ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uLzAwLUlOREVYCmluZGV4IGMxN2NkNGIuLjFiNzc3YjkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi8wMC1JTkRFWApAQCAtMzI4LDggKzMyOCw2IEBACiAJLSBpbmZvIG9uIHRoZSBtYWdpYyBTeXNScSBrZXkuCiB0ZWxlcGhvbnkvCiAJLSBkaXJlY3Rvcnkgd2l0aCBpbmZvIG9uIHRlbGVwaG9ueSAoZS5nLiB2b2ljZSBvdmVyIElQKSBzdXBwb3J0LgotdW1sLwotCS0gZGlyZWN0b3J5IHdpdGggaW5mb3JtYXRpb24gYWJvdXQgVXNlciBNb2RlIExpbnV4LgogdW5pY29kZS50eHQKIAktIGluZm8gb24gdGhlIFVuaWNvZGUgY2hhcmFjdGVyL2ZvbnQgbWFwcGluZyB1c2VkIGluIExpbnV4LgogdW5zaGFyZS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWJjbWEgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1iY21hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YjYyYmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1iY21hCkBAIC0wLDAgKzEsMzEgQEAKK1doYXQ6CQkvc3lzL2J1cy9iY21hL2RldmljZXMvLi4uL21hbnVmCitEYXRlOgkJTWF5IDIwMTEKK0tlcm5lbFZlcnNpb246CTIuNi40MAorQ29udGFjdDoJUmFmYcWCIE1pxYJlY2tpIDx6YWplYzVAZ21haWwuY29tPgorRGVzY3JpcHRpb246CisJCUVhY2ggQkNNQSBjb3JlIGhhcyBpdCdzIG1hbnVmYWN0dXJlciBpZC4gU2VlCisJCWluY2x1ZGUvbGludXgvYmNtYS9iY21hLmggZm9yIHBvc3NpYmxlIHZhbHVlcy4KKworV2hhdDoJCS9zeXMvYnVzL2JjbWEvZGV2aWNlcy8uLi4vaWQKK0RhdGU6CQlNYXkgMjAxMQorS2VybmVsVmVyc2lvbjoJMi42LjQwCitDb250YWN0OglSYWZhxYIgTWnFgmVja2kgPHphamVjNUBnbWFpbC5jb20+CitEZXNjcmlwdGlvbjoKKwkJVGhlcmUgYXJlIGEgZmV3IHR5cGVzIG9mIEJDTUEgY29yZXMsIHRoZXkgY2FuIGJlIGlkZW50aWZpZWQgYnkKKwkJaWQgZmllbGQuCisKK1doYXQ6CQkvc3lzL2J1cy9iY21hL2RldmljZXMvLi4uL3JldgorRGF0ZToJCU1heSAyMDExCitLZXJuZWxWZXJzaW9uOgkyLjYuNDAKK0NvbnRhY3Q6CVJhZmHFgiBNacWCZWNraSA8emFqZWM1QGdtYWlsLmNvbT4KK0Rlc2NyaXB0aW9uOgorCQlCQ01BIGNvcmVzIG9mIHRoZSBzYW1lIHR5cGUgY2FuIHN0aWxsIHNsaWdodGx5IGRpZmZlciBkZXBlbmRpbmcKKwkJb24gdGhlaXIgcmV2aXNpb24uIFVzZSBpdCBmb3IgZGV0YWlsZWQgcHJvZ3JhbW1pbmcuCisKK1doYXQ6CQkvc3lzL2J1cy9iY21hL2RldmljZXMvLi4uL2NsYXNzCitEYXRlOgkJTWF5IDIwMTEKK0tlcm5lbFZlcnNpb246CTIuNi40MAorQ29udGFjdDoJUmFmYcWCIE1pxYJlY2tpIDx6YWplYzVAZ21haWwuY29tPgorRGVzY3JpcHRpb246CisJCUVhY2ggQkNNQSBjb3JlIGlzIGlkZW50aWZpZWQgYnkgZmV3IGZpZWxkcywgaW5jbHVkaW5nIGNsYXNzIGl0CisJCWJlbG9uZ3MgdG8uIFNlZSBpbmNsdWRlL2xpbnV4L2JjbWEvYmNtYS5oIGZvciBwb3NzaWJsZSB2YWx1ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRldmljZXMtc3lzdGVtLWNwdSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1zeXN0ZW0tY3B1CmluZGV4IDc1NjRlODguLmU3YmU3NWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1zeXN0ZW0tY3B1CisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1zeXN0ZW0tY3B1CkBAIC0xODMsMjEgKzE4MywyMSBAQAogCQl0byBsZWFybiBob3cgdG8gY29udHJvbCB0aGUga25vYnMuCiAKIAotV2hhdDogICAgICAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUqL2NhY2hlL2luZGV4Ki9jYWNoZV9kaXNhYmxlX1gKLURhdGU6ICAgICAgQXVndXN0IDIwMDgKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUqL2NhY2hlL2luZGV4My9jYWNoZV9kaXNhYmxlX3swLDF9CitEYXRlOgkJQXVndXN0IDIwMDgKIEtlcm5lbFZlcnNpb246CTIuNi4yNwotQ29udGFjdDoJbWFyay5sYW5nc2RvcmZAYW1kLmNvbQotRGVzY3JpcHRpb246CVRoZXNlIGZpbGVzIGV4aXN0IGluIGV2ZXJ5IGNwdSdzIGNhY2hlIGluZGV4IGRpcmVjdG9yaWVzLgotCQlUaGVyZSBhcmUgY3VycmVudGx5IDIgY2FjaGVfZGlzYWJsZV8jIGZpbGVzIGluIGVhY2gKLQkJZGlyZWN0b3J5LiAgUmVhZGluZyBmcm9tIHRoZXNlIGZpbGVzIG9uIGEgc3VwcG9ydGVkCi0JCXByb2Nlc3NvciB3aWxsIHJldHVybiB0aGF0IGNhY2hlIGRpc2FibGUgaW5kZXggdmFsdWUKLQkJZm9yIHRoYXQgcHJvY2Vzc29yIGFuZCBub2RlLiAgV3JpdGluZyB0byBvbmUgb2YgdGhlc2UKLQkJZmlsZXMgd2lsbCBjYXVzZSB0aGUgc3BlY2lmaWNlZCBjYWNoZSBpbmRleCB0byBiZSBkaXNhYmxlZC4KK0NvbnRhY3Q6CWRpc2N1c3NAeDg2LTY0Lm9yZworRGVzY3JpcHRpb246CURpc2FibGUgTDMgY2FjaGUgaW5kaWNlcwogCi0JCUN1cnJlbnRseSwgb25seSBBTUQgRmFtaWx5IDEwaCBQcm9jZXNzb3JzIHN1cHBvcnQgY2FjaGUgaW5kZXgKLQkJZGlzYWJsZSwgYW5kIG9ubHkgZm9yIHRoZWlyIEwzIGNhY2hlcy4gIFNlZSB0aGUgQklPUyBhbmQKLQkJS2VybmVsIERldmVsb3BlcidzIEd1aWRlIGF0Ci0JCWh0dHA6Ly9zdXBwb3J0LmFtZC5jb20vdXMvRW1iZWRkZWRfVGVjaERvY3MvMzExMTYtUHVibGljLUdILUJLREdfMy0yOF81LTI4LTA5LnBkZgkKLQkJZm9yIGZvcm1hdHRpbmcgaW5mb3JtYXRpb24gYW5kIG90aGVyIGRldGFpbHMgb24gdGhlCi0JCWNhY2hlIGluZGV4IGRpc2FibGUuCi1Vc2VyczogICAgam9hY2hpbS5kZWd1YXJhQGFtZC5jb20KKwkJVGhlc2UgZmlsZXMgZXhpc3QgaW4gZXZlcnkgQ1BVJ3MgY2FjaGUvaW5kZXgzIGRpcmVjdG9yeS4gRWFjaAorCQljYWNoZV9kaXNhYmxlX3swLDF9IGZpbGUgY29ycmVzcG9uZHMgdG8gb25lIGRpc2FibGUgc2xvdCB3aGljaAorCQljYW4gYmUgdXNlZCB0byBkaXNhYmxlIGEgY2FjaGUgaW5kZXguIFJlYWRpbmcgZnJvbSB0aGVzZSBmaWxlcworCQlvbiBhIHByb2Nlc3NvciB3aXRoIHRoaXMgZnVuY3Rpb25hbGl0eSB3aWxsIHJldHVybiB0aGUgY3VycmVudGx5CisJCWRpc2FibGVkIGluZGV4IGZvciB0aGF0IG5vZGUuIFRoZXJlIGlzIG9uZSBMMyBzdHJ1Y3R1cmUgcGVyCisJCW5vZGUsIG9yIHBlciBpbnRlcm5hbCBub2RlIG9uIE1DTSBtYWNoaW5lcy4gV3JpdGluZyBhIHZhbGlkCisJCWluZGV4IHRvIG9uZSBvZiB0aGVzZSBmaWxlcyB3aWxsIGNhdXNlIHRoZSBzcGVjaWZpY2VkIGNhY2hlCisJCWluZGV4IHRvIGJlIGRpc2FibGVkLgorCisJCUFsbCBBTUQgcHJvY2Vzc29ycyB3aXRoIEwzIGNhY2hlcyBwcm92aWRlIHRoaXMgZnVuY3Rpb25hbGl0eS4KKwkJRm9yIGRldGFpbHMsIHNlZSBCS0RHcyBhdAorCQlodHRwOi8vZGV2ZWxvcGVyLmFtZC5jb20vZG9jdW1lbnRhdGlvbi9ndWlkZXMvUGFnZXMvZGVmYXVsdC5hc3B4CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWZpcm13YXJlLWRtaSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZmlybXdhcmUtZG1pCmluZGV4IGJhOWRhOTUuLmM3OGY5YWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZmlybXdhcmUtZG1pCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZmlybXdhcmUtZG1pCkBAIC0xNCwxNCArMTQsMTUgQEAKIAogCQlETUkgaXMgc3RydWN0dXJlZCBhcyBhIGxhcmdlIHRhYmxlIG9mIGVudHJpZXMsIHdoZXJlCiAJCWVhY2ggZW50cnkgaGFzIGEgY29tbW9uIGhlYWRlciBpbmRpY2F0aW5nIHRoZSB0eXBlIGFuZAotCQlsZW5ndGggb2YgdGhlIGVudHJ5LCBhcyB3ZWxsIGFzICdoYW5kbGUnIHRoYXQgaXMKLQkJc3VwcG9zZWQgdG8gYmUgdW5pcXVlIGFtb25nc3QgYWxsIGVudHJpZXMuCisJCWxlbmd0aCBvZiB0aGUgZW50cnksIGFzIHdlbGwgYXMgYSBmaXJtd2FyZS1wcm92aWRlZAorCQknaGFuZGxlJyB0aGF0IGlzIHN1cHBvc2VkIHRvIGJlIHVuaXF1ZSBhbW9uZ3N0IGFsbAorCQllbnRyaWVzLgogCiAJCVNvbWUgZW50cmllcyBhcmUgcmVxdWlyZWQgYnkgdGhlIHNwZWNpZmljYXRpb24sIGJ1dCBtYW55CiAJCW90aGVycyBhcmUgb3B0aW9uYWwuICBJbiBnZW5lcmFsIHRob3VnaCwgdXNlcnMgc2hvdWxkCiAJCW5ldmVyIGV4cGVjdCB0byBmaW5kIGEgc3BlY2lmaWMgZW50cnkgdHlwZSBvbiB0aGVpcgogCQlzeXN0ZW0gdW5sZXNzIHRoZXkga25vdyBmb3IgY2VydGFpbiB3aGF0IHRoZWlyIGZpcm13YXJlCi0JCWlzIGRvaW5nLiAgTWFjaGluZSB0byBtYWNoaW5lIHdpbGwgdmFyeS4KKwkJaXMgZG9pbmcuICBNYWNoaW5lIHRvIG1hY2hpbmUgZXhwZXJpZW5jZXMgd2lsbCB2YXJ5LgogCiAJCU11bHRpcGxlIGVudHJpZXMgb2YgdGhlIHNhbWUgdHlwZSBhcmUgYWxsb3dlZC4gIEluIG9yZGVyCiAJCXRvIGhhbmRsZSB0aGVzZSBkdXBsaWNhdGUgZW50cnkgdHlwZXMsIGVhY2ggZW50cnkgaXMKQEAgLTY3LDI1ICs2OCwyNCBAQAogCQkJICBhbmQgdGhlIHR3byB0ZXJtaW5hdGluZyBudWwgY2hhcmFjdGVycy4KIAkJdHlwZQk6IFRoZSB0eXBlIG9mIHRoZSBlbnRyeS4gIFRoaXMgdmFsdWUgaXMgdGhlIHNhbWUKIAkJCSAgYXMgZm91bmQgaW4gdGhlIGRpcmVjdG9yeSBuYW1lLiAgSXQgaW5kaWNhdGVzCi0JCQkgIGhvdyB0aGUgcmVzdCBvZiB0aGUgZW50cnkgc2hvdWxkIGJlCi0JCQkgIGludGVycHJldGVkLgorCQkJICBob3cgdGhlIHJlc3Qgb2YgdGhlIGVudHJ5IHNob3VsZCBiZSBpbnRlcnByZXRlZC4KIAkJaW5zdGFuY2U6IFRoZSBpbnN0YW5jZSBvcmRpbmFsIG9mIHRoZSBlbnRyeSBmb3IgdGhlCiAJCQkgIGdpdmVuIHR5cGUuICBUaGlzIHZhbHVlIGlzIHRoZSBzYW1lIGFzIGZvdW5kCiAJCQkgIGluIHRoZSBwYXJlbnQgZGlyZWN0b3J5IG5hbWUuCi0JCXBvc2l0aW9uOiBUaGUgcG9zaXRpb24gb2YgdGhlIGVudHJ5IHdpdGhpbiB0aGUgZW50aXJldHkKLQkJCSAgb2YgdGhlIGVudGlyZXR5LgorCQlwb3NpdGlvbjogVGhlIG9yZGluYWwgcG9zaXRpb24gKHplcm8tYmFzZWQpIG9mIHRoZSBlbnRyeQorCQkJICB3aXRoaW4gdGhlIGVudGlyZXR5IG9mIHRoZSBETUkgZW50cnkgdGFibGUuCiAKIAkJPT09IEVudHJ5IFNwZWNpYWxpemF0aW9uID09PQogCiAJCVNvbWUgZW50cnkgdHlwZXMgbWF5IGhhdmUgb3RoZXIgaW5mb3JtYXRpb24gYXZhaWxhYmxlIGluCi0JCXN5c2ZzLgorCQlzeXNmcy4gIE5vdCBhbGwgdHlwZXMgYXJlIHNwZWNpYWxpemVkLgogCiAJCS0tLSBUeXBlIDE1IC0gU3lzdGVtIEV2ZW50IExvZyAtLS0KIAogCQlUaGlzIGVudHJ5IGFsbG93cyB0aGUgZmlybXdhcmUgdG8gZXhwb3J0IGEgbG9nIG9mCiAJCWV2ZW50cyB0aGUgc3lzdGVtIGhhcyB0YWtlbi4gIFRoaXMgaW5mb3JtYXRpb24gaXMKIAkJdHlwaWNhbGx5IGJhY2tlZCBieSBudnJhbSwgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbgotCQlkZXRhaWxzIGFyZSBhYnN0cmFjdGVkIGJ5IHRoaXMgdGFibGUuICBUaGlzIGVudHJpZXMgZGF0YQorCQlkZXRhaWxzIGFyZSBhYnN0cmFjdGVkIGJ5IHRoaXMgdGFibGUuICBUaGlzIGVudHJ5J3MgZGF0YQogCQlpcyBleHBvcnRlZCBpbiB0aGUgZGlyZWN0b3J5OgogCiAJCS9zeXMvZmlybXdhcmUvZG1pL2VudHJpZXMvMTUtMC9zeXN0ZW1fZXZlbnRfbG9nCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWZpcm13YXJlLWdzbWkgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWZpcm13YXJlLWdzbWkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZhYTBhYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZmlybXdhcmUtZ3NtaQpAQCAtMCwwICsxLDU4IEBACitXaGF0OgkJL3N5cy9maXJtd2FyZS9nc21pCitEYXRlOgkJTWFyY2ggMjAxMQorQ29udGFjdDoJTWlrZSBXYXljaGlzb24gPG1pa2V3QGdvb2dsZS5jb20+CitEZXNjcmlwdGlvbjoKKwkJU29tZSBzZXJ2ZXJzIHVzZWQgaW50ZXJuYWxseSBhdCBHb29nbGUgaGF2ZSBmaXJtd2FyZQorCQl0aGF0IHByb3ZpZGVzIGNhbGxiYWNrIGZ1bmN0aW9uYWxpdHkgdmlhIGV4cGxpY2l0IFNNSQorCQl0cmlnZ2Vycy4gIFNvbWUgb2YgdGhlIGNhbGxiYWNrcyBhcmUgc2ltaWxhciB0byB0aG9zZQorCQlwcm92aWRlZCBieSB0aGUgRUZJIHJ1bnRpbWUgc2VydmljZXMgcGFnZSwgYnV0IGR1ZSB0bworCQloaXN0b3JpY2FsIHJlYXNvbnMgdGhpcyBkaWZmZXJlbnQgZW50cnktcG9pbnQgaGFzIGJlZW4KKwkJdXNlZC4KKworCQlUaGUgZ3NtaSBkcml2ZXIgaW1wbGVtZW50cyB0aGUga2VybmVsJ3MgYWJzdHJhY3Rpb24gZm9yCisJCXRoZXNlIGZpcm13YXJlIGNhbGxiYWNrcy4gIEN1cnJlbnRseSwgdGhpcyBmdW5jdGlvbmFsaXR5CisJCWlzIGxpbWl0ZWQgdG8gaGFuZGxpbmcgdGhlIHN5c3RlbSBldmVudCBsb2cgYW5kIGdldHRpbmcKKwkJYWNjZXNzIHRvIEVGSS1zdHlsZSB2YXJpYWJsZXMgc3RvcmVkIGluIG52cmFtLgorCisJCUxheW91dDoKKworCQkvc3lzL2Zpcm13YXJlL2dzbWkvdmFyczoKKworCQkJVGhpcyBkaXJlY3RvcnkgaGFzIHRoZSBzYW1lIGxheW91dCAoYW5kCisJCQl1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIGFzIC9zeXMvZmlybXdhcmUvZWZpL3ZhcnMuCisJCQlTZWUgRG9jdW1lbnRhdGlvbi9BQkkvKi9zeXNmcy1maXJtd2FyZS1lZmktdmFycworCQkJZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGludGVyYWN0IHdpdGgKKwkJCXRoaXMgc3RydWN0dXJlLgorCisJCS9zeXMvZmlybXdhcmUvZ3NtaS9hcHBlbmRfdG9fZXZlbnRsb2cgLSB3cml0ZS1vbmx5OgorCisJCQlUaGlzIGZpbGUgdGFrZXMgYSBiaW5hcnkgYmxvYiBhbmQgcGFzc2VzIGl0IG9udG8KKwkJCXRoZSBmaXJtd2FyZSB0byBiZSB0aW1lc3RhbXBlZCBhbmQgYXBwZW5kZWQgdG8KKwkJCXRoZSBzeXN0ZW0gZXZlbnRsb2cuICBUaGUgYmluYXJ5IGZvcm1hdCBpcworCQkJaW50ZXJwcmV0ZWQgYnkgdGhlIGZpcm13YXJlIGFuZCBtYXkgY2hhbmdlIGZyb20KKwkJCXBsYXRmb3JtIHRvIHBsYXRmb3JtLiAgVGhlIG9ubHkga2VybmVsLWVuZm9yY2VkCisJCQlyZXF1aXJlbWVudCBpcyB0aGF0IHRoZSBibG9iIGJlIHByZWZpeGVkIHdpdGggYQorCQkJMzJiaXQgaG9zdC1lbmRpYW4gdHlwZSB1c2VkIGFzIHBhcnQgb2YgdGhlCisJCQlmaXJtd2FyZSBjYWxsLgorCisJCS9zeXMvZmlybXdhcmUvZ3NtaS9jbGVhcl9jb25maWcgLSB3cml0ZS1vbmx5OgorCisJCQlXcml0aW5nIGFueSB2YWx1ZSB0byB0aGlzIGZpbGUgd2lsbCBjYXVzZSB0aGUKKwkJCWVudGlyZSBmaXJtd2FyZSBjb25maWd1cmF0aW9uIHRvIGJlIHJlc2V0IHRvCisJCQkiZmFjdG9yeSBkZWZhdWx0cyIuICBDYWxsZXJzIHNob3VsZCBhc3N1bWUgdGhhdAorCQkJYSByZWJvb3QgaXMgcmVxdWlyZWQgZm9yIHRoZSBjb25maWd1cmF0aW9uIHRvIGJlCisJCQljbGVhcmVkLgorCisJCS9zeXMvZmlybXdhcmUvZ3NtaS9jbGVhcl9ldmVudGxvZyAtIHdyaXRlLW9ubHk6CisKKwkJCVRoaXMgZmlsZSBpcyB1c2VkIHRvIGNsZWFyIG91dCBhIHBvcnRpb24vdGhlCisJCQl3aG9sZSBvZiB0aGUgc3lzdGVtIGV2ZW50IGxvZy4gIFZhbHVlcyB3cml0dGVuCisJCQlzaG91bGQgYmUgdmFsdWVzIGJldHdlZW4gMSBhbmQgMTAwIGluY2x1c2l2ZSAoaW4KKwkJCUFTQ0lJKSByZXByZXNlbnRpbmcgdGhlIGZyYWN0aW9uIG9mIHRoZSBsb2cgdG8KKwkJCWNsZWFyLiAgTm90IGFsbCBwbGF0Zm9ybXMgc3VwcG9ydCBmcmFjdGlvbmFsCisJCQljbGVhcmluZyB0aG91Z2gsIGFuZCB0aGlzIHdyaXRlcyB0byB0aGlzIGZpbGUKKwkJCXdpbGwgZXJyb3Igb3V0IGlmIHRoZSBmaXJtd2FyZSBkb2Vzbid0IGxpa2UgeW91cgorCQkJc3VibWl0dGVkIGZyYWN0aW9uLgorCisJCQlDYWxsZXJzIHNob3VsZCBhc3N1bWUgdGhhdCBhIHJlYm9vdCBpcyBuZWVkZWQKKwkJCWZvciB0aGlzIG9wZXJhdGlvbiB0byBjb21wbGV0ZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZmlybXdhcmUtbG9nIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1maXJtd2FyZS1sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI1OGU3YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZmlybXdhcmUtbG9nCkBAIC0wLDAgKzEsNyBAQAorV2hhdDoJCS9zeXMvZmlybXdhcmUvbG9nCitEYXRlOgkJRmVicnVhcnkgMjAxMQorQ29udGFjdDoJTWlrZSBXYXljaGlzb24gPG1pa2V3QGdvb2dsZS5jb20+CitEZXNjcmlwdGlvbjoKKwkJVGhlIC9zeXMvZmlybXdhcmUvbG9nIGlzIGEgYmluYXJ5IGZpbGUgdGhhdCByZXByZXNlbnRzIGEKKwkJcmVhZC1vbmx5IGNvcHkgb2YgdGhlIGZpcm13YXJlJ3MgbG9nIGlmIG9uZSBpcworCQlhdmFpbGFibGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1mc2NhcHMgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1mc2NhcHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBhMzAzMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLWZzY2FwcwpAQCAtMCwwICsxLDggQEAKK1doYXQ6CQkvc3lzL2tlcm5lbC9mc2NhcHMKK0RhdGU6CQlGZWJydWFyeSAyMDExCitLZXJuZWxWZXJzaW9uOgkyLjYuMzgKK0NvbnRhY3Q6CUx1ZHdpZyBOdXNzZWwgPGx1ZHdpZy5udXNzZWxAc3VzZS5kZT4KK0Rlc2NyaXB0aW9uCisJCVNob3dzIHdoZXRoZXIgZmlsZSBzeXN0ZW0gY2FwYWJpbGl0aWVzIGFyZSBob25vcmVkCisJCXdoZW4gZXhlY3V0aW5nIGEgYmluYXJ5CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcG93ZXIgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBvd2VyCmluZGV4IDE5NGNhNDQuLmI0NjRkMTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcG93ZXIKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wb3dlcgpAQCAtMTU4LDMgKzE1OCwxNyBAQAogCQlzdWNjZXNzZnVsLCB3aWxsIG1ha2UgdGhlIGtlcm5lbCBhYm9ydCBhIHN1YnNlcXVlbnQgdHJhbnNpdGlvbgogCQl0byBhIHNsZWVwIHN0YXRlIGlmIGFueSB3YWtldXAgZXZlbnRzIGFyZSByZXBvcnRlZCBhZnRlciB0aGUKIAkJd3JpdGUgaGFzIHJldHVybmVkLgorCitXaGF0OgkJL3N5cy9wb3dlci9yZXNlcnZlZF9zaXplCitEYXRlOgkJTWF5IDIwMTEKK0NvbnRhY3Q6CVJhZmFlbCBKLiBXeXNvY2tpIDxyandAc2lzay5wbD4KK0Rlc2NyaXB0aW9uOgorCQlUaGUgL3N5cy9wb3dlci9yZXNlcnZlZF9zaXplIGZpbGUgYWxsb3dzIHVzZXIgc3BhY2UgdG8gY29udHJvbAorCQl0aGUgYW1vdW50IG9mIG1lbW9yeSByZXNlcnZlZCBmb3IgYWxsb2NhdGlvbnMgbWFkZSBieSBkZXZpY2UKKwkJZHJpdmVycyBkdXJpbmcgdGhlICJkZXZpY2UgZnJlZXplIiBzdGFnZSBvZiBoaWJlcm5hdGlvbi4gIEl0IGNhbgorCQliZSB3cml0dGVuIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHRoYXQKKwkJd2lsbCBiZSB1c2VkIGFzIHRoZSBhbW91bnQgb2YgbWVtb3J5IHRvIHJlc2VydmUgZm9yIGFsbG9jYXRpb25zCisJCW1hZGUgYnkgZGV2aWNlIGRyaXZlcnMnICJmcmVlemUiIGNhbGxiYWNrcywgaW4gYnl0ZXMuCisKKwkJUmVhZGluZyBmcm9tIHRoaXMgZmlsZSB3aWxsIGRpc3BsYXkgdGhlIGN1cnJlbnQgdmFsdWUsIHdoaWNoIGlzCisJCXNldCB0byAxIE1CIGJ5IGRlZmF1bHQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlLWRyaXZlcnMudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kZXZpY2UtZHJpdmVycy50bXBsCmluZGV4IDM2ZjYzZDQuLmI2MzhlNTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kZXZpY2UtZHJpdmVycy50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kZXZpY2UtZHJpdmVycy50bXBsCkBAIC05NiwxMCArOTYsMTAgQEAKIAogICA8Y2hhcHRlciBpZD0iZGV2ZHJpdmVycyI+CiAgICAgIDx0aXRsZT5EZXZpY2UgZHJpdmVycyBpbmZyYXN0cnVjdHVyZTwvdGl0bGU+CisgICAgIDxzZWN0MT48dGl0bGU+VGhlIEJhc2ljIERldmljZSBEcml2ZXItTW9kZWwgU3RydWN0dXJlcyA8L3RpdGxlPgorIUlpbmNsdWRlL2xpbnV4L2RldmljZS5oCisgICAgIDwvc2VjdDE+CiAgICAgIDxzZWN0MT48dGl0bGU+RGV2aWNlIERyaXZlcnMgQmFzZTwvdGl0bGU+Ci08IS0tCi1YIUlpbmNsdWRlL2xpbnV4L2RldmljZS5oCi0tLT4KICFFZHJpdmVycy9iYXNlL2RyaXZlci5jCiAhRWRyaXZlcnMvYmFzZS9jb3JlLmMKICFFZHJpdmVycy9iYXNlL2NsYXNzLmMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9nZW5lcmljaXJxLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ2VuZXJpY2lycS50bXBsCmluZGV4IGZiMTBmZDAuLmIzNDIyMzQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9nZW5lcmljaXJxLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dlbmVyaWNpcnEudG1wbApAQCAtMTkxLDggKzE5MSw4IEBACiAJPHBhcmE+CiAJV2hlbmV2ZXIgYW4gaW50ZXJydXB0IHRyaWdnZXJzLCB0aGUgbG93bGV2ZWwgYXJjaCBjb2RlIGNhbGxzIGludG8KIAl0aGUgZ2VuZXJpYyBpbnRlcnJ1cHQgY29kZSBieSBjYWxsaW5nIGRlc2MtPmhhbmRsZV9pcnEoKS4KLQlUaGlzIGhpZ2hsZXZlbCBJUlEgaGFuZGxpbmcgZnVuY3Rpb24gb25seSB1c2VzIGRlc2MtPmNoaXAgcHJpbWl0aXZlcwotCXJlZmVyZW5jZWQgYnkgdGhlIGFzc2lnbmVkIGNoaXAgZGVzY3JpcHRvciBzdHJ1Y3R1cmUuCisJVGhpcyBoaWdobGV2ZWwgSVJRIGhhbmRsaW5nIGZ1bmN0aW9uIG9ubHkgdXNlcyBkZXNjLT5pcnFfZGF0YS5jaGlwCisJcHJpbWl0aXZlcyByZWZlcmVuY2VkIGJ5IHRoZSBhc3NpZ25lZCBjaGlwIGRlc2NyaXB0b3Igc3RydWN0dXJlLgogCTwvcGFyYT4KICAgICA8L3NlY3QxPgogICAgIDxzZWN0MSBpZD0iSGlnaGxldmVsX0RyaXZlcl9BUEkiPgpAQCAtMjA2LDExICsyMDYsMTEgQEAKIAkgIDxsaXN0aXRlbT48cGFyYT5lbmFibGVfaXJxKCk8L3BhcmE+PC9saXN0aXRlbT4KIAkgIDxsaXN0aXRlbT48cGFyYT5kaXNhYmxlX2lycV9ub3N5bmMoKSAoU01QIG9ubHkpPC9wYXJhPjwvbGlzdGl0ZW0+CiAJICA8bGlzdGl0ZW0+PHBhcmE+c3luY2hyb25pemVfaXJxKCkgKFNNUCBvbmx5KTwvcGFyYT48L2xpc3RpdGVtPgotCSAgPGxpc3RpdGVtPjxwYXJhPnNldF9pcnFfdHlwZSgpPC9wYXJhPjwvbGlzdGl0ZW0+Ci0JICA8bGlzdGl0ZW0+PHBhcmE+c2V0X2lycV93YWtlKCk8L3BhcmE+PC9saXN0aXRlbT4KLQkgIDxsaXN0aXRlbT48cGFyYT5zZXRfaXJxX2RhdGEoKTwvcGFyYT48L2xpc3RpdGVtPgotCSAgPGxpc3RpdGVtPjxwYXJhPnNldF9pcnFfY2hpcCgpPC9wYXJhPjwvbGlzdGl0ZW0+Ci0JICA8bGlzdGl0ZW0+PHBhcmE+c2V0X2lycV9jaGlwX2RhdGEoKTwvcGFyYT48L2xpc3RpdGVtPgorCSAgPGxpc3RpdGVtPjxwYXJhPmlycV9zZXRfaXJxX3R5cGUoKTwvcGFyYT48L2xpc3RpdGVtPgorCSAgPGxpc3RpdGVtPjxwYXJhPmlycV9zZXRfaXJxX3dha2UoKTwvcGFyYT48L2xpc3RpdGVtPgorCSAgPGxpc3RpdGVtPjxwYXJhPmlycV9zZXRfaGFuZGxlcl9kYXRhKCk8L3BhcmE+PC9saXN0aXRlbT4KKwkgIDxsaXN0aXRlbT48cGFyYT5pcnFfc2V0X2NoaXAoKTwvcGFyYT48L2xpc3RpdGVtPgorCSAgPGxpc3RpdGVtPjxwYXJhPmlycV9zZXRfY2hpcF9kYXRhKCk8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgICAgICA8L2l0ZW1pemVkbGlzdD4KIAkgIFNlZSB0aGUgYXV0b2dlbmVyYXRlZCBmdW5jdGlvbiBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLgogCTwvcGFyYT4KQEAgLTIyNSw2ICsyMjUsOCBAQAogCSAgPGxpc3RpdGVtPjxwYXJhPmhhbmRsZV9mYXN0ZW9pX2lycTwvcGFyYT48L2xpc3RpdGVtPgogCSAgPGxpc3RpdGVtPjxwYXJhPmhhbmRsZV9zaW1wbGVfaXJxPC9wYXJhPjwvbGlzdGl0ZW0+CiAJICA8bGlzdGl0ZW0+PHBhcmE+aGFuZGxlX3BlcmNwdV9pcnE8L3BhcmE+PC9saXN0aXRlbT4KKwkgIDxsaXN0aXRlbT48cGFyYT5oYW5kbGVfZWRnZV9lb2lfaXJxPC9wYXJhPjwvbGlzdGl0ZW0+CisJICA8bGlzdGl0ZW0+PHBhcmE+aGFuZGxlX2JhZF9pcnE8L3BhcmE+PC9saXN0aXRlbT4KIAkgIDwvaXRlbWl6ZWRsaXN0PgogCSAgVGhlIGludGVycnVwdCBmbG93IGhhbmRsZXJzIChlaXRoZXIgcHJlZGVmaW5lZCBvciBhcmNoaXRlY3R1cmUKIAkgIHNwZWNpZmljKSBhcmUgYXNzaWduZWQgdG8gc3BlY2lmaWMgaW50ZXJydXB0cyBieSB0aGUgYXJjaGl0ZWN0dXJlCkBAIC0yNDEsMTMgKzI0MywxMyBAQAogCQk8cHJvZ3JhbWxpc3Rpbmc+CiBkZWZhdWx0X2VuYWJsZShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCiB7Ci0JZGVzYy0+Y2hpcC0+aXJxX3VubWFzayhkYXRhKTsKKwlkZXNjLT5pcnFfZGF0YS5jaGlwLT5pcnFfdW5tYXNrKGRhdGEpOwogfQogCiBkZWZhdWx0X2Rpc2FibGUoc3RydWN0IGlycV9kYXRhICpkYXRhKQogewogCWlmICghZGVsYXlfZGlzYWJsZShkYXRhKSkKLQkJZGVzYy0+Y2hpcC0+aXJxX21hc2soZGF0YSk7CisJCWRlc2MtPmlycV9kYXRhLmNoaXAtPmlycV9tYXNrKGRhdGEpOwogfQogCiBkZWZhdWx0X2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCkBAIC0yODQsOSArMjg2LDkgQEAKIAkJPHBhcmE+CiAJCVRoZSBmb2xsb3dpbmcgY29udHJvbCBmbG93IGlzIGltcGxlbWVudGVkIChzaW1wbGlmaWVkIGV4Y2VycHQpOgogCQk8cHJvZ3JhbWxpc3Rpbmc+Ci1kZXNjLT5jaGlwLT5pcnFfbWFzaygpOwotaGFuZGxlX0lSUV9ldmVudChkZXNjLT5hY3Rpb24pOwotZGVzYy0+Y2hpcC0+aXJxX3VubWFzaygpOworZGVzYy0+aXJxX2RhdGEuY2hpcC0+aXJxX21hc2tfYWNrKCk7CitoYW5kbGVfaXJxX2V2ZW50KGRlc2MtPmFjdGlvbik7CitkZXNjLT5pcnFfZGF0YS5jaGlwLT5pcnFfdW5tYXNrKCk7CiAJCTwvcHJvZ3JhbWxpc3Rpbmc+CiAJCTwvcGFyYT4KIAkgICAgPC9zZWN0Mz4KQEAgLTMwMCw4ICszMDIsOCBAQAogCQk8cGFyYT4KIAkJVGhlIGZvbGxvd2luZyBjb250cm9sIGZsb3cgaXMgaW1wbGVtZW50ZWQgKHNpbXBsaWZpZWQgZXhjZXJwdCk6CiAJCTxwcm9ncmFtbGlzdGluZz4KLWhhbmRsZV9JUlFfZXZlbnQoZGVzYy0+YWN0aW9uKTsKLWRlc2MtPmNoaXAtPmlycV9lb2koKTsKK2hhbmRsZV9pcnFfZXZlbnQoZGVzYy0+YWN0aW9uKTsKK2Rlc2MtPmlycV9kYXRhLmNoaXAtPmlycV9lb2koKTsKIAkJPC9wcm9ncmFtbGlzdGluZz4KIAkJPC9wYXJhPgogCSAgICA8L3NlY3QzPgpAQCAtMzE1LDE3ICszMTcsMTcgQEAKIAkJVGhlIGZvbGxvd2luZyBjb250cm9sIGZsb3cgaXMgaW1wbGVtZW50ZWQgKHNpbXBsaWZpZWQgZXhjZXJwdCk6CiAJCTxwcm9ncmFtbGlzdGluZz4KIGlmIChkZXNjLT5zdGF0dXMgJmFtcDsgcnVubmluZykgewotCWRlc2MtPmNoaXAtPmlycV9tYXNrKCk7CisJZGVzYy0+aXJxX2RhdGEuY2hpcC0+aXJxX21hc2tfYWNrKCk7CiAJZGVzYy0+c3RhdHVzIHw9IHBlbmRpbmcgfCBtYXNrZWQ7CiAJcmV0dXJuOwogfQotZGVzYy0+Y2hpcC0+aXJxX2FjaygpOworZGVzYy0+aXJxX2RhdGEuY2hpcC0+aXJxX2FjaygpOwogZGVzYy0+c3RhdHVzIHw9IHJ1bm5pbmc7CiBkbyB7CiAJaWYgKGRlc2MtPnN0YXR1cyAmYW1wOyBtYXNrZWQpCi0JCWRlc2MtPmNoaXAtPmlycV91bm1hc2soKTsKKwkJZGVzYy0+aXJxX2RhdGEuY2hpcC0+aXJxX3VubWFzaygpOwogCWRlc2MtPnN0YXR1cyAmYW1wOz0gfnBlbmRpbmc7Ci0JaGFuZGxlX0lSUV9ldmVudChkZXNjLT5hY3Rpb24pOworCWhhbmRsZV9pcnFfZXZlbnQoZGVzYy0+YWN0aW9uKTsKIH0gd2hpbGUgKHN0YXR1cyAmYW1wOyBwZW5kaW5nKTsKIGRlc2MtPnN0YXR1cyAmYW1wOz0gfnJ1bm5pbmc7CiAJCTwvcHJvZ3JhbWxpc3Rpbmc+CkBAIC0zNDQsNyArMzQ2LDcgQEAKIAkJPHBhcmE+CiAJCVRoZSBmb2xsb3dpbmcgY29udHJvbCBmbG93IGlzIGltcGxlbWVudGVkIChzaW1wbGlmaWVkIGV4Y2VycHQpOgogCQk8cHJvZ3JhbWxpc3Rpbmc+Ci1oYW5kbGVfSVJRX2V2ZW50KGRlc2MtPmFjdGlvbik7CitoYW5kbGVfaXJxX2V2ZW50KGRlc2MtPmFjdGlvbik7CiAJCTwvcHJvZ3JhbWxpc3Rpbmc+CiAJCTwvcGFyYT4KICAgIAkgICAgPC9zZWN0Mz4KQEAgLTM2MiwxMiArMzY0LDI5IEBACiAJCTxwYXJhPgogCQlUaGUgZm9sbG93aW5nIGNvbnRyb2wgZmxvdyBpcyBpbXBsZW1lbnRlZCAoc2ltcGxpZmllZCBleGNlcnB0KToKIAkJPHByb2dyYW1saXN0aW5nPgotaGFuZGxlX0lSUV9ldmVudChkZXNjLT5hY3Rpb24pOwotaWYgKGRlc2MtPmNoaXAtPmlycV9lb2kpCi0gICAgICAgIGRlc2MtPmNoaXAtPmlycV9lb2koKTsKK2lmIChkZXNjLT5pcnFfZGF0YS5jaGlwLT5pcnFfYWNrKQorCWRlc2MtPmlycV9kYXRhLmNoaXAtPmlycV9hY2soKTsKK2hhbmRsZV9pcnFfZXZlbnQoZGVzYy0+YWN0aW9uKTsKK2lmIChkZXNjLT5pcnFfZGF0YS5jaGlwLT5pcnFfZW9pKQorICAgICAgICBkZXNjLT5pcnFfZGF0YS5jaGlwLT5pcnFfZW9pKCk7CiAJCTwvcHJvZ3JhbWxpc3Rpbmc+CiAJCTwvcGFyYT4KICAgIAkgICAgPC9zZWN0Mz4KKwkgICAgPHNlY3QzIGlkPSJFT0lfRWRnZV9JUlFfZmxvd19oYW5kbGVyIj4KKwkgCTx0aXRsZT5FT0kgRWRnZSBJUlEgZmxvdyBoYW5kbGVyPC90aXRsZT4KKwkJPHBhcmE+CisJCWhhbmRsZV9lZGdlX2VvaV9pcnEgcHJvdmlkZXMgYW4gYWJub21pbmF0aW9uIG9mIHRoZSBlZGdlCisJCWhhbmRsZXIgd2hpY2ggaXMgc29sZWx5IHVzZWQgdG8gdGFtZSBhIGJhZGx5IHdyZWNrYWdlZAorCQlpcnEgY29udHJvbGxlciBvbiBwb3dlcnBjL2NlbGwuCisJCTwvcGFyYT4KKyAgIAkgICAgPC9zZWN0Mz4KKwkgICAgPHNlY3QzIGlkPSJCQURfSVJRX2Zsb3dfaGFuZGxlciI+CisJIAk8dGl0bGU+QmFkIElSUSBmbG93IGhhbmRsZXI8L3RpdGxlPgorCQk8cGFyYT4KKwkJaGFuZGxlX2JhZF9pcnEgaXMgdXNlZCBmb3Igc3B1cmlvdXMgaW50ZXJydXB0cyB3aGljaAorCQloYXZlIG5vIHJlYWwgaGFuZGxlciBhc3NpZ25lZC4uCisJCTwvcGFyYT4KKyAgIAkgICAgPC9zZWN0Mz4KIAk8L3NlY3QyPgogCTxzZWN0MiBpZD0iUXVpcmtzX2FuZF9vcHRpbWl6YXRpb25zIj4KIAk8dGl0bGU+UXVpcmtzIGFuZCBvcHRpbWl6YXRpb25zPC90aXRsZT4KQEAgLTQxMCw2ICs0MjksNyBAQAogCSAgPGxpc3RpdGVtPjxwYXJhPmlycV9tYXNrX2FjaygpIC0gT3B0aW9uYWwsIHJlY29tbWVuZGVkIGZvciBwZXJmb3JtYW5jZTwvcGFyYT48L2xpc3RpdGVtPgogCSAgPGxpc3RpdGVtPjxwYXJhPmlycV9tYXNrKCk8L3BhcmE+PC9saXN0aXRlbT4KIAkgIDxsaXN0aXRlbT48cGFyYT5pcnFfdW5tYXNrKCk8L3BhcmE+PC9saXN0aXRlbT4KKwkgIDxsaXN0aXRlbT48cGFyYT5pcnFfZW9pKCkgLSBPcHRpb25hbCwgcmVxdWlyZWQgZm9yIGVvaSBmbG93IGhhbmRsZXJzPC9wYXJhPjwvbGlzdGl0ZW0+CiAJICA8bGlzdGl0ZW0+PHBhcmE+aXJxX3JldHJpZ2dlcigpIC0gT3B0aW9uYWw8L3BhcmE+PC9saXN0aXRlbT4KIAkgIDxsaXN0aXRlbT48cGFyYT5pcnFfc2V0X3R5cGUoKSAtIE9wdGlvbmFsPC9wYXJhPjwvbGlzdGl0ZW0+CiAJICA8bGlzdGl0ZW0+PHBhcmE+aXJxX3NldF93YWtlKCkgLSBPcHRpb25hbDwvcGFyYT48L2xpc3RpdGVtPgpAQCAtNDI0LDMyICs0NDQsMjQgQEAKICAgPGNoYXB0ZXIgaWQ9ImRvaXJxIj4KICAgICAgPHRpdGxlPl9fZG9fSVJRIGVudHJ5IHBvaW50PC90aXRsZT4KICAgICAgPHBhcmE+Ci0gCVRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBfX2RvX0lSUSgpIGlzIGFuIGFsdGVybmF0aXZlIGVudHJ5Ci0JcG9pbnQgZm9yIGFsbCB0eXBlcyBvZiBpbnRlcnJ1cHRzLgorCVRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBfX2RvX0lSUSgpIHdhcyBhbiBhbHRlcm5hdGl2ZSBlbnRyeQorCXBvaW50IGZvciBhbGwgdHlwZXMgb2YgaW50ZXJydXB0cy4gSXQgbm90IGxvbmdlciBleGlzdHMuCiAgICAgIDwvcGFyYT4KICAgICAgPHBhcmE+CiAJVGhpcyBoYW5kbGVyIHR1cm5lZCBvdXQgdG8gYmUgbm90IHN1aXRhYmxlIGZvciBhbGwKIAlpbnRlcnJ1cHQgaGFyZHdhcmUgYW5kIHdhcyB0aGVyZWZvcmUgcmVpbXBsZW1lbnRlZCB3aXRoIHNwbGl0Ci0JZnVuY3Rpb25hbGl0eSBmb3IgZWdkZS9sZXZlbC9zaW1wbGUvcGVyY3B1IGludGVycnVwdHMuIFRoaXMgaXMgbm90CisJZnVuY3Rpb25hbGl0eSBmb3IgZWRnZS9sZXZlbC9zaW1wbGUvcGVyY3B1IGludGVycnVwdHMuIFRoaXMgaXMgbm90CiAJb25seSBhIGZ1bmN0aW9uYWwgb3B0aW1pemF0aW9uLiBJdCBhbHNvIHNob3J0ZW5zIGNvZGUgcGF0aHMgZm9yCiAJaW50ZXJydXB0cy4KICAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotCVRvIG1ha2UgdXNlIG9mIHRoZSBzcGxpdCBpbXBsZW1lbnRhdGlvbiwgcmVwbGFjZSB0aGUgY2FsbCB0bwotCV9fZG9fSVJRIGJ5IGEgY2FsbCB0byBkZXNjLT5oYW5kbGVfaXJxKCkgYW5kIGFzc29jaWF0ZQotICAgICAgICB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlciBmdW5jdGlvbiB0byBkZXNjLT5oYW5kbGVfaXJxKCkuCi0JSW4gbW9zdCBjYXNlcyB0aGUgZ2VuZXJpYyBoYW5kbGVyIGltcGxlbWVudGF0aW9ucyBzaG91bGQKLQliZSBzdWZmaWNpZW50LgotICAgICA8L3BhcmE+CiAgIDwvY2hhcHRlcj4KIAogICA8Y2hhcHRlciBpZD0ibG9ja2luZyI+CiAgICAgIDx0aXRsZT5Mb2NraW5nIG9uIFNNUDwvdGl0bGU+CiAgICAgIDxwYXJhPgogCVRoZSBsb2NraW5nIG9mIGNoaXAgcmVnaXN0ZXJzIGlzIHVwIHRvIHRoZSBhcmNoaXRlY3R1cmUgdGhhdAotCWRlZmluZXMgdGhlIGNoaXAgcHJpbWl0aXZlcy4gVGhlcmUgaXMgYSBjaGlwLT5sb2NrIGZpZWxkIHRoYXQgY2FuIGJlIHVzZWQKLQlmb3Igc2VyaWFsaXphdGlvbiwgYnV0IHRoZSBnZW5lcmljIGxheWVyIGRvZXMgbm90IHRvdWNoIGl0LiBUaGUgcGVyLWlycQotCXN0cnVjdHVyZSBpcyBwcm90ZWN0ZWQgdmlhIGRlc2MtPmxvY2ssIGJ5IHRoZSBnZW5lcmljIGxheWVyLgorCWRlZmluZXMgdGhlIGNoaXAgcHJpbWl0aXZlcy4gVGhlIHBlci1pcnEgc3RydWN0dXJlIGlzCisJcHJvdGVjdGVkIHZpYSBkZXNjLT5sb2NrLCBieSB0aGUgZ2VuZXJpYyBsYXllci4KICAgICAgPC9wYXJhPgogICA8L2NoYXB0ZXI+CiAgIDxjaGFwdGVyIGlkPSJzdHJ1Y3RzIj4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS1lbnRpdGllcy50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhLWVudGl0aWVzLnRtcGwKaW5kZXggNWQyNTljNi4uZmVhNjNiNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhLWVudGl0aWVzLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhLWVudGl0aWVzLnRtcGwKQEAgLTI5NCw2ICsyOTQsNyBAQAogPCFFTlRJVFkgc3ViLXNyZ2diMTAgU1lTVEVNICJ2NGwvcGl4Zm10LXNyZ2diMTAueG1sIj4KIDwhRU5USVRZIHN1Yi1zcmdnYjggU1lTVEVNICJ2NGwvcGl4Zm10LXNyZ2diOC54bWwiPgogPCFFTlRJVFkgc3ViLXkxMCBTWVNURU0gInY0bC9waXhmbXQteTEwLnhtbCI+Cis8IUVOVElUWSBzdWIteTEyIFNZU1RFTSAidjRsL3BpeGZtdC15MTIueG1sIj4KIDwhRU5USVRZIHN1Yi1waXhmbXQgU1lTVEVNICJ2NGwvcGl4Zm10LnhtbCI+CiA8IUVOVElUWSBzdWItY3JvcGNhcCBTWVNURU0gInY0bC92aWRpb2MtY3JvcGNhcC54bWwiPgogPCFFTlRJVFkgc3ViLWRiZy1nLXJlZ2lzdGVyIFNZU1RFTSAidjRsL3ZpZGlvYy1kYmctZy1yZWdpc3Rlci54bWwiPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9tZWRpYS1pb2Mtc2V0dXAtbGluay54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL21lZGlhLWlvYy1zZXR1cC1saW5rLnhtbAppbmRleCAyMzMxZTc2Li5jZWM5N2FmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL21lZGlhLWlvYy1zZXR1cC1saW5rLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL21lZGlhLWlvYy1zZXR1cC1saW5rLnhtbApAQCAtMzQsNyArMzQsNyBAQAogICAgICAgPHZhcmxpc3RlbnRyeT4KIAk8dGVybT48cGFyYW1ldGVyPnJlcXVlc3Q8L3BhcmFtZXRlcj48L3Rlcm0+CiAJPGxpc3RpdGVtPgotCSAgPHBhcmE+TUVESUFfSU9DX0VOVU1fTElOS1M8L3BhcmE+CisJICA8cGFyYT5NRURJQV9JT0NfU0VUVVBfTElOSzwvcGFyYT4KIAk8L2xpc3RpdGVtPgogICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICA8dmFybGlzdGVudHJ5PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQteTEyLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXkxMi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY0MTdiOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXkxMi54bWwKQEAgLTAsMCArMSw3OSBAQAorPHJlZmVudHJ5IGlkPSJWNEwyLVBJWC1GTVQtWTEyIj4KKyAgPHJlZm1ldGE+CisgICAgPHJlZmVudHJ5dGl0bGU+VjRMMl9QSVhfRk1UX1kxMiAoJ1kxMiAnKTwvcmVmZW50cnl0aXRsZT4KKyAgICAmbWFudm9sOworICA8L3JlZm1ldGE+CisgIDxyZWZuYW1lZGl2PgorICAgIDxyZWZuYW1lPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfWTEyPC9jb25zdGFudD48L3JlZm5hbWU+CisgICAgPHJlZnB1cnBvc2U+R3JleS1zY2FsZSBpbWFnZTwvcmVmcHVycG9zZT4KKyAgPC9yZWZuYW1lZGl2PgorICA8cmVmc2VjdDE+CisgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworICAgIDxwYXJhPlRoaXMgaXMgYSBncmV5LXNjYWxlIGltYWdlIHdpdGggYSBkZXB0aCBvZiAxMiBiaXRzIHBlciBwaXhlbC4gUGl4ZWxzCithcmUgc3RvcmVkIGluIDE2LWJpdCB3b3JkcyB3aXRoIHVudXNlZCBoaWdoIGJpdHMgcGFkZGVkIHdpdGggMC4gVGhlIGxlYXN0CitzaWduaWZpY2FudCBieXRlIGlzIHN0b3JlZCBhdCBsb3dlciBtZW1vcnkgYWRkcmVzc2VzIChsaXR0bGUtZW5kaWFuKS48L3BhcmE+CisKKyAgICA8ZXhhbXBsZT4KKyAgICAgIDx0aXRsZT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1kxMjwvY29uc3RhbnQ+IDQgJnRpbWVzOyA0CitwaXhlbCBpbWFnZTwvdGl0bGU+CisKKyAgICAgIDxmb3JtYWxwYXJhPgorCTx0aXRsZT5CeXRlIE9yZGVyLjwvdGl0bGU+CisJPHBhcmE+RWFjaCBjZWxsIGlzIG9uZSBieXRlLgorCSAgPGluZm9ybWFsdGFibGUgZnJhbWU9Im5vbmUiPgorCSAgICA8dGdyb3VwIGNvbHM9IjkiIGFsaWduPSJjZW50ZXIiPgorCSAgICAgIDxjb2xzcGVjIGFsaWduPSJsZWZ0IiBjb2x3aWR0aD0iMioiIC8+CisJICAgICAgPHRib2R5IHZhbGlnbj0idG9wIj4KKwkJPHJvdz4KKwkJICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MDo8L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDBsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDBoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAxbG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAxaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMmxvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMmhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDNsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDNoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJPC9yb3c+CisJCTxyb3c+CisJCSAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzg6PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEwbG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEwaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMWxvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMWhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTJsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTJoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEzbG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEzaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCTwvcm93PgorCQk8cm93PgorCQkgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsxNjo8L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjBsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjBoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIxbG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIxaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMmxvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMmhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjNsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjNoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJPC9yb3c+CisJCTxyb3c+CisJCSAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzI0OjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMGxvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMGhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzFsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzFoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMybG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMyaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4zM2xvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4zM2hpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQk8L3Jvdz4KKwkgICAgICA8L3Rib2R5PgorCSAgICA8L3Rncm91cD4KKwkgIDwvaW5mb3JtYWx0YWJsZT4KKwk8L3BhcmE+CisgICAgICA8L2Zvcm1hbHBhcmE+CisgICAgPC9leGFtcGxlPgorICA8L3JlZnNlY3QxPgorPC9yZWZlbnRyeT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LnhtbAppbmRleCBjNmZkY2JiLi40MGFmNGJlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQueG1sCkBAIC02OTYsNiArNjk2LDcgQEAKICAgICAmc3ViLXBhY2tlZC15dXY7CiAgICAgJnN1Yi1ncmV5OwogICAgICZzdWIteTEwOworICAgICZzdWIteTEyOwogICAgICZzdWIteTE2OwogICAgICZzdWIteXV5djsKICAgICAmc3ViLXV5dnk7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3N1YmRldi1mb3JtYXRzLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvc3ViZGV2LWZvcm1hdHMueG1sCmluZGV4IDcwNDExMjcuLmQ3Y2NkMjUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvc3ViZGV2LWZvcm1hdHMueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvc3ViZGV2LWZvcm1hdHMueG1sCkBAIC00NTYsNiArNDU2LDIzIEBACiAJICAgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgogCSAgICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KIAkgICAgPC9yb3c+CisJICAgIDxyb3cgaWQ9IlY0TDItTUJVUy1GTVQtU0dCUkc4LTFYOCI+CisJICAgICAgPGVudHJ5PlY0TDJfTUJVU19GTVRfU0dCUkc4XzFYODwvZW50cnk+CisJICAgICAgPGVudHJ5PjB4MzAxMzwvZW50cnk+CisJICAgICAgPGVudHJ5PjwvZW50cnk+CisJICAgICAgPGVudHJ5Pi08L2VudHJ5PgorCSAgICAgIDxlbnRyeT4tPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+LTwvZW50cnk+CisJICAgICAgPGVudHJ5Pi08L2VudHJ5PgorCSAgICAgIDxlbnRyeT5nPHN1YnNjcmlwdD43PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT5nPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDwvcm93PgogCSAgICA8cm93IGlkPSJWNEwyLU1CVVMtRk1ULVNHUkJHOC0xWDgiPgogCSAgICAgIDxlbnRyeT5WNEwyX01CVVNfRk1UX1NHUkJHOF8xWDg8L2VudHJ5PgogCSAgICAgIDxlbnRyeT4weDMwMDI8L2VudHJ5PgpAQCAtNDczLDYgKzQ5MCwyMyBAQAogCSAgICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KIAkgICAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CiAJICAgIDwvcm93PgorCSAgICA8cm93IGlkPSJWNEwyLU1CVVMtRk1ULVNSR0dCOC0xWDgiPgorCSAgICAgIDxlbnRyeT5WNEwyX01CVVNfRk1UX1NSR0dCOF8xWDg8L2VudHJ5PgorCSAgICAgIDxlbnRyeT4weDMwMTQ8L2VudHJ5PgorCSAgICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICAgIDxlbnRyeT4tPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+LTwvZW50cnk+CisJICAgICAgPGVudHJ5Pi08L2VudHJ5PgorCSAgICAgIDxlbnRyeT4tPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Nzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjY8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT5yPHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8L3Jvdz4KIAkgICAgPHJvdyBpZD0iVjRMMi1NQlVTLUZNVC1TQkdHUjEwLURQQ004LTFYOCI+CiAJICAgICAgPGVudHJ5PlY0TDJfTUJVU19GTVRfU0JHR1IxMF9EUENNOF8xWDg8L2VudHJ5PgogCSAgICAgIDxlbnRyeT4weDMwMGI8L2VudHJ5PgpAQCAtMjE1OSw2ICsyMTkzLDMxIEBACiAJICAgICAgPGVudHJ5PnU8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgogCSAgICAgIDxlbnRyeT51PHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KIAkgICAgPC9yb3c+CisJICAgIDxyb3cgaWQ9IlY0TDItTUJVUy1GTVQtWTEyLTFYMTIiPgorCSAgICAgIDxlbnRyeT5WNEwyX01CVVNfRk1UX1kxMl8xWDEyPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+MHgyMDEzPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+LTwvZW50cnk+CisJICAgICAgPGVudHJ5Pi08L2VudHJ5PgorCSAgICAgIDxlbnRyeT4tPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+LTwvZW50cnk+CisJICAgICAgPGVudHJ5Pi08L2VudHJ5PgorCSAgICAgIDxlbnRyeT4tPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+LTwvZW50cnk+CisJICAgICAgPGVudHJ5Pi08L2VudHJ5PgorCSAgICAgIDxlbnRyeT55PHN1YnNjcmlwdD4xMTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgICAgPGVudHJ5Pnk8c3Vic2NyaXB0PjEwPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+eTxzdWJzY3JpcHQ+OTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgICAgPGVudHJ5Pnk8c3Vic2NyaXB0Pjg8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT55PHN1YnNjcmlwdD43PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+eTxzdWJzY3JpcHQ+Njwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgICAgPGVudHJ5Pnk8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT55PHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+eTxzdWJzY3JpcHQ+Mzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgICAgPGVudHJ5Pnk8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT55PHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+eTxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDwvcm93PgogCSAgICA8cm93IGlkPSJWNEwyLU1CVVMtRk1ULVVZVlk4LTFYMTYiPgogCSAgICAgIDxlbnRyeT5WNEwyX01CVVNfRk1UX1VZVlk4XzFYMTY8L2VudHJ5PgogCSAgICAgIDxlbnRyeT4weDIwMGY8L2VudHJ5PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1UvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL1JDVS8wMC1JTkRFWAppbmRleCA3MWI2ZjUwLi4xZDdhODg1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS8wMC1JTkRFWAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS8wMC1JTkRFWApAQCAtMjEsNyArMjEsNyBAQAogUlRGUC50eHQKIAktIExpc3Qgb2YgUkNVIHBhcGVycyAoYmlibGlvZ3JhcGh5KSBnb2luZyBiYWNrIHRvIDE5ODAuCiBzdGFsbHdhcm4udHh0Ci0JLSBSQ1UgQ1BVIHN0YWxsIHdhcm5pbmdzIChDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUikKKwktIFJDVSBDUFUgc3RhbGwgd2FybmluZ3MgKG1vZHVsZSBwYXJhbWV0ZXIgcmN1X2NwdV9zdGFsbF9zdXBwcmVzcykKIHRvcnR1cmUudHh0CiAJLSBSQ1UgVG9ydHVyZSBUZXN0IE9wZXJhdGlvbiAoQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QpCiB0cmFjZS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL3N0YWxsd2Fybi50eHQgYi9Eb2N1bWVudGF0aW9uL1JDVS9zdGFsbHdhcm4udHh0CmluZGV4IDg2MmMwOGUuLjRlOTU5MjAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUkNVL3N0YWxsd2Fybi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1Uvc3RhbGx3YXJuLnR4dApAQCAtMSwyMiArMSwyNSBAQAogVXNpbmcgUkNVJ3MgQ1BVIFN0YWxsIERldGVjdG9yCiAKLVRoZSBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBrZXJuZWwgY29uZmlnIHBhcmFtZXRlciBlbmFibGVzCi1SQ1UncyBDUFUgc3RhbGwgZGV0ZWN0b3IsIHdoaWNoIGRldGVjdHMgY29uZGl0aW9ucyB0aGF0IHVuZHVseSBkZWxheQotUkNVIGdyYWNlIHBlcmlvZHMuICBUaGUgc3RhbGwgZGV0ZWN0b3IncyBpZGVhIG9mIHdoYXQgY29uc3RpdHV0ZXMKLSJ1bmR1bHkgZGVsYXllZCIgaXMgY29udHJvbGxlZCBieSBhIHNldCBvZiBDIHByZXByb2Nlc3NvciBtYWNyb3M6CitUaGUgcmN1X2NwdV9zdGFsbF9zdXBwcmVzcyBtb2R1bGUgcGFyYW1ldGVyIGVuYWJsZXMgUkNVJ3MgQ1BVIHN0YWxsCitkZXRlY3Rvciwgd2hpY2ggZGV0ZWN0cyBjb25kaXRpb25zIHRoYXQgdW5kdWx5IGRlbGF5IFJDVSBncmFjZSBwZXJpb2RzLgorVGhpcyBtb2R1bGUgcGFyYW1ldGVyIGVuYWJsZXMgQ1BVIHN0YWxsIGRldGVjdGlvbiBieSBkZWZhdWx0LCBidXQKK21heSBiZSBvdmVycmlkZGVuIHZpYSBib290LXRpbWUgcGFyYW1ldGVyIG9yIGF0IHJ1bnRpbWUgdmlhIHN5c2ZzLgorVGhlIHN0YWxsIGRldGVjdG9yJ3MgaWRlYSBvZiB3aGF0IGNvbnN0aXR1dGVzICJ1bmR1bHkgZGVsYXllZCIgaXMKK2NvbnRyb2xsZWQgYnkgYSBzZXQgb2Yga2VybmVsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGFuZCBjcHAgbWFjcm9zOgogCi1SQ1VfU0VDT05EU19USUxMX1NUQUxMX0NIRUNLCitDT05GSUdfUkNVX0NQVV9TVEFMTF9USU1FT1VUCiAKLQlUaGlzIG1hY3JvIGRlZmluZXMgdGhlIHBlcmlvZCBvZiB0aW1lIHRoYXQgUkNVIHdpbGwgd2FpdCBmcm9tCi0JdGhlIGJlZ2lubmluZyBvZiBhIGdyYWNlIHBlcmlvZCB1bnRpbCBpdCBpc3N1ZXMgYW4gUkNVIENQVQotCXN0YWxsIHdhcm5pbmcuCVRoaXMgdGltZSBwZXJpb2QgaXMgbm9ybWFsbHkgdGVuIHNlY29uZHMuCisJVGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgZGVmaW5lcyB0aGUgcGVyaW9kIG9mIHRpbWUKKwl0aGF0IFJDVSB3aWxsIHdhaXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGEgZ3JhY2UgcGVyaW9kIHVudGlsIGl0CisJaXNzdWVzIGFuIFJDVSBDUFUgc3RhbGwgd2FybmluZy4gIFRoaXMgdGltZSBwZXJpb2QgaXMgbm9ybWFsbHkKKwl0ZW4gc2Vjb25kcy4KIAogUkNVX1NFQ09ORFNfVElMTF9TVEFMTF9SRUNIRUNLCiAKIAlUaGlzIG1hY3JvIGRlZmluZXMgdGhlIHBlcmlvZCBvZiB0aW1lIHRoYXQgUkNVIHdpbGwgd2FpdCBhZnRlcgogCWlzc3VpbmcgYSBzdGFsbCB3YXJuaW5nIHVudGlsIGl0IGlzc3VlcyBhbm90aGVyIHN0YWxsIHdhcm5pbmcKLQlmb3IgdGhlIHNhbWUgc3RhbGwuICBUaGlzIHRpbWUgcGVyaW9kIGlzIG5vcm1hbGx5IHNldCB0byB0aGlydHkKLQlzZWNvbmRzLgorCWZvciB0aGUgc2FtZSBzdGFsbC4gIFRoaXMgdGltZSBwZXJpb2QgaXMgbm9ybWFsbHkgc2V0IHRvIHRocmVlCisJdGltZXMgdGhlIGNoZWNrIGludGVydmFsIHBsdXMgdGhpcnR5IHNlY29uZHMuCiAKIFJDVV9TVEFMTF9SQVRfREVMQVkKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1UvdHJhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvdHJhY2UudHh0CmluZGV4IDZhOGM3M2YuLmMwNzhhZDQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUkNVL3RyYWNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS90cmFjZS50eHQKQEAgLTEwLDM0ICsxMCw0NiBAQAogCiBDT05GSUdfVFJFRV9SQ1UgYW5kIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGRlYnVnZnMgRmlsZXMgYW5kIEZvcm1hdHMKIAotVGhlc2UgaW1wbGVtZW50YXRpb25zIG9mIFJDVSBwcm92aWRlcyBmaXZlIGRlYnVnZnMgZmlsZXMgdW5kZXIgdGhlCi10b3AtbGV2ZWwgZGlyZWN0b3J5IFJDVTogcmN1L3JjdWRhdGEgKHdoaWNoIGRpc3BsYXlzIGZpZWxkcyBpbiBzdHJ1Y3QKLXJjdV9kYXRhKSwgcmN1L3JjdWRhdGEuY3N2ICh3aGljaCBpcyBhIC5jc3Ygc3ByZWFkc2hlZXQgdmVyc2lvbiBvZgotcmN1L3JjdWRhdGEpLCByY3UvcmN1Z3AgKHdoaWNoIGRpc3BsYXlzIGdyYWNlLXBlcmlvZCBjb3VudGVycyksCi1yY3UvcmN1aGllciAod2hpY2ggZGlzcGxheXMgdGhlIHN0cnVjdCByY3Vfbm9kZSBoaWVyYXJjaHkpLCBhbmQKLXJjdS9yY3VfcGVuZGluZyAod2hpY2ggZGlzcGxheXMgY291bnRzIG9mIHRoZSByZWFzb25zIHRoYXQgdGhlCi1yY3VfcGVuZGluZygpIGZ1bmN0aW9uIGRlY2lkZWQgdGhhdCB0aGVyZSB3YXMgY29yZSBSQ1Ugd29yayB0byBkbykuCitUaGVzZSBpbXBsZW1lbnRhdGlvbnMgb2YgUkNVIHByb3ZpZGVzIHNldmVyYWwgZGVidWdmcyBmaWxlcyB1bmRlciB0aGUKK3RvcC1sZXZlbCBkaXJlY3RvcnkgInJjdSI6CisKK3JjdS9yY3VkYXRhOgorCURpc3BsYXlzIGZpZWxkcyBpbiBzdHJ1Y3QgcmN1X2RhdGEuCityY3UvcmN1ZGF0YS5jc3Y6CisJQ29tbWEtc2VwYXJhdGVkIHZhbHVlcyBzcHJlYWRzaGVldCB2ZXJzaW9uIG9mIHJjdWRhdGEuCityY3UvcmN1Z3A6CisJRGlzcGxheXMgZ3JhY2UtcGVyaW9kIGNvdW50ZXJzLgorcmN1L3JjdWhpZXI6CisJRGlzcGxheXMgdGhlIHN0cnVjdCByY3Vfbm9kZSBoaWVyYXJjaHkuCityY3UvcmN1X3BlbmRpbmc6CisJRGlzcGxheXMgY291bnRzIG9mIHRoZSByZWFzb25zIHJjdV9wZW5kaW5nKCkgZGVjaWRlZCB0aGF0IFJDVSBoYWQKKwl3b3JrIHRvIGRvLgorcmN1L3JjdXRvcnR1cmU6CisJRGlzcGxheXMgcmN1dG9ydHVyZSB0ZXN0IHByb2dyZXNzLgorcmN1L3JjdWJvb3N0OgorCURpc3BsYXlzIFJDVSBib29zdGluZyBzdGF0aXN0aWNzLiAgT25seSBwcmVzZW50IGlmCisJQ09ORklHX1JDVV9CT09TVD15LgogCiBUaGUgb3V0cHV0IG9mICJjYXQgcmN1L3JjdWRhdGEiIGxvb2tzIGFzIGZvbGxvd3M6CiAKIHJjdV9zY2hlZDoKLSAgMCBjPTE3ODI5IGc9MTc4MjkgcHE9MSBwcWM9MTc4MjkgcXA9MCBkdD0xMDk1MS8xIGRuPTAgZGY9MTEwMSBvZj0wIHJpPTM2IHFsPTAgYj0xMAotICAxIGM9MTc4MjkgZz0xNzgyOSBwcT0xIHBxYz0xNzgyOSBxcD0wIGR0PTE2MTE3LzEgZG49MCBkZj0xMDE1IG9mPTAgcmk9MCBxbD0wIGI9MTAKLSAgMiBjPTE3ODI5IGc9MTc4MjkgcHE9MSBwcWM9MTc4MjkgcXA9MCBkdD0xNDQ1LzEgZG49MCBkZj0xODM5IG9mPTAgcmk9MCBxbD0wIGI9MTAKLSAgMyBjPTE3ODI5IGc9MTc4MjkgcHE9MSBwcWM9MTc4MjkgcXA9MCBkdD02NjgxLzEgZG49MCBkZj0xNTQ1IG9mPTAgcmk9MCBxbD0wIGI9MTAKLSAgNCBjPTE3ODI5IGc9MTc4MjkgcHE9MSBwcWM9MTc4MjkgcXA9MCBkdD0xMDAzLzEgZG49MCBkZj0xOTkyIG9mPTAgcmk9MCBxbD0wIGI9MTAKLSAgNSBjPTE3ODI5IGc9MTc4MzAgcHE9MSBwcWM9MTc4MjkgcXA9MSBkdD0zODg3LzEgZG49MCBkZj0zMzMxIG9mPTAgcmk9NCBxbD0yIGI9MTAKLSAgNiBjPTE3ODI5IGc9MTc4MjkgcHE9MSBwcWM9MTc4MjkgcXA9MCBkdD04NTkvMSBkbj0wIGRmPTMyMjQgb2Y9MCByaT0wIHFsPTAgYj0xMAotICA3IGM9MTc4MjkgZz0xNzgzMCBwcT0wIHBxYz0xNzgyOSBxcD0xIGR0PTM3NjEvMSBkbj0wIGRmPTE4MTggb2Y9MCByaT0wIHFsPTIgYj0xMAorICAwIGM9MjA5NzIgZz0yMDk3MyBwcT0xIHBxYz0yMDk3MiBxcD0wIGR0PTU0NS8xLzAgZGY9NTAgb2Y9MCByaT0wIHFsPTE2MyBxcz1OUlcuIGt0PTAvVy8wIGt0bD1lYmMzIGI9MTAgY2k9MTUzNzM3IGNvPTAgY2E9MAorICAxIGM9MjA5NzIgZz0yMDk3MyBwcT0xIHBxYz0yMDk3MiBxcD0wIGR0PTk2Ny8xLzAgZGY9NTggb2Y9MCByaT0wIHFsPTYzNCBxcz1OUlcuIGt0PTAvVy8xIGt0bD01OGMgYj0xMCBjaT0xOTEwMzcgY289MCBjYT0wCisgIDIgYz0yMDk3MiBnPTIwOTczIHBxPTEgcHFjPTIwOTcyIHFwPTAgZHQ9MTA4MS8xLzAgZGY9MTc1IG9mPTAgcmk9MCBxbD03NCBxcz1OLlcuIGt0PTAvVy8yIGt0bD1kYTk0IGI9MTAgY2k9NzU5OTEgY289MCBjYT0wCisgIDMgYz0yMDk0MiBnPTIwOTQzIHBxPTEgcHFjPTIwOTQyIHFwPTEgZHQ9MTg0Ni8wLzAgZGY9NDA0IG9mPTAgcmk9MCBxbD0wIHFzPS4uLi4ga3Q9MC9XLzMga3RsPWQxY2QgYj0xMCBjaT03MjI2MSBjbz0wIGNhPTAKKyAgNCBjPTIwOTcyIGc9MjA5NzMgcHE9MSBwcWM9MjA5NzIgcXA9MCBkdD0zNjkvMS8wIGRmPTgzIG9mPTAgcmk9MCBxbD00OCBxcz1OLlcuIGt0PTAvVy80IGt0bD1lMGU3IGI9MTAgY2k9MTI4MzY1IGNvPTAgY2E9MAorICA1IGM9MjA5NzIgZz0yMDk3MyBwcT0xIHBxYz0yMDk3MiBxcD0wIGR0PTM4MS8xLzAgZGY9NjQgb2Y9MCByaT0wIHFsPTE2OSBxcz1OUlcuIGt0PTAvVy81IGt0bD1mYjJmIGI9MTAgY2k9MTY0MzYwIGNvPTAgY2E9MAorICA2IGM9MjA5NzIgZz0yMDk3MyBwcT0xIHBxYz0yMDk3MiBxcD0wIGR0PTEwMzcvMS8wIGRmPTE4MyBvZj0wIHJpPTAgcWw9NjIgcXM9Ti5XLiBrdD0wL1cvNiBrdGw9ZDJhZCBiPTEwIGNpPTY1NjYzIGNvPTAgY2E9MAorICA3IGM9MjA4OTcgZz0yMDg5NyBwcT0xIHBxYz0yMDg5NiBxcD0wIGR0PTE1NzIvMC8wIGRmPTM4MiBvZj0wIHJpPTAgcWw9MCBxcz0uLi4uIGt0PTAvVy83IGt0bD1jZjE1IGI9MTAgY2k9NzUwMDYgY289MCBjYT0wCiByY3VfYmg6Ci0gIDAgYz0tMjc1IGc9LTI3NSBwcT0xIHBxYz0tMjc1IHFwPTAgZHQ9MTA5NTEvMSBkbj0wIGRmPTAgb2Y9MCByaT0wIHFsPTAgYj0xMAotICAxIGM9LTI3NSBnPS0yNzUgcHE9MSBwcWM9LTI3NSBxcD0wIGR0PTE2MTE3LzEgZG49MCBkZj0xMyBvZj0wIHJpPTAgcWw9MCBiPTEwCi0gIDIgYz0tMjc1IGc9LTI3NSBwcT0xIHBxYz0tMjc1IHFwPTAgZHQ9MTQ0NS8xIGRuPTAgZGY9MTUgb2Y9MCByaT0wIHFsPTAgYj0xMAotICAzIGM9LTI3NSBnPS0yNzUgcHE9MSBwcWM9LTI3NSBxcD0wIGR0PTY2ODEvMSBkbj0wIGRmPTkgb2Y9MCByaT0wIHFsPTAgYj0xMAotICA0IGM9LTI3NSBnPS0yNzUgcHE9MSBwcWM9LTI3NSBxcD0wIGR0PTEwMDMvMSBkbj0wIGRmPTE1IG9mPTAgcmk9MCBxbD0wIGI9MTAKLSAgNSBjPS0yNzUgZz0tMjc1IHBxPTEgcHFjPS0yNzUgcXA9MCBkdD0zODg3LzEgZG49MCBkZj0xNSBvZj0wIHJpPTAgcWw9MCBiPTEwCi0gIDYgYz0tMjc1IGc9LTI3NSBwcT0xIHBxYz0tMjc1IHFwPTAgZHQ9ODU5LzEgZG49MCBkZj0xNSBvZj0wIHJpPTAgcWw9MCBiPTEwCi0gIDcgYz0tMjc1IGc9LTI3NSBwcT0xIHBxYz0tMjc1IHFwPTAgZHQ9Mzc2MS8xIGRuPTAgZGY9MTUgb2Y9MCByaT0wIHFsPTAgYj0xMAorICAwIGM9MTQ4MCBnPTE0ODAgcHE9MSBwcWM9MTQ3OSBxcD0wIGR0PTU0NS8xLzAgZGY9NiBvZj0wIHJpPTEgcWw9MCBxcz0uLi4uIGt0PTAvVy8wIGt0bD1lYmMzIGI9MTAgY2k9MCBjbz0wIGNhPTAKKyAgMSBjPTE0ODAgZz0xNDgwIHBxPTEgcHFjPTE0NzkgcXA9MCBkdD05NjcvMS8wIGRmPTMgb2Y9MCByaT0xIHFsPTAgcXM9Li4uLiBrdD0wL1cvMSBrdGw9NThjIGI9MTAgY2k9MTUxIGNvPTAgY2E9MAorICAyIGM9MTQ4MCBnPTE0ODAgcHE9MSBwcWM9MTQ3OSBxcD0wIGR0PTEwODEvMS8wIGRmPTYgb2Y9MCByaT0xIHFsPTAgcXM9Li4uLiBrdD0wL1cvMiBrdGw9ZGE5NCBiPTEwIGNpPTAgY289MCBjYT0wCisgIDMgYz0xNDgwIGc9MTQ4MCBwcT0xIHBxYz0xNDc5IHFwPTAgZHQ9MTg0Ni8wLzAgZGY9OCBvZj0wIHJpPTEgcWw9MCBxcz0uLi4uIGt0PTAvVy8zIGt0bD1kMWNkIGI9MTAgY2k9MCBjbz0wIGNhPTAKKyAgNCBjPTE0ODAgZz0xNDgwIHBxPTEgcHFjPTE0NzkgcXA9MCBkdD0zNjkvMS8wIGRmPTYgb2Y9MCByaT0xIHFsPTAgcXM9Li4uLiBrdD0wL1cvNCBrdGw9ZTBlNyBiPTEwIGNpPTAgY289MCBjYT0wCisgIDUgYz0xNDgwIGc9MTQ4MCBwcT0xIHBxYz0xNDc5IHFwPTAgZHQ9MzgxLzEvMCBkZj00IG9mPTAgcmk9MSBxbD0wIHFzPS4uLi4ga3Q9MC9XLzUga3RsPWZiMmYgYj0xMCBjaT0wIGNvPTAgY2E9MAorICA2IGM9MTQ4MCBnPTE0ODAgcHE9MSBwcWM9MTQ3OSBxcD0wIGR0PTEwMzcvMS8wIGRmPTYgb2Y9MCByaT0xIHFsPTAgcXM9Li4uLiBrdD0wL1cvNiBrdGw9ZDJhZCBiPTEwIGNpPTAgY289MCBjYT0wCisgIDcgYz0xNDc0IGc9MTQ3NCBwcT0xIHBxYz0xNDczIHFwPTAgZHQ9MTU3Mi8wLzAgZGY9OCBvZj0wIHJpPTEgcWw9MCBxcz0uLi4uIGt0PTAvVy83IGt0bD1jZjE1IGI9MTAgY2k9MCBjbz0wIGNhPTAKIAogVGhlIGZpcnN0IHNlY3Rpb24gbGlzdHMgdGhlIHJjdV9kYXRhIHN0cnVjdHVyZXMgZm9yIHJjdV9zY2hlZCwgdGhlIHNlY29uZAogZm9yIHJjdV9iaC4gIE5vdGUgdGhhdCBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBrZXJuZWxzIHdpbGwgaGF2ZSBhbgpAQCAtNTIsMTcgKzY0LDE4IEBACiAJc3Vic3RhbnRpYWxseSBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGFjdHVhbCBDUFVzLgogCiBvCSJjIiBpcyB0aGUgY291bnQgb2YgZ3JhY2UgcGVyaW9kcyB0aGF0IHRoaXMgQ1BVIGJlbGlldmVzIGhhdmUKLQljb21wbGV0ZWQuICBDUFVzIGluIGR5bnRpY2tzIGlkbGUgbW9kZSBtYXkgbGFnIHF1aXRlIGEgd2F5cwotCWJlaGluZCwgZm9yIGV4YW1wbGUsIENQVSA0IHVuZGVyICJyY3Vfc2NoZWQiIGFib3ZlLCB3aGljaCBoYXMKLQlzbGVwdCB0aHJvdWdoIHRoZSBwYXN0IDI1IFJDVSBncmFjZSBwZXJpb2RzLiAgSXQgaXMgbm90IHVudXN1YWwKLQl0byBzZWUgQ1BVcyBsYWdnaW5nIGJ5IHRob3VzYW5kcyBvZiBncmFjZSBwZXJpb2RzLgorCWNvbXBsZXRlZC4gIE9mZmxpbmVkIENQVXMgYW5kIENQVXMgaW4gZHludGlja3MgaWRsZSBtb2RlIG1heQorCWxhZyBxdWl0ZSBhIHdheXMgYmVoaW5kLCBmb3IgZXhhbXBsZSwgQ1BVIDYgdW5kZXIgInJjdV9zY2hlZCIKKwlhYm92ZSwgd2hpY2ggaGFzIGJlZW4gb2ZmbGluZSB0aHJvdWdoIG5vdCBxdWl0ZSA0MCwwMDAgUkNVIGdyYWNlCisJcGVyaW9kcy4gIEl0IGlzIG5vdCB1bnVzdWFsIHRvIHNlZSBDUFVzIGxhZ2dpbmcgYnkgdGhvdXNhbmRzIG9mCisJZ3JhY2UgcGVyaW9kcy4KIAogbwkiZyIgaXMgdGhlIGNvdW50IG9mIGdyYWNlIHBlcmlvZHMgdGhhdCB0aGlzIENQVSBiZWxpZXZlcyBoYXZlCi0Jc3RhcnRlZC4gIEFnYWluLCBDUFVzIGluIGR5bnRpY2tzIGlkbGUgbW9kZSBtYXkgbGFnIGJlaGluZC4KLQlJZiB0aGUgImMiIGFuZCAiZyIgdmFsdWVzIGFyZSBlcXVhbCwgdGhpcyBDUFUgaGFzIGFscmVhZHkKLQlyZXBvcnRlZCBhIHF1aWVzY2VudCBzdGF0ZSBmb3IgdGhlIGxhc3QgUkNVIGdyYWNlIHBlcmlvZCB0aGF0Ci0JaXQgaXMgYXdhcmUgb2YsIG90aGVyd2lzZSwgdGhlIENQVSBiZWxpZXZlcyB0aGF0IGl0IG93ZXMgUkNVIGEKLQlxdWllc2NlbnQgc3RhdGUuCisJc3RhcnRlZC4gIEFnYWluLCBvZmZsaW5lZCBDUFVzIGFuZCBDUFVzIGluIGR5bnRpY2tzIGlkbGUgbW9kZQorCW1heSBsYWcgYmVoaW5kLiAgSWYgdGhlICJjIiBhbmQgImciIHZhbHVlcyBhcmUgZXF1YWwsIHRoaXMgQ1BVCisJaGFzIGFscmVhZHkgcmVwb3J0ZWQgYSBxdWllc2NlbnQgc3RhdGUgZm9yIHRoZSBsYXN0IFJDVSBncmFjZQorCXBlcmlvZCB0aGF0IGl0IGlzIGF3YXJlIG9mLCBvdGhlcndpc2UsIHRoZSBDUFUgYmVsaWV2ZXMgdGhhdCBpdAorCW93ZXMgUkNVIGEgcXVpZXNjZW50IHN0YXRlLgogCiBvCSJwcSIgaW5kaWNhdGVzIHRoYXQgdGhpcyBDUFUgaGFzIHBhc3NlZCB0aHJvdWdoIGEgcXVpZXNjZW50IHN0YXRlCiAJZm9yIHRoZSBjdXJyZW50IGdyYWNlIHBlcmlvZC4gIEl0IGlzIHBvc3NpYmxlIGZvciAicHEiIHRvIGJlCkBAIC04MSw3ICs5NCw4IEBACiAJdGhlIG5leHQgZ3JhY2UgcGVyaW9kIQogCiBvCSJxcCIgaW5kaWNhdGVzIHRoYXQgUkNVIHN0aWxsIGV4cGVjdHMgYSBxdWllc2NlbnQgc3RhdGUgZnJvbQotCXRoaXMgQ1BVLgorCXRoaXMgQ1BVLiAgT2ZmbGluZWQgQ1BVcyBhbmQgQ1BVcyBpbiBkeW50aWNrIGlkbGUgbW9kZSBtaWdodAorCXdlbGwgaGF2ZSBxcD0xLCB3aGljaCBpcyBPSzogUkNVIGlzIHN0aWxsIGlnbm9yaW5nIHRoZW0uCiAKIG8JImR0IiBpcyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZHludGljayBjb3VudGVyIHRoYXQgaXMgaW5jcmVtZW50ZWQKIAl3aGVuIGVudGVyaW5nIG9yIGxlYXZpbmcgZHludGlja3MgaWRsZSBzdGF0ZSwgZWl0aGVyIGJ5IHRoZQpAQCAtMTA4LDcgKzEyMiw3IEBACiAKIG8JIm9mIiBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgc29tZSBvdGhlciBDUFUgaGFzIGZvcmNlZCBhCiAJcXVpZXNjZW50IHN0YXRlIG9uIGJlaGFsZiBvZiB0aGlzIENQVSBkdWUgdG8gdGhpcyBDUFUgYmVpbmcKLQlvZmZsaW5lLiAgSW4gYSBwZXJmZWN0IHdvcmxkLCB0aGlzIG1pZ2h0IG5ldmUgaGFwcGVuLCBidXQgaXQKKwlvZmZsaW5lLiAgSW4gYSBwZXJmZWN0IHdvcmxkLCB0aGlzIG1pZ2h0IG5ldmVyIGhhcHBlbiwgYnV0IGl0CiAJdHVybnMgb3V0IHRoYXQgb2ZmbGluaW5nIGFuZCBvbmxpbmluZyBhIENQVSBjYW4gdGFrZSBzZXZlcmFsIGdyYWNlCiAJcGVyaW9kcywgYW5kIHNvIHRoZXJlIGlzIGxpa2VseSB0byBiZSBhbiBleHRlbmRlZCBwZXJpb2Qgb2YgdGltZQogCXdoZW4gUkNVIGJlbGlldmVzIHRoYXQgdGhlIENQVSBpcyBvbmxpbmUgd2hlbiBpdCByZWFsbHkgaXMgbm90LgpAQCAtMTI1LDYgKzEzOSw2MiBAQAogCW9mIHdoYXQgc3RhdGUgdGhleSBhcmUgaW4gKG5ldywgd2FpdGluZyBmb3IgZ3JhY2UgcGVyaW9kIHRvCiAJc3RhcnQsIHdhaXRpbmcgZm9yIGdyYWNlIHBlcmlvZCB0byBlbmQsIHJlYWR5IHRvIGludm9rZSkuCiAKK28JInFzIiBnaXZlcyBhbiBpbmRpY2F0aW9uIG9mIHRoZSBzdGF0ZSBvZiB0aGUgY2FsbGJhY2sgcXVldWUKKwl3aXRoIGZvdXIgY2hhcmFjdGVyczoKKworCSJOIglJbmRpY2F0ZXMgdGhhdCB0aGVyZSBhcmUgY2FsbGJhY2tzIHF1ZXVlZCB0aGF0IGFyZSBub3QKKwkJcmVhZHkgdG8gYmUgaGFuZGxlZCBieSB0aGUgbmV4dCBncmFjZSBwZXJpb2QsIGFuZCB0aHVzCisJCXdpbGwgYmUgaGFuZGxlZCBieSB0aGUgZ3JhY2UgcGVyaW9kIGZvbGxvd2luZyB0aGUgbmV4dAorCQlvbmUuCisKKwkiUiIJSW5kaWNhdGVzIHRoYXQgdGhlcmUgYXJlIGNhbGxiYWNrcyBxdWV1ZWQgdGhhdCBhcmUKKwkJcmVhZHkgdG8gYmUgaGFuZGxlZCBieSB0aGUgbmV4dCBncmFjZSBwZXJpb2QuCisKKwkiVyIJSW5kaWNhdGVzIHRoYXQgdGhlcmUgYXJlIGNhbGxiYWNrcyBxdWV1ZWQgdGhhdCBhcmUKKwkJd2FpdGluZyBvbiB0aGUgY3VycmVudCBncmFjZSBwZXJpb2QuCisKKwkiRCIJSW5kaWNhdGVzIHRoYXQgdGhlcmUgYXJlIGNhbGxiYWNrcyBxdWV1ZWQgdGhhdCBoYXZlCisJCWFscmVhZHkgYmVlbiBoYW5kbGVkIGJ5IGEgcHJpb3IgZ3JhY2UgcGVyaW9kLCBhbmQgYXJlCisJCXRodXMgd2FpdGluZyB0byBiZSBpbnZva2VkLiAgTm90ZSB0aGF0IGNhbGxiYWNrcyBpbgorCQl0aGUgcHJvY2VzcyBvZiBiZWluZyBpbnZva2VkIGFyZSBub3QgY291bnRlZCBoZXJlLgorCQlDYWxsYmFja3MgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgaW52b2tlZCBhcmUgdGhvc2UKKwkJdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSByY3VfZGF0YSBzdHJ1Y3R1cmVzCisJCXF1ZXVlcyBieSByY3VfZG9fYmF0Y2goKSwgYnV0IHdoaWNoIGhhdmUgbm90IHlldCBiZWVuCisJCWludm9rZWQuCisKKwlJZiB0aGVyZSBhcmUgbm8gY2FsbGJhY2tzIGluIGEgZ2l2ZW4gb25lIG9mIHRoZSBhYm92ZSBzdGF0ZXMsCisJdGhlIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVyIGlzIHJlcGxhY2VkIGJ5ICIuIi4KKworbwkia3QiIGlzIHRoZSBwZXItQ1BVIGtlcm5lbC10aHJlYWQgc3RhdGUuICBUaGUgZGlnaXQgcHJlY2VkaW5nCisJdGhlIGZpcnN0IHNsYXNoIGlzIHplcm8gaWYgdGhlcmUgaXMgbm8gd29yayBwZW5kaW5nIGFuZCAxCisJb3RoZXJ3aXNlLiAgVGhlIGNoYXJhY3RlciBiZXR3ZWVuIHRoZSBmaXJzdCBwYWlyIG9mIHNsYXNoZXMgaXMKKwlhcyBmb2xsb3dzOgorCisJIlMiCVRoZSBrZXJuZWwgdGhyZWFkIGlzIHN0b3BwZWQsIGluIG90aGVyIHdvcmRzLCBhbGwKKwkJQ1BVcyBjb3JyZXNwb25kaW5nIHRvIHRoaXMgcmN1X25vZGUgc3RydWN0dXJlIGFyZQorCQlvZmZsaW5lLgorCisJIlIiCVRoZSBrZXJuZWwgdGhyZWFkIGlzIHJ1bm5pbmcuCisKKwkiVyIJVGhlIGtlcm5lbCB0aHJlYWQgaXMgd2FpdGluZyBiZWNhdXNlIHRoZXJlIGlzIG5vIHdvcmsKKwkJZm9yIGl0IHRvIGRvLgorCisJIk8iCVRoZSBrZXJuZWwgdGhyZWFkIGlzIHdhaXRpbmcgYmVjYXVzZSBpdCBoYXMgYmVlbgorCQlmb3JjZWQgb2ZmIG9mIGl0cyBkZXNpZ25hdGVkIENQVSBvciBiZWNhdXNlIGl0cworCQktPmNwdXNfYWxsb3dlZCBtYXNrIHBlcm1pdHMgaXQgdG8gcnVuIG9uIG90aGVyIHRoYW4KKwkJaXRzIGRlc2lnbmF0ZWQgQ1BVLgorCisJIlkiCVRoZSBrZXJuZWwgdGhyZWFkIGlzIHlpZWxkaW5nIHRvIGF2b2lkIGhvZ2dpbmcgQ1BVLgorCisJIj8iCVVua25vd24gdmFsdWUsIGluZGljYXRlcyBhIGJ1Zy4KKworCVRoZSBudW1iZXIgYWZ0ZXIgdGhlIGZpbmFsIHNsYXNoIGlzIHRoZSBDUFUgdGhhdCB0aGUga3RocmVhZAorCWlzIGFjdHVhbGx5IHJ1bm5pbmcgb24uCisKK28JImt0bCIgaXMgdGhlIGxvdy1vcmRlciAxNiBiaXRzIChpbiBoZXhhZGVjaW1hbCkgb2YgdGhlIGNvdW50IG9mCisJdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IHRoaXMgQ1BVJ3MgcGVyLUNQVSBrdGhyZWFkIGhhcyBnb25lCisJdGhyb3VnaCBpdHMgbG9vcCBzZXJ2aWNpbmcgaW52b2tlX3JjdV9jcHVfa3RocmVhZCgpIHJlcXVlc3RzLgorCiBvCSJiIiBpcyB0aGUgYmF0Y2ggbGltaXQgZm9yIHRoaXMgQ1BVLiAgSWYgbW9yZSB0aGFuIHRoaXMgbnVtYmVyCiAJb2YgUkNVIGNhbGxiYWNrcyBpcyByZWFkeSB0byBpbnZva2UsIHRoZW4gdGhlIHJlbWFpbmRlciB3aWxsCiAJYmUgZGVmZXJyZWQuCkBAIC0xNzQsMTQgKzI0NCwxNCBAQAogVGhlIG91dHB1dCBvZiAiY2F0IHJjdS9yY3VoaWVyIiBsb29rcyBhcyBmb2xsb3dzLCB3aXRoIHZlcnkgbG9uZyBsaW5lczoKIAogYz02OTAyIGc9NjkwMyBzPTIgamZxPTMgaj03MmM3IG5mcXM9MTMxNDIvbmZxc25nPTAoMTMxNDIpIGZxbGg9NgotMS8xIC4+LiAwOjEyNyBeMCAgICAKLTMvMyAuPi4gMDozNSBeMCAgICAwLzAgLj4uIDM2OjcxIF4xICAgIDAvMCAuPi4gNzI6MTA3IF4yICAgIDAvMCAuPi4gMTA4OjEyNyBeMyAgICAKLTMvM2YgLj4uIDA6NSBeMCAgICAyLzMgLj4uIDY6MTEgXjEgICAgMC8wIC4+LiAxMjoxNyBeMiAgICAwLzAgLj4uIDE4OjIzIF4zICAgIDAvMCAuPi4gMjQ6MjkgXjQgICAgMC8wIC4+LiAzMDozNSBeNSAgICAwLzAgLj4uIDM2OjQxIF4wICAgIDAvMCAuPi4gNDI6NDcgXjEgICAgMC8wIC4+LiA0ODo1MyBeMiAgICAwLzAgLj4uIDU0OjU5IF4zICAgIDAvMCAuPi4gNjA6NjUgXjQgICAgMC8wIC4+LiA2Njo3MSBeNSAgICAwLzAgLj4uIDcyOjc3IF4wICAgIDAvMCAuPi4gNzg6ODMgXjEgICAgMC8wIC4+LiA4NDo4OSBeMiAgICAwLzAgLj4uIDkwOjk1IF4zICAgIDAvMCAuPi4gOTY6MTAxIF40ICAgIDAvMCAuPi4gMTAyOjEwNyBeNSAgICAwLzAgLj4uIDEwODoxMTMgXjAgICAgMC8wIC4+LiAxMTQ6MTE5IF4xICAgIDAvMCAuPi4gMTIwOjEyNSBeMiAgICAwLzAgLj4uIDEyNjoxMjcgXjMgICAgCisxLzEgLi4+LiAwOjEyNyBeMAorMy8zIC4uPi4gMDozNSBeMCAgICAwLzAgLi4+LiAzNjo3MSBeMSAgICAwLzAgLi4+LiA3MjoxMDcgXjIgICAgMC8wIC4uPi4gMTA4OjEyNyBeMworMy8zZiAuLj4uIDA6NSBeMCAgICAyLzMgLi4+LiA2OjExIF4xICAgIDAvMCAuLj4uIDEyOjE3IF4yICAgIDAvMCAuLj4uIDE4OjIzIF4zICAgIDAvMCAuLj4uIDI0OjI5IF40ICAgIDAvMCAuLj4uIDMwOjM1IF41ICAgIDAvMCAuLj4uIDM2OjQxIF4wICAgIDAvMCAuLj4uIDQyOjQ3IF4xICAgIDAvMCAuLj4uIDQ4OjUzIF4yICAgIDAvMCAuLj4uIDU0OjU5IF4zICAgIDAvMCAuLj4uIDYwOjY1IF40ICAgIDAvMCAuLj4uIDY2OjcxIF41ICAgIDAvMCAuLj4uIDcyOjc3IF4wICAgIDAvMCAuLj4uIDc4OjgzIF4xICAgIDAvMCAuLj4uIDg0Ojg5IF4yICAgIDAvMCAuLj4uIDkwOjk1IF4zICAgIDAvMCAuLj4uIDk2OjEwMSBeNCAgICAwLzAgLi4+LiAxMDI6MTA3IF41ICAgIDAvMCAuLj4uIDEwODoxMTMgXjAgICAgMC8wIC4uPi4gMTE0OjExOSBeMSAgICAwLzAgLi4+LiAxMjA6MTI1IF4yICAgIDAvMCAuLj4uIDEyNjoxMjcgXjMKIHJjdV9iaDoKIGM9LTIyNiBnPS0yMjYgcz0xIGpmcT0tNTcwMSBqPTcyYzcgbmZxcz04OC9uZnFzbmc9MCg4OCkgZnFsaD0wCi0wLzEgLj4uIDA6MTI3IF4wICAgIAotMC8zIC4+LiAwOjM1IF4wICAgIDAvMCAuPi4gMzY6NzEgXjEgICAgMC8wIC4+LiA3MjoxMDcgXjIgICAgMC8wIC4+LiAxMDg6MTI3IF4zICAgIAotMC8zZiAuPi4gMDo1IF4wICAgIDAvMyAuPi4gNjoxMSBeMSAgICAwLzAgLj4uIDEyOjE3IF4yICAgIDAvMCAuPi4gMTg6MjMgXjMgICAgMC8wIC4+LiAyNDoyOSBeNCAgICAwLzAgLj4uIDMwOjM1IF41ICAgIDAvMCAuPi4gMzY6NDEgXjAgICAgMC8wIC4+LiA0Mjo0NyBeMSAgICAwLzAgLj4uIDQ4OjUzIF4yICAgIDAvMCAuPi4gNTQ6NTkgXjMgICAgMC8wIC4+LiA2MDo2NSBeNCAgICAwLzAgLj4uIDY2OjcxIF41ICAgIDAvMCAuPi4gNzI6NzcgXjAgICAgMC8wIC4+LiA3ODo4MyBeMSAgICAwLzAgLj4uIDg0Ojg5IF4yICAgIDAvMCAuPi4gOTA6OTUgXjMgICAgMC8wIC4+LiA5NjoxMDEgXjQgICAgMC8wIC4+LiAxMDI6MTA3IF41ICAgIDAvMCAuPi4gMTA4OjExMyBeMCAgICAwLzAgLj4uIDExNDoxMTkgXjEgICAgMC8wIC4+LiAxMjA6MTI1IF4yICAgIDAvMCAuPi4gMTI2OjEyNyBeMworMC8xIC4uPi4gMDoxMjcgXjAKKzAvMyAuLj4uIDA6MzUgXjAgICAgMC8wIC4uPi4gMzY6NzEgXjEgICAgMC8wIC4uPi4gNzI6MTA3IF4yICAgIDAvMCAuLj4uIDEwODoxMjcgXjMKKzAvM2YgLi4+LiAwOjUgXjAgICAgMC8zIC4uPi4gNjoxMSBeMSAgICAwLzAgLi4+LiAxMjoxNyBeMiAgICAwLzAgLi4+LiAxODoyMyBeMyAgICAwLzAgLi4+LiAyNDoyOSBeNCAgICAwLzAgLi4+LiAzMDozNSBeNSAgICAwLzAgLi4+LiAzNjo0MSBeMCAgICAwLzAgLi4+LiA0Mjo0NyBeMSAgICAwLzAgLi4+LiA0ODo1MyBeMiAgICAwLzAgLi4+LiA1NDo1OSBeMyAgICAwLzAgLi4+LiA2MDo2NSBeNCAgICAwLzAgLi4+LiA2Njo3MSBeNSAgICAwLzAgLi4+LiA3Mjo3NyBeMCAgICAwLzAgLi4+LiA3ODo4MyBeMSAgICAwLzAgLi4+LiA4NDo4OSBeMiAgICAwLzAgLi4+LiA5MDo5NSBeMyAgICAwLzAgLi4+LiA5NjoxMDEgXjQgICAgMC8wIC4uPi4gMTAyOjEwNyBeNSAgICAwLzAgLi4+LiAxMDg6MTEzIF4wICAgIDAvMCAuLj4uIDExNDoxMTkgXjEgICAgMC8wIC4uPi4gMTIwOjEyNSBeMiAgICAwLzAgLi4+LiAxMjY6MTI3IF4zCiAKIFRoaXMgaXMgb25jZSBhZ2FpbiBzcGxpdCBpbnRvICJyY3Vfc2NoZWQiIGFuZCAicmN1X2JoIiBwb3J0aW9ucywKIGFuZCBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBrZXJuZWxzIHdpbGwgYWdhaW4gaGF2ZSBhbiBhZGRpdGlvbmFsCkBAIC0yNDAsMTMgKzMxMCwyMCBAQAogCQljdXJyZW50IGdyYWNlIHBlcmlvZC4KIAogCW8JVGhlIGNoYXJhY3RlcnMgc2VwYXJhdGVkIGJ5IHRoZSAiPiIgaW5kaWNhdGUgdGhlIHN0YXRlCi0JCW9mIHRoZSBibG9ja2VkLXRhc2tzIGxpc3RzLiAgQSAiVCIgcHJlY2VkaW5nIHRoZSAiPiIKKwkJb2YgdGhlIGJsb2NrZWQtdGFza3MgbGlzdHMuICBBICJHIiBwcmVjZWRpbmcgdGhlICI+IgogCQlpbmRpY2F0ZXMgdGhhdCBhdCBsZWFzdCBvbmUgdGFzayBibG9ja2VkIGluIGFuIFJDVQogCQlyZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiBibG9ja3MgdGhlIGN1cnJlbnQgZ3JhY2UKLQkJcGVyaW9kLCB3aGlsZSBhICIuIiBwcmVjZWRpbmcgdGhlICI+IiBpbmRpY2F0ZXMgb3RoZXJ3aXNlLgotCQlUaGUgY2hhcmFjdGVyIGZvbGxvd2luZyB0aGUgIj4iIGluZGljYXRlcyBzaW1pbGFybHkgZm9yCi0JCXRoZSBuZXh0IGdyYWNlIHBlcmlvZC4gIEEgIlQiIHNob3VsZCBhcHBlYXIgaW4gdGhpcwotCQlmaWVsZCBvbmx5IGZvciByY3UtcHJlZW1wdC4KKwkJcGVyaW9kLCB3aGlsZSBhICJFIiBwcmVjZWRpbmcgdGhlICI+IiBpbmRpY2F0ZXMgdGhhdAorCQlhdCBsZWFzdCBvbmUgdGFzayBibG9ja2VkIGluIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwKKwkJc2VjdGlvbiBibG9ja3MgdGhlIGN1cnJlbnQgZXhwZWRpdGVkIGdyYWNlIHBlcmlvZC4KKwkJQSAiVCIgY2hhcmFjdGVyIGZvbGxvd2luZyB0aGUgIj4iIGluZGljYXRlcyB0aGF0IGF0CisJCWxlYXN0IG9uZSB0YXNrIGlzIGJsb2NrZWQgd2l0aGluIGFuIFJDVSByZWFkLXNpZGUKKwkJY3JpdGljYWwgc2VjdGlvbiwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGFueSBjdXJyZW50CisJCWdyYWNlIHBlcmlvZCAoZXhwZWRpdGVkIG9yIG5vcm1hbCkgaXMgaW5jb252ZW5pZW5jZWQuCisJCUEgIi4iIGNoYXJhY3RlciBhcHBlYXJzIGlmIHRoZSBjb3JyZXNwb25kaW5nIGNvbmRpdGlvbgorCQlkb2VzIG5vdCBob2xkLCBzbyB0aGF0ICIuLj4uIiBpbmRpY2F0ZXMgdGhhdCBubyB0YXNrcworCQlhcmUgYmxvY2tlZC4gIEluIGNvbnRyYXN0LCAiR0U+VCIgaW5kaWNhdGVzIG1heGltYWwKKwkJaW5jb252ZW5pZW5jZSBmcm9tIGJsb2NrZWQgdGFza3MuCiAKIAlvCVRoZSBudW1iZXJzIHNlcGFyYXRlZCBieSB0aGUgIjoiIGFyZSB0aGUgcmFuZ2Ugb2YgQ1BVcwogCQlzZXJ2ZWQgYnkgdGhpcyBzdHJ1Y3QgcmN1X25vZGUuICBUaGlzIGNhbiBiZSBoZWxwZnVsCkBAIC0zMjgsNiArNDA1LDExMyBAQAogCWlzIGR1ZSB0byBzaG9ydC1jaXJjdWl0IGV2YWx1YXRpb24gaW4gcmN1X3BlbmRpbmcoKS4KIAogCitUaGUgb3V0cHV0IG9mICJjYXQgcmN1L3JjdXRvcnR1cmUiIGxvb2tzIGFzIGZvbGxvd3M6CisKK3JjdXRvcnR1cmUgdGVzdCBzZXF1ZW5jZTogMCAodGVzdCBpbiBwcm9ncmVzcykKK3JjdXRvcnR1cmUgdXBkYXRlIHZlcnNpb24gbnVtYmVyOiA2MTUKKworVGhlIGZpcnN0IGxpbmUgc2hvd3MgdGhlIG51bWJlciBvZiByY3V0b3J0dXJlIHRlc3RzIHRoYXQgaGF2ZSBjb21wbGV0ZWQKK3NpbmNlIGJvb3QuICBJZiBhIHRlc3QgaXMgY3VycmVudGx5IHJ1bm5pbmcsIHRoZSAiKHRlc3QgaW4gcHJvZ3Jlc3MpIgorc3RyaW5nIHdpbGwgYXBwZWFyIGFzIHNob3duIGFib3ZlLiAgVGhlIHNlY29uZCBsaW5lIHNob3dzIHRoZSBudW1iZXIgb2YKK3VwZGF0ZSBjeWNsZXMgdGhhdCB0aGUgY3VycmVudCB0ZXN0IGhhcyBzdGFydGVkLCBvciB6ZXJvIGlmIHRoZXJlIGlzCitubyB0ZXN0IGluIHByb2dyZXNzLgorCisKK1RoZSBvdXRwdXQgb2YgImNhdCByY3UvcmN1Ym9vc3QiIGxvb2tzIGFzIGZvbGxvd3M6CisKKzA6NSB0YXNrcz0uLi4uIGt0PVcgbnRiPTAgbmViPTAgbm5iPTAgaj0yZjk1IGJ0PTMwMGYKKyAgICAgYmFsazogbnQ9MCBlZ3Q9OTg5IGJ0PTAgbmI9MCBueT0wIG5vcz0xNgorNjo3IHRhc2tzPS4uLi4ga3Q9VyBudGI9MCBuZWI9MCBubmI9MCBqPTJmOTUgYnQ9MzAwZgorICAgICBiYWxrOiBudD0wIGVndD0yMjUgYnQ9MCBuYj0wIG55PTAgbm9zPTYKKworVGhpcyBpbmZvcm1hdGlvbiBpcyBvdXRwdXQgb25seSBmb3IgcmN1X3ByZWVtcHQuICBFYWNoIHR3by1saW5lIGVudHJ5Citjb3JyZXNwb25kcyB0byBhIGxlYWYgcmN1X25vZGUgc3RyY3V0dXJlLiAgVGhlIGZpZWxkcyBhcmUgYXMgZm9sbG93czoKKworbwkibjptIiBpcyB0aGUgQ1BVLW51bWJlciByYW5nZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgdHdvLWxpbmUKKwllbnRyeS4gIEluIHRoZSBzYW1wbGUgb3V0cHV0IGFib3ZlLCB0aGUgZmlyc3QgZW50cnkgY292ZXJzCisJQ1BVcyB6ZXJvIHRocm91Z2ggZml2ZSBhbmQgdGhlIHNlY29uZCBlbnRyeSBjb3ZlcnMgQ1BVcyA2CisJYW5kIDcuCisKK28JInRhc2tzPVRORUIiIGdpdmVzIHRoZSBzdGF0ZSBvZiB0aGUgdmFyaW91cyBzZWdtZW50cyBvZiB0aGUKKwlybnAtPmJsb2NrZWRfdGFza3MgbGlzdDoKKworCSJUIglUaGlzIGluZGljYXRlcyB0aGF0IHRoZXJlIGFyZSBzb21lIHRhc2tzIHRoYXQgYmxvY2tlZAorCQl3aGlsZSBydW5uaW5nIG9uIG9uZSBvZiB0aGUgY29ycmVzcG9uZGluZyBDUFVzIHdoaWxlCisJCWluIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KKworCSJOIglUaGlzIGluZGljYXRlcyB0aGF0IHNvbWUgb2YgdGhlIGJsb2NrZWQgdGFza3MgYXJlIHByZXZlbnRpbmcKKwkJdGhlIGN1cnJlbnQgbm9ybWFsIChub24tZXhwZWRpdGVkKSBncmFjZSBwZXJpb2QgZnJvbQorCQljb21wbGV0aW5nLgorCisJIkUiCVRoaXMgaW5kaWNhdGVzIHRoYXQgc29tZSBvZiB0aGUgYmxvY2tlZCB0YXNrcyBhcmUgcHJldmVudGluZworCQl0aGUgY3VycmVudCBleHBlZGl0ZWQgZ3JhY2UgcGVyaW9kIGZyb20gY29tcGxldGluZy4KKworCSJCIglUaGlzIGluZGljYXRlcyB0aGF0IHNvbWUgb2YgdGhlIGJsb2NrZWQgdGFza3MgYXJlIGluCisJCW5lZWQgb2YgUkNVIHByaW9yaXR5IGJvb3N0aW5nLgorCisJRWFjaCBjaGFyYWN0ZXIgaXMgcmVwbGFjZWQgd2l0aCAiLiIgaWYgdGhlIGNvcnJlc3BvbmRpbmcKKwljb25kaXRpb24gZG9lcyBub3QgaG9sZC4KKworbwkia3QiIGlzIHRoZSBzdGF0ZSBvZiB0aGUgUkNVIHByaW9yaXR5LWJvb3N0aW5nIGtlcm5lbAorCXRocmVhZCBhc3NvY2lhdGVkIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgcmN1X25vZGUgc3RydWN0dXJlLgorCVRoZSBzdGF0ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKwkiUyIJVGhlIGtlcm5lbCB0aHJlYWQgaXMgc3RvcHBlZCwgaW4gb3RoZXIgd29yZHMsIGFsbAorCQlDUFVzIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyByY3Vfbm9kZSBzdHJ1Y3R1cmUgYXJlCisJCW9mZmxpbmUuCisKKwkiUiIJVGhlIGtlcm5lbCB0aHJlYWQgaXMgcnVubmluZy4KKworCSJXIglUaGUga2VybmVsIHRocmVhZCBpcyB3YWl0aW5nIGJlY2F1c2UgdGhlcmUgaXMgbm8gd29yaworCQlmb3IgaXQgdG8gZG8uCisKKwkiWSIJVGhlIGtlcm5lbCB0aHJlYWQgaXMgeWllbGRpbmcgdG8gYXZvaWQgaG9nZ2luZyBDUFUuCisKKwkiPyIJVW5rbm93biB2YWx1ZSwgaW5kaWNhdGVzIGEgYnVnLgorCitvCSJudGIiIGlzIHRoZSBudW1iZXIgb2YgdGFza3MgYm9vc3RlZC4KKworbwkibmViIiBpcyB0aGUgbnVtYmVyIG9mIHRhc2tzIGJvb3N0ZWQgaW4gb3JkZXIgdG8gY29tcGxldGUgYW4KKwlleHBlZGl0ZWQgZ3JhY2UgcGVyaW9kLgorCitvCSJubmIiIGlzIHRoZSBudW1iZXIgb2YgdGFza3MgYm9vc3RlZCBpbiBvcmRlciB0byBjb21wbGV0ZSBhCisJbm9ybWFsIChub24tZXhwZWRpdGVkKSBncmFjZSBwZXJpb2QuICBXaGVuIGJvb3N0aW5nIGEgdGFzaworCXRoYXQgd2FzIGJsb2NraW5nIGJvdGggYW4gZXhwZWRpdGVkIGFuZCBhIG5vcm1hbCBncmFjZSBwZXJpb2QsCisJaXQgaXMgY291bnRlZCBhZ2FpbnN0IHRoZSBleHBlZGl0ZWQgdG90YWwgYWJvdmUuCisKK28JImoiIGlzIHRoZSBsb3ctb3JkZXIgMTYgYml0cyBvZiB0aGUgamlmZmllcyBjb3VudGVyIGluCisJaGV4YWRlY2ltYWwuCisKK28JImJ0IiBpcyB0aGUgbG93LW9yZGVyIDE2IGJpdHMgb2YgdGhlIHZhbHVlIHRoYXQgdGhlIGppZmZpZXMKKwljb3VudGVyIHdpbGwgaGF2ZSB3aGVuIHdlIG5leHQgc3RhcnQgYm9vc3RpbmcsIGFzc3VtaW5nIHRoYXQKKwl0aGUgY3VycmVudCBncmFjZSBwZXJpb2QgZG9lcyBub3QgZW5kIGJlZm9yZWhhbmQuICBUaGlzIGlzCisJYWxzbyBpbiBoZXhhZGVjaW1hbC4KKworbwkiYmFsazogbnQiIGNvdW50cyB0aGUgbnVtYmVyIG9mIHRpbWVzIHdlIGRpZG4ndCBib29zdCAoaW4KKwlvdGhlciB3b3Jkcywgd2UgYmFsa2VkKSBldmVuIHRob3VnaCBpdCB3YXMgdGltZSB0byBib29zdCBiZWNhdXNlCisJdGhlcmUgd2VyZSBubyBibG9ja2VkIHRhc2tzIHRvIGJvb3N0LiAgVGhpcyBzaXR1YXRpb24gb2NjdXJzCisJd2hlbiB0aGVyZSBpcyBvbmUgYmxvY2tlZCB0YXNrIG9uIG9uZSByY3Vfbm9kZSBzdHJ1Y3R1cmUgYW5kCisJbm9uZSBvbiBzb21lIG90aGVyIHJjdV9ub2RlIHN0cnVjdHVyZS4KKworbwkiZWd0IiBjb3VudHMgdGhlIG51bWJlciBvZiB0aW1lcyB3ZSBiYWxrZWQgYmVjYXVzZSBhbHRob3VnaAorCXRoZXJlIHdlcmUgYmxvY2tlZCB0YXNrcywgbm9uZSBvZiB0aGVtIHdlcmUgYmxvY2tpbmcgdGhlCisJY3VycmVudCBncmFjZSBwZXJpb2QsIHdoZXRoZXIgZXhwZWRpdGVkIG9yIG90aGVyd2lzZS4KKworbwkiYnQiIGNvdW50cyB0aGUgbnVtYmVyIG9mIHRpbWVzIHdlIGJhbGtlZCBiZWNhdXNlIGJvb3N0aW5nCisJaGFkIGFscmVhZHkgYmVlbiBpbml0aWF0ZWQgZm9yIHRoZSBjdXJyZW50IGdyYWNlIHBlcmlvZC4KKworbwkibmIiIGNvdW50cyB0aGUgbnVtYmVyIG9mIHRpbWVzIHdlIGJhbGtlZCBiZWNhdXNlIHRoZXJlCisJd2FzIGF0IGxlYXN0IG9uZSB0YXNrIGJsb2NraW5nIHRoZSBjdXJyZW50IG5vbi1leHBlZGl0ZWQgZ3JhY2UKKwlwZXJpb2QgdGhhdCBuZXZlciBoYWQgYmxvY2tlZC4gIElmIGl0IGlzIGFscmVhZHkgcnVubmluZywgaXQKKwlqdXN0IHdvbid0IGhlbHAgdG8gYm9vc3QgaXRzIHByaW9yaXR5IQorCitvCSJueSIgY291bnRzIHRoZSBudW1iZXIgb2YgdGltZXMgd2UgYmFsa2VkIGJlY2F1c2UgaXQgd2FzCisJbm90IHlldCB0aW1lIHRvIHN0YXJ0IGJvb3N0aW5nLgorCitvCSJub3MiIGNvdW50cyB0aGUgbnVtYmVyIG9mIHRpbWVzIHdlIGJhbGtlZCBmb3Igb3RoZXIKKwlyZWFzb25zLCBlLmcuLCB0aGUgZ3JhY2UgcGVyaW9kIGVuZGVkIGZpcnN0LgorCisKIENPTkZJR19USU5ZX1JDVSBhbmQgQ09ORklHX1RJTllfUFJFRU1QVF9SQ1UgZGVidWdmcyBGaWxlcyBhbmQgRm9ybWF0cwogCiBUaGVzZSBpbXBsZW1lbnRhdGlvbnMgb2YgUkNVIHByb3ZpZGVzIGEgc2luZ2xlIGRlYnVnZnMgZmlsZSB1bmRlciB0aGUKQEAgLTM5NCw5ICs1NzgsOSBAQAogbwkibm5iIiBpcyB0aGUgbnVtYmVyIG9mIG5vcm1hbCBncmFjZSBwZXJpb2RzIHRoYXQgaGF2ZSBoYWQKIAl0byByZXNvcnQgdG8gUkNVIHByaW9yaXR5IGJvb3N0aW5nIHNpbmNlIGJvb3QuCiAKLW8JImoiIGlzIHRoZSBsb3ctb3JkZXIgMTIgYml0cyBvZiB0aGUgamlmZmllcyBjb3VudGVyIGluIGhleGFkZWNpbWFsLgorbwkiaiIgaXMgdGhlIGxvdy1vcmRlciAxNiBiaXRzIG9mIHRoZSBqaWZmaWVzIGNvdW50ZXIgaW4gaGV4YWRlY2ltYWwuCiAKLW8JImJ0IiBpcyB0aGUgbG93LW9yZGVyIDEyIGJpdHMgb2YgdGhlIHZhbHVlIHRoYXQgdGhlIGppZmZpZXMgY291bnRlcgorbwkiYnQiIGlzIHRoZSBsb3ctb3JkZXIgMTYgYml0cyBvZiB0aGUgdmFsdWUgdGhhdCB0aGUgamlmZmllcyBjb3VudGVyCiAJd2lsbCBoYXZlIGF0IHRoZSBuZXh0IHRpbWUgdGhhdCBib29zdGluZyBpcyBzY2hlZHVsZWQgdG8gYmVnaW4uCiAKIG8JSW4gdGhlIGxpbmUgYmVnaW5uaW5nIHdpdGggIm5vcm1hbCBiYWxrIiwgdGhlIGZpZWxkcyBhcmUgYXMgZm9sbG93czoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1vcnkudHh0IGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL21lbW9yeS50eHQKaW5kZXggYjZlZDYxYy4uN2MxNjM0NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL21lbW9yeS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL21lbW9yeS50eHQKQEAgLTUyLDggKzUyLDEwIEBACiAgdGFza3MJCQkJICMgYXR0YWNoIGEgdGFzayh0aHJlYWQpIGFuZCBzaG93IGxpc3Qgb2YgdGhyZWFkcwogIGNncm91cC5wcm9jcwkJCSAjIHNob3cgbGlzdCBvZiBwcm9jZXNzZXMKICBjZ3JvdXAuZXZlbnRfY29udHJvbAkJICMgYW4gaW50ZXJmYWNlIGZvciBldmVudF9mZCgpCi0gbWVtb3J5LnVzYWdlX2luX2J5dGVzCQkgIyBzaG93IGN1cnJlbnQgbWVtb3J5KFJTUytDYWNoZSkgdXNhZ2UuCi0gbWVtb3J5Lm1lbXN3LnVzYWdlX2luX2J5dGVzCSAjIHNob3cgY3VycmVudCBtZW1vcnkrU3dhcCB1c2FnZQorIG1lbW9yeS51c2FnZV9pbl9ieXRlcwkJICMgc2hvdyBjdXJyZW50IHJlc19jb3VudGVyIHVzYWdlIGZvciBtZW1vcnkKKwkJCQkgKFNlZSA1LjUgZm9yIGRldGFpbHMpCisgbWVtb3J5Lm1lbXN3LnVzYWdlX2luX2J5dGVzCSAjIHNob3cgY3VycmVudCByZXNfY291bnRlciB1c2FnZSBmb3IgbWVtb3J5K1N3YXAKKwkJCQkgKFNlZSA1LjUgZm9yIGRldGFpbHMpCiAgbWVtb3J5LmxpbWl0X2luX2J5dGVzCQkgIyBzZXQvc2hvdyBsaW1pdCBvZiBtZW1vcnkgdXNhZ2UKICBtZW1vcnkubWVtc3cubGltaXRfaW5fYnl0ZXMJICMgc2V0L3Nob3cgbGltaXQgb2YgbWVtb3J5K1N3YXAgdXNhZ2UKICBtZW1vcnkuZmFpbGNudAkJCSAjIHNob3cgdGhlIG51bWJlciBvZiBtZW1vcnkgdXNhZ2UgaGl0cyBsaW1pdHMKQEAgLTQ1Myw2ICs0NTUsMTUgQEAKIFlvdSBjYW4gcmVzZXQgZmFpbGNudCBieSB3cml0aW5nIDAgdG8gZmFpbGNudCBmaWxlLgogIyBlY2hvIDAgPiAuLi4vbWVtb3J5LmZhaWxjbnQKIAorNS41IHVzYWdlX2luX2J5dGVzCisKK0ZvciBlZmZpY2llbmN5LCBhcyBvdGhlciBrZXJuZWwgY29tcG9uZW50cywgbWVtb3J5IGNncm91cCB1c2VzIHNvbWUgb3B0aW1pemF0aW9uCit0byBhdm9pZCB1bm5lY2Vzc2FyeSBjYWNoZWxpbmUgZmFsc2Ugc2hhcmluZy4gdXNhZ2VfaW5fYnl0ZXMgaXMgYWZmZWN0ZWQgYnkgdGhlCittZXRob2QgYW5kIGRvZXNuJ3Qgc2hvdyAnZXhhY3QnIHZhbHVlIG9mIG1lbW9yeShhbmQgc3dhcCkgdXNhZ2UsIGl0J3MgYW4gZnV6egordmFsdWUgZm9yIGVmZmljaWVudCBhY2Nlc3MuIChPZiBjb3Vyc2UsIHdoZW4gbmVjZXNzYXJ5LCBpdCdzIHN5bmNocm9uaXplZC4pCitJZiB5b3Ugd2FudCB0byBrbm93IG1vcmUgZXhhY3QgbWVtb3J5IHVzYWdlLCB5b3Ugc2hvdWxkIHVzZSBSU1MrQ0FDSEUoK1NXQVApCit2YWx1ZSBpbiBtZW1vcnkuc3RhdChzZWUgNS4yKS4KKwogNi4gSGllcmFyY2h5IHN1cHBvcnQKIAogVGhlIG1lbW9yeSBjb250cm9sbGVyIHN1cHBvcnRzIGEgZGVlcCBoaWVyYXJjaHkgYW5kIGhpZXJhcmNoaWNhbCBhY2NvdW50aW5nLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2NyeXB0by9mc2wtc2VjNC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY3J5cHRvL2ZzbC1zZWM0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjU3ZWNkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2NyeXB0by9mc2wtc2VjNC50eHQKQEAgLTAsMCArMSwzOTcgQEAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorU0VDIDQgRGV2aWNlIFRyZWUgQmluZGluZworQ29weXJpZ2h0IChDKSAyMDA4LTIwMTEgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorCisgQ09OVEVOVFMKKyAgIC1PdmVydmlldworICAgLVNFQyA0IE5vZGUKKyAgIC1Kb2IgUmluZyBOb2RlCisgICAtUnVuIFRpbWUgSW50ZWdyaXR5IENoZWNrIChSVElDKSBOb2RlCisgICAtUnVuIFRpbWUgSW50ZWdyaXR5IENoZWNrIChSVElDKSBNZW1vcnkgTm9kZQorICAgLVNlY3VyZSBOb24tVm9sYXRpbGUgU3RvcmFnZSAoU05WUykgTm9kZQorICAgLUZ1bGwgRXhhbXBsZQorCitOT1RFOiB0aGUgU0VDIDQgaXMgYWxzbyBrbm93biBhcyBGcmVlc2NhbGUncyBDcnlwdG9ncmFwaGljIEFjY2VsZXJhdG9yCitBY2NlbGVyYXRvciBhbmQgQXNzdXJhbmNlIE1vZHVsZSAoQ0FBTSkuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorT3ZlcnZpZXcKKworREVTQ1JJUFRJT04KKworU0VDIDQgaC93IGNhbiBwcm9jZXNzIHJlcXVlc3RzIGZyb20gMiB0eXBlcyBvZiBzb3VyY2VzLgorMS4gRFBBQSBRdWV1ZSBJbnRlcmZhY2UgKEhXIGludGVyZmFjZSBiZXR3ZWVuIFF1ZXVlIE1hbmFnZXIgJiBTRUMgNCkuCisyLiBKb2IgUmluZ3MgKEhXIGludGVyZmFjZSBiZXR3ZWVuIGNvcmVzICYgU0VDIDQgcmVnaXN0ZXJzKS4KKworSGlnaCBTcGVlZCBEYXRhIFBhdGggQ29uZmlndXJhdGlvbjoKKworSFcgaW50ZXJmYWNlIGJldHdlZW4gUU0gJiBTRUMgNCBhbmQgYWxzbyBCTSAmIFNFQyA0LCBvbiBEUEFBLWVuYWJsZWQgcGFydHMKK3N1Y2ggYXMgdGhlIFA0MDgwLiAgVGhlIG51bWJlciBvZiBzaW11bHRhbmVvdXMgZGVxdWV1ZXMgdGhlIFFJIGNhbiBtYWtlIGlzCitlcXVhbCB0byB0aGUgbnVtYmVyIG9mIERlc2NyaXB0b3IgQ29udHJvbGxlciAoREVDTykgZW5naW5lcyBpbiBhIHBhcnRpY3VsYXIKK1NFQyB2ZXJzaW9uLiAgRS5nLiwgdGhlIFNFQyA0LjAgaW4gdGhlIFA0MDgwIGhhcyA1IERFQ09zIGFuZCBjYW4gdGh1cworZGVxdWV1ZSBmcm9tIDUgc3VicG9ydGFscyBzaW11bHRhbmVvdXNseS4KKworSm9iIFJpbmcgRGF0YSBQYXRoIENvbmZpZ3VyYXRpb246CisKK0VhY2ggSlIgaXMgbG9jYXRlZCBvbiBhIHNlcGFyYXRlIDRrIHBhZ2UsIHRoZXkgbWF5IChvciBtYXkgbm90KSBiZSBtYWRlIHZpc2libGUKK2luIHRoZSBtZW1vcnkgcGFydGl0aW9uIGRldm90ZWQgdG8gYSBwYXJ0aWN1bGFyIGNvcmUuICBUaGUgUDQwODAgaGFzIDQgSlJzLCBzbwordXAgdG8gNCBKUnMgY2FuIGJlIGNvbmZpZ3VyZWQ7IGFuZCBhbGwgNCBKUnMgcHJvY2VzcyByZXF1ZXN0cyBpbiBwYXJhbGxlbC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitTRUMgNCBOb2RlCisKK0Rlc2NyaXB0aW9uCisKKyAgICBOb2RlIGRlZmluZXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgU0VDIDQgYmxvY2suCisgICAgVGhpcyBibG9jayBzcGVjaWZpZXMgdGhlIGFkZHJlc3MgcmFuZ2Ugb2YgYWxsIGdsb2JhbAorICAgIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIGZvciB0aGUgU0VDIDQgYmxvY2suICBJdAorICAgIGFsc28gcmVjZWl2ZXMgaW50ZXJydXB0cyBmcm9tIHRoZSBSdW4gVGltZSBJbnRlZ3JpdHkgQ2hlY2sKKyAgICAoUlRJQykgZnVuY3Rpb24gd2l0aGluIHRoZSBTRUMgNCBibG9jay4KKworUFJPUEVSVElFUworCisgICAtIGNvbXBhdGlibGUKKyAgICAgIFVzYWdlOiByZXF1aXJlZAorICAgICAgVmFsdWUgdHlwZTogPHN0cmluZz4KKyAgICAgIERlZmluaXRpb246IE11c3QgaW5jbHVkZSAiZnNsLHNlYy12NC4wIgorCisgICAtICNhZGRyZXNzLWNlbGxzCisgICAgICAgVXNhZ2U6IHJlcXVpcmVkCisgICAgICAgVmFsdWUgdHlwZTogPHUzMj4KKyAgICAgICBEZWZpbml0aW9uOiBBIHN0YW5kYXJkIHByb3BlcnR5LiAgRGVmaW5lcyB0aGUgbnVtYmVyIG9mIGNlbGxzCisgICAgICAgICAgIGZvciByZXByZXNlbnRpbmcgcGh5c2ljYWwgYWRkcmVzc2VzIGluIGNoaWxkIG5vZGVzLgorCisgICAtICNzaXplLWNlbGxzCisgICAgICAgVXNhZ2U6IHJlcXVpcmVkCisgICAgICAgVmFsdWUgdHlwZTogPHUzMj4KKyAgICAgICBEZWZpbml0aW9uOiBBIHN0YW5kYXJkIHByb3BlcnR5LiAgRGVmaW5lcyB0aGUgbnVtYmVyIG9mIGNlbGxzCisgICAgICAgICAgIGZvciByZXByZXNlbnRpbmcgdGhlIHNpemUgb2YgcGh5c2ljYWwgYWRkcmVzc2VzIGluCisgICAgICAgICAgIGNoaWxkIG5vZGVzLgorCisgICAtIHJlZworICAgICAgVXNhZ2U6IHJlcXVpcmVkCisgICAgICBWYWx1ZSB0eXBlOiA8cHJvcC1lbmNvZGVkLWFycmF5PgorICAgICAgRGVmaW5pdGlvbjogQSBzdGFuZGFyZCBwcm9wZXJ0eS4gIFNwZWNpZmllcyB0aGUgcGh5c2ljYWwKKyAgICAgICAgICBhZGRyZXNzIGFuZCBsZW5ndGggb2YgdGhlIFNFQzQgY29uZmlndXJhdGlvbiByZWdpc3RlcnMuCisgICAgICAgICAgcmVnaXN0ZXJzCisKKyAgIC0gcmFuZ2VzCisgICAgICAgVXNhZ2U6IHJlcXVpcmVkCisgICAgICAgVmFsdWUgdHlwZTogPHByb3AtZW5jb2RlZC1hcnJheT4KKyAgICAgICBEZWZpbml0aW9uOiBBIHN0YW5kYXJkIHByb3BlcnR5LiAgU3BlY2lmaWVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzCisgICAgICAgICAgIHJhbmdlIG9mIHRoZSBTRUMgNC4wIHJlZ2lzdGVyIHNwYWNlICgtU05WUyBub3QgaW5jbHVkZWQpLiAgQQorICAgICAgICAgICB0cmlwbGV0IHRoYXQgaW5jbHVkZXMgdGhlIGNoaWxkIGFkZHJlc3MsIHBhcmVudCBhZGRyZXNzLCAmCisgICAgICAgICAgIGxlbmd0aC4KKworICAgLSBpbnRlcnJ1cHRzCisgICAgICBVc2FnZTogcmVxdWlyZWQKKyAgICAgIFZhbHVlIHR5cGU6IDxwcm9wX2VuY29kZWQtYXJyYXk+CisgICAgICBEZWZpbml0aW9uOiAgU3BlY2lmaWVzIHRoZSBpbnRlcnJ1cHRzIGdlbmVyYXRlZCBieSB0aGlzCisgICAgICAgICAgIGRldmljZS4gIFRoZSB2YWx1ZSBvZiB0aGUgaW50ZXJydXB0cyBwcm9wZXJ0eQorICAgICAgICAgICBjb25zaXN0cyBvZiBvbmUgaW50ZXJydXB0IHNwZWNpZmllci4gVGhlIGZvcm1hdAorICAgICAgICAgICBvZiB0aGUgc3BlY2lmaWVyIGlzIGRlZmluZWQgYnkgdGhlIGJpbmRpbmcgZG9jdW1lbnQKKyAgICAgICAgICAgZGVzY3JpYmluZyB0aGUgbm9kZSdzIGludGVycnVwdCBwYXJlbnQuCisKKyAgIC0gaW50ZXJydXB0LXBhcmVudAorICAgICAgVXNhZ2U6IChyZXF1aXJlZCBpZiBpbnRlcnJ1cHQgcHJvcGVydHkgaXMgZGVmaW5lZCkKKyAgICAgIFZhbHVlIHR5cGU6IDxwaGFuZGxlPgorICAgICAgRGVmaW5pdGlvbjogQSBzaW5nbGUgPHBoYW5kbGU+IHZhbHVlIHRoYXQgcG9pbnRzCisgICAgICAgICAgdG8gdGhlIGludGVycnVwdCBwYXJlbnQgdG8gd2hpY2ggdGhlIGNoaWxkIGRvbWFpbgorICAgICAgICAgIGlzIGJlaW5nIG1hcHBlZC4KKworICAgTm90ZTogQWxsIG90aGVyIHN0YW5kYXJkIHByb3BlcnRpZXMgKHNlZSB0aGUgZVBBUFIpIGFyZSBhbGxvd2VkCisgICBidXQgYXJlIG9wdGlvbmFsLgorCisKK0VYQU1QTEUKKwljcnlwdG9AMzAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJlZyA9IDwweDMwMDAwMCAweDEwMDAwPjsKKwkJcmFuZ2VzID0gPDAgMHgzMDAwMDAgMHgxMDAwMD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQlpbnRlcnJ1cHRzID0gPDkyIDI+OworCX07CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorSm9iIFJpbmcgKEpSKSBOb2RlCisKKyAgICBDaGlsZCBvZiB0aGUgY3J5cHRvIG5vZGUgZGVmaW5lcyBkYXRhIHByb2Nlc3NpbmcgaW50ZXJmYWNlIHRvIFNFQyA0CisgICAgYWNyb3NzIHRoZSBwZXJpcGhlcmFsIGJ1cyBmb3IgcHVycG9zZXMgb2YgcHJvY2Vzc2luZworICAgIGNyeXB0b2dyYXBoaWMgZGVzY3JpcHRvcnMuIFRoZSBzcGVjaWZpZWQgYWRkcmVzcworICAgIHJhbmdlIGNhbiBiZSBtYWRlIHZpc2libGUgdG8gb25lIChvciBtb3JlKSBjb3Jlcy4KKyAgICBUaGUgaW50ZXJydXB0IGRlZmluZWQgZm9yIHRoaXMgbm9kZSBpcyBjb250cm9sbGVkIHdpdGhpbgorICAgIHRoZSBhZGRyZXNzIHJhbmdlIG9mIHRoaXMgbm9kZS4KKworICAtIGNvbXBhdGlibGUKKyAgICAgIFVzYWdlOiByZXF1aXJlZAorICAgICAgVmFsdWUgdHlwZTogPHN0cmluZz4KKyAgICAgIERlZmluaXRpb246IE11c3QgaW5jbHVkZSAiZnNsLHNlYy12NC4wLWpvYi1yaW5nIgorCisgIC0gcmVnCisgICAgICBVc2FnZTogcmVxdWlyZWQKKyAgICAgIFZhbHVlIHR5cGU6IDxwcm9wLWVuY29kZWQtYXJyYXk+CisgICAgICBEZWZpbml0aW9uOiBTcGVjaWZpZXMgYSB0d28gSlIgcGFyYW1ldGVyczogIGFuIG9mZnNldCBmcm9tCisgICAgICAgICAgdGhlIHBhcmVudCBwaHlzaWNhbCBhZGRyZXNzIGFuZCB0aGUgbGVuZ3RoIHRoZSBKUiByZWdpc3RlcnMuCisKKyAgIC0gZnNsLGxpb2RuCisgICAgICAgVXNhZ2U6IG9wdGlvbmFsLWJ1dC1yZWNvbW1lbmRlZAorICAgICAgIFZhbHVlIHR5cGU6IDxwcm9wLWVuY29kZWQtYXJyYXk+CisgICAgICAgRGVmaW5pdGlvbjoKKyAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBMSU9ETiB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGgKKyAgICAgICAgICAgdGhlIHBwaWQtdG8tbGlvZG4gdGFibGUgdGhhdCBzcGVjaWZpZXMgdGhlIFBQSUQgdG8gTElPRE4gbWFwcGluZy4KKyAgICAgICAgICAgTmVlZGVkIGlmIHRoZSBQQU1VIGlzIHVzZWQuICBWYWx1ZSBpcyBhIDEyIGJpdCB2YWx1ZQorICAgICAgICAgICB3aGVyZSB2YWx1ZSBpcyBhIExJT0ROIElEIGZvciB0aGlzIEpSLiBUaGlzIHByb3BlcnR5IGlzCisgICAgICAgICAgIG5vcm1hbGx5IHNldCBieSBib290IGZpcm13YXJlLgorCisgICAtIGludGVycnVwdHMKKyAgICAgIFVzYWdlOiByZXF1aXJlZAorICAgICAgVmFsdWUgdHlwZTogPHByb3BfZW5jb2RlZC1hcnJheT4KKyAgICAgIERlZmluaXRpb246ICBTcGVjaWZpZXMgdGhlIGludGVycnVwdHMgZ2VuZXJhdGVkIGJ5IHRoaXMKKyAgICAgICAgICAgZGV2aWNlLiAgVGhlIHZhbHVlIG9mIHRoZSBpbnRlcnJ1cHRzIHByb3BlcnR5CisgICAgICAgICAgIGNvbnNpc3RzIG9mIG9uZSBpbnRlcnJ1cHQgc3BlY2lmaWVyLiBUaGUgZm9ybWF0CisgICAgICAgICAgIG9mIHRoZSBzcGVjaWZpZXIgaXMgZGVmaW5lZCBieSB0aGUgYmluZGluZyBkb2N1bWVudAorICAgICAgICAgICBkZXNjcmliaW5nIHRoZSBub2RlJ3MgaW50ZXJydXB0IHBhcmVudC4KKworICAgLSBpbnRlcnJ1cHQtcGFyZW50CisgICAgICBVc2FnZTogKHJlcXVpcmVkIGlmIGludGVycnVwdCBwcm9wZXJ0eSBpcyBkZWZpbmVkKQorICAgICAgVmFsdWUgdHlwZTogPHBoYW5kbGU+CisgICAgICBEZWZpbml0aW9uOiBBIHNpbmdsZSA8cGhhbmRsZT4gdmFsdWUgdGhhdCBwb2ludHMKKyAgICAgICAgICB0byB0aGUgaW50ZXJydXB0IHBhcmVudCB0byB3aGljaCB0aGUgY2hpbGQgZG9tYWluCisgICAgICAgICAgaXMgYmVpbmcgbWFwcGVkLgorCitFWEFNUExFCisJanJAMTAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLHNlYy12NC4wLWpvYi1yaW5nIjsKKwkJcmVnID0gPDB4MTAwMCAweDEwMDA+OworCQlmc2wsbGlvZG4gPSA8MHgwODE+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJaW50ZXJydXB0cyA9IDw4OCAyPjsKKwl9OworCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUnVuIFRpbWUgSW50ZWdyaXR5IENoZWNrIChSVElDKSBOb2RlCisKKyAgQ2hpbGQgbm9kZSBvZiB0aGUgY3J5cHRvIG5vZGUuICBEZWZpbmVzIGEgcmVnaXN0ZXIgc3BhY2UgdGhhdAorICBjb250YWlucyB1cCB0byA1IHNldHMgb2YgYWRkcmVzc2VzIGFuZCB0aGVpciBsZW5ndGhzIChzaXplcykgdGhhdAorICB3aWxsIGJlIGNoZWNrZWQgYXQgcnVuIHRpbWUuICBBZnRlciBhbiBpbml0aWFsIGhhc2ggcmVzdWx0IGlzCisgIGNhbGN1bGF0ZWQsIHRoZXNlIGFkZHJlc3NlcyBhcmUgY2hlY2tlZCBieSBIVyB0byBtb25pdG9yIGFueQorICBjaGFuZ2UuICBJZiBhbnkgbWVtb3J5IGlzIG1vZGlmaWVkLCBhIFNlY3VyaXR5IFZpb2xhdGlvbiBpcworICB0cmlnZ2VyZWQgKHNlZSBTTlZTIGRlZmluaXRpb24pLgorCisKKyAgLSBjb21wYXRpYmxlCisgICAgICBVc2FnZTogcmVxdWlyZWQKKyAgICAgIFZhbHVlIHR5cGU6IDxzdHJpbmc+CisgICAgICBEZWZpbml0aW9uOiBNdXN0IGluY2x1ZGUgImZzbCxzZWMtdjQuMC1ydGljIi4KKworICAgLSAjYWRkcmVzcy1jZWxscworICAgICAgIFVzYWdlOiByZXF1aXJlZAorICAgICAgIFZhbHVlIHR5cGU6IDx1MzI+CisgICAgICAgRGVmaW5pdGlvbjogQSBzdGFuZGFyZCBwcm9wZXJ0eS4gIERlZmluZXMgdGhlIG51bWJlciBvZiBjZWxscworICAgICAgICAgICBmb3IgcmVwcmVzZW50aW5nIHBoeXNpY2FsIGFkZHJlc3NlcyBpbiBjaGlsZCBub2Rlcy4gIE11c3QKKyAgICAgICAgICAgaGF2ZSBhIHZhbHVlIG9mIDEuCisKKyAgIC0gI3NpemUtY2VsbHMKKyAgICAgICBVc2FnZTogcmVxdWlyZWQKKyAgICAgICBWYWx1ZSB0eXBlOiA8dTMyPgorICAgICAgIERlZmluaXRpb246IEEgc3RhbmRhcmQgcHJvcGVydHkuICBEZWZpbmVzIHRoZSBudW1iZXIgb2YgY2VsbHMKKyAgICAgICAgICAgZm9yIHJlcHJlc2VudGluZyB0aGUgc2l6ZSBvZiBwaHlzaWNhbCBhZGRyZXNzZXMgaW4KKyAgICAgICAgICAgY2hpbGQgbm9kZXMuICBNdXN0IGhhdmUgYSB2YWx1ZSBvZiAxLgorCisgIC0gcmVnCisgICAgICBVc2FnZTogcmVxdWlyZWQKKyAgICAgIFZhbHVlIHR5cGU6IDxwcm9wLWVuY29kZWQtYXJyYXk+CisgICAgICBEZWZpbml0aW9uOiBBIHN0YW5kYXJkIHByb3BlcnR5LiAgU3BlY2lmaWVzIGEgdHdvIHBhcmFtZXRlcnM6CisgICAgICAgICAgYW4gb2Zmc2V0IGZyb20gdGhlIHBhcmVudCBwaHlzaWNhbCBhZGRyZXNzIGFuZCB0aGUgbGVuZ3RoCisgICAgICAgICAgdGhlIFNFQzQgcmVnaXN0ZXJzLgorCisgICAtIHJhbmdlcworICAgICAgIFVzYWdlOiByZXF1aXJlZAorICAgICAgIFZhbHVlIHR5cGU6IDxwcm9wLWVuY29kZWQtYXJyYXk+CisgICAgICAgRGVmaW5pdGlvbjogQSBzdGFuZGFyZCBwcm9wZXJ0eS4gIFNwZWNpZmllcyB0aGUgcGh5c2ljYWwgYWRkcmVzcworICAgICAgICAgICByYW5nZSBvZiB0aGUgU0VDIDQgcmVnaXN0ZXIgc3BhY2UgKC1TTlZTIG5vdCBpbmNsdWRlZCkuICBBCisgICAgICAgICAgIHRyaXBsZXQgdGhhdCBpbmNsdWRlcyB0aGUgY2hpbGQgYWRkcmVzcywgcGFyZW50IGFkZHJlc3MsICYKKyAgICAgICAgICAgbGVuZ3RoLgorCitFWEFNUExFCisJcnRpY0A2MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAtcnRpYyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmVnID0gPDB4NjAwMCAweDEwMD47CisJCXJhbmdlcyA9IDwweDAgMHg2MTAwIDB4ZTAwPjsKKwl9OworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1J1biBUaW1lIEludGVncml0eSBDaGVjayAoUlRJQykgTWVtb3J5IE5vZGUKKyAgQSBjaGlsZCBub2RlIHRoYXQgZGVmaW5lcyBpbmRpdmlkdWFsIFJUSUMgbWVtb3J5IHJlZ2lvbnMgdGhhdCBhcmUgdXNlZCB0bworICBwZXJmb3JtIHJ1bi10aW1lIGludGVncml0eSBjaGVjayBvZiBtZW1vcnkgYXJlYXMgdGhhdCBzaG91bGQgbm90IG1vZGlmaWVkLgorICBUaGUgbm9kZSBkZWZpbmVzIGEgcmVnaXN0ZXIgdGhhdCBjb250YWlucyB0aGUgbWVtb3J5IGFkZHJlc3MgJgorICBsZW5ndGggKGNvbWJpbmVkKSBhbmQgYSBzZWNvbmQgcmVnaXN0ZXIgdGhhdCBjb250YWlucyB0aGUgaGFzaCByZXN1bHQKKyAgaW4gYmlnIGVuZGlhbiBmb3JtYXQuCisKKyAgLSBjb21wYXRpYmxlCisgICAgICBVc2FnZTogcmVxdWlyZWQKKyAgICAgIFZhbHVlIHR5cGU6IDxzdHJpbmc+CisgICAgICBEZWZpbml0aW9uOiBNdXN0IGluY2x1ZGUgImZzbCxzZWMtdjQuMC1ydGljLW1lbW9yeSIuCisKKyAgLSByZWcKKyAgICAgIFVzYWdlOiByZXF1aXJlZAorICAgICAgVmFsdWUgdHlwZTogPHByb3AtZW5jb2RlZC1hcnJheT4KKyAgICAgIERlZmluaXRpb246IEEgc3RhbmRhcmQgcHJvcGVydHkuICBTcGVjaWZpZXMgdHdvIHBhcmFtZXRlcnM6CisgICAgICAgICAgYW4gb2Zmc2V0IGZyb20gdGhlIHBhcmVudCBwaHlzaWNhbCBhZGRyZXNzIGFuZCB0aGUgbGVuZ3RoOgorCisgICAgICAgICAgMS4gVGhlIGxvY2F0aW9uIG9mIHRoZSBSVElDIG1lbW9yeSBhZGRyZXNzICYgbGVuZ3RoIHJlZ2lzdGVycy4KKyAgICAgICAgICAyLiBUaGUgbG9jYXRpb24gUlRJQyBoYXNoIHJlc3VsdC4KKworICAtIGZzbCxydGljLXJlZ2lvbgorICAgICAgIFVzYWdlOiBvcHRpb25hbC1idXQtcmVjb21tZW5kZWQKKyAgICAgICBWYWx1ZSB0eXBlOiA8cHJvcC1lbmNvZGVkLWFycmF5PgorICAgICAgIERlZmluaXRpb246CisgICAgICAgICAgIFNwZWNpZmllcyB0aGUgSFcgYWRkcmVzcyAoMzYgYml0IGFkZHJlc3MpIGZvciB0aGlzIHJlZ2lvbgorICAgICAgICAgICBmb2xsb3dlZCBieSB0aGUgbGVuZ3RoIG9mIHRoZSBIVyBwYXJ0aXRpb24gdG8gYmUgY2hlY2tlZDsKKyAgICAgICAgICAgdGhlIGFkZHJlc3MgaXMgcmVwcmVzZW50ZWQgYXMgYSA2NCBiaXQgcXVhbnRpdHkgZm9sbG93ZWQKKyAgICAgICAgICAgYnkgYSAzMiBiaXQgbGVuZ3RoLgorCisgICAtIGZzbCxsaW9kbgorICAgICAgIFVzYWdlOiBvcHRpb25hbC1idXQtcmVjb21tZW5kZWQKKyAgICAgICBWYWx1ZSB0eXBlOiA8cHJvcC1lbmNvZGVkLWFycmF5PgorICAgICAgIERlZmluaXRpb246CisgICAgICAgICAgIFNwZWNpZmllcyB0aGUgTElPRE4gdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoCisgICAgICAgICAgIHRoZSBwcGlkLXRvLWxpb2RuIHRhYmxlIHRoYXQgc3BlY2lmaWVzIHRoZSBQUElEIHRvIExJT0ROCisgICAgICAgICAgIG1hcHBpbmcuICBOZWVkZWQgaWYgdGhlIFBBTVUgaXMgdXNlZC4gIFZhbHVlIGlzIGEgMTIgYml0IHZhbHVlCisgICAgICAgICAgIHdoZXJlIHZhbHVlIGlzIGEgTElPRE4gSUQgZm9yIHRoaXMgUlRJQyBtZW1vcnkgcmVnaW9uLiBUaGlzCisgICAgICAgICAgIHByb3BlcnR5IGlzIG5vcm1hbGx5IHNldCBieSBib290IGZpcm13YXJlLgorCitFWEFNUExFCisJcnRpYy1hQDAgeworCQljb21wYXRpYmxlID0gImZzbCxzZWMtdjQuMC1ydGljLW1lbW9yeSI7CisJCXJlZyA9IDwweDAwIDB4MjAgMHgxMDAgMHg4MD47CisJCWZzbCxsaW9kbiAgID0gPDB4MDNjPjsKKwkJZnNsLHJ0aWMtcmVnaW9uICA9IDwweDEyMzQ1Njc4IDB4MTIzNDU2NzggMHgxMjM0NTY3OD47CisJfTsKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitTZWN1cmUgTm9uLVZvbGF0aWxlIFN0b3JhZ2UgKFNOVlMpIE5vZGUKKworICAgIE5vZGUgZGVmaW5lcyBhZGRyZXNzIHJhbmdlIGFuZCB0aGUgYXNzb2NpYXRlZAorICAgIGludGVycnVwdCBmb3IgdGhlIFNOVlMgZnVuY3Rpb24uICBUaGlzIGZ1bmN0aW9uCisgICAgbW9uaXRvcnMgc2VjdXJpdHkgc3RhdGUgaW5mb3JtYXRpb24gJiByZXBvcnRzCisgICAgc2VjdXJpdHkgdmlvbGF0aW9ucy4KKworICAtIGNvbXBhdGlibGUKKyAgICAgIFVzYWdlOiByZXF1aXJlZAorICAgICAgVmFsdWUgdHlwZTogPHN0cmluZz4KKyAgICAgIERlZmluaXRpb246IE11c3QgaW5jbHVkZSAiZnNsLHNlYy12NC4wLW1vbiIuCisKKyAgLSByZWcKKyAgICAgIFVzYWdlOiByZXF1aXJlZAorICAgICAgVmFsdWUgdHlwZTogPHByb3AtZW5jb2RlZC1hcnJheT4KKyAgICAgIERlZmluaXRpb246IEEgc3RhbmRhcmQgcHJvcGVydHkuICBTcGVjaWZpZXMgdGhlIHBoeXNpY2FsCisgICAgICAgICAgYWRkcmVzcyBhbmQgbGVuZ3RoIG9mIHRoZSBTRUM0IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICByZWdpc3RlcnMuCisKKyAgIC0gaW50ZXJydXB0cworICAgICAgVXNhZ2U6IHJlcXVpcmVkCisgICAgICBWYWx1ZSB0eXBlOiA8cHJvcF9lbmNvZGVkLWFycmF5PgorICAgICAgRGVmaW5pdGlvbjogIFNwZWNpZmllcyB0aGUgaW50ZXJydXB0cyBnZW5lcmF0ZWQgYnkgdGhpcworICAgICAgICAgICBkZXZpY2UuICBUaGUgdmFsdWUgb2YgdGhlIGludGVycnVwdHMgcHJvcGVydHkKKyAgICAgICAgICAgY29uc2lzdHMgb2Ygb25lIGludGVycnVwdCBzcGVjaWZpZXIuIFRoZSBmb3JtYXQKKyAgICAgICAgICAgb2YgdGhlIHNwZWNpZmllciBpcyBkZWZpbmVkIGJ5IHRoZSBiaW5kaW5nIGRvY3VtZW50CisgICAgICAgICAgIGRlc2NyaWJpbmcgdGhlIG5vZGUncyBpbnRlcnJ1cHQgcGFyZW50LgorCisgICAtIGludGVycnVwdC1wYXJlbnQKKyAgICAgIFVzYWdlOiAocmVxdWlyZWQgaWYgaW50ZXJydXB0IHByb3BlcnR5IGlzIGRlZmluZWQpCisgICAgICBWYWx1ZSB0eXBlOiA8cGhhbmRsZT4KKyAgICAgIERlZmluaXRpb246IEEgc2luZ2xlIDxwaGFuZGxlPiB2YWx1ZSB0aGF0IHBvaW50cworICAgICAgICAgIHRvIHRoZSBpbnRlcnJ1cHQgcGFyZW50IHRvIHdoaWNoIHRoZSBjaGlsZCBkb21haW4KKyAgICAgICAgICBpcyBiZWluZyBtYXBwZWQuCisKK0VYQU1QTEUKKwlzZWNfbW9uQDMxNDAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLHNlYy12NC4wLW1vbiI7CisJCXJlZyA9IDwweDMxNDAwMCAweDEwMDA+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJaW50ZXJydXB0cyA9IDw5MyAyPjsKKwl9OworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0ZVTEwgRVhBTVBMRQorCisJY3J5cHRvOiBjcnlwdG9AMzAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJlZyA9IDwweDMwMDAwMCAweDEwMDAwPjsKKwkJcmFuZ2VzID0gPDAgMHgzMDAwMDAgMHgxMDAwMD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQlpbnRlcnJ1cHRzID0gPDkyIDI+OworCisJCXNlY19qcjA6IGpyQDEwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAtam9iLXJpbmciOworCQkJcmVnID0gPDB4MTAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDg4IDI+OworCQl9OworCisJCXNlY19qcjE6IGpyQDIwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAtam9iLXJpbmciOworCQkJcmVnID0gPDB4MjAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDg5IDI+OworCQl9OworCisJCXNlY19qcjI6IGpyQDMwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAtam9iLXJpbmciOworCQkJcmVnID0gPDB4MzAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDkwIDI+OworCQl9OworCisJCXNlY19qcjM6IGpyQDQwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAtam9iLXJpbmciOworCQkJcmVnID0gPDB4NDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDkxIDI+OworCQl9OworCisJCXJ0aWNANjAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxzZWMtdjQuMC1ydGljIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlyZWcgPSA8MHg2MDAwIDB4MTAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHg2MTAwIDB4ZTAwPjsKKworCQkJcnRpY19hOiBydGljLWFAMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAtcnRpYy1tZW1vcnkiOworCQkJCXJlZyA9IDwweDAwIDB4MjAgMHgxMDAgMHg4MD47CisJCQl9OworCisJCQlydGljX2I6IHJ0aWMtYkAyMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAtcnRpYy1tZW1vcnkiOworCQkJCXJlZyA9IDwweDIwIDB4MjAgMHgyMDAgMHg4MD47CisJCQl9OworCisJCQlydGljX2M6IHJ0aWMtY0A0MCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAtcnRpYy1tZW1vcnkiOworCQkJCXJlZyA9IDwweDQwIDB4MjAgMHgzMDAgMHg4MD47CisJCQl9OworCisJCQlydGljX2Q6IHJ0aWMtZEA2MCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAtcnRpYy1tZW1vcnkiOworCQkJCXJlZyA9IDwweDYwIDB4MjAgMHg1MDAgMHg4MD47CisJCQl9OworCQl9OworCX07CisKKwlzZWNfbW9uOiBzZWNfbW9uQDMxNDAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLHNlYy12NC4wLW1vbiI7CisJCXJlZyA9IDwweDMxNDAwMCAweDEwMDA+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJaW50ZXJydXB0cyA9IDw5MyAyPjsKKwl9OworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvY2FuL2ZzbC1mbGV4Y2FuLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvY2FuL2ZzbC1mbGV4Y2FuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYTcyOWYwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9jYW4vZnNsLWZsZXhjYW4udHh0CkBAIC0wLDAgKzEsNjEgQEAKK0NBTiBEZXZpY2UgVHJlZSBCaW5kaW5ncworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyMDExIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisKK2ZzbCxmbGV4Y2FuLXYxLjAgbm9kZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJbiBhZGRpdGlvbiB0byB0aGUgcmVxdWlyZWQgY29tcGF0aWJsZS0sIHJlZy0gYW5kIGludGVycnVwdC1wcm9wZXJ0aWVzLCB5b3UgY2FuCithbHNvIHNwZWNpZnkgd2hpY2ggY2xvY2sgc291cmNlIHNoYWxsIGJlIHVzZWQgZm9yIHRoZSBjb250cm9sbGVyLgorCitDUEkgQ2xvY2stIENhbiBQcm90b2NvbCBJbnRlcmZhY2UgQ2xvY2sKKwlUaGlzIENMS19TUkMgYml0IG9mIENUUkwoY29udHJvbCByZWdpc3Rlcikgc2VsZWN0cyB0aGUgY2xvY2sgc291cmNlIHRvCisJdGhlIENBTiBQcm90b2NvbCBJbnRlcmZhY2UoQ1BJKSB0byBiZSBlaXRoZXIgdGhlIHBlcmlwaGVyYWwgY2xvY2sKKwkoZHJpdmVuIGJ5IHRoZSBQTEwpIG9yIHRoZSBjcnlzdGFsIG9zY2lsbGF0b3IgY2xvY2suIFRoZSBzZWxlY3RlZCBjbG9jaworCWlzIHRoZSBvbmUgZmVkIHRvIHRoZSBwcmVzY2FsZXIgdG8gZ2VuZXJhdGUgdGhlIFNlcmlhbCBDbG9jayAoU2Nsb2NrKS4KKwlUaGUgUFJFU0RJViBmaWVsZCBvZiBDVFJMKGNvbnRyb2wgcmVnaXN0ZXIpIGNvbnRyb2xzIGEgcHJlc2NhbGVyIHRoYXQKKwlnZW5lcmF0ZXMgdGhlIFNlcmlhbCBDbG9jayAoU2Nsb2NrKSwgd2hvc2UgcGVyaW9kIGRlZmluZXMgdGhlCisJdGltZSBxdWFudHVtIHVzZWQgdG8gY29tcG9zZSB0aGUgQ0FOIHdhdmVmb3JtLgorCitDYW4gRW5naW5lIENsb2NrIFNvdXJjZQorCVRoZXJlIGFyZSB0d28gc291cmNlcyBmb3IgQ0FOIGNsb2NrCisJLSBQbGF0Zm9ybSBDbG9jayAgSXQgcmVwcmVzZW50cyB0aGUgYnVzIGNsb2NrCisJLSBPc2NpbGxhdG9yIENsb2NrCisKKwlQZXJpcGhlcmFsIENsb2NrIChQTEwpCisJLS0tLS0tLS0tLS0tLS0KKwkJICAgICB8CisJCSAgICAtLS0tLS0tLS0JCSAgICAgIC0tLS0tLS0tLS0tLS0KKwkJICAgIHwgICAgICAgfENQSSBDbG9jawkgICAgICB8IFByZXNjYWxlciB8ICAgICAgIFNjbG9jaworCQkgICAgfCAgICAgICB8LS0tLS0tLS0tLS0tLS0tLT58ICgxLi4gMjU2KSB8LS0tLS0tLS0tLS0tPgorCQkgICAgLS0tLS0tLS0tCQkgICAgICAtLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICB8ICB8CisJLS0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLUNMS19TUkMKKwlPc2NpbGxhdG9yIENsb2NrCisKKy0gZnNsLGZsZXhjYW4tY2xvY2stc291cmNlIDogQ0FOIEVuZ2luZSBDbG9jayBTb3VyY2UuVGhpcyBwcm9wZXJ0eSBzZWxlY3RzCisJCQkgICAgIHRoZSBwZXJpcGhlcmFsIGNsb2NrLiBQTEwgY2xvY2sgaXMgZmVkIHRvIHRoZQorCQkJICAgICBwcmVzY2FsZXIgdG8gZ2VuZXJhdGUgdGhlIFNlcmlhbCBDbG9jayAoU2Nsb2NrKS4KKwkJCSAgICAgVmFsaWQgdmFsdWVzIGFyZSAib3NjaWxsYXRvciIgYW5kICJwbGF0Zm9ybSIKKwkJCSAgICAgIm9zY2lsbGF0b3IiOiBDQU4gZW5naW5lIGNsb2NrIHNvdXJjZSBpcyBvc2NpbGxhdG9yIGNsb2NrLgorCQkJICAgICAicGxhdGZvcm0iIFRoZSBDQU4gZW5naW5lIGNsb2NrIHNvdXJjZSBpcyB0aGUgYnVzIGNsb2NrCisJCSAgICAgICAgICAgICAocGxhdGZvcm0gY2xvY2spLgorCistIGZzbCxmbGV4Y2FuLWNsb2NrLWRpdmlkZXIgOiBmb3IgdGhlIHJlZmVyZW5jZSBhbmQgc3lzdGVtIGNsb2NrLCBhbiBhZGRpdGlvbmFsCisJCQkgICAgICBjbG9jayBkaXZpZGVyIGNhbiBiZSBzcGVjaWZpZWQuCistIGNsb2NrLWZyZXF1ZW5jeTogZnJlcXVlbmN5IHJlcXVpcmVkIHRvIGNhbGN1bGF0ZSB0aGUgYml0cmF0ZSBmb3IgRmxleENBTi4KKworTm90ZToKKwktIHYxLjAgb2YgZmxleGNhbi12MS4wIHJlcHJlc2VudCB0aGUgSVAgYmxvY2sgdmVyc2lvbiBmb3IgUDEwMTAgU09DLgorCS0gUDEwMTAgZG9lcyBub3QgaGF2ZSBvc2NpbGxhdG9yIGFzIHRoZSBDbG9jayBTb3VyY2UuU28gdGhlIGRlZmF1bHQKKwkgIENsb2NrIFNvdXJjZSBpcyBwbGF0Zm9ybSBjbG9jay4KK0V4YW1wbGVzOgorCisJY2FuMEAxYzAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLGZsZXhjYW4tdjEuMCI7CisJCXJlZyA9IDwweDFjMDAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8NDggMHgyPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCWZzbCxmbGV4Y2FuLWNsb2NrLXNvdXJjZSA9ICJwbGF0Zm9ybSI7CisJCWZzbCxmbGV4Y2FuLWNsb2NrLWRpdmlkZXIgPSA8Mj47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDxmaXhlZCBieSB1LWJvb3Q+OworCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvaWZjLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9pZmMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzOWEyNmQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvaWZjLnR4dApAQCAtMCwwICsxLDc2IEBACitJbnRlZ3JhdGVkIEZsYXNoIENvbnRyb2xsZXIKKworUHJvcGVydGllczoKKy0gbmFtZSA6IFNob3VsZCBiZSBpZmMKKy0gY29tcGF0aWJsZSA6IHNob3VsZCBjb250YWluICJmc2wsaWZjIi4gVGhlIHZlcnNpb24gb2YgdGhlIGludGVncmF0ZWQKKyAgICAgICAgICAgICAgIGZsYXNoIGNvbnRyb2xsZXIgY2FuIGJlIGZvdW5kIGluIHRoZSBJRkNfUkVWIHJlZ2lzdGVyIGF0CisgICAgICAgICAgICAgICBvZmZzZXQgemVyby4KKworLSAjYWRkcmVzcy1jZWxscyA6IFNob3VsZCBiZSBlaXRoZXIgdHdvIG9yIHRocmVlLiAgVGhlIGZpcnN0IGNlbGwgaXMgdGhlCisgICAgICAgICAgICAgICAgICAgY2hpcHNlbGVjdCBudW1iZXIsIGFuZCB0aGUgcmVtYWluaW5nIGNlbGxzIGFyZSB0aGUKKyAgICAgICAgICAgICAgICAgICBvZmZzZXQgaW50byB0aGUgY2hpcHNlbGVjdC4KKy0gI3NpemUtY2VsbHMgOiBFaXRoZXIgb25lIG9yIHR3bywgZGVwZW5kaW5nIG9uIGhvdyBsYXJnZSBlYWNoIGNoaXBzZWxlY3QKKyAgICAgICAgICAgICAgICBjYW4gYmUuCistIHJlZyA6IE9mZnNldCBhbmQgbGVuZ3RoIG9mIHRoZSByZWdpc3RlciBzZXQgZm9yIHRoZSBkZXZpY2UKKy0gaW50ZXJydXB0cyA6IElGQyBoYXMgdHdvIGludGVycnVwdHMuIFRoZSBmaXJzdCBvbmUgaXMgdGhlICJjb21tb24iCisgICAgICAgICAgICAgICBpbnRlcnJ1cHQoQ01fRVZURVJfU1RBVCksIGFuZCBzZWNvbmQgaXMgdGhlIE5BTkQgaW50ZXJydXB0CisgICAgICAgICAgICAgICAoTkFORF9FVlRFUl9TVEFUKS4KKworLSByYW5nZXMgOiBFYWNoIHJhbmdlIGNvcnJlc3BvbmRzIHRvIGEgc2luZ2xlIGNoaXBzZWxlY3QsIGFuZCBjb3ZlcnMKKyAgICAgICAgICAgdGhlIGVudGlyZSBhY2Nlc3Mgd2luZG93IGFzIGNvbmZpZ3VyZWQuCisKK0NoaWxkIGRldmljZSBub2RlcyBkZXNjcmliZSB0aGUgZGV2aWNlcyBjb25uZWN0ZWQgdG8gSUZDIHN1Y2ggYXMgTk9SIChlLmcuCitjZmktZmxhc2gpIGFuZCBOQU5EIChmc2wsaWZjLW5hbmQpLiBUaGVyZSBtaWdodCBiZSBib2FyZCBzcGVjaWZpYyBkZXZpY2VzCitsaWtlIEZQR0FzLCBDUExEcywgZXRjLgorCitFeGFtcGxlOgorCisJaWZjQGZmZTFlMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsaWZjIiwgInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJlZyA9IDwweDAgMHhmZmUxZTAwMCAwIDB4MjAwMD47CisJCWludGVycnVwdHMgPSA8MTYgMiAxOSAyPjsKKworCQkvKiBOT1IsIE5BTkQgRmxhc2hlcyBhbmQgQ1BMRCBvbiBib2FyZCAqLworCQlyYW5nZXMgPSA8MHgwIDB4MCAweDAgMHhlZTAwMDAwMCAweDAyMDAwMDAwCisJCQkgIDB4MSAweDAgMHgwIDB4ZmZhMDAwMDAgMHgwMDAxMDAwMAorCQkJICAweDMgMHgwIDB4MCAweGZmYjAwMDAwIDB4MDAwMjAwMDA+OworCisJCWZsYXNoQDAsMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQkJcmVnID0gPDB4MCAweDAgMHgyMDAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8Mj47CisJCQlkZXZpY2Utd2lkdGggPSA8MT47CisKKwkJCXBhcnRpdGlvbkAwIHsKKwkJCQkvKiAzMk1CIGZvciB1c2VyIGRhdGEgKi8KKwkJCQlyZWcgPSA8MHgwIDB4MDIwMDAwMDA+OworCQkJCWxhYmVsID0gIk5PUiBEYXRhIjsKKwkJCX07CisJCX07CisKKwkJZmxhc2hAMSwwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbCxpZmMtbmFuZCI7CisJCQlyZWcgPSA8MHgxIDB4MCAweDEwMDAwPjsKKworCQkJcGFydGl0aW9uQDAgeworCQkJCS8qIFRoaXMgbG9jYXRpb24gbXVzdCBub3QgYmUgYWx0ZXJlZCAgKi8KKwkJCQkvKiAxTUIgZm9yIHUtYm9vdCBCb290bG9hZGVyIEltYWdlICovCisJCQkJcmVnID0gPDB4MCAweDAwMTAwMDAwPjsKKwkJCQlsYWJlbCA9ICJOQU5EIFUtQm9vdCBJbWFnZSI7CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKwkJfTsKKworCQljcGxkQDMsMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJmc2wscDEwMTByZGItY3BsZCI7CisJCQlyZWcgPSA8MHgzIDB4MCAweDAwMDAwMWY+OworCQl9OworCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvbXBpYy10aW1lci50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvbXBpYy10aW1lci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY0MTk1OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9tcGljLXRpbWVyLnR4dApAQCAtMCwwICsxLDM4IEBACisqIEZyZWVzY2FsZSBNUElDIHRpbWVycworCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlOiAiZnNsLG1waWMtZ2xvYmFsLXRpbWVyIgorCistIHJlZyA6IENvbnRhaW5zIHR3byByZWdpb25zLiAgVGhlIGZpcnN0IGlzIHRoZSBtYWluIHRpbWVyIHJlZ2lzdGVyIGJhbmsKKyAgKEdUQ0NSeHgsIEdUQkNSeHgsIEdUVlBSeHgsIEdURFJ4eCkuICBUaGUgc2Vjb25kIGlzIHRoZSB0aW1lciBjb250cm9sCisgIHJlZ2lzdGVyIChUQ1J4KSBmb3IgdGhlIGdyb3VwLgorCistIGZzbCxhdmFpbGFibGUtcmFuZ2VzOiB1c2UgPHN0YXJ0IGNvdW50PiBzdHlsZSBzZWN0aW9uIHRvIGRlZmluZSB3aGljaAorICB0aW1lciBpbnRlcnJ1cHRzIGNhbiBiZSB1c2VkLiAgVGhpcyBwcm9wZXJ0eSBpcyBvcHRpb25hbDsgd2l0aG91dCB0aGlzLAorICBhbGwgdGltZXJzIHdpdGhpbiB0aGUgZ3JvdXAgY2FuIGJlIHVzZWQuCisKKy0gaW50ZXJydXB0czogb25lIGludGVycnVwdCBwZXIgdGltZXIgaW4gdGhlIGdyb3VwLCBpbiBvcmRlciwgc3RhcnRpbmcKKyAgd2l0aCB0aW1lciB6ZXJvLiAgSWYgdGltZXItYXZhaWxhYmxlLXJhbmdlcyBpcyBwcmVzZW50LCBvbmx5IHRoZQorICBpbnRlcnJ1cHRzIHRoYXQgY29ycmVzcG9uZCB0byBhdmFpbGFibGUgdGltZXJzIHNoYWxsIGJlIHByZXNlbnQuCisKK0V4YW1wbGU6CisJLyogTm90ZSB0aGF0IHRoaXMgcmVxdWlyZXMgI2ludGVycnVwdC1jZWxscyB0byBiZSA0ICovCisJdGltZXIwOiB0aW1lckA0MTEwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1waWMtZ2xvYmFsLXRpbWVyIjsKKwkJcmVnID0gPDB4NDExMDAgMHgxMDAgMHg0MTMwMCA0PjsKKworCQkvKiBBbm90aGVyIEFNUCBwYXJ0aXRpb24gaXMgdXNpbmcgdGltZXJzIDAgYW5kIDEgKi8KKwkJZnNsLGF2YWlsYWJsZS1yYW5nZXMgPSA8MiAyPjsKKworCQlpbnRlcnJ1cHRzID0gPDIgMCAzIDAKKwkJICAgICAgICAgICAgICAzIDAgMyAwPjsKKwl9OworCisJdGltZXIxOiB0aW1lckA0MjEwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1waWMtZ2xvYmFsLXRpbWVyIjsKKwkJcmVnID0gPDB4NDIxMDAgMHgxMDAgMHg0MjMwMCA0PjsKKwkJaW50ZXJydXB0cyA9IDw0IDAgMyAwCisJCSAgICAgICAgICAgICAgNSAwIDMgMAorCQkgICAgICAgICAgICAgIDYgMCAzIDAKKwkJICAgICAgICAgICAgICA3IDAgMyAwPjsKKwl9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL21waWMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL21waWMudHh0CmluZGV4IDRmNjE0NTguLjJjZjM4YmQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9tcGljLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvbXBpYy50eHQKQEAgLTE5MCw3ICsxOTAsNyBAQAogCSAqLwogCXRpbWVyMDogdGltZXJANDExMDAgewogCQljb21wYXRpYmxlID0gImZzbCxtcGljLWdsb2JhbC10aW1lciI7Ci0JCXJlZyA9IDwweDQxMTAwIDB4MTAwPjsKKwkJcmVnID0gPDB4NDExMDAgMHgxMDAgMHg0MTMwMCA0PjsKIAkJaW50ZXJydXB0cyA9IDwwIDAgMyAwCiAJCSAgICAgICAgICAgICAgMSAwIDMgMAogCQkgICAgICAgICAgICAgIDIgMCAzIDAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2J1cy50eHQgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9idXMudHh0CmluZGV4IDUwMDFiNzUuLjY3NTRiMmQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2J1cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvYnVzLnR4dApAQCAtMywyNCArMyw3IEBACiAKIERlZmluaXRpb24KIH5+fn5+fn5+fn4KLQotc3RydWN0IGJ1c190eXBlIHsKLQljaGFyCQkJKiBuYW1lOwotCi0Jc3RydWN0IHN1YnN5c3RlbQlzdWJzeXM7Ci0Jc3RydWN0IGtzZXQJCWRyaXZlcnM7Ci0Jc3RydWN0IGtzZXQJCWRldmljZXM7Ci0KLQlzdHJ1Y3QgYnVzX2F0dHJpYnV0ZQkqIGJ1c19hdHRyczsKLQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQkqIGRldl9hdHRyczsKLQlzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZQkqIGRydl9hdHRyczsKLQotCWludAkJKCptYXRjaCkoc3RydWN0IGRldmljZSAqIGRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKiBkcnYpOwotCWludAkJKCpob3RwbHVnKSAoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICoqZW52cCwgCi0JCQkJICAgIGludCBudW1fZW52cCwgY2hhciAqYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpOwotCWludAkJKCpzdXNwZW5kKShzdHJ1Y3QgZGV2aWNlICogZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwotCWludAkJKCpyZXN1bWUpKHN0cnVjdCBkZXZpY2UgKiBkZXYpOwotfTsKK1NlZSB0aGUga2VybmVsZG9jIGZvciB0aGUgc3RydWN0IGJ1c190eXBlLgogCiBpbnQgYnVzX3JlZ2lzdGVyKHN0cnVjdCBidXNfdHlwZSAqIGJ1cyk7CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2NsYXNzLnR4dCBiL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2NsYXNzLnR4dAppbmRleCA1NDg1MDVmLi4xZmVmYzQ4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9jbGFzcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvY2xhc3MudHh0CkBAIC0yNywyMiArMjcsNyBAQAogdHlwZWRlZiBpbnQgKCpkZXZjbGFzc19hZGQpKHN0cnVjdCBkZXZpY2UgKik7CiB0eXBlZGVmIHZvaWQgKCpkZXZjbGFzc19yZW1vdmUpKHN0cnVjdCBkZXZpY2UgKik7CiAKLXN0cnVjdCBkZXZpY2VfY2xhc3MgewotCWNoYXIJCQkqIG5hbWU7Ci0Jcndsb2NrX3QJCWxvY2s7Ci0JdTMyCQkJZGV2bnVtOwotCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKLQotCXN0cnVjdCBsaXN0X2hlYWQJZHJpdmVyczsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWludGZfbGlzdDsKLQotCXN0cnVjdCBkcml2ZXJfZGlyX2VudHJ5CWRpcjsKLQlzdHJ1Y3QgZHJpdmVyX2Rpcl9lbnRyeQlkZXZpY2VfZGlyOwotCXN0cnVjdCBkcml2ZXJfZGlyX2VudHJ5CWRyaXZlcl9kaXI7Ci0KLQlkZXZjbGFzc19hZGQJCWFkZF9kZXZpY2U7Ci0JZGV2Y2xhc3NfcmVtb3ZlCQlyZW1vdmVfZGV2aWNlOwotfTsKK1NlZSB0aGUga2VybmVsZG9jIGZvciB0aGUgc3RydWN0IGNsYXNzLgogCiBBIHR5cGljYWwgZGV2aWNlIGNsYXNzIGRlZmluaXRpb24gd291bGQgbG9vayBsaWtlOiAKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvZGV2aWNlLnR4dCBiL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2RldmljZS50eHQKaW5kZXggYTEyNGYzMS4uYjJmZjQyNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvZGV2aWNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9kZXZpY2UudHh0CkBAIC0yLDk2ICsyLDcgQEAKIFRoZSBCYXNpYyBEZXZpY2UgU3RydWN0dXJlCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCi1zdHJ1Y3QgZGV2aWNlIHsKLSAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBnX2xpc3Q7Ci0gICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKLSAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBidXNfbGlzdDsKLSAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBkcml2ZXJfbGlzdDsKLSAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBpbnRmX2xpc3Q7Ci0gICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgY2hpbGRyZW47Ci0gICAgICAgIHN0cnVjdCBkZXZpY2UgICAqIHBhcmVudDsKLQotICAgICAgICBjaGFyICAgIG5hbWVbREVWSUNFX05BTUVfU0laRV07Ci0gICAgICAgIGNoYXIgICAgYnVzX2lkW0JVU19JRF9TSVpFXTsKLQotICAgICAgICBzcGlubG9ja190ICAgICAgbG9jazsKLSAgICAgICAgYXRvbWljX3QgICAgICAgIHJlZmNvdW50OwotCi0gICAgICAgIHN0cnVjdCBidXNfdHlwZSAqIGJ1czsKLSAgICAgICAgc3RydWN0IGRyaXZlcl9kaXJfZW50cnkgZGlyOwotCi0JdTMyCQljbGFzc19udW07Ci0KLSAgICAgICAgc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlcjsKLSAgICAgICAgdm9pZCAgICAgICAgICAgICpkcml2ZXJfZGF0YTsKLSAgICAgICAgdm9pZCAgICAgICAgICAgICpwbGF0Zm9ybV9kYXRhOwotCi0gICAgICAgIHUzMiAgICAgICAgICAgICBjdXJyZW50X3N0YXRlOwotICAgICAgICB1bnNpZ25lZCBjaGFyICpzYXZlZF9zdGF0ZTsKLQotICAgICAgICB2b2lkICAgICgqcmVsZWFzZSkoc3RydWN0IGRldmljZSAqIGRldik7Ci19OwotCi1GaWVsZHMgCi1+fn5+fn4KLWdfbGlzdDoJTm9kZSBpbiB0aGUgZ2xvYmFsIGRldmljZSBsaXN0LgotCi1ub2RlOglOb2RlIGluIGRldmljZSdzIHBhcmVudCdzIGNoaWxkcmVuIGxpc3QuCi0KLWJ1c19saXN0OiBOb2RlIGluIGRldmljZSdzIGJ1cydzIGRldmljZXMgbGlzdC4KLQotZHJpdmVyX2xpc3Q6ICAgTm9kZSBpbiBkZXZpY2UncyBkcml2ZXIncyBkZXZpY2VzIGxpc3QuCi0KLWludGZfbGlzdDogICAgIExpc3Qgb2YgaW50Zl9kYXRhLiBUaGVyZSBpcyBvbmUgc3RydWN0dXJlIGFsbG9jYXRlZCBmb3IKLQkgICAgICAgZWFjaCBpbnRlcmZhY2UgdGhhdCB0aGUgZGV2aWNlIHN1cHBvcnRzLgotCi1jaGlsZHJlbjogICAgICBMaXN0IG9mIGNoaWxkIGRldmljZXMuCi0KLXBhcmVudDogICAgICAgICoqKiBGSVhNRSAqKioKLQotbmFtZToJICAgICAgIEFTQ0lJIGRlc2NyaXB0aW9uIG9mIGRldmljZS4gCi0JICAgICAgIEV4YW1wbGU6ICIgM0NvbSBDb3Jwb3JhdGlvbiAzYzkwNSAxMDBCYXNlVFggW0Jvb21lcmFuZ10iCi0KLWJ1c19pZDoJICAgICAgIEFTQ0lJIHJlcHJlc2VudGF0aW9uIG9mIGRldmljZSdzIGJ1cyBwb3NpdGlvbi4gVGhpcyAKLQkgICAgICAgZmllbGQgc2hvdWxkIGJlIGEgbmFtZSB1bmlxdWUgYWNyb3NzIGFsbCBkZXZpY2VzIG9uIHRoZQotCSAgICAgICBidXMgdHlwZSB0aGUgZGV2aWNlIGJlbG9uZ3MgdG8uIAotCi0JICAgICAgIEV4YW1wbGU6IFBDSSBidXNfaWRzIGFyZSBpbiB0aGUgZm9ybSBvZgotCSAgICAgICA8YnVzIG51bWJlcj46PHNsb3QgbnVtYmVyPi48ZnVuY3Rpb24gbnVtYmVyPiAKLQkgICAgICAgVGhpcyBuYW1lIGlzIHVuaXF1ZSBhY3Jvc3MgYWxsIFBDSSBkZXZpY2VzIGluIHRoZSBzeXN0ZW0uCi0KLWxvY2s6CSAgICAgICBTcGlubG9jayBmb3IgdGhlIGRldmljZS4gCi0KLXJlZmNvdW50OiAgICAgIFJlZmVyZW5jZSBjb3VudCBvbiB0aGUgZGV2aWNlLgotCi1idXM6CSAgICAgICBQb2ludGVyIHRvIHN0cnVjdCBidXNfdHlwZSB0aGF0IGRldmljZSBiZWxvbmdzIHRvLgotCi1kaXI6CSAgICAgICBEZXZpY2UncyBzeXNmcyBkaXJlY3RvcnkuCi0KLWNsYXNzX251bTogICAgIENsYXNzLWVudW1lcmF0ZWQgdmFsdWUgb2YgdGhlIGRldmljZS4KLQotZHJpdmVyOgkgICAgICAgUG9pbnRlciB0byBzdHJ1Y3QgZGV2aWNlX2RyaXZlciB0aGF0IGNvbnRyb2xzIHRoZSBkZXZpY2UuCi0KLWRyaXZlcl9kYXRhOiAgIERyaXZlci1zcGVjaWZpYyBkYXRhLgotCi1wbGF0Zm9ybV9kYXRhOiBQbGF0Zm9ybSBkYXRhIHNwZWNpZmljIHRvIHRoZSBkZXZpY2UuCi0KLQkgICAgICAgRXhhbXBsZTogIGZvciBkZXZpY2VzIG9uIGN1c3RvbSBib2FyZHMsIGFzIHR5cGljYWwgb2YgZW1iZWRkZWQKLQkgICAgICAgYW5kIFNPQyBiYXNlZCBoYXJkd2FyZSwgTGludXggb2Z0ZW4gdXNlcyBwbGF0Zm9ybV9kYXRhIHRvIHBvaW50Ci0JICAgICAgIHRvIGJvYXJkLXNwZWNpZmljIHN0cnVjdHVyZXMgZGVzY3JpYmluZyBkZXZpY2VzIGFuZCBob3cgdGhleQotCSAgICAgICBhcmUgd2lyZWQuICBUaGF0IGNhbiBpbmNsdWRlIHdoYXQgcG9ydHMgYXJlIGF2YWlsYWJsZSwgY2hpcAotCSAgICAgICB2YXJpYW50cywgd2hpY2ggR1BJTyBwaW5zIGFjdCBpbiB3aGF0IGFkZGl0aW9uYWwgcm9sZXMsIGFuZCBzbwotCSAgICAgICBvbi4gIFRoaXMgc2hyaW5rcyB0aGUgIkJvYXJkIFN1cHBvcnQgUGFja2FnZXMiIChCU1BzKSBhbmQKLQkgICAgICAgbWluaW1pemVzIGJvYXJkLXNwZWNpZmljICNpZmRlZnMgaW4gZHJpdmVycy4KLQotY3VycmVudF9zdGF0ZTogQ3VycmVudCBwb3dlciBzdGF0ZSBvZiB0aGUgZGV2aWNlLgotCi1zYXZlZF9zdGF0ZTogICBQb2ludGVyIHRvIHNhdmVkIHN0YXRlIG9mIHRoZSBkZXZpY2UuIFRoaXMgaXMgdXNhYmxlIGJ5Ci0JICAgICAgIHRoZSBkZXZpY2UgZHJpdmVyIGNvbnRyb2xsaW5nIHRoZSBkZXZpY2UuCi0KLXJlbGVhc2U6ICAgICAgIENhbGxiYWNrIHRvIGZyZWUgdGhlIGRldmljZSBhZnRlciBhbGwgcmVmZXJlbmNlcyBoYXZlIAotCSAgICAgICBnb25lIGF3YXkuIFRoaXMgc2hvdWxkIGJlIHNldCBieSB0aGUgYWxsb2NhdG9yIG9mIHRoZSAKLQkgICAgICAgZGV2aWNlIChpLmUuIHRoZSBidXMgZHJpdmVyIHRoYXQgZGlzY292ZXJlZCB0aGUgZGV2aWNlKS4KK1NlZSB0aGUga2VybmVsZG9jIGZvciB0aGUgc3RydWN0IGRldmljZS4KIAogCiBQcm9ncmFtbWluZyBJbnRlcmZhY2UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2RyaXZlci50eHQgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9kcml2ZXIudHh0CmluZGV4IGQyY2Q2ZmIuLjQ0MjExMzUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2RyaXZlci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvZHJpdmVyLnR4dApAQCAtMSwyMyArMSw3IEBACiAKIERldmljZSBEcml2ZXJzCiAKLXN0cnVjdCBkZXZpY2VfZHJpdmVyIHsKLSAgICAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgKiBuYW1lOwotICAgICAgICBzdHJ1Y3QgYnVzX3R5cGUgICAgICAgICAqIGJ1czsKLQotICAgICAgICBzdHJ1Y3QgY29tcGxldGlvbgl1bmxvYWRlZDsKLSAgICAgICAgc3RydWN0IGtvYmplY3QJCWtvYmo7Ci0gICAgICAgIGxpc3RfdCAgICAgICAgICAgICAgICAgIGRldmljZXM7Ci0KLSAgICAgICAgc3RydWN0IG1vZHVsZQkJKm93bmVyOwotCi0gICAgICAgIGludCAgICAgKCpwcm9iZSkgICAgICAgIChzdHJ1Y3QgZGV2aWNlICogZGV2KTsKLSAgICAgICAgaW50ICAgICAoKnJlbW92ZSkgICAgICAgKHN0cnVjdCBkZXZpY2UgKiBkZXYpOwotCi0gICAgICAgIGludCAgICAgKCpzdXNwZW5kKSAgICAgIChzdHJ1Y3QgZGV2aWNlICogZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwotICAgICAgICBpbnQgICAgICgqcmVzdW1lKSAgICAgICAoc3RydWN0IGRldmljZSAqIGRldik7Ci19OwotCitTZWUgdGhlIGtlcm5lbGRvYyBmb3IgdGhlIHN0cnVjdCBkZXZpY2VfZHJpdmVyLgogCiAKIEFsbG9jYXRpb24KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCA0OTJlODFkLi40Y2JhMjYwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC0zNSwxNyArMzUsNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDoJQVI5MTcwVVNCCi1XaGVuOgkyLjYuNDAKLQotV2h5OglUaGlzIGRyaXZlciBpcyBkZXByZWNhdGVkIGFuZCB0aGUgZmlybXdhcmUgaXMgbm8gbG9uZ2VyCi0JbWFpbnRhaW5lZC4gVGhlIHJlcGxhY2VtZW50IGRyaXZlciAiY2FybDkxNzAiIGhhcyBiZWVuCi0JYXJvdW5kIGZvciBhIHdoaWxlLCBzbyB0aGUgZGV2aWNlcyBhcmUgc3RpbGwgc3VwcG9ydGVkLgotCi1XaG86CUNocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QGdvb2dsZW1haWwuY29tPgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogV2hhdDoJSVJRRl9TQU1QTEVfUkFORE9NCiBDaGVjazoJSVJRRl9TQU1QTEVfUkFORE9NCiBXaGVuOglKdWx5IDIwMDkKQEAgLTQwNSwxNiArMzk0LDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0OgljYXBpZnMKLVdoZW46CUZlYnJ1YXJ5IDIwMTEKLUZpbGVzOglkcml2ZXJzL2lzZG4vY2FwaS9jYXBpZnMuKgotV2h5Ogl1ZGV2IGZ1bGx5IHJlcGxhY2VzIHRoaXMgc3BlY2lhbCBmaWxlIHN5c3RlbSB0aGF0IG9ubHkgY29udGFpbnMgQ0FQSQotCU5DQ0kgVFRZIGRldmljZSBub2Rlcy4gVXNlciBzcGFjZSAocHBwZGNhcGlwbHVnaW4pIHdvcmtzIHdpdGhvdXQKLQlub3RpY2luZyB0aGUgZGlmZmVyZW5jZS4KLVdobzoJSmFuIEtpc3prYSA8amFuLmtpc3prYUB3ZWIuZGU+Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogV2hhdDoJS1ZNIHBhcmF2aXJ0IG1tdSBob3N0IHN1cHBvcnQKIFdoZW46CUphbnVhcnkgMjAxMQogV2h5OglUaGUgcGFyYXZpcnQgbW11IGhvc3Qgc3VwcG9ydCBpcyBzbG93ZXIgdGhhbiBub24tcGFyYXZpcnQgbW11LCBib3RoCkBAIC00NjAsMTQgKzQzOSw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDoJVGhlIGFjcGlfc2xlZXA9czRfbm9udnMgY29tbWFuZCBsaW5lIG9wdGlvbgotV2hlbjoJMi42LjM3Ci1GaWxlczoJYXJjaC94ODYva2VybmVsL2FjcGkvc2xlZXAuYwotV2h5OglzdXBlcnNlZGVkIGJ5IGFjcGlfc2xlZXA9bm9udnMKLVdobzoJUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIFdoYXQ6IAlQQ0kgRE1BIHVubWFwIHN0YXRlIEFQSQogV2hlbjoJQXVndXN0IDIwMTIKIFdoeToJUENJIERNQSB1bm1hcCBzdGF0ZSBBUEkgKGluY2x1ZGUvbGludXgvcGNpLWRtYS5oKSB3YXMgcmVwbGFjZWQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CmluZGV4IGIwYjgxNGQuLjYwNzQwZTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dApAQCAtODM2LDcgKzgzNiw2IEBACiAgVEFTS0xFVDogICAgICAgICAgMCAgICAgICAgICAwICAgICAgICAgIDAgICAgICAgIDI5MAogICAgU0NIRUQ6ICAgICAgMjcwMzUgICAgICAyNjk4MyAgICAgIDI2OTcxICAgICAgMjY3NDYKICBIUlRJTUVSOiAgICAgICAgICAwICAgICAgICAgIDAgICAgICAgICAgMCAgICAgICAgICAwCi0gICAgIFJDVTogICAgICAgMTY3OCAgICAgICAxNzY5ICAgICAgIDIxNzggICAgICAgMjI1MAogCiAKIDEuMyBJREUgZGV2aWNlcyBpbiAvcHJvYy9pZGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmxleGlibGUtYXJyYXlzLnR4dCBiL0RvY3VtZW50YXRpb24vZmxleGlibGUtYXJyYXlzLnR4dAppbmRleCBjYjhhM2EwLi5kZjkwNGFlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZsZXhpYmxlLWFycmF5cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mbGV4aWJsZS1hcnJheXMudHh0CkBAIC02NiwxMCArNjYsMTAgQEAKIGVudGVyaW5nIGF0b21pYyBjb250ZXh0LCB1c2luZzoKIAogICAgIGludCBmbGV4X2FycmF5X3ByZWFsbG9jKHN0cnVjdCBmbGV4X2FycmF5ICphcnJheSwgdW5zaWduZWQgaW50IHN0YXJ0LAotCQkJICAgIHVuc2lnbmVkIGludCBlbmQsIGdmcF90IGZsYWdzKTsKKwkJCSAgICB1bnNpZ25lZCBpbnQgbnJfZWxlbWVudHMsIGdmcF90IGZsYWdzKTsKIAogVGhpcyBmdW5jdGlvbiB3aWxsIGVuc3VyZSB0aGF0IG1lbW9yeSBmb3IgdGhlIGVsZW1lbnRzIGluZGV4ZWQgaW4gdGhlIHJhbmdlCi1kZWZpbmVkIGJ5IHN0YXJ0IGFuZCBlbmQgaGFzIGJlZW4gYWxsb2NhdGVkLiAgVGhlcmVhZnRlciwgYQorZGVmaW5lZCBieSBzdGFydCBhbmQgbnJfZWxlbWVudHMgaGFzIGJlZW4gYWxsb2NhdGVkLiAgVGhlcmVhZnRlciwgYQogZmxleF9hcnJheV9wdXQoKSBjYWxsIG9uIGFuIGVsZW1lbnQgaW4gdGhhdCByYW5nZSBpcyBndWFyYW50ZWVkIG5vdCB0bwogYmxvY2suCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vYWRtMTAyMSBiL0RvY3VtZW50YXRpb24vaHdtb24vYWRtMTAyMQppbmRleCAwM2QwMmJmLi4wMmFkOTZjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2FkbTEwMjEKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9hZG0xMDIxCkBAIC0xNCwxMCArMTQsNiBAQAogICAgIFByZWZpeDogJ2dsNTIzc20nCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDE4IC0gMHgxYSwgMHgyOSAtIDB4MmIsIDB4NGMgLSAweDRlCiAgICAgRGF0YXNoZWV0OgotICAqIEludGVsIFhlb24gUHJvY2Vzc29yCi0gICAgUHJlZml4OiAtIGFueSBvdGhlciAtIG1heSByZXF1aXJlICdmb3JjZV9hZG0xMDIxJyBwYXJhbWV0ZXIKLSAgICBBZGRyZXNzZXMgc2Nhbm5lZDogbm9uZQotICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IEludGVsIHdlYnNpdGUKICAgKiBNYXhpbSBNQVgxNjE3CiAgICAgUHJlZml4OiAnbWF4MTYxNycKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4MTggLSAweDFhLCAweDI5IC0gMHgyYiwgMHg0YyAtIDB4NGUKQEAgLTkxLDIxICs4NywyNyBAQAogQURNMTAyMS1jbG9uZXMgZG8gZmFzdGVyIG1lYXN1cmVtZW50cywgYnV0IHRoZXJlIGlzIHJlYWxseSBubyBnb29kIHJlYXNvbgogZm9yIHRoYXQuCiAKLVhlb24gc3VwcG9ydAotLS0tLS0tLS0tLS0tCiAKLVNvbWUgWGVvbiBwcm9jZXNzb3JzIGhhdmUgcmVhbCBtYXgxNjE3LCBhZG0xMDIxLCBvciBjb21wYXRpYmxlIGNoaXBzCi13aXRoaW4gdGhlbSwgd2l0aCB0d28gdGVtcGVyYXR1cmUgc2Vuc29ycy4KK05ldGJ1cnN0LWJhc2VkIFhlb24gc3VwcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLU90aGVyIFhlb25zIGhhdmUgY2hpcHMgd2l0aCBvbmx5IG9uZSBzZW5zb3IuCitTb21lIFhlb24gcHJvY2Vzc29ycyBiYXNlZCBvbiB0aGUgTmV0YnVyc3QgKGVhcmx5IFBlbnRpdW0gNCwgZnJvbSAyMDAxIHRvCisyMDAzKSBtaWNyb2FyY2hpdGVjdHVyZSBoYWQgcmVhbCBNQVgxNjE3LCBBRE0xMDIxLCBvciBjb21wYXRpYmxlIGNoaXBzCit3aXRoaW4gdGhlbSwgd2l0aCB0d28gdGVtcGVyYXR1cmUgc2Vuc29ycy4gT3RoZXIgWGVvbiBwcm9jZXNzb3JzIG9mIHRoaXMKK2VyYSAod2l0aCA0MDAgTUh6IEZTQikgaGFkIGNoaXBzIHdpdGggb25seSBvbmUgdGVtcGVyYXR1cmUgc2Vuc29yLgogCi1JZiB5b3UgaGF2ZSBhIFhlb24sIGFuZCB0aGUgYWRtMTAyMSBtb2R1bGUgbG9hZHMsIGFuZCBib3RoIHRlbXBlcmF0dXJlcwotYXBwZWFyIHZhbGlkLCB0aGVuIHRoaW5ncyBhcmUgZ29vZC4KK0lmIHlvdSBoYXZlIHN1Y2ggYW4gb2xkIFhlb24sIGFuZCB5b3UgZ2V0IHR3byB2YWxpZCB0ZW1wZXJhdHVyZXMgd2hlbgorbG9hZGluZyB0aGUgYWRtMTAyMSBtb2R1bGUsIHRoZW4gdGhpbmdzIGFyZSBnb29kLgogCi1JZiB0aGUgYWRtMTAyMSBtb2R1bGUgZG9lc24ndCBsb2FkLCB5b3Ugc2hvdWxkIHRyeSB0aGlzOgotCW1vZHByb2JlIGFkbTEwMjEgZm9yY2VfYWRtMTAyMT1CVVMsQUREUkVTUwotCUFERFJFU1MgY2FuIG9ubHkgYmUgMHgxOCwgMHgxYSwgMHgyOSwgMHgyYiwgMHg0Yywgb3IgMHg0ZS4KK0lmIG5vdGhpbmcgaGFwcGVucyB3aGVuIGxvYWRpbmcgdGhlIGFkbTEwMjEgbW9kdWxlLCBhbmQgeW91IGFyZSBjZXJ0YWluCit0aGF0IHlvdXIgc3BlY2lmaWMgWGVvbiBwcm9jZXNzb3IgbW9kZWwgaW5jbHVkZXMgY29tcGF0aWJsZSBzZW5zb3JzLCB5b3UKK3dpbGwgaGF2ZSB0byBleHBsaWNpdGx5IGluc3RhbnRpYXRlIHRoZSBzZW5zb3IgY2hpcHMgZnJvbSB1c2VyLXNwYWNlLiBTZWUKK21ldGhvZCA0IGluIERvY3VtZW50YXRpb24vaTJjL2luc3RhbnRpYXRpbmctZGV2aWNlcy4gUG9zc2libGUgc2xhdmUKK2FkZHJlc3NlcyBhcmUgMHgxOCwgMHgxYSwgMHgyOSwgMHgyYiwgMHg0Yywgb3IgMHg0ZS4gSXQgaXMgbGlrZWx5IHRoYXQKK29ubHkgdGVtcDIgd2lsbCBiZSBjb3JyZWN0IGFuZCB0ZW1wMSB3aWxsIGhhdmUgdG8gYmUgaWdub3JlZC4KIAotSWYgeW91IGhhdmUgZHVhbCBYZW9ucyB5b3UgbWF5IGhhdmUgYXBwZWFyIHRvIGhhdmUgdHdvIHNlcGFyYXRlCi1hZG0xMDIxLWNvbXBhdGlibGUgY2hpcHMsIG9yIHR3byBzaW5nbGUtdGVtcGVyYXR1cmUgc2Vuc29ycywgYXQgZGlzdGluY3QKLWFkZHJlc3Nlcy4KK1ByZXZpb3VzIGdlbmVyYXRpb25zIG9mIHRoZSBYZW9uIHByb2Nlc3NvciAoYmFzZWQgb24gUGVudGl1bSBJSS9JSUkpCitkaWRuJ3QgaGF2ZSB0aGVzZSBzZW5zb3JzLiBOZXh0IGdlbmVyYXRpb25zIG9mIFhlb24gcHJvY2Vzc29ycyAoNTMzIE1IegorRlNCIGFuZCBmYXN0ZXIpIGxvc3QgdGhlbSwgdW50aWwgdGhlIENvcmUtYmFzZWQgZ2VuZXJhdGlvbiB3aGljaAoraW50cm9kdWNlZCBpbnRlZ3JhdGVkIGRpZ2l0YWwgdGhlcm1hbCBzZW5zb3JzLiBUaGVzZSBhcmUgc3VwcG9ydGVkIGJ5Cit0aGUgY29yZXRlbXAgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9sbTkwIGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTkwCmluZGV4IGZhNDc1YzAuLmYzZWZkMTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vbG05MAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtOTAKQEAgLTMyLDYgKzMyLDE2IEBACiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDRjIGFuZCAweDRkCiAgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIE9OIFNlbWljb25kdWN0b3Igd2Vic2l0ZQogICAgICAgICAgICAgICAgaHR0cDovL3d3dy5vbnNlbWkuY29tL1Bvd2VyU29sdXRpb25zL3Byb2R1Y3QuZG8/aWQ9QURUNzQ2MQorICAqIEFuYWxvZyBEZXZpY2VzIEFEVDc0NjFBCisgICAgUHJlZml4OiAnYWR0NzQ2MWEnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDRjIGFuZCAweDRkCisgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIE9OIFNlbWljb25kdWN0b3Igd2Vic2l0ZQorICAgICAgICAgICAgICAgaHR0cDovL3d3dy5vbnNlbWkuY29tL1Bvd2VyU29sdXRpb25zL3Byb2R1Y3QuZG8/aWQ9QURUNzQ2MUEKKyAgKiBPTiBTZW1pY29uZHVjdG9yIE5DVDEwMDgKKyAgICBQcmVmaXg6ICduY3QxMDA4JworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0YyBhbmQgMHg0ZAorICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBPTiBTZW1pY29uZHVjdG9yIHdlYnNpdGUKKyAgICAgICAgICAgICAgIGh0dHA6Ly93d3cub25zZW1pLmNvbS9Qb3dlclNvbHV0aW9ucy9wcm9kdWN0LmRvP2lkPU5DVDEwMDgKICAgKiBNYXhpbSBNQVg2NjQ2CiAgICAgUHJlZml4OiAnbWF4NjY0NicKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NGQKQEAgLTE0OSw3ICsxNTksNyBAQAogICAqIEFMRVJUIGlzIHRyaWdnZXJlZCBieSBvcGVuIHJlbW90ZSBzZW5zb3IuCiAgICogU01CdXMgUEVDIHN1cHBvcnQgZm9yIFdyaXRlIEJ5dGUgYW5kIFJlY2VpdmUgQnl0ZSB0cmFuc2FjdGlvbnMuCiAKLUFEVDc0NjE6CitBRFQ3NDYxLCBBRFQ3NDYxQSwgTkNUMTAwODoKICAgKiBFeHRlbmRlZCB0ZW1wZXJhdHVyZSByYW5nZSAoYnJlYWtzIGNvbXBhdGliaWxpdHkpCiAgICogTG93ZXIgcmVzb2x1dGlvbiBmb3IgcmVtb3RlIHRlbXBlcmF0dXJlCiAKQEAgLTE5NSw5ICsyMDUsOSBAQAogT25seSB0aGUgbG9jYWwgaHlzdGVyZXNpcyBjYW4gYmUgc2V0IGZyb20gdXNlci1zcGFjZSwgYW5kIHRoZSBzYW1lIGRlbHRhCiBhcHBsaWVzIHRvIHRoZSByZW1vdGUgaHlzdGVyZXNpcy4KIAotVGhlIGxtOTAgZHJpdmVyIHdpbGwgbm90IHVwZGF0ZSBpdHMgdmFsdWVzIG1vcmUgZnJlcXVlbnRseSB0aGFuIGV2ZXJ5Ci1vdGhlciBzZWNvbmQ7IHJlYWRpbmcgdGhlbSBtb3JlIG9mdGVuIHdpbGwgZG8gbm8gaGFybSwgYnV0IHdpbGwgcmV0dXJuCi0nb2xkJyB2YWx1ZXMuCitUaGUgbG05MCBkcml2ZXIgd2lsbCBub3QgdXBkYXRlIGl0cyB2YWx1ZXMgbW9yZSBmcmVxdWVudGx5IHRoYW4gY29uZmlndXJlZCB3aXRoCit0aGUgdXBkYXRlX2ludGVydmFsIGF0dHJpYnV0ZTsgcmVhZGluZyB0aGVtIG1vcmUgb2Z0ZW4gd2lsbCBkbyBubyBoYXJtLCBidXQgd2lsbAorcmV0dXJuICdvbGQnIHZhbHVlcy4KIAogU01CdXMgQWxlcnQgU3VwcG9ydAogLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjA1LDExICsyMTUsMTIgQEAKIFRoaXMgZHJpdmVyIGhhcyBiYXNpYyBzdXBwb3J0IGZvciBTTUJ1cyBhbGVydC4gV2hlbiBhbiBhbGVydCBpcyByZWNlaXZlZCwKIHRoZSBzdGF0dXMgcmVnaXN0ZXIgaXMgcmVhZCBhbmQgdGhlIGZhdWx0eSB0ZW1wZXJhdHVyZSBjaGFubmVsIGlzIGxvZ2dlZC4KIAotVGhlIEFuYWxvZyBEZXZpY2VzIGNoaXBzIChBRE0xMDMyIGFuZCBBRFQ3NDYxKSBkbyBub3QgaW1wbGVtZW50IHRoZSBTTUJ1cwotYWxlcnQgcHJvdG9jb2wgcHJvcGVybHkgc28gYWRkaXRpb25hbCBjYXJlIGlzIG5lZWRlZDogdGhlIEFMRVJUIG91dHB1dCBpcwotZGlzYWJsZWQgd2hlbiBhbiBhbGVydCBpcyByZWNlaXZlZCwgYW5kIGlzIHJlLWVuYWJsZWQgb25seSB3aGVuIHRoZSBhbGFybQotaXMgZ29uZS4gT3RoZXJ3aXNlIHRoZSBjaGlwIHdvdWxkIGJsb2NrIGFsZXJ0cyBmcm9tIG90aGVyIGNoaXBzIGluIHRoZSBidXMKLWFzIGxvbmcgYXMgdGhlIGFsYXJtIGlzIGFjdGl2ZS4KK1RoZSBBbmFsb2cgRGV2aWNlcyBjaGlwcyAoQURNMTAzMiwgQURUNzQ2MSBhbmQgQURUNzQ2MUEpIGFuZCBPTgorU2VtaWNvbmR1Y3RvciBjaGlwcyAoTkNUMTAwOCkgZG8gbm90IGltcGxlbWVudCB0aGUgU01CdXMgYWxlcnQgcHJvdG9jb2wKK3Byb3Blcmx5IHNvIGFkZGl0aW9uYWwgY2FyZSBpcyBuZWVkZWQ6IHRoZSBBTEVSVCBvdXRwdXQgaXMgZGlzYWJsZWQgd2hlbgorYW4gYWxlcnQgaXMgcmVjZWl2ZWQsIGFuZCBpcyByZS1lbmFibGVkIG9ubHkgd2hlbiB0aGUgYWxhcm0gaXMgZ29uZS4KK090aGVyd2lzZSB0aGUgY2hpcCB3b3VsZCBibG9jayBhbGVydHMgZnJvbSBvdGhlciBjaGlwcyBpbiB0aGUgYnVzIGFzIGxvbmcKK2FzIHRoZSBhbGFybSBpcyBhY3RpdmUuCiAKIFBFQyBTdXBwb3J0CiAtLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9tYXgxNjA2NCBiL0RvY3VtZW50YXRpb24vaHdtb24vbWF4MTYwNjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE3Mjg5OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vbWF4MTYwNjQKQEAgLTAsMCArMSw2MiBAQAorS2VybmVsIGRyaXZlciBtYXgxNjA2NAorPT09PT09PT09PT09PT09PT09PT09PQorCitTdXBwb3J0ZWQgY2hpcHM6CisgICogTWF4aW0gTUFYMTYwNjQKKyAgICBQcmVmaXg6ICdtYXgxNjA2NCcKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogLQorICAgIERhdGFzaGVldDogaHR0cDovL2RhdGFzaGVldHMubWF4aW0taWMuY29tL2VuL2RzL01BWDE2MDY0LnBkZgorCitBdXRob3I6IEd1ZW50ZXIgUm9lY2sgPGd1ZW50ZXIucm9lY2tAZXJpY3Nzb24uY29tPgorCisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBzdXBwb3J0cyBoYXJkd2FyZSBtb250b3JpbmcgZm9yIE1heGltIE1BWDE2MDY0IFF1YWQgUG93ZXItU3VwcGx5CitDb250cm9sbGVyIHdpdGggQWN0aXZlLVZvbHRhZ2UgT3V0cHV0IENvbnRyb2wgYW5kIFBNQnVzIEludGVyZmFjZS4KKworVGhlIGRyaXZlciBpcyBhIGNsaWVudCBkcml2ZXIgdG8gdGhlIGNvcmUgUE1CdXMgZHJpdmVyLgorUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2h3bW9uL3BtYnVzIGZvciBkZXRhaWxzIG9uIFBNQnVzIGNsaWVudCBkcml2ZXJzLgorCisKK1VzYWdlIE5vdGVzCistLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBkb2VzIG5vdCBhdXRvLWRldGVjdCBkZXZpY2VzLiBZb3Ugd2lsbCBoYXZlIHRvIGluc3RhbnRpYXRlIHRoZQorZGV2aWNlcyBleHBsaWNpdGx5LiBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaTJjL2luc3RhbnRpYXRpbmctZGV2aWNlcyBmb3IKK2RldGFpbHMuCisKKworUGxhdGZvcm0gZGF0YSBzdXBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGRyaXZlciBzdXBwb3J0cyBzdGFuZGFyZCBQTUJ1cyBkcml2ZXIgcGxhdGZvcm0gZGF0YS4KKworCitTeXNmcyBlbnRyaWVzCistLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBhcmUgc3VwcG9ydGVkLiBMaW1pdHMgYXJlIHJlYWQtd3JpdGU7IGFsbCBvdGhlcgorYXR0cmlidXRlcyBhcmUgcmVhZC1vbmx5LgorCitpblsxLTRdX2xhYmVsCQkidm91dFsxLTRdIgoraW5bMS00XV9pbnB1dAkJTWVhc3VyZWQgdm9sdGFnZS4gRnJvbSBSRUFEX1ZPVVQgcmVnaXN0ZXIuCitpblsxLTRdX21pbgkJTWludW11bSBWb2x0YWdlLiBGcm9tIFZPVVRfVVZfV0FSTl9MSU1JVCByZWdpc3Rlci4KK2luWzEtNF1fbWF4CQlNYXhpbXVtIHZvbHRhZ2UuIEZyb20gVk9VVF9PVl9XQVJOX0xJTUlUIHJlZ2lzdGVyLgoraW5bMS00XV9sY3JpdAkJQ3JpdGljYWwgbWludW11bSBWb2x0YWdlLiBWT1VUX1VWX0ZBVUxUX0xJTUlUIHJlZ2lzdGVyLgoraW5bMS00XV9jcml0CQlDcml0aWNhbCBtYXhpbXVtIHZvbHRhZ2UuIEZyb20gVk9VVF9PVl9GQVVMVF9MSU1JVCByZWdpc3Rlci4KK2luWzEtNF1fbWluX2FsYXJtCVZvbHRhZ2UgbG93IGFsYXJtLiBGcm9tIFZPTFRBR0VfVVZfV0FSTklORyBzdGF0dXMuCitpblsxLTRdX21heF9hbGFybQlWb2x0YWdlIGhpZ2ggYWxhcm0uIEZyb20gVk9MVEFHRV9PVl9XQVJOSU5HIHN0YXR1cy4KK2luWzEtNF1fbGNyaXRfYWxhcm0JVm9sdGFnZSBjcml0aWNhbCBsb3cgYWxhcm0uIEZyb20gVk9MVEFHRV9VVl9GQVVMVCBzdGF0dXMuCitpblsxLTRdX2NyaXRfYWxhcm0JVm9sdGFnZSBjcml0aWNhbCBoaWdoIGFsYXJtLiBGcm9tIFZPTFRBR0VfT1ZfRkFVTFQgc3RhdHVzLgorCit0ZW1wMV9pbnB1dAkJTWVhc3VyZWQgdGVtcGVyYXR1cmUuIEZyb20gUkVBRF9URU1QRVJBVFVSRV8xIHJlZ2lzdGVyLgordGVtcDFfbWF4CQlNYXhpbXVtIHRlbXBlcmF0dXJlLiBGcm9tIE9UX1dBUk5fTElNSVQgcmVnaXN0ZXIuCit0ZW1wMV9jcml0CQlDcml0aWNhbCBoaWdoIHRlbXBlcmF0dXJlLiBGcm9tIE9UX0ZBVUxUX0xJTUlUIHJlZ2lzdGVyLgordGVtcDFfbWF4X2FsYXJtCQlDaGlwIHRlbXBlcmF0dXJlIGhpZ2ggYWxhcm0uIFNldCBieSBjb21wYXJpbmcKKwkJCVJFQURfVEVNUEVSQVRVUkVfMSB3aXRoIE9UX1dBUk5fTElNSVQgaWYgVEVNUF9PVF9XQVJOSU5HCisJCQlzdGF0dXMgaXMgc2V0LgordGVtcDFfY3JpdF9hbGFybQlDaGlwIHRlbXBlcmF0dXJlIGNyaXRpY2FsIGhpZ2ggYWxhcm0uIFNldCBieSBjb21wYXJpbmcKKwkJCVJFQURfVEVNUEVSQVRVUkVfMSB3aXRoIE9UX0ZBVUxUX0xJTUlUIGlmIFRFTVBfT1RfRkFVTFQKKwkJCXN0YXR1cyBpcyBzZXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL21heDM0NDQwIGIvRG9jdW1lbnRhdGlvbi9od21vbi9tYXgzNDQ0MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzUyNWRkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9tYXgzNDQ0MApAQCAtMCwwICsxLDc5IEBACitLZXJuZWwgZHJpdmVyIG1heDM0NDQwCis9PT09PT09PT09PT09PT09PT09PT09CisKK1N1cHBvcnRlZCBjaGlwczoKKyAgKiBNYXhpbSBNQVgzNDQ0MAorICAgIFByZWZpeGVzOiAnbWF4MzQ0NDAnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IC0KKyAgICBEYXRhc2hlZXQ6IGh0dHA6Ly9kYXRhc2hlZXRzLm1heGltLWljLmNvbS9lbi9kcy9NQVgzNDQ0MC5wZGYKKyAgKiBNYXhpbSBNQVgzNDQ0MQorICAgIFBNQnVzIDUtQ2hhbm5lbCBQb3dlci1TdXBwbHkgTWFuYWdlciBhbmQgSW50ZWxsaWdlbnQgRmFuIENvbnRyb2xsZXIKKyAgICBQcmVmaXhlczogJ21heDM0NDQxJworICAgIEFkZHJlc3NlcyBzY2FubmVkOiAtCisgICAgRGF0YXNoZWV0OiBodHRwOi8vZGF0YXNoZWV0cy5tYXhpbS1pYy5jb20vZW4vZHMvTUFYMzQ0NDEucGRmCisKK0F1dGhvcjogR3VlbnRlciBSb2VjayA8Z3VlbnRlci5yb2Vja0Blcmljc3Nvbi5jb20+CisKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIGhhcmR3YXJlIG1vbnRvcmluZyBmb3IgTWF4aW0gTUFYMzQ0NDAgUE1CdXMgNi1DaGFubmVsCitQb3dlci1TdXBwbHkgTWFuYWdlciBhbmQgTUFYMzQ0NDEgUE1CdXMgNS1DaGFubmVsIFBvd2VyLVN1cHBseSBNYW5hZ2VyCithbmQgSW50ZWxsaWdlbnQgRmFuIENvbnRyb2xsZXIuCisKK1RoZSBkcml2ZXIgaXMgYSBjbGllbnQgZHJpdmVyIHRvIHRoZSBjb3JlIFBNQnVzIGRyaXZlci4gUGxlYXNlIHNlZQorRG9jdW1lbnRhdGlvbi9od21vbi9wbWJ1cyBmb3IgZGV0YWlscyBvbiBQTUJ1cyBjbGllbnQgZHJpdmVycy4KKworCitVc2FnZSBOb3RlcworLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgZG9lcyBub3QgYXV0by1kZXRlY3QgZGV2aWNlcy4gWW91IHdpbGwgaGF2ZSB0byBpbnN0YW50aWF0ZSB0aGUKK2RldmljZXMgZXhwbGljaXRseS4gUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2kyYy9pbnN0YW50aWF0aW5nLWRldmljZXMgZm9yCitkZXRhaWxzLgorCisKK1BsYXRmb3JtIGRhdGEgc3VwcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkcml2ZXIgc3VwcG9ydHMgc3RhbmRhcmQgUE1CdXMgZHJpdmVyIHBsYXRmb3JtIGRhdGEuCisKKworU3lzZnMgZW50cmllcworLS0tLS0tLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgYXJlIHN1cHBvcnRlZC4gTGltaXRzIGFyZSByZWFkLXdyaXRlOyBhbGwgb3RoZXIKK2F0dHJpYnV0ZXMgYXJlIHJlYWQtb25seS4KKworaW5bMS02XV9sYWJlbAkJInZvdXRbMS02XSIuCitpblsxLTZdX2lucHV0CQlNZWFzdXJlZCB2b2x0YWdlLiBGcm9tIFJFQURfVk9VVCByZWdpc3Rlci4KK2luWzEtNl1fbWluCQlNaW51bXVtIFZvbHRhZ2UuIEZyb20gVk9VVF9VVl9XQVJOX0xJTUlUIHJlZ2lzdGVyLgoraW5bMS02XV9tYXgJCU1heGltdW0gdm9sdGFnZS4gRnJvbSBWT1VUX09WX1dBUk5fTElNSVQgcmVnaXN0ZXIuCitpblsxLTZdX2xjcml0CQlDcml0aWNhbCBtaW51bXVtIFZvbHRhZ2UuIFZPVVRfVVZfRkFVTFRfTElNSVQgcmVnaXN0ZXIuCitpblsxLTZdX2NyaXQJCUNyaXRpY2FsIG1heGltdW0gdm9sdGFnZS4gRnJvbSBWT1VUX09WX0ZBVUxUX0xJTUlUIHJlZ2lzdGVyLgoraW5bMS02XV9taW5fYWxhcm0JVm9sdGFnZSBsb3cgYWxhcm0uIEZyb20gVk9MVEFHRV9VVl9XQVJOSU5HIHN0YXR1cy4KK2luWzEtNl1fbWF4X2FsYXJtCVZvbHRhZ2UgaGlnaCBhbGFybS4gRnJvbSBWT0xUQUdFX09WX1dBUk5JTkcgc3RhdHVzLgoraW5bMS02XV9sY3JpdF9hbGFybQlWb2x0YWdlIGNyaXRpY2FsIGxvdyBhbGFybS4gRnJvbSBWT0xUQUdFX1VWX0ZBVUxUIHN0YXR1cy4KK2luWzEtNl1fY3JpdF9hbGFybQlWb2x0YWdlIGNyaXRpY2FsIGhpZ2ggYWxhcm0uIEZyb20gVk9MVEFHRV9PVl9GQVVMVCBzdGF0dXMuCisKK2N1cnJbMS02XV9sYWJlbAkJImlvdXRbMS02XSIuCitjdXJyWzEtNl1faW5wdXQJCU1lYXN1cmVkIGN1cnJlbnQuIEZyb20gUkVBRF9JT1VUIHJlZ2lzdGVyLgorY3VyclsxLTZdX21heAkJTWF4aW11bSBjdXJyZW50LiBGcm9tIElPVVRfT0NfV0FSTl9MSU1JVCByZWdpc3Rlci4KK2N1cnJbMS02XV9jcml0CQlDcml0aWNhbCBtYXhpbXVtIGN1cnJlbnQuIEZyb20gSU9VVF9PQ19GQVVMVF9MSU1JVCByZWdpc3Rlci4KK2N1cnJbMS02XV9tYXhfYWxhcm0JQ3VycmVudCBoaWdoIGFsYXJtLiBGcm9tIElPVVRfT0NfV0FSTklORyBzdGF0dXMuCitjdXJyWzEtNl1fY3JpdF9hbGFybQlDdXJyZW50IGNyaXRpY2FsIGhpZ2ggYWxhcm0uIEZyb20gSU9VVF9PQ19GQVVMVCBzdGF0dXMuCisKKwkJCWluNiBhbmQgY3VycjYgYXR0cmlidXRlcyBvbmx5IGV4aXN0IGZvciBNQVgzNDQ0MC4KKwordGVtcFsxLThdX2lucHV0CQlNZWFzdXJlZCB0ZW1wZXJhdHVyZXMuIEZyb20gUkVBRF9URU1QRVJBVFVSRV8xIHJlZ2lzdGVyLgorCQkJdGVtcDEgaXMgdGhlIGNoaXAncyBpbnRlcm5hbCB0ZW1wZXJhdHVyZS4gdGVtcDIuLnRlbXA1CisJCQlhcmUgcmVtb3RlIEkyQyB0ZW1wZXJhdHVyZSBzZW5zb3JzLiBGb3IgTUFYMzQ0NDEsIHRlbXA2CisJCQlpcyBhIHJlbW90ZSB0aGVybWFsLWRpb2RlIHNlbnNvci4gRm9yIE1BWDM0NDQwLCB0ZW1wNi4uOAorCQkJYXJlIHJlbW90ZSBJMkMgdGVtcGVyYXR1cmUgc2Vuc29ycy4KK3RlbXBbMS04XV9tYXgJCU1heGltdW0gdGVtcGVyYXR1cmUuIEZyb20gT1RfV0FSTl9MSU1JVCByZWdpc3Rlci4KK3RlbXBbMS04XV9jcml0CQlDcml0aWNhbCBoaWdoIHRlbXBlcmF0dXJlLiBGcm9tIE9UX0ZBVUxUX0xJTUlUIHJlZ2lzdGVyLgordGVtcFsxLThdX21heF9hbGFybQlUZW1wZXJhdHVyZSBoaWdoIGFsYXJtLgordGVtcFsxLThdX2NyaXRfYWxhcm0JVGVtcGVyYXR1cmUgY3JpdGljYWwgaGlnaCBhbGFybS4KKworCQkJdGVtcDcgYW5kIHRlbXA4IGF0dHJpYnV0ZXMgb25seSBleGlzdCBmb3IgTUFYMzQ0NDAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL21heDg2ODggYi9Eb2N1bWVudGF0aW9uL2h3bW9uL21heDg2ODgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRkZDNhNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vbWF4ODY4OApAQCAtMCwwICsxLDY5IEBACitLZXJuZWwgZHJpdmVyIG1heDg2ODgKKz09PT09PT09PT09PT09PT09PT09PQorCitTdXBwb3J0ZWQgY2hpcHM6CisgICogTWF4aW0gTUFYODY4OAorICAgIFByZWZpeDogJ21heDg2ODgnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IC0KKyAgICBEYXRhc2hlZXQ6IGh0dHA6Ly9kYXRhc2hlZXRzLm1heGltLWljLmNvbS9lbi9kcy9NQVg4Njg4LnBkZgorCitBdXRob3I6IEd1ZW50ZXIgUm9lY2sgPGd1ZW50ZXIucm9lY2tAZXJpY3Nzb24uY29tPgorCisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBzdXBwb3J0cyBoYXJkd2FyZSBtb250b3JpbmcgZm9yIE1heGltIE1BWDg2ODggRGlnaXRhbCBQb3dlci1TdXBwbHkKK0NvbnRyb2xsZXIvTW9uaXRvciB3aXRoIFBNQnVzIEludGVyZmFjZS4KKworVGhlIGRyaXZlciBpcyBhIGNsaWVudCBkcml2ZXIgdG8gdGhlIGNvcmUgUE1CdXMgZHJpdmVyLiBQbGVhc2Ugc2VlCitEb2N1bWVudGF0aW9uL2h3bW9uL3BtYnVzIGZvciBkZXRhaWxzIG9uIFBNQnVzIGNsaWVudCBkcml2ZXJzLgorCisKK1VzYWdlIE5vdGVzCistLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBkb2VzIG5vdCBhdXRvLWRldGVjdCBkZXZpY2VzLiBZb3Ugd2lsbCBoYXZlIHRvIGluc3RhbnRpYXRlIHRoZQorZGV2aWNlcyBleHBsaWNpdGx5LiBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaTJjL2luc3RhbnRpYXRpbmctZGV2aWNlcyBmb3IKK2RldGFpbHMuCisKKworUGxhdGZvcm0gZGF0YSBzdXBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGRyaXZlciBzdXBwb3J0cyBzdGFuZGFyZCBQTUJ1cyBkcml2ZXIgcGxhdGZvcm0gZGF0YS4KKworCitTeXNmcyBlbnRyaWVzCistLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBhcmUgc3VwcG9ydGVkLiBMaW1pdHMgYXJlIHJlYWQtd3JpdGU7IGFsbCBvdGhlcgorYXR0cmlidXRlcyBhcmUgcmVhZC1vbmx5LgorCitpbjFfbGFiZWwJCSJ2b3V0MSIKK2luMV9pbnB1dAkJTWVhc3VyZWQgdm9sdGFnZS4gRnJvbSBSRUFEX1ZPVVQgcmVnaXN0ZXIuCitpbjFfbWluCQkJTWludW11bSBWb2x0YWdlLiBGcm9tIFZPVVRfVVZfV0FSTl9MSU1JVCByZWdpc3Rlci4KK2luMV9tYXgJCQlNYXhpbXVtIHZvbHRhZ2UuIEZyb20gVk9VVF9PVl9XQVJOX0xJTUlUIHJlZ2lzdGVyLgoraW4xX2xjcml0CQlDcml0aWNhbCBtaW51bXVtIFZvbHRhZ2UuIFZPVVRfVVZfRkFVTFRfTElNSVQgcmVnaXN0ZXIuCitpbjFfY3JpdAkJQ3JpdGljYWwgbWF4aW11bSB2b2x0YWdlLiBGcm9tIFZPVVRfT1ZfRkFVTFRfTElNSVQgcmVnaXN0ZXIuCitpbjFfbWluX2FsYXJtCQlWb2x0YWdlIGxvdyBhbGFybS4gRnJvbSBWT0xUQUdFX1VWX1dBUk5JTkcgc3RhdHVzLgoraW4xX21heF9hbGFybQkJVm9sdGFnZSBoaWdoIGFsYXJtLiBGcm9tIFZPTFRBR0VfT1ZfV0FSTklORyBzdGF0dXMuCitpbjFfbGNyaXRfYWxhcm0JCVZvbHRhZ2UgY3JpdGljYWwgbG93IGFsYXJtLiBGcm9tIFZPTFRBR0VfVVZfRkFVTFQgc3RhdHVzLgoraW4xX2NyaXRfYWxhcm0JCVZvbHRhZ2UgY3JpdGljYWwgaGlnaCBhbGFybS4gRnJvbSBWT0xUQUdFX09WX0ZBVUxUIHN0YXR1cy4KKworY3VycjFfbGFiZWwJCSJpb3V0MSIKK2N1cnIxX2lucHV0CQlNZWFzdXJlZCBjdXJyZW50LiBGcm9tIFJFQURfSU9VVCByZWdpc3Rlci4KK2N1cnIxX21heAkJTWF4aW11bSBjdXJyZW50LiBGcm9tIElPVVRfT0NfV0FSTl9MSU1JVCByZWdpc3Rlci4KK2N1cnIxX2NyaXQJCUNyaXRpY2FsIG1heGltdW0gY3VycmVudC4gRnJvbSBJT1VUX09DX0ZBVUxUX0xJTUlUIHJlZ2lzdGVyLgorY3VycjFfbWF4X2FsYXJtCQlDdXJyZW50IGhpZ2ggYWxhcm0uIEZyb20gSU9VVF9PQ19XQVJOX0xJTUlUIHJlZ2lzdGVyLgorY3VycjFfY3JpdF9hbGFybQlDdXJyZW50IGNyaXRpY2FsIGhpZ2ggYWxhcm0uIEZyb20gSU9VVF9PQ19GQVVMVCBzdGF0dXMuCisKK3RlbXAxX2lucHV0CQlNZWFzdXJlZCB0ZW1wZXJhdHVyZS4gRnJvbSBSRUFEX1RFTVBFUkFUVVJFXzEgcmVnaXN0ZXIuCit0ZW1wMV9tYXgJCU1heGltdW0gdGVtcGVyYXR1cmUuIEZyb20gT1RfV0FSTl9MSU1JVCByZWdpc3Rlci4KK3RlbXAxX2NyaXQJCUNyaXRpY2FsIGhpZ2ggdGVtcGVyYXR1cmUuIEZyb20gT1RfRkFVTFRfTElNSVQgcmVnaXN0ZXIuCit0ZW1wMV9tYXhfYWxhcm0JCUNoaXAgdGVtcGVyYXR1cmUgaGlnaCBhbGFybS4gU2V0IGJ5IGNvbXBhcmluZworCQkJUkVBRF9URU1QRVJBVFVSRV8xIHdpdGggT1RfV0FSTl9MSU1JVCBpZiBURU1QX09UX1dBUk5JTkcKKwkJCXN0YXR1cyBpcyBzZXQuCit0ZW1wMV9jcml0X2FsYXJtCUNoaXAgdGVtcGVyYXR1cmUgY3JpdGljYWwgaGlnaCBhbGFybS4gU2V0IGJ5IGNvbXBhcmluZworCQkJUkVBRF9URU1QRVJBVFVSRV8xIHdpdGggT1RfRkFVTFRfTElNSVQgaWYgVEVNUF9PVF9GQVVMVAorCQkJc3RhdHVzIGlzIHNldC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vcG1idXMgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3BtYnVzCmluZGV4IGRjNDkzM2UuLjVlNDYyZmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vcG1idXMKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9wbWJ1cwpAQCAtMTMsMjYgKzEzLDYgQEAKICAgICBQcmVmaXg6ICdsdGMyOTc4JwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiAtCiAgICAgRGF0YXNoZWV0OiBodHRwOi8vY2RzLmxpbmVhci5jb20vZG9jcy9EYXRhc2hlZXQvMjk3OGZhLnBkZgotICAqIE1heGltIE1BWDE2MDY0Ci0gICAgUXVhZCBQb3dlci1TdXBwbHkgQ29udHJvbGxlcgotICAgIFByZWZpeDogJ21heDE2MDY0JwotICAgIEFkZHJlc3NlcyBzY2FubmVkOiAtCi0gICAgRGF0YXNoZWV0OiBodHRwOi8vZGF0YXNoZWV0cy5tYXhpbS1pYy5jb20vZW4vZHMvTUFYMTYwNjQucGRmCi0gICogTWF4aW0gTUFYMzQ0NDAKLSAgICBQTUJ1cyA2LUNoYW5uZWwgUG93ZXItU3VwcGx5IE1hbmFnZXIKLSAgICBQcmVmaXhlczogJ21heDM0NDQwJwotICAgIEFkZHJlc3NlcyBzY2FubmVkOiAtCi0gICAgRGF0YXNoZWV0OiBodHRwOi8vZGF0YXNoZWV0cy5tYXhpbS1pYy5jb20vZW4vZHMvTUFYMzQ0NDAucGRmCi0gICogTWF4aW0gTUFYMzQ0NDEKLSAgICBQTUJ1cyA1LUNoYW5uZWwgUG93ZXItU3VwcGx5IE1hbmFnZXIgYW5kIEludGVsbGlnZW50IEZhbiBDb250cm9sbGVyCi0gICAgUHJlZml4ZXM6ICdtYXgzNDQ0MScKLSAgICBBZGRyZXNzZXMgc2Nhbm5lZDogLQotICAgIERhdGFzaGVldDogaHR0cDovL2RhdGFzaGVldHMubWF4aW0taWMuY29tL2VuL2RzL01BWDM0NDQxLnBkZgotICAqIE1heGltIE1BWDg2ODgKLSAgICBEaWdpdGFsIFBvd2VyLVN1cHBseSBDb250cm9sbGVyL01vbml0b3IKLSAgICBQcmVmaXg6ICdtYXg4Njg4JwotICAgIEFkZHJlc3NlcyBzY2FubmVkOiAtCi0gICAgRGF0YXNoZWV0OiBodHRwOi8vZGF0YXNoZWV0cy5tYXhpbS1pYy5jb20vZW4vZHMvTUFYODY4OC5wZGYKICAgKiBHZW5lcmljIFBNQnVzIGRldmljZXMKICAgICBQcmVmaXg6ICdwbWJ1cycKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogLQpAQCAtMTc1LDExICsxNTUsMTMgQEAKIAkJCUZyb20gSUlOX09DX0ZBVUxUX0xJTUlUIG9yIElPVVRfT0NfRkFVTFRfTElNSVQgcmVnaXN0ZXIuCiBjdXJyWF9hbGFybQkJQ3VycmVudCBoaWdoIGFsYXJtLgogCQkJRnJvbSBJSU5fT0NfV0FSTklORyBvciBJT1VUX09DX1dBUk5JTkcgc3RhdHVzLgorY3VyclhfbWF4X2FsYXJtCQlDdXJyZW50IGhpZ2ggYWxhcm0uCisJCQlGcm9tIElJTl9PQ19XQVJOX0xJTUlUIG9yIElPVVRfT0NfV0FSTl9MSU1JVCBzdGF0dXMuCiBjdXJyWF9sY3JpdF9hbGFybQlPdXRwdXQgY3VycmVudCBjcml0aWNhbCBsb3cgYWxhcm0uCiAJCQlGcm9tIElPVVRfVUNfRkFVTFQgc3RhdHVzLgogY3VyclhfY3JpdF9hbGFybQlDdXJyZW50IGNyaXRpY2FsIGhpZ2ggYWxhcm0uCiAJCQlGcm9tIElJTl9PQ19GQVVMVCBvciBJT1VUX09DX0ZBVUxUIHN0YXR1cy4KLWN1cnJYX2xhYmVsCQkiaWluIiBvciAidmluWSIKK2N1cnJYX2xhYmVsCQkiaWluIiBvciAiaW91dFkiCiAKIHBvd2VyWF9pbnB1dAkJTWVhc3VyZWQgcG93ZXIuIEZyb20gUkVBRF9QSU4gb3IgUkVBRF9QT1VUIHJlZ2lzdGVyLgogcG93ZXJYX2NhcAkJT3V0cHV0IHBvd2VyIGNhcC4gRnJvbSBQT1VUX01BWCByZWdpc3Rlci4KQEAgLTE5MywxMyArMTc1LDEzIEBACiAJCQlGcm9tIFBPVVRfT1BfRkFVTFQgc3RhdHVzLgogcG93ZXJYX2xhYmVsCQkicGluIiBvciAicG91dFkiCiAKLXRlbXBYX2lucHV0CQlNZWFzdXJlZCB0ZW1wZXJlcmF0dXJlLgordGVtcFhfaW5wdXQJCU1lYXN1cmVkIHRlbXBlcmF0dXJlLgogCQkJRnJvbSBSRUFEX1RFTVBFUkFUVVJFX1ggcmVnaXN0ZXIuCi10ZW1wWF9taW4JCU1pbWltdW0gdGVtcGVyZXJhdHVyZS4gRnJvbSBVVF9XQVJOX0xJTUlUIHJlZ2lzdGVyLgotdGVtcFhfbWF4CQlNYXhpbXVtIHRlbXBlcmVyYXR1cmUuIEZyb20gT1RfV0FSTl9MSU1JVCByZWdpc3Rlci4KLXRlbXBYX2xjcml0CQlDcml0aWNhbCBsb3cgdGVtcGVyZXJhdHVyZS4KK3RlbXBYX21pbgkJTWltaW11bSB0ZW1wZXJhdHVyZS4gRnJvbSBVVF9XQVJOX0xJTUlUIHJlZ2lzdGVyLgordGVtcFhfbWF4CQlNYXhpbXVtIHRlbXBlcmF0dXJlLiBGcm9tIE9UX1dBUk5fTElNSVQgcmVnaXN0ZXIuCit0ZW1wWF9sY3JpdAkJQ3JpdGljYWwgbG93IHRlbXBlcmF0dXJlLgogCQkJRnJvbSBVVF9GQVVMVF9MSU1JVCByZWdpc3Rlci4KLXRlbXBYX2NyaXQJCUNyaXRpY2FsIGhpZ2ggdGVtcGVyZXJhdHVyZS4KK3RlbXBYX2NyaXQJCUNyaXRpY2FsIGhpZ2ggdGVtcGVyYXR1cmUuCiAJCQlGcm9tIE9UX0ZBVUxUX0xJTUlUIHJlZ2lzdGVyLgogdGVtcFhfbWluX2FsYXJtCQlDaGlwIHRlbXBlcmF0dXJlIGxvdyBhbGFybS4gU2V0IGJ5IGNvbXBhcmluZwogCQkJUkVBRF9URU1QRVJBVFVSRV9YIHdpdGggVVRfV0FSTl9MSU1JVCBpZgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9zbW02NjUgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3NtbTY2NQppbmRleCAzODIwZmM5Li41OWUzMTYxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3NtbTY2NQorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3NtbTY2NQpAQCAtMTUwLDggKzE1MCw4IEBACiBpbjlfY3JpdF9hbGFybQkJQUlOMSBjcml0aWNhbCBhbGFybQogaW4xMF9jcml0X2FsYXJtCQlBSU4yIGNyaXRpY2FsIGFsYXJtCiAKLXRlbXAxX2lucHV0CQlDaGlwIHRlbXBlcmVyYXR1cmUKLXRlbXAxX21pbgkJTWltaW11bSBjaGlwIHRlbXBlcmVyYXR1cmUKLXRlbXAxX21heAkJTWF4aW11bSBjaGlwIHRlbXBlcmVyYXR1cmUKLXRlbXAxX2NyaXQJCUNyaXRpY2FsIGNoaXAgdGVtcGVyZXJhdHVyZQordGVtcDFfaW5wdXQJCUNoaXAgdGVtcGVyYXR1cmUKK3RlbXAxX21pbgkJTWltaW11bSBjaGlwIHRlbXBlcmF0dXJlCit0ZW1wMV9tYXgJCU1heGltdW0gY2hpcCB0ZW1wZXJhdHVyZQordGVtcDFfY3JpdAkJQ3JpdGljYWwgY2hpcCB0ZW1wZXJhdHVyZQogdGVtcDFfY3JpdF9hbGFybQlUZW1wZXJhdHVyZSBjcml0aWNhbCBhbGFybQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9zdWJtaXR0aW5nLXBhdGNoZXMgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3N1Ym1pdHRpbmctcGF0Y2hlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmY0MmU4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9zdWJtaXR0aW5nLXBhdGNoZXMKQEAgLTAsMCArMSwxMDkgQEAKKwlIb3cgdG8gR2V0IFlvdXIgUGF0Y2ggQWNjZXB0ZWQgSW50byB0aGUgSHdtb24gU3Vic3lzdGVtCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHRleHQgaXMgaXMgYSBjb2xsZWN0aW9uIG9mIHN1Z2dlc3Rpb25zIGZvciBwZW9wbGUgd3JpdGluZyBwYXRjaGVzIG9yCitkcml2ZXJzIGZvciB0aGUgaHdtb24gc3Vic3lzdGVtLiBGb2xsb3dpbmcgdGhlc2Ugc3VnZ2VzdGlvbnMgd2lsbCBncmVhdGx5CitpbmNyZWFzZSB0aGUgY2hhbmNlcyBvZiB5b3VyIGNoYW5nZSBiZWluZyBhY2NlcHRlZC4KKworCisxLiBHZW5lcmFsCistLS0tLS0tLS0tCisKKyogSXQgc2hvdWxkIGJlIHVubmVjZXNzYXJ5IHRvIG1lbnRpb24sIGJ1dCBwbGVhc2UgcmVhZCBhbmQgZm9sbG93CisgICAgRG9jdW1lbnRhdGlvbi9TdWJtaXRDaGVja2xpc3QKKyAgICBEb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdEcml2ZXJzCisgICAgRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcworICAgIERvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUKKworKiBJZiB5b3VyIHBhdGNoIGdlbmVyYXRlcyBjaGVja3BhdGNoIHdhcm5pbmdzLCBwbGVhc2UgcmVmcmFpbiBmcm9tIGV4cGxhbmF0aW9ucworICBzdWNoIGFzICJJIGRvbid0IGxpa2UgdGhhdCBjb2Rpbmcgc3R5bGUiLiBLZWVwIGluIG1pbmQgdGhhdCBlYWNoIHVubmVjZXNzYXJ5CisgIHdhcm5pbmcgaGVscHMgaGlkaW5nIGEgcmVhbCBwcm9ibGVtLiBJZiB5b3UgZG9uJ3QgbGlrZSB0aGUga2VybmVsIGNvZGluZworICBzdHlsZSwgZG9uJ3Qgd3JpdGUga2VybmVsIGRyaXZlcnMuCisKKyogUGxlYXNlIHRlc3QgeW91ciBwYXRjaCB0aG9yb3VnaGx5LiBXZSBhcmUgbm90IHlvdXIgdGVzdCBncm91cC4KKyAgU29tZXRpbWVzIGEgcGF0Y2ggY2FuIG5vdCBvciBub3QgY29tcGxldGVseSBiZSB0ZXN0ZWQgYmVjYXVzZSBvZiBtaXNzaW5nCisgIGhhcmR3YXJlLiBJbiBzdWNoIGNhc2VzLCB5b3Ugc2hvdWxkIHRlc3QtYnVpbGQgdGhlIGNvZGUgb24gYXQgbGVhc3Qgb25lCisgIGFyY2hpdGVjdHVyZS4gSWYgcnVuLXRpbWUgdGVzdGluZyB3YXMgbm90IGFjaGlldmVkLCBpdCBzaG91bGQgYmUgd3JpdHRlbgorICBleHBsaWNpdGx5IGJlbG93IHRoZSBwYXRjaCBoZWFkZXIuCisKKyogSWYgeW91ciBwYXRjaCAob3IgdGhlIGRyaXZlcikgaXMgYWZmZWN0ZWQgYnkgY29uZmlndXJhdGlvbiBvcHRpb25zIHN1Y2ggYXMKKyAgQ09ORklHX1NNUCBvciBDT05GSUdfSE9UUExVRywgbWFrZSBzdXJlIGl0IGNvbXBpbGVzIGZvciBhbGwgY29uZmlndXJhdGlvbgorICB2YXJpYW50cy4KKworCisyLiBBZGRpbmcgZnVuY3Rpb25hbGl0eSB0byBleGlzdGluZyBkcml2ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogTWFrZSBzdXJlIHRoZSBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vaHdtb24vPGRyaXZlcl9uYW1lPiBpcyB1cCB0bworICBkYXRlLgorCisqIE1ha2Ugc3VyZSB0aGUgaW5mb3JtYXRpb24gaW4gS2NvbmZpZyBpcyB1cCB0byBkYXRlLgorCisqIElmIHRoZSBhZGRlZCBmdW5jdGlvbmFsaXR5IHJlcXVpcmVzIHNvbWUgY2xlYW51cCBvciBzdHJ1Y3R1cmFsIGNoYW5nZXMsIHNwbGl0CisgIHlvdXIgcGF0Y2ggaW50byBhIGNsZWFudXAgcGFydCBhbmQgdGhlIGFjdHVhbCBhZGRpdGlvbi4gVGhpcyBtYWtlcyBpdCBlYXNpZXIKKyAgdG8gcmV2aWV3IHlvdXIgY2hhbmdlcywgYW5kIHRvIGJpc2VjdCBhbnkgcmVzdWx0aW5nIHByb2JsZW1zLgorCisqIE5ldmVyIG1peCBidWcgZml4ZXMsIGNsZWFudXAsIGFuZCBmdW5jdGlvbmFsIGVuaGFuY2VtZW50cyBpbiBhIHNpbmdsZSBwYXRjaC4KKworCiszLiBOZXcgZHJpdmVycworLS0tLS0tLS0tLS0tLS0KKworKiBSdW5uaW5nIHlvdXIgcGF0Y2ggb3IgZHJpdmVyIGZpbGUocykgdGhyb3VnaCBjaGVja3BhdGNoIGRvZXMgbm90IG1lYW4gaXRzCisgIGZvcm1hdHRpbmcgaXMgY2xlYW4uIElmIHVuc3VyZSBhYm91dCBmb3JtYXR0aW5nIGluIHlvdXIgbmV3IGRyaXZlciwgcnVuIGl0CisgIHRocm91Z2ggTGluZGVudC4gTGluZGVudCBpcyBub3QgcGVyZmVjdCwgYW5kIHlvdSBtYXkgaGF2ZSB0byBkbyBzb21lIG1pbm9yCisgIGNsZWFudXAsIGJ1dCBpdCBpcyBhIGdvb2Qgc3RhcnQuCisKKyogQ29uc2lkZXIgYWRkaW5nIHlvdXJzZWxmIHRvIE1BSU5UQUlORVJTLgorCisqIERvY3VtZW50IHRoZSBkcml2ZXIgaW4gRG9jdW1lbnRhdGlvbi9od21vbi88ZHJpdmVyX25hbWU+LgorCisqIEFkZCB0aGUgZHJpdmVyIHRvIEtjb25maWcgYW5kIE1ha2VmaWxlIGluIGFscGhhYmV0aWNhbCBvcmRlci4KKworKiBNYWtlIHN1cmUgdGhhdCBhbGwgZGVwZW5kZW5jaWVzIGFyZSBsaXN0ZWQgaW4gS2NvbmZpZy4gRm9yIG5ldyBkcml2ZXJzLCBpdAorICBpcyBtb3N0IGxpa2VseSBwcnVkZW50IHRvIGFkZCBhIGRlcGVuZGVuY3kgb24gRVhQRVJJTUVOVEFMLgorCisqIEF2b2lkIGZvcndhcmQgZGVjbGFyYXRpb25zIGlmIHlvdSBjYW4uIFJlYXJyYW5nZSB0aGUgY29kZSBpZiBuZWNlc3NhcnkuCisKKyogQXZvaWQgY2FsY3VsYXRpb25zIGluIG1hY3JvcyBhbmQgbWFjcm8tZ2VuZXJhdGVkIGZ1bmN0aW9ucy4gV2hpbGUgc3VjaCBtYWNyb3MKKyAgbWF5IHNhdmUgYSBsaW5lIG9yIHNvIGluIHRoZSBzb3VyY2UsIGl0IG9iZnVzY2F0ZXMgdGhlIGNvZGUgYW5kIG1ha2VzIGNvZGUKKyAgcmV2aWV3IG1vcmUgZGlmZmljdWx0LiBJdCBtYXkgYWxzbyByZXN1bHQgaW4gY29kZSB3aGljaCBpcyBtb3JlIGNvbXBsaWNhdGVkCisgIHRoYW4gbmVjZXNzYXJ5LiBVc2UgaW5saW5lIGZ1bmN0aW9ucyBvciBqdXN0IHJlZ3VsYXIgZnVuY3Rpb25zIGluc3RlYWQuCisKKyogSWYgdGhlIGRyaXZlciBoYXMgYSBkZXRlY3QgZnVuY3Rpb24sIG1ha2Ugc3VyZSBpdCBpcyBzaWxlbnQuIERlYnVnIG1lc3NhZ2VzCisgIGFuZCBtZXNzYWdlcyBwcmludGVkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBkZXRlY3Rpb24gYXJlIGFjY2VwdGFibGUsIGJ1dCBpdAorICBtdXN0IG5vdCBwcmludCBtZXNzYWdlcyBzdWNoIGFzICJDaGlwIFhYWCBub3QgZm91bmQvc3VwcG9ydGVkIi4KKworICBLZWVwIGluIG1pbmQgdGhhdCB0aGUgZGV0ZWN0IGZ1bmN0aW9uIHdpbGwgcnVuIGZvciBhbGwgZHJpdmVycyBzdXBwb3J0aW5nIGFuCisgIGFkZHJlc3MgaWYgYSBjaGlwIGlzIGRldGVjdGVkIG9uIHRoYXQgYWRkcmVzcy4gVW5uZWNlc3NhcnkgbWVzc2FnZXMgd2lsbCBqdXN0CisgIHBvbGx1dGUgdGhlIGtlcm5lbCBsb2cgYW5kIG5vdCBwcm92aWRlIGFueSB2YWx1ZS4KKworKiBQcm92aWRlIGEgZGV0ZWN0IGZ1bmN0aW9uIGlmIGFuZCBvbmx5IGlmIGEgY2hpcCBjYW4gYmUgZGV0ZWN0ZWQgcmVsaWFibHkuCisKKyogQXZvaWQgd3JpdGluZyB0byBjaGlwIHJlZ2lzdGVycyBpbiB0aGUgZGV0ZWN0IGZ1bmN0aW9uLiBJZiB5b3UgaGF2ZSB0byB3cml0ZSwKKyAgb25seSBkbyBpdCBhZnRlciB5b3UgaGF2ZSBhbHJlYWR5IGdhdGhlcmVkIGVub3VnaCBkYXRhIHRvIGJlIGNlcnRhaW4gdGhhdCB0aGUKKyAgZGV0ZWN0aW9uIGlzIGdvaW5nIHRvIGJlIHN1Y2Nlc3NmdWwuCisKKyAgS2VlcCBpbiBtaW5kIHRoYXQgdGhlIGNoaXAgbWlnaHQgbm90IGJlIHdoYXQgeW91ciBkcml2ZXIgYmVsaWV2ZXMgaXQgaXMsIGFuZAorICB3cml0aW5nIHRvIGl0IG1pZ2h0IGNhdXNlIGEgYmFkIG1pc2NvbmZpZ3VyYXRpb24uCisKKyogTWFrZSBzdXJlIHRoZXJlIGFyZSBubyByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIHByb2JlIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksCisgIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZSB5b3VyIGNoaXAgZmlyc3QsIHRoZW4gY3JlYXRlIHN5c2ZzIGVudHJpZXMgYW5kIHJlZ2lzdGVyCisgIHdpdGggdGhlIGh3bW9uIHN1YnN5c3RlbS4KKworKiBEbyBub3QgcHJvdmlkZSBzdXBwb3J0IGZvciBkZXByZWNhdGVkIHN5c2ZzIGF0dHJpYnV0ZXMuCisKKyogRG8gbm90IGNyZWF0ZSBub24tc3RhbmRhcmQgYXR0cmlidXRlcyB1bmxlc3MgcmVhbGx5IG5lZWRlZC4gSWYgeW91IGhhdmUgdG8gdXNlCisgIG5vbi1zdGFuZGFyZCBhdHRyaWJ1dGVzLCBvciB5b3UgYmVsaWV2ZSB5b3UgZG8sIGRpc2N1c3MgaXQgb24gdGhlIG1haWxpbmcgbGlzdAorICBmaXJzdC4gRWl0aGVyIGNhc2UsIHByb3ZpZGUgYSBkZXRhaWxlZCBleHBsYW5hdGlvbiB3aHkgeW91IG5lZWQgdGhlCisgIG5vbi1zdGFuZGFyZCBhdHRyaWJ1dGUocykuCisgIFN0YW5kYXJkIGF0dHJpYnV0ZXMgYXJlIHNwZWNpZmllZCBpbiBEb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZS4KKworKiBXaGVuIGRlY2lkaW5nIHdoaWNoIHN5c2ZzIGF0dHJpYnV0ZXMgdG8gc3VwcG9ydCwgbG9vayBhdCB0aGUgY2hpcCdzCisgIGNhcGFiaWxpdGllcy4gV2hpbGUgd2UgZG8gbm90IGV4cGVjdCB5b3VyIGRyaXZlciB0byBzdXBwb3J0IGV2ZXJ5dGhpbmcgdGhlCisgIGNoaXAgbWF5IG9mZmVyLCBpdCBzaG91bGQgYXQgbGVhc3Qgc3VwcG9ydCBhbGwgbGltaXRzIGFuZCBhbGFybXMuCisKKyogTGFzdCBidXQgbm90IGxlYXN0LCBwbGVhc2UgY2hlY2sgaWYgYSBkcml2ZXIgZm9yIHlvdXIgY2hpcCBhbHJlYWR5IGV4aXN0cworICBiZWZvcmUgc3RhcnRpbmcgdG8gd3JpdGUgYSBuZXcgZHJpdmVyLiBFc3BlY2lhbGx5IGZvciB0ZW1wZXJhdHVyZSBzZW5zb3JzLAorICBuZXcgY2hpcHMgYXJlIG9mdGVuIHZhcmlhbnRzIG9mIHByZXZpb3VzbHkgcmVsZWFzZWQgY2hpcHMuIEluIHNvbWUgY2FzZXMsCisgIGEgcHJlc3VtYWJseSBuZXcgY2hpcCBtYXkgc2ltcGx5IGhhdmUgYmVlbiByZWxhYmVsZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2phX0pQL0hPV1RPIGIvRG9jdW1lbnRhdGlvbi9qYV9KUC9IT1dUTwppbmRleCBiNjMzMDFhLi4wNTBkMzdmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2phX0pQL0hPV1RPCisrKyBiL0RvY3VtZW50YXRpb24vamFfSlAvSE9XVE8KQEAgLTExLDE0ICsxMSwxNCBAQAogZm9yay4gU28gaWYgeW91IGhhdmUgYW55IGNvbW1lbnRzIG9yIHVwZGF0ZXMgZm9yIHRoaXMgZmlsZSwgcGxlYXNlIHRyeQogdG8gdXBkYXRlIHRoZSBvcmlnaW5hbCBFbmdsaXNoIGZpbGUgZmlyc3QuCiAKLUxhc3QgVXBkYXRlZDogMjAwOC8xMC8yNAorTGFzdCBVcGRhdGVkOiAyMDExLzAzLzMxCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiDjgZPjgozjga/jgIEKLWxpbnV4LTIuNi4yOC9Eb2N1bWVudGF0aW9uL0hPV1RPCitsaW51eC0yLjYuMzgvRG9jdW1lbnRhdGlvbi9IT1dUTwog44Gu5ZKM6Kiz44Gn44GZ44CCCiAKIOe/u+ios+Wbo+S9k++8miBKRiDjg5fjg63jgrjjgqfjgq/jg4ggPCBodHRwOi8vd3d3LmxpbnV4Lm9yLmpwL0pGLyA+Ci3nv7voqLPml6XvvJogMjAwOC8xMC8yNAor57+76Kiz5pel77yaIDIwMTEvMy8yOAog57+76Kiz6ICF77yaIFRzdWdpa2F6dSBTaGliYXRhIDx0c2hpYmF0YSBhdCBhYiBkb3QganAgZG90IG5lYyBkb3QgY29tPgog5qCh5q2j6ICF77yaIOadvuWAieOBleOCkyA8bmJoLS1tYXRzIGF0IG5pZnR5IGRvdCBjb20+CiAgICAgICAgICDlsI/mnpcg6ZuF5YW444GV44KTIChNYXNhbm9yaSBLb2JheWFzaSkgPHphcDAzMjE2IGF0IG5pZnR5IGRvdCBuZSBkb3QganA+CkBAIC0yNTYsOCArMjU2LDggQEAKICAgLSDjg6HjgqTjg7Pjga4gMi42Lngg44Kr44O844ON44Or44OE44Oq44O8CiAgIC0gMi42LngueSAtc3RhYmxlIOOCq+ODvOODjeODq+ODhOODquODvAogICAtIDIuNi54IC1naXQg44Kr44O844ON44Or44OR44OD44OBCi0gIC0gMi42LnggLW1tIOOCq+ODvOODjeODq+ODkeODg+ODgQogICAtIOOCteODluOCt+OCueODhuODoOavjuOBruOCq+ODvOODjeODq+ODhOODquODvOOBqOODkeODg+ODgQorICAtIOe1seWQiOODhuOCueODiOOBruOBn+OCgeOBriAyLjYueCAtbmV4dCDjgqvjg7zjg43jg6vjg4Tjg6rjg7wKIAogMi42Lngg44Kr44O844ON44Or44OE44Oq44O8CiAtLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjY4LDkgKzI2OCw5IEBACiAKICAgLSDmlrDjgZfjgYTjgqvjg7zjg43jg6vjgYzjg6rjg6rjg7zjgrnjgZXjgozjgZ/nm7TlvozjgavjgIEy6YCx6ZaT44Gu54m55Yil5pyf6ZaT44GM6Kit44GR44KJ44KM44CBCiAgICAg44GT44Gu5pyf6ZaT5Lit44Gr44CB44Oh44Oz44OG44OK6YGU44GvIExpbnVzIOOBq+Wkp+OBjeOBquW3ruWIhuOCkumAgeOCi+OBk+OBqOOBjOOBp+OBjeOBvuOBmeOAggotICAgIOOBk+OBruOCiOOBhuOBquW3ruWIhuOBr+mAmuW4uCAtbW0g44Kr44O844ON44Or44Gr5pWw6YCx6ZaT5ZCr44G+44KM44Gm44GN44Gf44OR44OD44OB44Gn44GZ44CCCisgICAg44GT44Gu44KI44GG44Gq5beu5YiG44Gv6YCa5bi4IC1uZXh0IOOCq+ODvOODjeODq+OBq+aVsOmAsemWk+WQq+OBvuOCjOOBpuOBjeOBn+ODkeODg+ODgeOBp+OBmeOAggogICAgIOWkp+OBjeOBquWkieabtOOBryBnaXQo44Kr44O844ON44Or44Gu44K944O844K5566h55CG44OE44O844Or44CB6Kmz57Sw44GvCi0gICAgaHR0cDovL2dpdC5vci5jei8gIOWPgueFpykg44KS5L2/44Gj44Gm6YCB44KL44Gu44GM5aW944G+44GX44GE44KE44KK5pa544Gn44GZ44GM44CB44OR44ODCisgICAgaHR0cDovL2dpdC1zY20uY29tLyAg5Y+C54WnKSDjgpLkvb/jgaPjgabpgIHjgovjga7jgYzlpb3jgb7jgZfjgYTjgoTjgormlrnjgafjgZnjgYzjgIHjg5Hjg4MKICAgICDjg4Hjg5XjgqHjgqTjg6vjga7lvaLlvI/jga7jgb7jgb7pgIHjgovjga7jgafjgoLljYHliIbjgafjgZnjgIIKIAogICAtIDLpgLHplpPlvozjgIEtcmMxIOOCq+ODvOODjeODq+OBjOODquODquODvOOCueOBleOCjOOAgeOBk+OBruW+jOOBq+OBr+OCq+ODvOODjeODq+WFqOS9k+OBruWuieWumgpAQCAtMzMzLDg2ICszMzMsNDQgQEAKIOOCjOOBryAtcmMg44Kr44O844ON44Or44Go5q+U44G544Gm44CB44OR44OD44OB44GM5aSn5LiI5aSr44GL44Gp44GG44GL44KC56K66KqN44GX44Gq44GE44Gn6Ieq5YuV55qECiDjgavnlJ/miJDjgZXjgozjgovjga7jgafjgIHjgojjgorlrp/pqJPnmoTjgafjgZnjgIIKIAotMi42LnggLW1tIOOCq+ODvOODjeODq+ODkeODg+ODgQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUFuZHJldyBNb3J0b24g44Gr44KI44Gj44Gm44Oq44Oq44O844K544GV44KM44KL5a6f6aiT55qE44Gq44Kr44O844ON44Or44OR44OD44OB576k44Gn44GZ44CCCi1BbmRyZXcg44Gv5YCL5Yil44Gu44K144OW44K344K544OG44Og44Kr44O844ON44Or44OE44Oq44O844Go44OR44OD44OB44KS5YWo44Gm6ZuG44KB44Gm44GN44GmCi1saW51eC1rZXJuZWwg44Oh44O844Oq44Oz44Kw44Oq44K544OI44Gn5Y+O6ZuG44GV44KM44Gf5aSa5pWw44Gu44OR44OD44OB44Go5ZCM5pmC44Gr5LiA44Gk44Gr44G+Ci3jgajjgoHjgb7jgZnjgIIKLeOBk+OBruODhOODquODvOOBr+aWsOapn+iDveOBqOODkeODg+ODgeOBjOaknOiovOOBleOCjOOCi+WgtOOBqOOBquOCiuOBvuOBmeOAguOBguOCi+acn+mWk+OBrumWk+ODkeODg+ODgQot44GMIC1tbSDjgavlhaXjgaPjgabkvqHlgKTjgpLoqLzmmI7jgZXjgozjgZ/jgonjgIFBbmRyZXcg44KE44K144OW44K344K544OG44Og44Oh44Oz44OG44OK44GM44CBCi3jg6HjgqTjg7Pjg6njgqTjg7PjgbjlhaXjgozjgovjgojjgYbjgasgTGludXMg44Gr44OX44OD44K344Ol44GX44G+44GZ44CCCi0KLeODoeOCpOODs+OCq+ODvOODjeODq+ODhOODquODvOOBq+WQq+OCgeOCi+OBn+OCgeOBqyBMaW51cyDjgavpgIHjgovliY3jgavjgIHjgZnjgbnjgabjga7mlrDjgZfjgYTjg5Hjg4MKLeODgeOBjCAtbW0g44OE44Oq44O844Gn44OG44K544OI44GV44KM44KL44GT44Go44GM5by344GP5o6o5aWo44GV44KM44Gm44GE44G+44GZ44CC44Oe44O844K444Km44Kj44OzCi3jg4njgqbjgYzplovjgY/liY3jgasgLW1tIOODhOODquODvOOBq+ePvuOCjOOBquOBi+OBo+OBn+ODkeODg+ODgeOBr+ODoeOCpOODs+ODqeOCpOODs+OBq+ODnuODvOOCuOOBlQot44KM44KL44GT44Go44Gv5Zuw6Zuj44Gr44Gq44KK44G+44GZ44CCCi0KLeOBk+OCjOOCieOBruOCq+ODvOODjeODq+OBr+WuieWumuOBl+OBpuWLleS9nOOBmeOBueOBjeOCt+OCueODhuODoOOBqOOBl+OBpuS9v+OBhuOBruOBq+OBr+mBqeWIh+OBp+OBr+OBggot44KK44G+44Gb44KT44GX44CB44Kr44O844ON44Or44OW44Op44Oz44OB44Gu5Lit44Gn44KC44KC44Gj44Go44KC5YuV5L2c44Gr44Oq44K544Kv44GM6auY44GE44KC44Gu44Gn44GZ44CCCi0KLeOCguOBl+OBguOBquOBn+OBjOOAgeOCq+ODvOODjeODq+mWi+eZuuODl+ODreOCu+OCueOBruaUr+aPtOOCkuOBl+OBn+OBhOOBqOaAneOBo+OBpuOBhOOCi+OBruOBp+OBguOCjOOBsOOAgQot44Gp44GG44Ge44GT44KM44KJ44Gu44Kr44O844ON44Or44Oq44Oq44O844K544KS44OG44K544OI44Gr5L2/44Gj44Gm44G/44Gm44CB44Gd44GX44Gm44KC44GX5ZWP6aGM44GM44GCCi3jgozjgbDjgIHjgb7jgZ/jgoLjgZflhajjgabjgYzmraPjgZfjgY/li5XkvZzjgZfjgZ/jgajjgZfjgabjgoLjgIFsaW51eC1rZXJuZWwg44Oh44O844Oq44Oz44Kw44OqCi3jgrnjg4jjgavjg5XjgqPjg7zjg4njg5Djg4Pjgq/jgpLmj5DkvpvjgZfjgabjgY/jgaDjgZXjgYTjgIIKLQot44GZ44G544Gm44Gu5LuW44Gu5a6f6aiT55qE44OR44OD44OB44Gr5Yqg44GI44Gm44CB44GT44KM44KJ44Gu44Kr44O844ON44Or44Gv6YCa5bi444Oq44Oq44O844K55pmC54K544GnCi3jg6HjgqTjg7Pjg6njgqTjg7Pjga4gLWdpdCDjgqvjg7zjg43jg6vjgavlkKvjgb7jgozjgovlhajjgabjga7lpInmm7TjgoLlkKvjgpPjgafjgYTjgb7jgZnjgIIKLQotLW1tIOOCq+ODvOODjeODq+OBr+axuuOBvuOBo+OBn+OCueOCseOCuOODpeODvOODq+OBp+OBr+ODquODquODvOOCueOBleOCjOOBvuOBm+OCk+OAgeOBl+OBi+OBl+mAmuW4uOW5vgot44Gk44GL44GuIC1tbSDjgqvjg7zjg43jg6sgKDEg44GL44KJIDMg44GM5pmu6YCa77yJ44GM5ZCELXJjIOOCq+ODvOODjeODq+OBrumWk+OBq+ODquODquODvOOCueOBlQot44KM44G+44GZ44CCCi0KIOOCteODluOCt+OCueODhuODoOavjuOBruOCq+ODvOODjeODq+ODhOODquODvOOBqOODkeODg+ODgQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi3jgqvjg7zjg43jg6vjga7mp5jjgIXjgarpoJjln5/jgafkvZXjgYzotbfjgY3jgabjgYTjgovjgYvjgpLopovjgonjgozjgovjgojjgYbjgavjgZnjgovjgZ/jgoHjgIHlpJrjgY/jga4KLeOCq+ODvOODjeODq+OCteODluOCt+OCueODhuODoOmWi+eZuuiAheOBr+W9vOOCieOBrumWi+eZuuODhOODquODvOOCkuWFrOmWi+OBl+OBpuOBhOOBvuOBmeOAguOBk+OCjOOCieOBrgot44OE44Oq44O844Gv6Kqs5piO44GX44Gf44KI44GG44GrIC1tbSDjgqvjg7zjg43jg6vjg6rjg6rjg7zjgrnjgavlhaXjgozovrzjgb7jgozjgb7jgZnjgIIKK+OBneOCjOOBnuOCjOOBruOCq+ODvOODjeODq+OCteODluOCt+OCueODhuODoOOBruODoeODs+ODhuODiumBlOOBryAtLS0g44Gd44GX44Gm5aSa44GP44Gu44Kr44O844ON44OrCivjgrXjg5bjgrfjgrnjg4bjg6Djga7plovnmbrogIXpgZTjgoIgLS0tIOWQhOiHquOBruacgOaWsOOBrumWi+eZuueKtuazgeOCkuOCveODvOOCueODquODneOCuOODiOODquOBqwor5YWs6ZaL44GX44Gm44GE44G+44GZ44CC44Gd44Gu44Gf44KB44CB6Ieq5YiG44Go44Gv55Ww44Gq44KL6aCY5Z+f44Gu44Kr44O844ON44Or44Gn5L2V44GM6LW344GN44Gm44GE44KLCivjgYvjgpLku5bjga7kurrjgYzopovjgonjgozjgovjgojjgYbjgavjgarjgaPjgabjgYTjgb7jgZnjgILplovnmbrjgYzml6njgY/pgLLjgpPjgafjgYTjgovpoJjln5/jgafjga/jgIEKK+mWi+eZuuiAheOBr+iHqui6q+OBruaKleeov+OBjOOBqeOBruOCteODluOCt+OCueODhuODoOOCq+ODvOODjeODq+ODhOODquODvOOCkuWFg+OBq+OBl+OBpuOBhOOCi+OBi+izquWVjwor44GV44KM44KL44Gu44Gn44CB44Gd44Gu5oqV56i/44Go44GZ44Gn44Gr6YCy6KGM5Lit44Gu5LuW44Gu5L2c5qWt44Go44Gu6KGd56qB44GM6YG/44GR44KJ44KM44G+44GZ44CCCiAKLeS7peS4i+OBr+OBleOBvuOBluOBvuOBquOCq+ODvOODjeODq+ODhOODquODvOOBruS4reOBruOBhOOBj+OBpOOBi+OBruODquOCueODiC0KK+Wkp+mDqOWIhuOBruOBk+OCjOOCieOBruODquODneOCuOODiOODquOBryBnaXQg44OE44Oq44O844Gn44GZ44CC44GX44GL44GX44Gd44Gu5LuW44GuIFNDTSDjgoQKK3F1aWx0IOOCt+ODquODvOOCuuOBqOOBl+OBpuWFrOmWi+OBleOCjOOBpuOBhOOCi+ODkeODg+ODgeOCreODpeODvOOCguS9v+OCj+OCjOOBpuOBhOOBvuOBmeOAguOBk+OCjOOCiQor44Gu44K144OW44K344K544OG44Og44Oq44Od44K444OI44Oq44Gu44Ki44OJ44Os44K544GvIE1BSU5UQUlORVJTIOODleOCoeOCpOODq+OBq+ODquOCueODiOOBleOCjAor44Gm44GE44G+44GZ44CC44GT44KM44KJ44Gu5aSa44GP44GvIGh0dHA6Ly9naXQua2VybmVsLm9yZy8g44Gn5Y+C54Wn44GZ44KL44GT44Go44GM44Gn44GN44G+CivjgZnjgIIKIAotICBnaXQg44OE44Oq44O8LQotICAgIC0gS2J1aWxkIOOBrumWi+eZuuODhOODquODvOOAgVNhbSBSYXZuYm9yZyA8c2FtQHJhdm5ib3JnLm9yZz4KLQlnaXQua2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3NhbS9rYnVpbGQuZ2l0Civmj5DmoYjjgZXjgozjgZ/jg5Hjg4Pjg4HjgYzjgZPjga7jgojjgYbjgarjgrXjg5bjgrfjgrnjg4bjg6Djg4Tjg6rjg7zjgavjgrPjg5/jg4Pjg4jjgZXjgozjgovliY3jgavjgIHjg6Hjg7wKK+ODquODs+OCsOODquOCueODiOOBp+S6i+WJjeOBq+ODrOODk+ODpeODvOOBq+OBi+OBkeOCieOCjOOBvuOBme+8iOS7peS4i+OBruWvvuW/nOOBmeOCi+OCu+OCr+OCt+ODp+ODs+OCkgor5Y+C54Wn77yJ44CC44GE44GP44Gk44GL44Gu44Kr44O844ON44Or44K144OW44K344K544OG44Og44Gn44Gv44CB44GT44Gu44Os44OT44Ol44O844GvIHBhdGNod29yawor44Go44GE44GG44OE44O844Or44Gr44KI44Gj44Gm6L+96Leh44GV44KM44G+44GZ44CCUGF0Y2h3b3JrIOOBryB3ZWIg44Kk44Oz44K/44O844OV44Kn44Kk44K544GrCivjgojjgaPjgabjg5Hjg4Pjg4HmipXnqL/jga7ooajnpLrjgIHjg5Hjg4Pjg4Hjgbjjga7jgrPjg6Hjg7Pjg4jku5jjgZHjgoTmlLnoqILjgarjganjgYzjgafjgY3jgIHjgZ3jgZfjgaYKK+ODoeODs+ODhuODiuOBr+ODkeODg+ODgeOBq+WvvuOBl+OBpuOAgeODrOODk+ODpeODvOS4reOAgeWPl+S7mOa4iOOBv+OAgeaLkuWQpuOBqOOBhOOBhuOCiOOBhuOBquODnuODvOOCrwor44KS44Gk44GR44KL44GT44Go44GM44Gn44GN44G+44GZ44CC5aSn6YOo5YiG44Gu44GT44KM44KJ44GuIHBhdGNod29yayDjga7jgrXjgqTjg4jjga8KK2h0dHA6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy8g44Gn44Oq44K544OI44GV44KM44Gm44GE44G+44GZ44CCCiAKLSAgICAtIEFDUEkg44Gu6ZaL55m644OE44Oq44O844CBIExlbiBCcm93biA8bGVuLmJyb3duQGludGVsLmNvbT4KLQlnaXQua2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2xlbmIvbGludXgtYWNwaS0yLjYuZ2l0CivntbHlkIjjg4bjgrnjg4jjga7jgZ/jgoHjga4gMi42LnggLW5leHQg44Kr44O844ON44Or44OE44Oq44O8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgIC0gQmxvY2sg44Gu6ZaL55m644OE44Oq44O844CBSmVucyBBeGJvZSA8YXhib2VAc3VzZS5kZT4KLQlnaXQua2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2F4Ym9lL2xpbnV4LTIuNi1ibG9jay5naXQKK+OCteODluOCt+OCueODhuODoOODhOODquODvOOBruabtOaWsOWGheWuueOBjOODoeOCpOODs+ODqeOCpOODs+OBriAyLjYueCDjg4Tjg6rjg7zjgavjg57jg7zjgrjjgZXjgowKK+OCi+WJjeOBq+OAgeOBneOCjOOCieOBr+e1seWQiOODhuOCueODiOOBleOCjOOCi+W/heimgeOBjOOBguOCiuOBvuOBmeOAguOBk+OBruebrueahOOBruOBn+OCgeOAgeWun+izqueahAor44Gr5YWo44K144OW44K344K544OG44Og44OE44Oq44O844GL44KJ44G744G85q+O5pel44OX44Or44GV44KM44Gm44Gn44GN44KL54m55Yil44Gq44OG44K544OI55So44Gu44OqCivjg53jgrjjg4jjg6rjgYzlrZjlnKjjgZfjgb7jgZktCisgICAgICAgaHR0cDovL2dpdC5rZXJuZWwub3JnLz9wPWxpbnV4L2tlcm5lbC9naXQvc2ZyL2xpbnV4LW5leHQuZ2l0CisgICAgICAgaHR0cDovL2xpbnV4LmYtc2VpZGVsLmRlL2xpbnV4LW5leHQvcG13aWtpLwogCi0gICAgLSBEUk0g44Gu6ZaL55m644OE44Oq44O844CBRGF2ZSBBaXJsaWUgPGFpcmxpZWRAbGludXguaWU+Ci0JZ2l0Lmtlcm5lbC5vcmc6L3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9haXJsaWVkL2RybS0yLjYuZ2l0Ci0KLSAgICAtIGlhNjQg44Gu6ZaL55m644OE44Oq44O844CBVG9ueSBMdWNrIDx0b255Lmx1Y2tAaW50ZWwuY29tPgotCWdpdC5rZXJuZWwub3JnOi9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYWVnbC9saW51eC0yLjYuZ2l0Ci0KLSAgICAtIGluZmluaWJhbmQsIFJvbGFuZCBEcmVpZXIgPHJvbGFuZGRAY2lzY28uY29tPgotCWdpdC5rZXJuZWwub3JnOi9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvcm9sYW5kL2luZmluaWJhbmQuZ2l0Ci0KLSAgICAtIGxpYmF0YSwgSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcG9ib3guY29tPgotCWdpdC5rZXJuZWwub3JnOi9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvamdhcnppay9saWJhdGEtZGV2LmdpdAotCi0gICAgLSDjg43jg4Pjg4jjg6/jg7zjgq/jg4njg6njgqTjg5AsIEplZmYgR2FyemlrIDxqZ2FyemlrQHBvYm94LmNvbT4KLQlnaXQua2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2pnYXJ6aWsvbmV0ZGV2LTIuNi5naXQKLQotICAgIC0gcGNtY2lhLCBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAZG9taW5pa2Jyb2Rvd3NraS5uZXQ+Ci0JZ2l0Lmtlcm5lbC5vcmc6L3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9icm9kby9wY21jaWEtMi42LmdpdAotCi0gICAgLSBTQ1NJLCBKYW1lcyBCb3R0b21sZXkgPEphbWVzLkJvdHRvbWxleUBoYW5zZW5wYXJ0bmVyc2hpcC5jb20+Ci0JZ2l0Lmtlcm5lbC5vcmc6L3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9qZWpiL3Njc2ktbWlzYy0yLjYuZ2l0Ci0KLSAgICAtIHg4NiwgSW5nbyBNb2xuYXIgPG1pbmdvQGVsdGUuaHU+Ci0JZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3g4Ni9saW51eC0yLjYteDg2LmdpdAotCi0gIHF1aWx0IOODhOODquODvC0KLSAgICAtIFVTQiwg44OJ44Op44Kk44OQ44Kz44Ki44GoIEkyQywgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KLQlrZXJuZWwub3JnL3B1Yi9saW51eC9rZXJuZWwvcGVvcGxlL2dyZWdraC9ncmVna2gtMi42LwotCi0gIOOBneOBruS7luOBruOCq+ODvOODjeODq+ODhOODquODvOOBryBodHRwOi8vZ2l0Lmtlcm5lbC5vcmcvIOOBqCBNQUlOVEFJTkVSUyDjg5XjgqEKLSAg44Kk44Or44Gr5LiA6Kan6KGo44GM44GC44KK44G+44GZ44CCCivjgZPjga7jgoTjgormlrnjgavjgojjgaPjgabjgIEtbmV4dCDjgqvjg7zjg43jg6vjga/mrKHjga7jg57jg7zjgrjmqZ/kvJrjgafjganjgpPjgarjgoLjga7jgYzjg6HjgqTjg7MKK+ODqeOCpOODs+OCq+ODvOODjeODq+OBq+ODnuODvOOCuOOBleOCjOOCi+OBi+OAgeOBiuOBiuOBvuOBi+OBquOBruWxleacm+OCkuaPkOS+m+OBl+OBvuOBmeOAgi1uZXh0IAor44Kr44O844ON44Or44Gu5a6f6KGM44OG44K544OI44KS6KGM44GG5YaS6Zm65aW944GN44Gq44OG44K544K/44O844Gv5aSn44GE44Gr5q2T6L+O44GV44KM44G+44GZCiAKIOODkOOCsOODrOODneODvOODiAogLS0tLS0tLS0tLS0tLQpAQCAtNjczLDEwICs2MzEsOSBAQAog44GY44Go44GT44KN44GL44KJ44K544K/44O844OI44GX44Gf44Gu44Gn44GZ44GL44KJ44CCCiAKIFBhb2xvIENpYXJyb2NjaGkg44Gr5oSf6Kyd44CB5b2844Gv5b2844Gu5pu444GE44GfICJEZXZlbG9wbWVudCBQcm9jZXNzIgotKGh0dHA6Ly9saW51eC50YXIuYnovYXJ0aWNsZXMvMi42LWRldmVsb3BtZW50X3Byb2Nlc3Mp44K744Kv44K344OnCi3jg7PjgpLjgZPjga7jg4bjgq3jgrnjg4jjga7ljp/lnovjgavjgZnjgovjgZPjgajjgpLoqLHlj6/jgZfjgabjgY/jgozjgb7jgZfjgZ/jgIIKLVJ1bmR5IER1bmxhcCDjgaggR2Vycml0IEh1aXplbmdhIOOBr+ODoeODvOODquODs+OCsOODquOCueODiOOBp+OChOOCi+OBueOBjeOBk+OBqOOBqOOChOOBowot44Gm44Gv44GE44GR44Gq44GE44GT44Go44Gu44Oq44K544OI44KS5o+Q5L6b44GX44Gm44GP44KM44G+44GX44Gf44CCCisoaHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvOTQzODYvKSDjgrvjgq/jgrfjg6fjg7PjgpLjgZPjga7jg4bjgq3jgrnjg4jjga7ljp/lnovjgavjgZnjgosKK+OBk+OBqOOCkuioseWPr+OBl+OBpuOBj+OCjOOBvuOBl+OBn+OAglJ1bmR5IER1bmxhcCDjgaggR2Vycml0IEh1aXplbmdhIOOBr+ODoeODvOODquODs+OCsAor44Oq44K544OI44Gn44KE44KL44G544GN44GT44Go44Go44KE44Gj44Gm44Gv44GE44GR44Gq44GE44GT44Go44Gu44Oq44K544OI44KS5o+Q5L6b44GX44Gm44GP44KM44G+44GX44Gf44CCCiDku6XkuIvjga7kurrjgIXjga7jg6zjg5Pjg6Xjg7zjgIHjgrPjg6Hjg7Pjg4jjgIHosqLnjK7jgavmhJ/orJ3jgIIKIFBhdCBNb2NoZWwsIEhhbm5hIExpbmRlciwgUmFuZHkgRHVubGFwLCBLYXkgU2lldmVycywKIFZvanRlY2ggUGF2bGlrLCBKYW4gS2FyYSwgSm9zaCBCb3llciwgS2VlcyBDb29rLCBBbmRyZXcgTW9ydG9uLCBBbmRpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IGNjODVhOTIuLmM2MDNlZjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC0yNDUsNyArMjQ1LDcgQEAKIAogCWFjcGlfc2xlZXA9CVtIVyxBQ1BJXSBTbGVlcCBvcHRpb25zCiAJCQlGb3JtYXQ6IHsgczNfYmlvcywgczNfbW9kZSwgczNfYmVlcCwgczRfbm9od3NpZywKLQkJCQkgIG9sZF9vcmRlcmluZywgczRfbm9udnMsIHNjaV9mb3JjZV9lbmFibGUgfQorCQkJCSAgb2xkX29yZGVyaW5nLCBub252cywgc2NpX2ZvcmNlX2VuYWJsZSB9CiAJCQlTZWUgRG9jdW1lbnRhdGlvbi9wb3dlci92aWRlby50eHQgZm9yIGluZm9ybWF0aW9uIG9uCiAJCQlzM19iaW9zIGFuZCBzM19tb2RlLgogCQkJczNfYmVlcCBpcyBmb3IgZGVidWdnaW5nOyBpdCBtYWtlcyB0aGUgUEMncyBzcGVha2VyIGJlZXAKQEAgLTE2NjQsNiArMTY2NCwxMCBAQAogCQkJbm9leGVjPW9uOiBlbmFibGUgbm9uLWV4ZWN1dGFibGUgbWFwcGluZ3MgKGRlZmF1bHQpCiAJCQlub2V4ZWM9b2ZmOiBkaXNhYmxlIG5vbi1leGVjdXRhYmxlIG1hcHBpbmdzCiAKKwlub3NtZXAJCVtYODZdCisJCQlEaXNhYmxlIFNNRVAgKFN1cGVydmlzb3IgTW9kZSBFeGVjdXRpb24gUHJvdGVjdGlvbikKKwkJCWV2ZW4gaWYgaXQgaXMgc3VwcG9ydGVkIGJ5IHByb2Nlc3Nvci4KKwogCW5vZXhlYzMyCVtYODYtNjRdCiAJCQlUaGlzIGFmZmVjdHMgb25seSAzMi1iaXQgZXhlY3V0YWJsZXMuCiAJCQlub2V4ZWMzMj1vbjogZW5hYmxlIG5vbi1leGVjdXRhYmxlIG1hcHBpbmdzIChkZWZhdWx0KQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tZC50eHQgYi9Eb2N1bWVudGF0aW9uL21kLnR4dAppbmRleCBhODFjN2I0Li4yMzY2YjFjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21kLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL21kLnR4dApAQCAtNTUyLDYgKzU1MiwxNiBAQAogICAgICB3aXRoaW4gdGhlIGFycmF5IHdoZXJlIElPIHdpbGwgYmUgYmxvY2tlZC4gIFRoaXMgaXMgY3VycmVudGx5CiAgICAgIG9ubHkgc3VwcG9ydGVkIGZvciByYWlkNC81LzYuCiAKKyAgIHN5bmNfbWluCisgICBzeW5jX21heAorICAgICBUaGUgdHdvIHZhbHVlcywgZ2l2ZW4gYXMgbnVtYmVycyBvZiBzZWN0b3JzLCBpbmRpY2F0ZSBhIHJhbmdlCisgICAgIHdpdGhpbmcgdGhlIGFycmF5IHdoZXJlICdjaGVjaycvJ3JlcGFpcicgd2lsbCBvcGVyYXRlLiBNdXN0IGJlCisgICAgIGEgbXVsdGlwbGUgb2YgY2h1bmtfc2l6ZS4gV2hlbiBpdCByZWFjaGVzICJzeW5jX21heCIgaXQgd2lsbAorICAgICBwYXVzZSwgcmF0aGVyIHRoYW4gY29tcGxldGUuCisgICAgIFlvdSBjYW4gdXNlICdzZWxlY3QnIG9yICdwb2xsJyBvbiAic3luY19jb21wbGV0ZWQiIHRvIHdhaXQgZm9yCisgICAgIHRoYXQgbnVtYmVyIHRvIHJlYWNoIHN5bmNfbWF4LiAgVGhlbiB5b3UgY2FuIGVpdGhlciBpbmNyZWFzZQorICAgICAic3luY19tYXgiLCBvciBjYW4gd3JpdGUgJ2lkbGUnIHRvICJzeW5jX2FjdGlvbiIuCisKIAogRWFjaCBhY3RpdmUgbWQgZGV2aWNlIG1heSBhbHNvIGhhdmUgYXR0cmlidXRlcyBzcGVjaWZpYyB0byB0aGUKIHBlcnNvbmFsaXR5IG1vZHVsZSB0aGF0IG1hbmFnZXMgaXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYmF0bWFuLWFkdi50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYmF0bWFuLWFkdi50eHQKaW5kZXggZWU0OTZlYi4uODhkNGFmYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JhdG1hbi1hZHYudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9iYXRtYW4tYWR2LnR4dApAQCAtMSw0ICsxLDQgQEAKLVtzdGF0ZTogMjctMDEtMjAxMV0KK1tzdGF0ZTogMTctMDQtMjAxMV0KIAogQkFUTUFOLUFEVgogLS0tLS0tLS0tLQpAQCAtMTksNiArMTksNyBAQAogbmV0d29yayBkcml2ZXIsIGFuZCBjYW4gYmUgdXNlZCBvbiB3aWZpIGFzIHdlbGwgYXMgZXRoZXJuZXQgIGxhbiwKIHZwbiwgIGV0YyAuLi4gKGFueXRoaW5nIHdpdGggZXRoZXJuZXQtc3R5bGUgbGF5ZXIgMikuCiAKKwogQ09ORklHVVJBVElPTgogLS0tLS0tLS0tLS0tLQogCkBAIC0xNjAsMTMgKzE2MSwxMyBAQAogLT4gIlRRIG1hYyAgdmFsdWUiICAtICBzcmMgbWFjJ3MgbGluayBxdWFsaXR5IHRvd2FyZHMgbWFjIGFkZHJlc3MKICAgICAgICAgICAgICAgICAgICAgICAgb2YgYSBuZWlnaGJvciBvcmlnaW5hdG9yJ3MgaW50ZXJmYWNlIHdoaWNoCiAgICAgICAgICAgICAgICAgICAgICAgIGlzIGJlaW5nIHVzZWQgZm9yIHJvdXRpbmcKLS0+ICJITkEgbWFjIiAtIEhOQSBhbm5vdW5jZWQgYnkgc291cmNlIG1hYworLT4gIlRUIG1hYyIgLSBUVCBhbm5vdW5jZWQgYnkgc291cmNlIG1hYwogLT4gIlBSSU1BUlkiIC0gdGhpcyAgaXMgYSBwcmltYXJ5IGludGVyZmFjZQogLT4gIlNFQyBtYWMiIC0gc2Vjb25kYXJ5IG1hYyBhZGRyZXNzIG9mIHNvdXJjZQogICAgICAgICAgICAgICAgKHJlcXVpcmVzIHByZWNlZGluZyBQUklNQVJZKQogCiBUaGUgVFEgdmFsdWUgaGFzIGEgcmFuZ2UgZnJvbSA0IHRvIDI1NSB3aXRoIDI1NSBiZWluZyAgdGhlICBiZXN0LgotVGhlIEhOQSBlbnRyaWVzIGFyZSBzaG93aW5nIHdoaWNoIGhvc3RzIGFyZSBjb25uZWN0ZWQgdG8gdGhlIG1lc2gKK1RoZSBUVCBlbnRyaWVzIGFyZSBzaG93aW5nIHdoaWNoIGhvc3RzIGFyZSBjb25uZWN0ZWQgdG8gdGhlIG1lc2gKIHZpYSBiYXQwIG9yIGJlaW5nIGJyaWRnZWQgaW50byB0aGUgbWVzaCBuZXR3b3JrLiAgVGhlIFBSSU1BUlkvU0VDCiB2YWx1ZXMgYXJlIG9ubHkgYXBwbGllZCBvbiBwcmltYXJ5IGludGVyZmFjZXMKIApAQCAtMTk5LDcgKzIwMCw3IEBACiAKIDAgLSBBbGwgIGRlYnVnICBvdXRwdXQgIGRpc2FibGVkCiAxIC0gRW5hYmxlIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gcm91dGluZyAvIGZsb29kaW5nIC8gYnJvYWRjYXN0aW5nCi0yIC0gRW5hYmxlIHJvdXRlIG9yIGhuYSBhZGRlZCAvIGNoYW5nZWQgLyBkZWxldGVkCisyIC0gRW5hYmxlIHJvdXRlIG9yIHR0IGVudHJ5IGFkZGVkIC8gY2hhbmdlZCAvIGRlbGV0ZWQKIDMgLSBFbmFibGUgYWxsIG1lc3NhZ2VzCiAKIFRoZSBkZWJ1ZyBvdXRwdXQgY2FuIGJlIGNoYW5nZWQgYXQgcnVudGltZSAgdXNpbmcgIHRoZSAgZmlsZQpAQCAtMjA3LDcgKzIwOCw3IEBACiAKICMgZWNobyAyID4gL3N5cy9jbGFzcy9uZXQvYmF0MC9tZXNoL2xvZ19sZXZlbAogCi13aWxsIGVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBmb3Igd2hlbiByb3V0ZXMgb3IgSE5BcyBjaGFuZ2UuCit3aWxsIGVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBmb3Igd2hlbiByb3V0ZXMgb3IgVFRzIGNoYW5nZS4KIAogCiBCQVRDVEwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dAppbmRleCBlMjcyMDJiYi4uMWY0NWJkOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dApAQCAtMSw3ICsxLDcgQEAKIAogCQlMaW51eCBFdGhlcm5ldCBCb25kaW5nIERyaXZlciBIT1dUTwogCi0JCUxhdGVzdCB1cGRhdGU6IDIzIFNlcHRlbWJlciAyMDA5CisJCUxhdGVzdCB1cGRhdGU6IDI3IEFwcmlsIDIwMTEKIAogSW5pdGlhbCByZWxlYXNlIDogVGhvbWFzIERhdmlzIDx0YWRhdmlzIGF0IGxibC5nb3Y+CiBDb3JyZWN0aW9ucywgSEEgZXh0ZW5zaW9ucyA6IDIwMDAvMTAvMDMtMTUgOgpAQCAtNTg1LDI1ICs1ODUsMjMgQEAKIAkJY2hvc2VuLgogCiBudW1fZ3JhdF9hcnAKLQotCVNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGdyYXR1aXRvdXMgQVJQcyB0byBiZSBpc3N1ZWQgYWZ0ZXIgYQotCWZhaWxvdmVyIGV2ZW50LiAgT25lIGdyYXR1aXRvdXMgQVJQIGlzIGlzc3VlZCBpbW1lZGlhdGVseSBhZnRlcgotCXRoZSBmYWlsb3Zlciwgc3Vic2VxdWVudCBBUlBzIGFyZSBzZW50IGF0IGEgcmF0ZSBvZiBvbmUgcGVyIGxpbmsKLQltb25pdG9yIGludGVydmFsIChhcnBfaW50ZXJ2YWwgb3IgbWlpbW9uLCB3aGljaGV2ZXIgaXMgYWN0aXZlKS4KLQotCVRoZSB2YWxpZCByYW5nZSBpcyAwIC0gMjU1OyB0aGUgZGVmYXVsdCB2YWx1ZSBpcyAxLiAgVGhpcyBvcHRpb24KLQlhZmZlY3RzIG9ubHkgdGhlIGFjdGl2ZS1iYWNrdXAgbW9kZS4gIFRoaXMgb3B0aW9uIHdhcyBhZGRlZCBmb3IKLQlib25kaW5nIHZlcnNpb24gMy4zLjAuCi0KIG51bV91bnNvbF9uYQogCi0JU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdW5zb2xpY2l0ZWQgSVB2NiBOZWlnaGJvciBBZHZlcnRpc2VtZW50cwotCXRvIGJlIGlzc3VlZCBhZnRlciBhIGZhaWxvdmVyIGV2ZW50LiAgT25lIHVuc29saWNpdGVkIE5BIGlzIGlzc3VlZAotCWltbWVkaWF0ZWx5IGFmdGVyIHRoZSBmYWlsb3Zlci4KKwlTcGVjaWZ5IHRoZSBudW1iZXIgb2YgcGVlciBub3RpZmljYXRpb25zIChncmF0dWl0b3VzIEFSUHMgYW5kCisJdW5zb2xpY2l0ZWQgSVB2NiBOZWlnaGJvciBBZHZlcnRpc2VtZW50cykgdG8gYmUgaXNzdWVkIGFmdGVyIGEKKwlmYWlsb3ZlciBldmVudC4gIEFzIHNvb24gYXMgdGhlIGxpbmsgaXMgdXAgb24gdGhlIG5ldyBzbGF2ZQorCShwb3NzaWJseSBpbW1lZGlhdGVseSkgYSBwZWVyIG5vdGlmaWNhdGlvbiBpcyBzZW50IG9uIHRoZQorCWJvbmRpbmcgZGV2aWNlIGFuZCBlYWNoIFZMQU4gc3ViLWRldmljZS4gIFRoaXMgaXMgcmVwZWF0ZWQgYXQKKwllYWNoIGxpbmsgbW9uaXRvciBpbnRlcnZhbCAoYXJwX2ludGVydmFsIG9yIG1paW1vbiwgd2hpY2hldmVyCisJaXMgYWN0aXZlKSBpZiB0aGUgbnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiAxLgogCi0JVGhlIHZhbGlkIHJhbmdlIGlzIDAgLSAyNTU7IHRoZSBkZWZhdWx0IHZhbHVlIGlzIDEuICBUaGlzIG9wdGlvbgotCWFmZmVjdHMgb25seSB0aGUgYWN0aXZlLWJhY2t1cCBtb2RlLiAgVGhpcyBvcHRpb24gd2FzIGFkZGVkIGZvcgotCWJvbmRpbmcgdmVyc2lvbiAzLjQuMC4KKwlUaGUgdmFsaWQgcmFuZ2UgaXMgMCAtIDI1NTsgdGhlIGRlZmF1bHQgdmFsdWUgaXMgMS4gIFRoZXNlIG9wdGlvbnMKKwlhZmZlY3Qgb25seSB0aGUgYWN0aXZlLWJhY2t1cCBtb2RlLiAgVGhlc2Ugb3B0aW9ucyB3ZXJlIGFkZGVkIGZvcgorCWJvbmRpbmcgdmVyc2lvbnMgMy4zLjAgYW5kIDMuNC4wIHJlc3BlY3RpdmVseS4KKworCUZyb20gTGludXggMi42LjQwIGFuZCBib25kaW5nIHZlcnNpb24gMy43LjEsIHRoZXNlIG5vdGlmaWNhdGlvbnMKKwlhcmUgZ2VuZXJhdGVkIGJ5IHRoZSBpcHY0IGFuZCBpcHY2IGNvZGUgYW5kIHRoZSBudW1iZXJzIG9mCisJcmVwZXRpdGlvbnMgY2Fubm90IGJlIHNldCBpbmRlcGVuZGVudGx5LgogCiBwcmltYXJ5CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pZ2IudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lnYi50eHQKaW5kZXggOTg5NTNjMC4uOWEyYTAzNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lnYi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lnYi50eHQKQEAgLTkzLDYgKzkzLDE5IEBACiAgIFJFUVVJUkVNRU5UUzogTVNJLVggc3VwcG9ydCBpcyByZXF1aXJlZCBmb3IgTXVsdGlxdWV1ZS4gSWYgTVNJLVggaXMgbm90CiAgIGZvdW5kLCB0aGUgc3lzdGVtIHdpbGwgZmFsbGJhY2sgdG8gTVNJIG9yIHRvIExlZ2FjeSBpbnRlcnJ1cHRzLgogCisgIE1BQyBhbmQgVkxBTiBhbnRpLXNwb29maW5nIGZlYXR1cmUKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBXaGVuIGEgbWFsaWNpb3VzIGRyaXZlciBhdHRlbXB0cyB0byBzZW5kIGEgc3Bvb2ZlZCBwYWNrZXQsIGl0IGlzIGRyb3BwZWQgYnkKKyAgdGhlIGhhcmR3YXJlIGFuZCBub3QgdHJhbnNtaXR0ZWQuICBBbiBpbnRlcnJ1cHQgaXMgc2VudCB0byB0aGUgUEYgZHJpdmVyCisgIG5vdGlmeWluZyBpdCBvZiB0aGUgc3Bvb2YgYXR0ZW1wdC4KKworICBXaGVuIGEgc3Bvb2ZlZCBwYWNrZXQgaXMgZGV0ZWN0ZWQgdGhlIFBGIGRyaXZlciB3aWxsIHNlbmQgdGhlIGZvbGxvd2luZworICBtZXNzYWdlIHRvIHRoZSBzeXN0ZW0gbG9nIChkaXNwbGF5ZWQgYnkgIHRoZSAiZG1lc2ciIGNvbW1hbmQpOgorCisgIFNwb29mIGV2ZW50KHMpIGRldGVjdGVkIG9uIFZGKG4pCisKKyAgV2hlcmUgbj10aGUgVkYgdGhhdCBhdHRlbXB0ZWQgdG8gZG8gdGhlIHNwb29maW5nLgorCiBTdXBwb3J0CiA9PT09PT09CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXIvZGV2aWNlcy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL2RldmljZXMudHh0CmluZGV4IDE5NzFiY2YuLjg4ODgwODMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXIvZGV2aWNlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci9kZXZpY2VzLnR4dApAQCAtMjc5LDExICsyNzksMTUgQEAKIAl0aW1lLikgIFVubGlrZSB0aGUgb3RoZXIgc3VzcGVuZC1yZWxhdGVkIHBoYXNlcywgZHVyaW5nIHRoZSBwcmVwYXJlCiAJcGhhc2UgdGhlIGRldmljZSB0cmVlIGlzIHRyYXZlcnNlZCB0b3AtZG93bi4KIAotCVRoZSBwcmVwYXJlIHBoYXNlIHVzZXMgb25seSBhIGJ1cyBjYWxsYmFjay4gIEFmdGVyIHRoZSBjYWxsYmFjayBtZXRob2QKLQlyZXR1cm5zLCBubyBuZXcgY2hpbGRyZW4gbWF5IGJlIHJlZ2lzdGVyZWQgYmVsb3cgdGhlIGRldmljZS4gIFRoZSBtZXRob2QKLQltYXkgYWxzbyBwcmVwYXJlIHRoZSBkZXZpY2Ugb3IgZHJpdmVyIGluIHNvbWUgd2F5IGZvciB0aGUgdXBjb21pbmcKLQlzeXN0ZW0gcG93ZXIgdHJhbnNpdGlvbiwgYnV0IGl0IHNob3VsZCBub3QgcHV0IHRoZSBkZXZpY2UgaW50byBhCi0JbG93LXBvd2VyIHN0YXRlLgorCUluIGFkZGl0aW9uIHRvIHRoYXQsIGlmIGRldmljZSBkcml2ZXJzIG5lZWQgdG8gYWxsb2NhdGUgYWRkaXRpb25hbAorCW1lbW9yeSB0byBiZSBhYmxlIHRvIGhhZGxlIGRldmljZSBzdXNwZW5kIGNvcnJlY3RseSwgdGhhdCBzaG91bGQgYmUKKwlkb25lIGluIHRoZSBwcmVwYXJlIHBoYXNlLgorCisJQWZ0ZXIgdGhlIHByZXBhcmUgY2FsbGJhY2sgbWV0aG9kIHJldHVybnMsIG5vIG5ldyBjaGlsZHJlbiBtYXkgYmUKKwlyZWdpc3RlcmVkIGJlbG93IHRoZSBkZXZpY2UuICBUaGUgbWV0aG9kIG1heSBhbHNvIHByZXBhcmUgdGhlIGRldmljZSBvcgorCWRyaXZlciBpbiBzb21lIHdheSBmb3IgdGhlIHVwY29taW5nIHN5c3RlbSBwb3dlciB0cmFuc2l0aW9uIChmb3IKKwlleGFtcGxlLCBieSBhbGxvY2F0aW5nIGFkZGl0aW9uYWwgbWVtb3J5IHJlcXVpcmVkIGZvciB0aGlzIHB1cnBvc2UpLCBidXQKKwlpdCBzaG91bGQgbm90IHB1dCB0aGUgZGV2aWNlIGludG8gYSBsb3ctcG93ZXIgc3RhdGUuCiAKICAgICAyLglUaGUgc3VzcGVuZCBtZXRob2RzIHNob3VsZCBxdWllc2NlIHRoZSBkZXZpY2UgdG8gc3RvcCBpdCBmcm9tIHBlcmZvcm1pbmcKIAlJL08uICBUaGV5IGFsc28gbWF5IHNhdmUgdGhlIGRldmljZSByZWdpc3RlcnMgYW5kIHB1dCBpdCBpbnRvIHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9ub3RpZmllcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9ub3RpZmllcnMudHh0CmluZGV4IGNmOTgwNzAuLmMyYTRhMzQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXIvbm90aWZpZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL25vdGlmaWVycy50eHQKQEAgLTEsNDYgKzEsNDEgQEAKIFN1c3BlbmQgbm90aWZpZXJzCi0JKEMpIDIwMDcgUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPiwgR1BMCisJKEMpIDIwMDctMjAxMSBSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHNpc2sucGw+LCBHUEwKIAotVGhlcmUgYXJlIHNvbWUgb3BlcmF0aW9ucyB0aGF0IGRldmljZSBkcml2ZXJzIG1heSB3YW50IHRvIGNhcnJ5IG91dCBpbiB0aGVpcgotLnN1c3BlbmQoKSByb3V0aW5lcywgYnV0IHNob3VsZG4ndCwgYmVjYXVzZSB0aGV5IGNhbiBjYXVzZSB0aGUgaGliZXJuYXRpb24gb3IKLXN1c3BlbmQgdG8gZmFpbC4gRm9yIGV4YW1wbGUsIGEgZHJpdmVyIG1heSB3YW50IHRvIGFsbG9jYXRlIGEgc3Vic3RhbnRpYWwgYW1vdW50Ci1vZiBtZW1vcnkgKGxpa2UgNTAgTUIpIGluIC5zdXNwZW5kKCksIGJ1dCB0aGF0IHNob3VsZG4ndCBiZSBkb25lIGFmdGVyIHRoZQotc3dzdXNwJ3MgbWVtb3J5IHNocmlua2VyIGhhcyBydW4uCitUaGVyZSBhcmUgc29tZSBvcGVyYXRpb25zIHRoYXQgc3Vic3lzdGVtcyBvciBkcml2ZXJzIG1heSB3YW50IHRvIGNhcnJ5IG91dAorYmVmb3JlIGhpYmVybmF0aW9uL3N1c3BlbmQgb3IgYWZ0ZXIgcmVzdG9yZS9yZXN1bWUsIGJ1dCB0aGV5IHJlcXVpcmUgdGhlIHN5c3RlbQordG8gYmUgZnVsbHkgZnVuY3Rpb25hbCwgc28gdGhlIGRyaXZlcnMnIGFuZCBzdWJzeXN0ZW1zJyAuc3VzcGVuZCgpIGFuZCAucmVzdW1lKCkKK29yIGV2ZW4gLnByZXBhcmUoKSBhbmQgLmNvbXBsZXRlKCkgY2FsbGJhY2tzIGFyZSBub3Qgc3VpdGFibGUgZm9yIHRoaXMgcHVycG9zZS4KK0ZvciBleGFtcGxlLCBkZXZpY2UgZHJpdmVycyBtYXkgd2FudCB0byB1cGxvYWQgZmlybXdhcmUgdG8gdGhlaXIgZGV2aWNlcyBhZnRlcgorcmVzdW1lL3Jlc3RvcmUsIGJ1dCB0aGV5IGNhbm5vdCBkbyBpdCBieSBjYWxsaW5nIHJlcXVlc3RfZmlybXdhcmUoKSBmcm9tIHRoZWlyCisucmVzdW1lKCkgb3IgLmNvbXBsZXRlKCkgcm91dGluZXMgKHVzZXIgbGFuZCBwcm9jZXNzZXMgYXJlIGZyb3plbiBhdCB0aGVzZQorcG9pbnRzKS4gIFRoZSBzb2x1dGlvbiBtYXkgYmUgdG8gbG9hZCB0aGUgZmlybXdhcmUgaW50byBtZW1vcnkgYmVmb3JlIHByb2Nlc3NlcworYXJlIGZyb3plbiBhbmQgdXBsb2FkIGl0IGZyb20gdGhlcmUgaW4gdGhlIC5yZXN1bWUoKSByb3V0aW5lLgorQSBzdXNwZW5kL2hpYmVybmF0aW9uIG5vdGlmaWVyIG1heSBiZSB1c2VkIGZvciB0aGlzIHB1cnBvc2UuCiAKLUFsc28sIHRoZXJlIG1heSBiZSBzb21lIG9wZXJhdGlvbnMsIHRoYXQgc3Vic3lzdGVtcyB3YW50IHRvIGNhcnJ5IG91dCBiZWZvcmUgYQotaGliZXJuYXRpb24vc3VzcGVuZCBvciBhZnRlciBhIHJlc3RvcmUvcmVzdW1lLCByZXF1aXJpbmcgdGhlIHN5c3RlbSB0byBiZSBmdWxseQotZnVuY3Rpb25hbCwgc28gdGhlIGRyaXZlcnMnIC5zdXNwZW5kKCkgYW5kIC5yZXN1bWUoKSByb3V0aW5lcyBhcmUgbm90IHN1aXRhYmxlCi1mb3IgdGhpcyBwdXJwb3NlLiAgRm9yIGV4YW1wbGUsIGRldmljZSBkcml2ZXJzIG1heSB3YW50IHRvIHVwbG9hZCBmaXJtd2FyZSB0bwotdGhlaXIgZGV2aWNlcyBhZnRlciBhIHJlc3RvcmUgZnJvbSBhIGhpYmVybmF0aW9uIGltYWdlLCBidXQgdGhleSBjYW5ub3QgZG8gaXQgYnkKLWNhbGxpbmcgcmVxdWVzdF9maXJtd2FyZSgpIGZyb20gdGhlaXIgLnJlc3VtZSgpIHJvdXRpbmVzICh1c2VyIGxhbmQgcHJvY2Vzc2VzCi1hcmUgZnJvemVuIGF0IHRoaXMgcG9pbnQpLiAgVGhlIHNvbHV0aW9uIG1heSBiZSB0byBsb2FkIHRoZSBmaXJtd2FyZSBpbnRvCi1tZW1vcnkgYmVmb3JlIHByb2Nlc3NlcyBhcmUgZnJvemVuIGFuZCB1cGxvYWQgaXQgZnJvbSB0aGVyZSBpbiB0aGUgLnJlc3VtZSgpCi1yb3V0aW5lLiAgT2YgY291cnNlLCBhIGhpYmVybmF0aW9uIG5vdGlmaWVyIG1heSBiZSB1c2VkIGZvciB0aGlzIHB1cnBvc2UuCi0KLVRoZSBzdWJzeXN0ZW1zIHRoYXQgaGF2ZSBzdWNoIG5lZWRzIGNhbiByZWdpc3RlciBzdXNwZW5kIG5vdGlmaWVycyB0aGF0IHdpbGwgYmUKLWNhbGxlZCB1cG9uIHRoZSBmb2xsb3dpbmcgZXZlbnRzIGJ5IHRoZSBzdXNwZW5kIGNvcmU6CitUaGUgc3Vic3lzdGVtcyBvciBkcml2ZXJzIGhhdmluZyBzdWNoIG5lZWRzIGNhbiByZWdpc3RlciBzdXNwZW5kIG5vdGlmaWVycyB0aGF0Cit3aWxsIGJlIGNhbGxlZCB1cG9uIHRoZSBmb2xsb3dpbmcgZXZlbnRzIGJ5IHRoZSBQTSBjb3JlOgogCiBQTV9ISUJFUk5BVElPTl9QUkVQQVJFCVRoZSBzeXN0ZW0gaXMgZ29pbmcgdG8gaGliZXJuYXRlIG9yIHN1c3BlbmQsIHRhc2tzIHdpbGwKIAkJCWJlIGZyb3plbiBpbW1lZGlhdGVseS4KIAogUE1fUE9TVF9ISUJFUk5BVElPTglUaGUgc3lzdGVtIG1lbW9yeSBzdGF0ZSBoYXMgYmVlbiByZXN0b3JlZCBmcm9tIGEKLQkJCWhpYmVybmF0aW9uIGltYWdlIG9yIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyB0aGUKLQkJCWhpYmVybmF0aW9uLiAgRGV2aWNlIGRyaXZlcnMnIC5yZXN1bWUoKSBjYWxsYmFja3MgaGF2ZQorCQkJaGliZXJuYXRpb24gaW1hZ2Ugb3IgYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nCisJCQloaWJlcm5hdGlvbi4gIERldmljZSBkcml2ZXJzJyByZXN0b3JlIGNhbGxiYWNrcyBoYXZlCiAJCQliZWVuIGV4ZWN1dGVkIGFuZCB0YXNrcyBoYXZlIGJlZW4gdGhhd2VkLgogCiBQTV9SRVNUT1JFX1BSRVBBUkUJVGhlIHN5c3RlbSBpcyBnb2luZyB0byByZXN0b3JlIGEgaGliZXJuYXRpb24gaW1hZ2UuCi0JCQlJZiBhbGwgZ29lcyB3ZWxsIHRoZSByZXN0b3JlZCBrZXJuZWwgd2lsbCBpc3N1ZSBhCisJCQlJZiBhbGwgZ29lcyB3ZWxsLCB0aGUgcmVzdG9yZWQga2VybmVsIHdpbGwgaXNzdWUgYQogCQkJUE1fUE9TVF9ISUJFUk5BVElPTiBub3RpZmljYXRpb24uCiAKLVBNX1BPU1RfUkVTVE9SRQkJQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHRoZSBoaWJlcm5hdGlvbiByZXN0b3JlLgotCQkJRGV2aWNlIGRyaXZlcnMnIC5yZXN1bWUoKSBjYWxsYmFja3MgaGF2ZSBiZWVuIGV4ZWN1dGVkCitQTV9QT1NUX1JFU1RPUkUJCUFuIGVycm9yIG9jY3VycmVkIGR1cmluZyByZXN0b3JlIGZyb20gaGliZXJuYXRpb24uCisJCQlEZXZpY2UgZHJpdmVycycgcmVzdG9yZSBjYWxsYmFja3MgaGF2ZSBiZWVuIGV4ZWN1dGVkCiAJCQlhbmQgdGFza3MgaGF2ZSBiZWVuIHRoYXdlZC4KIAotUE1fU1VTUEVORF9QUkVQQVJFCVRoZSBzeXN0ZW0gaXMgcHJlcGFyaW5nIGZvciBhIHN1c3BlbmQuCitQTV9TVVNQRU5EX1BSRVBBUkUJVGhlIHN5c3RlbSBpcyBwcmVwYXJpbmcgZm9yIHN1c3BlbmQuCiAKIFBNX1BPU1RfU1VTUEVORAkJVGhlIHN5c3RlbSBoYXMganVzdCByZXN1bWVkIG9yIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZwotCQkJdGhlIHN1c3BlbmQuCURldmljZSBkcml2ZXJzJyAucmVzdW1lKCkgY2FsbGJhY2tzIGhhdmUKLQkJCWJlZW4gZXhlY3V0ZWQgYW5kIHRhc2tzIGhhdmUgYmVlbiB0aGF3ZWQuCisJCQlzdXNwZW5kLiAgRGV2aWNlIGRyaXZlcnMnIHJlc3VtZSBjYWxsYmFja3MgaGF2ZSBiZWVuCisJCQlleGVjdXRlZCBhbmQgdGFza3MgaGF2ZSBiZWVuIHRoYXdlZC4KIAogSXQgaXMgZ2VuZXJhbGx5IGFzc3VtZWQgdGhhdCB3aGF0ZXZlciB0aGUgbm90aWZpZXJzIGRvIGZvcgogUE1fSElCRVJOQVRJT05fUFJFUEFSRSwgc2hvdWxkIGJlIHVuZG9uZSBmb3IgUE1fUE9TVF9ISUJFUk5BVElPTi4gIEFuYWxvZ291c2x5LApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL0xJQ0VOU0UucWxhMnh4eCBiL0RvY3VtZW50YXRpb24vc2NzaS9MSUNFTlNFLnFsYTJ4eHgKaW5kZXggOWUxNWI0Zi4uMTllN2NkNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL0xJQ0VOU0UucWxhMnh4eAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvTElDRU5TRS5xbGEyeHh4CkBAIC0xLDExICsxLDExIEBACi1Db3B5cmlnaHQgKGMpICAyMDAzLTIwMDUgUUxvZ2ljIENvcnBvcmF0aW9uCi1RTG9naWMgTGludXggRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCitDb3B5cmlnaHQgKGMpIDIwMDMtMjAxMSBRTG9naWMgQ29ycG9yYXRpb24KK1FMb2dpYyBMaW51eC9FU1ggRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCiAKLVRoaXMgcHJvZ3JhbSBpbmNsdWRlcyBhIGRldmljZSBkcml2ZXIgZm9yIExpbnV4IDIuNiB0aGF0IG1heSBiZQorVGhpcyBwcm9ncmFtIGluY2x1ZGVzIGEgZGV2aWNlIGRyaXZlciBmb3IgTGludXggMi42L0VTWCB0aGF0IG1heSBiZQogZGlzdHJpYnV0ZWQgd2l0aCBRTG9naWMgaGFyZHdhcmUgc3BlY2lmaWMgZmlybXdhcmUgYmluYXJ5IGZpbGUuCiBZb3UgbWF5IG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZSBkZXZpY2UgZHJpdmVyIGNvZGUgdW5kZXIgdGhlCi1HTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKLUZvdW5kYXRpb24gKHZlcnNpb24gMiBvciBhIGxhdGVyIHZlcnNpb24pLgorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGEgY29weSBvZiB3aGljaCBpcyBhdHRhY2hlZCBoZXJldG8gYXMKK0V4aGliaXQgQSkgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gKHZlcnNpb24gMikuCiAKIFlvdSBtYXkgcmVkaXN0cmlidXRlIHRoZSBoYXJkd2FyZSBzcGVjaWZpYyBmaXJtd2FyZSBiaW5hcnkgZmlsZQogdW5kZXIgdGhlIGZvbGxvd2luZyB0ZXJtczoKQEAgLTQzLDMgKzQzLDI4NSBAQAogVFJBREUgU0VDUkVULCBNQVNLIFdPUkssIE9SIE9USEVSIFBST1BSSUVUQVJZIFJJR0hUKSBFTUJPRElFRCBJTgogQU5ZIE9USEVSIFFMT0dJQyBIQVJEV0FSRSBPUiBTT0ZUV0FSRSBFSVRIRVIgU09MRUxZIE9SIElOCiBDT01CSU5BVElPTiBXSVRIIFRISVMgUFJPR1JBTS4KKworCitFWEhJQklUIEEKKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCithIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCittZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgordGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCitsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCit0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCitzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKworVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Citmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKworICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCittYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwordGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCit0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLgorCisgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscworb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCitQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCitZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvU0ItTGl2ZS1taXhlci50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvU0ItTGl2ZS1taXhlci50eHQKaW5kZXggZjU2MzlkNC4uZjRiNTk4OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL1NCLUxpdmUtbWl4ZXIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9TQi1MaXZlLW1peGVyLnR4dApAQCAtODcsMTQgKzg3LDE0IEBACiBUaGUgcmVzdWx0IGlzIGZvcndhcmRlZCB0byB0aGUgQURDIGNhcHR1cmUgRklGTyAodGh1cyB0byB0aGUgc3RhbmRhcmQgY2FwdHVyZQogUENNIGRldmljZSkuCiAKLW5hbWU9J011c2ljIFBsYXliYWNrIFZvbHVtZScsaW5kZXg9MAorbmFtZT0nU3ludGggUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCiAKIFRoaXMgY29udHJvbCBpcyB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBsZWZ0IGFuZCByaWdodCBNSURJIEZYLWJ1cwogYWNjdW11bGF0b3JzLiBBTFNBIHVzZXMgYWNjdW11bGF0b3JzIDQgYW5kIDUgZm9yIGxlZnQgYW5kIHJpZ2h0IE1JREkgc2FtcGxlcy4KIFRoZSByZXN1bHQgc2FtcGxlcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBmcm9udCBEQUMgUENNIHNsb3RzIG9mIHRoZSBBQzk3IGNvZGVjLgogCi1uYW1lPSdNdXNpYyBDYXB0dXJlIFZvbHVtZScsaW5kZXg9MAotbmFtZT0nTXVzaWMgQ2FwdHVyZSBTd2l0Y2gnLGluZGV4PTAKK25hbWU9J1N5bnRoIENhcHR1cmUgVm9sdW1lJyxpbmRleD0wCituYW1lPSdTeW50aCBDYXB0dXJlIFN3aXRjaCcsaW5kZXg9MAogCiBUaGVzZSBjb250cm9scyBhcmUgdXNlZCB0byBhdHRlbnVhdGUgc2FtcGxlcyBmb3IgbGVmdCBhbmQgcmlnaHQgTUlESSBGWC1idXMKIGFjY3VtdWxhdG9yLiBBTFNBIHVzZXMgYWNjdW11bGF0b3JzIDQgYW5kIDUgZm9yIGxlZnQgYW5kIHJpZ2h0IFBDTS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3lzY3RsL25ldC50eHQgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC9uZXQudHh0CmluZGV4IGNiZDA1ZmYuLjMyMDFhNzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc3lzY3RsL25ldC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwvbmV0LnR4dApAQCAtMzIsNiArMzIsMTcgQEAKIDEuIC9wcm9jL3N5cy9uZXQvY29yZSAtIE5ldHdvcmsgY29yZSBvcHRpb25zCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK2JwZl9qaXRfZW5hYmxlCistLS0tLS0tLS0tLS0tLQorCitUaGlzIGVuYWJsZXMgQmVya2VsZXkgUGFja2V0IEZpbHRlciBKdXN0IGluIFRpbWUgY29tcGlsZXIuCitDdXJyZW50bHkgc3VwcG9ydGVkIG9uIHg4Nl82NCBhcmNoaXRlY3R1cmUsIGJwZl9qaXQgcHJvdmlkZXMgYSBmcmFtZXdvcmsKK3RvIHNwZWVkIHBhY2tldCBmaWx0ZXJpbmcsIHRoZSBvbmUgdXNlZCBieSB0Y3BkdW1wL2xpYnBjYXAgZm9yIGV4YW1wbGUuCitWYWx1ZXMgOgorCTAgLSBkaXNhYmxlIHRoZSBKSVQgKGRlZmF1bHQgdmFsdWUpCisJMSAtIGVuYWJsZSB0aGUgSklUCisJMiAtIGVuYWJsZSB0aGUgSklUIGFuZCBhc2sgdGhlIGNvbXBpbGVyIHRvIGVtaXQgdHJhY2VzIG9uIGtlcm5lbCBsb2cuCisKIHJtZW1fZGVmYXVsdAogLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHJhY2Uva3Byb2JldHJhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi90cmFjZS9rcHJvYmV0cmFjZS50eHQKaW5kZXggNmQyN2FiOC4uYzgzYmQ2YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90cmFjZS9rcHJvYmV0cmFjZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90cmFjZS9rcHJvYmV0cmFjZS50eHQKQEAgLTEyMCw3ICsxMjAsNiBAQAogICAgICAgICBmaWVsZDp1bnNpZ25lZCBjaGFyIGNvbW1vbl9mbGFnczsgICAgICAgb2Zmc2V0OjI7ICAgICAgIHNpemU6MTsgc2lnbmVkOjA7CiAgICAgICAgIGZpZWxkOnVuc2lnbmVkIGNoYXIgY29tbW9uX3ByZWVtcHRfY291bnQ7ICAgICAgIG9mZnNldDozOyBzaXplOjE7c2lnbmVkOjA7CiAgICAgICAgIGZpZWxkOmludCBjb21tb25fcGlkOyAgIG9mZnNldDo0OyAgICAgICBzaXplOjQ7IHNpZ25lZDoxOwotICAgICAgICBmaWVsZDppbnQgY29tbW9uX2xvY2tfZGVwdGg7ICAgIG9mZnNldDo4OyAgICAgICBzaXplOjQ7IHNpZ25lZDoxOwogCiAgICAgICAgIGZpZWxkOnVuc2lnbmVkIGxvbmcgX19wcm9iZV9pcDsgb2Zmc2V0OjEyOyAgICAgIHNpemU6NDsgc2lnbmVkOjA7CiAgICAgICAgIGZpZWxkOmludCBfX3Byb2JlX25hcmdzOyAgICAgICAgb2Zmc2V0OjE2OyAgICAgIHNpemU6NDsgc2lnbmVkOjE7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3NoX21vYmlsZV9jZXVfY2FtZXJhLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvc2hfbW9iaWxlX2NldV9jYW1lcmEudHh0CmluZGV4IGNiNDdlNzIuLjFlOTZjZTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvc2hfbW9iaWxlX2NldV9jYW1lcmEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvc2hfbW9iaWxlX2NldV9jYW1lcmEudHh0CkBAIC0zNyw3ICszNyw3IEBACiAtMSctCiAKIEluIHRoZSBhYm92ZSBjaGFydCBtaW51c2VzIGFuZCBzbGFzaGVzIHJlcHJlc2VudCAicmVhbCIgZGF0YSBhbW91bnRzLCBwb2ludHMgYW5kCi1hY2NlbnRzIHJlcHJlc2VudCAidXNlZnVsIiBkYXRhLCBiYXNpY2FsbHksIENFVSBzY2FsZWQgYW1kIGNyb3BwZWQgb3V0cHV0LAorYWNjZW50cyByZXByZXNlbnQgInVzZWZ1bCIgZGF0YSwgYmFzaWNhbGx5LCBDRVUgc2NhbGVkIGFuZCBjcm9wcGVkIG91dHB1dCwKIG1hcHBlZCBiYWNrIG9udG8gdGhlIGNsaWVudCdzIHNvdXJjZSBwbGFuZS4KIAogU3VjaCBhIGNvbmZpZ3VyYXRpb24gY2FuIGJlIHByb2R1Y2VkIGJ5IHVzZXIgcmVxdWVzdHM6CkBAIC02NSw3ICs2NSw3IEBACiAKIDEuIENhbGN1bGF0ZSBjdXJyZW50IHNlbnNvciBzY2FsZXM6CiAKLQlzY2FsZV9zID0gKCgzJykgLSAoMykpIC8gKCgyJykgLSAoMikpCisJc2NhbGVfcyA9ICgoMicpIC0gKDIpKSAvICgoMycpIC0gKDMpKQogCiAyLiBDYWxjdWxhdGUgImVmZmVjdGl2ZSIgaW5wdXQgY3JvcCAoc2Vuc29yIHN1YndpbmRvdykgLSBDRVUgY3JvcCBzY2FsZWQgYmFjayBhdAogY3VycmVudCBzZW5zb3Igc2NhbGVzIG9udG8gaW5wdXQgd2luZG93IC0gdGhpcyBpcyB1c2VyIFNfQ1JPUDoKQEAgLTgwLDcgKzgwLDcgQEAKIDQuIENhbGN1bGF0ZSBzZW5zb3Igb3V0cHV0IHdpbmRvdyBieSBhcHBseWluZyBjb21iaW5lZCBzY2FsZXMgdG8gcmVhbCBpbnB1dAogd2luZG93OgogCi0Jd2lkdGhfc19vdXQgPSAoKDInKSAtICgyKSkgLyBzY2FsZV9jb21iCisJd2lkdGhfc19vdXQgPSAoKDcnKSAtICg3KSkgPSAoKDInKSAtICgyKSkgLyBzY2FsZV9jb21iCiAKIDUuIEFwcGx5IGl0ZXJhdGl2ZSBzZW5zb3IgU19GTVQgZm9yIHNlbnNvciBvdXRwdXQgd2luZG93LgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwvMDAtSU5ERVgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUwMjUxYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlydHVhbC8wMC1JTkRFWApAQCAtMCwwICsxLDEwIEBACitWaXJ0dWFsaXphdGlvbiBzdXBwb3J0IGluIHRoZSBMaW51eCBrZXJuZWwuCisKKzAwLUlOREVYCisJLSB0aGlzIGZpbGUuCitrdm0vCisJLSBLZXJuZWwgVmlydHVhbCBNYWNoaW5lLiAgU2VlIGFsc28gaHR0cDovL2xpbnV4LWt2bS5vcmcKK2xndWVzdC8KKwktIEV4dHJlbWVseSBzaW1wbGUgaHlwZXJ2aXNvciBmb3IgZXhwZXJpbWVudGFsL2VkdWNhdGlvbmFsIHVzZS4KK3VtbC8KKwktIFVzZXIgTW9kZSBMaW51eCwgYnVpbGRzL3J1bnMgTGludXgga2VybmVsIGFzIGEgdXNlcnNwYWNlIHByb2dyYW0uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2t2bS9hcGkudHh0IGIvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2t2bS9hcGkudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2t2bS9hcGkudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL3ZpcnR1YWwva3ZtL2FwaS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va3ZtL2NwdWlkLnR4dCBiL0RvY3VtZW50YXRpb24vdmlydHVhbC9rdm0vY3B1aWQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2t2bS9jcHVpZC50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vdmlydHVhbC9rdm0vY3B1aWQudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2t2bS9sb2NraW5nLnR4dCBiL0RvY3VtZW50YXRpb24vdmlydHVhbC9rdm0vbG9ja2luZy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24va3ZtL2xvY2tpbmcudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL3ZpcnR1YWwva3ZtL2xvY2tpbmcudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2t2bS9tbXUudHh0IGIvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2t2bS9tbXUudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2t2bS9tbXUudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL3ZpcnR1YWwva3ZtL21tdS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va3ZtL21zci50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwva3ZtL21zci50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24va3ZtL21zci50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vdmlydHVhbC9rdm0vbXNyLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rdm0vcHBjLXB2LnR4dCBiL0RvY3VtZW50YXRpb24vdmlydHVhbC9rdm0vcHBjLXB2LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9rdm0vcHBjLXB2LnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2t2bS9wcGMtcHYudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2t2bS9yZXZpZXctY2hlY2tsaXN0LnR4dCBiL0RvY3VtZW50YXRpb24vdmlydHVhbC9rdm0vcmV2aWV3LWNoZWNrbGlzdC50eHQKc2ltaWxhcml0eSBpbmRleCA5NSUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9rdm0vcmV2aWV3LWNoZWNrbGlzdC50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vdmlydHVhbC9rdm0vcmV2aWV3LWNoZWNrbGlzdC50eHQKaW5kZXggNzMwNDc1YS4uYTg1MDk4NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rdm0vcmV2aWV3LWNoZWNrbGlzdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2t2bS9yZXZpZXctY2hlY2tsaXN0LnR4dApAQCAtNyw3ICs3LDcgQEAKIDIuICBQYXRjaGVzIHNob3VsZCBiZSBhZ2FpbnN0IGt2bS5naXQgbWFzdGVyIGJyYW5jaC4KIAogMy4gIElmIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIGEgbmV3IHVzZXJzcGFjZSBBUEk6Ci0gICAgLSB0aGUgQVBJIG11c3QgYmUgZG9jdW1lbnRlZCBpbiBEb2N1bWVudGF0aW9uL2t2bS9hcGkudHh0CisgICAgLSB0aGUgQVBJIG11c3QgYmUgZG9jdW1lbnRlZCBpbiBEb2N1bWVudGF0aW9uL3ZpcnR1YWwva3ZtL2FwaS50eHQKICAgICAtIHRoZSBBUEkgbXVzdCBiZSBkaXNjb3ZlcmFibGUgdXNpbmcgS1ZNX0NIRUNLX0VYVEVOU0lPTgogCiA0LiAgTmV3IHN0YXRlIG11c3QgaW5jbHVkZSBzdXBwb3J0IGZvciBzYXZlL3Jlc3RvcmUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2t2bS90aW1la2VlcGluZy50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwva3ZtL3RpbWVrZWVwaW5nLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9rdm0vdGltZWtlZXBpbmcudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL3ZpcnR1YWwva3ZtL3RpbWVrZWVwaW5nLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvLmdpdGlnbm9yZSBiL0RvY3VtZW50YXRpb24vdmlydHVhbC9sZ3Vlc3QvLmdpdGlnbm9yZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvLmdpdGlnbm9yZQpyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2xndWVzdC8uZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xndWVzdC9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vdmlydHVhbC9sZ3Vlc3QvTWFrZWZpbGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vbGd1ZXN0L01ha2VmaWxlCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL3ZpcnR1YWwvbGd1ZXN0L01ha2VmaWxlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xndWVzdC9leHRyYWN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2xndWVzdC9leHRyYWN0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2xndWVzdC9leHRyYWN0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL3ZpcnR1YWwvbGd1ZXN0L2V4dHJhY3QKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jIGIvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2xndWVzdC9sZ3Vlc3QuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvbGd1ZXN0LmMKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vdmlydHVhbC9sZ3Vlc3QvbGd1ZXN0LmMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwvbGd1ZXN0L2xndWVzdC50eHQKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvbGd1ZXN0LnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2xndWVzdC9sZ3Vlc3QudHh0CmluZGV4IGRhZDk5OTcuLmJmZjBjNTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2xndWVzdC9sZ3Vlc3QudHh0CkBAIC03NCw3ICs3NCw4IEBACiAKIC0gUnVuIGFuIGxndWVzdCBhcyByb290OgogCi0gICAgICBEb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QgNjQgdm1saW51eCAtLXR1bm5ldD0xOTIuMTY4LjE5LjEgLS1ibG9jaz1yb290ZmlsZSByb290PS9kZXYvdmRhCisgICAgICBEb2N1bWVudGF0aW9uL3ZpcnR1YWwvbGd1ZXN0L2xndWVzdCA2NCB2bWxpbnV4IC0tdHVubmV0PTE5Mi4xNjguMTkuMSBcCisgICAgICAgIC0tYmxvY2s9cm9vdGZpbGUgcm9vdD0vZGV2L3ZkYQogCiAgICBFeHBsYW5hdGlvbjoKICAgICA2NDogdGhlIGFtb3VudCBvZiBtZW1vcnkgdG8gdXNlLCBpbiBNQi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdW1sL1VzZXJNb2RlTGludXgtSE9XVE8udHh0IGIvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL3VtbC9Vc2VyTW9kZUxpbnV4LUhPV1RPLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi91bWwvVXNlck1vZGVMaW51eC1IT1dUTy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vdmlydHVhbC91bWwvVXNlck1vZGVMaW51eC1IT1dUTy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vd29ya3F1ZXVlLnR4dCBiL0RvY3VtZW50YXRpb24vd29ya3F1ZXVlLnR4dAppbmRleCAwMWM1MTNmLi5hMGI1NzdkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3dvcmtxdWV1ZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi93b3JrcXVldWUudHh0CkBAIC0xMiw2ICsxMiw3IEBACiA0LiBBcHBsaWNhdGlvbiBQcm9ncmFtbWluZyBJbnRlcmZhY2UgKEFQSSkKIDUuIEV4YW1wbGUgRXhlY3V0aW9uIFNjZW5hcmlvcwogNi4gR3VpZGVsaW5lcworNy4gRGVidWdnaW5nCiAKIAogMS4gSW50cm9kdWN0aW9uCkBAIC0zNzksMyArMzgwLDQyIEBACiAqIFVubGVzcyB3b3JrIGl0ZW1zIGFyZSBleHBlY3RlZCB0byBjb25zdW1lIGEgaHVnZSBhbW91bnQgb2YgQ1BVCiAgIGN5Y2xlcywgdXNpbmcgYSBib3VuZCB3cSBpcyB1c3VhbGx5IGJlbmVmaWNpYWwgZHVlIHRvIHRoZSBpbmNyZWFzZWQKICAgbGV2ZWwgb2YgbG9jYWxpdHkgaW4gd3Egb3BlcmF0aW9ucyBhbmQgd29yayBpdGVtIGV4ZWN1dGlvbi4KKworCis3LiBEZWJ1Z2dpbmcKKworQmVjYXVzZSB0aGUgd29yayBmdW5jdGlvbnMgYXJlIGV4ZWN1dGVkIGJ5IGdlbmVyaWMgd29ya2VyIHRocmVhZHMKK3RoZXJlIGFyZSBhIGZldyB0cmlja3MgbmVlZGVkIHRvIHNoZWQgc29tZSBsaWdodCBvbiBtaXNiZWhhdmluZword29ya3F1ZXVlIHVzZXJzLgorCitXb3JrZXIgdGhyZWFkcyBzaG93IHVwIGluIHRoZSBwcm9jZXNzIGxpc3QgYXM6CisKK3Jvb3QgICAgICA1NjcxICAwLjAgIDAuMCAgICAgIDAgICAgIDAgPyAgICAgICAgUyAgICAxMjowNyAgIDA6MDAgW2t3b3JrZXIvMDoxXQorcm9vdCAgICAgIDU2NzIgIDAuMCAgMC4wICAgICAgMCAgICAgMCA/ICAgICAgICBTICAgIDEyOjA3ICAgMDowMCBba3dvcmtlci8xOjJdCityb290ICAgICAgNTY3MyAgMC4wICAwLjAgICAgICAwICAgICAwID8gICAgICAgIFMgICAgMTI6MTIgICAwOjAwIFtrd29ya2VyLzA6MF0KK3Jvb3QgICAgICA1Njc0ICAwLjAgIDAuMCAgICAgIDAgICAgIDAgPyAgICAgICAgUyAgICAxMjoxMyAgIDA6MDAgW2t3b3JrZXIvMTowXQorCitJZiBrd29ya2VycyBhcmUgZ29pbmcgY3JhenkgKHVzaW5nIHRvbyBtdWNoIGNwdSksIHRoZXJlIGFyZSB0d28gdHlwZXMKK29mIHBvc3NpYmxlIHByb2JsZW1zOgorCisJMS4gU29tZXRoaW5nIGJlZWluZyBzY2hlZHVsZWQgaW4gcmFwaWQgc3VjY2Vzc2lvbgorCTIuIEEgc2luZ2xlIHdvcmsgaXRlbSB0aGF0IGNvbnN1bWVzIGxvdHMgb2YgY3B1IGN5Y2xlcworCitUaGUgZmlyc3Qgb25lIGNhbiBiZSB0cmFja2VkIHVzaW5nIHRyYWNpbmc6CisKKwkkIGVjaG8gd29ya3F1ZXVlOndvcmtxdWV1ZV9xdWV1ZV93b3JrID4gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9zZXRfZXZlbnQKKwkkIGNhdCAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNlX3BpcGUgPiBvdXQudHh0CisJKHdhaXQgYSBmZXcgc2VjcykKKwleQworCitJZiBzb21ldGhpbmcgaXMgYnVzeSBsb29waW5nIG9uIHdvcmsgcXVldWVpbmcsIGl0IHdvdWxkIGJlIGRvbWluYXRpbmcKK3RoZSBvdXRwdXQgYW5kIHRoZSBvZmZlbmRlciBjYW4gYmUgZGV0ZXJtaW5lZCB3aXRoIHRoZSB3b3JrIGl0ZW0KK2Z1bmN0aW9uLgorCitGb3IgdGhlIHNlY29uZCB0eXBlIG9mIHByb2JsZW1zIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBqdXN0IGNoZWNrCit0aGUgc3RhY2sgdHJhY2Ugb2YgdGhlIG9mZmVuZGluZyB3b3JrZXIgdGhyZWFkLgorCisJJCBjYXQgL3Byb2MvVEhFX09GRkVORElOR19LV09SS0VSL3N0YWNrCisKK1RoZSB3b3JrIGl0ZW0ncyBmdW5jdGlvbiBzaG91bGQgYmUgdHJpdmlhbGx5IHZpc2libGUgaW4gdGhlIHN0YWNrCit0cmFjZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24veDg2L3g4Nl82NC9ib290LW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi94ODYveDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQKaW5kZXggMDkyZTU5Ni4uYzU0YjRmNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi94ODYveDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi94ODYveDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQKQEAgLTIwNiw3ICsyMDYsNyBAQAogICAgICAgKGUuZy4gYmVjYXVzZSB5b3UgaGF2ZSA8IDMgR0IgbWVtb3J5KS4KICAgICAgIEtlcm5lbCBib290IG1lc3NhZ2U6ICJQQ0ktRE1BOiBEaXNhYmxpbmcgSU9NTVUiCiAKLSAgIDIuIDxhcmNoL3g4Nl82NC9rZXJuZWwvcGNpLWdhcnQuYz46IEFNRCBHQVJUIGJhc2VkIGhhcmR3YXJlIElPTU1VLgorICAgMi4gPGFyY2gveDg2L2tlcm5lbC9hbWRfZ2FydF82NC5jPjogQU1EIEdBUlQgYmFzZWQgaGFyZHdhcmUgSU9NTVUuCiAgICAgICBLZXJuZWwgYm9vdCBtZXNzYWdlOiAiUENJLURNQTogdXNpbmcgR0FSVCBJT01NVSIKIAogICAgMy4gPGFyY2gveDg2XzY0L2tlcm5lbC9wY2ktc3dpb3RsYi5jPiA6IFNvZnR3YXJlIElPTU1VIGltcGxlbWVudGF0aW9uLiBVc2VkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3poX0NOL2VtYWlsLWNsaWVudHMudHh0IGIvRG9jdW1lbnRhdGlvbi96aF9DTi9lbWFpbC1jbGllbnRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDY1ZTMyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi96aF9DTi9lbWFpbC1jbGllbnRzLnR4dApAQCAtMCwwICsxLDIxMCBAQAor6ZSYP0NoaW5lc2UgdHJhbnNsYXRlZCB2ZXJzaW9uIG9mIERvY3VtZW50YXRpb24vZW1haWwtY2xpZW50cy50eHQKKworSWYgeW91IGhhdmUgYW55IGNvbW1lbnQgb3IgdXBkYXRlIHRvIHRoZSBjb250ZW50LCBwbGVhc2UgY29udGFjdCB0aGUKK29yaWdpbmFsIGRvY3VtZW50IG1haW50YWluZXIgZGlyZWN0bHkuICBIb3dldmVyLCBpZiB5b3UgaGF2ZSBhIHByb2JsZW0KK2NvbW11bmljYXRpbmcgaW4gRW5nbGlzaCB5b3UgY2FuIGFsc28gYXNrIHRoZSBDaGluZXNlIG1haW50YWluZXIgZm9yCitoZWxwLiAgQ29udGFjdCB0aGUgQ2hpbmVzZSBtYWludGFpbmVyIGlmIHRoaXMgdHJhbnNsYXRpb24gaXMgb3V0ZGF0ZWQKK29yIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIHRoZSB0cmFuc2xhdGlvbi4KKworQ2hpbmVzZSBtYWludGFpbmVyOiBIYXJyeSBXZWkgPGhhcnJ5eGl5b3VAZ21haWwuY29tPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEb2N1bWVudGF0aW9uL2VtYWlsLWNsaWVudHMudHh0ID8/P+a2kz8/Pz/nvIjmmI8/PworCivmv6E/Pz8/Pz/lrqA/P+eSgeeDmD8/Pz/lrZg/54mIPz8/Pz8/Pz8/Pz/ngLnnmbg/P+eSh+mjjj/lrZg/44OoPz/nu6/or7I/Pz8/P+Wml++9hz8/57yB5a2YP+OCiD8/Pz8/5r+hPz8/P+a1oz/mtaPot6g/44SoP+i+qD8/CivmtZzjgoY/Pz8/Pz8/5Ly0P+WJpz8/55KHP+mUmz/mtpQ/Pz8/5rWg44OlPz/mtpM/Pz8/Pz8/57yB5a2YP+OCiD8/5ae5Pz8/4pS/Pz/mv6E/Pz8/Pz8/57yI5piPPz8/P+WtmD/pooE/Pz8/Pz8/6Ii1Pz8/Pz/nvIg/Civnkoc/54CbPz8/44SpPz/mo7A/6ZSbP+eSh+eWrz8/57uv6K6z6IWRPz8/Pz8/57yB5a2YP+OCiD8/Pz8/CisKK+a2kz8/Pz8/Pz/nvIHlrZg/44KIPz/plJs/IOeSkOaDpz8/5r+ePyAgSGFycnkgV2VpIDxoYXJyeXhpeW91QGdtYWlsLmNvbT4KK+a2kz8/Pz8/Pz/nvIjmmI8/Pz8/P+mUmz8g55KQ5oOnPz/mv54/ICBIYXJyeSBXZWkgPGhhcnJ5eGl5b3VAZ21haWwuY29tPgor5raTPz8/Pz8/Pz8/wqQ/Pz8/P+mUmz8gWWluZ2xpbiBMdWFuIDxzeW5teXRoQGdtYWlsLmNvbT4KKwkJWGlhb2NoZW4gV2FuZyA8d2FuZ3hpYW9jaGVuMEBnbWFpbC5jb20+CisJCXlheGluc24gPHlheGluc25AMTYzLmNvbT4KKwor5rWg44OkPz/mtpPng5g/772GPz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitMaW51eD8/P+a1oOi3uj/jiKE/6aOOPz8/Pz/nvIM/5reH4oSDPz8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworPz8/Pz8/Pz8/57yDPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGludXg/Pz8/P+atjMuJ5raTPz8/Pz8/P+adqT8/Pz/mtaDmg7A/Pz8/P+a1nOOChz8/6ZSbPz8/P+a/guiKpT8/55Cb44OkPz/mtaM/5raT5rSqPz/mtaDmnLU/Pz8/Pz8/P+Wukz8/Pz8/Pz8/Pz8/Pz/mtZw/57yB5a2YP+OCiD8/Cis/P+ODpj/loJU/P+a1oOiuuT8/5rWjPz8/Pz8/P+a1oOWJgT8/Pz8/54C56KeEP+eFjj8/5pC0P+eSh+ODpj8/InRleHQvcGxhaW4iPz8/Pz/mg7A/P+mUmz8/Pz/mtaDmnLU/Pz8/Pz8/P+a2kz/nkqc/Pz8/Pz8/6ZSbPworPz8/5raT6bi/Pz/mtbw/5rWj6IOvy4nmtpM/Pz8/5a+uPz8/44SpP+OEpT8/Pz/jhKg/P+eSgem4vz8/57uLP+a2kz8/Pz8/Pz/lr7A/Pz/kvLQ/5L+xPz8KKworPz/jhKY/44OlPz8/Pz9MaW51eD8/Pz8/5q2My4nmtpM/Pz8/Pz8/5rWg6Le6P+OIoT/po44/Pz8/44SlPz8/Pz/nkJvjg6Q/Pz8/6Le6Pz/nkofjg6U/P+a1nD8/Pz8/Pz8/Pz8/Pz/mv64/Pz/oiLU/Pz8/P+a4mj/mv6E/6ZSbPwor5rWgP+a1oD/mtpM/Pz/oiqU/55GwPz8/Pz8/Pz8/Pz8/P+OChT/mg7DjgIPnu5c/Pz8/Pz8/57uM54OYP+ehtz8/Pz8/Pz/omas/Pz8/44SmPz/mtpM/55CbPz8/P+Wvrj/mvrblrZg/Pz8/P+e8gT/ngY/kv7E/PworCivmtpM/55GVPz8/P+adqT8iZm9ybWF0PWZsb3dlZCLlpq/igLM/Pz8/Pz8/P+eQm+ODpD8/Pz8/5p2pPz8/6JyCPz/lr64/55Kn6JyCPz8/Pz/mo7A/Pz8/5rWg44OlPz8/Pz/ngLnltIc/Pz8/P+eQmz8/Pz8KKwor5raTP+eRlT/nkoHilYA/Pz8/Pz8/P+a1oOi3uj/jiKE/6aOOPz/mnak/55CbPz8/Pz8/44SmP+OIoz8/Pz8/5p2pPz8/6JyCPz/mtbw/Pz/mnZE/P+a1oz8/Pz/nkJvjg6Q/Pz8/PworCis/Pz/mtaDot7o/44ihP+mjjj8/5raTPz8/6IqlP+eRsD8/Pz8/Pz8/Pz8/54CbP+e7lz8/Pz/nvII/Pz8/Pz/nkbA/Pz8/P+eRlT8/Pz8/Pz8/Pz/nkJvjg6Q/Pz8/Pz8/6IqlPz9BU0NJST8/Pz8/P1VURi0457yCPz8/Pz8/55GwPz/plJs/Civmv6E/Pz8/5rWjP+a1o+i3qD8/VVRGLTjnvII/Pz8/Pz/nkbA/Pz8/Pz8/Pz8/P+a1oOiuuT8/Pz/vvYQ/P+a1oz/ngY8/5rW8Pz8/5Z6uPz/mtpM/5rWcPz8/Pz8/6JeJPz8/Pz8/Pz/ngJs/57uXPz8/Pz8/P+ajsD8/Pz8KKworPz8/5rWg6Le6P+OIoT/po44/P+aQtD/nkofjg6XoiLA/Pz/pqp7mnLU/P+a3hz8/Pz8gUmVmZXJlbmNlczogPz8/Pz8/IEluLVJlcGx5LVRvOiA/Pz/mo7A/6ZSbPz8/772EPz8KKz8/P+a1oOaDsD8/5qOwP+eBj+WPmD8/5rW8P+a2kz8/Pz8/Pz8KKwor5r62Pz8/5YmBPz/nlK8/KD8/Pz8/Pz8/P+eSkOWvuD8/55SvPyk/Pz/nlK/plZA/Pz8/55WMP+OEpD8/55Cb44OkPz/plJs/Pz8/5raT5ZOEP+aDsOOAg+e7lz/mtbw/5p2ePz8/P+a2k+iZueKUlj8/56y6Pz/mtaPot6g/P3hjbGlwYm9hcmQsIHhjbGlwCis/Pz8/Pz94Y3V0c2Vs5raUP+eSgeeovz8/5rWg44OvPz/mtaM/Pz8/Pz8/5r+C6IqlPz/nkoc/5raTP+a2kz8/Pz8/Pz8/P+Werj8/5rWj6LeoP+OEpT8/Pz/liYE/P+eUrz8/Pz8KKwor5raTP+eRlT8/P+OEpOWohz8/P1BHUC9HUEfnvIPmj5I/Pz8/Pz8/P+a1oOacteiFkT8/Pz8/P+eQm+ODpD8/Pz8/5p2pPz8/6JyCPz/mtaPlnq4/P+WvsD/mvrY/Pz8/Pz8/5raTPz8/5YCfP+ivsj8/Pz8/Pz8/Pz/jhKQ/P+a1oz8/Pz/nkJvjg6Q/Pz8/Pwor6ZSbP+adqT/mtpM/Pz8/5qOwP+aQtD/nkofjg6Y/Pz8/P+a1oOODpOaFqOa+tj8/Pz/plJs/CisKKz8/44SnPz8/Pz8/P+aQgT8/5rWg6Le6Pz/nkJvjhKU/Pz8/P+eQm+ODpD8/5raUPz8/P+mUmz/nvIE/Pz8/5a645Y2ePz8/Pz/mtpM/5raTP+eQm+ODpD8/Pz8/5raTP+a2kz8/Pz8/Pz/mtpPnu5g/P+mUmz/mt4c/54CbPz8/44OmP+i3uj/mia4/PworPz8/5rWg6K65Pz/ngY8/55Cb44OkPz8/Pz8ncGF0Y2gnPz/miJLmiqQ/Pz/mtpM/6ZSbP+a/oT8/Pz8/Pz8/Pz/mtZw/6ZSbPz8/P+e8gT8/Pz8/P+aQgT8/5rWg6Le6Pz/nkJvjhKU/Pz8/Pz8/PworCisKK+a2kz/mtZw/Pz8/5rWg6Le6P+OIoT/po44/Pz8/P+e7gD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK+adqT8/Pz/nvIE/Pz/ovbA/P+a1nD/nkoc/57yBPz8/P01VQT8/P+e8gz8/Pz/nu4DnjLQ/Pz8/P+a1oOODpz/jhKQ/P+e8gT9MaW51eD8/Pz8/56i/Pz8/Pz/nkJvjg6Q/Pz8/P+adqT/mtZw/6aqe5py1Pz8/Pz8/P+iZqz8/Cis/Pz8/Pz8/Pz/mnZ4/5rWg6Le6Pz8/Pz/nvIM/Pz/ojaQ/Pz8/PworCivnkoflrZg/P+mUmz8KK1RVSSA9IOa1oOODpj8/Pz8/5raT5ZOEP+iZuT8/Pz8/Pz/jhKY/6ZSLP+ODpT8/CitHVUkgPSA/P+aDp+iIsD8/Pz8/44iiP+OEpj/plIs/44OlPz8KKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0FscGluZSAoVFVJKQorCis/Pz/nvIM/Pz8/5qSk55m4Pz8KKz8/PyJTZW5kaW5nIFByZWZlcmVuY2VzIj8/44SlPz/plJs/CisKKy0gIkRvIE5vdCBTZW5kIEZsb3dlZCBUZXh0Iui5hz/mpKTor7I/Pz8/PworLSAiU3RyaXAgV2hpdGVzcGFjZSBCZWZvcmUgU2VuZGluZyLouYc/5qSk6K+yP+aKvT8/CisKK+iksD8/Pz8/Pz/mtaDoiLU/6K65Pz8/Pz8/Pz/mkLQ/55KH44OmP+aDpz/jhKjLiea2kz/mtbw/Pz/ombk/5omuPz8/P+eJiD/nmbg/Pz8/6Le6Pz8/Pz/mtpM/Q1RSTC1S57yBPz8/Pz8/P+mUmz/mtaPmjI4/P+eAuT8/Pz8KK+eQm+ODpD8/Pz8/5rWg6Le6Pz8/P+ODpT/kvLQ/P+a1oOacteiFkT8/PworCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorRXZvbHV0aW9uIChHVUkpCisKK+a2kz/mtZw/5a+uPz8/Pz8/Pz8/Pz8/Pz8/P+a1o+i3qD/jhKU/Pz8/Pz8/P+eQm+ODpD8/CisKK+iksD8/Pz8/P+KVhT8/5rWg5aCVPz/mpKTnmbg/P1ByZWZvcm1hdAorICDmtaA/Rm9ybWF0LT5IZWFkaW5nLT5QcmVmb3JtYXR0ZWQgKEN0cmwtNyk/Pz8/Pz/lrrjjg6U/6ZSLPz8KKworPz/ot7o/P+a1o+i3qD8/6ZSbPworICBJbnNlcnQtPlRleHQgRmlsZS4uLiAoQWx0LW4geCk/Pz8/P+ODqMuJ5raTPz8/P+a1oOi6sj8/CisKK+a1oz/mnak/Pz8/5rWgPyJkaWZmIC1OcnUgb2xkLmMgbmV3LmMgfCB4Y2xpcCLplJs/Pz8/Pz8/UHJlZm9ybWF06ZSbPz8/6Le6Pz/mtaPot6g/44Sk6IWRPz/mkq4/P+adqT/nkJs/57uuP+eUrz8/Pz8KKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0ttYWlsIChHVUkpCisKK+a2kz/mtZw/5a+uPz8/Pz8/Pz8/Pz8/Pz8/P+a1o+i3qD/jhKU/Pz8/Pz8/P+eQm+ODpD8/Pz8/CisKK+ammz/nkoHjgog/5Ymn55aG5raTP+a2kz9IVE1MPz/nhY4/Pz8/Pz8/Pz8/Pz8/P+mUmz/mtpM/55GVPz8/Pz8/44SlPz8/Pz8KKwor6KSwP+a2lD8/Pz/mtpM/54GPPz8/P+a1oOWJgT8/Pz/ot7o/P+mUmz8/P+OEqT8/5qSk6YCbPz8/Pz/mtpM/55GVPz8/Pz8/4pWEPz8/P+OEpj/jiKM/Pz8/Pz8/P+a2kz8/Pz/nvILombk/55Gw5rCoPz8/5rWjPz8/44SpPz/mtaDmnLXohZHmnYg/Pz/jg6c/P+a1oOiusz8/Pz8/Pz8/Cis/P+aIkj8/5rW8P+eQmj8/Pz8/P+OEpj/jiKM/P+mUmz8/Pz/lp53jgoQ/P+i5hz/mpKTor7I/44SlPz8/Pz/nkJvjg6Q/P+a2lD8/Pz8/Pz8/P+OEpj/jiKM/Pz8/Pz8/P+e7oD8/Pz8/Pz8/P+inhD8/54GP6L6oPz8/Pz8/P+OEqD8/Pz/jhKY/44ijPz8/P+ODpOWKnz8/Pz8/P+a1oOiuuT8/Cis/P+i3uj8/Pz8/54C5P+a3hz/ngJs/5raT6bi/Pz/nu4voo6Q/P+a2kz8/Pz/mtaM/Pz/jhKg/P+e7i+WkuOiFkT8/P+WohuKEgz8/5a+uP+eAuT/plJs/54C5P+WuuOiMrD8/Pz/jhKk/44SoPz8/P+OEpj/jiKM/P+a1nD/plJs/Pz/vvYQ/P+a1oz8/Pz8/Pz/mtaDmg7A/55WMP+iIteeXhT8/PworPz8/Pz/ilYQ/Pz8/44SmP+OIoz8/6ZSbP+a1oz8/Pz/mnak/5raTP+a1vD/mvrbljZ4/6K+y5YehPz8/Pz8/Pz8/Pz/jhKY/44ijPz8/Pz8KKworPz/jhKk/P+a1oOWJgT8/5pC0Pz8/P+mUmz8/Pz8/P+ODqMuJ5raTP+a2lD8/Pz/plJs/Pz/lj6U/P+eUr+WTpT/jhKc/P+eQm+ODpD8/54C5Pz8/P+e7lz/plJs/5raTP+a2kz/mnak/54CbPz8/PygtLS0pPz8/CisKKz8/6Le6Pz8/Pz8iTWVzc2FnZSI/Pz8/Pz8/P++8hD8/6ZSbPz8/Pz8/4pWCPz8/P+ODpj8/5rWg6K65Pz8/P+ODpz8/Pz8/Pz8/5rWjPz8/P+eQm+ODpD8/Pz8/5rWg6LqyPz/mnak/Pz8/5raTP+a2kz/mo7A/5r62Pz8/Pz8/P+akpOeZuD8/5rWjPz8/P+a1oD8KKz8/P+adqT/ngLk/Pz8/57yDP+a1oz8/Pz8/Pz/mtaDot7rnvJPnu5Q/5a6444OlP+mUiz8/Pz8/Pz8/6ZSbP+adqT8/Pz/mtaDjg6XnlKvmtpM/Imluc2VydCBmaWxlIj8/54KsPz8/Pz8KKwor5rWjPz8/P+a1oOODpT8/Pz/jhKU/5Ly0Pz/mnak/R1BHPz8/55KB5Ly0Pz/mtaDorrk/P+a1oz8/Pz8/Pz/lrpM/55Cb44OkPz8/Pz/mv4LmiJI/P+eRlT/mtaPot6g/P0dQRz8/P+eSgeadvz8/5rWgPz8/P+a1oz/mtpPlk4Q/P+Wukz8/Pz8/Pz8/Pz/nu5vmg6c/P+eQm+ODpD8/6ZSbPwor6KSwP+a1oD9HUEfmtpM/Pz8/Pz8/N+a1oz/nvII/Pz8/Pz/mnLU/P+a1o+WkuD8/5rWgPz8/Pz8/Pz8/5p2RPz/mvrY/Pz8/Pz8/CisKK+a/oT8/Pz/mtaM/Pz8/55GVP+a1oOODqT8/5rWg5YmBPz/opLDjiKA/Pz8/Pz8/P+eQm+ODpD8/6ZSbPz8/772EPz/ngY/ljZ4/5oq9Pz8/P+eRsD/lqZo/P+a1oOiuuT8/Pz/ot7o/Pz8/P+a2kz/ngZ4/Pz/RjT8/57uQPz8/PyJTdWdnZXN0IGF1dG9tYXRpYworZGlzcGxheSLplJs/5p2pPz8/5bOwPz/lrpM/Pz8/5rWg6Ii1P+adkT/op4Q/P+eSgeKVhD/mmI8/Pz8/Pz8/6IisPz8KKwor6KSwP+a1oz/nkZU/5reHP+eAmz/ngY8/55GVPz8/Pz8/Pz8/Pz8/P+Wukz8/Pz8/Pz/nkJvjg6Q/P+mUmz/mtaM/Pz8/5rWg44OkPz/lqJE/Pz8/Pz8/55Cb44SnPz8/P+WluD8/Pz/ilYE/Pz8/P+eQm+ODpD8/Pz8/Pz8/5rWg6K65Pz8/P+i3uj8/Pz/lhrI/5amaPz8/Pz8KKyJzYXZlIGFzIj8/P+a1oz8/Pz/mtaDjg6TlqIc/P+OEpD8/5raTP+WojOKEgz8/Pz/lrZg/5ZytPz8/Pz8/Pz/nkJvjg6Q/Pz8/Pz8/P+a1oOiuuT8/5r+hPz8/P+eAuT8/Pz/mtaDjg6Y/772H4oCYPz8/6KSw44igPz/nvIE/Pz8/Pz8/6KSwP+a1oz/lp53vvYc/Pz8/44SlPz8KKz8/P+WuuOi+qT8/57uQPz8/772EPz/mtpM/54C1Pz8/P+mUmz8/P++9hj/oiLXnl4U/Pz8/Pz/mpKTnkbA/P+a1oOODpD8/54CbPz8/P+a1oD8tLeWuuOiMrD8/Pz8/5raTP+a2kz/mnak/Pz/po44/P2J1Z+eQmj/lp7k/Pz/jg6U/6aKBPz9rbWFpbD8/P2J1Z3ppbGxhCivpqp7mnLU/P+eUrz8/Pz/mnak/54GPP+a1vD/nkJo/5r62Pz8/Pz8/Pz8/P+a1oOiItT8/5rWg44OlPz8/Pz/ngLXop4Q/P+a2kz8/P+OEpj/ls7A/P+eSh+ivsj8/Pz8/Pz8/Pz8/55CaP+a3hz/ngJs/Pz8/6ZSbPz8/P+a1oOODpT8/Pz8/5rWjPz8/6JmrPz8/Pz/mtaDot7o/Pz8/6Le6P+advz/mnLU/Pz8/54mIP+eZuD8/CivmtaM/5raTP+WvsD/mtpM/Pz8/5rWgP+a1oD8/Pz8/Pz8/Pz8/P+mAm+i0n+e8gT8/Pz8/Pz8/P+e/oD8/Pz8/55KH5rGHPz8KKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0xvdHVzIE5vdGVzIChHVUkpCisKK+a2kz/nkZU/5rWj6LeoP+OEpT8/Pz8/CisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitNdXR0IChUVUkpCisKK+WvsD/mvrY/TGludXjlr64/Pz8/5rWc5ZOEPz/mtaPot6g/P211dHTngLnjiKE/6aOOPz/plJs/Pz8/5rWg44OoPz8/Pz/ngLk/Pz8/54C5P+WuuOODpD8/Pz8/Pz8/55Sv5ZGKPz/mtZw/Pz8/CisKK011dHTmtpM/Pz8/55SvP+e8gj/mnYg/Pz8/6ZSbPz8/P+a1oOODpD8/57ug4oCyPz/mtaPot6g/44SkPz/mtpQ/57yCP+adiD8/P+OEqT/miJI/P+aQtD/nkofjg6XnlKs/Pz8/Pz8/P+OEpj8/55CbPz8/P+a+ttGDPz8/P+aJrj8/5p2IPz8/44SpP+iXieeUqz8/Pwor5raTP+a2kz8iaW5zZXJ0IGZpbGUiPz8/5qSk55m4Pz/ngLk/Pz8/5rWg44OpPz/mnak/5raTPz8/55GwPz8/Pz/mtaDot7o/P+eAueWcrT8/Pz/nkbA/Pz8/Pz8/44OmPz/mtaDourI/PworCisndmltJ+a1oz/mtpM/bXV0dD8/P+e8gj/mnYg/Pz8/6ZSbPworICBzZXQgZWRpdG9yPSJ2aSIKKworICDmv6E/Pz8/5rWj6LeoPz94Y2xpcOmUmz8/P+aPkj/jg6TkupLmtpM/Pz/miJLmiqQKKyAgOnNldCBwYXN0ZQorICA/Pz/mtpM/Pz8/5raUPz8/Pz8/Pz8/P3NoaWZ0LWluc2VydD8/Pz8/P+a1o+i3qD8/CisgIDpyIGZpbGVuYW1lCisKK+a/oT8/Pz8/P+WuoD8/Pz8/55Cb44OkPz/mtaM/5raT5ZOEPz/lrpM/Pz8/Pz8/Pz8/CisoYSl0dGFjaOWuuOODpD8/Pz8/5a+wP+a/guaWpD8/5raTP+eUrz8/Pz8ic2V0IHBhc3RlIj8/PworCis/Pz/nvIM/Pz8/5qSk55m4Pz8KK+eAuT/mkLQ/55KH44Ok5LqS5qabP+eSgeOCiD/liafnloY/Pz/opLDjiKA/P+WuuOODpD8/Pz8/Cis/P+aDsD8/6ZSbPz8/PyJzZW5kX2NoYXJzZXQi55KB5Ymn55aG5raTPyJ1cy1hc2NpaTo6dXRmLTgi5raUPz8/P+a2kz/mtpM/5raTPz8/Pz8/P+a2k+e7mD8/Pz8/CisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitQaW5lIChUVUkpCisKK1BpbmXmnak/Pz/nu5g/P+a2kz/mtZw/57uM54OYP+eFjj8/Pz8/Pz8/5qOwP+mUmz/mtaM/Pz8/5p2pP+a1nD8/P+advz/jhKU/P+eSh+ODqT/lgJ8/P+a3hz/mvrY/5rWcPz8/PworCivmv6E/Pz8/Pz8/5rWg44OvPz/nkofonILlqIc/Pz9hbHBpbmUocGluZT8/P+e8gdGEP+iDrz8/KQorCis/Pz/nvIM/Pz8/5qSk55m4Pz8KKy0gPz8/5p2pPz8/Pz8/Pz8/Pz8/P+eRlT/lqJE/Pz/jgoY/P+e7iz8/Pz8/Pz8KKy0gIm5vLXN0cmlwLXdoaXRlc3BhY2UtYmVmb3JlLXNlbmQiPz8/5qSk6YCbPz8/Pz8/Pz/nkZU/Pz8/Pz8/CisKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1N5bHBoZWVkIChHVUkpCisKKy0gPz8/5a6TPz8/Pz8/Pz8/P+a1oOODpT8/5r+C55WMPz/lrrjjg6Q/P+mUmz8/Pz8/Pz/mtaPot6g/44SpPz/mtaDorrk/Pz8/PworLSA/Pz/nkoHplZDlqIc/P+OEpT8/Pz/jhKc/P+e8gj/mnYg/Pz/jhKM/PworLSDngLXpgJs/Pz8/P+iksD/mnYg/5r62Pz8/5aCVPz/nlK/lkYo/Pz8/PworLSDmv6E/Pz8/Pz8/5p2pP25vbi1TU0zmnak/Pz/jg68/Pz8/P+WoiT/mtaPot6g/P1RMUyBTTVRQPz8/Pz8/Pz8/CistID8/44SnPz8/Pz/nu5A/Pz/vvYTohZE/Pz/mtpM/5raTP+WvsD8/Pz8/P+OEpz8/cnVsZXIgYmFyPz8/CistIOe8gT8/P+advz8/Pz8/5raTP+Woo+ivsj8/Pz/mnb8/P+eBj+WPmD8/5rW8P+Wnne+9h+KAmD8/P+a1nD/nkZnvvYY/5Ymn44GaPz8/Pz8/CisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitUaHVuZGVyYmlyZCAoR1VJKQorCivmpps/55KB44KGPz8/P+WFuD8/6ZSbP3RodW5kZXJiaXJk5a+wP+eAueinhD8/Pz8/Pz8/Pz8/Pz8/6ZSbP+a1oz8/Pz/mnak/Pz8/5raTP+a1nD8/P+inhD8/Pz8/5rWg44Ol5bexPz/ot7o/Pz8/P+WvsD8/P+adkeOCvT8/PworCistID8/44SnP+OEpj/ls7A/Pz8/55avP+WJp+eWhj8/P+mUmz/nvIE/Pz8/Pz8/54C16K+yPz/plJs/5raTP+eRlT8/Pz8/Pz8iQ29tcG9zZSBtZXNzYWdlcyBpbiBIVE1MIGZvcm1hdCI/Pz8KKworLSDnvII/5p2IP+a1oz8/Pz9UaHVuZGVyYmlyZD8/P+e8gz/nkoHliafnloY/P+ODpOWoh+eAuT/mtpM/55GVPz8/P+eQmz/mtaPot6g/P+mUmz91c2VyX3ByZWYoIm1haWxuZXdzLndyYXBsZW5ndGgiLCAwKTsKKworLSDnvII/5p2IP+a1oz8/Pz9UaHVuZGVyYmlyZD8/P+e8gz/nkoHliafnlobplJs/5rWj5Z6uPz/mtpM/55GVP+a1o+i3qD8/ImZvcm1hdD1mbG93ZWQiPz/nhY4/P+mUmz91c2VyX3ByZWYoIm1haWxuZXdzLgorICBzZW5kX3BsYWludGV4dF9mbG93ZWQiLCBmYWxzZSk7CisKKy0g5rWjPz8/P+eRlT/mtaM/VGh1bmRlcmJpcmQ/Pz/mtpPmtKo/Pz8/Pz8/54WOPz8/P+eRsD8/6ZSbPworICDmv6E/Pz8/5qabP+eSgeOChj8/Pz/lhbg/P+a1oz/mtpQ/Pz8/Pz8/Pz8/SFRNTD8/54WOPz/plJs/Pz/vvYQ/Pz8/P+WvsD8/P+S/sT8/5rWgP+a1oD/mtaA/Pz8/5qOwPz8/Pz8/P+a2kz8/Pz/lppc/5raTPz8/Pz8/PyJQcmVmb3JtYXQiPz/nhY4/Pz8/PworICDmv6E/Pz8/5qabP+eSgeOChj8/Pz/lhbg/P+a1oz/mtpQ/Pz8/Pz8/Pz8/Pz8/Pz8/Pz/nhY4/P+mUmz/mtaM/5raTP+WvsD8/Pz/ngLk/Pz/pgJvotJ9IVE1MPz/nhY4/P+mUmz/mtaA/5rWgP+a1oz/mtpPovbA/P+WohuKEgz/RhT8/6ZSbPz8/44Ok5YqfPz8/Pz/mia4/P+WokT8/Pz/plJs/CisgID8/6Le6Pz/lr67lk4Q/5py15aiH54C5Pz8/Pz8/54mIPz8/Pz8/P+eFjj8/6ZSbPz8/Pz8/P+eAuT/ngY/lj5g/Pz8/P+eQmz8/Pz/nkZU/54C5Pz8/5p2/Pz/plJs/Pz/jhKU/P+a3h++8hD8/Pz/ngqw/P+a2kz/mtaPot6g/P3NoaWZ0Pz8/Pz/jg6TlqIfngLk/Pz8/5raTP0hUTUwKKyAgPz/nhY4/P+mUmz8/P+i3uj8/Pz8/5qOwPz8/Pz8/P+a2kz8/Pz/lppc/5raTPz8/Pz8/PyJQcmVmb3JtYXQiPz/nhY4/Pz8/PworCistID8/P+eSgemVkOWohz8/44SlPz8/P+OEpz8/57yCP+adiD8/Pz/plJs/CisgID8/P+eAtT9UaHVuZGVyYmlyZD8/P+eQm+ODpD8/Pz8/57ugPz8/Pz8/Pz8/6KeEPz/ngY/ovqg/P+a1o+i3qD/jhKQ/P+a2kz8iZXh0ZXJuYWwgZWRpdG9yIj8/4pWBPz/plJs/Pz/ot7o/P+a1o+i3qD/jhKQ/Pz8/Pz8/P+WohuOIoj8/CisgICRFRElUT1I/P+ODqD/or7I/Pz8/Pz8/Pz8/P+mqnuaDsMuJ5raTPz8/54mIPz8/Pz/mtpM/Pz8/55GVP+eAuT8/P+advz8/6ZSbPz8/P+a1oOODpD8/5p2e6JeJ6Iuf5raTP+eAuT/nkYE/5p2pP+a2kz8/P+KVgT8/6ZSbPz8/6Le6Pz/lqKPor7I/P+a2kz/mtpM/5rWj6LeoP+OEpT8/Pz8/CisgID8/Pz8/P1ZpZXctPlRvb2xiYXJzLT5DdXN0b21pemUuLi4/Pz8/Pz/opLA/5rWjP+a2lD8/Pz/mt4fihIM/Pz8/Pz8/6Le6Pz/mtaA/5rWgPz8/55GwP+ivsj8/54GP5Y2ePz/mtaDjg6Q/Pz8/PworCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorVGtSYXQgKEdVSSkKKworPz8/5rWg44Ok5aiHPz/jhKU/Pz8/P+a1o+i3qD8/Ikluc2VydCBmaWxlLi4uIj8/Pz8/P+a+tj8/P+OEpz8/57yCP+adiD8/P+OEoz8/CisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitHbWFpbCAoV2ViIEdVSSkKKwor5raTP+eRlT/mtaPot6g/44SlPz8/Pz8/Pz/nkJvjg6Q/Pz8/PworCitHbWFpbOe8gz/mpKTpnZs/44ihP+mjjj8/Pz8/Pz/jhKU/54mIPz8/P+aDsOOAg+e7lz/mnZ4/Pz8/5raT6Jm54pSWPz/nrLo/PworCis/P+eVjD/ot7o/5oOw44CD57uXP+adnj8/Pz/mtpPombnilJY/P+WluD8/5qOwPz8/P+a1oOODqD8/5r62Pz8/44SnPz/mnYg/Pz/jhKjQkj8/5625Pz8/Pz8/P+i3uj8/5p2pP+a1vD/mtaPot6g/44SlPz/mnZ4/Pz/jiKM/Pz8/P+Wnoz/nkJs/Pz8/Pz8/5raTPzc45raTP+eAmz/nu5c/Pz8/CisKKz8/P+a2kz/mtpM/Pz8/5qOwPz8/P0dtYWls5p2pP+a1vD8/Pz/mtaDorrM/P+a2kz8/Pz9BU0NJST8/P+eAmz/nu5c/Pz8/5reH4oSDPz8/P+mAm+i0n2Jhc2U2NOe8gj8/Pz8/Pz/ngLk/Pz8/5raTP+eRl+Werj8/Pz8/Pz8/5aiG0YTluormtZzombk/Pz8/P+eAmz8/Pz8KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggMWUyNzI0ZS4uNDlhMGJmMyAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTQwNSw4ICs0MDUsOCBAQAogRjoJc291bmQvb3NzL2FlZHNwMTYuYwogCiBBRkZTIEZJTEUgU1lTVEVNCi1NOglSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KLVM6CU1haW50YWluZWQKK0w6CWxpbnV4LWZzZGV2ZWxAdmdlci5rZXJuZWwub3JnCitTOglPcnBoYW4KIEY6CURvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYWZmcy50eHQKIEY6CWZzL2FmZnMvCiAKQEAgLTEwMzIsMTIgKzEwMzIsMTMgQEAKIFM6CU1haW50YWluZWQKIEY6CWFyY2gvYXJtL21hY2gtczNjNjR4eC8KIAotQVJNL1M1UCBBUk0gQVJDSElURUNUVVJFUworQVJNL1M1UCBFWFlOT1MgQVJNIEFSQ0hJVEVDVFVSRVMKIE06CUt1a2ppbiBLaW0gPGtnZW5lLmtpbUBzYW1zdW5nLmNvbT4KIEw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBMOglsaW51eC1zYW1zdW5nLXNvY0B2Z2VyLmtlcm5lbC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJTWFpbnRhaW5lZAogRjoJYXJjaC9hcm0vbWFjaC1zNXAqLworRjoJYXJjaC9hcm0vbWFjaC1leHlub3MqLwogCiBBUk0vU0FNU1VORyBNT0JJTEUgTUFDSElORSBTVVBQT1JUCiBNOglLeXVuZ21pbiBQYXJrIDxreXVuZ21pbi5wYXJrQHNhbXN1bmcuY29tPgpAQCAtMTIzMSwxMyArMTIzMiw2IEBACiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay8KIAotQVRIRVJPUyBBUjkxNzAgV0lSRUxFU1MgRFJJVkVSCi1NOglDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUB3ZWIuZGU+Ci1MOglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcKLVc6CWh0dHA6Ly93aXJlbGVzcy5rZXJuZWwub3JnL2VuL3VzZXJzL0RyaXZlcnMvYXI5MTcwCi1TOglPYnNvbGV0ZQotRjoJZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC8KLQogQ0FSTDkxNzAgTElOVVggQ09NTVVOSVRZIFdJUkVMRVNTIERSSVZFUgogTToJQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAZ29vZ2xlbWFpbC5jb20+CiBMOglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcKQEAgLTI4MDgsNDIgKzI4MDIsMjMgQEAKIE06CUdyYW50IExpa2VseSA8Z3JhbnQubGlrZWx5QHNlY3JldGxhYi5jYT4KIFM6CU1haW50YWluZWQKIFQ6CWdpdCBnaXQ6Ly9naXQuc2VjcmV0bGFiLmNhL2dpdC9saW51eC0yLjYuZ2l0Ci1GOglEb2N1bWVudGF0aW9uL2dwaW8vZ3Bpby50eHQKK0Y6CURvY3VtZW50YXRpb24vZ3Bpby50eHQKIEY6CWRyaXZlcnMvZ3Bpby8KIEY6CWluY2x1ZGUvbGludXgvZ3BpbyoKIAorR1JFIERFTVVMVElQTEVYRVIgRFJJVkVSCitNOglEbWl0cnkgS296bG92IDx4ZWJAbWFpbC5ydT4KK0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKK0Y6CW5ldC9pcHY0L2dyZS5jCitGOglpbmNsdWRlL25ldC9ncmUuaAorCiBHUkVUSCAxMC8xMDAvMUcgRXRoZXJuZXQgTUFDIGRldmljZSBkcml2ZXIKIE06CUtyaXN0b2ZmZXIgR2xlbWJvIDxrcmlzdG9mZmVyQGdhaXNsZXIuY29tPgogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9uZXQvZ3JldGgqCiAKLUhBUkQgRFJJVkUgQUNUSVZFIFBST1RFQ1RJT04gU1lTVEVNIChIREFQUykgRFJJVkVSCi1NOglGcmFuayBTZWlkZWwgPGZyYW5rQGYtc2VpZGVsLmRlPgotTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKLVc6CWh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgva2VybmVsL3Blb3BsZS9mc2VpZGVsL2hkYXBzLwotUzoJTWFpbnRhaW5lZAotRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvaGRhcHMuYwotCi1IV1BPSVNPTiBNRU1PUlkgRkFJTFVSRSBIQU5ETElORwotTToJQW5kaSBLbGVlbiA8YW5kaUBmaXJzdGZsb29yLm9yZz4KLUw6CWxpbnV4LW1tQGt2YWNrLm9yZwotVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9hay9saW51eC1tY2UtMi42LmdpdCBod3BvaXNvbgotUzoJTWFpbnRhaW5lZAotRjoJbW0vbWVtb3J5LWZhaWx1cmUuYwotRjoJbW0vaHdwb2lzb24taW5qZWN0LmMKLQotSFlQRVJWSVNPUiBWSVJUVUFMIENPTlNPTEUgRFJJVkVSCi1MOglsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZwotUzoJT2RkIEZpeGVzCi1GOglkcml2ZXJzL3R0eS9odmMvCi0KLWlTQ1NJIEJPT1QgRklSTVdBUkUgVEFCTEUgKGlCRlQpIERSSVZFUgotTToJUGV0ZXIgSm9uZXMgPHBqb25lc0ByZWRoYXQuY29tPgotTToJS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxrb25yYWRAa2VybmVsLm9yZz4KLVM6CU1haW50YWluZWQKLUY6CWRyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdCoKLQogR1NQQ0EgRklORVBJWCBTVUJEUklWRVIKIE06CUZyYW5rIFphZ28gPGZyYW5rQHphZ28ubmV0PgogTDoJbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnCkBAIC0yODk0LDYgKzI4NjksMjYgQEAKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvCiAKK0hBUkQgRFJJVkUgQUNUSVZFIFBST1RFQ1RJT04gU1lTVEVNIChIREFQUykgRFJJVkVSCitNOglGcmFuayBTZWlkZWwgPGZyYW5rQGYtc2VpZGVsLmRlPgorTDoJcGxhdGZvcm0tZHJpdmVyLXg4NkB2Z2VyLmtlcm5lbC5vcmcKK1c6CWh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgva2VybmVsL3Blb3BsZS9mc2VpZGVsL2hkYXBzLworUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvaGRhcHMuYworCitIV1BPSVNPTiBNRU1PUlkgRkFJTFVSRSBIQU5ETElORworTToJQW5kaSBLbGVlbiA8YW5kaUBmaXJzdGZsb29yLm9yZz4KK0w6CWxpbnV4LW1tQGt2YWNrLm9yZworVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9hay9saW51eC1tY2UtMi42LmdpdCBod3BvaXNvbgorUzoJTWFpbnRhaW5lZAorRjoJbW0vbWVtb3J5LWZhaWx1cmUuYworRjoJbW0vaHdwb2lzb24taW5qZWN0LmMKKworSFlQRVJWSVNPUiBWSVJUVUFMIENPTlNPTEUgRFJJVkVSCitMOglsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZworUzoJT2RkIEZpeGVzCitGOglkcml2ZXJzL3R0eS9odmMvCisKIEhBUkRXQVJFIE1PTklUT1JJTkcKIE06CUplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgogTToJR3VlbnRlciBSb2VjayA8Z3VlbnRlci5yb2Vja0Blcmljc3Nvbi5jb20+CkBAIC0yOTQ0LDggKzI5MzksOCBAQAogRjoJaW5jbHVkZS9saW51eC9jY2lzc19pb2N0bC5oCiAKIEhGUyBGSUxFU1lTVEVNCi1NOglSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KLVM6CU1haW50YWluZWQKK0w6CWxpbnV4LWZzZGV2ZWxAdmdlci5rZXJuZWwub3JnCitTOglPcnBoYW4KIEY6CURvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaGZzLnR4dAogRjoJZnMvaGZzLwogCkBAIC0zMzYxLDYgKzMzNTYsMTIgQEAKIEY6CWRyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS8KIEY6CWluY2x1ZGUvbGludXgvd2ltYXgvaTI0MDBtLmgKIAorSU5URUwgV0lSRUxFU1MgMzk0NUFCRy9CRywgNDk2NUFHTiAoaXdsZWdhY3kpCitNOglTdGFuaXNsYXcgR3J1c3prYSA8c2dydXN6a2FAcmVkaGF0LmNvbT4KK0w6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZworUzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS8KKwogSU5URUwgV0lSRUxFU1MgV0lGSSBMSU5LIChpd2x3aWZpKQogTToJV2V5LVlpIEd1eSA8d2V5LXlpLncuZ3V5QGludGVsLmNvbT4KIE06CUludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgpAQCAtMzQ3Nyw2ICszNDc4LDEyIEBACiBGOglkcml2ZXJzL3BucC9pc2FwbnAvCiBGOglpbmNsdWRlL2xpbnV4L2lzYXBucC5oCiAKK2lTQ1NJIEJPT1QgRklSTVdBUkUgVEFCTEUgKGlCRlQpIERSSVZFUgorTToJUGV0ZXIgSm9uZXMgPHBqb25lc0ByZWRoYXQuY29tPgorTToJS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxrb25yYWRAa2VybmVsLm9yZz4KK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdCoKKwogSVNDU0kKIE06CU1pa2UgQ2hyaXN0aWUgPG1pY2hhZWxjQGNzLndpc2MuZWR1PgogTDoJb3Blbi1pc2NzaUBnb29nbGVncm91cHMuY29tCkBAIC0zODA2LDcgKzM4MTMsNyBAQAogTDoJbGd1ZXN0QGxpc3RzLm96bGFicy5vcmcKIFc6CWh0dHA6Ly9sZ3Vlc3Qub3psYWJzLm9yZy8KIFM6CU9kZCBGaXhlcwotRjoJRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvCitGOglEb2N1bWVudGF0aW9uL3ZpcnR1YWwvbGd1ZXN0LwogRjoJYXJjaC94ODYvbGd1ZXN0LwogRjoJZHJpdmVycy9sZ3Vlc3QvCiBGOglpbmNsdWRlL2xpbnV4L2xndWVzdCouaApAQCAtMzk5Myw3ICs0MDAwLDYgQEAKIAogTTY4SyBBUkNISVRFQ1RVUkUKIE06CUdlZXJ0IFV5dHRlcmhvZXZlbiA8Z2VlcnRAbGludXgtbTY4ay5vcmc+Ci1NOglSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KIEw6CWxpbnV4LW02OGtAbGlzdHMubGludXgtbTY4ay5vcmcKIFc6CWh0dHA6Ly93d3cubGludXgtbTY4ay5vcmcvCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2dlZXJ0L2xpbnV4LW02OGsuZ2l0CkBAIC00Mzc4LDYgKzQzODQsNyBAQAogRjoJbmV0L2lwdjQvCiBGOgluZXQvaXB2Ni8KIEY6CWluY2x1ZGUvbmV0L2lwKgorRjoJYXJjaC94ODYvbmV0LyoKIAogTkVUV09SS0lORyBbTEFCRUxFRF0gKE5ldExhYmVsLCBDSVBTTywgTGFiZWxlZCBJUHNlYywgU0VDTUFSSykKIE06CVBhdWwgTW9vcmUgPHBhdWwubW9vcmVAaHAuY29tPgpAQCAtNDk4OCw2ICs0OTk1LDEzIEBACiBGOglkcml2ZXJzL3Bwcy8KIEY6CWluY2x1ZGUvbGludXgvcHBzKi5oCiAKK1BQVFAgRFJJVkVSCitNOglEbWl0cnkgS296bG92IDx4ZWJAbWFpbC5ydT4KK0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvbmV0L3BwdHAuYworVzoJaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9hY2NlbC1wcHRwCisKIFBSRUVNUFRJQkxFIEtFUk5FTAogTToJUm9iZXJ0IExvdmUgPHJtbEB0ZWNoOS5uZXQ+CiBMOglrcHJlZW1wdC10ZWNoQGxpc3RzLnNvdXJjZWZvcmdlLm5ldApAQCAtNTM5Niw3ICs1NDEwLDcgQEAKIEY6CWluY2x1ZGUvbWVkaWEvKjcxNDYqCiAKIFNBTVNVTkcgQVVESU8gKEFTb0MpIERSSVZFUlMKLU06CUphc3NpIEJyYXIgPGphc3NpLmJyYXJAc2Ftc3VuZy5jb20+CitNOglKYXNzaSBCcmFyIDxqYXNzaXNpbmdoYnJhckBnbWFpbC5jb20+CiBMOglhbHNhLWRldmVsQGFsc2EtcHJvamVjdC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogUzoJU3VwcG9ydGVkCiBGOglzb3VuZC9zb2Mvc2Ftc3VuZwpAQCAtNTQxNyw2ICs1NDMxLDcgQEAKIEY6CWtlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKIEY6CWtlcm5lbC90aW1lL3RpbWUqLmMKIEY6CWtlcm5lbC90aW1lL250cC5jCitGOglkcml2ZXJzL2Nsb2Nrc291cmNlCiAKIFRMRzIzMDAgVklERU80TElOVVgtMiBEUklWRVIKIE06CUh1YW5nIFNoaWppZSA8c2hpamllOEBnbWFpbC5jb20+CkBAIC01NTk3LDkgKzU2MTIsOSBAQAogRjoJaW5jbHVkZS9saW51eC9saWJhdGEuaAogCiBTRVJWRVIgRU5HSU5FUyAxMEdicHMgaVNDU0kgLSBCbGFkZUVuZ2luZSAyIERSSVZFUgotTToJSmF5YW1vaGFuIEthbGxpY2thbCA8amF5YW1vaGFua0BzZXJ2ZXJlbmdpbmVzLmNvbT4KK006CUpheWFtb2hhbiBLYWxsaWNrYWwgPGpheWFtb2hhbi5rYWxsaWNrYWxAZW11bGV4LmNvbT4KIEw6CWxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnCi1XOglodHRwOi8vd3d3LnNlcnZlcmVuZ2luZXMuY29tCitXOglodHRwOi8vd3d3LmVtdWxleC5jb20KIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9zY3NpL2JlMmlzY3NpLwogCkBAIC01ODE3LDYgKzU4MzIsMTMgQEAKIEY6CWRyaXZlcnMvc3NiLwogRjoJaW5jbHVkZS9saW51eC9zc2IvCiAKK0JST0FEQ09NIFNQRUNJRklDIEFNQkEgRFJJVkVSIChCQ01BKQorTToJUmFmYcWCIE1pxYJlY2tpIDx6YWplYzVAZ21haWwuY29tPgorTDoJbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnCitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL2JjbWEvCitGOglpbmNsdWRlL2xpbnV4L2JjbWEvCisKIFNPTlkgVkFJTyBDT05UUk9MIERFVklDRSBEUklWRVIKIE06CU1hdHRpYSBEb25naWxpIDxtYWxhdHRpYUBsaW51eC5pdD4KIEw6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCkBAIC02NTU1LDcgKzY1NzcsNyBAQAogRjoJZHJpdmVycy91c2IvaG9zdC91aGNpKgogCiBVU0IgIlVTQk5FVCIgRFJJVkVSIEZSQU1FV09SSwotTToJRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitNOglPbGl2ZXIgTmV1a3VtIDxvbmV1a3VtQHN1c2UuZGU+CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vd3d3LmxpbnV4LXVzYi5vcmcvdXNibmV0CiBTOglNYWludGFpbmVkCkBAIC02NjE3LDcgKzY2MzksNyBAQAogTDoJdXNlci1tb2RlLWxpbnV4LXVzZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBXOglodHRwOi8vdXNlci1tb2RlLWxpbnV4LnNvdXJjZWZvcmdlLm5ldAogUzoJTWFpbnRhaW5lZAotRjoJRG9jdW1lbnRhdGlvbi91bWwvCitGOglEb2N1bWVudGF0aW9uL3ZpcnR1YWwvdW1sLwogRjoJYXJjaC91bS8KIEY6CWZzL2hvc3Rmcy8KIEY6CWZzL2hwcGZzLwpAQCAtNjkyMSw2ICs2OTQzLDE4IEBACiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4NgogCitYRU4gSFlQRVJWSVNPUiBJTlRFUkZBQ0UKK006CUplcmVteSBGaXR6aGFyZGluZ2UgPGplcmVteS5maXR6aGFyZGluZ2VAY2l0cml4LmNvbT4KK006CUtvbnJhZCBSemVzenV0ZWsgV2lsayA8a29ucmFkLndpbGtAb3JhY2xlLmNvbT4KK0w6CXhlbi1kZXZlbEBsaXN0cy54ZW5zb3VyY2UuY29tIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKK0w6CXZpcnR1YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCitTOglTdXBwb3J0ZWQKK0Y6CWFyY2gveDg2L3hlbi8KK0Y6CWRyaXZlcnMvKi94ZW4tKmZyb250LmMKK0Y6CWRyaXZlcnMveGVuLworRjoJYXJjaC94ODYvaW5jbHVkZS9hc20veGVuLworRjoJaW5jbHVkZS94ZW4vCisKIFhFTiBORVRXT1JLIEJBQ0tFTkQgRFJJVkVSCiBNOglJYW4gQ2FtcGJlbGwgPGlhbi5jYW1wYmVsbEBjaXRyaXguY29tPgogTDoJeGVuLWRldmVsQGxpc3RzLnhlbnNvdXJjZS5jb20gKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQpAQCAtNjk0MiwxOCArNjk3Niw2IEBACiBGOglhcmNoL3g4Ni94ZW4vKnN3aW90bGIqCiBGOglkcml2ZXJzL3hlbi8qc3dpb3RsYioKIAotWEVOIEhZUEVSVklTT1IgSU5URVJGQUNFCi1NOglKZXJlbXkgRml0emhhcmRpbmdlIDxqZXJlbXkuZml0emhhcmRpbmdlQGNpdHJpeC5jb20+Ci1NOglLb25yYWQgUnplc3p1dGVrIFdpbGsgPGtvbnJhZC53aWxrQG9yYWNsZS5jb20+Ci1MOgl4ZW4tZGV2ZWxAbGlzdHMueGVuc291cmNlLmNvbSAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCi1MOgl2aXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwotUzoJU3VwcG9ydGVkCi1GOglhcmNoL3g4Ni94ZW4vCi1GOglkcml2ZXJzLyoveGVuLSpmcm9udC5jCi1GOglkcml2ZXJzL3hlbi8KLUY6CWFyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi8KLUY6CWluY2x1ZGUveGVuLwotCiBYRlMgRklMRVNZU1RFTQogUDoJU2lsaWNvbiBHcmFwaGljcyBJbmMKIE06CUFsZXggRWxkZXIgPGFlbGRlckBzZ2kuY29tPgpAQCAtNzAyMywyMCArNzA0NSw2IEBACiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3R0eS9zZXJpYWwvenMuKgogCi1HUkUgREVNVUxUSVBMRVhFUiBEUklWRVIKLU06CURtaXRyeSBLb3psb3YgPHhlYkBtYWlsLnJ1PgotTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwotUzoJTWFpbnRhaW5lZAotRjoJbmV0L2lwdjQvZ3JlLmMKLUY6CWluY2x1ZGUvbmV0L2dyZS5oCi0KLVBQVFAgRFJJVkVSCi1NOglEbWl0cnkgS296bG92IDx4ZWJAbWFpbC5ydT4KLUw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKLVM6CU1haW50YWluZWQKLUY6CWRyaXZlcnMvbmV0L3BwdHAuYwotVzoJaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9hY2NlbC1wcHRwCi0KIFRIRSBSRVNUCiBNOglMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmc+CiBMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IGI5NjdiOTYuLmEwMzQ0YTggMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAogVkVSU0lPTiA9IDIKIFBBVENITEVWRUwgPSA2CiBTVUJMRVZFTCA9IDM5Ci1FWFRSQVZFUlNJT04gPSAtcmM0CitFWFRSQVZFUlNJT04gPQogTkFNRSA9IEZsZXNoLUVhdGluZyBCYXRzIHdpdGggRmFuZ3MKIAogIyAqRE9DVU1FTlRBVElPTioKQEAgLTEyNjgsNiArMTI2OCw3IEBACiAJQGVjaG8gICcgIG1ha2UgQz0xICAgW3RhcmdldHNdIENoZWNrIGFsbCBjIHNvdXJjZSB3aXRoICQkQ0hFQ0sgKHNwYXJzZSBieSBkZWZhdWx0KScKIAlAZWNobyAgJyAgbWFrZSBDPTIgICBbdGFyZ2V0c10gRm9yY2UgY2hlY2sgb2YgYWxsIGMgc291cmNlIHdpdGggJCRDSEVDSycKIAlAZWNobyAgJyAgbWFrZSBXPTEgICBbdGFyZ2V0c10gRW5hYmxlIGV4dHJhIGdjYyBjaGVja3MnCisJQGVjaG8gICcgIG1ha2UgUkVDT1JETUNPVU5UX1dBUk49MSBbdGFyZ2V0c10gV2FybiBhYm91dCBpZ25vcmVkIG1jb3VudCBzZWN0aW9ucycKIAlAZWNobyAgJycKIAlAZWNobyAgJ0V4ZWN1dGUgIm1ha2UiIG9yICJtYWtlIGFsbCIgdG8gYnVpbGQgYWxsIHRhcmdldHMgbWFya2VkIHdpdGggWypdICcKIAlAZWNobyAgJ0ZvciBmdXJ0aGVyIGluZm8gc2VlIHRoZSAuL1JFQURNRSBmaWxlJwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggMDU4OTM3Yi4uYjE4MzQxNiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC00NTIsMTAgKzQ1MiwxNCBAQAogI2RlZmluZSBfX05SX2Zhbm90aWZ5X2luaXQJCTQ5NAogI2RlZmluZSBfX05SX2Zhbm90aWZ5X21hcmsJCTQ5NQogI2RlZmluZSBfX05SX3BybGltaXQ2NAkJCTQ5NgorI2RlZmluZSBfX05SX25hbWVfdG9faGFuZGxlX2F0CQk0OTcKKyNkZWZpbmUgX19OUl9vcGVuX2J5X2hhbmRsZV9hdAkJNDk4CisjZGVmaW5lIF9fTlJfY2xvY2tfYWRqdGltZQkJNDk5CisjZGVmaW5lIF9fTlJfc3luY2ZzCQkJNTAwCiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNkZWZpbmUgTlJfU1lTQ0FMTFMJCQk0OTcKKyNkZWZpbmUgTlJfU1lTQ0FMTFMJCQk1MDEKIAogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzdGJscy5TIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzdGJscy5TCmluZGV4IGE2YTFkZTkuLjE1Zjk5OWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c3RibHMuUworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXN0YmxzLlMKQEAgLTQ5OCwyMyArNDk4LDI3IEBACiAJLnF1YWQgc3lzX25pX3N5c2NhbGwJCQkvKiBzeXNfdGltZXJmZCAqLwogCS5xdWFkIHN5c19ldmVudGZkCiAJLnF1YWQgc3lzX3JlY3ZtbXNnCi0JLnF1YWQgc3lzX2ZhbGxvY2F0ZQkJCQkvKiA0ODAgKi8KKwkucXVhZCBzeXNfZmFsbG9jYXRlCQkJLyogNDgwICovCiAJLnF1YWQgc3lzX3RpbWVyZmRfY3JlYXRlCiAJLnF1YWQgc3lzX3RpbWVyZmRfc2V0dGltZQogCS5xdWFkIHN5c190aW1lcmZkX2dldHRpbWUKIAkucXVhZCBzeXNfc2lnbmFsZmQ0Ci0JLnF1YWQgc3lzX2V2ZW50ZmQyCQkJCS8qIDQ4NSAqLworCS5xdWFkIHN5c19ldmVudGZkMgkJCS8qIDQ4NSAqLwogCS5xdWFkIHN5c19lcG9sbF9jcmVhdGUxCiAJLnF1YWQgc3lzX2R1cDMKIAkucXVhZCBzeXNfcGlwZTIKIAkucXVhZCBzeXNfaW5vdGlmeV9pbml0MQotCS5xdWFkIHN5c19wcmVhZHYJCQkJLyogNDkwICovCisJLnF1YWQgc3lzX3ByZWFkdgkJCS8qIDQ5MCAqLwogCS5xdWFkIHN5c19wd3JpdGV2CiAJLnF1YWQgc3lzX3J0X3Rnc2lncXVldWVpbmZvCiAJLnF1YWQgc3lzX3BlcmZfZXZlbnRfb3BlbgogCS5xdWFkIHN5c19mYW5vdGlmeV9pbml0Ci0JLnF1YWQgc3lzX2Zhbm90aWZ5X21hcmsJCQkJLyogNDk1ICovCisJLnF1YWQgc3lzX2Zhbm90aWZ5X21hcmsJCQkvKiA0OTUgKi8KIAkucXVhZCBzeXNfcHJsaW1pdDY0CisJLnF1YWQgc3lzX25hbWVfdG9faGFuZGxlX2F0CisJLnF1YWQgc3lzX29wZW5fYnlfaGFuZGxlX2F0CisJLnF1YWQgc3lzX2Nsb2NrX2FkanRpbWUKKwkucXVhZCBzeXNfc3luY2ZzCQkJLyogNTAwICovCiAKIAkuc2l6ZSBzeXNfY2FsbF90YWJsZSwgLiAtIHN5c19jYWxsX3RhYmxlCiAJLnR5cGUgc3lzX2NhbGxfdGFibGUsIEBvYmplY3QKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3RpbWUuYyBiL2FyY2gvYWxwaGEva2VybmVsL3RpbWUuYwppbmRleCA5MThlOGUwLi44MThlNzRlIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvdGltZS5jCkBAIC0zNzUsOCArMzc1LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHJlZ2lzdGVyX3JwY2NfY2xvY2tzb3VyY2UobG9uZyBjeWNsZV9mcmVxKQogewotCWNsb2Nrc291cmNlX2NhbGNfbXVsdF9zaGlmdCgmY2xvY2tzb3VyY2VfcnBjYywgY3ljbGVfZnJlcSwgNCk7Ci0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX3JwY2MpOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZjbG9ja3NvdXJjZV9ycGNjLCBjeWNsZV9mcmVxKTsKIH0KICNlbHNlIC8qICFDT05GSUdfU01QICovCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVnaXN0ZXJfcnBjY19jbG9ja3NvdXJjZShsb25nIGN5Y2xlX2ZyZXEpCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9hbHBoYS9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA0MzNiZTJhLi4zZDg5MGE5IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTQ2LDYgKzQ2LDcgQEAKIAlfX2luaXRfZW5kID0gLjsKIAkvKiBGcmVlZCBhZnRlciBpbml0IGVuZHMgaGVyZSAqLwogCisJX3NkYXRhID0gLjsJLyogU3RhcnQgb2YgcncgZGF0YSBzZWN0aW9uICovCiAJX2RhdGEgPSAuOwogCVJXX0RBVEFfU0VDVElPTihMMV9DQUNIRV9CWVRFUywgUEFHRV9TSVpFLCBUSFJFQURfU0laRSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IDhlYmJiNTEuLjBjNjg1MmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTc0LDcgKzc0LDcgQEAKIFpCU1NBRERSCTo9ICQoQ09ORklHX1pCT09UX1JPTV9CU1MpCiBlbHNlCiBaVEVYVEFERFIJOj0gMAotWkJTU0FERFIJOj0gQUxJR04oNCkKK1pCU1NBRERSCTo9IEFMSUdOKDgpCiBlbmRpZgogCiBTRURGTEFHUwk9IHMvVEVYVF9TVEFSVC8kKFpURVhUQUREUikvO3MvQlNTX1NUQVJULyQoWkJTU0FERFIpLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKaW5kZXggYWRmNTgzYy4uNDlmNWIyZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUworKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCkBAIC0xNzksMTUgKzE3OSwxNCBAQAogCQlibAljYWNoZV9vbgogCiByZXN0YXJ0OglhZHIJcjAsIExDMAotCQlsZG1pYQlyMCwge3IxLCByMiwgcjMsIHI1LCByNiwgcjksIHIxMSwgcjEyfQotCQlsZHIJc3AsIFtyMCwgIzMyXQorCQlsZG1pYQlyMCwge3IxLCByMiwgcjMsIHI2LCByOSwgcjExLCByMTJ9CisJCWxkcglzcCwgW3IwLCAjMjhdCiAKIAkJLyoKIAkJICogV2UgbWlnaHQgYmUgcnVubmluZyBhdCBhIGRpZmZlcmVudCBhZGRyZXNzLiAgV2UgbmVlZAogCQkgKiB0byBmaXggdXAgdmFyaW91cyBwb2ludGVycy4KIAkJICovCiAJCXN1YglyMCwgcjAsIHIxCQlAIGNhbGN1bGF0ZSB0aGUgZGVsdGEgb2Zmc2V0Ci0JCWFkZAlyNSwgcjUsIHIwCQlAIF9zdGFydAogCQlhZGQJcjYsIHI2LCByMAkJQCBfZWRhdGEKIAogI2lmbmRlZiBDT05GSUdfWkJPT1RfUk9NCkBAIC0yMDYsMzEgKzIwNSw0MCBAQAogLyoKICAqIENoZWNrIHRvIHNlZSBpZiB3ZSB3aWxsIG92ZXJ3cml0ZSBvdXJzZWx2ZXMuCiAgKiAgIHI0ICA9IGZpbmFsIGtlcm5lbCBhZGRyZXNzCi0gKiAgIHI1ICA9IHN0YXJ0IG9mIHRoaXMgaW1hZ2UKICAqICAgcjkgID0gc2l6ZSBvZiBkZWNvbXByZXNzZWQgaW1hZ2UKICAqICAgcjEwID0gZW5kIG9mIHRoaXMgaW1hZ2UsIGluY2x1ZGluZyAgYnNzL3N0YWNrL21hbGxvYyBzcGFjZSBpZiBub24gWElQCiAgKiBXZSBiYXNpY2FsbHkgd2FudDoKLSAqICAgcjQgPj0gcjEwIC0+IE9LCi0gKiAgIHI0ICsgaW1hZ2UgbGVuZ3RoIDw9IHI1IC0+IE9LCisgKiAgIHI0IC0gMTZrIHBhZ2UgZGlyZWN0b3J5ID49IHIxMCAtPiBPSworICogICByNCArIGltYWdlIGxlbmd0aCA8PSBjdXJyZW50IHBvc2l0aW9uIChwYykgLT4gT0sKICAqLworCQlhZGQJcjEwLCByMTAsICMxNjM4NAogCQljbXAJcjQsIHIxMAogCQliaHMJd29udF9vdmVyd3JpdGUKIAkJYWRkCXIxMCwgcjQsIHI5Ci0JCWNtcAlyMTAsIHI1CisgICBBUk0oCQljbXAJcjEwLCBwYwkJKQorIFRIVU1CKAkJbW92CWxyLCBwYwkJKQorIFRIVU1CKAkJY21wCXIxMCwgbHIJCSkKIAkJYmxzCXdvbnRfb3ZlcndyaXRlCiAKIC8qCiAgKiBSZWxvY2F0ZSBvdXJzZWx2ZXMgcGFzdCB0aGUgZW5kIG9mIHRoZSBkZWNvbXByZXNzZWQga2VybmVsLgotICogICByNSAgPSBzdGFydCBvZiB0aGlzIGltYWdlCiAgKiAgIHI2ICA9IF9lZGF0YQogICogICByMTAgPSBlbmQgb2YgdGhlIGRlY29tcHJlc3NlZCBrZXJuZWwKICAqIEJlY2F1c2Ugd2UgYWx3YXlzIGNvcHkgYWhlYWQsIHdlIG5lZWQgdG8gZG8gaXQgZnJvbSB0aGUgZW5kIGFuZCBnbwogICogYmFja3dhcmQgaW4gY2FzZSB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBvdmVybGFwLgogICovCi0JCS8qIFJvdW5kIHVwIHRvIG5leHQgMjU2LWJ5dGUgYm91bmRhcnkuICovCi0JCWFkZAlyMTAsIHIxMCwgIzI1NgorCQkvKgorCQkgKiBCdW1wIHRvIHRoZSBuZXh0IDI1Ni1ieXRlIGJvdW5kYXJ5IHdpdGggdGhlIHNpemUgb2YKKwkJICogdGhlIHJlbG9jYXRpb24gY29kZSBhZGRlZC4gVGhpcyBhdm9pZHMgb3ZlcndyaXRpbmcKKwkJICogb3Vyc2VsZiB3aGVuIHRoZSBvZmZzZXQgaXMgc21hbGwuCisJCSAqLworCQlhZGQJcjEwLCByMTAsICMoKHJlbG9jX2NvZGVfZW5kIC0gcmVzdGFydCArIDI1NikgJiB+MjU1KQogCQliaWMJcjEwLCByMTAsICMyNTUKIAorCQkvKiBHZXQgc3RhcnQgb2YgY29kZSB3ZSB3YW50IHRvIGNvcHkgYW5kIGFsaWduIGl0IGRvd24uICovCisJCWFkcglyNSwgcmVzdGFydAorCQliaWMJcjUsIHI1LCAjMzEKKwogCQlzdWIJcjksIHI2LCByNQkJQCBzaXplIHRvIGNvcHkKIAkJYWRkCXI5LCByOSwgIzMxCQlAIHJvdW5kZWQgdXAgdG8gYSBtdWx0aXBsZQogCQliaWMJcjksIHI5LCAjMzEJCUAgLi4uIG9mIDMyIGJ5dGVzCkBAIC0yNDUsNiArMjUzLDExIEBACiAJCS8qIFByZXNlcnZlIG9mZnNldCB0byByZWxvY2F0ZWQgY29kZS4gKi8KIAkJc3ViCXI2LCByOSwgcjYKIAorI2lmbmRlZiBDT05GSUdfWkJPT1RfUk9NCisJCS8qIGNhY2hlX2NsZWFuX2ZsdXNoIG1heSB1c2UgdGhlIHN0YWNrLCBzbyByZWxvY2F0ZSBpdCAqLworCQlhZGQJc3AsIHNwLCByNgorI2VuZGlmCisKIAkJYmwJY2FjaGVfY2xlYW5fZmx1c2gKIAogCQlhZHIJcjAsIEJTWU0ocmVzdGFydCkKQEAgLTMzMyw3ICszNDYsNiBAQAogTEMwOgkJLndvcmQJTEMwCQkJQCByMQogCQkud29yZAlfX2Jzc19zdGFydAkJQCByMgogCQkud29yZAlfZW5kCQkJQCByMwotCQkud29yZAlfc3RhcnQJCQlAIHI1CiAJCS53b3JkCV9lZGF0YQkJCUAgcjYKIAkJLndvcmQJX2ltYWdlX3NpemUJCUAgcjkKIAkJLndvcmQJX2dvdF9zdGFydAkJQCByMTEKQEAgLTEwNjIsNiArMTA3NCw3IEBACiAjZW5kaWYKIAogCQkubHRvcmcKK3JlbG9jX2NvZGVfZW5kOgogCiAJCS5hbGlnbgogCQkuc2VjdGlvbiAiLnN0YWNrIiwgImF3IiwgJW5vYml0cwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLmluIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLmluCmluZGV4IDUzMDk5MDkuLmVhODBhYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5pbgorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuaW4KQEAgLTU0LDYgKzU0LDcgQEAKICAgLmJzcwkJCTogeyAqKC5ic3MpIH0KICAgX2VuZCA9IC47CiAKKyAgLiA9IEFMSUdOKDgpOwkJLyogdGhlIHN0YWNrIG11c3QgYmUgNjQtYml0IGFsaWduZWQgKi8KICAgLnN0YWNrCQk6IHsgKiguc3RhY2spIH0KIAogICAuc3RhYiAwCQk6IHsgKiguc3RhYikgfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL3ZpYy5jIGIvYXJjaC9hcm0vY29tbW9uL3ZpYy5jCmluZGV4IDExMzA4NWEuLjdhYTQyNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi92aWMuYworKysgYi9hcmNoL2FybS9jb21tb24vdmljLmMKQEAgLTIyLDE3ICsyMiwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdmljLmg+CiAKLSNpZiBkZWZpbmVkKENPTkZJR19QTSkKKyNpZmRlZiBDT05GSUdfUE0KIC8qKgogICogc3RydWN0IHZpY19kZXZpY2UgLSBWSUMgUE0gZGV2aWNlCi0gKiBAc3lzZGV2OiBUaGUgc3lzdGVtIGRldmljZSB3aGljaCBpcyByZWdpc3RlcmVkLgogICogQGlycTogVGhlIElSUSBudW1iZXIgZm9yIHRoZSBiYXNlIG9mIHRoZSBWSUMuCiAgKiBAYmFzZTogVGhlIHJlZ2lzdGVyIGJhc2UgZm9yIHRoZSBWSUMuCiAgKiBAcmVzdW1lX3NvdXJjZXM6IEEgYml0bWFzayBvZiBpbnRlcnJ1cHRzIGZvciByZXN1bWUuCkBAIC00Myw4ICs0Miw2IEBACiAgKiBAcHJvdGVjdDogU2F2ZSBmb3IgVklDX1BST1RFQ1QuCiAgKi8KIHN0cnVjdCB2aWNfZGV2aWNlIHsKLQlzdHJ1Y3Qgc3lzX2RldmljZSBzeXNkZXY7Ci0KIAl2b2lkIF9faW9tZW0JKmJhc2U7CiAJaW50CQlpcnE7CiAJdTMyCQlyZXN1bWVfc291cmNlczsKQEAgLTU5LDExICs1Niw2IEBACiBzdGF0aWMgc3RydWN0IHZpY19kZXZpY2UgdmljX2RldmljZXNbQ09ORklHX0FSTV9WSUNfTlJdOwogCiBzdGF0aWMgaW50IHZpY19pZDsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgdmljX2RldmljZSAqdG9fdmljKHN0cnVjdCBzeXNfZGV2aWNlICpzeXMpCi17Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihzeXMsIHN0cnVjdCB2aWNfZGV2aWNlLCBzeXNkZXYpOwotfQogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCiAvKioKQEAgLTg1LDEwICs3Nyw5IEBACiAJd3JpdGVsKDMyLCBiYXNlICsgVklDX1BMMTkwX0RFRl9WRUNUX0FERFIpOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfUE0pCi1zdGF0aWMgaW50IHZpY19jbGFzc19yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyB2b2lkIHJlc3VtZV9vbmVfdmljKHN0cnVjdCB2aWNfZGV2aWNlICp2aWMpCiB7Ci0Jc3RydWN0IHZpY19kZXZpY2UgKnZpYyA9IHRvX3ZpYyhkZXYpOwogCXZvaWQgX19pb21lbSAqYmFzZSA9IHZpYy0+YmFzZTsKIAogCXByaW50ayhLRVJOX0RFQlVHICIlczogcmVzdW1pbmcgdmljIGF0ICVwXG4iLCBfX2Z1bmNfXywgYmFzZSk7CkBAIC0xMDcsMTMgKzk4LDE4IEBACiAKIAl3cml0ZWwodmljLT5zb2Z0X2ludCwgYmFzZSArIFZJQ19JTlRfU09GVCk7CiAJd3JpdGVsKH52aWMtPnNvZnRfaW50LCBiYXNlICsgVklDX0lOVF9TT0ZUX0NMRUFSKTsKLQotCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpY19jbGFzc19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyB2b2lkIHZpY19yZXN1bWUodm9pZCkKIHsKLQlzdHJ1Y3QgdmljX2RldmljZSAqdmljID0gdG9fdmljKGRldik7CisJaW50IGlkOworCisJZm9yIChpZCA9IHZpY19pZCAtIDE7IGlkID49IDA7IGlkLS0pCisJCXJlc3VtZV9vbmVfdmljKHZpY19kZXZpY2VzICsgaWQpOworfQorCitzdGF0aWMgdm9pZCBzdXNwZW5kX29uZV92aWMoc3RydWN0IHZpY19kZXZpY2UgKnZpYykKK3sKIAl2b2lkIF9faW9tZW0gKmJhc2UgPSB2aWMtPmJhc2U7CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHN1c3BlbmRpbmcgdmljIGF0ICVwXG4iLCBfX2Z1bmNfXywgYmFzZSk7CkBAIC0xMjgsMTQgKzEyNCwyMSBAQAogCiAJd3JpdGVsKHZpYy0+cmVzdW1lX2lycXMsIGJhc2UgKyBWSUNfSU5UX0VOQUJMRSk7CiAJd3JpdGVsKH52aWMtPnJlc3VtZV9pcnFzLCBiYXNlICsgVklDX0lOVF9FTkFCTEVfQ0xFQVIpOworfQorCitzdGF0aWMgaW50IHZpY19zdXNwZW5kKHZvaWQpCit7CisJaW50IGlkOworCisJZm9yIChpZCA9IDA7IGlkIDwgdmljX2lkOyBpZCsrKQorCQlzdXNwZW5kX29uZV92aWModmljX2RldmljZXMgKyBpZCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHN5c2Rldl9jbGFzcyB2aWNfY2xhc3MgPSB7Ci0JLm5hbWUJCT0gInZpYyIsCi0JLnN1c3BlbmQJPSB2aWNfY2xhc3Nfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHZpY19jbGFzc19yZXN1bWUsCitzdHJ1Y3Qgc3lzY29yZV9vcHMgdmljX3N5c2NvcmVfb3BzID0geworCS5zdXNwZW5kCT0gdmljX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB2aWNfcmVzdW1lLAogfTsKIAogLyoqCkBAIC0xNDcsMzAgKzE1MCw4IEBACiAqLwogc3RhdGljIGludCBfX2luaXQgdmljX3BtX2luaXQodm9pZCkKIHsKLQlzdHJ1Y3QgdmljX2RldmljZSAqZGV2ID0gdmljX2RldmljZXM7Ci0JaW50IGVycjsKLQlpbnQgaWQ7Ci0KLQlpZiAodmljX2lkID09IDApCi0JCXJldHVybiAwOwotCi0JZXJyID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZ2aWNfY2xhc3MpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IHJlZ2lzdGVyIGNsYXNzXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JZm9yIChpZCA9IDA7IGlkIDwgdmljX2lkOyBpZCsrLCBkZXYrKykgewotCQlkZXYtPnN5c2Rldi5pZCA9IGlkOwotCQlkZXYtPnN5c2Rldi5jbHMgPSAmdmljX2NsYXNzOwotCi0JCWVyciA9IHN5c2Rldl9yZWdpc3RlcigmZGV2LT5zeXNkZXYpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgZGV2aWNlXG4iLAotCQkJICAgICAgIF9fZnVuY19fKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9CisJaWYgKHZpY19pZCA+IDApCisJCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZ2aWNfc3lzY29yZV9vcHMpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0OTF4NDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxeDQwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTVlOTIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxeDQwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDQ4IEBACitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfRU1CRURERUQ9eQorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CisjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUkZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfTEJEQUYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19NTVUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfQVQ5MT15CitDT05GSUdfQVJDSF9BVDkxWDQwPXkKK0NPTkZJR19NQUNIX0FUOTFFQjAxPXkKK0NPTkZJR19BVDkxX0VBUkxZX1VTQVJUMD15CitDT05GSUdfQ1BVX0FSTTdURE1JPXkKK0NPTkZJR19TRVRfTUVNX1BBUkFNPXkKK0NPTkZJR19EUkFNX0JBU0U9MHgwMTAwMDAwMAorQ09ORklHX0RSQU1fU0laRT0weDAwNDAwMDAwCitDT05GSUdfRkxBU0hfTUVNX0JBU0U9MHgwMTQwMDAwMAorQ09ORklHX1BST0NFU1NPUl9JRD0weDE0MDAwMDQwCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19CSU5GTVRfRkxBVD15CisjIENPTkZJR19TVVNQRU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTE9DSz15CitDT05GSUdfTVREX1JBTT15CitDT05GSUdfTVREX1JPTT15CitDT05GSUdfQkxLX0RFVl9SQU09eQorIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CitDT05GSUdfUk9NRlNfRlM9eQorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY3B1dHlwZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vY3B1dHlwZS5oCmluZGV4IGVkNWJjOWUuLmNkNDQ1OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdXR5cGUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jcHV0eXBlLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9fQVNNX0FSTV9DUFVUWVBFX0gKIAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCiAjZGVmaW5lIENQVUlEX0lECTAKICNkZWZpbmUgQ1BVSURfQ0FDSEVUWVBFCTEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2k4MjUzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9pODI1My5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNjU2YjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9pODI1My5oCkBAIC0wLDAgKzEsMTUgQEAKKyNpZm5kZWYgX19BU01BUk1fSTgyNTNfSAorI2RlZmluZSBfX0FTTUFSTV9JODI1M19ICisKKy8qIGk4MjUzQSBQSVQgcmVnaXN0ZXJzICovCisjZGVmaW5lIFBJVF9NT0RFCTB4NDMKKyNkZWZpbmUgUElUX0NIMAkJMHg0MAorCisjZGVmaW5lIFBJVF9MQVRDSAkoKFBJVF9USUNLX1JBVEUgKyBIWiAvIDIpIC8gSFopCisKK2V4dGVybiByYXdfc3BpbmxvY2tfdCBpODI1M19sb2NrOworCisjZGVmaW5lIG91dGJfcGl0CW91dGJfcAorI2RlZmluZSBpbmJfcGl0CQlpbmJfcAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2twcm9iZXMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2twcm9iZXMuaAppbmRleCBiYjhhMTliLi5lNDZiZGQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9rcHJvYmVzLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20va3Byb2Jlcy5oCkBAIC0zOSwxMCArMzksMTMgQEAKIHN0cnVjdCBrcHJvYmU7CiB0eXBlZGVmIHZvaWQgKGtwcm9iZV9pbnNuX2hhbmRsZXJfdCkoc3RydWN0IGtwcm9iZSAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKIAordHlwZWRlZiB1bnNpZ25lZCBsb25nIChrcHJvYmVfY2hlY2tfY2MpKHVuc2lnbmVkIGxvbmcpOworCiAvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29weSBvZiBvcmlnaW5hbCBpbnN0cnVjdGlvbi4gKi8KIHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gewogCWtwcm9iZV9vcGNvZGVfdAkJKmluc247CiAJa3Byb2JlX2luc25faGFuZGxlcl90CSppbnNuX2hhbmRsZXI7CisJa3Byb2JlX2NoZWNrX2NjCQkqaW5zbl9jaGVja19jYzsKIH07CiAKIHN0cnVjdCBwcmV2X2twcm9iZSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL3RpbWUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvdGltZS5oCmluZGV4IDg4M2Y2YmUuLmQ1YWRhYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvdGltZS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvdGltZS5oCkBAIC0zNCw3ICszNCw2IEBACiAgKiAgIHRpbWVyIGludGVycnVwdCB3aGljaCBtYXkgYmUgcGVuZGluZy4KICAqLwogc3RydWN0IHN5c190aW1lciB7Ci0Jc3RydWN0IHN5c19kZXZpY2UJZGV2OwogCXZvaWQJCQkoKmluaXQpKHZvaWQpOwogCXZvaWQJCQkoKnN1c3BlbmQpKHZvaWQpOwogCXZvaWQJCQkoKnJlc3VtZSkodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N5c3RlbS5oCmluZGV4IDg4NWJlMDkuLjgzMjg4OGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC0xNTksNyArMTU5LDcgQEAKICNpbmNsdWRlIDxtYWNoL2JhcnJpZXJzLmg+CiAjZWxpZiBkZWZpbmVkKENPTkZJR19BUk1fRE1BX01FTV9CVUZGRVJBQkxFKSB8fCBkZWZpbmVkKENPTkZJR19TTVApCiAjZGVmaW5lIG1iKCkJCWRvIHsgZHNiKCk7IG91dGVyX3N5bmMoKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgcm1iKCkJCWRtYigpCisjZGVmaW5lIHJtYigpCQlkc2IoKQogI2RlZmluZSB3bWIoKQkJbWIoKQogI2Vsc2UKICNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IGM4OTFlYjcuLjg3ZGJlM2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0zOTYsNiArMzk2LDEwIEBACiAjZGVmaW5lIF9fTlJfZmFub3RpZnlfaW5pdAkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM2NykKICNkZWZpbmUgX19OUl9mYW5vdGlmeV9tYXJrCQkoX19OUl9TWVNDQUxMX0JBU0UrMzY4KQogI2RlZmluZSBfX05SX3BybGltaXQ2NAkJCShfX05SX1NZU0NBTExfQkFTRSszNjkpCisjZGVmaW5lIF9fTlJfbmFtZV90b19oYW5kbGVfYXQJCShfX05SX1NZU0NBTExfQkFTRSszNzApCisjZGVmaW5lIF9fTlJfb3Blbl9ieV9oYW5kbGVfYXQJCShfX05SX1NZU0NBTExfQkFTRSszNzEpCisjZGVmaW5lIF9fTlJfY2xvY2tfYWRqdGltZQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM3MikKKyNkZWZpbmUgX19OUl9zeW5jZnMJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzczKQogCiAvKgogICogVGhlIGZvbGxvd2luZyBTV0lzIGFyZSBBUk0gcHJpdmF0ZS4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TIGIvYXJjaC9hcm0va2VybmVsL2NhbGxzLlMKaW5kZXggNWMyNmVjYy4uN2ZiZjI4YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2NhbGxzLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2NhbGxzLlMKQEAgLTM3OSw2ICszNzksMTAgQEAKIAkJQ0FMTChzeXNfZmFub3RpZnlfaW5pdCkKIAkJQ0FMTChzeXNfZmFub3RpZnlfbWFyaykKIAkJQ0FMTChzeXNfcHJsaW1pdDY0KQorLyogMzcwICovCUNBTEwoc3lzX25hbWVfdG9faGFuZGxlX2F0KQorCQlDQUxMKHN5c19vcGVuX2J5X2hhbmRsZV9hdCkKKwkJQ0FMTChzeXNfY2xvY2tfYWRqdGltZSkKKwkJQ0FMTChzeXNfc3luY2ZzKQogI2lmbmRlZiBzeXNjYWxsc19jb3VudGVkCiAuZXF1IHN5c2NhbGxzX3BhZGRpbmcsICgoTlJfc3lzY2FsbHMgKyAzKSAmIH4zKSAtIE5SX3N5c2NhbGxzCiAjZGVmaW5lIHN5c2NhbGxzX2NvdW50ZWQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLWRlY29kZS5jIGIvYXJjaC9hcm0va2VybmVsL2twcm9iZXMtZGVjb2RlLmMKaW5kZXggMjM4OTEzMS4uMTVlZWZmNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2twcm9iZXMtZGVjb2RlLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2twcm9iZXMtZGVjb2RlLmMKQEAgLTM0LDkgKzM0LDYgQEAKICAqCiAgKiAgICopIElmIHRoZSBQQyBpcyB3cml0dGVuIHRvIGJ5IHRoZSBpbnN0cnVjdGlvbiwgdGhlCiAgKiAgICAgIGluc3RydWN0aW9uIG11c3QgYmUgZnVsbHkgc2ltdWxhdGVkIGluIHNvZnR3YXJlLgotICogICAgICBJZiBpdCBpcyBhIGNvbmRpdGlvbmFsIGluc3RydWN0aW9uLCB0aGUgaGFuZGxlcgotICogICAgICB3aWxsIHVzZSBpbnNuWzBdIHRvIGNvcHkgaXRzIGNvbmRpdGlvbiBjb2RlIHRvCi0gKglzZXQgcjAgdG8gMSBhbmQgaW5zblsxXSB0byAibW92IHBjLCBsciIgdG8gcmV0dXJuLgogICoKICAqICAgKikgT3RoZXJ3aXNlLCBhIG1vZGlmaWVkIGZvcm0gb2YgdGhlIGluc3RydWN0aW9uIGlzCiAgKiAgICAgIGRpcmVjdGx5IGV4ZWN1dGVkLiAgSXRzIGhhbmRsZXIgY2FsbHMgdGhlCkBAIC02OCwxMyArNjUsMTcgQEAKIAogI2RlZmluZSBicmFuY2hfZGlzcGxhY2VtZW50KGluc24pIHNpZ25fZXh0ZW5kKCgoaW5zbikgJiAweGZmZmZmZikgPDwgMiwgMjUpCiAKKyNkZWZpbmUgaXNfcjE1KGluc24sIGJpdHBvcykgKCgoaW5zbikgJiAoMHhmIDw8IGJpdHBvcykpID09ICgweGYgPDwgYml0cG9zKSkKKworLyoKKyAqIFRlc3QgaWYgbG9hZC9zdG9yZSBpbnN0cnVjdGlvbnMgd3JpdGViYWNrIHRoZSBhZGRyZXNzIHJlZ2lzdGVyLgorICogaWYgUCAoYml0IDI0KSA9PSAwIG9yIFcgKGJpdCAyMSkgPT0gMQorICovCisjZGVmaW5lIGlzX3dyaXRlYmFjayhpbnNuKSAoKGluc24gXiAweDAxMDAwMDAwKSAmIDB4MDEyMDAwMDApCisKICNkZWZpbmUgUFNSX2ZzCShQU1JfZnxQU1JfcykKIAogI2RlZmluZSBLUFJPQkVfUkVUVVJOX0lOU1RSVUNUSU9OCTB4ZTFhMGYwMGUJLyogbW92IHBjLCBsciAqLwotI2RlZmluZSBTRVRfUjBfVFJVRV9JTlNUUlVDVElPTgkJMHhlM2EwMDAwMQkvKiBtb3YJcjAsICMxICovCi0KLSNkZWZpbmUJdHJ1ZWNjX2luc24oaW5zbikJKCgoaW5zbikgJiAweGYwMDAwMDAwKSB8IFwKLQkJCQkgKFNFVF9SMF9UUlVFX0lOU1RSVUNUSU9OICYgMHgwZmZmZmZmZikpCiAKIHR5cGVkZWYgbG9uZyAoaW5zbl8wYXJnX2ZuX3QpKHZvaWQpOwogdHlwZWRlZiBsb25nIChpbnNuXzFhcmdfZm5fdCkobG9uZyk7CkBAIC00MTksMTQgKzQyMCwxMCBAQAogCiBzdGF0aWMgdm9pZCBfX2twcm9iZXMgc2ltdWxhdGVfYmJsKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWluc25fMWFyZ19mbl90ICppX2ZuID0gKGluc25fMWFyZ19mbl90ICopJnAtPmFpbnNuLmluc25bMF07CiAJa3Byb2JlX29wY29kZV90IGluc24gPSBwLT5vcGNvZGU7CiAJbG9uZyBpYWRkciA9IChsb25nKXAtPmFkZHI7CiAJaW50IGRpc3AgID0gYnJhbmNoX2Rpc3BsYWNlbWVudChpbnNuKTsKIAotCWlmICghaW5zbnNsb3RfMWFyZ19yZmxhZ3MoMCwgcmVncy0+QVJNX2Nwc3IsIGlfZm4pKQotCQlyZXR1cm47Ci0KIAlpZiAoaW5zbiAmICgxIDw8IDI0KSkKIAkJcmVncy0+QVJNX2xyID0gaWFkZHIgKyA0OwogCkBAIC00NDYsMTQgKzQ0MywxMCBAQAogCiBzdGF0aWMgdm9pZCBfX2twcm9iZXMgc2ltdWxhdGVfYmx4MmJ4KHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWluc25fMWFyZ19mbl90ICppX2ZuID0gKGluc25fMWFyZ19mbl90ICopJnAtPmFpbnNuLmluc25bMF07CiAJa3Byb2JlX29wY29kZV90IGluc24gPSBwLT5vcGNvZGU7CiAJaW50IHJtID0gaW5zbiAmIDB4ZjsKIAlsb25nIHJtdiA9IHJlZ3MtPnVyZWdzW3JtXTsKIAotCWlmICghaW5zbnNsb3RfMWFyZ19yZmxhZ3MoMCwgcmVncy0+QVJNX2Nwc3IsIGlfZm4pKQotCQlyZXR1cm47Ci0KIAlpZiAoaW5zbiAmICgxIDw8IDUpKQogCQlyZWdzLT5BUk1fbHIgPSAobG9uZylwLT5hZGRyICsgNDsKIApAQCAtNDYzLDkgKzQ1NiwxNiBAQAogCQlyZWdzLT5BUk1fY3BzciB8PSBQU1JfVF9CSVQ7CiB9CiAKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBzaW11bGF0ZV9tcnMoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJa3Byb2JlX29wY29kZV90IGluc24gPSBwLT5vcGNvZGU7CisJaW50IHJkID0gKGluc24gPj4gMTIpICYgMHhmOworCXVuc2lnbmVkIGxvbmcgbWFzayA9IDB4ZjhmZjAzZGY7IC8qIE1hc2sgb3V0IGV4ZWN1dGlvbiBzdGF0ZSAqLworCXJlZ3MtPnVyZWdzW3JkXSA9IHJlZ3MtPkFSTV9jcHNyICYgbWFzazsKK30KKwogc3RhdGljIHZvaWQgX19rcHJvYmVzIHNpbXVsYXRlX2xkbTFzdG0xKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWluc25fMWFyZ19mbl90ICppX2ZuID0gKGluc25fMWFyZ19mbl90ICopJnAtPmFpbnNuLmluc25bMF07CiAJa3Byb2JlX29wY29kZV90IGluc24gPSBwLT5vcGNvZGU7CiAJaW50IHJuID0gKGluc24gPj4gMTYpICYgMHhmOwogCWludCBsYml0ID0gaW5zbiAmICgxIDw8IDIwKTsKQEAgLTQ3Niw5ICs0NzYsNiBAQAogCWludCByZWdfYml0X3ZlY3RvcjsKIAlpbnQgcmVnX2NvdW50OwogCi0JaWYgKCFpbnNuc2xvdF8xYXJnX3JmbGFncygwLCByZWdzLT5BUk1fY3BzciwgaV9mbikpCi0JCXJldHVybjsKLQogCXJlZ19jb3VudCA9IDA7CiAJcmVnX2JpdF92ZWN0b3IgPSBpbnNuICYgMHhmZmZmOwogCXdoaWxlIChyZWdfYml0X3ZlY3RvcikgewpAQCAtNTEwLDExICs1MDcsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2twcm9iZXMgc2ltdWxhdGVfc3RtMV9wYyhzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlpbnNuXzFhcmdfZm5fdCAqaV9mbiA9IChpbnNuXzFhcmdfZm5fdCAqKSZwLT5haW5zbi5pbnNuWzBdOwotCi0JaWYgKCFpbnNuc2xvdF8xYXJnX3JmbGFncygwLCByZWdzLT5BUk1fY3BzciwgaV9mbikpCi0JCXJldHVybjsKLQogCXJlZ3MtPkFSTV9wYyA9IChsb25nKXAtPmFkZHIgKyBzdHJfcGNfb2Zmc2V0OwogCXNpbXVsYXRlX2xkbTFzdG0xKHAsIHJlZ3MpOwogCXJlZ3MtPkFSTV9wYyA9IChsb25nKXAtPmFkZHIgKyA0OwpAQCAtNTI1LDI0ICs1MTcsMTYgQEAKIAlyZWdzLT51cmVnc1sxMl0gPSByZWdzLT51cmVnc1sxM107CiB9CiAKLXN0YXRpYyB2b2lkIF9fa3Byb2JlcyBlbXVsYXRlX2xkY3N0YyhzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlpbnNuXzFhcmdfZm5fdCAqaV9mbiA9IChpbnNuXzFhcmdfZm5fdCAqKSZwLT5haW5zbi5pbnNuWzBdOwotCWtwcm9iZV9vcGNvZGVfdCBpbnNuID0gcC0+b3Bjb2RlOwotCWludCBybiA9IChpbnNuID4+IDE2KSAmIDB4ZjsKLQlsb25nIHJudiA9IHJlZ3MtPnVyZWdzW3JuXTsKLQotCS8qIFNhdmUgUm4gaW4gY2FzZSBvZiB3cml0ZWJhY2suICovCi0JcmVncy0+dXJlZ3Nbcm5dID0gaW5zbnNsb3RfMWFyZ19yZmxhZ3Mocm52LCByZWdzLT5BUk1fY3BzciwgaV9mbik7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fa3Byb2JlcyBlbXVsYXRlX2xkcmQoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaW5zbl8yYXJnX2ZuX3QgKmlfZm4gPSAoaW5zbl8yYXJnX2ZuX3QgKikmcC0+YWluc24uaW5zblswXTsKIAlrcHJvYmVfb3Bjb2RlX3QgaW5zbiA9IHAtPm9wY29kZTsKKwlsb25nIHBwYyA9IChsb25nKXAtPmFkZHIgKyA4OwogCWludCByZCA9IChpbnNuID4+IDEyKSAmIDB4ZjsKIAlpbnQgcm4gPSAoaW5zbiA+PiAxNikgJiAweGY7CiAJaW50IHJtID0gaW5zbiAmIDB4ZjsgIC8qIHJtIG1heSBiZSBpbnZhbGlkLCBkb24ndCBjYXJlLiAqLworCWxvbmcgcm12ID0gKHJtID09IDE1KSA/IHBwYyA6IHJlZ3MtPnVyZWdzW3JtXTsKKwlsb25nIHJudiA9IChybiA9PSAxNSkgPyBwcGMgOiByZWdzLT51cmVnc1tybl07CiAKIAkvKiBOb3QgZm9sbG93aW5nIHRoZSBDIGNhbGxpbmcgY29udmVudGlvbiBoZXJlLCBzbyBuZWVkIGFzbSgpLiAqLwogCV9fYXNtX18gX192b2xhdGlsZV9fICgKQEAgLTU1NCwyOSArNTM4LDM2IEBACiAJCSJzdHIJcjAsICVbcm5dCVxuXHQiCS8qIGluIGNhc2Ugb2Ygd3JpdGViYWNrICovCiAJCSJzdHIJcjIsICVbcmQwXQlcblx0IgogCQkic3RyCXIzLCAlW3JkMV0JXG5cdCIKLQkJOiBbcm5dICAiK20iIChyZWdzLT51cmVnc1tybl0pLAorCQk6IFtybl0gICIrbSIgKHJudiksCiAJCSAgW3JkMF0gIj1tIiAocmVncy0+dXJlZ3NbcmRdKSwKIAkJICBbcmQxXSAiPW0iIChyZWdzLT51cmVnc1tyZCsxXSkKLQkJOiBbcm1dICAgIm0iIChyZWdzLT51cmVnc1tybV0pLAorCQk6IFtybV0gICAibSIgKHJtdiksCiAJCSAgW2Nwc3JdICJyIiAocmVncy0+QVJNX2Nwc3IpLAogCQkgIFtpX2ZuXSAiciIgKGlfZm4pCiAJCTogInIwIiwgInIxIiwgInIyIiwgInIzIiwgImxyIiwgImNjIgogCSk7CisJaWYgKGlzX3dyaXRlYmFjayhpbnNuKSkKKwkJcmVncy0+dXJlZ3Nbcm5dID0gcm52OwogfQogCiBzdGF0aWMgdm9pZCBfX2twcm9iZXMgZW11bGF0ZV9zdHJkKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWluc25fNGFyZ19mbl90ICppX2ZuID0gKGluc25fNGFyZ19mbl90ICopJnAtPmFpbnNuLmluc25bMF07CiAJa3Byb2JlX29wY29kZV90IGluc24gPSBwLT5vcGNvZGU7CisJbG9uZyBwcGMgPSAobG9uZylwLT5hZGRyICsgODsKIAlpbnQgcmQgPSAoaW5zbiA+PiAxMikgJiAweGY7CiAJaW50IHJuID0gKGluc24gPj4gMTYpICYgMHhmOwogCWludCBybSAgPSBpbnNuICYgMHhmOwotCWxvbmcgcm52ID0gcmVncy0+dXJlZ3Nbcm5dOwotCWxvbmcgcm12ID0gcmVncy0+dXJlZ3Nbcm1dOyAgLyogcm0vcm12IG1heSBiZSBpbnZhbGlkLCBkb24ndCBjYXJlLiAqLworCWxvbmcgcm52ID0gKHJuID09IDE1KSA/IHBwYyA6IHJlZ3MtPnVyZWdzW3JuXTsKKwkvKiBybS9ybXYgbWF5IGJlIGludmFsaWQsIGRvbid0IGNhcmUuICovCisJbG9uZyBybXYgPSAocm0gPT0gMTUpID8gcHBjIDogcmVncy0+dXJlZ3Nbcm1dOworCWxvbmcgcm52X3diOwogCi0JcmVncy0+dXJlZ3Nbcm5dID0gaW5zbnNsb3RfNGFyZ19yZmxhZ3Mocm52LCBybXYsIHJlZ3MtPnVyZWdzW3JkXSwKKwlybnZfd2IgPSBpbnNuc2xvdF80YXJnX3JmbGFncyhybnYsIHJtdiwgcmVncy0+dXJlZ3NbcmRdLAogCQkJCQkgICAgICAgcmVncy0+dXJlZ3NbcmQrMV0sCiAJCQkJCSAgICAgICByZWdzLT5BUk1fY3BzciwgaV9mbik7CisJaWYgKGlzX3dyaXRlYmFjayhpbnNuKSkKKwkJcmVncy0+dXJlZ3Nbcm5dID0gcm52X3diOwogfQogCiBzdGF0aWMgdm9pZCBfX2twcm9iZXMgZW11bGF0ZV9sZHIoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC02MzAsMzEgKzYyMSw2IEBACiAJCXJlZ3MtPnVyZWdzW3JuXSA9IHJudl93YjsgIC8qIFNhdmUgUm4gaW4gY2FzZSBvZiB3cml0ZWJhY2suICovCiB9CiAKLXN0YXRpYyB2b2lkIF9fa3Byb2JlcyBlbXVsYXRlX21ycmMoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JaW5zbl9sbHJldF8wYXJnX2ZuX3QgKmlfZm4gPSAoaW5zbl9sbHJldF8wYXJnX2ZuX3QgKikmcC0+YWluc24uaW5zblswXTsKLQlrcHJvYmVfb3Bjb2RlX3QgaW5zbiA9IHAtPm9wY29kZTsKLQl1bmlvbiByZWdfcGFpciBmbnI7Ci0JaW50IHJkID0gKGluc24gPj4gMTIpICYgMHhmOwotCWludCBybiA9IChpbnNuID4+IDE2KSAmIDB4ZjsKLQotCWZuci5kciA9IGluc25zbG90X2xscmV0XzBhcmdfcmZsYWdzKHJlZ3MtPkFSTV9jcHNyLCBpX2ZuKTsKLQlyZWdzLT51cmVnc1tybl0gPSBmbnIucjA7Ci0JcmVncy0+dXJlZ3NbcmRdID0gZm5yLnIxOwotfQotCi1zdGF0aWMgdm9pZCBfX2twcm9iZXMgZW11bGF0ZV9tY3JyKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWluc25fMmFyZ19mbl90ICppX2ZuID0gKGluc25fMmFyZ19mbl90ICopJnAtPmFpbnNuLmluc25bMF07Ci0Ja3Byb2JlX29wY29kZV90IGluc24gPSBwLT5vcGNvZGU7Ci0JaW50IHJkID0gKGluc24gPj4gMTIpICYgMHhmOwotCWludCBybiA9IChpbnNuID4+IDE2KSAmIDB4ZjsKLQlsb25nIHJudiA9IHJlZ3MtPnVyZWdzW3JuXTsKLQlsb25nIHJkdiA9IHJlZ3MtPnVyZWdzW3JkXTsKLQotCWluc25zbG90XzJhcmdfcmZsYWdzKHJudiwgcmR2LCByZWdzLT5BUk1fY3BzciwgaV9mbik7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fa3Byb2JlcyBlbXVsYXRlX3NhdChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpbnNuXzFhcmdfZm5fdCAqaV9mbiA9IChpbnNuXzFhcmdfZm5fdCAqKSZwLT5haW5zbi5pbnNuWzBdOwpAQCAtNjg4LDMyICs2NTQsMzIgQEAKIAlpbnNuc2xvdF8wYXJnX3JmbGFncyhyZWdzLT5BUk1fY3BzciwgaV9mbik7CiB9CiAKLXN0YXRpYyB2b2lkIF9fa3Byb2JlcyBlbXVsYXRlX3JkMTIoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgZW11bGF0ZV9ub3Aoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JaW5zbl8wYXJnX2ZuX3QgKmlfZm4gPSAoaW5zbl8wYXJnX2ZuX3QgKikmcC0+YWluc24uaW5zblswXTsKK30KKworc3RhdGljIHZvaWQgX19rcHJvYmVzCitlbXVsYXRlX3JkMTJfbW9kaWZ5KHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWluc25fMWFyZ19mbl90ICppX2ZuID0gKGluc25fMWFyZ19mbl90ICopJnAtPmFpbnNuLmluc25bMF07CiAJa3Byb2JlX29wY29kZV90IGluc24gPSBwLT5vcGNvZGU7CiAJaW50IHJkID0gKGluc24gPj4gMTIpICYgMHhmOworCWxvbmcgcmR2ID0gcmVncy0+dXJlZ3NbcmRdOwogCi0JcmVncy0+dXJlZ3NbcmRdID0gaW5zbnNsb3RfMGFyZ19yZmxhZ3MocmVncy0+QVJNX2Nwc3IsIGlfZm4pOworCXJlZ3MtPnVyZWdzW3JkXSA9IGluc25zbG90XzFhcmdfcmZsYWdzKHJkdiwgcmVncy0+QVJNX2Nwc3IsIGlfZm4pOwogfQogCi1zdGF0aWMgdm9pZCBfX2twcm9iZXMgZW11bGF0ZV9pcmQxMihzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcworZW11bGF0ZV9yZDEycm4wX21vZGlmeShzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlpbnNuXzFhcmdfZm5fdCAqaV9mbiA9IChpbnNuXzFhcmdfZm5fdCAqKSZwLT5haW5zbi5pbnNuWzBdOworCWluc25fMmFyZ19mbl90ICppX2ZuID0gKGluc25fMmFyZ19mbl90ICopJnAtPmFpbnNuLmluc25bMF07CiAJa3Byb2JlX29wY29kZV90IGluc24gPSBwLT5vcGNvZGU7Ci0JaW50IGlyZCA9IChpbnNuID4+IDEyKSAmIDB4ZjsKLQotCWluc25zbG90XzFhcmdfcmZsYWdzKHJlZ3MtPnVyZWdzW2lyZF0sIHJlZ3MtPkFSTV9jcHNyLCBpX2ZuKTsKLX0KLQotc3RhdGljIHZvaWQgX19rcHJvYmVzIGVtdWxhdGVfcm4xNihzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlpbnNuXzFhcmdfZm5fdCAqaV9mbiA9IChpbnNuXzFhcmdfZm5fdCAqKSZwLT5haW5zbi5pbnNuWzBdOwotCWtwcm9iZV9vcGNvZGVfdCBpbnNuID0gcC0+b3Bjb2RlOwotCWludCBybiA9IChpbnNuID4+IDE2KSAmIDB4ZjsKKwlpbnQgcmQgPSAoaW5zbiA+PiAxMikgJiAweGY7CisJaW50IHJuID0gaW5zbiAmIDB4ZjsKKwlsb25nIHJkdiA9IHJlZ3MtPnVyZWdzW3JkXTsKIAlsb25nIHJudiA9IHJlZ3MtPnVyZWdzW3JuXTsKIAotCWluc25zbG90XzFhcmdfcmZsYWdzKHJudiwgcmVncy0+QVJNX2Nwc3IsIGlfZm4pOworCXJlZ3MtPnVyZWdzW3JkXSA9IGluc25zbG90XzJhcmdfcmZsYWdzKHJkdiwgcm52LCByZWdzLT5BUk1fY3BzciwgaV9mbik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fa3Byb2JlcyBlbXVsYXRlX3JkMTJybTAoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC04MTksNiArNzg1LDE3IEBACiB9CiAKIHN0YXRpYyB2b2lkIF9fa3Byb2JlcworZW11bGF0ZV9hbHVfdGVzdHNfaW1tKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWluc25fMWFyZ19mbl90ICppX2ZuID0gKGluc25fMWFyZ19mbl90ICopJnAtPmFpbnNuLmluc25bMF07CisJa3Byb2JlX29wY29kZV90IGluc24gPSBwLT5vcGNvZGU7CisJaW50IHJuID0gKGluc24gPj4gMTYpICYgMHhmOworCWxvbmcgcm52ID0gKHJuID09IDE1KSA/IChsb25nKXAtPmFkZHIgKyA4IDogcmVncy0+dXJlZ3Nbcm5dOworCisJaW5zbnNsb3RfMWFyZ19yd2ZsYWdzKHJudiwgJnJlZ3MtPkFSTV9jcHNyLCBpX2ZuKTsKK30KKworc3RhdGljIHZvaWQgX19rcHJvYmVzCiBlbXVsYXRlX2FsdV9yZmxhZ3Moc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaW5zbl8zYXJnX2ZuX3QgKmlfZm4gPSAoaW5zbl8zYXJnX2ZuX3QgKikmcC0+YWluc24uaW5zblswXTsKQEAgLTg1NCwxNCArODMxLDM0IEBACiAJCWluc25zbG90XzNhcmdfcndmbGFncyhybnYsIHJtdiwgcnN2LCAmcmVncy0+QVJNX2Nwc3IsIGlfZm4pOwogfQogCitzdGF0aWMgdm9pZCBfX2twcm9iZXMKK2VtdWxhdGVfYWx1X3Rlc3RzKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWluc25fM2FyZ19mbl90ICppX2ZuID0gKGluc25fM2FyZ19mbl90ICopJnAtPmFpbnNuLmluc25bMF07CisJa3Byb2JlX29wY29kZV90IGluc24gPSBwLT5vcGNvZGU7CisJbG9uZyBwcGMgPSAobG9uZylwLT5hZGRyICsgODsKKwlpbnQgcm4gPSAoaW5zbiA+PiAxNikgJiAweGY7CisJaW50IHJzID0gKGluc24gPj4gOCkgJiAweGY7CS8qIHJzL3JzdiBtYXkgYmUgaW52YWxpZCwgZG9uJ3QgY2FyZS4gKi8KKwlpbnQgcm0gPSBpbnNuICYgMHhmOworCWxvbmcgcm52ID0gKHJuID09IDE1KSA/IHBwYyA6IHJlZ3MtPnVyZWdzW3JuXTsKKwlsb25nIHJtdiA9IChybSA9PSAxNSkgPyBwcGMgOiByZWdzLT51cmVnc1tybV07CisJbG9uZyByc3YgPSByZWdzLT51cmVnc1tyc107CisKKwlpbnNuc2xvdF8zYXJnX3J3ZmxhZ3Mocm52LCBybXYsIHJzdiwgJnJlZ3MtPkFSTV9jcHNyLCBpX2ZuKTsKK30KKwogc3RhdGljIGVudW0ga3Byb2JlX2luc24gX19rcHJvYmVzCiBwcmVwX2VtdWxhdGVfbGRyX3N0cihrcHJvYmVfb3Bjb2RlX3QgaW5zbiwgc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiAqYXNpKQogewotCWludCBpYml0ID0gKGluc24gJiAoMSA8PCAyNikpID8gMjUgOiAyMjsKKwlpbnQgbm90X2ltbSA9IChpbnNuICYgKDEgPDwgMjYpKSA/IChpbnNuICYgKDEgPDwgMjUpKQorCQkJCQkgOiAofmluc24gJiAoMSA8PCAyMikpOworCisJaWYgKGlzX3dyaXRlYmFjayhpbnNuKSAmJiBpc19yMTUoaW5zbiwgMTYpKQorCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsJLyogV3JpdGViYWNrIHRvIFBDICovCiAKIAlpbnNuICY9IDB4ZmZmMDBmZmY7CiAJaW5zbiB8PSAweDAwMDAxMDAwOwkvKiBSbiA9IHIwLCBSZCA9IHIxICovCi0JaWYgKGluc24gJiAoMSA8PCBpYml0KSkgeworCWlmIChub3RfaW1tKSB7CiAJCWluc24gJj0gfjB4ZjsKIAkJaW5zbiB8PSAyOwkvKiBSbSA9IHIyICovCiAJfQpAQCAtODcxLDggKzg2OCwzNyBAQAogfQogCiBzdGF0aWMgZW51bSBrcHJvYmVfaW5zbiBfX2twcm9iZXMKK3ByZXBfZW11bGF0ZV9yZDEyX21vZGlmeShrcHJvYmVfb3Bjb2RlX3QgaW5zbiwgc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiAqYXNpKQoreworCWlmIChpc19yMTUoaW5zbiwgMTIpKQorCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsJLyogUmQgaXMgUEMgKi8KKworCWluc24gJj0gMHhmZmZmMGZmZjsJLyogUmQgPSByMCAqLworCWFzaS0+aW5zblswXSA9IGluc247CisJYXNpLT5pbnNuX2hhbmRsZXIgPSBlbXVsYXRlX3JkMTJfbW9kaWZ5OworCXJldHVybiBJTlNOX0dPT0Q7Cit9CisKK3N0YXRpYyBlbnVtIGtwcm9iZV9pbnNuIF9fa3Byb2JlcworcHJlcF9lbXVsYXRlX3JkMTJybjBfbW9kaWZ5KGtwcm9iZV9vcGNvZGVfdCBpbnNuLAorCQkJICAgIHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gKmFzaSkKK3sKKwlpZiAoaXNfcjE1KGluc24sIDEyKSkKKwkJcmV0dXJuIElOU05fUkVKRUNURUQ7CS8qIFJkIGlzIFBDICovCisKKwlpbnNuICY9IDB4ZmZmZjBmZjA7CS8qIFJkID0gcjAgKi8KKwlpbnNuIHw9IDB4MDAwMDAwMDE7CS8qIFJuID0gcjEgKi8KKwlhc2ktPmluc25bMF0gPSBpbnNuOworCWFzaS0+aW5zbl9oYW5kbGVyID0gZW11bGF0ZV9yZDEycm4wX21vZGlmeTsKKwlyZXR1cm4gSU5TTl9HT09EOworfQorCitzdGF0aWMgZW51bSBrcHJvYmVfaW5zbiBfX2twcm9iZXMKIHByZXBfZW11bGF0ZV9yZDEycm0wKGtwcm9iZV9vcGNvZGVfdCBpbnNuLCBzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuICphc2kpCiB7CisJaWYgKGlzX3IxNShpbnNuLCAxMikpCisJCXJldHVybiBJTlNOX1JFSkVDVEVEOwkvKiBSZCBpcyBQQyAqLworCiAJaW5zbiAmPSAweGZmZmYwZmYwOwkvKiBSZCA9IHIwLCBSbSA9IHIwICovCiAJYXNpLT5pbnNuWzBdID0gaW5zbjsKIAlhc2ktPmluc25faGFuZGxlciA9IGVtdWxhdGVfcmQxMnJtMDsKQEAgLTg4MCwxOCArOTA2LDEyIEBACiB9CiAKIHN0YXRpYyBlbnVtIGtwcm9iZV9pbnNuIF9fa3Byb2JlcwotcHJlcF9lbXVsYXRlX3JkMTIoa3Byb2JlX29wY29kZV90IGluc24sIHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gKmFzaSkKLXsKLQlpbnNuICY9IDB4ZmZmZjBmZmY7CS8qIFJkID0gcjAgKi8KLQlhc2ktPmluc25bMF0gPSBpbnNuOwotCWFzaS0+aW5zbl9oYW5kbGVyID0gZW11bGF0ZV9yZDEyOwotCXJldHVybiBJTlNOX0dPT0Q7Ci19Ci0KLXN0YXRpYyBlbnVtIGtwcm9iZV9pbnNuIF9fa3Byb2JlcwogcHJlcF9lbXVsYXRlX3JkMTJybjE2cm0wX3dmbGFncyhrcHJvYmVfb3Bjb2RlX3QgaW5zbiwKIAkJCQlzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuICphc2kpCiB7CisJaWYgKGlzX3IxNShpbnNuLCAxMikpCisJCXJldHVybiBJTlNOX1JFSkVDVEVEOwkvKiBSZCBpcyBQQyAqLworCiAJaW5zbiAmPSAweGZmZjAwZmYwOwkvKiBSZCA9IHIwLCBSbiA9IHIwICovCiAJaW5zbiB8PSAweDAwMDAwMDAxOwkvKiBSbSA9IHIxICovCiAJYXNpLT5pbnNuWzBdID0gaW5zbjsKQEAgLTkwMyw2ICs5MjMsOSBAQAogcHJlcF9lbXVsYXRlX3JkMTZyczhybTBfd2ZsYWdzKGtwcm9iZV9vcGNvZGVfdCBpbnNuLAogCQkJICAgICAgIHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gKmFzaSkKIHsKKwlpZiAoaXNfcjE1KGluc24sIDE2KSkKKwkJcmV0dXJuIElOU05fUkVKRUNURUQ7CS8qIFJkIGlzIFBDICovCisKIAlpbnNuICY9IDB4ZmZmMGYwZjA7CS8qIFJkID0gcjAsIFJzID0gcjAgKi8KIAlpbnNuIHw9IDB4MDAwMDAwMDE7CS8qIFJtID0gcjEgICAgICAgICAgKi8KIAlhc2ktPmluc25bMF0gPSBpbnNuOwpAQCAtOTE0LDYgKzkzNyw5IEBACiBwcmVwX2VtdWxhdGVfcmQxNnJuMTJyczhybTBfd2ZsYWdzKGtwcm9iZV9vcGNvZGVfdCBpbnNuLAogCQkJCSAgIHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gKmFzaSkKIHsKKwlpZiAoaXNfcjE1KGluc24sIDE2KSkKKwkJcmV0dXJuIElOU05fUkVKRUNURUQ7CS8qIFJkIGlzIFBDICovCisKIAlpbnNuICY9IDB4ZmZmMDAwZjA7CS8qIFJkID0gcjAsIFJuID0gcjAgKi8KIAlpbnNuIHw9IDB4MDAwMDAxMDI7CS8qIFJzID0gcjEsIFJtID0gcjIgKi8KIAlhc2ktPmluc25bMF0gPSBpbnNuOwpAQCAtOTI1LDYgKzk1MSw5IEBACiBwcmVwX2VtdWxhdGVfcmRoaTE2cmRsbzEycnM4cm0wX3dmbGFncyhrcHJvYmVfb3Bjb2RlX3QgaW5zbiwKIAkJCQkgICAgICAgc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiAqYXNpKQogeworCWlmIChpc19yMTUoaW5zbiwgMTYpIHx8IGlzX3IxNShpbnNuLCAxMikpCisJCXJldHVybiBJTlNOX1JFSkVDVEVEOwkvKiBSZEhpIG9yIFJkTG8gaXMgUEMgKi8KKwogCWluc24gJj0gMHhmZmYwMDBmMDsJLyogUmRIaSA9IHIwLCBSZExvID0gcjEgKi8KIAlpbnNuIHw9IDB4MDAwMDEyMDM7CS8qIFJzID0gcjIsIFJtID0gcjMgKi8KIAlhc2ktPmluc25bMF0gPSBpbnNuOwpAQCAtOTQ1LDIwICs5NzQsMTMgQEAKIHN0YXRpYyBlbnVtIGtwcm9iZV9pbnNuIF9fa3Byb2Jlcwogc3BhY2VfMTExMShrcHJvYmVfb3Bjb2RlX3QgaW5zbiwgc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiAqYXNpKQogewotCS8qIENQUyBtbW9kID09IDEgOiAxMTExIDAwMDEgMDAwMCB4eDEwIHh4eHggeHh4eCB4eDB4IHh4eHggKi8KLQkvKiBSRkUgICAgICAgICAgIDogMTExMSAxMDB4IHgweDEgeHh4eCB4eHh4IDEwMTAgeHh4eCB4eHh4ICovCi0JLyogU1JTICAgICAgICAgICA6IDExMTEgMTAweCB4MXgwIDExMDEgeHh4eCAwMTAxIHh4eHggeHh4eCAqLwotCWlmICgoaW5zbiAmIDB4ZmZmMzAwMjApID09IDB4ZjEwMjAwMDAgfHwKLQkgICAgKGluc24gJiAweGZlNTAwZjAwKSA9PSAweGY4MTAwYTAwIHx8Ci0JICAgIChpbnNuICYgMHhmZTVmMGYwMCkgPT0gMHhmODRkMDUwMCkKLQkJcmV0dXJuIElOU05fUkVKRUNURUQ7Ci0KLQkvKiBQTEQgOiAxMTExIDAxeDEgeDEwMSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggOiAqLwotCWlmICgoaW5zbiAmIDB4ZmQ3MDAwMDApID09IDB4ZjQ1MDAwMDApIHsKLQkJaW5zbiAmPSAweGZmZjBmZmZmOwkvKiBSbiA9IHIwICovCi0JCWFzaS0+aW5zblswXSA9IGluc247Ci0JCWFzaS0+aW5zbl9oYW5kbGVyID0gZW11bGF0ZV9ybjE2OwotCQlyZXR1cm4gSU5TTl9HT09EOworCS8qIG1lbW9yeSBoaW50IDogMTExMSAwMTAwIHgwMDEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IDogKi8KKwkvKiBQTERJICAgICAgICA6IDExMTEgMDEwMCB4MTAxIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCA6ICovCisJLyogUExEVyAgICAgICAgOiAxMTExIDAxMDEgeDAwMSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggOiAqLworCS8qIFBMRCAgICAgICAgIDogMTExMSAwMTAxIHgxMDEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IDogKi8KKwlpZiAoKGluc24gJiAweGZlMzAwMDAwKSA9PSAweGY0MTAwMDAwKSB7CisJCWFzaS0+aW5zbl9oYW5kbGVyID0gZW11bGF0ZV9ub3A7CisJCXJldHVybiBJTlNOX0dPT0RfTk9fU0xPVDsKIAl9CiAKIAkvKiBCTFgoMSkgOiAxMTExIDEwMXggeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggOiAqLwpAQCAtOTY3LDQxICs5ODksMjIgQEAKIAkJcmV0dXJuIElOU05fR09PRF9OT19TTE9UOwogCX0KIAotCS8qIFNFVEVORCA6IDExMTEgMDAwMSAwMDAwIDAwMDEgeHh4eCB4eHh4IDAwMDAgeHh4eCAqLwotCS8qIENEUDIgICA6IDExMTEgMTExMCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eDAgeHh4eCAqLwotCWlmICgoaW5zbiAmIDB4ZmZmZjAwZjApID09IDB4ZjEwMTAwMDAgfHwKLQkgICAgKGluc24gJiAweGZmMDAwMDEwKSA9PSAweGZlMDAwMDAwKSB7Ci0JCWFzaS0+aW5zblswXSA9IGluc247Ci0JCWFzaS0+aW5zbl9oYW5kbGVyID0gZW11bGF0ZV9ub25lOwotCQlyZXR1cm4gSU5TTl9HT09EOwotCX0KKwkvKiBDUFMgICA6IDExMTEgMDAwMSAwMDAwIHh4eDAgeHh4eCB4eHh4IHh4MHggeHh4eCAqLworCS8qIFNFVEVORDogMTExMSAwMDAxIDAwMDAgMDAwMSB4eHh4IHh4eHggMDAwMCB4eHh4ICovCiAKKwkvKiBTUlMgICA6IDExMTEgMTAweCB4MXgwIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAqLworCS8qIFJGRSAgIDogMTExMSAxMDB4IHgweDEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCisKKwkvKiBDb3Byb2Nlc3NvciBpbnN0cnVjdGlvbnMuLi4gKi8KIAkvKiBNQ1JSMiA6IDExMTEgMTEwMCAwMTAwIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCA6IChSZCAhPSBSbikgKi8KIAkvKiBNUlJDMiA6IDExMTEgMTEwMCAwMTAxIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCA6IChSZCAhPSBSbikgKi8KLQlpZiAoKGluc24gJiAweGZmZTAwMDAwKSA9PSAweGZjNDAwMDAwKSB7Ci0JCWluc24gJj0gMHhmZmYwMGZmZjsJLyogUm4gPSByMCAqLwotCQlpbnNuIHw9IDB4MDAwMDEwMDA7CS8qIFJkID0gcjEgKi8KLQkJYXNpLT5pbnNuWzBdID0gaW5zbjsKLQkJYXNpLT5pbnNuX2hhbmRsZXIgPQotCQkJKGluc24gJiAoMSA8PCAyMCkpID8gZW11bGF0ZV9tcnJjIDogZW11bGF0ZV9tY3JyOwotCQlyZXR1cm4gSU5TTl9HT09EOwotCX0KKwkvKiBMREMyICA6IDExMTEgMTEweCB4eHgxIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAqLworCS8qIFNUQzIgIDogMTExMSAxMTB4IHh4eDAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCisJLyogQ0RQMiAgOiAxMTExIDExMTAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHgwIHh4eHggKi8KKwkvKiBNQ1IyICA6IDExMTEgMTExMCB4eHgwIHh4eHggeHh4eCB4eHh4IHh4eDEgeHh4eCAqLworCS8qIE1SQzIgIDogMTExMSAxMTEwIHh4eDEgeHh4eCB4eHh4IHh4eHggeHh4MSB4eHh4ICovCiAKLQkvKiBMREMyIDogMTExMSAxMTB4IHh4eDEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCi0JLyogU1RDMiA6IDExMTEgMTEweCB4eHgwIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAqLwotCWlmICgoaW5zbiAmIDB4ZmUwMDAwMDApID09IDB4ZmMwMDAwMDApIHsKLQkJaW5zbiAmPSAweGZmZjBmZmZmOyAgICAgIC8qIFJuID0gcjAgKi8KLQkJYXNpLT5pbnNuWzBdID0gaW5zbjsKLQkJYXNpLT5pbnNuX2hhbmRsZXIgPSBlbXVsYXRlX2xkY3N0YzsKLQkJcmV0dXJuIElOU05fR09PRDsKLQl9Ci0KLQkvKiBNQ1IyIDogMTExMSAxMTEwIHh4eDAgeHh4eCB4eHh4IHh4eHggeHh4MSB4eHh4ICovCi0JLyogTVJDMiA6IDExMTEgMTExMCB4eHgxIHh4eHggeHh4eCB4eHh4IHh4eDEgeHh4eCAqLwotCWluc24gJj0gMHhmZmZmMGZmZjsJLyogUmQgPSByMCAqLwotCWFzaS0+aW5zblswXSAgICAgID0gaW5zbjsKLQlhc2ktPmluc25faGFuZGxlciA9IChpbnNuICYgKDEgPDwgMjApKSA/IGVtdWxhdGVfcmQxMiA6IGVtdWxhdGVfaXJkMTI7Ci0JcmV0dXJuIElOU05fR09PRDsKKwlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsKIH0KIAogc3RhdGljIGVudW0ga3Byb2JlX2luc24gX19rcHJvYmVzCkBAIC0xMDEwLDE5ICsxMDEzLDE4IEBACiAJLyogY2NjYyAwMDAxIDB4eDAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHgwIHh4eHggKi8KIAlpZiAoKGluc24gJiAweDBmOTAwMDEwKSA9PSAweDAxMDAwMDAwKSB7CiAKLQkJLyogQlhKICA6IGNjY2MgMDAwMSAwMDEwIHh4eHggeHh4eCB4eHh4IDAwMTAgeHh4eCAqLwotCQkvKiBNU1IgIDogY2NjYyAwMDAxIDB4MTAgeHh4eCB4eHh4IHh4eHggMDAwMCB4eHh4ICovCi0JCWlmICgoaW5zbiAmIDB4MGZmMDAwZjApID09IDB4MDEyMDAwMjAgfHwKLQkJICAgIChpbnNuICYgMHgwZmIwMDBmMCkgPT0gMHgwMTIwMDAwMCkKLQkJCXJldHVybiBJTlNOX1JFSkVDVEVEOwotCi0JCS8qIE1SUyA6IGNjY2MgMDAwMSAweDAwIHh4eHggeHh4eCB4eHh4IDAwMDAgeHh4eCAqLwotCQlpZiAoKGluc24gJiAweDBmYjAwMDEwKSA9PSAweDAxMDAwMDAwKQotCQkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDEyKGluc24sIGFzaSk7CisJCS8qIE1SUyBjcHNyIDogY2NjYyAwMDAxIDAwMDAgeHh4eCB4eHh4IHh4eHggMDAwMCB4eHh4ICovCisJCWlmICgoaW5zbiAmIDB4MGZmMDAwZjApID09IDB4MDEwMDAwMDApIHsKKwkJCWlmIChpc19yMTUoaW5zbiwgMTIpKQorCQkJCXJldHVybiBJTlNOX1JFSkVDVEVEOwkvKiBSZCBpcyBQQyAqLworCQkJYXNpLT5pbnNuX2hhbmRsZXIgPSBzaW11bGF0ZV9tcnM7CisJCQlyZXR1cm4gSU5TTl9HT09EX05PX1NMT1Q7CisJCX0KIAogCQkvKiBTTUxBTHh5IDogY2NjYyAwMDAxIDAxMDAgeHh4eCB4eHh4IHh4eHggMXh4MCB4eHh4ICovCiAJCWlmICgoaW5zbiAmIDB4MGZmMDAwOTApID09IDB4MDE0MDAwODApCi0JCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkaGkxNnJkbG8xMnJzOHJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKKwkJCXJldHVybiBwcmVwX2VtdWxhdGVfcmRoaTE2cmRsbzEycnM4cm0wX3dmbGFncyhpbnNuLAorCQkJCQkJCQkJYXNpKTsKIAogCQkvKiBTTVVMV3kgOiBjY2NjIDAwMDEgMDAxMCB4eHh4IHh4eHggeHh4eCAxeDEwIHh4eHggKi8KIAkJLyogU01VTHh5IDogY2NjYyAwMDAxIDAxMTAgeHh4eCB4eHh4IHh4eHggMXh4MCB4eHh4ICovCkBAIC0xMDMxLDI0ICsxMDMzLDI5IEBACiAJCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTZyczhybTBfd2ZsYWdzKGluc24sIGFzaSk7CiAKIAkJLyogU01MQXh5IDogY2NjYyAwMDAxIDAwMDAgeHh4eCB4eHh4IHh4eHggMXh4MCB4eHh4IDogUSAqLwotCQkvKiBTTUxBV3kgOiBjY2NjIDAwMDEgMDAxMCB4eHh4IHh4eHggeHh4eCAweDAwIHh4eHggOiBRICovCi0JCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxNnJuMTJyczhybTBfd2ZsYWdzKGluc24sIGFzaSk7CisJCS8qIFNNTEFXeSA6IGNjY2MgMDAwMSAwMDEwIHh4eHggeHh4eCB4eHh4IDF4MDAgeHh4eCA6IFEgKi8KKwkJaWYgKChpbnNuICYgMHgwZmYwMDA5MCkgPT0gMHgwMTAwMDA4MCB8fAorCQkgICAgKGluc24gJiAweDBmZjAwMGIwKSA9PSAweDAxMjAwMDgwKQorCQkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDE2cm4xMnJzOHJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKIAorCQkvKiBCWEogICAgICA6IGNjY2MgMDAwMSAwMDEwIHh4eHggeHh4eCB4eHh4IDAwMTAgeHh4eCAqLworCQkvKiBNU1IgICAgICA6IGNjY2MgMDAwMSAweDEwIHh4eHggeHh4eCB4eHh4IDAwMDAgeHh4eCAqLworCQkvKiBNUlMgc3BzciA6IGNjY2MgMDAwMSAwMTAwIHh4eHggeHh4eCB4eHh4IDAwMDAgeHh4eCAqLworCisJCS8qIE90aGVyIGluc3RydWN0aW9uIGVuY29kaW5ncyBhcmVuJ3QgeWV0IGRlZmluZWQgKi8KKwkJcmV0dXJuIElOU05fUkVKRUNURUQ7CiAJfQogCiAJLyogY2NjYyAwMDAxIDB4eDAgeHh4eCB4eHh4IHh4eHggeHh4eCAweHgxIHh4eHggKi8KIAllbHNlIGlmICgoaW5zbiAmIDB4MGY5MDAwOTApID09IDB4MDEwMDAwMTApIHsKIAotCQkvKiBCS1BUIDogMTExMCAwMDAxIDAwMTAgeHh4eCB4eHh4IHh4eHggMDExMSB4eHh4ICovCi0JCWlmICgoaW5zbiAmIDB4ZmZmMDAwZjApID09IDB4ZTEyMDAwNzApCi0JCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsKLQogCQkvKiBCTFgoMikgOiBjY2NjIDAwMDEgMDAxMCB4eHh4IHh4eHggeHh4eCAwMDExIHh4eHggKi8KIAkJLyogQlggICAgIDogY2NjYyAwMDAxIDAwMTAgeHh4eCB4eHh4IHh4eHggMDAwMSB4eHh4ICovCiAJCWlmICgoaW5zbiAmIDB4MGZmMDAwZDApID09IDB4MDEyMDAwMTApIHsKLQkJCWFzaS0+aW5zblswXSA9IHRydWVjY19pbnNuKGluc24pOworCQkJaWYgKChpbnNuICYgMHgwZmYwMDBmZikgPT0gMHgwMTIwMDAzZikKKwkJCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsgLyogQkxYIHBjICovCiAJCQlhc2ktPmluc25faGFuZGxlciA9IHNpbXVsYXRlX2JseDJieDsKLQkJCXJldHVybiBJTlNOX0dPT0Q7CisJCQlyZXR1cm4gSU5TTl9HT09EX05PX1NMT1Q7CiAJCX0KIAogCQkvKiBDTFogOiBjY2NjIDAwMDEgMDExMCB4eHh4IHh4eHggeHh4eCAwMDAxIHh4eHggKi8KQEAgLTEwNTksMTcgKzEwNjYsMjcgQEAKIAkJLyogUVNVQiAgICA6IGNjY2MgMDAwMSAwMDEwIHh4eHggeHh4eCB4eHh4IDAxMDEgeHh4eCA6USAqLwogCQkvKiBRREFERCAgIDogY2NjYyAwMDAxIDAxMDAgeHh4eCB4eHh4IHh4eHggMDEwMSB4eHh4IDpRICovCiAJCS8qIFFEU1VCICAgOiBjY2NjIDAwMDEgMDExMCB4eHh4IHh4eHggeHh4eCAwMTAxIHh4eHggOlEgKi8KLQkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDEycm4xNnJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKKwkJaWYgKChpbnNuICYgMHgwZjkwMDBmMCkgPT0gMHgwMTAwMDA1MCkKKwkJCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxMnJuMTZybTBfd2ZsYWdzKGluc24sIGFzaSk7CisKKwkJLyogQktQVCA6IDExMTAgMDAwMSAwMDEwIHh4eHggeHh4eCB4eHh4IDAxMTEgeHh4eCAqLworCQkvKiBTTUMgIDogY2NjYyAwMDAxIDAxMTAgeHh4eCB4eHh4IHh4eHggMDExMSB4eHh4ICovCisKKwkJLyogT3RoZXIgaW5zdHJ1Y3Rpb24gZW5jb2RpbmdzIGFyZW4ndCB5ZXQgZGVmaW5lZCAqLworCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsKIAl9CiAKIAkvKiBjY2NjIDAwMDAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCAqLwotCWVsc2UgaWYgKChpbnNuICYgMHgwZjAwMDA5MCkgPT0gMHgwMDAwMDA5MCkgeworCWVsc2UgaWYgKChpbnNuICYgMHgwZjAwMDBmMCkgPT0gMHgwMDAwMDA5MCkgewogCiAJCS8qIE1VTCAgICA6IGNjY2MgMDAwMCAwMDAwIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCA6ICAgKi8KIAkJLyogTVVMUyAgIDogY2NjYyAwMDAwIDAwMDEgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4IDpjYyAqLwogCQkvKiBNTEEgICAgOiBjY2NjIDAwMDAgMDAxMCB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggOiAgICovCiAJCS8qIE1MQVMgICA6IGNjY2MgMDAwMCAwMDExIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCA6Y2MgKi8KIAkJLyogVU1BQUwgIDogY2NjYyAwMDAwIDAxMDAgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4IDogICAqLworCQkvKiB1bmRlZiAgOiBjY2NjIDAwMDAgMDEwMSB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggOiAgICovCisJCS8qIE1MUyAgICA6IGNjY2MgMDAwMCAwMTEwIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCA6ICAgKi8KKwkJLyogdW5kZWYgIDogY2NjYyAwMDAwIDAxMTEgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4IDogICAqLwogCQkvKiBVTVVMTCAgOiBjY2NjIDAwMDAgMTAwMCB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggOiAgICovCiAJCS8qIFVNVUxMUyA6IGNjY2MgMDAwMCAxMDAxIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCA6Y2MgKi8KIAkJLyogVU1MQUwgIDogY2NjYyAwMDAwIDEwMTAgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4IDogICAqLwpAQCAtMTA3OCwxMyArMTA5NSwxNSBAQAogCQkvKiBTTVVMTFMgOiBjY2NjIDAwMDAgMTEwMSB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggOmNjICovCiAJCS8qIFNNTEFMICA6IGNjY2MgMDAwMCAxMTEwIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCA6ICAgKi8KIAkJLyogU01MQUxTIDogY2NjYyAwMDAwIDExMTEgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4IDpjYyAqLwotCQlpZiAoKGluc24gJiAweDBmZTAwMGYwKSA9PSAweDAwMDAwMDkwKSB7Ci0JCSAgICAgICByZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTZyczhybTBfd2ZsYWdzKGluc24sIGFzaSk7Ci0JCX0gZWxzZSBpZiAgKChpbnNuICYgMHgwZmUwMDBmMCkgPT0gMHgwMDIwMDA5MCkgewotCQkgICAgICAgcmV0dXJuIHByZXBfZW11bGF0ZV9yZDE2cm4xMnJzOHJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKLQkJfSBlbHNlIHsKLQkJICAgICAgIHJldHVybiBwcmVwX2VtdWxhdGVfcmRoaTE2cmRsbzEycnM4cm0wX3dmbGFncyhpbnNuLCBhc2kpOwotCQl9CisJCWlmICgoaW5zbiAmIDB4MDBkMDAwMDApID09IDB4MDA1MDAwMDApCisJCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsKKwkJZWxzZSBpZiAoKGluc24gJiAweDAwZTAwMDAwKSA9PSAweDAwMDAwMDAwKQorCQkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDE2cnM4cm0wX3dmbGFncyhpbnNuLCBhc2kpOworCQllbHNlIGlmICgoaW5zbiAmIDB4MDBhMDAwMDApID09IDB4MDAyMDAwMDApCisJCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTZybjEycnM4cm0wX3dmbGFncyhpbnNuLCBhc2kpOworCQllbHNlCisJCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkaGkxNnJkbG8xMnJzOHJtMF93ZmxhZ3MoaW5zbiwKKwkJCQkJCQkJCWFzaSk7CiAJfQogCiAJLyogY2NjYyAwMDB4IHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAxeHgxIHh4eHggKi8KQEAgLTEwOTIsMjMgKzExMTEsNDUgQEAKIAogCQkvKiBTV1AgICA6IGNjY2MgMDAwMSAwMDAwIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCAqLwogCQkvKiBTV1BCICA6IGNjY2MgMDAwMSAwMTAwIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCAqLwotCQkvKiBMRFJEICA6IGNjY2MgMDAweCB4eHgwIHh4eHggeHh4eCB4eHh4IDExMDEgeHh4eCAqLwotCQkvKiBTVFJEICA6IGNjY2MgMDAweCB4eHgwIHh4eHggeHh4eCB4eHh4IDExMTEgeHh4eCAqLworCQkvKiA/Pz8gICA6IGNjY2MgMDAwMSAweDAxIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCAqLworCQkvKiA/Pz8gICA6IGNjY2MgMDAwMSAweDEwIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCAqLworCQkvKiA/Pz8gICA6IGNjY2MgMDAwMSAweDExIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCAqLwogCQkvKiBTVFJFWCA6IGNjY2MgMDAwMSAxMDAwIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCAqLwogCQkvKiBMRFJFWCA6IGNjY2MgMDAwMSAxMDAxIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCAqLworCQkvKiBTVFJFWEQ6IGNjY2MgMDAwMSAxMDEwIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCAqLworCQkvKiBMRFJFWEQ6IGNjY2MgMDAwMSAxMDExIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCAqLworCQkvKiBTVFJFWEI6IGNjY2MgMDAwMSAxMTAwIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCAqLworCQkvKiBMRFJFWEI6IGNjY2MgMDAwMSAxMTAxIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCAqLworCQkvKiBTVFJFWEg6IGNjY2MgMDAwMSAxMTEwIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCAqLworCQkvKiBMRFJFWEg6IGNjY2MgMDAwMSAxMTExIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCAqLworCisJCS8qIExEUkQgIDogY2NjYyAwMDB4IHh4eDAgeHh4eCB4eHh4IHh4eHggMTEwMSB4eHh4ICovCisJCS8qIFNUUkQgIDogY2NjYyAwMDB4IHh4eDAgeHh4eCB4eHh4IHh4eHggMTExMSB4eHh4ICovCiAJCS8qIExEUkggIDogY2NjYyAwMDB4IHh4eDEgeHh4eCB4eHh4IHh4eHggMTAxMSB4eHh4ICovCiAJCS8qIFNUUkggIDogY2NjYyAwMDB4IHh4eDAgeHh4eCB4eHh4IHh4eHggMTAxMSB4eHh4ICovCiAJCS8qIExEUlNCIDogY2NjYyAwMDB4IHh4eDEgeHh4eCB4eHh4IHh4eHggMTEwMSB4eHh4ICovCiAJCS8qIExEUlNIIDogY2NjYyAwMDB4IHh4eDEgeHh4eCB4eHh4IHh4eHggMTExMSB4eHh4ICovCi0JCWlmICgoaW5zbiAmIDB4MGZiMDAwZjApID09IDB4MDEwMDAwOTApIHsKLQkJCS8qIFNXUC9TV1BCICovCi0JCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTJybjE2cm0wX3dmbGFncyhpbnNuLCBhc2kpOworCQlpZiAoKGluc24gJiAweDBmMDAwMGYwKSA9PSAweDAxMDAwMDkwKSB7CisJCQlpZiAoKGluc24gJiAweDBmYjAwMGYwKSA9PSAweDAxMDAwMDkwKSB7CisJCQkJLyogU1dQL1NXUEIgKi8KKwkJCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTJybjE2cm0wX3dmbGFncyhpbnNuLAorCQkJCQkJCQkJYXNpKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogU1RSRVgvTERSRVggdmFyaWFudHMgYW5kIHVuYWxsb2NhZWQgc3BhY2UgKi8KKwkJCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsKKwkJCX0KKwogCQl9IGVsc2UgaWYgKChpbnNuICYgMHgwZTEwMDBkMCkgPT0gMHgwMDAwMGQwKSB7CiAJCQkvKiBTVFJEL0xEUkQgKi8KKwkJCWlmICgoaW5zbiAmIDB4MDAwMGUwMDApID09IDB4MDAwMGUwMDApCisJCQkJcmV0dXJuIElOU05fUkVKRUNURUQ7CS8qIFJkIGlzIExSIG9yIFBDICovCisJCQlpZiAoaXNfd3JpdGViYWNrKGluc24pICYmIGlzX3IxNShpbnNuLCAxNikpCisJCQkJcmV0dXJuIElOU05fUkVKRUNURUQ7CS8qIFdyaXRlYmFjayB0byBQQyAqLworCiAJCQlpbnNuICY9IDB4ZmZmMDBmZmY7CiAJCQlpbnNuIHw9IDB4MDAwMDIwMDA7CS8qIFJuID0gcjAsIFJkID0gcjIgKi8KLQkJCWlmIChpbnNuICYgKDEgPDwgMjIpKSB7Ci0JCQkJLyogSSBiaXQgKi8KKwkJCWlmICghKGluc24gJiAoMSA8PCAyMikpKSB7CisJCQkJLyogUmVnaXN0ZXIgaW5kZXggKi8KIAkJCQlpbnNuICY9IH4weGY7CiAJCQkJaW5zbiB8PSAxOwkvKiBSbSA9IHIxICovCiAJCQl9CkBAIC0xMTE4LDYgKzExNTksOSBAQAogCQkJcmV0dXJuIElOU05fR09PRDsKIAkJfQogCisJCS8qIExEUkgvU1RSSC9MRFJTQi9MRFJTSCAqLworCQlpZiAoaXNfcjE1KGluc24sIDEyKSkKKwkJCXJldHVybiBJTlNOX1JFSkVDVEVEOwkvKiBSZCBpcyBQQyAqLwogCQlyZXR1cm4gcHJlcF9lbXVsYXRlX2xkcl9zdHIoaW5zbiwgYXNpKTsKIAl9CiAKQEAgLTExMjUsNyArMTE2OSw3IEBACiAKIAkvKgogCSAqIEFMVSBvcCB3aXRoIFMgYml0IGFuZCBSZCA9PSAxNSA6Ci0JICogCWNjY2MgMDAweCB4eHgxIHh4eHggMTExMSB4eHh4IHh4eHggeHh4eAorCSAqCWNjY2MgMDAweCB4eHgxIHh4eHggMTExMSB4eHh4IHh4eHggeHh4eAogCSAqLwogCWlmICgoaW5zbiAmIDB4MGUxMGYwMDApID09IDB4MDAxMGYwMDApCiAJCXJldHVybiBJTlNOX1JFSkVDVEVEOwpAQCAtMTE1NCwyMiArMTE5OCw2MSBAQAogCQlpbnNuIHw9IDB4MDAwMDAyMDA7ICAgICAvKiBScyA9IHIyICovCiAJfQogCWFzaS0+aW5zblswXSA9IGluc247Ci0JYXNpLT5pbnNuX2hhbmRsZXIgPSAoaW5zbiAmICgxIDw8IDIwKSkgPyAgLyogUy1iaXQgKi8KKworCWlmICgoaW5zbiAmIDB4MGY5MDAwMDApID09IDB4MDExMDAwMDApIHsKKwkJLyoKKwkJICogVFNUIDogY2NjYyAwMDAxIDAwMDEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4CisJCSAqIFRFUSA6IGNjY2MgMDAwMSAwMDExIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eAorCQkgKiBDTVAgOiBjY2NjIDAwMDEgMDEwMSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHgKKwkJICogQ01OIDogY2NjYyAwMDAxIDAxMTEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4CisJCSAqLworCQlhc2ktPmluc25faGFuZGxlciA9IGVtdWxhdGVfYWx1X3Rlc3RzOworCX0gZWxzZSB7CisJCS8qIEFMVSBvcHMgd2hpY2ggd3JpdGUgdG8gUmQgKi8KKwkJYXNpLT5pbnNuX2hhbmRsZXIgPSAoaW5zbiAmICgxIDw8IDIwKSkgPyAgLyogUy1iaXQgKi8KIAkJCQllbXVsYXRlX2FsdV9yd2ZsYWdzIDogZW11bGF0ZV9hbHVfcmZsYWdzOworCX0KIAlyZXR1cm4gSU5TTl9HT09EOwogfQogCiBzdGF0aWMgZW51bSBrcHJvYmVfaW5zbiBfX2twcm9iZXMKIHNwYWNlX2NjY2NfMDAxeChrcHJvYmVfb3Bjb2RlX3QgaW5zbiwgc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiAqYXNpKQogeworCS8qIE1PVlcgIDogY2NjYyAwMDExIDAwMDAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCisJLyogTU9WVCAgOiBjY2NjIDAwMTEgMDEwMCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggKi8KKwlpZiAoKGluc24gJiAweDBmYjAwMDAwKSA9PSAweDAzMDAwMDAwKQorCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTJfbW9kaWZ5KGluc24sIGFzaSk7CisKKwkvKiBoaW50cyA6IGNjY2MgMDAxMSAwMDEwIDAwMDAgeHh4eCB4eHh4IHh4eHggeHh4eCAqLworCWlmICgoaW5zbiAmIDB4MGZmZjAwMDApID09IDB4MDMyMDAwMDApIHsKKwkJdW5zaWduZWQgb3AyID0gaW5zbiAmIDB4MDAwMDAwZmY7CisJCWlmIChvcDIgPT0gMHgwMSB8fCBvcDIgPT0gMHgwNCkgeworCQkJLyogWUlFTEQgOiBjY2NjIDAwMTEgMDAxMCAwMDAwIHh4eHggeHh4eCAwMDAwIDAwMDEgKi8KKwkJCS8qIFNFViAgIDogY2NjYyAwMDExIDAwMTAgMDAwMCB4eHh4IHh4eHggMDAwMCAwMTAwICovCisJCQlhc2ktPmluc25bMF0gPSBpbnNuOworCQkJYXNpLT5pbnNuX2hhbmRsZXIgPSBlbXVsYXRlX25vbmU7CisJCQlyZXR1cm4gSU5TTl9HT09EOworCQl9IGVsc2UgaWYgKG9wMiA8PSAweDAzKSB7CisJCQkvKiBOT1AgICA6IGNjY2MgMDAxMSAwMDEwIDAwMDAgeHh4eCB4eHh4IDAwMDAgMDAwMCAqLworCQkJLyogV0ZFICAgOiBjY2NjIDAwMTEgMDAxMCAwMDAwIHh4eHggeHh4eCAwMDAwIDAwMTAgKi8KKwkJCS8qIFdGSSAgIDogY2NjYyAwMDExIDAwMTAgMDAwMCB4eHh4IHh4eHggMDAwMCAwMDExICovCisJCQkvKgorCQkJICogV2UgbWFrZSBXRkUgYW5kIFdGSSB0cnVlIE5PUHMgdG8gYXZvaWQgc3RhbGxzIGR1ZQorCQkJICogdG8gbWlzc2luZyBldmVudHMgd2hpbHN0IHByb2Nlc3NpbmcgdGhlIHByb2JlLgorCQkJICovCisJCQlhc2ktPmluc25faGFuZGxlciA9IGVtdWxhdGVfbm9wOworCQkJcmV0dXJuIElOU05fR09PRF9OT19TTE9UOworCQl9CisJCS8qIEZvciBEQkcgYW5kIHVuYWxsb2NhdGVkIGhpbnRzIGl0J3Mgc2FmZXN0IHRvIHJlamVjdCB0aGVtICovCisJCXJldHVybiBJTlNOX1JFSkVDVEVEOworCX0KKwogCS8qCiAJICogTVNSICAgOiBjY2NjIDAwMTEgMHgxMCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHgKLQkgKiBVbmRlZiA6IGNjY2MgMDAxMSAwMTAwIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eAogCSAqIEFMVSBvcCB3aXRoIFMgYml0IGFuZCBSZCA9PSAxNSA6CiAJICoJICAgY2NjYyAwMDF4IHh4eDEgeHh4eCAxMTExIHh4eHggeHh4eCB4eHh4CiAJICovCiAJaWYgKChpbnNuICYgMHgwZmIwMDAwMCkgPT0gMHgwMzIwMDAwMCB8fAkvKiBNU1IgKi8KLQkgICAgKGluc24gJiAweDBmZjAwMDAwKSA9PSAweDAzNDAwMDAwIHx8CS8qIFVuZGVmICovCiAJICAgIChpbnNuICYgMHgwZTEwZjAwMCkgPT0gMHgwMjEwZjAwMCkJCS8qIEFMVSBzLWJpdCwgUjE1ICAqLwogCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsKIApAQCAtMTE4MCwxMCArMTI2MywyMiBAQAogCSAqICpTIChiaXQgMjApIHVwZGF0ZXMgY29uZGl0aW9uIGNvZGVzCiAJICogQURDL1NCQy9SU0MgcmVhZHMgdGhlIEMgZmxhZwogCSAqLwotCWluc24gJj0gMHhmZmZmMGZmZjsJLyogUmQgPSByMCAqLworCWluc24gJj0gMHhmZmYwMGZmZjsJLyogUm4gPSByMCBhbmQgUmQgPSByMCAqLwogCWFzaS0+aW5zblswXSA9IGluc247Ci0JYXNpLT5pbnNuX2hhbmRsZXIgPSAoaW5zbiAmICgxIDw8IDIwKSkgPyAgLyogUy1iaXQgKi8KKworCWlmICgoaW5zbiAmIDB4MGY5MDAwMDApID09IDB4MDMxMDAwMDApIHsKKwkJLyoKKwkJICogVFNUIDogY2NjYyAwMDExIDAwMDEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4CisJCSAqIFRFUSA6IGNjY2MgMDAxMSAwMDExIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eAorCQkgKiBDTVAgOiBjY2NjIDAwMTEgMDEwMSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHgKKwkJICogQ01OIDogY2NjYyAwMDExIDAxMTEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4CisJCSAqLworCQlhc2ktPmluc25faGFuZGxlciA9IGVtdWxhdGVfYWx1X3Rlc3RzX2ltbTsKKwl9IGVsc2UgeworCQkvKiBBTFUgb3BzIHdoaWNoIHdyaXRlIHRvIFJkICovCisJCWFzaS0+aW5zbl9oYW5kbGVyID0gKGluc24gJiAoMSA8PCAyMCkpID8gIC8qIFMtYml0ICovCiAJCQllbXVsYXRlX2FsdV9pbW1fcndmbGFncyA6IGVtdWxhdGVfYWx1X2ltbV9yZmxhZ3M7CisJfQogCXJldHVybiBJTlNOX0dPT0Q7CiB9CiAKQEAgLTExOTIsNiArMTI4Nyw4IEBACiB7CiAJLyogU0VMIDogY2NjYyAwMTEwIDEwMDAgeHh4eCB4eHh4IHh4eHggMTAxMSB4eHh4IEdFOiAhISEgKi8KIAlpZiAoKGluc24gJiAweDBmZjAwMGYwKSA9PSAweDA2ODAwMGIwKSB7CisJCWlmIChpc19yMTUoaW5zbiwgMTIpKQorCQkJcmV0dXJuIElOU05fUkVKRUNURUQ7CS8qIFJkIGlzIFBDICovCiAJCWluc24gJj0gMHhmZmYwMGZmMDsJLyogUmQgPSByMCwgUm4gPSByMCAqLwogCQlpbnNuIHw9IDB4MDAwMDAwMDE7CS8qIFJtID0gcjEgKi8KIAkJYXNpLT5pbnNuWzBdID0gaW5zbjsKQEAgLTEyMDUsNiArMTMwMiw4IEBACiAJLyogVVNBVDE2IDogY2NjYyAwMTEwIDExMTAgeHh4eCB4eHh4IHh4eHggMDAxMSB4eHh4IDpRICovCiAJaWYgKChpbnNuICYgMHgwZmEwMDAzMCkgPT0gMHgwNmEwMDAxMCB8fAogCSAgICAoaW5zbiAmIDB4MGZiMDAwZjApID09IDB4MDZhMDAwMzApIHsKKwkJaWYgKGlzX3IxNShpbnNuLCAxMikpCisJCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsJLyogUmQgaXMgUEMgKi8KIAkJaW5zbiAmPSAweGZmZmYwZmYwOwkvKiBSZCA9IHIwLCBSbSA9IHIwICovCiAJCWFzaS0+aW5zblswXSA9IGluc247CiAJCWFzaS0+aW5zbl9oYW5kbGVyID0gZW11bGF0ZV9zYXQ7CkBAIC0xMjEzLDU3ICsxMzEyLDEwMSBAQAogCiAJLyogUkVWICAgIDogY2NjYyAwMTEwIDEwMTEgeHh4eCB4eHh4IHh4eHggMDAxMSB4eHh4ICovCiAJLyogUkVWMTYgIDogY2NjYyAwMTEwIDEwMTEgeHh4eCB4eHh4IHh4eHggMTAxMSB4eHh4ICovCisJLyogUkJJVCAgIDogY2NjYyAwMTEwIDExMTEgeHh4eCB4eHh4IHh4eHggMDAxMSB4eHh4ICovCiAJLyogUkVWU0ggIDogY2NjYyAwMTEwIDExMTEgeHh4eCB4eHh4IHh4eHggMTAxMSB4eHh4ICovCiAJaWYgKChpbnNuICYgMHgwZmYwMDA3MCkgPT0gMHgwNmIwMDAzMCB8fAotCSAgICAoaW5zbiAmIDB4MGZmMDAwZjApID09IDB4MDZmMDAwYjApCisJICAgIChpbnNuICYgMHgwZmYwMDA3MCkgPT0gMHgwNmYwMDAzMCkKIAkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDEycm0wKGluc24sIGFzaSk7CiAKKwkvKiA/Pz8gICAgICAgOiBjY2NjIDAxMTAgMDAwMCB4eHh4IHh4eHggeHh4eCB4eHgxIHh4eHggOiAgICovCiAJLyogU0FERDE2ICAgIDogY2NjYyAwMTEwIDAwMDEgeHh4eCB4eHh4IHh4eHggMDAwMSB4eHh4IDpHRSAqLwogCS8qIFNBRERTVUJYICA6IGNjY2MgMDExMCAwMDAxIHh4eHggeHh4eCB4eHh4IDAwMTEgeHh4eCA6R0UgKi8KIAkvKiBTU1VCQUREWCAgOiBjY2NjIDAxMTAgMDAwMSB4eHh4IHh4eHggeHh4eCAwMTAxIHh4eHggOkdFICovCiAJLyogU1NVQjE2ICAgIDogY2NjYyAwMTEwIDAwMDEgeHh4eCB4eHh4IHh4eHggMDExMSB4eHh4IDpHRSAqLwogCS8qIFNBREQ4ICAgICA6IGNjY2MgMDExMCAwMDAxIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCA6R0UgKi8KKwkvKiA/Pz8gICAgICAgOiBjY2NjIDAxMTAgMDAwMSB4eHh4IHh4eHggeHh4eCAxMDExIHh4eHggOiAgICovCisJLyogPz8/ICAgICAgIDogY2NjYyAwMTEwIDAwMDEgeHh4eCB4eHh4IHh4eHggMTEwMSB4eHh4IDogICAqLwogCS8qIFNTVUI4ICAgICA6IGNjY2MgMDExMCAwMDAxIHh4eHggeHh4eCB4eHh4IDExMTEgeHh4eCA6R0UgKi8KIAkvKiBRQUREMTYgICAgOiBjY2NjIDAxMTAgMDAxMCB4eHh4IHh4eHggeHh4eCAwMDAxIHh4eHggOiAgICovCiAJLyogUUFERFNVQlggIDogY2NjYyAwMTEwIDAwMTAgeHh4eCB4eHh4IHh4eHggMDAxMSB4eHh4IDogICAqLwogCS8qIFFTVUJBRERYICA6IGNjY2MgMDExMCAwMDEwIHh4eHggeHh4eCB4eHh4IDAxMDEgeHh4eCA6ICAgKi8KIAkvKiBRU1VCMTYgICAgOiBjY2NjIDAxMTAgMDAxMCB4eHh4IHh4eHggeHh4eCAwMTExIHh4eHggOiAgICovCiAJLyogUUFERDggICAgIDogY2NjYyAwMTEwIDAwMTAgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4IDogICAqLworCS8qID8/PyAgICAgICA6IGNjY2MgMDExMCAwMDEwIHh4eHggeHh4eCB4eHh4IDEwMTEgeHh4eCA6ICAgKi8KKwkvKiA/Pz8gICAgICAgOiBjY2NjIDAxMTAgMDAxMCB4eHh4IHh4eHggeHh4eCAxMTAxIHh4eHggOiAgICovCiAJLyogUVNVQjggICAgIDogY2NjYyAwMTEwIDAwMTAgeHh4eCB4eHh4IHh4eHggMTExMSB4eHh4IDogICAqLwogCS8qIFNIQUREMTYgICA6IGNjY2MgMDExMCAwMDExIHh4eHggeHh4eCB4eHh4IDAwMDEgeHh4eCA6ICAgKi8KIAkvKiBTSEFERFNVQlggOiBjY2NjIDAxMTAgMDAxMSB4eHh4IHh4eHggeHh4eCAwMDExIHh4eHggOiAgICovCiAJLyogU0hTVUJBRERYIDogY2NjYyAwMTEwIDAwMTEgeHh4eCB4eHh4IHh4eHggMDEwMSB4eHh4IDogICAqLwogCS8qIFNIU1VCMTYgICA6IGNjY2MgMDExMCAwMDExIHh4eHggeHh4eCB4eHh4IDAxMTEgeHh4eCA6ICAgKi8KIAkvKiBTSEFERDggICAgOiBjY2NjIDAxMTAgMDAxMSB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggOiAgICovCisJLyogPz8/ICAgICAgIDogY2NjYyAwMTEwIDAwMTEgeHh4eCB4eHh4IHh4eHggMTAxMSB4eHh4IDogICAqLworCS8qID8/PyAgICAgICA6IGNjY2MgMDExMCAwMDExIHh4eHggeHh4eCB4eHh4IDExMDEgeHh4eCA6ICAgKi8KIAkvKiBTSFNVQjggICAgOiBjY2NjIDAxMTAgMDAxMSB4eHh4IHh4eHggeHh4eCAxMTExIHh4eHggOiAgICovCisJLyogPz8/ICAgICAgIDogY2NjYyAwMTEwIDAxMDAgeHh4eCB4eHh4IHh4eHggeHh4MSB4eHh4IDogICAqLwogCS8qIFVBREQxNiAgICA6IGNjY2MgMDExMCAwMTAxIHh4eHggeHh4eCB4eHh4IDAwMDEgeHh4eCA6R0UgKi8KIAkvKiBVQUREU1VCWCAgOiBjY2NjIDAxMTAgMDEwMSB4eHh4IHh4eHggeHh4eCAwMDExIHh4eHggOkdFICovCiAJLyogVVNVQkFERFggIDogY2NjYyAwMTEwIDAxMDEgeHh4eCB4eHh4IHh4eHggMDEwMSB4eHh4IDpHRSAqLwogCS8qIFVTVUIxNiAgICA6IGNjY2MgMDExMCAwMTAxIHh4eHggeHh4eCB4eHh4IDAxMTEgeHh4eCA6R0UgKi8KIAkvKiBVQUREOCAgICAgOiBjY2NjIDAxMTAgMDEwMSB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggOkdFICovCisJLyogPz8/ICAgICAgIDogY2NjYyAwMTEwIDAxMDEgeHh4eCB4eHh4IHh4eHggMTAxMSB4eHh4IDogICAqLworCS8qID8/PyAgICAgICA6IGNjY2MgMDExMCAwMTAxIHh4eHggeHh4eCB4eHh4IDExMDEgeHh4eCA6ICAgKi8KIAkvKiBVU1VCOCAgICAgOiBjY2NjIDAxMTAgMDEwMSB4eHh4IHh4eHggeHh4eCAxMTExIHh4eHggOkdFICovCiAJLyogVVFBREQxNiAgIDogY2NjYyAwMTEwIDAxMTAgeHh4eCB4eHh4IHh4eHggMDAwMSB4eHh4IDogICAqLwogCS8qIFVRQUREU1VCWCA6IGNjY2MgMDExMCAwMTEwIHh4eHggeHh4eCB4eHh4IDAwMTEgeHh4eCA6ICAgKi8KIAkvKiBVUVNVQkFERFggOiBjY2NjIDAxMTAgMDExMCB4eHh4IHh4eHggeHh4eCAwMTAxIHh4eHggOiAgICovCiAJLyogVVFTVUIxNiAgIDogY2NjYyAwMTEwIDAxMTAgeHh4eCB4eHh4IHh4eHggMDExMSB4eHh4IDogICAqLwogCS8qIFVRQUREOCAgICA6IGNjY2MgMDExMCAwMTEwIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCA6ICAgKi8KKwkvKiA/Pz8gICAgICAgOiBjY2NjIDAxMTAgMDExMCB4eHh4IHh4eHggeHh4eCAxMDExIHh4eHggOiAgICovCisJLyogPz8/ICAgICAgIDogY2NjYyAwMTEwIDAxMTAgeHh4eCB4eHh4IHh4eHggMTEwMSB4eHh4IDogICAqLwogCS8qIFVRU1VCOCAgICA6IGNjY2MgMDExMCAwMTEwIHh4eHggeHh4eCB4eHh4IDExMTEgeHh4eCA6ICAgKi8KIAkvKiBVSEFERDE2ICAgOiBjY2NjIDAxMTAgMDExMSB4eHh4IHh4eHggeHh4eCAwMDAxIHh4eHggOiAgICovCiAJLyogVUhBRERTVUJYIDogY2NjYyAwMTEwIDAxMTEgeHh4eCB4eHh4IHh4eHggMDAxMSB4eHh4IDogICAqLwogCS8qIFVIU1VCQUREWCA6IGNjY2MgMDExMCAwMTExIHh4eHggeHh4eCB4eHh4IDAxMDEgeHh4eCA6ICAgKi8KIAkvKiBVSFNVQjE2ICAgOiBjY2NjIDAxMTAgMDExMSB4eHh4IHh4eHggeHh4eCAwMTExIHh4eHggOiAgICovCiAJLyogVUhBREQ4ICAgIDogY2NjYyAwMTEwIDAxMTEgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4IDogICAqLworCS8qID8/PyAgICAgICA6IGNjY2MgMDExMCAwMTExIHh4eHggeHh4eCB4eHh4IDEwMTEgeHh4eCA6ICAgKi8KKwkvKiA/Pz8gICAgICAgOiBjY2NjIDAxMTAgMDExMSB4eHh4IHh4eHggeHh4eCAxMTAxIHh4eHggOiAgICovCiAJLyogVUhTVUI4ICAgIDogY2NjYyAwMTEwIDAxMTEgeHh4eCB4eHh4IHh4eHggMTExMSB4eHh4IDogICAqLworCWlmICgoaW5zbiAmIDB4MGY4MDAwMTApID09IDB4MDYwMDAwMTApIHsKKwkJaWYgKChpbnNuICYgMHgwMDMwMDAwMCkgPT0gMHgwMDAwMDAwMCB8fAorCQkgICAgKGluc24gJiAweDAwMDAwMGUwKSA9PSAweDAwMDAwMGEwIHx8CisJCSAgICAoaW5zbiAmIDB4MDAwMDAwZTApID09IDB4MDAwMDAwYzApCisJCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsJLyogVW5hbGxvY2F0ZWQgc3BhY2UgKi8KKwkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDEycm4xNnJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKKwl9CisKIAkvKiBQS0hCVCAgICAgOiBjY2NjIDAxMTAgMTAwMCB4eHh4IHh4eHggeHh4eCB4MDAxIHh4eHggOiAgICovCiAJLyogUEtIVEIgICAgIDogY2NjYyAwMTEwIDEwMDAgeHh4eCB4eHh4IHh4eHggeDEwMSB4eHh4IDogICAqLworCWlmICgoaW5zbiAmIDB4MGZmMDAwMzApID09IDB4MDY4MDAwMTApCisJCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxMnJuMTZybTBfd2ZsYWdzKGluc24sIGFzaSk7CisKIAkvKiBTWFRBQjE2ICAgOiBjY2NjIDAxMTAgMTAwMCB4eHh4IHh4eHggeHh4eCAwMTExIHh4eHggOiAgICovCi0JLyogU1hUQiAgICAgIDogY2NjYyAwMTEwIDEwMTAgeHh4eCB4eHh4IHh4eHggMDExMSB4eHh4IDogICAqLworCS8qIFNYVEIxNiAgICA6IGNjY2MgMDExMCAxMDAwIDExMTEgeHh4eCB4eHh4IDAxMTEgeHh4eCA6ICAgKi8KKwkvKiA/Pz8gICAgICAgOiBjY2NjIDAxMTAgMTAwMSB4eHh4IHh4eHggeHh4eCAwMTExIHh4eHggOiAgICovCiAJLyogU1hUQUIgICAgIDogY2NjYyAwMTEwIDEwMTAgeHh4eCB4eHh4IHh4eHggMDExMSB4eHh4IDogICAqLworCS8qIFNYVEIgICAgICA6IGNjY2MgMDExMCAxMDEwIDExMTEgeHh4eCB4eHh4IDAxMTEgeHh4eCA6ICAgKi8KIAkvKiBTWFRBSCAgICAgOiBjY2NjIDAxMTAgMTAxMSB4eHh4IHh4eHggeHh4eCAwMTExIHh4eHggOiAgICovCisJLyogU1hUSCAgICAgIDogY2NjYyAwMTEwIDEwMTEgMTExMSB4eHh4IHh4eHggMDExMSB4eHh4IDogICAqLwogCS8qIFVYVEFCMTYgICA6IGNjY2MgMDExMCAxMTAwIHh4eHggeHh4eCB4eHh4IDAxMTEgeHh4eCA6ICAgKi8KKwkvKiBVWFRCMTYgICAgOiBjY2NjIDAxMTAgMTEwMCAxMTExIHh4eHggeHh4eCAwMTExIHh4eHggOiAgICovCisJLyogPz8/ICAgICAgIDogY2NjYyAwMTEwIDExMDEgeHh4eCB4eHh4IHh4eHggMDExMSB4eHh4IDogICAqLwogCS8qIFVYVEFCICAgICA6IGNjY2MgMDExMCAxMTEwIHh4eHggeHh4eCB4eHh4IDAxMTEgeHh4eCA6ICAgKi8KKwkvKiBVWFRCICAgICAgOiBjY2NjIDAxMTAgMTExMCAxMTExIHh4eHggeHh4eCAwMTExIHh4eHggOiAgICovCiAJLyogVVhUQUggICAgIDogY2NjYyAwMTEwIDExMTEgeHh4eCB4eHh4IHh4eHggMDExMSB4eHh4IDogICAqLwotCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxMnJuMTZybTBfd2ZsYWdzKGluc24sIGFzaSk7CisJLyogVVhUSCAgICAgIDogY2NjYyAwMTEwIDExMTEgMTExMSB4eHh4IHh4eHggMDExMSB4eHh4IDogICAqLworCWlmICgoaW5zbiAmIDB4MGY4MDAwZjApID09IDB4MDY4MDAwNzApIHsKKwkJaWYgKChpbnNuICYgMHgwMDMwMDAwMCkgPT0gMHgwMDEwMDAwMCkKKwkJCXJldHVybiBJTlNOX1JFSkVDVEVEOwkvKiBVbmFsbG9jYXRlZCBzcGFjZSAqLworCisJCWlmICgoaW5zbiAmIDB4MDAwZjAwMDApID09IDB4MDAwZjAwMDApCisJCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTJybTAoaW5zbiwgYXNpKTsKKwkJZWxzZQorCQkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDEycm4xNnJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKKwl9CisKKwkvKiBPdGhlciBpbnN0cnVjdGlvbiBlbmNvZGluZ3MgYXJlbid0IHlldCBkZWZpbmVkICovCisJcmV0dXJuIElOU05fUkVKRUNURUQ7CiB9CiAKIHN0YXRpYyBlbnVtIGtwcm9iZV9pbnNuIF9fa3Byb2JlcwpAQCAtMTI3MywyOSArMTQxNiw0OSBAQAogCWlmICgoaW5zbiAmIDB4MGZmMDAwZjApID09IDB4MDNmMDAwZjApCiAJCXJldHVybiBJTlNOX1JFSkVDVEVEOwogCi0JLyogVVNBREE4IDogY2NjYyAwMTExIDEwMDAgeHh4eCB4eHh4IHh4eHggMDAwMSB4eHh4ICovCi0JLyogVVNBRDggIDogY2NjYyAwMTExIDEwMDAgeHh4eCAxMTExIHh4eHggMDAwMSB4eHh4ICovCi0JaWYgKChpbnNuICYgMHgwZmYwMDBmMCkgPT0gMHgwNzgwMDAxMCkKLQkJIHJldHVybiBwcmVwX2VtdWxhdGVfcmQxNnJuMTJyczhybTBfd2ZsYWdzKGluc24sIGFzaSk7Ci0KIAkvKiBTTUxBTEQgOiBjY2NjIDAxMTEgMDEwMCB4eHh4IHh4eHggeHh4eCAwMHgxIHh4eHggKi8KIAkvKiBTTUxTTEQgOiBjY2NjIDAxMTEgMDEwMCB4eHh4IHh4eHggeHh4eCAwMXgxIHh4eHggKi8KIAlpZiAoKGluc24gJiAweDBmZjAwMDkwKSA9PSAweDA3NDAwMDEwKQogCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkaGkxNnJkbG8xMnJzOHJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKIAogCS8qIFNNTEFEICA6IGNjY2MgMDExMSAwMDAwIHh4eHggeHh4eCB4eHh4IDAweDEgeHh4eCA6USAqLworCS8qIFNNVUFEICA6IGNjY2MgMDExMSAwMDAwIHh4eHggMTExMSB4eHh4IDAweDEgeHh4eCA6USAqLwogCS8qIFNNTFNEICA6IGNjY2MgMDExMSAwMDAwIHh4eHggeHh4eCB4eHh4IDAxeDEgeHh4eCA6USAqLworCS8qIFNNVVNEICA6IGNjY2MgMDExMSAwMDAwIHh4eHggMTExMSB4eHh4IDAxeDEgeHh4eCA6ICAqLwogCS8qIFNNTUxBICA6IGNjY2MgMDExMSAwMTAxIHh4eHggeHh4eCB4eHh4IDAweDEgeHh4eCA6ICAqLwotCS8qIFNNTUxTICA6IGNjY2MgMDExMSAwMTAxIHh4eHggeHh4eCB4eHh4IDExeDEgeHh4eCA6ICAqLworCS8qIFNNTVVMICA6IGNjY2MgMDExMSAwMTAxIHh4eHggMTExMSB4eHh4IDAweDEgeHh4eCA6ICAqLworCS8qIFVTQURBOCA6IGNjY2MgMDExMSAxMDAwIHh4eHggeHh4eCB4eHh4IDAwMDEgeHh4eCA6ICAqLworCS8qIFVTQUQ4ICA6IGNjY2MgMDExMSAxMDAwIHh4eHggMTExMSB4eHh4IDAwMDEgeHh4eCA6ICAqLwogCWlmICgoaW5zbiAmIDB4MGZmMDAwOTApID09IDB4MDcwMDAwMTAgfHwKIAkgICAgKGluc24gJiAweDBmZjAwMGQwKSA9PSAweDA3NTAwMDEwIHx8Ci0JICAgIChpbnNuICYgMHgwZmYwMDBkMCkgPT0gMHgwNzUwMDBkMCkKKwkgICAgKGluc24gJiAweDBmZjAwMGYwKSA9PSAweDA3ODAwMDEwKSB7CisKKwkJaWYgKChpbnNuICYgMHgwMDAwZjAwMCkgPT0gMHgwMDAwZjAwMCkKKwkJCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxNnJzOHJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKKwkJZWxzZQorCQkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDE2cm4xMnJzOHJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKKwl9CisKKwkvKiBTTU1MUyAgOiBjY2NjIDAxMTEgMDEwMSB4eHh4IHh4eHggeHh4eCAxMXgxIHh4eHggOiAgKi8KKwlpZiAoKGluc24gJiAweDBmZjAwMGQwKSA9PSAweDA3NTAwMGQwKQogCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTZybjEycnM4cm0wX3dmbGFncyhpbnNuLCBhc2kpOwogCi0JLyogU01VU0QgIDogY2NjYyAwMTExIDAwMDAgeHh4eCB4eHh4IHh4eHggMDF4MSB4eHh4IDogICovCi0JLyogU01VQUQgIDogY2NjYyAwMTExIDAwMDAgeHh4eCAxMTExIHh4eHggMDB4MSB4eHh4IDpRICovCi0JLyogU01NVUwgIDogY2NjYyAwMTExIDAxMDEgeHh4eCAxMTExIHh4eHggMDB4MSB4eHh4IDogICovCi0JcmV0dXJuIHByZXBfZW11bGF0ZV9yZDE2cnM4cm0wX3dmbGFncyhpbnNuLCBhc2kpOworCS8qIFNCRlggICA6IGNjY2MgMDExMSAxMDF4IHh4eHggeHh4eCB4eHh4IHgxMDEgeHh4eCA6ICAqLworCS8qIFVCRlggICA6IGNjY2MgMDExMSAxMTF4IHh4eHggeHh4eCB4eHh4IHgxMDEgeHh4eCA6ICAqLworCWlmICgoaW5zbiAmIDB4MGZhMDAwNzApID09IDB4MDdhMDAwNTApCisJCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxMnJtMChpbnNuLCBhc2kpOworCisJLyogQkZJICAgIDogY2NjYyAwMTExIDExMHggeHh4eCB4eHh4IHh4eHggeDAwMSB4eHh4IDogICovCisJLyogQkZDICAgIDogY2NjYyAwMTExIDExMHggeHh4eCB4eHh4IHh4eHggeDAwMSAxMTExIDogICovCisJaWYgKChpbnNuICYgMHgwZmUwMDA3MCkgPT0gMHgwN2MwMDAxMCkgeworCisJCWlmICgoaW5zbiAmIDB4MDAwMDAwMGYpID09IDB4MDAwMDAwMGYpCisJCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTJfbW9kaWZ5KGluc24sIGFzaSk7CisJCWVsc2UKKwkJCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxMnJuMF9tb2RpZnkoaW5zbiwgYXNpKTsKKwl9CisKKwlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsKIH0KIAogc3RhdGljIGVudW0ga3Byb2JlX2luc24gX19rcHJvYmVzCkBAIC0xMzA5LDYgKzE0NzIsMTAgQEAKIAkvKiBTVFJCICA6IGNjY2MgMDF4eCB4MXgwIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAqLwogCS8qIFNUUkJUIDogY2NjYyAwMXgwIHgxMTAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCiAJLyogU1RSVCAgOiBjY2NjIDAxeDAgeDAxMCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggKi8KKworCWlmICgoaW5zbiAmIDB4MDA1MDAwMDApID09IDB4MDA1MDAwMDAgJiYgaXNfcjE1KGluc24sIDEyKSkKKwkJcmV0dXJuIElOU05fUkVKRUNURUQ7CS8qIExEUkIgaW50byBQQyAqLworCiAJcmV0dXJuIHByZXBfZW11bGF0ZV9sZHJfc3RyKGluc24sIGFzaSk7CiB9CiAKQEAgLTEzMjMsMTAgKzE0OTAsOSBAQAogCiAJLyogTERNKDEpIDogY2NjYyAxMDB4IHgweDEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCiAJLyogU1RNKDEpIDogY2NjYyAxMDB4IHgweDAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCi0JYXNpLT5pbnNuWzBdID0gdHJ1ZWNjX2luc24oaW5zbik7CiAJYXNpLT5pbnNuX2hhbmRsZXIgPSAoKGluc24gJiAweDEwODAwMCkgPT0gMHgwMDgwMDApID8gLyogU1RNICYgUjE1ICovCiAJCQkJc2ltdWxhdGVfc3RtMV9wYyA6IHNpbXVsYXRlX2xkbTFzdG0xOwotCXJldHVybiBJTlNOX0dPT0Q7CisJcmV0dXJuIElOU05fR09PRF9OT19TTE9UOwogfQogCiBzdGF0aWMgZW51bSBrcHJvYmVfaW5zbiBfX2twcm9iZXMKQEAgLTEzMzQsNTggKzE1MDAsMTE3IEBACiB7CiAJLyogQiAgOiBjY2NjIDEwMTAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggKi8KIAkvKiBCTCA6IGNjY2MgMTAxMSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAqLwotCWFzaS0+aW5zblswXSA9IHRydWVjY19pbnNuKGluc24pOwogCWFzaS0+aW5zbl9oYW5kbGVyID0gc2ltdWxhdGVfYmJsOwotCXJldHVybiBJTlNOX0dPT0Q7CisJcmV0dXJuIElOU05fR09PRF9OT19TTE9UOwogfQogCiBzdGF0aWMgZW51bSBrcHJvYmVfaW5zbiBfX2twcm9iZXMKLXNwYWNlX2NjY2NfMTEwMF8wMTB4KGtwcm9iZV9vcGNvZGVfdCBpbnNuLCBzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuICphc2kpCitzcGFjZV9jY2NjXzExeHgoa3Byb2JlX29wY29kZV90IGluc24sIHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gKmFzaSkKIHsKKwkvKiBDb3Byb2Nlc3NvciBpbnN0cnVjdGlvbnMuLi4gKi8KIAkvKiBNQ1JSIDogY2NjYyAxMTAwIDAxMDAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IDogKFJkIT1SbikgKi8KIAkvKiBNUlJDIDogY2NjYyAxMTAwIDAxMDEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IDogKFJkIT1SbikgKi8KLQlpbnNuICY9IDB4ZmZmMDBmZmY7Ci0JaW5zbiB8PSAweDAwMDAxMDAwOwkvKiBSbiA9IHIwLCBSZCA9IHIxICovCi0JYXNpLT5pbnNuWzBdID0gaW5zbjsKLQlhc2ktPmluc25faGFuZGxlciA9IChpbnNuICYgKDEgPDwgMjApKSA/IGVtdWxhdGVfbXJyYyA6IGVtdWxhdGVfbWNycjsKLQlyZXR1cm4gSU5TTl9HT09EOworCS8qIExEQyAgOiBjY2NjIDExMHggeHh4MSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggKi8KKwkvKiBTVEMgIDogY2NjYyAxMTB4IHh4eDAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCisJLyogQ0RQICA6IGNjY2MgMTExMCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eDAgeHh4eCAqLworCS8qIE1DUiAgOiBjY2NjIDExMTAgeHh4MCB4eHh4IHh4eHggeHh4eCB4eHgxIHh4eHggKi8KKwkvKiBNUkMgIDogY2NjYyAxMTEwIHh4eDEgeHh4eCB4eHh4IHh4eHggeHh4MSB4eHh4ICovCisKKwkvKiBTVkMgIDogY2NjYyAxMTExIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCisKKwlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsKIH0KIAotc3RhdGljIGVudW0ga3Byb2JlX2luc24gX19rcHJvYmVzCi1zcGFjZV9jY2NjXzExMHgoa3Byb2JlX29wY29kZV90IGluc24sIHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gKmFzaSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fa3Byb2JlcyBfX2NoZWNrX2VxKHVuc2lnbmVkIGxvbmcgY3BzcikKIHsKLQkvKiBMREMgOiBjY2NjIDExMHggeHh4MSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggKi8KLQkvKiBTVEMgOiBjY2NjIDExMHggeHh4MCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggKi8KLQlpbnNuICY9IDB4ZmZmMGZmZmY7CS8qIFJuID0gcjAgKi8KLQlhc2ktPmluc25bMF0gPSBpbnNuOwotCWFzaS0+aW5zbl9oYW5kbGVyID0gZW11bGF0ZV9sZGNzdGM7Ci0JcmV0dXJuIElOU05fR09PRDsKKwlyZXR1cm4gY3BzciAmIFBTUl9aX0JJVDsKIH0KIAotc3RhdGljIGVudW0ga3Byb2JlX2luc24gX19rcHJvYmVzCi1zcGFjZV9jY2NjXzExMXgoa3Byb2JlX29wY29kZV90IGluc24sIHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gKmFzaSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fa3Byb2JlcyBfX2NoZWNrX25lKHVuc2lnbmVkIGxvbmcgY3BzcikKIHsKLQkvKiBCS1BUIDogMTExMCAwMDAxIDAwMTAgeHh4eCB4eHh4IHh4eHggMDExMSB4eHh4ICovCi0JLyogU1dJICA6IGNjY2MgMTExMSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAqLwotCWlmICgoaW5zbiAmIDB4ZmZmMDAwZjApID09IDB4ZTEyMDAwNzAgfHwKLQkgICAgKGluc24gJiAweDBmMDAwMDAwKSA9PSAweDBmMDAwMDAwKQotCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsKLQotCS8qIENEUCA6IGNjY2MgMTExMCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eDAgeHh4eCAqLwotCWlmICgoaW5zbiAmIDB4MGYwMDAwMTApID09IDB4MGUwMDAwMDApIHsKLQkJYXNpLT5pbnNuWzBdID0gaW5zbjsKLQkJYXNpLT5pbnNuX2hhbmRsZXIgPSBlbXVsYXRlX25vbmU7Ci0JCXJldHVybiBJTlNOX0dPT0Q7Ci0JfQotCi0JLyogTUNSIDogY2NjYyAxMTEwIHh4eDAgeHh4eCB4eHh4IHh4eHggeHh4MSB4eHh4ICovCi0JLyogTVJDIDogY2NjYyAxMTEwIHh4eDEgeHh4eCB4eHh4IHh4eHggeHh4MSB4eHh4ICovCi0JaW5zbiAmPSAweGZmZmYwZmZmOwkvKiBSZCA9IHIwICovCi0JYXNpLT5pbnNuWzBdID0gaW5zbjsKLQlhc2ktPmluc25faGFuZGxlciA9IChpbnNuICYgKDEgPDwgMjApKSA/IGVtdWxhdGVfcmQxMiA6IGVtdWxhdGVfaXJkMTI7Ci0JcmV0dXJuIElOU05fR09PRDsKKwlyZXR1cm4gKH5jcHNyKSAmIFBTUl9aX0JJVDsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgX19rcHJvYmVzIF9fY2hlY2tfY3ModW5zaWduZWQgbG9uZyBjcHNyKQoreworCXJldHVybiBjcHNyICYgUFNSX0NfQklUOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2twcm9iZXMgX19jaGVja19jYyh1bnNpZ25lZCBsb25nIGNwc3IpCit7CisJcmV0dXJuICh+Y3BzcikgJiBQU1JfQ19CSVQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fa3Byb2JlcyBfX2NoZWNrX21pKHVuc2lnbmVkIGxvbmcgY3BzcikKK3sKKwlyZXR1cm4gY3BzciAmIFBTUl9OX0JJVDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19rcHJvYmVzIF9fY2hlY2tfcGwodW5zaWduZWQgbG9uZyBjcHNyKQoreworCXJldHVybiAofmNwc3IpICYgUFNSX05fQklUOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2twcm9iZXMgX19jaGVja192cyh1bnNpZ25lZCBsb25nIGNwc3IpCit7CisJcmV0dXJuIGNwc3IgJiBQU1JfVl9CSVQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fa3Byb2JlcyBfX2NoZWNrX3ZjKHVuc2lnbmVkIGxvbmcgY3BzcikKK3sKKwlyZXR1cm4gKH5jcHNyKSAmIFBTUl9WX0JJVDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19rcHJvYmVzIF9fY2hlY2tfaGkodW5zaWduZWQgbG9uZyBjcHNyKQoreworCWNwc3IgJj0gfihjcHNyID4+IDEpOyAvKiBQU1JfQ19CSVQgJj0gflBTUl9aX0JJVCAqLworCXJldHVybiBjcHNyICYgUFNSX0NfQklUOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2twcm9iZXMgX19jaGVja19scyh1bnNpZ25lZCBsb25nIGNwc3IpCit7CisJY3BzciAmPSB+KGNwc3IgPj4gMSk7IC8qIFBTUl9DX0JJVCAmPSB+UFNSX1pfQklUICovCisJcmV0dXJuICh+Y3BzcikgJiBQU1JfQ19CSVQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fa3Byb2JlcyBfX2NoZWNrX2dlKHVuc2lnbmVkIGxvbmcgY3BzcikKK3sKKwljcHNyIF49IChjcHNyIDw8IDMpOyAvKiBQU1JfTl9CSVQgXj0gUFNSX1ZfQklUICovCisJcmV0dXJuICh+Y3BzcikgJiBQU1JfTl9CSVQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fa3Byb2JlcyBfX2NoZWNrX2x0KHVuc2lnbmVkIGxvbmcgY3BzcikKK3sKKwljcHNyIF49IChjcHNyIDw8IDMpOyAvKiBQU1JfTl9CSVQgXj0gUFNSX1ZfQklUICovCisJcmV0dXJuIGNwc3IgJiBQU1JfTl9CSVQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fa3Byb2JlcyBfX2NoZWNrX2d0KHVuc2lnbmVkIGxvbmcgY3BzcikKK3sKKwl1bnNpZ25lZCBsb25nIHRlbXAgPSBjcHNyIF4gKGNwc3IgPDwgMyk7IC8qIFBTUl9OX0JJVCBePSBQU1JfVl9CSVQgKi8KKwl0ZW1wIHw9IChjcHNyIDw8IDEpOwkJCSAvKiBQU1JfTl9CSVQgfD0gUFNSX1pfQklUICovCisJcmV0dXJuICh+dGVtcCkgJiBQU1JfTl9CSVQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fa3Byb2JlcyBfX2NoZWNrX2xlKHVuc2lnbmVkIGxvbmcgY3BzcikKK3sKKwl1bnNpZ25lZCBsb25nIHRlbXAgPSBjcHNyIF4gKGNwc3IgPDwgMyk7IC8qIFBTUl9OX0JJVCBePSBQU1JfVl9CSVQgKi8KKwl0ZW1wIHw9IChjcHNyIDw8IDEpOwkJCSAvKiBQU1JfTl9CSVQgfD0gUFNSX1pfQklUICovCisJcmV0dXJuIHRlbXAgJiBQU1JfTl9CSVQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fa3Byb2JlcyBfX2NoZWNrX2FsKHVuc2lnbmVkIGxvbmcgY3BzcikKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGtwcm9iZV9jaGVja19jYyAqIGNvbnN0IGNvbmRpdGlvbl9jaGVja3NbMTZdID0geworCSZfX2NoZWNrX2VxLCAmX19jaGVja19uZSwgJl9fY2hlY2tfY3MsICZfX2NoZWNrX2NjLAorCSZfX2NoZWNrX21pLCAmX19jaGVja19wbCwgJl9fY2hlY2tfdnMsICZfX2NoZWNrX3ZjLAorCSZfX2NoZWNrX2hpLCAmX19jaGVja19scywgJl9fY2hlY2tfZ2UsICZfX2NoZWNrX2x0LAorCSZfX2NoZWNrX2d0LCAmX19jaGVja19sZSwgJl9fY2hlY2tfYWwsICZfX2NoZWNrX2FsCit9OworCiAvKiBSZXR1cm46CiAgKiAgIElOU05fUkVKRUNURUQgICAgIElmIGluc3RydWN0aW9uIGlzIG9uZSBub3QgYWxsb3dlZCB0byBrcHJvYmUsCiAgKiAgIElOU05fR09PRCAgICAgICAgIElmIGluc3RydWN0aW9uIGlzIHN1cHBvcnRlZCBhbmQgdXNlcyBpbnN0cnVjdGlvbiBzbG90LApAQCAtMTQwMSwxMzMgKzE2MjYsNDUgQEAKIGVudW0ga3Byb2JlX2luc24gX19rcHJvYmVzCiBhcm1fa3Byb2JlX2RlY29kZV9pbnNuKGtwcm9iZV9vcGNvZGVfdCBpbnNuLCBzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuICphc2kpCiB7CisJYXNpLT5pbnNuX2NoZWNrX2NjID0gY29uZGl0aW9uX2NoZWNrc1tpbnNuPj4yOF07CiAJYXNpLT5pbnNuWzFdID0gS1BST0JFX1JFVFVSTl9JTlNUUlVDVElPTjsKIAotCWlmICgoaW5zbiAmIDB4ZjAwMDAwMDApID09IDB4ZjAwMDAwMDApIHsKKwlpZiAoKGluc24gJiAweGYwMDAwMDAwKSA9PSAweGYwMDAwMDAwKQogCiAJCXJldHVybiBzcGFjZV8xMTExKGluc24sIGFzaSk7CiAKLQl9IGVsc2UgaWYgKChpbnNuICYgMHgwZTAwMDAwMCkgPT0gMHgwMDAwMDAwMCkgeworCWVsc2UgaWYgKChpbnNuICYgMHgwZTAwMDAwMCkgPT0gMHgwMDAwMDAwMCkKIAogCQlyZXR1cm4gc3BhY2VfY2NjY18wMDB4KGluc24sIGFzaSk7CiAKLQl9IGVsc2UgaWYgKChpbnNuICYgMHgwZTAwMDAwMCkgPT0gMHgwMjAwMDAwMCkgeworCWVsc2UgaWYgKChpbnNuICYgMHgwZTAwMDAwMCkgPT0gMHgwMjAwMDAwMCkKIAogCQlyZXR1cm4gc3BhY2VfY2NjY18wMDF4KGluc24sIGFzaSk7CiAKLQl9IGVsc2UgaWYgKChpbnNuICYgMHgwZjAwMDAxMCkgPT0gMHgwNjAwMDAxMCkgeworCWVsc2UgaWYgKChpbnNuICYgMHgwZjAwMDAxMCkgPT0gMHgwNjAwMDAxMCkKIAogCQlyZXR1cm4gc3BhY2VfY2NjY18wMTEwX18xKGluc24sIGFzaSk7CiAKLQl9IGVsc2UgaWYgKChpbnNuICYgMHgwZjAwMDAxMCkgPT0gMHgwNzAwMDAxMCkgeworCWVsc2UgaWYgKChpbnNuICYgMHgwZjAwMDAxMCkgPT0gMHgwNzAwMDAxMCkKIAogCQlyZXR1cm4gc3BhY2VfY2NjY18wMTExX18xKGluc24sIGFzaSk7CiAKLQl9IGVsc2UgaWYgKChpbnNuICYgMHgwYzAwMDAwMCkgPT0gMHgwNDAwMDAwMCkgeworCWVsc2UgaWYgKChpbnNuICYgMHgwYzAwMDAwMCkgPT0gMHgwNDAwMDAwMCkKIAogCQlyZXR1cm4gc3BhY2VfY2NjY18wMXh4KGluc24sIGFzaSk7CiAKLQl9IGVsc2UgaWYgKChpbnNuICYgMHgwZTAwMDAwMCkgPT0gMHgwODAwMDAwMCkgeworCWVsc2UgaWYgKChpbnNuICYgMHgwZTAwMDAwMCkgPT0gMHgwODAwMDAwMCkKIAogCQlyZXR1cm4gc3BhY2VfY2NjY18xMDB4KGluc24sIGFzaSk7CiAKLQl9IGVsc2UgaWYgKChpbnNuICYgMHgwZTAwMDAwMCkgPT0gMHgwYTAwMDAwMCkgeworCWVsc2UgaWYgKChpbnNuICYgMHgwZTAwMDAwMCkgPT0gMHgwYTAwMDAwMCkKIAogCQlyZXR1cm4gc3BhY2VfY2NjY18xMDF4KGluc24sIGFzaSk7CiAKLQl9IGVsc2UgaWYgKChpbnNuICYgMHgwZmUwMDAwMCkgPT0gMHgwYzQwMDAwMCkgewotCi0JCXJldHVybiBzcGFjZV9jY2NjXzExMDBfMDEweChpbnNuLCBhc2kpOwotCi0JfSBlbHNlIGlmICgoaW5zbiAmIDB4MGUwMDAwMDApID09IDB4MGMwMDAwMDApIHsKLQotCQlyZXR1cm4gc3BhY2VfY2NjY18xMTB4KGluc24sIGFzaSk7Ci0KLQl9Ci0KLQlyZXR1cm4gc3BhY2VfY2NjY18xMTF4KGluc24sIGFzaSk7CisJcmV0dXJuIHNwYWNlX2NjY2NfMTF4eChpbnNuLCBhc2kpOwogfQogCiB2b2lkIF9faW5pdCBhcm1fa3Byb2JlX2RlY29kZV9pbml0KHZvaWQpCiB7CiAJZmluZF9zdHJfcGNfb2Zmc2V0KCk7CiB9Ci0KLQotLyoKLSAqIEFsbCBBUk0gaW5zdHJ1Y3Rpb25zIGxpc3RlZCBiZWxvdy4KLSAqCi0gKiBJbnN0cnVjdGlvbnMgYW5kIHRoZWlyIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgYXJlIGdpdmVuLgotICogSWYgYSBwYXJ0aWN1bGFyIHJlZ2lzdGVyIG1heSBub3QgdXNlIFIxNSwgaXQgaXMgcHJlZml4ZWQgd2l0aCBhICIhIi4KLSAqIElmIG1hcmtlZCB3aXRoIGEgIioiIG1lYW5zIHRoZSB2YWx1ZSByZXR1cm5lZCBieSByZWFkaW5nIFIxNQotICogaXMgaW1wbGVtZW50YXRpb24gZGVmaW5lZC4KLSAqCi0gKiBBREMvQUREL0FORC9CSUMvQ01OL0NNUC9FT1IvTU9WL01WTi9PUlIvUlNCL1JTQy9TQkMvU1VCL1RFUQotICogICAgIFRTVDogUmQsIFJuLCBSbSwgIVJzCi0gKiBCWDogUm0KLSAqIEJMWCgyKTogIVJtCi0gKiBCWDogUm0gKFIxNSBsZWdhbCwgYnV0IGRpc2NvdXJhZ2VkKQotICogQlhKOiAhUm0sCi0gKiBDTFo6ICFSZCwgIVJtCi0gKiBDUFk6IFJkLCBSbQotICogTERDLzIsU1RDLzIgaW1tZWRpYXRlIG9mZnNldCAmIHVuaW5kZXg6IFJuCi0gKiBMREMvMixTVEMvMiBpbW1lZGlhdGUgcHJlL3Bvc3QtaW5kZXhlZDogIVJuCi0gKiBMRE0oMS8zKTogIVJuLCByZWdpc3Rlcl9saXN0Ci0gKiBMRE0oMik6ICFSbiwgIXJlZ2lzdGVyX2xpc3QKLSAqIExEUixTVFIsUExEIGltbWVkaWF0ZSBvZmZzZXQ6IFJkLCBSbgotICogTERSLFNUUixQTEQgcmVnaXN0ZXIgb2Zmc2V0OiBSZCwgUm4sICFSbQotICogTERSLFNUUixQTEQgc2NhbGVkIHJlZ2lzdGVyIG9mZnNldDogUmQsICFSbiwgIVJtCi0gKiBMRFIsU1RSIGltbWVkaWF0ZSBwcmUvcG9zdC1pbmRleGVkOiBSZCwgIVJuCi0gKiBMRFIsU1RSIHJlZ2lzdGVyIHByZS9wb3N0LWluZGV4ZWQ6IFJkLCAhUm4sICFSbQotICogTERSLFNUUiBzY2FsZWQgcmVnaXN0ZXIgcHJlL3Bvc3QtaW5kZXhlZDogUmQsICFSbiwgIVJtCi0gKiBMRFJCLFNUUkIgaW1tZWRpYXRlIG9mZnNldDogIVJkLCBSbgotICogTERSQixTVFJCIHJlZ2lzdGVyIG9mZnNldDogIVJkLCBSbiwgIVJtCi0gKiBMRFJCLFNUUkIgc2NhbGVkIHJlZ2lzdGVyIG9mZnNldDogIVJkLCAhUm4sICFSbQotICogTERSQixTVFJCIGltbWVkaWF0ZSBwcmUvcG9zdC1pbmRleGVkOiAhUmQsICFSbgotICogTERSQixTVFJCIHJlZ2lzdGVyIHByZS9wb3N0LWluZGV4ZWQ6ICFSZCwgIVJuLCAhUm0KLSAqIExEUkIsU1RSQiBzY2FsZWQgcmVnaXN0ZXIgcHJlL3Bvc3QtaW5kZXhlZDogIVJkLCAhUm4sICFSbQotICogTERSVCxMRFJCVCxTVFJCVCBpbW1lZGlhdGUgcHJlL3Bvc3QtaW5kZXhlZDogIVJkLCAhUm4KLSAqIExEUlQsTERSQlQsU1RSQlQgcmVnaXN0ZXIgcHJlL3Bvc3QtaW5kZXhlZDogIVJkLCAhUm4sICFSbQotICogTERSVCxMRFJCVCxTVFJCVCBzY2FsZWQgcmVnaXN0ZXIgcHJlL3Bvc3QtaW5kZXhlZDogIVJkLCAhUm4sICFSbQotICogTERSSC9TSC9TQi9ELFNUUkgvU0gvU0IvRCBpbW1lZGlhdGUgb2Zmc2V0OiAhUmQsIFJuCi0gKiBMRFJIL1NIL1NCL0QsU1RSSC9TSC9TQi9EIHJlZ2lzdGVyIG9mZnNldDogIVJkLCBSbiwgIVJtCi0gKiBMRFJIL1NIL1NCL0QsU1RSSC9TSC9TQi9EIGltbWVkaWF0ZSBwcmUvcG9zdC1pbmRleGVkOiAhUmQsICFSbgotICogTERSSC9TSC9TQi9ELFNUUkgvU0gvU0IvRCByZWdpc3RlciBwcmUvcG9zdC1pbmRleGVkOiAhUmQsICFSbiwgIVJtCi0gKiBMRFJFWDogIVJkLCAhUm4KLSAqIE1DUi8yOiAhUmQKLSAqIE1DUlIvMixNUlJDLzI6ICFSZCwgIVJuCi0gKiBNTEE6ICFSZCwgIVJuLCAhUm0sICFScwotICogTU9WOiBSZAotICogTVJDLzI6ICFSZCAoaWYgUmQ9PTE1LCBvbmx5IGNoYW5nZXMgY29uZCBjb2Rlcywgbm90IHRoZSByZWdpc3RlcikKLSAqIE1SUyxNU1I6ICFSZAotICogTVVMOiAhUmQsICFSbSwgIVJzCi0gKiBQS0h7QlQsVEJ9OiAhUmQsICFSbiwgIVJtCi0gKiBRREFERCxbVV1RQURELzE2LzgvU1VCWDogIVJkLCAhUm0sICFSbgotICogUURTVUIsW1VdUVNVQi8xNi84L0FERFg6ICFSZCwgIVJtLCAhUm4KLSAqIFJFVi8xNi9TSDogIVJkLCAhUm0KLSAqIFJGRTogIVJuCi0gKiB7UyxVfVtIXUFERHsxNiw4LFNVQlh9LHtTLFV9W0hdU1VCezE2LDgsQUREWH06ICFSZCwgIVJuLCAhUm0KLSAqIFNFTDogIVJkLCAhUm4sICFSbQotICogU01MQTx4Pjx5PixTTUxBe0QsVzx5Pn0sU01MU0QsU01NTHtBLFN9OiAhUmQsICFSbiwgIVJtLCAhUnMKLSAqIFNNTEFMPHg+PHk+LFNNTEF7RCxMRH0sU01MU0xELFNNTVVMTCxTTVVMVzx5PjogIVJkSGksICFSZExvLCAhUm0sICFScwotICogU01NVUwsU01VQUQsU01VTDx4Pjx5PixTTVVTRDogIVJkLCAhUm0sICFScwotICogU1NBVC8xNjogIVJkLCAhUm0KLSAqIFNUTSgxLzIpOiAhUm4sIHJlZ2lzdGVyX2xpc3QqIChSMTUgaW4gcmVnIGxpc3Qgbm90IHJlY29tbWVuZGVkKQotICogU1RSVCBpbW1lZGlhdGUgcHJlL3Bvc3QtaW5kZXhlZDogUmQqLCAhUm4KLSAqIFNUUlQgcmVnaXN0ZXIgcHJlL3Bvc3QtaW5kZXhlZDogUmQqLCAhUm4sICFSbQotICogU1RSVCBzY2FsZWQgcmVnaXN0ZXIgcHJlL3Bvc3QtaW5kZXhlZDogUmQqLCAhUm4sICFSbQotICogU1RSRVg6ICFSZCwgIVJuLCAhUm0KLSAqIFNXUC9COiAhUmQsICFSbiwgIVJtCi0gKiB7UyxVfVhUQXtCLEIxNixIfTogIVJkLCAhUm4sICFSbQotICoge1MsVX1YVHtCLEIxNixIfTogIVJkLCAhUm0KLSAqIFVNe0FBLExBLFVMfUw6ICFSZEhpLCAhUmRMbywgIVJtLCAhUnMKLSAqIFVTQXtEOCxBOCxULFQxNn06ICFSZCwgIVJtLCAhUnMKLSAqCi0gKiBNYXkgdHJhbnNmZXIgY29udHJvbCBieSB3cml0aW5nIFIxNSAocG9zc2libGUgbW9kZSBjaGFuZ2VzIG9yIGFsdGVybmF0ZQotICogbW9kZSBhY2Nlc3NlcyBtYXJrZWQgYnkgIioiKToKLSAqIEFMVSBvcCAoKiB3aXRoIHMtYml0KSwgQiwgQkwsIEJLUFQsIEJMWCgxLzIpLCBCWCwgQlhKLCBDUFMqLCBDUFksCi0gKiBMRE0oMSksIExETSgyLzMpKiwgTERSLCBNT1YsIFJGRSosIFNXSSoKLSAqCi0gKiBJbnN0cnVjdGlvbnMgdGhhdCBkbyBub3QgdGFrZSBnZW5lcmFsIHJlZ2lzdGVycywgbm9yIHRyYW5zZmVyIGNvbnRyb2w6Ci0gKiBDRFAvMiwgU0VURU5ELCBTUlMqCi0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IDJiYTdkZWIuLjE2NTZjODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2twcm9iZXMuYwpAQCAtMTM0LDcgKzEzNCw4IEBACiAJCQkJIHN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCiB7CiAJcmVncy0+QVJNX3BjICs9IDQ7Ci0JcC0+YWluc24uaW5zbl9oYW5kbGVyKHAsIHJlZ3MpOworCWlmIChwLT5haW5zbi5pbnNuX2NoZWNrX2NjKHJlZ3MtPkFSTV9jcHNyKSkKKwkJcC0+YWluc24uaW5zbl9oYW5kbGVyKHAsIHJlZ3MpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2xlZHMuYyBiL2FyY2gvYXJtL2tlcm5lbC9sZWRzLmMKaW5kZXggMzFhMzE2Yy4uMGYxMDdkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2xlZHMuYworKysgYi9hcmNoL2FybS9rZXJuZWwvbGVkcy5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAKICNpbmNsdWRlIDxhc20vbGVkcy5oPgogCkBAIC02OSwyOSArNzAsOCBAQAogCiBzdGF0aWMgU1lTREVWX0FUVFIoZXZlbnQsIDAyMDAsIE5VTEwsIGxlZHNfc3RvcmUpOwogCi1zdGF0aWMgaW50IGxlZHNfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0JbGVkc19ldmVudChsZWRfc3RvcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbGVkc19yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKLXsKLQlsZWRzX2V2ZW50KGxlZF9zdGFydCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbGVkc19zaHV0ZG93bihzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQotewotCWxlZHNfZXZlbnQobGVkX2hhbHRlZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIGxlZHNfc3lzY2xhc3MgPSB7CiAJLm5hbWUJCT0gImxlZHMiLAotCS5zaHV0ZG93bgk9IGxlZHNfc2h1dGRvd24sCi0JLnN1c3BlbmQJPSBsZWRzX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBsZWRzX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBsZWRzX2RldmljZSA9IHsKQEAgLTk5LDYgKzc5LDI4IEBACiAJLmNscwkJPSAmbGVkc19zeXNjbGFzcywKIH07CiAKK3N0YXRpYyBpbnQgbGVkc19zdXNwZW5kKHZvaWQpCit7CisJbGVkc19ldmVudChsZWRfc3RvcCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxlZHNfcmVzdW1lKHZvaWQpCit7CisJbGVkc19ldmVudChsZWRfc3RhcnQpOworfQorCitzdGF0aWMgdm9pZCBsZWRzX3NodXRkb3duKHZvaWQpCit7CisJbGVkc19ldmVudChsZWRfaGFsdGVkKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBsZWRzX3N5c2NvcmVfb3BzID0geworCS5zaHV0ZG93bgk9IGxlZHNfc2h1dGRvd24sCisJLnN1c3BlbmQJPSBsZWRzX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBsZWRzX3Jlc3VtZSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGxlZHNfaW5pdCh2b2lkKQogewogCWludCByZXQ7CkBAIC0xMDcsNiArMTA5LDggQEAKIAkJcmV0ID0gc3lzZGV2X3JlZ2lzdGVyKCZsZWRzX2RldmljZSk7CiAJaWYgKHJldCA9PSAwKQogCQlyZXQgPSBzeXNkZXZfY3JlYXRlX2ZpbGUoJmxlZHNfZGV2aWNlLCAmYXR0cl9ldmVudCk7CisJaWYgKHJldCA9PSAwKQorCQlyZWdpc3Rlcl9zeXNjb3JlX29wcygmbGVkc19zeXNjb3JlX29wcyk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnQuYyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggOTc5ZGEzOS4uMTM5ZTNjOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC03NDYsNyArNzQ2LDggQEAKIAogCXRhaWwgPSAoc3RydWN0IGZyYW1lX3RhaWwgX191c2VyICopcmVncy0+QVJNX2ZwIC0gMTsKIAotCXdoaWxlICh0YWlsICYmICEoKHVuc2lnbmVkIGxvbmcpdGFpbCAmIDB4MykpCisJd2hpbGUgKChlbnRyeS0+bnIgPCBQRVJGX01BWF9TVEFDS19ERVBUSCkgJiYKKwkgICAgICAgdGFpbCAmJiAhKCh1bnNpZ25lZCBsb25nKXRhaWwgJiAweDMpKQogCQl0YWlsID0gdXNlcl9iYWNrdHJhY2UodGFpbCwgZW50cnkpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMmJmMjdmMy4uODE4MmY0NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYwpAQCAtNzY3LDEyICs3NjcsMjAgQEAKIAogI2lmZGVmIENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQKIAkJY2FzZSBQVFJBQ0VfR0VUSEJQUkVHUzoKKwkJCWlmIChwdHJhY2VfZ2V0X2JyZWFrcG9pbnRzKGNoaWxkKSA8IDApCisJCQkJcmV0dXJuIC1FU1JDSDsKKwogCQkJcmV0ID0gcHRyYWNlX2dldGhicHJlZ3MoY2hpbGQsIGFkZHIsCiAJCQkJCQkodW5zaWduZWQgbG9uZyBfX3VzZXIgKilkYXRhKTsKKwkJCXB0cmFjZV9wdXRfYnJlYWtwb2ludHMoY2hpbGQpOwogCQkJYnJlYWs7CiAJCWNhc2UgUFRSQUNFX1NFVEhCUFJFR1M6CisJCQlpZiAocHRyYWNlX2dldF9icmVha3BvaW50cyhjaGlsZCkgPCAwKQorCQkJCXJldHVybiAtRVNSQ0g7CisKIAkJCXJldCA9IHB0cmFjZV9zZXRoYnByZWdzKGNoaWxkLCBhZGRyLAogCQkJCQkJKHVuc2lnbmVkIGxvbmcgX191c2VyICopZGF0YSk7CisJCQlwdHJhY2VfcHV0X2JyZWFrcG9pbnRzKGNoaWxkKTsKIAkJCWJyZWFrOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYwppbmRleCBjYjgzOTgzLi4wMzQwMjI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jCkBAIC01OTcsMTkgKzU5NywxMyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9zeXNjYWxsX3Jlc3RhcnQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JcmVncy0+QVJNX3IwID0gcmVncy0+QVJNX09SSUdfcjA7Ci0JcmVncy0+QVJNX3BjIC09IHRodW1iX21vZGUocmVncykgPyAyIDogNDsKLX0KLQogLyoKICAqIE9LLCB3ZSdyZSBpbnZva2luZyBhIGhhbmRsZXIKICAqLwkKIHN0YXRpYyBpbnQKIGhhbmRsZV9zaWduYWwodW5zaWduZWQgbG9uZyBzaWcsIHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsCiAJICAgICAgc2lnaW5mb190ICppbmZvLCBzaWdzZXRfdCAqb2xkc2V0LAotCSAgICAgIHN0cnVjdCBwdF9yZWdzICogcmVncywgaW50IHN5c2NhbGwpCisJICAgICAgc3RydWN0IHB0X3JlZ3MgKiByZWdzKQogewogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkID0gY3VycmVudF90aHJlYWRfaW5mbygpOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKQEAgLTYxNywyNiArNjExLDYgQEAKIAlpbnQgcmV0OwogCiAJLyoKLQkgKiBJZiB3ZSB3ZXJlIGZyb20gYSBzeXN0ZW0gY2FsbCwgY2hlY2sgZm9yIHN5c3RlbSBjYWxsIHJlc3RhcnRpbmcuLi4KLQkgKi8KLQlpZiAoc3lzY2FsbCkgewotCQlzd2l0Y2ggKHJlZ3MtPkFSTV9yMCkgewotCQljYXNlIC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0s6Ci0JCWNhc2UgLUVSRVNUQVJUTk9IQU5EOgotCQkJcmVncy0+QVJNX3IwID0gLUVJTlRSOwotCQkJYnJlYWs7Ci0JCWNhc2UgLUVSRVNUQVJUU1lTOgotCQkJaWYgKCEoa2EtPnNhLnNhX2ZsYWdzICYgU0FfUkVTVEFSVCkpIHsKLQkJCQlyZWdzLT5BUk1fcjAgPSAtRUlOVFI7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQkvKiBmYWxsdGhyb3VnaCAqLwotCQljYXNlIC1FUkVTVEFSVE5PSU5UUjoKLQkJCXNldHVwX3N5c2NhbGxfcmVzdGFydChyZWdzKTsKLQkJfQotCX0KLQotCS8qCiAJICogdHJhbnNsYXRlIHRoZSBzaWduYWwKIAkgKi8KIAlpZiAodXNpZyA8IDMyICYmIHRocmVhZC0+ZXhlY19kb21haW4gJiYgdGhyZWFkLT5leGVjX2RvbWFpbi0+c2lnbmFsX2ludm1hcCkKQEAgLTY4NSw2ICs2NTksNyBAQAogICovCiBzdGF0aWMgdm9pZCBkb19zaWduYWwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzeXNjYWxsKQogeworCXVuc2lnbmVkIGludCByZXR2YWwgPSAwLCBjb250aW51ZV9hZGRyID0gMCwgcmVzdGFydF9hZGRyID0gMDsKIAlzdHJ1Y3Qga19zaWdhY3Rpb24ga2E7CiAJc2lnaW5mb190IGluZm87CiAJaW50IHNpZ25yOwpAQCAtNjk4LDE4ICs2NzMsNjEgQEAKIAlpZiAoIXVzZXJfbW9kZShyZWdzKSkKIAkJcmV0dXJuOwogCisJLyoKKwkgKiBJZiB3ZSB3ZXJlIGZyb20gYSBzeXN0ZW0gY2FsbCwgY2hlY2sgZm9yIHN5c3RlbSBjYWxsIHJlc3RhcnRpbmcuLi4KKwkgKi8KKwlpZiAoc3lzY2FsbCkgeworCQljb250aW51ZV9hZGRyID0gcmVncy0+QVJNX3BjOworCQlyZXN0YXJ0X2FkZHIgPSBjb250aW51ZV9hZGRyIC0gKHRodW1iX21vZGUocmVncykgPyAyIDogNCk7CisJCXJldHZhbCA9IHJlZ3MtPkFSTV9yMDsKKworCQkvKgorCQkgKiBQcmVwYXJlIGZvciBzeXN0ZW0gY2FsbCByZXN0YXJ0LiAgV2UgZG8gdGhpcyBoZXJlIHNvIHRoYXQgYQorCQkgKiBkZWJ1Z2dlciB3aWxsIHNlZSB0aGUgYWxyZWFkeSBjaGFuZ2VkIFBTVy4KKwkJICovCisJCXN3aXRjaCAocmV0dmFsKSB7CisJCWNhc2UgLUVSRVNUQVJUTk9IQU5EOgorCQljYXNlIC1FUkVTVEFSVFNZUzoKKwkJY2FzZSAtRVJFU1RBUlROT0lOVFI6CisJCQlyZWdzLT5BUk1fcjAgPSByZWdzLT5BUk1fT1JJR19yMDsKKwkJCXJlZ3MtPkFSTV9wYyA9IHJlc3RhcnRfYWRkcjsKKwkJCWJyZWFrOworCQljYXNlIC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0s6CisJCQlyZWdzLT5BUk1fcjAgPSAtRUlOVFI7CisJCQlicmVhazsKKwkJfQorCX0KKwogCWlmICh0cnlfdG9fZnJlZXplKCkpCiAJCWdvdG8gbm9fc2lnbmFsOwogCisJLyoKKwkgKiBHZXQgdGhlIHNpZ25hbCB0byBkZWxpdmVyLiAgV2hlbiBydW5uaW5nIHVuZGVyIHB0cmFjZSwgYXQgdGhpcworCSAqIHBvaW50IHRoZSBkZWJ1Z2dlciBtYXkgY2hhbmdlIGFsbCBvdXIgcmVnaXN0ZXJzIC4uLgorCSAqLwogCXNpZ25yID0gZ2V0X3NpZ25hbF90b19kZWxpdmVyKCZpbmZvLCAma2EsIHJlZ3MsIE5VTEwpOwogCWlmIChzaWduciA+IDApIHsKIAkJc2lnc2V0X3QgKm9sZHNldDsKIAorCQkvKgorCQkgKiBEZXBlbmRpbmcgb24gdGhlIHNpZ25hbCBzZXR0aW5ncyB3ZSBtYXkgbmVlZCB0byByZXZlcnQgdGhlCisJCSAqIGRlY2lzaW9uIHRvIHJlc3RhcnQgdGhlIHN5c3RlbSBjYWxsLiAgQnV0IHNraXAgdGhpcyBpZiBhCisJCSAqIGRlYnVnZ2VyIGhhcyBjaG9zZW4gdG8gcmVzdGFydCBhdCBhIGRpZmZlcmVudCBQQy4KKwkJICovCisJCWlmIChyZWdzLT5BUk1fcGMgPT0gcmVzdGFydF9hZGRyKSB7CisJCQlpZiAocmV0dmFsID09IC1FUkVTVEFSVE5PSEFORAorCQkJICAgIHx8IChyZXR2YWwgPT0gLUVSRVNUQVJUU1lTCisJCQkJJiYgIShrYS5zYS5zYV9mbGFncyAmIFNBX1JFU1RBUlQpKSkgeworCQkJCXJlZ3MtPkFSTV9yMCA9IC1FSU5UUjsKKwkJCQlyZWdzLT5BUk1fcGMgPSBjb250aW51ZV9hZGRyOworCQkJfQorCQl9CisKIAkJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1JFU1RPUkVfU0lHTUFTSykpCiAJCQlvbGRzZXQgPSAmY3VycmVudC0+c2F2ZWRfc2lnbWFzazsKIAkJZWxzZQogCQkJb2xkc2V0ID0gJmN1cnJlbnQtPmJsb2NrZWQ7Ci0JCWlmIChoYW5kbGVfc2lnbmFsKHNpZ25yLCAma2EsICZpbmZvLCBvbGRzZXQsIHJlZ3MsIHN5c2NhbGwpID09IDApIHsKKwkJaWYgKGhhbmRsZV9zaWduYWwoc2lnbnIsICZrYSwgJmluZm8sIG9sZHNldCwgcmVncykgPT0gMCkgewogCQkJLyoKIAkJCSAqIEEgc2lnbmFsIHdhcyBzdWNjZXNzZnVsbHkgZGVsaXZlcmVkOyB0aGUgc2F2ZWQKIAkJCSAqIHNpZ21hc2sgd2lsbCBoYXZlIGJlZW4gc3RvcmVkIGluIHRoZSBzaWduYWwgZnJhbWUsCkBAIC03MjMsMTEgKzc0MSwxNCBAQAogCX0KIAogIG5vX3NpZ25hbDoKLQkvKgotCSAqIE5vIHNpZ25hbCB0byBkZWxpdmVyIHRvIHRoZSBwcm9jZXNzIC0gcmVzdGFydCB0aGUgc3lzY2FsbC4KLQkgKi8KIAlpZiAoc3lzY2FsbCkgewotCQlpZiAocmVncy0+QVJNX3IwID09IC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0spIHsKKwkJLyoKKwkJICogSGFuZGxlIHJlc3RhcnRpbmcgYSBkaWZmZXJlbnQgc3lzdGVtIGNhbGwuICBBcyBhYm92ZSwKKwkJICogaWYgYSBkZWJ1Z2dlciBoYXMgY2hvc2VuIHRvIHJlc3RhcnQgYXQgYSBkaWZmZXJlbnQgUEMsCisJCSAqIGlnbm9yZSB0aGUgcmVzdGFydC4KKwkJICovCisJCWlmIChyZXR2YWwgPT0gLUVSRVNUQVJUX1JFU1RBUlRCTE9DSworCQkgICAgJiYgcmVncy0+QVJNX3BjID09IGNvbnRpbnVlX2FkZHIpIHsKIAkJCWlmICh0aHVtYl9tb2RlKHJlZ3MpKSB7CiAJCQkJcmVncy0+QVJNX3I3ID0gX19OUl9yZXN0YXJ0X3N5c2NhbGwgLSBfX05SX1NZU0NBTExfQkFTRTsKIAkJCQlyZWdzLT5BUk1fcGMgLT0gMjsKQEAgLTc1MCwxMSArNzcxLDYgQEAKICNlbmRpZgogCQkJfQogCQl9Ci0JCWlmIChyZWdzLT5BUk1fcjAgPT0gLUVSRVNUQVJUTk9IQU5EIHx8Ci0JCSAgICByZWdzLT5BUk1fcjAgPT0gLUVSRVNUQVJUU1lTIHx8Ci0JCSAgICByZWdzLT5BUk1fcjAgPT0gLUVSRVNUQVJUTk9JTlRSKSB7Ci0JCQlzZXR1cF9zeXNjYWxsX3Jlc3RhcnQocmVncyk7Ci0JCX0KIAogCQkvKiBJZiB0aGVyZSdzIG5vIHNpZ25hbCB0byBkZWxpdmVyLCB3ZSBqdXN0IHB1dCB0aGUgc2F2ZWQgc2lnbWFzawogCQkgKiBiYWNrLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NtcC5jIGIvYXJjaC9hcm0va2VybmVsL3NtcC5jCmluZGV4IDdhNTYxZWIuLjAwN2EwYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc21wLmMKQEAgLTQ3OSw3ICs0NzksNyBAQAogewogfQogCi1zdGF0aWMgdm9pZCBicm9hZGNhc3RfdGltZXJfc2V0dXAoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQorc3RhdGljIHZvaWQgX19jcHVpbml0IGJyb2FkY2FzdF90aW1lcl9zZXR1cChzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCiB7CiAJZXZ0LT5uYW1lCT0gImR1bW15X3RpbWVyIjsKIAlldnQtPmZlYXR1cmVzCT0gQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCB8CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc3lzX29hYmktY29tcGF0LmMgYi9hcmNoL2FybS9rZXJuZWwvc3lzX29hYmktY29tcGF0LmMKaW5kZXggNGFkOGRhMS4uYWYwYWFlYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3N5c19vYWJpLWNvbXBhdC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zeXNfb2FiaS1jb21wYXQuYwpAQCAtMzExLDcgKzMxMSw3IEBACiAJbG9uZyBlcnI7CiAJaW50IGk7CiAKLQlpZiAobnNvcHMgPCAxKQorCWlmIChuc29wcyA8IDEgfHwgbnNvcHMgPiBTRU1PUE0pCiAJCXJldHVybiAtRUlOVkFMOwogCXNvcHMgPSBrbWFsbG9jKHNpemVvZigqc29wcykgKiBuc29wcywgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzb3BzKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RpbWUuYyBiL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMKaW5kZXggMWZmNDZjYS4uY2I2MzRjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RpbWUuYworKysgYi9hcmNoL2FybS9rZXJuZWwvdGltZS5jCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKQEAgLTExNSw0OCArMTE1LDM3IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1BNKSAmJiAhZGVmaW5lZChDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUykKLXN0YXRpYyBpbnQgdGltZXJfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHRpbWVyX3N1c3BlbmQodm9pZCkKIHsKLQlzdHJ1Y3Qgc3lzX3RpbWVyICp0aW1lciA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBzeXNfdGltZXIsIGRldik7Ci0KLQlpZiAodGltZXItPnN1c3BlbmQgIT0gTlVMTCkKLQkJdGltZXItPnN1c3BlbmQoKTsKKwlpZiAoc3lzdGVtX3RpbWVyLT5zdXNwZW5kKQorCQlzeXN0ZW1fdGltZXItPnN1c3BlbmQoKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHRpbWVyX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgdGltZXJfcmVzdW1lKHZvaWQpCiB7Ci0Jc3RydWN0IHN5c190aW1lciAqdGltZXIgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgc3lzX3RpbWVyLCBkZXYpOwotCi0JaWYgKHRpbWVyLT5yZXN1bWUgIT0gTlVMTCkKLQkJdGltZXItPnJlc3VtZSgpOwotCi0JcmV0dXJuIDA7CisJaWYgKHN5c3RlbV90aW1lci0+cmVzdW1lKQorCQlzeXN0ZW1fdGltZXItPnJlc3VtZSgpOwogfQogI2Vsc2UKICNkZWZpbmUgdGltZXJfc3VzcGVuZCBOVUxMCiAjZGVmaW5lIHRpbWVyX3Jlc3VtZSBOVUxMCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgdGltZXJfc3lzY2xhc3MgPSB7Ci0JLm5hbWUJCT0gInRpbWVyIiwKK3N0YXRpYyBzdHJ1Y3Qgc3lzY29yZV9vcHMgdGltZXJfc3lzY29yZV9vcHMgPSB7CiAJLnN1c3BlbmQJPSB0aW1lcl9zdXNwZW5kLAogCS5yZXN1bWUJCT0gdGltZXJfcmVzdW1lLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgdGltZXJfaW5pdF9zeXNmcyh2b2lkKQorc3RhdGljIGludCBfX2luaXQgdGltZXJfaW5pdF9zeXNjb3JlX29wcyh2b2lkKQogewotCWludCByZXQgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJnRpbWVyX3N5c2NsYXNzKTsKLQlpZiAocmV0ID09IDApIHsKLQkJc3lzdGVtX3RpbWVyLT5kZXYuY2xzID0gJnRpbWVyX3N5c2NsYXNzOwotCQlyZXQgPSBzeXNkZXZfcmVnaXN0ZXIoJnN5c3RlbV90aW1lci0+ZGV2KTsKLQl9CisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnRpbWVyX3N5c2NvcmVfb3BzKTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKLWRldmljZV9pbml0Y2FsbCh0aW1lcl9pbml0X3N5c2ZzKTsKK2RldmljZV9pbml0Y2FsbCh0aW1lcl9pbml0X3N5c2NvcmVfb3BzKTsKIAogdm9pZCBfX2luaXQgdGltZV9pbml0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jCmluZGV4IDNiNTRhZDEuLmQ1MmVlYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jCkBAIC0yMzQsNyArMjM0LDYgQEAKIAogCXByaW50ayhLRVJOX0VNRVJHICJJbnRlcm5hbCBlcnJvcjogJXM6ICV4IFsjJWRdIiBTX1BSRUVNUFQgU19TTVAgIlxuIiwKIAkgICAgICAgc3RyLCBlcnIsICsrZGllX2NvdW50ZXIpOwotCXN5c2ZzX3ByaW50a19sYXN0X2ZpbGUoKTsKIAogCS8qIHRyYXAgYW5kIGVycm9yIG51bWJlcnMgYXJlIG1vc3RseSBtZWFuaW5nbGVzcyBvbiBBUk0gKi8KIAlyZXQgPSBub3RpZnlfZGllKERJRV9PT1BTLCBzdHIsIHJlZ3MsIGVyciwgdHNrLT50aHJlYWQudHJhcF9ubywgU0lHU0VHVik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCmluZGV4IDE5MzkwMjMuLjJkMjk5YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCkBAIC04Myw2ICs4Myw3IEBACiAJc2VsZWN0IENQVV9BUk05MjZUCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAlzZWxlY3QgSEFWRV9GQl9BVE1FTAorCXNlbGVjdCBIQVZFX05FVF9NQUNCCiAKIGNvbmZpZyBBUkNIX0FUNTcyRDk0MEhGCiAJYm9vbCAiQVQ1NzJEOTQwSEYiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWIwMS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWViMDEuYwppbmRleCAxZjlkM2NiLi5kOGRmNTlhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWIwMS5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lYjAxLmMKQEAgLTMwLDYgKzMwLDExIEBACiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAorc3RhdGljIHZvaWQgX19pbml0IGF0OTFlYjAxX2luaXRfaXJxKHZvaWQpCit7CisJYXQ5MXg0MF9pbml0X2ludGVycnVwdHMoTlVMTCk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBhdDkxZWIwMV9tYXBfaW8odm9pZCkKIHsKIAlhdDkxeDQwX2luaXRpYWxpemUoNDAwMDAwMDApOwpAQCAtMzgsNyArNDMsNyBAQAogTUFDSElORV9TVEFSVChBVDkxRUIwMSwgIkF0bWVsIEFUOTEgRUIwMSIpCiAJLyogTWFpbnRhaW5lcjogR3JlZyBVbmdlcmVyIDxnZXJnQHNuYXBnZWFyLmNvbT4gKi8KIAkudGltZXIJCT0gJmF0OTF4NDBfdGltZXIsCi0JLmluaXRfaXJxCT0gYXQ5MXg0MF9pbml0X2ludGVycnVwdHMsCisJLmluaXRfaXJxCT0gYXQ5MWViMDFfaW5pdF9pcnEsCiAJLm1hcF9pbwkJPSBhdDkxZWIwMV9tYXBfaW8sCiBNQUNISU5FX0VORAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2NwdS5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9jcHUuaAppbmRleCAzYmVmOTMxLi4wNzAwZjIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2NwdS5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvY3B1LmgKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgQVJDSF9JRF9BVDkxU0FNOUc0NQkweDgxOWIwNWEwCiAjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTlHNDVNUkwJMHg4MTliMDVhMgkvKiBha2EgOUc0NS1FUzIgJiBub24gRVMgbG90cyAqLwogI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05RzQ1RVMJMHg4MTliMDVhMQkvKiA5RzQ1LUVTIChFbmdpbmVlcmluZyBTYW1wbGUpICovCisjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTlYNQkweDgxOWEwNWEwCiAjZGVmaW5lIEFSQ0hfSURfQVQ5MUNBUDkJMHgwMzlBMDNBMAogCiAjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTlYRTEyOAkweDMyOTk3M2EwCkBAIC01NSw2ICs1NiwxMiBAQAogI2RlZmluZSBBUkNIX0VYSURfQVQ5MVNBTTlHNDYJMHgwMDAwMDAwMwogI2RlZmluZSBBUkNIX0VYSURfQVQ5MVNBTTlHNDUJMHgwMDAwMDAwNAogCisjZGVmaW5lIEFSQ0hfRVhJRF9BVDkxU0FNOUcxNQkweDAwMDAwMDAwCisjZGVmaW5lIEFSQ0hfRVhJRF9BVDkxU0FNOUczNQkweDAwMDAwMDAxCisjZGVmaW5lIEFSQ0hfRVhJRF9BVDkxU0FNOVgzNQkweDAwMDAwMDAyCisjZGVmaW5lIEFSQ0hfRVhJRF9BVDkxU0FNOUcyNQkweDAwMDAwMDAzCisjZGVmaW5lIEFSQ0hfRVhJRF9BVDkxU0FNOVgyNQkweDAwMDAwMDA0CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBhdDkxX2V4aWRfaWRlbnRpZnkodm9pZCkKIHsKIAlyZXR1cm4gYXQ5MV9zeXNfcmVhZChBVDkxX0RCR1VfRVhJRCk7CkBAIC0xNDMsNiArMTUwLDI3IEBACiAjZGVmaW5lIGNwdV9pc19hdDkxc2FtOW0xMSgpCSgwKQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQVJDSF9BVDkxU0FNOVg1CisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOXg1KCkJKGF0OTFfY3B1X2lkZW50aWZ5KCkgPT0gQVJDSF9JRF9BVDkxU0FNOVg1KQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnMTUoKQkoY3B1X2lzX2F0OTFzYW05eDUoKSAmJiBcCisJCQkJKGF0OTFfZXhpZF9pZGVudGlmeSgpID09IEFSQ0hfRVhJRF9BVDkxU0FNOUcxNSkpCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWczNSgpCShjcHVfaXNfYXQ5MXNhbTl4NSgpICYmIFwKKwkJCQkoYXQ5MV9leGlkX2lkZW50aWZ5KCkgPT0gQVJDSF9FWElEX0FUOTFTQU05RzM1KSkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05eDM1KCkJKGNwdV9pc19hdDkxc2FtOXg1KCkgJiYgXAorCQkJCShhdDkxX2V4aWRfaWRlbnRpZnkoKSA9PSBBUkNIX0VYSURfQVQ5MVNBTTlYMzUpKQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnMjUoKQkoY3B1X2lzX2F0OTFzYW05eDUoKSAmJiBcCisJCQkJKGF0OTFfZXhpZF9pZGVudGlmeSgpID09IEFSQ0hfRVhJRF9BVDkxU0FNOUcyNSkpCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOXgyNSgpCShjcHVfaXNfYXQ5MXNhbTl4NSgpICYmIFwKKwkJCQkoYXQ5MV9leGlkX2lkZW50aWZ5KCkgPT0gQVJDSF9FWElEX0FUOTFTQU05WDI1KSkKKyNlbHNlCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOXg1KCkJKDApCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWcxNSgpCSgwKQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnMzUoKQkoMCkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05eDM1KCkJKDApCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWcyNSgpCSgwKQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTl4MjUoKQkoMCkKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0FSQ0hfQVQ5MUNBUDkKICNkZWZpbmUgY3B1X2lzX2F0OTFjYXA5KCkJKGF0OTFfY3B1X2lkZW50aWZ5KCkgPT0gQVJDSF9JRF9BVDkxQ0FQOSkKICNkZWZpbmUgY3B1X2lzX2F0OTFjYXA5X3JldkIoKQkoYXQ5MWNhcDlfcmV2X2lkZW50aWZ5KCkgPT0gQVJDSF9SRVZJU0lPTl9DQVA5X0IpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9LY29uZmlnCmluZGV4IDMyZjE0NzkuLmMwZGVhY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9LY29uZmlnCkBAIC02Myw2ICs2Myw3IEBACiAJZGVwZW5kcyBvbiBBUkNIX0RBVklOQ0lfRE02NDR4CiAJc2VsZWN0IE1JU0NfREVWSUNFUwogCXNlbGVjdCBFRVBST01fQVQyNAorCXNlbGVjdCBJMkMKIAloZWxwCiAJICBDb25maWd1cmUgdGhpcyBvcHRpb24gdG8gc3BlY2lmeSB0aGUgd2hldGhlciB0aGUgYm9hcmQgdXNlZAogCSAgZm9yIGRldmVsb3BtZW50IGlzIGEgRE02NDR4IEVWTQpAQCAtNzIsNiArNzMsNyBAQAogCWRlcGVuZHMgb24gQVJDSF9EQVZJTkNJX0RNNjQ0eAogCXNlbGVjdCBNSVNDX0RFVklDRVMKIAlzZWxlY3QgRUVQUk9NX0FUMjQKKwlzZWxlY3QgSTJDCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzZWxlY3QgdGhlIEx5cnRlY2ggU21hbGwgRm9ybSBGYWN0b3IKIAkgIFNvZnR3YXJlIERlZmluZWQgUmFkaW8gKFNGRlNEUikgYm9hcmQuCkBAIC0xMDUsNiArMTA3LDcgQEAKIAlzZWxlY3QgTUFDSF9EQVZJTkNJX0RNNjQ2N1RFVk0KIAlzZWxlY3QgTUlTQ19ERVZJQ0VTCiAJc2VsZWN0IEVFUFJPTV9BVDI0CisJc2VsZWN0IEkyQwogCWhlbHAKIAkgIENvbmZpZ3VyZSB0aGlzIG9wdGlvbiB0byBzcGVjaWZ5IHRoZSB3aGV0aGVyIHRoZSBib2FyZCB1c2VkCiAJICBmb3IgZGV2ZWxvcG1lbnQgaXMgYSBETTY0NjcgRVZNCkBAIC0xMTgsNiArMTIxLDcgQEAKIAlkZXBlbmRzIG9uIEFSQ0hfREFWSU5DSV9ETTM2NQogCXNlbGVjdCBNSVNDX0RFVklDRVMKIAlzZWxlY3QgRUVQUk9NX0FUMjQKKwlzZWxlY3QgSTJDCiAJaGVscAogCSAgQ29uZmlndXJlIHRoaXMgb3B0aW9uIHRvIHNwZWNpZnkgd2hldGhlciB0aGUgYm9hcmQgdXNlZAogCSAgZm9yIGRldmVsb3BtZW50IGlzIGEgRE0zNjUgRVZNCkBAIC0xMjksNiArMTMzLDcgQEAKIAlzZWxlY3QgR1BJT19QQ0Y4NTdYCiAJc2VsZWN0IE1JU0NfREVWSUNFUwogCXNlbGVjdCBFRVBST01fQVQyNAorCXNlbGVjdCBJMkMKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHNlbGVjdCB0aGUgVEkgREE4MzAvT01BUC1MMTM3L0FNMTd4IEV2YWx1YXRpb24gTW9kdWxlLgogCkBAIC0yMDUsNiArMjEwLDcgQEAKIAlkZXBlbmRzIG9uIEFSQ0hfREFWSU5DSV9EQTg1MAogCXNlbGVjdCBNSVNDX0RFVklDRVMKIAlzZWxlY3QgRUVQUk9NX0FUMjQKKwlzZWxlY3QgSTJDCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzZWxlY3QgdGhlIENyaXRpY2FsIExpbmsgTWl0eURTUC1MMTM4L01pdHlBUk0tMTgwOAogCSAgU3lzdGVtIG9uIE1vZHVsZS4gIEluZm9ybWF0aW9uIG9uIHRoaXMgU29NIG1heSBiZSBmb3VuZCBhdApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLW1pdHlvbWFwbDEzOC5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLW1pdHlvbWFwbDEzOC5jCmluZGV4IDJhYTc5YzUuLjYwNmE2ZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1taXR5b21hcGwxMzguYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtbWl0eW9tYXBsMTM4LmMKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlIDxtYWNoL211eC5oPgogI2luY2x1ZGUgPG1hY2gvc3BpLmg+CiAKLSNkZWZpbmUgTUlUWU9NQVBMMTM4X1BIWV9JRAkJIjA6MDMiCisjZGVmaW5lIE1JVFlPTUFQTDEzOF9QSFlfSUQJCSIiCiAKICNkZWZpbmUgRkFDVE9SWV9DT05GSUdfTUFHSUMJMHgwMTJDMDEzOAogI2RlZmluZSBGQUNUT1JZX0NPTkZJR19WRVJTSU9OCTB4MDAwMTAwMDEKQEAgLTQxNCw3ICs0MTQsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtaXR5b21hcGwxMzhfbmFuZGZsYXNoX2RldmljZSA9IHsKIAkubmFtZQkJPSAiZGF2aW5jaV9uYW5kIiwKLQkuaWQJCT0gMCwKKwkuaWQJCT0gMSwKIAkuZGV2CQk9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmbWl0eW9tYXBsMTM4X25hbmRmbGFzaF9kYXRhLAogCX0sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvY3B1ZnJlcS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2NwdWZyZXEuYwppbmRleCAwYTk1YmUxLi40MTY2OWVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvY3B1ZnJlcS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9jcHVmcmVxLmMKQEAgLTk0LDkgKzk0LDcgQEAKIAlpZiAoZnJlcXMub2xkID09IGZyZXFzLm5ldykKIAkJcmV0dXJuIHJldDsKIAotCWNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLAotCQkJZGV2X2RyaXZlcl9zdHJpbmcoY3B1ZnJlcS5kZXYpLAotCQkJInRyYW5zaXRpb246ICV1IC0tPiAldVxuIiwgZnJlcXMub2xkLCBmcmVxcy5uZXcpOworCWRldl9kYmcoJmNwdWZyZXEuZGV2LCAidHJhbnNpdGlvbjogJXUgLS0+ICV1XG4iLCBmcmVxcy5vbGQsIGZyZXFzLm5ldyk7CiAKIAlyZXQgPSBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCBwZGF0YS0+ZnJlcV90YWJsZSwKIAkJCQkJCWZyZXFzLm5ldywgcmVsYXRpb24sICZpZHgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RldmljZXMtZGE4eHguYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kZXZpY2VzLWRhOHh4LmMKaW5kZXggNjI1ZDRiNi4uNThhMDJkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RldmljZXMtZGE4eHguYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGV2aWNlcy1kYTh4eC5jCkBAIC0zOSw3ICszOSw4IEBACiAjZGVmaW5lIERBOFhYX0dQSU9fQkFTRQkJCTB4MDFlMjYwMDAKICNkZWZpbmUgREE4WFhfSTJDMV9CQVNFCQkJMHgwMWUyODAwMAogI2RlZmluZSBEQThYWF9TUEkwX0JBU0UJCQkweDAxYzQxMDAwCi0jZGVmaW5lIERBOFhYX1NQSTFfQkFTRQkJCTB4MDFmMGUwMDAKKyNkZWZpbmUgREE4MzBfU1BJMV9CQVNFCQkJMHgwMWUxMjAwMAorI2RlZmluZSBEQTg1MF9TUEkxX0JBU0UJCQkweDAxZjBlMDAwCiAKICNkZWZpbmUgREE4WFhfRU1BQ19DVFJMX1JFR19PRkZTRVQJMHgzMDAwCiAjZGVmaW5lIERBOFhYX0VNQUNfTU9EX1JFR19PRkZTRVQJMHgyMDAwCkBAIC03NjIsOCArNzYzLDggQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkYTh4eF9zcGkxX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKLQkJLnN0YXJ0CT0gREE4WFhfU1BJMV9CQVNFLAotCQkuZW5kCT0gREE4WFhfU1BJMV9CQVNFICsgU1pfNEsgLSAxLAorCQkuc3RhcnQJPSBEQTgzMF9TUEkxX0JBU0UsCisJCS5lbmQJPSBEQTgzMF9TUEkxX0JBU0UgKyBTWl80SyAtIDEsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewpAQCAtODMyLDUgKzgzMywxMCBAQAogCiAJZGE4eHhfc3BpX3BkYXRhW2luc3RhbmNlXS5udW1fY2hpcHNlbGVjdCA9IGxlbjsKIAorCWlmIChpbnN0YW5jZSA9PSAxICYmIGNwdV9pc19kYXZpbmNpX2RhODUwKCkpIHsKKwkJZGE4eHhfc3BpMV9yZXNvdXJjZXNbMF0uc3RhcnQgPSBEQTg1MF9TUEkxX0JBU0U7CisJCWRhOHh4X3NwaTFfcmVzb3VyY2VzWzBdLmVuZCA9IERBODUwX1NQSTFfQkFTRSArIFNaXzRLIC0gMTsKKwl9CisKIAlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkYTh4eF9zcGlfZGV2aWNlW2luc3RhbmNlXSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNTUuYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM1NS5jCmluZGV4IGY2ODAxMjIuLmEzYTk0ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM1NS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM1NS5jCkBAIC0zMTQsNyArMzE0LDcgQEAKIAkubmFtZSA9ICJ0aW1lcjIiLAogCS5wYXJlbnQgPSAmcGxsMV9hdXhfY2xrLAogCS5scHNjID0gREFWSU5DSV9MUFNDX1RJTUVSMiwKLQkudXNlY291bnQgPSAxLCAgICAgICAgICAgICAgLyogUkVWSVNJVDogd2h5IGNhbid0JyB0aGlzIGJlIGRpc2FibGVkPyAqLworCS51c2Vjb3VudCA9IDEsICAgICAgICAgICAgICAvKiBSRVZJU0lUOiB3aHkgY2FuJ3QgdGhpcyBiZSBkaXNhYmxlZD8gKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHRpbWVyM19jbGsgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG02NDR4LmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG02NDR4LmMKaW5kZXggNWY4YTY1NC4uNGM4MmMyNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtNjQ0eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTY0NHguYwpAQCAtMjc0LDcgKzI3NCw3IEBACiAJLm5hbWUgPSAidGltZXIyIiwKIAkucGFyZW50ID0gJnBsbDFfYXV4X2NsaywKIAkubHBzYyA9IERBVklOQ0lfTFBTQ19USU1FUjIsCi0JLnVzZWNvdW50ID0gMSwgICAgICAgICAgICAgIC8qIFJFVklTSVQ6IHdoeSBjYW4ndCcgdGhpcyBiZSBkaXNhYmxlZD8gKi8KKwkudXNlY291bnQgPSAxLCAgICAgICAgICAgICAgLyogUkVWSVNJVDogd2h5IGNhbid0IHRoaXMgYmUgZGlzYWJsZWQ/ICovCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgZG02NDR4X2Nsa3NbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCA5ZjFiZWZjLi5mOGI3ZWE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0yNCw2ICsyNCw5IEBACiAKICNkZWZpbmUgVUFSVF9TSElGVAkyCiAKKyNkZWZpbmUgZGF2aW5jaV91YXJ0X3YycCh4KQkoKHgpIC0gUEFHRV9PRkZTRVQgKyBQTEFUX1BIWVNfT0ZGU0VUKQorI2RlZmluZSBkYXZpbmNpX3VhcnRfcDJ2KHgpCSgoeCkgLSBQTEFUX1BIWVNfT0ZGU0VUICsgUEFHRV9PRkZTRVQpCisKIAkJLnB1c2hzZWN0aW9uIC5kYXRhCiBkYXZpbmNpX3VhcnRfcGh5czoJLndvcmQJMAogZGF2aW5jaV91YXJ0X3ZpcnQ6CS53b3JkCTAKQEAgLTM0LDcgKzM3LDcgQEAKIAkJLyogVXNlIGRhdmluY2lfdWFydF9waHlzL3ZpcnQgaWYgYWxyZWFkeSBjb25maWd1cmVkICovCiAxMDoJCW1yYwlwMTUsIDAsIFxycCwgYzEsIGMwCiAJCXRzdAlccnAsICMxCQkJQCBNTVUgZW5hYmxlZD8KLQkJbGRyZXEJXHJwLCA9X192aXJ0X3RvX3BoeXMoZGF2aW5jaV91YXJ0X3BoeXMpCisJCWxkcmVxCVxycCwgPWRhdmluY2lfdWFydF92MnAoZGF2aW5jaV91YXJ0X3BoeXMpCiAJCWxkcm5lCVxycCwgPWRhdmluY2lfdWFydF9waHlzCiAJCWFkZAlccnYsIFxycCwgIzQJCUAgZGF2aW5jaV91YXJ0X3ZpcnQKIAkJbGRyCVxycCwgW1xycCwgIzBdCkBAIC00OCwxOCArNTEsMTggQEAKIAkJdHN0CVxycCwgIzEJCQlAIE1NVSBlbmFibGVkPwogCiAJCS8qIENvcHkgdWFydCBwaHlzIGFkZHJlc3MgZnJvbSBkZWNvbXByZXNzb3IgdWFydCBpbmZvICovCi0JCWxkcmVxCVxydiwgPV9fdmlydF90b19waHlzKGRhdmluY2lfdWFydF9waHlzKQorCQlsZHJlcQlccnYsID1kYXZpbmNpX3VhcnRfdjJwKGRhdmluY2lfdWFydF9waHlzKQogCQlsZHJuZQlccnYsID1kYXZpbmNpX3VhcnRfcGh5cwogCQlsZHJlcQlccnAsID1EQVZJTkNJX1VBUlRfSU5GTwotCQlsZHJuZQlccnAsID1fX3BoeXNfdG9fdmlydChEQVZJTkNJX1VBUlRfSU5GTykKKwkJbGRybmUJXHJwLCA9ZGF2aW5jaV91YXJ0X3AydihEQVZJTkNJX1VBUlRfSU5GTykKIAkJbGRyCVxycCwgW1xycCwgIzBdCiAJCXN0cglccnAsIFtccnZdCiAKIAkJLyogQ29weSB1YXJ0IHZpcnQgYWRkcmVzcyBmcm9tIGRlY29tcHJlc3NvciB1YXJ0IGluZm8gKi8KLQkJbGRyZXEJXHJ2LCA9X192aXJ0X3RvX3BoeXMoZGF2aW5jaV91YXJ0X3ZpcnQpCisJCWxkcmVxCVxydiwgPWRhdmluY2lfdWFydF92MnAoZGF2aW5jaV91YXJ0X3ZpcnQpCiAJCWxkcm5lCVxydiwgPWRhdmluY2lfdWFydF92aXJ0CiAJCWxkcmVxCVxycCwgPURBVklOQ0lfVUFSVF9JTkZPCi0JCWxkcm5lCVxycCwgPV9fcGh5c190b192aXJ0KERBVklOQ0lfVUFSVF9JTkZPKQorCQlsZHJuZQlccnAsID1kYXZpbmNpX3VhcnRfcDJ2KERBVklOQ0lfVUFSVF9JTkZPKQogCQlsZHIJXHJwLCBbXHJwLCAjNF0KIAkJc3RyCVxycCwgW1xydl0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9zZXJpYWwuaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvc2VyaWFsLmgKaW5kZXggODA1MTExMC4uYzllNmNlMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9zZXJpYWwuaAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL3NlcmlhbC5oCkBAIC0yMiw3ICsyMiw3IEBACiAgKgogICogVGhpcyBhcmVhIHNpdHMganVzdCBiZWxvdyB0aGUgcGFnZSB0YWJsZXMgKHNlZSBhcmNoL2FybS9rZXJuZWwvaGVhZC5TKS4KICAqLwotI2RlZmluZSBEQVZJTkNJX1VBUlRfSU5GTwkoUEhZU19PRkZTRVQgKyAweDNmZjgpCisjZGVmaW5lIERBVklOQ0lfVUFSVF9JTkZPCShQTEFUX1BIWVNfT0ZGU0VUICsgMHgzZmY4KQogCiAjZGVmaW5lIERBVklOQ0lfVUFSVDBfQkFTRQkoSU9fUEhZUyArIDB4MjAwMDApCiAjZGVmaW5lIERBVklOQ0lfVUFSVDFfQkFTRQkoSU9fUEhZUyArIDB4MjA0MDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvcG0uYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9wbS5jCmluZGV4IDEwZDkxN2QuLjg3NTVjYTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9wbS5jCkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CkBAIC0zNzIsNyArMzczLDI3IEBACiAJZmx1c2hfY2FjaGVfYWxsKCk7CiB9CiAKLXN0YXRpYyBpbnQgZXh5bm9zNF9wbV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBleHlub3M0X3BtX2RyaXZlciA9IHsKKwkuYWRkCQk9IGV4eW5vczRfcG1fYWRkLAorfTsKKworc3RhdGljIF9faW5pdCBpbnQgZXh5bm9zNF9wbV9kcnZpbml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHRtcDsKKworCXMzY19wbV9pbml0KCk7CisKKwkvKiBBbGwgd2FrZXVwIGRpc2FibGUgKi8KKworCXRtcCA9IF9fcmF3X3JlYWRsKFM1UF9XQUtFVVBfTUFTSyk7CisJdG1wIHw9ICgoMHhGRiA8PCA4KSB8ICgweDFGIDw8IDEpKTsKKwlfX3Jhd193cml0ZWwodG1wLCBTNVBfV0FLRVVQX01BU0spOworCisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJmV4eW5vczRfc3lzY2xhc3MsICZleHlub3M0X3BtX2RyaXZlcik7Cit9CithcmNoX2luaXRjYWxsKGV4eW5vczRfcG1fZHJ2aW5pdCk7CisKK3N0YXRpYyB2b2lkIGV4eW5vczRfcG1fcmVzdW1lKHZvaWQpCiB7CiAJLyogRm9yIHJlbGVhc2UgcmV0ZW50aW9uICovCiAKQEAgLTM5NCwyNyArNDE1LDE1IEBACiAJLyogZW5hYmxlIEwyWDAqLwogCXdyaXRlbF9yZWxheGVkKDEsIFM1UF9WQV9MMkNDICsgTDJYMF9DVFJMKTsKICNlbmRpZgotCi0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBleHlub3M0X3BtX2RyaXZlciA9IHsKLQkuYWRkCQk9IGV4eW5vczRfcG1fYWRkLAorc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBleHlub3M0X3BtX3N5c2NvcmVfb3BzID0gewogCS5yZXN1bWUJCT0gZXh5bm9zNF9wbV9yZXN1bWUsCiB9OwogCi1zdGF0aWMgX19pbml0IGludCBleHlub3M0X3BtX2RydmluaXQodm9pZCkKK3N0YXRpYyBfX2luaXQgaW50IGV4eW5vczRfcG1fc3lzY29yZV9pbml0KHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IHRtcDsKLQotCXMzY19wbV9pbml0KCk7Ci0KLQkvKiBBbGwgd2FrZXVwIGRpc2FibGUgKi8KLQotCXRtcCA9IF9fcmF3X3JlYWRsKFM1UF9XQUtFVVBfTUFTSyk7Ci0JdG1wIHw9ICgoMHhGRiA8PCA4KSB8ICgweDFGIDw8IDEpKTsKLQlfX3Jhd193cml0ZWwodG1wLCBTNVBfV0FLRVVQX01BU0spOwotCi0JcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJmV4eW5vczRfc3lzY2xhc3MsICZleHlub3M0X3BtX2RyaXZlcik7CisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJmV4eW5vczRfcG1fc3lzY29yZV9vcHMpOworCXJldHVybiAwOwogfQotYXJjaF9pbml0Y2FsbChleHlub3M0X3BtX2RydmluaXQpOworYXJjaF9pbml0Y2FsbChleHlub3M0X3BtX3N5c2NvcmVfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9LY29uZmlnCmluZGV4IGJkZDI1NzkuLjQ2YWRjYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9LY29uZmlnCkBAIC00LDYgKzQsNyBAQAogCiBjb25maWcgQVJDSF9DQVRTCiAJYm9vbCAiQ0FUUyIKKwlzZWxlY3QgQ0xLU1JDX0k4MjUzCiAJc2VsZWN0IEZPT1RCUklER0VfSE9TVAogCXNlbGVjdCBJU0EKIAlzZWxlY3QgSVNBX0RNQQpAQCAtNTksNiArNjAsNyBAQAogCiBjb25maWcgQVJDSF9ORVRXSU5ERVIKIAlib29sICJOZXRXaW5kZXIiCisJc2VsZWN0IENMS1NSQ19JODI1MwogCXNlbGVjdCBGT09UQlJJREdFX0hPU1QKIAlzZWxlY3QgSVNBCiAJc2VsZWN0IElTQV9ETUEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EtdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EtdGltZXIuYwppbmRleCA0NDFjNmNlLi43MDIwZjFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaXNhLXRpbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2lzYS10aW1lci5jCkBAIC0xMCw1MyArMTAsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQorI2luY2x1ZGUgPGFzbS9pODI1My5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KIAogI2luY2x1ZGUgImNvbW1vbi5oIgogCi0jZGVmaW5lIFBJVF9NT0RFCTB4NDMKLSNkZWZpbmUgUElUX0NIMAkJMHg0MAotCi0jZGVmaW5lIFBJVF9MQVRDSAkoKFBJVF9USUNLX1JBVEUgKyBIWiAvIDIpIC8gSFopCi0KLXN0YXRpYyBjeWNsZV90IHBpdF9yZWFkKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdGF0aWMgaW50IG9sZF9jb3VudDsKLQlzdGF0aWMgdTMyIG9sZF9qaWZzOwotCWludCBjb3VudDsKLQl1MzIgamlmczsKLQotCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQlqaWZzID0gamlmZmllczsKLQlvdXRiX3AoMHgwMCwgUElUX01PREUpOwkJLyogbGF0Y2ggdGhlIGNvdW50ICovCi0JY291bnQgPSBpbmJfcChQSVRfQ0gwKTsJCS8qIHJlYWQgdGhlIGxhdGNoZWQgY291bnQgKi8KLQljb3VudCB8PSBpbmJfcChQSVRfQ0gwKSA8PCA4OwotCi0JaWYgKGNvdW50ID4gb2xkX2NvdW50ICYmIGppZnMgPT0gb2xkX2ppZnMpCi0JCWNvdW50ID0gb2xkX2NvdW50OwotCi0Jb2xkX2NvdW50ID0gY291bnQ7Ci0Jb2xkX2ppZnMgPSBqaWZzOwotCi0JcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCWNvdW50ID0gKFBJVF9MQVRDSCAtIDEpIC0gY291bnQ7Ci0KLQlyZXR1cm4gKGN5Y2xlX3QpKGppZnMgKiBQSVRfTEFUQ0gpICsgY291bnQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgcGl0X2NzID0gewotCS5uYW1lCQk9ICJwaXQiLAotCS5yYXRpbmcJCT0gMTEwLAotCS5yZWFkCQk9IHBpdF9yZWFkLAotCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soMzIpLAotfTsKK0RFRklORV9SQVdfU1BJTkxPQ0soaTgyNTNfbG9jayk7CiAKIHN0YXRpYyB2b2lkIHBpdF9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKIAlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCkBAIC0xMjEsNyArODQsNyBAQAogCXBpdF9jZS5tYXhfZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4N2ZmZiwgJnBpdF9jZSk7CiAJcGl0X2NlLm1pbl9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHgwMDBmLCAmcGl0X2NlKTsKIAotCWNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZwaXRfY3MsIFBJVF9USUNLX1JBVEUpOworCWNsb2Nrc291cmNlX2k4MjUzX2luaXQoKTsKIAogCXNldHVwX2lycShwaXRfY2UuaXJxLCAmcGl0X3RpbWVyX2lycSk7CiAJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKCZwaXRfY2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfYXAuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2FwLmMKaW5kZXggOTgwODAzZi4uZDNlOTY0NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfYXAuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9hcC5jCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2ttaS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CkBAIC0xODAsMTMgKzE4MCwxMyBAQAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIHVuc2lnbmVkIGxvbmcgaWNfaXJxX2VuYWJsZTsKIAotc3RhdGljIGludCBpcnFfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGlycV9zdXNwZW5kKHZvaWQpCiB7CiAJaWNfaXJxX2VuYWJsZSA9IHJlYWRsKFZBX0lDX0JBU0UgKyBJUlFfRU5BQkxFKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpcnFfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBpcnFfcmVzdW1lKHZvaWQpCiB7CiAJLyogZGlzYWJsZSBhbGwgaXJxIHNvdXJjZXMgKi8KIAl3cml0ZWwoLTEsIFZBX0NNSUNfQkFTRSArIElSUV9FTkFCTEVfQ0xFQVIpOwpAQCAtMTk0LDMzICsxOTQsMjUgQEAKIAl3cml0ZWwoLTEsIFZBX0lDX0JBU0UgKyBGSVFfRU5BQkxFX0NMRUFSKTsKIAogCXdyaXRlbChpY19pcnFfZW5hYmxlLCBWQV9JQ19CQVNFICsgSVJRX0VOQUJMRV9TRVQpOwotCXJldHVybiAwOwogfQogI2Vsc2UKICNkZWZpbmUgaXJxX3N1c3BlbmQgTlVMTAogI2RlZmluZSBpcnFfcmVzdW1lIE5VTEwKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBpcnFfY2xhc3MgPSB7Ci0JLm5hbWUJCT0gImlycSIsCitzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIGlycV9zeXNjb3JlX29wcyA9IHsKIAkuc3VzcGVuZAk9IGlycV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gaXJxX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBpcnFfZGV2aWNlID0gewotCS5pZAk9IDAsCi0JLmNscwk9ICZpcnFfY2xhc3MsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpcnFfaW5pdF9zeXNmcyh2b2lkKQorc3RhdGljIGludCBfX2luaXQgaXJxX3N5c2NvcmVfaW5pdCh2b2lkKQogewotCWludCByZXQgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJmlycV9jbGFzcyk7Ci0JaWYgKHJldCA9PSAwKQotCQlyZXQgPSBzeXNkZXZfcmVnaXN0ZXIoJmlycV9kZXZpY2UpOwotCXJldHVybiByZXQ7CisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJmlycV9zeXNjb3JlX29wcyk7CisKKwlyZXR1cm4gMDsKIH0KIAotZGV2aWNlX2luaXRjYWxsKGlycV9pbml0X3N5c2ZzKTsKK2RldmljZV9pbml0Y2FsbChpcnFfc3lzY29yZV9pbml0KTsKIAogLyoKICAqIEZsYXNoIGhhbmRsaW5nLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC12cHIyMDAuYyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtdnByMjAwLmMKaW5kZXggMmNmMzkwZi4uNDdhNjljYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC12cHIyMDAuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLXZwcjIwMC5jCkBAIC0yNTcsMTEgKzI1NywxNiBAQAogCS53b3JrYXJvdW5kCT0gRkxTX1VTQjJfV09SS0FST1VORF9FTkdDTTA5MTUyLAogfTsKIAorc3RhdGljIGludCB2cHIyMDBfdXNiaF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIG14MzVfaW5pdGlhbGl6ZV91c2JfaHcocGRldi0+aWQsCisJCQlNWENfRUhDSV9JTlRFUkZBQ0VfU0lOR0xFX1VOSSB8IE1YQ19FSENJX0lOVEVSTkFMX1BIWSk7Cit9CisKIC8qIFVTQiBIT1NUIGNvbmZpZyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYl9ob3N0X3BkYXRhIF9faW5pdGNvbnN0ID0gewotCS5wb3J0c2MJCT0gTVhDX0VIQ0lfTU9ERV9TRVJJQUwsCi0JLmZsYWdzCQk9IE1YQ19FSENJX0lOVEVSRkFDRV9TSU5HTEVfVU5JIHwKLQkJCSAgTVhDX0VIQ0lfSU5URVJOQUxfUEhZLAorCS5pbml0ID0gdnByMjAwX3VzYmhfaW5pdCwKKwkucG9ydHNjID0gTVhDX0VIQ0lfTU9ERV9TRVJJQUwsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUzX2xvY28uYyBiL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTNfbG9jby5jCmluZGV4IDEwYTFiZWEuLjYyMDZiMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTNfbG9jby5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTNfbG9jby5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIAkud2FrZXVwCQk9IHdha2UsCQkJCQlcCiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBsb2NvX2J1dHRvbnNbXSBfX2luaXRjb25zdCA9IHsKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBsb2NvX2J1dHRvbnNbXSA9IHsKIAlHUElPX0JVVFRPTihNWDUzX0xPQ09fUE9XRVIsIEtFWV9QT1dFUiwgMSwgInBvd2VyIiwgMCksCiAJR1BJT19CVVRUT04oTVg1M19MT0NPX1VJMSwgS0VZX1ZPTFVNRVVQLCAxLCAidm9sdW1lLXVwIiwgMCksCiAJR1BJT19CVVRUT04oTVg1M19MT0NPX1VJMiwgS0VZX1ZPTFVNRURPV04sIDEsICJ2b2x1bWUtZG93biIsIDApLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyOC5jIGIvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyOC5jCmluZGV4IDFhZDk3ZmUuLjVkY2M1OWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLW14MjguYworKysgYi9hcmNoL2FybS9tYWNoLW14cy9jbG9jay1teDI4LmMKQEAgLTI5NSwxMSArMjk1LDExIEBACiAJdW5zaWduZWQgbG9uZyBkaWZmLCBwYXJlbnRfcmF0ZSwgY2FsY19yYXRlOwkJCVwKIAlpbnQgaTsJCQkJCQkJCVwKIAkJCQkJCQkJCVwKLQlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CQkJXAogCWRpdl9tYXggPSBCTV9DTEtDVFJMXyMjZHIjI19ESVYgPj4gQlBfQ0xLQ1RSTF8jI2RyIyNfRElWOwlcCiAJYm1fYnVzeSA9IEJNX0NMS0NUUkxfIyNkciMjX0JVU1k7CQkJCVwKIAkJCQkJCQkJCVwKIAlpZiAoY2xrLT5wYXJlbnQgPT0gJnJlZl94dGFsX2NsaykgewkJCQlcCisJCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsJCVwKIAkJZGl2ID0gRElWX1JPVU5EX1VQKHBhcmVudF9yYXRlLCByYXRlKTsJCQlcCiAJCWlmIChjbGsgPT0gJmNwdV9jbGspIHsJCQkJCVwKIAkJCWRpdl9tYXggPSBCTV9DTEtDVFJMX0NQVV9ESVZfWFRBTCA+PgkJXApAQCAtMzA5LDYgKzMwOSwxMSBAQAogCQlpZiAoZGl2ID09IDAgfHwgZGl2ID4gZGl2X21heCkJCQkJXAogCQkJcmV0dXJuIC1FSU5WQUw7CQkJCQlcCiAJfSBlbHNlIHsJCQkJCQkJXAorCQkvKgkJCQkJCQlcCisJCSAqIGhhY2sgYWxlcnQ6IHRoaXMgYmxvY2sgbW9kaWZpZXMgY2xrLT5wYXJlbnQsIHRvbywJXAorCQkgKiBzbyB0aGUgYmFzZSB0byB1c2UgaXQgdGhlIGdyYW5kIHBhcmVudC4JCVwKKwkJICovCQkJCQkJCVwKKwkJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQtPnBhcmVudCk7CVwKIAkJcmF0ZSA+Pj0gUEFSRU5UX1JBVEVfU0hJRlQ7CQkJCVwKIAkJcGFyZW50X3JhdGUgPj49IFBBUkVOVF9SQVRFX1NISUZUOwkJCVwKIAkJZGlmZiA9IHBhcmVudF9yYXRlOwkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9wbV9idXMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvcG1fYnVzLmMKaW5kZXggNjU4OGMyMi4uZmUzMWQ5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9wbV9idXMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3BtX2J1cy5jCkBAIC0yNCw3NSArMjQsNTAgQEAKICNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQogc3RhdGljIGludCBvbWFwMV9wbV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBjbGsgKmljbGssICpmY2xrOwotCWludCByZXQgPSAwOworCWludCByZXQ7CiAKIAlkZXZfZGJnKGRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlyZXQgPSBwbV9nZW5lcmljX3J1bnRpbWVfc3VzcGVuZChkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKLQlmY2xrID0gY2xrX2dldChkZXYsICJmY2siKTsKLQlpZiAoIUlTX0VSUihmY2xrKSkgewotCQljbGtfZGlzYWJsZShmY2xrKTsKLQkJY2xrX3B1dChmY2xrKTsKLQl9Ci0KLQlpY2xrID0gY2xrX2dldChkZXYsICJpY2siKTsKLQlpZiAoIUlTX0VSUihpY2xrKSkgewotCQljbGtfZGlzYWJsZShpY2xrKTsKLQkJY2xrX3B1dChpY2xrKTsKKwlyZXQgPSBwbV9ydW50aW1lX2Nsa19zdXNwZW5kKGRldik7CisJaWYgKHJldCkgeworCQlwbV9nZW5lcmljX3J1bnRpbWVfcmVzdW1lKGRldik7CisJCXJldHVybiByZXQ7CiAJfQogCiAJcmV0dXJuIDA7Ci19OworfQogCiBzdGF0aWMgaW50IG9tYXAxX3BtX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgY2xrICppY2xrLCAqZmNsazsKLQogCWRldl9kYmcoZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKIAotCWljbGsgPSBjbGtfZ2V0KGRldiwgImljayIpOwotCWlmICghSVNfRVJSKGljbGspKSB7Ci0JCWNsa19lbmFibGUoaWNsayk7Ci0JCWNsa19wdXQoaWNsayk7Ci0JfQotCi0JZmNsayA9IGNsa19nZXQoZGV2LCAiZmNrIik7Ci0JaWYgKCFJU19FUlIoZmNsaykpIHsKLQkJY2xrX2VuYWJsZShmY2xrKTsKLQkJY2xrX3B1dChmY2xrKTsKLQl9Ci0KKwlwbV9ydW50aW1lX2Nsa19yZXN1bWUoZGV2KTsKIAlyZXR1cm4gcG1fZ2VuZXJpY19ydW50aW1lX3Jlc3VtZShkZXYpOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wb3dlcl9kb21haW4gZGVmYXVsdF9wb3dlcl9kb21haW4gPSB7CisJLm9wcyA9IHsKKwkJLnJ1bnRpbWVfc3VzcGVuZCA9IG9tYXAxX3BtX3J1bnRpbWVfc3VzcGVuZCwKKwkJLnJ1bnRpbWVfcmVzdW1lID0gb21hcDFfcG1fcnVudGltZV9yZXN1bWUsCisJCVVTRV9QTEFURk9STV9QTV9TTEVFUF9PUFMKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbV9jbGtfbm90aWZpZXJfYmxvY2sgcGxhdGZvcm1fYnVzX25vdGlmaWVyID0geworCS5wd3JfZG9tYWluID0gJmRlZmF1bHRfcG93ZXJfZG9tYWluLAorCS5jb25faWRzID0geyAiaWNrIiwgImZjayIsIE5VTEwsIH0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwMV9wbV9ydW50aW1lX2luaXQodm9pZCkKIHsKLQljb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG07Ci0Jc3RydWN0IGRldl9wbV9vcHMgKm9tYXBfcG07Ci0KIAlpZiAoIWNwdV9jbGFzc19pc19vbWFwMSgpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXBtID0gcGxhdGZvcm1fYnVzX2dldF9wbV9vcHMoKTsKLQlpZiAoIXBtKSB7Ci0JCXByX2VycigiJXM6IHVuYWJsZSB0byBnZXQgZGV2X3BtX29wcyBmcm9tIHBsYXRmb3JtX2J1c1xuIiwKLQkJCV9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0Jb21hcF9wbSA9IGttZW1kdXAocG0sIHNpemVvZihzdHJ1Y3QgZGV2X3BtX29wcyksIEdGUF9LRVJORUwpOwotCWlmICghb21hcF9wbSkgewotCQlwcl9lcnIoIiVzOiB1bmFibGUgdG8gYWxsb2MgbWVtb3J5IGZvciBuZXcgZGV2X3BtX29wc1xuIiwKLQkJCV9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0Jb21hcF9wbS0+cnVudGltZV9zdXNwZW5kID0gb21hcDFfcG1fcnVudGltZV9zdXNwZW5kOwotCW9tYXBfcG0tPnJ1bnRpbWVfcmVzdW1lID0gb21hcDFfcG1fcnVudGltZV9yZXN1bWU7Ci0KLQlwbGF0Zm9ybV9idXNfc2V0X3BtX29wcyhvbWFwX3BtKTsKKwlwbV9ydW50aW1lX2Nsa19hZGRfbm90aWZpZXIoJnBsYXRmb3JtX2J1c190eXBlLCAmcGxhdGZvcm1fYnVzX25vdGlmaWVyKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKaW5kZXggYTQ1Y2Q2NC4uNjZkZmJjYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCkBAIC01OSwxNiArNTksMTYgQEAKICMgUG93ZXIgTWFuYWdlbWVudAogaWZlcSAoJChDT05GSUdfUE0pLHkpCiBvYmotJChDT05GSUdfQVJDSF9PTUFQMikJCSs9IHBtMjR4eC5vCi1vYmotJChDT05GSUdfQVJDSF9PTUFQMikJCSs9IHNsZWVwMjR4eC5vIHBtX2J1cy5vCitvYmotJChDT05GSUdfQVJDSF9PTUFQMikJCSs9IHNsZWVwMjR4eC5vCiBvYmotJChDT05GSUdfQVJDSF9PTUFQMykJCSs9IHBtMzR4eC5vIHNsZWVwMzR4eC5vIFwKLQkJCQkJICAgY3B1aWRsZTM0eHgubyBwbV9idXMubwotb2JqLSQoQ09ORklHX0FSQ0hfT01BUDQpCQkrPSBwbTQ0eHgubyBwbV9idXMubworCQkJCQkgICBjcHVpZGxlMzR4eC5vCitvYmotJChDT05GSUdfQVJDSF9PTUFQNCkJCSs9IHBtNDR4eC5vCiBvYmotJChDT05GSUdfUE1fREVCVUcpCQkJKz0gcG0tZGVidWcubwogb2JqLSQoQ09ORklHX09NQVBfU01BUlRSRUZMRVgpICAgICAgICAgICs9IHNyX2RldmljZS5vIHNtYXJ0cmVmbGV4Lm8KIG9iai0kKENPTkZJR19PTUFQX1NNQVJUUkVGTEVYX0NMQVNTMykJKz0gc21hcnRyZWZsZXgtY2xhc3MzLm8KIAogQUZMQUdTX3NsZWVwMjR4eC5vCQkJOj0tV2EsLW1hcmNoPWFybXY2Ci1BRkxBR1Nfc2xlZXAzNHh4Lm8JCQk6PS1XYSwtbWFyY2g9YXJtdjctYQorQUZMQUdTX3NsZWVwMzR4eC5vCQkJOj0tV2EsLW1hcmNoPWFybXY3LWEkKHBsdXNfc2VjKQogCiBpZmVxICgkKENPTkZJR19QTV9WRVJCT1NFKSx5KQogQ0ZMQUdTX3BtX2J1cy5vCQkJCSs9IC1EREVCVUcKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLmMKaW5kZXggZTk2NDg5NS4uZjhiYTIwYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLmMKQEAgLTE0MSwxNCArMTQxLDE5IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgcng1MV9tYXBfaW8odm9pZCkKIHsKIAlvbWFwMl9zZXRfZ2xvYmFsc18zeHh4KCk7Ci0Jcng1MV92aWRlb19tZW1faW5pdCgpOwogCW9tYXAzNHh4X21hcF9jb21tb25faW8oKTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IHJ4NTFfcmVzZXJ2ZSh2b2lkKQoreworCXJ4NTFfdmlkZW9fbWVtX2luaXQoKTsKKwlvbWFwX3Jlc2VydmUoKTsKK30KKwogTUFDSElORV9TVEFSVChOT0tJQV9SWDUxLCAiTm9raWEgUlgtNTEgYm9hcmQiKQogCS8qIE1haW50YWluZXI6IExhdXJpIExldWtrdW5lbiA8bGF1cmkubGV1a2t1bmVuQG5va2lhLmNvbT4gKi8KIAkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAotCS5yZXNlcnZlCT0gb21hcF9yZXNlcnZlLAorCS5yZXNlcnZlCT0gcng1MV9yZXNlcnZlLAogCS5tYXBfaW8JCT0gcng1MV9tYXBfaW8sCiAJLmluaXRfZWFybHkJPSByeDUxX2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0gb21hcF9pbml0X2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDM0eHhfZHBsbDNtMi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0MzR4eF9kcGxsM20yLmMKaW5kZXggYjJiMWUzNy4uZDZlMzRkZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0MzR4eF9kcGxsM20yLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0MzR4eF9kcGxsM20yLmMKQEAgLTExNSw2ICsxMTUsNyBAQAogCQkJCSAgc2RyY19jczAtPnJmcl9jdHJsLCBzZHJjX2NzMC0+YWN0aW1fY3RybGEsCiAJCQkJICBzZHJjX2NzMC0+YWN0aW1fY3RybGIsIHNkcmNfY3MwLT5tciwKIAkJCQkgIDAsIDAsIDAsIDApOworCWNsay0+cmF0ZSA9IHJhdGU7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2s0NHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2s0NHh4X2RhdGEuYwppbmRleCAyNzY5OTJkLi44Yzk2NTY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrNDR4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazQ0eHhfZGF0YS5jCkBAIC0zMTE2LDE0ICszMTE2LDkgQEAKIAlDTEsoTlVMTCwJImRzcF9mY2siLAkJCSZkc3BfZmNrLAlDS180NDNYKSwKIAlDTEsoIm9tYXBkc3NfZHNzIiwJInN5c19jbGsiLAkJCSZkc3Nfc3lzX2NsaywJQ0tfNDQzWCksCiAJQ0xLKCJvbWFwZHNzX2RzcyIsCSJ0dl9jbGsiLAkJCSZkc3NfdHZfY2xrLAlDS180NDNYKSwKLQlDTEsoIm9tYXBkc3NfZHNzIiwJImRzc19jbGsiLAkJCSZkc3NfZHNzX2NsaywJQ0tfNDQzWCksCiAJQ0xLKCJvbWFwZHNzX2RzcyIsCSJ2aWRlb19jbGsiLAkJCSZkc3NfNDhtaHpfY2xrLAlDS180NDNYKSwKLQlDTEsoIm9tYXBkc3NfZHNzIiwJImZjayIsCQkJCSZkc3NfZmNrLAlDS180NDNYKSwKLQkvKgotCSAqIE9uIE9NQVA0LCBEU1MgaWNrIGlzIGEgZHVtbXkgY2xvY2s7IHRoaXMgaXMgbmVlZGVkIGZvciBjb21wYXRpYmlsaXR5Ci0JICogd2l0aCBPTUFQMi8zLgotCSAqLwotCUNMSygib21hcGRzc19kc3MiLAkiaWNrIiwJCQkJJmR1bW15X2NrLAlDS180NDNYKSwKKwlDTEsoIm9tYXBkc3NfZHNzIiwJImZjayIsCQkJCSZkc3NfZHNzX2NsaywJQ0tfNDQzWCksCisJQ0xLKCJvbWFwZHNzX2RzcyIsCSJpY2siLAkJCQkmZHNzX2ZjaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJlZnVzZV9jdHJsX2N1c3RfZmNrIiwJCSZlZnVzZV9jdHJsX2N1c3RfZmNrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJImVtaWYxX2ZjayIsCQkJJmVtaWYxX2ZjaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJlbWlmMl9mY2siLAkJCSZlbWlmMl9mY2ssCUNLXzQ0M1gpLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJ4eHhfM3h4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJ4eHhfM3h4eC5jCmluZGV4IDlkMGRlYzguLjM4ODMwZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20yeHh4XzN4eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMnh4eF8zeHh4LmMKQEAgLTI0Nyw2ICsyNDcsNyBAQAogCXUzMiBwZXJfY21fY2xrc2VsOwogCXUzMiBlbXVfY21fY2xrc2VsOwogCXUzMiBlbXVfY21fY2xrc3RjdHJsOworCXUzMiBwbGxfY21fYXV0b2lkbGU7CiAJdTMyIHBsbF9jbV9hdXRvaWRsZTI7CiAJdTMyIHBsbF9jbV9jbGtzZWw0OwogCXUzMiBwbGxfY21fY2xrc2VsNTsKQEAgLTMxOSw2ICszMjAsMTUgQEAKIAkJb21hcDJfY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX0VNVV9NT0QsIENNX0NMS1NFTDEpOwogCWNtX2NvbnRleHQuZW11X2NtX2Nsa3N0Y3RybCA9CiAJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9FTVVfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpOworCS8qCisJICogQXMgcGVyIGVycmF0dW0gaTY3MSwgUk9NIGNvZGUgZG9lcyBub3QgcmVzcGVjdCB0aGUgUEVSIERQTEwKKwkgKiBwcm9ncmFtbWluZyBzY2hlbWUgaWYgQ01fQVVUT0lETEVfUExMLkFVVE9fUEVSSVBIX0RQTEwgPT0gMS4KKwkgKiBJbiB0aGlzIGNhc2UsIGV2ZW4gdGhvdWdoIHRoaXMgcmVnaXN0ZXIgaGFzIGJlZW4gc2F2ZWQgaW4KKwkgKiBzY3JhdGNocGFkIGNvbnRlbnRzLCB3ZSBuZWVkIHRvIHJlc3RvcmUgQVVUT19QRVJJUEhfRFBMTAorCSAqIGJ5IG91cnNlbHZlcy4gU28sIHdlIG5lZWQgdG8gc2F2ZSBpdCBhbnl3YXkuCisJICovCisJY21fY29udGV4dC5wbGxfY21fYXV0b2lkbGUgPQorCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQVVUT0lETEUpOwogCWNtX2NvbnRleHQucGxsX2NtX2F1dG9pZGxlMiA9CiAJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9BVVRPSURMRTIpOwogCWNtX2NvbnRleHQucGxsX2NtX2Nsa3NlbDQgPQpAQCAtNDQxLDYgKzQ1MSwxMyBAQAogCQkJICAgICAgIENNX0NMS1NFTDEpOwogCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoY21fY29udGV4dC5lbXVfY21fY2xrc3RjdHJsLCBPTUFQMzQzMF9FTVVfTU9ELAogCQkJICAgICAgIE9NQVAyX0NNX0NMS1NUQ1RSTCk7CisJLyoKKwkgKiBBcyBwZXIgZXJyYXR1bSBpNjcxLCBST00gY29kZSBkb2VzIG5vdCByZXNwZWN0IHRoZSBQRVIgRFBMTAorCSAqIHByb2dyYW1taW5nIHNjaGVtZSBpZiBDTV9BVVRPSURMRV9QTEwuQVVUT19QRVJJUEhfRFBMTCA9PSAxLgorCSAqIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byByZXN0b3JlIEFVVE9fUEVSSVBIX0RQTEwgYnkgb3Vyc2VsdmVzLgorCSAqLworCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoY21fY29udGV4dC5wbGxfY21fYXV0b2lkbGUsIFBMTF9NT0QsCisJCQkgICAgICAgQ01fQVVUT0lETEUpOwogCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoY21fY29udGV4dC5wbGxfY21fYXV0b2lkbGUyLCBQTExfTU9ELAogCQkJICAgICAgIENNX0FVVE9JRExFMik7CiAJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0LnBsbF9jbV9jbGtzZWw0LCBQTExfTU9ELApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb250cm9sLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbnRyb2wuYwppbmRleCA2OTUyNzk0Li5kYTUzYmEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbnRyb2wuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbnRyb2wuYwpAQCAtMzE2LDggKzMxNiwxNCBAQAogCQkJb21hcDJfY21fcmVhZF9tb2RfcmVnKFdLVVBfTU9ELCBDTV9DTEtTRUwpOwogCXByY21fYmxvY2tfY29udGVudHMuY21fY2xrZW5fcGxsID0KIAkJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9DTEtFTik7CisJLyoKKwkgKiBBcyBwZXIgZXJyYXR1bSBpNjcxLCBST00gY29kZSBkb2VzIG5vdCByZXNwZWN0IHRoZSBQRVIgRFBMTAorCSAqIHByb2dyYW1taW5nIHNjaGVtZSBpZiBDTV9BVVRPSURMRV9QTEwuLkFVVE9fUEVSSVBIX0RQTEwgPT0gMS4KKwkgKiBUaGVuLCAgaW4gYW55Y2FzZSwgY2xlYXIgdGhlc2UgYml0cyB0byBhdm9pZCBleHRyYSBsYXRlbmNpZXMuCisJICovCiAJcHJjbV9ibG9ja19jb250ZW50cy5jbV9hdXRvaWRsZV9wbGwgPQotCQkJb21hcDJfY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIE9NQVAzNDMwX0NNX0FVVE9JRExFX1BMTCk7CisJCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQVVUT0lETEUpICYKKwkJCX5PTUFQMzQzMF9BVVRPX1BFUklQSF9EUExMX01BU0s7CiAJcHJjbV9ibG9ja19jb250ZW50cy5jbV9jbGtzZWwxX3BsbCA9CiAJCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoUExMX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMV9QTEwpOwogCXByY21fYmxvY2tfY29udGVudHMuY21fY2xrc2VsMl9wbGwgPQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MjBfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MjBfZGF0YS5jCmluZGV4IDhlYjNjZTEuLmM0ZDBhZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDIwX2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQyMF9kYXRhLmMKQEAgLTE2MzksNiArMTYzOSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9ncGlvMV9od21vZCA9IHsKIAkubmFtZQkJPSAiZ3BpbzEiLAorCS5mbGFncwkJPSBIV01PRF9DT05UUk9MX09QVF9DTEtTX0lOX1JFU0VULAogCS5tcHVfaXJxcwk9IG9tYXAyNDJ4X2dwaW8xX2lycXMsCiAJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MnhfZ3BpbzFfaXJxcyksCiAJLm1haW5fY2xrCT0gImdwaW9zX2ZjayIsCkBAIC0xNjY5LDYgKzE2NzAsNyBAQAogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfZ3BpbzJfaHdtb2QgPSB7CiAJLm5hbWUJCT0gImdwaW8yIiwKKwkuZmxhZ3MJCT0gSFdNT0RfQ09OVFJPTF9PUFRfQ0xLU19JTl9SRVNFVCwKIAkubXB1X2lycXMJPSBvbWFwMjQyeF9ncGlvMl9pcnFzLAogCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDJ4X2dwaW8yX2lycXMpLAogCS5tYWluX2Nsawk9ICJncGlvc19mY2siLApAQCAtMTY5OSw2ICsxNzAxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2dwaW8zX2h3bW9kID0gewogCS5uYW1lCQk9ICJncGlvMyIsCisJLmZsYWdzCQk9IEhXTU9EX0NPTlRST0xfT1BUX0NMS1NfSU5fUkVTRVQsCiAJLm1wdV9pcnFzCT0gb21hcDI0MnhfZ3BpbzNfaXJxcywKIAkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyeF9ncGlvM19pcnFzKSwKIAkubWFpbl9jbGsJPSAiZ3Bpb3NfZmNrIiwKQEAgLTE3MjksNiArMTczMiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9ncGlvNF9od21vZCA9IHsKIAkubmFtZQkJPSAiZ3BpbzQiLAorCS5mbGFncwkJPSBIV01PRF9DT05UUk9MX09QVF9DTEtTX0lOX1JFU0VULAogCS5tcHVfaXJxcwk9IG9tYXAyNDJ4X2dwaW80X2lycXMsCiAJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MnhfZ3BpbzRfaXJxcyksCiAJLm1haW5fY2xrCT0gImdwaW9zX2ZjayIsCkBAIC0xNzgyLDcgKzE3ODYsNyBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDI0MjBfZG1hX3N5c3RlbV9hZGRyc1tdID0gewogCXsKIAkJLnBhX3N0YXJ0CT0gMHg0ODA1NjAwMCwKLQkJLnBhX2VuZAkJPSAweDRhMDU2MGZmLAorCQkucGFfZW5kCQk9IDB4NDgwNTZmZmYsCiAJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKIAl9LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDMwX2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDMwX2RhdGEuYwppbmRleCBlNmUzODEwLi45NjgyZGQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQzMF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MzBfZGF0YS5jCkBAIC0xNzQyLDYgKzE3NDIsNyBAQAogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfZ3BpbzFfaHdtb2QgPSB7CiAJLm5hbWUJCT0gImdwaW8xIiwKKwkuZmxhZ3MJCT0gSFdNT0RfQ09OVFJPTF9PUFRfQ0xLU19JTl9SRVNFVCwKIAkubXB1X2lycXMJPSBvbWFwMjQzeF9ncGlvMV9pcnFzLAogCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDN4X2dwaW8xX2lycXMpLAogCS5tYWluX2Nsawk9ICJncGlvc19mY2siLApAQCAtMTc3Miw2ICsxNzczLDcgQEAKIAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2dwaW8yX2h3bW9kID0gewogCS5uYW1lCQk9ICJncGlvMiIsCisJLmZsYWdzCQk9IEhXTU9EX0NPTlRST0xfT1BUX0NMS1NfSU5fUkVTRVQsCiAJLm1wdV9pcnFzCT0gb21hcDI0M3hfZ3BpbzJfaXJxcywKIAkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzeF9ncGlvMl9pcnFzKSwKIAkubWFpbl9jbGsJPSAiZ3Bpb3NfZmNrIiwKQEAgLTE4MDIsNiArMTgwNCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9ncGlvM19od21vZCA9IHsKIAkubmFtZQkJPSAiZ3BpbzMiLAorCS5mbGFncwkJPSBIV01PRF9DT05UUk9MX09QVF9DTEtTX0lOX1JFU0VULAogCS5tcHVfaXJxcwk9IG9tYXAyNDN4X2dwaW8zX2lycXMsCiAJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0M3hfZ3BpbzNfaXJxcyksCiAJLm1haW5fY2xrCT0gImdwaW9zX2ZjayIsCkBAIC0xODMyLDYgKzE4MzUsNyBAQAogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfZ3BpbzRfaHdtb2QgPSB7CiAJLm5hbWUJCT0gImdwaW80IiwKKwkuZmxhZ3MJCT0gSFdNT0RfQ09OVFJPTF9PUFRfQ0xLU19JTl9SRVNFVCwKIAkubXB1X2lycXMJPSBvbWFwMjQzeF9ncGlvNF9pcnFzLAogCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDN4X2dwaW80X2lycXMpLAogCS5tYWluX2Nsawk9ICJncGlvc19mY2siLApAQCAtMTg2Miw2ICsxODY2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2dwaW81X2h3bW9kID0gewogCS5uYW1lCQk9ICJncGlvNSIsCisJLmZsYWdzCQk9IEhXTU9EX0NPTlRST0xfT1BUX0NMS1NfSU5fUkVTRVQsCiAJLm1wdV9pcnFzCT0gb21hcDI0M3hfZ3BpbzVfaXJxcywKIAkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzeF9ncGlvNV9pcnFzKSwKIAkubWFpbl9jbGsJPSAiZ3BpbzVfZmNrIiwKQEAgLTE5MTUsNyArMTkyMCw3IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwMjQzMF9kbWFfc3lzdGVtX2FkZHJzW10gPSB7CiAJewogCQkucGFfc3RhcnQJPSAweDQ4MDU2MDAwLAotCQkucGFfZW5kCQk9IDB4NGEwNTYwZmYsCisJCS5wYV9lbmQJCT0gMHg0ODA1NmZmZiwKIAkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzN4eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzN4eHhfZGF0YS5jCmluZGV4IGI5OGUyZGYuLjkwOWE4NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zeHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfM3h4eF9kYXRhLmMKQEAgLTIxNDEsNiArMjE0MSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9ncGlvMV9od21vZCA9IHsKIAkubmFtZQkJPSAiZ3BpbzEiLAorCS5mbGFncwkJPSBIV01PRF9DT05UUk9MX09QVF9DTEtTX0lOX1JFU0VULAogCS5tcHVfaXJxcwk9IG9tYXAzeHh4X2dwaW8xX2lycXMsCiAJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfZ3BpbzFfaXJxcyksCiAJLm1haW5fY2xrCT0gImdwaW8xX2ljayIsCkBAIC0yMTc3LDYgKzIxNzgsNyBAQAogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfZ3BpbzJfaHdtb2QgPSB7CiAJLm5hbWUJCT0gImdwaW8yIiwKKwkuZmxhZ3MJCT0gSFdNT0RfQ09OVFJPTF9PUFRfQ0xLU19JTl9SRVNFVCwKIAkubXB1X2lycXMJPSBvbWFwM3h4eF9ncGlvMl9pcnFzLAogCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2dwaW8yX2lycXMpLAogCS5tYWluX2Nsawk9ICJncGlvMl9pY2siLApAQCAtMjIxMyw2ICsyMjE1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2dwaW8zX2h3bW9kID0gewogCS5uYW1lCQk9ICJncGlvMyIsCisJLmZsYWdzCQk9IEhXTU9EX0NPTlRST0xfT1BUX0NMS1NfSU5fUkVTRVQsCiAJLm1wdV9pcnFzCT0gb21hcDN4eHhfZ3BpbzNfaXJxcywKIAkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9ncGlvM19pcnFzKSwKIAkubWFpbl9jbGsJPSAiZ3BpbzNfaWNrIiwKQEAgLTIyNDksNiArMjI1Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9ncGlvNF9od21vZCA9IHsKIAkubmFtZQkJPSAiZ3BpbzQiLAorCS5mbGFncwkJPSBIV01PRF9DT05UUk9MX09QVF9DTEtTX0lOX1JFU0VULAogCS5tcHVfaXJxcwk9IG9tYXAzeHh4X2dwaW80X2lycXMsCiAJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfZ3BpbzRfaXJxcyksCiAJLm1haW5fY2xrCT0gImdwaW80X2ljayIsCkBAIC0yMjg1LDYgKzIyODksNyBAQAogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfZ3BpbzVfaHdtb2QgPSB7CiAJLm5hbWUJCT0gImdwaW81IiwKKwkuZmxhZ3MJCT0gSFdNT0RfQ09OVFJPTF9PUFRfQ0xLU19JTl9SRVNFVCwKIAkubXB1X2lycXMJPSBvbWFwM3h4eF9ncGlvNV9pcnFzLAogCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2dwaW81X2lycXMpLAogCS5tYWluX2Nsawk9ICJncGlvNV9pY2siLApAQCAtMjMyMSw2ICsyMzI2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2dwaW82X2h3bW9kID0gewogCS5uYW1lCQk9ICJncGlvNiIsCisJLmZsYWdzCQk9IEhXTU9EX0NPTlRST0xfT1BUX0NMS1NfSU5fUkVTRVQsCiAJLm1wdV9pcnFzCT0gb21hcDN4eHhfZ3BpbzZfaXJxcywKIAkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9ncGlvNl9pcnFzKSwKIAkubWFpbl9jbGsJPSAiZ3BpbzZfaWNrIiwKQEAgLTIzODYsNyArMjM5Miw3IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwM3h4eF9kbWFfc3lzdGVtX2FkZHJzW10gPSB7CiAJewogCQkucGFfc3RhcnQJPSAweDQ4MDU2MDAwLAotCQkucGFfZW5kCQk9IDB4NGEwNTYwZmYsCisJCS5wYV9lbmQJCT0gMHg0ODA1NmZmZiwKIAkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQ0eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQ0eHhfZGF0YS5jCmluZGV4IDNlODhkZDMuLmFiYzU0OGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF80NHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNDR4eF9kYXRhLmMKQEAgLTg4NSw3ICs4ODUsNyBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfZG1hX3N5c3RlbV9hZGRyc1tdID0gewogCXsKIAkJLnBhX3N0YXJ0CT0gMHg0YTA1NjAwMCwKLQkJLnBhX2VuZAkJPSAweDRhMDU2MGZmLAorCQkucGFfZW5kCQk9IDB4NGEwNTZmZmYsCiAJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKIAl9LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9sM19zbXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9sM19zbXguYwppbmRleCA1ZjJkYTc1Ni4uNDMyMWU3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2wzX3NteC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9sM19zbXguYwpAQCAtMTk2LDExICsxOTYsMTEgQEAKIAkJLyogTm8gdGltZW91dCBlcnJvciBmb3IgZGVidWcgc291cmNlcyAqLwogCX0KIAotCWJhc2UgPSAoKGwzLT5ydCkgKyAoKihvbWFwM19sM19iYXNlc1tpbnRfdHlwZV0gKyBlcnJfc291cmNlKSkpOwotCiAJLyogaWRlbnRpZnkgdGhlIGVycm9yIHNvdXJjZSAqLwogCWZvciAoZXJyX3NvdXJjZSA9IDA7ICEoc3RhdHVzICYgKDEgPDwgZXJyX3NvdXJjZSkpOyBlcnJfc291cmNlKyspCiAJCQkJCQkJCQk7CisKKwliYXNlID0gbDMtPnJ0ICsgKihvbWFwM19sM19iYXNlc1tpbnRfdHlwZV0gKyBlcnJfc291cmNlKTsKIAllcnJvciA9IG9tYXAzX2wzX3JlYWRsbChiYXNlLCBMM19FUlJPUl9MT0cpOwogCiAJaWYgKGVycm9yKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmMKaW5kZXggMzBhZjMzNS4uNDk0ODZmNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uYwpAQCAtODksNiArODksNyBAQAogCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkgewogCQlfaW5pdF9vbWFwX2RldmljZSgibDNfbWFpbl8xIiwgJmwzX2Rldik7CiAJCV9pbml0X29tYXBfZGV2aWNlKCJkc3AiLCAmZHNwX2Rldik7CisJCV9pbml0X29tYXBfZGV2aWNlKCJpdmEiLCAmaXZhX2Rldik7CiAJfSBlbHNlIHsKIAkJX2luaXRfb21hcF9kZXZpY2UoImwzX21haW4iLCAmbDNfZGV2KTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtX2J1cy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbV9idXMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFjZDJhYi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtX2J1cy5jCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIFJ1bnRpbWUgUE0gc3VwcG9ydCBjb2RlIGZvciBPTUFQCi0gKgotICogQXV0aG9yOiBLZXZpbiBIaWxtYW4sIERlZXAgUm9vdCBTeXN0ZW1zLCBMTEMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQotICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0KLSNpbmNsdWRlIDxwbGF0L29tYXBfZGV2aWNlLmg+Ci0jaW5jbHVkZSA8cGxhdC9vbWFwLXBtLmg+Ci0KLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQotc3RhdGljIGludCBvbWFwX3BtX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCWludCByLCByZXQgPSAwOwotCi0JZGV2X2RiZyhkZXYsICIlc1xuIiwgX19mdW5jX18pOwotCi0JcmV0ID0gcG1fZ2VuZXJpY19ydW50aW1lX3N1c3BlbmQoZGV2KTsKLQotCWlmICghcmV0ICYmIGRldi0+cGFyZW50ID09ICZvbWFwX2RldmljZV9wYXJlbnQpIHsKLQkJciA9IG9tYXBfZGV2aWNlX2lkbGUocGRldik7Ci0JCVdBUk5fT04ocik7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX07Ci0KLXN0YXRpYyBpbnQgb21hcF9wbV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCWludCByOwotCi0JZGV2X2RiZyhkZXYsICIlc1xuIiwgX19mdW5jX18pOwotCi0JaWYgKGRldi0+cGFyZW50ID09ICZvbWFwX2RldmljZV9wYXJlbnQpIHsKLQkJciA9IG9tYXBfZGV2aWNlX2VuYWJsZShwZGV2KTsKLQkJV0FSTl9PTihyKTsKLQl9Ci0KLQlyZXR1cm4gcG1fZ2VuZXJpY19ydW50aW1lX3Jlc3VtZShkZXYpOwotfTsKLSNlbHNlCi0jZGVmaW5lIG9tYXBfcG1fcnVudGltZV9zdXNwZW5kIE5VTEwKLSNkZWZpbmUgb21hcF9wbV9ydW50aW1lX3Jlc3VtZSBOVUxMCi0jZW5kaWYgLyogQ09ORklHX1BNX1JVTlRJTUUgKi8KLQotc3RhdGljIGludCBfX2luaXQgb21hcF9wbV9ydW50aW1lX2luaXQodm9pZCkKLXsKLQljb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG07Ci0Jc3RydWN0IGRldl9wbV9vcHMgKm9tYXBfcG07Ci0KLQlwbSA9IHBsYXRmb3JtX2J1c19nZXRfcG1fb3BzKCk7Ci0JaWYgKCFwbSkgewotCQlwcl9lcnIoIiVzOiB1bmFibGUgdG8gZ2V0IGRldl9wbV9vcHMgZnJvbSBwbGF0Zm9ybV9idXNcbiIsCi0JCQlfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCW9tYXBfcG0gPSBrbWVtZHVwKHBtLCBzaXplb2Yoc3RydWN0IGRldl9wbV9vcHMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW9tYXBfcG0pIHsKLQkJcHJfZXJyKCIlczogdW5hYmxlIHRvIGFsbG9jIG1lbW9yeSBmb3IgbmV3IGRldl9wbV9vcHNcbiIsCi0JCQlfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCW9tYXBfcG0tPnJ1bnRpbWVfc3VzcGVuZCA9IG9tYXBfcG1fcnVudGltZV9zdXNwZW5kOwotCW9tYXBfcG0tPnJ1bnRpbWVfcmVzdW1lID0gb21hcF9wbV9ydW50aW1lX3Jlc3VtZTsKLQotCXBsYXRmb3JtX2J1c19zZXRfcG1fb3BzKG9tYXBfcG0pOwotCi0JcmV0dXJuIDA7Ci19Ci1jb3JlX2luaXRjYWxsKG9tYXBfcG1fcnVudGltZV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvdm9sdGFnZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlLmMKaW5kZXggNmZiNTIwOS4uMGMxNTUyZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlLmMKQEAgLTExNCw3ICsxMTQsNiBAQAogCXN5c19jbGtfc3BlZWQgLz0gMTAwMDsKIAogCS8qIEdlbmVyaWMgdm9sdGFnZSBwYXJhbWV0ZXJzICovCi0JdmRkLT5jdXJyX3ZvbHQgPSAxMjAwMDAwOwogCXZkZC0+dm9sdF9zY2FsZSA9IHZwX2ZvcmNldXBkYXRlX3NjYWxlX3ZvbHRhZ2U7CiAJdmRkLT52cF9lbmFibGVkID0gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2JhbGxvb24zLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9iYWxsb29uMy5jCmluZGV4IGJmYmVjZWMuLjgxMGE5ODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2JhbGxvb24zLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvYmFsbG9vbjMuYwpAQCAtMTUsNyArMTUsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay1weGEyeHguYyBiL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLXB4YTJ4eC5jCmluZGV4IDFjZTA5MDQuLjFkNTg1OWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLXB4YTJ4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLXB4YTJ4eC5jCkBAIC05LDcgKzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogCiAjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgogCkBAIC0zMywzMiArMzMsMjIgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyB1aW50MzJfdCBzYXZlZF9ja2VuOwogCi1zdGF0aWMgaW50IHB4YTJ4eF9jbG9ja19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHB4YTJ4eF9jbG9ja19zdXNwZW5kKHZvaWQpCiB7CiAJc2F2ZWRfY2tlbiA9IENLRU47CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHhhMnh4X2Nsb2NrX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZCkKK3N0YXRpYyB2b2lkIHB4YTJ4eF9jbG9ja19yZXN1bWUodm9pZCkKIHsKIAlDS0VOID0gc2F2ZWRfY2tlbjsKLQlyZXR1cm4gMDsKIH0KICNlbHNlCiAjZGVmaW5lIHB4YTJ4eF9jbG9ja19zdXNwZW5kCU5VTEwKICNkZWZpbmUgcHhhMnh4X2Nsb2NrX3Jlc3VtZQlOVUxMCiAjZW5kaWYKIAotc3RydWN0IHN5c2Rldl9jbGFzcyBweGEyeHhfY2xvY2tfc3lzY2xhc3MgPSB7Ci0JLm5hbWUJCT0gInB4YTJ4eC1jbG9jayIsCitzdHJ1Y3Qgc3lzY29yZV9vcHMgcHhhMnh4X2Nsb2NrX3N5c2NvcmVfb3BzID0gewogCS5zdXNwZW5kCT0gcHhhMnh4X2Nsb2NrX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBweGEyeHhfY2xvY2tfcmVzdW1lLAogfTsKLQotc3RhdGljIGludCBfX2luaXQgcHhhMnh4X2Nsb2NrX2luaXQodm9pZCkKLXsKLQlpZiAoY3B1X2lzX3B4YTJ4eCgpKQotCQlyZXR1cm4gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZweGEyeHhfY2xvY2tfc3lzY2xhc3MpOwotCXJldHVybiAwOwotfQotcG9zdGNvcmVfaW5pdGNhbGwocHhhMnh4X2Nsb2NrX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2stcHhhM3h4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay1weGEzeHguYwppbmRleCAzZjg2NGNkLi4yYTM3YTlhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay1weGEzeHguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay1weGEzeHguYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAKICNpbmNsdWRlIDxtYWNoL3NtZW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEzeHgtcmVncy5oPgpAQCAtMTgyLDcgKzE4Myw3IEBACiBzdGF0aWMgdWludDMyX3QgY2tlblsyXTsKIHN0YXRpYyB1aW50MzJfdCBhY2NyOwogCi1zdGF0aWMgaW50IHB4YTN4eF9jbG9ja19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHB4YTN4eF9jbG9ja19zdXNwZW5kKHZvaWQpCiB7CiAJY2tlblswXSA9IENLRU5BOwogCWNrZW5bMV0gPSBDS0VOQjsKQEAgLTE5MCwyOCArMTkxLDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHhhM3h4X2Nsb2NrX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZCkKK3N0YXRpYyB2b2lkIHB4YTN4eF9jbG9ja19yZXN1bWUodm9pZCkKIHsKIAlBQ0NSID0gYWNjcjsKIAlDS0VOQSA9IGNrZW5bMF07CiAJQ0tFTkIgPSBja2VuWzFdOwotCXJldHVybiAwOwogfQogI2Vsc2UKICNkZWZpbmUgcHhhM3h4X2Nsb2NrX3N1c3BlbmQJTlVMTAogI2RlZmluZSBweGEzeHhfY2xvY2tfcmVzdW1lCU5VTEwKICNlbmRpZgogCi1zdHJ1Y3Qgc3lzZGV2X2NsYXNzIHB4YTN4eF9jbG9ja19zeXNjbGFzcyA9IHsKLQkubmFtZQkJPSAicHhhM3h4LWNsb2NrIiwKK3N0cnVjdCBzeXNjb3JlX29wcyBweGEzeHhfY2xvY2tfc3lzY29yZV9vcHMgPSB7CiAJLnN1c3BlbmQJPSBweGEzeHhfY2xvY2tfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHB4YTN4eF9jbG9ja19yZXN1bWUsCiB9OwotCi1zdGF0aWMgaW50IF9faW5pdCBweGEzeHhfY2xvY2tfaW5pdCh2b2lkKQotewotCWlmIChjcHVfaXNfcHhhM3h4KCkgfHwgY3B1X2lzX3B4YTk1eCgpKQotCQlyZXR1cm4gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZweGEzeHhfY2xvY2tfc3lzY2xhc3MpOwotCXJldHVybiAwOwotfQotcG9zdGNvcmVfaW5pdGNhbGwocHhhM3h4X2Nsb2NrX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmgKaW5kZXggZjlmMzQ5YS4uMWYyZmI5YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay5oCkBAIC0xLDUgKzEsNSBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAKIHN0cnVjdCBjbGtvcHMgewogCXZvaWQJCQkoKmVuYWJsZSkoc3RydWN0IGNsayAqKTsKQEAgLTU0LDcgKzU0LDcgQEAKIHZvaWQgY2xrX3B4YTJ4eF9ja2VuX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspOwogdm9pZCBjbGtfcHhhMnh4X2NrZW5fZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspOwogCi1leHRlcm4gc3RydWN0IHN5c2Rldl9jbGFzcyBweGEyeHhfY2xvY2tfc3lzY2xhc3M7CitleHRlcm4gc3RydWN0IHN5c2NvcmVfb3BzIHB4YTJ4eF9jbG9ja19zeXNjb3JlX29wczsKIAogI2lmIGRlZmluZWQoQ09ORklHX1BYQTN4eCkgfHwgZGVmaW5lZChDT05GSUdfUFhBOTV4KQogI2RlZmluZSBERUZJTkVfUFhBM19DS0VOKF9uYW1lLCBfY2tlbiwgX3JhdGUsIF9kZWxheSkJXApAQCAtNzQsNSArNzQsNiBAQAogZXh0ZXJuIHZvaWQgY2xrX3B4YTN4eF9ja2VuX2VuYWJsZShzdHJ1Y3QgY2xrICopOwogZXh0ZXJuIHZvaWQgY2xrX3B4YTN4eF9ja2VuX2Rpc2FibGUoc3RydWN0IGNsayAqKTsKIAotZXh0ZXJuIHN0cnVjdCBzeXNkZXZfY2xhc3MgcHhhM3h4X2Nsb2NrX3N5c2NsYXNzOworZXh0ZXJuIHN0cnVjdCBzeXNjb3JlX29wcyBweGEzeHhfY2xvY2tfc3lzY29yZV9vcHM7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDI3MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDI3MC5jCmluZGV4IGI4OGQ2MDEuLjEzNTE4YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNzAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjcwLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14Mnh4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14Mnh4LmMKaW5kZXggODIyNWUyZS4uYTEwOTk2NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDJ4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyeHguYwpAQCAtMTAsNyArMTAsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIApAQCAtMzg4LDcgKzM4OCw3IEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzbGVlcF9zYXZlX21zY1sxMF07CiAKLXN0YXRpYyBpbnQgY214Mnh4X3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBjbXgyeHhfc3VzcGVuZCh2b2lkKQogewogCWNteDJ4eF9wY2lfc3VzcGVuZCgpOwogCkBAIC00MTIsNyArNDEyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjbXgyeHhfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBjbXgyeHhfcmVzdW1lKHZvaWQpCiB7CiAJY214Mnh4X3BjaV9yZXN1bWUoKTsKIApAQCAtNDIwLDI3ICs0MjAsMTggQEAKIAlfX3Jhd193cml0ZWwoc2xlZXBfc2F2ZV9tc2NbMF0sIE1TQzApOwogCV9fcmF3X3dyaXRlbChzbGVlcF9zYXZlX21zY1sxXSwgTVNDMSk7CiAJX19yYXdfd3JpdGVsKHNsZWVwX3NhdmVfbXNjWzJdLCBNU0MyKTsKLQotCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBjbXgyeHhfcG1fc3lzY2xhc3MgPSB7Ci0JLm5hbWUgPSAicG0iLAorc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBjbXgyeHhfcG1fc3lzY29yZV9vcHMgPSB7CiAJLnJlc3VtZSA9IGNteDJ4eF9yZXN1bWUsCiAJLnN1c3BlbmQgPSBjbXgyeHhfc3VzcGVuZCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBjbXgyeHhfcG1fZGV2aWNlID0gewotCS5jbHMgPSAmY214Mnh4X3BtX3N5c2NsYXNzLAotfTsKLQogc3RhdGljIGludCBfX2luaXQgY214Mnh4X3BtX2luaXQodm9pZCkKIHsKLQlpbnQgZXJyb3I7Ci0JZXJyb3IgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJmNteDJ4eF9wbV9zeXNjbGFzcyk7Ci0JaWYgKGVycm9yID09IDApCi0JCWVycm9yID0gc3lzZGV2X3JlZ2lzdGVyKCZjbXgyeHhfcG1fZGV2aWNlKTsKLQlyZXR1cm4gZXJyb3I7CisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJmNteDJ4eF9wbV9zeXNjb3JlX29wcyk7CisKKwlyZXR1cm4gMDsKIH0KICNlbHNlCiBzdGF0aWMgaW50IF9faW5pdCBjbXgyeHhfcG1faW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLWV2YWxib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1ldmFsYm9hcmQuYwppbmRleCA4MWMzYzQzLi5kMjhlODAyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLWV2YWxib2FyZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktZXZhbGJvYXJkLmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTI3MC1pbmNvbWUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMjcwLWluY29tZS5jCmluZGV4IDQ0YzFiNzcuLjgwNTM4YjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMjcwLWluY29tZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMjcwLWluY29tZS5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcHdtX2JhY2tsaWdodC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy9weGEtaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMjcwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTI3MC5jCmluZGV4IDZmYzVkMzIuLjc1NDVhNDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMjcwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEyNzAuYwpAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC91Y2IxNDAwLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmggYi9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmgKaW5kZXggYTA3OWQ4Yi4uZTZjOTM0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZ2VuZXJpYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuaApAQCAtNjEsMTAgKzYxLDEwIEBACiAjZGVmaW5lIHB4YTN4eF9nZXRfY2xrX2ZyZXF1ZW5jeV9raHooeCkJCSgwKQogI2VuZGlmCiAKLWV4dGVybiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHB4YV9pcnFfc3lzY2xhc3M7Ci1leHRlcm4gc3RydWN0IHN5c2Rldl9jbGFzcyBweGFfZ3Bpb19zeXNjbGFzczsKLWV4dGVybiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHB4YTJ4eF9tZnBfc3lzY2xhc3M7Ci1leHRlcm4gc3RydWN0IHN5c2Rldl9jbGFzcyBweGEzeHhfbWZwX3N5c2NsYXNzOworZXh0ZXJuIHN0cnVjdCBzeXNjb3JlX29wcyBweGFfaXJxX3N5c2NvcmVfb3BzOworZXh0ZXJuIHN0cnVjdCBzeXNjb3JlX29wcyBweGFfZ3Bpb19zeXNjb3JlX29wczsKK2V4dGVybiBzdHJ1Y3Qgc3lzY29yZV9vcHMgcHhhMnh4X21mcF9zeXNjb3JlX29wczsKK2V4dGVybiBzdHJ1Y3Qgc3lzY29yZV9vcHMgcHhhM3h4X21mcF9zeXNjb3JlX29wczsKIAogdm9pZCBfX2luaXQgcHhhX3NldF9mZnVhcnRfaW5mbyh2b2lkICppbmZvKTsKIHZvaWQgX19pbml0IHB4YV9zZXRfYnR1YXJ0X2luZm8odm9pZCAqaW5mbyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9oeDQ3MDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2h4NDcwMC5jCmluZGV4IDZkZTBhZDAuLjljZGNjYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2h4NDcwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2h4NDcwMC5jCkBAIC03MTEsNyArNzExLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBicTI0MDIyX2luaXRfZGF0YSA9IHsKIAkuY29uc3RyYWludHMgPSB7CiAJCS5tYXhfdUEgICAgICAgICA9IDUwMDAwMCwKLQkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9DVVJSRU5ULAorCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX0NVUlJFTlR8UkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCiAJfSwKIAkubnVtX2NvbnN1bWVyX3N1cHBsaWVzICA9IEFSUkFZX1NJWkUoYnEyNDAyMl9jb25zdW1lcnMpLAogCS5jb25zdW1lcl9zdXBwbGllcyAgICAgID0gYnEyNDAyMl9jb25zdW1lcnMsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pcnEuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2lycS5jCmluZGV4IDYyNTFlM2YuLjMyZWQ1NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2lycS5jCkBAIC0xNSw3ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIApAQCAtMTgzLDcgKzE4Myw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlZF9pY21yW01BWF9JTlRFUk5BTF9JUlFTLzMyXTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNhdmVkX2lwcltNQVhfSU5URVJOQUxfSVJRU107CiAKLXN0YXRpYyBpbnQgcHhhX2lycV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcHhhX2lycV9zdXNwZW5kKHZvaWQpCiB7CiAJaW50IGk7CiAKQEAgLTIwMiw3ICsyMDIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHB4YV9pcnFfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBweGFfaXJxX3Jlc3VtZSh2b2lkKQogewogCWludCBpOwogCkBAIC0yMTgsMjIgKzIxOCwxMyBAQAogCQkJX19yYXdfd3JpdGVsKHNhdmVkX2lwcltpXSwgSVJRX0JBU0UgKyBJUFIoaSkpOwogCiAJX19yYXdfd3JpdGVsKDEsIElSUV9CQVNFICsgSUNDUik7Ci0JcmV0dXJuIDA7CiB9CiAjZWxzZQogI2RlZmluZSBweGFfaXJxX3N1c3BlbmQJCU5VTEwKICNkZWZpbmUgcHhhX2lycV9yZXN1bWUJCU5VTEwKICNlbmRpZgogCi1zdHJ1Y3Qgc3lzZGV2X2NsYXNzIHB4YV9pcnFfc3lzY2xhc3MgPSB7Ci0JLm5hbWUJCT0gImlycSIsCitzdHJ1Y3Qgc3lzY29yZV9vcHMgcHhhX2lycV9zeXNjb3JlX29wcyA9IHsKIAkuc3VzcGVuZAk9IHB4YV9pcnFfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHB4YV9pcnFfcmVzdW1lLAogfTsKLQotc3RhdGljIGludCBfX2luaXQgcHhhX2lycV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHN5c2Rldl9jbGFzc19yZWdpc3RlcigmcHhhX2lycV9zeXNjbGFzcyk7Ci19Ci0KLWNvcmVfaW5pdGNhbGwocHhhX2lycV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2xwZDI3MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbHBkMjcwLmMKaW5kZXggZjVkZTU0MS4uNmNmODE4MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbHBkMjcwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbHBkMjcwLmMKQEAgLTE1LDcgKzE1LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CkBAIC0xNTksMzAgKzE1OSwyMiBAQAogCiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgbHBkMjcwX2lycV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGxwZDI3MF9pcnFfcmVzdW1lKHZvaWQpCiB7CiAJX19yYXdfd3JpdGV3KGxwZDI3MF9pcnFfZW5hYmxlZCwgTFBEMjcwX0lOVF9NQVNLKTsKLQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgbHBkMjcwX2lycV9zeXNjbGFzcyA9IHsKLQkubmFtZSA9ICJjcGxkX2lycSIsCitzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIGxwZDI3MF9pcnFfc3lzY29yZV9vcHMgPSB7CiAJLnJlc3VtZSA9IGxwZDI3MF9pcnFfcmVzdW1lLAogfTsKIAotc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIGxwZDI3MF9pcnFfZGV2aWNlID0gewotCS5jbHMgPSAmbHBkMjcwX2lycV9zeXNjbGFzcywKLX07Ci0KIHN0YXRpYyBpbnQgX19pbml0IGxwZDI3MF9pcnFfZGV2aWNlX2luaXQodm9pZCkKIHsKLQlpbnQgcmV0ID0gLUVOT0RFVjsKIAlpZiAobWFjaGluZV9pc19sb2dpY3BkX3B4YTI3MCgpKSB7Ci0JCXJldCA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmbHBkMjcwX2lycV9zeXNjbGFzcyk7Ci0JCWlmIChyZXQgPT0gMCkKLQkJCXJldCA9IHN5c2Rldl9yZWdpc3RlcigmbHBkMjcwX2lycV9kZXZpY2UpOworCQlyZWdpc3Rlcl9zeXNjb3JlX29wcygmbHBkMjcwX2lycV9zeXNjb3JlX29wcyk7CisJCXJldHVybiAwOwogCX0KLQlyZXR1cm4gcmV0OworCXJldHVybiAtRU5PREVWOwogfQogCiBkZXZpY2VfaW5pdGNhbGwobHBkMjcwX2lycV9kZXZpY2VfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9sdWJib2NrLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9sdWJib2NrLmMKaW5kZXggM2VkZTk3OC4uZTEwZGRiOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbHViYm9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYwpAQCAtMTUsNyArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KQEAgLTE3NiwzMSArMTc2LDIyIEBACiAKICNpZmRlZiBDT05GSUdfUE0KIAotc3RhdGljIGludCBsdWJib2NrX2lycV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGx1YmJvY2tfaXJxX3Jlc3VtZSh2b2lkKQogewogCUxVQl9JUlFfTUFTS19FTiA9IGx1YmJvY2tfaXJxX2VuYWJsZWQ7Ci0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIGx1YmJvY2tfaXJxX3N5c2NsYXNzID0gewotCS5uYW1lID0gImNwbGRfaXJxIiwKK3N0YXRpYyBzdHJ1Y3Qgc3lzY29yZV9vcHMgbHViYm9ja19pcnFfc3lzY29yZV9vcHMgPSB7CiAJLnJlc3VtZSA9IGx1YmJvY2tfaXJxX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBsdWJib2NrX2lycV9kZXZpY2UgPSB7Ci0JLmNscyA9ICZsdWJib2NrX2lycV9zeXNjbGFzcywKLX07Ci0KIHN0YXRpYyBpbnQgX19pbml0IGx1YmJvY2tfaXJxX2RldmljZV9pbml0KHZvaWQpCiB7Ci0JaW50IHJldCA9IC1FTk9ERVY7Ci0KIAlpZiAobWFjaGluZV9pc19sdWJib2NrKCkpIHsKLQkJcmV0ID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZsdWJib2NrX2lycV9zeXNjbGFzcyk7Ci0JCWlmIChyZXQgPT0gMCkKLQkJCXJldCA9IHN5c2Rldl9yZWdpc3RlcigmbHViYm9ja19pcnFfZGV2aWNlKTsKKwkJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJmx1YmJvY2tfaXJxX3N5c2NvcmVfb3BzKTsKKwkJcmV0dXJuIDA7CiAJfQotCXJldHVybiByZXQ7CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKIGRldmljZV9pbml0Y2FsbChsdWJib2NrX2lycV9kZXZpY2VfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFnaWNpYW4uYwppbmRleCBhNzI5OTNkLi45OTg0ZWY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21hZ2ljaWFuLmMKQEAgLTU5OSw3ICs1OTksNyBAQAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGJxMjQwMjJfaW5pdF9kYXRhID0gewogCS5jb25zdHJhaW50cyA9IHsKIAkJLm1heF91QSAgICAgICAgID0gNTAwMDAwLAotCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX0NVUlJFTlQsCisJCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfQ1VSUkVOVCB8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAogCX0sCiAJLm51bV9jb25zdW1lcl9zdXBwbGllcyAgPSBBUlJBWV9TSVpFKGJxMjQwMjJfY29uc3VtZXJzKSwKIAkuY29uc3VtZXJfc3VwcGxpZXMgICAgICA9IGJxMjQwMjJfY29uc3VtZXJzLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYwppbmRleCA5NTE2M2JhLi4zNDc5ZTJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYwpAQCAtMTUsNyArMTUsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KQEAgLTE4NSwzMSArMTg1LDIxIEBACiAKICNpZmRlZiBDT05GSUdfUE0KIAotc3RhdGljIGludCBtYWluc3RvbmVfaXJxX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgbWFpbnN0b25lX2lycV9yZXN1bWUodm9pZCkKIHsKIAlNU1RfSU5UTVNLRU5BID0gbWFpbnN0b25lX2lycV9lbmFibGVkOwotCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBtYWluc3RvbmVfaXJxX3N5c2NsYXNzID0gewotCS5uYW1lID0gImNwbGRfaXJxIiwKK3N0YXRpYyBzdHJ1Y3Qgc3lzY29yZV9vcHMgbWFpbnN0b25lX2lycV9zeXNjb3JlX29wcyA9IHsKIAkucmVzdW1lID0gbWFpbnN0b25lX2lycV9yZXN1bWUsCiB9OwogCi1zdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgbWFpbnN0b25lX2lycV9kZXZpY2UgPSB7Ci0JLmNscyA9ICZtYWluc3RvbmVfaXJxX3N5c2NsYXNzLAotfTsKLQogc3RhdGljIGludCBfX2luaXQgbWFpbnN0b25lX2lycV9kZXZpY2VfaW5pdCh2b2lkKQogewotCWludCByZXQgPSAtRU5PREVWOworCWlmIChtYWNoaW5lX2lzX21haW5zdG9uZSgpKQorCQlyZWdpc3Rlcl9zeXNjb3JlX29wcygmbWFpbnN0b25lX2lycV9zeXNjb3JlX29wcyk7CiAKLQlpZiAobWFjaGluZV9pc19tYWluc3RvbmUoKSkgewotCQlyZXQgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJm1haW5zdG9uZV9pcnFfc3lzY2xhc3MpOwotCQlpZiAocmV0ID09IDApCi0JCQlyZXQgPSBzeXNkZXZfcmVnaXN0ZXIoJm1haW5zdG9uZV9pcnFfZGV2aWNlKTsKLQl9Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogZGV2aWNlX2luaXRjYWxsKG1haW5zdG9uZV9pcnFfZGV2aWNlX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbWZwLXB4YTJ4eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbWZwLXB4YTJ4eC5jCmluZGV4IDFkMTQxOWIuLjg3YWUzMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL21mcC1weGEyeHguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9tZnAtcHhhMnh4LmMKQEAgLTE2LDcgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KIAogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KQEAgLTMzOCw3ICszMzgsNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2F2ZWRfZ3Bkcls0XTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNhdmVkX3Bnc3JbNF07CiAKLXN0YXRpYyBpbnQgcHhhMnh4X21mcF9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHB4YTJ4eF9tZnBfc3VzcGVuZCh2b2lkKQogewogCWludCBpOwogCkBAIC0zNjUsNyArMzY1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBweGEyeHhfbWZwX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZCkKK3N0YXRpYyB2b2lkIHB4YTJ4eF9tZnBfcmVzdW1lKHZvaWQpCiB7CiAJaW50IGk7CiAKQEAgLTM3NiwxNSArMzc2LDEzIEBACiAJCVBHU1IoaSkgPSBzYXZlZF9wZ3NyW2ldOwogCX0KIAlQU1NSID0gUFNTUl9SREggfCBQU1NSX1BIOwotCXJldHVybiAwOwogfQogI2Vsc2UKICNkZWZpbmUgcHhhMnh4X21mcF9zdXNwZW5kCU5VTEwKICNkZWZpbmUgcHhhMnh4X21mcF9yZXN1bWUJTlVMTAogI2VuZGlmCiAKLXN0cnVjdCBzeXNkZXZfY2xhc3MgcHhhMnh4X21mcF9zeXNjbGFzcyA9IHsKLQkubmFtZQkJPSAibWZwIiwKK3N0cnVjdCBzeXNjb3JlX29wcyBweGEyeHhfbWZwX3N5c2NvcmVfb3BzID0gewogCS5zdXNwZW5kCT0gcHhhMnh4X21mcF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gcHhhMnh4X21mcF9yZXN1bWUsCiB9OwpAQCAtNDA5LDYgKzQwNyw2IEBACiAJZm9yIChpID0gMDsgaSA8PSBncGlvX3RvX2JhbmsocHhhX2xhc3RfZ3Bpbyk7IGkrKykKIAkJZ3Bkcl9scG1baV0gPSBHUERSKGkgKiAzMik7CiAKLQlyZXR1cm4gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZweGEyeHhfbWZwX3N5c2NsYXNzKTsKKwlyZXR1cm4gMDsKIH0KIHBvc3Rjb3JlX2luaXRjYWxsKHB4YTJ4eF9tZnBfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tZnAtcHhhM3h4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9tZnAtcHhhM3h4LmMKaW5kZXggN2EyNzBlZS4uODk4NjNhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWZwLXB4YTN4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21mcC1weGEzeHguYwpAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9tZnAtcHhhM3h4Lmg+CkBAIC0zMSwxMyArMzEsMTMgQEAKICAqIGEgcHVsbC1kb3duIG1vZGUgaWYgdGhleSdyZSBhbiBhY3RpdmUgbG93IGNoaXAgc2VsZWN0LCBhbmQgd2UncmUKICAqIGp1c3QgZW50ZXJpbmcgc3RhbmRieS4KICAqLwotc3RhdGljIGludCBweGEzeHhfbWZwX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmQsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcHhhM3h4X21mcF9zdXNwZW5kKHZvaWQpCiB7CiAJbWZwX2NvbmZpZ19scG0oKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBweGEzeHhfbWZwX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZCkKK3N0YXRpYyB2b2lkIHB4YTN4eF9tZnBfcmVzdW1lKHZvaWQpCiB7CiAJbWZwX2NvbmZpZ19ydW4oKTsKIApAQCAtNDcsMjQgKzQ3LDEzIEBACiAJICogcHJlc2VydmUgdGhlbSBoZXJlIGluIGNhc2UgdGhleSB3aWxsIGJlIHJlZmVyZW5jZWQgbGF0ZXIKIAkgKi8KIAlBU0NSICY9IH4oQVNDUl9SREggfCBBU0NSX0QxUyB8IEFTQ1JfRDJTIHwgQVNDUl9EM1MpOwotCXJldHVybiAwOwogfQogI2Vsc2UKICNkZWZpbmUgcHhhM3h4X21mcF9zdXNwZW5kCU5VTEwKICNkZWZpbmUgcHhhM3h4X21mcF9yZXN1bWUJTlVMTAogI2VuZGlmCiAKLXN0cnVjdCBzeXNkZXZfY2xhc3MgcHhhM3h4X21mcF9zeXNjbGFzcyA9IHsKLQkubmFtZQkJPSAibWZwIiwKK3N0cnVjdCBzeXNjb3JlX29wcyBweGEzeHhfbWZwX3N5c2NvcmVfb3BzID0gewogCS5zdXNwZW5kCT0gcHhhM3h4X21mcF9zdXNwZW5kLAotCS5yZXN1bWUgCT0gcHhhM3h4X21mcF9yZXN1bWUsCisJLnJlc3VtZQkJPSBweGEzeHhfbWZwX3Jlc3VtZSwKIH07Ci0KLXN0YXRpYyBpbnQgX19pbml0IG1mcF9pbml0X2RldmljZWZzKHZvaWQpCi17Ci0JaWYgKGNwdV9pc19weGEzeHgoKSkKLQkJcmV0dXJuIHN5c2Rldl9jbGFzc19yZWdpc3RlcigmcHhhM3h4X21mcF9zeXNjbGFzcyk7Ci0KLQlyZXR1cm4gMDsKLX0KLXBvc3Rjb3JlX2luaXRjYWxsKG1mcF9pbml0X2RldmljZWZzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL21pb2E3MDEuYyBiL2FyY2gvYXJtL21hY2gtcHhhL21pb2E3MDEuYwppbmRleCAyMzkyNWRiLi5lMzQ3MDEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9taW9hNzAxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbWlvYTcwMS5jCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgpAQCAtNDg4LDcgKzQ4OCw3IEBACiB9CiAKIAotc3RhdGljIGludCBtaW9hNzAxX3N5c19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgbWlvYTcwMV9zeXNfc3VzcGVuZCh2b2lkKQogewogCWludCBpID0gMCwgaXNfYnRfb247CiAJdTMyICptZW1fcmVzdW1lX3ZlY3Rvcgk9IHBoeXNfdG9fdmlydChSRVNVTUVfVkVDVE9SX0FERFIpOwpAQCAtNTE0LDcgKzUxNCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWlvYTcwMV9zeXNfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYpCitzdGF0aWMgdm9pZCBtaW9hNzAxX3N5c19yZXN1bWUodm9pZCkKIHsKIAlpbnQgaSA9IDA7CiAJdTMyICptZW1fcmVzdW1lX3ZlY3Rvcgk9IHBoeXNfdG9fdmlydChSRVNVTUVfVkVDVE9SX0FERFIpOwpAQCAtNTI3LDQzICs1MjcsMTggQEAKIAkqbWVtX3Jlc3VtZV9lbmFibGVyID0gc2F2ZV9idWZmZXJbaSsrXTsKIAkqbWVtX3Jlc3VtZV9idAkgICAgPSBzYXZlX2J1ZmZlcltpKytdOwogCSptZW1fcmVzdW1lX3Vua25vd24gPSBzYXZlX2J1ZmZlcltpKytdOwotCi0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIG1pb2E3MDFfc3lzY2xhc3MgPSB7Ci0JLm5hbWUgPSAibWlvYTcwMSIsCi19OwotCi1zdGF0aWMgc3RydWN0IHN5c19kZXZpY2Ugc3lzZGV2X2Jvb3RzdHJhcCA9IHsKLQkuY2xzCQk9ICZtaW9hNzAxX3N5c2NsYXNzLAotfTsKLQotc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIGRyaXZlcl9ib290c3RyYXAgPSB7Ci0JLnN1c3BlbmQJPSAmbWlvYTcwMV9zeXNfc3VzcGVuZCwKLQkucmVzdW1lCQk9ICZtaW9hNzAxX3N5c19yZXN1bWUsCitzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIG1pb2E3MDFfc3lzY29yZV9vcHMgPSB7CisJLnN1c3BlbmQJPSBtaW9hNzAxX3N5c19zdXNwZW5kLAorCS5yZXN1bWUJCT0gbWlvYTcwMV9zeXNfcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYm9vdHN0cmFwX2luaXQodm9pZCkKIHsKLQlpbnQgcmM7CiAJaW50IHNhdmVfc2l6ZSA9IG1pb2E3MDFfYm9vdHN0cmFwX2xnICsgKHNpemVvZih1MzIpICogMyk7CiAKLQlyYyA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmbWlvYTcwMV9zeXNjbGFzcyk7Ci0JaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHJlZ2lzdGVyaW5nIG1pb2E3MDEgc3lzIGNsYXNzXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCXJjID0gc3lzZGV2X3JlZ2lzdGVyKCZzeXNkZXZfYm9vdHN0cmFwKTsKLQlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgcmVnaXN0ZXJpbmcgbWlvYTcwMSBzeXMgZGV2aWNlXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCXJjID0gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmbWlvYTcwMV9zeXNjbGFzcywgJmRyaXZlcl9ib290c3RyYXApOwotCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCByZWdpc3RlcmluZyBQTVUgc3lzIGRyaXZlclxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmbWlvYTcwMV9zeXNjb3JlX29wcyk7CiAKIAlzYXZlX2J1ZmZlciA9IGttYWxsb2Moc2F2ZV9zaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNhdmVfYnVmZmVyKQpAQCAtNTc2LDkgKzU1MSw3IEBACiBzdGF0aWMgdm9pZCBib290c3RyYXBfZXhpdCh2b2lkKQogewogCWtmcmVlKHNhdmVfYnVmZmVyKTsKLQlzeXNkZXZfZHJpdmVyX3VucmVnaXN0ZXIoJm1pb2E3MDFfc3lzY2xhc3MsICZkcml2ZXJfYm9vdHN0cmFwKTsKLQlzeXNkZXZfdW5yZWdpc3Rlcigmc3lzZGV2X2Jvb3RzdHJhcCk7Ci0Jc3lzZGV2X2NsYXNzX3VucmVnaXN0ZXIoJm1pb2E3MDFfc3lzY2xhc3MpOworCXVucmVnaXN0ZXJfc3lzY29yZV9vcHMoJm1pb2E3MDFfc3lzY29yZV9vcHMpOwogCiAJcHJpbnRrKEtFUk5fQ1JJVCAiVW5yZWdpc3RlcmluZyBtaW9hNzAxIHN1c3BlbmQgd2lsbCBoYW5nIG5leHQiCiAJICAgICAgICJyZXN1bWUgISEhXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG1sZC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbWxkLmMKaW5kZXggYTZmODk4Yy4uNDA2MWVjZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbWxkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbWxkLmMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvd205N3h4Lmg+CiAjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10cmVvLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdHJlby5jCmluZGV4IDhhYWRhZDUuLjIwZDFiMTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10cmVvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRyZW8uYwpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3B3bV9iYWNrbGlnaHQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvdzEtZ3Bpby5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG16NzIuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG16NzIuYwppbmRleCAzYjhhNGYzLi42NWYyNGYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtejcyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXo3Mi5jCkBAIC0xOSw3ICsxOSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KQEAgLTIzMyw5ICsyMzMsOSBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdG9yZV9wdHI7CiAKLS8qIHN5c19kZXZpY2UgZm9yIFBhbG0gWmlyZSA3MiBQTSAqLworLyogc3lzY29yZV9vcHMgZm9yIFBhbG0gWmlyZSA3MiBQTSAqLwogCi1zdGF0aWMgaW50IHBhbG16NzJfcG1fc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQorc3RhdGljIGludCBwYWxtejcyX3BtX3N1c3BlbmQodm9pZCkKIHsKIAkvKiBzZXR1cCB0aGUgcmVzdW1lX2luZm8gc3RydWN0IGZvciB0aGUgb3JpZ2luYWwgYm9vdGxvYWRlciAqLwogCXBhbG16NzJfcmVzdW1lX2luZm8ucmVzdW1lX2FkZHIgPSAodTMyKSBjcHVfcmVzdW1lOwpAQCAtMjQ5LDMxICsyNDksMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwYWxtejcyX3BtX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgcGFsbXo3Ml9wbV9yZXN1bWUodm9pZCkKIHsKIAkqUEFMTVo3Ml9TQVZFX0RXT1JEID0gc3RvcmVfcHRyOwotCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBwYWxtejcyX3BtX3N5c2NsYXNzID0gewotCS5uYW1lID0gInBhbG16NzJfcG0iLAorc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBwYWxtejcyX3BtX3N5c2NvcmVfb3BzID0gewogCS5zdXNwZW5kID0gcGFsbXo3Ml9wbV9zdXNwZW5kLAogCS5yZXN1bWUgPSBwYWxtejcyX3BtX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBwYWxtejcyX3BtX2RldmljZSA9IHsKLQkuY2xzID0gJnBhbG16NzJfcG1fc3lzY2xhc3MsCi19OwotCiBzdGF0aWMgaW50IF9faW5pdCBwYWxtejcyX3BtX2luaXQodm9pZCkKIHsKLQlpbnQgcmV0ID0gLUVOT0RFVjsKIAlpZiAobWFjaGluZV9pc19wYWxtejcyKCkpIHsKLQkJcmV0ID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZwYWxtejcyX3BtX3N5c2NsYXNzKTsKLQkJaWYgKHJldCA9PSAwKQotCQkJcmV0ID0gc3lzZGV2X3JlZ2lzdGVyKCZwYWxtejcyX3BtX2RldmljZSk7CisJCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZwYWxtejcyX3BtX3N5c2NvcmVfb3BzKTsKKwkJcmV0dXJuIDA7CiAJfQotCXJldHVybiByZXQ7CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKIGRldmljZV9pbml0Y2FsbChwYWxtejcyX3BtX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjV4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYwppbmRleCBhNGFmOGM1Li5mZWQzNjNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYwpAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgpAQCAtMzUwLDIxICszNTAsOSBAQAogCSZweGFfZGV2aWNlX2Fzb2NfcGxhdGZvcm0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgcHhhMjV4X3N5c2RldltdID0gewotCXsKLQkJLmNscwk9ICZweGFfaXJxX3N5c2NsYXNzLAotCX0sIHsKLQkJLmNscwk9ICZweGEyeHhfbWZwX3N5c2NsYXNzLAotCX0sIHsKLQkJLmNscwk9ICZweGFfZ3Bpb19zeXNjbGFzcywKLQl9LCB7Ci0JCS5jbHMJPSAmcHhhMnh4X2Nsb2NrX3N5c2NsYXNzLAotCX0KLX07Ci0KIHN0YXRpYyBpbnQgX19pbml0IHB4YTI1eF9pbml0KHZvaWQpCiB7Ci0JaW50IGksIHJldCA9IDA7CisJaW50IHJldCA9IDA7CiAKIAlpZiAoY3B1X2lzX3B4YTI1eCgpKSB7CiAKQEAgLTM3NywxMSArMzY1LDEwIEBACiAKIAkJcHhhMjV4X2luaXRfcG0oKTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShweGEyNXhfc3lzZGV2KTsgaSsrKSB7Ci0JCQlyZXQgPSBzeXNkZXZfcmVnaXN0ZXIoJnB4YTI1eF9zeXNkZXZbaV0pOwotCQkJaWYgKHJldCkKLQkJCQlwcl9lcnIoImZhaWxlZCB0byByZWdpc3RlciBzeXNkZXZbJWRdXG4iLCBpKTsKLQkJfQorCQlyZWdpc3Rlcl9zeXNjb3JlX29wcygmcHhhX2lycV9zeXNjb3JlX29wcyk7CisJCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZweGEyeHhfbWZwX3N5c2NvcmVfb3BzKTsKKwkJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnB4YV9ncGlvX3N5c2NvcmVfb3BzKTsKKwkJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnB4YTJ4eF9jbG9ja19zeXNjb3JlX29wcyk7CiAKIAkJcmV0ID0gcGxhdGZvcm1fYWRkX2RldmljZXMocHhhMjV4X2RldmljZXMsCiAJCQkJCSAgIEFSUkFZX1NJWkUocHhhMjV4X2RldmljZXMpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI3eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMKaW5kZXggOTA5NzU2ZS4uMmZlY2JlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMKQEAgLTE2LDcgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvcHhhLWkyYy5oPgpAQCAtNDI4LDIxICs0MjgsOSBAQAogCSZweGEyN3hfZGV2aWNlX3B3bTEsCiB9OwogCi1zdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgcHhhMjd4X3N5c2RldltdID0gewotCXsKLQkJLmNscwk9ICZweGFfaXJxX3N5c2NsYXNzLAotCX0sIHsKLQkJLmNscwk9ICZweGEyeHhfbWZwX3N5c2NsYXNzLAotCX0sIHsKLQkJLmNscwk9ICZweGFfZ3Bpb19zeXNjbGFzcywKLQl9LCB7Ci0JCS5jbHMJPSAmcHhhMnh4X2Nsb2NrX3N5c2NsYXNzLAotCX0KLX07Ci0KIHN0YXRpYyBpbnQgX19pbml0IHB4YTI3eF9pbml0KHZvaWQpCiB7Ci0JaW50IGksIHJldCA9IDA7CisJaW50IHJldCA9IDA7CiAKIAlpZiAoY3B1X2lzX3B4YTI3eCgpKSB7CiAKQEAgLTQ1NSwxMSArNDQzLDEwIEBACiAKIAkJcHhhMjd4X2luaXRfcG0oKTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShweGEyN3hfc3lzZGV2KTsgaSsrKSB7Ci0JCQlyZXQgPSBzeXNkZXZfcmVnaXN0ZXIoJnB4YTI3eF9zeXNkZXZbaV0pOwotCQkJaWYgKHJldCkKLQkJCQlwcl9lcnIoImZhaWxlZCB0byByZWdpc3RlciBzeXNkZXZbJWRdXG4iLCBpKTsKLQkJfQorCQlyZWdpc3Rlcl9zeXNjb3JlX29wcygmcHhhX2lycV9zeXNjb3JlX29wcyk7CisJCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZweGEyeHhfbWZwX3N5c2NvcmVfb3BzKTsKKwkJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnB4YV9ncGlvX3N5c2NvcmVfb3BzKTsKKwkJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnB4YTJ4eF9jbG9ja19zeXNjb3JlX29wcyk7CiAKIAkJcmV0ID0gcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzeHguYwppbmRleCA4ZGQxMDczLi44NTIxZDdkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEzeHguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzeHguYwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvcHhhLWkyYy5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CkBAIC00MjcsMjEgKzQyNyw5IEBACiAJJnB4YTI3eF9kZXZpY2VfcHdtMSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBweGEzeHhfc3lzZGV2W10gPSB7Ci0JewotCQkuY2xzCT0gJnB4YV9pcnFfc3lzY2xhc3MsCi0JfSwgewotCQkuY2xzCT0gJnB4YTN4eF9tZnBfc3lzY2xhc3MsCi0JfSwgewotCQkuY2xzCT0gJnB4YV9ncGlvX3N5c2NsYXNzLAotCX0sIHsKLQkJLmNscwk9ICZweGEzeHhfY2xvY2tfc3lzY2xhc3MsCi0JfQotfTsKLQogc3RhdGljIGludCBfX2luaXQgcHhhM3h4X2luaXQodm9pZCkKIHsKLQlpbnQgaSwgcmV0ID0gMDsKKwlpbnQgcmV0ID0gMDsKIAogCWlmIChjcHVfaXNfcHhhM3h4KCkpIHsKIApAQCAtNDYyLDExICs0NTAsMTAgQEAKIAogCQlweGEzeHhfaW5pdF9wbSgpOwogCi0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHB4YTN4eF9zeXNkZXYpOyBpKyspIHsKLQkJCXJldCA9IHN5c2Rldl9yZWdpc3RlcigmcHhhM3h4X3N5c2RldltpXSk7Ci0JCQlpZiAocmV0KQotCQkJCXByX2VycigiZmFpbGVkIHRvIHJlZ2lzdGVyIHN5c2RldlslZF1cbiIsIGkpOwotCQl9CisJCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZweGFfaXJxX3N5c2NvcmVfb3BzKTsKKwkJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnB4YTN4eF9tZnBfc3lzY29yZV9vcHMpOworCQlyZWdpc3Rlcl9zeXNjb3JlX29wcygmcHhhX2dwaW9fc3lzY29yZV9vcHMpOworCQlyZWdpc3Rlcl9zeXNjb3JlX29wcygmcHhhM3h4X2Nsb2NrX3N5c2NvcmVfb3BzKTsKIAogCQlyZXQgPSBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGE5NXguYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTk1eC5jCmluZGV4IDIzYjIyOWIuLmVjYzgyYTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTk1eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTk1eC5jCkBAIC0xOCw3ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjL3B4YS1pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CkBAIC0yNjAsMTYgKzI2MCw2IEBACiAJJnB4YTI3eF9kZXZpY2VfcHdtMSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBweGE5NXhfc3lzZGV2W10gPSB7Ci0JewotCQkuY2xzCT0gJnB4YV9pcnFfc3lzY2xhc3MsCi0JfSwgewotCQkuY2xzCT0gJnB4YV9ncGlvX3N5c2NsYXNzLAotCX0sIHsKLQkJLmNscwk9ICZweGEzeHhfY2xvY2tfc3lzY2xhc3MsCi0JfQotfTsKLQogc3RhdGljIGludCBfX2luaXQgcHhhOTV4X2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMCwgaTsKQEAgLTI5MywxMSArMjgzLDkgQEAKIAkJaWYgKChyZXQgPSBweGFfaW5pdF9kbWEoSVJRX0RNQSwgMzIpKSkKIAkJCXJldHVybiByZXQ7CiAKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHhhOTV4X3N5c2Rldik7IGkrKykgewotCQkJcmV0ID0gc3lzZGV2X3JlZ2lzdGVyKCZweGE5NXhfc3lzZGV2W2ldKTsKLQkJCWlmIChyZXQpCi0JCQkJcHJfZXJyKCJmYWlsZWQgdG8gcmVnaXN0ZXIgc3lzZGV2WyVkXVxuIiwgaSk7Ci0JCX0KKwkJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnB4YV9pcnFfc3lzY29yZV9vcHMpOworCQlyZWdpc3Rlcl9zeXNjb3JlX29wcygmcHhhX2dwaW9fc3lzY29yZV9vcHMpOworCQlyZWdpc3Rlcl9zeXNjb3JlX29wcygmcHhhM3h4X2Nsb2NrX3N5c2NvcmVfb3BzKTsKIAogCQlyZXQgPSBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9yYXVtZmVsZC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcmF1bWZlbGQuYwppbmRleCBjZDE4NjEzLi5kMTMwZjc3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9yYXVtZmVsZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3JhdW1mZWxkLmMKQEAgLTE4LDcgKzE4LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zbWVtYy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvc21lbWMuYwppbmRleCAyMzJiNzMxLi43OTkyMzA1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zbWVtYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NtZW1jLmMKQEAgLTYsNyArNiw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3NtZW1jLmg+CkBAIC0xNiw3ICsxNiw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzeGNuZmcsIG1lbWNsa2NmZzsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNzYWRyY2ZnWzRdOwogCi1zdGF0aWMgaW50IHB4YTN4eF9zbWVtY19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcHhhM3h4X3NtZW1jX3N1c3BlbmQodm9pZCkKIHsKIAltc2NbMF0gPSBfX3Jhd19yZWFkbChNU0MwKTsKIAltc2NbMV0gPSBfX3Jhd19yZWFkbChNU0MxKTsKQEAgLTMwLDcgKzMwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBweGEzeHhfc21lbWNfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBweGEzeHhfc21lbWNfcmVzdW1lKHZvaWQpCiB7CiAJX19yYXdfd3JpdGVsKG1zY1swXSwgTVNDMCk7CiAJX19yYXdfd3JpdGVsKG1zY1sxXSwgTVNDMSk7CkBAIC00MCwzNCArNDAsMTkgQEAKIAlfX3Jhd193cml0ZWwoY3NhZHJjZmdbMV0sIENTQURSQ0ZHMSk7CiAJX19yYXdfd3JpdGVsKGNzYWRyY2ZnWzJdLCBDU0FEUkNGRzIpOwogCV9fcmF3X3dyaXRlbChjc2FkcmNmZ1szXSwgQ1NBRFJDRkczKTsKLQotCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBzbWVtY19zeXNjbGFzcyA9IHsKLQkubmFtZQkJPSAic21lbWMiLAorc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBzbWVtY19zeXNjb3JlX29wcyA9IHsKIAkuc3VzcGVuZAk9IHB4YTN4eF9zbWVtY19zdXNwZW5kLAogCS5yZXN1bWUJCT0gcHhhM3h4X3NtZW1jX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBzbWVtY19zeXNkZXYgPSB7Ci0JLmlkCQk9IDAsCi0JLmNscwkJPSAmc21lbWNfc3lzY2xhc3MsCi19OwotCiBzdGF0aWMgaW50IF9faW5pdCBzbWVtY19pbml0KHZvaWQpCiB7Ci0JaW50IHJldCA9IDA7CisJaWYgKGNwdV9pc19weGEzeHgoKSkKKwkJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnNtZW1jX3N5c2NvcmVfb3BzKTsKIAotCWlmIChjcHVfaXNfcHhhM3h4KCkpIHsKLQkJcmV0ID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZzbWVtY19zeXNjbGFzcyk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXJldCA9IHN5c2Rldl9yZWdpc3Rlcigmc21lbWNfc3lzZGV2KTsKLQl9Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogc3Vic3lzX2luaXRjYWxsKHNtZW1jX2luaXQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS90cml6ZXBzNC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdHJpemVwczQuYwppbmRleCBiOWNmYmViLi42ODc0MTdhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90cml6ZXBzNC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3RyaXplcHM0LmMKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3ZpcGVyLmMgYi9hcmNoL2FybS9tYWNoLXB4YS92aXBlci5jCmluZGV4IGI1MjNmMTEuLjkwMzIxOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3ZpcGVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdmlwZXIuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KIAogI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgpAQCAtMTMwLDIwICsxMzEsMTkgQEAKIAlyZXR1cm4gdjE7CiB9CiAKLS8qIENQVSBzeXNkZXYgKi8KLXN0YXRpYyBpbnQgdmlwZXJfY3B1X3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorLyogQ1BVIHN5c3RlbSBjb3JlIG9wZXJhdGlvbnMuICovCitzdGF0aWMgaW50IHZpcGVyX2NwdV9zdXNwZW5kKHZvaWQpCiB7CiAJdmlwZXJfaWNyX3NldF9iaXQoVklQRVJfSUNSX1JfRElTKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aXBlcl9jcHVfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYpCitzdGF0aWMgdm9pZCB2aXBlcl9jcHVfcmVzdW1lKHZvaWQpCiB7CiAJdmlwZXJfaWNyX2NsZWFyX2JpdChWSVBFUl9JQ1JfUl9ESVMpOwotCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgdmlwZXJfY3B1X3N5c2Rldl9kcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIHZpcGVyX2NwdV9zeXNjb3JlX29wcyA9IHsKIAkuc3VzcGVuZAk9IHZpcGVyX2NwdV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gdmlwZXJfY3B1X3Jlc3VtZSwKIH07CkBAIC05NDUsNyArOTQ1LDcgQEAKIAl2aXBlcl9pbml0X3Zjb3JlX2dwaW9zKCk7CiAJdmlwZXJfaW5pdF9jcHVmcmVxKCk7CiAKLQlzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZjcHVfc3lzZGV2X2NsYXNzLCAmdmlwZXJfY3B1X3N5c2Rldl9kcml2ZXIpOworCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZ2aXBlcl9jcHVfc3lzY29yZV9vcHMpOwogCiAJaWYgKHZlcnNpb24pIHsKIAkJcHJfaW5mbygidmlwZXI6IGhhcmR3YXJlIHYlZGklZCBkZXRlY3RlZC4gIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdnBhYzI3MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdnBhYzI3MC5jCmluZGV4IGY3MWQzNzcuLjY3YmQ0MTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3ZwYWMyNzAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS92cGFjMjcwLmMKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvZ3Bpb192YnVzLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9iYXJyaWVycy5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYmFycmllcnMuaAppbmRleCAwYzVkNzQ5Li45YTczMjE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9iYXJyaWVycy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JhcnJpZXJzLmgKQEAgLTQsNSArNCw1IEBACiAgKiBvcGVyYXRpb24gdG8gZGVhZGxvY2sgdGhlIHN5c3RlbS4KICAqLwogI2RlZmluZSBtYigpCQlkc2IoKQotI2RlZmluZSBybWIoKQkJZG1iKCkKKyNkZWZpbmUgcm1iKCkJCWRzYigpCiAjZGVmaW5lIHdtYigpCQltYigpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaXJxLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaXJxLmMKaW5kZXggNWUyZjM1My4uMjg1NDEyOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pcnEuYwpAQCAtMjMsMzggKzIzLDEyIEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KIAogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9wbS5oPgogCi1zdGF0aWMgaW50IHMzYzI0MTBfaXJxX2FkZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQxMF9pcnFfZHJpdmVyID0gewotCS5hZGQJCT0gczNjMjQxMF9pcnFfYWRkLAorc3RydWN0IHN5c2NvcmVfb3BzIHMzYzI0eHhfaXJxX3N5c2NvcmVfb3BzID0gewogCS5zdXNwZW5kCT0gczNjMjR4eF9pcnFfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHMzYzI0eHhfaXJxX3Jlc3VtZSwKIH07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHMzYzI0MTBfaXJxX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczNjMjQxMF9zeXNjbGFzcywgJnMzYzI0MTBfaXJxX2RyaXZlcik7Ci19Ci0KLWFyY2hfaW5pdGNhbGwoczNjMjQxMF9pcnFfaW5pdCk7Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDEwYV9pcnFfZHJpdmVyID0gewotCS5hZGQJCT0gczNjMjQxMF9pcnFfYWRkLAotCS5zdXNwZW5kCT0gczNjMjR4eF9pcnFfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHMzYzI0eHhfaXJxX3Jlc3VtZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHMzYzI0MTBhX2lycV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0MTBhX3N5c2NsYXNzLCAmczNjMjQxMGFfaXJxX2RyaXZlcik7Ci19Ci0KLWFyY2hfaW5pdGNhbGwoczNjMjQxMGFfaXJxX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jCmluZGV4IDI5NzBlYTkuLjFlMmQ1MzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtOTAwMC5oPgpAQCAtMjE0LDE3ICsyMTQsMTYgQEAKIC8qIE5BTkQgRmxhc2ggb24gQkFTVCBib2FyZCAqLwogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGJhc3RfcG1fc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqc2QsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgYmFzdF9wbV9zdXNwZW5kKHZvaWQpCiB7CiAJLyogZW5zdXJlIHRoYXQgYW4gblJFU0VUIGlzIG5vdCBnZW5lcmF0ZWQgb24gcmVzdW1lLiAqLwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChTM0MyNDEwX0dQQSgyMSksIDEpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGJhc3RfcG1fcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpzZCkKK3N0YXRpYyB2b2lkIGJhc3RfcG1fcmVzdW1lKHZvaWQpCiB7CiAJczNjX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BBKDIxKSwgUzNDMjQxMF9HUEEyMV9uUlNUT1VUKTsKLQlyZXR1cm4gMDsKIH0KIAogI2Vsc2UKQEAgLTIzMiwxNiArMjMxLDExIEBACiAjZGVmaW5lIGJhc3RfcG1fcmVzdW1lIE5VTEwKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBiYXN0X3BtX3N5c2NsYXNzID0gewotCS5uYW1lCQk9ICJtYWNoLWJhc3QiLAorc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBiYXN0X3BtX3N5c2NvcmVfb3BzID0gewogCS5zdXNwZW5kCT0gYmFzdF9wbV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gYmFzdF9wbV9yZXN1bWUsCiB9OwogCi1zdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgYmFzdF9wbV9zeXNkZXYgPSB7Ci0JLmNscwkJPSAmYmFzdF9wbV9zeXNjbGFzcywKLX07Ci0KIHN0YXRpYyBpbnQgc21hcnRtZWRpYV9tYXBbXSA9IHsgMCB9Owogc3RhdGljIGludCBjaGlwMF9tYXBbXSA9IHsgMSB9Owogc3RhdGljIGludCBjaGlwMV9tYXBbXSA9IHsgMiB9OwpAQCAtNjQyLDggKzYzNiw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBiYXN0X2luaXQodm9pZCkKIHsKLQlzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJmJhc3RfcG1fc3lzY2xhc3MpOwotCXN5c2Rldl9yZWdpc3RlcigmYmFzdF9wbV9zeXNkZXYpOworCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZiYXN0X3BtX3N5c2NvcmVfb3BzKTsKIAogCXMzY19pMmMwX3NldF9wbGF0ZGF0YSgmYmFzdF9pMmNfaW5mbyk7CiAJczNjX25hbmRfc2V0X3BsYXRkYXRhKCZiYXN0X25hbmRfaW5mbyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS5jCmluZGV4IDcyNTYzNmYuLjQ3MjhmOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIApAQCAtOTIsNyArOTMsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBzM2MyNDEwX3BtX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgczNjMjQxMF9wbV9yZXN1bWUodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHRtcDsKIApAQCAtMTA0LDEwICsxMDUsMTIgQEAKIAogCWlmICggbWFjaGluZV9pc19hbWxfbTU5MDAoKSApCiAJCXMzYzI0MTBfZ3Bpb19zZXRwaW4oUzNDMjQxMF9HUEYoMiksIDApOwotCi0JcmV0dXJuIDA7CiB9CiAKK3N0cnVjdCBzeXNjb3JlX29wcyBzM2MyNDEwX3BtX3N5c2NvcmVfb3BzID0geworCS5yZXN1bWUJCT0gczNjMjQxMF9wbV9yZXN1bWUsCit9OworCiBzdGF0aWMgaW50IHMzYzI0MTBfcG1fYWRkKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCiB7CiAJcG1fY3B1X3ByZXAgPSBzM2MyNDEwX3BtX3ByZXBhcmU7CkBAIC0xMTksNyArMTIyLDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfUzNDMjQxMCkKIHN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDEwX3BtX2RyaXZlciA9IHsKIAkuYWRkCQk9IHMzYzI0MTBfcG1fYWRkLAotCS5yZXN1bWUJCT0gczNjMjQxMF9wbV9yZXN1bWUsCiB9OwogCiAvKiByZWdpc3RlciBvdXJzZWx2ZXMgKi8KQEAgLTEzMyw3ICsxMzUsNiBAQAogCiBzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQxMGFfcG1fZHJpdmVyID0gewogCS5hZGQJCT0gczNjMjQxMF9wbV9hZGQsCi0JLnJlc3VtZQkJPSBzM2MyNDEwX3BtX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHMzYzI0MTBhX3BtX2RydmluaXQodm9pZCkKQEAgLTE0Nyw3ICsxNDgsNiBAQAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TM0MyNDQwKQogc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0NDBfcG1fZHJpdmVyID0gewogCS5hZGQJCT0gczNjMjQxMF9wbV9hZGQsCi0JLnJlc3VtZQkJPSBzM2MyNDEwX3BtX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHMzYzI0NDBfcG1fZHJ2aW5pdCh2b2lkKQpAQCAtMTYxLDcgKzE2MSw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0NDIpCiBzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQ0Ml9wbV9kcml2ZXIgPSB7CiAJLmFkZAkJPSBzM2MyNDEwX3BtX2FkZCwKLQkucmVzdW1lCQk9IHMzYzI0MTBfcG1fcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgczNjMjQ0Ml9wbV9kcnZpbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAuYwppbmRleCBhZGM5MGEzLi5mMWQzYmQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CkBAIC00MCw2ICs0MSw3IEBACiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CiAjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgogI2luY2x1ZGUgPHBsYXQvcGxsLmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgogCiAjaW5jbHVkZSA8cGxhdC9ncGlvLWNvcmUuaD4KICNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CkBAIC0xNjgsNiArMTcwLDkgQEAKIHsKIAlwcmludGsoIlMzQzI0MTA6IEluaXRpYWxpc2luZyBhcmNoaXRlY3R1cmVcbiIpOwogCisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnMzYzI0MTBfcG1fc3lzY29yZV9vcHMpOworCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZzM2MyNHh4X2lycV9zeXNjb3JlX29wcyk7CisKIAlyZXR1cm4gc3lzZGV2X3JlZ2lzdGVyKCZzM2MyNDEwX3N5c2Rldik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9pcnEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9pcnEuYwppbmRleCBmMzM1NWQyLi4xYTFhYTIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2lycS5jCkBAIC0yMDIsOCArMjAyLDYgQEAKIAogc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0MTJfaXJxX2RyaXZlciA9IHsKIAkuYWRkCQk9IHMzYzI0MTJfaXJxX2FkZCwKLQkuc3VzcGVuZAk9IHMzYzI0eHhfaXJxX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzM2MyNHh4X2lycV9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IHMzYzI0MTJfaXJxX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLWppdmUuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLWppdmUuYwppbmRleCA5MjNlMDFiLi44NWRjYWViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvbWFjaC1qaXZlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtaml2ZS5jCkBAIC0xNyw3ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KQEAgLTQ4Niw3ICs0ODYsNyBAQAogLyogSml2ZSBwb3dlciBtYW5hZ2VtZW50IGRldmljZSAqLwogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGppdmVfcG1fc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqc2QsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgaml2ZV9wbV9zdXNwZW5kKHZvaWQpCiB7CiAJLyogV3JpdGUgdGhlIG1hZ2ljIHZhbHVlIHUtYm9vdCB1c2VzIHRvIGNoZWNrIGZvciByZXN1bWUgaW50bwogCSAqIHRoZSBJTkZPUk0wIHJlZ2lzdGVyLCBhbmQgZW5zdXJlIElORk9STTEgaXMgc2V0IHRvIHRoZQpAQCAtNDk4LDEwICs0OTgsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGppdmVfcG1fcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpzZCkKK3N0YXRpYyB2b2lkIGppdmVfcG1fcmVzdW1lKHZvaWQpCiB7CiAJX19yYXdfd3JpdGVsKDB4MCwgUzNDMjQxMl9JTkZPUk0wKTsKLQlyZXR1cm4gMDsKIH0KIAogI2Vsc2UKQEAgLTUwOSwxNiArNTA4LDExIEBACiAjZGVmaW5lIGppdmVfcG1fcmVzdW1lIE5VTEwKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBqaXZlX3BtX3N5c2NsYXNzID0gewotCS5uYW1lCQk9ICJqaXZlLXBtIiwKK3N0YXRpYyBzdHJ1Y3Qgc3lzY29yZV9vcHMgaml2ZV9wbV9zeXNjb3JlX29wcyA9IHsKIAkuc3VzcGVuZAk9IGppdmVfcG1fc3VzcGVuZCwKIAkucmVzdW1lCQk9IGppdmVfcG1fcmVzdW1lLAogfTsKIAotc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIGppdmVfcG1fc3lzZGV2ID0gewotCS5jbHMJCT0gJmppdmVfcG1fc3lzY2xhc3MsCi19OwotCiBzdGF0aWMgdm9pZCBfX2luaXQgaml2ZV9tYXBfaW8odm9pZCkKIHsKIAlzM2MyNHh4X2luaXRfaW8oaml2ZV9pb2Rlc2MsIEFSUkFZX1NJWkUoaml2ZV9pb2Rlc2MpKTsKQEAgLTUzNiwxMCArNTMwLDkgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGppdmVfbWFjaGluZV9pbml0KHZvaWQpCiB7Ci0JLyogcmVnaXN0ZXIgc3lzdGVtIGRldmljZXMgZm9yIG1hbmFnaW5nIGxvdyBsZXZlbCBzdXNwZW5kICovCisJLyogcmVnaXN0ZXIgc3lzdGVtIGNvcmUgb3BlcmF0aW9ucyBmb3IgbWFuYWdpbmcgbG93IGxldmVsIHN1c3BlbmQgKi8KIAotCXN5c2Rldl9jbGFzc19yZWdpc3Rlcigmaml2ZV9wbV9zeXNjbGFzcyk7Ci0Jc3lzZGV2X3JlZ2lzdGVyKCZqaXZlX3BtX3N5c2Rldik7CisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJmppdmVfcG1fc3lzY29yZV9vcHMpOwogCiAJLyogd3JpdGUgb3VyIHNsZWVwIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgSU8uIFB1bGwgZG93biBhbGwgdW51c2VkCiAJICogSU8sIGVuc3VyZSB0aGF0IHdlIGhhdmUgdHVybmVkIG9mZiBhbGwgcGVyaXBoZXJhbHMgd2UgZG8gbm90CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvcG0uYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9wbS5jCmluZGV4IGE3NDE3YzQuLjc1MmIxM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9wbS5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCkBAIC04NiwxMyArODcsMjQgQEAKIAlTQVZFX0lURU0oUzNDMjQxM19HUEpTTFBDT04pLAogfTsKIAotc3RhdGljIGludCBzM2MyNDEyX3BtX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0MTJfcG1fZHJpdmVyID0geworCS5hZGQJCT0gczNjMjQxMl9wbV9hZGQsCit9OworCitzdGF0aWMgX19pbml0IGludCBzM2MyNDEyX3BtX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczNjMjQxMl9zeXNjbGFzcywgJnMzYzI0MTJfcG1fZHJpdmVyKTsKK30KKworYXJjaF9pbml0Y2FsbChzM2MyNDEyX3BtX2luaXQpOworCitzdGF0aWMgaW50IHMzYzI0MTJfcG1fc3VzcGVuZCh2b2lkKQogewogCXMzY19wbV9kb19zYXZlKHMzYzI0MTJfc2xlZXAsIEFSUkFZX1NJWkUoczNjMjQxMl9zbGVlcCkpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHMzYzI0MTJfcG1fcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBzM2MyNDEyX3BtX3Jlc3VtZSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgdG1wOwogCkBAIC0xMDIsMTggKzExNCw5IEBACiAJX19yYXdfd3JpdGVsKHRtcCwgUzNDMjQxMl9QV1JDRkcpOwogCiAJczNjX3BtX2RvX3Jlc3RvcmUoczNjMjQxMl9zbGVlcCwgQVJSQVlfU0laRShzM2MyNDEyX3NsZWVwKSk7Ci0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDEyX3BtX2RyaXZlciA9IHsKLQkuYWRkCQk9IHMzYzI0MTJfcG1fYWRkLAorc3RydWN0IHN5c2NvcmVfb3BzIHMzYzI0MTJfcG1fc3lzY29yZV9vcHMgPSB7CiAJLnN1c3BlbmQJPSBzM2MyNDEyX3BtX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzM2MyNDEyX3BtX3Jlc3VtZSwKIH07Ci0KLXN0YXRpYyBfX2luaXQgaW50IHMzYzI0MTJfcG1faW5pdCh2b2lkKQotewotCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEyX3N5c2NsYXNzLCAmczNjMjQxMl9wbV9kcml2ZXIpOwotfQotCi1hcmNoX2luaXRjYWxsKHMzYzI0MTJfcG1faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvczNjMjQxMi5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL3MzYzI0MTIuYwppbmRleCA0YzZkZjUxLi5lZjA5NThkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvczNjMjQxMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9zM2MyNDEyLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgpAQCAtMjQ0LDUgKzI0NSw4IEBACiB7CiAJcHJpbnRrKCJTM0MyNDEyOiBJbml0aWFsaXNpbmcgYXJjaGl0ZWN0dXJlXG4iKTsKIAorCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZzM2MyNDEyX3BtX3N5c2NvcmVfb3BzKTsKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmczNjMjR4eF9pcnFfc3lzY29yZV9vcHMpOworCiAJcmV0dXJuIHN5c2Rldl9yZWdpc3RlcigmczNjMjQxMl9zeXNkZXYpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDE2L2lycS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDE2L2lycS5jCmluZGV4IDc3YjM4ZjIuLjI4YWQyMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxNi9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTYvaXJxLmMKQEAgLTIzNiw4ICsyMzYsNiBAQAogCiBzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQxNl9pcnFfZHJpdmVyID0gewogCS5hZGQJCT0gczNjMjQxNl9pcnFfYWRkLAotCS5zdXNwZW5kCT0gczNjMjR4eF9pcnFfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHMzYzI0eHhfaXJxX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHMzYzI0MTZfaXJxX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxNi9wbS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDE2L3BtLmMKaW5kZXggNGEwNDIwNS4uNDFkYjJiMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDE2L3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDE2L3BtLmMKQEAgLTExLDYgKzExLDcgQEAKICovCiAKICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgpAQCAtNTUsMjUgKzU2LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzM2MyNDE2X3BtX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHMzYzI0MTZfcG1fcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCi17Ci0JLyogdW5zZXQgdGhlIHJldHVybi1mcm9tLXNsZWVwIGFtZCBpbmZvcm0gZmxhZ3MgKi8KLQlfX3Jhd193cml0ZWwoMHgwLCBTM0MyNDQzX1BXUk1PREUpOwotCV9fcmF3X3dyaXRlbCgweDAsIFMzQzI0MTJfSU5GT1JNMCk7Ci0JX19yYXdfd3JpdGVsKDB4MCwgUzNDMjQxMl9JTkZPUk0xKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQxNl9wbV9kcml2ZXIgPSB7CiAJLmFkZAkJPSBzM2MyNDE2X3BtX2FkZCwKLQkuc3VzcGVuZAk9IHMzYzI0MTZfcG1fc3VzcGVuZCwKLQkucmVzdW1lCQk9IHMzYzI0MTZfcG1fcmVzdW1lLAogfTsKIAogc3RhdGljIF9faW5pdCBpbnQgczNjMjQxNl9wbV9pbml0KHZvaWQpCkBAIC04MiwzICs2NiwxNiBAQAogfQogCiBhcmNoX2luaXRjYWxsKHMzYzI0MTZfcG1faW5pdCk7CisKKworc3RhdGljIHZvaWQgczNjMjQxNl9wbV9yZXN1bWUodm9pZCkKK3sKKwkvKiB1bnNldCB0aGUgcmV0dXJuLWZyb20tc2xlZXAgYW1kIGluZm9ybSBmbGFncyAqLworCV9fcmF3X3dyaXRlbCgweDAsIFMzQzI0NDNfUFdSTU9ERSk7CisJX19yYXdfd3JpdGVsKDB4MCwgUzNDMjQxMl9JTkZPUk0wKTsKKwlfX3Jhd193cml0ZWwoMHgwLCBTM0MyNDEyX0lORk9STTEpOworfQorCitzdHJ1Y3Qgc3lzY29yZV9vcHMgczNjMjQxNl9wbV9zeXNjb3JlX29wcyA9IHsKKwkucmVzdW1lCQk9IHMzYzI0MTZfcG1fcmVzdW1lLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxNi9zM2MyNDE2LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTYvczNjMjQxNi5jCmluZGV4IGJhN2ZkODcuLjQ5NGNlOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxNi9zM2MyNDE2LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDE2L3MzYzI0MTYuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCkBAIC01NCw2ICs1NSw3IEBACiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KICNpbmNsdWRlIDxwbGF0L3NkaGNpLmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgogCiAjaW5jbHVkZSA8cGxhdC9paWMtY29yZS5oPgogI2luY2x1ZGUgPHBsYXQvZmItY29yZS5oPgpAQCAtOTUsNiArOTcsOSBAQAogCiAJczNjX2ZiX3NldG5hbWUoInMzYzI0NDMtZmIiKTsKIAorCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZzM2MyNDE2X3BtX3N5c2NvcmVfb3BzKTsKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmczNjMjR4eF9pcnFfc3lzY29yZV9vcHMpOworCiAJcmV0dXJuIHN5c2Rldl9yZWdpc3RlcigmczNjMjQxNl9zeXNkZXYpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1ndGEwMi5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtZ3RhMDIuYwppbmRleCAwZGIyNDExLi43MTY2NjIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1ndGEwMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLWd0YTAyLmMKQEAgLTQwOSw2ICs0MDksMTAgQEAKIAkubnVtX3Jlc291cmNlcwk9IDAsCiB9OwogCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBndGEwMl9kZmJtY3MzMjBfZGV2aWNlID0geworCS5uYW1lID0gImRmYm1jczMyMCIsCit9OworCiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGd0YTAyX2kyY19kZXZzW10gX19pbml0ZGF0YSA9IHsKIAl7CiAJCUkyQ19CT0FSRF9JTkZPKCJwY2Y1MDYzMyIsIDB4NzMpLApAQCAtNTIzLDYgKzUyNyw3IEBACiAJJnMzY19kZXZpY2VfaWlzLAogCSZzYW1zdW5nX2Fzb2NfZG1hLAogCSZzM2NfZGV2aWNlX2kyYzAsCisJJmd0YTAyX2RmYm1jczMyMF9kZXZpY2UsCiAJJmd0YTAyX2J1dHRvbnNfZGV2aWNlLAogCSZzM2NfZGV2aWNlX2FkYywKIAkmczNjX2RldmljZV90cywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW9zaXJpcy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtb3NpcmlzLmMKaW5kZXggMTRkYzY3OC4uZDg4NTM2MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtb3NpcmlzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtb3NpcmlzLmMKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KQEAgLTI4NCw3ICsyODQsNyBAQAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIHVuc2lnbmVkIGNoYXIgcG1fb3NpcmlzX2N0cmwwOwogCi1zdGF0aWMgaW50IG9zaXJpc19wbV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpzZCwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBvc2lyaXNfcG1fc3VzcGVuZCh2b2lkKQogewogCXVuc2lnbmVkIGludCB0bXA7CiAKQEAgLTMwNCw3ICszMDQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG9zaXJpc19wbV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKnNkKQorc3RhdGljIHZvaWQgb3NpcmlzX3BtX3Jlc3VtZSh2b2lkKQogewogCWlmIChwbV9vc2lyaXNfY3RybDAgJiBPU0lSSVNfQ1RSTDBfRklYOCkKIAkJX19yYXdfd3JpdGViKE9TSVJJU19DVFJMMV9GSVg4LCBPU0lSSVNfVkFfQ1RSTDEpOwpAQCAtMzEyLDggKzMxMiw2IEBACiAJX19yYXdfd3JpdGViKHBtX29zaXJpc19jdHJsMCwgT1NJUklTX1ZBX0NUUkwwKTsKIAogCXMzY19ncGlvX2NmZ3BpbihTM0MyNDEwX0dQQSgyMSksIFMzQzI0MTBfR1BBMjFfblJTVE9VVCk7Ci0KLQlyZXR1cm4gMDsKIH0KIAogI2Vsc2UKQEAgLTMyMSwxNiArMzE5LDExIEBACiAjZGVmaW5lIG9zaXJpc19wbV9yZXN1bWUgTlVMTAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIG9zaXJpc19wbV9zeXNjbGFzcyA9IHsKLQkubmFtZQkJPSAibWFjaC1vc2lyaXMiLAorc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBvc2lyaXNfcG1fc3lzY29yZV9vcHMgPSB7CiAJLnN1c3BlbmQJPSBvc2lyaXNfcG1fc3VzcGVuZCwKIAkucmVzdW1lCQk9IG9zaXJpc19wbV9yZXN1bWUsCiB9OwogCi1zdGF0aWMgc3RydWN0IHN5c19kZXZpY2Ugb3NpcmlzX3BtX3N5c2RldiA9IHsKLQkuY2xzCQk9ICZvc2lyaXNfcG1fc3lzY2xhc3MsCi19OwotCiAvKiBMaW5rIGZvciBEVlMgZHJpdmVyIHRvIFRQUzY1MDExICovCiAKIHN0YXRpYyB2b2lkIG9zaXJpc190cHNfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC00MzksOCArNDMyLDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9zaXJpc19pbml0KHZvaWQpCiB7Ci0Jc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZvc2lyaXNfcG1fc3lzY2xhc3MpOwotCXN5c2Rldl9yZWdpc3Rlcigmb3NpcmlzX3BtX3N5c2Rldik7CisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJm9zaXJpc19wbV9zeXNjb3JlX29wcyk7CiAKIAlzM2NfaTJjMF9zZXRfcGxhdGRhdGEoTlVMTCk7CiAJczNjX25hbmRfc2V0X3BsYXRkYXRhKCZvc2lyaXNfbmFuZF9pbmZvKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9zM2MyNDQwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvczNjMjQ0MC5jCmluZGV4IGY3NjYzZjcuLmNlOTlmZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9zM2MyNDQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL3MzYzI0NDAuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KQEAgLTMzLDYgKzM0LDcgQEAKICNpbmNsdWRlIDxwbGF0L2RldnMuaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogI2luY2x1ZGUgPHBsYXQvczNjMjQ0eC5oPgorI2luY2x1ZGUgPHBsYXQvcG0uaD4KIAogI2luY2x1ZGUgPHBsYXQvZ3Bpby1jb3JlLmg+CiAjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgpAQCAtNTEsNiArNTMsMTIgQEAKIAlzM2NfZGV2aWNlX3dkdC5yZXNvdXJjZVsxXS5zdGFydCA9IElSUV9TM0MyNDQwX1dEVDsKIAlzM2NfZGV2aWNlX3dkdC5yZXNvdXJjZVsxXS5lbmQgICA9IElSUV9TM0MyNDQwX1dEVDsKIAorCS8qIHJlZ2lzdGVyIHN1c3BlbmQvcmVzdW1lIGhhbmRsZXJzICovCisKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmczNjMjQxMF9wbV9zeXNjb3JlX29wcyk7CisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnMzYzI0NHhfcG1fc3lzY29yZV9vcHMpOworCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZzM2MyNHh4X2lycV9zeXNjb3JlX29wcyk7CisKIAkvKiByZWdpc3RlciBvdXIgc3lzdGVtIGRldmljZSBmb3IgZXZlcnl0aGluZyBlbHNlICovCiAKIAlyZXR1cm4gc3lzZGV2X3JlZ2lzdGVyKCZzM2MyNDQwX3N5c2Rldik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvczNjMjQ0Mi5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL3MzYzI0NDIuYwppbmRleCBlY2Y4MTM1Li42MjI0YmFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvczNjMjQ0Mi5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9zM2MyNDQyLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CkBAIC00NSw2ICs0Niw3IEBACiAjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9zM2MyNDR4Lmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgogCiAjaW5jbHVkZSA8cGxhdC9ncGlvLWNvcmUuaD4KICNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CkBAIC0xNjcsNiArMTY5LDEwIEBACiB7CiAJcHJpbnRrKCJTM0MyNDQyOiBJbml0aWFsaXNpbmcgYXJjaGl0ZWN0dXJlXG4iKTsKIAorCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZzM2MyNDEwX3BtX3N5c2NvcmVfb3BzKTsKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmczNjMjQ0eF9wbV9zeXNjb3JlX29wcyk7CisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnMzYzI0eHhfaXJxX3N5c2NvcmVfb3BzKTsKKwogCXJldHVybiBzeXNkZXZfcmVnaXN0ZXIoJnMzYzI0NDJfc3lzZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL3MzYzI0NHgtaXJxLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvczNjMjQ0eC1pcnEuYwppbmRleCBkZTA3YzJmLi5jNjNlOGYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvczNjMjQ0eC1pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvczNjMjQ0eC1pcnEuYwpAQCAtMTE2LDggKzExNiw2IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDQwX2lycV9kcml2ZXIgPSB7CiAJLmFkZAkJPSBzM2MyNDR4X2lycV9hZGQsCi0JLnN1c3BlbmQJPSBzM2MyNHh4X2lycV9zdXNwZW5kLAotCS5yZXN1bWUJCT0gczNjMjR4eF9pcnFfcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBzM2MyNDQwX2lycV9pbml0KHZvaWQpCkBAIC0xMjksOCArMTI3LDYgQEAKIAogc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0NDJfaXJxX2RyaXZlciA9IHsKIAkuYWRkCQk9IHMzYzI0NHhfaXJxX2FkZCwKLQkuc3VzcGVuZAk9IHMzYzI0eHhfaXJxX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzM2MyNHh4X2lycV9yZXN1bWUsCiB9OwogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9zM2MyNDR4LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvczNjMjQ0eC5jCmluZGV4IDkwYzE3MDcuLjdlOGEyM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9zM2MyNDR4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL3MzYzI0NHguYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCkBAIC0xMzQsNDUgKzEzNSwxNCBAQAogCXMzYzI0MTBfYmFzZWNsa19hZGQoKTsKIH0KIAotI2lmZGVmIENPTkZJR19QTQotCi1zdGF0aWMgc3RydWN0IHNsZWVwX3NhdmUgczNjMjQ0eF9zbGVlcFtdID0gewotCVNBVkVfSVRFTShTM0MyNDQwX0RTQzApLAotCVNBVkVfSVRFTShTM0MyNDQwX0RTQzEpLAotCVNBVkVfSVRFTShTM0MyNDQwX0dQSkRBVCksCi0JU0FWRV9JVEVNKFMzQzI0NDBfR1BKQ09OKSwKLQlTQVZFX0lURU0oUzNDMjQ0MF9HUEpVUCkKLX07Ci0KLXN0YXRpYyBpbnQgczNjMjQ0eF9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlzM2NfcG1fZG9fc2F2ZShzM2MyNDR4X3NsZWVwLCBBUlJBWV9TSVpFKHMzYzI0NHhfc2xlZXApKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzM2MyNDR4X3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQotewotCXMzY19wbV9kb19yZXN0b3JlKHMzYzI0NHhfc2xlZXAsIEFSUkFZX1NJWkUoczNjMjQ0eF9zbGVlcCkpOwotCXJldHVybiAwOwotfQotCi0jZWxzZQotI2RlZmluZSBzM2MyNDR4X3N1c3BlbmQgTlVMTAotI2RlZmluZSBzM2MyNDR4X3Jlc3VtZSAgTlVMTAotI2VuZGlmCi0KIC8qIFNpbmNlIHRoZSBTM0MyNDQyIGFuZCBTM0MyNDQwIHNoYXJlICBpdGVtcywgcHV0IGJvdGggc3lzY2xhc3NlcyBoZXJlICovCiAKIHN0cnVjdCBzeXNkZXZfY2xhc3MgczNjMjQ0MF9zeXNjbGFzcyA9IHsKIAkubmFtZQkJPSAiczNjMjQ0MC1jb3JlIiwKLQkuc3VzcGVuZAk9IHMzYzI0NHhfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHMzYzI0NHhfcmVzdW1lCiB9OwogCiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHMzYzI0NDJfc3lzY2xhc3MgPSB7CiAJLm5hbWUJCT0gInMzYzI0NDItY29yZSIsCi0JLnN1c3BlbmQJPSBzM2MyNDR4X3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzM2MyNDR4X3Jlc3VtZQogfTsKIAogLyogbmVlZCB0byByZWdpc3RlciBjbGFzcyBiZWZvcmUgd2UgYWN0dWFsbHkgcmVnaXN0ZXIgdGhlIGRldmljZSwgYW5kCkBAIC0xOTQsMyArMTY0LDMzIEBACiB9CiAKIGNvcmVfaW5pdGNhbGwoczNjMjQ0Ml9jb3JlX2luaXQpOworCisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBzdHJ1Y3Qgc2xlZXBfc2F2ZSBzM2MyNDR4X3NsZWVwW10gPSB7CisJU0FWRV9JVEVNKFMzQzI0NDBfRFNDMCksCisJU0FWRV9JVEVNKFMzQzI0NDBfRFNDMSksCisJU0FWRV9JVEVNKFMzQzI0NDBfR1BKREFUKSwKKwlTQVZFX0lURU0oUzNDMjQ0MF9HUEpDT04pLAorCVNBVkVfSVRFTShTM0MyNDQwX0dQSlVQKQorfTsKKworc3RhdGljIGludCBzM2MyNDR4X3N1c3BlbmQodm9pZCkKK3sKKwlzM2NfcG1fZG9fc2F2ZShzM2MyNDR4X3NsZWVwLCBBUlJBWV9TSVpFKHMzYzI0NHhfc2xlZXApKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgczNjMjQ0eF9yZXN1bWUodm9pZCkKK3sKKwlzM2NfcG1fZG9fcmVzdG9yZShzM2MyNDR4X3NsZWVwLCBBUlJBWV9TSVpFKHMzYzI0NHhfc2xlZXApKTsKK30KKyNlbHNlCisjZGVmaW5lIHMzYzI0NHhfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHMzYzI0NHhfcmVzdW1lICBOVUxMCisjZW5kaWYKKworc3RydWN0IHN5c2NvcmVfb3BzIHMzYzI0NHhfcG1fc3lzY29yZV9vcHMgPSB7CisJLnN1c3BlbmQJPSBzM2MyNDR4X3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzM2MyNDR4X3Jlc3VtZSwKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaXJxLXBtLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaXJxLXBtLmMKaW5kZXggZGExYmVjNi4uOGJlYzYxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2lycS1wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pcnEtcG0uYwpAQCAtMTMsNyArMTMsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CkBAIC01NCw3ICs1NCw3IEBACiAKIHN0YXRpYyB1MzIgaXJxX3VhcnRfbWFza1tDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFNdOwogCi1zdGF0aWMgaW50IHMzYzY0eHhfaXJxX3BtX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzM2M2NHh4X2lycV9wbV9zdXNwZW5kKHZvaWQpCiB7CiAJc3RydWN0IGlycV9ncnBfc2F2ZSAqZ3JwID0gZWludF9ncnBfc2F2ZTsKIAlpbnQgaTsKQEAgLTc1LDcgKzc1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzM2M2NHh4X2lycV9wbV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHMzYzY0eHhfaXJxX3BtX3Jlc3VtZSh2b2lkKQogewogCXN0cnVjdCBpcnFfZ3JwX3NhdmUgKmdycCA9IGVpbnRfZ3JwX3NhdmU7CiAJaW50IGk7CkBAIC05NCwxOCArOTQsMTggQEAKIAl9CiAKIAlTM0NfUE1EQkcoIiVzOiBJUlEgY29uZmlndXJhdGlvbiByZXN0b3JlZFxuIiwgX19mdW5jX18pOwotCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjNjR4eF9pcnFfZHJpdmVyID0geworc3RydWN0IHN5c2NvcmVfb3BzIHMzYzY0eHhfaXJxX3N5c2NvcmVfb3BzID0gewogCS5zdXNwZW5kID0gczNjNjR4eF9pcnFfcG1fc3VzcGVuZCwKIAkucmVzdW1lCSA9IHMzYzY0eHhfaXJxX3BtX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IHMzYzY0eHhfaXJxX3BtX2luaXQodm9pZCkKK3N0YXRpYyBfX2luaXQgaW50IHMzYzY0eHhfc3lzY29yZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzY0eHhfc3lzY2xhc3MsICZzM2M2NHh4X2lycV9kcml2ZXIpOworCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZzM2M2NHh4X2lycV9zeXNjb3JlX29wcyk7CisKKwlyZXR1cm4gMDsKIH0KIAotYXJjaF9pbml0Y2FsbChzM2M2NHh4X2lycV9wbV9pbml0KTsKLQorY29yZV9pbml0Y2FsbChzM2M2NHh4X3N5c2NvcmVfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvcG0uYyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9wbS5jCmluZGV4IDU0OWQ3OTIuLjI0ZmViYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9wbS5jCkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CkBAIC0xNDAsNyArMTQxLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczVwdjIxMF9wbV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzNXB2MjEwX3BtX2RyaXZlciA9IHsKKwkuYWRkCQk9IHM1cHYyMTBfcG1fYWRkLAorfTsKKworc3RhdGljIF9faW5pdCBpbnQgczVwdjIxMF9wbV9kcnZpbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnM1cHYyMTBfc3lzY2xhc3MsICZzNXB2MjEwX3BtX2RyaXZlcik7Cit9CithcmNoX2luaXRjYWxsKHM1cHYyMTBfcG1fZHJ2aW5pdCk7CisKK3N0YXRpYyB2b2lkIHM1cHYyMTBfcG1fcmVzdW1lKHZvaWQpCiB7CiAJdTMyIHRtcDsKIApAQCAtMTUwLDE3ICsxNjEsMTUgQEAKIAlfX3Jhd193cml0ZWwodG1wICwgUzVQX09USEVSUyk7CiAKIAlzM2NfcG1fZG9fcmVzdG9yZV9jb3JlKHM1cHYyMTBfY29yZV9zYXZlLCBBUlJBWV9TSVpFKHM1cHYyMTBfY29yZV9zYXZlKSk7Ci0KLQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHM1cHYyMTBfcG1fZHJpdmVyID0gewotCS5hZGQJCT0gczVwdjIxMF9wbV9hZGQsCitzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIHM1cHYyMTBfcG1fc3lzY29yZV9vcHMgPSB7CiAJLnJlc3VtZQkJPSBzNXB2MjEwX3BtX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyBfX2luaXQgaW50IHM1cHYyMTBfcG1fZHJ2aW5pdCh2b2lkKQorc3RhdGljIF9faW5pdCBpbnQgczVwdjIxMF9wbV9zeXNjb3JlX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczVwdjIxMF9zeXNjbGFzcywgJnM1cHYyMTBfcG1fZHJpdmVyKTsKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmczVwdjIxMF9wbV9zeXNjb3JlX29wcyk7CisJcmV0dXJuIDA7CiB9Ci1hcmNoX2luaXRjYWxsKHM1cHYyMTBfcG1fZHJ2aW5pdCk7CithcmNoX2luaXRjYWxsKHM1cHYyMTBfcG1fc3lzY29yZV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaXJxLmMKaW5kZXggNDIzZGRiMy4uZGZiZjgyNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaXJxLmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgpAQCAtMjM0LDcgKzIzNCw3IEBACiAJdW5zaWduZWQgaW50CWljY3I7CiB9IHNhMTEwMGlycV9zdGF0ZTsKIAotc3RhdGljIGludCBzYTExMDBpcnFfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNhMTEwMGlycV9zdXNwZW5kKHZvaWQpCiB7CiAJc3RydWN0IHNhMTEwMGlycV9zdGF0ZSAqc3QgPSAmc2ExMTAwaXJxX3N0YXRlOwogCkBAIC0yNjQsNyArMjY0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYTExMDBpcnFfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBzYTExMDBpcnFfcmVzdW1lKHZvaWQpCiB7CiAJc3RydWN0IHNhMTEwMGlycV9zdGF0ZSAqc3QgPSAmc2ExMTAwaXJxX3N0YXRlOwogCkBAIC0yNzcsMjQgKzI3NywxNyBAQAogCiAJCUlDTVIgPSBzdC0+aWNtcjsKIAl9Ci0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHNhMTEwMGlycV9zeXNjbGFzcyA9IHsKLQkubmFtZQkJPSAic2ExMXgwLWlycSIsCitzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIHNhMTEwMGlycV9zeXNjb3JlX29wcyA9IHsKIAkuc3VzcGVuZAk9IHNhMTEwMGlycV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc2ExMTAwaXJxX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBzYTExMDBpcnFfZGV2aWNlID0gewotCS5pZAkJPSAwLAotCS5jbHMJCT0gJnNhMTEwMGlycV9zeXNjbGFzcywKLX07Ci0KIHN0YXRpYyBpbnQgX19pbml0IHNhMTEwMGlycV9pbml0X2RldmljZWZzKHZvaWQpCiB7Ci0Jc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZzYTExMDBpcnFfc3lzY2xhc3MpOwotCXJldHVybiBzeXNkZXZfcmVnaXN0ZXIoJnNhMTEwMGlycV9kZXZpY2UpOworCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZzYTExMDBpcnFfc3lzY29yZV9vcHMpOworCXJldHVybiAwOwogfQogCiBkZXZpY2VfaW5pdGNhbGwoc2ExMTAwaXJxX2luaXRfZGV2aWNlZnMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wbV9ydW50aW1lLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3BtX3J1bnRpbWUuYwppbmRleCA5NDkxMmQzLi4yZDFiNjdhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3BtX3J1bnRpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3BtX3J1bnRpbWUuYwpAQCAtMTgsMTUyICsxOCw0MSBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L3NoX2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCi0jZGVmaW5lIEJJVF9PTkNFIDAKLSNkZWZpbmUgQklUX0FDVElWRSAxCi0jZGVmaW5lIEJJVF9DTEtfRU5BQkxFRCAyCiAKLXN0cnVjdCBwbV9ydW50aW1lX2RhdGEgewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGNsayAqY2xrOwotfTsKLQotc3RhdGljIHZvaWQgX19kZXZyZXNfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnJlcykKLXsKLQlzdHJ1Y3QgcG1fcnVudGltZV9kYXRhICpwcmQgPSByZXM7Ci0KLQlkZXZfZGJnKGRldiwgIl9fZGV2cmVzX3JlbGVhc2UoKVxuIik7Ci0KLQlpZiAodGVzdF9iaXQoQklUX0NMS19FTkFCTEVELCAmcHJkLT5mbGFncykpCi0JCWNsa19kaXNhYmxlKHByZC0+Y2xrKTsKLQotCWlmICh0ZXN0X2JpdChCSVRfQUNUSVZFLCAmcHJkLT5mbGFncykpCi0JCWNsa19wdXQocHJkLT5jbGspOwotfQotCi1zdGF0aWMgc3RydWN0IHBtX3J1bnRpbWVfZGF0YSAqX190b19wcmQoc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBkZXZyZXNfZmluZChkZXYsIF9fZGV2cmVzX3JlbGVhc2UsIE5VTEwsIE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZCBwbGF0Zm9ybV9wbV9ydW50aW1lX2luaXQoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSAgICAgc3RydWN0IHBtX3J1bnRpbWVfZGF0YSAqcHJkKQotewotCWlmIChwcmQgJiYgIXRlc3RfYW5kX3NldF9iaXQoQklUX09OQ0UsICZwcmQtPmZsYWdzKSkgewotCQlwcmQtPmNsayA9IGNsa19nZXQoZGV2LCBOVUxMKTsKLQkJaWYgKCFJU19FUlIocHJkLT5jbGspKSB7Ci0JCQlzZXRfYml0KEJJVF9BQ1RJVkUsICZwcmQtPmZsYWdzKTsKLQkJCWRldl9pbmZvKGRldiwgImNsb2NrcyBtYW5hZ2VkIGJ5IHJ1bnRpbWUgcG1cbiIpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBwbGF0Zm9ybV9wbV9ydW50aW1lX2J1ZyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgIHN0cnVjdCBwbV9ydW50aW1lX2RhdGEgKnByZCkKLXsKLQlpZiAocHJkICYmICF0ZXN0X2FuZF9zZXRfYml0KEJJVF9PTkNFLCAmcHJkLT5mbGFncykpCi0JCWRldl9lcnIoZGV2LCAicnVudGltZSBwbSBzdXNwZW5kIGJlZm9yZSByZXN1bWVcbiIpOwotfQotCi1pbnQgcGxhdGZvcm1fcG1fcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcG1fcnVudGltZV9kYXRhICpwcmQgPSBfX3RvX3ByZChkZXYpOwotCi0JZGV2X2RiZyhkZXYsICJwbGF0Zm9ybV9wbV9ydW50aW1lX3N1c3BlbmQoKVxuIik7Ci0KLQlwbGF0Zm9ybV9wbV9ydW50aW1lX2J1ZyhkZXYsIHByZCk7Ci0KLQlpZiAocHJkICYmIHRlc3RfYml0KEJJVF9BQ1RJVkUsICZwcmQtPmZsYWdzKSkgewotCQljbGtfZGlzYWJsZShwcmQtPmNsayk7Ci0JCWNsZWFyX2JpdChCSVRfQ0xLX0VOQUJMRUQsICZwcmQtPmZsYWdzKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHBsYXRmb3JtX3BtX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcG1fcnVudGltZV9kYXRhICpwcmQgPSBfX3RvX3ByZChkZXYpOwotCi0JZGV2X2RiZyhkZXYsICJwbGF0Zm9ybV9wbV9ydW50aW1lX3Jlc3VtZSgpXG4iKTsKLQotCXBsYXRmb3JtX3BtX3J1bnRpbWVfaW5pdChkZXYsIHByZCk7Ci0KLQlpZiAocHJkICYmIHRlc3RfYml0KEJJVF9BQ1RJVkUsICZwcmQtPmZsYWdzKSkgewotCQljbGtfZW5hYmxlKHByZC0+Y2xrKTsKLQkJc2V0X2JpdChCSVRfQ0xLX0VOQUJMRUQsICZwcmQtPmZsYWdzKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHBsYXRmb3JtX3BtX3J1bnRpbWVfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGRlZmF1bHRfcGxhdGZvcm1fcnVudGltZV9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAkvKiBzdXNwZW5kIHN5bmNocm9ub3VzbHkgdG8gZGlzYWJsZSBjbG9ja3MgaW1tZWRpYXRlbHkgKi8KIAlyZXR1cm4gcG1fcnVudGltZV9zdXNwZW5kKGRldik7CiB9CiAKLXN0YXRpYyBpbnQgcGxhdGZvcm1fYnVzX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRhdGE7Ci0Jc3RydWN0IHBtX3J1bnRpbWVfZGF0YSAqcHJkOworc3RhdGljIHN0cnVjdCBkZXZfcG93ZXJfZG9tYWluIGRlZmF1bHRfcG93ZXJfZG9tYWluID0geworCS5vcHMgPSB7CisJCS5ydW50aW1lX3N1c3BlbmQgPSBwbV9ydW50aW1lX2Nsa19zdXNwZW5kLAorCQkucnVudGltZV9yZXN1bWUgPSBwbV9ydW50aW1lX2Nsa19yZXN1bWUsCisJCS5ydW50aW1lX2lkbGUgPSBkZWZhdWx0X3BsYXRmb3JtX3J1bnRpbWVfaWRsZSwKKwkJVVNFX1BMQVRGT1JNX1BNX1NMRUVQX09QUworCX0sCit9OwogCi0JZGV2X2RiZyhkZXYsICJwbGF0Zm9ybV9idXNfbm90aWZ5KCkgJWxkICFcbiIsIGFjdGlvbik7CisjZGVmaW5lIERFRkFVTFRfUFdSX0RPTUFJTl9QVFIJKCZkZWZhdWx0X3Bvd2VyX2RvbWFpbikKIAotCWlmIChhY3Rpb24gPT0gQlVTX05PVElGWV9CSU5EX0RSSVZFUikgewotCQlwcmQgPSBkZXZyZXNfYWxsb2MoX19kZXZyZXNfcmVsZWFzZSwgc2l6ZW9mKCpwcmQpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKHByZCkKLQkJCWRldnJlc19hZGQoZGV2LCBwcmQpOwotCQllbHNlCi0JCQlkZXZfZXJyKGRldiwgInVuYWJsZSB0byBhbGxvYyBtZW1vcnkgZm9yIHJ1bnRpbWUgcG1cbiIpOwotCX0KKyNlbHNlCiAKLQlyZXR1cm4gMDsKLX0KLQotI2Vsc2UgLyogQ09ORklHX1BNX1JVTlRJTUUgKi8KLQotc3RhdGljIGludCBwbGF0Zm9ybV9idXNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gZGF0YTsKLQlzdHJ1Y3QgY2xrICpjbGs7Ci0KLQlkZXZfZGJnKGRldiwgInBsYXRmb3JtX2J1c19ub3RpZnkoKSAlbGQgIVxuIiwgYWN0aW9uKTsKLQotCXN3aXRjaCAoYWN0aW9uKSB7Ci0JY2FzZSBCVVNfTk9USUZZX0JJTkRfRFJJVkVSOgotCQljbGsgPSBjbGtfZ2V0KGRldiwgTlVMTCk7Ci0JCWlmICghSVNfRVJSKGNsaykpIHsKLQkJCWNsa19lbmFibGUoY2xrKTsKLQkJCWNsa19wdXQoY2xrKTsKLQkJCWRldl9pbmZvKGRldiwgInJ1bnRpbWUgcG0gZGlzYWJsZWQsIGNsb2NrIGZvcmNlZCBvblxuIik7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBCVVNfTk9USUZZX1VOQk9VTkRfRFJJVkVSOgotCQljbGsgPSBjbGtfZ2V0KGRldiwgTlVMTCk7Ci0JCWlmICghSVNfRVJSKGNsaykpIHsKLQkJCWNsa19kaXNhYmxlKGNsayk7Ci0JCQljbGtfcHV0KGNsayk7Ci0JCQlkZXZfaW5mbyhkZXYsICJydW50aW1lIHBtIGRpc2FibGVkLCBjbG9jayBmb3JjZWQgb2ZmXG4iKTsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KKyNkZWZpbmUgREVGQVVMVF9QV1JfRE9NQUlOX1BUUglOVUxMCiAKICNlbmRpZiAvKiBDT05GSUdfUE1fUlVOVElNRSAqLwogCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBsYXRmb3JtX2J1c19ub3RpZmllciA9IHsKLQkubm90aWZpZXJfY2FsbCA9IHBsYXRmb3JtX2J1c19ub3RpZnkKK3N0YXRpYyBzdHJ1Y3QgcG1fY2xrX25vdGlmaWVyX2Jsb2NrIHBsYXRmb3JtX2J1c19ub3RpZmllciA9IHsKKwkucHdyX2RvbWFpbiA9IERFRkFVTFRfUFdSX0RPTUFJTl9QVFIsCisJLmNvbl9pZHMgPSB7IE5VTEwsIH0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzaF9wbV9ydW50aW1lX2luaXQodm9pZCkKIHsKLQlidXNfcmVnaXN0ZXJfbm90aWZpZXIoJnBsYXRmb3JtX2J1c190eXBlLCAmcGxhdGZvcm1fYnVzX25vdGlmaWVyKTsKKwlwbV9ydW50aW1lX2Nsa19hZGRfbm90aWZpZXIoJnBsYXRmb3JtX2J1c190eXBlLCAmcGxhdGZvcm1fYnVzX25vdGlmaWVyKTsKIAlyZXR1cm4gMDsKIH0KIGNvcmVfaW5pdGNhbGwoc2hfcG1fcnVudGltZV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2JhcnJpZXJzLmggYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9iYXJyaWVycy5oCmluZGV4IGNjMTE1MTcuLjQyNWI0MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2JhcnJpZXJzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvYmFycmllcnMuaApAQCAtMjMsNyArMjMsNyBAQAogCiAjaW5jbHVkZSA8YXNtL291dGVyY2FjaGUuaD4KIAotI2RlZmluZSBybWIoKQkJZG1iKCkKKyNkZWZpbmUgcm1iKCkJCWRzYigpCiAjZGVmaW5lIHdtYigpCQlkbyB7IGRzYigpOyBvdXRlcl9zeW5jKCk7IH0gd2hpbGUgKDApCiAjZGVmaW5lIG1iKCkJCXdtYigpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLmMgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC5jCmluZGV4IGFmOTEzNzQuLjZlMTkwN2ZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLmMKQEAgLTE3OCwxNiArMTc4LDE1IEBACiAJCS5pcnEJCT0gTk9NQURJS19HUElPX1RPX0lSUSgyMTcpLAogCQkucGxhdGZvcm1fZGF0YSAgPSAmbW9wNTAwX3RjMzU4OTJfZGF0YSwKIAl9LAotfTsKLQotLyogSTJDMCBkZXZpY2VzIG9ubHkgYXZhaWxhYmxlIHByaW9yIHRvIEhSRUZ2NjAgKi8KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBtb3A1MDBfaTJjMF9vbGRfZGV2aWNlc1tdID0geworCS8qIEkyQzAgZGV2aWNlcyBvbmx5IGF2YWlsYWJsZSBwcmlvciB0byBIUkVGdjYwICovCiAJewogCQlJMkNfQk9BUkRfSU5GTygidHBzNjEwNTIiLCAweDMzKSwKIAkJLnBsYXRmb3JtX2RhdGEgID0gJm1vcDUwMF90cHM2MTA1Ml9kYXRhLAogCX0sCiB9OwogCisjZGVmaW5lIE5VTV9QUkVfVjYwX0kyQzBfREVWSUNFUyAxCisKIHN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBtb3A1MDBfaTJjMl9kZXZpY2VzW10gPSB7CiAJewogCQkvKiBscDU1MjEgTEVEIGRyaXZlciwgMXN0IGRldmljZSAqLwpAQCAtNDI1LDYgKzQyNCw4IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBtb3A1MDBfaW5pdF9tYWNoaW5lKHZvaWQpCiB7CisJaW50IGkyYzBfZGV2czsKKwogCS8qCiAJICogVGhlIEhSRUZ2NjAgYm9hcmQgcmVtb3ZlZCBhIEdQSU8gZXhwYW5kZXIgYW5kIHJvdXRlZAogCSAqIGFsbCB0aGVzZSBHUElPIHBpbnMgdG8gdGhlIGludGVybmFsIEdQSU8gY29udHJvbGxlcgpAQCAtNDQ4LDExICs0NDksMTEgQEAKIAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYWI4NTAwX2RldmljZSk7CiAKLQlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBtb3A1MDBfaTJjMF9kZXZpY2VzLAotCQkJCUFSUkFZX1NJWkUobW9wNTAwX2kyYzBfZGV2aWNlcykpOwotCWlmICghbWFjaGluZV9pc19ocmVmdjYwKCkpCi0JCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIG1vcDUwMF9pMmMwX29sZF9kZXZpY2VzLAotCQkJCQlBUlJBWV9TSVpFKG1vcDUwMF9pMmMwX29sZF9kZXZpY2VzKSk7CisJaTJjMF9kZXZzID0gQVJSQVlfU0laRShtb3A1MDBfaTJjMF9kZXZpY2VzKTsKKwlpZiAobWFjaGluZV9pc19ocmVmdjYwKCkpCisJCWkyYzBfZGV2cyAtPSBOVU1fUFJFX1Y2MF9JMkMwX0RFVklDRVM7CisKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBtb3A1MDBfaTJjMF9kZXZpY2VzLCBpMmMwX2RldnMpOwogCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDIsIG1vcDUwMF9pMmMyX2RldmljZXMsCiAJCQkJQVJSQVlfU0laRShtb3A1MDBfaTJjMl9kZXZpY2VzKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9pbml0LmMgYi9hcmNoL2FybS9tbS9pbml0LmMKaW5kZXggZTVmNmZjNC4uZTU5MTUxMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaW5pdC5jCisrKyBiL2FyY2gvYXJtL21tL2luaXQuYwpAQCAtMzkyLDcgKzM5Miw3IEBACiAJICogQ29udmVydCBzdGFydF9wZm4vZW5kX3BmbiB0byBhIHN0cnVjdCBwYWdlIHBvaW50ZXIuCiAJICovCiAJc3RhcnRfcGcgPSBwZm5fdG9fcGFnZShzdGFydF9wZm4gLSAxKSArIDE7Ci0JZW5kX3BnID0gcGZuX3RvX3BhZ2UoZW5kX3Bmbik7CisJZW5kX3BnID0gcGZuX3RvX3BhZ2UoZW5kX3BmbiAtIDEpICsgMTsKIAogCS8qCiAJICogQ29udmVydCB0byBwaHlzaWNhbCBhZGRyZXNzZXMsIGFuZApAQCAtNDI2LDYgKzQyNiwxNCBAQAogCiAJCWJhbmtfc3RhcnQgPSBiYW5rX3Bmbl9zdGFydChiYW5rKTsKIAorI2lmZGVmIENPTkZJR19TUEFSU0VNRU0KKwkJLyoKKwkJICogVGFrZSBjYXJlIG5vdCB0byBmcmVlIG1lbW1hcCBlbnRyaWVzIHRoYXQgZG9uJ3QgZXhpc3QKKwkJICogZHVlIHRvIFNQQVJTRU1FTSBzZWN0aW9ucyB3aGljaCBhcmVuJ3QgcHJlc2VudC4KKwkJICovCisJCWJhbmtfc3RhcnQgPSBtaW4oYmFua19zdGFydCwKKwkJCQkgQUxJR04ocHJldl9iYW5rX2VuZCwgUEFHRVNfUEVSX1NFQ1RJT04pKTsKKyNlbmRpZgogCQkvKgogCQkgKiBJZiB3ZSBoYWQgYSBwcmV2aW91cyBiYW5rLCBhbmQgdGhlcmUgaXMgYSBzcGFjZQogCQkgKiBiZXR3ZWVuIHRoZSBjdXJyZW50IGJhbmsgYW5kIHRoZSBwcmV2aW91cywgZnJlZSBpdC4KQEAgLTQ0MCw2ICs0NDgsMTIgQEAKIAkJICovCiAJCXByZXZfYmFua19lbmQgPSBBTElHTihiYW5rX3Bmbl9lbmQoYmFuayksIE1BWF9PUkRFUl9OUl9QQUdFUyk7CiAJfQorCisjaWZkZWYgQ09ORklHX1NQQVJTRU1FTQorCWlmICghSVNfQUxJR05FRChwcmV2X2JhbmtfZW5kLCBQQUdFU19QRVJfU0VDVElPTikpCisJCWZyZWVfbWVtbWFwKHByZXZfYmFua19lbmQsCisJCQkgICAgQUxJR04ocHJldl9iYW5rX2VuZCwgUEFHRVNfUEVSX1NFQ1RJT04pKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgZnJlZV9oaWdocGFnZXModm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMgYi9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCmluZGV4IGNlMjMzYmMuLjQyYWY5NzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUwpAQCAtMzk1LDcgKzM5NSw3IEBACiAJdGVxCXIyLCAjRE1BX1RPX0RFVklDRQogCWJlcQl4c2NhbGVfZG1hX2NsZWFuX3JhbmdlCiAJYgl4c2NhbGVfZG1hX2ZsdXNoX3JhbmdlCi1FTkRQUk9DKHhzY3NhbGVfZG1hX2EwX21hcF9hcmVhKQorRU5EUFJPQyh4c2NhbGVfZG1hX2EwX21hcF9hcmVhKQogCiAvKgogICoJZG1hX3VubWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2dwaW8uYwppbmRleCA3YTEwNzI0Li42Y2Q2ZDdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9ncGlvLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvZ3Bpby5jCkBAIC0yOTUsNiArMjk1LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBUaGlzIGxvY2sgY2xhc3MgdGVsbHMgbG9ja2RlcCB0aGF0IEdQSU8gaXJxcyBhcmUgaW4gYSBkaWZmZXJlbnQKKyAqIGNhdGVnb3J5IHRoYW4gdGhlaXIgcGFyZW50cywgc28gaXQgd29uJ3QgcmVwb3J0IGZhbHNlIHJlY3Vyc2lvbi4KKyAqLworc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBncGlvX2xvY2tfY2xhc3M7CisKIGludCBfX2luaXQgbXhjX2dwaW9faW5pdChzdHJ1Y3QgbXhjX2dwaW9fcG9ydCAqcG9ydCwgaW50IGNudCkKIHsKIAlpbnQgaSwgajsKQEAgLTMxMSw2ICszMTcsNyBAQAogCQlfX3Jhd193cml0ZWwofjAsIHBvcnRbaV0uYmFzZSArIEdQSU9fSVNSKTsKIAkJZm9yIChqID0gcG9ydFtpXS52aXJ0dWFsX2lycV9zdGFydDsKIAkJCWogPCBwb3J0W2ldLnZpcnR1YWxfaXJxX3N0YXJ0ICsgMzI7IGorKykgeworCQkJaXJxX3NldF9sb2NrZGVwX2NsYXNzKGosICZncGlvX2xvY2tfY2xhc3MpOwogCQkJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGosICZncGlvX2lycV9jaGlwLAogCQkJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwogCQkJc2V0X2lycV9mbGFncyhqLCBJUlFGX1ZBTElEKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL3NzaS1maXEuUyBiL2FyY2gvYXJtL3BsYXQtbXhjL3NzaS1maXEuUwppbmRleCA0ZGRjZTU2Li44Mzk3YTJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9zc2ktZmlxLlMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvc3NpLWZpcS5TCkBAIC0xMjQsNiArMTI0LDggQEAKIDE6CiAJCUAgcmV0dXJuIGZyb20gRklRCiAJCXN1YnMJcGMsIGxyLCAjNAorCisJCS5hbGlnbgogaW14X3NzaV9maXFfYmFzZToKIAkJLndvcmQgMHgwCiBpbXhfc3NpX2ZpcV9yeF9idWZmZXI6CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYwppbmRleCBkMmFkY2RkLi5iZDllMzIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgpAQCAtMTM3Miw5ICsxMzcyLDcgQEAKIAkucmVzdW1lX25vaXJxID0gb21hcF9tcHVpb19yZXN1bWVfbm9pcnEsCiB9OwogCi0vKiB1c2UgcGxhdGZvcm1fZHJpdmVyIGZvciB0aGlzLCBub3cgdGhhdCB0aGVyZSdzIG5vIGxvbmdlciBhbnkKLSAqIHBvaW50IHRvIHN5c19kZXZpY2UgKG90aGVyIHRoYW4gbm90IGRpc3R1cmJpbmcgb2xkIGNvZGUpLgotICovCisvKiB1c2UgcGxhdGZvcm1fZHJpdmVyIGZvciB0aGlzLiAqLwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcF9tcHVpb19kcml2ZXIgPSB7CiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gIm1wdWlvIiwKQEAgLTE3NDUsNyArMTc0Myw3IEBACiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyUExVUykKLXN0YXRpYyBpbnQgb21hcF9ncGlvX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1lc2cpCitzdGF0aWMgaW50IG9tYXBfZ3Bpb19zdXNwZW5kKHZvaWQpCiB7CiAJaW50IGk7CiAKQEAgLTE3OTUsMTIgKzE3OTMsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvbWFwX2dwaW9fcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBvbWFwX2dwaW9fcmVzdW1lKHZvaWQpCiB7CiAJaW50IGk7CiAKIAlpZiAoIWNwdV9jbGFzc19pc19vbWFwMigpICYmICFjcHVfaXNfb21hcDE2eHgoKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAogCWZvciAoaSA9IDA7IGkgPCBncGlvX2JhbmtfY291bnQ7IGkrKykgewogCQlzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rID0gJmdwaW9fYmFua1tpXTsKQEAgLTE4MzYsMjEgKzE4MzQsMTMgQEAKIAkJX19yYXdfd3JpdGVsKGJhbmstPnNhdmVkX3dha2V1cCwgd2FrZV9zZXQpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYW5rLT5sb2NrLCBmbGFncyk7CiAJfQotCi0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIG9tYXBfZ3Bpb19zeXNjbGFzcyA9IHsKLQkubmFtZQkJPSAiZ3BpbyIsCitzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIG9tYXBfZ3Bpb19zeXNjb3JlX29wcyA9IHsKIAkuc3VzcGVuZAk9IG9tYXBfZ3Bpb19zdXNwZW5kLAogCS5yZXN1bWUJCT0gb21hcF9ncGlvX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBvbWFwX2dwaW9fZGV2aWNlID0gewotCS5pZAkJPSAwLAotCS5jbHMJCT0gJm9tYXBfZ3Bpb19zeXNjbGFzcywKLX07Ci0KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDJQTFVTCkBAIC0yMTA4LDIxICsyMDk4LDE0IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG9tYXBfZ3Bpb19zeXNpbml0KHZvaWQpCiB7Ci0JaW50IHJldCA9IDA7Ci0KIAltcHVpb19pbml0KCk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyUExVUykKLQlpZiAoY3B1X2lzX29tYXAxNnh4KCkgfHwgY3B1X2NsYXNzX2lzX29tYXAyKCkpIHsKLQkJaWYgKHJldCA9PSAwKSB7Ci0JCQlyZXQgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJm9tYXBfZ3Bpb19zeXNjbGFzcyk7Ci0JCQlpZiAocmV0ID09IDApCi0JCQkJcmV0ID0gc3lzZGV2X3JlZ2lzdGVyKCZvbWFwX2dwaW9fZGV2aWNlKTsKLQkJfQotCX0KKwlpZiAoY3B1X2lzX29tYXAxNnh4KCkgfHwgY3B1X2NsYXNzX2lzX29tYXAyKCkpCisJCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZvbWFwX2dwaW9fc3lzY29yZV9vcHMpOwogI2VuZGlmCiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiBhcmNoX2luaXRjYWxsKG9tYXBfZ3Bpb19zeXNpbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKaW5kZXggOGE1MWZkNS4uMzRmYzMxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKQEAgLTc5Myw2ICs3OTMsOCBAQAogCWNsa19lbmFibGUob2JqLT5jbGspOwogCWVycnMgPSBpb21tdV9yZXBvcnRfZmF1bHQob2JqLCAmZGEpOwogCWNsa19kaXNhYmxlKG9iai0+Y2xrKTsKKwlpZiAoZXJycyA9PSAwKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKIAkvKiBGYXVsdCBjYWxsYmFjayBvciBUTEIvUFRFIER5bmFtaWMgbG9hZGluZyAqLwogCWlmIChvYmotPmlzciAmJiAhb2JqLT5pc3Iob2JqLCBkYSwgZXJycywgb2JqLT5pc3JfcHJpdikpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvb21hcF9kZXZpY2UuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9vbWFwX2RldmljZS5jCmluZGV4IDliYmRhOWEuLmEzN2I4ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9vbWFwX2RldmljZS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9vbWFwX2RldmljZS5jCkBAIC01MzYsNiArNTM2LDI4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgX29kX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCisJcmV0dXJuIG9tYXBfZGV2aWNlX2lkbGUocGRldik7Cit9CisKK3N0YXRpYyBpbnQgX29kX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisKKwlyZXR1cm4gb21hcF9kZXZpY2VfZW5hYmxlKHBkZXYpOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wb3dlcl9kb21haW4gb21hcF9kZXZpY2VfcG93ZXJfZG9tYWluID0geworCS5vcHMgPSB7CisJCS5ydW50aW1lX3N1c3BlbmQgPSBfb2RfcnVudGltZV9zdXNwZW5kLAorCQkucnVudGltZV9yZXN1bWUgPSBfb2RfcnVudGltZV9yZXN1bWUsCisJCVVTRV9QTEFURk9STV9QTV9TTEVFUF9PUFMKKwl9Cit9OworCiAvKioKICAqIG9tYXBfZGV2aWNlX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgYW4gb21hcF9kZXZpY2Ugd2l0aCBvbmUgb21hcF9od21vZAogICogQG9kOiBzdHJ1Y3Qgb21hcF9kZXZpY2UgKiB0byByZWdpc3RlcgpAQCAtNTQ5LDYgKzU3MSw3IEBACiAJcHJfZGVidWcoIm9tYXBfZGV2aWNlOiAlczogcmVnaXN0ZXJpbmdcbiIsIG9kLT5wZGV2Lm5hbWUpOwogCiAJb2QtPnBkZXYuZGV2LnBhcmVudCA9ICZvbWFwX2RldmljZV9wYXJlbnQ7CisJb2QtPnBkZXYuZGV2LnB3cl9kb21haW4gPSAmb21hcF9kZXZpY2VfcG93ZXJfZG9tYWluOwogCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9kLT5wZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1weGEvZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1weGEvZ3Bpby5jCmluZGV4IGRjZTA4OGYuLjQ4ZWJiOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtcHhhL2dwaW8uYworKysgYi9hcmNoL2FybS9wbGF0LXB4YS9ncGlvLmMKQEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgpAQCAtMjk1LDcgKzI5NSw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgcHhhX2dwaW9fc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHB4YV9ncGlvX3N1c3BlbmQodm9pZCkKIHsKIAlzdHJ1Y3QgcHhhX2dwaW9fY2hpcCAqYzsKIAlpbnQgZ3BpbzsKQEAgLTMxMiw3ICszMTIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHB4YV9ncGlvX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgcHhhX2dwaW9fcmVzdW1lKHZvaWQpCiB7CiAJc3RydWN0IHB4YV9ncGlvX2NoaXAgKmM7CiAJaW50IGdwaW87CkBAIC0zMjYsMjIgKzMyNiwxMyBAQAogCQlfX3Jhd193cml0ZWwoYy0+c2F2ZWRfZ2ZlciwgYy0+cmVnYmFzZSArIEdGRVJfT0ZGU0VUKTsKIAkJX19yYXdfd3JpdGVsKGMtPnNhdmVkX2dwZHIsIGMtPnJlZ2Jhc2UgKyBHUERSX09GRlNFVCk7CiAJfQotCXJldHVybiAwOwogfQogI2Vsc2UKICNkZWZpbmUgcHhhX2dwaW9fc3VzcGVuZAlOVUxMCiAjZGVmaW5lIHB4YV9ncGlvX3Jlc3VtZQkJTlVMTAogI2VuZGlmCiAKLXN0cnVjdCBzeXNkZXZfY2xhc3MgcHhhX2dwaW9fc3lzY2xhc3MgPSB7Ci0JLm5hbWUJCT0gImdwaW8iLAorc3RydWN0IHN5c2NvcmVfb3BzIHB4YV9ncGlvX3N5c2NvcmVfb3BzID0gewogCS5zdXNwZW5kCT0gcHhhX2dwaW9fc3VzcGVuZCwKIAkucmVzdW1lCQk9IHB4YV9ncGlvX3Jlc3VtZSwKIH07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHB4YV9ncGlvX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZweGFfZ3Bpb19zeXNjbGFzcyk7Ci19Ci0KLWNvcmVfaW5pdGNhbGwocHhhX2dwaW9faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXB4YS9tZnAuYyBiL2FyY2gvYXJtL3BsYXQtcHhhL21mcC5jCmluZGV4IGE5YWE1YWQuLmJlMTJlYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtcHhhL21mcC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtcHhhL21mcC5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAKICNpbmNsdWRlIDxwbGF0L21mcC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZG1hLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZG1hLmMKaW5kZXggMjdlYTg1Mi4uYzEwZDEwYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RtYS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYwpAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CkBAIC0xMTk1LDE5ICsxMTk1LDEyIEBACiAKIEVYUE9SVF9TWU1CT0woczNjMjQxMF9kbWFfZ2V0cG9zaXRpb24pOwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICp0b19kbWFfY2hhbihzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQotewotCXJldHVybiBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiwgZGV2KTsKLX0KLQotLyogc3lzdGVtIGRldmljZSBjbGFzcyAqLworLyogc3lzdGVtIGNvcmUgb3BlcmF0aW9ucyAqLwogCiAjaWZkZWYgQ09ORklHX1BNCiAKLXN0YXRpYyBpbnQgczNjMjQxMF9kbWFfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgdm9pZCBzM2MyNDEwX2RtYV9zdXNwZW5kX2NoYW4oczNjMjQxMF9kbWFfY2hhbiAqY3ApCiB7Ci0Jc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNwID0gdG9fZG1hX2NoYW4oZGV2KTsKLQogCXByaW50ayhLRVJOX0RFQlVHICJzdXNwZW5kaW5nIGRtYSBjaGFubmVsICVkXG4iLCBjcC0+bnVtYmVyKTsKIAogCWlmIChkbWFfcmRyZWcoY3AsIFMzQzI0MTBfRE1BX0RNQVNLVFJJRykgJiBTM0MyNDEwX0RNQVNLVFJJR19PTikgewpAQCAtMTIyMiwxMyArMTIxNSwyMSBAQAogCiAJCXMzYzI0MTBfZG1hX2Rvc3RvcChjcCk7CiAJfQorfQorCitzdGF0aWMgaW50IHMzYzI0MTBfZG1hX3N1c3BlbmQodm9pZCkKK3sKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY3AgPSBzM2MyNDEwX2NoYW5zOworCWludCBjaGFubmVsOworCisJZm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCA8IGRtYV9jaGFubmVsczsgY3ArKywgY2hhbm5lbCsrKQorCQlzM2MyNDEwX2RtYV9zdXNwZW5kX2NoYW4oY3ApOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczNjMjQxMF9kbWFfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBzM2MyNDEwX2RtYV9yZXN1bWVfY2hhbihzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY3ApCiB7Ci0Jc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNwID0gdG9fZG1hX2NoYW4oZGV2KTsKIAl1bnNpZ25lZCBpbnQgbm8gPSBjcC0+bnVtYmVyIHwgRE1BQ0hfTE9XX0xFVkVMOwogCiAJLyogcmVzdG9yZSBjaGFubmVsJ3MgaGFyZHdhcmUgY29uZmlndXJhdGlvbiAqLwpAQCAtMTI0OSwxMyArMTI1MCwyMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBzM2MyNDEwX2RtYV9yZXN1bWUodm9pZCkKK3sKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY3AgPSBzM2MyNDEwX2NoYW5zICsgZG1hX2NoYW5uZWxzIC0gMTsKKwlpbnQgY2hhbm5lbDsKKworCWZvciAoY2hhbm5lbCA9IGRtYV9jaGFubmVscyAtIDE7IGNoYW5uZWwgPj0gMDsgY3ArKywgY2hhbm5lbC0tKQorCQlzM2MyNDEwX2RtYV9yZXN1bWVfY2hhbihjcCk7Cit9CisKICNlbHNlCiAjZGVmaW5lIHMzYzI0MTBfZG1hX3N1c3BlbmQgTlVMTAogI2RlZmluZSBzM2MyNDEwX2RtYV9yZXN1bWUgIE5VTEwKICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAotc3RydWN0IHN5c2Rldl9jbGFzcyBkbWFfc3lzY2xhc3MgPSB7Ci0JLm5hbWUJCT0gInMzYzI0eHgtZG1hIiwKK3N0cnVjdCBzeXNjb3JlX29wcyBkbWFfc3lzY29yZV9vcHMgPSB7CiAJLnN1c3BlbmQJPSBzM2MyNDEwX2RtYV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gczNjMjQxMF9kbWFfcmVzdW1lLAogfTsKQEAgLTEyNjksMzkgKzEyNzgsMTQgQEAKIAogLyogaW5pdGlhbGlzYXRpb24gY29kZSAqLwogCi1zdGF0aWMgaW50IF9faW5pdCBzM2MyNHh4X2RtYV9zeXNjbGFzc19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBzM2MyNHh4X2RtYV9zeXNjb3JlX2luaXQodm9pZCkKIHsKLQlpbnQgcmV0ID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZkbWFfc3lzY2xhc3MpOwotCi0JaWYgKHJldCAhPSAwKQotCQlwcmludGsoS0VSTl9FUlIgImRtYSBzeXNjbGFzcyByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLWNvcmVfaW5pdGNhbGwoczNjMjR4eF9kbWFfc3lzY2xhc3NfaW5pdCk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHMzYzI0eHhfZG1hX3N5c2Rldl9yZWdpc3Rlcih2b2lkKQotewotCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjcCA9IHMzYzI0MTBfY2hhbnM7Ci0JaW50IGNoYW5uZWwsIHJldDsKLQotCWZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCBkbWFfY2hhbm5lbHM7IGNwKyssIGNoYW5uZWwrKykgewotCQljcC0+ZGV2LmNscyA9ICZkbWFfc3lzY2xhc3M7Ci0JCWNwLT5kZXYuaWQgID0gY2hhbm5lbDsKLQkJcmV0ID0gc3lzZGV2X3JlZ2lzdGVyKCZjcC0+ZGV2KTsKLQotCQlpZiAocmV0KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImVycm9yIHJlZ2lzdGVyaW5nIGRldiBmb3IgZG1hICVkXG4iLAotCQkJICAgICAgIGNoYW5uZWwpOwotIAkJCXJldHVybiByZXQ7Ci0JCX0KLQl9CisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJmRtYV9zeXNjb3JlX29wcyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotbGF0ZV9pbml0Y2FsbChzM2MyNHh4X2RtYV9zeXNkZXZfcmVnaXN0ZXIpOworbGF0ZV9pbml0Y2FsbChzM2MyNHh4X2RtYV9zeXNjb3JlX2luaXQpOwogCiBpbnQgX19pbml0IHMzYzI0eHhfZG1hX2luaXQodW5zaWduZWQgaW50IGNoYW5uZWxzLCB1bnNpZ25lZCBpbnQgaXJxLAogCQkJICAgIHVuc2lnbmVkIGludCBzdHJpZGUpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaXJxLXBtLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaXJxLXBtLmMKaW5kZXggYzM2MjRkOC4uMGVmYjJlMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2lycS1wbS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pcnEtcG0uYwpAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CkBAIC02NSw3ICs2NCw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlX2VpbnRmbHRbNF07CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlX2VpbnRtYXNrOwogCi1pbnQgczNjMjR4eF9pcnFfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitpbnQgczNjMjR4eF9pcnFfc3VzcGVuZCh2b2lkKQogewogCXVuc2lnbmVkIGludCBpOwogCkBAIC04MSw3ICs4MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBzM2MyNHh4X2lycV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3ZvaWQgczNjMjR4eF9pcnFfcmVzdW1lKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGk7CiAKQEAgLTkzLDYgKzkyLDQgQEAKIAogCXMzY19wbV9kb19yZXN0b3JlKGlycV9zYXZlLCBBUlJBWV9TSVpFKGlycV9zYXZlKSk7CiAJX19yYXdfd3JpdGVsKHNhdmVfZWludG1hc2ssIFMzQzI0WFhfRUlOVE1BU0spOwotCi0JcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9pcnEtcG0uYyBiL2FyY2gvYXJtL3BsYXQtczVwL2lycS1wbS5jCmluZGV4IDUyNTlhZDQuLjMyN2FjYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczVwL2lycS1wbS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwL2lycS1wbS5jCkBAIC0xNiw3ICsxNiw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogCiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KICNpbmNsdWRlIDxwbGF0L2lycXMuaD4KQEAgLTc3LDE3ICs3NiwxNSBAQAogCVNBVkVfSVRFTShTNVBfRUlOVF9NQVNLKDMpKSwKIH07CiAKLWludCBzM2MyNHh4X2lycV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK2ludCBzM2MyNHh4X2lycV9zdXNwZW5kKHZvaWQpCiB7CiAJczNjX3BtX2RvX3NhdmUoZWludF9zYXZlLCBBUlJBWV9TSVpFKGVpbnRfc2F2ZSkpOwogCiAJcmV0dXJuIDA7CiB9CiAKLWludCBzM2MyNHh4X2lycV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3ZvaWQgczNjMjR4eF9pcnFfcmVzdW1lKHZvaWQpCiB7CiAJczNjX3BtX2RvX3Jlc3RvcmUoZWludF9zYXZlLCBBUlJBWV9TSVpFKGVpbnRfc2F2ZSkpOwotCi0JcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvY3B1LmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2NwdS5oCmluZGV4IGNlZGZmZjUuLjNhZWRhYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvY3B1LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9jcHUuaApAQCAtNjgsNiArNjgsMTIgQEAKIHN0cnVjdCBzeXNfdGltZXI7CiBleHRlcm4gc3RydWN0IHN5c190aW1lciBzM2MyNHh4X3RpbWVyOwogCitleHRlcm4gc3RydWN0IHN5c2NvcmVfb3BzIHMzYzI0MTBfcG1fc3lzY29yZV9vcHM7CitleHRlcm4gc3RydWN0IHN5c2NvcmVfb3BzIHMzYzI0MTJfcG1fc3lzY29yZV9vcHM7CitleHRlcm4gc3RydWN0IHN5c2NvcmVfb3BzIHMzYzI0MTZfcG1fc3lzY29yZV9vcHM7CitleHRlcm4gc3RydWN0IHN5c2NvcmVfb3BzIHMzYzI0NHhfcG1fc3lzY29yZV9vcHM7CitleHRlcm4gc3RydWN0IHN5c2NvcmVfb3BzIHMzYzY0eHhfaXJxX3N5c2NvcmVfb3BzOworCiAvKiBzeXN0ZW0gZGV2aWNlIGNsYXNzZXMgKi8KIAogZXh0ZXJuIHN0cnVjdCBzeXNkZXZfY2xhc3MgczNjMjQxMF9zeXNjbGFzczsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcG0uaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcG0uaAppbmRleCA5MzdjYzJhLi43ZmI2ZjZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3BtLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9wbS5oCkBAIC0xMDMsMTQgKzEwMywxNiBAQAogCiAjaWZkZWYgQ09ORklHX1BNCiBleHRlcm4gaW50IHMzY19pcnFleHRfd2FrZShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsIHVuc2lnbmVkIGludCBzdGF0ZSk7Ci1leHRlcm4gaW50IHMzYzI0eHhfaXJxX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKLWV4dGVybiBpbnQgczNjMjR4eF9pcnFfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBzM2MyNHh4X2lycV9zdXNwZW5kKHZvaWQpOworZXh0ZXJuIHZvaWQgczNjMjR4eF9pcnFfcmVzdW1lKHZvaWQpOwogI2Vsc2UKICNkZWZpbmUgczNjX2lycWV4dF93YWtlIE5VTEwKICNkZWZpbmUgczNjMjR4eF9pcnFfc3VzcGVuZCBOVUxMCiAjZGVmaW5lIHMzYzI0eHhfaXJxX3Jlc3VtZSAgTlVMTAogI2VuZGlmCiAKK2V4dGVybiBzdHJ1Y3Qgc3lzY29yZV9vcHMgczNjMjR4eF9pcnFfc3lzY29yZV9vcHM7CisKIC8qIFBNIGRlYnVnIGZ1bmN0aW9ucyAqLwogCiAjaWZkZWYgQ09ORklHX1NBTVNVTkdfUE1fREVCVUcKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYyBiL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYwppbmRleCBmNzQ2OTUwLi5mMjVlN2VjIDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKKysrIGIvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCkBAIC0zOTgsOSArMzk4LDkgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAKLXN0YXRpYyBpbnQgdmZwX3BtX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCB2ZnBfcG1fc3VzcGVuZCh2b2lkKQogewogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGkgPSBjdXJyZW50X3RocmVhZF9pbmZvKCk7CiAJdTMyIGZwZXhjID0gZm1yeChGUEVYQyk7CkBAIC00MjAsMzQgKzQyMCwyNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZmcF9wbV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHZmcF9wbV9yZXN1bWUodm9pZCkKIHsKIAkvKiBlbnN1cmUgd2UgaGF2ZSBhY2Nlc3MgdG8gdGhlIHZmcCAqLwogCXZmcF9lbmFibGUoTlVMTCk7CiAKIAkvKiBhbmQgZGlzYWJsZSBpdCB0byBlbnN1cmUgdGhlIG5leHQgdXNhZ2UgcmVzdG9yZXMgdGhlIHN0YXRlICovCiAJZm14cihGUEVYQywgZm1yeChGUEVYQykgJiB+RlBFWENfRU4pOwotCi0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHZmcF9wbV9zeXNjbGFzcyA9IHsKLQkubmFtZQkJPSAidmZwIiwKK3N0YXRpYyBzdHJ1Y3Qgc3lzY29yZV9vcHMgdmZwX3BtX3N5c2NvcmVfb3BzID0gewogCS5zdXNwZW5kCT0gdmZwX3BtX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSB2ZnBfcG1fcmVzdW1lLAogfTsKIAotc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIHZmcF9wbV9zeXNkZXYgPSB7Ci0JLmNscwk9ICZ2ZnBfcG1fc3lzY2xhc3MsCi19OwotCiBzdGF0aWMgdm9pZCB2ZnBfcG1faW5pdCh2b2lkKQogewotCXN5c2Rldl9jbGFzc19yZWdpc3RlcigmdmZwX3BtX3N5c2NsYXNzKTsKLQlzeXNkZXZfcmVnaXN0ZXIoJnZmcF9wbV9zeXNkZXYpOworCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZ2ZnBfcG1fc3lzY29yZV9vcHMpOwogfQogCi0KICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgdmZwX3BtX2luaXQodm9pZCkgeyB9CiAjZW5kaWYgLyogQ09ORklHX1BNICovCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2ludGMuYyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW50Yy5jCmluZGV4IDIxY2UzNWYuLjNlMzY0NjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW50Yy5jCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW50Yy5jCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogCkBAIC0yMSw3ICsyMSw2IEBACiBzdHJ1Y3QgaW50YyB7CiAJdm9pZCBfX2lvbWVtCQkqcmVnczsKIAlzdHJ1Y3QgaXJxX2NoaXAJCWNoaXA7Ci0Jc3RydWN0IHN5c19kZXZpY2UJc3lzZGV2OwogI2lmZGVmIENPTkZJR19QTQogCXVuc2lnbmVkIGxvbmcJCXN1c3BlbmRfaXByOwogCXVuc2lnbmVkIGxvbmcJCXNhdmVkX2lwcls2NF07CkBAIC0xNDYsOSArMTQ1LDggQEAKIAlpbnRjMC5zdXNwZW5kX2lwciA9IG9mZnNldDsKIH0KIAotc3RhdGljIGludCBpbnRjX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKnNkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgaW50Y19zdXNwZW5kKHZvaWQpCiB7Ci0Jc3RydWN0IGludGMgKmludGMgPSBjb250YWluZXJfb2Yoc2Rldiwgc3RydWN0IGludGMsIHN5c2Rldik7CiAJaW50IGk7CiAKIAlpZiAodW5saWtlbHkoIWlycXNfZGlzYWJsZWQoKSkpIHsKQEAgLTE1NiwyOCArMTU0LDI1IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmICh1bmxpa2VseSghaW50Yy0+c3VzcGVuZF9pcHIpKSB7CisJaWYgKHVubGlrZWx5KCFpbnRjMC5zdXNwZW5kX2lwcikpIHsKIAkJcHJfZXJyKCJpbnRjX3N1c3BlbmQ6IHN1c3BlbmRfaXByIG5vdCBpbml0aWFsaXplZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7Ci0JCWludGMtPnNhdmVkX2lwcltpXSA9IGludGNfcmVhZGwoaW50YywgSU5UUFIwICsgNCAqIGkpOwotCQlpbnRjX3dyaXRlbChpbnRjLCBJTlRQUjAgKyA0ICogaSwgaW50Yy0+c3VzcGVuZF9pcHIpOworCQlpbnRjMC5zYXZlZF9pcHJbaV0gPSBpbnRjX3JlYWRsKCZpbnRjMCwgSU5UUFIwICsgNCAqIGkpOworCQlpbnRjX3dyaXRlbCgmaW50YzAsIElOVFBSMCArIDQgKiBpLCBpbnRjMC5zdXNwZW5kX2lwcik7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaW50Y19yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKnNkZXYpCitzdGF0aWMgaW50IGludGNfcmVzdW1lKHZvaWQpCiB7Ci0Jc3RydWN0IGludGMgKmludGMgPSBjb250YWluZXJfb2Yoc2Rldiwgc3RydWN0IGludGMsIHN5c2Rldik7CiAJaW50IGk7CiAKLQlXQVJOX09OKCFpcnFzX2Rpc2FibGVkKCkpOwotCiAJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspCi0JCWludGNfd3JpdGVsKGludGMsIElOVFBSMCArIDQgKiBpLCBpbnRjLT5zYXZlZF9pcHJbaV0pOworCQlpbnRjX3dyaXRlbCgmaW50YzAsIElOVFBSMCArIDQgKiBpLCBpbnRjMC5zYXZlZF9pcHJbaV0pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xODYsMjcgKzE4MSwxOCBAQAogI2RlZmluZSBpbnRjX3Jlc3VtZQlOVUxMCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgaW50Y19jbGFzcyA9IHsKLQkubmFtZQkJPSAiaW50YyIsCitzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIGludGNfc3lzY29yZV9vcHMgPSB7CiAJLnN1c3BlbmQJPSBpbnRjX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBpbnRjX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGludGNfaW5pdF9zeXNkZXYodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGludGNfaW5pdF9zeXNjb3JlKHZvaWQpCiB7Ci0JaW50IHJldDsKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmaW50Y19zeXNjb3JlX29wcyk7CiAKLQlyZXQgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJmludGNfY2xhc3MpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlpbnRjMC5zeXNkZXYuaWQgPSAwOwotCWludGMwLnN5c2Rldi5jbHMgPSAmaW50Y19jbGFzczsKLQlyZXQgPSBzeXNkZXZfcmVnaXN0ZXIoJmludGMwLnN5c2Rldik7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQotZGV2aWNlX2luaXRjYWxsKGludGNfaW5pdF9zeXNkZXYpOworZGV2aWNlX2luaXRjYWxsKGludGNfaW5pdF9zeXNjb3JlKTsKIAogdW5zaWduZWQgbG9uZyBpbnRjX2dldF9wZW5kaW5nKHVuc2lnbmVkIGludCBncm91cCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL25taS5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvbm1pLmMKaW5kZXggMGI1ZjcyZi4uNDAxZWIxZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvbm1pLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvbm1pLmMKQEAgLTEyLDcgKzEyLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvbm1pLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CkBAIC0xOTYsNDMgKzE5NiwzMSBAQAogCiAvKiBTdXNwZW5kL3Jlc3VtZSBzdXBwb3J0ICovCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IG5taV93ZHRfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IG5taV93ZHRfc3VzcGVuZCh2b2lkKQogewogCW5taV93ZHRfc3RvcCgpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG5taV93ZHRfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBubWlfd2R0X3Jlc3VtZSh2b2lkKQogewogCWlmIChubWlfYWN0aXZlKQogCQlubWlfd2R0X3N0YXJ0KCk7Ci0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIG5taV9zeXNjbGFzcyA9IHsKLQkubmFtZQkJPSBEUlZfTkFNRSwKK3N0YXRpYyBzdHJ1Y3Qgc3lzY29yZV9vcHMgbm1pX3N5c2NvcmVfb3BzID0gewogCS5yZXN1bWUJCT0gbm1pX3dkdF9yZXN1bWUsCiAJLnN1c3BlbmQJPSBubWlfd2R0X3N1c3BlbmQsCiB9OwogCi1zdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgZGV2aWNlX25taV93ZHQgPSB7Ci0JLmlkCT0gMCwKLQkuY2xzCT0gJm5taV9zeXNjbGFzcywKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfbm1pX3dkdF9zeXNmcyh2b2lkKQorc3RhdGljIGludCBfX2luaXQgaW5pdF9ubWlfd2R0X3N5c2NvcmUodm9pZCkKIHsKLQlpbnQgZXJyb3I7CisJaWYgKG5taV9hY3RpdmUpCisJCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZubWlfc3lzY29yZV9vcHMpOwogCi0JaWYgKCFubWlfYWN0aXZlKQotCQlyZXR1cm4gMDsKLQotCWVycm9yID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZubWlfc3lzY2xhc3MpOwotCWlmICghZXJyb3IpCi0JCWVycm9yID0gc3lzZGV2X3JlZ2lzdGVyKCZkZXZpY2Vfbm1pX3dkdCk7Ci0JcmV0dXJuIGVycm9yOworCXJldHVybiAwOwogfQotbGF0ZV9pbml0Y2FsbChpbml0X25taV93ZHRfc3lzZnMpOworbGF0ZV9pbml0Y2FsbChpbml0X25taV93ZHRfc3lzY29yZSk7CiAKICNlbmRpZgkvKiBDT05GSUdfUE0gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdGltZS10cy5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdGltZS10cy5jCmluZGV4IGNkYjRiZWIuLjllOWI2MGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3RpbWUtdHMuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC90aW1lLXRzLmMKQEAgLTIzLDI5ICsyMyw2IEBACiAjaW5jbHVkZSA8YXNtL2dwdGltZXJzLmg+CiAjaW5jbHVkZSA8YXNtL25taS5oPgogCi0vKiBBY2NlbGVyYXRvcnMgZm9yIHNjaGVkX2Nsb2NrKCkKLSAqIGNvbnZlcnQgZnJvbSBjeWNsZXMoNjRiaXRzKSA9PiBuYW5vc2Vjb25kcyAoNjRiaXRzKQotICogIGJhc2ljIGVxdWF0aW9uOgotICoJCW5zID0gY3ljbGVzIC8gKGZyZXEgLyBuc19wZXJfc2VjKQotICoJCW5zID0gY3ljbGVzICogKG5zX3Blcl9zZWMgLyBmcmVxKQotICoJCW5zID0gY3ljbGVzICogKDEwXjkgLyAoY3B1X2toeiAqIDEwXjMpKQotICoJCW5zID0gY3ljbGVzICogKDEwXjYgLyBjcHVfa2h6KQotICoKLSAqCVRoZW4gd2UgdXNlIHNjYWxpbmcgbWF0aCAoc3VnZ2VzdGVkIGJ5IGdlb3JnZUBtdmlzdGEuY29tKSB0byBnZXQ6Ci0gKgkJbnMgPSBjeWNsZXMgKiAoMTBeNiAqIFNDIC8gY3B1X2toeikgLyBTQwotICoJCW5zID0gY3ljbGVzICogY3ljMm5zX3NjYWxlIC8gU0MKLSAqCi0gKglBbmQgc2luY2UgU0MgaXMgYSBjb25zdGFudCBwb3dlciBvZiB0d28sIHdlIGNhbiBjb252ZXJ0IHRoZSBkaXYKLSAqICBpbnRvIGEgc2hpZnQuCi0gKgotICogIFdlIGNhbiB1c2Uga2h6IGRpdmlzb3IgaW5zdGVhZCBvZiBtaHogdG8ga2VlcCBhIGJldHRlciBwcmVjaXNpb24sIHNpbmNlCi0gKiAgY3ljMm5zX3NjYWxlIGlzIGxpbWl0ZWQgdG8gMTBeNiAqIDJeMTAsIHdoaWNoIGZpdHMgaW4gMzIgYml0cy4KLSAqICAobWF0aGlldS5kZXNub3llcnNAcG9seW10bC5jYSkKLSAqCi0gKgkJCS1qb2huc3R1bEB1cy5pYm0uY29tICJtYXRoIGlzIGhhcmQsIGxldHMgZ28gc2hvcHBpbmchIgotICovCi0KLSNkZWZpbmUgQ1lDMk5TX1NDQUxFX0ZBQ1RPUiAxMCAvKiAyXjEwLCBjYXJlZnVsbHkgY2hvc2VuICovCiAKICNpZiBkZWZpbmVkKENPTkZJR19DWUNMRVNfQ0xPQ0tTT1VSQ0UpCiAKQEAgLTYzLDcgKzQwLDYgQEAKIAkucmF0aW5nCQk9IDQwMCwKIAkucmVhZAkJPSBiZmluX3JlYWRfY3ljbGVzLAogCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soNjQpLAotCS5zaGlmdAkJPSBDWUMyTlNfU0NBTEVfRkFDVE9SLAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKQEAgLTc1LDEwICs1MSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGJmaW5fY3NfY3ljbGVzX2luaXQodm9pZCkKIHsKLQliZmluX2NzX2N5Y2xlcy5tdWx0ID0gXAotCQljbG9ja3NvdXJjZV9oejJtdWx0KGdldF9jY2xrKCksIGJmaW5fY3NfY3ljbGVzLnNoaWZ0KTsKLQotCWlmIChjbG9ja3NvdXJjZV9yZWdpc3RlcigmYmZpbl9jc19jeWNsZXMpKQorCWlmIChjbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmYmZpbl9jc19jeWNsZXMsIGdldF9jY2xrKCkpKQogCQlwYW5pYygiZmFpbGVkIHRvIHJlZ2lzdGVyIGNsb2Nrc291cmNlIik7CiAKIAlyZXR1cm4gMDsKQEAgLTExMSw3ICs4NCw2IEBACiAJLnJhdGluZwkJPSAzNTAsCiAJLnJlYWQJCT0gYmZpbl9yZWFkX2dwdGltZXIwLAogCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soMzIpLAotCS5zaGlmdAkJPSBDWUMyTlNfU0NBTEVfRkFDVE9SLAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKQEAgLTEyNSwxMCArOTcsNyBAQAogewogCXNldHVwX2dwdGltZXIwKCk7CiAKLQliZmluX2NzX2dwdGltZXIwLm11bHQgPSBcCi0JCWNsb2Nrc291cmNlX2h6Mm11bHQoZ2V0X3NjbGsoKSwgYmZpbl9jc19ncHRpbWVyMC5zaGlmdCk7Ci0KLQlpZiAoY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmJmaW5fY3NfZ3B0aW1lcjApKQorCWlmIChjbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmYmZpbl9jc19ncHRpbWVyMCwgZ2V0X3NjbGsoKSkpCiAJCXBhbmljKCJmYWlsZWQgdG8gcmVnaXN0ZXIgY2xvY2tzb3VyY2UiKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9kcG1jLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2RwbWMuYwppbmRleCAzODIwOTlmLi41ZTQxMTJlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2RwbWMuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2RwbWMuYwpAQCAtMTksOSArMTksNiBAQAogCiAjZGVmaW5lIERSSVZFUl9OQU1FICJiZmluIGRwbWMiCiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIFwKLQljcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgRFJJVkVSX05BTUUsIG1zZykKLQogc3RydWN0IGJmaW5fZHBtY19wbGF0Zm9ybV9kYXRhICpwZGF0YTsKIAogLyoqCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9zYmFfaW9tbXUuYwppbmRleCA0Y2U4ZDEzLi5jMDRkZDU3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jCisrKyBiL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jcmFzaF9kdW1wLmg+CiAjaW5jbHVkZSA8bGludXgvaW9tbXUtaGVscGVyLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CQkvKiBpYTY0X2dldF9pdGMoKSAqLwogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCmluZGV4IDIyZjYxNTIuLmYwOWIxNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKQEAgLTIzLDggKzIzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8YWNwaS9wcm9jZXNzb3IuaD4KIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsICJhY3BpLWNwdWZyZXEiLCBtc2cpCi0KIE1PRFVMRV9BVVRIT1IoIlZlbmthdGVzaCBQYWxsaXBhZGkiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQUNQSSBQcm9jZXNzb3IgUC1TdGF0ZXMgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC00NywxMiArNDUsMTIgQEAKIHsKIAlzNjQgcmV0dmFsOwogCi0JZHByaW50aygicHJvY2Vzc29yX3NldF9wc3RhdGVcbiIpOworCXByX2RlYnVnKCJwcm9jZXNzb3Jfc2V0X3BzdGF0ZVxuIik7CiAKIAlyZXR2YWwgPSBpYTY0X3BhbF9zZXRfcHN0YXRlKCh1NjQpdmFsdWUpOwogCiAJaWYgKHJldHZhbCkgewotCQlkcHJpbnRrKCJGYWlsZWQgdG8gc2V0IGZyZXEgdG8gMHgleCwgd2l0aCBlcnJvciAweCVseFxuIiwKKwkJcHJfZGVidWcoIkZhaWxlZCB0byBzZXQgZnJlcSB0byAweCV4LCB3aXRoIGVycm9yIDB4JWx4XG4iLAogCQkgICAgICAgIHZhbHVlLCByZXR2YWwpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC02NywxNCArNjUsMTQgQEAKIAl1NjQJcHN0YXRlX2luZGV4ID0gMDsKIAlzNjQgCXJldHZhbDsKIAotCWRwcmludGsoInByb2Nlc3Nvcl9nZXRfcHN0YXRlXG4iKTsKKwlwcl9kZWJ1ZygicHJvY2Vzc29yX2dldF9wc3RhdGVcbiIpOwogCiAJcmV0dmFsID0gaWE2NF9wYWxfZ2V0X3BzdGF0ZSgmcHN0YXRlX2luZGV4LAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFMX0dFVF9QU1RBVEVfVFlQRV9JTlNUQU5UKTsKIAkqdmFsdWUgPSAodTMyKSBwc3RhdGVfaW5kZXg7CiAKIAlpZiAocmV0dmFsKQotCQlkcHJpbnRrKCJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgZnJlcSB3aXRoICIKKwkJcHJfZGVidWcoIkZhaWxlZCB0byBnZXQgY3VycmVudCBmcmVxIHdpdGggIgogCQkJImVycm9yIDB4JWx4LCBpZHggMHgleFxuIiwgcmV0dmFsLCAqdmFsdWUpOwogCiAJcmV0dXJuIChpbnQpcmV0dmFsOwpAQCAtOTAsNyArODgsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgaTsKIAotCWRwcmludGsoImV4dHJhY3RfY2xvY2tcbiIpOworCXByX2RlYnVnKCJleHRyYWN0X2Nsb2NrXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5hY3BpX2RhdGEuc3RhdGVfY291bnQ7IGkrKykgewogCQlpZiAodmFsdWUgPT0gZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpXS5zdGF0dXMpCkBAIC0xMTAsNyArMTA4LDcgQEAKIAljcHVtYXNrX3QJCXNhdmVkX21hc2s7CiAJdW5zaWduZWQgbG9uZyAJCWNsb2NrX2ZyZXE7CiAKLQlkcHJpbnRrKCJwcm9jZXNzb3JfZ2V0X2ZyZXFcbiIpOworCXByX2RlYnVnKCJwcm9jZXNzb3JfZ2V0X2ZyZXFcbiIpOwogCiAJc2F2ZWRfbWFzayA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKIAlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBjcHVtYXNrX29mKGNwdSkpOwpAQCAtMTQ4LDcgKzE0Niw3IEBACiAJY3B1bWFza190CQlzYXZlZF9tYXNrOwogCWludAkJCXJldHZhbDsKIAotCWRwcmludGsoInByb2Nlc3Nvcl9zZXRfZnJlcVxuIik7CisJcHJfZGVidWcoInByb2Nlc3Nvcl9zZXRfZnJlcVxuIik7CiAKIAlzYXZlZF9tYXNrID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwogCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsIGNwdW1hc2tfb2YoY3B1KSk7CkBAIC0xNTksMTYgKzE1NywxNiBAQAogCiAJaWYgKHN0YXRlID09IGRhdGEtPmFjcGlfZGF0YS5zdGF0ZSkgewogCQlpZiAodW5saWtlbHkoZGF0YS0+cmVzdW1lKSkgewotCQkJZHByaW50aygiQ2FsbGVkIGFmdGVyIHJlc3VtZSwgcmVzZXR0aW5nIHRvIFAlZFxuIiwgc3RhdGUpOworCQkJcHJfZGVidWcoIkNhbGxlZCBhZnRlciByZXN1bWUsIHJlc2V0dGluZyB0byBQJWRcbiIsIHN0YXRlKTsKIAkJCWRhdGEtPnJlc3VtZSA9IDA7CiAJCX0gZWxzZSB7Ci0JCQlkcHJpbnRrKCJBbHJlYWR5IGF0IHRhcmdldCBzdGF0ZSAoUCVkKVxuIiwgc3RhdGUpOworCQkJcHJfZGVidWcoIkFscmVhZHkgYXQgdGFyZ2V0IHN0YXRlIChQJWQpXG4iLCBzdGF0ZSk7CiAJCQlyZXR2YWwgPSAwOwogCQkJZ290byBtaWdyYXRlX2VuZDsKIAkJfQogCX0KIAotCWRwcmludGsoIlRyYW5zaXRpb25pbmcgZnJvbSBQJWQgdG8gUCVkXG4iLAorCXByX2RlYnVnKCJUcmFuc2l0aW9uaW5nIGZyb20gUCVkIHRvIFAlZFxuIiwKIAkJZGF0YS0+YWNwaV9kYXRhLnN0YXRlLCBzdGF0ZSk7CiAKIAkvKiBjcHVmcmVxIGZyZXF1ZW5jeSBzdHJ1Y3QgKi8KQEAgLTE4Niw3ICsxODQsNyBAQAogCiAJdmFsdWUgPSAodTMyKSBkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW3N0YXRlXS5jb250cm9sOwogCi0JZHByaW50aygiVHJhbnNpdGlvbmluZyB0byBzdGF0ZTogMHglMDh4XG4iLCB2YWx1ZSk7CisJcHJfZGVidWcoIlRyYW5zaXRpb25pbmcgdG8gc3RhdGU6IDB4JTA4eFxuIiwgdmFsdWUpOwogCiAJcmV0ID0gcHJvY2Vzc29yX3NldF9wc3RhdGUodmFsdWUpOwogCWlmIChyZXQpIHsKQEAgLTIxOSw3ICsyMTcsNyBAQAogewogCXN0cnVjdCBjcHVmcmVxX2FjcGlfaW8gKmRhdGEgPSBhY3BpX2lvX2RhdGFbY3B1XTsKIAotCWRwcmludGsoImFjcGlfY3B1ZnJlcV9nZXRcbiIpOworCXByX2RlYnVnKCJhY3BpX2NwdWZyZXFfZ2V0XG4iKTsKIAogCXJldHVybiBwcm9jZXNzb3JfZ2V0X2ZyZXEoZGF0YSwgY3B1KTsKIH0KQEAgLTIzNSw3ICsyMzMsNyBAQAogCXVuc2lnbmVkIGludCBuZXh0X3N0YXRlID0gMDsKIAl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gMDsKIAotCWRwcmludGsoImFjcGlfY3B1ZnJlcV9zZXRwb2xpY3lcbiIpOworCXByX2RlYnVnKCJhY3BpX2NwdWZyZXFfc2V0cG9saWN5XG4iKTsKIAogCXJlc3VsdCA9IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksCiAJCQlkYXRhLT5mcmVxX3RhYmxlLCB0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXh0X3N0YXRlKTsKQEAgLTI1NSw3ICsyNTMsNyBAQAogCXVuc2lnbmVkIGludCByZXN1bHQgPSAwOwogCXN0cnVjdCBjcHVmcmVxX2FjcGlfaW8gKmRhdGEgPSBhY3BpX2lvX2RhdGFbcG9saWN5LT5jcHVdOwogCi0JZHByaW50aygiYWNwaV9jcHVmcmVxX3ZlcmlmeVxuIik7CisJcHJfZGVidWcoImFjcGlfY3B1ZnJlcV92ZXJpZnlcbiIpOwogCiAJcmVzdWx0ID0gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdmVyaWZ5KHBvbGljeSwKIAkJCWRhdGEtPmZyZXFfdGFibGUpOwpAQCAtMjczLDcgKzI3MSw3IEBACiAJc3RydWN0IGNwdWZyZXFfYWNwaV9pbwkqZGF0YTsKIAl1bnNpZ25lZCBpbnQJCXJlc3VsdCA9IDA7CiAKLQlkcHJpbnRrKCJhY3BpX2NwdWZyZXFfY3B1X2luaXRcbiIpOworCXByX2RlYnVnKCJhY3BpX2NwdWZyZXFfY3B1X2luaXRcbiIpOwogCiAJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX2FjcGlfaW8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRhdGEpCkBAIC0yODgsNyArMjg2LDcgQEAKIAogCS8qIGNhcGFiaWxpdHkgY2hlY2sgKi8KIAlpZiAoZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50IDw9IDEpIHsKLQkJZHByaW50aygiTm8gUC1TdGF0ZXNcbiIpOworCQlwcl9kZWJ1ZygiTm8gUC1TdGF0ZXNcbiIpOwogCQlyZXN1bHQgPSAtRU5PREVWOwogCQlnb3RvIGVycl91bnJlZzsKIAl9CkBAIC0yOTcsNyArMjk1LDcgQEAKIAkJCQkJQUNQSV9BRFJfU1BBQ0VfRklYRURfSEFSRFdBUkUpIHx8CiAJICAgIChkYXRhLT5hY3BpX2RhdGEuc3RhdHVzX3JlZ2lzdGVyLnNwYWNlX2lkICE9CiAJCQkJCUFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFKSkgewotCQlkcHJpbnRrKCJVbnN1cHBvcnRlZCBhZGRyZXNzIHNwYWNlIFslZCwgJWRdXG4iLAorCQlwcl9kZWJ1ZygiVW5zdXBwb3J0ZWQgYWRkcmVzcyBzcGFjZSBbJWQsICVkXVxuIiwKIAkJCSh1MzIpIChkYXRhLT5hY3BpX2RhdGEuY29udHJvbF9yZWdpc3Rlci5zcGFjZV9pZCksCiAJCQkodTMyKSAoZGF0YS0+YWNwaV9kYXRhLnN0YXR1c19yZWdpc3Rlci5zcGFjZV9pZCkpOwogCQlyZXN1bHQgPSAtRU5PREVWOwpAQCAtMzQ4LDcgKzM0Niw3IEBACiAJICAgICAgICJhY3RpdmF0ZWQuXG4iLCBjcHUpOwogCiAJZm9yIChpID0gMDsgaSA8IGRhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudDsgaSsrKQotCQlkcHJpbnRrKCIgICAgICVjUCVkOiAlZCBNSHosICVkIG1XLCAlZCB1UywgJWQgdVMsIDB4JXggMHgleFxuIiwKKwkJcHJfZGVidWcoIiAgICAgJWNQJWQ6ICVkIE1IeiwgJWQgbVcsICVkIHVTLCAlZCB1UywgMHgleCAweCV4XG4iLAogCQkJKGkgPT0gZGF0YS0+YWNwaV9kYXRhLnN0YXRlPycqJzonICcpLCBpLAogCQkJKHUzMikgZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tpXS5jb3JlX2ZyZXF1ZW5jeSwKIAkJCSh1MzIpIGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaV0ucG93ZXIsCkBAIC0zODMsNyArMzgxLDcgQEAKIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9hY3BpX2lvICpkYXRhID0gYWNwaV9pb19kYXRhW3BvbGljeS0+Y3B1XTsKIAotCWRwcmludGsoImFjcGlfY3B1ZnJlcV9jcHVfZXhpdFxuIik7CisJcHJfZGVidWcoImFjcGlfY3B1ZnJlcV9jcHVfZXhpdFxuIik7CiAKIAlpZiAoZGF0YSkgewogCQljcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9wdXRfYXR0cihwb2xpY3ktPmNwdSk7CkBAIC00MTgsNyArNDE2LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0CiBhY3BpX2NwdWZyZXFfaW5pdCAodm9pZCkKIHsKLQlkcHJpbnRrKCJhY3BpX2NwdWZyZXFfaW5pdFxuIik7CisJcHJfZGVidWcoImFjcGlfY3B1ZnJlcV9pbml0XG4iKTsKIAogIAlyZXR1cm4gY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfY3B1ZnJlcV9kcml2ZXIpOwogfQpAQCAtNDI3LDcgKzQyNSw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQKIGFjcGlfY3B1ZnJlcV9leGl0ICh2b2lkKQogewotCWRwcmludGsoImFjcGlfY3B1ZnJlcV9leGl0XG4iKTsKKwlwcl9kZWJ1ZygiYWNwaV9jcHVmcmVxX2V4aXRcbiIpOwogCiAJY3B1ZnJlcV91bnJlZ2lzdGVyX2RyaXZlcigmYWNwaV9jcHVmcmVxX2RyaXZlcik7CiAJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9jeWNsb25lLmMgYi9hcmNoL2lhNjQva2VybmVsL2N5Y2xvbmUuYwppbmRleCAxYjgxMWM2Li5mNjQwOTdiIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2N5Y2xvbmUuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2N5Y2xvbmUuYwpAQCAtMzEsOCArMzEsNiBAQAogICAgICAgICAucmF0aW5nICAgICAgICAgPSAzMDAsCiAgICAgICAgIC5yZWFkICAgICAgICAgICA9IHJlYWRfY3ljbG9uZSwKICAgICAgICAgLm1hc2sgICAgICAgICAgID0gKDFMTCA8PCA0MCkgLSAxLAotICAgICAgICAubXVsdCAgICAgICAgICAgPSAwLCAvKnRvIGJlIGNhbGN1bGF0ZWQqLwotICAgICAgICAuc2hpZnQgICAgICAgICAgPSAxNiwKICAgICAgICAgLmZsYWdzICAgICAgICAgID0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCkBAIC0xMTgsOSArMTE2LDcgQEAKIAkvKiBpbml0aWFsaXplIGxhc3QgdGljayAqLwogCWN5Y2xvbmVfbWMgPSBjeWNsb25lX3RpbWVyOwogCWNsb2Nrc291cmNlX2N5Y2xvbmUuZnN5c19tbWlvID0gY3ljbG9uZV90aW1lcjsKLQljbG9ja3NvdXJjZV9jeWNsb25lLm11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KENZQ0xPTkVfVElNRVJfRlJFUSwKLQkJCQkJCWNsb2Nrc291cmNlX2N5Y2xvbmUuc2hpZnQpOwotCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9jeWNsb25lKTsKKwljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2xvY2tzb3VyY2VfY3ljbG9uZSwgQ1lDTE9ORV9USU1FUl9GUkVRKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC90aW1lLmMgYi9hcmNoL2lhNjQva2VybmVsL3RpbWUuYwppbmRleCAxNTZhZDgwLi4wNDQ0MGNjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3RpbWUuYwpAQCAtNzMsOCArNzMsNiBAQAogCS5yYXRpbmcgICAgICAgICA9IDM1MCwKIAkucmVhZCAgICAgICAgICAgPSBpdGNfZ2V0X2N5Y2xlcywKIAkubWFzayAgICAgICAgICAgPSBDTE9DS1NPVVJDRV9NQVNLKDY0KSwKLQkubXVsdCAgICAgICAgICAgPSAwLCAvKnRvIGJlIGNhbGN1bGF0ZWQqLwotCS5zaGlmdCAgICAgICAgICA9IDE2LAogCS5mbGFncyAgICAgICAgICA9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogI2lmZGVmIENPTkZJR19QQVJBVklSVAogCS5yZXN1bWUJCT0gcGFyYXZpcnRfY2xvY2tzb3VyY2VfcmVzdW1lLApAQCAtMzY1LDExICszNjMsOCBAQAogCWlhNjRfY3B1X2xvY2FsX3RpY2soKTsKIAogCWlmICghaXRjX2Nsb2Nrc291cmNlKSB7Ci0JCS8qIFNvcnQgb3V0IG11bHQvc2hpZnQgdmFsdWVzOiAqLwotCQljbG9ja3NvdXJjZV9pdGMubXVsdCA9Ci0JCQljbG9ja3NvdXJjZV9oejJtdWx0KGxvY2FsX2NwdV9kYXRhLT5pdGNfZnJlcSwKLQkJCQkJCWNsb2Nrc291cmNlX2l0Yy5zaGlmdCk7Ci0JCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9pdGMpOworCQljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2xvY2tzb3VyY2VfaXRjLAorCQkJCQkJbG9jYWxfY3B1X2RhdGEtPml0Y19mcmVxKTsKIAkJaXRjX2Nsb2Nrc291cmNlID0gJmNsb2Nrc291cmNlX2l0YzsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2lhNjQva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNzg3ZGU0YS4uNTNjMGJhMCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMjA5LDYgKzIwOSw3IEBACiAJZGF0YSA6IHsKIAl9IDpkYXRhCiAJLmRhdGEgOiBBVChBRERSKC5kYXRhKSAtIExPQURfT0ZGU0VUKSB7CisJCV9zZGF0YSAgPSAgLjsKIAkJSU5JVF9UQVNLX0RBVEEoUEFHRV9TSVpFKQogCQlDQUNIRUxJTkVfQUxJR05FRF9EQVRBKFNNUF9DQUNIRV9CWVRFUykKIAkJUkVBRF9NT1NUTFlfREFUQShTTVBfQ0FDSEVfQllURVMpCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vZmF1bHQuYyBiL2FyY2gvaWE2NC9tbS9mYXVsdC5jCmluZGV4IDA3OTlmZWEuLjIwYjM1OTMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvaWE2NC9tbS9mYXVsdC5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9vcHJvZmlsZS9iYWNrdHJhY2UuYyBiL2FyY2gvaWE2NC9vcHJvZmlsZS9iYWNrdHJhY2UuYwppbmRleCA1Y2RkN2U0Li5mN2I3OTg5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvb3Byb2ZpbGUvYmFja3RyYWNlLmMKKysrIGIvYXJjaC9pYTY0L29wcm9maWxlL2JhY2t0cmFjZS5jCkBAIC0yOSw3ICsyOSw3IEBACiAJdW5zaWduZWQgaW50IGRlcHRoOwogCXN0cnVjdCBwdF9yZWdzICpyZWdzOwogCXN0cnVjdCB1bndfZnJhbWVfaW5mbyBmcmFtZTsKLQl1NjQgKnByZXZfcGZzX2xvYzsJLyogc3RhdGUgZm9yIFdBUiBmb3Igb2xkIHNwaW5sb2NrIG9vbCBjb2RlICovCisJdW5zaWduZWQgbG9uZyAqcHJldl9wZnNfbG9jOwkvKiBzdGF0ZSBmb3IgV0FSIGZvciBvbGQgc3BpbmxvY2sgb29sIGNvZGUgKi8KIH0gaWE2NF9iYWNrdHJhY2VfdDsKIAogLyogUmV0dXJucyBub24temVybyBpZiB0aGUgUEMgaXMgaW4gdGhlIEludGVycnVwdCBWZWN0b3IgVGFibGUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3RpbWVyLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3NuMi90aW1lci5jCmluZGV4IDIxZDZmMDkuLmMzNGVmZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3RpbWVyLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvdGltZXIuYwpAQCAtMzMsOCArMzMsNiBAQAogICAgICAgICAucmF0aW5nICAgICAgICAgPSA0NTAsCiAgICAgICAgIC5yZWFkICAgICAgICAgICA9IHJlYWRfc24yLAogICAgICAgICAubWFzayAgICAgICAgICAgPSAoMUxMIDw8IDU1KSAtIDEsCi0gICAgICAgIC5tdWx0ICAgICAgICAgICA9IDAsCi0gICAgICAgIC5zaGlmdCAgICAgICAgICA9IDEwLAogICAgICAgICAuZmxhZ3MgICAgICAgICAgPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKQEAgLTU3LDkgKzU1LDcgQEAKIHZvaWQgX19pbml0IHNuX3RpbWVyX2luaXQodm9pZCkKIHsKIAljbG9ja3NvdXJjZV9zbjIuZnN5c19tbWlvID0gUlRDX0NPVU5URVJfQUREUjsKLQljbG9ja3NvdXJjZV9zbjIubXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQoc25fcnRjX2N5Y2xlc19wZXJfc2Vjb25kLAotCQkJCQkJCWNsb2Nrc291cmNlX3NuMi5zaGlmdCk7Ci0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX3NuMik7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmNsb2Nrc291cmNlX3NuMiwgc25fcnRjX2N5Y2xlc19wZXJfc2Vjb25kKTsKIAogCWlhNjRfdWRlbGF5ID0gJmlhNjRfc25fdWRlbGF5OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9tMzJyL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGMxOTRkNjQuLmNmOTVhZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL20zMnIva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTQ0LDYgKzQ0LDcgQEAKICAgRVhDRVBUSU9OX1RBQkxFKDE2KQogICBOT1RFUwogCisgIF9zZGF0YSA9IC47CQkJLyogU3RhcnQgb2YgZGF0YSBzZWN0aW9uICovCiAgIFJPREFUQQogICBSV19EQVRBX1NFQ1RJT04oMzIsIFBBR0VfU0laRSwgVEhSRUFEX1NJWkUpCiAgIF9lZGF0YSA9IC47CQkJLyogRW5kIG9mIGRhdGEgc2VjdGlvbiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL2F0YWtleWIuYyBiL2FyY2gvbTY4ay9hdGFyaS9hdGFrZXliLmMKaW5kZXggYjk5NTUxMy4uOTUwMjJiMCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2F0YXJpL2F0YWtleWIuYworKysgYi9hcmNoL202OGsvYXRhcmkvYXRha2V5Yi5jCkBAIC0zNiwxMyArMzYsMTAgQEAKIAogLyogSG9vayBmb3IgTUlESSBzZXJpYWwgZHJpdmVyICovCiB2b2lkICgqYXRhcmlfTUlESV9pbnRlcnJ1cHRfaG9vaykgKHZvaWQpOwotLyogSG9vayBmb3IgbW91c2UgZHJpdmVyICovCi12b2lkICgqYXRhcmlfbW91c2VfaW50ZXJydXB0X2hvb2spIChjaGFyICopOwogLyogSG9vayBmb3Iga2V5Ym9hcmQgaW5wdXRkZXYgIGRyaXZlciAqLwogdm9pZCAoKmF0YXJpX2lucHV0X2tleWJvYXJkX2ludGVycnVwdF9ob29rKSAodW5zaWduZWQgY2hhciwgY2hhcik7CiAvKiBIb29rIGZvciBtb3VzZSBpbnB1dGRldiAgZHJpdmVyICovCiB2b2lkICgqYXRhcmlfaW5wdXRfbW91c2VfaW50ZXJydXB0X2hvb2spIChjaGFyICopOwotRVhQT1JUX1NZTUJPTChhdGFyaV9tb3VzZV9pbnRlcnJ1cHRfaG9vayk7CiBFWFBPUlRfU1lNQk9MKGF0YXJpX2lucHV0X2tleWJvYXJkX2ludGVycnVwdF9ob29rKTsKIEVYUE9SVF9TWU1CT0woYXRhcmlfaW5wdXRfbW91c2VfaW50ZXJydXB0X2hvb2spOwogCkBAIC0yNjMsOCArMjYwLDggQEAKIAkJCWtiX3N0YXRlLmJ1ZltrYl9zdGF0ZS5sZW4rK10gPSBzY2FuY29kZTsKIAkJCWlmIChrYl9zdGF0ZS5sZW4gPT0gMykgewogCQkJCWtiX3N0YXRlLnN0YXRlID0gS0VZQk9BUkQ7Ci0JCQkJaWYgKGF0YXJpX21vdXNlX2ludGVycnVwdF9ob29rKQotCQkJCQlhdGFyaV9tb3VzZV9pbnRlcnJ1cHRfaG9vayhrYl9zdGF0ZS5idWYpOworCQkJCWlmIChhdGFyaV9pbnB1dF9tb3VzZV9pbnRlcnJ1cHRfaG9vaykKKwkJCQkJYXRhcmlfaW5wdXRfbW91c2VfaW50ZXJydXB0X2hvb2soa2Jfc3RhdGUuYnVmKTsKIAkJCX0KIAkJCWJyZWFrOwogCkBAIC01NzUsNyArNTcyLDcgQEAKIAlrYl9zdGF0ZS5sZW4gPSAwOwogCiAJZXJyb3IgPSByZXF1ZXN0X2lycShJUlFfTUZQX0FDSUEsIGF0YXJpX2tleWJvYXJkX2ludGVycnVwdCwKLQkJCSAgICBJUlFfVFlQRV9TTE9XLCAia2V5Ym9hcmQvbW91c2UvTUlESSIsCisJCQkgICAgSVJRX1RZUEVfU0xPVywgImtleWJvYXJkLG1vdXNlLE1JREkiLAogCQkJICAgIGF0YXJpX2tleWJvYXJkX2ludGVycnVwdCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvYXRhcmkvc3RkbWEuYyBiL2FyY2gvbTY4ay9hdGFyaS9zdGRtYS5jCmluZGV4IDYwNDMyOWYuLmRkYmY0M2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hdGFyaS9zdGRtYS5jCisrKyBiL2FyY2gvbTY4ay9hdGFyaS9zdGRtYS5jCkBAIC0xODAsNyArMTgwLDcgQEAKIHsKIAlzdGRtYV9pc3IgPSBOVUxMOwogCWlmIChyZXF1ZXN0X2lycShJUlFfTUZQX0ZEQywgc3RkbWFfaW50LCBJUlFfVFlQRV9TTE9XIHwgSVJRRl9TSEFSRUQsCi0JCQkiU1QtRE1BOiBmbG9wcHkvQUNTSS9JREUvRmFsY29uLVNDU0kiLCBzdGRtYV9pbnQpKQorCQkJIlNULURNQSBmbG9wcHksQUNTSSxJREUsRmFsY29uLVNDU0kiLCBzdGRtYV9pbnQpKQogCQlwcl9lcnIoIkNvdWxkbid0IHJlZ2lzdGVyIFNULURNQSBpbnRlcnJ1cHRcbiIpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYXRhcmlrYi5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2F0YXJpa2IuaAppbmRleCA1NDZlN2RhLi42OGYzNjIyIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYXRhcmlrYi5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9hdGFyaWtiLmgKQEAgLTM0LDggKzM0LDYgQEAKIAogLyogSG9vayBmb3IgTUlESSBzZXJpYWwgZHJpdmVyICovCiBleHRlcm4gdm9pZCAoKmF0YXJpX01JRElfaW50ZXJydXB0X2hvb2spICh2b2lkKTsKLS8qIEhvb2sgZm9yIG1vdXNlIGRyaXZlciAqLwotZXh0ZXJuIHZvaWQgKCphdGFyaV9tb3VzZV9pbnRlcnJ1cHRfaG9vaykgKGNoYXIgKik7CiAvKiBIb29rIGZvciBrZXlib2FyZCBpbnB1dGRldiAgZHJpdmVyICovCiBleHRlcm4gdm9pZCAoKmF0YXJpX2lucHV0X2tleWJvYXJkX2ludGVycnVwdF9ob29rKSAodW5zaWduZWQgY2hhciwgY2hhcik7CiAvKiBIb29rIGZvciBtb3VzZSBpbnB1dGRldiAgZHJpdmVyICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYml0b3BzX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYml0b3BzX21tLmgKaW5kZXggOWQ2OWY2ZS4uZTkwMjBmOCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2JpdG9wc19tbS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9iaXRvcHNfbW0uaApAQCAtMTgxLDE0ICsxODEsMTUgQEAKIHsKIAljb25zdCB1bnNpZ25lZCBsb25nICpwID0gdmFkZHI7CiAJaW50IHJlcyA9IDMyOworCXVuc2lnbmVkIGludCB3b3JkczsKIAl1bnNpZ25lZCBsb25nIG51bTsKIAogCWlmICghc2l6ZSkKIAkJcmV0dXJuIDA7CiAKLQlzaXplID0gKHNpemUgKyAzMSkgPj4gNTsKKwl3b3JkcyA9IChzaXplICsgMzEpID4+IDU7CiAJd2hpbGUgKCEobnVtID0gfipwKyspKSB7Ci0JCWlmICghLS1zaXplKQorCQlpZiAoIS0td29yZHMpCiAJCQlnb3RvIG91dDsKIAl9CiAKQEAgLTE5Niw3ICsxOTcsOCBAQAogCQkJICAgICAgOiAiPWQiIChyZXMpIDogImQiIChudW0gJiAtbnVtKSk7CiAJcmVzIF49IDMxOwogb3V0OgotCXJldHVybiAoKGxvbmcpcCAtIChsb25nKXZhZGRyIC0gNCkgKiA4ICsgcmVzOworCXJlcyArPSAoKGxvbmcpcCAtIChsb25nKXZhZGRyIC0gNCkgKiA4OworCXJldHVybiByZXMgPCBzaXplID8gcmVzIDogc2l6ZTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZmluZF9uZXh0X3plcm9fYml0KGNvbnN0IHVuc2lnbmVkIGxvbmcgKnZhZGRyLCBpbnQgc2l6ZSwKQEAgLTIxNSwyNyArMjE3LDMyIEBACiAJCS8qIExvb2sgZm9yIHplcm8gaW4gZmlyc3QgbG9uZ3dvcmQgKi8KIAkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJiZmZmbyAlMXsjMCwjMH0sJTAiCiAJCQkJICAgICAgOiAiPWQiIChyZXMpIDogImQiIChudW0gJiAtbnVtKSk7Ci0JCWlmIChyZXMgPCAzMikKLQkJCXJldHVybiBvZmZzZXQgKyAocmVzIF4gMzEpOworCQlpZiAocmVzIDwgMzIpIHsKKwkJCW9mZnNldCArPSByZXMgXiAzMTsKKwkJCXJldHVybiBvZmZzZXQgPCBzaXplID8gb2Zmc2V0IDogc2l6ZTsKKwkJfQogCQlvZmZzZXQgKz0gMzI7CisKKwkJaWYgKG9mZnNldCA+PSBzaXplKQorCQkJcmV0dXJuIHNpemU7CiAJfQogCS8qIE5vIHplcm8geWV0LCBzZWFyY2ggcmVtYWluaW5nIGZ1bGwgYnl0ZXMgZm9yIGEgemVybyAqLwotCXJlcyA9IGZpbmRfZmlyc3RfemVyb19iaXQocCwgc2l6ZSAtICgobG9uZylwIC0gKGxvbmcpdmFkZHIpICogOCk7Ci0JcmV0dXJuIG9mZnNldCArIHJlczsKKwlyZXR1cm4gb2Zmc2V0ICsgZmluZF9maXJzdF96ZXJvX2JpdChwLCBzaXplIC0gb2Zmc2V0KTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZmluZF9maXJzdF9iaXQoY29uc3QgdW5zaWduZWQgbG9uZyAqdmFkZHIsIHVuc2lnbmVkIHNpemUpCiB7CiAJY29uc3QgdW5zaWduZWQgbG9uZyAqcCA9IHZhZGRyOwogCWludCByZXMgPSAzMjsKKwl1bnNpZ25lZCBpbnQgd29yZHM7CiAJdW5zaWduZWQgbG9uZyBudW07CiAKIAlpZiAoIXNpemUpCiAJCXJldHVybiAwOwogCi0Jc2l6ZSA9IChzaXplICsgMzEpID4+IDU7CisJd29yZHMgPSAoc2l6ZSArIDMxKSA+PiA1OwogCXdoaWxlICghKG51bSA9ICpwKyspKSB7Ci0JCWlmICghLS1zaXplKQorCQlpZiAoIS0td29yZHMpCiAJCQlnb3RvIG91dDsKIAl9CiAKQEAgLTI0Myw3ICsyNTAsOCBAQAogCQkJICAgICAgOiAiPWQiIChyZXMpIDogImQiIChudW0gJiAtbnVtKSk7CiAJcmVzIF49IDMxOwogb3V0OgotCXJldHVybiAoKGxvbmcpcCAtIChsb25nKXZhZGRyIC0gNCkgKiA4ICsgcmVzOworCXJlcyArPSAoKGxvbmcpcCAtIChsb25nKXZhZGRyIC0gNCkgKiA4OworCXJldHVybiByZXMgPCBzaXplID8gcmVzIDogc2l6ZTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZmluZF9uZXh0X2JpdChjb25zdCB1bnNpZ25lZCBsb25nICp2YWRkciwgaW50IHNpemUsCkBAIC0yNjIsMTMgKzI3MCwxNyBAQAogCQkvKiBMb29rIGZvciBvbmUgaW4gZmlyc3QgbG9uZ3dvcmQgKi8KIAkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJiZmZmbyAlMXsjMCwjMH0sJTAiCiAJCQkJICAgICAgOiAiPWQiIChyZXMpIDogImQiIChudW0gJiAtbnVtKSk7Ci0JCWlmIChyZXMgPCAzMikKLQkJCXJldHVybiBvZmZzZXQgKyAocmVzIF4gMzEpOworCQlpZiAocmVzIDwgMzIpIHsKKwkJCW9mZnNldCArPSByZXMgXiAzMTsKKwkJCXJldHVybiBvZmZzZXQgPCBzaXplID8gb2Zmc2V0IDogc2l6ZTsKKwkJfQogCQlvZmZzZXQgKz0gMzI7CisKKwkJaWYgKG9mZnNldCA+PSBzaXplKQorCQkJcmV0dXJuIHNpemU7CiAJfQogCS8qIE5vIG9uZSB5ZXQsIHNlYXJjaCByZW1haW5pbmcgZnVsbCBieXRlcyBmb3IgYSBvbmUgKi8KLQlyZXMgPSBmaW5kX2ZpcnN0X2JpdChwLCBzaXplIC0gKChsb25nKXAgLSAobG9uZyl2YWRkcikgKiA4KTsKLQlyZXR1cm4gb2Zmc2V0ICsgcmVzOworCXJldHVybiBvZmZzZXQgKyBmaW5kX2ZpcnN0X2JpdChwLCBzaXplIC0gb2Zmc2V0KTsKIH0KIAogLyoKQEAgLTM2NiwyMyArMzc4LDI1IEBACiBzdGF0aWMgaW5saW5lIGludCBmaW5kX2ZpcnN0X3plcm9fYml0X2xlKGNvbnN0IHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBzaXplKQogewogCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnAgPSB2YWRkciwgKmFkZHIgPSB2YWRkcjsKLQlpbnQgcmVzOworCWludCByZXMgPSAwOworCXVuc2lnbmVkIGludCB3b3JkczsKIAogCWlmICghc2l6ZSkKIAkJcmV0dXJuIDA7CiAKLQlzaXplID0gKHNpemUgPj4gNSkgKyAoKHNpemUgJiAzMSkgPiAwKTsKLQl3aGlsZSAoKnArKyA9PSB+MFVMKQotCXsKLQkJaWYgKC0tc2l6ZSA9PSAwKQotCQkJcmV0dXJuIChwIC0gYWRkcikgPDwgNTsKKwl3b3JkcyA9IChzaXplID4+IDUpICsgKChzaXplICYgMzEpID4gMCk7CisJd2hpbGUgKCpwKysgPT0gfjBVTCkgeworCQlpZiAoLS13b3JkcyA9PSAwKQorCQkJZ290byBvdXQ7CiAJfQogCiAJLS1wOwogCWZvciAocmVzID0gMDsgcmVzIDwgMzI7IHJlcysrKQogCQlpZiAoIXRlc3RfYml0X2xlKHJlcywgcCkpCiAJCQlicmVhazsKLQlyZXR1cm4gKHAgLSBhZGRyKSAqIDMyICsgcmVzOworb3V0OgorCXJlcyArPSAocCAtIGFkZHIpICogMzI7CisJcmV0dXJuIHJlcyA8IHNpemUgPyByZXMgOiBzaXplOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZmluZF9uZXh0X3plcm9fYml0X2xlKGNvbnN0IHZvaWQgKmFkZHIsCkBAIC00MDAsMTAgKzQxNCwxNSBAQAogCQlvZmZzZXQgLT0gYml0OwogCQkvKiBMb29rIGZvciB6ZXJvIGluIGZpcnN0IGxvbmd3b3JkICovCiAJCWZvciAocmVzID0gYml0OyByZXMgPCAzMjsgcmVzKyspCi0JCQlpZiAoIXRlc3RfYml0X2xlKHJlcywgcCkpCi0JCQkJcmV0dXJuIG9mZnNldCArIHJlczsKKwkJCWlmICghdGVzdF9iaXRfbGUocmVzLCBwKSkgeworCQkJCW9mZnNldCArPSByZXM7CisJCQkJcmV0dXJuIG9mZnNldCA8IHNpemUgPyBvZmZzZXQgOiBzaXplOworCQkJfQogCQlwKys7CiAJCW9mZnNldCArPSAzMjsKKworCQlpZiAob2Zmc2V0ID49IHNpemUpCisJCQlyZXR1cm4gc2l6ZTsKIAl9CiAJLyogTm8gemVybyB5ZXQsIHNlYXJjaCByZW1haW5pbmcgZnVsbCBieXRlcyBmb3IgYSB6ZXJvICovCiAJcmV0dXJuIG9mZnNldCArIGZpbmRfZmlyc3RfemVyb19iaXRfbGUocCwgc2l6ZSAtIG9mZnNldCk7CkBAIC00MTIsMjIgKzQzMSwyNSBAQAogc3RhdGljIGlubGluZSBpbnQgZmluZF9maXJzdF9iaXRfbGUoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIHNpemUpCiB7CiAJY29uc3QgdW5zaWduZWQgbG9uZyAqcCA9IHZhZGRyLCAqYWRkciA9IHZhZGRyOwotCWludCByZXM7CisJaW50IHJlcyA9IDA7CisJdW5zaWduZWQgaW50IHdvcmRzOwogCiAJaWYgKCFzaXplKQogCQlyZXR1cm4gMDsKIAotCXNpemUgPSAoc2l6ZSA+PiA1KSArICgoc2l6ZSAmIDMxKSA+IDApOworCXdvcmRzID0gKHNpemUgPj4gNSkgKyAoKHNpemUgJiAzMSkgPiAwKTsKIAl3aGlsZSAoKnArKyA9PSAwVUwpIHsKLQkJaWYgKC0tc2l6ZSA9PSAwKQotCQkJcmV0dXJuIChwIC0gYWRkcikgPDwgNTsKKwkJaWYgKC0td29yZHMgPT0gMCkKKwkJCWdvdG8gb3V0OwogCX0KIAogCS0tcDsKIAlmb3IgKHJlcyA9IDA7IHJlcyA8IDMyOyByZXMrKykKIAkJaWYgKHRlc3RfYml0X2xlKHJlcywgcCkpCiAJCQlicmVhazsKLQlyZXR1cm4gKHAgLSBhZGRyKSAqIDMyICsgcmVzOworb3V0OgorCXJlcyArPSAocCAtIGFkZHIpICogMzI7CisJcmV0dXJuIHJlcyA8IHNpemUgPyByZXMgOiBzaXplOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZmluZF9uZXh0X2JpdF9sZShjb25zdCB2b2lkICphZGRyLApAQCAtNDQ1LDEwICs0NjcsMTUgQEAKIAkJb2Zmc2V0IC09IGJpdDsKIAkJLyogTG9vayBmb3Igb25lIGluIGZpcnN0IGxvbmd3b3JkICovCiAJCWZvciAocmVzID0gYml0OyByZXMgPCAzMjsgcmVzKyspCi0JCQlpZiAodGVzdF9iaXRfbGUocmVzLCBwKSkKLQkJCQlyZXR1cm4gb2Zmc2V0ICsgcmVzOworCQkJaWYgKHRlc3RfYml0X2xlKHJlcywgcCkpIHsKKwkJCQlvZmZzZXQgKz0gcmVzOworCQkJCXJldHVybiBvZmZzZXQgPCBzaXplID8gb2Zmc2V0IDogc2l6ZTsKKwkJCX0KIAkJcCsrOwogCQlvZmZzZXQgKz0gMzI7CisKKwkJaWYgKG9mZnNldCA+PSBzaXplKQorCQkJcmV0dXJuIHNpemU7CiAJfQogCS8qIE5vIHNldCBiaXQgeWV0LCBzZWFyY2ggcmVtYWluaW5nIGZ1bGwgYnl0ZXMgZm9yIGEgc2V0IGJpdCAqLwogCXJldHVybiBvZmZzZXQgKyBmaW5kX2ZpcnN0X2JpdF9sZShwLCBzaXplIC0gb2Zmc2V0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCAyOWUxNzkwLi5mM2I2NDlkIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0yMiw3ICsyMiw3IEBACiAjZGVmaW5lIF9fTlJfbWtub2QJCSAxNAogI2RlZmluZSBfX05SX2NobW9kCQkgMTUKICNkZWZpbmUgX19OUl9jaG93bgkJIDE2Ci0jZGVmaW5lIF9fTlJfYnJlYWsJCSAxNworLyojZGVmaW5lIF9fTlJfYnJlYWsJCSAxNyovCiAjZGVmaW5lIF9fTlJfb2xkc3RhdAkJIDE4CiAjZGVmaW5lIF9fTlJfbHNlZWsJCSAxOQogI2RlZmluZSBfX05SX2dldHBpZAkJIDIwCkBAIC0zNiwxMSArMzYsMTEgQEAKICNkZWZpbmUgX19OUl9vbGRmc3RhdAkJIDI4CiAjZGVmaW5lIF9fTlJfcGF1c2UJCSAyOQogI2RlZmluZSBfX05SX3V0aW1lCQkgMzAKLSNkZWZpbmUgX19OUl9zdHR5CQkgMzEKLSNkZWZpbmUgX19OUl9ndHR5CQkgMzIKKy8qI2RlZmluZSBfX05SX3N0dHkJCSAzMSovCisvKiNkZWZpbmUgX19OUl9ndHR5CQkgMzIqLwogI2RlZmluZSBfX05SX2FjY2VzcwkJIDMzCiAjZGVmaW5lIF9fTlJfbmljZQkJIDM0Ci0jZGVmaW5lIF9fTlJfZnRpbWUJCSAzNQorLyojZGVmaW5lIF9fTlJfZnRpbWUJCSAzNSovCiAjZGVmaW5lIF9fTlJfc3luYwkJIDM2CiAjZGVmaW5lIF9fTlJfa2lsbAkJIDM3CiAjZGVmaW5lIF9fTlJfcmVuYW1lCQkgMzgKQEAgLTQ5LDcgKzQ5LDcgQEAKICNkZWZpbmUgX19OUl9kdXAJCSA0MQogI2RlZmluZSBfX05SX3BpcGUJCSA0MgogI2RlZmluZSBfX05SX3RpbWVzCQkgNDMKLSNkZWZpbmUgX19OUl9wcm9mCQkgNDQKKy8qI2RlZmluZSBfX05SX3Byb2YJCSA0NCovCiAjZGVmaW5lIF9fTlJfYnJrCQkgNDUKICNkZWZpbmUgX19OUl9zZXRnaWQJCSA0NgogI2RlZmluZSBfX05SX2dldGdpZAkJIDQ3CkBAIC01OCwxMyArNTgsMTMgQEAKICNkZWZpbmUgX19OUl9nZXRlZ2lkCQkgNTAKICNkZWZpbmUgX19OUl9hY2N0CQkgNTEKICNkZWZpbmUgX19OUl91bW91bnQyCQkgNTIKLSNkZWZpbmUgX19OUl9sb2NrCQkgNTMKKy8qI2RlZmluZSBfX05SX2xvY2sJCSA1MyovCiAjZGVmaW5lIF9fTlJfaW9jdGwJCSA1NAogI2RlZmluZSBfX05SX2ZjbnRsCQkgNTUKLSNkZWZpbmUgX19OUl9tcHgJCSA1NgorLyojZGVmaW5lIF9fTlJfbXB4CQkgNTYqLwogI2RlZmluZSBfX05SX3NldHBnaWQJCSA1NwotI2RlZmluZSBfX05SX3VsaW1pdAkJIDU4Ci0jZGVmaW5lIF9fTlJfb2xkb2xkdW5hbWUJIDU5CisvKiNkZWZpbmUgX19OUl91bGltaXQJCSA1OCovCisvKiNkZWZpbmUgX19OUl9vbGRvbGR1bmFtZQkgNTkqLwogI2RlZmluZSBfX05SX3VtYXNrCQkgNjAKICNkZWZpbmUgX19OUl9jaHJvb3QJCSA2MQogI2RlZmluZSBfX05SX3VzdGF0CQkgNjIKQEAgLTEwMywxMCArMTAzLDEwIEBACiAjZGVmaW5lIF9fTlJfZmNob3duCQkgOTUKICNkZWZpbmUgX19OUl9nZXRwcmlvcml0eQkgOTYKICNkZWZpbmUgX19OUl9zZXRwcmlvcml0eQkgOTcKLSNkZWZpbmUgX19OUl9wcm9maWwJCSA5OAorLyojZGVmaW5lIF9fTlJfcHJvZmlsCQkgOTgqLwogI2RlZmluZSBfX05SX3N0YXRmcwkJIDk5CiAjZGVmaW5lIF9fTlJfZnN0YXRmcwkJMTAwCi0jZGVmaW5lIF9fTlJfaW9wZXJtCQkxMDEKKy8qI2RlZmluZSBfX05SX2lvcGVybQkJMTAxKi8KICNkZWZpbmUgX19OUl9zb2NrZXRjYWxsCQkxMDIKICNkZWZpbmUgX19OUl9zeXNsb2cJCTEwMwogI2RlZmluZSBfX05SX3NldGl0aW1lcgkJMTA0CkBAIC0xMTQsMTEgKzExNCwxMSBAQAogI2RlZmluZSBfX05SX3N0YXQJCTEwNgogI2RlZmluZSBfX05SX2xzdGF0CQkxMDcKICNkZWZpbmUgX19OUl9mc3RhdAkJMTA4Ci0jZGVmaW5lIF9fTlJfb2xkdW5hbWUJCTEwOQotI2RlZmluZSBfX05SX2lvcGwJCS8qIDExMCAqLyBub3Qgc3VwcG9ydGVkCisvKiNkZWZpbmUgX19OUl9vbGR1bmFtZQkJMTA5Ki8KKy8qI2RlZmluZSBfX05SX2lvcGwJCTExMCovIC8qIG5vdCBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgX19OUl92aGFuZ3VwCQkxMTEKLSNkZWZpbmUgX19OUl9pZGxlCQkvKiAxMTIgKi8gT2Jzb2xldGUKLSNkZWZpbmUgX19OUl92bTg2CQkvKiAxMTMgKi8gbm90IHN1cHBvcnRlZAorLyojZGVmaW5lIF9fTlJfaWRsZQkJMTEyKi8gLyogT2Jzb2xldGUgKi8KKy8qI2RlZmluZSBfX05SX3ZtODYJCTExMyovIC8qIG5vdCBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgX19OUl93YWl0NAkJMTE0CiAjZGVmaW5lIF9fTlJfc3dhcG9mZgkJMTE1CiAjZGVmaW5lIF9fTlJfc3lzaW5mbwkJMTE2CkBAIC0xMzIsMTcgKzEzMiwxNyBAQAogI2RlZmluZSBfX05SX2FkanRpbWV4CQkxMjQKICNkZWZpbmUgX19OUl9tcHJvdGVjdAkJMTI1CiAjZGVmaW5lIF9fTlJfc2lncHJvY21hc2sJMTI2Ci0jZGVmaW5lIF9fTlJfY3JlYXRlX21vZHVsZQkxMjcKKy8qI2RlZmluZSBfX05SX2NyZWF0ZV9tb2R1bGUJMTI3Ki8KICNkZWZpbmUgX19OUl9pbml0X21vZHVsZQkxMjgKICNkZWZpbmUgX19OUl9kZWxldGVfbW9kdWxlCTEyOQotI2RlZmluZSBfX05SX2dldF9rZXJuZWxfc3ltcwkxMzAKKy8qI2RlZmluZSBfX05SX2dldF9rZXJuZWxfc3ltcwkxMzAqLwogI2RlZmluZSBfX05SX3F1b3RhY3RsCQkxMzEKICNkZWZpbmUgX19OUl9nZXRwZ2lkCQkxMzIKICNkZWZpbmUgX19OUl9mY2hkaXIJCTEzMwogI2RlZmluZSBfX05SX2JkZmx1c2gJCTEzNAogI2RlZmluZSBfX05SX3N5c2ZzCQkxMzUKICNkZWZpbmUgX19OUl9wZXJzb25hbGl0eQkxMzYKLSNkZWZpbmUgX19OUl9hZnNfc3lzY2FsbAkxMzcgLyogU3lzY2FsbCBmb3IgQW5kcmV3IEZpbGUgU3lzdGVtICovCisvKiNkZWZpbmUgX19OUl9hZnNfc3lzY2FsbAkxMzcqLyAvKiBTeXNjYWxsIGZvciBBbmRyZXcgRmlsZSBTeXN0ZW0gKi8KICNkZWZpbmUgX19OUl9zZXRmc3VpZAkJMTM4CiAjZGVmaW5lIF9fTlJfc2V0ZnNnaWQJCTEzOQogI2RlZmluZSBfX05SX19sbHNlZWsJCTE0MApAQCAtMTcyLDcgKzE3Miw3IEBACiAjZGVmaW5lIF9fTlJfc2V0cmVzdWlkCQkxNjQKICNkZWZpbmUgX19OUl9nZXRyZXN1aWQJCTE2NQogI2RlZmluZSBfX05SX2dldHBhZ2VzaXplCTE2NgotI2RlZmluZSBfX05SX3F1ZXJ5X21vZHVsZQkxNjcKKy8qI2RlZmluZSBfX05SX3F1ZXJ5X21vZHVsZQkxNjcqLwogI2RlZmluZSBfX05SX3BvbGwJCTE2OAogI2RlZmluZSBfX05SX25mc3NlcnZjdGwJCTE2OQogI2RlZmluZSBfX05SX3NldHJlc2dpZAkJMTcwCkBAIC0xOTMsOCArMTkzLDggQEAKICNkZWZpbmUgX19OUl9jYXBzZXQJCTE4NQogI2RlZmluZSBfX05SX3NpZ2FsdHN0YWNrCTE4NgogI2RlZmluZSBfX05SX3NlbmRmaWxlCQkxODcKLSNkZWZpbmUgX19OUl9nZXRwbXNnCQkxODgJLyogc29tZSBwZW9wbGUgYWN0dWFsbHkgd2FudCBzdHJlYW1zICovCi0jZGVmaW5lIF9fTlJfcHV0cG1zZwkJMTg5CS8qIHNvbWUgcGVvcGxlIGFjdHVhbGx5IHdhbnQgc3RyZWFtcyAqLworLyojZGVmaW5lIF9fTlJfZ2V0cG1zZwkJMTg4Ki8JLyogc29tZSBwZW9wbGUgYWN0dWFsbHkgd2FudCBzdHJlYW1zICovCisvKiNkZWZpbmUgX19OUl9wdXRwbXNnCQkxODkqLwkvKiBzb21lIHBlb3BsZSBhY3R1YWxseSB3YW50IHN0cmVhbXMgKi8KICNkZWZpbmUgX19OUl92Zm9yawkJMTkwCiAjZGVmaW5lIF9fTlJfdWdldHJsaW1pdAkJMTkxCiAjZGVmaW5lIF9fTlJfbW1hcDIJCTE5MgpAQCAtMjIzLDYgKzIyMyw4IEBACiAjZGVmaW5lIF9fTlJfc2V0ZnN1aWQzMgkJMjE1CiAjZGVmaW5lIF9fTlJfc2V0ZnNnaWQzMgkJMjE2CiAjZGVmaW5lIF9fTlJfcGl2b3Rfcm9vdAkJMjE3CisvKiAyMTgqLworLyogMjE5Ki8KICNkZWZpbmUgX19OUl9nZXRkZW50czY0CQkyMjAKICNkZWZpbmUgX19OUl9nZXR0aWQJCTIyMQogI2RlZmluZSBfX05SX3RraWxsCQkyMjIKQEAgLTI4MSw3ICsyODMsNyBAQAogI2RlZmluZSBfX05SX21xX25vdGlmeQkJMjc1CiAjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkyNzYKICNkZWZpbmUgX19OUl93YWl0aWQJCTI3NwotI2RlZmluZSBfX05SX3ZzZXJ2ZXIJCTI3OAorLyojZGVmaW5lIF9fTlJfdnNlcnZlcgkJMjc4Ki8KICNkZWZpbmUgX19OUl9hZGRfa2V5CQkyNzkKICNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleQkyODAKICNkZWZpbmUgX19OUl9rZXljdGwJCTI4MQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9NYWtlZmlsZV9tbSBiL2FyY2gvbTY4ay9rZXJuZWwvTWFrZWZpbGVfbW0KaW5kZXggNTVkNWQ2Yi4uYWNlZDY3OCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9NYWtlZmlsZV9tbQorKysgYi9hcmNoL202OGsva2VybmVsL01ha2VmaWxlX21tCkBAIC0xMCw3ICsxMCw3IEBACiBleHRyYS15CSs9IHZtbGludXgubGRzCiAKIG9iai15CTo9IGVudHJ5Lm8gcHJvY2Vzcy5vIHRyYXBzLm8gaW50cy5vIHNpZ25hbC5vIHB0cmFjZS5vIG1vZHVsZS5vIFwKLQkgICBzeXNfbTY4ay5vIHRpbWUubyBzZXR1cC5vIG02OGtfa3N5bXMubyBkZXZyZXMubworCSAgIHN5c19tNjhrLm8gdGltZS5vIHNldHVwLm8gbTY4a19rc3ltcy5vIGRldnJlcy5vIHN5c2NhbGx0YWJsZS5vCiAKIGRldnJlcy15ID0gLi4vLi4vLi4va2VybmVsL2lycS9kZXZyZXMubwogCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL2VudHJ5X21tLlMgYi9hcmNoL202OGsva2VybmVsL2VudHJ5X21tLlMKaW5kZXggMTM1OWVlNi4uYmQwZWMwNSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9lbnRyeV9tbS5TCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvZW50cnlfbW0uUwpAQCAtNDA3LDM1MSArNDA3LDMgQEAKIAogCXJ0cwogCi0uZGF0YQotQUxJR04KLXN5c19jYWxsX3RhYmxlOgotCS5sb25nIHN5c19yZXN0YXJ0X3N5c2NhbGwJLyogMCAtIG9sZCAic2V0dXAoKSIgc3lzdGVtIGNhbGwsIHVzZWQgZm9yIHJlc3RhcnRpbmcgKi8KLQkubG9uZyBzeXNfZXhpdAotCS5sb25nIHN5c19mb3JrCi0JLmxvbmcgc3lzX3JlYWQKLQkubG9uZyBzeXNfd3JpdGUKLQkubG9uZyBzeXNfb3BlbgkJLyogNSAqLwotCS5sb25nIHN5c19jbG9zZQotCS5sb25nIHN5c193YWl0cGlkCi0JLmxvbmcgc3lzX2NyZWF0Ci0JLmxvbmcgc3lzX2xpbmsKLQkubG9uZyBzeXNfdW5saW5rCS8qIDEwICovCi0JLmxvbmcgc3lzX2V4ZWN2ZQotCS5sb25nIHN5c19jaGRpcgotCS5sb25nIHN5c190aW1lCi0JLmxvbmcgc3lzX21rbm9kCi0JLmxvbmcgc3lzX2NobW9kCQkvKiAxNSAqLwotCS5sb25nIHN5c19jaG93bjE2Ci0JLmxvbmcgc3lzX25pX3N5c2NhbGwJCQkJLyogb2xkIGJyZWFrIHN5c2NhbGwgaG9sZGVyICovCi0JLmxvbmcgc3lzX3N0YXQKLQkubG9uZyBzeXNfbHNlZWsKLQkubG9uZyBzeXNfZ2V0cGlkCS8qIDIwICovCi0JLmxvbmcgc3lzX21vdW50Ci0JLmxvbmcgc3lzX29sZHVtb3VudAotCS5sb25nIHN5c19zZXR1aWQxNgotCS5sb25nIHN5c19nZXR1aWQxNgotCS5sb25nIHN5c19zdGltZQkJLyogMjUgKi8KLQkubG9uZyBzeXNfcHRyYWNlCi0JLmxvbmcgc3lzX2FsYXJtCi0JLmxvbmcgc3lzX2ZzdGF0Ci0JLmxvbmcgc3lzX3BhdXNlCi0JLmxvbmcgc3lzX3V0aW1lCQkvKiAzMCAqLwotCS5sb25nIHN5c19uaV9zeXNjYWxsCQkJCS8qIG9sZCBzdHR5IHN5c2NhbGwgaG9sZGVyICovCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJCQkJLyogb2xkIGd0dHkgc3lzY2FsbCBob2xkZXIgKi8KLQkubG9uZyBzeXNfYWNjZXNzCi0JLmxvbmcgc3lzX25pY2UKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiAzNSAqLwkvKiBvbGQgZnRpbWUgc3lzY2FsbCBob2xkZXIgKi8KLQkubG9uZyBzeXNfc3luYwotCS5sb25nIHN5c19raWxsCi0JLmxvbmcgc3lzX3JlbmFtZQotCS5sb25nIHN5c19ta2RpcgotCS5sb25nIHN5c19ybWRpcgkJLyogNDAgKi8KLQkubG9uZyBzeXNfZHVwCi0JLmxvbmcgc3lzX3BpcGUKLQkubG9uZyBzeXNfdGltZXMKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkJCQkvKiBvbGQgcHJvZiBzeXNjYWxsIGhvbGRlciAqLwotCS5sb25nIHN5c19icmsJCS8qIDQ1ICovCi0JLmxvbmcgc3lzX3NldGdpZDE2Ci0JLmxvbmcgc3lzX2dldGdpZDE2Ci0JLmxvbmcgc3lzX3NpZ25hbAotCS5sb25nIHN5c19nZXRldWlkMTYKLQkubG9uZyBzeXNfZ2V0ZWdpZDE2CS8qIDUwICovCi0JLmxvbmcgc3lzX2FjY3QKLQkubG9uZyBzeXNfdW1vdW50CQkJCS8qIHJlY3ljbGVkIG5ldmVyIHVzZWQgcGh5cygpICovCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJCQkJLyogb2xkIGxvY2sgc3lzY2FsbCBob2xkZXIgKi8KLQkubG9uZyBzeXNfaW9jdGwKLQkubG9uZyBzeXNfZmNudGwJCS8qIDU1ICovCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJCQkJLyogb2xkIG1weCBzeXNjYWxsIGhvbGRlciAqLwotCS5sb25nIHN5c19zZXRwZ2lkCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJCQkJLyogb2xkIHVsaW1pdCBzeXNjYWxsIGhvbGRlciAqLwotCS5sb25nIHN5c19uaV9zeXNjYWxsCi0JLmxvbmcgc3lzX3VtYXNrCQkvKiA2MCAqLwotCS5sb25nIHN5c19jaHJvb3QKLQkubG9uZyBzeXNfdXN0YXQKLQkubG9uZyBzeXNfZHVwMgotCS5sb25nIHN5c19nZXRwcGlkCi0JLmxvbmcgc3lzX2dldHBncnAJLyogNjUgKi8KLQkubG9uZyBzeXNfc2V0c2lkCi0JLmxvbmcgc3lzX3NpZ2FjdGlvbgotCS5sb25nIHN5c19zZ2V0bWFzawotCS5sb25nIHN5c19zc2V0bWFzawotCS5sb25nIHN5c19zZXRyZXVpZDE2CS8qIDcwICovCi0JLmxvbmcgc3lzX3NldHJlZ2lkMTYKLQkubG9uZyBzeXNfc2lnc3VzcGVuZAotCS5sb25nIHN5c19zaWdwZW5kaW5nCi0JLmxvbmcgc3lzX3NldGhvc3RuYW1lCi0JLmxvbmcgc3lzX3NldHJsaW1pdAkvKiA3NSAqLwotCS5sb25nIHN5c19vbGRfZ2V0cmxpbWl0Ci0JLmxvbmcgc3lzX2dldHJ1c2FnZQotCS5sb25nIHN5c19nZXR0aW1lb2ZkYXkKLQkubG9uZyBzeXNfc2V0dGltZW9mZGF5Ci0JLmxvbmcgc3lzX2dldGdyb3VwczE2CS8qIDgwICovCi0JLmxvbmcgc3lzX3NldGdyb3VwczE2Ci0JLmxvbmcgc3lzX29sZF9zZWxlY3QKLQkubG9uZyBzeXNfc3ltbGluawotCS5sb25nIHN5c19sc3RhdAotCS5sb25nIHN5c19yZWFkbGluawkvKiA4NSAqLwotCS5sb25nIHN5c191c2VsaWIKLQkubG9uZyBzeXNfc3dhcG9uCi0JLmxvbmcgc3lzX3JlYm9vdAotCS5sb25nIHN5c19vbGRfcmVhZGRpcgotCS5sb25nIHN5c19vbGRfbW1hcAkvKiA5MCAqLwotCS5sb25nIHN5c19tdW5tYXAKLQkubG9uZyBzeXNfdHJ1bmNhdGUKLQkubG9uZyBzeXNfZnRydW5jYXRlCi0JLmxvbmcgc3lzX2ZjaG1vZAotCS5sb25nIHN5c19mY2hvd24xNgkvKiA5NSAqLwotCS5sb25nIHN5c19nZXRwcmlvcml0eQotCS5sb25nIHN5c19zZXRwcmlvcml0eQotCS5sb25nIHN5c19uaV9zeXNjYWxsCQkJCS8qIG9sZCBwcm9maWwgc3lzY2FsbCBob2xkZXIgKi8KLQkubG9uZyBzeXNfc3RhdGZzCi0JLmxvbmcgc3lzX2ZzdGF0ZnMJLyogMTAwICovCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJCQkJLyogaW9wZXJtIGZvciBpMzg2ICovCi0JLmxvbmcgc3lzX3NvY2tldGNhbGwKLQkubG9uZyBzeXNfc3lzbG9nCi0JLmxvbmcgc3lzX3NldGl0aW1lcgotCS5sb25nIHN5c19nZXRpdGltZXIJLyogMTA1ICovCi0JLmxvbmcgc3lzX25ld3N0YXQKLQkubG9uZyBzeXNfbmV3bHN0YXQKLQkubG9uZyBzeXNfbmV3ZnN0YXQKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIDExMCAqLwkvKiBpb3BsIGZvciBpMzg2ICovCi0JLmxvbmcgc3lzX3ZoYW5ndXAKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkJCQkvKiBvYnNvbGV0ZSBpZGxlKCkgc3lzY2FsbCAqLwotCS5sb25nIHN5c19uaV9zeXNjYWxsCQkJCS8qIHZtODZvbGQgZm9yIGkzODYgKi8KLQkubG9uZyBzeXNfd2FpdDQKLQkubG9uZyBzeXNfc3dhcG9mZgkvKiAxMTUgKi8KLQkubG9uZyBzeXNfc3lzaW5mbwotCS5sb25nIHN5c19pcGMKLQkubG9uZyBzeXNfZnN5bmMKLQkubG9uZyBzeXNfc2lncmV0dXJuCi0JLmxvbmcgc3lzX2Nsb25lCQkvKiAxMjAgKi8KLQkubG9uZyBzeXNfc2V0ZG9tYWlubmFtZQotCS5sb25nIHN5c19uZXd1bmFtZQotCS5sb25nIHN5c19jYWNoZWZsdXNoCQkJCS8qIG1vZGlmeV9sZHQgZm9yIGkzODYgKi8KLQkubG9uZyBzeXNfYWRqdGltZXgKLQkubG9uZyBzeXNfbXByb3RlY3QJLyogMTI1ICovCi0JLmxvbmcgc3lzX3NpZ3Byb2NtYXNrCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJCS8qIG9sZCAiY3JlYXRlX21vZHVsZSIgKi8KLQkubG9uZyBzeXNfaW5pdF9tb2R1bGUKLQkubG9uZyBzeXNfZGVsZXRlX21vZHVsZQotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIDEzMCAtIG9sZCAiZ2V0X2tlcm5lbF9zeW1zIiAqLwotCS5sb25nIHN5c19xdW90YWN0bAotCS5sb25nIHN5c19nZXRwZ2lkCi0JLmxvbmcgc3lzX2ZjaGRpcgotCS5sb25nIHN5c19iZGZsdXNoCi0JLmxvbmcgc3lzX3N5c2ZzCQkvKiAxMzUgKi8KLQkubG9uZyBzeXNfcGVyc29uYWxpdHkKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkJCQkvKiBmb3IgYWZzX3N5c2NhbGwgKi8KLQkubG9uZyBzeXNfc2V0ZnN1aWQxNgotCS5sb25nIHN5c19zZXRmc2dpZDE2Ci0JLmxvbmcgc3lzX2xsc2VlawkvKiAxNDAgKi8KLQkubG9uZyBzeXNfZ2V0ZGVudHMKLQkubG9uZyBzeXNfc2VsZWN0Ci0JLmxvbmcgc3lzX2Zsb2NrCi0JLmxvbmcgc3lzX21zeW5jCi0JLmxvbmcgc3lzX3JlYWR2CQkvKiAxNDUgKi8KLQkubG9uZyBzeXNfd3JpdGV2Ci0JLmxvbmcgc3lzX2dldHNpZAotCS5sb25nIHN5c19mZGF0YXN5bmMKLQkubG9uZyBzeXNfc3lzY3RsCi0JLmxvbmcgc3lzX21sb2NrCQkvKiAxNTAgKi8KLQkubG9uZyBzeXNfbXVubG9jawotCS5sb25nIHN5c19tbG9ja2FsbAotCS5sb25nIHN5c19tdW5sb2NrYWxsCi0JLmxvbmcgc3lzX3NjaGVkX3NldHBhcmFtCi0JLmxvbmcgc3lzX3NjaGVkX2dldHBhcmFtCS8qIDE1NSAqLwotCS5sb25nIHN5c19zY2hlZF9zZXRzY2hlZHVsZXIKLQkubG9uZyBzeXNfc2NoZWRfZ2V0c2NoZWR1bGVyCi0JLmxvbmcgc3lzX3NjaGVkX3lpZWxkCi0JLmxvbmcgc3lzX3NjaGVkX2dldF9wcmlvcml0eV9tYXgKLQkubG9uZyBzeXNfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAgLyogMTYwICovCi0JLmxvbmcgc3lzX3NjaGVkX3JyX2dldF9pbnRlcnZhbAotCS5sb25nIHN5c19uYW5vc2xlZXAKLQkubG9uZyBzeXNfbXJlbWFwCi0JLmxvbmcgc3lzX3NldHJlc3VpZDE2Ci0JLmxvbmcgc3lzX2dldHJlc3VpZDE2CS8qIDE2NSAqLwotCS5sb25nIHN5c19nZXRwYWdlc2l6ZQotCS5sb25nIHN5c19uaV9zeXNjYWxsCQkvKiBvbGQgc3lzX3F1ZXJ5X21vZHVsZSAqLwotCS5sb25nIHN5c19wb2xsCi0JLmxvbmcgc3lzX25mc3NlcnZjdGwKLQkubG9uZyBzeXNfc2V0cmVzZ2lkMTYJLyogMTcwICovCi0JLmxvbmcgc3lzX2dldHJlc2dpZDE2Ci0JLmxvbmcgc3lzX3ByY3RsCi0JLmxvbmcgc3lzX3J0X3NpZ3JldHVybgotCS5sb25nIHN5c19ydF9zaWdhY3Rpb24KLQkubG9uZyBzeXNfcnRfc2lncHJvY21hc2sJLyogMTc1ICovCi0JLmxvbmcgc3lzX3J0X3NpZ3BlbmRpbmcKLQkubG9uZyBzeXNfcnRfc2lndGltZWR3YWl0Ci0JLmxvbmcgc3lzX3J0X3NpZ3F1ZXVlaW5mbwotCS5sb25nIHN5c19ydF9zaWdzdXNwZW5kCi0JLmxvbmcgc3lzX3ByZWFkNjQJLyogMTgwICovCi0JLmxvbmcgc3lzX3B3cml0ZTY0Ci0JLmxvbmcgc3lzX2xjaG93bjE2OwotCS5sb25nIHN5c19nZXRjd2QKLQkubG9uZyBzeXNfY2FwZ2V0Ci0JLmxvbmcgc3lzX2NhcHNldAkvKiAxODUgKi8KLQkubG9uZyBzeXNfc2lnYWx0c3RhY2sKLQkubG9uZyBzeXNfc2VuZGZpbGUKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkJCQkvKiBzdHJlYW1zMSAqLwotCS5sb25nIHN5c19uaV9zeXNjYWxsCQkJCS8qIHN0cmVhbXMyICovCi0JLmxvbmcgc3lzX3Zmb3JrCQkvKiAxOTAgKi8KLQkubG9uZyBzeXNfZ2V0cmxpbWl0Ci0JLmxvbmcgc3lzX21tYXAyCi0JLmxvbmcgc3lzX3RydW5jYXRlNjQKLQkubG9uZyBzeXNfZnRydW5jYXRlNjQKLQkubG9uZyBzeXNfc3RhdDY0CS8qIDE5NSAqLwotCS5sb25nIHN5c19sc3RhdDY0Ci0JLmxvbmcgc3lzX2ZzdGF0NjQKLQkubG9uZyBzeXNfY2hvd24KLQkubG9uZyBzeXNfZ2V0dWlkCi0JLmxvbmcgc3lzX2dldGdpZAkvKiAyMDAgKi8KLQkubG9uZyBzeXNfZ2V0ZXVpZAotCS5sb25nIHN5c19nZXRlZ2lkCi0JLmxvbmcgc3lzX3NldHJldWlkCi0JLmxvbmcgc3lzX3NldHJlZ2lkCi0JLmxvbmcgc3lzX2dldGdyb3VwcwkvKiAyMDUgKi8KLQkubG9uZyBzeXNfc2V0Z3JvdXBzCi0JLmxvbmcgc3lzX2ZjaG93bgotCS5sb25nIHN5c19zZXRyZXN1aWQKLQkubG9uZyBzeXNfZ2V0cmVzdWlkCi0JLmxvbmcgc3lzX3NldHJlc2dpZAkvKiAyMTAgKi8KLQkubG9uZyBzeXNfZ2V0cmVzZ2lkCi0JLmxvbmcgc3lzX2xjaG93bgotCS5sb25nIHN5c19zZXR1aWQKLQkubG9uZyBzeXNfc2V0Z2lkCi0JLmxvbmcgc3lzX3NldGZzdWlkCS8qIDIxNSAqLwotCS5sb25nIHN5c19zZXRmc2dpZAotCS5sb25nIHN5c19waXZvdF9yb290Ci0JLmxvbmcgc3lzX25pX3N5c2NhbGwKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAotCS5sb25nIHN5c19nZXRkZW50czY0CS8qIDIyMCAqLwotCS5sb25nIHN5c19nZXR0aWQKLQkubG9uZyBzeXNfdGtpbGwKLQkubG9uZyBzeXNfc2V0eGF0dHIKLQkubG9uZyBzeXNfbHNldHhhdHRyCi0JLmxvbmcgc3lzX2ZzZXR4YXR0cgkvKiAyMjUgKi8KLQkubG9uZyBzeXNfZ2V0eGF0dHIKLQkubG9uZyBzeXNfbGdldHhhdHRyCi0JLmxvbmcgc3lzX2ZnZXR4YXR0cgotCS5sb25nIHN5c19saXN0eGF0dHIKLQkubG9uZyBzeXNfbGxpc3R4YXR0cgkvKiAyMzAgKi8KLQkubG9uZyBzeXNfZmxpc3R4YXR0cgotCS5sb25nIHN5c19yZW1vdmV4YXR0cgotCS5sb25nIHN5c19scmVtb3ZleGF0dHIKLQkubG9uZyBzeXNfZnJlbW92ZXhhdHRyCi0JLmxvbmcgc3lzX2Z1dGV4CQkvKiAyMzUgKi8KLQkubG9uZyBzeXNfc2VuZGZpbGU2NAotCS5sb25nIHN5c19taW5jb3JlCi0JLmxvbmcgc3lzX21hZHZpc2UKLQkubG9uZyBzeXNfZmNudGw2NAotCS5sb25nIHN5c19yZWFkYWhlYWQJLyogMjQwICovCi0JLmxvbmcgc3lzX2lvX3NldHVwCi0JLmxvbmcgc3lzX2lvX2Rlc3Ryb3kKLQkubG9uZyBzeXNfaW9fZ2V0ZXZlbnRzCi0JLmxvbmcgc3lzX2lvX3N1Ym1pdAotCS5sb25nIHN5c19pb19jYW5jZWwJLyogMjQ1ICovCi0JLmxvbmcgc3lzX2ZhZHZpc2U2NAotCS5sb25nIHN5c19leGl0X2dyb3VwCi0JLmxvbmcgc3lzX2xvb2t1cF9kY29va2llCi0JLmxvbmcgc3lzX2Vwb2xsX2NyZWF0ZQotCS5sb25nIHN5c19lcG9sbF9jdGwJLyogMjUwICovCi0JLmxvbmcgc3lzX2Vwb2xsX3dhaXQKLQkubG9uZyBzeXNfcmVtYXBfZmlsZV9wYWdlcwotCS5sb25nIHN5c19zZXRfdGlkX2FkZHJlc3MKLQkubG9uZyBzeXNfdGltZXJfY3JlYXRlCi0JLmxvbmcgc3lzX3RpbWVyX3NldHRpbWUJLyogMjU1ICovCi0JLmxvbmcgc3lzX3RpbWVyX2dldHRpbWUKLQkubG9uZyBzeXNfdGltZXJfZ2V0b3ZlcnJ1bgotCS5sb25nIHN5c190aW1lcl9kZWxldGUKLQkubG9uZyBzeXNfY2xvY2tfc2V0dGltZQotCS5sb25nIHN5c19jbG9ja19nZXR0aW1lCS8qIDI2MCAqLwotCS5sb25nIHN5c19jbG9ja19nZXRyZXMKLQkubG9uZyBzeXNfY2xvY2tfbmFub3NsZWVwCi0JLmxvbmcgc3lzX3N0YXRmczY0Ci0JLmxvbmcgc3lzX2ZzdGF0ZnM2NAotCS5sb25nIHN5c190Z2tpbGwJLyogMjY1ICovCi0JLmxvbmcgc3lzX3V0aW1lcwotCS5sb25nIHN5c19mYWR2aXNlNjRfNjQKLQkubG9uZyBzeXNfbWJpbmQKLQkubG9uZyBzeXNfZ2V0X21lbXBvbGljeQotCS5sb25nIHN5c19zZXRfbWVtcG9saWN5CS8qIDI3MCAqLwotCS5sb25nIHN5c19tcV9vcGVuCi0JLmxvbmcgc3lzX21xX3VubGluawotCS5sb25nIHN5c19tcV90aW1lZHNlbmQKLQkubG9uZyBzeXNfbXFfdGltZWRyZWNlaXZlCi0JLmxvbmcgc3lzX21xX25vdGlmeQkvKiAyNzUgKi8KLQkubG9uZyBzeXNfbXFfZ2V0c2V0YXR0cgotCS5sb25nIHN5c193YWl0aWQKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBmb3Igc3lzX3ZzZXJ2ZXIgKi8KLQkubG9uZyBzeXNfYWRkX2tleQotCS5sb25nIHN5c19yZXF1ZXN0X2tleQkvKiAyODAgKi8KLQkubG9uZyBzeXNfa2V5Y3RsCi0JLmxvbmcgc3lzX2lvcHJpb19zZXQKLQkubG9uZyBzeXNfaW9wcmlvX2dldAotCS5sb25nIHN5c19pbm90aWZ5X2luaXQKLQkubG9uZyBzeXNfaW5vdGlmeV9hZGRfd2F0Y2gJLyogMjg1ICovCi0JLmxvbmcgc3lzX2lub3RpZnlfcm1fd2F0Y2gKLQkubG9uZyBzeXNfbWlncmF0ZV9wYWdlcwotCS5sb25nIHN5c19vcGVuYXQKLQkubG9uZyBzeXNfbWtkaXJhdAotCS5sb25nIHN5c19ta25vZGF0CQkvKiAyOTAgKi8KLQkubG9uZyBzeXNfZmNob3duYXQKLQkubG9uZyBzeXNfZnV0aW1lc2F0Ci0JLmxvbmcgc3lzX2ZzdGF0YXQ2NAotCS5sb25nIHN5c191bmxpbmthdAotCS5sb25nIHN5c19yZW5hbWVhdAkJLyogMjk1ICovCi0JLmxvbmcgc3lzX2xpbmthdAotCS5sb25nIHN5c19zeW1saW5rYXQKLQkubG9uZyBzeXNfcmVhZGxpbmthdAotCS5sb25nIHN5c19mY2htb2RhdAotCS5sb25nIHN5c19mYWNjZXNzYXQJCS8qIDMwMCAqLwotCS5sb25nIHN5c19uaV9zeXNjYWxsCQkvKiBSZXNlcnZlZCBmb3IgcHNlbGVjdDYgKi8KLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogUmVzZXJ2ZWQgZm9yIHBwb2xsICovCi0JLmxvbmcgc3lzX3Vuc2hhcmUKLQkubG9uZyBzeXNfc2V0X3JvYnVzdF9saXN0Ci0JLmxvbmcgc3lzX2dldF9yb2J1c3RfbGlzdAkvKiAzMDUgKi8KLQkubG9uZyBzeXNfc3BsaWNlCi0JLmxvbmcgc3lzX3N5bmNfZmlsZV9yYW5nZQotCS5sb25nIHN5c190ZWUKLQkubG9uZyBzeXNfdm1zcGxpY2UKLQkubG9uZyBzeXNfbW92ZV9wYWdlcwkJLyogMzEwICovCi0JLmxvbmcgc3lzX3NjaGVkX3NldGFmZmluaXR5Ci0JLmxvbmcgc3lzX3NjaGVkX2dldGFmZmluaXR5Ci0JLmxvbmcgc3lzX2tleGVjX2xvYWQKLQkubG9uZyBzeXNfZ2V0Y3B1Ci0JLmxvbmcgc3lzX2Vwb2xsX3B3YWl0CQkvKiAzMTUgKi8KLQkubG9uZyBzeXNfdXRpbWVuc2F0Ci0JLmxvbmcgc3lzX3NpZ25hbGZkCi0JLmxvbmcgc3lzX3RpbWVyZmRfY3JlYXRlCi0JLmxvbmcgc3lzX2V2ZW50ZmQKLQkubG9uZyBzeXNfZmFsbG9jYXRlCQkvKiAzMjAgKi8KLQkubG9uZyBzeXNfdGltZXJmZF9zZXR0aW1lCi0JLmxvbmcgc3lzX3RpbWVyZmRfZ2V0dGltZQotCS5sb25nIHN5c19zaWduYWxmZDQKLQkubG9uZyBzeXNfZXZlbnRmZDIKLQkubG9uZyBzeXNfZXBvbGxfY3JlYXRlMQkJLyogMzI1ICovCi0JLmxvbmcgc3lzX2R1cDMKLQkubG9uZyBzeXNfcGlwZTIKLQkubG9uZyBzeXNfaW5vdGlmeV9pbml0MQotCS5sb25nIHN5c19wcmVhZHYKLQkubG9uZyBzeXNfcHdyaXRldgkJLyogMzMwICovCi0JLmxvbmcgc3lzX3J0X3Rnc2lncXVldWVpbmZvCi0JLmxvbmcgc3lzX3BlcmZfZXZlbnRfb3BlbgotCS5sb25nIHN5c19nZXRfdGhyZWFkX2FyZWEKLQkubG9uZyBzeXNfc2V0X3RocmVhZF9hcmVhCi0JLmxvbmcgc3lzX2F0b21pY19jbXB4Y2hnXzMyCS8qIDMzNSAqLwotCS5sb25nIHN5c19hdG9taWNfYmFycmllcgotCS5sb25nIHN5c19mYW5vdGlmeV9pbml0Ci0JLmxvbmcgc3lzX2Zhbm90aWZ5X21hcmsKLQkubG9uZyBzeXNfcHJsaW1pdDY0Ci0JLmxvbmcgc3lzX25hbWVfdG9faGFuZGxlX2F0CS8qIDM0MCAqLwotCS5sb25nIHN5c19vcGVuX2J5X2hhbmRsZV9hdAotCS5sb25nIHN5c19jbG9ja19hZGp0aW1lCi0JLmxvbmcgc3lzX3N5bmNmcwotCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3N5c2NhbGx0YWJsZS5TIGIvYXJjaC9tNjhrL2tlcm5lbC9zeXNjYWxsdGFibGUuUwppbmRleCA5YjgzOTNkLi41OTA5ZTM5IDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL3N5c2NhbGx0YWJsZS5TCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvc3lzY2FsbHRhYmxlLlMKQEAgLTEsNiArMSw0IEBACiAvKgotICogIGxpbnV4L2FyY2gvbTY4a25vbW11L2tlcm5lbC9zeXNjYWxsdGFibGUuUwotICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDIsIEdyZWcgVW5nZXJlciAoZ2VyZ0BzbmFwZ2Vhci5jb20pCiAgKgogICogIEJhc2VkIG9uIG9sZGVyIGVudHJ5LlMgZmlsZXMsIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0cyBhcHBseToKQEAgLTksMTcxICs3LDE3NiBAQAogICogICAgICAgICAgICAgICAgICAgICAgS2VubmV0aCBBbGJhbm93c2tpIDxramFoZHNAa2phaGRzLmNvbT4sCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAwICBMaW5lbyBJbmMuICh3d3cubGluZW8uY29tKSAKICAqICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzCisgKgorICogIExpbnV4L202OGsgc3VwcG9ydCBieSBIYW1pc2ggTWFjZG9uYWxkCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3N5cy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLS50ZXh0CisjaWZuZGVmIENPTkZJR19NTVUKKyNkZWZpbmUgc3lzX21tYXAyCQlzeXNfbW1hcF9wZ29mZgorI2VuZGlmCisKKy5zZWN0aW9uIC5yb2RhdGEKIEFMSUdOCiBFTlRSWShzeXNfY2FsbF90YWJsZSkKLQkubG9uZyBzeXNfcmVzdGFydF9zeXNjYWxsCS8qIDAgIC0gIG9sZCAic2V0dXAoKSIgc3lzdGVtIGNhbGwgKi8KKwkubG9uZyBzeXNfcmVzdGFydF9zeXNjYWxsCS8qIDAgLSBvbGQgInNldHVwKCkiIHN5c3RlbSBjYWxsLCB1c2VkIGZvciByZXN0YXJ0aW5nICovCiAJLmxvbmcgc3lzX2V4aXQKIAkubG9uZyBzeXNfZm9yawogCS5sb25nIHN5c19yZWFkCiAJLmxvbmcgc3lzX3dyaXRlCi0JLmxvbmcgc3lzX29wZW4JCS8qIDUgKi8KKwkubG9uZyBzeXNfb3BlbgkJCS8qIDUgKi8KIAkubG9uZyBzeXNfY2xvc2UKIAkubG9uZyBzeXNfd2FpdHBpZAogCS5sb25nIHN5c19jcmVhdAogCS5sb25nIHN5c19saW5rCi0JLmxvbmcgc3lzX3VubGluawkvKiAxMCAqLworCS5sb25nIHN5c191bmxpbmsJCS8qIDEwICovCiAJLmxvbmcgc3lzX2V4ZWN2ZQogCS5sb25nIHN5c19jaGRpcgogCS5sb25nIHN5c190aW1lCiAJLmxvbmcgc3lzX21rbm9kCi0JLmxvbmcgc3lzX2NobW9kCQkvKiAxNSAqLworCS5sb25nIHN5c19jaG1vZAkJCS8qIDE1ICovCiAJLmxvbmcgc3lzX2Nob3duMTYKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgYnJlYWsgc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogb2xkIGJyZWFrIHN5c2NhbGwgaG9sZGVyICovCiAJLmxvbmcgc3lzX3N0YXQKIAkubG9uZyBzeXNfbHNlZWsKLQkubG9uZyBzeXNfZ2V0cGlkCS8qIDIwICovCisJLmxvbmcgc3lzX2dldHBpZAkJLyogMjAgKi8KIAkubG9uZyBzeXNfbW91bnQKIAkubG9uZyBzeXNfb2xkdW1vdW50CiAJLmxvbmcgc3lzX3NldHVpZDE2CiAJLmxvbmcgc3lzX2dldHVpZDE2Ci0JLmxvbmcgc3lzX3N0aW1lCQkvKiAyNSAqLworCS5sb25nIHN5c19zdGltZQkJCS8qIDI1ICovCiAJLmxvbmcgc3lzX3B0cmFjZQogCS5sb25nIHN5c19hbGFybQogCS5sb25nIHN5c19mc3RhdAogCS5sb25nIHN5c19wYXVzZQotCS5sb25nIHN5c191dGltZQkJLyogMzAgKi8KLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgc3R0eSBzeXNjYWxsIGhvbGRlciAqLwotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCBndHR5IHN5c2NhbGwgaG9sZGVyICovCisJLmxvbmcgc3lzX3V0aW1lCQkJLyogMzAgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogb2xkIHN0dHkgc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogb2xkIGd0dHkgc3lzY2FsbCBob2xkZXIgKi8KIAkubG9uZyBzeXNfYWNjZXNzCiAJLmxvbmcgc3lzX25pY2UKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiAzNSAqLyAvKiBvbGQgZnRpbWUgc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogMzUgLSBvbGQgZnRpbWUgc3lzY2FsbCBob2xkZXIgKi8KIAkubG9uZyBzeXNfc3luYwogCS5sb25nIHN5c19raWxsCiAJLmxvbmcgc3lzX3JlbmFtZQogCS5sb25nIHN5c19ta2RpcgotCS5sb25nIHN5c19ybWRpcgkJLyogNDAgKi8KKwkubG9uZyBzeXNfcm1kaXIJCQkvKiA0MCAqLwogCS5sb25nIHN5c19kdXAKIAkubG9uZyBzeXNfcGlwZQogCS5sb25nIHN5c190aW1lcwotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCBwcm9mIHN5c2NhbGwgaG9sZGVyICovCi0JLmxvbmcgc3lzX2JyawkJLyogNDUgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogb2xkIHByb2Ygc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfYnJrCQkJLyogNDUgKi8KIAkubG9uZyBzeXNfc2V0Z2lkMTYKIAkubG9uZyBzeXNfZ2V0Z2lkMTYKIAkubG9uZyBzeXNfc2lnbmFsCiAJLmxvbmcgc3lzX2dldGV1aWQxNgotCS5sb25nIHN5c19nZXRlZ2lkMTYJLyogNTAgKi8KKwkubG9uZyBzeXNfZ2V0ZWdpZDE2CQkvKiA1MCAqLwogCS5sb25nIHN5c19hY2N0Ci0JLmxvbmcgc3lzX3Vtb3VudAkvKiByZWN5Y2xlZCBuZXZlciB1c2VkIHBoeXMoKSAqLwotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCBsb2NrIHN5c2NhbGwgaG9sZGVyICovCisJLmxvbmcgc3lzX3Vtb3VudAkJLyogcmVjeWNsZWQgbmV2ZXIgdXNlZCBwaHlzKCkgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogb2xkIGxvY2sgc3lzY2FsbCBob2xkZXIgKi8KIAkubG9uZyBzeXNfaW9jdGwKLQkubG9uZyBzeXNfZmNudGwJCS8qIDU1ICovCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogb2xkIG1weCBzeXNjYWxsIGhvbGRlciAqLworCS5sb25nIHN5c19mY250bAkJCS8qIDU1ICovCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJCS8qIG9sZCBtcHggc3lzY2FsbCBob2xkZXIgKi8KIAkubG9uZyBzeXNfc2V0cGdpZAotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCB1bGltaXQgc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogb2xkIHVsaW1pdCBzeXNjYWxsIGhvbGRlciAqLwogCS5sb25nIHN5c19uaV9zeXNjYWxsCi0JLmxvbmcgc3lzX3VtYXNrCQkvKiA2MCAqLworCS5sb25nIHN5c191bWFzawkJCS8qIDYwICovCiAJLmxvbmcgc3lzX2Nocm9vdAogCS5sb25nIHN5c191c3RhdAogCS5sb25nIHN5c19kdXAyCiAJLmxvbmcgc3lzX2dldHBwaWQKLQkubG9uZyBzeXNfZ2V0cGdycAkvKiA2NSAqLworCS5sb25nIHN5c19nZXRwZ3JwCQkvKiA2NSAqLwogCS5sb25nIHN5c19zZXRzaWQKIAkubG9uZyBzeXNfc2lnYWN0aW9uCiAJLmxvbmcgc3lzX3NnZXRtYXNrCiAJLmxvbmcgc3lzX3NzZXRtYXNrCi0JLmxvbmcgc3lzX3NldHJldWlkMTYJLyogNzAgKi8KKwkubG9uZyBzeXNfc2V0cmV1aWQxNgkJLyogNzAgKi8KIAkubG9uZyBzeXNfc2V0cmVnaWQxNgogCS5sb25nIHN5c19zaWdzdXNwZW5kCiAJLmxvbmcgc3lzX3NpZ3BlbmRpbmcKIAkubG9uZyBzeXNfc2V0aG9zdG5hbWUKLQkubG9uZyBzeXNfc2V0cmxpbWl0CS8qIDc1ICovCisJLmxvbmcgc3lzX3NldHJsaW1pdAkJLyogNzUgKi8KIAkubG9uZyBzeXNfb2xkX2dldHJsaW1pdAogCS5sb25nIHN5c19nZXRydXNhZ2UKIAkubG9uZyBzeXNfZ2V0dGltZW9mZGF5CiAJLmxvbmcgc3lzX3NldHRpbWVvZmRheQotCS5sb25nIHN5c19nZXRncm91cHMxNgkvKiA4MCAqLworCS5sb25nIHN5c19nZXRncm91cHMxNgkJLyogODAgKi8KIAkubG9uZyBzeXNfc2V0Z3JvdXBzMTYKIAkubG9uZyBzeXNfb2xkX3NlbGVjdAogCS5sb25nIHN5c19zeW1saW5rCiAJLmxvbmcgc3lzX2xzdGF0Ci0JLmxvbmcgc3lzX3JlYWRsaW5rCS8qIDg1ICovCisJLmxvbmcgc3lzX3JlYWRsaW5rCQkvKiA4NSAqLwogCS5sb25nIHN5c191c2VsaWIKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBzeXNfc3dhcG9uICovCisJLmxvbmcgc3lzX3N3YXBvbgogCS5sb25nIHN5c19yZWJvb3QKIAkubG9uZyBzeXNfb2xkX3JlYWRkaXIKLQkubG9uZyBzeXNfb2xkX21tYXAJLyogOTAgKi8KKwkubG9uZyBzeXNfb2xkX21tYXAJCS8qIDkwICovCiAJLmxvbmcgc3lzX211bm1hcAogCS5sb25nIHN5c190cnVuY2F0ZQogCS5sb25nIHN5c19mdHJ1bmNhdGUKIAkubG9uZyBzeXNfZmNobW9kCi0JLmxvbmcgc3lzX2ZjaG93bjE2CS8qIDk1ICovCisJLmxvbmcgc3lzX2ZjaG93bjE2CQkvKiA5NSAqLwogCS5sb25nIHN5c19nZXRwcmlvcml0eQogCS5sb25nIHN5c19zZXRwcmlvcml0eQotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCBwcm9maWwgc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogb2xkIHByb2ZpbCBzeXNjYWxsIGhvbGRlciAqLwogCS5sb25nIHN5c19zdGF0ZnMKLQkubG9uZyBzeXNfZnN0YXRmcwkvKiAxMDAgKi8KLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBpb3Blcm0gZm9yIGkzODYgKi8KKwkubG9uZyBzeXNfZnN0YXRmcwkJLyogMTAwICovCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJCS8qIGlvcGVybSBmb3IgaTM4NiAqLwogCS5sb25nIHN5c19zb2NrZXRjYWxsCiAJLmxvbmcgc3lzX3N5c2xvZwogCS5sb25nIHN5c19zZXRpdGltZXIKLQkubG9uZyBzeXNfZ2V0aXRpbWVyCS8qIDEwNSAqLworCS5sb25nIHN5c19nZXRpdGltZXIJCS8qIDEwNSAqLwogCS5sb25nIHN5c19uZXdzdGF0CiAJLmxvbmcgc3lzX25ld2xzdGF0CiAJLmxvbmcgc3lzX25ld2ZzdGF0CiAJLmxvbmcgc3lzX25pX3N5c2NhbGwKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBpb3BsIGZvciBpMzg2ICovIC8qIDExMCAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCQkvKiAxMTAgLSBpb3BsIGZvciBpMzg2ICovCiAJLmxvbmcgc3lzX3ZoYW5ndXAKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvYnNvbGV0ZSBpZGxlKCkgc3lzY2FsbCAqLwotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIHZtODZvbGQgZm9yIGkzODYgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogb2Jzb2xldGUgaWRsZSgpIHN5c2NhbGwgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogdm04Nm9sZCBmb3IgaTM4NiAqLwogCS5sb25nIHN5c193YWl0NAotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIDExNSAqLyAvKiBzeXNfc3dhcG9mZiAqLworCS5sb25nIHN5c19zd2Fwb2ZmCQkvKiAxMTUgKi8KIAkubG9uZyBzeXNfc3lzaW5mbwogCS5sb25nIHN5c19pcGMKIAkubG9uZyBzeXNfZnN5bmMKIAkubG9uZyBzeXNfc2lncmV0dXJuCi0JLmxvbmcgc3lzX2Nsb25lCQkvKiAxMjAgKi8KKwkubG9uZyBzeXNfY2xvbmUJCQkvKiAxMjAgKi8KIAkubG9uZyBzeXNfc2V0ZG9tYWlubmFtZQogCS5sb25nIHN5c19uZXd1bmFtZQotCS5sb25nIHN5c19jYWNoZWZsdXNoCS8qIG1vZGlmeV9sZHQgZm9yIGkzODYgKi8KKwkubG9uZyBzeXNfY2FjaGVmbHVzaAkJLyogbW9kaWZ5X2xkdCBmb3IgaTM4NiAqLwogCS5sb25nIHN5c19hZGp0aW1leAotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIDEyNSAqLyAvKiBzeXNfbXByb3RlY3QgKi8KKwkubG9uZyBzeXNfbXByb3RlY3QJCS8qIDEyNSAqLwogCS5sb25nIHN5c19zaWdwcm9jbWFzawotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCAiY3JlYXRfbW9kdWxlIiAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCQkvKiBvbGQgImNyZWF0ZV9tb2R1bGUiICovCiAJLmxvbmcgc3lzX2luaXRfbW9kdWxlCiAJLmxvbmcgc3lzX2RlbGV0ZV9tb2R1bGUKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiAxMzA6IG9sZCAiZ2V0X2tlcm5lbF9zeW1zIiAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCQkvKiAxMzAgLSBvbGQgImdldF9rZXJuZWxfc3ltcyIgKi8KIAkubG9uZyBzeXNfcXVvdGFjdGwKIAkubG9uZyBzeXNfZ2V0cGdpZAogCS5sb25nIHN5c19mY2hkaXIKIAkubG9uZyBzeXNfYmRmbHVzaAotCS5sb25nIHN5c19zeXNmcwkJLyogMTM1ICovCisJLmxvbmcgc3lzX3N5c2ZzCQkJLyogMTM1ICovCiAJLmxvbmcgc3lzX3BlcnNvbmFsaXR5Ci0JLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogZm9yIGFmc19zeXNjYWxsICovCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJCS8qIGZvciBhZnNfc3lzY2FsbCAqLwogCS5sb25nIHN5c19zZXRmc3VpZDE2CiAJLmxvbmcgc3lzX3NldGZzZ2lkMTYKLQkubG9uZyBzeXNfbGxzZWVrCS8qIDE0MCAqLworCS5sb25nIHN5c19sbHNlZWsJCS8qIDE0MCAqLwogCS5sb25nIHN5c19nZXRkZW50cwogCS5sb25nIHN5c19zZWxlY3QKIAkubG9uZyBzeXNfZmxvY2sKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBzeXNfbXN5bmMgKi8KLQkubG9uZyBzeXNfcmVhZHYJCS8qIDE0NSAqLworCS5sb25nIHN5c19tc3luYworCS5sb25nIHN5c19yZWFkdgkJCS8qIDE0NSAqLwogCS5sb25nIHN5c193cml0ZXYKIAkubG9uZyBzeXNfZ2V0c2lkCiAJLmxvbmcgc3lzX2ZkYXRhc3luYwogCS5sb25nIHN5c19zeXNjdGwKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiAxNTAgKi8gLyogc3lzX21sb2NrICovCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogc3lzX211bmxvY2sgKi8KLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBzeXNfbWxvY2thbGwgKi8KLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBzeXNfbXVubG9ja2FsbCAqLworCS5sb25nIHN5c19tbG9jawkJCS8qIDE1MCAqLworCS5sb25nIHN5c19tdW5sb2NrCisJLmxvbmcgc3lzX21sb2NrYWxsCisJLmxvbmcgc3lzX211bmxvY2thbGwKIAkubG9uZyBzeXNfc2NoZWRfc2V0cGFyYW0KLQkubG9uZyBzeXNfc2NoZWRfZ2V0cGFyYW0gLyogMTU1ICovCisJLmxvbmcgc3lzX3NjaGVkX2dldHBhcmFtCS8qIDE1NSAqLwogCS5sb25nIHN5c19zY2hlZF9zZXRzY2hlZHVsZXIKIAkubG9uZyBzeXNfc2NoZWRfZ2V0c2NoZWR1bGVyCiAJLmxvbmcgc3lzX3NjaGVkX3lpZWxkCkBAIC0xODEsMTI0ICsxODQsMTI0IEBACiAJLmxvbmcgc3lzX3NjaGVkX2dldF9wcmlvcml0eV9taW4gIC8qIDE2MCAqLwogCS5sb25nIHN5c19zY2hlZF9ycl9nZXRfaW50ZXJ2YWwKIAkubG9uZyBzeXNfbmFub3NsZWVwCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogc3lzX21yZW1hcCAqLworCS5sb25nIHN5c19tcmVtYXAKIAkubG9uZyBzeXNfc2V0cmVzdWlkMTYKLQkubG9uZyBzeXNfZ2V0cmVzdWlkMTYJLyogMTY1ICovCi0JLmxvbmcgc3lzX2dldHBhZ2VzaXplCS8qIHN5c19nZXRwYWdlc2l6ZSAqLwotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCAicXVlcnlfbW9kdWxlIiAqLworCS5sb25nIHN5c19nZXRyZXN1aWQxNgkJLyogMTY1ICovCisJLmxvbmcgc3lzX2dldHBhZ2VzaXplCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJCS8qIG9sZCAicXVlcnlfbW9kdWxlIiAqLwogCS5sb25nIHN5c19wb2xsCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogc3lzX25mc3NlcnZjdGwgKi8KLQkubG9uZyBzeXNfc2V0cmVzZ2lkMTYJLyogMTcwICovCisJLmxvbmcgc3lzX25mc3NlcnZjdGwKKwkubG9uZyBzeXNfc2V0cmVzZ2lkMTYJCS8qIDE3MCAqLwogCS5sb25nIHN5c19nZXRyZXNnaWQxNgogCS5sb25nIHN5c19wcmN0bAogCS5sb25nIHN5c19ydF9zaWdyZXR1cm4KIAkubG9uZyBzeXNfcnRfc2lnYWN0aW9uCi0JLmxvbmcgc3lzX3J0X3NpZ3Byb2NtYXNrIC8qIDE3NSAqLworCS5sb25nIHN5c19ydF9zaWdwcm9jbWFzawkvKiAxNzUgKi8KIAkubG9uZyBzeXNfcnRfc2lncGVuZGluZwogCS5sb25nIHN5c19ydF9zaWd0aW1lZHdhaXQKIAkubG9uZyBzeXNfcnRfc2lncXVldWVpbmZvCiAJLmxvbmcgc3lzX3J0X3NpZ3N1c3BlbmQKLQkubG9uZyBzeXNfcHJlYWQ2NAkvKiAxODAgKi8KKwkubG9uZyBzeXNfcHJlYWQ2NAkJLyogMTgwICovCiAJLmxvbmcgc3lzX3B3cml0ZTY0CiAJLmxvbmcgc3lzX2xjaG93bjE2CiAJLmxvbmcgc3lzX2dldGN3ZAogCS5sb25nIHN5c19jYXBnZXQKLQkubG9uZyBzeXNfY2Fwc2V0CS8qIDE4NSAqLworCS5sb25nIHN5c19jYXBzZXQJCS8qIDE4NSAqLwogCS5sb25nIHN5c19zaWdhbHRzdGFjawogCS5sb25nIHN5c19zZW5kZmlsZQotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIHN0cmVhbXMxICovCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogc3RyZWFtczIgKi8KLQkubG9uZyBzeXNfdmZvcmsJCS8qIDE5MCAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCQkvKiBzdHJlYW1zMSAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCQkvKiBzdHJlYW1zMiAqLworCS5sb25nIHN5c192Zm9yawkJCS8qIDE5MCAqLwogCS5sb25nIHN5c19nZXRybGltaXQKLQkubG9uZyBzeXNfbW1hcF9wZ29mZgorCS5sb25nIHN5c19tbWFwMgogCS5sb25nIHN5c190cnVuY2F0ZTY0CiAJLmxvbmcgc3lzX2Z0cnVuY2F0ZTY0Ci0JLmxvbmcgc3lzX3N0YXQ2NAkvKiAxOTUgKi8KKwkubG9uZyBzeXNfc3RhdDY0CQkvKiAxOTUgKi8KIAkubG9uZyBzeXNfbHN0YXQ2NAogCS5sb25nIHN5c19mc3RhdDY0CiAJLmxvbmcgc3lzX2Nob3duCiAJLmxvbmcgc3lzX2dldHVpZAotCS5sb25nIHN5c19nZXRnaWQJLyogMjAwICovCisJLmxvbmcgc3lzX2dldGdpZAkJLyogMjAwICovCiAJLmxvbmcgc3lzX2dldGV1aWQKIAkubG9uZyBzeXNfZ2V0ZWdpZAogCS5sb25nIHN5c19zZXRyZXVpZAogCS5sb25nIHN5c19zZXRyZWdpZAotCS5sb25nIHN5c19nZXRncm91cHMJLyogMjA1ICovCisJLmxvbmcgc3lzX2dldGdyb3VwcwkJLyogMjA1ICovCiAJLmxvbmcgc3lzX3NldGdyb3VwcwogCS5sb25nIHN5c19mY2hvd24KIAkubG9uZyBzeXNfc2V0cmVzdWlkCiAJLmxvbmcgc3lzX2dldHJlc3VpZAotCS5sb25nIHN5c19zZXRyZXNnaWQJLyogMjEwICovCisJLmxvbmcgc3lzX3NldHJlc2dpZAkJLyogMjEwICovCiAJLmxvbmcgc3lzX2dldHJlc2dpZAogCS5sb25nIHN5c19sY2hvd24KIAkubG9uZyBzeXNfc2V0dWlkCiAJLmxvbmcgc3lzX3NldGdpZAotCS5sb25nIHN5c19zZXRmc3VpZAkvKiAyMTUgKi8KKwkubG9uZyBzeXNfc2V0ZnN1aWQJCS8qIDIxNSAqLwogCS5sb25nIHN5c19zZXRmc2dpZAogCS5sb25nIHN5c19waXZvdF9yb290CiAJLmxvbmcgc3lzX25pX3N5c2NhbGwKIAkubG9uZyBzeXNfbmlfc3lzY2FsbAotCS5sb25nIHN5c19nZXRkZW50czY0CS8qIDIyMCAqLworCS5sb25nIHN5c19nZXRkZW50czY0CQkvKiAyMjAgKi8KIAkubG9uZyBzeXNfZ2V0dGlkCiAJLmxvbmcgc3lzX3RraWxsCiAJLmxvbmcgc3lzX3NldHhhdHRyCiAJLmxvbmcgc3lzX2xzZXR4YXR0cgotCS5sb25nIHN5c19mc2V0eGF0dHIJLyogMjI1ICovCisJLmxvbmcgc3lzX2ZzZXR4YXR0cgkJLyogMjI1ICovCiAJLmxvbmcgc3lzX2dldHhhdHRyCiAJLmxvbmcgc3lzX2xnZXR4YXR0cgogCS5sb25nIHN5c19mZ2V0eGF0dHIKIAkubG9uZyBzeXNfbGlzdHhhdHRyCi0JLmxvbmcgc3lzX2xsaXN0eGF0dHIJLyogMjMwICovCisJLmxvbmcgc3lzX2xsaXN0eGF0dHIJCS8qIDIzMCAqLwogCS5sb25nIHN5c19mbGlzdHhhdHRyCiAJLmxvbmcgc3lzX3JlbW92ZXhhdHRyCiAJLmxvbmcgc3lzX2xyZW1vdmV4YXR0cgogCS5sb25nIHN5c19mcmVtb3ZleGF0dHIKLQkubG9uZyBzeXNfZnV0ZXgJCS8qIDIzNSAqLworCS5sb25nIHN5c19mdXRleAkJCS8qIDIzNSAqLwogCS5sb25nIHN5c19zZW5kZmlsZTY0Ci0JLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogc3lzX21pbmNvcmUgKi8KLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBzeXNfbWFkdmlzZSAqLworCS5sb25nIHN5c19taW5jb3JlCisJLmxvbmcgc3lzX21hZHZpc2UKIAkubG9uZyBzeXNfZmNudGw2NAotCS5sb25nIHN5c19yZWFkYWhlYWQJLyogMjQwICovCisJLmxvbmcgc3lzX3JlYWRhaGVhZAkJLyogMjQwICovCiAJLmxvbmcgc3lzX2lvX3NldHVwCiAJLmxvbmcgc3lzX2lvX2Rlc3Ryb3kKIAkubG9uZyBzeXNfaW9fZ2V0ZXZlbnRzCiAJLmxvbmcgc3lzX2lvX3N1Ym1pdAotCS5sb25nIHN5c19pb19jYW5jZWwJLyogMjQ1ICovCisJLmxvbmcgc3lzX2lvX2NhbmNlbAkJLyogMjQ1ICovCiAJLmxvbmcgc3lzX2ZhZHZpc2U2NAogCS5sb25nIHN5c19leGl0X2dyb3VwCiAJLmxvbmcgc3lzX2xvb2t1cF9kY29va2llCiAJLmxvbmcgc3lzX2Vwb2xsX2NyZWF0ZQotCS5sb25nIHN5c19lcG9sbF9jdGwJLyogMjUwICovCisJLmxvbmcgc3lzX2Vwb2xsX2N0bAkJLyogMjUwICovCiAJLmxvbmcgc3lzX2Vwb2xsX3dhaXQKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBzeXNfcmVtYXBfZmlsZV9wYWdlcyAqLworCS5sb25nIHN5c19yZW1hcF9maWxlX3BhZ2VzCiAJLmxvbmcgc3lzX3NldF90aWRfYWRkcmVzcwogCS5sb25nIHN5c190aW1lcl9jcmVhdGUKLQkubG9uZyBzeXNfdGltZXJfc2V0dGltZQkvKiAyNTUgKi8KKwkubG9uZyBzeXNfdGltZXJfc2V0dGltZQkJLyogMjU1ICovCiAJLmxvbmcgc3lzX3RpbWVyX2dldHRpbWUKIAkubG9uZyBzeXNfdGltZXJfZ2V0b3ZlcnJ1bgogCS5sb25nIHN5c190aW1lcl9kZWxldGUKIAkubG9uZyBzeXNfY2xvY2tfc2V0dGltZQotCS5sb25nIHN5c19jbG9ja19nZXR0aW1lCS8qIDI2MCAqLworCS5sb25nIHN5c19jbG9ja19nZXR0aW1lCQkvKiAyNjAgKi8KIAkubG9uZyBzeXNfY2xvY2tfZ2V0cmVzCiAJLmxvbmcgc3lzX2Nsb2NrX25hbm9zbGVlcAogCS5sb25nIHN5c19zdGF0ZnM2NAogCS5sb25nIHN5c19mc3RhdGZzNjQKLQkubG9uZyBzeXNfdGdraWxsCS8qIDI2NSAqLworCS5sb25nIHN5c190Z2tpbGwJCS8qIDI2NSAqLwogCS5sb25nIHN5c191dGltZXMKIAkubG9uZyBzeXNfZmFkdmlzZTY0XzY0Ci0JLmxvbmcgc3lzX21iaW5kCQorCS5sb25nIHN5c19tYmluZAogCS5sb25nIHN5c19nZXRfbWVtcG9saWN5Ci0JLmxvbmcgc3lzX3NldF9tZW1wb2xpY3kJLyogMjcwICovCisJLmxvbmcgc3lzX3NldF9tZW1wb2xpY3kJCS8qIDI3MCAqLwogCS5sb25nIHN5c19tcV9vcGVuCiAJLmxvbmcgc3lzX21xX3VubGluawogCS5sb25nIHN5c19tcV90aW1lZHNlbmQKIAkubG9uZyBzeXNfbXFfdGltZWRyZWNlaXZlCi0JLmxvbmcgc3lzX21xX25vdGlmeQkvKiAyNzUgKi8KKwkubG9uZyBzeXNfbXFfbm90aWZ5CQkvKiAyNzUgKi8KIAkubG9uZyBzeXNfbXFfZ2V0c2V0YXR0cgogCS5sb25nIHN5c193YWl0aWQKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBmb3Igc3lzX3ZzZXJ2ZXIgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogZm9yIHN5c192c2VydmVyICovCiAJLmxvbmcgc3lzX2FkZF9rZXkKLQkubG9uZyBzeXNfcmVxdWVzdF9rZXkJLyogMjgwICovCisJLmxvbmcgc3lzX3JlcXVlc3Rfa2V5CQkvKiAyODAgKi8KIAkubG9uZyBzeXNfa2V5Y3RsCiAJLmxvbmcgc3lzX2lvcHJpb19zZXQKIAkubG9uZyBzeXNfaW9wcmlvX2dldApAQCAtMzE5LDggKzMyMiw4IEBACiAJLmxvbmcgc3lzX3JlYWRsaW5rYXQKIAkubG9uZyBzeXNfZmNobW9kYXQKIAkubG9uZyBzeXNfZmFjY2Vzc2F0CQkvKiAzMDAgKi8KLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogUmVzZXJ2ZWQgZm9yIHBzZWxlY3Q2ICovCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJCS8qIFJlc2VydmVkIGZvciBwcG9sbCAqLworCS5sb25nIHN5c19wc2VsZWN0NgorCS5sb25nIHN5c19wcG9sbAogCS5sb25nIHN5c191bnNoYXJlCiAJLmxvbmcgc3lzX3NldF9yb2J1c3RfbGlzdAogCS5sb25nIHN5c19nZXRfcm9idXN0X2xpc3QJLyogMzA1ICovCkBAIC0zNjMsNyArMzY2LDMgQEAKIAkubG9uZyBzeXNfY2xvY2tfYWRqdGltZQogCS5sb25nIHN5c19zeW5jZnMKIAotCS5yZXB0IE5SX3N5c2NhbGxzLSguLXN5c19jYWxsX3RhYmxlKS80Ci0JCS5sb25nIHN5c19uaV9zeXNjYWxsCi0JLmVuZHIKLQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4LXN0ZC5sZHMgYi9hcmNoL202OGsva2VybmVsL3ZtbGludXgtc3RkLmxkcwppbmRleCA4NzhiZTVmLi5kMDk5MzU5IDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL3ZtbGludXgtc3RkLmxkcworKysgYi9hcmNoL202OGsva2VybmVsL3ZtbGludXgtc3RkLmxkcwpAQCAtMjUsNiArMjUsOCBAQAogCiAgIEVYQ0VQVElPTl9UQUJMRSgxNikKIAorICBfc2RhdGEgPSAuOwkJCS8qIFN0YXJ0IG9mIGRhdGEgc2VjdGlvbiAqLworCiAgIFJPREFUQQogCiAgIFJXX0RBVEFfU0VDVElPTigxNiwgUEFHRV9TSVpFLCBUSFJFQURfU0laRSkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC1zdW4zLmxkcyBiL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC1zdW4zLmxkcwppbmRleCAxYWQ2YjdhLi44MDgwNDY5IDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL3ZtbGludXgtc3VuMy5sZHMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4LXN1bjMubGRzCkBAIC0yNSw2ICsyNSw3IEBACiAgIF9ldGV4dCA9IC47CQkJLyogRW5kIG9mIHRleHQgc2VjdGlvbiAqLwogCiAgIEVYQ0VQVElPTl9UQUJMRSgxNikgOmRhdGEKKyAgX3NkYXRhID0gLjsJCQkvKiBTdGFydCBvZiBydyBkYXRhIHNlY3Rpb24gKi8KICAgUldfREFUQV9TRUNUSU9OKDE2LCBQQUdFX1NJWkUsIFRIUkVBRF9TSVpFKSA6ZGF0YQogICAvKiBFbmQgb2YgZGF0YSBnb2VzICpoZXJlKiBzbyB0aGF0IGZyZWVpbmcgaW5pdCBjb2RlIHdvcmtzIHByb3Blcmx5LiAqLwogICBfZWRhdGEgPSAuOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMgYi9hcmNoL202OGsvbW0vbW90b3JvbGEuYwppbmRleCAwMmI3YTAzLi44YjNkYjFjIDEwMDY0NAotLS0gYS9hcmNoL202OGsvbW0vbW90b3JvbGEuYworKysgYi9hcmNoL202OGsvbW0vbW90b3JvbGEuYwpAQCAtMzAwLDYgKzMwMCw4IEBACiAJCXpvbmVzX3NpemVbWk9ORV9ETUFdID0gbTY4a19tZW1vcnlbaV0uc2l6ZSA+PiBQQUdFX1NISUZUOwogCQlmcmVlX2FyZWFfaW5pdF9ub2RlKGksIHpvbmVzX3NpemUsCiAJCQkJICAgIG02OGtfbWVtb3J5W2ldLmFkZHIgPj4gUEFHRV9TSElGVCwgTlVMTCk7CisJCWlmIChub2RlX3ByZXNlbnRfcGFnZXMoaSkpCisJCQlub2RlX3NldF9zdGF0ZShpLCBOX05PUk1BTF9NRU1PUlkpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC90aW1lci5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC90aW1lci5jCmluZGV4IGQ4YTIxNGYuLmU1NTUwY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvdGltZXIuYworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3RpbWVyLmMKQEAgLTIxNywxNiArMjE3LDEyIEBACiAJLnJhdGluZwkJPSAzMDAsCiAJLnJlYWQJCT0gbWljcm9ibGF6ZV9yZWFkLAogCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soMzIpLAotCS5zaGlmdAkJPSA4LCAvKiBJIGNhbiBzaGlmdCBpdCAqLwogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG1pY3JvYmxhemVfY2xvY2tzb3VyY2VfaW5pdCh2b2lkKQogewotCWNsb2Nrc291cmNlX21pY3JvYmxhemUubXVsdCA9Ci0JCQljbG9ja3NvdXJjZV9oejJtdWx0KHRpbWVyX2Nsb2NrX2ZyZXEsCi0JCQkJCQljbG9ja3NvdXJjZV9taWNyb2JsYXplLnNoaWZ0KTsKLQlpZiAoY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX21pY3JvYmxhemUpKQorCWlmIChjbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2xvY2tzb3VyY2VfbWljcm9ibGF6ZSwgdGltZXJfY2xvY2tfZnJlcSkpCiAJCXBhbmljKCJmYWlsZWQgdG8gcmVnaXN0ZXIgY2xvY2tzb3VyY2UiKTsKIAogCS8qIHN0b3AgdGltZXIxICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2J1aWxkLnBsYXRmb3JtcyBiL2FyY2gvbWlwcy9LYnVpbGQucGxhdGZvcm1zCmluZGV4IDdmZjliNTQuLmFlZjZjOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9LYnVpbGQucGxhdGZvcm1zCisrKyBiL2FyY2gvbWlwcy9LYnVpbGQucGxhdGZvcm1zCkBAIC0xMSw2ICsxMSw3IEBACiBwbGF0Zm9ybXMgKz0gZW1tYQogcGxhdGZvcm1zICs9IGphenoKIHBsYXRmb3JtcyArPSBqejQ3NDAKK3BsYXRmb3JtcyArPSBsYW50aXEKIHBsYXRmb3JtcyArPSBsYXNhdAogcGxhdGZvcm1zICs9IGxvb25nc29uCiBwbGF0Zm9ybXMgKz0gbWlwc3NpbQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL0tjb25maWcgYi9hcmNoL21pcHMvS2NvbmZpZwppbmRleCA4ZTI1NmNjLi5jZWYxYTg1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvS2NvbmZpZworKysgYi9hcmNoL21pcHMvS2NvbmZpZwpAQCAtMjEyLDYgKzIxMiwyNCBAQAogCXNlbGVjdCBIQVZFX1BXTQogCXNlbGVjdCBIQVZFX0NMSwogCitjb25maWcgTEFOVElRCisJYm9vbCAiTGFudGlxIGJhc2VkIHBsYXRmb3JtcyIKKwlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCisJc2VsZWN0IElSUV9DUFUKKwlzZWxlY3QgQ0VWVF9SNEsKKwlzZWxlY3QgQ1NSQ19SNEsKKwlzZWxlY3QgU1lTX0hBU19DUFVfTUlQUzMyX1IxCisJc2VsZWN0IFNZU19IQVNfQ1BVX01JUFMzMl9SMgorCXNlbGVjdCBTWVNfU1VQUE9SVFNfQklHX0VORElBTgorCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCisJc2VsZWN0IFNZU19TVVBQT1JUU19NVUxUSVRIUkVBRElORworCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgorCXNlbGVjdCBTV0FQX0lPX1NQQUNFCisJc2VsZWN0IEJPT1RfUkFXCisJc2VsZWN0IEhBVkVfQ0xLCisJc2VsZWN0IE1JUFNfTUFDSElORQorCiBjb25maWcgTEFTQVQKIAlib29sICJMQVNBVCBOZXR3b3JrcyBwbGF0Zm9ybXMiCiAJc2VsZWN0IENFVlRfUjRLCkBAIC03MzYsNiArNzU0LDMzIEBACiAJCUhpa2FyaQogCSAgU2F5IFkgaGVyZSBmb3IgbW9zdCBPY3Rlb24gcmVmZXJlbmNlIGJvYXJkcy4KIAorY29uZmlnIE5MTV9YTFJfQk9BUkQKKwlib29sICJOZXRsb2dpYyBYTFIvWExTIGJhc2VkIHN5c3RlbXMiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgQk9PVF9FTEYzMgorCXNlbGVjdCBOTE1fQ09NTU9OCisJc2VsZWN0IE5MTV9YTFIKKwlzZWxlY3QgU1lTX0hBU19DUFVfWExSCisJc2VsZWN0IFNZU19TVVBQT1JUU19TTVAKKwlzZWxlY3QgSFdfSEFTX1BDSQorCXNlbGVjdCBTV0FQX0lPX1NQQUNFCisJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKKwlzZWxlY3QgU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTAorCXNlbGVjdCA2NEJJVF9QSFlTX0FERFIKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0JJR19FTkRJQU4KKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0hJR0hNRU0KKwlzZWxlY3QgRE1BX0NPSEVSRU5UCisJc2VsZWN0IE5SX0NQVVNfREVGQVVMVF8zMgorCXNlbGVjdCBDRVZUX1I0SworCXNlbGVjdCBDU1JDX1I0SworCXNlbGVjdCBJUlFfQ1BVCisJc2VsZWN0IFpPTkVfRE1BIGlmIDY0QklUCisJc2VsZWN0IFNZTkNfUjRLCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCisJaGVscAorCSAgU3VwcG9ydCBmb3Igc3lzdGVtcyBiYXNlZCBvbiBOZXRsb2dpYyBYTFIgYW5kIFhMUyBwcm9jZXNzb3JzLgorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFhMUiBvciBYTFMgYmFzZWQgYm9hcmQuCisKIGVuZGNob2ljZQogCiBzb3VyY2UgImFyY2gvbWlwcy9hbGNoZW15L0tjb25maWciCkBAIC03NDMsNiArNzg4LDcgQEAKIHNvdXJjZSAiYXJjaC9taXBzL2JjbTYzeHgvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9taXBzL2phenovS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9taXBzL2p6NDc0MC9LY29uZmlnIgorc291cmNlICJhcmNoL21pcHMvbGFudGlxL0tjb25maWciCiBzb3VyY2UgImFyY2gvbWlwcy9sYXNhdC9LY29uZmlnIgogc291cmNlICJhcmNoL21pcHMvcG1jLXNpZXJyYS9LY29uZmlnIgogc291cmNlICJhcmNoL21pcHMvcG93ZXJ0di9LY29uZmlnIgpAQCAtNzUyLDYgKzc5OCw3IEBACiBzb3VyY2UgImFyY2gvbWlwcy92cjQxeHgvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9taXBzL2xvb25nc29uL0tjb25maWciCitzb3VyY2UgImFyY2gvbWlwcy9uZXRsb2dpYy9LY29uZmlnIgogCiBlbmRtZW51CiAKQEAgLTk5Nyw5ICsxMDQ0LDYgQEAKIGNvbmZpZyBJUlFfR0lDCiAJYm9vbAogCi1jb25maWcgSVJRX0NQVV9PQ1RFT04KLQlib29sCi0KIGNvbmZpZyBNSVBTX0JPQVJEU19HRU4KIAlib29sCiAKQEAgLTEzNTksOCArMTQwMyw2IEBACiBjb25maWcgQ1BVX0NBVklVTV9PQ1RFT04KIAlib29sICJDYXZpdW0gT2N0ZW9uIHByb2Nlc3NvciIKIAlkZXBlbmRzIG9uIFNZU19IQVNfQ1BVX0NBVklVTV9PQ1RFT04KLQlzZWxlY3QgSVJRX0NQVQotCXNlbGVjdCBJUlFfQ1BVX09DVEVPTgogCXNlbGVjdCBDUFVfSEFTX1BSRUZFVENICiAJc2VsZWN0IENQVV9TVVBQT1JUU182NEJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX1NNUApAQCAtMTQyNSw2ICsxNDY3LDE3IEBACiAJaGVscAogCSAgQnJvYWRjb20gQk1JUFM1MDAwIHByb2Nlc3NvcnMuCiAKK2NvbmZpZyBDUFVfWExSCisJYm9vbCAiTmV0bG9naWMgWExSIFNvQyIKKwlkZXBlbmRzIG9uIFNZU19IQVNfQ1BVX1hMUgorCXNlbGVjdCBDUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCisJc2VsZWN0IENQVV9TVVBQT1JUU182NEJJVF9LRVJORUwKKwlzZWxlY3QgQ1BVX1NVUFBPUlRTX0hJR0hNRU0KKwlzZWxlY3QgV0VBS19PUkRFUklORworCXNlbGVjdCBXRUFLX1JFT1JERVJJTkdfQkVZT05EX0xMU0MKKwlzZWxlY3QgQ1BVX1NVUFBPUlRTX0hVR0VQQUdFUworCWhlbHAKKwkgIE5ldGxvZ2ljIE1pY3Jvc3lzdGVtcyBYTFIvWExTIHByb2Nlc3NvcnMuCiBlbmRjaG9pY2UKIAogaWYgQ1BVX0xPT05HU09OMkYKQEAgLTE1NTUsNiArMTYwOCw5IEBACiBjb25maWcgU1lTX0hBU19DUFVfQk1JUFM1MDAwCiAJYm9vbAogCitjb25maWcgU1lTX0hBU19DUFVfWExSCisJYm9vbAorCiAjCiAjIENQVSBtYXkgcmVvcmRlciBSLT5SLCBSLT5XLCBXLT5SLCBXLT5XCiAjIFJlb3JkZXJpbmcgYmV5b25kIExMIGFuZCBTQyBpcyBoYW5kbGVkIGluIFdFQUtfUkVPUkRFUklOR19CRVlPTkRfTExTQwpAQCAtMjMzOSw2ICsyMzk1LDcgQEAKIAogY29uZmlnIEk4MjUzCiAJYm9vbAorCXNlbGVjdCBDTEtTUkNfSTgyNTMKIAlzZWxlY3QgTUlQU19FWFRFUk5BTF9USU1FUgogCiBjb25maWcgWk9ORV9ETUEzMgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL01ha2VmaWxlIGIvYXJjaC9taXBzL01ha2VmaWxlCmluZGV4IDUzZTM1MTQuLjg4NDgxOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvTWFrZWZpbGUKQEAgLTE5MSw2ICsxOTEsMTggQEAKICMKIGluY2x1ZGUgJChzcmN0cmVlKS9hcmNoL21pcHMvS2J1aWxkLnBsYXRmb3JtcwogCisjCisjIE5FVExPR0lDIFNPQyBDb21tb24gKGNvbW1vbikKKyMKK2NmbGFncy0kKENPTkZJR19OTE1fQ09NTU9OKQkJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLW5ldGxvZ2ljCitjZmxhZ3MtJChDT05GSUdfTkxNX0NPTU1PTikJCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbmV0bG9naWMKKworIworIyBORVRMT0dJQyBYTFIvWExTIFNvQywgU2ltdWxhdG9yIGFuZCBib2FyZHMKKyMKK2NvcmUtJChDT05GSUdfTkxNX1hMUikgICAgICAJCSs9IGFyY2gvbWlwcy9uZXRsb2dpYy94bHIvCitsb2FkLSQoQ09ORklHX05MTV9YTFJfQk9BUkQpCQkrPSAweGZmZmZmZmZmODQwMDAwMDAKKwogY2ZsYWdzLXkJCQkrPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZ2VuZXJpYwogZHJpdmVycy0kKENPTkZJR19QQ0kpCQkrPSBhcmNoL21pcHMvcGNpLwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jCmluZGV4IGNhMDUwNmEuLjNhNWFiYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmg+CiAKQEAgLTU4LDcgKzU4LDggQEAKIC8qIEkgY291bGRuJ3QgZmluZCBhIG1hY3JvIHRoYXQgZGlkIHRoaXMuLi4gKi8KICNkZWZpbmUgQUxJR05fQUREUih4LCBhKQkoKCgodTMyKSh4KSkgKyAoYS0xKSkgJiB+KGEtMSkpCiAKLXN0YXRpYyBkYmRtYV9nbG9iYWxfdCAqZGJkbWFfZ3B0ciA9IChkYmRtYV9nbG9iYWxfdCAqKURETUFfR0xPQkFMX0JBU0U7CitzdGF0aWMgZGJkbWFfZ2xvYmFsX3QgKmRiZG1hX2dwdHIgPQorCQkJKGRiZG1hX2dsb2JhbF90ICopS1NFRzFBRERSKEFVMTU1MF9EQkRNQV9DT05GX1BIWVNfQUREUik7CiBzdGF0aWMgaW50IGRiZG1hX2luaXRpYWxpemVkOwogCiBzdGF0aWMgZGJkZXZfdGFiX3QgZGJkZXZfdGFiW10gPSB7CkBAIC0yOTksNyArMzAwLDcgQEAKIAlpZiAoY3RwICE9IE5VTEwpIHsKIAkJbWVtc2V0KGN0cCwgMCwgc2l6ZW9mKGNoYW5fdGFiX3QpKTsKIAkJY3RwLT5jaGFuX2luZGV4ID0gY2hhbiA9IGk7Ci0JCWRjcCA9IERETUFfQ0hBTk5FTF9CQVNFOworCQlkY3AgPSBLU0VHMUFERFIoQVUxNTUwX0RCRE1BX1BIWVNfQUREUik7CiAJCWRjcCArPSAoMHgwMTAwICogY2hhbik7CiAJCWN0cC0+Y2hhbl9wdHIgPSAoYXUxeF9kbWFfY2hhbl90ICopZGNwOwogCQljcCA9IChhdTF4X2RtYV9jaGFuX3QgKilkY3A7CkBAIC05NTgsMTA1ICs5NTksNzUgQEAKIH0KIAogCi1zdHJ1Y3QgYWxjaGVteV9kYmRtYV9zeXNkZXYgewotCXN0cnVjdCBzeXNfZGV2aWNlIHN5c2RldjsKLQl1MzIgcG1fcmVnc1tOVU1fREJETUFfQ0hBTlMgKyAxXVs2XTsKLX07CitzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGNoZW15X2RiZG1hX3BtX2RhdGFbTlVNX0RCRE1BX0NIQU5TICsgMV1bNl07CiAKLXN0YXRpYyBpbnQgYWxjaGVteV9kYmRtYV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCi0JCQkJIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgYWxjaGVteV9kYmRtYV9zdXNwZW5kKHZvaWQpCiB7Ci0Jc3RydWN0IGFsY2hlbXlfZGJkbWFfc3lzZGV2ICpzZGV2ID0KLQkJY29udGFpbmVyX29mKGRldiwgc3RydWN0IGFsY2hlbXlfZGJkbWFfc3lzZGV2LCBzeXNkZXYpOwogCWludCBpOwotCXUzMiBhZGRyOworCXZvaWQgX19pb21lbSAqYWRkcjsKIAotCWFkZHIgPSBERE1BX0dMT0JBTF9CQVNFOwotCXNkZXYtPnBtX3JlZ3NbMF1bMF0gPSBhdV9yZWFkbChhZGRyICsgMHgwMCk7Ci0Jc2Rldi0+cG1fcmVnc1swXVsxXSA9IGF1X3JlYWRsKGFkZHIgKyAweDA0KTsKLQlzZGV2LT5wbV9yZWdzWzBdWzJdID0gYXVfcmVhZGwoYWRkciArIDB4MDgpOwotCXNkZXYtPnBtX3JlZ3NbMF1bM10gPSBhdV9yZWFkbChhZGRyICsgMHgwYyk7CisJYWRkciA9ICh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVUxNTUwX0RCRE1BX0NPTkZfUEhZU19BRERSKTsKKwlhbGNoZW15X2RiZG1hX3BtX2RhdGFbMF1bMF0gPSBfX3Jhd19yZWFkbChhZGRyICsgMHgwMCk7CisJYWxjaGVteV9kYmRtYV9wbV9kYXRhWzBdWzFdID0gX19yYXdfcmVhZGwoYWRkciArIDB4MDQpOworCWFsY2hlbXlfZGJkbWFfcG1fZGF0YVswXVsyXSA9IF9fcmF3X3JlYWRsKGFkZHIgKyAweDA4KTsKKwlhbGNoZW15X2RiZG1hX3BtX2RhdGFbMF1bM10gPSBfX3Jhd19yZWFkbChhZGRyICsgMHgwYyk7CiAKIAkvKiBzYXZlIGNoYW5uZWwgY29uZmlndXJhdGlvbnMgKi8KLQlmb3IgKGkgPSAxLCBhZGRyID0gRERNQV9DSEFOTkVMX0JBU0U7IGkgPD0gTlVNX0RCRE1BX0NIQU5TOyBpKyspIHsKLQkJc2Rldi0+cG1fcmVnc1tpXVswXSA9IGF1X3JlYWRsKGFkZHIgKyAweDAwKTsKLQkJc2Rldi0+cG1fcmVnc1tpXVsxXSA9IGF1X3JlYWRsKGFkZHIgKyAweDA0KTsKLQkJc2Rldi0+cG1fcmVnc1tpXVsyXSA9IGF1X3JlYWRsKGFkZHIgKyAweDA4KTsKLQkJc2Rldi0+cG1fcmVnc1tpXVszXSA9IGF1X3JlYWRsKGFkZHIgKyAweDBjKTsKLQkJc2Rldi0+cG1fcmVnc1tpXVs0XSA9IGF1X3JlYWRsKGFkZHIgKyAweDEwKTsKLQkJc2Rldi0+cG1fcmVnc1tpXVs1XSA9IGF1X3JlYWRsKGFkZHIgKyAweDE0KTsKKwlhZGRyID0gKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBVTE1NTBfREJETUFfUEhZU19BRERSKTsKKwlmb3IgKGkgPSAxOyBpIDw9IE5VTV9EQkRNQV9DSEFOUzsgaSsrKSB7CisJCWFsY2hlbXlfZGJkbWFfcG1fZGF0YVtpXVswXSA9IF9fcmF3X3JlYWRsKGFkZHIgKyAweDAwKTsKKwkJYWxjaGVteV9kYmRtYV9wbV9kYXRhW2ldWzFdID0gX19yYXdfcmVhZGwoYWRkciArIDB4MDQpOworCQlhbGNoZW15X2RiZG1hX3BtX2RhdGFbaV1bMl0gPSBfX3Jhd19yZWFkbChhZGRyICsgMHgwOCk7CisJCWFsY2hlbXlfZGJkbWFfcG1fZGF0YVtpXVszXSA9IF9fcmF3X3JlYWRsKGFkZHIgKyAweDBjKTsKKwkJYWxjaGVteV9kYmRtYV9wbV9kYXRhW2ldWzRdID0gX19yYXdfcmVhZGwoYWRkciArIDB4MTApOworCQlhbGNoZW15X2RiZG1hX3BtX2RhdGFbaV1bNV0gPSBfX3Jhd19yZWFkbChhZGRyICsgMHgxNCk7CiAKIAkJLyogaGFsdCBjaGFubmVsICovCi0JCWF1X3dyaXRlbChzZGV2LT5wbV9yZWdzW2ldWzBdICYgfjEsIGFkZHIgKyAweDAwKTsKLQkJYXVfc3luYygpOwotCQl3aGlsZSAoIShhdV9yZWFkbChhZGRyICsgMHgxNCkgJiAxKSkKLQkJCWF1X3N5bmMoKTsKKwkJX19yYXdfd3JpdGVsKGFsY2hlbXlfZGJkbWFfcG1fZGF0YVtpXVswXSAmIH4xLCBhZGRyICsgMHgwMCk7CisJCXdtYigpOworCQl3aGlsZSAoIShfX3Jhd19yZWFkbChhZGRyICsgMHgxNCkgJiAxKSkKKwkJCXdtYigpOwogCiAJCWFkZHIgKz0gMHgxMDA7CS8qIG5leHQgY2hhbm5lbCBiYXNlICovCiAJfQogCS8qIGRpc2FibGUgY2hhbm5lbCBpbnRlcnJ1cHRzICovCi0JYXVfd3JpdGVsKDAsIERETUFfR0xPQkFMX0JBU0UgKyAweDBjKTsKLQlhdV9zeW5jKCk7CisJYWRkciA9ICh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVUxNTUwX0RCRE1BX0NPTkZfUEhZU19BRERSKTsKKwlfX3Jhd193cml0ZWwoMCwgYWRkciArIDB4MGMpOworCXdtYigpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYWxjaGVteV9kYmRtYV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGFsY2hlbXlfZGJkbWFfcmVzdW1lKHZvaWQpCiB7Ci0Jc3RydWN0IGFsY2hlbXlfZGJkbWFfc3lzZGV2ICpzZGV2ID0KLQkJY29udGFpbmVyX29mKGRldiwgc3RydWN0IGFsY2hlbXlfZGJkbWFfc3lzZGV2LCBzeXNkZXYpOwogCWludCBpOwotCXUzMiBhZGRyOworCXZvaWQgX19pb21lbSAqYWRkcjsKIAotCWFkZHIgPSBERE1BX0dMT0JBTF9CQVNFOwotCWF1X3dyaXRlbChzZGV2LT5wbV9yZWdzWzBdWzBdLCBhZGRyICsgMHgwMCk7Ci0JYXVfd3JpdGVsKHNkZXYtPnBtX3JlZ3NbMF1bMV0sIGFkZHIgKyAweDA0KTsKLQlhdV93cml0ZWwoc2Rldi0+cG1fcmVnc1swXVsyXSwgYWRkciArIDB4MDgpOwotCWF1X3dyaXRlbChzZGV2LT5wbV9yZWdzWzBdWzNdLCBhZGRyICsgMHgwYyk7CisJYWRkciA9ICh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVUxNTUwX0RCRE1BX0NPTkZfUEhZU19BRERSKTsKKwlfX3Jhd193cml0ZWwoYWxjaGVteV9kYmRtYV9wbV9kYXRhWzBdWzBdLCBhZGRyICsgMHgwMCk7CisJX19yYXdfd3JpdGVsKGFsY2hlbXlfZGJkbWFfcG1fZGF0YVswXVsxXSwgYWRkciArIDB4MDQpOworCV9fcmF3X3dyaXRlbChhbGNoZW15X2RiZG1hX3BtX2RhdGFbMF1bMl0sIGFkZHIgKyAweDA4KTsKKwlfX3Jhd193cml0ZWwoYWxjaGVteV9kYmRtYV9wbV9kYXRhWzBdWzNdLCBhZGRyICsgMHgwYyk7CiAKIAkvKiByZXN0b3JlIGNoYW5uZWwgY29uZmlndXJhdGlvbnMgKi8KLQlmb3IgKGkgPSAxLCBhZGRyID0gRERNQV9DSEFOTkVMX0JBU0U7IGkgPD0gTlVNX0RCRE1BX0NIQU5TOyBpKyspIHsKLQkJYXVfd3JpdGVsKHNkZXYtPnBtX3JlZ3NbaV1bMF0sIGFkZHIgKyAweDAwKTsKLQkJYXVfd3JpdGVsKHNkZXYtPnBtX3JlZ3NbaV1bMV0sIGFkZHIgKyAweDA0KTsKLQkJYXVfd3JpdGVsKHNkZXYtPnBtX3JlZ3NbaV1bMl0sIGFkZHIgKyAweDA4KTsKLQkJYXVfd3JpdGVsKHNkZXYtPnBtX3JlZ3NbaV1bM10sIGFkZHIgKyAweDBjKTsKLQkJYXVfd3JpdGVsKHNkZXYtPnBtX3JlZ3NbaV1bNF0sIGFkZHIgKyAweDEwKTsKLQkJYXVfd3JpdGVsKHNkZXYtPnBtX3JlZ3NbaV1bNV0sIGFkZHIgKyAweDE0KTsKLQkJYXVfc3luYygpOworCWFkZHIgPSAodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKEFVMTU1MF9EQkRNQV9QSFlTX0FERFIpOworCWZvciAoaSA9IDE7IGkgPD0gTlVNX0RCRE1BX0NIQU5TOyBpKyspIHsKKwkJX19yYXdfd3JpdGVsKGFsY2hlbXlfZGJkbWFfcG1fZGF0YVtpXVswXSwgYWRkciArIDB4MDApOworCQlfX3Jhd193cml0ZWwoYWxjaGVteV9kYmRtYV9wbV9kYXRhW2ldWzFdLCBhZGRyICsgMHgwNCk7CisJCV9fcmF3X3dyaXRlbChhbGNoZW15X2RiZG1hX3BtX2RhdGFbaV1bMl0sIGFkZHIgKyAweDA4KTsKKwkJX19yYXdfd3JpdGVsKGFsY2hlbXlfZGJkbWFfcG1fZGF0YVtpXVszXSwgYWRkciArIDB4MGMpOworCQlfX3Jhd193cml0ZWwoYWxjaGVteV9kYmRtYV9wbV9kYXRhW2ldWzRdLCBhZGRyICsgMHgxMCk7CisJCV9fcmF3X3dyaXRlbChhbGNoZW15X2RiZG1hX3BtX2RhdGFbaV1bNV0sIGFkZHIgKyAweDE0KTsKKwkJd21iKCk7CiAJCWFkZHIgKz0gMHgxMDA7CS8qIG5leHQgY2hhbm5lbCBiYXNlICovCiAJfQotCi0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIGFsY2hlbXlfZGJkbWFfc3lzZGV2X2NsYXNzID0gewotCS5uYW1lCQk9ICJkYmRtYSIsCitzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIGFsY2hlbXlfZGJkbWFfc3lzY29yZV9vcHMgPSB7CiAJLnN1c3BlbmQJPSBhbGNoZW15X2RiZG1hX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBhbGNoZW15X2RiZG1hX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGFsY2hlbXlfZGJkbWFfc3lzZGV2X2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgYWxjaGVteV9kYmRtYV9zeXNkZXYgKnNkZXY7Ci0JaW50IHJldDsKLQotCXJldCA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmYWxjaGVteV9kYmRtYV9zeXNkZXZfY2xhc3MpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlzZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFsY2hlbXlfZGJkbWFfc3lzZGV2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzZGV2KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXNkZXYtPnN5c2Rldi5pZCA9IC0xOwotCXNkZXYtPnN5c2Rldi5jbHMgPSAmYWxjaGVteV9kYmRtYV9zeXNkZXZfY2xhc3M7Ci0JcmV0ID0gc3lzZGV2X3JlZ2lzdGVyKCZzZGV2LT5zeXNkZXYpOwotCWlmIChyZXQpCi0JCWtmcmVlKHNkZXYpOwotCi0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGludCBfX2luaXQgYXUxeHh4X2RiZG1hX2luaXQodm9pZCkKIHsKIAlpbnQgaXJxX25yLCByZXQ7CkBAIC0xMDg0LDExICsxMDU1LDcgQEAKIAllbHNlIHsKIAkJZGJkbWFfaW5pdGlhbGl6ZWQgPSAxOwogCQlwcmludGsoS0VSTl9JTkZPICJBbGNoZW15IERCRE1BIGluaXRpYWxpemVkXG4iKTsKLQkJcmV0ID0gYWxjaGVteV9kYmRtYV9zeXNkZXZfaW5pdCgpOwotCQlpZiAocmV0KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkRCRE1BIFBNIGluaXQgZmFpbGVkXG4iKTsKLQkJCXJldCA9IDA7Ci0JCX0KKwkJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJmFsY2hlbXlfZGJkbWFfc3lzY29yZV9vcHMpOwogCX0KIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZG1hLmMgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZG1hLmMKaW5kZXggZDUyNzg4Ny4uMzQ3OTgwZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RtYS5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kbWEuYwpAQCAtNTgsNiArNTgsOSBAQAogICogcmV0dXJuZWQgZnJvbSByZXF1ZXN0X2RtYS4KICAqLwogCisvKiBETUEgQ2hhbm5lbCByZWdpc3RlciBibG9jayBzcGFjaW5nICovCisjZGVmaW5lIERNQV9DSEFOTkVMX0xFTgkJMHgwMDAwMDEwMAorCiBERUZJTkVfU1BJTkxPQ0soYXUxMDAwX2RtYV9zcGluX2xvY2spOwogCiBzdHJ1Y3QgZG1hX2NoYW4gYXUxMDAwX2RtYV90YWJsZVtOVU1fQVUxMDAwX0RNQV9DSEFOTkVMU10gPSB7CkBAIC03NywyMiArODAsMjMgQEAKIAl1bnNpZ25lZCBpbnQgZmlmb19hZGRyOwogCXVuc2lnbmVkIGludCBkbWFfbW9kZTsKIH0gZG1hX2Rldl90YWJsZVtETUFfTlVNX0RFVl0gPSB7Ci0Je1VBUlQwX0FERFIgKyBVQVJUX1RYLCAwfSwKLQl7VUFSVDBfQUREUiArIFVBUlRfUlgsIDB9LAotCXswLCAwfSwKLQl7MCwgMH0sCi0Je0FDOTdDX0RBVEEsIERNQV9EVzE2IH0sICAgICAgICAgIC8qIGNvaGVyZW50ICovCi0Je0FDOTdDX0RBVEEsIERNQV9EUiB8IERNQV9EVzE2IH0sIC8qIGNvaGVyZW50ICovCi0Je1VBUlQzX0FERFIgKyBVQVJUX1RYLCBETUFfRFc4IHwgRE1BX05DfSwKLQl7VUFSVDNfQUREUiArIFVBUlRfUlgsIERNQV9EUiB8IERNQV9EVzggfCBETUFfTkN9LAotCXtVU0JEX0VQMFJELCBETUFfRFIgfCBETUFfRFc4IHwgRE1BX05DfSwKLQl7VVNCRF9FUDBXUiwgRE1BX0RXOCB8IERNQV9OQ30sCi0Je1VTQkRfRVAyV1IsIERNQV9EVzggfCBETUFfTkN9LAotCXtVU0JEX0VQM1dSLCBETUFfRFc4IHwgRE1BX05DfSwKLQl7VVNCRF9FUDRSRCwgRE1BX0RSIHwgRE1BX0RXOCB8IERNQV9OQ30sCi0Je1VTQkRfRVA1UkQsIERNQV9EUiB8IERNQV9EVzggfCBETUFfTkN9LAotCXtJMlNfREFUQSwgRE1BX0RXMzIgfCBETUFfTkN9LAotCXtJMlNfREFUQSwgRE1BX0RSIHwgRE1BX0RXMzIgfCBETUFfTkN9CisJeyBBVTEwMDBfVUFSVDBfUEhZU19BRERSICsgMHgwNCwgRE1BX0RXOCB9LAkJLyogVUFSVDBfVFggKi8KKwl7IEFVMTAwMF9VQVJUMF9QSFlTX0FERFIgKyAweDAwLCBETUFfRFc4IHwgRE1BX0RSIH0sCS8qIFVBUlQwX1JYICovCisJeyAwLCAwIH0sCS8qIERNQV9SRVEwICovCisJeyAwLCAwIH0sCS8qIERNQV9SRVExICovCisJeyBBVTEwMDBfQUM5N19QSFlTX0FERFIgKyAweDA4LCBETUFfRFcxNiB9LAkJLyogQUM5NyBUWCBjICovCisJeyBBVTEwMDBfQUM5N19QSFlTX0FERFIgKyAweDA4LCBETUFfRFcxNiB8IERNQV9EUiB9LAkvKiBBQzk3IFJYIGMgKi8KKwl7IEFVMTAwMF9VQVJUM19QSFlTX0FERFIgKyAweDA0LCBETUFfRFc4IHwgRE1BX05DIH0sCS8qIFVBUlQzX1RYICovCisJeyBBVTEwMDBfVUFSVDNfUEhZU19BRERSICsgMHgwMCwgRE1BX0RXOCB8IERNQV9OQyB8IERNQV9EUiB9LCAvKiBVQVJUM19SWCAqLworCXsgQVUxMDAwX1VTQkRfUEhZU19BRERSICsgMHgwMCwgRE1BX0RXOCB8IERNQV9OQyB8IERNQV9EUiB9LCAvKiBFUDBSRCAqLworCXsgQVUxMDAwX1VTQkRfUEhZU19BRERSICsgMHgwNCwgRE1BX0RXOCB8IERNQV9OQyB9LCAvKiBFUDBXUiAqLworCXsgQVUxMDAwX1VTQkRfUEhZU19BRERSICsgMHgwOCwgRE1BX0RXOCB8IERNQV9OQyB9LCAvKiBFUDJXUiAqLworCXsgQVUxMDAwX1VTQkRfUEhZU19BRERSICsgMHgwYywgRE1BX0RXOCB8IERNQV9OQyB9LCAvKiBFUDNXUiAqLworCXsgQVUxMDAwX1VTQkRfUEhZU19BRERSICsgMHgxMCwgRE1BX0RXOCB8IERNQV9OQyB8IERNQV9EUiB9LCAvKiBFUDRSRCAqLworCXsgQVUxMDAwX1VTQkRfUEhZU19BRERSICsgMHgxNCwgRE1BX0RXOCB8IERNQV9OQyB8IERNQV9EUiB9LCAvKiBFUDVSRCAqLworCS8qIG9uIEF1MTUwMCwgdGhlc2UgMiBhcmUgRE1BX1JFUTIvMyAoR1BJTzIwOC8yMDkpIGluc3RlYWQhICovCisJeyBBVTEwMDBfSTJTX1BIWVNfQUREUiArIDB4MDAsIERNQV9EVzMyIHwgRE1BX05DfSwJLyogSTJTIFRYICovCisJeyBBVTEwMDBfSTJTX1BIWVNfQUREUiArIDB4MDAsIERNQV9EVzMyIHwgRE1BX05DIHwgRE1BX0RSfSwgLyogSTJTIFJYICovCiB9OwogCiBpbnQgYXUxMDAwX2RtYV9yZWFkX3Byb2MoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IGZwb3MsCkBAIC0xMjMsMTAgKzEyNywxMCBAQAogCiAvKiBEZXZpY2UgRklGTyBhZGRyZXNzZXMgYW5kIGRlZmF1bHQgRE1BIG1vZGVzIC0gMm5kIGJhbmsgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2RldiBkbWFfZGV2X3RhYmxlX2JhbmsyW0RNQV9OVU1fREVWX0JBTksyXSA9IHsKLQl7IFNEMF9YTUlUX0ZJRk8sIERNQV9EUyB8IERNQV9EVzggfSwJCS8qIGNvaGVyZW50ICovCi0JeyBTRDBfUkVDVl9GSUZPLCBETUFfRFMgfCBETUFfRFIgfCBETUFfRFc4IH0sCS8qIGNvaGVyZW50ICovCi0JeyBTRDFfWE1JVF9GSUZPLCBETUFfRFMgfCBETUFfRFc4IH0sCQkvKiBjb2hlcmVudCAqLwotCXsgU0QxX1JFQ1ZfRklGTywgRE1BX0RTIHwgRE1BX0RSIHwgRE1BX0RXOCB9CS8qIGNvaGVyZW50ICovCisJeyBBVTExMDBfU0QwX1BIWVNfQUREUiArIDB4MDAsIERNQV9EUyB8IERNQV9EVzggfSwJCS8qIGNvaGVyZW50ICovCisJeyBBVTExMDBfU0QwX1BIWVNfQUREUiArIDB4MDQsIERNQV9EUyB8IERNQV9EVzggfCBETUFfRFIgfSwJLyogY29oZXJlbnQgKi8KKwl7IEFVMTEwMF9TRDFfUEhZU19BRERSICsgMHgwMCwgRE1BX0RTIHwgRE1BX0RXOCB9LAkJLyogY29oZXJlbnQgKi8KKwl7IEFVMTEwMF9TRDFfUEhZU19BRERSICsgMHgwNCwgRE1BX0RTIHwgRE1BX0RXOCB8IERNQV9EUiB9CS8qIGNvaGVyZW50ICovCiB9OwogCiB2b2lkIGR1bXBfYXUxMDAwX2RtYV9jaGFubmVsKHVuc2lnbmVkIGludCBkbWFucikKQEAgLTIwMiw3ICsyMDYsNyBAQAogCX0KIAogCS8qIGZpbGwgaXQgaW4gKi8KLQljaGFuLT5pbyA9IERNQV9DSEFOTkVMX0JBU0UgKyBpICogRE1BX0NIQU5ORUxfTEVOOworCWNoYW4tPmlvID0gS1NFRzFBRERSKEFVMTAwMF9ETUFfUEhZU19BRERSKSArIGkgKiBETUFfQ0hBTk5FTF9MRU47CiAJY2hhbi0+ZGV2X2lkID0gZGV2X2lkOwogCWNoYW4tPmRldl9zdHIgPSBkZXZfc3RyOwogCWNoYW4tPmZpZm9fYWRkciA9IGRldi0+Zmlmb19hZGRyOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2lycS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2lycS5jCmluZGV4IDU1ZGQ3YzguLjhiNjBiYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9pcnEuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vaXJxLmMKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KIAogI2luY2x1ZGUgPGFzbS9pcnFfY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CkBAIC0zOSw2ICszOSwzNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLXBiMXgwMC9wYjEwMDAuaD4KICNlbmRpZgogCisvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIElDX0NGRzBSRAkweDQwCisjZGVmaW5lIElDX0NGRzBTRVQJMHg0MAorI2RlZmluZSBJQ19DRkcwQ0xSCTB4NDQKKyNkZWZpbmUgSUNfQ0ZHMVJECTB4NDgKKyNkZWZpbmUgSUNfQ0ZHMVNFVAkweDQ4CisjZGVmaW5lIElDX0NGRzFDTFIJMHg0QworI2RlZmluZSBJQ19DRkcyUkQJMHg1MAorI2RlZmluZSBJQ19DRkcyU0VUCTB4NTAKKyNkZWZpbmUgSUNfQ0ZHMkNMUgkweDU0CisjZGVmaW5lIElDX1JFUTBJTlQJMHg1NAorI2RlZmluZSBJQ19TUkNSRAkweDU4CisjZGVmaW5lIElDX1NSQ1NFVAkweDU4CisjZGVmaW5lIElDX1NSQ0NMUgkweDVDCisjZGVmaW5lIElDX1JFUTFJTlQJMHg1QworI2RlZmluZSBJQ19BU1NJR05SRAkweDYwCisjZGVmaW5lIElDX0FTU0lHTlNFVAkweDYwCisjZGVmaW5lIElDX0FTU0lHTkNMUgkweDY0CisjZGVmaW5lIElDX1dBS0VSRAkweDY4CisjZGVmaW5lIElDX1dBS0VTRVQJMHg2OAorI2RlZmluZSBJQ19XQUtFQ0xSCTB4NkMKKyNkZWZpbmUgSUNfTUFTS1JECTB4NzAKKyNkZWZpbmUgSUNfTUFTS1NFVAkweDcwCisjZGVmaW5lIElDX01BU0tDTFIJMHg3NAorI2RlZmluZSBJQ19SSVNJTkdSRAkweDc4CisjZGVmaW5lIElDX1JJU0lOR0NMUgkweDc4CisjZGVmaW5lIElDX0ZBTExJTkdSRAkweDdDCisjZGVmaW5lIElDX0ZBTExJTkdDTFIJMHg3QworI2RlZmluZSBJQ19URVNUQklUCTB4ODAKKwogc3RhdGljIGludCBhdTF4X2ljX3NldHR5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKTsKIAogLyogTk9URSBvbiBpbnRlcnJ1cHQgcHJpb3JpdGllczogVGhlIG9yaWdpbmFsIHdyaXRlcnMgb2YgdGhpcyBjb2RlIHNhaWQ6CkBAIC0yMjEsODkgKzI1MSwxMDEgQEAKIHN0YXRpYyB2b2lkIGF1MXhfaWMwX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdW5zaWduZWQgaW50IGJpdCA9IGQtPmlycSAtIEFVMTAwMF9JTlRDMF9JTlRfQkFTRTsKLQlhdV93cml0ZWwoMSA8PCBiaXQsIElDMF9NQVNLU0VUKTsKLQlhdV93cml0ZWwoMSA8PCBiaXQsIElDMF9XQUtFU0VUKTsKLQlhdV9zeW5jKCk7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBVTEwMDBfSUMwX1BIWVNfQUREUik7CisKKwlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIGJhc2UgKyBJQ19NQVNLU0VUKTsKKwlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIGJhc2UgKyBJQ19XQUtFU0VUKTsKKwl3bWIoKTsKIH0KIAogc3RhdGljIHZvaWQgYXUxeF9pYzFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl1bnNpZ25lZCBpbnQgYml0ID0gZC0+aXJxIC0gQVUxMDAwX0lOVEMxX0lOVF9CQVNFOwotCWF1X3dyaXRlbCgxIDw8IGJpdCwgSUMxX01BU0tTRVQpOwotCWF1X3dyaXRlbCgxIDw8IGJpdCwgSUMxX1dBS0VTRVQpOworCXZvaWQgX19pb21lbSAqYmFzZSA9ICh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVUxMDAwX0lDMV9QSFlTX0FERFIpOworCisJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfTUFTS1NFVCk7CisJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfV0FLRVNFVCk7CiAKIC8qIHZlcnkgaGFja3kuIGRvZXMgdGhlIHBiMTAwMCBjcGxkIGF1dG8tZGlzYWJsZSB0aGlzIGludD8KICAqIG5vd2hlcmUgaW4gdGhlIGN1cnJlbnQga2VybmVsIHNvdXJjZXMgaXMgaXQgZGlzYWJsZWQuCS0tbWxhdQogICovCiAjaWYgZGVmaW5lZChDT05GSUdfTUlQU19QQjEwMDApCiAJaWYgKGQtPmlycSA9PSBBVTEwMDBfR1BJTzE1X0lOVCkKLQkJYXVfd3JpdGVsKDB4NDAwMCwgUEIxMDAwX01EUik7IC8qIGVuYWJsZSBpbnQgKi8KKwkJX19yYXdfd3JpdGVsKDB4NDAwMCwgKHZvaWQgX19pb21lbSAqKVBCMTAwMF9NRFIpOyAvKiBlbmFibGUgaW50ICovCiAjZW5kaWYKLQlhdV9zeW5jKCk7CisJd21iKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGF1MXhfaWMwX21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGludCBiaXQgPSBkLT5pcnEgLSBBVTEwMDBfSU5UQzBfSU5UX0JBU0U7Ci0JYXVfd3JpdGVsKDEgPDwgYml0LCBJQzBfTUFTS0NMUik7Ci0JYXVfd3JpdGVsKDEgPDwgYml0LCBJQzBfV0FLRUNMUik7Ci0JYXVfc3luYygpOworCXZvaWQgX19pb21lbSAqYmFzZSA9ICh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVUxMDAwX0lDMF9QSFlTX0FERFIpOworCisJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfTUFTS0NMUik7CisJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfV0FLRUNMUik7CisJd21iKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGF1MXhfaWMxX21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGludCBiaXQgPSBkLT5pcnEgLSBBVTEwMDBfSU5UQzFfSU5UX0JBU0U7Ci0JYXVfd3JpdGVsKDEgPDwgYml0LCBJQzFfTUFTS0NMUik7Ci0JYXVfd3JpdGVsKDEgPDwgYml0LCBJQzFfV0FLRUNMUik7Ci0JYXVfc3luYygpOworCXZvaWQgX19pb21lbSAqYmFzZSA9ICh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVUxMDAwX0lDMV9QSFlTX0FERFIpOworCisJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfTUFTS0NMUik7CisJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfV0FLRUNMUik7CisJd21iKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGF1MXhfaWMwX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdW5zaWduZWQgaW50IGJpdCA9IGQtPmlycSAtIEFVMTAwMF9JTlRDMF9JTlRfQkFTRTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSAodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKEFVMTAwMF9JQzBfUEhZU19BRERSKTsKIAogCS8qCiAJICogVGhpcyBtYXkgYXNzdW1lIHRoYXQgd2UgZG9uJ3QgZ2V0IGludGVycnVwdHMgZnJvbQogCSAqIGJvdGggZWRnZXMgYXQgb25jZSwgb3IgaWYgd2UgZG8sIHRoYXQgd2UgZG9uJ3QgY2FyZS4KIAkgKi8KLQlhdV93cml0ZWwoMSA8PCBiaXQsIElDMF9GQUxMSU5HQ0xSKTsKLQlhdV93cml0ZWwoMSA8PCBiaXQsIElDMF9SSVNJTkdDTFIpOwotCWF1X3N5bmMoKTsKKwlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIGJhc2UgKyBJQ19GQUxMSU5HQ0xSKTsKKwlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIGJhc2UgKyBJQ19SSVNJTkdDTFIpOworCXdtYigpOwogfQogCiBzdGF0aWMgdm9pZCBhdTF4X2ljMV9hY2soc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGludCBiaXQgPSBkLT5pcnEgLSBBVTEwMDBfSU5UQzFfSU5UX0JBU0U7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBVTEwMDBfSUMxX1BIWVNfQUREUik7CiAKIAkvKgogCSAqIFRoaXMgbWF5IGFzc3VtZSB0aGF0IHdlIGRvbid0IGdldCBpbnRlcnJ1cHRzIGZyb20KIAkgKiBib3RoIGVkZ2VzIGF0IG9uY2UsIG9yIGlmIHdlIGRvLCB0aGF0IHdlIGRvbid0IGNhcmUuCiAJICovCi0JYXVfd3JpdGVsKDEgPDwgYml0LCBJQzFfRkFMTElOR0NMUik7Ci0JYXVfd3JpdGVsKDEgPDwgYml0LCBJQzFfUklTSU5HQ0xSKTsKLQlhdV9zeW5jKCk7CisJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfRkFMTElOR0NMUik7CisJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfUklTSU5HQ0xSKTsKKwl3bWIoKTsKIH0KIAogc3RhdGljIHZvaWQgYXUxeF9pYzBfbWFza2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdW5zaWduZWQgaW50IGJpdCA9IGQtPmlycSAtIEFVMTAwMF9JTlRDMF9JTlRfQkFTRTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSAodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKEFVMTAwMF9JQzBfUEhZU19BRERSKTsKIAotCWF1X3dyaXRlbCgxIDw8IGJpdCwgSUMwX1dBS0VDTFIpOwotCWF1X3dyaXRlbCgxIDw8IGJpdCwgSUMwX01BU0tDTFIpOwotCWF1X3dyaXRlbCgxIDw8IGJpdCwgSUMwX1JJU0lOR0NMUik7Ci0JYXVfd3JpdGVsKDEgPDwgYml0LCBJQzBfRkFMTElOR0NMUik7Ci0JYXVfc3luYygpOworCV9fcmF3X3dyaXRlbCgxIDw8IGJpdCwgYmFzZSArIElDX1dBS0VDTFIpOworCV9fcmF3X3dyaXRlbCgxIDw8IGJpdCwgYmFzZSArIElDX01BU0tDTFIpOworCV9fcmF3X3dyaXRlbCgxIDw8IGJpdCwgYmFzZSArIElDX1JJU0lOR0NMUik7CisJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfRkFMTElOR0NMUik7CisJd21iKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGF1MXhfaWMxX21hc2thY2soc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGludCBiaXQgPSBkLT5pcnEgLSBBVTEwMDBfSU5UQzFfSU5UX0JBU0U7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBVTEwMDBfSUMxX1BIWVNfQUREUik7CiAKLQlhdV93cml0ZWwoMSA8PCBiaXQsIElDMV9XQUtFQ0xSKTsKLQlhdV93cml0ZWwoMSA8PCBiaXQsIElDMV9NQVNLQ0xSKTsKLQlhdV93cml0ZWwoMSA8PCBiaXQsIElDMV9SSVNJTkdDTFIpOwotCWF1X3dyaXRlbCgxIDw8IGJpdCwgSUMxX0ZBTExJTkdDTFIpOwotCWF1X3N5bmMoKTsKKwlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIGJhc2UgKyBJQ19XQUtFQ0xSKTsKKwlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIGJhc2UgKyBJQ19NQVNLQ0xSKTsKKwlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIGJhc2UgKyBJQ19SSVNJTkdDTFIpOworCV9fcmF3X3dyaXRlbCgxIDw8IGJpdCwgYmFzZSArIElDX0ZBTExJTkdDTFIpOworCXdtYigpOwogfQogCiBzdGF0aWMgaW50IGF1MXhfaWMxX3NldHdha2Uoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgb24pCkBAIC0zMTgsMTMgKzM2MCwxMyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQl3YWtlbXNrID0gYXVfcmVhZGwoU1lTX1dBS0VNU0spOworCXdha2Vtc2sgPSBfX3Jhd19yZWFkbCgodm9pZCBfX2lvbWVtICopU1lTX1dBS0VNU0spOwogCWlmIChvbikKIAkJd2FrZW1zayB8PSAxIDw8IGJpdDsKIAllbHNlCiAJCXdha2Vtc2sgJj0gfigxIDw8IGJpdCk7Ci0JYXVfd3JpdGVsKHdha2Vtc2ssIFNZU19XQUtFTVNLKTsKLQlhdV9zeW5jKCk7CisJX19yYXdfd3JpdGVsKHdha2Vtc2ssICh2b2lkIF9faW9tZW0gKilTWVNfV0FLRU1TSyk7CisJd21iKCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC0zNTYsODEgKzM5OCw3NCBAQAogc3RhdGljIGludCBhdTF4X2ljX3NldHR5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQogewogCXN0cnVjdCBpcnFfY2hpcCAqY2hpcDsKLQl1bnNpZ25lZCBsb25nIGljcls2XTsKLQl1bnNpZ25lZCBpbnQgYml0LCBpYywgaXJxID0gZC0+aXJxOworCXVuc2lnbmVkIGludCBiaXQsIGlycSA9IGQtPmlycTsKIAlpcnFfZmxvd19oYW5kbGVyX3QgaGFuZGxlciA9IE5VTEw7CiAJdW5zaWduZWQgY2hhciAqbmFtZSA9IE5VTEw7CisJdm9pZCBfX2lvbWVtICpiYXNlOwogCWludCByZXQ7CiAKIAlpZiAoaXJxID49IEFVMTAwMF9JTlRDMV9JTlRfQkFTRSkgewogCQliaXQgPSBpcnEgLSBBVTEwMDBfSU5UQzFfSU5UX0JBU0U7CiAJCWNoaXAgPSAmYXUxeF9pYzFfY2hpcDsKLQkJaWMgPSAxOworCQliYXNlID0gKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBVTEwMDBfSUMxX1BIWVNfQUREUik7CiAJfSBlbHNlIHsKIAkJYml0ID0gaXJxIC0gQVUxMDAwX0lOVEMwX0lOVF9CQVNFOwogCQljaGlwID0gJmF1MXhfaWMwX2NoaXA7Ci0JCWljID0gMDsKKwkJYmFzZSA9ICh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVUxMDAwX0lDMF9QSFlTX0FERFIpOwogCX0KIAogCWlmIChiaXQgPiAzMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpY3JbMF0gPSBpYyA/IElDMV9DRkcwU0VUIDogSUMwX0NGRzBTRVQ7Ci0JaWNyWzFdID0gaWMgPyBJQzFfQ0ZHMVNFVCA6IElDMF9DRkcxU0VUOwotCWljclsyXSA9IGljID8gSUMxX0NGRzJTRVQgOiBJQzBfQ0ZHMlNFVDsKLQlpY3JbM10gPSBpYyA/IElDMV9DRkcwQ0xSIDogSUMwX0NGRzBDTFI7Ci0JaWNyWzRdID0gaWMgPyBJQzFfQ0ZHMUNMUiA6IElDMF9DRkcxQ0xSOwotCWljcls1XSA9IGljID8gSUMxX0NGRzJDTFIgOiBJQzBfQ0ZHMkNMUjsKLQogCXJldCA9IDA7CiAKIAlzd2l0Y2ggKGZsb3dfdHlwZSkgewkvKiBjZmdyZWdzIDI6MTowICovCiAJY2FzZSBJUlFfVFlQRV9FREdFX1JJU0lORzoJLyogMDowOjEgKi8KLQkJYXVfd3JpdGVsKDEgPDwgYml0LCBpY3JbNV0pOwotCQlhdV93cml0ZWwoMSA8PCBiaXQsIGljcls0XSk7Ci0JCWF1X3dyaXRlbCgxIDw8IGJpdCwgaWNyWzBdKTsKKwkJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfQ0ZHMkNMUik7CisJCV9fcmF3X3dyaXRlbCgxIDw8IGJpdCwgYmFzZSArIElDX0NGRzFDTFIpOworCQlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIGJhc2UgKyBJQ19DRkcwU0VUKTsKIAkJaGFuZGxlciA9IGhhbmRsZV9lZGdlX2lycTsKIAkJbmFtZSA9ICJyaXNlZWRnZSI7CiAJCWJyZWFrOwogCWNhc2UgSVJRX1RZUEVfRURHRV9GQUxMSU5HOgkvKiAwOjE6MCAqLwotCQlhdV93cml0ZWwoMSA8PCBiaXQsIGljcls1XSk7Ci0JCWF1X3dyaXRlbCgxIDw8IGJpdCwgaWNyWzFdKTsKLQkJYXVfd3JpdGVsKDEgPDwgYml0LCBpY3JbM10pOworCQlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIGJhc2UgKyBJQ19DRkcyQ0xSKTsKKwkJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfQ0ZHMVNFVCk7CisJCV9fcmF3X3dyaXRlbCgxIDw8IGJpdCwgYmFzZSArIElDX0NGRzBDTFIpOwogCQloYW5kbGVyID0gaGFuZGxlX2VkZ2VfaXJxOwogCQluYW1lID0gImZhbGxlZGdlIjsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfVFlQRV9FREdFX0JPVEg6CS8qIDA6MToxICovCi0JCWF1X3dyaXRlbCgxIDw8IGJpdCwgaWNyWzVdKTsKLQkJYXVfd3JpdGVsKDEgPDwgYml0LCBpY3JbMV0pOwotCQlhdV93cml0ZWwoMSA8PCBiaXQsIGljclswXSk7CisJCV9fcmF3X3dyaXRlbCgxIDw8IGJpdCwgYmFzZSArIElDX0NGRzJDTFIpOworCQlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIGJhc2UgKyBJQ19DRkcxU0VUKTsKKwkJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfQ0ZHMFNFVCk7CiAJCWhhbmRsZXIgPSBoYW5kbGVfZWRnZV9pcnE7CiAJCW5hbWUgPSAiYm90aGVkZ2UiOwogCQlicmVhazsKIAljYXNlIElSUV9UWVBFX0xFVkVMX0hJR0g6CS8qIDE6MDoxICovCi0JCWF1X3dyaXRlbCgxIDw8IGJpdCwgaWNyWzJdKTsKLQkJYXVfd3JpdGVsKDEgPDwgYml0LCBpY3JbNF0pOwotCQlhdV93cml0ZWwoMSA8PCBiaXQsIGljclswXSk7CisJCV9fcmF3X3dyaXRlbCgxIDw8IGJpdCwgYmFzZSArIElDX0NGRzJTRVQpOworCQlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIGJhc2UgKyBJQ19DRkcxQ0xSKTsKKwkJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfQ0ZHMFNFVCk7CiAJCWhhbmRsZXIgPSBoYW5kbGVfbGV2ZWxfaXJxOwogCQluYW1lID0gImhpbGV2ZWwiOwogCQlicmVhazsKIAljYXNlIElSUV9UWVBFX0xFVkVMX0xPVzoJLyogMToxOjAgKi8KLQkJYXVfd3JpdGVsKDEgPDwgYml0LCBpY3JbMl0pOwotCQlhdV93cml0ZWwoMSA8PCBiaXQsIGljclsxXSk7Ci0JCWF1X3dyaXRlbCgxIDw8IGJpdCwgaWNyWzNdKTsKKwkJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfQ0ZHMlNFVCk7CisJCV9fcmF3X3dyaXRlbCgxIDw8IGJpdCwgYmFzZSArIElDX0NGRzFTRVQpOworCQlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIGJhc2UgKyBJQ19DRkcwQ0xSKTsKIAkJaGFuZGxlciA9IGhhbmRsZV9sZXZlbF9pcnE7CiAJCW5hbWUgPSAibG93bGV2ZWwiOwogCQlicmVhazsKIAljYXNlIElSUV9UWVBFX05PTkU6CQkvKiAwOjA6MCAqLwotCQlhdV93cml0ZWwoMSA8PCBiaXQsIGljcls1XSk7Ci0JCWF1X3dyaXRlbCgxIDw8IGJpdCwgaWNyWzRdKTsKLQkJYXVfd3JpdGVsKDEgPDwgYml0LCBpY3JbM10pOworCQlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIGJhc2UgKyBJQ19DRkcyQ0xSKTsKKwkJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfQ0ZHMUNMUik7CisJCV9fcmF3X3dyaXRlbCgxIDw8IGJpdCwgYmFzZSArIElDX0NGRzBDTFIpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRUlOVkFMOwogCX0KIAlfX2lycV9zZXRfY2hpcF9oYW5kbGVyX25hbWVfbG9ja2VkKGQtPmlycSwgY2hpcCwgaGFuZGxlciwgbmFtZSk7CiAKLQlhdV9zeW5jKCk7CisJd21iKCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDQ0LDIxICs0NzksMjEgQEAKIAkJb2ZmID0gTUlQU19DUFVfSVJRX0JBU0UgKyA3OwogCQlnb3RvIGhhbmRsZTsKIAl9IGVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVAyKSB7Ci0JCXMgPSBJQzBfUkVRMElOVDsKKwkJcyA9IEtTRUcxQUREUihBVTEwMDBfSUMwX1BIWVNfQUREUikgKyBJQ19SRVEwSU5UOwogCQlvZmYgPSBBVTEwMDBfSU5UQzBfSU5UX0JBU0U7CiAJfSBlbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMykgewotCQlzID0gSUMwX1JFUTFJTlQ7CisJCXMgPSBLU0VHMUFERFIoQVUxMDAwX0lDMF9QSFlTX0FERFIpICsgSUNfUkVRMUlOVDsKIAkJb2ZmID0gQVUxMDAwX0lOVEMwX0lOVF9CQVNFOwogCX0gZWxzZSBpZiAocGVuZGluZyAmIENBVVNFRl9JUDQpIHsKLQkJcyA9IElDMV9SRVEwSU5UOworCQlzID0gS1NFRzFBRERSKEFVMTAwMF9JQzFfUEhZU19BRERSKSArIElDX1JFUTBJTlQ7CiAJCW9mZiA9IEFVMTAwMF9JTlRDMV9JTlRfQkFTRTsKIAl9IGVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA1KSB7Ci0JCXMgPSBJQzFfUkVRMUlOVDsKKwkJcyA9IEtTRUcxQUREUihBVTEwMDBfSUMxX1BIWVNfQUREUikgKyBJQ19SRVExSU5UOwogCQlvZmYgPSBBVTEwMDBfSU5UQzFfSU5UX0JBU0U7CiAJfSBlbHNlCiAJCWdvdG8gc3B1cmlvdXM7CiAKLQlzID0gYXVfcmVhZGwocyk7CisJcyA9IF9fcmF3X3JlYWRsKCh2b2lkIF9faW9tZW0gKilzKTsKIAlpZiAodW5saWtlbHkoIXMpKSB7CiBzcHVyaW91czoKIAkJc3B1cmlvdXNfaW50ZXJydXB0KCk7CkBAIC00NjksNDggKzUwNCw0MiBAQAogCWRvX0lSUShvZmYpOwogfQogCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpY19pbml0KHZvaWQgX19pb21lbSAqYmFzZSkKK3sKKwkvKiBpbml0aWFsaXplIGludGVycnVwdCBjb250cm9sbGVyIHRvIGEgc2FmZSBzdGF0ZSAqLworCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBiYXNlICsgSUNfQ0ZHMENMUik7CisJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGJhc2UgKyBJQ19DRkcxQ0xSKTsKKwlfX3Jhd193cml0ZWwoMHhmZmZmZmZmZiwgYmFzZSArIElDX0NGRzJDTFIpOworCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBiYXNlICsgSUNfTUFTS0NMUik7CisJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGJhc2UgKyBJQ19BU1NJR05DTFIpOworCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBiYXNlICsgSUNfV0FLRUNMUik7CisJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGJhc2UgKyBJQ19TUkNTRVQpOworCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBiYXNlICsgSUNfRkFMTElOR0NMUik7CisJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGJhc2UgKyBJQ19SSVNJTkdDTFIpOworCV9fcmF3X3dyaXRlbCgweDAwMDAwMDAwLCBiYXNlICsgSUNfVEVTVEJJVCk7CisJd21iKCk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBhdTEwMDBfaW5pdF9pcnEoc3RydWN0IGF1MXh4eF9pcnFtYXAgKm1hcCkKIHsKIAl1bnNpZ25lZCBpbnQgYml0LCBpcnFfbnI7Ci0JaW50IGk7CisJdm9pZCBfX2lvbWVtICpiYXNlOwogCi0JLyoKLQkgKiBJbml0aWFsaXplIGludGVycnVwdCBjb250cm9sbGVycyB0byBhIHNhZmUgc3RhdGUuCi0JICovCi0JYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMF9DRkcwQ0xSKTsKLQlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMwX0NGRzFDTFIpOwotCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzBfQ0ZHMkNMUik7Ci0JYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMF9NQVNLQ0xSKTsKLQlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMwX0FTU0lHTkNMUik7Ci0JYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMF9XQUtFQ0xSKTsKLQlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMwX1NSQ1NFVCk7Ci0JYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMF9GQUxMSU5HQ0xSKTsKLQlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMwX1JJU0lOR0NMUik7Ci0JYXVfd3JpdGVsKDB4MDAwMDAwMDAsIElDMF9URVNUQklUKTsKLQotCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzFfQ0ZHMENMUik7Ci0JYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMV9DRkcxQ0xSKTsKLQlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMxX0NGRzJDTFIpOwotCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzFfTUFTS0NMUik7Ci0JYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMV9BU1NJR05DTFIpOwotCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzFfV0FLRUNMUik7Ci0JYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMV9TUkNTRVQpOwotCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzFfRkFMTElOR0NMUik7Ci0JYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMV9SSVNJTkdDTFIpOwotCWF1X3dyaXRlbCgweDAwMDAwMDAwLCBJQzFfVEVTVEJJVCk7Ci0KKwlpY19pbml0KCh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVUxMDAwX0lDMF9QSFlTX0FERFIpKTsKKwlpY19pbml0KCh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVUxMDAwX0lDMV9QSFlTX0FERFIpKTsKIAltaXBzX2NwdV9pcnFfaW5pdCgpOwogCiAJLyogcmVnaXN0ZXIgYWxsIDY0IHBvc3NpYmxlIElDMCtJQzEgaXJxIHNvdXJjZXMgYXMgdHlwZSAibm9uZSIuCiAJICogVXNlIHNldF9pcnFfdHlwZSgpIHRvIHNldCBlZGdlL2xldmVsIGJlaGF2aW91ciBhdCBydW50aW1lLgogCSAqLwotCWZvciAoaSA9IEFVMTAwMF9JTlRDMF9JTlRfQkFTRTsKLQkgICAgIChpIDwgQVUxMDAwX0lOVEMwX0lOVF9CQVNFICsgMzIpOyBpKyspCi0JCWF1MXhfaWNfc2V0dHlwZShpcnFfZ2V0X2lycV9kYXRhKGkpLCBJUlFfVFlQRV9OT05FKTsKKwlmb3IgKGlycV9uciA9IEFVMTAwMF9JTlRDMF9JTlRfQkFTRTsKKwkgICAgIChpcnFfbnIgPCBBVTEwMDBfSU5UQzBfSU5UX0JBU0UgKyAzMik7IGlycV9ucisrKQorCQlhdTF4X2ljX3NldHR5cGUoaXJxX2dldF9pcnFfZGF0YShpcnFfbnIpLCBJUlFfVFlQRV9OT05FKTsKIAotCWZvciAoaSA9IEFVMTAwMF9JTlRDMV9JTlRfQkFTRTsKLQkgICAgIChpIDwgQVUxMDAwX0lOVEMxX0lOVF9CQVNFICsgMzIpOyBpKyspCi0JCWF1MXhfaWNfc2V0dHlwZShpcnFfZ2V0X2lycV9kYXRhKGkpLCBJUlFfVFlQRV9OT05FKTsKKwlmb3IgKGlycV9uciA9IEFVMTAwMF9JTlRDMV9JTlRfQkFTRTsKKwkgICAgIChpcnFfbnIgPCBBVTEwMDBfSU5UQzFfSU5UX0JBU0UgKyAzMik7IGlycV9ucisrKQorCQlhdTF4X2ljX3NldHR5cGUoaXJxX2dldF9pcnFfZGF0YShpcnFfbnIpLCBJUlFfVFlQRV9OT05FKTsKIAogCS8qCiAJICogSW5pdGlhbGl6ZSBJQzAsIHdoaWNoIGlzIGZpeGVkIHBlciBwcm9jZXNzb3IuCkBAIC01MjAsMTMgKzU0OSwxMyBAQAogCiAJCWlmIChpcnFfbnIgPj0gQVUxMDAwX0lOVEMxX0lOVF9CQVNFKSB7CiAJCQliaXQgPSBpcnFfbnIgLSBBVTEwMDBfSU5UQzFfSU5UX0JBU0U7Ci0JCQlpZiAobWFwLT5pbV9yZXF1ZXN0KQotCQkJCWF1X3dyaXRlbCgxIDw8IGJpdCwgSUMxX0FTU0lHTlNFVCk7CisJCQliYXNlID0gKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBVTEwMDBfSUMxX1BIWVNfQUREUik7CiAJCX0gZWxzZSB7CiAJCQliaXQgPSBpcnFfbnIgLSBBVTEwMDBfSU5UQzBfSU5UX0JBU0U7Ci0JCQlpZiAobWFwLT5pbV9yZXF1ZXN0KQotCQkJCWF1X3dyaXRlbCgxIDw8IGJpdCwgSUMwX0FTU0lHTlNFVCk7CisJCQliYXNlID0gKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBVTEwMDBfSUMwX1BIWVNfQUREUik7CiAJCX0KKwkJaWYgKG1hcC0+aW1fcmVxdWVzdCkKKwkJCV9fcmF3X3dyaXRlbCgxIDw8IGJpdCwgYmFzZSArIElDX0FTU0lHTlNFVCk7CiAKIAkJYXUxeF9pY19zZXR0eXBlKGlycV9nZXRfaXJxX2RhdGEoaXJxX25yKSwgbWFwLT5pbV90eXBlKTsKIAkJKyttYXA7CkBAIC01NTYsOTAgKzU4NSw2MiBAQAogCX0KIH0KIAotc3RydWN0IGFsY2hlbXlfaWNfc3lzZGV2IHsKLQlzdHJ1Y3Qgc3lzX2RldmljZSBzeXNkZXY7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlOwotCXVuc2lnbmVkIGxvbmcgcG1kYXRhWzddOwotfTsKIAotc3RhdGljIGludCBhbGNoZW15X2ljX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgYWxjaGVteV9pY19wbWRhdGFbNyAqIDJdOworCitzdGF0aWMgaW5saW5lIHZvaWQgYWxjaGVteV9pY19zdXNwZW5kX29uZSh2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGxvbmcgKmQpCiB7Ci0Jc3RydWN0IGFsY2hlbXlfaWNfc3lzZGV2ICppY2RldiA9Ci0JCQljb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgYWxjaGVteV9pY19zeXNkZXYsIHN5c2Rldik7CisJZFswXSA9IF9fcmF3X3JlYWRsKGJhc2UgKyBJQ19DRkcwUkQpOworCWRbMV0gPSBfX3Jhd19yZWFkbChiYXNlICsgSUNfQ0ZHMVJEKTsKKwlkWzJdID0gX19yYXdfcmVhZGwoYmFzZSArIElDX0NGRzJSRCk7CisJZFszXSA9IF9fcmF3X3JlYWRsKGJhc2UgKyBJQ19TUkNSRCk7CisJZFs0XSA9IF9fcmF3X3JlYWRsKGJhc2UgKyBJQ19BU1NJR05SRCk7CisJZFs1XSA9IF9fcmF3X3JlYWRsKGJhc2UgKyBJQ19XQUtFUkQpOworCWRbNl0gPSBfX3Jhd19yZWFkbChiYXNlICsgSUNfTUFTS1JEKTsKKwlpY19pbml0KGJhc2UpOwkJLyogc2h1dCBpdCB1cCB0b28gd2hpbGUgYXQgaXQgKi8KK30KIAotCWljZGV2LT5wbWRhdGFbMF0gPSBfX3Jhd19yZWFkbChpY2Rldi0+YmFzZSArIElDX0NGRzBSRCk7Ci0JaWNkZXYtPnBtZGF0YVsxXSA9IF9fcmF3X3JlYWRsKGljZGV2LT5iYXNlICsgSUNfQ0ZHMVJEKTsKLQlpY2Rldi0+cG1kYXRhWzJdID0gX19yYXdfcmVhZGwoaWNkZXYtPmJhc2UgKyBJQ19DRkcyUkQpOwotCWljZGV2LT5wbWRhdGFbM10gPSBfX3Jhd19yZWFkbChpY2Rldi0+YmFzZSArIElDX1NSQ1JEKTsKLQlpY2Rldi0+cG1kYXRhWzRdID0gX19yYXdfcmVhZGwoaWNkZXYtPmJhc2UgKyBJQ19BU1NJR05SRCk7Ci0JaWNkZXYtPnBtZGF0YVs1XSA9IF9fcmF3X3JlYWRsKGljZGV2LT5iYXNlICsgSUNfV0FLRVJEKTsKLQlpY2Rldi0+cG1kYXRhWzZdID0gX19yYXdfcmVhZGwoaWNkZXYtPmJhc2UgKyBJQ19NQVNLUkQpOworc3RhdGljIGlubGluZSB2b2lkIGFsY2hlbXlfaWNfcmVzdW1lX29uZSh2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGxvbmcgKmQpCit7CisJaWNfaW5pdChiYXNlKTsKIAorCV9fcmF3X3dyaXRlbChkWzBdLCBiYXNlICsgSUNfQ0ZHMFNFVCk7CisJX19yYXdfd3JpdGVsKGRbMV0sIGJhc2UgKyBJQ19DRkcxU0VUKTsKKwlfX3Jhd193cml0ZWwoZFsyXSwgYmFzZSArIElDX0NGRzJTRVQpOworCV9fcmF3X3dyaXRlbChkWzNdLCBiYXNlICsgSUNfU1JDU0VUKTsKKwlfX3Jhd193cml0ZWwoZFs0XSwgYmFzZSArIElDX0FTU0lHTlNFVCk7CisJX19yYXdfd3JpdGVsKGRbNV0sIGJhc2UgKyBJQ19XQUtFU0VUKTsKKwl3bWIoKTsKKworCV9fcmF3X3dyaXRlbChkWzZdLCBiYXNlICsgSUNfTUFTS1NFVCk7CisJd21iKCk7Cit9CisKK3N0YXRpYyBpbnQgYWxjaGVteV9pY19zdXNwZW5kKHZvaWQpCit7CisJYWxjaGVteV9pY19zdXNwZW5kX29uZSgodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKEFVMTAwMF9JQzBfUEhZU19BRERSKSwKKwkJCSAgICAgICBhbGNoZW15X2ljX3BtZGF0YSk7CisJYWxjaGVteV9pY19zdXNwZW5kX29uZSgodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKEFVMTAwMF9JQzFfUEhZU19BRERSKSwKKwkJCSAgICAgICAmYWxjaGVteV9pY19wbWRhdGFbN10pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFsY2hlbXlfaWNfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBhbGNoZW15X2ljX3Jlc3VtZSh2b2lkKQogewotCXN0cnVjdCBhbGNoZW15X2ljX3N5c2RldiAqaWNkZXYgPQotCQkJY29udGFpbmVyX29mKGRldiwgc3RydWN0IGFsY2hlbXlfaWNfc3lzZGV2LCBzeXNkZXYpOwotCi0JX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGljZGV2LT5iYXNlICsgSUNfTUFTS0NMUik7Ci0JX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGljZGV2LT5iYXNlICsgSUNfQ0ZHMENMUik7Ci0JX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGljZGV2LT5iYXNlICsgSUNfQ0ZHMUNMUik7Ci0JX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGljZGV2LT5iYXNlICsgSUNfQ0ZHMkNMUik7Ci0JX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGljZGV2LT5iYXNlICsgSUNfU1JDQ0xSKTsKLQlfX3Jhd193cml0ZWwoMHhmZmZmZmZmZiwgaWNkZXYtPmJhc2UgKyBJQ19BU1NJR05DTFIpOwotCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBpY2Rldi0+YmFzZSArIElDX1dBS0VDTFIpOwotCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBpY2Rldi0+YmFzZSArIElDX1JJU0lOR0NMUik7Ci0JX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGljZGV2LT5iYXNlICsgSUNfRkFMTElOR0NMUik7Ci0JX19yYXdfd3JpdGVsKDB4MDAwMDAwMDAsIGljZGV2LT5iYXNlICsgSUNfVEVTVEJJVCk7Ci0Jd21iKCk7Ci0JX19yYXdfd3JpdGVsKGljZGV2LT5wbWRhdGFbMF0sIGljZGV2LT5iYXNlICsgSUNfQ0ZHMFNFVCk7Ci0JX19yYXdfd3JpdGVsKGljZGV2LT5wbWRhdGFbMV0sIGljZGV2LT5iYXNlICsgSUNfQ0ZHMVNFVCk7Ci0JX19yYXdfd3JpdGVsKGljZGV2LT5wbWRhdGFbMl0sIGljZGV2LT5iYXNlICsgSUNfQ0ZHMlNFVCk7Ci0JX19yYXdfd3JpdGVsKGljZGV2LT5wbWRhdGFbM10sIGljZGV2LT5iYXNlICsgSUNfU1JDU0VUKTsKLQlfX3Jhd193cml0ZWwoaWNkZXYtPnBtZGF0YVs0XSwgaWNkZXYtPmJhc2UgKyBJQ19BU1NJR05TRVQpOwotCV9fcmF3X3dyaXRlbChpY2Rldi0+cG1kYXRhWzVdLCBpY2Rldi0+YmFzZSArIElDX1dBS0VTRVQpOwotCXdtYigpOwotCi0JX19yYXdfd3JpdGVsKGljZGV2LT5wbWRhdGFbNl0sIGljZGV2LT5iYXNlICsgSUNfTUFTS1NFVCk7Ci0Jd21iKCk7Ci0KLQlyZXR1cm4gMDsKKwlhbGNoZW15X2ljX3Jlc3VtZV9vbmUoKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBVTEwMDBfSUMxX1BIWVNfQUREUiksCisJCQkgICAgICAmYWxjaGVteV9pY19wbWRhdGFbN10pOworCWFsY2hlbXlfaWNfcmVzdW1lX29uZSgodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKEFVMTAwMF9JQzBfUEhZU19BRERSKSwKKwkJCSAgICAgIGFsY2hlbXlfaWNfcG1kYXRhKTsKIH0KIAotc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgYWxjaGVteV9pY19zeXNkZXZfY2xhc3MgPSB7Ci0JLm5hbWUJCT0gImljIiwKK3N0YXRpYyBzdHJ1Y3Qgc3lzY29yZV9vcHMgYWxjaGVteV9pY19zeXNjb3JlX29wcyA9IHsKIAkuc3VzcGVuZAk9IGFsY2hlbXlfaWNfc3VzcGVuZCwKIAkucmVzdW1lCQk9IGFsY2hlbXlfaWNfcmVzdW1lLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgYWxjaGVteV9pY19zeXNkZXZfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYWxjaGVteV9pY19wbV9pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IGFsY2hlbXlfaWNfc3lzZGV2ICppY2RldjsKLQl1bnNpZ25lZCBsb25nIGljYmFzZVsyXSA9IHsgSUMwX1BIWVNfQUREUiwgSUMxX1BIWVNfQUREUiB9OwotCWludCBlcnIsIGk7Ci0KLQllcnIgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJmFsY2hlbXlfaWNfc3lzZGV2X2NsYXNzKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotCQlpY2RldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhbGNoZW15X2ljX3N5c2RldiksIEdGUF9LRVJORUwpOwotCQlpZiAoIWljZGV2KQotCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJaWNkZXYtPmJhc2UgPSBpb3JlbWFwKGljYmFzZVtpXSwgMHgxMDAwKTsKLQotCQlpY2Rldi0+c3lzZGV2LmlkID0gaTsKLQkJaWNkZXYtPnN5c2Rldi5jbHMgPSAmYWxjaGVteV9pY19zeXNkZXZfY2xhc3M7Ci0JCWVyciA9IHN5c2Rldl9yZWdpc3RlcigmaWNkZXYtPnN5c2Rldik7Ci0JCWlmIChlcnIpIHsKLQkJCWtmcmVlKGljZGV2KTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9Ci0KKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmYWxjaGVteV9pY19zeXNjb3JlX29wcyk7CiAJcmV0dXJuIDA7CiB9Ci1kZXZpY2VfaW5pdGNhbGwoYWxjaGVteV9pY19zeXNkZXZfaW5pdCk7CitkZXZpY2VfaW5pdGNhbGwoYWxjaGVteV9pY19wbV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3BsYXRmb3JtLmMKaW5kZXggOWU3ODE0ZC4uM2IyYzE4YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3BsYXRmb3JtLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3BsYXRmb3JtLmMKQEAgLTEzLDkgKzEzLDEwIEBACiAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTF4eHguaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmg+CkBAIC0zMCwyMSArMzEsMTIgQEAKICNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTAKIAlzd2l0Y2ggKHN0YXRlKSB7CiAJY2FzZSAwOgotCQlpZiAoKF9fcmF3X3JlYWRsKHBvcnQtPm1lbWJhc2UgKyBVQVJUX01PRF9DTlRSTCkgJiAzKSAhPSAzKSB7Ci0JCQkvKiBwb3dlci1vbiBzZXF1ZW5jZSBhcyBzdWdnZXN0ZWQgaW4gdGhlIGRhdGFib29rcyAqLwotCQkJX19yYXdfd3JpdGVsKDAsIHBvcnQtPm1lbWJhc2UgKyBVQVJUX01PRF9DTlRSTCk7Ci0JCQl3bWIoKTsKLQkJCV9fcmF3X3dyaXRlbCgxLCBwb3J0LT5tZW1iYXNlICsgVUFSVF9NT0RfQ05UUkwpOwotCQkJd21iKCk7Ci0JCX0KLQkJX19yYXdfd3JpdGVsKDMsIHBvcnQtPm1lbWJhc2UgKyBVQVJUX01PRF9DTlRSTCk7IC8qIGZ1bGwgb24gKi8KLQkJd21iKCk7CisJCWFsY2hlbXlfdWFydF9lbmFibGUoQ1BIWVNBRERSKHBvcnQtPm1lbWJhc2UpKTsKIAkJc2VyaWFsODI1MF9kb19wbShwb3J0LCBzdGF0ZSwgb2xkX3N0YXRlKTsKIAkJYnJlYWs7CiAJY2FzZSAzOgkJLyogcG93ZXIgb2ZmICovCiAJCXNlcmlhbDgyNTBfZG9fcG0ocG9ydCwgc3RhdGUsIG9sZF9zdGF0ZSk7Ci0JCV9fcmF3X3dyaXRlbCgwLCBwb3J0LT5tZW1iYXNlICsgVUFSVF9NT0RfQ05UUkwpOwotCQl3bWIoKTsKKwkJYWxjaGVteV91YXJ0X2Rpc2FibGUoQ1BIWVNBRERSKHBvcnQtPm1lbWJhc2UpKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJc2VyaWFsODI1MF9kb19wbShwb3J0LCBzdGF0ZSwgb2xkX3N0YXRlKTsKQEAgLTY1LDM4ICs1Nyw2MCBAQAogCQkucG0JCT0gYWxjaGVteV84MjUwX3BtLAkJXAogCX0KIAotc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBhdTF4MDBfdWFydF9kYXRhW10gPSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKLQlQT1JUKFVBUlQwX1BIWVNfQUREUiwgQVUxMDAwX1VBUlQwX0lOVCksCi0JUE9SVChVQVJUMV9QSFlTX0FERFIsIEFVMTAwMF9VQVJUMV9JTlQpLAotCVBPUlQoVUFSVDJfUEhZU19BRERSLCBBVTEwMDBfVUFSVDJfSU5UKSwKLQlQT1JUKFVBUlQzX1BIWVNfQUREUiwgQVUxMDAwX1VBUlQzX0lOVCksCi0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTAwKQotCVBPUlQoVUFSVDBfUEhZU19BRERSLCBBVTE1MDBfVUFSVDBfSU5UKSwKLQlQT1JUKFVBUlQzX1BIWVNfQUREUiwgQVUxNTAwX1VBUlQzX0lOVCksCi0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMTAwKQotCVBPUlQoVUFSVDBfUEhZU19BRERSLCBBVTExMDBfVUFSVDBfSU5UKSwKLQlQT1JUKFVBUlQxX1BIWVNfQUREUiwgQVUxMTAwX1VBUlQxX0lOVCksCi0JUE9SVChVQVJUM19QSFlTX0FERFIsIEFVMTEwMF9VQVJUM19JTlQpLAotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTU1MCkKLQlQT1JUKFVBUlQwX1BIWVNfQUREUiwgQVUxNTUwX1VBUlQwX0lOVCksCi0JUE9SVChVQVJUMV9QSFlTX0FERFIsIEFVMTU1MF9VQVJUMV9JTlQpLAotCVBPUlQoVUFSVDNfUEhZU19BRERSLCBBVTE1NTBfVUFSVDNfSU5UKSwKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEyMDApCi0JUE9SVChVQVJUMF9QSFlTX0FERFIsIEFVMTIwMF9VQVJUMF9JTlQpLAotCVBPUlQoVUFSVDFfUEhZU19BRERSLCBBVTEyMDBfVUFSVDFfSU5UKSwKLSNlbmRpZgotCXsgfSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgYXUxeDAwX3VhcnRfZGF0YVtdWzRdIF9faW5pdGRhdGEgPSB7CisJW0FMQ0hFTVlfQ1BVX0FVMTAwMF0gPSB7CisJCVBPUlQoQVUxMDAwX1VBUlQwX1BIWVNfQUREUiwgQVUxMDAwX1VBUlQwX0lOVCksCisJCVBPUlQoQVUxMDAwX1VBUlQxX1BIWVNfQUREUiwgQVUxMDAwX1VBUlQxX0lOVCksCisJCVBPUlQoQVUxMDAwX1VBUlQyX1BIWVNfQUREUiwgQVUxMDAwX1VBUlQyX0lOVCksCisJCVBPUlQoQVUxMDAwX1VBUlQzX1BIWVNfQUREUiwgQVUxMDAwX1VBUlQzX0lOVCksCisJfSwKKwlbQUxDSEVNWV9DUFVfQVUxNTAwXSA9IHsKKwkJUE9SVChBVTEwMDBfVUFSVDBfUEhZU19BRERSLCBBVTE1MDBfVUFSVDBfSU5UKSwKKwkJUE9SVChBVTEwMDBfVUFSVDNfUEhZU19BRERSLCBBVTE1MDBfVUFSVDNfSU5UKSwKKwl9LAorCVtBTENIRU1ZX0NQVV9BVTExMDBdID0geworCQlQT1JUKEFVMTAwMF9VQVJUMF9QSFlTX0FERFIsIEFVMTEwMF9VQVJUMF9JTlQpLAorCQlQT1JUKEFVMTAwMF9VQVJUMV9QSFlTX0FERFIsIEFVMTEwMF9VQVJUMV9JTlQpLAorCQlQT1JUKEFVMTAwMF9VQVJUM19QSFlTX0FERFIsIEFVMTEwMF9VQVJUM19JTlQpLAorCX0sCisJW0FMQ0hFTVlfQ1BVX0FVMTU1MF0gPSB7CisJCVBPUlQoQVUxMDAwX1VBUlQwX1BIWVNfQUREUiwgQVUxNTUwX1VBUlQwX0lOVCksCisJCVBPUlQoQVUxMDAwX1VBUlQxX1BIWVNfQUREUiwgQVUxNTUwX1VBUlQxX0lOVCksCisJCVBPUlQoQVUxMDAwX1VBUlQzX1BIWVNfQUREUiwgQVUxNTUwX1VBUlQzX0lOVCksCisJfSwKKwlbQUxDSEVNWV9DUFVfQVUxMjAwXSA9IHsKKwkJUE9SVChBVTEwMDBfVUFSVDBfUEhZU19BRERSLCBBVTEyMDBfVUFSVDBfSU5UKSwKKwkJUE9SVChBVTEwMDBfVUFSVDFfUEhZU19BRERSLCBBVTEyMDBfVUFSVDFfSU5UKSwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXUxeHgwX3VhcnRfZGV2aWNlID0gewogCS5uYW1lCQkJPSAic2VyaWFsODI1MCIsCiAJLmlkCQkJPSBQTEFUODI1MF9ERVZfQVUxWDAwLAotCS5kZXYJCQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSBhdTF4MDBfdWFydF9kYXRhLAotCX0sCiB9OwogCitzdGF0aWMgdm9pZCBfX2luaXQgYWxjaGVteV9zZXR1cF91YXJ0cyhpbnQgY3R5cGUpCit7CisJdW5zaWduZWQgaW50IHVhcnRjbGsgPSBnZXRfYXUxeDAwX3VhcnRfYmF1ZF9iYXNlKCkgKiAxNjsKKwlpbnQgcyA9IHNpemVvZihzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQpOworCWludCBjID0gYWxjaGVteV9nZXRfdWFydHMoY3R5cGUpOworCXN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCAqcG9ydHM7CisKKwlwb3J0cyA9IGt6YWxsb2MocyAqIChjICsgMSksIEdGUF9LRVJORUwpOworCWlmICghcG9ydHMpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQWxjaGVteTogbm8gbWVtb3J5IGZvciBVQVJUIGRhdGFcbiIpOworCQlyZXR1cm47CisJfQorCW1lbWNweShwb3J0cywgYXUxeDAwX3VhcnRfZGF0YVtjdHlwZV0sIHMgKiBjKTsKKwlhdTF4eDBfdWFydF9kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSBwb3J0czsKKworCS8qIEZpbGwgdXAgdWFydGNsay4gKi8KKwlmb3IgKHMgPSAwOyBzIDwgYzsgcysrKQorCQlwb3J0c1tzXS51YXJ0Y2xrID0gdWFydGNsazsKKwlpZiAocGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdTF4eDBfdWFydF9kZXZpY2UpKQorCQlwcmludGsoS0VSTl9JTkZPICJBbGNoZW15OiBmYWlsZWQgdG8gcmVnaXN0ZXIgVUFSVHNcbiIpOworfQorCiAvKiBPSENJIChVU0IgZnVsbCBzcGVlZCBob3N0IGNvbnRyb2xsZXIpICovCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGF1MXh4eF91c2Jfb2hjaV9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CkBAIC0yNjksOCArMjgzLDggQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhdTEyMDBfbW1jMF9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7Ci0JCS5zdGFydCAgICAgICAgICA9IFNEMF9QSFlTX0FERFIsCi0JCS5lbmQgICAgICAgICAgICA9IFNEMF9QSFlTX0FERFIgKyAweDdmZmZmLAorCQkuc3RhcnQgICAgICAgICAgPSBBVTExMDBfU0QwX1BIWVNfQUREUiwKKwkJLmVuZCAgICAgICAgICAgID0gQVUxMTAwX1NEMF9QSFlTX0FERFIgKyAweGZmZiwKIAkJLmZsYWdzICAgICAgICAgID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7CkBAIC0zMDUsOCArMzE5LDggQEAKICNpZm5kZWYgQ09ORklHX01JUFNfREIxMjAwCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGF1MTIwMF9tbWMxX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKLQkJLnN0YXJ0ICAgICAgICAgID0gU0QxX1BIWVNfQUREUiwKLQkJLmVuZCAgICAgICAgICAgID0gU0QxX1BIWVNfQUREUiArIDB4N2ZmZmYsCisJCS5zdGFydCAgICAgICAgICA9IEFVMTEwMF9TRDFfUEhZU19BRERSLAorCQkuZW5kICAgICAgICAgICAgPSBBVTExMDBfU0QxX1BIWVNfQUREUiArIDB4ZmZmLAogCQkuZmxhZ3MgICAgICAgICAgPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKQEAgLTM1OSwxNSArMzczLDE2IEBACiAjZW5kaWYKIAogLyogTWFjcm8gdG8gaGVscCBkZWZpbmluZyB0aGUgRXRoZXJuZXQgTUFDIHJlc291cmNlcyAqLworI2RlZmluZSBNQUNfUkVTX0NPVU5UCTMJLyogTUFDIHJlZ3MgYmFzZSwgTUFDIGVuYWJsZSByZWcsIE1BQyBJTlQgKi8KICNkZWZpbmUgTUFDX1JFUyhfYmFzZSwgX2VuYWJsZSwgX2lycSkJCQlcCiAJewkJCQkJCVwKLQkJLnN0YXJ0CT0gQ1BIWVNBRERSKF9iYXNlKSwJCVwKLQkJLmVuZAk9IENQSFlTQUREUihfYmFzZSArIDB4ZmZmZiksCVwKKwkJLnN0YXJ0CT0gX2Jhc2UsCQkJXAorCQkuZW5kCT0gX2Jhc2UgKyAweGZmZmYsCQlcCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAkJXAogCX0sCQkJCQkJXAogCXsJCQkJCQlcCi0JCS5zdGFydAk9IENQSFlTQUREUihfZW5hYmxlKSwJCVwKLQkJLmVuZAk9IENQSFlTQUREUihfZW5hYmxlICsgMHgzKSwJXAorCQkuc3RhcnQJPSBfZW5hYmxlLAkJCVwKKwkJLmVuZAk9IF9lbmFibGUgKyAweDMsCQlcCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAkJXAogCX0sCQkJCQkJXAogCXsJCQkJCQlcCkBAIC0zNzYsMTkgKzM5MSwyOSBAQAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUQkJXAogCX0KIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhdTF4eHhfZXRoMF9yZXNvdXJjZXNbXSA9IHsKLSNpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQotCU1BQ19SRVMoQVUxMDAwX0VUSDBfQkFTRSwgQVUxMDAwX01BQzBfRU5BQkxFLCBBVTEwMDBfTUFDMF9ETUFfSU5UKSwKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTExMDApCi0JTUFDX1JFUyhBVTExMDBfRVRIMF9CQVNFLCBBVTExMDBfTUFDMF9FTkFCTEUsIEFVMTEwMF9NQUMwX0RNQV9JTlQpLAotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTU1MCkKLQlNQUNfUkVTKEFVMTU1MF9FVEgwX0JBU0UsIEFVMTU1MF9NQUMwX0VOQUJMRSwgQVUxNTUwX01BQzBfRE1BX0lOVCksCi0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTAwKQotCU1BQ19SRVMoQVUxNTAwX0VUSDBfQkFTRSwgQVUxNTAwX01BQzBfRU5BQkxFLCBBVTE1MDBfTUFDMF9ETUFfSU5UKSwKLSNlbmRpZgorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhdTF4eHhfZXRoMF9yZXNvdXJjZXNbXVtNQUNfUkVTX0NPVU5UXSBfX2luaXRkYXRhID0geworCVtBTENIRU1ZX0NQVV9BVTEwMDBdID0geworCQlNQUNfUkVTKEFVMTAwMF9NQUMwX1BIWVNfQUREUiwKKwkJCUFVMTAwMF9NQUNFTl9QSFlTX0FERFIsCisJCQlBVTEwMDBfTUFDMF9ETUFfSU5UKQorCX0sCisJW0FMQ0hFTVlfQ1BVX0FVMTUwMF0gPSB7CisJCU1BQ19SRVMoQVUxNTAwX01BQzBfUEhZU19BRERSLAorCQkJQVUxNTAwX01BQ0VOX1BIWVNfQUREUiwKKwkJCUFVMTUwMF9NQUMwX0RNQV9JTlQpCisJfSwKKwlbQUxDSEVNWV9DUFVfQVUxMTAwXSA9IHsKKwkJTUFDX1JFUyhBVTEwMDBfTUFDMF9QSFlTX0FERFIsCisJCQlBVTEwMDBfTUFDRU5fUEhZU19BRERSLAorCQkJQVUxMTAwX01BQzBfRE1BX0lOVCkKKwl9LAorCVtBTENIRU1ZX0NQVV9BVTE1NTBdID0geworCQlNQUNfUkVTKEFVMTAwMF9NQUMwX1BIWVNfQUREUiwKKwkJCUFVMTAwMF9NQUNFTl9QSFlTX0FERFIsCisJCQlBVTE1NTBfTUFDMF9ETUFfSU5UKQorCX0sCiB9OwogCi0KIHN0YXRpYyBzdHJ1Y3QgYXUxMDAwX2V0aF9wbGF0Zm9ybV9kYXRhIGF1MXh4eF9ldGgwX3BsYXRmb3JtX2RhdGEgPSB7CiAJLnBoeTFfc2VhcmNoX21hYzAgPSAxLAogfTsKQEAgLTM5NiwyMCArNDIxLDI2IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdTF4eHhfZXRoMF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gImF1MTAwMC1ldGgiLAogCS5pZAkJPSAwLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhdTF4eHhfZXRoMF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IGF1MXh4eF9ldGgwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IE1BQ19SRVNfQ09VTlQsCiAJLmRldi5wbGF0Zm9ybV9kYXRhID0gJmF1MXh4eF9ldGgwX3BsYXRmb3JtX2RhdGEsCiB9OwogCi0jaWZuZGVmIENPTkZJR19TT0NfQVUxMTAwCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGF1MXh4eF9ldGgxX3Jlc291cmNlc1tdID0gewotI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCi0JTUFDX1JFUyhBVTEwMDBfRVRIMV9CQVNFLCBBVTEwMDBfTUFDMV9FTkFCTEUsIEFVMTAwMF9NQUMxX0RNQV9JTlQpLAotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTU1MCkKLQlNQUNfUkVTKEFVMTU1MF9FVEgxX0JBU0UsIEFVMTU1MF9NQUMxX0VOQUJMRSwgQVUxNTUwX01BQzFfRE1BX0lOVCksCi0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTAwKQotCU1BQ19SRVMoQVUxNTAwX0VUSDFfQkFTRSwgQVUxNTAwX01BQzFfRU5BQkxFLCBBVTE1MDBfTUFDMV9ETUFfSU5UKSwKLSNlbmRpZgorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhdTF4eHhfZXRoMV9yZXNvdXJjZXNbXVtNQUNfUkVTX0NPVU5UXSBfX2luaXRkYXRhID0geworCVtBTENIRU1ZX0NQVV9BVTEwMDBdID0geworCQlNQUNfUkVTKEFVMTAwMF9NQUMxX1BIWVNfQUREUiwKKwkJCUFVMTAwMF9NQUNFTl9QSFlTX0FERFIgKyA0LAorCQkJQVUxMDAwX01BQzFfRE1BX0lOVCkKKwl9LAorCVtBTENIRU1ZX0NQVV9BVTE1MDBdID0geworCQlNQUNfUkVTKEFVMTUwMF9NQUMxX1BIWVNfQUREUiwKKwkJCUFVMTUwMF9NQUNFTl9QSFlTX0FERFIgKyA0LAorCQkJQVUxNTAwX01BQzFfRE1BX0lOVCkKKwl9LAorCVtBTENIRU1ZX0NQVV9BVTE1NTBdID0geworCQlNQUNfUkVTKEFVMTAwMF9NQUMxX1BIWVNfQUREUiwKKwkJCUFVMTAwMF9NQUNFTl9QSFlTX0FERFIgKyA0LAorCQkJQVUxNTUwX01BQzFfRE1BX0lOVCkKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBhdTEwMDBfZXRoX3BsYXRmb3JtX2RhdGEgYXUxeHh4X2V0aDFfcGxhdGZvcm1fZGF0YSA9IHsKQEAgLTQxOSwxMSArNDUwLDkgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF1MXh4eF9ldGgxX2RldmljZSA9IHsKIAkubmFtZQkJPSAiYXUxMDAwLWV0aCIsCiAJLmlkCQk9IDEsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGF1MXh4eF9ldGgxX3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gYXUxeHh4X2V0aDFfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gTUFDX1JFU19DT1VOVCwKIAkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmYXUxeHh4X2V0aDFfcGxhdGZvcm1fZGF0YSwKIH07Ci0jZW5kaWYKIAogdm9pZCBfX2luaXQgYXUxeHh4X292ZXJyaWRlX2V0aF9jZmcodW5zaWduZWQgaW50IHBvcnQsCiAJCQlzdHJ1Y3QgYXUxMDAwX2V0aF9wbGF0Zm9ybV9kYXRhICpldGhfZGF0YSkKQEAgLTQzNCwxNSArNDYzLDY1IEBACiAJaWYgKHBvcnQgPT0gMCkKIAkJbWVtY3B5KCZhdTF4eHhfZXRoMF9wbGF0Zm9ybV9kYXRhLCBldGhfZGF0YSwKIAkJCXNpemVvZihzdHJ1Y3QgYXUxMDAwX2V0aF9wbGF0Zm9ybV9kYXRhKSk7Ci0jaWZuZGVmIENPTkZJR19TT0NfQVUxMTAwCiAJZWxzZQogCQltZW1jcHkoJmF1MXh4eF9ldGgxX3BsYXRmb3JtX2RhdGEsIGV0aF9kYXRhLAogCQkJc2l6ZW9mKHN0cnVjdCBhdTEwMDBfZXRoX3BsYXRmb3JtX2RhdGEpKTsKLSNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBfX2luaXQgYWxjaGVteV9zZXR1cF9tYWNzKGludCBjdHlwZSkKK3sKKwlpbnQgcmV0LCBpOworCXVuc2lnbmVkIGNoYXIgZXRoYWRkcls2XTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1hY3JlczsKKworCS8qIEhhbmRsZSAxc3QgTUFDICovCisJaWYgKGFsY2hlbXlfZ2V0X21hY3MoY3R5cGUpIDwgMSkKKwkJcmV0dXJuOworCisJbWFjcmVzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIE1BQ19SRVNfQ09VTlQsIEdGUF9LRVJORUwpOworCWlmICghbWFjcmVzKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkFsY2hlbXk6IG5vIG1lbW9yeSBmb3IgTUFDMCByZXNvdXJjZXNcbiIpOworCQlyZXR1cm47CisJfQorCW1lbWNweShtYWNyZXMsIGF1MXh4eF9ldGgwX3Jlc291cmNlc1tjdHlwZV0sCisJICAgICAgIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICogTUFDX1JFU19DT1VOVCk7CisJYXUxeHh4X2V0aDBfZGV2aWNlLnJlc291cmNlID0gbWFjcmVzOworCisJaSA9IHByb21fZ2V0X2V0aGVybmV0X2FkZHIoZXRoYWRkcik7CisJaWYgKCFpICYmICFpc192YWxpZF9ldGhlcl9hZGRyKGF1MXh4eF9ldGgwX3BsYXRmb3JtX2RhdGEubWFjKSkKKwkJbWVtY3B5KGF1MXh4eF9ldGgwX3BsYXRmb3JtX2RhdGEubWFjLCBldGhhZGRyLCA2KTsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXUxeHh4X2V0aDBfZGV2aWNlKTsKKwlpZiAoIXJldCkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQWxjaGVteTogZmFpbGVkIHRvIHJlZ2lzdGVyIE1BQzBcbiIpOworCisKKwkvKiBIYW5kbGUgMm5kIE1BQyAqLworCWlmIChhbGNoZW15X2dldF9tYWNzKGN0eXBlKSA8IDIpCisJCXJldHVybjsKKworCW1hY3JlcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiBNQUNfUkVTX0NPVU5ULCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1hY3JlcykgeworCQlwcmludGsoS0VSTl9JTkZPICJBbGNoZW15OiBubyBtZW1vcnkgZm9yIE1BQzEgcmVzb3VyY2VzXG4iKTsKKwkJcmV0dXJuOworCX0KKwltZW1jcHkobWFjcmVzLCBhdTF4eHhfZXRoMV9yZXNvdXJjZXNbY3R5cGVdLAorCSAgICAgICBzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIE1BQ19SRVNfQ09VTlQpOworCWF1MXh4eF9ldGgxX2RldmljZS5yZXNvdXJjZSA9IG1hY3JlczsKKworCWV0aGFkZHJbNV0gKz0gMTsJLyogbmV4dCBhZGRyIGZvciAybmQgTUFDICovCisJaWYgKCFpICYmICFpc192YWxpZF9ldGhlcl9hZGRyKGF1MXh4eF9ldGgxX3BsYXRmb3JtX2RhdGEubWFjKSkKKwkJbWVtY3B5KGF1MXh4eF9ldGgxX3BsYXRmb3JtX2RhdGEubWFjLCBldGhhZGRyLCA2KTsKKworCS8qIFJlZ2lzdGVyIHNlY29uZCBNQUMgaWYgZW5hYmxlZCBpbiBwaW5mdW5jICovCisJaWYgKCEoYXVfcmVhZGwoU1lTX1BJTkZVTkMpICYgKHUzMilTWVNfUEZfTkkyKSkgeworCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF1MXh4eF9ldGgxX2RldmljZSk7CisJCWlmIChyZXQpCisJCQlwcmludGsoS0VSTl9JTkZPICJBbGNoZW15OiBmYWlsZWQgdG8gcmVnaXN0ZXIgTUFDMVxuIik7CisJfQogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXUxeHh4X3BsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZhdTF4eDBfdWFydF9kZXZpY2UsCiAJJmF1MXh4eF91c2Jfb2hjaV9kZXZpY2UsCiAjaWZkZWYgQ09ORklHX0ZCX0FVMTEwMAogCSZhdTExMDBfbGNkX2RldmljZSwKQEAgLTQ2MCwzNiArNTM5LDE3IEBACiAjaWZkZWYgU01CVVNfUFNDX0JBU0UKIAkmcGJkYl9zbWJ1c19kZXZpY2UsCiAjZW5kaWYKLQkmYXUxeHh4X2V0aDBfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYXUxeHh4X3BsYXRmb3JtX2luaXQodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgdWFydGNsayA9IGdldF9hdTF4MDBfdWFydF9iYXVkX2Jhc2UoKSAqIDE2OwotCWludCBlcnIsIGk7Ci0JdW5zaWduZWQgY2hhciBldGhhZGRyWzZdOworCWludCBlcnIsIGN0eXBlID0gYWxjaGVteV9nZXRfY3B1dHlwZSgpOwogCi0JLyogRmlsbCB1cCB1YXJ0Y2xrLiAqLwotCWZvciAoaSA9IDA7IGF1MXgwMF91YXJ0X2RhdGFbaV0uZmxhZ3M7IGkrKykKLQkJYXUxeDAwX3VhcnRfZGF0YVtpXS51YXJ0Y2xrID0gdWFydGNsazsKLQotCS8qIHVzZSBmaXJtd2FyZS1wcm92aWRlZCBtYWMgYWRkciBpZiBhdmFpbGFibGUgYW5kIG5lY2Vzc2FyeSAqLwotCWkgPSBwcm9tX2dldF9ldGhlcm5ldF9hZGRyKGV0aGFkZHIpOwotCWlmICghaSAmJiAhaXNfdmFsaWRfZXRoZXJfYWRkcihhdTF4eHhfZXRoMF9wbGF0Zm9ybV9kYXRhLm1hYykpCi0JCW1lbWNweShhdTF4eHhfZXRoMF9wbGF0Zm9ybV9kYXRhLm1hYywgZXRoYWRkciwgNik7CisJYWxjaGVteV9zZXR1cF91YXJ0cyhjdHlwZSk7CisJYWxjaGVteV9zZXR1cF9tYWNzKGN0eXBlKTsKIAogCWVyciA9IHBsYXRmb3JtX2FkZF9kZXZpY2VzKGF1MXh4eF9wbGF0Zm9ybV9kZXZpY2VzLAogCQkJCSAgIEFSUkFZX1NJWkUoYXUxeHh4X3BsYXRmb3JtX2RldmljZXMpKTsKLSNpZm5kZWYgQ09ORklHX1NPQ19BVTExMDAKLQlldGhhZGRyWzVdICs9IDE7CS8qIG5leHQgYWRkciBmb3IgMm5kIE1BQyAqLwotCWlmICghaSAmJiAhaXNfdmFsaWRfZXRoZXJfYWRkcihhdTF4eHhfZXRoMV9wbGF0Zm9ybV9kYXRhLm1hYykpCi0JCW1lbWNweShhdTF4eHhfZXRoMV9wbGF0Zm9ybV9kYXRhLm1hYywgZXRoYWRkciwgNik7Ci0KLQkvKiBSZWdpc3RlciBzZWNvbmQgTUFDIGlmIGVuYWJsZWQgaW4gcGluZnVuYyAqLwotCWlmICghZXJyICYmICEoYXVfcmVhZGwoU1lTX1BJTkZVTkMpICYgKHUzMilTWVNfUEZfTkkyKSkKLQkJZXJyID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdTF4eHhfZXRoMV9kZXZpY2UpOwotI2VuZGlmCi0KIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vc2V0dXAuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9zZXR1cC5jCmluZGV4IDU2MWU1ZGEuLjFiODg3YzggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9zZXR1cC5jCkBAIC01Miw4ICs1Miw2IEBACiAJLyogdGhpcyBpcyBmYXN0ZXIgdGhhbiB3YXN0aW5nIGN5Y2xlcyB0cnlpbmcgdG8gYXBwcm94aW1hdGUgaXQgKi8KIAlwcmVzZXRfbHBqID0gKGVzdF9mcmVxID4+IDEpIC8gSFo7CiAKLQlib2FyZF9zZXR1cCgpOyAgLyogYm9hcmQgc3BlY2lmaWMgc2V0dXAgKi8KLQogCWlmIChhdTF4eHhfY3B1X25lZWRzX2NvbmZpZ19vZCgpKQogCQkvKiBWYXJpb3VzIGVhcmx5IEF1MXh4MCBlcnJhdGEgY29ycmVjdGVkIGJ5IHRoaXMgKi8KIAkJc2V0X2MwX2NvbmZpZygxIDw8IDE5KTsgLyogU2V0IENvbmZpZ1tPRF0gKi8KQEAgLTYxLDYgKzU5LDggQEAKIAkJLyogQ2xlYXIgdG8gb2J0YWluIGJlc3Qgc3lzdGVtIGJ1cyBwZXJmb3JtYW5jZSAqLwogCQljbGVhcl9jMF9jb25maWcoMSA8PCAxOSk7IC8qIENsZWFyIENvbmZpZ1tPRF0gKi8KIAorCWJvYXJkX3NldHVwKCk7ICAvKiBib2FyZCBzcGVjaWZpYyBzZXR1cCAqLworCiAJLyogSU8vTUVNIHJlc291cmNlcy4gKi8KIAlzZXRfaW9fcG9ydF9iYXNlKDApOwogCWlvcG9ydF9yZXNvdXJjZS5zdGFydCA9IElPUE9SVF9SRVNPVVJDRV9TVEFSVDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi90aW1lLmMgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vdGltZS5jCmluZGV4IDJhZWNiMmYuLmQ1ZGE2YWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi90aW1lLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3RpbWUuYwpAQCAtMTQxLDggKzE0MSw3IEBACiAJCWdvdG8gY250cl9lcnI7CiAKIAkvKiByZWdpc3RlciBjb3VudGVyMSBjbG9ja3NvdXJjZSBhbmQgZXZlbnQgZGV2aWNlICovCi0JY2xvY2tzb3VyY2Vfc2V0X2Nsb2NrKCZhdTF4X2NvdW50ZXIxX2Nsb2Nrc291cmNlLCAzMjc2OCk7Ci0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmF1MXhfY291bnRlcjFfY2xvY2tzb3VyY2UpOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZhdTF4X2NvdW50ZXIxX2Nsb2Nrc291cmNlLCAzMjc2OCk7CiAKIAljZC0+c2hpZnQgPSAzMjsKIAljZC0+bXVsdCA9IGRpdl9zYygzMjc2OCwgTlNFQ19QRVJfU0VDLCBjZC0+c2hpZnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMTIwMC9zZXR1cC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMTIwMC9zZXR1cC5jCmluZGV4IDRhODk4MDAuLjFkYWM0ZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjEyMDAvc2V0dXAuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxMjAwL3NldHVwLmMKQEAgLTIzLDYgKzIzLDEzIEBACiAJdW5zaWduZWQgbG9uZyBmcmVxMCwgY2xrc3JjLCBkaXYsIHBmYzsKIAl1bnNpZ25lZCBzaG9ydCB3aG9hbWk7CiAKKwkvKiBTZXQgQ29uZmlnW09EXSAoZGlzYWJsZSBvdmVybGFwcGluZyBidXMgdHJhbnNhY3Rpb24pOgorCSAqIFRoaXMgZ2V0cyByaWQgb2YgYSBfbG90XyBvZiBzcHVyaW91cyBpbnRlcnJ1cHRzIChlc3BlY2lhbGx5CisJICogd3J0LiBJREUpOyBidXQgaW5jdXJzIH4xMCUgcGVyZm9ybWFuY2UgaGl0IGluIHNvbWUKKwkgKiBjcHUtYm91bmQgYXBwbGljYXRpb25zLgorCSAqLworCXNldF9jMF9jb25maWcoMSA8PCAxOSk7CisKIAliY3NyX2luaXQoREIxMjAwX0JDU1JfUEhZU19BRERSLAogCQkgIERCMTIwMF9CQ1NSX1BIWVNfQUREUiArIERCMTIwMF9CQ1NSX0hFWExFRF9PRlMpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxeDAwL2JvYXJkX3NldHVwLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxeDAwL2JvYXJkX3NldHVwLmMKaW5kZXggMDVmMTIwZi4uNWM5NTZmZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMXgwMC9ib2FyZF9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjF4MDAvYm9hcmRfc2V0dXAuYwpAQCAtMTI3LDEzICsxMjcsMTAgQEAKIHZvaWQgX19pbml0IGJvYXJkX3NldHVwKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBiY3NyMSwgYmNzcjI7Ci0JdTMyIHBpbl9mdW5jOwogCiAJYmNzcjEgPSBEQjEwMDBfQkNTUl9QSFlTX0FERFI7CiAJYmNzcjIgPSBEQjEwMDBfQkNTUl9QSFlTX0FERFIgKyBEQjEwMDBfQkNTUl9IRVhMRURfT0ZTOwogCi0JcGluX2Z1bmMgPSAwOwotCiAjaWZkZWYgQ09ORklHX01JUFNfREIxMDAwCiAJcHJpbnRrKEtFUk5fSU5GTyAiQU1EIEFsY2hlbXkgQXUxMDAwL0RiMTAwMCBCb2FyZFxuIik7CiAjZW5kaWYKQEAgLTE2NCwxMiArMTYxLDE2IEBACiAJLyogTm90IHZhbGlkIGZvciBBdTE1NTAgKi8KICNpZiBkZWZpbmVkKENPTkZJR19JUkRBKSAmJiBcCiAgICAoZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkgfHwgZGVmaW5lZChDT05GSUdfU09DX0FVMTEwMCkpCi0JLyogU2V0IElSRklSU0VMIGluc3RlYWQgb2YgR1BJTzE1ICovCi0JcGluX2Z1bmMgPSBhdV9yZWFkbChTWVNfUElORlVOQykgfCBTWVNfUEZfSVJGOwotCWF1X3dyaXRlbChwaW5fZnVuYywgU1lTX1BJTkZVTkMpOwotCS8qIFBvd2VyIG9mZiB1bnRpbCB0aGUgZHJpdmVyIGlzIGluIHVzZSAqLwotCWJjc3JfbW9kKEJDU1JfUkVTRVRTLCBCQ1NSX1JFU0VUU19JUkRBX01PREVfTUFTSywKLQkJCQlCQ1NSX1JFU0VUU19JUkRBX01PREVfT0ZGKTsKKwl7CisJCXUzMiBwaW5fZnVuYzsKKworCQkvKiBTZXQgSVJGSVJTRUwgaW5zdGVhZCBvZiBHUElPMTUgKi8KKwkJcGluX2Z1bmMgPSBhdV9yZWFkbChTWVNfUElORlVOQykgfCBTWVNfUEZfSVJGOworCQlhdV93cml0ZWwocGluX2Z1bmMsIFNZU19QSU5GVU5DKTsKKwkJLyogUG93ZXIgb2ZmIHVudGlsIHRoZSBkcml2ZXIgaXMgaW4gdXNlICovCisJCWJjc3JfbW9kKEJDU1JfUkVTRVRTLCBCQ1NSX1JFU0VUU19JUkRBX01PREVfTUFTSywKKwkJCSBCQ1NSX1JFU0VUU19JUkRBX01PREVfT0ZGKTsKKwl9CiAjZW5kaWYKIAliY3NyX3dyaXRlKEJDU1JfUENNQ0lBLCAwKTsJLyogdHVybiBvZmYgUENNQ0lBIHBvd2VyICovCiAKQEAgLTE3NywzMSArMTc4LDM1IEBACiAJYWxjaGVteV9ncGlvMV9pbnB1dF9lbmFibGUoKTsKIAogI2lmZGVmIENPTkZJR19NSVBTX01JUkFHRQotCS8qIEdQSU9bMjBdIGlzIG91dHB1dCAqLwotCWFsY2hlbXlfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDIwLCAwKTsKKwl7CisJCXUzMiBwaW5fZnVuYzsKIAotCS8qIFNldCBHUElPWzIxMDoyMDhdIGluc3RlYWQgb2YgU1NJXzAgKi8KLQlwaW5fZnVuYyA9IGF1X3JlYWRsKFNZU19QSU5GVU5DKSB8IFNZU19QRl9TMDsKKwkJLyogR1BJT1syMF0gaXMgb3V0cHV0ICovCisJCWFsY2hlbXlfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDIwLCAwKTsKIAotCS8qIFNldCBHUElPWzIxNToyMTFdIGZvciBMRURzICovCi0JcGluX2Z1bmMgfD0gNSA8PCAyOworCQkvKiBTZXQgR1BJT1syMTA6MjA4XSBpbnN0ZWFkIG9mIFNTSV8wICovCisJCXBpbl9mdW5jID0gYXVfcmVhZGwoU1lTX1BJTkZVTkMpIHwgU1lTX1BGX1MwOwogCi0JLyogU2V0IEdQSU9bMjE0OjIxM10gZm9yIG1vcmUgTEVEcyAqLwotCXBpbl9mdW5jIHw9IDUgPDwgMTI7CisJCS8qIFNldCBHUElPWzIxNToyMTFdIGZvciBMRURzICovCisJCXBpbl9mdW5jIHw9IDUgPDwgMjsKIAotCS8qIFNldCBHUElPWzIwNzoyMDBdIGluc3RlYWQgb2YgUENNQ0lBL0xDRCAqLwotCXBpbl9mdW5jIHw9IFNZU19QRl9MQ0QgfCBTWVNfUEZfUEM7Ci0JYXVfd3JpdGVsKHBpbl9mdW5jLCBTWVNfUElORlVOQyk7CisJCS8qIFNldCBHUElPWzIxNDoyMTNdIGZvciBtb3JlIExFRHMgKi8KKwkJcGluX2Z1bmMgfD0gNSA8PCAxMjsKIAotCS8qCi0JICogRW5hYmxlIHNwZWFrZXIgYW1wbGlmaWVyLiAgVGhpcyBzaG91bGQKLQkgKiBiZSBwYXJ0IG9mIHRoZSBhdWRpbyBkcml2ZXIuCi0JICovCi0JYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoMjA5LCAxKTsKKwkJLyogU2V0IEdQSU9bMjA3OjIwMF0gaW5zdGVhZCBvZiBQQ01DSUEvTENEICovCisJCXBpbl9mdW5jIHw9IFNZU19QRl9MQ0QgfCBTWVNfUEZfUEM7CisJCWF1X3dyaXRlbChwaW5fZnVuYywgU1lTX1BJTkZVTkMpOwogCi0JcG1fcG93ZXJfb2ZmID0gbWlyYWdlX3Bvd2VyX29mZjsKLQlfbWFjaGluZV9oYWx0ID0gbWlyYWdlX3Bvd2VyX29mZjsKLQlfbWFjaGluZV9yZXN0YXJ0ID0gKHZvaWQoKikoY2hhciAqKSltaXBzX3NvZnRyZXNldDsKKwkJLyoKKwkJICogRW5hYmxlIHNwZWFrZXIgYW1wbGlmaWVyLiAgVGhpcyBzaG91bGQKKwkJICogYmUgcGFydCBvZiB0aGUgYXVkaW8gZHJpdmVyLgorCQkgKi8KKwkJYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoMjA5LCAxKTsKKworCQlwbV9wb3dlcl9vZmYgPSBtaXJhZ2VfcG93ZXJfb2ZmOworCQlfbWFjaGluZV9oYWx0ID0gbWlyYWdlX3Bvd2VyX29mZjsKKwkJX21hY2hpbmVfcmVzdGFydCA9ICh2b2lkKCopKGNoYXIgKikpbWlwc19zb2Z0cmVzZXQ7CisJfQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTUlQU19CT1NQT1JVUwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTAwMC9ib2FyZF9zZXR1cC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTAwMC9ib2FyZF9zZXR1cC5jCmluZGV4IDJkODVjNGIuLmU2NGZkY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEwMDAvYm9hcmRfc2V0dXAuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMDAwL2JvYXJkX3NldHVwLmMKQEAgLTY1LDcgKzY1LDcgQEAKIAogCS8qIFNldCBBVVggY2xvY2sgdG8gMTIgTUh6ICogOCA9IDk2IE1IeiAqLwogCWF1X3dyaXRlbCg4LCBTWVNfQVVYUExMKTsKLQlhdV93cml0ZWwoMCwgU1lTX1BJTlNUQVRFUkQpOworCWFsY2hlbXlfZ3BpbzFfaW5wdXRfZW5hYmxlKCk7CiAJdWRlbGF5KDEwMCk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRF9NT0RVTEUpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTAwL2JvYXJkX3NldHVwLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTAwL2JvYXJkX3NldHVwLmMKaW5kZXggODNmNDYyMS4uM2I0ZmEzMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTUwMC9ib2FyZF9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1MDAvYm9hcmRfc2V0dXAuYwpAQCAtNTYsNyArNTYsNyBAQAogCXN5c19jbGtzcmMgPSBzeXNfZnJlcWN0cmwgPSBwaW5fZnVuYyA9IDA7CiAJLyogU2V0IEFVWCBjbG9jayB0byAxMiBNSHogKiA4ID0gOTYgTUh6ICovCiAJYXVfd3JpdGVsKDgsIFNZU19BVVhQTEwpOwotCWF1X3dyaXRlbCgwLCBTWVNfUElOU1RBVEVSRCk7CisJYWxjaGVteV9ncGlvMV9pbnB1dF9lbmFibGUoKTsKIAl1ZGVsYXkoMTAwKTsKIAogCS8qIEdQSU8yMDEgaXMgaW5wdXQgZm9yIFBDTUNJQSBjYXJkIGRldGVjdCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3Byb20uYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wcm9tLmMKaW5kZXggYmFlYjIxMy4uZTUzMDZiNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3Byb20uYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcHJvbS5jCkBAIC02Miw1ICs2Miw1IEBACiAKIHZvaWQgcHJvbV9wdXRjaGFyKHVuc2lnbmVkIGNoYXIgYykKIHsKLSAgICBhbGNoZW15X3VhcnRfcHV0Y2hhcihVQVJUMF9QSFlTX0FERFIsIGMpOworCWFsY2hlbXlfdWFydF9wdXRjaGFyKEFVMTAwMF9VQVJUMF9QSFlTX0FERFIsIGMpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZ3ByL2JvYXJkX3NldHVwLmMgYi9hcmNoL21pcHMvYWxjaGVteS9ncHIvYm9hcmRfc2V0dXAuYwppbmRleCBhZDJlM2YxLi41ZjhmMDY5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9ncHIvYm9hcmRfc2V0dXAuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9ncHIvYm9hcmRfc2V0dXAuYwpAQCAtMzYsOSArMzYsNiBAQAogCiAjaW5jbHVkZSA8cHJvbS5oPgogCi0jZGVmaW5lIFVBUlQxX0FERFIJS1NFRzFBRERSKFVBUlQxX1BIWVNfQUREUikKLSNkZWZpbmUgVUFSVDNfQUREUglLU0VHMUFERFIoVUFSVDNfUEhZU19BRERSKQotCiBjaGFyIGlycV90YWJfYWxjaGVteVtdWzVdIF9faW5pdGRhdGEgPSB7CiAJWzBdID0geyAtMSwgQVUxNTAwX1BDSV9JTlRBLCBBVTE1MDBfUENJX0lOVEIsIDB4ZmYsIDB4ZmYgfSwKIH07CkBAIC02NywxOCArNjQsMTUgQEAKIAogdm9pZCBfX2luaXQgYm9hcmRfc2V0dXAodm9pZCkKIHsKLQlwcmludGsoS0VSTl9JTkZPICJUYXJwZXplIElUUyBHUFIgYm9hcmRcbiIpOworCXByaW50ayhLRVJOX0lORk8gIlRyYXBlemUgSVRTIEdQUiBib2FyZFxuIik7CiAKIAlwbV9wb3dlcl9vZmYgPSBncHJfcG93ZXJfb2ZmOwogCV9tYWNoaW5lX2hhbHQgPSBncHJfcG93ZXJfb2ZmOwogCV9tYWNoaW5lX3Jlc3RhcnQgPSBncHJfcmVzZXQ7CiAKLQkvKiBFbmFibGUgVUFSVDMgKi8KLQlhdV93cml0ZWwoMHgxLCBVQVJUM19BRERSICsgVUFSVF9NT0RfQ05UUkwpOy8qIGNsb2NrIGVuYWJsZSAoQ0UpICovCi0JYXVfd3JpdGVsKDB4MywgVUFSVDNfQUREUiArIFVBUlRfTU9EX0NOVFJMKTsgLyogQ0UgYW5kICJlbmFibGUiICovCi0JLyogRW5hYmxlIFVBUlQxICovCi0JYXVfd3JpdGVsKDB4MSwgVUFSVDFfQUREUiArIFVBUlRfTU9EX0NOVFJMKTsgLyogY2xvY2sgZW5hYmxlIChDRSkgKi8KLQlhdV93cml0ZWwoMHgzLCBVQVJUMV9BRERSICsgVUFSVF9NT0RfQ05UUkwpOyAvKiBDRSBhbmQgImVuYWJsZSIgKi8KKwkvKiBFbmFibGUgVUFSVDEvMyAqLworCWFsY2hlbXlfdWFydF9lbmFibGUoQVUxMDAwX1VBUlQzX1BIWVNfQUREUik7CisJYWxjaGVteV91YXJ0X2VuYWJsZShBVTEwMDBfVUFSVDFfUEhZU19BRERSKTsKIAogCS8qIFRha2UgYXdheSBSZXNldCBvZiBVTVRTLWNhcmQgKi8KIAlhbGNoZW15X2dwaW9fZGlyZWN0aW9uX291dHB1dCgyMTUsIDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZ3ByL2luaXQuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2dwci9pbml0LmMKaW5kZXggZjA0NGY0Yy4uMjI5YWFmYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZ3ByL2luaXQuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9ncHIvaW5pdC5jCkBAIC01OSw1ICs1OSw1IEBACiAKIHZvaWQgcHJvbV9wdXRjaGFyKHVuc2lnbmVkIGNoYXIgYykKIHsKLQlhbGNoZW15X3VhcnRfcHV0Y2hhcihVQVJUMF9QSFlTX0FERFIsIGMpOworCWFsY2hlbXlfdWFydF9wdXRjaGFyKEFVMTAwMF9VQVJUMF9QSFlTX0FERFIsIGMpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvYm9hcmRfc2V0dXAuYyBiL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL2JvYXJkX3NldHVwLmMKaW5kZXggY2Y0MzZhYi4uM2FlOTg0YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvYm9hcmRfc2V0dXAuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9ib2FyZF9zZXR1cC5jCkBAIC04Nyw3ICs4Nyw3IEBACiAJYXVfd3JpdGVsKFNZU19QRl9OSTIsIFNZU19QSU5GVU5DKTsKIAogCS8qIEluaXRpYWxpemUgR1BJTyAqLwotCWF1X3dyaXRlbCgweEZGRkZGRkZGLCBTWVNfVFJJT1VUQ0xSKTsKKwlhdV93cml0ZWwofjAsIEtTRUcxQUREUihBVTEwMDBfU1lTX1BIWVNfQUREUikgKyBTWVNfVFJJT1VUQ0xSKTsKIAlhbGNoZW15X2dwaW9fZGlyZWN0aW9uX291dHB1dCgwLCAwKTsJLyogRGlzYWJsZSBNNjZFTiAoUENJIDY2TUh6KSAqLwogCWFsY2hlbXlfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDMsIDEpOwkvKiBEaXNhYmxlIFBDSSBDTEtSVU4jICovCiAJYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoMSwgMSk7CS8qIEVuYWJsZSBFWFRfSU8zICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9pbml0LmMgYi9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9pbml0LmMKaW5kZXggZjhkMjU1Ny4uMmU4MWNjNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL2luaXQuYwpAQCAtNjIsNSArNjIsNSBAQAogCiB2b2lkIHByb21fcHV0Y2hhcih1bnNpZ25lZCBjaGFyIGMpCiB7Ci0JYWxjaGVteV91YXJ0X3B1dGNoYXIoVUFSVDBfUEhZU19BRERSLCBjKTsKKwlhbGNoZW15X3VhcnRfcHV0Y2hhcihBVTEwMDBfVUFSVDBfUEhZU19BRERSLCBjKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9wbGF0Zm9ybS5jCmluZGV4IDk1NmY5NDYuLjU1NjI4ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL3BsYXRmb3JtLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvcGxhdGZvcm0uYwpAQCAtNTMsOCArNTMsOCBAQAogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG10eDFfd2R0X3Jlc1tdID0gewogCVswXSA9IHsKLQkJLnN0YXJ0CT0gMTUsCi0JCS5lbmQJPSAxNSwKKwkJLnN0YXJ0CT0gMjE1LAorCQkuZW5kCT0gMjE1LAogCQkubmFtZQk9ICJtdHgxLXdkdC1ncGlvIiwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9ib2FyZF9zZXR1cC5jIGIvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9ib2FyZF9zZXR1cC5jCmluZGV4IGZlYmZiMGYuLjgxZTU3ZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvYm9hcmRfc2V0dXAuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL2JvYXJkX3NldHVwLmMKQEAgLTY2LDEzICs2NiwxMCBAQAogCWF1X3dyaXRlbChwaW5fZnVuYywgU1lTX1BJTkZVTkMpOwogCiAJLyogRW5hYmxlIFVBUlQgKi8KLQlhdV93cml0ZWwoMHgwMSwgVUFSVDNfQUREUiArIFVBUlRfTU9EX0NOVFJMKTsgLyogY2xvY2sgZW5hYmxlIChDRSkgKi8KLQltZGVsYXkoMTApOwotCWF1X3dyaXRlbCgweDAzLCBVQVJUM19BRERSICsgVUFSVF9NT0RfQ05UUkwpOyAvKiBDRSBhbmQgImVuYWJsZSIgKi8KLQltZGVsYXkoMTApOwotCi0JLyogRW5hYmxlIERUUiA9IFVTQiBwb3dlciB1cCAqLwotCWF1X3dyaXRlbCgweDAxLCBVQVJUM19BRERSICsgVUFSVF9NQ1IpOyAvKiBVQVJUX01DUl9EVFIgaXMgMHgwMT8/PyAqLworCWFsY2hlbXlfdWFydF9lbmFibGUoQVUxMDAwX1VBUlQzX1BIWVNfQUREUik7CisJLyogRW5hYmxlIERUUiAoTUNSIGJpdCAwKSA9IFVTQiBwb3dlciB1cCAqLworCV9fcmF3X3dyaXRlbCgxLCAodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKEFVMTAwMF9VQVJUM19QSFlTX0FERFIgKyAweDE4KSk7CisJd21iKCk7CiAKICNpZmRlZiBDT05GSUdfUENJCiAjaWYgZGVmaW5lZChfX01JUFNFQl9fKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9pbml0LmMgYi9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL2luaXQuYwppbmRleCAxNTEyNWMyLi4wZWUwMmNmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL2luaXQuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL2luaXQuYwpAQCAtNTEsMTQgKzUxLDEzIEBACiAJcHJvbV9pbml0X2NtZGxpbmUoKTsKIAogCW1lbXNpemVfc3RyID0gcHJvbV9nZXRlbnYoIm1lbXNpemUiKTsKLQlpZiAoIW1lbXNpemVfc3RyKQorCWlmICghbWVtc2l6ZV9zdHIgfHwgc3RyaWN0X3N0cnRvdWwobWVtc2l6ZV9zdHIsIDAsICZtZW1zaXplKSkKIAkJbWVtc2l6ZSA9IDB4MDQwMDAwMDA7Ci0JZWxzZQotCQlzdHJpY3Rfc3RydG91bChtZW1zaXplX3N0ciwgMCwgJm1lbXNpemUpOworCiAJYWRkX21lbW9yeV9yZWdpb24oMCwgbWVtc2l6ZSwgQk9PVF9NRU1fUkFNKTsKIH0KIAogdm9pZCBwcm9tX3B1dGNoYXIodW5zaWduZWQgY2hhciBjKQogewotCWFsY2hlbXlfdWFydF9wdXRjaGFyKFVBUlQwX1BIWVNfQUREUiwgYyk7CisJYWxjaGVteV91YXJ0X3B1dGNoYXIoQVUxMDAwX1VBUlQwX1BIWVNfQUREUiwgYyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXI3L2dwaW8uYyBiL2FyY2gvbWlwcy9hcjcvZ3Bpby5jCmluZGV4IDQyNWRmYTUuLmJiNTcxYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hcjcvZ3Bpby5jCisrKyBiL2FyY2gvbWlwcy9hcjcvZ3Bpby5jCkBAIC0zMjUsOSArMzI1LDcgQEAKIAkJc2l6ZSA9IDB4MWY7CiAJfQogCi0JZ3BjaC0+cmVncyA9IGlvcmVtYXBfbm9jYWNoZShBUjdfUkVHU19HUElPLAotCQkJCQlBUjdfUkVHU19HUElPICsgMHgxMCk7Ci0KKwlncGNoLT5yZWdzID0gaW9yZW1hcF9ub2NhY2hlKEFSN19SRUdTX0dQSU8sIHNpemUpOwogCWlmICghZ3BjaC0+cmVncykgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gaW9yZW1hcCByZWdzXG4iLAogCQkJCQlncGNoLT5jaGlwLmxhYmVsKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY200N3h4L252cmFtLmMgYi9hcmNoL21pcHMvYmNtNDd4eC9udnJhbS5jCmluZGV4IGU1YjY2MTUuLjU0ZGI4MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iY200N3h4L252cmFtLmMKKysrIGIvYXJjaC9taXBzL2JjbTQ3eHgvbnZyYW0uYwpAQCAtMyw2ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqIENvcHlyaWdodCAoQykgMjAwNiBGZWxpeCBGaWV0a2F1IDxuYmRAb3BlbndydC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBIYXVrZSBNZWhydGVucyA8aGF1a2VAaGF1a2UtbS5kZT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMjMsNyArMjQsNyBAQAogc3RhdGljIGNoYXIgbnZyYW1fYnVmW05WUkFNX1NQQUNFXTsKIAogLyogUHJvYmUgZm9yIE5WUkFNIGhlYWRlciAqLwotc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X252cmFtX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIGVhcmx5X252cmFtX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3Qgc3NiX21pcHNjb3JlICptY29yZSA9ICZzc2JfYmNtNDd4eC5taXBzY29yZTsKIAlzdHJ1Y3QgbnZyYW1faGVhZGVyICpoZWFkZXI7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNDd4eC9zZXR1cC5jIGIvYXJjaC9taXBzL2JjbTQ3eHgvc2V0dXAuYwppbmRleCBjOTVmOTBiLi43M2I1MjliIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNDd4eC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9iY200N3h4L3NldHVwLmMKQEAgLTMsNiArMyw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEZlbGl4IEZpZXRrYXUgPG5iZEBvcGVud3J0Lm9yZz4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBCdWVzY2ggPG1iQGJ1M3NjaC5kZT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMTAgV2FsZGVtYXIgQnJvZGtvcmIgPHdieEBvcGVuYWRrLm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBIYXVrZSBNZWhydGVucyA8aGF1a2VAaGF1a2UtbS5kZT4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC01NywxMCArNTgsNDkgQEAKIH0KIAogI2RlZmluZSBSRUFEX0ZST01fTlZSQU0oX291dHZhciwgbmFtZSwgYnVmKSBcCi0JaWYgKG52cmFtX2dldGVudihuYW1lLCBidWYsIHNpemVvZihidWYpKSA+PSAwKVwKKwlpZiAobnZyYW1fZ2V0cHJlZml4KHByZWZpeCwgbmFtZSwgYnVmLCBzaXplb2YoYnVmKSkgPj0gMClcCiAJCXNwcm9tLT5fb3V0dmFyID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAwKTsKIAotc3RhdGljIHZvaWQgYmNtNDd4eF9maWxsX3Nwcm9tKHN0cnVjdCBzc2Jfc3Byb20gKnNwcm9tKQorI2RlZmluZSBSRUFEX0ZST01fTlZSQU0yKF9vdXR2YXIsIG5hbWUxLCBuYW1lMiwgYnVmKSBcCisJaWYgKG52cmFtX2dldHByZWZpeChwcmVmaXgsIG5hbWUxLCBidWYsIHNpemVvZihidWYpKSA+PSAwIHx8IFwKKwkgICAgbnZyYW1fZ2V0cHJlZml4KHByZWZpeCwgbmFtZTIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpID49IDApXAorCQlzcHJvbS0+X291dHZhciA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CisKK3N0YXRpYyBpbmxpbmUgaW50IG52cmFtX2dldHByZWZpeChjb25zdCBjaGFyICpwcmVmaXgsIGNoYXIgKm5hbWUsCisJCQkJICBjaGFyICpidWYsIGludCBsZW4pCit7CisJaWYgKHByZWZpeCkgeworCQljaGFyIGtleVsxMDBdOworCisJCXNucHJpbnRmKGtleSwgc2l6ZW9mKGtleSksICIlcyVzIiwgcHJlZml4LCBuYW1lKTsKKwkJcmV0dXJuIG52cmFtX2dldGVudihrZXksIGJ1ZiwgbGVuKTsKKwl9CisKKwlyZXR1cm4gbnZyYW1fZ2V0ZW52KG5hbWUsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIHUzMiBudnJhbV9nZXR1MzIoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWludCBydjsKKwljaGFyIGtleVsxMDBdOworCXUxNiB2YXIwLCB2YXIxOworCisJc25wcmludGYoa2V5LCBzaXplb2Yoa2V5KSwgIiVzMCIsIG5hbWUpOworCXJ2ID0gbnZyYW1fZ2V0ZW52KGtleSwgYnVmLCBsZW4pOworCS8qIHJldHVybiAwIGhlcmUgc28gdGhpcyBsb29rcyBsaWtlIHVuc2V0ICovCisJaWYgKHJ2IDwgMCkKKwkJcmV0dXJuIDA7CisJdmFyMCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CisKKwlzbnByaW50ZihrZXksIHNpemVvZihrZXkpLCAiJXMxIiwgbmFtZSk7CisJcnYgPSBudnJhbV9nZXRlbnYoa2V5LCBidWYsIGxlbik7CisJaWYgKHJ2IDwgMCkKKwkJcmV0dXJuIDA7CisJdmFyMSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CisJcmV0dXJuIHZhcjEgPDwgMTYgfCB2YXIwOworfQorCitzdGF0aWMgdm9pZCBiY200N3h4X2ZpbGxfc3Byb20oc3RydWN0IHNzYl9zcHJvbSAqc3Byb20sIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKIAljaGFyIGJ1ZlsxMDBdOwogCXUzMiBib2FyZGZsYWdzOwpAQCAtNjksMTEgKzEwOSwxMiBAQAogCiAJc3Byb20tPnJldmlzaW9uID0gMTsgLyogRmFsbGJhY2s6IE9sZCBoYXJkd2FyZSBkb2VzIG5vdCBkZWZpbmUgdGhpcy4gKi8KIAlSRUFEX0ZST01fTlZSQU0ocmV2aXNpb24sICJzcm9tcmV2IiwgYnVmKTsKLQlpZiAobnZyYW1fZ2V0ZW52KCJpbDBtYWNhZGRyIiwgYnVmLCBzaXplb2YoYnVmKSkgPj0gMCkKKwlpZiAobnZyYW1fZ2V0cHJlZml4KHByZWZpeCwgImlsMG1hY2FkZHIiLCBidWYsIHNpemVvZihidWYpKSA+PSAwIHx8CisJICAgIG52cmFtX2dldHByZWZpeChwcmVmaXgsICJtYWNhZGRyIiwgYnVmLCBzaXplb2YoYnVmKSkgPj0gMCkKIAkJbnZyYW1fcGFyc2VfbWFjYWRkcihidWYsIHNwcm9tLT5pbDBtYWMpOwotCWlmIChudnJhbV9nZXRlbnYoImV0MG1hY2FkZHIiLCBidWYsIHNpemVvZihidWYpKSA+PSAwKQorCWlmIChudnJhbV9nZXRwcmVmaXgocHJlZml4LCAiZXQwbWFjYWRkciIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpID49IDApCiAJCW52cmFtX3BhcnNlX21hY2FkZHIoYnVmLCBzcHJvbS0+ZXQwbWFjKTsKLQlpZiAobnZyYW1fZ2V0ZW52KCJldDFtYWNhZGRyIiwgYnVmLCBzaXplb2YoYnVmKSkgPj0gMCkKKwlpZiAobnZyYW1fZ2V0cHJlZml4KHByZWZpeCwgImV0MW1hY2FkZHIiLCBidWYsIHNpemVvZihidWYpKSA+PSAwKQogCQludnJhbV9wYXJzZV9tYWNhZGRyKGJ1Ziwgc3Byb20tPmV0MW1hYyk7CiAJUkVBRF9GUk9NX05WUkFNKGV0MHBoeWFkZHIsICJldDBwaHlhZGRyIiwgYnVmKTsKIAlSRUFEX0ZST01fTlZSQU0oZXQxcGh5YWRkciwgImV0MXBoeWFkZHIiLCBidWYpOwpAQCAtOTUsMjAgKzEzNiwzNiBAQAogCVJFQURfRlJPTV9OVlJBTShwYTFoaWIwLCAicGExaGliMCIsIGJ1Zik7CiAJUkVBRF9GUk9NX05WUkFNKHBhMWhpYjIsICJwYTFoaWIxIiwgYnVmKTsKIAlSRUFEX0ZST01fTlZSQU0ocGExaGliMSwgInBhMWhpYjIiLCBidWYpOwotCVJFQURfRlJPTV9OVlJBTShncGlvMCwgIndsMGdwaW8wIiwgYnVmKTsKLQlSRUFEX0ZST01fTlZSQU0oZ3BpbzEsICJ3bDBncGlvMSIsIGJ1Zik7Ci0JUkVBRF9GUk9NX05WUkFNKGdwaW8yLCAid2wwZ3BpbzIiLCBidWYpOwotCVJFQURfRlJPTV9OVlJBTShncGlvMywgIndsMGdwaW8zIiwgYnVmKTsKLQlSRUFEX0ZST01fTlZSQU0obWF4cHdyX2JnLCAicGEwbWF4cHdyIiwgYnVmKTsKLQlSRUFEX0ZST01fTlZSQU0obWF4cHdyX2FsLCAicGExbG9tYXhwd3IiLCBidWYpOwotCVJFQURfRlJPTV9OVlJBTShtYXhwd3JfYSwgInBhMW1heHB3ciIsIGJ1Zik7Ci0JUkVBRF9GUk9NX05WUkFNKG1heHB3cl9haCwgInBhMWhpbWF4cHdyIiwgYnVmKTsKLQlSRUFEX0ZST01fTlZSQU0oaXRzc2lfYSwgInBhMWl0c3NpdCIsIGJ1Zik7Ci0JUkVBRF9GUk9NX05WUkFNKGl0c3NpX2JnLCAicGEwaXRzc2l0IiwgYnVmKTsKKwlSRUFEX0ZST01fTlZSQU0yKGdwaW8wLCAibGVkYmgwIiwgIndsMGdwaW8wIiwgYnVmKTsKKwlSRUFEX0ZST01fTlZSQU0yKGdwaW8xLCAibGVkYmgxIiwgIndsMGdwaW8xIiwgYnVmKTsKKwlSRUFEX0ZST01fTlZSQU0yKGdwaW8yLCAibGVkYmgyIiwgIndsMGdwaW8yIiwgYnVmKTsKKwlSRUFEX0ZST01fTlZSQU0yKGdwaW8zLCAibGVkYmgzIiwgIndsMGdwaW8zIiwgYnVmKTsKKwlSRUFEX0ZST01fTlZSQU0yKG1heHB3cl9iZywgIm1heHAyZ2EwIiwgInBhMG1heHB3ciIsIGJ1Zik7CisJUkVBRF9GUk9NX05WUkFNMihtYXhwd3JfYWwsICJtYXhwNWdsYTAiLCAicGExbG9tYXhwd3IiLCBidWYpOworCVJFQURfRlJPTV9OVlJBTTIobWF4cHdyX2EsICJtYXhwNWdhMCIsICJwYTFtYXhwd3IiLCBidWYpOworCVJFQURfRlJPTV9OVlJBTTIobWF4cHdyX2FoLCAibWF4cDVnaGEwIiwgInBhMWhpbWF4cHdyIiwgYnVmKTsKKwlSRUFEX0ZST01fTlZSQU0yKGl0c3NpX2JnLCAiaXR0NWdhMCIsICJwYTBpdHNzaXQiLCBidWYpOworCVJFQURfRlJPTV9OVlJBTTIoaXRzc2lfYSwgIml0dDJnYTAiLCAicGExaXRzc2l0IiwgYnVmKTsKIAlSRUFEX0ZST01fTlZSQU0odHJpMmcsICJ0cmkyZyIsIGJ1Zik7CiAJUkVBRF9GUk9NX05WUkFNKHRyaTVnbCwgInRyaTVnbCIsIGJ1Zik7CiAJUkVBRF9GUk9NX05WUkFNKHRyaTVnLCAidHJpNWciLCBidWYpOwogCVJFQURfRlJPTV9OVlJBTSh0cmk1Z2gsICJ0cmk1Z2giLCBidWYpOworCVJFQURfRlJPTV9OVlJBTSh0eHBpZDJnWzBdLCAidHhwaWQyZ2EwIiwgYnVmKTsKKwlSRUFEX0ZST01fTlZSQU0odHhwaWQyZ1sxXSwgInR4cGlkMmdhMSIsIGJ1Zik7CisJUkVBRF9GUk9NX05WUkFNKHR4cGlkMmdbMl0sICJ0eHBpZDJnYTIiLCBidWYpOworCVJFQURfRlJPTV9OVlJBTSh0eHBpZDJnWzNdLCAidHhwaWQyZ2EzIiwgYnVmKTsKKwlSRUFEX0ZST01fTlZSQU0odHhwaWQ1Z1swXSwgInR4cGlkNWdhMCIsIGJ1Zik7CisJUkVBRF9GUk9NX05WUkFNKHR4cGlkNWdbMV0sICJ0eHBpZDVnYTEiLCBidWYpOworCVJFQURfRlJPTV9OVlJBTSh0eHBpZDVnWzJdLCAidHhwaWQ1Z2EyIiwgYnVmKTsKKwlSRUFEX0ZST01fTlZSQU0odHhwaWQ1Z1szXSwgInR4cGlkNWdhMyIsIGJ1Zik7CisJUkVBRF9GUk9NX05WUkFNKHR4cGlkNWdsWzBdLCAidHhwaWQ1Z2xhMCIsIGJ1Zik7CisJUkVBRF9GUk9NX05WUkFNKHR4cGlkNWdsWzFdLCAidHhwaWQ1Z2xhMSIsIGJ1Zik7CisJUkVBRF9GUk9NX05WUkFNKHR4cGlkNWdsWzJdLCAidHhwaWQ1Z2xhMiIsIGJ1Zik7CisJUkVBRF9GUk9NX05WUkFNKHR4cGlkNWdsWzNdLCAidHhwaWQ1Z2xhMyIsIGJ1Zik7CisJUkVBRF9GUk9NX05WUkFNKHR4cGlkNWdoWzBdLCAidHhwaWQ1Z2hhMCIsIGJ1Zik7CisJUkVBRF9GUk9NX05WUkFNKHR4cGlkNWdoWzFdLCAidHhwaWQ1Z2hhMSIsIGJ1Zik7CisJUkVBRF9GUk9NX05WUkFNKHR4cGlkNWdoWzJdLCAidHhwaWQ1Z2hhMiIsIGJ1Zik7CisJUkVBRF9GUk9NX05WUkFNKHR4cGlkNWdoWzNdLCAidHhwaWQ1Z2hhMyIsIGJ1Zik7CiAJUkVBRF9GUk9NX05WUkFNKHJ4cG8yZywgInJ4cG8yZyIsIGJ1Zik7CiAJUkVBRF9GUk9NX05WUkFNKHJ4cG81ZywgInJ4cG81ZyIsIGJ1Zik7CiAJUkVBRF9GUk9NX05WUkFNKHJzc2lzYXYyZywgInJzc2lzYXYyZyIsIGJ1Zik7CkBAIC0xMjAsMTkgKzE3NywyNyBAQAogCVJFQURfRlJPTV9OVlJBTShyc3Npc21mNWcsICJyc3Npc21mNWciLCBidWYpOwogCVJFQURfRlJPTV9OVlJBTShieGE1ZywgImJ4YTVnIiwgYnVmKTsKIAlSRUFEX0ZST01fTlZSQU0oY2NrMmdwbywgImNjazJncG8iLCBidWYpOwotCVJFQURfRlJPTV9OVlJBTShvZmRtMmdwbywgIm9mZG0yZ3BvIiwgYnVmKTsKLQlSRUFEX0ZST01fTlZSQU0ob2ZkbTVnbHBvLCAib2ZkbTVnbHBvIiwgYnVmKTsKLQlSRUFEX0ZST01fTlZSQU0ob2ZkbTVncG8sICJvZmRtNWdwbyIsIGJ1Zik7Ci0JUkVBRF9GUk9NX05WUkFNKG9mZG01Z2hwbywgIm9mZG01Z2hwbyIsIGJ1Zik7CiAKLQlpZiAobnZyYW1fZ2V0ZW52KCJib2FyZGZsYWdzIiwgYnVmLCBzaXplb2YoYnVmKSkgPj0gMCkgeworCXNwcm9tLT5vZmRtMmdwbyA9IG52cmFtX2dldHUzMigib2ZkbTJncG8iLCBidWYsIHNpemVvZihidWYpKTsKKwlzcHJvbS0+b2ZkbTVnbHBvID0gbnZyYW1fZ2V0dTMyKCJvZmRtNWdscG8iLCBidWYsIHNpemVvZihidWYpKTsKKwlzcHJvbS0+b2ZkbTVncG8gPSBudnJhbV9nZXR1MzIoIm9mZG01Z3BvIiwgYnVmLCBzaXplb2YoYnVmKSk7CisJc3Byb20tPm9mZG01Z2hwbyA9IG52cmFtX2dldHUzMigib2ZkbTVnaHBvIiwgYnVmLCBzaXplb2YoYnVmKSk7CisKKwlSRUFEX0ZST01fTlZSQU0oYW50ZW5uYV9nYWluLmdoejI0LmEwLCAiYWcwIiwgYnVmKTsKKwlSRUFEX0ZST01fTlZSQU0oYW50ZW5uYV9nYWluLmdoejI0LmExLCAiYWcxIiwgYnVmKTsKKwlSRUFEX0ZST01fTlZSQU0oYW50ZW5uYV9nYWluLmdoejI0LmEyLCAiYWcyIiwgYnVmKTsKKwlSRUFEX0ZST01fTlZSQU0oYW50ZW5uYV9nYWluLmdoejI0LmEzLCAiYWczIiwgYnVmKTsKKwltZW1jcHkoJnNwcm9tLT5hbnRlbm5hX2dhaW4uZ2h6NSwgJnNwcm9tLT5hbnRlbm5hX2dhaW4uZ2h6MjQsCisJICAgICAgIHNpemVvZihzcHJvbS0+YW50ZW5uYV9nYWluLmdoejUpKTsKKworCWlmIChudnJhbV9nZXRwcmVmaXgocHJlZml4LCAiYm9hcmRmbGFncyIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpID49IDApIHsKIAkJYm9hcmRmbGFncyA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CiAJCWlmIChib2FyZGZsYWdzKSB7CiAJCQlzcHJvbS0+Ym9hcmRmbGFnc19sbyA9IChib2FyZGZsYWdzICYgMHgwMDAwRkZGRlUpOwogCQkJc3Byb20tPmJvYXJkZmxhZ3NfaGkgPSAoYm9hcmRmbGFncyAmIDB4RkZGRjAwMDBVKSA+PiAxNjsKIAkJfQogCX0KLQlpZiAobnZyYW1fZ2V0ZW52KCJib2FyZGZsYWdzMiIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpID49IDApIHsKKwlpZiAobnZyYW1fZ2V0cHJlZml4KHByZWZpeCwgImJvYXJkZmxhZ3MyIiwgYnVmLCBzaXplb2YoYnVmKSkgPj0gMCkgewogCQlib2FyZGZsYWdzID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAwKTsKIAkJaWYgKGJvYXJkZmxhZ3MpIHsKIAkJCXNwcm9tLT5ib2FyZGZsYWdzMl9sbyA9IChib2FyZGZsYWdzICYgMHgwMDAwRkZGRlUpOwpAQCAtMTQxLDYgKzIwNiwyMiBAQAogCX0KIH0KIAoraW50IGJjbTQ3eHhfZ2V0X3Nwcm9tKHN0cnVjdCBzc2JfYnVzICpidXMsIHN0cnVjdCBzc2Jfc3Byb20gKm91dCkKK3sKKwljaGFyIHByZWZpeFsxMF07CisKKwlpZiAoYnVzLT5idXN0eXBlID09IFNTQl9CVVNUWVBFX1BDSSkgeworCQlzbnByaW50ZihwcmVmaXgsIHNpemVvZihwcmVmaXgpLCAicGNpLyV1LyV1LyIsCisJCQkgYnVzLT5ob3N0X3BjaS0+YnVzLT5udW1iZXIgKyAxLAorCQkJIFBDSV9TTE9UKGJ1cy0+aG9zdF9wY2ktPmRldmZuKSk7CisJCWJjbTQ3eHhfZmlsbF9zcHJvbShvdXQsIHByZWZpeCk7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImJjbTQ3eHg6IHVuYWJsZSB0byBmaWxsIFNQUk9NIGZvciBnaXZlbiBidXN0eXBlLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKwogc3RhdGljIGludCBiY200N3h4X2dldF9pbnZhcmlhbnRzKHN0cnVjdCBzc2JfYnVzICpidXMsCiAJCQkJICAgc3RydWN0IHNzYl9pbml0X2ludmFyaWFudHMgKml2KQogewpAQCAtMTU4LDcgKzIzOSw3IEBACiAJaWYgKG52cmFtX2dldGVudigiYm9hcmRyZXYiLCBidWYsIHNpemVvZihidWYpKSA+PSAwKQogCQlpdi0+Ym9hcmRpbmZvLnJldiA9ICh1MTYpc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAwKTsKIAotCWJjbTQ3eHhfZmlsbF9zcHJvbSgmaXYtPnNwcm9tKTsKKwliY200N3h4X2ZpbGxfc3Byb20oJml2LT5zcHJvbSwgTlVMTCk7CiAKIAlpZiAobnZyYW1fZ2V0ZW52KCJjYXJkYnVzIiwgYnVmLCBzaXplb2YoYnVmKSkgPj0gMCkKIAkJaXYtPmhhc19jYXJkYnVzX3Nsb3QgPSAhIXNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwpAQCAtMTcyLDYgKzI1MywxMSBAQAogCWNoYXIgYnVmWzEwMF07CiAJc3RydWN0IHNzYl9taXBzY29yZSAqbWNvcmU7CiAKKwllcnIgPSBzc2JfYXJjaF9yZWdpc3Rlcl9mYWxsYmFja19zcHJvbSgmYmNtNDd4eF9nZXRfc3Byb20pOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgImJjbTQ3eHg6IHNvbWVvbmUgZWxzZSBhbHJlYWR5IHJlZ2lzdGVyZWQiCisJCQkiIGEgc3NiIFNQUk9NIGNhbGxiYWNrIGhhbmRsZXIgKGVyciAlZClcbiIsIGVycik7CisKIAllcnIgPSBzc2JfYnVzX3NzYmJ1c19yZWdpc3Rlcigmc3NiX2JjbTQ3eHgsIFNTQl9FTlVNX0JBU0UsCiAJCQkJICAgICAgYmNtNDd4eF9nZXRfaW52YXJpYW50cyk7CiAJaWYgKGVycikKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY202M3h4L2JvYXJkcy9ib2FyZF9iY205NjN4eC5jIGIvYXJjaC9taXBzL2JjbTYzeHgvYm9hcmRzL2JvYXJkX2JjbTk2M3h4LmMKaW5kZXggOGRiYThjZi4uNDBiMjIzYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2JjbTYzeHgvYm9hcmRzL2JvYXJkX2JjbTk2M3h4LmMKKysrIGIvYXJjaC9taXBzL2JjbTYzeHgvYm9hcmRzL2JvYXJkX2JjbTk2M3h4LmMKQEAgLTY0Myw2ICs2NDMsMTcgQEAKIAkuYm9hcmRmbGFnc19sbwkJPSAweDI4NDgsCiAJLmJvYXJkZmxhZ3NfaGkJCT0gMHgwMDAwLAogfTsKKworaW50IGJjbTYzeHhfZ2V0X2ZhbGxiYWNrX3Nwcm9tKHN0cnVjdCBzc2JfYnVzICpidXMsIHN0cnVjdCBzc2Jfc3Byb20gKm91dCkKK3sKKwlpZiAoYnVzLT5idXN0eXBlID09IFNTQl9CVVNUWVBFX1BDSSkgeworCQltZW1jcHkob3V0LCAmYmNtNjN4eF9zcHJvbSwgc2l6ZW9mKHN0cnVjdCBzc2Jfc3Byb20pKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAidW5hYmxlIHRvIGZpbGwgU1BST00gZm9yIGdpdmVuIGJ1c3R5cGUuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQogI2VuZGlmCiAKIC8qCkBAIC03OTMsOCArODA0LDkgQEAKIAlpZiAoIWJvYXJkX2dldF9tYWNfYWRkcmVzcyhiY202M3h4X3Nwcm9tLmlsMG1hYykpIHsKIAkJbWVtY3B5KGJjbTYzeHhfc3Byb20uZXQwbWFjLCBiY202M3h4X3Nwcm9tLmlsMG1hYywgRVRIX0FMRU4pOwogCQltZW1jcHkoYmNtNjN4eF9zcHJvbS5ldDFtYWMsIGJjbTYzeHhfc3Byb20uaWwwbWFjLCBFVEhfQUxFTik7Ci0JCWlmIChzc2JfYXJjaF9zZXRfZmFsbGJhY2tfc3Byb20oJmJjbTYzeHhfc3Byb20pIDwgMCkKLQkJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlZ2lzdGVyIGZhbGxiYWNrIFNQUk9NXG4iKTsKKwkJaWYgKHNzYl9hcmNoX3JlZ2lzdGVyX2ZhbGxiYWNrX3Nwcm9tKAorCQkJCSZiY202M3h4X2dldF9mYWxsYmFja19zcHJvbSkgPCAwKQorCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGZhbGxiYWNrIFNQUk9NXG4iKTsKIAl9CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvY2FsY192bWxpbnV6X2xvYWRfYWRkci5jIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9jYWxjX3ZtbGludXpfbG9hZF9hZGRyLmMKaW5kZXggODhjOWQ5NjMuLjlhNjI0MzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvY2FsY192bWxpbnV6X2xvYWRfYWRkci5jCisrKyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvY2FsY192bWxpbnV6X2xvYWRfYWRkci5jCkBAIC0xNiw4ICsxNiw4IEBACiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CisJdW5zaWduZWQgbG9uZyBsb25nIHZtbGludXhfc2l6ZSwgdm1saW51eF9sb2FkX2FkZHIsIHZtbGludXpfbG9hZF9hZGRyOwogCXN0cnVjdCBzdGF0IHNiOwotCXVpbnQ2NF90IHZtbGludXhfc2l6ZSwgdm1saW51eF9sb2FkX2FkZHIsIHZtbGludXpfbG9hZF9hZGRyOwogCiAJaWYgKGFyZ2MgIT0gMykgewogCQlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyA8cGF0aG5hbWU+IDx2bWxpbnV4X2xvYWRfYWRkcj5cbiIsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL3VhcnQtYWxjaGVteS5jIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC91YXJ0LWFsY2hlbXkuYwppbmRleCAxYmZmMjJmLi5lYjA2M2U2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL3VhcnQtYWxjaGVteS5jCisrKyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvdWFydC1hbGNoZW15LmMKQEAgLTMsNSArMyw1IEBACiB2b2lkIHB1dGMoY2hhciBjKQogewogCS8qIGFsbCBjdXJyZW50IChKYW4uIDIwMTApIGluLWtlcm5lbCBib2FyZHMgKi8KLQlhbGNoZW15X3VhcnRfcHV0Y2hhcihVQVJUMF9QSFlTX0FERFIsIGMpOworCWFsY2hlbXlfdWFydF9wdXRjaGFyKEFVMTAwMF9VQVJUMF9QSFlTX0FERFIsIGMpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vS2NvbmZpZyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL0tjb25maWcKaW5kZXggY2FhZTIyOC4uY2FkNTU1ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vS2NvbmZpZworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9LY29uZmlnCkBAIC0xLDExICsxLDcgQEAKLWNvbmZpZyBDQVZJVU1fT0NURU9OX1NQRUNJRklDX09QVElPTlMKLQlib29sICJFbmFibGUgT2N0ZW9uIHNwZWNpZmljIG9wdGlvbnMiCi0JZGVwZW5kcyBvbiBDUFVfQ0FWSVVNX09DVEVPTgotCWRlZmF1bHQgInkiCitpZiBDUFVfQ0FWSVVNX09DVEVPTgogCiBjb25maWcgQ0FWSVVNX0NONjNYWFAxCiAJYm9vbCAiRW5hYmxlIENONjNYWFAxIGVycmF0YSB3b3Jhcm91bmRzIgotCWRlcGVuZHMgb24gQ0FWSVVNX09DVEVPTl9TUEVDSUZJQ19PUFRJT05TCiAJZGVmYXVsdCAibiIKIAloZWxwCiAJICBUaGUgQ042M1hYUDEgY2hpcCByZXF1aXJlcyBidWlsZCB0aW1lIHdvcmthcm91bmRzIHRvCkBAIC0xNiw3ICsxMiw2IEBACiAKIGNvbmZpZyBDQVZJVU1fT0NURU9OXzJORF9LRVJORUwKIAlib29sICJCdWlsZCB0aGUga2VybmVsIHRvIGJlIHVzZWQgYXMgYSAybmQga2VybmVsIG9uIHRoZSBzYW1lIGNoaXAiCi0JZGVwZW5kcyBvbiBDQVZJVU1fT0NURU9OX1NQRUNJRklDX09QVElPTlMKIAlkZWZhdWx0ICJuIgogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGNvbmZpZ3VyZXMgdGhpcyBrZXJuZWwgdG8gYmUgbGlua2VkIGF0IGEgZGlmZmVyZW50CkBAIC0yNiw3ICsyMSw2IEBACiAKIGNvbmZpZyBDQVZJVU1fT0NURU9OX0hXX0ZJWF9VTkFMSUdORUQKIAlib29sICJFbmFibGUgaGFyZHdhcmUgZml4dXBzIG9mIHVuYWxpZ25lZCBsb2FkcyBhbmQgc3RvcmVzIgotCWRlcGVuZHMgb24gQ0FWSVVNX09DVEVPTl9TUEVDSUZJQ19PUFRJT05TCiAJZGVmYXVsdCAieSIKIAloZWxwCiAJICBDb25maWd1cmUgdGhlIE9jdGVvbiBoYXJkd2FyZSB0byBhdXRvbWF0aWNhbGx5IGZpeCB1bmFsaWduZWQgbG9hZHMKQEAgLTM4LDcgKzMyLDYgQEAKIAogY29uZmlnIENBVklVTV9PQ1RFT05fQ1ZNU0VHX1NJWkUKIAlpbnQgIk51bWJlciBvZiBMMSBjYWNoZSBsaW5lcyByZXNlcnZlZCBmb3IgQ1ZNU0VHIG1lbW9yeSIKLQlkZXBlbmRzIG9uIENBVklVTV9PQ1RFT05fU1BFQ0lGSUNfT1BUSU9OUwogCXJhbmdlIDAgNTQKIAlkZWZhdWx0IDEKIAloZWxwCkBAIC01MCw3ICs0Myw2IEBACiAKIGNvbmZpZyBDQVZJVU1fT0NURU9OX0xPQ0tfTDIKIAlib29sICJMb2NrIG9mdGVuIHVzZWQga2VybmVsIGNvZGUgaW4gdGhlIEwyIgotCWRlcGVuZHMgb24gQ0FWSVVNX09DVEVPTl9TUEVDSUZJQ19PUFRJT05TCiAJZGVmYXVsdCAieSIKIAloZWxwCiAJICBFbmFibGUgbG9ja2luZyBwYXJ0cyBvZiB0aGUga2VybmVsIGludG8gdGhlIEwyIGNhY2hlLgpAQCAtOTMsNyArODUsNiBAQAogY29uZmlnIEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQogCWRlZl9ib29sIHkKIAlzZWxlY3QgU1BBUlNFTUVNX1NUQVRJQwotCWRlcGVuZHMgb24gQ1BVX0NBVklVTV9PQ1RFT04KIAogY29uZmlnIENBVklVTV9PQ1RFT05fSEVMUEVSCiAJZGVmX2Jvb2wgeQpAQCAtMTA3LDYgKzk4LDggQEAKIAogY29uZmlnIFNXSU9UTEIKIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBDUFVfQ0FWSVVNX09DVEVPTgogCXNlbGVjdCBJT01NVV9IRUxQRVIKIAlzZWxlY3QgTkVFRF9TR19ETUFfTEVOR1RICisKKworZW5kaWYgIyBDUFVfQ0FWSVVNX09DVEVPTgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vY3NyYy1vY3Rlb24uYyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2NzcmMtb2N0ZW9uLmMKaW5kZXggMjZiZjcxMS4uMjlkNTZhZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vY3NyYy1vY3Rlb24uYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9jc3JjLW9jdGVvbi5jCkBAIC0xMDUsOCArMTA1LDcgQEAKIHZvaWQgX19pbml0IHBsYXRfdGltZV9pbml0KHZvaWQpCiB7CiAJY2xvY2tzb3VyY2VfbWlwcy5yYXRpbmcgPSAzMDA7Ci0JY2xvY2tzb3VyY2Vfc2V0X2Nsb2NrKCZjbG9ja3NvdXJjZV9taXBzLCBvY3Rlb25fZ2V0X2Nsb2NrX3JhdGUoKSk7Ci0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX21pcHMpOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZjbG9ja3NvdXJjZV9taXBzLCBvY3Rlb25fZ2V0X2Nsb2NrX3JhdGUoKSk7CiB9CiAKIHN0YXRpYyB1NjQgb2N0ZW9uX3VkZWxheV9mYWN0b3I7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc2V0dXAuYwppbmRleCAwNzA3ZmFlLi4yZDkwMjhmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmMKQEAgLTI4OCw3ICsyODgsNiBAQAogCXVuaW9uIG9jdGVvbl9jdm1lbWN0bCBjdm1tZW1jdGw7CiAJdW5pb24gY3ZteF9pb2JfZmF1X3RpbWVvdXQgZmF1X3RpbWVvdXQ7CiAJdW5pb24gY3ZteF9wb3dfbndfdGltIG5tX3RpbTsKLQl1aW50NjRfdCBjdm1jdGw7CiAKIAkvKiBHZXQgdGhlIGN1cnJlbnQgc2V0dGluZ3MgZm9yIENQMF9DVk1NRU1DVExfUkVHICovCiAJY3ZtbWVtY3RsLnU2NCA9IHJlYWRfYzBfY3ZtbWVtY3RsKCk7CkBAIC0zOTIsMTIgKzM5MSw2IEBACiAJCQkgIENPTkZJR19DQVZJVU1fT0NURU9OX0NWTVNFR19TSVpFLAogCQkJICBDT05GSUdfQ0FWSVVNX09DVEVPTl9DVk1TRUdfU0laRSAqIDEyOCk7CiAKLQkvKiBNb3ZlIHRoZSBwZXJmb3JtYW5jZSBjb3VudGVyIGludGVycnVwdHMgdG8gSVJRIDYgKi8KLQljdm1jdGwgPSByZWFkX2MwX2N2bWN0bCgpOwotCWN2bWN0bCAmPSB+KDcgPDwgNyk7Ci0JY3ZtY3RsIHw9IDYgPDwgNzsKLQl3cml0ZV9jMF9jdm1jdGwoY3ZtY3RsKTsKLQogCS8qIFNldCBhIGRlZmF1bHQgZm9yIHRoZSBoYXJkd2FyZSB0aW1lb3V0cyAqLwogCWZhdV90aW1lb3V0LnU2NCA9IDA7CiAJZmF1X3RpbWVvdXQucy50b3V0X3ZhbCA9IDB4ZmZmOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc21wLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zbXAuYwppbmRleCA3NjkyM2VlLi44YjYwNjQyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zbXAuYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zbXAuYwpAQCAtMzcsNyArMzcsNyBAQAogCXVpbnQ2NF90IGFjdGlvbjsKIAogCS8qIExvYWQgdGhlIG1haWxib3ggcmVnaXN0ZXIgdG8gZmlndXJlIG91dCB3aGF0IHdlJ3JlIHN1cHBvc2VkIHRvIGRvICovCi0JYWN0aW9uID0gY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9NQk9YX0NMUlgoY29yZWlkKSk7CisJYWN0aW9uID0gY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9NQk9YX0NMUlgoY29yZWlkKSkgJiAweGZmZmY7CiAKIAkvKiBDbGVhciB0aGUgbWFpbGJveCB0byBjbGVhciB0aGUgaW50ZXJydXB0ICovCiAJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfTUJPWF9DTFJYKGNvcmVpZCksIGFjdGlvbik7CkBAIC0yMDIsMTYgKzIwMiwxNSBAQAogCWlmIChsYWJpLT5sYWJpX3NpZ25hdHVyZSAhPSBMQUJJX1NJR05BVFVSRSkKIAkJcGFuaWMoIlRoZSBib290bG9hZGVyIHZlcnNpb24gb24gdGhpcyBib2FyZCBpcyBpbmNvcnJlY3QuIik7CiAjZW5kaWYKLQotCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX01CT1hfQ0xSWChjdm14X2dldF9jb3JlX251bSgpKSwgMHhmZmZmZmZmZik7CisJLyoKKwkgKiBPbmx5IHRoZSBsb3cgb3JkZXIgbWFpbGJveCBiaXRzIGFyZSB1c2VkIGZvciBJUElzLCBsZWF2ZQorCSAqIHRoZSBvdGhlciBiaXRzIGFsb25lLgorCSAqLworCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX01CT1hfQ0xSWChjdm14X2dldF9jb3JlX251bSgpKSwgMHhmZmZmKTsKIAlpZiAocmVxdWVzdF9pcnEoT0NURU9OX0lSUV9NQk9YMCwgbWFpbGJveF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsCi0JCQkibWFpbGJveDAiLCBtYWlsYm94X2ludGVycnVwdCkpIHsKKwkJCSJTTVAtSVBJIiwgbWFpbGJveF9pbnRlcnJ1cHQpKSB7CiAJCXBhbmljKCJDYW5ub3QgcmVxdWVzdF9pcnEoT0NURU9OX0lSUV9NQk9YMClcbiIpOwogCX0KLQlpZiAocmVxdWVzdF9pcnEoT0NURU9OX0lSUV9NQk9YMSwgbWFpbGJveF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsCi0JCQkibWFpbGJveDEiLCBtYWlsYm94X2ludGVycnVwdCkpIHsKLQkJcGFuaWMoIkNhbm5vdCByZXF1ZXN0X2lycShPQ1RFT05fSVJRX01CT1gxKVxuIik7Ci0JfQogfQogCiAvKioKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2xlbW90ZTJmX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2xlbW90ZTJmX2RlZmNvbmZpZwppbmRleCAxNjdjMWQwLi5iNmFjZDJmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9sZW1vdGUyZl9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbGVtb3RlMmZfZGVmY29uZmlnCkBAIC04Niw4ICs4Niw4IEBACiBDT05GSUdfTkVUX0VNQVRDSD15CiBDT05GSUdfTkVUX0NMU19BQ1Q9eQogQ09ORklHX0JUPW0KLUNPTkZJR19CVF9MMkNBUD1tCi1DT05GSUdfQlRfU0NPPW0KK0NPTkZJR19CVF9MMkNBUD15CitDT05GSUdfQlRfU0NPPXkKIENPTkZJR19CVF9SRkNPTU09bQogQ09ORklHX0JUX1JGQ09NTV9UVFk9eQogQ09ORklHX0JUX0JORVA9bQpAQCAtMzI5LDcgKzMyOSw3IEBACiBDT05GSUdfVVNCX0dBREdFVD1tCiBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTI9eQogQ09ORklHX01NQz1tCi1DT05GSUdfTEVEU19DTEFTUz1tCitDT05GSUdfTEVEU19DTEFTUz15CiBDT05GSUdfU1RBR0lORz15CiAjIENPTkZJR19TVEFHSU5HX0VYQ0xVREVfQlVJTEQgaXMgbm90IHNldAogQ09ORklHX0ZCX1NNN1hYPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZwppbmRleCA3MjcwZjMxLi41NTI3YWJiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnCkBAIC0zNzQsNyArMzc0LDcgQEAKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKIENPTkZJR19ISUQ9bQotQ09ORklHX0xFRFNfQ0xBU1M9bQorQ09ORklHX0xFRFNfQ0xBU1M9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj1tCiBDT05GSUdfTEVEU19UUklHR0VSX0lERV9ESVNLPXkKIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPW0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL210eDFfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbXR4MV9kZWZjb25maWcKaW5kZXggYTk3YTQyYy4uMzc4NjJiMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbXR4MV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbXR4MV9kZWZjb25maWcKQEAgLTIyNSw4ICsyMjUsOCBAQAogQ09ORklHX1ZMU0lfRklSPW0KIENPTkZJR19NQ1NfRklSPW0KIENPTkZJR19CVD1tCi1DT05GSUdfQlRfTDJDQVA9bQotQ09ORklHX0JUX1NDTz1tCitDT05GSUdfQlRfTDJDQVA9eQorQ09ORklHX0JUX1NDTz15CiBDT05GSUdfQlRfUkZDT01NPW0KIENPTkZJR19CVF9SRkNPTU1fVFRZPXkKIENPTkZJR19CVF9CTkVQPW0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL25sbV94bHJfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbmxtX3hscl9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRiMzk5ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL25sbV94bHJfZGVmY29uZmlnCkBAIC0wLDAgKzEsNTc0IEBACitDT05GSUdfTkxNX1hMUl9CT0FSRD15CitDT05GSUdfSElHSE1FTT15CitDT05GSUdfS1NNPXkKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NjU1MzYKK0NPTkZJR19TTVA9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPXkKK0NPTkZJR19LRVhFQz15CitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19DUk9TU19DT01QSUxFPSJtaXBzNjQtdW5rbm93bi1saW51eC1nbnUtIgorIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMz15CitDT05GSUdfVEFTS1NUQVRTPXkKK0NPTkZJR19UQVNLX0RFTEFZX0FDQ1Q9eQorQ09ORklHX1RBU0tfWEFDQ1Q9eQorQ09ORklHX1RBU0tfSU9fQUNDT1VOVElORz15CitDT05GSUdfQVVESVQ9eQorQ09ORklHX05BTUVTUEFDRVM9eQorQ09ORklHX1NDSEVEX0FVVE9HUk9VUD15CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9InVzci9kZXZfZmlsZV9saXN0IHVzci9yb290ZnMiCitDT05GSUdfUkRfQlpJUDI9eQorQ09ORklHX1JEX0xaTUE9eQorQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9HWklQPXkKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19FWFBFUlQ9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CisjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ1NQS1JfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RWRVJTSU9OUz15CitDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKK0NPTkZJR19CTEtfREVWX0lOVEVHUklUWT15CitDT05GSUdfQklORk1UX01JU0M9bQorQ09ORklHX1BNX1JVTlRJTUU9eQorQ09ORklHX1BNX0RFQlVHPXkKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk1fVVNFUj1tCitDT05GSUdfTkVUX0tFWT1tCitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKK0NPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQorQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15CitDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKK0NPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKK0NPTkZJR19ORVRfSVBJUD1tCitDT05GSUdfSVBfTVJPVVRFPXkKK0NPTkZJR19JUF9QSU1TTV9WMT15CitDT05GSUdfSVBfUElNU01fVjI9eQorQ09ORklHX1NZTl9DT09LSUVTPXkKK0NPTkZJR19JTkVUX0FIPW0KK0NPTkZJR19JTkVUX0VTUD1tCitDT05GSUdfSU5FVF9JUENPTVA9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KK0NPTkZJR19UQ1BfQ09OR19BRFZBTkNFRD15CitDT05GSUdfVENQX0NPTkdfSFNUQ1A9bQorQ09ORklHX1RDUF9DT05HX0hZQkxBPW0KK0NPTkZJR19UQ1BfQ09OR19TQ0FMQUJMRT1tCitDT05GSUdfVENQX0NPTkdfTFA9bQorQ09ORklHX1RDUF9DT05HX1ZFTk89bQorQ09ORklHX1RDUF9DT05HX1lFQUg9bQorQ09ORklHX1RDUF9DT05HX0lMTElOT0lTPW0KK0NPTkZJR19UQ1BfTUQ1U0lHPXkKK0NPTkZJR19JUFY2PXkKK0NPTkZJR19JUFY2X1BSSVZBQ1k9eQorQ09ORklHX0lORVQ2X0FIPW0KK0NPTkZJR19JTkVUNl9FU1A9bQorQ09ORklHX0lORVQ2X0lQQ09NUD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTj1tCitDT05GSUdfSVBWNl9TSVQ9bQorQ09ORklHX0lQVjZfVFVOTkVMPW0KK0NPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUz15CitDT05GSUdfTkVUTEFCRUw9eQorQ09ORklHX05FVEZJTFRFUj15CitDT05GSUdfTkZfQ09OTlRSQUNLPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSz15CitDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15CitDT05GSUdfTkZfQ1RfUFJPVE9fVURQTElURT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjM9bQorQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQorQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfUFBUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NBTkU9bQorQ09ORklHX05GX0NPTk5UUkFDS19TSVA9bQorQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KK0NPTkZJR19ORl9DVF9ORVRMSU5LPW0KK0NPTkZJR19ORVRGSUxURVJfVFBST1hZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05PVFJBQ0s9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFBST1hZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ0xVU1RFUj1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1NGPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QSFlTREVWPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU09DS0VUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyPW0KK0NPTkZJR19JUF9WUz1tCitDT05GSUdfSVBfVlNfSVBWNj15CitDT05GSUdfSVBfVlNfUFJPVE9fVENQPXkKK0NPTkZJR19JUF9WU19QUk9UT19VRFA9eQorQ09ORklHX0lQX1ZTX1BST1RPX0VTUD15CitDT05GSUdfSVBfVlNfUFJPVE9fQUg9eQorQ09ORklHX0lQX1ZTX1JSPW0KK0NPTkZJR19JUF9WU19XUlI9bQorQ09ORklHX0lQX1ZTX0xDPW0KK0NPTkZJR19JUF9WU19XTEM9bQorQ09ORklHX0lQX1ZTX0xCTEM9bQorQ09ORklHX0lQX1ZTX0xCTENSPW0KK0NPTkZJR19JUF9WU19ESD1tCitDT05GSUdfSVBfVlNfU0g9bQorQ09ORklHX0lQX1ZTX1NFRD1tCitDT05GSUdfSVBfVlNfTlE9bQorQ09ORklHX0lQX1ZTX0ZUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQorQ09ORklHX0lQX05GX1FVRVVFPW0KK0NPTkZJR19JUF9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUg9bQorQ09ORklHX0lQX05GX01BVENIX0VDTj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KK0NPTkZJR19JUF9ORl9GSUxURVI9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQorQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KK0NPTkZJR19ORl9OQVQ9bQorQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQorQ09ORklHX0lQX05GX01BTkdMRT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tCitDT05GSUdfSVBfTkZfUkFXPW0KK0NPTkZJR19JUF9ORl9TRUNVUklUWT1tCitDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9BUlBGSUxURVI9bQorQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQorQ09ORklHX05GX0NPTk5UUkFDS19JUFY2PW0KK0NPTkZJR19JUDZfTkZfUVVFVUU9bQorQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVA2X05GX01BVENIX0FIPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCitDT05GSUdfSVA2X05GX01BVENIX0hMPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCitDT05GSUdfSVA2X05GX01BVENIX01IPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfSEw9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUDZfTkZfRklMVEVSPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVA2X05GX01BTkdMRT1tCitDT05GSUdfSVA2X05GX1JBVz1tCitDT05GSUdfSVA2X05GX1NFQ1VSSVRZPW0KK0NPTkZJR19ERUNORVRfTkZfR1JBQlVMQVRPUj1tCitDT05GSUdfQlJJREdFX05GX0VCVEFCTEVTPW0KK0NPTkZJR19CUklER0VfRUJUX0JST1VURT1tCitDT05GSUdfQlJJREdFX0VCVF9UX0ZJTFRFUj1tCitDT05GSUdfQlJJREdFX0VCVF9UX05BVD1tCitDT05GSUdfQlJJREdFX0VCVF84MDJfMz1tCitDT05GSUdfQlJJREdFX0VCVF9BTU9ORz1tCitDT05GSUdfQlJJREdFX0VCVF9BUlA9bQorQ09ORklHX0JSSURHRV9FQlRfSVA9bQorQ09ORklHX0JSSURHRV9FQlRfSVA2PW0KK0NPTkZJR19CUklER0VfRUJUX0xJTUlUPW0KK0NPTkZJR19CUklER0VfRUJUX01BUks9bQorQ09ORklHX0JSSURHRV9FQlRfUEtUVFlQRT1tCitDT05GSUdfQlJJREdFX0VCVF9TVFA9bQorQ09ORklHX0JSSURHRV9FQlRfVkxBTj1tCitDT05GSUdfQlJJREdFX0VCVF9BUlBSRVBMWT1tCitDT05GSUdfQlJJREdFX0VCVF9ETkFUPW0KK0NPTkZJR19CUklER0VfRUJUX01BUktfVD1tCitDT05GSUdfQlJJREdFX0VCVF9SRURJUkVDVD1tCitDT05GSUdfQlJJREdFX0VCVF9TTkFUPW0KK0NPTkZJR19CUklER0VfRUJUX0xPRz1tCitDT05GSUdfQlJJREdFX0VCVF9VTE9HPW0KK0NPTkZJR19CUklER0VfRUJUX05GTE9HPW0KK0NPTkZJR19JUF9EQ0NQPW0KK0NPTkZJR19SRFM9bQorQ09ORklHX1JEU19UQ1A9bQorQ09ORklHX1RJUEM9bQorQ09ORklHX0FUTT1tCitDT05GSUdfQVRNX0NMSVA9bQorQ09ORklHX0FUTV9MQU5FPW0KK0NPTkZJR19BVE1fTVBPQT1tCitDT05GSUdfQVRNX0JSMjY4ND1tCitDT05GSUdfQlJJREdFPW0KK0NPTkZJR19WTEFOXzgwMjFRPW0KK0NPTkZJR19WTEFOXzgwMjFRX0dWUlA9eQorQ09ORklHX0RFQ05FVD1tCitDT05GSUdfTExDMj1tCitDT05GSUdfSVBYPW0KK0NPTkZJR19BVEFMSz1tCitDT05GSUdfREVWX0FQUExFVEFMSz1tCitDT05GSUdfSVBERFA9bQorQ09ORklHX0lQRERQX0VOQ0FQPXkKK0NPTkZJR19JUEREUF9ERUNBUD15CitDT05GSUdfWDI1PW0KK0NPTkZJR19MQVBCPW0KK0NPTkZJR19FQ09ORVQ9bQorQ09ORklHX0VDT05FVF9BVU5VRFA9eQorQ09ORklHX0VDT05FVF9OQVRJVkU9eQorQ09ORklHX1dBTl9ST1VURVI9bQorQ09ORklHX1BIT05FVD1tCitDT05GSUdfSUVFRTgwMjE1ND1tCitDT05GSUdfTkVUX1NDSEVEPXkKK0NPTkZJR19ORVRfU0NIX0NCUT1tCitDT05GSUdfTkVUX1NDSF9IVEI9bQorQ09ORklHX05FVF9TQ0hfSEZTQz1tCitDT05GSUdfTkVUX1NDSF9BVE09bQorQ09ORklHX05FVF9TQ0hfUFJJTz1tCitDT05GSUdfTkVUX1NDSF9NVUxUSVE9bQorQ09ORklHX05FVF9TQ0hfUkVEPW0KK0NPTkZJR19ORVRfU0NIX1NGUT1tCitDT05GSUdfTkVUX1NDSF9URVFMPW0KK0NPTkZJR19ORVRfU0NIX1RCRj1tCitDT05GSUdfTkVUX1NDSF9HUkVEPW0KK0NPTkZJR19ORVRfU0NIX0RTTUFSSz1tCitDT05GSUdfTkVUX1NDSF9ORVRFTT1tCitDT05GSUdfTkVUX1NDSF9EUlI9bQorQ09ORklHX05FVF9TQ0hfSU5HUkVTUz1tCitDT05GSUdfTkVUX0NMU19CQVNJQz1tCitDT05GSUdfTkVUX0NMU19UQ0lOREVYPW0KK0NPTkZJR19ORVRfQ0xTX1JPVVRFND1tCitDT05GSUdfTkVUX0NMU19GVz1tCitDT05GSUdfTkVUX0NMU19VMzI9bQorQ09ORklHX0NMU19VMzJfTUFSSz15CitDT05GSUdfTkVUX0NMU19SU1ZQPW0KK0NPTkZJR19ORVRfQ0xTX1JTVlA2PW0KK0NPTkZJR19ORVRfQ0xTX0ZMT1c9bQorQ09ORklHX05FVF9FTUFUQ0g9eQorQ09ORklHX05FVF9FTUFUQ0hfQ01QPW0KK0NPTkZJR19ORVRfRU1BVENIX05CWVRFPW0KK0NPTkZJR19ORVRfRU1BVENIX1UzMj1tCitDT05GSUdfTkVUX0VNQVRDSF9NRVRBPW0KK0NPTkZJR19ORVRfRU1BVENIX1RFWFQ9bQorQ09ORklHX05FVF9DTFNfQUNUPXkKK0NPTkZJR19ORVRfQUNUX1BPTElDRT1tCitDT05GSUdfTkVUX0FDVF9HQUNUPW0KK0NPTkZJR19HQUNUX1BST0I9eQorQ09ORklHX05FVF9BQ1RfTUlSUkVEPW0KK0NPTkZJR19ORVRfQUNUX0lQVD1tCitDT05GSUdfTkVUX0FDVF9OQVQ9bQorQ09ORklHX05FVF9BQ1RfUEVESVQ9bQorQ09ORklHX05FVF9BQ1RfU0lNUD1tCitDT05GSUdfTkVUX0FDVF9TS0JFRElUPW0KK0NPTkZJR19EQ0I9eQorQ09ORklHX05FVF9QS1RHRU49bQorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorQ09ORklHX0RFVlRNUEZTPXkKK0NPTkZJR19ERVZUTVBGU19NT1VOVD15CisjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKK0NPTkZJR19DT05ORUNUT1I9eQorQ09ORklHX01URD1tCitDT05GSUdfQkxLX0RFVl9MT09QPXkKK0NPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQorQ09ORklHX0JMS19ERVZfTkJEPW0KK0NPTkZJR19CTEtfREVWX09TRD1tCitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NjU1MzYKK0NPTkZJR19DRFJPTV9QS1RDRFZEPXkKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorQ09ORklHX1JBSURfQVRUUlM9bQorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfVEdUPW0KK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19DSFJfREVWX1NUPW0KK0NPTkZJR19DSFJfREVWX09TU1Q9bQorQ09ORklHX0JMS19ERVZfU1I9eQorQ09ORklHX0NIUl9ERVZfU0c9eQorQ09ORklHX0NIUl9ERVZfU0NIPW0KK0NPTkZJR19TQ1NJX01VTFRJX0xVTj15CitDT05GSUdfU0NTSV9DT05TVEFOVFM9eQorQ09ORklHX1NDU0lfTE9HR0lORz15CitDT05GSUdfU0NTSV9TQ0FOX0FTWU5DPXkKK0NPTkZJR19TQ1NJX1NQSV9BVFRSUz1tCitDT05GSUdfU0NTSV9GQ19UR1RfQVRUUlM9eQorQ09ORklHX1NDU0lfU0FTX0xJQlNBUz1tCitDT05GSUdfU0NTSV9TUlBfQVRUUlM9bQorQ09ORklHX1NDU0lfU1JQX1RHVF9BVFRSUz15CitDT05GSUdfSVNDU0lfVENQPW0KK0NPTkZJR19MSUJGQ09FPW0KK0NPTkZJR19TQ1NJX0RFQlVHPW0KK0NPTkZJR19TQ1NJX0RIPXkKK0NPTkZJR19TQ1NJX0RIX1JEQUM9bQorQ09ORklHX1NDU0lfREhfSFBfU1c9bQorQ09ORklHX1NDU0lfREhfRU1DPW0KK0NPTkZJR19TQ1NJX0RIX0FMVUE9bQorQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUj1tCitDT05GSUdfU0NTSV9PU0RfVUxEPW0KKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CitDT05GSUdfSU5QVVRfRVZCVUc9bQorIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAorQ09ORklHX1NFUklPX1NFUlBPUlQ9bQorQ09ORklHX1NFUklPX0xJQlBTMj15CitDT05GSUdfU0VSSU9fUkFXPW0KK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MAorQ09ORklHX1NFUklBTF9OT05TVEFOREFSRD15CitDT05GSUdfTl9IRExDPW0KKyMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAorQ09ORklHX1NUQUxEUlY9eQorQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00OAorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKK0NPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorQ09ORklHX1NFUklBTF84MjUwX1JTQT15CitDT05GSUdfSFdfUkFORE9NPXkKK0NPTkZJR19IV19SQU5ET01fVElNRVJJT01FTT1tCitDT05GSUdfUkFXX0RSSVZFUj1tCisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfVUlPPXkKK0NPTkZJR19VSU9fUERSVj1tCitDT05GSUdfVUlPX1BEUlZfR0VOSVJRPW0KK0NPTkZJR19FWFQyX0ZTPXkKK0NPTkZJR19FWFQyX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUMl9GU19TRUNVUklUWT15CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQorQ09ORklHX0VYVDRfRlM9eQorQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZPXkKK0NPTkZJR19HRlMyX0ZTPW0KK0NPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNPXkKK0NPTkZJR19PQ0ZTMl9GUz1tCitDT05GSUdfQlRSRlNfRlM9bQorQ09ORklHX0JUUkZTX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfTklMRlMyX0ZTPW0KK0NPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRT15CisjIENPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19RRk1UX1YxPW0KK0NPTkZJR19RRk1UX1YyPW0KK0NPTkZJR19BVVRPRlM0X0ZTPW0KK0NPTkZJR19GVVNFX0ZTPXkKK0NPTkZJR19DVVNFPW0KK0NPTkZJR19GU0NBQ0hFPW0KK0NPTkZJR19GU0NBQ0hFX1NUQVRTPXkKK0NPTkZJR19GU0NBQ0hFX0hJU1RPR1JBTT15CitDT05GSUdfQ0FDSEVGSUxFUz1tCitDT05GSUdfSVNPOTY2MF9GUz1tCitDT05GSUdfSk9MSUVUPXkKK0NPTkZJR19aSVNPRlM9eQorQ09ORklHX1VERl9GUz1tCitDT05GSUdfTVNET1NfRlM9bQorQ09ORklHX1ZGQVRfRlM9bQorQ09ORklHX05URlNfRlM9bQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorQ09ORklHX0NPTkZJR0ZTX0ZTPXkKK0NPTkZJR19BREZTX0ZTPW0KK0NPTkZJR19BRkZTX0ZTPW0KK0NPTkZJR19FQ1JZUFRfRlM9eQorQ09ORklHX0hGU19GUz1tCitDT05GSUdfSEZTUExVU19GUz1tCitDT05GSUdfQkVGU19GUz1tCitDT05GSUdfQkZTX0ZTPW0KK0NPTkZJR19FRlNfRlM9bQorQ09ORklHX0NSQU1GUz1tCitDT05GSUdfU1FVQVNIRlM9bQorQ09ORklHX1ZYRlNfRlM9bQorQ09ORklHX01JTklYX0ZTPW0KK0NPTkZJR19PTUZTX0ZTPW0KK0NPTkZJR19IUEZTX0ZTPW0KK0NPTkZJR19RTlg0RlNfRlM9bQorQ09ORklHX1JPTUZTX0ZTPW0KK0NPTkZJR19TWVNWX0ZTPW0KK0NPTkZJR19VRlNfRlM9bQorQ09ORklHX0VYT0ZTX0ZTPW0KK0NPTkZJR19ORlNfRlM9bQorQ09ORklHX05GU19WMz15CitDT05GSUdfTkZTX1YzX0FDTD15CitDT05GSUdfTkZTX1Y0PXkKK0NPTkZJR19ORlNfRlNDQUNIRT15CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WM19BQ0w9eQorQ09ORklHX05GU0RfVjQ9eQorQ09ORklHX0NJRlM9bQorQ09ORklHX0NJRlNfV0VBS19QV19IQVNIPXkKK0NPTkZJR19DSUZTX1VQQ0FMTD15CitDT05GSUdfQ0lGU19YQVRUUj15CitDT05GSUdfQ0lGU19QT1NJWD15CitDT05GSUdfQ0lGU19ERlNfVVBDQUxMPXkKK0NPTkZJR19DSUZTX0VYUEVSSU1FTlRBTD15CitDT05GSUdfTkNQX0ZTPW0KK0NPTkZJR19OQ1BGU19QQUNLRVRfU0lHTklORz15CitDT05GSUdfTkNQRlNfSU9DVExfTE9DS0lORz15CitDT05GSUdfTkNQRlNfU1RST05HPXkKK0NPTkZJR19OQ1BGU19ORlNfTlM9eQorQ09ORklHX05DUEZTX09TMl9OUz15CitDT05GSUdfTkNQRlNfTkxTPXkKK0NPTkZJR19OQ1BGU19FWFRSQVM9eQorQ09ORklHX0NPREFfRlM9bQorQ09ORklHX0FGU19GUz1tCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKK0NPTkZJR19BQ09STl9QQVJUSVRJT049eQorQ09ORklHX0FDT1JOX1BBUlRJVElPTl9JQ1M9eQorQ09ORklHX0FDT1JOX1BBUlRJVElPTl9SSVNDSVg9eQorQ09ORklHX09TRl9QQVJUSVRJT049eQorQ09ORklHX0FNSUdBX1BBUlRJVElPTj15CitDT05GSUdfQVRBUklfUEFSVElUSU9OPXkKK0NPTkZJR19NQUNfUEFSVElUSU9OPXkKK0NPTkZJR19CU0RfRElTS0xBQkVMPXkKK0NPTkZJR19NSU5JWF9TVUJQQVJUSVRJT049eQorQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTj15CitDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMPXkKK0NPTkZJR19MRE1fUEFSVElUSU9OPXkKK0NPTkZJR19TR0lfUEFSVElUSU9OPXkKK0NPTkZJR19VTFRSSVhfUEFSVElUSU9OPXkKK0NPTkZJR19TVU5fUEFSVElUSU9OPXkKK0NPTkZJR19LQVJNQV9QQVJUSVRJT049eQorQ09ORklHX0VGSV9QQVJUSVRJT049eQorQ09ORklHX1NZU1Y2OF9QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9ImNwNDM3IgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83NzU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTc9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjE9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjM9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjQ9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjY9bQorQ09ORklHX05MU19DT0RFUEFHRV84Njk9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQorQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQorQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQorQ09ORklHX05MU19DT0RFUEFHRV84NzQ9bQorQ09ORklHX05MU19JU084ODU5Xzg9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT1tCitDT05GSUdfTkxTX0FTQ0lJPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xPW0KK0NPTkZJR19OTFNfSVNPODg1OV8yPW0KK0NPTkZJR19OTFNfSVNPODg1OV8zPW0KK0NPTkZJR19OTFNfSVNPODg1OV80PW0KK0NPTkZJR19OTFNfSVNPODg1OV81PW0KK0NPTkZJR19OTFNfSVNPODg1OV82PW0KK0NPTkZJR19OTFNfSVNPODg1OV83PW0KK0NPTkZJR19OTFNfSVNPODg1OV85PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTQ9bQorQ09ORklHX05MU19JU084ODU5XzE1PW0KK0NPTkZJR19OTFNfS09JOF9SPW0KK0NPTkZJR19OTFNfS09JOF9VPW0KK0NPTkZJR19QUklOVEtfVElNRT15CisjIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19VTlVTRURfU1lNQk9MUz15CitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKK0NPTkZJR19TQ0hFRFNUQVRTPXkKK0NPTkZJR19USU1FUl9TVEFUUz15CitDT05GSUdfREVCVUdfSU5GTz15CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19TQ0hFRF9UUkFDRVI9eQorQ09ORklHX0JMS19ERVZfSU9fVFJBQ0U9eQorQ09ORklHX0tHREI9eQorQ09ORklHX1NFQ1VSSVRZPXkKK0NPTkZJR19TRUNVUklUWV9ORVRXT1JLPXkKK0NPTkZJR19MU01fTU1BUF9NSU5fQUREUj0wCitDT05GSUdfU0VDVVJJVFlfU0VMSU5VWD15CitDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU09eQorQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQk9PVFBBUkFNX1ZBTFVFPTAKK0NPTkZJR19TRUNVUklUWV9TRUxJTlVYX0RJU0FCTEU9eQorQ09ORklHX1NFQ1VSSVRZX1NNQUNLPXkKK0NPTkZJR19TRUNVUklUWV9UT01PWU89eQorQ09ORklHX0NSWVBUT19OVUxMPW0KK0NPTkZJR19DUllQVE9fQ1JZUFREPW0KK0NPTkZJR19DUllQVE9fVEVTVD1tCitDT05GSUdfQ1JZUFRPX0NDTT1tCitDT05GSUdfQ1JZUFRPX0dDTT1tCitDT05GSUdfQ1JZUFRPX0NUUz1tCitDT05GSUdfQ1JZUFRPX0xSVz1tCitDT05GSUdfQ1JZUFRPX1BDQkM9bQorQ09ORklHX0NSWVBUT19YVFM9bQorQ09ORklHX0NSWVBUT19ITUFDPXkKK0NPTkZJR19DUllQVE9fWENCQz1tCitDT05GSUdfQ1JZUFRPX1ZNQUM9bQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCitDT05GSUdfQ1JZUFRPX1JNRDEyOD1tCitDT05GSUdfQ1JZUFRPX1JNRDE2MD1tCitDT05GSUdfQ1JZUFRPX1JNRDI1Nj1tCitDT05GSUdfQ1JZUFRPX1JNRDMyMD1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCitDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX1dQNTEyPW0KK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCitDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KK0NPTkZJR19DUllQVE9fQ0FTVDY9bQorQ09ORklHX0NSWVBUT19GQ1JZUFQ9bQorQ09ORklHX0NSWVBUT19LSEFaQUQ9bQorQ09ORklHX0NSWVBUT19TQUxTQTIwPW0KK0NPTkZJR19DUllQVE9fU0VFRD1tCitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fWkxJQj1tCitDT05GSUdfQ1JZUFRPX0xaTz1tCitDT05GSUdfQ1JDX0NDSVRUPW0KK0NPTkZJR19DUkM3PW0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jYWNoZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NhY2hlLmgKaW5kZXggNjUwYWM5Yi4uYjRkYjY5ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NhY2hlLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NhY2hlLmgKQEAgLTE3LDYgKzE3LDYgQEAKICNkZWZpbmUgU01QX0NBQ0hFX1NISUZUCQlMMV9DQUNIRV9TSElGVAogI2RlZmluZSBTTVBfQ0FDSEVfQllURVMJCUwxX0NBQ0hFX0JZVEVTCiAKLSNkZWZpbmUgX19yZWFkX21vc3RseSBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEucmVhZF9tb3N0bHkiKSkpCisjZGVmaW5lIF9fcmVhZF9tb3N0bHkgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLi5yZWFkX21vc3RseSIpKSkKIAogI2VuZGlmIC8qIF9BU01fQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NldnQtcjRrLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY2V2dC1yNGsuaAppbmRleCBmYTQzMjhmLi42NWY5YmRkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY2V2dC1yNGsuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY2V2dC1yNGsuaApAQCAtMTQsNiArMTQsOSBAQAogI2lmbmRlZiBfX0FTTV9DRVZUX1I0S19ICiAjZGVmaW5lIF9fQVNNX0NFVlRfUjRLX0gKIAorI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorCiBERUNMQVJFX1BFUl9DUFUoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSwgbWlwc19jbG9ja2V2ZW50X2RldmljZSk7CiAKIHZvaWQgbWlwc19ldmVudF9oYW5kbGVyKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LmgKaW5kZXggODY4Nzc1My4uMzRjMGQzYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUuaApAQCAtMzMsNiArMzMsNyBAQAogI2RlZmluZSBQUklEX0NPTVBfVE9TSElCQQkweDA3MDAwMAogI2RlZmluZSBQUklEX0NPTVBfTFNJCQkweDA4MDAwMAogI2RlZmluZSBQUklEX0NPTVBfTEVYUkEJCTB4MGIwMDAwCisjZGVmaW5lIFBSSURfQ09NUF9ORVRMT0dJQwkweDBjMDAwMAogI2RlZmluZSBQUklEX0NPTVBfQ0FWSVVNCTB4MGQwMDAwCiAjZGVmaW5lIFBSSURfQ09NUF9JTkdFTklDCTB4ZDAwMDAwCiAKQEAgLTE0Miw2ICsxNDMsMzEgQEAKICNkZWZpbmUgUFJJRF9JTVBfSlpSSVNDICAgICAgICAweDAyMDAKIAogLyoKKyAqIFRoZXNlIGFyZSB0aGUgUFJJRCdzIGZvciB3aGVuIDIzOjE2ID09IFBSSURfQ09NUF9ORVRMT0dJQworICovCisjZGVmaW5lIFBSSURfSU1QX05FVExPR0lDX1hMUjczMgkweDAwMDAKKyNkZWZpbmUgUFJJRF9JTVBfTkVUTE9HSUNfWExSNzE2CTB4MDIwMAorI2RlZmluZSBQUklEX0lNUF9ORVRMT0dJQ19YTFI1MzIJMHgwOTAwCisjZGVmaW5lIFBSSURfSU1QX05FVExPR0lDX1hMUjMwOAkweDA2MDAKKyNkZWZpbmUgUFJJRF9JTVBfTkVUTE9HSUNfWExSNTMyQwkweDA4MDAKKyNkZWZpbmUgUFJJRF9JTVBfTkVUTE9HSUNfWExSNTE2QwkweDBhMDAKKyNkZWZpbmUgUFJJRF9JTVBfTkVUTE9HSUNfWExSNTA4QwkweDBiMDAKKyNkZWZpbmUgUFJJRF9JTVBfTkVUTE9HSUNfWExSMzA4QwkweDBmMDAKKyNkZWZpbmUgUFJJRF9JTVBfTkVUTE9HSUNfWExTNjA4CTB4ODAwMAorI2RlZmluZSBQUklEX0lNUF9ORVRMT0dJQ19YTFM0MDgJMHg4ODAwCisjZGVmaW5lIFBSSURfSU1QX05FVExPR0lDX1hMUzQwNAkweDhjMDAKKyNkZWZpbmUgUFJJRF9JTVBfTkVUTE9HSUNfWExTMjA4CTB4OGUwMAorI2RlZmluZSBQUklEX0lNUF9ORVRMT0dJQ19YTFMyMDQJMHg4ZjAwCisjZGVmaW5lIFBSSURfSU1QX05FVExPR0lDX1hMUzEwOAkweGNlMDAKKyNkZWZpbmUgUFJJRF9JTVBfTkVUTE9HSUNfWExTMTA0CTB4Y2YwMAorI2RlZmluZSBQUklEX0lNUF9ORVRMT0dJQ19YTFM2MTZCCTB4NDAwMAorI2RlZmluZSBQUklEX0lNUF9ORVRMT0dJQ19YTFM2MDhCCTB4NGEwMAorI2RlZmluZSBQUklEX0lNUF9ORVRMT0dJQ19YTFM0MTZCCTB4NDQwMAorI2RlZmluZSBQUklEX0lNUF9ORVRMT0dJQ19YTFM0MTJCCTB4NGMwMAorI2RlZmluZSBQUklEX0lNUF9ORVRMT0dJQ19YTFM0MDhCCTB4NGUwMAorI2RlZmluZSBQUklEX0lNUF9ORVRMT0dJQ19YTFM0MDRCCTB4NGYwMAorCisvKgogICogRGVmaW5pdGlvbnMgZm9yIDc6MCBvbiBsZWdhY3kgcHJvY2Vzc29ycwogICovCiAKQEAgLTIzNCw2ICsyNjAsNyBAQAogCSAqLwogCUNQVV81S0MsIENQVV8yMEtDLCBDUFVfMjVLRiwgQ1BVX1NCMSwgQ1BVX1NCMUEsIENQVV9MT09OR1NPTjIsCiAJQ1BVX0NBVklVTV9PQ1RFT04sIENQVV9DQVZJVU1fT0NURU9OX1BMVVMsIENQVV9DQVZJVU1fT0NURU9OMiwKKwlDUFVfWExSLAogCiAJQ1BVX0xBU1QKIH07CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IDY1NWY4NDkuLjdhYTM3ZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC01LDcgKzUsOSBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RtYS1jb2hlcmVudC5oPgogCisjaWZuZGVmIENPTkZJR19TR0lfSVAyNwkvKiBLbHVkZ2UgdG8gZml4IDIuNi4zOSBidWlsZCBmb3IgSVAyNyAqLwogI2luY2x1ZGUgPGRtYS1jb2hlcmVuY2UuaD4KKyNlbmRpZgogCiBleHRlcm4gc3RydWN0IGRtYV9tYXBfb3BzICptaXBzX2RtYV9tYXBfb3BzOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaHVnZXRsYi5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaAppbmRleCBmNWU4NTYwLi5jNTY1YjdjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaHVnZXRsYi5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9odWdldGxiLmgKQEAgLTcwLDYgKzcwLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBodWdlX3B0ZXBfY2xlYXJfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkJCSB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQogeworCWZsdXNoX3RsYl9tbSh2bWEtPnZtX21tKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaHVnZV9wdGVfbm9uZShwdGVfdCBwdGUpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaTgyNTMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pODI1My5oCmluZGV4IDQ4YmI4MjMuLjlhZDAxMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pODI1My5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pODI1My5oCkBAIC0xMiw4ICsxMiwxMyBAQAogI2RlZmluZSBQSVRfQ0gwCQkJMHg0MAogI2RlZmluZSBQSVRfQ0gyCQkJMHg0MgogCisjZGVmaW5lIFBJVF9MQVRDSAkJTEFUQ0gKKwogZXh0ZXJuIHJhd19zcGlubG9ja190IGk4MjUzX2xvY2s7CiAKIGV4dGVybiB2b2lkIHNldHVwX3BpdF90aW1lcih2b2lkKTsKIAorI2RlZmluZSBpbmJfcGl0IGluYl9wCisjZGVmaW5lIG91dGJfcGl0IG91dGJfcAorCiAjZW5kaWYgLyogX19BU01fSTgyNTNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2p1bXBfbGFiZWwuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9qdW1wX2xhYmVsLmgKaW5kZXggNzYyMmNjZi4uMTg4MWIzMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2p1bXBfbGFiZWwuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vanVtcF9sYWJlbC5oCkBAIC0yMCwxNiArMjAsMTggQEAKICNkZWZpbmUgV09SRF9JTlNOICIud29yZCIKICNlbmRpZgogCi0jZGVmaW5lIEpVTVBfTEFCRUwoa2V5LCBsYWJlbCkJCQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlhc20gZ290bygiMTpcdG5vcFxuXHQiCQkJCQlcCi0JCQkibm9wXG5cdCIJCQkJCVwKLQkJCSIucHVzaHNlY3Rpb24gX19qdW1wX3RhYmxlLCAgXCJhXCJcblx0IgkJXAotCQkJV09SRF9JTlNOICIgMWIsICVsWyIgI2xhYmVsICJdLCAlMFxuXHQiCQlcCi0JCQkiLnBvcHNlY3Rpb25cblx0IgkJCQlcCi0JCQk6IDogICJpIiAoa2V5KSA6ICA6IGxhYmVsKTsJCQlcCi0JfSB3aGlsZSAoMCkKLQorc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGFyY2hfc3RhdGljX2JyYW5jaChzdHJ1Y3QganVtcF9sYWJlbF9rZXkgKmtleSkKK3sKKwlhc20gZ290bygiMTpcdG5vcFxuXHQiCisJCSJub3Bcblx0IgorCQkiLnB1c2hzZWN0aW9uIF9fanVtcF90YWJsZSwgIFwiYXdcIlxuXHQiCisJCVdPUkRfSU5TTiAiIDFiLCAlbFtsX3llc10sICUwXG5cdCIKKwkJIi5wb3BzZWN0aW9uXG5cdCIKKwkJOiA6ICAiaSIgKGtleSkgOiA6IGxfeWVzKTsKKwlyZXR1cm4gZmFsc2U7CitsX3llczoKKwlyZXR1cm4gdHJ1ZTsKK30KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oCmluZGV4IGE2OTc2NjEuLmYyNjBlYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxMDAwLmgKQEAgLTE2MSw2ICsxNjEsNDUgQEAKIAlyZXR1cm4gQUxDSEVNWV9DUFVfVU5LTk9XTjsKIH0KIAorLyogcmV0dXJuIG51bWJlciBvZiB1YXJ0cyBvbiBhIGdpdmVuIGNwdXR5cGUgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGFsY2hlbXlfZ2V0X3VhcnRzKGludCB0eXBlKQoreworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMDAwOgorCQlyZXR1cm4gNDsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTUwMDoKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTIwMDoKKwkJcmV0dXJuIDI7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTExMDA6CisJY2FzZSBBTENIRU1ZX0NQVV9BVTE1NTA6CisJCXJldHVybiAzOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogZW5hYmxlIGFuIFVBUlQgYmxvY2sgaWYgaXQgaXNuJ3QgYWxyZWFkeSAqLworc3RhdGljIGlubGluZSB2b2lkIGFsY2hlbXlfdWFydF9lbmFibGUodTMyIHVhcnRfcGh5cykKK3sKKwl2b2lkIF9faW9tZW0gKmFkZHIgPSAodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKHVhcnRfcGh5cyk7CisKKwkvKiByZXNldCwgZW5hYmxlIGNsb2NrLCBkZWFzc2VydCByZXNldCAqLworCWlmICgoX19yYXdfcmVhZGwoYWRkciArIDB4MTAwKSAmIDMpICE9IDMpIHsKKwkJX19yYXdfd3JpdGVsKDAsIGFkZHIgKyAweDEwMCk7CisJCXdtYigpOworCQlfX3Jhd193cml0ZWwoMSwgYWRkciArIDB4MTAwKTsKKwkJd21iKCk7CisJfQorCV9fcmF3X3dyaXRlbCgzLCBhZGRyICsgMHgxMDApOworCXdtYigpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWxjaGVteV91YXJ0X2Rpc2FibGUodTMyIHVhcnRfcGh5cykKK3sKKwl2b2lkIF9faW9tZW0gKmFkZHIgPSAodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKHVhcnRfcGh5cyk7CisJX19yYXdfd3JpdGVsKDAsIGFkZHIgKyAweDEwMCk7CS8qIFVBUlRfTU9EX0NOVFJMICovCisJd21iKCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBhbGNoZW15X3VhcnRfcHV0Y2hhcih1MzIgdWFydF9waHlzLCB1OCBjKQogewogCXZvaWQgX19pb21lbSAqYmFzZSA9ICh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIodWFydF9waHlzKTsKQEAgLTE4MCw2ICsyMTksMjAgQEAKIAl3bWIoKTsKIH0KIAorLyogcmV0dXJuIG51bWJlciBvZiBldGhlcm5ldCBNQUNzIG9uIGEgZ2l2ZW4gY3B1dHlwZSAqLworc3RhdGljIGlubGluZSBpbnQgYWxjaGVteV9nZXRfbWFjcyhpbnQgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTAwMDoKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTUwMDoKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTU1MDoKKwkJcmV0dXJuIDI7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTExMDA6CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKwogLyogYXJjaC9taXBzL2F1MTAwMC9jb21tb24vY2xvY2tzLmMgKi8KIGV4dGVybiB2b2lkIHNldF9hdTF4MDBfc3BlZWQodW5zaWduZWQgaW50IG5ld19mcmVxKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgZ2V0X2F1MXgwMF9zcGVlZCh2b2lkKTsKQEAgLTYzMCwzOCArNjgzLDQyIEBACiAKIC8qCiAgKiBQaHlzaWNhbCBiYXNlIGFkZHJlc3NlcyBmb3IgaW50ZWdyYXRlZCBwZXJpcGhlcmFscworICogMC4uYXUxMDAwIDEuLmF1MTUwMCAyLi5hdTExMDAgMy4uYXUxNTUwIDQuLmF1MTIwMAogICovCiAKKyNkZWZpbmUgQVUxMDAwX0FDOTdfUEhZU19BRERSCQkweDEwMDAwMDAwIC8qIDAxMiAqLworI2RlZmluZSBBVTEwMDBfVVNCRF9QSFlTX0FERFIJCTB4MTAyMDAwMDAgLyogMDEyMyAqLworI2RlZmluZSBBVTEwMDBfSUMwX1BIWVNfQUREUgkJMHgxMDQwMDAwMCAvKiAwMTIzNCAqLworI2RlZmluZSBBVTEwMDBfTUFDMF9QSFlTX0FERFIJCTB4MTA1MDAwMDAgLyogMDIzICovCisjZGVmaW5lIEFVMTAwMF9NQUMxX1BIWVNfQUREUgkJMHgxMDUxMDAwMCAvKiAwMjMgKi8KKyNkZWZpbmUgQVUxMDAwX01BQ0VOX1BIWVNfQUREUgkJMHgxMDUyMDAwMCAvKiAwMjMgKi8KKyNkZWZpbmUgQVUxMTAwX1NEMF9QSFlTX0FERFIJCTB4MTA2MDAwMDAgLyogMjQgKi8KKyNkZWZpbmUgQVUxMTAwX1NEMV9QSFlTX0FERFIJCTB4MTA2ODAwMDAgLyogMjQgKi8KKyNkZWZpbmUgQVUxMDAwX0kyU19QSFlTX0FERFIJCTB4MTEwMDAwMDAgLyogMDIgKi8KKyNkZWZpbmUgQVUxNTAwX01BQzBfUEhZU19BRERSCQkweDExNTAwMDAwIC8qIDEgKi8KKyNkZWZpbmUgQVUxNTAwX01BQzFfUEhZU19BRERSCQkweDExNTEwMDAwIC8qIDEgKi8KKyNkZWZpbmUgQVUxNTAwX01BQ0VOX1BIWVNfQUREUgkJMHgxMTUyMDAwMCAvKiAxICovCisjZGVmaW5lIEFVMTAwMF9VQVJUMF9QSFlTX0FERFIJCTB4MTExMDAwMDAgLyogMDEyMzQgKi8KKyNkZWZpbmUgQVUxMDAwX1VBUlQxX1BIWVNfQUREUgkJMHgxMTIwMDAwMCAvKiAwMjM0ICovCisjZGVmaW5lIEFVMTAwMF9VQVJUMl9QSFlTX0FERFIJCTB4MTEzMDAwMDAgLyogMCAqLworI2RlZmluZSBBVTEwMDBfVUFSVDNfUEhZU19BRERSCQkweDExNDAwMDAwIC8qIDAxMjMgKi8KKyNkZWZpbmUgQVUxNTAwX0dQSU8yX1BIWVNfQUREUgkJMHgxMTcwMDAwMCAvKiAxMjM0ICovCisjZGVmaW5lIEFVMTAwMF9JQzFfUEhZU19BRERSCQkweDExODAwMDAwIC8qIDAxMjM0ICovCisjZGVmaW5lIEFVMTAwMF9TWVNfUEhZU19BRERSCQkweDExOTAwMDAwIC8qIDAxMjM0ICovCisjZGVmaW5lIEFVMTAwMF9ETUFfUEhZU19BRERSCQkweDE0MDAyMDAwIC8qIDAxMiAqLworI2RlZmluZSBBVTE1NTBfREJETUFfUEhZU19BRERSCQkweDE0MDAyMDAwIC8qIDM0ICovCisjZGVmaW5lIEFVMTU1MF9EQkRNQV9DT05GX1BIWVNfQUREUgkweDE0MDAzMDAwIC8qIDM0ICovCisjZGVmaW5lIEFVMTAwMF9NQUNETUEwX1BIWVNfQUREUgkweDE0MDA0MDAwIC8qIDAxMjMgKi8KKyNkZWZpbmUgQVUxMDAwX01BQ0RNQTFfUEhZU19BRERSCTB4MTQwMDQyMDAgLyogMDEyMyAqLworCisKICNpZmRlZiBDT05GSUdfU09DX0FVMTAwMAogI2RlZmluZQlNRU1fUEhZU19BRERSCQkweDE0MDAwMDAwCiAjZGVmaW5lCVNUQVRJQ19NRU1fUEhZU19BRERSCTB4MTQwMDEwMDAKLSNkZWZpbmUJRE1BMF9QSFlTX0FERFIJCTB4MTQwMDIwMDAKLSNkZWZpbmUJRE1BMV9QSFlTX0FERFIJCTB4MTQwMDIxMDAKLSNkZWZpbmUJRE1BMl9QSFlTX0FERFIJCTB4MTQwMDIyMDAKLSNkZWZpbmUJRE1BM19QSFlTX0FERFIJCTB4MTQwMDIzMDAKLSNkZWZpbmUJRE1BNF9QSFlTX0FERFIJCTB4MTQwMDI0MDAKLSNkZWZpbmUJRE1BNV9QSFlTX0FERFIJCTB4MTQwMDI1MDAKLSNkZWZpbmUJRE1BNl9QSFlTX0FERFIJCTB4MTQwMDI2MDAKLSNkZWZpbmUJRE1BN19QSFlTX0FERFIJCTB4MTQwMDI3MDAKLSNkZWZpbmUJSUMwX1BIWVNfQUREUgkJMHgxMDQwMDAwMAotI2RlZmluZQlJQzFfUEhZU19BRERSCQkweDExODAwMDAwCi0jZGVmaW5lCUFDOTdfUEhZU19BRERSCQkweDEwMDAwMDAwCiAjZGVmaW5lCVVTQkhfUEhZU19BRERSCQkweDEwMTAwMDAwCi0jZGVmaW5lCVVTQkRfUEhZU19BRERSCQkweDEwMjAwMDAwCiAjZGVmaW5lCUlSREFfUEhZU19BRERSCQkweDEwMzAwMDAwCi0jZGVmaW5lCU1BQzBfUEhZU19BRERSCQkweDEwNTAwMDAwCi0jZGVmaW5lCU1BQzFfUEhZU19BRERSCQkweDEwNTEwMDAwCi0jZGVmaW5lCU1BQ0VOX1BIWVNfQUREUgkJMHgxMDUyMDAwMAotI2RlZmluZQlNQUNETUEwX1BIWVNfQUREUgkweDE0MDA0MDAwCi0jZGVmaW5lCU1BQ0RNQTFfUEhZU19BRERSCTB4MTQwMDQyMDAKLSNkZWZpbmUJSTJTX1BIWVNfQUREUgkJMHgxMTAwMDAwMAotI2RlZmluZQlVQVJUMF9QSFlTX0FERFIJCTB4MTExMDAwMDAKLSNkZWZpbmUJVUFSVDFfUEhZU19BRERSCQkweDExMjAwMDAwCi0jZGVmaW5lCVVBUlQyX1BIWVNfQUREUgkJMHgxMTMwMDAwMAotI2RlZmluZQlVQVJUM19QSFlTX0FERFIJCTB4MTE0MDAwMDAKICNkZWZpbmUJU1NJMF9QSFlTX0FERFIJCTB4MTE2MDAwMDAKICNkZWZpbmUJU1NJMV9QSFlTX0FERFIJCTB4MTE2ODAwMDAKLSNkZWZpbmUJU1lTX1BIWVNfQUREUgkJMHgxMTkwMDAwMAogI2RlZmluZSBQQ01DSUFfSU9fUEhZU19BRERSCTB4RjAwMDAwMDAwVUxMCiAjZGVmaW5lIFBDTUNJQV9BVFRSX1BIWVNfQUREUgkweEY0MDAwMDAwMFVMTAogI2RlZmluZSBQQ01DSUFfTUVNX1BIWVNfQUREUgkweEY4MDAwMDAwMFVMTApAQCAtNjcyLDMwICs3MjksOCBAQAogI2lmZGVmIENPTkZJR19TT0NfQVUxNTAwCiAjZGVmaW5lCU1FTV9QSFlTX0FERFIJCTB4MTQwMDAwMDAKICNkZWZpbmUJU1RBVElDX01FTV9QSFlTX0FERFIJMHgxNDAwMTAwMAotI2RlZmluZQlETUEwX1BIWVNfQUREUgkJMHgxNDAwMjAwMAotI2RlZmluZQlETUExX1BIWVNfQUREUgkJMHgxNDAwMjEwMAotI2RlZmluZQlETUEyX1BIWVNfQUREUgkJMHgxNDAwMjIwMAotI2RlZmluZQlETUEzX1BIWVNfQUREUgkJMHgxNDAwMjMwMAotI2RlZmluZQlETUE0X1BIWVNfQUREUgkJMHgxNDAwMjQwMAotI2RlZmluZQlETUE1X1BIWVNfQUREUgkJMHgxNDAwMjUwMAotI2RlZmluZQlETUE2X1BIWVNfQUREUgkJMHgxNDAwMjYwMAotI2RlZmluZQlETUE3X1BIWVNfQUREUgkJMHgxNDAwMjcwMAotI2RlZmluZQlJQzBfUEhZU19BRERSCQkweDEwNDAwMDAwCi0jZGVmaW5lCUlDMV9QSFlTX0FERFIJCTB4MTE4MDAwMDAKLSNkZWZpbmUJQUM5N19QSFlTX0FERFIJCTB4MTAwMDAwMDAKICNkZWZpbmUJVVNCSF9QSFlTX0FERFIJCTB4MTAxMDAwMDAKLSNkZWZpbmUJVVNCRF9QSFlTX0FERFIJCTB4MTAyMDAwMDAKICNkZWZpbmUgUENJX1BIWVNfQUREUgkJMHgxNDAwNTAwMAotI2RlZmluZQlNQUMwX1BIWVNfQUREUgkJMHgxMTUwMDAwMAotI2RlZmluZQlNQUMxX1BIWVNfQUREUgkJMHgxMTUxMDAwMAotI2RlZmluZQlNQUNFTl9QSFlTX0FERFIJCTB4MTE1MjAwMDAKLSNkZWZpbmUJTUFDRE1BMF9QSFlTX0FERFIJMHgxNDAwNDAwMAotI2RlZmluZQlNQUNETUExX1BIWVNfQUREUgkweDE0MDA0MjAwCi0jZGVmaW5lCUkyU19QSFlTX0FERFIJCTB4MTEwMDAwMDAKLSNkZWZpbmUJVUFSVDBfUEhZU19BRERSCQkweDExMTAwMDAwCi0jZGVmaW5lCVVBUlQzX1BIWVNfQUREUgkJMHgxMTQwMDAwMAotI2RlZmluZSBHUElPMl9QSFlTX0FERFIJCTB4MTE3MDAwMDAKLSNkZWZpbmUJU1lTX1BIWVNfQUREUgkJMHgxMTkwMDAwMAogI2RlZmluZSBQQ0lfTUVNX1BIWVNfQUREUgkweDQwMDAwMDAwMFVMTAogI2RlZmluZSBQQ0lfSU9fUEhZU19BRERSCTB4NTAwMDAwMDAwVUxMCiAjZGVmaW5lIFBDSV9DT05GSUcwX1BIWVNfQUREUgkweDYwMDAwMDAwMFVMTApAQCAtNzEwLDM0ICs3NDUsMTAgQEAKICNpZmRlZiBDT05GSUdfU09DX0FVMTEwMAogI2RlZmluZQlNRU1fUEhZU19BRERSCQkweDE0MDAwMDAwCiAjZGVmaW5lCVNUQVRJQ19NRU1fUEhZU19BRERSCTB4MTQwMDEwMDAKLSNkZWZpbmUJRE1BMF9QSFlTX0FERFIJCTB4MTQwMDIwMDAKLSNkZWZpbmUJRE1BMV9QSFlTX0FERFIJCTB4MTQwMDIxMDAKLSNkZWZpbmUJRE1BMl9QSFlTX0FERFIJCTB4MTQwMDIyMDAKLSNkZWZpbmUJRE1BM19QSFlTX0FERFIJCTB4MTQwMDIzMDAKLSNkZWZpbmUJRE1BNF9QSFlTX0FERFIJCTB4MTQwMDI0MDAKLSNkZWZpbmUJRE1BNV9QSFlTX0FERFIJCTB4MTQwMDI1MDAKLSNkZWZpbmUJRE1BNl9QSFlTX0FERFIJCTB4MTQwMDI2MDAKLSNkZWZpbmUJRE1BN19QSFlTX0FERFIJCTB4MTQwMDI3MDAKLSNkZWZpbmUJSUMwX1BIWVNfQUREUgkJMHgxMDQwMDAwMAotI2RlZmluZSBTRDBfUEhZU19BRERSCQkweDEwNjAwMDAwCi0jZGVmaW5lIFNEMV9QSFlTX0FERFIJCTB4MTA2ODAwMDAKLSNkZWZpbmUJSUMxX1BIWVNfQUREUgkJMHgxMTgwMDAwMAotI2RlZmluZQlBQzk3X1BIWVNfQUREUgkJMHgxMDAwMDAwMAogI2RlZmluZQlVU0JIX1BIWVNfQUREUgkJMHgxMDEwMDAwMAotI2RlZmluZQlVU0JEX1BIWVNfQUREUgkJMHgxMDIwMDAwMAogI2RlZmluZQlJUkRBX1BIWVNfQUREUgkJMHgxMDMwMDAwMAotI2RlZmluZQlNQUMwX1BIWVNfQUREUgkJMHgxMDUwMDAwMAotI2RlZmluZQlNQUNFTl9QSFlTX0FERFIJCTB4MTA1MjAwMDAKLSNkZWZpbmUJTUFDRE1BMF9QSFlTX0FERFIJMHgxNDAwNDAwMAotI2RlZmluZQlNQUNETUExX1BIWVNfQUREUgkweDE0MDA0MjAwCi0jZGVmaW5lCUkyU19QSFlTX0FERFIJCTB4MTEwMDAwMDAKLSNkZWZpbmUJVUFSVDBfUEhZU19BRERSCQkweDExMTAwMDAwCi0jZGVmaW5lCVVBUlQxX1BIWVNfQUREUgkJMHgxMTIwMDAwMAotI2RlZmluZQlVQVJUM19QSFlTX0FERFIJCTB4MTE0MDAwMDAKICNkZWZpbmUJU1NJMF9QSFlTX0FERFIJCTB4MTE2MDAwMDAKICNkZWZpbmUJU1NJMV9QSFlTX0FERFIJCTB4MTE2ODAwMDAKLSNkZWZpbmUgR1BJTzJfUEhZU19BRERSCQkweDExNzAwMDAwCi0jZGVmaW5lCVNZU19QSFlTX0FERFIJCTB4MTE5MDAwMDAKICNkZWZpbmUgTENEX1BIWVNfQUREUgkJMHgxNTAwMDAwMAogI2RlZmluZSBQQ01DSUFfSU9fUEhZU19BRERSCTB4RjAwMDAwMDAwVUxMCiAjZGVmaW5lIFBDTUNJQV9BVFRSX1BIWVNfQUREUgkweEY0MDAwMDAwMFVMTApAQCAtNzQ5LDIyICs3NjAsOCBAQAogI2lmZGVmIENPTkZJR19TT0NfQVUxNTUwCiAjZGVmaW5lCU1FTV9QSFlTX0FERFIJCTB4MTQwMDAwMDAKICNkZWZpbmUJU1RBVElDX01FTV9QSFlTX0FERFIJMHgxNDAwMTAwMAotI2RlZmluZQlJQzBfUEhZU19BRERSCQkweDEwNDAwMDAwCi0jZGVmaW5lCUlDMV9QSFlTX0FERFIJCTB4MTE4MDAwMDAKICNkZWZpbmUJVVNCSF9QSFlTX0FERFIJCTB4MTQwMjAwMDAKLSNkZWZpbmUJVVNCRF9QSFlTX0FERFIJCTB4MTAyMDAwMDAKICNkZWZpbmUgUENJX1BIWVNfQUREUgkJMHgxNDAwNTAwMAotI2RlZmluZQlNQUMwX1BIWVNfQUREUgkJMHgxMDUwMDAwMAotI2RlZmluZQlNQUMxX1BIWVNfQUREUgkJMHgxMDUxMDAwMAotI2RlZmluZQlNQUNFTl9QSFlTX0FERFIJCTB4MTA1MjAwMDAKLSNkZWZpbmUJTUFDRE1BMF9QSFlTX0FERFIJMHgxNDAwNDAwMAotI2RlZmluZQlNQUNETUExX1BIWVNfQUREUgkweDE0MDA0MjAwCi0jZGVmaW5lCVVBUlQwX1BIWVNfQUREUgkJMHgxMTEwMDAwMAotI2RlZmluZQlVQVJUMV9QSFlTX0FERFIJCTB4MTEyMDAwMDAKLSNkZWZpbmUJVUFSVDNfUEhZU19BRERSCQkweDExNDAwMDAwCi0jZGVmaW5lIEdQSU8yX1BIWVNfQUREUgkJMHgxMTcwMDAwMAotI2RlZmluZQlTWVNfUEhZU19BRERSCQkweDExOTAwMDAwCi0jZGVmaW5lCURETUFfUEhZU19BRERSCQkweDE0MDAyMDAwCiAjZGVmaW5lIFBFX1BIWVNfQUREUgkJMHgxNDAwODAwMAogI2RlZmluZSBQU0MwX1BIWVNfQUREUgkJMHgxMUEwMDAwMAogI2RlZmluZSBQU0MxX1BIWVNfQUREUgkJMHgxMUIwMDAwMApAQCAtNzg2LDE5ICs3ODMsMTAgQEAKICNkZWZpbmUJU1RBVElDX01FTV9QSFlTX0FERFIJMHgxNDAwMTAwMAogI2RlZmluZSBBRVNfUEhZU19BRERSCQkweDEwMzAwMDAwCiAjZGVmaW5lIENJTV9QSFlTX0FERFIJCTB4MTQwMDQwMDAKLSNkZWZpbmUJSUMwX1BIWVNfQUREUgkJMHgxMDQwMDAwMAotI2RlZmluZQlJQzFfUEhZU19BRERSCQkweDExODAwMDAwCiAjZGVmaW5lIFVTQk1fUEhZU19BRERSCQkweDE0MDIwMDAwCiAjZGVmaW5lCVVTQkhfUEhZU19BRERSCQkweDE0MDIwMTAwCi0jZGVmaW5lCVVBUlQwX1BIWVNfQUREUgkJMHgxMTEwMDAwMAotI2RlZmluZQlVQVJUMV9QSFlTX0FERFIJCTB4MTEyMDAwMDAKLSNkZWZpbmUgR1BJTzJfUEhZU19BRERSCQkweDExNzAwMDAwCi0jZGVmaW5lCVNZU19QSFlTX0FERFIJCTB4MTE5MDAwMDAKLSNkZWZpbmUJRERNQV9QSFlTX0FERFIJCTB4MTQwMDIwMDAKICNkZWZpbmUgUFNDMF9QSFlTX0FERFIJIAkweDExQTAwMDAwCiAjZGVmaW5lIFBTQzFfUEhZU19BRERSCSAJMHgxMUIwMDAwMAotI2RlZmluZSBTRDBfUEhZU19BRERSCQkweDEwNjAwMDAwCi0jZGVmaW5lIFNEMV9QSFlTX0FERFIJCTB4MTA2ODAwMDAKICNkZWZpbmUgTENEX1BIWVNfQUREUgkJMHgxNTAwMDAwMAogI2RlZmluZSBTV0NOVF9QSFlTX0FERFIJCTB4MTExMDAxMEMKICNkZWZpbmUgTUFFRkVfUEhZU19BRERSCQkweDE0MDEyMDAwCkBAIC04MzUsMTgzICs4MjMsNDMgQEAKICNlbmRpZgogCiAKLS8qIEludGVycnVwdCBDb250cm9sbGVyIHJlZ2lzdGVyIG9mZnNldHMgKi8KLSNkZWZpbmUgSUNfQ0ZHMFJECQkweDQwCi0jZGVmaW5lIElDX0NGRzBTRVQJCTB4NDAKLSNkZWZpbmUgSUNfQ0ZHMENMUgkJMHg0NAotI2RlZmluZSBJQ19DRkcxUkQJCTB4NDgKLSNkZWZpbmUgSUNfQ0ZHMVNFVAkJMHg0OAotI2RlZmluZSBJQ19DRkcxQ0xSCQkweDRDCi0jZGVmaW5lIElDX0NGRzJSRAkJMHg1MAotI2RlZmluZSBJQ19DRkcyU0VUCQkweDUwCi0jZGVmaW5lIElDX0NGRzJDTFIJCTB4NTQKLSNkZWZpbmUgSUNfUkVRMElOVAkJMHg1NAotI2RlZmluZSBJQ19TUkNSRAkJMHg1OAotI2RlZmluZSBJQ19TUkNTRVQJCTB4NTgKLSNkZWZpbmUgSUNfU1JDQ0xSCQkweDVDCi0jZGVmaW5lIElDX1JFUTFJTlQJCTB4NUMKLSNkZWZpbmUgSUNfQVNTSUdOUkQJCTB4NjAKLSNkZWZpbmUgSUNfQVNTSUdOU0VUCQkweDYwCi0jZGVmaW5lIElDX0FTU0lHTkNMUgkJMHg2NAotI2RlZmluZSBJQ19XQUtFUkQJCTB4NjgKLSNkZWZpbmUgSUNfV0FLRVNFVAkJMHg2OAotI2RlZmluZSBJQ19XQUtFQ0xSCQkweDZDCi0jZGVmaW5lIElDX01BU0tSRAkJMHg3MAotI2RlZmluZSBJQ19NQVNLU0VUCQkweDcwCi0jZGVmaW5lIElDX01BU0tDTFIJCTB4NzQKLSNkZWZpbmUgSUNfUklTSU5HUkQJCTB4NzgKLSNkZWZpbmUgSUNfUklTSU5HQ0xSCQkweDc4Ci0jZGVmaW5lIElDX0ZBTExJTkdSRAkJMHg3QwotI2RlZmluZSBJQ19GQUxMSU5HQ0xSCQkweDdDCi0jZGVmaW5lIElDX1RFU1RCSVQJCTB4ODAKLQotCi0vKiBJbnRlcnJ1cHQgQ29udHJvbGxlciAwICovCi0jZGVmaW5lIElDMF9DRkcwUkQJCTB4QjA0MDAwNDAKLSNkZWZpbmUgSUMwX0NGRzBTRVQJCTB4QjA0MDAwNDAKLSNkZWZpbmUgSUMwX0NGRzBDTFIJCTB4QjA0MDAwNDQKLQotI2RlZmluZSBJQzBfQ0ZHMVJECQkweEIwNDAwMDQ4Ci0jZGVmaW5lIElDMF9DRkcxU0VUCQkweEIwNDAwMDQ4Ci0jZGVmaW5lIElDMF9DRkcxQ0xSCQkweEIwNDAwMDRDCi0KLSNkZWZpbmUgSUMwX0NGRzJSRAkJMHhCMDQwMDA1MAotI2RlZmluZSBJQzBfQ0ZHMlNFVAkJMHhCMDQwMDA1MAotI2RlZmluZSBJQzBfQ0ZHMkNMUgkJMHhCMDQwMDA1NAotCi0jZGVmaW5lIElDMF9SRVEwSU5UCQkweEIwNDAwMDU0Ci0jZGVmaW5lIElDMF9TUkNSRAkJMHhCMDQwMDA1OAotI2RlZmluZSBJQzBfU1JDU0VUCQkweEIwNDAwMDU4Ci0jZGVmaW5lIElDMF9TUkNDTFIJCTB4QjA0MDAwNUMKLSNkZWZpbmUgSUMwX1JFUTFJTlQJCTB4QjA0MDAwNUMKLQotI2RlZmluZSBJQzBfQVNTSUdOUkQJCTB4QjA0MDAwNjAKLSNkZWZpbmUgSUMwX0FTU0lHTlNFVAkJMHhCMDQwMDA2MAotI2RlZmluZSBJQzBfQVNTSUdOQ0xSCQkweEIwNDAwMDY0Ci0KLSNkZWZpbmUgSUMwX1dBS0VSRAkJMHhCMDQwMDA2OAotI2RlZmluZSBJQzBfV0FLRVNFVAkJMHhCMDQwMDA2OAotI2RlZmluZSBJQzBfV0FLRUNMUgkJMHhCMDQwMDA2QwotCi0jZGVmaW5lIElDMF9NQVNLUkQJCTB4QjA0MDAwNzAKLSNkZWZpbmUgSUMwX01BU0tTRVQJCTB4QjA0MDAwNzAKLSNkZWZpbmUgSUMwX01BU0tDTFIJCTB4QjA0MDAwNzQKLQotI2RlZmluZSBJQzBfUklTSU5HUkQJCTB4QjA0MDAwNzgKLSNkZWZpbmUgSUMwX1JJU0lOR0NMUgkJMHhCMDQwMDA3OAotI2RlZmluZSBJQzBfRkFMTElOR1JECQkweEIwNDAwMDdDCi0jZGVmaW5lIElDMF9GQUxMSU5HQ0xSCQkweEIwNDAwMDdDCi0KLSNkZWZpbmUgSUMwX1RFU1RCSVQJCTB4QjA0MDAwODAKLQotLyogSW50ZXJydXB0IENvbnRyb2xsZXIgMSAqLwotI2RlZmluZSBJQzFfQ0ZHMFJECQkweEIxODAwMDQwCi0jZGVmaW5lIElDMV9DRkcwU0VUCQkweEIxODAwMDQwCi0jZGVmaW5lIElDMV9DRkcwQ0xSCQkweEIxODAwMDQ0Ci0KLSNkZWZpbmUgSUMxX0NGRzFSRAkJMHhCMTgwMDA0OAotI2RlZmluZSBJQzFfQ0ZHMVNFVAkJMHhCMTgwMDA0OAotI2RlZmluZSBJQzFfQ0ZHMUNMUgkJMHhCMTgwMDA0QwotCi0jZGVmaW5lIElDMV9DRkcyUkQJCTB4QjE4MDAwNTAKLSNkZWZpbmUgSUMxX0NGRzJTRVQJCTB4QjE4MDAwNTAKLSNkZWZpbmUgSUMxX0NGRzJDTFIJCTB4QjE4MDAwNTQKLQotI2RlZmluZSBJQzFfUkVRMElOVAkJMHhCMTgwMDA1NAotI2RlZmluZSBJQzFfU1JDUkQJCTB4QjE4MDAwNTgKLSNkZWZpbmUgSUMxX1NSQ1NFVAkJMHhCMTgwMDA1OAotI2RlZmluZSBJQzFfU1JDQ0xSCQkweEIxODAwMDVDCi0jZGVmaW5lIElDMV9SRVExSU5UCQkweEIxODAwMDVDCi0KLSNkZWZpbmUgSUMxX0FTU0lHTlJEICAgICAgICAgICAgMHhCMTgwMDA2MAotI2RlZmluZSBJQzFfQVNTSUdOU0VUICAgICAgICAgICAweEIxODAwMDYwCi0jZGVmaW5lIElDMV9BU1NJR05DTFIgICAgICAgICAgIDB4QjE4MDAwNjQKLQotI2RlZmluZSBJQzFfV0FLRVJECQkweEIxODAwMDY4Ci0jZGVmaW5lIElDMV9XQUtFU0VUCQkweEIxODAwMDY4Ci0jZGVmaW5lIElDMV9XQUtFQ0xSCQkweEIxODAwMDZDCi0KLSNkZWZpbmUgSUMxX01BU0tSRAkJMHhCMTgwMDA3MAotI2RlZmluZSBJQzFfTUFTS1NFVAkJMHhCMTgwMDA3MAotI2RlZmluZSBJQzFfTUFTS0NMUgkJMHhCMTgwMDA3NAotCi0jZGVmaW5lIElDMV9SSVNJTkdSRAkJMHhCMTgwMDA3OAotI2RlZmluZSBJQzFfUklTSU5HQ0xSCQkweEIxODAwMDc4Ci0jZGVmaW5lIElDMV9GQUxMSU5HUkQJCTB4QjE4MDAwN0MKLSNkZWZpbmUgSUMxX0ZBTExJTkdDTFIJCTB4QjE4MDAwN0MKLQotI2RlZmluZSBJQzFfVEVTVEJJVAkJMHhCMTgwMDA4MAogCiAKIC8qIEF1MTAwMCAqLwogI2lmZGVmIENPTkZJR19TT0NfQVUxMDAwCiAKLSNkZWZpbmUgVUFSVDBfQUREUgkJMHhCMTEwMDAwMAotI2RlZmluZSBVQVJUM19BRERSCQkweEIxNDAwMDAwCi0KICNkZWZpbmUgVVNCX09IQ0lfQkFTRQkJMHgxMDEwMDAwMAkvKiBwaHlzIGFkZHIgZm9yIGlvcmVtYXAgKi8KICNkZWZpbmUgVVNCX0hPU1RfQ09ORklHIAkweEIwMTdGRkZDCiAjZGVmaW5lIEZPUl9QTEFURk9STV9DX1VTQl9IT1NUX0lOVCBBVTEwMDBfVVNCX0hPU1RfSU5UCi0KLSNkZWZpbmUgQVUxMDAwX0VUSDBfQkFTRQkweEIwNTAwMDAwCi0jZGVmaW5lIEFVMTAwMF9FVEgxX0JBU0UJMHhCMDUxMDAwMAotI2RlZmluZSBBVTEwMDBfTUFDMF9FTkFCTEUJMHhCMDUyMDAwMAotI2RlZmluZSBBVTEwMDBfTUFDMV9FTkFCTEUJMHhCMDUyMDAwNAotI2RlZmluZSBOVU1fRVRIX0lOVEVSRkFDRVMgMgogI2VuZGlmIC8qIENPTkZJR19TT0NfQVUxMDAwICovCiAKIC8qIEF1MTUwMCAqLwogI2lmZGVmIENPTkZJR19TT0NfQVUxNTAwCiAKLSNkZWZpbmUgVUFSVDBfQUREUgkJMHhCMTEwMDAwMAotI2RlZmluZSBVQVJUM19BRERSCQkweEIxNDAwMDAwCi0KICNkZWZpbmUgVVNCX09IQ0lfQkFTRQkJMHgxMDEwMDAwMAkvKiBwaHlzIGFkZHIgZm9yIGlvcmVtYXAgKi8KICNkZWZpbmUgVVNCX0hPU1RfQ09ORklHIAkweEIwMTdmZmZjCiAjZGVmaW5lIEZPUl9QTEFURk9STV9DX1VTQl9IT1NUX0lOVCBBVTE1MDBfVVNCX0hPU1RfSU5UCi0KLSNkZWZpbmUgQVUxNTAwX0VUSDBfQkFTRQkweEIxNTAwMDAwCi0jZGVmaW5lIEFVMTUwMF9FVEgxX0JBU0UJMHhCMTUxMDAwMAotI2RlZmluZSBBVTE1MDBfTUFDMF9FTkFCTEUJMHhCMTUyMDAwMAotI2RlZmluZSBBVTE1MDBfTUFDMV9FTkFCTEUJMHhCMTUyMDAwNAotI2RlZmluZSBOVU1fRVRIX0lOVEVSRkFDRVMgMgogI2VuZGlmIC8qIENPTkZJR19TT0NfQVUxNTAwICovCiAKIC8qIEF1MTEwMCAqLwogI2lmZGVmIENPTkZJR19TT0NfQVUxMTAwCiAKLSNkZWZpbmUgVUFSVDBfQUREUgkJMHhCMTEwMDAwMAotI2RlZmluZSBVQVJUM19BRERSCQkweEIxNDAwMDAwCi0KICNkZWZpbmUgVVNCX09IQ0lfQkFTRQkJMHgxMDEwMDAwMAkvKiBwaHlzIGFkZHIgZm9yIGlvcmVtYXAgKi8KICNkZWZpbmUgVVNCX0hPU1RfQ09ORklHIAkweEIwMTdGRkZDCiAjZGVmaW5lIEZPUl9QTEFURk9STV9DX1VTQl9IT1NUX0lOVCBBVTExMDBfVVNCX0hPU1RfSU5UCi0KLSNkZWZpbmUgQVUxMTAwX0VUSDBfQkFTRQkweEIwNTAwMDAwCi0jZGVmaW5lIEFVMTEwMF9NQUMwX0VOQUJMRQkweEIwNTIwMDAwCi0jZGVmaW5lIE5VTV9FVEhfSU5URVJGQUNFUyAxCiAjZW5kaWYgLyogQ09ORklHX1NPQ19BVTExMDAgKi8KIAogI2lmZGVmIENPTkZJR19TT0NfQVUxNTUwCi0jZGVmaW5lIFVBUlQwX0FERFIJCTB4QjExMDAwMDAKIAogI2RlZmluZSBVU0JfT0hDSV9CQVNFCQkweDE0MDIwMDAwCS8qIHBoeXMgYWRkciBmb3IgaW9yZW1hcCAqLwogI2RlZmluZSBVU0JfT0hDSV9MRU4JCTB4MDAwNjAwMDAKICNkZWZpbmUgVVNCX0hPU1RfQ09ORklHIAkweEI0MDI3ZmZjCiAjZGVmaW5lIEZPUl9QTEFURk9STV9DX1VTQl9IT1NUX0lOVCBBVTE1NTBfVVNCX0hPU1RfSU5UCi0KLSNkZWZpbmUgQVUxNTUwX0VUSDBfQkFTRQkweEIwNTAwMDAwCi0jZGVmaW5lIEFVMTU1MF9FVEgxX0JBU0UJMHhCMDUxMDAwMAotI2RlZmluZSBBVTE1NTBfTUFDMF9FTkFCTEUJMHhCMDUyMDAwMAotI2RlZmluZSBBVTE1NTBfTUFDMV9FTkFCTEUJMHhCMDUyMDAwNAotI2RlZmluZSBOVU1fRVRIX0lOVEVSRkFDRVMgMgogI2VuZGlmIC8qIENPTkZJR19TT0NfQVUxNTUwICovCiAKIAogI2lmZGVmIENPTkZJR19TT0NfQVUxMjAwCiAKLSNkZWZpbmUgVUFSVDBfQUREUgkJMHhCMTEwMDAwMAotCiAjZGVmaW5lIFVTQl9VT0NfQkFTRQkJMHgxNDAyMDAyMAogI2RlZmluZSBVU0JfVU9DX0xFTgkJMHgyMAogI2RlZmluZSBVU0JfT0hDSV9CQVNFCQkweDE0MDIwMTAwCkBAIC0xNTA0LDIyICsxMzUyLDYgQEAKICNkZWZpbmUgU1lTX1BJTkZVTkNfUzFCIAkoMSA8PCAyKQogI2VuZGlmCiAKLSNkZWZpbmUgU1lTX1RSSU9VVFJECQkweEIxOTAwMTAwCi0jZGVmaW5lIFNZU19UUklPVVRDTFIJCTB4QjE5MDAxMDAKLSNkZWZpbmUgU1lTX09VVFBVVFJECQkweEIxOTAwMTA4Ci0jZGVmaW5lIFNZU19PVVRQVVRTRVQJCTB4QjE5MDAxMDgKLSNkZWZpbmUgU1lTX09VVFBVVENMUgkJMHhCMTkwMDEwQwotI2RlZmluZSBTWVNfUElOU1RBVEVSRAkJMHhCMTkwMDExMAotI2RlZmluZSBTWVNfUElOSU5QVVRFTgkJMHhCMTkwMDExMAotCi0vKiBHUElPMiwgQXUxNTAwLCBBdTE1NTAgb25seSAqLwotI2RlZmluZSBHUElPMl9CQVNFCQkweEIxNzAwMDAwCi0jZGVmaW5lIEdQSU8yX0RJUgkJKEdQSU8yX0JBU0UgKyAwKQotI2RlZmluZSBHUElPMl9PVVRQVVQJCShHUElPMl9CQVNFICsgOCkKLSNkZWZpbmUgR1BJTzJfUElOU1RBVEUJCShHUElPMl9CQVNFICsgMHhDKQotI2RlZmluZSBHUElPMl9JTlRFTkFCTEUgCShHUElPMl9CQVNFICsgMHgxMCkKLSNkZWZpbmUgR1BJTzJfRU5BQkxFCQkoR1BJTzJfQkFTRSArIDB4MTQpCi0KIC8qIFBvd2VyIE1hbmFnZW1lbnQgKi8KICNkZWZpbmUgU1lTX1NDUkFUQ0gwCQkweEIxOTAwMDE4CiAjZGVmaW5lIFNZU19TQ1JBVENIMQkJMHhCMTkwMDAxQwpAQCAtMTYzNSwxMiArMTQ2Nyw2IEBACiAjICBkZWZpbmUgQUM5N0NfUlMJCSgxIDw8IDEpCiAjICBkZWZpbmUgQUM5N0NfQ0UJCSgxIDw8IDApCiAKLS8qIFNlY3VyZSBEaWdpdGFsIChTRCkgQ29udHJvbGxlciAqLwotI2RlZmluZSBTRDBfWE1JVF9GSUZPCTB4QjA2MDAwMDAKLSNkZWZpbmUgU0QwX1JFQ1ZfRklGTwkweEIwNjAwMDA0Ci0jZGVmaW5lIFNEMV9YTUlUX0ZJRk8JMHhCMDY4MDAwMAotI2RlZmluZSBTRDFfUkVDVl9GSUZPCTB4QjA2ODAwMDQKLQogI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BVTE1MDApIHx8IGRlZmluZWQoQ09ORklHX1NPQ19BVTE1NTApCiAvKiBBdTE1MDAgUENJIENvbnRyb2xsZXIgKi8KICNkZWZpbmUgQXUxNTAwX0NGR19CQVNFIAkweEI0MDA1MDAwCS8qIHZpcnR1YWwsIEtTRUcxIGFkZHIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTEwMDBfZG1hLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxMDAwX2RtYS5oCmluZGV4IGMzMzNiNGUuLjU5ZjViNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTEwMDBfZG1hLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MTAwMF9kbWEuaApAQCAtMzcsMTAgKzM3LDYgQEAKIAogI2RlZmluZSBOVU1fQVUxMDAwX0RNQV9DSEFOTkVMUwk4CiAKLS8qIERNQSBDaGFubmVsIEJhc2UgQWRkcmVzc2VzICovCi0jZGVmaW5lIERNQV9DSEFOTkVMX0JBU0UJMHhCNDAwMjAwMAotI2RlZmluZSBETUFfQ0hBTk5FTF9MRU4JCTB4MDAwMDAxMDAKLQogLyogRE1BIENoYW5uZWwgUmVnaXN0ZXIgT2Zmc2V0cyAqLwogI2RlZmluZSBETUFfTU9ERV9TRVQJCTB4MDAwMDAwMDAKICNkZWZpbmUgRE1BX01PREVfUkVBRAkJRE1BX01PREVfU0VUCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmgKaW5kZXggYzhhNTUzYTMuLjJmZGFjZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTF4eHhfZGJkbWEuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmgKQEAgLTM3LDE0ICszNyw2IEBACiAKICNpZm5kZWYgX0xBTkdVQUdFX0FTU0VNQkxZCiAKLS8qCi0gKiBUaGUgRE1BIGJhc2UgYWRkcmVzc2VzLgotICogVGhlIGNoYW5uZWxzIGFyZSBldmVyeSAyNTYgYnl0ZXMgKDB4MDEwMCkgZnJvbSB0aGUgY2hhbm5lbCAwIGJhc2UuCi0gKiBJbnRlcnJ1cHQgc3RhdHVzL2VuYWJsZSBpcyBiaXRzIDE1OjAgZm9yIGNoYW5uZWxzIDE1IHRvIHplcm8uCi0gKi8KLSNkZWZpbmUgRERNQV9HTE9CQUxfQkFTRQkweGI0MDAzMDAwCi0jZGVmaW5lIERETUFfQ0hBTk5FTF9CQVNFCTB4YjQwMDIwMDAKLQogdHlwZWRlZiB2b2xhdGlsZSBzdHJ1Y3QgZGJkbWFfZ2xvYmFsIHsKIAl1MzIJZGRtYV9jb25maWc7CiAJdTMyCWRkbWFfaW50c3RhdDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLWF1MTAwMC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8tYXUxMDAwLmgKaW5kZXggNjJkMmYxMy4uMWY0MWE1MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8tYXUxMDAwLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8tYXUxMDAwLmgKQEAgLTI0LDYgKzI0LDIzIEBACiAKICNkZWZpbmUgTUFLRV9JUlEoaW50Yywgb2ZmKQkoQVUxMDAwX0lOVEMjI2ludGMjI19JTlRfQkFTRSArIChvZmYpKQogCisvKiBHUElPMSByZWdpc3RlcnMgd2l0aGluIFNZU18gYXJlYSAqLworI2RlZmluZSBTWVNfVFJJT1VUUkQJCTB4MTAwCisjZGVmaW5lIFNZU19UUklPVVRDTFIJCTB4MTAwCisjZGVmaW5lIFNZU19PVVRQVVRSRAkJMHgxMDgKKyNkZWZpbmUgU1lTX09VVFBVVFNFVAkJMHgxMDgKKyNkZWZpbmUgU1lTX09VVFBVVENMUgkJMHgxMEMKKyNkZWZpbmUgU1lTX1BJTlNUQVRFUkQJCTB4MTEwCisjZGVmaW5lIFNZU19QSU5JTlBVVEVOCQkweDExMAorCisvKiByZWdpc3RlciBvZmZzZXRzIHdpdGhpbiBHUElPMiBibG9jayAqLworI2RlZmluZSBHUElPMl9ESVIJCTB4MDAKKyNkZWZpbmUgR1BJTzJfT1VUUFVUCQkweDA4CisjZGVmaW5lIEdQSU8yX1BJTlNUQVRFCQkweDBDCisjZGVmaW5lIEdQSU8yX0lOVEVOQUJMRQkJMHgxMAorI2RlZmluZSBHUElPMl9FTkFCTEUJCTB4MTQKKworc3RydWN0IGdwaW87CiAKIHN0YXRpYyBpbmxpbmUgaW50IGF1MTAwMF9ncGlvMV90b19pcnEoaW50IGdwaW8pCiB7CkBAIC0yMDAsMjMgKzIxNywyNiBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgYWxjaGVteV9ncGlvMV9zZXRfdmFsdWUoaW50IGdwaW8sIGludCB2KQogeworCXZvaWQgX19pb21lbSAqYmFzZSA9ICh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVUxMDAwX1NZU19QSFlTX0FERFIpOwogCXVuc2lnbmVkIGxvbmcgbWFzayA9IDEgPDwgKGdwaW8gLSBBTENIRU1ZX0dQSU8xX0JBU0UpOwogCXVuc2lnbmVkIGxvbmcgciA9IHYgPyBTWVNfT1VUUFVUU0VUIDogU1lTX09VVFBVVENMUjsKLQlhdV93cml0ZWwobWFzaywgcik7Ci0JYXVfc3luYygpOworCV9fcmF3X3dyaXRlbChtYXNrLCBiYXNlICsgcik7CisJd21iKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGFsY2hlbXlfZ3BpbzFfZ2V0X3ZhbHVlKGludCBncGlvKQogeworCXZvaWQgX19pb21lbSAqYmFzZSA9ICh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVUxMDAwX1NZU19QSFlTX0FERFIpOwogCXVuc2lnbmVkIGxvbmcgbWFzayA9IDEgPDwgKGdwaW8gLSBBTENIRU1ZX0dQSU8xX0JBU0UpOwotCXJldHVybiBhdV9yZWFkbChTWVNfUElOU1RBVEVSRCkgJiBtYXNrOworCXJldHVybiBfX3Jhd19yZWFkbChiYXNlICsgU1lTX1BJTlNUQVRFUkQpICYgbWFzazsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgYWxjaGVteV9ncGlvMV9kaXJlY3Rpb25faW5wdXQoaW50IGdwaW8pCiB7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBVTEwMDBfU1lTX1BIWVNfQUREUik7CiAJdW5zaWduZWQgbG9uZyBtYXNrID0gMSA8PCAoZ3BpbyAtIEFMQ0hFTVlfR1BJTzFfQkFTRSk7Ci0JYXVfd3JpdGVsKG1hc2ssIFNZU19UUklPVVRDTFIpOwotCWF1X3N5bmMoKTsKKwlfX3Jhd193cml0ZWwobWFzaywgYmFzZSArIFNZU19UUklPVVRDTFIpOworCXdtYigpOwogCXJldHVybiAwOwogfQogCkBAIC0yNTcsMjcgKzI3NywzMSBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgX19hbGNoZW15X2dwaW8yX21vZF9kaXIoaW50IGdwaW8sIGludCB0b19vdXQpCiB7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBVTE1MDBfR1BJTzJfUEhZU19BRERSKTsKIAl1bnNpZ25lZCBsb25nIG1hc2sgPSAxIDw8IChncGlvIC0gQUxDSEVNWV9HUElPMl9CQVNFKTsKLQl1bnNpZ25lZCBsb25nIGQgPSBhdV9yZWFkbChHUElPMl9ESVIpOworCXVuc2lnbmVkIGxvbmcgZCA9IF9fcmF3X3JlYWRsKGJhc2UgKyBHUElPMl9ESVIpOworCiAJaWYgKHRvX291dCkKIAkJZCB8PSBtYXNrOwogCWVsc2UKIAkJZCAmPSB+bWFzazsKLQlhdV93cml0ZWwoZCwgR1BJTzJfRElSKTsKLQlhdV9zeW5jKCk7CisJX19yYXdfd3JpdGVsKGQsIGJhc2UgKyBHUElPMl9ESVIpOworCXdtYigpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWxjaGVteV9ncGlvMl9zZXRfdmFsdWUoaW50IGdwaW8sIGludCB2KQogeworCXZvaWQgX19pb21lbSAqYmFzZSA9ICh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVUxNTAwX0dQSU8yX1BIWVNfQUREUik7CiAJdW5zaWduZWQgbG9uZyBtYXNrOwogCW1hc2sgPSAoKHYpID8gMHgwMDAxMDAwMSA6IDB4MDAwMTAwMDApIDw8IChncGlvIC0gQUxDSEVNWV9HUElPMl9CQVNFKTsKLQlhdV93cml0ZWwobWFzaywgR1BJTzJfT1VUUFVUKTsKLQlhdV9zeW5jKCk7CisJX19yYXdfd3JpdGVsKG1hc2ssIGJhc2UgKyBHUElPMl9PVVRQVVQpOworCXdtYigpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBhbGNoZW15X2dwaW8yX2dldF92YWx1ZShpbnQgZ3BpbykKIHsKLQlyZXR1cm4gYXVfcmVhZGwoR1BJTzJfUElOU1RBVEUpICYgKDEgPDwgKGdwaW8gLSBBTENIRU1ZX0dQSU8yX0JBU0UpKTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSAodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKEFVMTUwMF9HUElPMl9QSFlTX0FERFIpOworCXJldHVybiBfX3Jhd19yZWFkbChiYXNlICsgR1BJTzJfUElOU1RBVEUpICYgKDEgPDwgKGdwaW8gLSBBTENIRU1ZX0dQSU8yX0JBU0UpKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgYWxjaGVteV9ncGlvMl9kaXJlY3Rpb25faW5wdXQoaW50IGdwaW8pCkBAIC0zMjksMjEgKzM1MywyMyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgYWxjaGVteV9ncGlvMV9pbnB1dF9lbmFibGUodm9pZCkKIHsKLQlhdV93cml0ZWwoMCwgU1lTX1BJTklOUFVURU4pOwkvKiB0aGUgd3JpdGUgb3AgaXMga2V5ICovCi0JYXVfc3luYygpOworCXZvaWQgX19pb21lbSAqYmFzZSA9ICh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVUxMDAwX1NZU19QSFlTX0FERFIpOworCV9fcmF3X3dyaXRlbCgwLCBiYXNlICsgU1lTX1BJTklOUFVURU4pOwkvKiB0aGUgd3JpdGUgb3AgaXMga2V5ICovCisJd21iKCk7CiB9CiAKIC8qIEdQSU8yIHNoYXJlZCBpbnRlcnJ1cHRzIGFuZCBjb250cm9sICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2FsY2hlbXlfZ3BpbzJfbW9kX2ludChpbnQgZ3BpbzIsIGludCBlbikKIHsKLQl1bnNpZ25lZCBsb25nIHIgPSBhdV9yZWFkbChHUElPMl9JTlRFTkFCTEUpOworCXZvaWQgX19pb21lbSAqYmFzZSA9ICh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVUxNTAwX0dQSU8yX1BIWVNfQUREUik7CisJdW5zaWduZWQgbG9uZyByID0gX19yYXdfcmVhZGwoYmFzZSArIEdQSU8yX0lOVEVOQUJMRSk7CiAJaWYgKGVuKQogCQlyIHw9IDEgPDwgZ3BpbzI7CiAJZWxzZQogCQlyICY9IH4oMSA8PCBncGlvMik7Ci0JYXVfd3JpdGVsKHIsIEdQSU8yX0lOVEVOQUJMRSk7Ci0JYXVfc3luYygpOworCV9fcmF3X3dyaXRlbChyLCBiYXNlICsgR1BJTzJfSU5URU5BQkxFKTsKKwl3bWIoKTsKIH0KIAogLyoqCkBAIC00MTgsMTAgKzQ0NCwxMSBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgYWxjaGVteV9ncGlvMl9lbmFibGUodm9pZCkKIHsKLQlhdV93cml0ZWwoMywgR1BJTzJfRU5BQkxFKTsJLyogcmVzZXQsIGNsb2NrIGVuYWJsZWQgKi8KLQlhdV9zeW5jKCk7Ci0JYXVfd3JpdGVsKDEsIEdQSU8yX0VOQUJMRSk7CS8qIGNsb2NrIGVuYWJsZWQgKi8KLQlhdV9zeW5jKCk7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBVTE1MDBfR1BJTzJfUEhZU19BRERSKTsKKwlfX3Jhd193cml0ZWwoMywgYmFzZSArIEdQSU8yX0VOQUJMRSk7CS8qIHJlc2V0LCBjbG9jayBlbmFibGVkICovCisJd21iKCk7CisJX19yYXdfd3JpdGVsKDEsIGJhc2UgKyBHUElPMl9FTkFCTEUpOwkvKiBjbG9jayBlbmFibGVkICovCisJd21iKCk7CiB9CiAKIC8qKgpAQCAtNDMxLDggKzQ1OCw5IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBhbGNoZW15X2dwaW8yX2Rpc2FibGUodm9pZCkKIHsKLQlhdV93cml0ZWwoMiwgR1BJTzJfRU5BQkxFKTsJLyogcmVzZXQsIGNsb2NrIGRpc2FibGVkICovCi0JYXVfc3luYygpOworCXZvaWQgX19pb21lbSAqYmFzZSA9ICh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVUxNTAwX0dQSU8yX1BIWVNfQUREUik7CisJX19yYXdfd3JpdGVsKDIsIGJhc2UgKyBHUElPMl9FTkFCTEUpOwkvKiByZXNldCwgY2xvY2sgZGlzYWJsZWQgKi8KKwl3bWIoKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC01NTYsNiArNTg0LDE2IEBACiAJYWxjaGVteV9ncGlvX3NldF92YWx1ZShncGlvLCB2KTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAodW5zaWduZWQgZ3BpbykKK3sKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoZ3Bpbyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncGlvX3NldF92YWx1ZV9jYW5zbGVlcCh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCit7CisJZ3Bpb19zZXRfdmFsdWUoZ3BpbywgdmFsdWUpOworfQorCiBzdGF0aWMgaW5saW5lIGludCBncGlvX2lzX3ZhbGlkKGludCBncGlvKQogewogCXJldHVybiBhbGNoZW15X2dwaW9faXNfdmFsaWQoZ3Bpbyk7CkBAIC01ODEsMTAgKzYxOSw1MCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIGludCBncGlvX3JlcXVlc3Rfb25lKHVuc2lnbmVkIGdwaW8sCisJCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKmxhYmVsKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBncGlvX3JlcXVlc3RfYXJyYXkoc3RydWN0IGdwaW8gKmFycmF5LCBzaXplX3QgbnVtKQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pCiB7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBncGlvX2ZyZWVfYXJyYXkoc3RydWN0IGdwaW8gKmFycmF5LCBzaXplX3QgbnVtKQoreworfQorCitzdGF0aWMgaW5saW5lIGludCBncGlvX3NldF9kZWJvdW5jZSh1bnNpZ25lZCBncGlvLCB1bnNpZ25lZCBkZWJvdW5jZSkKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19leHBvcnQodW5zaWduZWQgZ3BpbywgYm9vbCBkaXJlY3Rpb25fbWF5X2NoYW5nZSkKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19leHBvcnRfbGluayhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgdW5zaWduZWQgZ3BpbykKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19zeXNmc19zZXRfYWN0aXZlX2xvdyh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncGlvX3VuZXhwb3J0KHVuc2lnbmVkIGdwaW8pCit7Cit9CisKICNlbmRpZgkvKiAhQ09ORklHX0FMQ0hFTVlfR1BJT19JTkRJUkVDVCAqLwogCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTQ3eHgvbnZyYW0uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTQ3eHgvbnZyYW0uaAppbmRleCA5NzU5NTg4Li4xODRkNWVjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY200N3h4L252cmFtLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNDd4eC9udnJhbS5oCkBAIC0zOSw4ICszOSwxNiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbnZyYW1fcGFyc2VfbWFjYWRkcihjaGFyICpidWYsIHU4ICptYWNhZGRyKQogewotCXNzY2FuZihidWYsICIlaGh4OiVoaHg6JWhoeDolaGh4OiVoaHg6JWhoeCIsICZtYWNhZGRyWzBdLCAmbWFjYWRkclsxXSwKLQkgICAgICAgJm1hY2FkZHJbMl0sICZtYWNhZGRyWzNdLCAmbWFjYWRkcls0XSwgJm1hY2FkZHJbNV0pOworCWlmIChzdHJjaHIoYnVmLCAnOicpKQorCQlzc2NhbmYoYnVmLCAiJWhoeDolaGh4OiVoaHg6JWhoeDolaGh4OiVoaHgiLCAmbWFjYWRkclswXSwKKwkJCSZtYWNhZGRyWzFdLCAmbWFjYWRkclsyXSwgJm1hY2FkZHJbM10sICZtYWNhZGRyWzRdLAorCQkJJm1hY2FkZHJbNV0pOworCWVsc2UgaWYgKHN0cmNocihidWYsICctJykpCisJCXNzY2FuZihidWYsICIlaGh4LSVoaHgtJWhoeC0laGh4LSVoaHgtJWhoeCIsICZtYWNhZGRyWzBdLAorCQkJJm1hY2FkZHJbMV0sICZtYWNhZGRyWzJdLCAmbWFjYWRkclszXSwgJm1hY2FkZHJbNF0sCisJCQkmbWFjYWRkcls1XSk7CisJZWxzZQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJDYW4gbm90IHBhcnNlIG1hYyBhZGRyZXNzOiAlc1xuIiwgYnVmKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY202M3h4L2JjbTk2M3h4X3RhZy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNjN4eC9iY205NjN4eF90YWcuaAppbmRleCAzMjk3OGQzLi5lZDcyZTZhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY202M3h4L2JjbTk2M3h4X3RhZy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTYzeHgvYmNtOTYzeHhfdGFnLmgKQEAgLTg4LDcgKzg4LDcgQEAKIAljaGFyIGtlcm5lbF9jcmNbQ1JDX0xFTl07CiAJLyogMjI4LTIzNTogVW51c2VkIGF0IHByZXNlbnQgKi8KIAljaGFyIHJlc2VydmVkMVs4XTsKLQkvKiAyMzYtMjM5OiBDUkMzMiBvZiBoZWFkZXIgZXhjbHVkaW5nIHRhZ1ZlcnNpb24gKi8KKwkvKiAyMzYtMjM5OiBDUkMzMiBvZiBoZWFkZXIgZXhjbHVkaW5nIGxhc3QgMjAgYnl0ZXMgKi8KIAljaGFyIGhlYWRlcl9jcmNbQ1JDX0xFTl07CiAJLyogMjQwLTI1NTogVW51c2VkIGF0IHByZXNlbnQgKi8KIAljaGFyIHJlc2VydmVkMlsxNl07CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1jYXZpdW0tb2N0ZW9uL2tlcm5lbC1lbnRyeS1pbml0LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1jYXZpdW0tb2N0ZW9uL2tlcm5lbC1lbnRyeS1pbml0LmgKaW5kZXggMGIyYjVlYi4uZGVkZWY3ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtY2F2aXVtLW9jdGVvbi9rZXJuZWwtZW50cnktaW5pdC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWNhdml1bS1vY3Rlb24va2VybmVsLWVudHJ5LWluaXQuaApAQCAtNjMsNiArNjMsMTEgQEAKIAkjIENOMzBYWCBEaXNhYmxlIGluc3RydWN0aW9uIHByZWZldGNoaW5nCiAJb3IgIHYwLCB2MCwgMHgyMDAwCiBza2lwOgorCSMgRmlyc3QgY2xlYXIgb2ZmIEN2bUN0bFtJUFBDSV0gYml0IGFuZCBtb3ZlIHRoZSBwZXJmb3JtYW5jZQorCSMgY291bnRlcnMgaW50ZXJydXB0IHRvIElSUSA2CisJbGkJdjEsIH4oNyA8PCA3KQorCWFuZAl2MCwgdjAsIHYxCisJb3JpCXYwLCB2MCwgKDYgPDwgNykKIAkjIFdyaXRlIHRoZSBjYXZpdW0gY29udHJvbCByZWdpc3RlcgogCWRtdGMwICAgdjAsIENQMF9DVk1DVExfUkVHCiAJc3luYwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbGFudGlxL2xhbnRpcS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbGFudGlxL2xhbnRpcS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMmYwMjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sYW50aXEvbGFudGlxLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4KKyAqLworI2lmbmRlZiBfTEFOVElRX0hfXworI2RlZmluZSBfTEFOVElRX0hfXworCisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisKKy8qIGdlbmVyaWMgcmVnIGFjY2VzcyBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgbHRxX3IzMihyZWcpCQlfX3Jhd19yZWFkbChyZWcpCisjZGVmaW5lIGx0cV93MzIodmFsLCByZWcpCV9fcmF3X3dyaXRlbCh2YWwsIHJlZykKKyNkZWZpbmUgbHRxX3czMl9tYXNrKGNsZWFyLCBzZXQsIHJlZykJXAorCWx0cV93MzIoKGx0cV9yMzIocmVnKSAmIH4oY2xlYXIpKSB8IChzZXQpLCByZWcpCisjZGVmaW5lIGx0cV9yOChyZWcpCQlfX3Jhd19yZWFkYihyZWcpCisjZGVmaW5lIGx0cV93OCh2YWwsIHJlZykJX19yYXdfd3JpdGViKHZhbCwgcmVnKQorCisvKiByZWdpc3RlciBhY2Nlc3MgbWFjcm9zIGZvciBFQlUgYW5kIENHVSAqLworI2RlZmluZSBsdHFfZWJ1X3czMih4LCB5KQlsdHFfdzMyKCh4KSwgbHRxX2VidV9tZW1iYXNlICsgKHkpKQorI2RlZmluZSBsdHFfZWJ1X3IzMih4KQkJbHRxX3IzMihsdHFfZWJ1X21lbWJhc2UgKyAoeCkpCisjZGVmaW5lIGx0cV9jZ3VfdzMyKHgsIHkpCWx0cV93MzIoKHgpLCBsdHFfY2d1X21lbWJhc2UgKyAoeSkpCisjZGVmaW5lIGx0cV9jZ3VfcjMyKHgpCQlsdHFfcjMyKGx0cV9jZ3VfbWVtYmFzZSArICh4KSkKKworZXh0ZXJuIF9faW9tZW0gdm9pZCAqbHRxX2VidV9tZW1iYXNlOworZXh0ZXJuIF9faW9tZW0gdm9pZCAqbHRxX2NndV9tZW1iYXNlOworCitleHRlcm4gdW5zaWduZWQgaW50IGx0cV9nZXRfY3B1X3Zlcih2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgbHRxX2dldF9zb2NfdHlwZSh2b2lkKTsKKworLyogY2xvY2sgc3BlZWRzICovCisjZGVmaW5lIENMT0NLXzYwTQk2MDAwMDAwMAorI2RlZmluZSBDTE9DS184M00JODMzMzMzMzMKKyNkZWZpbmUgQ0xPQ0tfMTExTQkxMTExMTExMTEKKyNkZWZpbmUgQ0xPQ0tfMTMzTQkxMzMzMzMzMzMKKyNkZWZpbmUgQ0xPQ0tfMTY3TQkxNjY2NjY2NjcKKyNkZWZpbmUgQ0xPQ0tfMjAwTQkyMDAwMDAwMDAKKyNkZWZpbmUgQ0xPQ0tfMjY2TQkyNjY2NjY2NjYKKyNkZWZpbmUgQ0xPQ0tfMzMzTQkzMzMzMzMzMzMKKyNkZWZpbmUgQ0xPQ0tfNDAwTQk0MDAwMDAwMDAKKworLyogc3BpbmxvY2sgYWxsIGVidSBpL28gKi8KK2V4dGVybiBzcGlubG9ja190IGVidV9sb2NrOworCisvKiBzb21lIGlycSBoZWxwZXJzICovCitleHRlcm4gdm9pZCBsdHFfZGlzYWJsZV9pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKTsKK2V4dGVybiB2b2lkIGx0cV9tYXNrX2FuZF9hY2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSk7CitleHRlcm4gdm9pZCBsdHFfZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpOworCisvKiBmaW5kIG91dCB3aGF0IGNhdXNlZCB0aGUgbGFzdCBjcHUgcmVzZXQgKi8KK2V4dGVybiBpbnQgbHRxX3Jlc2V0X2NhdXNlKHZvaWQpOworI2RlZmluZSBMVFFfUlNUX0NBVVNFX1dEVFJTVAkweDIwCisKKyNkZWZpbmUgSU9QT1JUX1JFU09VUkNFX1NUQVJUCTB4MTAwMDAwMDAKKyNkZWZpbmUgSU9QT1JUX1JFU09VUkNFX0VORAkweGZmZmZmZmZmCisjZGVmaW5lIElPTUVNX1JFU09VUkNFX1NUQVJUCTB4MTAwMDAwMDAKKyNkZWZpbmUgSU9NRU1fUkVTT1VSQ0VfRU5ECTB4ZmZmZmZmZmYKKyNkZWZpbmUgTFRRX0ZMQVNIX1NUQVJUCQkweDEwMDAwMDAwCisjZGVmaW5lIExUUV9GTEFTSF9NQVgJCTB4MDQwMDAwMDAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sYW50aXEvbGFudGlxX3BsYXRmb3JtLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sYW50aXEvbGFudGlxX3BsYXRmb3JtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMwNWYxZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxhbnRpcS9sYW50aXFfcGxhdGZvcm0uaApAQCAtMCwwICsxLDUzIEBACisvKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICovCisKKyNpZm5kZWYgX0xBTlRJUV9QTEFURk9STV9IX18KKyNkZWZpbmUgX0xBTlRJUV9QTEFURk9STV9IX18KKworI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CisKKy8qIHN0cnVjdCB1c2VkIHRvIHBhc3MgaW5mbyB0byB0aGUgcGNpIGNvcmUgKi8KK2VudW0geworCVBDSV9DTE9DS19JTlQgPSAwLAorCVBDSV9DTE9DS19FWFQKK307CisKKyNkZWZpbmUgUENJX0VYSU4wCTB4MDAwMQorI2RlZmluZSBQQ0lfRVhJTjEJMHgwMDAyCisjZGVmaW5lIFBDSV9FWElOMgkweDAwMDQKKyNkZWZpbmUgUENJX0VYSU4zCTB4MDAwOAorI2RlZmluZSBQQ0lfRVhJTjQJMHgwMDEwCisjZGVmaW5lIFBDSV9FWElONQkweDAwMjAKKyNkZWZpbmUgUENJX0VYSU5fTUFYCTYKKworI2RlZmluZSBQQ0lfR05UMQkweDAwNDAKKyNkZWZpbmUgUENJX0dOVDIJMHgwMDgwCisjZGVmaW5lIFBDSV9HTlQzCTB4MDEwMAorI2RlZmluZSBQQ0lfR05UNAkweDAyMDAKKworI2RlZmluZSBQQ0lfUkVRMQkweDA0MDAKKyNkZWZpbmUgUENJX1JFUTIJMHgwODAwCisjZGVmaW5lIFBDSV9SRVEzCTB4MTAwMAorI2RlZmluZSBQQ0lfUkVRNAkweDIwMDAKKyNkZWZpbmUgUENJX1JFUV9TSElGVAkxMAorI2RlZmluZSBQQ0lfUkVRX01BU0sJMHhmCisKK3N0cnVjdCBsdHFfcGNpX2RhdGEgeworCWludCBjbG9jazsKKwlpbnQgZ3BpbzsKKwlpbnQgaXJxWzE2XTsKK307CisKKy8qIHN0cnVjdCB1c2VkIHRvIHBhc3MgaW5mbyB0byBuZXR3b3JrIGRyaXZlcnMgKi8KK3N0cnVjdCBsdHFfZXRoX2RhdGEgeworCXN0cnVjdCBzb2NrYWRkciBtYWM7CisJaW50IG1paV9tb2RlOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sYW50aXEvd2FyLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sYW50aXEvd2FyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFiMDhlZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxhbnRpcS93YXIuaApAQCAtMCwwICsxLDI0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisjaWZuZGVmIF9fQVNNX01JUFNfTUFDSF9MQU5USVFfV0FSX0gKKyNkZWZpbmUgX19BU01fTUlQU19NQUNIX0xBTlRJUV9XQVJfSAorCisjZGVmaW5lIFI0NjAwX1YxX0lOREVYX0lDQUNIRU9QX1dBUiAgICAgMAorI2RlZmluZSBSNDYwMF9WMV9ISVRfQ0FDSEVPUF9XQVIgICAgICAgIDAKKyNkZWZpbmUgUjQ2MDBfVjJfSElUX0NBQ0hFT1BfV0FSICAgICAgICAwCisjZGVmaW5lIFI1NDMyX0NQMF9JTlRFUlJVUFRfV0FSICAgICAgICAgMAorI2RlZmluZSBCQ00xMjUwX00zX1dBUiAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU0lCWVRFXzE5NTZfV0FSICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1JUFM0S19JQ0FDSEVfUkVGSUxMX1dBUiAgICAgICAgMAorI2RlZmluZSBNSVBTX0NBQ0hFX1NZTkNfV0FSICAgICAgICAgICAgIDAKKyNkZWZpbmUgVFg0OVhYX0lDQUNIRV9JTkRFWF9JTlZfV0FSICAgICAwCisjZGVmaW5lIFJNOTAwMF9DREVYX1NNUF9XQVIgICAgICAgICAgICAgMAorI2RlZmluZSBJQ0FDSEVfUkVGSUxMU19XT1JLQVJPVU5EX1dBUiAgIDAKKyNkZWZpbmUgUjEwMDAwX0xMU0NfV0FSICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1JUFMzNEtfTUlTU0VEX0lUTEJfV0FSICAgICAgICAgMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxhbnRpcS94d2F5L2lycS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbGFudGlxL3h3YXkvaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE0NzFkMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxhbnRpcS94d2F5L2lycS5oCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2lmbmRlZiBfX0xBTlRJUV9JUlFfSAorI2RlZmluZSBfX0xBTlRJUV9JUlFfSAorCisjaW5jbHVkZSA8bGFudGlxX2lycS5oPgorCisjZGVmaW5lIE5SX0lSUVMgMjU2CisKKyNpbmNsdWRlX25leHQgPGlycS5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxhbnRpcS94d2F5L2xhbnRpcV9pcnEuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxhbnRpcS94d2F5L2xhbnRpcV9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDQ2NWE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbGFudGlxL3h3YXkvbGFudGlxX2lycS5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2lmbmRlZiBfTEFOVElRX1hXQVlfSVJRX0hfXworI2RlZmluZSBfTEFOVElRX1hXQVlfSVJRX0hfXworCisjZGVmaW5lIElOVF9OVU1fSVJRMAkJOAorI2RlZmluZSBJTlRfTlVNX0lNMF9JUkwwCShJTlRfTlVNX0lSUTAgKyAwKQorI2RlZmluZSBJTlRfTlVNX0lNMV9JUkwwCShJTlRfTlVNX0lSUTAgKyAzMikKKyNkZWZpbmUgSU5UX05VTV9JTTJfSVJMMAkoSU5UX05VTV9JUlEwICsgNjQpCisjZGVmaW5lIElOVF9OVU1fSU0zX0lSTDAJKElOVF9OVU1fSVJRMCArIDk2KQorI2RlZmluZSBJTlRfTlVNX0lNNF9JUkwwCShJTlRfTlVNX0lSUTAgKyAxMjgpCisjZGVmaW5lIElOVF9OVU1fSU1fT0ZGU0VUCShJTlRfTlVNX0lNMV9JUkwwIC0gSU5UX05VTV9JTTBfSVJMMCkKKworI2RlZmluZSBMVFFfQVNDX1RJUih4KQkJKElOVF9OVU1fSU0zX0lSTDAgKyAoeCAqIDgpKQorI2RlZmluZSBMVFFfQVNDX1JJUih4KQkJKElOVF9OVU1fSU0zX0lSTDAgKyAoeCAqIDgpICsgMSkKKyNkZWZpbmUgTFRRX0FTQ19FSVIoeCkJCShJTlRfTlVNX0lNM19JUkwwICsgKHggKiA4KSArIDIpCisKKyNkZWZpbmUgTFRRX0FTQ19BU0VfVElSCQlJTlRfTlVNX0lNMl9JUkwwCisjZGVmaW5lIExUUV9BU0NfQVNFX1JJUgkJKElOVF9OVU1fSU0yX0lSTDAgKyAyKQorI2RlZmluZSBMVFFfQVNDX0FTRV9FSVIJCShJTlRfTlVNX0lNMl9JUkwwICsgMykKKworI2RlZmluZSBMVFFfU1NDX1RJUgkJKElOVF9OVU1fSU0wX0lSTDAgKyAxNSkKKyNkZWZpbmUgTFRRX1NTQ19SSVIJCShJTlRfTlVNX0lNMF9JUkwwICsgMTQpCisjZGVmaW5lIExUUV9TU0NfRUlSCQkoSU5UX05VTV9JTTBfSVJMMCArIDE2KQorCisjZGVmaW5lIExUUV9NRUlfRFlJTkdfR0FTUF9JTlQJKElOVF9OVU1fSU0xX0lSTDAgKyAyMSkKKyNkZWZpbmUgTFRRX01FSV9JTlQJCShJTlRfTlVNX0lNMV9JUkwwICsgMjMpCisKKyNkZWZpbmUgTFRRX1RJTUVSNl9JTlQJCShJTlRfTlVNX0lNMV9JUkwwICsgMjMpCisjZGVmaW5lIExUUV9VU0JfSU5UCQkoSU5UX05VTV9JTTFfSVJMMCArIDIyKQorI2RlZmluZSBMVFFfVVNCX09DX0lOVAkJKElOVF9OVU1fSU00X0lSTDAgKyAyMykKKworI2RlZmluZSBNSVBTX0NQVV9USU1FUl9JUlEJCTcKKworI2RlZmluZSBMVFFfRE1BX0NIMF9JTlQJCShJTlRfTlVNX0lNMl9JUkwwKQorI2RlZmluZSBMVFFfRE1BX0NIMV9JTlQJCShJTlRfTlVNX0lNMl9JUkwwICsgMSkKKyNkZWZpbmUgTFRRX0RNQV9DSDJfSU5UCQkoSU5UX05VTV9JTTJfSVJMMCArIDIpCisjZGVmaW5lIExUUV9ETUFfQ0gzX0lOVAkJKElOVF9OVU1fSU0yX0lSTDAgKyAzKQorI2RlZmluZSBMVFFfRE1BX0NINF9JTlQJCShJTlRfTlVNX0lNMl9JUkwwICsgNCkKKyNkZWZpbmUgTFRRX0RNQV9DSDVfSU5UCQkoSU5UX05VTV9JTTJfSVJMMCArIDUpCisjZGVmaW5lIExUUV9ETUFfQ0g2X0lOVAkJKElOVF9OVU1fSU0yX0lSTDAgKyA2KQorI2RlZmluZSBMVFFfRE1BX0NIN19JTlQJCShJTlRfTlVNX0lNMl9JUkwwICsgNykKKyNkZWZpbmUgTFRRX0RNQV9DSDhfSU5UCQkoSU5UX05VTV9JTTJfSVJMMCArIDgpCisjZGVmaW5lIExUUV9ETUFfQ0g5X0lOVAkJKElOVF9OVU1fSU0yX0lSTDAgKyA5KQorI2RlZmluZSBMVFFfRE1BX0NIMTBfSU5UCShJTlRfTlVNX0lNMl9JUkwwICsgMTApCisjZGVmaW5lIExUUV9ETUFfQ0gxMV9JTlQJKElOVF9OVU1fSU0yX0lSTDAgKyAxMSkKKyNkZWZpbmUgTFRRX0RNQV9DSDEyX0lOVAkoSU5UX05VTV9JTTJfSVJMMCArIDI1KQorI2RlZmluZSBMVFFfRE1BX0NIMTNfSU5UCShJTlRfTlVNX0lNMl9JUkwwICsgMjYpCisjZGVmaW5lIExUUV9ETUFfQ0gxNF9JTlQJKElOVF9OVU1fSU0yX0lSTDAgKyAyNykKKyNkZWZpbmUgTFRRX0RNQV9DSDE1X0lOVAkoSU5UX05VTV9JTTJfSVJMMCArIDI4KQorI2RlZmluZSBMVFFfRE1BX0NIMTZfSU5UCShJTlRfTlVNX0lNMl9JUkwwICsgMjkpCisjZGVmaW5lIExUUV9ETUFfQ0gxN19JTlQJKElOVF9OVU1fSU0yX0lSTDAgKyAzMCkKKyNkZWZpbmUgTFRRX0RNQV9DSDE4X0lOVAkoSU5UX05VTV9JTTJfSVJMMCArIDE2KQorI2RlZmluZSBMVFFfRE1BX0NIMTlfSU5UCShJTlRfTlVNX0lNMl9JUkwwICsgMjEpCisKKyNkZWZpbmUgTFRRX1BQRV9NQk9YX0lOVAkoSU5UX05VTV9JTTJfSVJMMCArIDI0KQorCisjZGVmaW5lIElOVF9OVU1fSU00X0lSTDE0CShJTlRfTlVNX0lNNF9JUkwwICsgMTQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbGFudGlxL3h3YXkvbGFudGlxX3NvYy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbGFudGlxL3h3YXkvbGFudGlxX3NvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhM2M2YmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sYW50aXEveHdheS9sYW50aXFfc29jLmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2lmbmRlZiBfTFRRX1hXQVlfSF9fCisjZGVmaW5lIF9MVFFfWFdBWV9IX18KKworI2lmZGVmIENPTkZJR19TT0NfVFlQRV9YV0FZCisKKyNpbmNsdWRlIDxsYW50aXEuaD4KKworLyogQ2hpcCBJRHMgKi8KKyNkZWZpbmUgU09DX0lEX0RBTlVCRTEJCTB4MTI5CisjZGVmaW5lIFNPQ19JRF9EQU5VQkUyCQkweDEyQgorI2RlZmluZSBTT0NfSURfVFdJTlBBU1MJCTB4MTJECisjZGVmaW5lIFNPQ19JRF9BTUFaT05fU0UJMHgxNTIKKyNkZWZpbmUgU09DX0lEX0FSWDE4OAkJMHgxNkMKKyNkZWZpbmUgU09DX0lEX0FSWDE2OAkJMHgxNkQKKyNkZWZpbmUgU09DX0lEX0FSWDE4MgkJMHgxNkYKKworLyogU29DIFR5cGVzICovCisjZGVmaW5lIFNPQ19UWVBFX0RBTlVCRQkJMHgwMQorI2RlZmluZSBTT0NfVFlQRV9UV0lOUEFTUwkweDAyCisjZGVmaW5lIFNPQ19UWVBFX0FSOQkJMHgwMworI2RlZmluZSBTT0NfVFlQRV9WUjkJCTB4MDQKKyNkZWZpbmUgU09DX1RZUEVfQU1BWk9OX1NFCTB4MDUKKworLyogQVNDMC8xIC0gc2VyaWFsIHBvcnQgKi8KKyNkZWZpbmUgTFRRX0FTQzBfQkFTRV9BRERSCTB4MUUxMDA0MDAKKyNkZWZpbmUgTFRRX0FTQzFfQkFTRV9BRERSCTB4MUUxMDBDMDAKKyNkZWZpbmUgTFRRX0FTQ19TSVpFCQkweDQwMAorCisvKiBSQ1UgLSByZXNldCBjb250cm9sIHVuaXQgKi8KKyNkZWZpbmUgTFRRX1JDVV9CQVNFX0FERFIJMHgxRjIwMzAwMAorI2RlZmluZSBMVFFfUkNVX1NJWkUJCTB4MTAwMAorCisvKiBHUFRVIC0gZ2VuZXJhbCBwdXJwb3NlIHRpbWVyIHVuaXQgKi8KKyNkZWZpbmUgTFRRX0dQVFVfQkFTRV9BRERSCTB4MTgwMDAzMDAKKyNkZWZpbmUgTFRRX0dQVFVfU0laRQkJMHgxMDAKKworLyogRUJVIC0gZXh0ZXJuYWwgYnVzIHVuaXQgKi8KKyNkZWZpbmUgTFRRX0VCVV9HUElPX1NUQVJUCTB4MTQwMDAwMDAKKyNkZWZpbmUgTFRRX0VCVV9HUElPX1NJWkUJMHgxMDAwCisKKyNkZWZpbmUgTFRRX0VCVV9CQVNFX0FERFIJMHgxRTEwNTMwMAorI2RlZmluZSBMVFFfRUJVX1NJWkUJCTB4MTAwCisKKyNkZWZpbmUgTFRRX0VCVV9CVVNDT04wCQkweDAwNjAKKyNkZWZpbmUgTFRRX0VCVV9QQ0NfQ09OCQkweDAwOTAKKyNkZWZpbmUgTFRRX0VCVV9QQ0NfSUVOCQkweDAwQTQKKyNkZWZpbmUgTFRRX0VCVV9QQ0NfSVNUQVQJMHgwMEEwCisjZGVmaW5lIExUUV9FQlVfQlVTQ09OMQkJMHgwMDY0CisjZGVmaW5lIExUUV9FQlVfQUREUlNFTDEJMHgwMDI0CisjZGVmaW5lIEVCVV9XUkRJUwkJMHg4MDAwMDAwMAorCisvKiBDR1UgLSBjbG9jayBnZW5lcmF0aW9uIHVuaXQgKi8KKyNkZWZpbmUgTFRRX0NHVV9CQVNFX0FERFIJMHgxRjEwMzAwMAorI2RlZmluZSBMVFFfQ0dVX1NJWkUJCTB4MTAwMAorCisvKiBJQ1UgLSBpbnRlcnJ1cHQgY29udHJvbCB1bml0ICovCisjZGVmaW5lIExUUV9JQ1VfQkFTRV9BRERSCTB4MUY4ODAyMDAKKyNkZWZpbmUgTFRRX0lDVV9TSVpFCQkweDEwMAorCisvKiBFSVUgLSBleHRlcm5hbCBpbnRlcnJ1cHQgdW5pdCAqLworI2RlZmluZSBMVFFfRUlVX0JBU0VfQUREUgkweDFGMTAxMDAwCisjZGVmaW5lIExUUV9FSVVfU0laRQkJMHgxMDAwCisKKy8qIFBNVSAtIHBvd2VyIG1hbmFnZW1lbnQgdW5pdCAqLworI2RlZmluZSBMVFFfUE1VX0JBU0VfQUREUgkweDFGMTAyMDAwCisjZGVmaW5lIExUUV9QTVVfU0laRQkJMHgxMDAwCisKKyNkZWZpbmUgUE1VX0RNQQkJCTB4MDAyMAorI2RlZmluZSBQTVVfVVNCCQkJMHg4MDQxCisjZGVmaW5lIFBNVV9MRUQJCQkweDA4MDAKKyNkZWZpbmUgUE1VX0dQVAkJCTB4MTAwMAorI2RlZmluZSBQTVVfUFBFCQkJMHgyMDAwCisjZGVmaW5lIFBNVV9GUEkJCQkweDQwMDAKKyNkZWZpbmUgUE1VX1NXSVRDSAkJMHgxMDAwMDAwMAorCisvKiBFVE9QIC0gZXRoZXJuZXQgKi8KKyNkZWZpbmUgTFRRX0VUT1BfQkFTRV9BRERSCTB4MUUxODAwMDAKKyNkZWZpbmUgTFRRX0VUT1BfU0laRQkJMHg0MDAwMAorCisvKiBETUEgKi8KKyNkZWZpbmUgTFRRX0RNQV9CQVNFX0FERFIJMHgxRTEwNDEwMAorI2RlZmluZSBMVFFfRE1BX1NJWkUJCTB4ODAwCisKKy8qIFBDSSAqLworI2RlZmluZSBQQ0lfQ1JfQkFTRV9BRERSCTB4MUUxMDU0MDAKKyNkZWZpbmUgUENJX0NSX1NJWkUJCTB4NDAwCisKKy8qIFdEVCAqLworI2RlZmluZSBMVFFfV0RUX0JBU0VfQUREUgkweDFGODgwM0YwCisjZGVmaW5lIExUUV9XRFRfU0laRQkJMHgxMAorCisvKiBTVFAgLSBzZXJpYWwgdG8gcGFyYWxsZWwgY29udmVyc2lvbiB1bml0ICovCisjZGVmaW5lIExUUV9TVFBfQkFTRV9BRERSCTB4MUUxMDBCQjAKKyNkZWZpbmUgTFRRX1NUUF9TSVpFCQkweDQwCisKKy8qIEdQSU8gKi8KKyNkZWZpbmUgTFRRX0dQSU8wX0JBU0VfQUREUgkweDFFMTAwQjEwCisjZGVmaW5lIExUUV9HUElPMV9CQVNFX0FERFIJMHgxRTEwMEI0MAorI2RlZmluZSBMVFFfR1BJTzJfQkFTRV9BRERSCTB4MUUxMDBCNzAKKyNkZWZpbmUgTFRRX0dQSU9fU0laRQkJMHgzMAorCisvKiBTU0MgKi8KKyNkZWZpbmUgTFRRX1NTQ19CQVNFX0FERFIJMHgxZTEwMDgwMAorI2RlZmluZSBMVFFfU1NDX1NJWkUJCTB4MTAwCisKKy8qIE1FSSAtIGRzbCBjb3JlICovCisjZGVmaW5lIExUUV9NRUlfQkFTRV9BRERSCTB4MUUxMTYwMDAKKworLyogREVVIC0gZGF0YSBlbmNyeXB0aW9uIHVuaXQgKi8KKyNkZWZpbmUgTFRRX0RFVV9CQVNFX0FERFIJMHgxRTEwMzEwMAorCisvKiBNUFMgLSBtdWx0aSBwcm9jZXNzb3IgdW5pdCAodm9pY2UpICovCisjZGVmaW5lIExUUV9NUFNfQkFTRV9BRERSCShLU0VHMSArIDB4MUYxMDcwMDApCisjZGVmaW5lIExUUV9NUFNfQ0hJUElECQkoKHUzMiAqKShMVFFfTVBTX0JBU0VfQUREUiArIDB4MDM0NCkpCisKKy8qIHJlcXVlc3QgYSBub24tZ3BpbyBhbmQgc2V0IHRoZSBQSU8gY29uZmlnICovCitleHRlcm4gaW50ICBsdHFfZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCBhbHQwLAorCXVuc2lnbmVkIGludCBhbHQxLCB1bnNpZ25lZCBpbnQgZGlyLCBjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiB2b2lkIGx0cV9wbXVfZW5hYmxlKHVuc2lnbmVkIGludCBtb2R1bGUpOworZXh0ZXJuIHZvaWQgbHRxX3BtdV9kaXNhYmxlKHVuc2lnbmVkIGludCBtb2R1bGUpOworCitzdGF0aWMgaW5saW5lIGludCBsdHFfaXNfYXI5KHZvaWQpCit7CisJcmV0dXJuIChsdHFfZ2V0X3NvY190eXBlKCkgPT0gU09DX1RZUEVfQVI5KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbHRxX2lzX3ZyOSh2b2lkKQoreworCXJldHVybiAobHRxX2dldF9zb2NfdHlwZSgpID09IFNPQ19UWVBFX1ZSOSk7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfU09DX1RZUEVfWFdBWSAqLworI2VuZGlmIC8qIF9MVFFfWFdBWV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxhbnRpcS94d2F5L3h3YXlfZG1hLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sYW50aXEveHdheS94d2F5X2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3Mjk0M2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sYW50aXEveHdheS94d2F5X2RtYS5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiAgIENvcHlyaWdodCAoQykgMjAxMSBKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4KKyAqLworCisjaWZuZGVmIExUUV9ETUFfSF9fCisjZGVmaW5lIExUUV9ETUFfSF9fCisKKyNkZWZpbmUgTFRRX0RFU0NfU0laRQkJMHgwOAkvKiBlYWNoIGRlc2NyaXB0b3IgaXMgNjRiaXQgKi8KKyNkZWZpbmUgTFRRX0RFU0NfTlVNCQkweDQwCS8qIDY0IGRlc2NyaXB0b3JzIC8gY2hhbm5lbCAqLworCisjZGVmaW5lIExUUV9ETUFfT1dOCQlCSVQoMzEpCS8qIG93bmVyIGJpdCAqLworI2RlZmluZSBMVFFfRE1BX0MJCUJJVCgzMCkgLyogY29tcGxldGUgYml0ICovCisjZGVmaW5lIExUUV9ETUFfU09QCQlCSVQoMjkpIC8qIHN0YXJ0IG9mIHBhY2tldCAqLworI2RlZmluZSBMVFFfRE1BX0VPUAkJQklUKDI4KSAvKiBlbmQgb2YgcGFja2V0ICovCisjZGVmaW5lIExUUV9ETUFfVFhfT0ZGU0VUKHgpCSgoeCAmIDB4MWYpIDw8IDIzKSAvKiBkYXRhIGJ5dGVzIG9mZnNldCAqLworI2RlZmluZSBMVFFfRE1BX1JYX09GRlNFVCh4KQkoKHggJiAweDcpIDw8IDIzKSAvKiBkYXRhIGJ5dGVzIG9mZnNldCAqLworI2RlZmluZSBMVFFfRE1BX1NJWkVfTUFTSwkoMHhmZmZmKSAvKiB0aGUgc2l6ZSBmaWVsZCBpcyAxNiBiaXQgKi8KKworc3RydWN0IGx0cV9kbWFfZGVzYyB7CisJdTMyIGN0bDsKKwl1MzIgYWRkcjsKK307CisKK3N0cnVjdCBsdHFfZG1hX2NoYW5uZWwgeworCWludCBucjsJCQkJLyogdGhlIGNoYW5uZWwgbnVtYmVyICovCisJaW50IGlycTsJCQkvKiB0aGUgbWFwcGVkIGlycSAqLworCWludCBkZXNjOwkJCS8qIHRoZSBjdXJyZW50IGRlc2NyaXB0b3IgKi8KKwlzdHJ1Y3QgbHRxX2RtYV9kZXNjICpkZXNjX2Jhc2U7CS8qIHRoZSBkZXNjcmlwdG9yIGJhc2UgKi8KKwlpbnQgcGh5czsJCQkvKiBwaHlzaWNhbCBhZGRyICovCit9OworCitlbnVtIHsKKwlETUFfUE9SVF9FVE9QID0gMCwKKwlETUFfUE9SVF9ERVUsCit9OworCitleHRlcm4gdm9pZCBsdHFfZG1hX2VuYWJsZV9pcnEoc3RydWN0IGx0cV9kbWFfY2hhbm5lbCAqY2gpOworZXh0ZXJuIHZvaWQgbHRxX2RtYV9kaXNhYmxlX2lycShzdHJ1Y3QgbHRxX2RtYV9jaGFubmVsICpjaCk7CitleHRlcm4gdm9pZCBsdHFfZG1hX2Fja19pcnEoc3RydWN0IGx0cV9kbWFfY2hhbm5lbCAqY2gpOworZXh0ZXJuIHZvaWQgbHRxX2RtYV9vcGVuKHN0cnVjdCBsdHFfZG1hX2NoYW5uZWwgKmNoKTsKK2V4dGVybiB2b2lkIGx0cV9kbWFfY2xvc2Uoc3RydWN0IGx0cV9kbWFfY2hhbm5lbCAqY2gpOworZXh0ZXJuIHZvaWQgbHRxX2RtYV9hbGxvY190eChzdHJ1Y3QgbHRxX2RtYV9jaGFubmVsICpjaCk7CitleHRlcm4gdm9pZCBsdHFfZG1hX2FsbG9jX3J4KHN0cnVjdCBsdHFfZG1hX2NoYW5uZWwgKmNoKTsKK2V4dGVybiB2b2lkIGx0cV9kbWFfZnJlZShzdHJ1Y3QgbHRxX2RtYV9jaGFubmVsICpjaCk7CitleHRlcm4gdm9pZCBsdHFfZG1hX2luaXRfcG9ydChpbnQgcCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbmV0bG9naWMvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1uZXRsb2dpYy9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjcyODI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbmV0bG9naWMvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOZXRsb2dpYyBNaWNyb3N5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwMyBSYWxmIEJhZWNobGUKKyAqLworI2lmbmRlZiBfX0FTTV9NQUNIX05FVExPR0lDX0NQVV9GRUFUVVJFX09WRVJSSURFU19ICisjZGVmaW5lIF9fQVNNX01BQ0hfTkVUTE9HSUNfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0gKKworI2RlZmluZSBjcHVfaGFzXzRrZXgJCTEKKyNkZWZpbmUgY3B1X2hhc180a19jYWNoZQkxCisjZGVmaW5lIGNwdV9oYXNfd2F0Y2gJCTEKKyNkZWZpbmUgY3B1X2hhc19taXBzMTYJCTAKKyNkZWZpbmUgY3B1X2hhc19jb3VudGVyCQkxCisjZGVmaW5lIGNwdV9oYXNfZGl2ZWMJCTEKKyNkZWZpbmUgY3B1X2hhc192Y2UJCTAKKyNkZWZpbmUgY3B1X2hhc19jYWNoZV9jZGV4X3AJMAorI2RlZmluZSBjcHVfaGFzX2NhY2hlX2NkZXhfcwkwCisjZGVmaW5lIGNwdV9oYXNfcHJlZmV0Y2gJMQorI2RlZmluZSBjcHVfaGFzX21jaGVjawkJMQorI2RlZmluZSBjcHVfaGFzX2VqdGFnCQkxCisKKyNkZWZpbmUgY3B1X2hhc19sbHNjCQkxCisjZGVmaW5lIGNwdV9oYXNfdnRhZ19pY2FjaGUJMAorI2RlZmluZSBjcHVfaGFzX2RjX2FsaWFzZXMJMAorI2RlZmluZSBjcHVfaGFzX2ljX2ZpbGxzX2ZfZGMJMAorI2RlZmluZSBjcHVfaGFzX2RzcAkJMAorI2RlZmluZSBjcHVfaGFzX21pcHNtdAkJMAorI2RlZmluZSBjcHVfaGFzX3VzZXJsb2NhbAkwCisjZGVmaW5lIGNwdV9pY2FjaGVfc25vb3BzX3JlbW90ZV9zdG9yZQkwCisKKyNkZWZpbmUgY3B1X2hhc19ub2ZwdWV4CQkwCisjZGVmaW5lIGNwdV9oYXNfNjRiaXRzCQkxCisKKyNkZWZpbmUgY3B1X2hhc19taXBzMzJyMQkxCisjZGVmaW5lIGNwdV9oYXNfbWlwczMycjIJMAorI2RlZmluZSBjcHVfaGFzX21pcHM2NHIxCTEKKyNkZWZpbmUgY3B1X2hhc19taXBzNjRyMgkwCisKKyNkZWZpbmUgY3B1X2hhc19pbmNsdXNpdmVfcGNhY2hlcwkwCisKKyNkZWZpbmUgY3B1X2RjYWNoZV9saW5lX3NpemUoKQkzMgorI2RlZmluZSBjcHVfaWNhY2hlX2xpbmVfc2l6ZSgpCTMyCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX05FVExPR0lDX0NQVV9GRUFUVVJFX09WRVJSSURFU19IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1uZXRsb2dpYy9pcnEuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLW5ldGxvZ2ljL2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1OTAyNDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1uZXRsb2dpYy9pcnEuaApAQCAtMCwwICsxLDE0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5ldGxvZ2ljIE1pY3Jvc3lzdGVtcy4KKyAqLworI2lmbmRlZiBfX0FTTV9ORVRMT0dJQ19JUlFfSAorI2RlZmluZSBfX0FTTV9ORVRMT0dJQ19JUlFfSAorCisjZGVmaW5lIE5SX0lSUVMJCQk2NAorI2RlZmluZSBNSVBTX0NQVV9JUlFfQkFTRQkwCisKKyNlbmRpZiAvKiBfX0FTTV9ORVRMT0dJQ19JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbmV0bG9naWMvd2FyLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1uZXRsb2dpYy93YXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmRhODkzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbmV0bG9naWMvd2FyLmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOZXRsb2dpYyBNaWNyb3N5c3RlbXMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQsIDIwMDcgYnkgUmFsZiBCYWVjaGxlIDxyYWxmQGxpbnV4LW1pcHMub3JnPgorICovCisjaWZuZGVmIF9fQVNNX01JUFNfTUFDSF9OTE1fV0FSX0gKKyNkZWZpbmUgX19BU01fTUlQU19NQUNIX05MTV9XQVJfSAorCisjZGVmaW5lIFI0NjAwX1YxX0lOREVYX0lDQUNIRU9QX1dBUgkwCisjZGVmaW5lIFI0NjAwX1YxX0hJVF9DQUNIRU9QX1dBUgkwCisjZGVmaW5lIFI0NjAwX1YyX0hJVF9DQUNIRU9QX1dBUgkwCisjZGVmaW5lIFI1NDMyX0NQMF9JTlRFUlJVUFRfV0FSCQkwCisjZGVmaW5lIEJDTTEyNTBfTTNfV0FSCQkJMAorI2RlZmluZSBTSUJZVEVfMTk1Nl9XQVIJCQkwCisjZGVmaW5lIE1JUFM0S19JQ0FDSEVfUkVGSUxMX1dBUgkwCisjZGVmaW5lIE1JUFNfQ0FDSEVfU1lOQ19XQVIJCTAKKyNkZWZpbmUgVFg0OVhYX0lDQUNIRV9JTkRFWF9JTlZfV0FSCTAKKyNkZWZpbmUgUk05MDAwX0NERVhfU01QX1dBUgkJMAorI2RlZmluZSBJQ0FDSEVfUkVGSUxMU19XT1JLQVJPVU5EX1dBUgkwCisjZGVmaW5lIFIxMDAwMF9MTFNDX1dBUgkJCTAKKyNkZWZpbmUgTUlQUzM0S19NSVNTRURfSVRMQl9XQVIJCTAKKworI2VuZGlmIC8qIF9fQVNNX01JUFNfTUFDSF9OTE1fV0FSX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tb2R1bGUuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tb2R1bGUuaAppbmRleCBkOTQwODVhLi5iYzAxYTAyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbW9kdWxlLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21vZHVsZS5oCkBAIC0xMTgsNiArMTE4LDggQEAKICNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJMT09OR1NPTjIgIgogI2VsaWYgZGVmaW5lZCBDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04KICNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJPQ1RFT04gIgorI2VsaWYgZGVmaW5lZCBDT05GSUdfQ1BVX1hMUgorI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIlhMUiAiCiAjZWxzZQogI2Vycm9yIE1PRFVMRV9QUk9DX0ZBTUlMWSB1bmRlZmluZWQgZm9yIHlvdXIgcHJvY2Vzc29yIGNvbmZpZ3VyYXRpb24KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL25ldGxvZ2ljL2ludGVycnVwdC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL25ldGxvZ2ljL2ludGVycnVwdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NWFhZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbmV0bG9naWMvaW50ZXJydXB0LmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAzLTIwMTEgTmV0TG9naWMgTWljcm9zeXN0ZW1zLCBJbmMuIChOZXRMb2dpYykuIEFsbCByaWdodHMKKyAqIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZSBOZXRMb2dpYworICogbGljZW5zZSBiZWxvdzoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTkVUTE9HSUMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIE5FVExPR0lDIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTgorICogSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfQVNNX05MTV9JTlRFUlJVUFRfSAorI2RlZmluZSBfQVNNX05MTV9JTlRFUlJVUFRfSAorCisvKiBEZWZpbmVzIGZvciB0aGUgSVJRIG51bWJlcnMgKi8KKworI2RlZmluZSBJUlFfSVBJX1NNUF9GVU5DVElPTgkzCisjZGVmaW5lIElSUV9JUElfU01QX1JFU0NIRURVTEUJNAorI2RlZmluZSBJUlFfTVNHUklORwkJNgorI2RlZmluZSBJUlFfVElNRVIJCTcKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbmV0bG9naWMvbWlwcy1leHRucy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL25ldGxvZ2ljL21pcHMtZXh0bnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzUzZDBiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL25ldGxvZ2ljL21pcHMtZXh0bnMuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDMtMjAxMSBOZXRMb2dpYyBNaWNyb3N5c3RlbXMsIEluYy4gKE5ldExvZ2ljKS4gQWxsIHJpZ2h0cworICogcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlIE5ldExvZ2ljCisgKiBsaWNlbnNlIGJlbG93OgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBORVRMT0dJQyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgTkVUTE9HSUMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCisgKiBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOCisgKiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9BU01fTkxNX01JUFNfRVhUU19ICisjZGVmaW5lIF9BU01fTkxNX01JUFNfRVhUU19ICisKKy8qCisgKiBYTFIgYW5kIFhMUCBpbnRlcnJ1cHQgcmVxdWVzdCBhbmQgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgcmVhZF9jMF9laXJyKCkJCV9fcmVhZF82NGJpdF9jMF9yZWdpc3RlcigkOSwgNikKKyNkZWZpbmUgcmVhZF9jMF9laW1yKCkJCV9fcmVhZF82NGJpdF9jMF9yZWdpc3RlcigkOSwgNykKKyNkZWZpbmUgd3JpdGVfYzBfZWlycih2YWwpCV9fd3JpdGVfNjRiaXRfYzBfcmVnaXN0ZXIoJDksIDYsIHZhbCkKKworLyoKKyAqIFdyaXRpbmcgRUlNUiBpbiAzMiBiaXQgaXMgYSBzcGVjaWFsIGNhc2UsIHRoZSBsb3dlciA4IGJpdCBvZiB0aGUKKyAqIEVJTVIgaXMgc2hhZG93ZWQgaW4gdGhlIHN0YXR1cyByZWdpc3Rlciwgc28gd2UgY2Fubm90IHNhdmUgYW5kCisgKiByZXN0b3JlIHN0YXR1cyByZWdpc3RlciBmb3Igc3BsaXQgcmVhZC4KKyAqLworI2RlZmluZSB3cml0ZV9jMF9laW1yKHZhbCkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmIChzaXplb2YodW5zaWduZWQgbG9uZykgPT0gNCkJewkJCQlcCisJCXVuc2lnbmVkIGxvbmcgX19mbGFnczsJCQkJCVwKKwkJCQkJCQkJCVwKKwkJbG9jYWxfaXJxX3NhdmUoX19mbGFncyk7CQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJCQkiLnNldFx0bWlwczY0XG5cdCIJCQkJXAorCQkJImRzbGxcdCVMMCwgJUwwLCAzMlxuXHQiCQkJXAorCQkJImRzcmxcdCVMMCwgJUwwLCAzMlxuXHQiCQkJXAorCQkJImRzbGxcdCVNMCwgJU0wLCAzMlxuXHQiCQkJXAorCQkJIm9yXHQlTDAsICVMMCwgJU0wXG5cdCIJCQkJXAorCQkJImRtdGMwXHQlTDAsICQ5LCA3XG5cdCIJCQkJXAorCQkJIi5zZXRcdG1pcHMwIgkJCQkJXAorCQkJOiA6ICJyIiAodmFsKSk7CQkJCQlcCisJCV9fZmxhZ3MgPSAoX19mbGFncyAmIDB4ZmZmZjAwZmYpIHwgKCgodmFsKSAmIDB4ZmYpIDw8IDgpO1wKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoX19mbGFncyk7CQkJCVwKKwl9IGVsc2UJCQkJCQkJCVwKKwkJX193cml0ZV82NGJpdF9jMF9yZWdpc3RlcigkOSwgNywgKHZhbCkpOwkJXAorfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSBpbnQgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCit7CisJcmV0dXJuIF9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMTUsIDEpICYgMHgzZmY7Cit9CisKKyNlbmRpZiAvKl9BU01fTkxNX01JUFNfRVhUU19IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbmV0bG9naWMvcHNiLWJvb3RpbmZvLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbmV0bG9naWMvcHNiLWJvb3RpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg3ODMwNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9uZXRsb2dpYy9wc2ItYm9vdGluZm8uaApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAzLTIwMTEgTmV0TG9naWMgTWljcm9zeXN0ZW1zLCBJbmMuIChOZXRMb2dpYykuIEFsbCByaWdodHMKKyAqIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZSBOZXRMb2dpYworICogbGljZW5zZSBiZWxvdzoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTkVUTE9HSUMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIE5FVExPR0lDIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTgorICogSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfQVNNX05FVExPR0lDX0JPT1RJTkZPX0gKKyNkZWZpbmUgX0FTTV9ORVRMT0dJQ19CT09USU5GT19ICisKK3N0cnVjdCBwc2JfaW5mbyB7CisJdWludDY0X3QgYm9vdF9sZXZlbDsKKwl1aW50NjRfdCBpb19iYXNlOworCXVpbnQ2NF90IG91dHB1dF9kZXZpY2U7CisJdWludDY0X3QgdWFydF9wcmludDsKKwl1aW50NjRfdCBsZWRfb3V0cHV0OworCXVpbnQ2NF90IGluaXQ7CisJdWludDY0X3QgZXhpdDsKKwl1aW50NjRfdCB3YXJtX3Jlc2V0OworCXVpbnQ2NF90IHdha2V1cDsKKwl1aW50NjRfdCBvbmxpbmVfY3B1X21hcDsKKwl1aW50NjRfdCBtYXN0ZXJfcmVlbnRyeV9zcDsKKwl1aW50NjRfdCBtYXN0ZXJfcmVlbnRyeV9ncDsKKwl1aW50NjRfdCBtYXN0ZXJfcmVlbnRyeV9mbjsKKwl1aW50NjRfdCBzbGF2ZV9yZWVudHJ5X2ZuOworCXVpbnQ2NF90IG1hZ2ljX2R3b3JkOworCXVpbnQ2NF90IHVhcnRfcHV0Y2hhcjsKKwl1aW50NjRfdCBzaXplOworCXVpbnQ2NF90IHVhcnRfZ2V0Y2hhcjsKKwl1aW50NjRfdCBubWlfaGFuZGxlcjsKKwl1aW50NjRfdCBwc2JfdmVyc2lvbjsKKwl1aW50NjRfdCBtYWNfYWRkcjsKKwl1aW50NjRfdCBjcHVfZnJlcXVlbmN5OworCXVpbnQ2NF90IGJvYXJkX3ZlcnNpb247CisJdWludDY0X3QgbWFsbG9jOworCXVpbnQ2NF90IGZyZWU7CisJdWludDY0X3QgZ2xvYmFsX3NobWVtX2FkZHI7CisJdWludDY0X3QgZ2xvYmFsX3NobWVtX3NpemU7CisJdWludDY0X3QgcHNiX29zX2NwdV9tYXA7CisJdWludDY0X3QgdXNlcmFwcF9jcHVfbWFwOworCXVpbnQ2NF90IHdha2V1cF9vczsKKwl1aW50NjRfdCBwc2JfbWVtX21hcDsKKwl1aW50NjRfdCBib2FyZF9tYWpvcl92ZXJzaW9uOworCXVpbnQ2NF90IGJvYXJkX21pbm9yX3ZlcnNpb247CisJdWludDY0X3QgYm9hcmRfbWFuZl9yZXZpc2lvbjsKKwl1aW50NjRfdCBib2FyZF9zZXJpYWxfbnVtYmVyOworCXVpbnQ2NF90IHBzYl9waHlzYWRkcl9tYXA7CisJdWludDY0X3QgeGxyX2xvYWRlcmlwX2NvbmZpZzsKKwl1aW50NjRfdCBibGRyX2VudnA7CisJdWludDY0X3QgYXZhaWxfbWVtX21hcDsKK307CisKK2VudW0geworCU5FVExPR0lDX0lPX1NQQUNFID0gMHgxMCwKKwlQQ0lYX0lPX1NQQUNFLAorCVBDSVhfQ0ZHX1NQQUNFLAorCVBDSVhfTUVNT1JZX1NQQUNFLAorCUhUX0lPX1NQQUNFLAorCUhUX0NGR19TUEFDRSwKKwlIVF9NRU1PUllfU1BBQ0UsCisJU1JBTV9TUEFDRSwKKwlGTEFTSF9DT05UUk9MTEVSX1NQQUNFCit9OworCisjZGVmaW5lIE5MTV9NQVhfQVJHUwk2NAorI2RlZmluZSBOTE1fTUFYX0VOVlMJMzIKKworLyogVGhpcyBpcyB3aGF0IG5ldGxib290IHBhc3NlcyBhbmQgbGludXggYm9vdF9tZW1fbWFwIGlzIHN1YnRseSBkaWZmZXJlbnQgKi8KKyNkZWZpbmUgTkxNX0JPT1RfTUVNX01BUF9NQVgJMzIKK3N0cnVjdCBubG1fYm9vdF9tZW1fbWFwIHsKKwlpbnQgbnJfbWFwOworCXN0cnVjdCBubG1fYm9vdF9tZW1fbWFwX2VudHJ5IHsKKwkJdWludDY0X3QgYWRkcjsJCS8qIHN0YXJ0IG9mIG1lbW9yeSBzZWdtZW50ICovCisJCXVpbnQ2NF90IHNpemU7CQkvKiBzaXplIG9mIG1lbW9yeSBzZWdtZW50ICovCisJCXVpbnQzMl90IHR5cGU7CQkvKiB0eXBlIG9mIG1lbW9yeSBzZWdtZW50ICovCisJfSBtYXBbTkxNX0JPT1RfTUVNX01BUF9NQVhdOworfTsKKworLyogUG9pbnRlciB0byBzYXZlZCBib290IGxvYWRlciBpbmZvICovCitleHRlcm4gc3RydWN0IHBzYl9pbmZvIG5sbV9wcm9tX2luZm87CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL25ldGxvZ2ljL3hsci9ncGlvLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbmV0bG9naWMveGxyL2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWY2YWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL25ldGxvZ2ljL3hsci9ncGlvLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAzLTIwMTEgTmV0TG9naWMgTWljcm9zeXN0ZW1zLCBJbmMuIChOZXRMb2dpYykuIEFsbCByaWdodHMKKyAqIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZSBOZXRMb2dpYworICogbGljZW5zZSBiZWxvdzoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTkVUTE9HSUMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIE5FVExPR0lDIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTgorICogSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfQVNNX05MTV9HUElPX0gKKyNkZWZpbmUgX0FTTV9OTE1fR1BJT19ICisKKyNkZWZpbmUgTkVUTE9HSUNfR1BJT19JTlRfRU5fUkVHCQkwCisjZGVmaW5lIE5FVExPR0lDX0dQSU9fSU5QVVRfSU5WRVJTSU9OX1JFRwkxCisjZGVmaW5lIE5FVExPR0lDX0dQSU9fSU9fRElSX1JFRwkJMgorI2RlZmluZSBORVRMT0dJQ19HUElPX0lPX0RBVEFfV1JfUkVHCQkzCisjZGVmaW5lIE5FVExPR0lDX0dQSU9fSU9fREFUQV9SRF9SRUcJCTQKKworI2RlZmluZSBORVRMT0dJQ19HUElPX1NXUkVTRVRfUkVHCQk4CisjZGVmaW5lIE5FVExPR0lDX0dQSU9fRFJBTTFfQ05UUkxfUkVHCQk5CisjZGVmaW5lIE5FVExPR0lDX0dQSU9fRFJBTTFfUkFUSU9fUkVHCQkxMAorI2RlZmluZSBORVRMT0dJQ19HUElPX0RSQU0xX1JFU0VUX1JFRwkJMTEKKyNkZWZpbmUgTkVUTE9HSUNfR1BJT19EUkFNMV9TVEFUVVNfUkVHCQkxMgorI2RlZmluZSBORVRMT0dJQ19HUElPX0RSQU0yX0NOVFJMX1JFRwkJMTMKKyNkZWZpbmUgTkVUTE9HSUNfR1BJT19EUkFNMl9SQVRJT19SRUcJCTE0CisjZGVmaW5lIE5FVExPR0lDX0dQSU9fRFJBTTJfUkVTRVRfUkVHCQkxNQorI2RlZmluZSBORVRMT0dJQ19HUElPX0RSQU0yX1NUQVRVU19SRUcJCTE2CisKKyNkZWZpbmUgTkVUTE9HSUNfR1BJT19QV1JPTl9SRVNFVF9DRkdfUkVHCTIxCisjZGVmaW5lIE5FVExPR0lDX0dQSU9fQklTVF9BTExfR09fU1RBVFVTX1JFRwkyNAorI2RlZmluZSBORVRMT0dJQ19HUElPX0JJU1RfQ1BVX0dPX1NUQVRVU19SRUcJMjUKKyNkZWZpbmUgTkVUTE9HSUNfR1BJT19CSVNUX0RFVl9HT19TVEFUVVNfUkVHCTI2CisKKyNkZWZpbmUgTkVUTE9HSUNfR1BJT19GVVNFX0JBTktfUkVHCQkzNQorI2RlZmluZSBORVRMT0dJQ19HUElPX0NQVV9SRVNFVF9SRUcJCTQwCisjZGVmaW5lIE5FVExPR0lDX0dQSU9fUk5HX1JFRwkJCTQzCisKKyNkZWZpbmUgTkVUTE9HSUNfUFdST05fUkVTRVRfUENNQ0lBX0JPT1QJMTcKKyNkZWZpbmUgTkVUTE9HSUNfR1BJT19MRURfQklUTUFQCTB4MTcwMDAwMAorI2RlZmluZSBORVRMT0dJQ19HUElPX0xFRF8wX1NISUZUCQkyMAorI2RlZmluZSBORVRMT0dJQ19HUElPX0xFRF8xX1NISUZUCQkyNAorCisjZGVmaW5lIE5FVExPR0lDX0dQSU9fTEVEX09VVFBVVF9DT0RFX1JFU0VUCTB4MDEKKyNkZWZpbmUgTkVUTE9HSUNfR1BJT19MRURfT1VUUFVUX0NPREVfSEFSRF9SRVNFVCAweDAyCisjZGVmaW5lIE5FVExPR0lDX0dQSU9fTEVEX09VVFBVVF9DT0RFX1NPRlRfUkVTRVQgMHgwMworI2RlZmluZSBORVRMT0dJQ19HUElPX0xFRF9PVVRQVVRfQ09ERV9NQUlOCTB4MDQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbmV0bG9naWMveGxyL2lvbWFwLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbmV0bG9naWMveGxyL2lvbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUzYTRkZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9uZXRsb2dpYy94bHIvaW9tYXAuaApAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAzLTIwMTEgTmV0TG9naWMgTWljcm9zeXN0ZW1zLCBJbmMuIChOZXRMb2dpYykuIEFsbCByaWdodHMKKyAqIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZSBOZXRMb2dpYworICogbGljZW5zZSBiZWxvdzoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTkVUTE9HSUMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIE5FVExPR0lDIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTgorICogSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfQVNNX05MTV9JT01BUF9ICisjZGVmaW5lIF9BU01fTkxNX0lPTUFQX0gKKworI2RlZmluZSBERUZBVUxUX05FVExPR0lDX0lPX0JBU0UgICAgICAgICAgIENLU0VHMUFERFIoMHgxZWYwMDAwMCkKKyNkZWZpbmUgTkVUTE9HSUNfSU9fRERSMl9DSE4wX09GRlNFVCAgICAgICAweDAxMDAwCisjZGVmaW5lIE5FVExPR0lDX0lPX0REUjJfQ0hOMV9PRkZTRVQgICAgICAgMHgwMjAwMAorI2RlZmluZSBORVRMT0dJQ19JT19ERFIyX0NITjJfT0ZGU0VUICAgICAgIDB4MDMwMDAKKyNkZWZpbmUgTkVUTE9HSUNfSU9fRERSMl9DSE4zX09GRlNFVCAgICAgICAweDA0MDAwCisjZGVmaW5lIE5FVExPR0lDX0lPX1BJQ19PRkZTRVQgICAgICAgICAgICAgMHgwODAwMAorI2RlZmluZSBORVRMT0dJQ19JT19VQVJUXzBfT0ZGU0VUICAgICAgICAgIDB4MTQwMDAKKyNkZWZpbmUgTkVUTE9HSUNfSU9fVUFSVF8xX09GRlNFVCAgICAgICAgICAweDE1MTAwCisKKyNkZWZpbmUgTkVUTE9HSUNfSU9fU0laRSAgICAgICAgICAgICAgICAgICAweDEwMDAKKworI2RlZmluZSBORVRMT0dJQ19JT19CUklER0VfT0ZGU0VUICAgICAgICAgIDB4MDAwMDAKKworI2RlZmluZSBORVRMT0dJQ19JT19STEQyX0NITjBfT0ZGU0VUICAgICAgIDB4MDUwMDAKKyNkZWZpbmUgTkVUTE9HSUNfSU9fUkxEMl9DSE4xX09GRlNFVCAgICAgICAweDA2MDAwCisKKyNkZWZpbmUgTkVUTE9HSUNfSU9fU1JBTV9PRkZTRVQgICAgICAgICAgICAweDA3MDAwCisKKyNkZWZpbmUgTkVUTE9HSUNfSU9fUENJWF9PRkZTRVQgICAgICAgICAgICAweDA5MDAwCisjZGVmaW5lIE5FVExPR0lDX0lPX0hUX09GRlNFVCAgICAgICAgICAgICAgMHgwQTAwMAorCisjZGVmaW5lIE5FVExPR0lDX0lPX1NFQ1VSSVRZX09GRlNFVCAgICAgICAgMHgwQjAwMAorCisjZGVmaW5lIE5FVExPR0lDX0lPX0dNQUNfMF9PRkZTRVQgICAgICAgICAgMHgwQzAwMAorI2RlZmluZSBORVRMT0dJQ19JT19HTUFDXzFfT0ZGU0VUICAgICAgICAgIDB4MEQwMDAKKyNkZWZpbmUgTkVUTE9HSUNfSU9fR01BQ18yX09GRlNFVCAgICAgICAgICAweDBFMDAwCisjZGVmaW5lIE5FVExPR0lDX0lPX0dNQUNfM19PRkZTRVQgICAgICAgICAgMHgwRjAwMAorCisvKiBYTFMgZGV2aWNlcyAqLworI2RlZmluZSBORVRMT0dJQ19JT19HTUFDXzRfT0ZGU0VUICAgICAgICAgIDB4MjAwMDAKKyNkZWZpbmUgTkVUTE9HSUNfSU9fR01BQ181X09GRlNFVCAgICAgICAgICAweDIxMDAwCisjZGVmaW5lIE5FVExPR0lDX0lPX0dNQUNfNl9PRkZTRVQgICAgICAgICAgMHgyMjAwMAorI2RlZmluZSBORVRMT0dJQ19JT19HTUFDXzdfT0ZGU0VUICAgICAgICAgIDB4MjMwMDAKKworI2RlZmluZSBORVRMT0dJQ19JT19QQ0lFXzBfT0ZGU0VUICAgICAgICAgIDB4MUUwMDAKKyNkZWZpbmUgTkVUTE9HSUNfSU9fUENJRV8xX09GRlNFVCAgICAgICAgICAweDFGMDAwCisjZGVmaW5lIE5FVExPR0lDX0lPX1NSSU9fMF9PRkZTRVQgICAgICAgICAgMHgxRTAwMAorI2RlZmluZSBORVRMT0dJQ19JT19TUklPXzFfT0ZGU0VUICAgICAgICAgIDB4MUYwMDAKKworI2RlZmluZSBORVRMT0dJQ19JT19VU0JfMF9PRkZTRVQgICAgICAgICAgIDB4MjQwMDAKKyNkZWZpbmUgTkVUTE9HSUNfSU9fVVNCXzFfT0ZGU0VUICAgICAgICAgICAweDI1MDAwCisKKyNkZWZpbmUgTkVUTE9HSUNfSU9fQ09NUF9PRkZTRVQgICAgICAgICAgICAweDFEMDAwCisvKiBlbmQgWExTIGRldmljZXMgKi8KKworLyogWExSIGRldmljZXMgKi8KKyNkZWZpbmUgTkVUTE9HSUNfSU9fU1BJNF8wX09GRlNFVCAgICAgICAgICAweDEwMDAwCisjZGVmaW5lIE5FVExPR0lDX0lPX1hHTUFDXzBfT0ZGU0VUICAgICAgICAgMHgxMTAwMAorI2RlZmluZSBORVRMT0dJQ19JT19TUEk0XzFfT0ZGU0VUICAgICAgICAgIDB4MTIwMDAKKyNkZWZpbmUgTkVUTE9HSUNfSU9fWEdNQUNfMV9PRkZTRVQgICAgICAgICAweDEzMDAwCisvKiBlbmQgWExSIGRldmljZXMgKi8KKworI2RlZmluZSBORVRMT0dJQ19JT19JMkNfMF9PRkZTRVQgICAgICAgICAgIDB4MTYwMDAKKyNkZWZpbmUgTkVUTE9HSUNfSU9fSTJDXzFfT0ZGU0VUICAgICAgICAgICAweDE3MDAwCisKKyNkZWZpbmUgTkVUTE9HSUNfSU9fR1BJT19PRkZTRVQgICAgICAgICAgICAweDE4MDAwCisjZGVmaW5lIE5FVExPR0lDX0lPX0ZMQVNIX09GRlNFVCAgICAgICAgICAgMHgxOTAwMAorI2RlZmluZSBORVRMT0dJQ19JT19UQl9PRkZTRVQgICAgICAgICAgICAgIDB4MUMwMDAKKworI2RlZmluZSBORVRMT0dJQ19DUExEX09GRlNFVCAgICAgICAgICAgICAgIEtTRUcxQUREUigweDFkODQwMDAwKQorCisvKgorICogQmFzZSBBZGRyZXNzIChWaXJ0dWFsKSBvZiB0aGUgUENJIENvbmZpZyBhZGRyZXNzIHNwYWNlCisgKiBGb3Igbm93LCBjaG9vc2UgMjU2TSBwaHlzIGluIGtzZWcxID0gMHhBMDAwMDAwMCArICgxPDwyOCkKKyAqIENvbmZpZyBzcGFjZSBzcGFucyAyNTYgKG51bSBvZiBidXNlcykgKiAyNTYgKG51bSBmdW5jdGlvbnMpICogMjU2IGJ5dGVzCisgKiBpZSAxPDwyNCA9IDE2TQorICovCisjZGVmaW5lIERFRkFVTFRfUENJX0NPTkZJR19CQVNFICAgICAgICAgMHgxODAwMDAwMAorI2RlZmluZSBERUZBVUxUX0hUX1RZUEUwX0NGR19CQVNFICAgICAgIDB4MTYwMDAwMDAKKyNkZWZpbmUgREVGQVVMVF9IVF9UWVBFMV9DRkdfQkFTRSAgICAgICAweDE3MDAwMDAwCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKK3R5cGVkZWYgdm9sYXRpbGUgX191MzIgbmxtX3JlZ190OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbmV0bG9naWNfaW9fYmFzZTsKKworLyogRklYTUUgcmVhZCBvbmNlIGluIHdyaXRlX3JlZyAqLworI2lmZGVmIENPTkZJR19DUFVfTElUVExFX0VORElBTgorI2RlZmluZSBuZXRsb2dpY19yZWFkX3JlZyhiYXNlLCBvZmZzZXQpCQkoKGJhc2UpWyhvZmZzZXQpXSkKKyNkZWZpbmUgbmV0bG9naWNfd3JpdGVfcmVnKGJhc2UsIG9mZnNldCwgdmFsdWUpCSgoYmFzZSlbKG9mZnNldCldID0gKHZhbHVlKSkKKyNlbHNlCisjZGVmaW5lIG5ldGxvZ2ljX3JlYWRfcmVnKGJhc2UsIG9mZnNldCkJCShiZTMyX3RvX2NwdSgoYmFzZSlbKG9mZnNldCldKSkKKyNkZWZpbmUgbmV0bG9naWNfd3JpdGVfcmVnKGJhc2UsIG9mZnNldCwgdmFsdWUpIFwKKwkJCQkoKGJhc2UpWyhvZmZzZXQpXSA9IGNwdV90b19iZTMyKCh2YWx1ZSkpKQorI2VuZGlmCisKKyNkZWZpbmUgbmV0bG9naWNfcmVhZF9yZWdfbGUzMihiYXNlLCBvZmZzZXQpIChsZTMyX3RvX2NwdSgoYmFzZSlbKG9mZnNldCldKSkKKyNkZWZpbmUgbmV0bG9naWNfd3JpdGVfcmVnX2xlMzIoYmFzZSwgb2Zmc2V0LCB2YWx1ZSkgXAorCQkJCSgoYmFzZSlbKG9mZnNldCldID0gY3B1X3RvX2xlMzIoKHZhbHVlKSkpCisjZGVmaW5lIG5ldGxvZ2ljX2lvX21taW8ob2Zmc2V0KSAoKG5sbV9yZWdfdCAqKShuZXRsb2dpY19pb19iYXNlKyhvZmZzZXQpKSkKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL25ldGxvZ2ljL3hsci9waWMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9uZXRsb2dpYy94bHIvcGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNjZWI3NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9uZXRsb2dpYy94bHIvcGljLmgKQEAgLTAsMCArMSwyMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMy0yMDExIE5ldExvZ2ljIE1pY3Jvc3lzdGVtcywgSW5jLiAoTmV0TG9naWMpLiBBbGwgcmlnaHRzCisgKiByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUgTmV0TG9naWMKKyAqIGxpY2Vuc2UgYmVsb3c6CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE5FVExPR0lDIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBORVRMT0dJQyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4KKyAqIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0FTTV9OTE1fWExSX1BJQ19ICisjZGVmaW5lIF9BU01fTkxNX1hMUl9QSUNfSAorCisjZGVmaW5lIFBJQ19DTEtTX1BFUl9TRUMJCTY2NjY2NjY2VUxMCisvKiBQSUMgaGFyZHdhcmUgaW50ZXJydXB0IG51bWJlcnMgKi8KKyNkZWZpbmUgUElDX0lSVF9XRF9JTkRFWAkJMAorI2RlZmluZSBQSUNfSVJUX1RJTUVSXzBfSU5ERVgJCTEKKyNkZWZpbmUgUElDX0lSVF9USU1FUl8xX0lOREVYCQkyCisjZGVmaW5lIFBJQ19JUlRfVElNRVJfMl9JTkRFWAkJMworI2RlZmluZSBQSUNfSVJUX1RJTUVSXzNfSU5ERVgJCTQKKyNkZWZpbmUgUElDX0lSVF9USU1FUl80X0lOREVYCQk1CisjZGVmaW5lIFBJQ19JUlRfVElNRVJfNV9JTkRFWAkJNgorI2RlZmluZSBQSUNfSVJUX1RJTUVSXzZfSU5ERVgJCTcKKyNkZWZpbmUgUElDX0lSVF9USU1FUl83X0lOREVYCQk4CisjZGVmaW5lIFBJQ19JUlRfQ0xPQ0tfSU5ERVgJCVBJQ19JUlRfVElNRVJfN19JTkRFWAorI2RlZmluZSBQSUNfSVJUX1VBUlRfMF9JTkRFWAkJOQorI2RlZmluZSBQSUNfSVJUX1VBUlRfMV9JTkRFWAkJMTAKKyNkZWZpbmUgUElDX0lSVF9JMkNfMF9JTkRFWAkJMTEKKyNkZWZpbmUgUElDX0lSVF9JMkNfMV9JTkRFWAkJMTIKKyNkZWZpbmUgUElDX0lSVF9QQ01DSUFfSU5ERVgJCTEzCisjZGVmaW5lIFBJQ19JUlRfR1BJT19JTkRFWAkJMTQKKyNkZWZpbmUgUElDX0lSVF9IWVBFUl9JTkRFWAkJMTUKKyNkZWZpbmUgUElDX0lSVF9QQ0lYX0lOREVYCQkxNgorLyogWExTICovCisjZGVmaW5lIFBJQ19JUlRfQ0RFX0lOREVYCQkxNQorI2RlZmluZSBQSUNfSVJUX0JSSURHRV9UQl9YTFNfSU5ERVgJMTYKKy8qIFhMUyAqLworI2RlZmluZSBQSUNfSVJUX0dNQUMwX0lOREVYCQkxNworI2RlZmluZSBQSUNfSVJUX0dNQUMxX0lOREVYCQkxOAorI2RlZmluZSBQSUNfSVJUX0dNQUMyX0lOREVYCQkxOQorI2RlZmluZSBQSUNfSVJUX0dNQUMzX0lOREVYCQkyMAorI2RlZmluZSBQSUNfSVJUX1hHUzBfSU5ERVgJCTIxCisjZGVmaW5lIFBJQ19JUlRfWEdTMV9JTkRFWAkJMjIKKyNkZWZpbmUgUElDX0lSVF9IWVBFUl9GQVRBTF9JTkRFWAkyMworI2RlZmluZSBQSUNfSVJUX1BDSVhfRkFUQUxfSU5ERVgJMjQKKyNkZWZpbmUgUElDX0lSVF9CUklER0VfQUVSUl9JTkRFWAkyNQorI2RlZmluZSBQSUNfSVJUX0JSSURHRV9CRVJSX0lOREVYCTI2CisjZGVmaW5lIFBJQ19JUlRfQlJJREdFX1RCX1hMUl9JTkRFWAkyNworI2RlZmluZSBQSUNfSVJUX0JSSURHRV9BRVJSX05NSV9JTkRFWAkyOAorLyogWExTICovCisjZGVmaW5lIFBJQ19JUlRfR01BQzRfSU5ERVgJCTIxCisjZGVmaW5lIFBJQ19JUlRfR01BQzVfSU5ERVgJCTIyCisjZGVmaW5lIFBJQ19JUlRfR01BQzZfSU5ERVgJCTIzCisjZGVmaW5lIFBJQ19JUlRfR01BQzdfSU5ERVgJCTI0CisjZGVmaW5lIFBJQ19JUlRfQlJJREdFX0VSUl9JTkRFWAkyNQorI2RlZmluZSBQSUNfSVJUX1BDSUVfTElOSzBfSU5ERVgJMjYKKyNkZWZpbmUgUElDX0lSVF9QQ0lFX0xJTksxX0lOREVYCTI3CisjZGVmaW5lIFBJQ19JUlRfUENJRV9MSU5LMl9JTkRFWAkyMworI2RlZmluZSBQSUNfSVJUX1BDSUVfTElOSzNfSU5ERVgJMjQKKyNkZWZpbmUgUElDX0lSVF9QQ0lFX1hMU0IwX0xJTksyX0lOREVYCTI4CisjZGVmaW5lIFBJQ19JUlRfUENJRV9YTFNCMF9MSU5LM19JTkRFWAkyOQorI2RlZmluZSBQSUNfSVJUX1NSSU9fTElOSzBfSU5ERVgJMjYKKyNkZWZpbmUgUElDX0lSVF9TUklPX0xJTksxX0lOREVYCTI3CisjZGVmaW5lIFBJQ19JUlRfU1JJT19MSU5LMl9JTkRFWAkyOAorI2RlZmluZSBQSUNfSVJUX1NSSU9fTElOSzNfSU5ERVgJMjkKKyNkZWZpbmUgUElDX0lSVF9QQ0lFX0lOVF9JTkRFWAkJMjgKKyNkZWZpbmUgUElDX0lSVF9QQ0lFX0ZBVEFMX0lOREVYCTI5CisjZGVmaW5lIFBJQ19JUlRfR1BJT19CX0lOREVYCQkzMAorI2RlZmluZSBQSUNfSVJUX1VTQl9JTkRFWAkJMzEKKy8qIFhMUyAqLworI2RlZmluZSBQSUNfTlVNX0lSVFMJCQkzMgorCisKKyNkZWZpbmUgUElDX0NMT0NLX1RJTUVSCQkJNworCisvKiBQSUMgUmVnaXN0ZXJzICovCisjZGVmaW5lIFBJQ19DVFJMCQkJMHgwMAorI2RlZmluZSBQSUNfSVBJCQkJCTB4MDQKKyNkZWZpbmUgUElDX0lOVF9BQ0sJCQkweDA2CisKKyNkZWZpbmUgV0RfTUFYX1ZBTF8wCQkJMHgwOAorI2RlZmluZSBXRF9NQVhfVkFMXzEJCQkweDA5CisjZGVmaW5lIFdEX01BU0tfMAkJCTB4MGEKKyNkZWZpbmUgV0RfTUFTS18xCQkJMHgwYgorI2RlZmluZSBXRF9IRUFSQkVBVF8wCQkJMHgwYworI2RlZmluZSBXRF9IRUFSQkVBVF8xCQkJMHgwZAorCisjZGVmaW5lIFBJQ19JUlRfMF9CQVNFCQkJMHg0MAorI2RlZmluZSBQSUNfSVJUXzFfQkFTRQkJCTB4ODAKKyNkZWZpbmUgUElDX1RJTUVSX01BWFZBTF8wX0JBU0UJCTB4MTAwCisjZGVmaW5lIFBJQ19USU1FUl9NQVhWQUxfMV9CQVNFCQkweDExMAorI2RlZmluZSBQSUNfVElNRVJfQ09VTlRfMF9CQVNFCQkweDEyMAorI2RlZmluZSBQSUNfVElNRVJfQ09VTlRfMV9CQVNFCQkweDEzMAorCisjZGVmaW5lIFBJQ19JUlRfMChwaWNpbnRyKSAgICAgIChQSUNfSVJUXzBfQkFTRSArIChwaWNpbnRyKSkKKyNkZWZpbmUgUElDX0lSVF8xKHBpY2ludHIpCShQSUNfSVJUXzFfQkFTRSArIChwaWNpbnRyKSkKKworI2RlZmluZSBQSUNfVElNRVJfTUFYVkFMXzAoaSkJKFBJQ19USU1FUl9NQVhWQUxfMF9CQVNFICsgKGkpKQorI2RlZmluZSBQSUNfVElNRVJfTUFYVkFMXzEoaSkJKFBJQ19USU1FUl9NQVhWQUxfMV9CQVNFICsgKGkpKQorI2RlZmluZSBQSUNfVElNRVJfQ09VTlRfMChpKQkoUElDX1RJTUVSX0NPVU5UXzBfQkFTRSArIChpKSkKKyNkZWZpbmUgUElDX1RJTUVSX0NPVU5UXzEoaSkJKFBJQ19USU1FUl9DT1VOVF8wX0JBU0UgKyAoaSkpCisKKy8qCisgKiBNYXBwaW5nIGJldHdlZW4gaGFyZHdhcmUgaW50ZXJydXB0IG51bWJlcnMgYW5kIElSUXMgb24gQ1BVCisgKiB3ZSB1c2UgYSBzaW1wbGUgc2NoZW1lIHRvIG1hcCBQSUMgaW50ZXJydXB0cyAwLTMxIHRvIElSUXMKKyAqIDgtMzkuIFRoaXMgbGVhdmVzIHRoZSBJUlEgMC03IGZvciBjcHUgaW50ZXJydXB0cyBsaWtlCisgKiBjb3VudC9jb21wYXJlIGFuZCBGTU4KKyAqLworI2RlZmluZSBQSUNfSVJRX0JBU0UgICAgICAgICAgICA4CisjZGVmaW5lIFBJQ19JTlRSX1RPX0lSUShpKSAgICAgIChQSUNfSVJRX0JBU0UgKyAoaSkpCisjZGVmaW5lIFBJQ19JUlFfVE9fSU5UUihpKSAgICAgICgoaSkgLSBQSUNfSVJRX0JBU0UpCisKKyNkZWZpbmUgUElDX0lSVF9GSVJTVF9JUlEJUElDX0lSUV9CQVNFCisjZGVmaW5lIFBJQ19XRF9JUlEJCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX1dEX0lOREVYKQorI2RlZmluZSBQSUNfVElNRVJfMF9JUlEJCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX1RJTUVSXzBfSU5ERVgpCisjZGVmaW5lIFBJQ19USU1FUl8xX0lSUQkJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfVElNRVJfMV9JTkRFWCkKKyNkZWZpbmUgUElDX1RJTUVSXzJfSVJRCQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9USU1FUl8yX0lOREVYKQorI2RlZmluZSBQSUNfVElNRVJfM19JUlEJCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX1RJTUVSXzNfSU5ERVgpCisjZGVmaW5lIFBJQ19USU1FUl80X0lSUQkJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfVElNRVJfNF9JTkRFWCkKKyNkZWZpbmUgUElDX1RJTUVSXzVfSVJRCQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9USU1FUl81X0lOREVYKQorI2RlZmluZSBQSUNfVElNRVJfNl9JUlEJCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX1RJTUVSXzZfSU5ERVgpCisjZGVmaW5lIFBJQ19USU1FUl83X0lSUQkJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfVElNRVJfN19JTkRFWCkKKyNkZWZpbmUgUElDX0NMT0NLX0lSUQkJKFBJQ19USU1FUl83X0lSUSkKKyNkZWZpbmUgUElDX1VBUlRfMF9JUlEJCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX1VBUlRfMF9JTkRFWCkKKyNkZWZpbmUgUElDX1VBUlRfMV9JUlEJCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX1VBUlRfMV9JTkRFWCkKKyNkZWZpbmUgUElDX0kyQ18wX0lSUQkJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfSTJDXzBfSU5ERVgpCisjZGVmaW5lIFBJQ19JMkNfMV9JUlEJCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX0kyQ18xX0lOREVYKQorI2RlZmluZSBQSUNfUENNQ0lBX0lSUQkJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfUENNQ0lBX0lOREVYKQorI2RlZmluZSBQSUNfR1BJT19JUlEJCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX0dQSU9fSU5ERVgpCisjZGVmaW5lIFBJQ19IWVBFUl9JUlEJCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX0hZUEVSX0lOREVYKQorI2RlZmluZSBQSUNfUENJWF9JUlEJCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX1BDSVhfSU5ERVgpCisvKiBYTFMgKi8KKyNkZWZpbmUgUElDX0NERV9JUlEJCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX0NERV9JTkRFWCkKKyNkZWZpbmUgUElDX0JSSURHRV9UQl9YTFNfSVJRCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX0JSSURHRV9UQl9YTFNfSU5ERVgpCisvKiBlbmQgWExTICovCisjZGVmaW5lIFBJQ19HTUFDXzBfSVJRCQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9HTUFDMF9JTkRFWCkKKyNkZWZpbmUgUElDX0dNQUNfMV9JUlEJCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX0dNQUMxX0lOREVYKQorI2RlZmluZSBQSUNfR01BQ18yX0lSUQkJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfR01BQzJfSU5ERVgpCisjZGVmaW5lIFBJQ19HTUFDXzNfSVJRCQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9HTUFDM19JTkRFWCkKKyNkZWZpbmUgUElDX1hHU18wX0lSUQkJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfWEdTMF9JTkRFWCkKKyNkZWZpbmUgUElDX1hHU18xX0lSUQkJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfWEdTMV9JTkRFWCkKKyNkZWZpbmUgUElDX0hZUEVSX0ZBVEFMX0lSUQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9IWVBFUl9GQVRBTF9JTkRFWCkKKyNkZWZpbmUgUElDX1BDSVhfRkFUQUxfSVJRCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX1BDSVhfRkFUQUxfSU5ERVgpCisjZGVmaW5lIFBJQ19CUklER0VfQUVSUl9JUlEJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfQlJJREdFX0FFUlJfSU5ERVgpCisjZGVmaW5lIFBJQ19CUklER0VfQkVSUl9JUlEJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfQlJJREdFX0JFUlJfSU5ERVgpCisjZGVmaW5lIFBJQ19CUklER0VfVEJfWExSX0lSUQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9CUklER0VfVEJfWExSX0lOREVYKQorI2RlZmluZSBQSUNfQlJJREdFX0FFUlJfTk1JX0lSUQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9CUklER0VfQUVSUl9OTUlfSU5ERVgpCisvKiBYTFMgZGVmaW5lcyAqLworI2RlZmluZSBQSUNfR01BQ180X0lSUQkJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfR01BQzRfSU5ERVgpCisjZGVmaW5lIFBJQ19HTUFDXzVfSVJRCQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9HTUFDNV9JTkRFWCkKKyNkZWZpbmUgUElDX0dNQUNfNl9JUlEJCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX0dNQUM2X0lOREVYKQorI2RlZmluZSBQSUNfR01BQ183X0lSUQkJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfR01BQzdfSU5ERVgpCisjZGVmaW5lIFBJQ19CUklER0VfRVJSX0lSUQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9CUklER0VfRVJSX0lOREVYKQorI2RlZmluZSBQSUNfUENJRV9MSU5LMF9JUlEJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfUENJRV9MSU5LMF9JTkRFWCkKKyNkZWZpbmUgUElDX1BDSUVfTElOSzFfSVJRCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX1BDSUVfTElOSzFfSU5ERVgpCisjZGVmaW5lIFBJQ19QQ0lFX0xJTksyX0lSUQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9QQ0lFX0xJTksyX0lOREVYKQorI2RlZmluZSBQSUNfUENJRV9MSU5LM19JUlEJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfUENJRV9MSU5LM19JTkRFWCkKKyNkZWZpbmUgUElDX1BDSUVfWExTQjBfTElOSzJfSVJRIFBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX1BDSUVfWExTQjBfTElOSzJfSU5ERVgpCisjZGVmaW5lIFBJQ19QQ0lFX1hMU0IwX0xJTkszX0lSUSBQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9QQ0lFX1hMU0IwX0xJTkszX0lOREVYKQorI2RlZmluZSBQSUNfU1JJT19MSU5LMF9JUlEJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfU1JJT19MSU5LMF9JTkRFWCkKKyNkZWZpbmUgUElDX1NSSU9fTElOSzFfSVJRCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX1NSSU9fTElOSzFfSU5ERVgpCisjZGVmaW5lIFBJQ19TUklPX0xJTksyX0lSUQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9TUklPX0xJTksyX0lOREVYKQorI2RlZmluZSBQSUNfU1JJT19MSU5LM19JUlEJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfU1JJT19MSU5LM19JTkRFWCkKKyNkZWZpbmUgUElDX1BDSUVfSU5UX0lSUQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9QQ0lFX0lOVF9fSU5ERVgpCisjZGVmaW5lIFBJQ19QQ0lFX0ZBVEFMX0lSUQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9QQ0lFX0ZBVEFMX0lOREVYKQorI2RlZmluZSBQSUNfR1BJT19CX0lSUQkJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfR1BJT19CX0lOREVYKQorI2RlZmluZSBQSUNfVVNCX0lSUQkJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfVVNCX0lOREVYKQorI2RlZmluZSBQSUNfSVJUX0xBU1RfSVJRCVBJQ19VU0JfSVJRCisvKiBlbmQgWExTICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitzdGF0aWMgaW5saW5lIHZvaWQgcGljX3NlbmRfaXBpKHUzMiBpcGkpCit7CisJbmxtX3JlZ190ICptbWlvID0gbmV0bG9naWNfaW9fbW1pbyhORVRMT0dJQ19JT19QSUNfT0ZGU0VUKTsKKworCW5ldGxvZ2ljX3dyaXRlX3JlZyhtbWlvLCBQSUNfSVBJLCBpcGkpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBwaWNfcmVhZF9jb250cm9sKHZvaWQpCit7CisJbmxtX3JlZ190ICptbWlvID0gbmV0bG9naWNfaW9fbW1pbyhORVRMT0dJQ19JT19QSUNfT0ZGU0VUKTsKKworCXJldHVybiBuZXRsb2dpY19yZWFkX3JlZyhtbWlvLCBQSUNfQ1RSTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwaWNfd3JpdGVfY29udHJvbCh1MzIgY29udHJvbCkKK3sKKwlubG1fcmVnX3QgKm1taW8gPSBuZXRsb2dpY19pb19tbWlvKE5FVExPR0lDX0lPX1BJQ19PRkZTRVQpOworCisJbmV0bG9naWNfd3JpdGVfcmVnKG1taW8sIFBJQ19DVFJMLCBjb250cm9sKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBpY191cGRhdGVfY29udHJvbCh1MzIgY29udHJvbCkKK3sKKwlubG1fcmVnX3QgKm1taW8gPSBuZXRsb2dpY19pb19tbWlvKE5FVExPR0lDX0lPX1BJQ19PRkZTRVQpOworCisJbmV0bG9naWNfd3JpdGVfcmVnKG1taW8sIFBJQ19DVFJMLAorCQkoY29udHJvbCB8IG5ldGxvZ2ljX3JlYWRfcmVnKG1taW8sIFBJQ19DVFJMKSkpOworfQorCisjZGVmaW5lIFBJQ19JUlFfSVNfRURHRV9UUklHR0VSRUQoaXJxKQkoKChpcnEpID49IFBJQ19USU1FUl8wX0lSUSkgJiYgXAorCQkJCQkoKGlycSkgPD0gUElDX1RJTUVSXzdfSVJRKSkKKyNkZWZpbmUgUElDX0lSUV9JU19JUlQoaXJxKQkJKCgoaXJxKSA+PSBQSUNfSVJUX0ZJUlNUX0lSUSkgJiYgXAorCQkJCQkoKGlycSkgPD0gUElDX0lSVF9MQVNUX0lSUSkpCisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fTkxNX1hMUl9QSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL25ldGxvZ2ljL3hsci94bHIuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9uZXRsb2dpYy94bHIveGxyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U2MzcyNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9uZXRsb2dpYy94bHIveGxyLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAzLTIwMTEgTmV0TG9naWMgTWljcm9zeXN0ZW1zLCBJbmMuIChOZXRMb2dpYykuIEFsbCByaWdodHMKKyAqIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZSBOZXRMb2dpYworICogbGljZW5zZSBiZWxvdzoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTkVUTE9HSUMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIE5FVExPR0lDIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTgorICogSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfQVNNX05MTV9YTFJfSAorI2RlZmluZSBfQVNNX05MTV9YTFJfSAorCisvKiBQbGF0Zm9ybSBVQVJUIGZ1bmN0aW9ucyAqLworc3RydWN0IHVhcnRfcG9ydDsKK3Vuc2lnbmVkIGludCBubG1feGxyX3VhcnRfaW4oc3RydWN0IHVhcnRfcG9ydCAqLCBpbnQpOwordm9pZCBubG1feGxyX3VhcnRfb3V0KHN0cnVjdCB1YXJ0X3BvcnQgKiwgaW50LCBpbnQpOworCisvKiBTTVAgc3VwcG9ydCBmdW5jdGlvbnMgKi8KK3N0cnVjdCBpcnFfZGVzYzsKK3ZvaWQgbmxtX3NtcF9mdW5jdGlvbl9pcGlfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpOwordm9pZCBubG1fc21wX3Jlc2NoZWRfaXBpX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKTsKK2ludCBubG1fd2FrZXVwX3NlY29uZGFyeV9jcHVzKHUzMiB3YWtldXBfbWFzayk7Cit2b2lkIG5sbV9zbXBfaXJxX2luaXQodm9pZCk7Cit2b2lkIG5sbV9ib290X3NtcF9ubWkodm9pZCk7Cit2b2lkIHByb21fcHJlX2Jvb3Rfc2Vjb25kYXJ5X2NwdXModm9pZCk7CisKK2V4dGVybiBzdHJ1Y3QgcGxhdF9zbXBfb3BzIG5sbV9zbXBfb3BzOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbmxtX2NvbW1vbl9lYmFzZTsKKworLyogWExTIEIgc2lsaWNvbiAiUm9vayIgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG5sbV9jaGlwX2lzX3hsc19iKHZvaWQpCit7CisJdWludDMyX3QgcHJpZCA9IHJlYWRfYzBfcHJpZCgpOworCisJcmV0dXJuICgocHJpZCAmIDB4ZjAwMCkgPT0gMHg0MDAwKTsKK30KKworLyoKKyAqICBYTFIgY2hpcCB0eXBlcworICovCisgLyogVGhlIFhMUyBwcm9kdWN0IGxpbmUgaGFzIGNoaXAgdmVyc2lvbnMgMHhbNDhjXT8gKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG5sbV9jaGlwX2lzX3hscyh2b2lkKQoreworCXVpbnQzMl90IHByaWQgPSByZWFkX2MwX3ByaWQoKTsKKworCXJldHVybiAoKHByaWQgJiAweGYwMDApID09IDB4ODAwMCB8fCAocHJpZCAmIDB4ZjAwMCkgPT0gMHg0MDAwIHx8CisJCShwcmlkICYgMHhmMDAwKSA9PSAweGMwMDApOworfQorCisjZW5kaWYgLyogX0FTTV9OTE1fWExSX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCA5ZjFiOGRiLi5kZTM5YjFmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0xNDEsNyArMTQxLDggQEAKICNkZWZpbmUgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSAoKHJlZ3MpLT5jcDBfZXBjKQogI2RlZmluZSBwcm9maWxlX3BjKHJlZ3MpIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykKIAotZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBkb19zeXNjYWxsX3RyYWNlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgZW50cnlleGl0KTsKK2V4dGVybiBhc21saW5rYWdlIHZvaWQgc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gYXNtbGlua2FnZSB2b2lkIHN5c2NhbGxfdHJhY2VfbGVhdmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCiBleHRlcm4gTk9SRVRfVFlQRSB2b2lkIGRpZShjb25zdCBjaGFyICosIHN0cnVjdCBwdF9yZWdzICopIEFUVFJJQl9OT1JFVDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCBkNzExNjBkLi45N2Y4YmY2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtMTQ5LDYgKzE0OSw5IEBACiAjZGVmaW5lIF9USUZfRlBVQk9VTkQJCSgxPDxUSUZfRlBVQk9VTkQpCiAjZGVmaW5lIF9USUZfTE9BRF9XQVRDSAkJKDE8PFRJRl9MT0FEX1dBVENIKQogCisvKiB3b3JrIHRvIGRvIGluIHN5c2NhbGxfdHJhY2VfbGVhdmUoKSAqLworI2RlZmluZSBfVElGX1dPUktfU1lTQ0FMTF9FWElUCShfVElGX1NZU0NBTExfVFJBQ0UgfCBfVElGX1NZU0NBTExfQVVESVQpCisKIC8qIHdvcmsgdG8gZG8gb24gaW50ZXJydXB0L2V4Y2VwdGlvbiByZXR1cm4gKi8KICNkZWZpbmUgX1RJRl9XT1JLX01BU0sJCSgweDAwMDBmZmVmICYJCQkJXAogCQkJCQl+KF9USUZfU0VDQ09NUCB8IF9USUZfU1lTQ0FMTF9BVURJVCkpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGltZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3RpbWUuaAppbmRleCBjN2YxYmZlLi5iYzE0NDQ3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGltZS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90aW1lLmgKQEAgLTg0LDEyICs4NCw2IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNsb2Nrc291cmNlX3NldF9jbG9jayhzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzLAotCQkJCQkgdW5zaWduZWQgaW50IGNsb2NrKQotewotCWNsb2Nrc291cmNlX2NhbGNfbXVsdF9zaGlmdChjcywgY2xvY2ssIDQpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgY2xvY2tldmVudF9zZXRfY2xvY2soc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2QsCiAJCQkJCXVuc2lnbmVkIGludCBjbG9jaykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qYXp6L2phenpkbWEuYyBiL2FyY2gvbWlwcy9qYXp6L2phenpkbWEuYwppbmRleCA5Y2U5ZjY0Li4yZDhlNDQ3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvamF6ei9qYXp6ZG1hLmMKKysrIGIvYXJjaC9taXBzL2phenovamF6emRtYS5jCkBAIC0yMTEsNyArMjExLDcgQEAKICAqLwogaW50IHZkbWFfcmVtYXAodW5zaWduZWQgbG9uZyBsYWRkciwgdW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQogewotCWludCBmaXJzdCwgcGFnZXMsIG5wYWdlczsKKwlpbnQgZmlyc3QsIHBhZ2VzOwogCiAJaWYgKGxhZGRyID4gMHhmZmZmZmYpIHsKIAkJaWYgKHZkbWFfZGVidWcpCkBAIC0yMjgsOCArMjI4LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CS8qIGludmFsaWQgcGh5c2ljYWwgYWRkcmVzcyAqLwogCX0KIAotCW5wYWdlcyA9IHBhZ2VzID0KLQkgICAgKCgocGFkZHIgJiAoVkRNQV9QQUdFU0laRSAtIDEpKSArIHNpemUpID4+IDEyKSArIDE7CisJcGFnZXMgPSAoKChwYWRkciAmIChWRE1BX1BBR0VTSVpFIC0gMSkpICsgc2l6ZSkgPj4gMTIpICsgMTsKIAlmaXJzdCA9IGxhZGRyID4+IDEyOwogCWlmICh2ZG1hX2RlYnVnKQogCQlwcmludGsoInZkbWFfcmVtYXA6IGZpcnN0PSV4LCBwYWdlcz0leFxuIiwgZmlyc3QsIHBhZ2VzKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qejQ3NDAvZG1hLmMgYi9hcmNoL21pcHMvano0NzQwL2RtYS5jCmluZGV4IDVlYmU3NWEuLmQ3ZmViODkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9qejQ3NDAvZG1hLmMKKysrIGIvYXJjaC9taXBzL2p6NDc0MC9kbWEuYwpAQCAtMjQyLDkgKzI0Miw3IEBACiAKIHN0YXRpYyB2b2lkIGp6NDc0MF9kbWFfY2hhbl9pcnEoc3RydWN0IGp6NDc0MF9kbWFfY2hhbiAqZG1hKQogewotCXVpbnQzMl90IHN0YXR1czsKLQotCXN0YXR1cyA9IGp6NDc0MF9kbWFfcmVhZChKWl9SRUdfRE1BX1NUQVRVU19DVFJMKGRtYS0+aWQpKTsKKwkodm9pZCkgano0NzQwX2RtYV9yZWFkKEpaX1JFR19ETUFfU1RBVFVTX0NUUkwoZG1hLT5pZCkpOwogCiAJano0NzQwX2RtYV93cml0ZV9tYXNrKEpaX1JFR19ETUFfU1RBVFVTX0NUUkwoZG1hLT5pZCksIDAsCiAJCUpaX0RNQV9TVEFUVVNfQ1RSTF9FTkFCTEUgfCBKWl9ETUFfU1RBVFVTX0NUUkxfVFJBTlNGRVJfRE9ORSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvano0NzQwL3NldHVwLmMgYi9hcmNoL21pcHMvano0NzQwL3NldHVwLmMKaW5kZXggNmE5ZTE0ZC4uZDk3Y2ZiZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2p6NDc0MC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9qejQ3NDAvc2V0dXAuYwpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAsIExhcnMtUGV0ZXIgQ2xhdXNlbiA8bGFyc0BtZXRhZm9vLmRlPgorICogIENvcHlyaWdodCAoQykgMjAxMSwgTWFhcnRlbiB0ZXIgSHV1cm5lIDxtYWFydGVuQHRyZWV3YWxrZXIub3JnPgogICogIEpaNDc0MCBzZXR1cCBjb2RlCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CkBAIC0xNCwxMyArMTUsNDQgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLWp6NDc0MC9iYXNlLmg+CisKICNpbmNsdWRlICJyZXNldC5oIgogCisKKyNkZWZpbmUgSlo0NzQwX0VNQ19TRFJBTV9DVFJMIDB4ODAKKworCitzdGF0aWMgdm9pZCBfX2luaXQgano0NzQwX2RldGVjdF9tZW0odm9pZCkKK3sKKwl2b2lkIF9faW9tZW0gKmp6X2VtY19iYXNlOworCXUzMiBjdHJsLCBidXMsIGJhbmssIHJvd3MsIGNvbHM7CisJcGh5c190IHNpemU7CisKKwlqel9lbWNfYmFzZSA9IGlvcmVtYXAoSlo0NzQwX0VNQ19CQVNFX0FERFIsIDB4MTAwKTsKKwljdHJsID0gcmVhZGwoanpfZW1jX2Jhc2UgKyBKWjQ3NDBfRU1DX1NEUkFNX0NUUkwpOworCWJ1cyA9IDIgLSAoKGN0cmwgPj4gMzEpICYgMSk7CisJYmFuayA9IDEgKyAoKGN0cmwgPj4gMTkpICYgMSk7CisJY29scyA9IDggKyAoKGN0cmwgPj4gMjYpICYgNyk7CisJcm93cyA9IDExICsgKChjdHJsID4+IDIwKSAmIDMpOworCXByaW50ayhLRVJOX0RFQlVHCisJCSJTRFJBTSBwcmVjb25maWd1cmVkOiBidXM6JXUgYmFuazoldSByb3dzOiV1IGNvbHM6JXVcbiIsCisJCWJ1cywgYmFuaywgcm93cywgY29scyk7CisJaW91bm1hcChqel9lbWNfYmFzZSk7CisKKwlzaXplID0gMSA8PCAoYnVzICsgYmFuayArIGNvbHMgKyByb3dzKTsKKwlhZGRfbWVtb3J5X3JlZ2lvbigwLCBzaXplLCBCT09UX01FTV9SQU0pOworfQorCiB2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQogewogCWp6NDc0MF9yZXNldF9pbml0KCk7CisJano0NzQwX2RldGVjdF9tZW0oKTsKIH0KIAogY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvano0NzQwL3RpbWUuYyBiL2FyY2gvbWlwcy9qejQ3NDAvdGltZS5jCmluZGV4IGZlMDE2NzguLmY4M2MyZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9qejQ3NDAvdGltZS5jCisrKyBiL2FyY2gvbWlwcy9qejQ3NDAvdGltZS5jCkBAIC04OSw3ICs4OSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIGp6NDc0MF9jbG9ja2V2ZW50ID0gewogCS5uYW1lID0gImp6NDc0MC10aW1lciIsCi0JLmZlYXR1cmVzID0gQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUMsCisJLmZlYXR1cmVzID0gQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUMgfCBDTE9DS19FVlRfRkVBVF9PTkVTSE9ULAogCS5zZXRfbmV4dF9ldmVudCA9IGp6NDc0MF9jbG9ja2V2ZW50X3NldF9uZXh0LAogCS5zZXRfbW9kZSA9IGp6NDc0MF9jbG9ja2V2ZW50X3NldF9tb2RlLAogCS5yYXRpbmcgPSAyMDAsCkBAIC0xMjEsOCArMTIxLDcgQEAKIAogCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmano0NzQwX2Nsb2NrZXZlbnQpOwogCi0JY2xvY2tzb3VyY2Vfc2V0X2Nsb2NrKCZqejQ3NDBfY2xvY2tzb3VyY2UsIGNsa19yYXRlKTsKLQlyZXQgPSBjbG9ja3NvdXJjZV9yZWdpc3Rlcigmano0NzQwX2Nsb2Nrc291cmNlKTsKKwlyZXQgPSBjbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmano0NzQwX2Nsb2Nrc291cmNlLCBjbGtfcmF0ZSk7CiAKIAlpZiAocmV0KQogCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBjbG9ja3NvdXJjZTogJWRcbiIsIHJldCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvano0NzQwL3RpbWVyLmMgYi9hcmNoL21pcHMvano0NzQwL3RpbWVyLmMKaW5kZXggYjJjMDE1MS4uNjU0ZDVjMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2p6NDc0MC90aW1lci5jCisrKyBiL2FyY2gvbWlwcy9qejQ3NDAvdGltZXIuYwpAQCAtMjcsMTEgKzI3LDEzIEBACiB7CiAJd3JpdGVsKEJJVCgxNiksIGp6NDc0MF90aW1lcl9iYXNlICsgSlpfUkVHX1RJTUVSX1NUT1BfQ0xFQVIpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoano0NzQwX3RpbWVyX2VuYWJsZV93YXRjaGRvZyk7CiAKIHZvaWQgano0NzQwX3RpbWVyX2Rpc2FibGVfd2F0Y2hkb2codm9pZCkKIHsKIAl3cml0ZWwoQklUKDE2KSwgano0NzQwX3RpbWVyX2Jhc2UgKyBKWl9SRUdfVElNRVJfU1RPUF9TRVQpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoano0NzQwX3RpbWVyX2Rpc2FibGVfd2F0Y2hkb2cpOwogCiB2b2lkIF9faW5pdCBqejQ3NDBfdGltZXJfaW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggY2VkZWUyYi4uODNiYmEzMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMva2VybmVsL01ha2VmaWxlCkBAIC01Miw2ICs1Miw3IEBACiBvYmotJChDT05GSUdfQ1BVX1RYNDlYWCkJKz0gcjRrX2ZwdS5vIHI0a19zd2l0Y2gubwogb2JqLSQoQ09ORklHX0NQVV9WUjQxWFgpCSs9IHI0a19mcHUubyByNGtfc3dpdGNoLm8KIG9iai0kKENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTikJKz0gb2N0ZW9uX3N3aXRjaC5vCitvYmotJChDT05GSUdfQ1BVX1hMUikJCSs9IHI0a19mcHUubyByNGtfc3dpdGNoLm8KIAogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcC5vCiBvYmotJChDT05GSUdfU01QX1VQKQkJKz0gc21wLXVwLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC10eHg5LmMgYi9hcmNoL21pcHMva2VybmVsL2NldnQtdHh4OS5jCmluZGV4IDBiNzM3NzMuLmYwYWI5MmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC10eHg5LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXR4eDkuYwpAQCAtNTEsOCArNTEsNyBAQAogewogCXN0cnVjdCB0eHg5X3Rtcl9yZWcgX19pb21lbSAqdG1ycHRyOwogCi0JY2xvY2tzb3VyY2Vfc2V0X2Nsb2NrKCZ0eHg5X2Nsb2Nrc291cmNlLmNzLCBUSU1FUl9DTEsoaW1idXNjbGspKTsKLQljbG9ja3NvdXJjZV9yZWdpc3RlcigmdHh4OV9jbG9ja3NvdXJjZS5jcyk7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJnR4eDlfY2xvY2tzb3VyY2UuY3MsIFRJTUVSX0NMSyhpbWJ1c2NsaykpOwogCiAJdG1ycHRyID0gaW9yZW1hcChiYXNlYWRkciwgc2l6ZW9mKHN0cnVjdCB0eHg5X3Rtcl9yZWcpKTsKIAlfX3Jhd193cml0ZWwoVENSX0JBU0UsICZ0bXJwdHItPnRjcik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYwppbmRleCBmNjVkNGM4Li5iYjEzM2QxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKQEAgLTI5MSw2ICsyOTEsMTIgQEAKICNlbmRpZgogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2VsZl9wbGF0Zm9ybShpbnQgY3B1LCBjb25zdCBjaGFyICpwbGF0KQoreworCWlmIChjcHUgPT0gMCkKKwkJX19lbGZfcGxhdGZvcm0gPSBwbGF0OworfQorCiAvKgogICogR2V0IHRoZSBGUFUgSW1wbGVtZW50YXRpb24vUmV2aXNpb24uCiAgKi8KQEAgLTYxNCw2ICs2MjAsMTYgQEAKIAljYXNlIFBSSURfSU1QX0xPT05HU09OMjoKIAkJYy0+Y3B1dHlwZSA9IENQVV9MT09OR1NPTjI7CiAJCV9fY3B1X25hbWVbY3B1XSA9ICJJQ1QgTG9vbmdzb24tMiI7CisKKwkJc3dpdGNoIChjLT5wcm9jZXNzb3JfaWQgJiBQUklEX1JFVl9NQVNLKSB7CisJCWNhc2UgUFJJRF9SRVZfTE9PTkdTT04yRToKKwkJCXNldF9lbGZfcGxhdGZvcm0oY3B1LCAibG9vbmdzb24yZSIpOworCQkJYnJlYWs7CisJCWNhc2UgUFJJRF9SRVZfTE9PTkdTT04yRjoKKwkJCXNldF9lbGZfcGxhdGZvcm0oY3B1LCAibG9vbmdzb24yZiIpOworCQkJYnJlYWs7CisJCX0KKwogCQljLT5pc2FfbGV2ZWwgPSBNSVBTX0NQVV9JU0FfSUlJOwogCQljLT5vcHRpb25zID0gUjRLX09QVFMgfAogCQkJICAgICBNSVBTX0NQVV9GUFUgfCBNSVBTX0NQVV9MTFNDIHwKQEAgLTkxMSwxMiArOTI3LDE0IEBACiAJY2FzZSBQUklEX0lNUF9CTUlQUzMyX1JFVjg6CiAJCWMtPmNwdXR5cGUgPSBDUFVfQk1JUFMzMjsKIAkJX19jcHVfbmFtZVtjcHVdID0gIkJyb2FkY29tIEJNSVBTMzIiOworCQlzZXRfZWxmX3BsYXRmb3JtKGNwdSwgImJtaXBzMzIiKTsKIAkJYnJlYWs7CiAJY2FzZSBQUklEX0lNUF9CTUlQUzMzMDA6CiAJY2FzZSBQUklEX0lNUF9CTUlQUzMzMDBfQUxUOgogCWNhc2UgUFJJRF9JTVBfQk1JUFMzMzAwX0JVRzoKIAkJYy0+Y3B1dHlwZSA9IENQVV9CTUlQUzMzMDA7CiAJCV9fY3B1X25hbWVbY3B1XSA9ICJCcm9hZGNvbSBCTUlQUzMzMDAiOworCQlzZXRfZWxmX3BsYXRmb3JtKGNwdSwgImJtaXBzMzMwMCIpOwogCQlicmVhazsKIAljYXNlIFBSSURfSU1QX0JNSVBTNDNYWDogewogCQlpbnQgcmV2ID0gYy0+cHJvY2Vzc29yX2lkICYgMHhmZjsKQEAgLTkyNSwxNSArOTQzLDE4IEBACiAJCQkJcmV2IDw9IFBSSURfUkVWX0JNSVBTNDM4MF9ISSkgewogCQkJYy0+Y3B1dHlwZSA9IENQVV9CTUlQUzQzODA7CiAJCQlfX2NwdV9uYW1lW2NwdV0gPSAiQnJvYWRjb20gQk1JUFM0MzgwIjsKKwkJCXNldF9lbGZfcGxhdGZvcm0oY3B1LCAiYm1pcHM0MzgwIik7CiAJCX0gZWxzZSB7CiAJCQljLT5jcHV0eXBlID0gQ1BVX0JNSVBTNDM1MDsKIAkJCV9fY3B1X25hbWVbY3B1XSA9ICJCcm9hZGNvbSBCTUlQUzQzNTAiOworCQkJc2V0X2VsZl9wbGF0Zm9ybShjcHUsICJibWlwczQzNTAiKTsKIAkJfQogCQlicmVhazsKIAl9CiAJY2FzZSBQUklEX0lNUF9CTUlQUzUwMDA6CiAJCWMtPmNwdXR5cGUgPSBDUFVfQk1JUFM1MDAwOwogCQlfX2NwdV9uYW1lW2NwdV0gPSAiQnJvYWRjb20gQk1JUFM1MDAwIjsKKwkJc2V0X2VsZl9wbGF0Zm9ybShjcHUsICJibWlwczUwMDAiKTsKIAkJYy0+b3B0aW9ucyB8PSBNSVBTX0NQVV9VTFJJOwogCQlicmVhazsKIAl9CkBAIC05NTYsMTQgKzk3NywxMiBAQAogCQljLT5jcHV0eXBlID0gQ1BVX0NBVklVTV9PQ1RFT05fUExVUzsKIAkJX19jcHVfbmFtZVtjcHVdID0gIkNhdml1bSBPY3Rlb24rIjsKIHBsYXRmb3JtOgotCQlpZiAoY3B1ID09IDApCi0JCQlfX2VsZl9wbGF0Zm9ybSA9ICJvY3Rlb24iOworCQlzZXRfZWxmX3BsYXRmb3JtKGNwdSwgIm9jdGVvbiIpOwogCQlicmVhazsKIAljYXNlIFBSSURfSU1QX0NBVklVTV9DTjYzWFg6CiAJCWMtPmNwdXR5cGUgPSBDUFVfQ0FWSVVNX09DVEVPTjI7CiAJCV9fY3B1X25hbWVbY3B1XSA9ICJDYXZpdW0gT2N0ZW9uIElJIjsKLQkJaWYgKGNwdSA9PSAwKQotCQkJX19lbGZfcGxhdGZvcm0gPSAib2N0ZW9uMiI7CisJCXNldF9lbGZfcGxhdGZvcm0oY3B1LCAib2N0ZW9uMiIpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9JTkZPICJVbmtub3duIE9jdGVvbiBjaGlwIVxuIik7CkBAIC05ODgsNiArMTAwNyw1OSBAQAogCX0KIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGNwdV9wcm9iZV9uZXRsb2dpYyhzdHJ1Y3QgY3B1aW5mb19taXBzICpjLCBpbnQgY3B1KQoreworCWRlY29kZV9jb25maWdzKGMpOworCisJYy0+b3B0aW9ucyA9IChNSVBTX0NQVV9UTEIgICAgICAgfAorCQkJTUlQU19DUFVfNEtFWCAgICB8CisJCQlNSVBTX0NQVV9DT1VOVEVSIHwKKwkJCU1JUFNfQ1BVX0RJVkVDICAgfAorCQkJTUlQU19DUFVfV0FUQ0ggICB8CisJCQlNSVBTX0NQVV9FSlRBRyAgIHwKKwkJCU1JUFNfQ1BVX0xMU0MpOworCisJc3dpdGNoIChjLT5wcm9jZXNzb3JfaWQgJiAweGZmMDApIHsKKwljYXNlIFBSSURfSU1QX05FVExPR0lDX1hMUjczMjoKKwljYXNlIFBSSURfSU1QX05FVExPR0lDX1hMUjcxNjoKKwljYXNlIFBSSURfSU1QX05FVExPR0lDX1hMUjUzMjoKKwljYXNlIFBSSURfSU1QX05FVExPR0lDX1hMUjMwODoKKwljYXNlIFBSSURfSU1QX05FVExPR0lDX1hMUjUzMkM6CisJY2FzZSBQUklEX0lNUF9ORVRMT0dJQ19YTFI1MTZDOgorCWNhc2UgUFJJRF9JTVBfTkVUTE9HSUNfWExSNTA4QzoKKwljYXNlIFBSSURfSU1QX05FVExPR0lDX1hMUjMwOEM6CisJCWMtPmNwdXR5cGUgPSBDUFVfWExSOworCQlfX2NwdV9uYW1lW2NwdV0gPSAiTmV0bG9naWMgWExSIjsKKwkJYnJlYWs7CisKKwljYXNlIFBSSURfSU1QX05FVExPR0lDX1hMUzYwODoKKwljYXNlIFBSSURfSU1QX05FVExPR0lDX1hMUzQwODoKKwljYXNlIFBSSURfSU1QX05FVExPR0lDX1hMUzQwNDoKKwljYXNlIFBSSURfSU1QX05FVExPR0lDX1hMUzIwODoKKwljYXNlIFBSSURfSU1QX05FVExPR0lDX1hMUzIwNDoKKwljYXNlIFBSSURfSU1QX05FVExPR0lDX1hMUzEwODoKKwljYXNlIFBSSURfSU1QX05FVExPR0lDX1hMUzEwNDoKKwljYXNlIFBSSURfSU1QX05FVExPR0lDX1hMUzYxNkI6CisJY2FzZSBQUklEX0lNUF9ORVRMT0dJQ19YTFM2MDhCOgorCWNhc2UgUFJJRF9JTVBfTkVUTE9HSUNfWExTNDE2QjoKKwljYXNlIFBSSURfSU1QX05FVExPR0lDX1hMUzQxMkI6CisJY2FzZSBQUklEX0lNUF9ORVRMT0dJQ19YTFM0MDhCOgorCWNhc2UgUFJJRF9JTVBfTkVUTE9HSUNfWExTNDA0QjoKKwkJYy0+Y3B1dHlwZSA9IENQVV9YTFI7CisJCV9fY3B1X25hbWVbY3B1XSA9ICJOZXRsb2dpYyBYTFMiOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0lORk8gIlVua25vd24gTmV0bG9naWMgY2hpcCBpZCBbJTAyeF0hXG4iLAorCQkgICAgICAgYy0+cHJvY2Vzc29yX2lkKTsKKwkJYy0+Y3B1dHlwZSA9IENQVV9YTFI7CisJCWJyZWFrOworCX0KKworCWMtPmlzYV9sZXZlbCA9IE1JUFNfQ1BVX0lTQV9NNjRSMTsKKwljLT50bGJzaXplID0gKChyZWFkX2MwX2NvbmZpZzEoKSA+PiAyNSkgJiAweDNmKSArIDE7Cit9CisKICNpZmRlZiBDT05GSUdfNjRCSVQKIC8qIEZvciB1c2UgYnkgdWFjY2Vzcy5oICovCiB1NjQgX191YV9saW1pdDsKQEAgLTEwMzUsNiArMTEwNyw5IEBACiAJY2FzZSBQUklEX0NPTVBfSU5HRU5JQzoKIAkJY3B1X3Byb2JlX2luZ2VuaWMoYywgY3B1KTsKIAkJYnJlYWs7CisJY2FzZSBQUklEX0NPTVBfTkVUTE9HSUM6CisJCWNwdV9wcm9iZV9uZXRsb2dpYyhjLCBjcHUpOworCQlicmVhazsKIAl9CiAKIAlCVUdfT04oIV9fY3B1X25hbWVbY3B1XSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NzcmMtYmNtMTQ4MC5jIGIvYXJjaC9taXBzL2tlcm5lbC9jc3JjLWJjbTE0ODAuYwppbmRleCA1MTQ4OWY4Li5mOTZmOTljIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NzcmMtYmNtMTQ4MC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY3NyYy1iY20xNDgwLmMKQEAgLTQ5LDYgKzQ5LDUgQEAKIAogCXBsbGRpdiA9IEdfQkNNMTQ4MF9TWVNfUExMX0RJVihfX3Jhd19yZWFkcShJT0FERFIoQV9TQ0RfU1lTVEVNX0NGRykpKTsKIAl6YmJ1cyA9ICgocGxsZGl2ID4+IDEpICogNTAwMDAwMDApICsgKChwbGxkaXYgJiAxKSAqIDI1MDAwMDAwKTsKLQljbG9ja3NvdXJjZV9zZXRfY2xvY2soY3MsIHpiYnVzKTsKLQljbG9ja3NvdXJjZV9yZWdpc3Rlcihjcyk7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooY3MsIHpiYnVzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY3NyYy1pb2FzaWMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY3NyYy1pb2FzaWMuYwppbmRleCAyM2RhMTA4Li40NmJkN2ZhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NzcmMtaW9hc2ljLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jc3JjLWlvYXNpYy5jCkBAIC01OSw3ICs1OSw1IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiSS9PIEFTSUMgY2xvY2sgZnJlcXVlbmN5ICVkSHpcbiIsIGZyZXEpOwogCiAJY2xvY2tzb3VyY2VfZGVjLnJhdGluZyA9IDIwMCArIGZyZXEgLyAxMDAwMDAwMDsKLQljbG9ja3NvdXJjZV9zZXRfY2xvY2soJmNsb2Nrc291cmNlX2RlYywgZnJlcSk7Ci0KLQljbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfZGVjKTsKKwljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2xvY2tzb3VyY2VfZGVjLCBmcmVxKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY3NyYy1wb3dlcnR2LmMgYi9hcmNoL21pcHMva2VybmVsL2NzcmMtcG93ZXJ0di5jCmluZGV4IGEyN2MxNmMuLjJlN2M1MjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY3NyYy1wb3dlcnR2LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jc3JjLXBvd2VydHYuYwpAQCAtNzgsOSArNzgsNyBAQAogCiAJY2xvY2tzb3VyY2VfbWlwcy5yYXRpbmcgPSAyMDAgKyBtaXBzX2hwdF9mcmVxdWVuY3kgLyAxMDAwMDAwMDsKIAotCWNsb2Nrc291cmNlX3NldF9jbG9jaygmY2xvY2tzb3VyY2VfbWlwcywgbWlwc19ocHRfZnJlcXVlbmN5KTsKLQotCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9taXBzKTsKKwljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2xvY2tzb3VyY2VfbWlwcywgbWlwc19ocHRfZnJlcXVlbmN5KTsKIH0KIAogLyoqCkBAIC0xMzAsNDMgKzEyOCwxNiBAQAogLyoqCiAgKiBwb3dlcnR2X3RpbV9jX2Nsb2Nrc291cmNlX2luaXQgLSBzZXQgdXAgYSBjbG9jayBzb3VyY2UgZm9yIHRoZSBUSU1fQyBjbG9jawogICoKLSAqIFRoZSBoYXJkIHBhcnQgaGVyZSBpcyBjb21pbmcgdXAgd2l0aCBhIGNvbnN0YW50IGsgYW5kIHNoaWZ0IHMgc3VjaCB0aGF0Ci0gKiB0aGUgNDgtYml0IFRJTV9DIHZhbHVlIG11bHRpcGxpZWQgYnkgayBkb2Vzbid0IG92ZXJmbG93IGFuZCB0aGF0IHZhbHVlLAotICogd2hlbiBzaGlmdGVkIHJpZ2h0IGJ5IHMsIHlpZWxkcyB0aGUgY29ycmVzcG9uZGluZyBudW1iZXIgb2YgbmFub3NlY29uZHMuCiAgKiBXZSBrbm93IHRoYXQgVElNX0MgY291bnRzIGF0IDI3IE1Iei84LCBzbyBlYWNoIGN5Y2xlIGNvcnJlc3BvbmRzIHRvCi0gKiAxIC8gKDI3LDAwMCwwMDAvOCkgc2Vjb25kcy4gTXVsdGlwbHkgdGhhdCBieSBhIGJpbGxpb24gYW5kIHlvdSBnZXQgdGhlCi0gKiBudW1iZXIgb2YgbmFub3NlY29uZHMuIFNpbmNlIHRoZSBUSU1fQyB2YWx1ZSBoYXMgNDggYml0cyBhbmQgdGhlIG1hdGggaXMKLSAqIGRvbmUgaW4gNjQgYml0cywgYXZvaWRpbmcgYW4gb3ZlcmZsb3cgbWVhbnMgdGhhdCBrIG11c3QgYmUgbGVzcyB0aGFuCi0gKiA2NCAtIDQ4ID0gMTYgYml0cy4KKyAqIDEgLyAoMjcsMDAwLDAwMC84KSBzZWNvbmRzLgogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgcG93ZXJ0dl90aW1fY19jbG9ja3NvdXJjZV9pbml0KHZvaWQpCiB7Ci0JaW50CQkJcHJlc2NhbGU7Ci0JdW5zaWduZWQgbG9uZwkJZGl2aWRlbmQ7Ci0JdW5zaWduZWQgbG9uZwkJazsKLQlpbnQJCQlzOwotCWNvbnN0IGludAkJbWF4X2tfYml0cyA9ICg2NCAtIDQ4KSAtIDE7Ci0JY29uc3QgdW5zaWduZWQgbG9uZwliaWxsaW9uID0gMTAwMDAwMDAwMDsKIAljb25zdCB1bnNpZ25lZCBsb25nCWNvdW50c19wZXJfc2Vjb25kID0gMjcwMDAwMDAgLyA4OwogCi0JcHJlc2NhbGUgPSBCSVRTX1BFUl9MT05HIC0gaWxvZzIoYmlsbGlvbikgLSAxOwotCWRpdmlkZW5kID0gYmlsbGlvbiA8PCBwcmVzY2FsZTsKLQlrID0gZGl2aWRlbmQgLyBjb3VudHNfcGVyX3NlY29uZDsKLQlzID0gaWxvZzIoaykgLSBtYXhfa19iaXRzOwotCi0JaWYgKHMgPCAwKQotCQlzID0gcHJlc2NhbGU7Ci0KLQllbHNlIHsKLQkJayA+Pj0gczsKLQkJcyArPSBwcmVzY2FsZTsKLQl9Ci0KLQljbG9ja3NvdXJjZV90aW1fYy5tdWx0ID0gazsKLQljbG9ja3NvdXJjZV90aW1fYy5zaGlmdCA9IHM7CiAJY2xvY2tzb3VyY2VfdGltX2MucmF0aW5nID0gMjAwOwogCi0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX3RpbV9jKTsKKwljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2xvY2tzb3VyY2VfdGltX2MsIGNvdW50c19wZXJfc2Vjb25kKTsKIAl0aW1fYyA9IChzdHJ1Y3QgdGltX2MgKikgYXNpY19yZWdfYWRkcih0aW1fY2gpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NzcmMtcjRrLmMgYi9hcmNoL21pcHMva2VybmVsL2NzcmMtcjRrLmMKaW5kZXggZTk1YTNjZC4uZGVjZDFmYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jc3JjLXI0ay5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY3NyYy1yNGsuYwpAQCAtMzAsOSArMzAsNyBAQAogCS8qIENhbGN1bGF0ZSBhIHNvbWV3aGF0IHJlYXNvbmFibGUgcmF0aW5nIHZhbHVlICovCiAJY2xvY2tzb3VyY2VfbWlwcy5yYXRpbmcgPSAyMDAgKyBtaXBzX2hwdF9mcmVxdWVuY3kgLyAxMDAwMDAwMDsKIAotCWNsb2Nrc291cmNlX3NldF9jbG9jaygmY2xvY2tzb3VyY2VfbWlwcywgbWlwc19ocHRfZnJlcXVlbmN5KTsKLQotCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9taXBzKTsKKwljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2xvY2tzb3VyY2VfbWlwcywgbWlwc19ocHRfZnJlcXVlbmN5KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jc3JjLXNiMTI1MC5jIGIvYXJjaC9taXBzL2tlcm5lbC9jc3JjLXNiMTI1MC5jCmluZGV4IGQxNGQzZDEuLmU5NjA2ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY3NyYy1zYjEyNTAuYworKysgYi9hcmNoL21pcHMva2VybmVsL2NzcmMtc2IxMjUwLmMKQEAgLTY1LDYgKzY1LDUgQEAKIAkJICAgICBJT0FERFIoQV9TQ0RfVElNRVJfUkVHSVNURVIoU0IxMjUwX0hQVF9OVU0sCiAJCQkJCQkgUl9TQ0RfVElNRVJfQ0ZHKSkpOwogCi0JY2xvY2tzb3VyY2Vfc2V0X2Nsb2NrKGNzLCBWX1NDRF9USU1FUl9GUkVRKTsKLQljbG9ja3NvdXJjZV9yZWdpc3Rlcihjcyk7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooY3MsIFZfU0NEX1RJTUVSX0ZSRVEpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9taXBzL2tlcm5lbC9lbnRyeS5TCmluZGV4IGZmYTMzMTAuLjM3YWNmYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL21pcHMva2VybmVsL2VudHJ5LlMKQEAgLTE2NywxNCArMTY3LDEzIEBACiBGRVhQT1JUKHN5c2NhbGxfZXhpdF93b3JrX3BhcnRpYWwpCiAJU0FWRV9TVEFUSUMKIHN5c2NhbGxfZXhpdF93b3JrOgotCWxpCXQwLCBfVElGX1NZU0NBTExfVFJBQ0UgfCBfVElGX1NZU0NBTExfQVVESVQKKwlsaQl0MCwgX1RJRl9XT1JLX1NZU0NBTExfRVhJVAogCWFuZAl0MCwgYTIJCQkjIGEyIGlzIHByZWxvYWRlZCB3aXRoIFRJX0ZMQUdTCiAJYmVxegl0MCwgd29ya19wZW5kaW5nCSMgdHJhY2UgYml0IHNldD8KLQlsb2NhbF9pcnFfZW5hYmxlCQkjIGNvdWxkIGxldCBkb19zeXNjYWxsX3RyYWNlKCkKKwlsb2NhbF9pcnFfZW5hYmxlCQkjIGNvdWxkIGxldCBzeXNjYWxsX3RyYWNlX2xlYXZlKCkKIAkJCQkJIyBjYWxsIHNjaGVkdWxlKCkgaW5zdGVhZAogCW1vdmUJYTAsIHNwCi0JbGkJYTEsIDEKLQlqYWwJZG9fc3lzY2FsbF90cmFjZQorCWphbAlzeXNjYWxsX3RyYWNlX2xlYXZlCiAJYglyZXN1bWVfdXNlcnNwYWNlCiAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfTUlQU1IyKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTX01UKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvbWlwcy9rZXJuZWwvZnRyYWNlLmMKaW5kZXggOTRjYTJiMC4uZmViODAyMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9mdHJhY2UuYworKysgYi9hcmNoL21pcHMva2VybmVsL2Z0cmFjZS5jCkBAIC0yMyw2ICsyMyw3IEBACiAKICNkZWZpbmUgSkFMIDB4MGMwMDAwMDAJCS8qIGp1bXAgJiBsaW5rOiBpcCAtLT4gcmEsIGp1bXAgdG8gdGFyZ2V0ICovCiAjZGVmaW5lIEFERFJfTUFTSyAweDAzZmZmZmZmCS8qICBvcF9jb2RlfGFkZHIgOiAzMS4uLjI2fDI1IC4uLi4wICovCisjZGVmaW5lIEpVTVBfUkFOR0VfTUFTSyAoKDFVTCA8PCAyOCkgLSAxKQogCiAjZGVmaW5lIElOU05fTk9QIDB4MDAwMDAwMDAJLyogbm9wICovCiAjZGVmaW5lIElOU05fSkFMKGFkZHIpCVwKQEAgLTQ0LDEyICs0NSwxMiBAQAogCiAJLyogamFsIChmdHJhY2VfY2FsbGVyICsgOCksIGp1bXAgb3ZlciB0aGUgZmlyc3QgdHdvIGluc3RydWN0aW9uICovCiAJYnVmID0gKHUzMiAqKSZpbnNuX2phbF9mdHJhY2VfY2FsbGVyOwotCXVhc21faV9qYWwoJmJ1ZiwgKEZUUkFDRV9BRERSICsgOCkpOworCXVhc21faV9qYWwoJmJ1ZiwgKEZUUkFDRV9BRERSICsgOCkgJiBKVU1QX1JBTkdFX01BU0spOwogCiAjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgogCS8qIGogZnRyYWNlX2dyYXBoX2NhbGxlciAqLwogCWJ1ZiA9ICh1MzIgKikmaW5zbl9qX2Z0cmFjZV9ncmFwaF9jYWxsZXI7Ci0JdWFzbV9pX2ooJmJ1ZiwgKHVuc2lnbmVkIGxvbmcpZnRyYWNlX2dyYXBoX2NhbGxlcik7CisJdWFzbV9pX2ooJmJ1ZiwgKHVuc2lnbmVkIGxvbmcpZnRyYWNlX2dyYXBoX2NhbGxlciAmIEpVTVBfUkFOR0VfTUFTSyk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9pODI1My5jIGIvYXJjaC9taXBzL2tlcm5lbC9pODI1My5jCmluZGV4IDIzOTJhN2EyLi4zOTEyMjFiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2k4MjUzLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9pODI1My5jCkBAIC0xMjUsODcgKzEyNSwxMSBAQAogCXNldHVwX2lycSgwLCAmaXJxMCk7CiB9CiAKLS8qCi0gKiBTaW5jZSB0aGUgUElUIG92ZXJmbG93cyBldmVyeSB0aWNrLCBpdHMgbm90IHZlcnkgdXNlZnVsCi0gKiB0byBqdXN0IHJlYWQgYnkgaXRzZWxmLiBTbyB1c2UgamlmZmllcyB0byBlbXVsYXRlIGEgZnJlZQotICogcnVubmluZyBjb3VudGVyOgotICovCi1zdGF0aWMgY3ljbGVfdCBwaXRfcmVhZChzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGNvdW50OwotCXUzMiBqaWZzOwotCXN0YXRpYyBpbnQgb2xkX2NvdW50OwotCXN0YXRpYyB1MzIgb2xkX2ppZnM7Ci0KLQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjUzX2xvY2ssIGZsYWdzKTsKLQkvKgotCSAqIEFsdGhvdWdoIG91ciBjYWxsZXIgbWF5IGhhdmUgdGhlIHJlYWQgc2lkZSBvZiB4dGltZV9sb2NrLAotCSAqIHRoaXMgaXMgbm93IGEgc2VxbG9jaywgYW5kIHdlIGFyZSBjaGVhdGluZyBpbiB0aGlzIHJvdXRpbmUKLQkgKiBieSBoYXZpbmcgc2lkZSBlZmZlY3RzIG9uIHN0YXRlIHRoYXQgd2UgY2Fubm90IHVuZG8gaWYKLQkgKiB0aGVyZSBpcyBhIGNvbGxpc2lvbiBvbiB0aGUgc2VxbG9jayBhbmQgb3VyIGNhbGxlciBoYXMgdG8KLQkgKiByZXRyeS4gIChOYW1lbHksIG9sZF9qaWZzIGFuZCBvbGRfY291bnQuKSAgU28gd2UgbXVzdCB0cmVhdAotCSAqIGppZmZpZXMgYXMgdm9sYXRpbGUgZGVzcGl0ZSB0aGUgbG9jay4gIFdlIHJlYWQgamlmZmllcwotCSAqIGJlZm9yZSBsYXRjaGluZyB0aGUgdGltZXIgY291bnQgdG8gZ3VhcmFudGVlIHRoYXQgYWx0aG91Z2gKLQkgKiB0aGUgamlmZmllcyB2YWx1ZSBtaWdodCBiZSBvbGRlciB0aGFuIHRoZSBjb3VudCAodGhhdCBpcywKLQkgKiB0aGUgY291bnRlciBtYXkgdW5kZXJmbG93IGJldHdlZW4gdGhlIGxhc3QgcG9pbnQgd2hlcmUKLQkgKiBqaWZmaWVzIHdhcyBpbmNyZW1lbnRlZCBhbmQgdGhlIHBvaW50IHdoZXJlIHdlIGxhdGNoIHRoZQotCSAqIGNvdW50KSwgaXQgY2Fubm90IGJlIG5ld2VyLgotCSAqLwotCWppZnMgPSBqaWZmaWVzOwotCW91dGJfcCgweDAwLCBQSVRfTU9ERSk7CS8qIGxhdGNoIHRoZSBjb3VudCBBU0FQICovCi0JY291bnQgPSBpbmJfcChQSVRfQ0gwKTsJLyogcmVhZCB0aGUgbGF0Y2hlZCBjb3VudCAqLwotCWNvdW50IHw9IGluYl9wKFBJVF9DSDApIDw8IDg7Ci0KLQkvKiBWSUE2ODZhIHRlc3QgY29kZS4uLiByZXNldCB0aGUgbGF0Y2ggaWYgY291bnQgPiBtYXggKyAxICovCi0JaWYgKGNvdW50ID4gTEFUQ0gpIHsKLQkJb3V0Yl9wKDB4MzQsIFBJVF9NT0RFKTsKLQkJb3V0Yl9wKExBVENIICYgMHhmZiwgUElUX0NIMCk7Ci0JCW91dGIoTEFUQ0ggPj4gOCwgUElUX0NIMCk7Ci0JCWNvdW50ID0gTEFUQ0ggLSAxOwotCX0KLQotCS8qCi0JICogSXQncyBwb3NzaWJsZSBmb3IgY291bnQgdG8gYXBwZWFyIHRvIGdvIHRoZSB3cm9uZyB3YXkgZm9yIGEKLQkgKiBjb3VwbGUgb2YgcmVhc29uczoKLQkgKgotCSAqICAxLiBUaGUgdGltZXIgY291bnRlciB1bmRlcmZsb3dzLCBidXQgd2UgaGF2ZW4ndCBoYW5kbGVkIHRoZQotCSAqICAgICByZXN1bHRpbmcgaW50ZXJydXB0IGFuZCBpbmNyZW1lbnRlZCBqaWZmaWVzIHlldC4KLQkgKiAgMi4gSGFyZHdhcmUgcHJvYmxlbSB3aXRoIHRoZSB0aW1lciwgbm90IGdpdmluZyB1cyBjb250aW51b3VzIHRpbWUsCi0JICogICAgIHRoZSBjb3VudGVyIGRvZXMgc21hbGwgImp1bXBzIiB1cHdhcmRzIG9uIHNvbWUgUGVudGl1bSBzeXN0ZW1zLAotCSAqICAgICAoc2VlIGMndCA5NS8xMCBwYWdlIDMzNSBmb3IgTmVwdHVuIGJ1Zy4pCi0JICoKLQkgKiBQcmV2aW91cyBhdHRlbXB0cyB0byBoYW5kbGUgdGhlc2UgY2FzZXMgaW50ZWxsaWdlbnRseSB3ZXJlCi0JICogYnVnZ3ksIHNvIHdlIGp1c3QgZG8gdGhlIHNpbXBsZSB0aGluZyBub3cuCi0JICovCi0JaWYgKGNvdW50ID4gb2xkX2NvdW50ICYmIGppZnMgPT0gb2xkX2ppZnMpIHsKLQkJY291bnQgPSBvbGRfY291bnQ7Ci0JfQotCW9sZF9jb3VudCA9IGNvdW50OwotCW9sZF9qaWZzID0gamlmczsKLQotCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1M19sb2NrLCBmbGFncyk7Ci0KLQljb3VudCA9IChMQVRDSCAtIDEpIC0gY291bnQ7Ci0KLQlyZXR1cm4gKGN5Y2xlX3QpKGppZnMgKiBMQVRDSCkgKyBjb3VudDsKLX0KLQotc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9waXQgPSB7Ci0JLm5hbWUJPSAicGl0IiwKLQkucmF0aW5nID0gMTEwLAotCS5yZWFkCT0gcGl0X3JlYWQsCi0JLm1hc2sJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKLQkubXVsdAk9IDAsCi0JLnNoaWZ0CT0gMjAsCi19OwotCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X3BpdF9jbG9ja3NvdXJjZSh2b2lkKQogewogCWlmIChudW1fcG9zc2libGVfY3B1cygpID4gMSkgLyogUElUIGRvZXMgbm90IHNjYWxlISAqLwogCQlyZXR1cm4gMDsKIAotCWNsb2Nrc291cmNlX3BpdC5tdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChDTE9DS19USUNLX1JBVEUsIDIwKTsKLQlyZXR1cm4gY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX3BpdCk7CisJcmV0dXJuIGNsb2Nrc291cmNlX2k4MjUzX2luaXQoKTsKIH0KIGFyY2hfaW5pdGNhbGwoaW5pdF9waXRfY2xvY2tzb3VyY2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlLmMKaW5kZXggZDIxYzM4OC4uNGU2ZWExZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL21pcHMva2VybmVsL3B0cmFjZS5jCkBAIC01MzMsMTUgKzUzMywxMCBAQAogICogTm90aWZpY2F0aW9uIG9mIHN5c3RlbSBjYWxsIGVudHJ5L2V4aXQKICAqIC0gdHJpZ2dlcmVkIGJ5IGN1cnJlbnQtPndvcmsuc3lzY2FsbF90cmFjZQogICovCi1hc21saW5rYWdlIHZvaWQgZG9fc3lzY2FsbF90cmFjZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGVudHJ5ZXhpdCkKK2FzbWxpbmthZ2Ugdm9pZCBzeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCS8qIGRvIHRoZSBzZWN1cmUgY29tcHV0aW5nIGNoZWNrIGZpcnN0ICovCi0JaWYgKCFlbnRyeWV4aXQpCi0JCXNlY3VyZV9jb21wdXRpbmcocmVncy0+cmVnc1syXSk7Ci0KLQlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkgJiYgZW50cnlleGl0KQotCQlhdWRpdF9zeXNjYWxsX2V4aXQoQVVESVRTQ19SRVNVTFQocmVncy0+cmVnc1syXSksCi0JCSAgICAgICAgICAgICAgICAgICByZWdzLT5yZWdzWzJdKTsKKwlzZWN1cmVfY29tcHV0aW5nKHJlZ3MtPnJlZ3NbMl0pOwogCiAJaWYgKCEoY3VycmVudC0+cHRyYWNlICYgUFRfUFRSQUNFRCkpCiAJCWdvdG8gb3V0OwpAQCAtNTY1LDggKzU2MCw0MCBAQAogCX0KIAogb3V0OgotCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSAmJiAhZW50cnlleGl0KQorCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSkKIAkJYXVkaXRfc3lzY2FsbF9lbnRyeShhdWRpdF9hcmNoKCksIHJlZ3MtPnJlZ3NbMl0sCiAJCQkJICAgIHJlZ3MtPnJlZ3NbNF0sIHJlZ3MtPnJlZ3NbNV0sCiAJCQkJICAgIHJlZ3MtPnJlZ3NbNl0sIHJlZ3MtPnJlZ3NbN10pOwogfQorCisvKgorICogTm90aWZpY2F0aW9uIG9mIHN5c3RlbSBjYWxsIGVudHJ5L2V4aXQKKyAqIC0gdHJpZ2dlcmVkIGJ5IGN1cnJlbnQtPndvcmsuc3lzY2FsbF90cmFjZQorICovCithc21saW5rYWdlIHZvaWQgc3lzY2FsbF90cmFjZV9sZWF2ZShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpCisJCWF1ZGl0X3N5c2NhbGxfZXhpdChBVURJVFNDX1JFU1VMVChyZWdzLT5yZWdzWzddKSwKKwkJICAgICAgICAgICAgICAgICAgIC1yZWdzLT5yZWdzWzJdKTsKKworCWlmICghKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1BUUkFDRUQpKQorCQlyZXR1cm47CisKKwlpZiAoIXRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0UpKQorCQlyZXR1cm47CisKKwkvKiBUaGUgMHg4MCBwcm92aWRlcyBhIHdheSBmb3IgdGhlIHRyYWNpbmcgcGFyZW50IHRvIGRpc3Rpbmd1aXNoCisJICAgYmV0d2VlbiBhIHN5c2NhbGwgc3RvcCBhbmQgU0lHVFJBUCBkZWxpdmVyeSAqLworCXB0cmFjZV9ub3RpZnkoU0lHVFJBUCB8ICgoY3VycmVudC0+cHRyYWNlICYgUFRfVFJBQ0VTWVNHT09EKSA/CisJICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgOiAwKSk7CisKKwkvKgorCSAqIHRoaXMgaXNuJ3QgdGhlIHNhbWUgYXMgY29udGludWluZyB3aXRoIGEgc2lnbmFsLCBidXQgaXQgd2lsbCBkbworCSAqIGZvciBub3JtYWwgdXNlLiAgc3RyYWNlIG9ubHkgY29udGludWVzIHdpdGggYSBzaWduYWwgaWYgdGhlCisJICogc3RvcHBpbmcgc2lnbmFsIGlzIG5vdCBTSUdUUkFQLiAgLWJybAorCSAqLworCWlmIChjdXJyZW50LT5leGl0X2NvZGUpIHsKKwkJc2VuZF9zaWcoY3VycmVudC0+ZXhpdF9jb2RlLCBjdXJyZW50LCAxKTsKKwkJY3VycmVudC0+ZXhpdF9jb2RlID0gMDsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMKaW5kZXggN2Y1NDY4Yi4uN2E4ZTFkZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUwpAQCAtODgsOCArODgsNyBAQAogCVNBVkVfU1RBVElDCiAJbW92ZQlzMCwgdDIKIAltb3ZlCWEwLCBzcAotCWxpCWExLCAwCi0JamFsCWRvX3N5c2NhbGxfdHJhY2UKKwlqYWwJc3lzY2FsbF90cmFjZV9lbnRlcgogCiAJbW92ZQl0MCwgczAKIAlSRVNUT1JFX1NUQVRJQwpAQCAtNTY1LDcgKzU2NCw3IEBACiAJc3lzCXN5c19pb3ByaW9fZ2V0CQkyCS8qIDQzMTUgKi8KIAlzeXMJc3lzX3V0aW1lbnNhdAkJNAogCXN5cwlzeXNfc2lnbmFsZmQJCTMKLQlzeXMJc3lzX25pX3N5c2NhbGwJCTAKKwlzeXMJc3lzX25pX3N5c2NhbGwJCTAJLyogd2FzIHRpbWVyZmQgKi8KIAlzeXMJc3lzX2V2ZW50ZmQJCTEKIAlzeXMJc3lzX2ZhbGxvY2F0ZQkJNgkvKiA0MzIwICovCiAJc3lzCXN5c190aW1lcmZkX2NyZWF0ZQkyCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtNjQuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCmluZGV4IGEyZTFmY2IuLjJkMzFjODMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCkBAIC05MSw4ICs5MSw3IEBACiAJU0FWRV9TVEFUSUMKIAltb3ZlCXMwLCB0MgogCW1vdmUJYTAsIHNwCi0JbGkJYTEsIDAKLQlqYWwJZG9fc3lzY2FsbF90cmFjZQorCWphbAlzeXNjYWxsX3RyYWNlX2VudGVyCiAKIAltb3ZlCXQwLCBzMAogCVJFU1RPUkVfU1RBVElDCkBAIC00MDQsNyArNDAzLDcgQEAKIAlQVFIJc3lzX2lvcHJpb19nZXQKIAlQVFIJc3lzX3V0aW1lbnNhdAkJCS8qIDUyNzUgKi8KIAlQVFIJc3lzX3NpZ25hbGZkCi0JUFRSCXN5c19uaV9zeXNjYWxsCisJUFRSCXN5c19uaV9zeXNjYWxsCQkJLyogd2FzIHRpbWVyZmQgKi8KIAlQVFIJc3lzX2V2ZW50ZmQKIAlQVFIJc3lzX2ZhbGxvY2F0ZQogCVBUUglzeXNfdGltZXJmZF9jcmVhdGUJCS8qIDUyODAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUwppbmRleCBiMmM3NjI0Li4zOGEwNTAzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCkBAIC04OSw4ICs4OSw3IEBACiAJU0FWRV9TVEFUSUMKIAltb3ZlCXMwLCB0MgogCW1vdmUJYTAsIHNwCi0JbGkJYTEsIDAKLQlqYWwJZG9fc3lzY2FsbF90cmFjZQorCWphbAlzeXNjYWxsX3RyYWNlX2VudGVyCiAKIAltb3ZlCXQwLCBzMAogCVJFU1RPUkVfU1RBVElDCkBAIC00MDMsNyArNDAyLDcgQEAKIAlQVFIJc3lzX2lvcHJpb19nZXQKIAlQVFIJY29tcGF0X3N5c191dGltZW5zYXQKIAlQVFIJY29tcGF0X3N5c19zaWduYWxmZAkJLyogNjI4MCAqLwotCVBUUglzeXNfbmlfc3lzY2FsbAorCVBUUglzeXNfbmlfc3lzY2FsbAkJCS8qIHdhcyB0aW1lcmZkICovCiAJUFRSCXN5c19ldmVudGZkCiAJUFRSCXN5c19mYWxsb2NhdGUKIAlQVFIJc3lzX3RpbWVyZmRfY3JlYXRlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKaW5kZXggMDQ5YTljOC4uOTFlYTVlNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUwpAQCAtMTIzLDggKzEyMyw3IEBACiAKIAltb3ZlCXMwLCB0MgkJCSMgU2F2ZSBzeXNjYWxsIHBvaW50ZXIKIAltb3ZlCWEwLCBzcAotCWxpCWExLCAwCi0JamFsCWRvX3N5c2NhbGxfdHJhY2UKKwlqYWwJc3lzY2FsbF90cmFjZV9lbnRlcgogCiAJbW92ZQl0MCwgczAKIAlSRVNUT1JFX1NUQVRJQwpAQCAtNTIyLDcgKzUyMSw3IEBACiAJUFRSCXN5c19pb3ByaW9fZ2V0CQkJLyogNDMxNSAqLwogCVBUUgljb21wYXRfc3lzX3V0aW1lbnNhdAogCVBUUgljb21wYXRfc3lzX3NpZ25hbGZkCi0JUFRSCXN5c19uaV9zeXNjYWxsCisJUFRSCXN5c19uaV9zeXNjYWxsCQkJLyogd2FzIHRpbWVyZmQgKi8KIAlQVFIJc3lzX2V2ZW50ZmQKIAlQVFIJc3lzMzJfZmFsbG9jYXRlCQkJLyogNDMyMCAqLwogCVBUUglzeXNfdGltZXJmZF9jcmVhdGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMKaW5kZXggNThiZWFiZi4uZDAyNzY1NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMKQEAgLTEwLDEyICsxMCw5IEBACiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KQEAgLTI1LDExICsyMiw5IEBACiAjaW5jbHVkZSA8bGludXgvbXNnLmg+CiAjaW5jbHVkZSA8bGludXgvc2htLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pcGMuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgogCiAjaW5jbHVkZSA8YXNtL2FzbS5oPgpAQCAtNjYsMTIxICs2MSw2IEBACiAJcmV0dXJuIHJlczsKIH0KIAotdW5zaWduZWQgbG9uZyBzaG1fYWxpZ25fbWFzayA9IFBBR0VfU0laRSAtIDE7CS8qIFNhbmUgY2FjaGVzICovCi0KLUVYUE9SVF9TWU1CT0woc2htX2FsaWduX21hc2spOwotCi0jZGVmaW5lIENPTE9VUl9BTElHTihhZGRyLHBnb2ZmKQkJCQlcCi0JKCgoKGFkZHIpICsgc2htX2FsaWduX21hc2spICYgfnNobV9hbGlnbl9tYXNrKSArCVwKLQkgKCgocGdvZmYpIDw8IFBBR0VfU0hJRlQpICYgc2htX2FsaWduX21hc2spKQotCi11bnNpZ25lZCBsb25nIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQl1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncykKLXsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bW07Ci0JaW50IGRvX2NvbG9yX2FsaWduOwotCXVuc2lnbmVkIGxvbmcgdGFza19zaXplOwotCi0jaWZkZWYgQ09ORklHXzMyQklUCi0JdGFza19zaXplID0gVEFTS19TSVpFOwotI2Vsc2UgLyogTXVzdCBiZSBDT05GSUdfNjRCSVQqLwotCXRhc2tfc2l6ZSA9IHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUX0FERFIpID8gVEFTS19TSVpFMzIgOiBUQVNLX1NJWkU7Ci0jZW5kaWYKLQotCWlmIChsZW4gPiB0YXNrX3NpemUpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKGZsYWdzICYgTUFQX0ZJWEVEKSB7Ci0JCS8qIEV2ZW4gTUFQX0ZJWEVEIG1hcHBpbmdzIG11c3QgcmVzaWRlIHdpdGhpbiB0YXNrX3NpemUuICAqLwotCQlpZiAodGFza19zaXplIC0gbGVuIDwgYWRkcikKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCS8qCi0JCSAqIFdlIGRvIG5vdCBhY2NlcHQgYSBzaGFyZWQgbWFwcGluZyBpZiBpdCB3b3VsZCB2aW9sYXRlCi0JCSAqIGNhY2hlIGFsaWFzaW5nIGNvbnN0cmFpbnRzLgotCQkgKi8KLQkJaWYgKChmbGFncyAmIE1BUF9TSEFSRUQpICYmCi0JCSAgICAoKGFkZHIgLSAocGdvZmYgPDwgUEFHRV9TSElGVCkpICYgc2htX2FsaWduX21hc2spKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJldHVybiBhZGRyOwotCX0KLQotCWRvX2NvbG9yX2FsaWduID0gMDsKLQlpZiAoZmlscCB8fCAoZmxhZ3MgJiBNQVBfU0hBUkVEKSkKLQkJZG9fY29sb3JfYWxpZ24gPSAxOwotCWlmIChhZGRyKSB7Ci0JCWlmIChkb19jb2xvcl9hbGlnbikKLQkJCWFkZHIgPSBDT0xPVVJfQUxJR04oYWRkciwgcGdvZmYpOwotCQllbHNlCi0JCQlhZGRyID0gUEFHRV9BTElHTihhZGRyKTsKLQkJdm1tID0gZmluZF92bWEoY3VycmVudC0+bW0sIGFkZHIpOwotCQlpZiAodGFza19zaXplIC0gbGVuID49IGFkZHIgJiYKLQkJICAgICghdm1tIHx8IGFkZHIgKyBsZW4gPD0gdm1tLT52bV9zdGFydCkpCi0JCQlyZXR1cm4gYWRkcjsKLQl9Ci0JYWRkciA9IGN1cnJlbnQtPm1tLT5tbWFwX2Jhc2U7Ci0JaWYgKGRvX2NvbG9yX2FsaWduKQotCQlhZGRyID0gQ09MT1VSX0FMSUdOKGFkZHIsIHBnb2ZmKTsKLQllbHNlCi0JCWFkZHIgPSBQQUdFX0FMSUdOKGFkZHIpOwotCi0JZm9yICh2bW0gPSBmaW5kX3ZtYShjdXJyZW50LT5tbSwgYWRkcik7IDsgdm1tID0gdm1tLT52bV9uZXh0KSB7Ci0JCS8qIEF0IHRoaXMgcG9pbnQ6ICAoIXZtbSB8fCBhZGRyIDwgdm1tLT52bV9lbmQpLiAqLwotCQlpZiAodGFza19zaXplIC0gbGVuIDwgYWRkcikKLQkJCXJldHVybiAtRU5PTUVNOwotCQlpZiAoIXZtbSB8fCBhZGRyICsgbGVuIDw9IHZtbS0+dm1fc3RhcnQpCi0JCQlyZXR1cm4gYWRkcjsKLQkJYWRkciA9IHZtbS0+dm1fZW5kOwotCQlpZiAoZG9fY29sb3JfYWxpZ24pCi0JCQlhZGRyID0gQ09MT1VSX0FMSUdOKGFkZHIsIHBnb2ZmKTsKLQl9Ci19Ci0KLXZvaWQgYXJjaF9waWNrX21tYXBfbGF5b3V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCXVuc2lnbmVkIGxvbmcgcmFuZG9tX2ZhY3RvciA9IDBVTDsKLQotCWlmIChjdXJyZW50LT5mbGFncyAmIFBGX1JBTkRPTUlaRSkgewotCQlyYW5kb21fZmFjdG9yID0gZ2V0X3JhbmRvbV9pbnQoKTsKLQkJcmFuZG9tX2ZhY3RvciA9IHJhbmRvbV9mYWN0b3IgPDwgUEFHRV9TSElGVDsKLQkJaWYgKFRBU0tfSVNfMzJCSVRfQUREUikKLQkJCXJhbmRvbV9mYWN0b3IgJj0gMHhmZmZmZmZ1bDsKLQkJZWxzZQotCQkJcmFuZG9tX2ZhY3RvciAmPSAweGZmZmZmZmZ1bDsKLQl9Ci0KLQltbS0+bW1hcF9iYXNlID0gVEFTS19VTk1BUFBFRF9CQVNFICsgcmFuZG9tX2ZhY3RvcjsKLQltbS0+Z2V0X3VubWFwcGVkX2FyZWEgPSBhcmNoX2dldF91bm1hcHBlZF9hcmVhOwotCW1tLT51bm1hcF9hcmVhID0gYXJjaF91bm1hcF9hcmVhOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYnJrX3JuZCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgcm5kID0gZ2V0X3JhbmRvbV9pbnQoKTsKLQotCXJuZCA9IHJuZCA8PCBQQUdFX1NISUZUOwotCS8qIDhNQiBmb3IgMzJiaXQsIDI1Nk1CIGZvciA2NGJpdCAqLwotCWlmIChUQVNLX0lTXzMyQklUX0FERFIpCi0JCXJuZCA9IHJuZCAmIDB4N2ZmZmZmdWw7Ci0JZWxzZQotCQlybmQgPSBybmQgJiAweGZmZmZmZmZ1bDsKLQotCXJldHVybiBybmQ7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgYXJjaF9yYW5kb21pemVfYnJrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCXVuc2lnbmVkIGxvbmcgYmFzZSA9IG1tLT5icms7Ci0JdW5zaWduZWQgbG9uZyByZXQ7Ci0KLQlyZXQgPSBQQUdFX0FMSUdOKGJhc2UgKyBicmtfcm5kKCkpOwotCi0JaWYgKHJldCA8IG1tLT5icmspCi0JCXJldHVybiBtbS0+YnJrOwotCi0JcmV0dXJuIHJldDsKLX0KLQogU1lTQ0FMTF9ERUZJTkU2KG1pcHNfbW1hcCwgdW5zaWduZWQgbG9uZywgYWRkciwgdW5zaWduZWQgbG9uZywgbGVuLAogCXVuc2lnbmVkIGxvbmcsIHByb3QsIHVuc2lnbmVkIGxvbmcsIGZsYWdzLCB1bnNpZ25lZCBsb25nLAogCWZkLCBvZmZfdCwgb2Zmc2V0KQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCmluZGV4IDcxMzUwZjcuLmU5YjNhZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKQEAgLTM3NCw3ICszNzQsOCBAQAogCXVuc2lnbmVkIGxvbmcgZHZwcmV0ID0gZHZwZSgpOwogI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAotCW5vdGlmeV9kaWUoRElFX09PUFMsIHN0ciwgcmVncywgMCwgcmVnc190b190cmFwbnIocmVncyksIFNJR1NFR1YpOworCWlmIChub3RpZnlfZGllKERJRV9PT1BTLCBzdHIsIHJlZ3MsIDAsIHJlZ3NfdG9fdHJhcG5yKHJlZ3MpLCBTSUdTRUdWKSA9PSBOT1RJRllfU1RPUCkKKwkJc2lnID0gMDsKIAogCWNvbnNvbGVfdmVyYm9zZSgpOwogCXNwaW5fbG9ja19pcnEoJmRpZV9sb2NrKTsKQEAgLTM4Myw5ICszODQsNiBAQAogCW1pcHNfbXRfcmVnZHVtcChkdnByZXQpOwogI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAotCWlmIChub3RpZnlfZGllKERJRV9PT1BTLCBzdHIsIHJlZ3MsIDAsIHJlZ3NfdG9fdHJhcG5yKHJlZ3MpLCBTSUdTRUdWKSA9PSBOT1RJRllfU1RPUCkKLQkJc2lnID0gMDsKLQogCXByaW50aygiJXNbIyVkXTpcbiIsIHN0ciwgKytkaWVfY291bnRlcik7CiAJc2hvd19yZWdpc3RlcnMocmVncyk7CiAJYWRkX3RhaW50KFRBSU5UX0RJRSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggODMyYWZiYi4uMDFhZjM4NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNjUsMTUgKzY1LDE4IEBACiAJTk9URVMgOnRleHQgOm5vdGUKIAkuZHVtbXkgOiB7ICooLmR1bW15KSB9IDp0ZXh0CiAKKwlfc2RhdGEgPSAuOwkJCS8qIFN0YXJ0IG9mIGRhdGEgc2VjdGlvbiAqLwogCVJPREFUQQogCiAJLyogd3JpdGVhYmxlICovCisJX3NkYXRhID0gLjsJCQkJLyogU3RhcnQgb2YgZGF0YSBzZWN0aW9uICovCiAJLmRhdGEgOiB7CS8qIERhdGEgKi8KIAkJLiA9IC4gKyBEQVRBT0ZGU0VUOwkJLyogZm9yIENPTkZJR19NQVBQRURfS0VSTkVMICovCiAKIAkJSU5JVF9UQVNLX0RBVEEoUEFHRV9TSVpFKQogCQlOT1NBVkVfREFUQQogCQlDQUNIRUxJTkVfQUxJR05FRF9EQVRBKDEgPDwgQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQpCisJCVJFQURfTU9TVExZX0RBVEEoMSA8PCBDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVCkKIAkJREFUQV9EQVRBCiAJCUNPTlNUUlVDVE9SUwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYW50aXEvS2NvbmZpZyBiL2FyY2gvbWlwcy9sYW50aXEvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmNjZjIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xhbnRpcS9LY29uZmlnCkBAIC0wLDAgKzEsMjMgQEAKK2lmIExBTlRJUQorCitjb25maWcgU09DX1RZUEVfWFdBWQorCWJvb2wKKwlkZWZhdWx0IG4KKworY2hvaWNlCisJcHJvbXB0ICJTb0MgVHlwZSIKKwlkZWZhdWx0IFNPQ19YV0FZCisKK2NvbmZpZyBTT0NfQU1BWk9OX1NFCisJYm9vbCAiQW1hem9uIFNFIgorCXNlbGVjdCBTT0NfVFlQRV9YV0FZCisKK2NvbmZpZyBTT0NfWFdBWQorCWJvb2wgIlhXQVkiCisJc2VsZWN0IFNPQ19UWVBFX1hXQVkKKwlzZWxlY3QgSFdfSEFTX1BDSQorZW5kY2hvaWNlCisKK3NvdXJjZSAiYXJjaC9taXBzL2xhbnRpcS94d2F5L0tjb25maWciCisKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFudGlxL01ha2VmaWxlIGIvYXJjaC9taXBzL2xhbnRpcS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWRhZTBlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xhbnRpcS9NYWtlZmlsZQpAQCAtMCwwICsxLDExIEBACisjIENvcHlyaWdodCAoQykgMjAxMCBKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisjIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKK29iai15IDo9IGlycS5vIHNldHVwLm8gY2xrLm8gcHJvbS5vIGRldmljZXMubworCitvYmotJChDT05GSUdfRUFSTFlfUFJJTlRLKSArPSBlYXJseV9wcmludGsubworCitvYmotJChDT05GSUdfU09DX1RZUEVfWFdBWSkgKz0geHdheS8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYW50aXEvUGxhdGZvcm0gYi9hcmNoL21pcHMvbGFudGlxL1BsYXRmb3JtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZGZmMDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbGFudGlxL1BsYXRmb3JtCkBAIC0wLDAgKzEsOCBAQAorIworIyBMYW50aXEKKyMKKworcGxhdGZvcm0tJChDT05GSUdfTEFOVElRKQkrPSBsYW50aXEvCitjZmxhZ3MtJChDT05GSUdfTEFOVElRKQkJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxhbnRpcQorbG9hZC0kKENPTkZJR19MQU5USVEpCQk9IDB4ZmZmZmZmZmY4MDAwMjAwMAorY2ZsYWdzLSQoQ09ORklHX1NPQ19UWVBFX1hXQVkpCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sYW50aXEveHdheQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhbnRpcS9jbGsuYyBiL2FyY2gvbWlwcy9sYW50aXEvY2xrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ1NjA4OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sYW50aXEvY2xrLmMKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUaG9tYXMgTGFuZ2VyIDx0aG9tYXMubGFuZ2VyQGxhbnRpcS5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorCisjaW5jbHVkZSA8bGFudGlxX3NvYy5oPgorCisjaW5jbHVkZSAiY2xrLmgiCisKK3N0cnVjdCBjbGsgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgbG9uZyByYXRlOworCXVuc2lnbmVkIGxvbmcgKCpnZXRfcmF0ZSkgKHZvaWQpOworfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKmNwdV9jbGs7CitzdGF0aWMgaW50IGNwdV9jbGtfY250OworCisvKiBsYW50aXEgc29jcyBoYXZlIDMgc3RhdGljIGNsb2NrcyAqLworc3RhdGljIHN0cnVjdCBjbGsgY3B1X2Nsa19nZW5lcmljW10gPSB7CisJeworCQkubmFtZSA9ICJjcHUiLAorCQkuZ2V0X3JhdGUgPSBsdHFfZ2V0X2NwdV9oeiwKKwl9LCB7CisJCS5uYW1lID0gImZwaSIsCisJCS5nZXRfcmF0ZSA9IGx0cV9nZXRfZnBpX2h6LAorCX0sIHsKKwkJLm5hbWUgPSAiaW8iLAorCQkuZ2V0X3JhdGUgPSBsdHFfZ2V0X2lvX3JlZ2lvbl9jbG9jaywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsdHFfY2d1X3Jlc291cmNlID0geworCS5uYW1lCT0gImNndSIsCisJLnN0YXJ0CT0gTFRRX0NHVV9CQVNFX0FERFIsCisJLmVuZAk9IExUUV9DR1VfQkFTRV9BRERSICsgTFRRX0NHVV9TSVpFIC0gMSwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKK307CisKKy8qIHJlbWFwcGVkIGNsb2NrIHJlZ2lzdGVyIHJhbmdlICovCit2b2lkIF9faW9tZW0gKmx0cV9jZ3VfbWVtYmFzZTsKKwordm9pZCBjbGtfaW5pdCh2b2lkKQoreworCWNwdV9jbGsgPSBjcHVfY2xrX2dlbmVyaWM7CisJY3B1X2Nsa19jbnQgPSBBUlJBWV9TSVpFKGNwdV9jbGtfZ2VuZXJpYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNsa19nb29kKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrICYmICFJU19FUlIoY2xrKTsKK30KKwordW5zaWduZWQgbG9uZyBjbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCWlmICh1bmxpa2VseSghY2xrX2dvb2QoY2xrKSkpCisJCXJldHVybiAwOworCisJaWYgKGNsay0+cmF0ZSAhPSAwKQorCQlyZXR1cm4gY2xrLT5yYXRlOworCisJaWYgKGNsay0+Z2V0X3JhdGUgIT0gTlVMTCkKKwkJcmV0dXJuIGNsay0+Z2V0X3JhdGUoKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOworCitzdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3B1X2Nsa19jbnQ7IGkrKykKKwkJaWYgKCFzdHJjbXAoaWQsIGNwdV9jbGtbaV0ubmFtZSkpCisJCQlyZXR1cm4gJmNwdV9jbGtbaV07CisJQlVHKCk7CisJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19nZXQpOworCit2b2lkIGNsa19wdXQoc3RydWN0IGNsayAqY2xrKQoreworCS8qIG5vdCB1c2VkICovCit9CitFWFBPUlRfU1lNQk9MKGNsa19wdXQpOworCitzdGF0aWMgaW5saW5lIHUzMiBsdHFfZ2V0X2NvdW50ZXJfcmVzb2x1dGlvbih2b2lkKQoreworCXUzMiByZXM7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIi5zZXQgICBwdXNoXG4iCisJCSIuc2V0ICAgbWlwczMycjJcbiIKKwkJInJkaHdyICAlMCwgJDNcbiIKKwkJIi5zZXQgcG9wXG4iCisJCTogIj0mciIgKHJlcykKKwkJOiAvKiBubyBpbnB1dCAqLworCQk6ICJtZW1vcnkiKTsKKworCXJldHVybiByZXM7Cit9CisKK3ZvaWQgX19pbml0IHBsYXRfdGltZV9pbml0KHZvaWQpCit7CisJc3RydWN0IGNsayAqY2xrOworCisJaWYgKGluc2VydF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZsdHFfY2d1X3Jlc291cmNlKSA8IDApCisJCXBhbmljKCJGYWlsZWQgdG8gaW5zZXJ0IGNndSBtZW1vcnlcbiIpOworCisJaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbihsdHFfY2d1X3Jlc291cmNlLnN0YXJ0LAorCQkJcmVzb3VyY2Vfc2l6ZSgmbHRxX2NndV9yZXNvdXJjZSksICJjZ3UiKSA8IDApCisJCXBhbmljKCJGYWlsZWQgdG8gcmVxdWVzdCBjZ3UgbWVtb3J5XG4iKTsKKworCWx0cV9jZ3VfbWVtYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShsdHFfY2d1X3Jlc291cmNlLnN0YXJ0LAorCQkJCXJlc291cmNlX3NpemUoJmx0cV9jZ3VfcmVzb3VyY2UpKTsKKwlpZiAoIWx0cV9jZ3VfbWVtYmFzZSkgeworCQlwcl9lcnIoIkZhaWxlZCB0byByZW1hcCBjZ3UgbWVtb3J5XG4iKTsKKwkJdW5yZWFjaGFibGUoKTsKKwl9CisJY2xrID0gY2xrX2dldCgwLCAiY3B1Iik7CisJbWlwc19ocHRfZnJlcXVlbmN5ID0gY2xrX2dldF9yYXRlKGNsaykgLyBsdHFfZ2V0X2NvdW50ZXJfcmVzb2x1dGlvbigpOworCXdyaXRlX2MwX2NvbXBhcmUocmVhZF9jMF9jb3VudCgpKTsKKwljbGtfcHV0KGNsayk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFudGlxL2Nsay5oIGIvYXJjaC9taXBzL2xhbnRpcS9jbGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzI4OTI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xhbnRpcS9jbGsuaApAQCAtMCwwICsxLDE4IEBACisvKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2lmbmRlZiBfTFRRX0NMS19IX18KKyNkZWZpbmUgX0xUUV9DTEtfSF9fCisKK2V4dGVybiB2b2lkIGNsa19pbml0KHZvaWQpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBsdHFfZ2V0X2NwdV9oeih2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGx0cV9nZXRfZnBpX2h6KHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbHRxX2dldF9pb19yZWdpb25fY2xvY2sodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhbnRpcS9kZXZpY2VzLmMgYi9hcmNoL21pcHMvbGFudGlxL2RldmljZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjgyYzM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xhbnRpcS9kZXZpY2VzLmMKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisKKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpbmNsdWRlIDxsYW50aXFfc29jLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKy8qIG5vciBmbGFzaCAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsdHFfbm9yX3Jlc291cmNlID0geworCS5uYW1lCT0gIm5vciIsCisJLnN0YXJ0CT0gTFRRX0ZMQVNIX1NUQVJULAorCS5lbmQJPSBMVFFfRkxBU0hfU1RBUlQgKyBMVFFfRkxBU0hfTUFYIC0gMSwKKwkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBsdHFfbm9yID0geworCS5uYW1lCQk9ICJsdHFfbm9yIiwKKwkucmVzb3VyY2UJPSAmbHRxX25vcl9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCit9OworCit2b2lkIF9faW5pdCBsdHFfcmVnaXN0ZXJfbm9yKHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgKmRhdGEpCit7CisJbHRxX25vci5kZXYucGxhdGZvcm1fZGF0YSA9IGRhdGE7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZsdHFfbm9yKTsKK30KKworLyogd2F0Y2hkb2cgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbHRxX3dkdF9yZXNvdXJjZSA9IHsKKwkubmFtZQk9ICJ3YXRjaGRvZyIsCisJLnN0YXJ0ICA9IExUUV9XRFRfQkFTRV9BRERSLAorCS5lbmQgICAgPSBMVFFfV0RUX0JBU0VfQUREUiArIExUUV9XRFRfU0laRSAtIDEsCisJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorfTsKKwordm9pZCBfX2luaXQgbHRxX3JlZ2lzdGVyX3dkdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImx0cV93ZHQiLCAwLCAmbHRxX3dkdF9yZXNvdXJjZSwgMSk7Cit9CisKKy8qIGFzYyBwb3J0cyAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsdHFfYXNjMF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lCT0gImFzYzAiLAorCQkuc3RhcnQgID0gTFRRX0FTQzBfQkFTRV9BRERSLAorCQkuZW5kICAgID0gTFRRX0FTQzBfQkFTRV9BRERSICsgTFRRX0FTQ19TSVpFIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJSVJRX1JFUyh0eCwgTFRRX0FTQ19USVIoMCkpLAorCUlSUV9SRVMocngsIExUUV9BU0NfUklSKDApKSwKKwlJUlFfUkVTKGVyciwgTFRRX0FTQ19FSVIoMCkpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsdHFfYXNjMV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lCT0gImFzYzEiLAorCQkuc3RhcnQgID0gTFRRX0FTQzFfQkFTRV9BRERSLAorCQkuZW5kICAgID0gTFRRX0FTQzFfQkFTRV9BRERSICsgTFRRX0FTQ19TSVpFIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJSVJRX1JFUyh0eCwgTFRRX0FTQ19USVIoMSkpLAorCUlSUV9SRVMocngsIExUUV9BU0NfUklSKDEpKSwKKwlJUlFfUkVTKGVyciwgTFRRX0FTQ19FSVIoMSkpLAorfTsKKwordm9pZCBfX2luaXQgbHRxX3JlZ2lzdGVyX2FzYyhpbnQgcG9ydCkKK3sKKwlzd2l0Y2ggKHBvcnQpIHsKKwljYXNlIDA6CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImx0cV9hc2MiLCAwLAorCQkJbHRxX2FzYzBfcmVzb3VyY2VzLCBBUlJBWV9TSVpFKGx0cV9hc2MwX3Jlc291cmNlcykpOworCQlicmVhazsKKwljYXNlIDE6CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImx0cV9hc2MiLCAxLAorCQkJbHRxX2FzYzFfcmVzb3VyY2VzLCBBUlJBWV9TSVpFKGx0cV9hc2MxX3Jlc291cmNlcykpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfUENJCisvKiBwY2kgKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGx0cV9wY2kgPSB7CisJLm5hbWUJCT0gImx0cV9wY2kiLAorCS5udW1fcmVzb3VyY2VzCT0gMCwKK307CisKK3ZvaWQgX19pbml0IGx0cV9yZWdpc3Rlcl9wY2koc3RydWN0IGx0cV9wY2lfZGF0YSAqZGF0YSkKK3sKKwlsdHFfcGNpLmRldi5wbGF0Zm9ybV9kYXRhID0gZGF0YTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmx0cV9wY2kpOworfQorI2Vsc2UKK3ZvaWQgX19pbml0IGx0cV9yZWdpc3Rlcl9wY2koc3RydWN0IGx0cV9wY2lfZGF0YSAqZGF0YSkKK3sKKwlwcl9lcnIoImtlcm5lbCBpcyBjb21waWxlZCB3aXRob3V0IFBDSSBzdXBwb3J0XG4iKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhbnRpcS9kZXZpY2VzLmggYi9hcmNoL21pcHMvbGFudGlxL2RldmljZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTQ3YmIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xhbnRpcS9kZXZpY2VzLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4KKyAqLworCisjaWZuZGVmIF9MVFFfREVWSUNFU19IX18KKyNkZWZpbmUgX0xUUV9ERVZJQ0VTX0hfXworCisjaW5jbHVkZSA8bGFudGlxX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKworI2RlZmluZSBJUlFfUkVTKHJlc25hbWUsIGlycSkgXAorCXsubmFtZSA9ICNyZXNuYW1lLCAuc3RhcnQgPSAoaXJxKSwgLmZsYWdzID0gSU9SRVNPVVJDRV9JUlF9CisKK2V4dGVybiB2b2lkIGx0cV9yZWdpc3Rlcl9ub3Ioc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSAqZGF0YSk7CitleHRlcm4gdm9pZCBsdHFfcmVnaXN0ZXJfd2R0KHZvaWQpOworZXh0ZXJuIHZvaWQgbHRxX3JlZ2lzdGVyX2FzYyhpbnQgcG9ydCk7CitleHRlcm4gdm9pZCBsdHFfcmVnaXN0ZXJfcGNpKHN0cnVjdCBsdHFfcGNpX2RhdGEgKmRhdGEpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYW50aXEvZWFybHlfcHJpbnRrLmMgYi9hcmNoL21pcHMvbGFudGlxL2Vhcmx5X3ByaW50ay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MmUwNWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbGFudGlxL2Vhcmx5X3ByaW50ay5jCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKworI2luY2x1ZGUgPGxhbnRpcS5oPgorI2luY2x1ZGUgPGxhbnRpcV9zb2MuaD4KKworLyogbm8gaW9yZW1hcCBwb3NzaWJsZSBhdCB0aGlzIGVhcmx5IHN0YWdlLCBsZXRzIHVzZSBLU0VHMSBpbnN0ZWFkICAqLworI2RlZmluZSBMVFFfQVNDX0JBU0UJS1NFRzFBRERSKExUUV9BU0MxX0JBU0VfQUREUikKKyNkZWZpbmUgQVNDX0JVRgkJMTAyNAorI2RlZmluZSBMVFFfQVNDX0ZTVEFUCSgodTMyICopKExUUV9BU0NfQkFTRSArIDB4MDA0OCkpCisjZGVmaW5lIExUUV9BU0NfVEJVRgkoKHUzMiAqKShMVFFfQVNDX0JBU0UgKyAweDAwMjApKQorI2RlZmluZSBUWE1BU0sJCTB4M0YwMAorI2RlZmluZSBUWE9GRlNFVAk4CisKK3ZvaWQgcHJvbV9wdXRjaGFyKGNoYXIgYykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWRvIHsgfSB3aGlsZSAoKGx0cV9yMzIoTFRRX0FTQ19GU1RBVCkgJiBUWE1BU0spID4+IFRYT0ZGU0VUKTsKKwlpZiAoYyA9PSAnXG4nKQorCQlsdHFfdzMyKCdccicsIExUUV9BU0NfVEJVRik7CisJbHRxX3czMihjLCBMVFFfQVNDX1RCVUYpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYW50aXEvaXJxLmMgYi9hcmNoL21pcHMvbGFudGlxL2lycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjODk3OTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbGFudGlxL2lycS5jCkBAIC0wLDAgKzEsMzI2IEBACisvKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhvbWFzIExhbmdlciA8dGhvbWFzLmxhbmdlckBsYW50aXEuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9pcnFfY3B1Lmg+CisKKyNpbmNsdWRlIDxsYW50aXFfc29jLmg+CisjaW5jbHVkZSA8aXJxLmg+CisKKy8qIHJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIExUUV9JQ1VfSU0wX0lTUgkJMHgwMDAwCisjZGVmaW5lIExUUV9JQ1VfSU0wX0lFUgkJMHgwMDA4CisjZGVmaW5lIExUUV9JQ1VfSU0wX0lPU1IJMHgwMDEwCisjZGVmaW5lIExUUV9JQ1VfSU0wX0lSU1IJMHgwMDE4CisjZGVmaW5lIExUUV9JQ1VfSU0wX0lNUgkJMHgwMDIwCisjZGVmaW5lIExUUV9JQ1VfSU0xX0lTUgkJMHgwMDI4CisjZGVmaW5lIExUUV9JQ1VfT0ZGU0VUCQkoTFRRX0lDVV9JTTFfSVNSIC0gTFRRX0lDVV9JTTBfSVNSKQorCisjZGVmaW5lIExUUV9FSVVfRVhJTl9DCQkweDAwMDAKKyNkZWZpbmUgTFRRX0VJVV9FWElOX0lOSUMJMHgwMDA0CisjZGVmaW5lIExUUV9FSVVfRVhJTl9JTkVOCTB4MDAwQworCisvKiBpcnEgbnVtYmVycyB1c2VkIGJ5IHRoZSBleHRlcm5hbCBpbnRlcnJ1cHQgdW5pdCAoRUlVKSAqLworI2RlZmluZSBMVFFfRUlVX0lSMAkJKElOVF9OVU1fSU00X0lSTDAgKyAzMCkKKyNkZWZpbmUgTFRRX0VJVV9JUjEJCShJTlRfTlVNX0lNM19JUkwwICsgMzEpCisjZGVmaW5lIExUUV9FSVVfSVIyCQkoSU5UX05VTV9JTTFfSVJMMCArIDI2KQorI2RlZmluZSBMVFFfRUlVX0lSMwkJSU5UX05VTV9JTTFfSVJMMAorI2RlZmluZSBMVFFfRUlVX0lSNAkJKElOVF9OVU1fSU0xX0lSTDAgKyAxKQorI2RlZmluZSBMVFFfRUlVX0lSNQkJKElOVF9OVU1fSU0xX0lSTDAgKyAyKQorI2RlZmluZSBMVFFfRUlVX0lSNgkJKElOVF9OVU1fSU0yX0lSTDAgKyAzMCkKKworI2RlZmluZSBNQVhfRUlVCQkJNgorCisvKiBpcnFzIGdlbmVyYXRlZCBieSBkZXZpY2UgYXR0YWNoZWQgdG8gdGhlIEVCVSBuZWVkIHRvIGJlIGFja2VkIGluCisgKiBhIHNwZWNpYWwgbWFubmVyCisgKi8KKyNkZWZpbmUgTFRRX0lDVV9FQlVfSVJRCQkyMgorCisjZGVmaW5lIGx0cV9pY3VfdzMyKHgsIHkpCWx0cV93MzIoKHgpLCBsdHFfaWN1X21lbWJhc2UgKyAoeSkpCisjZGVmaW5lIGx0cV9pY3VfcjMyKHgpCQlsdHFfcjMyKGx0cV9pY3VfbWVtYmFzZSArICh4KSkKKworI2RlZmluZSBsdHFfZWl1X3czMih4LCB5KQlsdHFfdzMyKCh4KSwgbHRxX2VpdV9tZW1iYXNlICsgKHkpKQorI2RlZmluZSBsdHFfZWl1X3IzMih4KQkJbHRxX3IzMihsdHFfZWl1X21lbWJhc2UgKyAoeCkpCisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBsdHFfZWl1X2lycVtNQVhfRUlVXSA9IHsKKwlMVFFfRUlVX0lSMCwKKwlMVFFfRUlVX0lSMSwKKwlMVFFfRUlVX0lSMiwKKwlMVFFfRUlVX0lSMywKKwlMVFFfRUlVX0lSNCwKKwlMVFFfRUlVX0lSNSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbHRxX2ljdV9yZXNvdXJjZSA9IHsKKwkubmFtZQk9ICJpY3UiLAorCS5zdGFydAk9IExUUV9JQ1VfQkFTRV9BRERSLAorCS5lbmQJPSBMVFFfSUNVX0JBU0VfQUREUiArIExUUV9JQ1VfU0laRSAtIDEsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGx0cV9laXVfcmVzb3VyY2UgPSB7CisJLm5hbWUJPSAiZWl1IiwKKwkuc3RhcnQJPSBMVFFfRUlVX0JBU0VfQUREUiwKKwkuZW5kCT0gTFRRX0VJVV9CQVNFX0FERFIgKyBMVFFfSUNVX1NJWkUgLSAxLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHZvaWQgX19pb21lbSAqbHRxX2ljdV9tZW1iYXNlOworc3RhdGljIHZvaWQgX19pb21lbSAqbHRxX2VpdV9tZW1iYXNlOworCit2b2lkIGx0cV9kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJdTMyIGllciA9IExUUV9JQ1VfSU0wX0lFUjsKKwlpbnQgaXJxX25yID0gZC0+aXJxIC0gSU5UX05VTV9JUlEwOworCisJaWVyICs9IExUUV9JQ1VfT0ZGU0VUICogKGlycV9uciAvIElOVF9OVU1fSU1fT0ZGU0VUKTsKKwlpcnFfbnIgJT0gSU5UX05VTV9JTV9PRkZTRVQ7CisJbHRxX2ljdV93MzIobHRxX2ljdV9yMzIoaWVyKSAmIH4oMSA8PCBpcnFfbnIpLCBpZXIpOworfQorCit2b2lkIGx0cV9tYXNrX2FuZF9hY2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwl1MzIgaWVyID0gTFRRX0lDVV9JTTBfSUVSOworCXUzMiBpc3IgPSBMVFFfSUNVX0lNMF9JU1I7CisJaW50IGlycV9uciA9IGQtPmlycSAtIElOVF9OVU1fSVJRMDsKKworCWllciArPSBMVFFfSUNVX09GRlNFVCAqIChpcnFfbnIgLyBJTlRfTlVNX0lNX09GRlNFVCk7CisJaXNyICs9IExUUV9JQ1VfT0ZGU0VUICogKGlycV9uciAvIElOVF9OVU1fSU1fT0ZGU0VUKTsKKwlpcnFfbnIgJT0gSU5UX05VTV9JTV9PRkZTRVQ7CisJbHRxX2ljdV93MzIobHRxX2ljdV9yMzIoaWVyKSAmIH4oMSA8PCBpcnFfbnIpLCBpZXIpOworCWx0cV9pY3VfdzMyKCgxIDw8IGlycV9uciksIGlzcik7Cit9CisKK3N0YXRpYyB2b2lkIGx0cV9hY2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwl1MzIgaXNyID0gTFRRX0lDVV9JTTBfSVNSOworCWludCBpcnFfbnIgPSBkLT5pcnEgLSBJTlRfTlVNX0lSUTA7CisKKwlpc3IgKz0gTFRRX0lDVV9PRkZTRVQgKiAoaXJxX25yIC8gSU5UX05VTV9JTV9PRkZTRVQpOworCWlycV9uciAlPSBJTlRfTlVNX0lNX09GRlNFVDsKKwlsdHFfaWN1X3czMigoMSA8PCBpcnFfbnIpLCBpc3IpOworfQorCit2b2lkIGx0cV9lbmFibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwl1MzIgaWVyID0gTFRRX0lDVV9JTTBfSUVSOworCWludCBpcnFfbnIgPSBkLT5pcnEgLSBJTlRfTlVNX0lSUTA7CisKKwlpZXIgKz0gTFRRX0lDVV9PRkZTRVQgICogKGlycV9uciAvIElOVF9OVU1fSU1fT0ZGU0VUKTsKKwlpcnFfbnIgJT0gSU5UX05VTV9JTV9PRkZTRVQ7CisJbHRxX2ljdV93MzIobHRxX2ljdV9yMzIoaWVyKSB8ICgxIDw8IGlycV9uciksIGllcik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbHRxX3N0YXJ0dXBfZWl1X2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJaW50IGk7CisJaW50IGlycV9uciA9IGQtPmlycSAtIElOVF9OVU1fSVJRMDsKKworCWx0cV9lbmFibGVfaXJxKGQpOworCWZvciAoaSA9IDA7IGkgPCBNQVhfRUlVOyBpKyspIHsKKwkJaWYgKGlycV9uciA9PSBsdHFfZWl1X2lycVtpXSkgeworCQkJLyogbG93IGxldmVsIC0gd2Ugc2hvdWxkIHJlYWxseSBoYW5kbGUgc2V0X3R5cGUgKi8KKwkJCWx0cV9laXVfdzMyKGx0cV9laXVfcjMyKExUUV9FSVVfRVhJTl9DKSB8CisJCQkJKDB4NiA8PCAoaSAqIDQpKSwgTFRRX0VJVV9FWElOX0MpOworCQkJLyogY2xlYXIgYWxsIHBlbmRpbmcgKi8KKwkJCWx0cV9laXVfdzMyKGx0cV9laXVfcjMyKExUUV9FSVVfRVhJTl9JTklDKSAmIH4oMSA8PCBpKSwKKwkJCQlMVFFfRUlVX0VYSU5fSU5JQyk7CisJCQkvKiBlbmFibGUgKi8KKwkJCWx0cV9laXVfdzMyKGx0cV9laXVfcjMyKExUUV9FSVVfRVhJTl9JTkVOKSB8ICgxIDw8IGkpLAorCQkJCUxUUV9FSVVfRVhJTl9JTkVOKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGx0cV9zaHV0ZG93bl9laXVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlpbnQgaTsKKwlpbnQgaXJxX25yID0gZC0+aXJxIC0gSU5UX05VTV9JUlEwOworCisJbHRxX2Rpc2FibGVfaXJxKGQpOworCWZvciAoaSA9IDA7IGkgPCBNQVhfRUlVOyBpKyspIHsKKwkJaWYgKGlycV9uciA9PSBsdHFfZWl1X2lycVtpXSkgeworCQkJLyogZGlzYWJsZSAqLworCQkJbHRxX2VpdV93MzIobHRxX2VpdV9yMzIoTFRRX0VJVV9FWElOX0lORU4pICYgfigxIDw8IGkpLAorCQkJCUxUUV9FSVVfRVhJTl9JTkVOKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGx0cV9pcnFfdHlwZSA9IHsKKwkiaWN1IiwKKwkuaXJxX2VuYWJsZSA9IGx0cV9lbmFibGVfaXJxLAorCS5pcnFfZGlzYWJsZSA9IGx0cV9kaXNhYmxlX2lycSwKKwkuaXJxX3VubWFzayA9IGx0cV9lbmFibGVfaXJxLAorCS5pcnFfYWNrID0gbHRxX2Fja19pcnEsCisJLmlycV9tYXNrID0gbHRxX2Rpc2FibGVfaXJxLAorCS5pcnFfbWFza19hY2sgPSBsdHFfbWFza19hbmRfYWNrX2lycSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbHRxX2VpdV90eXBlID0geworCSJlaXUiLAorCS5pcnFfc3RhcnR1cCA9IGx0cV9zdGFydHVwX2VpdV9pcnEsCisJLmlycV9zaHV0ZG93biA9IGx0cV9zaHV0ZG93bl9laXVfaXJxLAorCS5pcnFfZW5hYmxlID0gbHRxX2VuYWJsZV9pcnEsCisJLmlycV9kaXNhYmxlID0gbHRxX2Rpc2FibGVfaXJxLAorCS5pcnFfdW5tYXNrID0gbHRxX2VuYWJsZV9pcnEsCisJLmlycV9hY2sgPSBsdHFfYWNrX2lycSwKKwkuaXJxX21hc2sgPSBsdHFfZGlzYWJsZV9pcnEsCisJLmlycV9tYXNrX2FjayA9IGx0cV9tYXNrX2FuZF9hY2tfaXJxLAorfTsKKworc3RhdGljIHZvaWQgbHRxX2h3X2lycWRpc3BhdGNoKGludCBtb2R1bGUpCit7CisJdTMyIGlycTsKKworCWlycSA9IGx0cV9pY3VfcjMyKExUUV9JQ1VfSU0wX0lPU1IgKyAobW9kdWxlICogTFRRX0lDVV9PRkZTRVQpKTsKKwlpZiAoaXJxID09IDApCisJCXJldHVybjsKKworCS8qIHNpbGljb24gYnVnIGNhdXNlcyBvbmx5IHRoZSBtc2Igc2V0IHRvIDEgdG8gYmUgdmFsaWQuIGFsbAorCSAqIG90aGVyIGJpdHMgbWlnaHQgYmUgYm9ndXMKKwkgKi8KKwlpcnEgPSBfX2ZscyhpcnEpOworCWRvX0lSUSgoaW50KWlycSArIElOVF9OVU1fSU0wX0lSTDAgKyAoSU5UX05VTV9JTV9PRkZTRVQgKiBtb2R1bGUpKTsKKworCS8qIGlmIHRoaXMgaXMgYSBFQlUgaXJxLCB3ZSBuZWVkIHRvIGFjayBpdCBvciBnZXQgYSBkZWFkbG9jayAqLworCWlmICgoaXJxID09IExUUV9JQ1VfRUJVX0lSUSkgJiYgKG1vZHVsZSA9PSAwKSkKKwkJbHRxX2VidV93MzIobHRxX2VidV9yMzIoTFRRX0VCVV9QQ0NfSVNUQVQpIHwgMHgxMCwKKwkJCUxUUV9FQlVfUENDX0lTVEFUKTsKK30KKworI2RlZmluZSBERUZJTkVfSFd4X0lSUURJU1BBVENIKHgpCQkJCQlcCisJc3RhdGljIHZvaWQgbHRxX2h3ICMjIHggIyMgX2lycWRpc3BhdGNoKHZvaWQpCQkJXAorCXsJCQkJCQkJCVwKKwkJbHRxX2h3X2lycWRpc3BhdGNoKHgpOwkJCQkJXAorCX0KK0RFRklORV9IV3hfSVJRRElTUEFUQ0goMCkKK0RFRklORV9IV3hfSVJRRElTUEFUQ0goMSkKK0RFRklORV9IV3hfSVJRRElTUEFUQ0goMikKK0RFRklORV9IV3hfSVJRRElTUEFUQ0goMykKK0RFRklORV9IV3hfSVJRRElTUEFUQ0goNCkKKworc3RhdGljIHZvaWQgbHRxX2h3NV9pcnFkaXNwYXRjaCh2b2lkKQoreworCWRvX0lSUShNSVBTX0NQVV9USU1FUl9JUlEpOworfQorCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2godm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcGVuZGluZyA9IHJlYWRfYzBfc3RhdHVzKCkgJiByZWFkX2MwX2NhdXNlKCkgJiBTVDBfSU07CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAocGVuZGluZyAmIENBVVNFRl9JUDcpIHsKKwkJZG9fSVJRKE1JUFNfQ1BVX1RJTUVSX0lSUSk7CisJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJCWlmIChwZW5kaW5nICYgKENBVVNFRl9JUDIgPDwgaSkpIHsKKwkJCQlsdHFfaHdfaXJxZGlzcGF0Y2goaSk7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKwl9CisJcHJfYWxlcnQoIlNwdXJpb3VzIElSUTogQ0FVU0U9MHglMDh4XG4iLCByZWFkX2MwX3N0YXR1cygpKTsKKworb3V0OgorCXJldHVybjsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gY2FzY2FkZSA9IHsKKwkuaGFuZGxlciA9IG5vX2FjdGlvbiwKKwkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVELAorCS5uYW1lID0gImNhc2NhZGUiLAorfTsKKwordm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQoreworCWludCBpOworCisJaWYgKGluc2VydF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZsdHFfaWN1X3Jlc291cmNlKSA8IDApCisJCXBhbmljKCJGYWlsZWQgdG8gaW5zZXJ0IGljdSBtZW1vcnlcbiIpOworCisJaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbihsdHFfaWN1X3Jlc291cmNlLnN0YXJ0LAorCQkJcmVzb3VyY2Vfc2l6ZSgmbHRxX2ljdV9yZXNvdXJjZSksICJpY3UiKSA8IDApCisJCXBhbmljKCJGYWlsZWQgdG8gcmVxdWVzdCBpY3UgbWVtb3J5XG4iKTsKKworCWx0cV9pY3VfbWVtYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShsdHFfaWN1X3Jlc291cmNlLnN0YXJ0LAorCQkJCXJlc291cmNlX3NpemUoJmx0cV9pY3VfcmVzb3VyY2UpKTsKKwlpZiAoIWx0cV9pY3VfbWVtYmFzZSkKKwkJcGFuaWMoIkZhaWxlZCB0byByZW1hcCBpY3UgbWVtb3J5XG4iKTsKKworCWlmIChpbnNlcnRfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmbHRxX2VpdV9yZXNvdXJjZSkgPCAwKQorCQlwYW5pYygiRmFpbGVkIHRvIGluc2VydCBlaXUgbWVtb3J5XG4iKTsKKworCWlmIChyZXF1ZXN0X21lbV9yZWdpb24obHRxX2VpdV9yZXNvdXJjZS5zdGFydCwKKwkJCXJlc291cmNlX3NpemUoJmx0cV9laXVfcmVzb3VyY2UpLCAiZWl1IikgPCAwKQorCQlwYW5pYygiRmFpbGVkIHRvIHJlcXVlc3QgZWl1IG1lbW9yeVxuIik7CisKKwlsdHFfZWl1X21lbWJhc2UgPSBpb3JlbWFwX25vY2FjaGUobHRxX2VpdV9yZXNvdXJjZS5zdGFydCwKKwkJCQlyZXNvdXJjZV9zaXplKCZsdHFfZWl1X3Jlc291cmNlKSk7CisJaWYgKCFsdHFfZWl1X21lbWJhc2UpCisJCXBhbmljKCJGYWlsZWQgdG8gcmVtYXAgZWl1IG1lbW9yeVxuIik7CisKKwkvKiBtYWtlIHN1cmUgYWxsIGlycXMgYXJlIHR1cm5lZCBvZmYgYnkgZGVmYXVsdCAqLworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJCWx0cV9pY3VfdzMyKDAsIExUUV9JQ1VfSU0wX0lFUiArIChpICogTFRRX0lDVV9PRkZTRVQpKTsKKworCS8qIGNsZWFyIGFsbCBwb3NzaWJseSBwZW5kaW5nIGludGVycnVwdHMgKi8KKwlsdHFfaWN1X3czMih+MCwgTFRRX0lDVV9JTTBfSVNSICsgKGkgKiBMVFFfSUNVX09GRlNFVCkpOworCisJbWlwc19jcHVfaXJxX2luaXQoKTsKKworCWZvciAoaSA9IDI7IGkgPD0gNjsgaSsrKQorCQlzZXR1cF9pcnEoaSwgJmNhc2NhZGUpOworCisJaWYgKGNwdV9oYXNfdmludCkgeworCQlwcl9pbmZvKCJTZXR0aW5nIHVwIHZlY3RvcmVkIGludGVycnVwdHNcbiIpOworCQlzZXRfdmlfaGFuZGxlcigyLCBsdHFfaHcwX2lycWRpc3BhdGNoKTsKKwkJc2V0X3ZpX2hhbmRsZXIoMywgbHRxX2h3MV9pcnFkaXNwYXRjaCk7CisJCXNldF92aV9oYW5kbGVyKDQsIGx0cV9odzJfaXJxZGlzcGF0Y2gpOworCQlzZXRfdmlfaGFuZGxlcig1LCBsdHFfaHczX2lycWRpc3BhdGNoKTsKKwkJc2V0X3ZpX2hhbmRsZXIoNiwgbHRxX2h3NF9pcnFkaXNwYXRjaCk7CisJCXNldF92aV9oYW5kbGVyKDcsIGx0cV9odzVfaXJxZGlzcGF0Y2gpOworCX0KKworCWZvciAoaSA9IElOVF9OVU1fSVJRMDsKKwkJaSA8PSAoSU5UX05VTV9JUlEwICsgKDUgKiBJTlRfTlVNX0lNX09GRlNFVCkpOyBpKyspCisJCWlmICgoaSA9PSBMVFFfRUlVX0lSMCkgfHwgKGkgPT0gTFRRX0VJVV9JUjEpIHx8CisJCQkoaSA9PSBMVFFfRUlVX0lSMikpCisJCQlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIoaSwgJmx0cV9laXVfdHlwZSwKKwkJCQloYW5kbGVfbGV2ZWxfaXJxKTsKKwkJLyogRUlVMy01IG9ubHkgZXhpc3Qgb24gYXI5IGFuZCB2cjkgKi8KKwkJZWxzZSBpZiAoKChpID09IExUUV9FSVVfSVIzKSB8fCAoaSA9PSBMVFFfRUlVX0lSNCkgfHwKKwkJCShpID09IExUUV9FSVVfSVI1KSkgJiYgKGx0cV9pc19hcjkoKSB8fCBsdHFfaXNfdnI5KCkpKQorCQkJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGksICZsdHFfZWl1X3R5cGUsCisJCQkJaGFuZGxlX2xldmVsX2lycSk7CisJCWVsc2UKKwkJCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpLCAmbHRxX2lycV90eXBlLAorCQkJCWhhbmRsZV9sZXZlbF9pcnEpOworCisjaWYgIWRlZmluZWQoQ09ORklHX01JUFNfTVRfU01QKSAmJiAhZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVRDKQorCXNldF9jMF9zdGF0dXMoSUVfSVJRMCB8IElFX0lSUTEgfCBJRV9JUlEyIHwKKwkJSUVfSVJRMyB8IElFX0lSUTQgfCBJRV9JUlE1KTsKKyNlbHNlCisJc2V0X2MwX3N0YXR1cyhJRV9TVzAgfCBJRV9TVzEgfCBJRV9JUlEwIHwgSUVfSVJRMSB8CisJCUlFX0lSUTIgfCBJRV9JUlEzIHwgSUVfSVJRNCB8IElFX0lSUTUpOworI2VuZGlmCit9CisKK3Vuc2lnbmVkIGludCBfX2NwdWluaXQgZ2V0X2MwX2NvbXBhcmVfaW50KHZvaWQpCit7CisJcmV0dXJuIENQMF9MRUdBQ1lfQ09NUEFSRV9JUlE7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFudGlxL21hY2h0eXBlcy5oIGIvYXJjaC9taXBzL2xhbnRpcS9tYWNodHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTAxYjhjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xhbnRpcS9tYWNodHlwZXMuaApAQCAtMCwwICsxLDIwIEBACisvKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICovCisKKyNpZm5kZWYgX0xBTlRJUV9NQUNIX0hfXworI2RlZmluZSBfTEFOVElRX01BQ0hfSF9fCisKKyNpbmNsdWRlIDxhc20vbWlwc19tYWNoaW5lLmg+CisKK2VudW0gbGFudGlxX21hY2hfdHlwZSB7CisJTFRRX01BQ0hfR0VORVJJQyA9IDAsCisJTFRRX01BQ0hfRUFTWTUwNzEyLAkvKiBEYW51YmUgZXZhbHVhdGlvbiBib2FyZCAqLworCUxUUV9NQUNIX0VBU1k1MDYwMSwJLyogQW1hem9uIFNFIGV2YWx1YXRpb24gYm9hcmQgKi8KK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhbnRpcS9wcm9tLmMgYi9hcmNoL21pcHMvbGFudGlxL3Byb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmJhMDA3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xhbnRpcS9wcm9tLmMKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorCisjaW5jbHVkZSA8bGFudGlxLmg+CisKKyNpbmNsdWRlICJwcm9tLmgiCisjaW5jbHVkZSAiY2xrLmgiCisKK3N0YXRpYyBzdHJ1Y3QgbHRxX3NvY19pbmZvIHNvY19pbmZvOworCit1bnNpZ25lZCBpbnQgbHRxX2dldF9jcHVfdmVyKHZvaWQpCit7CisJcmV0dXJuIHNvY19pbmZvLnJldjsKK30KK0VYUE9SVF9TWU1CT0wobHRxX2dldF9jcHVfdmVyKTsKKwordW5zaWduZWQgaW50IGx0cV9nZXRfc29jX3R5cGUodm9pZCkKK3sKKwlyZXR1cm4gc29jX2luZm8udHlwZTsKK30KK0VYUE9SVF9TWU1CT0wobHRxX2dldF9zb2NfdHlwZSk7CisKK2NvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQoreworCXJldHVybiBzb2NfaW5mby5zeXNfdHlwZTsKK30KKwordm9pZCBwcm9tX2ZyZWVfcHJvbV9tZW1vcnkodm9pZCkKK3sKK30KKworc3RhdGljIHZvaWQgX19pbml0IHByb21faW5pdF9jbWRsaW5lKHZvaWQpCit7CisJaW50IGFyZ2MgPSBmd19hcmcwOworCWNoYXIgKiphcmd2ID0gKGNoYXIgKiopIEtTRUcxQUREUihmd19hcmcxKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwkJY2hhciAqcCA9IChjaGFyICopICBLU0VHMUFERFIoYXJndltpXSk7CisKKwkJaWYgKHAgJiYgKnApIHsKKwkJCXN0cmxjYXQoYXJjc19jbWRsaW5lLCBwLCBzaXplb2YoYXJjc19jbWRsaW5lKSk7CisJCQlzdHJsY2F0KGFyY3NfY21kbGluZSwgIiAiLCBzaXplb2YoYXJjc19jbWRsaW5lKSk7CisJCX0KKwl9Cit9CisKK3ZvaWQgX19pbml0IHByb21faW5pdCh2b2lkKQoreworCXN0cnVjdCBjbGsgKmNsazsKKworCWx0cV9zb2NfZGV0ZWN0KCZzb2NfaW5mbyk7CisJY2xrX2luaXQoKTsKKwljbGsgPSBjbGtfZ2V0KDAsICJjcHUiKTsKKwlzbnByaW50Zihzb2NfaW5mby5zeXNfdHlwZSwgTFRRX1NZU19UWVBFX0xFTiAtIDEsICIlcyByZXYxLiVkIiwKKwkJc29jX2luZm8ubmFtZSwgc29jX2luZm8ucmV2KTsKKwljbGtfcHV0KGNsayk7CisJc29jX2luZm8uc3lzX3R5cGVbTFRRX1NZU19UWVBFX0xFTiAtIDFdID0gJ1wwJzsKKwlwcl9pbmZvKCJTb0M6ICVzXG4iLCBzb2NfaW5mby5zeXNfdHlwZSk7CisJcHJvbV9pbml0X2NtZGxpbmUoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYW50aXEvcHJvbS5oIGIvYXJjaC9taXBzL2xhbnRpcS9wcm9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQyMjlkOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sYW50aXEvcHJvbS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4KKyAqLworCisjaWZuZGVmIF9MVFFfUFJPTV9IX18KKyNkZWZpbmUgX0xUUV9QUk9NX0hfXworCisjZGVmaW5lIExUUV9TWVNfVFlQRV9MRU4JMHgxMDAKKworc3RydWN0IGx0cV9zb2NfaW5mbyB7CisJdW5zaWduZWQgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBpbnQgcmV2OworCXVuc2lnbmVkIGludCBwYXJ0bnVtOworCXVuc2lnbmVkIGludCB0eXBlOworCXVuc2lnbmVkIGNoYXIgc3lzX3R5cGVbTFRRX1NZU19UWVBFX0xFTl07Cit9OworCitleHRlcm4gdm9pZCBsdHFfc29jX2RldGVjdChzdHJ1Y3QgbHRxX3NvY19pbmZvICppKTsKK2V4dGVybiB2b2lkIGx0cV9zb2Nfc2V0dXAodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhbnRpcS9zZXR1cC5jIGIvYXJjaC9taXBzL2xhbnRpcS9zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliOGFmNzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbGFudGlxL3NldHVwLmMKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorCisjaW5jbHVkZSA8bGFudGlxX3NvYy5oPgorCisjaW5jbHVkZSAibWFjaHR5cGVzLmgiCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorI2luY2x1ZGUgInByb20uaCIKKwordm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKK3sKKwkvKiBhc3N1bWUgMTZNIGFzIGRlZmF1bHQgaW5jYXNlIHVib290IGZhaWxzIHRvIHBhc3MgcHJvcGVyIHJhbXNpemUgKi8KKwl1bnNpZ25lZCBsb25nIG1lbXNpemUgPSAxNjsKKwljaGFyICoqZW52cCA9IChjaGFyICoqKSBLU0VHMUFERFIoZndfYXJnMik7CisKKwlpb3BvcnRfcmVzb3VyY2Uuc3RhcnQgPSBJT1BPUlRfUkVTT1VSQ0VfU1RBUlQ7CisJaW9wb3J0X3Jlc291cmNlLmVuZCA9IElPUE9SVF9SRVNPVVJDRV9FTkQ7CisJaW9tZW1fcmVzb3VyY2Uuc3RhcnQgPSBJT01FTV9SRVNPVVJDRV9TVEFSVDsKKwlpb21lbV9yZXNvdXJjZS5lbmQgPSBJT01FTV9SRVNPVVJDRV9FTkQ7CisKKwlzZXRfaW9fcG9ydF9iYXNlKCh1bnNpZ25lZCBsb25nKSBLU0VHMSk7CisKKwl3aGlsZSAoKmVudnApIHsKKwkJY2hhciAqZSA9IChjaGFyICopS1NFRzFBRERSKCplbnZwKTsKKwkJaWYgKCFzdHJuY21wKGUsICJtZW1zaXplPSIsIDgpKSB7CisJCQllICs9IDg7CisJCQlpZiAoc3RyaWN0X3N0cnRvdWwoZSwgMCwgJm1lbXNpemUpKQorCQkJCXByX3dhcm4oImJhZCBtZW1zaXplIHNwZWNpZmllZFxuIik7CisJCX0KKwkJZW52cCsrOworCX0KKwltZW1zaXplICo9IDEwMjQgKiAxMDI0OworCWFkZF9tZW1vcnlfcmVnaW9uKDB4MDAwMDAwMDAsIG1lbXNpemUsIEJPT1RfTUVNX1JBTSk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0CitsYW50aXFfc2V0dXAodm9pZCkKK3sKKwlsdHFfc29jX3NldHVwKCk7CisJbWlwc19tYWNoaW5lX3NldHVwKCk7CisJcmV0dXJuIDA7Cit9CisKK2FyY2hfaW5pdGNhbGwobGFudGlxX3NldHVwKTsKKworc3RhdGljIHZvaWQgX19pbml0CitsYW50aXFfZ2VuZXJpY19pbml0KHZvaWQpCit7CisJLyogTm90aGluZyB0byBkbyAqLworfQorCitNSVBTX01BQ0hJTkUoTFRRX01BQ0hfR0VORVJJQywKKwkgICAgICJHZW5lcmljIiwKKwkgICAgICJHZW5lcmljIExhbnRpcSBiYXNlZCBib2FyZCIsCisJICAgICBsYW50aXFfZ2VuZXJpY19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYW50aXEveHdheS9LY29uZmlnIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI4NTdkZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sYW50aXEveHdheS9LY29uZmlnCkBAIC0wLDAgKzEsMjMgQEAKK2lmIFNPQ19YV0FZCisKK21lbnUgIk1JUFMgTWFjaGluZSIKKworY29uZmlnIExBTlRJUV9NQUNIX0VBU1k1MDcxMgorCWJvb2wgIkVhc3k1MDcxMiAtIERhbnViZSIKKwlkZWZhdWx0IHkKKworZW5kbWVudQorCitlbmRpZgorCitpZiBTT0NfQU1BWk9OX1NFCisKK21lbnUgIk1JUFMgTWFjaGluZSIKKworY29uZmlnIExBTlRJUV9NQUNIX0VBU1k1MDYwMQorCWJvb2wgIkVhc3k1MDYwMSAtIEFtYXpvbiBTRSIKKwlkZWZhdWx0IHkKKworZW5kbWVudQorCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhbnRpcS94d2F5L01ha2VmaWxlIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MTdmMmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbGFudGlxL3h3YXkvTWFrZWZpbGUKQEAgLTAsMCArMSw3IEBACitvYmoteSA6PSBwbXUubyBlYnUubyByZXNldC5vIGdwaW8ubyBncGlvX3N0cC5vIGdwaW9fZWJ1Lm8gZGV2aWNlcy5vIGRtYS5vCisKK29iai0kKENPTkZJR19TT0NfWFdBWSkgKz0gY2xrLXh3YXkubyBwcm9tLXh3YXkubyBzZXR1cC14d2F5Lm8KK29iai0kKENPTkZJR19TT0NfQU1BWk9OX1NFKSArPSBjbGstYXNlLm8gcHJvbS1hc2UubyBzZXR1cC1hc2UubworCitvYmotJChDT05GSUdfTEFOVElRX01BQ0hfRUFTWTUwNzEyKSArPSBtYWNoLWVhc3k1MDcxMi5vCitvYmotJChDT05GSUdfTEFOVElRX01BQ0hfRUFTWTUwNjAxKSArPSBtYWNoLWVhc3k1MDYwMS5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFudGlxL3h3YXkvY2xrLWFzZS5jIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L2Nsay1hc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmQ4MjNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L2Nsay1hc2UuYwpAQCAtMCwwICsxLDQ4IEBACisvKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDExIEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorCisjaW5jbHVkZSA8bGFudGlxX3NvYy5oPgorCisvKiBjZ3UgcmVnaXN0ZXJzICovCisjZGVmaW5lIExUUV9DR1VfU1lTCTB4MDAxMAorCit1bnNpZ25lZCBpbnQgbHRxX2dldF9pb19yZWdpb25fY2xvY2sodm9pZCkKK3sKKwlyZXR1cm4gQ0xPQ0tfMTMzTTsKK30KK0VYUE9SVF9TWU1CT0wobHRxX2dldF9pb19yZWdpb25fY2xvY2spOworCit1bnNpZ25lZCBpbnQgbHRxX2dldF9mcGlfYnVzX2Nsb2NrKGludCBmcGkpCit7CisJcmV0dXJuIENMT0NLXzEzM007Cit9CitFWFBPUlRfU1lNQk9MKGx0cV9nZXRfZnBpX2J1c19jbG9jayk7CisKK3Vuc2lnbmVkIGludCBsdHFfZ2V0X2NwdV9oeih2b2lkKQoreworCWlmIChsdHFfY2d1X3IzMihMVFFfQ0dVX1NZUykgJiAoMSA8PCA1KSkKKwkJcmV0dXJuIENMT0NLXzI2Nk07CisJZWxzZQorCQlyZXR1cm4gQ0xPQ0tfMTMzTTsKK30KK0VYUE9SVF9TWU1CT0wobHRxX2dldF9jcHVfaHopOworCit1bnNpZ25lZCBpbnQgbHRxX2dldF9mcGlfaHoodm9pZCkKK3sKKwlyZXR1cm4gQ0xPQ0tfMTMzTTsKK30KK0VYUE9SVF9TWU1CT0wobHRxX2dldF9mcGlfaHopOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhbnRpcS94d2F5L2Nsay14d2F5LmMgYi9hcmNoL21pcHMvbGFudGlxL3h3YXkvY2xrLXh3YXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGQzOTU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L2Nsay14d2F5LmMKQEAgLTAsMCArMSwyMjMgQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisKKyNpbmNsdWRlIDxsYW50aXFfc29jLmg+CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbHRxX3JhbV9jbG9ja3NbXSA9IHsKKwlDTE9DS18xNjdNLCBDTE9DS18xMzNNLCBDTE9DS18xMTFNLCBDTE9DS184M00gfTsKKyNkZWZpbmUgRERSX0haIGx0cV9yYW1fY2xvY2tzW2x0cV9jZ3VfcjMyKExUUV9DR1VfU1lTKSAmIDB4M10KKworI2RlZmluZSBCQVNJQ19GUkVRVUVOQ1lfMQkzNTMyODAwMAorI2RlZmluZSBCQVNJQ19GUkVRVUVOQ1lfMgkzNjAwMDAwMAorI2RlZmluZSBCQVNJU19SRVFVRU5DWV9VU0IJMTIwMDAwMDAKKworI2RlZmluZSBHRVRfQklUUyh4LCBtc2IsIGxzYikgXAorCSgoKHgpICYgKCgxIDw8ICgobXNiKSArIDEpKSAtIDEpKSA+PiAobHNiKSkKKworI2RlZmluZSBMVFFfQ0dVX1BMTDBfQ0ZHCTB4MDAwNAorI2RlZmluZSBMVFFfQ0dVX1BMTDFfQ0ZHCTB4MDAwOAorI2RlZmluZSBMVFFfQ0dVX1BMTDJfQ0ZHCTB4MDAwQworI2RlZmluZSBMVFFfQ0dVX1NZUwkJMHgwMDEwCisjZGVmaW5lIExUUV9DR1VfVVBEQVRFCQkweDAwMTQKKyNkZWZpbmUgTFRRX0NHVV9JRl9DTEsJCTB4MDAxOAorI2RlZmluZSBMVFFfQ0dVX09TQ19DT04JCTB4MDAxQworI2RlZmluZSBMVFFfQ0dVX1NNRAkJMHgwMDIwCisjZGVmaW5lIExUUV9DR1VfQ1QxU1IJCTB4MDAyOAorI2RlZmluZSBMVFFfQ0dVX0NUMlNSCQkweDAwMkMKKyNkZWZpbmUgTFRRX0NHVV9QQ01DUgkJMHgwMDMwCisjZGVmaW5lIExUUV9DR1VfUENJX0NSCQkweDAwMzQKKyNkZWZpbmUgTFRRX0NHVV9QRF9QQwkJMHgwMDM4CisjZGVmaW5lIExUUV9DR1VfRk1SCQkweDAwM0MKKworI2RlZmluZSBDR1VfUExMMF9QSEFTRV9ESVZJREVSX0VOQUJMRQlcCisJKGx0cV9jZ3VfcjMyKExUUV9DR1VfUExMMF9DRkcpICYgKDEgPDwgMzEpKQorI2RlZmluZSBDR1VfUExMMF9CWVBBU1MJCQlcCisJKGx0cV9jZ3VfcjMyKExUUV9DR1VfUExMMF9DRkcpICYgKDEgPDwgMzApKQorI2RlZmluZSBDR1VfUExMMF9DRkdfRFNNU0VMCQlcCisJKGx0cV9jZ3VfcjMyKExUUV9DR1VfUExMMF9DRkcpICYgKDEgPDwgMjgpKQorI2RlZmluZSBDR1VfUExMMF9DRkdfRlJBQ19FTgkJXAorCShsdHFfY2d1X3IzMihMVFFfQ0dVX1BMTDBfQ0ZHKSAmICgxIDw8IDI3KSkKKyNkZWZpbmUgQ0dVX1BMTDFfU1JDCQkJXAorCShsdHFfY2d1X3IzMihMVFFfQ0dVX1BMTDFfQ0ZHKSAmICgxIDw8IDMxKSkKKyNkZWZpbmUgQ0dVX1BMTDJfUEhBU0VfRElWSURFUl9FTkFCTEUJXAorCShsdHFfY2d1X3IzMihMVFFfQ0dVX1BMTDJfQ0ZHKSAmICgxIDw8IDIwKSkKKyNkZWZpbmUgQ0dVX1NZU19GUElfU0VMCQkJKDEgPDwgNikKKyNkZWZpbmUgQ0dVX1NZU19ERFJfU0VMCQkJMHgzCisjZGVmaW5lIENHVV9QTEwwX1NSQwkJCSgxIDw8IDI5KQorCisjZGVmaW5lIENHVV9QTEwwX0NGR19QTExLCUdFVF9CSVRTKGx0cV9jZ3VfcjMyKExUUV9DR1VfUExMMF9DRkcpLCAyNiwgMTcpCisjZGVmaW5lIENHVV9QTEwwX0NGR19QTExOCUdFVF9CSVRTKGx0cV9jZ3VfcjMyKExUUV9DR1VfUExMMF9DRkcpLCAxMiwgNikKKyNkZWZpbmUgQ0dVX1BMTDBfQ0ZHX1BMTE0JR0VUX0JJVFMobHRxX2NndV9yMzIoTFRRX0NHVV9QTEwwX0NGRyksIDUsIDIpCisjZGVmaW5lIENHVV9QTEwyX1NSQwkJR0VUX0JJVFMobHRxX2NndV9yMzIoTFRRX0NHVV9QTEwyX0NGRyksIDE4LCAxNykKKyNkZWZpbmUgQ0dVX1BMTDJfQ0ZHX0lOUFVUX0RJVglHRVRfQklUUyhsdHFfY2d1X3IzMihMVFFfQ0dVX1BMTDJfQ0ZHKSwgMTYsIDEzKQorCitzdGF0aWMgdW5zaWduZWQgaW50IGx0cV9nZXRfcGxsMF9mZGl2KHZvaWQpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfaW5wdXRfY2xvY2soaW50IHBsbCkKK3sKKwlzd2l0Y2ggKHBsbCkgeworCWNhc2UgMDoKKwkJaWYgKGx0cV9jZ3VfcjMyKExUUV9DR1VfUExMMF9DRkcpICYgQ0dVX1BMTDBfU1JDKQorCQkJcmV0dXJuIEJBU0lTX1JFUVVFTkNZX1VTQjsKKwkJZWxzZSBpZiAoQ0dVX1BMTDBfUEhBU0VfRElWSURFUl9FTkFCTEUpCisJCQlyZXR1cm4gQkFTSUNfRlJFUVVFTkNZXzE7CisJCWVsc2UKKwkJCXJldHVybiBCQVNJQ19GUkVRVUVOQ1lfMjsKKwljYXNlIDE6CisJCWlmIChDR1VfUExMMV9TUkMpCisJCQlyZXR1cm4gQkFTSVNfUkVRVUVOQ1lfVVNCOworCQllbHNlIGlmIChDR1VfUExMMF9QSEFTRV9ESVZJREVSX0VOQUJMRSkKKwkJCXJldHVybiBCQVNJQ19GUkVRVUVOQ1lfMTsKKwkJZWxzZQorCQkJcmV0dXJuIEJBU0lDX0ZSRVFVRU5DWV8yOworCWNhc2UgMjoKKwkJc3dpdGNoIChDR1VfUExMMl9TUkMpIHsKKwkJY2FzZSAwOgorCQkJcmV0dXJuIGx0cV9nZXRfcGxsMF9mZGl2KCk7CisJCWNhc2UgMToKKwkJCXJldHVybiBDR1VfUExMMl9QSEFTRV9ESVZJREVSX0VOQUJMRSA/CisJCQkJQkFTSUNfRlJFUVVFTkNZXzEgOgorCQkJCUJBU0lDX0ZSRVFVRU5DWV8yOworCQljYXNlIDI6CisJCQlyZXR1cm4gQkFTSVNfUkVRVUVOQ1lfVVNCOworCQl9CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjYWxfZHNtKGludCBwbGwsIHVuc2lnbmVkIGludCBudW0sIHVuc2lnbmVkIGludCBkZW4pCit7CisJdTY0IHJlcywgY2xvY2sgPSBnZXRfaW5wdXRfY2xvY2socGxsKTsKKworCXJlcyA9IG51bSAqIGNsb2NrOworCWRvX2RpdihyZXMsIGRlbik7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWFzaF9kc20oaW50IHBsbCwgdW5zaWduZWQgaW50IE0sIHVuc2lnbmVkIGludCBOLAorCXVuc2lnbmVkIGludCBLKQoreworCXVuc2lnbmVkIGludCBudW0gPSAoKE4gKyAxKSA8PCAxMCkgKyBLOworCXVuc2lnbmVkIGludCBkZW4gPSAoTSArIDEpIDw8IDEwOworCisJcmV0dXJuIGNhbF9kc20ocGxsLCBudW0sIGRlbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNzZmZfZHNtXzEoaW50IHBsbCwgdW5zaWduZWQgaW50IE0sIHVuc2lnbmVkIGludCBOLAorCXVuc2lnbmVkIGludCBLKQoreworCXVuc2lnbmVkIGludCBudW0gPSAoKE4gKyAxKSA8PCAxMSkgKyBLICsgNTEyOworCXVuc2lnbmVkIGludCBkZW4gPSAoTSArIDEpIDw8IDExOworCisJcmV0dXJuIGNhbF9kc20ocGxsLCBudW0sIGRlbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNzZmZfZHNtXzIoaW50IHBsbCwgdW5zaWduZWQgaW50IE0sIHVuc2lnbmVkIGludCBOLAorCXVuc2lnbmVkIGludCBLKQoreworCXVuc2lnbmVkIGludCBudW0gPSBLID49IDUxMiA/CisJCSgoTiArIDEpIDw8IDEyKSArIEsgLSA1MTIgOiAoKE4gKyAxKSA8PCAxMikgKyBLICsgMzU4NDsKKwl1bnNpZ25lZCBpbnQgZGVuID0gKE0gKyAxKSA8PCAxMjsKKworCXJldHVybiBjYWxfZHNtKHBsbCwgbnVtLCBkZW4pOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkc20oaW50IHBsbCwgdW5zaWduZWQgaW50IE0sIHVuc2lnbmVkIGludCBOLAorCXVuc2lnbmVkIGludCBLLCB1bnNpZ25lZCBpbnQgZHNtc2VsLCB1bnNpZ25lZCBpbnQgcGhhc2VfZGl2X2VuKQoreworCWlmICghZHNtc2VsKQorCQlyZXR1cm4gbWFzaF9kc20ocGxsLCBNLCBOLCBLKTsKKwllbHNlIGlmICghcGhhc2VfZGl2X2VuKQorCQlyZXR1cm4gbWFzaF9kc20ocGxsLCBNLCBOLCBLKTsKKwllbHNlCisJCXJldHVybiBzc2ZmX2RzbV8yKHBsbCwgTSwgTiwgSyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGx0cV9nZXRfcGxsMF9mb3NjKHZvaWQpCit7CisJaWYgKENHVV9QTEwwX0JZUEFTUykKKwkJcmV0dXJuIGdldF9pbnB1dF9jbG9jaygwKTsKKwllbHNlCisJCXJldHVybiAhQ0dVX1BMTDBfQ0ZHX0ZSQUNfRU4KKwkJCT8gZHNtKDAsIENHVV9QTEwwX0NGR19QTExNLCBDR1VfUExMMF9DRkdfUExMTiwgMCwKKwkJCQlDR1VfUExMMF9DRkdfRFNNU0VMLAorCQkJCUNHVV9QTEwwX1BIQVNFX0RJVklERVJfRU5BQkxFKQorCQkJOiBkc20oMCwgQ0dVX1BMTDBfQ0ZHX1BMTE0sIENHVV9QTEwwX0NGR19QTExOLAorCQkJCUNHVV9QTEwwX0NGR19QTExLLCBDR1VfUExMMF9DRkdfRFNNU0VMLAorCQkJCUNHVV9QTEwwX1BIQVNFX0RJVklERVJfRU5BQkxFKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBsdHFfZ2V0X3BsbDBfZmRpdih2b2lkKQoreworCXVuc2lnbmVkIGludCBkaXYgPSBDR1VfUExMMl9DRkdfSU5QVVRfRElWICsgMTsKKworCXJldHVybiAobHRxX2dldF9wbGwwX2Zvc2MoKSArIChkaXYgPj4gMSkpIC8gZGl2OworfQorCit1bnNpZ25lZCBpbnQgbHRxX2dldF9pb19yZWdpb25fY2xvY2sodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcmV0ID0gbHRxX2dldF9wbGwwX2Zvc2MoKTsKKworCXN3aXRjaCAobHRxX2NndV9yMzIoTFRRX0NHVV9QTEwyX0NGRykgJiBDR1VfU1lTX0REUl9TRUwpIHsKKwlkZWZhdWx0OgorCWNhc2UgMDoKKwkJcmV0dXJuIChyZXQgKyAxKSAvIDI7CisJY2FzZSAxOgorCQlyZXR1cm4gKHJldCAqIDIgKyAyKSAvIDU7CisJY2FzZSAyOgorCQlyZXR1cm4gKHJldCArIDEpIC8gMzsKKwljYXNlIDM6CisJCXJldHVybiAocmV0ICsgMikgLyA0OworCX0KK30KK0VYUE9SVF9TWU1CT0wobHRxX2dldF9pb19yZWdpb25fY2xvY2spOworCit1bnNpZ25lZCBpbnQgbHRxX2dldF9mcGlfYnVzX2Nsb2NrKGludCBmcGkpCit7CisJdW5zaWduZWQgaW50IHJldCA9IGx0cV9nZXRfaW9fcmVnaW9uX2Nsb2NrKCk7CisKKwlpZiAoKGZwaSA9PSAyKSAmJiAobHRxX2NndV9yMzIoTFRRX0NHVV9TWVMpICYgQ0dVX1NZU19GUElfU0VMKSkKKwkJcmV0ID4+PSAxOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGx0cV9nZXRfZnBpX2J1c19jbG9jayk7CisKK3Vuc2lnbmVkIGludCBsdHFfZ2V0X2NwdV9oeih2b2lkKQoreworCXN3aXRjaCAobHRxX2NndV9yMzIoTFRRX0NHVV9TWVMpICYgMHhjKSB7CisJY2FzZSAwOgorCQlyZXR1cm4gQ0xPQ0tfMzMzTTsKKwljYXNlIDQ6CisJCXJldHVybiBERFJfSFo7CisJY2FzZSA4OgorCQlyZXR1cm4gRERSX0haIDw8IDE7CisJZGVmYXVsdDoKKwkJcmV0dXJuIEREUl9IWiA+PiAxOworCX0KK30KK0VYUE9SVF9TWU1CT0wobHRxX2dldF9jcHVfaHopOworCit1bnNpZ25lZCBpbnQgbHRxX2dldF9mcGlfaHoodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgZGRyX2Nsb2NrID0gRERSX0haOworCisJaWYgKGx0cV9jZ3VfcjMyKExUUV9DR1VfU1lTKSAmIDB4NDApCisJCXJldHVybiBkZHJfY2xvY2sgPj4gMTsKKwlyZXR1cm4gZGRyX2Nsb2NrOworfQorRVhQT1JUX1NZTUJPTChsdHFfZ2V0X2ZwaV9oeik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFudGlxL3h3YXkvZGV2aWNlcy5jIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L2RldmljZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDllNzg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L2RldmljZXMuYwpAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorCisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8bGFudGlxX3NvYy5oPgorI2luY2x1ZGUgPGxhbnRpcV9pcnEuaD4KKyNpbmNsdWRlIDxsYW50aXFfcGxhdGZvcm0uaD4KKworI2luY2x1ZGUgImRldmljZXMuaCIKKworLyogZ3BpbyAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsdHFfZ3Bpb19yZXNvdXJjZVtdID0geworCXsKKwkJLm5hbWUJPSAiZ3BpbzAiLAorCQkuc3RhcnQgID0gTFRRX0dQSU8wX0JBU0VfQUREUiwKKwkJLmVuZCAgICA9IExUUV9HUElPMF9CQVNFX0FERFIgKyBMVFFfR1BJT19TSVpFIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLm5hbWUJPSAiZ3BpbzEiLAorCQkuc3RhcnQgID0gTFRRX0dQSU8xX0JBU0VfQUREUiwKKwkJLmVuZCAgICA9IExUUV9HUElPMV9CQVNFX0FERFIgKyBMVFFfR1BJT19TSVpFIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLm5hbWUJPSAiZ3BpbzIiLAorCQkuc3RhcnQgID0gTFRRX0dQSU8yX0JBU0VfQUREUiwKKwkJLmVuZCAgICA9IExUUV9HUElPMl9CQVNFX0FERFIgKyBMVFFfR1BJT19TSVpFIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0KK307CisKK3ZvaWQgX19pbml0IGx0cV9yZWdpc3Rlcl9ncGlvKHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgibHRxX2dwaW8iLCAwLAorCQkmbHRxX2dwaW9fcmVzb3VyY2VbMF0sIDEpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImx0cV9ncGlvIiwgMSwKKwkJJmx0cV9ncGlvX3Jlc291cmNlWzFdLCAxKTsKKworCS8qIEFSOSBhbmQgVlI5IGhhdmUgYW4gZXh0cmEgZ3BpbyBibG9jayAqLworCWlmIChsdHFfaXNfYXI5KCkgfHwgbHRxX2lzX3ZyOSgpKSB7CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImx0cV9ncGlvIiwgMiwKKwkJCSZsdHFfZ3Bpb19yZXNvdXJjZVsyXSwgMSk7CisJfQorfQorCisvKiBzZXJpYWwgdG8gcGFyYWxsZWwgY29udmVyc2lvbiAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsdHFfc3RwX3Jlc291cmNlID0geworCS5uYW1lICAgPSAic3RwIiwKKwkuc3RhcnQgID0gTFRRX1NUUF9CQVNFX0FERFIsCisJLmVuZCAgICA9IExUUV9TVFBfQkFTRV9BRERSICsgTFRRX1NUUF9TSVpFIC0gMSwKKwkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCit9OworCit2b2lkIF9faW5pdCBsdHFfcmVnaXN0ZXJfZ3Bpb19zdHAodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJsdHFfc3RwIiwgMCwgJmx0cV9zdHBfcmVzb3VyY2UsIDEpOworfQorCisvKiBhc2MgcG9ydHMgLSBhbWF6b24gc2UgaGFzIGl0cyBvd24gc2VyaWFsIG1hcHBpbmcgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbHRxX2FzZV9hc2NfcmVzb3VyY2VzW10gPSB7CisJeworCQkubmFtZQk9ICJhc2MwIiwKKwkJLnN0YXJ0ICA9IExUUV9BU0MxX0JBU0VfQUREUiwKKwkJLmVuZCAgICA9IExUUV9BU0MxX0JBU0VfQUREUiArIExUUV9BU0NfU0laRSAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCUlSUV9SRVModHgsIExUUV9BU0NfQVNFX1RJUiksCisJSVJRX1JFUyhyeCwgTFRRX0FTQ19BU0VfUklSKSwKKwlJUlFfUkVTKGVyciwgTFRRX0FTQ19BU0VfRUlSKSwKK307CisKK3ZvaWQgX19pbml0IGx0cV9yZWdpc3Rlcl9hc2VfYXNjKHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgibHRxX2FzYyIsIDAsCisJCWx0cV9hc2VfYXNjX3Jlc291cmNlcywgQVJSQVlfU0laRShsdHFfYXNlX2FzY19yZXNvdXJjZXMpKTsKK30KKworLyogZXRoZXJuZXQgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbHRxX2V0b3BfcmVzb3VyY2VzID0geworCS5uYW1lCT0gImV0b3AiLAorCS5zdGFydAk9IExUUV9FVE9QX0JBU0VfQUREUiwKKwkuZW5kCT0gTFRRX0VUT1BfQkFTRV9BRERSICsgTFRRX0VUT1BfU0laRSAtIDEsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBsdHFfZXRvcCA9IHsKKwkubmFtZQkJPSAibHRxX2V0b3AiLAorCS5yZXNvdXJjZQk9ICZsdHFfZXRvcF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorfTsKKwordm9pZCBfX2luaXQKK2x0cV9yZWdpc3Rlcl9ldG9wKHN0cnVjdCBsdHFfZXRoX2RhdGEgKmV0aCkKK3sKKwlpZiAoZXRoKSB7CisJCWx0cV9ldG9wLmRldi5wbGF0Zm9ybV9kYXRhID0gZXRoOworCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmx0cV9ldG9wKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFudGlxL3h3YXkvZGV2aWNlcy5oIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L2RldmljZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTA0OTM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L2RldmljZXMuaApAQCAtMCwwICsxLDIwIEBACisvKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICovCisKKyNpZm5kZWYgX0xUUV9ERVZJQ0VTX1hXQVlfSF9fCisjZGVmaW5lIF9MVFFfREVWSUNFU19YV0FZX0hfXworCisjaW5jbHVkZSAiLi4vZGV2aWNlcy5oIgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorCitleHRlcm4gdm9pZCBsdHFfcmVnaXN0ZXJfZ3Bpbyh2b2lkKTsKK2V4dGVybiB2b2lkIGx0cV9yZWdpc3Rlcl9ncGlvX3N0cCh2b2lkKTsKK2V4dGVybiB2b2lkIGx0cV9yZWdpc3Rlcl9hc2VfYXNjKHZvaWQpOworZXh0ZXJuIHZvaWQgbHRxX3JlZ2lzdGVyX2V0b3Aoc3RydWN0IGx0cV9ldGhfZGF0YSAqZXRoKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFudGlxL3h3YXkvZG1hLmMgYi9hcmNoL21pcHMvbGFudGlxL3h3YXkvZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI3OGE0NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sYW50aXEveHdheS9kbWEuYwpAQCAtMCwwICsxLDI1MyBAQAorLyoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqICAgQ29weXJpZ2h0IChDKSAyMDExIEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisjaW5jbHVkZSA8bGFudGlxX3NvYy5oPgorI2luY2x1ZGUgPHh3YXlfZG1hLmg+CisKKyNkZWZpbmUgTFRRX0RNQV9DVFJMCQkweDEwCisjZGVmaW5lIExUUV9ETUFfQ1BPTEwJCTB4MTQKKyNkZWZpbmUgTFRRX0RNQV9DUwkJMHgxOAorI2RlZmluZSBMVFFfRE1BX0NDVFJMCQkweDFDCisjZGVmaW5lIExUUV9ETUFfQ0RCQQkJMHgyMAorI2RlZmluZSBMVFFfRE1BX0NETEVOCQkweDI0CisjZGVmaW5lIExUUV9ETUFfQ0lTCQkweDI4CisjZGVmaW5lIExUUV9ETUFfQ0lFCQkweDJDCisjZGVmaW5lIExUUV9ETUFfUFMJCTB4NDAKKyNkZWZpbmUgTFRRX0RNQV9QQ1RSTAkJMHg0NAorI2RlZmluZSBMVFFfRE1BX0lSTkVOCQkweGY0CisKKyNkZWZpbmUgRE1BX0RFU0NQVAkJQklUKDMpCQkvKiBkZXNjcmlwdG9yIGNvbXBsZXRlIGlycSAqLworI2RlZmluZSBETUFfVFgJCQlCSVQoOCkJCS8qIFRYIGNoYW5uZWwgZGlyZWN0aW9uICovCisjZGVmaW5lIERNQV9DSEFOX09OCQlCSVQoMCkJCS8qIGNoYW5uZWwgb24gLyBvZmYgYml0ICovCisjZGVmaW5lIERNQV9QREVOCQlCSVQoNikJCS8qIGVuYWJsZSBwYWNrZXQgZHJvcCAqLworI2RlZmluZSBETUFfQ0hBTl9SU1QJCUJJVCgxKQkJLyogY2hhbm5lbCBvbiAvIG9mZiBiaXQgKi8KKyNkZWZpbmUgRE1BX1JFU0VUCQlCSVQoMCkJCS8qIGNoYW5uZWwgb24gLyBvZmYgYml0ICovCisjZGVmaW5lIERNQV9JUlFfQUNLCQkweDdlCQkvKiBJUlEgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIERNQV9QT0xMCQlCSVQoMzEpCQkvKiB0dXJuIG9uIGNoYW5uZWwgcG9sbGluZyAqLworI2RlZmluZSBETUFfQ0xLX0RJVjQJCUJJVCg2KQkJLyogcG9sbGluZyBjbG9jayBkaXZpZGVyICovCisjZGVmaW5lIERNQV8yV19CVVJTVAkJQklUKDEpCQkvKiAyIHdvcmQgYnVyc3QgbGVuZ3RoICovCisjZGVmaW5lIERNQV9NQVhfQ0hBTk5FTAkJMjAJCS8qIHRoZSBzb2MgaGFzIDIwIGNoYW5uZWxzICovCisjZGVmaW5lIERNQV9FVE9QX0VORElBTkVTUwkoMHhmIDw8IDgpIC8qIGVuZGlhbmVzcyBzd2FwIGV0b3AgY2hhbm5lbHMgKi8KKyNkZWZpbmUgRE1BX1dFSUdIVAkoQklUKDE3KSB8IEJJVCgxNikpCS8qIGRlZmF1bHQgY2hhbm5lbCB3aGVpZ2h0ICovCisKKyNkZWZpbmUgbHRxX2RtYV9yMzIoeCkJCQlsdHFfcjMyKGx0cV9kbWFfbWVtYmFzZSArICh4KSkKKyNkZWZpbmUgbHRxX2RtYV93MzIoeCwgeSkJCWx0cV93MzIoeCwgbHRxX2RtYV9tZW1iYXNlICsgKHkpKQorI2RlZmluZSBsdHFfZG1hX3czMl9tYXNrKHgsIHksIHopCWx0cV93MzJfbWFzayh4LCB5LCBcCisJCQkJCQlsdHFfZG1hX21lbWJhc2UgKyAoeikpCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbHRxX2RtYV9yZXNvdXJjZSA9IHsKKwkubmFtZQk9ICJkbWEiLAorCS5zdGFydAk9IExUUV9ETUFfQkFTRV9BRERSLAorCS5lbmQJPSBMVFFfRE1BX0JBU0VfQUREUiArIExUUV9ETUFfU0laRSAtIDEsCisJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHZvaWQgX19pb21lbSAqbHRxX2RtYV9tZW1iYXNlOworCit2b2lkCitsdHFfZG1hX2VuYWJsZV9pcnEoc3RydWN0IGx0cV9kbWFfY2hhbm5lbCAqY2gpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlsdHFfZG1hX3czMihjaC0+bnIsIExUUV9ETUFfQ1MpOworCWx0cV9kbWFfdzMyX21hc2soMCwgMSA8PCBjaC0+bnIsIExUUV9ETUFfSVJORU4pOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGx0cV9kbWFfZW5hYmxlX2lycSk7CisKK3ZvaWQKK2x0cV9kbWFfZGlzYWJsZV9pcnEoc3RydWN0IGx0cV9kbWFfY2hhbm5lbCAqY2gpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlsdHFfZG1hX3czMihjaC0+bnIsIExUUV9ETUFfQ1MpOworCWx0cV9kbWFfdzMyX21hc2soMSA8PCBjaC0+bnIsIDAsIExUUV9ETUFfSVJORU4pOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGx0cV9kbWFfZGlzYWJsZV9pcnEpOworCit2b2lkCitsdHFfZG1hX2Fja19pcnEoc3RydWN0IGx0cV9kbWFfY2hhbm5lbCAqY2gpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlsdHFfZG1hX3czMihjaC0+bnIsIExUUV9ETUFfQ1MpOworCWx0cV9kbWFfdzMyKERNQV9JUlFfQUNLLCBMVFFfRE1BX0NJUyk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobHRxX2RtYV9hY2tfaXJxKTsKKwordm9pZAorbHRxX2RtYV9vcGVuKHN0cnVjdCBsdHFfZG1hX2NoYW5uZWwgKmNoKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZzsKKworCWxvY2FsX2lycV9zYXZlKGZsYWcpOworCWx0cV9kbWFfdzMyKGNoLT5uciwgTFRRX0RNQV9DUyk7CisJbHRxX2RtYV93MzJfbWFzaygwLCBETUFfQ0hBTl9PTiwgTFRRX0RNQV9DQ1RSTCk7CisJbHRxX2RtYV9lbmFibGVfaXJxKGNoKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFnKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGx0cV9kbWFfb3Blbik7CisKK3ZvaWQKK2x0cV9kbWFfY2xvc2Uoc3RydWN0IGx0cV9kbWFfY2hhbm5lbCAqY2gpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZyk7CisJbHRxX2RtYV93MzIoY2gtPm5yLCBMVFFfRE1BX0NTKTsKKwlsdHFfZG1hX3czMl9tYXNrKERNQV9DSEFOX09OLCAwLCBMVFFfRE1BX0NDVFJMKTsKKwlsdHFfZG1hX2Rpc2FibGVfaXJxKGNoKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFnKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGx0cV9kbWFfY2xvc2UpOworCitzdGF0aWMgdm9pZAorbHRxX2RtYV9hbGxvYyhzdHJ1Y3QgbHRxX2RtYV9jaGFubmVsICpjaCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY2gtPmRlc2MgPSAwOworCWNoLT5kZXNjX2Jhc2UgPSBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwKKwkJCQlMVFFfREVTQ19OVU0gKiBMVFFfREVTQ19TSVpFLAorCQkJCSZjaC0+cGh5cywgR0ZQX0FUT01JQyk7CisJbWVtc2V0KGNoLT5kZXNjX2Jhc2UsIDAsIExUUV9ERVNDX05VTSAqIExUUV9ERVNDX1NJWkUpOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWx0cV9kbWFfdzMyKGNoLT5uciwgTFRRX0RNQV9DUyk7CisJbHRxX2RtYV93MzIoY2gtPnBoeXMsIExUUV9ETUFfQ0RCQSk7CisJbHRxX2RtYV93MzIoTFRRX0RFU0NfTlVNLCBMVFFfRE1BX0NETEVOKTsKKwlsdHFfZG1hX3czMl9tYXNrKERNQV9DSEFOX09OLCAwLCBMVFFfRE1BX0NDVFJMKTsKKwl3bWIoKTsKKwlsdHFfZG1hX3czMl9tYXNrKDAsIERNQV9DSEFOX1JTVCwgTFRRX0RNQV9DQ1RSTCk7CisJd2hpbGUgKGx0cV9kbWFfcjMyKExUUV9ETUFfQ0NUUkwpICYgRE1BX0NIQU5fUlNUKQorCQk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCit2b2lkCitsdHFfZG1hX2FsbG9jX3R4KHN0cnVjdCBsdHFfZG1hX2NoYW5uZWwgKmNoKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsdHFfZG1hX2FsbG9jKGNoKTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlsdHFfZG1hX3czMihETUFfREVTQ1BULCBMVFFfRE1BX0NJRSk7CisJbHRxX2RtYV93MzJfbWFzaygwLCAxIDw8IGNoLT5uciwgTFRRX0RNQV9JUk5FTik7CisJbHRxX2RtYV93MzIoRE1BX1dFSUdIVCB8IERNQV9UWCwgTFRRX0RNQV9DQ1RSTCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobHRxX2RtYV9hbGxvY190eCk7CisKK3ZvaWQKK2x0cV9kbWFfYWxsb2Nfcngoc3RydWN0IGx0cV9kbWFfY2hhbm5lbCAqY2gpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWx0cV9kbWFfYWxsb2MoY2gpOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWx0cV9kbWFfdzMyKERNQV9ERVNDUFQsIExUUV9ETUFfQ0lFKTsKKwlsdHFfZG1hX3czMl9tYXNrKDAsIDEgPDwgY2gtPm5yLCBMVFFfRE1BX0lSTkVOKTsKKwlsdHFfZG1hX3czMihETUFfV0VJR0hULCBMVFFfRE1BX0NDVFJMKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChsdHFfZG1hX2FsbG9jX3J4KTsKKwordm9pZAorbHRxX2RtYV9mcmVlKHN0cnVjdCBsdHFfZG1hX2NoYW5uZWwgKmNoKQoreworCWlmICghY2gtPmRlc2NfYmFzZSkKKwkJcmV0dXJuOworCWx0cV9kbWFfY2xvc2UoY2gpOworCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIExUUV9ERVNDX05VTSAqIExUUV9ERVNDX1NJWkUsCisJCWNoLT5kZXNjX2Jhc2UsIGNoLT5waHlzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGx0cV9kbWFfZnJlZSk7CisKK3ZvaWQKK2x0cV9kbWFfaW5pdF9wb3J0KGludCBwKQoreworCWx0cV9kbWFfdzMyKHAsIExUUV9ETUFfUFMpOworCXN3aXRjaCAocCkgeworCWNhc2UgRE1BX1BPUlRfRVRPUDoKKwkJLyoKKwkJICogVGVsbCB0aGUgRE1BIGVuZ2luZSB0byBzd2FwIHRoZSBlbmRpYW5lc3Mgb2YgZGF0YSBmcmFtZXMgYW5kCisJCSAqIGRyb3AgcGFja2V0cyBpZiB0aGUgY2hhbm5lbCBhcmJpdHJhdGlvbiBmYWlscy4KKwkJICovCisJCWx0cV9kbWFfdzMyX21hc2soMCwgRE1BX0VUT1BfRU5ESUFORVNTIHwgRE1BX1BERU4sCisJCQlMVFFfRE1BX1BDVFJMKTsKKwkJYnJlYWs7CisKKwljYXNlIERNQV9QT1JUX0RFVToKKwkJbHRxX2RtYV93MzIoKERNQV8yV19CVVJTVCA8PCA0KSB8IChETUFfMldfQlVSU1QgPDwgMiksCisJCQlMVFFfRE1BX1BDVFJMKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChsdHFfZG1hX2luaXRfcG9ydCk7CisKK2ludCBfX2luaXQKK2x0cV9kbWFfaW5pdCh2b2lkKQoreworCWludCBpOworCisJLyogaW5zZXJ0IGFuZCByZXF1ZXN0IHRoZSBtZW1vcnkgcmVnaW9uICovCisJaWYgKGluc2VydF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZsdHFfZG1hX3Jlc291cmNlKSA8IDApCisJCXBhbmljKCJGYWlsZWQgdG8gaW5zZXJ0IGRtYSBtZW1vcnlcbiIpOworCisJaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbihsdHFfZG1hX3Jlc291cmNlLnN0YXJ0LAorCQkJcmVzb3VyY2Vfc2l6ZSgmbHRxX2RtYV9yZXNvdXJjZSksICJkbWEiKSA8IDApCisJCXBhbmljKCJGYWlsZWQgdG8gcmVxdWVzdCBkbWEgbWVtb3J5XG4iKTsKKworCS8qIHJlbWFwIGRtYSByZWdpc3RlciByYW5nZSAqLworCWx0cV9kbWFfbWVtYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShsdHFfZG1hX3Jlc291cmNlLnN0YXJ0LAorCQkJCXJlc291cmNlX3NpemUoJmx0cV9kbWFfcmVzb3VyY2UpKTsKKwlpZiAoIWx0cV9kbWFfbWVtYmFzZSkKKwkJcGFuaWMoIkZhaWxlZCB0byByZW1hcCBkbWEgbWVtb3J5XG4iKTsKKworCS8qIHBvd2VyIHVwIGFuZCByZXNldCB0aGUgZG1hIGVuZ2luZSAqLworCWx0cV9wbXVfZW5hYmxlKFBNVV9ETUEpOworCWx0cV9kbWFfdzMyX21hc2soMCwgRE1BX1JFU0VULCBMVFFfRE1BX0NUUkwpOworCisJLyogZGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLworCWx0cV9kbWFfdzMyKDAsIExUUV9ETUFfSVJORU4pOworCisJLyogcmVzZXQvY29uZmlndXJlIGVhY2ggY2hhbm5lbCAqLworCWZvciAoaSA9IDA7IGkgPCBETUFfTUFYX0NIQU5ORUw7IGkrKykgeworCQlsdHFfZG1hX3czMihpLCBMVFFfRE1BX0NTKTsKKwkJbHRxX2RtYV93MzIoRE1BX0NIQU5fUlNULCBMVFFfRE1BX0NDVFJMKTsKKwkJbHRxX2RtYV93MzIoRE1BX1BPTEwgfCBETUFfQ0xLX0RJVjQsIExUUV9ETUFfQ1BPTEwpOworCQlsdHFfZG1hX3czMl9tYXNrKERNQV9DSEFOX09OLCAwLCBMVFFfRE1BX0NDVFJMKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3Bvc3Rjb3JlX2luaXRjYWxsKGx0cV9kbWFfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFudGlxL3h3YXkvZWJ1LmMgYi9hcmNoL21pcHMvbGFudGlxL3h3YXkvZWJ1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZlYjUyZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sYW50aXEveHdheS9lYnUuYwpAQCAtMCwwICsxLDUzIEBACisvKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgRUJVIC0gdGhlIGV4dGVybmFsIGJ1cyB1bml0IGF0dGFjaGVzIFBDSSwgTk9SIGFuZCBOQU5ECisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjaW5jbHVkZSA8bGFudGlxX3NvYy5oPgorCisvKiBhbGwgYWNjZXNzIHRvIHRoZSBlYnUgbXVzdCBiZSBsb2NrZWQgKi8KK0RFRklORV9TUElOTE9DSyhlYnVfbG9jayk7CitFWFBPUlRfU1lNQk9MX0dQTChlYnVfbG9jayk7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbHRxX2VidV9yZXNvdXJjZSA9IHsKKwkubmFtZQk9ICJlYnUiLAorCS5zdGFydAk9IExUUV9FQlVfQkFTRV9BRERSLAorCS5lbmQJPSBMVFFfRUJVX0JBU0VfQUREUiArIExUUV9FQlVfU0laRSAtIDEsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCisvKiByZW1hcHBlZCBiYXNlIGFkZHIgb2YgdGhlIGNsb2NrIHVuaXQgYW5kIGV4dGVybmFsIGJ1cyB1bml0ICovCit2b2lkIF9faW9tZW0gKmx0cV9lYnVfbWVtYmFzZTsKKworc3RhdGljIGludCBfX2luaXQgbGFudGlxX2VidV9pbml0KHZvaWQpCit7CisJLyogaW5zZXJ0IGFuZCByZXF1ZXN0IHRoZSBtZW1vcnkgcmVnaW9uICovCisJaWYgKGluc2VydF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZsdHFfZWJ1X3Jlc291cmNlKSA8IDApCisJCXBhbmljKCJGYWlsZWQgdG8gaW5zZXJ0IGVidSBtZW1vcnlcbiIpOworCisJaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbihsdHFfZWJ1X3Jlc291cmNlLnN0YXJ0LAorCQkJcmVzb3VyY2Vfc2l6ZSgmbHRxX2VidV9yZXNvdXJjZSksICJlYnUiKSA8IDApCisJCXBhbmljKCJGYWlsZWQgdG8gcmVxdWVzdCBlYnUgbWVtb3J5XG4iKTsKKworCS8qIHJlbWFwIGVidSByZWdpc3RlciByYW5nZSAqLworCWx0cV9lYnVfbWVtYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShsdHFfZWJ1X3Jlc291cmNlLnN0YXJ0LAorCQkJCXJlc291cmNlX3NpemUoJmx0cV9lYnVfcmVzb3VyY2UpKTsKKwlpZiAoIWx0cV9lYnVfbWVtYmFzZSkKKwkJcGFuaWMoIkZhaWxlZCB0byByZW1hcCBlYnUgbWVtb3J5XG4iKTsKKworCS8qIG1ha2Ugc3VyZSB0byB1bnByb3RlY3QgdGhlIG1lbW9yeSByZWdpb24gd2hlcmUgZmxhc2ggaXMgbG9jYXRlZCAqLworCWx0cV9lYnVfdzMyKGx0cV9lYnVfcjMyKExUUV9FQlVfQlVTQ09OMCkgJiB+RUJVX1dSRElTLCBMVFFfRUJVX0JVU0NPTjApOworCXJldHVybiAwOworfQorCitwb3N0Y29yZV9pbml0Y2FsbChsYW50aXFfZWJ1X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhbnRpcS94d2F5L2dwaW8uYyBiL2FyY2gvbWlwcy9sYW50aXEveHdheS9ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMyMTQ1MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sYW50aXEveHdheS9ncGlvLmMKQEAgLTAsMCArMSwxOTUgQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGxhbnRpcV9zb2MuaD4KKworI2RlZmluZSBMVFFfR1BJT19PVVQJCTB4MDAKKyNkZWZpbmUgTFRRX0dQSU9fSU4JCTB4MDQKKyNkZWZpbmUgTFRRX0dQSU9fRElSCQkweDA4CisjZGVmaW5lIExUUV9HUElPX0FMVFNFTDAJMHgwQworI2RlZmluZSBMVFFfR1BJT19BTFRTRUwxCTB4MTAKKyNkZWZpbmUgTFRRX0dQSU9fT0QJCTB4MTQKKworI2RlZmluZSBQSU5TX1BFUl9QT1JUCQkxNgorI2RlZmluZSBNQVhfUE9SVFMJCTMKKworI2RlZmluZSBsdHFfZ3Bpb19nZXRiaXQobSwgciwgcCkJKCEhKGx0cV9yMzIobSArIHIpICYgKDEgPDwgcCkpKQorI2RlZmluZSBsdHFfZ3Bpb19zZXRiaXQobSwgciwgcCkJbHRxX3czMl9tYXNrKDAsICgxIDw8IHApLCBtICsgcikKKyNkZWZpbmUgbHRxX2dwaW9fY2xlYXJiaXQobSwgciwgcCkJbHRxX3czMl9tYXNrKCgxIDw8IHApLCAwLCBtICsgcikKKworc3RydWN0IGx0cV9ncGlvIHsKKwl2b2lkIF9faW9tZW0gKm1lbWJhc2U7CisJc3RydWN0IGdwaW9fY2hpcCBjaGlwOworfTsKKworc3RhdGljIHN0cnVjdCBsdHFfZ3BpbyBsdHFfZ3Bpb19wb3J0W01BWF9QT1JUU107CisKK2ludCBncGlvX3RvX2lycSh1bnNpZ25lZCBpbnQgZ3BpbykKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KK0VYUE9SVF9TWU1CT0woZ3Bpb190b19pcnEpOworCitpbnQgaXJxX3RvX2dwaW8odW5zaWduZWQgaW50IGdwaW8pCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CitFWFBPUlRfU1lNQk9MKGlycV90b19ncGlvKTsKKworaW50IGx0cV9ncGlvX3JlcXVlc3QodW5zaWduZWQgaW50IHBpbiwgdW5zaWduZWQgaW50IGFsdDAsCisJdW5zaWduZWQgaW50IGFsdDEsIHVuc2lnbmVkIGludCBkaXIsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaW50IGlkID0gMDsKKworCWlmIChwaW4gPj0gKE1BWF9QT1JUUyAqIFBJTlNfUEVSX1BPUlQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZ3Bpb19yZXF1ZXN0KHBpbiwgbmFtZSkpIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gc2V0dXAgbGFudGlxIGdwaW86ICVzXG4iLCBuYW1lKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJaWYgKGRpcikKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBpbiwgMSk7CisJZWxzZQorCQlncGlvX2RpcmVjdGlvbl9pbnB1dChwaW4pOworCXdoaWxlIChwaW4gPj0gUElOU19QRVJfUE9SVCkgeworCQlwaW4gLT0gUElOU19QRVJfUE9SVDsKKwkJaWQrKzsKKwl9CisJaWYgKGFsdDApCisJCWx0cV9ncGlvX3NldGJpdChsdHFfZ3Bpb19wb3J0W2lkXS5tZW1iYXNlLAorCQkJTFRRX0dQSU9fQUxUU0VMMCwgcGluKTsKKwllbHNlCisJCWx0cV9ncGlvX2NsZWFyYml0KGx0cV9ncGlvX3BvcnRbaWRdLm1lbWJhc2UsCisJCQlMVFFfR1BJT19BTFRTRUwwLCBwaW4pOworCWlmIChhbHQxKQorCQlsdHFfZ3Bpb19zZXRiaXQobHRxX2dwaW9fcG9ydFtpZF0ubWVtYmFzZSwKKwkJCUxUUV9HUElPX0FMVFNFTDEsIHBpbik7CisJZWxzZQorCQlsdHFfZ3Bpb19jbGVhcmJpdChsdHFfZ3Bpb19wb3J0W2lkXS5tZW1iYXNlLAorCQkJTFRRX0dQSU9fQUxUU0VMMSwgcGluKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wobHRxX2dwaW9fcmVxdWVzdCk7CisKK3N0YXRpYyB2b2lkIGx0cV9ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJc3RydWN0IGx0cV9ncGlvICpsdHFfZ3BpbyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgbHRxX2dwaW8sIGNoaXApOworCisJaWYgKHZhbHVlKQorCQlsdHFfZ3Bpb19zZXRiaXQobHRxX2dwaW8tPm1lbWJhc2UsIExUUV9HUElPX09VVCwgb2Zmc2V0KTsKKwllbHNlCisJCWx0cV9ncGlvX2NsZWFyYml0KGx0cV9ncGlvLT5tZW1iYXNlLCBMVFFfR1BJT19PVVQsIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbnQgbHRxX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBvZmZzZXQpCit7CisJc3RydWN0IGx0cV9ncGlvICpsdHFfZ3BpbyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgbHRxX2dwaW8sIGNoaXApOworCisJcmV0dXJuIGx0cV9ncGlvX2dldGJpdChsdHFfZ3Bpby0+bWVtYmFzZSwgTFRRX0dQSU9fSU4sIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbnQgbHRxX2dwaW9fZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBvZmZzZXQpCit7CisJc3RydWN0IGx0cV9ncGlvICpsdHFfZ3BpbyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgbHRxX2dwaW8sIGNoaXApOworCisJbHRxX2dwaW9fY2xlYXJiaXQobHRxX2dwaW8tPm1lbWJhc2UsIExUUV9HUElPX09ELCBvZmZzZXQpOworCWx0cV9ncGlvX2NsZWFyYml0KGx0cV9ncGlvLT5tZW1iYXNlLCBMVFFfR1BJT19ESVIsIG9mZnNldCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsdHFfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJdW5zaWduZWQgaW50IG9mZnNldCwgaW50IHZhbHVlKQoreworCXN0cnVjdCBsdHFfZ3BpbyAqbHRxX2dwaW8gPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGx0cV9ncGlvLCBjaGlwKTsKKworCWx0cV9ncGlvX3NldGJpdChsdHFfZ3Bpby0+bWVtYmFzZSwgTFRRX0dQSU9fT0QsIG9mZnNldCk7CisJbHRxX2dwaW9fc2V0Yml0KGx0cV9ncGlvLT5tZW1iYXNlLCBMVFFfR1BJT19ESVIsIG9mZnNldCk7CisJbHRxX2dwaW9fc2V0KGNoaXAsIG9mZnNldCwgdmFsdWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbHRxX2dwaW9fcmVxKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgbHRxX2dwaW8gKmx0cV9ncGlvID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBsdHFfZ3BpbywgY2hpcCk7CisKKwlsdHFfZ3Bpb19jbGVhcmJpdChsdHFfZ3Bpby0+bWVtYmFzZSwgTFRRX0dQSU9fQUxUU0VMMCwgb2Zmc2V0KTsKKwlsdHFfZ3Bpb19jbGVhcmJpdChsdHFfZ3Bpby0+bWVtYmFzZSwgTFRRX0dQSU9fQUxUU0VMMSwgb2Zmc2V0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsdHFfZ3Bpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJaWYgKHBkZXYtPmlkID49IE1BWF9QT1JUUykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIGdwaW8gcG9ydCAlZFxuIiwKKwkJCXBkZXYtPmlkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBtZW1vcnkgZm9yIGdwaW8gcG9ydCAlZFxuIiwKKwkJCXBkZXYtPmlkKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCXJlcyA9IGRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCisJCXJlc291cmNlX3NpemUocmVzKSwgZGV2X25hbWUoJnBkZXYtPmRldikpOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJmYWlsZWQgdG8gcmVxdWVzdCBtZW1vcnkgZm9yIGdwaW8gcG9ydCAlZFxuIiwKKwkJCXBkZXYtPmlkKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJbHRxX2dwaW9fcG9ydFtwZGV2LT5pZF0ubWVtYmFzZSA9IGRldm1faW9yZW1hcF9ub2NhY2hlKCZwZGV2LT5kZXYsCisJCXJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFsdHFfZ3Bpb19wb3J0W3BkZXYtPmlkXS5tZW1iYXNlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZW1hcCBtZW1vcnkgZm9yIGdwaW8gcG9ydCAlZFxuIiwKKwkJCXBkZXYtPmlkKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWx0cV9ncGlvX3BvcnRbcGRldi0+aWRdLmNoaXAubGFiZWwgPSAibHRxX2dwaW8iOworCWx0cV9ncGlvX3BvcnRbcGRldi0+aWRdLmNoaXAuZGlyZWN0aW9uX2lucHV0ID0gbHRxX2dwaW9fZGlyZWN0aW9uX2lucHV0OworCWx0cV9ncGlvX3BvcnRbcGRldi0+aWRdLmNoaXAuZGlyZWN0aW9uX291dHB1dCA9CisJCWx0cV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQ7CisJbHRxX2dwaW9fcG9ydFtwZGV2LT5pZF0uY2hpcC5nZXQgPSBsdHFfZ3Bpb19nZXQ7CisJbHRxX2dwaW9fcG9ydFtwZGV2LT5pZF0uY2hpcC5zZXQgPSBsdHFfZ3Bpb19zZXQ7CisJbHRxX2dwaW9fcG9ydFtwZGV2LT5pZF0uY2hpcC5yZXF1ZXN0ID0gbHRxX2dwaW9fcmVxOworCWx0cV9ncGlvX3BvcnRbcGRldi0+aWRdLmNoaXAuYmFzZSA9IFBJTlNfUEVSX1BPUlQgKiBwZGV2LT5pZDsKKwlsdHFfZ3Bpb19wb3J0W3BkZXYtPmlkXS5jaGlwLm5ncGlvID0gUElOU19QRVJfUE9SVDsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCAmbHRxX2dwaW9fcG9ydFtwZGV2LT5pZF0pOworCXJldHVybiBncGlvY2hpcF9hZGQoJmx0cV9ncGlvX3BvcnRbcGRldi0+aWRdLmNoaXApOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlcgorbHRxX2dwaW9fZHJpdmVyID0geworCS5wcm9iZSA9IGx0cV9ncGlvX3Byb2JlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImx0cV9ncGlvIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK2ludCBfX2luaXQgbHRxX2dwaW9faW5pdCh2b2lkKQoreworCWludCByZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmx0cV9ncGlvX2RyaXZlcik7CisKKwlpZiAocmV0KQorCQlwcl9pbmZvKCJsdHFfZ3BpbyA6IEVycm9yIHJlZ2lzdGVyaW5nIHBsYXRmb20gZHJpdmVyISIpOworCXJldHVybiByZXQ7Cit9CisKK3Bvc3Rjb3JlX2luaXRjYWxsKGx0cV9ncGlvX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhbnRpcS94d2F5L2dwaW9fZWJ1LmMgYi9hcmNoL21pcHMvbGFudGlxL3h3YXkvZ3Bpb19lYnUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDc5MzU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L2dwaW9fZWJ1LmMKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxsYW50aXFfc29jLmg+CisKKy8qCisgKiBCeSBhdHRhY2hpbmcgaGFyZHdhcmUgbGF0Y2hlcyB0byB0aGUgRUJVIGl0IGlzIHBvc3NpYmxlIHRvIGNyZWF0ZSBvdXRwdXQKKyAqIG9ubHkgZ3Bpb3MuIFRoaXMgZHJpdmVyIGNvbmZpZ3VyZXMgYSBzcGVjaWFsIG1lbW9yeSBhZGRyZXNzLCB3aGljaCB3aGVuCisgKiB3cml0dGVuIHRvIG91dHB1dHMgMTYgYml0IHRvIHRoZSBsYXRjaGVzLgorICovCisKKyNkZWZpbmUgTFRRX0VCVV9CVVNDT04JMHgxZTdmZgkJLyogMTYgYml0IGFjY2Vzcywgc2xvd2VzdCB0aW1pbmcgKi8KKyNkZWZpbmUgTFRRX0VCVV9XUAkweDgwMDAwMDAwCS8qIHdyaXRlIHByb3RlY3QgYml0ICovCisKKy8qIHdlIGtlZXAgYSBzaGFkb3cgdmFsdWUgb2YgdGhlIGxhc3QgdmFsdWUgd3JpdHRlbiB0byB0aGUgZWJ1ICovCitzdGF0aWMgaW50IGx0cV9lYnVfZ3Bpb19zaGFkb3cgPSAweDA7CitzdGF0aWMgdm9pZCBfX2lvbWVtICpsdHFfZWJ1X2dwaW9fbWVtYmFzZTsKKworc3RhdGljIHZvaWQgbHRxX2VidV9hcHBseSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWJ1X2xvY2ssIGZsYWdzKTsKKwlsdHFfZWJ1X3czMihMVFFfRUJVX0JVU0NPTiwgTFRRX0VCVV9CVVNDT04xKTsKKwkqKChfX3UxNiAqKWx0cV9lYnVfZ3Bpb19tZW1iYXNlKSA9IGx0cV9lYnVfZ3Bpb19zaGFkb3c7CisJbHRxX2VidV93MzIoTFRRX0VCVV9CVVNDT04gfCBMVFFfRUJVX1dQLCBMVFFfRUJVX0JVU0NPTjEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVidV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGx0cV9lYnVfc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCWlmICh2YWx1ZSkKKwkJbHRxX2VidV9ncGlvX3NoYWRvdyB8PSAoMSA8PCBvZmZzZXQpOworCWVsc2UKKwkJbHRxX2VidV9ncGlvX3NoYWRvdyAmPSB+KDEgPDwgb2Zmc2V0KTsKKwlsdHFfZWJ1X2FwcGx5KCk7Cit9CisKK3N0YXRpYyBpbnQgbHRxX2VidV9kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwKKwlpbnQgdmFsdWUpCit7CisJbHRxX2VidV9zZXQoY2hpcCwgb2Zmc2V0LCB2YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBncGlvX2NoaXAgbHRxX2VidV9jaGlwID0geworCS5sYWJlbCA9ICJsdHFfZWJ1IiwKKwkuZGlyZWN0aW9uX291dHB1dCA9IGx0cV9lYnVfZGlyZWN0aW9uX291dHB1dCwKKwkuc2V0ID0gbHRxX2VidV9zZXQsCisJLmJhc2UgPSA3MiwKKwkubmdwaW8gPSAxNiwKKwkuY2FuX3NsZWVwID0gMSwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgbHRxX2VidV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQgPSAwOworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgbWVtb3J5IHJlc291cmNlXG4iKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJcmVzID0gZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKKwkJcmVzb3VyY2Vfc2l6ZShyZXMpLCBkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgbWVtb3J5IHJlc291cmNlXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlsdHFfZWJ1X2dwaW9fbWVtYmFzZSA9IGRldm1faW9yZW1hcF9ub2NhY2hlKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCisJCXJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFsdHFfZWJ1X2dwaW9fbWVtYmFzZSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gaW9yZW1hcCBtZW0gcmVnaW9uXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogZ3JhYiB0aGUgZGVmYXVsdCBzaGFkb3cgdmFsdWUgcGFzc2VkIGZvcm0gdGhlIHBsYXRmb3JtIGNvZGUgKi8KKwlsdHFfZWJ1X2dwaW9fc2hhZG93ID0gKHVuc2lnbmVkIGludCkgcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwkvKiB0ZWxsIHRoZSBlYnUgY29udHJvbGxlciB3aGljaCBtZW1vcnkgYWRkcmVzcyB3ZSB3aWxsIGJlIHVzaW5nICovCisJbHRxX2VidV93MzIocGRldi0+cmVzb3VyY2UtPnN0YXJ0IHwgMHgxLCBMVFFfRUJVX0FERFJTRUwxKTsKKworCS8qIHdyaXRlIHByb3RlY3QgdGhlIHJlZ2lvbiAqLworCWx0cV9lYnVfdzMyKExUUV9FQlVfQlVTQ09OIHwgTFRRX0VCVV9XUCwgTFRRX0VCVV9CVVNDT04xKTsKKworCXJldCA9IGdwaW9jaGlwX2FkZCgmbHRxX2VidV9jaGlwKTsKKwlpZiAoIXJldCkKKwkJbHRxX2VidV9hcHBseSgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGx0cV9lYnVfZHJpdmVyID0geworCS5wcm9iZSA9IGx0cV9lYnVfcHJvYmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibHRxX2VidSIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBsdHFfZWJ1X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZsdHFfZWJ1X2RyaXZlcik7CisKKwlpZiAocmV0KQorCQlwcl9pbmZvKCJsdHFfZWJ1IDogRXJyb3IgcmVnaXN0ZXJpbmcgcGxhdGZvbSBkcml2ZXIhIik7CisJcmV0dXJuIHJldDsKK30KKworcG9zdGNvcmVfaW5pdGNhbGwobHRxX2VidV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYW50aXEveHdheS9ncGlvX3N0cC5jIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L2dwaW9fc3RwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdkNTlkNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sYW50aXEveHdheS9ncGlvX3N0cC5jCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxsYW50aXFfc29jLmg+CisKKyNkZWZpbmUgTFRRX1NUUF9DT04wCQkweDAwCisjZGVmaW5lIExUUV9TVFBfQ09OMQkJMHgwNAorI2RlZmluZSBMVFFfU1RQX0NQVTAJCTB4MDgKKyNkZWZpbmUgTFRRX1NUUF9DUFUxCQkweDBDCisjZGVmaW5lIExUUV9TVFBfQVIJCTB4MTAKKworI2RlZmluZSBMVFFfU1RQX0NPTl9TV1UJCSgxIDw8IDMxKQorI2RlZmluZSBMVFFfU1RQXzJIWgkJMAorI2RlZmluZSBMVFFfU1RQXzRIWgkJKDEgPDwgMjMpCisjZGVmaW5lIExUUV9TVFBfOEhaCQkoMiA8PCAyMykKKyNkZWZpbmUgTFRRX1NUUF8xMEhaCQkoMyA8PCAyMykKKyNkZWZpbmUgTFRRX1NUUF9TUEVFRF9NQVNLCSgweGYgPDwgMjMpCisjZGVmaW5lIExUUV9TVFBfVVBEX0ZQSQkJKDEgPDwgMzEpCisjZGVmaW5lIExUUV9TVFBfVVBEX01BU0sJKDMgPDwgMzApCisjZGVmaW5lIExUUV9TVFBfQURTTF9TUkMJKDMgPDwgMjQpCisKKyNkZWZpbmUgTFRRX1NUUF9HUk9VUDAJCSgxIDw8IDApCisKKyNkZWZpbmUgTFRRX1NUUF9SSVNJTkcJCTAKKyNkZWZpbmUgTFRRX1NUUF9GQUxMSU5HCQkoMSA8PCAyNikKKyNkZWZpbmUgTFRRX1NUUF9FREdFX01BU0sJKDEgPDwgMjYpCisKKyNkZWZpbmUgbHRxX3N0cF9yMzIocmVnKQlfX3Jhd19yZWFkbChsdHFfc3RwX21lbWJhc2UgKyByZWcpCisjZGVmaW5lIGx0cV9zdHBfdzMyKHZhbCwgcmVnKQlfX3Jhd193cml0ZWwodmFsLCBsdHFfc3RwX21lbWJhc2UgKyByZWcpCisjZGVmaW5lIGx0cV9zdHBfdzMyX21hc2soY2xlYXIsIHNldCwgcmVnKSBcCisJCWx0cV93MzIoKGx0cV9yMzIobHRxX3N0cF9tZW1iYXNlICsgcmVnKSAmIH4oY2xlYXIpKSB8IChzZXQpLCBcCisJCWx0cV9zdHBfbWVtYmFzZSArIChyZWcpKQorCitzdGF0aWMgaW50IGx0cV9zdHBfc2hhZG93ID0gMHhmZmZmOworc3RhdGljIHZvaWQgX19pb21lbSAqbHRxX3N0cF9tZW1iYXNlOworCitzdGF0aWMgdm9pZCBsdHFfc3RwX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlpZiAodmFsdWUpCisJCWx0cV9zdHBfc2hhZG93IHw9ICgxIDw8IG9mZnNldCk7CisJZWxzZQorCQlsdHFfc3RwX3NoYWRvdyAmPSB+KDEgPDwgb2Zmc2V0KTsKKwlsdHFfc3RwX3czMihsdHFfc3RwX3NoYWRvdywgTFRRX1NUUF9DUFUwKTsKK30KKworc3RhdGljIGludCBsdHFfc3RwX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LAorCWludCB2YWx1ZSkKK3sKKwlsdHFfc3RwX3NldChjaGlwLCBvZmZzZXQsIHZhbHVlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGdwaW9fY2hpcCBsdHFfc3RwX2NoaXAgPSB7CisJLmxhYmVsID0gImx0cV9zdHAiLAorCS5kaXJlY3Rpb25fb3V0cHV0ID0gbHRxX3N0cF9kaXJlY3Rpb25fb3V0cHV0LAorCS5zZXQgPSBsdHFfc3RwX3NldCwKKwkuYmFzZSA9IDQ4LAorCS5uZ3BpbyA9IDI0LAorCS5jYW5fc2xlZXAgPSAxLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGludCBsdHFfc3RwX2h3X2luaXQodm9pZCkKK3sKKwkvKiB0aGUgMyBwaW5zIHVzZWQgdG8gY29udHJvbCB0aGUgZXh0ZXJuYWwgc3RwICovCisJbHRxX2dwaW9fcmVxdWVzdCg0LCAxLCAwLCAxLCAic3RwLXN0Iik7CisJbHRxX2dwaW9fcmVxdWVzdCg1LCAxLCAwLCAxLCAic3RwLWQiKTsKKwlsdHFfZ3Bpb19yZXF1ZXN0KDYsIDEsIDAsIDEsICJzdHAtc2giKTsKKworCS8qIHNhbmUgZGVmYXVsdHMgKi8KKwlsdHFfc3RwX3czMigwLCBMVFFfU1RQX0FSKTsKKwlsdHFfc3RwX3czMigwLCBMVFFfU1RQX0NQVTApOworCWx0cV9zdHBfdzMyKDAsIExUUV9TVFBfQ1BVMSk7CisJbHRxX3N0cF93MzIoTFRRX1NUUF9DT05fU1dVLCBMVFFfU1RQX0NPTjApOworCWx0cV9zdHBfdzMyKDAsIExUUV9TVFBfQ09OMSk7CisKKwkvKiByaXNpbmcgb3IgZmFsbGluZyBlZGdlICovCisJbHRxX3N0cF93MzJfbWFzayhMVFFfU1RQX0VER0VfTUFTSywgTFRRX1NUUF9GQUxMSU5HLCBMVFFfU1RQX0NPTjApOworCisJLyogcGVyIGRlZmF1bHQgc3RwIDE1LTAgYXJlIHNldCAqLworCWx0cV9zdHBfdzMyX21hc2soMCwgTFRRX1NUUF9HUk9VUDAsIExUUV9TVFBfQ09OMSk7CisKKwkvKiBzdHAgYXJlIHVwZGF0ZSBwZXJpb2RpY2FsbHkgYnkgdGhlIEZQSSBidXMgKi8KKwlsdHFfc3RwX3czMl9tYXNrKExUUV9TVFBfVVBEX01BU0ssIExUUV9TVFBfVVBEX0ZQSSwgTFRRX1NUUF9DT04xKTsKKworCS8qIHNldCBzdHAgdXBkYXRlIHNwZWVkICovCisJbHRxX3N0cF93MzJfbWFzayhMVFFfU1RQX1NQRUVEX01BU0ssIExUUV9TVFBfOEhaLCBMVFFfU1RQX0NPTjEpOworCisJLyogdGVsbCB0aGUgaGFyZHdhcmUgdGhhdCBwaW4gKGxlZCkgMCBhbmQgMSBhcmUgY29udHJvbGxlZAorCSAqICBieSB0aGUgZHNsIGFyYworCSAqLworCWx0cV9zdHBfdzMyX21hc2soMCwgTFRRX1NUUF9BRFNMX1NSQywgTFRRX1NUUF9DT04wKTsKKworCWx0cV9wbXVfZW5hYmxlKFBNVV9MRUQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBsdHFfc3RwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlICpyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWludCByZXQgPSAwOworCisJaWYgKCFyZXMpCisJCXJldHVybiAtRU5PRU5UOworCXJlcyA9IGRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCisJCXJlc291cmNlX3NpemUocmVzKSwgZGV2X25hbWUoJnBkZXYtPmRldikpOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IFNUUCBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlsdHFfc3RwX21lbWJhc2UgPSBkZXZtX2lvcmVtYXBfbm9jYWNoZSgmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LAorCQlyZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghbHRxX3N0cF9tZW1iYXNlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZW1hcCBTVFAgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJldCA9IGdwaW9jaGlwX2FkZCgmbHRxX3N0cF9jaGlwKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gbHRxX3N0cF9od19pbml0KCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBsdHFfc3RwX2RyaXZlciA9IHsKKwkucHJvYmUgPSBsdHFfc3RwX3Byb2JlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImx0cV9zdHAiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworaW50IF9faW5pdCBsdHFfc3RwX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZsdHFfc3RwX2RyaXZlcik7CisKKwlpZiAocmV0KQorCQlwcl9pbmZvKCJsdHFfc3RwOiBlcnJvciByZWdpc3RlcmluZyBwbGF0Zm9tIGRyaXZlciIpOworCXJldHVybiByZXQ7Cit9CisKK3Bvc3Rjb3JlX2luaXRjYWxsKGx0cV9zdHBfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFudGlxL3h3YXkvbWFjaC1lYXN5NTA2MDEuYyBiL2FyY2gvbWlwcy9sYW50aXEveHdheS9tYWNoLWVhc3k1MDYwMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YWFmNjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbGFudGlxL3h3YXkvbWFjaC1lYXN5NTA2MDEuYwpAQCAtMCwwICsxLDU3IEBACisvKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorCisjaW5jbHVkZSA8bGFudGlxLmg+CisKKyNpbmNsdWRlICIuLi9tYWNodHlwZXMuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBlYXN5NTA2MDFfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUJPSAidWJvb3QiLAorCQkub2Zmc2V0CT0gMHgwLAorCQkuc2l6ZQk9IDB4MTAwMDAsCisJfSwKKwl7CisJCS5uYW1lCT0gInVib290X2VudiIsCisJCS5vZmZzZXQJPSAweDEwMDAwLAorCQkuc2l6ZQk9IDB4MTAwMDAsCisJfSwKKwl7CisJCS5uYW1lCT0gImxpbnV4IiwKKwkJLm9mZnNldAk9IDB4MjAwMDAsCisJCS5zaXplCT0gMHhFMDAwMCwKKwl9LAorCXsKKwkJLm5hbWUJPSAicm9vdGZzIiwKKwkJLm9mZnNldAk9IDB4MTAwMDAwLAorCQkuc2l6ZQk9IDB4MzAwMDAwLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBlYXN5NTA2MDFfZmxhc2hfZGF0YSA9IHsKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGVhc3k1MDYwMV9wYXJ0aXRpb25zKSwKKwkucGFydHMJCT0gZWFzeTUwNjAxX3BhcnRpdGlvbnMsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgZWFzeTUwNjAxX2luaXQodm9pZCkKK3sKKwlsdHFfcmVnaXN0ZXJfbm9yKCZlYXN5NTA2MDFfZmxhc2hfZGF0YSk7Cit9CisKK01JUFNfTUFDSElORShMVFFfTUFDSF9FQVNZNTA2MDEsCisJCQkiRUFTWTUwNjAxIiwKKwkJCSJFQVNZNTA2MDEgRXZhbCBCb2FyZCIsCisJCQllYXN5NTA2MDFfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFudGlxL3h3YXkvbWFjaC1lYXN5NTA3MTIuYyBiL2FyY2gvbWlwcy9sYW50aXEveHdheS9tYWNoLWVhc3k1MDcxMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNTAyN2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbGFudGlxL3h3YXkvbWFjaC1lYXN5NTA3MTIuYwpAQCAtMCwwICsxLDc0IEBACisvKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorCisjaW5jbHVkZSA8bGFudGlxX3NvYy5oPgorI2luY2x1ZGUgPGlycS5oPgorCisjaW5jbHVkZSAiLi4vbWFjaHR5cGVzLmgiCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZWFzeTUwNzEyX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lCT0gInVib290IiwKKwkJLm9mZnNldAk9IDB4MCwKKwkJLnNpemUJPSAweDEwMDAwLAorCX0sCisJeworCQkubmFtZQk9ICJ1Ym9vdF9lbnYiLAorCQkub2Zmc2V0CT0gMHgxMDAwMCwKKwkJLnNpemUJPSAweDEwMDAwLAorCX0sCisJeworCQkubmFtZQk9ICJsaW51eCIsCisJCS5vZmZzZXQJPSAweDIwMDAwLAorCQkuc2l6ZQk9IDB4ZTAwMDAsCisJfSwKKwl7CisJCS5uYW1lCT0gInJvb3RmcyIsCisJCS5vZmZzZXQJPSAweDEwMDAwMCwKKwkJLnNpemUJPSAweDMwMDAwMCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZWFzeTUwNzEyX2ZsYXNoX2RhdGEgPSB7CisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShlYXN5NTA3MTJfcGFydGl0aW9ucyksCisJLnBhcnRzCQk9IGVhc3k1MDcxMl9wYXJ0aXRpb25zLAorfTsKKworc3RhdGljIHN0cnVjdCBsdHFfcGNpX2RhdGEgbHRxX3BjaV9kYXRhID0geworCS5jbG9jawk9IFBDSV9DTE9DS19JTlQsCisJLmdwaW8JPSBQQ0lfR05UMSB8IFBDSV9SRVExLAorCS5pcnEJPSB7CisJCVsxNF0gPSBJTlRfTlVNX0lNMF9JUkwwICsgMjIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbHRxX2V0aF9kYXRhIGx0cV9ldGhfZGF0YSA9IHsKKwkubWlpX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGVhc3k1MDcxMl9pbml0KHZvaWQpCit7CisJbHRxX3JlZ2lzdGVyX2dwaW9fc3RwKCk7CisJbHRxX3JlZ2lzdGVyX25vcigmZWFzeTUwNzEyX2ZsYXNoX2RhdGEpOworCWx0cV9yZWdpc3Rlcl9wY2koJmx0cV9wY2lfZGF0YSk7CisJbHRxX3JlZ2lzdGVyX2V0b3AoJmx0cV9ldGhfZGF0YSk7Cit9CisKK01JUFNfTUFDSElORShMVFFfTUFDSF9FQVNZNTA3MTIsCisJICAgICAiRUFTWTUwNzEyIiwKKwkgICAgICJFQVNZNTA3MTIgRXZhbCBCb2FyZCIsCisJICAgICAgZWFzeTUwNzEyX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhbnRpcS94d2F5L3BtdS5jIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L3BtdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNjlmMDFlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L3BtdS5jCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2luY2x1ZGUgPGxhbnRpcV9zb2MuaD4KKworLyogUE1VIC0gdGhlIHBvd2VyIG1hbmFnZW1lbnQgdW5pdCBhbGxvd3MgdXMgdG8gdHVybiBwYXJ0IG9mIHRoZSBjb3JlCisgKiBvbiBhbmQgb2ZmCisgKi8KKworLyogdGhlIGVuYWJsZSAvIGRpc2FibGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIExUUV9QTVVfUFdEQ1IJMHgxQworI2RlZmluZSBMVFFfUE1VX1BXRFNSCTB4MjAKKworI2RlZmluZSBsdHFfcG11X3czMih4LCB5KQlsdHFfdzMyKCh4KSwgbHRxX3BtdV9tZW1iYXNlICsgKHkpKQorI2RlZmluZSBsdHFfcG11X3IzMih4KQkJbHRxX3IzMihsdHFfcG11X21lbWJhc2UgKyAoeCkpCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbHRxX3BtdV9yZXNvdXJjZSA9IHsKKwkubmFtZQk9ICJwbXUiLAorCS5zdGFydAk9IExUUV9QTVVfQkFTRV9BRERSLAorCS5lbmQJPSBMVFFfUE1VX0JBU0VfQUREUiArIExUUV9QTVVfU0laRSAtIDEsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgdm9pZCBfX2lvbWVtICpsdHFfcG11X21lbWJhc2U7CisKK3ZvaWQgbHRxX3BtdV9lbmFibGUodW5zaWduZWQgaW50IG1vZHVsZSkKK3sKKwlpbnQgZXJyID0gMTAwMDAwMDsKKworCWx0cV9wbXVfdzMyKGx0cV9wbXVfcjMyKExUUV9QTVVfUFdEQ1IpICYgfm1vZHVsZSwgTFRRX1BNVV9QV0RDUik7CisJZG8ge30gd2hpbGUgKC0tZXJyICYmIChsdHFfcG11X3IzMihMVFFfUE1VX1BXRFNSKSAmIG1vZHVsZSkpOworCisJaWYgKCFlcnIpCisJCXBhbmljKCJhY3RpdmF0aW5nIFBNVSBtb2R1bGUgZmFpbGVkIVxuIik7Cit9CitFWFBPUlRfU1lNQk9MKGx0cV9wbXVfZW5hYmxlKTsKKwordm9pZCBsdHFfcG11X2Rpc2FibGUodW5zaWduZWQgaW50IG1vZHVsZSkKK3sKKwlsdHFfcG11X3czMihsdHFfcG11X3IzMihMVFFfUE1VX1BXRENSKSB8IG1vZHVsZSwgTFRRX1BNVV9QV0RDUik7Cit9CitFWFBPUlRfU1lNQk9MKGx0cV9wbXVfZGlzYWJsZSk7CisKK2ludCBfX2luaXQgbHRxX3BtdV9pbml0KHZvaWQpCit7CisJaWYgKGluc2VydF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZsdHFfcG11X3Jlc291cmNlKSA8IDApCisJCXBhbmljKCJGYWlsZWQgdG8gaW5zZXJ0IHBtdSBtZW1vcnlcbiIpOworCisJaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbihsdHFfcG11X3Jlc291cmNlLnN0YXJ0LAorCQkJcmVzb3VyY2Vfc2l6ZSgmbHRxX3BtdV9yZXNvdXJjZSksICJwbXUiKSA8IDApCisJCXBhbmljKCJGYWlsZWQgdG8gcmVxdWVzdCBwbXUgbWVtb3J5XG4iKTsKKworCWx0cV9wbXVfbWVtYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShsdHFfcG11X3Jlc291cmNlLnN0YXJ0LAorCQkJCXJlc291cmNlX3NpemUoJmx0cV9wbXVfcmVzb3VyY2UpKTsKKwlpZiAoIWx0cV9wbXVfbWVtYmFzZSkKKwkJcGFuaWMoIkZhaWxlZCB0byByZW1hcCBwbXUgbWVtb3J5XG4iKTsKKwlyZXR1cm4gMDsKK30KKworY29yZV9pbml0Y2FsbChsdHFfcG11X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhbnRpcS94d2F5L3Byb20tYXNlLmMgYi9hcmNoL21pcHMvbGFudGlxL3h3YXkvcHJvbS1hc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmU0OWY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L3Byb20tYXNlLmMKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKworI2luY2x1ZGUgPGxhbnRpcV9zb2MuaD4KKworI2luY2x1ZGUgIi4uL3Byb20uaCIKKworI2RlZmluZSBTT0NfQU1BWk9OX1NFCSJBbWF6b25fU0UiCisKKyNkZWZpbmUgUEFSVF9TSElGVAkxMgorI2RlZmluZSBQQVJUX01BU0sJMHgwRkZGRkZGRgorI2RlZmluZSBSRVZfU0hJRlQJMjgKKyNkZWZpbmUgUkVWX01BU0sJMHhGMDAwMDAwMAorCit2b2lkIF9faW5pdCBsdHFfc29jX2RldGVjdChzdHJ1Y3QgbHRxX3NvY19pbmZvICppKQoreworCWktPnBhcnRudW0gPSAobHRxX3IzMihMVFFfTVBTX0NISVBJRCkgJiBQQVJUX01BU0spID4+IFBBUlRfU0hJRlQ7CisJaS0+cmV2ID0gKGx0cV9yMzIoTFRRX01QU19DSElQSUQpICYgUkVWX01BU0spID4+IFJFVl9TSElGVDsKKwlzd2l0Y2ggKGktPnBhcnRudW0pIHsKKwljYXNlIFNPQ19JRF9BTUFaT05fU0U6CisJCWktPm5hbWUgPSBTT0NfQU1BWk9OX1NFOworCQlpLT50eXBlID0gU09DX1RZUEVfQU1BWk9OX1NFOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXVucmVhY2hhYmxlKCk7CisJCWJyZWFrOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYW50aXEveHdheS9wcm9tLXh3YXkuYyBiL2FyY2gvbWlwcy9sYW50aXEveHdheS9wcm9tLXh3YXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjg2NjkyYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sYW50aXEveHdheS9wcm9tLXh3YXkuYwpAQCAtMCwwICsxLDU0IEBACisvKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorCisjaW5jbHVkZSA8bGFudGlxX3NvYy5oPgorCisjaW5jbHVkZSAiLi4vcHJvbS5oIgorCisjZGVmaW5lIFNPQ19EQU5VQkUJIkRhbnViZSIKKyNkZWZpbmUgU09DX1RXSU5QQVNTCSJUd2lucGFzcyIKKyNkZWZpbmUgU09DX0FSOQkJIkFSOSIKKworI2RlZmluZSBQQVJUX1NISUZUCTEyCisjZGVmaW5lIFBBUlRfTUFTSwkweDBGRkZGRkZGCisjZGVmaW5lIFJFVl9TSElGVAkyOAorI2RlZmluZSBSRVZfTUFTSwkweEYwMDAwMDAwCisKK3ZvaWQgX19pbml0IGx0cV9zb2NfZGV0ZWN0KHN0cnVjdCBsdHFfc29jX2luZm8gKmkpCit7CisJaS0+cGFydG51bSA9IChsdHFfcjMyKExUUV9NUFNfQ0hJUElEKSAmIFBBUlRfTUFTSykgPj4gUEFSVF9TSElGVDsKKwlpLT5yZXYgPSAobHRxX3IzMihMVFFfTVBTX0NISVBJRCkgJiBSRVZfTUFTSykgPj4gUkVWX1NISUZUOworCXN3aXRjaCAoaS0+cGFydG51bSkgeworCWNhc2UgU09DX0lEX0RBTlVCRTE6CisJY2FzZSBTT0NfSURfREFOVUJFMjoKKwkJaS0+bmFtZSA9IFNPQ19EQU5VQkU7CisJCWktPnR5cGUgPSBTT0NfVFlQRV9EQU5VQkU7CisJCWJyZWFrOworCisJY2FzZSBTT0NfSURfVFdJTlBBU1M6CisJCWktPm5hbWUgPSBTT0NfVFdJTlBBU1M7CisJCWktPnR5cGUgPSBTT0NfVFlQRV9EQU5VQkU7CisJCWJyZWFrOworCisJY2FzZSBTT0NfSURfQVJYMTg4OgorCWNhc2UgU09DX0lEX0FSWDE2ODoKKwljYXNlIFNPQ19JRF9BUlgxODI6CisJCWktPm5hbWUgPSBTT0NfQVI5OworCQlpLT50eXBlID0gU09DX1RZUEVfQVI5OworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXVucmVhY2hhYmxlKCk7CisJCWJyZWFrOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYW50aXEveHdheS9yZXNldC5jIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L3Jlc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiZTM2ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sYW50aXEveHdheS9yZXNldC5jCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgorCisjaW5jbHVkZSA8bGFudGlxX3NvYy5oPgorCisjZGVmaW5lIGx0cV9yY3VfdzMyKHgsIHkpCWx0cV93MzIoKHgpLCBsdHFfcmN1X21lbWJhc2UgKyAoeSkpCisjZGVmaW5lIGx0cV9yY3VfcjMyKHgpCQlsdHFfcjMyKGx0cV9yY3VfbWVtYmFzZSArICh4KSkKKworLyogcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTFRRX1JDVV9SU1QJCTB4MDAxMAorI2RlZmluZSBMVFFfUkNVX1JTVF9BTEwJCTB4NDAwMDAwMDAKKworI2RlZmluZSBMVFFfUkNVX1JTVF9TVEFUCTB4MDAxNAorI2RlZmluZSBMVFFfUkNVX1NUQVRfU0hJRlQJMjYKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsdHFfcmN1X3Jlc291cmNlID0geworCS5uYW1lICAgPSAicmN1IiwKKwkuc3RhcnQgID0gTFRRX1JDVV9CQVNFX0FERFIsCisJLmVuZCAgICA9IExUUV9SQ1VfQkFTRV9BRERSICsgTFRRX1JDVV9TSVpFIC0gMSwKKwkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCit9OworCisvKiByZW1hcHBlZCBiYXNlIGFkZHIgb2YgdGhlIHJlc2V0IGNvbnRyb2wgdW5pdCAqLworc3RhdGljIHZvaWQgX19pb21lbSAqbHRxX3JjdV9tZW1iYXNlOworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgdGhlIHdhdGNoZG9nIGRyaXZlciAqLworaW50IGx0cV9yZXNldF9jYXVzZSh2b2lkKQoreworCXUzMiB2YWwgPSBsdHFfcmN1X3IzMihMVFFfUkNVX1JTVF9TVEFUKTsKKwlyZXR1cm4gdmFsID4+IExUUV9SQ1VfU1RBVF9TSElGVDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGx0cV9yZXNldF9jYXVzZSk7CisKK3N0YXRpYyB2b2lkIGx0cV9tYWNoaW5lX3Jlc3RhcnQoY2hhciAqY29tbWFuZCkKK3sKKwlwcl9ub3RpY2UoIlN5c3RlbSByZXN0YXJ0XG4iKTsKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWx0cV9yY3VfdzMyKGx0cV9yY3VfcjMyKExUUV9SQ1VfUlNUKSB8IExUUV9SQ1VfUlNUX0FMTCwgTFRRX1JDVV9SU1QpOworCXVucmVhY2hhYmxlKCk7Cit9CisKK3N0YXRpYyB2b2lkIGx0cV9tYWNoaW5lX2hhbHQodm9pZCkKK3sKKwlwcl9ub3RpY2UoIlN5c3RlbSBoYWx0ZWQuXG4iKTsKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCXVucmVhY2hhYmxlKCk7Cit9CisKK3N0YXRpYyB2b2lkIGx0cV9tYWNoaW5lX3Bvd2VyX29mZih2b2lkKQoreworCXByX25vdGljZSgiUGxlYXNlIHR1cm4gb2ZmIHRoZSBwb3dlciBub3cuXG4iKTsKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCXVucmVhY2hhYmxlKCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG1pcHNfcmVib290X3NldHVwKHZvaWQpCit7CisJLyogaW5zZXJ0IGFuZCByZXF1ZXN0IHRoZSBtZW1vcnkgcmVnaW9uICovCisJaWYgKGluc2VydF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZsdHFfcmN1X3Jlc291cmNlKSA8IDApCisJCXBhbmljKCJGYWlsZWQgdG8gaW5zZXJ0IHJjdSBtZW1vcnlcbiIpOworCisJaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbihsdHFfcmN1X3Jlc291cmNlLnN0YXJ0LAorCQkJcmVzb3VyY2Vfc2l6ZSgmbHRxX3JjdV9yZXNvdXJjZSksICJyY3UiKSA8IDApCisJCXBhbmljKCJGYWlsZWQgdG8gcmVxdWVzdCByY3UgbWVtb3J5XG4iKTsKKworCS8qIHJlbWFwIHJjdSByZWdpc3RlciByYW5nZSAqLworCWx0cV9yY3VfbWVtYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShsdHFfcmN1X3Jlc291cmNlLnN0YXJ0LAorCQkJCXJlc291cmNlX3NpemUoJmx0cV9yY3VfcmVzb3VyY2UpKTsKKwlpZiAoIWx0cV9yY3VfbWVtYmFzZSkKKwkJcGFuaWMoIkZhaWxlZCB0byByZW1hcCByY3UgbWVtb3J5XG4iKTsKKworCV9tYWNoaW5lX3Jlc3RhcnQgPSBsdHFfbWFjaGluZV9yZXN0YXJ0OworCV9tYWNoaW5lX2hhbHQgPSBsdHFfbWFjaGluZV9oYWx0OworCXBtX3Bvd2VyX29mZiA9IGx0cV9tYWNoaW5lX3Bvd2VyX29mZjsKKworCXJldHVybiAwOworfQorCithcmNoX2luaXRjYWxsKG1pcHNfcmVib290X3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYW50aXEveHdheS9zZXR1cC1hc2UuYyBiL2FyY2gvbWlwcy9sYW50aXEveHdheS9zZXR1cC1hc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmYzMjY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L3NldHVwLWFzZS5jCkBAIC0wLDAgKzEsMTkgQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTEgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2luY2x1ZGUgPGxhbnRpcV9zb2MuaD4KKworI2luY2x1ZGUgIi4uL3Byb20uaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3ZvaWQgX19pbml0IGx0cV9zb2Nfc2V0dXAodm9pZCkKK3sKKwlsdHFfcmVnaXN0ZXJfYXNlX2FzYygpOworCWx0cV9yZWdpc3Rlcl9ncGlvKCk7CisJbHRxX3JlZ2lzdGVyX3dkdCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhbnRpcS94d2F5L3NldHVwLXh3YXkuYyBiL2FyY2gvbWlwcy9sYW50aXEveHdheS9zZXR1cC14d2F5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI5MmY2NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sYW50aXEveHdheS9zZXR1cC14d2F5LmMKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMSBKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4KKyAqLworCisjaW5jbHVkZSA8bGFudGlxX3NvYy5oPgorCisjaW5jbHVkZSAiLi4vcHJvbS5oIgorI2luY2x1ZGUgImRldmljZXMuaCIKKwordm9pZCBfX2luaXQgbHRxX3NvY19zZXR1cCh2b2lkKQoreworCWx0cV9yZWdpc3Rlcl9hc2MoMCk7CisJbHRxX3JlZ2lzdGVyX2FzYygxKTsKKwlsdHFfcmVnaXN0ZXJfZ3BpbygpOworCWx0cV9yZWdpc3Rlcl93ZHQoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9saWIvTWFrZWZpbGUgYi9hcmNoL21pcHMvbGliL01ha2VmaWxlCmluZGV4IDJhZGVhZDUuLmIyY2FkNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2xpYi9NYWtlZmlsZQpAQCAtMjgsNiArMjgsNyBAQAogb2JqLSQoQ09ORklHX0NQVV9UWDQ5WFgpCSs9IGR1bXBfdGxiLm8KIG9iai0kKENPTkZJR19DUFVfVlI0MVhYKQkrPSBkdW1wX3RsYi5vCiBvYmotJChDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04pCSs9IGR1bXBfdGxiLm8KK29iai0kKENPTkZJR19DUFVfWExSKQkJKz0gZHVtcF90bGIubwogCiAjIGxpYmdjYy1zdHlsZSBzdHVmZiBuZWVkZWQgaW4gdGhlIGtlcm5lbAogb2JqLXkgKz0gYXNobGRpMy5vIGFzaHJkaTMubyBjbXBkaTIubyBsc2hyZGkzLm8gdWNtcGRpMi5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2NzNTUzNi9jczU1MzZfbWZncHQuYyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9tZmdwdC5jCmluZGV4IDhjODA3YzkuLjBjYjFiOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9tZmdwdC5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9tZmdwdC5jCkBAIC0yMDEsOCArMjAxLDYgQEAKIAkucmF0aW5nID0gMTIwLCAvKiBGdW5jdGlvbmFsIGZvciByZWFsIHVzZSwgYnV0IG5vdCBkZXNpcmVkICovCiAJLnJlYWQgPSBtZmdwdF9yZWFkLAogCS5tYXNrID0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCi0JLm11bHQgPSAwLAotCS5zaGlmdCA9IDIyLAogfTsKIAogaW50IF9faW5pdCBpbml0X21mZ3B0X2Nsb2Nrc291cmNlKHZvaWQpCkBAIC0yMTAsOCArMjA4LDcgQEAKIAlpZiAobnVtX3Bvc3NpYmxlX2NwdXMoKSA+IDEpCS8qIE1GR1BUIGRvZXMgbm90IHNjYWxlISAqLwogCQlyZXR1cm4gMDsKIAotCWNsb2Nrc291cmNlX21mZ3B0Lm11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KE1GR1BUX1RJQ0tfUkFURSwgMjIpOwotCXJldHVybiBjbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfbWZncHQpOworCXJldHVybiBjbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2xvY2tzb3VyY2VfbWZncHQsIE1GR1BUX1RJQ0tfUkFURSk7CiB9CiAKIGFyY2hfaW5pdGNhbGwoaW5pdF9tZmdwdF9jbG9ja3NvdXJjZSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2Vudi5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9lbnYuYwppbmRleCAxMWIxOTNmLi5kOTM4MzBhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2Vudi5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vZW52LmMKQEAgLTI5LDkgKzI5LDEwIEBACiAKICNkZWZpbmUgcGFyc2VfZXZlbl9lYXJsaWVyKHJlcywgb3B0aW9uLCBwKQkJCQlcCiBkbyB7CQkJCQkJCQkJXAotCWludCByZXQ7CQkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgdG1wIF9fbWF5YmVfdW51c2VkOwkJCQlcCisJCQkJCQkJCQlcCiAJaWYgKHN0cm5jbXAob3B0aW9uLCAoY2hhciAqKXAsIHN0cmxlbihvcHRpb24pKSA9PSAwKQkJXAotCQlyZXQgPSBzdHJpY3Rfc3RydG9sKChjaGFyICopcCArIHN0cmxlbihvcHRpb24iPSIpLCAxMCwgJnJlcyk7IFwKKwkJdG1wID0gc3RyaWN0X3N0cnRvbCgoY2hhciAqKXAgKyBzdHJsZW4ob3B0aW9uIj0iKSwgMTAsICZyZXMpOyBcCiB9IHdoaWxlICgwKQogCiB2b2lkIF9faW5pdCBwcm9tX2luaXRfZW52KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vTWFrZWZpbGUgYi9hcmNoL21pcHMvbW0vTWFrZWZpbGUKaW5kZXggZDY3OWM3Ny4uNGQ4YzE2MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9tbS9NYWtlZmlsZQpAQCAtMyw3ICszLDggQEAKICMKIAogb2JqLXkJCQkJKz0gY2FjaGUubyBkbWEtZGVmYXVsdC5vIGV4dGFibGUubyBmYXVsdC5vIFwKLQkJCQkgICBpbml0Lm8gdGxiZXgubyB0bGJleC1mYXVsdC5vIHVhc20ubyBwYWdlLm8KKwkJCQkgICBpbml0Lm8gbW1hcC5vIHRsYmV4Lm8gdGxiZXgtZmF1bHQubyB1YXNtLm8gXAorCQkJCSAgIHBhZ2UubwogCiBvYmotJChDT05GSUdfMzJCSVQpCQkrPSBpb3JlbWFwLm8gcGd0YWJsZS0zMi5vCiBvYmotJChDT05GSUdfNjRCSVQpCQkrPSBwZ3RhYmxlLTY0Lm8KQEAgLTI5LDYgKzMwLDcgQEAKIG9iai0kKENPTkZJR19DUFVfVFg0OVhYKQkrPSBjLXI0ay5vIGNleC1nZW4ubyB0bGItcjRrLm8KIG9iai0kKENPTkZJR19DUFVfVlI0MVhYKQkrPSBjLXI0ay5vIGNleC1nZW4ubyB0bGItcjRrLm8KIG9iai0kKENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTikJKz0gYy1vY3Rlb24ubyBjZXgtb2N0Lm8gdGxiLXI0ay5vCitvYmotJChDT05GSUdfQ1BVX1hMUikJCSs9IGMtcjRrLm8gdGxiLXI0ay5vIGNleC1nZW4ubwogCiBvYmotJChDT05GSUdfSVAyMl9DUFVfU0NBQ0hFKQkrPSBzYy1pcDIyLm8KIG9iai0kKENPTkZJR19SNTAwMF9DUFVfU0NBQ0hFKSAgKz0gc2MtcjVrLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9jLXI0ay5jIGIvYXJjaC9taXBzL21tL2MtcjRrLmMKaW5kZXggYjQ5MjNhNy4uZDliYzVkMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2MtcjRrLmMKKysrIGIvYXJjaC9taXBzL21tL2MtcjRrLmMKQEAgLTEwMDYsNiArMTAwNiw3IEBACiAJY2FzZSBDUFVfMjVLRjoKIAljYXNlIENQVV9TQjE6CiAJY2FzZSBDUFVfU0IxQToKKwljYXNlIENQVV9YTFI6CiAJCWMtPmRjYWNoZS5mbGFncyB8PSBNSVBTX0NBQ0hFX1BJTkRFWDsKIAkJYnJlYWs7CiAKQEAgLTEwNzUsNyArMTA3Niw2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFncywgYWRkciwgYmVnaW4sIGVuZCwgcG93MjsKIAl1bnNpZ25lZCBpbnQgY29uZmlnID0gcmVhZF9jMF9jb25maWcoKTsKIAlzdHJ1Y3QgY3B1aW5mb19taXBzICpjID0gJmN1cnJlbnRfY3B1X2RhdGE7Ci0JaW50IHRtcDsKIAogCWlmIChjb25maWcgJiBDT05GX1NDKQogCQlyZXR1cm4gMDsKQEAgLTExMDgsNyArMTEwOCw2IEBACiAKIAkvKiBOb3cgc2VhcmNoIGZvciB0aGUgd3JhcCBhcm91bmQgcG9pbnQuICovCiAJcG93MiA9ICgxMjggKiAxMDI0KTsKLQl0bXAgPSAwOwogCWZvciAoYWRkciA9IGJlZ2luICsgKDEyOCAqIDEwMjQpOyBhZGRyIDwgZW5kOyBhZGRyID0gYmVnaW4gKyBwb3cyKSB7CiAJCWNhY2hlX29wKEluZGV4X0xvYWRfVGFnX1NELCBhZGRyKTsKIAkJX19hc21fXyBfX3ZvbGF0aWxlX18oIm5vcDsgbm9wOyBub3A7IG5vcDsiKTsgLyogaGF6YXJkLi4uICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vbW1hcC5jIGIvYXJjaC9taXBzL21tL21tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTNjMjBhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL21tL21tYXAuYwpAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBXaW5kIFJpdmVyIFN5c3RlbXMsCisgKiAgIHdyaXR0ZW4gYnkgUmFsZiBCYWVjaGxlIDxyYWxmQGxpbnV4LW1pcHMub3JnPgorICovCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCit1bnNpZ25lZCBsb25nIHNobV9hbGlnbl9tYXNrID0gUEFHRV9TSVpFIC0gMTsJLyogU2FuZSBjYWNoZXMgKi8KKworRVhQT1JUX1NZTUJPTChzaG1fYWxpZ25fbWFzayk7CisKKyNkZWZpbmUgQ09MT1VSX0FMSUdOKGFkZHIscGdvZmYpCQkJCVwKKwkoKCgoYWRkcikgKyBzaG1fYWxpZ25fbWFzaykgJiB+c2htX2FsaWduX21hc2spICsJXAorCSAoKChwZ29mZikgPDwgUEFHRV9TSElGVCkgJiBzaG1fYWxpZ25fbWFzaykpCisKK3Vuc2lnbmVkIGxvbmcgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLAorCXVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtbTsKKwlpbnQgZG9fY29sb3JfYWxpZ247CisKKwlpZiAobGVuID4gVEFTS19TSVpFKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChmbGFncyAmIE1BUF9GSVhFRCkgeworCQkvKiBFdmVuIE1BUF9GSVhFRCBtYXBwaW5ncyBtdXN0IHJlc2lkZSB3aXRoaW4gVEFTS19TSVpFLiAgKi8KKwkJaWYgKFRBU0tfU0laRSAtIGxlbiA8IGFkZHIpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkvKgorCQkgKiBXZSBkbyBub3QgYWNjZXB0IGEgc2hhcmVkIG1hcHBpbmcgaWYgaXQgd291bGQgdmlvbGF0ZQorCQkgKiBjYWNoZSBhbGlhc2luZyBjb25zdHJhaW50cy4KKwkJICovCisJCWlmICgoZmxhZ3MgJiBNQVBfU0hBUkVEKSAmJgorCQkgICAgKChhZGRyIC0gKHBnb2ZmIDw8IFBBR0VfU0hJRlQpKSAmIHNobV9hbGlnbl9tYXNrKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gYWRkcjsKKwl9CisKKwlkb19jb2xvcl9hbGlnbiA9IDA7CisJaWYgKGZpbHAgfHwgKGZsYWdzICYgTUFQX1NIQVJFRCkpCisJCWRvX2NvbG9yX2FsaWduID0gMTsKKwlpZiAoYWRkcikgeworCQlpZiAoZG9fY29sb3JfYWxpZ24pCisJCQlhZGRyID0gQ09MT1VSX0FMSUdOKGFkZHIsIHBnb2ZmKTsKKwkJZWxzZQorCQkJYWRkciA9IFBBR0VfQUxJR04oYWRkcik7CisJCXZtbSA9IGZpbmRfdm1hKGN1cnJlbnQtPm1tLCBhZGRyKTsKKwkJaWYgKFRBU0tfU0laRSAtIGxlbiA+PSBhZGRyICYmCisJCSAgICAoIXZtbSB8fCBhZGRyICsgbGVuIDw9IHZtbS0+dm1fc3RhcnQpKQorCQkJcmV0dXJuIGFkZHI7CisJfQorCWFkZHIgPSBjdXJyZW50LT5tbS0+bW1hcF9iYXNlOworCWlmIChkb19jb2xvcl9hbGlnbikKKwkJYWRkciA9IENPTE9VUl9BTElHTihhZGRyLCBwZ29mZik7CisJZWxzZQorCQlhZGRyID0gUEFHRV9BTElHTihhZGRyKTsKKworCWZvciAodm1tID0gZmluZF92bWEoY3VycmVudC0+bW0sIGFkZHIpOyA7IHZtbSA9IHZtbS0+dm1fbmV4dCkgeworCQkvKiBBdCB0aGlzIHBvaW50OiAgKCF2bW0gfHwgYWRkciA8IHZtbS0+dm1fZW5kKS4gKi8KKwkJaWYgKFRBU0tfU0laRSAtIGxlbiA8IGFkZHIpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJaWYgKCF2bW0gfHwgYWRkciArIGxlbiA8PSB2bW0tPnZtX3N0YXJ0KQorCQkJcmV0dXJuIGFkZHI7CisJCWFkZHIgPSB2bW0tPnZtX2VuZDsKKwkJaWYgKGRvX2NvbG9yX2FsaWduKQorCQkJYWRkciA9IENPTE9VUl9BTElHTihhZGRyLCBwZ29mZik7CisJfQorfQorCit2b2lkIGFyY2hfcGlja19tbWFwX2xheW91dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwl1bnNpZ25lZCBsb25nIHJhbmRvbV9mYWN0b3IgPSAwVUw7CisKKwlpZiAoY3VycmVudC0+ZmxhZ3MgJiBQRl9SQU5ET01JWkUpIHsKKwkJcmFuZG9tX2ZhY3RvciA9IGdldF9yYW5kb21faW50KCk7CisJCXJhbmRvbV9mYWN0b3IgPSByYW5kb21fZmFjdG9yIDw8IFBBR0VfU0hJRlQ7CisJCWlmIChUQVNLX0lTXzMyQklUX0FERFIpCisJCQlyYW5kb21fZmFjdG9yICY9IDB4ZmZmZmZmdWw7CisJCWVsc2UKKwkJCXJhbmRvbV9mYWN0b3IgJj0gMHhmZmZmZmZmdWw7CisJfQorCisJbW0tPm1tYXBfYmFzZSA9IFRBU0tfVU5NQVBQRURfQkFTRSArIHJhbmRvbV9mYWN0b3I7CisJbW0tPmdldF91bm1hcHBlZF9hcmVhID0gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYTsKKwltbS0+dW5tYXBfYXJlYSA9IGFyY2hfdW5tYXBfYXJlYTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGJya19ybmQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJuZCA9IGdldF9yYW5kb21faW50KCk7CisKKwlybmQgPSBybmQgPDwgUEFHRV9TSElGVDsKKwkvKiA4TUIgZm9yIDMyYml0LCAyNTZNQiBmb3IgNjRiaXQgKi8KKwlpZiAoVEFTS19JU18zMkJJVF9BRERSKQorCQlybmQgPSBybmQgJiAweDdmZmZmZnVsOworCWVsc2UKKwkJcm5kID0gcm5kICYgMHhmZmZmZmZmdWw7CisKKwlyZXR1cm4gcm5kOworfQorCit1bnNpZ25lZCBsb25nIGFyY2hfcmFuZG9taXplX2JyayhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwl1bnNpZ25lZCBsb25nIGJhc2UgPSBtbS0+YnJrOworCXVuc2lnbmVkIGxvbmcgcmV0OworCisJcmV0ID0gUEFHRV9BTElHTihiYXNlICsgYnJrX3JuZCgpKTsKKworCWlmIChyZXQgPCBtbS0+YnJrKQorCQlyZXR1cm4gbW0tPmJyazsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vdGxiZXguYyBiL2FyY2gvbWlwcy9tbS90bGJleC5jCmluZGV4IDVlZjI5NGYuLjQyNGVkNGIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS90bGJleC5jCisrKyBiL2FyY2gvbWlwcy9tbS90bGJleC5jCkBAIC00MDQsNiArNDA0LDcgQEAKIAljYXNlIENQVV81S0M6CiAJY2FzZSBDUFVfVFg0OVhYOgogCWNhc2UgQ1BVX1BSNDQ1MDoKKwljYXNlIENQVV9YTFI6CiAJCXVhc21faV9ub3AocCk7CiAJCXRsYncocCk7CiAJCWJyZWFrOwpAQCAtMTE1MSw4ICsxMTUyLDggQEAKIAlzdHJ1Y3QgdWFzbV9yZWxvYyAqciA9IHJlbG9jczsKIAl1MzIgKmY7CiAJdW5zaWduZWQgaW50IGZpbmFsX2xlbjsKLQlzdHJ1Y3QgbWlwc19odWdlX3RsYl9pbmZvIGh0bGJfaW5mbzsKLQllbnVtIHZtYWxsb2M2NF9tb2RlIHZtYWxsb2NfbW9kZTsKKwlzdHJ1Y3QgbWlwc19odWdlX3RsYl9pbmZvIGh0bGJfaW5mbyBfX21heWJlX3VudXNlZDsKKwllbnVtIHZtYWxsb2M2NF9tb2RlIHZtYWxsb2NfbW9kZSBfX21heWJlX3VudXNlZDsKIAogCW1lbXNldCh0bGJfaGFuZGxlciwgMCwgc2l6ZW9mKHRsYl9oYW5kbGVyKSk7CiAJbWVtc2V0KGxhYmVscywgMCwgc2l6ZW9mKGxhYmVscykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbml0LmMgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWluaXQuYwppbmRleCA0MTRmMGM5Li4zMTE4MGMzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWluaXQuYworKysgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWluaXQuYwpAQCAtMTkzLDggKzE5Myw2IEBACiAKIHZvaWQgX19pbml0IHByb21faW5pdCh2b2lkKQogewotCWludCByZXN1bHQ7Ci0KIAlwcm9tX2FyZ2MgPSBmd19hcmcwOwogCV9wcm9tX2FyZ3YgPSAoaW50ICopIGZ3X2FyZzE7CiAJX3Byb21fZW52cCA9IChpbnQgKikgZndfYXJnMjsKQEAgLTM2MCwyMCArMzU4LDE0IEBACiAjaWZkZWYgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEUKIAljb25zb2xlX2NvbmZpZygpOwogI2VuZGlmCi0JLyogRWFybHkgZGV0ZWN0aW9uIG9mIENNUCBzdXBwb3J0ICovCi0JcmVzdWx0ID0gZ2NtcF9wcm9iZShHQ01QX0JBU0VfQUREUiwgR0NNUF9BRERSU1BBQ0VfU1opOwotCiAjaWZkZWYgQ09ORklHX01JUFNfQ01QCi0JaWYgKHJlc3VsdCkKKwkvKiBFYXJseSBkZXRlY3Rpb24gb2YgQ01QIHN1cHBvcnQgKi8KKwlpZiAoZ2NtcF9wcm9iZShHQ01QX0JBU0VfQUREUiwgR0NNUF9BRERSU1BBQ0VfU1opKQogCQlyZWdpc3Rlcl9zbXBfb3BzKCZjbXBfc21wX29wcyk7CisJZWxzZQogI2VuZGlmCiAjaWZkZWYgQ09ORklHX01JUFNfTVRfU01QCi0jaWZkZWYgQ09ORklHX01JUFNfQ01QCi0JaWYgKCFyZXN1bHQpCiAJCXJlZ2lzdGVyX3NtcF9vcHMoJnZzbXBfc21wX29wcyk7Ci0jZWxzZQotCXJlZ2lzdGVyX3NtcF9vcHMoJnZzbXBfc21wX29wcyk7Ci0jZW5kaWYKICNlbmRpZgogI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKIAlyZWdpc3Rlcl9zbXBfb3BzKCZtc210Y19zbXBfb3BzKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW50LmMgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWludC5jCmluZGV4IDdkOTNlNmYuLjFkMzZjNTExIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWludC5jCisrKyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW50LmMKQEAgLTU2LDcgKzU2LDYgQEAKIHN0YXRpYyBpbmxpbmUgaW50IG1pcHNfcGNpYmlvc19pYWNrKHZvaWQpCiB7CiAJaW50IGlycTsKLQl1MzIgZHVtbXk7CiAKIAkvKgogCSAqIERldGVybWluZSBoaWdoZXN0IHByaW9yaXR5IHBlbmRpbmcgaW50ZXJydXB0IGJ5IHBlcmZvcm1pbmcKQEAgLTgzLDcgKzgyLDcgQEAKIAkJQk9OSVRPX1BDSU1BUF9DRkcgPSAweDIwMDAwOwogCiAJCS8qIEZsdXNoIEJvbml0byByZWdpc3RlciBibG9jayAqLwotCQlkdW1teSA9IEJPTklUT19QQ0lNQVBfQ0ZHOworCQkodm9pZCkgQk9OSVRPX1BDSU1BUF9DRkc7CiAJCWlvYigpOyAgICAvKiBzeW5jICovCiAKIAkJaXJxID0gX19yYXdfcmVhZGwoKHUzMiAqKV9wY2ljdHJsX2Jvbml0b19wY2ljZmcpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL25ldGxvZ2ljL0tjb25maWcgYi9hcmNoL21pcHMvbmV0bG9naWMvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWNhNzQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL25ldGxvZ2ljL0tjb25maWcKQEAgLTAsMCArMSw1IEBACitjb25maWcgTkxNX0NPTU1PTgorCWJvb2wKKworY29uZmlnIE5MTV9YTFIKKwlib29sCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbmV0bG9naWMveGxyL01ha2VmaWxlIGIvYXJjaC9taXBzL25ldGxvZ2ljL3hsci9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmQzZjczCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL25ldGxvZ2ljL3hsci9NYWtlZmlsZQpAQCAtMCwwICsxLDUgQEAKK29iai15CQkJCSs9IHNldHVwLm8gcGxhdGZvcm0ubyBpcnEubyBzZXR1cC5vIHRpbWUubworb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcC5vIHNtcGJvb3Qubworb2JqLSQoQ09ORklHX0VBUkxZX1BSSU5USykJKz0geGxyX2NvbnNvbGUubworCitFWFRSQV9DRkxBR1MJCQkrPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbmV0bG9naWMveGxyL2lycS5jIGIvYXJjaC9taXBzL25ldGxvZ2ljL3hsci9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDQ2ZDU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL25ldGxvZ2ljL3hsci9pcnEuYwpAQCAtMCwwICsxLDMwMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAzLTIwMTEgTmV0TG9naWMgTWljcm9zeXN0ZW1zLCBJbmMuIChOZXRMb2dpYykuIEFsbCByaWdodHMKKyAqIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZSBOZXRMb2dpYworICogbGljZW5zZSBiZWxvdzoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTkVUTE9HSUMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIE5FVExPR0lDIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTgorICogSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CisKKyNpbmNsdWRlIDxhc20vbmV0bG9naWMveGxyL2lvbWFwLmg+CisjaW5jbHVkZSA8YXNtL25ldGxvZ2ljL3hsci9waWMuaD4KKyNpbmNsdWRlIDxhc20vbmV0bG9naWMveGxyL3hsci5oPgorCisjaW5jbHVkZSA8YXNtL25ldGxvZ2ljL2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGFzbS9uZXRsb2dpYy9taXBzLWV4dG5zLmg+CisKK3N0YXRpYyB1NjQgbmxtX2lycV9tYXNrOworc3RhdGljIERFRklORV9TUElOTE9DSyhubG1fcGljX2xvY2spOworCitzdGF0aWMgdm9pZCB4bHJfcGljX2VuYWJsZShzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJbmxtX3JlZ190ICptbWlvID0gbmV0bG9naWNfaW9fbW1pbyhORVRMT0dJQ19JT19QSUNfT0ZGU0VUKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCW5sbV9yZWdfdCByZWc7CisJaW50IGlycSA9IGQtPmlycTsKKworCVdBUk4oIVBJQ19JUlFfSVNfSVJUKGlycSksICJCYWQgaXJxICVkIiwgaXJxKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZubG1fcGljX2xvY2ssIGZsYWdzKTsKKwlyZWcgPSBuZXRsb2dpY19yZWFkX3JlZyhtbWlvLCBQSUNfSVJUXzFfQkFTRSArIGlycSAtIFBJQ19JUlFfQkFTRSk7CisJbmV0bG9naWNfd3JpdGVfcmVnKG1taW8sIFBJQ19JUlRfMV9CQVNFICsgaXJxIC0gUElDX0lSUV9CQVNFLAorCQkJICByZWcgfCAoMSA8PCA2KSB8ICgxIDw8IDMwKSB8ICgxIDw8IDMxKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmxtX3BpY19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHhscl9waWNfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJbmxtX3JlZ190ICptbWlvID0gbmV0bG9naWNfaW9fbW1pbyhORVRMT0dJQ19JT19QSUNfT0ZGU0VUKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCW5sbV9yZWdfdCByZWc7CisJaW50IGlycSA9IGQtPmlycTsKKworCVdBUk4oIVBJQ19JUlFfSVNfSVJUKGlycSksICJCYWQgaXJxICVkIiwgaXJxKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZubG1fcGljX2xvY2ssIGZsYWdzKTsKKwlyZWcgPSBuZXRsb2dpY19yZWFkX3JlZyhtbWlvLCBQSUNfSVJUXzFfQkFTRSArIGlycSAtIFBJQ19JUlFfQkFTRSk7CisJbmV0bG9naWNfd3JpdGVfcmVnKG1taW8sIFBJQ19JUlRfMV9CQVNFICsgaXJxIC0gUElDX0lSUV9CQVNFLAorCQkJICByZWcgfCAoMSA8PCA2KSB8ICgxIDw8IDMwKSB8ICgwIDw8IDMxKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmxtX3BpY19sb2NrLCBmbGFncyk7Cit9CisKKyNpZmRlZiBDT05GSUdfUENJCisvKiBFeHRyYSBBQ0sgbmVlZGVkIGZvciBYTFIgb24gY2hpcCBQQ0kgY29udHJvbGxlciAqLworc3RhdGljIHZvaWQgeGxyX3BjaV9hY2soc3RydWN0IGlycV9kYXRhICpkKQoreworCW5sbV9yZWdfdCAqcGNpX21taW8gPSBuZXRsb2dpY19pb19tbWlvKE5FVExPR0lDX0lPX1BDSVhfT0ZGU0VUKTsKKworCW5ldGxvZ2ljX3JlYWRfcmVnKHBjaV9tbWlvLCAoMHgxNDAgPj4gMikpOworfQorCisvKiBFeHRyYSBBQ0sgbmVlZGVkIGZvciBYTFMgb24gY2hpcCBQQ0llIGNvbnRyb2xsZXIgKi8KK3N0YXRpYyB2b2lkIHhsc19wY2llX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJbmxtX3JlZ190ICpwY2llX21taW9fbGUgPSBuZXRsb2dpY19pb19tbWlvKE5FVExPR0lDX0lPX1BDSUVfMV9PRkZTRVQpOworCisJc3dpdGNoIChkLT5pcnEpIHsKKwljYXNlIFBJQ19QQ0lFX0xJTkswX0lSUToKKwkJbmV0bG9naWNfd3JpdGVfcmVnKHBjaWVfbW1pb19sZSwgKDB4OTAgPj4gMiksIDB4ZmZmZmZmZmYpOworCQlicmVhazsKKwljYXNlIFBJQ19QQ0lFX0xJTksxX0lSUToKKwkJbmV0bG9naWNfd3JpdGVfcmVnKHBjaWVfbW1pb19sZSwgKDB4OTQgPj4gMiksIDB4ZmZmZmZmZmYpOworCQlicmVhazsKKwljYXNlIFBJQ19QQ0lFX0xJTksyX0lSUToKKwkJbmV0bG9naWNfd3JpdGVfcmVnKHBjaWVfbW1pb19sZSwgKDB4MTkwID4+IDIpLCAweGZmZmZmZmZmKTsKKwkJYnJlYWs7CisJY2FzZSBQSUNfUENJRV9MSU5LM19JUlE6CisJCW5ldGxvZ2ljX3dyaXRlX3JlZyhwY2llX21taW9fbGUsICgweDE5NCA+PiAyKSwgMHhmZmZmZmZmZik7CisJCWJyZWFrOworCX0KK30KKworLyogRm9yIFhMUyBCIHNpbGljb24sIHRoZSAzLDQgUENJIGludGVycnVwdHMgYXJlIGRpZmZlcmVudCAqLworc3RhdGljIHZvaWQgeGxzX3BjaWVfYWNrX2Ioc3RydWN0IGlycV9kYXRhICpkKQoreworCW5sbV9yZWdfdCAqcGNpZV9tbWlvX2xlID0gbmV0bG9naWNfaW9fbW1pbyhORVRMT0dJQ19JT19QQ0lFXzFfT0ZGU0VUKTsKKworCXN3aXRjaCAoZC0+aXJxKSB7CisJY2FzZSBQSUNfUENJRV9MSU5LMF9JUlE6CisJCW5ldGxvZ2ljX3dyaXRlX3JlZyhwY2llX21taW9fbGUsICgweDkwID4+IDIpLCAweGZmZmZmZmZmKTsKKwkJYnJlYWs7CisJY2FzZSBQSUNfUENJRV9MSU5LMV9JUlE6CisJCW5ldGxvZ2ljX3dyaXRlX3JlZyhwY2llX21taW9fbGUsICgweDk0ID4+IDIpLCAweGZmZmZmZmZmKTsKKwkJYnJlYWs7CisJY2FzZSBQSUNfUENJRV9YTFNCMF9MSU5LMl9JUlE6CisJCW5ldGxvZ2ljX3dyaXRlX3JlZyhwY2llX21taW9fbGUsICgweDE5MCA+PiAyKSwgMHhmZmZmZmZmZik7CisJCWJyZWFrOworCWNhc2UgUElDX1BDSUVfWExTQjBfTElOSzNfSVJROgorCQluZXRsb2dpY193cml0ZV9yZWcocGNpZV9tbWlvX2xlLCAoMHgxOTQgPj4gMiksIDB4ZmZmZmZmZmYpOworCQlicmVhazsKKwl9Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgeGxyX3BpY19hY2soc3RydWN0IGlycV9kYXRhICpkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbmxtX3JlZ190ICptbWlvOworCWludCBpcnEgPSBkLT5pcnE7CisJdm9pZCAqaGQgPSBpcnFfZGF0YV9nZXRfaXJxX2hhbmRsZXJfZGF0YShkKTsKKworCVdBUk4oIVBJQ19JUlFfSVNfSVJUKGlycSksICJCYWQgaXJxICVkIiwgaXJxKTsKKworCWlmIChoZCkgeworCQl2b2lkICgqZXh0cmFfYWNrKSh2b2lkICopID0gaGQ7CisJCWV4dHJhX2FjayhkKTsKKwl9CisJbW1pbyA9IG5ldGxvZ2ljX2lvX21taW8oTkVUTE9HSUNfSU9fUElDX09GRlNFVCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm5sbV9waWNfbG9jaywgZmxhZ3MpOworCW5ldGxvZ2ljX3dyaXRlX3JlZyhtbWlvLCBQSUNfSU5UX0FDSywgKDEgPDwgKGlycSAtIFBJQ19JUlFfQkFTRSkpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZubG1fcGljX2xvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIFRoaXMgY2hpcCBkZWZpbml0aW9uIGhhbmRsZXMgaW50ZXJydXB0cyByb3V0ZWQgdGhydSB0aGUgWExSCisgKiBoYXJkd2FyZSBQSUMsIGN1cnJlbnRseSBJUlFzIDgtMzkgYXJlIG1hcHBlZCB0byBoYXJkd2FyZSBpbnRyCisgKiAwLTMxIHdpcmVkIHRoZSBYTFIgUElDCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgeGxyX3BpYyA9IHsKKwkubmFtZQkJPSAiWExSLVBJQyIsCisJLmlycV9lbmFibGUJPSB4bHJfcGljX2VuYWJsZSwKKwkuaXJxX21hc2sJPSB4bHJfcGljX21hc2ssCisJLmlycV9hY2sJPSB4bHJfcGljX2FjaywKK307CisKK3N0YXRpYyB2b2lkIHJzdmRfaXJxX2hhbmRsZXIoc3RydWN0IGlycV9kYXRhICpkKQoreworCVdBUk4oZC0+aXJxID49IFBJQ19JUlFfQkFTRSwgIkJhZCBpcnEgJWQiLCBkLT5pcnEpOworfQorCisvKgorICogQ2hpcCBkZWZpbml0aW9uIGZvciBDUFUgb3JpZ2luYXRlZCBpbnRlcnJ1cHRzKHRpbWVyLCBtc2cpIGFuZAorICogSVBJcworICovCitzdHJ1Y3QgaXJxX2NoaXAgbmxtX2NwdV9pbnRyID0geworCS5uYW1lCQk9ICJYTFItQ1BVLUlOVFIiLAorCS5pcnFfZW5hYmxlCT0gcnN2ZF9pcnFfaGFuZGxlciwKKwkuaXJxX21hc2sJPSByc3ZkX2lycV9oYW5kbGVyLAorCS5pcnFfYWNrCT0gcnN2ZF9pcnFfaGFuZGxlciwKK307CisKK3ZvaWQgX19pbml0IGluaXRfeGxyX2lycXModm9pZCkKK3sKKwlubG1fcmVnX3QgKm1taW8gPSBuZXRsb2dpY19pb19tbWlvKE5FVExPR0lDX0lPX1BJQ19PRkZTRVQpOworCXVpbnQzMl90IHRocmVhZF9tYXNrID0gMTsKKwlpbnQgbGV2ZWwsIGk7CisKKwlwcl9pbmZvKCJJbnRlcnJ1cHQgdGhyZWFkIG1hc2sgWyV4XVxuIiwgdGhyZWFkX21hc2spOworCWZvciAoaSA9IDA7IGkgPCBQSUNfTlVNX0lSVFM7IGkrKykgeworCQlsZXZlbCA9IFBJQ19JUlFfSVNfRURHRV9UUklHR0VSRUQoaSk7CisKKwkJLyogQmluZCBhbGwgUElDIGlycXMgdG8gYm9vdCBjcHUgKi8KKwkJbmV0bG9naWNfd3JpdGVfcmVnKG1taW8sIFBJQ19JUlRfMF9CQVNFICsgaSwgdGhyZWFkX21hc2spOworCisJCS8qCisJCSAqIFVzZSBsb2NhbCBzY2hlZHVsaW5nIGFuZCBoaWdoIHBvbGFyaXR5IGZvciBhbGwgSVJUcworCQkgKiBJbnZhbGlkYXRlIGFsbCBJUlRzLCBieSBkZWZhdWx0CisJCSAqLworCQluZXRsb2dpY193cml0ZV9yZWcobW1pbywgUElDX0lSVF8xX0JBU0UgKyBpLAorCQkJCShsZXZlbCA8PCAzMCkgfCAoMSA8PCA2KSB8IChQSUNfSVJRX0JBU0UgKyBpKSk7CisJfQorCisJLyogTWFrZSBhbGwgSVJRcyBhcyBsZXZlbCB0cmlnZ2VyZWQgYnkgZGVmYXVsdCAqLworCWZvciAoaSA9IDA7IGkgPCBOUl9JUlFTOyBpKyspIHsKKwkJaWYgKFBJQ19JUlFfSVNfSVJUKGkpKQorCQkJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGksICZ4bHJfcGljLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJZWxzZQorCQkJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGksICZubG1fY3B1X2ludHIsCisJCQkJCQloYW5kbGVfbGV2ZWxfaXJxKTsKKwl9CisjaWZkZWYgQ09ORklHX1NNUAorCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihJUlFfSVBJX1NNUF9GVU5DVElPTiwgJm5sbV9jcHVfaW50ciwKKwkJCSBubG1fc21wX2Z1bmN0aW9uX2lwaV9oYW5kbGVyKTsKKwlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIoSVJRX0lQSV9TTVBfUkVTQ0hFRFVMRSwgJm5sbV9jcHVfaW50ciwKKwkJCSBubG1fc21wX3Jlc2NoZWRfaXBpX2hhbmRsZXIpOworCW5sbV9pcnFfbWFzayB8PQorCSAgICAoKDFVTEwgPDwgSVJRX0lQSV9TTVBfRlVOQ1RJT04pIHwgKDFVTEwgPDwgSVJRX0lQSV9TTVBfUkVTQ0hFRFVMRSkpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUENJCisJLyoKKwkgKiBGb3IgUENJIGludGVycnVwdHMsIHdlIG5lZWQgdG8gYWNrIHRoZSBQSUMgY29udHJvbGxlciB0b28sIG92ZXJsb2FkCisJICogaXJxIGhhbmRsZXIgZGF0YSB0byBkbyB0aGlzCisJICovCisJaWYgKG5sbV9jaGlwX2lzX3hscygpKSB7CisJCWlmIChubG1fY2hpcF9pc194bHNfYigpKSB7CisJCQlpcnFfc2V0X2hhbmRsZXJfZGF0YShQSUNfUENJRV9MSU5LMF9JUlEsCisJCQkJCQkJeGxzX3BjaWVfYWNrX2IpOworCQkJaXJxX3NldF9oYW5kbGVyX2RhdGEoUElDX1BDSUVfTElOSzFfSVJRLAorCQkJCQkJCXhsc19wY2llX2Fja19iKTsKKwkJCWlycV9zZXRfaGFuZGxlcl9kYXRhKFBJQ19QQ0lFX1hMU0IwX0xJTksyX0lSUSwKKwkJCQkJCQl4bHNfcGNpZV9hY2tfYik7CisJCQlpcnFfc2V0X2hhbmRsZXJfZGF0YShQSUNfUENJRV9YTFNCMF9MSU5LM19JUlEsCisJCQkJCQkJeGxzX3BjaWVfYWNrX2IpOworCQl9IGVsc2UgeworCQkJaXJxX3NldF9oYW5kbGVyX2RhdGEoUElDX1BDSUVfTElOSzBfSVJRLCB4bHNfcGNpZV9hY2spOworCQkJaXJxX3NldF9oYW5kbGVyX2RhdGEoUElDX1BDSUVfTElOSzFfSVJRLCB4bHNfcGNpZV9hY2spOworCQkJaXJxX3NldF9oYW5kbGVyX2RhdGEoUElDX1BDSUVfTElOSzJfSVJRLCB4bHNfcGNpZV9hY2spOworCQkJaXJxX3NldF9oYW5kbGVyX2RhdGEoUElDX1BDSUVfTElOSzNfSVJRLCB4bHNfcGNpZV9hY2spOworCQl9CisJfSBlbHNlIHsKKwkJLyogWExSIFBDSSBjb250cm9sbGVyIEFDSyAqLworCQlpcnFfc2V0X2hhbmRsZXJfZGF0YShQSUNfUENJRV9YTFNCMF9MSU5LM19JUlEsIHhscl9wY2lfYWNrKTsKKwl9CisjZW5kaWYKKwkvKiB1bm1hc2sgYWxsIFBJQyByZWxhdGVkIGludGVycnVwdHMuIElmIG5vIGhhbmRsZXIgaXMgaW5zdGFsbGVkIGJ5IHRoZQorCSAqIGRyaXZlcnMsIGl0J2xsIGp1c3QgYWNrIHRoZSBpbnRlcnJ1cHQgYW5kIHJldHVybgorCSAqLworCWZvciAoaSA9IFBJQ19JUlRfRklSU1RfSVJROyBpIDw9IFBJQ19JUlRfTEFTVF9JUlE7IGkrKykKKwkJbmxtX2lycV9tYXNrIHw9ICgxVUxMIDw8IGkpOworCisJbmxtX2lycV9tYXNrIHw9ICgxVUxMIDw8IElSUV9USU1FUik7Cit9CisKK3ZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKK3sKKwkvKiBJbml0aWFsaXplIHRoZSBpcnEgZGVzY3JpcHRvcnMgKi8KKwlpbml0X3hscl9pcnFzKCk7CisJd3JpdGVfYzBfZWltcihubG1faXJxX21hc2spOworfQorCit2b2lkIF9fY3B1aW5pdCBubG1fc21wX2lycV9pbml0KHZvaWQpCit7CisJLyogc2V0IGludGVycnVwdCBtYXNrIGZvciBub24temVybyBjcHVzICovCisJd3JpdGVfYzBfZWltcihubG1faXJxX21hc2spOworfQorCithc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2godm9pZCkKK3sKKwl1aW50NjRfdCBlaXJyOworCWludCBpOworCisJZWlyciA9IHJlYWRfYzBfZWlycigpICYgcmVhZF9jMF9laW1yKCk7CisJaWYgKCFlaXJyKQorCQlyZXR1cm47CisKKwkvKiBubyBuZWVkIG9mIEVJUlIgaGVyZSwgd3JpdGluZyBjb21wYXJlIGNsZWFycyBpbnRlcnJ1cHQgKi8KKwlpZiAoZWlyciAmICgxIDw8IElSUV9USU1FUikpIHsKKwkJZG9fSVJRKElSUV9USU1FUik7CisJCXJldHVybjsKKwl9CisKKwkvKiB1c2UgZGNsdHo6IG9wdGltaXplIGJlbG93IGNvZGUgKi8KKwlmb3IgKGkgPSA2MzsgaSAhPSAtMTsgaS0tKSB7CisJCWlmIChlaXJyICYgKDFVTEwgPDwgaSkpCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gLTEpIHsKKwkJcHJfZXJyKCJubyBpbnRlcnJ1cHQgISFcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogQWNrIGVpcnIgKi8KKwl3cml0ZV9jMF9laXJyKDFVTEwgPDwgaSk7CisKKwlkb19JUlEoaSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbmV0bG9naWMveGxyL3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvbmV0bG9naWMveGxyL3BsYXRmb3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA5ZWMyNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9uZXRsb2dpYy94bHIvcGxhdGZvcm0uYwpAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTEsIE5ldGxvZ2ljIE1pY3Jvc3lzdGVtcy4KKyAqIENvcHlyaWdodCAyMDA0LCBNYXR0IFBvcnRlciA8bXBvcnRlckBrZXJuZWwuY3Jhc2hpbmcub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KKworI2luY2x1ZGUgPGFzbS9uZXRsb2dpYy94bHIvaW9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbmV0bG9naWMveGxyL3BpYy5oPgorI2luY2x1ZGUgPGFzbS9uZXRsb2dpYy94bHIveGxyLmg+CisKK3Vuc2lnbmVkIGludCBubG1feGxyX3VhcnRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcCwgaW50IG9mZnNldCkKK3sKKwlubG1fcmVnX3QgKm1taW87CisJdW5zaWduZWQgaW50IHZhbHVlOworCisJLyogWExSIHVhcnQgZG9lcyBub3QgbmVlZCBhbnkgbWFwcGluZyBvZiByZWdzICovCisJbW1pbyA9IChubG1fcmVnX3QgKikocC0+bWVtYmFzZSArIChvZmZzZXQgPDwgcC0+cmVnc2hpZnQpKTsKKwl2YWx1ZSA9IG5ldGxvZ2ljX3JlYWRfcmVnKG1taW8sIDApOworCisJLyogU2VlIFhMUi9YTFMgZXJyYXRhICovCisJaWYgKG9mZnNldCA9PSBVQVJUX01TUikKKwkJdmFsdWUgXj0gMHhGMDsKKwllbHNlIGlmIChvZmZzZXQgPT0gVUFSVF9NQ1IpCisJCXZhbHVlIF49IDB4MzsKKworCXJldHVybiB2YWx1ZTsKK30KKwordm9pZCBubG1feGxyX3VhcnRfb3V0KHN0cnVjdCB1YXJ0X3BvcnQgKnAsIGludCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlubG1fcmVnX3QgKm1taW87CisKKwkvKiBYTFIgdWFydCBkb2VzIG5vdCBuZWVkIGFueSBtYXBwaW5nIG9mIHJlZ3MgKi8KKwltbWlvID0gKG5sbV9yZWdfdCAqKShwLT5tZW1iYXNlICsgKG9mZnNldCA8PCBwLT5yZWdzaGlmdCkpOworCisJLyogU2VlIFhMUi9YTFMgZXJyYXRhICovCisJaWYgKG9mZnNldCA9PSBVQVJUX01TUikKKwkJdmFsdWUgXj0gMHhGMDsKKwllbHNlIGlmIChvZmZzZXQgPT0gVUFSVF9NQ1IpCisJCXZhbHVlIF49IDB4MzsKKworCW5ldGxvZ2ljX3dyaXRlX3JlZyhtbWlvLCAwLCB2YWx1ZSk7Cit9CisKKyNkZWZpbmUgUE9SVChfaXJxKQkJCQkJXAorCXsJCQkJCQlcCisJCS5pcnEJCT0gX2lycSwJCQlcCisJCS5yZWdzaGlmdAk9IDIsCQkJXAorCQkuaW90eXBlCQk9IFVQSU9fTUVNMzIsCQlcCisJCS5mbGFncwkJPSAoVVBGX1NLSVBfVEVTVCB8CVwKKwkJCSBVUEZfRklYRURfVFlQRSB8IFVQRl9CT09UX0FVVE9DT05GKSxcCisJCS51YXJ0Y2xrCT0gUElDX0NMS1NfUEVSX1NFQywJXAorCQkudHlwZQkJPSBQT1JUXzE2NTUwQSwJCVwKKwkJLnNlcmlhbF9pbgk9IG5sbV94bHJfdWFydF9pbiwJXAorCQkuc2VyaWFsX291dAk9IG5sbV94bHJfdWFydF9vdXQsCVwKKwl9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgeGxyX3VhcnRfZGF0YVtdID0geworCVBPUlQoUElDX1VBUlRfMF9JUlEpLAorCVBPUlQoUElDX1VBUlRfMV9JUlEpLAorCXt9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdWFydF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNlcmlhbDgyNTAiLAorCS5pZAkJPSBQTEFUODI1MF9ERVZfUExBVEZPUk0sCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSB4bHJfdWFydF9kYXRhLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBubG1fdWFydF9pbml0KHZvaWQpCit7CisJbmxtX3JlZ190ICptbWlvOworCisJbW1pbyA9IG5ldGxvZ2ljX2lvX21taW8oTkVUTE9HSUNfSU9fVUFSVF8wX09GRlNFVCk7CisJeGxyX3VhcnRfZGF0YVswXS5tZW1iYXNlID0gKHZvaWQgX19pb21lbSAqKW1taW87CisJeGxyX3VhcnRfZGF0YVswXS5tYXBiYXNlID0gQ1BIWVNBRERSKCh1bnNpZ25lZCBsb25nKW1taW8pOworCisJbW1pbyA9IG5ldGxvZ2ljX2lvX21taW8oTkVUTE9HSUNfSU9fVUFSVF8xX09GRlNFVCk7CisJeGxyX3VhcnRfZGF0YVsxXS5tZW1iYXNlID0gKHZvaWQgX19pb21lbSAqKW1taW87CisJeGxyX3VhcnRfZGF0YVsxXS5tYXBiYXNlID0gQ1BIWVNBRERSKCh1bnNpZ25lZCBsb25nKW1taW8pOworCisJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdWFydF9kZXZpY2UpOworfQorCithcmNoX2luaXRjYWxsKG5sbV91YXJ0X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL25ldGxvZ2ljL3hsci9zZXR1cC5jIGIvYXJjaC9taXBzL25ldGxvZ2ljL3hsci9zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MjgwMjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbmV0bG9naWMveGxyL3NldHVwLmMKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMy0yMDExIE5ldExvZ2ljIE1pY3Jvc3lzdGVtcywgSW5jLiAoTmV0TG9naWMpLiBBbGwgcmlnaHRzCisgKiByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUgTmV0TG9naWMKKyAqIGxpY2Vuc2UgYmVsb3c6CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE5FVExPR0lDIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBORVRMT0dJQyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4KKyAqIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisKKyNpbmNsdWRlIDxhc20vcmVib290Lmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vc21wLW9wcy5oPgorCisjaW5jbHVkZSA8YXNtL25ldGxvZ2ljL2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGFzbS9uZXRsb2dpYy9wc2ItYm9vdGluZm8uaD4KKworI2luY2x1ZGUgPGFzbS9uZXRsb2dpYy94bHIveGxyLmg+CisjaW5jbHVkZSA8YXNtL25ldGxvZ2ljL3hsci9pb21hcC5oPgorI2luY2x1ZGUgPGFzbS9uZXRsb2dpYy94bHIvcGljLmg+CisjaW5jbHVkZSA8YXNtL25ldGxvZ2ljL3hsci9ncGlvLmg+CisKK3Vuc2lnbmVkIGxvbmcgbmV0bG9naWNfaW9fYmFzZSA9ICh1bnNpZ25lZCBsb25nKShERUZBVUxUX05FVExPR0lDX0lPX0JBU0UpOwordW5zaWduZWQgbG9uZyBubG1fY29tbW9uX2ViYXNlID0gMHgwOworc3RydWN0IHBzYl9pbmZvIG5sbV9wcm9tX2luZm87CisKK3N0YXRpYyB2b2lkIG5sbV9lYXJseV9zZXJpYWxfc2V0dXAodm9pZCkKK3sKKwlzdHJ1Y3QgdWFydF9wb3J0IHM7CisJbmxtX3JlZ190ICp1YXJ0X2Jhc2U7CisKKwl1YXJ0X2Jhc2UgPSBuZXRsb2dpY19pb19tbWlvKE5FVExPR0lDX0lPX1VBUlRfMF9PRkZTRVQpOworCW1lbXNldCgmcywgMCwgc2l6ZW9mKHMpKTsKKwlzLmZsYWdzCQk9IEFTWU5DX0JPT1RfQVVUT0NPTkYgfCBBU1lOQ19TS0lQX1RFU1Q7CisJcy5pb3R5cGUJPSBVUElPX01FTTMyOworCXMucmVnc2hpZnQJPSAyOworCXMuaXJxCQk9IFBJQ19VQVJUXzBfSVJROworCXMudWFydGNsawk9IFBJQ19DTEtTX1BFUl9TRUM7CisJcy5zZXJpYWxfaW4JPSBubG1feGxyX3VhcnRfaW47CisJcy5zZXJpYWxfb3V0CT0gbmxtX3hscl91YXJ0X291dDsKKwlzLm1hcGJhc2UJPSAodW5zaWduZWQgbG9uZyl1YXJ0X2Jhc2U7CisJcy5tZW1iYXNlCT0gKHVuc2lnbmVkIGNoYXIgX19pb21lbSAqKXVhcnRfYmFzZTsKKwllYXJseV9zZXJpYWxfc2V0dXAoJnMpOworfQorCitzdGF0aWMgdm9pZCBubG1fbGludXhfZXhpdCh2b2lkKQoreworCW5sbV9yZWdfdCAqbW1pbzsKKworCW1taW8gPSBuZXRsb2dpY19pb19tbWlvKE5FVExPR0lDX0lPX0dQSU9fT0ZGU0VUKTsKKwkvKiB0cmlnZ2VyIGEgY2hpcCByZXNldCBieSB3cml0aW5nIDEgdG8gR1BJT19TV1JFU0VUX1JFRyAqLworCW5ldGxvZ2ljX3dyaXRlX3JlZyhtbWlvLCBORVRMT0dJQ19HUElPX1NXUkVTRVRfUkVHLCAxKTsKKwlmb3IgKCA7IDsgKQorCQljcHVfd2FpdCgpOworfQorCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQoreworCXBhbmljX3RpbWVvdXQJPSA1OworCV9tYWNoaW5lX3Jlc3RhcnQgPSAodm9pZCAoKikoY2hhciAqKSlubG1fbGludXhfZXhpdDsKKwlfbWFjaGluZV9oYWx0CT0gbmxtX2xpbnV4X2V4aXQ7CisJcG1fcG93ZXJfb2ZmCT0gbmxtX2xpbnV4X2V4aXQ7Cit9CisKK2NvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQoreworCXJldHVybiAiTmV0bG9naWMgWExSL1hMUyBTZXJpZXMiOworfQorCit2b2lkIF9faW5pdCBwcm9tX2ZyZWVfcHJvbV9tZW1vcnkodm9pZCkKK3sKKwkvKiBOb3RoaW5nIHlldCAqLworfQorCitzdGF0aWMgdm9pZCBidWlsZF9hcmNzX2NtZGxpbmUoaW50ICphcmd2KQoreworCWludCBpLCByZW1haW4sIGxlbjsKKwljaGFyICphcmc7CisKKwlyZW1haW4gPSBzaXplb2YoYXJjc19jbWRsaW5lKSAtIDE7CisJYXJjc19jbWRsaW5lWzBdID0gJ1wwJzsKKwlmb3IgKGkgPSAwOyBhcmd2W2ldICE9IDA7IGkrKykgeworCQlhcmcgPSAoY2hhciAqKShsb25nKWFyZ3ZbaV07CisJCWxlbiA9IHN0cmxlbihhcmcpOworCQlpZiAobGVuICsgMSA+IHJlbWFpbikKKwkJCWJyZWFrOworCQlzdHJjYXQoYXJjc19jbWRsaW5lLCBhcmcpOworCQlzdHJjYXQoYXJjc19jbWRsaW5lLCAiICIpOworCQlyZW1haW4gLT0gIGxlbiArIDE7CisJfQorCisJLyogQWRkIHRoZSBkZWZhdWx0IG9wdGlvbnMgaGVyZSAqLworCWlmICgoc3Ryc3RyKGFyY3NfY21kbGluZSwgImNvbnNvbGU9IikpID09IE5VTEwpIHsKKwkJYXJnID0gImNvbnNvbGU9dHR5UzAsMzg0MDAgIjsKKwkJbGVuID0gc3RybGVuKGFyZyk7CisJCWlmIChsZW4gPiByZW1haW4pCisJCQlnb3RvIGZhaWw7CisJCXN0cmNhdChhcmNzX2NtZGxpbmUsIGFyZyk7CisJCXJlbWFpbiAtPSBsZW47CisJfQorI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAorCWlmICgoc3Ryc3RyKGFyY3NfY21kbGluZSwgInJkaW5pdD0iKSkgPT0gTlVMTCkgeworCQlhcmcgPSAicmRpbml0PS9zYmluL2luaXQgIjsKKwkJbGVuID0gc3RybGVuKGFyZyk7CisJCWlmIChsZW4gPiByZW1haW4pCisJCQlnb3RvIGZhaWw7CisJCXN0cmNhdChhcmNzX2NtZGxpbmUsIGFyZyk7CisJCXJlbWFpbiAtPSBsZW47CisJfQorI2VuZGlmCisJcmV0dXJuOworZmFpbDoKKwlwYW5pYygiQ2Fubm90IGFkZCAlcywgY29tbWFuZCBsaW5lIHRvbyBiaWchIiwgYXJnKTsKK30KKworc3RhdGljIHZvaWQgcHJvbV9hZGRfbWVtb3J5KHZvaWQpCit7CisJc3RydWN0IG5sbV9ib290X21lbV9tYXAgKmJvb3RtOworCXU2NCBzdGFydCwgc2l6ZTsKKwl1NjQgcHJlZl9iYWNrdXAgPSA1MTI7ICAvKiBhdm9pZCBwcmVmIHdhbGtpbmcgYmV5b25kIGVuZCAqLworCWludCBpOworCisJYm9vdG0gPSAodm9pZCAqKShsb25nKW5sbV9wcm9tX2luZm8ucHNiX21lbV9tYXA7CisJZm9yIChpID0gMDsgaSA8IGJvb3RtLT5ucl9tYXA7IGkrKykgeworCQlpZiAoYm9vdG0tPm1hcFtpXS50eXBlICE9IEJPT1RfTUVNX1JBTSkKKwkJCWNvbnRpbnVlOworCQlzdGFydCA9IGJvb3RtLT5tYXBbaV0uYWRkcjsKKwkJc2l6ZSAgID0gYm9vdG0tPm1hcFtpXS5zaXplOworCisJCS8qIFdvcmsgYXJvdW5kIGZvciB1c2luZyBib290bG9hZGVyIG1lbSAqLworCQlpZiAoaSA9PSAwICYmIHN0YXJ0ID09IDAgJiYgc2l6ZSA9PSAweDBjMDAwMDAwKQorCQkJc2l6ZSA9IDB4MGZmMDAwMDA7CisKKwkJYWRkX21lbW9yeV9yZWdpb24oc3RhcnQsIHNpemUgLSBwcmVmX2JhY2t1cCwgQk9PVF9NRU1fUkFNKTsKKwl9Cit9CisKK3ZvaWQgX19pbml0IHByb21faW5pdCh2b2lkKQoreworCWludCAqYXJndiwgKmVudnA7CQkvKiBwYXNzZWQgYXMgMzIgYml0IHB0cnMgKi8KKwlzdHJ1Y3QgcHNiX2luZm8gKnByb21faW5mb3A7CisKKwkvKiB0cnVuY2F0ZSB0byAzMiBiaXQgYW5kIHNpZ24gZXh0ZW5kIGFsbCBhcmdzICovCisJYXJndiA9IChpbnQgKikobG9uZykoaW50KWZ3X2FyZzE7CisJZW52cCA9IChpbnQgKikobG9uZykoaW50KWZ3X2FyZzI7CisJcHJvbV9pbmZvcCA9IChzdHJ1Y3QgcHNiX2luZm8gKikobG9uZykoaW50KWZ3X2FyZzM7CisKKwlubG1fcHJvbV9pbmZvID0gKnByb21faW5mb3A7CisKKwlubG1fZWFybHlfc2VyaWFsX3NldHVwKCk7CisJYnVpbGRfYXJjc19jbWRsaW5lKGFyZ3YpOworCW5sbV9jb21tb25fZWJhc2UgPSByZWFkX2MwX2ViYXNlKCkgJiAofigoMSA8PCAxMikgLSAxKSk7CisJcHJvbV9hZGRfbWVtb3J5KCk7CisKKyNpZmRlZiBDT05GSUdfU01QCisJbmxtX3dha2V1cF9zZWNvbmRhcnlfY3B1cyhubG1fcHJvbV9pbmZvLm9ubGluZV9jcHVfbWFwKTsKKwlyZWdpc3Rlcl9zbXBfb3BzKCZubG1fc21wX29wcyk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9uZXRsb2dpYy94bHIvc21wLmMgYi9hcmNoL21pcHMvbmV0bG9naWMveGxyL3NtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0OTVhN2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbmV0bG9naWMveGxyL3NtcC5jCkBAIC0wLDAgKzEsMjI1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDMtMjAxMSBOZXRMb2dpYyBNaWNyb3N5c3RlbXMsIEluYy4gKE5ldExvZ2ljKS4gQWxsIHJpZ2h0cworICogcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlIE5ldExvZ2ljCisgKiBsaWNlbnNlIGJlbG93OgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBORVRMT0dJQyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgTkVUTE9HSUMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCisgKiBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOCisgKiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKworI2luY2x1ZGUgPGFzbS9uZXRsb2dpYy9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxhc20vbmV0bG9naWMvbWlwcy1leHRucy5oPgorCisjaW5jbHVkZSA8YXNtL25ldGxvZ2ljL3hsci9pb21hcC5oPgorI2luY2x1ZGUgPGFzbS9uZXRsb2dpYy94bHIvcGljLmg+CisjaW5jbHVkZSA8YXNtL25ldGxvZ2ljL3hsci94bHIuaD4KKwordm9pZCBjb3JlX3NlbmRfaXBpKGludCBsb2dpY2FsX2NwdSwgdW5zaWduZWQgaW50IGFjdGlvbikKK3sKKwlpbnQgY3B1ID0gY3B1X2xvZ2ljYWxfbWFwKGxvZ2ljYWxfY3B1KTsKKwl1MzIgdGlkID0gY3B1ICYgMHgzOworCXUzMiBwaWQgPSAoY3B1ID4+IDIpICYgMHgwNzsKKwl1MzIgaXBpID0gKHRpZCA8PCAxNikgfCAocGlkIDw8IDIwKTsKKworCWlmIChhY3Rpb24gJiBTTVBfQ0FMTF9GVU5DVElPTikKKwkJaXBpIHw9IElSUV9JUElfU01QX0ZVTkNUSU9OOworCWVsc2UgaWYgKGFjdGlvbiAmIFNNUF9SRVNDSEVEVUxFX1lPVVJTRUxGKQorCQlpcGkgfD0gSVJRX0lQSV9TTVBfUkVTQ0hFRFVMRTsKKwllbHNlCisJCXJldHVybjsKKworCXBpY19zZW5kX2lwaShpcGkpOworfQorCit2b2lkIG5sbV9zZW5kX2lwaV9zaW5nbGUoaW50IGNwdSwgdW5zaWduZWQgaW50IGFjdGlvbikKK3sKKwljb3JlX3NlbmRfaXBpKGNwdSwgYWN0aW9uKTsKK30KKwordm9pZCBubG1fc2VuZF9pcGlfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgdW5zaWduZWQgaW50IGFjdGlvbikKK3sKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfY3B1KGNwdSwgbWFzaykgeworCQljb3JlX3NlbmRfaXBpKGNwdSwgYWN0aW9uKTsKKwl9Cit9CisKKy8qIElSUV9JUElfU01QX0ZVTkNUSU9OIEhhbmRsZXIgKi8KK3ZvaWQgbmxtX3NtcF9mdW5jdGlvbl9pcGlfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KCk7Cit9CisKKy8qIElSUV9JUElfU01QX1JFU0NIRURVTEUgIGhhbmRsZXIgKi8KK3ZvaWQgbmxtX3NtcF9yZXNjaGVkX2lwaV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzZXRfbmVlZF9yZXNjaGVkKCk7Cit9CisKK3ZvaWQgbmxtX2NvbW1vbl9pcGlfaGFuZGxlcihpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpZiAoaXJxID09IElSUV9JUElfU01QX0ZVTkNUSU9OKSB7CisJCXNtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCgpOworCX0gZWxzZSB7CisJCS8qIEFubm91bmNlIHRoYXQgd2UgYXJlIGZvciByZXNjaGR1bGluZyAqLworCQlzZXRfbmVlZF9yZXNjaGVkKCk7CisJfQorfQorCisvKgorICogQ2FsbGVkIGJlZm9yZSBnb2luZyBpbnRvIG1pcHMgY29kZSwgZWFybHkgY3B1IGluaXQKKyAqLwordm9pZCBubG1fZWFybHlfaW5pdF9zZWNvbmRhcnkodm9pZCkKK3sKKwl3cml0ZV9jMF9lYmFzZSgodWludDMyX3QpbmxtX2NvbW1vbl9lYmFzZSk7CisJLyogVExCIHBhcnRpdGlvbiBoZXJlIGxhdGVyICovCit9CisKKy8qCisgKiBDb2RlIHRvIHJ1biBvbiBzZWNvbmRhcnkganVzdCBhZnRlciBwcm9iaW5nIHRoZSBDUFUKKyAqLworc3RhdGljIHZvaWQgX19jcHVpbml0IG5sbV9pbml0X3NlY29uZGFyeSh2b2lkKQoreworCW5sbV9zbXBfaXJxX2luaXQoKTsKK30KKwordm9pZCBubG1fc21wX2ZpbmlzaCh2b2lkKQoreworI2lmZGVmIG5vdHlldAorCW5sbV9jb21tb25fbXNncmluZ19jcHVfaW5pdCgpOworI2VuZGlmCit9CisKK3ZvaWQgbmxtX2NwdXNfZG9uZSh2b2lkKQoreworfQorCisvKgorICogQm9vdCBhbGwgb3RoZXIgY3B1cyBpbiB0aGUgc3lzdGVtLCBpbml0aWFsaXplIHRoZW0sIGFuZCBicmluZyB0aGVtIGludG8KKyAqIHRoZSBib290IGZ1bmN0aW9uCisgKi8KK2ludCBubG1fY3B1X3VuYmxvY2tbTlJfQ1BVU107CitpbnQgbmxtX2NwdV9yZWFkeVtOUl9DUFVTXTsKK3Vuc2lnbmVkIGxvbmcgbmxtX25leHRfZ3A7Cit1bnNpZ25lZCBsb25nIG5sbV9uZXh0X3NwOworY3B1bWFza190IHBoeXNfY3B1X3ByZXNlbnRfbWFwOworCit2b2lkIG5sbV9ib290X3NlY29uZGFyeShpbnQgbG9naWNhbF9jcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqaWRsZSkKK3sKKwl1bnNpZ25lZCBsb25nIGdwID0gKHVuc2lnbmVkIGxvbmcpdGFza190aHJlYWRfaW5mbyhpZGxlKTsKKwl1bnNpZ25lZCBsb25nIHNwID0gKHVuc2lnbmVkIGxvbmcpX19LU1RLX1RPUyhpZGxlKTsKKwlpbnQgY3B1ID0gY3B1X2xvZ2ljYWxfbWFwKGxvZ2ljYWxfY3B1KTsKKworCW5sbV9uZXh0X3NwID0gc3A7CisJbmxtX25leHRfZ3AgPSBncDsKKworCS8qIGJhcnJpZXIgKi8KKwlfX3N5bmMoKTsKKwlubG1fY3B1X3VuYmxvY2tbY3B1XSA9IDE7Cit9CisKK3ZvaWQgX19pbml0IG5sbV9zbXBfc2V0dXAodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgYm9vdF9jcHU7CisJaW50IG51bV9jcHVzLCBpOworCisJYm9vdF9jcHUgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKKwljcHVzX2NsZWFyKHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKKworCWNwdV9zZXQoYm9vdF9jcHUsIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKKwlfX2NwdV9udW1iZXJfbWFwW2Jvb3RfY3B1XSA9IDA7CisJX19jcHVfbG9naWNhbF9tYXBbMF0gPSBib290X2NwdTsKKwljcHVfc2V0KDAsIGNwdV9wb3NzaWJsZV9tYXApOworCisJbnVtX2NwdXMgPSAxOworCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKKwkJaWYgKG5sbV9jcHVfcmVhZHlbaV0pIHsKKwkJCWNwdV9zZXQoaSwgcGh5c19jcHVfcHJlc2VudF9tYXApOworCQkJX19jcHVfbnVtYmVyX21hcFtpXSA9IG51bV9jcHVzOworCQkJX19jcHVfbG9naWNhbF9tYXBbbnVtX2NwdXNdID0gaTsKKwkJCWNwdV9zZXQobnVtX2NwdXMsIGNwdV9wb3NzaWJsZV9tYXApOworCQkJKytudW1fY3B1czsKKwkJfQorCX0KKworCXByX2luZm8oIlBoeXMgQ1BVIHByZXNlbnQgbWFwOiAlbHgsIHBvc3NpYmxlIG1hcCAlbHhcbiIsCisJCSh1bnNpZ25lZCBsb25nKXBoeXNfY3B1X3ByZXNlbnRfbWFwLmJpdHNbMF0sCisJCSh1bnNpZ25lZCBsb25nKWNwdV9wb3NzaWJsZV9tYXAuYml0c1swXSk7CisKKwlwcl9pbmZvKCJEZXRlY3RlZCAlaSBTbGF2ZSBDUFUocylcbiIsIG51bV9jcHVzKTsKK30KKwordm9pZCBubG1fcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKK3sKK30KKworc3RydWN0IHBsYXRfc21wX29wcyBubG1fc21wX29wcyA9IHsKKwkuc2VuZF9pcGlfc2luZ2xlCT0gbmxtX3NlbmRfaXBpX3NpbmdsZSwKKwkuc2VuZF9pcGlfbWFzawkJPSBubG1fc2VuZF9pcGlfbWFzaywKKwkuaW5pdF9zZWNvbmRhcnkJCT0gbmxtX2luaXRfc2Vjb25kYXJ5LAorCS5zbXBfZmluaXNoCQk9IG5sbV9zbXBfZmluaXNoLAorCS5jcHVzX2RvbmUJCT0gbmxtX2NwdXNfZG9uZSwKKwkuYm9vdF9zZWNvbmRhcnkJCT0gbmxtX2Jvb3Rfc2Vjb25kYXJ5LAorCS5zbXBfc2V0dXAJCT0gbmxtX3NtcF9zZXR1cCwKKwkucHJlcGFyZV9jcHVzCQk9IG5sbV9wcmVwYXJlX2NwdXMsCit9OworCit1bnNpZ25lZCBsb25nIHNlY29uZGFyeV9lbnRyeV9wb2ludDsKKworaW50IG5sbV93YWtldXBfc2Vjb25kYXJ5X2NwdXModTMyIHdha2V1cF9tYXNrKQoreworCXVuc2lnbmVkIGludCB0aWQsIHBpZCwgaXBpLCBpLCBib290X2NwdTsKKwl2b2lkICpyZXNldF92ZWM7CisKKwlzZWNvbmRhcnlfZW50cnlfcG9pbnQgPSAodW5zaWduZWQgbG9uZylwcm9tX3ByZV9ib290X3NlY29uZGFyeV9jcHVzOworCXJlc2V0X3ZlYyA9ICh2b2lkICopQ0tTRUcxQUREUigweDFmYzAwMDAwKTsKKwltZW1jcHkocmVzZXRfdmVjLCBubG1fYm9vdF9zbXBfbm1pLCAweDgwKTsKKwlib290X2NwdSA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgeworCQlpZiAoaSA9PSBib290X2NwdSkKKwkJCWNvbnRpbnVlOworCQlpZiAod2FrZXVwX21hc2sgJiAoMXUgPDwgaSkpIHsKKwkJCXRpZCA9IGkgJiAweDM7CisJCQlwaWQgPSAoaSA+PiAyKSAmIDB4NzsKKwkJCWlwaSA9ICh0aWQgPDwgMTYpIHwgKHBpZCA8PCAyMCkgfCAoMSA8PCA4KTsKKwkJCXBpY19zZW5kX2lwaShpcGkpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbmV0bG9naWMveGxyL3NtcGJvb3QuUyBiL2FyY2gvbWlwcy9uZXRsb2dpYy94bHIvc21wYm9vdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZTA3NDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbmV0bG9naWMveGxyL3NtcGJvb3QuUwpAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDMtMjAxMSBOZXRMb2dpYyBNaWNyb3N5c3RlbXMsIEluYy4gKE5ldExvZ2ljKS4gQWxsIHJpZ2h0cworICogcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlIE5ldExvZ2ljCisgKiBsaWNlbnNlIGJlbG93OgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBORVRMT0dJQyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgTkVUTE9HSUMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCisgKiBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOCisgKiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8YXNtL2FzbS5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KKyNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KKworCisvKiBEb24ndCBqdW1wIHRvIGxpbnV4IGZ1bmN0aW9uIGZyb20gQm9vdGxvYWRlciBzdGFjay4gQ2hhbmdlIGl0CisgKiBoZXJlLiBLZXJuZWwgbWlnaHQgYWxsb2NhdGUgYm9vdGxvYWRlciBtZW1vcnkgYmVmb3JlIGFsbCB0aGUgQ1BVcyBhcmUKKyAqIGJyb3VnaHQgdXAgKGVnOiBJbm9kZSBjYWNoZSByZWdpb24pIGFuZCB3ZSBiZXR0ZXIgZG9uJ3Qgb3ZlcndyaXRlIHRoaXMKKyAqIG1lbW9yeQorICovCitORVNURUQocHJvbV9wcmVfYm9vdF9zZWNvbmRhcnlfY3B1cywgMTYsIHNwKQorCS5zZXQJbWlwczY0CisJbWZjMAl0MCwgJDE1LCAxCSMgcmVhZCBlYmFzZQorCWFuZGkJdDAsIDB4MWYJIyB0MCBoYXMgdGhlIHByb2Nlc3Nvcl9pZCgpCisJc2xsCXQwLCAyCQkjIG9mZnNldCBpbiBjcHUgYXJyYXkKKworCVBUUl9MQQl0MSwgbmxtX2NwdV9yZWFkeSAjIG1hcmsgQ1BVIHJlYWR5CisJUFRSX0FERFUgdDEsIHQwCisJbGkJdDIsIDEKKwlzdwl0MiwgMCh0MSkKKworCVBUUl9MQQl0MSwgbmxtX2NwdV91bmJsb2NrCisJUFRSX0FERFUgdDEsIHQwCisxOglsdwl0MiwgMCh0MSkJIyB3YWl0IHRpbGwgdW5ibG9ja2VkCisJYmVxegl0MiwgMWIKKwlub3AKKworCVBUUl9MQQl0MSwgbmxtX25leHRfc3AKKwlQVFJfTAlzcCwgMCh0MSkKKwlQVFJfTEEJdDEsIG5sbV9uZXh0X2dwCisJUFRSX0wJZ3AsIDAodDEpCisKKwlQVFJfTEEJdDAsIG5sbV9lYXJseV9pbml0X3NlY29uZGFyeQorCWphbHIJdDAKKwlub3AKKworCVBUUl9MQQl0MCwgc21wX2Jvb3RzdHJhcAorCWpyCXQwCisJbm9wCitFTkQocHJvbV9wcmVfYm9vdF9zZWNvbmRhcnlfY3B1cykKKworTkVTVEVEKG5sbV9ib290X3NtcF9ubWksIDAsIHNwKQorCS5zZXQgcHVzaAorCS5zZXQgbm9hdAorCS5zZXQgbWlwczY0CisJLnNldCBub3Jlb3JkZXIKKworCS8qIENsZWFyIHRoZSAgTk1JIGFuZCBCRVYgYml0cyAqLworCU1GQzAJazAsIENQMF9TVEFUVVMKKwlsaSAJazEsIDB4ZmZiN2ZmZmYKKwlhbmQJazAsIGswLCBrMQorCU1UQzAJazAsIENQMF9TVEFUVVMKKworCVBUUl9MQSAgazEsIHNlY29uZGFyeV9lbnRyeV9wb2ludAorCVBUUl9MCWswLCAwKGsxKQorCWpyCWswCisJbm9wCisJLnNldCBwb3AKK0VORChubG1fYm9vdF9zbXBfbm1pKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL25ldGxvZ2ljL3hsci90aW1lLmMgYi9hcmNoL21pcHMvbmV0bG9naWMveGxyL3RpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDgxYjI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL25ldGxvZ2ljL3hsci90aW1lLmMKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAzLTIwMTEgTmV0TG9naWMgTWljcm9zeXN0ZW1zLCBJbmMuIChOZXRMb2dpYykuIEFsbCByaWdodHMKKyAqIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZSBOZXRMb2dpYworICogbGljZW5zZSBiZWxvdzoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTkVUTE9HSUMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIE5FVExPR0lDIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTgorICogSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL25ldGxvZ2ljL2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGFzbS9uZXRsb2dpYy9wc2ItYm9vdGluZm8uaD4KKwordW5zaWduZWQgaW50IF9fY3B1aW5pdCBnZXRfYzBfY29tcGFyZV9pbnQodm9pZCkKK3sKKwlyZXR1cm4gSVJRX1RJTUVSOworfQorCit2b2lkIF9faW5pdCBwbGF0X3RpbWVfaW5pdCh2b2lkKQoreworCW1pcHNfaHB0X2ZyZXF1ZW5jeSA9IG5sbV9wcm9tX2luZm8uY3B1X2ZyZXF1ZW5jeTsKKwlwcl9pbmZvKCJNSVBTIGNvdW50ZXIgZnJlcXVlbmN5IFslbGRdXG4iLAorCQkodW5zaWduZWQgbG9uZyltaXBzX2hwdF9mcmVxdWVuY3kpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL25ldGxvZ2ljL3hsci94bHJfY29uc29sZS5jIGIvYXJjaC9taXBzL25ldGxvZ2ljL3hsci94bHJfY29uc29sZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1OWRmMDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbmV0bG9naWMveGxyL3hscl9jb25zb2xlLmMKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAzLTIwMTEgTmV0TG9naWMgTWljcm9zeXN0ZW1zLCBJbmMuIChOZXRMb2dpYykuIEFsbCByaWdodHMKKyAqIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZSBOZXRMb2dpYworICogbGljZW5zZSBiZWxvdzoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTkVUTE9HSUMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIE5FVExPR0lDIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTgorICogSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL25ldGxvZ2ljL3hsci9pb21hcC5oPgorCit2b2lkIHByb21fcHV0Y2hhcihjaGFyIGMpCit7CisJbmxtX3JlZ190ICptbWlvOworCisJbW1pbyA9IG5ldGxvZ2ljX2lvX21taW8oTkVUTE9HSUNfSU9fVUFSVF8wX09GRlNFVCk7CisJd2hpbGUgKG5ldGxvZ2ljX3JlYWRfcmVnKG1taW8sIDB4NSkgPT0gMCkKKwkJOworCW5ldGxvZ2ljX3dyaXRlX3JlZyhtbWlvLCAweDAsIGMpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9NYWtlZmlsZSBiL2FyY2gvbWlwcy9wY2kvTWFrZWZpbGUKaW5kZXggYzkyMDljYS4uNGRmODc5OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvcGNpL01ha2VmaWxlCkBAIC00MSw2ICs0MSw3IEBACiBvYmotJChDT05GSUdfU0lCWVRFX0JDTTExMlgpCSs9IGZpeHVwLXNiMTI1MC5vIHBjaS1zYjEyNTAubwogb2JqLSQoQ09ORklHX1NJQllURV9CQ00xeDgwKQkrPSBwY2ktYmNtMTQ4MC5vIHBjaS1iY20xNDgwaHQubwogb2JqLSQoQ09ORklHX1NOSV9STSkJCSs9IGZpeHVwLXNuaS5vIG9wcy1zbmkubworb2JqLSQoQ09ORklHX1NPQ19YV0FZKQkJKz0gcGNpLWxhbnRpcS5vIG9wcy1sYW50aXEubwogb2JqLSQoQ09ORklHX1RBTkJBQ19UQjAyMTkpCSs9IGZpeHVwLXRiMDIxOS5vCiBvYmotJChDT05GSUdfVEFOQkFDX1RCMDIyNikJKz0gZml4dXAtdGIwMjI2Lm8KIG9iai0kKENPTkZJR19UQU5CQUNfVEIwMjg3KQkrPSBmaXh1cC10YjAyODcubwpAQCAtNTUsNiArNTYsNyBAQAogb2JqLSQoQ09ORklHX1dSX1BQTUMpCQkrPSBmaXh1cC13cnBwbWMubwogb2JqLSQoQ09ORklHX01JS1JPVElLX1JCNTMyKQkrPSBwY2ktcmMzMjQzNC5vIG9wcy1yYzMyNDM0Lm8gZml4dXAtcmMzMjQzNC5vCiBvYmotJChDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04pCSs9IHBjaS1vY3Rlb24ubyBwY2llLW9jdGVvbi5vCitvYmotJChDT05GSUdfTkxNX1hMUikJCSs9IHBjaS14bHIubwogCiBpZmRlZiBDT05GSUdfUENJX01TSQogb2JqLSQoQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OKQkrPSBtc2ktb2N0ZW9uLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvb3BzLWxhbnRpcS5jIGIvYXJjaC9taXBzL3BjaS9vcHMtbGFudGlxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYyYWZiNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wY2kvb3BzLWxhbnRpcS5jCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2luY2x1ZGUgPGxhbnRpcV9zb2MuaD4KKworI2luY2x1ZGUgInBjaS1sYW50aXEuaCIKKworI2RlZmluZSBMVFFfUENJX0NGR19CVVNOVU1fU0hGIDE2CisjZGVmaW5lIExUUV9QQ0lfQ0ZHX0RFVk5VTV9TSEYgMTEKKyNkZWZpbmUgTFRRX1BDSV9DRkdfRlVOTlVNX1NIRiA4CisKKyNkZWZpbmUgUENJX0FDQ0VTU19SRUFEICAwCisjZGVmaW5lIFBDSV9BQ0NFU1NfV1JJVEUgMQorCitzdGF0aWMgaW50IGx0cV9wY2lfY29uZmlnX2FjY2Vzcyh1bnNpZ25lZCBjaGFyIGFjY2Vzc190eXBlLCBzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCXVuc2lnbmVkIGludCBkZXZmbiwgdW5zaWduZWQgaW50IHdoZXJlLCB1MzIgKmRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBjZmdfYmFzZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB0ZW1wOworCisJLyogd2Ugc3VwcG9ydCBzbG90IGZyb20gMCB0byAxNSBkZXZfZm4gJiAweDY4IChBRDI5KSBpcyB0aGUKKwkgICBTb0MgaXRzZWxmICovCisJaWYgKChidXMtPm51bWJlciAhPSAwKSB8fCAoKGRldmZuICYgMHhmOCkgPiAweDc4KQorCQl8fCAoKGRldmZuICYgMHhmOCkgPT0gMCkgfHwgKChkZXZmbiAmIDB4ZjgpID09IDB4NjgpKQorCQlyZXR1cm4gMTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlYnVfbG9jaywgZmxhZ3MpOworCisJY2ZnX2Jhc2UgPSAodW5zaWduZWQgbG9uZykgbHRxX3BjaV9tYXBwZWRfY2ZnOworCWNmZ19iYXNlIHw9IChidXMtPm51bWJlciA8PCBMVFFfUENJX0NGR19CVVNOVU1fU0hGKSB8IChkZXZmbiA8PAorCQkJTFRRX1BDSV9DRkdfRlVOTlVNX1NIRikgfCAod2hlcmUgJiB+MHgzKTsKKworCS8qIFBlcmZvcm0gYWNjZXNzICovCisJaWYgKGFjY2Vzc190eXBlID09IFBDSV9BQ0NFU1NfV1JJVEUpIHsKKwkJbHRxX3czMihzd2FiMzIoKmRhdGEpLCAoKHUzMiAqKWNmZ19iYXNlKSk7CisJfSBlbHNlIHsKKwkJKmRhdGEgPSBsdHFfcjMyKCgodTMyICopKGNmZ19iYXNlKSkpOworCQkqZGF0YSA9IHN3YWIzMigqZGF0YSk7CisJfQorCXdtYigpOworCisJLyogY2xlYW4gcG9zc2libGUgTWFzdGVyIGFib3J0ICovCisJY2ZnX2Jhc2UgPSAodW5zaWduZWQgbG9uZykgbHRxX3BjaV9tYXBwZWRfY2ZnOworCWNmZ19iYXNlIHw9ICgweDAgPDwgTFRRX1BDSV9DRkdfRlVOTlVNX1NIRikgKyA0OworCXRlbXAgPSBsdHFfcjMyKCgodTMyICopKGNmZ19iYXNlKSkpOworCXRlbXAgPSBzd2FiMzIodGVtcCk7CisJY2ZnX2Jhc2UgPSAodW5zaWduZWQgbG9uZykgbHRxX3BjaV9tYXBwZWRfY2ZnOworCWNmZ19iYXNlIHw9ICgweDY4IDw8IExUUV9QQ0lfQ0ZHX0ZVTk5VTV9TSEYpICsgNDsKKwlsdHFfdzMyKHRlbXAsICgodTMyICopY2ZnX2Jhc2UpKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVidV9sb2NrLCBmbGFncyk7CisKKwlpZiAoKCgqZGF0YSkgPT0gMHhmZmZmZmZmZikgJiYgKGFjY2Vzc190eXBlID09IFBDSV9BQ0NFU1NfUkVBRCkpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBsdHFfcGNpX3JlYWRfY29uZmlnX2R3b3JkKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwlpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKnZhbCkKK3sKKwl1MzIgZGF0YSA9IDA7CisKKwlpZiAobHRxX3BjaV9jb25maWdfYWNjZXNzKFBDSV9BQ0NFU1NfUkVBRCwgYnVzLCBkZXZmbiwgd2hlcmUsICZkYXRhKSkKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKworCWlmIChzaXplID09IDEpCisJCSp2YWwgPSAoZGF0YSA+PiAoKHdoZXJlICYgMykgPDwgMykpICYgMHhmZjsKKwllbHNlIGlmIChzaXplID09IDIpCisJCSp2YWwgPSAoZGF0YSA+PiAoKHdoZXJlICYgMykgPDwgMykpICYgMHhmZmZmOworCWVsc2UKKwkJKnZhbCA9IGRhdGE7CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCitpbnQgbHRxX3BjaV93cml0ZV9jb25maWdfZHdvcmQoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCWludCB3aGVyZSwgaW50IHNpemUsIHUzMiB2YWwpCit7CisJdTMyIGRhdGEgPSAwOworCisJaWYgKHNpemUgPT0gNCkgeworCQlkYXRhID0gdmFsOworCX0gZWxzZSB7CisJCWlmIChsdHFfcGNpX2NvbmZpZ19hY2Nlc3MoUENJX0FDQ0VTU19SRUFELCBidXMsCisJCQkJZGV2Zm4sIHdoZXJlLCAmZGF0YSkpCisJCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCisJCWlmIChzaXplID09IDEpCisJCQlkYXRhID0gKGRhdGEgJiB+KDB4ZmYgPDwgKCh3aGVyZSAmIDMpIDw8IDMpKSkgfAorCQkJCSh2YWwgPDwgKCh3aGVyZSAmIDMpIDw8IDMpKTsKKwkJZWxzZSBpZiAoc2l6ZSA9PSAyKQorCQkJZGF0YSA9IChkYXRhICYgfigweGZmZmYgPDwgKCh3aGVyZSAmIDMpIDw8IDMpKSkgfAorCQkJCSh2YWwgPDwgKCh3aGVyZSAmIDMpIDw8IDMpKTsKKwl9CisKKwlpZiAobHRxX3BjaV9jb25maWdfYWNjZXNzKFBDSV9BQ0NFU1NfV1JJVEUsIGJ1cywgZGV2Zm4sIHdoZXJlLCAmZGF0YSkpCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9wY2ktbGFudGlxLmMgYi9hcmNoL21pcHMvcGNpL3BjaS1sYW50aXEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDNkNzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3BjaS9wY2ktbGFudGlxLmMKQEAgLTAsMCArMSwyOTcgQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vcGNpLmg+CisjaW5jbHVkZSA8YXNtL2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisKKyNpbmNsdWRlIDxsYW50aXFfc29jLmg+CisjaW5jbHVkZSA8bGFudGlxX2lycS5oPgorI2luY2x1ZGUgPGxhbnRpcV9wbGF0Zm9ybS5oPgorCisjaW5jbHVkZSAicGNpLWxhbnRpcS5oIgorCisjZGVmaW5lIExUUV9QQ0lfQ0ZHX0JBU0UJCTB4MTcwMDAwMDAKKyNkZWZpbmUgTFRRX1BDSV9DRkdfU0laRQkJMHgwMDAwODAwMAorI2RlZmluZSBMVFFfUENJX01FTV9CQVNFCQkweDE4MDAwMDAwCisjZGVmaW5lIExUUV9QQ0lfTUVNX1NJWkUJCTB4MDIwMDAwMDAKKyNkZWZpbmUgTFRRX1BDSV9JT19CQVNFCQkJMHgxQUUwMDAwMAorI2RlZmluZSBMVFFfUENJX0lPX1NJWkUJCQkweDAwMjAwMDAwCisKKyNkZWZpbmUgUENJX0NSX0ZDSV9BRERSX01BUDAJCTB4MDBDMAorI2RlZmluZSBQQ0lfQ1JfRkNJX0FERFJfTUFQMQkJMHgwMEM0CisjZGVmaW5lIFBDSV9DUl9GQ0lfQUREUl9NQVAyCQkweDAwQzgKKyNkZWZpbmUgUENJX0NSX0ZDSV9BRERSX01BUDMJCTB4MDBDQworI2RlZmluZSBQQ0lfQ1JfRkNJX0FERFJfTUFQNAkJMHgwMEQwCisjZGVmaW5lIFBDSV9DUl9GQ0lfQUREUl9NQVA1CQkweDAwRDQKKyNkZWZpbmUgUENJX0NSX0ZDSV9BRERSX01BUDYJCTB4MDBEOAorI2RlZmluZSBQQ0lfQ1JfRkNJX0FERFJfTUFQNwkJMHgwMERDCisjZGVmaW5lIFBDSV9DUl9DTEtfQ1RSTAkJCTB4MDAwMAorI2RlZmluZSBQQ0lfQ1JfUENJX01PRAkJCTB4MDAzMAorI2RlZmluZSBQQ0lfQ1JfUENfQVJCCQkJMHgwMDgwCisjZGVmaW5lIFBDSV9DUl9GQ0lfQUREUl9NQVAxMWhnCQkweDAwRTQKKyNkZWZpbmUgUENJX0NSX0JBUjExTUFTSwkJMHgwMDQ0CisjZGVmaW5lIFBDSV9DUl9CQVIxMk1BU0sJCTB4MDA0OAorI2RlZmluZSBQQ0lfQ1JfQkFSMTNNQVNLCQkweDAwNEMKKyNkZWZpbmUgUENJX0NTX0JBU0VfQUREUjEJCTB4MDAxMAorI2RlZmluZSBQQ0lfQ1JfUENJX0FERFJfTUFQMTEJCTB4MDA2NAorI2RlZmluZSBQQ0lfQ1JfRkNJX0JVUlNUX0xFTkdUSAkJMHgwMEU4CisjZGVmaW5lIFBDSV9DUl9QQ0lfRU9JCQkJMHgwMDJDCisjZGVmaW5lIFBDSV9DU19TVFNfQ01ECQkJMHgwMDA0CisKKyNkZWZpbmUgUENJX01BU1RFUjBfUkVRX01BU0tfMkJJVFMJOAorI2RlZmluZSBQQ0lfTUFTVEVSMV9SRVFfTUFTS18yQklUUwkxMAorI2RlZmluZSBQQ0lfTUFTVEVSMl9SRVFfTUFTS18yQklUUwkxMgorI2RlZmluZSBJTlRFUk5BTF9BUkJfRU5BQkxFX0JJVAkJMAorCisjZGVmaW5lIExUUV9DR1VfSUZDQ1IJCTB4MDAxOAorI2RlZmluZSBMVFFfQ0dVX1BDSUNSCQkweDAwMzQKKworI2RlZmluZSBsdHFfcGNpX3czMih4LCB5KQlsdHFfdzMyKCh4KSwgbHRxX3BjaV9tZW1iYXNlICsgKHkpKQorI2RlZmluZSBsdHFfcGNpX3IzMih4KQkJbHRxX3IzMihsdHFfcGNpX21lbWJhc2UgKyAoeCkpCisKKyNkZWZpbmUgbHRxX3BjaV9jZmdfdzMyKHgsIHkpCWx0cV93MzIoKHgpLCBsdHFfcGNpX21hcHBlZF9jZmcgKyAoeSkpCisjZGVmaW5lIGx0cV9wY2lfY2ZnX3IzMih4KQlsdHFfcjMyKGx0cV9wY2lfbWFwcGVkX2NmZyArICh4KSkKKworc3RydWN0IGx0cV9wY2lfZ3Bpb19tYXAgeworCWludCBwaW47CisJaW50IGFsdDA7CisJaW50IGFsdDE7CisJaW50IGRpcjsKKwljaGFyICpuYW1lOworfTsKKworLyogdGhlIHBjaSBjb3JlIGNhbiBtYWtlIHVzZSBvZiB0aGUgZm9sbG93aW5nIGdwaW9zICovCitzdGF0aWMgc3RydWN0IGx0cV9wY2lfZ3Bpb19tYXAgbHRxX3BjaV9ncGlvX21hcFtdID0geworCXsgMCwgMSwgMCwgMCwgInBjaS1leGluMCIgfSwKKwl7IDEsIDEsIDAsIDAsICJwY2ktZXhpbjEiIH0sCisJeyAyLCAxLCAwLCAwLCAicGNpLWV4aW4yIiB9LAorCXsgMzksIDEsIDAsIDAsICJwY2ktZXhpbjMiIH0sCisJeyAxMCwgMSwgMCwgMCwgInBjaS1leGluNCIgfSwKKwl7IDksIDEsIDAsIDAsICJwY2ktZXhpbjUiIH0sCisJeyAzMCwgMSwgMCwgMSwgInBjaS1nbnQxIiB9LAorCXsgMjMsIDEsIDAsIDEsICJwY2ktZ250MiIgfSwKKwl7IDE5LCAxLCAwLCAxLCAicGNpLWdudDMiIH0sCisJeyAzOCwgMSwgMCwgMSwgInBjaS1nbnQ0IiB9LAorCXsgMjksIDEsIDAsIDAsICJwY2ktcmVxMSIgfSwKKwl7IDMxLCAxLCAwLCAwLCAicGNpLXJlcTIiIH0sCisJeyAzLCAxLCAwLCAwLCAicGNpLXJlcTMiIH0sCisJeyAzNywgMSwgMCwgMCwgInBjaS1yZXE0IiB9LAorfTsKKworX19pb21lbSB2b2lkICpsdHFfcGNpX21hcHBlZF9jZmc7CitzdGF0aWMgX19pb21lbSB2b2lkICpsdHFfcGNpX21lbWJhc2U7CisKK2ludCAoKmx0cXBjaV9wbGF0X2Rldl9pbml0KShzdHJ1Y3QgcGNpX2RldiAqZGV2KSA9IE5VTEw7CisKKy8qIFNpbmNlIHRoZSBQQ0kgUkVRIHBpbnMgY2FuIGJlIHJldXNlZCBmb3Igb3RoZXIgZnVuY3Rpb25hbGl0eSwgbWFrZSBpdAorICAgcG9zc2libGUgdG8gZXhjbHVkZSB0aG9zZSBmcm9tIGludGVycHJldGF0aW9uIGJ5IHRoZSBQQ0kgY29udHJvbGxlciAqLworc3RhdGljIGludCBsdHFfcGNpX3JlcV9tYXNrID0gMHhmOworCitzdGF0aWMgaW50ICpsdHFfcGNpX2lycV9tYXA7CisKK3N0cnVjdCBwY2lfb3BzIGx0cV9wY2lfb3BzID0geworCS5yZWFkCT0gbHRxX3BjaV9yZWFkX2NvbmZpZ19kd29yZCwKKwkud3JpdGUJPSBsdHFfcGNpX3dyaXRlX2NvbmZpZ19kd29yZAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwY2lfaW9fcmVzb3VyY2UgPSB7CisJLm5hbWUJPSAicGNpIGlvIHNwYWNlIiwKKwkuc3RhcnQJPSBMVFFfUENJX0lPX0JBU0UsCisJLmVuZAk9IExUUV9QQ0lfSU9fQkFTRSArIExUUV9QQ0lfSU9fU0laRSAtIDEsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTworfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwY2lfbWVtX3Jlc291cmNlID0geworCS5uYW1lCT0gInBjaSBtZW1vcnkgc3BhY2UiLAorCS5zdGFydAk9IExUUV9QQ0lfTUVNX0JBU0UsCisJLmVuZAk9IExUUV9QQ0lfTUVNX0JBU0UgKyBMVFFfUENJX01FTV9TSVpFIC0gMSwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciBsdHFfcGNpX2NvbnRyb2xsZXIgPSB7CisJLnBjaV9vcHMJPSAmbHRxX3BjaV9vcHMsCisJLm1lbV9yZXNvdXJjZQk9ICZwY2lfbWVtX3Jlc291cmNlLAorCS5tZW1fb2Zmc2V0CT0gMHgwMDAwMDAwMFVMLAorCS5pb19yZXNvdXJjZQk9ICZwY2lfaW9fcmVzb3VyY2UsCisJLmlvX29mZnNldAk9IDB4MDAwMDAwMDBVTCwKK307CisKK2ludCBwY2liaW9zX3BsYXRfZGV2X2luaXQoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpZiAobHRxcGNpX3BsYXRfZGV2X2luaXQpCisJCXJldHVybiBsdHFwY2lfcGxhdF9kZXZfaW5pdChkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgbHRxX2NhbGNfYmFyMTFtYXNrKHZvaWQpCit7CisJdTMyIG1lbSwgYmFyMTFtYXNrOworCisJLyogQkFSMTFNQVNLIHZhbHVlIGRlcGVuZHMgb24gYXZhaWxhYmxlIG1lbW9yeSBvbiBzeXN0ZW0uICovCisJbWVtID0gbnVtX3BoeXNwYWdlcyAqIFBBR0VfU0laRTsKKwliYXIxMW1hc2sgPSAoMHgwZmZmZmZmMCAmIH4oKDEgPDwgKGZscyhtZW0pIC0gMSkpIC0gMSkpIHwgODsKKworCXJldHVybiBiYXIxMW1hc2s7Cit9CisKK3N0YXRpYyB2b2lkIGx0cV9wY2lfc2V0dXBfZ3BpbyhpbnQgZ3BpbykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsdHFfcGNpX2dwaW9fbWFwKTsgaSsrKSB7CisJCWlmIChncGlvICYgKDEgPDwgaSkpIHsKKwkJCWx0cV9ncGlvX3JlcXVlc3QobHRxX3BjaV9ncGlvX21hcFtpXS5waW4sCisJCQkJbHRxX3BjaV9ncGlvX21hcFtpXS5hbHQwLAorCQkJCWx0cV9wY2lfZ3Bpb19tYXBbaV0uYWx0MSwKKwkJCQlsdHFfcGNpX2dwaW9fbWFwW2ldLmRpciwKKwkJCQlsdHFfcGNpX2dwaW9fbWFwW2ldLm5hbWUpOworCQl9CisJfQorCWx0cV9ncGlvX3JlcXVlc3QoMjEsIDAsIDAsIDEsICJwY2ktcmVzZXQiKTsKKwlsdHFfcGNpX3JlcV9tYXNrID0gKGdwaW8gPj4gUENJX1JFUV9TSElGVCkgJiBQQ0lfUkVRX01BU0s7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGx0cV9wY2lfc3RhcnR1cChzdHJ1Y3QgbHRxX3BjaV9kYXRhICpjb25mKQoreworCXUzMiB0ZW1wX2J1ZmZlcjsKKworCS8qIHNldCBjbG9jayB0byAzM01oeiAqLworCWx0cV9jZ3VfdzMyKGx0cV9jZ3VfcjMyKExUUV9DR1VfSUZDQ1IpICYgfjB4ZjAwMDAwLCBMVFFfQ0dVX0lGQ0NSKTsKKwlsdHFfY2d1X3czMihsdHFfY2d1X3IzMihMVFFfQ0dVX0lGQ0NSKSB8IDB4ODAwMDAwLCBMVFFfQ0dVX0lGQ0NSKTsKKworCS8qIGV4dGVybmFsIG9yIGludGVybmFsIGNsb2NrID8gKi8KKwlpZiAoY29uZi0+Y2xvY2spIHsKKwkJbHRxX2NndV93MzIobHRxX2NndV9yMzIoTFRRX0NHVV9JRkNDUikgJiB+KDEgPDwgMTYpLAorCQkJTFRRX0NHVV9JRkNDUik7CisJCWx0cV9jZ3VfdzMyKCgxIDw8IDMwKSwgTFRRX0NHVV9QQ0lDUik7CisJfSBlbHNlIHsKKwkJbHRxX2NndV93MzIobHRxX2NndV9yMzIoTFRRX0NHVV9JRkNDUikgfCAoMSA8PCAxNiksCisJCQlMVFFfQ0dVX0lGQ0NSKTsKKwkJbHRxX2NndV93MzIoKDEgPDwgMzEpIHwgKDEgPDwgMzApLCBMVFFfQ0dVX1BDSUNSKTsKKwl9CisKKwkvKiBzZXR1cCBwY2kgY2xvY2sgYW5kIGdwaXMgdXNlZCBieSBwY2kgKi8KKwlsdHFfcGNpX3NldHVwX2dwaW8oY29uZi0+Z3Bpbyk7CisKKwkvKiBlbmFibGUgYXV0by1zd2l0Y2hpbmcgYmV0d2VlbiBQQ0kgYW5kIEVCVSAqLworCWx0cV9wY2lfdzMyKDB4YSwgUENJX0NSX0NMS19DVFJMKTsKKworCS8qIGJ1c3ksIGkuZS4gY29uZmlndXJhdGlvbiBpcyBub3QgZG9uZSwgUENJIGFjY2VzcyBoYXMgdG8gYmUgcmV0cmllZCAqLworCWx0cV9wY2lfdzMyKGx0cV9wY2lfcjMyKFBDSV9DUl9QQ0lfTU9EKSAmIH4oMSA8PCAyNCksIFBDSV9DUl9QQ0lfTU9EKTsKKwl3bWIoKTsKKwkvKiBCVVMgTWFzdGVyL0lPL01FTSBhY2Nlc3MgKi8KKwlsdHFfcGNpX2NmZ193MzIobHRxX3BjaV9jZmdfcjMyKFBDSV9DU19TVFNfQ01EKSB8IDcsIFBDSV9DU19TVFNfQ01EKTsKKworCS8qIGVuYWJsZSBleHRlcm5hbCAyIFBDSSBtYXN0ZXJzICovCisJdGVtcF9idWZmZXIgPSBsdHFfcGNpX3IzMihQQ0lfQ1JfUENfQVJCKTsKKwl0ZW1wX2J1ZmZlciAmPSAofihsdHFfcGNpX3JlcV9tYXNrIDw8IDE2KSk7CisJLyogZW5hYmxlIGludGVybmFsIGFyYml0ZXIgKi8KKwl0ZW1wX2J1ZmZlciB8PSAoMSA8PCBJTlRFUk5BTF9BUkJfRU5BQkxFX0JJVCk7CisJLyogZW5hYmxlIGludGVybmFsIFBDSSBtYXN0ZXIgcmVxZXN0ICovCisJdGVtcF9idWZmZXIgJj0gKH4oMyA8PCBQQ0lfTUFTVEVSMF9SRVFfTUFTS18yQklUUykpOworCisJLyogZW5hYmxlIEVCVSByZXF1ZXN0ICovCisJdGVtcF9idWZmZXIgJj0gKH4oMyA8PCBQQ0lfTUFTVEVSMV9SRVFfTUFTS18yQklUUykpOworCisJLyogZW5hYmxlIGFsbCBleHRlcm5hbCBtYXN0ZXJzIHJlcXVlc3QgKi8KKwl0ZW1wX2J1ZmZlciAmPSAofigzIDw8IFBDSV9NQVNURVIyX1JFUV9NQVNLXzJCSVRTKSk7CisJbHRxX3BjaV93MzIodGVtcF9idWZmZXIsIFBDSV9DUl9QQ19BUkIpOworCXdtYigpOworCisJLyogc2V0dXAgQkFSIG1lbW9yeSByZWdpb25zICovCisJbHRxX3BjaV93MzIoMHgxODAwMDAwMCwgUENJX0NSX0ZDSV9BRERSX01BUDApOworCWx0cV9wY2lfdzMyKDB4MTg0MDAwMDAsIFBDSV9DUl9GQ0lfQUREUl9NQVAxKTsKKwlsdHFfcGNpX3czMigweDE4ODAwMDAwLCBQQ0lfQ1JfRkNJX0FERFJfTUFQMik7CisJbHRxX3BjaV93MzIoMHgxOGMwMDAwMCwgUENJX0NSX0ZDSV9BRERSX01BUDMpOworCWx0cV9wY2lfdzMyKDB4MTkwMDAwMDAsIFBDSV9DUl9GQ0lfQUREUl9NQVA0KTsKKwlsdHFfcGNpX3czMigweDE5NDAwMDAwLCBQQ0lfQ1JfRkNJX0FERFJfTUFQNSk7CisJbHRxX3BjaV93MzIoMHgxOTgwMDAwMCwgUENJX0NSX0ZDSV9BRERSX01BUDYpOworCWx0cV9wY2lfdzMyKDB4MTljMDAwMDAsIFBDSV9DUl9GQ0lfQUREUl9NQVA3KTsKKwlsdHFfcGNpX3czMigweDFhZTAwMDAwLCBQQ0lfQ1JfRkNJX0FERFJfTUFQMTFoZyk7CisJbHRxX3BjaV93MzIobHRxX2NhbGNfYmFyMTFtYXNrKCksIFBDSV9DUl9CQVIxMU1BU0spOworCWx0cV9wY2lfdzMyKDAsIFBDSV9DUl9QQ0lfQUREUl9NQVAxMSk7CisJbHRxX3BjaV93MzIoMCwgUENJX0NTX0JBU0VfQUREUjEpOworCS8qIGJvdGggVFggYW5kIFJYIGVuZGlhbiBzd2FwIGFyZSBlbmFibGVkICovCisJbHRxX3BjaV93MzIobHRxX3BjaV9yMzIoUENJX0NSX1BDSV9FT0kpIHwgMywgUENJX0NSX1BDSV9FT0kpOworCXdtYigpOworCWx0cV9wY2lfdzMyKGx0cV9wY2lfcjMyKFBDSV9DUl9CQVIxMk1BU0spIHwgMHg4MDAwMDAwMCwKKwkJUENJX0NSX0JBUjEyTUFTSyk7CisJbHRxX3BjaV93MzIobHRxX3BjaV9yMzIoUENJX0NSX0JBUjEzTUFTSykgfCAweDgwMDAwMDAwLAorCQlQQ0lfQ1JfQkFSMTNNQVNLKTsKKwkvKnVzZSA4IGR3IGJ1cnN0IGxlbmd0aCAqLworCWx0cV9wY2lfdzMyKDB4MzAzLCBQQ0lfQ1JfRkNJX0JVUlNUX0xFTkdUSCk7CisJbHRxX3BjaV93MzIobHRxX3BjaV9yMzIoUENJX0NSX1BDSV9NT0QpIHwgKDEgPDwgMjQpLCBQQ0lfQ1JfUENJX01PRCk7CisJd21iKCk7CisKKwkvKiBzZXR1cCBpcnEgbGluZSAqLworCWx0cV9lYnVfdzMyKGx0cV9lYnVfcjMyKExUUV9FQlVfUENDX0NPTikgfCAweGMsIExUUV9FQlVfUENDX0NPTik7CisJbHRxX2VidV93MzIobHRxX2VidV9yMzIoTFRRX0VCVV9QQ0NfSUVOKSB8IDB4MTAsIExUUV9FQlVfUENDX0lFTik7CisKKwkvKiB0b2dnbGUgcmVzZXQgcGluICovCisJX19ncGlvX3NldF92YWx1ZSgyMSwgMCk7CisJd21iKCk7CisJbWRlbGF5KDEpOworCV9fZ3Bpb19zZXRfdmFsdWUoMjEsIDEpOworCXJldHVybiAwOworfQorCitpbnQgX19pbml0IHBjaWJpb3NfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCit7CisJaWYgKGx0cV9wY2lfaXJxX21hcFtzbG90XSkKKwkJcmV0dXJuIGx0cV9wY2lfaXJxX21hcFtzbG90XTsKKwlwcmludGsoS0VSTl9FUlIgImxxX3BjaTogdHJ5aW5nIHRvIG1hcCBpcnEgZm9yIHVua25vd24gc2xvdCAlZFxuIiwKKwkJc2xvdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbHRxX3BjaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBsdHFfcGNpX2RhdGEgKmx0cV9wY2lfZGF0YSA9CisJCShzdHJ1Y3QgbHRxX3BjaV9kYXRhICopIHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXBjaV9wcm9iZV9vbmx5ID0gMDsKKwlsdHFfcGNpX2lycV9tYXAgPSBsdHFfcGNpX2RhdGEtPmlycTsKKwlsdHFfcGNpX21lbWJhc2UgPSBpb3JlbWFwX25vY2FjaGUoUENJX0NSX0JBU0VfQUREUiwgUENJX0NSX1NJWkUpOworCWx0cV9wY2lfbWFwcGVkX2NmZyA9CisJCWlvcmVtYXBfbm9jYWNoZShMVFFfUENJX0NGR19CQVNFLCBMVFFfUENJX0NGR19CQVNFKTsKKwlsdHFfcGNpX2NvbnRyb2xsZXIuaW9fbWFwX2Jhc2UgPQorCQkodW5zaWduZWQgbG9uZylpb3JlbWFwKExUUV9QQ0lfSU9fQkFTRSwgTFRRX1BDSV9JT19TSVpFIC0gMSk7CisJbHRxX3BjaV9zdGFydHVwKGx0cV9wY2lfZGF0YSk7CisJcmVnaXN0ZXJfcGNpX2NvbnRyb2xsZXIoJmx0cV9wY2lfY29udHJvbGxlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIKK2x0cV9wY2lfZHJpdmVyID0geworCS5wcm9iZSA9IGx0cV9wY2lfcHJvYmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibHRxX3BjaSIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitpbnQgX19pbml0IHBjaWJpb3NfaW5pdCh2b2lkKQoreworCWludCByZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmx0cV9wY2lfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9JTkZPICJsdHFfcGNpOiBFcnJvciByZWdpc3RlcmluZyBwbGF0Zm9tIGRyaXZlciEiKTsKKwlyZXR1cm4gcmV0OworfQorCithcmNoX2luaXRjYWxsKHBjaWJpb3NfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS1sYW50aXEuaCBiL2FyY2gvbWlwcy9wY2kvcGNpLWxhbnRpcS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YmY2Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvcGNpL3BjaS1sYW50aXEuaApAQCAtMCwwICsxLDE4IEBACisvKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICovCisKKyNpZm5kZWYgX0xUUV9QQ0lfSF9fCisjZGVmaW5lIF9MVFFfUENJX0hfXworCitleHRlcm4gX19pb21lbSB2b2lkICpsdHFfcGNpX21hcHBlZF9jZmc7CitleHRlcm4gaW50IGx0cV9wY2lfcmVhZF9jb25maWdfZHdvcmQoc3RydWN0IHBjaV9idXMgKmJ1cywKKwl1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiAqdmFsKTsKK2V4dGVybiBpbnQgbHRxX3BjaV93cml0ZV9jb25maWdfZHdvcmQoc3RydWN0IHBjaV9idXMgKmJ1cywKKwl1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiB2YWwpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLXhsci5jIGIvYXJjaC9taXBzL3BjaS9wY2kteGxyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhmZWNlMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLXhsci5jCkBAIC0wLDAgKzEsMjE0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDMtMjAxMSBOZXRMb2dpYyBNaWNyb3N5c3RlbXMsIEluYy4gKE5ldExvZ2ljKS4gQWxsIHJpZ2h0cworICogcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlIE5ldExvZ2ljCisgKiBsaWNlbnNlIGJlbG93OgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBORVRMT0dJQyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgTkVUTE9HSUMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCisgKiBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOCisgKiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgPGFzbS9uZXRsb2dpYy9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxhc20vbmV0bG9naWMveGxyL2lvbWFwLmg+CisjaW5jbHVkZSA8YXNtL25ldGxvZ2ljL3hsci9waWMuaD4KKyNpbmNsdWRlIDxhc20vbmV0bG9naWMveGxyL3hsci5oPgorCitzdGF0aWMgdm9pZCAqcGNpX2NvbmZpZ19iYXNlOworCisjZGVmaW5lCXBjaV9jZmdfYWRkcihidXMsIGRldmZuLCBvZmYpICgoKGJ1cykgPDwgMTYpIHwgKChkZXZmbikgPDwgOCkgfCAob2ZmKSkKKworLyogUENJIG9wcyAqLworc3RhdGljIGlubGluZSB1MzIgcGNpX2NmZ19yZWFkXzMyYml0KHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwlpbnQgd2hlcmUpCit7CisJdTMyIGRhdGE7CisJdTMyICpjZmdhZGRyOworCisJY2ZnYWRkciA9ICh1MzIgKikocGNpX2NvbmZpZ19iYXNlICsKKwkJCXBjaV9jZmdfYWRkcihidXMtPm51bWJlciwgZGV2Zm4sIHdoZXJlICYgfjMpKTsKKwlkYXRhID0gKmNmZ2FkZHI7CisJcmV0dXJuIGNwdV90b19sZTMyKGRhdGEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2NmZ193cml0ZV8zMmJpdChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJaW50IHdoZXJlLCB1MzIgZGF0YSkKK3sKKwl1MzIgKmNmZ2FkZHI7CisKKwljZmdhZGRyID0gKHUzMiAqKShwY2lfY29uZmlnX2Jhc2UgKworCQkJcGNpX2NmZ19hZGRyKGJ1cy0+bnVtYmVyLCBkZXZmbiwgd2hlcmUgJiB+MykpOworCSpjZmdhZGRyID0gY3B1X3RvX2xlMzIoZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgbmxtX3BjaWJpb3NfcmVhZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWwpCit7CisJdTMyIGRhdGE7CisKKwlpZiAoKHNpemUgPT0gMikgJiYgKHdoZXJlICYgMSkpCisJCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7CisJZWxzZSBpZiAoKHNpemUgPT0gNCkgJiYgKHdoZXJlICYgMykpCisJCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7CisKKwlkYXRhID0gcGNpX2NmZ19yZWFkXzMyYml0KGJ1cywgZGV2Zm4sIHdoZXJlKTsKKworCWlmIChzaXplID09IDEpCisJCSp2YWwgPSAoZGF0YSA+PiAoKHdoZXJlICYgMykgPDwgMykpICYgMHhmZjsKKwllbHNlIGlmIChzaXplID09IDIpCisJCSp2YWwgPSAoZGF0YSA+PiAoKHdoZXJlICYgMykgPDwgMykpICYgMHhmZmZmOworCWVsc2UKKwkJKnZhbCA9IGRhdGE7CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCisKK3N0YXRpYyBpbnQgbmxtX3BjaWJpb3Nfd3JpdGUoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQlpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgdmFsKQoreworCXUzMiBkYXRhOworCisJaWYgKChzaXplID09IDIpICYmICh3aGVyZSAmIDEpKQorCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOworCWVsc2UgaWYgKChzaXplID09IDQpICYmICh3aGVyZSAmIDMpKQorCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOworCisJZGF0YSA9IHBjaV9jZmdfcmVhZF8zMmJpdChidXMsIGRldmZuLCB3aGVyZSk7CisKKwlpZiAoc2l6ZSA9PSAxKQorCQlkYXRhID0gKGRhdGEgJiB+KDB4ZmYgPDwgKCh3aGVyZSAmIDMpIDw8IDMpKSkgfAorCQkJKHZhbCA8PCAoKHdoZXJlICYgMykgPDwgMykpOworCWVsc2UgaWYgKHNpemUgPT0gMikKKwkJZGF0YSA9IChkYXRhICYgfigweGZmZmYgPDwgKCh3aGVyZSAmIDMpIDw8IDMpKSkgfAorCQkJKHZhbCA8PCAoKHdoZXJlICYgMykgPDwgMykpOworCWVsc2UKKwkJZGF0YSA9IHZhbDsKKworCXBjaV9jZmdfd3JpdGVfMzJiaXQoYnVzLCBkZXZmbiwgd2hlcmUsIGRhdGEpOworCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RydWN0IHBjaV9vcHMgbmxtX3BjaV9vcHMgPSB7CisJLnJlYWQgID0gbmxtX3BjaWJpb3NfcmVhZCwKKwkud3JpdGUgPSBubG1fcGNpYmlvc193cml0ZQorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBubG1fcGNpX21lbV9yZXNvdXJjZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAiWExSIFBDSSBNRU0iLAorCS5zdGFydCAgICAgICAgICA9IDB4ZDAwMDAwMDBVTCwJLyogMjU2TUIgUENJIG1lbSBAIDB4ZDAwMF8wMDAwICovCisJLmVuZCAgICAgICAgICAgID0gMHhkZmZmZmZmZlVMLAorCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBubG1fcGNpX2lvX3Jlc291cmNlID0geworCS5uYW1lICAgICAgICAgICA9ICJYTFIgSU8gTUVNIiwKKwkuc3RhcnQgICAgICAgICAgPSAweDEwMDAwMDAwVUwsCS8qIDE2TUIgUENJIElPIEAgMHgxMDAwXzAwMDAgKi8KKwkuZW5kICAgICAgICAgICAgPSAweDEwMGZmZmZmVUwsCisJLmZsYWdzICAgICAgICAgID0gSU9SRVNPVVJDRV9JTywKK307CisKK3N0cnVjdCBwY2lfY29udHJvbGxlciBubG1fcGNpX2NvbnRyb2xsZXIgPSB7CisJLmluZGV4ICAgICAgICAgID0gMCwKKwkucGNpX29wcyAgICAgICAgPSAmbmxtX3BjaV9vcHMsCisJLm1lbV9yZXNvdXJjZSAgID0gJm5sbV9wY2lfbWVtX3Jlc291cmNlLAorCS5tZW1fb2Zmc2V0ICAgICA9IDB4MDAwMDAwMDBVTCwKKwkuaW9fcmVzb3VyY2UgICAgPSAmbmxtX3BjaV9pb19yZXNvdXJjZSwKKwkuaW9fb2Zmc2V0ICAgICAgPSAweDAwMDAwMDAwVUwsCit9OworCitpbnQgX19pbml0IHBjaWJpb3NfbWFwX2lycShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCit7CisJaWYgKCFubG1fY2hpcF9pc194bHMoKSkKKwkJcmV0dXJuCVBJQ19QQ0lYX0lSUTsJLyogZm9yIFhMUiBqdXN0IG9uZSBJUlEqLworCisJLyoKKwkgKiBGb3IgWExTIFBDSWUsIHRoZXJlIGlzIGFuIElSUSBwZXIgTGluaywgZmluZCBvdXQgd2hpY2gKKwkgKiBsaW5rIHRoZSBkZXZpY2UgaXMgb24gdG8gYXNzaWduIGludGVycnVwdHMKKwkqLworCWlmIChkZXYtPmJ1cy0+c2VsZiA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaAkoZGV2LT5idXMtPnNlbGYtPmRldmZuKSB7CisJY2FzZSAweDA6CisJCXJldHVybiBQSUNfUENJRV9MSU5LMF9JUlE7CisJY2FzZSAweDg6CisJCXJldHVybiBQSUNfUENJRV9MSU5LMV9JUlE7CisJY2FzZSAweDEwOgorCQlpZiAobmxtX2NoaXBfaXNfeGxzX2IoKSkKKwkJCXJldHVybiBQSUNfUENJRV9YTFNCMF9MSU5LMl9JUlE7CisJCWVsc2UKKwkJCXJldHVybiBQSUNfUENJRV9MSU5LMl9JUlE7CisJY2FzZSAweDE4OgorCQlpZiAobmxtX2NoaXBfaXNfeGxzX2IoKSkKKwkJCXJldHVybiBQSUNfUENJRV9YTFNCMF9MSU5LM19JUlE7CisJCWVsc2UKKwkJCXJldHVybiBQSUNfUENJRV9MSU5LM19JUlE7CisJfQorCVdBUk4oMSwgIlVuZXhwZWN0ZWQgZGV2Zm4gJWRcbiIsIGRldi0+YnVzLT5zZWxmLT5kZXZmbik7CisJcmV0dXJuIDA7Cit9CisKKy8qIERvIHBsYXRmb3JtIHNwZWNpZmljIGRldmljZSBpbml0aWFsaXphdGlvbiBhdCBwY2lfZW5hYmxlX2RldmljZSgpIHRpbWUgKi8KK2ludCBwY2liaW9zX3BsYXRfZGV2X2luaXQoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgcGNpYmlvc19pbml0KHZvaWQpCit7CisJLyogUFNCIGFzc2lnbnMgUENJIHJlc291cmNlcyAqLworCXBjaV9wcm9iZV9vbmx5ID0gMTsKKwlwY2lfY29uZmlnX2Jhc2UgPSBpb3JlbWFwKERFRkFVTFRfUENJX0NPTkZJR19CQVNFLCAxNiA8PCAyMCk7CisKKwkvKiBFeHRlbmQgSU8gcG9ydCBmb3IgbWVtb3J5IG1hcHBlZCBpbyAqLworCWlvcG9ydF9yZXNvdXJjZS5zdGFydCA9ICAwOworCWlvcG9ydF9yZXNvdXJjZS5lbmQgICA9IH4wOworCisJc2V0X2lvX3BvcnRfYmFzZShDS1NFRzEpOworCW5sbV9wY2lfY29udHJvbGxlci5pb19tYXBfYmFzZSA9IENLU0VHMTsKKworCXByX2luZm8oIlJlZ2lzdGVyaW5nIFhMUi9YTFMgUENJWC9QQ0lFIENvbnRyb2xsZXIuXG4iKTsKKwlyZWdpc3Rlcl9wY2lfY29udHJvbGxlcigmbmxtX3BjaV9jb250cm9sbGVyKTsKKworCXJldHVybiAwOworfQorCithcmNoX2luaXRjYWxsKHBjaWJpb3NfaW5pdCk7CisKK3N0cnVjdCBwY2lfZml4dXAgcGNpYmlvc19maXh1cHNbXSA9IHsKKwl7MH0KK307CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9pcnFfcGVyLmMgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9pcnFfcGVyLmMKaW5kZXggZjliOWRjZC4uOThmZDAwOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BtYy1zaWVycmEvbXNwNzF4eC9tc3BfaXJxX3Blci5jCisrKyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL21zcDcxeHgvbXNwX2lycV9wZXIuYwpAQCAtOTcsNyArOTcsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1zcF9wZXJfaXJxX2NvbnRyb2xsZXIgPSB7CiAJLm5hbWUgPSAiTVNQX1BFUiIsCi0JLmlycV9lbmFibGUgPSB1bm1hc2tfcGVyX2lycS4KKwkuaXJxX2VuYWJsZSA9IHVubWFza19wZXJfaXJxLAogCS5pcnFfZGlzYWJsZSA9IG1hc2tfcGVyX2lycSwKIAkuaXJxX2FjayA9IG1zcF9wZXJfaXJxX2FjaywKICNpZmRlZiBDT05GSUdfU01QCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcG93ZXIvaGliZXJuYXRlLlMgYi9hcmNoL21pcHMvcG93ZXIvaGliZXJuYXRlLlMKaW5kZXggZGJiNWM3Yi4uZjhhNzUxYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3Bvd2VyL2hpYmVybmF0ZS5TCisrKyBiL2FyY2gvbWlwcy9wb3dlci9oaWJlcm5hdGUuUwpAQCAtMzUsNyArMzUsNyBAQAogMDoKIAlQVFJfTCB0MSwgUEJFX0FERFJFU1ModDApICAgLyogc291cmNlICovCiAJUFRSX0wgdDIsIFBCRV9PUklHX0FERFJFU1ModDApIC8qIGRlc3RpbmF0aW9uICovCi0JUFRSX0FERElVIHQzLCB0MSwgUEFHRV9TSVpFCisJUFRSX0FERFUgdDMsIHQxLCBQQUdFX1NJWkUKIDE6CiAJUkVHX0wgdDgsICh0MSkKIAlSRUdfUyB0OCwgKHQyKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3JiNTMyL2dwaW8uYyBiL2FyY2gvbWlwcy9yYjUzMi9ncGlvLmMKaW5kZXggMzdkZTA1ZC4uNmM0N2RmZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3JiNTMyL2dwaW8uYworKysgYi9hcmNoL21pcHMvcmI1MzIvZ3Bpby5jCkBAIC0xODUsNyArMTg1LDcgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgKnI7CiAKIAlyID0gcmI1MzJfZ3Bpb19yZWcwX3JlczsKLQlyYjUzMl9ncGlvX2NoaXAtPnJlZ2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0KTsKKwlyYjUzMl9ncGlvX2NoaXAtPnJlZ2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOwogCiAJaWYgKCFyYjUzMl9ncGlvX2NoaXAtPnJlZ2Jhc2UpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJyYjUzMjogY2Fubm90IHJlbWFwIEdQSU8gcmVnaXN0ZXIgMFxuIik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItcGxhdGZvcm0uYwppbmRleCBkZWRkYmYwLi42OTg5MDRkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXBsYXRmb3JtLmMKQEAgLTEzMiw3ICsxMzIsNyBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBzZ2lzZWVxX2RldmluaXQodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgdG1wOworCXVuc2lnbmVkIGludCBwYmRtYSBfX21heWJlX3VudXNlZDsKIAlpbnQgcmVzLCBpOwogCiAJZXRoMF9wZC5ocGMgPSBocGMzYzA7CkBAIC0xNTEsNyArMTUxLDcgQEAKIAogCS8qIFNlY29uZCBIUEMgaXMgbWlzc2luZz8gKi8KIAlpZiAoaXAyMl9pc19mdWxsaG91c2UoKSB8fAotCSAgICBnZXRfZGJlKHRtcCwgKHVuc2lnbmVkIGludCAqKSZocGMzYzEtPnBiZG1hWzFdKSkKKwkgICAgZ2V0X2RiZShwYmRtYSwgKHVuc2lnbmVkIGludCAqKSZocGMzYzEtPnBiZG1hWzFdKSkKIAkJcmV0dXJuIDA7CiAKIAlzZ2ltYy0+Z2lvcGFyIHw9IFNHSU1DX0dJT1BBUl9NQVNURVJFWFAxIHwgU0dJTUNfR0lPUEFSX0VYUDE2NCB8CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi10aW1lLmMgYi9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi10aW1lLmMKaW5kZXggNjAzZmM5MS4uMWE5NGM5OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItdGltZS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXRpbWUuYwpAQCAtMzIsNyArMzIsNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZG9zYW1wbGUodm9pZCkKIHsKIAl1MzIgY3QwLCBjdDE7Ci0JdTggbXNiLCBsc2I7CisJdTggbXNiOwogCiAJLyogU3RhcnQgdGhlIGNvdW50ZXIuICovCiAJc2dpbnQtPnRjd29yZCA9IChTR0lOVF9UQ1dPUkRfQ05UMiB8IFNHSU5UX1RDV09SRF9DQUxMIHwKQEAgLTQ2LDcgKzQ2LDcgQEAKIAkvKiBMYXRjaCBhbmQgc3BpbiB1bnRpbCB0b3AgYnl0ZSBvZiBjb3VudGVyMiBpcyB6ZXJvICovCiAJZG8gewogCQl3cml0ZWIoU0dJTlRfVENXT1JEX0NOVDIgfCBTR0lOVF9UQ1dPUkRfQ0xBVCwgJnNnaW50LT50Y3dvcmQpOwotCQlsc2IgPSByZWFkYigmc2dpbnQtPnRjbnQyKTsKKwkJKHZvaWQpIHJlYWRiKCZzZ2ludC0+dGNudDIpOwogCQltc2IgPSByZWFkYigmc2dpbnQtPnRjbnQyKTsKIAkJY3QxID0gcmVhZF9jMF9jb3VudCgpOwogCX0gd2hpbGUgKG1zYik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1odWJpby5jIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaHViaW8uYwppbmRleCBhMWZhNGFiLi5jZDBkNWIwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1odWJpby5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWh1YmlvLmMKQEAgLTI5LDcgKzI5LDYgQEAKIAkJCSAgdW5zaWduZWQgbG9uZyB4dGFsa19hZGRyLCBzaXplX3Qgc2l6ZSkKIHsKIAluYXNpZF90IG5hc2lkID0gQ09NUEFDVF9UT19OQVNJRF9OT0RFSUQoY25vZGUpOwotCXZvbGF0aWxlIGh1YnJlZ190IGp1bms7CiAJdW5zaWduZWQgaTsKIAogCS8qIHVzZSBzbWFsbC13aW5kb3cgbWFwcGluZyBpZiBwb3NzaWJsZSAqLwpAQCAtNjQsNyArNjMsNyBAQAogCQkgKiBhZnRlciB3ZSB3cml0ZSBpdC4KIAkJICovCiAJCUlJT19JVFRFX1BVVChuYXNpZCwgaSwgSFVCX1BJT19NQVBfVE9fTUVNLCB3aWRnZXQsIHh0YWxrX2FkZHIpOwotCQlqdW5rID0gSFVCX0woSUlPX0lUVEVfR0VUKG5hc2lkLCBpKSk7CisJCSh2b2lkKSBIVUJfTChJSU9fSVRURV9HRVQobmFzaWQsIGkpKTsKIAogCQlyZXR1cm4gTk9ERV9CV0lOX0JBU0UobmFzaWQsIHdpZGdldCkgKyAoeHRhbGtfYWRkciAlIEJXSU5fU0laRSk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjcta2xudW1hLmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1rbG51bWEuYwppbmRleCBjM2QzMGE4Li4xZDE5MTlhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1rbG51bWEuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1rbG51bWEuYwpAQCAtNTQsMTEgKzU0LDggQEAKIAogc3RhdGljIF9faW5pdCB2b2lkIHNldF9rdGV4dF9zb3VyY2UobmFzaWRfdCBjbGllbnRfbmFzaWQsIG5hc2lkX3Qgc2VydmVyX25hc2lkKQogewotCWNub2RlaWRfdCBjbGllbnRfY25vZGU7CiAJa2Vybl92YXJzX3QgKmt2cDsKIAotCWNsaWVudF9jbm9kZSA9IE5BU0lEX1RPX0NPTVBBQ1RfTk9ERUlEKGNsaWVudF9uYXNpZCk7Ci0KIAlrdnAgPSAmaHViX2RhdGEoY2xpZW50X25hc2lkKS0+a2Vybl92YXJzOwogCiAJS0VSTl9WQVJTX0FERFIoY2xpZW50X25hc2lkKSA9ICh1bnNpZ25lZCBsb25nKWt2cDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jCmluZGV4IGExNTI1MzguLmVmNzRmMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctdGltZXIuYwpAQCAtNjYsMTggKzY2LDcgQEAKIHN0YXRpYyB2b2lkIHJ0X3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAogCQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCiB7Ci0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgotCQkvKiBUaGUgb25seSBtb2RlIHN1cHBvcnRlZCAqLwotCQlicmVhazsKLQotCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6Ci0JY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6Ci0JY2FzZSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjoKLQljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKLQkJLyogTm90aGluZyB0byBkbyAgKi8KLQkJYnJlYWs7Ci0JfQorCS8qIE5vdGhpbmcgdG8gZG8gLi4uICAqLwogfQogCiBpbnQgcnRfdGltZXJfaXJxOwpAQCAtMTc0LDggKzE2Myw3IEBACiB7CiAJc3RydWN0IGNsb2Nrc291cmNlICpjcyA9ICZodWJfcnRfY2xvY2tzb3VyY2U7CiAKLQljbG9ja3NvdXJjZV9zZXRfY2xvY2soY3MsIENZQ0xFU19QRVJfU0VDKTsKLQljbG9ja3NvdXJjZV9yZWdpc3Rlcihjcyk7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooY3MsIENZQ0xFU19QRVJfU0VDKTsKIH0KIAogdm9pZCBfX2luaXQgcGxhdF90aW1lX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zbmkvdGltZS5jIGIvYXJjaC9taXBzL3NuaS90aW1lLmMKaW5kZXggYzc2MTUxYi4uMDkwNGQ0ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NuaS90aW1lLmMKKysrIGIvYXJjaC9taXBzL3NuaS90aW1lLmMKQEAgLTk1LDcgKzk1LDcgQEAKIHN0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyBkb3NhbXBsZSh2b2lkKQogewogCXUzMiBjdDAsIGN0MTsKLQl2b2xhdGlsZSB1OCBtc2IsIGxzYjsKKwl2b2xhdGlsZSB1OCBtc2I7CiAKIAkvKiBTdGFydCB0aGUgY291bnRlci4gKi8KIAlvdXRiX3AoMHgzNCwgMHg0Myk7CkBAIC0xMDgsNyArMTA4LDcgQEAKIAkvKiBMYXRjaCBhbmQgc3BpbiB1bnRpbCB0b3AgYnl0ZSBvZiBjb3VudGVyMCBpcyB6ZXJvICovCiAJZG8gewogCQlvdXRiKDB4MDAsIDB4NDMpOwotCQlsc2IgPSBpbmIoMHg0MCk7CisJCSh2b2lkKSBpbmIoMHg0MCk7CiAJCW1zYiA9IGluYigweDQwKTsKIAkJY3QxID0gcmVhZF9jMF9jb3VudCgpOwogCX0gd2hpbGUgKG1zYik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHh4OS9nZW5lcmljL3NldHVwX3R4NDkzOS5jIGIvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9zZXR1cF90eDQ5MzkuYwppbmRleCAzZGMxOWY0Li5lOWY5NWRjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHh4OS9nZW5lcmljL3NldHVwX3R4NDkzOS5jCisrKyBiL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvc2V0dXBfdHg0OTM5LmMKQEAgLTMxOCwxOSArMzE4LDE1IEBACiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19UQzM1ODE1KSB8fCBkZWZpbmVkKENPTkZJR19UQzM1ODE1X01PRFVMRSkKLXN0YXRpYyBpbnQgdHg0OTM5X2dldF9ldGhfc3BlZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyB1MzIgdHg0OTM5X2dldF9ldGhfc3BlZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZXRodG9vbF9jbWQgY21kID0geyBFVEhUT09MX0dTRVQgfTsKLQlpbnQgc3BlZWQgPSAxMDA7CS8qIGRlZmF1bHQgMTAwTWJwcyAqLwotCWludCBlcnI7Ci0JaWYgKCFkZXYtPmV0aHRvb2xfb3BzIHx8ICFkZXYtPmV0aHRvb2xfb3BzLT5nZXRfc2V0dGluZ3MpCi0JCXJldHVybiBzcGVlZDsKLQllcnIgPSBkZXYtPmV0aHRvb2xfb3BzLT5nZXRfc2V0dGluZ3MoZGV2LCAmY21kKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIHNwZWVkOwotCXNwZWVkID0gY21kLnNwZWVkID09IFNQRUVEXzEwMCA/IDEwMCA6IDEwOwotCXJldHVybiBzcGVlZDsKKwlzdHJ1Y3QgZXRodG9vbF9jbWQgY21kOworCWlmIChkZXZfZXRodG9vbF9nZXRfc2V0dGluZ3MoZGV2LCAmY21kKSkKKwkJcmV0dXJuIDEwMDsJLyogZGVmYXVsdCAxMDBNYnBzICovCisKKwlyZXR1cm4gZXRodG9vbF9jbWRfc3BlZWQoJmNtZCk7CiB9CisKIHN0YXRpYyBpbnQgdHg0OTM5X25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBldmVudCwKIAkJCSAgICAgICB2b2lkICpwdHIpCkBAIC0zNDMsOCArMzM5LDcgQEAKIAkJZWxzZSBpZiAoZGV2LT5pcnEgPT0gVFhYOV9JUlFfQkFTRSArIFRYNDkzOV9JUl9FVEgoMSkpCiAJCQliaXQgPSBUWDQ5MzlfUENGR19TUEVFRDE7CiAJCWlmIChiaXQpIHsKLQkJCWludCBzcGVlZCA9IHR4NDkzOV9nZXRfZXRoX3NwZWVkKGRldik7Ci0JCQlpZiAoc3BlZWQgPT0gMTAwKQorCQkJaWYgKHR4NDkzOV9nZXRfZXRoX3NwZWVkKGRldikgPT0gMTAwKQogCQkJCXR4eDlfc2V0NjQoJnR4NDkzOV9jY2ZncHRyLT5wY2ZnLCBiaXQpOwogCQkJZWxzZQogCQkJCXR4eDlfY2xlYXI2NCgmdHg0OTM5X2NjZmdwdHItPnBjZmcsIGJpdCk7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggZDE4MzI4Yi4uZGE2MDFkZCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCiAvKiBUaGUgdXN1YWwgY29tbWVudCBpcyAiQ2FjaGVzIGFyZW4ndCBicmFpbi1kZWFkIG9uIHRoZSA8YXJjaGl0ZWN0dXJlPiIuCiAgKiBVbmZvcnR1bmF0ZWx5LCB0aGF0IGRvZXNuJ3QgYXBwbHkgdG8gUEEtUklTQy4gKi8KQEAgLTExMiw4ICsxMTMsMTAgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogZmx1c2hfYW5vbl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2bWFkZHIpCiB7Ci0JaWYgKFBhZ2VBbm9uKHBhZ2UpKQorCWlmIChQYWdlQW5vbihwYWdlKSkgeworCQlmbHVzaF90bGJfcGFnZSh2bWEsIHZtYWRkcik7CiAJCWZsdXNoX2RjYWNoZV9wYWdlX2FzbShwYWdlX3RvX3BoeXMocGFnZSksIHZtYWRkcik7CisJfQogfQogCiAjaWZkZWYgQ09ORklHX0RFQlVHX1JPREFUQQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDVkN2I4Y2UuLjIyZGFkZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTE3Nyw3ICsxNzcsMTAgQEAKIAogI2RlZmluZSBfUEFHRV9UQUJMRQkoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQgfCBfUEFHRV9XUklURSB8ICBfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEKQogI2RlZmluZSBfUEFHRV9DSEdfTUFTSwkoUEFHRV9NQVNLIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSkKLSNkZWZpbmUgX1BBR0VfS0VSTkVMCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfRVhFQyB8IF9QQUdFX1JFQUQgfCBfUEFHRV9XUklURSB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQpCisjZGVmaW5lIF9QQUdFX0tFUk5FTF9STwkoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQgfCBfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEKQorI2RlZmluZSBfUEFHRV9LRVJORUxfRVhFQwkoX1BBR0VfS0VSTkVMX1JPIHwgX1BBR0VfRVhFQykKKyNkZWZpbmUgX1BBR0VfS0VSTkVMX1JXWAkoX1BBR0VfS0VSTkVMX0VYRUMgfCBfUEFHRV9XUklURSkKKyNkZWZpbmUgX1BBR0VfS0VSTkVMCQkoX1BBR0VfS0VSTkVMX1JPIHwgX1BBR0VfV1JJVEUpCiAKIC8qIFRoZSBwZ2QvcG1kIGNvbnRhaW5zIGEgcHRyIChpbiBwaHlzIGFkZHIgc3BhY2UpOyBzaW5jZSBhbGwgcGdkcy9wbWRzCiAgKiBhcmUgcGFnZS1hbGlnbmVkLCB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZSBQQUdFX09GRlNFVCBiaXRzLCBleGNlcHQKQEAgLTIwOCw3ICsyMTEsOSBAQAogI2RlZmluZSBQQUdFX0NPUFkgICAgICAgUEFHRV9FWEVDUkVBRAogI2RlZmluZSBQQUdFX1JXWCAgICAgICAgX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfCBfUEFHRV9SRUFEIHwgX1BBR0VfV1JJVEUgfCBfUEFHRV9FWEVDIHxfUEFHRV9BQ0NFU1NFRCkKICNkZWZpbmUgUEFHRV9LRVJORUwJX19wZ3Byb3QoX1BBR0VfS0VSTkVMKQotI2RlZmluZSBQQUdFX0tFUk5FTF9STwlfX3BncHJvdChfUEFHRV9LRVJORUwgJiB+X1BBR0VfV1JJVEUpCisjZGVmaW5lIFBBR0VfS0VSTkVMX0VYRUMJX19wZ3Byb3QoX1BBR0VfS0VSTkVMX0VYRUMpCisjZGVmaW5lIFBBR0VfS0VSTkVMX1JXWAlfX3BncHJvdChfUEFHRV9LRVJORUxfUldYKQorI2RlZmluZSBQQUdFX0tFUk5FTF9STwlfX3BncHJvdChfUEFHRV9LRVJORUxfUk8pCiAjZGVmaW5lIFBBR0VfS0VSTkVMX1VOQwlfX3BncHJvdChfUEFHRV9LRVJORUwgfCBfUEFHRV9OT19DQUNIRSkKICNkZWZpbmUgUEFHRV9HQVRFV0FZICAgIF9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9HQVRFV0FZfCBfUEFHRV9SRUFEKQogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IDNlYjgyYzIuLjljYmMyYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC04MTQsOCArODE0LDE0IEBACiAjZGVmaW5lIF9fTlJfcmVjdm1tc2cJCShfX05SX0xpbnV4ICsgMzE5KQogI2RlZmluZSBfX05SX2FjY2VwdDQJCShfX05SX0xpbnV4ICsgMzIwKQogI2RlZmluZSBfX05SX3BybGltaXQ2NAkJKF9fTlJfTGludXggKyAzMjEpCisjZGVmaW5lIF9fTlJfZmFub3RpZnlfaW5pdAkoX19OUl9MaW51eCArIDMyMikKKyNkZWZpbmUgX19OUl9mYW5vdGlmeV9tYXJrCShfX05SX0xpbnV4ICsgMzIzKQorI2RlZmluZSBfX05SX2Nsb2NrX2FkanRpbWUJKF9fTlJfTGludXggKyAzMjQpCisjZGVmaW5lIF9fTlJfbmFtZV90b19oYW5kbGVfYXQJKF9fTlJfTGludXggKyAzMjUpCisjZGVmaW5lIF9fTlJfb3Blbl9ieV9oYW5kbGVfYXQJKF9fTlJfTGludXggKyAzMjYpCisjZGVmaW5lIF9fTlJfc3luY2ZzCQkoX19OUl9MaW51eCArIDMyNykKIAotI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCShfX05SX3BybGltaXQ2NCArIDEpCisjZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJKF9fTlJfc3luY2ZzICsgMSkKIAogCiAjZGVmaW5lIF9fSUdOT1JFX3NlbGVjdAkJLyogbmV3c2VsZWN0ICovCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvY2FjaGUuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9jYWNoZS5jCmluZGV4IDNmMTEzMzEuLjgzMzM1ZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9jYWNoZS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9jYWNoZS5jCkBAIC0zMDQsMTAgKzMwNCwyMCBAQAogCQlvZmZzZXQgPSAocGdvZmYgLSBtcG50LT52bV9wZ29mZikgPDwgUEFHRV9TSElGVDsKIAkJYWRkciA9IG1wbnQtPnZtX3N0YXJ0ICsgb2Zmc2V0OwogCisJCS8qIFRoZSBUTEIgaXMgdGhlIGVuZ2luZSBvZiBjb2hlcmVuY2Ugb24gcGFyaXNjOiBUaGUKKwkJICogQ1BVIGlzIGVudGl0bGVkIHRvIHNwZWN1bGF0ZSBhbnkgcGFnZSB3aXRoIGEgVExCCisJCSAqIG1hcHBpbmcsIHNvIGhlcmUgd2Uga2lsbCB0aGUgbWFwcGluZyB0aGVuIGZsdXNoIHRoZQorCQkgKiBwYWdlIGFsb25nIGEgc3BlY2lhbCBmbHVzaCBvbmx5IGFsaWFzIG1hcHBpbmcuCisJCSAqIFRoaXMgZ3VhcmFudGVlcyB0aGF0IHRoZSBwYWdlIGlzIG5vLWxvbmdlciBpbiB0aGUKKwkJICogY2FjaGUgZm9yIGFueSBwcm9jZXNzIGFuZCBub3IgbWF5IGl0IGJlCisJCSAqIHNwZWN1bGF0aXZlbHkgcmVhZCBpbiAodW50aWwgdGhlIHVzZXIgb3Iga2VybmVsCisJCSAqIHNwZWNpZmljYWxseSBhY2Nlc3NlcyBpdCwgb2YgY291cnNlKSAqLworCisJCWZsdXNoX3RsYl9wYWdlKG1wbnQsIGFkZHIpOwogCQlpZiAob2xkX2FkZHIgPT0gMCB8fCAob2xkX2FkZHIgJiAoU0hNTEJBIC0gMSkpICE9IChhZGRyICYgKFNITUxCQSAtIDEpKSkgewogCQkJX19mbHVzaF9jYWNoZV9wYWdlKG1wbnQsIGFkZHIsIHBhZ2VfdG9fcGh5cyhwYWdlKSk7CiAJCQlpZiAob2xkX2FkZHIpCi0JCQkJcHJpbnRrKEtFUk5fRVJSICJJTkVRVUlWQUxFTlQgQUxJQVNFUyAweCVseCBhbmQgMHglbHggaW4gZmlsZSAlc1xuIiwgb2xkX2FkZHIsIGFkZHIsIG1wbnQtPnZtX2ZpbGUgPyBtcG50LT52bV9maWxlLT5mX3BhdGguZGVudHJ5LT5kX25hbWUubmFtZSA6ICIobnVsbCkiKTsKKwkJCQlwcmludGsoS0VSTl9FUlIgIklORVFVSVZBTEVOVCBBTElBU0VTIDB4JWx4IGFuZCAweCVseCBpbiBmaWxlICVzXG4iLCBvbGRfYWRkciwgYWRkciwgbXBudC0+dm1fZmlsZSA/IChjaGFyICopbXBudC0+dm1fZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUgOiAiKG51bGwpIik7CiAJCQlvbGRfYWRkciA9IGFkZHI7CiAJCX0KIAl9CkBAIC00OTksNiArNTA5LDcgQEAKIHsKIAlCVUdfT04oIXZtYS0+dm1fbW0tPmNvbnRleHQpOwogCisJZmx1c2hfdGxiX3BhZ2Uodm1hLCB2bWFkZHIpOwogCV9fZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZtYWRkciwgcGFnZV90b19waHlzKHBmbl90b19wYWdlKHBmbikpKTsKIAogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUwppbmRleCBlYWQ4ZDJhLi42ZjA1OTQ0IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUwpAQCAtNjkyLDYgKzY5Miw5IEBACiBFTkQoZmF1bHRfdmVjdG9yXzExKQogCiAjZW5kaWYKKwkvKiBGYXVsdCB2ZWN0b3IgaXMgc2VwYXJhdGVseSBwcm90ZWN0ZWQgYW5kICptdXN0KiBiZSBvbiBpdHMgb3duIHBhZ2UgKi8KKwkuYWxpZ24JCVBBR0VfU0laRQorRU5UUlkoZW5kX2ZhdWx0X3ZlY3RvcikKIAogCS5pbXBvcnQJCWhhbmRsZV9pbnRlcnJ1cHRpb24sY29kZQogCS5pbXBvcnQJCWRvX2NwdV9pcnFfbWFzayxjb2RlCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvaGVhZC5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL2hlYWQuUwppbmRleCAxNDVjNWU0Li4zN2FhYmQ3IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9oZWFkLlMKQEAgLTEwNiw4ICsxMDYsOSBAQAogI2VuZGlmCiAKIAotCS8qIE5vdyBpbml0aWFsaXplIHRoZSBQVEVzIHRoZW1zZWx2ZXMgKi8KLQlsZG8JCTArX1BBR0VfS0VSTkVMKCVyMCksJXIzIC8qIEhhcmR3aXJlZCAwIHBoeXMgYWRkciBzdGFydCAqLworCS8qIE5vdyBpbml0aWFsaXplIHRoZSBQVEVzIHRoZW1zZWx2ZXMuICBXZSB1c2UgUldYIGZvcgorCSAqIGV2ZXJ5dGhpbmcgLi4uIGl0IHdpbGwgZ2V0IHJlbWFwcGVkIGNvcnJlY3RseSBsYXRlciAqLworCWxkbwkJMCtfUEFHRV9LRVJORUxfUldYKCVyMCksJXIzIC8qIEhhcmR3aXJlZCAwIHBoeXMgYWRkciBzdGFydCAqLwogCWxkaQkJKDE8PChLRVJORUxfSU5JVElBTF9PUkRFUi1QQUdFX1NISUZUKSksJXIxMSAvKiBQRk4gY291bnQgKi8KIAlsb2FkMzIJCVBBKHBnMCksJXIxCiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYwppbmRleCA2ZTgxYmI1Li5jZWRiYmI4IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL21vZHVsZS5jCkBAIC02MSw4ICs2MSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vdW53aW5kLmg+CiAKICNpZiAwCkBAIC0yMTQsNyArMjE2LDEzIEBACiB7CiAJaWYgKHNpemUgPT0gMCkKIAkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuIHZtYWxsb2Moc2l6ZSk7CisJLyogdXNpbmcgUldYIG1lYW5zIGxlc3MgcHJvdGVjdGlvbiBmb3IgbW9kdWxlcywgYnV0IGl0J3MKKwkgKiBlYXNpZXIgdGhhbiB0cnlpbmcgdG8gbWFwIHRoZSB0ZXh0LCBkYXRhLCBpbml0X3RleHQgYW5kCisJICogaW5pdF9kYXRhIGNvcnJlY3RseSAqLworCXJldHVybiBfX3ZtYWxsb2Nfbm9kZV9yYW5nZShzaXplLCAxLCBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCwKKwkJCQkgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX0hJR0hNRU0sCisJCQkJICAgIFBBR0VfS0VSTkVMX1JXWCwgLTEsCisJCQkJICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiAKICNpZm5kZWYgQ09ORklHXzY0QklUCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvcGFjYWNoZS5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BhY2FjaGUuUwppbmRleCBhODU4MjM2Li45M2ZmM2Q5IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvcGFjYWNoZS5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wYWNhY2hlLlMKQEAgLTgxNywxMCArODE3LDcgQEAKIAkucHJvY2VuZAogRU5EUFJPQyhwdXJnZV9rZXJuZWxfZGNhY2hlX3BhZ2UpCiAKLQotCS5leHBvcnQgZmx1c2hfdXNlcl9kY2FjaGVfcmFuZ2VfYXNtCi0KLWZsdXNoX3VzZXJfZGNhY2hlX3JhbmdlX2FzbToKK0VOVFJZKGZsdXNoX3VzZXJfZGNhY2hlX3JhbmdlX2FzbSkKIAkucHJvYwogCS5jYWxsaW5mbyBOT19DQUxMUwogCS5lbnRyeQpAQCAtODM5LDYgKzgzNiw3IEBACiAJLmV4aXQKIAogCS5wcm9jZW5kCitFTkRQUk9DKGZsdXNoX3VzZXJfZGNhY2hlX3JhbmdlX2FzbSkKIAogRU5UUlkoZmx1c2hfa2VybmVsX2RjYWNoZV9yYW5nZV9hc20pCiAJLnByb2MKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjMzIuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjMzIuYwppbmRleCA4OGEwYWQxLi5kYzlhNjI0IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzX3BhcmlzYzMyLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c19wYXJpc2MzMi5jCkBAIC0yMjgsMyArMjI4LDExIEBACiAgICAgICAgIHJldHVybiBzeXNfZmFsbG9jYXRlKGZkLCBtb2RlLCAoKGxvZmZfdClvZmZoaSA8PCAzMikgfCBvZmZsbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChsb2ZmX3QpbGVuaGkgPDwgMzIpIHwgbGVubG8pOwogfQorCithc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19mYW5vdGlmeV9tYXJrKGludCBmYW5fZmQsIGludCBmbGFncywgdTMyIG1hc2tfaGksCisJCQkJCSB1MzIgbWFza19sbywgaW50IGZkLAorCQkJCQkgY29uc3QgY2hhciBfX3VzZXIgKnBhdGhuYW1lKQoreworCXJldHVybiBzeXNfZmFub3RpZnlfbWFyayhmYW5fZmQsIGZsYWdzLCAoKHU2NCltYXNrX2hpIDw8IDMyKSB8IG1hc2tfbG8sCisJCQkJIGZkLCBwYXRobmFtZSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUwppbmRleCA0YmU4NWVlLi5hNWIwMmNlIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKQEAgLTQyMCw2ICs0MjAsMTIgQEAKIAlFTlRSWV9DT01QKHJlY3ZtbXNnKQogCUVOVFJZX1NBTUUoYWNjZXB0NCkJCS8qIDMyMCAqLwogCUVOVFJZX1NBTUUocHJsaW1pdDY0KQorCUVOVFJZX1NBTUUoZmFub3RpZnlfaW5pdCkKKwlFTlRSWV9DT01QKGZhbm90aWZ5X21hcmspCisJRU5UUllfQ09NUChjbG9ja19hZGp0aW1lKQorCUVOVFJZX1NBTUUobmFtZV90b19oYW5kbGVfYXQpCS8qIDMyNSAqLworCUVOVFJZX0NPTVAob3Blbl9ieV9oYW5kbGVfYXQpCisJRU5UUllfU0FNRShzeW5jZnMpCiAKIAkvKiBOb3RoaW5nIHlldCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDhmMWU0ZWYuLmUxYTU1ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC02OSw2ICs2OSw5IEBACiAJLyogRW5kIG9mIHRleHQgc2VjdGlvbiAqLwogCV9ldGV4dCA9IC47CiAKKwkvKiBTdGFydCBvZiBkYXRhIHNlY3Rpb24gKi8KKwlfc2RhdGEgPSAuOworCiAJUk9EQVRBCiAKIAkvKiB3cml0ZWFibGUgKi8KQEAgLTEzNCw2ICsxMzcsNyBAQAogCS4gPSBBTElHTigxNjM4NCk7CiAJX19pbml0X2JlZ2luID0gLjsKIAlJTklUX1RFWFRfU0VDVElPTigxNjM4NCkKKwkuID0gQUxJR04oUEFHRV9TSVpFKTsKIAlJTklUX0RBVEFfU0VDVElPTigxNikKIAkvKiB3ZSBoYXZlIHRvIGRpc2NhcmQgZXhpdCB0ZXh0IGFuZCBzdWNoIGF0IHJ1bnRpbWUsIG5vdCBsaW5rIHRpbWUgKi8KIAkuZXhpdC50ZXh0IDoKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL21tL2luaXQuYyBiL2FyY2gvcGFyaXNjL21tL2luaXQuYwppbmRleCBiN2VkOGQ3Li41ZmExZTI3IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9tbS9pbml0LmMKKysrIGIvYXJjaC9wYXJpc2MvbW0vaW5pdC5jCkBAIC0yNjYsOCArMjY2LDEwIEBACiAJfQogCW1lbXNldChwZm5uaWRfbWFwLCAweGZmLCBzaXplb2YocGZubmlkX21hcCkpOwogCi0JZm9yIChpID0gMDsgaSA8IG5wbWVtX3JhbmdlczsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBucG1lbV9yYW5nZXM7IGkrKykgeworCQlub2RlX3NldF9zdGF0ZShpLCBOX05PUk1BTF9NRU1PUlkpOwogCQlub2RlX3NldF9vbmxpbmUoaSk7CisJfQogI2VuZGlmCiAKIAkvKgpAQCAtMzY5LDI0ICszNzEsMTU4IEBACiAJcmVxdWVzdF9yZXNvdXJjZSgmc3lzcmFtX3Jlc291cmNlc1swXSwgJnBkY2RhdGFfcmVzb3VyY2UpOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgbWFwX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfdmFkZHIsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSAgICAgcGdwcm90X3QgcGdwcm90LCBpbnQgZm9yY2UpCit7CisJcGdkX3QgKnBnX2RpcjsKKwlwbWRfdCAqcG1kOworCXB0ZV90ICpwZ190YWJsZTsKKwl1bnNpZ25lZCBsb25nIGVuZF9wYWRkcjsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X3BtZDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X3B0ZTsKKwl1bnNpZ25lZCBsb25nIHRtcDE7CisJdW5zaWduZWQgbG9uZyB0bXAyOworCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKKwl1bnNpZ25lZCBsb25nIHZhZGRyOworCXVuc2lnbmVkIGxvbmcgcm9fc3RhcnQ7CisJdW5zaWduZWQgbG9uZyByb19lbmQ7CisJdW5zaWduZWQgbG9uZyBmdl9hZGRyOworCXVuc2lnbmVkIGxvbmcgZ3dfYWRkcjsKKwlleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyBmYXVsdF92ZWN0b3JfMjA7CisJZXh0ZXJuIHZvaWQgKiBjb25zdCBsaW51eF9nYXRld2F5X3BhZ2U7CisKKwlyb19zdGFydCA9IF9fcGEoKHVuc2lnbmVkIGxvbmcpX3RleHQpOworCXJvX2VuZCAgID0gX19wYSgodW5zaWduZWQgbG9uZykmZGF0YV9zdGFydCk7CisJZnZfYWRkciAgPSBfX3BhKCh1bnNpZ25lZCBsb25nKSZmYXVsdF92ZWN0b3JfMjApICYgUEFHRV9NQVNLOworCWd3X2FkZHIgID0gX19wYSgodW5zaWduZWQgbG9uZykmbGludXhfZ2F0ZXdheV9wYWdlKSAmIFBBR0VfTUFTSzsKKworCWVuZF9wYWRkciA9IHN0YXJ0X3BhZGRyICsgc2l6ZTsKKworCXBnX2RpciA9IHBnZF9vZmZzZXRfayhzdGFydF92YWRkcik7CisKKyNpZiBQVFJTX1BFUl9QTUQgPT0gMQorCXN0YXJ0X3BtZCA9IDA7CisjZWxzZQorCXN0YXJ0X3BtZCA9ICgoc3RhcnRfdmFkZHIgPj4gUE1EX1NISUZUKSAmIChQVFJTX1BFUl9QTUQgLSAxKSk7CisjZW5kaWYKKwlzdGFydF9wdGUgPSAoKHN0YXJ0X3ZhZGRyID4+IFBBR0VfU0hJRlQpICYgKFBUUlNfUEVSX1BURSAtIDEpKTsKKworCWFkZHJlc3MgPSBzdGFydF9wYWRkcjsKKwl2YWRkciA9IHN0YXJ0X3ZhZGRyOworCXdoaWxlIChhZGRyZXNzIDwgZW5kX3BhZGRyKSB7CisjaWYgUFRSU19QRVJfUE1EID09IDEKKwkJcG1kID0gKHBtZF90ICopX19wYShwZ19kaXIpOworI2Vsc2UKKwkJcG1kID0gKHBtZF90ICopcGdkX2FkZHJlc3MoKnBnX2Rpcik7CisKKwkJLyoKKwkJICogcG1kIGlzIHBoeXNpY2FsIGF0IHRoaXMgcG9pbnQKKwkJICovCisKKwkJaWYgKCFwbWQpIHsKKwkJCXBtZCA9IChwbWRfdCAqKSBhbGxvY19ib290bWVtX2xvd19wYWdlc19ub2RlKE5PREVfREFUQSgwKSwgUEFHRV9TSVpFIDw8IFBNRF9PUkRFUik7CisJCQlwbWQgPSAocG1kX3QgKikgX19wYShwbWQpOworCQl9CisKKwkJcGdkX3BvcHVsYXRlKE5VTEwsIHBnX2RpciwgX192YShwbWQpKTsKKyNlbmRpZgorCQlwZ19kaXIrKzsKKworCQkvKiBub3cgY2hhbmdlIHBtZCB0byBrZXJuZWwgdmlydHVhbCBhZGRyZXNzZXMgKi8KKworCQlwbWQgPSAocG1kX3QgKilfX3ZhKHBtZCkgKyBzdGFydF9wbWQ7CisJCWZvciAodG1wMSA9IHN0YXJ0X3BtZDsgdG1wMSA8IFBUUlNfUEVSX1BNRDsgdG1wMSsrLCBwbWQrKykgeworCisJCQkvKgorCQkJICogcGdfdGFibGUgaXMgcGh5c2ljYWwgYXQgdGhpcyBwb2ludAorCQkJICovCisKKwkJCXBnX3RhYmxlID0gKHB0ZV90ICopcG1kX2FkZHJlc3MoKnBtZCk7CisJCQlpZiAoIXBnX3RhYmxlKSB7CisJCQkJcGdfdGFibGUgPSAocHRlX3QgKikKKwkJCQkJYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXNfbm9kZShOT0RFX0RBVEEoMCksIFBBR0VfU0laRSk7CisJCQkJcGdfdGFibGUgPSAocHRlX3QgKikgX19wYShwZ190YWJsZSk7CisJCQl9CisKKwkJCXBtZF9wb3B1bGF0ZV9rZXJuZWwoTlVMTCwgcG1kLCBfX3ZhKHBnX3RhYmxlKSk7CisKKwkJCS8qIG5vdyBjaGFuZ2UgcGdfdGFibGUgdG8ga2VybmVsIHZpcnR1YWwgYWRkcmVzc2VzICovCisKKwkJCXBnX3RhYmxlID0gKHB0ZV90ICopIF9fdmEocGdfdGFibGUpICsgc3RhcnRfcHRlOworCQkJZm9yICh0bXAyID0gc3RhcnRfcHRlOyB0bXAyIDwgUFRSU19QRVJfUFRFOyB0bXAyKyssIHBnX3RhYmxlKyspIHsKKwkJCQlwdGVfdCBwdGU7CisKKwkJCQkvKgorCQkJCSAqIE1hcCB0aGUgZmF1bHQgdmVjdG9yIHdyaXRhYmxlIHNvIHdlIGNhbgorCQkJCSAqIHdyaXRlIHRoZSBIUE1DIGNoZWNrc3VtLgorCQkJCSAqLworCQkJCWlmIChmb3JjZSkKKwkJCQkJcHRlID0gIF9fbWtfcHRlKGFkZHJlc3MsIHBncHJvdCk7CisJCQkJZWxzZSBpZiAoY29yZV9rZXJuZWxfdGV4dCh2YWRkcikgJiYKKwkJCQkJIGFkZHJlc3MgIT0gZnZfYWRkcikKKwkJCQkJcHRlID0gX19ta19wdGUoYWRkcmVzcywgUEFHRV9LRVJORUxfRVhFQyk7CisJCQkJZWxzZQorI2lmIGRlZmluZWQoQ09ORklHX1BBUklTQ19QQUdFX1NJWkVfNEtCKQorCQkJCWlmIChhZGRyZXNzID49IHJvX3N0YXJ0ICYmIGFkZHJlc3MgPCByb19lbmQKKwkJCQkJCQkmJiBhZGRyZXNzICE9IGZ2X2FkZHIKKwkJCQkJCQkmJiBhZGRyZXNzICE9IGd3X2FkZHIpCisJCQkJCXB0ZSA9IF9fbWtfcHRlKGFkZHJlc3MsIFBBR0VfS0VSTkVMX1JPKTsKKwkJCQllbHNlCisjZW5kaWYKKwkJCQkJcHRlID0gX19ta19wdGUoYWRkcmVzcywgcGdwcm90KTsKKworCQkJCWlmIChhZGRyZXNzID49IGVuZF9wYWRkcikgeworCQkJCQlpZiAoZm9yY2UpCisJCQkJCQlicmVhazsKKwkJCQkJZWxzZQorCQkJCQkJcHRlX3ZhbChwdGUpID0gMDsKKwkJCQl9CisKKwkJCQlzZXRfcHRlKHBnX3RhYmxlLCBwdGUpOworCisJCQkJYWRkcmVzcyArPSBQQUdFX1NJWkU7CisJCQkJdmFkZHIgKz0gUEFHRV9TSVpFOworCQkJfQorCQkJc3RhcnRfcHRlID0gMDsKKworCQkJaWYgKGFkZHJlc3MgPj0gZW5kX3BhZGRyKQorCQkJICAgIGJyZWFrOworCQl9CisJCXN0YXJ0X3BtZCA9IDA7CisJfQorfQorCiB2b2lkIGZyZWVfaW5pdG1lbSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAl1bnNpZ25lZCBsb25nIGluaXRfYmVnaW4gPSAodW5zaWduZWQgbG9uZylfX2luaXRfYmVnaW47CiAJdW5zaWduZWQgbG9uZyBpbml0X2VuZCA9ICh1bnNpZ25lZCBsb25nKV9faW5pdF9lbmQ7CiAKLSNpZmRlZiBDT05GSUdfREVCVUdfS0VSTkVMCisJLyogVGhlIGluaXQgdGV4dCBwYWdlcyBhcmUgbWFya2VkIFItWC4gIFdlIGhhdmUgdG8KKwkgKiBmbHVzaCB0aGUgaWNhY2hlIGFuZCBtYXJrIHRoZW0gUlctCisJICoKKwkgKiBUaGlzIGlzIHRyaWNreSwgYmVjYXVzZSBtYXBfcGFnZXMgaXMgaW4gdGhlIGluaXQgc2VjdGlvbi4KKwkgKiBEbyBhIGR1bW15IHJlbWFwIG9mIHRoZSBkYXRhIHNlY3Rpb24gZmlyc3QgKHRoZSBkYXRhCisJICogc2VjdGlvbiBpcyBhbHJlYWR5IFBBR0VfS0VSTkVMKSB0byBwdWxsIGluIHRoZSBUTEIgZW50cmllcworCSAqIGZvciBtYXBfa2VybmVsICovCisJbWFwX3BhZ2VzKGluaXRfYmVnaW4sIF9fcGEoaW5pdF9iZWdpbiksIGluaXRfZW5kIC0gaW5pdF9iZWdpbiwKKwkJICBQQUdFX0tFUk5FTF9SV1gsIDEpOworCS8qIG5vdyByZW1hcCBhdCBQQUdFX0tFUk5FTCBzaW5jZSB0aGUgVExCIGlzIHByZS1wcmltZWQgdG8gZXhlY3V0ZQorCSAqIG1hcF9wYWdlcyAqLworCW1hcF9wYWdlcyhpbml0X2JlZ2luLCBfX3BhKGluaXRfYmVnaW4pLCBpbml0X2VuZCAtIGluaXRfYmVnaW4sCisJCSAgUEFHRV9LRVJORUwsIDEpOworCisJLyogZm9yY2UgdGhlIGtlcm5lbCB0byBzZWUgdGhlIG5ldyBUTEIgZW50cmllcyAqLworCV9fZmx1c2hfdGxiX3JhbmdlKDAsIGluaXRfYmVnaW4sIGluaXRfZW5kKTsKIAkvKiBBdHRlbXB0IHRvIGNhdGNoIGFueW9uZSB0cnlpbmcgdG8gZXhlY3V0ZSBjb2RlIGhlcmUKIAkgKiBieSBmaWxsaW5nIHRoZSBwYWdlIHdpdGggQlJLIGluc25zLgogCSAqLwogCW1lbXNldCgodm9pZCAqKWluaXRfYmVnaW4sIDB4MDAsIGluaXRfZW5kIC0gaW5pdF9iZWdpbik7CisJLyogZmluYWxseSBkdW1wIGFsbCB0aGUgaW5zdHJ1Y3Rpb25zIHdoaWNoIHdlcmUgY2FjaGVkLCBzaW5jZSB0aGUKKwkgKiBwYWdlcyBhcmUgbm8tbG9uZ2VyIGV4ZWN1dGFibGUgKi8KIAlmbHVzaF9pY2FjaGVfcmFuZ2UoaW5pdF9iZWdpbiwgaW5pdF9lbmQpOwotI2VuZGlmCiAJCi0JLyogYWxpZ24gX19pbml0X2JlZ2luIGFuZCBfX2luaXRfZW5kIHRvIHBhZ2Ugc2l6ZSwKLQkgICBpZ25vcmluZyBsaW5rZXIgc2NyaXB0IHdoZXJlIHdlIG1pZ2h0IGhhdmUgdHJpZWQgdG8gc2F2ZSBSQU0gKi8KLQlpbml0X2JlZ2luID0gUEFHRV9BTElHTihpbml0X2JlZ2luKTsKLQlpbml0X2VuZCA9IFBBR0VfQUxJR04oaW5pdF9lbmQpOwogCWZvciAoYWRkciA9IGluaXRfYmVnaW47IGFkZHIgPCBpbml0X2VuZDsgYWRkciArPSBQQUdFX1NJWkUpIHsKIAkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKGFkZHIpKTsKIAkJaW5pdF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShhZGRyKSk7CkBAIC02MTYsMTE0ICs3NTIsNiBAQAogI2VuZGlmCiB9CiAKLQotc3RhdGljIHZvaWQgX19pbml0IG1hcF9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3ZhZGRyLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHBncHJvdCkKLXsKLQlwZ2RfdCAqcGdfZGlyOwotCXBtZF90ICpwbWQ7Ci0JcHRlX3QgKnBnX3RhYmxlOwotCXVuc2lnbmVkIGxvbmcgZW5kX3BhZGRyOwotCXVuc2lnbmVkIGxvbmcgc3RhcnRfcG1kOwotCXVuc2lnbmVkIGxvbmcgc3RhcnRfcHRlOwotCXVuc2lnbmVkIGxvbmcgdG1wMTsKLQl1bnNpZ25lZCBsb25nIHRtcDI7Ci0JdW5zaWduZWQgbG9uZyBhZGRyZXNzOwotCXVuc2lnbmVkIGxvbmcgcm9fc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyByb19lbmQ7Ci0JdW5zaWduZWQgbG9uZyBmdl9hZGRyOwotCXVuc2lnbmVkIGxvbmcgZ3dfYWRkcjsKLQlleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyBmYXVsdF92ZWN0b3JfMjA7Ci0JZXh0ZXJuIHZvaWQgKiBjb25zdCBsaW51eF9nYXRld2F5X3BhZ2U7Ci0KLQlyb19zdGFydCA9IF9fcGEoKHVuc2lnbmVkIGxvbmcpX3RleHQpOwotCXJvX2VuZCAgID0gX19wYSgodW5zaWduZWQgbG9uZykmZGF0YV9zdGFydCk7Ci0JZnZfYWRkciAgPSBfX3BhKCh1bnNpZ25lZCBsb25nKSZmYXVsdF92ZWN0b3JfMjApICYgUEFHRV9NQVNLOwotCWd3X2FkZHIgID0gX19wYSgodW5zaWduZWQgbG9uZykmbGludXhfZ2F0ZXdheV9wYWdlKSAmIFBBR0VfTUFTSzsKLQotCWVuZF9wYWRkciA9IHN0YXJ0X3BhZGRyICsgc2l6ZTsKLQotCXBnX2RpciA9IHBnZF9vZmZzZXRfayhzdGFydF92YWRkcik7Ci0KLSNpZiBQVFJTX1BFUl9QTUQgPT0gMQotCXN0YXJ0X3BtZCA9IDA7Ci0jZWxzZQotCXN0YXJ0X3BtZCA9ICgoc3RhcnRfdmFkZHIgPj4gUE1EX1NISUZUKSAmIChQVFJTX1BFUl9QTUQgLSAxKSk7Ci0jZW5kaWYKLQlzdGFydF9wdGUgPSAoKHN0YXJ0X3ZhZGRyID4+IFBBR0VfU0hJRlQpICYgKFBUUlNfUEVSX1BURSAtIDEpKTsKLQotCWFkZHJlc3MgPSBzdGFydF9wYWRkcjsKLQl3aGlsZSAoYWRkcmVzcyA8IGVuZF9wYWRkcikgewotI2lmIFBUUlNfUEVSX1BNRCA9PSAxCi0JCXBtZCA9IChwbWRfdCAqKV9fcGEocGdfZGlyKTsKLSNlbHNlCi0JCXBtZCA9IChwbWRfdCAqKXBnZF9hZGRyZXNzKCpwZ19kaXIpOwotCi0JCS8qCi0JCSAqIHBtZCBpcyBwaHlzaWNhbCBhdCB0aGlzIHBvaW50Ci0JCSAqLwotCi0JCWlmICghcG1kKSB7Ci0JCQlwbWQgPSAocG1kX3QgKikgYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXNfbm9kZShOT0RFX0RBVEEoMCksUEFHRV9TSVpFIDw8IFBNRF9PUkRFUik7Ci0JCQlwbWQgPSAocG1kX3QgKikgX19wYShwbWQpOwotCQl9Ci0KLQkJcGdkX3BvcHVsYXRlKE5VTEwsIHBnX2RpciwgX192YShwbWQpKTsKLSNlbmRpZgotCQlwZ19kaXIrKzsKLQotCQkvKiBub3cgY2hhbmdlIHBtZCB0byBrZXJuZWwgdmlydHVhbCBhZGRyZXNzZXMgKi8KLQotCQlwbWQgPSAocG1kX3QgKilfX3ZhKHBtZCkgKyBzdGFydF9wbWQ7Ci0JCWZvciAodG1wMSA9IHN0YXJ0X3BtZDsgdG1wMSA8IFBUUlNfUEVSX1BNRDsgdG1wMSsrLHBtZCsrKSB7Ci0KLQkJCS8qCi0JCQkgKiBwZ190YWJsZSBpcyBwaHlzaWNhbCBhdCB0aGlzIHBvaW50Ci0JCQkgKi8KLQotCQkJcGdfdGFibGUgPSAocHRlX3QgKilwbWRfYWRkcmVzcygqcG1kKTsKLQkJCWlmICghcGdfdGFibGUpIHsKLQkJCQlwZ190YWJsZSA9IChwdGVfdCAqKQotCQkJCQlhbGxvY19ib290bWVtX2xvd19wYWdlc19ub2RlKE5PREVfREFUQSgwKSxQQUdFX1NJWkUpOwotCQkJCXBnX3RhYmxlID0gKHB0ZV90ICopIF9fcGEocGdfdGFibGUpOwotCQkJfQotCi0JCQlwbWRfcG9wdWxhdGVfa2VybmVsKE5VTEwsIHBtZCwgX192YShwZ190YWJsZSkpOwotCi0JCQkvKiBub3cgY2hhbmdlIHBnX3RhYmxlIHRvIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3NlcyAqLwotCi0JCQlwZ190YWJsZSA9IChwdGVfdCAqKSBfX3ZhKHBnX3RhYmxlKSArIHN0YXJ0X3B0ZTsKLQkJCWZvciAodG1wMiA9IHN0YXJ0X3B0ZTsgdG1wMiA8IFBUUlNfUEVSX1BURTsgdG1wMisrLHBnX3RhYmxlKyspIHsKLQkJCQlwdGVfdCBwdGU7Ci0KLQkJCQkvKgotCQkJCSAqIE1hcCB0aGUgZmF1bHQgdmVjdG9yIHdyaXRhYmxlIHNvIHdlIGNhbgotCQkJCSAqIHdyaXRlIHRoZSBIUE1DIGNoZWNrc3VtLgotCQkJCSAqLwotI2lmIGRlZmluZWQoQ09ORklHX1BBUklTQ19QQUdFX1NJWkVfNEtCKQotCQkJCWlmIChhZGRyZXNzID49IHJvX3N0YXJ0ICYmIGFkZHJlc3MgPCByb19lbmQKLQkJCQkJCQkmJiBhZGRyZXNzICE9IGZ2X2FkZHIKLQkJCQkJCQkmJiBhZGRyZXNzICE9IGd3X2FkZHIpCi0JCQkJICAgIHB0ZSA9IF9fbWtfcHRlKGFkZHJlc3MsIFBBR0VfS0VSTkVMX1JPKTsKLQkJCQllbHNlCi0jZW5kaWYKLQkJCQkgICAgcHRlID0gX19ta19wdGUoYWRkcmVzcywgcGdwcm90KTsKLQotCQkJCWlmIChhZGRyZXNzID49IGVuZF9wYWRkcikKLQkJCQkJcHRlX3ZhbChwdGUpID0gMDsKLQotCQkJCXNldF9wdGUocGdfdGFibGUsIHB0ZSk7Ci0KLQkJCQlhZGRyZXNzICs9IFBBR0VfU0laRTsKLQkJCX0KLQkJCXN0YXJ0X3B0ZSA9IDA7Ci0KLQkJCWlmIChhZGRyZXNzID49IGVuZF9wYWRkcikKLQkJCSAgICBicmVhazsKLQkJfQotCQlzdGFydF9wbWQgPSAwOwotCX0KLX0KLQogLyoKICAqIHBhZ2V0YWJsZV9pbml0KCkgc2V0cyB1cCB0aGUgcGFnZSB0YWJsZXMKICAqCkBAIC03NDgsMTQgKzc3NiwxNCBAQAogCQlzaXplID0gcG1lbV9yYW5nZXNbcmFuZ2VdLnBhZ2VzIDw8IFBBR0VfU0hJRlQ7CiAKIAkJbWFwX3BhZ2VzKCh1bnNpZ25lZCBsb25nKV9fdmEoc3RhcnRfcGFkZHIpLCBzdGFydF9wYWRkciwKLQkJCXNpemUsIFBBR0VfS0VSTkVMKTsKKwkJCSAgc2l6ZSwgUEFHRV9LRVJORUwsIDApOwogCX0KIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAogCWlmIChpbml0cmRfZW5kICYmIGluaXRyZF9lbmQgPiBtZW1fbGltaXQpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiaW5pdHJkOiBtYXBwaW5nICUwOGx4LSUwOGx4XG4iLCBpbml0cmRfc3RhcnQsIGluaXRyZF9lbmQpOwogCQltYXBfcGFnZXMoaW5pdHJkX3N0YXJ0LCBfX3BhKGluaXRyZF9zdGFydCksCi0JCQlpbml0cmRfZW5kIC0gaW5pdHJkX3N0YXJ0LCBQQUdFX0tFUk5FTCk7CisJCQkgIGluaXRyZF9lbmQgLSBpbml0cmRfc3RhcnQsIFBBR0VfS0VSTkVMLCAwKTsKIAl9CiAjZW5kaWYKIApAQCAtNzgwLDcgKzgwOCw3IEBACiAJICovCiAKIAltYXBfcGFnZXMobGludXhfZ2F0ZXdheV9wYWdlX2FkZHIsIF9fcGEoJmxpbnV4X2dhdGV3YXlfcGFnZSksCi0JCVBBR0VfU0laRSwgUEFHRV9HQVRFV0FZKTsKKwkJICBQQUdFX1NJWkUsIFBBR0VfR0FURVdBWSwgMSk7CiB9CiAKICNpZmRlZiBDT05GSUdfSFBVWApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwppbmRleCA4ZjRkNTBiLi5hMzEyOGNhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwpAQCAtMTkzLDYgKzE5MywxMiBAQAogCWRlZmF1bHQgeSBpZiBQTUFDX0FQTV9FTVUKIAlib29sCiAKK2NvbmZpZyBFUEFQUl9CT09UCisJYm9vbAorCWhlbHAKKwkgIFVzZWQgdG8gYWxsb3cgYSBib2FyZCB0byBzcGVjaWZ5IGl0IHdhbnRzIGFuIGVQQVBSIGNvbXBsaWFudCB3cmFwcGVyLgorCWRlZmF1bHQgbgorCiBjb25maWcgREVGQVVMVF9VSU1BR0UKIAlib29sCiAJaGVscApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcuZGVidWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZy5kZWJ1ZwppbmRleCAyZDM4YTUwLi5hNTk3ZGQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZy5kZWJ1ZwpAQCAtMjY3LDYgKzI2NywxMSBAQAogCSAgU2VsZWN0IHRoaXMgdG8gZW5hYmxlIGVhcmx5IGRlYnVnZ2luZyBmb3IgTmludGVuZG8gR2FtZUN1YmUvV2lpCiAJICBjb25zb2xlcyB2aWEgYW4gZXh0ZXJuYWwgVVNCIEdlY2tvIGFkYXB0ZXIuCiAKK2NvbmZpZyBQUENfRUFSTFlfREVCVUdfV1NQCisJYm9vbCAiRWFybHkgZGVidWdnaW5nIHZpYSBXU1AncyBpbnRlcm5hbCBVQVJUIgorCWRlcGVuZHMgb24gUFBDX1dTUAorCXNlbGVjdCBQUENfVURCR18xNjU1MAorCiBlbmRjaG9pY2UKIAogY29uZmlnIFBQQ19FQVJMWV9ERUJVR180NHhfUEhZU0xPVwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvYm9vdC9NYWtlZmlsZQppbmRleCA4OTE3ODE2Li5jMjYyMDBiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9NYWtlZmlsZQpAQCAtNjksNyArNjksOCBAQAogCQljcG0tc2VyaWFsLmMgc3RkbGliLmMgbXBjNTJ4eC1wc2MuYyBwbGFuZXRjb3JlLmMgdWFydGxpdGUuYyBcCiAJCWZzbC1zb2MuYyBtcGM4eHguYyBwcTIuYyB1Z2Vjb24uYwogc3JjLXBsYXQgOj0gb2YuYyBjdWJvb3QtNTJ4eC5jIGN1Ym9vdC04MjR4LmMgY3Vib290LTgzeHguYyBjdWJvb3QtODV4eC5jIGhvbGx5LmMgXAotCQljdWJvb3QtZWJvbnkuYyBjdWJvb3QtaG90Zm9vdC5jIHRyZWVib290LWVib255LmMgcHJwbWMyODAwLmMgXAorCQljdWJvb3QtZWJvbnkuYyBjdWJvb3QtaG90Zm9vdC5jIGVwYXByLmMgdHJlZWJvb3QtZWJvbnkuYyBcCisJCXBycG1jMjgwMC5jIFwKIAkJcHMzLWhlYWQuUyBwczMtaHZjYWxsLlMgcHMzLmMgdHJlZWJvb3QtYmFtYm9vLmMgY3Vib290LTh4eC5jIFwKIAkJY3Vib290LXBxMi5jIGN1Ym9vdC1zZXF1b2lhLmMgdHJlZWJvb3Qtd2FsbnV0LmMgXAogCQljdWJvb3QtYmFtYm9vLmMgY3Vib290LW1wYzc0NDhocGMyLmMgY3Vib290LXRhaXNoYW4uYyBcCkBAIC0xMjcsNyArMTI4LDcgQEAKICAgICAgIGNtZF9ib290YXMgPSAkKENST1NTMzJDQykgLVdwLC1NRCwkKGRlcGZpbGUpICQoQk9PVEFGTEFHUykgLWMgLW8gJEAgJDwKIAogcXVpZXRfY21kX2Jvb3RhciA9IEJPT1RBUiAgJEAKLSAgICAgIGNtZF9ib290YXIgPSAkKENST1NTMzJBUikgLWNyICRALiQkJCQgJChmaWx0ZXItb3V0IEZPUkNFLCReKTsgbXYgJEAuJCQkJCAkQAorICAgICAgY21kX2Jvb3RhciA9ICQoQ1JPU1MzMkFSKSAtY3IkKEtCVUlMRF9BUkZMQUdTKSAkQC4kJCQkICQoZmlsdGVyLW91dCBGT1JDRSwkXik7IG12ICRALiQkJCQgJEAKIAogJChvYmotbGliZmR0KTogJChvYmopLyUubzogJChzcmN0cmVlKS9zY3JpcHRzL2R0Yy9saWJmZHQvJS5jIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWRfZGVwLGJvb3RjYykKQEAgLTE4Miw2ICsxODMsNyBAQAogaW1hZ2UtJChDT05GSUdfUFBDX1BSUE1DMjgwMCkJCSs9IGR0YkltYWdlLnBycG1jMjgwMAogaW1hZ2UtJChDT05GSUdfUFBDX0lTRVJJRVMpCQkrPSB6SW1hZ2UuaXNlcmllcwogaW1hZ2UtJChDT05GSUdfREVGQVVMVF9VSU1BR0UpCQkrPSB1SW1hZ2UKK2ltYWdlLSQoQ09ORklHX0VQQVBSX0JPT1QpCQkrPSB6SW1hZ2UuZXBhcHIKIAogIwogIyBUYXJnZXRzIHdoaWNoIGVtYmVkIGEgZGV2aWNlIHRyZWUgYmxvYgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvY3J0MC5TIGIvYXJjaC9wb3dlcnBjL2Jvb3QvY3J0MC5TCmluZGV4IGYxYzRkZmMuLjBmNzQyOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2NydDAuUworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9jcnQwLlMKQEAgLTYsMTYgKzYsMjggQEAKICAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCi0gKiBOT1RFOiB0aGlzIGNvZGUgcnVucyBpbiAzMiBiaXQgbW9kZSBhbmQgaXMgcGFja2FnZWQgYXMgRUxGMzIuCisgKiBOT1RFOiB0aGlzIGNvZGUgcnVucyBpbiAzMiBiaXQgbW9kZSwgaXMgcG9zaXRpb24taW5kZXBlbmRlbnQsCisgKiBhbmQgaXMgcGFja2FnZWQgYXMgRUxGMzIuCiAgKi8KIAogI2luY2x1ZGUgInBwY19hc20uaCIKIAogCS50ZXh0Ci0JLyogYSBwcm9jZWR1cmUgZGVzY3JpcHRvciB1c2VkIHdoZW4gYm9vdGluZyB0aGlzIGFzIGEgQ09GRiBmaWxlICovCisJLyogQSBwcm9jZWR1cmUgZGVzY3JpcHRvciB1c2VkIHdoZW4gYm9vdGluZyB0aGlzIGFzIGEgQ09GRiBmaWxlLgorCSAqIFdoZW4gbWFraW5nIENPRkYsIHRoaXMgY29tZXMgZmlyc3QgaW4gdGhlIGxpbmsgYW5kIHdlJ3JlCisJICogbGlua2VkIGF0IDB4NTAwMDAwLgorCSAqLwogCS5nbG9ibAlfemltYWdlX3N0YXJ0X29wZAogX3ppbWFnZV9zdGFydF9vcGQ6Ci0JLmxvbmcJX3ppbWFnZV9zdGFydCwgMCwgMCwgMAorCS5sb25nCTB4NTAwMDAwLCAwLCAwLCAwCisKK3Bfc3RhcnQ6CS5sb25nCV9zdGFydAorcF9ldGV4dDoJLmxvbmcJX2V0ZXh0CitwX2Jzc19zdGFydDoJLmxvbmcJX19ic3Nfc3RhcnQKK3BfZW5kOgkJLmxvbmcJX2VuZAorCisJLndlYWsJX3BsYXRmb3JtX3N0YWNrX3RvcAorcF9wc3RhY2s6CS5sb25nCV9wbGF0Zm9ybV9zdGFja190b3AKIAogCS53ZWFrCV96aW1hZ2Vfc3RhcnQKIAkuZ2xvYmwJX3ppbWFnZV9zdGFydApAQCAtMjQsMzcgKzM2LDY1IEBACiBfemltYWdlX3N0YXJ0X2xpYjoKIAkvKiBXb3JrIG91dCB0aGUgb2Zmc2V0IGJldHdlZW4gdGhlIGFkZHJlc3Mgd2Ugd2VyZSBsaW5rZWQgYXQKIAkgICBhbmQgdGhlIGFkZHJlc3Mgd2hlcmUgd2UncmUgcnVubmluZy4gKi8KLQlibAkxZgotMToJbWZscglyMAotCWxpcwlyOSwxYkBoYQotCWFkZGkJcjkscjksMWJAbAotCXN1YmYuCXIwLHI5LHIwCi0JYmVxCTNmCQkvKiBpZiBydW5uaW5nIGF0IHNhbWUgYWRkcmVzcyBhcyBsaW5rZWQgKi8KKwlibAkuKzQKK3BfYmFzZToJbWZscglyMTAJCS8qIHIxMCBub3cgcG9pbnRzIHRvIHJ1bnRpbWUgYWRkciBvZiBwX2Jhc2UgKi8KKwkvKiBncmFiIHRoZSBsaW5rIGFkZHJlc3Mgb2YgdGhlIGR5bmFtaWMgc2VjdGlvbiBpbiByMTEgKi8KKwlhZGRpcwlyMTEscjEwLChfR0xPQkFMX09GRlNFVF9UQUJMRV8tcF9iYXNlKUBoYQorCWx3eglyMTEsKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXy1wX2Jhc2UpQGwocjExKQorCWNtcHdpCXIxMSwwCisJYmVxCTNmCQkvKiBpZiBub3QgbGlua2VkIC1waWUgKi8KKwkvKiBnZXQgdGhlIHJ1bnRpbWUgYWRkcmVzcyBvZiB0aGUgZHluYW1pYyBzZWN0aW9uIGluIHIxMiAqLworCS53ZWFrCV9fZHluYW1pY19zdGFydAorCWFkZGlzCXIxMixyMTAsKF9fZHluYW1pY19zdGFydC1wX2Jhc2UpQGhhCisJYWRkaQlyMTIscjEyLChfX2R5bmFtaWNfc3RhcnQtcF9iYXNlKUBsCisJc3ViZglyMTEscjExLHIxMgkvKiBydW50aW1lIC0gbGlua3RpbWUgb2Zmc2V0ICovCiAKLQkvKiBUaGUgLmdvdDIgc2VjdGlvbiBjb250YWlucyBhIGxpc3Qgb2YgYWRkcmVzc2VzLCBzbyBhZGQKLQkgICB0aGUgYWRkcmVzcyBvZmZzZXQgb250byBlYWNoIGVudHJ5LiAqLwotCWxpcwlyOSxfX2dvdDJfc3RhcnRAaGEKLQlhZGRpCXI5LHI5LF9fZ290Ml9zdGFydEBsCi0JbGlzCXI4LF9fZ290Ml9lbmRAaGEKLQlhZGRpCXI4LHI4LF9fZ290Ml9lbmRAbAotCXN1YmYuCXI4LHI5LHI4CisJLyogVGhlIGR5bmFtaWMgc2VjdGlvbiBjb250YWlucyBhIHNlcmllcyBvZiB0YWdnZWQgZW50cmllcy4KKwkgKiBXZSBuZWVkIHRoZSBSRUxBIGFuZCBSRUxBQ09VTlQgZW50cmllcy4gKi8KK1JFTEEgPSA3CitSRUxBQ09VTlQgPSAweDZmZmZmZmY5CisJbGkJcjksMAorCWxpCXIwLDAKKzk6CWx3eglyOCwwKHIxMikJLyogZ2V0IHRhZyAqLworCWNtcHdpCXI4LDAKKwliZXEJMTBmCQkvKiBlbmQgb2YgbGlzdCAqLworCWNtcHdpCXI4LFJFTEEKKwlibmUJMTFmCisJbHd6CXI5LDQocjEyKQkvKiBnZXQgUkVMQSBwb2ludGVyIGluIHI5ICovCisJYgkxMmYKKzExOglhZGRpcwlyOCxyOCwoLVJFTEFDT1VOVClAaGEKKwljbXB3aQlyOCxSRUxBQ09VTlRAbAorCWJuZQkxMmYKKwlsd3oJcjAsNChyMTIpCS8qIGdldCBSRUxBQ09VTlQgdmFsdWUgaW4gcjAgKi8KKzEyOglhZGRpCXIxMixyMTIsOAorCWIJOWIKKworCS8qIFRoZSByZWxvY2F0aW9uIHNlY3Rpb24gY29udGFpbnMgYSBsaXN0IG9mIHJlbG9jYXRpb25zLgorCSAqIFdlIG5vdyBkbyB0aGUgUl9QUENfUkVMQVRJVkUgb25lcywgd2hpY2ggcG9pbnQgdG8gd29yZHMKKwkgKiB3aGljaCBuZWVkIHRvIGJlIGluaXRpYWxpemVkIHdpdGggYWRkZW5kICsgb2Zmc2V0LgorCSAqIFRoZSBSX1BQQ19SRUxBVElWRSBvbmVzIGNvbWUgZmlyc3QgYW5kIHRoZXJlIGFyZSBSRUxBQ09VTlQKKwkgKiBvZiB0aGVtLiAqLworMTA6CS8qIHNraXAgcmVsb2NhdGlvbiBpZiB3ZSBkb24ndCBoYXZlIGJvdGggKi8KKwljbXB3aQlyMCwwCiAJYmVxCTNmCi0Jc3J3aS4JcjgscjgsMgotCW10Y3RyCXI4Ci0JYWRkCXI5LHIwLHI5Ci0yOglsd3oJcjgsMChyOSkKLQlhZGQJcjgscjgscjAKLQlzdHcJcjgsMChyOSkKLQlhZGRpCXI5LHI5LDQKKwljbXB3aQlyOSwwCisJYmVxCTNmCisKKwlhZGQJcjkscjkscjExCS8qIFJlbG9jYXRlIFJFTEEgcG9pbnRlciAqLworCW10Y3RyCXIwCisyOglsYnoJcjAsNCszKHI5KQkvKiBFTEYzMl9SX0lORk8ocmVsb2MtPnJfaW5mbykgKi8KKwljbXB3aQlyMCwyMgkJLyogUl9QUENfUkVMQVRJVkUgKi8KKwlibmUJM2YKKwlsd3oJcjEyLDAocjkpCS8qIHJlbG9jLT5yX29mZnNldCAqLworCWx3eglyMCw4KHI5KQkvKiByZWxvYy0+cl9hZGRlbmQgKi8KKwlhZGQJcjAscjAscjExCisJc3R3eAlyMCxyMTEscjEyCisJYWRkaQlyOSxyOSwxMgogCWJkbnoJMmIKIAogCS8qIERvIGEgY2FjaGUgZmx1c2ggZm9yIG91ciB0ZXh0LCBpbiBjYXNlIHRoZSBsb2FkZXIgZGlkbid0ICovCi0zOglsaXMJcjksX3N0YXJ0QGhhCi0JYWRkaQlyOSxyOSxfc3RhcnRAbAotCWFkZAlyOSxyMCxyOQotCWxpcwlyOCxfZXRleHRAaGEKLQlhZGRpCXI4LHI4LF9ldGV4dEBsCi0JYWRkCXI4LHIwLHI4CiszOglsd3oJcjkscF9zdGFydC1wX2Jhc2UocjEwKQkvKiBub3RlOiB0aGVzZSBhcmUgcmVsb2NhdGVkIG5vdyAqLworCWx3eglyOCxwX2V0ZXh0LXBfYmFzZShyMTApCiA0OglkY2JmCXIwLHI5CiAJaWNiaQlyMCxyOQogCWFkZGkJcjkscjksMHgyMApAQCAtNjQsMjcgKzEwNCwxOSBAQAogCWlzeW5jCiAKIAkvKiBDbGVhciB0aGUgQlNTICovCi0JbGlzCXI5LF9fYnNzX3N0YXJ0QGhhCi0JYWRkaQlyOSxyOSxfX2Jzc19zdGFydEBsCi0JYWRkCXI5LHIwLHI5Ci0JbGlzCXI4LF9lbmRAaGEKLQlhZGRpCXI4LHI4LF9lbmRAbAotCWFkZAlyOCxyMCxyOAotCWxpCXIxMCwwCi01OglzdHcJcjEwLDAocjkpCisJbHd6CXI5LHBfYnNzX3N0YXJ0LXBfYmFzZShyMTApCisJbHd6CXI4LHBfZW5kLXBfYmFzZShyMTApCisJbGkJcjAsMAorNToJc3R3CXIwLDAocjkpCiAJYWRkaQlyOSxyOSw0CiAJY21wbHcJY3IwLHI5LHI4CiAJYmx0CTViCiAKIAkvKiBQb3NzaWJseSBzZXQgdXAgYSBjdXN0b20gc3RhY2sgKi8KLS53ZWFrCV9wbGF0Zm9ybV9zdGFja190b3AKLQlsaXMJcjgsX3BsYXRmb3JtX3N0YWNrX3RvcEBoYQotCWFkZGkJcjgscjgsX3BsYXRmb3JtX3N0YWNrX3RvcEBsCisJbHd6CXI4LHBfcHN0YWNrLXBfYmFzZShyMTApCiAJY21wd2kJcjgsMAogCWJlcQk2ZgotCWFkZAlyOCxyMCxyOAogCWx3eglyMSwwKHI4KQotCWFkZAlyMSxyMCxyMQogCWxpCXIwLDAKIAlzdHd1CXIwLC0xNihyMSkJLyogZXN0YWJsaXNoIGEgc3RhY2sgZnJhbWUgKi8KIDY6CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDEwMjByZGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AxMDIwcmRiLmR0cwppbmRleCBlMDY2OGY4Li5kNmE4YWU0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDEwMjByZGIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMTAyMHJkYi5kdHMKQEAgLTksMTIgKzksMTEgQEAKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotL2R0cy12MS87CisvaW5jbHVkZS8gInAxMDIwc2kuZHRzaSIKKwogLyB7Ci0JbW9kZWwgPSAiZnNsLFAxMDIwIjsKKwltb2RlbCA9ICJmc2wsUDEwMjBSREIiOwogCWNvbXBhdGlibGUgPSAiZnNsLFAxMDIwUkRCIjsKLQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKLQkjc2l6ZS1jZWxscyA9IDwyPjsKIAogCWFsaWFzZXMgewogCQlzZXJpYWwwID0gJnNlcmlhbDA7CkBAIC0yNiwzNCArMjUsMTEgQEAKIAkJcGNpMSA9ICZwY2kxOwogCX07CiAKLQljcHVzIHsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDA+OwotCi0JCVBvd2VyUEMsUDEwMjBAMCB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwotCQkJcmVnID0gPDB4MD47Ci0JCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47Ci0JCX07Ci0KLQkJUG93ZXJQQyxQMTAyMEAxIHsKLQkJCWRldmljZV90eXBlID0gImNwdSI7Ci0JCQlyZWcgPSA8MHgxPjsKLQkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyPjsKLQkJfTsKLQl9OwotCiAJbWVtb3J5IHsKIAkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKIAl9OwogCiAJbG9jYWxidXNAZmZlMDUwMDAgewotCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKLQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCWNvbXBhdGlibGUgPSAiZnNsLHAxMDIwLWVsYmMiLCAiZnNsLGVsYmMiLCAic2ltcGxlLWJ1cyI7Ci0JCXJlZyA9IDwwIDB4ZmZlMDUwMDAgMCAweDEwMDA+OwotCQlpbnRlcnJ1cHRzID0gPDE5IDI+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAogCQkvKiBOT1IsIE5BTkQgRmxhc2hlcyBhbmQgVml0ZXNzZSA1IHBvcnQgTDIgc3dpdGNoICovCiAJCXJhbmdlcyA9IDwweDAgMHgwIDB4MCAweGVmMDAwMDAwIDB4MDEwMDAwMDAKQEAgLTE2NSw4OCArMTQxLDE0IEBACiAJfTsKIAogCXNvY0BmZmUwMDAwMCB7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJZGV2aWNlX3R5cGUgPSAic29jIjsKLQkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjAtaW1tciIsICJzaW1wbGUtYnVzIjsKLQkJcmFuZ2VzID0gPDB4MCAgMHgwIDB4ZmZlMDAwMDAgMHgxMDAwMDA+OwotCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gRmlsbGVkIG91dCBieSB1Ym9vdC4KLQotCQllY20tbGF3QDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wsZWNtLWxhdyI7Ci0JCQlyZWcgPSA8MHgwIDB4MTAwMD47Ci0JCQlmc2wsbnVtLWxhd3MgPSA8MTI+OwotCQl9OwotCi0JCWVjbUAxMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLHAxMDIwLWVjbSIsICJmc2wsZWNtIjsKLQkJCXJlZyA9IDwweDEwMDAgMHgxMDAwPjsKLQkJCWludGVycnVwdHMgPSA8MTYgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJfTsKLQotCQltZW1vcnktY29udHJvbGxlckAyMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLHAxMDIwLW1lbW9yeS1jb250cm9sbGVyIjsKLQkJCXJlZyA9IDwweDIwMDAgMHgxMDAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJaW50ZXJydXB0cyA9IDwxNiAyPjsKLQkJfTsKLQogCQlpMmNAMzAwMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7Ci0JCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8NDMgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWRmc3JyOwogCQkJcnRjQDY4IHsKIAkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzkiOwogCQkJCXJlZyA9IDwweDY4PjsKIAkJCX07CiAJCX07CiAKLQkJaTJjQDMxMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNlbGwtaW5kZXggPSA8MT47Ci0JCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwotCQkJcmVnID0gPDB4MzEwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQzIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlkZnNycjsKLQkJfTsKLQotCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKLQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQlyZWcgPSA8MHg0NTAwIDB4MTAwPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKLQkJCWludGVycnVwdHMgPSA8NDIgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJfTsKLQotCQlzZXJpYWwxOiBzZXJpYWxANDYwMCB7Ci0JCQljZWxsLWluZGV4ID0gPDE+OwotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKLQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQlyZWcgPSA8MHg0NjAwIDB4MTAwPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKLQkJCWludGVycnVwdHMgPSA8NDIgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJfTsKLQogCQlzcGlANzAwMCB7Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGVzcGkiOwotCQkJcmVnID0gPDB4NzAwMCAweDEwMDA+OwotCQkJaW50ZXJydXB0cyA9IDw1OSAweDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQltb2RlID0gImNwdSI7CiAKIAkJCWZzbF9tMjVwODBAMCB7CiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC0yOTQsNjYgKzE5Niw3IEBACiAJCQl9OwogCQl9OwogCi0JCWdwaW86IGdwaW8tY29udHJvbGxlckBmMDAwIHsKLQkJCSNncGlvLWNlbGxzID0gPDI+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1ncGlvIjsKLQkJCXJlZyA9IDwweGYwMDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDw0NyAweDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlncGlvLWNvbnRyb2xsZXI7Ci0JCX07Ci0KLQkJTDI6IGwyLWNhY2hlLWNvbnRyb2xsZXJAMjAwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjAtbDItY2FjaGUtY29udHJvbGxlciI7Ci0JCQlyZWcgPSA8MHgyMDAwMCAweDEwMDA+OwotCQkJY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKLQkJCWNhY2hlLXNpemUgPSA8MHg0MDAwMD47IC8vIEwyLDI1NksKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJaW50ZXJydXB0cyA9IDwxNiAyPjsKLQkJfTsKLQotCQlkbWFAMjEzMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hIjsKLQkJCXJlZyA9IDwweDIxMzAwIDB4ND47Ci0JCQlyYW5nZXMgPSA8MHgwIDB4MjExMDAgMHgyMDA+OwotCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCWRtYS1jaGFubmVsQDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOwotCQkJCXJlZyA9IDwweDAgMHg4MD47Ci0JCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDIwIDI+OwotCQkJfTsKLQkJCWRtYS1jaGFubmVsQDgwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKLQkJCQlyZWcgPSA8MHg4MCAweDgwPjsKLQkJCQljZWxsLWluZGV4ID0gPDE+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MjEgMj47Ci0JCQl9OwotCQkJZG1hLWNoYW5uZWxAMTAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKLQkJCQlyZWcgPSA8MHgxMDAgMHg4MD47Ci0JCQkJY2VsbC1pbmRleCA9IDwyPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDIyIDI+OwotCQkJfTsKLQkJCWRtYS1jaGFubmVsQDE4MCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7Ci0JCQkJcmVnID0gPDB4MTgwIDB4ODA+OwotCQkJCWNlbGwtaW5kZXggPSA8Mz47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwyMyAyPjsKLQkJCX07Ci0JCX07Ci0KIAkJbWRpb0AyNDAwMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZXRzZWMyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwIDB4YjAwMzAgMHg0PjsKIAogCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwpAQCAtMzY5LDEwICsyMTIsNiBAQAogCQl9OwogCiAJCW1kaW9AMjUwMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGV0c2VjMi10YmkiOwotCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwIDB4YjEwMzAgMHg0PjsKIAogCQkJdGJpMDogdGJpLXBoeUAxMSB7CiAJCQkJcmVnID0gPDB4MTE+OwpAQCAtMzgxLDk3ICsyMjAsMjUgQEAKIAkJfTsKIAogCQllbmV0MDogZXRoZXJuZXRAYjAwMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwotCQkJbW9kZWwgPSAiZVRTRUMiOwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZXRzZWMyIjsKLQkJCWZzbCxudW1fcnhfcXVldWVzID0gPDB4OD47Ci0JCQlmc2wsbnVtX3R4X3F1ZXVlcyA9IDwweDg+OwotCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWZpeGVkLWxpbmsgPSA8MSAxIDEwMDAgMCAwPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOwogCi0JCQlxdWV1ZS1ncm91cEAwIHsKLQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCQlyZWcgPSA8MHhiMDAwMCAweDEwMDA+OwotCQkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OwotCQkJfTsKLQotCQkJcXVldWUtZ3JvdXBAMSB7Ci0JCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCQkJcmVnID0gPDB4YjQwMDAgMHgxMDAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE3IDIgMTggMiAyNCAyPjsKLQkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QGIxMDAwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKLQkJCW1vZGVsID0gImVUU0VDIjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGV0c2VjMiI7Ci0JCQlmc2wsbnVtX3J4X3F1ZXVlcyA9IDwweDg+OwotCQkJZnNsLG51bV90eF9xdWV1ZXMgPSA8MHg4PjsKLQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJzZ21paSI7CiAKLQkJCXF1ZXVlLWdyb3VwQDAgewotCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJCXJlZyA9IDwweGIxMDAwIDB4MTAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47Ci0JCQl9OwotCi0JCQlxdWV1ZS1ncm91cEAxIHsKLQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCQlyZWcgPSA8MHhiNTAwMCAweDEwMDA+OwotCQkJCWludGVycnVwdHMgPSA8NTEgMiA1MiAyIDY3IDI+OwotCQkJfTsKIAkJfTsKIAogCQllbmV0MjogZXRoZXJuZXRAYjIwMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwotCQkJbW9kZWwgPSAiZVRTRUMiOwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZXRzZWMyIjsKLQkJCWZzbCxudW1fcnhfcXVldWVzID0gPDB4OD47Ci0JCQlmc2wsbnVtX3R4X3F1ZXVlcyA9IDwweDg+OwotCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CiAKLQkJCXF1ZXVlLWdyb3VwQDAgewotCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJCXJlZyA9IDwweGIyMDAwIDB4MTAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwzMSAyIDMyIDIgMzMgMj47Ci0JCQl9OwotCi0JCQlxdWV1ZS1ncm91cEAxIHsKLQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCQlyZWcgPSA8MHhiNjAwMCAweDEwMDA+OwotCQkJCWludGVycnVwdHMgPSA8MjUgMiAyNiAyIDI3IDI+OwotCQkJfTsKIAkJfTsKIAogCQl1c2JAMjIwMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLXVzYjItZHIiOwotCQkJcmVnID0gPDB4MjIwMDAgMHgxMDAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJaW50ZXJydXB0cyA9IDwyOCAweDI+OwogCQkJcGh5X3R5cGUgPSAidWxwaSI7CiAJCX07CiAKQEAgLTQ4MSw4MiArMjQ4LDIzIEBACiAJCSAgIGl0IGVuYWJsZXMgVVNCMi4gT1RPSCwgVS1Cb290IGRvZXMgY3JlYXRlIGEgbmV3IG5vZGUKIAkJICAgd2hlbiB0aGVyZSBpc24ndCBhbnkuIFNvLCBqdXN0IGNvbW1lbnQgaXQgb3V0LgogCQl1c2JAMjMwMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLXVzYjItZHIiOwotCQkJcmVnID0gPDB4MjMwMDAgMHgxMDAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJaW50ZXJydXB0cyA9IDw0NiAweDI+OwogCQkJcGh5X3R5cGUgPSAidWxwaSI7CiAJCX07CiAJCSovCiAKLQkJc2RoY2lAMmUwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjAtZXNkaGMiLCAiZnNsLGVzZGhjIjsKLQkJCXJlZyA9IDwweDJlMDAwIDB4MTAwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDcyIDB4Mj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCS8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKLQkJfTsKLQotCQljcnlwdG9AMzAwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjMy4xIiwgImZzbCxzZWMzLjAiLCAiZnNsLHNlYzIuNCIsCi0JCQkJICAgICAiZnNsLHNlYzIuMiIsICJmc2wsc2VjMi4xIiwgImZzbCxzZWMyLjAiOwotCQkJcmVnID0gPDB4MzAwMDAgMHgxMDAwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQ1IDIgNTggMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWZzbCxudW0tY2hhbm5lbHMgPSA8ND47Ci0JCQlmc2wsY2hhbm5lbC1maWZvLWxlbiA9IDwyND47Ci0JCQlmc2wsZXhlYy11bml0cy1tYXNrID0gPDB4YmZlPjsKLQkJCWZzbCxkZXNjcmlwdG9yLXR5cGVzLW1hc2sgPSA8MHgzYWIwZWJmPjsKLQkJfTsKLQotCQltcGljOiBwaWNANDAwMDAgewotCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKLQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47Ci0JCQlyZWcgPSA8MHg0MDAwMCAweDQwMDAwPjsKLQkJCWNvbXBhdGlibGUgPSAiY2hycCxvcGVuLXBpYyI7Ci0JCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7Ci0JCX07Ci0KLQkJbXNpQDQxNjAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLHAxMDIwLW1zaSIsICJmc2wsbXBpYy1tc2kiOwotCQkJcmVnID0gPDB4NDE2MDAgMHg4MD47Ci0JCQltc2ktYXZhaWxhYmxlLXJhbmdlcyA9IDwwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8Ci0JCQkJMHhlMCAwCi0JCQkJMHhlMSAwCi0JCQkJMHhlMiAwCi0JCQkJMHhlMyAwCi0JCQkJMHhlNCAwCi0JCQkJMHhlNSAwCi0JCQkJMHhlNiAwCi0JCQkJMHhlNyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQl9OwotCi0JCWdsb2JhbC11dGlsaXRpZXNAZTAwMDAgewkvL2dsb2JhbCB1dGlsaXRpZXMgYmxvY2sKLQkJCWNvbXBhdGlibGUgPSAiZnNsLHAxMDIwLWd1dHMiOwotCQkJcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKLQkJCWZzbCxoYXMtcnN0Y3I7Ci0JCX07CiAJfTsKIAogCXBjaTA6IHBjaWVAZmZlMDkwMDAgewotCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LXBjaWUiOwotCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwotCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwyPjsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCXJlZyA9IDwwIDB4ZmZlMDkwMDAgMCAweDEwMDA+OwotCQlidXMtcmFuZ2UgPSA8MCAyNTU+OwogCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGEwMDAwMDAwIDAgMHhhMDAwMDAwMCAweDAgMHgyMDAwMDAwMAogCQkJICAweDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMCAweGZmYzEwMDAwIDB4MCAweDEwMDAwPjsKLQkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCWludGVycnVwdHMgPSA8MTYgMj47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMHgwIDB4MCAweDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJLyogSURTRUwgMHgwICovCisJCQkwMDAwIDB4MCAweDAgMHgxICZtcGljIDB4NCAweDEKKwkJCTAwMDAgMHgwIDB4MCAweDIgJm1waWMgMHg1IDB4MQorCQkJMDAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDYgMHgxCisJCQkwMDAwIDB4MCAweDAgMHg0ICZtcGljIDB4NyAweDEKKwkJCT47CiAJCXBjaWVAMCB7CiAJCQlyZWcgPSA8MHgwIDB4MCAweDAgMHgwIDB4MD47CiAJCQkjc2l6ZS1jZWxscyA9IDwyPjsKQEAgLTU3MywxOCArMjgxLDE2IEBACiAJfTsKIAogCXBjaTE6IHBjaWVAZmZlMGEwMDAgewotCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LXBjaWUiOwotCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwotCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwyPjsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47Ci0JCXJlZyA9IDwwIDB4ZmZlMGEwMDAgMCAweDEwMDA+OwotCQlidXMtcmFuZ2UgPSA8MCAyNTU+OwogCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweDgwMDAwMDAwIDAgMHg4MDAwMDAwMCAweDAgMHgyMDAwMDAwMAogCQkJICAweDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMCAweGZmYzAwMDAwIDB4MCAweDEwMDAwPjsKLQkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCWludGVycnVwdHMgPSA8MTYgMj47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMHgwIDB4MCAweDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJLyogSURTRUwgMHgwICovCisJCQkwMDAwIDB4MCAweDAgMHgxICZtcGljIDB4MCAweDEKKwkJCTAwMDAgMHgwIDB4MCAweDIgJm1waWMgMHgxIDB4MQorCQkJMDAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDIgMHgxCisJCQkwMDAwIDB4MCAweDAgMHg0ICZtcGljIDB4MyAweDEKKwkJCT47CiAJCXBjaWVAMCB7CiAJCQlyZWcgPSA8MHgwIDB4MCAweDAgMHgwIDB4MD47CiAJCQkjc2l6ZS1jZWxscyA9IDwyPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMTAyMHJkYl9jYW1wX2NvcmUwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMTAyMHJkYl9jYW1wX2NvcmUwLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGJmN2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AxMDIwcmRiX2NhbXBfY29yZTAuZHRzCkBAIC0wLDAgKzEsMjEzIEBACisvKgorICogUDEwMjAgUkRCICBDb3JlMCBEZXZpY2UgVHJlZSBTb3VyY2UgaW4gQ0FNUCBtb2RlLgorICoKKyAqIEluIENBTVAgbW9kZSwgZWFjaCBjb3JlIG5lZWRzIHRvIGhhdmUgaXRzIG93biBkdHMuIE9ubHkgbXBpYyBhbmQgTDIgY2FjaGUKKyAqIGNhbiBiZSBzaGFyZWQsIGFsbCB0aGUgb3RoZXIgZGV2aWNlcyBtdXN0IGJlIGFzc2lnbmVkIHRvIG9uZSBjb3JlIG9ubHkuCisgKiBUaGlzIGR0cyBmaWxlIGFsbG93cyBjb3JlMCB0byBoYXZlIG1lbW9yeSwgbDIsIGkyYywgc3BpLCBncGlvLCB0ZG0sIGRtYSwgdXNiLAorICogZXRoMSwgZXRoMiwgc2RoYywgY3J5cHRvLCBnbG9iYWwtdXRpbCwgbWVzc2FnZSwgcGNpMCwgcGNpMSwgbXNpLgorICoKKyAqIFBsZWFzZSBub3RlIHRvIGFkZCAiLWIgMCIgZm9yIGNvcmUwJ3MgZHRzIGNvbXBpbGluZy4KKyAqCisgKiBDb3B5cmlnaHQgMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvaW5jbHVkZS8gInAxMDIwc2kuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiZnNsLFAxMDIwUkRCIjsKKwljb21wYXRpYmxlID0gImZzbCxQMTAyMFJEQiIsICJmc2wsTVBDODVYWFJEQi1DQU1QIjsKKworCWFsaWFzZXMgeworCQlldGhlcm5ldDEgPSAmZW5ldDE7CisJCWV0aGVybmV0MiA9ICZlbmV0MjsKKwkJc2VyaWFsMCA9ICZzZXJpYWwwOworCQlwY2kwID0gJnBjaTA7CisJCXBjaTEgPSAmcGNpMTsKKwl9OworCisJY3B1cyB7CisJCVBvd2VyUEMsUDEwMjBAMSB7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJfTsKKworCWxvY2FsYnVzQGZmZTA1MDAwIHsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJc29jQGZmZTAwMDAwIHsKKwkJaTJjQDMwMDAgeworCQkJcnRjQDY4IHsKKwkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzkiOworCQkJCXJlZyA9IDwweDY4PjsKKwkJCX07CisJCX07CisKKwkJc2VyaWFsMTogc2VyaWFsQDQ2MDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlzcGlANzAwMCB7CisJCQlmc2xfbTI1cDgwQDAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVzcGktZmxhc2giOworCQkJCXJlZyA9IDwwPjsKKwkJCQlsaW51eCxtb2RhbGlhcyA9ICJmc2xfbTI1cDgwIjsKKwkJCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDw0MDAwMDAwMD47CisKKwkJCQlwYXJ0aXRpb25AMCB7CisJCQkJCS8qIDUxMktCIGZvciB1LWJvb3QgQm9vdGxvYWRlciBJbWFnZSAqLworCQkJCQlyZWcgPSA8MHgwIDB4MDAwODAwMDA+OworCQkJCQlsYWJlbCA9ICJTUEkgKFJPKSBVLUJvb3QgSW1hZ2UiOworCQkJCQlyZWFkLW9ubHk7CisJCQkJfTsKKworCQkJCXBhcnRpdGlvbkA4MDAwMCB7CisJCQkJCS8qIDUxMktCIGZvciBEVEIgSW1hZ2UgKi8KKwkJCQkJcmVnID0gPDB4MDAwODAwMDAgMHgwMDA4MDAwMD47CisJCQkJCWxhYmVsID0gIlNQSSAoUk8pIERUQiBJbWFnZSI7CisJCQkJCXJlYWQtb25seTsKKwkJCQl9OworCisJCQkJcGFydGl0aW9uQDEwMDAwMCB7CisJCQkJCS8qIDRNQiBmb3IgTGludXggS2VybmVsIEltYWdlICovCisJCQkJCXJlZyA9IDwweDAwMTAwMDAwIDB4MDA0MDAwMDA+OworCQkJCQlsYWJlbCA9ICJTUEkgKFJPKSBMaW51eCBLZXJuZWwgSW1hZ2UiOworCQkJCQlyZWFkLW9ubHk7CisJCQkJfTsKKworCQkJCXBhcnRpdGlvbkA1MDAwMDAgeworCQkJCQkvKiA0TUIgZm9yIENvbXByZXNzZWQgUkZTIEltYWdlICovCisJCQkJCXJlZyA9IDwweDAwNTAwMDAwIDB4MDA0MDAwMDA+OworCQkJCQlsYWJlbCA9ICJTUEkgKFJPKSBDb21wcmVzc2VkIFJGUyBJbWFnZSI7CisJCQkJCXJlYWQtb25seTsKKwkJCQl9OworCisJCQkJcGFydGl0aW9uQDkwMDAwMCB7CisJCQkJCS8qIDdNQiBmb3IgSkZGUzIgYmFzZWQgUkZTICovCisJCQkJCXJlZyA9IDwweDAwOTAwMDAwIDB4MDA3MDAwMDA+OworCQkJCQlsYWJlbCA9ICJTUEkgKFJXKSBKRkZTMiBSRlMiOworCQkJCX07CisJCQl9OworCQl9OworCisJCW1kaW9AMjQwMDAgeworCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MyAxPjsKKwkJCQlyZWcgPSA8MHgwPjsKKwkJCX07CisJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyIDE+OworCQkJCXJlZyA9IDwweDE+OworCQkJfTsKKwkJfTsKKworCQltZGlvQDI1MDAwIHsKKwkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCXJlZyA9IDwweDExPjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCX07CisJCX07CisKKwkJZW5ldDA6IGV0aGVybmV0QGIwMDAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJZW5ldDE6IGV0aGVybmV0QGIxMDAwIHsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInNnbWlpIjsKKwkJfTsKKworCQllbmV0MjogZXRoZXJuZXRAYjIwMDAgeworCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKwkJfTsKKworCQl1c2JAMjIwMDAgeworCQkJcGh5X3R5cGUgPSAidWxwaSI7CisJCX07CisKKwkJLyogVVNCMiBpcyBzaGFyZWQgd2l0aCBsb2NhbGJ1cywgc28gaXQgbXVzdCBiZSBkaXNhYmxlZAorCQkgICBieSBkZWZhdWx0LiBXZSBjYW4ndCBwdXQgJ3N0YXR1cyA9ICJkaXNhYmxlZCI7JyBoZXJlCisJCSAgIHNpbmNlIFUtQm9vdCBkb2Vzbid0IGNsZWFyIHRoZSBzdGF0dXMgcHJvcGVydHkgd2hlbgorCQkgICBpdCBlbmFibGVzIFVTQjIuIE9UT0gsIFUtQm9vdCBkb2VzIGNyZWF0ZSBhIG5ldyBub2RlCisJCSAgIHdoZW4gdGhlcmUgaXNuJ3QgYW55LiBTbywganVzdCBjb21tZW50IGl0IG91dC4KKwkJdXNiQDIzMDAwIHsKKwkJCXBoeV90eXBlID0gInVscGkiOworCQl9OworCQkqLworCisJCW1waWM6IHBpY0A0MDAwMCB7CisJCQlwcm90ZWN0ZWQtc291cmNlcyA9IDwKKwkJCTQyIDI5IDMwIDM0CS8qIHNlcmlhbDEsIGVuZXQwLXF1ZXVlLWdyb3VwMCAqLworCQkJMTcgMTggMjQgNDUJLyogZW5ldDAtcXVldWUtZ3JvdXAxLCBjcnlwdG8gKi8KKwkJCT47CisJCX07CisKKwl9OworCisJcGNpMDogcGNpZUBmZmUwOTAwMCB7CisJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAgMCAweGEwMDAwMDAwIDB4MCAweDIwMDAwMDAwCisJCQkgIDB4MTAwMDAwMCAweDAgMHgwMDAwMDAwMCAwIDB4ZmZjMTAwMDAgMHgwIDB4MTAwMDA+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwKKwkJCS8qIElEU0VMIDB4MCAqLworCQkJMDAwMCAweDAgMHgwIDB4MSAmbXBpYyAweDQgMHgxCisJCQkwMDAwIDB4MCAweDAgMHgyICZtcGljIDB4NSAweDEKKwkJCTAwMDAgMHgwIDB4MCAweDMgJm1waWMgMHg2IDB4MQorCQkJMDAwMCAweDAgMHgwIDB4NCAmbXBpYyAweDcgMHgxCisJCQk+OworCQlwY2llQDAgeworCQkJcmVnID0gPDB4MCAweDAgMHgwIDB4MCAweDA+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGEwMDAwMDAwCisJCQkJICAweDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAKKwkJCQkgIDB4MCAweDIwMDAwMDAwCisKKwkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJICAweDEwMDAwMDAgMHgwIDB4MAorCQkJCSAgMHgwIDB4MTAwMDAwPjsKKwkJfTsKKwl9OworCisJcGNpMTogcGNpZUBmZmUwYTAwMCB7CisJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMCAweDgwMDAwMDAwIDB4MCAweDIwMDAwMDAwCisJCQkgIDB4MTAwMDAwMCAweDAgMHgwMDAwMDAwMCAwIDB4ZmZjMDAwMDAgMHgwIDB4MTAwMDA+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwKKwkJCS8qIElEU0VMIDB4MCAqLworCQkJMDAwMCAweDAgMHgwIDB4MSAmbXBpYyAweDAgMHgxCisJCQkwMDAwIDB4MCAweDAgMHgyICZtcGljIDB4MSAweDEKKwkJCTAwMDAgMHgwIDB4MCAweDMgJm1waWMgMHgyIDB4MQorCQkJMDAwMCAweDAgMHgwIDB4NCAmbXBpYyAweDMgMHgxCisJCQk+OworCQlwY2llQDAgeworCQkJcmVnID0gPDB4MCAweDAgMHgwIDB4MCAweDA+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweDgwMDAwMDAwCisJCQkJICAweDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAKKwkJCQkgIDB4MCAweDIwMDAwMDAwCisKKwkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJICAweDEwMDAwMDAgMHgwIDB4MAorCQkJCSAgMHgwIDB4MTAwMDAwPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMTAyMHJkYl9jYW1wX2NvcmUxLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMTAyMHJkYl9jYW1wX2NvcmUxLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWMwMjIwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AxMDIwcmRiX2NhbXBfY29yZTEuZHRzCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogUDEwMjAgUkRCIENvcmUxIERldmljZSBUcmVlIFNvdXJjZSBpbiBDQU1QIG1vZGUuCisgKgorICogSW4gQ0FNUCBtb2RlLCBlYWNoIGNvcmUgbmVlZHMgdG8gaGF2ZSBpdHMgb3duIGR0cy4gT25seSBtcGljIGFuZCBMMiBjYWNoZQorICogY2FuIGJlIHNoYXJlZCwgYWxsIHRoZSBvdGhlciBkZXZpY2VzIG11c3QgYmUgYXNzaWduZWQgdG8gb25lIGNvcmUgb25seS4KKyAqIFRoaXMgZHRzIGFsbG93cyBjb3JlMSB0byBoYXZlIGwyLCBldGgwLCBjcnlwdG8uCisgKgorICogUGxlYXNlIG5vdGUgdG8gYWRkICItYiAxIiBmb3IgY29yZTEncyBkdHMgY29tcGlsaW5nLgorICoKKyAqIENvcHlyaWdodCAyMDExIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy9pbmNsdWRlLyAicDEwMjBzaS5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJmc2wsUDEwMjBSREIiOworCWNvbXBhdGlibGUgPSAiZnNsLFAxMDIwUkRCIiwgImZzbCxNUEM4NVhYUkRCLUNBTVAiOworCisJYWxpYXNlcyB7CisJCWV0aGVybmV0MCA9ICZlbmV0MDsKKwkJc2VyaWFsMCA9ICZzZXJpYWwxOworCQl9OworCisJY3B1cyB7CisJCVBvd2VyUEMsUDEwMjBAMCB7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJfTsKKworCWxvY2FsYnVzQGZmZTA1MDAwIHsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJc29jQGZmZTAwMDAwIHsKKwkJZWNtLWxhd0AwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJZWNtQDEwMDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQltZW1vcnktY29udHJvbGxlckAyMDAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJaTJjQDMwMDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmNAMzEwMCB7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJc3BpQDcwMDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlncGlvOiBncGlvLWNvbnRyb2xsZXJAZjAwMCB7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWRtYUAyMTMwMCB7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCW1kaW9AMjQwMDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQltZGlvQDI1MDAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJZW5ldDA6IGV0aGVybmV0QGIwMDAwIHsKKwkJCWZpeGVkLWxpbmsgPSA8MSAxIDEwMDAgMCAwPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCX07CisKKwkJZW5ldDE6IGV0aGVybmV0QGIxMDAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJZW5ldDI6IGV0aGVybmV0QGIyMDAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJdXNiQDIyMDAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJc2RoY2lAMmUwMDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQltcGljOiBwaWNANDAwMDAgeworCQkJcHJvdGVjdGVkLXNvdXJjZXMgPSA8CisJCQkxNiAJCS8qIGVjbSwgbWVtLCBMMiwgcGNpMCwgcGNpMSAqLworCQkJNDMgNDIgNTkJLyogaTJjLCBzZXJpYWwwLCBzcGkgKi8KKwkJCTQ3IDYzIDYyIAkvKiBncGlvLCB0ZG0gKi8KKwkJCTIwIDIxIDIyIDIzCS8qIGRtYSAqLworCQkJMDMgMDIgCQkvKiBtZGlvICovCisJCQkzNSAzNiA0MAkvKiBlbmV0MS1xdWV1ZS1ncm91cDAgKi8KKwkJCTUxIDUyIDY3CS8qIGVuZXQxLXF1ZXVlLWdyb3VwMSAqLworCQkJMzEgMzIgMzMJLyogZW5ldDItcXVldWUtZ3JvdXAwICovCisJCQkyNSAyNiAyNwkvKiBlbmV0Mi1xdWV1ZS1ncm91cDEgKi8KKwkJCTI4IDcyIDU4IAkvKiB1c2IsIHNkaGNpLCBjcnlwdG8gKi8KKwkJCTB4YjAgMHhiMSAweGIyCS8qIG1lc3NhZ2UgKi8KKwkJCTB4YjMgMHhiNCAweGI1CisJCQkweGI2IDB4YjcKKwkJCTB4ZTAgMHhlMSAweGUyCS8qIG1zaSAqLworCQkJMHhlMyAweGU0IDB4ZTUKKwkJCTB4ZTYgMHhlNwkJLyogc2RoY2ksIGNyeXB0byAsIHBjaSAqLworCQkJPjsKKwkJfTsKKworCQltc2lANDE2MDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlnbG9iYWwtdXRpbGl0aWVzQGUwMDAwIHsJLy9nbG9iYWwgdXRpbGl0aWVzIGJsb2NrCisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJfTsKKworCXBjaTA6IHBjaWVAZmZlMDkwMDAgeworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwlwY2kxOiBwY2llQGZmZTBhMDAwIHsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMTAyMHNpLmR0c2kgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDEwMjBzaS5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNWFjYjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDEwMjBzaS5kdHNpCkBAIC0wLDAgKzEsMzc3IEBACisvKgorICogUDEwMjBzaSBEZXZpY2UgVHJlZSBTb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvZHRzLXYxLzsKKy8geworCWNvbXBhdGlibGUgPSAiZnNsLFAxMDIwIjsKKwkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkjc2l6ZS1jZWxscyA9IDwyPjsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyxQMTAyMEAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MHgwPjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyPjsKKwkJfTsKKworCQlQb3dlclBDLFAxMDIwQDEgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwweDE+OworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OworCQl9OworCX07CisKKwlsb2NhbGJ1c0BmZmUwNTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjAtZWxiYyIsICJmc2wsZWxiYyIsICJzaW1wbGUtYnVzIjsKKwkJcmVnID0gPDAgMHhmZmUwNTAwMCAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8MTkgMj47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCX07CisKKwlzb2NAZmZlMDAwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWRldmljZV90eXBlID0gInNvYyI7CisJCWNvbXBhdGlibGUgPSAiZnNsLHAxMDIwLWltbXIiLCAic2ltcGxlLWJ1cyI7CisJCXJhbmdlcyA9IDwweDAgIDB4MCAweGZmZTAwMDAwIDB4MTAwMDAwPjsKKwkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZpbGxlZCBvdXQgYnkgdWJvb3QuCisKKwkJZWNtLWxhd0AwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGVjbS1sYXciOworCQkJcmVnID0gPDB4MCAweDEwMDA+OworCQkJZnNsLG51bS1sYXdzID0gPDEyPjsKKwkJfTsKKworCQllY21AMTAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxwMTAyMC1lY20iLCAiZnNsLGVjbSI7CisJCQlyZWcgPSA8MHgxMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDE2IDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJbWVtb3J5LWNvbnRyb2xsZXJAMjAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxwMTAyMC1tZW1vcnktY29udHJvbGxlciI7CisJCQlyZWcgPSA8MHgyMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8MTYgMj47CisJCX07CisKKwkJaTJjQDMwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJcmVnID0gPDB4MzAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDQzIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlkZnNycjsKKwkJfTsKKworCQlpMmNAMzEwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgzMTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NDMgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWRmc3JyOworCQl9OworCisJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDwweDQ1MDAgMHgxMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDw0MiAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCisJCXNlcmlhbDE6IHNlcmlhbEA0NjAwIHsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDwweDQ2MDAgMHgxMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDw0MiAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCisJCXNwaUA3MDAwIHsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsZXNwaSI7CisJCQlyZWcgPSA8MHg3MDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDU5IDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCW1vZGUgPSAiY3B1IjsKKwkJfTsKKworCQlncGlvOiBncGlvLWNvbnRyb2xsZXJAZjAwMCB7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZ3BpbyI7CisJCQlyZWcgPSA8MHhmMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NDcgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQl9OworCisJCUwyOiBsMi1jYWNoZS1jb250cm9sbGVyQDIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHAxMDIwLWwyLWNhY2hlLWNvbnRyb2xsZXIiOworCQkJcmVnID0gPDB4MjAwMDAgMHgxMDAwPjsKKwkJCWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQljYWNoZS1zaXplID0gPDB4NDAwMDA+OyAvLyBMMiwyNTZLCisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8MTYgMj47CisJCX07CisKKwkJZG1hQDIxMzAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYSI7CisJCQlyZWcgPSA8MHgyMTMwMCAweDQ+OworCQkJcmFuZ2VzID0gPDB4MCAweDIxMTAwIDB4MjAwPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkbWEtY2hhbm5lbEAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMCAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEA4MCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4ODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIxIDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDEwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMiAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEAxODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDE4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDM+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjMgMj47CisJCQl9OworCQl9OworCisJCW1kaW9AMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGV0c2VjMi1tZGlvIjsKKwkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMCAweGIwMDMwIDB4ND47CisKKwkJfTsKKworCQltZGlvQDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxldHNlYzItdGJpIjsKKwkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMCAweGIxMDMwIDB4ND47CisKKwkJfTsKKworCQllbmV0MDogZXRoZXJuZXRAYjAwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAiZVRTRUMiOworCQkJY29tcGF0aWJsZSA9ICJmc2wsZXRzZWMyIjsKKwkJCWZzbCxudW1fcnhfcXVldWVzID0gPDB4OD47CisJCQlmc2wsbnVtX3R4X3F1ZXVlcyA9IDwweDg+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKworCQkJcXVldWUtZ3JvdXBAMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkJcmVnID0gPDB4YjAwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKKwkJCX07CisKKwkJCXF1ZXVlLWdyb3VwQDEgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJCXJlZyA9IDwweGI0MDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwxNyAyIDE4IDIgMjQgMj47CisJCQl9OworCQl9OworCisJCWVuZXQxOiBldGhlcm5ldEBiMTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImZzbCxldHNlYzIiOworCQkJZnNsLG51bV9yeF9xdWV1ZXMgPSA8MHg4PjsKKwkJCWZzbCxudW1fdHhfcXVldWVzID0gPDB4OD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCisJCQlxdWV1ZS1ncm91cEAwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCQlyZWcgPSA8MHhiMTAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OworCQkJfTsKKworCQkJcXVldWUtZ3JvdXBAMSB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkJcmVnID0gPDB4YjUwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDUxIDIgNTIgMiA2NyAyPjsKKwkJCX07CisJCX07CisKKwkJZW5ldDI6IGV0aGVybmV0QGIyMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGV0c2VjMiI7CisJCQlmc2wsbnVtX3J4X3F1ZXVlcyA9IDwweDg+OworCQkJZnNsLG51bV90eF9xdWV1ZXMgPSA8MHg4PjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisKKwkJCXF1ZXVlLWdyb3VwQDAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJCXJlZyA9IDwweGIyMDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwzMSAyIDMyIDIgMzMgMj47CisJCQl9OworCisJCQlxdWV1ZS1ncm91cEAxIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCQlyZWcgPSA8MHhiNjAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8MjUgMiAyNiAyIDI3IDI+OworCQkJfTsKKwkJfTsKKworCQl1c2JAMjIwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLXVzYjItZHIiOworCQkJcmVnID0gPDB4MjIwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJaW50ZXJydXB0cyA9IDwyOCAweDI+OworCQl9OworCisJCS8qIFVTQjIgaXMgc2hhcmVkIHdpdGggbG9jYWxidXMsIHNvIGl0IG11c3QgYmUgZGlzYWJsZWQKKwkJICAgYnkgZGVmYXVsdC4gV2UgY2FuJ3QgcHV0ICdzdGF0dXMgPSAiZGlzYWJsZWQiOycgaGVyZQorCQkgICBzaW5jZSBVLUJvb3QgZG9lc24ndCBjbGVhciB0aGUgc3RhdHVzIHByb3BlcnR5IHdoZW4KKwkJICAgaXQgZW5hYmxlcyBVU0IyLiBPVE9ILCBVLUJvb3QgZG9lcyBjcmVhdGUgYSBuZXcgbm9kZQorCQkgICB3aGVuIHRoZXJlIGlzbid0IGFueS4gU28sIGp1c3QgY29tbWVudCBpdCBvdXQuCisJCXVzYkAyMzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtdXNiMi1kciI7CisJCQlyZWcgPSA8MHgyMzAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDQ2IDB4Mj47CisJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKKwkJfTsKKwkJKi8KKworCQlzZGhjaUAyZTAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxwMTAyMC1lc2RoYyIsICJmc2wsZXNkaGMiOworCQkJcmVnID0gPDB4MmUwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8NzIgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQl9OworCisJCWNyeXB0b0AzMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxzZWMzLjEiLCAiZnNsLHNlYzMuMCIsICJmc2wsc2VjMi40IiwKKwkJCQkgICAgICJmc2wsc2VjMi4yIiwgImZzbCxzZWMyLjEiLCAiZnNsLHNlYzIuMCI7CisJCQlyZWcgPSA8MHgzMDAwMCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8NDUgMiA1OCAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZnNsLG51bS1jaGFubmVscyA9IDw0PjsKKwkJCWZzbCxjaGFubmVsLWZpZm8tbGVuID0gPDI0PjsKKwkJCWZzbCxleGVjLXVuaXRzLW1hc2sgPSA8MHhiZmU+OworCQkJZnNsLGRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwweDNhYjBlYmY+OworCQl9OworCisJCW1waWM6IHBpY0A0MDAwMCB7CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCXJlZyA9IDwweDQwMDAwIDB4NDAwMDA+OworCQkJY29tcGF0aWJsZSA9ICJjaHJwLG9wZW4tcGljIjsKKwkJCWRldmljZV90eXBlID0gIm9wZW4tcGljIjsKKwkJfTsKKworCQltc2lANDE2MDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjAtbXNpIiwgImZzbCxtcGljLW1zaSI7CisJCQlyZWcgPSA8MHg0MTYwMCAweDgwPjsKKwkJCW1zaS1hdmFpbGFibGUtcmFuZ2VzID0gPDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwKKwkJCQkweGUwIDAKKwkJCQkweGUxIDAKKwkJCQkweGUyIDAKKwkJCQkweGUzIDAKKwkJCQkweGU0IDAKKwkJCQkweGU1IDAKKwkJCQkweGU2IDAKKwkJCQkweGU3IDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJZ2xvYmFsLXV0aWxpdGllc0BlMDAwMCB7CS8vZ2xvYmFsIHV0aWxpdGllcyBibG9jaworCQkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjAtZ3V0cyIsImZzbCxwMjAyMC1ndXRzIjsKKwkJCXJlZyA9IDwweGUwMDAwIDB4MTAwMD47CisJCQlmc2wsaGFzLXJzdGNyOworCQl9OworCX07CisKKwlwY2kwOiBwY2llQGZmZTA5MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1wY2llIjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQlyZWcgPSA8MCAweGZmZTA5MDAwIDAgMHgxMDAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCWludGVycnVwdHMgPSA8MTYgMj47CisJfTsKKworCXBjaTE6IHBjaWVAZmZlMGEwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LXBjaWUiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCXJlZyA9IDwwIDB4ZmZlMGEwMDAgMCAweDEwMDA+OworCQlidXMtcmFuZ2UgPSA8MCAyNTU+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJaW50ZXJydXB0cyA9IDwxNiAyPjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMTAyMmRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMTAyMmRzLmR0cwppbmRleCA1OWVmNDA1Li40ZjY4NWE3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDEwMjJkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AxMDIyZHMuZHRzCkBAIC01Miw3ICs1Miw3IEBACiAJCSNzaXplLWNlbGxzID0gPDE+OwogCQljb21wYXRpYmxlID0gImZzbCxwMTAyMi1lbGJjIiwgImZzbCxlbGJjIiwgInNpbXBsZS1idXMiOwogCQlyZWcgPSA8MCAweGZmZTA1MDAwIDAgMHgxMDAwPjsKLQkJaW50ZXJydXB0cyA9IDwxOSAyPjsKKwkJaW50ZXJydXB0cyA9IDwxOSAyIDAgMD47CiAKIAkJcmFuZ2VzID0gPDB4MCAweDAgMHhmIDB4ZTgwMDAwMDAgMHgwODAwMDAwMAogCQkJICAweDEgMHgwIDB4ZiAweGUwMDAwMDAwIDB4MDgwMDAwMDAKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCQkJICogSVJROCBpcyBnZW5lcmF0ZWQgaWYgdGhlICJFVkVOVCIgc3dpdGNoIGlzIHByZXNzZWQKIAkJCSAqIGFuZCBQWF9DVExbRVZFU0VMXSBpcyBzZXQgdG8gMDAuCiAJCQkgKi8KLQkJCWludGVycnVwdHMgPSA8OCA4PjsKKwkJCWludGVycnVwdHMgPSA8OCA4IDAgMD47CiAJCX07CiAJfTsKIApAQCAtMTc4LDEzICsxNzgsMTMgQEAKIAkJZWNtQDEwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjItZWNtIiwgImZzbCxlY20iOwogCQkJcmVnID0gPDB4MTAwMCAweDEwMDA+OwotCQkJaW50ZXJydXB0cyA9IDwxNiAyPjsKKwkJCWludGVycnVwdHMgPSA8MTYgMiAwIDA+OwogCQl9OwogCiAJCW1lbW9yeS1jb250cm9sbGVyQDIwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjItbWVtb3J5LWNvbnRyb2xsZXIiOwogCQkJcmVnID0gPDB4MjAwMCAweDEwMDA+OwotCQkJaW50ZXJydXB0cyA9IDwxNiAyPjsKKwkJCWludGVycnVwdHMgPSA8MTYgMiAwIDA+OwogCQl9OwogCiAJCWkyY0AzMDAwIHsKQEAgLTE5Myw3ICsxOTMsNyBAQAogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8NDMgMj47CisJCQlpbnRlcnJ1cHRzID0gPDQzIDIgMCAwPjsKIAkJCWRmc3JyOwogCQl9OwogCkBAIC0yMDMsNyArMjAzLDcgQEAKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwogCQkJcmVnID0gPDB4MzEwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQzIDI+OworCQkJaW50ZXJydXB0cyA9IDw0MyAyIDAgMD47CiAJCQlkZnNycjsKIAogCQkJd204Nzc2OmNvZGVjQDFhIHsKQEAgLTIyMCw3ICsyMjAsNyBAQAogCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKIAkJCXJlZyA9IDwweDQ1MDAgMHgxMDA+OwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwotCQkJaW50ZXJydXB0cyA9IDw0MiAyPjsKKwkJCWludGVycnVwdHMgPSA8NDIgMiAwIDA+OwogCQl9OwogCiAJCXNlcmlhbDE6IHNlcmlhbEA0NjAwIHsKQEAgLTIyOSw3ICsyMjksNyBAQAogCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKIAkJCXJlZyA9IDwweDQ2MDAgMHgxMDA+OwogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwotCQkJaW50ZXJydXB0cyA9IDw0MiAyPjsKKwkJCWludGVycnVwdHMgPSA8NDIgMiAwIDA+OwogCQl9OwogCiAJCXNwaUA3MDAwIHsKQEAgLTIzOCw3ICsyMzgsNyBAQAogCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQljb21wYXRpYmxlID0gImZzbCxlc3BpIjsKIAkJCXJlZyA9IDwweDcwMDAgMHgxMDAwPjsKLQkJCWludGVycnVwdHMgPSA8NTkgMHgyPjsKKwkJCWludGVycnVwdHMgPSA8NTkgMHgyIDAgMD47CiAJCQllc3BpLG51bS1zcy1iaXRzID0gPDQ+OwogCQkJbW9kZSA9ICJjcHUiOwogCkBAIC0yNzUsNyArMjc1LDcgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2MTAtc3NpIjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlyZWcgPSA8MHgxNTAwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDc1IDI+OworCQkJaW50ZXJydXB0cyA9IDw3NSAyIDAgMD47CiAJCQlmc2wsbW9kZSA9ICJpMnMtc2xhdmUiOwogCQkJY29kZWMtaGFuZGxlID0gPCZ3bTg3NzY+OwogCQkJZnNsLHBsYXliYWNrLWRtYSA9IDwmZG1hMDA+OwpAQCAtMjk0LDI1ICsyOTQsMjUgQEAKIAkJCQljb21wYXRpYmxlID0gImZzbCxzc2ktZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDAgMHg4MD47CiAJCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDc2IDI+OworCQkJCWludGVycnVwdHMgPSA8NzYgMiAwIDA+OwogCQkJfTsKIAkJCWRtYTAxOiBkbWEtY2hhbm5lbEA4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsc3NpLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHg4MCAweDgwPjsKIAkJCQljZWxsLWluZGV4ID0gPDE+OwotCQkJCWludGVycnVwdHMgPSA8NzcgMj47CisJCQkJaW50ZXJydXB0cyA9IDw3NyAyIDAgMD47CiAJCQl9OwogCQkJZG1hLWNoYW5uZWxAMTAwIHsKIAkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgxMDAgMHg4MD47CiAJCQkJY2VsbC1pbmRleCA9IDwyPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDc4IDI+OworCQkJCWludGVycnVwdHMgPSA8NzggMiAwIDA+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDE4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTgwIDB4ODA+OwogCQkJCWNlbGwtaW5kZXggPSA8Mz47Ci0JCQkJaW50ZXJydXB0cyA9IDw3OSAyPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDc5IDIgMCAwPjsKIAkJCX07CiAJCX07CiAKQEAgLTMyMCw3ICszMjAsNyBAQAogCQkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWdwaW8iOwogCQkJcmVnID0gPDB4ZjAwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQ3IDB4Mj47CisJCQlpbnRlcnJ1cHRzID0gPDQ3IDB4MiAwIDA+OwogCQkJZ3Bpby1jb250cm9sbGVyOwogCQl9OwogCkBAIC0zMjksNyArMzI5LDcgQEAKIAkJCXJlZyA9IDwweDIwMDAwIDB4MTAwMD47CiAJCQljYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcwogCQkJY2FjaGUtc2l6ZSA9IDwweDQwMDAwPjsgLy8gTDIsIDI1NksKLQkJCWludGVycnVwdHMgPSA8MTYgMj47CisJCQlpbnRlcnJ1cHRzID0gPDE2IDIgMCAwPjsKIAkJfTsKIAogCQlkbWFAMjEzMDAgewpAQCAtMzQzLDI1ICszNDMsMjUgQEAKIAkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKIAkJCQlyZWcgPSA8MHgwIDB4ODA+OwogCQkJCWNlbGwtaW5kZXggPSA8MD47Ci0JCQkJaW50ZXJydXB0cyA9IDwyMCAyPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIwIDIgMCAwPjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEA4MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4ODAgMHg4MD47CiAJCQkJY2VsbC1pbmRleCA9IDwxPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDIxIDI+OworCQkJCWludGVycnVwdHMgPSA8MjEgMiAwIDA+OwogCQkJfTsKIAkJCWRtYS1jaGFubmVsQDEwMCB7CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CiAJCQkJcmVnID0gPDB4MTAwIDB4ODA+OwogCQkJCWNlbGwtaW5kZXggPSA8Mj47Ci0JCQkJaW50ZXJydXB0cyA9IDwyMiAyPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIyIDIgMCAwPjsKIAkJCX07CiAJCQlkbWEtY2hhbm5lbEAxODAgewogCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOwogCQkJCXJlZyA9IDwweDE4MCAweDgwPjsKIAkJCQljZWxsLWluZGV4ID0gPDM+OwotCQkJCWludGVycnVwdHMgPSA8MjMgMj47CisJCQkJaW50ZXJydXB0cyA9IDwyMyAyIDAgMD47CiAJCQl9OwogCQl9OwogCkBAIC0zNzAsNyArMzcwLDcgQEAKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wtdXNiMi1kciI7CiAJCQlyZWcgPSA8MHgyMjAwMCAweDEwMDA+OwotCQkJaW50ZXJydXB0cyA9IDwyOCAweDI+OworCQkJaW50ZXJydXB0cyA9IDwyOCAweDIgMCAwPjsKIAkJCXBoeV90eXBlID0gInVscGkiOwogCQl9OwogCkBAIC0zODEsMTEgKzM4MSwxMSBAQAogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwIDB4YjAwMzAgMHg0PjsKIAogCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdHMgPSA8MyAxPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDMgMSAwIDA+OwogCQkJCXJlZyA9IDwweDE+OwogCQkJfTsKIAkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHRzID0gPDkgMT47CisJCQkJaW50ZXJydXB0cyA9IDw5IDEgMCAwPjsKIAkJCQlyZWcgPSA8MHgyPjsKIAkJCX07CiAJCX07CkBAIC00MTYsMTMgKzQxNiwxMyBAQAogCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJCXJlZyA9IDwweEIwMDAwIDB4MTAwMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CisJCQkJaW50ZXJydXB0cyA9IDwyOSAyIDAgMCAzMCAyIDAgMCAzNCAyIDAgMD47CiAJCQl9OwogCQkJcXVldWUtZ3JvdXBAMXsKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCQlyZWcgPSA8MHhCNDAwMCAweDEwMDA+OwotCQkJCWludGVycnVwdHMgPSA8MTcgMiAxOCAyIDI0IDI+OworCQkJCWludGVycnVwdHMgPSA8MTcgMiAwIDAgMTggMiAwIDAgMjQgMiAwIDA+OwogCQkJfTsKIAkJfTsKIApAQCAtNDQzLDIwICs0NDMsMjAgQEAKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCQlyZWcgPSA8MHhCMTAwMCAweDEwMDA+OwotCQkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OworCQkJCWludGVycnVwdHMgPSA8MzUgMiAwIDAgMzYgMiAwIDAgNDAgMiAwIDA+OwogCQkJfTsKIAkJCXF1ZXVlLWdyb3VwQDF7CiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQkJcmVnID0gPDB4QjUwMDAgMHgxMDAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDUxIDIgNTIgMiA2NyAyPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDUxIDIgMCAwIDUyIDIgMCAwIDY3IDIgMCAwPjsKIAkJCX07CiAJCX07CiAKIAkJc2RoY2lAMmUwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjItZXNkaGMiLCAiZnNsLGVzZGhjIjsKIAkJCXJlZyA9IDwweDJlMDAwIDB4MTAwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDcyIDB4Mj47CisJCQlpbnRlcnJ1cHRzID0gPDcyIDB4MiAwIDA+OwogCQkJZnNsLHNkaGNpLWF1dG8tY21kMTI7CiAJCQkvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CkBAIC00NjcsNyArNDY3LDcgQEAKIAkJCQkgICAgICJmc2wsc2VjMi40IiwgImZzbCxzZWMyLjIiLCAiZnNsLHNlYzIuMSIsCiAJCQkJICAgICAiZnNsLHNlYzIuMCI7CiAJCQlyZWcgPSA8MHgzMDAwMCAweDEwMDAwPjsKLQkJCWludGVycnVwdHMgPSA8NDUgMiA1OCAyPjsKKwkJCWludGVycnVwdHMgPSA8NDUgMiAwIDAgNTggMiAwIDA+OwogCQkJZnNsLG51bS1jaGFubmVscyA9IDw0PjsKIAkJCWZzbCxjaGFubmVsLWZpZm8tbGVuID0gPDI0PjsKIAkJCWZzbCxleGVjLXVuaXRzLW1hc2sgPSA8MHg5N2M+OwpAQCAtNDc4LDE0ICs0NzgsMTQgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLHAxMDIyLXNhdGEiLCAiZnNsLHBxLXNhdGEtdjIiOwogCQkJcmVnID0gPDB4MTgwMDAgMHgxMDAwPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47Ci0JCQlpbnRlcnJ1cHRzID0gPDc0IDB4Mj47CisJCQlpbnRlcnJ1cHRzID0gPDc0IDB4MiAwIDA+OwogCQl9OwogCiAJCXNhdGFAMTkwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wscDEwMjItc2F0YSIsICJmc2wscHEtc2F0YS12MiI7CiAJCQlyZWcgPSA8MHgxOTAwMCAweDEwMDA+OwogCQkJY2VsbC1pbmRleCA9IDwyPjsKLQkJCWludGVycnVwdHMgPSA8NDEgMHgyPjsKKwkJCWludGVycnVwdHMgPSA8NDEgMHgyIDAgMD47CiAJCX07CiAKIAkJcG93ZXJAZTAwNzB7CkBAIC00OTYsMjEgKzQ5NiwzMyBAQAogCQlkaXNwbGF5QDEwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLGRpdSIsICJmc2wscDEwMjItZGl1IjsKIAkJCXJlZyA9IDwweDEwMDAwIDEwMDA+OwotCQkJaW50ZXJydXB0cyA9IDw2NCAyPjsKKwkJCWludGVycnVwdHMgPSA8NjQgMiAwIDA+OwogCQl9OwogCiAJCXRpbWVyQDQxMTAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1waWMtZ2xvYmFsLXRpbWVyIjsKLQkJCXJlZyA9IDwweDQxMTAwIDB4MjA0PjsKLQkJCWludGVycnVwdHMgPSA8MHhmNyAweDI+OworCQkJcmVnID0gPDB4NDExMDAgMHgxMDAgMHg0MTMwMCA0PjsKKwkJCWludGVycnVwdHMgPSA8MCAwIDMgMAorCQkJICAgICAgICAgICAgICAxIDAgMyAwCisJCQkgICAgICAgICAgICAgIDIgMCAzIDAKKwkJCSAgICAgICAgICAgICAgMyAwIDMgMD47CisJCX07CisKKwkJdGltZXJANDIxMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBpYy1nbG9iYWwtdGltZXIiOworCQkJcmVnID0gPDB4NDIxMDAgMHgxMDAgMHg0MjMwMCA0PjsKKwkJCWludGVycnVwdHMgPSA8NCAwIDMgMAorCQkJICAgICAgICAgICAgICA1IDAgMyAwCisJCQkgICAgICAgICAgICAgIDYgMCAzIDAKKwkJCSAgICAgICAgICAgICAgNyAwIDMgMD47CiAJCX07CiAKIAkJbXBpYzogcGljQDQwMDAwIHsKIAkJCWludGVycnVwdC1jb250cm9sbGVyOwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47Ci0JCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDw0PjsKIAkJCXJlZyA9IDwweDQwMDAwIDB4NDAwMDA+OwotCQkJY29tcGF0aWJsZSA9ICJjaHJwLG9wZW4tcGljIjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1waWMiOwogCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOwogCQl9OwogCkBAIC01MTksMTQgKzUzMSwxNCBAQAogCQkJcmVnID0gPDB4NDE2MDAgMHg4MD47CiAJCQltc2ktYXZhaWxhYmxlLXJhbmdlcyA9IDwwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8Ci0JCQkJMHhlMCAwCi0JCQkJMHhlMSAwCi0JCQkJMHhlMiAwCi0JCQkJMHhlMyAwCi0JCQkJMHhlNCAwCi0JCQkJMHhlNSAwCi0JCQkJMHhlNiAwCi0JCQkJMHhlNyAwPjsKKwkJCQkweGUwIDAgMCAwCisJCQkJMHhlMSAwIDAgMAorCQkJCTB4ZTIgMCAwIDAKKwkJCQkweGUzIDAgMCAwCisJCQkJMHhlNCAwIDAgMAorCQkJCTB4ZTUgMCAwIDAKKwkJCQkweGU2IDAgMCAwCisJCQkJMHhlNyAwIDAgMD47CiAJCX07CiAKIAkJZ2xvYmFsLXV0aWxpdGllc0BlMDAwMCB7CS8vZ2xvYmFsIHV0aWxpdGllcyBibG9jawpAQCAtNTQ3LDcgKzU1OSw3IEBACiAJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAgMHhjIDB4MjAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKIAkJCSAgMHgxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZiAweGZmYzEwMDAwIDB4MCAweDEwMDAwPjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKLQkJaW50ZXJydXB0cyA9IDwxNiAyPjsKKwkJaW50ZXJydXB0cyA9IDwxNiAyIDAgMD47CiAJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMCAwIDc+OwogCQlpbnRlcnJ1cHQtbWFwID0gPAogCQkJLyogSURTRUwgMHgwICovCkBAIC01ODIsNyArNTk0LDcgQEAKIAkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhjMDAwMDAwMCAweGMgMHg0MDAwMDAwMCAweDAgMHgyMDAwMDAwMAogCQkJICAweDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhmIDB4ZmZjMjAwMDAgMHgwIDB4MTAwMDA+OwogCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OwotCQlpbnRlcnJ1cHRzID0gPDE2IDI+OworCQlpbnRlcnJ1cHRzID0gPDE2IDIgMCAwPjsKIAkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAwIDAgNz47CiAJCWludGVycnVwdC1tYXAgPSA8CiAJCQkvKiBJRFNFTCAweDAgKi8KQEAgLTYxOCw3ICs2MzAsNyBAQAogCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweDgwMDAwMDAwIDB4YyAweDAwMDAwMDAwIDB4MCAweDIwMDAwMDAwCiAJCQkgIDB4MTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGYgMHhmZmMwMDAwMCAweDAgMHgxMDAwMD47CiAJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47Ci0JCWludGVycnVwdHMgPSA8MTYgMj47CisJCWludGVycnVwdHMgPSA8MTYgMiAwIDA+OwogCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDAgMCA3PjsKIAkJaW50ZXJydXB0LW1hcCA9IDwKIAkJCS8qIElEU0VMIDB4MCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AyMDIwZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AyMDIwZHMuZHRzCmluZGV4IDExMDE5MTQuLjJiY2YzNjggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMjAyMGRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDIwMjBkcy5kdHMKQEAgLTEsNyArMSw3IEBACiAvKgogICogUDIwMjAgRFMgRGV2aWNlIFRyZWUgU291cmNlCiAgKgotICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICogQ29weXJpZ2h0IDIwMDktMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTksMTIgKzksMTEgQEAKICAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotL2R0cy12MS87CisvaW5jbHVkZS8gInAyMDIwc2kuZHRzaSIKKwogLyB7Ci0JbW9kZWwgPSAiZnNsLFAyMDIwIjsKKwltb2RlbCA9ICJmc2wsUDIwMjBEUyI7CiAJY29tcGF0aWJsZSA9ICJmc2wsUDIwMjBEUyI7Ci0JI2FkZHJlc3MtY2VsbHMgPSA8Mj47Ci0JI3NpemUtY2VsbHMgPSA8Mj47CiAKIAlhbGlhc2VzIHsKIAkJZXRoZXJuZXQwID0gJmVuZXQwOwpAQCAtMjcsMzUgKzI2LDEzIEBACiAJCXBjaTIgPSAmcGNpMjsKIAl9OwogCi0JY3B1cyB7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQotCQlQb3dlclBDLFAyMDIwQDAgewotCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKLQkJCXJlZyA9IDwweDA+OwotCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OwotCQl9OwotCi0JCVBvd2VyUEMsUDIwMjBAMSB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwotCQkJcmVnID0gPDB4MT47Ci0JCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47Ci0JCX07Ci0JfTsKIAogCW1lbW9yeSB7CiAJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CiAJfTsKIAogCWxvY2FsYnVzQGZmZTA1MDAwIHsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47Ci0JCSNzaXplLWNlbGxzID0gPDE+OwogCQljb21wYXRpYmxlID0gImZzbCxlbGJjIiwgInNpbXBsZS1idXMiOwotCQlyZWcgPSA8MCAweGZmZTA1MDAwIDAgMHgxMDAwPjsKLQkJaW50ZXJydXB0cyA9IDwxOSAyPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0KIAkJcmFuZ2VzID0gPDB4MCAweDAgMHgwIDB4ZTgwMDAwMDAgMHgwODAwMDAwMAogCQkJICAweDEgMHgwIDB4MCAweGUwMDAwMDAwIDB4MDgwMDAwMDAKIAkJCSAgMHgyIDB4MCAweDAgMHhmZmEwMDAwMCAweDAwMDQwMDAwCkBAIC0xNTgsMzUyICsxMzUsNzcgQEAKIAl9OwogCiAJc29jQGZmZTAwMDAwIHsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDE+OwotCQlkZXZpY2VfdHlwZSA9ICJzb2MiOwotCQljb21wYXRpYmxlID0gImZzbCxwMjAyMC1pbW1yIiwgInNpbXBsZS1idXMiOwotCQlyYW5nZXMgPSA8MHgwIDAgMHhmZmUwMDAwMCAweDEwMDAwMD47Ci0JCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBGaWxsZWQgb3V0IGJ5IHVib290LgotCi0JCWVjbS1sYXdAMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxlY20tbGF3IjsKLQkJCXJlZyA9IDwweDAgMHgxMDAwPjsKLQkJCWZzbCxudW0tbGF3cyA9IDwxMj47Ci0JCX07Ci0KLQkJZWNtQDEwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wscDIwMjAtZWNtIiwgImZzbCxlY20iOwotCQkJcmVnID0gPDB4MTAwMCAweDEwMDA+OwotCQkJaW50ZXJydXB0cyA9IDwxNyAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQl9OwotCi0JCW1lbW9yeS1jb250cm9sbGVyQDIwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wscDIwMjAtbWVtb3J5LWNvbnRyb2xsZXIiOwotCQkJcmVnID0gPDB4MjAwMCAweDEwMDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlpbnRlcnJ1cHRzID0gPDE4IDI+OwotCQl9OwotCi0JCWkyY0AzMDAwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKLQkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDw0MyAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJZGZzcnI7Ci0JCX07Ci0KLQkJaTJjQDMxMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNlbGwtaW5kZXggPSA8MT47Ci0JCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwotCQkJcmVnID0gPDB4MzEwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQzIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlkZnNycjsKLQkJfTsKLQotCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKLQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQlyZWcgPSA8MHg0NTAwIDB4MTAwPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKLQkJCWludGVycnVwdHMgPSA8NDIgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJfTsKLQotCQlzZXJpYWwxOiBzZXJpYWxANDYwMCB7Ci0JCQljZWxsLWluZGV4ID0gPDE+OwotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKLQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQlyZWcgPSA8MHg0NjAwIDB4MTAwPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKLQkJCWludGVycnVwdHMgPSA8NDIgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJfTsKLQotCQlzcGlANzAwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxlc3BpIjsKLQkJCXJlZyA9IDwweDcwMDAgMHgxMDAwPjsKLQkJCWludGVycnVwdHMgPSA8NTkgMHgyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQl9OwotCi0JCWRtYUBjMzAwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYSI7Ci0JCQlyZWcgPSA8MHhjMzAwIDB4ND47Ci0JCQlyYW5nZXMgPSA8MHgwIDB4YzEwMCAweDIwMD47Ci0JCQljZWxsLWluZGV4ID0gPDE+OwotCQkJZG1hLWNoYW5uZWxAMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7Ci0JCQkJcmVnID0gPDB4MCAweDgwPjsKLQkJCQljZWxsLWluZGV4ID0gPDA+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NzYgMj47Ci0JCQl9OwotCQkJZG1hLWNoYW5uZWxAODAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOwotCQkJCXJlZyA9IDwweDgwIDB4ODA+OwotCQkJCWNlbGwtaW5kZXggPSA8MT47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw3NyAyPjsKLQkJCX07Ci0JCQlkbWEtY2hhbm5lbEAxMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOwotCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKLQkJCQljZWxsLWluZGV4ID0gPDI+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NzggMj47Ci0JCQl9OwotCQkJZG1hLWNoYW5uZWxAMTgwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKLQkJCQlyZWcgPSA8MHgxODAgMHg4MD47Ci0JCQkJY2VsbC1pbmRleCA9IDwzPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDc5IDI+OwotCQkJfTsKLQkJfTsKLQotCQlncGlvOiBncGlvLWNvbnRyb2xsZXJAZjAwMCB7Ci0JCQkjZ3Bpby1jZWxscyA9IDwyPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZ3BpbyI7Ci0JCQlyZWcgPSA8MHhmMDAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8NDcgMHgyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJZ3Bpby1jb250cm9sbGVyOwotCQl9OwotCi0JCUwyOiBsMi1jYWNoZS1jb250cm9sbGVyQDIwMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLWwyLWNhY2hlLWNvbnRyb2xsZXIiOwotCQkJcmVnID0gPDB4MjAwMDAgMHgxMDAwPjsKLQkJCWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCi0JCQljYWNoZS1zaXplID0gPDB4ODAwMDA+OyAvLyBMMiwgNTEyawotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlpbnRlcnJ1cHRzID0gPDE2IDI+OwotCQl9OwotCi0JCWRtYUAyMTMwMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEiOwotCQkJcmVnID0gPDB4MjEzMDAgMHg0PjsKLQkJCXJhbmdlcyA9IDwweDAgMHgyMTEwMCAweDIwMD47Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJZG1hLWNoYW5uZWxAMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7Ci0JCQkJcmVnID0gPDB4MCAweDgwPjsKLQkJCQljZWxsLWluZGV4ID0gPDA+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MjAgMj47Ci0JCQl9OwotCQkJZG1hLWNoYW5uZWxAODAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOwotCQkJCXJlZyA9IDwweDgwIDB4ODA+OwotCQkJCWNlbGwtaW5kZXggPSA8MT47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwyMSAyPjsKLQkJCX07Ci0JCQlkbWEtY2hhbm5lbEAxMDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOwotCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKLQkJCQljZWxsLWluZGV4ID0gPDI+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MjIgMj47Ci0JCQl9OwotCQkJZG1hLWNoYW5uZWxAMTgwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKLQkJCQlyZWcgPSA8MHgxODAgMHg4MD47Ci0JCQkJY2VsbC1pbmRleCA9IDwzPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDIzIDI+OwotCQkJfTsKLQkJfTsKIAogCQl1c2JAMjIwMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLXVzYjItZHIiOwotCQkJcmVnID0gPDB4MjIwMDAgMHgxMDAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJaW50ZXJydXB0cyA9IDwyOCAweDI+OwogCQkJcGh5X3R5cGUgPSAidWxwaSI7CiAJCX07CiAKLQkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7Ci0JCQltb2RlbCA9ICJlVFNFQyI7Ci0JCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwotCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKLQkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwotCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07Ci0JCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47Ci0JCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKLQkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCQltZGlvQDI0NTIwIHsKKwkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDMgMT47CisJCQkJcmVnID0gPDB4MD47CisJCQl9OworCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MyAxPjsKKwkJCQlyZWcgPSA8MHgxPjsKKwkJCX07CisJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwzIDE+OworCQkJCXJlZyA9IDwweDI+OworCQkJfTsKKwkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCXJlZyA9IDwweDExPjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCX07CiAKLQkJCW1kaW9ANTIwIHsKLQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKwkJfTsKIAotCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKLQkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJCWludGVycnVwdHMgPSA8MyAxPjsKLQkJCQkJcmVnID0gPDB4MD47Ci0JCQkJfTsKLQkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCQlpbnRlcnJ1cHRzID0gPDMgMT47Ci0JCQkJCXJlZyA9IDwweDE+OwotCQkJCX07Ci0JCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgewotCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQkJaW50ZXJydXB0cyA9IDwzIDE+OwotCQkJCQlyZWcgPSA8MHgyPjsKLQkJCQl9OwotCQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJCX07CisJCW1kaW9AMjU1MjAgeworCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJcmVnID0gPDB4MTE+OworCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwogCQkJfTsKIAkJfTsKIAorCQltZGlvQDI2NTIwIHsKKwkJCXRiaTI6IHRiaS1waHlAMTEgeworCQkJCXJlZyA9IDwweDExPjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCX07CisKKwkJfTsKKworCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CisJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCQl9OworCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJY2VsbC1pbmRleCA9IDwxPjsKLQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwotCQkJbW9kZWwgPSAiZVRTRUMiOwotCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKLQkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47Ci0JCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKLQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwotCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKIAotCQkJbWRpb0A1MjAgewotCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCQlyZWcgPSA8MHg1MjAgMHgyMD47Ci0KLQkJCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQkJcmVnID0gPDB4MTE+OwotCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCQl9OwotCQkJfTsKIAkJfTsKIAogCQllbmV0MjogZXRoZXJuZXRAMjYwMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCWNlbGwtaW5kZXggPSA8Mj47Ci0JCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKLQkJCW1vZGVsID0gImVUU0VDIjsKLQkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7Ci0JCQlyZWcgPSA8MHgyNjAwMCAweDEwMDA+OwotCQkJcmFuZ2VzID0gPDB4MCAweDI2MDAwIDB4MTAwMD47Ci0JCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKLQkJCWludGVycnVwdHMgPSA8MzEgMiAzMiAyIDMzIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkyPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7Ci0KLQkJCW1kaW9ANTIwIHsKLQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQkJcmVnID0gPDB4NTIwIDB4MjA+OwotCi0JCQkJdGJpMjogdGJpLXBoeUAxMSB7Ci0JCQkJCXJlZyA9IDwweDExPjsKLQkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQkJfTsKLQkJCX07CiAJCX07CiAKLQkJc2RoY2lAMmUwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wscDIwMjAtZXNkaGMiLCAiZnNsLGVzZGhjIjsKLQkJCXJlZyA9IDwweDJlMDAwIDB4MTAwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDcyIDB4Mj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCS8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKLQkJfTsKLQotCQljcnlwdG9AMzAwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjMy4xIiwgImZzbCxzZWMzLjAiLCAiZnNsLHNlYzIuNCIsCi0JCQkJICAgICAiZnNsLHNlYzIuMiIsICJmc2wsc2VjMi4xIiwgImZzbCxzZWMyLjAiOwotCQkJcmVnID0gPDB4MzAwMDAgMHgxMDAwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQ1IDIgNTggMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWZzbCxudW0tY2hhbm5lbHMgPSA8ND47Ci0JCQlmc2wsY2hhbm5lbC1maWZvLWxlbiA9IDwyND47Ci0JCQlmc2wsZXhlYy11bml0cy1tYXNrID0gPDB4YmZlPjsKLQkJCWZzbCxkZXNjcmlwdG9yLXR5cGVzLW1hc2sgPSA8MHgzYWIwZWJmPjsKLQkJfTsKLQotCQltcGljOiBwaWNANDAwMDAgewotCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKLQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47Ci0JCQlyZWcgPSA8MHg0MDAwMCAweDQwMDAwPjsKLQkJCWNvbXBhdGlibGUgPSAiY2hycCxvcGVuLXBpYyI7Ci0JCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7Ci0JCX07CiAKIAkJbXNpQDQxNjAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1waWMtbXNpIjsKLQkJCXJlZyA9IDwweDQxNjAwIDB4ODA+OwotCQkJbXNpLWF2YWlsYWJsZS1yYW5nZXMgPSA8MCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPAotCQkJCTB4ZTAgMAotCQkJCTB4ZTEgMAotCQkJCTB4ZTIgMAotCQkJCTB4ZTMgMAotCQkJCTB4ZTQgMAotCQkJCTB4ZTUgMAotCQkJCTB4ZTYgMAotCQkJCTB4ZTcgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJfTsKLQotCQlnbG9iYWwtdXRpbGl0aWVzQGUwMDAwIHsJLy9nbG9iYWwgdXRpbGl0aWVzIGJsb2NrCi0JCQljb21wYXRpYmxlID0gImZzbCxwMjAyMC1ndXRzIjsKLQkJCXJlZyA9IDwweGUwMDAwIDB4MTAwMD47Ci0JCQlmc2wsaGFzLXJzdGNyOwogCQl9OwogCX07CiAKIAlwY2kwOiBwY2llQGZmZTA4MDAwIHsKLQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1wY2llIjsKLQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKLQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8Mj47Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MCAweGZmZTA4MDAwIDAgMHgxMDAwPjsKLQkJYnVzLXJhbmdlID0gPDAgMjU1PjsKIAkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHg4MDAwMDAwMCAwIDB4ODAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKIAkJCSAgMHgxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDAgMHhmZmMwMDAwMCAweDAgMHgxMDAwMD47Ci0JCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQlpbnRlcnJ1cHRzID0gPDI0IDI+OwogCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKIAkJaW50ZXJydXB0LW1hcCA9IDwKIAkJCS8qIElEU0VMIDB4MCAqLwpAQCAtNTI4LDE4ICsyMzAsOCBAQAogCX07CiAKIAlwY2kxOiBwY2llQGZmZTA5MDAwIHsKLQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1wY2llIjsKLQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKLQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8Mj47Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MCAweGZmZTA5MDAwIDAgMHgxMDAwPjsKLQkJYnVzLXJhbmdlID0gPDAgMjU1PjsKIAkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhhMDAwMDAwMCAwIDB4YTAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKIAkJCSAgMHgxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDAgMHhmZmMxMDAwMCAweDAgMHgxMDAwMD47Ci0JCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQlpbnRlcnJ1cHRzID0gPDI1IDI+OwogCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmZjAwIDB4MCAweDAgMHg3PjsKIAkJaW50ZXJydXB0LW1hcCA9IDwKIApAQCAtNjY3LDE4ICszNTksOCBAQAogCX07CiAKIAlwY2kyOiBwY2llQGZmZTBhMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1wY2llIjsKLQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKLQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8Mj47Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MCAweGZmZTBhMDAwIDAgMHgxMDAwPjsKLQkJYnVzLXJhbmdlID0gPDAgMjU1PjsKIAkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhjMDAwMDAwMCAwIDB4YzAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKIAkJCSAgMHgxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDAgMHhmZmMyMDAwMCAweDAgMHgxMDAwMD47Ci0JCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQlpbnRlcnJ1cHRzID0gPDI2IDI+OwogCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKIAkJaW50ZXJydXB0LW1hcCA9IDwKIAkJCS8qIElEU0VMIDB4MCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AyMDIwcmRiLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMjAyMHJkYi5kdHMKaW5kZXggZTJkNDhmZC4uMzc4MmE1OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AyMDIwcmRiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDIwMjByZGIuZHRzCkBAIC05LDEyICs5LDExIEBACiAgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLS9kdHMtdjEvOworL2luY2x1ZGUvICJwMjAyMHNpLmR0c2kiCisKIC8gewotCW1vZGVsID0gImZzbCxQMjAyMCI7CisJbW9kZWwgPSAiZnNsLFAyMDIwUkRCIjsKIAljb21wYXRpYmxlID0gImZzbCxQMjAyMFJEQiI7Ci0JI2FkZHJlc3MtY2VsbHMgPSA8Mj47Ci0JI3NpemUtY2VsbHMgPSA8Mj47CiAKIAlhbGlhc2VzIHsKIAkJZXRoZXJuZXQwID0gJmVuZXQwOwpAQCAtMjYsMzQgKzI1LDExIEBACiAJCXBjaTEgPSAmcGNpMTsKIAl9OwogCi0JY3B1cyB7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQotCQlQb3dlclBDLFAyMDIwQDAgewotCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKLQkJCXJlZyA9IDwweDA+OwotCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OwotCQl9OwotCi0JCVBvd2VyUEMsUDIwMjBAMSB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwotCQkJcmVnID0gPDB4MT47Ci0JCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47Ci0JCX07Ci0JfTsKLQogCW1lbW9yeSB7CiAJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CiAJfTsKIAogCWxvY2FsYnVzQGZmZTA1MDAwIHsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47Ci0JCSNzaXplLWNlbGxzID0gPDE+OwotCQljb21wYXRpYmxlID0gImZzbCxwMjAyMC1lbGJjIiwgImZzbCxlbGJjIiwgInNpbXBsZS1idXMiOwotCQlyZWcgPSA8MCAweGZmZTA1MDAwIDAgMHgxMDAwPjsKLQkJaW50ZXJydXB0cyA9IDwxOSAyPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAKIAkJLyogTk9SIGFuZCBOQU5EIEZsYXNoZXMgKi8KIAkJcmFuZ2VzID0gPDB4MCAweDAgMHgwIDB4ZWYwMDAwMDAgMHgwMTAwMDAwMApAQCAtMTY1LDkwICsxNDEsMTYgQEAKIAl9OwogCiAJc29jQGZmZTAwMDAwIHsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDE+OwotCQlkZXZpY2VfdHlwZSA9ICJzb2MiOwotCQljb21wYXRpYmxlID0gImZzbCxwMjAyMC1pbW1yIiwgInNpbXBsZS1idXMiOwotCQlyYW5nZXMgPSA8MHgwICAweDAgMHhmZmUwMDAwMCAweDEwMDAwMD47Ci0JCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBGaWxsZWQgb3V0IGJ5IHVib290LgotCi0JCWVjbS1sYXdAMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxlY20tbGF3IjsKLQkJCXJlZyA9IDwweDAgMHgxMDAwPjsKLQkJCWZzbCxudW0tbGF3cyA9IDwxMj47Ci0JCX07Ci0KLQkJZWNtQDEwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wscDIwMjAtZWNtIiwgImZzbCxlY20iOwotCQkJcmVnID0gPDB4MTAwMCAweDEwMDA+OwotCQkJaW50ZXJydXB0cyA9IDwxNyAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQl9OwotCi0JCW1lbW9yeS1jb250cm9sbGVyQDIwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wscDIwMjAtbWVtb3J5LWNvbnRyb2xsZXIiOwotCQkJcmVnID0gPDB4MjAwMCAweDEwMDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlpbnRlcnJ1cHRzID0gPDE4IDI+OwotCQl9OwotCiAJCWkyY0AzMDAwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKLQkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDw0MyAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJZGZzcnI7CiAJCQlydGNANjggewogCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMzOSI7CiAJCQkJcmVnID0gPDB4Njg+OwogCQkJfTsKIAkJfTsKIAotCQlpMmNAMzEwMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY2VsbC1pbmRleCA9IDwxPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7Ci0JCQlyZWcgPSA8MHgzMTAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8NDMgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWRmc3JyOwotCQl9OworCXNwaUA3MDAwIHsKIAotCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKLQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQlyZWcgPSA8MHg0NTAwIDB4MTAwPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKLQkJCWludGVycnVwdHMgPSA8NDIgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJfTsKLQotCQlzZXJpYWwxOiBzZXJpYWxANDYwMCB7Ci0JCQljZWxsLWluZGV4ID0gPDE+OwotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKLQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQlyZWcgPSA8MHg0NjAwIDB4MTAwPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKLQkJCWludGVycnVwdHMgPSA8NDIgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJfTsKLQotCQlzcGlANzAwMCB7Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGVzcGkiOwotCQkJcmVnID0gPDB4NzAwMCAweDEwMDA+OwotCQkJaW50ZXJydXB0cyA9IDw1OSAweDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQltb2RlID0gImNwdSI7Ci0KLQkJCWZzbF9tMjVwODBAMCB7CisJCWZzbF9tMjVwODBAMCB7CiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsZXNwaS1mbGFzaCI7CkBAIC0yOTQsMjU0ICsxOTYsNjggQEAKIAkJCX07CiAJCX07CiAKLQkJZG1hQGMzMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hIjsKLQkJCXJlZyA9IDwweGMzMDAgMHg0PjsKLQkJCXJhbmdlcyA9IDwweDAgMHhjMTAwIDB4MjAwPjsKLQkJCWNlbGwtaW5kZXggPSA8MT47Ci0JCQlkbWEtY2hhbm5lbEAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKLQkJCQlyZWcgPSA8MHgwIDB4ODA+OwotCQkJCWNlbGwtaW5kZXggPSA8MD47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw3NiAyPjsKLQkJCX07Ci0JCQlkbWEtY2hhbm5lbEA4MCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7Ci0JCQkJcmVnID0gPDB4ODAgMHg4MD47Ci0JCQkJY2VsbC1pbmRleCA9IDwxPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDc3IDI+OwotCQkJfTsKLQkJCWRtYS1jaGFubmVsQDEwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7Ci0JCQkJcmVnID0gPDB4MTAwIDB4ODA+OwotCQkJCWNlbGwtaW5kZXggPSA8Mj47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw3OCAyPjsKLQkJCX07Ci0JCQlkbWEtY2hhbm5lbEAxODAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOwotCQkJCXJlZyA9IDwweDE4MCAweDgwPjsKLQkJCQljZWxsLWluZGV4ID0gPDM+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NzkgMj47Ci0JCQl9OwotCQl9OwotCi0JCWdwaW86IGdwaW8tY29udHJvbGxlckBmMDAwIHsKLQkJCSNncGlvLWNlbGxzID0gPDI+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1ncGlvIjsKLQkJCXJlZyA9IDwweGYwMDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDw0NyAweDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlncGlvLWNvbnRyb2xsZXI7Ci0JCX07Ci0KLQkJTDI6IGwyLWNhY2hlLWNvbnRyb2xsZXJAMjAwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wscDIwMjAtbDItY2FjaGUtY29udHJvbGxlciI7Ci0JCQlyZWcgPSA8MHgyMDAwMCAweDEwMDA+OwotCQkJY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKLQkJCWNhY2hlLXNpemUgPSA8MHg4MDAwMD47IC8vIEwyLDUxMksKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJaW50ZXJydXB0cyA9IDwxNiAyPjsKLQkJfTsKLQotCQlkbWFAMjEzMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hIjsKLQkJCXJlZyA9IDwweDIxMzAwIDB4ND47Ci0JCQlyYW5nZXMgPSA8MHgwIDB4MjExMDAgMHgyMDA+OwotCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCWRtYS1jaGFubmVsQDAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOwotCQkJCXJlZyA9IDwweDAgMHg4MD47Ci0JCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDIwIDI+OwotCQkJfTsKLQkJCWRtYS1jaGFubmVsQDgwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKLQkJCQlyZWcgPSA8MHg4MCAweDgwPjsKLQkJCQljZWxsLWluZGV4ID0gPDE+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MjEgMj47Ci0JCQl9OwotCQkJZG1hLWNoYW5uZWxAMTAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKLQkJCQlyZWcgPSA8MHgxMDAgMHg4MD47Ci0JCQkJY2VsbC1pbmRleCA9IDwyPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDIyIDI+OwotCQkJfTsKLQkJCWRtYS1jaGFubmVsQDE4MCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7Ci0JCQkJcmVnID0gPDB4MTgwIDB4ODA+OwotCQkJCWNlbGwtaW5kZXggPSA8Mz47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwyMyAyPjsKLQkJCX07Ci0JCX07Ci0KIAkJdXNiQDIyMDAwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbC11c2IyLWRyIjsKLQkJCXJlZyA9IDwweDIyMDAwIDB4MTAwMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWludGVycnVwdHMgPSA8MjggMHgyPjsKIAkJCXBoeV90eXBlID0gInVscGkiOwogCQl9OwogCisJCW1kaW9AMjQ1MjAgeworCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MyAxPjsKKwkJCQlyZWcgPSA8MHgwPjsKKwkJCQl9OworCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MyAxPjsKKwkJCQlyZWcgPSA8MHgxPjsKKwkJCQl9OworCQl9OworCisJCW1kaW9AMjU1MjAgeworCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJcmVnID0gPDB4MTE+OworCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJfTsKKwkJfTsKKworCQltZGlvQDI2NTIwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7Ci0JCQltb2RlbCA9ICJlVFNFQyI7Ci0JCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwotCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKLQkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwotCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07Ci0JCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJZml4ZWQtbGluayA9IDwxIDEgMTAwMCAwIDA+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7Ci0KLQkJCW1kaW9ANTIwIHsKLQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKLQotCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKLQkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJCWludGVycnVwdHMgPSA8MyAxPjsKLQkJCQkJcmVnID0gPDB4MD47Ci0JCQkJfTsKLQkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCQlpbnRlcnJ1cHRzID0gPDMgMT47Ci0JCQkJCXJlZyA9IDwweDE+OwotCQkJCX07Ci0JCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJY2VsbC1pbmRleCA9IDwxPjsKLQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwotCQkJbW9kZWwgPSAiZVRTRUMiOwotCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKLQkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47Ci0JCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKLQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwotCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInNnbWlpIjsKLQotCQkJbWRpb0A1MjAgewotCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCQlyZWcgPSA8MHg1MjAgMHgyMD47Ci0KLQkJCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQkJcmVnID0gPDB4MTE+OwotCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCQl9OwotCQkJfTsKIAkJfTsKIAogCQllbmV0MjogZXRoZXJuZXRAMjYwMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCWNlbGwtaW5kZXggPSA8Mj47Ci0JCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKLQkJCW1vZGVsID0gImVUU0VDIjsKLQkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7Ci0JCQlyZWcgPSA8MHgyNjAwMCAweDEwMDA+OwotCQkJcmFuZ2VzID0gPDB4MCAweDI2MDAwIDB4MTAwMD47Ci0JCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKLQkJCWludGVycnVwdHMgPSA8MzEgMiAzMiAyIDMzIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOwogCQl9OwogCi0JCXNkaGNpQDJlMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLWVzZGhjIiwgImZzbCxlc2RoYyI7Ci0JCQlyZWcgPSA8MHgyZTAwMCAweDEwMDA+OwotCQkJaW50ZXJydXB0cyA9IDw3MiAweDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCi0JCQljbG9jay1mcmVxdWVuY3kgPSA8MD47Ci0JCX07Ci0KLQkJY3J5cHRvQDMwMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLHNlYzMuMSIsICJmc2wsc2VjMy4wIiwgImZzbCxzZWMyLjQiLAotCQkJCSAgICAgImZzbCxzZWMyLjIiLCAiZnNsLHNlYzIuMSIsICJmc2wsc2VjMi4wIjsKLQkJCXJlZyA9IDwweDMwMDAwIDB4MTAwMDA+OwotCQkJaW50ZXJydXB0cyA9IDw0NSAyIDU4IDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlmc2wsbnVtLWNoYW5uZWxzID0gPDQ+OwotCQkJZnNsLGNoYW5uZWwtZmlmby1sZW4gPSA8MjQ+OwotCQkJZnNsLGV4ZWMtdW5pdHMtbWFzayA9IDwweGJmZT47Ci0JCQlmc2wsZGVzY3JpcHRvci10eXBlcy1tYXNrID0gPDB4M2FiMGViZj47Ci0JCX07Ci0KLQkJbXBpYzogcGljQDQwMDAwIHsKLQkJCWludGVycnVwdC1jb250cm9sbGVyOwotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47Ci0JCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwotCQkJcmVnID0gPDB4NDAwMDAgMHg0MDAwMD47Ci0JCQljb21wYXRpYmxlID0gImNocnAsb3Blbi1waWMiOwotCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOwotCQl9OwotCi0JCW1zaUA0MTYwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxwMjAyMC1tc2kiLCAiZnNsLG1waWMtbXNpIjsKLQkJCXJlZyA9IDwweDQxNjAwIDB4ODA+OwotCQkJbXNpLWF2YWlsYWJsZS1yYW5nZXMgPSA8MCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPAotCQkJCTB4ZTAgMAotCQkJCTB4ZTEgMAotCQkJCTB4ZTIgMAotCQkJCTB4ZTMgMAotCQkJCTB4ZTQgMAotCQkJCTB4ZTUgMAotCQkJCTB4ZTYgMAotCQkJCTB4ZTcgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJfTsKLQotCQlnbG9iYWwtdXRpbGl0aWVzQGUwMDAwIHsJLy9nbG9iYWwgdXRpbGl0aWVzIGJsb2NrCi0JCQljb21wYXRpYmxlID0gImZzbCxwMjAyMC1ndXRzIjsKLQkJCXJlZyA9IDwweGUwMDAwIDB4MTAwMD47Ci0JCQlmc2wsaGFzLXJzdGNyOwotCQl9OwogCX07CiAKLQlwY2kwOiBwY2llQGZmZTA5MDAwIHsKLQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1wY2llIjsKLQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKLQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8Mj47Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MCAweGZmZTA5MDAwIDAgMHgxMDAwPjsKLQkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwlwY2kwOiBwY2llQGZmZTA4MDAwIHsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJcGNpMTogcGNpZUBmZmUwOTAwMCB7CiAJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAgMCAweGEwMDAwMDAwIDB4MCAweDIwMDAwMDAwCiAJCQkgIDB4MTAwMDAwMCAweDAgMHgwMDAwMDAwMCAwIDB4ZmZjMTAwMDAgMHgwIDB4MTAwMDA+OwotCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJaW50ZXJydXB0cyA9IDwyNSAyPjsKLQkJcGNpZUAwIHsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CisJCWludGVycnVwdC1tYXAgPSA8CisJCQkvKiBJRFNFTCAweDAgKi8KKwkJCTAwMDAgMHgwIDB4MCAweDEgJm1waWMgMHg0IDB4MQorCQkJMDAwMCAweDAgMHgwIDB4MiAmbXBpYyAweDUgMHgxCisJCQkwMDAwIDB4MCAweDAgMHgzICZtcGljIDB4NiAweDEKKwkJCTAwMDAgMHgwIDB4MCAweDQgJm1waWMgMHg3IDB4MQorCQkJPjsKKwkJCXBjaWVAMCB7CiAJCQlyZWcgPSA8MHgwIDB4MCAweDAgMHgwIDB4MD47CiAJCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwpAQCAtNTU2LDE5ICsyNzIsMTcgQEAKIAkJfTsKIAl9OwogCi0JcGNpMTogcGNpZUBmZmUwYTAwMCB7Ci0JCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDgtcGNpZSI7Ci0JCWRldmljZV90eXBlID0gInBjaSI7Ci0JCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDI+OwotCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPDAgMHhmZmUwYTAwMCAwIDB4MTAwMD47Ci0JCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJcGNpMjogcGNpZUBmZmUwYTAwMCB7CiAJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMCAweDgwMDAwMDAwIDB4MCAweDIwMDAwMDAwCiAJCQkgIDB4MTAwMDAwMCAweDAgMHgwMDAwMDAwMCAwIDB4ZmZjMDAwMDAgMHgwIDB4MTAwMDA+OwotCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJaW50ZXJydXB0cyA9IDwyNiAyPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CisJCWludGVycnVwdC1tYXAgPSA8CisJCQkvKiBJRFNFTCAweDAgKi8KKwkJCTAwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgwIDB4MQorCQkJMDAwMCAweDAgMHgwIDB4MiAmbXBpYyAweDEgMHgxCisJCQkwMDAwIDB4MCAweDAgMHgzICZtcGljIDB4MiAweDEKKwkJCTAwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgzIDB4MQorCQkJPjsKIAkJcGNpZUAwIHsKIAkJCXJlZyA9IDwweDAgMHgwIDB4MCAweDAgMHgwPjsKIAkJCSNzaXplLWNlbGxzID0gPDI+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AyMDIwcmRiX2NhbXBfY29yZTAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3AyMDIwcmRiX2NhbXBfY29yZTAuZHRzCmluZGV4IGI2OWMzYTUuLmZjOGRkZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMjAyMHJkYl9jYW1wX2NvcmUwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDIwMjByZGJfY2FtcF9jb3JlMC5kdHMKQEAgLTE0LDEyICsxNCwxMSBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0vZHRzLXYxLzsKKy9pbmNsdWRlLyAicDIwMjBzaS5kdHNpIgorCiAvIHsKLQltb2RlbCA9ICJmc2wsUDIwMjAiOworCW1vZGVsID0gImZzbCxQMjAyMFJEQiI7CiAJY29tcGF0aWJsZSA9ICJmc2wsUDIwMjBSREIiLCAiZnNsLE1QQzg1WFhSREItQ0FNUCI7Ci0JI2FkZHJlc3MtY2VsbHMgPSA8Mj47Ci0JI3NpemUtY2VsbHMgPSA8Mj47CiAKIAlhbGlhc2VzIHsKIAkJZXRoZXJuZXQxID0gJmVuZXQxOwpAQCAtMjksOTEgKzI4LDMzIEBACiAJfTsKIAogCWNwdXMgewotCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8MD47Ci0KLQkJUG93ZXJQQyxQMjAyMEAwIHsKLQkJCWRldmljZV90eXBlID0gImNwdSI7Ci0JCQlyZWcgPSA8MHgwPjsKLQkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyPjsKKwkJUG93ZXJQQyxQMjAyMEAxIHsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKKwogCX07CiAKIAltZW1vcnkgewogCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOwogCX07CiAKKwlsb2NhbGJ1c0BmZmUwNTAwMCB7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKwogCXNvY0BmZmUwMDAwMCB7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJZGV2aWNlX3R5cGUgPSAic29jIjsKLQkJY29tcGF0aWJsZSA9ICJmc2wscDIwMjAtaW1tciIsICJzaW1wbGUtYnVzIjsKLQkJcmFuZ2VzID0gPDB4MCAgMHgwIDB4ZmZlMDAwMDAgMHgxMDAwMDA+OwotCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gRmlsbGVkIG91dCBieSB1Ym9vdC4KLQotCQllY20tbGF3QDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wsZWNtLWxhdyI7Ci0JCQlyZWcgPSA8MHgwIDB4MTAwMD47Ci0JCQlmc2wsbnVtLWxhd3MgPSA8MTI+OwotCQl9OwotCi0JCWVjbUAxMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLWVjbSIsICJmc2wsZWNtIjsKLQkJCXJlZyA9IDwweDEwMDAgMHgxMDAwPjsKLQkJCWludGVycnVwdHMgPSA8MTcgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJfTsKLQotCQltZW1vcnktY29udHJvbGxlckAyMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLW1lbW9yeS1jb250cm9sbGVyIjsKLQkJCXJlZyA9IDwweDIwMDAgMHgxMDAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJaW50ZXJydXB0cyA9IDwxOCAyPjsKLQkJfTsKLQogCQlpMmNAMzAwMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7Ci0JCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8NDMgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWRmc3JyOwogCQkJcnRjQDY4IHsKIAkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzkiOwogCQkJCXJlZyA9IDwweDY4PjsKIAkJCX07CiAJCX07CiAKLQkJaTJjQDMxMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNlbGwtaW5kZXggPSA8MT47Ci0JCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwotCQkJcmVnID0gPDB4MzEwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQzIDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlkZnNycjsKLQkJfTsKLQotCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKLQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQlyZWcgPSA8MHg0NTAwIDB4MTAwPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJc2VyaWFsMTogc2VyaWFsQDQ2MDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKIAogCQlzcGlANzAwMCB7Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGVzcGkiOwotCQkJcmVnID0gPDB4NzAwMCAweDEwMDA+OwotCQkJaW50ZXJydXB0cyA9IDw1OSAweDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQltb2RlID0gImNwdSI7CiAKIAkJCWZzbF9tMjVwODBAMCB7CiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC0xNjEsNzYgKzEwMiwxNSBAQAogCQkJfTsKIAkJfTsKIAotCQlncGlvOiBncGlvLWNvbnRyb2xsZXJAZjAwMCB7Ci0JCQkjZ3Bpby1jZWxscyA9IDwyPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZ3BpbyI7Ci0JCQlyZWcgPSA8MHhmMDAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8NDcgMHgyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJZ3Bpby1jb250cm9sbGVyOwotCQl9OwotCi0JCUwyOiBsMi1jYWNoZS1jb250cm9sbGVyQDIwMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLWwyLWNhY2hlLWNvbnRyb2xsZXIiOwotCQkJcmVnID0gPDB4MjAwMDAgMHgxMDAwPjsKLQkJCWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCi0JCQljYWNoZS1zaXplID0gPDB4ODAwMDA+OyAvLyBMMiw1MTJLCi0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWludGVycnVwdHMgPSA8MTYgMj47Ci0JCX07Ci0KLQkJZG1hQDIxMzAwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYSI7Ci0JCQlyZWcgPSA8MHgyMTMwMCAweDQ+OwotCQkJcmFuZ2VzID0gPDB4MCAweDIxMTAwIDB4MjAwPjsKLQkJCWNlbGwtaW5kZXggPSA8MD47Ci0JCQlkbWEtY2hhbm5lbEAwIHsKLQkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKLQkJCQlyZWcgPSA8MHgwIDB4ODA+OwotCQkJCWNlbGwtaW5kZXggPSA8MD47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwyMCAyPjsKLQkJCX07Ci0JCQlkbWEtY2hhbm5lbEA4MCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7Ci0JCQkJcmVnID0gPDB4ODAgMHg4MD47Ci0JCQkJY2VsbC1pbmRleCA9IDwxPjsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDIxIDI+OwotCQkJfTsKLQkJCWRtYS1jaGFubmVsQDEwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7Ci0JCQkJcmVnID0gPDB4MTAwIDB4ODA+OwotCQkJCWNlbGwtaW5kZXggPSA8Mj47Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwyMiAyPjsKLQkJCX07Ci0JCQlkbWEtY2hhbm5lbEAxODAgewotCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOwotCQkJCXJlZyA9IDwweDE4MCAweDgwPjsKLQkJCQljZWxsLWluZGV4ID0gPDM+OwotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MjMgMj47Ci0JCQl9OworCQlkbWFAYzMwMCB7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OwogCiAJCXVzYkAyMjAwMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wtdXNiMi1kciI7Ci0JCQlyZWcgPSA8MHgyMjAwMCAweDEwMDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlpbnRlcnJ1cHRzID0gPDI4IDB4Mj47CiAJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKIAkJfTsKIAogCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47CiAKIAkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKQEAgLTI0NSwyOSArMTI1LDIxIEBACiAJCX07CiAKIAkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjY1MjAgMHgyMD47Ci0KIAkJCXRiaTA6IHRiaS1waHlAMTEgewogCQkJCXJlZyA9IDwweDExPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKIAkJCX07CiAJCX07CiAKKwkJbWRpb0AyNjUyMCB7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJY2VsbC1pbmRleCA9IDwxPjsKLQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwotCQkJbW9kZWwgPSAiZVRTRUMiOwotCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKLQkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47Ci0JCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKLQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwotCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInNnbWlpIjsKQEAgLTI3NSw0OSArMTQ3LDEyIEBACiAJCX07CiAKIAkJZW5ldDI6IGV0aGVybmV0QDI2MDAwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCQljZWxsLWluZGV4ID0gPDI+OwotCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7Ci0JCQltb2RlbCA9ICJlVFNFQyI7Ci0JCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwotCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKLQkJCXJhbmdlcyA9IDwweDAgMHgyNjAwMCAweDEwMDA+OwotCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07Ci0JCQlpbnRlcnJ1cHRzID0gPDMxIDIgMzIgMiAzMyAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKIAkJfTsKIAotCQlzZGhjaUAyZTAwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxwMjAyMC1lc2RoYyIsICJmc2wsZXNkaGMiOwotCQkJcmVnID0gPDB4MmUwMDAgMHgxMDAwPjsKLQkJCWludGVycnVwdHMgPSA8NzIgMHgyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwotCQl9OwotCi0JCWNyeXB0b0AzMDAwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxzZWMzLjEiLCAiZnNsLHNlYzMuMCIsICJmc2wsc2VjMi40IiwKLQkJCQkgICAgICJmc2wsc2VjMi4yIiwgImZzbCxzZWMyLjEiLCAiZnNsLHNlYzIuMCI7Ci0JCQlyZWcgPSA8MHgzMDAwMCAweDEwMDAwPjsKLQkJCWludGVycnVwdHMgPSA8NDUgMiA1OCAyPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJZnNsLG51bS1jaGFubmVscyA9IDw0PjsKLQkJCWZzbCxjaGFubmVsLWZpZm8tbGVuID0gPDI0PjsKLQkJCWZzbCxleGVjLXVuaXRzLW1hc2sgPSA8MHhiZmU+OwotCQkJZnNsLGRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwweDNhYjBlYmY+OwotCQl9OwogCiAJCW1waWM6IHBpY0A0MDAwMCB7Ci0JCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OwotCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKLQkJCXJlZyA9IDwweDQwMDAwIDB4NDAwMDA+OwotCQkJY29tcGF0aWJsZSA9ICJjaHJwLG9wZW4tcGljIjsKLQkJCWRldmljZV90eXBlID0gIm9wZW4tcGljIjsKIAkJCXByb3RlY3RlZC1zb3VyY2VzID0gPAogCQkJNDIgNzYgNzcgNzggNzkgLyogc2VyaWFsMSAsIGRtYTIgKi8KIAkJCTI5IDMwIDM0IDI2IC8qIGVuZXQwLCBwY2kxICovCkBAIC0zMjYsMjYgKzE2MSwyOCBAQAogCQkJPjsKIAkJfTsKIAotCQlnbG9iYWwtdXRpbGl0aWVzQGUwMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLWd1dHMiOwotCQkJcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKLQkJCWZzbCxoYXMtcnN0Y3I7CisJCW1zaUA0MTYwMCB7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OworCisKIAl9OwogCi0JcGNpMDogcGNpZUBmZmUwOTAwMCB7Ci0JCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDgtcGNpZSI7Ci0JCWRldmljZV90eXBlID0gInBjaSI7Ci0JCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDI+OwotCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKLQkJcmVnID0gPDAgMHhmZmUwOTAwMCAwIDB4MTAwMD47Ci0JCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJcGNpMDogcGNpZUBmZmUwODAwMCB7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXBjaTE6IHBjaWVAZmZlMDkwMDAgewogCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGEwMDAwMDAwIDAgMHhhMDAwMDAwMCAweDAgMHgyMDAwMDAwMAogCQkJICAweDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMCAweGZmYzEwMDAwIDB4MCAweDEwMDAwPjsKLQkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCWludGVycnVwdHMgPSA8MjUgMj47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMHgwIDB4MCAweDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJLyogSURTRUwgMHgwICovCisJCQkwMDAwIDB4MCAweDAgMHgxICZtcGljIDB4NCAweDEKKwkJCTAwMDAgMHgwIDB4MCAweDIgJm1waWMgMHg1IDB4MQorCQkJMDAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDYgMHgxCisJCQkwMDAwIDB4MCAweDAgMHg0ICZtcGljIDB4NyAweDEKKwkJCT47CiAJCXBjaWVAMCB7CiAJCQlyZWcgPSA8MHgwIDB4MCAweDAgMHgwIDB4MD47CiAJCQkjc2l6ZS1jZWxscyA9IDwyPjsKQEAgLTM2MCw0ICsxOTcsOCBAQAogCQkJCSAgMHgwIDB4MTAwMDAwPjsKIAkJfTsKIAl9OworCisJcGNpMjogcGNpZUBmZmUwYTAwMCB7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDIwMjByZGJfY2FtcF9jb3JlMS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDIwMjByZGJfY2FtcF9jb3JlMS5kdHMKaW5kZXggN2EzMWQ0NmMuLjI2MWMzNGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMjAyMHJkYl9jYW1wX2NvcmUxLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDIwMjByZGJfY2FtcF9jb3JlMS5kdHMKQEAgLTE1LDI3ICsxNSwyMSBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0vZHRzLXYxLzsKKy9pbmNsdWRlLyAicDIwMjBzaS5kdHNpIgorCiAvIHsKLQltb2RlbCA9ICJmc2wsUDIwMjAiOworCW1vZGVsID0gImZzbCxQMjAyMFJEQiI7CiAJY29tcGF0aWJsZSA9ICJmc2wsUDIwMjBSREIiLCAiZnNsLE1QQzg1WFhSREItQ0FNUCI7Ci0JI2FkZHJlc3MtY2VsbHMgPSA8Mj47Ci0JI3NpemUtY2VsbHMgPSA8Mj47CiAKIAlhbGlhc2VzIHsKIAkJZXRoZXJuZXQwID0gJmVuZXQwOwotCQlzZXJpYWwwID0gJnNlcmlhbDA7CisJCXNlcmlhbDAgPSAmc2VyaWFsMTsKIAkJcGNpMSA9ICZwY2kxOwogCX07CiAKIAljcHVzIHsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDA+OwotCi0JCVBvd2VyUEMsUDIwMjBAMSB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwotCQkJcmVnID0gPDB4MT47Ci0JCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CisJCVBvd2VyUEMsUDIwMjBAMCB7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAJfTsKIApAQCAtNDMsMjAgKzM3LDM3IEBACiAJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CiAJfTsKIAotCXNvY0BmZmUwMDAwMCB7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJZGV2aWNlX3R5cGUgPSAic29jIjsKLQkJY29tcGF0aWJsZSA9ICJmc2wscDIwMjAtaW1tciIsICJzaW1wbGUtYnVzIjsKLQkJcmFuZ2VzID0gPDB4MCAgMHgwIDB4ZmZlMDAwMDAgMHgxMDAwMDA+OwotCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gRmlsbGVkIG91dCBieSB1Ym9vdC4KKwlsb2NhbGJ1c0BmZmUwNTAwMCB7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKIAotCQlzZXJpYWwwOiBzZXJpYWxANDYwMCB7Ci0JCQljZWxsLWluZGV4ID0gPDE+OwotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKLQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7Ci0JCQlyZWcgPSA8MHg0NjAwIDB4MTAwPjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwlzb2NAZmZlMDAwMDAgeworCQllY20tbGF3QDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQllY21AMTAwMCB7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCW1lbW9yeS1jb250cm9sbGVyQDIwMDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmNAMzAwMCB7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWkyY0AzMTAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlzcGlANzAwMCB7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OwogCiAJCWRtYUBjMzAwIHsKQEAgLTk2LDYgKzEwNywxMCBAQAogCQkJfTsKIAkJfTsKIAorCQlncGlvOiBncGlvLWNvbnRyb2xsZXJAZjAwMCB7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCiAJCUwyOiBsMi1jYWNoZS1jb250cm9sbGVyQDIwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLWwyLWNhY2hlLWNvbnRyb2xsZXIiOwogCQkJcmVnID0gPDB4MjAwMDAgMHgxMDAwPjsKQEAgLTEwNCwzMSArMTE5LDQ5IEBACiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJfTsKIAorCQlkbWFAMjEzMDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl1c2JAMjIwMDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQltZGlvQDI0NTIwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJbWRpb0AyNTUyMCB7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCW1kaW9AMjY1MjAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKIAogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCWNlbGwtaW5kZXggPSA8MD47Ci0JCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKLQkJCW1vZGVsID0gImVUU0VDIjsKLQkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7Ci0JCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OwotCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47Ci0JCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKLQkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlmaXhlZC1saW5rID0gPDEgMSAxMDAwIDAgMD47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKIAogCQl9OwogCisJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCWVuZXQyOiBldGhlcm5ldEAyNjAwMCB7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXNkaGNpQDJlMDAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJY3J5cHRvQDMwMDAwIHsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKIAkJbXBpYzogcGljQDQwMDAwIHsKLQkJCWludGVycnVwdC1jb250cm9sbGVyOwotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47Ci0JCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwotCQkJcmVnID0gPDB4NDAwMDAgMHg0MDAwMD47Ci0JCQljb21wYXRpYmxlID0gImNocnAsb3Blbi1waWMiOwotCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOwogCQkJcHJvdGVjdGVkLXNvdXJjZXMgPSA8CiAJCQkxNyAxOCA0MyA0MiA1OSA0NyAvKmVjbSwgbWVtLCBpMmMsIHNlcmlhbDAsIHNwaSxncGlvICovCiAJCQkxNiAyMCAyMSAyMiAyMyAyOCAJLyogTDIsIGRtYTEsIFVTQiAqLwpAQCAtMTUyLDIxICsxODUsMzIgQEAKIAkJCQkweGU3IDA+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CisKKwkJZ2xvYmFsLXV0aWxpdGllc0BlMDAwMCB7CS8vZ2xvYmFsIHV0aWxpdGllcyBibG9jaworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKwogCX07CiAKLQlwY2kxOiBwY2llQGZmZTBhMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1wY2llIjsKLQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKLQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8Mj47Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDM+OwotCQlyZWcgPSA8MCAweGZmZTBhMDAwIDAgMHgxMDAwPjsKLQkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwlwY2kwOiBwY2llQGZmZTA4MDAwIHsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJcGNpMTogcGNpZUBmZmUwOTAwMCB7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXBjaTI6IHBjaWVAZmZlMGEwMDAgewogCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweDgwMDAwMDAwIDAgMHg4MDAwMDAwMCAweDAgMHgyMDAwMDAwMAogCQkJICAweDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMCAweGZmYzAwMDAwIDB4MCAweDEwMDAwPjsKLQkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCWludGVycnVwdHMgPSA8MjYgMj47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMHgwIDB4MCAweDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJLyogSURTRUwgMHgwICovCisJCQkwMDAwIDB4MCAweDAgMHgxICZtcGljIDB4MCAweDEKKwkJCTAwMDAgMHgwIDB4MCAweDIgJm1waWMgMHgxIDB4MQorCQkJMDAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDIgMHgxCisJCQkwMDAwIDB4MCAweDAgMHg0ICZtcGljIDB4MyAweDEKKwkJCT47CiAJCXBjaWVAMCB7CiAJCQlyZWcgPSA8MHgwIDB4MCAweDAgMHgwIDB4MD47CiAJCQkjc2l6ZS1jZWxscyA9IDwyPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wMjAyMHNpLmR0c2kgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDIwMjBzaS5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZWYxN2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDIwMjBzaS5kdHNpCkBAIC0wLDAgKzEsMzgyIEBACisvKgorICogUDIwMjAgRGV2aWNlIFRyZWUgU291cmNlCisgKgorICogQ29weXJpZ2h0IDIwMTEgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworL2R0cy12MS87CisvIHsKKwljb21wYXRpYmxlID0gImZzbCxQMjAyMCI7CisJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJI3NpemUtY2VsbHMgPSA8Mj47CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCVBvd2VyUEMsUDIwMjBAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDB4MD47CisJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CisJCX07CisKKwkJUG93ZXJQQyxQMjAyMEAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MHgxPjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyPjsKKwkJfTsKKwl9OworCisJbG9jYWxidXNAZmZlMDUwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLWVsYmMiLCAiZnNsLGVsYmMiLCAic2ltcGxlLWJ1cyI7CisJCXJlZyA9IDwwIDB4ZmZlMDUwMDAgMCAweDEwMDA+OworCQlpbnRlcnJ1cHRzID0gPDE5IDI+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwl9OworCisJc29jQGZmZTAwMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlkZXZpY2VfdHlwZSA9ICJzb2MiOworCQljb21wYXRpYmxlID0gImZzbCxwMjAyMC1pbW1yIiwgInNpbXBsZS1idXMiOworCQlyYW5nZXMgPSA8MHgwICAweDAgMHhmZmUwMDAwMCAweDEwMDAwMD47CisJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBGaWxsZWQgb3V0IGJ5IHVib290LgorCisJCWVjbS1sYXdAMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxlY20tbGF3IjsKKwkJCXJlZyA9IDwweDAgMHgxMDAwPjsKKwkJCWZzbCxudW0tbGF3cyA9IDwxMj47CisJCX07CisKKwkJZWNtQDEwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wscDIwMjAtZWNtIiwgImZzbCxlY20iOworCQkJcmVnID0gPDB4MTAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDwxNyAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCisJCW1lbW9yeS1jb250cm9sbGVyQDIwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wscDIwMjAtbWVtb3J5LWNvbnRyb2xsZXIiOworCQkJcmVnID0gPDB4MjAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDE4IDI+OworCQl9OworCisJCWkyY0AzMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw0MyAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZGZzcnI7CisJCX07CisKKwkJaTJjQDMxMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJcmVnID0gPDB4MzEwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDQzIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlkZnNycjsKKwkJfTsKKworCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8MHg0NTAwIDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8NDIgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQlzZXJpYWwxOiBzZXJpYWxANDYwMCB7CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8MHg0NjAwIDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8NDIgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQlzcGlANzAwMCB7CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGVzcGkiOworCQkJcmVnID0gPDB4NzAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0cyA9IDw1OSAweDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQltb2RlID0gImNwdSI7CisJCX07CisKKwkJZG1hQGMzMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hIjsKKwkJCXJlZyA9IDwweGMzMDAgMHg0PjsKKwkJCXJhbmdlcyA9IDwweDAgMHhjMTAwIDB4MjAwPjsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQlkbWEtY2hhbm5lbEAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDw3NiAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEA4MCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4ODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDc3IDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDEwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDw3OCAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEAxODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDE4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDM+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8NzkgMj47CisJCQl9OworCQl9OworCisJCWdwaW86IGdwaW8tY29udHJvbGxlckBmMDAwIHsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1ncGlvIjsKKwkJCXJlZyA9IDwweGYwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw0NyAweDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCX07CisKKwkJTDI6IGwyLWNhY2hlLWNvbnRyb2xsZXJAMjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wscDIwMjAtbDItY2FjaGUtY29udHJvbGxlciI7CisJCQlyZWcgPSA8MHgyMDAwMCAweDEwMDA+OworCQkJY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWNhY2hlLXNpemUgPSA8MHg4MDAwMD47IC8vIEwyLDUxMksKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJaW50ZXJydXB0cyA9IDwxNiAyPjsKKwkJfTsKKworCQlkbWFAMjEzMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hIjsKKwkJCXJlZyA9IDwweDIxMzAwIDB4ND47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjExMDAgMHgyMDA+OworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWRtYS1jaGFubmVsQDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIwIDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDgwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjEgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAMTAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgxMDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwyPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIyIDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDE4MCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MTgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMyAyPjsKKwkJCX07CisJCX07CisKKwkJdXNiQDIyMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbC11c2IyLWRyIjsKKwkJCXJlZyA9IDwweDIyMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8MjggMHgyPjsKKwkJfTsKKworCQltZGlvQDI0NTIwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47CisJCX07CisKKwkJbWRpb0AyNTUyMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJcmVnID0gPDB4MjY1MjAgMHgyMD47CisJCX07CisKKwkJbWRpb0AyNjUyMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCQl9OworCisJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAiZVRTRUMiOworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisKKwkJfTsKKworCQllbmV0MjogZXRoZXJuZXRAMjYwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNlbGwtaW5kZXggPSA8Mj47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNjAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI2MDAwIDB4MTAwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MzEgMiAzMiAyIDMzIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisKKwkJfTsKKworCQlzZGhjaUAyZTAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxwMjAyMC1lc2RoYyIsICJmc2wsZXNkaGMiOworCQkJcmVnID0gPDB4MmUwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdHMgPSA8NzIgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQl9OworCisJCWNyeXB0b0AzMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxzZWMzLjEiLCAiZnNsLHNlYzMuMCIsICJmc2wsc2VjMi40IiwKKwkJCQkgICAgICJmc2wsc2VjMi4yIiwgImZzbCxzZWMyLjEiLCAiZnNsLHNlYzIuMCI7CisJCQlyZWcgPSA8MHgzMDAwMCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8NDUgMiA1OCAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZnNsLG51bS1jaGFubmVscyA9IDw0PjsKKwkJCWZzbCxjaGFubmVsLWZpZm8tbGVuID0gPDI0PjsKKwkJCWZzbCxleGVjLXVuaXRzLW1hc2sgPSA8MHhiZmU+OworCQkJZnNsLGRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwweDNhYjBlYmY+OworCQl9OworCisJCW1waWM6IHBpY0A0MDAwMCB7CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCXJlZyA9IDwweDQwMDAwIDB4NDAwMDA+OworCQkJY29tcGF0aWJsZSA9ICJjaHJwLG9wZW4tcGljIjsKKwkJCWRldmljZV90eXBlID0gIm9wZW4tcGljIjsKKwkJfTsKKworCQltc2lANDE2MDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wscDIwMjAtbXNpIiwgImZzbCxtcGljLW1zaSI7CisJCQlyZWcgPSA8MHg0MTYwMCAweDgwPjsKKwkJCW1zaS1hdmFpbGFibGUtcmFuZ2VzID0gPDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwKKwkJCQkweGUwIDAKKwkJCQkweGUxIDAKKwkJCQkweGUyIDAKKwkJCQkweGUzIDAKKwkJCQkweGU0IDAKKwkJCQkweGU1IDAKKwkJCQkweGU2IDAKKwkJCQkweGU3IDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJZ2xvYmFsLXV0aWxpdGllc0BlMDAwMCB7CS8vZ2xvYmFsIHV0aWxpdGllcyBibG9jaworCQkJY29tcGF0aWJsZSA9ICJmc2wscDIwMjAtZ3V0cyI7CisJCQlyZWcgPSA8MHhlMDAwMCAweDEwMDA+OworCQkJZnNsLGhhcy1yc3RjcjsKKwkJfTsKKwl9OworCisJcGNpMDogcGNpZUBmZmUwODAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDgtcGNpZSI7CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJcmVnID0gPDAgMHhmZmUwODAwMCAwIDB4MTAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQlpbnRlcnJ1cHRzID0gPDI0IDI+OworCX07CisKKwlwY2kxOiBwY2llQGZmZTA5MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1wY2llIjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQlyZWcgPSA8MCAweGZmZTA5MDAwIDAgMHgxMDAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCWludGVycnVwdHMgPSA8MjUgMj47CisJfTsKKworCXBjaTI6IHBjaWVAZmZlMGEwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LXBjaWUiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCXJlZyA9IDwwIDB4ZmZlMGEwMDAgMCAweDEwMDA+OworCQlidXMtcmFuZ2UgPSA8MCAyNTU+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJaW50ZXJydXB0cyA9IDwyNiAyPjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wNDA4MGRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wNDA4MGRzLmR0cwppbmRleCA1YjdmYzI5Li45MjdmOTRkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDQwODBkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3A0MDgwZHMuZHRzCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFA0MDgwRFMgRGV2aWNlIFRyZWUgU291cmNlCiAgKgotICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICogQ29weXJpZ2h0IDIwMDktMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlCWl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YJdGhlIEdOVSBHZW5lcmFsCSBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC0zMyw2ICszMywxNyBAQAogCQlkbWExID0gJmRtYTE7CiAJCXNkaGMgPSAmc2RoYzsKIAorCQljcnlwdG8gPSAmY3J5cHRvOworCQlzZWNfanIwID0gJnNlY19qcjA7CisJCXNlY19qcjEgPSAmc2VjX2pyMTsKKwkJc2VjX2pyMiA9ICZzZWNfanIyOworCQlzZWNfanIzID0gJnNlY19qcjM7CisJCXJ0aWNfYSA9ICZydGljX2E7CisJCXJ0aWNfYiA9ICZydGljX2I7CisJCXJ0aWNfYyA9ICZydGljX2M7CisJCXJ0aWNfZCA9ICZydGljX2Q7CisJCXNlY19tb24gPSAmc2VjX21vbjsKKwogCQlyaW8wID0gJnJhcGlkaW8wOwogCX07CiAKQEAgLTQxMCw2ICs0MjEsNzkgQEAKIAkJCWRyX21vZGUgPSAiaG9zdCI7CiAJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKIAkJfTsKKworCQljcnlwdG86IGNyeXB0b0AzMDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCXJlZyA9IDwweDMwMDAwMCAweDEwMDAwPjsKKwkJCXJhbmdlcyA9IDwwIDB4MzAwMDAwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDkyIDI+OworCisJCQlzZWNfanIwOiBqckAxMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxzZWMtdjQuMC1qb2ItcmluZyI7CisJCQkJcmVnID0gPDB4MTAwMCAweDEwMDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8ODggMj47CisJCQl9OworCisJCQlzZWNfanIxOiBqckAyMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxzZWMtdjQuMC1qb2ItcmluZyI7CisJCQkJcmVnID0gPDB4MjAwMCAweDEwMDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8ODkgMj47CisJCQl9OworCisJCQlzZWNfanIyOiBqckAzMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxzZWMtdjQuMC1qb2ItcmluZyI7CisJCQkJcmVnID0gPDB4MzAwMCAweDEwMDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8OTAgMj47CisJCQl9OworCisJCQlzZWNfanIzOiBqckA0MDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxzZWMtdjQuMC1qb2ItcmluZyI7CisJCQkJcmVnID0gPDB4NDAwMCAweDEwMDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8OTEgMj47CisJCQl9OworCisJCQlydGljQDYwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLHNlYy12NC4wLXJ0aWMiOworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJCXJlZyA9IDwweDYwMDAgMHgxMDA+OworCQkJCXJhbmdlcyA9IDwweDAgMHg2MTAwIDB4ZTAwPjsKKworCQkJCXJ0aWNfYTogcnRpYy1hQDAgeworCQkJCQljb21wYXRpYmxlID0gImZzbCxzZWMtdjQuMC1ydGljLW1lbW9yeSI7CisJCQkJCXJlZyA9IDwweDAwIDB4MjAgMHgxMDAgMHg4MD47CisJCQkJfTsKKworCQkJCXJ0aWNfYjogcnRpYy1iQDIwIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAtcnRpYy1tZW1vcnkiOworCQkJCQlyZWcgPSA8MHgyMCAweDIwIDB4MjAwIDB4ODA+OworCQkJCX07CisKKwkJCQlydGljX2M6IHJ0aWMtY0A0MCB7CisJCQkJCWNvbXBhdGlibGUgPSAiZnNsLHNlYy12NC4wLXJ0aWMtbWVtb3J5IjsKKwkJCQkJcmVnID0gPDB4NDAgMHgyMCAweDMwMCAweDgwPjsKKwkJCQl9OworCisJCQkJcnRpY19kOiBydGljLWRANjAgeworCQkJCQljb21wYXRpYmxlID0gImZzbCxzZWMtdjQuMC1ydGljLW1lbW9yeSI7CisJCQkJCXJlZyA9IDwweDYwIDB4MjAgMHg1MDAgMHg4MD47CisJCQkJfTsKKwkJCX07CisJCX07CisKKwkJc2VjX21vbjogc2VjX21vbkAzMTQwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAtbW9uIjsKKwkJCXJlZyA9IDwweDMxNDAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDkzIDI+OworCQl9OwogCX07CiAKIAlyYXBpZGlvMDogcmFwaWRpb0BmZmUwYzAwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZXBhcHIuYyBiL2FyY2gvcG93ZXJwYy9ib290L2VwYXByLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZjMTk2MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2VwYXByLmMKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIEJvb3R3cmFwcGVyIGZvciBlUEFQUiBjb21wbGlhbnQgZmlybXdhcmVzCisgKgorICogQ29weXJpZ2h0IDIwMTAgRGF2aWQgR2lic29uIDxkYXZpZEBnaWJzb24uZHJvcGJlYXIuaWQuYXU+LCBJQk0gQ29ycG9yYXRpb24uCisgKgorICogQmFzZWQgb24gZWFybGllciBib290d3JhcHBlcnMgYnk6CisgKiAoYykgQmVuamFtaW4gSGVycmVuc2NobWlkdCA8YmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnPiwgSUJNIENvcnAsXAorICogICBhbmQKKyAqIFNjb3R0IFdvb2QgPHNjb3R0d29vZEBmcmVlc2NhbGUuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAib3BzLmgiCisjaW5jbHVkZSAic3RkaW8uaCIKKyNpbmNsdWRlICJpby5oIgorI2luY2x1ZGUgPGxpYmZkdC5oPgorCitCU1NfU1RBQ0soNDA5Nik7CisKKyNkZWZpbmUgRVBBUFJfU01BR0lDCTB4NjU1MDQxNTAKKyNkZWZpbmUgRVBBUFJfRU1BR0lDCTB4NDU1MDQxNTAKKworc3RhdGljIHVuc2lnbmVkIGVwYXByX21hZ2ljOworc3RhdGljIHVuc2lnbmVkIGxvbmcgaW1hX3NpemU7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBmZHRfYWRkcjsKKworc3RhdGljIHZvaWQgcGxhdGZvcm1fZml4dXBzKHZvaWQpCit7CisJaWYgKChlcGFwcl9tYWdpYyAhPSBFUEFQUl9FTUFHSUMpCisJICAgICYmIChlcGFwcl9tYWdpYyAhPSBFUEFQUl9TTUFHSUMpKQorCQlmYXRhbCgicjYgY29udGFpbmVkIDB4JTA4eCBpbnN0ZWFkIG9mIGVQQVBSIG1hZ2ljIG51bWJlclxuIiwKKwkJICAgICAgZXBhcHJfbWFnaWMpOworCisJaWYgKGltYV9zaXplIDwgKHVuc2lnbmVkIGxvbmcpX2VuZCkKKwkJcHJpbnRmKCJXQVJOSU5HOiBJbWFnZSBsb2FkZWQgb3V0c2lkZSBJTUEhIgorCQkgICAgICAgIiAoX2VuZD0lcCwgaW1hX3NpemU9MHglbHgpXG4iLCBfZW5kLCBpbWFfc2l6ZSk7CisJaWYgKGltYV9zaXplIDwgZmR0X2FkZHIpCisJCXByaW50ZigiV0FSTklORzogRGV2aWNlIHRyZWUgYWRkcmVzcyBpcyBvdXRzaWRlIElNQSEiCisJCSAgICAgICAiKGZkdF9hZGRyPTB4JWx4LCBpbWFfc2l6ZT0weCVseClcbiIsIGZkdF9hZGRyLAorCQkgICAgICAgaW1hX3NpemUpOworCWlmIChpbWFfc2l6ZSA8IGZkdF9hZGRyICsgZmR0X3RvdGFsc2l6ZSgodm9pZCAqKWZkdF9hZGRyKSkKKwkJcHJpbnRmKCJXQVJOSU5HOiBEZXZpY2UgdHJlZSBleHRlbmRzIG91dHNpZGUgSU1BISIKKwkJICAgICAgICIgKGZkdF9hZGRyPTB4JWx4LCBzaXplPTB4JXgsIGltYV9zaXplPTB4JWx4XG4iLAorCQkgICAgICAgZmR0X2FkZHIsIGZkdF90b3RhbHNpemUoKHZvaWQgKilmZHRfYWRkciksIGltYV9zaXplKTsKK30KKwordm9pZCBwbGF0Zm9ybV9pbml0KHVuc2lnbmVkIGxvbmcgcjMsIHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcjUsCisJCSAgIHVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcpCit7CisJZXBhcHJfbWFnaWMgPSByNjsKKwlpbWFfc2l6ZSA9IHI3OworCWZkdF9hZGRyID0gcjM7CisKKwkvKiBGSVhNRTogd2Ugc2hvdWxkIHByb2Nlc3MgcmVzZXJ2ZSBlbnRyaWVzICovCisKKwlzaW1wbGVfYWxsb2NfaW5pdChfZW5kLCBpbWFfc2l6ZSAtICh1bnNpZ25lZCBsb25nKV9lbmQsIDMyLCA2NCk7CisKKwlmZHRfaW5pdCgodm9pZCAqKWZkdF9hZGRyKTsKKworCXNlcmlhbF9jb25zb2xlX2luaXQoKTsKKwlwbGF0Zm9ybV9vcHMuZml4dXBzID0gcGxhdGZvcm1fZml4dXBzOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlciBiL2FyY2gvcG93ZXJwYy9ib290L3dyYXBwZXIKaW5kZXggY2I5N2U3NS4uYzc0NTMxYSAxMDA3NTUKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlcgorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyCkBAIC0zOSw2ICszOSw3IEBACiBjYWNoZWl0PQogYmluYXJ5PQogZ3ppcD0uZ3oKK3BpZT0KIAogIyBjcm9zcy1jb21waWxhdGlvbiBwcmVmaXgKIENST1NTPQpAQCAtMTU3LDkgKzE1OCwxMCBAQAogICAgIHBsYXRmb3Jtbz0kb2JqZWN0L29mLm8KICAgICA7OwogY29mZikKLSAgICBwbGF0Zm9ybW89JG9iamVjdC9vZi5vCisgICAgcGxhdGZvcm1vPSIkb2JqZWN0L2NydDAubyAkb2JqZWN0L29mLm8iCiAgICAgbGRzPSRvYmplY3QvekltYWdlLmNvZmYubGRzCiAgICAgbGlua19hZGRyZXNzPScweDUwMDAwMCcKKyAgICBwaWU9CiAgICAgOzsKIG1pYm9vdHx1Ym9vdCkKICAgICAjIG1pYm9vdCBhbmQgVS1ib290IHdhbnQganVzdCB0aGUgYmFyZSBiaXRzLCBub3QgYW4gRUxGIGJpbmFyeQpAQCAtMjA4LDYgKzIxMCw3IEBACiAgICAga3NlY3Rpb249Lmtlcm5lbDp2bWxpbnV4LmJpbgogICAgIGlzZWN0aW9uPS5rZXJuZWw6aW5pdHJkCiAgICAgbGlua19hZGRyZXNzPScnCisgICAgcGllPQogICAgIDs7CiBlcDg4eGN8ZXA0MDV8ZXA4MjQ4ZSkKICAgICBwbGF0Zm9ybW89IiRvYmplY3QvZml4ZWQtaGVhZC5vICRvYmplY3QvJHBsYXRmb3JtLm8iCkBAIC0yNDQsNiArMjQ3LDEwIEBACiB0cmVlYm9vdC1pc3M0eHgtbXBpYykKICAgICBwbGF0Zm9ybW89IiRvYmplY3QvdHJlZWJvb3QtaXNzNHh4Lm8iCiAgICAgOzsKK2VwYXByKQorICAgIGxpbmtfYWRkcmVzcz0nMHgyMDAwMDAwMCcKKyAgICBwaWU9LXBpZQorICAgIDs7CiBlc2FjCiAKIHZtej0iJHRtcGRpci9gYmFzZW5hbWUgXCIka2VybmVsXCJgLiRleHQiCkBAIC0yNTEsNyArMjU4LDcgQEAKICAgICAke0NST1NTfW9iamNvcHkgJG9iamZsYWdzICIka2VybmVsIiAiJHZtei4kJCIKIAogICAgIGlmIFsgLW4gIiRnemlwIiBdOyB0aGVuCi0gICAgICAgIGd6aXAgLWYgLTkgIiR2bXouJCQiCisgICAgICAgIGd6aXAgLW4gLWYgLTkgIiR2bXouJCQiCiAgICAgZmkKIAogICAgIGlmIFsgLW4gIiRjYWNoZWl0IiBdOyB0aGVuCkBAIC0zMTAsOSArMzE3LDkgQEAKIAogaWYgWyAiJHBsYXRmb3JtIiAhPSAibWlib290IiBdOyB0aGVuCiAgICAgaWYgWyAtbiAiJGxpbmtfYWRkcmVzcyIgXSA7IHRoZW4KLSAgICAgICAgdGV4dF9zdGFydD0iLVR0ZXh0ICRsaW5rX2FkZHJlc3MgLS1kZWZzeW0gX3N0YXJ0PSRsaW5rX2FkZHJlc3MiCisgICAgICAgIHRleHRfc3RhcnQ9Ii1UdGV4dCAkbGlua19hZGRyZXNzIgogICAgIGZpCi0gICAgJHtDUk9TU31sZCAtbSBlbGYzMnBwYyAtVCAkbGRzICR0ZXh0X3N0YXJ0IC1vICIkb2ZpbGUiIFwKKyAgICAke0NST1NTfWxkIC1tIGVsZjMycHBjIC1UICRsZHMgJHRleHRfc3RhcnQgJHBpZSAtbyAiJG9maWxlIiBcCiAJJHBsYXRmb3JtbyAkdG1wICRvYmplY3Qvd3JhcHBlci5hCiAgICAgcm0gJHRtcAogZmkKQEAgLTMzNiw3ICszNDMsNyBAQAogICAgICRvYmpiaW4vaGFjay1jb2ZmICIkb2ZpbGUiCiAgICAgOzsKIGN1Ym9vdCopCi0gICAgZ3ppcCAtZiAtOSAiJG9maWxlIgorICAgIGd6aXAgLW4gLWYgLTkgIiRvZmlsZSIKICAgICAke01LSU1BR0V9IC1BIHBwYyAtTyBsaW51eCAtVCBrZXJuZWwgLUMgZ3ppcCAtYSAiJGJhc2UiIC1lICIkZW50cnkiIFwKICAgICAgICAgICAgICR1Ym9vdF92ZXJzaW9uIC1kICIkb2ZpbGUiLmd6ICIkb2ZpbGUiCiAgICAgOzsKQEAgLTM4Myw2ICszOTAsNiBAQAogCiAgICAgb2Rpcj0iJChkaXJuYW1lICIkb2ZpbGUuYmluIikiCiAgICAgcm0gLWYgIiRvZGlyL290aGVyb3MuYmxkIgotICAgIGd6aXAgLS1mb3JjZSAtOSAtLXN0ZG91dCAiJG9maWxlLmJpbiIgPiAiJG9kaXIvb3RoZXJvcy5ibGQiCisgICAgZ3ppcCAtbiAtLWZvcmNlIC05IC0tc3Rkb3V0ICIkb2ZpbGUuYmluIiA+ICIkb2Rpci9vdGhlcm9zLmJsZCIKICAgICA7OwogZXNhYwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvekltYWdlLmNvZmYubGRzLlMgYi9hcmNoL3Bvd2VycGMvYm9vdC96SW1hZ2UuY29mZi5sZHMuUwppbmRleCA4NTZkYzc4Li5kZTRjOWUzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC96SW1hZ2UuY29mZi5sZHMuUworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC96SW1hZ2UuY29mZi5sZHMuUwpAQCAtMywxMyArMywxMyBAQAogRVhURVJOKF96aW1hZ2Vfc3RhcnRfb3BkKQogU0VDVElPTlMKIHsKLSAgX3N0YXJ0ID0gLjsKICAgLnRleHQgICAgICA6CiAgIHsKKyAgICBfc3RhcnQgPSAuOwogICAgICooLnRleHQpCiAgICAgKiguZml4dXApCisgICAgX2V0ZXh0ID0gLjsKICAgfQotICBfZXRleHQgPSAuOwogICAuID0gQUxJR04oNDA5Nik7CiAgIC5kYXRhICAgIDoKICAgewpAQCAtMTcsOSArMTcsNyBAQAogICAgICooLmRhdGEqKQogICAgICooX19idWlsdGluXyopCiAgICAgKiguc2RhdGEqKQotICAgIF9fZ290Ml9zdGFydCA9IC47CiAgICAgKiguZ290MikKLSAgICBfX2dvdDJfZW5kID0gLjsKIAogICAgIF9kdGJfc3RhcnQgPSAuOwogICAgICooLmtlcm5lbDpkdGIpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC96SW1hZ2UubGRzLlMgYi9hcmNoL3Bvd2VycGMvYm9vdC96SW1hZ2UubGRzLlMKaW5kZXggMDk2MmQ2Mi4uMmJkODczMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvekltYWdlLmxkcy5TCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L3pJbWFnZS5sZHMuUwpAQCAtMyw0OSArMyw2NCBAQAogRVhURVJOKF96aW1hZ2Vfc3RhcnQpCiBTRUNUSU9OUwogewotICBfc3RhcnQgPSAuOwogICAudGV4dCAgICAgIDoKICAgeworICAgIF9zdGFydCA9IC47CiAgICAgKigudGV4dCkKICAgICAqKC5maXh1cCkKKyAgICBfZXRleHQgPSAuOwogICB9Ci0gIF9ldGV4dCA9IC47CiAgIC4gPSBBTElHTig0MDk2KTsKICAgLmRhdGEgICAgOgogICB7CiAgICAgKigucm9kYXRhKikKICAgICAqKC5kYXRhKikKICAgICAqKC5zZGF0YSopCi0gICAgX19nb3QyX3N0YXJ0ID0gLjsKICAgICAqKC5nb3QyKQotICAgIF9fZ290Ml9lbmQgPSAuOwogICB9CisgIC5keW5zeW0gOiB7ICooLmR5bnN5bSkgfQorICAuZHluc3RyIDogeyAqKC5keW5zdHIpIH0KKyAgLmR5bmFtaWMgOgorICB7CisgICAgX19keW5hbWljX3N0YXJ0ID0gLjsKKyAgICAqKC5keW5hbWljKQorICB9CisgIC5oYXNoIDogeyAqKC5oYXNoKSB9CisgIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQorICAucmVsYS5keW4gOiB7ICooLnJlbGEqKSB9CiAKICAgLiA9IEFMSUdOKDgpOwotICBfZHRiX3N0YXJ0ID0gLjsKLSAgLmtlcm5lbDpkdGIgOiB7ICooLmtlcm5lbDpkdGIpIH0KLSAgX2R0Yl9lbmQgPSAuOworICAua2VybmVsOmR0YiA6CisgIHsKKyAgICBfZHRiX3N0YXJ0ID0gLjsKKyAgICAqKC5rZXJuZWw6ZHRiKQorICAgIF9kdGJfZW5kID0gLjsKKyAgfQogCiAgIC4gPSBBTElHTig0MDk2KTsKLSAgX3ZtbGludXhfc3RhcnQgPSAgLjsKLSAgLmtlcm5lbDp2bWxpbnV4LnN0cmlwIDogeyAqKC5rZXJuZWw6dm1saW51eC5zdHJpcCkgfQotICBfdm1saW51eF9lbmQgPSAgLjsKKyAgLmtlcm5lbDp2bWxpbnV4LnN0cmlwIDoKKyAgeworICAgIF92bWxpbnV4X3N0YXJ0ID0gIC47CisgICAgKigua2VybmVsOnZtbGludXguc3RyaXApCisgICAgX3ZtbGludXhfZW5kID0gIC47CisgIH0KIAogICAuID0gQUxJR04oNDA5Nik7Ci0gIF9pbml0cmRfc3RhcnQgPSAgLjsKLSAgLmtlcm5lbDppbml0cmQgOiB7ICooLmtlcm5lbDppbml0cmQpIH0KLSAgX2luaXRyZF9lbmQgPSAgLjsKKyAgLmtlcm5lbDppbml0cmQgOgorICB7CisgICAgX2luaXRyZF9zdGFydCA9ICAuOworICAgICooLmtlcm5lbDppbml0cmQpCisgICAgX2luaXRyZF9lbmQgPSAgLjsKKyAgfQogCiAgIC4gPSBBTElHTig0MDk2KTsKLSAgX2VkYXRhICA9ICAuOwotCi0gIC4gPSBBTElHTig0MDk2KTsKLSAgX19ic3Nfc3RhcnQgPSAuOwogICAuYnNzICAgICAgIDoKICAgewotICAgKiguc2JzcykKLSAgICooLmJzcykKKyAgICBfZWRhdGEgID0gIC47CisgICAgX19ic3Nfc3RhcnQgPSAuOworICAgICooLnNic3MpCisgICAgKiguYnNzKQorICAgICooQ09NTU9OKQorICAgIF9lbmQgPSAuIDsKICAgfQotICAuID0gQUxJR04oNDA5Nik7Ci0gIF9lbmQgPSAuIDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzEzX3JkYl9kZWZjb25maWcKaW5kZXggYzY4M2JjZS4uMTI2ZWYxYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzEzX3JkYl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzEzX3JkYl9kZWZjb25maWcKQEAgLTEwNCw3ICsxMDQsNiBAQAogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogQ09ORklHX0NSWVBUT19QQ0JDPW0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxNV9yZGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcKaW5kZXggYTcyMWNkMy4uYWJjZjAwYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcKQEAgLTEwMSw3ICsxMDEsNiBAQAogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogQ09ORklHX0NSWVBUT19QQ0JDPW0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU0MF9hZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTQwX2Fkc19kZWZjb25maWcKaW5kZXggNTVlMDcyNS4uMTE2NjJjMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTQwX2Fkc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTQwX2Fkc19kZWZjb25maWcKQEAgLTU4LDcgKzU4LDYgQEAKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQogQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NjBfYWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU2MF9hZHNfZGVmY29uZmlnCmluZGV4IGQ3MjQwOTUuLmViZTliMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU2MF9hZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU2MF9hZHNfZGVmY29uZmlnCkBAIC01OSw3ICs1OSw2IEBACiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NXh4X2Nkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1eHhfY2RzX2RlZmNvbmZpZwppbmRleCA0YjQ0YmVhLi5lYjI1MjI5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1eHhfY2RzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1eHhfY2RzX2RlZmNvbmZpZwpAQCAtNjMsNyArNjMsNiBAQAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODY0MV9ocGNuX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODY0MV9ocGNuX2RlZmNvbmZpZwppbmRleCBiNjE0NTA4ZC4uZjUxYzdlYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjQxX2hwY25fZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODY0MV9ocGNuX2RlZmNvbmZpZwpAQCAtMTY4LDcgKzE2OCw2IEBACiBDT05GSUdfQ1JDX1QxMERJRj15CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0lORk89eQogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYzJrX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2Mya19kZWZjb25maWcKaW5kZXggZjllNmEzZS4uMmE4NGZkNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYzJrX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jMmtfZGVmY29uZmlnCkBAIC0xMzIsOCArMTMyLDggQEAKIENPTkZJR19ORVRfQ0xTX1JTVlA2PW0KIENPTkZJR19ORVRfQ0xTX0lORD15CiBDT05GSUdfQlQ9bQotQ09ORklHX0JUX0wyQ0FQPW0KLUNPTkZJR19CVF9TQ089bQorQ09ORklHX0JUX0wyQ0FQPXkKK0NPTkZJR19CVF9TQ089eQogQ09ORklHX0JUX1JGQ09NTT1tCiBDT05GSUdfQlRfUkZDT01NX1RUWT15CiBDT05GSUdfQlRfQk5FUD1tCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9lNTV4eF9zbXBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZTU1eHhfc21wX2RlZmNvbmZpZwppbmRleCA5ZmExNjEzLi5kMzIyODM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9lNTV4eF9zbXBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2U1NXh4X3NtcF9kZWZjb25maWcKQEAgLTYsMTAgKzYsMTAgQEAKIENPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorQ09ORklHX1NQQVJTRV9JUlE9eQogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VYUEVSVD15CkBAIC0yNSw4ICsyNSwzMiBAQAogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0JJTkZNVF9NSVNDPW0KLUNPTkZJR19TUEFSU0VfSVJRPXkKICMgQ09ORklHX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfTkVUPXkKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk1fVVNFUj15CitDT05GSUdfTkVUX0tFWT15CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKK0NPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQorQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15CitDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKK0NPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKK0NPTkZJR19ORVRfSVBJUD15CitDT05GSUdfSVBfTVJPVVRFPXkKK0NPTkZJR19JUF9QSU1TTV9WMT15CitDT05GSUdfSVBfUElNU01fVjI9eQorQ09ORklHX0FSUEQ9eQorQ09ORklHX0lORVRfRVNQPXkKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lQVjY9eQorQ09ORklHX0lQX1NDVFA9bQogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKIENPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15CkBAIC0zNCw2ICs1OCw5IEBACiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMzEwNzIKIENPTkZJR19NSVNDX0RFVklDRVM9eQogQ09ORklHX0VFUFJPTV9MRUdBQ1k9eQorQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0RVTU1ZPXkKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldApAQCAtNjQsMjIgKzkxLDE0IEBACiBDT05GSUdfTkxTX1VURjg9bQogQ09ORklHX0NSQ19UMTBESUY9eQogQ09ORklHX0NSQ19JVFVfVD1tCi1DT05GSUdfTElCQ1JDMzJDPW0KIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19ERUJVR19GUz15CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0lORk89eQogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogQ09ORklHX1ZJUlFfREVCVUc9eQotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0NCQz15CiBDT05GSUdfQ1JZUFRPX1BDQkM9bQotQ09ORklHX0NSWVBUT19ITUFDPXkKLUNPTkZJR19DUllQVE9fTUQ1PXkKLUNPTkZJR19DUllQVE9fU0hBMT1tCi1DT05GSUdfQ1JZUFRPX0RFUz15CiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0RFVl9UQUxJVE9TPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9kZWZjb25maWcKaW5kZXggYzA2YTg2Yy4uOTZiODlkZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9kZWZjb25maWcKQEAgLTIwNCw3ICsyMDQsNiBAQAogQ09ORklHX0RFQlVHX0ZTPXkKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfSU5GTz15CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X3NtcF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X3NtcF9kZWZjb25maWcKaW5kZXggOTQyY2VkOS4uZGU2NTg0MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9zbXBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfc21wX2RlZmNvbmZpZwpAQCAtMjA2LDcgKzIwNiw2IEBACiBDT05GSUdfREVCVUdfRlM9eQogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19JTkZPPXkKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2eHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODZ4eF9kZWZjb25maWcKaW5kZXggMDM4YTMwOC4uYTFjYzgxNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODZ4eF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODZ4eF9kZWZjb25maWcKQEAgLTE3MSw3ICsxNzEsNiBAQAogQ09ORklHX0NSQ19UMTBESUY9eQogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19JTkZPPXkKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BtYWMzMl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wbWFjMzJfZGVmY29uZmlnCmluZGV4IGFjNGZjNDEuLmY4YjM5NGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BtYWMzMl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG1hYzMyX2RlZmNvbmZpZwpAQCAtMTEyLDggKzExMiw4IEBACiBDT05GSUdfSVJEQV9GQVNUX1JSPXkKIENPTkZJR19JUlRUWV9TSVI9bQogQ09ORklHX0JUPW0KLUNPTkZJR19CVF9MMkNBUD1tCi1DT05GSUdfQlRfU0NPPW0KK0NPTkZJR19CVF9MMkNBUD15CitDT05GSUdfQlRfU0NPPXkKIENPTkZJR19CVF9SRkNPTU09bQogQ09ORklHX0JUX1JGQ09NTV9UVFk9eQogQ09ORklHX0JUX0JORVA9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWcKaW5kZXggMGExMGZiMC4uMjE0MjA4OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnCkBAIC0zNTEsOCArMzUxLDggQEAKIENPTkZJR19WSUFfRklSPW0KIENPTkZJR19NQ1NfRklSPW0KIENPTkZJR19CVD1tCi1DT05GSUdfQlRfTDJDQVA9bQotQ09ORklHX0JUX1NDTz1tCitDT05GSUdfQlRfTDJDQVA9eQorQ09ORklHX0JUX1NDTz15CiBDT05GSUdfQlRfUkZDT01NPW0KIENPTkZJR19CVF9SRkNPTU1fVFRZPXkKIENPTkZJR19CVF9CTkVQPW0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wczNfZGVmY29uZmlnCmluZGV4IGNhYmE5MTkuLjY0NzIzMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHMzX2RlZmNvbmZpZwpAQCAtNTIsOCArNTIsOCBAQAogIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2PXkKIENPTkZJR19CVD1tCi1DT05GSUdfQlRfTDJDQVA9bQotQ09ORklHX0JUX1NDTz1tCitDT05GSUdfQlRfTDJDQVA9eQorQ09ORklHX0JUX1NDTz15CiBDT05GSUdfQlRfUkZDT01NPW0KIENPTkZJR19CVF9SRkNPTU1fVFRZPXkKIENPTkZJR19CVF9CTkVQPW0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcKaW5kZXggMjQ5ZGRkMC4uN2RlMTM4NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcKQEAgLTE0NiwxMiArMTQ2LDE4IEBACiBDT05GSUdfU0NTSV9DT05TVEFOVFM9eQogQ09ORklHX1NDU0lfRkNfQVRUUlM9eQogQ09ORklHX1NDU0lfU0FTX0FUVFJTPW0KK0NPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJPW0KK0NPTkZJR19TQ1NJX0NYR0I0X0lTQ1NJPW0KK0NPTkZJR19TQ1NJX0JOWDJfSVNDU0k9bQorQ09ORklHX1NDU0lfQk5YMl9JU0NTST1tCitDT05GSUdfQkUySVNDU0k9bQogQ09ORklHX1NDU0lfSUJNVlNDU0k9eQogQ09ORklHX1NDU0lfSUJNVkZDPW0KIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yPXkKIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9ETUFfQUREUkVTU0lOR19NT0RFPTAKIENPTkZJR19TQ1NJX0lQUj15CiBDT05GSUdfU0NTSV9RTEFfRkM9bQorQ09ORklHX1NDU0lfUUxBX0lTQ1NJPW0KIENPTkZJR19TQ1NJX0xQRkM9bQogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfU0ZGIGlzIG5vdCBzZXQKQEAgLTE5Nyw2ICsyMDMsOCBAQAogQ09ORklHX01ZUkkxMEdFPW0KIENPTkZJR19ORVRYRU5fTklDPW0KIENPTkZJR19NTFg0X0VOPW0KK0NPTkZJR19RTEdFPW0KK0NPTkZJR19CRTJORVQ9bQogQ09ORklHX1BQUD1tCiBDT05GSUdfUFBQX0FTWU5DPW0KIENPTkZJR19QUFBfU1lOQ19UVFk9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtLzh4eF9pbW1hcC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtLzh4eF9pbW1hcC5oCmluZGV4IDZiNmRjMjAuLmJkZjA1NjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS84eHhfaW1tYXAuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vOHh4X2ltbWFwLmgKQEAgLTM5Myw4ICszOTMsOCBAQAogCXVpbnQJZmVjX2FkZHJfbG93OwkJLyogbG93ZXIgMzIgYml0cyBvZiBzdGF0aW9uIGFkZHJlc3MJKi8KIAl1c2hvcnQJZmVjX2FkZHJfaGlnaDsJCS8qIHVwcGVyIDE2IGJpdHMgb2Ygc3RhdGlvbiBhZGRyZXNzCSovCiAJdXNob3J0CXJlczE7CQkJLyogcmVzZXJ2ZWQJCQkJKi8KLQl1aW50CWZlY19oYXNoX3RhYmxlX2hpZ2g7CS8qIHVwcGVyIDMyLWJpdHMgb2YgaGFzaCB0YWJsZQkJKi8KLQl1aW50CWZlY19oYXNoX3RhYmxlX2xvdzsJLyogbG93ZXIgMzItYml0cyBvZiBoYXNoIHRhYmxlCQkqLworCXVpbnQJZmVjX2dycF9oYXNoX3RhYmxlX2hpZ2g7CS8qIHVwcGVyIDMyLWJpdHMgb2YgaGFzaCB0YWJsZQkJKi8KKwl1aW50CWZlY19ncnBfaGFzaF90YWJsZV9sb3c7CS8qIGxvd2VyIDMyLWJpdHMgb2YgaGFzaCB0YWJsZQkJKi8KIAl1aW50CWZlY19yX2Rlc19zdGFydDsJLyogYmVnaW5uaW5nIG9mIFJ4IGRlc2NyaXB0b3IgcmluZwkqLwogCXVpbnQJZmVjX3hfZGVzX3N0YXJ0OwkvKiBiZWdpbm5pbmcgb2YgVHggZGVzY3JpcHRvciByaW5nCSovCiAJdWludAlmZWNfcl9idWZmX3NpemU7CS8qIFJ4IGJ1ZmZlciBzaXplCQkJKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmgKaW5kZXggMTgzM2QxYS4uYzBkODQyYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmgKQEAgLTE1Nyw2ICsxNTcsNyBAQAogI2RlZmluZSBDUFVfRlRSXzQ3Nl9ERDIJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDEwMDAwKQogI2RlZmluZSBDUFVfRlRSX05FRURfQ09IRVJFTlQJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMjAwMDApCiAjZGVmaW5lIENQVV9GVFJfTk9fQlRJQwkJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwNDAwMDApCisjZGVmaW5lIENQVV9GVFJfREVCVUdfTFZMX0VYQwkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDA4MDAwMCkKICNkZWZpbmUgQ1BVX0ZUUl9OT0RTSVNSQUxJR04JCUFTTV9DT05TVCgweDAwMDAwMDAwMDAxMDAwMDApCiAjZGVmaW5lIENQVV9GVFJfUFBDX0xFCQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDIwMDAwMCkKICNkZWZpbmUgQ1BVX0ZUUl9SRUFMX0xFCQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDQwMDAwMCkKQEAgLTE3OCwyMiArMTc5LDE4IEBACiAjZGVmaW5lIExPTkdfQVNNX0NPTlNUKHgpCQkwCiAjZW5kaWYKIAotI2RlZmluZSBDUFVfRlRSX1NMQgkJCUxPTkdfQVNNX0NPTlNUKDB4MDAwMDAwMDEwMDAwMDAwMCkKLSNkZWZpbmUgQ1BVX0ZUUl8xNk1fUEFHRQkJTE9OR19BU01fQ09OU1QoMHgwMDAwMDAwMjAwMDAwMDAwKQotI2RlZmluZSBDUFVfRlRSX1RMQklFTAkJCUxPTkdfQVNNX0NPTlNUKDB4MDAwMDAwMDQwMDAwMDAwMCkKKworI2RlZmluZSBDUFVfRlRSX0hWTU9ERV8yMDYJCUxPTkdfQVNNX0NPTlNUKDB4MDAwMDAwMDgwMDAwMDAwMCkKKyNkZWZpbmUgQ1BVX0ZUUl9DRkFSCQkJTE9OR19BU01fQ09OU1QoMHgwMDAwMDAxMDAwMDAwMDAwKQogI2RlZmluZSBDUFVfRlRSX0lBQlIJCQlMT05HX0FTTV9DT05TVCgweDAwMDAwMDIwMDAwMDAwMDApCiAjZGVmaW5lIENQVV9GVFJfTU1DUkEJCQlMT05HX0FTTV9DT05TVCgweDAwMDAwMDQwMDAwMDAwMDApCiAjZGVmaW5lIENQVV9GVFJfQ1RSTAkJCUxPTkdfQVNNX0NPTlNUKDB4MDAwMDAwODAwMDAwMDAwMCkKICNkZWZpbmUgQ1BVX0ZUUl9TTVQJCQlMT05HX0FTTV9DT05TVCgweDAwMDAwMTAwMDAwMDAwMDApCi0jZGVmaW5lIENQVV9GVFJfTE9DS0xFU1NfVExCSUUJCUxPTkdfQVNNX0NPTlNUKDB4MDAwMDA0MDAwMDAwMDAwMCkKLSNkZWZpbmUgQ1BVX0ZUUl9DSV9MQVJHRV9QQUdFCQlMT05HX0FTTV9DT05TVCgweDAwMDAxMDAwMDAwMDAwMDApCiAjZGVmaW5lIENQVV9GVFJfUEFVU0VfWkVSTwkJTE9OR19BU01fQ09OU1QoMHgwMDAwMjAwMDAwMDAwMDAwKQogI2RlZmluZSBDUFVfRlRSX1BVUlIJCQlMT05HX0FTTV9DT05TVCgweDAwMDA0MDAwMDAwMDAwMDApCiAjZGVmaW5lIENQVV9GVFJfQ0VMTF9UQl9CVUcJCUxPTkdfQVNNX0NPTlNUKDB4MDAwMDgwMDAwMDAwMDAwMCkKICNkZWZpbmUgQ1BVX0ZUUl9TUFVSUgkJCUxPTkdfQVNNX0NPTlNUKDB4MDAwMTAwMDAwMDAwMDAwMCkKICNkZWZpbmUgQ1BVX0ZUUl9EU0NSCQkJTE9OR19BU01fQ09OU1QoMHgwMDAyMDAwMDAwMDAwMDAwKQotI2RlZmluZSBDUFVfRlRSXzFUX1NFR01FTlQJCUxPTkdfQVNNX0NPTlNUKDB4MDAwNDAwMDAwMDAwMDAwMCkKLSNkZWZpbmUgQ1BVX0ZUUl9OT19TTEJJRV9CCQlMT05HX0FTTV9DT05TVCgweDAwMDgwMDAwMDAwMDAwMDApCiAjZGVmaW5lIENQVV9GVFJfVlNYCQkJTE9OR19BU01fQ09OU1QoMHgwMDEwMDAwMDAwMDAwMDAwKQogI2RlZmluZSBDUFVfRlRSX1NBTwkJCUxPTkdfQVNNX0NPTlNUKDB4MDAyMDAwMDAwMDAwMDAwMCkKICNkZWZpbmUgQ1BVX0ZUUl9DUF9VU0VfRENCVFoJCUxPTkdfQVNNX0NPTlNUKDB4MDA0MDAwMDAwMDAwMDAwMCkKQEAgLTIwMiwxMiArMTk5LDE0IEBACiAjZGVmaW5lIENQVV9GVFJfU1RDWF9DSEVDS1NfQUREUkVTUwlMT05HX0FTTV9DT05TVCgweDAyMDAwMDAwMDAwMDAwMDApCiAjZGVmaW5lIENQVV9GVFJfUE9QQ05UQgkJCUxPTkdfQVNNX0NPTlNUKDB4MDQwMDAwMDAwMDAwMDAwMCkKICNkZWZpbmUgQ1BVX0ZUUl9QT1BDTlRECQkJTE9OR19BU01fQ09OU1QoMHgwODAwMDAwMDAwMDAwMDAwKQorI2RlZmluZSBDUFVfRlRSX0lDU1dYCQkJTE9OR19BU01fQ09OU1QoMHgxMDAwMDAwMDAwMDAwMDAwKQogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0jZGVmaW5lIENQVV9GVFJfUFBDQVNfQVJDSF9WMgkoQ1BVX0ZUUl9TTEIgfCBcCi0JCQkJIENQVV9GVFJfVExCSUVMIHwgQ1BVX0ZUUl9OT0VYRUNVVEUgfCBcCi0JCQkJIENQVV9GVFJfTk9EU0lTUkFMSUdOIHwgQ1BVX0ZUUl8xNk1fUEFHRSkKKyNkZWZpbmUgQ1BVX0ZUUl9QUENBU19BUkNIX1YyCShDUFVfRlRSX05PRVhFQ1VURSB8IENQVV9GVFJfTk9EU0lTUkFMSUdOKQorCisjZGVmaW5lIE1NVV9GVFJfUFBDQVNfQVJDSF9WMiAJKE1NVV9GVFJfU0xCIHwgTU1VX0ZUUl9UTEJJRUwgfCBcCisJCQkJIE1NVV9GVFJfMTZNX1BBR0UpCiAKIC8qIFdlIG9ubHkgc2V0IHRoZSBhbHRpdmVjIGZlYXR1cmVzIGlmIHRoZSBrZXJuZWwgd2FzIGNvbXBpbGVkIHdpdGggYWx0aXZlYwogICogc3VwcG9ydApAQCAtMzg3LDcgKzM4Niw4IEBACiAJICAgIENQVV9GVFJfREJFTEwpCiAjZGVmaW5lIENQVV9GVFJTX0U1NTAwCShDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfTk9EU0lTUkFMSUdOIHwgXAogCSAgICBDUFVfRlRSX0wyQ1NSIHwgQ1BVX0ZUUl9MV1NZTkMgfCBDUFVfRlRSX05PRVhFQ1VURSB8IFwKLQkgICAgQ1BVX0ZUUl9EQkVMTCB8IENQVV9GVFJfUE9QQ05UQiB8IENQVV9GVFJfUE9QQ05URCkKKwkgICAgQ1BVX0ZUUl9EQkVMTCB8IENQVV9GVFJfUE9QQ05UQiB8IENQVV9GVFJfUE9QQ05URCB8IFwKKwkgICAgQ1BVX0ZUUl9ERUJVR19MVkxfRVhDKQogI2RlZmluZSBDUFVfRlRSU19HRU5FUklDXzMyCShDUFVfRlRSX0NPTU1PTiB8IENQVV9GVFJfTk9EU0lTUkFMSUdOKQogCiAvKiA2NC1iaXQgQ1BVcyAqLwpAQCAtNDA3LDQ0ICs0MDcsNDUgQEAKICNkZWZpbmUgQ1BVX0ZUUlNfUE9XRVI1CShDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfTFdTWU5DIHwgXAogCSAgICBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIgfCBDUFVfRlRSX0NUUkwgfCBcCiAJICAgIENQVV9GVFJfTU1DUkEgfCBDUFVfRlRSX1NNVCB8IFwKLQkgICAgQ1BVX0ZUUl9DT0hFUkVOVF9JQ0FDSEUgfCBDUFVfRlRSX0xPQ0tMRVNTX1RMQklFIHwgXAotCSAgICBDUFVfRlRSX1BVUlIgfCBDUFVfRlRSX1NUQ1hfQ0hFQ0tTX0FERFJFU1MgfCBcCi0JICAgIENQVV9GVFJfUE9QQ05UQikKKwkgICAgQ1BVX0ZUUl9DT0hFUkVOVF9JQ0FDSEUgfCBDUFVfRlRSX1BVUlIgfCBcCisJICAgIENQVV9GVFJfU1RDWF9DSEVDS1NfQUREUkVTUyB8IENQVV9GVFJfUE9QQ05UQikKICNkZWZpbmUgQ1BVX0ZUUlNfUE9XRVI2IChDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfTFdTWU5DIHwgXAogCSAgICBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIgfCBDUFVfRlRSX0NUUkwgfCBcCiAJICAgIENQVV9GVFJfTU1DUkEgfCBDUFVfRlRSX1NNVCB8IFwKLQkgICAgQ1BVX0ZUUl9DT0hFUkVOVF9JQ0FDSEUgfCBDUFVfRlRSX0xPQ0tMRVNTX1RMQklFIHwgXAorCSAgICBDUFVfRlRSX0NPSEVSRU5UX0lDQUNIRSB8IFwKIAkgICAgQ1BVX0ZUUl9QVVJSIHwgQ1BVX0ZUUl9TUFVSUiB8IENQVV9GVFJfUkVBTF9MRSB8IFwKIAkgICAgQ1BVX0ZUUl9EU0NSIHwgQ1BVX0ZUUl9VTkFMSUdORURfTERfU1REIHwgXAotCSAgICBDUFVfRlRSX1NUQ1hfQ0hFQ0tTX0FERFJFU1MgfCBDUFVfRlRSX1BPUENOVEIpCisJICAgIENQVV9GVFJfU1RDWF9DSEVDS1NfQUREUkVTUyB8IENQVV9GVFJfUE9QQ05UQiB8IENQVV9GVFJfQ0ZBUikKICNkZWZpbmUgQ1BVX0ZUUlNfUE9XRVI3IChDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfTFdTWU5DIHwgXAotCSAgICBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIgfCBDUFVfRlRSX0NUUkwgfCBcCisJICAgIENQVV9GVFJfUFBDQVNfQVJDSF9WMiB8IENQVV9GVFJfQ1RSTCB8IENQVV9GVFJfSFZNT0RFXzIwNiB8XAogCSAgICBDUFVfRlRSX01NQ1JBIHwgQ1BVX0ZUUl9TTVQgfCBcCi0JICAgIENQVV9GVFJfQ09IRVJFTlRfSUNBQ0hFIHwgQ1BVX0ZUUl9MT0NLTEVTU19UTEJJRSB8IFwKKwkgICAgQ1BVX0ZUUl9DT0hFUkVOVF9JQ0FDSEUgfCBcCiAJICAgIENQVV9GVFJfUFVSUiB8IENQVV9GVFJfU1BVUlIgfCBDUFVfRlRSX1JFQUxfTEUgfCBcCiAJICAgIENQVV9GVFJfRFNDUiB8IENQVV9GVFJfU0FPICB8IENQVV9GVFJfQVNZTV9TTVQgfCBcCi0JICAgIENQVV9GVFJfU1RDWF9DSEVDS1NfQUREUkVTUyB8IENQVV9GVFJfUE9QQ05UQiB8IENQVV9GVFJfUE9QQ05URCkKKwkgICAgQ1BVX0ZUUl9TVENYX0NIRUNLU19BRERSRVNTIHwgQ1BVX0ZUUl9QT1BDTlRCIHwgQ1BVX0ZUUl9QT1BDTlREIHwgXAorCSAgICBDUFVfRlRSX0lDU1dYIHwgQ1BVX0ZUUl9DRkFSKQogI2RlZmluZSBDUFVfRlRSU19DRUxMCShDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfTFdTWU5DIHwgXAogCSAgICBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIgfCBDUFVfRlRSX0NUUkwgfCBcCiAJICAgIENQVV9GVFJfQUxUSVZFQ19DT01QIHwgQ1BVX0ZUUl9NTUNSQSB8IENQVV9GVFJfU01UIHwgXAotCSAgICBDUFVfRlRSX1BBVVNFX1pFUk8gfCBDUFVfRlRSX0NJX0xBUkdFX1BBR0UgfCBcCi0JICAgIENQVV9GVFJfQ0VMTF9UQl9CVUcgfCBDUFVfRlRSX0NQX1VTRV9EQ0JUWiB8IFwKKwkgICAgQ1BVX0ZUUl9QQVVTRV9aRVJPICB8IENQVV9GVFJfQ0VMTF9UQl9CVUcgfCBDUFVfRlRSX0NQX1VTRV9EQ0JUWiB8IFwKIAkgICAgQ1BVX0ZUUl9VTkFMSUdORURfTERfU1REKQogI2RlZmluZSBDUFVfRlRSU19QQTZUIChDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfTFdTWU5DIHwgXAotCSAgICBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIgfCBcCi0JICAgIENQVV9GVFJfQUxUSVZFQ19DT01QIHwgQ1BVX0ZUUl9DSV9MQVJHRV9QQUdFIHwgXAotCSAgICBDUFVfRlRSX1BVUlIgfCBDUFVfRlRSX1JFQUxfTEUgfCBDUFVfRlRSX05PX1NMQklFX0IpCisJICAgIENQVV9GVFJfUFBDQVNfQVJDSF9WMiB8IENQVV9GVFJfQUxUSVZFQ19DT01QIHwgXAorCSAgICBDUFVfRlRSX1BVUlIgfCBDUFVfRlRSX1JFQUxfTEUpCiAjZGVmaW5lIENQVV9GVFJTX0NPTVBBVElCTEUJKENQVV9GVFJfVVNFX1RCIHwgQ1BVX0ZUUl9QUENBU19BUkNIX1YyKQogCisjZGVmaW5lIENQVV9GVFJTX0EyIChDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfU01UIHwgQ1BVX0ZUUl9EQkVMTCB8IFwKKwkJICAgICBDUFVfRlRSX05PRVhFQ1VURSB8IENQVV9GVFJfTk9EU0lTUkFMSUdOKQorCiAjaWZkZWYgX19wb3dlcnBjNjRfXwogI2lmZGVmIENPTkZJR19QUENfQk9PSzNFCi0jZGVmaW5lIENQVV9GVFJTX1BPU1NJQkxFCShDUFVfRlRSU19FNTUwMCkKKyNkZWZpbmUgQ1BVX0ZUUlNfUE9TU0lCTEUJKENQVV9GVFJTX0U1NTAwIHwgQ1BVX0ZUUlNfQTIpCiAjZWxzZQogI2RlZmluZSBDUFVfRlRSU19QT1NTSUJMRQlcCiAJICAgIChDUFVfRlRSU19QT1dFUjMgfCBDUFVfRlRSU19SUzY0IHwgQ1BVX0ZUUlNfUE9XRVI0IHwJXAogCSAgICBDUFVfRlRSU19QUEM5NzAgfCBDUFVfRlRSU19QT1dFUjUgfCBDUFVfRlRSU19QT1dFUjYgfAlcCiAJICAgIENQVV9GVFJTX1BPV0VSNyB8IENQVV9GVFJTX0NFTEwgfCBDUFVfRlRSU19QQTZUIHwJCVwKLQkgICAgQ1BVX0ZUUl8xVF9TRUdNRU5UIHwgQ1BVX0ZUUl9WU1gpCisJICAgIENQVV9GVFJfVlNYKQogI2VuZGlmCiAjZWxzZQogZW51bSB7CkBAIC00ODcsNyArNDg4LDcgQEAKIAogI2lmZGVmIF9fcG93ZXJwYzY0X18KICNpZmRlZiBDT05GSUdfUFBDX0JPT0szRQotI2RlZmluZSBDUFVfRlRSU19BTFdBWVMJCShDUFVfRlRSU19FNTUwMCkKKyNkZWZpbmUgQ1BVX0ZUUlNfQUxXQVlTCQkoQ1BVX0ZUUlNfRTU1MDAgJiBDUFVfRlRSU19BMikKICNlbHNlCiAjZGVmaW5lIENQVV9GVFJTX0FMV0FZUwkJXAogCSAgICAoQ1BVX0ZUUlNfUE9XRVIzICYgQ1BVX0ZUUlNfUlM2NCAmIENQVV9GVFJTX1BPV0VSNCAmCVwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0aHJlYWRzLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGhyZWFkcy5oCmluZGV4IGY3MWJiNGMuLmNlNTE2ZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0aHJlYWRzLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRocmVhZHMuaApAQCAtMzcsMTYgKzM3LDE2IEBACiAgKiBUaGlzIGNhbiB0eXBpY2FsbHkgYmUgdXNlZCBmb3IgdGhpbmdzIGxpa2UgSVBJIGZvciB0bGIgaW52YWxpZGF0aW9ucwogICogc2luY2UgdGhvc2UgbmVlZCB0byBiZSBkb25lIG9ubHkgb25jZSBwZXIgY29yZS9UTEIKICAqLwotc3RhdGljIGlubGluZSBjcHVtYXNrX3QgY3B1X3RocmVhZF9tYXNrX3RvX2NvcmVzKGNwdW1hc2tfdCB0aHJlYWRzKQorc3RhdGljIGlubGluZSBjcHVtYXNrX3QgY3B1X3RocmVhZF9tYXNrX3RvX2NvcmVzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICp0aHJlYWRzKQogewogCWNwdW1hc2tfdAl0bXAsIHJlczsKIAlpbnQJCWk7CiAKLQlyZXMgPSBDUFVfTUFTS19OT05FOworCWNwdW1hc2tfY2xlYXIoJnJlcyk7CiAJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkgKz0gdGhyZWFkc19wZXJfY29yZSkgewotCQljcHVzX3NoaWZ0X2xlZnQodG1wLCB0aHJlYWRzX2NvcmVfbWFzaywgaSk7Ci0JCWlmIChjcHVzX2ludGVyc2VjdHModGhyZWFkcywgdG1wKSkKLQkJCWNwdV9zZXQoaSwgcmVzKTsKKwkJY3B1bWFza19zaGlmdF9sZWZ0KCZ0bXAsICZ0aHJlYWRzX2NvcmVfbWFzaywgaSk7CisJCWlmIChjcHVtYXNrX2ludGVyc2VjdHModGhyZWFkcywgJnRtcCkpCisJCQljcHVtYXNrX3NldF9jcHUoaSwgJnJlcyk7CiAJfQogCXJldHVybiByZXM7CiB9CkBAIC01OCw3ICs1OCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgY3B1bWFza190IGNwdV9vbmxpbmVfY29yZXNfbWFwKHZvaWQpCiB7Ci0JcmV0dXJuIGNwdV90aHJlYWRfbWFza190b19jb3JlcyhjcHVfb25saW5lX21hcCk7CisJcmV0dXJuIGNwdV90aHJlYWRfbWFza190b19jb3JlcyhjcHVfb25saW5lX21hc2spOwogfQogCiAjaWZkZWYgQ09ORklHX1NNUApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RiZWxsLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZGJlbGwuaAppbmRleCAwODkzYWI5Li45YzcwZDBjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZGJlbGwuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZGJlbGwuaApAQCAtMjcsOSArMjcsOCBAQAogCVBQQ19HX0RCRUxMX01DID0gNCwJLyogZ3Vlc3QgbWNoZWNrIGRvb3JiZWxsICovCiB9OwogCi1leHRlcm4gdm9pZCBkb29yYmVsbF9tZXNzYWdlX3Bhc3MoaW50IHRhcmdldCwgaW50IG1zZyk7CitleHRlcm4gdm9pZCBkb29yYmVsbF9jYXVzZV9pcGkoaW50IGNwdSwgdW5zaWduZWQgbG9uZyBkYXRhKTsKIGV4dGVybiB2b2lkIGRvb3JiZWxsX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1leHRlcm4gdm9pZCBkb29yYmVsbF9jaGVja19zZWxmKHZvaWQpOwogZXh0ZXJuIHZvaWQgZG9vcmJlbGxfc2V0dXBfdGhpc19jcHUodm9pZCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwcGNfbXNnc25kKGVudW0gcHBjX2RiZWxsIHR5cGUsIHUzMiBmbGFncywgdTMyIHRhZykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbXVsYXRlZF9vcHMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbXVsYXRlZF9vcHMuaAppbmRleCBmMGZiNGZjLi40NTkyMTY3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZW11bGF0ZWRfb3BzLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VtdWxhdGVkX29wcy5oCkBAIC01Miw2ICs1MiwxMCBAQAogI2lmZGVmIENPTkZJR19WU1gKIAlzdHJ1Y3QgcHBjX2VtdWxhdGVkX2VudHJ5IHZzeDsKICNlbmRpZgorI2lmZGVmIENPTkZJR19QUEM2NAorCXN0cnVjdCBwcGNfZW11bGF0ZWRfZW50cnkgbWZkc2NyOworCXN0cnVjdCBwcGNfZW11bGF0ZWRfZW50cnkgbXRkc2NyOworI2VuZGlmCiB9IHBwY19lbXVsYXRlZDsKIAogZXh0ZXJuIHUzMiBwcGNfd2Fybl9lbXVsYXRlZDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9leGNlcHRpb24tNjRzLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZXhjZXB0aW9uLTY0cy5oCmluZGV4IDc3NzhkNmYuLmY1ZGZlMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9leGNlcHRpb24tNjRzLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2V4Y2VwdGlvbi02NHMuaApAQCAtNDYsNiArNDYsNyBAQAogI2RlZmluZSBFWF9DQ1IJCTYwCiAjZGVmaW5lIEVYX1IzCQk2NAogI2RlZmluZSBFWF9MUgkJNzIKKyNkZWZpbmUgRVhfQ0ZBUgkJODAKIAogLyoKICAqIFdlJ3JlIHNob3J0IG9uIHNwYWNlIGFuZCB0aW1lIGluIHRoZSBleGNlcHRpb24gcHJvbG9nLCBzbyB3ZSBjYW4ndApAQCAtNTYsMzAgKzU3LDQwIEBACiAjZGVmaW5lIExPQURfSEFORExFUihyZWcsIGxhYmVsKQkJCQkJXAogCWFkZGkJcmVnLHJlZywobGFiZWwpLV9zdGV4dDsJLyogdmlydCBhZGRyIG9mIGhhbmRsZXIgLi4uICovCiAKLSNkZWZpbmUgRVhDRVBUSU9OX1BST0xPR18xKGFyZWEpCQkJCVwKLQltZnNwcglyMTMsU1BSTl9TUFJHX1BBQ0E7CS8qIGdldCBwYWNhIGFkZHJlc3MgaW50byByMTMgKi8JXAorLyogRXhjZXB0aW9uIHJlZ2lzdGVyIHByZWZpeGVzICovCisjZGVmaW5lIEVYQ19IVglICisjZGVmaW5lIEVYQ19TVEQKKworI2RlZmluZSBFWENFUFRJT05fUFJPTE9HXzEoYXJlYSkJCQkJCVwKKwlHRVRfUEFDQShyMTMpOwkJCQkJCQlcCiAJc3RkCXI5LGFyZWErRVhfUjkocjEzKTsJLyogc2F2ZSByOSAtIHIxMiAqLwkJXAogCXN0ZAlyMTAsYXJlYStFWF9SMTAocjEzKTsJCQkJCVwKIAlzdGQJcjExLGFyZWErRVhfUjExKHIxMyk7CQkJCQlcCiAJc3RkCXIxMixhcmVhK0VYX1IxMihyMTMpOwkJCQkJXAotCW1mc3ByCXI5LFNQUk5fU1BSR19TQ1JBVENIMDsJCQkJCVwKKwlCRUdJTl9GVFJfU0VDVElPTl9ORVNURUQoNjYpOwkJCQkJXAorCW1mc3ByCXIxMCxTUFJOX0NGQVI7CQkJCQkJXAorCXN0ZAlyMTAsYXJlYStFWF9DRkFSKHIxMyk7CQkJCQlcCisJRU5EX0ZUUl9TRUNUSU9OX05FU1RFRChDUFVfRlRSX0NGQVIsIENQVV9GVFJfQ0ZBUiwgNjYpOwkJXAorCUdFVF9TQ1JBVENIMChyOSk7CQkJCQkJXAogCXN0ZAlyOSxhcmVhK0VYX1IxMyhyMTMpOwkJCQkJXAogCW1mY3IJcjkKIAotI2RlZmluZSBFWENFUFRJT05fUFJPTE9HX1BTRVJJRVNfMShsYWJlbCkJCQkJXAorI2RlZmluZSBfX0VYQ0VQVElPTl9QUk9MT0dfUFNFUklFU18xKGxhYmVsLCBoKQkJCQlcCiAJbGQJcjEyLFBBQ0FLQkFTRShyMTMpOwkvKiBnZXQgaGlnaCBwYXJ0IG9mICZsYWJlbCAqLwlcCiAJbGQJcjEwLFBBQ0FLTVNSKHIxMyk7CS8qIGdldCBNU1IgdmFsdWUgZm9yIGtlcm5lbCAqLwlcCi0JbWZzcHIJcjExLFNQUk5fU1JSMDsJCS8qIHNhdmUgU1JSMCAqLwkJCVwKKwltZnNwcglyMTEsU1BSTl8jI2gjI1NSUjA7CS8qIHNhdmUgU1JSMCAqLwkJCVwKIAlMT0FEX0hBTkRMRVIocjEyLGxhYmVsKQkJCQkJCVwKLQltdHNwcglTUFJOX1NSUjAscjEyOwkJCQkJCVwKLQltZnNwcglyMTIsU1BSTl9TUlIxOwkJLyogYW5kIFNSUjEgKi8JCQlcCi0JbXRzcHIJU1BSTl9TUlIxLHIxMDsJCQkJCQlcCi0JcmZpZDsJCQkJCQkJCVwKKwltdHNwcglTUFJOXyMjaCMjU1JSMCxyMTI7CQkJCQlcCisJbWZzcHIJcjEyLFNQUk5fIyNoIyNTUlIxOwkvKiBhbmQgU1JSMSAqLwkJCVwKKwltdHNwcglTUFJOXyMjaCMjU1JSMSxyMTA7CQkJCQlcCisJaCMjcmZpZDsJCQkJCQkJXAogCWIJLgkvKiBwcmV2ZW50IHNwZWN1bGF0aXZlIGV4ZWN1dGlvbiAqLworI2RlZmluZSBFWENFUFRJT05fUFJPTE9HX1BTRVJJRVNfMShsYWJlbCwgaCkgXAorCV9fRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTXzEobGFiZWwsIGgpCiAKLSNkZWZpbmUgRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTKGFyZWEsIGxhYmVsKQkJCQlcCisjZGVmaW5lIEVYQ0VQVElPTl9QUk9MT0dfUFNFUklFUyhhcmVhLCBsYWJlbCwgaCkJCQlcCiAJRVhDRVBUSU9OX1BST0xPR18xKGFyZWEpOwkJCQkJXAotCUVYQ0VQVElPTl9QUk9MT0dfUFNFUklFU18xKGxhYmVsKTsKKwlFWENFUFRJT05fUFJPTE9HX1BTRVJJRVNfMShsYWJlbCwgaCk7CiAKIC8qCiAgKiBUaGUgY29tbW9uIGV4Y2VwdGlvbiBwcm9sb2cgaXMgdXNlZCBmb3IgYWxsIGV4Y2VwdCBhIGZldyBleGNlcHRpb25zCkBAIC05OCwxMCArMTA5LDExIEBACiAJYmVxLQkxZjsJCQkJCQkJICAgXAogCWxkCXIxLFBBQ0FLU0FWRShyMTMpOwkvKiBrZXJuZWwgc3RhY2sgdG8gdXNlCQkqLyBcCiAxOgljbXBkaQljcjEscjEsMDsJCS8qIGNoZWNrIGlmIHIxIGlzIGluIHVzZXJzcGFjZQkqLyBcCi0JYmdlLQljcjEsMmY7CQkJLyogYWJvcnQgaWYgaXQgaXMJCSovIFwKLQliCTNmOwkJCQkJCQkgICBcCi0yOglsaQlyMSwobik7CQkJLyogd2lsbCBiZSByZWxvYWRlZCBsYXRlcgkqLyBcCisJYmx0KwljcjEsM2Y7CQkJLyogYWJvcnQgaWYgaXQgaXMJCSovIFwKKwlsaQlyMSwobik7CQkJLyogd2lsbCBiZSByZWxvYWRlZCBsYXRlcgkqLyBcCiAJc3RoCXIxLFBBQ0FfVFJBUF9TQVZFKHIxMyk7CQkJCQkgICBcCisJc3RkCXIzLGFyZWErRVhfUjMocjEzKTsJCQkJCSAgIFwKKwlhZGRpCXIzLHIxMyxhcmVhOwkJLyogcjMgLT4gd2hlcmUgcmVncyBhcmUgc2F2ZWQqLwkgICBcCiAJYgliYWRfc3RhY2s7CQkJCQkJICAgXAogMzoJc3RkCXI5LF9DQ1IocjEpOwkJLyogc2F2ZSBDUiBpbiBzdGFja2ZyYW1lCSovIFwKIAlzdGQJcjExLF9OSVAocjEpOwkJLyogc2F2ZSBTUlIwIGluIHN0YWNrZnJhbWUJKi8gXApAQCAtMTIzLDYgKzEzNSwxMCBAQAogCXN0ZAlyOSxHUFIxMShyMSk7CQkJCQkJICAgXAogCXN0ZAlyMTAsR1BSMTIocjEpOwkJCQkJCSAgIFwKIAlzdGQJcjExLEdQUjEzKHIxKTsJCQkJCQkgICBcCisJQkVHSU5fRlRSX1NFQ1RJT05fTkVTVEVEKDY2KTsJCQkJCSAgIFwKKwlsZAlyMTAsYXJlYStFWF9DRkFSKHIxMyk7CQkJCQkgICBcCisJc3RkCXIxMCxPUklHX0dQUjMocjEpOwkJCQkJICAgXAorCUVORF9GVFJfU0VDVElPTl9ORVNURUQoQ1BVX0ZUUl9DRkFSLCBDUFVfRlRSX0NGQVIsIDY2KTsJCSAgIFwKIAlsZAlyMixQQUNBVE9DKHIxMyk7CS8qIGdldCBrZXJuZWwgVE9DIGludG8gcjIJKi8gXAogCW1mbHIJcjk7CQkJLyogc2F2ZSBMUiBpbiBzdGFja2ZyYW1lCSovIFwKIAlzdGQJcjksX0xJTksocjEpOwkJCQkJCSAgIFwKQEAgLTE0Myw1NyArMTU5LDYyIEBACiAvKgogICogRXhjZXB0aW9uIHZlY3RvcnMuCiAgKi8KLSNkZWZpbmUgU1REX0VYQ0VQVElPTl9QU0VSSUVTKG4sIGxhYmVsKQkJCVwKLQkuID0gbjsJCQkJCQlcCisjZGVmaW5lIFNURF9FWENFUFRJT05fUFNFUklFUyhsb2MsIHZlYywgbGFiZWwpCQlcCisJLiA9IGxvYzsJCQkJCVwKIAkuZ2xvYmwgbGFiZWwjI19wU2VyaWVzOwkJCQlcCiBsYWJlbCMjX3BTZXJpZXM6CQkJCQlcCiAJSE1UX01FRElVTTsJCQkJCVwKLQlET19LVk0JbjsJCQkJCVwKLQltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDAscjEzOwkJLyogc2F2ZSByMTMgKi8JXAotCUVYQ0VQVElPTl9QUk9MT0dfUFNFUklFUyhQQUNBX0VYR0VOLCBsYWJlbCMjX2NvbW1vbikKKwlET19LVk0JdmVjOwkJCQkJXAorCVNFVF9TQ1JBVENIMChyMTMpOwkJLyogc2F2ZSByMTMgKi8JCVwKKwlFWENFUFRJT05fUFJPTE9HX1BTRVJJRVMoUEFDQV9FWEdFTiwgbGFiZWwjI19jb21tb24sIEVYQ19TVEQpCiAKLSNkZWZpbmUgSFNURF9FWENFUFRJT05fUFNFUklFUyhuLCBsYWJlbCkJCVwKLQkuID0gbjsJCQkJCQlcCi0JLmdsb2JsIGxhYmVsIyNfcFNlcmllczsJCQkJXAotbGFiZWwjI19wU2VyaWVzOgkJCQkJXAorI2RlZmluZSBTVERfRVhDRVBUSU9OX0hWKGxvYywgdmVjLCBsYWJlbCkJCVwKKwkuID0gbG9jOwkJCQkJXAorCS5nbG9ibCBsYWJlbCMjX2h2OwkJCQlcCitsYWJlbCMjX2h2OgkJCQkJCVwKIAlITVRfTUVESVVNOwkJCQkJXAotCW10c3ByCVNQUk5fU1BSR19TQ1JBVENIMCxyMjA7CS8qIHNhdmUgcjIwICovCVwKLQltZnNwcglyMjAsU1BSTl9IU1JSMDsJCS8qIGNvcHkgSFNSUjAgdG8gU1JSMCAqLyBcCi0JbXRzcHIJU1BSTl9TUlIwLHIyMDsJCQkJXAotCW1mc3ByCXIyMCxTUFJOX0hTUlIxOwkJLyogY29weSBIU1JSMCB0byBTUlIwICovIFwKLQltdHNwcglTUFJOX1NSUjEscjIwOwkJCQlcCi0JbWZzcHIJcjIwLFNQUk5fU1BSR19TQ1JBVENIMDsJLyogcmVzdG9yZSByMjAgKi8gXAotCW10c3ByCVNQUk5fU1BSR19TQ1JBVENIMCxyMTM7CQkvKiBzYXZlIHIxMyAqLwlcCi0JRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTKFBBQ0FfRVhHRU4sIGxhYmVsIyNfY29tbW9uKQorCURPX0tWTQl2ZWM7CQkJCQlcCisJU0VUX1NDUkFUQ0gwKHIxMyk7CS8qIHNhdmUgcjEzICovCQlcCisJRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTKFBBQ0FfRVhHRU4sIGxhYmVsIyNfY29tbW9uLCBFWENfSFYpCiAKLQotI2RlZmluZSBNQVNLQUJMRV9FWENFUFRJT05fUFNFUklFUyhuLCBsYWJlbCkJCQkJXAotCS4gPSBuOwkJCQkJCQkJXAotCS5nbG9ibCBsYWJlbCMjX3BTZXJpZXM7CQkJCQkJXAotbGFiZWwjI19wU2VyaWVzOgkJCQkJCQlcCisjZGVmaW5lIF9fTUFTS0FCTEVfRVhDRVBUSU9OX1BTRVJJRVModmVjLCBsYWJlbCwgaCkJCQlcCiAJSE1UX01FRElVTTsJCQkJCQkJXAotCURPX0tWTQluOwkJCQkJCQlcCi0JbXRzcHIJU1BSTl9TUFJHX1NDUkFUQ0gwLHIxMzsJLyogc2F2ZSByMTMgKi8JCQlcCi0JbWZzcHIJcjEzLFNQUk5fU1BSR19QQUNBOwkvKiBnZXQgcGFjYSBhZGRyZXNzIGludG8gcjEzICovCVwKKwlET19LVk0JdmVjOwkJCQkJCQlcCisJU0VUX1NDUkFUQ0gwKHIxMyk7ICAgIC8qIHNhdmUgcjEzICovCQkJCVwKKwlHRVRfUEFDQShyMTMpOwkJCQkJCQlcCiAJc3RkCXI5LFBBQ0FfRVhHRU4rRVhfUjkocjEzKTsJLyogc2F2ZSByOSwgcjEwICovCVwKIAlzdGQJcjEwLFBBQ0FfRVhHRU4rRVhfUjEwKHIxMyk7CQkJCVwKIAlsYnoJcjEwLFBBQ0FTT0ZUSVJRRU4ocjEzKTsJCQkJCVwKIAltZmNyCXI5OwkJCQkJCQlcCiAJY21wd2kJcjEwLDA7CQkJCQkJCVwKLQliZXEJbWFza2VkX2ludGVycnVwdDsJCQkJCVwKLQltZnNwcglyMTAsU1BSTl9TUFJHX1NDUkFUQ0gwOwkJCQkJXAorCWJlcQltYXNrZWRfIyNoIyNpbnRlcnJ1cHQ7CQkJCQlcCisJR0VUX1NDUkFUQ0gwKHIxMCk7CQkJCQkJXAogCXN0ZAlyMTAsUEFDQV9FWEdFTitFWF9SMTMocjEzKTsJCQkJXAogCXN0ZAlyMTEsUEFDQV9FWEdFTitFWF9SMTEocjEzKTsJCQkJXAogCXN0ZAlyMTIsUEFDQV9FWEdFTitFWF9SMTIocjEzKTsJCQkJXAogCWxkCXIxMixQQUNBS0JBU0UocjEzKTsJLyogZ2V0IGhpZ2ggcGFydCBvZiAmbGFiZWwgKi8JXAogCWxkCXIxMCxQQUNBS01TUihyMTMpOwkvKiBnZXQgTVNSIHZhbHVlIGZvciBrZXJuZWwgKi8JXAotCW1mc3ByCXIxMSxTUFJOX1NSUjA7CQkvKiBzYXZlIFNSUjAgKi8JCQlcCisJbWZzcHIJcjExLFNQUk5fIyNoIyNTUlIwOwkvKiBzYXZlIFNSUjAgKi8JCQlcCiAJTE9BRF9IQU5ETEVSKHIxMixsYWJlbCMjX2NvbW1vbikJCQkJXAotCW10c3ByCVNQUk5fU1JSMCxyMTI7CQkJCQkJXAotCW1mc3ByCXIxMixTUFJOX1NSUjE7CQkvKiBhbmQgU1JSMSAqLwkJCVwKLQltdHNwcglTUFJOX1NSUjEscjEwOwkJCQkJCVwKLQlyZmlkOwkJCQkJCQkJXAorCW10c3ByCVNQUk5fIyNoIyNTUlIwLHIxMjsJCQkJCVwKKwltZnNwcglyMTIsU1BSTl8jI2gjI1NSUjE7CS8qIGFuZCBTUlIxICovCQkJXAorCW10c3ByCVNQUk5fIyNoIyNTUlIxLHIxMDsJCQkJCVwKKwloIyNyZmlkOwkJCQkJCQlcCiAJYgkuCS8qIHByZXZlbnQgc3BlY3VsYXRpdmUgZXhlY3V0aW9uICovCisjZGVmaW5lIF9NQVNLQUJMRV9FWENFUFRJT05fUFNFUklFUyh2ZWMsIGxhYmVsLCBoKQkJCVwKKwlfX01BU0tBQkxFX0VYQ0VQVElPTl9QU0VSSUVTKHZlYywgbGFiZWwsIGgpCisKKyNkZWZpbmUgTUFTS0FCTEVfRVhDRVBUSU9OX1BTRVJJRVMobG9jLCB2ZWMsIGxhYmVsKQkJCVwKKwkuID0gbG9jOwkJCQkJCQlcCisJLmdsb2JsIGxhYmVsIyNfcFNlcmllczsJCQkJCQlcCitsYWJlbCMjX3BTZXJpZXM6CQkJCQkJCVwKKwlfTUFTS0FCTEVfRVhDRVBUSU9OX1BTRVJJRVModmVjLCBsYWJlbCwgRVhDX1NURCkKKworI2RlZmluZSBNQVNLQUJMRV9FWENFUFRJT05fSFYobG9jLCB2ZWMsIGxhYmVsKQkJCQlcCisJLiA9IGxvYzsJCQkJCQkJXAorCS5nbG9ibCBsYWJlbCMjX2h2OwkJCQkJCVwKK2xhYmVsIyNfaHY6CQkJCQkJCQlcCisJX01BU0tBQkxFX0VYQ0VQVElPTl9QU0VSSUVTKHZlYywgbGFiZWwsIEVYQ19IVikKIAogI2lmZGVmIENPTkZJR19QUENfSVNFUklFUwogI2RlZmluZSBESVNBQkxFX0lOVFMJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZlYXR1cmUtZml4dXBzLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmVhdHVyZS1maXh1cHMuaAppbmRleCA5MjFhODQ3Li45YTY3YTM4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmVhdHVyZS1maXh1cHMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmVhdHVyZS1maXh1cHMuaApAQCAtNDksNyArNDksNyBAQAogCUZUUl9FTlRSWV9PRkZTRVQgbGFiZWwjIzJiLWxhYmVsIyM1YjsJCQlcCiAJRlRSX0VOVFJZX09GRlNFVCBsYWJlbCMjM2ItbGFiZWwjIzViOwkJCVwKIAlGVFJfRU5UUllfT0ZGU0VUIGxhYmVsIyM0Yi1sYWJlbCMjNWI7CQkJXAotCS5pZmd0IChsYWJlbCMjNGItbGFiZWwjIzNiKS0obGFiZWwjIzJiLWxhYmVsIyMxYik7CVwKKwkuaWZndCAobGFiZWwjIzRiLSBsYWJlbCMjM2IpLShsYWJlbCMjMmItIGxhYmVsIyMxYik7CVwKIAkuZXJyb3IgIkZlYXR1cmUgc2VjdGlvbiBlbHNlIGNhc2UgbGFyZ2VyIHRoYW4gYm9keSI7CVwKIAkuZW5kaWY7CQkJCQkJCVwKIAkucG9wc2VjdGlvbjsKQEAgLTE0Niw2ICsxNDYsMTkgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAorI2RlZmluZSBBU01fRlRSX0lGKHNlY3Rpb25faWYsIHNlY3Rpb25fZWxzZSwgbXNrLCB2YWwpCVwKKwlzdHJpbmdpZnlfaW5fYyhCRUdJTl9GVFJfU0VDVElPTikJCQlcCisJc2VjdGlvbl9pZiAiOyAiCQkJCQkJXAorCXN0cmluZ2lmeV9pbl9jKEZUUl9TRUNUSU9OX0VMU0UpCQkJXAorCXNlY3Rpb25fZWxzZSAiOyAiCQkJCQlcCisJc3RyaW5naWZ5X2luX2MoQUxUX0ZUUl9TRUNUSU9OX0VORCgobXNrKSwgKHZhbCkpKQorCisjZGVmaW5lIEFTTV9GVFJfSUZTRVQoc2VjdGlvbl9pZiwgc2VjdGlvbl9lbHNlLCBtc2spCVwKKwlBU01fRlRSX0lGKHNlY3Rpb25faWYsIHNlY3Rpb25fZWxzZSwgKG1zayksIChtc2spKQorCisjZGVmaW5lIEFTTV9GVFJfSUZDTFIoc2VjdGlvbl9pZiwgc2VjdGlvbl9lbHNlLCBtc2spCVwKKwlBU01fRlRSX0lGKHNlY3Rpb25faWYsIHNlY3Rpb25fZWxzZSwgKG1zayksIDApCisKICNkZWZpbmUgQVNNX01NVV9GVFJfSUYoc2VjdGlvbl9pZiwgc2VjdGlvbl9lbHNlLCBtc2ssIHZhbCkJXAogCXN0cmluZ2lmeV9pbl9jKEJFR0lOX01NVV9GVFJfU0VDVElPTikJCQlcCiAJc2VjdGlvbl9pZiAiOyAiCQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Zpcm13YXJlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmlybXdhcmUuaAppbmRleCA0ZWY2NjJlLi4zYTZjNTg2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmlybXdhcmUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZmlybXdhcmUuaApAQCAtNDcsNiArNDcsNyBAQAogI2RlZmluZSBGV19GRUFUVVJFX0JFQVQJCUFTTV9DT05TVCgweDAwMDAwMDAwMDEwMDAwMDApCiAjZGVmaW5lIEZXX0ZFQVRVUkVfQ01PCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAyMDAwMDAwKQogI2RlZmluZSBGV19GRUFUVVJFX1ZQSE4JCUFTTV9DT05TVCgweDAwMDAwMDAwMDQwMDAwMDApCisjZGVmaW5lIEZXX0ZFQVRVUkVfWENNTwkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwODAwMDAwMCkKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApAQCAtNjAsNyArNjEsNyBAQAogCQlGV19GRUFUVVJFX1ZJTyB8IEZXX0ZFQVRVUkVfUkRNQSB8IEZXX0ZFQVRVUkVfTExBTiB8CiAJCUZXX0ZFQVRVUkVfQlVMS19SRU1PVkUgfCBGV19GRUFUVVJFX1hEQUJSIHwKIAkJRldfRkVBVFVSRV9NVUxUSVRDRSB8IEZXX0ZFQVRVUkVfU1BMUEFSIHwgRldfRkVBVFVSRV9MUEFSIHwKLQkJRldfRkVBVFVSRV9DTU8gfCBGV19GRUFUVVJFX1ZQSE4sCisJCUZXX0ZFQVRVUkVfQ01PIHwgRldfRkVBVFVSRV9WUEhOIHwgRldfRkVBVFVSRV9YQ01PLAogCUZXX0ZFQVRVUkVfUFNFUklFU19BTFdBWVMgPSAwLAogCUZXX0ZFQVRVUkVfSVNFUklFU19QT1NTSUJMRSA9IEZXX0ZFQVRVUkVfSVNFUklFUyB8IEZXX0ZFQVRVUkVfTFBBUiwKIAlGV19GRUFUVVJFX0lTRVJJRVNfQUxXQVlTID0gRldfRkVBVFVSRV9JU0VSSUVTIHwgRldfRkVBVFVSRV9MUEFSLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h2Y2FsbC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h2Y2FsbC5oCmluZGV4IDhlZGVjNzEuLjg1MmI4YzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odmNhbGwuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHZjYWxsLmgKQEAgLTEwMiw2ICsxMDIsNyBAQAogI2RlZmluZSBIX0FORENPTkQJCSgxVUw8PCg2My0zMykpCiAjZGVmaW5lIEhfSUNBQ0hFX0lOVkFMSURBVEUJKDFVTDw8KDYzLTQwKSkJLyogaWNiaSwgZXRjLiAgKGlnbm9yZWQgZm9yIElPIHBhZ2VzKSAqLwogI2RlZmluZSBIX0lDQUNIRV9TWU5DSFJPTklaRQkoMVVMPDwoNjMtNDEpKQkvKiBkY2JzdCwgaWNiaSwgZXRjIChpZ25vcmVkIGZvciBJTyBwYWdlcyAqLworI2RlZmluZSBIX0NPQUxFU0NFX0NBTkQJKDFVTDw8KDYzLTQyKSkJLyogcGFnZSBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBjb2FsZXNjaW5nICovCiAjZGVmaW5lIEhfWkVST19QQUdFCQkoMVVMPDwoNjMtNDgpKQkvKiB6ZXJvIHRoZSBwYWdlIGJlZm9yZSBtYXBwaW5nIChpZ25vcmVkIGZvciBJTyBwYWdlcykgKi8KICNkZWZpbmUgSF9DT1BZX1BBR0UJCSgxVUw8PCg2My00OSkpCiAjZGVmaW5lIEhfTgkJCSgxVUw8PCg2My02MSkpCkBAIC0yMzQsNiArMjM1LDcgQEAKICNkZWZpbmUgSF9HRVRfTVBQCQkweDJENAogI2RlZmluZSBIX0hPTUVfTk9ERV9BU1NPQ0lBVElWSVRZIDB4MkVDCiAjZGVmaW5lIEhfQkVTVF9FTkVSR1kJCTB4MkY0CisjZGVmaW5lIEhfR0VUX01QUF9YCQkweDMxNAogI2RlZmluZSBNQVhfSENBTExfT1BDT0RFCUhfQkVTVF9FTkVSR1kKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KQEAgLTMxMiw2ICszMTQsMTYgQEAKIAogaW50IGhfZ2V0X21wcChzdHJ1Y3QgaHZjYWxsX21wcF9kYXRhICopOwogCitzdHJ1Y3QgaHZjYWxsX21wcF94X2RhdGEgeworCXVuc2lnbmVkIGxvbmcgY29hbGVzY2VkX2J5dGVzOworCXVuc2lnbmVkIGxvbmcgcG9vbF9jb2FsZXNjZWRfYnl0ZXM7CisJdW5zaWduZWQgbG9uZyBwb29sX3B1cnJfY3ljbGVzOworCXVuc2lnbmVkIGxvbmcgcG9vbF9zcHVycl9jeWNsZXM7CisJdW5zaWduZWQgbG9uZyByZXNlcnZlZFszXTsKK307CisKK2ludCBoX2dldF9tcHBfeChzdHJ1Y3QgaHZjYWxsX21wcF94X2RhdGEgKm1wcF94X2RhdGEpOworCiAjaWZkZWYgQ09ORklHX1BQQ19QU0VSSUVTCiBleHRlcm4gaW50IENNT19QclBTUDsKIGV4dGVybiBpbnQgQ01PX1NlY1BTUDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pby13b3JrYXJvdW5kcy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvLXdvcmthcm91bmRzLmgKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvLXdvcmthcm91bmRzLmgKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby13b3JrYXJvdW5kcy5oCmluZGV4IDZlZmM3NzguLmZiYWU0OTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pby13b3JrYXJvdW5kcy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby13b3JrYXJvdW5kcy5oCkBAIC0zMSw3ICszMSw2IEBACiAJdm9pZCAgICpwcml2YXRlOwogfTsKIAotdm9pZCBfX2RldmluaXQgaW9fd29ya2Fyb3VuZF9pbml0KHZvaWQpOwogdm9pZCBfX2RldmluaXQgaW93YV9yZWdpc3Rlcl9idXMoc3RydWN0IHBjaV9jb250cm9sbGVyICosIHN0cnVjdCBwcGNfcGNpX2lvICosCiAJCQkJIGludCAoKikoc3RydWN0IGlvd2FfYnVzICosIHZvaWQgKiksIHZvaWQgKik7CiBzdHJ1Y3QgaW93YV9idXMgKmlvd2FfbWVtX2ZpbmRfYnVzKGNvbnN0IFBDSV9JT19BRERSKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggMDAxZjJmMS4uNDU2OThkNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTIsNiArMiw4IEBACiAjZGVmaW5lIF9BU01fUE9XRVJQQ19JT19ICiAjaWZkZWYgX19LRVJORUxfXwogCisjZGVmaW5lIEFSQ0hfSEFTX0lPUkVNQVBfV0MKKwogLyoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC00ODEsMTAgKzQ4MywxNiBAQAogCQkJCV9tZW1jcHlfZnJvbWlvKGRzdCxQQ0lfRklYX0FERFIoc3JjKSxuKQogI2VuZGlmIC8qICFDT05GSUdfRUVIICovCiAKLSNpZmRlZiBDT05GSUdfUFBDX0lORElSRUNUX0lPCi0jZGVmaW5lIERFRl9QQ0lfSE9PSyh4KQkJeAorI2lmZGVmIENPTkZJR19QUENfSU5ESVJFQ1RfUElPCisjZGVmaW5lIERFRl9QQ0lfSE9PS19waW8oeCkJeAogI2Vsc2UKLSNkZWZpbmUgREVGX1BDSV9IT09LKHgpCQlOVUxMCisjZGVmaW5lIERFRl9QQ0lfSE9PS19waW8oeCkJTlVMTAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUFBDX0lORElSRUNUX01NSU8KKyNkZWZpbmUgREVGX1BDSV9IT09LX21lbSh4KQl4CisjZWxzZQorI2RlZmluZSBERUZfUENJX0hPT0tfbWVtKHgpCU5VTEwKICNlbmRpZgogCiAvKiBTdHJ1Y3R1cmUgY29udGFpbmluZyBhbGwgdGhlIGhvb2tzICovCkBAIC01MDQsNyArNTEyLDcgQEAKICNkZWZpbmUgREVGX1BDSV9BQ19SRVQobmFtZSwgcmV0LCBhdCwgYWwsIHNwYWNlLCBhYSkJCVwKIHN0YXRpYyBpbmxpbmUgcmV0IG5hbWUgYXQJCQkJCVwKIHsJCQkJCQkJCVwKLQlpZiAoREVGX1BDSV9IT09LKHBwY19wY2lfaW8ubmFtZSkgIT0gTlVMTCkJCVwKKwlpZiAoREVGX1BDSV9IT09LXyMjc3BhY2UocHBjX3BjaV9pby5uYW1lKSAhPSBOVUxMKQlcCiAJCXJldHVybiBwcGNfcGNpX2lvLm5hbWUgYWw7CQkJXAogCXJldHVybiBfX2RvXyMjbmFtZSBhbDsJCQkJCVwKIH0KQEAgLTUxMiw3ICs1MjAsNyBAQAogI2RlZmluZSBERUZfUENJX0FDX05PUkVUKG5hbWUsIGF0LCBhbCwgc3BhY2UsIGFhKQkJXAogc3RhdGljIGlubGluZSB2b2lkIG5hbWUgYXQJCQkJCVwKIHsJCQkJCQkJCVwKLQlpZiAoREVGX1BDSV9IT09LKHBwY19wY2lfaW8ubmFtZSkgIT0gTlVMTCkJCVwKKwlpZiAoREVGX1BDSV9IT09LXyMjc3BhY2UocHBjX3BjaV9pby5uYW1lKSAhPSBOVUxMKQkJXAogCQlwcGNfcGNpX2lvLm5hbWUgYWw7CQkJCVwKIAllbHNlCQkJCQkJCVwKIAkJX19kb18jI25hbWUgYWw7CQkJCQlcCkBAIC02MTYsMTIgKzYyNCwxMyBAQAogICogKiBpb3JlbWFwIGlzIHRoZSBzdGFuZGFyZCBvbmUgYW5kIHByb3ZpZGVzIG5vbi1jYWNoZWFibGUgZ3VhcmRlZCBtYXBwaW5ncwogICogICBhbmQgY2FuIGJlIGhvb2tlZCBieSB0aGUgcGxhdGZvcm0gdmlhIHBwY19tZAogICoKLSAqICogaW9yZW1hcF9mbGFncyBhbGxvd3MgdG8gc3BlY2lmeSB0aGUgcGFnZSBmbGFncyBhcyBhbiBhcmd1bWVudCBhbmQgY2FuCi0gKiAgIGFsc28gYmUgaG9va2VkIGJ5IHRoZSBwbGF0Zm9ybSB2aWEgcHBjX21kLiBpb3JlbWFwX3Byb3QgaXMgdGhlIGV4YWN0Ci0gKiAgIHNhbWUgdGhpbmcgYXMgaW9yZW1hcF9mbGFncy4KKyAqICogaW9yZW1hcF9wcm90IGFsbG93cyB0byBzcGVjaWZ5IHRoZSBwYWdlIGZsYWdzIGFzIGFuIGFyZ3VtZW50IGFuZCBjYW4KKyAqICAgYWxzbyBiZSBob29rZWQgYnkgdGhlIHBsYXRmb3JtIHZpYSBwcGNfbWQuCiAgKgogICogKiBpb3JlbWFwX25vY2FjaGUgaXMgaWRlbnRpY2FsIHRvIGlvcmVtYXAKICAqCisgKiAqIGlvcmVtYXBfd2MgZW5hYmxlcyB3cml0ZSBjb21iaW5pbmcKKyAqCiAgKiAqIGlvdW5tYXAgdW5kb2VzIHN1Y2ggYSBtYXBwaW5nIGFuZCBjYW4gYmUgaG9va2VkCiAgKgogICogKiBfX2lvcmVtYXBfYXQgKGFuZCB0aGUgcGVuZGluZyBfX2lvdW5tYXBfYXQpIGFyZSBsb3cgbGV2ZWwgZnVuY3Rpb25zIHRvCkBAIC02MjksNyArNjM4LDcgQEAKICAqICAgY3VycmVudGx5IGJlIGhvb2tlZC4gTXVzdCBiZSBwYWdlIGFsaWduZWQuCiAgKgogICogKiBfX2lvcmVtYXAgaXMgdGhlIGxvdyBsZXZlbCBpbXBsZW1lbnRhdGlvbiB1c2VkIGJ5IGlvcmVtYXAgYW5kCi0gKiAgIGlvcmVtYXBfZmxhZ3MgYW5kIGNhbm5vdCBiZSBob29rZWQgKGJ1dCBjYW4gYmUgdXNlZCBieSBhIGhvb2sgb24gb25lCisgKiAgIGlvcmVtYXBfcHJvdCBhbmQgY2Fubm90IGJlIGhvb2tlZCAoYnV0IGNhbiBiZSB1c2VkIGJ5IGEgaG9vayBvbiBvbmUKICAqICAgb2YgdGhlIHByZXZpb3VzIG9uZXMpCiAgKgogICogKiBfX2lvcmVtYXBfY2FsbGVyIGlzIHRoZSBzYW1lIGFzIGFib3ZlIGJ1dCB0YWtlcyBhbiBleHBsaWNpdCBjYWxsZXIKQEAgLTY0MCwxMCArNjQ5LDEwIEBACiAgKgogICovCiBleHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwKHBoeXNfYWRkcl90IGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci1leHRlcm4gdm9pZCBfX2lvbWVtICppb3JlbWFwX2ZsYWdzKHBoeXNfYWRkcl90IGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCQkgICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKK2V4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfcHJvdChwaHlzX2FkZHJfdCBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKK2V4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfd2MocGh5c19hZGRyX3QgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBzaXplKTsKICNkZWZpbmUgaW9yZW1hcF9ub2NhY2hlKGFkZHIsIHNpemUpCWlvcmVtYXAoKGFkZHIpLCAoc2l6ZSkpCi0jZGVmaW5lIGlvcmVtYXBfcHJvdChhZGRyLCBzaXplLCBwcm90KQlpb3JlbWFwX2ZsYWdzKChhZGRyKSwgKHNpemUpLCAocHJvdCkpCiAKIGV4dGVybiB2b2lkIGlvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvX2V2ZW50X2lycS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvX2V2ZW50X2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYTlhMWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW9fZXZlbnRfaXJxLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwLCAyMDExIE1hcmsgTmVsc29uIGFuZCBUc2VuZy1IdWkgKEZyYW5rKSBMaW4sIElCTSBDb3Jwb3JhdGlvbgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX0lPX0VWRU5UX0lSUV9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19JT19FVkVOVF9JUlFfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorCisjZGVmaW5lIFBTRVJJRVNfSU9FSV9SUENfTUFYX0xFTiAyMTYKKworI2RlZmluZSBQU0VSSUVTX0lPRUlfVFlQRV9FUlJfREVURUNURUQJCTB4MDEKKyNkZWZpbmUgUFNFUklFU19JT0VJX1RZUEVfRVJSX1JFQ09WRVJFRAkJMHgwMgorI2RlZmluZSBQU0VSSUVTX0lPRUlfVFlQRV9FVkVOVAkJCTB4MDMKKyNkZWZpbmUgUFNFUklFU19JT0VJX1RZUEVfUlBDX1BBU1NfVEhSVQkJMHgwNAorCisjZGVmaW5lIFBTRVJJRVNfSU9FSV9TVUJUWVBFX05PVF9BUFAJCTB4MDAKKyNkZWZpbmUgUFNFUklFU19JT0VJX1NVQlRZUEVfUkVCQUxBTkNFX1JFUQkweDAxCisjZGVmaW5lIFBTRVJJRVNfSU9FSV9TVUJUWVBFX05PREVfT05MSU5FCTB4MDMKKyNkZWZpbmUgUFNFUklFU19JT0VJX1NVQlRZUEVfTk9ERV9PRkZMSU5FCTB4MDQKKyNkZWZpbmUgUFNFUklFU19JT0VJX1NVQlRZUEVfRFVNUF9TSVpFX0NIQU5HRQkweDA1CisjZGVmaW5lIFBTRVJJRVNfSU9FSV9TVUJUWVBFX1RPUlJFTlRfSVJWX1VQREFURQkweDA2CisjZGVmaW5lIFBTRVJJRVNfSU9FSV9TVUJUWVBFX1RPUlJFTlRfSEZJX0NGR0VECTB4MDcKKworI2RlZmluZSBQU0VSSUVTX0lPRUlfU0NPUEVfTk9UX0FQUAkJMHgwMAorI2RlZmluZSBQU0VSSUVTX0lPRUlfU0NPUEVfUklPX0hVQgkJMHgzNgorI2RlZmluZSBQU0VSSUVTX0lPRUlfU0NPUEVfUklPX0JSSURHRQkJMHgzNworI2RlZmluZSBQU0VSSUVTX0lPRUlfU0NPUEVfUEhCCQkJMHgzOAorI2RlZmluZSBQU0VSSUVTX0lPRUlfU0NPUEVfRUFEU19HTE9CQUwJCTB4MzkKKyNkZWZpbmUgUFNFUklFU19JT0VJX1NDT1BFX0VBRFNfU0xPVAkJMHgzQQorI2RlZmluZSBQU0VSSUVTX0lPRUlfU0NPUEVfVE9SUkVOVF9IVUIJCTB4M0IKKyNkZWZpbmUgUFNFUklFU19JT0VJX1NDT1BFX1NFUlZJQ0VfUFJPQwkJMHg1MQorCisvKiBQbGF0Zm9ybSBFdmVudCBMb2cgRm9ybWF0LCBWZXJzaW9uIDYsIGRhdGEgcG9ydGl0aW9uIG9mIElPIGV2ZW50IHNlY3Rpb24gKi8KK3N0cnVjdCBwc2VyaWVzX2lvX2V2ZW50IHsKKwl1aW50OF90IGV2ZW50X3R5cGU7CQkvKiAweDAwIElPLUV2ZW50IFR5cGUJCSovCisJdWludDhfdCBycGNfZGF0YV9sZW47CQkvKiAweDAxIFJQQyBkYXRhIGxlbmd0aAkJKi8KKwl1aW50OF90IHNjb3BlOwkJCS8qIDB4MDIgRXJyb3IvRXZlbnQgU2NvcGUJKi8KKwl1aW50OF90IGV2ZW50X3N1YnR5cGU7CQkvKiAweDAzIEkvTy1FdmVudCBTdWItVHlwZQkqLworCXVpbnQzMl90IGRyY19pbmRleDsJCS8qIDB4MDQgRFJDIEluZGV4CQkqLworCXVpbnQ4X3QgcnBjX2RhdGFbUFNFUklFU19JT0VJX1JQQ19NQVhfTEVOXTsKKwkJCQkJLyogMHgwOCBSUEMgRGF0YSAoMC0yMTYgYnl0ZXMsCSovCisJCQkJCS8qIHBhZGRlZCB0byA0IGJ5dGVzIGFsaWdubWVudCkJKi8KK307CisKK2V4dGVybiBzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgcHNlcmllc19pb2VpX25vdGlmaWVyX2xpc3Q7CisKKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfSU9fRVZFTlRfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pcnEuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pcnEuaAppbmRleCA2N2FiNWZiLi4xYmZmNTkxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaXJxLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lycS5oCkBAIC04OCw5ICs4OCw2IEBACiAJLyogRGlzcG9zZSBvZiBzdWNoIGEgbWFwcGluZyAqLwogCXZvaWQgKCp1bm1hcCkoc3RydWN0IGlycV9ob3N0ICpoLCB1bnNpZ25lZCBpbnQgdmlycSk7CiAKLQkvKiBVcGRhdGUgb2Ygc3VjaCBhIG1hcHBpbmcgICovCi0Jdm9pZCAoKnJlbWFwKShzdHJ1Y3QgaXJxX2hvc3QgKmgsIHVuc2lnbmVkIGludCB2aXJxLCBpcnFfaHdfbnVtYmVyX3QgaHcpOwotCiAJLyogVHJhbnNsYXRlIGRldmljZS10cmVlIGludGVycnVwdCBzcGVjaWZpZXIgZnJvbSByYXcgZm9ybWF0IGNvbWluZwogCSAqIGZyb20gdGhlIGZpcm13YXJlIHRvIGEgaXJxX2h3X251bWJlcl90IChpbnRlcnJ1cHQgbGluZSBudW1iZXIpIGFuZAogCSAqIHR5cGUgKHNlbnNlKSB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gc2V0X2lycV90eXBlKCkuIEluIHRoZSBhYnNlbmNlCkBAIC0xMjgsMTkgKzEyNSwxMCBAQAogCXN0cnVjdCBkZXZpY2Vfbm9kZQkqb2Zfbm9kZTsKIH07CiAKLS8qIFRoZSBtYWluIGlycSBtYXAgaXRzZWxmIGlzIGFuIGFycmF5IG9mIE5SX0lSUSBlbnRyaWVzIGNvbnRhaW5pbmcgdGhlCi0gKiBhc3NvY2lhdGUgaG9zdCBhbmQgaXJxIG51bWJlci4gQW4gZW50cnkgd2l0aCBhIGhvc3Qgb2YgTlVMTCBpcyBmcmVlLgotICogQW4gZW50cnkgY2FuIGJlIGFsbG9jYXRlZCBpZiBpdCdzIGZyZWUsIHRoZSBhbGxvY2F0b3IgYWx3YXlzIHRoZW4gc2V0cwotICogaHdpcnEgZmlyc3QgdG8gdGhlIGhvc3QncyBpbnZhbGlkIGlycSBudW1iZXIgYW5kIHRoZW4gZmlsbHMgb3BzLgotICovCi1zdHJ1Y3QgaXJxX21hcF9lbnRyeSB7Ci0JaXJxX2h3X251bWJlcl90CWh3aXJxOwotCXN0cnVjdCBpcnFfaG9zdAkqaG9zdDsKLX07Ci0KLWV4dGVybiBzdHJ1Y3QgaXJxX21hcF9lbnRyeSBpcnFfbWFwW05SX0lSUVNdOwotCitzdHJ1Y3QgaXJxX2RhdGE7CitleHRlcm4gaXJxX2h3X251bWJlcl90IGlycWRfdG9faHdpcnEoc3RydWN0IGlycV9kYXRhICpkKTsKIGV4dGVybiBpcnFfaHdfbnVtYmVyX3QgdmlycV90b19odyh1bnNpZ25lZCBpbnQgdmlycSk7CitleHRlcm4gYm9vbCB2aXJxX2lzX2hvc3QodW5zaWduZWQgaW50IHZpcnEsIHN0cnVjdCBpcnFfaG9zdCAqaG9zdCk7CiAKIC8qKgogICogaXJxX2FsbG9jX2hvc3QgLSBBbGxvY2F0ZSBhIG5ldyBpcnFfaG9zdCBkYXRhIHN0cnVjdHVyZQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2tleGVjLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va2V4ZWMuaAppbmRleCBmNTQ0MDhkLi44YTMzNjk4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va2V4ZWMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va2V4ZWMuaApAQCAtNzYsNyArNzYsNyBAQAogZXh0ZXJuIGNwdW1hc2tfdCBjcHVzX2luX3NyOwogc3RhdGljIGlubGluZSBpbnQga2V4ZWNfc3JfYWN0aXZhdGVkKGludCBjcHUpCiB7Ci0JcmV0dXJuIGNwdV9pc3NldChjcHUsY3B1c19pbl9zcik7CisJcmV0dXJuIGNwdW1hc2tfdGVzdF9jcHUoY3B1LCAmY3B1c19pbl9zcik7CiB9CiAKIHN0cnVjdCBraW1hZ2U7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2FzbS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9hc20uaAppbmRleCA1Yjc1MDQ2Li4wOTUxYjE3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2FzbS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYXNtLmgKQEAgLTU5LDYgKzU5LDcgQEAKICNkZWZpbmUgQk9PSzNTX0lOVEVSUlVQVF9JTlNUX1NFR01FTlQJMHg0ODAKICNkZWZpbmUgQk9PSzNTX0lOVEVSUlVQVF9FWFRFUk5BTAkweDUwMAogI2RlZmluZSBCT09LM1NfSU5URVJSVVBUX0VYVEVSTkFMX0xFVkVMCTB4NTAxCisjZGVmaW5lIEJPT0szU19JTlRFUlJVUFRfRVhURVJOQUxfSFYJMHg1MDIKICNkZWZpbmUgQk9PSzNTX0lOVEVSUlVQVF9BTElHTk1FTlQJMHg2MDAKICNkZWZpbmUgQk9PSzNTX0lOVEVSUlVQVF9QUk9HUkFNCTB4NzAwCiAjZGVmaW5lIEJPT0szU19JTlRFUlJVUFRfRlBfVU5BVkFJTAkweDgwMApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3NfYXNtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szc19hc20uaAppbmRleCAzNmZkYjNhLi5kNWE4YTM4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szc19hc20uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szc19hc20uaApAQCAtMzQsNiArMzQsNyBAQAogCSAgICAoXGludG5vID09IEJPT0szU19JTlRFUlJVUFRfREFUQV9TRUdNRU5UKSB8fCBcCiAJICAgIChcaW50bm8gPT0gQk9PSzNTX0lOVEVSUlVQVF9JTlNUX1NFR01FTlQpIHx8IFwKIAkgICAgKFxpbnRubyA9PSBCT09LM1NfSU5URVJSVVBUX0VYVEVSTkFMKSB8fCBcCisJICAgIChcaW50bm8gPT0gQk9PSzNTX0lOVEVSUlVQVF9FWFRFUk5BTF9IVikgfHwgXAogCSAgICAoXGludG5vID09IEJPT0szU19JTlRFUlJVUFRfQUxJR05NRU5UKSB8fCBcCiAJICAgIChcaW50bm8gPT0gQk9PSzNTX0lOVEVSUlVQVF9QUk9HUkFNKSB8fCBcCiAJICAgIChcaW50bm8gPT0gQk9PSzNTX0lOVEVSUlVQVF9GUF9VTkFWQUlMKSB8fCBcCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbHBwYWNhLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbHBwYWNhLmgKaW5kZXggYTA3N2FkYy4uZTAyOThkMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2xwcGFjYS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9scHBhY2EuaApAQCAtMjEwLDYgKzIxMCw4IEBACiAjZGVmaW5lIERJU1BBVENIX0xPR19CWVRFUwk0MDk2CS8qIGJ5dGVzIHBlciBjcHUgKi8KICNkZWZpbmUgTl9ESVNQQVRDSF9MT0cJCShESVNQQVRDSF9MT0dfQllURVMgLyBzaXplb2Yoc3RydWN0IGR0bF9lbnRyeSkpCiAKK2V4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqZHRsX2NhY2hlOworCiAvKgogICogV2hlbiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORyA9IHksIHRoZSBjcHUgYWNjb3VudGluZyBjb2RlIGNvbnRyb2xzCiAgKiByZWFkaW5nIGZyb20gdGhlIGRpc3BhdGNoIHRyYWNlIGxvZy4gIElmIG90aGVyIGNvZGUgd2FudHMgdG8gY29uc3VtZQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21hY2hkZXAuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmgKaW5kZXggZTRmMDE5MS4uNDdjYWNkZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21hY2hkZXAuaApAQCAtMjksMjEgKzI5LDYgQEAKIHN0cnVjdCBwY2lfY29udHJvbGxlcjsKIHN0cnVjdCBraW1hZ2U7CiAKLSNpZmRlZiBDT05GSUdfU01QCi1zdHJ1Y3Qgc21wX29wc190IHsKLQl2b2lkICAoKm1lc3NhZ2VfcGFzcykoaW50IHRhcmdldCwgaW50IG1zZyk7Ci0JaW50ICAgKCpwcm9iZSkodm9pZCk7Ci0Jdm9pZCAgKCpraWNrX2NwdSkoaW50IG5yKTsKLQl2b2lkICAoKnNldHVwX2NwdSkoaW50IG5yKTsKLQl2b2lkICAoKmJyaW5ndXBfZG9uZSkodm9pZCk7Ci0Jdm9pZCAgKCp0YWtlX3RpbWViYXNlKSh2b2lkKTsKLQl2b2lkICAoKmdpdmVfdGltZWJhc2UpKHZvaWQpOwotCWludCAgICgqY3B1X2Rpc2FibGUpKHZvaWQpOwotCXZvaWQgICgqY3B1X2RpZSkodW5zaWduZWQgaW50IG5yKTsKLQlpbnQgICAoKmNwdV9ib290YWJsZSkodW5zaWduZWQgaW50IG5yKTsKLX07Ci0jZW5kaWYKLQogc3RydWN0IG1hY2hkZXBfY2FsbHMgewogCWNoYXIJCSpuYW1lOwogI2lmZGVmIENPTkZJR19QUEM2NApAQCAtMjY3LDYgKzI1Miw3IEBACiAKIGV4dGVybiB2b2lkIGU1MDBfaWRsZSh2b2lkKTsKIGV4dGVybiB2b2lkIHBvd2VyNF9pZGxlKHZvaWQpOworZXh0ZXJuIHZvaWQgcG93ZXI3X2lkbGUodm9pZCk7CiBleHRlcm4gdm9pZCBwcGM2eHhfaWRsZSh2b2lkKTsKIGV4dGVybiB2b2lkIGJvb2szZV9pZGxlKHZvaWQpOwogCkBAIC0zMTEsMTIgKzI5Nyw2IEBACiAKICNlbmRpZiAvKiBDT05GSUdfUFBDX1BNQUMgKi8KIAotI2lmZGVmIENPTkZJR19TTVAKLS8qIFBvb3IgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgKi8KLWV4dGVybiB2b2lkIF9fZGV2aW5pdCBzbXBfZ2VuZXJpY19naXZlX3RpbWViYXNlKHZvaWQpOwotZXh0ZXJuIHZvaWQgX19kZXZpbml0IHNtcF9nZW5lcmljX3Rha2VfdGltZWJhc2Uodm9pZCk7Ci0jZW5kaWYgLyogQ09ORklHX1NNUCAqLwotCiAKIC8qIEZ1bmN0aW9ucyB0byBwcm9kdWNlIGNvZGVzIG9uIHRoZSBsZWRzLgogICogVGhlIFNSQyBjb2RlIHNob3VsZCBiZSB1bmlxdWUgZm9yIHRoZSBtZXNzYWdlIGNhdGVnb3J5IGFuZCBzaG91bGQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtYm9vazNlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWJvb2szZS5oCmluZGV4IDE3MTk0ZmMuLjNlYTBmOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtYm9vazNlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1ib29rM2UuaApAQCAtNDMsNiArNDMsNyBAQAogI2RlZmluZSBNQVMwX1RMQlNFTCh4KQkJKCgoeCkgPDwgMjgpICYgMHgzMDAwMDAwMCkKICNkZWZpbmUgTUFTMF9FU0VMKHgpCQkoKCh4KSA8PCAxNikgJiAweDBGRkYwMDAwKQogI2RlZmluZSBNQVMwX05WKHgpCQkoKHgpICYgMHgwMDAwMEZGRikKKyNkZWZpbmUgTUFTMF9FU0VMX01BU0sJCTB4MEZGRjAwMDAKICNkZWZpbmUgTUFTMF9IRVMJCTB4MDAwMDQwMDAKICNkZWZpbmUgTUFTMF9XUV9BTExXQVlTCQkweDAwMDAwMDAwCiAjZGVmaW5lIE1BUzBfV1FfQ09ORAkJMHgwMDAwMTAwMApAQCAtMTM3LDYgKzEzOCwyMSBAQAogI2RlZmluZSBNTVVDU1IwX1RMQjJQUwkweDAwMDc4MDAwCS8qIFRMQjIgUGFnZSBTaXplICovCiAjZGVmaW5lIE1NVUNTUjBfVExCM1BTCTB4MDA3ODAwMDAJLyogVExCMyBQYWdlIFNpemUgKi8KIAorLyogTU1VQ0ZHIGJpdHMgKi8KKyNkZWZpbmUgTU1VQ0ZHX01BVk5fTkFTSwkweDAwMDAwMDAzCisjZGVmaW5lIE1NVUNGR19NQVZOX1YxXzAJMHgwMDAwMDAwMAorI2RlZmluZSBNTVVDRkdfTUFWTl9WMl8wCTB4MDAwMDAwMDEKKyNkZWZpbmUgTU1VQ0ZHX05UTEJfTUFTSwkweDAwMDAwMDBjCisjZGVmaW5lIE1NVUNGR19OVExCX1NISUZUCTIKKyNkZWZpbmUgTU1VQ0ZHX1BJRFNJWkVfTUFTSwkweDAwMDAwN2MwCisjZGVmaW5lIE1NVUNGR19QSURTSVpFX1NISUZUCTYKKyNkZWZpbmUgTU1VQ0ZHX1RXQwkJMHgwMDAwODAwMAorI2RlZmluZSBNTVVDRkdfTFJBVAkJMHgwMDAxMDAwMAorI2RlZmluZSBNTVVDRkdfUkFTSVpFX01BU0sJMHgwMGZlMDAwMAorI2RlZmluZSBNTVVDRkdfUkFTSVpFX1NISUZUCTE3CisjZGVmaW5lIE1NVUNGR19MUElEU0laRV9NQVNLCTB4MGYwMDAwMDAKKyNkZWZpbmUgTU1VQ0ZHX0xQSURTSVpFX1NISUZUCTI0CisKIC8qIFRMQm5DRkcgZW5jb2RpbmcgKi8KICNkZWZpbmUgVExCbkNGR19OX0VOVFJZCQkweDAwMDAwZmZmCS8qIG51bWJlciBvZiBlbnRyaWVzICovCiAjZGVmaW5lIFRMQm5DRkdfSEVTCQkweDAwMDAyMDAwCS8qIEhXIHNlbGVjdCBzdXBwb3J0ZWQgKi8KQEAgLTIyOSw2ICsyNDUsMTAgQEAKIGV4dGVybiBpbnQgbW11X2xpbmVhcl9wc2l6ZTsKIGV4dGVybiBpbnQgbW11X3ZtZW1tYXBfcHNpemU7CiAKKyNpZmRlZiBDT05GSUdfUFBDNjQKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxpbmVhcl9tYXBfdG9wOworI2VuZGlmCisKICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAKICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfTU1VX0JPT0szRV9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1oYXNoNjQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtaGFzaDY0LmgKaW5kZXggYWU3YjNlZi4uZDg2NWJkOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1oYXNoNjQuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWhhc2g2NC5oCkBAIC00MDgsNiArNDA4LDcgQEAKICNlbmRpZiAvKiBDT05GSUdfUFBDX1NVQlBBR0VfUFJPVCAqLwogCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbW1fY29udGV4dF9pZF90Oworc3RydWN0IHNwaW5sb2NrOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJbW1fY29udGV4dF9pZF90IGlkOwpAQCAtNDIzLDYgKzQyNCwxMSBAQAogI2lmZGVmIENPTkZJR19QUENfU1VCUEFHRV9QUk9UCiAJc3RydWN0IHN1YnBhZ2VfcHJvdF90YWJsZSBzcHQ7CiAjZW5kaWYgLyogQ09ORklHX1BQQ19TVUJQQUdFX1BST1QgKi8KKyNpZmRlZiBDT05GSUdfUFBDX0lDU1dYCisJc3RydWN0IHNwaW5sb2NrICpjb3BfbG9ja3A7IC8qIGd1YXJkIGFjb3AgYW5kIGNvcF9waWQgKi8KKwl1bnNpZ25lZCBsb25nIGFjb3A7CS8qIG1hc2sgb2YgZW5hYmxlZCBjb3Byb2Nlc3NvciB0eXBlcyAqLworCXVuc2lnbmVkIGludCBjb3BfcGlkOwkvKiBwaWQgdmFsdWUgdXNlZCB3aXRoIGNvcHJvY2Vzc29ycyAqLworI2VuZGlmIC8qIENPTkZJR19QUENfSUNTV1ggKi8KIH0gbW1fY29udGV4dF90OwogCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUuaAppbmRleCBiYjQwYTA2Li40MTM4YjIxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS5oCkBAIC01NiwxMSArNTYsNiBAQAogICovCiAjZGVmaW5lIE1NVV9GVFJfTkVFRF9EVExCX1NXX0xSVQlBU01fQ09OU1QoMHgwMDIwMDAwMCkKIAotLyogVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgcHJvY2Vzc29yIHVzZXMgdGhlIElTQSAyLjA2IHNlcnZlciB0bGJpZQotICogbW5lbW9uaWNzCi0gKi8KLSNkZWZpbmUgTU1VX0ZUUl9UTEJJRV8yMDYJCUFTTV9DT05TVCgweDAwNDAwMDAwKQotCiAvKiBFbmFibGUgdXNlIG9mIFRMQiByZXNlcnZhdGlvbi4gIFByb2Nlc3NvciBzaG91bGQgc3VwcG9ydCB0bGJzcnguCiAgKiBpbnN0cnVjdGlvbiBhbmQgTUFTMFtXUV0uCiAgKi8KQEAgLTcwLDYgKzY1LDUzIEBACiAgKi8KICNkZWZpbmUgTU1VX0ZUUl9VU0VfUEFJUkVEX01BUwkJQVNNX0NPTlNUKDB4MDEwMDAwMDApCiAKKy8qIE1NVSBpcyBTTEItYmFzZWQKKyAqLworI2RlZmluZSBNTVVfRlRSX1NMQgkJCUFTTV9DT05TVCgweDAyMDAwMDAwKQorCisvKiBTdXBwb3J0IDE2TSBsYXJnZSBwYWdlcworICovCisjZGVmaW5lIE1NVV9GVFJfMTZNX1BBR0UJCUFTTV9DT05TVCgweDA0MDAwMDAwKQorCisvKiBTdXBwb3J0cyBUTEJJRUwgdmFyaWFudAorICovCisjZGVmaW5lIE1NVV9GVFJfVExCSUVMCQkJQVNNX0NPTlNUKDB4MDgwMDAwMDApCisKKy8qIFN1cHBvcnRzIHRsYmllcyB3L28gbG9ja2luZworICovCisjZGVmaW5lIE1NVV9GVFJfTE9DS0xFU1NfVExCSUUJCUFTTV9DT05TVCgweDEwMDAwMDAwKQorCisvKiBMYXJnZSBwYWdlcyBjYW4gYmUgbWFya2VkIENJCisgKi8KKyNkZWZpbmUgTU1VX0ZUUl9DSV9MQVJHRV9QQUdFCQlBU01fQ09OU1QoMHgyMDAwMDAwMCkKKworLyogMVQgc2VnbWVudHMgYXZhaWxhYmxlCisgKi8KKyNkZWZpbmUgTU1VX0ZUUl8xVF9TRUdNRU5UCQlBU01fQ09OU1QoMHg0MDAwMDAwMCkKKworLyogRG9lc24ndCBzdXBwb3J0IHRoZSBCIGJpdCAoMVQgc2VnbWVudCkgaW4gU0xCSUUKKyAqLworI2RlZmluZSBNTVVfRlRSX05PX1NMQklFX0IJCUFTTV9DT05TVCgweDgwMDAwMDAwKQorCisvKiBNTVUgZmVhdHVyZSBiaXQgc2V0cyBmb3IgdmFyaW91cyBDUFVzICovCisjZGVmaW5lIE1NVV9GVFJTX0RFRkFVTFRfSFBURV9BUkNIX1YyCVwKKwlNTVVfRlRSX0hQVEVfVEFCTEUgfCBNTVVfRlRSX1BQQ0FTX0FSQ0hfVjIKKyNkZWZpbmUgTU1VX0ZUUlNfUE9XRVI0CQlNTVVfRlRSU19ERUZBVUxUX0hQVEVfQVJDSF9WMgorI2RlZmluZSBNTVVfRlRSU19QUEM5NzAJCU1NVV9GVFJTX1BPV0VSNAorI2RlZmluZSBNTVVfRlRSU19QT1dFUjUJCU1NVV9GVFJTX1BPV0VSNCB8IE1NVV9GVFJfTE9DS0xFU1NfVExCSUUKKyNkZWZpbmUgTU1VX0ZUUlNfUE9XRVI2CQlNTVVfRlRSU19QT1dFUjQgfCBNTVVfRlRSX0xPQ0tMRVNTX1RMQklFCisjZGVmaW5lIE1NVV9GVFJTX1BPV0VSNwkJTU1VX0ZUUlNfUE9XRVI0IHwgTU1VX0ZUUl9MT0NLTEVTU19UTEJJRQorI2RlZmluZSBNTVVfRlRSU19DRUxMCQlNTVVfRlRSU19ERUZBVUxUX0hQVEVfQVJDSF9WMiB8IFwKKwkJCQlNTVVfRlRSX0NJX0xBUkdFX1BBR0UKKyNkZWZpbmUgTU1VX0ZUUlNfUEE2VAkJTU1VX0ZUUlNfREVGQVVMVF9IUFRFX0FSQ0hfVjIgfCBcCisJCQkJTU1VX0ZUUl9DSV9MQVJHRV9QQUdFIHwgTU1VX0ZUUl9OT19TTEJJRV9CCisjZGVmaW5lIE1NVV9GVFJTX0EyCQlNTVVfRlRSX1RZUEVfM0UgfCBNTVVfRlRSX1VTRV9UTEJJTFggfCBcCisJCQkJTU1VX0ZUUl9VU0VfVExCSVZBWF9CQ0FTVCB8IFwKKwkJCQlNTVVfRlRSX0xPQ0tfQkNBU1RfSU5WQUwgfCBcCisJCQkJTU1VX0ZUUl9VU0VfVExCUlNSViB8IFwKKwkJCQlNTVVfRlRSX1VTRV9QQUlSRURfTUFTIHwgXAorCQkJCU1NVV9GVFJfVExCSUVMIHwgXAorCQkJCU1NVV9GVFJfMTZNX1BBR0UKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggODFmYjQxMi4uYTczNjY4YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTMyLDYgKzMyLDEwIEBACiBleHRlcm4gdm9pZCBtbXVfY29udGV4dF9pbml0KHZvaWQpOwogI2VuZGlmCiAKK2V4dGVybiB2b2lkIHN3aXRjaF9jb3Aoc3RydWN0IG1tX3N0cnVjdCAqbmV4dCk7CitleHRlcm4gaW50IHVzZV9jb3AodW5zaWduZWQgbG9uZyBhY29wLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CitleHRlcm4gdm9pZCBkcm9wX2NvcCh1bnNpZ25lZCBsb25nIGFjb3AsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKKwogLyoKICAqIHN3aXRjaF9tbSBpcyB0aGUgZW50cnkgcG9pbnQgY2FsbGVkIGZyb20gdGhlIGFyY2hpdGVjdHVyZSBpbmRlcGVuZGVudAogICogY29kZSBpbiBrZXJuZWwvc2NoZWQuYwpAQCAtNTUsNiArNTksMTIgQEAKIAlpZiAocHJldiA9PSBuZXh0KQogCQlyZXR1cm47CiAKKyNpZmRlZiBDT05GSUdfUFBDX0lDU1dYCisJLyogU3dpdGNoIGNvcHJvY2Vzc29yIGNvbnRleHQgb25seSBpZiBwcmV2IG9yIG5leHQgdXNlcyBhIGNvcHJvY2Vzc29yICovCisJaWYgKHByZXYtPmNvbnRleHQuYWNvcCB8fCBuZXh0LT5jb250ZXh0LmFjb3ApCisJCXN3aXRjaF9jb3AobmV4dCk7CisjZW5kaWYgLyogQ09ORklHX1BQQ19JQ1NXWCAqLworCiAJLyogV2UgbXVzdCBzdG9wIGFsbCBhbHRpdmVjIHN0cmVhbXMgYmVmb3JlIGNoYW5naW5nIHRoZSBIVwogCSAqIGNvbnRleHQKIAkgKi8KQEAgLTY3LDcgKzc3LDcgQEAKIAkgKiBzdWIgYXJjaGl0ZWN0dXJlcy4KIAkgKi8KICNpZmRlZiBDT05GSUdfUFBDX1NURF9NTVVfNjQKLQlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfU0xCKSkKKwlpZiAobW11X2hhc19mZWF0dXJlKE1NVV9GVFJfU0xCKSkKIAkJc3dpdGNoX3NsYih0c2ssIG5leHQpOwogCWVsc2UKIAkJc3dpdGNoX3N0YWIodHNrLCBuZXh0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGljLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBpYy5oCmluZGV4IDcwMDVlZTAuLmRmMTg5ODkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGljLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21waWMuaApAQCAtMyw3ICszLDYgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxhc20vZGNyLmg+CiAjaW5jbHVkZSA8YXNtL21zaV9iaXRtYXAuaD4KIApAQCAtMjYzLDYgKzI2Miw3IEBACiAjaWZkZWYgQ09ORklHX1NNUAogCXN0cnVjdCBpcnFfY2hpcAkJaGNfaXBpOwogI2VuZGlmCisJc3RydWN0IGlycV9jaGlwCQloY190bTsKIAljb25zdCBjaGFyCQkqbmFtZTsKIAkvKiBGbGFncyAqLwogCXVuc2lnbmVkIGludAkJZmxhZ3M7CkBAIC0yODEsNyArMjgxLDcgQEAKIAogCS8qIHZlY3RvciBudW1iZXJzIHVzZWQgZm9yIGludGVybmFsIHNvdXJjZXMgKGlwaS90aW1lcnMpICovCiAJdW5zaWduZWQgaW50CQlpcGlfdmVjc1s0XTsKLQl1bnNpZ25lZCBpbnQJCXRpbWVyX3ZlY3NbNF07CisJdW5zaWduZWQgaW50CQl0aW1lcl92ZWNzWzhdOwogCiAJLyogU3B1cmlvdXMgdmVjdG9yIHRvIHByb2dyYW0gaW50byB1bnVzZWQgc291cmNlcyAqLwogCXVuc2lnbmVkIGludAkJc3B1cmlvdXNfdmVjOwpAQCAtMzIwLDggKzMyMCw2IEBACiAJLyogbGluayAqLwogCXN0cnVjdCBtcGljCQkqbmV4dDsKIAotCXN0cnVjdCBzeXNfZGV2aWNlCXN5c2RldjsKLQogI2lmZGVmIENPTkZJR19QTQogCXN0cnVjdCBtcGljX2lycV9zYXZlCSpzYXZlX2RhdGE7CiAjZW5kaWYKQEAgLTM3MSw2ICszNjksOCBAQAogICogTk9URTogVGhpcyBmbGFnIHRydW1wcyBNUElDX1dBTlRTX1JFU0VULgogICovCiAjZGVmaW5lIE1QSUNfTk9fUkVTRVQJCQkweDAwMDA0MDAwCisvKiBGcmVlc2NhbGUgTVBJQyAoY29tcGF0aWJsZSBpbmNsdWRlcyAiZnNsLG1waWMiKSAqLworI2RlZmluZSBNUElDX0ZTTAkJCTB4MDAwMDgwMDAKIAogLyogTVBJQyBIVyBtb2RpZmljYXRpb24gSUQgKi8KICNkZWZpbmUgTVBJQ19SRUdTRVRfTUFTSwkJMHhmMDAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BTZXJpZXNfcmVjb25maWcuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wU2VyaWVzX3JlY29uZmlnLmgKaW5kZXggZDRiNGJmYS4uODlkMmY5OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BTZXJpZXNfcmVjb25maWcuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcFNlcmllc19yZWNvbmZpZy5oCkBAIC0xOCwxMyArMTgsMTggQEAKIGV4dGVybiBpbnQgcFNlcmllc19yZWNvbmZpZ19ub3RpZmllcl9yZWdpc3RlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKik7CiBleHRlcm4gdm9pZCBwU2VyaWVzX3JlY29uZmlnX25vdGlmaWVyX3VucmVnaXN0ZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICopOwogZXh0ZXJuIHN0cnVjdCBibG9ja2luZ19ub3RpZmllcl9oZWFkIHBTZXJpZXNfcmVjb25maWdfY2hhaW47CisvKiBOb3QgdGhlIGJlc3QgcGxhY2UgdG8gcHV0IHRoaXMsIHdpbGwgYmUgZml4ZWQgd2hlbiB3ZSBtb3ZlIHNvbWUKKyAqIG9mIHRoZSBydGFzIHN1c3BlbmQtbWUgc3R1ZmYgdG8gcHNlcmllcyAqLworZXh0ZXJuIHZvaWQgcFNlcmllc19jb2FsZXNjZV9pbml0KHZvaWQpOwogI2Vsc2UgLyogIUNPTkZJR19QUENfUFNFUklFUyAqLwogc3RhdGljIGlubGluZSBpbnQgcFNlcmllc19yZWNvbmZpZ19ub3RpZmllcl9yZWdpc3RlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQogewogCXJldHVybiAwOwogfQogc3RhdGljIGlubGluZSB2b2lkIHBTZXJpZXNfcmVjb25maWdfbm90aWZpZXJfdW5yZWdpc3RlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwU2VyaWVzX2NvYWxlc2NlX2luaXQodm9pZCkgeyB9CiAjZW5kaWYgLyogQ09ORklHX1BQQ19QU0VSSUVTICovCiAKKwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfUFBDNjRfUFNFUklFU19SRUNPTkZJR19IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFjYS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhY2EuaAppbmRleCBlYzU3NTQwLi43NDEyNjc2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFjYS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWNhLmgKQEAgLTkyLDkgKzkyLDkgQEAKIAkgKiBOb3csIHN0YXJ0aW5nIGluIGNhY2hlbGluZSAyLCB0aGUgZXhjZXB0aW9uIHNhdmUgYXJlYXMKIAkgKi8KIAkvKiB1c2VkIGZvciBtb3N0IGludGVycnVwdHMvZXhjZXB0aW9ucyAqLwotCXU2NCBleGdlblsxMF0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgweDgwKSkpOwotCXU2NCBleG1jWzEwXTsJCS8qIHVzZWQgZm9yIG1hY2hpbmUgY2hlY2tzICovCi0JdTY0IGV4c2xiWzEwXTsJCS8qIHVzZWQgZm9yIFNMQi9zZWdtZW50IHRhYmxlIG1pc3NlcworCXU2NCBleGdlblsxMV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgweDgwKSkpOworCXU2NCBleG1jWzExXTsJCS8qIHVzZWQgZm9yIG1hY2hpbmUgY2hlY2tzICovCisJdTY0IGV4c2xiWzExXTsJCS8qIHVzZWQgZm9yIFNMQi9zZWdtZW50IHRhYmxlIG1pc3NlcwogIAkJCQkgKiBvbiB0aGUgbGluZWFyIG1hcHBpbmcgKi8KIAkvKiBTTEIgcmVsYXRlZCBkZWZpbml0aW9ucyAqLwogCXUxNiB2bWFsbG9jX3NsbHA7CkBAIC0xMDYsNyArMTA2LDggQEAKIAlwZ2RfdCAqcGdkOwkJCS8qIEN1cnJlbnQgUEdEICovCiAJcGdkX3QgKmtlcm5lbF9wZ2Q7CQkvKiBLZXJuZWwgUEdEICovCiAJdTY0IGV4Z2VuWzhdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMHg4MCkpKTsKLQl1NjQgZXh0bGJbRVhfVExCX1NJWkUqM10gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgweDgwKSkpOworCS8qIFdlIGNhbiBoYXZlIHVwIHRvIDMgbGV2ZWxzIG9mIHJlZW50cmFuY3kgaW4gdGhlIFRMQiBtaXNzIGhhbmRsZXIgKi8KKwl1NjQgZXh0bGJbM11bRVhfVExCX1NJWkUgLyBzaXplb2YodTY0KV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgweDgwKSkpOwogCXU2NCBleG1jWzhdOwkJLyogdXNlZCBmb3IgbWFjaGluZSBjaGVja3MgKi8KIAl1NjQgZXhjcml0WzhdOwkJLyogdXNlZCBmb3IgY3JpdCBpbnRlcnJ1cHRzICovCiAJdTY0IGV4ZGJnWzhdOwkJLyogdXNlZCBmb3IgZGVidWcgaW50ZXJydXB0cyAqLwpAQCAtMTI1LDcgKzEyNiw3IEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICpfX2N1cnJlbnQ7CS8qIFBvaW50ZXIgdG8gY3VycmVudCAqLwogCXU2NCBrc3RhY2s7CQkJLyogU2F2ZWQgS2VybmVsIHN0YWNrIGFkZHIgKi8KIAl1NjQgc3RhYl9ycjsJCQkvKiBzdGFiL3NsYiByb3VuZC1yb2JpbiBjb3VudGVyICovCi0JdTY0IHNhdmVkX3IxOwkJCS8qIHIxIHNhdmUgZm9yIFJUQVMgY2FsbHMgKi8KKwl1NjQgc2F2ZWRfcjE7CQkJLyogcjEgc2F2ZSBmb3IgUlRBUyBjYWxscyBvciBQTSAqLwogCXU2NCBzYXZlZF9tc3I7CQkJLyogTVNSIHNhdmVkIGhlcmUgYnkgZW50ZXJfcnRhcyAqLwogCXUxNiB0cmFwX3NhdmU7CQkJLyogVXNlZCB3aGVuIGJhZCBzdGFjayBpcyBlbmNvdW50ZXJlZCAqLwogCXU4IHNvZnRfZW5hYmxlZDsJCS8qIGlycSBzb2Z0LWVuYWJsZSBmbGFnICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZV82NC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2VfNjQuaAppbmRleCA4MTJiMmNkLi45MzU2MjYyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZV82NC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlXzY0LmgKQEAgLTU5LDI0ICs1OSw3IEBACiAJOiAiY3RyIiwgIm1lbW9yeSIpOwogfQogCi1leHRlcm4gdm9pZCBjb3B5XzRLX3BhZ2Uodm9pZCAqdG8sIHZvaWQgKmZyb20pOwotCi0jaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKLXN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X3BhZ2Uodm9pZCAqdG8sIHZvaWQgKmZyb20pCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0JZm9yIChpPTA7IGkgPCAoMSA8PCAoUEFHRV9TSElGVCAtIDEyKSk7IGkrKykgewotCQljb3B5XzRLX3BhZ2UodG8sIGZyb20pOwotCQl0byArPSA0MDk2OwotCQlmcm9tICs9IDQwOTY7Ci0JfQotfQotI2Vsc2UgLyogQ09ORklHX1BQQ182NEtfUEFHRVMgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X3BhZ2Uodm9pZCAqdG8sIHZvaWQgKmZyb20pCi17Ci0JY29weV80S19wYWdlKHRvLCBmcm9tKTsKLX0KLSNlbmRpZiAvKiBDT05GSUdfUFBDXzY0S19QQUdFUyAqLworZXh0ZXJuIHZvaWQgY29weV9wYWdlKHZvaWQgKnRvLCB2b2lkICpmcm9tKTsKIAogLyogTG9nIDIgb2YgcGFnZSB0YWJsZSBzaXplICovCiBleHRlcm4gdTY0IHBwYzY0X3BmdF9zaXplOwpAQCAtMTMwLDcgKzExMyw3IEBACiBleHRlcm4gdm9pZCBzbGljZV9zZXRfcmFuZ2VfcHNpemUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCQkJICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgaW50IHBzaXplKTsKIAotI2RlZmluZSBzbGljZV9tbV9uZXdfY29udGV4dChtbSkJKChtbSktPmNvbnRleHQuaWQgPT0gMCkKKyNkZWZpbmUgc2xpY2VfbW1fbmV3X2NvbnRleHQobW0pCSgobW0pLT5jb250ZXh0LmlkID09IE1NVV9OT19DT05URVhUKQogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjNjQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LmgKaW5kZXggMmIwOWNkNS4uODE1NzZlZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjNjQuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGM2NC5oCkBAIC0yNTcsMjEgKzI1NywyMCBAQAogc3RhdGljIGlubGluZSB2b2lkIHB0ZXBfc2V0X3dycHJvdGVjdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJCSAgICAgIHB0ZV90ICpwdGVwKQogewotCXVuc2lnbmVkIGxvbmcgb2xkOwogCi0gICAgICAgCWlmICgocHRlX3ZhbCgqcHRlcCkgJiBfUEFHRV9SVykgPT0gMCkKLSAgICAgICAJCXJldHVybjsKLQlvbGQgPSBwdGVfdXBkYXRlKG1tLCBhZGRyLCBwdGVwLCBfUEFHRV9SVywgMCk7CisJaWYgKChwdGVfdmFsKCpwdGVwKSAmIF9QQUdFX1JXKSA9PSAwKQorCQlyZXR1cm47CisKKwlwdGVfdXBkYXRlKG1tLCBhZGRyLCBwdGVwLCBfUEFHRV9SVywgMCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBodWdlX3B0ZXBfc2V0X3dycHJvdGVjdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKIHsKLQl1bnNpZ25lZCBsb25nIG9sZDsKLQogCWlmICgocHRlX3ZhbCgqcHRlcCkgJiBfUEFHRV9SVykgPT0gMCkKIAkJcmV0dXJuOwotCW9sZCA9IHB0ZV91cGRhdGUobW0sIGFkZHIsIHB0ZXAsIF9QQUdFX1JXLCAxKTsKKworCXB0ZV91cGRhdGUobW0sIGFkZHIsIHB0ZXAsIF9QQUdFX1JXLCAxKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGMtb3Bjb2RlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjLW9wY29kZS5oCmluZGV4IDEyNTU1NjkuLmU0NzI2NTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGMtb3Bjb2RlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwYy1vcGNvZGUuaApAQCAtNDEsNiArNDEsMTAgQEAKICNkZWZpbmUgUFBDX0lOU1RfUkZDSQkJCTB4NGMwMDAwNjYKICNkZWZpbmUgUFBDX0lOU1RfUkZESQkJCTB4NGMwMDAwNGUKICNkZWZpbmUgUFBDX0lOU1RfUkZNQ0kJCQkweDRjMDAwMDRjCisjZGVmaW5lIFBQQ19JTlNUX01GU1BSX0RTQ1IJCTB4N2MxMTAyYTYKKyNkZWZpbmUgUFBDX0lOU1RfTUZTUFJfRFNDUl9NQVNLCTB4ZmMxZmZmZmYKKyNkZWZpbmUgUFBDX0lOU1RfTVRTUFJfRFNDUgkJMHg3YzExMDNhNgorI2RlZmluZSBQUENfSU5TVF9NVFNQUl9EU0NSX01BU0sJMHhmYzFmZmZmZgogCiAjZGVmaW5lIFBQQ19JTlNUX1NUUklORwkJCTB4N2MwMDA0MmEKICNkZWZpbmUgUFBDX0lOU1RfU1RSSU5HX01BU0sJCTB4ZmMwMDA3ZmUKQEAgLTU2LDYgKzYwLDE3IEBACiAjZGVmaW5lIFBQQ19JTlNUX1RMQlNSWF9ET1QJCTB4N2MwMDA2YTUKICNkZWZpbmUgUFBDX0lOU1RfWFhMT1IJCQkweGYwMDAwNTEwCiAKKyNkZWZpbmUgUFBDX0lOU1RfTkFQCQkJMHg0YzAwMDM2NAorI2RlZmluZSBQUENfSU5TVF9TTEVFUAkJCTB4NGMwMDAzYTQKKworLyogQTIgc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zICovCisjZGVmaW5lIFBQQ19JTlNUX0VSQVRXRQkJCTB4N2MwMDAxYTYKKyNkZWZpbmUgUFBDX0lOU1RfRVJBVFJFCQkJMHg3YzAwMDE2NgorI2RlZmluZSBQUENfSU5TVF9FUkFUSUxYCQkweDdjMDAwMDY2CisjZGVmaW5lIFBQQ19JTlNUX0VSQVRJVkFYCQkweDdjMDAwNjY2CisjZGVmaW5lIFBQQ19JTlNUX0VSQVRTWAkJCTB4N2MwMDAxMjYKKyNkZWZpbmUgUFBDX0lOU1RfRVJBVFNYX0RPVAkJMHg3YzAwMDEyNworCiAvKiBtYWNyb3MgdG8gaW5zZXJ0IGZpZWxkcyBpbnRvIG9wY29kZXMgKi8KICNkZWZpbmUgX19QUENfUkEoYSkJKCgoYSkgJiAweDFmKSA8PCAxNikKICNkZWZpbmUgX19QUENfUkIoYikJKCgoYikgJiAweDFmKSA8PCAxMSkKQEAgLTY3LDYgKzgyLDggQEAKICNkZWZpbmUgX19QUENfWFQocykJX19QUENfWFMocykKICNkZWZpbmUgX19QUENfVF9UTEIodCkJKCgodCkgJiAweDMpIDw8IDIxKQogI2RlZmluZSBfX1BQQ19XQyh3KQkoKCh3KSAmIDB4MykgPDwgMjEpCisjZGVmaW5lIF9fUFBDX1dTKHcpCSgoKHcpICYgMHgxZikgPDwgMTEpCisKIC8qCiAgKiBPbmx5IHVzZSB0aGUgbGFyeCBoaW50IGJpdCBvbiA2NGJpdCBDUFVzLiBlNTAwdjEvdjIgYmFzZWQgQ1BVcyB3aWxsIHRyZWF0IGEKICAqIGxhcnggd2l0aCBFSCBzZXQgYXMgYW4gaWxsZWdhbCBpbnN0cnVjdGlvbi4KQEAgLTExMyw2ICsxMzAsMjEgQEAKICNkZWZpbmUgUFBDX1RMQklWQVgoYSxiKQlzdHJpbmdpZnlfaW5fYygubG9uZyBQUENfSU5TVF9UTEJJVkFYIHwgXAogCQkJCQlfX1BQQ19SQShhKSB8IF9fUFBDX1JCKGIpKQogCisjZGVmaW5lIFBQQ19FUkFUV0UocywgYSwgdykJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfRVJBVFdFIHwgXAorCQkJCQlfX1BQQ19SUyhzKSB8IF9fUFBDX1JBKGEpIHwgX19QUENfV1ModykpCisjZGVmaW5lIFBQQ19FUkFUUkUocywgYSwgdykJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfRVJBVFJFIHwgXAorCQkJCQlfX1BQQ19SUyhzKSB8IF9fUFBDX1JBKGEpIHwgX19QUENfV1ModykpCisjZGVmaW5lIFBQQ19FUkFUSUxYKHQsIGEsIGIpCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX0VSQVRJTFggfCBcCisJCQkJCV9fUFBDX1RfVExCKHQpIHwgX19QUENfUkEoYSkgfCBcCisJCQkJCV9fUFBDX1JCKGIpKQorI2RlZmluZSBQUENfRVJBVElWQVgocywgYSwgYikJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfRVJBVElWQVggfCBcCisJCQkJCV9fUFBDX1JTKHMpIHwgX19QUENfUkEoYSkgfCBfX1BQQ19SQihiKSkKKyNkZWZpbmUgUFBDX0VSQVRTWCh0LCBhLCB3KQlzdHJpbmdpZnlfaW5fYygubG9uZyBQUENfSU5TVF9FUkFUU1ggfCBcCisJCQkJCV9fUFBDX1JTKHQpIHwgX19QUENfUkEoYSkgfCBfX1BQQ19SQihiKSkKKyNkZWZpbmUgUFBDX0VSQVRTWF9ET1QodCwgYSwgdykJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfRVJBVFNYX0RPVCB8IFwKKwkJCQkJX19QUENfUlModCkgfCBfX1BQQ19SQShhKSB8IF9fUFBDX1JCKGIpKQorCisKIC8qCiAgKiBEZWZpbmUgd2hhdCB0aGUgVlNYIFhYMSBmb3JtIGluc3RydWN0aW9ucyB3aWxsIGxvb2sgbGlrZSwgdGhlbiBhZGQKICAqIHRoZSAxMjggYml0IGxvYWQgc3RvcmUgaW5zdHJ1Y3Rpb25zIGJhc2VkIG9uIHRoYXQuCkBAIC0xMjYsNCArMTU4LDcgQEAKICNkZWZpbmUgWFhMT1IodCwgYSwgYikJCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX1hYTE9SIHwgXAogCQkJCQkgICAgICAgVlNYX1hYMygodCksIChhKSwgKGIpKSkKIAorI2RlZmluZSBQUENfTkFQCQkJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfTkFQKQorI2RlZmluZSBQUENfU0xFRVAJCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX1NMRUVQKQorCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1BQQ19PUENPREVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwY19hc20uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGNfYXNtLmgKaW5kZXggOTgyMTAwNi4uMWI0MjIzOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwY19hc20uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjX2FzbS5oCkBAIC0xNzAsNiArMTcwLDcgQEAKICNkZWZpbmUgSE1UX01FRElVTQlvcgkyLDIsMgogI2RlZmluZSBITVRfTUVESVVNX0hJR0ggb3IJNSw1LDUJCSMgbWVkaXVtIGhpZ2ggcHJpb3JpdHkKICNkZWZpbmUgSE1UX0hJR0gJb3IJMywzLDMKKyNkZWZpbmUgSE1UX0VYVFJBX0hJR0gJb3IJNyw3LDcJCSMgcG93ZXI3IG9ubHkKIAogI2lmZGVmIF9fS0VSTkVMX18KICNpZmRlZiBDT05GSUdfUFBDNjQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCBkZTE5NjdhLi5kNTBjMmI2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0yMzgsNiArMjM4LDEwIEBACiAjaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfMzJfSEFORExFUgogCXZvaWQqCQlrdm1fc2hhZG93X3ZjcHU7IC8qIEtWTSBpbnRlcm5hbCBkYXRhICovCiAjZW5kaWYgLyogQ09ORklHX0tWTV9CT09LM1NfMzJfSEFORExFUiAqLworI2lmZGVmIENPTkZJR19QUEM2NAorCXVuc2lnbmVkIGxvbmcJZHNjcjsKKwlpbnQJCWRzY3JfaW5oZXJpdDsKKyNlbmRpZgogfTsKIAogI2RlZmluZSBBUkNIX01JTl9UQVNLQUxJR04gMTYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWcuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWcuaAppbmRleCA3ZTRhYmViLi5jNWNhZTBkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZy5oCkBAIC05OSwxNyArOTksMjMgQEAKICNkZWZpbmUgTVNSX0xFCQlfX01BU0soTVNSX0xFX0xHKQkvKiBMaXR0bGUgRW5kaWFuICovCiAKICNpZiBkZWZpbmVkKENPTkZJR19QUENfQk9PSzNTXzY0KQorI2RlZmluZSBNU1JfNjRCSVQJTVNSX1NGCisKIC8qIFNlcnZlciB2YXJpYW50ICovCiAjZGVmaW5lIE1TUl8JCU1TUl9NRSB8IE1TUl9SSSB8IE1TUl9JUiB8IE1TUl9EUiB8IE1TUl9JU0YgfE1TUl9IVgotI2RlZmluZSBNU1JfS0VSTkVMICAgICAgTVNSXyB8IE1TUl9TRgorI2RlZmluZSBNU1JfS0VSTkVMCU1TUl8gfCBNU1JfNjRCSVQKICNkZWZpbmUgTVNSX1VTRVIzMglNU1JfIHwgTVNSX1BSIHwgTVNSX0VFCi0jZGVmaW5lIE1TUl9VU0VSNjQJTVNSX1VTRVIzMiB8IE1TUl9TRgorI2RlZmluZSBNU1JfVVNFUjY0CU1TUl9VU0VSMzIgfCBNU1JfNjRCSVQKICNlbGlmIGRlZmluZWQoQ09ORklHX1BQQ19CT09LM1NfMzIpIHx8IGRlZmluZWQoQ09ORklHXzh4eCkKIC8qIERlZmF1bHQgTVNSIGZvciBrZXJuZWwgbW9kZS4gKi8KICNkZWZpbmUgTVNSX0tFUk5FTAkoTVNSX01FfE1TUl9SSXxNU1JfSVJ8TVNSX0RSKQogI2RlZmluZSBNU1JfVVNFUgkoTVNSX0tFUk5FTHxNU1JfUFJ8TVNSX0VFKQogI2VuZGlmCiAKKyNpZm5kZWYgTVNSXzY0QklUCisjZGVmaW5lIE1TUl82NEJJVAkwCisjZW5kaWYKKwogLyogRmxvYXRpbmcgUG9pbnQgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVyIChGUFNDUikgRmllbGRzICovCiAjZGVmaW5lIEZQU0NSX0ZYCTB4ODAwMDAwMDAJLyogRlBVIGV4Y2VwdGlvbiBzdW1tYXJ5ICovCiAjZGVmaW5lIEZQU0NSX0ZFWAkweDQwMDAwMDAwCS8qIEZQVSBlbmFibGVkIGV4Y2VwdGlvbiBzdW1tYXJ5ICovCkBAIC0xODIsNiArMTg4LDggQEAKIAogI2RlZmluZSBTUFJOX0NUUgkweDAwOQkvKiBDb3VudCBSZWdpc3RlciAqLwogI2RlZmluZSBTUFJOX0RTQ1IJMHgxMQorI2RlZmluZSBTUFJOX0NGQVIJMHgxYwkvKiBDb21lIEZyb20gQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0FDT1AJMHgxRgkvKiBBdmFpbGFibGUgQ29wcm9jZXNzb3IgUmVnaXN0ZXIgKi8KICNkZWZpbmUgU1BSTl9DVFJMRgkweDA4OAogI2RlZmluZSBTUFJOX0NUUkxUCTB4MDk4CiAjZGVmaW5lICAgQ1RSTF9DVAkweGMwMDAwMDAwCS8qIGN1cnJlbnQgdGhyZWFkICovCkBAIC0yMTAsOCArMjE4LDQzIEBACiAjZGVmaW5lIFNQUk5fVEJXTAkweDExQwkvKiBUaW1lIEJhc2UgTG93ZXIgUmVnaXN0ZXIgKHN1cGVyLCBSL1cpICovCiAjZGVmaW5lIFNQUk5fVEJXVQkweDExRAkvKiBUaW1lIEJhc2UgVXBwZXIgUmVnaXN0ZXIgKHN1cGVyLCBSL1cpICovCiAjZGVmaW5lIFNQUk5fU1BVUlIJMHgxMzQJLyogU2NhbGVkIFBVUlIgKi8KKyNkZWZpbmUgU1BSTl9IU1BSRzAJMHgxMzAJLyogSHlwZXJ2aXNvciBTY3JhdGNoIDAgKi8KKyNkZWZpbmUgU1BSTl9IU1BSRzEJMHgxMzEJLyogSHlwZXJ2aXNvciBTY3JhdGNoIDEgKi8KKyNkZWZpbmUgU1BSTl9IRFNJU1IgICAgIDB4MTMyCisjZGVmaW5lIFNQUk5fSERBUiAgICAgICAweDEzMworI2RlZmluZSBTUFJOX0hERUMJMHgxMzYJLyogSHlwZXJ2aXNvciBEZWNyZW1lbnRlciAqLwogI2RlZmluZSBTUFJOX0hJT1IJMHgxMzcJLyogOTcwIEh5cGVydmlzb3IgaW50ZXJydXB0IG9mZnNldCAqLworI2RlZmluZSBTUFJOX1JNT1IJMHgxMzgJLyogUmVhbCBtb2RlIG9mZnNldCByZWdpc3RlciAqLworI2RlZmluZSBTUFJOX0hSTU9SCTB4MTM5CS8qIFJlYWwgbW9kZSBvZmZzZXQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9IU1JSMAkweDEzQQkvKiBIeXBlcnZpc29yIFNhdmUvUmVzdG9yZSAwICovCisjZGVmaW5lIFNQUk5fSFNSUjEJMHgxM0IJLyogSHlwZXJ2aXNvciBTYXZlL1Jlc3RvcmUgMSAqLwogI2RlZmluZSBTUFJOX0xQQ1IJMHgxM0UJLyogTFBBUiBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgTFBDUl9WUE0wCSgxdWwgPDwgKDYzLTApKQorI2RlZmluZSAgIExQQ1JfVlBNMQkoMXVsIDw8ICg2My0xKSkKKyNkZWZpbmUgICBMUENSX0lTTAkoMXVsIDw8ICg2My0yKSkKKyNkZWZpbmUgICBMUENSX0RQRkRfU0gJKDYzLTExKQorI2RlZmluZSAgIExQQ1JfVlJNQV9MCSgxdWwgPDwgKDYzLTEyKSkKKyNkZWZpbmUgICBMUENSX1ZSTUFfTFAwCSgxdWwgPDwgKDYzLTE1KSkKKyNkZWZpbmUgICBMUENSX1ZSTUFfTFAxCSgxdWwgPDwgKDYzLTE2KSkKKyNkZWZpbmUgICBMUENSX1JNTFMgICAgMHgxQzAwMDAwMCAgICAgIC8qIGltcGwgZGVwZW5kZW50IHJtbyBsaW1pdCBzZWwgKi8KKyNkZWZpbmUgICBMUENSX0lMRSAgICAgMHgwMjAwMDAwMCAgICAgIC8qICFIViBpcnFzIHNldCBNU1I6TEUgKi8KKyNkZWZpbmUgICBMUENSX1BFQ0UJMHgwMDAwNzAwMAkvKiBwb3dlcnNhdmUgZXhpdCBjYXVzZSBlbmFibGUgKi8KKyNkZWZpbmUgICAgIExQQ1JfUEVDRTAJMHgwMDAwNDAwMAkvKiBleHQuIGV4Y2VwdGlvbnMgY2FuIGNhdXNlIGV4aXQgKi8KKyNkZWZpbmUgICAgIExQQ1JfUEVDRTEJMHgwMDAwMjAwMAkvKiBkZWNyZW1lbnRlciBjYW4gY2F1c2UgZXhpdCAqLworI2RlZmluZSAgICAgTFBDUl9QRUNFMgkweDAwMDAxMDAwCS8qIG1hY2hpbmUgY2hlY2sgZXRjIGNhbiBjYXVzZSBleGl0ICovCisjZGVmaW5lICAgTFBDUl9NRVIJMHgwMDAwMDgwMAkvKiBNZWRpYXRlZCBFeHRlcm5hbCBFeGNlcHRpb24gKi8KKyNkZWZpbmUgICBMUENSX0xQRVMwICAgMHgwMDAwMDAwOCAgICAgIC8qIExQQVIgRW52IHNlbGVjdG9yIDAgKi8KKyNkZWZpbmUgICBMUENSX0xQRVMxICAgMHgwMDAwMDAwNCAgICAgIC8qIExQQVIgRW52IHNlbGVjdG9yIDEgKi8KKyNkZWZpbmUgICBMUENSX1JNSSAgICAgMHgwMDAwMDAwMiAgICAgIC8qIHJlYWwgbW9kZSBpcyBjYWNoZSBpbmhpYml0ICovCisjZGVmaW5lICAgTFBDUl9IRElDRSAgIDB4MDAwMDAwMDEgICAgICAvKiBIeXAgRGVjciBlbmFibGUgKEhWLFBSLEVFKSAqLworI2RlZmluZSBTUFJOX0xQSUQJMHgxM0YJLyogTG9naWNhbCBQYXJ0aXRpb24gSWRlbnRpZmllciAqLworI2RlZmluZQlTUFJOX0hNRVIJMHgxNTAJLyogSGFyZHdhcmUgbT8gZXJyb3IgcmVjb3ZlcnkgKi8KKyNkZWZpbmUJU1BSTl9ITUVFUgkweDE1MQkvKiBIYXJkd2FyZSBtPyBlbmFibGUgZXJyb3IgcmVjb3ZlcnkgKi8KKyNkZWZpbmUJU1BSTl9IRUlSCTB4MTUzCS8qIEh5cGVydmlzb3IgRW11bGF0ZWQgSW5zdHJ1Y3Rpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9UTEJJTkRFWFIJMHgxNTQJLyogUDcgVExCIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9UTEJWUE5SCTB4MTU1CS8qIFA3IFRMQiBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fVExCUlBOUgkweDE1NgkvKiBQNyBUTEIgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBTUFJOX1RMQkxQSURSCTB4MTU3CS8qIFA3IFRMQiBjb250cm9sIHJlZ2lzdGVyICovCiAjZGVmaW5lIFNQUk5fREJBVDBMCTB4MjE5CS8qIERhdGEgQkFUIDAgTG93ZXIgUmVnaXN0ZXIgKi8KICNkZWZpbmUgU1BSTl9EQkFUMFUJMHgyMTgJLyogRGF0YSBCQVQgMCBVcHBlciBSZWdpc3RlciAqLwogI2RlZmluZSBTUFJOX0RCQVQxTAkweDIxQgkvKiBEYXRhIEJBVCAxIExvd2VyIFJlZ2lzdGVyICovCkBAIC00MzQsMTYgKzQ3NywyMyBAQAogI2RlZmluZSBTUFJOX1NSUjAJMHgwMUEJLyogU2F2ZS9SZXN0b3JlIFJlZ2lzdGVyIDAgKi8KICNkZWZpbmUgU1BSTl9TUlIxCTB4MDFCCS8qIFNhdmUvUmVzdG9yZSBSZWdpc3RlciAxICovCiAjZGVmaW5lICAgU1JSMV9XQUtFTUFTSwkJMHgwMDM4MDAwMCAvKiByZWFzb24gZm9yIHdha2V1cCAqLwotI2RlZmluZSAgIFNSUjFfV0FLRVJFU0VUCTB4MDAzODAwMDAgLyogU3lzdGVtIHJlc2V0ICovCiAjZGVmaW5lICAgU1JSMV9XQUtFU1lTRVJSCTB4MDAzMDAwMDAgLyogU3lzdGVtIGVycm9yICovCiAjZGVmaW5lICAgU1JSMV9XQUtFRUUJCTB4MDAyMDAwMDAgLyogRXh0ZXJuYWwgaW50ZXJydXB0ICovCiAjZGVmaW5lICAgU1JSMV9XQUtFTVQJCTB4MDAyODAwMDAgLyogbXRjdHJsICovCisjZGVmaW5lCSAgU1JSMV9XQUtFSE1JCQkweDAwMjgwMDAwIC8qIEh5cGVydmlzb3IgbWFpbnRlbmFuY2UgKi8KICNkZWZpbmUgICBTUlIxX1dBS0VERUMJCTB4MDAxODAwMDAgLyogRGVjcmVtZW50ZXIgaW50ZXJydXB0ICovCiAjZGVmaW5lICAgU1JSMV9XQUtFVEhFUk0JMHgwMDEwMDAwMCAvKiBUaGVybWFsIG1hbmFnZW1lbnQgaW50ZXJydXB0ICovCisjZGVmaW5lCSAgU1JSMV9XQUtFUkVTRVQJMHgwMDEwMDAwMCAvKiBTeXN0ZW0gcmVzZXQgKi8KKyNkZWZpbmUJICBTUlIxX1dBS0VTVEFURQkweDAwMDMwMDAwIC8qIFBvd2Vyc2F2ZSBleGl0IG1hc2sgWzQ2OjQ3XSAqLworI2RlZmluZQkgIFNSUjFfV1NfREVFUEVTVAkweDAwMDMwMDAwIC8qIFNvbWUgcmVzb3VyY2VzIG5vdCBtYWludGFpbmVkLAorCQkJCQkgICogbWF5IG5vdCBiZSByZWNvdmVyYWJsZSAqLworI2RlZmluZQkgIFNSUjFfV1NfREVFUEVSCTB4MDAwMjAwMDAgLyogU29tZSByZXNvdXJjZXMgbm90IG1haW50YWluZWQgKi8KKyNkZWZpbmUJICBTUlIxX1dTX0RFRVAJCTB4MDAwMTAwMDAgLyogQWxsIHJlc291cmNlcyBtYWludGFpbmVkICovCiAjZGVmaW5lICAgU1JSMV9QUk9HRlBFCQkweDAwMTAwMDAwIC8qIEZsb2F0aW5nIFBvaW50IEVuYWJsZWQgKi8KICNkZWZpbmUgICBTUlIxX1BST0dQUklWCQkweDAwMDQwMDAwIC8qIFByaXZpbGVnZWQgaW5zdHJ1Y3Rpb24gKi8KICNkZWZpbmUgICBTUlIxX1BST0dUUkFQCQkweDAwMDIwMDAwIC8qIFRyYXAgKi8KICNkZWZpbmUgICBTUlIxX1BST0dBRERSCQkweDAwMDEwMDAwIC8qIFNSUjAgY29udGFpbnMgc3Vic2VxdWVudCBhZGRyICovCisKICNkZWZpbmUgU1BSTl9IU1JSMAkweDEzQQkvKiBTYXZlL1Jlc3RvcmUgUmVnaXN0ZXIgMCAqLwogI2RlZmluZSBTUFJOX0hTUlIxCTB4MTNCCS8qIFNhdmUvUmVzdG9yZSBSZWdpc3RlciAxICovCiAKQEAgLTY3MywxMiArNzIzLDE1IEBACiAgKiBTUFJHIHVzYWdlOgogICoKICAqIEFsbCA2NC1iaXQ6Ci0gKgktIFNQUkcxIHN0b3JlcyBQQUNBIHBvaW50ZXIKKyAqCS0gU1BSRzEgc3RvcmVzIFBBQ0EgcG9pbnRlciBleGNlcHQgNjQtYml0IHNlcnZlciBpbgorICogICAgICAgIEhWIG1vZGUgaW4gd2hpY2ggY2FzZSBpdCBpcyBIU1BSRzAKICAqCiAgKiA2NC1iaXQgc2VydmVyOgogICoJLSBTUFJHMCB1bnVzZWQgKHJlc2VydmVkIGZvciBIViBvbiBQb3dlcjQpCiAgKgktIFNQUkcyIHNjcmF0Y2ggZm9yIGV4Y2VwdGlvbiB2ZWN0b3JzCiAgKgktIFNQUkczIHVudXNlZCAodXNlciB2aXNpYmxlKQorICogICAgICAtIEhTUFJHMCBzdG9yZXMgUEFDQSBpbiBIViBtb2RlCisgKiAgICAgIC0gSFNQUkcxIHNjcmF0Y2ggZm9yICJIViIgZXhjZXB0aW9ucwogICoKICAqIDY0LWJpdCBlbWJlZGRlZAogICoJLSBTUFJHMCBnZW5lcmljIGV4Y2VwdGlvbiBzY3JhdGNoCkBAIC03NDEsNiArNzk0LDQxIEBACiAKICNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAogI2RlZmluZSBTUFJOX1NQUkdfU0NSQVRDSDAJU1BSTl9TUFJHMgorI2RlZmluZSBTUFJOX1NQUkdfSFBBQ0EJCVNQUk5fSFNQUkcwCisjZGVmaW5lIFNQUk5fU1BSR19IU0NSQVRDSDAJU1BSTl9IU1BSRzEKKworI2RlZmluZSBHRVRfUEFDQShyWCkJCQkJCVwKKwlCRUdJTl9GVFJfU0VDVElPTl9ORVNURUQoNjYpOwkJCVwKKwltZnNwcglyWCxTUFJOX1NQUkdfUEFDQTsJCQlcCisJRlRSX1NFQ1RJT05fRUxTRV9ORVNURUQoNjYpOwkJCVwKKwltZnNwcglyWCxTUFJOX1NQUkdfSFBBQ0E7CQkJXAorCUFMVF9GVFJfU0VDVElPTl9FTkRfTkVTVEVEX0lGQ0xSKENQVV9GVFJfSFZNT0RFXzIwNiwgNjYpCisKKyNkZWZpbmUgU0VUX1BBQ0EoclgpCQkJCQlcCisJQkVHSU5fRlRSX1NFQ1RJT05fTkVTVEVEKDY2KTsJCQlcCisJbXRzcHIJU1BSTl9TUFJHX1BBQ0Esclg7CQkJXAorCUZUUl9TRUNUSU9OX0VMU0VfTkVTVEVEKDY2KTsJCQlcCisJbXRzcHIJU1BSTl9TUFJHX0hQQUNBLHJYOwkJCVwKKwlBTFRfRlRSX1NFQ1RJT05fRU5EX05FU1RFRF9JRkNMUihDUFVfRlRSX0hWTU9ERV8yMDYsIDY2KQorCisjZGVmaW5lIEdFVF9TQ1JBVENIMChyWCkJCQkJXAorCUJFR0lOX0ZUUl9TRUNUSU9OX05FU1RFRCg2Nik7CQkJXAorCW1mc3ByCXJYLFNQUk5fU1BSR19TQ1JBVENIMDsJCQlcCisJRlRSX1NFQ1RJT05fRUxTRV9ORVNURUQoNjYpOwkJCVwKKwltZnNwcglyWCxTUFJOX1NQUkdfSFNDUkFUQ0gwOwkJCVwKKwlBTFRfRlRSX1NFQ1RJT05fRU5EX05FU1RFRF9JRkNMUihDUFVfRlRSX0hWTU9ERV8yMDYsIDY2KQorCisjZGVmaW5lIFNFVF9TQ1JBVENIMChyWCkJCQkJXAorCUJFR0lOX0ZUUl9TRUNUSU9OX05FU1RFRCg2Nik7CQkJXAorCW10c3ByCVNQUk5fU1BSR19TQ1JBVENIMCxyWDsJCQlcCisJRlRSX1NFQ1RJT05fRUxTRV9ORVNURUQoNjYpOwkJCVwKKwltdHNwcglTUFJOX1NQUkdfSFNDUkFUQ0gwLHJYOwkJCVwKKwlBTFRfRlRSX1NFQ1RJT05fRU5EX05FU1RFRF9JRkNMUihDUFVfRlRSX0hWTU9ERV8yMDYsIDY2KQorCisjZWxzZSAvKiBDT05GSUdfUFBDX0JPT0szU182NCAqLworI2RlZmluZSBHRVRfU0NSQVRDSDAoclgpCW1mc3ByCXJYLFNQUk5fU1BSR19TQ1JBVENIMAorI2RlZmluZSBTRVRfU0NSQVRDSDAoclgpCW10c3ByCVNQUk5fU1BSR19TQ1JBVENIMCxyWAorCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QUENfQk9PSzNFXzY0CkBAIC03NTAsNiArODM4LDEwIEBACiAjZGVmaW5lIFNQUk5fU1BSR19UTEJfRVhGUkFNRQlTUFJOX1NQUkcyCiAjZGVmaW5lIFNQUk5fU1BSR19UTEJfU0NSQVRDSAlTUFJOX1NQUkc2CiAjZGVmaW5lIFNQUk5fU1BSR19HRU5fU0NSQVRDSAlTUFJOX1NQUkcwCisKKyNkZWZpbmUgU0VUX1BBQ0EoclgpCW10c3ByCVNQUk5fU1BSR19QQUNBLHJYCisjZGVmaW5lIEdFVF9QQUNBKHJYKQltZnNwcglyWCxTUFJOX1NQUkdfUEFDQQorCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzMyCkBAIC04MDAsNiArODkyLDggQEAKICNkZWZpbmUgU1BSTl9TUFJHX1NDUkFUQ0gxCVNQUk5fU1BSRzEKICNlbmRpZgogCisKKwogLyoKICAqIEFuIG10ZnNmIGluc3RydWN0aW9uIHdpdGggdGhlIEwgYml0IHNldC4gT24gQ1BVcyB0aGF0IHN1cHBvcnQgdGhpcyBhCiAgKiBmdWxsIDY0Yml0cyBvZiBGUFNDUiBpcyByZXN0b3JlZCBhbmQgb24gb3RoZXIgQ1BVcyB0aGUgTCBiaXQgaXMgaWdub3JlZC4KQEAgLTg5NCw2ICs5ODgsOCBAQAogI2RlZmluZSBQVl9QT1dFUjVwCTB4MDAzQgogI2RlZmluZSBQVl9QT1dFUjcJMHgwMDNGCiAjZGVmaW5lIFBWXzk3MEZYCTB4MDAzQworI2RlZmluZSBQVl9QT1dFUjYJMHgwMDNFCisjZGVmaW5lIFBWX1BPV0VSNwkweDAwM0YKICNkZWZpbmUgUFZfNjMwCQkweDAwNDAKICNkZWZpbmUgUFZfNjMwcAkweDAwNDEKICNkZWZpbmUgUFZfOTcwTVAJMHgwMDQ0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2EyLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2EyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q1MmExMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYTIuaApAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqICBSZWdpc3RlciBkZWZpbml0aW9ucyBzcGVjaWZpYyB0byB0aGUgQTIgY29yZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggQmVuLiBIZXJyZW5zY2htaWR0IChiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmcpLCBJQk0gQ29ycC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX1BPV0VSUENfUkVHX0EyX0hfXworI2RlZmluZSBfX0FTTV9QT1dFUlBDX1JFR19BMl9IX18KKworI2RlZmluZSBTUFJOX1RFTlNSCTB4MWI1CisjZGVmaW5lIFNQUk5fVEVOUwkweDFiNgkvKiBUaHJlYWQgRU5hYmxlIFNldCAqLworI2RlZmluZSBTUFJOX1RFTkMJMHgxYjcJLyogVGhyZWFkIEVOYWJsZSBDbGVhciAqLworCisjZGVmaW5lIFNQUk5fQTJfQ0NSMAkweDNmMAkvKiBDb3JlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMCAqLworI2RlZmluZSBTUFJOX0EyX0NDUjEJMHgzZjEJLyogQ29yZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgU1BSTl9BMl9DQ1IyCTB4M2YyCS8qIENvcmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyICovCisjZGVmaW5lIFNQUk5fTU1VQ1IwCTB4M2ZjCS8qIE1NVSBDb250cm9sIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgU1BSTl9NTVVDUjEJMHgzZmQJLyogTU1VIENvbnRyb2wgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBTUFJOX01NVUNSMgkweDNmZQkvKiBNTVUgQ29udHJvbCBSZWdpc3RlciAyICovCisjZGVmaW5lIFNQUk5fTU1VQ1IzCTB4M2ZmCS8qIE1NVSBDb250cm9sIFJlZ2lzdGVyIDMgKi8KKworI2RlZmluZSBTUFJOX0lBUgkweDM3MgorCisjZGVmaW5lIFNQUk5fSVVDUjAJMHgzZjMKKyNkZWZpbmUgSVVDUjBfSUNCSV9BQ0sJMHgxMDAwCisKKyNkZWZpbmUgU1BSTl9YVUNSMAkweDNmNgkvKiBFeGVjdXRpb24gVW5pdCBDb25maWcgUmVnaXN0ZXIgMCAqLworCisjZGVmaW5lIEEyX0lFUkFUX1NJWkUJMTYKKyNkZWZpbmUgQTJfREVSQVRfU0laRQkzMgorCisvKiBBMiBNTVVDUjAgYml0cyAqLworI2RlZmluZSBNTVVDUjBfRUNMCTB4ODAwMDAwMDAJLyogRXh0ZW5kZWQgQ2xhc3MgZm9yIFRMQiBmaWxscyAqLworI2RlZmluZSBNTVVDUjBfVElEX05aCTB4NDAwMDAwMDAJLyogVElEIGlzIG5vbi16ZXJvICovCisjZGVmaW5lIE1NVUNSMF9UUwkweDEwMDAwMDAwCS8qIFRyYW5zbGF0aW9uIHNwYWNlIGZvciBUTEIgZmlsbHMgKi8KKyNkZWZpbmUgTU1VQ1IwX1RHUwkweDIwMDAwMDAwCS8qIEd1ZXN0IHNwYWNlIGZvciBUTEIgZmlsbHMgKi8KKyNkZWZpbmUgTU1VQ1IwX1RMQlNFTAkweDBjMDAwMDAwCS8qIFRMQiBvciBFUkFUIHRhcmdldCBmb3IgVExCIGZpbGxzICovCisjZGVmaW5lIE1NVUNSMF9UTEJTRUxfVQkweDAwMDAwMDAwCS8qICBUTEJTRUwgPSBVVExCICovCisjZGVmaW5lIE1NVUNSMF9UTEJTRUxfSQkweDA4MDAwMDAwCS8qICBUTEJTRUwgPSBJLUVSQVQgKi8KKyNkZWZpbmUgTU1VQ1IwX1RMQlNFTF9ECTB4MGMwMDAwMDAJLyogIFRMQlNFTCA9IEQtRVJBVCAqLworI2RlZmluZSBNTVVDUjBfTE9DS1NSU0gJMHgwMjAwMDAwMAkvKiBVc2UgVExCIGxvY2sgb24gdGxic3guICovCisjZGVmaW5lIE1NVUNSMF9USURfTUFTSwkweDAwMDAwMGZmCS8qIFRJRCBmaWVsZCAqLworCisvKiBBMiBNTVVDUjEgYml0cyAqLworI2RlZmluZSBNTVVDUjFfSVJSRQkJMHg4MDAwMDAwMAkvKiBJLUVSQVQgcm91bmQgcm9iaW4gZW5hYmxlICovCisjZGVmaW5lIE1NVUNSMV9EUlJFCQkweDQwMDAwMDAwCS8qIEQtRVJBVCByb3VuZCByb2JpbiBlbmFibGUgKi8KKyNkZWZpbmUgTU1VQ1IxX1JFRQkJMHgyMDAwMDAwMAkvKiBSZWZlcmVuY2UgRXhjZXB0aW9uIEVuYWJsZSovCisjZGVmaW5lIE1NVUNSMV9DRUUJCTB4MTAwMDAwMDAJLyogQ2hhbmdlIGV4Y2VwdGlvbiBlbmFibGUgKi8KKyNkZWZpbmUgTU1VQ1IxX0NTSU5WX0FMTAkweDAwMDAwMDAwCS8qIEludmFsIEVSQVQgb24gYWxsIENTIGV2dHMgKi8KKyNkZWZpbmUgTU1VQ1IxX0NTSU5WX05JU1lOQwkweDA0MDAwMDAwCS8qIEludmFsIEVSQVQgb24gYWxsIGV4IGlzeW5jKi8KKyNkZWZpbmUgTU1VQ1IxX0NTSU5WX05FVkVSCTB4MGMwMDAwMDAJLyogRG9uJ3QgaW52YWwgRVJBVCBvbiBDUyAqLworI2RlZmluZSBNTVVDUjFfSUNUSUQJCTB4MDAwODAwMDAJLyogSUVSQVQgY2xhc3MgZmllbGQgYXMgVElEICovCisjZGVmaW5lIE1NVUNSMV9JVFRJRAkJMHgwMDA0MDAwMAkvKiBJRVJBVCB0aGRpZCBmaWVsZCBhcyBUSUQgKi8KKyNkZWZpbmUgTU1VQ1IxX0RDVElECQkweDAwMDIwMDAwCS8qIERFUkFUIGNsYXNzIGZpZWxkIGFzIFRJRCAqLworI2RlZmluZSBNTVVDUjFfRFRUSUQJCTB4MDAwMTAwMDAJLyogREVSQVQgdGhkaWQgZmllbGQgYXMgVElEICovCisjZGVmaW5lIE1NVUNSMV9EQ0NECQkweDAwMDA4MDAwCS8qIERFUkFUIGNsYXNzIGlnbm9yZSAqLworI2RlZmluZSBNTVVDUjFfVExCV0VfQklOVgkweDAwMDA0MDAwCS8qIGJhY2sgaW52YWxpZGF0ZSBvbiB0bGJ3ZSAqLworCisvKiBBMiBNTVVDUjIgYml0cyAqLworI2RlZmluZSBNTVVDUjJfUFNTRUxfU0hJRlQJNAorCisvKiBBMiBNTVVDUjMgYml0cyAqLworI2RlZmluZSBNTVVDUjNfVEhJRAkJMHgwMDAwMDAwZgkvKiBUaHJlYWQgSUQgKi8KKworLyogKioqIEVSQVQgVExCIGJpdHMgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVExCMF9FUE5fTUFTSwkJQVNNX0NPTlNUKDB4ZmZmZmZmZmZmZmZmZjAwMCkKKyNkZWZpbmUgVExCMF9DTEFTU19NQVNLCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwYzAwKQorI2RlZmluZSBUTEIwX0NMQVNTXzAwCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMDAwKQorI2RlZmluZSBUTEIwX0NMQVNTXzAxCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwNDAwKQorI2RlZmluZSBUTEIwX0NMQVNTXzEwCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwODAwKQorI2RlZmluZSBUTEIwX0NMQVNTXzExCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwYzAwKQorI2RlZmluZSBUTEIwX1YJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMjAwKQorI2RlZmluZSBUTEIwX1gJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMTAwKQorI2RlZmluZSBUTEIwX1NJWkVfTUFTSwkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDBmMCkKKyNkZWZpbmUgVExCMF9TSVpFXzRLCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMDEwKQorI2RlZmluZSBUTEIwX1NJWkVfNjRLCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMDMwKQorI2RlZmluZSBUTEIwX1NJWkVfMU0JCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDAwNTApCisjZGVmaW5lIFRMQjBfU0laRV8xNk0JCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDAwNzApCisjZGVmaW5lIFRMQjBfU0laRV8xRwkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDBhMCkKKyNkZWZpbmUgVExCMF9USERJRF9NQVNLCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMDBmKQorI2RlZmluZSBUTEIwX1RIRElEXzAJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDAwMDEpCisjZGVmaW5lIFRMQjBfVEhESURfMQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDAwMikKKyNkZWZpbmUgVExCMF9USERJRF8yCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMDA0KQorI2RlZmluZSBUTEIwX1RIRElEXzMJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDAwMDgpCisjZGVmaW5lIFRMQjBfVEhESURfQUxMCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMDBmKQorCisjZGVmaW5lIFRMQjFfUkVTVkFUVFIJCUFTTV9DT05TVCgweDAwZjAwMDAwMDAwMDAwMDApCisjZGVmaW5lIFRMQjFfVTAJCQlBU01fQ09OU1QoMHgwMDA4MDAwMDAwMDAwMDAwKQorI2RlZmluZSBUTEIxX1UxCQkJQVNNX0NPTlNUKDB4MDAwNDAwMDAwMDAwMDAwMCkKKyNkZWZpbmUgVExCMV9VMgkJCUFTTV9DT05TVCgweDAwMDIwMDAwMDAwMDAwMDApCisjZGVmaW5lIFRMQjFfVTMJCQlBU01fQ09OU1QoMHgwMDAxMDAwMDAwMDAwMDAwKQorI2RlZmluZSBUTEIxX1IJCQlBU01fQ09OU1QoMHgwMDAwODAwMDAwMDAwMDAwKQorI2RlZmluZSBUTEIxX0MJCQlBU01fQ09OU1QoMHgwMDAwNDAwMDAwMDAwMDAwKQorI2RlZmluZSBUTEIxX1JQTl9NQVNLCQlBU01fQ09OU1QoMHgwMDAwMDNmZmZmZmZmMDAwKQorI2RlZmluZSBUTEIxX1cJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwODAwKQorI2RlZmluZSBUTEIxX0kJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwNDAwKQorI2RlZmluZSBUTEIxX00JCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMjAwKQorI2RlZmluZSBUTEIxX0cJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMTAwKQorI2RlZmluZSBUTEIxX0UJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMDgwKQorI2RlZmluZSBUTEIxX1ZGCQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDA0MCkKKyNkZWZpbmUgVExCMV9VWAkJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDAwMjApCisjZGVmaW5lIFRMQjFfU1gJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMDEwKQorI2RlZmluZSBUTEIxX1VXCQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDAwOCkKKyNkZWZpbmUgVExCMV9TVwkJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDAwMDQpCisjZGVmaW5lIFRMQjFfVVIJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMDAyKQorI2RlZmluZSBUTEIxX1NSCQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDAwMSkKKworI2lmZGVmIENPTkZJR19QUENfRUFSTFlfREVCVUdfV1NQCisjZGVmaW5lIFdTUF9VQVJUX1BIWVMJMHhmZmMwMDBjMDAwCisvKiBUaGlzIG5lZWRzIHRvIGJlIGNhcmVmdWwgY2hvc2VuIHRvIGhpdCBhICEwIGNvbmdydWVuY2UgY2xhc3MKKyAqIGluIHRoZSBUTEIgc2luY2Ugd2UgYm9sdCBpdCBpbiB3YXkgMywgd2hpY2ggaXMgYWxyZWFkeSBvY2N1cGllZAorICogYnkgb3VyIGxpbmVhciBtYXBwaW5nIHByaW1hcnkgYm9sdGVkIGVudHJ5IGluIENDIDAuCisgKi8KKyNkZWZpbmUgV1NQX1VBUlRfVklSVAkweGYwMDAwMDAwMDAwMDEwMDAKKyNlbmRpZgorCisvKiBBMiBlcmF0aXZheCBhdHRyaWJ1dGVzIGRlZmluaXRpb25zICovCisjZGVmaW5lIEVSQVRJVkFYX1JTX0lTX0FMTAkJMHgwMDAKKyNkZWZpbmUgRVJBVElWQVhfUlNfSVNfVElECQkweDA0MAorI2RlZmluZSBFUkFUSVZBWF9SU19JU19DTEFTUwkJMHgwODAKKyNkZWZpbmUgRVJBVElWQVhfUlNfSVNfRlVMTE1BVENICTB4MGMwCisjZGVmaW5lIEVSQVRJVkFYX0NMQVNTXzAwCQkweDAwMAorI2RlZmluZSBFUkFUSVZBWF9DTEFTU18wMQkJMHgwMTAKKyNkZWZpbmUgRVJBVElWQVhfQ0xBU1NfMTAJCTB4MDIwCisjZGVmaW5lIEVSQVRJVkFYX0NMQVNTXzExCQkweDAzMAorI2RlZmluZSBFUkFUSVZBWF9QU0laRV80SwkJKFRMQl9QU0laRV80SyA+PiAxKQorI2RlZmluZSBFUkFUSVZBWF9QU0laRV82NEsJCShUTEJfUFNJWkVfNjRLID4+IDEpCisjZGVmaW5lIEVSQVRJVkFYX1BTSVpFXzFNCQkoVExCX1BTSVpFXzFNID4+IDEpCisjZGVmaW5lIEVSQVRJVkFYX1BTSVpFXzE2TQkJKFRMQl9QU0laRV8xNk0gPj4gMSkKKyNkZWZpbmUgRVJBVElWQVhfUFNJWkVfMUcJCShUTEJfUFNJWkVfMUcgPj4gMSkKKworLyogQTIgZXJhdGlseCBhdHRyaWJ1dGVzIGRlZmluaXRpb25zICovCisjZGVmaW5lIEVSQVRJTFhfVF9BTEwJCQkwCisjZGVmaW5lIEVSQVRJTFhfVF9USUQJCQkxCisjZGVmaW5lIEVSQVRJTFhfVF9UR1MJCQkyCisjZGVmaW5lIEVSQVRJTFhfVF9GVUxMTUFUQ0gJCTMKKyNkZWZpbmUgRVJBVElMWF9UX0NMQVNTMAkJNAorI2RlZmluZSBFUkFUSUxYX1RfQ0xBU1MxCQk1CisjZGVmaW5lIEVSQVRJTFhfVF9DTEFTUzIJCTYKKyNkZWZpbmUgRVJBVElMWF9UX0NMQVNTMwkJNworCisvKiBYVUNSMCBiaXRzICovCisjZGVmaW5lIFhVQ1IwX1RSQUNFX1VNX1QwCQkweDQwMDAwMDAwCS8qIFRocmVhZCAwICovCisjZGVmaW5lIFhVQ1IwX1RSQUNFX1VNX1QxCQkweDIwMDAwMDAwCS8qIFRocmVhZCAxICovCisjZGVmaW5lIFhVQ1IwX1RSQUNFX1VNX1QyCQkweDEwMDAwMDAwCS8qIFRocmVhZCAyICovCisjZGVmaW5lIFhVQ1IwX1RSQUNFX1VNX1QzCQkweDA4MDAwMDAwCS8qIFRocmVhZCAzICovCisKKy8qIEEyIENDUjAgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQTJfQ0NSMF9QTUVfRElTQUJMRUQJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQTJfQ0NSMF9QTUVfU0xFRVAJCTB4NDAwMDAwMDAKKyNkZWZpbmUgQTJfQ0NSMF9QTUVfUlZXCQkJMHg4MDAwMDAwMAorI2RlZmluZSBBMl9DQ1IwX1BNRV9ESVNBQkxFRDIJCTB4YzAwMDAwMDAKKworLyogQTIgQ0NSMiByZWdpc3RlciAqLworI2RlZmluZSBBMl9DQ1IyX0VSQVRfT05MWV9NT0RFCQkweDAwMDAwMDAxCisjZGVmaW5lIEEyX0NDUjJfRU5BQkxFX0lDU1dYCQkweDAwMDAwMDAyCisjZGVmaW5lIEEyX0NDUjJfRU5BQkxFX1BDCQkweDIwMDAwMDAwCisjZGVmaW5lIEEyX0NDUjJfRU5BQkxFX1RSQUNFCQkweDQwMDAwMDAwCisKKyNlbmRpZiAvKiBfX0FTTV9QT1dFUlBDX1JFR19BMl9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaAppbmRleCBiMzE2Nzk0Li4wZjBhZDlmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oCkBAIC0yNywxMCArMjcsMTIgQEAKICNkZWZpbmUgTVNSX0NNCQkoMTw8MzEpIC8qIENvbXB1dGF0aW9uIE1vZGUgKDA9MzItYml0LCAxPTY0LWJpdCkgKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX1BQQ19CT09LM0VfNjQpCisjZGVmaW5lIE1TUl82NEJJVAlNU1JfQ00KKwogI2RlZmluZSBNU1JfCQlNU1JfTUUgfCBNU1JfQ0UKLSNkZWZpbmUgTVNSX0tFUk5FTCAgICAgIE1TUl8gfCBNU1JfQ00KKyNkZWZpbmUgTVNSX0tFUk5FTAlNU1JfIHwgTVNSXzY0QklUCiAjZGVmaW5lIE1TUl9VU0VSMzIJTVNSXyB8IE1TUl9QUiB8IE1TUl9FRSB8IE1TUl9ERQotI2RlZmluZSBNU1JfVVNFUjY0CU1TUl9VU0VSMzIgfCBNU1JfQ00gfCBNU1JfREUKKyNkZWZpbmUgTVNSX1VTRVI2NAlNU1JfVVNFUjMyIHwgTVNSXzY0QklUCiAjZWxpZiBkZWZpbmVkIChDT05GSUdfNDB4KQogI2RlZmluZSBNU1JfS0VSTkVMCShNU1JfTUV8TVNSX1JJfE1TUl9JUnxNU1JfRFJ8TVNSX0NFKQogI2RlZmluZSBNU1JfVVNFUgkoTVNSX0tFUk5FTHxNU1JfUFJ8TVNSX0VFKQpAQCAtODEsNiArODMsMTAgQEAKICNkZWZpbmUgU1BSTl9JVk9SMTMJMHgxOUQJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgMTMgKi8KICNkZWZpbmUgU1BSTl9JVk9SMTQJMHgxOUUJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgMTQgKi8KICNkZWZpbmUgU1BSTl9JVk9SMTUJMHgxOUYJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgMTUgKi8KKyNkZWZpbmUgU1BSTl9JVk9SMzgJMHgxQjAJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgMzggKi8KKyNkZWZpbmUgU1BSTl9JVk9SMzkJMHgxQjEJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgMzkgKi8KKyNkZWZpbmUgU1BSTl9JVk9SNDAJMHgxQjIJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgNDAgKi8KKyNkZWZpbmUgU1BSTl9JVk9SNDEJMHgxQjMJLyogSW50ZXJydXB0IFZlY3RvciBPZmZzZXQgUmVnaXN0ZXIgNDEgKi8KICNkZWZpbmUgU1BSTl9TUEVGU0NSCTB4MjAwCS8qIFNQRSAmIEVtYmVkZGVkIEZQIFN0YXR1cyAmIENvbnRyb2wgKi8KICNkZWZpbmUgU1BSTl9CQkVBUgkweDIwMQkvKiBCcmFuY2ggQnVmZmVyIEVudHJ5IEFkZHJlc3MgUmVnaXN0ZXIgKi8KICNkZWZpbmUgU1BSTl9CQlRBUgkweDIwMgkvKiBCcmFuY2ggQnVmZmVyIFRhcmdldCBBZGRyZXNzIFJlZ2lzdGVyICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcnRhcy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3J0YXMuaAppbmRleCA5YTExOTNlLi41ODYyNWQxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcnRhcy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ydGFzLmgKQEAgLTE1OCw3ICsxNTgsNTAgQEAKIAl1bnNpZ25lZCBsb25nIHRhcmdldDo0OwkJCS8qIFRhcmdldCBvZiBmYWlsZWQgb3BlcmF0aW9uICovCiAJdW5zaWduZWQgbG9uZyB0eXBlOjg7CQkJLyogR2VuZXJhbCBldmVudCBvciBlcnJvciovCiAJdW5zaWduZWQgbG9uZyBleHRlbmRlZF9sb2dfbGVuZ3RoOjMyOwkvKiBsZW5ndGggaW4gYnl0ZXMgKi8KLQl1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxXTsKKwl1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxXTsJCS8qIFN0YXJ0IG9mIGV4dGVuZGVkIGxvZyAqLworCQkJCQkJLyogVmFyaWFibGUgbGVuZ3RoLiAgICAgICovCit9OworCisjZGVmaW5lIFJUQVNfVjZFWFRfTE9HX0ZPUk1BVF9FVkVOVF9MT0cJMTQKKworI2RlZmluZSBSVEFTX1Y2RVhUX0NPTVBBTllfSURfSUJNCSgoJ0knIDw8IDI0KSB8ICgnQicgPDwgMTYpIHwgKCdNJyA8PCA4KSkKKworLyogUlRBUyBnZW5lcmFsIGV4dGVuZGVkIGV2ZW50IGxvZywgVmVyc2lvbiA2LiBUaGUgZXh0ZW5kZWQgbG9nIHN0YXJ0cworICogZnJvbSAiYnVmZmVyIiBmaWVsZCBvZiBzdHJ1Y3QgcnRhc19lcnJvcl9sb2cgZGVmaW5lZCBhYm92ZS4KKyAqLworc3RydWN0IHJ0YXNfZXh0X2V2ZW50X2xvZ192NiB7CisJLyogQnl0ZSAwICovCisJdWludDMyX3QgbG9nX3ZhbGlkOjE7CQkvKiAxOkxvZyB2YWxpZCAqLworCXVpbnQzMl90IHVucmVjb3ZlcmFibGVfZXJyb3I6MTsJLyogMTpVbnJlY292ZXJhYmxlIGVycm9yICovCisJdWludDMyX3QgcmVjb3ZlcmFibGVfZXJyb3I6MTsJLyogMTpyZWNvdmVyYWJsZSAoY29ycmVjdGFibGUJKi8KKwkJCQkJLyogICBvciBzdWNjZXNzZnVsbHkgcmV0cmllZCkJKi8KKwl1aW50MzJfdCBkZWdyYWRlZF9vcGVyYXRpb246MTsJLyogMTpVbnJlY292ZXJhYmxlIGVyciwgYnlwYXNzZWQqLworCQkJCQkvKiAgIC0gZGVncmFkZWQgb3BlcmF0aW9uIChlLmcuCSovCisJCQkJCS8qICAgQ1BVIG9yIG1lbSB0YWtlbiBvZmYtbGluZSkJKi8KKwl1aW50MzJfdCBwcmVkaWN0aXZlX2Vycm9yOjE7CisJdWludDMyX3QgbmV3X2xvZzoxOwkJLyogMToiTmV3IiBsb2cgKEFsd2F5cyAxIGZvcgkqLworCQkJCQkvKiAgIGRhdGEgcmV0dXJuZWQgZnJvbSBSVEFTCSovCisJdWludDMyX3QgYmlnX2VuZGlhbjoxOwkJLyogMTogQmlnIGVuZGlhbiAqLworCXVpbnQzMl90IDoxOwkJCS8qIHJlc2VydmVkICovCisJLyogQnl0ZSAxICovCisJdWludDMyX3QgOjg7CQkJLyogcmVzZXJ2ZWQgKi8KKwkvKiBCeXRlIDIgKi8KKwl1aW50MzJfdCBwb3dlcnBjX2Zvcm1hdDoxOwkvKiBTZXQgdG8gMSAoaW5kaWNhdGluZyBsb2cgaXMJKi8KKwkJCQkJLyogaW4gUG93ZXJQQyBmb3JtYXQJCSovCisJdWludDMyX3QgOjM7CQkJLyogcmVzZXJ2ZWQgKi8KKwl1aW50MzJfdCBsb2dfZm9ybWF0OjQ7CQkvKiBMb2cgZm9ybWF0IGluZGljYXRvci4gRGVmaW5lCSovCisJCQkJCS8qIGZvcm1hdCB1c2VkIGZvciBieXRlIDEyLTIwNDcJKi8KKwkvKiBCeXRlIDMgKi8KKwl1aW50MzJfdCA6ODsJCQkvKiByZXNlcnZlZCAqLworCS8qIEJ5dGUgNC0xMSAqLworCXVpbnQ4X3QgcmVzZXJ2ZWRbOF07CQkvKiByZXNlcnZlZCAqLworCS8qIEJ5dGUgMTItMTUgKi8KKwl1aW50MzJfdCBjb21wYW55X2lkOwkJLyogQ29tcGFueSBJRCBvZiB0aGUgY29tcGFueQkqLworCQkJCQkvKiB0aGF0IGRlZmluZXMgdGhlIGZvcm1hdCBmb3IJKi8KKwkJCQkJLyogdGhlIHZlbmRvciBzcGVjaWZpYyBsb2cgdHlwZQkqLworCS8qIEJ5dGUgMTYtZW5kIG9mIGxvZyAqLworCXVpbnQ4X3QgdmVuZG9yX2xvZ1sxXTsJCS8qIFN0YXJ0IG9mIHZlbmRvciBzcGVjaWZpYyBsb2cJKi8KKwkJCQkJLyogVmFyaWFibGUgbGVuZ3RoLgkJKi8KIH07CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc2NvbS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Njb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2FiZmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Njb20uaApAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIEJlbmphbWluIEhlcnJlbnNjaG1pZHQsIElCTSBDb3JwCisgKiAgICAgICAgICAgICAgICA8YmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnPgorICogICAgIGFuZCAgICAgICAgRGF2aWQgR2lic29uLCBJQk0gQ29ycG9yYXRpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7ICB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlCisgKiAgIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07ICBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfQVNNX1BPV0VSUENfU0NPTV9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19TQ09NX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaWZkZWYgQ09ORklHX1BQQ19TQ09NCisKKy8qCisgKiBUaGUgU0NPTSBidXMgaXMgYSBzaWRlYmFuZCBidXMgdXNlZCBmb3IgYWNjZXNzaW5nIHZhcmlvdXMgaW50ZXJuYWwKKyAqIHJlZ2lzdGVycyBvZiB0aGUgcHJvY2Vzc29yIG9yIHRoZSBjaGlwc2V0LiBUaGUgaW1wbGVtZW50YXRpb24gZGV0YWlscworICogZGlmZmVyIGJldHdlZW4gcHJvY2Vzc29ycyBhbmQgcGxhdGZvcm1zLCBhbmQgdGhlIGFjY2VzcyBtZXRob2QgYXMKKyAqIHdlbGwuCisgKgorICogVGhpcyBBUEkgYWxsb3dzIHRvICJtYXAiIHJhbmdlcyBvZiBTQ09NIHJlZ2lzdGVyIG51bWJlcnMgYXNzb2NpYXRlZAorICogd2l0aCBhIGdpdmVuIFNDT00gY29udHJvbGxlci4gVGhlIGxhdGVyIG11c3QgYmUgcmVwcmVzZW50ZWQgYnkgYQorICogZGV2aWNlIG5vZGUsIHRob3VnaCBzb21lIGltcGxlbWVudGF0aW9ucyBtaWdodCBzdXBwb3J0IE5VTEwgaWYgdGhlcmUKKyAqIGlzIG5vIHBvc3NpYmxlIGFtYmlndWl0eQorICoKKyAqIFRoZW4sIHNjb21fcmVhZC9zY29tX3dyaXRlIGNhbiBiZSB1c2VkIHRvIGFjY2Vzc2VzIHJlZ2lzdGVycyBpbnNpZGUKKyAqIHRoYXQgcmFuZ2UuIFRoZSBhcmd1bWVudCBwYXNzZWQgaXMgYSByZWdpc3RlciBudW1iZXIgcmVsYXRpdmUgdG8KKyAqIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJhbmdlIG1hcHBlZC4KKyAqLworCit0eXBlZGVmIHZvaWQgKnNjb21fbWFwX3Q7CisKKy8qIFZhbHVlIGZvciBhbiBpbnZhbGlkIFNDT00gbWFwICovCisjZGVmaW5lIFNDT01fTUFQX0lOVkFMSUQJKE5VTEwpCisKKy8qIFRoZSBzY29tX2NvbnRyb2xsZXIgZGF0YSBzdHJ1Y3R1cmUgaXMgd2hhdCB0aGUgcGxhdGZvcm0gcGFzc2VzCisgKiB0byB0aGUgY29yZSBjb2RlIGluIHNjb21faW5pdCwgaXQgcHJvdmlkZXMgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbgorICogb2YgYWxsIHRoZSBTQ09NIGZ1bmN0aW9ucworICovCitzdHJ1Y3Qgc2NvbV9jb250cm9sbGVyIHsKKwlzY29tX21hcF90ICgqbWFwKShzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0cmxfZGV2LCB1NjQgcmVnLCB1NjQgY291bnQpOworCXZvaWQgKCp1bm1hcCkoc2NvbV9tYXBfdCBtYXApOworCisJdTY0ICgqcmVhZCkoc2NvbV9tYXBfdCBtYXAsIHUzMiByZWcpOworCXZvaWQgKCp3cml0ZSkoc2NvbV9tYXBfdCBtYXAsIHUzMiByZWcsIHU2NCB2YWx1ZSk7Cit9OworCitleHRlcm4gY29uc3Qgc3RydWN0IHNjb21fY29udHJvbGxlciAqc2NvbV9jb250cm9sbGVyOworCisvKioKKyAqIHNjb21faW5pdCAtIEluaXRpYWxpemUgdGhlIFNDT00gYmFja2VuZCwgY2FsbGVkIGJ5IHRoZSBwbGF0Zm9ybQorICogQGNvbnRyb2xsZXI6IFRoZSBwbGF0Zm9ybSBTQ09NIGNvbnRyb2xsZXIKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNjb21faW5pdChjb25zdCBzdHJ1Y3Qgc2NvbV9jb250cm9sbGVyICpjb250cm9sbGVyKQoreworCXNjb21fY29udHJvbGxlciA9IGNvbnRyb2xsZXI7Cit9CisKKy8qKgorICogc2NvbV9tYXBfb2sgLSBUZXN0IGlzIGEgU0NPTSBtYXBwaW5nIGlzIHN1Y2Nlc3NmdWwKKyAqIEBtYXA6IFRoZSByZXN1bHQgb2Ygc2NvbV9tYXAgdG8gdGVzdAorICovCitzdGF0aWMgaW5saW5lIGludCBzY29tX21hcF9vayhzY29tX21hcF90IG1hcCkKK3sKKwlyZXR1cm4gbWFwICE9IFNDT01fTUFQX0lOVkFMSUQ7Cit9CisKKy8qKgorICogc2NvbV9tYXAgLSBNYXAgYSBibG9jayBvZiBTQ09NIHJlZ2lzdGVycworICogQGN0cmxfZGV2OiBEZXZpY2Ugbm9kZSBvZiB0aGUgU0NPTSBjb250cm9sbGVyCisgKiAgICAgICAgICAgIHNvbWUgaW1wbGVtZW50YXRpb25zIGFsbG93IE5VTEwgaGVyZQorICogQHJlZzogZmlyc3QgU0NPTSByZWdpc3RlciB0byBtYXAKKyAqIEBjb3VudDogTnVtYmVyIG9mIFNDT00gcmVnaXN0ZXJzIHRvIG1hcAorICovCisKK3N0YXRpYyBpbmxpbmUgc2NvbV9tYXBfdCBzY29tX21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0cmxfZGV2LAorCQkJCSAgdTY0IHJlZywgdTY0IGNvdW50KQoreworCXJldHVybiBzY29tX2NvbnRyb2xsZXItPm1hcChjdHJsX2RldiwgcmVnLCBjb3VudCk7Cit9CisKKy8qKgorICogc2NvbV9maW5kX3BhcmVudCAtIEZpbmQgdGhlIFNDT00gY29udHJvbGxlciBmb3IgYSBkZXZpY2UKKyAqIEBkZXY6IE9GIG5vZGUgb2YgdGhlIGRldmljZQorICoKKyAqIFRoaXMgaXMgbm90IG1lYW50IGZvciBnZW5lcmFsIHVzYWdlLCBidXQgaW4gY29tYmluYXRpb24gd2l0aAorICogc2NvbV9tYXAoKSBhbGxvd3MgdG8gbWFwIHJlZ2lzdGVycyBub3QgcmVwcmVzZW50ZWQgYnkgdGhlCisgKiBkZXZpY2Ugb3duIHNjb20tcmVnIHByb3BlcnR5LiBVc2VmdWwgZm9yIGFwcGx5aW5nIEhXIHdvcmthcm91bmRzCisgKiBvbiB0aGluZ3Mgbm90IHByb3Blcmx5IHJlcHJlc2VudGVkIGluIHRoZSBkZXZpY2UtdHJlZSBmb3IgZXhhbXBsZS4KKyAqLworc3RydWN0IGRldmljZV9ub2RlICpzY29tX2ZpbmRfcGFyZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2KTsKKworCisvKioKKyAqIHNjb21fbWFwX2RldmljZSAtIE1hcCBhIGRldmljZSdzIGJsb2NrIG9mIFNDT00gcmVnaXN0ZXJzCisgKiBAZGV2OiBPRiBub2RlIG9mIHRoZSBkZXZpY2UKKyAqIEBpbmRleDogUmVnaXN0ZXIgYmFuayBpbmRleCAoaW5kZXggaW4gInNjb20tcmVnIiBwcm9wZXJ0eSkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdXNlIHRoZSBkZXZpY2UtdHJlZSBiaW5kaW5nIGZvciBTQ09NIHdoaWNoCisgKiBpcyB0byBmb2xsb3cgInNjb20tcGFyZW50IiBwcm9wZXJ0aWVzIHVudGlsIGl0IGZpbmRzIGEgbm9kZSB3aXRoCisgKiBhICJzY29tLWNvbnRyb2xsZXIiIHByb3BlcnR5IHRvIGZpbmQgdGhlIGNvbnRyb2xsZXIuIEl0IHdpbGwgdGhlbgorICogdXNlIHRoZSAic2NvbS1yZWciIHByb3BlcnR5IHdoaWNoIGlzIG1hZGUgb2YgcmVnL2NvdW50IHBhaXJzLAorICogZWFjaCBvZiB0aGVtIGhhdmluZyBhIHNpemUgZGVmaW5lZCBieSB0aGUgY29udHJvbGxlcidzICNzY29tLWNlbGxzCisgKiBwcm9wZXJ0eQorICovCitleHRlcm4gc2NvbV9tYXBfdCBzY29tX21hcF9kZXZpY2Uoc3RydWN0IGRldmljZV9ub2RlICpkZXYsIGludCBpbmRleCk7CisKKworLyoqCisgKiBzY29tX3VubWFwIC0gVW5tYXAgYSBibG9jayBvZiBTQ09NIHJlZ2lzdGVycworICogQG1hcDogUmVzdWx0IG9mIHNjb21fbWFwIGlzIHRvIGJlIHVubWFwcGVkCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzY29tX3VubWFwKHNjb21fbWFwX3QgbWFwKQoreworCWlmIChzY29tX21hcF9vayhtYXApKQorCQlzY29tX2NvbnRyb2xsZXItPnVubWFwKG1hcCk7Cit9CisKKy8qKgorICogc2NvbV9yZWFkIC0gUmVhZCBhIFNDT00gcmVnaXN0ZXIKKyAqIEBtYXA6IFJlc3VsdCBvZiBzY29tX21hcAorICogQHJlZzogUmVnaXN0ZXIgaW5kZXggd2l0aGluIHRoYXQgbWFwCisgKi8KK3N0YXRpYyBpbmxpbmUgdTY0IHNjb21fcmVhZChzY29tX21hcF90IG1hcCwgdTMyIHJlZykKK3sKKwlyZXR1cm4gc2NvbV9jb250cm9sbGVyLT5yZWFkKG1hcCwgcmVnKTsKK30KKworLyoqCisgKiBzY29tX3dyaXRlIC0gV3JpdGUgdG8gYSBTQ09NIHJlZ2lzdGVyCisgKiBAbWFwOiBSZXN1bHQgb2Ygc2NvbV9tYXAKKyAqIEByZWc6IFJlZ2lzdGVyIGluZGV4IHdpdGhpbiB0aGF0IG1hcAorICogQHZhbHVlOiBWYWx1ZSB0byB3cml0ZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2NvbV93cml0ZShzY29tX21hcF90IG1hcCwgdTMyIHJlZywgdTY0IHZhbHVlKQoreworCXNjb21fY29udHJvbGxlci0+d3JpdGUobWFwLCByZWcsIHZhbHVlKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19QUENfU0NPTSAqLworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfU0NPTV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc21wLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc21wLmgKaW5kZXggYTkwMmEwZC4uODgwYjhjMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NtcC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zbXAuaApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaXJxcmV0dXJuLmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKQEAgLTI5LDE0ICszMCwzMiBAQAogI2luY2x1ZGUgPGFzbS9wZXJjcHUuaD4KIAogZXh0ZXJuIGludCBib290X2NwdWlkOworZXh0ZXJuIGludCBib290X2NwdV9jb3VudDsKIAogZXh0ZXJuIHZvaWQgY3B1X2RpZSh2b2lkKTsKIAogI2lmZGVmIENPTkZJR19TTVAKIAotZXh0ZXJuIHZvaWQgc21wX3NlbmRfZGVidWdnZXJfYnJlYWsoaW50IGNwdSk7Ci1leHRlcm4gdm9pZCBzbXBfbWVzc2FnZV9yZWN2KGludCk7CitzdHJ1Y3Qgc21wX29wc190IHsKKwl2b2lkICAoKm1lc3NhZ2VfcGFzcykoaW50IGNwdSwgaW50IG1zZyk7CisjaWZkZWYgQ09ORklHX1BQQ19TTVBfTVVYRURfSVBJCisJdm9pZCAgKCpjYXVzZV9pcGkpKGludCBjcHUsIHVuc2lnbmVkIGxvbmcgZGF0YSk7CisjZW5kaWYKKwlpbnQgICAoKnByb2JlKSh2b2lkKTsKKwlpbnQgICAoKmtpY2tfY3B1KShpbnQgbnIpOworCXZvaWQgICgqc2V0dXBfY3B1KShpbnQgbnIpOworCXZvaWQgICgqYnJpbmd1cF9kb25lKSh2b2lkKTsKKwl2b2lkICAoKnRha2VfdGltZWJhc2UpKHZvaWQpOworCXZvaWQgICgqZ2l2ZV90aW1lYmFzZSkodm9pZCk7CisJaW50ICAgKCpjcHVfZGlzYWJsZSkodm9pZCk7CisJdm9pZCAgKCpjcHVfZGllKSh1bnNpZ25lZCBpbnQgbnIpOworCWludCAgICgqY3B1X2Jvb3RhYmxlKSh1bnNpZ25lZCBpbnQgbnIpOworfTsKKworZXh0ZXJuIHZvaWQgc21wX3NlbmRfZGVidWdnZXJfYnJlYWsodm9pZCk7CiBleHRlcm4gdm9pZCBzdGFydF9zZWNvbmRhcnlfcmVzdW1lKHZvaWQpOworZXh0ZXJuIHZvaWQgX19kZXZpbml0IHNtcF9nZW5lcmljX2dpdmVfdGltZWJhc2Uodm9pZCk7CitleHRlcm4gdm9pZCBfX2RldmluaXQgc21wX2dlbmVyaWNfdGFrZV90aW1lYmFzZSh2b2lkKTsKIAogREVDTEFSRV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgY3B1X3B2cik7CiAKQEAgLTkzLDEzICsxMTIsMTYgQEAKICNkZWZpbmUgUFBDX01TR19DQUxMX0ZVTkNfU0lOR0xFCTIKICNkZWZpbmUgUFBDX01TR19ERUJVR0dFUl9CUkVBSyAgMwogCi0vKgotICogaXJxIGNvbnRyb2xsZXJzIHRoYXQgaGF2ZSBkZWRpY2F0ZWQgaXBpcyBwZXIgbWVzc2FnZSBhbmQgZG9uJ3QKLSAqIG5lZWQgYWRkaXRpb25hbCBjb2RlIGluIHRoZSBhY3Rpb24gaGFuZGxlciBtYXkgdXNlIHRoaXMKLSAqLworLyogZm9yIGlycSBjb250cm9sbGVycyB0aGF0IGhhdmUgZGVkaWNhdGVkIGlwaXMgcGVyIG1lc3NhZ2UgKDQpICovCiBleHRlcm4gaW50IHNtcF9yZXF1ZXN0X21lc3NhZ2VfaXBpKGludCB2aXJxLCBpbnQgbWVzc2FnZSk7CiBleHRlcm4gY29uc3QgY2hhciAqc21wX2lwaV9uYW1lW107CiAKKy8qIGZvciBpcnEgY29udHJvbGxlcnMgd2l0aCBvbmx5IGEgc2luZ2xlIGlwaSAqLworZXh0ZXJuIHZvaWQgc21wX211eGVkX2lwaV9zZXRfZGF0YShpbnQgY3B1LCB1bnNpZ25lZCBsb25nIGRhdGEpOworZXh0ZXJuIHZvaWQgc21wX211eGVkX2lwaV9tZXNzYWdlX3Bhc3MoaW50IGNwdSwgaW50IG1zZyk7CitleHRlcm4gdm9pZCBzbXBfbXV4ZWRfaXBpX3Jlc2VuZCh2b2lkKTsKK2V4dGVybiBpcnFyZXR1cm5fdCBzbXBfaXBpX2RlbXV4KHZvaWQpOworCiB2b2lkIHNtcF9pbml0X2lTZXJpZXModm9pZCk7CiB2b2lkIHNtcF9pbml0X3BTZXJpZXModm9pZCk7CiB2b2lkIHNtcF9pbml0X2NlbGwodm9pZCk7CkBAIC0xNDksNyArMTcxLDcgQEAKIAogZXh0ZXJuIGludCBzbXBfbXBpY19wcm9iZSh2b2lkKTsKIGV4dGVybiB2b2lkIHNtcF9tcGljX3NldHVwX2NwdShpbnQgY3B1KTsKLWV4dGVybiB2b2lkIHNtcF9nZW5lcmljX2tpY2tfY3B1KGludCBucik7CitleHRlcm4gaW50IHNtcF9nZW5lcmljX2tpY2tfY3B1KGludCBucik7CiAKIGV4dGVybiB2b2lkIHNtcF9nZW5lcmljX2dpdmVfdGltZWJhc2Uodm9pZCk7CiBleHRlcm4gdm9pZCBzbXBfZ2VuZXJpY190YWtlX3RpbWViYXNlKHZvaWQpOwpAQCAtMTY5LDYgKzE5MSw4IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBfX3NlY29uZGFyeV9ob2xkX2Fja25vd2xlZGdlOwogZXh0ZXJuIGNoYXIgX19zZWNvbmRhcnlfaG9sZDsKIAorZXh0ZXJuIGlycXJldHVybl90IGRlYnVnX2lwaV9hY3Rpb24oaW50IGlycSwgdm9pZCAqZGF0YSk7CisKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0YmwuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0YmwuaAppbmRleCA2MGY2NGIxLi44NDg5ZDM3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGJsLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RibC5oCkBAIC0zNTIsMyArMzUyLDQgQEAKIENPTVBBVF9TWVNfU1BVKG9wZW5fYnlfaGFuZGxlX2F0KQogQ09NUEFUX1NZU19TUFUoY2xvY2tfYWRqdGltZSkKIFNZU0NBTExfU1BVKHN5bmNmcykKK0NPTVBBVF9TWVNfU1BVKHNlbmRtbXNnKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RlbS5oCmluZGV4IDVlNDc0ZGQuLjJkYzU5NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0ZW0uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGVtLmgKQEAgLTIxOSw4ICsyMTksNiBAQAogZXh0ZXJuIGludCBpbml0X2Jvb3RtZW1fZG9uZTsJLyogc2V0IG9uY2UgYm9vdG1lbSBpcyBhdmFpbGFibGUgKi8KIGV4dGVybiBwaHlzX2FkZHJfdCBtZW1vcnlfbGltaXQ7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBrbGltaXQ7Ci0KLWV4dGVybiB2b2lkICphbGxvY19tYXliZV9ib290bWVtKHNpemVfdCBzaXplLCBnZnBfdCBtYXNrKTsKIGV4dGVybiB2b2lkICp6YWxsb2NfbWF5YmVfYm9vdG1lbShzaXplX3Qgc2l6ZSwgZ2ZwX3QgbWFzayk7CiAKIGV4dGVybiBpbnQgcG93ZXJzYXZlX25hcDsJLyogc2V0IGlmIG5hcCBtb2RlIGNhbiBiZSB1c2VkIGluIGlkbGUgbG9vcCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGxiZmx1c2guaAppbmRleCBkNTBhMzgwLi44MTE0M2ZjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGxiZmx1c2guaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGxiZmx1c2guaApAQCAtNzksNiArNzksOCBAQAogCiAjZWxpZiBkZWZpbmVkKENPTkZJR19QUENfU1REX01NVV82NCkKIAorI2RlZmluZSBNTVVfTk9fQ09OVEVYVAkJMAorCiAvKgogICogVExCIGZsdXNoaW5nIGZvciA2NC1iaXQgaGFzaC1NTVUgQ1BVcwogICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdWRiZy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VkYmcuaAppbmRleCAxMWFlNjk5Li41ODU4MGU5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdWRiZy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS91ZGJnLmgKQEAgLTUyLDYgKzUyLDcgQEAKIGV4dGVybiB2b2lkIF9faW5pdCB1ZGJnX2luaXRfNDB4X3JlYWxtb2RlKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19pbml0IHVkYmdfaW5pdF9jcG0odm9pZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgdWRiZ19pbml0X3VzYmdlY2tvKHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IHVkYmdfaW5pdF93c3Aodm9pZCk7CiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1VEQkdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VuaW5vcnRoLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdW5pbm9ydGguaAppbmRleCBhZTljODk5Li5kMTJiMTFkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdW5pbm9ydGguaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdW5pbm9ydGguaApAQCAtNjAsNyArNjAsNyBAQAogICoKICAqIE9idmlvdXNseSwgdGhlIEdBUlQgaXMgbm90IGNhY2hlIGNvaGVyZW50IGFuZCBzbyBhbnkgY2hhbmdlIHRvIGl0CiAgKiBtdXN0IGJlIGZsdXNoZWQgdG8gbWVtb3J5IChvciBtYXliZSBqdXN0IG1ha2UgdGhlIEdBUlQgc3BhY2Ugbm9uCi0gKiBjYWNoYWJsZSkuIEFHUCBtZW1vcnkgaXRzZWxmIGRvZXMndCBzZWVtIHRvIGJlIGNhY2hlIGNvaGVyZW50IG5laXRoZXIuCisgKiBjYWNoYWJsZSkuIEFHUCBtZW1vcnkgaXRzZWxmIGRvZXNuJ3Qgc2VlbSB0byBiZSBjYWNoZSBjb2hlcmVudCBuZWl0aGVyLgogICoKICAqIEluIG9yZGVyIHRvIGludmFsaWRhdGUgdGhlIEdBUlQgKHdoaWNoIGlzIHByb2JhYmx5IG5lY2Vzc2FyeSB0byBpbnZhbAogICogdGhlIGJyaWRnZSBpbnRlcm5hbCBUTEJzKSwgdGhlIGZvbGxvd2luZyBzZXF1ZW5jZSBoYXMgdG8gYmUgd3JpdHRlbiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCAzYzIxNTY0Li42ZDIzYzgxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0zNzEsMTAgKzM3MSwxMSBAQAogI2RlZmluZSBfX05SX29wZW5fYnlfaGFuZGxlX2F0CTM0NgogI2RlZmluZSBfX05SX2Nsb2NrX2FkanRpbWUJMzQ3CiAjZGVmaW5lIF9fTlJfc3luY2ZzCQkzNDgKKyNkZWZpbmUgX19OUl9zZW5kbW1zZwkJMzQ5CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNkZWZpbmUgX19OUl9zeXNjYWxscwkJMzQ5CisjZGVmaW5lIF9fTlJfc3lzY2FsbHMJCTM1MAogCiAjZGVmaW5lIF9fTlJfX2V4aXQgX19OUl9leGl0CiAjZGVmaW5lIE5SX3N5c2NhbGxzCV9fTlJfc3lzY2FsbHMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS93c3AuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS93c3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2RjODMwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3dzcC5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IDIwMTEgTWljaGFlbCBFbGxlcm1hbiwgSUJNIENvcnAuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX19BU01fUE9XRVJQQ19XU1BfSAorI2RlZmluZSBfX0FTTV9QT1dFUlBDX1dTUF9ICisKK2V4dGVybiBpbnQgd3NwX2dldF9jaGlwX2lkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pOworCisjZW5kaWYgLyogX19BU01fUE9XRVJQQ19XU1BfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3hpY3MuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS94aWNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE4M2E0MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS94aWNzLmgKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb21tb24gZGVmaW5pdGlvbnMgYWNjcm9zcyBhbGwgdmFyaWFudHMgb2YgSUNQIGFuZCBJQ1MgaW50ZXJydXB0CisgKiBjb250cm9sbGVycy4KKyAqLworCisjaWZuZGVmIF9YSUNTX0gKKyNkZWZpbmUgX1hJQ1NfSAorCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNkZWZpbmUgWElDU19JUEkJCTIKKyNkZWZpbmUgWElDU19JUlFfU1BVUklPVVMJMAorCisvKiBXYW50IGEgcHJpb3JpdHkgb3RoZXIgdGhhbiAwLiAgVmFyaW91cyBIVyBpc3N1ZXMgcmVxdWlyZSB0aGlzLiAqLworI2RlZmluZQlERUZBVUxUX1BSSU9SSVRZCTUKKworLyoKKyAqIE1hcmsgSVBJcyBhcyBoaWdoZXIgcHJpb3JpdHkgc28gd2UgY2FuIHRha2UgdGhlbSBpbnNpZGUgaW50ZXJydXB0cyB0aGF0CisgKiBhcmVudCBtYXJrZWQgSVJRRl9ESVNBQkxFRAorICovCisjZGVmaW5lIElQSV9QUklPUklUWQkJNAorCisvKiBUaGUgbGVhc3QgZmF2b3JlZCBwcmlvcml0eSAqLworI2RlZmluZSBMT1dFU1RfUFJJT1JJVFkJCTB4RkYKKworLyogVGhlIG51bWJlciBvZiBwcmlvcml0aWVzIGRlZmluZWQgYWJvdmUgKi8KKyNkZWZpbmUgTUFYX05VTV9QUklPUklUSUVTCTMKKworLyogTmF0aXZlIElDUCAqLworZXh0ZXJuIGludCBpY3BfbmF0aXZlX2luaXQodm9pZCk7CisKKy8qIFBBUFIgSUNQICovCitleHRlcm4gaW50IGljcF9odl9pbml0KHZvaWQpOworCisvKiBJQ1Agb3BzICovCitzdHJ1Y3QgaWNwX29wcyB7CisJdW5zaWduZWQgaW50ICgqZ2V0X2lycSkodm9pZCk7CisJdm9pZCAoKmVvaSkoc3RydWN0IGlycV9kYXRhICpkKTsKKwl2b2lkICgqc2V0X3ByaW9yaXR5KSh1bnNpZ25lZCBjaGFyIHByaW8pOworCXZvaWQgKCp0ZWFyZG93bl9jcHUpKHZvaWQpOworCXZvaWQgKCpmbHVzaF9pcGkpKHZvaWQpOworI2lmZGVmIENPTkZJR19TTVAKKwl2b2lkICgqY2F1c2VfaXBpKShpbnQgY3B1LCB1bnNpZ25lZCBsb25nIGRhdGEpOworCWlycV9oYW5kbGVyX3QgaXBpX2FjdGlvbjsKKyNlbmRpZgorfTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpY3Bfb3BzICppY3Bfb3BzOworCisvKiBOYXRpdmUgSUNTICovCitleHRlcm4gaW50IGljc19uYXRpdmVfaW5pdCh2b2lkKTsKKworLyogUlRBUyBJQ1MgKi8KK2V4dGVybiBpbnQgaWNzX3J0YXNfaW5pdCh2b2lkKTsKKworLyogSUNTIGluc3RhbmNlLCBob29rZWQgdXAgdG8gY2hpcF9kYXRhIG9mIGFuIGlycSAqLworc3RydWN0IGljcyB7CisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworCWludCAoKm1hcCkoc3RydWN0IGljcyAqaWNzLCB1bnNpZ25lZCBpbnQgdmlycSk7CisJdm9pZCAoKm1hc2tfdW5rbm93bikoc3RydWN0IGljcyAqaWNzLCB1bnNpZ25lZCBsb25nIHZlYyk7CisJbG9uZyAoKmdldF9zZXJ2ZXIpKHN0cnVjdCBpY3MgKmljcywgdW5zaWduZWQgbG9uZyB2ZWMpOworCWludCAoKmhvc3RfbWF0Y2gpKHN0cnVjdCBpY3MgKmljcywgc3RydWN0IGRldmljZV9ub2RlICpub2RlKTsKKwljaGFyIGRhdGFbXTsKK307CisKKy8qIENvbW1vbnMgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgeGljc19kZWZhdWx0X3NlcnZlcjsKK2V4dGVybiB1bnNpZ25lZCBpbnQgeGljc19kZWZhdWx0X2Rpc3RyaWJfc2VydmVyOworZXh0ZXJuIHVuc2lnbmVkIGludCB4aWNzX2ludGVycnVwdF9zZXJ2ZXJfc2l6ZTsKK2V4dGVybiBzdHJ1Y3QgaXJxX2hvc3QgKnhpY3NfaG9zdDsKKworc3RydWN0IHhpY3NfY3BwciB7CisJdW5zaWduZWQgY2hhciBzdGFja1tNQVhfTlVNX1BSSU9SSVRJRVNdOworCWludCBpbmRleDsKK307CisKK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgeGljc19jcHByLCB4aWNzX2NwcHIpOworCitzdGF0aWMgaW5saW5lIHZvaWQgeGljc19wdXNoX2NwcHIodW5zaWduZWQgaW50IHZlYykKK3sKKwlzdHJ1Y3QgeGljc19jcHByICpvc19jcHByID0gJl9fZ2V0X2NwdV92YXIoeGljc19jcHByKTsKKworCWlmIChXQVJOX09OKG9zX2NwcHItPmluZGV4ID49IE1BWF9OVU1fUFJJT1JJVElFUyAtIDEpKQorCQlyZXR1cm47CisKKwlpZiAodmVjID09IFhJQ1NfSVBJKQorCQlvc19jcHByLT5zdGFja1srK29zX2NwcHItPmluZGV4XSA9IElQSV9QUklPUklUWTsKKwllbHNlCisJCW9zX2NwcHItPnN0YWNrWysrb3NfY3Bwci0+aW5kZXhdID0gREVGQVVMVF9QUklPUklUWTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIHhpY3NfcG9wX2NwcHIodm9pZCkKK3sKKwlzdHJ1Y3QgeGljc19jcHByICpvc19jcHByID0gJl9fZ2V0X2NwdV92YXIoeGljc19jcHByKTsKKworCWlmIChXQVJOX09OKG9zX2NwcHItPmluZGV4IDwgMSkpCisJCXJldHVybiBMT1dFU1RfUFJJT1JJVFk7CisKKwlyZXR1cm4gb3NfY3Bwci0+c3RhY2tbLS1vc19jcHByLT5pbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB4aWNzX3NldF9iYXNlX2NwcHIodW5zaWduZWQgY2hhciBjcHByKQoreworCXN0cnVjdCB4aWNzX2NwcHIgKm9zX2NwcHIgPSAmX19nZXRfY3B1X3Zhcih4aWNzX2NwcHIpOworCisJLyogd2Ugb25seSByZWFsbHkgd2FudCB0byBzZXQgdGhlIHByaW9yaXR5IHdoZW4gdGhlcmUncworCSAqIGp1c3Qgb25lIGNwcHIgdmFsdWUgb24gdGhlIHN0YWNrCisJICovCisJV0FSTl9PTihvc19jcHByLT5pbmRleCAhPSAwKTsKKworCW9zX2NwcHItPnN0YWNrWzBdID0gY3BwcjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIHhpY3NfY3Bwcl90b3Aodm9pZCkKK3sKKwlzdHJ1Y3QgeGljc19jcHByICpvc19jcHByID0gJl9fZ2V0X2NwdV92YXIoeGljc19jcHByKTsKKwkKKwlyZXR1cm4gb3NfY3Bwci0+c3RhY2tbb3NfY3Bwci0+aW5kZXhdOworfQorCitERUNMQVJFX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQodW5zaWduZWQgbG9uZywgeGljc19pcGlfbWVzc2FnZSk7CisKK2V4dGVybiB2b2lkIHhpY3NfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHhpY3Nfc2V0dXBfY3B1KHZvaWQpOworZXh0ZXJuIHZvaWQgeGljc191cGRhdGVfaXJxX3NlcnZlcnModm9pZCk7CitleHRlcm4gdm9pZCB4aWNzX3NldF9jcHVfZ2lxKHVuc2lnbmVkIGludCBnc2VydmVyLCB1bnNpZ25lZCBpbnQgam9pbik7CitleHRlcm4gdm9pZCB4aWNzX21hc2tfdW5rbm93bl92ZWModW5zaWduZWQgaW50IHZlYyk7CitleHRlcm4gaXJxcmV0dXJuX3QgeGljc19pcGlfZGlzcGF0Y2goaW50IGNwdSk7CitleHRlcm4gaW50IHhpY3Nfc21wX3Byb2JlKHZvaWQpOworZXh0ZXJuIHZvaWQgeGljc19yZWdpc3Rlcl9pY3Moc3RydWN0IGljcyAqaWNzKTsKK2V4dGVybiB2b2lkIHhpY3NfdGVhcmRvd25fY3B1KHZvaWQpOworZXh0ZXJuIHZvaWQgeGljc19rZXhlY190ZWFyZG93bl9jcHUoaW50IHNlY29uZGFyeSk7CitleHRlcm4gdm9pZCB4aWNzX21pZ3JhdGVfaXJxc19hd2F5KHZvaWQpOworI2lmZGVmIENPTkZJR19TTVAKK2V4dGVybiBpbnQgeGljc19nZXRfaXJxX3NlcnZlcih1bnNpZ25lZCBpbnQgdmlycSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCisJCQkgICAgICAgdW5zaWduZWQgaW50IHN0cmljdF9jaGVjayk7CisjZWxzZQorI2RlZmluZSB4aWNzX2dldF9pcnFfc2VydmVyKHZpcnEsIGNwdW1hc2ssIHN0cmljdF9jaGVjaykgKHhpY3NfZGVmYXVsdF9zZXJ2ZXIpCisjZW5kaWYKKworCisjZW5kaWYgLyogX1hJQ1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggM2JiMmEzZS4uOWFhYjM2MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCkBAIC0zOCwxMSArMzgsMTQgQEAKIAkJCQkgICBwYWNhLm8gbnZyYW1fNjQubyBmaXJtd2FyZS5vCiBvYmotJChDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UKQkrPSBod19icmVha3BvaW50Lm8KIG9iai0kKENPTkZJR19QUENfQk9PSzNTXzY0KQkrPSBjcHVfc2V0dXBfcHBjOTcwLm8gY3B1X3NldHVwX3BhNnQubworb2JqLSQoQ09ORklHX1BQQ19CT09LM1NfNjQpCSs9IGNwdV9zZXR1cF9wb3dlcjcubwogb2JqNjQtJChDT05GSUdfUkVMT0NBVEFCTEUpCSs9IHJlbG9jXzY0Lm8KIG9iai0kKENPTkZJR19QUENfQk9PSzNFXzY0KQkrPSBleGNlcHRpb25zLTY0ZS5vIGlkbGVfYm9vazNlLm8KK29iai0kKENPTkZJR19QUENfQTIpCQkrPSBjcHVfc2V0dXBfYTIubwogb2JqLSQoQ09ORklHX1BQQzY0KQkJKz0gdmRzbzY0Lwogb2JqLSQoQ09ORklHX0FMVElWRUMpCQkrPSB2ZWNlbXUubwogb2JqLSQoQ09ORklHX1BQQ185NzBfTkFQKQkrPSBpZGxlX3Bvd2VyNC5vCitvYmotJChDT05GSUdfUFBDX1A3X05BUCkJKz0gaWRsZV9wb3dlcjcubwogb2JqLSQoQ09ORklHX1BQQ19PRikJCSs9IG9mX3BsYXRmb3JtLm8gcHJvbV9wYXJzZS5vCiBvYmotJChDT05GSUdfUFBDX0NMT0NLKQkJKz0gY2xvY2subwogcHJvY2ZzLXkJCQk6PSBwcm9jX3Bvd2VycGMubwpAQCAtNzUsNyArNzgsNiBAQAogb2JqLSQoQ09ORklHX1BQQ19CT09LM0VfNjQpCSs9IGRiZWxsLm8KIAogZXh0cmEteQkJCQk6PSBoZWFkXyQoQ09ORklHX1dPUkRfU0laRSkubwotZXh0cmEtJChDT05GSUdfUFBDX0JPT0szRV8zMikJOj0gaGVhZF9uZXdfYm9va2UubwogZXh0cmEtJChDT05GSUdfNDB4KQkJOj0gaGVhZF80MHgubwogZXh0cmEtJChDT05GSUdfNDR4KQkJOj0gaGVhZF80NHgubwogZXh0cmEtJChDT05GSUdfRlNMX0JPT0tFKQk6PSBoZWFkX2ZzbF9ib29rZS5vCkBAIC0xMDMsNiArMTA1LDggQEAKIG9iai0kKENPTkZJR19BVURJVCkJCSs9IGF1ZGl0Lm8KIG9iajY0LSQoQ09ORklHX0FVRElUKQkJKz0gY29tcGF0X2F1ZGl0Lm8KIAorb2JqLSQoQ09ORklHX1BQQ19JT19XT1JLQVJPVU5EUykJKz0gaW8td29ya2Fyb3VuZHMubworCiBvYmotJChDT05GSUdfRFlOQU1JQ19GVFJBQ0UpCSs9IGZ0cmFjZS5vCiBvYmotJChDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSKQkrPSBmdHJhY2Uubwogb2JqLSQoQ09ORklHX1BFUkZfRVZFTlRTKQkrPSBwZXJmX2NhbGxjaGFpbi5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggMjNlNmE5My4uNjg4NzY2MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtNzQsNiArNzQsNyBAQAogCURFRklORShBVURJVENPTlRFWFQsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgYXVkaXRfY29udGV4dCkpOwogCURFRklORShTSUdTRUdWLCBTSUdTRUdWKTsKIAlERUZJTkUoTk1JX01BU0ssIE5NSV9NQVNLKTsKKwlERUZJTkUoVEhSRUFEX0RTQ1IsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfc3RydWN0LCBkc2NyKSk7CiAjZWxzZQogCURFRklORShUSFJFQURfSU5GTywgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBzdGFjaykpOwogI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfYTIuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwX2EyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y4MThmZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwX2EyLlMKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiAgQTIgc3BlY2lmaWMgYXNzZW1ibHkgc3VwcG9ydCBjb2RlCisgKgorICogIENvcHlyaWdodCAyMDA5IEJlbiBIZXJyZW5zY2htaWR0LCBJQk0gQ29ycC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KKyNpbmNsdWRlIDxhc20vcHBjLW9wY29kZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vcmVnX2EyLmg+CisjaW5jbHVkZSA8YXNtL3JlZy5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgorCisvKgorICogRGlzYWJsZSB0aGRpZCBhbmQgY2xhc3MgZmllbGRzIGluIEVSQVRzIHRvIGJ1bXAgUElEIHRvIGZ1bGwgMTQgYml0cyBjYXBhY2l0eS4KKyAqIFRoaXMgYWxzbyBwcmV2ZW50cyBleHRlcm5hbCBMUElEIGFjY2Vzc2VzIGJ1dCB0aGF0IGlzbid0IGEgcHJvYmxlbSB3aGVuIG5vdCBhCisgKiBndWVzdC4gVW5kZXIgUFYsIHRoaXMgc2V0dGluZyB3aWxsIGJlIGlnbm9yZWQgYW5kIE1NVUNSIHdpbGwgcmV0dXJuIHRoZSByaWdodAorICogbnVtYmVyIG9mIFBJRCBiaXRzIHdlIGNhbiB1c2UuCisgKi8KKyNkZWZpbmUgTU1VQ1IxX0VYVEVORF9QSUQgXAorCShNTVVDUjFfSUNUSUQgfCBNTVVDUjFfSVRUSUQgfCBNTVVDUjFfRENUSUQgfCBcCisJIE1NVUNSMV9EVFRJRCB8IE1NVUNSMV9EQ0NEKQorCisvKgorICogVXNlIGV4dGVuZGVkIFBJRHMgaWYgZW5hYmxlZC4KKyAqIERvbid0IGNsZWFyIHRoZSBFUkFUcyBvbiBjb250ZXh0IHN5bmMgZXZlbnRzIGFuZCBlbmFibGUgSSAmIEQgTFJVLgorICogRW5hYmxlIEVSQVQgYmFjayBpbnZhbGlkYXRlIHdoZW4gdGxid2Ugb3ZlcndyaXRlcyBhbiBlbnRyeS4KKyAqLworI2RlZmluZSBJTklUSUFMX01NVUNSMSBcCisJKE1NVUNSMV9FWFRFTkRfUElEIHwgTU1VQ1IxX0NTSU5WX05FVkVSIHwgTU1VQ1IxX0lSUkUgfCBcCisJIE1NVUNSMV9EUlJFIHwgTU1VQ1IxX1RMQldFX0JJTlYpCisKK19HTE9CQUwoX19zZXR1cF9jcHVfYTIpCisJLyogU29tZSBvZiB0aGVzZSBhcmUgYWN0dWFsbHkgdGhyZWFkIGxvY2FsIGFuZCBzb21lIGFyZQorCSAqIGNvcmUgbG9jYWwgYnV0IGRvaW5nIGl0IGFsd2F5cyB3b24ndCBodXJ0CisJICovCisKKyNpZmRlZiBDT05GSUdfUFBDX1dTUF9DT1BSTworCS8qIE1ha2Ugc3VyZSBBQ09QIHN0YXJ0cyBvdXQgYXMgemVybyAqLworCWxpCXIzLDAKKwltdHNwciAgIFNQUk5fQUNPUCxyMworCisJLyogRW5hYmxlIGljc3d4IGluc3RydWN0aW9uICovCisJbWZzcHIgICByMyxTUFJOX0EyX0NDUjIKKwlvcmkgICAgIHIzLHIzLEEyX0NDUjJfRU5BQkxFX0lDU1dYCisJbXRzcHIgICBTUFJOX0EyX0NDUjIscjMKKworCS8qIFVubWFzayBhbGwgQ1RzIGluIEhBQ09QICovCisJbGkgICAgICByMywtMQorCW10c3ByICAgU1BSTl9IQUNPUCxyMworI2VuZGlmIC8qIENPTkZJR19QUENfV1NQX0NPUFJPICovCisKKwkvKiBFbmFibGUgZG9vcmJlbGwgKi8KKwltZnNwciAgIHIzLFNQUk5fQTJfQ0NSMgorCW9yaXMgICAgIHIzLHIzLEEyX0NDUjJfRU5BQkxFX1BDQGgKKwltdHNwciAgIFNQUk5fQTJfQ0NSMixyMworCWlzeW5jCisKKwkvKiBTZXR1cCBDQ1IwIHRvIGRpc2FibGUgcG93ZXIgc2F2aW5nIGZvciBub3cgYXMgaXQncyBidXN0ZWQKKwkgKiBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbnMuIFNldHVwIENDUjEgdG8gd2FrZSBvbgorCSAqIGludGVycnVwdHMgbm9ybWFsbHkgKHdlIHdyaXRlIHRoZSBkZWZhdWx0IHZhbHVlIGJ1dCB3aG8KKwkgKiBrbm93cyB3aGF0IEZXIG1heSBoYXZlIGNsb2JiZXJlZC4uLikKKwkgKi8KKwlsaQlyMywwCisJbXRzcHIJU1BSTl9BMl9DQ1IwLCByMworCUxPQURfUkVHX0lNTUVESUFURShyMywweDBmMGYwZjBmKQorCW10c3ByCVNQUk5fQTJfQ0NSMSwgcjMKKworCS8qIEluaXRpYWxpc2UgTU1VQ1IxICovCisJbGlzCXIzLElOSVRJQUxfTU1VQ1IxQGgKKwlvcmkJcjMscjMsSU5JVElBTF9NTVVDUjFAbAorCW10c3ByCVNQUk5fTU1VQ1IxLHIzCisKKwkvKiBTZXQgTU1VQ1IyIHRvIGVuYWJsZSA0SywgNjRLLCAxTSwgMTZNIGFuZCAxRyBwYWdlcyAqLworCUxPQURfUkVHX0lNTUVESUFURShyMywgMHgwMDBhNzUzMSkKKwltdHNwcglTUFJOX01NVUNSMixyMworCisJLyogU2V0IE1NVUNSMyB0byB3cml0ZSBhbGwgdGhpZHMgYml0IHRvIHRoZSBUTEIgKi8KKwlMT0FEX1JFR19JTU1FRElBVEUocjMsIDB4MDAwMDAwMGYpCisJbXRzcHIJU1BSTl9NTVVDUjMscjMKKworCS8qIERvbid0IGRvIEVSQVQgc3R1ZmYgaWYgcnVubmluZyBndWVzdCBtb2RlICovCisJbWZtc3IJcjMKKwlhbmRpcy4JcjAscjMsTVNSX0dTQGgKKwlibmUJMWYKKworCS8qIE5vdyBzZXQgdGhlIEktRVJBVCB3YXRlcm1hcmsgdG8gMTUgKi8KKwlsaXMJcjQsKE1NVUNSMF9UTEJTRUxfSXxNTVVDUjBfRUNMKUBoCisJbXRzcHIJU1BSTl9NTVVDUjAsIHI0CisJbGkJcjQsQTJfSUVSQVRfU0laRS0xCisJUFBDX0VSQVRXRShyNCxyNCwzKQorCisJLyogTm93IHNldCB0aGUgRC1FUkFUIHdhdGVybWFyayB0byAzMSAqLworCWxpcwlyNCwoTU1VQ1IwX1RMQlNFTF9EfE1NVUNSMF9FQ0wpQGgKKwltdHNwcglTUFJOX01NVUNSMCwgcjQKKwlsaQlyNCxBMl9ERVJBVF9TSVpFLTEKKwlQUENfRVJBVFdFKHI0LHI0LDMpCisKKwkvKiBBbmQgaW52YWxpZGF0ZSB0aGUgYmVhc3QganVzdCBpbiBjYXNlLiBUaGF0IHdvbid0IGdldCByaWQgb2YKKwkgKiBhIGJvbHRlZCBlbnRyeSB0aG91Z2ggaXQgd2lsbCBiZSBpbiBMUlUgYW5kIHNvIHdpbGwgZ28gYXdheSBldmVudHVhbGx5CisJICogYnV0IGxldCdzIG5vdCBib3RoZXIgZm9yIG5vdworCSAqLworCVBQQ19FUkFUSUxYKDAsMCwwKQorMToKKwlibHIKKworX0dMT0JBTChfX3Jlc3RvcmVfY3B1X2EyKQorCWIJX19zZXR1cF9jcHVfYTIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwX2ZzbF9ib29rZS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfZnNsX2Jvb2tlLlMKaW5kZXggOTEzNjExMS4uODA1M2RiMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfZnNsX2Jvb2tlLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfZnNsX2Jvb2tlLlMKQEAgLTg4LDYgKzg4LDkgQEAKIAlibAlfX2U1MDBfZGNhY2hlX3NldHVwCiAjaWZkZWYgQ09ORklHX1BQQ19CT09LM0VfNjQKIAlibAkuX19zZXR1cF9iYXNlX2l2b3JzCisJYmwJLnNldHVwX3BlcmZtb25faXZvcgorCWJsCS5zZXR1cF9kb29yYmVsbF9pdm9ycworCWJsCS5zZXR1cF9laHZfaXZvcnMKICNlbHNlCiAJYmwJX19zZXR1cF9lNTAwbWNfaXZvcnMKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfcG93ZXI3LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF9wb3dlcjcuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjlhOTNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfcG93ZXI3LlMKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBsb3cgbGV2ZWwgQ1BVIHNldHVwIGZ1bmN0aW9ucy4KKyAqICAgIENvcHlyaWdodCAoQykgMjAwMyBCZW5qYW1pbiBIZXJyZW5zY2htaWR0IChiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmcpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CisKKy8qIEVudHJ5OiByMyA9IGNyYXAsIHI0ID0gcHRyIHRvIGNwdXRhYmxlIGVudHJ5CisgKgorICogTm90ZSB0aGF0IHdlIGNhbiBiZSBjYWxsZWQgdHdpY2UgZm9yIHBzZXVkby1QVlJzCisgKi8KK19HTE9CQUwoX19zZXR1cF9jcHVfcG93ZXI3KQorCW1mbHIJcjExCisJYmwJX19pbml0X2h2bW9kZV8yMDYKKwltdGxyCXIxMQorCWJlcWxyCisJbGkJcjAsMAorCW10c3ByCVNQUk5fTFBJRCxyMAorCWJsCV9faW5pdF9MUENSCisJYmwJX19pbml0X1RMQgorCW10bHIJcjExCisJYmxyCisKK19HTE9CQUwoX19yZXN0b3JlX2NwdV9wb3dlcjcpCisJbWZscglyMTEKKwltZm1zcglyMworCXJsZGljbC4JcjAscjMsNCw2MworCWJlcWxyCisJbGkJcjAsMAorCW10c3ByCVNQUk5fTFBJRCxyMAorCWJsCV9faW5pdF9MUENSCisJYmwJX19pbml0X1RMQgorCW10bHIJcjExCisJYmxyCisKK19faW5pdF9odm1vZGVfMjA2OgorCS8qIERpc2FibGUgQ1BVX0ZUUl9IVk1PREVfMjA2IGFuZCBleGl0IGlmIE1TUjpIViBpcyBub3Qgc2V0ICovCisJbWZtc3IJcjMKKwlybGRpY2wuCXIwLHIzLDQsNjMKKwlibmVscgorCWxkCXI1LENQVV9TUEVDX0ZFQVRVUkVTKHI0KQorCUxPQURfUkVHX0lNTUVESUFURShyNixDUFVfRlRSX0hWTU9ERV8yMDYpCisJeG9yCXI1LHI1LHI2CisJc3RkCXI1LENQVV9TUEVDX0ZFQVRVUkVTKHI0KQorCWJscgorCitfX2luaXRfTFBDUjoKKwkvKiBTZXR1cCBhIHNhbmUgTFBDUjoKKwkgKgorCSAqICAgTFBFUyA9IDBiMDEgKEhTUlIwLzEgdXNlZCBmb3IgMHg1MDApCisJICogICBQRUNFID0gMGIxMTEKKwkgKiAgIERQRkQgPSA0CisJICoKKwkgKiBPdGhlciBiaXRzIHVudG91Y2hlZCBmb3Igbm93CisJICovCisJbWZzcHIJcjMsU1BSTl9MUENSCisJb3JpCXIzLHIzLChMUENSX0xQRVMwfExQQ1JfTFBFUzEpCisJeG9yaQlyMyxyMywgTFBDUl9MUEVTMAorCW9yaQlyMyxyMywoTFBDUl9QRUNFMHxMUENSX1BFQ0UxfExQQ1JfUEVDRTIpCisJbGkJcjUsNworCXNsZGkJcjUscjUsTFBDUl9EUEZEX1NICisJYW5kYwlyMyxyMyxyNQorCWxpCXI1LDQKKwlzbGRpCXI1LHI1LExQQ1JfRFBGRF9TSAorCW9yCXIzLHIzLHI1CisJbXRzcHIJU1BSTl9MUENSLHIzCisJaXN5bmMKKwlibHIKKworX19pbml0X1RMQjoKKwkvKiBDbGVhciB0aGUgVExCICovCisJbGkJcjYsMTI4CisJbXRjdHIJcjYKKwlsaQlyNywweGMwMAkvKiBJUyBmaWVsZCA9IDBiMTEgKi8KKwlwdGVzeW5jCisyOgl0bGJpZWwJcjcKKwlhZGRpCXI3LHI3LDB4MTAwMAorCWJkbnoJMmIKKwlwdGVzeW5jCisxOglibHIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwppbmRleCBiOTYwMmVlLi4zNGQyNzIyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCkBAIC02MiwxMCArNjIsMTIgQEAKIGV4dGVybiB2b2lkIF9fc2V0dXBfY3B1X3BwYzk3MCh1bnNpZ25lZCBsb25nIG9mZnNldCwgc3RydWN0IGNwdV9zcGVjKiBzcGVjKTsKIGV4dGVybiB2b2lkIF9fc2V0dXBfY3B1X3BwYzk3ME1QKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdHJ1Y3QgY3B1X3NwZWMqIHNwZWMpOwogZXh0ZXJuIHZvaWQgX19zZXR1cF9jcHVfcGE2dCh1bnNpZ25lZCBsb25nIG9mZnNldCwgc3RydWN0IGNwdV9zcGVjKiBzcGVjKTsKK2V4dGVybiB2b2lkIF9fc2V0dXBfY3B1X2EyKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdHJ1Y3QgY3B1X3NwZWMqIHNwZWMpOwogZXh0ZXJuIHZvaWQgX19yZXN0b3JlX2NwdV9wYTZ0KHZvaWQpOwogZXh0ZXJuIHZvaWQgX19yZXN0b3JlX2NwdV9wcGM5NzAodm9pZCk7CiBleHRlcm4gdm9pZCBfX3NldHVwX2NwdV9wb3dlcjcodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CiBleHRlcm4gdm9pZCBfX3Jlc3RvcmVfY3B1X3Bvd2VyNyh2b2lkKTsKK2V4dGVybiB2b2lkIF9fcmVzdG9yZV9jcHVfYTIodm9pZCk7CiAjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCiAjaWYgZGVmaW5lZChDT05GSUdfRTUwMCkKIGV4dGVybiB2b2lkIF9fc2V0dXBfY3B1X2U1NTAwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdHJ1Y3QgY3B1X3NwZWMqIHNwZWMpOwpAQCAtMTk5LDcgKzIwMSw3IEBACiAJCS5jcHVfbmFtZQkJPSAiUE9XRVI0IChncCkiLAogCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX1BPV0VSNCwKIAkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUE9XRVI0LAotCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfSFBURV9UQUJMRSwKKwkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSU19QT1dFUjQsCiAJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAogCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLm51bV9wbWNzCQk9IDgsCkBAIC0yMTQsNyArMjE2LDcgQEAKIAkJLmNwdV9uYW1lCQk9ICJQT1dFUjQrIChncSkiLAogCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX1BPV0VSNCwKIAkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUE9XRVI0LAotCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfSFBURV9UQUJMRSwKKwkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSU19QT1dFUjQsCiAJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAogCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLm51bV9wbWNzCQk9IDgsCkBAIC0yMzAsNyArMjMyLDcgQEAKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19QUEM5NzAsCiAJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BPV0VSNCB8CiAJCQlQUENfRkVBVFVSRV9IQVNfQUxUSVZFQ19DT01QLAotCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfSFBURV9UQUJMRSwKKwkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSU19QUEM5NzAsCiAJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAogCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLm51bV9wbWNzCQk9IDgsCkBAIC0yNDgsNyArMjUwLDcgQEAKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19QUEM5NzAsCiAJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BPV0VSNCB8CiAJCQlQUENfRkVBVFVSRV9IQVNfQUxUSVZFQ19DT01QLAotCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfSFBURV9UQUJMRSwKKwkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSU19QUEM5NzAsCiAJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAogCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLm51bV9wbWNzCQk9IDgsCkBAIC0yODQsNyArMjg2LDcgQEAKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19QUEM5NzAsCiAJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BPV0VSNCB8CiAJCQlQUENfRkVBVFVSRV9IQVNfQUxUSVZFQ19DT01QLAotCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfSFBURV9UQUJMRSwKKwkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSU19QUEM5NzAsCiAJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAogCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLm51bV9wbWNzCQk9IDgsCkBAIC0zMDIsNyArMzA0LDcgQEAKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19QUEM5NzAsCiAJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BPV0VSNCB8CiAJCQlQUENfRkVBVFVSRV9IQVNfQUxUSVZFQ19DT01QLAotCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfSFBURV9UQUJMRSwKKwkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSU19QUEM5NzAsCiAJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAogCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLm51bV9wbWNzCQk9IDgsCkBAIC0zMTgsNyArMzIwLDcgQEAKIAkJLmNwdV9uYW1lCQk9ICJQT1dFUjUgKGdyKSIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfUE9XRVI1LAogCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QT1dFUjUsCi0JCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9IUFRFX1RBQkxFLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJTX1BPV0VSNSwKIAkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAogCQkubnVtX3BtY3MJCT0gNiwKQEAgLTMzOCw3ICszNDAsNyBAQAogCQkuY3B1X25hbWUJCT0gIlBPV0VSNSsgKGdzKSIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfUE9XRVI1LAogCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QT1dFUjVfUExVUywKLQkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX0hQVEVfVEFCTEUsCisJCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUlNfUE9XRVI1LAogCQkuaWNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5udW1fcG1jcwkJPSA2LApAQCAtMzU0LDcgKzM1Niw3IEBACiAJCS5jcHVfbmFtZQkJPSAiUE9XRVI1KyAoZ3MpIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19QT1dFUjUsCiAJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BPV0VSNV9QTFVTLAotCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfSFBURV9UQUJMRSwKKwkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSU19QT1dFUjUsCiAJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAogCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLm51bV9wbWNzCQk9IDYsCkBAIC0zNzEsNyArMzczLDcgQEAKIAkJLmNwdV9uYW1lCQk9ICJQT1dFUjUrIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19QT1dFUjUsCiAJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BPV0VSNV9QTFVTLAotCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfSFBURV9UQUJMRSwKKwkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSU19QT1dFUjUsCiAJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAogCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLm9wcm9maWxlX2NwdV90eXBlCT0gInBwYzY0L2libS1jb21wYXQtdjEiLApAQCAtMzg1LDcgKzM4Nyw3IEBACiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfUE9XRVI2LAogCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QT1dFUjYgfAogCQkJUFBDX0ZFQVRVUkVfUE9XRVI2X0VYVCwKLQkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX0hQVEVfVEFCTEUsCisJCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUlNfUE9XRVI2LAogCQkuaWNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5udW1fcG1jcwkJPSA2LApAQCAtNDA0LDcgKzQwNiw3IEBACiAJCS5jcHVfbmFtZQkJPSAiUE9XRVI2IChhcmNoaXRlY3RlZCkiLAogCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX1BPV0VSNiwKIAkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUE9XRVI2LAotCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfSFBURV9UQUJMRSwKKwkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSU19QT1dFUjYsCiAJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAogCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLm9wcm9maWxlX2NwdV90eXBlCT0gInBwYzY0L2libS1jb21wYXQtdjEiLApAQCAtNDE3LDEyICs0MTksMTMgQEAKIAkJLmNwdV9uYW1lCQk9ICJQT1dFUjcgKGFyY2hpdGVjdGVkKSIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfUE9XRVI3LAogCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QT1dFUjcsCi0JCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9IUFRFX1RBQkxFIHwKLQkJCU1NVV9GVFJfVExCSUVfMjA2LAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJTX1BPV0VSNywKIAkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAogCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfUE9XRVI0LAogCQkub3Byb2ZpbGVfY3B1X3R5cGUJPSAicHBjNjQvaWJtLWNvbXBhdC12MSIsCisJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfcG93ZXI3LAorCQkuY3B1X3Jlc3RvcmUJCT0gX19yZXN0b3JlX2NwdV9wb3dlcjcsCiAJCS5wbGF0Zm9ybQkJPSAicG93ZXI3IiwKIAl9LAogCXsJLyogUG93ZXI3ICovCkBAIC00MzEsMTQgKzQzNCwxNSBAQAogCQkuY3B1X25hbWUJCT0gIlBPV0VSNyAocmF3KSIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfUE9XRVI3LAogCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QT1dFUjcsCi0JCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9IUFRFX1RBQkxFIHwKLQkJCU1NVV9GVFJfVExCSUVfMjA2LAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJTX1BPV0VSNywKIAkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAogCQkubnVtX3BtY3MJCT0gNiwKIAkJLnBtY190eXBlCQk9IFBQQ19QTUNfSUJNLAogCQkub3Byb2ZpbGVfY3B1X3R5cGUJPSAicHBjNjQvcG93ZXI3IiwKIAkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX1BPV0VSNCwKKwkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV9wb3dlcjcsCisJCS5jcHVfcmVzdG9yZQkJPSBfX3Jlc3RvcmVfY3B1X3Bvd2VyNywKIAkJLnBsYXRmb3JtCQk9ICJwb3dlcjciLAogCX0sCiAJewkvKiBQb3dlcjcrICovCkBAIC00NDcsMTQgKzQ1MSwxNSBAQAogCQkuY3B1X25hbWUJCT0gIlBPV0VSNysgKHJhdykiLAogCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX1BPV0VSNywKIAkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUE9XRVI3LAotCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfSFBURV9UQUJMRSB8Ci0JCQlNTVVfRlRSX1RMQklFXzIwNiwKKwkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSU19QT1dFUjcsCiAJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAogCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLm51bV9wbWNzCQk9IDYsCiAJCS5wbWNfdHlwZQkJPSBQUENfUE1DX0lCTSwKIAkJLm9wcm9maWxlX2NwdV90eXBlCT0gInBwYzY0L3Bvd2VyNyIsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9QT1dFUjQsCisJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfcG93ZXI3LAorCQkuY3B1X3Jlc3RvcmUJCT0gX19yZXN0b3JlX2NwdV9wb3dlcjcsCiAJCS5wbGF0Zm9ybQkJPSAicG93ZXI3KyIsCiAJfSwKIAl7CS8qIENlbGwgQnJvYWRiYW5kIEVuZ2luZSAqLwpAQCAtNDY1LDcgKzQ3MCw3IEBACiAJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BQQzY0IHwKIAkJCVBQQ19GRUFUVVJFX0NFTEwgfCBQUENfRkVBVFVSRV9IQVNfQUxUSVZFQ19DT01QIHwKIAkJCVBQQ19GRUFUVVJFX1NNVCwKLQkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX0hQVEVfVEFCTEUsCisJCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUlNfQ0VMTCwKIAkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAogCQkubnVtX3BtY3MJCT0gNCwKQEAgLTQ4MCw3ICs0ODUsNyBAQAogCQkuY3B1X25hbWUJCT0gIlBBNlQiLAogCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX1BBNlQsCiAJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BBNlQsCi0JCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9IUFRFX1RBQkxFLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJTX1BBNlQsCiAJCS5pY2FjaGVfYnNpemUJCT0gNjQsCiAJCS5kY2FjaGVfYnNpemUJCT0gNjQsCiAJCS5udW1fcG1jcwkJPSA2LApAQCAtNDk3LDcgKzUwMiw3IEBACiAJCS5jcHVfbmFtZQkJPSAiUE9XRVI0IChjb21wYXRpYmxlKSIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfQ09NUEFUSUJMRSwKIAkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUFBDNjQsCi0JCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9IUFRFX1RBQkxFLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJTX0RFRkFVTFRfSFBURV9BUkNIX1YyLAogCQkuaWNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5udW1fcG1jcwkJPSA2LApAQCAtMjAwNSw3ICsyMDEwLDIyIEBACiAjZW5kaWYgLyogQ09ORklHX1BQQzMyICovCiAjZW5kaWYgLyogQ09ORklHX0U1MDAgKi8KIAotI2lmZGVmIENPTkZJR19QUENfQk9PSzNFXzY0CisjaWZkZWYgQ09ORklHX1BQQ19BMgorCXsJLyogU3RhbmRhcmQgQTIgKD49IEREMikgKyBGUFUgY29yZSAqLworCQkucHZyX21hc2sJCT0gMHhmZmZmMDAwMCwKKwkJLnB2cl92YWx1ZQkJPSAweDAwNDgwMDAwLAorCQkuY3B1X25hbWUJCT0gIkEyICg+PSBERDIpIiwKKwkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19BMiwKKwkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUFBDNjQsCisJCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUlNfQTIsCisJCS5pY2FjaGVfYnNpemUJCT0gNjQsCisJCS5kY2FjaGVfYnNpemUJCT0gNjQsCisJCS5udW1fcG1jcwkJPSAwLAorCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1X2EyLAorCQkuY3B1X3Jlc3RvcmUJCT0gX19yZXN0b3JlX2NwdV9hMiwKKwkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAorCQkucGxhdGZvcm0JCT0gInBwY2EyIiwKKwl9LAogCXsJLyogVGhpcyBpcyBhIGRlZmF1bHQgZW50cnkgdG8gZ2V0IGdvaW5nLCB0byBiZSByZXBsYWNlZCBieQogCQkgKiBhIHJlYWwgb25lIGF0IHNvbWUgc3RhZ2UKIAkJICovCkBAIC0yMDI2LDcgKzIwNDYsNyBAQAogCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2dlbmVyaWMsCiAJCS5wbGF0Zm9ybQkJPSAicG93ZXI2IiwKIAl9LAotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX1BQQ19BMiAqLwogfTsKIAogc3RhdGljIHN0cnVjdCBjcHVfc3BlYyB0aGVfY3B1X3NwZWM7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoLmMKaW5kZXggNWI1ZTFmMC4uNGU2ZWU5NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2guYwpAQCAtNjQsOSArNjQsOSBAQAogCQlyZXR1cm47CiAKIAloYXJkX2lycV9kaXNhYmxlKCk7Ci0JaWYgKCFjcHVfaXNzZXQoY3B1LCBjcHVzX2luX2NyYXNoKSkKKwlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCAmY3B1c19pbl9jcmFzaCkpCiAJCWNyYXNoX3NhdmVfY3B1KHJlZ3MsIGNwdSk7Ci0JY3B1X3NldChjcHUsIGNwdXNfaW5fY3Jhc2gpOworCWNwdW1hc2tfc2V0X2NwdShjcHUsICZjcHVzX2luX2NyYXNoKTsKIAogCS8qCiAJICogRW50ZXJlZCB2aWEgc29mdC1yZXNldCAtIGNvdWxkIGJlIHRoZSBrZHVtcApAQCAtNzcsOCArNzcsOCBAQAogCSAqIFRlbGwgdGhlIGtleGVjIENQVSB0aGF0IGVudGVyZWQgdmlhIHNvZnQtcmVzZXQgYW5kIHJlYWR5CiAJICogdG8gZ28gZG93bi4KIAkgKi8KLQlpZiAoY3B1X2lzc2V0KGNwdSwgY3B1c19pbl9zcikpIHsKLQkJY3B1X2NsZWFyKGNwdSwgY3B1c19pbl9zcik7CisJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCAmY3B1c19pbl9zcikpIHsKKwkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCAmY3B1c19pbl9zcik7CiAJCWF0b21pY19pbmMoJmVudGVyX29uX3NvZnRfcmVzZXQpOwogCX0KIApAQCAtODcsNyArODcsNyBAQAogCSAqIFRoaXMgYmFycmllciBpcyBuZWVkZWQgdG8gbWFrZSBzdXJlIHRoYXQgYWxsIENQVXMgYXJlIHN0b3BwZWQuCiAJICogSWYgbm90LCBzb2Z0LXJlc2V0IHdpbGwgYmUgaW52b2tlZCB0byBicmluZyBvdGhlciBDUFVzLgogCSAqLwotCXdoaWxlICghY3B1X2lzc2V0KGNyYXNoaW5nX2NwdSwgY3B1c19pbl9jcmFzaCkpCisJd2hpbGUgKCFjcHVtYXNrX3Rlc3RfY3B1KGNyYXNoaW5nX2NwdSwgJmNwdXNfaW5fY3Jhc2gpKQogCQljcHVfcmVsYXgoKTsKIAogCWlmIChwcGNfbWQua2V4ZWNfY3B1X2Rvd24pCkBAIC0xMDksNyArMTA5LDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgbmNwdXMgPSBudW1fb25saW5lX2NwdXMoKSAtIDE7LyogRXhjbHVkaW5nIHRoZSBwYW5pYyBjcHUgKi8KIAotCWNwdV9jbGVhcihjcHUsIGNwdXNfaW5fc3IpOworCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgJmNwdXNfaW5fc3IpOwogCXdoaWxlIChhdG9taWNfcmVhZCgmZW50ZXJfb25fc29mdF9yZXNldCkgIT0gbmNwdXMpCiAJCWNwdV9yZWxheCgpOwogfQpAQCAtMTMyLDcgKzEzMiw3IEBACiAJICovCiAJcHJpbnRrKEtFUk5fRU1FUkcgIlNlbmRpbmcgSVBJIHRvIG90aGVyIGNwdXMuLi5cbiIpOwogCW1zZWNzID0gMTAwMDA7Ci0Jd2hpbGUgKChjcHVzX3dlaWdodChjcHVzX2luX2NyYXNoKSA8IG5jcHVzKSAmJiAoLS1tc2VjcyA+IDApKSB7CisJd2hpbGUgKChjcHVtYXNrX3dlaWdodCgmY3B1c19pbl9jcmFzaCkgPCBuY3B1cykgJiYgKC0tbXNlY3MgPiAwKSkgewogCQljcHVfcmVsYXgoKTsKIAkJbWRlbGF5KDEpOwogCX0KQEAgLTE0NCw1MiArMTQ0LDI0IEBACiAJICogdXNlciB0byBkbyBzb2Z0IHJlc2V0IHN1Y2ggdGhhdCB3ZSBnZXQgYWxsLgogCSAqIFNvZnQtcmVzZXQgd2lsbCBiZSB1c2VkIHVudGlsIGJldHRlciBtZWNoYW5pc20gaXMgaW1wbGVtZW50ZWQuCiAJICovCi0JaWYgKGNwdXNfd2VpZ2h0KGNwdXNfaW5fY3Jhc2gpIDwgbmNwdXMpIHsKKwlpZiAoY3B1bWFza193ZWlnaHQoJmNwdXNfaW5fY3Jhc2gpIDwgbmNwdXMpIHsKIAkJcHJpbnRrKEtFUk5fRU1FUkcgImRvbmUgd2FpdGluZzogJWQgY3B1KHMpIG5vdCByZXNwb25kaW5nXG4iLAotCQkJbmNwdXMgLSBjcHVzX3dlaWdodChjcHVzX2luX2NyYXNoKSk7CisJCQluY3B1cyAtIGNwdW1hc2tfd2VpZ2h0KCZjcHVzX2luX2NyYXNoKSk7CiAJCXByaW50ayhLRVJOX0VNRVJHICJBY3RpdmF0ZSBzb2Z0LXJlc2V0IHRvIHN0b3Agb3RoZXIgY3B1KHMpXG4iKTsKLQkJY3B1c19pbl9zciA9IENQVV9NQVNLX05PTkU7CisJCWNwdW1hc2tfY2xlYXIoJmNwdXNfaW5fc3IpOwogCQlhdG9taWNfc2V0KCZlbnRlcl9vbl9zb2Z0X3Jlc2V0LCAwKTsKLQkJd2hpbGUgKGNwdXNfd2VpZ2h0KGNwdXNfaW5fY3Jhc2gpIDwgbmNwdXMpCisJCXdoaWxlIChjcHVtYXNrX3dlaWdodCgmY3B1c19pbl9jcmFzaCkgPCBuY3B1cykKIAkJCWNwdV9yZWxheCgpOwogCX0KIAkvKgogCSAqIE1ha2Ugc3VyZSBhbGwgQ1BVcyBhcmUgZW50ZXJlZCB2aWEgc29mdC1yZXNldCBpZiB0aGUga2R1bXAgaXMKIAkgKiBpbnZva2VkIHVzaW5nIHNvZnQtcmVzZXQuCiAJICovCi0JaWYgKGNwdV9pc3NldChjcHUsIGNwdXNfaW5fc3IpKQorCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgJmNwdXNfaW5fc3IpKQogCQljcmFzaF9zb2Z0X3Jlc2V0X2NoZWNrKGNwdSk7CiAJLyogTGVhdmUgdGhlIElQSSBjYWxsYmFjayBzZXQgKi8KIH0KIAotLyogd2FpdCBmb3IgYWxsIHRoZSBDUFVzIHRvIGhpdCByZWFsIG1vZGUgYnV0IHRpbWVvdXQgaWYgdGhleSBkb24ndCBjb21lIGluICovCi0jaWZkZWYgQ09ORklHX1BQQ19TVERfTU1VXzY0Ci1zdGF0aWMgdm9pZCBjcmFzaF9rZXhlY193YWl0X3JlYWxtb2RlKGludCBjcHUpCi17Ci0JdW5zaWduZWQgaW50IG1zZWNzOwotCWludCBpOwotCi0JbXNlY3MgPSAxMDAwMDsKLQlmb3IgKGk9MDsgaSA8IE5SX0NQVVMgJiYgbXNlY3MgPiAwOyBpKyspIHsKLQkJaWYgKGkgPT0gY3B1KQotCQkJY29udGludWU7Ci0KLQkJd2hpbGUgKHBhY2FbaV0ua2V4ZWNfc3RhdGUgPCBLRVhFQ19TVEFURV9SRUFMX01PREUpIHsKLQkJCWJhcnJpZXIoKTsKLQkJCWlmICghY3B1X3Bvc3NpYmxlKGkpKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAoIWNwdV9vbmxpbmUoaSkpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJCW1zZWNzLS07Ci0JCQltZGVsYXkoMSk7Ci0JCX0KLQl9Ci0JbWIoKTsKLX0KLSNlbmRpZgkvKiBDT05GSUdfUFBDX1NURF9NTVVfNjQgKi8KLQogLyoKICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgc2Vjb25kYXJ5IGNwdXMgb3IgYnkga2V4ZWMgY3B1CiAgKiBpZiBzb2Z0LXJlc2V0IGlzIGFjdGl2YXRlZCB0byBzdG9wIHNvbWUgQ1BVcy4KQEAgLTIxMCw3ICsxODIsNyBAQAogCQkJICogZXhpdGVkIHVzaW5nICd4JyhleGl0IGFuZCByZWNvdmVyKSBvcgogCQkJICoga2V4ZWNfc2hvdWxkX2NyYXNoKCkgZmFpbGVkIGZvciBhbGwgcnVubmluZyB0YXNrcy4KIAkJCSAqLwotCQkJY3B1X2NsZWFyKGNwdSwgY3B1c19pbl9zcik7CisJCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsICZjcHVzX2luX3NyKTsKIAkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJCXJldHVybjsKIAkJfQpAQCAtMjI0LDcgKzE5Niw3IEBACiAJCSAqIHRoZW4gc3RhcnQga2V4ZWMgYm9vdC4KIAkJICovCiAJCWNyYXNoX3NvZnRfcmVzZXRfY2hlY2soY3B1KTsKLQkJY3B1X3NldChjcmFzaGluZ19jcHUsIGNwdXNfaW5fY3Jhc2gpOworCQljcHVtYXNrX3NldF9jcHUoY3Jhc2hpbmdfY3B1LCAmY3B1c19pbl9jcmFzaCk7CiAJCWlmIChwcGNfbWQua2V4ZWNfY3B1X2Rvd24pCiAJCQlwcGNfbWQua2V4ZWNfY3B1X2Rvd24oMSwgMCk7CiAJCW1hY2hpbmVfa2V4ZWMoa2V4ZWNfY3Jhc2hfaW1hZ2UpOwpAQCAtMjM0LDcgKzIwNiw2IEBACiB9CiAKICNlbHNlCS8qICEgQ09ORklHX1NNUCAqLwotc3RhdGljIGlubGluZSB2b2lkIGNyYXNoX2tleGVjX3dhaXRfcmVhbG1vZGUoaW50IGNwdSkge30KIAogc3RhdGljIHZvaWQgY3Jhc2hfa2V4ZWNfcHJlcGFyZV9jcHVzKGludCBjcHUpCiB7CkBAIC0yNTMsMTAgKzIyNCw0MCBAQAogCiB2b2lkIGNyYXNoX2tleGVjX3NlY29uZGFyeShzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQljcHVzX2luX3NyID0gQ1BVX01BU0tfTk9ORTsKKwljcHVtYXNrX2NsZWFyKCZjcHVzX2luX3NyKTsKIH0KICNlbmRpZgkvKiBDT05GSUdfU01QICovCiAKKy8qIHdhaXQgZm9yIGFsbCB0aGUgQ1BVcyB0byBoaXQgcmVhbCBtb2RlIGJ1dCB0aW1lb3V0IGlmIHRoZXkgZG9uJ3QgY29tZSBpbiAqLworI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgZGVmaW5lZChDT05GSUdfUFBDX1NURF9NTVVfNjQpCitzdGF0aWMgdm9pZCBjcmFzaF9rZXhlY193YWl0X3JlYWxtb2RlKGludCBjcHUpCit7CisJdW5zaWduZWQgaW50IG1zZWNzOworCWludCBpOworCisJbXNlY3MgPSAxMDAwMDsKKwlmb3IgKGk9MDsgaSA8IG5yX2NwdV9pZHMgJiYgbXNlY3MgPiAwOyBpKyspIHsKKwkJaWYgKGkgPT0gY3B1KQorCQkJY29udGludWU7CisKKwkJd2hpbGUgKHBhY2FbaV0ua2V4ZWNfc3RhdGUgPCBLRVhFQ19TVEFURV9SRUFMX01PREUpIHsKKwkJCWJhcnJpZXIoKTsKKwkJCWlmICghY3B1X3Bvc3NpYmxlKGkpKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoIWNwdV9vbmxpbmUoaSkpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW1zZWNzLS07CisJCQltZGVsYXkoMSk7CisJCX0KKwl9CisJbWIoKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY3Jhc2hfa2V4ZWNfd2FpdF9yZWFsbW9kZShpbnQgY3B1KSB7fQorI2VuZGlmCS8qIENPTkZJR19TTVAgJiYgQ09ORklHX1BQQ19TVERfTU1VXzY0ICovCisKIC8qCiAgKiBSZWdpc3RlciBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBvbiBzaHV0ZG93bi4gIE9ubHkgdXNlIHRoaXMgaWYgeW91CiAgKiBjYW4ndCByZXNldCB5b3VyIGRldmljZSBpbiB0aGUgc2Vjb25kIGtlcm5lbC4KQEAgLTM0NSw3ICszNDYsNyBAQAogCWNyYXNoaW5nX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAljcmFzaF9zYXZlX2NwdShyZWdzLCBjcmFzaGluZ19jcHUpOwogCWNyYXNoX2tleGVjX3ByZXBhcmVfY3B1cyhjcmFzaGluZ19jcHUpOwotCWNwdV9zZXQoY3Jhc2hpbmdfY3B1LCBjcHVzX2luX2NyYXNoKTsKKwljcHVtYXNrX3NldF9jcHUoY3Jhc2hpbmdfY3B1LCAmY3B1c19pbl9jcmFzaCk7CiAJY3Jhc2hfa2V4ZWNfd2FpdF9yZWFsbW9kZShjcmFzaGluZ19jcHUpOwogCiAJbWFjaGluZV9rZXhlY19tYXNrX2ludGVycnVwdHMoKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZGJlbGwuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZGJlbGwuYwppbmRleCAzMzA3YTUyLi4yY2M0NTFhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2RiZWxsLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9kYmVsbC5jCkBAIC0xMyw4NCArMTMsMzUgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgogCiAjaW5jbHVkZSA8YXNtL2RiZWxsLmg+CiAjaW5jbHVkZSA8YXNtL2lycV9yZWdzLmg+CiAKICNpZmRlZiBDT05GSUdfU01QCi1zdHJ1Y3QgZG9vcmJlbGxfY3B1X2luZm8gewotCXVuc2lnbmVkIGxvbmcJbWVzc2FnZXM7CS8qIGN1cnJlbnQgbWVzc2FnZXMgYml0cyAqLwotCXVuc2lnbmVkIGludAl0YWc7CQkvKiB0YWcgdmFsdWUgKi8KLX07Ci0KLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgZG9vcmJlbGxfY3B1X2luZm8sIGRvb3JiZWxsX2NwdV9pbmZvKTsKLQogdm9pZCBkb29yYmVsbF9zZXR1cF90aGlzX2NwdSh2b2lkKQogewotCXN0cnVjdCBkb29yYmVsbF9jcHVfaW5mbyAqaW5mbyA9ICZfX2dldF9jcHVfdmFyKGRvb3JiZWxsX2NwdV9pbmZvKTsKKwl1bnNpZ25lZCBsb25nIHRhZyA9IG1mc3ByKFNQUk5fUElSKSAmIDB4M2ZmZjsKIAotCWluZm8tPm1lc3NhZ2VzID0gMDsKLQlpbmZvLT50YWcgPSBtZnNwcihTUFJOX1BJUikgJiAweDNmZmY7CisJc21wX211eGVkX2lwaV9zZXRfZGF0YShzbXBfcHJvY2Vzc29yX2lkKCksIHRhZyk7CiB9CiAKLXZvaWQgZG9vcmJlbGxfbWVzc2FnZV9wYXNzKGludCB0YXJnZXQsIGludCBtc2cpCit2b2lkIGRvb3JiZWxsX2NhdXNlX2lwaShpbnQgY3B1LCB1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0Jc3RydWN0IGRvb3JiZWxsX2NwdV9pbmZvICppbmZvOwotCWludCBpOwotCi0JaWYgKHRhcmdldCA8IE5SX0NQVVMpIHsKLQkJaW5mbyA9ICZwZXJfY3B1KGRvb3JiZWxsX2NwdV9pbmZvLCB0YXJnZXQpOwotCQlzZXRfYml0KG1zZywgJmluZm8tPm1lc3NhZ2VzKTsKLQkJcHBjX21zZ3NuZChQUENfREJFTEwsIDAsIGluZm8tPnRhZyk7Ci0JfQotCWVsc2UgaWYgKHRhcmdldCA9PSBNU0dfQUxMX0JVVF9TRUxGKSB7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewotCQkJaWYgKGkgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQotCQkJCWNvbnRpbnVlOwotCQkJaW5mbyA9ICZwZXJfY3B1KGRvb3JiZWxsX2NwdV9pbmZvLCBpKTsKLQkJCXNldF9iaXQobXNnLCAmaW5mby0+bWVzc2FnZXMpOwotCQkJcHBjX21zZ3NuZChQUENfREJFTEwsIDAsIGluZm8tPnRhZyk7Ci0JCX0KLQl9Ci0JZWxzZSB7IC8qIHRhcmdldCA9PSBNU0dfQUxMICovCi0JCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewotCQkJaW5mbyA9ICZwZXJfY3B1KGRvb3JiZWxsX2NwdV9pbmZvLCBpKTsKLQkJCXNldF9iaXQobXNnLCAmaW5mby0+bWVzc2FnZXMpOwotCQl9Ci0JCXBwY19tc2dzbmQoUFBDX0RCRUxMLCBQUENfREJFTExfTVNHX0JSRENBU1QsIDApOwotCX0KKwlwcGNfbXNnc25kKFBQQ19EQkVMTCwgMCwgZGF0YSk7CiB9CiAKIHZvaWQgZG9vcmJlbGxfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKLQlzdHJ1Y3QgZG9vcmJlbGxfY3B1X2luZm8gKmluZm8gPSAmX19nZXRfY3B1X3Zhcihkb29yYmVsbF9jcHVfaW5mbyk7Ci0JaW50IG1zZzsKIAotCS8qIFdhcm5pbmc6IHJlZ3MgY2FuIGJlIE5VTEwgd2hlbiBjYWxsZWQgZnJvbSBpcnEgZW5hYmxlICovCisJaXJxX2VudGVyKCk7CiAKLQlpZiAoIWluZm8tPm1lc3NhZ2VzIHx8IChudW1fb25saW5lX2NwdXMoKSA8IDIpKQotCQlnb3RvIG91dDsKKwlzbXBfaXBpX2RlbXV4KCk7CiAKLQlmb3IgKG1zZyA9IDA7IG1zZyA8IDQ7IG1zZysrKQotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KG1zZywgJmluZm8tPm1lc3NhZ2VzKSkKLQkJCXNtcF9tZXNzYWdlX3JlY3YobXNnKTsKLQotb3V0OgorCWlycV9leGl0KCk7CiAJc2V0X2lycV9yZWdzKG9sZF9yZWdzKTsKIH0KLQotdm9pZCBkb29yYmVsbF9jaGVja19zZWxmKHZvaWQpCi17Ci0Jc3RydWN0IGRvb3JiZWxsX2NwdV9pbmZvICppbmZvID0gJl9fZ2V0X2NwdV92YXIoZG9vcmJlbGxfY3B1X2luZm8pOwotCi0JaWYgKCFpbmZvLT5tZXNzYWdlcykKLQkJcmV0dXJuOwotCi0JcHBjX21zZ3NuZChQUENfREJFTEwsIDAsIGluZm8tPnRhZyk7Ci19Ci0KICNlbHNlIC8qIENPTkZJR19TTVAgKi8KIHZvaWQgZG9vcmJlbGxfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCmluZGV4IGQ4Mjg3OGMuLmQ4MzQ0MjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKQEAgLTQyMSw2ICs0MjEsMTIgQEAKIAlzdGQJcjI0LFRIUkVBRF9WUlNBVkUocjMpCiBFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9BTFRJVkVDKQogI2VuZGlmIC8qIENPTkZJR19BTFRJVkVDICovCisjaWZkZWYgQ09ORklHX1BQQzY0CitCRUdJTl9GVFJfU0VDVElPTgorCW1mc3ByCXIyNSxTUFJOX0RTQ1IKKwlzdGQJcjI1LFRIUkVBRF9EU0NSKHIzKQorRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfRFNDUikKKyNlbmRpZgogCWFuZC4JcjAscjAscjIyCiAJYmVxKwkxZgogCWFuZGMJcjIyLHIyMixyMApAQCAtNDYyLDEwICs0NjgsMTAgQEAKICAgRlRSX1NFQ1RJT05fRUxTRV9ORVNURUQoOTUpCiAJY2xycmRpCXI2LHI4LDQwCS8qIGdldCBpdHMgMVQgRVNJRCAqLwogCWNscnJkaQlyOSxyMSw0MAkvKiBnZXQgY3VycmVudCBzcCAxVCBFU0lEICovCi0gIEFMVF9GVFJfU0VDVElPTl9FTkRfTkVTVEVEX0lGQ0xSKENQVV9GVFJfMVRfU0VHTUVOVCwgOTUpCisgIEFMVF9NTVVfRlRSX1NFQ1RJT05fRU5EX05FU1RFRF9JRkNMUihNTVVfRlRSXzFUX1NFR01FTlQsIDk1KQogRlRSX1NFQ1RJT05fRUxTRQogCWIJMmYKLUFMVF9GVFJfU0VDVElPTl9FTkRfSUZTRVQoQ1BVX0ZUUl9TTEIpCitBTFRfTU1VX0ZUUl9TRUNUSU9OX0VORF9JRlNFVChNTVVfRlRSX1NMQikKIAljbHJsZGkuCXIwLHI2LDIJCS8qIGlzIG5ldyBFU0lEIGMwMDAwMDAwMD8gKi8KIAljbXBkCWNyMSxyNixyOQkvKiBvciBpcyBuZXcgRVNJRCB0aGUgc2FtZSBhcyBjdXJyZW50IEVTSUQ/ICovCiAJY3JvcgllcSw0KmNyMStlcSxlcQpAQCAtNDc5LDcgKzQ4NSw3IEBACiAJbGkJcjksTU1VX1NFR1NJWkVfMVQJLyogaW5zZXJ0IEIgZmllbGQgKi8KIAlvcmlzCXI2LHI2LChNTVVfU0VHU0laRV8xVCA8PCBTTEJJRV9TU0laRV9TSElGVClAaAogCXJsZGltaQlyNyxyOSxTTEJfVlNJRF9TU0laRV9TSElGVCwwCi1FTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl8xVF9TRUdNRU5UKQorRU5EX01NVV9GVFJfU0VDVElPTl9JRlNFVChNTVVfRlRSXzFUX1NFR01FTlQpCiAKIAkvKiBVcGRhdGUgdGhlIGxhc3QgYm9sdGVkIFNMQi4gIE5vIHdyaXRlIGJhcnJpZXJzIGFyZSBuZWVkZWQKIAkgKiBoZXJlLCBwcm92aWRlZCB3ZSBvbmx5IHVwZGF0ZSB0aGUgY3VycmVudCBDUFUncyBTTEIgc2hhZG93CkBAIC00OTEsNyArNDk3LDcgQEAKIAlzdGQJcjcsU0xCU0hBRE9XX1NUQUNLVlNJRChyOSkgIC8qIFNhdmUgVlNJRCAqLwogCXN0ZAlyMCxTTEJTSEFET1dfU1RBQ0tFU0lEKHI5KSAgLyogU2F2ZSBFU0lEICovCiAKLQkvKiBObyBuZWVkIHRvIGNoZWNrIGZvciBDUFVfRlRSX05PX1NMQklFX0IgaGVyZSwgc2luY2Ugd2hlbgorCS8qIE5vIG5lZWQgdG8gY2hlY2sgZm9yIE1NVV9GVFJfTk9fU0xCSUVfQiBoZXJlLCBzaW5jZSB3aGVuCiAJICogd2UgaGF2ZSAxVEIgc2VnbWVudHMsIHRoZSBvbmx5IENQVXMga25vd24gdG8gaGF2ZSB0aGUgZXJyYXRhCiAJICogb25seSBzdXBwb3J0IGxlc3MgdGhhbiAxVEIgb2Ygc3lzdGVtIG1lbW9yeSBhbmQgd2UnbGwgbmV2ZXIKIAkgKiBhY3R1YWxseSBoaXQgdGhpcyBjb2RlIHBhdGguCkBAIC01MjIsNiArNTI4LDE1IEBACiAJbXRzcHIJU1BSTl9WUlNBVkUscjAJCS8qIGlmIEc0LCByZXN0b3JlIFZSU0FWRSByZWcgKi8KIEVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX0FMVElWRUMpCiAjZW5kaWYgLyogQ09ORklHX0FMVElWRUMgKi8KKyNpZmRlZiBDT05GSUdfUFBDNjQKK0JFR0lOX0ZUUl9TRUNUSU9OCisJbGQJcjAsVEhSRUFEX0RTQ1IocjQpCisJY21wZAlyMCxyMjUKKwliZXEJMWYKKwltdHNwcglTUFJOX0RTQ1IscjAKKzE6CQorRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfRFNDUikKKyNlbmRpZgogCiAJLyogcjMtcjEzIGFyZSBkZXN0cm95ZWQgLS0gQ29ydCAqLwogCVJFU1RfOEdQUlMoMTQsIHIxKQpAQCAtODM4LDcgKzg1Myw3IEBACiAKIF9TVEFUSUMocnRhc19yZXR1cm5fbG9jKQogCS8qIHJlbG9jYXRpb24gaXMgb2ZmIGF0IHRoaXMgcG9pbnQgKi8KLQltZnNwcglyNCxTUFJOX1NQUkdfUEFDQQkvKiBHZXQgUEFDQSAqLworCUdFVF9QQUNBKHI0KQogCWNscmxkaQlyNCxyNCwyCQkJLyogY29udmVydCB0byByZWFsbW9kZSBhZGRyZXNzICovCiAKIAliY2wJMjAsMzEsJCs0CkBAIC04NjksNyArODg0LDcgQEAKIAlSRVNUXzhHUFJTKDE0LCByMSkJCS8qIFJlc3RvcmUgdGhlIG5vbi12b2xhdGlsZXMgKi8KIAlSRVNUXzEwR1BSUygyMiwgcjEpCQkvKiBkaXR0byAqLwogCi0JbWZzcHIJcjEzLFNQUk5fU1BSR19QQUNBCisJR0VUX1BBQ0EocjEzKQogCiAJbGQJcjQsX0NDUihyMSkKIAltdGNyCXI0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2V4Y2VwdGlvbnMtNjRlLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2V4Y2VwdGlvbnMtNjRlLlMKaW5kZXggOTY1MWFjYy4uZDI0ZDQ0MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0ZS5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXhjZXB0aW9ucy02NGUuUwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGFzbS9yZWdfYTIuaD4KICNpbmNsdWRlIDxhc20vZXhjZXB0aW9uLTY0ZS5oPgogI2luY2x1ZGUgPGFzbS9idWcuaD4KICNpbmNsdWRlIDxhc20vaXJxZmxhZ3MuaD4KQEAgLTI1Miw5ICsyNTMsNiBAQAogCS5iYWxpZ24JMHgxMDAwCiAJLmdsb2JsIGludGVycnVwdF9iYXNlX2Jvb2szZQogaW50ZXJydXB0X2Jhc2VfYm9vazNlOgkJCQkJLyogZmFrZSB0cmFwICovCi0JLyogTm90ZTogSWYgcmVhbCBkZWJ1ZyBleGNlcHRpb25zIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIEhXLCB0aGUgdmVjdG9yCi0JICogYmVsb3cgd2lsbCBoYXZlIHRvIGJlIHBhdGNoZWQgdXAgdG8gcG9pbnQgdG8gYW4gYXBwcm9wcmlhdGUgaGFuZGxlcgotCSAqLwogCUVYQ0VQVElPTl9TVFVCKDB4MDAwLCBtYWNoaW5lX2NoZWNrKQkJLyogMHgwMjAwICovCiAJRVhDRVBUSU9OX1NUVUIoMHgwMjAsIGNyaXRpY2FsX2lucHV0KQkJLyogMHgwNTgwICovCiAJRVhDRVBUSU9OX1NUVUIoMHgwNDAsIGRlYnVnX2NyaXQpCQkvKiAweDBkMDAgKi8KQEAgLTI3MSw4ICsyNjksMTMgQEAKIAlFWENFUFRJT05fU1RVQigweDFhMCwgd2F0Y2hkb2cpCQkJLyogMHgwOWYwICovCiAJRVhDRVBUSU9OX1NUVUIoMHgxYzAsIGRhdGFfdGxiX21pc3MpCiAJRVhDRVBUSU9OX1NUVUIoMHgxZTAsIGluc3RydWN0aW9uX3RsYl9taXNzKQorCUVYQ0VQVElPTl9TVFVCKDB4MjYwLCBwZXJmbW9uKQogCUVYQ0VQVElPTl9TVFVCKDB4MjgwLCBkb29yYmVsbCkKIAlFWENFUFRJT05fU1RVQigweDJhMCwgZG9vcmJlbGxfY3JpdCkKKwlFWENFUFRJT05fU1RVQigweDJjMCwgZ3Vlc3RfZG9vcmJlbGwpCisJRVhDRVBUSU9OX1NUVUIoMHgyZTAsIGd1ZXN0X2Rvb3JiZWxsX2NyaXQpCisJRVhDRVBUSU9OX1NUVUIoMHgzMDAsIGh5cGVyY2FsbCkKKwlFWENFUFRJT05fU1RVQigweDMyMCwgZWhwcml2KQogCiAJLmdsb2JsIGludGVycnVwdF9lbmRfYm9vazNlCiBpbnRlcnJ1cHRfZW5kX2Jvb2szZToKQEAgLTQ1NCw2ICs0NTcsNzAgQEAKIGtlcm5lbF9kYmdfZXhjOgogCWIJLgkvKiBOWUkgKi8KIAorLyogRGVidWcgZXhjZXB0aW9uIGFzIGEgZGVidWcgaW50ZXJydXB0Ki8KKwlTVEFSVF9FWENFUFRJT04oZGVidWdfZGVidWcpOworCURCR19FWENFUFRJT05fUFJPTE9HKDB4ZDAwLCBQUk9MT0dfQURESVRJT05fMlJFR1MpCisKKwkvKgorCSAqIElmIHRoZXJlIGlzIGEgc2luZ2xlIHN0ZXAgb3IgYnJhbmNoLXRha2VuIGV4Y2VwdGlvbiBpbiBhbgorCSAqIGV4Y2VwdGlvbiBlbnRyeSBzZXF1ZW5jZSwgaXQgd2FzIHByb2JhYmx5IG1lYW50IHRvIGFwcGx5IHRvCisJICogdGhlIGNvZGUgd2hlcmUgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZCAoc2luY2UgZXhjZXB0aW9uIGVudHJ5CisJICogZG9lc24ndCB0dXJuIG9mZiBERSBhdXRvbWF0aWNhbGx5KS4gIFdlIHNpbXVsYXRlIHRoZSBlZmZlY3QKKwkgKiBvZiB0dXJuaW5nIG9mZiBERSBvbiBlbnRyeSB0byBhbiBleGNlcHRpb24gaGFuZGxlciBieSB0dXJuaW5nCisJICogb2ZmIERFIGluIHRoZSBEU1JSMSB2YWx1ZSBhbmQgY2xlYXJpbmcgdGhlIGRlYnVnIHN0YXR1cy4KKwkgKi8KKworCW1mc3ByCXIxNCxTUFJOX0RCU1IJCS8qIGNoZWNrIHNpbmdsZS1zdGVwL2JyYW5jaCB0YWtlbiAqLworCWFuZGlzLglyMTUscjE0LERCU1JfSUNAaAorCWJlcSsJMWYKKworCUxPQURfUkVHX0lNTUVESUFURShyMTQsaW50ZXJydXB0X2Jhc2VfYm9vazNlKQorCUxPQURfUkVHX0lNTUVESUFURShyMTUsaW50ZXJydXB0X2VuZF9ib29rM2UpCisJY21wbGQJY3IwLHIxMCxyMTQKKwljbXBsZAljcjEscjEwLHIxNQorCWJsdCsJY3IwLDFmCisJYmdlKwljcjEsMWYKKworCS8qIGhlcmUgaXQgbG9va3MgbGlrZSB3ZSBnb3QgYW4gaW5hcHByb3ByaWF0ZSBkZWJ1ZyBleGNlcHRpb24uICovCisJbGlzCXIxNCxEQlNSX0lDQGgJCS8qIGNsZWFyIHRoZSBJQyBldmVudCAqLworCXJsd2lubQlyMTEscjExLDAsfk1TUl9ERQkvKiBjbGVhciBERSBpbiB0aGUgRFNSUjEgdmFsdWUgKi8KKwltdHNwcglTUFJOX0RCU1IscjE0CisJbXRzcHIJU1BSTl9EU1JSMSxyMTEKKwlsd3oJcjEwLFBBQ0FfRVhEQkcrRVhfQ1IocjEzKQkvKiByZXN0b3JlIHJlZ2lzdGVycyAqLworCWxkCXIxLFBBQ0FfRVhEQkcrRVhfUjEocjEzKQorCWxkCXIxNCxQQUNBX0VYREJHK0VYX1IxNChyMTMpCisJbGQJcjE1LFBBQ0FfRVhEQkcrRVhfUjE1KHIxMykKKwltdGNyCXIxMAorCWxkCXIxMCxQQUNBX0VYREJHK0VYX1IxMChyMTMpCS8qIHJlc3RvcmUgcmVnaXN0ZXJzICovCisJbGQJcjExLFBBQ0FfRVhEQkcrRVhfUjExKHIxMykKKwltZnNwcglyMTMsU1BSTl9TUFJHX0RCR19TQ1JBVENICisJcmZkaQorCisJLyogTm9ybWFsIGRlYnVnIGV4Y2VwdGlvbiAqLworCS8qIFhYWCBXZSBvbmx5IGhhbmRsZSBjb21pbmcgZnJvbSB1c2Vyc3BhY2UgZm9yIG5vdyBzaW5jZSB3ZSBjYW4ndAorCSAqICAgICBxdWl0ZSBzYXZlIHByb3Blcmx5IGFuIGludGVycnVwdGVkIGtlcm5lbCBzdGF0ZSB5ZXQKKwkgKi8KKzE6CWFuZGkuCXIxNCxyMTEsTVNSX1BSOwkJLyogY2hlY2sgZm9yIHVzZXJzcGFjZSBhZ2FpbiAqLworCWJlcQlrZXJuZWxfZGJnX2V4YzsJCS8qIGlmIGZyb20ga2VybmVsIG1vZGUgKi8KKworCS8qIE5vdyB3ZSBtYXNoIHVwIHRoaW5ncyB0byBtYWtlIGl0IGxvb2sgbGlrZSB3ZSBhcmUgY29taW5nIG9uIGEKKwkgKiBub3JtYWwgZXhjZXB0aW9uCisJICovCisJbWZzcHIJcjE1LFNQUk5fU1BSR19EQkdfU0NSQVRDSAorCW10c3ByCVNQUk5fU1BSR19HRU5fU0NSQVRDSCxyMTUKKwltZnNwcglyMTQsU1BSTl9EQlNSCisJRVhDRVBUSU9OX0NPTU1PTigweGQwMCwgUEFDQV9FWERCRywgSU5UU19ESVNBQkxFX0FMTCkKKwlzdGQJcjE0LF9EU0lTUihyMSkKKwlhZGRpCXIzLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFECisJbXIJcjQscjE0CisJbGQJcjE0LFBBQ0FfRVhEQkcrRVhfUjE0KHIxMykKKwlsZAlyMTUsUEFDQV9FWERCRytFWF9SMTUocjEzKQorCWJsCS5zYXZlX252Z3BycworCWJsCS5EZWJ1Z0V4Y2VwdGlvbgorCWIJLnJldF9mcm9tX2V4Y2VwdAorCisJTUFTS0FCTEVfRVhDRVBUSU9OKDB4MjYwLCBwZXJmbW9uLCAucGVyZm9ybWFuY2VfbW9uaXRvcl9leGNlcHRpb24sIEFDS19OT05FKQorCiAvKiBEb29yYmVsbCBpbnRlcnJ1cHQgKi8KIAlNQVNLQUJMRV9FWENFUFRJT04oMHgyMDcwLCBkb29yYmVsbCwgLmRvb3JiZWxsX2V4Y2VwdGlvbiwgQUNLX05PTkUpCiAKQEAgLTQ2OCw2ICs1MzUsMTEgQEAKIC8vCWIJcmV0X2Zyb21fY3JpdF9leGNlcHQKIAliCS4KIAorCU1BU0tBQkxFX0VYQ0VQVElPTigweDJjMCwgZ3Vlc3RfZG9vcmJlbGwsIC51bmtub3duX2V4Y2VwdGlvbiwgQUNLX05PTkUpCisJTUFTS0FCTEVfRVhDRVBUSU9OKDB4MmUwLCBndWVzdF9kb29yYmVsbF9jcml0LCAudW5rbm93bl9leGNlcHRpb24sIEFDS19OT05FKQorCU1BU0tBQkxFX0VYQ0VQVElPTigweDMxMCwgaHlwZXJjYWxsLCAudW5rbm93bl9leGNlcHRpb24sIEFDS19OT05FKQorCU1BU0tBQkxFX0VYQ0VQVElPTigweDMyMCwgZWhwcml2LCAudW5rbm93bl9leGNlcHRpb24sIEFDS19OT05FKQorCiAKIC8qCiAgKiBBbiBpbnRlcnJ1cHQgY2FtZSBpbiB3aGlsZSBzb2Z0LWRpc2FibGVkOyBjbGVhciBFRSBpbiBTUlIxLApAQCAtNTg3LDcgKzY1OSwxMiBAQAogQkFEX1NUQUNLX1RSQU1QT0xJTkUoMHgwMDApCiBCQURfU1RBQ0tfVFJBTVBPTElORSgweDEwMCkKIEJBRF9TVEFDS19UUkFNUE9MSU5FKDB4MjAwKQorQkFEX1NUQUNLX1RSQU1QT0xJTkUoMHgyNjApCitCQURfU1RBQ0tfVFJBTVBPTElORSgweDJjMCkKK0JBRF9TVEFDS19UUkFNUE9MSU5FKDB4MmUwKQogQkFEX1NUQUNLX1RSQU1QT0xJTkUoMHgzMDApCitCQURfU1RBQ0tfVFJBTVBPTElORSgweDMxMCkKK0JBRF9TVEFDS19UUkFNUE9MSU5FKDB4MzIwKQogQkFEX1NUQUNLX1RSQU1QT0xJTkUoMHg0MDApCiBCQURfU1RBQ0tfVFJBTVBPTElORSgweDUwMCkKIEJBRF9TVEFDS19UUkFNUE9MSU5FKDB4NjAwKQpAQCAtODY0LDggKzk0MSwyMyBAQAogCSAqIHRoYXQgd2lsbCBoYXZlIHRvIGJlIG1hZGUgZGVwZW5kZW50IG9uIHdoZXRoZXIgd2UgYXJlIHJ1bm5pbmcgdW5kZXIKIAkgKiBhIGh5cGVydmlzb3IgSSBzdXBwb3NlLgogCSAqLwotCW9yaQlyMyxyMyxNQVMwX0hFUyB8IE1BUzBfV1FfQUxMV0FZUwotCW10c3ByCVNQUk5fTUFTMCxyMworCisJLyogQkVXQVJFLCBNQUdJQworCSAqIFRoaXMgY29kZSBpcyBjYWxsZWQgYXMgYW4gb3JkaW5hcnkgZnVuY3Rpb24gb24gdGhlIGJvb3QgQ1BVLiBCdXQgdG8KKwkgKiBhdm9pZCBkdXBsaWNhdGlvbiwgdGhpcyBjb2RlIGlzIGFsc28gdXNlZCBpbiBTQ09NIGJyaW5ndXAgb2YKKwkgKiBzZWNvbmRhcnkgQ1BVcy4gV2UgcmVhZCB0aGUgY29kZSBiZXR3ZWVuIHRoZSBpbml0aWFsX3RsYl9jb2RlX3N0YXJ0CisJICogYW5kIGluaXRpYWxfdGxiX2NvZGVfZW5kIGxhYmVscyBvbmUgaW5zdHJ1Y3Rpb24gYXQgYSB0aW1lIGFuZCBSQU0gaXQKKwkgKiBpbnRvIHRoZSBuZXcgY29yZSB2aWEgU0NPTS4gVGhhdCBkb2Vzbid0IHByb2Nlc3MgYnJhbmNoZXMsIHNvIHRoZXJlCisJICogbXVzdCBiZSBub25lIGJldHdlZW4gdGhvc2UgdHdvIGxhYmVscy4gSXQgYWxzbyBtZWFucyBpZiB0aGlzIGNvZGUKKwkgKiBldmVyIHRha2VzIGFueSBwYXJhbWV0ZXJzLCB0aGUgU0NPTSBjb2RlIG11c3QgYWxzbyBiZSB1cGRhdGVkIHRvCisJICogcHJvdmlkZSB0aGVtLgorCSAqLworCS5nbG9ibCBhMl90bGJpbml0X2NvZGVfc3RhcnQKK2EyX3RsYmluaXRfY29kZV9zdGFydDoKKworCW9yaQlyMTEscjMsTUFTMF9XUV9BTExXQVlTCisJb3JpcwlyMTEscjExLE1BUzBfRVNFTCgzKUBoIC8qIFVzZSB3YXkgMzogd29ya2Fyb3VuZCBBMiBlcnJhdHVtIDM3NiAqLworCW10c3ByCVNQUk5fTUFTMCxyMTEKIAlsaXMJcjMsKE1BUzFfVkFMSUQgfCBNQVMxX0lQUk9UKUBoCiAJb3JpCXIzLHIzLEJPT0szRV9QQUdFU1pfMUdCIDw8IE1BUzFfVFNJWkVfU0hJRlQKIAltdHNwcglTUFJOX01BUzEscjMKQEAgLTg3OSwxOCArOTcxLDg2IEBACiAJLyogV3JpdGUgdGhlIFRMQiBlbnRyeSAqLwogCXRsYndlCiAKKwkuZ2xvYmwgYTJfdGxiaW5pdF9hZnRlcl9saW5lYXJfbWFwCithMl90bGJpbml0X2FmdGVyX2xpbmVhcl9tYXA6CisKIAkvKiBOb3cgd2UgYnJhbmNoIHRoZSBuZXcgdmlydHVhbCBhZGRyZXNzIG1hcHBlZCBieSB0aGlzIGVudHJ5ICovCiAJTE9BRF9SRUdfSU1NRURJQVRFKHIzLDFmKQogCW10Y3RyCXIzCiAJYmN0cgogCiAxOgkvKiBXZSBhcmUgbm93IHJ1bm5pbmcgYXQgUEFHRV9PRkZTRVQsIGNsZWFuIHRoZSBUTEIgb2YgZXZlcnl0aGluZwotCSAqIGVsc2UgKFhYWCB3ZSBzaG91bGQgc2NhbiBmb3IgYm9sdGVkIGNyYXAgZnJvbSB0aGUgZmlybXdhcmUgdG9vKQorCSAqIGVsc2UgKGluY2x1ZGluZyBJUFJPVGVkIHRoaW5ncyBsZWZ0IGJ5IGZpcm13YXJlKQorCSAqIHI0ID0gVExCbkNGRworCSAqIHIzID0gY3VycmVudCBhZGRyZXNzIChtb3JlIG9yIGxlc3MpCiAJICovCisKKwlsaQlyNSwwCisJbXRzcHIJU1BSTl9NQVM2LHI1CisJdGxic3gJMCxyMworCisJcmx3aW5tCXI5LHI0LDAsVExCbkNGR19OX0VOVFJZCisJcmx3aW5tCXIxMCxyNCw4LDB4ZmYKKwlhZGRpCXIxMCxyMTAsLTEJLyogR2V0IGlubmVyIGxvb3AgbWFzayAqLworCisJbGkJcjMsMQorCisJbWZzcHIJcjUsU1BSTl9NQVMxCisJcmx3aW5tCXI1LHI1LDAsKH4oTUFTMV9WQUxJRHxNQVMxX0lQUk9UKSkKKworCW1mc3ByCXI2LFNQUk5fTUFTMgorCXJsZGljcglyNixyNiwwLDUxCQkvKiBFeHRyYWN0IEVQTiAqLworCisJbWZzcHIJcjcsU1BSTl9NQVMwCisJcmx3aW5tCXI3LHI3LDAsMHhmZmZmMGZmZgkvKiBDbGVhciBIRVMgYW5kIFdRICovCisKKwlybHdpbm0JcjgscjcsMTYsMHhmZmYJCS8qIEV4dHJhY3QgRVNFTCAqLworCisyOglhZGQJcjQscjMscjgKKwlhbmQJcjQscjQscjEwCisKKwlybHdpbWkJcjcscjQsMTYsTUFTMF9FU0VMX01BU0sKKworCW10c3ByCVNQUk5fTUFTMCxyNworCW10c3ByCVNQUk5fTUFTMSxyNQorCW10c3ByCVNQUk5fTUFTMixyNgorCXRsYndlCisKKwlhZGRpCXIzLHIzLDEKKwlhbmQuCXI0LHIzLHIxMAorCisJYm5lCTNmCisJYWRkaXMJcjYscjYsKDE8PDMwKUBoCiszOgorCWNtcHcJcjMscjkKKwlibHQJMmIKKworCS5nbG9ibCAgYTJfdGxiaW5pdF9hZnRlcl9pcHJvdF9mbHVzaAorYTJfdGxiaW5pdF9hZnRlcl9pcHJvdF9mbHVzaDoKKworI2lmZGVmIENPTkZJR19QUENfRUFSTFlfREVCVUdfV1NQCisJLyogTm93IGVzdGFibGlzaCBlYXJseSBkZWJ1ZyBtYXBwaW5ncyBpZiBhcHBsaWNhYmxlICovCisJLyogUmVzdG9yZSB0aGUgTUFTMCB3ZSB1c2VkIGZvciBsaW5lYXIgbWFwcGluZyBsb2FkICovCisJbXRzcHIJU1BSTl9NQVMwLHIxMQorCisJbGlzCXIzLChNQVMxX1ZBTElEIHwgTUFTMV9JUFJPVClAaAorCW9yaQlyMyxyMywoQk9PSzNFX1BBR0VTWl80SyA8PCBNQVMxX1RTSVpFX1NISUZUKQorCW10c3ByCVNQUk5fTUFTMSxyMworCUxPQURfUkVHX0lNTUVESUFURShyMywgV1NQX1VBUlRfVklSVCB8IE1BUzJfSSB8IE1BUzJfRykKKwltdHNwcglTUFJOX01BUzIscjMKKwlMT0FEX1JFR19JTU1FRElBVEUocjMsIFdTUF9VQVJUX1BIWVMgfCBNQVMzX1NSIHwgTUFTM19TVykKKwltdHNwcglTUFJOX01BUzdfTUFTMyxyMworCS8qIHJlLXVzZSB0aGUgTUFTOCB2YWx1ZSBmcm9tIHRoZSBsaW5lYXIgbWFwcGluZyAqLworCXRsYndlCisjZW5kaWYgLyogQ09ORklHX1BQQ19FQVJMWV9ERUJVR19XU1AgKi8KKwogCVBQQ19UTEJJTFgoMCwwLDApCiAJc3luYwogCWlzeW5jCiAKKwkuZ2xvYmwgYTJfdGxiaW5pdF9jb2RlX2VuZAorYTJfdGxiaW5pdF9jb2RlX2VuZDoKKwogCS8qIFdlIHRyYW5zbGF0ZSBMUiBhbmQgcmV0dXJuICovCiAJbWZscglyMwogCXRvdmlydChyMyxyMykKQEAgLTEwNDAsMyArMTIwMCwzMyBAQAogCXN5bmMKIAogCWJscgorCitfR0xPQkFMKHNldHVwX3BlcmZtb25faXZvcikKKwlTRVRfSVZPUigzNSwgMHgyNjApIC8qIFBlcmZvcm1hbmNlIE1vbml0b3IgKi8KKwlibHIKKworX0dMT0JBTChzZXR1cF9kb29yYmVsbF9pdm9ycykKKwlTRVRfSVZPUigzNiwgMHgyODApIC8qIFByb2Nlc3NvciBEb29yYmVsbCAqLworCVNFVF9JVk9SKDM3LCAweDJhMCkgLyogUHJvY2Vzc29yIERvb3JiZWxsIENyaXQgKi8KKworCS8qIENoZWNrIE1NVUNGR1tMUElEU0laRV0gdG8gZGV0ZXJtaW5lIGlmIHdlIGhhdmUgY2F0ZWdvcnkgRS5IViAqLworCW1mc3ByCXIxMCxTUFJOX01NVUNGRworCXJsd2lubS4JcjEwLHIxMCwwLE1NVUNGR19MUElEU0laRQorCWJlcWxyCisKKwlTRVRfSVZPUigzOCwgMHgyYzApIC8qIEd1ZXN0IFByb2Nlc3NvciBEb29yYmVsbCAqLworCVNFVF9JVk9SKDM5LCAweDJlMCkgLyogR3Vlc3QgUHJvY2Vzc29yIERvb3JiZWxsIENyaXQvTUMgKi8KKwlibHIKKworX0dMT0JBTChzZXR1cF9laHZfaXZvcnMpCisJLyoKKwkgKiBXZSBtYXkgYmUgcnVubmluZyBhcyBhIGd1ZXN0IGFuZCBsYWNrIEUuSFYgZXZlbiBvbiBhIGNoaXAKKwkgKiB0aGF0IG5vcm1hbGx5IGhhcyBpdC4KKwkgKi8KKwltZnNwcglyMTAsU1BSTl9NTVVDRkcKKwlybHdpbm0uCXIxMCxyMTAsMCxNTVVDRkdfTFBJRFNJWkUKKwliZXFscgorCisJU0VUX0lWT1IoNDAsIDB4MzAwKSAvKiBFbWJlZGRlZCBIeXBlcnZpc29yIFN5c3RlbSBDYWxsICovCisJU0VUX0lWT1IoNDEsIDB4MzIwKSAvKiBFbWJlZGRlZCBIeXBlcnZpc29yIFByaXZpbGVnZSAqLworCWJscgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0cy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0cy5TCmluZGV4IGFlYjczOWUuLmE4NWY0ODcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXhjZXB0aW9ucy02NHMuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2V4Y2VwdGlvbnMtNjRzLlMKQEAgLTM3LDIzICszNyw1MSBAQAogCS5nbG9ibCBfX3N0YXJ0X2ludGVycnVwdHMKIF9fc3RhcnRfaW50ZXJydXB0czoKIAotCVNURF9FWENFUFRJT05fUFNFUklFUygweDEwMCwgc3lzdGVtX3Jlc2V0KQorCS5nbG9ibCBzeXN0ZW1fcmVzZXRfcFNlcmllczsKK3N5c3RlbV9yZXNldF9wU2VyaWVzOgorCUhNVF9NRURJVU07CisJRE9fS1ZNCTB4MTAwOworCVNFVF9TQ1JBVENIMChyMTMpCisjaWZkZWYgQ09ORklHX1BQQ19QN19OQVAKK0JFR0lOX0ZUUl9TRUNUSU9OCisJLyogUnVubmluZyBuYXRpdmUgb24gYXJjaCAyLjA2IG9yIGxhdGVyLCBjaGVjayBpZiB3ZSBhcmUKKwkgKiB3YWtpbmcgdXAgZnJvbSBuYXAuIFdlIG9ubHkgaGFuZGxlIG5vIHN0YXRlIGxvc3MgYW5kCisJICogc3VwZXJ2aXNvciBzdGF0ZSBsb3NzLiBXZSBkbyAtbm90LSBoYW5kbGUgaHlwZXJ2aXNvcgorCSAqIHN0YXRlIGxvc3MgYXQgdGhpcyB0aW1lLgorCSAqLworCW1mc3ByCXIxMyxTUFJOX1NSUjEKKwlybHdpbm0JcjEzLHIxMyw0Ny0zMSwzMCwzMQorCWNtcHdpCWNyMCxyMTMsMQorCWJuZQkxZgorCWIJLnBvd2VyN193YWtldXBfbm9sb3NzCisxOgljbXB3aQljcjAscjEzLDIKKwlibmUJMWYKKwliCS5wb3dlcjdfd2FrZXVwX2xvc3MKKwkvKiBUb3RhbCBsb3NzIG9mIEhWIHN0YXRlIGlzIGZhdGFsLCB3ZSBjb3VsZCB0cnkgdG8gdXNlIHRoZQorCSAqIFBJUiB0byBsb2NhdGUgYSBQQUNBLCB0aGVuIHVzZSBhbiBlbWVyZ2VuY3kgc3RhY2sgZXRjLi4uCisJICogYnV0IGZvciBub3csIGxldCdzIGp1c3Qgc3RheSBzdHVjayBoZXJlCisJICovCisxOgljbXB3aQljcjAscjEzLDMKKwliZXEJLgorRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfSFZNT0RFXzIwNikKKyNlbmRpZiAvKiBDT05GSUdfUFBDX1A3X05BUCAqLworCUVYQ0VQVElPTl9QUk9MT0dfUFNFUklFUyhQQUNBX0VYR0VOLCBzeXN0ZW1fcmVzZXRfY29tbW9uLCBFWENfU1REKQogCiAJLiA9IDB4MjAwCiBfbWFjaGluZV9jaGVja19wU2VyaWVzOgogCUhNVF9NRURJVU0KIAlET19LVk0JMHgyMDAKLQltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDAscjEzCQkvKiBzYXZlIHIxMyAqLwotCUVYQ0VQVElPTl9QUk9MT0dfUFNFUklFUyhQQUNBX0VYTUMsIG1hY2hpbmVfY2hlY2tfY29tbW9uKQorCVNFVF9TQ1JBVENIMChyMTMpCisJRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTKFBBQ0FfRVhNQywgbWFjaGluZV9jaGVja19jb21tb24sIEVYQ19TVEQpCiAKIAkuID0gMHgzMDAKIAkuZ2xvYmwgZGF0YV9hY2Nlc3NfcFNlcmllcwogZGF0YV9hY2Nlc3NfcFNlcmllczoKIAlITVRfTUVESVVNCiAJRE9fS1ZNCTB4MzAwCi0JbXRzcHIJU1BSTl9TUFJHX1NDUkFUQ0gwLHIxMworCVNFVF9TQ1JBVENIMChyMTMpCiBCRUdJTl9GVFJfU0VDVElPTgotCW1mc3ByCXIxMyxTUFJOX1NQUkdfUEFDQQorCUdFVF9QQUNBKHIxMykKIAlzdGQJcjksUEFDQV9FWFNMQitFWF9SOShyMTMpCiAJc3RkCXIxMCxQQUNBX0VYU0xCK0VYX1IxMChyMTMpCiAJbWZzcHIJcjEwLFNQUk5fREFSCkBAIC02NywyMiArOTUsMjIgQEAKIAlzdGQJcjExLFBBQ0FfRVhHRU4rRVhfUjExKHIxMykKIAlsZAlyMTEsUEFDQV9FWFNMQitFWF9SOShyMTMpCiAJc3RkCXIxMixQQUNBX0VYR0VOK0VYX1IxMihyMTMpCi0JbWZzcHIJcjEyLFNQUk5fU1BSR19TQ1JBVENIMAorCUdFVF9TQ1JBVENIMChyMTIpCiAJc3RkCXIxMCxQQUNBX0VYR0VOK0VYX1IxMChyMTMpCiAJc3RkCXIxMSxQQUNBX0VYR0VOK0VYX1I5KHIxMykKIAlzdGQJcjEyLFBBQ0FfRVhHRU4rRVhfUjEzKHIxMykKLQlFWENFUFRJT05fUFJPTE9HX1BTRVJJRVNfMShkYXRhX2FjY2Vzc19jb21tb24pCisJRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTXzEoZGF0YV9hY2Nlc3NfY29tbW9uLCBFWENfU1REKQogRlRSX1NFQ1RJT05fRUxTRQotCUVYQ0VQVElPTl9QUk9MT0dfUFNFUklFUyhQQUNBX0VYR0VOLCBkYXRhX2FjY2Vzc19jb21tb24pCi1BTFRfRlRSX1NFQ1RJT05fRU5EX0lGQ0xSKENQVV9GVFJfU0xCKQorCUVYQ0VQVElPTl9QUk9MT0dfUFNFUklFUyhQQUNBX0VYR0VOLCBkYXRhX2FjY2Vzc19jb21tb24sIEVYQ19TVEQpCitBTFRfTU1VX0ZUUl9TRUNUSU9OX0VORF9JRkNMUihNTVVfRlRSX1NMQikKIAogCS4gPSAweDM4MAogCS5nbG9ibCBkYXRhX2FjY2Vzc19zbGJfcFNlcmllcwogZGF0YV9hY2Nlc3Nfc2xiX3BTZXJpZXM6CiAJSE1UX01FRElVTQogCURPX0tWTQkweDM4MAotCW10c3ByCVNQUk5fU1BSR19TQ1JBVENIMCxyMTMKLQltZnNwcglyMTMsU1BSTl9TUFJHX1BBQ0EJCS8qIGdldCBwYWNhIGFkZHJlc3MgaW50byByMTMgKi8KKwlTRVRfU0NSQVRDSDAocjEzKQorCUdFVF9QQUNBKHIxMykKIAlzdGQJcjMsUEFDQV9FWFNMQitFWF9SMyhyMTMpCiAJbWZzcHIJcjMsU1BSTl9EQVIKIAlzdGQJcjksUEFDQV9FWFNMQitFWF9SOShyMTMpCS8qIHNhdmUgcjkgLSByMTIgKi8KQEAgLTk1LDcgKzEyMyw3IEBACiAJc3RkCXIxMCxQQUNBX0VYU0xCK0VYX1IxMChyMTMpCiAJc3RkCXIxMSxQQUNBX0VYU0xCK0VYX1IxMShyMTMpCiAJc3RkCXIxMixQQUNBX0VYU0xCK0VYX1IxMihyMTMpCi0JbWZzcHIJcjEwLFNQUk5fU1BSR19TQ1JBVENIMAorCUdFVF9TQ1JBVENIMChyMTApCiAJc3RkCXIxMCxQQUNBX0VYU0xCK0VYX1IxMyhyMTMpCiAJbWZzcHIJcjEyLFNQUk5fU1JSMQkJLyogYW5kIFNSUjEgKi8KICNpZm5kZWYgQ09ORklHX1JFTE9DQVRBQkxFCkBAIC0xMTMsMTUgKzE0MSwxNSBAQAogCWJjdHIKICNlbmRpZgogCi0JU1REX0VYQ0VQVElPTl9QU0VSSUVTKDB4NDAwLCBpbnN0cnVjdGlvbl9hY2Nlc3MpCisJU1REX0VYQ0VQVElPTl9QU0VSSUVTKDB4NDAwLCAweDQwMCwgaW5zdHJ1Y3Rpb25fYWNjZXNzKQogCiAJLiA9IDB4NDgwCiAJLmdsb2JsIGluc3RydWN0aW9uX2FjY2Vzc19zbGJfcFNlcmllcwogaW5zdHJ1Y3Rpb25fYWNjZXNzX3NsYl9wU2VyaWVzOgogCUhNVF9NRURJVU0KIAlET19LVk0JMHg0ODAKLQltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDAscjEzCi0JbWZzcHIJcjEzLFNQUk5fU1BSR19QQUNBCQkvKiBnZXQgcGFjYSBhZGRyZXNzIGludG8gcjEzICovCisJU0VUX1NDUkFUQ0gwKHIxMykKKwlHRVRfUEFDQShyMTMpCiAJc3RkCXIzLFBBQ0FfRVhTTEIrRVhfUjMocjEzKQogCW1mc3ByCXIzLFNQUk5fU1JSMAkJLyogU1JSMCBpcyBmYXVsdGluZyBhZGRyZXNzICovCiAJc3RkCXI5LFBBQ0FfRVhTTEIrRVhfUjkocjEzKQkvKiBzYXZlIHI5IC0gcjEyICovCkBAIC0xMzQsNyArMTYyLDcgQEAKIAlzdGQJcjEwLFBBQ0FfRVhTTEIrRVhfUjEwKHIxMykKIAlzdGQJcjExLFBBQ0FfRVhTTEIrRVhfUjExKHIxMykKIAlzdGQJcjEyLFBBQ0FfRVhTTEIrRVhfUjEyKHIxMykKLQltZnNwcglyMTAsU1BSTl9TUFJHX1NDUkFUQ0gwCisJR0VUX1NDUkFUQ0gwKHIxMCkKIAlzdGQJcjEwLFBBQ0FfRVhTTEIrRVhfUjEzKHIxMykKIAltZnNwcglyMTIsU1BSTl9TUlIxCQkvKiBhbmQgU1JSMSAqLwogI2lmbmRlZiBDT05GSUdfUkVMT0NBVEFCTEUKQEAgLTE0NywxMyArMTc1LDI5IEBACiAJYmN0cgogI2VuZGlmCiAKLQlNQVNLQUJMRV9FWENFUFRJT05fUFNFUklFUygweDUwMCwgaGFyZHdhcmVfaW50ZXJydXB0KQotCVNURF9FWENFUFRJT05fUFNFUklFUygweDYwMCwgYWxpZ25tZW50KQotCVNURF9FWENFUFRJT05fUFNFUklFUygweDcwMCwgcHJvZ3JhbV9jaGVjaykKLQlTVERfRVhDRVBUSU9OX1BTRVJJRVMoMHg4MDAsIGZwX3VuYXZhaWxhYmxlKQotCU1BU0tBQkxFX0VYQ0VQVElPTl9QU0VSSUVTKDB4OTAwLCBkZWNyZW1lbnRlcikKLQlTVERfRVhDRVBUSU9OX1BTRVJJRVMoMHhhMDAsIHRyYXBfMGEpCi0JU1REX0VYQ0VQVElPTl9QU0VSSUVTKDB4YjAwLCB0cmFwXzBiKQorCS8qIFdlIG9wZW4gY29kZSB0aGVzZSBhcyB3ZSBjYW4ndCBoYXZlIGEgIi4gPSB4IiAoZXZlbiB3aXRoCisJICogeCA9ICIuIiB3aXRoaW4gYSBmZWF0dXJlIHNlY3Rpb24KKwkgKi8KKwkuID0gMHg1MDA7CisJLmdsb2JsIGhhcmR3YXJlX2ludGVycnVwdF9wU2VyaWVzOworCS5nbG9ibCBoYXJkd2FyZV9pbnRlcnJ1cHRfaHY7CitoYXJkd2FyZV9pbnRlcnJ1cHRfcFNlcmllczoKK2hhcmR3YXJlX2ludGVycnVwdF9odjoKKwlCRUdJTl9GVFJfU0VDVElPTgorCQlfTUFTS0FCTEVfRVhDRVBUSU9OX1BTRVJJRVMoMHg1MDAsIGhhcmR3YXJlX2ludGVycnVwdCwgRVhDX1NURCkKKwlGVFJfU0VDVElPTl9FTFNFCisJCV9NQVNLQUJMRV9FWENFUFRJT05fUFNFUklFUygweDUwMiwgaGFyZHdhcmVfaW50ZXJydXB0LCBFWENfSFYpCisJQUxUX0ZUUl9TRUNUSU9OX0VORF9JRkNMUihDUFVfRlRSX0hWTU9ERV8yMDYpCisKKwlTVERfRVhDRVBUSU9OX1BTRVJJRVMoMHg2MDAsIDB4NjAwLCBhbGlnbm1lbnQpCisJU1REX0VYQ0VQVElPTl9QU0VSSUVTKDB4NzAwLCAweDcwMCwgcHJvZ3JhbV9jaGVjaykKKwlTVERfRVhDRVBUSU9OX1BTRVJJRVMoMHg4MDAsIDB4ODAwLCBmcF91bmF2YWlsYWJsZSkKKworCU1BU0tBQkxFX0VYQ0VQVElPTl9QU0VSSUVTKDB4OTAwLCAweDkwMCwgZGVjcmVtZW50ZXIpCisJTUFTS0FCTEVfRVhDRVBUSU9OX0hWKDB4OTgwLCAweDk4MCwgZGVjcmVtZW50ZXIpCisKKwlTVERfRVhDRVBUSU9OX1BTRVJJRVMoMHhhMDAsIDB4YTAwLCB0cmFwXzBhKQorCVNURF9FWENFUFRJT05fUFNFUklFUygweGIwMCwgMHhiMDAsIHRyYXBfMGIpCiAKIAkuID0gMHhjMDAKIAkuZ2xvYmwJc3lzdGVtX2NhbGxfcFNlcmllcwpAQCAtMTY1LDEzICsyMDksMTMgQEAKIAliZXEtCTFmCiBFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9SRUFMX0xFKQogCW1yCXI5LHIxMwotCW1mc3ByCXIxMyxTUFJOX1NQUkdfUEFDQQorCUdFVF9QQUNBKHIxMykKIAltZnNwcglyMTEsU1BSTl9TUlIwCi0JbGQJcjEyLFBBQ0FLQkFTRShyMTMpCi0JbGQJcjEwLFBBQ0FLTVNSKHIxMykKLQlMT0FEX0hBTkRMRVIocjEyLCBzeXN0ZW1fY2FsbF9lbnRyeSkKLQltdHNwcglTUFJOX1NSUjAscjEyCiAJbWZzcHIJcjEyLFNQUk5fU1JSMQorCWxkCXIxMCxQQUNBS0JBU0UocjEzKQorCUxPQURfSEFORExFUihyMTAsIHN5c3RlbV9jYWxsX2VudHJ5KQorCW10c3ByCVNQUk5fU1JSMCxyMTAKKwlsZAlyMTAsUEFDQUtNU1IocjEzKQogCW10c3ByCVNQUk5fU1JSMSxyMTAKIAlyZmlkCiAJYgkuCS8qIHByZXZlbnQgc3BlY3VsYXRpdmUgZXhlY3V0aW9uICovCkBAIC0xODMsOCArMjI3LDIxIEBACiAJcmZpZAkJLyogcmV0dXJuIHRvIHVzZXJzcGFjZSAqLwogCWIJLgogCi0JU1REX0VYQ0VQVElPTl9QU0VSSUVTKDB4ZDAwLCBzaW5nbGVfc3RlcCkKLQlTVERfRVhDRVBUSU9OX1BTRVJJRVMoMHhlMDAsIHRyYXBfMGUpCisJU1REX0VYQ0VQVElPTl9QU0VSSUVTKDB4ZDAwLCAweGQwMCwgc2luZ2xlX3N0ZXApCisKKwkvKiBBdCAweGU/Pz8gd2UgaGF2ZSBhIGJ1bmNoIG9mIGh5cGVydmlzb3IgZXhjZXB0aW9ucywgd2UgYnJhbmNoCisJICogb3V0IG9mIGxpbmUgdG8gaGFuZGxlIHRoZW0KKwkgKi8KKwkuID0gMHhlMDAKKwliCWhfZGF0YV9zdG9yYWdlX2h2CisJLiA9IDB4ZTIwCisJYgloX2luc3RyX3N0b3JhZ2VfaHYKKwkuID0gMHhlNDAKKwliCWVtdWxhdGlvbl9hc3Npc3RfaHYKKwkuID0gMHhlNTAKKwliCWhtaV9leGNlcHRpb25faHYKKwkuID0gMHhlNjAKKwliCWhtaV9leGNlcHRpb25faHYKIAogCS8qIFdlIG5lZWQgdG8gZGVhbCB3aXRoIHRoZSBBbHRpdmVjIHVuYXZhaWxhYmxlIGV4Y2VwdGlvbgogCSAqIGhlcmUgd2hpY2ggaXMgYXQgMHhmMjAsIHRodXMgaW4gdGhlIG1pZGRsZSBvZiB0aGUKQEAgLTE5MywzOSArMjUwLDQyIEBACiAJICovCiBwZXJmb3JtYW5jZV9tb25pdG9yX3BTZXJpZXNfMToKIAkuID0gMHhmMDAKLQlET19LVk0JMHhmMDAKIAliCXBlcmZvcm1hbmNlX21vbml0b3JfcFNlcmllcwogCiBhbHRpdmVjX3VuYXZhaWxhYmxlX3BTZXJpZXNfMToKIAkuID0gMHhmMjAKLQlET19LVk0JMHhmMjAKIAliCWFsdGl2ZWNfdW5hdmFpbGFibGVfcFNlcmllcwogCiB2c3hfdW5hdmFpbGFibGVfcFNlcmllc18xOgogCS4gPSAweGY0MAotCURPX0tWTQkweGY0MAogCWIJdnN4X3VuYXZhaWxhYmxlX3BTZXJpZXMKIAogI2lmZGVmIENPTkZJR19DQkVfUkFTCi0JSFNURF9FWENFUFRJT05fUFNFUklFUygweDEyMDAsIGNiZV9zeXN0ZW1fZXJyb3IpCisJU1REX0VYQ0VQVElPTl9IVigweDEyMDAsIDB4MTIwMiwgY2JlX3N5c3RlbV9lcnJvcikKICNlbmRpZiAvKiBDT05GSUdfQ0JFX1JBUyAqLwotCVNURF9FWENFUFRJT05fUFNFUklFUygweDEzMDAsIGluc3RydWN0aW9uX2JyZWFrcG9pbnQpCisJU1REX0VYQ0VQVElPTl9QU0VSSUVTKDB4MTMwMCwgMHgxMzAwLCBpbnN0cnVjdGlvbl9icmVha3BvaW50KQogI2lmZGVmIENPTkZJR19DQkVfUkFTCi0JSFNURF9FWENFUFRJT05fUFNFUklFUygweDE2MDAsIGNiZV9tYWludGVuYW5jZSkKKwlTVERfRVhDRVBUSU9OX0hWKDB4MTYwMCwgMHgxNjAyLCBjYmVfbWFpbnRlbmFuY2UpCiAjZW5kaWYgLyogQ09ORklHX0NCRV9SQVMgKi8KLQlTVERfRVhDRVBUSU9OX1BTRVJJRVMoMHgxNzAwLCBhbHRpdmVjX2Fzc2lzdCkKKwlTVERfRVhDRVBUSU9OX1BTRVJJRVMoMHgxNzAwLCAweDE3MDAsIGFsdGl2ZWNfYXNzaXN0KQogI2lmZGVmIENPTkZJR19DQkVfUkFTCi0JSFNURF9FWENFUFRJT05fUFNFUklFUygweDE4MDAsIGNiZV90aGVybWFsKQorCVNURF9FWENFUFRJT05fSFYoMHgxODAwLCAweDE4MDIsIGNiZV90aGVybWFsKQogI2VuZGlmIC8qIENPTkZJR19DQkVfUkFTICovCiAKIAkuID0gMHgzMDAwCiAKLS8qKiogcFNlcmllcyBpbnRlcnJ1cHQgc3VwcG9ydCAqKiovCisvKioqIE91dCBvZiBsaW5lIGludGVycnVwdHMgc3VwcG9ydCAqKiovCisKKwkvKiBtb3ZlZCBmcm9tIDB4ZTAwICovCisJU1REX0VYQ0VQVElPTl9IViguLCAweGUwMCwgaF9kYXRhX3N0b3JhZ2UpCisJU1REX0VYQ0VQVElPTl9IViguLCAweGUyMCwgaF9pbnN0cl9zdG9yYWdlKQorCVNURF9FWENFUFRJT05fSFYoLiwgMHhlNDAsIGVtdWxhdGlvbl9hc3Npc3QpCisJU1REX0VYQ0VQVElPTl9IViguLCAweGU2MCwgaG1pX2V4Y2VwdGlvbikgLyogbmVlZCB0byBmbHVzaCBjYWNoZSA/ICovCiAKIAkvKiBtb3ZlZCBmcm9tIDB4ZjAwICovCi0JU1REX0VYQ0VQVElPTl9QU0VSSUVTKC4sIHBlcmZvcm1hbmNlX21vbml0b3IpCi0JU1REX0VYQ0VQVElPTl9QU0VSSUVTKC4sIGFsdGl2ZWNfdW5hdmFpbGFibGUpCi0JU1REX0VYQ0VQVElPTl9QU0VSSUVTKC4sIHZzeF91bmF2YWlsYWJsZSkKKwlTVERfRVhDRVBUSU9OX1BTRVJJRVMoLiwgMHhmMDAsIHBlcmZvcm1hbmNlX21vbml0b3IpCisJU1REX0VYQ0VQVElPTl9QU0VSSUVTKC4sIDB4ZjIwLCBhbHRpdmVjX3VuYXZhaWxhYmxlKQorCVNURF9FWENFUFRJT05fUFNFUklFUyguLCAweGY0MCwgdnN4X3VuYXZhaWxhYmxlKQogCiAvKgogICogQW4gaW50ZXJydXB0IGNhbWUgaW4gd2hpbGUgc29mdC1kaXNhYmxlZDsgY2xlYXIgRUUgaW4gU1JSMSwKQEAgLTI0MCwxNyArMzAwLDMwIEBACiAJcm90bGRpCXIxMCxyMTAsMTYKIAltdHNwcglTUFJOX1NSUjEscjEwCiAJbGQJcjEwLFBBQ0FfRVhHRU4rRVhfUjEwKHIxMykKLQltZnNwcglyMTMsU1BSTl9TUFJHX1NDUkFUQ0gwCisJR0VUX1NDUkFUQ0gwKHIxMykKIAlyZmlkCiAJYgkuCiAKK21hc2tlZF9IaW50ZXJydXB0OgorCXN0YglyMTAsUEFDQUhBUkRJUlFFTihyMTMpCisJbXRjcmYJMHg4MCxyOQorCWxkCXI5LFBBQ0FfRVhHRU4rRVhfUjkocjEzKQorCW1mc3ByCXIxMCxTUFJOX0hTUlIxCisJcmxkaWNsCXIxMCxyMTAsNDgsMQkJLyogY2xlYXIgTVNSX0VFICovCisJcm90bGRpCXIxMCxyMTAsMTYKKwltdHNwcglTUFJOX0hTUlIxLHIxMAorCWxkCXIxMCxQQUNBX0VYR0VOK0VYX1IxMChyMTMpCisJR0VUX1NDUkFUQ0gwKHIxMykKKwlocmZpZAorCWIJLgorCiAJLmFsaWduCTcKIGRvX3N0YWJfYm9sdGVkX3BTZXJpZXM6CiAJc3RkCXIxMSxQQUNBX0VYU0xCK0VYX1IxMShyMTMpCiAJc3RkCXIxMixQQUNBX0VYU0xCK0VYX1IxMihyMTMpCi0JbWZzcHIJcjEwLFNQUk5fU1BSR19TQ1JBVENIMAorCUdFVF9TQ1JBVENIMChyMTApCiAJc3RkCXIxMCxQQUNBX0VYU0xCK0VYX1IxMyhyMTMpCi0JRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTXzEoLmRvX3N0YWJfYm9sdGVkKQorCUVYQ0VQVElPTl9QUk9MT0dfUFNFUklFU18xKC5kb19zdGFiX2JvbHRlZCwgRVhDX1NURCkKIAogI2lmZGVmIENPTkZJR19QUENfUFNFUklFUwogLyoKQEAgLTI2MCwxNSArMzMzLDE1IEBACiAgICAgICAuYWxpZ24gNwogc3lzdGVtX3Jlc2V0X2Z3bm1pOgogCUhNVF9NRURJVU0KLQltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDAscjEzCQkvKiBzYXZlIHIxMyAqLwotCUVYQ0VQVElPTl9QUk9MT0dfUFNFUklFUyhQQUNBX0VYR0VOLCBzeXN0ZW1fcmVzZXRfY29tbW9uKQorCVNFVF9TQ1JBVENIMChyMTMpCQkvKiBzYXZlIHIxMyAqLworCUVYQ0VQVElPTl9QUk9MT0dfUFNFUklFUyhQQUNBX0VYR0VOLCBzeXN0ZW1fcmVzZXRfY29tbW9uLCBFWENfU1REKQogCiAJLmdsb2JsIG1hY2hpbmVfY2hlY2tfZndubWkKICAgICAgIC5hbGlnbiA3CiBtYWNoaW5lX2NoZWNrX2Z3bm1pOgogCUhNVF9NRURJVU0KLQltdHNwcglTUFJOX1NQUkdfU0NSQVRDSDAscjEzCQkvKiBzYXZlIHIxMyAqLwotCUVYQ0VQVElPTl9QUk9MT0dfUFNFUklFUyhQQUNBX0VYTUMsIG1hY2hpbmVfY2hlY2tfY29tbW9uKQorCVNFVF9TQ1JBVENIMChyMTMpCQkvKiBzYXZlIHIxMyAqLworCUVYQ0VQVElPTl9QUk9MT0dfUFNFUklFUyhQQUNBX0VYTUMsIG1hY2hpbmVfY2hlY2tfY29tbW9uLCBFWENfU1REKQogCiAjZW5kaWYgLyogQ09ORklHX1BQQ19QU0VSSUVTICovCiAKQEAgLTI4Miw3ICszNTUsNyBAQAogCXN0ZAlyMTAsUEFDQV9FWEdFTitFWF9SMTAocjEzKQogCXN0ZAlyMTEsUEFDQV9FWEdFTitFWF9SMTEocjEzKQogCXN0ZAlyMTIsUEFDQV9FWEdFTitFWF9SMTIocjEzKQotCW1mc3ByCXIxMCxTUFJHX1NDUkFUQ0gwCisJR0VUX1NDUkFUQ0gwKHIxMCkKIAlsZAlyMTEsUEFDQV9FWFNMQitFWF9SOShyMTMpCiAJbGQJcjEyLFBBQ0FfRVhTTEIrRVhfUjMocjEzKQogCXN0ZAlyMTAsUEFDQV9FWEdFTitFWF9SMTMocjEzKQpAQCAtMzQyLDYgKzQxNSw4IEBACiAJU1REX0VYQ0VQVElPTl9DT01NT04oMHhiMDAsIHRyYXBfMGIsIC51bmtub3duX2V4Y2VwdGlvbikKIAlTVERfRVhDRVBUSU9OX0NPTU1PTigweGQwMCwgc2luZ2xlX3N0ZXAsIC5zaW5nbGVfc3RlcF9leGNlcHRpb24pCiAJU1REX0VYQ0VQVElPTl9DT01NT04oMHhlMDAsIHRyYXBfMGUsIC51bmtub3duX2V4Y2VwdGlvbikKKyAgICAgICAgU1REX0VYQ0VQVElPTl9DT01NT04oMHhlNDAsIGVtdWxhdGlvbl9hc3Npc3QsIC5wcm9ncmFtX2NoZWNrX2V4Y2VwdGlvbikKKyAgICAgICAgU1REX0VYQ0VQVElPTl9DT01NT04oMHhlNjAsIGhtaV9leGNlcHRpb24sIC51bmtub3duX2V4Y2VwdGlvbikKIAlTVERfRVhDRVBUSU9OX0NPTU1PTl9JRExFKDB4ZjAwLCBwZXJmb3JtYW5jZV9tb25pdG9yLCAucGVyZm9ybWFuY2VfbW9uaXRvcl9leGNlcHRpb24pCiAJU1REX0VYQ0VQVElPTl9DT01NT04oMHgxMzAwLCBpbnN0cnVjdGlvbl9icmVha3BvaW50LCAuaW5zdHJ1Y3Rpb25fYnJlYWtwb2ludF9leGNlcHRpb24pCiAjaWZkZWYgQ09ORklHX0FMVElWRUMKQEAgLTM4Niw5ICs0NjEsMjQgQEAKIAlzdGQJcjEyLF9YRVIocjEpCiAJU0FWRV9HUFIoMCxyMSkKIAlTQVZFX0dQUigyLHIxKQotCVNBVkVfNEdQUlMoMyxyMSkKLQlTQVZFXzJHUFJTKDcscjEpCi0JU0FWRV8xMEdQUlMoMTIscjEpCisJbGQJcjEwLEVYX1IzKHIzKQorCXN0ZAlyMTAsR1BSMyhyMSkKKwlTQVZFX0dQUig0LHIxKQorCVNBVkVfNEdQUlMoNSxyMSkKKwlsZAlyOSxFWF9SOShyMykKKwlsZAlyMTAsRVhfUjEwKHIzKQorCVNBVkVfMkdQUlMoOSxyMSkKKwlsZAlyOSxFWF9SMTEocjMpCisJbGQJcjEwLEVYX1IxMihyMykKKwlsZAlyMTEsRVhfUjEzKHIzKQorCXN0ZAlyOSxHUFIxMShyMSkKKwlzdGQJcjEwLEdQUjEyKHIxKQorCXN0ZAlyMTEsR1BSMTMocjEpCitCRUdJTl9GVFJfU0VDVElPTgorCWxkCXIxMCxFWF9DRkFSKHIzKQorCXN0ZAlyMTAsT1JJR19HUFIzKHIxKQorRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfQ0ZBUikKKwlTQVZFXzhHUFJTKDE0LHIxKQogCVNBVkVfMTBHUFJTKDIyLHIxKQogCWxoeglyMTIsUEFDQV9UUkFQX1NBVkUocjEzKQogCXN0ZAlyMTIsX1RSQVAocjEpCkBAIC0zOTcsNiArNDg3LDkgQEAKIAlsaQlyMTIsMAogCXN0ZAlyMTIsMChyMTEpCiAJbGQJcjIsUEFDQVRPQyhyMTMpCisJbGQJcjExLGV4Y2VwdGlvbl9tYXJrZXJAdG9jKHIyKQorCXN0ZAlyMTIsUkVTVUxUKHIxKQorCXN0ZAlyMTEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQtMTYocjEpCiAxOglhZGRpCXIzLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFECiAJYmwJLmtlcm5lbF9iYWRfc3RhY2sKIAliCTFiCkBAIC00MTksNiArNTEyLDE5IEBACiAJbGkJcjUsMHgzMDAKIAliCS5kb19oYXNoX3BhZ2UJIAkvKiBUcnkgdG8gaGFuZGxlIGFzIGhwdGUgZmF1bHQgKi8KIAorCS5hbGlnbiAgNworICAgICAgICAuZ2xvYmwgIGhfZGF0YV9zdG9yYWdlX2NvbW1vbgoraF9kYXRhX3N0b3JhZ2VfY29tbW9uOgorICAgICAgICBtZnNwciAgIHIxMCxTUFJOX0hEQVIKKyAgICAgICAgc3RkICAgICByMTAsUEFDQV9FWEdFTitFWF9EQVIocjEzKQorICAgICAgICBtZnNwciAgIHIxMCxTUFJOX0hEU0lTUgorICAgICAgICBzdHcgICAgIHIxMCxQQUNBX0VYR0VOK0VYX0RTSVNSKHIxMykKKyAgICAgICAgRVhDRVBUSU9OX1BST0xPR19DT01NT04oMHhlMDAsIFBBQ0FfRVhHRU4pCisgICAgICAgIGJsICAgICAgLnNhdmVfbnZncHJzCisgICAgICAgIGFkZGkgICAgcjMscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKKyAgICAgICAgYmwgICAgICAudW5rbm93bl9leGNlcHRpb24KKyAgICAgICAgYiAgICAgICAucmV0X2Zyb21fZXhjZXB0CisKIAkuYWxpZ24JNwogCS5nbG9ibCBpbnN0cnVjdGlvbl9hY2Nlc3NfY29tbW9uCiBpbnN0cnVjdGlvbl9hY2Nlc3NfY29tbW9uOgpAQCAtNDI4LDYgKzUzNCw4IEBACiAJbGkJcjUsMHg0MDAKIAliCS5kb19oYXNoX3BhZ2UJCS8qIFRyeSB0byBoYW5kbGUgYXMgaHB0ZSBmYXVsdCAqLwogCisgICAgICAgIFNURF9FWENFUFRJT05fQ09NTU9OKDB4ZTIwLCBoX2luc3RyX3N0b3JhZ2UsIC51bmtub3duX2V4Y2VwdGlvbikKKwogLyoKICAqIEhlcmUgaXMgdGhlIGNvbW1vbiBTTEIgbWlzcyB1c2VyIHRoYXQgaXMgdXNlZCB3aGVuIGdvaW5nIHRvIHZpcnR1YWwKICAqIG1vZGUgZm9yIFNMQiBtaXNzZXMsIHRoYXQgaXMgY3VycmVudGx5IG5vdCB1c2VkCkBAIC03NTAsNyArODU4LDcgQEAKIEJFR0lOX0ZUUl9TRUNUSU9OCiAJYW5kaXMuCXIwLHI0LDB4MDAyMAkJLyogSXMgaXQgYSBzZWdtZW50IHRhYmxlIGZhdWx0PyAqLwogCWJuZS0JZG9fc3RlX2FsbG9jCQkvKiBJZiBzbyBoYW5kbGUgaXQgKi8KLUVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX1NMQikKK0VORF9NTVVfRlRSX1NFQ1RJT05fSUZDTFIoTU1VX0ZUUl9TTEIpCiAKIAljbHJyZGkJcjExLHIxLFRIUkVBRF9TSElGVAogCWx3eglyMCxUSV9QUkVFTVBUKHIxMSkJLyogSWYgd2UncmUgaW4gYW4gIk5NSSIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF8zMi5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzMyLlMKaW5kZXggYzVjMjRiZS4uYmEyNTBkNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzMyLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzMyLlMKQEAgLTgwNSwxOSArODA1LDYgQEAKIAlibHIKIAogI2lmZGVmIENPTkZJR19TTVAKLSNpZmRlZiBDT05GSUdfR0VNSU5JCi0JLmdsb2JsCV9fc2Vjb25kYXJ5X3N0YXJ0X2dlbWluaQotX19zZWNvbmRhcnlfc3RhcnRfZ2VtaW5pOgotICAgICAgICBtZnNwciAgIHI0LFNQUk5fSElEMAotICAgICAgICBvcmkgICAgIHI0LHI0LEhJRDBfSUNGSQotICAgICAgICBsaSAgICAgIHIzLDAKLSAgICAgICAgb3JpICAgICByMyxyMyxISUQwX0lDRQotICAgICAgICBhbmRjICAgIHI0LHI0LHIzCi0gICAgICAgIG10c3ByICAgU1BSTl9ISUQwLHI0Ci0gICAgICAgIHN5bmMKLSAgICAgICAgYiAgICAgICBfX3NlY29uZGFyeV9zdGFydAotI2VuZGlmIC8qIENPTkZJR19HRU1JTkkgKi8KLQogCS5nbG9ibCBfX3NlY29uZGFyeV9zdGFydF9tcGM4Nnh4CiBfX3NlY29uZGFyeV9zdGFydF9tcGM4Nnh4OgogCW1mc3ByCXIzLCBTUFJOX1BJUgpAQCAtODkwLDE1ICs4NzcsNiBAQAogCW10c3ByCVNQUk5fU1JSMSxyNAogCVNZTkMKIAlSRkkKLQotX0dMT0JBTChzdGFydF9zZWNvbmRhcnlfcmVzdW1lKQotCS8qIFJlc2V0IHN0YWNrICovCi0Jcmx3aW5tCXIxLHIxLDAsMCwoMzEtVEhSRUFEX1NISUZUKQkvKiBjdXJyZW50X3RocmVhZF9pbmZvKCkgKi8KLQlhZGRpCXIxLHIxLFRIUkVBRF9TSVpFLVNUQUNLX0ZSQU1FX09WRVJIRUFECi0JbGkJcjMsMAotCXN0ZAlyMywwKHIxKQkJLyogWmVybyB0aGUgc3RhY2sgZnJhbWUgcG9pbnRlcgkqLwotCWJsCXN0YXJ0X3NlY29uZGFyeQotCWIJLgogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogI2lmZGVmIENPTkZJR19LVk1fQk9PSzNTX0hBTkRMRVIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKaW5kZXggM2EzMTlmOS4uYmE1MDQwOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKQEAgLTE0Nyw2ICsxNDcsOCBAQAogCW10Y3RyCXI0CiAJbXIJcjMscjI0CiAJbGkJcjQsMAorCS8qIE1ha2Ugc3VyZSB0aGF0IHBhdGNoZWQgY29kZSBpcyB2aXNpYmxlICovCisJaXN5bmMKIAliY3RyCiAjZWxzZQogCUJVR19PUENPREUKQEAgLTIxNiwxOSArMjE4LDI1IEBACiAJICovCiAJTE9BRF9SRUdfQUREUihyMTMsIHBhY2EpCS8qIExvYWQgcGFjYSBwb2ludGVyCQkgKi8KIAlsZAlyMTMsMChyMTMpCQkvKiBHZXQgYmFzZSB2YWRkciBvZiBwYWNhIGFycmF5CSAqLworI2lmbmRlZiBDT05GSUdfU01QCisJYWRkaQlyMTMscjEzLFBBQ0FfU0laRQkvKiBrbm93IHIxMyBpZiB1c2VkIGFjY2lkZW50YWxseSAqLworCWIJLmtleGVjX3dhaXQJCS8qIHdhaXQgZm9yIG5leHQga2VybmVsIGlmICFTTVAJICovCisjZWxzZQorCUxPQURfUkVHX0FERFIocjcsIG5yX2NwdV9pZHMpCS8qIExvYWQgbnJfY3B1X2lkcyBhZGRyZXNzICAgICAgICovCisJbHd6CXI3LDAocjcpCQkvKiBhbHNvIHRoZSBtYXggcGFjYSBhbGxvY2F0ZWQgCSAqLwogCWxpCXI1LDAJCQkvKiBsb2dpY2FsIGNwdSBpZCAgICAgICAgICAgICAgICAqLwogMToJbGh6CXI2LFBBQ0FIV0NQVUlEKHIxMykJLyogTG9hZCBIVyBwcm9jaWQgZnJvbSBwYWNhICAgICAgKi8KIAljbXB3CXI2LHIyNAkJCS8qIENvbXBhcmUgdG8gb3VyIGlkICAgICAgICAgICAgICovCiAJYmVxCTJmCiAJYWRkaQlyMTMscjEzLFBBQ0FfU0laRQkvKiBMb29wIHRvIG5leHQgUEFDQSBvbiBtaXNzICAgICAqLwogCWFkZGkJcjUscjUsMQotCWNtcHdpCXI1LE5SX0NQVVMKKwljbXB3CXI1LHI3CQkJLyogQ2hlY2sgaWYgbW9yZSBwYWNhcyBleGlzdCAgICAgKi8KIAlibHQJMWIKIAogCW1yCXIzLHIyNAkJCS8qIG5vdCBmb3VuZCwgY29weSBwaHlzIHRvIHIzCSAqLwogCWIJLmtleGVjX3dhaXQJCS8qIG5leHQga2VybmVsIG1pZ2h0IGRvIGJldHRlcgkgKi8KIAotMjoJbXRzcHIJU1BSTl9TUFJHX1BBQ0EscjEzCS8qIFNhdmUgdmFkZHIgb2YgcGFjYSBpbiBhbiBTUFJHICovCisyOglTRVRfUEFDQShyMTMpCiAjaWZkZWYgQ09ORklHX1BQQ19CT09LM0UKIAlhZGRpCXIxMixyMTMsUEFDQV9FWFRMQgkvKiBhbmQgVExCIGV4YyBmcmFtZSBpbiBhbm90aGVyICAqLwogCW10c3ByCVNQUk5fU1BSR19UTEJfRVhGUkFNRSxyMTIKQEAgLTIzNiwzNCArMjQ0LDM5IEBACiAKIAkvKiBGcm9tIG5vdyBvbiwgcjI0IGlzIGV4cGVjdGVkIHRvIGJlIGxvZ2ljYWwgY3B1aWQgKi8KIAltcglyMjQscjUKLTM6CUhNVF9MT1cKLQlsYnoJcjIzLFBBQ0FQUk9DU1RBUlQocjEzKQkvKiBUZXN0IGlmIHRoaXMgcHJvY2Vzc29yIHNob3VsZCAqLwotCQkJCQkvKiBzdGFydC4JCQkgKi8KLQotI2lmbmRlZiBDT05GSUdfU01QCi0JYgkzYgkJCS8qIE5ldmVyIGdvIG9uIG5vbi1TTVAJCSAqLwotI2Vsc2UKLQljbXB3aQkwLHIyMywwCi0JYmVxCTNiCQkJLyogTG9vcCB1bnRpbCB0b2xkIHRvIGdvCSAqLwotCi0Jc3luYwkJCQkvKiBvcmRlciBwYWNhLnJ1biBhbmQgY3VyX2NwdV9zcGVjICovCiAKIAkvKiBTZWUgaWYgd2UgbmVlZCB0byBjYWxsIGEgY3B1IHN0YXRlIHJlc3RvcmUgaGFuZGxlciAqLwogCUxPQURfUkVHX0FERFIocjIzLCBjdXJfY3B1X3NwZWMpCiAJbGQJcjIzLDAocjIzKQogCWxkCXIyMyxDUFVfU1BFQ19SRVNUT1JFKHIyMykKIAljbXBkaQkwLHIyMywwCi0JYmVxCTRmCisJYmVxCTNmCiAJbGQJcjIzLDAocjIzKQogCW10Y3RyCXIyMwogCWJjdHJsCiAKLTQ6CS8qIENyZWF0ZSBhIHRlbXAga2VybmVsIHN0YWNrIGZvciB1c2UgYmVmb3JlIHJlbG9jYXRpb24gaXMgb24uCSovCiszOglMT0FEX1JFR19BRERSKHIzLCBib290X2NwdV9jb3VudCkgLyogRGVjcmVtZW50IGJvb3RfY3B1X2NvdW50ICovCisJbHdhcngJcjQsMCxyMworCXN1YmkJcjQscjQsMQorCXN0d2N4LglyNCwwLHIzCisJYm5lCTNiCisJaXN5bmMKKworNDoJSE1UX0xPVworCWxieglyMjMsUEFDQVBST0NTVEFSVChyMTMpCS8qIFRlc3QgaWYgdGhpcyBwcm9jZXNzb3Igc2hvdWxkICovCisJCQkJCS8qIHN0YXJ0LgkJCSAqLworCWNtcHdpCTAscjIzLDAKKwliZXEJNGIJCQkvKiBMb29wIHVudGlsIHRvbGQgdG8gZ28JICovCisKKwlzeW5jCQkJCS8qIG9yZGVyIHBhY2EucnVuIGFuZCBjdXJfY3B1X3NwZWMgKi8KKwlpc3luYwkJCQkvKiBJbiBjYXNlIGNvZGUgcGF0Y2hpbmcgaGFwcGVuZWQgKi8KKworCS8qIENyZWF0ZSBhIHRlbXAga2VybmVsIHN0YWNrIGZvciB1c2UgYmVmb3JlIHJlbG9jYXRpb24gaXMgb24uCSovCiAJbGQJcjEsUEFDQUVNRVJHU1AocjEzKQogCXN1YmkJcjEscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKIAogCWIJX19zZWNvbmRhcnlfc3RhcnQKLSNlbmRpZgorI2VuZGlmIC8qIFNNUCAqLwogCiAvKgogICogVHVybiB0aGUgTU1VIG9mZi4KQEAgLTUzNCw3ICs1NDcsNyBAQAogCWxkCXI0LDAocjQpCQkvKiBHZXQgYmFzZSB2YWRkciBvZiBwYWNhIGFycmF5CSovCiAJbXVsbGkJcjEzLHIyNCxQQUNBX1NJWkUJLyogQ2FsY3VsYXRlIHZhZGRyIG9mIHJpZ2h0IHBhY2EgKi8KIAlhZGQJcjEzLHIxMyxyNAkJLyogZm9yIHRoaXMgcHJvY2Vzc29yLgkJKi8KLQltdHNwcglTUFJOX1NQUkdfUEFDQSxyMTMJLyogU2F2ZSB2YWRkciBvZiBwYWNhIGluIGFuIFNQUkcqLworCVNFVF9QQUNBKHIxMykJCQkvKiBTYXZlIHZhZGRyIG9mIHBhY2EgaW4gYW4gU1BSRyovCiAKIAkvKiBNYXJrIGludGVycnVwdHMgc29mdCBhbmQgaGFyZCBkaXNhYmxlZCAodGhleSBtaWdodCBiZSBlbmFibGVkCiAJICogaW4gdGhlIFBBQ0Egd2hlbiBkb2luZyBob3RwbHVnKQpAQCAtNjQ1LDcgKzY1OCw3IEBACiAJb3JpcwlyMTEscjExLDB4ODAwMAkJLyogQ00gYml0IHNldCwgd2UnbGwgc2V0IElDTSBsYXRlciAqLwogCW10bXNyCXIxMQogI2Vsc2UgLyogQ09ORklHX1BQQ19CT09LM0UgKi8KLQlsaQlyMTIsKE1TUl9TRiB8IE1TUl9JU0YpQGhpZ2hlc3QKKwlsaQlyMTIsKE1TUl82NEJJVCB8IE1TUl9JU0YpQGhpZ2hlc3QKIAlzbGRpCXIxMixyMTIsNDgKIAlvcglyMTEscjExLHIxMgogCW10bXNyZAlyMTEKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWRsZV9wb3dlcjcuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWRsZV9wb3dlcjcuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGYwYmM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pZGxlX3Bvd2VyNy5TCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBwb3dlcl9zYXZlIGZ1bmN0aW9uIGZvciA5NzAtZmFtaWx5IENQVXMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS9wcGMtb3Bjb2RlLmg+CisKKyN1bmRlZiBERUJVRworCisJLnRleHQKKworX0dMT0JBTChwb3dlcjdfaWRsZSkKKwkvKiBOb3cgY2hlY2sgaWYgdXNlciBvciBhcmNoIGVuYWJsZWQgTkFQIG1vZGUgKi8KKwlMT0FEX1JFR19BRERSQkFTRShyMyxwb3dlcnNhdmVfbmFwKQorCWx3eglyNCxBRERST0ZGKHBvd2Vyc2F2ZV9uYXApKHIzKQorCWNtcHdpCTAscjQsMAorCWJlcWxyCisKKwkvKiBOQVAgaXMgYSBzdGF0ZSBsb3NzLCB3ZSBjcmVhdGUgYSByZWdzIGZyYW1lIG9uIHRoZQorCSAqIHN0YWNrLCBmaWxsIGl0IHVwIHdpdGggdGhlIHN0YXRlIHdlIGNhcmUgYWJvdXQgYW5kCisJICogc3RpY2sgYSBwb2ludGVyIHRvIGl0IGluIFBBQ0FSMS4gV2UgcmVhbGx5IG9ubHkKKwkgKiBuZWVkIHRvIHNhdmUgUEMsIHNvbWUgQ1IgYml0cyBhbmQgdGhlIE5WIEdQUnMsCisJICogYnV0IGZvciBub3cgYW4gaW50ZXJydXB0IGZyYW1lIHdpbGwgZG8uCisJICovCisJbWZscglyMAorCXN0ZAlyMCwxNihyMSkKKwlzdGR1CXIxLC1JTlRfRlJBTUVfU0laRShyMSkKKwlzdGQJcjAsX0xJTksocjEpCisJc3RkCXIwLF9OSVAocjEpCisKKyNpZm5kZWYgQ09ORklHX1NNUAorCS8qIE1ha2Ugc3VyZSBGUFUsIFZTWCBldGMuLi4gYXJlIGZsdXNoZWQgYXMgd2UgbWF5IGxvc2UKKwkgKiBzdGF0ZSB3aGVuIGdvaW5nIHRvIG5hcCBtb2RlCisJICovCisJYmwJLmRpc2NhcmRfbGF6eV9jcHVfc3RhdGUKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKKwkvKiBIYXJkIGRpc2FibGUgaW50ZXJydXB0cyAqLworCW1mbXNyCXI5CisJcmxkaWNsCXI5LHI5LDQ4LDEKKwlyb3RsZGkJcjkscjksMTYKKwltdG1zcmQJcjksMQkJCS8qIGhhcmQtZGlzYWJsZSBpbnRlcnJ1cHRzICovCisJbGkJcjAsMAorCXN0YglyMCxQQUNBU09GVElSUUVOKHIxMykJLyogd2UnbGwgaGFyZC1lbmFibGUgc2hvcnRseSAqLworCXN0YglyMCxQQUNBSEFSRElSUUVOKHIxMykKKworCS8qIENvbnRpbnVlIHNhdmluZyBzdGF0ZSAqLworCVNBVkVfR1BSKDIsIHIxKQorCVNBVkVfTlZHUFJTKHIxKQorCW1mY3IJcjMKKwlzdGQJcjMsX0NDUihyMSkKKwlzdGQJcjksX01TUihyMSkKKwlzdGQJcjEsUEFDQVIxKHIxMykKKworCS8qIE1hZ2ljIE5BUCBtb2RlIGVudGVyIHNlcXVlbmNlICovCisJc3RkCXIwLDAocjEpCisJcHRlc3luYworCWxkCXIwLDAocjEpCisxOgljbXAJY3IwLHIwLHIwCisJYm5lCTFiCisJUFBDX05BUAorCWIJLgorCitfR0xPQkFMKHBvd2VyN193YWtldXBfbG9zcykKKwlHRVRfUEFDQShyMTMpCisJbGQJcjEsUEFDQVIxKHIxMykKKwlSRVNUX05WR1BSUyhyMSkKKwlSRVNUX0dQUigyLCByMSkKKwlsZAlyMyxfQ0NSKHIxKQorCWxkCXI0LF9NU1IocjEpCisJbGQJcjUsX05JUChyMSkKKwlhZGRpCXIxLHIxLElOVF9GUkFNRV9TSVpFCisJbXRjcglyMworCW10c3ByCVNQUk5fU1JSMSxyNAorCW10c3ByCVNQUk5fU1JSMCxyNQorCXJmaWQKKworX0dMT0JBTChwb3dlcjdfd2FrZXVwX25vbG9zcykKKwlHRVRfUEFDQShyMTMpCisJbGQJcjEsUEFDQVIxKHIxMykKKwlsZAlyNCxfTVNSKHIxKQorCWxkCXI1LF9OSVAocjEpCisJYWRkaQlyMSxyMSxJTlRfRlJBTUVfU0laRQorCW10c3ByCVNQUk5fU1JSMSxyNAorCW10c3ByCVNQUk5fU1JSMCxyNQorCXJmaWQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pby13b3JrYXJvdW5kcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pby13b3JrYXJvdW5kcy5jCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pby13b3JrYXJvdW5kcy5jCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL2lvLXdvcmthcm91bmRzLmMKaW5kZXggNWMxMTE4ZS4uZmZhZmFlYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvLXdvcmthcm91bmRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pby13b3JrYXJvdW5kcy5jCkBAIC0xNyw4ICsxNyw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wcGMtcGNpLmg+Ci0KLSNpbmNsdWRlICJpby13b3JrYXJvdW5kcy5oIgorI2luY2x1ZGUgPGFzbS9pby13b3JrYXJvdW5kcy5oPgogCiAjZGVmaW5lIElPV0FfTUFYX0JVUwk4CiAKQEAgLTE0NSw3ICsxNDQsMTkgQEAKIAlyZXR1cm4gcmVzOwogfQogCi0vKiBSZWdpc3QgbmV3IGJ1cyB0byBzdXBwb3J0IHdvcmthcm91bmQgKi8KKy8qIEVuYWJsZSBJTyB3b3JrYXJvdW5kICovCitzdGF0aWMgdm9pZCBfX2RldmluaXQgaW9fd29ya2Fyb3VuZF9pbml0KHZvaWQpCit7CisJc3RhdGljIGludCBpb193b3JrYXJvdW5kX2luaXRlZDsKKworCWlmIChpb193b3JrYXJvdW5kX2luaXRlZCkKKwkJcmV0dXJuOworCXBwY19wY2lfaW8gPSBpb3dhX3BjaV9pbzsKKwlwcGNfbWQuaW9yZW1hcCA9IGlvd2FfaW9yZW1hcDsKKwlpb193b3JrYXJvdW5kX2luaXRlZCA9IDE7Cit9CisKKy8qIFJlZ2lzdGVyIG5ldyBidXMgdG8gc3VwcG9ydCB3b3JrYXJvdW5kICovCiB2b2lkIF9fZGV2aW5pdCBpb3dhX3JlZ2lzdGVyX2J1cyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKnBoYiwKIAkJCXN0cnVjdCBwcGNfcGNpX2lvICpvcHMsCiAJCQlpbnQgKCppbml0ZnVuYykoc3RydWN0IGlvd2FfYnVzICosIHZvaWQgKiksIHZvaWQgKmRhdGEpCkBAIC0xNTMsNiArMTY0LDggQEAKIAlzdHJ1Y3QgaW93YV9idXMgKmJ1czsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGhiLT5kbjsKIAorCWlvX3dvcmthcm91bmRfaW5pdCgpOworCiAJaWYgKGlvd2FfYnVzX2NvdW50ID49IElPV0FfTUFYX0JVUykgewogCQlwcl9lcnIoIklPV0E6VG9vIG1hbnkgcGNpIGJyaWRnZXMsICIKIAkJICAgICAgICJ3b3JrYXJvdW5kcyBkaXNhYmxlZCBmb3IgJXNcbiIsIG5wLT5mdWxsX25hbWUpOwpAQCAtMTYyLDYgKzE3NSw3IEBACiAJYnVzID0gJmlvd2FfYnVzc2VzW2lvd2FfYnVzX2NvdW50XTsKIAlidXMtPnBoYiA9IHBoYjsKIAlidXMtPm9wcyA9IG9wczsKKwlidXMtPnByaXZhdGUgPSBkYXRhOwogCiAJaWYgKGluaXRmdW5jKQogCQlpZiAoKCppbml0ZnVuYykoYnVzLCBkYXRhKSkKQEAgLTE3MiwxNCArMTg2LDMgQEAKIAlwcl9kZWJ1ZygiSU9XQTpbJWRdQWRkIGJ1cywgJXMuXG4iLCBpb3dhX2J1c19jb3VudC0xLCBucC0+ZnVsbF9uYW1lKTsKIH0KIAotLyogZW5hYmxlIElPIHdvcmthcm91bmQgKi8KLXZvaWQgX19kZXZpbml0IGlvX3dvcmthcm91bmRfaW5pdCh2b2lkKQotewotCXN0YXRpYyBpbnQgaW9fd29ya2Fyb3VuZF9pbml0ZWQ7Ci0KLQlpZiAoaW9fd29ya2Fyb3VuZF9pbml0ZWQpCi0JCXJldHVybjsKLQlwcGNfcGNpX2lvID0gaW93YV9wY2lfaW87Ci0JcHBjX21kLmlvcmVtYXAgPSBpb3dhX2lvcmVtYXA7Ci0JaW9fd29ya2Fyb3VuZF9pbml0ZWQgPSAxOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKaW5kZXggZjYyMWI3ZC4uYTI0ZDM3ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCkBAIC02Niw3ICs2Niw2IEBACiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAjaW5jbHVkZSA8YXNtL3VkYmcuaD4KLSNpbmNsdWRlIDxhc20vZGJlbGwuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CiAKICNpZmRlZiBDT05GSUdfUFBDNjQKQEAgLTE2MCw3ICsxNTksOCBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfQk9PS0UpICYmIGRlZmluZWQoQ09ORklHX1NNUCkKIAkvKiBDaGVjayBmb3IgcGVuZGluZyBkb29yYmVsbCBpbnRlcnJ1cHRzIGFuZCByZXNlbmQgdG8gb3Vyc2VsZiAqLwotCWRvb3JiZWxsX2NoZWNrX3NlbGYoKTsKKwlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfREJFTEwpKQorCQlzbXBfbXV4ZWRfaXBpX3Jlc2VuZCgpOwogI2VuZGlmCiAKIAkvKgpAQCAtMzk3LDI0ICszOTcsMjggQEAKIHZvaWQgZXhjX2x2bF9jdHhfaW5pdCh2b2lkKQogewogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdHA7Ci0JaW50IGksIGh3X2NwdTsKKwlpbnQgaSwgY3B1X25yOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKLQkJaHdfY3B1ID0gZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChpKTsKLQkJbWVtc2V0KCh2b2lkICopY3JpdGlycV9jdHhbaHdfY3B1XSwgMCwgVEhSRUFEX1NJWkUpOwotCQl0cCA9IGNyaXRpcnFfY3R4W2h3X2NwdV07Ci0JCXRwLT5jcHUgPSBpOworI2lmZGVmIENPTkZJR19QUEM2NAorCQljcHVfbnIgPSBpOworI2Vsc2UKKwkJY3B1X25yID0gZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChpKTsKKyNlbmRpZgorCQltZW1zZXQoKHZvaWQgKiljcml0aXJxX2N0eFtjcHVfbnJdLCAwLCBUSFJFQURfU0laRSk7CisJCXRwID0gY3JpdGlycV9jdHhbY3B1X25yXTsKKwkJdHAtPmNwdSA9IGNwdV9ucjsKIAkJdHAtPnByZWVtcHRfY291bnQgPSAwOwogCiAjaWZkZWYgQ09ORklHX0JPT0tFCi0JCW1lbXNldCgodm9pZCAqKWRiZ2lycV9jdHhbaHdfY3B1XSwgMCwgVEhSRUFEX1NJWkUpOwotCQl0cCA9IGRiZ2lycV9jdHhbaHdfY3B1XTsKLQkJdHAtPmNwdSA9IGk7CisJCW1lbXNldCgodm9pZCAqKWRiZ2lycV9jdHhbY3B1X25yXSwgMCwgVEhSRUFEX1NJWkUpOworCQl0cCA9IGRiZ2lycV9jdHhbY3B1X25yXTsKKwkJdHAtPmNwdSA9IGNwdV9ucjsKIAkJdHAtPnByZWVtcHRfY291bnQgPSAwOwogCi0JCW1lbXNldCgodm9pZCAqKW1jaGVja2lycV9jdHhbaHdfY3B1XSwgMCwgVEhSRUFEX1NJWkUpOwotCQl0cCA9IG1jaGVja2lycV9jdHhbaHdfY3B1XTsKLQkJdHAtPmNwdSA9IGk7CisJCW1lbXNldCgodm9pZCAqKW1jaGVja2lycV9jdHhbY3B1X25yXSwgMCwgVEhSRUFEX1NJWkUpOworCQl0cCA9IG1jaGVja2lycV9jdHhbY3B1X25yXTsKKwkJdHAtPmNwdSA9IGNwdV9ucjsKIAkJdHAtPnByZWVtcHRfY291bnQgPSBIQVJESVJRX09GRlNFVDsKICNlbmRpZgogCX0KQEAgLTQ3NywyMCArNDgxLDQxIEBACiAgKiBJUlEgY29udHJvbGxlciBhbmQgdmlydHVhbCBpbnRlcnJ1cHRzCiAgKi8KIAorLyogVGhlIG1haW4gaXJxIG1hcCBpdHNlbGYgaXMgYW4gYXJyYXkgb2YgTlJfSVJRIGVudHJpZXMgY29udGFpbmluZyB0aGUKKyAqIGFzc29jaWF0ZSBob3N0IGFuZCBpcnEgbnVtYmVyLiBBbiBlbnRyeSB3aXRoIGEgaG9zdCBvZiBOVUxMIGlzIGZyZWUuCisgKiBBbiBlbnRyeSBjYW4gYmUgYWxsb2NhdGVkIGlmIGl0J3MgZnJlZSwgdGhlIGFsbG9jYXRvciBhbHdheXMgdGhlbiBzZXRzCisgKiBod2lycSBmaXJzdCB0byB0aGUgaG9zdCdzIGludmFsaWQgaXJxIG51bWJlciBhbmQgdGhlbiBmaWxscyBvcHMuCisgKi8KK3N0cnVjdCBpcnFfbWFwX2VudHJ5IHsKKwlpcnFfaHdfbnVtYmVyX3QJaHdpcnE7CisJc3RydWN0IGlycV9ob3N0CSpob3N0OworfTsKKwogc3RhdGljIExJU1RfSEVBRChpcnFfaG9zdHMpOwogc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soaXJxX2JpZ19sb2NrKTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmV2bWFwX3RyZWVzX2FsbG9jYXRlZDsKIHN0YXRpYyBERUZJTkVfTVVURVgocmV2bWFwX3RyZWVzX211dGV4KTsKLXN0cnVjdCBpcnFfbWFwX2VudHJ5IGlycV9tYXBbTlJfSVJRU107CitzdGF0aWMgc3RydWN0IGlycV9tYXBfZW50cnkgaXJxX21hcFtOUl9JUlFTXTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXJxX3ZpcnFfY291bnQgPSBOUl9JUlFTOwogc3RhdGljIHN0cnVjdCBpcnFfaG9zdCAqaXJxX2RlZmF1bHRfaG9zdDsKIAoraXJxX2h3X251bWJlcl90IGlycWRfdG9faHdpcnEoc3RydWN0IGlycV9kYXRhICpkKQoreworCXJldHVybiBpcnFfbWFwW2QtPmlycV0uaHdpcnE7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpcnFkX3RvX2h3aXJxKTsKKwogaXJxX2h3X251bWJlcl90IHZpcnFfdG9faHcodW5zaWduZWQgaW50IHZpcnEpCiB7CiAJcmV0dXJuIGlycV9tYXBbdmlycV0uaHdpcnE7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh2aXJxX3RvX2h3KTsKIAorYm9vbCB2aXJxX2lzX2hvc3QodW5zaWduZWQgaW50IHZpcnEsIHN0cnVjdCBpcnFfaG9zdCAqaG9zdCkKK3sKKwlyZXR1cm4gaXJxX21hcFt2aXJxXS5ob3N0ID09IGhvc3Q7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh2aXJxX2lzX2hvc3QpOworCiBzdGF0aWMgaW50IGRlZmF1bHRfaXJxX2hvc3RfbWF0Y2goc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQogewogCXJldHVybiBoLT5vZl9ub2RlICE9IE5VTEwgJiYgaC0+b2Zfbm9kZSA9PSBucDsKQEAgLTUxMSw3ICs1MzYsNyBAQAogCS8qIEFsbG9jYXRlIHN0cnVjdHVyZSBhbmQgcmV2bWFwIHRhYmxlIGlmIHVzaW5nIGxpbmVhciBtYXBwaW5nICovCiAJaWYgKHJldm1hcF90eXBlID09IElSUV9IT1NUX01BUF9MSU5FQVIpCiAJCXNpemUgKz0gcmV2bWFwX2FyZyAqIHNpemVvZih1bnNpZ25lZCBpbnQpOwotCWhvc3QgPSB6YWxsb2NfbWF5YmVfYm9vdG1lbShzaXplLCBHRlBfS0VSTkVMKTsKKwlob3N0ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoaG9zdCA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtNTYxLDE0ICs1ODYsMTQgQEAKIAkJCWlycV9tYXBbaV0uaG9zdCA9IGhvc3Q7CiAJCQlzbXBfd21iKCk7CiAKLQkJCS8qIENsZWFyIG5vcmVxdWVzdCBmbGFncyAqLwotCQkJaXJxX2NsZWFyX3N0YXR1c19mbGFncyhpLCBJUlFfTk9SRVFVRVNUKTsKLQogCQkJLyogTGVnYWN5IGZsYWdzIGFyZSBsZWZ0IHRvIGRlZmF1bHQgYXQgdGhpcyBwb2ludCwKIAkJCSAqIG9uZSBjYW4gdGhlbiB1c2UgaXJxX2NyZWF0ZV9tYXBwaW5nKCkgdG8KIAkJCSAqIGV4cGxpY2l0bHkgY2hhbmdlIHRoZW0KIAkJCSAqLwogCQkJb3BzLT5tYXAoaG9zdCwgaSwgaSk7CisKKwkJCS8qIENsZWFyIG5vcmVxdWVzdCBmbGFncyAqLworCQkJaXJxX2NsZWFyX3N0YXR1c19mbGFncyhpLCBJUlFfTk9SRVFVRVNUKTsKIAkJfQogCQlicmVhazsKIAljYXNlIElSUV9IT1NUX01BUF9MSU5FQVI6CkBAIC01NzksNiArNjA0LDkgQEAKIAkJc21wX3dtYigpOwogCQlob3N0LT5yZXZtYXBfZGF0YS5saW5lYXIucmV2bWFwID0gcm1hcDsKIAkJYnJlYWs7CisJY2FzZSBJUlFfSE9TVF9NQVBfVFJFRToKKwkJSU5JVF9SQURJWF9UUkVFKCZob3N0LT5yZXZtYXBfZGF0YS50cmVlLCBHRlBfS0VSTkVMKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtNjM2LDggKzY2NCw2IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JaXJxX2NsZWFyX3N0YXR1c19mbGFncyh2aXJxLCBJUlFfTk9SRVFVRVNUKTsKLQogCS8qIG1hcCBpdCAqLwogCXNtcF93bWIoKTsKIAlpcnFfbWFwW3ZpcnFdLmh3aXJxID0gaHdpcnE7CkBAIC02NDgsNiArNjc0LDggQEAKIAkJZ290byBlcnJkZXNjOwogCX0KIAorCWlycV9jbGVhcl9zdGF0dXNfZmxhZ3ModmlycSwgSVJRX05PUkVRVUVTVCk7CisKIAlyZXR1cm4gMDsKIAogZXJyZGVzYzoKQEAgLTcwNCw4ICs3MzIsNiBAQAogCSAqLwogCXZpcnEgPSBpcnFfZmluZF9tYXBwaW5nKGhvc3QsIGh3aXJxKTsKIAlpZiAodmlycSAhPSBOT19JUlEpIHsKLQkJaWYgKGhvc3QtPm9wcy0+cmVtYXApCi0JCQlob3N0LT5vcHMtPnJlbWFwKGhvc3QsIHZpcnEsIGh3aXJxKTsKIAkJcHJfZGVidWcoImlycTogLT4gZXhpc3RpbmcgbWFwcGluZyBvbiB2aXJxICVkXG4iLCB2aXJxKTsKIAkJcmV0dXJuIHZpcnE7CiAJfQpAQCAtNzg2LDE0ICs4MTIsMTUgQEAKIAkJcmV0dXJuOwogCiAJaG9zdCA9IGlycV9tYXBbdmlycV0uaG9zdDsKLQlXQVJOX09OIChob3N0ID09IE5VTEwpOwotCWlmIChob3N0ID09IE5VTEwpCisJaWYgKFdBUk5fT04oaG9zdCA9PSBOVUxMKSkKIAkJcmV0dXJuOwogCiAJLyogTmV2ZXIgdW5tYXAgbGVnYWN5IGludGVycnVwdHMgKi8KIAlpZiAoaG9zdC0+cmV2bWFwX3R5cGUgPT0gSVJRX0hPU1RfTUFQX0xFR0FDWSkKIAkJcmV0dXJuOwogCisJaXJxX3NldF9zdGF0dXNfZmxhZ3ModmlycSwgSVJRX05PUkVRVUVTVCk7CisKIAkvKiByZW1vdmUgY2hpcCBhbmQgaGFuZGxlciAqLwogCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCBOVUxMLCBOVUxMKTsKIApAQCAtODEzLDEzICs4NDAsNiBAQAogCQkJaG9zdC0+cmV2bWFwX2RhdGEubGluZWFyLnJldm1hcFtod2lycV0gPSBOT19JUlE7CiAJCWJyZWFrOwogCWNhc2UgSVJRX0hPU1RfTUFQX1RSRUU6Ci0JCS8qCi0JCSAqIENoZWNrIGlmIHJhZGl4IHRyZWUgYWxsb2NhdGVkIHlldCwgaWYgbm90IHRoZW4gbm90aGluZyB0bwotCQkgKiByZW1vdmUuCi0JCSAqLwotCQlzbXBfcm1iKCk7Ci0JCWlmIChyZXZtYXBfdHJlZXNfYWxsb2NhdGVkIDwgMSkKLQkJCWJyZWFrOwogCQltdXRleF9sb2NrKCZyZXZtYXBfdHJlZXNfbXV0ZXgpOwogCQlyYWRpeF90cmVlX2RlbGV0ZSgmaG9zdC0+cmV2bWFwX2RhdGEudHJlZSwgaHdpcnEpOwogCQltdXRleF91bmxvY2soJnJldm1hcF90cmVlc19tdXRleCk7CkBAIC04MzAsOCArODUwLDYgQEAKIAlzbXBfbWIoKTsKIAlpcnFfbWFwW3ZpcnFdLmh3aXJxID0gaG9zdC0+aW52YWxfaXJxOwogCi0JaXJxX3NldF9zdGF0dXNfZmxhZ3ModmlycSwgSVJRX05PUkVRVUVTVCk7Ci0KIAlpcnFfZnJlZV9kZXNjcyh2aXJxLCAxKTsKIAkvKiBGcmVlIGl0ICovCiAJaXJxX2ZyZWVfdmlydCh2aXJxLCAxKTsKQEAgLTg3NywxNiArODk1LDkgQEAKIAlzdHJ1Y3QgaXJxX21hcF9lbnRyeSAqcHRyOwogCXVuc2lnbmVkIGludCB2aXJxOwogCi0JV0FSTl9PTihob3N0LT5yZXZtYXBfdHlwZSAhPSBJUlFfSE9TVF9NQVBfVFJFRSk7Ci0KLQkvKgotCSAqIENoZWNrIGlmIHRoZSByYWRpeCB0cmVlIGV4aXN0cyBhbmQgaGFzIGJlZSBpbml0aWFsaXplZC4KLQkgKiBJZiBub3QsIHdlIGZhbGxiYWNrIHRvIHNsb3cgbW9kZQotCSAqLwotCWlmIChyZXZtYXBfdHJlZXNfYWxsb2NhdGVkIDwgMikKKwlpZiAoV0FSTl9PTl9PTkNFKGhvc3QtPnJldm1hcF90eXBlICE9IElSUV9IT1NUX01BUF9UUkVFKSkKIAkJcmV0dXJuIGlycV9maW5kX21hcHBpbmcoaG9zdCwgaHdpcnEpOwogCi0JLyogTm93IHRyeSB0byByZXNvbHZlICovCiAJLyoKIAkgKiBObyByY3VfcmVhZF9sb2NrKGluZykgbmVlZGVkLCB0aGUgcHRyIHJldHVybmVkIGNhbid0IGdvIHVuZGVyIHVzCiAJICogYXMgaXQncyByZWZlcmVuY2luZyBhbiBlbnRyeSBpbiB0aGUgc3RhdGljIGlycV9tYXAgdGFibGUuCkBAIC05MDksMTYgKzkyMCw3IEBACiB2b2lkIGlycV9yYWRpeF9yZXZtYXBfaW5zZXJ0KHN0cnVjdCBpcnFfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IHZpcnEsCiAJCQkgICAgIGlycV9od19udW1iZXJfdCBod2lycSkKIHsKLQotCVdBUk5fT04oaG9zdC0+cmV2bWFwX3R5cGUgIT0gSVJRX0hPU1RfTUFQX1RSRUUpOwotCi0JLyoKLQkgKiBDaGVjayBpZiB0aGUgcmFkaXggdHJlZSBleGlzdHMgeWV0LgotCSAqIElmIG5vdCwgdGhlbiB0aGUgaXJxIHdpbGwgYmUgaW5zZXJ0ZWQgaW50byB0aGUgdHJlZSB3aGVuIGl0IGdldHMKLQkgKiBpbml0aWFsaXplZC4KLQkgKi8KLQlzbXBfcm1iKCk7Ci0JaWYgKHJldm1hcF90cmVlc19hbGxvY2F0ZWQgPCAxKQorCWlmIChXQVJOX09OKGhvc3QtPnJldm1hcF90eXBlICE9IElSUV9IT1NUX01BUF9UUkVFKSkKIAkJcmV0dXJuOwogCiAJaWYgKHZpcnEgIT0gTk9fSVJRKSB7CkBAIC05MzQsNyArOTM2LDggQEAKIHsKIAl1bnNpZ25lZCBpbnQgKnJldm1hcDsKIAotCVdBUk5fT04oaG9zdC0+cmV2bWFwX3R5cGUgIT0gSVJRX0hPU1RfTUFQX0xJTkVBUik7CisJaWYgKFdBUk5fT05fT05DRShob3N0LT5yZXZtYXBfdHlwZSAhPSBJUlFfSE9TVF9NQVBfTElORUFSKSkKKwkJcmV0dXJuIGlycV9maW5kX21hcHBpbmcoaG9zdCwgaHdpcnEpOwogCiAJLyogQ2hlY2sgcmV2bWFwIGJvdW5kcyAqLwogCWlmICh1bmxpa2VseShod2lycSA+PSBob3N0LT5yZXZtYXBfZGF0YS5saW5lYXIuc2l6ZSkpCkBAIC0xMDI4LDUzICsxMDMxLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogV2UgbmVlZCB0byBjcmVhdGUgdGhlIHJhZGl4IHRyZWVzIGxhdGUgKi8KLXN0YXRpYyBpbnQgaXJxX2xhdGVfaW5pdCh2b2lkKQotewotCXN0cnVjdCBpcnFfaG9zdCAqaDsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCS8qCi0JICogTm8gbXV0dWFsIGV4Y2x1c2lvbiB3aXRoIHJlc3BlY3QgdG8gYWNjZXNzb3JzIG9mIHRoZSB0cmVlIGlzIG5lZWRlZAotCSAqIGhlcmUgYXMgdGhlIHN5bmNocm9uaXphdGlvbiBpcyBkb25lIHZpYSB0aGUgc3RhdGUgdmFyaWFibGUKLQkgKiByZXZtYXBfdHJlZXNfYWxsb2NhdGVkLgotCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoaCwgJmlycV9ob3N0cywgbGluaykgewotCQlpZiAoaC0+cmV2bWFwX3R5cGUgPT0gSVJRX0hPU1RfTUFQX1RSRUUpCi0JCQlJTklUX1JBRElYX1RSRUUoJmgtPnJldm1hcF9kYXRhLnRyZWUsIEdGUF9LRVJORUwpOwotCX0KLQotCS8qCi0JICogTWFrZSBzdXJlIHRoZSByYWRpeCB0cmVlcyBpbml0cyBhcmUgdmlzaWJsZSBiZWZvcmUgc2V0dGluZwotCSAqIHRoZSBmbGFnCi0JICovCi0Jc21wX3dtYigpOwotCXJldm1hcF90cmVlc19hbGxvY2F0ZWQgPSAxOwotCi0JLyoKLQkgKiBJbnNlcnQgdGhlIHJldmVyc2UgbWFwcGluZyBmb3IgdGhvc2UgaW50ZXJydXB0cyBhbHJlYWR5IHByZXNlbnQKLQkgKiBpbiBpcnFfbWFwW10uCi0JICovCi0JbXV0ZXhfbG9jaygmcmV2bWFwX3RyZWVzX211dGV4KTsKLQlmb3IgKGkgPSAwOyBpIDwgaXJxX3ZpcnFfY291bnQ7IGkrKykgewotCQlpZiAoaXJxX21hcFtpXS5ob3N0ICYmCi0JCSAgICAoaXJxX21hcFtpXS5ob3N0LT5yZXZtYXBfdHlwZSA9PSBJUlFfSE9TVF9NQVBfVFJFRSkpCi0JCQlyYWRpeF90cmVlX2luc2VydCgmaXJxX21hcFtpXS5ob3N0LT5yZXZtYXBfZGF0YS50cmVlLAotCQkJCQkgIGlycV9tYXBbaV0uaHdpcnEsICZpcnFfbWFwW2ldKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZyZXZtYXBfdHJlZXNfbXV0ZXgpOwotCi0JLyoKLQkgKiBNYWtlIHN1cmUgdGhlIHJhZGl4IHRyZWVzIGluc2VydGlvbnMgYXJlIHZpc2libGUgYmVmb3JlIHNldHRpbmcKLQkgKiB0aGUgZmxhZwotCSAqLwotCXNtcF93bWIoKTsKLQlyZXZtYXBfdHJlZXNfYWxsb2NhdGVkID0gMjsKLQotCXJldHVybiAwOwotfQotYXJjaF9pbml0Y2FsbChpcnFfbGF0ZV9pbml0KTsKLQogI2lmZGVmIENPTkZJR19WSVJRX0RFQlVHCiBzdGF0aWMgaW50IHZpcnFfZGVidWdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpCiB7CkBAIC0xMDgyLDEwICsxMDM4LDExIEBACiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCWNvbnN0IGNoYXIgKnA7CiAJc3RhdGljIGNvbnN0IGNoYXIgbm9uZVtdID0gIm5vbmUiOworCXZvaWQgKmRhdGE7CiAJaW50IGk7CiAKLQlzZXFfcHJpbnRmKG0sICIlLTVzICAlLTdzICAlLTE1cyAgJXNcbiIsICJ2aXJxIiwgImh3aXJxIiwKLQkJICAgICAgImNoaXAgbmFtZSIsICJob3N0IG5hbWUiKTsKKwlzZXFfcHJpbnRmKG0sICIlLTVzICAlLTdzICAlLTE1cyAgJS0xOHMgICVzXG4iLCAidmlycSIsICJod2lycSIsCisJCSAgICAgICJjaGlwIG5hbWUiLCAiY2hpcCBkYXRhIiwgImhvc3QgbmFtZSIpOwogCiAJZm9yIChpID0gMTsgaSA8IG5yX2lycXM7IGkrKykgewogCQlkZXNjID0gaXJxX3RvX2Rlc2MoaSk7CkBAIC0xMDk4LDcgKzEwNTUsNyBAQAogCQkJc3RydWN0IGlycV9jaGlwICpjaGlwOwogCiAJCQlzZXFfcHJpbnRmKG0sICIlNWQgICIsIGkpOwotCQkJc2VxX3ByaW50ZihtLCAiMHglMDVseCAgIiwgdmlycV90b19odyhpKSk7CisJCQlzZXFfcHJpbnRmKG0sICIweCUwNWx4ICAiLCBpcnFfbWFwW2ldLmh3aXJxKTsKIAogCQkJY2hpcCA9IGlycV9kZXNjX2dldF9jaGlwKGRlc2MpOwogCQkJaWYgKGNoaXAgJiYgY2hpcC0+bmFtZSkKQEAgLTExMDcsNiArMTA2NCw5IEBACiAJCQkJcCA9IG5vbmU7CiAJCQlzZXFfcHJpbnRmKG0sICIlLTE1cyAgIiwgcCk7CiAKKwkJCWRhdGEgPSBpcnFfZGVzY19nZXRfY2hpcF9kYXRhKGRlc2MpOworCQkJc2VxX3ByaW50ZihtLCAiMHglMTZwICAiLCBkYXRhKTsKKwogCQkJaWYgKGlycV9tYXBbaV0uaG9zdCAmJiBpcnFfbWFwW2ldLmhvc3QtPm9mX25vZGUpCiAJCQkJcCA9IGlycV9tYXBbaV0uaG9zdC0+b2Zfbm9kZS0+ZnVsbF9uYW1lOwogCQkJZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9rZ2RiLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2tnZGIuYwppbmRleCA0Mjg1MGVlLi5iZDlkMzVmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2tnZGIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2tnZGIuYwpAQCAtMTA5LDcgKzEwOSw3IEBACiAjaWZkZWYgQ09ORklHX1NNUAogdm9pZCBrZ2RiX3JvdW5kdXBfY3B1cyh1bnNpZ25lZCBsb25nIGZsYWdzKQogewotCXNtcF9zZW5kX2RlYnVnZ2VyX2JyZWFrKE1TR19BTExfQlVUX1NFTEYpOworCXNtcF9zZW5kX2RlYnVnZ2VyX2JyZWFrKCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYwppbmRleCAzMDFkYjY1Li44NGRhYWJlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYwpAQCAtMTMyLDM0ICsxMzIsNiBAQAogLyoKICAqIE1ldGhvZHMgdXNlZCB0byBmZXRjaCBMUEFSIGRhdGEgd2hlbiBydW5uaW5nIG9uIGEgcFNlcmllcyBwbGF0Zm9ybS4KICAqLwotLyoqCi0gKiBoX2dldF9tcHAKLSAqIEhfR0VUX01QUCBoY2FsbCByZXR1cm5zIGluZm8gaW4gNyBwYXJtcwotICovCi1pbnQgaF9nZXRfbXBwKHN0cnVjdCBodmNhbGxfbXBwX2RhdGEgKm1wcF9kYXRhKQotewotCWludCByYzsKLQl1bnNpZ25lZCBsb25nIHJldGJ1ZltQTFBBUl9IQ0FMTDlfQlVGU0laRV07Ci0KLQlyYyA9IHBscGFyX2hjYWxsOShIX0dFVF9NUFAsIHJldGJ1Zik7Ci0KLQltcHBfZGF0YS0+ZW50aXRsZWRfbWVtID0gcmV0YnVmWzBdOwotCW1wcF9kYXRhLT5tYXBwZWRfbWVtID0gcmV0YnVmWzFdOwotCi0JbXBwX2RhdGEtPmdyb3VwX251bSA9IChyZXRidWZbMl0gPj4gMiAqIDgpICYgMHhmZmZmOwotCW1wcF9kYXRhLT5wb29sX251bSA9IHJldGJ1ZlsyXSAmIDB4ZmZmZjsKLQotCW1wcF9kYXRhLT5tZW1fd2VpZ2h0ID0gKHJldGJ1ZlszXSA+PiA3ICogOCkgJiAweGZmOwotCW1wcF9kYXRhLT51bmFsbG9jYXRlZF9tZW1fd2VpZ2h0ID0gKHJldGJ1ZlszXSA+PiA2ICogOCkgJiAweGZmOwotCW1wcF9kYXRhLT51bmFsbG9jYXRlZF9lbnRpdGxlbWVudCA9IHJldGJ1ZlszXSAmIDB4ZmZmZmZmZmZmZmZmOwotCi0JbXBwX2RhdGEtPnBvb2xfc2l6ZSA9IHJldGJ1Zls0XTsKLQltcHBfZGF0YS0+bG9hbl9yZXF1ZXN0ID0gcmV0YnVmWzVdOwotCW1wcF9kYXRhLT5iYWNraW5nX21lbSA9IHJldGJ1Zls2XTsKLQotCXJldHVybiByYzsKLX0KLUVYUE9SVF9TWU1CT0woaF9nZXRfbXBwKTsKIAogc3RydWN0IGh2Y2FsbF9wcHBfZGF0YSB7CiAJdTY0CWVudGl0bGVtZW50OwpAQCAtMzQ1LDYgKzMxNywzMCBAQAogCXNlcV9wcmludGYobSwgImJhY2tpbmdfbWVtb3J5PSVsZCBieXRlc1xuIiwgbXBwX2RhdGEuYmFja2luZ19tZW0pOwogfQogCisvKioKKyAqIHBhcnNlX21wcF94X2RhdGEKKyAqIFBhcnNlIG91dCBkYXRhIHJldHVybmVkIGZyb20gaF9nZXRfbXBwX3gKKyAqLworc3RhdGljIHZvaWQgcGFyc2VfbXBwX3hfZGF0YShzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCit7CisJc3RydWN0IGh2Y2FsbF9tcHBfeF9kYXRhIG1wcF94X2RhdGE7CisKKwlpZiAoIWZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfWENNTykpCisJCXJldHVybjsKKwlpZiAoaF9nZXRfbXBwX3goJm1wcF94X2RhdGEpKQorCQlyZXR1cm47CisKKwlzZXFfcHJpbnRmKG0sICJjb2FsZXNjZWRfYnl0ZXM9JWxkXG4iLCBtcHBfeF9kYXRhLmNvYWxlc2NlZF9ieXRlcyk7CisKKwlpZiAobXBwX3hfZGF0YS5wb29sX2NvYWxlc2NlZF9ieXRlcykKKwkJc2VxX3ByaW50ZihtLCAicG9vbF9jb2FsZXNjZWRfYnl0ZXM9JWxkXG4iLAorCQkJICAgbXBwX3hfZGF0YS5wb29sX2NvYWxlc2NlZF9ieXRlcyk7CisJaWYgKG1wcF94X2RhdGEucG9vbF9wdXJyX2N5Y2xlcykKKwkJc2VxX3ByaW50ZihtLCAiY29hbGVzY2VfcG9vbF9wdXJyPSVsZFxuIiwgbXBwX3hfZGF0YS5wb29sX3B1cnJfY3ljbGVzKTsKKwlpZiAobXBwX3hfZGF0YS5wb29sX3NwdXJyX2N5Y2xlcykKKwkJc2VxX3ByaW50ZihtLCAiY29hbGVzY2VfcG9vbF9zcHVycj0lbGRcbiIsIG1wcF94X2RhdGEucG9vbF9zcHVycl9jeWNsZXMpOworfQorCiAjZGVmaW5lIFNQTFBBUl9DSEFSQUNURVJJU1RJQ1NfVE9LRU4gMjAKICNkZWZpbmUgU1BMUEFSX01BWExFTkdUSCAxMDI2KihzaXplb2YoY2hhcikpCiAKQEAgLTUyMCw2ICs1MTYsNyBAQAogCQlwYXJzZV9zeXN0ZW1fcGFyYW1ldGVyX3N0cmluZyhtKTsKIAkJcGFyc2VfcHBwX2RhdGEobSk7CiAJCXBhcnNlX21wcF9kYXRhKG0pOworCQlwYXJzZV9tcHBfeF9kYXRhKG0pOwogCQlwc2VyaWVzX2Ntb19kYXRhKG0pOwogCQlzcGxwYXJfZGlzcGF0Y2hfZGF0YShtKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzMyLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfMzIuUwppbmRleCAwOTRiZDk4Li45OThhMTAwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfMzIuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfMzIuUwpAQCAtNjk0LDYgKzY5NCwxNyBAQAogCWFkZGkJcjEscjEsMTYKIAlibHIKIAorI2lmZGVmIENPTkZJR19TTVAKK19HTE9CQUwoc3RhcnRfc2Vjb25kYXJ5X3Jlc3VtZSkKKwkvKiBSZXNldCBzdGFjayAqLworCXJsd2lubQlyMSxyMSwwLDAsKDMxLVRIUkVBRF9TSElGVCkJLyogY3VycmVudF90aHJlYWRfaW5mbygpICovCisJYWRkaQlyMSxyMSxUSFJFQURfU0laRS1TVEFDS19GUkFNRV9PVkVSSEVBRAorCWxpCXIzLDAKKwlzdHcJcjMsMChyMSkJCS8qIFplcm8gdGhlIHN0YWNrIGZyYW1lIHBvaW50ZXIJKi8KKwlibAlzdGFydF9zZWNvbmRhcnkKKwliCS4KKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisJCiAvKgogICogVGhpcyByb3V0aW5lIGlzIGp1c3QgaGVyZSB0byBrZWVwIEdDQyBoYXBweSAtIHNpZ2guLi4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzY0LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfNjQuUwppbmRleCAyMDZhMzIxLi5lODlkZjU5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfNjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfNjQuUwpAQCAtNDYyLDcgKzQ2Miw4IEBACiAgKiB3YWl0IGZvciB0aGUgZmxhZyB0byBjaGFuZ2UsIGluZGljYXRpbmcgdGhpcyBrZXJuZWwgaXMgZ29pbmcgYXdheSBidXQKICAqIHRoZSBzbGF2ZSBjb2RlIGZvciB0aGUgbmV4dCBvbmUgaXMgYXQgYWRkcmVzc2VzIDAgdG8gMTAwLgogICoKLSAqIFRoaXMgaXMgdXNlZCBieSBhbGwgc2xhdmVzLgorICogVGhpcyBpcyB1c2VkIGJ5IGFsbCBzbGF2ZXMsIGV2ZW4gdGhvc2UgdGhhdCBkaWQgbm90IGZpbmQgYSBtYXRjaGluZworICogcGFjYSBpbiB0aGUgc2Vjb25kYXJ5IHN0YXJ0dXAgY29kZS4KICAqCiAgKiBQaHlzaWNhbCAoaGFyZHdhcmUpIGNwdSBpZCBzaG91bGQgYmUgaW4gcjMuCiAgKi8KQEAgLTQ3MSwxMCArNDcyLDYgQEAKIDE6CW1mbHIJcjUKIAlhZGRpCXI1LHI1LGtleGVjX2ZsYWctMWIKIAotCWxpCXI0LEtFWEVDX1NUQVRFX1JFQUxfTU9ERQotCXN0YglyNCxQQUNBS0VYRUNTVEFURShyMTMpCi0JU1lOQwotCiA5OToJSE1UX0xPVwogI2lmZGVmIENPTkZJR19LRVhFQwkJLyogdXNlIG5vIG1lbW9yeSB3aXRob3V0IGtleGVjICovCiAJbHd6CXI0LDAocjUpCkBAIC00OTksMTEgKzQ5NiwxNyBAQAogICoKICAqIGdldCBwaHlzIGlkIGZyb20gcGFjYQogICogc3dpdGNoIHRvIHJlYWwgbW9kZQorICogbWFyayB0aGUgcGFjYSBhcyBubyBsb25nZXIgdXNlZAogICogam9pbiBvdGhlciBjcHVzIGluIGtleGVjX3dhaXQocGh5c19pZCkKICAqLwogX0dMT0JBTChrZXhlY19zbXBfd2FpdCkKIAlsaHoJcjMsUEFDQUhXQ1BVSUQocjEzKQogCWJsCXJlYWxfbW9kZQorCisJbGkJcjQsS0VYRUNfU1RBVEVfUkVBTF9NT0RFCisJc3RiCXI0LFBBQ0FLRVhFQ1NUQVRFKHIxMykKKwlTWU5DCisKIAliCS5rZXhlY193YWl0CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BhY2EuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGFjYS5jCmluZGV4IDEwZjBhYWQuLmVmZWI4ODEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGFjYS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGFjYS5jCkBAIC03LDcgKzcsNyBAQAogICogICAgICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KIApAQCAtMTU2LDE4ICsxNTYsMjkgQEAKIC8qIFB1dCB0aGUgcGFjYSBwb2ludGVyIGludG8gcjEzIGFuZCBTUFJHX1BBQ0EgKi8KIHZvaWQgc2V0dXBfcGFjYShzdHJ1Y3QgcGFjYV9zdHJ1Y3QgKm5ld19wYWNhKQogeworCS8qIFNldHVwIHIxMyAqLwogCWxvY2FsX3BhY2EgPSBuZXdfcGFjYTsKLQltdHNwcihTUFJOX1NQUkdfUEFDQSwgbG9jYWxfcGFjYSk7CisKICNpZmRlZiBDT05GSUdfUFBDX0JPT0szRQorCS8qIE9uIEJvb2szRSwgaW5pdGlhbGl6ZSB0aGUgVExCIG1pc3MgZXhjZXB0aW9uIGZyYW1lcyAqLwogCW10c3ByKFNQUk5fU1BSR19UTEJfRVhGUkFNRSwgbG9jYWxfcGFjYS0+ZXh0bGIpOworI2Vsc2UKKwkvKiBJbiBIViBtb2RlLCB3ZSBzZXR1cCBib3RoIEhQQUNBIGFuZCBQQUNBIHRvIGF2b2lkIHByb2JsZW1zCisJICogaWYgd2UgZG8gYSBHRVRfUEFDQSgpIGJlZm9yZSB0aGUgZmVhdHVyZSBmaXh1cHMgaGF2ZSBiZWVuCisJICogYXBwbGllZAorCSAqLworCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9IVk1PREVfMjA2KSkKKwkJbXRzcHIoU1BSTl9TUFJHX0hQQUNBLCBsb2NhbF9wYWNhKTsKICNlbmRpZgorCW10c3ByKFNQUk5fU1BSR19QQUNBLCBsb2NhbF9wYWNhKTsKKwogfQogCiBzdGF0aWMgaW50IF9faW5pdGRhdGEgcGFjYV9zaXplOwogCiB2b2lkIF9faW5pdCBhbGxvY2F0ZV9wYWNhcyh2b2lkKQogewotCWludCBucl9jcHVzLCBjcHUsIGxpbWl0OworCWludCBjcHUsIGxpbWl0OwogCiAJLyoKIAkgKiBXZSBjYW4ndCB0YWtlIFNMQiBtaXNzZXMgb24gdGhlIHBhY2EsIGFuZCB3ZSB3YW50IHRvIGFjY2VzcyB0aGVtCkBAIC0xNzksMjMgKzE5MCwxOCBAQAogCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0lTRVJJRVMpKQogCQlsaW1pdCA9IG1pbihsaW1pdCwgSHZQYWdlc1RvTWFwICogSFZQQUdFU0laRSk7CiAKLQlucl9jcHVzID0gTlJfQ1BVUzsKLQkvKiBPbiBpU2VyaWVzIHdlIGtub3cgd2UgY2FuIG5ldmVyIGhhdmUgbW9yZSB0aGFuIDY0IGNwdXMgKi8KLQlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSkKLQkJbnJfY3B1cyA9IG1pbig2NCwgbnJfY3B1cyk7Ci0KLQlwYWNhX3NpemUgPSBQQUdFX0FMSUdOKHNpemVvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QpICogbnJfY3B1cyk7CisJcGFjYV9zaXplID0gUEFHRV9BTElHTihzaXplb2Yoc3RydWN0IHBhY2Ffc3RydWN0KSAqIG5yX2NwdV9pZHMpOwogCiAJcGFjYSA9IF9fdmEobWVtYmxvY2tfYWxsb2NfYmFzZShwYWNhX3NpemUsIFBBR0VfU0laRSwgbGltaXQpKTsKIAltZW1zZXQocGFjYSwgMCwgcGFjYV9zaXplKTsKIAogCXByaW50ayhLRVJOX0RFQlVHICJBbGxvY2F0ZWQgJXUgYnl0ZXMgZm9yICVkIHBhY2FzIGF0ICVwXG4iLAotCQlwYWNhX3NpemUsIG5yX2NwdXMsIHBhY2EpOworCQlwYWNhX3NpemUsIG5yX2NwdV9pZHMsIHBhY2EpOwogCi0JYWxsb2NhdGVfbHBwYWNhcyhucl9jcHVzLCBsaW1pdCk7CisJYWxsb2NhdGVfbHBwYWNhcyhucl9jcHVfaWRzLCBsaW1pdCk7CiAKIAkvKiBDYW4ndCB1c2UgZm9yX2VhY2hfKl9jcHUsIGFzIHRoZXkgYXJlbid0IGZ1bmN0aW9uYWwgeWV0ICovCi0JZm9yIChjcHUgPSAwOyBjcHUgPCBucl9jcHVzOyBjcHUrKykKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IG5yX2NwdV9pZHM7IGNwdSsrKQogCQlpbml0aWFsaXNlX3BhY2EoJnBhY2FbY3B1XSwgY3B1KTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfZG4uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpX2RuLmMKaW5kZXggZDIyNWQ5OS4uNmJhYWJjMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfZG4uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV9kbi5jCkBAIC00MywxMCArNDMsOSBAQAogCWNvbnN0IHUzMiAqcmVnczsKIAlzdHJ1Y3QgcGNpX2RuICpwZG47CiAKLQlwZG4gPSBhbGxvY19tYXliZV9ib290bWVtKHNpemVvZigqcGRuKSwgR0ZQX0tFUk5FTCk7CisJcGRuID0gemFsbG9jX21heWJlX2Jvb3RtZW0oc2l6ZW9mKCpwZG4pLCBHRlBfS0VSTkVMKTsKIAlpZiAocGRuID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwotCW1lbXNldChwZG4sIDAsIHNpemVvZigqcGRuKSk7CiAJZG4tPmRhdGEgPSBwZG47CiAJcGRuLT5ub2RlID0gZG47CiAJcGRuLT5waGIgPSBwaGI7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGNfa3N5bXMuYwppbmRleCBlZjNlZjU2Li43ZDI4ZjU0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMKQEAgLTU0LDcgKzU0LDYgQEAKIGV4dGVybiBpbnQgc3lzX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKIEVYUE9SVF9TWU1CT0woY2xlYXJfcGFnZXMpOwotRVhQT1JUX1NZTUJPTChjb3B5X3BhZ2UpOwogRVhQT1JUX1NZTUJPTChJU0FfRE1BX1RIUkVTSE9MRCk7CiBFWFBPUlRfU1lNQk9MKERNQV9NT0RFX1JFQUQpOwogRVhQT1JUX1NZTUJPTChETUFfTU9ERV9XUklURSk7CkBAIC04OCw5ICs4Nyw3IEBACiBFWFBPUlRfU1lNQk9MKF9fY2xlYXJfdXNlcik7CiBFWFBPUlRfU1lNQk9MKF9fc3RybmNweV9mcm9tX3VzZXIpOwogRVhQT1JUX1NZTUJPTChfX3N0cm5sZW5fdXNlcik7Ci0jaWZkZWYgQ09ORklHX1BQQzY0Ci1FWFBPUlRfU1lNQk9MKGNvcHlfNEtfcGFnZSk7Ci0jZW5kaWYKK0VYUE9SVF9TWU1CT0woY29weV9wYWdlKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDT05GSUdfUFBDMzIpCiBFWFBPUlRfU1lNQk9MKGlzYV9pb19iYXNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggZjc0ZjM1NS4uMDk1MDQzZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTcwMiw2ICs3MDIsOCBAQAogLyoKICAqIENvcHkgYSB0aHJlYWQuLgogICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBkc2NyX2RlZmF1bHQ7IC8qIGRlZmluZWQgaW4gYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jICovCisKIGludCBjb3B5X3RocmVhZCh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHVzcCwKIAkJdW5zaWduZWQgbG9uZyB1bnVzZWQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKIAkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC03NTUsMTEgKzc1NywxMSBAQAogCQkJCV9BTElHTl9VUChzaXplb2Yoc3RydWN0IHRocmVhZF9pbmZvKSwgMTYpOwogCiAjaWZkZWYgQ09ORklHX1BQQ19TVERfTU1VXzY0Ci0JaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1NMQikpIHsKKwlpZiAobW11X2hhc19mZWF0dXJlKE1NVV9GVFJfU0xCKSkgewogCQl1bnNpZ25lZCBsb25nIHNwX3ZzaWQ7CiAJCXVuc2lnbmVkIGxvbmcgbGxwID0gbW11X3BzaXplX2RlZnNbbW11X2xpbmVhcl9wc2l6ZV0uc2xscDsKIAotCQlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfMVRfU0VHTUVOVCkpCisJCWlmIChtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl8xVF9TRUdNRU5UKSkKIAkJCXNwX3ZzaWQgPSBnZXRfa2VybmVsX3ZzaWQoc3AsIE1NVV9TRUdTSVpFXzFUKQogCQkJCTw8IFNMQl9WU0lEX1NISUZUXzFUOwogCQllbHNlCkBAIC03NjksNiArNzcxLDIwIEBACiAJCXAtPnRocmVhZC5rc3BfdnNpZCA9IHNwX3ZzaWQ7CiAJfQogI2VuZGlmIC8qIENPTkZJR19QUENfU1REX01NVV82NCAqLworI2lmZGVmIENPTkZJR19QUEM2NCAKKwlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfRFNDUikpIHsKKwkJaWYgKGN1cnJlbnQtPnRocmVhZC5kc2NyX2luaGVyaXQpIHsKKwkJCXAtPnRocmVhZC5kc2NyX2luaGVyaXQgPSAxOworCQkJcC0+dGhyZWFkLmRzY3IgPSBjdXJyZW50LT50aHJlYWQuZHNjcjsKKwkJfSBlbHNlIGlmICgwICE9IGRzY3JfZGVmYXVsdCkgeworCQkJcC0+dGhyZWFkLmRzY3JfaW5oZXJpdCA9IDE7CisJCQlwLT50aHJlYWQuZHNjciA9IGRzY3JfZGVmYXVsdDsKKwkJfSBlbHNlIHsKKwkJCXAtPnRocmVhZC5kc2NyX2luaGVyaXQgPSAwOworCQkJcC0+dGhyZWFkLmRzY3IgPSAwOworCQl9CisJfQorI2VuZGlmCiAKIAkvKgogCSAqIFRoZSBQUEM2NCBBQkkgbWFrZXMgdXNlIG9mIGEgVE9DIHRvIGNvbnRhaW4gZnVuY3Rpb24gCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCmluZGV4IGU3NGZhMTIuLjQ4YWViNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCkBAIC02OCw2ICs2OCw3IEBACiB1bnNpZ25lZCBsb25nIHRjZV9hbGxvY19zdGFydCwgdGNlX2FsbG9jX2VuZDsKIHU2NCBwcGM2NF9ybWFfc2l6ZTsKICNlbmRpZgorc3RhdGljIHBoeXNfYWRkcl90IGZpcnN0X21lbWJsb2NrX3NpemU7CiAKIHN0YXRpYyBpbnQgX19pbml0IGVhcmx5X3BhcnNlX21lbShjaGFyICpwKQogewpAQCAtMTIzLDE4ICsxMjQsMTkgQEAKICAqLwogc3RhdGljIHN0cnVjdCBpYm1fcGFfZmVhdHVyZSB7CiAJdW5zaWduZWQgbG9uZwljcHVfZmVhdHVyZXM7CS8qIENQVV9GVFJfeHh4IGJpdCAqLworCXVuc2lnbmVkIGxvbmcJbW11X2ZlYXR1cmVzOwkvKiBNTVVfRlRSX3h4eCBiaXQgKi8KIAl1bnNpZ25lZCBpbnQJY3B1X3VzZXJfZnRyczsJLyogUFBDX0ZFQVRVUkVfeHh4IGJpdCAqLwogCXVuc2lnbmVkIGNoYXIJcGFieXRlOwkJLyogYnl0ZSBudW1iZXIgaW4gaWJtLHBhLWZlYXR1cmVzICovCiAJdW5zaWduZWQgY2hhcglwYWJpdDsJCS8qIGJpdCBudW1iZXIgKGJpZy1lbmRpYW4pICovCiAJdW5zaWduZWQgY2hhcglpbnZlcnQ7CQkvKiBpZiAxLCBwYSBiaXQgc2V0ID0+IGNsZWFyIGZlYXR1cmUgKi8KIH0gaWJtX3BhX2ZlYXR1cmVzW10gX19pbml0ZGF0YSA9IHsKLQl7MCwgUFBDX0ZFQVRVUkVfSEFTX01NVSwJMCwgMCwgMH0sCi0JezAsIFBQQ19GRUFUVVJFX0hBU19GUFUsCTAsIDEsIDB9LAotCXtDUFVfRlRSX1NMQiwgMCwJCTAsIDIsIDB9LAotCXtDUFVfRlRSX0NUUkwsIDAsCQkwLCAzLCAwfSwKLQl7Q1BVX0ZUUl9OT0VYRUNVVEUsIDAsCQkwLCA2LCAwfSwKLQl7Q1BVX0ZUUl9OT0RTSVNSQUxJR04sIDAsCTEsIDEsIDF9LAotCXtDUFVfRlRSX0NJX0xBUkdFX1BBR0UsIDAsCTEsIDIsIDB9LAorCXswLCAwLCBQUENfRkVBVFVSRV9IQVNfTU1VLAkwLCAwLCAwfSwKKwl7MCwgMCwgUFBDX0ZFQVRVUkVfSEFTX0ZQVSwJMCwgMSwgMH0sCisJezAsIE1NVV9GVFJfU0xCLCAwLAkJMCwgMiwgMH0sCisJe0NQVV9GVFJfQ1RSTCwgMCwgMCwJCTAsIDMsIDB9LAorCXtDUFVfRlRSX05PRVhFQ1VURSwgMCwgMCwJMCwgNiwgMH0sCisJe0NQVV9GVFJfTk9EU0lTUkFMSUdOLCAwLCAwLAkxLCAxLCAxfSwKKwl7MCwgTU1VX0ZUUl9DSV9MQVJHRV9QQUdFLCAwLAkxLCAyLCAwfSwKIAl7Q1BVX0ZUUl9SRUFMX0xFLCBQUENfRkVBVFVSRV9UUlVFX0xFLCA1LCAwLCAwfSwKIH07CiAKQEAgLTE2Niw5ICsxNjgsMTEgQEAKIAkJaWYgKGJpdCBeIGZwLT5pbnZlcnQpIHsKIAkJCWN1cl9jcHVfc3BlYy0+Y3B1X2ZlYXR1cmVzIHw9IGZwLT5jcHVfZmVhdHVyZXM7CiAJCQljdXJfY3B1X3NwZWMtPmNwdV91c2VyX2ZlYXR1cmVzIHw9IGZwLT5jcHVfdXNlcl9mdHJzOworCQkJY3VyX2NwdV9zcGVjLT5tbXVfZmVhdHVyZXMgfD0gZnAtPm1tdV9mZWF0dXJlczsKIAkJfSBlbHNlIHsKIAkJCWN1cl9jcHVfc3BlYy0+Y3B1X2ZlYXR1cmVzICY9IH5mcC0+Y3B1X2ZlYXR1cmVzOwogCQkJY3VyX2NwdV9zcGVjLT5jcHVfdXNlcl9mZWF0dXJlcyAmPSB+ZnAtPmNwdV91c2VyX2Z0cnM7CisJCQljdXJfY3B1X3NwZWMtPm1tdV9mZWF0dXJlcyAmPSB+ZnAtPm1tdV9mZWF0dXJlczsKIAkJfQogCX0KIH0KQEAgLTI2OCwxMyArMjcyLDEzIEBACiAJCQkJCSAgY29uc3QgY2hhciAqdW5hbWUsIGludCBkZXB0aCwKIAkJCQkJICB2b2lkICpkYXRhKQogewotCXN0YXRpYyBpbnQgbG9naWNhbF9jcHVpZCA9IDA7CiAJY2hhciAqdHlwZSA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImRldmljZV90eXBlIiwgTlVMTCk7CiAJY29uc3QgdTMyICpwcm9wOwogCWNvbnN0IHUzMiAqaW50c2VydjsKIAlpbnQgaSwgbnRocmVhZHM7CiAJdW5zaWduZWQgbG9uZyBsZW47Ci0JaW50IGZvdW5kID0gMDsKKwlpbnQgZm91bmQgPSAtMTsKKwlpbnQgZm91bmRfdGhyZWFkID0gMDsKIAogCS8qIFdlIGFyZSBzY2FubmluZyAiY3B1IiBub2RlcyBvbmx5ICovCiAJaWYgKHR5cGUgPT0gTlVMTCB8fCBzdHJjbXAodHlwZSwgImNwdSIpICE9IDApCkBAIC0yOTgsMTEgKzMwMiwxMCBAQAogCQkgKiB2ZXJzaW9uIDIgb2YgdGhlIGtleGVjIHBhcmFtIGZvcm1hdCBhZGRzIHRoZSBwaHlzIGNwdWlkIG9mCiAJCSAqIGJvb3RlZCBwcm9jLgogCQkgKi8KLQkJaWYgKGluaXRpYWxfYm9vdF9wYXJhbXMgJiYgaW5pdGlhbF9ib290X3BhcmFtcy0+dmVyc2lvbiA+PSAyKSB7Ci0JCQlpZiAoaW50c2VydltpXSA9PQotCQkJCQlpbml0aWFsX2Jvb3RfcGFyYW1zLT5ib290X2NwdWlkX3BoeXMpIHsKLQkJCQlmb3VuZCA9IDE7Ci0JCQkJYnJlYWs7CisJCWlmIChpbml0aWFsX2Jvb3RfcGFyYW1zLT52ZXJzaW9uID49IDIpIHsKKwkJCWlmIChpbnRzZXJ2W2ldID09IGluaXRpYWxfYm9vdF9wYXJhbXMtPmJvb3RfY3B1aWRfcGh5cykgeworCQkJCWZvdW5kID0gYm9vdF9jcHVfY291bnQ7CisJCQkJZm91bmRfdGhyZWFkID0gaTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCS8qCkBAIC0zMTEsMjMgKzMxNCwyMCBAQAogCQkJICogb2ZmIHNlY29uZGFyeSB0aHJlYWRzLgogCQkJICovCiAJCQlpZiAob2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLAotCQkJCQkibGludXgsYm9vdC1jcHUiLCBOVUxMKSAhPSBOVUxMKSB7Ci0JCQkJZm91bmQgPSAxOwotCQkJCWJyZWFrOwotCQkJfQorCQkJCQkibGludXgsYm9vdC1jcHUiLCBOVUxMKSAhPSBOVUxMKQorCQkJCWZvdW5kID0gYm9vdF9jcHVfY291bnQ7CiAJCX0KLQogI2lmZGVmIENPTkZJR19TTVAKIAkJLyogbG9naWNhbCBjcHUgaWQgaXMgYWx3YXlzIDAgb24gVVAga2VybmVscyAqLwotCQlsb2dpY2FsX2NwdWlkKys7CisJCWJvb3RfY3B1X2NvdW50Kys7CiAjZW5kaWYKIAl9CiAKLQlpZiAoZm91bmQpIHsKLQkJREJHKCJib290IGNwdTogbG9naWNhbCAlZCBwaHlzaWNhbCAlZFxuIiwgbG9naWNhbF9jcHVpZCwKLQkJCWludHNlcnZbaV0pOwotCQlib290X2NwdWlkID0gbG9naWNhbF9jcHVpZDsKLQkJc2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChib290X2NwdWlkLCBpbnRzZXJ2W2ldKTsKKwlpZiAoZm91bmQgPj0gMCkgeworCQlEQkcoImJvb3QgY3B1OiBsb2dpY2FsICVkIHBoeXNpY2FsICVkXG4iLCBmb3VuZCwKKwkJCWludHNlcnZbZm91bmRfdGhyZWFkXSk7CisJCWJvb3RfY3B1aWQgPSBmb3VuZDsKKwkJc2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChmb3VuZCwgaW50c2Vydltmb3VuZF90aHJlYWRdKTsKIAogCQkvKgogCQkgKiBQQVBSIGRlZmluZXMgImxvZ2ljYWwiIFBWUiB2YWx1ZXMgZm9yIGNwdXMgdGhhdApAQCAtNTA5LDExICs1MDksMTQgQEAKIAkJCXNpemUgPSAweDgwMDAwMDAwdWwgLSBiYXNlOwogCX0KICNlbmRpZgotCi0JLyogRmlyc3QgTUVNQkxPQ0sgYWRkZWQsIGRvIHNvbWUgc3BlY2lhbCBpbml0aWFsaXphdGlvbnMgKi8KLQlpZiAobWVtc3RhcnRfYWRkciA9PSB+KHBoeXNfYWRkcl90KTApCi0JCXNldHVwX2luaXRpYWxfbWVtb3J5X2xpbWl0KGJhc2UsIHNpemUpOwotCW1lbXN0YXJ0X2FkZHIgPSBtaW4oKHU2NCltZW1zdGFydF9hZGRyLCBiYXNlKTsKKwkvKiBLZWVwIHRyYWNrIG9mIHRoZSBiZWdpbm5pbmcgb2YgbWVtb3J5IC1hbmQtIHRoZSBzaXplIG9mCisJICogdGhlIHZlcnkgZmlyc3QgYmxvY2sgaW4gdGhlIGRldmljZS10cmVlIGFzIGl0IHJlcHJlc2VudHMKKwkgKiB0aGUgUk1BIG9uIHBwYzY0IHNlcnZlcgorCSAqLworCWlmIChiYXNlIDwgbWVtc3RhcnRfYWRkcikgeworCQltZW1zdGFydF9hZGRyID0gYmFzZTsKKwkJZmlyc3RfbWVtYmxvY2tfc2l6ZSA9IHNpemU7CisJfQogCiAJLyogQWRkIHRoZSBjaHVuayB0byB0aGUgTUVNQkxPQ0sgbGlzdCAqLwogCW1lbWJsb2NrX2FkZChiYXNlLCBzaXplKTsKQEAgLTY5OCw2ICs3MDEsNyBAQAogCiAJb2Zfc2Nhbl9mbGF0X2R0KGVhcmx5X2luaXRfZHRfc2Nhbl9yb290LCBOVUxMKTsKIAlvZl9zY2FuX2ZsYXRfZHQoZWFybHlfaW5pdF9kdF9zY2FuX21lbW9yeV9wcGMsIE5VTEwpOworCXNldHVwX2luaXRpYWxfbWVtb3J5X2xpbWl0KG1lbXN0YXJ0X2FkZHIsIGZpcnN0X21lbWJsb2NrX3NpemUpOwogCiAJLyogU2F2ZSBjb21tYW5kIGxpbmUgZm9yIC9wcm9jL2NtZGxpbmUgYW5kIHRoZW4gcGFyc2UgcGFyYW1ldGVycyAqLwogCXN0cmxjcHkoYm9vdF9jb21tYW5kX2xpbmUsIGNtZF9saW5lLCBDT01NQU5EX0xJTkVfU0laRSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYwppbmRleCA5NDFmZjRkLi5jMDE2MDMzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKQEAgLTMzNSw2ICszMzUsNyBAQAogCWNvbnN0IGNoYXIgKnAsICpxLCAqczsKIAl2YV9saXN0IGFyZ3M7CiAJdW5zaWduZWQgbG9uZyB2OworCWxvbmcgdnM7CiAJc3RydWN0IHByb21fdCAqX3Byb20gPSAmUkVMT0MocHJvbSk7CiAKIAl2YV9zdGFydChhcmdzLCBmb3JtYXQpOwpAQCAtMzY4LDEyICszNjksMzUgQEAKIAkJCXYgPSB2YV9hcmcoYXJncywgdW5zaWduZWQgbG9uZyk7CiAJCQlwcm9tX3ByaW50X2hleCh2KTsKIAkJCWJyZWFrOworCQljYXNlICdkJzoKKwkJCSsrcTsKKwkJCXZzID0gdmFfYXJnKGFyZ3MsIGludCk7CisJCQlpZiAodnMgPCAwKSB7CisJCQkJcHJvbV9wcmludChSRUxPQygiLSIpKTsKKwkJCQl2cyA9IC12czsKKwkJCX0KKwkJCXByb21fcHJpbnRfZGVjKHZzKTsKKwkJCWJyZWFrOwogCQljYXNlICdsJzoKIAkJCSsrcTsKLQkJCWlmICgqcSA9PSAndScpIHsgLyogJyVsdScgKi8KKwkJCWlmICgqcSA9PSAwKQorCQkJCWJyZWFrOworCQkJZWxzZSBpZiAoKnEgPT0gJ3gnKSB7CisJCQkJKytxOworCQkJCXYgPSB2YV9hcmcoYXJncywgdW5zaWduZWQgbG9uZyk7CisJCQkJcHJvbV9wcmludF9oZXgodik7CisJCQl9IGVsc2UgaWYgKCpxID09ICd1JykgeyAvKiAnJWx1JyAqLwogCQkJCSsrcTsKIAkJCQl2ID0gdmFfYXJnKGFyZ3MsIHVuc2lnbmVkIGxvbmcpOwogCQkJCXByb21fcHJpbnRfZGVjKHYpOworCQkJfSBlbHNlIGlmICgqcSA9PSAnZCcpIHsgLyogJWxkICovCisJCQkJKytxOworCQkJCXZzID0gdmFfYXJnKGFyZ3MsIGxvbmcpOworCQkJCWlmICh2cyA8IDApIHsKKwkJCQkJcHJvbV9wcmludChSRUxPQygiLSIpKTsKKwkJCQkJdnMgPSAtdnM7CisJCQkJfQorCQkJCXByb21fcHJpbnRfZGVjKHZzKTsKIAkJCX0KIAkJCWJyZWFrOwogCQl9CkBAIC02NzYsOCArNzAwLDEwIEBACiAjZW5kaWYgLyogQ09ORklHX1BDSV9NU0kgKi8KICNpZmRlZiBDT05GSUdfUFBDX1NNTFBBUgogI2RlZmluZSBPVjVfQ01PCQkJMHg4MAkvKiBDb29wZXJhdGl2ZSBNZW1vcnkgT3ZlcmNvbW1pdG1lbnQgKi8KKyNkZWZpbmUgT1Y1X1hDTU8JCQkweDQwCS8qIFBhZ2UgQ29hbGVzY2luZyAqLwogI2Vsc2UKICNkZWZpbmUgT1Y1X0NNTwkJCTB4MDAKKyNkZWZpbmUgT1Y1X1hDTU8JCQkweDAwCiAjZW5kaWYKICNkZWZpbmUgT1Y1X1RZUEUxX0FGRklOSVRZCTB4ODAJLyogVHlwZSAxIE5VTUEgYWZmaW5pdHkgKi8KIApAQCAtNzMyLDcgKzc1OCw3IEBACiAJT1Y1X0xQQVIgfCBPVjVfU1BMUEFSIHwgT1Y1X0xBUkdFX1BBR0VTIHwgT1Y1X0RSQ09ORl9NRU1PUlkgfAogCU9WNV9ET05BVEVfREVESUNBVEVfQ1BVIHwgT1Y1X01TSSwKIAkwLAotCU9WNV9DTU8sCisJT1Y1X0NNTyB8IE9WNV9YQ01PLAogCU9WNV9UWVBFMV9BRkZJTklUWSwKIAkwLAogCTAsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wdHJhY2UuYwppbmRleCA1NTYxM2UzLi5hNmFlMWNmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMKQEAgLTkzMywxMiArOTMzLDE2IEBACiAJaWYgKGRhdGEgJiYgIShkYXRhICYgREFCUl9UUkFOU0xBVElPTikpCiAJCXJldHVybiAtRUlPOwogI2lmZGVmIENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQKKwlpZiAocHRyYWNlX2dldF9icmVha3BvaW50cyh0YXNrKSA8IDApCisJCXJldHVybiAtRVNSQ0g7CisKIAlicCA9IHRocmVhZC0+cHRyYWNlX2Jwc1swXTsKIAlpZiAoKCFkYXRhKSB8fCAhKGRhdGEgJiAoREFCUl9EQVRBX1dSSVRFIHwgREFCUl9EQVRBX1JFQUQpKSkgewogCQlpZiAoYnApIHsKIAkJCXVucmVnaXN0ZXJfaHdfYnJlYWtwb2ludChicCk7CiAJCQl0aHJlYWQtPnB0cmFjZV9icHNbMF0gPSBOVUxMOwogCQl9CisJCXB0cmFjZV9wdXRfYnJlYWtwb2ludHModGFzayk7CiAJCXJldHVybiAwOwogCX0KIAlpZiAoYnApIHsKQEAgLTk0OCw5ICs5NTIsMTIgQEAKIAkJCQkJKERBQlJfREFUQV9XUklURSB8IERBQlJfREFUQV9SRUFEKSwKIAkJCQkJCQkmYXR0ci5icF90eXBlKTsKIAkJcmV0ID0gIG1vZGlmeV91c2VyX2h3X2JyZWFrcG9pbnQoYnAsICZhdHRyKTsKLQkJaWYgKHJldCkKKwkJaWYgKHJldCkgeworCQkJcHRyYWNlX3B1dF9icmVha3BvaW50cyh0YXNrKTsKIAkJCXJldHVybiByZXQ7CisJCX0KIAkJdGhyZWFkLT5wdHJhY2VfYnBzWzBdID0gYnA7CisJCXB0cmFjZV9wdXRfYnJlYWtwb2ludHModGFzayk7CiAJCXRocmVhZC0+ZGFiciA9IGRhdGE7CiAJCXJldHVybiAwOwogCX0KQEAgLTk2NSw5ICs5NzIsMTIgQEAKIAkJCQkJCQlwdHJhY2VfdHJpZ2dlcmVkLCB0YXNrKTsKIAlpZiAoSVNfRVJSKGJwKSkgewogCQl0aHJlYWQtPnB0cmFjZV9icHNbMF0gPSBOVUxMOworCQlwdHJhY2VfcHV0X2JyZWFrcG9pbnRzKHRhc2spOwogCQlyZXR1cm4gUFRSX0VSUihicCk7CiAJfQogCisJcHRyYWNlX3B1dF9icmVha3BvaW50cyh0YXNrKTsKKwogI2VuZGlmIC8qIENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQgKi8KIAogCS8qIE1vdmUgY29udGVudHMgdG8gdGhlIERBQlIgcmVnaXN0ZXIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMKaW5kZXggMjA5N2YyYi4uMjcxZmY2MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9tbXUuaD4KICNpbmNsdWRlIDxhc20vdG9wb2xvZ3kuaD4KKyNpbmNsdWRlIDxhc20vcFNlcmllc19yZWNvbmZpZy5oPgogCiBzdHJ1Y3QgcnRhc190IHJ0YXMgPSB7CiAJLmxvY2sgPSBfX0FSQ0hfU1BJTl9MT0NLX1VOTE9DS0VECkBAIC00OTQsNyArNDk1LDcgQEAKIAogCW1pZ2h0X3NsZWVwKCk7CiAJbXMgPSBydGFzX2J1c3lfZGVsYXlfdGltZShzdGF0dXMpOwotCWlmIChtcykKKwlpZiAobXMgJiYgbmVlZF9yZXNjaGVkKCkpCiAJCW1zbGVlcChtcyk7CiAKIAlyZXR1cm4gbXM7CkBAIC03MzEsNiArNzMyLDcgQEAKIAogCWF0b21pY19zZXQoJmRhdGEtPmVycm9yLCByYyk7CiAJc3RhcnRfdG9wb2xvZ3lfdXBkYXRlKCk7CisJcFNlcmllc19jb2FsZXNjZV9pbml0KCk7CiAKIAlpZiAod2FrZV93aGVuX2RvbmUpIHsKIAkJYXRvbWljX3NldCgmZGF0YS0+ZG9uZSwgMSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYwppbmRleCAyMWYzMGNiLi43OWZjYTI2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKQEAgLTM4MSw3ICszODEsNyBAQAogCWludCBpOwogCiAJdGhyZWFkc19wZXJfY29yZSA9IHRwYzsKLQl0aHJlYWRzX2NvcmVfbWFzayA9IENQVV9NQVNLX05PTkU7CisJY3B1bWFza19jbGVhcigmdGhyZWFkc19jb3JlX21hc2spOwogCiAJLyogVGhpcyBpbXBsZW1lbnRhdGlvbiBvbmx5IHN1cHBvcnRzIHBvd2VyIG9mIDIgbnVtYmVyIG9mIHRocmVhZHMKIAkgKiBmb3Igc2ltcGxpY2l0eSBhbmQgcGVyZm9ybWFuY2UKQEAgLTM5MCw3ICszOTAsNyBAQAogCUJVR19PTih0cGMgIT0gKDEgPDwgdGhyZWFkc19zaGlmdCkpOwogCiAJZm9yIChpID0gMDsgaSA8IHRwYzsgaSsrKQotCQljcHVfc2V0KGksIHRocmVhZHNfY29yZV9tYXNrKTsKKwkJY3B1bWFza19zZXRfY3B1KGksICZ0aHJlYWRzX2NvcmVfbWFzayk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJDUFUgbWFwcyBpbml0aWFsaXplZCBmb3IgJWQgdGhyZWFkJXMgcGVyIGNvcmVcbiIsCiAJICAgICAgIHRwYywgdHBjID4gMSA/ICJzIiA6ICIiKTsKQEAgLTQwNCw3ICs0MDQsNyBAQAogICogICAgICAgICAgICAgICAgICBjcHVfcHJlc2VudF9tYXNrCiAgKgogICogSGF2aW5nIHRoZSBwb3NzaWJsZSBtYXAgc2V0IHVwIGVhcmx5IGFsbG93cyB1cyB0byByZXN0cmljdCBhbGxvY2F0aW9ucwotICogb2YgdGhpbmdzIGxpa2UgaXJxc3RhY2tzIHRvIG51bV9wb3NzaWJsZV9jcHVzKCkgcmF0aGVyIHRoYW4gTlJfQ1BVUy4KKyAqIG9mIHRoaW5ncyBsaWtlIGlycXN0YWNrcyB0byBucl9jcHVfaWRzIHJhdGhlciB0aGFuIE5SX0NQVVMuCiAgKgogICogV2UgZG8gbm90IGluaXRpYWxpemUgdGhlIG9ubGluZSBtYXAgaGVyZTsgY3B1cyBzZXQgdGhlaXIgb3duIGJpdHMgaW4KICAqIGNwdV9vbmxpbmVfbWFzayBhcyB0aGV5IGNvbWUgdXAuCkBAIC00MjQsNyArNDI0LDcgQEAKIAogCURCRygic21wX3NldHVwX2NwdV9tYXBzKClcbiIpOwogCi0Jd2hpbGUgKChkbiA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKGRuLCAiY3B1IikpICYmIGNwdSA8IE5SX0NQVVMpIHsKKwl3aGlsZSAoKGRuID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoZG4sICJjcHUiKSkgJiYgY3B1IDwgbnJfY3B1X2lkcykgewogCQljb25zdCBpbnQgKmludHNlcnY7CiAJCWludCBqLCBsZW47CiAKQEAgLTQ0Myw3ICs0NDMsNyBAQAogCQkJCWludHNlcnYgPSAmY3B1OwkvKiBhc3N1bWUgbG9naWNhbCA9PSBwaHlzICovCiAJCX0KIAotCQlmb3IgKGogPSAwOyBqIDwgbnRocmVhZHMgJiYgY3B1IDwgTlJfQ1BVUzsgaisrKSB7CisJCWZvciAoaiA9IDA7IGogPCBudGhyZWFkcyAmJiBjcHUgPCBucl9jcHVfaWRzOyBqKyspIHsKIAkJCURCRygiICAgIHRocmVhZCAlZCAtPiBjcHUgJWQgKGhhcmQgaWQgJWQpXG4iLAogCQkJICAgIGosIGNwdSwgaW50c2VydltqXSk7CiAJCQlzZXRfY3B1X3ByZXNlbnQoY3B1LCB0cnVlKTsKQEAgLTQ4MywxMiArNDgzLDEyIEBACiAJCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9TTVQpKQogCQkJbWF4Y3B1cyAqPSBudGhyZWFkczsKIAotCQlpZiAobWF4Y3B1cyA+IE5SX0NQVVMpIHsKKwkJaWYgKG1heGNwdXMgPiBucl9jcHVfaWRzKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkgICAgICAgIlBhcnRpdGlvbiBjb25maWd1cmVkIGZvciAlZCBjcHVzLCAiCiAJCQkgICAgICAgIm9wZXJhdGluZyBzeXN0ZW0gbWF4aW11bSBpcyAlZC5cbiIsCi0JCQkgICAgICAgbWF4Y3B1cywgTlJfQ1BVUyk7Ci0JCQltYXhjcHVzID0gTlJfQ1BVUzsKKwkJCSAgICAgICBtYXhjcHVzLCBucl9jcHVfaWRzKTsKKwkJCW1heGNwdXMgPSBucl9jcHVfaWRzOwogCQl9IGVsc2UKIAkJCXByaW50ayhLRVJOX0lORk8gIlBhcnRpdGlvbiBjb25maWd1cmVkIGZvciAlZCBjcHVzLlxuIiwKIAkJCSAgICAgICBtYXhjcHVzKTsKQEAgLTUxMCw3ICs1MTAsNyBAQAogCWNwdV9pbml0X3RocmVhZF9jb3JlX21hcHMobnRocmVhZHMpOwogCiAJLyogTm93IHRoYXQgcG9zc2libGUgY3B1cyBhcmUgc2V0LCBzZXQgbnJfY3B1X2lkcyBmb3IgbGF0ZXIgdXNlICovCi0JbnJfY3B1X2lkcyA9IGZpbmRfbGFzdF9iaXQoY3B1bWFza19iaXRzKGNwdV9wb3NzaWJsZV9tYXNrKSxOUl9DUFVTKSArIDE7CisJc2V0dXBfbnJfY3B1X2lkcygpOwogCiAJZnJlZV91bnVzZWRfcGFjYXMoKTsKIH0KQEAgLTYwMiw2ICs2MDIsMTAgQEAKIAkJICogbmFtZSBpbnN0ZWFkICovCiAJCWlmICghbnApCiAJCQlucCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICI4MDQyIik7CisJCWlmIChucCkgeworCQkJb2ZfaTgwNDJfa2JkX2lycSA9IDE7CisJCQlvZl9pODA0Ml9hdXhfaXJxID0gMTI7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBGRENfQkFTRTogLyogRkRDMSAqLwogCQlucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJmZGMiKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYwppbmRleCAxZDJmYmM5Li42MjBkNzkyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF8zMi5jCkBAIC00OCw2ICs0OCw3IEBACiAKIGludCBib290X2NwdWlkID0gLTE7CiBFWFBPUlRfU1lNQk9MX0dQTChib290X2NwdWlkKTsKK2ludCBfX2luaXRkYXRhIGJvb3RfY3B1X2NvdW50OwogaW50IGJvb3RfY3B1aWRfcGh5czsKIAogaW50IHNtcF9od19pbmRleFtOUl9DUFVTXTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYwppbmRleCA1YTA0MDFmLi5hODhiZjI3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSA8YXNtL3VkYmcuaD4KICNpbmNsdWRlIDxhc20va2V4ZWMuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vY29kZS1wYXRjaGluZy5oPgogCiAjaW5jbHVkZSAic2V0dXAuaCIKIApAQCAtNzIsNiArNzMsNyBAQAogI2VuZGlmCiAKIGludCBib290X2NwdWlkID0gMDsKK2ludCBfX2luaXRkYXRhIGJvb3RfY3B1X2NvdW50OwogdTY0IHBwYzY0X3BmdF9zaXplOwogCiAvKiBQaWNrIGRlZmF1bHRzIHNpbmNlIHdlIG1pZ2h0IHdhbnQgdG8gcGF0Y2ggaW5zdHJ1Y3Rpb25zCkBAIC0yMzMsNiArMjM1LDcgQEAKIHZvaWQgc21wX3JlbGVhc2VfY3B1cyh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgKnB0cjsKKwlpbnQgaTsKIAogCURCRygiIC0+IHNtcF9yZWxlYXNlX2NwdXMoKVxuIik7CiAKQEAgLTI0NSw3ICsyNDgsMTYgQEAKIAlwdHIgID0gKHVuc2lnbmVkIGxvbmcgKikoKHVuc2lnbmVkIGxvbmcpJl9fc2Vjb25kYXJ5X2hvbGRfc3Bpbmxvb3AKIAkJCS0gUEhZU0lDQUxfU1RBUlQpOwogCSpwdHIgPSBfX3BhKGdlbmVyaWNfc2Vjb25kYXJ5X3NtcF9pbml0KTsKLQltYigpOworCisJLyogQW5kIHdhaXQgYSBiaXQgZm9yIHRoZW0gdG8gY2F0Y2ggdXAgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKKwkJbWIoKTsKKwkJSE1UX2xvdygpOworCQlpZiAoYm9vdF9jcHVfY291bnQgPT0gMCkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMSk7CisJfQorCURCRygiYm9vdF9jcHVfY291bnQgPSAlZFxuIiwgYm9vdF9jcHVfY291bnQpOwogCiAJREJHKCIgPC0gc21wX3JlbGVhc2VfY3B1cygpXG4iKTsKIH0KQEAgLTQyMywxNyArNDM1LDMwIEBACiAJREJHKCIgPC0gc2V0dXBfc3lzdGVtKClcbiIpOwogfQogCi1zdGF0aWMgdTY0IHNsYjBfbGltaXQodm9pZCkKKy8qIFRoaXMgcmV0dXJucyB0aGUgbGltaXQgYmVsb3cgd2hpY2ggbWVtb3J5IGFjY2Vzc2VzIHRvIHRoZSBsaW5lYXIKKyAqIG1hcHBpbmcgYXJlIGd1YXJuYXRlZWQgbm90IHRvIGNhdXNlIGEgVExCIG9yIFNMQiBtaXNzLiBUaGlzIGlzCisgKiB1c2VkIHRvIGFsbG9jYXRlIGludGVycnVwdCBvciBlbWVyZ2VuY3kgc3RhY2tzIGZvciB3aGljaCBvdXIKKyAqIGV4Y2VwdGlvbiBlbnRyeSBwYXRoIGRvZXNuJ3QgZGVhbCB3aXRoIGJlaW5nIGludGVycnVwdGVkLgorICovCitzdGF0aWMgdTY0IHNhZmVfc3RhY2tfbGltaXQodm9pZCkKIHsKLQlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfMVRfU0VHTUVOVCkpIHsKKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szRQorCS8qIEZyZWVzY2FsZSBCb29rRSBib2x0cyB0aGUgZW50aXJlIGxpbmVhciBtYXBwaW5nICovCisJaWYgKG1tdV9oYXNfZmVhdHVyZShNTVVfRlRSX1RZUEVfRlNMX0UpKQorCQlyZXR1cm4gbGluZWFyX21hcF90b3A7CisJLyogT3RoZXIgQm9va0UsIHdlIGFzc3VtZSB0aGUgZmlyc3QgR0IgaXMgYm9sdGVkICovCisJcmV0dXJuIDF1bCA8PCAzMDsKKyNlbHNlCisJLyogQm9va1MsIHRoZSBmaXJzdCBzZWdtZW50IGlzIGJvbHRlZCAqLworCWlmIChtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl8xVF9TRUdNRU5UKSkKIAkJcmV0dXJuIDFVTCA8PCBTSURfU0hJRlRfMVQ7Ci0JfQogCXJldHVybiAxVUwgPDwgU0lEX1NISUZUOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpcnFzdGFja19lYXJseV9pbml0KHZvaWQpCiB7Ci0JdTY0IGxpbWl0ID0gc2xiMF9saW1pdCgpOworCXU2NCBsaW1pdCA9IHNhZmVfc3RhY2tfbGltaXQoKTsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCS8qCkBAIC00NTMsNiArNDc4LDkgQEAKICNpZmRlZiBDT05GSUdfUFBDX0JPT0szRQogc3RhdGljIHZvaWQgX19pbml0IGV4Y19sdmxfZWFybHlfaW5pdCh2b2lkKQogeworCWV4dGVybiB1bnNpZ25lZCBpbnQgaW50ZXJydXB0X2Jhc2VfYm9vazNlOworCWV4dGVybiB1bnNpZ25lZCBpbnQgZXhjX2RlYnVnX2RlYnVnX2Jvb2szZTsKKwogCXVuc2lnbmVkIGludCBpOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKQEAgLTQ2Myw2ICs0OTEsMTAgQEAKIAkJbWNoZWNraXJxX2N0eFtpXSA9IChzdHJ1Y3QgdGhyZWFkX2luZm8gKikKIAkJCV9fdmEobWVtYmxvY2tfYWxsb2MoVEhSRUFEX1NJWkUsIFRIUkVBRF9TSVpFKSk7CiAJfQorCisJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0RFQlVHX0xWTF9FWEMpKQorCQlwYXRjaF9icmFuY2goJmludGVycnVwdF9iYXNlX2Jvb2szZSArICgweDA0MCAvIDQpICsgMSwKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcpJmV4Y19kZWJ1Z19kZWJ1Z19ib29rM2UsIDApOwogfQogI2Vsc2UKICNkZWZpbmUgZXhjX2x2bF9lYXJseV9pbml0KCkKQEAgLTQ4Niw3ICs1MTgsNyBAQAogCSAqIGJyaW5ndXAsIHdlIG5lZWQgdG8gZ2V0IGF0IHRoZW0gaW4gcmVhbCBtb2RlLiBUaGlzIG1lYW5zIHRoZXkKIAkgKiBtdXN0IGFsc28gYmUgd2l0aGluIHRoZSBSTU8gcmVnaW9uLgogCSAqLwotCWxpbWl0ID0gbWluKHNsYjBfbGltaXQoKSwgcHBjNjRfcm1hX3NpemUpOworCWxpbWl0ID0gbWluKHNhZmVfc3RhY2tfbGltaXQoKSwgcHBjNjRfcm1hX3NpemUpOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJdW5zaWduZWQgbG9uZyBzcDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF82NC5jCmluZGV4IDI3YzRhNDUuLmRhOTg5ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfNjQuYwpAQCAtMzgxLDcgKzM4MSw3IEBACiAJICAgICAgIHJlZ3MsIHVjLCAmdWMtPnVjX21jb250ZXh0KTsKICNlbmRpZgogCWlmIChzaG93X3VuaGFuZGxlZF9zaWduYWxzICYmIHByaW50a19yYXRlbGltaXQoKSkKLQkJcHJpbnRrKHJlZ3MtPm1zciAmIE1TUl9TRiA/IGZtdDY0IDogZm10MzIsCisJCXByaW50ayhyZWdzLT5tc3IgJiBNU1JfNjRCSVQgPyBmbXQ2NCA6IGZtdDMyLAogCQkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCAicnRfc2lncmV0dXJuIiwKIAkJCShsb25nKXVjLCByZWdzLT5uaXAsIHJlZ3MtPmxpbmspOwogCkBAIC00NjksNyArNDY5LDcgQEAKIAkgICAgICAgcmVncywgZnJhbWUsIG5ld3NwKTsKICNlbmRpZgogCWlmIChzaG93X3VuaGFuZGxlZF9zaWduYWxzICYmIHByaW50a19yYXRlbGltaXQoKSkKLQkJcHJpbnRrKHJlZ3MtPm1zciAmIE1TUl9TRiA/IGZtdDY0IDogZm10MzIsCisJCXByaW50ayhyZWdzLT5tc3IgJiBNU1JfNjRCSVQgPyBmbXQ2NCA6IGZtdDMyLAogCQkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCAic2V0dXBfcnRfZnJhbWUiLAogCQkJKGxvbmcpZnJhbWUsIHJlZ3MtPm5pcCwgcmVncy0+bGluayk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jCmluZGV4IDlmOWMyMDQuLjRhNmYyZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYwpAQCAtOTUsNyArOTUsNyBAQAogc3RhdGljIHZvaWQgKCpjcmFzaF9pcGlfZnVuY3Rpb25fcHRyKShzdHJ1Y3QgcHRfcmVncyAqKSA9IE5VTEw7CiAKICNpZmRlZiBDT05GSUdfUFBDNjQKLXZvaWQgX19kZXZpbml0IHNtcF9nZW5lcmljX2tpY2tfY3B1KGludCBucikKK2ludCBfX2RldmluaXQgc21wX2dlbmVyaWNfa2lja19jcHUoaW50IG5yKQogewogCUJVR19PTihuciA8IDAgfHwgbnIgPj0gTlJfQ1BVUyk7CiAKQEAgLTEwNiwzOCArMTA2LDExIEBACiAJICovCiAJcGFjYVtucl0uY3B1X3N0YXJ0ID0gMTsKIAlzbXBfbWIoKTsKKworCXJldHVybiAwOwogfQogI2VuZGlmCiAKLXZvaWQgc21wX21lc3NhZ2VfcmVjdihpbnQgbXNnKQotewotCXN3aXRjaChtc2cpIHsKLQljYXNlIFBQQ19NU0dfQ0FMTF9GVU5DVElPTjoKLQkJZ2VuZXJpY19zbXBfY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQoKTsKLQkJYnJlYWs7Ci0JY2FzZSBQUENfTVNHX1JFU0NIRURVTEU6Ci0JCXNjaGVkdWxlcl9pcGkoKTsKLQkJYnJlYWs7Ci0JY2FzZSBQUENfTVNHX0NBTExfRlVOQ19TSU5HTEU6Ci0JCWdlbmVyaWNfc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdCgpOwotCQlicmVhazsKLQljYXNlIFBQQ19NU0dfREVCVUdHRVJfQlJFQUs6Ci0JCWlmIChjcmFzaF9pcGlfZnVuY3Rpb25fcHRyKSB7Ci0JCQljcmFzaF9pcGlfZnVuY3Rpb25fcHRyKGdldF9pcnFfcmVncygpKTsKLQkJCWJyZWFrOwotCQl9Ci0jaWZkZWYgQ09ORklHX0RFQlVHR0VSCi0JCWRlYnVnZ2VyX2lwaShnZXRfaXJxX3JlZ3MoKSk7Ci0JCWJyZWFrOwotI2VuZGlmIC8qIENPTkZJR19ERUJVR0dFUiAqLwotCQkvKiBGQUxMVEhST1VHSCAqLwotCWRlZmF1bHQ6Ci0JCXByaW50aygiU01QICVkOiBzbXBfbWVzc2FnZV9yZWN2KCk6IHVua25vd24gbXNnICVkXG4iLAotCQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLCBtc2cpOwotCQlicmVhazsKLQl9Ci19Ci0KIHN0YXRpYyBpcnFyZXR1cm5fdCBjYWxsX2Z1bmN0aW9uX2FjdGlvbihpbnQgaXJxLCB2b2lkICpkYXRhKQogewogCWdlbmVyaWNfc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KCk7CkBAIC0xNTYsOSArMTI5LDE3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgZGVidWdfaXBpX2FjdGlvbihpbnQgaXJxLCB2b2lkICpkYXRhKQoraXJxcmV0dXJuX3QgZGVidWdfaXBpX2FjdGlvbihpbnQgaXJxLCB2b2lkICpkYXRhKQogewotCXNtcF9tZXNzYWdlX3JlY3YoUFBDX01TR19ERUJVR0dFUl9CUkVBSyk7CisJaWYgKGNyYXNoX2lwaV9mdW5jdGlvbl9wdHIpIHsKKwkJY3Jhc2hfaXBpX2Z1bmN0aW9uX3B0cihnZXRfaXJxX3JlZ3MoKSk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKyNpZmRlZiBDT05GSUdfREVCVUdHRVIKKwlkZWJ1Z2dlcl9pcGkoZ2V0X2lycV9yZWdzKCkpOworI2VuZGlmIC8qIENPTkZJR19ERUJVR0dFUiAqLworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC0xOTcsNiArMTc4LDY2IEBACiAJcmV0dXJuIGVycjsKIH0KIAorI2lmZGVmIENPTkZJR19QUENfU01QX01VWEVEX0lQSQorc3RydWN0IGNwdV9tZXNzYWdlcyB7CisJaW50IG1lc3NhZ2VzOwkJCS8qIGN1cnJlbnQgbWVzc2FnZXMgKi8KKwl1bnNpZ25lZCBsb25nIGRhdGE7CQkvKiBkYXRhIGZvciBjYXVzZSBpcGkgKi8KK307CitzdGF0aWMgREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IGNwdV9tZXNzYWdlcywgaXBpX21lc3NhZ2UpOworCit2b2lkIHNtcF9tdXhlZF9pcGlfc2V0X2RhdGEoaW50IGNwdSwgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBjcHVfbWVzc2FnZXMgKmluZm8gPSAmcGVyX2NwdShpcGlfbWVzc2FnZSwgY3B1KTsKKworCWluZm8tPmRhdGEgPSBkYXRhOworfQorCit2b2lkIHNtcF9tdXhlZF9pcGlfbWVzc2FnZV9wYXNzKGludCBjcHUsIGludCBtc2cpCit7CisJc3RydWN0IGNwdV9tZXNzYWdlcyAqaW5mbyA9ICZwZXJfY3B1KGlwaV9tZXNzYWdlLCBjcHUpOworCWNoYXIgKm1lc3NhZ2UgPSAoY2hhciAqKSZpbmZvLT5tZXNzYWdlczsKKworCW1lc3NhZ2VbbXNnXSA9IDE7CisJbWIoKTsKKwlzbXBfb3BzLT5jYXVzZV9pcGkoY3B1LCBpbmZvLT5kYXRhKTsKK30KKwordm9pZCBzbXBfbXV4ZWRfaXBpX3Jlc2VuZCh2b2lkKQoreworCXN0cnVjdCBjcHVfbWVzc2FnZXMgKmluZm8gPSAmX19nZXRfY3B1X3ZhcihpcGlfbWVzc2FnZSk7CisKKwlpZiAoaW5mby0+bWVzc2FnZXMpCisJCXNtcF9vcHMtPmNhdXNlX2lwaShzbXBfcHJvY2Vzc29yX2lkKCksIGluZm8tPmRhdGEpOworfQorCitpcnFyZXR1cm5fdCBzbXBfaXBpX2RlbXV4KHZvaWQpCit7CisJc3RydWN0IGNwdV9tZXNzYWdlcyAqaW5mbyA9ICZfX2dldF9jcHVfdmFyKGlwaV9tZXNzYWdlKTsKKwl1bnNpZ25lZCBpbnQgYWxsOworCisJbWIoKTsJLyogb3JkZXIgYW55IGlycSBjbGVhciAqLworCisJZG8geworCQlhbGwgPSB4Y2hnX2xvY2FsKCZpbmZvLT5tZXNzYWdlcywgMCk7CisKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJaWYgKGFsbCAmICgxIDw8ICgyNCAtIDggKiBQUENfTVNHX0NBTExfRlVOQ1RJT04pKSkKKwkJCWdlbmVyaWNfc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KCk7CisJCWlmIChhbGwgJiAoMSA8PCAoMjQgLSA4ICogUFBDX01TR19SRVNDSEVEVUxFKSkpCisJCQlzY2hlZHVsZXJfaXBpKCk7CisJCWlmIChhbGwgJiAoMSA8PCAoMjQgLSA4ICogUFBDX01TR19DQUxMX0ZVTkNfU0lOR0xFKSkpCisJCQlnZW5lcmljX3NtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pbnRlcnJ1cHQoKTsKKwkJaWYgKGFsbCAmICgxIDw8ICgyNCAtIDggKiBQUENfTVNHX0RFQlVHR0VSX0JSRUFLKSkpCisJCQlkZWJ1Z19pcGlfYWN0aW9uKDAsIE5VTEwpOworI2Vsc2UKKyNlcnJvciBVbnN1cHBvcnRlZCBFTkRJQU4KKyNlbmRpZgorCX0gd2hpbGUgKGluZm8tPm1lc3NhZ2VzKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKyNlbmRpZiAvKiBDT05GSUdfUFBDX1NNUF9NVVhFRF9JUEkgKi8KKwogdm9pZCBzbXBfc2VuZF9yZXNjaGVkdWxlKGludCBjcHUpCiB7CiAJaWYgKGxpa2VseShzbXBfb3BzKSkKQEAgLTIxNiwxMSArMjU3LDE4IEBACiAJCXNtcF9vcHMtPm1lc3NhZ2VfcGFzcyhjcHUsIFBQQ19NU0dfQ0FMTF9GVU5DVElPTik7CiB9CiAKLSNpZmRlZiBDT05GSUdfREVCVUdHRVIKLXZvaWQgc21wX3NlbmRfZGVidWdnZXJfYnJlYWsoaW50IGNwdSkKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR0dFUikgfHwgZGVmaW5lZChDT05GSUdfS0VYRUMpCit2b2lkIHNtcF9zZW5kX2RlYnVnZ2VyX2JyZWFrKHZvaWQpCiB7Ci0JaWYgKGxpa2VseShzbXBfb3BzKSkKLQkJc21wX29wcy0+bWVzc2FnZV9wYXNzKGNwdSwgUFBDX01TR19ERUJVR0dFUl9CUkVBSyk7CisJaW50IGNwdTsKKwlpbnQgbWUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKHVubGlrZWx5KCFzbXBfb3BzKSkKKwkJcmV0dXJuOworCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCisJCWlmIChjcHUgIT0gbWUpCisJCQlzbXBfb3BzLT5tZXNzYWdlX3Bhc3MoY3B1LCBQUENfTVNHX0RFQlVHR0VSX0JSRUFLKTsKIH0KICNlbmRpZgogCkBAIC0yMjgsOSArMjc2LDkgQEAKIHZvaWQgY3Jhc2hfc2VuZF9pcGkodm9pZCAoKmNyYXNoX2lwaV9jYWxsYmFjaykoc3RydWN0IHB0X3JlZ3MgKikpCiB7CiAJY3Jhc2hfaXBpX2Z1bmN0aW9uX3B0ciA9IGNyYXNoX2lwaV9jYWxsYmFjazsKLQlpZiAoY3Jhc2hfaXBpX2NhbGxiYWNrICYmIHNtcF9vcHMpIHsKKwlpZiAoY3Jhc2hfaXBpX2NhbGxiYWNrKSB7CiAJCW1iKCk7Ci0JCXNtcF9vcHMtPm1lc3NhZ2VfcGFzcyhNU0dfQUxMX0JVVF9TRUxGLCBQUENfTVNHX0RFQlVHR0VSX0JSRUFLKTsKKwkJc21wX3NlbmRfZGVidWdnZXJfYnJlYWsoKTsKIAl9CiB9CiAjZW5kaWYKQEAgLTQxMCw4ICs0NTgsNiBAQAogewogCWludCByYywgYzsKIAotCXNlY29uZGFyeV90aSA9IGN1cnJlbnRfc2V0W2NwdV07Ci0KIAlpZiAoc21wX29wcyA9PSBOVUxMIHx8CiAJICAgIChzbXBfb3BzLT5jcHVfYm9vdGFibGUgJiYgIXNtcF9vcHMtPmNwdV9ib290YWJsZShjcHUpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00MjEsNiArNDY3LDggQEAKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAorCXNlY29uZGFyeV90aSA9IGN1cnJlbnRfc2V0W2NwdV07CisKIAkvKiBNYWtlIHN1cmUgY2FsbGluLW1hcCBlbnRyeSBpcyAwIChjYW4gYmUgbGVmdG92ZXIgYSBDUFUKIAkgKiBob3RwbHVnCiAJICovCkBAIC00MzQsNyArNDgyLDExIEBACiAKIAkvKiB3YWtlIHVwIGNwdXMgKi8KIAlEQkcoInNtcDoga2lja2luZyBjcHUgJWRcbiIsIGNwdSk7Ci0Jc21wX29wcy0+a2lja19jcHUoY3B1KTsKKwlyYyA9IHNtcF9vcHMtPmtpY2tfY3B1KGNwdSk7CisJaWYgKHJjKSB7CisJCXByX2Vycigic21wOiBmYWlsZWQgc3RhcnRpbmcgY3B1ICVkIChyYyAlZClcbiIsIGNwdSwgcmMpOworCQlyZXR1cm4gcmM7CisJfQogCiAJLyoKIAkgKiB3YWl0IHRvIHNlZSBpZiB0aGUgY3B1IG1hZGUgYSBjYWxsaW4gKGlzIGFjdHVhbGx5IHVwKS4KQEAgLTUwNyw3ICs1NTksNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3B1X2ZpcnN0X3RocmVhZF9vZl9jb3JlKTsKIAotLyogTXVzdCBiZSBjYWxsZWQgd2hlbiBubyBjaGFuZ2UgY2FuIG9jY3VyIHRvIGNwdV9wcmVzZW50X21hcCwKKy8qIE11c3QgYmUgY2FsbGVkIHdoZW4gbm8gY2hhbmdlIGNhbiBvY2N1ciB0byBjcHVfcHJlc2VudF9tYXNrLAogICogaS5lLiBkdXJpbmcgY3B1IG9ubGluZSBvciBvZmZsaW5lLgogICovCiBzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpjcHVfdG9fbDJjYWNoZShpbnQgY3B1KQpAQCAtNjA4LDcgKzY2MCw3IEBACiAJICogc2Ugd2UgcGluIHVzIGRvd24gdG8gQ1BVIDAgZm9yIGEgc2hvcnQgd2hpbGUKIAkgKi8KIAlhbGxvY19jcHVtYXNrX3Zhcigmb2xkX21hc2ssIEdGUF9OT1dBSVQpOwotCWNwdW1hc2tfY29weShvbGRfbWFzaywgJmN1cnJlbnQtPmNwdXNfYWxsb3dlZCk7CisJY3B1bWFza19jb3B5KG9sZF9tYXNrLCB0c2tfY3B1c19hbGxvd2VkKGN1cnJlbnQpKTsKIAlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBjcHVtYXNrX29mKGJvb3RfY3B1aWQpKTsKIAkKIAlpZiAoc21wX29wcyAmJiBzbXBfb3BzLT5zZXR1cF9jcHUpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMKaW5kZXggYzBkOGMyMC4uZjBmMjE5OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYwpAQCAtMTgyLDYgKzE4Miw0MSBAQAogc3RhdGljIFNZU0RFVl9BVFRSKHNwdXJyLCAwNjAwLCBzaG93X3NwdXJyLCBOVUxMKTsKIHN0YXRpYyBTWVNERVZfQVRUUihkc2NyLCAwNjAwLCBzaG93X2RzY3IsIHN0b3JlX2RzY3IpOwogc3RhdGljIFNZU0RFVl9BVFRSKHB1cnIsIDA2MDAsIHNob3dfcHVyciwgc3RvcmVfcHVycik7CisKK3Vuc2lnbmVkIGxvbmcgZHNjcl9kZWZhdWx0ID0gMDsKK0VYUE9SVF9TWU1CT0woZHNjcl9kZWZhdWx0KTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19kc2NyX2RlZmF1bHQoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsCisJCXN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWx4XG4iLCBkc2NyX2RlZmF1bHQpOworfQorCitzdGF0aWMgc3NpemVfdCBfX3VzZWQgc3RvcmVfZHNjcl9kZWZhdWx0KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLAorCQlzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLAorCQlzaXplX3QgY291bnQpCit7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IHJldCA9IDA7CisJCisJcmV0ID0gc3NjYW5mKGJ1ZiwgIiVseCIsICZ2YWwpOworCWlmIChyZXQgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZHNjcl9kZWZhdWx0ID0gdmFsOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgU1lTREVWX0NMQVNTX0FUVFIoZHNjcl9kZWZhdWx0LCAwNjAwLAorCQlzaG93X2RzY3JfZGVmYXVsdCwgc3RvcmVfZHNjcl9kZWZhdWx0KTsKKworc3RhdGljIHZvaWQgc3lzZnNfY3JlYXRlX2RzY3JfZGVmYXVsdCh2b2lkKQoreworCWludCBlcnIgPSAwOworCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9EU0NSKSkKKwkJZXJyID0gc3lzZnNfY3JlYXRlX2ZpbGUoJmNwdV9zeXNkZXZfY2xhc3Mua3NldC5rb2JqLAorCQkJJmF0dHJfZHNjcl9kZWZhdWx0LmF0dHIpOworfQogI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwogCiAjaWZkZWYgSEFTX1BQQ19QTUNfUEE2VApAQCAtNjE3LDYgKzY1Miw5IEBACiAJCWlmIChjcHVfb25saW5lKGNwdSkpCiAJCQlyZWdpc3Rlcl9jcHVfb25saW5lKGNwdSk7CiAJfQorI2lmZGVmIENPTkZJR19QUEM2NAorCXN5c2ZzX2NyZWF0ZV9kc2NyX2RlZmF1bHQoKTsKKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCmluZGV4IDVkZGI4MDEuLmIxMzMwNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKQEAgLTE0Myw3ICsxNDMsNiBAQAogI2VuZGlmCiAJCXByaW50aygiJXNcbiIsIHBwY19tZC5uYW1lID8gcHBjX21kLm5hbWUgOiAiIik7CiAKLQkJc3lzZnNfcHJpbnRrX2xhc3RfZmlsZSgpOwogCQlpZiAobm90aWZ5X2RpZShESUVfT09QUywgc3RyLCByZWdzLCBlcnIsIDI1NSwKIAkJCSAgICAgICBTSUdTRUdWKSA9PSBOT1RJRllfU1RPUCkKIAkJCXJldHVybiAxOwpAQCAtMTk5LDcgKzE5OCw3IEBACiAJfSBlbHNlIGlmIChzaG93X3VuaGFuZGxlZF9zaWduYWxzICYmCiAJCSAgICB1bmhhbmRsZWRfc2lnbmFsKGN1cnJlbnQsIHNpZ25yKSAmJgogCQkgICAgcHJpbnRrX3JhdGVsaW1pdCgpKSB7Ci0JCQlwcmludGsocmVncy0+bXNyICYgTVNSX1NGID8gZm10NjQgOiBmbXQzMiwKKwkJCXByaW50ayhyZWdzLT5tc3IgJiBNU1JfNjRCSVQgPyBmbXQ2NCA6IGZtdDMyLAogCQkJCWN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgc2lnbnIsCiAJCQkJYWRkciwgcmVncy0+bmlwLCByZWdzLT5saW5rLCBjb2RlKTsKIAkJfQpAQCAtMjIxLDcgKzIyMCw3IEBACiAJfQogCiAjaWZkZWYgQ09ORklHX0tFWEVDCi0JY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIGNwdXNfaW5fc3IpOworCWNwdW1hc2tfc2V0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCksICZjcHVzX2luX3NyKTsKICNlbmRpZgogCiAJZGllKCJTeXN0ZW0gUmVzZXQiLCByZWdzLCBTSUdBQlJUKTsKQEAgLTkwOSw2ICs5MDgsMjYgQEAKIAkJcmV0dXJuIGVtdWxhdGVfaXNlbChyZWdzLCBpbnN0d29yZCk7CiAJfQogCisjaWZkZWYgQ09ORklHX1BQQzY0CisJLyogRW11bGF0ZSB0aGUgbWZzcHIgckQsIERTQ1IuICovCisJaWYgKCgoaW5zdHdvcmQgJiBQUENfSU5TVF9NRlNQUl9EU0NSX01BU0spID09IFBQQ19JTlNUX01GU1BSX0RTQ1IpICYmCisJCQljcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9EU0NSKSkgeworCQlQUENfV0FSTl9FTVVMQVRFRChtZmRzY3IsIHJlZ3MpOworCQlyZCA9IChpbnN0d29yZCA+PiAyMSkgJiAweDFmOworCQlyZWdzLT5ncHJbcmRdID0gbWZzcHIoU1BSTl9EU0NSKTsKKwkJcmV0dXJuIDA7CisJfQorCS8qIEVtdWxhdGUgdGhlIG10c3ByIERTQ1IsIHJELiAqLworCWlmICgoKGluc3R3b3JkICYgUFBDX0lOU1RfTVRTUFJfRFNDUl9NQVNLKSA9PSBQUENfSU5TVF9NVFNQUl9EU0NSKSAmJgorCQkJY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfRFNDUikpIHsKKwkJUFBDX1dBUk5fRU1VTEFURUQobXRkc2NyLCByZWdzKTsKKwkJcmQgPSAoaW5zdHdvcmQgPj4gMjEpICYgMHgxZjsKKwkJbXRzcHIoU1BSTl9EU0NSLCByZWdzLT5ncHJbcmRdKTsKKwkJY3VycmVudC0+dGhyZWFkLmRzY3JfaW5oZXJpdCA9IDE7CisJCXJldHVybiAwOworCX0KKyNlbmRpZgorCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKQEAgLTE1MDYsNiArMTUyNSwxMCBAQAogI2lmZGVmIENPTkZJR19WU1gKIAlXQVJOX0VNVUxBVEVEX1NFVFVQKHZzeCksCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfUFBDNjQKKwlXQVJOX0VNVUxBVEVEX1NFVFVQKG1mZHNjciksCisJV0FSTl9FTVVMQVRFRF9TRVRVUChtdGRzY3IpLAorI2VuZGlmCiB9OwogCiB1MzIgcHBjX3dhcm5fZW11bGF0ZWQ7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmcuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZy5jCmluZGV4IGUzOWNhZDguLjIzZDY1YWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZy5jCkBAIC02Miw2ICs2Miw4IEBACiAJdWRiZ19pbml0X2NwbSgpOwogI2VsaWYgZGVmaW5lZChDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1VTQkdFQ0tPKQogCXVkYmdfaW5pdF91c2JnZWNrbygpOworI2VsaWYgZGVmaW5lZChDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1dTUCkKKwl1ZGJnX2luaXRfd3NwKCk7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QUENfRUFSTFlfREVCVUcKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZ18xNjU1MC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnXzE2NTUwLmMKaW5kZXggYmFhMzNhNy4uNjgzN2Y4MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnXzE2NTUwLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnXzE2NTUwLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS91ZGJnLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3JlZ19hMi5oPgogCiBleHRlcm4gdTggcmVhbF9yZWFkYih2b2xhdGlsZSB1OCBfX2lvbWVtICAqYWRkcik7CiBleHRlcm4gdm9pZCByZWFsX3dyaXRlYih1OCBkYXRhLCB2b2xhdGlsZSB1OCBfX2lvbWVtICphZGRyKTsKQEAgLTI5OCwzICsyOTksNTMgQEAKIAl1ZGJnX2dldGNfcG9sbCA9IE5VTEw7CiB9CiAjZW5kaWYgLyogQ09ORklHX1BQQ19FQVJMWV9ERUJVR180MHggKi8KKworI2lmZGVmIENPTkZJR19QUENfRUFSTFlfREVCVUdfV1NQCitzdGF0aWMgdm9pZCB1ZGJnX3dzcF9mbHVzaCh2b2lkKQoreworCWlmICh1ZGJnX2NvbXBvcnQpIHsKKwkJd2hpbGUgKChyZWFkYigmdWRiZ19jb21wb3J0LT5sc3IpICYgTFNSX1RIUkUpID09IDApCisJCQkvKiB3YWl0IGZvciBpZGxlICovOworCX0KK30KKworc3RhdGljIHZvaWQgdWRiZ193c3BfcHV0YyhjaGFyIGMpCit7CisJaWYgKHVkYmdfY29tcG9ydCkgeworCQlpZiAoYyA9PSAnXG4nKQorCQkJdWRiZ193c3BfcHV0YygnXHInKTsKKwkJdWRiZ193c3BfZmx1c2goKTsKKwkJd3JpdGViKGMsICZ1ZGJnX2NvbXBvcnQtPnRocik7IGVpZWlvKCk7CisJfQorfQorCitzdGF0aWMgaW50IHVkYmdfd3NwX2dldGModm9pZCkKK3sKKwlpZiAodWRiZ19jb21wb3J0KSB7CisJCXdoaWxlICgocmVhZGIoJnVkYmdfY29tcG9ydC0+bHNyKSAmIExTUl9EUikgPT0gMCkKKwkJCTsgLyogd2FpdCBmb3IgY2hhciAqLworCQlyZXR1cm4gcmVhZGIoJnVkYmdfY29tcG9ydC0+cmJyKTsKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHVkYmdfd3NwX2dldGNfcG9sbCh2b2lkKQoreworCWlmICh1ZGJnX2NvbXBvcnQpCisJCWlmIChyZWFkYigmdWRiZ19jb21wb3J0LT5sc3IpICYgTFNSX0RSKQorCQkJcmV0dXJuIHJlYWRiKCZ1ZGJnX2NvbXBvcnQtPnJicik7CisJcmV0dXJuIC0xOworfQorCit2b2lkIF9faW5pdCB1ZGJnX2luaXRfd3NwKHZvaWQpCit7CisJdWRiZ19jb21wb3J0ID0gKHN0cnVjdCBOUzE2NTUwIF9faW9tZW0gKilXU1BfVUFSVF9WSVJUOworCisJdWRiZ19pbml0X3VhcnQodWRiZ19jb21wb3J0LCA1NzYwMCwgNTAwMDAwMDApOworCisJdWRiZ19wdXRjID0gdWRiZ193c3BfcHV0YzsKKwl1ZGJnX2ZsdXNoID0gdWRiZ193c3BfZmx1c2g7CisJdWRiZ19nZXRjID0gdWRiZ193c3BfZ2V0YzsKKwl1ZGJnX2dldGNfcG9sbCA9IHVkYmdfd3NwX2dldGNfcG9sbDsKK30KKyNlbmRpZiAvKiBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1dTUCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZWN0b3IuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmVjdG9yLlMKaW5kZXggOWRlNmYzOS4uNGQ1YTNlZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZWN0b3IuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3ZlY3Rvci5TCkBAIC0xMDIsNyArMTAyLDcgQEAKIAlNVE1TUkQocjUpCQkJLyogZW5hYmxlIHVzZSBvZiBWTVggbm93ICovCiAJaXN5bmMKIAlQUENfTENNUEkJMCxyMywwCi0JYmVxbHItCQkJCS8qIGlmIG5vIHByZXZpb3VzIG93bmVyLCBkb25lICovCisJYmVxbHIJCQkJLyogaWYgbm8gcHJldmlvdXMgb3duZXIsIGRvbmUgKi8KIAlhZGRpCXIzLHIzLFRIUkVBRAkJLyogd2FudCBUSFJFQUQgb2YgdGFzayAqLwogCVBQQ19MTAlyNSxQVF9SRUdTKHIzKQogCVBQQ19MQ01QSQkwLHI1LDAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jCmluZGV4IGM5NjFkZTQuLjBmOTViNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3MuYwpAQCAtMjM2LDcgKzIzNiw3IEBACiAKIGludCBrdm1wcGNfY29yZV9wZW5kaW5nX2RlYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIHRlc3RfYml0KEJPT0szU19JTlRFUlJVUFRfREVDUkVNRU5URVIgPj4gNywgJnZjcHUtPmFyY2gucGVuZGluZ19leGNlcHRpb25zKTsKKwlyZXR1cm4gdGVzdF9iaXQoQk9PSzNTX0lSUVBSSU9fREVDUkVNRU5URVIsICZ2Y3B1LT5hcmNoLnBlbmRpbmdfZXhjZXB0aW9ucyk7CiB9CiAKIHZvaWQga3ZtcHBjX2NvcmVfZGVxdWV1ZV9kZWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3Nfcm1oYW5kbGVycy5TIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3Nfcm1oYW5kbGVycy5TCmluZGV4IDJiOWM5MDguLjFhMWIzNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3JtaGFuZGxlcnMuUworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19ybWhhbmRsZXJzLlMKQEAgLTM1LDkgKzM1LDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1BQQ19CT09LM1NfNjQpCiAKLSNkZWZpbmUgTE9BRF9TSEFET1dfVkNQVShyZWcpCQkJCVwKLQltZnNwcglyZWcsIFNQUk5fU1BSR19QQUNBCi0KKyNkZWZpbmUgTE9BRF9TSEFET1dfVkNQVShyZWcpCUdFVF9QQUNBKHJlZykJCQkJCQogI2RlZmluZSBTSEFET1dfVkNQVV9PRkYJCVBBQ0FfS1ZNX1NWQ1BVCiAjZGVmaW5lIE1TUl9OT0lSUQkJTVNSX0tFUk5FTCAmIH4oTVNSX0lSIHwgTVNSX0RSKQogI2RlZmluZSBGVU5DKG5hbWUpIAkJR0xVRSguLG5hbWUpCkBAIC03Miw3ICs3MCw3IEBACiAuZ2xvYmFsIGt2bXBwY190cmFtcG9saW5lX1xpbnRubwoga3ZtcHBjX3RyYW1wb2xpbmVfXGludG5vOgogCi0JbXRzcHIJU1BSTl9TUFJHX1NDUkFUQ0gwLCByMTMJCS8qIFNhdmUgcjEzICovCisJU0VUX1NDUkFUQ0gwKHIxMykJCS8qIFNhdmUgcjEzICovCiAKIAkvKgogCSAqIEZpcnN0IHRoaW5nIHRvIGRvIGlzIHRvIGZpbmQgb3V0IGlmIHdlJ3JlIGNvbWluZwpAQCAtOTEsNyArODksNyBAQAogCWx3eglyMTIsIChTSEFET1dfVkNQVV9PRkYgKyBTVkNQVV9TQ1JBVENIMSkocjEzKQogCW10Y3IJcjEyCiAJUFBDX0xMCXIxMiwgKFNIQURPV19WQ1BVX09GRiArIFNWQ1BVX1NDUkFUQ0gwKShyMTMpCi0JbWZzcHIJcjEzLCBTUFJOX1NQUkdfU0NSQVRDSDAJCS8qIHIxMyA9IG9yaWdpbmFsIHIxMyAqLworCUdFVF9TQ1JBVENIMChyMTMpCQkJLyogcjEzID0gb3JpZ2luYWwgcjEzICovCiAJYglrdm1wcGNfcmVzdW1lX1xpbnRubwkJLyogR2V0IGJhY2sgb3JpZ2luYWwgaGFuZGxlciAqLwogCiAJLyogTm93IHdlIGtub3cgd2UncmUgaGFuZGxpbmcgYSBLVk0gZ3Vlc3QgKi8KQEAgLTExNCw2ICsxMTIsOSBAQAogSU5URVJSVVBUX1RSQU1QT0xJTkUJQk9PSzNTX0lOVEVSUlVQVF9EQVRBX1NUT1JBR0UKIElOVEVSUlVQVF9UUkFNUE9MSU5FCUJPT0szU19JTlRFUlJVUFRfSU5TVF9TVE9SQUdFCiBJTlRFUlJVUFRfVFJBTVBPTElORQlCT09LM1NfSU5URVJSVVBUX0VYVEVSTkFMCisjaWZkZWYgQ09ORklHX1BQQ19CT09LM1NfNjQKK0lOVEVSUlVQVF9UUkFNUE9MSU5FCUJPT0szU19JTlRFUlJVUFRfRVhURVJOQUxfSFYKKyNlbmRpZgogSU5URVJSVVBUX1RSQU1QT0xJTkUJQk9PSzNTX0lOVEVSUlVQVF9BTElHTk1FTlQKIElOVEVSUlVQVF9UUkFNUE9MSU5FCUJPT0szU19JTlRFUlJVUFRfUFJPR1JBTQogSU5URVJSVVBUX1RSQU1QT0xJTkUJQk9PSzNTX0lOVEVSUlVQVF9GUF9VTkFWQUlMCkBAIC0xNTgsNyArMTU5LDcgQEAKIAlsd3oJcjEyLCAoU0hBRE9XX1ZDUFVfT0ZGICsgU1ZDUFVfU0NSQVRDSDEpKHIxMykKIAltdGNyCXIxMgogCVBQQ19MTAlyMTIsIChTSEFET1dfVkNQVV9PRkYgKyBTVkNQVV9TQ1JBVENIMCkocjEzKQotCW1mc3ByCXIxMywgU1BSTl9TUFJHX1NDUkFUQ0gwCisJR0VUX1NDUkFUQ0gwKHIxMykKIAogCS8qIEFuZCBnZXQgYmFjayBpbnRvIHRoZSBjb2RlICovCiAJUkZJCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19zZWdtZW50LlMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19zZWdtZW50LlMKaW5kZXggN2M1MmVkMC4uNDUxMjY0MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3Nfc2VnbWVudC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3NlZ21lbnQuUwpAQCAtMTU1LDE0ICsxNTUsMjAgQEAKIAlQUENfTEwJcjIsIChTSEFET1dfVkNQVV9PRkYgKyBTVkNQVV9IT1NUX1IyKShyMTMpCiAKIAkvKiBTYXZlIGd1ZXN0IFBDIGFuZCBNU1IgKi8KLQltZnNycjAJcjMKKwlhbmRpLglyMCxyMTIsMHgyCisJYmVxCTFmCisJbWZzcHIJcjMsU1BSTl9IU1JSMAorCW1mc3ByCXI0LFNQUk5fSFNSUjEKKwlhbmRpLglyMTIscjEyLDB4M2ZmZAorCWIJMmYKKzE6CW1mc3JyMAlyMwogCW1mc3JyMQlyNAotCisyOgogCVBQQ19TVEwJcjMsIChTSEFET1dfVkNQVV9PRkYgKyBTVkNQVV9QQykocjEzKQogCVBQQ19TVEwJcjQsIChTSEFET1dfVkNQVV9PRkYgKyBTVkNQVV9TSEFET1dfU1JSMSkocjEzKQogCiAJLyogR2V0IHNjcmF0Y2gnZWQgb2ZmIHJlZ2lzdGVycyAqLwotCW1mc3ByCXI5LCBTUFJOX1NQUkdfU0NSQVRDSDAKKwlHRVRfU0NSQVRDSDAocjkpCiAJUFBDX0xMCXI4LCAoU0hBRE9XX1ZDUFVfT0ZGICsgU1ZDUFVfU0NSQVRDSDApKHIxMykKIAlsd3oJcjcsIChTSEFET1dfVkNQVV9PRkYgKyBTVkNQVV9TQ1JBVENIMSkocjEzKQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL2FsbG9jLmMgYi9hcmNoL3Bvd2VycGMvbGliL2FsbG9jLmMKaW5kZXggZjUzZTA5Yy4uMTNiNjc2YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9hbGxvYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvYWxsb2MuYwpAQCAtNiwxNCArNiw2IEBACiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKLXZvaWQgKiBfX2luaXRfcmVmb2sgYWxsb2NfbWF5YmVfYm9vdG1lbShzaXplX3Qgc2l6ZSwgZ2ZwX3QgbWFzaykKLXsKLQlpZiAobWVtX2luaXRfZG9uZSkKLQkJcmV0dXJuIGttYWxsb2Moc2l6ZSwgbWFzayk7Ci0JZWxzZQotCQlyZXR1cm4gYWxsb2NfYm9vdG1lbShzaXplKTsKLX0KLQogdm9pZCAqIF9faW5pdF9yZWZvayB6YWxsb2NfbWF5YmVfYm9vdG1lbShzaXplX3Qgc2l6ZSwgZ2ZwX3QgbWFzaykKIHsKIAl2b2lkICpwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2xpYi9jb3B5cGFnZV82NC5TIGIvYXJjaC9wb3dlcnBjL2xpYi9jb3B5cGFnZV82NC5TCmluZGV4IDRkNGVlYjkuLjUzZGNiNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9saWIvY29weXBhZ2VfNjQuUworKysgYi9hcmNoL3Bvd2VycGMvbGliL2NvcHlwYWdlXzY0LlMKQEAgLTYsNiArNiw3IEBACiAgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgpAQCAtMTUsOSArMTYsOSBAQAogICAgICAgICAudGMgICAgICAgICAgICAgcHBjNjRfY2FjaGVzW1RDXSxwcGM2NF9jYWNoZXMKICAgICAgICAgLnNlY3Rpb24gICAgICAgICIudGV4dCIKIAotCi1fR0xPQkFMKGNvcHlfNEtfcGFnZSkKLQlsaQlyNSw0MDk2CQkvKiA0SyBwYWdlIHNpemUgKi8KK19HTE9CQUwoY29weV9wYWdlKQorCWxpcwlyNSxQQUdFX1NJWkVAaAorCW9yaQlyNSxyNSxQQUdFX1NJWkVAbAogQkVHSU5fRlRSX1NFQ1RJT04KIAlsZCAgICAgIHIxMCxQUEM2NF9DQUNIRVNAdG9jKHIyKQogCWx3eglyMTEsRENBQ0hFTDFMT0dMSU5FU0laRShyMTApCS8qIGxvZzIgb2YgY2FjaGUgbGluZSBzaXplICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL2RldnJlcy5jIGIvYXJjaC9wb3dlcnBjL2xpYi9kZXZyZXMuYwppbmRleCBkZWFjNGQzLi5lOTE2MTVhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbGliL2RldnJlcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvZGV2cmVzLmMKQEAgLTksMTEgKzksMTEgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgkvKiBkZXZyZXNfKigpLCBkZXZtX2lvcmVtYXBfcmVsZWFzZSgpICovCiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4JCS8qIGlvcmVtYXBfZmxhZ3MoKSAqLworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CQkvKiBpb3JlbWFwX3Byb3QoKSAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgkvKiBFWFBPUlRfU1lNQk9MKCkgKi8KIAogLyoqCi0gKiBkZXZtX2lvcmVtYXBfcHJvdCAtIE1hbmFnZWQgaW9yZW1hcF9mbGFncygpCisgKiBkZXZtX2lvcmVtYXBfcHJvdCAtIE1hbmFnZWQgaW9yZW1hcF9wcm90KCkKICAqIEBkZXY6IEdlbmVyaWMgZGV2aWNlIHRvIHJlbWFwIElPIGFkZHJlc3MgZm9yCiAgKiBAb2Zmc2V0OiBCVVMgb2Zmc2V0IHRvIG1hcAogICogQHNpemU6IFNpemUgb2YgbWFwCkBAIC0zMSw3ICszMSw3IEBACiAJaWYgKCFwdHIpCiAJCXJldHVybiBOVUxMOwogCi0JYWRkciA9IGlvcmVtYXBfZmxhZ3Mob2Zmc2V0LCBzaXplLCBmbGFncyk7CisJYWRkciA9IGlvcmVtYXBfcHJvdChvZmZzZXQsIHNpemUsIGZsYWdzKTsKIAlpZiAoYWRkcikgewogCQkqcHRyID0gYWRkcjsKIAkJZGV2cmVzX2FkZChkZXYsIHB0cik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL3NzdGVwLmMgYi9hcmNoL3Bvd2VycGMvbGliL3NzdGVwLmMKaW5kZXggYWU1MTg5YS4uOWE1MjM0OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9zc3RlcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvc3N0ZXAuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgPGFzbS9zc3RlcC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtNDUsNiArNDYsMTggQEAKICNlbmRpZgogCiAvKgorICogRW11bGF0ZSB0aGUgdHJ1bmNhdGlvbiBvZiA2NCBiaXQgdmFsdWVzIGluIDMyLWJpdCBtb2RlLgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyB0cnVuY2F0ZV9pZl8zMmJpdCh1bnNpZ25lZCBsb25nIG1zciwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisjaWZkZWYgX19wb3dlcnBjNjRfXworCWlmICgobXNyICYgTVNSXzY0QklUKSA9PSAwKQorCQl2YWwgJj0gMHhmZmZmZmZmZlVMOworI2VuZGlmCisJcmV0dXJuIHZhbDsKK30KKworLyoKICAqIERldGVybWluZSB3aGV0aGVyIGEgY29uZGl0aW9uYWwgYnJhbmNoIGluc3RydWN0aW9uIHdvdWxkIGJyYW5jaC4KICAqLwogc3RhdGljIGludCBfX2twcm9iZXMgYnJhbmNoX3Rha2VuKHVuc2lnbmVkIGludCBpbnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC05MCwxMSArMTAzLDggQEAKIAkJaWYgKGluc3RyICYgMHgwNDAwMDAwMCkJCS8qIHVwZGF0ZSBmb3JtcyAqLwogCQkJcmVncy0+Z3ByW3JhXSA9IGVhOwogCX0KLSNpZmRlZiBfX3Bvd2VycGM2NF9fCi0JaWYgKCEocmVncy0+bXNyICYgTVNSX1NGKSkKLQkJZWEgJj0gMHhmZmZmZmZmZlVMOwotI2VuZGlmCi0JcmV0dXJuIGVhOworCisJcmV0dXJuIHRydW5jYXRlX2lmXzMyYml0KHJlZ3MtPm1zciwgZWEpOwogfQogCiAjaWZkZWYgX19wb3dlcnBjNjRfXwpAQCAtMTEzLDkgKzEyMyw4IEBACiAJCWlmICgoaW5zdHIgJiAzKSA9PSAxKQkJLyogdXBkYXRlIGZvcm1zICovCiAJCQlyZWdzLT5ncHJbcmFdID0gZWE7CiAJfQotCWlmICghKHJlZ3MtPm1zciAmIE1TUl9TRikpCi0JCWVhICY9IDB4ZmZmZmZmZmZVTDsKLQlyZXR1cm4gZWE7CisKKwlyZXR1cm4gdHJ1bmNhdGVfaWZfMzJiaXQocmVncy0+bXNyLCBlYSk7CiB9CiAjZW5kaWYgLyogX19wb3dlcnBjNjQgKi8KIApAQCAtMTM2LDExICsxNDUsOCBAQAogCQlpZiAoZG9fdXBkYXRlKQkJLyogdXBkYXRlIGZvcm1zICovCiAJCQlyZWdzLT5ncHJbcmFdID0gZWE7CiAJfQotI2lmZGVmIF9fcG93ZXJwYzY0X18KLQlpZiAoIShyZWdzLT5tc3IgJiBNU1JfU0YpKQotCQllYSAmPSAweGZmZmZmZmZmVUw7Ci0jZW5kaWYKLQlyZXR1cm4gZWE7CisKKwlyZXR1cm4gdHJ1bmNhdGVfaWZfMzJiaXQocmVncy0+bXNyLCBlYSk7CiB9CiAKIC8qCkBAIC00NjYsNyArNDcyLDcgQEAKIAogCXJlZ3MtPmNjciA9IChyZWdzLT5jY3IgJiAweDBmZmZmZmZmKSB8ICgocmVncy0+eGVyID4+IDMpICYgMHgxMDAwMDAwMCk7CiAjaWZkZWYgX19wb3dlcnBjNjRfXwotCWlmICghKHJlZ3MtPm1zciAmIE1TUl9TRikpCisJaWYgKCEocmVncy0+bXNyICYgTVNSXzY0QklUKSkKIAkJdmFsID0gKGludCkgdmFsOwogI2VuZGlmCiAJaWYgKHZhbCA8IDApCkBAIC00ODcsNyArNDkzLDcgQEAKIAkJKyt2YWw7CiAJcmVncy0+Z3ByW3JkXSA9IHZhbDsKICNpZmRlZiBfX3Bvd2VycGM2NF9fCi0JaWYgKCEocmVncy0+bXNyICYgTVNSX1NGKSkgeworCWlmICghKHJlZ3MtPm1zciAmIE1TUl82NEJJVCkpIHsKIAkJdmFsID0gKHVuc2lnbmVkIGludCkgdmFsOwogCQl2YWwxID0gKHVuc2lnbmVkIGludCkgdmFsMTsKIAl9CkBAIC01NzAsOCArNTc2LDcgQEAKIAkJaWYgKChpbnN0ciAmIDIpID09IDApCiAJCQlpbW0gKz0gcmVncy0+bmlwOwogCQlyZWdzLT5uaXAgKz0gNDsKLQkJaWYgKChyZWdzLT5tc3IgJiBNU1JfU0YpID09IDApCi0JCQlyZWdzLT5uaXAgJj0gMHhmZmZmZmZmZlVMOworCQlyZWdzLT5uaXAgPSB0cnVuY2F0ZV9pZl8zMmJpdChyZWdzLT5tc3IsIHJlZ3MtPm5pcCk7CiAJCWlmIChpbnN0ciAmIDEpCiAJCQlyZWdzLT5saW5rID0gcmVncy0+bmlwOwogCQlpZiAoYnJhbmNoX3Rha2VuKGluc3RyLCByZWdzKSkKQEAgLTYwNCwxMyArNjA5LDkgQEAKIAkJCWltbSAtPSAweDA0MDAwMDAwOwogCQlpZiAoKGluc3RyICYgMikgPT0gMCkKIAkJCWltbSArPSByZWdzLT5uaXA7Ci0JCWlmIChpbnN0ciAmIDEpIHsKLQkJCXJlZ3MtPmxpbmsgPSByZWdzLT5uaXAgKyA0OwotCQkJaWYgKChyZWdzLT5tc3IgJiBNU1JfU0YpID09IDApCi0JCQkJcmVncy0+bGluayAmPSAweGZmZmZmZmZmVUw7Ci0JCX0KLQkJaWYgKChyZWdzLT5tc3IgJiBNU1JfU0YpID09IDApCi0JCQlpbW0gJj0gMHhmZmZmZmZmZlVMOworCQlpZiAoaW5zdHIgJiAxKQorCQkJcmVncy0+bGluayA9IHRydW5jYXRlX2lmXzMyYml0KHJlZ3MtPm1zciwgcmVncy0+bmlwICsgNCk7CisJCWltbSA9IHRydW5jYXRlX2lmXzMyYml0KHJlZ3MtPm1zciwgaW1tKTsKIAkJcmVncy0+bmlwID0gaW1tOwogCQlyZXR1cm4gMTsKIAljYXNlIDE5OgpAQCAtNjE4LDExICs2MTksOCBAQAogCQljYXNlIDE2OgkvKiBiY2xyICovCiAJCWNhc2UgNTI4OgkvKiBiY2N0ciAqLwogCQkJaW1tID0gKGluc3RyICYgMHg0MDApPyByZWdzLT5jdHI6IHJlZ3MtPmxpbms7Ci0JCQlyZWdzLT5uaXAgKz0gNDsKLQkJCWlmICgocmVncy0+bXNyICYgTVNSX1NGKSA9PSAwKSB7Ci0JCQkJcmVncy0+bmlwICY9IDB4ZmZmZmZmZmZVTDsKLQkJCQlpbW0gJj0gMHhmZmZmZmZmZlVMOwotCQkJfQorCQkJcmVncy0+bmlwID0gdHJ1bmNhdGVfaWZfMzJiaXQocmVncy0+bXNyLCByZWdzLT5uaXAgKyA0KTsKKwkJCWltbSA9IHRydW5jYXRlX2lmXzMyYml0KHJlZ3MtPm1zciwgaW1tKTsKIAkJCWlmIChpbnN0ciAmIDEpCiAJCQkJcmVncy0+bGluayA9IHJlZ3MtPm5pcDsKIAkJCWlmIChicmFuY2hfdGFrZW4oaW5zdHIsIHJlZ3MpKQpAQCAtMTYxNiwxMSArMTYxNCw3IEBACiAJCXJldHVybiAwOwkvKiBpbnZva2UgRFNJIGlmIC1FRkFVTFQ/ICovCiAJfQogIGluc3RyX2RvbmU6Ci0JcmVncy0+bmlwICs9IDQ7Ci0jaWZkZWYgX19wb3dlcnBjNjRfXwotCWlmICgocmVncy0+bXNyICYgTVNSX1NGKSA9PSAwKQotCQlyZWdzLT5uaXAgJj0gMHhmZmZmZmZmZlVMOwotI2VuZGlmCisJcmVncy0+bmlwID0gdHJ1bmNhdGVfaWZfMzJiaXQocmVncy0+bXNyLCByZWdzLT5uaXAgKyA0KTsKIAlyZXR1cm4gMTsKIAogIGxvZ2ljYWxfZG9uZToKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX2xvd182NC5TIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfbG93XzY0LlMKaW5kZXggNWI3ZGQ0ZS4uYTI0MmI1ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfbG93XzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfbG93XzY0LlMKQEAgLTExOCw3ICsxMTgsNyBAQAogQkVHSU5fRlRSX1NFQ1RJT04KIAljbXBkaQlyOSwwCQkJLyogY2hlY2sgc2VnbWVudCBzaXplICovCiAJYm5lCTNmCi1FTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl8xVF9TRUdNRU5UKQorRU5EX01NVV9GVFJfU0VDVElPTl9JRlNFVChNTVVfRlRSXzFUX1NFR01FTlQpCiAJLyogQ2FsYyB2YSBhbmQgcHV0IGl0IGluIHIyOSAqLwogCXJsZGljcglyMjkscjUsMjgsNjMtMjgKIAlybGRpY2wJcjMscjMsMCwzNgpAQCAtNDAxLDcgKzQwMSw3IEBACiBCRUdJTl9GVFJfU0VDVElPTgogCWNtcGRpCXI5LDAJCQkvKiBjaGVjayBzZWdtZW50IHNpemUgKi8KIAlibmUJM2YKLUVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSXzFUX1NFR01FTlQpCitFTkRfTU1VX0ZUUl9TRUNUSU9OX0lGU0VUKE1NVV9GVFJfMVRfU0VHTUVOVCkKIAkvKiBDYWxjIHZhIGFuZCBwdXQgaXQgaW4gcjI5ICovCiAJcmxkaWNyCXIyOSxyNSwyOCw2My0yOAkJLyogcjI5ID0gKHZzaWQgPDwgMjgpICovCiAJcmxkaWNsCXIzLHIzLDAsMzYJCS8qIHIzID0gKGVhICYgMHgwZmZmZmZmZikgKi8KQEAgLTcxNSw3ICs3MTUsNyBAQAogCWFuZGkuCXIwLHIzMSxfUEFHRV9OT19DQUNIRQogCS8qIElmIHNvLCBiYWlsIG91dCBhbmQgcmVmYXVsdCBhcyBhIDRrIHBhZ2UgKi8KIAlibmUtCWh0NjRfYmFpbF9vawotRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfQ0lfTEFSR0VfUEFHRSkKK0VORF9NTVVfRlRSX1NFQ1RJT05fSUZDTFIoTU1VX0ZUUl9DSV9MQVJHRV9QQUdFKQogCS8qIFByZXBhcmUgbmV3IFBURSB2YWx1ZSAodHVybiBhY2Nlc3MgUlcgaW50byBESVJUWSwgdGhlbgogCSAqIGFkZCBCVVNZIGFuZCBBQ0NFU1NFRCkKIAkgKi8KQEAgLTczNiw3ICs3MzYsNyBAQAogQkVHSU5fRlRSX1NFQ1RJT04KIAljbXBkaQlyOSwwCQkJLyogY2hlY2sgc2VnbWVudCBzaXplICovCiAJYm5lCTNmCi1FTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl8xVF9TRUdNRU5UKQorRU5EX01NVV9GVFJfU0VDVElPTl9JRlNFVChNTVVfRlRSXzFUX1NFR01FTlQpCiAJLyogQ2FsYyB2YSBhbmQgcHV0IGl0IGluIHIyOSAqLwogCXJsZGljcglyMjkscjUsMjgsNjMtMjgKIAlybGRpY2wJcjMscjMsMCwzNgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2hhc2hfbmF0aXZlXzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF9uYXRpdmVfNjQuYwppbmRleCA3ODRhNDAwLi5kZmQ3NjQ4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF9uYXRpdmVfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF9uYXRpdmVfNjQuYwpAQCAtNTAsOSArNTAsOCBAQAogCWNhc2UgTU1VX1BBR0VfNEs6CiAJCXZhICY9IH4weGZmZnVsOwogCQl2YSB8PSBzc2l6ZSA8PCA4OwotCQlhc20gdm9sYXRpbGUoQVNNX01NVV9GVFJfSUZDTFIoInRsYmllICUwLDAiLCBQUENfVExCSUUoJTEsJTApLAotCQkJCQkgICAgICAgJTIpCi0JCQkgICAgIDogOiAiciIgKHZhKSwgInIiKDApLCAiaSIgKE1NVV9GVFJfVExCSUVfMjA2KQorCQlhc20gdm9sYXRpbGUoQVNNX0ZUUl9JRkNMUigidGxiaWUgJTAsMCIsIFBQQ19UTEJJRSglMSwlMCksICUyKQorCQkJICAgICA6IDogInIiICh2YSksICJyIigwKSwgImkiIChDUFVfRlRSX0hWTU9ERV8yMDYpCiAJCQkgICAgIDogIm1lbW9yeSIpOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtNjEsOSArNjAsOCBAQAogCQl2YSB8PSBwZW5jIDw8IDEyOwogCQl2YSB8PSBzc2l6ZSA8PCA4OwogCQl2YSB8PSAxOyAvKiBMICovCi0JCWFzbSB2b2xhdGlsZShBU01fTU1VX0ZUUl9JRkNMUigidGxiaWUgJTAsMSIsIFBQQ19UTEJJRSglMSwlMCksCi0JCQkJCSAgICAgICAlMikKLQkJCSAgICAgOiA6ICJyIiAodmEpLCAiciIoMCksICJpIiAoTU1VX0ZUUl9UTEJJRV8yMDYpCisJCWFzbSB2b2xhdGlsZShBU01fRlRSX0lGQ0xSKCJ0bGJpZSAlMCwxIiwgUFBDX1RMQklFKCUxLCUwKSwgJTIpCisJCQkgICAgIDogOiAiciIgKHZhKSwgInIiKDApLCAiaSIgKENQVV9GVFJfSFZNT0RFXzIwNikKIAkJCSAgICAgOiAibWVtb3J5Iik7CiAJCWJyZWFrOwogCX0KQEAgLTk4LDggKzk2LDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHRsYmllKHVuc2lnbmVkIGxvbmcgdmEsIGludCBwc2l6ZSwgaW50IHNzaXplLCBpbnQgbG9jYWwpCiB7Ci0JdW5zaWduZWQgaW50IHVzZV9sb2NhbCA9IGxvY2FsICYmIGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1RMQklFTCk7Ci0JaW50IGxvY2tfdGxiaWUgPSAhY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfTE9DS0xFU1NfVExCSUUpOworCXVuc2lnbmVkIGludCB1c2VfbG9jYWwgPSBsb2NhbCAmJiBtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl9UTEJJRUwpOworCWludCBsb2NrX3RsYmllID0gIW1tdV9oYXNfZmVhdHVyZShNTVVfRlRSX0xPQ0tMRVNTX1RMQklFKTsKIAogCWlmICh1c2VfbG9jYWwpCiAJCXVzZV9sb2NhbCA9IG1tdV9wc2l6ZV9kZWZzW3BzaXplXS50bGJpZWw7CkBAIC01MDMsNyArNTAxLDcgQEAKIAkJfSBwdGVfaXRlcmF0ZV9oYXNoZWRfZW5kKCk7CiAJfQogCi0JaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1RMQklFTCkgJiYKKwlpZiAobW11X2hhc19mZWF0dXJlKE1NVV9GVFJfVExCSUVMKSAmJgogCSAgICBtbXVfcHNpemVfZGVmc1twc2l6ZV0udGxiaWVsICYmIGxvY2FsKSB7CiAJCWFzbSB2b2xhdGlsZSgicHRlc3luYyI6OjoibWVtb3J5Iik7CiAJCWZvciAoaSA9IDA7IGkgPCBudW1iZXI7IGkrKykgewpAQCAtNTE3LDcgKzUxNSw3IEBACiAJCX0KIAkJYXNtIHZvbGF0aWxlKCJwdGVzeW5jIjo6OiJtZW1vcnkiKTsKIAl9IGVsc2UgewotCQlpbnQgbG9ja190bGJpZSA9ICFjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9MT0NLTEVTU19UTEJJRSk7CisJCWludCBsb2NrX3RsYmllID0gIW1tdV9oYXNfZmVhdHVyZShNTVVfRlRSX0xPQ0tMRVNTX1RMQklFKTsKIAogCQlpZiAobG9ja190bGJpZSkKIAkJCXJhd19zcGluX2xvY2soJm5hdGl2ZV90bGJpZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jCmluZGV4IDU4YTAyMmQuLjI2YjI4NzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYwpAQCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9zcHUuaD4KICNpbmNsdWRlIDxhc20vdWRiZy5oPgorI2luY2x1ZGUgPGFzbS9jb2RlLXBhdGNoaW5nLmg+CiAKICNpZmRlZiBERUJVRwogI2RlZmluZSBEQkcoZm10Li4uKSB1ZGJnX3ByaW50ZihmbXQpCkBAIC0yNTgsMTEgKzI1OSwxMSBAQAogCWZvciAoOyBzaXplID49IDQ7IHNpemUgLT0gNCwgKytwcm9wKSB7CiAJCWlmIChwcm9wWzBdID09IDQwKSB7CiAJCQlEQkcoIjFUIHNlZ21lbnQgc3VwcG9ydCBkZXRlY3RlZFxuIik7Ci0JCQljdXJfY3B1X3NwZWMtPmNwdV9mZWF0dXJlcyB8PSBDUFVfRlRSXzFUX1NFR01FTlQ7CisJCQljdXJfY3B1X3NwZWMtPm1tdV9mZWF0dXJlcyB8PSBNTVVfRlRSXzFUX1NFR01FTlQ7CiAJCQlyZXR1cm4gMTsKIAkJfQogCX0KLQljdXJfY3B1X3NwZWMtPmNwdV9mZWF0dXJlcyAmPSB+Q1BVX0ZUUl9OT19TTEJJRV9COworCWN1cl9jcHVfc3BlYy0+bW11X2ZlYXR1cmVzICY9IH5NTVVfRlRSX05PX1NMQklFX0I7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4OCw3ICsyODksNyBAQAogCWlmIChwcm9wICE9IE5VTEwpIHsKIAkJREJHKCJQYWdlIHNpemVzIGZyb20gZGV2aWNlLXRyZWU6XG4iKTsKIAkJc2l6ZSAvPSA0OwotCQljdXJfY3B1X3NwZWMtPmNwdV9mZWF0dXJlcyAmPSB+KENQVV9GVFJfMTZNX1BBR0UpOworCQljdXJfY3B1X3NwZWMtPm1tdV9mZWF0dXJlcyAmPSB+KE1NVV9GVFJfMTZNX1BBR0UpOwogCQl3aGlsZShzaXplID4gMCkgewogCQkJdW5zaWduZWQgaW50IHNoaWZ0ID0gcHJvcFswXTsKIAkJCXVuc2lnbmVkIGludCBzbGJlbmMgPSBwcm9wWzFdOwpAQCAtMzE2LDcgKzMxNyw3IEBACiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4MTg6CiAJCQkJaWR4ID0gTU1VX1BBR0VfMTZNOwotCQkJCWN1cl9jcHVfc3BlYy0+Y3B1X2ZlYXR1cmVzIHw9IENQVV9GVFJfMTZNX1BBR0U7CisJCQkJY3VyX2NwdV9zcGVjLT5tbXVfZmVhdHVyZXMgfD0gTU1VX0ZUUl8xNk1fUEFHRTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMHgyMjoKIAkJCQlpZHggPSBNTVVfUEFHRV8xNkc7CkBAIC00MTEsNyArNDEyLDcgQEAKIAkgKiBOb3QgaW4gdGhlIGRldmljZS10cmVlLCBsZXQncyBmYWxsYmFjayBvbiBrbm93biBzaXplCiAJICogbGlzdCBmb3IgMTZNIGNhcGFibGUgR1AgJiBHUgogCSAqLwotCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl8xNk1fUEFHRSkpCisJaWYgKG1tdV9oYXNfZmVhdHVyZShNTVVfRlRSXzE2TV9QQUdFKSkKIAkJbWVtY3B5KG1tdV9wc2l6ZV9kZWZzLCBtbXVfcHNpemVfZGVmYXVsdHNfZ3AsCiAJCSAgICAgICBzaXplb2YobW11X3BzaXplX2RlZmF1bHRzX2dwKSk7CiAgZm91bmQ6CkBAIC00NDEsNyArNDQyLDcgQEAKIAkJbW11X3ZtYWxsb2NfcHNpemUgPSBNTVVfUEFHRV82NEs7CiAJCWlmIChtbXVfbGluZWFyX3BzaXplID09IE1NVV9QQUdFXzRLKQogCQkJbW11X2xpbmVhcl9wc2l6ZSA9IE1NVV9QQUdFXzY0SzsKLQkJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0NJX0xBUkdFX1BBR0UpKSB7CisJCWlmIChtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl9DSV9MQVJHRV9QQUdFKSkgewogCQkJLyoKIAkJCSAqIERvbid0IHVzZSA2NGsgcGFnZXMgZm9yIGlvcmVtYXAgb24gcFNlcmllcywgc2luY2UKIAkJCSAqIHRoYXQgd291bGQgc3RvcCB1cyBhY2Nlc3NpbmcgdGhlIEhFQSBldGhlcm5ldC4KQEAgLTU0NywxNSArNTQ4LDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi8KIAotc3RhdGljIGlubGluZSB2b2lkIG1ha2VfYmwodW5zaWduZWQgaW50ICppbnNuX2FkZHIsIHZvaWQgKmZ1bmMpCi17Ci0JdW5zaWduZWQgbG9uZyBmdW5jcCA9ICooKHVuc2lnbmVkIGxvbmcgKilmdW5jKTsKLQlpbnQgb2Zmc2V0ID0gZnVuY3AgLSAodW5zaWduZWQgbG9uZylpbnNuX2FkZHI7Ci0KLQkqaW5zbl9hZGRyID0gKHVuc2lnbmVkIGludCkoMHg0ODAwMDAwMSB8IChvZmZzZXQgJiAweDAzZmZmZmZjKSk7Ci0JZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWluc25fYWRkciwgNCsKLQkJCSAgICh1bnNpZ25lZCBsb25nKWluc25fYWRkcik7Ci19CisjZGVmaW5lIEZVTkNUSU9OX1RFWFQoQSkJKCgqKHVuc2lnbmVkIGxvbmcgKikoQSkpKQogCiBzdGF0aWMgdm9pZCBfX2luaXQgaHRhYl9maW5pc2hfaW5pdCh2b2lkKQogewpAQCAtNTcwLDE2ICs1NjMsMzMgQEAKIAlleHRlcm4gdW5zaWduZWQgaW50ICpodDY0X2NhbGxfaHB0ZV9yZW1vdmU7CiAJZXh0ZXJuIHVuc2lnbmVkIGludCAqaHQ2NF9jYWxsX2hwdGVfdXBkYXRlcHA7CiAKLQltYWtlX2JsKGh0NjRfY2FsbF9ocHRlX2luc2VydDEsIHBwY19tZC5ocHRlX2luc2VydCk7Ci0JbWFrZV9ibChodDY0X2NhbGxfaHB0ZV9pbnNlcnQyLCBwcGNfbWQuaHB0ZV9pbnNlcnQpOwotCW1ha2VfYmwoaHQ2NF9jYWxsX2hwdGVfcmVtb3ZlLCBwcGNfbWQuaHB0ZV9yZW1vdmUpOwotCW1ha2VfYmwoaHQ2NF9jYWxsX2hwdGVfdXBkYXRlcHAsIHBwY19tZC5ocHRlX3VwZGF0ZXBwKTsKKwlwYXRjaF9icmFuY2goaHQ2NF9jYWxsX2hwdGVfaW5zZXJ0MSwKKwkJRlVOQ1RJT05fVEVYVChwcGNfbWQuaHB0ZV9pbnNlcnQpLAorCQlCUkFOQ0hfU0VUX0xJTkspOworCXBhdGNoX2JyYW5jaChodDY0X2NhbGxfaHB0ZV9pbnNlcnQyLAorCQlGVU5DVElPTl9URVhUKHBwY19tZC5ocHRlX2luc2VydCksCisJCUJSQU5DSF9TRVRfTElOSyk7CisJcGF0Y2hfYnJhbmNoKGh0NjRfY2FsbF9ocHRlX3JlbW92ZSwKKwkJRlVOQ1RJT05fVEVYVChwcGNfbWQuaHB0ZV9yZW1vdmUpLAorCQlCUkFOQ0hfU0VUX0xJTkspOworCXBhdGNoX2JyYW5jaChodDY0X2NhbGxfaHB0ZV91cGRhdGVwcCwKKwkJRlVOQ1RJT05fVEVYVChwcGNfbWQuaHB0ZV91cGRhdGVwcCksCisJCUJSQU5DSF9TRVRfTElOSyk7CisKICNlbmRpZiAvKiBDT05GSUdfUFBDX0hBU19IQVNIXzY0SyAqLwogCi0JbWFrZV9ibChodGFiX2NhbGxfaHB0ZV9pbnNlcnQxLCBwcGNfbWQuaHB0ZV9pbnNlcnQpOwotCW1ha2VfYmwoaHRhYl9jYWxsX2hwdGVfaW5zZXJ0MiwgcHBjX21kLmhwdGVfaW5zZXJ0KTsKLQltYWtlX2JsKGh0YWJfY2FsbF9ocHRlX3JlbW92ZSwgcHBjX21kLmhwdGVfcmVtb3ZlKTsKLQltYWtlX2JsKGh0YWJfY2FsbF9ocHRlX3VwZGF0ZXBwLCBwcGNfbWQuaHB0ZV91cGRhdGVwcCk7CisJcGF0Y2hfYnJhbmNoKGh0YWJfY2FsbF9ocHRlX2luc2VydDEsCisJCUZVTkNUSU9OX1RFWFQocHBjX21kLmhwdGVfaW5zZXJ0KSwKKwkJQlJBTkNIX1NFVF9MSU5LKTsKKwlwYXRjaF9icmFuY2goaHRhYl9jYWxsX2hwdGVfaW5zZXJ0MiwKKwkJRlVOQ1RJT05fVEVYVChwcGNfbWQuaHB0ZV9pbnNlcnQpLAorCQlCUkFOQ0hfU0VUX0xJTkspOworCXBhdGNoX2JyYW5jaChodGFiX2NhbGxfaHB0ZV9yZW1vdmUsCisJCUZVTkNUSU9OX1RFWFQocHBjX21kLmhwdGVfcmVtb3ZlKSwKKwkJQlJBTkNIX1NFVF9MSU5LKTsKKwlwYXRjaF9icmFuY2goaHRhYl9jYWxsX2hwdGVfdXBkYXRlcHAsCisJCUZVTkNUSU9OX1RFWFQocHBjX21kLmhwdGVfdXBkYXRlcHApLAorCQlCUkFOQ0hfU0VUX0xJTkspOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgaHRhYl9pbml0aWFsaXplKHZvaWQpCkBAIC01OTgsNyArNjA4LDcgQEAKIAkvKiBJbml0aWFsaXplIHBhZ2Ugc2l6ZXMgKi8KIAlodGFiX2luaXRfcGFnZV9zaXplcygpOwogCi0JaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSXzFUX1NFR01FTlQpKSB7CisJaWYgKG1tdV9oYXNfZmVhdHVyZShNTVVfRlRSXzFUX1NFR01FTlQpKSB7CiAJCW1tdV9rZXJuZWxfc3NpemUgPSBNTVVfU0VHU0laRV8xVDsKIAkJbW11X2hpZ2h1c2VyX3NzaXplID0gTU1VX1NFR1NJWkVfMVQ7CiAJCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIDFUQiBzZWdtZW50c1xuIik7CkBAIC03MzksNyArNzQ5LDcgQEAKIAogCS8qIEluaXRpYWxpemUgc3RhYiAvIFNMQiBtYW5hZ2VtZW50IGV4Y2VwdCBvbiBpU2VyaWVzCiAJICovCi0JaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1NMQikpCisJaWYgKG1tdV9oYXNfZmVhdHVyZShNTVVfRlRSX1NMQikpCiAJCXNsYl9pbml0aWFsaXplKCk7CiAJZWxzZSBpZiAoIWZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpCiAJCXN0YWJfaW5pdGlhbGl6ZShnZXRfcGFjYSgpLT5zdGFiX3JlYWwpOwpAQCAtNzU2LDcgKzc2Niw3IEBACiAJICogaW4gcmVhbCBtb2RlIG9uIHBTZXJpZXMgYW5kIHdlIHdhbnQgYSB2aXJ0dWFsIGFkZHJlc3Mgb24KIAkgKiBpU2VyaWVzIGFueXdheQogCSAqLwotCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9TTEIpKQorCWlmIChtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl9TTEIpKQogCQlzbGJfaW5pdGlhbGl6ZSgpOwogCWVsc2UKIAkJc3RhYl9pbml0aWFsaXplKGdldF9wYWNhKCktPnN0YWJfYWRkcik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jCmluZGV4IDliYjI0OWMuLjBiOWE1YzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jCkBAIC01MjksNyArNTI5LDcgQEAKIHsKIAlpbnQgcHNpemU7CiAKLQlpZiAoIWNwdV9oYXNfZmVhdHVyZShDUFVfRlRSXzE2TV9QQUdFKSkKKwlpZiAoIW1tdV9oYXNfZmVhdHVyZShNTVVfRlRSXzE2TV9QQUdFKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlmb3IgKHBzaXplID0gMDsgcHNpemUgPCBNTVVfUEFHRV9DT1VOVDsgKytwc2l6ZSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X2hhc2g2NC5jIGIvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X2hhc2g2NC5jCmluZGV4IDI1MzU4MjguLjNiYWZjM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9oYXNoNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfaGFzaDY0LmMKQEAgLTIwLDkgKzIwLDIwNSBAQAogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogCisjaWZkZWYgQ09ORklHX1BQQ19JQ1NXWAorLyoKKyAqIFRoZSBwcm9jZXNzb3IgYW5kIGl0cyBMMiBjYWNoZSBjYXVzZSB0aGUgaWNzd3ggaW5zdHJ1Y3Rpb24gdG8KKyAqIGdlbmVyYXRlIGEgQ09QX1JFUSB0cmFuc2FjdGlvbiBvbiBQb3dlckJ1cy4gVGhlIHRyYW5zYWN0aW9uIGhhcworICogbm8gYWRkcmVzcywgYW5kIHRoZSBwcm9jZXNzb3IgZG9lcyBub3QgcGVyZm9ybSBhbiBNTVUgYWNjZXNzCisgKiB0byBhdXRoZW50aWNhdGUgdGhlIHRyYW5zYWN0aW9uLiBUaGUgY29tbWFuZCBwb3J0aW9uIG9mIHRoZQorICogUG93ZXJCdXMgQ09QX1JFUSB0cmFuc2FjdGlvbiBpbmNsdWRlcyB0aGUgTFBBUl9JRCAoTFBJRCkgYW5kCisgKiB0aGUgY29wcm9jZXNzb3IgUHJvY2VzcyBJRCAoUElEKSwgd2hpY2ggdGhlIGNvcHJvY2Vzc29yIGNvbXBhcmVzCisgKiB0byB0aGUgYXV0aG9yaXplZCBMUElEIGFuZCBQSUQgaGVsZCBpbiB0aGUgY29wcm9jZXNzb3IsIHRvIGRldGVybWluZQorICogaWYgdGhlIHByb2Nlc3MgaXMgYXV0aG9yaXplZCB0byBnZW5lcmF0ZSB0aGUgdHJhbnNhY3Rpb24uCisgKiBUaGUgZGF0YSBvZiB0aGUgQ09QX1JFUSB0cmFuc2FjdGlvbiBpcyAxMjgtYnl0ZSBvciBsZXNzIGFuZCBpcworICogcGxhY2VkIGluIGNhY2hlYWJsZSBtZW1vcnkgb24gYSAxMjgtYnl0ZSBjYWNoZSBsaW5lIGJvdW5kYXJ5LgorICoKKyAqIFRoZSB0YXNrIHRvIHVzZSBhIGNvcHJvY2Vzc29yIHNob3VsZCB1c2UgdXNlX2NvcCgpIHRvIGFsbG9jYXRlCisgKiBhIGNvcHJvY2Vzc29yIFBJRCBiZWZvcmUgZXhlY3V0aW5nIGljc3d4IGluc3RydWN0aW9uLiB1c2VfY29wKCkKKyAqIGFsc28gZW5hYmxlcyB0aGUgY29wcm9jZXNzb3IgY29udGV4dCBzd2l0Y2hpbmcuIERyb3BfY29wKCkgaXMKKyAqIHVzZWQgdG8gZnJlZSB0aGUgY29wcm9jZXNzb3IgUElELgorICoKKyAqIEV4YW1wbGU6CisgKiBIb3N0IEZhYnJpYyBJbnRlcmZhY2UgKEhGSSkgaXMgYSBQb3dlclBDIG5ldHdvcmsgY29wcm9jZXNzb3IuCisgKiBFYWNoIEhGSSBoYXZlIG11bHRpcGxlIHdpbmRvd3MuIEVhY2ggSEZJIHdpbmRvdyBzZXJ2ZXMgYXMgYQorICogbmV0d29yayBkZXZpY2Ugc2VuZGluZyB0byBhbmQgcmVjZWl2aW5nIGZyb20gSEZJIG5ldHdvcmsuCisgKiBIRkkgaW1tZWRpYXRlIHNlbmQgZnVuY3Rpb24gdXNlcyBpY3N3eCBpbnN0cnVjdGlvbi4gVGhlIGltbWVkaWF0ZQorICogc2VuZCBmdW5jdGlvbiBhbGxvd3Mgc21hbGwgKHNpbmdsZSBjYWNoZS1saW5lKSBwYWNrZXRzIGJlIHNlbnQKKyAqIHdpdGhvdXQgdXNpbmcgdGhlIHJlZ3VsYXIgSEZJIHNlbmQgRklGTyBhbmQgZG9vcmJlbGwsIHdoaWNoIGFyZQorICogbXVjaCBzbG93ZXIgdGhhbiBpbW1lZGlhdGUgc2VuZC4KKyAqCisgKiBGb3IgZWFjaCB0YXNrIGludGVuZGluZyB0byB1c2UgSEZJIGltbWVkaWF0ZSBzZW5kLCB0aGUgSEZJIGRyaXZlcgorICogY2FsbHMgdXNlX2NvcCgpIHRvIG9idGFpbiBhIGNvcHJvY2Vzc29yIFBJRCBmb3IgdGhlIHRhc2suCisgKiBUaGUgSEZJIGRyaXZlciB0aGVuIGFsbG9jYXRlIGEgZnJlZSBIRkkgd2luZG93IGFuZCBzYXZlIHRoZQorICogY29wcm9jZXNzb3IgUElEIHRvIHRoZSBIRkkgd2luZG93IHRvIGFsbG93IHRoZSB0YXNrIHRvIHVzZSB0aGUKKyAqIEhGSSB3aW5kb3cuCisgKgorICogVGhlIEhGSSBkcml2ZXIgcmVwZWF0ZWRseSBjcmVhdGVzIGltbWVkaWF0ZSBzZW5kIHBhY2tldHMgYW5kCisgKiBpc3N1ZXMgaWNzd3ggaW5zdHJ1Y3Rpb24gdG8gc2VuZCBkYXRhIHRocm91Z2ggdGhlIEhGSSB3aW5kb3cuCisgKiBUaGUgSEZJIGNvbXBhcmVzIHRoZSBjb3Byb2Nlc3NvciBQSUQgaW4gdGhlIENQVSBQSUQgcmVnaXN0ZXIKKyAqIHRvIHRoZSBQSUQgaGVsZCBpbiB0aGUgSEZJIHdpbmRvdyB0byBkZXRlcm1pbmUgaWYgdGhlIHRyYW5zYWN0aW9uCisgKiBpcyBhbGxvd2VkLgorICoKKyAqIFdoZW4gdGhlIHRhc2sgdG8gcmVsZWFzZSB0aGUgSEZJIHdpbmRvdywgdGhlIEhGSSBkcml2ZXIgY2FsbHMKKyAqIGRyb3BfY29wKCkgdG8gcmVsZWFzZSB0aGUgY29wcm9jZXNzb3IgUElELgorICovCisKKyNkZWZpbmUgQ09QX1BJRF9OT05FIDAKKyNkZWZpbmUgQ09QX1BJRF9NSU4gKENPUF9QSURfTk9ORSArIDEpCisjZGVmaW5lIENPUF9QSURfTUFYICgweEZGRkYpCisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobW11X2NvbnRleHRfYWNvcF9sb2NrKTsKK3N0YXRpYyBERUZJTkVfSURBKGNvcF9pZGEpOworCit2b2lkIHN3aXRjaF9jb3Aoc3RydWN0IG1tX3N0cnVjdCAqbmV4dCkKK3sKKwltdHNwcihTUFJOX1BJRCwgbmV4dC0+Y29udGV4dC5jb3BfcGlkKTsKKwltdHNwcihTUFJOX0FDT1AsIG5leHQtPmNvbnRleHQuYWNvcCk7Cit9CisKK3N0YXRpYyBpbnQgbmV3X2NvcF9waWQoc3RydWN0IGlkYSAqaWRhLCBpbnQgbWluX2lkLCBpbnQgbWF4X2lkLAorCQkgICAgICAgc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlpbnQgaW5kZXg7CisJaW50IGVycjsKKworYWdhaW46CisJaWYgKCFpZGFfcHJlX2dldChpZGEsIEdGUF9LRVJORUwpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwaW5fbG9jayhsb2NrKTsKKwllcnIgPSBpZGFfZ2V0X25ld19hYm92ZShpZGEsIG1pbl9pZCwgJmluZGV4KTsKKwlzcGluX3VubG9jayhsb2NrKTsKKworCWlmIChlcnIgPT0gLUVBR0FJTikKKwkJZ290byBhZ2FpbjsKKwllbHNlIGlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAoaW5kZXggPiBtYXhfaWQpIHsKKwkJc3Bpbl9sb2NrKGxvY2spOworCQlpZGFfcmVtb3ZlKGlkYSwgaW5kZXgpOworCQlzcGluX3VubG9jayhsb2NrKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0dXJuIGluZGV4OworfQorCitzdGF0aWMgdm9pZCBzeW5jX2NvcCh2b2lkICphcmcpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBhcmc7CisKKwlpZiAobW0gPT0gY3VycmVudC0+YWN0aXZlX21tKQorCQlzd2l0Y2hfY29wKGN1cnJlbnQtPmFjdGl2ZV9tbSk7Cit9CisKKy8qKgorICogU3RhcnQgdXNpbmcgYSBjb3Byb2Nlc3Nvci4KKyAqIEBhY29wOiBtYXNrIG9mIGNvcHJvY2Vzc29yIHRvIGJlIHVzZWQuCisgKiBAbW06IFRoZSBtbSB0aGUgY29wcm9jZXNzb3IgdG8gYXNzb2NpYXRlIHdpdGguIE1vc3QgbGlrZWx5IGN1cnJlbnQgbW0uCisgKgorICogUmV0dXJuIGEgcG9zaXRpdmUgUElEIGlmIHN1Y2Nlc3NmdWwuIE5lZ2F0aXZlIGVycm5vIG90aGVyd2lzZS4KKyAqIFRoZSByZXR1cm5lZCBQSUQgd2lsbCBiZSBmZWQgdG8gdGhlIGNvcHJvY2Vzc29yIHRvIGRldGVybWluZSBpZiBhbgorICogaWNzd3ggdHJhbnNhY3Rpb24gaXMgYXV0aGVudGljYXRlZC4KKyAqLworaW50IHVzZV9jb3AodW5zaWduZWQgbG9uZyBhY29wLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9JQ1NXWCkpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCFtbSB8fCAhYWNvcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSBtbV91c2VycyBkb2Vzbid0IGNoYW5nZSAqLworCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlzcGluX2xvY2sobW0tPmNvbnRleHQuY29wX2xvY2twKTsKKworCWlmIChtbS0+Y29udGV4dC5jb3BfcGlkID09IENPUF9QSURfTk9ORSkgeworCQlyZXQgPSBuZXdfY29wX3BpZCgmY29wX2lkYSwgQ09QX1BJRF9NSU4sIENPUF9QSURfTUFYLAorCQkJCSAgJm1tdV9jb250ZXh0X2Fjb3BfbG9jayk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisKKwkJbW0tPmNvbnRleHQuY29wX3BpZCA9IHJldDsKKwl9CisJbW0tPmNvbnRleHQuYWNvcCB8PSBhY29wOworCisJc3luY19jb3AobW0pOworCisJLyoKKwkgKiBJZiB0aGlzIGlzIGEgdGhyZWFkZWQgcHJvY2VzcyB0aGVuIHRoZXJlIG1pZ2h0IGJlIG90aGVyIHRocmVhZHMKKwkgKiBydW5uaW5nLiBXZSBuZWVkIHRvIHNlbmQgYW4gSVBJIHRvIGZvcmNlIHRoZW0gdG8gcGljayB1cCBhbnkKKwkgKiBjaGFuZ2UgaW4gUElEIGFuZCBBQ09QLgorCSAqLworCWlmIChhdG9taWNfcmVhZCgmbW0tPm1tX3VzZXJzKSA+IDEpCisJCXNtcF9jYWxsX2Z1bmN0aW9uKHN5bmNfY29wLCBtbSwgMSk7CisKKwlyZXQgPSBtbS0+Y29udGV4dC5jb3BfcGlkOworCitvdXQ6CisJc3Bpbl91bmxvY2sobW0tPmNvbnRleHQuY29wX2xvY2twKTsKKwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzZV9jb3ApOworCisvKioKKyAqIFN0b3AgdXNpbmcgYSBjb3Byb2Nlc3Nvci4KKyAqIEBhY29wOiBtYXNrIG9mIGNvcHJvY2Vzc29yIHRvIGJlIHN0b3BwZWQuCisgKiBAbW06IFRoZSBtbSB0aGUgY29wcm9jZXNzb3IgYXNzb2NpYXRlZCB3aXRoLgorICovCit2b2lkIGRyb3BfY29wKHVuc2lnbmVkIGxvbmcgYWNvcCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJaW50IGZyZWVfcGlkID0gQ09QX1BJRF9OT05FOworCisJaWYgKCFjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9JQ1NXWCkpCisJCXJldHVybjsKKworCWlmIChXQVJOX09OX09OQ0UoIW1tKSkKKwkJcmV0dXJuOworCisJLyogV2UgbmVlZCB0byBtYWtlIHN1cmUgbW1fdXNlcnMgZG9lc24ndCBjaGFuZ2UgKi8KKwlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJc3Bpbl9sb2NrKG1tLT5jb250ZXh0LmNvcF9sb2NrcCk7CisKKwltbS0+Y29udGV4dC5hY29wICY9IH5hY29wOworCisJaWYgKCghbW0tPmNvbnRleHQuYWNvcCkgJiYgKG1tLT5jb250ZXh0LmNvcF9waWQgIT0gQ09QX1BJRF9OT05FKSkgeworCQlmcmVlX3BpZCA9IG1tLT5jb250ZXh0LmNvcF9waWQ7CisJCW1tLT5jb250ZXh0LmNvcF9waWQgPSBDT1BfUElEX05PTkU7CisJfQorCisJc3luY19jb3AobW0pOworCisJLyoKKwkgKiBJZiB0aGlzIGlzIGEgdGhyZWFkZWQgcHJvY2VzcyB0aGVuIHRoZXJlIG1pZ2h0IGJlIG90aGVyIHRocmVhZHMKKwkgKiBydW5uaW5nLiBXZSBuZWVkIHRvIHNlbmQgYW4gSVBJIHRvIGZvcmNlIHRoZW0gdG8gcGljayB1cCBhbnkKKwkgKiBjaGFuZ2UgaW4gUElEIGFuZCBBQ09QLgorCSAqLworCWlmIChhdG9taWNfcmVhZCgmbW0tPm1tX3VzZXJzKSA+IDEpCisJCXNtcF9jYWxsX2Z1bmN0aW9uKHN5bmNfY29wLCBtbSwgMSk7CisKKwlpZiAoZnJlZV9waWQgIT0gQ09QX1BJRF9OT05FKSB7CisJCXNwaW5fbG9jaygmbW11X2NvbnRleHRfYWNvcF9sb2NrKTsKKwkJaWRhX3JlbW92ZSgmY29wX2lkYSwgZnJlZV9waWQpOworCQlzcGluX3VubG9jaygmbW11X2NvbnRleHRfYWNvcF9sb2NrKTsKKwl9CisKKwlzcGluX3VubG9jayhtbS0+Y29udGV4dC5jb3BfbG9ja3ApOworCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkcm9wX2NvcCk7CisKKyNlbmRpZiAvKiBDT05GSUdfUFBDX0lDU1dYICovCisKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobW11X2NvbnRleHRfbG9jayk7CiBzdGF0aWMgREVGSU5FX0lEQShtbXVfY29udGV4dF9pZGEpOwogCkBAIC0zMSw3ICsyMjcsNiBAQAogICogRWFjaCBzZWdtZW50IGNvbnRhaW5zIDJeMjggYnl0ZXMuICBFYWNoIGNvbnRleHQgbWFwcyAyXjQ0IGJ5dGVzLAogICogc28gd2UgY2FuIHN1cHBvcnQgMl4xOS0xIGNvbnRleHRzICgxOSA9PSAzNSArIDI4IC0gNDQpLgogICovCi0jZGVmaW5lIE5PX0NPTlRFWFQJMAogI2RlZmluZSBNQVhfQ09OVEVYVAkoKDFVTCA8PCAxOSkgLSAxKQogCiBpbnQgX19pbml0X25ld19jb250ZXh0KHZvaWQpCkBAIC03OSw2ICsyNzQsMTYgQEAKIAkJc2xpY2Vfc2V0X3VzZXJfcHNpemUobW0sIG1tdV92aXJ0dWFsX3BzaXplKTsKIAlzdWJwYWdlX3Byb3RfaW5pdF9uZXdfY29udGV4dChtbSk7CiAJbW0tPmNvbnRleHQuaWQgPSBpbmRleDsKKyNpZmRlZiBDT05GSUdfUFBDX0lDU1dYCisJbW0tPmNvbnRleHQuY29wX2xvY2twID0ga21hbGxvYyhzaXplb2Yoc3BpbmxvY2tfdCksIEdGUF9LRVJORUwpOworCWlmICghbW0tPmNvbnRleHQuY29wX2xvY2twKSB7CisJCV9fZGVzdHJveV9jb250ZXh0KGluZGV4KTsKKwkJc3VicGFnZV9wcm90X2ZyZWUobW0pOworCQltbS0+Y29udGV4dC5pZCA9IE1NVV9OT19DT05URVhUOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJc3Bpbl9sb2NrX2luaXQobW0tPmNvbnRleHQuY29wX2xvY2twKTsKKyNlbmRpZiAvKiBDT05GSUdfUFBDX0lDU1dYICovCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTkzLDcgKzI5OCwxMiBAQAogCiB2b2lkIGRlc3Ryb3lfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKKyNpZmRlZiBDT05GSUdfUFBDX0lDU1dYCisJZHJvcF9jb3AobW0tPmNvbnRleHQuYWNvcCwgbW0pOworCWtmcmVlKG1tLT5jb250ZXh0LmNvcF9sb2NrcCk7CisJbW0tPmNvbnRleHQuY29wX2xvY2twID0gTlVMTDsKKyNlbmRpZiAvKiBDT05GSUdfUFBDX0lDU1dYICovCiAJX19kZXN0cm95X2NvbnRleHQobW0tPmNvbnRleHQuaWQpOwogCXN1YnBhZ2VfcHJvdF9mcmVlKG1tKTsKLQltbS0+Y29udGV4dC5pZCA9IE5PX0NPTlRFWFQ7CisJbW0tPmNvbnRleHQuaWQgPSBNTVVfTk9fQ09OVEVYVDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYyBiL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYwppbmRleCBjMGFhYjUyLi4zMzY4MDdkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jCkBAIC0zMzgsMTIgKzMzOCwxNCBAQAogCQlyZXR1cm4gTk9USUZZX09LOwogCiAJc3dpdGNoIChhY3Rpb24pIHsKLQljYXNlIENQVV9PTkxJTkU6Ci0JY2FzZSBDUFVfT05MSU5FX0ZST1pFTjoKKwljYXNlIENQVV9VUF9QUkVQQVJFOgorCWNhc2UgQ1BVX1VQX1BSRVBBUkVfRlJPWkVOOgogCQlwcl9kZXZlbCgiTU1VOiBBbGxvY2F0aW5nIHN0YWxlIGNvbnRleHQgbWFwIGZvciBDUFUgJWRcbiIsIGNwdSk7CiAJCXN0YWxlX21hcFtjcHVdID0ga3phbGxvYyhDVFhfTUFQX1NJWkUsIEdGUF9LRVJORUwpOwogCQlicmVhazsKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwljYXNlIENQVV9VUF9DQU5DRUxFRDoKKwljYXNlIENQVV9VUF9DQU5DRUxFRF9GUk9aRU46CiAJY2FzZSBDUFVfREVBRDoKIAljYXNlIENQVV9ERUFEX0ZST1pFTjoKIAkJcHJfZGV2ZWwoIk1NVTogRnJlZWluZyBzdGFsZSBjb250ZXh0IG1hcCBmb3IgQ1BVICVkXG4iLCBjcHUpOwpAQCAtNDA3LDcgKzQwOSwxNyBAQAogCX0gZWxzZSBpZiAobW11X2hhc19mZWF0dXJlKE1NVV9GVFJfVFlQRV80N3gpKSB7CiAJCWZpcnN0X2NvbnRleHQgPSAxOwogCQlsYXN0X2NvbnRleHQgPSA2NTUzNTsKLQl9IGVsc2UgeworCX0gZWxzZQorI2lmZGVmIENPTkZJR19QUENfQk9PSzNFX01NVQorCWlmIChtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl9UWVBFXzNFKSkgeworCQl1MzIgbW11Y2ZnID0gbWZzcHIoU1BSTl9NTVVDRkcpOworCQl1MzIgcGlkX2JpdHMgPSAobW11Y2ZnICYgTU1VQ0ZHX1BJRFNJWkVfTUFTSykKKwkJCQk+PiBNTVVDRkdfUElEU0laRV9TSElGVDsKKwkJZmlyc3RfY29udGV4dCA9IDE7CisJCWxhc3RfY29udGV4dCA9ICgxVUwgPDwgKHBpZF9iaXRzICsgMSkpIC0gMTsKKwl9IGVsc2UKKyNlbmRpZgorCXsKIAkJZmlyc3RfY29udGV4dCA9IDE7CiAJCWxhc3RfY29udGV4dCA9IDI1NTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jIGIvYXJjaC9wb3dlcnBjL21tL251bWEuYwppbmRleCA1ZWMxZGFkLi4yMTY0MDA2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKQEAgLTMxMSwxNCArMzExLDEzIEBACiBzdGF0aWMgaW50IF9faW5pdCBmaW5kX21pbl9jb21tb25fZGVwdGgodm9pZCkKIHsKIAlpbnQgZGVwdGg7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpydGFzX3Jvb3Q7CiAJc3RydWN0IGRldmljZV9ub2RlICpjaG9zZW47CisJc3RydWN0IGRldmljZV9ub2RlICpyb290OwogCWNvbnN0IGNoYXIgKnZlYzU7CiAKLQlydGFzX3Jvb3QgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL3J0YXMiKTsKLQotCWlmICghcnRhc19yb290KQotCQlyZXR1cm4gLTE7CisJcm9vdCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvcnRhcyIpOworCWlmICghcm9vdCkKKwkJcm9vdCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvIik7CiAKIAkvKgogCSAqIFRoaXMgcHJvcGVydHkgaXMgYSBzZXQgb2YgMzItYml0IGludGVnZXJzLCBlYWNoIHJlcHJlc2VudGluZwpAQCAtMzMyLDcgKzMzMSw3IEBACiAJICogTlVNQSBib3VuZGFyeSBhbmQgdGhlIGZvbGxvd2luZyBhcmUgcHJvZ3Jlc3NpdmVseSBsZXNzIHNpZ25pZmljYW50CiAJICogYm91bmRhcmllcy4gVGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgbGV2ZWwgb2YgTlVNQS4KIAkgKi8KLQlkaXN0YW5jZV9yZWZfcG9pbnRzID0gb2ZfZ2V0X3Byb3BlcnR5KHJ0YXNfcm9vdCwKKwlkaXN0YW5jZV9yZWZfcG9pbnRzID0gb2ZfZ2V0X3Byb3BlcnR5KHJvb3QsCiAJCQkJCSJpYm0sYXNzb2NpYXRpdml0eS1yZWZlcmVuY2UtcG9pbnRzIiwKIAkJCQkJJmRpc3RhbmNlX3JlZl9wb2ludHNfZGVwdGgpOwogCkBAIC0zNzYsMTEgKzM3NSwxMSBAQAogCQlkaXN0YW5jZV9yZWZfcG9pbnRzX2RlcHRoID0gTUFYX0RJU1RBTkNFX1JFRl9QT0lOVFM7CiAJfQogCi0Jb2Zfbm9kZV9wdXQocnRhc19yb290KTsKKwlvZl9ub2RlX3B1dChyb290KTsKIAlyZXR1cm4gZGVwdGg7CiAKIGVycjoKLQlvZl9ub2RlX3B1dChydGFzX3Jvb3QpOworCW9mX25vZGVfcHV0KHJvb3QpOwogCXJldHVybiAtMTsKIH0KIApAQCAtMTQ1Myw3ICsxNDUyLDcgQEAKIAl1bnNpZ25lZCBpbnQgYXNzb2NpYXRpdml0eVtWUEhOX0FTU09DX0JVRlNJWkVdID0gezB9OwogCXN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXY7CiAKLQlmb3JfZWFjaF9jcHVfbWFzayhjcHUsIGNwdV9hc3NvY2lhdGl2aXR5X2NoYW5nZXNfbWFzaykgeworCWZvcl9lYWNoX2NwdShjcHUsJmNwdV9hc3NvY2lhdGl2aXR5X2NoYW5nZXNfbWFzaykgewogCQl2cGhuX2dldF9hc3NvY2lhdGl2aXR5KGNwdSwgYXNzb2NpYXRpdml0eSk7CiAJCW5pZCA9IGFzc29jaWF0aXZpdHlfdG9fbmlkKGFzc29jaWF0aXZpdHkpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYwppbmRleCA4ZGM0MWMwLi41MWY4Nzk1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMKQEAgLTEzMyw3ICsxMzMsMTUgQEAKIEVYUE9SVF9TWU1CT0woaW9yZW1hcCk7CiAKIHZvaWQgX19pb21lbSAqCi1pb3JlbWFwX2ZsYWdzKHBoeXNfYWRkcl90IGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKK2lvcmVtYXBfd2MocGh5c19hZGRyX3QgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBfX2lvcmVtYXBfY2FsbGVyKGFkZHIsIHNpemUsIF9QQUdFX05PX0NBQ0hFLAorCQkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7Cit9CitFWFBPUlRfU1lNQk9MKGlvcmVtYXBfd2MpOworCit2b2lkIF9faW9tZW0gKgoraW9yZW1hcF9wcm90KHBoeXNfYWRkcl90IGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAkvKiB3cml0ZWFibGUgaW1wbGllcyBkaXJ0eSBmb3Iga2VybmVsIGFkZHJlc3NlcyAqLwogCWlmIChmbGFncyAmIF9QQUdFX1JXKQpAQCAtMTUyLDcgKzE2MCw3IEBACiAKIAlyZXR1cm4gX19pb3JlbWFwX2NhbGxlcihhZGRyLCBzaXplLCBmbGFncywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KLUVYUE9SVF9TWU1CT0woaW9yZW1hcF9mbGFncyk7CitFWFBPUlRfU1lNQk9MKGlvcmVtYXBfcHJvdCk7CiAKIHZvaWQgX19pb21lbSAqCiBfX2lvcmVtYXAocGh5c19hZGRyX3QgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzY0LmMKaW5kZXggODg5MjdhMC4uNmU1OTVmNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jCkBAIC0yNTUsNyArMjU1LDE3IEBACiAJcmV0dXJuIF9faW9yZW1hcF9jYWxsZXIoYWRkciwgc2l6ZSwgZmxhZ3MsIGNhbGxlcik7CiB9CiAKLXZvaWQgX19pb21lbSAqIGlvcmVtYXBfZmxhZ3MocGh5c19hZGRyX3QgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAordm9pZCBfX2lvbWVtICogaW9yZW1hcF93YyhwaHlzX2FkZHJfdCBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IF9QQUdFX05PX0NBQ0hFOworCXZvaWQgKmNhbGxlciA9IF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKTsKKworCWlmIChwcGNfbWQuaW9yZW1hcCkKKwkJcmV0dXJuIHBwY19tZC5pb3JlbWFwKGFkZHIsIHNpemUsIGZsYWdzLCBjYWxsZXIpOworCXJldHVybiBfX2lvcmVtYXBfY2FsbGVyKGFkZHIsIHNpemUsIGZsYWdzLCBjYWxsZXIpOworfQorCit2b2lkIF9faW9tZW0gKiBpb3JlbWFwX3Byb3QocGh5c19hZGRyX3QgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXZvaWQgKmNhbGxlciA9IF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKTsKQEAgLTMxMSw3ICszMjEsOCBAQAogfQogCiBFWFBPUlRfU1lNQk9MKGlvcmVtYXApOwotRVhQT1JUX1NZTUJPTChpb3JlbWFwX2ZsYWdzKTsKK0VYUE9SVF9TWU1CT0woaW9yZW1hcF93Yyk7CitFWFBPUlRfU1lNQk9MKGlvcmVtYXBfcHJvdCk7CiBFWFBPUlRfU1lNQk9MKF9faW9yZW1hcCk7CiBFWFBPUlRfU1lNQk9MKF9faW9yZW1hcF9hdCk7CiBFWFBPUlRfU1lNQk9MKGlvdW5tYXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3NsYi5jIGIvYXJjaC9wb3dlcnBjL21tL3NsYi5jCmluZGV4IDFkOThlY2MuLmUyMjI3NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9zbGIuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vc2xiLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS91ZGJnLmg+CisjaW5jbHVkZSA8YXNtL2NvZGUtcGF0Y2hpbmcuaD4KIAogCiBleHRlcm4gdm9pZCBzbGJfYWxsb2NhdGVfcmVhbG1vZGUodW5zaWduZWQgbG9uZyBlYSk7CkBAIC0xNjYsNyArMTY3LDcgQEAKIAlpbnQgZXNpZF8xdF9jb3VudDsKIAogCS8qIFN5c3RlbSBpcyBub3QgMVQgc2VnbWVudCBzaXplIGNhcGFibGUuICovCi0JaWYgKCFjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl8xVF9TRUdNRU5UKSkKKwlpZiAoIW1tdV9oYXNfZmVhdHVyZShNTVVfRlRSXzFUX1NFR01FTlQpKQogCQlyZXR1cm4gKEdFVF9FU0lEKGFkZHIxKSA9PSBHRVRfRVNJRChhZGRyMikpOwogCiAJZXNpZF8xdF9jb3VudCA9ICgoKGFkZHIxID4+IFNJRF9TSElGVF8xVCkgIT0gMCkgKwpAQCAtMjAxLDcgKzIwMiw3IEBACiAJICovCiAJaGFyZF9pcnFfZGlzYWJsZSgpOwogCW9mZnNldCA9IGdldF9wYWNhKCktPnNsYl9jYWNoZV9wdHI7Ci0JaWYgKCFjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9OT19TTEJJRV9CKSAmJgorCWlmICghbW11X2hhc19mZWF0dXJlKE1NVV9GVFJfTk9fU0xCSUVfQikgJiYKIAkgICAgb2Zmc2V0IDw9IFNMQl9DQUNIRV9FTlRSSUVTKSB7CiAJCWludCBpOwogCQlhc20gdm9sYXRpbGUoImlzeW5jIiA6IDogOiAibWVtb3J5Iik7CkBAIC0yNDksOSArMjUwLDggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwYXRjaF9zbGJfZW5jb2RpbmcodW5zaWduZWQgaW50ICppbnNuX2FkZHIsCiAJCQkJICAgICAgdW5zaWduZWQgaW50IGltbWVkKQogewotCSppbnNuX2FkZHIgPSAoKmluc25fYWRkciAmIDB4ZmZmZjAwMDApIHwgaW1tZWQ7Ci0JZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWluc25fYWRkciwgNCsKLQkJCSAgICh1bnNpZ25lZCBsb25nKWluc25fYWRkcik7CisJaW50IGluc24gPSAoKmluc25fYWRkciAmIDB4ZmZmZjAwMDApIHwgaW1tZWQ7CisJcGF0Y2hfaW5zdHJ1Y3Rpb24oaW5zbl9hZGRyLCBpbnNuKTsKIH0KIAogdm9pZCBzbGJfc2V0X3NpemUodTE2IHNpemUpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vc2xiX2xvdy5TIGIvYXJjaC9wb3dlcnBjL21tL3NsYl9sb3cuUwppbmRleCA5NWNlMzU1Li5lZjY1M2RjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vc2xiX2xvdy5TCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9zbGJfbG93LlMKQEAgLTU4LDcgKzU4LDcgQEAKIAlsaQlyMTEsMAogQkVHSU5fRlRSX1NFQ1RJT04KIAliCXNsYl9maW5pc2hfbG9hZAotRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfMVRfU0VHTUVOVCkKK0VORF9NTVVfRlRSX1NFQ1RJT05fSUZDTFIoTU1VX0ZUUl8xVF9TRUdNRU5UKQogCWIJc2xiX2ZpbmlzaF9sb2FkXzFUCiAKIDE6CkBAIC04Nyw3ICs4Nyw3IEBACiA2OgogQkVHSU5fRlRSX1NFQ1RJT04KIAliCXNsYl9maW5pc2hfbG9hZAotRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfMVRfU0VHTUVOVCkKK0VORF9NTVVfRlRSX1NFQ1RJT05fSUZDTFIoTU1VX0ZUUl8xVF9TRUdNRU5UKQogCWIJc2xiX2ZpbmlzaF9sb2FkXzFUCiAKIDA6CS8qIHVzZXIgYWRkcmVzczogcHJvdG8tVlNJRCA9IGNvbnRleHQgPDwgMTUgfCBFU0lELiBGaXJzdCBjaGVjawpAQCAtMTM4LDExICsxMzgsMTEgQEAKIAlsZAlyOSxQQUNBQ09OVEVYVElEKHIxMykKIEJFR0lOX0ZUUl9TRUNUSU9OCiAJY21wbGRpCXIxMCwweDEwMDAKLUVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSXzFUX1NFR01FTlQpCitFTkRfTU1VX0ZUUl9TRUNUSU9OX0lGU0VUKE1NVV9GVFJfMVRfU0VHTUVOVCkKIAlybGRpbWkJcjEwLHI5LFVTRVJfRVNJRF9CSVRTLDAKIEJFR0lOX0ZUUl9TRUNUSU9OCiAJYmdlCXNsYl9maW5pc2hfbG9hZF8xVAotRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfMVRfU0VHTUVOVCkKK0VORF9NTVVfRlRSX1NFQ1RJT05fSUZTRVQoTU1VX0ZUUl8xVF9TRUdNRU5UKQogCWIJc2xiX2ZpbmlzaF9sb2FkCiAKIDg6CS8qIGludmFsaWQgRUEgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9zdGFiLmMgYi9hcmNoL3Bvd2VycGMvbW0vc3RhYi5jCmluZGV4IDQ0NmEwMTguLjQxZTMxNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9zdGFiLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3N0YWIuYwpAQCAtMjQzLDcgKzI0Myw3IEBACiB7CiAJaW50IGNwdTsKIAotCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9TTEIpKQorCWlmIChtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl9TTEIpKQogCQlyZXR1cm47CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9pc3M0eHguYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2lzczR4eC5jCmluZGV4IGFhNDZlOWQuLjE5Mzk1ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2lzczR4eC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2lzczR4eC5jCkBAIC04Nyw3ICs4Nyw3IEBACiAJbXBpY19zZXR1cF90aGlzX2NwdSgpOwogfQogCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgc21wX2lzczR4eF9raWNrX2NwdShpbnQgY3B1KQorc3RhdGljIGludCBfX2NwdWluaXQgc21wX2lzczR4eF9raWNrX2NwdShpbnQgY3B1KQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1bm9kZSA9IG9mX2dldF9jcHVfbm9kZShjcHUsIE5VTEwpOwogCWNvbnN0IHU2NCAqc3Bpbl90YWJsZV9hZGRyX3Byb3A7CkBAIC0xMDQsNyArMTA0LDcgQEAKIAkJCQkJICAgICAgIE5VTEwpOwogCWlmIChzcGluX3RhYmxlX2FkZHJfcHJvcCA9PSBOVUxMKSB7CiAJCXByX2VycigiQ1BVJWQ6IENhbid0IHN0YXJ0LCBtaXNzaW5nIGNwdS1yZWxlYXNlLWFkZHIgIVxuIiwgY3B1KTsKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKIAkvKiBBc3N1bWUgaXQncyBtYXBwZWQgYXMgcGFydCBvZiB0aGUgbGluZWFyIG1hcHBpbmcuIFRoaXMgaXMgYSBiaXQKQEAgLTExNyw2ICsxMTcsOCBAQAogCXNtcF93bWIoKTsKIAlzcGluX3RhYmxlWzFdID0gX19wYShzdGFydF9zZWNvbmRhcnlfNDd4KTsKIAltYigpOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc21wX29wc190IGlzc19zbXBfb3BzID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfYWRzX2NwbGQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9tcGM1MTIxX2Fkc19jcGxkLmMKaW5kZXggY2ZjNGIyMC4uOWYwOTMxOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L21wYzUxMjFfYWRzX2NwbGQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvbXBjNTEyMV9hZHNfY3BsZC5jCkBAIC02MSw3ICs2MSw3IEBACiBzdGF0aWMgdm9pZAogY3BsZF9tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JdW5zaWduZWQgaW50IGNwbGRfaXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW2QtPmlycV0uaHdpcnE7CisJdW5zaWduZWQgaW50IGNwbGRfaXJxID0gKHVuc2lnbmVkIGludClpcnFkX3RvX2h3aXJxKGQpOwogCXZvaWQgX19pb21lbSAqcGljX21hc2sgPSBpcnFfdG9fcGljX21hc2soY3BsZF9pcnEpOwogCiAJb3V0XzgocGljX21hc2ssCkBAIC03MSw3ICs3MSw3IEBACiBzdGF0aWMgdm9pZAogY3BsZF91bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQl1bnNpZ25lZCBpbnQgY3BsZF9pcnEgPSAodW5zaWduZWQgaW50KWlycV9tYXBbZC0+aXJxXS5od2lycTsKKwl1bnNpZ25lZCBpbnQgY3BsZF9pcnEgPSAodW5zaWduZWQgaW50KWlycWRfdG9faHdpcnEoZCk7CiAJdm9pZCBfX2lvbWVtICpwaWNfbWFzayA9IGlycV90b19waWNfbWFzayhjcGxkX2lycSk7CiAKIAlvdXRfOChwaWNfbWFzaywKQEAgLTk3LDcgKzk3LDcgQEAKIAlzdGF0dXMgfD0gKGlnbm9yZSB8IG1hc2spOwogCiAJaWYgKHN0YXR1cyA9PSAweGZmKQotCQlyZXR1cm4gTk9fSVJRX0lHTk9SRTsKKwkJcmV0dXJuIE5PX0lSUTsKIAogCWNwbGRfaXJxID0gZmZ6KHN0YXR1cykgKyBvZmZzZXQ7CiAKQEAgLTEwOSwxNCArMTA5LDE0IEBACiB7CiAJaXJxID0gY3BsZF9waWNfZ2V0X2lycSgwLCBQQ0lfSUdOT1JFLCAmY3BsZF9yZWdzLT5wY2lfc3RhdHVzLAogCQkmY3BsZF9yZWdzLT5wY2lfbWFzayk7Ci0JaWYgKGlycSAhPSBOT19JUlEgJiYgaXJxICE9IE5PX0lSUV9JR05PUkUpIHsKKwlpZiAoaXJxICE9IE5PX0lSUSkgewogCQlnZW5lcmljX2hhbmRsZV9pcnEoaXJxKTsKIAkJcmV0dXJuOwogCX0KIAogCWlycSA9IGNwbGRfcGljX2dldF9pcnEoOCwgTUlTQ19JR05PUkUsICZjcGxkX3JlZ3MtPm1pc2Nfc3RhdHVzLAogCQkmY3BsZF9yZWdzLT5taXNjX21hc2spOwotCWlmIChpcnEgIT0gTk9fSVJRICYmIGlycSAhPSBOT19JUlFfSUdOT1JFKSB7CisJaWYgKGlycSAhPSBOT19JUlEpIHsKIAkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycSk7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbWVkaWE1MjAwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbWVkaWE1MjAwLmMKaW5kZXggNTdhNmEzNC4uOTZmODVlNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21lZGlhNTIwMC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tZWRpYTUyMDAuYwpAQCAtNTYsNyArNTYsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1lZGlhNTIwMF9pcnEubG9jaywgZmxhZ3MpOwogCXZhbCA9IGluX2JlMzIobWVkaWE1MjAwX2lycS5yZWdzICsgTUVESUE1MjAwX0lSUV9FTkFCTEUpOwotCXZhbCB8PSAxIDw8IChNRURJQTUyMDBfSVJRX1NISUZUICsgaXJxX21hcFtkLT5pcnFdLmh3aXJxKTsKKwl2YWwgfD0gMSA8PCAoTUVESUE1MjAwX0lSUV9TSElGVCArIGlycWRfdG9faHdpcnEoZCkpOwogCW91dF9iZTMyKG1lZGlhNTIwMF9pcnEucmVncyArIE1FRElBNTIwMF9JUlFfRU5BQkxFLCB2YWwpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1lZGlhNTIwMF9pcnEubG9jaywgZmxhZ3MpOwogfQpAQCAtNjgsNyArNjgsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1lZGlhNTIwMF9pcnEubG9jaywgZmxhZ3MpOwogCXZhbCA9IGluX2JlMzIobWVkaWE1MjAwX2lycS5yZWdzICsgTUVESUE1MjAwX0lSUV9FTkFCTEUpOwotCXZhbCAmPSB+KDEgPDwgKE1FRElBNTIwMF9JUlFfU0hJRlQgKyBpcnFfbWFwW2QtPmlycV0uaHdpcnEpKTsKKwl2YWwgJj0gfigxIDw8IChNRURJQTUyMDBfSVJRX1NISUZUICsgaXJxZF90b19od2lycShkKSkpOwogCW91dF9iZTMyKG1lZGlhNTIwMF9pcnEucmVncyArIE1FRElBNTIwMF9JUlFfRU5BQkxFLCB2YWwpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1lZGlhNTIwMF9pcnEubG9jaywgZmxhZ3MpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9waWMuYwppbmRleCAxZGQxNTQwLi4xYTlhNDk1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9waWMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9waWMuYwpAQCAtMTU3LDQ4ICsxNTcsMzAgQEAKICAqLwogc3RhdGljIHZvaWQgbXBjNTJ4eF9leHRpcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JaW50IGlycTsKLQlpbnQgbDJpcnE7Ci0KLQlpcnEgPSBpcnFfbWFwW2QtPmlycV0uaHdpcnE7Ci0JbDJpcnEgPSBpcnEgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwotCisJaW50IGwyaXJxID0gaXJxZF90b19od2lycShkKSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7CiAJaW9fYmVfY2xyYml0KCZpbnRyLT5jdHJsLCAxMSAtIGwyaXJxKTsKIH0KIAogc3RhdGljIHZvaWQgbXBjNTJ4eF9leHRpcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgaXJxOwotCWludCBsMmlycTsKLQotCWlycSA9IGlycV9tYXBbZC0+aXJxXS5od2lycTsKLQlsMmlycSA9IGlycSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7Ci0KKwlpbnQgbDJpcnEgPSBpcnFkX3RvX2h3aXJxKGQpICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKIAlpb19iZV9zZXRiaXQoJmludHItPmN0cmwsIDExIC0gbDJpcnEpOwogfQogCiBzdGF0aWMgdm9pZCBtcGM1Mnh4X2V4dGlycV9hY2soc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBpcnE7Ci0JaW50IGwyaXJxOwotCi0JaXJxID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxOwotCWwyaXJxID0gaXJxICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKLQorCWludCBsMmlycSA9IGlycWRfdG9faHdpcnEoZCkgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwogCWlvX2JlX3NldGJpdCgmaW50ci0+Y3RybCwgMjctbDJpcnEpOwogfQogCiBzdGF0aWMgaW50IG1wYzUyeHhfZXh0aXJxX3NldF90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKIHsKIAl1MzIgY3RybF9yZWcsIHR5cGU7Ci0JaW50IGlycTsKLQlpbnQgbDJpcnE7CisJaW50IGwyaXJxID0gaXJxZF90b19od2lycShkKSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7CiAJdm9pZCAqaGFuZGxlciA9IGhhbmRsZV9sZXZlbF9pcnE7CiAKLQlpcnEgPSBpcnFfbWFwW2QtPmlycV0uaHdpcnE7Ci0JbDJpcnEgPSBpcnEgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwotCi0JcHJfZGVidWcoIiVzOiBpcnE9JXguIGwyPSVkIGZsb3dfdHlwZT0lZFxuIiwgX19mdW5jX18sIGlycSwgbDJpcnEsIGZsb3dfdHlwZSk7CisJcHJfZGVidWcoIiVzOiBpcnE9JXguIGwyPSVkIGZsb3dfdHlwZT0lZFxuIiwgX19mdW5jX18sCisJCShpbnQpIGlycWRfdG9faHdpcnEoZCksIGwyaXJxLCBmbG93X3R5cGUpOwogCiAJc3dpdGNoIChmbG93X3R5cGUpIHsKIAljYXNlIElSUUZfVFJJR0dFUl9ISUdIOiB0eXBlID0gMDsgYnJlYWs7CkBAIC0yMzcsMjMgKzIxOSwxMyBAQAogCiBzdGF0aWMgdm9pZCBtcGM1Mnh4X21haW5fbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JaW50IGlycTsKLQlpbnQgbDJpcnE7Ci0KLQlpcnEgPSBpcnFfbWFwW2QtPmlycV0uaHdpcnE7Ci0JbDJpcnEgPSBpcnEgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwotCisJaW50IGwyaXJxID0gaXJxZF90b19od2lycShkKSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7CiAJaW9fYmVfc2V0Yml0KCZpbnRyLT5tYWluX21hc2ssIDE2IC0gbDJpcnEpOwogfQogCiBzdGF0aWMgdm9pZCBtcGM1Mnh4X21haW5fdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgaXJxOwotCWludCBsMmlycTsKLQotCWlycSA9IGlycV9tYXBbZC0+aXJxXS5od2lycTsKLQlsMmlycSA9IGlycSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7Ci0KKwlpbnQgbDJpcnEgPSBpcnFkX3RvX2h3aXJxKGQpICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKIAlpb19iZV9jbHJiaXQoJmludHItPm1haW5fbWFzaywgMTYgLSBsMmlycSk7CiB9CiAKQEAgLTI3MCwyMyArMjQyLDEzIEBACiAgKi8KIHN0YXRpYyB2b2lkIG1wYzUyeHhfcGVyaXBoX21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBpcnE7Ci0JaW50IGwyaXJxOwotCi0JaXJxID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxOwotCWwyaXJxID0gaXJxICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKLQorCWludCBsMmlycSA9IGlycWRfdG9faHdpcnEoZCkgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwogCWlvX2JlX3NldGJpdCgmaW50ci0+cGVyX21hc2ssIDMxIC0gbDJpcnEpOwogfQogCiBzdGF0aWMgdm9pZCBtcGM1Mnh4X3BlcmlwaF91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBpcnE7Ci0JaW50IGwyaXJxOwotCi0JaXJxID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxOwotCWwyaXJxID0gaXJxICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKLQorCWludCBsMmlycSA9IGlycWRfdG9faHdpcnEoZCkgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwogCWlvX2JlX2NscmJpdCgmaW50ci0+cGVyX21hc2ssIDMxIC0gbDJpcnEpOwogfQogCkBAIC0zMDMsMzQgKzI2NSwxOSBAQAogICovCiBzdGF0aWMgdm9pZCBtcGM1Mnh4X3NkbWFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JaW50IGlycTsKLQlpbnQgbDJpcnE7Ci0KLQlpcnEgPSBpcnFfbWFwW2QtPmlycV0uaHdpcnE7Ci0JbDJpcnEgPSBpcnEgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwotCisJaW50IGwyaXJxID0gaXJxZF90b19od2lycShkKSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7CiAJaW9fYmVfc2V0Yml0KCZzZG1hLT5JbnRNYXNrLCBsMmlycSk7CiB9CiAKIHN0YXRpYyB2b2lkIG1wYzUyeHhfc2RtYV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBpcnE7Ci0JaW50IGwyaXJxOwotCi0JaXJxID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxOwotCWwyaXJxID0gaXJxICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKLQorCWludCBsMmlycSA9IGlycWRfdG9faHdpcnEoZCkgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwogCWlvX2JlX2NscmJpdCgmc2RtYS0+SW50TWFzaywgbDJpcnEpOwogfQogCiBzdGF0aWMgdm9pZCBtcGM1Mnh4X3NkbWFfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgaXJxOwotCWludCBsMmlycTsKLQotCWlycSA9IGlycV9tYXBbZC0+aXJxXS5od2lycTsKLQlsMmlycSA9IGlycSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7Ci0KKwlpbnQgbDJpcnEgPSBpcnFkX3RvX2h3aXJxKGQpICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKIAlvdXRfYmUzMigmc2RtYS0+SW50UGVuZCwgMSA8PCBsMmlycSk7CiB9CiAKQEAgLTUzOSw3ICs0ODYsNyBAQAogdW5zaWduZWQgaW50IG1wYzUyeHhfZ2V0X2lycSh2b2lkKQogewogCXUzMiBzdGF0dXM7Ci0JaW50IGlycSA9IE5PX0lSUV9JR05PUkU7CisJaW50IGlycTsKIAogCXN0YXR1cyA9IGluX2JlMzIoJmludHItPmVuY19zdGF0dXMpOwogCWlmIChzdGF0dXMgJiAweDAwMDAwNDAwKSB7CS8qIGNyaXRpY2FsICovCkBAIC01NjIsNiArNTA5LDggQEAKIAkJfSBlbHNlIHsKIAkJCWlycSB8PSAoTVBDNTJ4eF9JUlFfTDFfUEVSUCA8PCBNUEM1Mnh4X0lSUV9MMV9PRkZTRVQpOwogCQl9CisJfSBlbHNlIHsKKwkJcmV0dXJuIE5PX0lSUTsKIAl9CiAKIAlyZXR1cm4gaXJxX2xpbmVhcl9yZXZtYXAobXBjNTJ4eF9pcnFob3N0LCBpcnEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L3BxMmFkcy1wY2ktcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvcHEyYWRzLXBjaS1waWMuYwppbmRleCA0YTRlYjZmLi44Y2NmOWVkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvcHEyYWRzLXBjaS1waWMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvcHEyYWRzLXBjaS1waWMuYwpAQCAtNDIsNyArNDIsNyBAQAogc3RhdGljIHZvaWQgcHEyYWRzX3BjaV9tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3RydWN0IHBxMmFkc19wY2lfcGljICpwcml2ID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7Ci0JaW50IGlycSA9IE5VTV9JUlFTIC0gdmlycV90b19odyhkLT5pcnEpIC0gMTsKKwlpbnQgaXJxID0gTlVNX0lSUVMgLSBpcnFkX3RvX2h3aXJxKGQpIC0gMTsKIAogCWlmIChpcnEgIT0gLTEpIHsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTU4LDcgKzU4LDcgQEAKIHN0YXRpYyB2b2lkIHBxMmFkc19wY2lfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3RydWN0IHBxMmFkc19wY2lfcGljICpwcml2ID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7Ci0JaW50IGlycSA9IE5VTV9JUlFTIC0gdmlycV90b19odyhkLT5pcnEpIC0gMTsKKwlpbnQgaXJxID0gTlVNX0lSUVMgLSBpcnFkX3RvX2h3aXJxKGQpIC0gMTsKIAogCWlmIChpcnEgIT0gLTEpIHsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTExMiwxNiArMTEyLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcGNpX2hvc3RfdW5tYXAoc3RydWN0IGlycV9ob3N0ICpoLCB1bnNpZ25lZCBpbnQgdmlycSkKLXsKLQkvKiByZW1vdmUgY2hpcCBhbmQgaGFuZGxlciAqLwotCWlycV9zZXRfY2hpcF9kYXRhKHZpcnEsIE5VTEwpOwotCWlycV9zZXRfY2hpcCh2aXJxLCBOVUxMKTsKLX0KLQogc3RhdGljIHN0cnVjdCBpcnFfaG9zdF9vcHMgcGNpX3BpY19ob3N0X29wcyA9IHsKIAkubWFwID0gcGNpX3BpY19ob3N0X21hcCwKLQkudW5tYXAgPSBwY2lfaG9zdF91bm1hcCwKIH07CiAKIGludCBfX2luaXQgcHEyYWRzX3BjaV9pbml0X2lycSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3N1c3BlbmQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zdXNwZW5kLmMKaW5kZXggMTg4MjcyOS4uMTA0ZmFhOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3N1c3BlbmQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc3VzcGVuZC5jCkBAIC0zMTgsMTcgKzMxOCwyMCBAQAogCS5lbmQgPSBtcGM4M3h4X3N1c3BlbmRfZW5kLAogfTsKIAorc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgcG1jX21hdGNoW107CiBzdGF0aWMgaW50IHBtY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldikKIHsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZkZXYtPmRldi5vZl9ub2RlOwogCXN0cnVjdCByZXNvdXJjZSByZXM7CiAJc3RydWN0IHBtY190eXBlICp0eXBlOwogCWludCByZXQgPSAwOwogCi0JaWYgKCFvZmRldi0+ZGV2Lm9mX21hdGNoKQorCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKHBtY19tYXRjaCwgJm9mZGV2LT5kZXYpOworCWlmICghbWF0Y2gpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JdHlwZSA9IG9mZGV2LT5kZXYub2ZfbWF0Y2gtPmRhdGE7CisJdHlwZSA9IG1hdGNoLT5kYXRhOwogCiAJaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5wKSkKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmMKaW5kZXggMGQwMGZmOS4uZDZhOTNhMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zbXAuYwpAQCAtNDEsNyArNDEsNyBAQAogI2RlZmluZSBOVU1fQk9PVF9FTlRSWQkJOAogI2RlZmluZSBTSVpFX0JPT1RfRU5UUlkJCShOVU1fQk9PVF9FTlRSWSAqIHNpemVvZih1MzIpKQogCi1zdGF0aWMgdm9pZCBfX2luaXQKK3N0YXRpYyBpbnQgX19pbml0CiBzbXBfODV4eF9raWNrX2NwdShpbnQgbnIpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTYwLDcgKzYwLDcgQEAKIAogCWlmIChjcHVfcmVsX2FkZHIgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgIk5vIGNwdS1yZWxlYXNlLWFkZHIgZm9yIGNwdSAlZFxuIiwgbnIpOwotCQlyZXR1cm47CisJCXJldHVybiAtRU5PRU5UOwogCX0KIAogCS8qCkBAIC0xMDcsNiArMTA3LDggQEAKIAkJaW91bm1hcChicHRyX3ZhZGRyKTsKIAogCXByX2RlYnVnKCJ3YWl0ZWQgJWQgbXNlY3MgZm9yIENQVSAjJWQuXG4iLCBuLCBucik7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0CkBAIC0yMzMsOCArMjM1LDEwIEBACiAJCXNtcF84NXh4X29wcy5tZXNzYWdlX3Bhc3MgPSBzbXBfbXBpY19tZXNzYWdlX3Bhc3M7CiAJfQogCi0JaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0RCRUxMKSkKLQkJc21wXzg1eHhfb3BzLm1lc3NhZ2VfcGFzcyA9IGRvb3JiZWxsX21lc3NhZ2VfcGFzczsKKwlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfREJFTEwpKSB7CisJCXNtcF84NXh4X29wcy5tZXNzYWdlX3Bhc3MgPSBzbXBfbXV4ZWRfaXBpX21lc3NhZ2VfcGFzczsKKwkJc21wXzg1eHhfb3BzLmNhdXNlX2lwaSA9IGRvb3JiZWxsX2NhdXNlX2lwaTsKKwl9CiAKIAlCVUdfT04oIXNtcF84NXh4X29wcy5tZXNzYWdlX3Bhc3MpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc29jcmF0ZXNfZnBnYV9waWMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlc19mcGdhX3BpYy5jCmluZGV4IGRiODY0NjIuLjEyY2I5YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlc19mcGdhX3BpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlc19mcGdhX3BpYy5jCkBAIC00OCw4ICs0OCw2IEBACiAJWzhdID0gezAsIElSUV9UWVBFX0xFVkVMX0hJR0h9LAogfTsKIAotI2RlZmluZSBzb2NyYXRlc19mcGdhX2lycV90b19odyh2aXJxKSAgICAoKHVuc2lnbmVkIGludClpcnFfbWFwW3ZpcnFdLmh3aXJxKQotCiBzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhzb2NyYXRlc19mcGdhX3BpY19sb2NrKTsKIAogc3RhdGljIHZvaWQgX19pb21lbSAqc29jcmF0ZXNfZnBnYV9waWNfaW9iYXNlOwpAQCAtMTEwLDExICsxMDgsOSBAQAogc3RhdGljIHZvaWQgc29jcmF0ZXNfZnBnYV9waWNfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBod2lycSwgaXJxX2xpbmU7CisJdW5zaWduZWQgaW50IGlycV9saW5lLCBod2lycSA9IGlycWRfdG9faHdpcnEoZCk7CiAJdWludDMyX3QgbWFzazsKIAotCWh3aXJxID0gc29jcmF0ZXNfZnBnYV9pcnFfdG9faHcoZC0+aXJxKTsKLQogCWlycV9saW5lID0gZnBnYV9pcnFzW2h3aXJxXS5pcnFfbGluZTsKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKIAltYXNrID0gc29jcmF0ZXNfZnBnYV9waWNfcmVhZChGUEdBX1BJQ19JUlFNQVNLKGlycV9saW5lKSkKQEAgLTEyNywxMiArMTIzLDEwIEBACiBzdGF0aWMgdm9pZCBzb2NyYXRlc19mcGdhX3BpY19tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBod2lycTsKKwl1bnNpZ25lZCBpbnQgaHdpcnEgPSBpcnFkX3RvX2h3aXJxKGQpOwogCWludCBpcnFfbGluZTsKIAl1MzIgbWFzazsKIAotCWh3aXJxID0gc29jcmF0ZXNfZnBnYV9pcnFfdG9faHcoZC0+aXJxKTsKLQogCWlycV9saW5lID0gZnBnYV9pcnFzW2h3aXJxXS5pcnFfbGluZTsKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKIAltYXNrID0gc29jcmF0ZXNfZnBnYV9waWNfcmVhZChGUEdBX1BJQ19JUlFNQVNLKGlycV9saW5lKSkKQEAgLTE0NSwxMiArMTM5LDEwIEBACiBzdGF0aWMgdm9pZCBzb2NyYXRlc19mcGdhX3BpY19tYXNrX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgaHdpcnE7CisJdW5zaWduZWQgaW50IGh3aXJxID0gaXJxZF90b19od2lycShkKTsKIAlpbnQgaXJxX2xpbmU7CiAJdTMyIG1hc2s7CiAKLQlod2lycSA9IHNvY3JhdGVzX2ZwZ2FfaXJxX3RvX2h3KGQtPmlycSk7Ci0KIAlpcnFfbGluZSA9IGZwZ2FfaXJxc1tod2lycV0uaXJxX2xpbmU7CiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CiAJbWFzayA9IHNvY3JhdGVzX2ZwZ2FfcGljX3JlYWQoRlBHQV9QSUNfSVJRTUFTSyhpcnFfbGluZSkpCkBAIC0xNjQsMTIgKzE1NiwxMCBAQAogc3RhdGljIHZvaWQgc29jcmF0ZXNfZnBnYV9waWNfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBod2lycTsKKwl1bnNpZ25lZCBpbnQgaHdpcnEgPSBpcnFkX3RvX2h3aXJxKGQpOwogCWludCBpcnFfbGluZTsKIAl1MzIgbWFzazsKIAotCWh3aXJxID0gc29jcmF0ZXNfZnBnYV9pcnFfdG9faHcoZC0+aXJxKTsKLQogCWlycV9saW5lID0gZnBnYV9pcnFzW2h3aXJxXS5pcnFfbGluZTsKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKIAltYXNrID0gc29jcmF0ZXNfZnBnYV9waWNfcmVhZChGUEdBX1BJQ19JUlFNQVNLKGlycV9saW5lKSkKQEAgLTE4MiwxMiArMTcyLDEwIEBACiBzdGF0aWMgdm9pZCBzb2NyYXRlc19mcGdhX3BpY19lb2koc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IGh3aXJxOworCXVuc2lnbmVkIGludCBod2lycSA9IGlycWRfdG9faHdpcnEoZCk7CiAJaW50IGlycV9saW5lOwogCXUzMiBtYXNrOwogCi0JaHdpcnEgPSBzb2NyYXRlc19mcGdhX2lycV90b19odyhkLT5pcnEpOwotCiAJaXJxX2xpbmUgPSBmcGdhX2lycXNbaHdpcnFdLmlycV9saW5lOwogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOwogCW1hc2sgPSBzb2NyYXRlc19mcGdhX3BpY19yZWFkKEZQR0FfUElDX0lSUU1BU0soaXJxX2xpbmUpKQpAQCAtMjAxLDEyICsxODksMTAgQEAKIAkJdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBod2lycTsKKwl1bnNpZ25lZCBpbnQgaHdpcnEgPSBpcnFkX3RvX2h3aXJxKGQpOwogCWludCBwb2xhcml0eTsKIAl1MzIgbWFzazsKIAotCWh3aXJxID0gc29jcmF0ZXNfZnBnYV9pcnFfdG9faHcoZC0+aXJxKTsKLQogCWlmIChmcGdhX2lycXNbaHdpcnFdLnR5cGUgIT0gSVJRX1RZUEVfTk9ORSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3BpYy5jCmluZGV4IDBiZWVjN2QuLjk0NTk0ZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9waWMuYwpAQCAtNDYsOCArNDYsNiBAQAogI2RlZmluZSBHRUZfUElDX0NQVTBfTUNQX01BU0sJR0VGX1BJQ19NQ1BfTUFTSygwKQogI2RlZmluZSBHRUZfUElDX0NQVTFfTUNQX01BU0sJR0VGX1BJQ19NQ1BfTUFTSygxKQogCi0jZGVmaW5lIGdlZl9pcnFfdG9faHcodmlycSkgICAgKCh1bnNpZ25lZCBpbnQpaXJxX21hcFt2aXJxXS5od2lycSkKLQogCiBzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhnZWZfcGljX2xvY2spOwogCkBAIC0xMTMsMTEgKzExMSw5IEBACiBzdGF0aWMgdm9pZCBnZWZfcGljX21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IGh3aXJxOworCXVuc2lnbmVkIGludCBod2lycSA9IGlycWRfdG9faHdpcnEoZCk7CiAJdTMyIG1hc2s7CiAKLQlod2lycSA9IGdlZl9pcnFfdG9faHcoZC0+aXJxKTsKLQogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZ2VmX3BpY19sb2NrLCBmbGFncyk7CiAJbWFzayA9IGluX2JlMzIoZ2VmX3BpY19pcnFfcmVnX2Jhc2UgKyBHRUZfUElDX0lOVFJfTUFTSygwKSk7CiAJbWFzayAmPSB+KDEgPDwgaHdpcnEpOwpAQCAtMTM2LDExICsxMzIsOSBAQAogc3RhdGljIHZvaWQgZ2VmX3BpY191bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IGh3aXJxOworCXVuc2lnbmVkIGludCBod2lycSA9IGlycWRfdG9faHdpcnEoZCk7CiAJdTMyIG1hc2s7CiAKLQlod2lycSA9IGdlZl9pcnFfdG9faHcoZC0+aXJxKTsKLQogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZ2VmX3BpY19sb2NrLCBmbGFncyk7CiAJbWFzayA9IGluX2JlMzIoZ2VmX3BpY19pcnFfcmVnX2Jhc2UgKyBHRUZfUElDX0lOVFJfTUFTSygwKSk7CiAJbWFzayB8PSAoMSA8PCBod2lycSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODYxMF9ocGNkLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODYxMF9ocGNkLmMKaW5kZXggMDE4Y2M2Ny4uYTg5NjUxMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2MTBfaHBjZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4NjEwX2hwY2QuYwpAQCAtNjYsNyArNjYsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBtcGM4NjEwX3N3OV9pcnEsIDAsICJzdzkvd2FrZXVwIiwgTlVMTCk7CisJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBtcGM4NjEwX3N3OV9pcnEsIDAsICJzdzk6d2FrZXVwIiwgTlVMTCk7CiAJaWYgKHJldCkgewogCQlwcl9lcnIoIiVzOiBjYW4ndCByZXF1ZXN0IHBpeGlzIGV2ZW50IElSUTogJWRcbiIsCiAJCSAgICAgICBfX2Z1bmNfXywgcmV0KTsKQEAgLTEwNSw0NSArMTA1LDc3IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19GQl9GU0xfRElVKSB8fCBkZWZpbmVkKENPTkZJR19GQl9GU0xfRElVX01PRFVMRSkKIAotc3RhdGljIHUzMiBnZXRfYnVzZnJlcSh2b2lkKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKy8qCisgKiBESVUgQXJlYSBEZXNjcmlwdG9yCisgKgorICogVGhlIE1QQzg2MTAgcmVmZXJlbmNlIG1hbnVhbCBzaG93cyB0aGUgYml0cyBvZiB0aGUgQUQgcmVnaXN0ZXIgaW4KKyAqIGxpdHRsZS1lbmRpYW4gb3JkZXIsIHdoaWNoIGNhdXNlcyB0aGUgQkxVRV9DIGZpZWxkIHRvIGJlIHNwbGl0IGludG8gdHdvCisgKiBwYXJ0cy4gVG8gc2ltcGxpZnkgdGhlIGRlZmluaXRpb24gb2YgdGhlIE1BS0VfQUQoKSBtYWNybywgd2UgZGVmaW5lIHRoZQorICogZmllbGRzIGluIGJpZy1lbmRpYW4gb3JkZXIgYW5kIGJ5dGUtc3dhcCB0aGUgcmVzdWx0LgorICoKKyAqIFNvIGV2ZW4gdGhvdWdoIHRoZSByZWdpc3RlcnMgZG9uJ3QgbG9vayBsaWtlIHRoZXkncmUgaW4gdGhlCisgKiBzYW1lIGJpdCBwb3NpdGlvbnMgYXMgdGhleSBhcmUgb24gdGhlIFAxMDIyLCB0aGUgc2FtZSB2YWx1ZSBpcyB3cml0dGVuIHRvCisgKiB0aGUgQUQgcmVnaXN0ZXIgb24gdGhlIE1QQzg2MTAgYW5kIG9uIHRoZSBQMTAyMi4KKyAqLworI2RlZmluZSBBRF9CWVRFX0YJCTB4MTAwMDAwMDAKKyNkZWZpbmUgQURfQUxQSEFfQ19NQVNLCQkweDBFMDAwMDAwCisjZGVmaW5lIEFEX0FMUEhBX0NfU0hJRlQJMjUKKyNkZWZpbmUgQURfQkxVRV9DX01BU0sJCTB4MDE4MDAwMDAKKyNkZWZpbmUgQURfQkxVRV9DX1NISUZUCQkyMworI2RlZmluZSBBRF9HUkVFTl9DX01BU0sJCTB4MDA2MDAwMDAKKyNkZWZpbmUgQURfR1JFRU5fQ19TSElGVAkyMQorI2RlZmluZSBBRF9SRURfQ19NQVNLCQkweDAwMTgwMDAwCisjZGVmaW5lIEFEX1JFRF9DX1NISUZUCQkxOQorI2RlZmluZSBBRF9QQUxFVFRFCQkweDAwMDQwMDAwCisjZGVmaW5lIEFEX1BJWEVMX1NfTUFTSwkJMHgwMDAzMDAwMAorI2RlZmluZSBBRF9QSVhFTF9TX1NISUZUCTE2CisjZGVmaW5lIEFEX0NPTVBfM19NQVNLCQkweDAwMDBGMDAwCisjZGVmaW5lIEFEX0NPTVBfM19TSElGVAkJMTIKKyNkZWZpbmUgQURfQ09NUF8yX01BU0sJCTB4MDAwMDBGMDAKKyNkZWZpbmUgQURfQ09NUF8yX1NISUZUCQk4CisjZGVmaW5lIEFEX0NPTVBfMV9NQVNLCQkweDAwMDAwMEYwCisjZGVmaW5lIEFEX0NPTVBfMV9TSElGVAkJNAorI2RlZmluZSBBRF9DT01QXzBfTUFTSwkJMHgwMDAwMDAwRgorI2RlZmluZSBBRF9DT01QXzBfU0hJRlQJCTAKIAotCXUzMiBmc19idXNmcmVxID0gMDsKLQlub2RlID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgImNwdSIpOwotCWlmIChub2RlKSB7Ci0JCXVuc2lnbmVkIGludCBzaXplOwotCQljb25zdCB1bnNpZ25lZCBpbnQgKnByb3AgPQotCQkJb2ZfZ2V0X3Byb3BlcnR5KG5vZGUsICJidXMtZnJlcXVlbmN5IiwgJnNpemUpOwotCQlpZiAocHJvcCkKLQkJCWZzX2J1c2ZyZXEgPSAqcHJvcDsKLQkJb2Zfbm9kZV9wdXQobm9kZSk7Ci0JfTsKLQlyZXR1cm4gZnNfYnVzZnJlcTsKLX0KKyNkZWZpbmUgTUFLRV9BRChhbHBoYSwgcmVkLCBibHVlLCBncmVlbiwgc2l6ZSwgYzAsIGMxLCBjMiwgYzMpIFwKKwljcHVfdG9fbGUzMihBRF9CWVRFX0YgfCAoYWxwaGEgPDwgQURfQUxQSEFfQ19TSElGVCkgfCBcCisJKGJsdWUgPDwgQURfQkxVRV9DX1NISUZUKSB8IChncmVlbiA8PCBBRF9HUkVFTl9DX1NISUZUKSB8IFwKKwkocmVkIDw8IEFEX1JFRF9DX1NISUZUKSB8IChjMyA8PCBBRF9DT01QXzNfU0hJRlQpIHwgXAorCShjMiA8PCBBRF9DT01QXzJfU0hJRlQpIHwgKGMxIDw8IEFEX0NPTVBfMV9TSElGVCkgfCBcCisJKGMwIDw8IEFEX0NPTVBfMF9TSElGVCkgfCAoc2l6ZSA8PCBBRF9QSVhFTF9TX1NISUZUKSkKIAogdW5zaWduZWQgaW50IG1wYzg2MTBocGNkX2dldF9waXhlbF9mb3JtYXQodW5zaWduZWQgaW50IGJpdHNfcGVyX3BpeGVsLAogCQkJCQkJaW50IG1vbml0b3JfcG9ydCkKIHsKIAlzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBwaXhlbGZvcm1hdFtdWzNdID0gewotCQl7MHg4ODg4MjMxNywgMHg4ODA4MzIxOCwgMHg2NTA1MjExOX0sCi0JCXsweDg4ODgzMzE2LCAweDg4MDgyMjE5LCAweDY1MDUzMTE4fSwKKwkJeworCQkJTUFLRV9BRCgzLCAwLCAyLCAxLCAzLCA4LCA4LCA4LCA4KSwKKwkJCU1BS0VfQUQoNCwgMiwgMCwgMSwgMiwgOCwgOCwgOCwgMCksCisJCQlNQUtFX0FEKDQsIDAsIDIsIDEsIDEsIDUsIDYsIDUsIDApCisJCX0sCisJCXsKKwkJCU1BS0VfQUQoMywgMiwgMCwgMSwgMywgOCwgOCwgOCwgOCksCisJCQlNQUtFX0FEKDQsIDAsIDIsIDEsIDIsIDgsIDgsIDgsIDApLAorCQkJTUFLRV9BRCg0LCAyLCAwLCAxLCAxLCA1LCA2LCA1LCAwKQorCQl9LAogCX07Ci0JdW5zaWduZWQgaW50IHBpeF9mbXQsIGFyY2hfbW9uaXRvcjsKKwl1bnNpZ25lZCBpbnQgYXJjaF9tb25pdG9yOwogCisJLyogVGhlIERWSSBwb3J0IGlzIG1pcy13aXJlZCBvbiByZXZpc2lvbiAxIG9mIHRoaXMgYm9hcmQuICovCiAJYXJjaF9tb25pdG9yID0gKCgqcGl4aXNfYXJjaCA9PSAweDAxKSAmJiAobW9uaXRvcl9wb3J0ID09IDApKT8gMCA6IDE7Ci0JCS8qIERWSSBwb3J0IGZvciBib2FyZCB2ZXJzaW9uIDB4MDEgKi8KIAotCWlmIChiaXRzX3Blcl9waXhlbCA9PSAzMikKLQkJcGl4X2ZtdCA9IHBpeGVsZm9ybWF0W2FyY2hfbW9uaXRvcl1bMF07Ci0JZWxzZSBpZiAoYml0c19wZXJfcGl4ZWwgPT0gMjQpCi0JCXBpeF9mbXQgPSBwaXhlbGZvcm1hdFthcmNoX21vbml0b3JdWzFdOwotCWVsc2UgaWYgKGJpdHNfcGVyX3BpeGVsID09IDE2KQotCQlwaXhfZm10ID0gcGl4ZWxmb3JtYXRbYXJjaF9tb25pdG9yXVsyXTsKLQllbHNlCi0JCXBpeF9mbXQgPSBwaXhlbGZvcm1hdFsxXVswXTsKLQotCXJldHVybiBwaXhfZm10OworCXN3aXRjaCAoYml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDMyOgorCQlyZXR1cm4gcGl4ZWxmb3JtYXRbYXJjaF9tb25pdG9yXVswXTsKKwljYXNlIDI0OgorCQlyZXR1cm4gcGl4ZWxmb3JtYXRbYXJjaF9tb25pdG9yXVsxXTsKKwljYXNlIDE2OgorCQlyZXR1cm4gcGl4ZWxmb3JtYXRbYXJjaF9tb25pdG9yXVsyXTsKKwlkZWZhdWx0OgorCQlwcl9lcnIoImZzbC1kaXU6IHVuc3VwcG9ydGVkIHBpeGVsIGRlcHRoICV1XG4iLCBiaXRzX3Blcl9waXhlbCk7CisJCXJldHVybiAwOworCX0KIH0KIAogdm9pZCBtcGM4NjEwaHBjZF9zZXRfZ2FtbWFfdGFibGUoaW50IG1vbml0b3JfcG9ydCwgY2hhciAqZ2FtbWFfdGFibGVfYmFzZSkKQEAgLTE5MCw4ICsyMjIsNyBAQAogCX0KIAogCS8qIFBpeGVsIENsb2NrIGNvbmZpZ3VyYXRpb24gKi8KLQlwcl9kZWJ1ZygiRElVOiBCdXMgRnJlcXVlbmN5ID0gJWRcbiIsIGdldF9idXNmcmVxKCkpOwotCXNwZWVkX2NjYiA9IGdldF9idXNmcmVxKCk7CisJc3BlZWRfY2NiID0gZnNsX2dldF9zeXNfZnJlcSgpOwogCiAJLyogQ2FsY3VsYXRlIHRoZSBwaXhlbCBjbG9jayB3aXRoIHRoZSBzbWFsbGVzdCBlcnJvciAqLwogCS8qIGNhbGN1bGF0ZSB0aGUgZm9sbG93aW5nIGluIHN0ZXBzIHRvIGF2b2lkIG92ZXJmbG93ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X3NtcC5jCmluZGV4IGVhY2VhMGUuLmFmMDliYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X3NtcC5jCkBAIC01Niw3ICs1Niw3IEBACiB9CiAKIAotc3RhdGljIHZvaWQgX19pbml0CitzdGF0aWMgaW50IF9faW5pdAogc21wXzg2eHhfa2lja19jcHUoaW50IG5yKQogewogCXVuc2lnbmVkIGludCBzYXZlX3ZlY3RvcjsKQEAgLTY1LDcgKzY1LDcgQEAKIAl1bnNpZ25lZCBpbnQgKnZlY3RvciA9ICh1bnNpZ25lZCBpbnQgKikoS0VSTkVMQkFTRSArIDB4MTAwKTsKIAogCWlmIChuciA8IDAgfHwgbnIgPj0gTlJfQ1BVUykKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT0VOVDsKIAogCXByX2RlYnVnKCJzbXBfODZ4eF9raWNrX2NwdToga2ljayBDUFUgIyVkXG4iLCBucik7CiAKQEAgLTkyLDYgKzkyLDggQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAlwcl9kZWJ1Zygid2FpdCBDUFUgIyVkIGZvciAlZCBtc2Vjcy5cbiIsIG5yLCBuKTsKKworCXJldHVybiAwOwogfQogCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L204eHhfc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L204eHhfc2V0dXAuYwppbmRleCA5ZWNjZTk5Li4xZTEyMTA4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9tOHh4X3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvbTh4eF9zZXR1cC5jCkBAIC0xNTAsNyArMTUwLDcgQEAKIAkgKi8KIAljcHUgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAiY3B1Iik7CiAJdmlycT0gaXJxX29mX3BhcnNlX2FuZF9tYXAoY3B1LCAwKTsKLQlpcnEgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOworCWlycSA9IHZpcnFfdG9faHcodmlycSk7CiAKIAlzeXNfdG1yMiA9IGltbXJfbWFwKGltX3NpdCk7CiAJb3V0X2JlMTYoJnN5c190bXIyLT5zaXRfdGJzY3IsICgoMSA8PCAoNyAtIChpcnEvMikpKSA8PCA4KSB8CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcKaW5kZXggZjdiMDc3Mi4uZjk3MGNhMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZwpAQCAtMjAsNiArMjAsNyBAQAogc291cmNlICJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnIgogc291cmNlICJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQweC9LY29uZmlnIgogc291cmNlICJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2FtaWdhb25lL0tjb25maWciCitzb3VyY2UgImFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvd3NwL0tjb25maWciCiAKIGNvbmZpZyBLVk1fR1VFU1QKIAlib29sICJLVk0gR3Vlc3Qgc3VwcG9ydCIKQEAgLTU2LDE2ICs1NywxOSBAQAogCWRlcGVuZHMgb24gUFBDX1JUQVMKIAlkZWZhdWx0IG4KIAorY29uZmlnIFBQQ19TTVBfTVVYRURfSVBJCisJYm9vbAorCWhlbHAKKwkgIFNlbGVjdCB0aGlzIG9wdG9uIGlmIHlvdXIgcGxhdGZvcm0gc3VwcG9ydHMgU01QIGFuZCB5b3VyCisJICBpbnRlcnJ1cHQgY29udHJvbGxlciBwcm92aWRlcyBsZXNzIHRoYW4gNCBpbnRlcnJ1cHRzIHRvIGVhY2gKKwkgIGNwdS4JVGhpcyB3aWxsIGVuYWJsZSB0aGUgZ2VuZXJpYyBjb2RlIHRvIG11bHRpcGxleCB0aGUgNAorCSAgbWVzc2FnZXMgb24gdG8gb25lIGlwaS4KKwogY29uZmlnIFBQQ19VREJHX0JFQVQKIAlib29sICJCRUFUIGJhc2VkIGRlYnVnIGNvbnNvbGUiCiAJZGVwZW5kcyBvbiBQUENfQ0VMTEVCCiAJZGVmYXVsdCBuCiAKLWNvbmZpZyBYSUNTCi0JZGVwZW5kcyBvbiBQUENfUFNFUklFUwotCWJvb2wKLQlkZWZhdWx0IHkKLQogY29uZmlnIElQSUMKIAlib29sCiAJZGVmYXVsdCBuCkBAIC0xNDcsMTQgKzE1MSwyNyBAQAogCWJvb2wKIAlkZWZhdWx0IG4KIAorY29uZmlnIFBQQ19QN19OQVAKKwlib29sCisJZGVmYXVsdCBuCisKIGNvbmZpZyBQUENfSU5ESVJFQ1RfSU8KIAlib29sCiAJc2VsZWN0IEdFTkVSSUNfSU9NQVAKLQlkZWZhdWx0IG4KKworY29uZmlnIFBQQ19JTkRJUkVDVF9QSU8KKwlib29sCisJc2VsZWN0IFBQQ19JTkRJUkVDVF9JTworCitjb25maWcgUFBDX0lORElSRUNUX01NSU8KKwlib29sCisJc2VsZWN0IFBQQ19JTkRJUkVDVF9JTworCitjb25maWcgUFBDX0lPX1dPUktBUk9VTkRTCisJYm9vbAogCiBjb25maWcgR0VORVJJQ19JT01BUAogCWJvb2wKLQlkZWZhdWx0IG4KIAogc291cmNlICJkcml2ZXJzL2NwdWZyZXEvS2NvbmZpZyIKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZQppbmRleCAxMTExMzhjLi4yMTY1YjY1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZQpAQCAtNzMsNiArNzMsNyBAQAogY29uZmlnIFBQQ19CT09LM0VfNjQKIAlib29sICJFbWJlZGRlZCBwcm9jZXNzb3JzIgogCXNlbGVjdCBQUENfRlBVICMgTWFrZSBpdCBhIGNob2ljZSA/CisJc2VsZWN0IFBQQ19TTVBfTVVYRURfSVBJCiAKIGVuZGNob2ljZQogCkBAIC0xMDcsNiArMTA4LDEwIEBACiAJZGVwZW5kcyBvbiBQUEM2NCAmJiBQUENfQk9PSzNTCiAJZGVmX2Jvb2wgeQogCitjb25maWcgUFBDX0EyCisJYm9vbAorCWRlcGVuZHMgb24gUFBDX0JPT0szRV82NAorCiBjb25maWcgVFVORV9DRUxMCiAJYm9vbCAiT3B0aW1pemUgZm9yIENlbGwgQnJvYWRiYW5kIEVuZ2luZSIKIAlkZXBlbmRzIG9uIFBQQzY0ICYmIFBQQ19CT09LM1MKQEAgLTE3NCw2ICsxNzksNyBAQAogY29uZmlnIFBQQ19GU0xfQk9PSzNFCiAJYm9vbAogCXNlbGVjdCBGU0xfRU1CX1BFUkZNT04KKwlzZWxlY3QgUFBDX1NNUF9NVVhFRF9JUEkKIAlkZWZhdWx0IHkgaWYgRlNMX0JPT0tFCiAKIGNvbmZpZyBQVEVfNjRCSVQKQEAgLTIyNiw2ICsyMzIsMjQgQEAKIAogCSAgSWYgaW4gZG91YnQsIHNheSBZIGhlcmUuCiAKK2NvbmZpZyBQUENfSUNTV1gKKwlib29sICJTdXBwb3J0IGZvciBQb3dlclBDIGljc3d4IGNvcHJvY2Vzc29yIGluc3RydWN0aW9uIgorCWRlcGVuZHMgb24gUE9XRVI0CisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIGtlcm5lbCBzdXBwb3J0IGZvciB0aGUgUG93ZXJQQyBJbml0aWF0ZQorCSAgQ29wcm9jZXNzb3IgU3RvcmUgV29yZCAoaWNzd3gpIGNvcHJvY2Vzc29yIGluc3RydWN0aW9uIG9uIFBPV0VSNworCSAgb3IgbmV3ZXIgcHJvY2Vzc29ycy4KKworCSAgVGhpcyBvcHRpb24gaXMgb25seSB1c2VmdWwgaWYgeW91IGhhdmUgYSBwcm9jZXNzb3IgdGhhdCBzdXBwb3J0cworCSAgdGhlIGljc3d4IGNvcHJvY2Vzc29yIGluc3RydWN0aW9uLiBJdCBkb2VzIG5vdCBoYXZlIGFueSBlZmZlY3QKKwkgIG9uIHByb2Nlc3NvcnMgd2l0aG91dCB0aGUgaWNzd3ggY29wcm9jZXNzb3IgaW5zdHJ1Y3Rpb24uCisKKwkgIFRoaXMgb3B0aW9uIHNsaWdodGx5IGluY3JlYXNlcyBrZXJuZWwgbWVtb3J5IHVzYWdlLgorCisJICBJZiBpbiBkb3VidCwgc2F5IE4gaGVyZS4KKwogY29uZmlnIFNQRQogCWJvb2wgIlNQRSBTdXBwb3J0IgogCWRlcGVuZHMgb24gRTIwMCB8fCAoRTUwMCAmJiAhUFBDX0U1MDBNQykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL01ha2VmaWxlCmluZGV4IGZkYjlmMGIuLjczZTIxMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9NYWtlZmlsZQpAQCAtMjIsMyArMjIsNCBAQAogb2JqLSQoQ09ORklHX1BQQ19QUzMpCQkrPSBwczMvCiBvYmotJChDT05GSUdfRU1CRURERUQ2eHgpCSs9IGVtYmVkZGVkNnh4Lwogb2JqLSQoQ09ORklHX0FNSUdBT05FKQkJKz0gYW1pZ2FvbmUvCitvYmotJChDT05GSUdfUFBDX1dTUCkJCSs9IHdzcC8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWcKaW5kZXggODEyMzllYi4uNjdkNTAwOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWcKQEAgLTYsNyArNiw4IEBACiAJYm9vbAogCXNlbGVjdCBQUENfQ0VMTAogCXNlbGVjdCBQUENfRENSX01NSU8KLQlzZWxlY3QgUFBDX0lORElSRUNUX0lPCisJc2VsZWN0IFBQQ19JTkRJUkVDVF9QSU8KKwlzZWxlY3QgUFBDX0lORElSRUNUX01NSU8KIAlzZWxlY3QgUFBDX05BVElWRQogCXNlbGVjdCBQUENfUlRBUwogCXNlbGVjdCBJUlFfRURHRV9FT0lfSEFORExFUgpAQCAtMTUsNiArMTYsNyBAQAogCWJvb2wKIAlzZWxlY3QgUFBDX0NFTExfQ09NTU9OCiAJc2VsZWN0IE1QSUMKKwlzZWxlY3QgUFBDX0lPX1dPUktBUk9VTkRTCiAJc2VsZWN0IElCTV9ORVdfRU1BQ19FTUFDNAogCXNlbGVjdCBJQk1fTkVXX0VNQUNfUkdNSUkKIAlzZWxlY3QgSUJNX05FV19FTUFDX1pNSUkgI3Rlc3Qgb25seQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL01ha2VmaWxlCmluZGV4IDgzZmFmZTkuLmE0YTg5MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiBvYmotJChDT05GSUdfUFBDX0NFTExfQ09NTU9OKQkJKz0gY2JlX3JlZ3MubyBpbnRlcnJ1cHQubyBwZXJ2YXNpdmUubwogCiBvYmotJChDT05GSUdfUFBDX0NFTExfTkFUSVZFKQkJKz0gaW9tbXUubyBzZXR1cC5vIHNwaWRlci1waWMubyBcCi0JCQkJCSAgIHBtdS5vIGlvLXdvcmthcm91bmRzLm8gc3BpZGVyLXBjaS5vCisJCQkJCSAgIHBtdS5vIHNwaWRlci1wY2kubwogb2JqLSQoQ09ORklHX0NCRV9SQVMpCQkJKz0gcmFzLm8KIAogb2JqLSQoQ09ORklHX0NCRV9USEVSTSkJCQkrPSBjYmVfdGhlcm1hbC5vCkBAIC0zOSwxMSArMzksMTAgQEAKIAkJCQkJICAgY2VsbGViX3BjaS5vIGNlbGxlYl9zY2NfZXBjaS5vIFwKIAkJCQkJICAgY2VsbGViX3NjY19wY2lleC5vIFwKIAkJCQkJICAgY2VsbGViX3NjY191aGMubyBcCi0JCQkJCSAgIGlvLXdvcmthcm91bmRzLm8gc3BpZGVyLXBjaS5vIFwKLQkJCQkJICAgYmVhdC5vIGJlYXRfaHRhYi5vIGJlYXRfaHZDYWxsLm8gXAotCQkJCQkgICBiZWF0X2ludGVycnVwdC5vIGJlYXRfaW9tbXUubworCQkJCQkgICBzcGlkZXItcGNpLm8gYmVhdC5vIGJlYXRfaHRhYi5vIFwKKwkJCQkJICAgYmVhdF9odkNhbGwubyBiZWF0X2ludGVycnVwdC5vIFwKKwkJCQkJICAgYmVhdF9pb21tdS5vCiAKLW9iai0kKENPTkZJR19TTVApCQkJKz0gYmVhdF9zbXAubwogb2JqLSQoQ09ORklHX1BQQ19VREJHX0JFQVQpCQkrPSBiZWF0X3VkYmcubwogb2JqLSQoQ09ORklHX1NFUklBTF9UWFg5KQkJKz0gY2VsbGViX3NjY19zaW8ubwogb2JqLSQoQ09ORklHX1NQVV9CQVNFKQkJCSs9IGJlYXRfc3B1X3ByaXYxLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9heG9uX21zaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMKaW5kZXggYmI1ZWJmOC4uYWMwNjkwMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCQlwcl9kZXZlbCgiYXhvbl9tc2k6IHdvZmYgJXggcm9mZiAleCBtc2kgJXhcbiIsCiAJCQkgIHdyaXRlX29mZnNldCwgbXNpYy0+cmVhZF9vZmZzZXQsIG1zaSk7CiAKLQkJaWYgKG1zaSA8IE5SX0lSUVMgJiYgaXJxX21hcFttc2ldLmhvc3QgPT0gbXNpYy0+aXJxX2hvc3QpIHsKKwkJaWYgKG1zaSA8IE5SX0lSUVMgJiYgaXJxX2dldF9jaGlwX2RhdGEobXNpKSA9PSBtc2ljKSB7CiAJCQlnZW5lcmljX2hhbmRsZV9pcnEobXNpKTsKIAkJCW1zaWMtPmZpZm9fdmlydFtpZHhdID0gY3B1X3RvX2xlMzIoMHhmZmZmZmZmZik7CiAJCX0gZWxzZSB7CkBAIC0zMjAsNiArMzIwLDcgQEAKIHN0YXRpYyBpbnQgbXNpY19ob3N0X21hcChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHVuc2lnbmVkIGludCB2aXJxLAogCQkJIGlycV9od19udW1iZXJfdCBodykKIHsKKwlpcnFfc2V0X2NoaXBfZGF0YSh2aXJxLCBoLT5ob3N0X2RhdGEpOwogCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCAmbXNpY19pcnFfY2hpcCwgaGFuZGxlX3NpbXBsZV9pcnEpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYmVhdF9pbnRlcnJ1cHQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2ludGVycnVwdC5jCmluZGV4IDRjYjllMTQuLjU1MDE1ZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2ludGVycnVwdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2ludGVycnVwdC5jCkBAIC0xNDgsMTYgKzE0OCw2IEBACiB9CiAKIC8qCi0gKiBVcGRhdGUgYmluZGluZyBoYXJkd2FyZSBJUlEgbnVtYmVyIChodykgYW5kIFZpcnR1cWwKLSAqIElSUSBudW1iZXIgKHZpcnEpLiBUaGlzIGlzIGNhbGxlZCBvbmx5IG9uY2UgZm9yIGEgZ2l2ZW4gbWFwcGluZy4KLSAqLwotc3RhdGljIHZvaWQgYmVhdGljX3BpY19ob3N0X3JlbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCi0JCQkgICAgICAgaXJxX2h3X251bWJlcl90IGh3KQotewotCWJlYXRfY29uc3RydWN0X2FuZF9jb25uZWN0X2lycV9wbHVnKHZpcnEsIGh3KTsKLX0KLQotLyoKICAqIFRyYW5zbGF0ZSBkZXZpY2UtdHJlZSBpbnRlcnJ1cHQgc3BlYyB0byBpcnFfaHdfbnVtYmVyX3Qgc3R5bGUgKHVsb25nKSwKICAqIHRvIHBhc3MgYXdheSB0byBpcnFfY3JlYXRlX21hcHBpbmcoKS4KICAqCkBAIC0xODQsNyArMTc0LDYgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfaG9zdF9vcHMgYmVhdGljX3BpY19ob3N0X29wcyA9IHsKIAkubWFwID0gYmVhdGljX3BpY19ob3N0X21hcCwKLQkucmVtYXAgPSBiZWF0aWNfcGljX2hvc3RfcmVtYXAsCiAJLnVubWFwID0gYmVhdGljX3BpY19ob3N0X3VubWFwLAogCS54bGF0ZSA9IGJlYXRpY19waWNfaG9zdF94bGF0ZSwKIAkubWF0Y2ggPSBiZWF0aWNfcGljX2hvc3RfbWF0Y2gsCkBAIC0yNTcsMjIgKzI0Niw2IEBACiAJaXJxX3NldF9kZWZhdWx0X2hvc3QoYmVhdGljX2hvc3QpOwogfQogCi0jaWZkZWYgQ09ORklHX1NNUAotCi0vKiBOdWxsaWZpZWQgdG8gY29tcGlsZSB3aXRoIFNNUCBtb2RlICovCi12b2lkIGJlYXRpY19zZXR1cF9jcHUoaW50IGNwdSkKLXsKLX0KLQotdm9pZCBiZWF0aWNfY2F1c2VfSVBJKGludCBjcHUsIGludCBtZXNnKQotewotfQotCi12b2lkIGJlYXRpY19yZXF1ZXN0X0lQSXModm9pZCkKLXsKLX0KLSNlbmRpZiAvKiBDT05GSUdfU01QICovCi0KIHZvaWQgYmVhdGljX2RlaW5pdF9JUlEodm9pZCkKIHsKIAlpbnQJaTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2ludGVycnVwdC5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaW50ZXJydXB0LmgKaW5kZXggYjQ3MGZkMC4uYTdlNTJmOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaW50ZXJydXB0LmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaW50ZXJydXB0LmgKQEAgLTI0LDkgKzI0LDYgQEAKIAogZXh0ZXJuIHZvaWQgYmVhdGljX2luaXRfSVJRKHZvaWQpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBiZWF0aWNfZ2V0X2lycSh2b2lkKTsKLWV4dGVybiB2b2lkIGJlYXRpY19jYXVzZV9JUEkoaW50IGNwdSwgaW50IG1lc2cpOwotZXh0ZXJuIHZvaWQgYmVhdGljX3JlcXVlc3RfSVBJcyh2b2lkKTsKLWV4dGVybiB2b2lkIGJlYXRpY19zZXR1cF9jcHUoaW50KTsKIGV4dGVybiB2b2lkIGJlYXRpY19kZWluaXRfSVJRKHZvaWQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfc21wLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2ZWZjMjAuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfc21wLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotLyoKLSAqIFNNUCBzdXBwb3J0IGZvciBDZWxsZWIgcGxhdGZvcm0uIChJbmNvbXBsZXRlKQotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNiBUT1NISUJBIENPUlBPUkFUSU9OCi0gKgotICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zbXAuYzoKLSAqIERhdmUgRW5nZWJyZXRzZW4sIFBldGVyIEJlcmduZXIsIGFuZAotICogTWlrZSBDb3JyaWdhbiB7ZW5nZWJyZXR8YmVyZ25lcnxtaWtlY31AdXMuaWJtLmNvbQotICogUGx1cyB2YXJpb3VzIGNoYW5nZXMgZnJvbSBvdGhlciBJQk0gdGVhbXMuLi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotICovCi0KLSN1bmRlZiBERUJVRwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHUuaD4KLQotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vc21wLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KLSNpbmNsdWRlIDxhc20vdWRiZy5oPgotCi0jaW5jbHVkZSAiYmVhdF9pbnRlcnJ1cHQuaCIKLQotI2lmZGVmIERFQlVHCi0jZGVmaW5lIERCRyhmbXQuLi4pIHVkYmdfcHJpbnRmKGZtdCkKLSNlbHNlCi0jZGVmaW5lIERCRyhmbXQuLi4pCi0jZW5kaWYKLQotLyoKLSAqIFRoZSBwcmltYXJ5IHRocmVhZCBvZiBlYWNoIG5vbi1ib290IHByb2Nlc3NvciBpcyByZWNvcmRlZCBoZXJlIGJlZm9yZQotICogc21wIGluaXQuCi0gKi8KLS8qIHN0YXRpYyBjcHVtYXNrX3Qgb2Zfc3Bpbl9tYXA7ICovCi0KLS8qKgotICogc21wX3N0YXJ0dXBfY3B1KCkgLSBzdGFydCB0aGUgZ2l2ZW4gY3B1Ci0gKgotICogQXQgYm9vdCB0aW1lLCB0aGVyZSBpcyBub3RoaW5nIHRvIGRvIGZvciBwcmltYXJ5IHRocmVhZHMgd2hpY2ggd2VyZQotICogc3RhcnRlZCBmcm9tIE9wZW4gRmlybXdhcmUuICBGb3IgYW55dGhpbmcgZWxzZSwgY2FsbCBSVEFTIHdpdGggdGhlCi0gKiBhcHByb3ByaWF0ZSBzdGFydCBsb2NhdGlvbi4KLSAqCi0gKiBSZXR1cm5zOgotICoJMAktIGZhaWx1cmUKLSAqCTEJLSBzdWNjZXNzCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IF9fZGV2aW5pdCBzbXBfc3RhcnR1cF9jcHUodW5zaWduZWQgaW50IGxjcHUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHNtcF9iZWF0aWNfbWVzc2FnZV9wYXNzKGludCB0YXJnZXQsIGludCBtc2cpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlpZiAodGFyZ2V0IDwgTlJfQ1BVUykgewotCQliZWF0aWNfY2F1c2VfSVBJKHRhcmdldCwgbXNnKTsKLQl9IGVsc2UgewotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKLQkJCWlmICh0YXJnZXQgPT0gTVNHX0FMTF9CVVRfU0VMRgotCQkJICAgICYmIGkgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQotCQkJCWNvbnRpbnVlOwotCQkJYmVhdGljX2NhdXNlX0lQSShpLCBtc2cpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgaW50IF9faW5pdCBzbXBfYmVhdGljX3Byb2JlKHZvaWQpCi17Ci0JcmV0dXJuIGNwdXNfd2VpZ2h0KGNwdV9wb3NzaWJsZV9tYXApOwotfQotCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgc21wX2JlYXRpY19zZXR1cF9jcHUoaW50IGNwdSkKLXsKLQliZWF0aWNfc2V0dXBfY3B1KGNwdSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbXBfY2VsbGViX2tpY2tfY3B1KGludCBucikKLXsKLQlCVUdfT04obnIgPCAwIHx8IG5yID49IE5SX0NQVVMpOwotCi0JaWYgKCFzbXBfc3RhcnR1cF9jcHUobnIpKQotCQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBpbnQgc21wX2NlbGxlYl9jcHVfYm9vdGFibGUodW5zaWduZWQgaW50IG5yKQotewotCXJldHVybiAxOwotfQotc3RhdGljIHN0cnVjdCBzbXBfb3BzX3QgYnBhX2JlYXRpY19zbXBfb3BzID0gewotCS5tZXNzYWdlX3Bhc3MJPSBzbXBfYmVhdGljX21lc3NhZ2VfcGFzcywKLQkucHJvYmUJCT0gc21wX2JlYXRpY19wcm9iZSwKLQkua2lja19jcHUJPSBzbXBfY2VsbGViX2tpY2tfY3B1LAotCS5zZXR1cF9jcHUJPSBzbXBfYmVhdGljX3NldHVwX2NwdSwKLQkuY3B1X2Jvb3RhYmxlCT0gc21wX2NlbGxlYl9jcHVfYm9vdGFibGUsCi19OwotCi0vKiBUaGlzIGlzIGNhbGxlZCB2ZXJ5IGVhcmx5ICovCi12b2lkIF9faW5pdCBzbXBfaW5pdF9jZWxsZWIodm9pZCkKLXsKLQlEQkcoIiAtPiBzbXBfaW5pdF9jZWxsZWIoKVxuIik7Ci0KLQlzbXBfb3BzID0gJmJwYV9iZWF0aWNfc21wX29wczsKLQotCURCRygiIDwtIHNtcF9pbml0X2NlbGxlYigpXG4iKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9jYmVfcmVncy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2NiZV9yZWdzLmMKaW5kZXggZGJjMzM4Zi4uZjM5MTdlNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2NiZV9yZWdzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2NiZV9yZWdzLmMKQEAgLTQ1LDggKzQ1LDggQEAKIAl1bnNpZ25lZCBpbnQgY2JlX2lkOwogfSBjYmVfdGhyZWFkX21hcFtOUl9DUFVTXTsKIAotc3RhdGljIGNwdW1hc2tfdCBjYmVfbG9jYWxfbWFza1tNQVhfQ0JFXSA9IHsgWzAgLi4uIE1BWF9DQkUtMV0gPSBDUFVfTUFTS19OT05FIH07Ci1zdGF0aWMgY3B1bWFza190IGNiZV9maXJzdF9vbmxpbmVfY3B1ID0gQ1BVX01BU0tfTk9ORTsKK3N0YXRpYyBjcHVtYXNrX3QgY2JlX2xvY2FsX21hc2tbTUFYX0NCRV0gPSB7IFswIC4uLiBNQVhfQ0JFLTFdID0ge0NQVV9CSVRTX05PTkV9IH07CitzdGF0aWMgY3B1bWFza190IGNiZV9maXJzdF9vbmxpbmVfY3B1ID0geyBDUFVfQklUU19OT05FIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2JlX3JlZ3NfbWFwICpjYmVfZmluZF9tYXAoc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKQEAgLTE1OSw3ICsxNTksOCBAQAogCiB1MzIgY2JlX25vZGVfdG9fY3B1KGludCBub2RlKQogewotCXJldHVybiBmaW5kX2ZpcnN0X2JpdCggKHVuc2lnbmVkIGxvbmcgKikgJmNiZV9sb2NhbF9tYXNrW25vZGVdLCBzaXplb2YoY3B1bWFza190KSk7CisJcmV0dXJuIGNwdW1hc2tfZmlyc3QoJmNiZV9sb2NhbF9tYXNrW25vZGVdKTsKKwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY2JlX25vZGVfdG9fY3B1KTsKIApAQCAtMjY4LDkgKzI2OSw5IEBACiAJCQkJdGhyZWFkLT5yZWdzID0gbWFwOwogCQkJCXRocmVhZC0+Y2JlX2lkID0gY2JlX2lkOwogCQkJCW1hcC0+YmVfbm9kZSA9IHRocmVhZC0+YmVfbm9kZTsKLQkJCQljcHVfc2V0KGksIGNiZV9sb2NhbF9tYXNrW2NiZV9pZF0pOworCQkJCWNwdW1hc2tfc2V0X2NwdShpLCAmY2JlX2xvY2FsX21hc2tbY2JlX2lkXSk7CiAJCQkJaWYodGhyZWFkLT50aHJlYWRfaWQgPT0gMCkKLQkJCQkJY3B1X3NldChpLCBjYmVfZmlyc3Rfb25saW5lX2NwdSk7CisJCQkJCWNwdW1hc2tfc2V0X2NwdShpLCAmY2JlX2ZpcnN0X29ubGluZV9jcHUpOwogCQkJfQogCQl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9jZWxsZWJfcGNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY2VsbGViX3BjaS5jCmluZGV4IDQwNGQxZmMuLjU4MjIxNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9jZWxsZWJfcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2NlbGxlYl9wY2kuYwpAQCAtNDEsNyArNDEsNiBAQAogI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CiAjaW5jbHVkZSA8YXNtL3BwYy1wY2kuaD4KIAotI2luY2x1ZGUgImlvLXdvcmthcm91bmRzLmgiCiAjaW5jbHVkZSAiY2VsbGViX3BjaS5oIgogCiAjZGVmaW5lIE1BWF9QQ0lfREVWSUNFUyAgICAzMgpAQCAtMzIwLDcgKzMxOSw3IEBACiAKIAlzaXplID0gMjU2OwogCWNvbmZpZyA9ICZwcml2YXRlLT5mYWtlX2NvbmZpZ1tkZXZub11bZm5dOwotCSpjb25maWcgPSBhbGxvY19tYXliZV9ib290bWVtKHNpemUsIEdGUF9LRVJORUwpOworCSpjb25maWcgPSB6YWxsb2NfbWF5YmVfYm9vdG1lbShzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoKmNvbmZpZyA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiUENJOiAiCiAJCSAgICAgICAibm90IGVub3VnaCBtZW1vcnkgZm9yIGZha2UgY29uZmlndXJhdGlvbiBzcGFjZVxuIik7CkBAIC0zMzEsNyArMzMwLDcgQEAKIAogCXNpemUgPSBzaXplb2Yoc3RydWN0IGNlbGxlYl9wY2lfcmVzb3VyY2UpOwogCXJlcyA9ICZwcml2YXRlLT5yZXNbZGV2bm9dW2ZuXTsKLQkqcmVzID0gYWxsb2NfbWF5YmVfYm9vdG1lbShzaXplLCBHRlBfS0VSTkVMKTsKKwkqcmVzID0gemFsbG9jX21heWJlX2Jvb3RtZW0oc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCpyZXMgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICJQQ0k6IG5vdCBlbm91Z2ggbWVtb3J5IGZvciByZXNvdXJjZSBkYXRhIHNwYWNlXG4iKTsKQEAgLTQzMiw3ICs0MzEsNyBAQAogc3RhdGljIHZvaWQgX19pbml0IGNlbGxlYl9hbGxvY19wcml2YXRlX21lbShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCiB7CiAJaG9zZS0+cHJpdmF0ZV9kYXRhID0KLQkJYWxsb2NfbWF5YmVfYm9vdG1lbShzaXplb2Yoc3RydWN0IGNlbGxlYl9wY2lfcHJpdmF0ZSksCisJCXphbGxvY19tYXliZV9ib290bWVtKHNpemVvZihzdHJ1Y3QgY2VsbGViX3BjaV9wcml2YXRlKSwKIAkJCUdGUF9LRVJORUwpOwogfQogCkBAIC00NjksMTggKzQ2OCw2IEBACiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGNlbGxlYl9pb193b3JrYXJvdW5kX2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyICpwaGIsCi0JCQkJCSAgICBzdHJ1Y3QgY2VsbGViX3BoYl9zcGVjICpwaGJfc3BlYykKLXsKLQlpZiAocGhiX3NwZWMtPm9wcykgewotCQlpb3dhX3JlZ2lzdGVyX2J1cyhwaGIsIHBoYl9zcGVjLT5vcHMsIHBoYl9zcGVjLT5pb3dhX2luaXQsCi0JCQkJICBwaGJfc3BlYy0+aW93YV9kYXRhKTsKLQkJaW9fd29ya2Fyb3VuZF9pbml0KCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIGludCBfX2luaXQgY2VsbGViX3NldHVwX3BoYihzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKnBoYikKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiA9IHBoYi0+ZG47CkBAIC01MDAsNyArNDg3LDExIEBACiAJaWYgKHJjKQogCQlyZXR1cm4gMTsKIAotCXJldHVybiBjZWxsZWJfaW9fd29ya2Fyb3VuZF9pbml0KHBoYiwgcGhiX3NwZWMpOworCWlmIChwaGJfc3BlYy0+b3BzKQorCQlpb3dhX3JlZ2lzdGVyX2J1cyhwaGIsIHBoYl9zcGVjLT5vcHMsCisJCQkJICBwaGJfc3BlYy0+aW93YV9pbml0LAorCQkJCSAgcGhiX3NwZWMtPmlvd2FfZGF0YSk7CisJcmV0dXJuIDA7CiB9CiAKIGludCBjZWxsZWJfcGNpX3Byb2JlX21vZGUoc3RydWN0IHBjaV9idXMgKmJ1cykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9jZWxsZWJfcGNpLmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY2VsbGViX3BjaS5oCmluZGV4IDRjYmExNTIuLmE4MDFmY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9jZWxsZWJfcGNpLmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2NlbGxlYl9wY2kuaApAQCAtMjYsOCArMjYsOSBAQAogI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vcHBjLXBjaS5oPgorI2luY2x1ZGUgPGFzbS9pby13b3JrYXJvdW5kcy5oPgogCi0jaW5jbHVkZSAiaW8td29ya2Fyb3VuZHMuaCIKK3N0cnVjdCBpb3dhX2J1czsKIAogc3RydWN0IGNlbGxlYl9waGJfc3BlYyB7CiAJaW50ICgqc2V0dXApKHN0cnVjdCBkZXZpY2Vfbm9kZSAqLCBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY2VsbGViX3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY2VsbGViX3NldHVwLmMKaW5kZXggZTUzODQ1NS4uZDU4ZDliYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2NlbGxlYl9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9jZWxsZWJfc2V0dXAuYwpAQCAtMTI4LDEwICsxMjgsNiBAQAogCXNwdV9tYW5hZ2VtZW50X29wcwk9ICZzcHVfbWFuYWdlbWVudF9vZl9vcHM7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19TTVAKLQlzbXBfaW5pdF9jZWxsZWIoKTsKLSNlbmRpZgotCiAJY2VsbGViX3NldHVwX2FyY2hfY29tbW9uKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pbnRlcnJ1cHQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pbnRlcnJ1cHQuYwppbmRleCA0NGNmZDFiLi40NDljMDhjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW50ZXJydXB0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2ludGVycnVwdC5jCkBAIC0xOTYsOCArMTk2LDIwIEBACiB7CiAJaW50IGlwaSA9IChpbnQpKGxvbmcpZGV2X2lkOwogCi0Jc21wX21lc3NhZ2VfcmVjdihpcGkpOwotCisJc3dpdGNoKGlwaSkgeworCWNhc2UgUFBDX01TR19DQUxMX0ZVTkNUSU9OOgorCQlnZW5lcmljX3NtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCgpOworCQlicmVhazsKKwljYXNlIFBQQ19NU0dfUkVTQ0hFRFVMRToKKwkJc2NoZWR1bGVyX2lwaSgpOworCQlicmVhazsKKwljYXNlIFBQQ19NU0dfQ0FMTF9GVU5DX1NJTkdMRToKKwkJZ2VuZXJpY19zbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0KCk7CisJCWJyZWFrOworCWNhc2UgUFBDX01TR19ERUJVR0dFUl9CUkVBSzoKKwkJZGVidWdfaXBpX2FjdGlvbigwLCBOVUxMKTsKKwkJYnJlYWs7CisJfQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIHN0YXRpYyB2b2lkIGlpY19yZXF1ZXN0X2lwaShpbnQgaXBpLCBjb25zdCBjaGFyICpuYW1lKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3FwYWNlX3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcXBhY2Vfc2V0dXAuYwppbmRleCBkMzFjNTk0Li41MWUyOTAxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcXBhY2Vfc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcXBhY2Vfc2V0dXAuYwpAQCAtNDIsNyArNDIsNiBAQAogI2luY2x1ZGUgImludGVycnVwdC5oIgogI2luY2x1ZGUgInBlcnZhc2l2ZS5oIgogI2luY2x1ZGUgInJhcy5oIgotI2luY2x1ZGUgImlvLXdvcmthcm91bmRzLmgiCiAKIHN0YXRpYyB2b2lkIHFwYWNlX3Nob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zZXR1cC5jCmluZGV4IGZkNTdiZmUuLmM3M2NmNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zZXR1cC5jCkBAIC01MSwxMSArNTEsMTEgQEAKICNpbmNsdWRlIDxhc20vdWRiZy5oPgogI2luY2x1ZGUgPGFzbS9tcGljLmg+CiAjaW5jbHVkZSA8YXNtL2NlbGwtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9pby13b3JrYXJvdW5kcy5oPgogCiAjaW5jbHVkZSAiaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAicGVydmFzaXZlLmgiCiAjaW5jbHVkZSAicmFzLmgiCi0jaW5jbHVkZSAiaW8td29ya2Fyb3VuZHMuaCIKIAogI2lmZGVmIERFQlVHCiAjZGVmaW5lIERCRyhmbXQuLi4pIHVkYmdfcHJpbnRmKGZtdCkKQEAgLTEzNiw4ICsxMzYsNiBAQAogCiAJaW93YV9yZWdpc3Rlcl9idXMocGhiLCAmc3BpZGVycGNpX29wcywgJnNwaWRlcnBjaV9pb3dhX2luaXQsCiAJCQkJICAodm9pZCAqKVNQSURFUl9QQ0lfUkVHX0JBU0UpOwotCWlvX3dvcmthcm91bmRfaW5pdCgpOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zbXAuYwppbmRleCBmNzc0NTMwLi5kMTc2ZTYxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NtcC5jCkBAIC03Nyw3ICs3Nyw3IEBACiAJdW5zaWduZWQgaW50IHBjcHU7CiAJaW50IHN0YXJ0X2NwdTsKIAotCWlmIChjcHVfaXNzZXQobGNwdSwgb2Zfc3Bpbl9tYXApKQorCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGxjcHUsICZvZl9zcGluX21hcCkpCiAJCS8qIEFscmVhZHkgc3RhcnRlZCBieSBPRiBhbmQgc2l0dGluZyBpbiBzcGluIGxvb3AgKi8KIAkJcmV0dXJuIDE7CiAKQEAgLTEwMywyNyArMTAzLDExIEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB2b2lkIHNtcF9paWNfbWVzc2FnZV9wYXNzKGludCB0YXJnZXQsIGludCBtc2cpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlpZiAodGFyZ2V0IDwgTlJfQ1BVUykgewotCQlpaWNfY2F1c2VfSVBJKHRhcmdldCwgbXNnKTsKLQl9IGVsc2UgewotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKLQkJCWlmICh0YXJnZXQgPT0gTVNHX0FMTF9CVVRfU0VMRgotCQkJICAgICYmIGkgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQotCQkJCWNvbnRpbnVlOwotCQkJaWljX2NhdXNlX0lQSShpLCBtc2cpOwotCQl9Ci0JfQotfQotCiBzdGF0aWMgaW50IF9faW5pdCBzbXBfaWljX3Byb2JlKHZvaWQpCiB7CiAJaWljX3JlcXVlc3RfSVBJcygpOwogCi0JcmV0dXJuIGNwdXNfd2VpZ2h0KGNwdV9wb3NzaWJsZV9tYXApOworCXJldHVybiBjcHVtYXNrX3dlaWdodChjcHVfcG9zc2libGVfbWFzayk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbXBfY2VsbF9zZXR1cF9jcHUoaW50IGNwdSkKQEAgLTEzNywxMiArMTIxLDEyIEBACiAJbXRzcHIoU1BSTl9EQUJSWCwgREFCUlhfS0VSTkVMIHwgREFCUlhfVVNFUik7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbXBfY2VsbF9raWNrX2NwdShpbnQgbnIpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbXBfY2VsbF9raWNrX2NwdShpbnQgbnIpCiB7CiAJQlVHX09OKG5yIDwgMCB8fCBuciA+PSBOUl9DUFVTKTsKIAogCWlmICghc21wX3N0YXJ0dXBfY3B1KG5yKSkKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT0VOVDsKIAogCS8qCiAJICogVGhlIHByb2Nlc3NvciBpcyBjdXJyZW50bHkgc3Bpbm5pbmcsIHdhaXRpbmcgZm9yIHRoZQpAQCAtMTUwLDYgKzEzNCw4IEBACiAJICogdGhlIHByb2Nlc3NvciB3aWxsIGNvbnRpbnVlIG9uIHRvIHNlY29uZGFyeV9zdGFydAogCSAqLwogCXBhY2FbbnJdLmNwdV9zdGFydCA9IDE7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzbXBfY2VsbF9jcHVfYm9vdGFibGUodW5zaWduZWQgaW50IG5yKQpAQCAtMTY2LDcgKzE1Miw3IEBACiAJcmV0dXJuIDE7CiB9CiBzdGF0aWMgc3RydWN0IHNtcF9vcHNfdCBicGFfaWljX3NtcF9vcHMgPSB7Ci0JLm1lc3NhZ2VfcGFzcwk9IHNtcF9paWNfbWVzc2FnZV9wYXNzLAorCS5tZXNzYWdlX3Bhc3MJPSBpaWNfY2F1c2VfSVBJLAogCS5wcm9iZQkJPSBzbXBfaWljX3Byb2JlLAogCS5raWNrX2NwdQk9IHNtcF9jZWxsX2tpY2tfY3B1LAogCS5zZXR1cF9jcHUJPSBzbXBfY2VsbF9zZXR1cF9jcHUsCkBAIC0xODYsMTMgKzE3MiwxMiBAQAogCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9TTVQpKSB7CiAJCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGkpIHsKIAkJCWlmIChjcHVfdGhyZWFkX2luX2NvcmUoaSkgPT0gMCkKLQkJCQljcHVfc2V0KGksIG9mX3NwaW5fbWFwKTsKKwkJCQljcHVtYXNrX3NldF9jcHUoaSwgJm9mX3NwaW5fbWFwKTsKIAkJfQotCX0gZWxzZSB7Ci0JCW9mX3NwaW5fbWFwID0gY3B1X3ByZXNlbnRfbWFwOwotCX0KKwl9IGVsc2UKKwkJY3B1bWFza19jb3B5KCZvZl9zcGluX21hcCwgY3B1X3ByZXNlbnRfbWFzayk7CiAKLQljcHVfY2xlYXIoYm9vdF9jcHVpZCwgb2Zfc3Bpbl9tYXApOworCWNwdW1hc2tfY2xlYXJfY3B1KGJvb3RfY3B1aWQsICZvZl9zcGluX21hcCk7CiAKIAkvKiBOb24tbHBhciBoYXMgYWRkaXRpb25hbCB0YWtlL2dpdmUgdGltZWJhc2UgKi8KIAlpZiAocnRhc190b2tlbigiZnJlZXplLXRpbWUtYmFzZSIpICE9IFJUQVNfVU5LTk9XTl9TRVJWSUNFKSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3BpZGVyLXBjaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwaWRlci1wY2kuYwppbmRleCBjYTc3MzFjLi5mMWY3ODc4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3BpZGVyLXBjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcGlkZXItcGNpLmMKQEAgLTI3LDggKzI3LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9wcGMtcGNpLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KLQotI2luY2x1ZGUgImlvLXdvcmthcm91bmRzLmgiCisjaW5jbHVkZSA8YXNtL2lvLXdvcmthcm91bmRzLmg+CiAKICNkZWZpbmUgU1BJREVSX1BDSV9ESVNBQkxFX1BSRUZFVENICiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcGlkZXItcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3BpZGVyLXBpYy5jCmluZGV4IGM1Y2Y1MGUuLjQ0MmMyOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcGlkZXItcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwaWRlci1waWMuYwpAQCAtNjgsOSArNjgsOSBAQAogfTsKIHN0YXRpYyBzdHJ1Y3Qgc3BpZGVyX3BpYyBzcGlkZXJfcGljc1tTUElERVJfQ0hJUF9DT1VOVF07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3BpZGVyX3BpYyAqc3BpZGVyX3ZpcnFfdG9fcGljKHVuc2lnbmVkIGludCB2aXJxKQorc3RhdGljIHN0cnVjdCBzcGlkZXJfcGljICpzcGlkZXJfaXJxX2RhdGFfdG9fcGljKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlyZXR1cm4gaXJxX21hcFt2aXJxXS5ob3N0LT5ob3N0X2RhdGE7CisJcmV0dXJuIGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogfQogCiBzdGF0aWMgdm9pZCBfX2lvbWVtICpzcGlkZXJfZ2V0X2lycV9jb25maWcoc3RydWN0IHNwaWRlcl9waWMgKnBpYywKQEAgLTgxLDI0ICs4MSwyNCBAQAogCiBzdGF0aWMgdm9pZCBzcGlkZXJfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IHNwaWRlcl9waWMgKnBpYyA9IHNwaWRlcl92aXJxX3RvX3BpYyhkLT5pcnEpOwotCXZvaWQgX19pb21lbSAqY2ZnID0gc3BpZGVyX2dldF9pcnFfY29uZmlnKHBpYywgaXJxX21hcFtkLT5pcnFdLmh3aXJxKTsKKwlzdHJ1Y3Qgc3BpZGVyX3BpYyAqcGljID0gc3BpZGVyX2lycV9kYXRhX3RvX3BpYyhkKTsKKwl2b2lkIF9faW9tZW0gKmNmZyA9IHNwaWRlcl9nZXRfaXJxX2NvbmZpZyhwaWMsIGlycWRfdG9faHdpcnEoZCkpOwogCiAJb3V0X2JlMzIoY2ZnLCBpbl9iZTMyKGNmZykgfCAweDMwMDAwMDAwdSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNwaWRlcl9tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IHNwaWRlcl9waWMgKnBpYyA9IHNwaWRlcl92aXJxX3RvX3BpYyhkLT5pcnEpOwotCXZvaWQgX19pb21lbSAqY2ZnID0gc3BpZGVyX2dldF9pcnFfY29uZmlnKHBpYywgaXJxX21hcFtkLT5pcnFdLmh3aXJxKTsKKwlzdHJ1Y3Qgc3BpZGVyX3BpYyAqcGljID0gc3BpZGVyX2lycV9kYXRhX3RvX3BpYyhkKTsKKwl2b2lkIF9faW9tZW0gKmNmZyA9IHNwaWRlcl9nZXRfaXJxX2NvbmZpZyhwaWMsIGlycWRfdG9faHdpcnEoZCkpOwogCiAJb3V0X2JlMzIoY2ZnLCBpbl9iZTMyKGNmZykgJiB+MHgzMDAwMDAwMHUpOwogfQogCiBzdGF0aWMgdm9pZCBzcGlkZXJfYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IHNwaWRlcl9waWMgKnBpYyA9IHNwaWRlcl92aXJxX3RvX3BpYyhkLT5pcnEpOwotCXVuc2lnbmVkIGludCBzcmMgPSBpcnFfbWFwW2QtPmlycV0uaHdpcnE7CisJc3RydWN0IHNwaWRlcl9waWMgKnBpYyA9IHNwaWRlcl9pcnFfZGF0YV90b19waWMoZCk7CisJdW5zaWduZWQgaW50IHNyYyA9IGlycWRfdG9faHdpcnEoZCk7CiAKIAkvKiBSZXNldCBlZGdlIGRldGVjdGlvbiBsb2dpYyBpZiBuZWNlc3NhcnkKIAkgKi8KQEAgLTExNiw4ICsxMTYsOCBAQAogc3RhdGljIGludCBzcGlkZXJfc2V0X2lycV90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgaW50IHR5cGUpCiB7CiAJdW5zaWduZWQgaW50IHNlbnNlID0gdHlwZSAmIElSUV9UWVBFX1NFTlNFX01BU0s7Ci0Jc3RydWN0IHNwaWRlcl9waWMgKnBpYyA9IHNwaWRlcl92aXJxX3RvX3BpYyhkLT5pcnEpOwotCXVuc2lnbmVkIGludCBodyA9IGlycV9tYXBbZC0+aXJxXS5od2lycTsKKwlzdHJ1Y3Qgc3BpZGVyX3BpYyAqcGljID0gc3BpZGVyX2lycV9kYXRhX3RvX3BpYyhkKTsKKwl1bnNpZ25lZCBpbnQgaHcgPSBpcnFkX3RvX2h3aXJxKGQpOwogCXZvaWQgX19pb21lbSAqY2ZnID0gc3BpZGVyX2dldF9pcnFfY29uZmlnKHBpYywgaHcpOwogCXUzMiBvbGRfbWFzazsKIAl1MzIgaWM7CkBAIC0xNzEsNiArMTcxLDcgQEAKIHN0YXRpYyBpbnQgc3BpZGVyX2hvc3RfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCiAJCQlpcnFfaHdfbnVtYmVyX3QgaHcpCiB7CisJaXJxX3NldF9jaGlwX2RhdGEodmlycSwgaC0+aG9zdF9kYXRhKTsKIAlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIodmlycSwgJnNwaWRlcl9waWMsIGhhbmRsZV9sZXZlbF9pcnEpOwogCiAJLyogU2V0IGRlZmF1bHQgaXJxIHR5cGUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfYmFzZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9iYXNlLmMKaW5kZXggYWNmYWNjZS4uMzY3NWRhNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9iYXNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9iYXNlLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbGludXhfbG9nby5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8YXNtL3NwdS5oPgogI2luY2x1ZGUgPGFzbS9zcHVfcHJpdjEuaD4KICNpbmNsdWRlIDxhc20vc3B1X2NzYS5oPgpAQCAtNTIxLDE4ICs1MjIsOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3B1X2luaXRfY2hhbm5lbHMpOwogCi1zdGF0aWMgaW50IHNwdV9zaHV0ZG93bihzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KQotewotCXN0cnVjdCBzcHUgKnNwdSA9IGNvbnRhaW5lcl9vZihzeXNkZXYsIHN0cnVjdCBzcHUsIHN5c2Rldik7Ci0KLQlzcHVfZnJlZV9pcnFzKHNwdSk7Ci0Jc3B1X2Rlc3Ryb3lfc3B1KHNwdSk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHNwdV9zeXNkZXZfY2xhc3MgPSB7CiAJLm5hbWUgPSAic3B1IiwKLQkuc2h1dGRvd24gPSBzcHVfc2h1dGRvd24sCiB9OwogCiBpbnQgc3B1X2FkZF9zeXNkZXZfYXR0cihzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0cikKQEAgLTc5Nyw2ICs3ODgsMjIgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgdm9pZCBzcHVfc2h1dGRvd24odm9pZCkKK3sKKwlzdHJ1Y3Qgc3B1ICpzcHU7CisKKwltdXRleF9sb2NrKCZzcHVfZnVsbF9saXN0X211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNwdSwgJnNwdV9mdWxsX2xpc3QsIGZ1bGxfbGlzdCkgeworCQlzcHVfZnJlZV9pcnFzKHNwdSk7CisJCXNwdV9kZXN0cm95X3NwdShzcHUpOworCX0KKwltdXRleF91bmxvY2soJnNwdV9mdWxsX2xpc3RfbXV0ZXgpOworfQorCitzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIHNwdV9zeXNjb3JlX29wcyA9IHsKKwkuc2h1dGRvd24gPSBzcHVfc2h1dGRvd24sCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X3NwdV9iYXNlKHZvaWQpCiB7CiAJaW50IGksIHJldCA9IDA7CkBAIC04MzAsNiArODM3LDcgQEAKIAljcmFzaF9yZWdpc3Rlcl9zcHVzKCZzcHVfZnVsbF9saXN0KTsKIAltdXRleF91bmxvY2soJnNwdV9mdWxsX2xpc3RfbXV0ZXgpOwogCXNwdV9hZGRfc3lzZGV2X2F0dHIoJmF0dHJfc3RhdCk7CisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnNwdV9zeXNjb3JlX29wcyk7CiAKIAlzcHVfaW5pdF9hZmZpbml0eSgpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc2NoZWQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zY2hlZC5jCmluZGV4IDY1MjAzODUuLjMyY2I0ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zY2hlZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zY2hlZC5jCkBAIC0xNDEsNyArMTQxLDcgQEAKIAkgKiBydW5xdWV1ZS4gVGhlIGNvbnRleHQgd2lsbCBiZSByZXNjaGVkdWxlZCBvbiB0aGUgcHJvcGVyIG5vZGUKIAkgKiBpZiBpdCBpcyB0aW1lc2xpY2VkIG9yIHByZWVtcHRlZC4KIAkgKi8KLQljdHgtPmNwdXNfYWxsb3dlZCA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKKwljcHVtYXNrX2NvcHkoJmN0eC0+Y3B1c19hbGxvd2VkLCB0c2tfY3B1c19hbGxvd2VkKGN1cnJlbnQpKTsKIAogCS8qIFNhdmUgdGhlIGN1cnJlbnQgY3B1IGlkIGZvciBzcHUgaW50ZXJydXB0IHJvdXRpbmcuICovCiAJY3R4LT5sYXN0X3JhbiA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc21wLmMKaW5kZXggMDJjYWZlYy4uYTgwMDEyMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zbXAuYwpAQCAtMzAsMTAgKzMwLDEyIEBACiAjaW5jbHVkZSA8YXNtL21waWMuaD4KICNpbmNsdWRlIDxhc20vcnRhcy5oPgogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgc21wX2NocnBfa2lja19jcHUoaW50IG5yKQorc3RhdGljIGludCBfX2RldmluaXQgc21wX2NocnBfa2lja19jcHUoaW50IG5yKQogewogCSoodW5zaWduZWQgbG9uZyAqKUtFUk5FTEJBU0UgPSBucjsKIAlhc20gdm9sYXRpbGUoImRjYmYgMCwlMCI6OiJyIihLRVJORUxCQVNFKToibWVtb3J5Iik7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZpbml0IHNtcF9jaHJwX3NldHVwX2NwdShpbnQgY3B1X25yKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9mbGlwcGVyLXBpYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9mbGlwcGVyLXBpYy5jCmluZGV4IDEyYWE2MmIuLmY2MWEyZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvZmxpcHBlci1waWMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2ZsaXBwZXItcGljLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogc3RhdGljIHZvaWQgZmxpcHBlcl9waWNfbWFza19hbmRfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgaXJxID0gdmlycV90b19odyhkLT5pcnEpOworCWludCBpcnEgPSBpcnFkX3RvX2h3aXJxKGQpOwogCXZvaWQgX19pb21lbSAqaW9fYmFzZSA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCXUzMiBtYXNrID0gMSA8PCBpcnE7CiAKQEAgLTU5LDcgKzU5LDcgQEAKIAogc3RhdGljIHZvaWQgZmxpcHBlcl9waWNfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgaXJxID0gdmlycV90b19odyhkLT5pcnEpOworCWludCBpcnEgPSBpcnFkX3RvX2h3aXJxKGQpOwogCXZvaWQgX19pb21lbSAqaW9fYmFzZSA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCiAJLyogdGhpcyBpcyBhdCBsZWFzdCBuZWVkZWQgZm9yIFJTVyAqLwpAQCAtNjgsNyArNjgsNyBAQAogCiBzdGF0aWMgdm9pZCBmbGlwcGVyX3BpY19tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgaXJxID0gdmlycV90b19odyhkLT5pcnEpOworCWludCBpcnEgPSBpcnFkX3RvX2h3aXJxKGQpOwogCXZvaWQgX19pb21lbSAqaW9fYmFzZSA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCiAJY2xyYml0czMyKGlvX2Jhc2UgKyBGTElQUEVSX0lNUiwgMSA8PCBpcnEpOwpAQCAtNzYsNyArNzYsNyBAQAogCiBzdGF0aWMgdm9pZCBmbGlwcGVyX3BpY191bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBpcnEgPSB2aXJxX3RvX2h3KGQtPmlycSk7CisJaW50IGlycSA9IGlycWRfdG9faHdpcnEoZCk7CiAJdm9pZCBfX2lvbWVtICppb19iYXNlID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAKIAlzZXRiaXRzMzIoaW9fYmFzZSArIEZMSVBQRVJfSU1SLCAxIDw8IGlycSk7CkBAIC0xMDcsMTIgKzEwNyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGZsaXBwZXJfcGljX3VubWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IGlycSkKLXsKLQlpcnFfc2V0X2NoaXBfZGF0YShpcnEsIE5VTEwpOwotCWlycV9zZXRfY2hpcChpcnEsIE5VTEwpOwotfQotCiBzdGF0aWMgaW50IGZsaXBwZXJfcGljX21hdGNoKHN0cnVjdCBpcnFfaG9zdCAqaCwgc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKIAlyZXR1cm4gMTsKQEAgLTEyMSw3ICsxMTUsNiBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9ob3N0X29wcyBmbGlwcGVyX2lycV9ob3N0X29wcyA9IHsKIAkubWFwID0gZmxpcHBlcl9waWNfbWFwLAotCS51bm1hcCA9IGZsaXBwZXJfcGljX3VubWFwLAogCS5tYXRjaCA9IGZsaXBwZXJfcGljX21hdGNoLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9obHdkLXBpYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9obHdkLXBpYy5jCmluZGV4IDJiZGRkZmMuLmU0OTE5MTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvaGx3ZC1waWMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L2hsd2QtcGljLmMKQEAgLTQzLDcgKzQzLDcgQEAKIAogc3RhdGljIHZvaWQgaGx3ZF9waWNfbWFza19hbmRfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgaXJxID0gdmlycV90b19odyhkLT5pcnEpOworCWludCBpcnEgPSBpcnFkX3RvX2h3aXJxKGQpOwogCXZvaWQgX19pb21lbSAqaW9fYmFzZSA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCXUzMiBtYXNrID0gMSA8PCBpcnE7CiAKQEAgLTUzLDcgKzUzLDcgQEAKIAogc3RhdGljIHZvaWQgaGx3ZF9waWNfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgaXJxID0gdmlycV90b19odyhkLT5pcnEpOworCWludCBpcnEgPSBpcnFkX3RvX2h3aXJxKGQpOwogCXZvaWQgX19pb21lbSAqaW9fYmFzZSA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCiAJb3V0X2JlMzIoaW9fYmFzZSArIEhXX0JST0FEV0FZX0lDUiwgMSA8PCBpcnEpOwpAQCAtNjEsNyArNjEsNyBAQAogCiBzdGF0aWMgdm9pZCBobHdkX3BpY19tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgaXJxID0gdmlycV90b19odyhkLT5pcnEpOworCWludCBpcnEgPSBpcnFkX3RvX2h3aXJxKGQpOwogCXZvaWQgX19pb21lbSAqaW9fYmFzZSA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCiAJY2xyYml0czMyKGlvX2Jhc2UgKyBIV19CUk9BRFdBWV9JTVIsIDEgPDwgaXJxKTsKQEAgLTY5LDcgKzY5LDcgQEAKIAogc3RhdGljIHZvaWQgaGx3ZF9waWNfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgaXJxID0gdmlycV90b19odyhkLT5pcnEpOworCWludCBpcnEgPSBpcnFkX3RvX2h3aXJxKGQpOwogCXZvaWQgX19pb21lbSAqaW9fYmFzZSA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCiAJc2V0Yml0czMyKGlvX2Jhc2UgKyBIV19CUk9BRFdBWV9JTVIsIDEgPDwgaXJxKTsKQEAgLTEwMCwxNSArMTAwLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaGx3ZF9waWNfdW5tYXAoc3RydWN0IGlycV9ob3N0ICpoLCB1bnNpZ25lZCBpbnQgaXJxKQotewotCWlycV9zZXRfY2hpcF9kYXRhKGlycSwgTlVMTCk7Ci0JaXJxX3NldF9jaGlwKGlycSwgTlVMTCk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgaXJxX2hvc3Rfb3BzIGhsd2RfaXJxX2hvc3Rfb3BzID0gewogCS5tYXAgPSBobHdkX3BpY19tYXAsCi0JLnVubWFwID0gaGx3ZF9waWNfdW5tYXAsCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgaW50IF9faGx3ZF9waWNfZ2V0X2lycShzdHJ1Y3QgaXJxX2hvc3QgKmgpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9LY29uZmlnCmluZGV4IGU1YmM5ZjcuLmI1N2NkYTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9LY29uZmlnCkBAIC0xLDcgKzEsOSBAQAogY29uZmlnIFBQQ19JU0VSSUVTCiAJYm9vbCAiSUJNIExlZ2FjeSBpU2VyaWVzIgogCWRlcGVuZHMgb24gUFBDNjQgJiYgUFBDX0JPT0szUwotCXNlbGVjdCBQUENfSU5ESVJFQ1RfSU8KKwlzZWxlY3QgUFBDX1NNUF9NVVhFRF9JUEkKKwlzZWxlY3QgUFBDX0lORElSRUNUX1BJTworCXNlbGVjdCBQUENfSU5ESVJFQ1RfTU1JTwogCXNlbGVjdCBQUENfUENJX0NIT0lDRSBpZiBFWFBFUlQKIAogbWVudSAiaVNlcmllcyBkZXZpY2UgZHJpdmVycyIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9leGNlcHRpb24uUyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9leGNlcHRpb24uUwppbmRleCAzMmE1NmM2Li4yOWMwMmYzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvZXhjZXB0aW9uLlMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2V4Y2VwdGlvbi5TCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9tbXUuaD4KIAogI2luY2x1ZGUgImV4Y2VwdGlvbi5oIgogCkBAIC02MCwyOSArNjEsMzEgQEAKIC8qIFNwaW4gb24gX19zZWNvbmRhcnlfaG9sZF9zcGlubG9vcCB1bnRpbCBpdCBpcyB1cGRhdGVkIGJ5IHRoZSBib290IGNwdS4gKi8KIC8qIEluIHRoZSBVUCBjYXNlIHdlJ2xsIHlpZWxkKCkgbGF0ZXIsIGFuZCB3ZSB3aWxsIG5vdCBhY2Nlc3MgdGhlIHBhY2EgYW55d2F5ICovCiAjaWZkZWYgQ09ORklHX1NNUAotMToKK2lTZXJpZXNfc2Vjb25kYXJ5X3dhaXRfcGFjYToKIAlITVRfTE9XCiAJTE9BRF9SRUdfQUREUihyMjMsIF9fc2Vjb25kYXJ5X2hvbGRfc3Bpbmxvb3ApCiAJbGQJcjIzLDAocjIzKQotCXN5bmMKLQlMT0FEX1JFR19BRERSKHIzLGN1cnJlbnRfc2V0KQotCXNsZGkJcjI4LHIyNCwzCQkvKiBnZXQgY3VycmVudF9zZXRbY3B1I10gKi8KLQlsZHgJcjMscjMscjI4Ci0JYWRkaQlyMSxyMyxUSFJFQURfU0laRQotCXN1YmkJcjEscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKIAotCWNtcHdpCTAscjIzLDAJCQkvKiBLZWVwIHBva2luZyB0aGUgSHlwZXJ2aXNvciB1bnRpbCAqLwotCWJuZQkyZgkJCS8qIHdlJ3JlIHJlbGVhc2VkICovCi0JLyogTGV0IHRoZSBIeXBlcnZpc29yIGtub3cgd2UgYXJlIGFsaXZlICovCisJY21wZGkJMCxyMjMsMAorCWJuZQkyZgkJCS8qIGdvIG9uIHdoZW4gdGhlIG1hc3RlciBpcyByZWFkeSAqLworCisJLyogS2VlcCBwb2tpbmcgdGhlIEh5cGVydmlzb3IgdW50aWwgd2UncmUgcmVsZWFzZWQgKi8KIAkvKiA4MDAyIGlzIGEgY2FsbCB0byBIdkNhbGxDZmc6OmdldExwcywgYSBoYXJtbGVzcyBIeXBlcnZpc29yIGZ1bmN0aW9uICovCiAJbGlzCXIzLDB4ODAwMgogCXJsZGljcglyMyxyMywzMiwxNQkJLyogcjAgPSAocjMgPDwgMzIpICYgMHhmZmZmMDAwMDAwMDAwMDAwICovCiAJbGkJcjAsLTEJCQkvKiByMD0tMSBpbmRpY2F0ZXMgYSBIeXBlcnZpc29yIGNhbGwgKi8KIAlzYwkJCQkvKiBJbnZva2UgdGhlIGh5cGVydmlzb3IgdmlhIGEgc3lzdGVtIGNhbGwgKi8KLQliCTFiCi0jZW5kaWYKKwliCWlTZXJpZXNfc2Vjb25kYXJ5X3dhaXRfcGFjYQogCiAyOgorCUhNVF9NRURJVU0KKwlzeW5jCisKKwlMT0FEX1JFR19BRERSKHIzLCBucl9jcHVfaWRzKQkvKiBnZXQgbnVtYmVyIG9mIHBhY2FzIGFsbG9jYXRlZCAqLworCWx3eglyMywwKHIzKQkJLyogbnJfY3B1cz0gb3IgTlJfQ1BVUyBjYW4gbGltaXQgKi8KKwljbXBsZAkwLHIyNCxyMwkJLyogaXMgb3VyIGNwdSBudW1iZXIgYWxsb2NhdGVkPyAqLworCWJnZQlpU2VyaWVzX3NlY29uZGFyeV95aWVsZAkvKiBubywgeWllbGQgZm9yZXZlciAqLworCiAJLyogTG9hZCBvdXIgcGFjYSBub3cgdGhhdCBpdCdzIGJlZW4gYWxsb2NhdGVkICovCiAJTE9BRF9SRUdfQUREUihyMTMsIHBhY2EpCiAJbGQJcjEzLDAocjEzKQpAQCAtOTMsMTAgKzk2LDI0IEBACiAJb3JpCXIyMyxyMjMsTVNSX1JJCiAJbXRtc3JkCXIyMwkJCS8qIFJJIG9uICovCiAKLQlITVRfTE9XCi0jaWZkZWYgQ09ORklHX1NNUAoraVNlcmllc19zZWNvbmRhcnlfc21wX2xvb3A6CiAJbGJ6CXIyMyxQQUNBUFJPQ1NUQVJUKHIxMykJLyogVGVzdCBpZiB0aGlzIHByb2Nlc3NvcgogCQkJCQkgKiBzaG91bGQgc3RhcnQgKi8KKwljbXB3aQkwLHIyMywwCisJYm5lCTNmCQkJLyogZ28gb24gd2hlbiB3ZSBhcmUgdG9sZCAqLworCisJSE1UX0xPVworCS8qIExldCB0aGUgSHlwZXJ2aXNvciBrbm93IHdlIGFyZSBhbGl2ZSAqLworCS8qIDgwMDIgaXMgYSBjYWxsIHRvIEh2Q2FsbENmZzo6Z2V0THBzLCBhIGhhcm1sZXNzIEh5cGVydmlzb3IgZnVuY3Rpb24gKi8KKwlsaXMJcjMsMHg4MDAyCisJcmxkaWNyCXIzLHIzLDMyLDE1CQkvKiByMCA9IChyMyA8PCAzMikgJiAweGZmZmYwMDAwMDAwMDAwMDAgKi8KKwlsaQlyMCwtMQkJCS8qIHIwPS0xIGluZGljYXRlcyBhIEh5cGVydmlzb3IgY2FsbCAqLworCXNjCQkJCS8qIEludm9rZSB0aGUgaHlwZXJ2aXNvciB2aWEgYSBzeXN0ZW0gY2FsbCAqLworCW1mc3ByCXIxMyxTUFJOX1NQUkdfUEFDQQkvKiBQdXQgcjEzIGJhY2sgPz8/PyAqLworCWIJaVNlcmllc19zZWNvbmRhcnlfc21wX2xvb3AgLyogd2FpdCBmb3Igc2lnbmFsIHRvIHN0YXJ0ICovCisKKzM6CisJSE1UX01FRElVTQogCXN5bmMKIAlMT0FEX1JFR19BRERSKHIzLGN1cnJlbnRfc2V0KQogCXNsZGkJcjI4LHIyNCwzCQkvKiBnZXQgY3VycmVudF9zZXRbY3B1I10gKi8KQEAgLTEwNCwyNyArMTIxLDIyIEBACiAJYWRkaQlyMSxyMyxUSFJFQURfU0laRQogCXN1YmkJcjEscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKIAotCWNtcHdpCTAscjIzLDAKLQliZXEJaVNlcmllc19zZWNvbmRhcnlfc21wX2xvb3AJLyogTG9vcCB1bnRpbCB0b2xkIHRvIGdvICovCiAJYglfX3NlY29uZGFyeV9zdGFydAkJLyogTG9vcCB1bnRpbCB0b2xkIHRvIGdvICovCi1pU2VyaWVzX3NlY29uZGFyeV9zbXBfbG9vcDoKLQkvKiBMZXQgdGhlIEh5cGVydmlzb3Iga25vdyB3ZSBhcmUgYWxpdmUgKi8KLQkvKiA4MDAyIGlzIGEgY2FsbCB0byBIdkNhbGxDZmc6OmdldExwcywgYSBoYXJtbGVzcyBIeXBlcnZpc29yIGZ1bmN0aW9uICovCi0JbGlzCXIzLDB4ODAwMgotCXJsZGljcglyMyxyMywzMiwxNQkJLyogcjAgPSAocjMgPDwgMzIpICYgMHhmZmZmMDAwMDAwMDAwMDAwICovCi0jZWxzZSAvKiBDT05GSUdfU01QICovCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCitpU2VyaWVzX3NlY29uZGFyeV95aWVsZDoKIAkvKiBZaWVsZCB0aGUgcHJvY2Vzc29yLiAgVGhpcyBpcyByZXF1aXJlZCBmb3Igbm9uLVNNUCBrZXJuZWxzCiAJCXdoaWNoIGFyZSBydW5uaW5nIG9uIG11bHRpLXRocmVhZGVkIG1hY2hpbmVzLiAqLworCUhNVF9MT1cKIAlsaXMJcjMsMHg4MDAwCiAJcmxkaWNyCXIzLHIzLDMyLDE1CQkvKiByMyA9IChyMyA8PCAzMikgJiAweGZmZmYwMDAwMDAwMDAwMDAgKi8KIAlhZGRpCXIzLHIzLDE4CQkvKiByMyA9IDB4ODAwMDAwMDAwMDAwMDAxMiB3aGljaCBpcyAieWllbGQiICovCiAJbGkJcjQsMAkJCS8qICJ5aWVsZCB0aW1lZCIgKi8KIAlsaQlyNSwtMQkJCS8qICJ5aWVsZCBmb3JldmVyIiAqLwotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAlsaQlyMCwtMQkJCS8qIHIwPS0xIGluZGljYXRlcyBhIEh5cGVydmlzb3IgY2FsbCAqLwogCXNjCQkJCS8qIEludm9rZSB0aGUgaHlwZXJ2aXNvciB2aWEgYSBzeXN0ZW0gY2FsbCAqLwogCW1mc3ByCXIxMyxTUFJOX1NQUkdfUEFDQQkvKiBQdXQgcjEzIGJhY2sgPz8/PyAqLwotCWIJMmIJCQkvKiBJZiBTTVAgbm90IGNvbmZpZ3VyZWQsIHNlY29uZGFyaWVzCisJYglpU2VyaWVzX3NlY29uZGFyeV95aWVsZAkvKiBJZiBTTVAgbm90IGNvbmZpZ3VyZWQsIHNlY29uZGFyaWVzCiAJCQkJCSAqIGxvb3AgZm9yZXZlciAqLwogCiAvKioqICBJU2VyaWVzLUxQQVIgaW50ZXJydXB0IGhhbmRsZXJzICoqKi8KQEAgLTE1Nyw3ICsxNjksNyBAQAogRlRSX1NFQ1RJT05fRUxTRQogCUVYQ0VQVElPTl9QUk9MT0dfMShQQUNBX0VYR0VOKQogCUVYQ0VQVElPTl9QUk9MT0dfSVNFUklFU18xCi1BTFRfRlRSX1NFQ1RJT05fRU5EX0lGQ0xSKENQVV9GVFJfU0xCKQorQUxUX01NVV9GVFJfU0VDVElPTl9FTkRfSUZDTFIoTU1VX0ZUUl9TTEIpCiAJYglkYXRhX2FjY2Vzc19jb21tb24KIAogLmRvX3N0YWJfYm9sdGVkX2lTZXJpZXM6CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXJxLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXJxLmMKaW5kZXggNTJhNjg4OS4uYjIxMDM0NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lycS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pcnEuYwpAQCAtNDIsNyArNDIsNiBAQAogI2luY2x1ZGUgImlycS5oIgogI2luY2x1ZGUgInBjaS5oIgogI2luY2x1ZGUgImNhbGxfcGNpLmgiCi0jaW5jbHVkZSAic21wLmgiCiAKICNpZmRlZiBDT05GSUdfUENJCiAKQEAgLTE3MSw3ICsxNzAsNyBAQAogewogCXUzMiBidXMsIGRldl9pZCwgZnVuY3Rpb24sIG1hc2s7CiAJY29uc3QgdTMyIHN1Yl9idXMgPSAwOwotCXVuc2lnbmVkIGludCByaXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW2QtPmlycV0uaHdpcnE7CisJdW5zaWduZWQgaW50IHJpcnEgPSAodW5zaWduZWQgaW50KWlycWRfdG9faHdpcnEoZCk7CiAKIAkvKiBUaGUgSVJRIGhhcyBhbHJlYWR5IGJlZW4gbG9ja2VkIGJ5IHRoZSBjYWxsZXIgKi8KIAlidXMgPSBSRUFMX0lSUV9UT19CVVMocmlycSk7CkBAIC0xODgsNyArMTg3LDcgQEAKIHsKIAl1MzIgYnVzLCBkZXZfaWQsIGZ1bmN0aW9uLCBtYXNrOwogCWNvbnN0IHUzMiBzdWJfYnVzID0gMDsKLQl1bnNpZ25lZCBpbnQgcmlycSA9ICh1bnNpZ25lZCBpbnQpaXJxX21hcFtkLT5pcnFdLmh3aXJxOworCXVuc2lnbmVkIGludCByaXJxID0gKHVuc2lnbmVkIGludClpcnFkX3RvX2h3aXJxKGQpOwogCiAJYnVzID0gUkVBTF9JUlFfVE9fQlVTKHJpcnEpOwogCWZ1bmN0aW9uID0gUkVBTF9JUlFfVE9fRlVOQyhyaXJxKTsKQEAgLTIzNCw3ICsyMzMsNyBAQAogewogCXUzMiBidXMsIGRldl9pZCwgZnVuY3Rpb24sIG1hc2s7CiAJY29uc3QgdTMyIHN1Yl9idXMgPSAwOwotCXVuc2lnbmVkIGludCByaXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW2QtPmlycV0uaHdpcnE7CisJdW5zaWduZWQgaW50IHJpcnEgPSAodW5zaWduZWQgaW50KWlycWRfdG9faHdpcnEoZCk7CiAKIAkvKiBpcnEgc2hvdWxkIGJlIGxvY2tlZCBieSB0aGUgY2FsbGVyICovCiAJYnVzID0gUkVBTF9JUlFfVE9fQlVTKHJpcnEpOwpAQCAtMjU3LDcgKzI1Niw3IEBACiB7CiAJdTMyIGJ1cywgZGV2X2lkLCBmdW5jdGlvbiwgbWFzazsKIAljb25zdCB1MzIgc3ViX2J1cyA9IDA7Ci0JdW5zaWduZWQgaW50IHJpcnEgPSAodW5zaWduZWQgaW50KWlycV9tYXBbZC0+aXJxXS5od2lycTsKKwl1bnNpZ25lZCBpbnQgcmlycSA9ICh1bnNpZ25lZCBpbnQpaXJxZF90b19od2lycShkKTsKIAogCS8qIFRoZSBJUlEgaGFzIGFscmVhZHkgYmVlbiBsb2NrZWQgYnkgdGhlIGNhbGxlciAqLwogCWJ1cyA9IFJFQUxfSVJRX1RPX0JVUyhyaXJxKTsKQEAgLTI3MSw3ICsyNzAsNyBAQAogCiBzdGF0aWMgdm9pZCBpc2VyaWVzX2VuZF9JUlEoc3RydWN0IGlycV9kYXRhICpkKQogewotCXVuc2lnbmVkIGludCByaXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW2QtPmlycV0uaHdpcnE7CisJdW5zaWduZWQgaW50IHJpcnEgPSAodW5zaWduZWQgaW50KWlycWRfdG9faHdpcnEoZCk7CiAKIAlIdkNhbGxQY2lfZW9pKFJFQUxfSVJRX1RPX0JVUyhyaXJxKSwgUkVBTF9JUlFfVE9fU1VCQlVTKHJpcnEpLAogCQkoUkVBTF9JUlFfVE9fSURTRUwocmlycSkgPDwgNCkgKyBSRUFMX0lSUV9UT19GVU5DKHJpcnEpKTsKQEAgLTMxNiw3ICszMTUsNyBAQAogI2lmZGVmIENPTkZJR19TTVAKIAlpZiAoZ2V0X2xwcGFjYSgpLT5pbnRfZHdvcmQuZmllbGRzLmlwaV9jbnQpIHsKIAkJZ2V0X2xwcGFjYSgpLT5pbnRfZHdvcmQuZmllbGRzLmlwaV9jbnQgPSAwOwotCQlpU2VyaWVzX3NtcF9tZXNzYWdlX3JlY3YoKTsKKwkJc21wX2lwaV9kZW11eCgpOwogCX0KICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAJaWYgKGh2bHBldmVudF9pc19wZW5kaW5nKCkpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCmluZGV4IDI5NDZhZTEuLmMyNWEwODEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCkBAIC0yNDksNyArMjQ5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGk7CiAJdW5zaWduZWQgbG9uZyBtZW1fYmxvY2tzID0gMDsKIAotCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9TTEIpKQorCWlmIChtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl9TTEIpKQogCQltZW1fYmxvY2tzID0gaVNlcmllc19wcm9jZXNzX1JlZ2F0dGFfbWFpbnN0b3JlX3ZwZChtYl9hcnJheSwKIAkJCQltYXhfZW50cmllcyk7CiAJZWxzZQpAQCAtNjM0LDcgKzYzNCw3IEBACiAKIAlocHRlX2luaXRfaVNlcmllcygpOwogCS8qIGlTZXJpZXMgZG9lcyBub3Qgc3VwcG9ydCAxNk0gcGFnZXMgKi8KLQljdXJfY3B1X3NwZWMtPmNwdV9mZWF0dXJlcyAmPSB+Q1BVX0ZUUl8xNk1fUEFHRTsKKwljdXJfY3B1X3NwZWMtPm1tdV9mZWF0dXJlcyAmPSB+TU1VX0ZUUl8xNk1fUEFHRTsKIAogCXJldHVybiAxOwogfQpAQCAtNjg1LDYgKzY4NSwxMSBAQAogCXBvd2VycGNfZmlybXdhcmVfZmVhdHVyZXMgfD0gRldfRkVBVFVSRV9JU0VSSUVTOwogCXBvd2VycGNfZmlybXdhcmVfZmVhdHVyZXMgfD0gRldfRkVBVFVSRV9MUEFSOwogCisjaWZkZWYgQ09ORklHX1NNUAorCS8qIE9uIGlTZXJpZXMgd2Uga25vdyB3ZSBjYW4gbmV2ZXIgaGF2ZSBtb3JlIHRoYW4gNjQgY3B1cyAqLworCW5yX2NwdV9pZHMgPSBtYXgobnJfY3B1X2lkcywgNjQpOworI2VuZGlmCisKIAlpU2VyaWVzX2ZpeHVwX2tsaW1pdCgpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zbXAuYwppbmRleCA2YzYwMjk5Li5lMzI2NWFkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NtcC5jCkBAIC00Miw1NyArNDIsMjMgQEAKICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKLSNpbmNsdWRlICJzbXAuaCIKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgaVNlcmllc19zbXBfbWVzc2FnZVtOUl9DUFVTXTsKLQotdm9pZCBpU2VyaWVzX3NtcF9tZXNzYWdlX3JlY3Yodm9pZCkKK3N0YXRpYyB2b2lkIHNtcF9pU2VyaWVzX2NhdXNlX2lwaShpbnQgY3B1LCB1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlpbnQgbXNnOwotCi0JaWYgKG51bV9vbmxpbmVfY3B1cygpIDwgMikKLQkJcmV0dXJuOwotCi0JZm9yIChtc2cgPSAwOyBtc2cgPCA0OyBtc2crKykKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChtc2csICZpU2VyaWVzX3NtcF9tZXNzYWdlW2NwdV0pKQotCQkJc21wX21lc3NhZ2VfcmVjdihtc2cpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc21wX2lTZXJpZXNfZG9fbWVzc2FnZShpbnQgY3B1LCBpbnQgbXNnKQotewotCXNldF9iaXQobXNnLCAmaVNlcmllc19zbXBfbWVzc2FnZVtjcHVdKTsKIAlIdkNhbGxfc2VuZElQSSgmKHBhY2FbY3B1XSkpOwogfQogCi1zdGF0aWMgdm9pZCBzbXBfaVNlcmllc19tZXNzYWdlX3Bhc3MoaW50IHRhcmdldCwgaW50IG1zZykKLXsKLQlpbnQgaTsKLQotCWlmICh0YXJnZXQgPCBOUl9DUFVTKQotCQlzbXBfaVNlcmllc19kb19tZXNzYWdlKHRhcmdldCwgbXNnKTsKLQllbHNlIHsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7Ci0JCQlpZiAoKHRhcmdldCA9PSBNU0dfQUxMX0JVVF9TRUxGKSAmJgotCQkJCQkoaSA9PSBzbXBfcHJvY2Vzc29yX2lkKCkpKQotCQkJCWNvbnRpbnVlOwotCQkJc21wX2lTZXJpZXNfZG9fbWVzc2FnZShpLCBtc2cpOwotCQl9Ci0JfQotfQotCiBzdGF0aWMgaW50IHNtcF9pU2VyaWVzX3Byb2JlKHZvaWQpCiB7CiAJcmV0dXJuIGNwdW1hc2tfd2VpZ2h0KGNwdV9wb3NzaWJsZV9tYXNrKTsKIH0KIAotc3RhdGljIHZvaWQgc21wX2lTZXJpZXNfa2lja19jcHUoaW50IG5yKQorc3RhdGljIGludCBzbXBfaVNlcmllc19raWNrX2NwdShpbnQgbnIpCiB7CiAJQlVHX09OKChuciA8IDApIHx8IChuciA+PSBOUl9DUFVTKSk7CiAKIAkvKiBWZXJpZnkgdGhhdCBvdXIgcGFydGl0aW9uIGhhcyBhIHByb2Nlc3NvciBuciAqLwogCWlmIChscHBhY2Ffb2YobnIpLmR5bl9wcm9jX3N0YXR1cyA+PSAyKQotCQlyZXR1cm47CisJCXJldHVybiAtRU5PRU5UOwogCiAJLyogVGhlIHByb2Nlc3NvciBpcyBjdXJyZW50bHkgc3Bpbm5pbmcsIHdhaXRpbmcKIAkgKiBmb3IgdGhlIGNwdV9zdGFydCBmaWVsZCB0byBiZWNvbWUgbm9uLXplcm8KQEAgLTEwMCw2ICs2Niw4IEBACiAJICogY29udGludWUgb24gdG8gc2Vjb25kYXJ5X3N0YXJ0IGluIGlTZXJpZXNfaGVhZC5TCiAJICovCiAJcGFjYVtucl0uY3B1X3N0YXJ0ID0gMTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgc21wX2lTZXJpZXNfc2V0dXBfY3B1KGludCBucikKQEAgLTEwNyw3ICs3NSw4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc21wX29wc190IGlTZXJpZXNfc21wX29wcyA9IHsKLQkubWVzc2FnZV9wYXNzID0gc21wX2lTZXJpZXNfbWVzc2FnZV9wYXNzLAorCS5tZXNzYWdlX3Bhc3MgPSBzbXBfbXV4ZWRfaXBpX21lc3NhZ2VfcGFzcywKKwkuY2F1c2VfaXBpICAgID0gc21wX2lTZXJpZXNfY2F1c2VfaXBpLAogCS5wcm9iZSAgICAgICAgPSBzbXBfaVNlcmllc19wcm9iZSwKIAkua2lja19jcHUgICAgID0gc21wX2lTZXJpZXNfa2lja19jcHUsCiAJLnNldHVwX2NwdSAgICA9IHNtcF9pU2VyaWVzX3NldHVwX2NwdSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zbXAuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zbXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDUwMWY3ZC4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc21wLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpZm5kZWYgX1BMQVRGT1JNU19JU0VSSUVTX1NNUF9ICi0jZGVmaW5lIF9QTEFURk9STVNfSVNFUklFU19TTVBfSAotCi1leHRlcm4gdm9pZCBpU2VyaWVzX3NtcF9tZXNzYWdlX3JlY3Yodm9pZCk7Ci0KLSNlbmRpZgkvKiBfUExBVEZPUk1TX0lTRVJJRVNfU01QX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvS2NvbmZpZwppbmRleCAxZTFhMDg3Li4xYWZkMTBmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9LY29uZmlnCkBAIC0xOCw0ICsxOCwxMyBAQAogCXNlbGVjdCBQUENfOTcwX05BUAogCWRlZmF1bHQgeQogCi0KK2NvbmZpZyBQUENfUE1BQzMyX1BTVVJHRQorCWJvb2wgIlN1cHBvcnQgZm9yIHBvd2Vyc3VyZ2UgdXBncmFkZSBjYXJkcyIgaWYgRVhQRVJUCisJZGVwZW5kcyBvbiBTTVAgJiYgUFBDMzIgJiYgUFBDX1BNQUMKKwlzZWxlY3QgUFBDX1NNUF9NVVhFRF9JUEkKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGUgcG93ZXJzdXJnZSBjcHUgYm9hcmRzIGNhbiBiZSB1c2VkIGluIHRoZSBnZW5lcmF0aW9uCisJICBvZiBwb3dlcm1hY3MgdGhhdCBoYXZlIGEgc29ja2V0IGZvciBhbiB1cGdyYWRlYWJsZSBjcHUgY2FyZCwKKwkgIGluY2x1ZGluZyB0aGUgNzUwMCwgODUwMCwgOTUwMCwgOTYwMC4gIFN1cHBvcnQgZXhpc3RzIGZvcgorCSAgYm90aCBkdWFsIGFuZCBxdWFkIHNvY2tldCB1cGdyYWRlIGNhcmRzLgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMKaW5kZXggMDIzZjI0MC4uOTA4OWIwNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9hZGIuaD4KICNpbmNsdWRlIDxsaW51eC9wbXUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTg0LDcgKzg0LDcgQEAKIAogc3RhdGljIHZvaWQgcG1hY19tYXNrX2FuZF9hY2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQl1bnNpZ25lZCBpbnQgc3JjID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxOworCXVuc2lnbmVkIGludCBzcmMgPSBpcnFkX3RvX2h3aXJxKGQpOwogICAgICAgICB1bnNpZ25lZCBsb25nIGJpdCA9IDFVTCA8PCAoc3JjICYgMHgxZik7CiAgICAgICAgIGludCBpID0gc3JjID4+IDU7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMDYsNyArMTA2LDcgQEAKIAogc3RhdGljIHZvaWQgcG1hY19hY2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQl1bnNpZ25lZCBpbnQgc3JjID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxOworCXVuc2lnbmVkIGludCBzcmMgPSBpcnFkX3RvX2h3aXJxKGQpOwogICAgICAgICB1bnNpZ25lZCBsb25nIGJpdCA9IDFVTCA8PCAoc3JjICYgMHgxZik7CiAgICAgICAgIGludCBpID0gc3JjID4+IDU7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xNTIsNyArMTUyLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcG1hY19zdGFydHVwX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgc3JjID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxOworCXVuc2lnbmVkIGludCBzcmMgPSBpcnFkX3RvX2h3aXJxKGQpOwogICAgICAgICB1bnNpZ25lZCBsb25nIGJpdCA9IDFVTCA8PCAoc3JjICYgMHgxZik7CiAgICAgICAgIGludCBpID0gc3JjID4+IDU7CiAKQEAgLTE2OSw3ICsxNjksNyBAQAogc3RhdGljIHZvaWQgcG1hY19tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgc3JjID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxOworCXVuc2lnbmVkIGludCBzcmMgPSBpcnFkX3RvX2h3aXJxKGQpOwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiAgICAgICAgIF9fY2xlYXJfYml0KHNyYywgcHBjX2NhY2hlZF9pcnFfbWFzayk7CkBAIC0xODAsNyArMTgwLDcgQEAKIHN0YXRpYyB2b2lkIHBtYWNfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgc3JjID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxOworCXVuc2lnbmVkIGludCBzcmMgPSBpcnFkX3RvX2h3aXJxKGQpOwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7CiAJX19zZXRfYml0KHNyYywgcHBjX2NhY2hlZF9pcnFfbWFzayk7CkBAIC0xOTMsNyArMTkzLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwbWFjX3BpY19sb2NrLCBmbGFncyk7Ci0JX19wbWFjX3JldHJpZ2dlcihpcnFfbWFwW2QtPmlycV0uaHdpcnEpOworCV9fcG1hY19yZXRyaWdnZXIoaXJxZF90b19od2lycShkKSk7CiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMTsKIH0KQEAgLTIzOSwxNSArMjM5LDEyIEBACiAJdW5zaWduZWQgbG9uZyBiaXRzID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0jaWZkZWYgQ09ORklHX1NNUAotCXZvaWQgcHN1cmdlX3NtcF9tZXNzYWdlX3JlY3Yodm9pZCk7Ci0KLSAgICAgICAJLyogSVBJJ3MgYXJlIGEgaGFjayBvbiB0aGUgcG93ZXJzdXJnZSAtLSBDb3J0ICovCi0gICAgICAgCWlmICggc21wX3Byb2Nlc3Nvcl9pZCgpICE9IDAgKSB7Ci0JCXBzdXJnZV9zbXBfbWVzc2FnZV9yZWN2KCk7Ci0JCXJldHVybiBOT19JUlFfSUdOT1JFOwkvKiBpZ25vcmUsIGFscmVhZHkgaGFuZGxlZCAqLworI2lmZGVmIENPTkZJR19QUENfUE1BQzMyX1BTVVJHRQorCS8qIElQSSdzIGFyZSBhIGhhY2sgb24gdGhlIHBvd2Vyc3VyZ2UgLS0gQ29ydCAqLworCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkgIT0gMCkgeworCQlyZXR1cm4gIHBzdXJnZV9zZWNvbmRhcnlfdmlycTsKICAgICAgICAgfQotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKyNlbmRpZiAvKiBDT05GSUdfUFBDX1BNQUMzMl9QU1VSR0UgKi8KIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIAlmb3IgKGlycSA9IG1heF9yZWFsX2lycXM7IChpcnEgLT0gMzIpID49IDA7ICkgewogCQlpbnQgaSA9IGlycSA+PiA1OwpAQCAtNjc3LDcgKzY3NCw3IEBACiAJcmV0dXJuIHZpYWludDsKIH0KIAotc3RhdGljIGludCBwbWFjcGljX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBwbWFjcGljX3N1c3BlbmQodm9pZCkKIHsKIAlpbnQgdmlhaW50ID0gcG1hY3BpY19maW5kX3ZpYWludCgpOwogCkBAIC02OTgsNyArNjk1LDcgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcG1hY3BpY19yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldikKK3N0YXRpYyB2b2lkIHBtYWNwaWNfcmVzdW1lKHZvaWQpCiB7CiAJaW50IGk7CiAKQEAgLTcwOSwzOSArNzA2LDE5IEBACiAJZm9yIChpID0gMDsgaSA8IG1heF9yZWFsX2lycXM7ICsraSkKIAkJaWYgKHRlc3RfYml0KGksIHNsZWVwX3NhdmVfbWFzaykpCiAJCQlwbWFjX3VubWFza19pcnEoaXJxX2dldF9pcnFfZGF0YShpKSk7Ci0KLQlyZXR1cm4gMDsKIH0KIAotI2VuZGlmIC8qIENPTkZJR19QTSAmJiBDT05GSUdfUFBDMzIgKi8KLQotc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgcG1hY3BpY19zeXNjbGFzcyA9IHsKLQkubmFtZSA9ICJwbWFjX3BpYyIsCitzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIHBtYWNwaWNfc3lzY29yZV9vcHMgPSB7CisJLnN1c3BlbmQJPSBwbWFjcGljX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBwbWFjcGljX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBkZXZpY2VfcG1hY3BpYyA9IHsKLQkuaWQJCT0gMCwKLQkuY2xzCQk9ICZwbWFjcGljX3N5c2NsYXNzLAotfTsKLQotc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIGRyaXZlcl9wbWFjcGljID0gewotI2lmIGRlZmluZWQoQ09ORklHX1BNKSAmJiBkZWZpbmVkKENPTkZJR19QUEMzMikKLQkuc3VzcGVuZAk9ICZwbWFjcGljX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSAmcG1hY3BpY19yZXN1bWUsCi0jZW5kaWYgLyogQ09ORklHX1BNICYmIENPTkZJR19QUEMzMiAqLwotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9wbWFjcGljX3N5c2ZzKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3BtYWNwaWNfc3lzY29yZSh2b2lkKQogewotI2lmZGVmIENPTkZJR19QUEMzMgotCWlmIChtYXhfaXJxcyA9PSAwKQotCQlyZXR1cm4gLUVOT0RFVjsKLSNlbmRpZgotCXByaW50ayhLRVJOX0RFQlVHICJSZWdpc3RlcmluZyBwbWFjIHBpYyB3aXRoIHN5c2ZzLi4uXG4iKTsKLQlzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJnBtYWNwaWNfc3lzY2xhc3MpOwotCXN5c2Rldl9yZWdpc3RlcigmZGV2aWNlX3BtYWNwaWMpOwotCXN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnBtYWNwaWNfc3lzY2xhc3MsICZkcml2ZXJfcG1hY3BpYyk7CisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnBtYWNwaWNfc3lzY29yZV9vcHMpOwogCXJldHVybiAwOwogfQotbWFjaGluZV9zdWJzeXNfaW5pdGNhbGwocG93ZXJtYWMsIGluaXRfcG1hY3BpY19zeXNmcyk7CiAKK21hY2hpbmVfc3Vic3lzX2luaXRjYWxsKHBvd2VybWFjLCBpbml0X3BtYWNwaWNfc3lzY29yZSk7CisKKyNlbmRpZiAvKiBDT05GSUdfUE0gJiYgQ09ORklHX1BQQzMyICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYyMmE4My4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotI2lmbmRlZiBfX1BQQ19QTEFURk9STVNfUE1BQ19QSUNfSAotI2RlZmluZSBfX1BQQ19QTEFURk9STVNfUE1BQ19QSUNfSAotCi0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0KLWV4dGVybiBzdHJ1Y3QgaXJxX2NoaXAgcG1hY19waWM7Ci0KLWV4dGVybiB2b2lkIHBtYWNfcGljX2luaXQodm9pZCk7Ci1leHRlcm4gaW50IHBtYWNfZ2V0X2lycSh2b2lkKTsKLQotI2VuZGlmIC8qIF9fUFBDX1BMQVRGT1JNU19QTUFDX1BJQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BtYWMuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcG1hYy5oCmluZGV4IDIwNDY4ZjQuLjgzMjdjY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcG1hYy5oCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcG1hYy5oCkBAIC0zMyw2ICszMyw3IEBACiBleHRlcm4gdm9pZCBwbWFjX2NoZWNrX2h0X2xpbmsodm9pZCk7CiAKIGV4dGVybiB2b2lkIHBtYWNfc2V0dXBfc21wKHZvaWQpOworZXh0ZXJuIGludCBwc3VyZ2Vfc2Vjb25kYXJ5X3ZpcnE7CiBleHRlcm4gdm9pZCBsb3dfY3B1X2RpZSh2b2lkKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOwogCiBleHRlcm4gaW50IHBtYWNfbnZyYW1faW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jCmluZGV4IGJjNWYwZGMuLmRiMDkyZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYwpAQCAtNzAsNyArNzAsNyBAQAogc3RhdGljIHU2NCB0aW1lYmFzZTsKIHN0YXRpYyBpbnQgdGJfcmVxOwogCi0jaWZkZWYgQ09ORklHX1BQQzMyCisjaWZkZWYgQ09ORklHX1BQQ19QTUFDMzJfUFNVUkdFCiAKIC8qCiAgKiBQb3dlcnN1cmdlIChvbGQgcG93ZXJtYWMgU01QKSBzdXBwb3J0LgpAQCAtMTI0LDYgKzEyNCwxMCBAQAogLyogd2hhdCBzb3J0IG9mIHBvd2Vyc3VyZ2UgYm9hcmQgd2UgaGF2ZSAqLwogc3RhdGljIGludCBwc3VyZ2VfdHlwZSA9IFBTVVJHRV9OT05FOwogCisvKiBpcnEgZm9yIHNlY29uZGFyeSBjcHVzIHRvIHJlcG9ydCAqLworc3RhdGljIHN0cnVjdCBpcnFfaG9zdCAqcHN1cmdlX2hvc3Q7CitpbnQgcHN1cmdlX3NlY29uZGFyeV92aXJxOworCiAvKgogICogU2V0IGFuZCBjbGVhciBJUElzIGZvciBwb3dlcnN1cmdlLgogICovCkBAIC0xNTYsNTEgKzE2MCw1MiBAQAogLyoKICAqIE9uIHBvd2Vyc3VyZ2UgKG9sZCBTTVAgcG93ZXJtYWMgYXJjaGl0ZWN0dXJlKSB3ZSBkb24ndCBoYXZlCiAgKiBzZXBhcmF0ZSBJUElzIGZvciBzZXBhcmF0ZSBtZXNzYWdlcyBsaWtlIG9wZW5waWMgZG9lcy4gIEluc3RlYWQKLSAqIHdlIGhhdmUgYSBiaXRtYXAgZm9yIGVhY2ggcHJvY2Vzc29yLCB3aGVyZSBhIDEgYml0IG1lYW5zIHRoYXQKLSAqIHRoZSBjb3JyZXNwb25kaW5nIG1lc3NhZ2UgaXMgcGVuZGluZyBmb3IgdGhhdCBwcm9jZXNzb3IuCi0gKiBJZGVhbGx5IGVhY2ggY3B1J3MgZW50cnkgd291bGQgYmUgaW4gYSBkaWZmZXJlbnQgY2FjaGUgbGluZS4KKyAqIHVzZSB0aGUgZ2VuZXJpYyBkZW11eCBoZWxwZXJzCiAgKiAgLS0gcGF1bHVzLgogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwc3VyZ2Vfc21wX21lc3NhZ2VbTlJfQ1BVU107Ci0KLXZvaWQgcHN1cmdlX3NtcF9tZXNzYWdlX3JlY3Yodm9pZCkKK3N0YXRpYyBpcnFyZXR1cm5fdCBwc3VyZ2VfaXBpX2ludHIoaW50IGlycSwgdm9pZCAqZCkKIHsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWludCBtc2c7CisJcHN1cmdlX2Nscl9pcGkoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlzbXBfaXBpX2RlbXV4KCk7CiAKLQkvKiBjbGVhciBpbnRlcnJ1cHQgKi8KLQlwc3VyZ2VfY2xyX2lwaShjcHUpOwotCi0JaWYgKG51bV9vbmxpbmVfY3B1cygpIDwgMikKLQkJcmV0dXJuOwotCi0JLyogbWFrZSBzdXJlIHRoZXJlIGlzIGEgbWVzc2FnZSB0aGVyZSAqLwotCWZvciAobXNnID0gMDsgbXNnIDwgNDsgbXNnKyspCi0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQobXNnLCAmcHN1cmdlX3NtcF9tZXNzYWdlW2NwdV0pKQotCQkJc21wX21lc3NhZ2VfcmVjdihtc2cpOwotfQotCi1pcnFyZXR1cm5fdCBwc3VyZ2VfcHJpbWFyeV9pbnRyKGludCBpcnEsIHZvaWQgKmQpCi17Ci0JcHN1cmdlX3NtcF9tZXNzYWdlX3JlY3YoKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNtcF9wc3VyZ2VfbWVzc2FnZV9wYXNzKGludCB0YXJnZXQsIGludCBtc2cpCitzdGF0aWMgdm9pZCBzbXBfcHN1cmdlX2NhdXNlX2lwaShpbnQgY3B1LCB1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0JaW50IGk7CisJcHN1cmdlX3NldF9pcGkoY3B1KTsKK30KIAotCWlmIChudW1fb25saW5lX2NwdXMoKSA8IDIpCi0JCXJldHVybjsKK3N0YXRpYyBpbnQgcHN1cmdlX2hvc3RfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCisJCQkgaXJxX2h3X251bWJlcl90IGh3KQoreworCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCAmZHVtbXlfaXJxX2NoaXAsIGhhbmRsZV9wZXJjcHVfaXJxKTsKIAotCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewotCQlpZiAodGFyZ2V0ID09IE1TR19BTEwKLQkJICAgIHx8ICh0YXJnZXQgPT0gTVNHX0FMTF9CVVRfU0VMRiAmJiBpICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkKLQkJICAgIHx8IHRhcmdldCA9PSBpKSB7Ci0JCQlzZXRfYml0KG1zZywgJnBzdXJnZV9zbXBfbWVzc2FnZVtpXSk7Ci0JCQlwc3VyZ2Vfc2V0X2lwaShpKTsKLQkJfQotCX0KKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGlycV9ob3N0X29wcyBwc3VyZ2VfaG9zdF9vcHMgPSB7CisJLm1hcAk9IHBzdXJnZV9ob3N0X21hcCwKK307CisKK3N0YXRpYyBpbnQgcHN1cmdlX3NlY29uZGFyeV9pcGlfaW5pdCh2b2lkKQoreworCWludCByYyA9IC1FTk9NRU07CisKKwlwc3VyZ2VfaG9zdCA9IGlycV9hbGxvY19ob3N0KE5VTEwsIElSUV9IT1NUX01BUF9OT01BUCwgMCwKKwkJJnBzdXJnZV9ob3N0X29wcywgMCk7CisKKwlpZiAocHN1cmdlX2hvc3QpCisJCXBzdXJnZV9zZWNvbmRhcnlfdmlycSA9IGlycV9jcmVhdGVfZGlyZWN0X21hcHBpbmcocHN1cmdlX2hvc3QpOworCisJaWYgKHBzdXJnZV9zZWNvbmRhcnlfdmlycSkKKwkJcmMgPSByZXF1ZXN0X2lycShwc3VyZ2Vfc2Vjb25kYXJ5X3ZpcnEsIHBzdXJnZV9pcGlfaW50ciwKKwkJCUlSUUZfRElTQUJMRUR8SVJRRl9QRVJDUFUsICJJUEkiLCBOVUxMKTsKKworCWlmIChyYykKKwkJcHJfZXJyKCJGYWlsZWQgdG8gc2V0dXAgc2Vjb25kYXJ5IGNwdSBJUElcbiIpOworCisJcmV0dXJuIHJjOwogfQogCiAvKgpAQCAtMzExLDYgKzMxNiw5IEBACiAJCW5jcHVzID0gMjsKIAl9CiAKKwlpZiAocHN1cmdlX3NlY29uZGFyeV9pcGlfaW5pdCgpKQorCQlyZXR1cm4gMTsKKwogCXBzdXJnZV9zdGFydCA9IGlvcmVtYXAoUFNVUkdFX1NUQVJULCA0KTsKIAlwc3VyZ2VfcHJpX2ludHIgPSBpb3JlbWFwKFBTVVJHRV9QUklfSU5UUiwgNCk7CiAKQEAgLTMyOSw3ICszMzcsNyBAQAogCXJldHVybiBuY3B1czsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHNtcF9wc3VyZ2Vfa2lja19jcHUoaW50IG5yKQorc3RhdGljIGludCBfX2luaXQgc21wX3BzdXJnZV9raWNrX2NwdShpbnQgbnIpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IF9fcGEoX19zZWNvbmRhcnlfc3RhcnRfcG1hY18wKSArIG5yICogODsKIAl1bnNpZ25lZCBsb25nIGEsIGZsYWdzOwpAQCAtMzk0LDExICs0MDIsMTMgQEAKIAkJcHN1cmdlX3NldF9pcGkoMSk7CiAKIAlpZiAocHBjX21kLnByb2dyZXNzKSBwcGNfbWQucHJvZ3Jlc3MoInNtcF9wc3VyZ2Vfa2lja19jcHUgLSBkb25lIiwgMHgzNTQpOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHBzdXJnZV9pcnFhY3Rpb24gPSB7Ci0JLmhhbmRsZXIgPSBwc3VyZ2VfcHJpbWFyeV9pbnRyLAotCS5mbGFncyA9IElSUUZfRElTQUJMRUQsCisJLmhhbmRsZXIgPSBwc3VyZ2VfaXBpX2ludHIsCisJLmZsYWdzID0gSVJRRl9ESVNBQkxFRHxJUlFGX1BFUkNQVSwKIAkubmFtZSA9ICJwcmltYXJ5IElQSSIsCiB9OwogCkBAIC00MzcsMTQgKzQ0NywxNSBAQAogCiAvKiBQb3dlclN1cmdlLXN0eWxlIE1hY3MgKi8KIHN0cnVjdCBzbXBfb3BzX3QgcHN1cmdlX3NtcF9vcHMgPSB7Ci0JLm1lc3NhZ2VfcGFzcwk9IHNtcF9wc3VyZ2VfbWVzc2FnZV9wYXNzLAorCS5tZXNzYWdlX3Bhc3MJPSBzbXBfbXV4ZWRfaXBpX21lc3NhZ2VfcGFzcywKKwkuY2F1c2VfaXBpCT0gc21wX3BzdXJnZV9jYXVzZV9pcGksCiAJLnByb2JlCQk9IHNtcF9wc3VyZ2VfcHJvYmUsCiAJLmtpY2tfY3B1CT0gc21wX3BzdXJnZV9raWNrX2NwdSwKIAkuc2V0dXBfY3B1CT0gc21wX3BzdXJnZV9zZXR1cF9jcHUsCiAJLmdpdmVfdGltZWJhc2UJPSBzbXBfcHN1cmdlX2dpdmVfdGltZWJhc2UsCiAJLnRha2VfdGltZWJhc2UJPSBzbXBfcHN1cmdlX3Rha2VfdGltZWJhc2UsCiB9OwotI2VuZGlmIC8qIENPTkZJR19QUEMzMiAtIGFjdHVhbGx5IHBvd2Vyc3VyZ2Ugc3VwcG9ydCAqLworI2VuZGlmIC8qIENPTkZJR19QUENfUE1BQzMyX1BTVVJHRSAqLwogCiAvKgogICogQ29yZSA5OSBhbmQgbGF0ZXIgc3VwcG9ydApAQCAtNzkxLDE0ICs4MDIsMTQgQEAKIAlyZXR1cm4gbmNwdXM7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbXBfY29yZTk5X2tpY2tfY3B1KGludCBucikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNtcF9jb3JlOTlfa2lja19jcHUoaW50IG5yKQogewogCXVuc2lnbmVkIGludCBzYXZlX3ZlY3RvcjsKIAl1bnNpZ25lZCBsb25nIHRhcmdldCwgZmxhZ3M7CiAJdW5zaWduZWQgaW50ICp2ZWN0b3IgPSAodW5zaWduZWQgaW50ICopKFBBR0VfT0ZGU0VUKzB4MTAwKTsKIAogCWlmIChuciA8IDAgfHwgbnIgPiAzKQotCQlyZXR1cm47CisJCXJldHVybiAtRU5PRU5UOwogCiAJaWYgKHBwY19tZC5wcm9ncmVzcykKIAkJcHBjX21kLnByb2dyZXNzKCJzbXBfY29yZTk5X2tpY2tfY3B1IiwgMHgzNDYpOwpAQCAtODMwLDYgKzg0MSw4IEBACiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJaWYgKHBwY19tZC5wcm9ncmVzcykgcHBjX21kLnByb2dyZXNzKCJzbXBfY29yZTk5X2tpY2tfY3B1IGRvbmUiLCAweDM0Nyk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZpbml0IHNtcF9jb3JlOTlfc2V0dXBfY3B1KGludCBjcHVfbnIpCkBAIC0xMDAyLDcgKzEwMTUsNyBAQAogCQlvZl9ub2RlX3B1dChucCk7CiAJCXNtcF9vcHMgPSAmY29yZTk5X3NtcF9vcHM7CiAJfQotI2lmZGVmIENPTkZJR19QUEMzMgorI2lmZGVmIENPTkZJR19QUENfUE1BQzMyX1BTVVJHRQogCWVsc2UgewogCQkvKiBXZSBoYXZlIHRvIHNldCBiaXRzIGluIGNwdV9wb3NzaWJsZV9tYXNrIGhlcmUgc2luY2UgdGhlCiAJCSAqIHNlY29uZGFyeSBDUFUocykgYXJlbid0IGluIHRoZSBkZXZpY2UgdHJlZS4gVmFyaW91cwpAQCAtMTAxNSw3ICsxMDI4LDcgQEAKIAkJCXNldF9jcHVfcG9zc2libGUoY3B1LCB0cnVlKTsKIAkJc21wX29wcyA9ICZwc3VyZ2Vfc21wX29wczsKIAl9Ci0jZW5kaWYgLyogQ09ORklHX1BQQzMyICovCisjZW5kaWYgLyogQ09ORklHX1BQQ19QTUFDMzJfUFNVUkdFICovCiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIAlwcGNfbWQuY3B1X2RpZSA9IHBtYWNfY3B1X2RpZTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL2ludGVycnVwdC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvaW50ZXJydXB0LmMKaW5kZXggZjJmNjQxMy4uNjAwZWQyYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvaW50ZXJydXB0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvaW50ZXJydXB0LmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCXJlc3VsdCA9IGlycV9zZXRfY2hpcF9kYXRhKCp2aXJxLCBwZCk7CiAKIAlpZiAocmVzdWx0KSB7Ci0JCXByX2RlYnVnKCIlczolZDogc2V0X2lycV9jaGlwX2RhdGEgZmFpbGVkXG4iLAorCQlwcl9kZWJ1ZygiJXM6JWQ6IGlycV9zZXRfY2hpcF9kYXRhIGZhaWxlZFxuIiwKIAkJCV9fZnVuY19fLCBfX0xJTkVfXyk7CiAJCWdvdG8gZmFpbF9zZXQ7CiAJfQpAQCAtNjU5LDExICs2NTksNiBAQAogc3RhdGljIHZvaWQgZHVtcF9ibXAoc3RydWN0IHBzM19wcml2YXRlKiBwZCkge307CiAjZW5kaWYgLyogZGVmaW5lZChERUJVRykgKi8KIAotc3RhdGljIHZvaWQgcHMzX2hvc3RfdW5tYXAoc3RydWN0IGlycV9ob3N0ICpoLCB1bnNpZ25lZCBpbnQgdmlycSkKLXsKLQlpcnFfc2V0X2NoaXBfZGF0YSh2aXJxLCBOVUxMKTsKLX0KLQogc3RhdGljIGludCBwczNfaG9zdF9tYXAoc3RydWN0IGlycV9ob3N0ICpoLCB1bnNpZ25lZCBpbnQgdmlycSwKIAlpcnFfaHdfbnVtYmVyX3QgaHdpcnEpCiB7CkBAIC02ODMsNyArNjc4LDYgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfaG9zdF9vcHMgcHMzX2hvc3Rfb3BzID0gewogCS5tYXAgPSBwczNfaG9zdF9tYXAsCi0JLnVubWFwID0gcHMzX2hvc3RfdW5tYXAsCiAJLm1hdGNoID0gcHMzX2hvc3RfbWF0Y2gsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3NtcC5jCmluZGV4IDUxZmZkZTQuLjRjNDQ3OTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3NtcC5jCkBAIC0zOSw3ICszOSw3IEBACiAjZGVmaW5lIE1TR19DT1VOVCA0CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgaW50IFtNU0dfQ09VTlRdLCBwczNfaXBpX3ZpcnFzKTsKIAotc3RhdGljIHZvaWQgZG9fbWVzc2FnZV9wYXNzKGludCB0YXJnZXQsIGludCBtc2cpCitzdGF0aWMgdm9pZCBwczNfc21wX21lc3NhZ2VfcGFzcyhpbnQgY3B1LCBpbnQgbXNnKQogewogCWludCByZXN1bHQ7CiAJdW5zaWduZWQgaW50IHZpcnE7CkBAIC00OSwyOCArNDksMTIgQEAKIAkJcmV0dXJuOwogCX0KIAotCXZpcnEgPSBwZXJfY3B1KHBzM19pcGlfdmlycXMsIHRhcmdldClbbXNnXTsKKwl2aXJxID0gcGVyX2NwdShwczNfaXBpX3ZpcnFzLCBjcHUpW21zZ107CiAJcmVzdWx0ID0gcHMzX3NlbmRfZXZlbnRfbG9jYWxseSh2aXJxKTsKIAogCWlmIChyZXN1bHQpCiAJCURCRygiJXM6JWQ6IHBzM19zZW5kX2V2ZW50X2xvY2FsbHkoJWQsICVkKSBmYWlsZWQiCi0JCQkiICglZClcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgdGFyZ2V0LCBtc2csIHJlc3VsdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBzM19zbXBfbWVzc2FnZV9wYXNzKGludCB0YXJnZXQsIGludCBtc2cpCi17Ci0JaW50IGNwdTsKLQotCWlmICh0YXJnZXQgPCBOUl9DUFVTKQotCQlkb19tZXNzYWdlX3Bhc3ModGFyZ2V0LCBtc2cpOwotCWVsc2UgaWYgKHRhcmdldCA9PSBNU0dfQUxMX0JVVF9TRUxGKSB7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQotCQkJaWYgKGNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCi0JCQkJZG9fbWVzc2FnZV9wYXNzKGNwdSwgbXNnKTsKLQl9IGVsc2UgewotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJCWRvX21lc3NhZ2VfcGFzcyhjcHUsIG1zZyk7Ci0JfQorCQkJIiAoJWQpXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIGNwdSwgbXNnLCByZXN1bHQpOwogfQogCiBzdGF0aWMgaW50IHBzM19zbXBfcHJvYmUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3NwdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc3B1LmMKaW5kZXggMzlhNDcyZS4uMzc1YTlmOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc3B1LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc3B1LmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogICogVGhlIGN1cnJlbnQgSFYgcmVxdWlyZXMgdGhlIHNwdSBzaGFkb3cgcmVncyB0byBiZSBtYXBwZWQgd2l0aCB0aGUKICAqIFBURSBwYWdlIHByb3RlY3Rpb24gYml0cyBzZXQgYXMgcmVhZC1vbmx5IChQUD0zKS4gIFRoaXMgaW1wbGVtZW50YXRpb24KICAqIHVzZXMgdGhlIGxvdyBsZXZlbCBfX2lvcmVtYXAoKSB0byBieXBhc3MgdGhlIHBhZ2UgcHJvdGVjdGlvbiBzZXR0aW5ncwotICogaW5mb3JjZWQgYnkgaW9yZW1hcF9mbGFncygpIHRvIGdldCB0aGUgbmVlZGVkIFBURSBiaXRzIHNldCBmb3IgdGhlCisgKiBpbmZvcmNlZCBieSBpb3JlbWFwX3Byb3QoKSB0byBnZXQgdGhlIG5lZWRlZCBQVEUgYml0cyBzZXQgZm9yIHRoZQogICogc2hhZG93IHJlZ3MuCiAgKi8KIApAQCAtMjE0LDcgKzIxNCw3IEBACiAJCWdvdG8gZmFpbF9pb3JlbWFwOwogCX0KIAotCXNwdS0+bG9jYWxfc3RvcmUgPSAoX19mb3JjZSB2b2lkICopaW9yZW1hcF9mbGFncyhzcHUtPmxvY2FsX3N0b3JlX3BoeXMsCisJc3B1LT5sb2NhbF9zdG9yZSA9IChfX2ZvcmNlIHZvaWQgKilpb3JlbWFwX3Byb3Qoc3B1LT5sb2NhbF9zdG9yZV9waHlzLAogCQlMU19TSVpFLCBfUEFHRV9OT19DQUNIRSk7CiAKIAlpZiAoIXNwdS0+bG9jYWxfc3RvcmUpIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKaW5kZXggNWIzZGE0Yi4uNzFhZjRjNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKQEAgLTMsNyArMywxMCBAQAogCWJvb2wgIklCTSBwU2VyaWVzICYgbmV3IChQT1dFUjUtYmFzZWQpIGlTZXJpZXMiCiAJc2VsZWN0IE1QSUMKIAlzZWxlY3QgUENJX01TSQotCXNlbGVjdCBYSUNTCisJc2VsZWN0IFBQQ19YSUNTCisJc2VsZWN0IFBQQ19JQ1BfTkFUSVZFCisJc2VsZWN0IFBQQ19JQ1BfSFYKKwlzZWxlY3QgUFBDX0lDU19SVEFTCiAJc2VsZWN0IFBQQ19JODI1OQogCXNlbGVjdCBQUENfUlRBUwogCXNlbGVjdCBQUENfUlRBU19EQUVNT04KQEAgLTQ3LDYgKzUwLDI0IEBACiAJdHJpc3RhdGUgIlNjYW5sb2cgZHVtcCBpbnRlcmZhY2UiCiAJZGVwZW5kcyBvbiBSVEFTX1BST0MgJiYgUFBDX1BTRVJJRVMKIAorY29uZmlnIElPX0VWRU5UX0lSUQorCWJvb2wgIklPIEV2ZW50IEludGVycnVwdCBzdXBwb3J0IgorCWRlcGVuZHMgb24gUFBDX1BTRVJJRVMKKwlkZWZhdWx0IHkKKwloZWxwCisJICBTZWxlY3QgdGhpcyBvcHRpb24sIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciBJTyBFdmVudAorCSAgaW50ZXJydXB0cy4gSU8gZXZlbnQgaW50ZXJydXB0IGlzIGEgbWVjaGFuaXNtIHByb3ZpZGVkIGJ5IFJUQVMKKwkgIHRvIHJldHVybiBpbmZvcm1hdGlvbiBhYm91dCBoYXJkd2FyZSBlcnJvciBhbmQgbm9uLWVycm9yIGV2ZW50cworCSAgd2hpY2ggbWF5IG5lZWQgT1MgYXR0ZW50aW9uLiBSVEFTIHJldHVybnMgZXZlbnRzIGZvciBtdWx0aXBsZQorCSAgZXZlbnQgdHlwZXMgYW5kIHNjb3Blcy4gRGV2aWNlIGRyaXZlcnMgY2FuIHJlZ2lzdGVyIHRoZWlyIGhhbmRsZXJzCisJICB0byByZWNlaXZlIGV2ZW50cy4KKworCSAgVGhpcyBvcHRpb24gd2lsbCBvbmx5IGVuYWJsZSB0aGUgSU8gZXZlbnQgcGxhdGZvcm0gY29kZS4gWW91CisJICB3aWxsIHN0aWxsIG5lZWQgdG8gZW5hYmxlIG9yIGNvbXBpbGUgdGhlIGFjdHVhbCBkcml2ZXJzCisJICB0aGF0IHVzZSB0aGlzIGluZnJhc3RydXR1cmUgdG8gaGFuZGxlIElPIGV2ZW50IGludGVycnVwdHMuCisKKwkgIFNheSBZIGlmIHlvdSBhcmUgdW5zdXJlLgorCiBjb25maWcgTFBBUkNGRwogCWJvb2wgIkxQQVIgQ29uZmlndXJhdGlvbiBEYXRhIgogCWRlcGVuZHMgb24gUFBDX1BTRVJJRVMgfHwgUFBDX0lTRVJJRVMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZQppbmRleCBmYzUyMzc4Li4zNTU2ZTQwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlCkBAIC01LDcgKzUsNiBAQAogCQkJICAgc2V0dXAubyBpb21tdS5vIGV2ZW50X3NvdXJjZXMubyByYXMubyBcCiAJCQkgICBmaXJtd2FyZS5vIHBvd2VyLm8gZGxwYXIubyBtb2JpbGl0eS5vCiBvYmotJChDT05GSUdfU01QKQkrPSBzbXAubwotb2JqLSQoQ09ORklHX1hJQ1MpCSs9IHhpY3Mubwogb2JqLSQoQ09ORklHX1NDQU5MT0cpCSs9IHNjYW5sb2cubwogb2JqLSQoQ09ORklHX0VFSCkJKz0gZWVoLm8gZWVoX2NhY2hlLm8gZWVoX2RyaXZlci5vIGVlaF9ldmVudC5vIGVlaF9zeXNmcy5vCiBvYmotJChDT05GSUdfS0VYRUMpCSs9IGtleGVjLm8KQEAgLTIyLDYgKzIxLDcgQEAKIG9iai0kKENPTkZJR19QSFlQX0RVTVApCQkrPSBwaHlwX2R1bXAubwogb2JqLSQoQ09ORklHX0NNTSkJCSs9IGNtbS5vCiBvYmotJChDT05GSUdfRFRMKQkJKz0gZHRsLm8KK29iai0kKENPTkZJR19JT19FVkVOVF9JUlEpCSs9IGlvX2V2ZW50X2lycS5vCiAKIGlmZXEgKCQoQ09ORklHX1BQQ19QU0VSSUVTKSx5KQogb2JqLSQoQ09ORklHX1NVU1BFTkQpCQkrPSBzdXNwZW5kLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kdGwuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kdGwuYwppbmRleCBjMzcxYmMwLi5lOTE5MDA3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZHRsLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2R0bC5jCkBAIC01MiwxMCArNTIsMTAgQEAKIAogCiAvKgotICogU2l6ZSBvZiBwZXItY3B1IGxvZyBidWZmZXJzLiBEZWZhdWx0IGlzIGp1c3QgdW5kZXIgMTYgcGFnZXMgd29ydGguCisgKiBTaXplIG9mIHBlci1jcHUgbG9nIGJ1ZmZlcnMuIEZpcm13YXJlIHJlcXVpcmVzIHRoYXQgdGhlIGJ1ZmZlciBkb2VzCisgKiBub3QgY3Jvc3MgYSA0ayBib3VuZGFyeS4KICAqLwotc3RhdGljIGludCBkdGxfYnVmX2VudHJpZXMgPSAoMTYgKiA4NSk7Ci0KK3N0YXRpYyBpbnQgZHRsX2J1Zl9lbnRyaWVzID0gTl9ESVNQQVRDSF9MT0c7CiAKICNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORwogc3RydWN0IGR0bF9yaW5nIHsKQEAgLTE1MSw3ICsxNTEsNyBAQAogCiAJLyogUmVnaXN0ZXIgb3VyIGR0bCBidWZmZXIgd2l0aCB0aGUgaHlwZXJ2aXNvci4gVGhlIEhWIGV4cGVjdHMgdGhlCiAJICogYnVmZmVyIHNpemUgdG8gYmUgcGFzc2VkIGluIHRoZSBzZWNvbmQgd29yZCBvZiB0aGUgYnVmZmVyICovCi0JKCh1MzIgKilkdGwtPmJ1ZilbMV0gPSBkdGwtPmJ1Zl9lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBkdGxfZW50cnkpOworCSgodTMyICopZHRsLT5idWYpWzFdID0gRElTUEFUQ0hfTE9HX0JZVEVTOwogCiAJaHdjcHUgPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGR0bC0+Y3B1KTsKIAlhZGRyID0gX19wYShkdGwtPmJ1Zik7CkBAIC0xOTYsMTMgKzE5NiwxNSBAQAogCWxvbmcgaW50IHJjOwogCXN0cnVjdCBkdGxfZW50cnkgKmJ1ZiA9IE5VTEw7CiAKKwlpZiAoIWR0bF9jYWNoZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAkvKiBvbmx5IGFsbG93IG9uZSByZWFkZXIgKi8KIAlpZiAoZHRsLT5idWYpCiAJCXJldHVybiAtRUJVU1k7CiAKIAluX2VudHJpZXMgPSBkdGxfYnVmX2VudHJpZXM7Ci0JYnVmID0ga21hbGxvY19ub2RlKG5fZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgZHRsX2VudHJ5KSwKLQkJCUdGUF9LRVJORUwsIGNwdV90b19ub2RlKGR0bC0+Y3B1KSk7CisJYnVmID0ga21lbV9jYWNoZV9hbGxvY19ub2RlKGR0bF9jYWNoZSwgR0ZQX0tFUk5FTCwgY3B1X3RvX25vZGUoZHRsLT5jcHUpKTsKIAlpZiAoIWJ1ZikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogYnVmZmVyIGFsbG9jIGZhaWxlZCBmb3IgY3B1ICVkXG4iLAogCQkJCV9fZnVuY19fLCBkdGwtPmNwdSk7CkBAIC0yMjMsNyArMjI1LDcgQEAKIAlzcGluX3VubG9jaygmZHRsLT5sb2NrKTsKIAogCWlmIChyYykKLQkJa2ZyZWUoYnVmKTsKKwkJa21lbV9jYWNoZV9mcmVlKGR0bF9jYWNoZSwgYnVmKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTIzMSw3ICsyMzMsNyBAQAogewogCXNwaW5fbG9jaygmZHRsLT5sb2NrKTsKIAlkdGxfc3RvcChkdGwpOwotCWtmcmVlKGR0bC0+YnVmKTsKKwlrbWVtX2NhY2hlX2ZyZWUoZHRsX2NhY2hlLCBkdGwtPmJ1Zik7CiAJZHRsLT5idWYgPSBOVUxMOwogCWR0bC0+YnVmX2VudHJpZXMgPSAwOwogCXNwaW5fdW5sb2NrKCZkdGwtPmxvY2spOwpAQCAtMzY1LDcgKzM2Nyw3IEBACiAKIAlldmVudF9tYXNrX2ZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV94OCgiZHRsX2V2ZW50X21hc2siLCAwNjAwLAogCQkJCWR0bF9kaXIsICZkdGxfZXZlbnRfbWFzayk7Ci0JYnVmX2VudHJpZXNfZmlsZSA9IGRlYnVnZnNfY3JlYXRlX3UzMigiZHRsX2J1Zl9lbnRyaWVzIiwgMDYwMCwKKwlidWZfZW50cmllc19maWxlID0gZGVidWdmc19jcmVhdGVfdTMyKCJkdGxfYnVmX2VudHJpZXMiLCAwNDAwLAogCQkJCWR0bF9kaXIsICZkdGxfYnVmX2VudHJpZXMpOwogCiAJaWYgKCFldmVudF9tYXNrX2ZpbGUgfHwgIWJ1Zl9lbnRyaWVzX2ZpbGUpIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWguYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWguYwppbmRleCA4OTY0OTE3Li40NmI1NWNmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jCkBAIC05Myw2ICs5Myw3IEBACiBzdGF0aWMgaW50IGlibV9nZXRfY29uZmlnX2FkZHJfaW5mbzsKIHN0YXRpYyBpbnQgaWJtX2dldF9jb25maWdfYWRkcl9pbmZvMjsKIHN0YXRpYyBpbnQgaWJtX2NvbmZpZ3VyZV9icmlkZ2U7CitzdGF0aWMgaW50IGlibV9jb25maWd1cmVfcGU7CiAKIGludCBlZWhfc3Vic3lzdGVtX2VuYWJsZWQ7CiBFWFBPUlRfU1lNQk9MKGVlaF9zdWJzeXN0ZW1fZW5hYmxlZCk7CkBAIC0yNjEsNiArMjYyLDggQEAKIAlwY2lfcmVnc19idWZbMF0gPSAwOwogCiAJcnRhc19wY2lfZW5hYmxlKHBkbiwgRUVIX1RIQVdfTU1JTyk7CisJcnRhc19jb25maWd1cmVfYnJpZGdlKHBkbik7CisJZWVoX3Jlc3RvcmVfYmFycyhwZG4pOwogCWxvZ2xlbiA9IGdhdGhlcl9wY2lfZGF0YShwZG4sIHBjaV9yZWdzX2J1ZiwgRUVIX1BDSV9SRUdTX0xPR19MRU4pOwogCiAJcnRhc19zbG90X2Vycm9yX2RldGFpbChwZG4sIHNldmVyaXR5LCBwY2lfcmVnc19idWYsIGxvZ2xlbik7CkBAIC00NDgsNiArNDUxLDM5IEBACiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmZpcm1fZXJyb3JfbG9jaywgZmxhZ3MpOwogfQogCit2b2lkIF9fZWVoX3NldF9wZV9mcmVzZXQoc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQsIHVuc2lnbmVkIGludCAqZnJlc2V0KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47CisKKwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKHBhcmVudCwgZG4pIHsKKwkJaWYgKFBDSV9ETihkbikpIHsKKworCQkJc3RydWN0IHBjaV9kZXYgKmRldiA9IFBDSV9ETihkbiktPnBjaWRldjsKKworCQkJaWYgKGRldiAmJiBkZXYtPmRyaXZlcikKKwkJCQkqZnJlc2V0IHw9IGRldi0+bmVlZHNfZnJlc2V0OworCisJCQlfX2VlaF9zZXRfcGVfZnJlc2V0KGRuLCBmcmVzZXQpOworCQl9CisJfQorfQorCit2b2lkIGVlaF9zZXRfcGVfZnJlc2V0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIHVuc2lnbmVkIGludCAqZnJlc2V0KQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisJZG4gPSBmaW5kX2RldmljZV9wZShkbik7CisKKwkvKiBCYWNrIHVwIG9uZSwgc2luY2UgY29uZmlnIGFkZHJzIG1pZ2h0IGJlIHNoYXJlZCAqLworCWlmICghcGNpYmlvc19maW5kX3BjaV9idXMoZG4pICYmIFBDSV9ETihkbi0+cGFyZW50KSkKKwkJZG4gPSBkbi0+cGFyZW50OworCisJZGV2ID0gUENJX0ROKGRuKS0+cGNpZGV2OworCWlmIChkZXYpCisJCSpmcmVzZXQgfD0gZGV2LT5uZWVkc19mcmVzZXQ7CisKKwlfX2VlaF9zZXRfcGVfZnJlc2V0KGRuLCBmcmVzZXQpOworfQorCiAvKioKICAqIGVlaF9kbl9jaGVja19mYWlsdXJlIC0gY2hlY2sgaWYgYWxsIDEncyBkYXRhIGlzIGR1ZSB0byBFRUggc2xvdCBmcmVlemUKICAqIEBkbiBkZXZpY2Ugbm9kZQpAQCAtNjkyLDE1ICs3MjgsMjQgQEAKIAlpZiAocGRuLT5lZWhfcGVfY29uZmlnX2FkZHIpCiAJCWNvbmZpZ19hZGRyID0gcGRuLT5lZWhfcGVfY29uZmlnX2FkZHI7CiAKLQlyYyA9IHJ0YXNfY2FsbChpYm1fc2V0X3Nsb3RfcmVzZXQsNCwxLCBOVUxMLAorCXJjID0gcnRhc19jYWxsKGlibV9zZXRfc2xvdF9yZXNldCwgNCwgMSwgTlVMTCwKIAkgICAgICAgICAgICAgICBjb25maWdfYWRkciwKIAkgICAgICAgICAgICAgICBCVUlEX0hJKHBkbi0+cGhiLT5idWlkKSwKIAkgICAgICAgICAgICAgICBCVUlEX0xPKHBkbi0+cGhiLT5idWlkKSwKIAkgICAgICAgICAgICAgICBzdGF0ZSk7Ci0JaWYgKHJjKQotCQlwcmludGsgKEtFUk5fV0FSTklORyAiRUVIOiBVbmFibGUgdG8gcmVzZXQgdGhlIGZhaWxlZCBzbG90LCIKLQkJICAgICAgICAiICglZCkgI1JTVD0lZCBkbj0lc1xuIiwKLQkJICAgICAgICByYywgc3RhdGUsIHBkbi0+bm9kZS0+ZnVsbF9uYW1lKTsKKworCS8qIEZ1bmRhbWVudGFsLXJlc2V0IG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBQRSwgdHJ5IGhvdC1yZXNldCAqLworCWlmIChyYyA9PSAtOCAmJiBzdGF0ZSA9PSAzKSB7CisJCXJjID0gcnRhc19jYWxsKGlibV9zZXRfc2xvdF9yZXNldCwgNCwgMSwgTlVMTCwKKwkJCSAgICAgICBjb25maWdfYWRkciwKKwkJCSAgICAgICBCVUlEX0hJKHBkbi0+cGhiLT5idWlkKSwKKwkJCSAgICAgICBCVUlEX0xPKHBkbi0+cGhiLT5idWlkKSwgMSk7CisJCWlmIChyYykKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkiRUVIOiBVbmFibGUgdG8gcmVzZXQgdGhlIGZhaWxlZCBzbG90LCIKKwkJCQkiICNSU1Q9JWQgZG49JXNcbiIsCisJCQkJcmMsIHBkbi0+bm9kZS0+ZnVsbF9uYW1lKTsKKwl9CiB9CiAKIC8qKgpAQCAtNzM2LDE4ICs3ODEsMjEgQEAKIC8qKgogICogcnRhc19zZXRfc2xvdF9yZXNldCAtLSBhc3NlcnQgdGhlIHBjaSAjUlNUIGxpbmUgZm9yIDEvNCBzZWNvbmQKICAqIEBwZG46IHBjaSBkZXZpY2Ugbm9kZSB0byBiZSByZXNldC4KLSAqCi0gKiAgUmV0dXJuIDAgaWYgc3VjY2VzcywgZWxzZSBhIG5vbi16ZXJvIHZhbHVlLgogICovCiAKIHN0YXRpYyB2b2lkIF9fcnRhc19zZXRfc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RuICpwZG4pCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IHBkbi0+cGNpZGV2OworCXVuc2lnbmVkIGludCBmcmVzZXQgPSAwOwogCi0JLyogRGV0ZXJtaW5lIHR5cGUgb2YgRUVIIHJlc2V0IHJlcXVpcmVkIGJ5IGRldmljZSwKLQkgKiBkZWZhdWx0IGhvdCByZXNldCBvciBmdW5kYW1lbnRhbCByZXNldAotCSAqLwotCWlmIChkZXYgJiYgZGV2LT5uZWVkc19mcmVzZXQpCisJLyogRGV0ZXJtaW5lIHR5cGUgb2YgRUVIIHJlc2V0IHJlcXVpcmVkIGZvcgorCSAqIFBhcnRpdGlvbmFibGUgRW5kcG9pbnQsIGEgaG90LXJlc2V0ICgxKQorCSAqIG9yIGEgZnVuZGFtZW50YWwgcmVzZXQgKDMpLgorCSAqIEEgZnVuZGFtZW50YWwgcmVzZXQgcmVxdWlyZWQgYnkgYW55IGRldmljZSB1bmRlcgorCSAqIFBhcnRpdGlvbmFibGUgRW5kcG9pbnQgdHJ1bXBzIGhvdC1yZXNldC4KKyAgCSAqLworCWVlaF9zZXRfcGVfZnJlc2V0KHBkbi0+bm9kZSwgJmZyZXNldCk7CisKKwlpZiAoZnJlc2V0KQogCQlydGFzX3BjaV9zbG90X3Jlc2V0KHBkbiwgMyk7CiAJZWxzZQogCQlydGFzX3BjaV9zbG90X3Jlc2V0KHBkbiwgMSk7CkBAIC04OTUsMTMgKzk0MywyMCBAQAogewogCWludCBjb25maWdfYWRkcjsKIAlpbnQgcmM7CisJaW50IHRva2VuOwogCiAJLyogVXNlIFBFIGNvbmZpZ3VyYXRpb24gYWRkcmVzcywgaWYgcHJlc2VudCAqLwogCWNvbmZpZ19hZGRyID0gcGRuLT5lZWhfY29uZmlnX2FkZHI7CiAJaWYgKHBkbi0+ZWVoX3BlX2NvbmZpZ19hZGRyKQogCQljb25maWdfYWRkciA9IHBkbi0+ZWVoX3BlX2NvbmZpZ19hZGRyOwogCi0JcmMgPSBydGFzX2NhbGwoaWJtX2NvbmZpZ3VyZV9icmlkZ2UsMywxLCBOVUxMLAorCS8qIFVzZSBuZXcgY29uZmlndXJlLXBlIGZ1bmN0aW9uLCBpZiBzdXBwb3J0ZWQgKi8KKwlpZiAoaWJtX2NvbmZpZ3VyZV9wZSAhPSBSVEFTX1VOS05PV05fU0VSVklDRSkKKwkJdG9rZW4gPSBpYm1fY29uZmlndXJlX3BlOworCWVsc2UKKwkJdG9rZW4gPSBpYm1fY29uZmlndXJlX2JyaWRnZTsKKworCXJjID0gcnRhc19jYWxsKHRva2VuLCAzLCAxLCBOVUxMLAogCSAgICAgICAgICAgICAgIGNvbmZpZ19hZGRyLAogCSAgICAgICAgICAgICAgIEJVSURfSEkocGRuLT5waGItPmJ1aWQpLAogCSAgICAgICAgICAgICAgIEJVSURfTE8ocGRuLT5waGItPmJ1aWQpKTsKQEAgLTEwNzcsNiArMTEzMiw3IEBACiAJaWJtX2dldF9jb25maWdfYWRkcl9pbmZvID0gcnRhc190b2tlbigiaWJtLGdldC1jb25maWctYWRkci1pbmZvIik7CiAJaWJtX2dldF9jb25maWdfYWRkcl9pbmZvMiA9IHJ0YXNfdG9rZW4oImlibSxnZXQtY29uZmlnLWFkZHItaW5mbzIiKTsKIAlpYm1fY29uZmlndXJlX2JyaWRnZSA9IHJ0YXNfdG9rZW4gKCJpYm0sY29uZmlndXJlLWJyaWRnZSIpOworCWlibV9jb25maWd1cmVfcGUgPSBydGFzX3Rva2VuKCJpYm0sY29uZmlndXJlLXBlIik7CiAKIAlpZiAoaWJtX3NldF9lZWhfb3B0aW9uID09IFJUQVNfVU5LTk9XTl9TRVJWSUNFKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2RyaXZlci5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9kcml2ZXIuYwppbmRleCBiOGQ3MGY1Li4xYjZjYjEwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2RyaXZlci5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMKQEAgLTMyOCw3ICszMjgsNyBAQAogCXN0cnVjdCBwY2lfYnVzICpmcm96ZW5fYnVzOwogCWludCByYyA9IDA7CiAJZW51bSBwY2lfZXJzX3Jlc3VsdCByZXN1bHQgPSBQQ0lfRVJTX1JFU1VMVF9OT05FOwotCWNvbnN0IGNoYXIgKmxvY2F0aW9uLCAqcGNpX3N0ciwgKmRydl9zdHI7CisJY29uc3QgY2hhciAqbG9jYXRpb24sICpwY2lfc3RyLCAqZHJ2X3N0ciwgKmJ1c19wY2lfc3RyLCAqYnVzX2Rydl9zdHI7CiAKIAlmcm96ZW5fZG4gPSBmaW5kX2RldmljZV9wZShldmVudC0+ZG4pOwogCWlmICghZnJvemVuX2RuKSB7CkBAIC0zNjQsMTMgKzM2NCw4IEBACiAJZnJvemVuX3BkbiA9IFBDSV9ETihmcm96ZW5fZG4pOwogCWZyb3plbl9wZG4tPmVlaF9mcmVlemVfY291bnQrKzsKIAotCWlmIChmcm96ZW5fcGRuLT5wY2lkZXYpIHsKLQkJcGNpX3N0ciA9IHBjaV9uYW1lIChmcm96ZW5fcGRuLT5wY2lkZXYpOwotCQlkcnZfc3RyID0gcGNpZF9uYW1lIChmcm96ZW5fcGRuLT5wY2lkZXYpOwotCX0gZWxzZSB7Ci0JCXBjaV9zdHIgPSBlZWhfcGNpX25hbWUoZXZlbnQtPmRldik7Ci0JCWRydl9zdHIgPSBwY2lkX25hbWUgKGV2ZW50LT5kZXYpOwotCX0KKwlwY2lfc3RyID0gZWVoX3BjaV9uYW1lKGV2ZW50LT5kZXYpOworCWRydl9zdHIgPSBwY2lkX25hbWUoZXZlbnQtPmRldik7CiAJCiAJaWYgKGZyb3plbl9wZG4tPmVlaF9mcmVlemVfY291bnQgPiBFRUhfTUFYX0FMTE9XRURfRlJFRVpFUykKIAkJZ290byBleGNlc3NfZmFpbHVyZXM7CkBAIC0zNzgsOCArMzczLDE3IEBACiAJcHJpbnRrKEtFUk5fV0FSTklORwogCSAgICJFRUg6IFRoaXMgUENJIGRldmljZSBoYXMgZmFpbGVkICVkIHRpbWVzIGluIHRoZSBsYXN0IGhvdXI6XG4iLAogCQlmcm96ZW5fcGRuLT5lZWhfZnJlZXplX2NvdW50KTsKKworCWlmIChmcm96ZW5fcGRuLT5wY2lkZXYpIHsKKwkJYnVzX3BjaV9zdHIgPSBwY2lfbmFtZShmcm96ZW5fcGRuLT5wY2lkZXYpOworCQlidXNfZHJ2X3N0ciA9IHBjaWRfbmFtZShmcm96ZW5fcGRuLT5wY2lkZXYpOworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiRUVIOiBCdXMgbG9jYXRpb249JXMgZHJpdmVyPSVzIHBjaSBhZGRyPSVzXG4iLAorCQkJbG9jYXRpb24sIGJ1c19kcnZfc3RyLCBidXNfcGNpX3N0cik7CisJfQorCiAJcHJpbnRrKEtFUk5fV0FSTklORwotCQkiRUVIOiBsb2NhdGlvbj0lcyBkcml2ZXI9JXMgcGNpIGFkZHI9JXNcbiIsCisJCSJFRUg6IERldmljZSBsb2NhdGlvbj0lcyBkcml2ZXI9JXMgcGNpIGFkZHI9JXNcbiIsCiAJCWxvY2F0aW9uLCBkcnZfc3RyLCBwY2lfc3RyKTsKIAogCS8qIFdhbGsgdGhlIHZhcmlvdXMgZGV2aWNlIGRyaXZlcnMgYXR0YWNoZWQgdG8gdGhpcyBzbG90IHRocm91Z2gKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLWNwdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMKaW5kZXggZWY4YzQ1NC4uNDZmMTNhMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMKQEAgLTE5LDYgKzE5LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC0yOCw3ICsyOSw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlIDxhc20vdmRzb19kYXRhcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wU2VyaWVzX3JlY29uZmlnLmg+Ci0jaW5jbHVkZSAieGljcy5oIgorI2luY2x1ZGUgPGFzbS94aWNzLmg+CiAjaW5jbHVkZSAicGxwYXJfd3JhcHBlcnMuaCIKICNpbmNsdWRlICJvZmZsaW5lX3N0YXRlcy5oIgogCkBAIC0yODAsNyArMjgxLDcgQEAKIAl9CiAKIAlmb3JfZWFjaF9jcHUoY3B1LCB0bXApIHsKLQkJQlVHX09OKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBjcHVfcHJlc2VudF9tYXNrKSk7CisJCUJVR19PTihjcHVfcHJlc2VudChjcHUpKTsKIAkJc2V0X2NwdV9wcmVzZW50KGNwdSwgdHJ1ZSk7CiAJCXNldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoY3B1LCAqaW50c2VydisrKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaW9fZXZlbnRfaXJxLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaW9fZXZlbnRfaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgyOWU2MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb19ldmVudF9pcnEuYwpAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIDIwMTEgTWFyayBOZWxzb24gYW5kIFRzZW5nLUh1aSAoRnJhbmspIExpbiwgSUJNIENvcnBvcmF0aW9uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9ydGFzLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pb19ldmVudF9pcnEuaD4KKworI2luY2x1ZGUgInBzZXJpZXMuaCIKKworLyoKKyAqIElPIGV2ZW50IGludGVycnVwdCBpcyBhIG1lY2hhbmlzbSBwcm92aWRlZCBieSBSVEFTIHRvIHJldHVybgorICogaW5mb3JtYXRpb24gYWJvdXQgaGFyZHdhcmUgZXJyb3IgYW5kIG5vbi1lcnJvciBldmVudHMuIERldmljZQorICogZHJpdmVycyBjYW4gcmVnaXN0ZXIgdGhlaXIgZXZlbnQgaGFuZGxlcnMgdG8gcmVjZWl2ZSBldmVudHMuCisgKiBEZXZpY2UgZHJpdmVycyBhcmUgZXhwZWN0ZWQgdG8gdXNlIGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigpCisgKiBhbmQgYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoKSB0byByZWdpc3RlciBhbmQgdW5yZWdpc3RlcgorICogdGhlaXIgZXZlbnQgaGFuZGxlcnMuIFNpbmNlIG11bHRpcGxlIElPIGV2ZW50IHR5cGVzIGFuZCBzY29wZXMKKyAqIHNoYXJlIGFuIElPIGV2ZW50IGludGVycnVwdCwgdGhlIGV2ZW50IGhhbmRsZXJzIGFyZSBjYWxsZWQgb25lCisgKiBieSBvbmUgdW50aWwgdGhlIElPIGV2ZW50IGlzIGNsYWltZWQgYnkgb25lIG9mIHRoZSBoYW5kbGVycy4KKyAqIFRoZSBldmVudCBoYW5kbGVycyBhcmUgZXhwZWN0ZWQgdG8gcmV0dXJuIE5PVElGWV9PSyBpZiB0aGUKKyAqIGV2ZW50IGlzIGhhbmRsZWQgYnkgdGhlIGV2ZW50IGhhbmRsZXIgb3IgTk9USUZZX0RPTkUgaWYgdGhlCisgKiBldmVudCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIGhhbmRsZXIuCisgKgorICogVXNhZ2U6CisgKgorICogTm90aWZpZXIgZnVuY3Rpb246CisgKiAjaW5jbHVkZSA8YXNtL2lvX2V2ZW50X2lycS5oPgorICogaW50IGV2ZW50X2hhbmRsZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpIHsKKyAqIAlwID0gKHN0cnVjdCBwc2VyaWVzX2lvX2V2ZW50X3NlY3RfZGF0YSAqKSBkYXRhOworICogCWlmICghIGlzX215X2V2ZW50KHAtPnNjb3BlLCBwLT5ldmVudF90eXBlKSkgcmV0dXJuIE5PVElGWV9ET05FOworICogCQk6CisgKiAJCToKKyAqIAlyZXR1cm4gTk9USUZZX09LOworICogfQorICogc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGV2ZW50X25iID0geworICogCS5ub3RpZmllcl9jYWxsID0gZXZlbnRfaGFuZGxlciwKKyAqIH0KKyAqCisgKiBSZWdpc3RyYXRpb246CisgKiBhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBzZXJpZXNfaW9laV9ub3RpZmllcl9saXN0LCAmZXZlbnRfbmIpOworICoKKyAqIFVucmVnaXN0cmF0aW9uOgorICogYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJnBzZXJpZXNfaW9laV9ub3RpZmllcl9saXN0LCAmZXZlbnRfbmIpOworICovCisKK0FUT01JQ19OT1RJRklFUl9IRUFEKHBzZXJpZXNfaW9laV9ub3RpZmllcl9saXN0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKHBzZXJpZXNfaW9laV9ub3RpZmllcl9saXN0KTsKKworc3RhdGljIGludCBpb2VpX2NoZWNrX2V4Y2VwdGlvbl90b2tlbjsKKworLyogcFNlcmllcyBldmVudCBsb2cgZm9ybWF0ICovCisKKy8qIFR3byBieXRlcyBBU0NJSSBzZWN0aW9uIElEcyAqLworI2RlZmluZSBQU0VSSUVTX0VMT0dfU0VDVF9JRF9QUklWX0hEUgkJKCgnUCcgPDwgOCkgfCAnSCcpCisjZGVmaW5lIFBTRVJJRVNfRUxPR19TRUNUX0lEX1VTRVJfSERSCQkoKCdVJyA8PCA4KSB8ICdIJykKKyNkZWZpbmUgUFNFUklFU19FTE9HX1NFQ1RfSURfUFJJTUFSWV9TUkMJKCgnUCcgPDwgOCkgfCAnUycpCisjZGVmaW5lIFBTRVJJRVNfRUxPR19TRUNUX0lEX0VYVEVOREVEX1VICSgoJ0UnIDw8IDgpIHwgJ0gnKQorI2RlZmluZSBQU0VSSUVTX0VMT0dfU0VDVF9JRF9GQUlMSU5HX01UTVMJKCgnTScgPDwgOCkgfCAnVCcpCisjZGVmaW5lIFBTRVJJRVNfRUxPR19TRUNUX0lEX1NFQ09OREFSWV9TUkMJKCgnUycgPDwgOCkgfCAnUycpCisjZGVmaW5lIFBTRVJJRVNfRUxPR19TRUNUX0lEX0RVTVBfTE9DQVRPUgkoKCdEJyA8PCA4KSB8ICdIJykKKyNkZWZpbmUgUFNFUklFU19FTE9HX1NFQ1RfSURfRldfRVJST1IJCSgoJ1MnIDw8IDgpIHwgJ1cnKQorI2RlZmluZSBQU0VSSUVTX0VMT0dfU0VDVF9JRF9JTVBBQ1RfUEFSVF9JRAkoKCdMJyA8PCA4KSB8ICdQJykKKyNkZWZpbmUgUFNFUklFU19FTE9HX1NFQ1RfSURfTE9HSUNfUkVTT1VSQ0VfSUQJKCgnTCcgPDwgOCkgfCAnUicpCisjZGVmaW5lIFBTRVJJRVNfRUxPR19TRUNUX0lEX0hNQ19JRAkJKCgnSCcgPDwgOCkgfCAnTScpCisjZGVmaW5lIFBTRVJJRVNfRUxPR19TRUNUX0lEX0VQT1cJCSgoJ0UnIDw8IDgpIHwgJ1AnKQorI2RlZmluZSBQU0VSSUVTX0VMT0dfU0VDVF9JRF9JT19FVkVOVAkJKCgnSScgPDwgOCkgfCAnRScpCisjZGVmaW5lIFBTRVJJRVNfRUxPR19TRUNUX0lEX01BTlVGQUNUX0lORk8JKCgnTScgPDwgOCkgfCAnSScpCisjZGVmaW5lIFBTRVJJRVNfRUxPR19TRUNUX0lEX0NBTExfSE9NRQkJKCgnQycgPDwgOCkgfCAnSCcpCisjZGVmaW5lIFBTRVJJRVNfRUxPR19TRUNUX0lEX1VTRVJfREVGCQkoKCdVJyA8PCA4KSB8ICdEJykKKworLyogVmVuZG9yIHNwZWNpZmljIFBsYXRmb3JtIEV2ZW50IExvZyBGb3JtYXQsIFZlcnNpb24gNiwgc2VjdGlvbiBoZWFkZXIgKi8KK3N0cnVjdCBwc2VyaWVzX2Vsb2dfc2VjdGlvbiB7CisJdWludDE2X3QgaWQ7CQkJLyogMHgwMCAyLWJ5dGUgQVNDSUkgc2VjdGlvbiBJRAkqLworCXVpbnQxNl90IGxlbmd0aDsJCS8qIDB4MDIgU2VjdGlvbiBsZW5ndGggaW4gYnl0ZXMJKi8KKwl1aW50OF90IHZlcnNpb247CQkvKiAweDA0IFNlY3Rpb24gdmVyc2lvbgkJKi8KKwl1aW50OF90IHN1YnR5cGU7CQkvKiAweDA1IFNlY3Rpb24gc3VidHlwZQkJKi8KKwl1aW50MTZfdCBjcmVhdG9yX2NvbXBvbmVudDsJLyogMHgwNiBDcmVhdG9yIGNvbXBvbmVudCBJRAkqLworCXVpbnQ4X3QgZGF0YVtdOwkJCS8qIDB4MDggU3RhcnQgb2Ygc2VjdGlvbiBkYXRhCSovCit9OworCitzdGF0aWMgY2hhciBpb2VpX3J0YXNfYnVmW1JUQVNfREFUQV9CVUZfU0laRV0gX19jYWNoZWxpbmVfYWxpZ25lZDsKKworLyoqCisgKiBGaW5kIGRhdGEgcG9ydGlvbiBvZiBhIHNwZWNpZmljIHNlY3Rpb24gaW4gUlRBUyBleHRlbmRlZCBldmVudCBsb2cuCisgKiBAZWxvZzogUlRBUyBlcnJvci9ldmVudCBsb2cuCisgKiBAc2VjdF9pZDogc2Vjc2lvbiBJRC4KKyAqCisgKiBSZXR1cm46CisgKglwb2ludGVyIHRvIHRoZSBzZWN0aW9uIGRhdGEgb2YgdGhlIHNwZWNpZmllZCBzZWN0aW9uCisgKglOVUxMIGlmIG5vdCBmb3VuZAorICovCitzdGF0aWMgc3RydWN0IHBzZXJpZXNfZWxvZ19zZWN0aW9uICpmaW5kX3hlbG9nX3NlY3Rpb24oc3RydWN0IHJ0YXNfZXJyb3JfbG9nICplbG9nLAorCQkJCQkJICAgICAgIHVpbnQxNl90IHNlY3RfaWQpCit7CisJc3RydWN0IHJ0YXNfZXh0X2V2ZW50X2xvZ192NiAqeGVsb2cgPQorCQkoc3RydWN0IHJ0YXNfZXh0X2V2ZW50X2xvZ192NiAqKSBlbG9nLT5idWZmZXI7CisJc3RydWN0IHBzZXJpZXNfZWxvZ19zZWN0aW9uICpzZWN0OworCXVuc2lnbmVkIGNoYXIgKnAsICpsb2dfZW5kOworCisJLyogQ2hlY2sgdGhhdCB3ZSB1bmRlcnN0YW5kIHRoZSBmb3JtYXQgKi8KKwlpZiAoZWxvZy0+ZXh0ZW5kZWRfbG9nX2xlbmd0aCA8IHNpemVvZihzdHJ1Y3QgcnRhc19leHRfZXZlbnRfbG9nX3Y2KSB8fAorCSAgICB4ZWxvZy0+bG9nX2Zvcm1hdCAhPSBSVEFTX1Y2RVhUX0xPR19GT1JNQVRfRVZFTlRfTE9HIHx8CisJICAgIHhlbG9nLT5jb21wYW55X2lkICE9IFJUQVNfVjZFWFRfQ09NUEFOWV9JRF9JQk0pCisJCXJldHVybiBOVUxMOworCisJbG9nX2VuZCA9IGVsb2ctPmJ1ZmZlciArIGVsb2ctPmV4dGVuZGVkX2xvZ19sZW5ndGg7CisJcCA9IHhlbG9nLT52ZW5kb3JfbG9nOworCXdoaWxlIChwIDwgbG9nX2VuZCkgeworCQlzZWN0ID0gKHN0cnVjdCBwc2VyaWVzX2Vsb2dfc2VjdGlvbiAqKXA7CisJCWlmIChzZWN0LT5pZCA9PSBzZWN0X2lkKQorCQkJcmV0dXJuIHNlY3Q7CisJCXAgKz0gc2VjdC0+bGVuZ3RoOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBGaW5kIHRoZSBkYXRhIHBvcnRpb24gb2YgYW4gSU8gRXZlbnQgc2VjdGlvbiBmcm9tIGV2ZW50IGxvZy4KKyAqIEBlbG9nOiBSVEFTIGVycm9yL2V2ZW50IGxvZy4KKyAqCisgKiBSZXR1cm46CisgKiAJcG9pbnRlciB0byBhIHZhbGlkIElPIGV2ZW50IHNlY3Rpb24gZGF0YS4gTlVMTCBpZiBub3QgZm91bmQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcHNlcmllc19pb19ldmVudCAqIGlvZWlfZmluZF9ldmVudChzdHJ1Y3QgcnRhc19lcnJvcl9sb2cgKmVsb2cpCit7CisJc3RydWN0IHBzZXJpZXNfZWxvZ19zZWN0aW9uICpzZWN0OworCisJLyogV2Ugc2hvdWxkIG9ubHkgZXZlciBnZXQgY2FsbGVkIGZvciBpby1ldmVudCBpbnRlcnJ1cHRzLCBidXQgaWYKKwkgKiB3ZSBkbyBnZXQgY2FsbGVkIGZvciBhbm90aGVyIHR5cGUgdGhlbiBzb21ldGhpbmcgd2VudCB3cm9uZyBzbworCSAqIG1ha2Ugc29tZSBub2lzZSBhYm91dCBpdC4KKwkgKiBSVEFTX1RZUEVfSU8gb25seSBleGlzdHMgaW4gZXh0ZW5kZWQgZXZlbnQgbG9nIHZlcnNpb24gNiBvciBsYXRlci4KKwkgKiBObyBuZWVkIHRvIGNoZWNrIGV2ZW50IGxvZyB2ZXJzaW9uLgorCSAqLworCWlmICh1bmxpa2VseShlbG9nLT50eXBlICE9IFJUQVNfVFlQRV9JTykpIHsKKwkJcHJpbnRrX29uY2UoS0VSTl9XQVJOSU5HICJpb19ldmVudF9pcnE6IFVuZXhwZWN0ZWQgZXZlbnQgdHlwZSAlZCIsCisJCQkgICAgZWxvZy0+dHlwZSk7CisJCXJldHVybiBOVUxMOworCX0KKworCXNlY3QgPSBmaW5kX3hlbG9nX3NlY3Rpb24oZWxvZywgUFNFUklFU19FTE9HX1NFQ1RfSURfSU9fRVZFTlQpOworCWlmICh1bmxpa2VseSghc2VjdCkpIHsKKwkJcHJpbnRrX29uY2UoS0VSTl9XQVJOSU5HICJpb19ldmVudF9pcnE6IFJUQVMgZXh0ZW5kZWQgZXZlbnQgIgorCQkJICAgICJsb2cgZG9lcyBub3QgY29udGFpbiBhbiBJTyBFdmVudCBzZWN0aW9uLiAiCisJCQkgICAgIkNvdWxkIGJlIGEgYnVnIGluIHN5c3RlbSBmaXJtd2FyZSFcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIChzdHJ1Y3QgcHNlcmllc19pb19ldmVudCAqKSAmc2VjdC0+ZGF0YTsKK30KKworLyoKKyAqIFBBUFI6CisgKiAtIGNoZWNrLWV4Y2VwdGlvbiByZXR1cm5zIHRoZSBmaXJzdCBmb3VuZCBlcnJvciBvciBldmVudCBhbmQgY2xlYXIgdGhhdAorICogICBlcnJvciBvciBldmVudCBzbyBpdCBpcyByZXBvcnRlZCBvbmNlLgorICogLSBFYWNoIGludGVycnVwdCByZXR1cm5zIG9uZSBldmVudC4gSWYgYSBwbGF0ZWZvcm0gY2hvb3NlcyB0byByZXBvcnQKKyAqICAgbXVsdGlwbGUgZXZlbnRzIHRocm91Z2ggYSBzaW5nbGUgaW50ZXJydXB0LCBpdCBtdXN0IGVuc3VyZSB0aGF0IHRoZQorICogICBpbnRlcnJ1cHQgcmVtYWlucyBhc3NlcnRlZCB1bnRpbCBjaGVjay1leGNlcHRpb24gaGFzIGJlZW4gdXNlZCB0bworICogICBwcm9jZXNzIGFsbCBvdXQtc3RhbmRpbmcgZXZlbnRzIGZvciB0aGF0IGludGVycnVwdC4KKyAqCisgKiBJbXBsZW1lbnRhdGlvbiBub3RlczoKKyAqIC0gRXZlbnRzIG11c3QgYmUgcHJvY2Vzc2VkIGluIHRoZSBvcmRlciB0aGV5IGFyZSByZXR1cm5lZC4gSGVuY2UsCisgKiAgIHNlcXVlbnRpYWwgaW4gbmF0dXJlLgorICogLSBUaGUgb3duZXIgb2YgYW4gZXZlbnQgaXMgZGV0ZXJtaW5lZCBieSBjb21iaW5hdGlvbnMgb2Ygc2NvcGUsCisgKiAgIGV2ZW50IHR5cGUsIGFuZCBzdWItdHlwZS4gVGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gcHJlLXNvcnQgY2xpZW50cworICogICBieSBzY29wZSBvciBldmVudCB0eXBlIGFsb25lLiBGb3IgZXhhbXBsZSwgVG9ycmVudCBJU1Igcm91dGUgY2hhbmdlCisgKiAgIGV2ZW50IGlzIHJlcG9ydGVkIHdpdGggc2NvcGUgMHgwMCAoTm90IEFwcGxpY2F0YWJsZSkgcmF0aGVyIHRoYW4KKyAqICAgMHgzQiAoVG9ycmVudC1odWIpLiBJdCBpcyBiZXR0ZXIgdG8gbGV0IHRoZSBjbGllbnRzIHRvIGlkZW50aWZ5CisgKiAgIHdobyBvd25zIHRoZSB0aGUgZXZlbnQuCisgKi8KKworc3RhdGljIGlycXJldHVybl90IGlvZWlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgcHNlcmllc19pb19ldmVudCAqZXZlbnQ7CisJaW50IHJ0YXNfcmM7CisKKwlmb3IgKDs7KSB7CisJCXJ0YXNfcmMgPSBydGFzX2NhbGwoaW9laV9jaGVja19leGNlcHRpb25fdG9rZW4sIDYsIDEsIE5VTEwsCisJCQkJICAgIFJUQVNfVkVDVE9SX0VYVEVSTkFMX0lOVEVSUlVQVCwKKwkJCQkgICAgdmlycV90b19odyhpcnEpLAorCQkJCSAgICBSVEFTX0lPX0VWRU5UUywgMSAvKiBUaW1lIENyaXRpY2FsICovLAorCQkJCSAgICBfX3BhKGlvZWlfcnRhc19idWYpLAorCQkJCSAgICBSVEFTX0RBVEFfQlVGX1NJWkUpOworCQlpZiAocnRhc19yYyAhPSAwKQorCQkJYnJlYWs7CisKKwkJZXZlbnQgPSBpb2VpX2ZpbmRfZXZlbnQoKHN0cnVjdCBydGFzX2Vycm9yX2xvZyAqKWlvZWlfcnRhc19idWYpOworCQlpZiAoIWV2ZW50KQorCQkJY29udGludWU7CisKKwkJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJnBzZXJpZXNfaW9laV9ub3RpZmllcl9saXN0LAorCQkJCQkgICAwLCBldmVudCk7CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBfX2luaXQgaW9laV9pbml0KHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKworCWlvZWlfY2hlY2tfZXhjZXB0aW9uX3Rva2VuID0gcnRhc190b2tlbigiY2hlY2stZXhjZXB0aW9uIik7CisJaWYgKGlvZWlfY2hlY2tfZXhjZXB0aW9uX3Rva2VuID09IFJUQVNfVU5LTk9XTl9TRVJWSUNFKSB7CisJCXByX3dhcm5pbmcoIklPIEV2ZW50IElSUSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgc3lzdGVtICFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJbnAgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL2V2ZW50LXNvdXJjZXMvaWJtLGlvLWV2ZW50cyIpOworCWlmIChucCkgeworCQlyZXF1ZXN0X2V2ZW50X3NvdXJjZXNfaXJxcyhucCwgaW9laV9pbnRlcnJ1cHQsICJJT19FVkVOVCIpOworCQlvZl9ub2RlX3B1dChucCk7CisJfSBlbHNlIHsKKwkJcHJfZXJyKCJpb19ldmVudF9pcnE6IE5vIGlibSxpby1ldmVudHMgb24gc3lzdGVtISAiCisJCSAgICAgICAiSU8gRXZlbnQgaW50ZXJydXB0IGRpc2FibGVkLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlyZXR1cm4gMDsKK30KK21hY2hpbmVfc3Vic3lzX2luaXRjYWxsKHBzZXJpZXMsIGlvZWlfaW5pdCk7CisKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKaW5kZXggNmQ1NDEyYS4uMDFmYWFiOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKQEAgLTY1OSwxNSArNjU5LDE4IEBACiB7CiAJc3RydWN0IGR5bmFtaWNfZG1hX3dpbmRvd19wcm9wICpkd3A7CiAJc3RydWN0IHByb3BlcnR5ICp3aW42NDsKLQljb25zdCB1MzIgKmRkcl9hdmFpbDsKKwljb25zdCB1MzIgKmRkd19hdmFpbDsKIAl1NjQgbGlvYm47CiAJaW50IGxlbiwgcmV0OwogCi0JZGRyX2F2YWlsID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiaWJtLGRkdy1hcHBsaWNhYmxlIiwgJmxlbik7CisJZGR3X2F2YWlsID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiaWJtLGRkdy1hcHBsaWNhYmxlIiwgJmxlbik7CiAJd2luNjQgPSBvZl9maW5kX3Byb3BlcnR5KG5wLCBESVJFQ1Q2NF9QUk9QTkFNRSwgTlVMTCk7Ci0JaWYgKCF3aW42NCB8fCAhZGRyX2F2YWlsIHx8IGxlbiA8IDMgKiBzaXplb2YodTMyKSkKKwlpZiAoIXdpbjY0KQogCQlyZXR1cm47CiAKKwlpZiAoIWRkd19hdmFpbCB8fCBsZW4gPCAzICogc2l6ZW9mKHUzMikgfHwgd2luNjQtPmxlbmd0aCA8IHNpemVvZigqZHdwKSkKKwkJZ290byBkZWxwcm9wOworCiAJZHdwID0gd2luNjQtPnZhbHVlOwogCWxpb2JuID0gKHU2NCliZTMyX3RvX2NwdShkd3AtPmxpb2JuKTsKIApAQCAtNjgxLDI4ICs2ODQsMjkgQEAKIAkJcHJfZGVidWcoIiVzIHN1Y2Nlc3NmdWxseSBjbGVhcmVkIHRjZXMgaW4gd2luZG93LlxuIiwKIAkJCSBucC0+ZnVsbF9uYW1lKTsKIAotCXJldCA9IHJ0YXNfY2FsbChkZHJfYXZhaWxbMl0sIDEsIDEsIE5VTEwsIGxpb2JuKTsKKwlyZXQgPSBydGFzX2NhbGwoZGR3X2F2YWlsWzJdLCAxLCAxLCBOVUxMLCBsaW9ibik7CiAJaWYgKHJldCkKIAkJcHJfd2FybmluZygiJXM6IGZhaWxlZCB0byByZW1vdmUgZGlyZWN0IHdpbmRvdzogcnRhcyByZXR1cm5lZCAiCiAJCQkiJWQgdG8gaWJtLHJlbW92ZS1wZS1kbWEtd2luZG93KCV4KSAlbGx4XG4iLAotCQkJbnAtPmZ1bGxfbmFtZSwgcmV0LCBkZHJfYXZhaWxbMl0sIGxpb2JuKTsKKwkJCW5wLT5mdWxsX25hbWUsIHJldCwgZGR3X2F2YWlsWzJdLCBsaW9ibik7CiAJZWxzZQogCQlwcl9kZWJ1ZygiJXM6IHN1Y2Nlc3NmdWxseSByZW1vdmVkIGRpcmVjdCB3aW5kb3c6IHJ0YXMgcmV0dXJuZWQgIgogCQkJIiVkIHRvIGlibSxyZW1vdmUtcGUtZG1hLXdpbmRvdygleCkgJWxseFxuIiwKLQkJCW5wLT5mdWxsX25hbWUsIHJldCwgZGRyX2F2YWlsWzJdLCBsaW9ibik7CisJCQlucC0+ZnVsbF9uYW1lLCByZXQsIGRkd19hdmFpbFsyXSwgbGlvYm4pOworCitkZWxwcm9wOgorCXJldCA9IHByb21fcmVtb3ZlX3Byb3BlcnR5KG5wLCB3aW42NCk7CisJaWYgKHJldCkKKwkJcHJfd2FybmluZygiJXM6IGZhaWxlZCB0byByZW1vdmUgZGlyZWN0IHdpbmRvdyBwcm9wZXJ0eTogJWRcbiIsCisJCQlucC0+ZnVsbF9uYW1lLCByZXQpOwogfQogCi0KLXN0YXRpYyBpbnQgZHVwZV9kZHdfaWZfYWxyZWFkeV9jcmVhdGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGRuKQorc3RhdGljIHU2NCBmaW5kX2V4aXN0aW5nX2RkdyhzdHJ1Y3QgZGV2aWNlX25vZGUgKnBkbikKIHsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOwotCXN0cnVjdCBwY2lfZG4gKnBjaWRuOwogCXN0cnVjdCBkaXJlY3Rfd2luZG93ICp3aW5kb3c7CiAJY29uc3Qgc3RydWN0IGR5bmFtaWNfZG1hX3dpbmRvd19wcm9wICpkaXJlY3Q2NDsKIAl1NjQgZG1hX2FkZHIgPSAwOwogCi0JZG4gPSBwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KTsKLQlwY2lkbiA9IFBDSV9ETihkbik7CiAJc3Bpbl9sb2NrKCZkaXJlY3Rfd2luZG93X2xpc3RfbG9jayk7CiAJLyogY2hlY2sgaWYgd2UgYWxyZWFkeSBjcmVhdGVkIGEgd2luZG93IGFuZCBkdXBlIHRoYXQgY29uZmlnIGlmIHNvICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh3aW5kb3csICZkaXJlY3Rfd2luZG93X2xpc3QsIGxpc3QpIHsKQEAgLTcxNywzNiArNzIxLDQwIEBACiAJcmV0dXJuIGRtYV9hZGRyOwogfQogCi1zdGF0aWMgdTY0IGR1cGVfZGR3X2lmX2tleGVjKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGRuKQorc3RhdGljIGludCBmaW5kX2V4aXN0aW5nX2Rkd193aW5kb3dzKHZvaWQpCiB7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpkbjsKLQlzdHJ1Y3QgcGNpX2RuICpwY2lkbjsKIAlpbnQgbGVuOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGRuOwogCXN0cnVjdCBkaXJlY3Rfd2luZG93ICp3aW5kb3c7CiAJY29uc3Qgc3RydWN0IGR5bmFtaWNfZG1hX3dpbmRvd19wcm9wICpkaXJlY3Q2NDsKLQl1NjQgZG1hX2FkZHIgPSAwOwogCi0JZG4gPSBwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KTsKLQlwY2lkbiA9IFBDSV9ETihkbik7Ci0JZGlyZWN0NjQgPSBvZl9nZXRfcHJvcGVydHkocGRuLCBESVJFQ1Q2NF9QUk9QTkFNRSwgJmxlbik7Ci0JaWYgKGRpcmVjdDY0KSB7CisJaWYgKCFmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQorCQlyZXR1cm4gMDsKKworCWZvcl9lYWNoX25vZGVfd2l0aF9wcm9wZXJ0eShwZG4sIERJUkVDVDY0X1BST1BOQU1FKSB7CisJCWRpcmVjdDY0ID0gb2ZfZ2V0X3Byb3BlcnR5KHBkbiwgRElSRUNUNjRfUFJPUE5BTUUsICZsZW4pOworCQlpZiAoIWRpcmVjdDY0KQorCQkJY29udGludWU7CisKIAkJd2luZG93ID0ga3phbGxvYyhzaXplb2YoKndpbmRvdyksIEdGUF9LRVJORUwpOwotCQlpZiAoIXdpbmRvdykgeworCQlpZiAoIXdpbmRvdyB8fCBsZW4gPCBzaXplb2Yoc3RydWN0IGR5bmFtaWNfZG1hX3dpbmRvd19wcm9wKSkgeworCQkJa2ZyZWUod2luZG93KTsKIAkJCXJlbW92ZV9kZHcocGRuKTsKLQkJfSBlbHNlIHsKLQkJCXdpbmRvdy0+ZGV2aWNlID0gcGRuOwotCQkJd2luZG93LT5wcm9wID0gZGlyZWN0NjQ7Ci0JCQlzcGluX2xvY2soJmRpcmVjdF93aW5kb3dfbGlzdF9sb2NrKTsKLQkJCWxpc3RfYWRkKCZ3aW5kb3ctPmxpc3QsICZkaXJlY3Rfd2luZG93X2xpc3QpOwotCQkJc3Bpbl91bmxvY2soJmRpcmVjdF93aW5kb3dfbGlzdF9sb2NrKTsKLQkJCWRtYV9hZGRyID0gZGlyZWN0NjQtPmRtYV9iYXNlOworCQkJY29udGludWU7CiAJCX0KKworCQl3aW5kb3ctPmRldmljZSA9IHBkbjsKKwkJd2luZG93LT5wcm9wID0gZGlyZWN0NjQ7CisJCXNwaW5fbG9jaygmZGlyZWN0X3dpbmRvd19saXN0X2xvY2spOworCQlsaXN0X2FkZCgmd2luZG93LT5saXN0LCAmZGlyZWN0X3dpbmRvd19saXN0KTsKKwkJc3Bpbl91bmxvY2soJmRpcmVjdF93aW5kb3dfbGlzdF9sb2NrKTsKIAl9CiAKLQlyZXR1cm4gZG1hX2FkZHI7CisJcmV0dXJuIDA7CiB9CittYWNoaW5lX2FyY2hfaW5pdGNhbGwocHNlcmllcywgZmluZF9leGlzdGluZ19kZHdfd2luZG93cyk7CiAKLXN0YXRpYyBpbnQgcXVlcnlfZGR3KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHUzMiAqZGRyX2F2YWlsLAorc3RhdGljIGludCBxdWVyeV9kZHcoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3QgdTMyICpkZHdfYXZhaWwsCiAJCQlzdHJ1Y3QgZGR3X3F1ZXJ5X3Jlc3BvbnNlICpxdWVyeSkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOwpAQCAtNzY3LDE1ICs3NzUsMTUgQEAKIAlpZiAocGNpZG4tPmVlaF9wZV9jb25maWdfYWRkcikKIAkJY2ZnX2FkZHIgPSBwY2lkbi0+ZWVoX3BlX2NvbmZpZ19hZGRyOwogCWJ1aWQgPSBwY2lkbi0+cGhiLT5idWlkOwotCXJldCA9IHJ0YXNfY2FsbChkZHJfYXZhaWxbMF0sIDMsIDUsICh1MzIgKilxdWVyeSwKKwlyZXQgPSBydGFzX2NhbGwoZGR3X2F2YWlsWzBdLCAzLCA1LCAodTMyICopcXVlcnksCiAJCSAgY2ZnX2FkZHIsIEJVSURfSEkoYnVpZCksIEJVSURfTE8oYnVpZCkpOwogCWRldl9pbmZvKCZkZXYtPmRldiwgImlibSxxdWVyeS1wZS1kbWEtd2luZG93cygleCkgJXggJXggJXgiCi0JCSIgcmV0dXJuZWQgJWRcbiIsIGRkcl9hdmFpbFswXSwgY2ZnX2FkZHIsIEJVSURfSEkoYnVpZCksCisJCSIgcmV0dXJuZWQgJWRcbiIsIGRkd19hdmFpbFswXSwgY2ZnX2FkZHIsIEJVSURfSEkoYnVpZCksCiAJCUJVSURfTE8oYnVpZCksIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBjcmVhdGVfZGR3KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHUzMiAqZGRyX2F2YWlsLAorc3RhdGljIGludCBjcmVhdGVfZGR3KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHUzMiAqZGR3X2F2YWlsLAogCQkJc3RydWN0IGRkd19jcmVhdGVfcmVzcG9uc2UgKmNyZWF0ZSwgaW50IHBhZ2Vfc2hpZnQsCiAJCQlpbnQgd2luZG93X3NoaWZ0KQogewpAQCAtODAwLDEyICs4MDgsMTIgQEAKIAogCWRvIHsKIAkJLyogZXh0cmEgb3V0cHV0cyBhcmUgTElPQk4gYW5kIGRtYS1hZGRyIChoaSwgbG8pICovCi0JCXJldCA9IHJ0YXNfY2FsbChkZHJfYXZhaWxbMV0sIDUsIDQsICh1MzIgKiljcmVhdGUsIGNmZ19hZGRyLAorCQlyZXQgPSBydGFzX2NhbGwoZGR3X2F2YWlsWzFdLCA1LCA0LCAodTMyICopY3JlYXRlLCBjZmdfYWRkciwKIAkJCQlCVUlEX0hJKGJ1aWQpLCBCVUlEX0xPKGJ1aWQpLCBwYWdlX3NoaWZ0LCB3aW5kb3dfc2hpZnQpOwogCX0gd2hpbGUgKHJ0YXNfYnVzeV9kZWxheShyZXQpKTsKIAlkZXZfaW5mbygmZGV2LT5kZXYsCiAJCSJpYm0sY3JlYXRlLXBlLWRtYS13aW5kb3coJXgpICV4ICV4ICV4ICV4ICV4IHJldHVybmVkICVkICIKLQkJIihsaW9ibiA9IDB4JXggc3RhcnRpbmcgYWRkciA9ICV4ICV4KVxuIiwgZGRyX2F2YWlsWzFdLAorCQkiKGxpb2JuID0gMHgleCBzdGFydGluZyBhZGRyID0gJXggJXgpXG4iLCBkZHdfYXZhaWxbMV0sCiAJCSBjZmdfYWRkciwgQlVJRF9ISShidWlkKSwgQlVJRF9MTyhidWlkKSwgcGFnZV9zaGlmdCwKIAkJIHdpbmRvd19zaGlmdCwgcmV0LCBjcmVhdGUtPmxpb2JuLCBjcmVhdGUtPmFkZHJfaGksIGNyZWF0ZS0+YWRkcl9sbyk7CiAKQEAgLTgzMSwxOCArODM5LDE0IEBACiAJaW50IHBhZ2Vfc2hpZnQ7CiAJdTY0IGRtYV9hZGRyLCBtYXhfYWRkcjsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOwotCWNvbnN0IHUzMiAqdW5pbml0aWFsaXplZF92YXIoZGRyX2F2YWlsKTsKKwljb25zdCB1MzIgKnVuaW5pdGlhbGl6ZWRfdmFyKGRkd19hdmFpbCk7CiAJc3RydWN0IGRpcmVjdF93aW5kb3cgKndpbmRvdzsKLQlzdHJ1Y3QgcHJvcGVydHkgKnVuaW5pdGlhbGl6ZWRfdmFyKHdpbjY0KTsKKwlzdHJ1Y3QgcHJvcGVydHkgKndpbjY0OwogCXN0cnVjdCBkeW5hbWljX2RtYV93aW5kb3dfcHJvcCAqZGR3cHJvcDsKIAogCW11dGV4X2xvY2soJmRpcmVjdF93aW5kb3dfaW5pdF9tdXRleCk7CiAKLQlkbWFfYWRkciA9IGR1cGVfZGR3X2lmX2FscmVhZHlfY3JlYXRlZChkZXYsIHBkbik7Ci0JaWYgKGRtYV9hZGRyICE9IDApCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCWRtYV9hZGRyID0gZHVwZV9kZHdfaWZfa2V4ZWMoZGV2LCBwZG4pOworCWRtYV9hZGRyID0gZmluZF9leGlzdGluZ19kZHcocGRuKTsKIAlpZiAoZG1hX2FkZHIgIT0gMCkKIAkJZ290byBvdXRfdW5sb2NrOwogCkBAIC04NTQsOCArODU4LDggQEAKIAkgKiBmb3IgdGhlIGdpdmVuIG5vZGUgaW4gdGhhdCBvcmRlci4KIAkgKiB0aGUgcHJvcGVydHkgaXMgYWN0dWFsbHkgaW4gdGhlIHBhcmVudCwgbm90IHRoZSBQRQogCSAqLwotCWRkcl9hdmFpbCA9IG9mX2dldF9wcm9wZXJ0eShwZG4sICJpYm0sZGR3LWFwcGxpY2FibGUiLCAmbGVuKTsKLQlpZiAoIWRkcl9hdmFpbCB8fCBsZW4gPCAzICogc2l6ZW9mKHUzMikpCisJZGR3X2F2YWlsID0gb2ZfZ2V0X3Byb3BlcnR5KHBkbiwgImlibSxkZHctYXBwbGljYWJsZSIsICZsZW4pOworCWlmICghZGR3X2F2YWlsIHx8IGxlbiA8IDMgKiBzaXplb2YodTMyKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCiAgICAgICAgLyoKQEAgLTg2NSw3ICs4NjksNyBAQAogCSAqIG9mIHBhZ2Ugc2l6ZXM6IHN1cHBvcnRlZCBhbmQgc3VwcG9ydGVkIGZvciBtaWdyYXRlLWRtYS4KIAkgKi8KIAlkbiA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOwotCXJldCA9IHF1ZXJ5X2RkdyhkZXYsIGRkcl9hdmFpbCwgJnF1ZXJ5KTsKKwlyZXQgPSBxdWVyeV9kZHcoZGV2LCBkZHdfYXZhaWwsICZxdWVyeSk7CiAJaWYgKHJldCAhPSAwKQogCQlnb3RvIG91dF91bmxvY2s7CiAKQEAgLTkwNywxMyArOTExLDE0IEBACiAJfQogCXdpbjY0LT5uYW1lID0ga3N0cmR1cChESVJFQ1Q2NF9QUk9QTkFNRSwgR0ZQX0tFUk5FTCk7CiAJd2luNjQtPnZhbHVlID0gZGR3cHJvcCA9IGttYWxsb2Moc2l6ZW9mKCpkZHdwcm9wKSwgR0ZQX0tFUk5FTCk7CisJd2luNjQtPmxlbmd0aCA9IHNpemVvZigqZGR3cHJvcCk7CiAJaWYgKCF3aW42NC0+bmFtZSB8fCAhd2luNjQtPnZhbHVlKSB7CiAJCWRldl9pbmZvKCZkZXYtPmRldiwKIAkJCSJjb3VsZG4ndCBhbGxvY2F0ZSBwcm9wZXJ0eSBuYW1lIGFuZCB2YWx1ZVxuIik7CiAJCWdvdG8gb3V0X2ZyZWVfcHJvcDsKIAl9CiAKLQlyZXQgPSBjcmVhdGVfZGR3KGRldiwgZGRyX2F2YWlsLCAmY3JlYXRlLCBwYWdlX3NoaWZ0LCBsZW4pOworCXJldCA9IGNyZWF0ZV9kZHcoZGV2LCBkZHdfYXZhaWwsICZjcmVhdGUsIHBhZ2Vfc2hpZnQsIGxlbik7CiAJaWYgKHJldCAhPSAwKQogCQlnb3RvIG91dF9mcmVlX3Byb3A7CiAKQEAgLTEwMjEsMTMgKzEwMjYsMTYgQEAKIAljb25zdCB2b2lkICpkbWFfd2luZG93ID0gTlVMTDsKIAl1NjQgZG1hX29mZnNldDsKIAotCWlmICghZGV2LT5kbWFfbWFzayB8fCAhZG1hX3N1cHBvcnRlZChkZXYsIGRtYV9tYXNrKSkKKwlpZiAoIWRldi0+ZG1hX21hc2spCiAJCXJldHVybiAtRUlPOwogCisJaWYgKCFkZXZfaXNfcGNpKGRldikpCisJCWdvdG8gY2hlY2tfbWFzazsKKworCXBkZXYgPSB0b19wY2lfZGV2KGRldik7CisKIAkvKiBvbmx5IGF0dGVtcHQgdG8gdXNlIGEgbmV3IHdpbmRvdyBpZiA2NC1iaXQgRE1BIGlzIHJlcXVlc3RlZCAqLwogCWlmICghZGlzYWJsZV9kZHcgJiYgZG1hX21hc2sgPT0gRE1BX0JJVF9NQVNLKDY0KSkgewotCQlwZGV2ID0gdG9fcGNpX2RldihkZXYpOwotCiAJCWRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKHBkZXYpOwogCQlkZXZfZGJnKGRldiwgIm5vZGUgaXMgJXNcbiIsIGRuLT5mdWxsX25hbWUpOwogCkBAIC0xMDU0LDEyICsxMDYyLDE3IEBACiAJCX0KIAl9CiAKLQkvKiBmYWxsLXRocm91Z2ggdG8gaW9tbXUgb3BzICovCi0JaWYgKCFkZHdfZW5hYmxlZCkgewotCQlkZXZfaW5mbyhkZXYsICJVc2luZyAzMi1iaXQgRE1BIHZpYSBpb21tdVxuIik7CisJLyogZmFsbCBiYWNrIG9uIGlvbW11IG9wcywgcmVzdG9yZSB0YWJsZSBwb2ludGVyIHdpdGggb3BzICovCisJaWYgKCFkZHdfZW5hYmxlZCAmJiBnZXRfZG1hX29wcyhkZXYpICE9ICZkbWFfaW9tbXVfb3BzKSB7CisJCWRldl9pbmZvKGRldiwgIlJlc3RvcmluZyAzMi1iaXQgRE1BIHZpYSBpb21tdVxuIik7CiAJCXNldF9kbWFfb3BzKGRldiwgJmRtYV9pb21tdV9vcHMpOworCQlwY2lfZG1hX2Rldl9zZXR1cF9wU2VyaWVzTFAocGRldik7CiAJfQogCitjaGVja19tYXNrOgorCWlmICghZG1hX3N1cHBvcnRlZChkZXYsIGRtYV9tYXNrKSkKKwkJcmV0dXJuIC1FSU87CisKIAkqZGV2LT5kbWFfbWFzayA9IGRtYV9tYXNrOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2tleGVjLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMva2V4ZWMuYwppbmRleCA3N2QzOGE1Li41NGNmM2E0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMva2V4ZWMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMva2V4ZWMuYwpAQCAtNywxNSArNywxOCBAQAogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2tleGVjLmg+CiAjaW5jbHVkZSA8YXNtL21waWMuaD4KKyNpbmNsdWRlIDxhc20veGljcy5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KIAogI2luY2x1ZGUgInBzZXJpZXMuaCIKLSNpbmNsdWRlICJ4aWNzLmgiCiAjaW5jbHVkZSAicGxwYXJfd3JhcHBlcnMuaCIKIAogc3RhdGljIHZvaWQgcHNlcmllc19rZXhlY19jcHVfZG93bihpbnQgY3Jhc2hfc2h1dGRvd24sIGludCBzZWNvbmRhcnkpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhci5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXIuYwppbmRleCBjYTVkNTg5Li4zOWU2ZTBhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhci5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMKQEAgLTMyOSw2ICszMjksOCBAQAogCS8qIE1ha2UgcEh5cCBoYXBweSAqLwogCWlmICgocmZsYWdzICYgX1BBR0VfTk9fQ0FDSEUpICYgIShyZmxhZ3MgJiBfUEFHRV9XUklURVRIUlUpKQogCQlocHRlX3IgJj0gfl9QQUdFX0NPSEVSRU5UOworCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX1hDTU8pICYmICEoaHB0ZV9yICYgSFBURV9SX04pKQorCQlmbGFncyB8PSBIX0NPQUxFU0NFX0NBTkQ7CiAKIAlscGFyX3JjID0gcGxwYXJfcHRlX2VudGVyKGZsYWdzLCBocHRlX2dyb3VwLCBocHRlX3YsIGhwdGVfciwgJnNsb3QpOwogCWlmICh1bmxpa2VseShscGFyX3JjID09IEhfUFRFR19GVUxMKSkgewpAQCAtNTczLDcgKzU3NSw3IEBACiAJdW5zaWduZWQgbG9uZyBpLCBwaXgsIHJjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCXN0cnVjdCBwcGM2NF90bGJfYmF0Y2ggKmJhdGNoID0gJl9fZ2V0X2NwdV92YXIocHBjNjRfdGxiX2JhdGNoKTsKLQlpbnQgbG9ja190bGJpZSA9ICFjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9MT0NLTEVTU19UTEJJRSk7CisJaW50IGxvY2tfdGxiaWUgPSAhbW11X2hhc19mZWF0dXJlKE1NVV9GVFJfTE9DS0xFU1NfVExCSUUpOwogCXVuc2lnbmVkIGxvbmcgcGFyYW1bOV07CiAJdW5zaWduZWQgbG9uZyB2YTsKIAl1bnNpZ25lZCBsb25nIGhhc2gsIGluZGV4LCBzaGlmdCwgaGlkeCwgc2xvdDsKQEAgLTc3MSwzICs3NzMsNDcgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAjZW5kaWYKKworLyoqCisgKiBoX2dldF9tcHAKKyAqIEhfR0VUX01QUCBoY2FsbCByZXR1cm5zIGluZm8gaW4gNyBwYXJtcworICovCitpbnQgaF9nZXRfbXBwKHN0cnVjdCBodmNhbGxfbXBwX2RhdGEgKm1wcF9kYXRhKQoreworCWludCByYzsKKwl1bnNpZ25lZCBsb25nIHJldGJ1ZltQTFBBUl9IQ0FMTDlfQlVGU0laRV07CisKKwlyYyA9IHBscGFyX2hjYWxsOShIX0dFVF9NUFAsIHJldGJ1Zik7CisKKwltcHBfZGF0YS0+ZW50aXRsZWRfbWVtID0gcmV0YnVmWzBdOworCW1wcF9kYXRhLT5tYXBwZWRfbWVtID0gcmV0YnVmWzFdOworCisJbXBwX2RhdGEtPmdyb3VwX251bSA9IChyZXRidWZbMl0gPj4gMiAqIDgpICYgMHhmZmZmOworCW1wcF9kYXRhLT5wb29sX251bSA9IHJldGJ1ZlsyXSAmIDB4ZmZmZjsKKworCW1wcF9kYXRhLT5tZW1fd2VpZ2h0ID0gKHJldGJ1ZlszXSA+PiA3ICogOCkgJiAweGZmOworCW1wcF9kYXRhLT51bmFsbG9jYXRlZF9tZW1fd2VpZ2h0ID0gKHJldGJ1ZlszXSA+PiA2ICogOCkgJiAweGZmOworCW1wcF9kYXRhLT51bmFsbG9jYXRlZF9lbnRpdGxlbWVudCA9IHJldGJ1ZlszXSAmIDB4ZmZmZmZmZmZmZmZmOworCisJbXBwX2RhdGEtPnBvb2xfc2l6ZSA9IHJldGJ1Zls0XTsKKwltcHBfZGF0YS0+bG9hbl9yZXF1ZXN0ID0gcmV0YnVmWzVdOworCW1wcF9kYXRhLT5iYWNraW5nX21lbSA9IHJldGJ1Zls2XTsKKworCXJldHVybiByYzsKK30KK0VYUE9SVF9TWU1CT0woaF9nZXRfbXBwKTsKKworaW50IGhfZ2V0X21wcF94KHN0cnVjdCBodmNhbGxfbXBwX3hfZGF0YSAqbXBwX3hfZGF0YSkKK3sKKwlpbnQgcmM7CisJdW5zaWduZWQgbG9uZyByZXRidWZbUExQQVJfSENBTEw5X0JVRlNJWkVdID0geyAwIH07CisKKwlyYyA9IHBscGFyX2hjYWxsOShIX0dFVF9NUFBfWCwgcmV0YnVmKTsKKworCW1wcF94X2RhdGEtPmNvYWxlc2NlZF9ieXRlcyA9IHJldGJ1ZlswXTsKKwltcHBfeF9kYXRhLT5wb29sX2NvYWxlc2NlZF9ieXRlcyA9IHJldGJ1ZlsxXTsKKwltcHBfeF9kYXRhLT5wb29sX3B1cnJfY3ljbGVzID0gcmV0YnVmWzJdOworCW1wcF94X2RhdGEtPnBvb2xfc3B1cnJfY3ljbGVzID0gcmV0YnVmWzNdOworCisJcmV0dXJuIHJjOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BscGFyX3dyYXBwZXJzLmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGxwYXJfd3JhcHBlcnMuaAppbmRleCBkOTgwMTExLi40YmYyMTIwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGxwYXJfd3JhcHBlcnMuaAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGxwYXJfd3JhcHBlcnMuaApAQCAtMjcwLDMxICsyNzAsNCBAQAogCQkJbGJ1ZlsxXSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgbG9uZyBwbHBhcl9lb2kodW5zaWduZWQgbG9uZyB4aXJyKQotewotCXJldHVybiBwbHBhcl9oY2FsbF9ub3JldHMoSF9FT0ksIHhpcnIpOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgcGxwYXJfY3Bwcih1bnNpZ25lZCBsb25nIGNwcHIpCi17Ci0JcmV0dXJuIHBscGFyX2hjYWxsX25vcmV0cyhIX0NQUFIsIGNwcHIpOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgcGxwYXJfaXBpKHVuc2lnbmVkIGxvbmcgc2VydmVybnVtLCB1bnNpZ25lZCBsb25nIG1mcnIpCi17Ci0JcmV0dXJuIHBscGFyX2hjYWxsX25vcmV0cyhIX0lQSSwgc2VydmVybnVtLCBtZnJyKTsKLX0KLQotc3RhdGljIGlubGluZSBsb25nIHBscGFyX3hpcnIodW5zaWduZWQgbG9uZyAqeGlycl9yZXQsIHVuc2lnbmVkIGNoYXIgY3BwcikKLXsKLQlsb25nIHJjOwotCXVuc2lnbmVkIGxvbmcgcmV0YnVmW1BMUEFSX0hDQUxMX0JVRlNJWkVdOwotCi0JcmMgPSBwbHBhcl9oY2FsbChIX1hJUlIsIHJldGJ1ZiwgY3Bwcik7Ci0KLQkqeGlycl9yZXQgPSByZXRidWZbMF07Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KICNlbmRpZiAvKiBfUFNFUklFU19QTFBBUl9XUkFQUEVSU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcmFzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcmFzLmMKaW5kZXggYzU1ZDdhZC4uMDg2ZDJhZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Jhcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yYXMuYwpAQCAtMTIyLDcgKzEyMiw3IEBACiAKIAlzdGF0dXMgPSBydGFzX2NhbGwocmFzX2NoZWNrX2V4Y2VwdGlvbl90b2tlbiwgNiwgMSwgTlVMTCwKIAkJCSAgIFJUQVNfVkVDVE9SX0VYVEVSTkFMX0lOVEVSUlVQVCwKLQkJCSAgIGlycV9tYXBbaXJxXS5od2lycSwKKwkJCSAgIHZpcnFfdG9faHcoaXJxKSwKIAkJCSAgIFJUQVNfRVBPV19XQVJOSU5HIHwgUlRBU19QT1dFUk1HTV9FVkVOVFMsCiAJCQkgICBjcml0aWNhbCwgX19wYSgmcmFzX2xvZ19idWYpLAogCQkJCXJ0YXNfZ2V0X2Vycm9yX2xvZ19tYXgoKSk7CkBAIC0xNTcsNyArMTU3LDcgQEAKIAogCXN0YXR1cyA9IHJ0YXNfY2FsbChyYXNfY2hlY2tfZXhjZXB0aW9uX3Rva2VuLCA2LCAxLCBOVUxMLAogCQkJICAgUlRBU19WRUNUT1JfRVhURVJOQUxfSU5URVJSVVBULAotCQkJICAgaXJxX21hcFtpcnFdLmh3aXJxLAorCQkJICAgdmlycV90b19odyhpcnEpLAogCQkJICAgUlRBU19JTlRFUk5BTF9FUlJPUiwgMSAvKlRpbWUgQ3JpdGljYWwgKi8sCiAJCQkgICBfX3BhKCZyYXNfbG9nX2J1ZiksCiAJCQkJcnRhc19nZXRfZXJyb3JfbG9nX21heCgpKTsKQEAgLTIyNyw3ICsyMjcsNyBAQAogCXN0cnVjdCBydGFzX2Vycm9yX2xvZyAqaCwgKmVycmhkciA9IE5VTEw7CiAKIAlpZiAoIVZBTElEX0ZXTk1JX0JVRkZFUihyZWdzLT5ncHJbM10pKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRldOTUk6IGNvcnJ1cHQgcjNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkZXTk1JOiBjb3JydXB0IHIzIDB4JTAxNmx4XG4iLCByZWdzLT5ncHJbM10pOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKaW5kZXggNmM0MmNmZC4uNTkzYWNjZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKQEAgLTUzLDkgKzUzLDkgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vbnZyYW0uaD4KLSNpbmNsdWRlICJ4aWNzLmgiCiAjaW5jbHVkZSA8YXNtL3BtYy5oPgogI2luY2x1ZGUgPGFzbS9tcGljLmg+CisjaW5jbHVkZSA8YXNtL3hpY3MuaD4KICNpbmNsdWRlIDxhc20vcHBjLXBjaS5oPgogI2luY2x1ZGUgPGFzbS9pODI1OS5oPgogI2luY2x1ZGUgPGFzbS91ZGJnLmg+CkBAIC0yMDUsNiArMjA1LDkgQEAKIAkJbXBpY19hc3NpZ25faXN1KG1waWMsIG4sIGlzdWFkZHIpOwogCX0KIAorCS8qIFNldHVwIHRvcC1sZXZlbCBnZXRfaXJxICovCisJcHBjX21kLmdldF9pcnEgPSBtcGljX2dldF9pcnE7CisKIAkvKiBBbGwgSVNVcyBhcmUgc2V0dXAsIGNvbXBsZXRlIGluaXRpYWxpemF0aW9uICovCiAJbXBpY19pbml0KG1waWMpOwogCkBAIC0yMTQsNyArMjE3LDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHBzZXJpZXNfeGljc19pbml0X0lSUSh2b2lkKQogewotCXhpY3NfaW5pdF9JUlEoKTsKKwl4aWNzX2luaXQoKTsKIAlwc2VyaWVzX3NldHVwX2k4MjU5X2Nhc2NhZGUoKTsKIH0KIApAQCAtMjM4LDcgKzI0MSw2IEBACiAJCWlmIChzdHJzdHIodHlwZXAsICJvcGVuLXBpYyIpKSB7CiAJCQlwU2VyaWVzX21waWNfbm9kZSA9IG9mX25vZGVfZ2V0KG5wKTsKIAkJCXBwY19tZC5pbml0X0lSUSAgICAgICA9IHBzZXJpZXNfbXBpY19pbml0X0lSUTsKLQkJCXBwY19tZC5nZXRfaXJxICAgICAgICA9IG1waWNfZ2V0X2lycTsKIAkJCXNldHVwX2tleGVjX2NwdV9kb3duX21waWMoKTsKIAkJCXNtcF9pbml0X3BzZXJpZXNfbXBpYygpOwogCQkJcmV0dXJuOwpAQCAtMjc2LDYgKzI3OCw4IEBACiAJLm5vdGlmaWVyX2NhbGwgPSBwY2lfZG5fcmVjb25maWdfbm90aWZpZXIsCiB9OwogCitzdHJ1Y3Qga21lbV9jYWNoZSAqZHRsX2NhY2hlOworCiAjaWZkZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKIC8qCiAgKiBBbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIGRpc3BhdGNoIHRyYWNlIGxvZyBmb3IgYWxsIHBvc3NpYmxlIGNwdXMKQEAgLTI4NywxOCArMjkxLDEyIEBACiAJaW50IGNwdSwgcmV0OwogCXN0cnVjdCBwYWNhX3N0cnVjdCAqcHA7CiAJc3RydWN0IGR0bF9lbnRyeSAqZHRsOwotCXN0cnVjdCBrbWVtX2NhY2hlICpkdGxfY2FjaGU7CiAKIAlpZiAoIWZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfU1BMUEFSKSkKIAkJcmV0dXJuIDA7CiAKLQlkdGxfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiZHRsIiwgRElTUEFUQ0hfTE9HX0JZVEVTLAotCQkJCQkJRElTUEFUQ0hfTE9HX0JZVEVTLCAwLCBOVUxMKTsKLQlpZiAoIWR0bF9jYWNoZSkgewotCQlwcl93YXJuKCJGYWlsZWQgdG8gY3JlYXRlIGRpc3BhdGNoIHRyYWNlIGxvZyBidWZmZXIgY2FjaGVcbiIpOwotCQlwcl93YXJuKCJTdG9sZW4gdGltZSBzdGF0aXN0aWNzIHdpbGwgYmUgdW5yZWxpYWJsZVxuIik7CisJaWYgKCFkdGxfY2FjaGUpCiAJCXJldHVybiAwOwotCX0KIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJcHAgPSAmcGFjYVtjcHVdOwpAQCAtMzMyLDEwICszMzAsMjcgQEAKIAogCXJldHVybiAwOwogfQotCi1lYXJseV9pbml0Y2FsbChhbGxvY19kaXNwYXRjaF9sb2dzKTsKKyNlbHNlIC8qICFDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORyAqLworc3RhdGljIGlubGluZSBpbnQgYWxsb2NfZGlzcGF0Y2hfbG9ncyh2b2lkKQoreworCXJldHVybiAwOworfQogI2VuZGlmIC8qIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HICovCiAKK3N0YXRpYyBpbnQgYWxsb2NfZGlzcGF0Y2hfbG9nX2ttZW1fY2FjaGUodm9pZCkKK3sKKwlkdGxfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiZHRsIiwgRElTUEFUQ0hfTE9HX0JZVEVTLAorCQkJCQkJRElTUEFUQ0hfTE9HX0JZVEVTLCAwLCBOVUxMKTsKKwlpZiAoIWR0bF9jYWNoZSkgeworCQlwcl93YXJuKCJGYWlsZWQgdG8gY3JlYXRlIGRpc3BhdGNoIHRyYWNlIGxvZyBidWZmZXIgY2FjaGVcbiIpOworCQlwcl93YXJuKCJTdG9sZW4gdGltZSBzdGF0aXN0aWNzIHdpbGwgYmUgdW5yZWxpYWJsZVxuIik7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBhbGxvY19kaXNwYXRjaF9sb2dzKCk7Cit9CitlYXJseV9pbml0Y2FsbChhbGxvY19kaXNwYXRjaF9sb2dfa21lbV9jYWNoZSk7CisKIHN0YXRpYyB2b2lkIF9faW5pdCBwU2VyaWVzX3NldHVwX2FyY2godm9pZCkKIHsKIAkvKiBEaXNjb3ZlciBQSUMgdHlwZSBhbmQgc2V0dXAgcHBjX21kIGFjY29yZGluZ2x5ICovCkBAIC00MDMsNiArNDE4LDE2IEBACiAjZGVmaW5lIENNT19DSEFSQUNURVJJU1RJQ1NfVE9LRU4gNDQKICNkZWZpbmUgQ01PX01BWExFTkdUSCAxMDI2CiAKK3ZvaWQgcFNlcmllc19jb2FsZXNjZV9pbml0KHZvaWQpCit7CisJc3RydWN0IGh2Y2FsbF9tcHBfeF9kYXRhIG1wcF94X2RhdGE7CisKKwlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9DTU8pICYmICFoX2dldF9tcHBfeCgmbXBwX3hfZGF0YSkpCisJCXBvd2VycGNfZmlybXdhcmVfZmVhdHVyZXMgfD0gRldfRkVBVFVSRV9YQ01POworCWVsc2UKKwkJcG93ZXJwY19maXJtd2FyZV9mZWF0dXJlcyAmPSB+RldfRkVBVFVSRV9YQ01POworfQorCiAvKioKICAqIGZ3X2Ntb19mZWF0dXJlX2luaXQgLSBGV19GRUFUVVJFX0NNTyBpcyBub3Qgc3RvcmVkIGluIGlibSxoeXBlcnRhcy1mdW5jdGlvbnMsCiAgKiBoYW5kbGUgdGhhdCBoZXJlLiAoU3RvbGVuIGZyb20gcGFyc2Vfc3lzdGVtX3BhcmFtZXRlcl9zdHJpbmcpCkBAIC00NzIsNiArNDk3LDcgQEAKIAkJcHJfZGVidWcoIkNNTyBlbmFibGVkLCBQclBTUD0lZCwgU2VjUFNQPSVkXG4iLCBDTU9fUHJQU1AsCiAJCSAgICAgICAgIENNT19TZWNQU1ApOwogCQlwb3dlcnBjX2Zpcm13YXJlX2ZlYXR1cmVzIHw9IEZXX0ZFQVRVUkVfQ01POworCQlwU2VyaWVzX2NvYWxlc2NlX2luaXQoKTsKIAl9IGVsc2UKIAkJcHJfZGVidWcoIkNNTyBub3QgZW5hYmxlZCwgUHJQU1A9JWQsIFNlY1BTUD0lZFxuIiwgQ01PX1ByUFNQLAogCQkgICAgICAgICBDTU9fU2VjUFNQKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYwppbmRleCBhNTA5YzUyLi5mYmZmZDdlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jCkBAIC00NCwxMCArNDQsMTEgQEAKICNpbmNsdWRlIDxhc20vbXBpYy5oPgogI2luY2x1ZGUgPGFzbS92ZHNvX2RhdGFwYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXRocmVhZHMuaD4KKyNpbmNsdWRlIDxhc20vbXBpYy5oPgorI2luY2x1ZGUgPGFzbS94aWNzLmg+CiAKICNpbmNsdWRlICJwbHBhcl93cmFwcGVycy5oIgogI2luY2x1ZGUgInBzZXJpZXMuaCIKLSNpbmNsdWRlICJ4aWNzLmgiCiAjaW5jbHVkZSAib2ZmbGluZV9zdGF0ZXMuaCIKIAogCkBAIC0xMzYsNyArMTM3LDYgQEAKIAlyZXR1cm4gMTsKIH0KIAotI2lmZGVmIENPTkZJR19YSUNTCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgc21wX3hpY3Nfc2V0dXBfY3B1KGludCBjcHUpCiB7CiAJaWYgKGNwdSAhPSBib290X2NwdWlkKQpAQCAtMTUxLDE0ICsxNTEsMTMgQEAKIAlzZXRfZGVmYXVsdF9vZmZsaW5lX3N0YXRlKGNwdSk7CiAjZW5kaWYKIH0KLSNlbmRpZiAvKiBDT05GSUdfWElDUyAqLwogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgc21wX3BTZXJpZXNfa2lja19jcHUoaW50IG5yKQorc3RhdGljIGludCBfX2RldmluaXQgc21wX3BTZXJpZXNfa2lja19jcHUoaW50IG5yKQogewogCUJVR19PTihuciA8IDAgfHwgbnIgPj0gTlJfQ1BVUyk7CiAKIAlpZiAoIXNtcF9zdGFydHVwX2NwdShucikpCi0JCXJldHVybjsKKwkJcmV0dXJuIC1FTk9FTlQ7CiAKIAkvKgogCSAqIFRoZSBwcm9jZXNzb3IgaXMgY3VycmVudGx5IHNwaW5uaW5nLCB3YWl0aW5nIGZvciB0aGUKQEAgLTE4MCw2ICsxNzksOCBAQAogCQkJCQkJIlJldD0gJWxkXG4iLCBuciwgcmMpOwogCX0KICNlbmRpZgorCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc21wX3BTZXJpZXNfY3B1X2Jvb3RhYmxlKHVuc2lnbmVkIGludCBucikKQEAgLTE5NywyMyArMTk4LDIyIEBACiAKIAlyZXR1cm4gMTsKIH0KLSNpZmRlZiBDT05GSUdfTVBJQworCiBzdGF0aWMgc3RydWN0IHNtcF9vcHNfdCBwU2VyaWVzX21waWNfc21wX29wcyA9IHsKIAkubWVzc2FnZV9wYXNzCT0gc21wX21waWNfbWVzc2FnZV9wYXNzLAogCS5wcm9iZQkJPSBzbXBfbXBpY19wcm9iZSwKIAkua2lja19jcHUJPSBzbXBfcFNlcmllc19raWNrX2NwdSwKIAkuc2V0dXBfY3B1CT0gc21wX21waWNfc2V0dXBfY3B1LAogfTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19YSUNTCisKIHN0YXRpYyBzdHJ1Y3Qgc21wX29wc190IHBTZXJpZXNfeGljc19zbXBfb3BzID0gewotCS5tZXNzYWdlX3Bhc3MJPSBzbXBfeGljc19tZXNzYWdlX3Bhc3MsCi0JLnByb2JlCQk9IHNtcF94aWNzX3Byb2JlLAorCS5tZXNzYWdlX3Bhc3MJPSBzbXBfbXV4ZWRfaXBpX21lc3NhZ2VfcGFzcywKKwkuY2F1c2VfaXBpCT0gTlVMTCwJLyogRmlsbGVkIGF0IHJ1bnRpbWUgYnkgeGljc19zbXBfcHJvYmUoKSAqLworCS5wcm9iZQkJPSB4aWNzX3NtcF9wcm9iZSwKIAkua2lja19jcHUJPSBzbXBfcFNlcmllc19raWNrX2NwdSwKIAkuc2V0dXBfY3B1CT0gc21wX3hpY3Nfc2V0dXBfY3B1LAogCS5jcHVfYm9vdGFibGUJPSBzbXBfcFNlcmllc19jcHVfYm9vdGFibGUsCiB9OwotI2VuZGlmCiAKIC8qIFRoaXMgaXMgY2FsbGVkIHZlcnkgZWFybHkgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBzbXBfaW5pdF9wc2VyaWVzKHZvaWQpCkBAIC0yNDUsMTQgKzI0NSwxMiBAQAogCXByX2RlYnVnKCIgPC0gc21wX2luaXRfcFNlcmllcygpXG4iKTsKIH0KIAotI2lmZGVmIENPTkZJR19NUElDCiB2b2lkIF9faW5pdCBzbXBfaW5pdF9wc2VyaWVzX21waWModm9pZCkKIHsKIAlzbXBfb3BzID0gJnBTZXJpZXNfbXBpY19zbXBfb3BzOwogCiAJc21wX2luaXRfcHNlcmllcygpOwogfQotI2VuZGlmCiAKIHZvaWQgX19pbml0IHNtcF9pbml0X3BzZXJpZXNfeGljcyh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2OTAxMzMuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYworKysgL2Rldi9udWxsCkBAIC0xLDk0OSArMCwwIEBACi0vKgotICogYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYwotICoKLSAqIENvcHlyaWdodCAyMDAwIElCTSBDb3Jwb3JhdGlvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3JhZGl4LXRyZWUuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHUuaD4KLSNpbmNsdWRlIDxsaW51eC9tc2kuaD4KLSNpbmNsdWRlIDxsaW51eC9vZi5oPgotI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgotCi0jaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vc21wLmg+Ci0jaW5jbHVkZSA8YXNtL3J0YXMuaD4KLSNpbmNsdWRlIDxhc20vaHZjYWxsLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KLQotI2luY2x1ZGUgInhpY3MuaCIKLSNpbmNsdWRlICJwbHBhcl93cmFwcGVycy5oIgotCi1zdGF0aWMgc3RydWN0IGlycV9ob3N0ICp4aWNzX2hvc3Q7Ci0KLSNkZWZpbmUgWElDU19JUEkJCTIKLSNkZWZpbmUgWElDU19JUlFfU1BVUklPVVMJMAotCi0vKiBXYW50IGEgcHJpb3JpdHkgb3RoZXIgdGhhbiAwLiAgVmFyaW91cyBIVyBpc3N1ZXMgcmVxdWlyZSB0aGlzLiAqLwotI2RlZmluZQlERUZBVUxUX1BSSU9SSVRZCTUKLQotLyoKLSAqIE1hcmsgSVBJcyBhcyBoaWdoZXIgcHJpb3JpdHkgc28gd2UgY2FuIHRha2UgdGhlbSBpbnNpZGUgaW50ZXJydXB0cyB0aGF0Ci0gKiBhcmVudCBtYXJrZWQgSVJRRl9ESVNBQkxFRAotICovCi0jZGVmaW5lIElQSV9QUklPUklUWQkJNAotCi0vKiBUaGUgbGVhc3QgZmF2b3JlZCBwcmlvcml0eSAqLwotI2RlZmluZSBMT1dFU1RfUFJJT1JJVFkJCTB4RkYKLQotLyogVGhlIG51bWJlciBvZiBwcmlvcml0aWVzIGRlZmluZWQgYWJvdmUgKi8KLSNkZWZpbmUgTUFYX05VTV9QUklPUklUSUVTCTMKLQotc3RhdGljIHVuc2lnbmVkIGludCBkZWZhdWx0X3NlcnZlciA9IDB4RkY7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGRlZmF1bHRfZGlzdHJpYl9zZXJ2ZXIgPSAwOwotc3RhdGljIHVuc2lnbmVkIGludCBpbnRlcnJ1cHRfc2VydmVyX3NpemUgPSA4OwotCi0vKiBSVEFTIHNlcnZpY2UgdG9rZW5zICovCi1zdGF0aWMgaW50IGlibV9nZXRfeGl2ZTsKLXN0YXRpYyBpbnQgaWJtX3NldF94aXZlOwotc3RhdGljIGludCBpYm1faW50X29uOwotc3RhdGljIGludCBpYm1faW50X29mZjsKLQotc3RydWN0IHhpY3NfY3BwciB7Ci0JdW5zaWduZWQgY2hhciBzdGFja1tNQVhfTlVNX1BSSU9SSVRJRVNdOwotCWludCBpbmRleDsKLX07Ci0KLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgeGljc19jcHByLCB4aWNzX2NwcHIpOwotCi0vKiBEaXJlY3QgaGFyZHdhcmUgbG93IGxldmVsIGFjY2Vzc29ycyAqLwotCi0vKiBUaGUgcGFydCBvZiB0aGUgaW50ZXJydXB0IHByZXNlbnRhdGlvbiBsYXllciB0aGF0IHdlIGNhcmUgYWJvdXQgKi8KLXN0cnVjdCB4aWNzX2lwbCB7Ci0JdW5pb24gewotCQl1MzIgd29yZDsKLQkJdTggYnl0ZXNbNF07Ci0JfSB4aXJyX3BvbGw7Ci0JdW5pb24gewotCQl1MzIgd29yZDsKLQkJdTggYnl0ZXNbNF07Ci0JfSB4aXJyOwotCXUzMiBkdW1teTsKLQl1bmlvbiB7Ci0JCXUzMiB3b3JkOwotCQl1OCBieXRlc1s0XTsKLQl9IHFpcnI7Ci19OwotCi1zdGF0aWMgc3RydWN0IHhpY3NfaXBsIF9faW9tZW0gKnhpY3NfcGVyX2NwdVtOUl9DUFVTXTsKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGlyZWN0X3hpcnJfaW5mb19nZXQodm9pZCkKLXsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JcmV0dXJuIGluX2JlMzIoJnhpY3NfcGVyX2NwdVtjcHVdLT54aXJyLndvcmQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZGlyZWN0X3hpcnJfaW5mb19zZXQodW5zaWduZWQgaW50IHZhbHVlKQotewotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlvdXRfYmUzMigmeGljc19wZXJfY3B1W2NwdV0tPnhpcnIud29yZCwgdmFsdWUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZGlyZWN0X2NwcHJfaW5mbyh1OCB2YWx1ZSkKLXsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0Jb3V0XzgoJnhpY3NfcGVyX2NwdVtjcHVdLT54aXJyLmJ5dGVzWzBdLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkaXJlY3RfcWlycl9pbmZvKGludCBuX2NwdSwgdTggdmFsdWUpCi17Ci0Jb3V0XzgoJnhpY3NfcGVyX2NwdVtuX2NwdV0tPnFpcnIuYnl0ZXNbMF0sIHZhbHVlKTsKLX0KLQotCi0vKiBMUEFSIGxvdyBsZXZlbCBhY2Nlc3NvcnMgKi8KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbHBhcl94aXJyX2luZm9fZ2V0KHVuc2lnbmVkIGNoYXIgY3BwcikKLXsKLQl1bnNpZ25lZCBsb25nIGxwYXJfcmM7Ci0JdW5zaWduZWQgbG9uZyByZXR1cm5fdmFsdWU7Ci0KLQlscGFyX3JjID0gcGxwYXJfeGlycigmcmV0dXJuX3ZhbHVlLCBjcHByKTsKLQlpZiAobHBhcl9yYyAhPSBIX1NVQ0NFU1MpCi0JCXBhbmljKCIgYmFkIHJldHVybiBjb2RlIHhpcnIgLSByYyA9ICVseFxuIiwgbHBhcl9yYyk7Ci0JcmV0dXJuICh1bnNpZ25lZCBpbnQpcmV0dXJuX3ZhbHVlOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbHBhcl94aXJyX2luZm9fc2V0KHVuc2lnbmVkIGludCB2YWx1ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGxwYXJfcmM7Ci0KLQlscGFyX3JjID0gcGxwYXJfZW9pKHZhbHVlKTsKLQlpZiAobHBhcl9yYyAhPSBIX1NVQ0NFU1MpCi0JCXBhbmljKCJiYWQgcmV0dXJuIGNvZGUgRU9JIC0gcmMgPSAlbGQsIHZhbHVlPSV4XG4iLCBscGFyX3JjLAotCQkgICAgICB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBscGFyX2NwcHJfaW5mbyh1OCB2YWx1ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGxwYXJfcmM7Ci0KLQlscGFyX3JjID0gcGxwYXJfY3Bwcih2YWx1ZSk7Ci0JaWYgKGxwYXJfcmMgIT0gSF9TVUNDRVNTKQotCQlwYW5pYygiYmFkIHJldHVybiBjb2RlIGNwcHIgLSByYyA9ICVseFxuIiwgbHBhcl9yYyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBscGFyX3FpcnJfaW5mbyhpbnQgbl9jcHUgLCB1OCB2YWx1ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGxwYXJfcmM7Ci0KLQlscGFyX3JjID0gcGxwYXJfaXBpKGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQobl9jcHUpLCB2YWx1ZSk7Ci0JaWYgKGxwYXJfcmMgIT0gSF9TVUNDRVNTKQotCQlwYW5pYygiYmFkIHJldHVybiBjb2RlIHFpcnIgLSByYyA9ICVseFxuIiwgbHBhcl9yYyk7Ci19Ci0KLQotLyogSW50ZXJmYWNlIHRvIGdlbmVyaWMgaXJxIHN1YnN5c3RlbSAqLwotCi0jaWZkZWYgQ09ORklHX1NNUAotLyoKLSAqIEZvciB0aGUgbW9tZW50IHdlIG9ubHkgaW1wbGVtZW50IGRlbGl2ZXJ5IHRvIGFsbCBjcHVzIG9yIG9uZSBjcHUuCi0gKgotICogSWYgdGhlIHJlcXVlc3RlZCBhZmZpbml0eSBpcyBjcHVfYWxsX21hc2ssIHdlIHNldCBnbG9iYWwgYWZmaW5pdHkuCi0gKiBJZiBub3Qgd2Ugc2V0IGl0IHRvIHRoZSBmaXJzdCBjcHUgaW4gdGhlIG1hc2ssIGV2ZW4gaWYgbXVsdGlwbGUgY3B1cwotICogYXJlIHNldC4gVGhpcyBpcyBzbyB0aGluZ3MgbGlrZSBpcnFiYWxhbmNlICh3aGljaCBzZXQgY29yZSBhbmQgcGFja2FnZQotICogd2lkZSBhZmZpbml0aWVzKSBkbyB0aGUgcmlnaHQgdGhpbmcuCi0gKi8KLXN0YXRpYyBpbnQgZ2V0X2lycV9zZXJ2ZXIodW5zaWduZWQgaW50IHZpcnEsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAotCQkJICB1bnNpZ25lZCBpbnQgc3RyaWN0X2NoZWNrKQotewotCi0JaWYgKCFkaXN0cmlidXRlX2lycXMpCi0JCXJldHVybiBkZWZhdWx0X3NlcnZlcjsKLQotCWlmICghY3B1bWFza19zdWJzZXQoY3B1X3Bvc3NpYmxlX21hc2ssIGNwdW1hc2spKSB7Ci0JCWludCBzZXJ2ZXIgPSBjcHVtYXNrX2ZpcnN0X2FuZChjcHVfb25saW5lX21hc2ssIGNwdW1hc2spOwotCi0JCWlmIChzZXJ2ZXIgPCBucl9jcHVfaWRzKQotCQkJcmV0dXJuIGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoc2VydmVyKTsKLQotCQlpZiAoc3RyaWN0X2NoZWNrKQotCQkJcmV0dXJuIC0xOwotCX0KLQotCS8qCi0JICogV29ya2Fyb3VuZCBpc3N1ZSB3aXRoIHNvbWUgdmVyc2lvbnMgb2YgSlMyMCBmaXJtd2FyZSB0aGF0Ci0JICogZGVsaXZlciBpbnRlcnJ1cHRzIHRvIGNwdXMgd2hpY2ggaGF2ZW4ndCBiZWVuIHN0YXJ0ZWQuIFRoaXMKLQkgKiBoYXBwZW5zIHdoZW4gdXNpbmcgdGhlIG1heGNwdXM9IGJvb3Qgb3B0aW9uLgotCSAqLwotCWlmIChjcHVtYXNrX2VxdWFsKGNwdV9vbmxpbmVfbWFzaywgY3B1X3ByZXNlbnRfbWFzaykpCi0JCXJldHVybiBkZWZhdWx0X2Rpc3RyaWJfc2VydmVyOwotCi0JcmV0dXJuIGRlZmF1bHRfc2VydmVyOwotfQotI2Vsc2UKLSNkZWZpbmUgZ2V0X2lycV9zZXJ2ZXIodmlycSwgY3B1bWFzaywgc3RyaWN0X2NoZWNrKSAoZGVmYXVsdF9zZXJ2ZXIpCi0jZW5kaWYKLQotc3RhdGljIHZvaWQgeGljc191bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKLXsKLQl1bnNpZ25lZCBpbnQgaHdpcnE7Ci0JaW50IGNhbGxfc3RhdHVzOwotCWludCBzZXJ2ZXI7Ci0KLQlwcl9kZXZlbCgieGljczogdW5tYXNrIHZpcnEgJWRcbiIsIGQtPmlycSk7Ci0KLQlod2lycSA9ICh1bnNpZ25lZCBpbnQpaXJxX21hcFtkLT5pcnFdLmh3aXJxOwotCXByX2RldmVsKCIgLT4gbWFwIHRvIGh3aXJxIDB4JXhcbiIsIGh3aXJxKTsKLQlpZiAoaHdpcnEgPT0gWElDU19JUEkgfHwgaHdpcnEgPT0gWElDU19JUlFfU1BVUklPVVMpCi0JCXJldHVybjsKLQotCXNlcnZlciA9IGdldF9pcnFfc2VydmVyKGQtPmlycSwgZC0+YWZmaW5pdHksIDApOwotCi0JY2FsbF9zdGF0dXMgPSBydGFzX2NhbGwoaWJtX3NldF94aXZlLCAzLCAxLCBOVUxMLCBod2lycSwgc2VydmVyLAotCQkJCURFRkFVTFRfUFJJT1JJVFkpOwotCWlmIChjYWxsX3N0YXR1cyAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkJIiVzOiBpYm1fc2V0X3hpdmUgaXJxICV1IHNlcnZlciAleCByZXR1cm5lZCAlZFxuIiwKLQkJCV9fZnVuY19fLCBod2lycSwgc2VydmVyLCBjYWxsX3N0YXR1cyk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBOb3cgdW5tYXNrIHRoZSBpbnRlcnJ1cHQgKG9mdGVuIGEgbm8tb3ApICovCi0JY2FsbF9zdGF0dXMgPSBydGFzX2NhbGwoaWJtX2ludF9vbiwgMSwgMSwgTlVMTCwgaHdpcnEpOwotCWlmIChjYWxsX3N0YXR1cyAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGlibV9pbnRfb24gaXJxPSV1IHJldHVybmVkICVkXG4iLAotCQkJX19mdW5jX18sIGh3aXJxLCBjYWxsX3N0YXR1cyk7Ci0JCXJldHVybjsKLQl9Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgeGljc19zdGFydHVwKHN0cnVjdCBpcnFfZGF0YSAqZCkKLXsKLQkvKgotCSAqIFRoZSBnZW5lcmljIE1TSSBjb2RlIHJldHVybnMgd2l0aCB0aGUgaW50ZXJydXB0IGRpc2FibGVkIG9uIHRoZQotCSAqIGNhcmQsIHVzaW5nIHRoZSBNU0kgbWFzayBiaXRzLiBGaXJtd2FyZSBkb2Vzbid0IGFwcGVhciB0byB1bm1hc2sKLQkgKiBhdCB0aGF0IGxldmVsLCBzbyB3ZSBkbyBpdCBoZXJlIGJ5IGhhbmQuCi0JICovCi0JaWYgKGQtPm1zaV9kZXNjKQotCQl1bm1hc2tfbXNpX2lycShkKTsKLQotCS8qIHVubWFzayBpdCAqLwotCXhpY3NfdW5tYXNrX2lycShkKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgeGljc19tYXNrX3JlYWxfaXJxKHVuc2lnbmVkIGludCBod2lycSkKLXsKLQlpbnQgY2FsbF9zdGF0dXM7Ci0KLQlpZiAoaHdpcnEgPT0gWElDU19JUEkpCi0JCXJldHVybjsKLQotCWNhbGxfc3RhdHVzID0gcnRhc19jYWxsKGlibV9pbnRfb2ZmLCAxLCAxLCBOVUxMLCBod2lycSk7Ci0JaWYgKGNhbGxfc3RhdHVzICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogaWJtX2ludF9vZmYgaXJxPSV1IHJldHVybmVkICVkXG4iLAotCQkJX19mdW5jX18sIGh3aXJxLCBjYWxsX3N0YXR1cyk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBIYXZlIHRvIHNldCBYSVZFIHRvIDB4ZmYgdG8gYmUgYWJsZSB0byByZW1vdmUgYSBzbG90ICovCi0JY2FsbF9zdGF0dXMgPSBydGFzX2NhbGwoaWJtX3NldF94aXZlLCAzLCAxLCBOVUxMLCBod2lycSwKLQkJCQlkZWZhdWx0X3NlcnZlciwgMHhmZik7Ci0JaWYgKGNhbGxfc3RhdHVzICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogaWJtX3NldF94aXZlKDB4ZmYpIGlycT0ldSByZXR1cm5lZCAlZFxuIiwKLQkJCV9fZnVuY19fLCBod2lycSwgY2FsbF9zdGF0dXMpOwotCQlyZXR1cm47Ci0JfQotfQotCi1zdGF0aWMgdm9pZCB4aWNzX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKLXsKLQl1bnNpZ25lZCBpbnQgaHdpcnE7Ci0KLQlwcl9kZXZlbCgieGljczogbWFzayB2aXJxICVkXG4iLCBkLT5pcnEpOwotCi0JaHdpcnEgPSAodW5zaWduZWQgaW50KWlycV9tYXBbZC0+aXJxXS5od2lycTsKLQlpZiAoaHdpcnEgPT0gWElDU19JUEkgfHwgaHdpcnEgPT0gWElDU19JUlFfU1BVUklPVVMpCi0JCXJldHVybjsKLQl4aWNzX21hc2tfcmVhbF9pcnEoaHdpcnEpOwotfQotCi1zdGF0aWMgdm9pZCB4aWNzX21hc2tfdW5rbm93bl92ZWModW5zaWduZWQgaW50IHZlYykKLXsKLQlwcmludGsoS0VSTl9FUlIgIkludGVycnVwdCAldSAocmVhbCkgaXMgaW52YWxpZCwgZGlzYWJsaW5nIGl0LlxuIiwgdmVjKTsKLQl4aWNzX21hc2tfcmVhbF9pcnEodmVjKTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgeGljc194aXJyX3ZlY3Rvcih1bnNpZ25lZCBpbnQgeGlycikKLXsKLQkvKgotCSAqIFRoZSB0b3AgYnl0ZSBpcyB0aGUgb2xkIGNwcHIsIHRvIGJlIHJlc3RvcmVkIG9uIEVPSS4KLQkgKiBUaGUgcmVtYWluaW5nIDI0IGJpdHMgYXJlIHRoZSB2ZWN0b3IuCi0JICovCi0JcmV0dXJuIHhpcnIgJiAweDAwZmZmZmZmOwotfQotCi1zdGF0aWMgdm9pZCBwdXNoX2NwcHIodW5zaWduZWQgaW50IHZlYykKLXsKLQlzdHJ1Y3QgeGljc19jcHByICpvc19jcHByID0gJl9fZ2V0X2NwdV92YXIoeGljc19jcHByKTsKLQotCWlmIChXQVJOX09OKG9zX2NwcHItPmluZGV4ID49IE1BWF9OVU1fUFJJT1JJVElFUyAtIDEpKQotCQlyZXR1cm47Ci0KLQlpZiAodmVjID09IFhJQ1NfSVBJKQotCQlvc19jcHByLT5zdGFja1srK29zX2NwcHItPmluZGV4XSA9IElQSV9QUklPUklUWTsKLQllbHNlCi0JCW9zX2NwcHItPnN0YWNrWysrb3NfY3Bwci0+aW5kZXhdID0gREVGQVVMVF9QUklPUklUWTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCB4aWNzX2dldF9pcnFfZGlyZWN0KHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHhpcnIgPSBkaXJlY3RfeGlycl9pbmZvX2dldCgpOwotCXVuc2lnbmVkIGludCB2ZWMgPSB4aWNzX3hpcnJfdmVjdG9yKHhpcnIpOwotCXVuc2lnbmVkIGludCBpcnE7Ci0KLQlpZiAodmVjID09IFhJQ1NfSVJRX1NQVVJJT1VTKQotCQlyZXR1cm4gTk9fSVJROwotCi0JaXJxID0gaXJxX3JhZGl4X3Jldm1hcF9sb29rdXAoeGljc19ob3N0LCB2ZWMpOwotCWlmIChsaWtlbHkoaXJxICE9IE5PX0lSUSkpIHsKLQkJcHVzaF9jcHByKHZlYyk7Ci0JCXJldHVybiBpcnE7Ci0JfQotCi0JLyogV2UgZG9uJ3QgaGF2ZSBhIGxpbnV4IG1hcHBpbmcsIHNvIGhhdmUgcnRhcyBtYXNrIGl0LiAqLwotCXhpY3NfbWFza191bmtub3duX3ZlYyh2ZWMpOwotCi0JLyogV2UgbWlnaHQgbGVhcm4gYWJvdXQgaXQgbGF0ZXIsIHNvIEVPSSBpdCAqLwotCWRpcmVjdF94aXJyX2luZm9fc2V0KHhpcnIpOwotCXJldHVybiBOT19JUlE7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgeGljc19nZXRfaXJxX2xwYXIodm9pZCkKLXsKLQlzdHJ1Y3QgeGljc19jcHByICpvc19jcHByID0gJl9fZ2V0X2NwdV92YXIoeGljc19jcHByKTsKLQl1bnNpZ25lZCBpbnQgeGlyciA9IGxwYXJfeGlycl9pbmZvX2dldChvc19jcHByLT5zdGFja1tvc19jcHByLT5pbmRleF0pOwotCXVuc2lnbmVkIGludCB2ZWMgPSB4aWNzX3hpcnJfdmVjdG9yKHhpcnIpOwotCXVuc2lnbmVkIGludCBpcnE7Ci0KLQlpZiAodmVjID09IFhJQ1NfSVJRX1NQVVJJT1VTKQotCQlyZXR1cm4gTk9fSVJROwotCi0JaXJxID0gaXJxX3JhZGl4X3Jldm1hcF9sb29rdXAoeGljc19ob3N0LCB2ZWMpOwotCWlmIChsaWtlbHkoaXJxICE9IE5PX0lSUSkpIHsKLQkJcHVzaF9jcHByKHZlYyk7Ci0JCXJldHVybiBpcnE7Ci0JfQotCi0JLyogV2UgZG9uJ3QgaGF2ZSBhIGxpbnV4IG1hcHBpbmcsIHNvIGhhdmUgUlRBUyBtYXNrIGl0LiAqLwotCXhpY3NfbWFza191bmtub3duX3ZlYyh2ZWMpOwotCi0JLyogV2UgbWlnaHQgbGVhcm4gYWJvdXQgaXQgbGF0ZXIsIHNvIEVPSSBpdCAqLwotCWxwYXJfeGlycl9pbmZvX3NldCh4aXJyKTsKLQlyZXR1cm4gTk9fSVJROwotfQotCi1zdGF0aWMgdW5zaWduZWQgY2hhciBwb3BfY3Bwcih2b2lkKQotewotCXN0cnVjdCB4aWNzX2NwcHIgKm9zX2NwcHIgPSAmX19nZXRfY3B1X3Zhcih4aWNzX2NwcHIpOwotCi0JaWYgKFdBUk5fT04ob3NfY3Bwci0+aW5kZXggPCAxKSkKLQkJcmV0dXJuIExPV0VTVF9QUklPUklUWTsKLQotCXJldHVybiBvc19jcHByLT5zdGFja1stLW9zX2NwcHItPmluZGV4XTsKLX0KLQotc3RhdGljIHZvaWQgeGljc19lb2lfZGlyZWN0KHN0cnVjdCBpcnFfZGF0YSAqZCkKLXsKLQl1bnNpZ25lZCBpbnQgaHdpcnEgPSAodW5zaWduZWQgaW50KWlycV9tYXBbZC0+aXJxXS5od2lycTsKLQotCWlvc3luYygpOwotCWRpcmVjdF94aXJyX2luZm9fc2V0KChwb3BfY3BwcigpIDw8IDI0KSB8IGh3aXJxKTsKLX0KLQotc3RhdGljIHZvaWQgeGljc19lb2lfbHBhcihzdHJ1Y3QgaXJxX2RhdGEgKmQpCi17Ci0JdW5zaWduZWQgaW50IGh3aXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW2QtPmlycV0uaHdpcnE7Ci0KLQlpb3N5bmMoKTsKLQlscGFyX3hpcnJfaW5mb19zZXQoKHBvcF9jcHByKCkgPDwgMjQpIHwgaHdpcnEpOwotfQotCi1zdGF0aWMgaW50Ci14aWNzX3NldF9hZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEgKmQsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLCBib29sIGZvcmNlKQotewotCXVuc2lnbmVkIGludCBod2lycTsKLQlpbnQgc3RhdHVzOwotCWludCB4aWNzX3N0YXR1c1syXTsKLQlpbnQgaXJxX3NlcnZlcjsKLQotCWh3aXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW2QtPmlycV0uaHdpcnE7Ci0JaWYgKGh3aXJxID09IFhJQ1NfSVBJIHx8IGh3aXJxID09IFhJQ1NfSVJRX1NQVVJJT1VTKQotCQlyZXR1cm4gLTE7Ci0KLQlzdGF0dXMgPSBydGFzX2NhbGwoaWJtX2dldF94aXZlLCAxLCAzLCB4aWNzX3N0YXR1cywgaHdpcnEpOwotCi0JaWYgKHN0YXR1cykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpYm0sZ2V0LXhpdmUgaXJxPSV1IHJldHVybnMgJWRcbiIsCi0JCQlfX2Z1bmNfXywgaHdpcnEsIHN0YXR1cyk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlpcnFfc2VydmVyID0gZ2V0X2lycV9zZXJ2ZXIoZC0+aXJxLCBjcHVtYXNrLCAxKTsKLQlpZiAoaXJxX3NlcnZlciA9PSAtMSkgewotCQljaGFyIGNwdWxpc3RbMTI4XTsKLQkJY3B1bWFza19zY25wcmludGYoY3B1bGlzdCwgc2l6ZW9mKGNwdWxpc3QpLCBjcHVtYXNrKTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJIiVzOiBObyBvbmxpbmUgY3B1cyBpbiB0aGUgbWFzayAlcyBmb3IgaXJxICVkXG4iLAotCQkJX19mdW5jX18sIGNwdWxpc3QsIGQtPmlycSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlzdGF0dXMgPSBydGFzX2NhbGwoaWJtX3NldF94aXZlLCAzLCAxLCBOVUxMLAotCQkJCWh3aXJxLCBpcnFfc2VydmVyLCB4aWNzX3N0YXR1c1sxXSk7Ci0KLQlpZiAoc3RhdHVzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGlibSxzZXQteGl2ZSBpcnE9JXUgcmV0dXJucyAlZFxuIiwKLQkJCV9fZnVuY19fLCBod2lycSwgc3RhdHVzKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIHhpY3NfcGljX2RpcmVjdCA9IHsKLQkubmFtZSA9ICJYSUNTIiwKLQkuaXJxX3N0YXJ0dXAgPSB4aWNzX3N0YXJ0dXAsCi0JLmlycV9tYXNrID0geGljc19tYXNrX2lycSwKLQkuaXJxX3VubWFzayA9IHhpY3NfdW5tYXNrX2lycSwKLQkuaXJxX2VvaSA9IHhpY3NfZW9pX2RpcmVjdCwKLQkuaXJxX3NldF9hZmZpbml0eSA9IHhpY3Nfc2V0X2FmZmluaXR5Ci19OwotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIHhpY3NfcGljX2xwYXIgPSB7Ci0JLm5hbWUgPSAiWElDUyIsCi0JLmlycV9zdGFydHVwID0geGljc19zdGFydHVwLAotCS5pcnFfbWFzayA9IHhpY3NfbWFza19pcnEsCi0JLmlycV91bm1hc2sgPSB4aWNzX3VubWFza19pcnEsCi0JLmlycV9lb2kgPSB4aWNzX2VvaV9scGFyLAotCS5pcnFfc2V0X2FmZmluaXR5ID0geGljc19zZXRfYWZmaW5pdHkKLX07Ci0KLQotLyogSW50ZXJmYWNlIHRvIGFyY2ggaXJxIGNvbnRyb2xsZXIgc3Vic3lzdGVtIGxheWVyICovCi0KLS8qIFBvaW50cyB0byB0aGUgaXJxX2NoaXAgd2UncmUgYWN0dWFsbHkgdXNpbmcgKi8KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgKnhpY3NfaXJxX2NoaXA7Ci0KLXN0YXRpYyBpbnQgeGljc19ob3N0X21hdGNoKHN0cnVjdCBpcnFfaG9zdCAqaCwgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQotewotCS8qIElCTSBtYWNoaW5lcyBoYXZlIGludGVycnVwdCBwYXJlbnRzIG9mIHZhcmlvdXMgZnVua3kgdHlwZXMgZm9yIHRoaW5ncwotCSAqIGxpa2UgdmRldmljZXMsIGV2ZW50cywgZXRjLi4uIFRoZSB0cmljayB3ZSB1c2UgaGVyZSBpcyB0byBtYXRjaAotCSAqIGV2ZXJ5dGhpbmcgaGVyZSBleGNlcHQgdGhlIGxlZ2FjeSA4MjU5IHdoaWNoIGlzIGNvbXBhdGlibGUgImNocnAsaWljIgotCSAqLwotCXJldHVybiAhb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobm9kZSwgImNocnAsaWljIik7Ci19Ci0KLXN0YXRpYyBpbnQgeGljc19ob3N0X21hcChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHVuc2lnbmVkIGludCB2aXJxLAotCQkJIGlycV9od19udW1iZXJfdCBodykKLXsKLQlwcl9kZXZlbCgieGljczogbWFwIHZpcnEgJWQsIGh3aXJxIDB4JWx4XG4iLCB2aXJxLCBodyk7Ci0KLQkvKiBJbnNlcnQgdGhlIGludGVycnVwdCBtYXBwaW5nIGludG8gdGhlIHJhZGl4IHRyZWUgZm9yIGZhc3QgbG9va3VwICovCi0JaXJxX3JhZGl4X3Jldm1hcF9pbnNlcnQoeGljc19ob3N0LCB2aXJxLCBodyk7Ci0KLQlpcnFfc2V0X3N0YXR1c19mbGFncyh2aXJxLCBJUlFfTEVWRUwpOwotCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCB4aWNzX2lycV9jaGlwLCBoYW5kbGVfZmFzdGVvaV9pcnEpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHhpY3NfaG9zdF94bGF0ZShzdHJ1Y3QgaXJxX2hvc3QgKmgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY3QsCi0JCQkgICBjb25zdCB1MzIgKmludHNwZWMsIHVuc2lnbmVkIGludCBpbnRzaXplLAotCQkJICAgaXJxX2h3X251bWJlcl90ICpvdXRfaHdpcnEsIHVuc2lnbmVkIGludCAqb3V0X2ZsYWdzKQotCi17Ci0JLyogQ3VycmVudCB4aWNzIGltcGxlbWVudGF0aW9uIHRyYW5zbGF0ZXMgZXZlcnl0aGluZwotCSAqIHRvIGxldmVsLiBJdCBpcyBub3QgdGVjaG5pY2FsbHkgcmlnaHQgZm9yIE1TSXMgYnV0IHRoaXMKLQkgKiBpcyBpcnJlbGV2YW50IGF0IHRoaXMgcG9pbnQuIFdlIG1pZ2h0IGdldCBzbWFydGVyIGluIHRoZSBmdXR1cmUKLQkgKi8KLQkqb3V0X2h3aXJxID0gaW50c3BlY1swXTsKLQkqb3V0X2ZsYWdzID0gSVJRX1RZUEVfTEVWRUxfTE9XOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2hvc3Rfb3BzIHhpY3NfaG9zdF9vcHMgPSB7Ci0JLm1hdGNoID0geGljc19ob3N0X21hdGNoLAotCS5tYXAgPSB4aWNzX2hvc3RfbWFwLAotCS54bGF0ZSA9IHhpY3NfaG9zdF94bGF0ZSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCB4aWNzX2luaXRfaG9zdCh2b2lkKQotewotCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQotCQl4aWNzX2lycV9jaGlwID0gJnhpY3NfcGljX2xwYXI7Ci0JZWxzZQotCQl4aWNzX2lycV9jaGlwID0gJnhpY3NfcGljX2RpcmVjdDsKLQotCXhpY3NfaG9zdCA9IGlycV9hbGxvY19ob3N0KE5VTEwsIElSUV9IT1NUX01BUF9UUkVFLCAwLCAmeGljc19ob3N0X29wcywKLQkJCQkgICBYSUNTX0lSUV9TUFVSSU9VUyk7Ci0JQlVHX09OKHhpY3NfaG9zdCA9PSBOVUxMKTsKLQlpcnFfc2V0X2RlZmF1bHRfaG9zdCh4aWNzX2hvc3QpOwotfQotCi0KLS8qIEludGVyLXByb2Nlc3NvciBpbnRlcnJ1cHQgc3VwcG9ydCAqLwotCi0jaWZkZWYgQ09ORklHX1NNUAotLyoKLSAqIFhJQ1Mgb25seSBoYXMgYSBzaW5nbGUgSVBJLCBzbyBlbmNvZGUgdGhlIG1lc3NhZ2VzIHBlciBDUFUKLSAqLwotc3RhdGljIERFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHVuc2lnbmVkIGxvbmcsIHhpY3NfaXBpX21lc3NhZ2UpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgc21wX3hpY3NfZG9fbWVzc2FnZShpbnQgY3B1LCBpbnQgbXNnKQotewotCXVuc2lnbmVkIGxvbmcgKnRndCA9ICZwZXJfY3B1KHhpY3NfaXBpX21lc3NhZ2UsIGNwdSk7Ci0KLQlzZXRfYml0KG1zZywgdGd0KTsKLQltYigpOwotCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQotCQlscGFyX3FpcnJfaW5mbyhjcHUsIElQSV9QUklPUklUWSk7Ci0JZWxzZQotCQlkaXJlY3RfcWlycl9pbmZvKGNwdSwgSVBJX1BSSU9SSVRZKTsKLX0KLQotdm9pZCBzbXBfeGljc19tZXNzYWdlX3Bhc3MoaW50IHRhcmdldCwgaW50IG1zZykKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWlmICh0YXJnZXQgPCBOUl9DUFVTKSB7Ci0JCXNtcF94aWNzX2RvX21lc3NhZ2UodGFyZ2V0LCBtc2cpOwotCX0gZWxzZSB7Ci0JCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewotCQkJaWYgKHRhcmdldCA9PSBNU0dfQUxMX0JVVF9TRUxGCi0JCQkgICAgJiYgaSA9PSBzbXBfcHJvY2Vzc29yX2lkKCkpCi0JCQkJY29udGludWU7Ci0JCQlzbXBfeGljc19kb19tZXNzYWdlKGksIG1zZyk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCB4aWNzX2lwaV9kaXNwYXRjaChpbnQgY3B1KQotewotCXVuc2lnbmVkIGxvbmcgKnRndCA9ICZwZXJfY3B1KHhpY3NfaXBpX21lc3NhZ2UsIGNwdSk7Ci0KLQltYigpOwkvKiBvcmRlciBtbWlvIGNsZWFyaW5nIHFpcnIgKi8KLQl3aGlsZSAoKnRndCkgewotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFBQQ19NU0dfQ0FMTF9GVU5DVElPTiwgdGd0KSkgewotCQkJc21wX21lc3NhZ2VfcmVjdihQUENfTVNHX0NBTExfRlVOQ1RJT04pOwotCQl9Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUFBDX01TR19SRVNDSEVEVUxFLCB0Z3QpKSB7Ci0JCQlzbXBfbWVzc2FnZV9yZWN2KFBQQ19NU0dfUkVTQ0hFRFVMRSk7Ci0JCX0KLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX0NBTExfRlVOQ19TSU5HTEUsIHRndCkpIHsKLQkJCXNtcF9tZXNzYWdlX3JlY3YoUFBDX01TR19DQUxMX0ZVTkNfU0lOR0xFKTsKLQkJfQotI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHR0VSKSB8fCBkZWZpbmVkKENPTkZJR19LRVhFQykKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQUENfTVNHX0RFQlVHR0VSX0JSRUFLLCB0Z3QpKSB7Ci0JCQlzbXBfbWVzc2FnZV9yZWN2KFBQQ19NU0dfREVCVUdHRVJfQlJFQUspOwotCQl9Ci0jZW5kaWYKLQl9Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgeGljc19pcGlfYWN0aW9uX2RpcmVjdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCWRpcmVjdF9xaXJyX2luZm8oY3B1LCAweGZmKTsKLQotCXJldHVybiB4aWNzX2lwaV9kaXNwYXRjaChjcHUpOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgeGljc19pcGlfYWN0aW9uX2xwYXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0KLQlscGFyX3FpcnJfaW5mbyhjcHUsIDB4ZmYpOwotCi0JcmV0dXJuIHhpY3NfaXBpX2Rpc3BhdGNoKGNwdSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHhpY3NfcmVxdWVzdF9pcGkodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgaXBpOwotCWludCByYzsKLQotCWlwaSA9IGlycV9jcmVhdGVfbWFwcGluZyh4aWNzX2hvc3QsIFhJQ1NfSVBJKTsKLQlCVUdfT04oaXBpID09IE5PX0lSUSk7Ci0KLQkvKgotCSAqIElQSXMgYXJlIG1hcmtlZCBJUlFGX0RJU0FCTEVEIGFzIHRoZXkgbXVzdCBydW4gd2l0aCBpcnFzCi0JICogZGlzYWJsZWQKLQkgKi8KLQlpcnFfc2V0X2hhbmRsZXIoaXBpLCBoYW5kbGVfcGVyY3B1X2lycSk7Ci0JaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCi0JCXJjID0gcmVxdWVzdF9pcnEoaXBpLCB4aWNzX2lwaV9hY3Rpb25fbHBhciwKLQkJCQlJUlFGX0RJU0FCTEVEfElSUUZfUEVSQ1BVLCAiSVBJIiwgTlVMTCk7Ci0JZWxzZQotCQlyYyA9IHJlcXVlc3RfaXJxKGlwaSwgeGljc19pcGlfYWN0aW9uX2RpcmVjdCwKLQkJCQlJUlFGX0RJU0FCTEVEfElSUUZfUEVSQ1BVLCAiSVBJIiwgTlVMTCk7Ci0JQlVHX09OKHJjKTsKLX0KLQotaW50IF9faW5pdCBzbXBfeGljc19wcm9iZSh2b2lkKQotewotCXhpY3NfcmVxdWVzdF9pcGkoKTsKLQotCXJldHVybiBjcHVtYXNrX3dlaWdodChjcHVfcG9zc2libGVfbWFzayk7Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfU01QICovCi0KLQotLyogSW5pdGlhbGl6YXRpb24gKi8KLQotc3RhdGljIHZvaWQgeGljc191cGRhdGVfaXJxX3NlcnZlcnModm9pZCkKLXsKLQlpbnQgaSwgajsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCXUzMiBpbGVuOwotCWNvbnN0IHUzMiAqaXJlZzsKLQl1MzIgaGNwdWlkOwotCi0JLyogRmluZCB0aGUgc2VydmVyIG51bWJlcnMgZm9yIHRoZSBib290IGNwdS4gKi8KLQlucCA9IG9mX2dldF9jcHVfbm9kZShib290X2NwdWlkLCBOVUxMKTsKLQlCVUdfT04oIW5wKTsKLQotCWlyZWcgPSBvZl9nZXRfcHJvcGVydHkobnAsICJpYm0scHBjLWludGVycnVwdC1nc2VydmVyI3MiLCAmaWxlbik7Ci0JaWYgKCFpcmVnKSB7Ci0JCW9mX25vZGVfcHV0KG5wKTsKLQkJcmV0dXJuOwotCX0KLQotCWkgPSBpbGVuIC8gc2l6ZW9mKGludCk7Ci0JaGNwdWlkID0gZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChib290X2NwdWlkKTsKLQotCS8qIEdsb2JhbCBpbnRlcnJ1cHQgZGlzdHJpYnV0aW9uIHNlcnZlciBpcyBzcGVjaWZpZWQgaW4gdGhlIGxhc3QKLQkgKiBlbnRyeSBvZiAiaWJtLHBwYy1pbnRlcnJ1cHQtZ3NlcnZlciNzIiBwcm9wZXJ0eS4gR2V0IHRoZSBsYXN0Ci0JICogZW50cnkgZm9tIHRoaXMgcHJvcGVydHkgZm9yIGN1cnJlbnQgYm9vdCBjcHUgaWQgYW5kIHVzZSBpdCBhcwotCSAqIGRlZmF1bHQgZGlzdHJpYnV0aW9uIHNlcnZlcgotCSAqLwotCWZvciAoaiA9IDA7IGogPCBpOyBqICs9IDIpIHsKLQkJaWYgKGlyZWdbal0gPT0gaGNwdWlkKSB7Ci0JCQlkZWZhdWx0X3NlcnZlciA9IGhjcHVpZDsKLQkJCWRlZmF1bHRfZGlzdHJpYl9zZXJ2ZXIgPSBpcmVnW2orMV07Ci0JCX0KLQl9Ci0KLQlvZl9ub2RlX3B1dChucCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCB4aWNzX21hcF9vbmVfY3B1KGludCBod19pZCwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplKQotewotCWludCBpOwotCi0JLyogVGhpcyBtYXkgbG9vayBncm9zcyBidXQgaXQncyBnb29kIGVub3VnaCBmb3Igbm93LCB3ZSBkb24ndCBxdWl0ZQotCSAqIGhhdmUgYSBoYXJkIC0+IGxpbnV4IHByb2Nlc3NvciBpZCBtYXRjaGluZy4KLQkgKi8KLQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewotCQlpZiAoIWNwdV9wcmVzZW50KGkpKQotCQkJY29udGludWU7Ci0JCWlmIChod19pZCA9PSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGkpKSB7Ci0JCQl4aWNzX3Blcl9jcHVbaV0gPSBpb3JlbWFwKGFkZHIsIHNpemUpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgeGljc19pbml0X29uZV9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0JCQkJICAgICAgdW5zaWduZWQgaW50ICppbmR4KQotewotCXVuc2lnbmVkIGludCBpbGVuOwotCWNvbnN0IHUzMiAqaXJlZzsKLQotCS8qIFRoaXMgY29kZSBkb2VzIHRoZSB0aGVvcmljYWxseSBicm9rZW4gYXNzdW1wdGlvbiB0aGF0IHRoZSBpbnRlcnJ1cHQKLQkgKiBzZXJ2ZXIgbnVtYmVycyBhcmUgdGhlIHNhbWUgYXMgdGhlIGhhcmQgQ1BVIG51bWJlcnMuCi0JICogVGhpcyBoYXBwZW5zIHRvIGJlIHRoZSBjYXNlIHNvIGZhciBidXQgd2UgYXJlIHBsYXlpbmcgd2l0aCBmaXJlLi4uCi0JICogc2hvdWxkIGJlIGZpeGVkIG9uZSBvZiB0aGVzZSBkYXlzLiAtQmVuSC4KLQkgKi8KLQlpcmVnID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiaWJtLGludGVycnVwdC1zZXJ2ZXItcmFuZ2VzIiwgTlVMTCk7Ci0KLQkvKiBEbyB0aGF0IGV2ZXIgaGFwcGVuID8gd2UnbGwga25vdyBzb29uIGVub3VnaC4uLiBidXQgZXZlbiBnb29kJ29sZAotCSAqIGY4MCBkb2VzIGhhdmUgdGhhdCBwcm9wZXJ0eSAuLgotCSAqLwotCVdBUk5fT04oaXJlZyA9PSBOVUxMKTsKLQlpZiAoaXJlZykgewotCQkvKgotCQkgKiBzZXQgbm9kZSBzdGFydGluZyBpbmRleCBmb3IgdGhpcyBub2RlCi0JCSAqLwotCQkqaW5keCA9ICppcmVnOwotCX0KLQlpcmVnID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgJmlsZW4pOwotCWlmICghaXJlZykKLQkJcGFuaWMoInhpY3NfaW5pdF9JUlE6IGNhbid0IGZpbmQgaW50ZXJydXB0IHJlZyBwcm9wZXJ0eSIpOwotCi0Jd2hpbGUgKGlsZW4gPj0gKDQgKiBzaXplb2YodTMyKSkpIHsKLQkJdW5zaWduZWQgbG9uZyBhZGRyLCBzaXplOwotCi0JCS8qIFhYWCBVc2UgcHJvcGVyIE9GIHBhcnNpbmcgY29kZSBoZXJlICEhISAqLwotCQlhZGRyID0gKHVuc2lnbmVkIGxvbmcpKmlyZWcrKyA8PCAzMjsKLQkJaWxlbiAtPSBzaXplb2YodTMyKTsKLQkJYWRkciB8PSAqaXJlZysrOwotCQlpbGVuIC09IHNpemVvZih1MzIpOwotCQlzaXplID0gKHVuc2lnbmVkIGxvbmcpKmlyZWcrKyA8PCAzMjsKLQkJaWxlbiAtPSBzaXplb2YodTMyKTsKLQkJc2l6ZSB8PSAqaXJlZysrOwotCQlpbGVuIC09IHNpemVvZih1MzIpOwotCQl4aWNzX21hcF9vbmVfY3B1KCppbmR4LCBhZGRyLCBzaXplKTsKLQkJKCppbmR4KSsrOwotCX0KLX0KLQotdm9pZCBfX2luaXQgeGljc19pbml0X0lSUSh2b2lkKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0JdTMyIGluZHggPSAwOwotCWludCBmb3VuZCA9IDA7Ci0JY29uc3QgdTMyICppc2l6ZTsKLQotCXBwYzY0X2Jvb3RfbXNnKDB4MjAsICJYSUNTIEluaXQiKTsKLQotCWlibV9nZXRfeGl2ZSA9IHJ0YXNfdG9rZW4oImlibSxnZXQteGl2ZSIpOwotCWlibV9zZXRfeGl2ZSA9IHJ0YXNfdG9rZW4oImlibSxzZXQteGl2ZSIpOwotCWlibV9pbnRfb24gID0gcnRhc190b2tlbigiaWJtLGludC1vbiIpOwotCWlibV9pbnRfb2ZmID0gcnRhc190b2tlbigiaWJtLGludC1vZmYiKTsKLQotCWZvcl9lYWNoX25vZGVfYnlfdHlwZShucCwgIlBvd2VyUEMtRXh0ZXJuYWwtSW50ZXJydXB0LVByZXNlbnRhdGlvbiIpIHsKLQkJZm91bmQgPSAxOwotCQlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkgewotCQkJb2Zfbm9kZV9wdXQobnApOwotCQkJYnJlYWs7Ci0JCQl9Ci0JCXhpY3NfaW5pdF9vbmVfbm9kZShucCwgJmluZHgpOwotCX0KLQlpZiAoZm91bmQgPT0gMCkKLQkJcmV0dXJuOwotCi0JLyogZ2V0IHRoZSBiaXQgc2l6ZSBvZiBzZXJ2ZXIgbnVtYmVycyAqLwotCWZvdW5kID0gMDsKLQotCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgTlVMTCwgImlibSxwcGMteGljcyIpIHsKLQkJaXNpemUgPSBvZl9nZXRfcHJvcGVydHkobnAsICJpYm0saW50ZXJydXB0LXNlcnZlciMtc2l6ZSIsIE5VTEwpOwotCi0JCWlmICghaXNpemUpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIWZvdW5kKSB7Ci0JCQlpbnRlcnJ1cHRfc2VydmVyX3NpemUgPSAqaXNpemU7Ci0JCQlmb3VuZCA9IDE7Ci0JCX0gZWxzZSBpZiAoKmlzaXplICE9IGludGVycnVwdF9zZXJ2ZXJfc2l6ZSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiWElDUzogIgotCQkJICAgICAgICJtaXNtYXRjaGVkIGlibSxpbnRlcnJ1cHQtc2VydmVyIy1zaXplXG4iKTsKLQkJCWludGVycnVwdF9zZXJ2ZXJfc2l6ZSA9IG1heCgqaXNpemUsCi0JCQkJCQkgICAgaW50ZXJydXB0X3NlcnZlcl9zaXplKTsKLQkJfQotCX0KLQotCXhpY3NfdXBkYXRlX2lycV9zZXJ2ZXJzKCk7Ci0JeGljc19pbml0X2hvc3QoKTsKLQotCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0xQQVIpKQotCQlwcGNfbWQuZ2V0X2lycSA9IHhpY3NfZ2V0X2lycV9scGFyOwotCWVsc2UKLQkJcHBjX21kLmdldF9pcnEgPSB4aWNzX2dldF9pcnFfZGlyZWN0OwotCi0JeGljc19zZXR1cF9jcHUoKTsKLQotCXBwYzY0X2Jvb3RfbXNnKDB4MjEsICJYSUNTIERvbmUiKTsKLX0KLQotLyogQ3B1IHN0YXJ0dXAsIHNodXRkb3duLCBhbmQgaG90cGx1ZyAqLwotCi1zdGF0aWMgdm9pZCB4aWNzX3NldF9jcHVfcHJpb3JpdHkodW5zaWduZWQgY2hhciBjcHByKQotewotCXN0cnVjdCB4aWNzX2NwcHIgKm9zX2NwcHIgPSAmX19nZXRfY3B1X3Zhcih4aWNzX2NwcHIpOwotCi0JLyoKLQkgKiB3ZSBvbmx5IHJlYWxseSB3YW50IHRvIHNldCB0aGUgcHJpb3JpdHkgd2hlbiB0aGVyZSdzCi0JICoganVzdCBvbmUgY3BwciB2YWx1ZSBvbiB0aGUgc3RhY2sKLQkgKi8KLQlXQVJOX09OKG9zX2NwcHItPmluZGV4ICE9IDApOwotCi0Jb3NfY3Bwci0+c3RhY2tbMF0gPSBjcHByOwotCi0JaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCi0JCWxwYXJfY3Bwcl9pbmZvKGNwcHIpOwotCWVsc2UKLQkJZGlyZWN0X2NwcHJfaW5mbyhjcHByKTsKLQlpb3N5bmMoKTsKLX0KLQotLyogSGF2ZSB0aGUgY2FsbGluZyBwcm9jZXNzb3Igam9pbiBvciBsZWF2ZSB0aGUgc3BlY2lmaWVkIGdsb2JhbCBxdWV1ZSAqLwotc3RhdGljIHZvaWQgeGljc19zZXRfY3B1X2dpcSh1bnNpZ25lZCBpbnQgZ3NlcnZlciwgdW5zaWduZWQgaW50IGpvaW4pCi17Ci0JaW50IGluZGV4OwotCWludCBzdGF0dXM7Ci0KLQlpZiAoIXJ0YXNfaW5kaWNhdG9yX3ByZXNlbnQoR0xPQkFMX0lOVEVSUlVQVF9RVUVVRSwgTlVMTCkpCi0JCXJldHVybjsKLQotCWluZGV4ID0gKDFVTCA8PCBpbnRlcnJ1cHRfc2VydmVyX3NpemUpIC0gMSAtIGdzZXJ2ZXI7Ci0KLQlzdGF0dXMgPSBydGFzX3NldF9pbmRpY2F0b3JfZmFzdChHTE9CQUxfSU5URVJSVVBUX1FVRVVFLCBpbmRleCwgam9pbik7Ci0KLQlXQVJOKHN0YXR1cyA8IDAsICJzZXQtaW5kaWNhdG9yKCVkLCAlZCwgJXUpIHJldHVybmVkICVkXG4iLAotCSAgICAgR0xPQkFMX0lOVEVSUlVQVF9RVUVVRSwgaW5kZXgsIGpvaW4sIHN0YXR1cyk7Ci19Ci0KLXZvaWQgeGljc19zZXR1cF9jcHUodm9pZCkKLXsKLQl4aWNzX3NldF9jcHVfcHJpb3JpdHkoTE9XRVNUX1BSSU9SSVRZKTsKLQotCXhpY3Nfc2V0X2NwdV9naXEoZGVmYXVsdF9kaXN0cmliX3NlcnZlciwgMSk7Ci19Ci0KLXZvaWQgeGljc190ZWFyZG93bl9jcHUodm9pZCkKLXsKLQlzdHJ1Y3QgeGljc19jcHByICpvc19jcHByID0gJl9fZ2V0X2NwdV92YXIoeGljc19jcHByKTsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JLyoKLQkgKiB3ZSBoYXZlIHRvIHJlc2V0IHRoZSBjcHByIGluZGV4IHRvIDAgYmVjYXVzZSB3ZSdyZQotCSAqIG5vdCBnb2luZyB0byByZXR1cm4gZnJvbSB0aGUgSVBJCi0JICovCi0Jb3NfY3Bwci0+aW5kZXggPSAwOwotCXhpY3Nfc2V0X2NwdV9wcmlvcml0eSgwKTsKLQotCS8qIENsZWFyIGFueSBwZW5kaW5nIElQSSByZXF1ZXN0ICovCi0JaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCi0JCWxwYXJfcWlycl9pbmZvKGNwdSwgMHhmZik7Ci0JZWxzZQotCQlkaXJlY3RfcWlycl9pbmZvKGNwdSwgMHhmZik7Ci19Ci0KLXZvaWQgeGljc19rZXhlY190ZWFyZG93bl9jcHUoaW50IHNlY29uZGFyeSkKLXsKLQl4aWNzX3RlYXJkb3duX2NwdSgpOwotCi0JLyoKLQkgKiB3ZSB0YWtlIHRoZSBpcGkgaXJxIGJ1dCBhbmQgbmV2ZXIgcmV0dXJuIHNvIHdlCi0JICogbmVlZCB0byBFT0kgdGhlIElQSSwgYnV0IHdhbnQgdG8gbGVhdmUgb3VyIHByaW9yaXR5IDAKLQkgKgotCSAqIHNob3VsZCB3ZSBjaGVjayBhbGwgdGhlIG90aGVyIGludGVycnVwdHMgdG9vPwotCSAqIHNob3VsZCB3ZSBiZSBmbGFnZ2luZyBpZGxlIGxvb3AgaW5zdGVhZD8KLQkgKiBvciBjcmVhdGluZyBzb21lIHRhc2sgdG8gYmUgc2NoZWR1bGVkPwotCSAqLwotCi0JaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCi0JCWxwYXJfeGlycl9pbmZvX3NldCgoMHgwMCA8PCAyNCkgfCBYSUNTX0lQSSk7Ci0JZWxzZQotCQlkaXJlY3RfeGlycl9pbmZvX3NldCgoMHgwMCA8PCAyNCkgfCBYSUNTX0lQSSk7Ci0KLQkvKgotCSAqIFNvbWUgbWFjaGluZXMgbmVlZCB0byBoYXZlIGF0IGxlYXN0IG9uZSBjcHUgaW4gdGhlIEdJUSwKLQkgKiBzbyBsZWF2ZSB0aGUgbWFzdGVyIGNwdSBpbiB0aGUgZ3JvdXAuCi0JICovCi0JaWYgKHNlY29uZGFyeSkKLQkJeGljc19zZXRfY3B1X2dpcShkZWZhdWx0X2Rpc3RyaWJfc2VydmVyLCAwKTsKLX0KLQotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotCi0vKiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4gKi8KLXZvaWQgeGljc19taWdyYXRlX2lycXNfYXdheSh2b2lkKQotewotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCksIGh3X2NwdSA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWludCB2aXJxOwotCi0JLyogSWYgd2UgdXNlZCB0byBiZSB0aGUgZGVmYXVsdCBzZXJ2ZXIsIG1vdmUgdG8gdGhlIG5ldyAiYm9vdF9jcHVpZCIgKi8KLQlpZiAoaHdfY3B1ID09IGRlZmF1bHRfc2VydmVyKQotCQl4aWNzX3VwZGF0ZV9pcnFfc2VydmVycygpOwotCi0JLyogUmVqZWN0IGFueSBpbnRlcnJ1cHQgdGhhdCB3YXMgcXVldWVkIHRvIHVzLi4uICovCi0JeGljc19zZXRfY3B1X3ByaW9yaXR5KDApOwotCi0JLyogUmVtb3ZlIG91cnNlbHZlcyBmcm9tIHRoZSBnbG9iYWwgaW50ZXJydXB0IHF1ZXVlICovCi0JeGljc19zZXRfY3B1X2dpcShkZWZhdWx0X2Rpc3RyaWJfc2VydmVyLCAwKTsKLQotCS8qIEFsbG93IElQSXMgYWdhaW4uLi4gKi8KLQl4aWNzX3NldF9jcHVfcHJpb3JpdHkoREVGQVVMVF9QUklPUklUWSk7Ci0KLQlmb3JfZWFjaF9pcnEodmlycSkgewotCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7Ci0JCXN0cnVjdCBpcnFfY2hpcCAqY2hpcDsKLQkJdW5zaWduZWQgaW50IGh3aXJxOwotCQlpbnQgeGljc19zdGF0dXNbMl07Ci0JCWludCBzdGF0dXM7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkJLyogV2UgY2FuJ3Qgc2V0IGFmZmluaXR5IG9uIElTQSBpbnRlcnJ1cHRzICovCi0JCWlmICh2aXJxIDwgTlVNX0lTQV9JTlRFUlJVUFRTKQotCQkJY29udGludWU7Ci0JCWlmIChpcnFfbWFwW3ZpcnFdLmhvc3QgIT0geGljc19ob3N0KQotCQkJY29udGludWU7Ci0JCWh3aXJxID0gKHVuc2lnbmVkIGludClpcnFfbWFwW3ZpcnFdLmh3aXJxOwotCQkvKiBXZSBuZWVkIHRvIGdldCBJUElzIHN0aWxsLiAqLwotCQlpZiAoaHdpcnEgPT0gWElDU19JUEkgfHwgaHdpcnEgPT0gWElDU19JUlFfU1BVUklPVVMpCi0JCQljb250aW51ZTsKLQotCQlkZXNjID0gaXJxX3RvX2Rlc2ModmlycSk7Ci0KLQkJLyogV2Ugb25seSBuZWVkIHRvIG1pZ3JhdGUgZW5hYmxlZCBJUlFTICovCi0JCWlmIChkZXNjID09IE5VTEwgfHwgZGVzYy0+YWN0aW9uID09IE5VTEwpCi0JCQljb250aW51ZTsKLQotCQljaGlwID0gaXJxX2Rlc2NfZ2V0X2NoaXAoZGVzYyk7Ci0JCWlmIChjaGlwID09IE5VTEwgfHwgY2hpcC0+aXJxX3NldF9hZmZpbml0eSA9PSBOVUxMKQotCQkJY29udGludWU7Ci0KLQkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0KLQkJc3RhdHVzID0gcnRhc19jYWxsKGlibV9nZXRfeGl2ZSwgMSwgMywgeGljc19zdGF0dXMsIGh3aXJxKTsKLQkJaWYgKHN0YXR1cykgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaWJtLGdldC14aXZlIGlycT0ldSByZXR1cm5zICVkXG4iLAotCQkJCQlfX2Z1bmNfXywgaHdpcnEsIHN0YXR1cyk7Ci0JCQlnb3RvIHVubG9jazsKLQkJfQotCi0JCS8qCi0JCSAqIFdlIG9ubHkgc3VwcG9ydCBkZWxpdmVyeSB0byBhbGwgY3B1cyBvciB0byBvbmUgY3B1LgotCQkgKiBUaGUgaXJxIGhhcyB0byBiZSBtaWdyYXRlZCBvbmx5IGluIHRoZSBzaW5nbGUgY3B1Ci0JCSAqIGNhc2UuCi0JCSAqLwotCQlpZiAoeGljc19zdGF0dXNbMF0gIT0gaHdfY3B1KQotCQkJZ290byB1bmxvY2s7Ci0KLQkJLyogVGhpcyBpcyBleHBlY3RlZCBkdXJpbmcgY3B1IG9mZmxpbmUuICovCi0JCWlmIChjcHVfb25saW5lKGNwdSkpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJJUlEgJXUgYWZmaW5pdHkgYnJva2VuIG9mZiBjcHUgJXVcbiIsCi0JCQkgICAgICAgdmlycSwgY3B1KTsKLQotCQkvKiBSZXNldCBhZmZpbml0eSB0byBhbGwgY3B1cyAqLwotCQljcHVtYXNrX3NldGFsbChkZXNjLT5pcnFfZGF0YS5hZmZpbml0eSk7Ci0JCWNoaXAtPmlycV9zZXRfYWZmaW5pdHkoJmRlc2MtPmlycV9kYXRhLCBjcHVfYWxsX21hc2ssIHRydWUpOwotdW5sb2NrOgotCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCX0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZDVhODMuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qCi0gKiBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5oCi0gKgotICogQ29weXJpZ2h0IDIwMDAgSUJNIENvcnBvcmF0aW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNpZm5kZWYgX1BPV0VSUENfS0VSTkVMX1hJQ1NfSAotI2RlZmluZSBfUE9XRVJQQ19LRVJORUxfWElDU19ICi0KLWV4dGVybiB2b2lkIHhpY3NfaW5pdF9JUlEodm9pZCk7Ci1leHRlcm4gdm9pZCB4aWNzX3NldHVwX2NwdSh2b2lkKTsKLWV4dGVybiB2b2lkIHhpY3NfdGVhcmRvd25fY3B1KHZvaWQpOwotZXh0ZXJuIHZvaWQgeGljc19rZXhlY190ZWFyZG93bl9jcHUoaW50IHNlY29uZGFyeSk7Ci1leHRlcm4gdm9pZCB4aWNzX21pZ3JhdGVfaXJxc19hd2F5KHZvaWQpOwotZXh0ZXJuIGludCBzbXBfeGljc19wcm9iZSh2b2lkKTsKLWV4dGVybiB2b2lkIHNtcF94aWNzX21lc3NhZ2VfcGFzcyhpbnQgdGFyZ2V0LCBpbnQgbXNnKTsKLQotI2VuZGlmIC8qIF9QT1dFUlBDX0tFUk5FTF9YSUNTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvd3NwL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3dzcC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYzQ4ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3dzcC9LY29uZmlnCkBAIC0wLDAgKzEsMjggQEAKK2NvbmZpZyBQUENfV1NQCisJYm9vbAorCWRlZmF1bHQgbgorCittZW51ICJXU1AgcGxhdGZvcm0gc2VsZWN0aW9uIgorCWRlcGVuZHMgb24gUFBDX0JPT0szRV82NAorCitjb25maWcgUFBDX1BTUjIKKwlib29sICJQU1ItMiBwbGF0Zm9ybSIKKwlzZWxlY3QgUFBDX0EyCisJc2VsZWN0IEdFTkVSSUNfVEJTWU5DCisJc2VsZWN0IFBQQ19TQ09NCisJc2VsZWN0IEVQQVBSX0JPT1QKKwlzZWxlY3QgUFBDX1dTUAorCXNlbGVjdCBQUENfWElDUworCXNlbGVjdCBQUENfSUNQX05BVElWRQorCWRlZmF1bHQgeQorCitlbmRtZW51CisKK2NvbmZpZyBQUENfQTJfREQyCisJYm9vbCAiU3VwcG9ydCBmb3IgREQyIGJhc2VkIEEyL1dTUCBzeXN0ZW1zIgorCWRlcGVuZHMgb24gUFBDX0EyCisKK2NvbmZpZyBXT1JLQVJPVU5EX0VSUkFUVU1fNDYzCisJZGVwZW5kcyBvbiBQUENfQTJfREQyCisJYm9vbCAiV29ya2Fyb3VuZCBlcnJhdHVtIDQ2MyIKKwlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvd3NwL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy93c3AvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk1YmU3MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvd3NwL01ha2VmaWxlCkBAIC0wLDAgKzEsNiBAQAorY2NmbGFncy15CQkJKz0gLW1uby1taW5pbWFsLXRvYworCitvYmoteQkJCQkrPSBzZXR1cC5vIGljcy5vCitvYmotJChDT05GSUdfUFBDX1BTUjIpCQkrPSBwc3IyLm8gb3BiX3BpYy5vCitvYmotJChDT05GSUdfUFBDX1dTUCkJCSs9IHNjb21fd3NwLm8KK29iai0kKENPTkZJR19TTVApCQkrPSBzbXAubyBzY29tX3NtcC5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3dzcC9pY3MuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvd3NwL2ljcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1M2JkOWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3dzcC9pY3MuYwpAQCAtMCwwICsxLDcxMiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4LTIwMTEgSUJNIENvcnBvcmF0aW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbXNpLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS94aWNzLmg+CisKKyNpbmNsdWRlICJ3c3AuaCIKKyNpbmNsdWRlICJpY3MuaCIKKworCisvKiBXU1AgSUNTICovCisKK3N0cnVjdCB3c3BfaWNzIHsKKwlzdHJ1Y3QgaWNzIGljczsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOworCXZvaWQgX19pb21lbSAqcmVnczsKKwlzcGlubG9ja190IGxvY2s7CisJdW5zaWduZWQgbG9uZyAqYml0bWFwOworCXUzMiBjaGlwX2lkOworCXUzMiBsc2lfYmFzZTsKKwl1MzIgbHNpX2NvdW50OworCXU2NCBod2lycV9zdGFydDsKKwl1NjQgY291bnQ7CisjaWZkZWYgQ09ORklHX1NNUAorCWludCAqaHdpcnFfY3B1X21hcDsKKyNlbmRpZgorfTsKKworI2RlZmluZSB0b193c3BfaWNzKGljcykJY29udGFpbmVyX29mKGljcywgc3RydWN0IHdzcF9pY3MsIGljcykKKworI2RlZmluZSBJTlRfU1JDX0xBWUVSX0JVSURfUkVHKGJhc2UpCSgoYmFzZSkgKyAweDAwKQorI2RlZmluZSBJT0RBX1RCTF9BRERSX1JFRyhiYXNlKQkJKChiYXNlKSArIDB4MTgpCisjZGVmaW5lIElPREFfVEJMX0RBVEFfUkVHKGJhc2UpCQkoKGJhc2UpICsgMHgyMCkKKyNkZWZpbmUgWElWRV9VUERBVEVfUkVHKGJhc2UpCQkoKGJhc2UpICsgMHgyOCkKKyNkZWZpbmUgSUNTX0lOVF9DQVBTX1JFRyhiYXNlKQkJKChiYXNlKSArIDB4MzApCisKKyNkZWZpbmUgVEJMX0FVVE9fSU5DUkVNRU5UCSgoMVVMIDw8IDYzKSB8ICgxVUwgPDwgMTUpKQorI2RlZmluZSBUQkxfU0VMRUNUX1hJU1QJCSgxVUwgPDwgNDgpCisjZGVmaW5lIFRCTF9TRUxFQ1RfWElWVAkJKDFVTCA8PCA0OSkKKworI2RlZmluZSBJT0RBX0lSUShpcnEpCQkoKGlycSkgJiAoMHg3RkZVTEwpKQkvKiBIUk0gNS4xLjMuNCAqLworCisjZGVmaW5lIFhJU1RfUkVRVUlSRUQJCTB4OAorI2RlZmluZSBYSVNUX1JFSkVDVEVECQkweDQKKyNkZWZpbmUgWElTVF9QUkVTRU5URUQJCTB4MgorI2RlZmluZSBYSVNUX1BFTkRJTkcJCTB4MQorCisjZGVmaW5lIFhJVkVfU0VSVkVSX1NISUZUCTQyCisjZGVmaW5lIFhJVkVfU0VSVkVSX01BU0sJMHhGRkZGVUxMCisjZGVmaW5lIFhJVkVfUFJJT1JJVFlfTUFTSwkweEZGVUxMCisjZGVmaW5lIFhJVkVfUFJJT1JJVFlfU0hJRlQJMzIKKyNkZWZpbmUgWElWRV9XUklURV9FTkFCTEUJKDFVTEwgPDwgNjMpCisKKy8qCisgKiBUaGUgZG9jcyByZWZlciB0byBhIDYgYml0IGZpZWxkIGNhbGxlZCBDaGlwSUQsIHdoaWNoIGNvbnNpc3RzIG9mIGEKKyAqIDMgYml0IE5vZGVJRCBhbmQgYSAzIGJpdCBDaGlwSUQuIE9uIFdTUCB0aGUgQ2hpcElEIGlzIGFsd2F5cyB6ZXJvCisgKiBzbyB3ZSBpZ25vcmUgaXQsIGFuZCBldmVyeSB3aGVyZSB3ZSB1c2UgImNoaXAgaWQiIGluIHRoaXMgY29kZSB3ZQorICogbWVhbiB0aGUgTm9kZUlELgorICovCisjZGVmaW5lIFdTUF9JQ1NfQ0hJUF9TSElGVAkJMTcKKworCitzdGF0aWMgc3RydWN0IHdzcF9pY3MgKmljc19saXN0Oworc3RhdGljIGludCBudW1faWNzOworCisvKiBJQ1MgU291cmNlIGNvbnRyb2xsZXIgYWNjZXNzb3JzICovCisKK3N0YXRpYyB1NjQgd3NwX2ljc19nZXRfeGl2ZShzdHJ1Y3Qgd3NwX2ljcyAqaWNzLCB1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTY0IHhpdmU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaWNzLT5sb2NrLCBmbGFncyk7CisJb3V0X2JlNjQoSU9EQV9UQkxfQUREUl9SRUcoaWNzLT5yZWdzKSwgVEJMX1NFTEVDVF9YSVZUIHwgSU9EQV9JUlEoaXJxKSk7CisJeGl2ZSA9IGluX2JlNjQoSU9EQV9UQkxfREFUQV9SRUcoaWNzLT5yZWdzKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWNzLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4geGl2ZTsKK30KKworc3RhdGljIHZvaWQgd3NwX2ljc19zZXRfeGl2ZShzdHJ1Y3Qgd3NwX2ljcyAqaWNzLCB1bnNpZ25lZCBpbnQgaXJxLCB1NjQgeGl2ZSkKK3sKKwl4aXZlICY9IH5YSVZFX0FERFJfTUFTSzsKKwl4aXZlIHw9IChpcnEgJiBYSVZFX0FERFJfTUFTSyk7CisJeGl2ZSB8PSBYSVZFX1dSSVRFX0VOQUJMRTsKKworCW91dF9iZTY0KFhJVkVfVVBEQVRFX1JFRyhpY3MtPnJlZ3MpLCB4aXZlKTsKK30KKworc3RhdGljIHU2NCB4aXZlX3NldF9zZXJ2ZXIodTY0IHhpdmUsIHVuc2lnbmVkIGludCBzZXJ2ZXIpCit7CisJdTY0IG1hc2sgPSB+KFhJVkVfU0VSVkVSX01BU0sgPDwgWElWRV9TRVJWRVJfU0hJRlQpOworCisJeGl2ZSAmPSBtYXNrOworCXhpdmUgfD0gKHNlcnZlciAmIFhJVkVfU0VSVkVSX01BU0spIDw8IFhJVkVfU0VSVkVSX1NISUZUOworCisJcmV0dXJuIHhpdmU7Cit9CisKK3N0YXRpYyB1NjQgeGl2ZV9zZXRfcHJpb3JpdHkodTY0IHhpdmUsIHVuc2lnbmVkIGludCBwcmlvcml0eSkKK3sKKwl1NjQgbWFzayA9IH4oWElWRV9QUklPUklUWV9NQVNLIDw8IFhJVkVfUFJJT1JJVFlfU0hJRlQpOworCisJeGl2ZSAmPSBtYXNrOworCXhpdmUgfD0gKHByaW9yaXR5ICYgWElWRV9QUklPUklUWV9NQVNLKSA8PCBYSVZFX1BSSU9SSVRZX1NISUZUOworCisJcmV0dXJuIHhpdmU7Cit9CisKKworI2lmZGVmIENPTkZJR19TTVAKKy8qIEZpbmQgbG9naWNhbCBDUFVzIHdpdGhpbiBtYXNrIG9uIGEgZ2l2ZW4gY2hpcCBhbmQgc3RvcmUgcmVzdWx0IGluIHJldCAqLwordm9pZCBjcHVzX29uX2NoaXAoaW50IGNoaXBfaWQsIGNwdW1hc2tfdCAqbWFzaywgY3B1bWFza190ICpyZXQpCit7CisJaW50IGNwdSwgY2hpcDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdV9kbiwgKmRuOworCWNvbnN0IHUzMiAqcHJvcDsKKworCWNwdW1hc2tfY2xlYXIocmV0KTsKKwlmb3JfZWFjaF9jcHUoY3B1LCBtYXNrKSB7CisJCWNwdV9kbiA9IG9mX2dldF9jcHVfbm9kZShjcHUsIE5VTEwpOworCQlpZiAoIWNwdV9kbikKKwkJCWNvbnRpbnVlOworCisJCXByb3AgPSBvZl9nZXRfcHJvcGVydHkoY3B1X2RuLCAiYXQtbm9kZSIsIE5VTEwpOworCQlpZiAoIXByb3ApIHsKKwkJCW9mX25vZGVfcHV0KGNwdV9kbik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWRuID0gb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUoKnByb3ApOworCQlvZl9ub2RlX3B1dChjcHVfZG4pOworCisJCWNoaXAgPSB3c3BfZ2V0X2NoaXBfaWQoZG4pOworCQlpZiAoY2hpcCA9PSBjaGlwX2lkKQorCQkJY3B1bWFza19zZXRfY3B1KGNwdSwgcmV0KTsKKworCQlvZl9ub2RlX3B1dChkbik7CisJfQorfQorCisvKiBTdG9yZSBhIHN1aXRhYmxlIENQVSB0byBoYW5kbGUgYSBod2lycSBpbiB0aGUgaWNzLT5od2lycV9jcHVfbWFwIGNhY2hlICovCitzdGF0aWMgaW50IGNhY2hlX2h3aXJxX21hcChzdHJ1Y3Qgd3NwX2ljcyAqaWNzLCB1bnNpZ25lZCBpbnQgaHdpcnEsCisJCQkgICBjb25zdCBjcHVtYXNrX3QgKmFmZmluaXR5KQoreworCWNwdW1hc2tfdmFyX3QgYXZhaWwsIG5ld21hc2s7CisJaW50IHJldCA9IC1FTk9NRU0sIGNwdSwgY3B1X3JvdmVyID0gMCwgdGFyZ2V0OworCWludCBpbmRleCA9IGh3aXJxIC0gaWNzLT5od2lycV9zdGFydDsKKwl1bnNpZ25lZCBpbnQgbm9kZWlkOworCisJQlVHX09OKGluZGV4IDwgMCB8fCBpbmRleCA+PSBpY3MtPmNvdW50KTsKKworCWlmICghaWNzLT5od2lycV9jcHVfbWFwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmICghZGlzdHJpYnV0ZV9pcnFzKSB7CisJCWljcy0+aHdpcnFfY3B1X21hcFtod2lycSAtIGljcy0+aHdpcnFfc3RhcnRdID0geGljc19kZWZhdWx0X3NlcnZlcjsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogQWxsb2NhdGUgbmVlZGVkIENQVSBtYXNrcyAqLworCWlmICghYWxsb2NfY3B1bWFza192YXIoJmF2YWlsLCBHRlBfS0VSTkVMKSkKKwkJZ290byByZXQ7CisJaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmbmV3bWFzaywgR0ZQX0tFUk5FTCkpCisJCWdvdG8gZnJlZWF2YWlsOworCisJLyogRmluZCBQQnVzIGF0dGFjaGVkIHRvIHRoZSBzb3VyY2Ugb2YgdGhpcyBJUlEgKi8KKwlub2RlaWQgPSAoaHdpcnEgPj4gV1NQX0lDU19DSElQX1NISUZUKSAmIDB4MzsgLyogMTI6MTQgKi8KKworCS8qIEZpbmQgQ1BVcyB0aGF0IGNvdWxkIGhhbmRsZSB0aGlzIElSUSAqLworCWlmIChhZmZpbml0eSkKKwkJY3B1bWFza19hbmQoYXZhaWwsIGNwdV9vbmxpbmVfbWFzaywgYWZmaW5pdHkpOworCWVsc2UKKwkJY3B1bWFza19jb3B5KGF2YWlsLCBjcHVfb25saW5lX21hc2spOworCisJLyogTmFycm93IHNlbGVjdGlvbiBkb3duIHRvIGxvZ2ljYWwgQ1BVcyBvbiB0aGUgc2FtZSBjaGlwICovCisJY3B1c19vbl9jaGlwKG5vZGVpZCwgYXZhaWwsIG5ld21hc2spOworCisJLyogRW5zdXJlIHdlIGhhdmVuJ3QgbmFycm93ZWQgaXQgZG93biB0byAwICovCisJaWYgKHVubGlrZWx5KGNwdW1hc2tfZW1wdHkobmV3bWFzaykpKSB7CisJCWlmICh1bmxpa2VseShjcHVtYXNrX2VtcHR5KGF2YWlsKSkpIHsKKwkJCXJldCA9IC0xOworCQkJZ290byBvdXQ7CisJCX0KKwkJY3B1bWFza19jb3B5KG5ld21hc2ssIGF2YWlsKTsKKwl9CisKKwkvKiBDaG9vc2UgYSBDUFUgb3V0IG9mIHRob3NlIHdlIG5hcnJvd2VkIGl0IGRvd24gdG8gaW4gcm91bmQgcm9iaW4gKi8KKwl0YXJnZXQgPSBod2lycSAlIGNwdW1hc2tfd2VpZ2h0KG5ld21hc2spOworCWZvcl9lYWNoX2NwdShjcHUsIG5ld21hc2spIHsKKwkJaWYgKGNwdV9yb3ZlcisrID49IHRhcmdldCkgeworCQkJaWNzLT5od2lycV9jcHVfbWFwW2luZGV4XSA9IGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoY3B1KTsKKwkJCXJldCA9IDA7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qIFNob3VsZG4ndCBoYXBwZW4gKi8KKwlXQVJOX09OKDEpOworCitvdXQ6CisJZnJlZV9jcHVtYXNrX3ZhcihuZXdtYXNrKTsKK2ZyZWVhdmFpbDoKKwlmcmVlX2NwdW1hc2tfdmFyKGF2YWlsKTsKK3JldDoKKwlpZiAocmV0IDwgMCkgeworCQlpY3MtPmh3aXJxX2NwdV9tYXBbaW5kZXhdID0gY3B1bWFza19maXJzdChjcHVfb25saW5lX21hc2spOworCQlwcl93YXJuaW5nKCJFcnJvciwgZmFsbGluZyBod2lycSAweCV4IHJvdXRpbmcgYmFjayB0byBDUFUgJWlcbiIsCisJCQkgICBod2lycSwgaWNzLT5od2lycV9jcHVfbWFwW2luZGV4XSk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGFsbG9jX2lycV9tYXAoc3RydWN0IHdzcF9pY3MgKmljcykKK3sKKwlpbnQgaTsKKworCWljcy0+aHdpcnFfY3B1X21hcCA9IGttYWxsb2Moc2l6ZW9mKGludCkgKiBpY3MtPmNvdW50LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWljcy0+aHdpcnFfY3B1X21hcCkgeworCQlwcl93YXJuaW5nKCJBbGxvY2F0ZSBod2lycV9jcHVfbWFwIGZhaWxlZCwgIgorCQkJICAgIklSUSBiYWxhbmNpbmcgZGlzYWJsZWRcbiIpOworCQlyZXR1cm47CisJfQorCisJZm9yIChpPTA7IGkgPCBpY3MtPmNvdW50OyBpKyspCisJCWljcy0+aHdpcnFfY3B1X21hcFtpXSA9IHhpY3NfZGVmYXVsdF9zZXJ2ZXI7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2lycV9zZXJ2ZXIoc3RydWN0IHdzcF9pY3MgKmljcywgdW5zaWduZWQgaW50IGh3aXJxKQoreworCWludCBpbmRleCA9IGh3aXJxIC0gaWNzLT5od2lycV9zdGFydDsKKworCUJVR19PTihpbmRleCA8IDAgfHwgaW5kZXggPj0gaWNzLT5jb3VudCk7CisKKwlpZiAoIWljcy0+aHdpcnFfY3B1X21hcCkKKwkJcmV0dXJuIHhpY3NfZGVmYXVsdF9zZXJ2ZXI7CisKKwlyZXR1cm4gaWNzLT5od2lycV9jcHVfbWFwW2luZGV4XTsKK30KKyNlbHNlIC8qICFDT05GSUdfU01QICovCitzdGF0aWMgaW50IGNhY2hlX2h3aXJxX21hcChzdHJ1Y3Qgd3NwX2ljcyAqaWNzLCB1bnNpZ25lZCBpbnQgaHdpcnEsCisJCQkgICBjb25zdCBjcHVtYXNrX3QgKmFmZmluaXR5KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9pcnFfc2VydmVyKHN0cnVjdCB3c3BfaWNzICppY3MsIHVuc2lnbmVkIGludCBod2lycSkKK3sKKwlyZXR1cm4geGljc19kZWZhdWx0X3NlcnZlcjsKK30KKworc3RhdGljIHZvaWQgYWxsb2NfaXJxX21hcChzdHJ1Y3Qgd3NwX2ljcyAqaWNzKSB7IH0KKyNlbmRpZgorCitzdGF0aWMgdm9pZCB3c3BfY2hpcF91bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwl1bnNpZ25lZCBpbnQgaHdfaXJxID0gKHVuc2lnbmVkIGludClpcnFkX3RvX2h3aXJxKGQpOworCXN0cnVjdCB3c3BfaWNzICppY3M7CisJaW50IHNlcnZlcjsKKwl1NjQgeGl2ZTsKKworCWlmIChod19pcnEgPT0gWElDU19JUEkgfHwgaHdfaXJxID09IFhJQ1NfSVJRX1NQVVJJT1VTKQorCQlyZXR1cm47CisKKwlpY3MgPSBkLT5jaGlwX2RhdGE7CisJaWYgKFdBUk5fT04oIWljcykpCisJCXJldHVybjsKKworCXNlcnZlciA9IGdldF9pcnFfc2VydmVyKGljcywgaHdfaXJxKTsKKworCXhpdmUgPSB3c3BfaWNzX2dldF94aXZlKGljcywgaHdfaXJxKTsKKwl4aXZlID0geGl2ZV9zZXRfc2VydmVyKHhpdmUsIHNlcnZlcik7CisJeGl2ZSA9IHhpdmVfc2V0X3ByaW9yaXR5KHhpdmUsIERFRkFVTFRfUFJJT1JJVFkpOworCXdzcF9pY3Nfc2V0X3hpdmUoaWNzLCBod19pcnEsIHhpdmUpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHdzcF9jaGlwX3N0YXJ0dXAoc3RydWN0IGlycV9kYXRhICpkKQoreworCS8qIHVubWFzayBpdCAqLworCXdzcF9jaGlwX3VubWFza19pcnEoZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdzcF9tYXNrX3JlYWxfaXJxKHVuc2lnbmVkIGludCBod19pcnEsIHN0cnVjdCB3c3BfaWNzICppY3MpCit7CisJdTY0IHhpdmU7CisKKwlpZiAoaHdfaXJxID09IFhJQ1NfSVBJKQorCQlyZXR1cm47CisKKwlpZiAoV0FSTl9PTighaWNzKSkKKwkJcmV0dXJuOworCXhpdmUgPSB3c3BfaWNzX2dldF94aXZlKGljcywgaHdfaXJxKTsKKwl4aXZlID0geGl2ZV9zZXRfc2VydmVyKHhpdmUsIHhpY3NfZGVmYXVsdF9zZXJ2ZXIpOworCXhpdmUgPSB4aXZlX3NldF9wcmlvcml0eSh4aXZlLCBMT1dFU1RfUFJJT1JJVFkpOworCXdzcF9pY3Nfc2V0X3hpdmUoaWNzLCBod19pcnEsIHhpdmUpOworfQorCitzdGF0aWMgdm9pZCB3c3BfY2hpcF9tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJdW5zaWduZWQgaW50IGh3X2lycSA9ICh1bnNpZ25lZCBpbnQpaXJxZF90b19od2lycShkKTsKKwlzdHJ1Y3Qgd3NwX2ljcyAqaWNzID0gZC0+Y2hpcF9kYXRhOworCisJaWYgKGh3X2lycSA9PSBYSUNTX0lQSSB8fCBod19pcnEgPT0gWElDU19JUlFfU1BVUklPVVMpCisJCXJldHVybjsKKworCXdzcF9tYXNrX3JlYWxfaXJxKGh3X2lycSwgaWNzKTsKK30KKworc3RhdGljIGludCB3c3BfY2hpcF9zZXRfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICpkLAorCQkJCSBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywgYm9vbCBmb3JjZSkKK3sKKwl1bnNpZ25lZCBpbnQgaHdfaXJxID0gKHVuc2lnbmVkIGludClpcnFkX3RvX2h3aXJxKGQpOworCXN0cnVjdCB3c3BfaWNzICppY3M7CisJaW50IHJldDsKKwl1NjQgeGl2ZTsKKworCWlmIChod19pcnEgPT0gWElDU19JUEkgfHwgaHdfaXJxID09IFhJQ1NfSVJRX1NQVVJJT1VTKQorCQlyZXR1cm4gLTE7CisKKwlpY3MgPSBkLT5jaGlwX2RhdGE7CisJaWYgKFdBUk5fT04oIWljcykpCisJCXJldHVybiAtMTsKKwl4aXZlID0gd3NwX2ljc19nZXRfeGl2ZShpY3MsIGh3X2lycSk7CisKKwkvKgorCSAqIEZvciB0aGUgbW9tZW50IG9ubHkgaW1wbGVtZW50IGRlbGl2ZXJ5IHRvIGFsbCBjcHVzIG9yIG9uZSBjcHUuCisJICogR2V0IGN1cnJlbnQgaXJxX3NlcnZlciBmb3IgdGhlIGdpdmVuIGlycQorCSAqLworCXJldCA9IGNhY2hlX2h3aXJxX21hcChpY3MsIGQtPmlycSwgY3B1bWFzayk7CisJaWYgKHJldCA9PSAtMSkgeworCQljaGFyIGNwdWxpc3RbMTI4XTsKKwkJY3B1bWFza19zY25wcmludGYoY3B1bGlzdCwgc2l6ZW9mKGNwdWxpc3QpLCBjcHVtYXNrKTsKKwkJcHJfd2FybmluZygiJXM6IE5vIG9ubGluZSBjcHVzIGluIHRoZSBtYXNrICVzIGZvciBpcnEgJWRcbiIsCisJCQkgICBfX2Z1bmNfXywgY3B1bGlzdCwgZC0+aXJxKTsKKwkJcmV0dXJuIC0xOworCX0gZWxzZSBpZiAocmV0ID09IC1FTk9NRU0pIHsKKwkJcHJfd2FybmluZygiJXM6IE91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXhpdmUgPSB4aXZlX3NldF9zZXJ2ZXIoeGl2ZSwgZ2V0X2lycV9zZXJ2ZXIoaWNzLCBod19pcnEpKTsKKwl3c3BfaWNzX3NldF94aXZlKGljcywgaHdfaXJxLCB4aXZlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHdzcF9pcnFfY2hpcCA9IHsKKwkubmFtZSA9ICJXU1AgSUNTIiwKKwkuaXJxX3N0YXJ0dXAJCT0gd3NwX2NoaXBfc3RhcnR1cCwKKwkuaXJxX21hc2sJCT0gd3NwX2NoaXBfbWFza19pcnEsCisJLmlycV91bm1hc2sJCT0gd3NwX2NoaXBfdW5tYXNrX2lycSwKKwkuaXJxX3NldF9hZmZpbml0eQk9IHdzcF9jaGlwX3NldF9hZmZpbml0eQorfTsKKworc3RhdGljIGludCB3c3BfaWNzX2hvc3RfbWF0Y2goc3RydWN0IGljcyAqaWNzLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKQoreworCS8qIEFsbCBJQ1NzIGluIHRoZSBzeXN0ZW0gaW1wbGVtZW50IGEgZ2xvYmFsIGlycSBudW1iZXIgc3BhY2UsCisJICogc28gbWF0Y2ggYWdhaW5zdCB0aGVtIGFsbC4gKi8KKwlyZXR1cm4gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoZG4sICJpYm0scHBjLXhpY3MiKTsKK30KKworc3RhdGljIGludCB3c3BfaWNzX21hdGNoX2h3aXJxKHN0cnVjdCB3c3BfaWNzICp3c3BfaWNzLCB1bnNpZ25lZCBpbnQgaHdpcnEpCit7CisJaWYgKGh3aXJxID49IHdzcF9pY3MtPmh3aXJxX3N0YXJ0ICYmCisJICAgIGh3aXJxIDwgIHdzcF9pY3MtPmh3aXJxX3N0YXJ0ICsgd3NwX2ljcy0+Y291bnQpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd3NwX2ljc19tYXAoc3RydWN0IGljcyAqaWNzLCB1bnNpZ25lZCBpbnQgdmlycSkKK3sKKwlzdHJ1Y3Qgd3NwX2ljcyAqd3NwX2ljcyA9IHRvX3dzcF9pY3MoaWNzKTsKKwl1bnNpZ25lZCBpbnQgaHdfaXJxID0gdmlycV90b19odyh2aXJxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCF3c3BfaWNzX21hdGNoX2h3aXJxKHdzcF9pY3MsIGh3X2lycSkpCisJCXJldHVybiAtRU5PRU5UOworCisJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsICZ3c3BfaXJxX2NoaXAsIGhhbmRsZV9mYXN0ZW9pX2lycSk7CisKKwlpcnFfc2V0X2NoaXBfZGF0YSh2aXJxLCB3c3BfaWNzKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ3c3BfaWNzLT5sb2NrLCBmbGFncyk7CisJYml0bWFwX2FsbG9jYXRlX3JlZ2lvbih3c3BfaWNzLT5iaXRtYXAsIGh3X2lycSAtIHdzcF9pY3MtPmh3aXJxX3N0YXJ0LCAwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3c3BfaWNzLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd3NwX2ljc19tYXNrX3Vua25vd24oc3RydWN0IGljcyAqaWNzLCB1bnNpZ25lZCBsb25nIGh3X2lycSkKK3sKKwlzdHJ1Y3Qgd3NwX2ljcyAqd3NwX2ljcyA9IHRvX3dzcF9pY3MoaWNzKTsKKworCWlmICghd3NwX2ljc19tYXRjaF9od2lycSh3c3BfaWNzLCBod19pcnEpKQorCQlyZXR1cm47CisKKwlwcl9lcnIoIiVzOiBJUlEgJWx1IChyZWFsKSBpcyBpbnZhbGlkLCBkaXNhYmxpbmcgaXQuXG4iLCBfX2Z1bmNfXywgaHdfaXJxKTsKKwl3c3BfbWFza19yZWFsX2lycShod19pcnEsIHdzcF9pY3MpOworfQorCitzdGF0aWMgbG9uZyB3c3BfaWNzX2dldF9zZXJ2ZXIoc3RydWN0IGljcyAqaWNzLCB1bnNpZ25lZCBsb25nIGh3X2lycSkKK3sKKwlzdHJ1Y3Qgd3NwX2ljcyAqd3NwX2ljcyA9IHRvX3dzcF9pY3MoaWNzKTsKKworCWlmICghd3NwX2ljc19tYXRjaF9od2lycSh3c3BfaWNzLCBod19pcnEpKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXJldHVybiBnZXRfaXJxX3NlcnZlcih3c3BfaWNzLCBod19pcnEpOworfQorCisvKiBIVyBOdW1iZXIgYWxsb2NhdGlvbiBBUEkgKi8KKworc3RhdGljIHN0cnVjdCB3c3BfaWNzICp3c3BfaWNzX2ZpbmRfZG5faWNzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pCit7CisJc3RydWN0IGRldmljZV9ub2RlICppcGFyZW50OworCWludCBpOworCisJaXBhcmVudCA9IG9mX2lycV9maW5kX3BhcmVudChkbik7CisJaWYgKCFpcGFyZW50KSB7CisJCXByX2Vycigid3NwX2ljczogRmFpbGVkIHRvIGZpbmQgaW50ZXJydXB0IHBhcmVudCFcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlmb3IoaSA9IDA7IGkgPCBudW1faWNzOyBpKyspIHsKKwkJaWYoaWNzX2xpc3RbaV0uZG4gPT0gaXBhcmVudCkKKwkJCWJyZWFrOworCX0KKworCWlmIChpID49IG51bV9pY3MpIHsKKwkJcHJfZXJyKCJ3c3BfaWNzOiBVbmFibGUgdG8gZmluZCBwYXJlbnQgYml0bWFwIVxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiAmaWNzX2xpc3RbaV07Cit9CisKK2ludCB3c3BfaWNzX2FsbG9jX2lycShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCBpbnQgbnVtKQoreworCXN0cnVjdCB3c3BfaWNzICppY3M7CisJaW50IG9yZGVyLCBvZmZzZXQ7CisKKwlpY3MgPSB3c3BfaWNzX2ZpbmRfZG5faWNzKGRuKTsKKwlpZiAoIWljcykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBGYXN0LCBidXQgb3Zlcmx5IHN0cmljdCBpZiBudW0gaXNuJ3QgYSBwb3dlciBvZiB0d28gKi8KKwlvcmRlciA9IGdldF9jb3VudF9vcmRlcihudW0pOworCisJc3Bpbl9sb2NrX2lycSgmaWNzLT5sb2NrKTsKKwlvZmZzZXQgPSBiaXRtYXBfZmluZF9mcmVlX3JlZ2lvbihpY3MtPmJpdG1hcCwgaWNzLT5jb3VudCwgb3JkZXIpOworCXNwaW5fdW5sb2NrX2lycSgmaWNzLT5sb2NrKTsKKworCWlmIChvZmZzZXQgPCAwKQorCQlyZXR1cm4gb2Zmc2V0OworCisJcmV0dXJuIG9mZnNldCArIGljcy0+aHdpcnFfc3RhcnQ7Cit9CisKK3ZvaWQgd3NwX2ljc19mcmVlX2lycShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCB1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCB3c3BfaWNzICppY3M7CisKKwlpY3MgPSB3c3BfaWNzX2ZpbmRfZG5faWNzKGRuKTsKKwlpZiAoV0FSTl9PTighaWNzKSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycSgmaWNzLT5sb2NrKTsKKwliaXRtYXBfcmVsZWFzZV9yZWdpb24oaWNzLT5iaXRtYXAsIGlycSwgMCk7CisJc3Bpbl91bmxvY2tfaXJxKCZpY3MtPmxvY2spOworfQorCisvKiBJbml0aWFsaXNhdGlvbiAqLworCitzdGF0aWMgaW50IF9faW5pdCB3c3BfaWNzX2JpdG1hcF9zZXR1cChzdHJ1Y3Qgd3NwX2ljcyAqaWNzLAorCQkJCSAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pCit7CisJaW50IGxlbiwgaSwgaiwgc2l6ZTsKKwl1MzIgc3RhcnQsIGNvdW50OworCWNvbnN0IHUzMiAqcDsKKworCXNpemUgPSBCSVRTX1RPX0xPTkdTKGljcy0+Y291bnQpICogc2l6ZW9mKGxvbmcpOworCWljcy0+Yml0bWFwID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWljcy0+Yml0bWFwKSB7CisJCXByX2Vycigid3NwX2ljczogRU5PTUVNIGFsbG9jYXRpbmcgSVJRIGJpdG1hcCFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzcGluX2xvY2tfaW5pdCgmaWNzLT5sb2NrKTsKKworCXAgPSBvZl9nZXRfcHJvcGVydHkoZG4sICJhdmFpbGFibGUtcmFuZ2VzIiwgJmxlbik7CisJaWYgKCFwIHx8ICFsZW4pIHsKKwkJLyogRklYTUUgdGhpcyBzaG91bGQgYmUgYSBXQVJOKCkgb25jZSBtYW1ibyBpcyB1cGRhdGVkICovCisJCXByX2Vycigid3NwX2ljczogTm8gYXZhaWxhYmxlLXJhbmdlcyBkZWZpbmVkIGZvciAlc1xuIiwKKwkJCWRuLT5mdWxsX25hbWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobGVuICUgKDIgKiBzaXplb2YodTMyKSkgIT0gMCkgeworCQkvKiBGSVhNRSB0aGlzIHNob3VsZCBiZSBhIFdBUk4oKSBvbmNlIG1hbWJvIGlzIHVwZGF0ZWQgKi8KKwkJcHJfZXJyKCJ3c3BfaWNzOiBJbnZhbGlkIGF2YWlsYWJsZS1yYW5nZXMgZm9yICVzXG4iLAorCQkJZG4tPmZ1bGxfbmFtZSk7CisJCXJldHVybiAwOworCX0KKworCWJpdG1hcF9maWxsKGljcy0+Yml0bWFwLCBpY3MtPmNvdW50KTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW4gLyBzaXplb2YodTMyKTsgaSArPSAyKSB7CisJCXN0YXJ0ID0gb2ZfcmVhZF9udW1iZXIocCArIGksIDEpOworCQljb3VudCA9IG9mX3JlYWRfbnVtYmVyKHAgKyBpICsgMSwgMSk7CisKKwkJcHJfZGV2ZWwoIiVzOiBzdGFydDogJWQgY291bnQ6ICVkXG4iLCBfX2Z1bmNfXywgc3RhcnQsIGNvdW50KTsKKworCQlpZiAoKHN0YXJ0ICsgY291bnQpID4gKGljcy0+aHdpcnFfc3RhcnQgKyBpY3MtPmNvdW50KSB8fAorCQkgICAgIHN0YXJ0IDwgaWNzLT5od2lycV9zdGFydCkgeworCQkJcHJfZXJyKCJ3c3BfaWNzOiBJbnZhbGlkIHJhbmdlISAtPiAlZCB0byAlZFxuIiwKKwkJCQkJc3RhcnQsIHN0YXJ0ICsgY291bnQpOworCQkJYnJlYWs7CisJCX0KKworCQlmb3IgKGogPSAwOyBqIDwgY291bnQ7IGorKykKKwkJCWJpdG1hcF9yZWxlYXNlX3JlZ2lvbihpY3MtPmJpdG1hcCwKKwkJCQkoc3RhcnQgKyBqKSAtIGljcy0+aHdpcnFfc3RhcnQsIDApOworCX0KKworCS8qIEVuc3VyZSBMU0lzIGFyZSBub3QgYXZhaWxhYmxlIGZvciBhbGxvY2F0aW9uICovCisJYml0bWFwX2FsbG9jYXRlX3JlZ2lvbihpY3MtPmJpdG1hcCwgaWNzLT5sc2lfYmFzZSwKKwkJCSAgICAgICBnZXRfY291bnRfb3JkZXIoaWNzLT5sc2lfY291bnQpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCB3c3BfaWNzX3NldHVwKHN0cnVjdCB3c3BfaWNzICppY3MsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pCit7CisJdTMyIGxzaV9idWlkLCBtc2lfYnVpZCwgbXNpX2Jhc2UsIG1zaV9jb3VudDsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJY29uc3QgdTMyICpwOworCWludCByYywgbGVuLCBpOworCXU2NCBjYXBzLCBidWlkOworCisJcCA9IG9mX2dldF9wcm9wZXJ0eShkbiwgImludGVycnVwdC1yYW5nZXMiLCAmbGVuKTsKKwlpZiAoIXAgfHwgbGVuIDwgKDIgKiBzaXplb2YodTMyKSkpIHsKKwkJcHJfZXJyKCJ3c3BfaWNzOiBOby9iYWQgaW50ZXJydXB0LXJhbmdlcyBmb3VuZCBvbiAlc1xuIiwKKwkJCWRuLT5mdWxsX25hbWUpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlpZiAobGVuID4gKDIgKiBzaXplb2YodTMyKSkpIHsKKwkJcHJfZXJyKCJ3c3BfaWNzOiBNdWx0aXBsZSBpY3MgcmFuZ2VzIG5vdCBzdXBwb3J0ZWQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmVncyA9IG9mX2lvbWFwKGRuLCAwKTsKKwlpZiAoIXJlZ3MpIHsKKwkJcHJfZXJyKCJ3c3BfaWNzOiBvZl9pb21hcCglcykgZmFpbGVkXG4iLCBkbi0+ZnVsbF9uYW1lKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlpY3MtPmh3aXJxX3N0YXJ0ID0gb2ZfcmVhZF9udW1iZXIocCwgMSk7CisJaWNzLT5jb3VudCA9IG9mX3JlYWRfbnVtYmVyKHAgKyAxLCAxKTsKKwlpY3MtPnJlZ3MgPSByZWdzOworCisJaWNzLT5jaGlwX2lkID0gd3NwX2dldF9jaGlwX2lkKGRuKTsKKwlpZiAoV0FSTl9PTihpY3MtPmNoaXBfaWQgPCAwKSkKKwkJaWNzLT5jaGlwX2lkID0gMDsKKworCS8qIEdldCBzb21lIGluZm9ybWF0aW9ucyBhYm91dCB0aGUgY3JpdHRlciAqLworCWNhcHMgPSBpbl9iZTY0KElDU19JTlRfQ0FQU19SRUcoaWNzLT5yZWdzKSk7CisJYnVpZCA9IGluX2JlNjQoSU5UX1NSQ19MQVlFUl9CVUlEX1JFRyhpY3MtPnJlZ3MpKTsKKwlpY3MtPmxzaV9jb3VudCA9IGNhcHMgPj4gNTY7CisJbXNpX2NvdW50ID0gKGNhcHMgPj4gNDQpICYgMHg3ZmY7CisKKwkvKiBOb3RlOiBMU0kgQlVJRCBpcyA5IGJpdHMsIGJ1dCByZWFsbHkgb25seSAzIGFyZSBCVUlEIGFuZCB0aGUKKwkgKiByZXN0IGlzIG1peGVkIGluIHRoZSBpbnRlcnJ1cHQgbnVtYmVyLiBXZSBzdG9yZSB0aGUgd2hvbGUKKwkgKiB0aGluZyB0aG91Z2gKKwkgKi8KKwlsc2lfYnVpZCA9IChidWlkID4+IDQ4KSAmIDB4MWZmOworCWljcy0+bHNpX2Jhc2UgPSAoaWNzLT5jaGlwX2lkIDw8IFdTUF9JQ1NfQ0hJUF9TSElGVCkgfCBsc2lfYnVpZCA8PCA1OworCW1zaV9idWlkID0gKGJ1aWQgPj4gMzcpICYgMHg3OworCW1zaV9iYXNlID0gKGljcy0+Y2hpcF9pZCA8PCBXU1BfSUNTX0NISVBfU0hJRlQpIHwgbXNpX2J1aWQgPDwgMTE7CisKKwlwcl9pbmZvKCJ3c3BfaWNzOiBGb3VuZCAlc1xuIiwgZG4tPmZ1bGxfbmFtZSk7CisJcHJfaW5mbygid3NwX2ljczogICAgaXJxIHJhbmdlIDogMHglMDZsbHguLjB4JTA2bGx4XG4iLAorCQlpY3MtPmh3aXJxX3N0YXJ0LCBpY3MtPmh3aXJxX3N0YXJ0ICsgaWNzLT5jb3VudCAtIDEpOworCXByX2luZm8oIndzcF9pY3M6ICAgICU0ZCBMU0lzIDogMHglMDZ4Li4weCUwNnhcbiIsCisJCWljcy0+bHNpX2NvdW50LCBpY3MtPmxzaV9iYXNlLAorCQlpY3MtPmxzaV9iYXNlICsgaWNzLT5sc2lfY291bnQgLSAxKTsKKwlwcl9pbmZvKCJ3c3BfaWNzOiAgICAlNGQgTVNJcyA6IDB4JTA2eC4uMHglMDZ4XG4iLAorCQltc2lfY291bnQsIG1zaV9iYXNlLAorCQltc2lfYmFzZSArIG1zaV9jb3VudCAtIDEpOworCisJLyogTGV0J3MgY2hlY2sgdGhlIEhXIGNvbmZpZyBpcyBzYW5lICovCisJaWYgKGljcy0+bHNpX2Jhc2UgPCBpY3MtPmh3aXJxX3N0YXJ0IHx8CisJICAgIChpY3MtPmxzaV9iYXNlICsgaWNzLT5sc2lfY291bnQpID4gKGljcy0+aHdpcnFfc3RhcnQgKyBpY3MtPmNvdW50KSkKKwkJcHJfd2FybmluZygid3NwX2ljczogV0FSTklORyAhIExTSXMgb3V0IG9mIGludGVycnVwdC1yYW5nZXMgIVxuIik7CisJaWYgKG1zaV9iYXNlIDwgaWNzLT5od2lycV9zdGFydCB8fAorCSAgICAobXNpX2Jhc2UgKyBtc2lfY291bnQpID4gKGljcy0+aHdpcnFfc3RhcnQgKyBpY3MtPmNvdW50KSkKKwkJcHJfd2FybmluZygid3NwX2ljczogV0FSTklORyAhIE1TSXMgb3V0IG9mIGludGVycnVwdC1yYW5nZXMgIVxuIik7CisKKwkvKiBXZSBkb24ndCBjaGVjayBmb3Igb3ZlcmxhcCBiZXR3ZWVuIExTSSBhbmQgTVNJLCB3aGljaCB3aWxsIGhhcHBlbgorCSAqIGlmIHdlIHVzZSB0aGUgc2FtZSBCVUlELCBJJ20gbm90IHN1cmUgeWV0IGhvdyBsZWdpdCB0aGF0IGlzLgorCSAqLworCisJcmMgPSB3c3BfaWNzX2JpdG1hcF9zZXR1cChpY3MsIGRuKTsKKwlpZiAocmMpIHsKKwkJaW91bm1hcChyZWdzKTsKKwkJcmV0dXJuIHJjOworCX0KKworCWljcy0+ZG4gPSBvZl9ub2RlX2dldChkbik7CisJYWxsb2NfaXJxX21hcChpY3MpOworCisJZm9yKGkgPSAwOyBpIDwgaWNzLT5jb3VudDsgaSsrKQorCQl3c3BfbWFza19yZWFsX2lycShpY3MtPmh3aXJxX3N0YXJ0ICsgaSwgaWNzKTsKKworCWljcy0+aWNzLm1hcCA9IHdzcF9pY3NfbWFwOworCWljcy0+aWNzLm1hc2tfdW5rbm93biA9IHdzcF9pY3NfbWFza191bmtub3duOworCWljcy0+aWNzLmdldF9zZXJ2ZXIgPSB3c3BfaWNzX2dldF9zZXJ2ZXI7CisJaWNzLT5pY3MuaG9zdF9tYXRjaCA9IHdzcF9pY3NfaG9zdF9tYXRjaDsKKworCXhpY3NfcmVnaXN0ZXJfaWNzKCZpY3MtPmljcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHdzcF9pY3Nfc2V0X2RlZmF1bHRfc2VydmVyKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwl1MzIgaHdpZDsKKworCS8qIEZpbmQgdGhlIHNlcnZlciBudW1iZXIgZm9yIHRoZSBib290IGNwdS4gKi8KKwlucCA9IG9mX2dldF9jcHVfbm9kZShib290X2NwdWlkLCBOVUxMKTsKKwlCVUdfT04oIW5wKTsKKworCWh3aWQgPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGJvb3RfY3B1aWQpOworCisJcHJfaW5mbygid3NwX2ljczogZGVmYXVsdCBzZXJ2ZXIgaXMgJSN4LCBDUFUgJXNcbiIsIGh3aWQsIG5wLT5mdWxsX25hbWUpOworCXhpY3NfZGVmYXVsdF9zZXJ2ZXIgPSBod2lkOworCisJb2Zfbm9kZV9wdXQobnApOworfQorCitzdGF0aWMgaW50IF9faW5pdCB3c3BfaWNzX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOworCXN0cnVjdCB3c3BfaWNzICppY3M7CisJaW50IHJjLCBmb3VuZDsKKworCXdzcF9pY3Nfc2V0X2RlZmF1bHRfc2VydmVyKCk7CisKKwlmb3VuZCA9IDA7CisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKGRuLCBOVUxMLCAiaWJtLHBwYy14aWNzIikKKwkJZm91bmQrKzsKKworCWlmIChmb3VuZCA9PSAwKSB7CisJCXByX2Vycigid3NwX2ljczogTm8gSUNTJ3MgZm91bmQhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWNzX2xpc3QgPSBrbWFsbG9jKHNpemVvZigqaWNzKSAqIGZvdW5kLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWljc19saXN0KSB7CisJCXByX2Vycigid3NwX2ljczogTm8gbWVtb3J5IGZvciBzdHJ1Y3RzLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW51bV9pY3MgPSAwOworCWljcyA9IGljc19saXN0OworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShkbiwgTlVMTCwgImlibSx3c3AteGljcyIpIHsKKwkJcmMgPSB3c3BfaWNzX3NldHVwKGljcywgZG4pOworCQlpZiAocmMgPT0gMCkgeworCQkJaWNzKys7CisJCQludW1faWNzKys7CisJCX0KKwl9CisKKwlpZiAoZm91bmQgIT0gbnVtX2ljcykgeworCQlwcl9lcnIoIndzcF9pY3M6IEZhaWxlZCBzZXR0aW5nIHVwICVkIElDUydzXG4iLAorCQkJZm91bmQgLSBudW1faWNzKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIF9faW5pdCB3c3BfaW5pdF9pcnEodm9pZCkKK3sKKwl3c3BfaWNzX2luaXQoKTsKKwl4aWNzX2luaXQoKTsKKworCS8qIFdlIG5lZWQgdG8gcGF0Y2ggb3VyIGlycSBjaGlwJ3MgRU9JIHRvIHBvaW50IHRvIHRoZSByaWdodCBJQ1AgKi8KKwl3c3BfaXJxX2NoaXAuaXJxX2VvaSA9IGljcF9vcHMtPmVvaTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvd3NwL2ljcy5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy93c3AvaWNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM0ZDUzMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvd3NwL2ljcy5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSBJQk0gQ29ycG9yYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX0lDU19ICisjZGVmaW5lIF9fSUNTX0gKKworI2RlZmluZSBYSVZFX0FERFJfTUFTSwkJMHg3RkZVTEwKKworZXh0ZXJuIHZvaWQgd3NwX2luaXRfaXJxKHZvaWQpOworCitleHRlcm4gaW50IHdzcF9pY3NfYWxsb2NfaXJxKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIGludCBudW0pOworZXh0ZXJuIHZvaWQgd3NwX2ljc19mcmVlX2lycShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCB1bnNpZ25lZCBpbnQgaXJxKTsKKworI2VuZGlmIC8qIF9fSUNTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvd3NwL29wYl9waWMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvd3NwL29wYl9waWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTA1NjMxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy93c3Avb3BiX3BpYy5jCkBAIC0wLDAgKzEsMzMyIEBACisvKgorICogSUJNIE9uYm9hcmQgUGVyaXBoZXJhbCBCdXMgSW50ZXJydXB0IENvbnRyb2xsZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAxMCBKYWNrIE1pbGxlciwgSUJNIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorCisjaW5jbHVkZSA8YXNtL3JlZ19hMi5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2RlZmluZSBPUEJfTlJfSVJRUyAzMgorCisjZGVmaW5lIE9QQl9NTFNBU0lFUgkweDA0ICAgIC8qIE1MUyBBY2N1bXVsYXRlZCBTdGF0dXMgSUVSICovCisjZGVmaW5lIE9QQl9NTFNJUgkweDUwCS8qIE1MUyBJbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgT1BCX01MU0lFUgkweDU0CS8qIE1MUyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIE9QQl9NTFNJUFIJMHg1OAkvKiBNTFMgSW50ZXJydXB0IFBvbGFyaXR5IFJlZ2lzdGVyICovCisjZGVmaW5lIE9QQl9NTFNJSVIJMHg1YwkvKiBNTFMgSW50ZXJydXB0IElucHV0cyBSZWdpc3RlciAqLworCitzdGF0aWMgaW50IG9wYl9pbmRleCA9IDA7CisKK3N0cnVjdCBvcGJfcGljIHsKKwlzdHJ1Y3QgaXJxX2hvc3QgKmhvc3Q7CisJdm9pZCAqcmVnczsKKwlpbnQgaW5kZXg7CisJc3BpbmxvY2tfdCBsb2NrOworfTsKKworc3RhdGljIHUzMiBvcGJfaW4oc3RydWN0IG9wYl9waWMgKm9wYiwgaW50IG9mZnNldCkKK3sKKwlyZXR1cm4gaW5fYmUzMihvcGItPnJlZ3MgKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBvcGJfb3V0KHN0cnVjdCBvcGJfcGljICpvcGIsIGludCBvZmZzZXQsIHUzMiB2YWwpCit7CisJb3V0X2JlMzIob3BiLT5yZWdzICsgb2Zmc2V0LCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBvcGJfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJc3RydWN0IG9wYl9waWMgKm9wYjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBpZXIsIGJpdHNldDsKKworCW9wYiA9IGQtPmNoaXBfZGF0YTsKKwliaXRzZXQgPSAoMSA8PCAoMzEgLSBpcnFkX3RvX2h3aXJxKGQpKSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb3BiLT5sb2NrLCBmbGFncyk7CisKKwlpZXIgPSBvcGJfaW4ob3BiLCBPUEJfTUxTSUVSKTsKKwlvcGJfb3V0KG9wYiwgT1BCX01MU0lFUiwgaWVyIHwgYml0c2V0KTsKKwlpZXIgPSBvcGJfaW4ob3BiLCBPUEJfTUxTSUVSKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9wYi0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBvcGJfbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQoreworCXN0cnVjdCBvcGJfcGljICpvcGI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgaWVyLCBtYXNrOworCisJb3BiID0gZC0+Y2hpcF9kYXRhOworCW1hc2sgPSB+KDEgPDwgKDMxIC0gaXJxZF90b19od2lycShkKSkpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9wYi0+bG9jaywgZmxhZ3MpOworCisJaWVyID0gb3BiX2luKG9wYiwgT1BCX01MU0lFUik7CisJb3BiX291dChvcGIsIE9QQl9NTFNJRVIsIGllciAmIG1hc2spOworCWllciA9IG9wYl9pbihvcGIsIE9QQl9NTFNJRVIpOyAvLyBGbHVzaCBwb3N0ZWQgd3JpdGVzCisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcGItPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgb3BiX2Fja19pcnEoc3RydWN0IGlycV9kYXRhICpkKQoreworCXN0cnVjdCBvcGJfcGljICpvcGI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgYml0c2V0OworCisJb3BiID0gZC0+Y2hpcF9kYXRhOworCWJpdHNldCA9ICgxIDw8ICgzMSAtIGlycWRfdG9faHdpcnEoZCkpKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZvcGItPmxvY2ssIGZsYWdzKTsKKworCW9wYl9vdXQob3BiLCBPUEJfTUxTSVIsIGJpdHNldCk7CisJb3BiX2luKG9wYiwgT1BCX01MU0lSKTsgLy8gRmx1c2ggcG9zdGVkIHdyaXRlcworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3BiLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG9wYl9tYXNrX2Fja19pcnEoc3RydWN0IGlycV9kYXRhICpkKQoreworCXN0cnVjdCBvcGJfcGljICpvcGI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgYml0c2V0OworCXUzMiBpZXIsIGlyOworCisJb3BiID0gZC0+Y2hpcF9kYXRhOworCWJpdHNldCA9ICgxIDw8ICgzMSAtIGlycWRfdG9faHdpcnEoZCkpKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZvcGItPmxvY2ssIGZsYWdzKTsKKworCWllciA9IG9wYl9pbihvcGIsIE9QQl9NTFNJRVIpOworCW9wYl9vdXQob3BiLCBPUEJfTUxTSUVSLCBpZXIgJiB+Yml0c2V0KTsKKwlpZXIgPSBvcGJfaW4ob3BiLCBPUEJfTUxTSUVSKTsgLy8gRmx1c2ggcG9zdGVkIHdyaXRlcworCisJb3BiX291dChvcGIsIE9QQl9NTFNJUiwgYml0c2V0KTsKKwlpciA9IG9wYl9pbihvcGIsIE9QQl9NTFNJUik7IC8vIEZsdXNoIHBvc3RlZCB3cml0ZXMKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9wYi0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IG9wYl9zZXRfaXJxX3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgZmxvdykKK3sKKwlzdHJ1Y3Qgb3BiX3BpYyAqb3BiOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGludmVydCwgaXByLCBtYXNrLCBiaXQ7CisKKwlvcGIgPSBkLT5jaGlwX2RhdGE7CisKKwkvKiBUaGUgb25seSBpbmZvcm1hdGlvbiB3ZSdyZSBpbnRlcmVzdGVkIGluIGluIHRoZSB0eXBlIGlzIHdoZXRoZXIgaXQncworCSAqIGEgaGlnaCBvciBsb3cgdHJpZ2dlci4gRm9yIGhpZ2ggdHJpZ2dlcmVkIGludGVycnVwdHMsIHRoZSBwb2xhcml0eQorCSAqIHNldCBmb3IgaXQgaW4gdGhlIE1MUyBJbnRlcnJ1cHQgUG9sYXJpdHkgUmVnaXN0ZXIgaXMgMCwgZm9yIGxvdworCSAqIGludGVycnVwdHMgaXQncyAxIHNvIHRoYXQgdGhlIHByb3BlciBpbnB1dCBpbiB0aGUgTUxTIEludGVycnVwdCBJbnB1dAorCSAqIFJlZ2lzdGVyIGlzIGludGVycnVwdGVkIGFzIGFzc2VydGluZyB0aGUgaW50ZXJydXB0LiAqLworCisJc3dpdGNoIChmbG93KSB7CisJCWNhc2UgSVJRX1RZUEVfTk9ORToKKwkJCW9wYl9tYXNrX2lycShkKTsKKwkJCXJldHVybiAwOworCisJCWNhc2UgSVJRX1RZUEVfTEVWRUxfSElHSDoKKwkJCWludmVydCA9IDA7CisJCQlicmVhazsKKworCQljYXNlIElSUV9UWVBFX0xFVkVMX0xPVzoKKwkJCWludmVydCA9IDE7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYml0ID0gKDEgPDwgKDMxIC0gaXJxZF90b19od2lycShkKSkpOworCW1hc2sgPSB+Yml0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9wYi0+bG9jaywgZmxhZ3MpOworCisJaXByID0gb3BiX2luKG9wYiwgT1BCX01MU0lQUik7CisJaXByID0gKGlwciAmIG1hc2spIHwgKGludmVydCA/IGJpdCA6IDApOworCW9wYl9vdXQob3BiLCBPUEJfTUxTSVBSLCBpcHIpOworCWlwciA9IG9wYl9pbihvcGIsIE9QQl9NTFNJUFIpOyAgLy8gRmx1c2ggcG9zdGVkIHdyaXRlcworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3BiLT5sb2NrLCBmbGFncyk7CisKKwkvKiBSZWNvcmQgdGhlIHR5cGUgaW4gdGhlIGludGVycnVwdCBkZXNjcmlwdG9yICovCisJaXJxZF9zZXRfdHJpZ2dlcl90eXBlKGQsIGZsb3cpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgb3BiX2lycV9jaGlwID0geworCS5uYW1lCQk9ICJPUEIiLAorCS5pcnFfbWFzawk9IG9wYl9tYXNrX2lycSwKKwkuaXJxX3VubWFzawk9IG9wYl91bm1hc2tfaXJxLAorCS5pcnFfbWFza19hY2sJPSBvcGJfbWFza19hY2tfaXJxLAorCS5pcnFfYWNrCT0gb3BiX2Fja19pcnEsCisJLmlycV9zZXRfdHlwZQk9IG9wYl9zZXRfaXJxX3R5cGUKK307CisKK3N0YXRpYyBpbnQgb3BiX2hvc3RfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IHZpcnEsCisJCWlycV9od19udW1iZXJfdCBod2lycSkKK3sKKwlzdHJ1Y3Qgb3BiX3BpYyAqb3BiOworCisJb3BiID0gaG9zdC0+aG9zdF9kYXRhOworCisJLyogTW9zdCBvZiB0aGUgaW1wb3J0YW50IHN0dWZmIGlzIGhhbmRsZWQgYnkgdGhlIGdlbmVyaWMgaG9zdCBjb2RlLCBsaWtlCisJICogdGhlIGxvb2t1cCwgc28ganVzdCBhdHRhY2ggc29tZSBpbmZvIHRvIHRoZSB2aXJ0dWFsIGlycSAqLworCisJaXJxX3NldF9jaGlwX2RhdGEodmlycSwgb3BiKTsKKwlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIodmlycSwgJm9wYl9pcnFfY2hpcCwgaGFuZGxlX2xldmVsX2lycSk7CisJaXJxX3NldF9pcnFfdHlwZSh2aXJxLCBJUlFfVFlQRV9OT05FKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wYl9ob3N0X3hsYXRlKHN0cnVjdCBpcnFfaG9zdCAqaG9zdCwgc3RydWN0IGRldmljZV9ub2RlICpkbiwKKwkJY29uc3QgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKKwkJaXJxX2h3X251bWJlcl90ICpvdXRfaHdpcnEsIHVuc2lnbmVkIGludCAqb3V0X3R5cGUpCit7CisJLyogSW50ZXJydXB0IHNpemUgbXVzdCA9PSAyICovCisJQlVHX09OKGludHNpemUgIT0gMik7CisJKm91dF9od2lycSA9IGludHNwZWNbMF07CisJKm91dF90eXBlID0gaW50c3BlY1sxXTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfaG9zdF9vcHMgb3BiX2hvc3Rfb3BzID0geworCS5tYXAgPSBvcGJfaG9zdF9tYXAsCisJLnhsYXRlID0gb3BiX2hvc3RfeGxhdGUsCit9OworCitpcnFyZXR1cm5fdCBvcGJfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqcHJpdmF0ZSkKK3sKKwlzdHJ1Y3Qgb3BiX3BpYyAqb3BiOworCXUzMiBpciwgc3JjLCBzdWJ2aXJxOworCisJb3BiID0gKHN0cnVjdCBvcGJfcGljICopIHByaXZhdGU7CisKKwkvKiBSZWFkIHRoZSBPUEIgTUxTIEludGVycnVwdCBSZWdpc3RlciBmb3IKKwkgKiBhc3NlcnRlZCBpbnRlcnJ1cHRzICovCisJaXIgPSBvcGJfaW4ob3BiLCBPUEJfTUxTSVIpOworCWlmICghaXIpCisJCXJldHVybiBJUlFfTk9ORTsKKworCWRvIHsKKwkJLyogR2V0IDEgLSAzMiBzb3VyY2UsICpOT1QqIGJpdCAqLworCQlzcmMgPSAzMiAtIGZmcyhpcik7CisKKwkJLyogVHJhbnNsYXRlIGZyb20gdGhlIE9QQidzIGNvbmNlcHRpb24gb2YgaW50ZXJydXB0IG51bWJlciB0bworCQkgKiBMaW51eCdzIHZpcnR1YWwgSVJRICovCisKKwkJc3VidmlycSA9IGlycV9saW5lYXJfcmV2bWFwKG9wYi0+aG9zdCwgc3JjKTsKKworCQlnZW5lcmljX2hhbmRsZV9pcnEoc3VidmlycSk7CisJfSB3aGlsZSAoKGlyID0gb3BiX2luKG9wYiwgT1BCX01MU0lSKSkpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdHJ1Y3Qgb3BiX3BpYyAqb3BiX3BpY19pbml0X29uZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKQoreworCXN0cnVjdCBvcGJfcGljICpvcGI7CisJc3RydWN0IHJlc291cmNlIHJlczsKKworCWlmIChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKGRuLCAwLCAmcmVzKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm9wYjogQ291bGRuJ3QgdHJhbnNsYXRlIHJlc291cmNlXG4iKTsKKwkJcmV0dXJuICBOVUxMOworCX0KKworCW9wYiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvcGJfcGljKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvcGIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJvcGI6IEZhaWxlZCB0byBhbGxvY2F0ZSBvcGIgc3RydWN0IVxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIEdldCBhY2Nlc3MgdG8gdGhlIE9QQiBNTUlPIHJlZ2lzdGVycyAqLworCW9wYi0+cmVncyA9IGlvcmVtYXAocmVzLnN0YXJ0ICsgMHgxMDAwMCwgMHgxMDAwKTsKKwlpZiAoIW9wYi0+cmVncykgeworCQlwcmludGsoS0VSTl9FUlIgIm9wYjogRmFpbGVkIHRvIGFsbG9jYXRlIHJlZ2lzdGVyIHNwYWNlIVxuIik7CisJCWdvdG8gZnJlZV9vcGI7CisJfQorCisJLyogQWxsb2NhdGUgYW4gaXJxIGhvc3Qgc28gdGhhdCBMaW51eCBrbm93cyB0aGF0IGRlc3BpdGUgb25seQorCSAqIGhhdmluZyBvbmUgaW50ZXJydXB0IHRvIGlzc3VlLCB3ZSdyZSB0aGUgY29udHJvbGxlciBmb3IgbXVsdGlwbGUKKwkgKiBoYXJkd2FyZSBJUlFzLCBzbyBsYXRlciB3ZSBjYW4gbG9va3VwIHRoZWlyIHZpcnR1YWwgSVJRcy4gKi8KKworCW9wYi0+aG9zdCA9IGlycV9hbGxvY19ob3N0KGRuLCBJUlFfSE9TVF9NQVBfTElORUFSLAorCQkJT1BCX05SX0lSUVMsICZvcGJfaG9zdF9vcHMsIC0xKTsKKworCWlmICghb3BiLT5ob3N0KSB7CisJCXByaW50ayhLRVJOX0VSUiAib3BiOiBGYWlsZWQgdG8gYWxsb2NhdGUgSVJRIGhvc3QhXG4iKTsKKwkJZ290byBmcmVlX3JlZ3M7CisJfQorCisJb3BiLT5pbmRleCA9IG9wYl9pbmRleCsrOworCXNwaW5fbG9ja19pbml0KCZvcGItPmxvY2spOworCW9wYi0+aG9zdC0+aG9zdF9kYXRhID0gb3BiOworCisJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyBieSBkZWZhdWx0ICovCisJb3BiX291dChvcGIsIE9QQl9NTFNBU0lFUiwgMCk7CisJb3BiX291dChvcGIsIE9QQl9NTFNJRVIsIDApOworCisJLyogQUNLIGFueSBpbnRlcnJ1cHRzIGxlZnQgYnkgRlcgKi8KKwlvcGJfb3V0KG9wYiwgT1BCX01MU0lSLCAweEZGRkZGRkZGKTsKKworCXJldHVybiBvcGI7CisKK2ZyZWVfcmVnczoKKwlpb3VubWFwKG9wYi0+cmVncyk7CitmcmVlX29wYjoKKwlrZnJlZShvcGIpOworCXJldHVybiBOVUxMOworfQorCit2b2lkIF9faW5pdCBvcGJfcGljX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOworCXN0cnVjdCBvcGJfcGljICpvcGI7CisJaW50IHZpcnE7CisJaW50IHJjOworCisJLyogQ2FsbCBpbml0X29uZSBmb3IgZWFjaCBPUEIgZGV2aWNlICovCisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKGRuLCBOVUxMLCAiaWJtLG9wYiIpIHsKKworCQkvKiBGaWxsIGluIGFuIE9QQiBzdHJ1Y3QgKi8KKwkJb3BiID0gb3BiX3BpY19pbml0X29uZShkbik7CisJCWlmICghb3BiKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJvcGI6IEZhaWxlZCB0byBpbml0IG5vZGUsIHNraXBwZWQhXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogTWFwIC8gZ2V0IG9wYidzIGhhcmR3YXJlIHZpcnR1YWwgaXJxICovCisJCXZpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChkbiwgMCk7CisJCWlmICh2aXJxIDw9IDApIHsKKwkJCXByaW50aygib3BiOiBpcnFfb3BfcGFyc2VfYW5kX21hcCBmYWlsZWQhXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogQXR0YWNoIG9wYiBpbnRlcnJ1cHQgaGFuZGxlciB0byBuZXcgdmlydHVhbCBJUlEgKi8KKwkJcmMgPSByZXF1ZXN0X2lycSh2aXJxLCBvcGJfaXJxX2hhbmRsZXIsIDAsICJPUEIgTFMgQ2FzY2FkZSIsIG9wYik7CisJCWlmIChyYykgeworCQkJcHJpbnRrKCJvcGI6IHJlcXVlc3RfaXJxIGZhaWxlZDogJWRcbiIsIHJjKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcHJpbnRrKCJPUEIlZCBpbml0IHdpdGggJWQgSVJRcyBhdCAlcFxuIiwgb3BiLT5pbmRleCwKKwkJCQlPUEJfTlJfSVJRUywgb3BiLT5yZWdzKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3dzcC9wc3IyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3dzcC9wc3IyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBmMjg5MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvd3NwL3BzcjIuYwpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDgtMjAxMSwgSUJNIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vdWRiZy5oPgorCisjaW5jbHVkZSAiaWNzLmgiCisjaW5jbHVkZSAid3NwLmgiCisKKworc3RhdGljIHZvaWQgcHNyMl9zcGluKHZvaWQpCit7CisJaGFyZF9pcnFfZGlzYWJsZSgpOworCWZvciAoOzspIDsKK30KKworc3RhdGljIHZvaWQgcHNyMl9yZXN0YXJ0KGNoYXIgKmNtZCkKK3sKKwlwc3IyX3NwaW4oKTsKK30KKworc3RhdGljIGludCBwc3IyX3Byb2JlX2RldmljZXModm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCisJLyogT3VyIFJUQyBpcyBhIGRzMTUwMC4gSXQgc2VlbXMgdG8gYmUgcHJvZ3JhbWF0aWNhbGx5IGNvbXBhdGlibGUKKwkgKiB3aXRoIHRoZSBkczE1MTEgZm9yIHdoaWNoIHdlIGhhdmUgYSBkcml2ZXIgc28gbGV0J3MgdXNlIHRoYXQKKwkgKi8KKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJkYWxsYXMsZHMxNTAwIik7CisJaWYgKG5wICE9IE5VTEwpIHsKKwkJc3RydWN0IHJlc291cmNlIHJlczsKKwkJaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyZXMpID09IDApCisJCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJkczE1MTEiLCAwLCAmcmVzLCAxKTsKKwl9CisJcmV0dXJuIDA7Cit9CittYWNoaW5lX2FyY2hfaW5pdGNhbGwocHNyMl9tZCwgcHNyMl9wcm9iZV9kZXZpY2VzKTsKKworc3RhdGljIHZvaWQgX19pbml0IHBzcjJfc2V0dXBfYXJjaCh2b2lkKQoreworCS8qIGluaXQgdG8gc29tZSB+c2FuZSB2YWx1ZSB1bnRpbCBjYWxpYnJhdGVfZGVsYXkoKSBydW5zICovCisJbG9vcHNfcGVyX2ppZmZ5ID0gNTAwMDAwMDA7CisKKwlzY29tX2luaXRfd3NwKCk7CisKKwkvKiBTZXR1cCBTTVAgY2FsbGJhY2sgKi8KKyNpZmRlZiBDT05GSUdfU01QCisJYTJfc2V0dXBfc21wKCk7CisjZW5kaWYKK30KKworc3RhdGljIGludCBfX2luaXQgcHNyMl9wcm9iZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcm9vdCA9IG9mX2dldF9mbGF0X2R0X3Jvb3QoKTsKKworCWlmICghb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJpYm0scHNyMiIpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcHNyMl9pbml0X2lycSh2b2lkKQoreworCXdzcF9pbml0X2lycSgpOworCW9wYl9waWNfaW5pdCgpOworfQorCitkZWZpbmVfbWFjaGluZShwc3IyX21kKSB7CisJLm5hbWUJCQk9ICJQU1IyIEEyIiwKKwkucHJvYmUJCQk9IHBzcjJfcHJvYmUsCisJLnNldHVwX2FyY2gJCT0gcHNyMl9zZXR1cF9hcmNoLAorCS5yZXN0YXJ0CQk9IHBzcjJfcmVzdGFydCwKKwkucG93ZXJfb2ZmCQk9IHBzcjJfc3BpbiwKKwkuaGFsdAkJCT0gcHNyMl9zcGluLAorCS5jYWxpYnJhdGVfZGVjcgkJPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAorCS5pbml0X0lSUQkJPSBwc3IyX2luaXRfaXJxLAorCS5wcm9ncmVzcwkJPSB1ZGJnX3Byb2dyZXNzLAorCS5wb3dlcl9zYXZlCQk9IGJvb2szZV9pZGxlLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvd3NwL3Njb21fc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3dzcC9zY29tX3NtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MWU3ODAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3dzcC9zY29tX3NtcC5jCkBAIC0wLDAgKzEsNDI3IEBACisvKgorICogU0NPTSBzdXBwb3J0IGZvciBBMiBwbGF0Zm9ybXMKKyAqCisgKiBDb3B5cmlnaHQgMjAwNy0yMDExIEJlbmphbWluIEhlcnJlbnNjaG1pZHQsIERhdmlkIEdpYnNvbiwKKyAqCQkgICAgICAgTWljaGFlbCBFbGxlcm1hbiwgSUJNIENvcnAuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vY3B1dGhyZWFkcy5oPgorI2luY2x1ZGUgPGFzbS9yZWdfYTIuaD4KKyNpbmNsdWRlIDxhc20vc2NvbS5oPgorI2luY2x1ZGUgPGFzbS91ZGJnLmg+CisKKyNpbmNsdWRlICJ3c3AuaCIKKworI2RlZmluZSBTQ09NX1JBTUMJCTB4MmEJCS8qIFJhbSBDb21tYW5kICovCisjZGVmaW5lIFNDT01fUkFNQ19UR1QxX0VYVAkweDgwMDAwMDAwCisjZGVmaW5lIFNDT01fUkFNQ19TUkMxX0VYVAkweDQwMDAwMDAwCisjZGVmaW5lIFNDT01fUkFNQ19TUkMyX0VYVAkweDIwMDAwMDAwCisjZGVmaW5lIFNDT01fUkFNQ19TUkMzX0VYVAkweDEwMDAwMDAwCisjZGVmaW5lIFNDT01fUkFNQ19FTkFCTEUJMHgwMDA4MDAwMAorI2RlZmluZSBTQ09NX1JBTUNfVEhSRUFEU0VMCTB4MDAwNjAwMDAKKyNkZWZpbmUgU0NPTV9SQU1DX0VYRUNVVEUJMHgwMDAxMDAwMAorI2RlZmluZSBTQ09NX1JBTUNfTVNSX09WRVJSSURFCTB4MDAwMDgwMDAKKyNkZWZpbmUgU0NPTV9SQU1DX01TUl9QUgkweDAwMDA0MDAwCisjZGVmaW5lIFNDT01fUkFNQ19NU1JfR1MJMHgwMDAwMjAwMAorI2RlZmluZSBTQ09NX1JBTUNfRk9SQ0UJCTB4MDAwMDEwMDAKKyNkZWZpbmUgU0NPTV9SQU1DX0ZMVVNICQkweDAwMDAwODAwCisjZGVmaW5lIFNDT01fUkFNQ19JTlRFUlJVUFQJMHgwMDAwMDAwNAorI2RlZmluZSBTQ09NX1JBTUNfRVJST1IJCTB4MDAwMDAwMDIKKyNkZWZpbmUgU0NPTV9SQU1DX0RPTkUJCTB4MDAwMDAwMDEKKyNkZWZpbmUgU0NPTV9SQU1JCQkweDI5CQkvKiBSYW0gSW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUgU0NPTV9SQU1JQwkJMHgyOAkJLyogUmFtIEluc3RydWN0aW9uIGFuZCBDb21tYW5kICovCisjZGVmaW5lIFNDT01fUkFNSUNfSU5TTgkJMHhmZmZmZmZmZjAwMDAwMDAwCisjZGVmaW5lIFNDT01fUkFNRAkJMHgyZAkJLyogUmFtIERhdGEgKi8KKyNkZWZpbmUgU0NPTV9SQU1ESAkJMHgyZQkJLyogUmFtIERhdGEgSGlnaCAqLworI2RlZmluZSBTQ09NX1JBTURMCQkweDJmCQkvKiBSYW0gRGF0YSBMb3cgKi8KKyNkZWZpbmUgU0NPTV9QQ0NSMAkJMHgzMwkJLyogUEMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwICovCisjZGVmaW5lIFNDT01fUENDUjBfRU5BQkxFX0RFQlVHCTB4ODAwMDAwMDAKKyNkZWZpbmUgU0NPTV9QQ0NSMF9FTkFCTEVfUkFNCTB4NDAwMDAwMDAKKyNkZWZpbmUgU0NPTV9USFJDVEwJCTB4MzAJCS8qIFRocmVhZCBDb250cm9sIGFuZCBTdGF0dXMgKi8KKyNkZWZpbmUgU0NPTV9USFJDVExfVDBfU1RPUAkweDgwMDAwMDAwCisjZGVmaW5lIFNDT01fVEhSQ1RMX1QxX1NUT1AJMHg0MDAwMDAwMAorI2RlZmluZSBTQ09NX1RIUkNUTF9UMl9TVE9QCTB4MjAwMDAwMDAKKyNkZWZpbmUgU0NPTV9USFJDVExfVDNfU1RPUAkweDEwMDAwMDAwCisjZGVmaW5lIFNDT01fVEhSQ1RMX1QwX1NURVAJMHgwODAwMDAwMAorI2RlZmluZSBTQ09NX1RIUkNUTF9UMV9TVEVQCTB4MDQwMDAwMDAKKyNkZWZpbmUgU0NPTV9USFJDVExfVDJfU1RFUAkweDAyMDAwMDAwCisjZGVmaW5lIFNDT01fVEhSQ1RMX1QzX1NURVAJMHgwMTAwMDAwMAorI2RlZmluZSBTQ09NX1RIUkNUTF9UMF9SVU4JMHgwMDgwMDAwMAorI2RlZmluZSBTQ09NX1RIUkNUTF9UMV9SVU4JMHgwMDQwMDAwMAorI2RlZmluZSBTQ09NX1RIUkNUTF9UMl9SVU4JMHgwMDIwMDAwMAorI2RlZmluZSBTQ09NX1RIUkNUTF9UM19SVU4JMHgwMDEwMDAwMAorI2RlZmluZSBTQ09NX1RIUkNUTF9UMF9QTQkweDAwMDgwMDAwCisjZGVmaW5lIFNDT01fVEhSQ1RMX1QxX1BNCTB4MDAwNDAwMDAKKyNkZWZpbmUgU0NPTV9USFJDVExfVDJfUE0JMHgwMDAyMDAwMAorI2RlZmluZSBTQ09NX1RIUkNUTF9UM19QTQkweDAwMDEwMDAwCisjZGVmaW5lIFNDT01fVEhSQ1RMX1QwX1VERQkweDAwMDA4MDAwCisjZGVmaW5lIFNDT01fVEhSQ1RMX1QxX1VERQkweDAwMDA0MDAwCisjZGVmaW5lIFNDT01fVEhSQ1RMX1QyX1VERQkweDAwMDAyMDAwCisjZGVmaW5lIFNDT01fVEhSQ1RMX1QzX1VERQkweDAwMDAxMDAwCisjZGVmaW5lIFNDT01fVEhSQ1RMX0FTWU5DX0RJUwkweDAwMDAwODAwCisjZGVmaW5lIFNDT01fVEhSQ1RMX1RCX0RJUwkweDAwMDAwNDAwCisjZGVmaW5lIFNDT01fVEhSQ1RMX0RFQ19ESVMJMHgwMDAwMDIwMAorI2RlZmluZSBTQ09NX1RIUkNUTF9BTkQJCTB4MzEJCS8qIFRocmVhZCBDb250cm9sIGFuZCBTdGF0dXMgKi8KKyNkZWZpbmUgU0NPTV9USFJDVExfT1IJCTB4MzIJCS8qIFRocmVhZCBDb250cm9sIGFuZCBTdGF0dXMgKi8KKworCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc2NvbV9tYXBfdCwgc2NvbV9wdHJzKTsKKworc3RhdGljIHNjb21fbWFwX3QgZ2V0X3Njb20oaW50IGNwdSwgc3RydWN0IGRldmljZV9ub2RlICpucCwgaW50ICpmaXJzdF90aHJlYWQpCit7CisJc2NvbV9tYXBfdCBzY29tID0gcGVyX2NwdShzY29tX3B0cnMsIGNwdSk7CisJaW50IHRjcHU7CisKKwlpZiAoc2NvbV9tYXBfb2soc2NvbSkpIHsKKwkJKmZpcnN0X3RocmVhZCA9IDA7CisJCXJldHVybiBzY29tOworCX0KKworCSpmaXJzdF90aHJlYWQgPSAxOworCisJc2NvbSA9IHNjb21fbWFwX2RldmljZShucCwgMCk7CisKKwlmb3IgKHRjcHUgPSBjcHVfZmlyc3RfdGhyZWFkX3NpYmxpbmcoY3B1KTsKKwkgICAgIHRjcHUgPD0gY3B1X2xhc3RfdGhyZWFkX3NpYmxpbmcoY3B1KTsgdGNwdSsrKQorCQlwZXJfY3B1KHNjb21fcHRycywgdGNwdSkgPSBzY29tOworCisJLyogSGFjazogZm9yIHRoZSBib290IGNvcmUsIHRoaXMgd2lsbCBhY3R1YWxseSBnZXQgY2FsbGVkIG9uCisJICogdGhlIHNlY29uZCB0aHJlYWQgdXAsIG5vdCB0aGUgZmlyc3Qgc28gb3VyIHRlc3QgYWJvdmUgd2lsbAorCSAqIHNldCBmaXJzdF90aHJlYWQgaW5jb3JyZWN0bHkuICovCisJaWYgKGNwdV9maXJzdF90aHJlYWRfc2libGluZyhjcHUpID09IDApCisJCSpmaXJzdF90aHJlYWQgPSAwOworCisJcmV0dXJuIHNjb207Cit9CisKK3N0YXRpYyBpbnQgYTJfc2NvbV9yYW0oc2NvbV9tYXBfdCBzY29tLCBpbnQgdGhyZWFkLCB1MzIgaW5zbiwgaW50IGV4dG1hc2spCit7CisJdTY0IGNtZCwgbWFzaywgdmFsOworCWludCBuID0gMDsKKworCWNtZCA9ICgodTY0KWluc24gPDwgMzIpIHwgKCgodTY0KWV4dG1hc2sgJiAweGYpIDw8IDI4KQorCQl8ICgodTY0KXRocmVhZCA8PCAxNykgfCBTQ09NX1JBTUNfRU5BQkxFIHwgU0NPTV9SQU1DX0VYRUNVVEU7CisJbWFzayA9IFNDT01fUkFNQ19ET05FIHwgU0NPTV9SQU1DX0lOVEVSUlVQVCB8IFNDT01fUkFNQ19FUlJPUjsKKworCXNjb21fd3JpdGUoc2NvbSwgU0NPTV9SQU1JQywgY21kKTsKKworCXdoaWxlICghKCh2YWwgPSBzY29tX3JlYWQoc2NvbSwgU0NPTV9SQU1DKSkgJiBtYXNrKSkgeworCQlwcl9kZXZlbCgiV2FpdGluZyBvbiBSQU1DID0gMHglbGx4XG4iLCB2YWwpOworCQlpZiAoKytuID09IDMpIHsKKwkJCXByX2VycigiUkFNQyB0aW1lb3V0IG9uIGluc3RydWN0aW9uIDB4JTA4eCwgdGhyZWFkICVkXG4iLAorCQkJICAgICAgIGluc24sIHRocmVhZCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlpZiAodmFsICYgU0NPTV9SQU1DX0lOVEVSUlVQVCkgeworCQlwcl9lcnIoIlJBTUMgaW50ZXJydXB0IG9uIGluc3RydWN0aW9uIDB4JTA4eCwgdGhyZWFkICVkXG4iLAorCQkgICAgICAgaW5zbiwgdGhyZWFkKTsKKwkJcmV0dXJuIC1TQ09NX1JBTUNfSU5URVJSVVBUOworCX0KKworCWlmICh2YWwgJiBTQ09NX1JBTUNfRVJST1IpIHsKKwkJcHJfZXJyKCJSQU1DIGVycm9yIG9uIGluc3RydWN0aW9uIDB4JTA4eCwgdGhyZWFkICVkXG4iLAorCQkgICAgICAgaW5zbiwgdGhyZWFkKTsKKwkJcmV0dXJuIC1TQ09NX1JBTUNfRVJST1I7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYTJfc2NvbV9nZXRncHIoc2NvbV9tYXBfdCBzY29tLCBpbnQgdGhyZWFkLCBpbnQgZ3ByLCBpbnQgYWx0LAorCQkJICB1NjQgKm91dF9ncHIpCit7CisJaW50IHJjOworCisJLyogb3Igck4sIHJOLCByTiAqLworCXUzMiBpbnNuID0gMHg3YzAwMDM3OCB8IChncHIgPDwgMjEpIHwgKGdwciA8PCAxNikgfCAoZ3ByIDw8IDExKTsKKwlyYyA9IGEyX3Njb21fcmFtKHNjb20sIHRocmVhZCwgaW5zbiwgYWx0ID8gMHhmIDogMHgwKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCSpvdXRfZ3ByID0gc2NvbV9yZWFkKHNjb20sIFNDT01fUkFNRCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhMl9zY29tX2dldHNwcihzY29tX21hcF90IHNjb20sIGludCB0aHJlYWQsIGludCBzcHIsIHU2NCAqb3V0X3NwcikKK3sKKwlpbnQgcmMsIHNwcmhpLCBzcHJsbzsKKwl1MzIgaW5zbjsKKworCXNwcmhpID0gc3ByID4+IDU7CisJc3BybG8gPSBzcHIgJiAweDFmOworCWluc24gPSAweDdjMjAwMmE2IHwgKHNwcmxvIDw8IDE2KSB8IChzcHJoaSA8PCAxMSk7IC8qIG1mc3ByIHIxLHNwciAqLworCisJaWYgKHNwciA9PSAweDBmZjApCisJCWluc24gPSAweDdjMjAwMGE2OyAvKiBtZm1zciByMSAqLworCisJcmMgPSBhMl9zY29tX3JhbShzY29tLCB0aHJlYWQsIGluc24sIDB4Zik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJcmV0dXJuIGEyX3Njb21fZ2V0Z3ByKHNjb20sIHRocmVhZCwgMSwgMSwgb3V0X3Nwcik7Cit9CisKK3N0YXRpYyBpbnQgYTJfc2NvbV9zZXRncHIoc2NvbV9tYXBfdCBzY29tLCBpbnQgdGhyZWFkLCBpbnQgZ3ByLAorCQkJICBpbnQgYWx0LCB1NjQgdmFsKQoreworCXUzMiBsaXMgPSAweDNjMDAwMDAwIHwgKGdwciA8PCAyMSk7CisJdTMyIGxpID0gMHgzODAwMDAwMCB8IChncHIgPDwgMjEpOworCXUzMiBvcmlzID0gMHg2NDAwMDAwMCB8IChncHIgPDwgMjEpIHwgKGdwciA8PCAxNik7CisJdTMyIG9yaSA9IDB4NjAwMDAwMDAgfCAoZ3ByIDw8IDIxKSB8IChncHIgPDwgMTYpOworCXUzMiBybGRpY3IzMiA9IDB4NzgwMDA3YzYgfCAoZ3ByIDw8IDIxKSB8IChncHIgPDwgMTYpOworCXUzMiBoaWdoZXN0ID0gdmFsID4+IDQ4OworCXUzMiBoaWdoZXIgPSAodmFsID4+IDMyKSAmIDB4ZmZmZjsKKwl1MzIgaGlnaCA9ICh2YWwgPj4gMTYpICYgMHhmZmZmOworCXUzMiBsb3cgPSB2YWwgJiAweGZmZmY7CisJaW50IGxleHQgPSBhbHQgPyAweDggOiAweDA7CisJaW50IG9leHQgPSBhbHQgPyAweGYgOiAweDA7CisJaW50IHJjID0gMDsKKworCWlmIChoaWdoZXN0KQorCQlyYyB8PSBhMl9zY29tX3JhbShzY29tLCB0aHJlYWQsIGxpcyB8IGhpZ2hlc3QsIGxleHQpOworCisJaWYgKGhpZ2hlcikgeworCQlpZiAoaGlnaGVzdCkKKwkJCXJjIHw9IGEyX3Njb21fcmFtKHNjb20sIHRocmVhZCwgb3JpcyB8IGhpZ2hlciwgb2V4dCk7CisJCWVsc2UKKwkJCXJjIHw9IGEyX3Njb21fcmFtKHNjb20sIHRocmVhZCwgbGkgfCBoaWdoZXIsIGxleHQpOworCX0KKworCWlmIChoaWdoZXN0IHx8IGhpZ2hlcikKKwkJcmMgfD0gYTJfc2NvbV9yYW0oc2NvbSwgdGhyZWFkLCBybGRpY3IzMiwgb2V4dCk7CisKKwlpZiAoaGlnaCkgeworCQlpZiAoaGlnaGVzdCB8fCBoaWdoZXIpCisJCQlyYyB8PSBhMl9zY29tX3JhbShzY29tLCB0aHJlYWQsIG9yaXMgfCBoaWdoLCBvZXh0KTsKKwkJZWxzZQorCQkJcmMgfD0gYTJfc2NvbV9yYW0oc2NvbSwgdGhyZWFkLCBsaXMgfCBoaWdoLCBsZXh0KTsKKwl9CisKKwlpZiAoaGlnaGVzdCB8fCBoaWdoZXIgfHwgaGlnaCkKKwkJcmMgfD0gYTJfc2NvbV9yYW0oc2NvbSwgdGhyZWFkLCBvcmkgfCBsb3csIG9leHQpOworCWVsc2UKKwkJcmMgfD0gYTJfc2NvbV9yYW0oc2NvbSwgdGhyZWFkLCBsaSB8IGxvdywgbGV4dCk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgYTJfc2NvbV9zZXRzcHIoc2NvbV9tYXBfdCBzY29tLCBpbnQgdGhyZWFkLCBpbnQgc3ByLCB1NjQgdmFsKQoreworCWludCBzcHJoaSA9IHNwciA+PiA1OworCWludCBzcHJsbyA9IHNwciAmIDB4MWY7CisJLyogbXRzcHIgc3ByLCByMSAqLworCXUzMiBpbnNuID0gMHg3YzIwMDNhNiB8IChzcHJsbyA8PCAxNikgfCAoc3ByaGkgPDwgMTEpOworCisJaWYgKHNwciA9PSAweDBmZjApCisJCWluc24gPSAweDdjMjAwMTI0OyAvKiBtdG1zciByMSAqLworCisJaWYgKGEyX3Njb21fc2V0Z3ByKHNjb20sIHRocmVhZCwgMSwgMSwgdmFsKSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIGEyX3Njb21fcmFtKHNjb20sIHRocmVhZCwgaW5zbiwgMHhmKTsKK30KKworc3RhdGljIGludCBhMl9zY29tX2luaXRpYWxfdGxiKHNjb21fbWFwX3Qgc2NvbSwgaW50IHRocmVhZCkKK3sKKwlleHRlcm4gdTMyIGEyX3RsYmluaXRfY29kZV9zdGFydFtdLCBhMl90bGJpbml0X2NvZGVfZW5kW107CisJZXh0ZXJuIHUzMiBhMl90bGJpbml0X2FmdGVyX2lwcm90X2ZsdXNoW107CisJZXh0ZXJuIHUzMiBhMl90bGJpbml0X2FmdGVyX2xpbmVhcl9tYXBbXTsKKwl1MzIgYXNzb2MsIGVudHJpZXMsIGk7CisJdTY0IGVwbiwgdGxiY2ZnOworCXUzMiAqcDsKKwlpbnQgcmM7CisKKwkvKiBJbnZhbGlkYXRlIGFsbCBlbnRyaWVzIChpbmNsdWRpbmcgaXByb3QpICovCisKKwlyYyA9IGEyX3Njb21fZ2V0c3ByKHNjb20sIHRocmVhZCwgU1BSTl9UTEIwQ0ZHLCAmdGxiY2ZnKTsKKwlpZiAocmMpCisJCWdvdG8gc2NvbV9mYWlsOworCWVudHJpZXMgPSB0bGJjZmcgJiBUTEJuQ0ZHX05fRU5UUlk7CisJYXNzb2MgPSAodGxiY2ZnICYgVExCbkNGR19BU1NPQykgPj4gMjQ7CisJZXBuID0gMDsKKworCS8qIFNldCBNTVVDUjIgdG8gZW5hYmxlIDRLLCA2NEssIDFNLCAxNk0gYW5kIDFHIHBhZ2VzICovCisJYTJfc2NvbV9zZXRzcHIoc2NvbSwgdGhyZWFkLCBTUFJOX01NVUNSMiwgMHgwMDBhNzUzMSk7CisJLyogU2V0IE1NVUNSMyB0byB3cml0ZSBhbGwgdGhpZHMgYml0IHRvIHRoZSBUTEIgKi8KKwlhMl9zY29tX3NldHNwcihzY29tLCB0aHJlYWQsIFNQUk5fTU1VQ1IzLCAweDAwMDAwMDBmKTsKKworCS8qIFNldCBNQVMxIGZvciAxRyBwYWdlIHNpemUsIGFuZCBNQVMyIHRvIG91ciBpbml0aWFsIEVQTiAqLworCWEyX3Njb21fc2V0c3ByKHNjb20sIHRocmVhZCwgU1BSTl9NQVMxLCBNQVMxX1RTSVpFKEJPT0szRV9QQUdFU1pfMUdCKSk7CisJYTJfc2NvbV9zZXRzcHIoc2NvbSwgdGhyZWFkLCBTUFJOX01BUzIsIGVwbik7CisJZm9yIChpID0gMDsgaSA8IGVudHJpZXM7IGkrKykgeworCisJCWEyX3Njb21fc2V0c3ByKHNjb20sIHRocmVhZCwgU1BSTl9NQVMwLCBNQVMwX0VTRUwoaSAlIGFzc29jKSk7CisKKwkJLyogdGxid2UgKi8KKwkJcmMgPSBhMl9zY29tX3JhbShzY29tLCB0aHJlYWQsIDB4N2MwMDA3YTQsIDApOworCQlpZiAocmMpCisJCQlnb3RvIHNjb21fZmFpbDsKKworCQkvKiBOZXh0IGVudHJ5IGlzIG5ldyBhZGRyZXNzPyAqLworCQlpZigoaSArIDEpICUgYXNzb2MgPT0gMCkgeworCQkJZXBuICs9ICgxIDw8IDMwKTsKKwkJCWEyX3Njb21fc2V0c3ByKHNjb20sIHRocmVhZCwgU1BSTl9NQVMyLCBlcG4pOworCQl9CisJfQorCisJLyogU2V0dXAgYXJncyBmb3IgbGluZWFyIG1hcHBpbmcgKi8KKwlyYyA9IGEyX3Njb21fc2V0Z3ByKHNjb20sIHRocmVhZCwgMywgMCwgTUFTMF9UTEJTRUwoMCkpOworCWlmIChyYykKKwkJZ290byBzY29tX2ZhaWw7CisKKwkvKiBMaW5lYXIgbWFwcGluZyAqLworCWZvciAocCA9IGEyX3RsYmluaXRfY29kZV9zdGFydDsgcCA8IGEyX3RsYmluaXRfYWZ0ZXJfbGluZWFyX21hcDsgcCsrKSB7CisJCXJjID0gYTJfc2NvbV9yYW0oc2NvbSwgdGhyZWFkLCAqcCwgMCk7CisJCWlmIChyYykKKwkJCWdvdG8gc2NvbV9mYWlsOworCX0KKworCS8qCisJICogRm9yIHRoZSBib290IHRocmVhZCwgYmV0d2VlbiB0aGUgbGluZWFyIG1hcHBpbmcgYW5kIHRoZSBkZWJ1ZworCSAqIG1hcHBpbmdzIHRoZXJlIGlzIGEgbG9vcCB0byBmbHVzaCBpcHJvdCBtYXBwaW5ncy4gUmFtbWluZyBkb2Vzbid0IGRvCisJICogYnJhbmNoZXMsIGJ1dCB0aGUgc2Vjb25kYXJ5IHRocmVhZHMgZG9uJ3QgbmVlZCB0byBiZSBuZWFybHkgYXMgc21hcnQKKwkgKiAoaS5lLiB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGludmFsaWRhdGluZyB0aGUgbWFwcGluZyB3ZSdyZQorCSAqIHN0YW5kaW5nIG9uKS4KKwkgKi8KKworCS8qIERlYnVnIG1hcHBpbmdzLiBFeHBlY3RzIHIxMSA9IE1BUzAgZnJvbSBsaW5lYXIgbWFwIChzZXQgYWJvdmUpICovCisJZm9yIChwID0gYTJfdGxiaW5pdF9hZnRlcl9pcHJvdF9mbHVzaDsgcCA8IGEyX3RsYmluaXRfY29kZV9lbmQ7IHArKykgeworCQlyYyA9IGEyX3Njb21fcmFtKHNjb20sIHRocmVhZCwgKnAsIDApOworCQlpZiAocmMpCisJCQlnb3RvIHNjb21fZmFpbDsKKwl9CisKK3Njb21fZmFpbDoKKwlpZiAocmMpCisJCXByX2VycigiU2V0dGluZyB1cCBpbml0aWFsIFRMQiBmYWlsZWQsIGVyciAlZFxuIiwgcmMpOworCisJaWYgKHJjID09IC1TQ09NX1JBTUNfSU5URVJSVVBUKSB7CisJCS8qIEludGVycnVwdCwgZHVtcCBzb21lIHN0YXR1cyAqLworCQlpbnQgcmNbMTBdOworCQl1NjQgaWFyLCBzcnIwLCBzcnIxLCBlc3IsIG1hczAsIG1hczEsIG1hczIsIG1hczdfMywgbWFzOCwgY2NyMjsKKwkJcmNbMF0gPSBhMl9zY29tX2dldHNwcihzY29tLCB0aHJlYWQsIFNQUk5fSUFSLCAmaWFyKTsKKwkJcmNbMV0gPSBhMl9zY29tX2dldHNwcihzY29tLCB0aHJlYWQsIFNQUk5fU1JSMCwgJnNycjApOworCQlyY1syXSA9IGEyX3Njb21fZ2V0c3ByKHNjb20sIHRocmVhZCwgU1BSTl9TUlIxLCAmc3JyMSk7CisJCXJjWzNdID0gYTJfc2NvbV9nZXRzcHIoc2NvbSwgdGhyZWFkLCBTUFJOX0VTUiwgJmVzcik7CisJCXJjWzRdID0gYTJfc2NvbV9nZXRzcHIoc2NvbSwgdGhyZWFkLCBTUFJOX01BUzAsICZtYXMwKTsKKwkJcmNbNV0gPSBhMl9zY29tX2dldHNwcihzY29tLCB0aHJlYWQsIFNQUk5fTUFTMSwgJm1hczEpOworCQlyY1s2XSA9IGEyX3Njb21fZ2V0c3ByKHNjb20sIHRocmVhZCwgU1BSTl9NQVMyLCAmbWFzMik7CisJCXJjWzddID0gYTJfc2NvbV9nZXRzcHIoc2NvbSwgdGhyZWFkLCBTUFJOX01BUzdfTUFTMywgJm1hczdfMyk7CisJCXJjWzhdID0gYTJfc2NvbV9nZXRzcHIoc2NvbSwgdGhyZWFkLCBTUFJOX01BUzgsICZtYXM4KTsKKwkJcmNbOV0gPSBhMl9zY29tX2dldHNwcihzY29tLCB0aHJlYWQsIFNQUk5fQTJfQ0NSMiwgJmNjcjIpOworCQlwcl9lcnIoIiAtPiByZXRyZWl2ZWQgSUFSID0weCVsbHggKGVyciAlZClcbiIsIGlhciwgcmNbMF0pOworCQlwcl9lcnIoIiAgICByZXRyZWl2ZWQgU1JSMD0weCVsbHggKGVyciAlZClcbiIsIHNycjAsIHJjWzFdKTsKKwkJcHJfZXJyKCIgICAgcmV0cmVpdmVkIFNSUjE9MHglbGx4IChlcnIgJWQpXG4iLCBzcnIxLCByY1syXSk7CisJCXByX2VycigiICAgIHJldHJlaXZlZCBFU1IgPTB4JWxseCAoZXJyICVkKVxuIiwgZXNyLCByY1szXSk7CisJCXByX2VycigiICAgIHJldHJlaXZlZCBNQVMwPTB4JWxseCAoZXJyICVkKVxuIiwgbWFzMCwgcmNbNF0pOworCQlwcl9lcnIoIiAgICByZXRyZWl2ZWQgTUFTMT0weCVsbHggKGVyciAlZClcbiIsIG1hczEsIHJjWzVdKTsKKwkJcHJfZXJyKCIgICAgcmV0cmVpdmVkIE1BUzI9MHglbGx4IChlcnIgJWQpXG4iLCBtYXMyLCByY1s2XSk7CisJCXByX2VycigiICAgIHJldHJlaXZlZCBNUzczPTB4JWxseCAoZXJyICVkKVxuIiwgbWFzN18zLCByY1s3XSk7CisJCXByX2VycigiICAgIHJldHJlaXZlZCBNQVM4PTB4JWxseCAoZXJyICVkKVxuIiwgbWFzOCwgcmNbOF0pOworCQlwcl9lcnIoIiAgICByZXRyZWl2ZWQgQ0NSMj0weCVsbHggKGVyciAlZClcbiIsIGNjcjIsIHJjWzldKTsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK2ludCBfX2RldmluaXQgYTJfc2NvbV9zdGFydHVwX2NwdSh1bnNpZ25lZCBpbnQgbGNwdSwgaW50IHRocl9pZHgsCisJCQkJICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXU2NCBpbml0X2lhciwgaW5pdF9tc3IsIGluaXRfY2NyMjsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X2hlcmU7CisJaW50IHJjLCBjb3JlX3NldHVwOworCXNjb21fbWFwX3Qgc2NvbTsKKwl1NjQgcGNjcjA7CisKKwlzY29tID0gZ2V0X3Njb20obGNwdSwgbnAsICZjb3JlX3NldHVwKTsKKwlpZiAoIXNjb20pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZG4ndCBtYXAgU0NPTSBmb3IgQ1BVJWRcbiIsIGxjcHUpOworCQlyZXR1cm4gLTE7CisJfQorCisJcHJfZGV2ZWwoIkJyaW5naW5nIHVwIENQVSVkIHVzaW5nIFNDT00uLi5cbiIsIGxjcHUpOworCisJcGNjcjAgPSBzY29tX3JlYWQoc2NvbSwgU0NPTV9QQ0NSMCk7CisJc2NvbV93cml0ZShzY29tLCBTQ09NX1BDQ1IwLCBwY2NyMCB8IFNDT01fUENDUjBfRU5BQkxFX0RFQlVHIHwKKwkJCQkgICAgIFNDT01fUENDUjBfRU5BQkxFX1JBTSk7CisKKwkvKiBTdG9wIHRoZSB0aGVhZCB3aXRoIFRIUkNUTC4gSWYgd2UgYXJlIHNldHRpbmcgdXAgdGhlIFRMQiB3ZSBzdG9wIGFsbAorCSAqIHRocmVhZHMuIFdlIGFsc28gZGlzYWJsZSBhc3luY2hyb25vdXMgaW50ZXJydXB0cyB3aGlsZSBSQU1pbmcuCisJICovCisJaWYgKGNvcmVfc2V0dXApCisJCXNjb21fd3JpdGUoc2NvbSwgU0NPTV9USFJDVExfT1IsCisJCQkgICAgICBTQ09NX1RIUkNUTF9UMF9TVE9QIHwKKwkJCSAgICAgIFNDT01fVEhSQ1RMX1QxX1NUT1AgfAorCQkJICAgICAgU0NPTV9USFJDVExfVDJfU1RPUCB8CisJCQkgICAgICBTQ09NX1RIUkNUTF9UM19TVE9QIHwKKwkJCSAgICAgIFNDT01fVEhSQ1RMX0FTWU5DX0RJUyk7CisJZWxzZQorCQlzY29tX3dyaXRlKHNjb20sIFNDT01fVEhSQ1RMX09SLCBTQ09NX1RIUkNUTF9UMF9TVE9QID4+IHRocl9pZHgpOworCisJLyogRmx1c2ggaXRzIHBpcGVsaW5lIGp1c3QgaW4gY2FzZSAqLworCXNjb21fd3JpdGUoc2NvbSwgU0NPTV9SQU1DLCAoKHU2NCl0aHJfaWR4IDw8IDE3KSB8CisJCSAgICAgIFNDT01fUkFNQ19GTFVTSCB8IFNDT01fUkFNQ19FTkFCTEUpOworCisJYTJfc2NvbV9nZXRzcHIoc2NvbSwgdGhyX2lkeCwgU1BSTl9JQVIsICZpbml0X2lhcik7CisJYTJfc2NvbV9nZXRzcHIoc2NvbSwgdGhyX2lkeCwgMHgwZmYwLCAmaW5pdF9tc3IpOworCWEyX3Njb21fZ2V0c3ByKHNjb20sIHRocl9pZHgsIFNQUk5fQTJfQ0NSMiwgJmluaXRfY2NyMik7CisKKwkvKiBTZXQgTVNSIHRvIE1TUl9DTSAoMHgwZmYwIGlzIG1hZ2ljIHZhbHVlIGZvciBNU1JfQ00pICovCisJcmMgPSBhMl9zY29tX3NldHNwcihzY29tLCB0aHJfaWR4LCAweDBmZjAsIE1TUl9DTSk7CisJaWYgKHJjKSB7CisJCXByX2VycigiRmFpbGVkIHRvIHNldCBNU1IgISBlcnIgJWRcbiIsIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKworCS8qIFJBTSBpbiBhbiBzeW5jL2lzeW5jIGZvciB0aGUgc2FrZSBvZiBpdCAqLworCWEyX3Njb21fcmFtKHNjb20sIHRocl9pZHgsIDB4N2MwMDA0YWMsIDApOworCWEyX3Njb21fcmFtKHNjb20sIHRocl9pZHgsIDB4NGMwMDAxMmMsIDApOworCisJaWYgKGNvcmVfc2V0dXApIHsKKwkJcHJfZGV2ZWwoIkNQVSVkIGlzIGZpcnN0IHRocmVhZCBpbiBjb3JlLCBpbml0aWFsaXppbmcgVExCLi4uXG4iLAorCQkJIGxjcHUpOworCQlyYyA9IGEyX3Njb21faW5pdGlhbF90bGIoc2NvbSwgdGhyX2lkeCk7CisJCWlmIChyYykKKwkJCWdvdG8gZmFpbDsKKwl9CisKKwlzdGFydF9oZXJlID0gKih1bnNpZ25lZCBsb25nICopKGNvcmVfc2V0dXAgPyBnZW5lcmljX3NlY29uZGFyeV9zbXBfaW5pdAorCQkJCQk6IGdlbmVyaWNfc2Vjb25kYXJ5X3RocmVhZF9pbml0KTsKKwlwcl9kZXZlbCgiQ1BVJWQgZW50cnkgcG9pbnQgYXQgMHglbHguLi5cbiIsIGxjcHUsIHN0YXJ0X2hlcmUpOworCisJcmMgfD0gYTJfc2NvbV9zZXRzcHIoc2NvbSwgdGhyX2lkeCwgU1BSTl9JQVIsIHN0YXJ0X2hlcmUpOworCXJjIHw9IGEyX3Njb21fc2V0Z3ByKHNjb20sIHRocl9pZHgsIDMsIDAsCisJCQkgICAgIGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQobGNwdSkpOworCS8qCisJICogVGVsbCBib29rM2Vfc2Vjb25kYXJ5X2NvcmVfaW5pdCBub3QgdG8gc2V0IHVwIHRoZSBUTEIsIHdlJ3ZlCisJICogYWxyZWFkeSBkb25lIHRoYXQuCisJICovCisJcmMgfD0gYTJfc2NvbV9zZXRncHIoc2NvbSwgdGhyX2lkeCwgNCwgMCwgMSk7CisKKwlyYyB8PSBhMl9zY29tX3NldHNwcihzY29tLCB0aHJfaWR4LCBTUFJOX1RFTlMsIDB4MSA8PCB0aHJfaWR4KTsKKworCXNjb21fd3JpdGUoc2NvbSwgU0NPTV9SQU1DLCAwKTsKKwlzY29tX3dyaXRlKHNjb20sIFNDT01fVEhSQ1RMX0FORCwgfihTQ09NX1RIUkNUTF9UMF9TVE9QID4+IHRocl9pZHgpKTsKKwlzY29tX3dyaXRlKHNjb20sIFNDT01fUENDUjAsIHBjY3IwKTsKK2ZhaWw6CisJcHJfZGV2ZWwoIiAgU0NPTSBpbml0aWFsaXphdGlvbiAlc1xuIiwgcmMgPyAiZmFpbGVkIiA6ICJzdWNjZWVkZWQiKTsKKwlpZiAocmMpIHsKKwkJcHJfZXJyKCJPbGQgSUFSPTB4JTA4bGx4IE1TUj0weCUwOGxseCBDQ1IyPTB4JTA4bGx4XG4iLAorCQkgICAgICAgaW5pdF9pYXIsIGluaXRfbXNyLCBpbml0X2NjcjIpOworCX0KKworCXJldHVybiByYzsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvd3NwL3Njb21fd3NwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3dzcC9zY29tX3dzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNTJlMjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3dzcC9zY29tX3dzcC5jCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiAgU0NPTSBiYWNrZW5kIGZvciBXU1AKKyAqCisgKiAgQ29weXJpZ2h0IDIwMTAgQmVuamFtaW4gSGVycmVuc2NobWlkdCwgSUJNIENvcnAuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL2NwdXRocmVhZHMuaD4KKyNpbmNsdWRlIDxhc20vcmVnX2EyLmg+CisjaW5jbHVkZSA8YXNtL3Njb20uaD4KKyNpbmNsdWRlIDxhc20vdWRiZy5oPgorCisjaW5jbHVkZSAid3NwLmgiCisKKworc3RhdGljIHNjb21fbWFwX3Qgd3NwX3Njb21fbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LCB1NjQgcmVnLCB1NjQgY291bnQpCit7CisJc3RydWN0IHJlc291cmNlIHI7CisJdTY0IHhzY29tX2FkZHI7CisKKwlpZiAoIW9mX2dldF9wcm9wZXJ0eShkZXYsICJzY29tLWNvbnRyb2xsZXIiLCBOVUxMKSkgeworCQlwcl9lcnIoIiVzOiBkZXZpY2UgJXMgaXMgbm90IGEgU0NPTSBjb250cm9sbGVyXG4iLAorCQkJX19mdW5jX18sIGRldi0+ZnVsbF9uYW1lKTsKKwkJcmV0dXJuIFNDT01fTUFQX0lOVkFMSUQ7CisJfQorCisJaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoZGV2LCAwLCAmcikpIHsKKwkJcHJfZGVidWcoIkZhaWxlZCB0byBmaW5kIFNDT00gY29udHJvbGxlciBhZGRyZXNzXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogVHJhbnNmb3JtIHRoZSBTQ09NIGFkZHJlc3MgaW50byBhbiBYU0NPTSBvZmZzZXQgKi8KKwl4c2NvbV9hZGRyID0gKChyZWcgJiAweDdmMDAwMDAwKSA+PiAxKSB8ICgocmVnICYgMHhmZmZmZikgPDwgMyk7CisKKwlyZXR1cm4gKHNjb21fbWFwX3QpaW9yZW1hcChyLnN0YXJ0ICsgeHNjb21fYWRkciwgY291bnQgPDwgMyk7Cit9CisKK3N0YXRpYyB2b2lkIHdzcF9zY29tX3VubWFwKHNjb21fbWFwX3QgbWFwKQoreworCWlvdW5tYXAoKHZvaWQgKiltYXApOworfQorCitzdGF0aWMgdTY0IHdzcF9zY29tX3JlYWQoc2NvbV9tYXBfdCBtYXAsIHUzMiByZWcpCit7CisJdTY0IF9faW9tZW0gKmFkZHIgPSAodTY0IF9faW9tZW0gKiltYXA7CisKKwlyZXR1cm4gaW5fYmU2NChhZGRyICsgcmVnKTsKK30KKworc3RhdGljIHZvaWQgd3NwX3Njb21fd3JpdGUoc2NvbV9tYXBfdCBtYXAsIHUzMiByZWcsIHU2NCB2YWx1ZSkKK3sKKwl1NjQgX19pb21lbSAqYWRkciA9ICh1NjQgX19pb21lbSAqKW1hcDsKKworCXJldHVybiBvdXRfYmU2NChhZGRyICsgcmVnLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2NvbV9jb250cm9sbGVyIHdzcF9zY29tX2NvbnRyb2xsZXIgPSB7CisJLm1hcAk9IHdzcF9zY29tX21hcCwKKwkudW5tYXAJPSB3c3Bfc2NvbV91bm1hcCwKKwkucmVhZAk9IHdzcF9zY29tX3JlYWQsCisJLndyaXRlCT0gd3NwX3Njb21fd3JpdGUKK307CisKK3ZvaWQgc2NvbV9pbml0X3dzcCh2b2lkKQoreworCXNjb21faW5pdCgmd3NwX3Njb21fY29udHJvbGxlcik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3dzcC9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy93c3Avc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWFjMmYwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy93c3Avc2V0dXAuYwpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgTWljaGFlbCBFbGxlcm1hbiwgSUJNIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKworI2luY2x1ZGUgIndzcC5oIgorCisvKgorICogRmluZCBjaGlwLWlkIGJ5IHdhbGtpbmcgdXAgZGV2aWNlIHRyZWUgbG9va2luZyBmb3IgaWJtLHdzcC1jaGlwLWlkIHByb3BlcnR5LgorICogV29uJ3Qgd29yayBmb3Igbm9kZXMgdGhhdCBhcmUgbm90IGEgZGVzY2VuZGFudCBvZiBhIHdzcCBub2RlLgorICovCitpbnQgd3NwX2dldF9jaGlwX2lkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pCit7CisJY29uc3QgdTMyICpwOworCWludCByYzsKKworCS8qIFN0YXJ0IGxvb2tpbmcgYXQgdGhlIHNwZWNpZmllZCBub2RlLCBub3QgaXRzIHBhcmVudCAqLworCWRuID0gb2Zfbm9kZV9nZXQoZG4pOworCXdoaWxlIChkbiAmJiAhKHAgPSBvZl9nZXRfcHJvcGVydHkoZG4sICJpYm0sd3NwLWNoaXAtaWQiLCBOVUxMKSkpCisJCWRuID0gb2ZfZ2V0X25leHRfcGFyZW50KGRuKTsKKworCWlmICghZG4pCisJCXJldHVybiAtMTsKKworCXJjID0gKnA7CisJb2Zfbm9kZV9wdXQoZG4pOworCisJcmV0dXJuIHJjOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy93c3Avc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3dzcC9zbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDIwZmE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy93c3Avc21wLmMKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqICBTTVAgU3VwcG9ydCBmb3IgQTIgcGxhdGZvcm1zCisgKgorICogIENvcHlyaWdodCAyMDA3IEJlbmphbWluIEhlcnJlbnNjaG1pZHQsIElCTSBDb3JwLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorCisjaW5jbHVkZSA8YXNtL2RiZWxsLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20veGljcy5oPgorCisjaW5jbHVkZSAiaWNzLmgiCisjaW5jbHVkZSAid3NwLmgiCisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbXBfYTJfc2V0dXBfY3B1KGludCBjcHUpCit7CisJZG9vcmJlbGxfc2V0dXBfdGhpc19jcHUoKTsKKworCWlmIChjcHUgIT0gYm9vdF9jcHVpZCkKKwkJeGljc19zZXR1cF9jcHUoKTsKK30KKworaW50IF9fZGV2aW5pdCBzbXBfYTJfa2lja19jcHUoaW50IG5yKQoreworCWNvbnN0IGNoYXIgKmVuYWJsZV9tZXRob2Q7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwlpbnQgdGhyX2lkeDsKKworCWlmIChuciA8IDAgfHwgbnIgPj0gTlJfQ1BVUykKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlucCA9IG9mX2dldF9jcHVfbm9kZShuciwgJnRocl9pZHgpOworCWlmICghbnApCisJCXJldHVybiAtRU5PREVWOworCisJZW5hYmxlX21ldGhvZCA9IG9mX2dldF9wcm9wZXJ0eShucCwgImVuYWJsZS1tZXRob2QiLCBOVUxMKTsKKwlwcl9kZXZlbCgiQ1BVJWQgaGFzIGVuYWJsZS1tZXRob2Q6IFwiJXNcIlxuIiwgbnIsIGVuYWJsZV9tZXRob2QpOworCisJaWYgKCFlbmFibGVfbWV0aG9kKSB7CisgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJDUFUlZCBoYXMgbm8gZW5hYmxlLW1ldGhvZFxuIiwgbnIpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9IGVsc2UgaWYgKHN0cmNtcChlbmFibGVfbWV0aG9kLCAiaWJtLGEyLXNjb20iKSA9PSAwKSB7CisJCWlmIChhMl9zY29tX3N0YXJ0dXBfY3B1KG5yLCB0aHJfaWR4LCBucCkpCisJCQlyZXR1cm4gLTE7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDUFUlZDogRG9uJ3QgdW5kZXJzdGFuZCBlbmFibGUtbWV0aG9kIFwiJXNcIlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgbnIsIGVuYWJsZV9tZXRob2QpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIFRoZSBwcm9jZXNzb3IgaXMgY3VycmVudGx5IHNwaW5uaW5nLCB3YWl0aW5nIGZvciB0aGUKKwkgKiBjcHVfc3RhcnQgZmllbGQgdG8gYmVjb21lIG5vbi16ZXJvIEFmdGVyIHdlIHNldCBjcHVfc3RhcnQsCisJICogdGhlIHByb2Nlc3NvciB3aWxsIGNvbnRpbnVlIG9uIHRvIHNlY29uZGFyeV9zdGFydAorCSAqLworCXBhY2FbbnJdLmNwdV9zdGFydCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgc21wX2EyX3Byb2JlKHZvaWQpCit7CisJcmV0dXJuIGNwdXNfd2VpZ2h0KGNwdV9wb3NzaWJsZV9tYXApOworfQorCitzdGF0aWMgc3RydWN0IHNtcF9vcHNfdCBhMl9zbXBfb3BzID0geworCS5tZXNzYWdlX3Bhc3MJPSBzbXBfbXV4ZWRfaXBpX21lc3NhZ2VfcGFzcywKKwkuY2F1c2VfaXBpCT0gZG9vcmJlbGxfY2F1c2VfaXBpLAorCS5wcm9iZQkJPSBzbXBfYTJfcHJvYmUsCisJLmtpY2tfY3B1CT0gc21wX2EyX2tpY2tfY3B1LAorCS5zZXR1cF9jcHUJPSBzbXBfYTJfc2V0dXBfY3B1LAorfTsKKwordm9pZCBfX2luaXQgYTJfc2V0dXBfc21wKHZvaWQpCit7CisJc21wX29wcyA9ICZhMl9zbXBfb3BzOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy93c3Avd3NwLmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3dzcC93c3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzNlMDg3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy93c3Avd3NwLmgKQEAgLTAsMCArMSwxNyBAQAorI2lmbmRlZiBfX1dTUF9ICisjZGVmaW5lIF9fV1NQX0gKKworI2luY2x1ZGUgPGFzbS93c3AuaD4KKworZXh0ZXJuIHZvaWQgd3NwX3NldHVwX3BjaSh2b2lkKTsKK2V4dGVybiB2b2lkIHNjb21faW5pdF93c3Aodm9pZCk7CisKK2V4dGVybiB2b2lkIGEyX3NldHVwX3NtcCh2b2lkKTsKK2V4dGVybiBpbnQgYTJfc2NvbV9zdGFydHVwX2NwdSh1bnNpZ25lZCBpbnQgbGNwdSwgaW50IHRocl9pZHgsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpucCk7CitpbnQgc21wX2EyX2NwdV9ib290YWJsZSh1bnNpZ25lZCBpbnQgbnIpOworaW50IF9fZGV2aW5pdCBzbXBfYTJfa2lja19jcHUoaW50IG5yKTsKKwordm9pZCBvcGJfcGljX2luaXQodm9pZCk7CisKKyNlbmRpZiAvKiAgX19XU1BfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9LY29uZmlnCmluZGV4IDM5NjU4MjguLmQ3NzVmZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L0tjb25maWcKQEAgLTEyLDMgKzEyLDEzIEBACiAJZGVwZW5kcyBvbiBQQ0lfTVNJCiAJZGVmYXVsdCB5IGlmIE1QSUMKIAlkZWZhdWx0IHkgaWYgRlNMX1BDSQorCitzb3VyY2UgImFyY2gvcG93ZXJwYy9zeXNkZXYveGljcy9LY29uZmlnIgorCitjb25maWcgUFBDX1NDT00KKwlib29sCisKK2NvbmZpZyBTQ09NX0RFQlVHRlMKKwlib29sICJFeHBvc2UgU0NPTSBjb250cm9sbGVycyB2aWEgZGVidWdmcyIKKwlkZXBlbmRzIG9uIFBQQ19TQ09NCisJZGVmYXVsdCBuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9NYWtlZmlsZQppbmRleCAxZTBjOTMzLi42MDc2ZTAwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvTWFrZWZpbGUKQEAgLTU3LDMgKzU3LDkgQEAKIGlmZXEgKCQoQ09ORklHX1NVU1BFTkQpLHkpCiBvYmotJChDT05GSUdfNnh4KQkJKz0gNnh4LXN1c3BlbmQubwogZW5kaWYKKworb2JqLSQoQ09ORklHX1BQQ19TQ09NKQkJKz0gc2NvbS5vCisKK3N1YmRpci1jY2ZsYWdzLSQoQ09ORklHX1BQQ19XRVJST1IpIDo9IC1XZXJyb3IKKworb2JqLSQoQ09ORklHX1BQQ19YSUNTKQkJKz0geGljcy8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvYXhvbnJhbS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9heG9ucmFtLmMKaW5kZXggMTYzNmRkOC4uYmQwZDU0MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9heG9ucmFtLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9heG9ucmFtLmMKQEAgLTIxNiw3ICsyMTYsNyBAQAogCQkJQVhPTl9SQU1fREVWSUNFX05BTUUsIGF4b25fcmFtX2JhbmtfaWQsIGJhbmstPnNpemUgPj4gMjApOwogCiAJYmFuay0+cGhfYWRkciA9IHJlc291cmNlLnN0YXJ0OwotCWJhbmstPmlvX2FkZHIgPSAodW5zaWduZWQgbG9uZykgaW9yZW1hcF9mbGFncygKKwliYW5rLT5pb19hZGRyID0gKHVuc2lnbmVkIGxvbmcpIGlvcmVtYXBfcHJvdCgKIAkJCWJhbmstPnBoX2FkZHIsIGJhbmstPnNpemUsIF9QQUdFX05PX0NBQ0hFKTsKIAlpZiAoYmFuay0+aW9fYWRkciA9PSAwKSB7CiAJCWRldl9lcnIoJmRldmljZS0+ZGV2LCAiaW9yZW1hcCgpIGZhaWxlZFxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTEuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jCmluZGV4IGUwYmM5NDQuLjM1MDc4N2MgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jCkBAIC01OCwyMSArNTgsMjEgQEAKIAogc3RhdGljIHZvaWQgY3BtX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQl1bnNpZ25lZCBpbnQgY3BtX3ZlYyA9ICh1bnNpZ25lZCBpbnQpaXJxX21hcFtkLT5pcnFdLmh3aXJxOworCXVuc2lnbmVkIGludCBjcG1fdmVjID0gKHVuc2lnbmVkIGludClpcnFkX3RvX2h3aXJxKGQpOwogCiAJY2xyYml0czMyKCZjcGljX3JlZy0+Y3BpY19jaW1yLCAoMSA8PCBjcG1fdmVjKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNwbV91bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQl1bnNpZ25lZCBpbnQgY3BtX3ZlYyA9ICh1bnNpZ25lZCBpbnQpaXJxX21hcFtkLT5pcnFdLmh3aXJxOworCXVuc2lnbmVkIGludCBjcG1fdmVjID0gKHVuc2lnbmVkIGludClpcnFkX3RvX2h3aXJxKGQpOwogCiAJc2V0Yml0czMyKCZjcGljX3JlZy0+Y3BpY19jaW1yLCAoMSA8PCBjcG1fdmVjKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNwbV9lbmRfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQl1bnNpZ25lZCBpbnQgY3BtX3ZlYyA9ICh1bnNpZ25lZCBpbnQpaXJxX21hcFtkLT5pcnFdLmh3aXJxOworCXVuc2lnbmVkIGludCBjcG1fdmVjID0gKHVuc2lnbmVkIGludClpcnFkX3RvX2h3aXJxKGQpOwogCiAJb3V0X2JlMzIoJmNwaWNfcmVnLT5jcGljX2Npc3IsICgxIDw8IGNwbV92ZWMpKTsKIH0KQEAgLTE1Nyw3ICsxNTcsNyBAQAogCQlnb3RvIGVuZDsKIAogCS8qIEluaXRpYWxpemUgdGhlIENQTSBpbnRlcnJ1cHQgY29udHJvbGxlci4gKi8KLQlod2lycSA9ICh1bnNpZ25lZCBpbnQpaXJxX21hcFtzaXJxXS5od2lycTsKKwlod2lycSA9ICh1bnNpZ25lZCBpbnQpdmlycV90b19odyhzaXJxKTsKIAlvdXRfYmUzMigmY3BpY19yZWctPmNwaWNfY2ljciwKIAkgICAgKENJQ1JfU0NEX1NDQzQgfCBDSUNSX1NDQ19TQ0MzIHwgQ0lDUl9TQ0JfU0NDMiB8IENJQ1JfU0NBX1NDQzEpIHwKIAkJKChod2lycS8yKSA8PCAxMykgfCBDSUNSX0hQX01BU0spOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yX3BpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yX3BpYy5jCmluZGV4IDU0OTVjMWIuLmJjYWI1MGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMl9waWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTJfcGljLmMKQEAgLTgxLDcgKzgxLDcgQEAKIHN0YXRpYyB2b2lkIGNwbTJfbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCWludAliaXQsIHdvcmQ7Ci0JdW5zaWduZWQgaW50IGlycV9uciA9IHZpcnFfdG9faHcoZC0+aXJxKTsKKwl1bnNpZ25lZCBpbnQgaXJxX25yID0gaXJxZF90b19od2lycShkKTsKIAogCWJpdCA9IGlycV90b19zaXViaXRbaXJxX25yXTsKIAl3b3JkID0gaXJxX3RvX3NpdXJlZ1tpcnFfbnJdOwpAQCAtOTMsNyArOTMsNyBAQAogc3RhdGljIHZvaWQgY3BtMl91bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlpbnQJYml0LCB3b3JkOwotCXVuc2lnbmVkIGludCBpcnFfbnIgPSB2aXJxX3RvX2h3KGQtPmlycSk7CisJdW5zaWduZWQgaW50IGlycV9uciA9IGlycWRfdG9faHdpcnEoZCk7CiAKIAliaXQgPSBpcnFfdG9fc2l1Yml0W2lycV9ucl07CiAJd29yZCA9IGlycV90b19zaXVyZWdbaXJxX25yXTsKQEAgLTEwNSw3ICsxMDUsNyBAQAogc3RhdGljIHZvaWQgY3BtMl9hY2soc3RydWN0IGlycV9kYXRhICpkKQogewogCWludAliaXQsIHdvcmQ7Ci0JdW5zaWduZWQgaW50IGlycV9uciA9IHZpcnFfdG9faHcoZC0+aXJxKTsKKwl1bnNpZ25lZCBpbnQgaXJxX25yID0gaXJxZF90b19od2lycShkKTsKIAogCWJpdCA9IGlycV90b19zaXViaXRbaXJxX25yXTsKIAl3b3JkID0gaXJxX3RvX3NpdXJlZ1tpcnFfbnJdOwpAQCAtMTE2LDcgKzExNiw3IEBACiBzdGF0aWMgdm9pZCBjcG0yX2VuZF9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCWludAliaXQsIHdvcmQ7Ci0JdW5zaWduZWQgaW50IGlycV9uciA9IHZpcnFfdG9faHcoZC0+aXJxKTsKKwl1bnNpZ25lZCBpbnQgaXJxX25yID0gaXJxZF90b19od2lycShkKTsKIAogCWJpdCA9IGlycV90b19zaXViaXRbaXJxX25yXTsKIAl3b3JkID0gaXJxX3RvX3NpdXJlZ1tpcnFfbnJdOwpAQCAtMTMzLDcgKzEzMyw3IEBACiAKIHN0YXRpYyBpbnQgY3BtMl9zZXRfaXJxX3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQogewotCXVuc2lnbmVkIGludCBzcmMgPSB2aXJxX3RvX2h3KGQtPmlycSk7CisJdW5zaWduZWQgaW50IHNyYyA9IGlycWRfdG9faHdpcnEoZCk7CiAJdW5zaWduZWQgaW50IHZvbGQsIHZuZXcsIGVkaWJpdDsKIAogCS8qIFBvcnQgQyBpbnRlcnJ1cHRzIGFyZSBlaXRoZXIgSVJRX1RZUEVfRURHRV9GQUxMSU5HIG9yCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF84NXh4X2NhY2hlX3NyYW0uYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsXzg1eHhfY2FjaGVfc3JhbS5jCmluZGV4IDU0ZmIxOTIuLjExNjQxNTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsXzg1eHhfY2FjaGVfc3JhbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsXzg1eHhfY2FjaGVfc3JhbS5jCkBAIC0xMDYsMTAgKzEwNiwxMCBAQAogCQlnb3RvIG91dF9mcmVlOwogCX0KIAotCWNhY2hlX3NyYW0tPmJhc2VfdmlydCA9IGlvcmVtYXBfZmxhZ3MoY2FjaGVfc3JhbS0+YmFzZV9waHlzLAorCWNhY2hlX3NyYW0tPmJhc2VfdmlydCA9IGlvcmVtYXBfcHJvdChjYWNoZV9zcmFtLT5iYXNlX3BoeXMsCiAJCQkJY2FjaGVfc3JhbS0+c2l6ZSwgX1BBR0VfQ09IRVJFTlQgfCBQQUdFX0tFUk5FTCk7CiAJaWYgKCFjYWNoZV9zcmFtLT5iYXNlX3ZpcnQpIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsICIlczogaW9yZW1hcF9mbGFncyBmYWlsZWRcbiIsCisJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGlvcmVtYXBfcHJvdCBmYWlsZWRcbiIsCiAJCQkJZGV2LT5kZXYub2Zfbm9kZS0+ZnVsbF9uYW1lKTsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXRfcmVsZWFzZTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbXNpLmMKaW5kZXggZDU2NzlkYy4uOTJlNzgzMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbXNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbXNpLmMKQEAgLTExMCw3ICsxMTAsNyBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZwZGV2LT5tc2lfbGlzdCwgbGlzdCkgewogCQlpZiAoZW50cnktPmlycSA9PSBOT19JUlEpCiAJCQljb250aW51ZTsKLQkJbXNpX2RhdGEgPSBpcnFfZ2V0X2hhbmRsZXJfZGF0YShlbnRyeS0+aXJxKTsKKwkJbXNpX2RhdGEgPSBpcnFfZ2V0X2NoaXBfZGF0YShlbnRyeS0+aXJxKTsKIAkJaXJxX3NldF9tc2lfZGVzYyhlbnRyeS0+aXJxLCBOVUxMKTsKIAkJbXNpX2JpdG1hcF9mcmVlX2h3aXJxcygmbXNpX2RhdGEtPmJpdG1hcCwKIAkJCQkgICAgICAgdmlycV90b19odyhlbnRyeS0+aXJxKSwgMSk7CkBAIC0xNjgsNyArMTY4LDcgQEAKIAkJCXJjID0gLUVOT1NQQzsKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJCX0KLQkJaXJxX3NldF9oYW5kbGVyX2RhdGEodmlycSwgbXNpX2RhdGEpOworCQkvKiBjaGlwX2RhdGEgaXMgbXNpX2RhdGEgdmlhIGhvc3QtPmhvc3RkYXRhIGluIGhvc3QtPm1hcCgpICovCiAJCWlycV9zZXRfbXNpX2Rlc2ModmlycSwgZW50cnkpOwogCiAJCWZzbF9jb21wb3NlX21zaV9tc2cocGRldiwgaHdpcnEsICZtc2csIG1zaV9kYXRhKTsKQEAgLTE5Myw3ICsxOTMsNyBAQAogCXUzMiBoYXZlX3NoaWZ0ID0gMDsKIAlzdHJ1Y3QgZnNsX21zaV9jYXNjYWRlX2RhdGEgKmNhc2NhZGVfZGF0YTsKIAotCWNhc2NhZGVfZGF0YSA9IChzdHJ1Y3QgZnNsX21zaV9jYXNjYWRlX2RhdGEgKilpcnFfZ2V0X2hhbmRsZXJfZGF0YShpcnEpOworCWNhc2NhZGVfZGF0YSA9IGlycV9nZXRfaGFuZGxlcl9kYXRhKGlycSk7CiAJbXNpX2RhdGEgPSBjYXNjYWRlX2RhdGEtPm1zaV9kYXRhOwogCiAJcmF3X3NwaW5fbG9jaygmZGVzYy0+bG9jayk7CkBAIC0yNTMsNyArMjUzLDcgQEAKIAogc3RhdGljIGludCBmc2xfb2ZfbXNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldikKIHsKLQlzdHJ1Y3QgZnNsX21zaSAqbXNpID0gb2ZkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBmc2xfbXNpICptc2kgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShvZmRldik7CiAJaW50IHZpcnEsIGk7CiAJc3RydWN0IGZzbF9tc2lfY2FzY2FkZV9kYXRhICpjYXNjYWRlX2RhdGE7CiAKQEAgLTMwNCw4ICszMDQsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZnNsX29mX21zaV9pZHNbXTsKIHN0YXRpYyBpbnQgX19kZXZpbml0IGZzbF9vZl9tc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogeworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCXN0cnVjdCBmc2xfbXNpICptc2k7CiAJc3RydWN0IHJlc291cmNlIHJlczsKIAlpbnQgZXJyLCBpLCBqLCBpcnFfaW5kZXgsIGNvdW50OwpAQCAtMzE2LDkgKzMxOCwxMCBAQAogCXUzMiBvZmZzZXQ7CiAJc3RhdGljIGNvbnN0IHUzMiBhbGxfYXZhaWxbXSA9IHsgMCwgTlJfTVNJX0lSUVMgfTsKIAotCWlmICghZGV2LT5kZXYub2ZfbWF0Y2gpCisJbWF0Y2ggPSBvZl9tYXRjaF9kZXZpY2UoZnNsX29mX21zaV9pZHMsICZkZXYtPmRldik7CisJaWYgKCFtYXRjaCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JZmVhdHVyZXMgPSBkZXYtPmRldi5vZl9tYXRjaC0+ZGF0YTsKKwlmZWF0dXJlcyA9IG1hdGNoLT5kYXRhOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIlNldHRpbmcgdXAgRnJlZXNjYWxlIE1TSSBzdXBwb3J0XG4iKTsKIApAQCAtMzI3LDcgKzMzMCw3IEBACiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiTm8gbWVtb3J5IGZvciBNU0kgc3RydWN0dXJlXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBtc2k7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBtc2kpOwogCiAJbXNpLT5pcnFob3N0ID0gaXJxX2FsbG9jX2hvc3QoZGV2LT5kZXYub2Zfbm9kZSwgSVJRX0hPU1RfTUFQX0xJTkVBUiwKIAkJCQkgICAgICBOUl9NU0lfSVJRUywgJmZzbF9tc2lfaG9zdF9vcHMsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9pODI1OS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9pODI1OS5jCmluZGV4IDE0Mjc3MGMuLmQxOGJiMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvaTgyNTkuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2k4MjU5LmMKQEAgLTE4NSwxOCArMTg1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaTgyNTlfaG9zdF91bm1hcChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHVuc2lnbmVkIGludCB2aXJxKQotewotCS8qIE1ha2Ugc3VyZSBpcnEgaXMgbWFza2VkIGluIGhhcmR3YXJlICovCi0JaTgyNTlfbWFza19pcnEoaXJxX2dldF9pcnFfZGF0YSh2aXJxKSk7Ci0KLQkvKiByZW1vdmUgY2hpcCBhbmQgaGFuZGxlciAqLwotCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCBOVUxMLCBOVUxMKTsKLQotCS8qIE1ha2Ugc3VyZSBpdCdzIGNvbXBsZXRlZCAqLwotCXN5bmNocm9uaXplX2lycSh2aXJxKTsKLX0KLQogc3RhdGljIGludCBpODI1OV9ob3N0X3hsYXRlKHN0cnVjdCBpcnFfaG9zdCAqaCwgc3RydWN0IGRldmljZV9ub2RlICpjdCwKIAkJCSAgICBjb25zdCB1MzIgKmludHNwZWMsIHVuc2lnbmVkIGludCBpbnRzaXplLAogCQkJICAgIGlycV9od19udW1iZXJfdCAqb3V0X2h3aXJxLCB1bnNpZ25lZCBpbnQgKm91dF9mbGFncykKQEAgLTIyMCw3ICsyMDgsNiBAQAogc3RhdGljIHN0cnVjdCBpcnFfaG9zdF9vcHMgaTgyNTlfaG9zdF9vcHMgPSB7CiAJLm1hdGNoID0gaTgyNTlfaG9zdF9tYXRjaCwKIAkubWFwID0gaTgyNTlfaG9zdF9tYXAsCi0JLnVubWFwID0gaTgyNTlfaG9zdF91bm1hcCwKIAkueGxhdGUgPSBpODI1OV9ob3N0X3hsYXRlLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9pcGljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYwppbmRleCBmYTQzOGJlLi43MzY3ZDE3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYwpAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KQEAgLTUyMSwxMiArNTIxLDEwIEBACiAJcmV0dXJuIHByaW1hcnlfaXBpYzsKIH0KIAotI2RlZmluZSBpcGljX2lycV90b19odyh2aXJxKQkoKHVuc2lnbmVkIGludClpcnFfbWFwW3ZpcnFdLmh3aXJxKQotCiBzdGF0aWMgdm9pZCBpcGljX3VubWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXN0cnVjdCBpcGljICppcGljID0gaXBpY19mcm9tX2lycShkLT5pcnEpOwotCXVuc2lnbmVkIGludCBzcmMgPSBpcGljX2lycV90b19odyhkLT5pcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSBpcnFkX3RvX2h3aXJxKGQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHRlbXA7CiAKQEAgLTU0Miw3ICs1NDAsNyBAQAogc3RhdGljIHZvaWQgaXBpY19tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3RydWN0IGlwaWMgKmlwaWMgPSBpcGljX2Zyb21faXJxKGQtPmlycSk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IGlwaWNfaXJxX3RvX2h3KGQtPmlycSk7CisJdW5zaWduZWQgaW50IHNyYyA9IGlycWRfdG9faHdpcnEoZCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgdGVtcDsKIApAQCAtNTYyLDcgKzU2MCw3IEBACiBzdGF0aWMgdm9pZCBpcGljX2Fja19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXN0cnVjdCBpcGljICppcGljID0gaXBpY19mcm9tX2lycShkLT5pcnEpOwotCXVuc2lnbmVkIGludCBzcmMgPSBpcGljX2lycV90b19odyhkLT5pcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSBpcnFkX3RvX2h3aXJxKGQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHRlbXA7CiAKQEAgLTU4MSw3ICs1NzksNyBAQAogc3RhdGljIHZvaWQgaXBpY19tYXNrX2lycV9hbmRfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlzdHJ1Y3QgaXBpYyAqaXBpYyA9IGlwaWNfZnJvbV9pcnEoZC0+aXJxKTsKLQl1bnNpZ25lZCBpbnQgc3JjID0gaXBpY19pcnFfdG9faHcoZC0+aXJxKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gaXJxZF90b19od2lycShkKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB0ZW1wOwogCkBAIC02MDQsNyArNjAyLDcgQEAKIHN0YXRpYyBpbnQgaXBpY19zZXRfaXJxX3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQogewogCXN0cnVjdCBpcGljICppcGljID0gaXBpY19mcm9tX2lycShkLT5pcnEpOwotCXVuc2lnbmVkIGludCBzcmMgPSBpcGljX2lycV90b19odyhkLT5pcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSBpcnFkX3RvX2h3aXJxKGQpOwogCXVuc2lnbmVkIGludCB2b2xkLCB2bmV3LCBlZGliaXQ7CiAKIAlpZiAoZmxvd190eXBlID09IElSUV9UWVBFX05PTkUpCkBAIC03OTMsNyArNzkxLDcgQEAKIGludCBpcGljX3NldF9wcmlvcml0eSh1bnNpZ25lZCBpbnQgdmlycSwgdW5zaWduZWQgaW50IHByaW9yaXR5KQogewogCXN0cnVjdCBpcGljICppcGljID0gaXBpY19mcm9tX2lycSh2aXJxKTsKLQl1bnNpZ25lZCBpbnQgc3JjID0gaXBpY19pcnFfdG9faHcodmlycSk7CisJdW5zaWduZWQgaW50IHNyYyA9IHZpcnFfdG9faHcodmlycSk7CiAJdTMyIHRlbXA7CiAKIAlpZiAocHJpb3JpdHkgPiA3KQpAQCAtODIxLDcgKzgxOSw3IEBACiB2b2lkIGlwaWNfc2V0X2hpZ2hlc3RfcHJpb3JpdHkodW5zaWduZWQgaW50IHZpcnEpCiB7CiAJc3RydWN0IGlwaWMgKmlwaWMgPSBpcGljX2Zyb21faXJxKHZpcnEpOwotCXVuc2lnbmVkIGludCBzcmMgPSBpcGljX2lycV90b19odyh2aXJxKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gdmlycV90b19odyh2aXJxKTsKIAl1MzIgdGVtcDsKIAogCXRlbXAgPSBpcGljX3JlYWQoaXBpYy0+cmVncywgSVBJQ19TSUNGUik7CkBAIC05MDIsNyArOTAwLDcgQEAKIAl1MzIgc2VyY3I7CiB9IGlwaWNfc2F2ZWRfc3RhdGU7CiAKLXN0YXRpYyBpbnQgaXBpY19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpzZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGlwaWNfc3VzcGVuZCh2b2lkKQogewogCXN0cnVjdCBpcGljICppcGljID0gcHJpbWFyeV9pcGljOwogCkBAIC05MzMsNyArOTMxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpcGljX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqc2RldikKK3N0YXRpYyB2b2lkIGlwaWNfcmVzdW1lKHZvaWQpCiB7CiAJc3RydWN0IGlwaWMgKmlwaWMgPSBwcmltYXJ5X2lwaWM7CiAKQEAgLTk0OSw0NCArOTQ3LDI2IEBACiAJaXBpY193cml0ZShpcGljLT5yZWdzLCBJUElDX1NFQ05SLCBpcGljX3NhdmVkX3N0YXRlLnNlY25yKTsKIAlpcGljX3dyaXRlKGlwaWMtPnJlZ3MsIElQSUNfU0VSTVIsIGlwaWNfc2F2ZWRfc3RhdGUuc2VybXIpOwogCWlwaWNfd3JpdGUoaXBpYy0+cmVncywgSVBJQ19TRVJDUiwgaXBpY19zYXZlZF9zdGF0ZS5zZXJjcik7Ci0KLQlyZXR1cm4gMDsKIH0KICNlbHNlCiAjZGVmaW5lIGlwaWNfc3VzcGVuZCBOVUxMCiAjZGVmaW5lIGlwaWNfcmVzdW1lIE5VTEwKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBpcGljX3N5c2NsYXNzID0gewotCS5uYW1lID0gImlwaWMiLAorc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBpcGljX3N5c2NvcmVfb3BzID0gewogCS5zdXNwZW5kID0gaXBpY19zdXNwZW5kLAogCS5yZXN1bWUgPSBpcGljX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBkZXZpY2VfaXBpYyA9IHsKLQkuaWQJCT0gMCwKLQkuY2xzCQk9ICZpcGljX3N5c2NsYXNzLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9pcGljX3N5c2ZzKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpbml0X2lwaWNfc3lzY29yZSh2b2lkKQogewotCWludCByYzsKLQogCWlmICghcHJpbWFyeV9pcGljIHx8ICFwcmltYXJ5X2lwaWMtPnJlZ3MpCiAJCXJldHVybiAtRU5PREVWOwotCXByaW50ayhLRVJOX0RFQlVHICJSZWdpc3RlcmluZyBpcGljIHdpdGggc3lzZnMuLi5cbiIpOwogCi0JcmMgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJmlwaWNfc3lzY2xhc3MpOwotCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCByZWdpc3RlcmluZyBpcGljIHN5cyBjbGFzc1xuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlyYyA9IHN5c2Rldl9yZWdpc3RlcigmZGV2aWNlX2lwaWMpOwotCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCByZWdpc3RlcmluZyBpcGljIHN5cyBkZXZpY2VcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJcHJpbnRrKEtFUk5fREVCVUcgIlJlZ2lzdGVyaW5nIGlwaWMgc3lzdGVtIGNvcmUgb3BlcmF0aW9uc1xuIik7CisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJmlwaWNfc3lzY29yZV9vcHMpOworCiAJcmV0dXJuIDA7CiB9CiAKLXN1YnN5c19pbml0Y2FsbChpbml0X2lwaWNfc3lzZnMpOworc3Vic3lzX2luaXRjYWxsKGluaXRfaXBpY19zeXNjb3JlKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbW1pb19udnJhbS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tbWlvX252cmFtLmMKaW5kZXggMjA3MzI0Mi4uZGRjODc3YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tbWlvX252cmFtLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tbWlvX252cmFtLmMKQEAgLTExNSw2ICsxMTUsOCBAQAogCWludCByZXQ7CiAKIAludnJhbV9ub2RlID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgIm52cmFtIik7CisJaWYgKCFudnJhbV9ub2RlKQorCQludnJhbV9ub2RlID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgIm52cmFtIik7CiAJaWYgKCFudnJhbV9ub2RlKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIm52cmFtOiBubyBub2RlIGZvdW5kIGluIGRldmljZS10cmVlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21wYzh4eF9waWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBjOHh4X3BpYy5jCmluZGV4IGE4ODgwMGYuLjIwOTI0ZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBjOHh4X3BpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBjOHh4X3BpYy5jCkBAIC0yOCw3ICsyOCw3IEBACiBzdGF0aWMgdm9pZCBtcGM4eHhfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJaW50CWJpdCwgd29yZDsKLQl1bnNpZ25lZCBpbnQgaXJxX25yID0gKHVuc2lnbmVkIGludClpcnFfbWFwW2QtPmlycV0uaHdpcnE7CisJdW5zaWduZWQgaW50IGlycV9uciA9ICh1bnNpZ25lZCBpbnQpaXJxZF90b19od2lycShkKTsKIAogCWJpdCA9IGlycV9uciAmIDB4MWY7CiAJd29yZCA9IGlycV9uciA+PiA1OwpAQCAtNDAsNyArNDAsNyBAQAogc3RhdGljIHZvaWQgbXBjOHh4X21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlpbnQJYml0LCB3b3JkOwotCXVuc2lnbmVkIGludCBpcnFfbnIgPSAodW5zaWduZWQgaW50KWlycV9tYXBbZC0+aXJxXS5od2lycTsKKwl1bnNpZ25lZCBpbnQgaXJxX25yID0gKHVuc2lnbmVkIGludClpcnFkX3RvX2h3aXJxKGQpOwogCiAJYml0ID0gaXJxX25yICYgMHgxZjsKIAl3b3JkID0gaXJxX25yID4+IDU7CkBAIC01Miw3ICs1Miw3IEBACiBzdGF0aWMgdm9pZCBtcGM4eHhfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlpbnQJYml0OwotCXVuc2lnbmVkIGludCBpcnFfbnIgPSAodW5zaWduZWQgaW50KWlycV9tYXBbZC0+aXJxXS5od2lycTsKKwl1bnNpZ25lZCBpbnQgaXJxX25yID0gKHVuc2lnbmVkIGludClpcnFkX3RvX2h3aXJxKGQpOwogCiAJYml0ID0gaXJxX25yICYgMHgxZjsKIAlvdXRfYmUzMigmc2l1X3JlZy0+c2Nfc2lwZW5kLCAxIDw8ICgzMS1iaXQpKTsKQEAgLTYxLDcgKzYxLDcgQEAKIHN0YXRpYyB2b2lkIG1wYzh4eF9lbmRfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlpbnQgYml0LCB3b3JkOwotCXVuc2lnbmVkIGludCBpcnFfbnIgPSAodW5zaWduZWQgaW50KWlycV9tYXBbZC0+aXJxXS5od2lycTsKKwl1bnNpZ25lZCBpbnQgaXJxX25yID0gKHVuc2lnbmVkIGludClpcnFkX3RvX2h3aXJxKGQpOwogCiAJYml0ID0gaXJxX25yICYgMHgxZjsKIAl3b3JkID0gaXJxX25yID4+IDU7CkBAIC03Myw3ICs3Myw3IEBACiBzdGF0aWMgaW50IG1wYzh4eF9zZXRfaXJxX3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQogewogCWlmIChmbG93X3R5cGUgJiBJUlFfVFlQRV9FREdFX0ZBTExJTkcpIHsKLQkJaXJxX2h3X251bWJlcl90IGh3ID0gKHVuc2lnbmVkIGludClpcnFfbWFwW2QtPmlycV0uaHdpcnE7CisJCWlycV9od19udW1iZXJfdCBodyA9ICh1bnNpZ25lZCBpbnQpaXJxZF90b19od2lycShkKTsKIAkJdW5zaWduZWQgaW50IHNpZWwgPSBpbl9iZTMyKCZzaXVfcmVnLT5zY19zaWVsKTsKIAogCQkvKiBvbmx5IGV4dGVybmFsIElSUSBzZW5zZXMgYXJlIHByb2dyYW1tYWJsZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHh4X2dwaW8uYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBjOHh4eF9ncGlvLmMKaW5kZXggMDg5MmEyOC4uZmI0OTYzYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGM4eHh4X2dwaW8uYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21wYzh4eHhfZ3Bpby5jCkBAIC0xNjMsNyArMTYzLDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtcGM4eHh4X2djLT5sb2NrLCBmbGFncyk7CiAKLQlzZXRiaXRzMzIobW0tPnJlZ3MgKyBHUElPX0lNUiwgbXBjOHh4eF9ncGlvMm1hc2sodmlycV90b19odyhkLT5pcnEpKSk7CisJc2V0Yml0czMyKG1tLT5yZWdzICsgR1BJT19JTVIsIG1wYzh4eHhfZ3BpbzJtYXNrKGlycWRfdG9faHdpcnEoZCkpKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1wYzh4eHhfZ2MtPmxvY2ssIGZsYWdzKTsKIH0KQEAgLTE3Niw3ICsxNzYsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1wYzh4eHhfZ2MtPmxvY2ssIGZsYWdzKTsKIAotCWNscmJpdHMzMihtbS0+cmVncyArIEdQSU9fSU1SLCBtcGM4eHh4X2dwaW8ybWFzayh2aXJxX3RvX2h3KGQtPmlycSkpKTsKKwljbHJiaXRzMzIobW0tPnJlZ3MgKyBHUElPX0lNUiwgbXBjOHh4eF9ncGlvMm1hc2soaXJxZF90b19od2lycShkKSkpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBjOHh4eF9nYy0+bG9jaywgZmxhZ3MpOwogfQpAQCAtMTg2LDcgKzE4Niw3IEBACiAJc3RydWN0IG1wYzh4eHhfZ3Bpb19jaGlwICptcGM4eHh4X2djID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAJc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW0gPSAmbXBjOHh4eF9nYy0+bW1fZ2M7CiAKLQlvdXRfYmUzMihtbS0+cmVncyArIEdQSU9fSUVSLCBtcGM4eHh4X2dwaW8ybWFzayh2aXJxX3RvX2h3KGQtPmlycSkpKTsKKwlvdXRfYmUzMihtbS0+cmVncyArIEdQSU9fSUVSLCBtcGM4eHh4X2dwaW8ybWFzayhpcnFkX3RvX2h3aXJxKGQpKSk7CiB9CiAKIHN0YXRpYyBpbnQgbXBjOHh4eF9pcnFfc2V0X3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQpAQCAtMTk5LDE0ICsxOTksMTQgQEAKIAljYXNlIElSUV9UWVBFX0VER0VfRkFMTElORzoKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJm1wYzh4eHhfZ2MtPmxvY2ssIGZsYWdzKTsKIAkJc2V0Yml0czMyKG1tLT5yZWdzICsgR1BJT19JQ1IsCi0JCQkgIG1wYzh4eHhfZ3BpbzJtYXNrKHZpcnFfdG9faHcoZC0+aXJxKSkpOworCQkJICBtcGM4eHh4X2dwaW8ybWFzayhpcnFkX3RvX2h3aXJxKGQpKSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1wYzh4eHhfZ2MtPmxvY2ssIGZsYWdzKTsKIAkJYnJlYWs7CiAKIAljYXNlIElSUV9UWVBFX0VER0VfQk9USDoKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJm1wYzh4eHhfZ2MtPmxvY2ssIGZsYWdzKTsKIAkJY2xyYml0czMyKG1tLT5yZWdzICsgR1BJT19JQ1IsCi0JCQkgIG1wYzh4eHhfZ3BpbzJtYXNrKHZpcnFfdG9faHcoZC0+aXJxKSkpOworCQkJICBtcGM4eHh4X2dwaW8ybWFzayhpcnFkX3RvX2h3aXJxKGQpKSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1wYzh4eHhfZ2MtPmxvY2ssIGZsYWdzKTsKIAkJYnJlYWs7CiAKQEAgLTIyMSw3ICsyMjEsNyBAQAogewogCXN0cnVjdCBtcGM4eHh4X2dwaW9fY2hpcCAqbXBjOHh4eF9nYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tID0gJm1wYzh4eHhfZ2MtPm1tX2djOwotCXVuc2lnbmVkIGxvbmcgZ3BpbyA9IHZpcnFfdG9faHcoZC0+aXJxKTsKKwl1bnNpZ25lZCBsb25nIGdwaW8gPSBpcnFkX3RvX2h3aXJxKGQpOwogCXZvaWQgX19pb21lbSAqcmVnOwogCXVuc2lnbmVkIGludCBzaGlmdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYwppbmRleCBmOTFjMDY1Li4zYThkZTViIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYwpAQCAtNiw2ICs2LDcgQEAKICAqICB3aXRoIHZhcmlvdXMgYnJva2VuIGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIEhXLgogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQgQmVuamFtaW4gSGVycmVuc2NobWlkdCwgSUJNIENvcnAuCisgKiAgQ29weXJpZ2h0IDIwMTAtMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICoKICAqICBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0yNyw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KIAogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vc2lnbmFsLmg+CkBAIC0yMTgsNiArMjIwLDI4IEBACiAJX21waWNfd3JpdGUobXBpYy0+cmVnX3R5cGUsICZtcGljLT5ncmVncywgb2Zmc2V0LCB2YWx1ZSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTMyIF9tcGljX3RtX3JlYWQoc3RydWN0IG1waWMgKm1waWMsIHVuc2lnbmVkIGludCB0bSkKK3sKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gTVBJQ19JTkZPKFRJTUVSX1ZFQ1RPUl9QUkkpICsKKwkJCSAgICAgICgodG0gJiAzKSAqIE1QSUNfSU5GTyhUSU1FUl9TVFJJREUpKTsKKworCWlmICh0bSA+PSA0KQorCQlvZmZzZXQgKz0gMHgxMDAwIC8gNDsKKworCXJldHVybiBfbXBpY19yZWFkKG1waWMtPnJlZ190eXBlLCAmbXBpYy0+dG1yZWdzLCBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX21waWNfdG1fd3JpdGUoc3RydWN0IG1waWMgKm1waWMsIHVuc2lnbmVkIGludCB0bSwgdTMyIHZhbHVlKQoreworCXVuc2lnbmVkIGludCBvZmZzZXQgPSBNUElDX0lORk8oVElNRVJfVkVDVE9SX1BSSSkgKworCQkJICAgICAgKCh0bSAmIDMpICogTVBJQ19JTkZPKFRJTUVSX1NUUklERSkpOworCisJaWYgKHRtID49IDQpCisJCW9mZnNldCArPSAweDEwMDAgLyA0OworCisJX21waWNfd3JpdGUobXBpYy0+cmVnX3R5cGUsICZtcGljLT50bXJlZ3MsIG9mZnNldCwgdmFsdWUpOworfQorCiBzdGF0aWMgaW5saW5lIHUzMiBfbXBpY19jcHVfcmVhZChzdHJ1Y3QgbXBpYyAqbXBpYywgdW5zaWduZWQgaW50IHJlZykKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gbXBpY19wcm9jZXNzb3JfaWQobXBpYyk7CkBAIC0yNjgsNiArMjkyLDggQEAKICNkZWZpbmUgbXBpY193cml0ZShiLHIsdikJX21waWNfd3JpdGUobXBpYy0+cmVnX3R5cGUsJihiKSwociksKHYpKQogI2RlZmluZSBtcGljX2lwaV9yZWFkKGkpCV9tcGljX2lwaV9yZWFkKG1waWMsKGkpKQogI2RlZmluZSBtcGljX2lwaV93cml0ZShpLHYpCV9tcGljX2lwaV93cml0ZShtcGljLChpKSwodikpCisjZGVmaW5lIG1waWNfdG1fcmVhZChpKQkJX21waWNfdG1fcmVhZChtcGljLChpKSkKKyNkZWZpbmUgbXBpY190bV93cml0ZShpLHYpCV9tcGljX3RtX3dyaXRlKG1waWMsKGkpLCh2KSkKICNkZWZpbmUgbXBpY19jcHVfcmVhZChpKQlfbXBpY19jcHVfcmVhZChtcGljLChpKSkKICNkZWZpbmUgbXBpY19jcHVfd3JpdGUoaSx2KQlfbXBpY19jcHVfd3JpdGUobXBpYywoaSksKHYpKQogI2RlZmluZSBtcGljX2lycV9yZWFkKHMscikJX21waWNfaXJxX3JlYWQobXBpYywocyksKHIpKQpAQCAtNjA3LDggKzYzMyw2IEBACiB9CiAjZW5kaWYKIAotI2RlZmluZSBtcGljX2lycV90b19odyh2aXJxKQkoKHVuc2lnbmVkIGludClpcnFfbWFwW3ZpcnFdLmh3aXJxKQotCiAvKiBGaW5kIGFuIG1waWMgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gbGludXggaW50ZXJydXB0ICovCiBzdGF0aWMgc3RydWN0IG1waWMgKm1waWNfZmluZCh1bnNpZ25lZCBpbnQgaXJxKQogewpAQCAtNjIxLDExICs2NDUsMTggQEAKIC8qIERldGVybWluZSBpZiB0aGUgbGludXggaXJxIGlzIGFuIElQSSAqLwogc3RhdGljIHVuc2lnbmVkIGludCBtcGljX2lzX2lwaShzdHJ1Y3QgbXBpYyAqbXBpYywgdW5zaWduZWQgaW50IGlycSkKIHsKLQl1bnNpZ25lZCBpbnQgc3JjID0gbXBpY19pcnFfdG9faHcoaXJxKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gdmlycV90b19odyhpcnEpOwogCiAJcmV0dXJuIChzcmMgPj0gbXBpYy0+aXBpX3ZlY3NbMF0gJiYgc3JjIDw9IG1waWMtPmlwaV92ZWNzWzNdKTsKIH0KIAorLyogRGV0ZXJtaW5lIGlmIHRoZSBsaW51eCBpcnEgaXMgYSB0aW1lciAqLworc3RhdGljIHVuc2lnbmVkIGludCBtcGljX2lzX3RtKHN0cnVjdCBtcGljICptcGljLCB1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGludCBzcmMgPSB2aXJxX3RvX2h3KGlycSk7CisKKwlyZXR1cm4gKHNyYyA+PSBtcGljLT50aW1lcl92ZWNzWzBdICYmIHNyYyA8PSBtcGljLT50aW1lcl92ZWNzWzddKTsKK30KIAogLyogQ29udmVydCBhIGNwdSBtYXNrIGZyb20gbG9naWNhbCB0byBwaHlzaWNhbCBjcHUgbnVtYmVycy4gKi8KIHN0YXRpYyBpbmxpbmUgdTMyIG1waWNfcGh5c21hc2sodTMyIGNwdW1hc2spCkBAIC02MzMsNyArNjY0LDcgQEAKIAlpbnQgaTsKIAl1MzIgbWFzayA9IDA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgKytpLCBjcHVtYXNrID4+PSAxKQorCWZvciAoaSA9IDA7IGkgPCBtaW4oMzIsIE5SX0NQVVMpOyArK2ksIGNwdW1hc2sgPj49IDEpCiAJCW1hc2sgfD0gKGNwdW1hc2sgJiAxKSA8PCBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGkpOwogCXJldHVybiBtYXNrOwogfQpAQCAtNjc0LDcgKzcwNSw3IEBACiB7CiAJdW5zaWduZWQgaW50IGxvb3BzID0gMTAwMDAwOwogCXN0cnVjdCBtcGljICptcGljID0gbXBpY19mcm9tX2lycV9kYXRhKGQpOwotCXVuc2lnbmVkIGludCBzcmMgPSBtcGljX2lycV90b19odyhkLT5pcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSBpcnFkX3RvX2h3aXJxKGQpOwogCiAJREJHKCIlcDogJXM6IGVuYWJsZV9pcnE6ICVkIChzcmMgJWQpXG4iLCBtcGljLCBtcGljLT5uYW1lLCBkLT5pcnEsIHNyYyk7CiAKQEAgLTY5NSw3ICs3MjYsNyBAQAogewogCXVuc2lnbmVkIGludCBsb29wcyA9IDEwMDAwMDsKIAlzdHJ1Y3QgbXBpYyAqbXBpYyA9IG1waWNfZnJvbV9pcnFfZGF0YShkKTsKLQl1bnNpZ25lZCBpbnQgc3JjID0gbXBpY19pcnFfdG9faHcoZC0+aXJxKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gaXJxZF90b19od2lycShkKTsKIAogCURCRygiJXM6IGRpc2FibGVfaXJxOiAlZCAoc3JjICVkKVxuIiwgbXBpYy0+bmFtZSwgZC0+aXJxLCBzcmMpOwogCkBAIC03MzMsNyArNzY0LDcgQEAKIHN0YXRpYyB2b2lkIG1waWNfdW5tYXNrX2h0X2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3RydWN0IG1waWMgKm1waWMgPSBtcGljX2Zyb21faXJxX2RhdGEoZCk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IG1waWNfaXJxX3RvX2h3KGQtPmlycSk7CisJdW5zaWduZWQgaW50IHNyYyA9IGlycWRfdG9faHdpcnEoZCk7CiAKIAltcGljX3VubWFza19pcnEoZCk7CiAKQEAgLTc0NCw3ICs3NzUsNyBAQAogc3RhdGljIHVuc2lnbmVkIGludCBtcGljX3N0YXJ0dXBfaHRfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlzdHJ1Y3QgbXBpYyAqbXBpYyA9IG1waWNfZnJvbV9pcnFfZGF0YShkKTsKLQl1bnNpZ25lZCBpbnQgc3JjID0gbXBpY19pcnFfdG9faHcoZC0+aXJxKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gaXJxZF90b19od2lycShkKTsKIAogCW1waWNfdW5tYXNrX2lycShkKTsKIAltcGljX3N0YXJ0dXBfaHRfaW50ZXJydXB0KG1waWMsIHNyYywgaXJxZF9pc19sZXZlbF90eXBlKGQpKTsKQEAgLTc1NSw3ICs3ODYsNyBAQAogc3RhdGljIHZvaWQgbXBpY19zaHV0ZG93bl9odF9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXN0cnVjdCBtcGljICptcGljID0gbXBpY19mcm9tX2lycV9kYXRhKGQpOwotCXVuc2lnbmVkIGludCBzcmMgPSBtcGljX2lycV90b19odyhkLT5pcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSBpcnFkX3RvX2h3aXJxKGQpOwogCiAJbXBpY19zaHV0ZG93bl9odF9pbnRlcnJ1cHQobXBpYywgc3JjKTsKIAltcGljX21hc2tfaXJxKGQpOwpAQCAtNzY0LDcgKzc5NSw3IEBACiBzdGF0aWMgdm9pZCBtcGljX2VuZF9odF9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXN0cnVjdCBtcGljICptcGljID0gbXBpY19mcm9tX2lycV9kYXRhKGQpOwotCXVuc2lnbmVkIGludCBzcmMgPSBtcGljX2lycV90b19odyhkLT5pcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSBpcnFkX3RvX2h3aXJxKGQpOwogCiAjaWZkZWYgREVCVUdfSVJRCiAJREJHKCIlczogZW5kX2lycTogJWRcbiIsIG1waWMtPm5hbWUsIGQtPmlycSk7CkBAIC03ODUsNyArODE2LDcgQEAKIHN0YXRpYyB2b2lkIG1waWNfdW5tYXNrX2lwaShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3RydWN0IG1waWMgKm1waWMgPSBtcGljX2Zyb21faXBpKGQpOwotCXVuc2lnbmVkIGludCBzcmMgPSBtcGljX2lycV90b19odyhkLT5pcnEpIC0gbXBpYy0+aXBpX3ZlY3NbMF07CisJdW5zaWduZWQgaW50IHNyYyA9IHZpcnFfdG9faHcoZC0+aXJxKSAtIG1waWMtPmlwaV92ZWNzWzBdOwogCiAJREJHKCIlczogZW5hYmxlX2lwaTogJWQgKGlwaSAlZClcbiIsIG1waWMtPm5hbWUsIGQtPmlycSwgc3JjKTsKIAltcGljX2lwaV93cml0ZShzcmMsIG1waWNfaXBpX3JlYWQoc3JjKSAmIH5NUElDX1ZFQ1BSSV9NQVNLKTsKQEAgLTgxMiwyNyArODQzLDQyIEBACiAKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKK3N0YXRpYyB2b2lkIG1waWNfdW5tYXNrX3RtKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlzdHJ1Y3QgbXBpYyAqbXBpYyA9IG1waWNfZnJvbV9pcnFfZGF0YShkKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gdmlycV90b19odyhkLT5pcnEpIC0gbXBpYy0+dGltZXJfdmVjc1swXTsKKworCURCRygiJXM6IGVuYWJsZV90bTogJWQgKHRtICVkKVxuIiwgbXBpYy0+bmFtZSwgaXJxLCBzcmMpOworCW1waWNfdG1fd3JpdGUoc3JjLCBtcGljX3RtX3JlYWQoc3JjKSAmIH5NUElDX1ZFQ1BSSV9NQVNLKTsKKwltcGljX3RtX3JlYWQoc3JjKTsKK30KKworc3RhdGljIHZvaWQgbXBpY19tYXNrX3RtKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlzdHJ1Y3QgbXBpYyAqbXBpYyA9IG1waWNfZnJvbV9pcnFfZGF0YShkKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gdmlycV90b19odyhkLT5pcnEpIC0gbXBpYy0+dGltZXJfdmVjc1swXTsKKworCW1waWNfdG1fd3JpdGUoc3JjLCBtcGljX3RtX3JlYWQoc3JjKSB8IE1QSUNfVkVDUFJJX01BU0spOworCW1waWNfdG1fcmVhZChzcmMpOworfQorCiBpbnQgbXBpY19zZXRfYWZmaW5pdHkoc3RydWN0IGlycV9kYXRhICpkLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaywKIAkJICAgICAgYm9vbCBmb3JjZSkKIHsKIAlzdHJ1Y3QgbXBpYyAqbXBpYyA9IG1waWNfZnJvbV9pcnFfZGF0YShkKTsKLQl1bnNpZ25lZCBpbnQgc3JjID0gbXBpY19pcnFfdG9faHcoZC0+aXJxKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gaXJxZF90b19od2lycShkKTsKIAogCWlmIChtcGljLT5mbGFncyAmIE1QSUNfU0lOR0xFX0RFU1RfQ1BVKSB7CiAJCWludCBjcHVpZCA9IGlycV9jaG9vc2VfY3B1KGNwdW1hc2spOwogCiAJCW1waWNfaXJxX3dyaXRlKHNyYywgTVBJQ19JTkZPKElSUV9ERVNUSU5BVElPTiksIDEgPDwgY3B1aWQpOwogCX0gZWxzZSB7Ci0JCWNwdW1hc2tfdmFyX3QgdG1wOworCQl1MzIgbWFzayA9IGNwdW1hc2tfYml0cyhjcHVtYXNrKVswXTsKIAotCQlhbGxvY19jcHVtYXNrX3ZhcigmdG1wLCBHRlBfS0VSTkVMKTsKLQotCQljcHVtYXNrX2FuZCh0bXAsIGNwdW1hc2ssIGNwdV9vbmxpbmVfbWFzayk7CisJCW1hc2sgJj0gY3B1bWFza19iaXRzKGNwdV9vbmxpbmVfbWFzaylbMF07CiAKIAkJbXBpY19pcnFfd3JpdGUoc3JjLCBNUElDX0lORk8oSVJRX0RFU1RJTkFUSU9OKSwKLQkJCSAgICAgICBtcGljX3BoeXNtYXNrKGNwdW1hc2tfYml0cyh0bXApWzBdKSk7Ci0KLQkJZnJlZV9jcHVtYXNrX3Zhcih0bXApOworCQkJICAgICAgIG1waWNfcGh5c21hc2sobWFzaykpOwogCX0KIAogCXJldHVybiAwOwpAQCAtODYyLDcgKzkwOCw3IEBACiBpbnQgbXBpY19zZXRfaXJxX3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQogewogCXN0cnVjdCBtcGljICptcGljID0gbXBpY19mcm9tX2lycV9kYXRhKGQpOwotCXVuc2lnbmVkIGludCBzcmMgPSBtcGljX2lycV90b19odyhkLT5pcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSBpcnFkX3RvX2h3aXJxKGQpOwogCXVuc2lnbmVkIGludCB2ZWNwcmksIHZvbGQsIHZuZXc7CiAKIAlEQkcoIm1waWM6IHNldF9pcnFfdHlwZShtcGljOkAlcCx2aXJxOiVkLHNyYzoweCV4LHR5cGU6MHgleClcbiIsCkBAIC04OTgsNyArOTQ0LDcgQEAKIHZvaWQgbXBpY19zZXRfdmVjdG9yKHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgdmVjdG9yKQogewogCXN0cnVjdCBtcGljICptcGljID0gbXBpY19mcm9tX2lycSh2aXJxKTsKLQl1bnNpZ25lZCBpbnQgc3JjID0gbXBpY19pcnFfdG9faHcodmlycSk7CisJdW5zaWduZWQgaW50IHNyYyA9IHZpcnFfdG9faHcodmlycSk7CiAJdW5zaWduZWQgaW50IHZlY3ByaTsKIAogCURCRygibXBpYzogc2V0X3ZlY3RvcihtcGljOkAlcCx2aXJxOiVkLHNyYzolZCx2ZWN0b3I6MHgleClcbiIsCkBAIC05MTYsNyArOTYyLDcgQEAKIHZvaWQgbXBpY19zZXRfZGVzdGluYXRpb24odW5zaWduZWQgaW50IHZpcnEsIHVuc2lnbmVkIGludCBjcHVpZCkKIHsKIAlzdHJ1Y3QgbXBpYyAqbXBpYyA9IG1waWNfZnJvbV9pcnEodmlycSk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IG1waWNfaXJxX3RvX2h3KHZpcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSB2aXJxX3RvX2h3KHZpcnEpOwogCiAJREJHKCJtcGljOiBzZXRfZGVzdGluYXRpb24obXBpYzpAJXAsdmlycTolZCxzcmM6JWQsY3B1aWQ6MHgleClcbiIsCiAJICAgIG1waWMsIHZpcnEsIHNyYywgY3B1aWQpOwpAQCAtOTQyLDYgKzk4OCwxMiBAQAogfTsKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXBpY190bV9jaGlwID0geworCS5pcnFfbWFzawk9IG1waWNfbWFza190bSwKKwkuaXJxX3VubWFzawk9IG1waWNfdW5tYXNrX3RtLAorCS5pcnFfZW9pCT0gbXBpY19lbmRfaXJxLAorfTsKKwogI2lmZGVmIENPTkZJR19NUElDX1UzX0hUX0lSUVMKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXBpY19pcnFfaHRfY2hpcCA9IHsKIAkuaXJxX3N0YXJ0dXAJPSBtcGljX3N0YXJ0dXBfaHRfaXJxLApAQCAtOTg1LDYgKzEwMzcsMTYgQEAKIAl9CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCisJaWYgKGh3ID49IG1waWMtPnRpbWVyX3ZlY3NbMF0gJiYgaHcgPD0gbXBpYy0+dGltZXJfdmVjc1s3XSkgeworCQlXQVJOX09OKCEobXBpYy0+ZmxhZ3MgJiBNUElDX1BSSU1BUlkpKTsKKworCQlEQkcoIm1waWM6IG1hcHBpbmcgYXMgdGltZXJcbiIpOworCQlpcnFfc2V0X2NoaXBfZGF0YSh2aXJxLCBtcGljKTsKKwkJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsICZtcGljLT5oY190bSwKKwkJCQkJIGhhbmRsZV9mYXN0ZW9pX2lycSk7CisJCXJldHVybiAwOworCX0KKwogCWlmIChodyA+PSBtcGljLT5pcnFfY291bnQpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xMDI1LDYgKzEwODcsNyBAQAogCQkJICAgaXJxX2h3X251bWJlcl90ICpvdXRfaHdpcnEsIHVuc2lnbmVkIGludCAqb3V0X2ZsYWdzKQogCiB7CisJc3RydWN0IG1waWMgKm1waWMgPSBoLT5ob3N0X2RhdGE7CiAJc3RhdGljIHVuc2lnbmVkIGNoYXIgbWFwX21waWNfc2Vuc2VzWzRdID0gewogCQlJUlFfVFlQRV9FREdFX1JJU0lORywKIAkJSVJRX1RZUEVfTEVWRUxfTE9XLApAQCAtMTAzMyw3ICsxMDk2LDM4IEBACiAJfTsKIAogCSpvdXRfaHdpcnEgPSBpbnRzcGVjWzBdOwotCWlmIChpbnRzaXplID4gMSkgeworCWlmIChpbnRzaXplID49IDQgJiYgKG1waWMtPmZsYWdzICYgTVBJQ19GU0wpKSB7CisJCS8qCisJCSAqIEZyZWVzY2FsZSBNUElDIHdpdGggZXh0ZW5kZWQgaW50c3BlYzoKKwkJICogRmlyc3QgdHdvIGNlbGxzIGFyZSBhcyB1c3VhbC4gIFRoaXJkIHNwZWNpZmllcworCQkgKiBhbiAiaW50ZXJydXB0IHR5cGUiLiAgRm91cnRoIGlzIHR5cGUtc3BlY2lmaWMgZGF0YS4KKwkJICoKKwkJICogU2VlIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9tcGljLnR4dAorCQkgKi8KKwkJc3dpdGNoIChpbnRzcGVjWzJdKSB7CisJCWNhc2UgMDoKKwkJY2FzZSAxOiAvKiBubyBFSVNSL0VJTVIgc3VwcG9ydCBmb3Igbm93LCB0cmVhdCBhcyBzaGFyZWQgSVJRICovCisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJaWYgKGludHNwZWNbMF0gPj0gQVJSQVlfU0laRShtcGljLT5pcGlfdmVjcykpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCSpvdXRfaHdpcnEgPSBtcGljLT5pcGlfdmVjc1tpbnRzcGVjWzBdXTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlpZiAoaW50c3BlY1swXSA+PSBBUlJBWV9TSVpFKG1waWMtPnRpbWVyX3ZlY3MpKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQkqb3V0X2h3aXJxID0gbXBpYy0+dGltZXJfdmVjc1tpbnRzcGVjWzBdXTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJfZGVidWcoIiVzOiB1bmtub3duIGlycSB0eXBlICV1XG4iLAorCQkJCSBfX2Z1bmNfXywgaW50c3BlY1syXSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCSpvdXRfZmxhZ3MgPSBtYXBfbXBpY19zZW5zZXNbaW50c3BlY1sxXSAmIDNdOworCX0gZWxzZSBpZiAoaW50c2l6ZSA+IDEpIHsKIAkJdTMyIG1hc2sgPSAweDM7CiAKIAkJLyogQXBwbGUgaW52ZW50ZWQgYSBuZXcgcmFjZSBvZiBlbmNvZGluZyBvbiBtYWNoaW5lcyB3aXRoCkBAIC0xMTA5LDYgKzEyMDMsOSBAQAogCW1waWMtPmhjX2lwaS5uYW1lID0gbmFtZTsKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKKwltcGljLT5oY190bSA9IG1waWNfdG1fY2hpcDsKKwltcGljLT5oY190bS5uYW1lID0gbmFtZTsKKwogCW1waWMtPmZsYWdzID0gZmxhZ3M7CiAJbXBpYy0+aXN1X3NpemUgPSBpc3Vfc2l6ZTsKIAltcGljLT5pcnFfY291bnQgPSBpcnFfY291bnQ7CkBAIC0xMTE5LDEwICsxMjE2LDE0IEBACiAJZWxzZQogCQlpbnR2ZWNfdG9wID0gMjU1OwogCi0JbXBpYy0+dGltZXJfdmVjc1swXSA9IGludHZlY190b3AgLSA4OwotCW1waWMtPnRpbWVyX3ZlY3NbMV0gPSBpbnR2ZWNfdG9wIC0gNzsKLQltcGljLT50aW1lcl92ZWNzWzJdID0gaW50dmVjX3RvcCAtIDY7Ci0JbXBpYy0+dGltZXJfdmVjc1szXSA9IGludHZlY190b3AgLSA1OworCW1waWMtPnRpbWVyX3ZlY3NbMF0gPSBpbnR2ZWNfdG9wIC0gMTI7CisJbXBpYy0+dGltZXJfdmVjc1sxXSA9IGludHZlY190b3AgLSAxMTsKKwltcGljLT50aW1lcl92ZWNzWzJdID0gaW50dmVjX3RvcCAtIDEwOworCW1waWMtPnRpbWVyX3ZlY3NbM10gPSBpbnR2ZWNfdG9wIC0gOTsKKwltcGljLT50aW1lcl92ZWNzWzRdID0gaW50dmVjX3RvcCAtIDg7CisJbXBpYy0+dGltZXJfdmVjc1s1XSA9IGludHZlY190b3AgLSA3OworCW1waWMtPnRpbWVyX3ZlY3NbNl0gPSBpbnR2ZWNfdG9wIC0gNjsKKwltcGljLT50aW1lcl92ZWNzWzddID0gaW50dmVjX3RvcCAtIDU7CiAJbXBpYy0+aXBpX3ZlY3NbMF0gICA9IGludHZlY190b3AgLSA0OwogCW1waWMtPmlwaV92ZWNzWzFdICAgPSBpbnR2ZWNfdG9wIC0gMzsKIAltcGljLT5pcGlfdmVjc1syXSAgID0gaW50dmVjX3RvcCAtIDI7CkBAIC0xMTMyLDYgKzEyMzMsOCBAQAogCS8qIENoZWNrIGZvciAiYmlnLWVuZGlhbiIgaW4gZGV2aWNlLXRyZWUgKi8KIAlpZiAobm9kZSAmJiBvZl9nZXRfcHJvcGVydHkobm9kZSwgImJpZy1lbmRpYW4iLCBOVUxMKSAhPSBOVUxMKQogCQltcGljLT5mbGFncyB8PSBNUElDX0JJR19FTkRJQU47CisJaWYgKG5vZGUgJiYgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobm9kZSwgImZzbCxtcGljIikpCisJCW1waWMtPmZsYWdzIHw9IE1QSUNfRlNMOwogCiAJLyogTG9vayBmb3IgcHJvdGVjdGVkIHNvdXJjZXMgKi8KIAlpZiAobm9kZSkgewpAQCAtMTMyMywxNSArMTQyNiwxNyBAQAogCS8qIFNldCBjdXJyZW50IHByb2Nlc3NvciBwcmlvcml0eSB0byBtYXggKi8KIAltcGljX2NwdV93cml0ZShNUElDX0lORk8oQ1BVX0NVUlJFTlRfVEFTS19QUkkpLCAweGYpOwogCi0JLyogSW5pdGlhbGl6ZSB0aW1lcnM6IGp1c3QgZGlzYWJsZSB0aGVtIGFsbCAqLworCS8qIEluaXRpYWxpemUgdGltZXJzIHRvIG91ciByZXNlcnZlZCB2ZWN0b3JzIGFuZCBtYXNrIHRoZW0gZm9yIG5vdyAqLwogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJbXBpY193cml0ZShtcGljLT50bXJlZ3MsCiAJCQkgICBpICogTVBJQ19JTkZPKFRJTUVSX1NUUklERSkgKwotCQkJICAgTVBJQ19JTkZPKFRJTUVSX0RFU1RJTkFUSU9OKSwgMCk7CisJCQkgICBNUElDX0lORk8oVElNRVJfREVTVElOQVRJT04pLAorCQkJICAgMSA8PCBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKSk7CiAJCW1waWNfd3JpdGUobXBpYy0+dG1yZWdzLAogCQkJICAgaSAqIE1QSUNfSU5GTyhUSU1FUl9TVFJJREUpICsKIAkJCSAgIE1QSUNfSU5GTyhUSU1FUl9WRUNUT1JfUFJJKSwKIAkJCSAgIE1QSUNfVkVDUFJJX01BU0sgfAorCQkJICAgKDkgPDwgTVBJQ19WRUNQUklfUFJJT1JJVFlfU0hJRlQpIHwKIAkJCSAgIChtcGljLT50aW1lcl92ZWNzWzBdICsgaSkpOwogCX0KIApAQCAtMTQyNyw3ICsxNTMyLDcgQEAKIHZvaWQgbXBpY19pcnFfc2V0X3ByaW9yaXR5KHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBwcmkpCiB7CiAJc3RydWN0IG1waWMgKm1waWMgPSBtcGljX2ZpbmQoaXJxKTsKLQl1bnNpZ25lZCBpbnQgc3JjID0gbXBpY19pcnFfdG9faHcoaXJxKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gdmlycV90b19odyhpcnEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHJlZzsKIApAQCAtMTQ0MCw2ICsxNTQ1LDExIEBACiAJCQl+TVBJQ19WRUNQUklfUFJJT1JJVFlfTUFTSzsKIAkJbXBpY19pcGlfd3JpdGUoc3JjIC0gbXBpYy0+aXBpX3ZlY3NbMF0sCiAJCQkgICAgICAgcmVnIHwgKHByaSA8PCBNUElDX1ZFQ1BSSV9QUklPUklUWV9TSElGVCkpOworCX0gZWxzZSBpZiAobXBpY19pc190bShtcGljLCBpcnEpKSB7CisJCXJlZyA9IG1waWNfdG1fcmVhZChzcmMgLSBtcGljLT50aW1lcl92ZWNzWzBdKSAmCisJCQl+TVBJQ19WRUNQUklfUFJJT1JJVFlfTUFTSzsKKwkJbXBpY190bV93cml0ZShzcmMgLSBtcGljLT50aW1lcl92ZWNzWzBdLAorCQkJICAgICAgcmVnIHwgKHByaSA8PCBNUElDX1ZFQ1BSSV9QUklPUklUWV9TSElGVCkpOwogCX0gZWxzZSB7CiAJCXJlZyA9IG1waWNfaXJxX3JlYWQoc3JjLCBNUElDX0lORk8oSVJRX1ZFQ1RPUl9QUkkpKQogCQkJJiB+TVBJQ19WRUNQUklfUFJJT1JJVFlfTUFTSzsKQEAgLTE2MTksNDYgKzE3MjksMjggQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIG1waWNfc2VuZF9pcGkodW5zaWduZWQgaW50IGlwaV9ubywgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXNrKQordm9pZCBzbXBfbXBpY19tZXNzYWdlX3Bhc3MoaW50IGNwdSwgaW50IG1zZykKIHsKIAlzdHJ1Y3QgbXBpYyAqbXBpYyA9IG1waWNfcHJpbWFyeTsKKwl1MzIgcGh5c21hc2s7CiAKIAlCVUdfT04obXBpYyA9PSBOVUxMKTsKIAotI2lmZGVmIERFQlVHX0lQSQotCURCRygiJXM6IHNlbmRfaXBpKGlwaV9ubzogJWQpXG4iLCBtcGljLT5uYW1lLCBpcGlfbm8pOwotI2VuZGlmCi0KLQltcGljX2NwdV93cml0ZShNUElDX0lORk8oQ1BVX0lQSV9ESVNQQVRDSF8wKSArCi0JCSAgICAgICBpcGlfbm8gKiBNUElDX0lORk8oQ1BVX0lQSV9ESVNQQVRDSF9TVFJJREUpLAotCQkgICAgICAgbXBpY19waHlzbWFzayhjcHVtYXNrX2JpdHMoY3B1X21hc2spWzBdKSk7Ci19Ci0KLXZvaWQgc21wX21waWNfbWVzc2FnZV9wYXNzKGludCB0YXJnZXQsIGludCBtc2cpCi17Ci0JY3B1bWFza192YXJfdCB0bXA7Ci0KIAkvKiBtYWtlIHN1cmUgd2UncmUgc2VuZGluZyBzb21ldGhpbmcgdGhhdCB0cmFuc2xhdGVzIHRvIGFuIElQSSAqLwogCWlmICgodW5zaWduZWQgaW50KW1zZyA+IDMpIHsKIAkJcHJpbnRrKCJTTVAgJWQ6IHNtcF9tZXNzYWdlX3Bhc3M6IHVua25vd24gbXNnICVkXG4iLAogCQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLCBtc2cpOwogCQlyZXR1cm47CiAJfQotCXN3aXRjaCAodGFyZ2V0KSB7Ci0JY2FzZSBNU0dfQUxMOgotCQltcGljX3NlbmRfaXBpKG1zZywgY3B1X29ubGluZV9tYXNrKTsKLQkJYnJlYWs7Ci0JY2FzZSBNU0dfQUxMX0JVVF9TRUxGOgotCQlhbGxvY19jcHVtYXNrX3ZhcigmdG1wLCBHRlBfTk9XQUlUKTsKLQkJY3B1bWFza19hbmRub3QodG1wLCBjcHVfb25saW5lX21hc2ssCi0JCQkgICAgICAgY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpKTsKLQkJbXBpY19zZW5kX2lwaShtc2csIHRtcCk7Ci0JCWZyZWVfY3B1bWFza192YXIodG1wKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbXBpY19zZW5kX2lwaShtc2csIGNwdW1hc2tfb2YodGFyZ2V0KSk7Ci0JCWJyZWFrOwotCX0KKworI2lmZGVmIERFQlVHX0lQSQorCURCRygiJXM6IHNlbmRfaXBpKGlwaV9ubzogJWQpXG4iLCBtcGljLT5uYW1lLCBtc2cpOworI2VuZGlmCisKKwlwaHlzbWFzayA9IDEgPDwgZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChjcHUpOworCisJbXBpY19jcHVfd3JpdGUoTVBJQ19JTkZPKENQVV9JUElfRElTUEFUQ0hfMCkgKworCQkgICAgICAgbXNnICogTVBJQ19JTkZPKENQVV9JUElfRElTUEFUQ0hfU1RSSURFKSwgcGh5c21hc2spOwogfQogCiBpbnQgX19pbml0IHNtcF9tcGljX3Byb2JlKHZvaWQpCkBAIC0xNzAyLDkgKzE3OTQsOCBAQAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBtcGljX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIHZvaWQgbXBpY19zdXNwZW5kX29uZShzdHJ1Y3QgbXBpYyAqbXBpYykKIHsKLQlzdHJ1Y3QgbXBpYyAqbXBpYyA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBtcGljLCBzeXNkZXYpOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IG1waWMtPm51bV9zb3VyY2VzOyBpKyspIHsKQEAgLTE3MTMsMTMgKzE4MDQsMjIgQEAKIAkJbXBpYy0+c2F2ZV9kYXRhW2ldLmRlc3QgPQogCQkJbXBpY19pcnFfcmVhZChpLCBNUElDX0lORk8oSVJRX0RFU1RJTkFUSU9OKSk7CiAJfQorfQorCitzdGF0aWMgaW50IG1waWNfc3VzcGVuZCh2b2lkKQoreworCXN0cnVjdCBtcGljICptcGljID0gbXBpY3M7CisKKwl3aGlsZSAobXBpYykgeworCQltcGljX3N1c3BlbmRfb25lKG1waWMpOworCQltcGljID0gbXBpYy0+bmV4dDsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtcGljX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgbXBpY19yZXN1bWVfb25lKHN0cnVjdCBtcGljICptcGljKQogewotCXN0cnVjdCBtcGljICptcGljID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IG1waWMsIHN5c2Rldik7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbXBpYy0+bnVtX3NvdXJjZXM7IGkrKykgewpAQCAtMTc0NiwzMyArMTg0NiwyOCBAQAogCX0KICNlbmRpZgogCX0gLyogZW5kIGZvciBsb29wICovCi0KLQlyZXR1cm4gMDsKIH0KLSNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBtcGljX3N5c2NsYXNzID0gewotI2lmZGVmIENPTkZJR19QTQorc3RhdGljIHZvaWQgbXBpY19yZXN1bWUodm9pZCkKK3sKKwlzdHJ1Y3QgbXBpYyAqbXBpYyA9IG1waWNzOworCisJd2hpbGUgKG1waWMpIHsKKwkJbXBpY19yZXN1bWVfb25lKG1waWMpOworCQltcGljID0gbXBpYy0+bmV4dDsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzY29yZV9vcHMgbXBpY19zeXNjb3JlX29wcyA9IHsKIAkucmVzdW1lID0gbXBpY19yZXN1bWUsCiAJLnN1c3BlbmQgPSBtcGljX3N1c3BlbmQsCi0jZW5kaWYKLQkubmFtZSA9ICJtcGljIiwKIH07CiAKIHN0YXRpYyBpbnQgbXBpY19pbml0X3N5cyh2b2lkKQogewotCXN0cnVjdCBtcGljICptcGljID0gbXBpY3M7Ci0JaW50IGVycm9yLCBpZCA9IDA7Ci0KLQllcnJvciA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmbXBpY19zeXNjbGFzcyk7Ci0KLQl3aGlsZSAobXBpYyAmJiAhZXJyb3IpIHsKLQkJbXBpYy0+c3lzZGV2LmNscyA9ICZtcGljX3N5c2NsYXNzOwotCQltcGljLT5zeXNkZXYuaWQgPSBpZCsrOwotCQllcnJvciA9IHN5c2Rldl9yZWdpc3RlcigmbXBpYy0+c3lzZGV2KTsKLQkJbXBpYyA9IG1waWMtPm5leHQ7Ci0JfQotCXJldHVybiBlcnJvcjsKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmbXBpY19zeXNjb3JlX29wcyk7CisJcmV0dXJuIDA7CiB9CiAKIGRldmljZV9pbml0Y2FsbChtcGljX2luaXRfc3lzKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tdjY0eDYwX3BpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tdjY0eDYwX3BpYy5jCmluZGV4IGU5YzYzM2MuLjE0ZDEzMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF9waWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L212NjR4NjBfcGljLmMKQEAgLTc4LDcgKzc4LDcgQEAKIAogc3RhdGljIHZvaWQgbXY2NHg2MF9tYXNrX2xvdyhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JaW50IGxldmVsMiA9IGlycV9tYXBbZC0+aXJxXS5od2lycSAmIE1WNjR4NjBfTEVWRUwyX01BU0s7CisJaW50IGxldmVsMiA9IGlycWRfdG9faHdpcnEoZCkgJiBNVjY0eDYwX0xFVkVMMl9NQVNLOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXY2NHg2MF9sb2NrLCBmbGFncyk7CkBAIC05MSw3ICs5MSw3IEBACiAKIHN0YXRpYyB2b2lkIG12NjR4NjBfdW5tYXNrX2xvdyhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JaW50IGxldmVsMiA9IGlycV9tYXBbZC0+aXJxXS5od2lycSAmIE1WNjR4NjBfTEVWRUwyX01BU0s7CisJaW50IGxldmVsMiA9IGlycWRfdG9faHdpcnEoZCkgJiBNVjY0eDYwX0xFVkVMMl9NQVNLOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXY2NHg2MF9sb2NrLCBmbGFncyk7CkBAIC0xMTUsNyArMTE1LDcgQEAKIAogc3RhdGljIHZvaWQgbXY2NHg2MF9tYXNrX2hpZ2goc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBsZXZlbDIgPSBpcnFfbWFwW2QtPmlycV0uaHdpcnEgJiBNVjY0eDYwX0xFVkVMMl9NQVNLOworCWludCBsZXZlbDIgPSBpcnFkX3RvX2h3aXJxKGQpICYgTVY2NHg2MF9MRVZFTDJfTUFTSzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm12NjR4NjBfbG9jaywgZmxhZ3MpOwpAQCAtMTI4LDcgKzEyOCw3IEBACiAKIHN0YXRpYyB2b2lkIG12NjR4NjBfdW5tYXNrX2hpZ2goc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBsZXZlbDIgPSBpcnFfbWFwW2QtPmlycV0uaHdpcnEgJiBNVjY0eDYwX0xFVkVMMl9NQVNLOworCWludCBsZXZlbDIgPSBpcnFkX3RvX2h3aXJxKGQpICYgTVY2NHg2MF9MRVZFTDJfTUFTSzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm12NjR4NjBfbG9jaywgZmxhZ3MpOwpAQCAtMTUyLDcgKzE1Miw3IEBACiAKIHN0YXRpYyB2b2lkIG12NjR4NjBfbWFza19ncHAoc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBsZXZlbDIgPSBpcnFfbWFwW2QtPmlycV0uaHdpcnEgJiBNVjY0eDYwX0xFVkVMMl9NQVNLOworCWludCBsZXZlbDIgPSBpcnFkX3RvX2h3aXJxKGQpICYgTVY2NHg2MF9MRVZFTDJfTUFTSzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm12NjR4NjBfbG9jaywgZmxhZ3MpOwpAQCAtMTY1LDcgKzE2NSw3IEBACiAKIHN0YXRpYyB2b2lkIG12NjR4NjBfbWFza19hY2tfZ3BwKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlpbnQgbGV2ZWwyID0gaXJxX21hcFtkLT5pcnFdLmh3aXJxICYgTVY2NHg2MF9MRVZFTDJfTUFTSzsKKwlpbnQgbGV2ZWwyID0gaXJxZF90b19od2lycShkKSAmIE1WNjR4NjBfTEVWRUwyX01BU0s7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtdjY0eDYwX2xvY2ssIGZsYWdzKTsKQEAgLTE4MCw3ICsxODAsNyBAQAogCiBzdGF0aWMgdm9pZCBtdjY0eDYwX3VubWFza19ncHAoc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBsZXZlbDIgPSBpcnFfbWFwW2QtPmlycV0uaHdpcnEgJiBNVjY0eDYwX0xFVkVMMl9NQVNLOworCWludCBsZXZlbDIgPSBpcnFkX3RvX2h3aXJxKGQpICYgTVY2NHg2MF9MRVZFTDJfTUFTSzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm12NjR4NjBfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWVfaWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2ljLmMKaW5kZXggODMyZDY5Mi4uYjJhY2RhMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWVfaWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZV9pYy5jCkBAIC0xOTcsMTIgKzE5NywxMCBAQAogCXJldHVybiBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIH0KIAotI2RlZmluZSB2aXJxX3RvX2h3KHZpcnEpCSgodW5zaWduZWQgaW50KWlycV9tYXBbdmlycV0uaHdpcnEpCi0KIHN0YXRpYyB2b2lkIHFlX2ljX3VubWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXN0cnVjdCBxZV9pYyAqcWVfaWMgPSBxZV9pY19mcm9tX2lycV9kYXRhKGQpOwotCXVuc2lnbmVkIGludCBzcmMgPSB2aXJxX3RvX2h3KGQtPmlycSk7CisJdW5zaWduZWQgaW50IHNyYyA9IGlycWRfdG9faHdpcnEoZCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgdGVtcDsKIApAQCAtMjE4LDcgKzIxNiw3IEBACiBzdGF0aWMgdm9pZCBxZV9pY19tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3RydWN0IHFlX2ljICpxZV9pYyA9IHFlX2ljX2Zyb21faXJxX2RhdGEoZCk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IHZpcnFfdG9faHcoZC0+aXJxKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gaXJxZF90b19od2lycShkKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB0ZW1wOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3Njb20uYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvc2NvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNTkzY2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3Njb20uYwpAQCAtMCwwICsxLDE5MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIEJlbmphbWluIEhlcnJlbnNjaG1pZHQsIElCTSBDb3JwCisgKiAgICAgICAgICAgICAgICA8YmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnPgorICogICAgIGFuZCAgICAgICAgRGF2aWQgR2lic29uLCBJQk0gQ29ycG9yYXRpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7ICB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlCisgKiAgIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07ICBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vc2NvbS5oPgorCitjb25zdCBzdHJ1Y3Qgc2NvbV9jb250cm9sbGVyICpzY29tX2NvbnRyb2xsZXI7CitFWFBPUlRfU1lNQk9MX0dQTChzY29tX2NvbnRyb2xsZXIpOworCitzdHJ1Y3QgZGV2aWNlX25vZGUgKnNjb21fZmluZF9wYXJlbnQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyLCAqdG1wOworCWNvbnN0IHUzMiAqcDsKKworCWZvciAocGFyID0gb2Zfbm9kZV9nZXQobm9kZSk7IHBhcjspIHsKKwkJaWYgKG9mX2dldF9wcm9wZXJ0eShwYXIsICJzY29tLWNvbnRyb2xsZXIiLCBOVUxMKSkKKwkJCWJyZWFrOworCQlwID0gb2ZfZ2V0X3Byb3BlcnR5KHBhciwgInNjb20tcGFyZW50IiwgTlVMTCk7CisJCXRtcCA9IHBhcjsKKwkJaWYgKHAgPT0gTlVMTCkKKwkJCXBhciA9IG9mX2dldF9wYXJlbnQocGFyKTsKKwkJZWxzZQorCQkJcGFyID0gb2ZfZmluZF9ub2RlX2J5X3BoYW5kbGUoKnApOworCQlvZl9ub2RlX3B1dCh0bXApOworCX0KKwlyZXR1cm4gcGFyOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2NvbV9maW5kX3BhcmVudCk7CisKK3Njb21fbWFwX3Qgc2NvbV9tYXBfZGV2aWNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LCBpbnQgaW5kZXgpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQ7CisJdW5zaWduZWQgaW50IGNlbGxzLCBzaXplOworCWNvbnN0IHUzMiAqcHJvcDsKKwl1NjQgcmVnLCBjbnQ7CisJc2NvbV9tYXBfdCByZXQ7CisKKwlwYXJlbnQgPSBzY29tX2ZpbmRfcGFyZW50KGRldik7CisKKwlpZiAocGFyZW50ID09IE5VTEwpCisJCXJldHVybiAwOworCisJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShwYXJlbnQsICIjc2NvbS1jZWxscyIsIE5VTEwpOworCWNlbGxzID0gcHJvcCA/ICpwcm9wIDogMTsKKworCXByb3AgPSBvZl9nZXRfcHJvcGVydHkoZGV2LCAic2NvbS1yZWciLCAmc2l6ZSk7CisJaWYgKCFwcm9wKQorCQlyZXR1cm4gMDsKKwlzaXplID4+PSAyOworCisJaWYgKGluZGV4ID49IChzaXplIC8gKDIqY2VsbHMpKSkKKwkJcmV0dXJuIDA7CisKKwlyZWcgPSBvZl9yZWFkX251bWJlcigmcHJvcFtpbmRleCAqIGNlbGxzICogMl0sIGNlbGxzKTsKKwljbnQgPSBvZl9yZWFkX251bWJlcigmcHJvcFtpbmRleCAqIGNlbGxzICogMiArIGNlbGxzXSwgY2VsbHMpOworCisJcmV0ID0gc2NvbV9tYXAocGFyZW50LCByZWcsIGNudCk7CisJb2Zfbm9kZV9wdXQocGFyZW50KTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzY29tX21hcF9kZXZpY2UpOworCisjaWZkZWYgQ09ORklHX1NDT01fREVCVUdGUworc3RydWN0IHNjb21fZGVidWdfZW50cnkgeworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXNjb21fbWFwX3QgbWFwOworCXNwaW5sb2NrX3QgbG9jazsKKwljaGFyIG5hbWVbOF07CisJc3RydWN0IGRlYnVnZnNfYmxvYl93cmFwcGVyIGJsb2I7Cit9OworCitzdGF0aWMgaW50IHNjb21fYWRkcl9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKK3sKKwlzdHJ1Y3Qgc2NvbV9kZWJ1Z19lbnRyeSAqZW50ID0gZGF0YTsKKworCWVudC0+YWRkciA9IDA7CisJc2NvbV91bm1hcChlbnQtPm1hcCk7CisKKwllbnQtPm1hcCA9IHNjb21fbWFwKGVudC0+ZG4sIHZhbCwgMSk7CisJaWYgKHNjb21fbWFwX29rKGVudC0+bWFwKSkKKwkJZW50LT5hZGRyID0gdmFsOworCWVsc2UKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzY29tX2FkZHJfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQoreworCXN0cnVjdCBzY29tX2RlYnVnX2VudHJ5ICplbnQgPSBkYXRhOworCSp2YWwgPSBlbnQtPmFkZHI7CisJcmV0dXJuIDA7Cit9CitERUZJTkVfU0lNUExFX0FUVFJJQlVURShzY29tX2FkZHJfZm9wcywgc2NvbV9hZGRyX2dldCwgc2NvbV9hZGRyX3NldCwKKwkJCSIweCVsbHhcbiIpOworCitzdGF0aWMgaW50IHNjb21fdmFsX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKQoreworCXN0cnVjdCBzY29tX2RlYnVnX2VudHJ5ICplbnQgPSBkYXRhOworCisJaWYgKCFzY29tX21hcF9vayhlbnQtPm1hcCkpCisJCXJldHVybiAtRUZBVUxUOworCisJc2NvbV93cml0ZShlbnQtPm1hcCwgMCwgdmFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNjb21fdmFsX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2NvbV9kZWJ1Z19lbnRyeSAqZW50ID0gZGF0YTsKKworCWlmICghc2NvbV9tYXBfb2soZW50LT5tYXApKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCSp2YWwgPSBzY29tX3JlYWQoZW50LT5tYXAsIDApOworCXJldHVybiAwOworfQorREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUoc2NvbV92YWxfZm9wcywgc2NvbV92YWxfZ2V0LCBzY29tX3ZhbF9zZXQsCisJCQkiMHglbGx4XG4iKTsKKworc3RhdGljIGludCBzY29tX2RlYnVnX2luaXRfb25lKHN0cnVjdCBkZW50cnkgKnJvb3QsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sCisJCQkgICAgICAgaW50IGkpCit7CisJc3RydWN0IHNjb21fZGVidWdfZW50cnkgKmVudDsKKwlzdHJ1Y3QgZGVudHJ5ICpkaXI7CisKKwllbnQgPSBremFsbG9jKHNpemVvZigqZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlbnQpCisJCXJldHVybiAtRU5PTUVNOworCisJZW50LT5kbiA9IG9mX25vZGVfZ2V0KGRuKTsKKwllbnQtPm1hcCA9IFNDT01fTUFQX0lOVkFMSUQ7CisJc3Bpbl9sb2NrX2luaXQoJmVudC0+bG9jayk7CisJc25wcmludGYoZW50LT5uYW1lLCA4LCAic2NvbSVkIiwgaSk7CisJZW50LT5ibG9iLmRhdGEgPSBkbi0+ZnVsbF9uYW1lOworCWVudC0+YmxvYi5zaXplID0gc3RybGVuKGRuLT5mdWxsX25hbWUpOworCisJZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKGVudC0+bmFtZSwgcm9vdCk7CisJaWYgKCFkaXIpIHsKKwkJb2Zfbm9kZV9wdXQoZG4pOworCQlrZnJlZShlbnQpOworCQlyZXR1cm4gLTE7CisJfQorCisJZGVidWdmc19jcmVhdGVfZmlsZSgiYWRkciIsIDA2MDAsIGRpciwgZW50LCAmc2NvbV9hZGRyX2ZvcHMpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInZhbHVlIiwgMDYwMCwgZGlyLCBlbnQsICZzY29tX3ZhbF9mb3BzKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9ibG9iKCJwYXRoIiwgMDQwMCwgZGlyLCAmZW50LT5ibG9iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNjb21fZGVidWdfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47CisJc3RydWN0IGRlbnRyeSAqcm9vdDsKKwlpbnQgaSwgcmM7CisKKwlyb290ID0gZGVidWdmc19jcmVhdGVfZGlyKCJzY29tIiwgcG93ZXJwY19kZWJ1Z2ZzX3Jvb3QpOworCWlmICghcm9vdCkKKwkJcmV0dXJuIC0xOworCisJaSA9IHJjID0gMDsKKwlmb3JfZWFjaF9ub2RlX3dpdGhfcHJvcGVydHkoZG4sICJzY29tLWNvbnRyb2xsZXIiKQorCQlyYyB8PSBzY29tX2RlYnVnX2luaXRfb25lKHJvb3QsIGRuLCBpKyspOworCisJcmV0dXJuIHJjOworfQorZGV2aWNlX2luaXRjYWxsKHNjb21fZGVidWdfaW5pdCk7CisjZW5kaWYgLyogQ09ORklHX1NDT01fREVCVUdGUyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi91aWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvdWljLmMKaW5kZXggNWQ5MTM4NS4uOTg0Y2QyMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi91aWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3VpYy5jCkBAIC00MSw4ICs0MSw2IEBACiAjZGVmaW5lIFVJQ19WUgkJMHg3CiAjZGVmaW5lIFVJQ19WQ1IJCTB4OAogCi0jZGVmaW5lIHVpY19pcnFfdG9faHcodmlycSkJKGlycV9tYXBbdmlycV0uaHdpcnEpCi0KIHN0cnVjdCB1aWMgKnByaW1hcnlfdWljOwogCiBzdHJ1Y3QgdWljIHsKQEAgLTU4LDcgKzU2LDcgQEAKIHN0YXRpYyB2b2lkIHVpY191bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlzdHJ1Y3QgdWljICp1aWMgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKLQl1bnNpZ25lZCBpbnQgc3JjID0gdWljX2lycV90b19odyhkLT5pcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSBpcnFkX3RvX2h3aXJxKGQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIGVyLCBzcjsKIApAQCAtNzYsNyArNzQsNyBAQAogc3RhdGljIHZvaWQgdWljX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlzdHJ1Y3QgdWljICp1aWMgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKLQl1bnNpZ25lZCBpbnQgc3JjID0gdWljX2lycV90b19odyhkLT5pcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSBpcnFkX3RvX2h3aXJxKGQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIGVyOwogCkBAIC05MCw3ICs4OCw3IEBACiBzdGF0aWMgdm9pZCB1aWNfYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3RydWN0IHVpYyAqdWljID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IHVpY19pcnFfdG9faHcoZC0+aXJxKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gaXJxZF90b19od2lycShkKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnVpYy0+bG9jaywgZmxhZ3MpOwpAQCAtMTAxLDcgKzk5LDcgQEAKIHN0YXRpYyB2b2lkIHVpY19tYXNrX2Fja19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXN0cnVjdCB1aWMgKnVpYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwotCXVuc2lnbmVkIGludCBzcmMgPSB1aWNfaXJxX3RvX2h3KGQtPmlycSk7CisJdW5zaWduZWQgaW50IHNyYyA9IGlycWRfdG9faHdpcnEoZCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgZXIsIHNyOwogCkBAIC0xMjYsNyArMTI0LDcgQEAKIHN0YXRpYyBpbnQgdWljX3NldF9pcnFfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpCiB7CiAJc3RydWN0IHVpYyAqdWljID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IHVpY19pcnFfdG9faHcoZC0+aXJxKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gaXJxZF90b19od2lycShkKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCB0cmlnZ2VyLCBwb2xhcml0eTsKIAl1MzIgdHIsIHByLCBtYXNrOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWNzL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3hpY3MvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDMxZWRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWNzL0tjb25maWcKQEAgLTAsMCArMSwxMyBAQAorY29uZmlnIFBQQ19YSUNTCisgICAgICAgZGVmX2Jvb2wgbgorICAgICAgIHNlbGVjdCBQUENfU01QX01VWEVEX0lQSQorCitjb25maWcgUFBDX0lDUF9OQVRJVkUKKyAgICAgICBkZWZfYm9vbCBuCisKK2NvbmZpZyBQUENfSUNQX0hWCisgICAgICAgZGVmX2Jvb2wgbgorCitjb25maWcgUFBDX0lDU19SVEFTCisgICAgICAgZGVmX2Jvb2wgbgorCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3hpY3MvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3hpY3MvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc1YTYwNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYveGljcy9NYWtlZmlsZQpAQCAtMCwwICsxLDYgQEAKK3N1YmRpci1jY2ZsYWdzLSQoQ09ORklHX1BQQ19XRVJST1IpIDo9IC1XZXJyb3IKKworb2JqLXkJCQkJKz0geGljcy1jb21tb24ubworb2JqLSQoQ09ORklHX1BQQ19JQ1BfTkFUSVZFKQkrPSBpY3AtbmF0aXZlLm8KK29iai0kKENPTkZJR19QUENfSUNQX0hWKQkrPSBpY3AtaHYubworb2JqLSQoQ09ORklHX1BQQ19JQ1NfUlRBUykJKz0gaWNzLXJ0YXMubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWNzL2ljcC1odi5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWNzL2ljcC1odi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MThkMzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3hpY3MvaWNwLWh2LmMKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMSBJQk0gQ29ycG9yYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKworI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL3hpY3MuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaHZjYWxsLmg+CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGljcF9odl9nZXRfeGlycih1bnNpZ25lZCBjaGFyIGNwcHIpCit7CisJdW5zaWduZWQgbG9uZyByZXRidWZbUExQQVJfSENBTExfQlVGU0laRV07CisJbG9uZyByYzsKKworCXJjID0gcGxwYXJfaGNhbGwoSF9YSVJSLCByZXRidWYsIGNwcHIpOworCWlmIChyYyAhPSBIX1NVQ0NFU1MpCisJCXBhbmljKCIgYmFkIHJldHVybiBjb2RlIHhpcnIgLSByYyA9ICVseFxuIiwgcmMpOworCXJldHVybiAodW5zaWduZWQgaW50KXJldGJ1ZlswXTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGljcF9odl9zZXRfeGlycih1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJbG9uZyByYyA9IHBscGFyX2hjYWxsX25vcmV0cyhIX0VPSSwgdmFsdWUpOworCWlmIChyYyAhPSBIX1NVQ0NFU1MpCisJCXBhbmljKCJiYWQgcmV0dXJuIGNvZGUgRU9JIC0gcmMgPSAlbGQsIHZhbHVlPSV4XG4iLCByYywgdmFsdWUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaWNwX2h2X3NldF9jcHByKHU4IHZhbHVlKQoreworCWxvbmcgcmMgPSBwbHBhcl9oY2FsbF9ub3JldHMoSF9DUFBSLCB2YWx1ZSk7CisJaWYgKHJjICE9IEhfU1VDQ0VTUykKKwkJcGFuaWMoImJhZCByZXR1cm4gY29kZSBjcHByIC0gcmMgPSAlbHhcbiIsIHJjKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGljcF9odl9zZXRfcWlycihpbnQgbl9jcHUgLCB1OCB2YWx1ZSkKK3sKKwlsb25nIHJjID0gcGxwYXJfaGNhbGxfbm9yZXRzKEhfSVBJLCBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKG5fY3B1KSwKKwkJCQkgICAgIHZhbHVlKTsKKwlpZiAocmMgIT0gSF9TVUNDRVNTKQorCQlwYW5pYygiYmFkIHJldHVybiBjb2RlIHFpcnIgLSByYyA9ICVseFxuIiwgcmMpOworfQorCitzdGF0aWMgdm9pZCBpY3BfaHZfZW9pKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwl1bnNpZ25lZCBpbnQgaHdfaXJxID0gKHVuc2lnbmVkIGludClpcnFkX3RvX2h3aXJxKGQpOworCisJaW9zeW5jKCk7CisJaWNwX2h2X3NldF94aXJyKCh4aWNzX3BvcF9jcHByKCkgPDwgMjQpIHwgaHdfaXJxKTsKK30KKworc3RhdGljIHZvaWQgaWNwX2h2X3RlYXJkb3duX2NwdSh2b2lkKQoreworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwkvKiBDbGVhciBhbnkgcGVuZGluZyBJUEkgKi8KKwlpY3BfaHZfc2V0X3FpcnIoY3B1LCAweGZmKTsKK30KKworc3RhdGljIHZvaWQgaWNwX2h2X2ZsdXNoX2lwaSh2b2lkKQoreworCS8qIFdlIHRha2UgdGhlIGlwaSBpcnEgYnV0IGFuZCBuZXZlciByZXR1cm4gc28gd2UKKwkgKiBuZWVkIHRvIEVPSSB0aGUgSVBJLCBidXQgd2FudCB0byBsZWF2ZSBvdXIgcHJpb3JpdHkgMAorCSAqCisJICogc2hvdWxkIHdlIGNoZWNrIGFsbCB0aGUgb3RoZXIgaW50ZXJydXB0cyB0b28/CisJICogc2hvdWxkIHdlIGJlIGZsYWdnaW5nIGlkbGUgbG9vcCBpbnN0ZWFkPworCSAqIG9yIGNyZWF0aW5nIHNvbWUgdGFzayB0byBiZSBzY2hlZHVsZWQ/CisJICovCisKKwlpY3BfaHZfc2V0X3hpcnIoKDB4MDAgPDwgMjQpIHwgWElDU19JUEkpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGljcF9odl9nZXRfaXJxKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHhpcnIgPSBpY3BfaHZfZ2V0X3hpcnIoeGljc19jcHByX3RvcCgpKTsKKwl1bnNpZ25lZCBpbnQgdmVjID0geGlyciAmIDB4MDBmZmZmZmY7CisJdW5zaWduZWQgaW50IGlycTsKKworCWlmICh2ZWMgPT0gWElDU19JUlFfU1BVUklPVVMpCisJCXJldHVybiBOT19JUlE7CisKKwlpcnEgPSBpcnFfcmFkaXhfcmV2bWFwX2xvb2t1cCh4aWNzX2hvc3QsIHZlYyk7CisJaWYgKGxpa2VseShpcnEgIT0gTk9fSVJRKSkgeworCQl4aWNzX3B1c2hfY3Bwcih2ZWMpOworCQlyZXR1cm4gaXJxOworCX0KKworCS8qIFdlIGRvbid0IGhhdmUgYSBsaW51eCBtYXBwaW5nLCBzbyBoYXZlIHJ0YXMgbWFzayBpdC4gKi8KKwl4aWNzX21hc2tfdW5rbm93bl92ZWModmVjKTsKKworCS8qIFdlIG1pZ2h0IGxlYXJuIGFib3V0IGl0IGxhdGVyLCBzbyBFT0kgaXQgKi8KKwlpY3BfaHZfc2V0X3hpcnIoeGlycik7CisKKwlyZXR1cm4gTk9fSVJROworfQorCitzdGF0aWMgdm9pZCBpY3BfaHZfc2V0X2NwdV9wcmlvcml0eSh1bnNpZ25lZCBjaGFyIGNwcHIpCit7CisJeGljc19zZXRfYmFzZV9jcHByKGNwcHIpOworCWljcF9odl9zZXRfY3BwcihjcHByKTsKKwlpb3N5bmMoKTsKK30KKworI2lmZGVmIENPTkZJR19TTVAKKworc3RhdGljIHZvaWQgaWNwX2h2X2NhdXNlX2lwaShpbnQgY3B1LCB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJaWNwX2h2X3NldF9xaXJyKGNwdSwgSVBJX1BSSU9SSVRZKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGljcF9odl9pcGlfYWN0aW9uKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWNwX2h2X3NldF9xaXJyKGNwdSwgMHhmZik7CisKKwlyZXR1cm4gc21wX2lwaV9kZW11eCgpOworfQorCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGljcF9vcHMgaWNwX2h2X29wcyA9IHsKKwkuZ2V0X2lycQk9IGljcF9odl9nZXRfaXJxLAorCS5lb2kJCT0gaWNwX2h2X2VvaSwKKwkuc2V0X3ByaW9yaXR5CT0gaWNwX2h2X3NldF9jcHVfcHJpb3JpdHksCisJLnRlYXJkb3duX2NwdQk9IGljcF9odl90ZWFyZG93bl9jcHUsCisJLmZsdXNoX2lwaQk9IGljcF9odl9mbHVzaF9pcGksCisjaWZkZWYgQ09ORklHX1NNUAorCS5pcGlfYWN0aW9uCT0gaWNwX2h2X2lwaV9hY3Rpb24sCisJLmNhdXNlX2lwaQk9IGljcF9odl9jYXVzZV9pcGksCisjZW5kaWYKK307CisKK2ludCBpY3BfaHZfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisKKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJpYm0scHBjLXhpY3AiKTsKKwlpZiAoIW5wKQorCQlucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsCisJCQkJICAgICJQb3dlclBDLUV4dGVybmFsLUludGVycnVwdC1QcmVzZW50YXRpb24iKTsKKwlpZiAoIW5wKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWljcF9vcHMgPSAmaWNwX2h2X29wczsKKworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3hpY3MvaWNwLW5hdGl2ZS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWNzL2ljcC1uYXRpdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjE1YWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWNzL2ljcC1uYXRpdmUuYwpAQCAtMCwwICsxLDI5MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDExIElCTSBDb3Jwb3JhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKyNpbmNsdWRlIDxhc20veGljcy5oPgorCitzdHJ1Y3QgaWNwX2lwbCB7CisJdW5pb24geworCQl1MzIgd29yZDsKKwkJdTggYnl0ZXNbNF07CisJfSB4aXJyX3BvbGw7CisJdW5pb24geworCQl1MzIgd29yZDsKKwkJdTggYnl0ZXNbNF07CisJfSB4aXJyOworCXUzMiBkdW1teTsKKwl1bmlvbiB7CisJCXUzMiB3b3JkOworCQl1OCBieXRlc1s0XTsKKwl9IHFpcnI7CisJdTMyIGxpbmtfYTsKKwl1MzIgbGlua19iOworCXUzMiBsaW5rX2M7Cit9OworCitzdGF0aWMgc3RydWN0IGljcF9pcGwgX19pb21lbSAqaWNwX25hdGl2ZV9yZWdzW05SX0NQVVNdOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpY3BfbmF0aXZlX2dldF94aXJyKHZvaWQpCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCXJldHVybiBpbl9iZTMyKCZpY3BfbmF0aXZlX3JlZ3NbY3B1XS0+eGlyci53b3JkKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGljcF9uYXRpdmVfc2V0X3hpcnIodW5zaWduZWQgaW50IHZhbHVlKQoreworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlvdXRfYmUzMigmaWNwX25hdGl2ZV9yZWdzW2NwdV0tPnhpcnIud29yZCwgdmFsdWUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaWNwX25hdGl2ZV9zZXRfY3Bwcih1OCB2YWx1ZSkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJb3V0XzgoJmljcF9uYXRpdmVfcmVnc1tjcHVdLT54aXJyLmJ5dGVzWzBdLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpY3BfbmF0aXZlX3NldF9xaXJyKGludCBuX2NwdSwgdTggdmFsdWUpCit7CisJb3V0XzgoJmljcF9uYXRpdmVfcmVnc1tuX2NwdV0tPnFpcnIuYnl0ZXNbMF0sIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgaWNwX25hdGl2ZV9zZXRfY3B1X3ByaW9yaXR5KHVuc2lnbmVkIGNoYXIgY3BwcikKK3sKKwl4aWNzX3NldF9iYXNlX2NwcHIoY3Bwcik7CisJaWNwX25hdGl2ZV9zZXRfY3BwcihjcHByKTsKKwlpb3N5bmMoKTsKK30KKworc3RhdGljIHZvaWQgaWNwX25hdGl2ZV9lb2koc3RydWN0IGlycV9kYXRhICpkKQoreworCXVuc2lnbmVkIGludCBod19pcnEgPSAodW5zaWduZWQgaW50KWlycWRfdG9faHdpcnEoZCk7CisKKwlpb3N5bmMoKTsKKwlpY3BfbmF0aXZlX3NldF94aXJyKCh4aWNzX3BvcF9jcHByKCkgPDwgMjQpIHwgaHdfaXJxKTsKK30KKworc3RhdGljIHZvaWQgaWNwX25hdGl2ZV90ZWFyZG93bl9jcHUodm9pZCkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJLyogQ2xlYXIgYW55IHBlbmRpbmcgSVBJICovCisJaWNwX25hdGl2ZV9zZXRfcWlycihjcHUsIDB4ZmYpOworfQorCitzdGF0aWMgdm9pZCBpY3BfbmF0aXZlX2ZsdXNoX2lwaSh2b2lkKQoreworCS8qIFdlIHRha2UgdGhlIGlwaSBpcnEgYnV0IGFuZCBuZXZlciByZXR1cm4gc28gd2UKKwkgKiBuZWVkIHRvIEVPSSB0aGUgSVBJLCBidXQgd2FudCB0byBsZWF2ZSBvdXIgcHJpb3JpdHkgMAorCSAqCisJICogc2hvdWxkIHdlIGNoZWNrIGFsbCB0aGUgb3RoZXIgaW50ZXJydXB0cyB0b28/CisJICogc2hvdWxkIHdlIGJlIGZsYWdnaW5nIGlkbGUgbG9vcCBpbnN0ZWFkPworCSAqIG9yIGNyZWF0aW5nIHNvbWUgdGFzayB0byBiZSBzY2hlZHVsZWQ/CisJICovCisKKwlpY3BfbmF0aXZlX3NldF94aXJyKCgweDAwIDw8IDI0KSB8IFhJQ1NfSVBJKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBpY3BfbmF0aXZlX2dldF9pcnEodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgeGlyciA9IGljcF9uYXRpdmVfZ2V0X3hpcnIoKTsKKwl1bnNpZ25lZCBpbnQgdmVjID0geGlyciAmIDB4MDBmZmZmZmY7CisJdW5zaWduZWQgaW50IGlycTsKKworCWlmICh2ZWMgPT0gWElDU19JUlFfU1BVUklPVVMpCisJCXJldHVybiBOT19JUlE7CisKKwlpcnEgPSBpcnFfcmFkaXhfcmV2bWFwX2xvb2t1cCh4aWNzX2hvc3QsIHZlYyk7CisJaWYgKGxpa2VseShpcnEgIT0gTk9fSVJRKSkgeworCQl4aWNzX3B1c2hfY3Bwcih2ZWMpOworCQlyZXR1cm4gaXJxOworCX0KKworCS8qIFdlIGRvbid0IGhhdmUgYSBsaW51eCBtYXBwaW5nLCBzbyBoYXZlIHJ0YXMgbWFzayBpdC4gKi8KKwl4aWNzX21hc2tfdW5rbm93bl92ZWModmVjKTsKKworCS8qIFdlIG1pZ2h0IGxlYXJuIGFib3V0IGl0IGxhdGVyLCBzbyBFT0kgaXQgKi8KKwlpY3BfbmF0aXZlX3NldF94aXJyKHhpcnIpOworCisJcmV0dXJuIE5PX0lSUTsKK30KKworI2lmZGVmIENPTkZJR19TTVAKKworc3RhdGljIHZvaWQgaWNwX25hdGl2ZV9jYXVzZV9pcGkoaW50IGNwdSwgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCWljcF9uYXRpdmVfc2V0X3FpcnIoY3B1LCBJUElfUFJJT1JJVFkpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaWNwX25hdGl2ZV9pcGlfYWN0aW9uKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWNwX25hdGl2ZV9zZXRfcWlycihjcHUsIDB4ZmYpOworCisJcmV0dXJuIHNtcF9pcGlfZGVtdXgoKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworc3RhdGljIGludCBfX2luaXQgaWNwX25hdGl2ZV9tYXBfb25lX2NwdShpbnQgaHdfaWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwljaGFyICpybmFtZTsKKwlpbnQgaSwgY3B1ID0gLTE7CisKKwkvKiBUaGlzIG1heSBsb29rIGdyb3NzIGJ1dCBpdCdzIGdvb2QgZW5vdWdoIGZvciBub3csIHdlIGRvbid0IHF1aXRlCisJICogaGF2ZSBhIGhhcmQgLT4gbGludXggcHJvY2Vzc29yIGlkIG1hdGNoaW5nLgorCSAqLworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CisJCWlmICghY3B1X3ByZXNlbnQoaSkpCisJCQljb250aW51ZTsKKwkJaWYgKGh3X2lkID09IGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoaSkpIHsKKwkJCWNwdSA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIEZhaWwsIHNraXAgdGhhdCBDUFUuIERvbid0IHByaW50LCBpdCdzIG5vcm1hbCwgc29tZSBYSUNTIGNvbWUgdXAKKwkgKiB3aXRoIHdheSBtb3JlIGVudHJpZXMgaW4gdGhlcmUgdGhhbiB5b3UgaGF2ZSBDUFVzCisJICovCisJaWYgKGNwdSA9PSAtMSkKKwkJcmV0dXJuIDA7CisKKwlybmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiQ1BVICVkIFsweCV4XSBJbnRlcnJ1cHQgUHJlc2VudGF0aW9uIiwKKwkJCSAgY3B1LCBod19pZCk7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihhZGRyLCBzaXplLCBybmFtZSkpIHsKKwkJcHJfd2FybmluZygiaWNwX25hdGl2ZTogQ291bGQgbm90IHJlc2VydmUgSUNQIE1NSU8iCisJCQkgICAiIGZvciBDUFUgJWQsIGludGVycnVwdCBzZXJ2ZXIgIzB4JXhcbiIsCisJCQkgICBjcHUsIGh3X2lkKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpY3BfbmF0aXZlX3JlZ3NbY3B1XSA9IGlvcmVtYXAoYWRkciwgc2l6ZSk7CisJaWYgKCFpY3BfbmF0aXZlX3JlZ3NbY3B1XSkgeworCQlwcl93YXJuaW5nKCJpY3BfbmF0aXZlOiBGYWlsZWQgaW9yZW1hcCBmb3IgQ1BVICVkLCAiCisJCQkgICAiaW50ZXJydXB0IHNlcnZlciAjMHgleCwgYWRkciAlI2x4XG4iLAorCQkJICAgY3B1LCBod19pZCwgYWRkcik7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihhZGRyLCBzaXplKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBpY3BfbmF0aXZlX2luaXRfb25lX25vZGUoc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCQkJICAgdW5zaWduZWQgaW50ICppbmR4KQoreworCXVuc2lnbmVkIGludCBpbGVuOworCWNvbnN0IHUzMiAqaXJlZzsKKwlpbnQgaTsKKwlpbnQgcmVnX3R1cGxlX3NpemU7CisJaW50IG51bV9zZXJ2ZXJzID0gMDsKKworCS8qIFRoaXMgY29kZSBkb2VzIHRoZSB0aGVvcmljYWxseSBicm9rZW4gYXNzdW1wdGlvbiB0aGF0IHRoZSBpbnRlcnJ1cHQKKwkgKiBzZXJ2ZXIgbnVtYmVycyBhcmUgdGhlIHNhbWUgYXMgdGhlIGhhcmQgQ1BVIG51bWJlcnMuCisJICogVGhpcyBoYXBwZW5zIHRvIGJlIHRoZSBjYXNlIHNvIGZhciBidXQgd2UgYXJlIHBsYXlpbmcgd2l0aCBmaXJlLi4uCisJICogc2hvdWxkIGJlIGZpeGVkIG9uZSBvZiB0aGVzZSBkYXlzLiAtQmVuSC4KKwkgKi8KKwlpcmVnID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiaWJtLGludGVycnVwdC1zZXJ2ZXItcmFuZ2VzIiwgJmlsZW4pOworCisJLyogRG8gdGhhdCBldmVyIGhhcHBlbiA/IHdlJ2xsIGtub3cgc29vbiBlbm91Z2guLi4gYnV0IGV2ZW4gZ29vZCdvbGQKKwkgKiBmODAgZG9lcyBoYXZlIHRoYXQgcHJvcGVydHkgLi4KKwkgKi8KKwlXQVJOX09OKChpcmVnID09IE5VTEwpIHx8IChpbGVuICE9IDIqc2l6ZW9mKHUzMikpKTsKKworCWlmIChpcmVnKSB7CisJCSppbmR4ID0gb2ZfcmVhZF9udW1iZXIoaXJlZywgMSk7CisJCWlmIChpbGVuID49IDIqc2l6ZW9mKHUzMikpCisJCQludW1fc2VydmVycyA9IG9mX3JlYWRfbnVtYmVyKGlyZWcgKyAxLCAxKTsKKwl9CisKKwlpcmVnID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgJmlsZW4pOworCWlmICghaXJlZykgeworCQlwcl9lcnIoImljcF9uYXRpdmU6IENhbid0IGZpbmQgaW50ZXJydXB0IHJlZyBwcm9wZXJ0eSIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmVnX3R1cGxlX3NpemUgPSAob2Zfbl9hZGRyX2NlbGxzKG5wKSArIG9mX25fc2l6ZV9jZWxscyhucCkpICogNDsKKwlpZiAoKChpbGVuICUgcmVnX3R1cGxlX3NpemUpICE9IDApCisJICAgIHx8IChudW1fc2VydmVycyAmJiAobnVtX3NlcnZlcnMgIT0gKGlsZW4gLyByZWdfdHVwbGVfc2l6ZSkpKSkgeworCQlwcl9lcnIoImljcF9uYXRpdmU6IElDUCByZWcgbGVuICglZCkgIT0gbnVtIHNlcnZlcnMgKCVkKSIsCisJCSAgICAgICBpbGVuIC8gcmVnX3R1cGxlX3NpemUsIG51bV9zZXJ2ZXJzKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWZvciAoaSA9IDA7IGkgPCAoaWxlbiAvIHJlZ190dXBsZV9zaXplKTsgaSsrKSB7CisJCXN0cnVjdCByZXNvdXJjZSByOworCQlpbnQgZXJyOworCisJCWVyciA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIGksICZyKTsKKwkJaWYgKGVycikgeworCQkJcHJfZXJyKCJpY3BfbmF0aXZlOiBDb3VsZCBub3QgdHJhbnNsYXRlIElDUCBNTUlPIgorCQkJICAgICAgICIgZm9yIGludGVycnVwdCBzZXJ2ZXIgMHgleCAoJWQpXG4iLCAqaW5keCwgZXJyKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChpY3BfbmF0aXZlX21hcF9vbmVfY3B1KCppbmR4LCByLnN0YXJ0LCByLmVuZCAtIHIuc3RhcnQpKQorCQkJcmV0dXJuIC0xOworCisJCSgqaW5keCkrKzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWNwX29wcyBpY3BfbmF0aXZlX29wcyA9IHsKKwkuZ2V0X2lycQk9IGljcF9uYXRpdmVfZ2V0X2lycSwKKwkuZW9pCQk9IGljcF9uYXRpdmVfZW9pLAorCS5zZXRfcHJpb3JpdHkJPSBpY3BfbmF0aXZlX3NldF9jcHVfcHJpb3JpdHksCisJLnRlYXJkb3duX2NwdQk9IGljcF9uYXRpdmVfdGVhcmRvd25fY3B1LAorCS5mbHVzaF9pcGkJPSBpY3BfbmF0aXZlX2ZsdXNoX2lwaSwKKyNpZmRlZiBDT05GSUdfU01QCisJLmlwaV9hY3Rpb24JPSBpY3BfbmF0aXZlX2lwaV9hY3Rpb24sCisJLmNhdXNlX2lwaQk9IGljcF9uYXRpdmVfY2F1c2VfaXBpLAorI2VuZGlmCit9OworCitpbnQgaWNwX25hdGl2ZV9pbml0KHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwl1MzIgaW5keCA9IDA7CisJaW50IGZvdW5kID0gMDsKKworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgTlVMTCwgImlibSxwcGMteGljcCIpCisJCWlmIChpY3BfbmF0aXZlX2luaXRfb25lX25vZGUobnAsICZpbmR4KSA9PSAwKQorCQkJZm91bmQgPSAxOworCWlmICghZm91bmQpIHsKKwkJZm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLAorCQkJIlBvd2VyUEMtRXh0ZXJuYWwtSW50ZXJydXB0LVByZXNlbnRhdGlvbiIpIHsKKwkJCQlpZiAoaWNwX25hdGl2ZV9pbml0X29uZV9ub2RlKG5wLCAmaW5keCkgPT0gMCkKKwkJCQkJZm91bmQgPSAxOworCQl9CisJfQorCisJaWYgKGZvdW5kID09IDApCisJCXJldHVybiAtRU5PREVWOworCisJaWNwX29wcyA9ICZpY3BfbmF0aXZlX29wczsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWNzL2ljcy1ydGFzLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3hpY3MvaWNzLXJ0YXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzgyZjg1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWNzL2ljcy1ydGFzLmMKQEAgLTAsMCArMSwyNDAgQEAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbXNpLmg+CisKKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKyNpbmNsdWRlIDxhc20veGljcy5oPgorI2luY2x1ZGUgPGFzbS9ydGFzLmg+CisKKy8qIFJUQVMgc2VydmljZSB0b2tlbnMgKi8KK3N0YXRpYyBpbnQgaWJtX2dldF94aXZlOworc3RhdGljIGludCBpYm1fc2V0X3hpdmU7CitzdGF0aWMgaW50IGlibV9pbnRfb247CitzdGF0aWMgaW50IGlibV9pbnRfb2ZmOworCitzdGF0aWMgaW50IGljc19ydGFzX21hcChzdHJ1Y3QgaWNzICppY3MsIHVuc2lnbmVkIGludCB2aXJxKTsKK3N0YXRpYyB2b2lkIGljc19ydGFzX21hc2tfdW5rbm93bihzdHJ1Y3QgaWNzICppY3MsIHVuc2lnbmVkIGxvbmcgdmVjKTsKK3N0YXRpYyBsb25nIGljc19ydGFzX2dldF9zZXJ2ZXIoc3RydWN0IGljcyAqaWNzLCB1bnNpZ25lZCBsb25nIHZlYyk7CitzdGF0aWMgaW50IGljc19ydGFzX2hvc3RfbWF0Y2goc3RydWN0IGljcyAqaWNzLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpOworCisvKiBPbmx5IG9uZSBnbG9iYWwgJiBzdGF0ZSBzdHJ1Y3QgaWNzICovCitzdGF0aWMgc3RydWN0IGljcyBpY3NfcnRhcyA9IHsKKwkubWFwCQk9IGljc19ydGFzX21hcCwKKwkubWFza191bmtub3duCT0gaWNzX3J0YXNfbWFza191bmtub3duLAorCS5nZXRfc2VydmVyCT0gaWNzX3J0YXNfZ2V0X3NlcnZlciwKKwkuaG9zdF9tYXRjaAk9IGljc19ydGFzX2hvc3RfbWF0Y2gsCit9OworCitzdGF0aWMgdm9pZCBpY3NfcnRhc191bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwl1bnNpZ25lZCBpbnQgaHdfaXJxID0gKHVuc2lnbmVkIGludClpcnFkX3RvX2h3aXJxKGQpOworCWludCBjYWxsX3N0YXR1czsKKwlpbnQgc2VydmVyOworCisJcHJfZGV2ZWwoInhpY3M6IHVubWFzayB2aXJxICVkIFtodyAweCV4XVxuIiwgZC0+aXJxLCBod19pcnEpOworCisJaWYgKGh3X2lycSA9PSBYSUNTX0lQSSB8fCBod19pcnEgPT0gWElDU19JUlFfU1BVUklPVVMpCisJCXJldHVybjsKKworCXNlcnZlciA9IHhpY3NfZ2V0X2lycV9zZXJ2ZXIoZC0+aXJxLCBkLT5hZmZpbml0eSwgMCk7CisKKwljYWxsX3N0YXR1cyA9IHJ0YXNfY2FsbChpYm1fc2V0X3hpdmUsIDMsIDEsIE5VTEwsIGh3X2lycSwgc2VydmVyLAorCQkJCURFRkFVTFRfUFJJT1JJVFkpOworCWlmIChjYWxsX3N0YXR1cyAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJIiVzOiBpYm1fc2V0X3hpdmUgaXJxICV1IHNlcnZlciAleCByZXR1cm5lZCAlZFxuIiwKKwkJCV9fZnVuY19fLCBod19pcnEsIHNlcnZlciwgY2FsbF9zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJLyogTm93IHVubWFzayB0aGUgaW50ZXJydXB0IChvZnRlbiBhIG5vLW9wKSAqLworCWNhbGxfc3RhdHVzID0gcnRhc19jYWxsKGlibV9pbnRfb24sIDEsIDEsIE5VTEwsIGh3X2lycSk7CisJaWYgKGNhbGxfc3RhdHVzICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaWJtX2ludF9vbiBpcnE9JXUgcmV0dXJuZWQgJWRcbiIsCisJCQlfX2Z1bmNfXywgaHdfaXJxLCBjYWxsX3N0YXR1cyk7CisJCXJldHVybjsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaWNzX3J0YXNfc3RhcnR1cChzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKwkvKgorCSAqIFRoZSBnZW5lcmljIE1TSSBjb2RlIHJldHVybnMgd2l0aCB0aGUgaW50ZXJydXB0IGRpc2FibGVkIG9uIHRoZQorCSAqIGNhcmQsIHVzaW5nIHRoZSBNU0kgbWFzayBiaXRzLiBGaXJtd2FyZSBkb2Vzbid0IGFwcGVhciB0byB1bm1hc2sKKwkgKiBhdCB0aGF0IGxldmVsLCBzbyB3ZSBkbyBpdCBoZXJlIGJ5IGhhbmQuCisJICovCisJaWYgKGQtPm1zaV9kZXNjKQorCQl1bm1hc2tfbXNpX2lycShkKTsKKyNlbmRpZgorCS8qIHVubWFzayBpdCAqLworCWljc19ydGFzX3VubWFza19pcnEoZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGljc19ydGFzX21hc2tfcmVhbF9pcnEodW5zaWduZWQgaW50IGh3X2lycSkKK3sKKwlpbnQgY2FsbF9zdGF0dXM7CisKKwlpZiAoaHdfaXJxID09IFhJQ1NfSVBJKQorCQlyZXR1cm47CisKKwljYWxsX3N0YXR1cyA9IHJ0YXNfY2FsbChpYm1faW50X29mZiwgMSwgMSwgTlVMTCwgaHdfaXJxKTsKKwlpZiAoY2FsbF9zdGF0dXMgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpYm1faW50X29mZiBpcnE9JXUgcmV0dXJuZWQgJWRcbiIsCisJCQlfX2Z1bmNfXywgaHdfaXJxLCBjYWxsX3N0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBIYXZlIHRvIHNldCBYSVZFIHRvIDB4ZmYgdG8gYmUgYWJsZSB0byByZW1vdmUgYSBzbG90ICovCisJY2FsbF9zdGF0dXMgPSBydGFzX2NhbGwoaWJtX3NldF94aXZlLCAzLCAxLCBOVUxMLCBod19pcnEsCisJCQkJeGljc19kZWZhdWx0X3NlcnZlciwgMHhmZik7CisJaWYgKGNhbGxfc3RhdHVzICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaWJtX3NldF94aXZlKDB4ZmYpIGlycT0ldSByZXR1cm5lZCAlZFxuIiwKKwkJCV9fZnVuY19fLCBod19pcnEsIGNhbGxfc3RhdHVzKTsKKwkJcmV0dXJuOworCX0KK30KKworc3RhdGljIHZvaWQgaWNzX3J0YXNfbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQoreworCXVuc2lnbmVkIGludCBod19pcnEgPSAodW5zaWduZWQgaW50KWlycWRfdG9faHdpcnEoZCk7CisKKwlwcl9kZXZlbCgieGljczogbWFzayB2aXJxICVkIFtodyAweCV4XVxuIiwgZC0+aXJxLCBod19pcnEpOworCisJaWYgKGh3X2lycSA9PSBYSUNTX0lQSSB8fCBod19pcnEgPT0gWElDU19JUlFfU1BVUklPVVMpCisJCXJldHVybjsKKwlpY3NfcnRhc19tYXNrX3JlYWxfaXJxKGh3X2lycSk7Cit9CisKK3N0YXRpYyBpbnQgaWNzX3J0YXNfc2V0X2FmZmluaXR5KHN0cnVjdCBpcnFfZGF0YSAqZCwKKwkJCQkgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCisJCQkJIGJvb2wgZm9yY2UpCit7CisJdW5zaWduZWQgaW50IGh3X2lycSA9ICh1bnNpZ25lZCBpbnQpaXJxZF90b19od2lycShkKTsKKwlpbnQgc3RhdHVzOworCWludCB4aWNzX3N0YXR1c1syXTsKKwlpbnQgaXJxX3NlcnZlcjsKKworCWlmIChod19pcnEgPT0gWElDU19JUEkgfHwgaHdfaXJxID09IFhJQ1NfSVJRX1NQVVJJT1VTKQorCQlyZXR1cm4gLTE7CisKKwlzdGF0dXMgPSBydGFzX2NhbGwoaWJtX2dldF94aXZlLCAxLCAzLCB4aWNzX3N0YXR1cywgaHdfaXJxKTsKKworCWlmIChzdGF0dXMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaWJtLGdldC14aXZlIGlycT0ldSByZXR1cm5zICVkXG4iLAorCQkJX19mdW5jX18sIGh3X2lycSwgc3RhdHVzKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlycV9zZXJ2ZXIgPSB4aWNzX2dldF9pcnFfc2VydmVyKGQtPmlycSwgY3B1bWFzaywgMSk7CisJaWYgKGlycV9zZXJ2ZXIgPT0gLTEpIHsKKwkJY2hhciBjcHVsaXN0WzEyOF07CisJCWNwdW1hc2tfc2NucHJpbnRmKGNwdWxpc3QsIHNpemVvZihjcHVsaXN0KSwgY3B1bWFzayk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSIlczogTm8gb25saW5lIGNwdXMgaW4gdGhlIG1hc2sgJXMgZm9yIGlycSAlZFxuIiwKKwkJCV9fZnVuY19fLCBjcHVsaXN0LCBkLT5pcnEpOworCQlyZXR1cm4gLTE7CisJfQorCisJc3RhdHVzID0gcnRhc19jYWxsKGlibV9zZXRfeGl2ZSwgMywgMSwgTlVMTCwKKwkJCSAgIGh3X2lycSwgaXJxX3NlcnZlciwgeGljc19zdGF0dXNbMV0pOworCisJaWYgKHN0YXR1cykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpYm0sc2V0LXhpdmUgaXJxPSV1IHJldHVybnMgJWRcbiIsCisJCQlfX2Z1bmNfXywgaHdfaXJxLCBzdGF0dXMpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIElSUV9TRVRfTUFTS19PSzsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpY3NfcnRhc19pcnFfY2hpcCA9IHsKKwkubmFtZSA9ICJYSUNTIiwKKwkuaXJxX3N0YXJ0dXAgPSBpY3NfcnRhc19zdGFydHVwLAorCS5pcnFfbWFzayA9IGljc19ydGFzX21hc2tfaXJxLAorCS5pcnFfdW5tYXNrID0gaWNzX3J0YXNfdW5tYXNrX2lycSwKKwkuaXJxX2VvaSA9IE5VTEwsIC8qIFBhdGNoZWQgYXQgaW5pdCB0aW1lICovCisJLmlycV9zZXRfYWZmaW5pdHkgPSBpY3NfcnRhc19zZXRfYWZmaW5pdHkKK307CisKK3N0YXRpYyBpbnQgaWNzX3J0YXNfbWFwKHN0cnVjdCBpY3MgKmljcywgdW5zaWduZWQgaW50IHZpcnEpCit7CisJdW5zaWduZWQgaW50IGh3X2lycSA9ICh1bnNpZ25lZCBpbnQpdmlycV90b19odyh2aXJxKTsKKwlpbnQgc3RhdHVzWzJdOworCWludCByYzsKKworCWlmIChXQVJOX09OKGh3X2lycSA9PSBYSUNTX0lQSSB8fCBod19pcnEgPT0gWElDU19JUlFfU1BVUklPVVMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIENoZWNrIGlmIFJUQVMga25vd3MgYWJvdXQgdGhpcyBpbnRlcnJ1cHQgKi8KKwlyYyA9IHJ0YXNfY2FsbChpYm1fZ2V0X3hpdmUsIDEsIDMsIHN0YXR1cywgaHdfaXJxKTsKKwlpZiAocmMpCisJCXJldHVybiAtRU5YSU87CisKKwlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIodmlycSwgJmljc19ydGFzX2lycV9jaGlwLCBoYW5kbGVfZmFzdGVvaV9pcnEpOworCWlycV9zZXRfY2hpcF9kYXRhKHZpcnEsICZpY3NfcnRhcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaWNzX3J0YXNfbWFza191bmtub3duKHN0cnVjdCBpY3MgKmljcywgdW5zaWduZWQgbG9uZyB2ZWMpCit7CisJaWNzX3J0YXNfbWFza19yZWFsX2lycSh2ZWMpOworfQorCitzdGF0aWMgbG9uZyBpY3NfcnRhc19nZXRfc2VydmVyKHN0cnVjdCBpY3MgKmljcywgdW5zaWduZWQgbG9uZyB2ZWMpCit7CisJaW50IHJjLCBzdGF0dXNbMl07CisKKwlyYyA9IHJ0YXNfY2FsbChpYm1fZ2V0X3hpdmUsIDEsIDMsIHN0YXR1cywgdmVjKTsKKwlpZiAocmMpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gc3RhdHVzWzBdOworfQorCitzdGF0aWMgaW50IGljc19ydGFzX2hvc3RfbWF0Y2goc3RydWN0IGljcyAqaWNzLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCit7CisJLyogSUJNIG1hY2hpbmVzIGhhdmUgaW50ZXJydXB0IHBhcmVudHMgb2YgdmFyaW91cyBmdW5reSB0eXBlcyBmb3IgdGhpbmdzCisJICogbGlrZSB2ZGV2aWNlcywgZXZlbnRzLCBldGMuLi4gVGhlIHRyaWNrIHdlIHVzZSBoZXJlIGlzIHRvIG1hdGNoCisJICogZXZlcnl0aGluZyBoZXJlIGV4Y2VwdCB0aGUgbGVnYWN5IDgyNTkgd2hpY2ggaXMgY29tcGF0aWJsZSAiY2hycCxpaWMiCisJICovCisJcmV0dXJuICFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShub2RlLCAiY2hycCxpaWMiKTsKK30KKworaW50IGljc19ydGFzX2luaXQodm9pZCkKK3sKKwlpYm1fZ2V0X3hpdmUgPSBydGFzX3Rva2VuKCJpYm0sZ2V0LXhpdmUiKTsKKwlpYm1fc2V0X3hpdmUgPSBydGFzX3Rva2VuKCJpYm0sc2V0LXhpdmUiKTsKKwlpYm1faW50X29uICA9IHJ0YXNfdG9rZW4oImlibSxpbnQtb24iKTsKKwlpYm1faW50X29mZiA9IHJ0YXNfdG9rZW4oImlibSxpbnQtb2ZmIik7CisKKwkvKiBXZSBlbmFibGUgdGhlIFJUQVMgIklDUyIgaWYgUlRBUyBpcyBwcmVzZW50IHdpdGggdGhlCisJICogYXBwcm9wcmlhdGUgdG9rZW5zCisJICovCisJaWYgKGlibV9nZXRfeGl2ZSA9PSBSVEFTX1VOS05PV05fU0VSVklDRSB8fAorCSAgICBpYm1fc2V0X3hpdmUgPT0gUlRBU19VTktOT1dOX1NFUlZJQ0UpCisJCXJldHVybiAtRU5PREVWOworCisJLyogV2UgbmVlZCB0byBwYXRjaCBvdXIgaXJxIGNoaXAncyBFT0kgdG8gcG9pbnQgdG8gdGhlCisJICogcmlnaHQgSUNQCisJICovCisJaWNzX3J0YXNfaXJxX2NoaXAuaXJxX2VvaSA9IGljcF9vcHMtPmVvaTsKKworCS8qIFJlZ2lzdGVyIG91cnNlbHZlcyAqLworCXhpY3NfcmVnaXN0ZXJfaWNzKCZpY3NfcnRhcyk7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWNzL3hpY3MtY29tbW9uLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3hpY3MveGljcy1jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDVjNWEwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWNzL3hpY3MtY29tbW9uLmMKQEAgLTAsMCArMSw0NDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMSBJQk0gQ29ycG9yYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKyNpbmNsdWRlIDxhc20vcnRhcy5oPgorI2luY2x1ZGUgPGFzbS94aWNzLmg+CisjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CisKKy8qIEdsb2JhbHMgY29tbW9uIHRvIGFsbCBJQ1AvSUNTIGltcGxlbWVudGF0aW9ucyAqLworY29uc3Qgc3RydWN0IGljcF9vcHMJKmljcF9vcHM7CisKK3Vuc2lnbmVkIGludCB4aWNzX2RlZmF1bHRfc2VydmVyCQk9IDB4ZmY7Cit1bnNpZ25lZCBpbnQgeGljc19kZWZhdWx0X2Rpc3RyaWJfc2VydmVyCT0gMDsKK3Vuc2lnbmVkIGludCB4aWNzX2ludGVycnVwdF9zZXJ2ZXJfc2l6ZQkJPSA4OworCitERUZJTkVfUEVSX0NQVShzdHJ1Y3QgeGljc19jcHByLCB4aWNzX2NwcHIpOworCitzdHJ1Y3QgaXJxX2hvc3QgKnhpY3NfaG9zdDsKKworc3RhdGljIExJU1RfSEVBRChpY3NfbGlzdCk7CisKK3ZvaWQgeGljc191cGRhdGVfaXJxX3NlcnZlcnModm9pZCkKK3sKKwlpbnQgaSwgajsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXUzMiBpbGVuOworCWNvbnN0IHUzMiAqaXJlZzsKKwl1MzIgaGNwdWlkOworCisJLyogRmluZCB0aGUgc2VydmVyIG51bWJlcnMgZm9yIHRoZSBib290IGNwdS4gKi8KKwlucCA9IG9mX2dldF9jcHVfbm9kZShib290X2NwdWlkLCBOVUxMKTsKKwlCVUdfT04oIW5wKTsKKworCWhjcHVpZCA9IGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoYm9vdF9jcHVpZCk7CisJeGljc19kZWZhdWx0X3NlcnZlciA9IHhpY3NfZGVmYXVsdF9kaXN0cmliX3NlcnZlciA9IGhjcHVpZDsKKworCXByX2RldmVsKCJ4aWNzOiB4aWNzX2RlZmF1bHRfc2VydmVyID0gMHgleFxuIiwgeGljc19kZWZhdWx0X3NlcnZlcik7CisKKwlpcmVnID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiaWJtLHBwYy1pbnRlcnJ1cHQtZ3NlcnZlciNzIiwgJmlsZW4pOworCWlmICghaXJlZykgeworCQlvZl9ub2RlX3B1dChucCk7CisJCXJldHVybjsKKwl9CisKKwlpID0gaWxlbiAvIHNpemVvZihpbnQpOworCisJLyogR2xvYmFsIGludGVycnVwdCBkaXN0cmlidXRpb24gc2VydmVyIGlzIHNwZWNpZmllZCBpbiB0aGUgbGFzdAorCSAqIGVudHJ5IG9mICJpYm0scHBjLWludGVycnVwdC1nc2VydmVyI3MiIHByb3BlcnR5LiBHZXQgdGhlIGxhc3QKKwkgKiBlbnRyeSBmb20gdGhpcyBwcm9wZXJ0eSBmb3IgY3VycmVudCBib290IGNwdSBpZCBhbmQgdXNlIGl0IGFzCisJICogZGVmYXVsdCBkaXN0cmlidXRpb24gc2VydmVyCisJICovCisJZm9yIChqID0gMDsgaiA8IGk7IGogKz0gMikgeworCQlpZiAoaXJlZ1tqXSA9PSBoY3B1aWQpIHsKKwkJCXhpY3NfZGVmYXVsdF9kaXN0cmliX3NlcnZlciA9IGlyZWdbaisxXTsKKwkJCWJyZWFrOworCQl9CisJfQorCXByX2RldmVsKCJ4aWNzOiB4aWNzX2RlZmF1bHRfZGlzdHJpYl9zZXJ2ZXIgPSAweCV4XG4iLAorCQkgeGljc19kZWZhdWx0X2Rpc3RyaWJfc2VydmVyKTsKKwlvZl9ub2RlX3B1dChucCk7Cit9CisKKy8qIEdJUSBzdHVmZiwgY3VycmVudGx5IG9ubHkgc3VwcG9ydGVkIG9uIFJUQVMgc2V0dXBzLCB3aWxsIGhhdmUKKyAqIHRvIGJlIHNvcnRlZCBwcm9wZXJseSBmb3IgYmFyZSBtZXRhbAorICovCit2b2lkIHhpY3Nfc2V0X2NwdV9naXEodW5zaWduZWQgaW50IGdzZXJ2ZXIsIHVuc2lnbmVkIGludCBqb2luKQoreworI2lmZGVmIENPTkZJR19QUENfUlRBUworCWludCBpbmRleDsKKwlpbnQgc3RhdHVzOworCisJaWYgKCFydGFzX2luZGljYXRvcl9wcmVzZW50KEdMT0JBTF9JTlRFUlJVUFRfUVVFVUUsIE5VTEwpKQorCQlyZXR1cm47CisKKwlpbmRleCA9ICgxVUwgPDwgeGljc19pbnRlcnJ1cHRfc2VydmVyX3NpemUpIC0gMSAtIGdzZXJ2ZXI7CisKKwlzdGF0dXMgPSBydGFzX3NldF9pbmRpY2F0b3JfZmFzdChHTE9CQUxfSU5URVJSVVBUX1FVRVVFLCBpbmRleCwgam9pbik7CisKKwlXQVJOKHN0YXR1cyA8IDAsICJzZXQtaW5kaWNhdG9yKCVkLCAlZCwgJXUpIHJldHVybmVkICVkXG4iLAorCSAgICAgR0xPQkFMX0lOVEVSUlVQVF9RVUVVRSwgaW5kZXgsIGpvaW4sIHN0YXR1cyk7CisjZW5kaWYKK30KKwordm9pZCB4aWNzX3NldHVwX2NwdSh2b2lkKQoreworCWljcF9vcHMtPnNldF9wcmlvcml0eShMT1dFU1RfUFJJT1JJVFkpOworCisJeGljc19zZXRfY3B1X2dpcSh4aWNzX2RlZmF1bHRfZGlzdHJpYl9zZXJ2ZXIsIDEpOworfQorCit2b2lkIHhpY3NfbWFza191bmtub3duX3ZlYyh1bnNpZ25lZCBpbnQgdmVjKQoreworCXN0cnVjdCBpY3MgKmljczsKKworCXByX2VycigiSW50ZXJydXB0IDB4JXggKHJlYWwpIGlzIGludmFsaWQsIGRpc2FibGluZyBpdC5cbiIsIHZlYyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGljcywgJmljc19saXN0LCBsaW5rKQorCQlpY3MtPm1hc2tfdW5rbm93bihpY3MsIHZlYyk7Cit9CisKKworI2lmZGVmIENPTkZJR19TTVAKKworc3RhdGljIHZvaWQgeGljc19yZXF1ZXN0X2lwaSh2b2lkKQoreworCXVuc2lnbmVkIGludCBpcGk7CisKKwlpcGkgPSBpcnFfY3JlYXRlX21hcHBpbmcoeGljc19ob3N0LCBYSUNTX0lQSSk7CisJQlVHX09OKGlwaSA9PSBOT19JUlEpOworCisJLyoKKwkgKiBJUElzIGFyZSBtYXJrZWQgSVJRRl9ESVNBQkxFRCBhcyB0aGV5IG11c3QgcnVuIHdpdGggaXJxcworCSAqIGRpc2FibGVkLCBhbmQgUEVSQ1BVLiAgVGhlIGhhbmRsZXIgd2FzIHNldCBpbiBtYXAuCisJICovCisJQlVHX09OKHJlcXVlc3RfaXJxKGlwaSwgaWNwX29wcy0+aXBpX2FjdGlvbiwKKwkJCSAgIElSUUZfRElTQUJMRUR8SVJRRl9QRVJDUFUsICJJUEkiLCBOVUxMKSk7Cit9CisKK2ludCBfX2luaXQgeGljc19zbXBfcHJvYmUodm9pZCkKK3sKKwkvKiBTZXR1cCBjYXVzZV9pcGkgY2FsbGJhY2sgIGJhc2VkIG9uIHdoaWNoIElDUCBpcyB1c2VkICovCisJc21wX29wcy0+Y2F1c2VfaXBpID0gaWNwX29wcy0+Y2F1c2VfaXBpOworCisJLyogUmVnaXN0ZXIgYWxsIHRoZSBJUElzICovCisJeGljc19yZXF1ZXN0X2lwaSgpOworCisJcmV0dXJuIGNwdW1hc2tfd2VpZ2h0KGNwdV9wb3NzaWJsZV9tYXNrKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKwordm9pZCB4aWNzX3RlYXJkb3duX2NwdSh2b2lkKQoreworCXN0cnVjdCB4aWNzX2NwcHIgKm9zX2NwcHIgPSAmX19nZXRfY3B1X3Zhcih4aWNzX2NwcHIpOworCisJLyoKKwkgKiB3ZSBoYXZlIHRvIHJlc2V0IHRoZSBjcHByIGluZGV4IHRvIDAgYmVjYXVzZSB3ZSdyZQorCSAqIG5vdCBnb2luZyB0byByZXR1cm4gZnJvbSB0aGUgSVBJCisJICovCisJb3NfY3Bwci0+aW5kZXggPSAwOworCWljcF9vcHMtPnNldF9wcmlvcml0eSgwKTsKKwlpY3Bfb3BzLT50ZWFyZG93bl9jcHUoKTsKK30KKwordm9pZCB4aWNzX2tleGVjX3RlYXJkb3duX2NwdShpbnQgc2Vjb25kYXJ5KQoreworCXhpY3NfdGVhcmRvd25fY3B1KCk7CisKKwlpY3Bfb3BzLT5mbHVzaF9pcGkoKTsKKworCS8qCisJICogU29tZSBtYWNoaW5lcyBuZWVkIHRvIGhhdmUgYXQgbGVhc3Qgb25lIGNwdSBpbiB0aGUgR0lRLAorCSAqIHNvIGxlYXZlIHRoZSBtYXN0ZXIgY3B1IGluIHRoZSBncm91cC4KKwkgKi8KKwlpZiAoc2Vjb25kYXJ5KQorCQl4aWNzX3NldF9jcHVfZ2lxKHhpY3NfZGVmYXVsdF9kaXN0cmliX3NlcnZlciwgMCk7Cit9CisKKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCisvKiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4gKi8KK3ZvaWQgeGljc19taWdyYXRlX2lycXNfYXdheSh2b2lkKQoreworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCksIGh3X2NwdSA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOworCXVuc2lnbmVkIGludCBpcnEsIHZpcnE7CisKKwkvKiBJZiB3ZSB1c2VkIHRvIGJlIHRoZSBkZWZhdWx0IHNlcnZlciwgbW92ZSB0byB0aGUgbmV3ICJib290X2NwdWlkIiAqLworCWlmIChod19jcHUgPT0geGljc19kZWZhdWx0X3NlcnZlcikKKwkJeGljc191cGRhdGVfaXJxX3NlcnZlcnMoKTsKKworCS8qIFJlamVjdCBhbnkgaW50ZXJydXB0IHRoYXQgd2FzIHF1ZXVlZCB0byB1cy4uLiAqLworCWljcF9vcHMtPnNldF9wcmlvcml0eSgwKTsKKworCS8qIFJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgZ2xvYmFsIGludGVycnVwdCBxdWV1ZSAqLworCXhpY3Nfc2V0X2NwdV9naXEoeGljc19kZWZhdWx0X2Rpc3RyaWJfc2VydmVyLCAwKTsKKworCS8qIEFsbG93IElQSXMgYWdhaW4uLi4gKi8KKwlpY3Bfb3BzLT5zZXRfcHJpb3JpdHkoREVGQVVMVF9QUklPUklUWSk7CisKKwlmb3JfZWFjaF9pcnEodmlycSkgeworCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisJCXN0cnVjdCBpcnFfY2hpcCAqY2hpcDsKKwkJbG9uZyBzZXJ2ZXI7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXN0cnVjdCBpY3MgKmljczsKKworCQkvKiBXZSBjYW4ndCBzZXQgYWZmaW5pdHkgb24gSVNBIGludGVycnVwdHMgKi8KKwkJaWYgKHZpcnEgPCBOVU1fSVNBX0lOVEVSUlVQVFMpCisJCQljb250aW51ZTsKKwkJaWYgKCF2aXJxX2lzX2hvc3QodmlycSwgeGljc19ob3N0KSkKKwkJCWNvbnRpbnVlOworCQlpcnEgPSAodW5zaWduZWQgaW50KXZpcnFfdG9faHcodmlycSk7CisJCS8qIFdlIG5lZWQgdG8gZ2V0IElQSXMgc3RpbGwuICovCisJCWlmIChpcnEgPT0gWElDU19JUEkgfHwgaXJxID09IFhJQ1NfSVJRX1NQVVJJT1VTKQorCQkJY29udGludWU7CisJCWRlc2MgPSBpcnFfdG9fZGVzYyh2aXJxKTsKKwkJLyogV2Ugb25seSBuZWVkIHRvIG1pZ3JhdGUgZW5hYmxlZCBJUlFTICovCisJCWlmICghZGVzYyB8fCAhZGVzYy0+YWN0aW9uKQorCQkJY29udGludWU7CisJCWNoaXAgPSBpcnFfZGVzY19nZXRfY2hpcChkZXNjKTsKKwkJaWYgKCFjaGlwIHx8ICFjaGlwLT5pcnFfc2V0X2FmZmluaXR5KQorCQkJY29udGludWU7CisKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisKKwkJLyogTG9jYXRlIGludGVycnVwdCBzZXJ2ZXIgKi8KKwkJc2VydmVyID0gLTE7CisJCWljcyA9IGlycV9nZXRfY2hpcF9kYXRhKHZpcnEpOworCQlpZiAoaWNzKQorCQkJc2VydmVyID0gaWNzLT5nZXRfc2VydmVyKGljcywgaXJxKTsKKwkJaWYgKHNlcnZlciA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbid0IGZpbmQgc2VydmVyIGZvciBpcnEgJWRcbiIsCisJCQkgICAgICAgX19mdW5jX18sIGlycSk7CisJCQlnb3RvIHVubG9jazsKKwkJfQorCisJCS8qIFdlIG9ubHkgc3VwcG9ydCBkZWxpdmVyeSB0byBhbGwgY3B1cyBvciB0byBvbmUgY3B1LgorCQkgKiBUaGUgaXJxIGhhcyB0byBiZSBtaWdyYXRlZCBvbmx5IGluIHRoZSBzaW5nbGUgY3B1CisJCSAqIGNhc2UuCisJCSAqLworCQlpZiAoc2VydmVyICE9IGh3X2NwdSkKKwkJCWdvdG8gdW5sb2NrOworCisJCS8qIFRoaXMgaXMgZXhwZWN0ZWQgZHVyaW5nIGNwdSBvZmZsaW5lLiAqLworCQlpZiAoY3B1X29ubGluZShjcHUpKQorCQkJcHJfd2FybmluZygiSVJRICV1IGFmZmluaXR5IGJyb2tlbiBvZmYgY3B1ICV1XG4iLAorCQkJICAgICAgIHZpcnEsIGNwdSk7CisKKwkJLyogUmVzZXQgYWZmaW5pdHkgdG8gYWxsIGNwdXMgKi8KKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwkJaXJxX3NldF9hZmZpbml0eSh2aXJxLCBjcHVfYWxsX21hc2spOworCQljb250aW51ZTsKK3VubG9jazoKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwl9Cit9CisjZW5kaWYgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCisKKyNpZmRlZiBDT05GSUdfU01QCisvKgorICogRm9yIHRoZSBtb21lbnQgd2Ugb25seSBpbXBsZW1lbnQgZGVsaXZlcnkgdG8gYWxsIGNwdXMgb3Igb25lIGNwdS4KKyAqCisgKiBJZiB0aGUgcmVxdWVzdGVkIGFmZmluaXR5IGlzIGNwdV9hbGxfbWFzaywgd2Ugc2V0IGdsb2JhbCBhZmZpbml0eS4KKyAqIElmIG5vdCB3ZSBzZXQgaXQgdG8gdGhlIGZpcnN0IGNwdSBpbiB0aGUgbWFzaywgZXZlbiBpZiBtdWx0aXBsZSBjcHVzCisgKiBhcmUgc2V0LiBUaGlzIGlzIHNvIHRoaW5ncyBsaWtlIGlycWJhbGFuY2UgKHdoaWNoIHNldCBjb3JlIGFuZCBwYWNrYWdlCisgKiB3aWRlIGFmZmluaXRpZXMpIGRvIHRoZSByaWdodCB0aGluZy4KKyAqCisgKiBXZSBuZWVkIHRvIGZpeCB0aGlzIHRvIGltcGxlbWVudCBzdXBwb3J0IGZvciB0aGUgbGlua3MKKyAqLworaW50IHhpY3NfZ2V0X2lycV9zZXJ2ZXIodW5zaWduZWQgaW50IHZpcnEsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAorCQkJdW5zaWduZWQgaW50IHN0cmljdF9jaGVjaykKK3sKKworCWlmICghZGlzdHJpYnV0ZV9pcnFzKQorCQlyZXR1cm4geGljc19kZWZhdWx0X3NlcnZlcjsKKworCWlmICghY3B1bWFza19zdWJzZXQoY3B1X3Bvc3NpYmxlX21hc2ssIGNwdW1hc2spKSB7CisJCWludCBzZXJ2ZXIgPSBjcHVtYXNrX2ZpcnN0X2FuZChjcHVfb25saW5lX21hc2ssIGNwdW1hc2spOworCisJCWlmIChzZXJ2ZXIgPCBucl9jcHVfaWRzKQorCQkJcmV0dXJuIGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoc2VydmVyKTsKKworCQlpZiAoc3RyaWN0X2NoZWNrKQorCQkJcmV0dXJuIC0xOworCX0KKworCS8qCisJICogV29ya2Fyb3VuZCBpc3N1ZSB3aXRoIHNvbWUgdmVyc2lvbnMgb2YgSlMyMCBmaXJtd2FyZSB0aGF0CisJICogZGVsaXZlciBpbnRlcnJ1cHRzIHRvIGNwdXMgd2hpY2ggaGF2ZW4ndCBiZWVuIHN0YXJ0ZWQuIFRoaXMKKwkgKiBoYXBwZW5zIHdoZW4gdXNpbmcgdGhlIG1heGNwdXM9IGJvb3Qgb3B0aW9uLgorCSAqLworCWlmIChjcHVtYXNrX2VxdWFsKGNwdV9vbmxpbmVfbWFzaywgY3B1X3ByZXNlbnRfbWFzaykpCisJCXJldHVybiB4aWNzX2RlZmF1bHRfZGlzdHJpYl9zZXJ2ZXI7CisKKwlyZXR1cm4geGljc19kZWZhdWx0X3NlcnZlcjsKK30KKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKK3N0YXRpYyBpbnQgeGljc19ob3N0X21hdGNoKHN0cnVjdCBpcnFfaG9zdCAqaCwgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQoreworCXN0cnVjdCBpY3MgKmljczsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoaWNzLCAmaWNzX2xpc3QsIGxpbmspCisJCWlmIChpY3MtPmhvc3RfbWF0Y2goaWNzLCBub2RlKSkKKwkJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKKy8qIER1bW1pZXMgKi8KK3N0YXRpYyB2b2lkIHhpY3NfaXBpX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpIHsgfQorc3RhdGljIHZvaWQgeGljc19pcGlfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpIHsgfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHhpY3NfaXBpX2NoaXAgPSB7CisJLm5hbWUgPSAiWElDUyIsCisJLmlycV9lb2kgPSBOVUxMLCAvKiBQYXRjaGVkIGF0IGluaXQgdGltZSAqLworCS5pcnFfbWFzayA9IHhpY3NfaXBpX21hc2ssCisJLmlycV91bm1hc2sgPSB4aWNzX2lwaV91bm1hc2ssCit9OworCitzdGF0aWMgaW50IHhpY3NfaG9zdF9tYXAoc3RydWN0IGlycV9ob3N0ICpoLCB1bnNpZ25lZCBpbnQgdmlycSwKKwkJCSBpcnFfaHdfbnVtYmVyX3QgaHcpCit7CisJc3RydWN0IGljcyAqaWNzOworCisJcHJfZGV2ZWwoInhpY3M6IG1hcCB2aXJxICVkLCBod2lycSAweCVseFxuIiwgdmlycSwgaHcpOworCisJLyogSW5zZXJ0IHRoZSBpbnRlcnJ1cHQgbWFwcGluZyBpbnRvIHRoZSByYWRpeCB0cmVlIGZvciBmYXN0IGxvb2t1cCAqLworCWlycV9yYWRpeF9yZXZtYXBfaW5zZXJ0KHhpY3NfaG9zdCwgdmlycSwgaHcpOworCisJLyogVGhleSBhcmVuJ3QgYWxsIGxldmVsIHNlbnNpdGl2ZSBidXQgd2UganVzdCBkb24ndCByZWFsbHkga25vdyAqLworCWlycV9zZXRfc3RhdHVzX2ZsYWdzKHZpcnEsIElSUV9MRVZFTCk7CisKKwkvKiBEb24ndCBjYWxsIGludG8gSUNTIGZvciBJUElzICovCisJaWYgKGh3ID09IFhJQ1NfSVBJKSB7CisJCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCAmeGljc19pcGlfY2hpcCwKKwkJCQkJIGhhbmRsZV9wZXJjcHVfaXJxKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogTGV0IHRoZSBJQ1Mgc2V0dXAgdGhlIGNoaXAgZGF0YSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoaWNzLCAmaWNzX2xpc3QsIGxpbmspCisJCWlmIChpY3MtPm1hcChpY3MsIHZpcnEpID09IDApCisJCQlyZXR1cm4gMDsKKworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHhpY3NfaG9zdF94bGF0ZShzdHJ1Y3QgaXJxX2hvc3QgKmgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY3QsCisJCQkgICBjb25zdCB1MzIgKmludHNwZWMsIHVuc2lnbmVkIGludCBpbnRzaXplLAorCQkJICAgaXJxX2h3X251bWJlcl90ICpvdXRfaHdpcnEsIHVuc2lnbmVkIGludCAqb3V0X2ZsYWdzKQorCit7CisJLyogQ3VycmVudCB4aWNzIGltcGxlbWVudGF0aW9uIHRyYW5zbGF0ZXMgZXZlcnl0aGluZworCSAqIHRvIGxldmVsLiBJdCBpcyBub3QgdGVjaG5pY2FsbHkgcmlnaHQgZm9yIE1TSXMgYnV0IHRoaXMKKwkgKiBpcyBpcnJlbGV2YW50IGF0IHRoaXMgcG9pbnQuIFdlIG1pZ2h0IGdldCBzbWFydGVyIGluIHRoZSBmdXR1cmUKKwkgKi8KKwkqb3V0X2h3aXJxID0gaW50c3BlY1swXTsKKwkqb3V0X2ZsYWdzID0gSVJRX1RZUEVfTEVWRUxfTE9XOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2hvc3Rfb3BzIHhpY3NfaG9zdF9vcHMgPSB7CisJLm1hdGNoID0geGljc19ob3N0X21hdGNoLAorCS5tYXAgPSB4aWNzX2hvc3RfbWFwLAorCS54bGF0ZSA9IHhpY3NfaG9zdF94bGF0ZSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCB4aWNzX2luaXRfaG9zdCh2b2lkKQoreworCXhpY3NfaG9zdCA9IGlycV9hbGxvY19ob3N0KE5VTEwsIElSUV9IT1NUX01BUF9UUkVFLCAwLCAmeGljc19ob3N0X29wcywKKwkJCQkgICBYSUNTX0lSUV9TUFVSSU9VUyk7CisJQlVHX09OKHhpY3NfaG9zdCA9PSBOVUxMKTsKKwlpcnFfc2V0X2RlZmF1bHRfaG9zdCh4aWNzX2hvc3QpOworfQorCit2b2lkIF9faW5pdCB4aWNzX3JlZ2lzdGVyX2ljcyhzdHJ1Y3QgaWNzICppY3MpCit7CisJbGlzdF9hZGQoJmljcy0+bGluaywgJmljc19saXN0KTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHhpY3NfZ2V0X3NlcnZlcl9zaXplKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwljb25zdCB1MzIgKmlzaXplOworCisJLyogV2UgZmV0Y2ggdGhlIGludGVycnVwdCBzZXJ2ZXIgc2l6ZSBmcm9tIHRoZSBmaXJzdCBJQ1Mgbm9kZQorCSAqIHdlIGZpbmQgaWYgYW55CisJICovCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiaWJtLHBwYy14aWNzIik7CisJaWYgKCFucCkKKwkJcmV0dXJuOworCWlzaXplID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiaWJtLGludGVycnVwdC1zZXJ2ZXIjLXNpemUiLCBOVUxMKTsKKwlpZiAoIWlzaXplKQorCQlyZXR1cm47CisJeGljc19pbnRlcnJ1cHRfc2VydmVyX3NpemUgPSAqaXNpemU7CisJb2Zfbm9kZV9wdXQobnApOworfQorCit2b2lkIF9faW5pdCB4aWNzX2luaXQodm9pZCkKK3sKKwlpbnQgcmMgPSAtMTsKKworCS8qIEZpc3QgbG9jYXRlIElDUCAqLworI2lmZGVmIENPTkZJR19QUENfSUNQX0hWCisJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCisJCXJjID0gaWNwX2h2X2luaXQoKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19QUENfSUNQX05BVElWRQorCWlmIChyYyA8IDApCisJCXJjID0gaWNwX25hdGl2ZV9pbml0KCk7CisjZW5kaWYKKwlpZiAocmMgPCAwKSB7CisJCXByX3dhcm5pbmcoIlhJQ1M6IENhbm5vdCBmaW5kIGEgUHJlc2VudGF0aW9uIENvbnRyb2xsZXIgIVxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBDb3B5IGdldF9pcnEgY2FsbGJhY2sgb3ZlciB0byBwcGNfbWQgKi8KKwlwcGNfbWQuZ2V0X2lycSA9IGljcF9vcHMtPmdldF9pcnE7CisKKwkvKiBQYXRjaCB1cCBJUEkgY2hpcCBFT0kgKi8KKwl4aWNzX2lwaV9jaGlwLmlycV9lb2kgPSBpY3Bfb3BzLT5lb2k7CisKKwkvKiBOb3cgbG9jYXRlIElDUyAqLworI2lmZGVmIENPTkZJR19QUENfSUNTX1JUQVMKKwlyYyA9IGljc19ydGFzX2luaXQoKTsKKyNlbmRpZgorCWlmIChyYyA8IDApCisJCXByX3dhcm5pbmcoIlhJQ1M6IENhbm5vdCBmaW5kIGEgU291cmNlIENvbnRyb2xsZXIgIVxuIik7CisKKwkvKiBJbml0aWFsaXplIGNvbW1vbiBiaXRzICovCisJeGljc19nZXRfc2VydmVyX3NpemUoKTsKKwl4aWNzX3VwZGF0ZV9pcnFfc2VydmVycygpOworCXhpY3NfaW5pdF9ob3N0KCk7CisJeGljc19zZXR1cF9jcHUoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYveGlsaW54X2ludGMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYveGlsaW54X2ludGMuYwppbmRleCAwYTEzZmMxLi42MTgzNzk5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3hpbGlueF9pbnRjLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWxpbnhfaW50Yy5jCkBAIC03MSw3ICs3MSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHhpbGlueF9pbnRjX21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBpcnEgPSB2aXJxX3RvX2h3KGQtPmlycSk7CisJaW50IGlycSA9IGlycWRfdG9faHdpcnEoZCk7CiAJdm9pZCAqIHJlZ3MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAlwcl9kZWJ1ZygibWFzazogJWRcbiIsIGlycSk7CiAJb3V0X2JlMzIocmVncyArIFhJTlRDX0NJRSwgMSA8PCBpcnEpOwpAQCAtODcsNyArODcsNyBAQAogICovCiBzdGF0aWMgdm9pZCB4aWxpbnhfaW50Y19sZXZlbF91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBpcnEgPSB2aXJxX3RvX2h3KGQtPmlycSk7CisJaW50IGlycSA9IGlycWRfdG9faHdpcnEoZCk7CiAJdm9pZCAqIHJlZ3MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAlwcl9kZWJ1ZygidW5tYXNrOiAlZFxuIiwgaXJxKTsKIAlvdXRfYmUzMihyZWdzICsgWElOVENfU0lFLCAxIDw8IGlycSk7CkBAIC0xMTIsNyArMTEyLDcgQEAKICAqLwogc3RhdGljIHZvaWQgeGlsaW54X2ludGNfZWRnZV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQogewotCWludCBpcnEgPSB2aXJxX3RvX2h3KGQtPmlycSk7CisJaW50IGlycSA9IGlycWRfdG9faHdpcnEoZCk7CiAJdm9pZCAqcmVncyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCXByX2RlYnVnKCJ1bm1hc2s6ICVkXG4iLCBpcnEpOwogCW91dF9iZTMyKHJlZ3MgKyBYSU5UQ19TSUUsIDEgPDwgaXJxKTsKQEAgLTEyMCw3ICsxMjAsNyBAQAogCiBzdGF0aWMgdm9pZCB4aWxpbnhfaW50Y19lZGdlX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JaW50IGlycSA9IHZpcnFfdG9faHcoZC0+aXJxKTsKKwlpbnQgaXJxID0gaXJxZF90b19od2lycShkKTsKIAl2b2lkICogcmVncyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCXByX2RlYnVnKCJhY2s6ICVkXG4iLCBpcnEpOwogCW91dF9iZTMyKHJlZ3MgKyBYSU5UQ19JQVIsIDEgPDwgaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYyBiL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYwppbmRleCAzMzc5NGMxLi40MjU0MWJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCkBAIC0zMzQsNyArMzM0LDcgQEAKIAogaW50IGNwdXNfYXJlX2luX3htb24odm9pZCkKIHsKLQlyZXR1cm4gIWNwdXNfZW1wdHkoY3B1c19pbl94bW9uKTsKKwlyZXR1cm4gIWNwdW1hc2tfZW1wdHkoJmNwdXNfaW5feG1vbik7CiB9CiAjZW5kaWYKIApAQCAtMzczLDcgKzM3Myw3IEBACiAKICNpZmRlZiBDT05GSUdfU01QCiAJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWlmIChjcHVfaXNzZXQoY3B1LCBjcHVzX2luX3htb24pKSB7CisJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCAmY3B1c19pbl94bW9uKSkgewogCQlnZXRfb3V0cHV0X2xvY2soKTsKIAkJZXhjcHJpbnQocmVncyk7CiAJCXByaW50ZigiY3B1IDB4JXg6IEV4Y2VwdGlvbiAlbHggJXMgaW4geG1vbiwgIgpAQCAtMzk2LDEwICszOTYsMTAgQEAKIAl9CiAKIAl4bW9uX2ZhdWx0X2ptcFtjcHVdID0gcmVjdXJzZV9qbXA7Ci0JY3B1X3NldChjcHUsIGNwdXNfaW5feG1vbik7CisJY3B1bWFza19zZXRfY3B1KGNwdSwgJmNwdXNfaW5feG1vbik7CiAKIAlicCA9IE5VTEw7Ci0JaWYgKChyZWdzLT5tc3IgJiAoTVNSX0lSfE1TUl9QUnxNU1JfU0YpKSA9PSAoTVNSX0lSfE1TUl9TRikpCisJaWYgKChyZWdzLT5tc3IgJiAoTVNSX0lSfE1TUl9QUnxNU1JfNjRCSVQpKSA9PSAoTVNSX0lSfE1TUl82NEJJVCkpCiAJCWJwID0gYXRfYnJlYWtwb2ludChyZWdzLT5uaXApOwogCWlmIChicCB8fCB1bnJlY292ZXJhYmxlX2V4Y3AocmVncykpCiAJCWZyb21pcGkgPSAwOwpAQCAtNDM3LDEwICs0MzcsMTAgQEAKIAkJeG1vbl9vd25lciA9IGNwdTsKIAkJbWIoKTsKIAkJaWYgKG5jcHVzID4gMSkgewotCQkJc21wX3NlbmRfZGVidWdnZXJfYnJlYWsoTVNHX0FMTF9CVVRfU0VMRik7CisJCQlzbXBfc2VuZF9kZWJ1Z2dlcl9icmVhaygpOwogCQkJLyogd2FpdCBmb3Igb3RoZXIgY3B1cyB0byBjb21lIGluICovCiAJCQlmb3IgKHRpbWVvdXQgPSAxMDAwMDAwMDA7IHRpbWVvdXQgIT0gMDsgLS10aW1lb3V0KSB7Ci0JCQkJaWYgKGNwdXNfd2VpZ2h0KGNwdXNfaW5feG1vbikgPj0gbmNwdXMpCisJCQkJaWYgKGNwdW1hc2tfd2VpZ2h0KCZjcHVzX2luX3htb24pID49IG5jcHVzKQogCQkJCQlicmVhazsKIAkJCQliYXJyaWVyKCk7CiAJCQl9CkBAIC00ODQsNyArNDg0LDcgQEAKIAkJfQogCX0KICBsZWF2ZToKLQljcHVfY2xlYXIoY3B1LCBjcHVzX2luX3htb24pOworCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgJmNwdXNfaW5feG1vbik7CiAJeG1vbl9mYXVsdF9qbXBbY3B1XSA9IE5VTEw7CiAjZWxzZQogCS8qIFVQIGlzIHNpbXBsZS4uLiAqLwpAQCAtNTI5LDcgKzUyOSw3IEBACiAJCX0KIAl9CiAjZWxzZQotCWlmICgocmVncy0+bXNyICYgKE1TUl9JUnxNU1JfUFJ8TVNSX1NGKSkgPT0gKE1TUl9JUnxNU1JfU0YpKSB7CisJaWYgKChyZWdzLT5tc3IgJiAoTVNSX0lSfE1TUl9QUnxNU1JfNjRCSVQpKSA9PSAoTVNSX0lSfE1TUl82NEJJVCkpIHsKIAkJYnAgPSBhdF9icmVha3BvaW50KHJlZ3MtPm5pcCk7CiAJCWlmIChicCAhPSBOVUxMKSB7CiAJCQlpbnQgc3RlcHBlZCA9IGVtdWxhdGVfc3RlcChyZWdzLCBicC0+aW5zdHJbMF0pOwpAQCAtNTc4LDcgKzU3OCw3IEBACiAJc3RydWN0IGJwdCAqYnA7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CiAKLQlpZiAoKHJlZ3MtPm1zciAmIChNU1JfSVJ8TVNSX1BSfE1TUl9TRikpICE9IChNU1JfSVJ8TVNSX1NGKSkKKwlpZiAoKHJlZ3MtPm1zciAmIChNU1JfSVJ8TVNSX1BSfE1TUl82NEJJVCkpICE9IChNU1JfSVJ8TVNSXzY0QklUKSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBBcmUgd2UgYXQgdGhlIHRyYXAgYXQgYnAtPmluc3RyWzFdIGZvciBzb21lIGJwPyAqLwpAQCAtNjA5LDcgKzYwOSw3IEBACiAKIHN0YXRpYyBpbnQgeG1vbl9kYWJyX21hdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWlmICgocmVncy0+bXNyICYgKE1TUl9JUnxNU1JfUFJ8TVNSX1NGKSkgIT0gKE1TUl9JUnxNU1JfU0YpKQorCWlmICgocmVncy0+bXNyICYgKE1TUl9JUnxNU1JfUFJ8TVNSXzY0QklUKSkgIT0gKE1TUl9JUnxNU1JfNjRCSVQpKQogCQlyZXR1cm4gMDsKIAlpZiAoZGFici5lbmFibGVkID09IDApCiAJCXJldHVybiAwOwpAQCAtNjE5LDcgKzYxOSw3IEBACiAKIHN0YXRpYyBpbnQgeG1vbl9pYWJyX21hdGNoKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWlmICgocmVncy0+bXNyICYgKE1TUl9JUnxNU1JfUFJ8TVNSX1NGKSkgIT0gKE1TUl9JUnxNU1JfU0YpKQorCWlmICgocmVncy0+bXNyICYgKE1TUl9JUnxNU1JfUFJ8TVNSXzY0QklUKSkgIT0gKE1TUl9JUnxNU1JfNjRCSVQpKQogCQlyZXR1cm4gMDsKIAlpZiAoaWFiciA9PSBOVUxMKQogCQlyZXR1cm4gMDsKQEAgLTYzMCw3ICs2MzAsNyBAQAogc3RhdGljIGludCB4bW9uX2lwaShzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKICNpZmRlZiBDT05GSUdfU01QCi0JaWYgKGluX3htb24gJiYgIWNwdV9pc3NldChzbXBfcHJvY2Vzc29yX2lkKCksIGNwdXNfaW5feG1vbikpCisJaWYgKGluX3htb24gJiYgIWNwdW1hc2tfdGVzdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCAmY3B1c19pbl94bW9uKSkKIAkJeG1vbl9jb3JlKHJlZ3MsIDEpOwogI2VuZGlmCiAJcmV0dXJuIDA7CkBAIC02NDQsNyArNjQ0LDcgQEAKIAlpZiAoaW5feG1vbiAmJiBjYXRjaF9tZW1vcnlfZXJyb3JzKQogCQloYW5kbGVfZmF1bHQocmVncyk7CS8qIGRvZXNuJ3QgcmV0dXJuICovCiAKLQlpZiAoKHJlZ3MtPm1zciAmIChNU1JfSVJ8TVNSX1BSfE1TUl9TRikpID09IChNU1JfSVJ8TVNSX1NGKSkgeworCWlmICgocmVncy0+bXNyICYgKE1TUl9JUnxNU1JfUFJ8TVNSXzY0QklUKSkgPT0gKE1TUl9JUnxNU1JfNjRCSVQpKSB7CiAJCWJwID0gaW5fYnJlYWtwb2ludF90YWJsZShyZWdzLT5uaXAsICZvZmZzZXQpOwogCQlpZiAoYnAgIT0gTlVMTCkgewogCQkJcmVncy0+bmlwID0gYnAtPmFkZHJlc3MgKyBvZmZzZXQ7CkBAIC05MjksNyArOTI5LDcgQEAKIAlpbnQgc3RlcHBlZDsKIAogCS8qIGNoZWNrIHdlIGFyZSBpbiA2NC1iaXQga2VybmVsIG1vZGUsIHRyYW5zbGF0aW9uIGVuYWJsZWQgKi8KLQlpZiAoKHJlZ3MtPm1zciAmIChNU1JfU0Z8TVNSX1BSfE1TUl9JUikpID09IChNU1JfU0Z8TVNSX0lSKSkgeworCWlmICgocmVncy0+bXNyICYgKE1TUl82NEJJVHxNU1JfUFJ8TVNSX0lSKSkgPT0gKE1TUl82NEJJVHxNU1JfSVIpKSB7CiAJCWlmIChtcmVhZChyZWdzLT5uaXAsICZpbnN0ciwgNCkgPT0gNCkgewogCQkJc3RlcHBlZCA9IGVtdWxhdGVfc3RlcChyZWdzLCBpbnN0cik7CiAJCQlpZiAoc3RlcHBlZCA8IDApIHsKQEAgLTk3Niw3ICs5NzYsNyBAQAogCQlwcmludGYoImNwdXMgc3RvcHBlZDoiKTsKIAkJY291bnQgPSAwOwogCQlmb3IgKGNwdSA9IDA7IGNwdSA8IE5SX0NQVVM7ICsrY3B1KSB7Ci0JCQlpZiAoY3B1X2lzc2V0KGNwdSwgY3B1c19pbl94bW9uKSkgeworCQkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCAmY3B1c19pbl94bW9uKSkgewogCQkJCWlmIChjb3VudCA9PSAwKQogCQkJCQlwcmludGYoIiAleCIsIGNwdSk7CiAJCQkJKytjb3VudDsKQEAgLTk5Miw3ICs5OTIsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAJLyogdHJ5IHRvIHN3aXRjaCB0byBjcHUgc3BlY2lmaWVkICovCi0JaWYgKCFjcHVfaXNzZXQoY3B1LCBjcHVzX2luX3htb24pKSB7CisJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgJmNwdXNfaW5feG1vbikpIHsKIAkJcHJpbnRmKCJjcHUgMHgleCBpc24ndCBpbiB4bW9uXG4iLCBjcHUpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xNDk3LDYgKzE0OTcsMTAgQEAKICNlbmRpZgogCXByaW50ZigicGMgID0gIik7CiAJeG1vbl9wcmludF9zeW1ib2woZnAtPm5pcCwgIiAiLCAiXG4iKTsKKwlpZiAoVFJBUChmcCkgIT0gMHhjMDAgJiYgY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfQ0ZBUikpIHsKKwkJcHJpbnRmKCJjZmFyPSAiKTsKKwkJeG1vbl9wcmludF9zeW1ib2woZnAtPm9yaWdfZ3ByMywgIiAiLCAiXG4iKTsKKwl9CiAJcHJpbnRmKCJsciAgPSAiKTsKIAl4bW9uX3ByaW50X3N5bWJvbChmcC0+bGluaywgIiAiLCAiXG4iKTsKIAlwcmludGYoIm1zciA9ICJSRUciICAgY3IgID0gJS44bHhcbiIsIGZwLT5tc3IsIGZwLT5jY3IpOwpAQCAtMjY2Myw3ICsyNjY3LDcgQEAKIAogdm9pZCBkdW1wX3NlZ21lbnRzKHZvaWQpCiB7Ci0JaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1NMQikpCisJaWYgKG1tdV9oYXNfZmVhdHVyZShNTVVfRlRSX1NMQikpCiAJCWR1bXBfc2xiKCk7CiAJZWxzZQogCQlkdW1wX3N0YWIoKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWcKaW5kZXggMjUwOGE2Zi4uNGE3ZjE0MCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKKysrIGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTg4LDYgKzg4LDcgQEAKIAlzZWxlY3QgSEFWRV9LRVJORUxfWFoKIAlzZWxlY3QgSEFWRV9HRVRfVVNFUl9QQUdFU19GQVNUCiAJc2VsZWN0IEhBVkVfQVJDSF9NVVRFWF9DUFVfUkVMQVgKKwlzZWxlY3QgSEFWRV9BUkNIX0pVTVBfTEFCRUwgaWYgIU1BUkNIX0c1CiAJc2VsZWN0IEFSQ0hfSU5MSU5FX1NQSU5fVFJZTE9DSwogCXNlbGVjdCBBUkNIX0lOTElORV9TUElOX1RSWUxPQ0tfQkgKIAlzZWxlY3QgQVJDSF9JTkxJTkVfU1BJTl9MT0NLCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL01ha2VmaWxlIGIvYXJjaC9zMzkwL2NyeXB0by9NYWtlZmlsZQppbmRleCAxY2Y4MWQ3Li43ZjBiN2NkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL01ha2VmaWxlCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vTWFrZWZpbGUKQEAgLTgsMyArOCw0IEBACiBvYmotJChDT05GSUdfQ1JZUFRPX0RFU19TMzkwKSArPSBkZXNfczM5MC5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0FFU19TMzkwKSArPSBhZXNfczM5MC5vCiBvYmotJChDT05GSUdfUzM5MF9QUk5HKSArPSBwcm5nLm8KK29iai0kKENPTkZJR19DUllQVE9fR0hBU0hfUzM5MCkgKz0gZ2hhc2hfczM5MC5vCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL2Flc19zMzkwLmMgYi9hcmNoL3MzOTAvY3J5cHRvL2Flc19zMzkwLmMKaW5kZXggNThmNDY3My4uYTljZTEzNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9hZXNfczM5MC5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vYWVzX3MzOTAuYwpAQCAtMzEsNyArMzEsOCBAQAogI2RlZmluZSBBRVNfS0VZTEVOXzE5MgkJMgogI2RlZmluZSBBRVNfS0VZTEVOXzI1NgkJNAogCi1zdGF0aWMgY2hhciBrZXlsZW5fZmxhZyA9IDA7CitzdGF0aWMgdTggKmN0cmJsazsKK3N0YXRpYyBjaGFyIGtleWxlbl9mbGFnOwogCiBzdHJ1Y3QgczM5MF9hZXNfY3R4IHsKIAl1OCBpdltBRVNfQkxPQ0tfU0laRV07CkBAIC00NSw2ICs0NiwyNCBAQAogCX0gZmFsbGJhY2s7CiB9OwogCitzdHJ1Y3QgcGNjX3BhcmFtIHsKKwl1OCBrZXlbMzJdOworCXU4IHR3ZWFrWzE2XTsKKwl1OCBibG9ja1sxNl07CisJdTggYml0WzE2XTsKKwl1OCB4dHNbMTZdOworfTsKKworc3RydWN0IHMzOTBfeHRzX2N0eCB7CisJdTgga2V5WzMyXTsKKwl1OCB4dHNfcGFyYW1bMTZdOworCXN0cnVjdCBwY2NfcGFyYW0gcGNjOworCWxvbmcgZW5jOworCWxvbmcgZGVjOworCWludCBrZXlfbGVuOworCXN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICpmYWxsYmFjazsKK307CisKIC8qCiAgKiBDaGVjayBpZiB0aGUga2V5X2xlbiBpcyBzdXBwb3J0ZWQgYnkgdGhlIEhXLgogICogUmV0dXJucyAwIGlmIGl0IGlzLCBhIHBvc2l0aXZlIG51bWJlciBpZiBpdCBpcyBub3QgYW5kIHNvZnR3YXJlIGZhbGxiYWNrIGlzCkBAIC01MDQsMTUgKzUyMywzMzcgQEAKIAl9CiB9OwogCitzdGF0aWMgaW50IHh0c19mYWxsYmFja19zZXRrZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmtleSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgbGVuKQoreworCXN0cnVjdCBzMzkwX3h0c19jdHggKnh0c19jdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXVuc2lnbmVkIGludCByZXQ7CisKKwl4dHNfY3R4LT5mYWxsYmFjay0+YmFzZS5jcnRfZmxhZ3MgJj0gfkNSWVBUT19URk1fUkVRX01BU0s7CisJeHRzX2N0eC0+ZmFsbGJhY2stPmJhc2UuY3J0X2ZsYWdzIHw9ICh0Zm0tPmNydF9mbGFncyAmCisJCQlDUllQVE9fVEZNX1JFUV9NQVNLKTsKKworCXJldCA9IGNyeXB0b19ibGtjaXBoZXJfc2V0a2V5KHh0c19jdHgtPmZhbGxiYWNrLCBrZXksIGxlbik7CisJaWYgKHJldCkgeworCQl0Zm0tPmNydF9mbGFncyAmPSB+Q1JZUFRPX1RGTV9SRVNfTUFTSzsKKwkJdGZtLT5jcnRfZmxhZ3MgfD0gKHh0c19jdHgtPmZhbGxiYWNrLT5iYXNlLmNydF9mbGFncyAmCisJCQkJQ1JZUFRPX1RGTV9SRVNfTUFTSyk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgeHRzX2ZhbGxiYWNrX2RlY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCXVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IHMzOTBfeHRzX2N0eCAqeHRzX2N0eCA9IGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSk7CisJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbTsKKwl1bnNpZ25lZCBpbnQgcmV0OworCisJdGZtID0gZGVzYy0+dGZtOworCWRlc2MtPnRmbSA9IHh0c19jdHgtPmZhbGxiYWNrOworCisJcmV0ID0gY3J5cHRvX2Jsa2NpcGhlcl9kZWNyeXB0X2l2KGRlc2MsIGRzdCwgc3JjLCBuYnl0ZXMpOworCisJZGVzYy0+dGZtID0gdGZtOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgeHRzX2ZhbGxiYWNrX2VuY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCXVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IHMzOTBfeHRzX2N0eCAqeHRzX2N0eCA9IGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSk7CisJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbTsKKwl1bnNpZ25lZCBpbnQgcmV0OworCisJdGZtID0gZGVzYy0+dGZtOworCWRlc2MtPnRmbSA9IHh0c19jdHgtPmZhbGxiYWNrOworCisJcmV0ID0gY3J5cHRvX2Jsa2NpcGhlcl9lbmNyeXB0X2l2KGRlc2MsIGRzdCwgc3JjLCBuYnl0ZXMpOworCisJZGVzYy0+dGZtID0gdGZtOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgeHRzX2Flc19zZXRfa2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICppbl9rZXksCisJCQkgICB1bnNpZ25lZCBpbnQga2V5X2xlbikKK3sKKwlzdHJ1Y3QgczM5MF94dHNfY3R4ICp4dHNfY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwl1MzIgKmZsYWdzID0gJnRmbS0+Y3J0X2ZsYWdzOworCisJc3dpdGNoIChrZXlfbGVuKSB7CisJY2FzZSAzMjoKKwkJeHRzX2N0eC0+ZW5jID0gS01fWFRTXzEyOF9FTkNSWVBUOworCQl4dHNfY3R4LT5kZWMgPSBLTV9YVFNfMTI4X0RFQ1JZUFQ7CisJCW1lbWNweSh4dHNfY3R4LT5rZXkgKyAxNiwgaW5fa2V5LCAxNik7CisJCW1lbWNweSh4dHNfY3R4LT5wY2Mua2V5ICsgMTYsIGluX2tleSArIDE2LCAxNik7CisJCWJyZWFrOworCWNhc2UgNDg6CisJCXh0c19jdHgtPmVuYyA9IDA7CisJCXh0c19jdHgtPmRlYyA9IDA7CisJCXh0c19mYWxsYmFja19zZXRrZXkodGZtLCBpbl9rZXksIGtleV9sZW4pOworCQlicmVhazsKKwljYXNlIDY0OgorCQl4dHNfY3R4LT5lbmMgPSBLTV9YVFNfMjU2X0VOQ1JZUFQ7CisJCXh0c19jdHgtPmRlYyA9IEtNX1hUU18yNTZfREVDUllQVDsKKwkJbWVtY3B5KHh0c19jdHgtPmtleSwgaW5fa2V5LCAzMik7CisJCW1lbWNweSh4dHNfY3R4LT5wY2Mua2V5LCBpbl9rZXkgKyAzMiwgMzIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkqZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU47CisJCXJldHVybiAtRUlOVkFMOworCX0KKwl4dHNfY3R4LT5rZXlfbGVuID0ga2V5X2xlbjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4dHNfYWVzX2NyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywgbG9uZyBmdW5jLAorCQkJIHN0cnVjdCBzMzkwX3h0c19jdHggKnh0c19jdHgsCisJCQkgc3RydWN0IGJsa2NpcGhlcl93YWxrICp3YWxrKQoreworCXVuc2lnbmVkIGludCBvZmZzZXQgPSAoeHRzX2N0eC0+a2V5X2xlbiA+PiAxKSAmIDB4MTA7CisJaW50IHJldCA9IGJsa2NpcGhlcl93YWxrX3ZpcnQoZGVzYywgd2Fsayk7CisJdW5zaWduZWQgaW50IG5ieXRlcyA9IHdhbGstPm5ieXRlczsKKwl1bnNpZ25lZCBpbnQgbjsKKwl1OCAqaW4sICpvdXQ7CisJdm9pZCAqcGFyYW07CisKKwlpZiAoIW5ieXRlcykKKwkJZ290byBvdXQ7CisKKwltZW1zZXQoeHRzX2N0eC0+cGNjLmJsb2NrLCAwLCBzaXplb2YoeHRzX2N0eC0+cGNjLmJsb2NrKSk7CisJbWVtc2V0KHh0c19jdHgtPnBjYy5iaXQsIDAsIHNpemVvZih4dHNfY3R4LT5wY2MuYml0KSk7CisJbWVtc2V0KHh0c19jdHgtPnBjYy54dHMsIDAsIHNpemVvZih4dHNfY3R4LT5wY2MueHRzKSk7CisJbWVtY3B5KHh0c19jdHgtPnBjYy50d2Vhaywgd2Fsay0+aXYsIHNpemVvZih4dHNfY3R4LT5wY2MudHdlYWspKTsKKwlwYXJhbSA9IHh0c19jdHgtPnBjYy5rZXkgKyBvZmZzZXQ7CisJcmV0ID0gY3J5cHRfczM5MF9wY2MoZnVuYywgcGFyYW0pOworCUJVR19PTihyZXQgPCAwKTsKKworCW1lbWNweSh4dHNfY3R4LT54dHNfcGFyYW0sIHh0c19jdHgtPnBjYy54dHMsIDE2KTsKKwlwYXJhbSA9IHh0c19jdHgtPmtleSArIG9mZnNldDsKKwlkbyB7CisJCS8qIG9ubHkgdXNlIGNvbXBsZXRlIGJsb2NrcyAqLworCQluID0gbmJ5dGVzICYgfihBRVNfQkxPQ0tfU0laRSAtIDEpOworCQlvdXQgPSB3YWxrLT5kc3QudmlydC5hZGRyOworCQlpbiA9IHdhbGstPnNyYy52aXJ0LmFkZHI7CisKKwkJcmV0ID0gY3J5cHRfczM5MF9rbShmdW5jLCBwYXJhbSwgb3V0LCBpbiwgbik7CisJCUJVR19PTihyZXQgPCAwIHx8IHJldCAhPSBuKTsKKworCQluYnl0ZXMgJj0gQUVTX0JMT0NLX1NJWkUgLSAxOworCQlyZXQgPSBibGtjaXBoZXJfd2Fsa19kb25lKGRlc2MsIHdhbGssIG5ieXRlcyk7CisJfSB3aGlsZSAoKG5ieXRlcyA9IHdhbGstPm5ieXRlcykpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgeHRzX2Flc19lbmNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJCSAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IHMzOTBfeHRzX2N0eCAqeHRzX2N0eCA9IGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSk7CisJc3RydWN0IGJsa2NpcGhlcl93YWxrIHdhbGs7CisKKwlpZiAodW5saWtlbHkoeHRzX2N0eC0+a2V5X2xlbiA9PSA0OCkpCisJCXJldHVybiB4dHNfZmFsbGJhY2tfZW5jcnlwdChkZXNjLCBkc3QsIHNyYywgbmJ5dGVzKTsKKworCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOworCXJldHVybiB4dHNfYWVzX2NyeXB0KGRlc2MsIHh0c19jdHgtPmVuYywgeHRzX2N0eCwgJndhbGspOworfQorCitzdGF0aWMgaW50IHh0c19hZXNfZGVjcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCQkgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCXN0cnVjdCBzMzkwX3h0c19jdHggKnh0c19jdHggPSBjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pOworCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOworCisJaWYgKHVubGlrZWx5KHh0c19jdHgtPmtleV9sZW4gPT0gNDgpKQorCQlyZXR1cm4geHRzX2ZhbGxiYWNrX2RlY3J5cHQoZGVzYywgZHN0LCBzcmMsIG5ieXRlcyk7CisKKwlibGtjaXBoZXJfd2Fsa19pbml0KCZ3YWxrLCBkc3QsIHNyYywgbmJ5dGVzKTsKKwlyZXR1cm4geHRzX2Flc19jcnlwdChkZXNjLCB4dHNfY3R4LT5kZWMsIHh0c19jdHgsICZ3YWxrKTsKK30KKworc3RhdGljIGludCB4dHNfZmFsbGJhY2tfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCWNvbnN0IGNoYXIgKm5hbWUgPSB0Zm0tPl9fY3J0X2FsZy0+Y3JhX25hbWU7CisJc3RydWN0IHMzOTBfeHRzX2N0eCAqeHRzX2N0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisKKwl4dHNfY3R4LT5mYWxsYmFjayA9IGNyeXB0b19hbGxvY19ibGtjaXBoZXIobmFtZSwgMCwKKwkJCUNSWVBUT19BTEdfQVNZTkMgfCBDUllQVE9fQUxHX05FRURfRkFMTEJBQ0spOworCisJaWYgKElTX0VSUih4dHNfY3R4LT5mYWxsYmFjaykpIHsKKwkJcHJfZXJyKCJBbGxvY2F0aW5nIFhUUyBmYWxsYmFjayBhbGdvcml0aG0gJXMgZmFpbGVkXG4iLAorCQkgICAgICAgbmFtZSk7CisJCXJldHVybiBQVFJfRVJSKHh0c19jdHgtPmZhbGxiYWNrKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHh0c19mYWxsYmFja19leGl0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJc3RydWN0IHMzOTBfeHRzX2N0eCAqeHRzX2N0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisKKwljcnlwdG9fZnJlZV9ibGtjaXBoZXIoeHRzX2N0eC0+ZmFsbGJhY2spOworCXh0c19jdHgtPmZhbGxiYWNrID0gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIHh0c19hZXNfYWxnID0geworCS5jcmFfbmFtZQkJPQkieHRzKGFlcykiLAorCS5jcmFfZHJpdmVyX25hbWUJPQkieHRzLWFlcy1zMzkwIiwKKwkuY3JhX3ByaW9yaXR5CQk9CUNSWVBUX1MzOTBfQ09NUE9TSVRFX1BSSU9SSVRZLAorCS5jcmFfZmxhZ3MJCT0JQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUiB8CisJCQkJCUNSWVBUT19BTEdfTkVFRF9GQUxMQkFDSywKKwkuY3JhX2Jsb2Nrc2l6ZQkJPQlBRVNfQkxPQ0tfU0laRSwKKwkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBzMzkwX3h0c19jdHgpLAorCS5jcmFfdHlwZQkJPQkmY3J5cHRvX2Jsa2NpcGhlcl90eXBlLAorCS5jcmFfbW9kdWxlCQk9CVRISVNfTU9EVUxFLAorCS5jcmFfbGlzdAkJPQlMSVNUX0hFQURfSU5JVCh4dHNfYWVzX2FsZy5jcmFfbGlzdCksCisJLmNyYV9pbml0CQk9CXh0c19mYWxsYmFja19pbml0LAorCS5jcmFfZXhpdAkJPQl4dHNfZmFsbGJhY2tfZXhpdCwKKwkuY3JhX3UJCQk9CXsKKwkJLmJsa2NpcGhlciA9IHsKKwkJCS5taW5fa2V5c2l6ZQkJPQkyICogQUVTX01JTl9LRVlfU0laRSwKKwkJCS5tYXhfa2V5c2l6ZQkJPQkyICogQUVTX01BWF9LRVlfU0laRSwKKwkJCS5pdnNpemUJCQk9CUFFU19CTE9DS19TSVpFLAorCQkJLnNldGtleQkJCT0JeHRzX2Flc19zZXRfa2V5LAorCQkJLmVuY3J5cHQJCT0JeHRzX2Flc19lbmNyeXB0LAorCQkJLmRlY3J5cHQJCT0JeHRzX2Flc19kZWNyeXB0LAorCQl9CisJfQorfTsKKworc3RhdGljIGludCBjdHJfYWVzX3NldF9rZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmluX2tleSwKKwkJCSAgIHVuc2lnbmVkIGludCBrZXlfbGVuKQoreworCXN0cnVjdCBzMzkwX2Flc19jdHggKnNjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCisJc3dpdGNoIChrZXlfbGVuKSB7CisJY2FzZSAxNjoKKwkJc2N0eC0+ZW5jID0gS01DVFJfQUVTXzEyOF9FTkNSWVBUOworCQlzY3R4LT5kZWMgPSBLTUNUUl9BRVNfMTI4X0RFQ1JZUFQ7CisJCWJyZWFrOworCWNhc2UgMjQ6CisJCXNjdHgtPmVuYyA9IEtNQ1RSX0FFU18xOTJfRU5DUllQVDsKKwkJc2N0eC0+ZGVjID0gS01DVFJfQUVTXzE5Ml9ERUNSWVBUOworCQlicmVhazsKKwljYXNlIDMyOgorCQlzY3R4LT5lbmMgPSBLTUNUUl9BRVNfMjU2X0VOQ1JZUFQ7CisJCXNjdHgtPmRlYyA9IEtNQ1RSX0FFU18yNTZfREVDUllQVDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGFlc19zZXRfa2V5KHRmbSwgaW5fa2V5LCBrZXlfbGVuKTsKK30KKworc3RhdGljIGludCBjdHJfYWVzX2NyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywgbG9uZyBmdW5jLAorCQkJIHN0cnVjdCBzMzkwX2Flc19jdHggKnNjdHgsIHN0cnVjdCBibGtjaXBoZXJfd2FsayAqd2FsaykKK3sKKwlpbnQgcmV0ID0gYmxrY2lwaGVyX3dhbGtfdmlydF9ibG9jayhkZXNjLCB3YWxrLCBBRVNfQkxPQ0tfU0laRSk7CisJdW5zaWduZWQgaW50IGksIG4sIG5ieXRlczsKKwl1OCBidWZbQUVTX0JMT0NLX1NJWkVdOworCXU4ICpvdXQsICppbjsKKworCWlmICghd2Fsay0+bmJ5dGVzKQorCQlyZXR1cm4gcmV0OworCisJbWVtY3B5KGN0cmJsaywgd2Fsay0+aXYsIEFFU19CTE9DS19TSVpFKTsKKwl3aGlsZSAoKG5ieXRlcyA9IHdhbGstPm5ieXRlcykgPj0gQUVTX0JMT0NLX1NJWkUpIHsKKwkJb3V0ID0gd2Fsay0+ZHN0LnZpcnQuYWRkcjsKKwkJaW4gPSB3YWxrLT5zcmMudmlydC5hZGRyOworCQl3aGlsZSAobmJ5dGVzID49IEFFU19CTE9DS19TSVpFKSB7CisJCQkvKiBvbmx5IHVzZSBjb21wbGV0ZSBibG9ja3MsIG1heC4gUEFHRV9TSVpFICovCisJCQluID0gKG5ieXRlcyA+IFBBR0VfU0laRSkgPyBQQUdFX1NJWkUgOgorCQkJCQkJIG5ieXRlcyAmIH4oQUVTX0JMT0NLX1NJWkUgLSAxKTsKKwkJCWZvciAoaSA9IEFFU19CTE9DS19TSVpFOyBpIDwgbjsgaSArPSBBRVNfQkxPQ0tfU0laRSkgeworCQkJCW1lbWNweShjdHJibGsgKyBpLCBjdHJibGsgKyBpIC0gQUVTX0JMT0NLX1NJWkUsCisJCQkJICAgICAgIEFFU19CTE9DS19TSVpFKTsKKwkJCQljcnlwdG9faW5jKGN0cmJsayArIGksIEFFU19CTE9DS19TSVpFKTsKKwkJCX0KKwkJCXJldCA9IGNyeXB0X3MzOTBfa21jdHIoZnVuYywgc2N0eC0+a2V5LCBvdXQsIGluLCBuLCBjdHJibGspOworCQkJQlVHX09OKHJldCA8IDAgfHwgcmV0ICE9IG4pOworCQkJaWYgKG4gPiBBRVNfQkxPQ0tfU0laRSkKKwkJCQltZW1jcHkoY3RyYmxrLCBjdHJibGsgKyBuIC0gQUVTX0JMT0NLX1NJWkUsCisJCQkJICAgICAgIEFFU19CTE9DS19TSVpFKTsKKwkJCWNyeXB0b19pbmMoY3RyYmxrLCBBRVNfQkxPQ0tfU0laRSk7CisJCQlvdXQgKz0gbjsKKwkJCWluICs9IG47CisJCQluYnl0ZXMgLT0gbjsKKwkJfQorCQlyZXQgPSBibGtjaXBoZXJfd2Fsa19kb25lKGRlc2MsIHdhbGssIG5ieXRlcyk7CisJfQorCS8qCisJICogZmluYWwgYmxvY2sgbWF5IGJlIDwgQUVTX0JMT0NLX1NJWkUsIGNvcHkgb25seSBuYnl0ZXMKKwkgKi8KKwlpZiAobmJ5dGVzKSB7CisJCW91dCA9IHdhbGstPmRzdC52aXJ0LmFkZHI7CisJCWluID0gd2Fsay0+c3JjLnZpcnQuYWRkcjsKKwkJcmV0ID0gY3J5cHRfczM5MF9rbWN0cihmdW5jLCBzY3R4LT5rZXksIGJ1ZiwgaW4sCisJCQkJICAgICAgIEFFU19CTE9DS19TSVpFLCBjdHJibGspOworCQlCVUdfT04ocmV0IDwgMCB8fCByZXQgIT0gQUVTX0JMT0NLX1NJWkUpOworCQltZW1jcHkob3V0LCBidWYsIG5ieXRlcyk7CisJCWNyeXB0b19pbmMoY3RyYmxrLCBBRVNfQkxPQ0tfU0laRSk7CisJCXJldCA9IGJsa2NpcGhlcl93YWxrX2RvbmUoZGVzYywgd2FsaywgMCk7CisJfQorCW1lbWNweSh3YWxrLT5pdiwgY3RyYmxrLCBBRVNfQkxPQ0tfU0laRSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjdHJfYWVzX2VuY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkJICAgdW5zaWduZWQgaW50IG5ieXRlcykKK3sKKwlzdHJ1Y3QgczM5MF9hZXNfY3R4ICpzY3R4ID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKTsKKwlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKKworCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOworCXJldHVybiBjdHJfYWVzX2NyeXB0KGRlc2MsIHNjdHgtPmVuYywgc2N0eCwgJndhbGspOworfQorCitzdGF0aWMgaW50IGN0cl9hZXNfZGVjcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCQkgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCXN0cnVjdCBzMzkwX2Flc19jdHggKnNjdHggPSBjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pOworCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOworCisJYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7CisJcmV0dXJuIGN0cl9hZXNfY3J5cHQoZGVzYywgc2N0eC0+ZGVjLCBzY3R4LCAmd2Fsayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBjdHJfYWVzX2FsZyA9IHsKKwkuY3JhX25hbWUJCT0JImN0cihhZXMpIiwKKwkuY3JhX2RyaXZlcl9uYW1lCT0JImN0ci1hZXMtczM5MCIsCisJLmNyYV9wcmlvcml0eQkJPQlDUllQVF9TMzkwX0NPTVBPU0lURV9QUklPUklUWSwKKwkuY3JhX2ZsYWdzCQk9CUNSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVIsCisJLmNyYV9ibG9ja3NpemUJCT0JMSwKKwkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBzMzkwX2Flc19jdHgpLAorCS5jcmFfdHlwZQkJPQkmY3J5cHRvX2Jsa2NpcGhlcl90eXBlLAorCS5jcmFfbW9kdWxlCQk9CVRISVNfTU9EVUxFLAorCS5jcmFfbGlzdAkJPQlMSVNUX0hFQURfSU5JVChjdHJfYWVzX2FsZy5jcmFfbGlzdCksCisJLmNyYV91CQkJPQl7CisJCS5ibGtjaXBoZXIgPSB7CisJCQkubWluX2tleXNpemUJCT0JQUVTX01JTl9LRVlfU0laRSwKKwkJCS5tYXhfa2V5c2l6ZQkJPQlBRVNfTUFYX0tFWV9TSVpFLAorCQkJLml2c2l6ZQkJCT0JQUVTX0JMT0NLX1NJWkUsCisJCQkuc2V0a2V5CQkJPQljdHJfYWVzX3NldF9rZXksCisJCQkuZW5jcnlwdAkJPQljdHJfYWVzX2VuY3J5cHQsCisJCQkuZGVjcnlwdAkJPQljdHJfYWVzX2RlY3J5cHQsCisJCX0KKwl9Cit9OworCiBzdGF0aWMgaW50IF9faW5pdCBhZXNfczM5MF9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIAotCWlmIChjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKEtNX0FFU18xMjhfRU5DUllQVCkpCisJaWYgKGNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS01fQUVTXzEyOF9FTkNSWVBULCBDUllQVF9TMzkwX01TQSkpCiAJCWtleWxlbl9mbGFnIHw9IEFFU19LRVlMRU5fMTI4OwotCWlmIChjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKEtNX0FFU18xOTJfRU5DUllQVCkpCisJaWYgKGNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS01fQUVTXzE5Ml9FTkNSWVBULCBDUllQVF9TMzkwX01TQSkpCiAJCWtleWxlbl9mbGFnIHw9IEFFU19LRVlMRU5fMTkyOwotCWlmIChjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKEtNX0FFU18yNTZfRU5DUllQVCkpCisJaWYgKGNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS01fQUVTXzI1Nl9FTkNSWVBULCBDUllQVF9TMzkwX01TQSkpCiAJCWtleWxlbl9mbGFnIHw9IEFFU19LRVlMRU5fMjU2OwogCiAJaWYgKCFrZXlsZW5fZmxhZykKQEAgLTUzNSw5ICs4NzYsNDAgQEAKIAlpZiAocmV0KQogCQlnb3RvIGNiY19hZXNfZXJyOwogCisJaWYgKGNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS01fWFRTXzEyOF9FTkNSWVBULAorCQkJQ1JZUFRfUzM5MF9NU0EgfCBDUllQVF9TMzkwX01TQTQpICYmCisJICAgIGNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS01fWFRTXzI1Nl9FTkNSWVBULAorCQkJQ1JZUFRfUzM5MF9NU0EgfCBDUllQVF9TMzkwX01TQTQpKSB7CisJCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJnh0c19hZXNfYWxnKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8geHRzX2Flc19lcnI7CisJfQorCisJaWYgKGNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS01DVFJfQUVTXzEyOF9FTkNSWVBULAorCQkJCUNSWVBUX1MzOTBfTVNBIHwgQ1JZUFRfUzM5MF9NU0E0KSAmJgorCSAgICBjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKEtNQ1RSX0FFU18xOTJfRU5DUllQVCwKKwkJCQlDUllQVF9TMzkwX01TQSB8IENSWVBUX1MzOTBfTVNBNCkgJiYKKwkgICAgY3J5cHRfczM5MF9mdW5jX2F2YWlsYWJsZShLTUNUUl9BRVNfMjU2X0VOQ1JZUFQsCisJCQkJQ1JZUFRfUzM5MF9NU0EgfCBDUllQVF9TMzkwX01TQTQpKSB7CisJCWN0cmJsayA9ICh1OCAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCWlmICghY3RyYmxrKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBjdHJfYWVzX2VycjsKKwkJfQorCQlyZXQgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZjdHJfYWVzX2FsZyk7CisJCWlmIChyZXQpIHsKKwkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgY3RyYmxrKTsKKwkJCWdvdG8gY3RyX2Flc19lcnI7CisJCX0KKwl9CisKIG91dDoKIAlyZXR1cm4gcmV0OwogCitjdHJfYWVzX2VycjoKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJnh0c19hZXNfYWxnKTsKK3h0c19hZXNfZXJyOgorCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmY2JjX2Flc19hbGcpOwogY2JjX2Flc19lcnI6CiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZlY2JfYWVzX2FsZyk7CiBlY2JfYWVzX2VycjoKQEAgLTU0OCw2ICs5MjAsOSBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWVzX3MzOTBfZmluaSh2b2lkKQogeworCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmY3RyX2Flc19hbGcpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgY3RyYmxrKTsKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJnh0c19hZXNfYWxnKTsKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmNiY19hZXNfYWxnKTsKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmVjYl9hZXNfYWxnKTsKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFlc19hbGcpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NyeXB0by9jcnlwdF9zMzkwLmggYi9hcmNoL3MzOTAvY3J5cHRvL2NyeXB0X3MzOTAuaAppbmRleCA3ZWU5YTFiLi40OTY3Njc3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL2NyeXB0X3MzOTAuaAorKysgYi9hcmNoL3MzOTAvY3J5cHRvL2NyeXB0X3MzOTAuaApAQCAtMjQsMTMgKzI0LDE4IEBACiAjZGVmaW5lIENSWVBUX1MzOTBfUFJJT1JJVFkgMzAwCiAjZGVmaW5lIENSWVBUX1MzOTBfQ09NUE9TSVRFX1BSSU9SSVRZIDQwMAogCisjZGVmaW5lIENSWVBUX1MzOTBfTVNBCTB4MQorI2RlZmluZSBDUllQVF9TMzkwX01TQTMJMHgyCisjZGVmaW5lIENSWVBUX1MzOTBfTVNBNAkweDQKKwogLyogczM5MCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbnMgKi8KIGVudW0gY3J5cHRfczM5MF9vcGVyYXRpb25zIHsKIAlDUllQVF9TMzkwX0tNICAgPSAweDAxMDAsCiAJQ1JZUFRfUzM5MF9LTUMgID0gMHgwMjAwLAogCUNSWVBUX1MzOTBfS0lNRCA9IDB4MDMwMCwKIAlDUllQVF9TMzkwX0tMTUQgPSAweDA0MDAsCi0JQ1JZUFRfUzM5MF9LTUFDID0gMHgwNTAwCisJQ1JZUFRfUzM5MF9LTUFDID0gMHgwNTAwLAorCUNSWVBUX1MzOTBfS01DVFIgPSAweDA2MDAKIH07CiAKIC8qCkBAIC01MSw2ICs1NiwxMCBAQAogCUtNX0FFU18xOTJfREVDUllQVCAgPSBDUllQVF9TMzkwX0tNIHwgMHgxMyB8IDB4ODAsCiAJS01fQUVTXzI1Nl9FTkNSWVBUICA9IENSWVBUX1MzOTBfS00gfCAweDE0LAogCUtNX0FFU18yNTZfREVDUllQVCAgPSBDUllQVF9TMzkwX0tNIHwgMHgxNCB8IDB4ODAsCisJS01fWFRTXzEyOF9FTkNSWVBUICA9IENSWVBUX1MzOTBfS00gfCAweDMyLAorCUtNX1hUU18xMjhfREVDUllQVCAgPSBDUllQVF9TMzkwX0tNIHwgMHgzMiB8IDB4ODAsCisJS01fWFRTXzI1Nl9FTkNSWVBUICA9IENSWVBUX1MzOTBfS00gfCAweDM0LAorCUtNX1hUU18yNTZfREVDUllQVCAgPSBDUllQVF9TMzkwX0tNIHwgMHgzNCB8IDB4ODAsCiB9OwogCiAvKgpAQCAtNzUsNiArODQsMjYgQEAKIH07CiAKIC8qCisgKiBmdW5jdGlvbiBjb2RlcyBmb3IgS01DVFIgKENJUEhFUiBNRVNTQUdFIFdJVEggQ09VTlRFUikKKyAqIGluc3RydWN0aW9uCisgKi8KK2VudW0gY3J5cHRfczM5MF9rbWN0cl9mdW5jIHsKKwlLTUNUUl9RVUVSWSAgICAgICAgICAgID0gQ1JZUFRfUzM5MF9LTUNUUiB8IDB4MCwKKwlLTUNUUl9ERUFfRU5DUllQVCAgICAgID0gQ1JZUFRfUzM5MF9LTUNUUiB8IDB4MSwKKwlLTUNUUl9ERUFfREVDUllQVCAgICAgID0gQ1JZUFRfUzM5MF9LTUNUUiB8IDB4MSB8IDB4ODAsCisJS01DVFJfVERFQV8xMjhfRU5DUllQVCA9IENSWVBUX1MzOTBfS01DVFIgfCAweDIsCisJS01DVFJfVERFQV8xMjhfREVDUllQVCA9IENSWVBUX1MzOTBfS01DVFIgfCAweDIgfCAweDgwLAorCUtNQ1RSX1RERUFfMTkyX0VOQ1JZUFQgPSBDUllQVF9TMzkwX0tNQ1RSIHwgMHgzLAorCUtNQ1RSX1RERUFfMTkyX0RFQ1JZUFQgPSBDUllQVF9TMzkwX0tNQ1RSIHwgMHgzIHwgMHg4MCwKKwlLTUNUUl9BRVNfMTI4X0VOQ1JZUFQgID0gQ1JZUFRfUzM5MF9LTUNUUiB8IDB4MTIsCisJS01DVFJfQUVTXzEyOF9ERUNSWVBUICA9IENSWVBUX1MzOTBfS01DVFIgfCAweDEyIHwgMHg4MCwKKwlLTUNUUl9BRVNfMTkyX0VOQ1JZUFQgID0gQ1JZUFRfUzM5MF9LTUNUUiB8IDB4MTMsCisJS01DVFJfQUVTXzE5Ml9ERUNSWVBUICA9IENSWVBUX1MzOTBfS01DVFIgfCAweDEzIHwgMHg4MCwKKwlLTUNUUl9BRVNfMjU2X0VOQ1JZUFQgID0gQ1JZUFRfUzM5MF9LTUNUUiB8IDB4MTQsCisJS01DVFJfQUVTXzI1Nl9ERUNSWVBUICA9IENSWVBUX1MzOTBfS01DVFIgfCAweDE0IHwgMHg4MCwKK307CisKKy8qCiAgKiBmdW5jdGlvbiBjb2RlcyBmb3IgS0lNRCAoQ09NUFVURSBJTlRFUk1FRElBVEUgTUVTU0FHRSBESUdFU1QpCiAgKiBpbnN0cnVjdGlvbgogICovCkBAIC04Myw2ICsxMTIsNyBAQAogCUtJTURfU0hBXzEgICA9IENSWVBUX1MzOTBfS0lNRCB8IDEsCiAJS0lNRF9TSEFfMjU2ID0gQ1JZUFRfUzM5MF9LSU1EIHwgMiwKIAlLSU1EX1NIQV81MTIgPSBDUllQVF9TMzkwX0tJTUQgfCAzLAorCUtJTURfR0hBU0ggICA9IENSWVBUX1MzOTBfS0lNRCB8IDY1LAogfTsKIAogLyoKQEAgLTI4NCw2ICszMTQsNDUgQEAKIH0KIAogLyoqCisgKiBjcnlwdF9zMzkwX2ttY3RyOgorICogQGZ1bmM6IHRoZSBmdW5jdGlvbiBjb2RlIHBhc3NlZCB0byBLTUNUUjsgc2VlIGNyeXB0X3MzOTBfa21jdHJfZnVuYworICogQHBhcmFtOiBhZGRyZXNzIG9mIHBhcmFtZXRlciBibG9jazsgc2VlIFBPUCBmb3IgZGV0YWlscyBvbiBlYWNoIGZ1bmMKKyAqIEBkZXN0OiBhZGRyZXNzIG9mIGRlc3RpbmF0aW9uIG1lbW9yeSBhcmVhCisgKiBAc3JjOiBhZGRyZXNzIG9mIHNvdXJjZSBtZW1vcnkgYXJlYQorICogQHNyY19sZW46IGxlbmd0aCBvZiBzcmMgb3BlcmFuZCBpbiBieXRlcworICogQGNvdW50ZXI6IGFkZHJlc3Mgb2YgY291bnRlciB2YWx1ZQorICoKKyAqIEV4ZWN1dGVzIHRoZSBLTUNUUiAoQ0lQSEVSIE1FU1NBR0UgV0lUSCBDT1VOVEVSKSBvcGVyYXRpb24gb2YgdGhlIENQVS4KKyAqCisgKiBSZXR1cm5zIC0xIGZvciBmYWlsdXJlLCAwIGZvciB0aGUgcXVlcnkgZnVuYywgbnVtYmVyIG9mIHByb2Nlc3NlZAorICogYnl0ZXMgZm9yIGVuY3J5cHRpb24vZGVjcnlwdGlvbiBmdW5jcworICovCitzdGF0aWMgaW5saW5lIGludCBjcnlwdF9zMzkwX2ttY3RyKGxvbmcgZnVuYywgdm9pZCAqcGFyYW0sIHU4ICpkZXN0LAorCQkJCSBjb25zdCB1OCAqc3JjLCBsb25nIHNyY19sZW4sIHU4ICpjb3VudGVyKQoreworCXJlZ2lzdGVyIGxvbmcgX19mdW5jIGFzbSgiMCIpID0gZnVuYyAmIENSWVBUX1MzOTBfRlVOQ19NQVNLOworCXJlZ2lzdGVyIHZvaWQgKl9fcGFyYW0gYXNtKCIxIikgPSBwYXJhbTsKKwlyZWdpc3RlciBjb25zdCB1OCAqX19zcmMgYXNtKCIyIikgPSBzcmM7CisJcmVnaXN0ZXIgbG9uZyBfX3NyY19sZW4gYXNtKCIzIikgPSBzcmNfbGVuOworCXJlZ2lzdGVyIHU4ICpfX2Rlc3QgYXNtKCI0IikgPSBkZXN0OworCXJlZ2lzdGVyIHU4ICpfX2N0ciBhc20oIjYiKSA9IGNvdW50ZXI7CisJaW50IHJldCA9IC0xOworCisJYXNtIHZvbGF0aWxlKAorCQkiMDoJLmluc24JcnJmLDB4YjkyZDAwMDAsJTMsJTEsJTQsMCBcbiIgLyogS01DVFIgb3Bjb2RlICovCisJCSIxOglicmMJMSwwYiBcbiIgLyogaGFuZGxlIHBhcnRpYWwgY29tcGxldGlvbiAqLworCQkiCWxhCSUwLDBcbiIKKwkJIjI6XG4iCisJCUVYX1RBQkxFKDBiLDJiKSBFWF9UQUJMRSgxYiwyYikKKwkJOiAiK2QiIChyZXQpLCAiK2EiIChfX3NyYyksICIrZCIgKF9fc3JjX2xlbiksICIrYSIgKF9fZGVzdCksCisJCSAgIithIiAoX19jdHIpCisJCTogImQiIChfX2Z1bmMpLCAiYSIgKF9fcGFyYW0pIDogImNjIiwgIm1lbW9yeSIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiAoZnVuYyAmIENSWVBUX1MzOTBfRlVOQ19NQVNLKSA/IHNyY19sZW4gLSBfX3NyY19sZW4gOiBfX3NyY19sZW47Cit9CisKKy8qKgogICogY3J5cHRfczM5MF9mdW5jX2F2YWlsYWJsZToKICAqIEBmdW5jOiB0aGUgZnVuY3Rpb24gY29kZSBvZiB0aGUgc3BlY2lmaWMgZnVuY3Rpb247IDAgaWYgb3AgaW4gZ2VuZXJhbAogICoKQEAgLTI5MSwxMyArMzYwLDE3IEBACiAgKgogICogUmV0dXJucyAxIGlmIGZ1bmMgYXZhaWxhYmxlOyAwIGlmIGZ1bmMgb3Igb3AgaW4gZ2VuZXJhbCBub3QgYXZhaWxhYmxlCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoaW50IGZ1bmMpCitzdGF0aWMgaW5saW5lIGludCBjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKGludCBmdW5jLAorCQkJCQkgICAgdW5zaWduZWQgaW50IGZhY2lsaXR5X21hc2spCiB7CiAJdW5zaWduZWQgY2hhciBzdGF0dXNbMTZdOwogCWludCByZXQ7CiAKLQkvKiBjaGVjayBpZiBDUEFDRiBmYWNpbGl0eSAoYml0IDE3KSBpcyBhdmFpbGFibGUgKi8KLQlpZiAoIXRlc3RfZmFjaWxpdHkoMTcpKQorCWlmIChmYWNpbGl0eV9tYXNrICYgQ1JZUFRfUzM5MF9NU0EgJiYgIXRlc3RfZmFjaWxpdHkoMTcpKQorCQlyZXR1cm4gMDsKKwlpZiAoZmFjaWxpdHlfbWFzayAmIENSWVBUX1MzOTBfTVNBMyAmJiAhdGVzdF9mYWNpbGl0eSg3NikpCisJCXJldHVybiAwOworCWlmIChmYWNpbGl0eV9tYXNrICYgQ1JZUFRfUzM5MF9NU0E0ICYmICF0ZXN0X2ZhY2lsaXR5KDc3KSkKIAkJcmV0dXJuIDA7CiAKIAlzd2l0Y2ggKGZ1bmMgJiBDUllQVF9TMzkwX09QX01BU0spIHsKQEAgLTMxNiw2ICszODksMTAgQEAKIAljYXNlIENSWVBUX1MzOTBfS01BQzoKIAkJcmV0ID0gY3J5cHRfczM5MF9rbWFjKEtNQUNfUVVFUlksICZzdGF0dXMsIE5VTEwsIDApOwogCQlicmVhazsKKwljYXNlIENSWVBUX1MzOTBfS01DVFI6CisJCXJldCA9IGNyeXB0X3MzOTBfa21jdHIoS01DVFJfUVVFUlksICZzdGF0dXMsIE5VTEwsIE5VTEwsIDAsCisJCQkJICAgICAgIE5VTEwpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gMDsKIAl9CkBAIC0zMjYsNCArNDAzLDMxIEBACiAJcmV0dXJuIChzdGF0dXNbZnVuYyA+PiAzXSAmICgweDgwID4+IChmdW5jICYgNykpKSAhPSAwOwogfQogCisvKioKKyAqIGNyeXB0X3MzOTBfcGNjOgorICogQGZ1bmM6IHRoZSBmdW5jdGlvbiBjb2RlIHBhc3NlZCB0byBLTTsgc2VlIGNyeXB0X3MzOTBfa21fZnVuYworICogQHBhcmFtOiBhZGRyZXNzIG9mIHBhcmFtZXRlciBibG9jazsgc2VlIFBPUCBmb3IgZGV0YWlscyBvbiBlYWNoIGZ1bmMKKyAqCisgKiBFeGVjdXRlcyB0aGUgUENDIChQRVJGT1JNIENSWVBUT0dSQVBISUMgQ09NUFVUQVRJT04pIG9wZXJhdGlvbiBvZiB0aGUgQ1BVLgorICoKKyAqIFJldHVybnMgLTEgZm9yIGZhaWx1cmUsIDAgZm9yIHN1Y2Nlc3MuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0X3MzOTBfcGNjKGxvbmcgZnVuYywgdm9pZCAqcGFyYW0pCit7CisJcmVnaXN0ZXIgbG9uZyBfX2Z1bmMgYXNtKCIwIikgPSBmdW5jICYgMHg3ZjsgLyogZW5jcnlwdCBvciBkZWNyeXB0ICovCisJcmVnaXN0ZXIgdm9pZCAqX19wYXJhbSBhc20oIjEiKSA9IHBhcmFtOworCWludCByZXQgPSAtMTsKKworCWFzbSB2b2xhdGlsZSgKKwkJIjA6CS5pbnNuCXJyZSwweGI5MmMwMDAwLDAsMCBcbiIgLyogUENDIG9wY29kZSAqLworCQkiMToJYnJjCTEsMGIgXG4iIC8qIGhhbmRsZSBwYXJ0aWFsIGNvbXBsZXRpb24gKi8KKwkJIglsYQklMCwwXG4iCisJCSIyOlxuIgorCQlFWF9UQUJMRSgwYiwyYikgRVhfVEFCTEUoMWIsMmIpCisJCTogIitkIiAocmV0KQorCQk6ICJkIiAoX19mdW5jKSwgImEiIChfX3BhcmFtKSA6ICJjYyIsICJtZW1vcnkiKTsKKwlyZXR1cm4gcmV0OworfQorCisKICNlbmRpZgkvKiBfQ1JZUFRPX0FSQ0hfUzM5MF9DUllQVF9TMzkwX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vZGVzX2NoZWNrX2tleS5jIGIvYXJjaC9zMzkwL2NyeXB0by9kZXNfY2hlY2tfa2V5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MDZhZjIuLjAwMDAwMDAKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9kZXNfY2hlY2tfa2V5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLyoKLSAqIENyeXB0b2dyYXBoaWMgQVBJLgotICoKLSAqIEZ1bmN0aW9uIGZvciBjaGVja2luZyBrZXlzIGZvciB0aGUgREVTIGFuZCBUcmlwcGxlIERFUyBFbmNyeXB0aW9uCi0gKiBhbGdvcml0aG1zLgotICoKLSAqIE9yaWdpbmFsbHkgcmVsZWFzZWQgYXMgZGVzY29yZSBieSBEYW5hIEwuIEhvdyA8aG93QGlzbC5zdGFuZm9yZC5lZHU+LgotICogTW9kaWZpZWQgYnkgUmFpbWFyIEZhbGtlIDxyZjEzQGluZi50dS1kcmVzZGVuLmRlPiBmb3IgdGhlIExpbnV4LUtlcm5lbC4KLSAqIERlcml2ZWQgZnJvbSBDcnlwdG9hcGkgYW5kIE5ldHRsZSBpbXBsZW1lbnRhdGlvbnMsIGFkYXB0ZWQgZm9yIGluLXBsYWNlCi0gKiBzY2F0dGVybGlzdCBpbnRlcmZhY2UuICBDaGFuZ2VkIExHUEwgdG8gR1BMIHBlciBzZWN0aW9uIDMgb2YgdGhlIExHUEwuCi0gKgotICogczM5MCBWZXJzaW9uOgotICogICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDMKLSAqICAgQXV0aG9yKHMpOiBUaG9tYXMgU3BhdHppZXIKLSAqCQlKYW4gR2xhdWJlciAoamFuLmdsYXViZXJAZGUuaWJtLmNvbSkKLSAqCi0gKiBEZXJpdmVkIGZyb20gImNyeXB0by9kZXMuYyIKLSAqICAgQ29weXJpZ2h0IChjKSAxOTkyIERhbmEgTC4gSG93LgotICogICBDb3B5cmlnaHQgKGMpIFJhaW1hciBGYWxrZSA8cmYxM0BpbmYudHUtZHJlc2Rlbi5kZT4KLSAqICAgQ29weXJpZ2h0IChjKSBHaXNsZSBTZmxlbnNtaW5kZSA8Z2lzbGVAaWkudWliLm5vPgotICogICBDb3B5cmlnaHQgKEMpIDIwMDEgTmllbHMgTXZsbGVyLgotICogICBDb3B5cmlnaHQgKGMpIDIwMDIgSmFtZXMgTW9ycmlzIDxqbW9ycmlzQGludGVyY29kZS5jb20uYXU+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KLSNpbmNsdWRlICJjcnlwdG9fZGVzLmgiCi0KLSNkZWZpbmUgUk9SKGQsYyxvKQkoKGQpID0gKGQpID4+IChjKSB8IChkKSA8PCAobykpCi0KLXN0YXRpYyBjb25zdCB1OCBwYXJpdHlbXSA9IHsKLQk4LDEsMCw4LDAsOCw4LDAsMCw4LDgsMCw4LDAsMiw4LDAsOCw4LDAsOCwwLDAsOCw4LDAsMCw4LDAsOCw4LDMsCi0JMCw4LDgsMCw4LDAsMCw4LDgsMCwwLDgsMCw4LDgsMCw4LDAsMCw4LDAsOCw4LDAsMCw4LDgsMCw4LDAsMCw4LAotCTAsOCw4LDAsOCwwLDAsOCw4LDAsMCw4LDAsOCw4LDAsOCwwLDAsOCwwLDgsOCwwLDAsOCw4LDAsOCwwLDAsOCwKLQk4LDAsMCw4LDAsOCw4LDAsMCw4LDgsMCw4LDAsMCw4LDAsOCw4LDAsOCwwLDAsOCw4LDAsMCw4LDAsOCw4LDAsCi0JMCw4LDgsMCw4LDAsMCw4LDgsMCwwLDgsMCw4LDgsMCw4LDAsMCw4LDAsOCw4LDAsMCw4LDgsMCw4LDAsMCw4LAotCTgsMCwwLDgsMCw4LDgsMCwwLDgsOCwwLDgsMCwwLDgsMCw4LDgsMCw4LDAsMCw4LDgsMCwwLDgsMCw4LDgsMCwKLQk4LDAsMCw4LDAsOCw4LDAsMCw4LDgsMCw4LDAsMCw4LDAsOCw4LDAsOCwwLDAsOCw4LDAsMCw4LDAsOCw4LDAsCi0JNCw4LDgsMCw4LDAsMCw4LDgsMCwwLDgsMCw4LDgsMCw4LDUsMCw4LDAsOCw4LDAsMCw4LDgsMCw4LDAsNiw4LAotfTsKLQotLyoKLSAqIFJGQzI0NTE6IFdlYWsga2V5IGNoZWNrcyBTSE9VTEQgYmUgcGVyZm9ybWVkLgotICovCi1pbnQKLWNyeXB0b19kZXNfY2hlY2tfa2V5KGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4sIHUzMiAqZmxhZ3MpCi17Ci0JdTMyIG4sIHc7Ci0KLQluICA9IHBhcml0eVtrZXlbMF1dOyBuIDw8PSA0OwotCW4gfD0gcGFyaXR5W2tleVsxXV07IG4gPDw9IDQ7Ci0JbiB8PSBwYXJpdHlba2V5WzJdXTsgbiA8PD0gNDsKLQluIHw9IHBhcml0eVtrZXlbM11dOyBuIDw8PSA0OwotCW4gfD0gcGFyaXR5W2tleVs0XV07IG4gPDw9IDQ7Ci0JbiB8PSBwYXJpdHlba2V5WzVdXTsgbiA8PD0gNDsKLQluIHw9IHBhcml0eVtrZXlbNl1dOyBuIDw8PSA0OwotCW4gfD0gcGFyaXR5W2tleVs3XV07Ci0JdyA9IDB4ODg4ODg4ODhMOwotCi0JaWYgKCgqZmxhZ3MgJiBDUllQVE9fVEZNX1JFUV9XRUFLX0tFWSkKLQkgICAgJiYgISgobiAtICh3ID4+IDMpKSAmIHcpKSB7ICAvKiAxIGluIDEwXjEwIGtleXMgcGFzc2VzIHRoaXMgdGVzdCAqLwotCQlpZiAobiA8IDB4NDE0MTUxNTEpIHsKLQkJCWlmIChuIDwgMHgzMTMxMjEyMSkgewotCQkJCWlmIChuIDwgMHgxNDE0MTUxNSkgewotCQkJCQkvKiAwMSAwMSAwMSAwMSAwMSAwMSAwMSAwMSAqLwotCQkJCQlpZiAobiA9PSAweDExMTExMTExKSBnb3RvIHdlYWs7Ci0JCQkJCS8qIDAxIDFGIDAxIDFGIDAxIDBFIDAxIDBFICovCi0JCQkJCWlmIChuID09IDB4MTMxMzEyMTIpIGdvdG8gd2VhazsKLQkJCQl9IGVsc2UgewotCQkJCQkvKiAwMSBFMCAwMSBFMCAwMSBGMSAwMSBGMSAqLwotCQkJCQlpZiAobiA9PSAweDE0MTQxNTE1KSBnb3RvIHdlYWs7Ci0JCQkJCS8qIDAxIEZFIDAxIEZFIDAxIEZFIDAxIEZFICovCi0JCQkJCWlmIChuID09IDB4MTYxNjE2MTYpIGdvdG8gd2VhazsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWlmIChuIDwgMHgzNDM0MjUyNSkgewotCQkJCQkvKiAxRiAwMSAxRiAwMSAwRSAwMSAwRSAwMSAqLwotCQkJCQlpZiAobiA9PSAweDMxMzEyMTIxKSBnb3RvIHdlYWs7Ci0JCQkJCS8qIDFGIDFGIDFGIDFGIDBFIDBFIDBFIDBFICg/KSAqLwotCQkJCQlpZiAobiA9PSAweDMzMzMyMjIyKSBnb3RvIHdlYWs7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLyogMUYgRTAgMUYgRTAgMEUgRjEgMEUgRjEgKi8KLQkJCQkJaWYgKG4gPT0gMHgzNDM0MjUyNSkgZ290byB3ZWFrOwotCQkJCQkvKiAxRiBGRSAxRiBGRSAwRSBGRSAwRSBGRSAqLwotCQkJCQlpZiAobiA9PSAweDM2MzYyNjI2KSBnb3RvIHdlYWs7Ci0JCQkJfQotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKG4gPCAweDYxNjE2MTYxKSB7Ci0JCQkJaWYgKG4gPCAweDQ0NDQ1NTU1KSB7Ci0JCQkJCS8qIEUwIDAxIEUwIDAxIEYxIDAxIEYxIDAxICovCi0JCQkJCWlmIChuID09IDB4NDE0MTUxNTEpIGdvdG8gd2VhazsKLQkJCQkJLyogRTAgMUYgRTAgMUYgRjEgMEUgRjEgMEUgKi8KLQkJCQkJaWYgKG4gPT0gMHg0MzQzNTI1MikgZ290byB3ZWFrOwotCQkJCX0gZWxzZSB7Ci0JCQkJCS8qIEUwIEUwIEUwIEUwIEYxIEYxIEYxIEYxICg/KSAqLwotCQkJCQlpZiAobiA9PSAweDQ0NDQ1NTU1KSBnb3RvIHdlYWs7Ci0JCQkJCS8qIEUwIEZFIEUwIEZFIEYxIEZFIEYxIEZFICovCi0JCQkJCWlmIChuID09IDB4NDY0NjU2NTYpIGdvdG8gd2VhazsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWlmIChuIDwgMHg2NDY0NjU2NSkgewotCQkJCQkvKiBGRSAwMSBGRSAwMSBGRSAwMSBGRSAwMSAqLwotCQkJCQlpZiAobiA9PSAweDYxNjE2MTYxKSBnb3RvIHdlYWs7Ci0JCQkJCS8qIEZFIDFGIEZFIDFGIEZFIDBFIEZFIDBFICovCi0JCQkJCWlmIChuID09IDB4NjM2MzYyNjIpIGdvdG8gd2VhazsKLQkJCQl9IGVsc2UgewotCQkJCQkvKiBGRSBFMCBGRSBFMCBGRSBGMSBGRSBGMSAqLwotCQkJCQlpZiAobiA9PSAweDY0NjQ2NTY1KSBnb3RvIHdlYWs7Ci0JCQkJCS8qIEZFIEZFIEZFIEZFIEZFIEZFIEZFIEZFICovCi0JCQkJCWlmIChuID09IDB4NjY2NjY2NjYpIGdvdG8gd2VhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci13ZWFrOgotCSpmbGFncyB8PSBDUllQVE9fVEZNX1JFU19XRUFLX0tFWTsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotRVhQT1JUX1NZTUJPTChjcnlwdG9fZGVzX2NoZWNrX2tleSk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiS2V5IENoZWNrIGZ1bmN0aW9uIGZvciBERVMgJiAgREVTMyBDaXBoZXIgQWxnb3JpdGhtcyIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NyeXB0by9kZXNfczM5MC5jIGIvYXJjaC9zMzkwL2NyeXB0by9kZXNfczM5MC5jCmluZGV4IGNjNTQyMDEuLmE1MmJmZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vZGVzX3MzOTAuYworKysgYi9hcmNoL3MzOTAvY3J5cHRvL2Rlc19zMzkwLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogczM5MCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgREVTIENpcGhlciBBbGdvcml0aG0uCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAzLDIwMDcKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMywyMDExCiAgKiBBdXRob3Iocyk6IFRob21hcyBTcGF0emllcgogICoJICAgICAgSmFuIEdsYXViZXIgKGphbi5nbGF1YmVyQGRlLmlibS5jb20pCiAgKgpAQCAtMjIsMjIgKzIyLDE5IEBACiAKICNpbmNsdWRlICJjcnlwdF9zMzkwLmgiCiAKLSNkZWZpbmUgREVTM18xOTJfS0VZX1NJWkUJKDMgKiBERVNfS0VZX1NJWkUpCisjZGVmaW5lIERFUzNfS0VZX1NJWkUJKDMgKiBERVNfS0VZX1NJWkUpCiAKLXN0cnVjdCBjcnlwdF9zMzkwX2Rlc19jdHggewotCXU4IGl2W0RFU19CTE9DS19TSVpFXTsKLQl1OCBrZXlbREVTX0tFWV9TSVpFXTsKLX07CitzdGF0aWMgdTggKmN0cmJsazsKIAotc3RydWN0IGNyeXB0X3MzOTBfZGVzM18xOTJfY3R4IHsKK3N0cnVjdCBzMzkwX2Rlc19jdHggewogCXU4IGl2W0RFU19CTE9DS19TSVpFXTsKLQl1OCBrZXlbREVTM18xOTJfS0VZX1NJWkVdOworCXU4IGtleVtERVMzX0tFWV9TSVpFXTsKIH07CiAKIHN0YXRpYyBpbnQgZGVzX3NldGtleShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqa2V5LAotCQkgICAgICB1bnNpZ25lZCBpbnQga2V5bGVuKQorCQkgICAgICB1bnNpZ25lZCBpbnQga2V5X2xlbikKIHsKLQlzdHJ1Y3QgY3J5cHRfczM5MF9kZXNfY3R4ICpkY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3QgczM5MF9kZXNfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwogCXUzMiAqZmxhZ3MgPSAmdGZtLT5jcnRfZmxhZ3M7CiAJdTMyIHRtcFtERVNfRVhQS0VZX1dPUkRTXTsKIApAQCAtNDcsMjIgKzQ0LDIyIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW1lbWNweShkY3R4LT5rZXksIGtleSwga2V5bGVuKTsKKwltZW1jcHkoY3R4LT5rZXksIGtleSwga2V5X2xlbik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGRlc19lbmNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXQsIGNvbnN0IHU4ICppbikKIHsKLQlzdHJ1Y3QgY3J5cHRfczM5MF9kZXNfY3R4ICpkY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3QgczM5MF9kZXNfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwogCi0JY3J5cHRfczM5MF9rbShLTV9ERUFfRU5DUllQVCwgZGN0eC0+a2V5LCBvdXQsIGluLCBERVNfQkxPQ0tfU0laRSk7CisJY3J5cHRfczM5MF9rbShLTV9ERUFfRU5DUllQVCwgY3R4LT5rZXksIG91dCwgaW4sIERFU19CTE9DS19TSVpFKTsKIH0KIAogc3RhdGljIHZvaWQgZGVzX2RlY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dCwgY29uc3QgdTggKmluKQogewotCXN0cnVjdCBjcnlwdF9zMzkwX2Rlc19jdHggKmRjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBzMzkwX2Rlc19jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CiAKLQljcnlwdF9zMzkwX2ttKEtNX0RFQV9ERUNSWVBULCBkY3R4LT5rZXksIG91dCwgaW4sIERFU19CTE9DS19TSVpFKTsKKwljcnlwdF9zMzkwX2ttKEtNX0RFQV9ERUNSWVBULCBjdHgtPmtleSwgb3V0LCBpbiwgREVTX0JMT0NLX1NJWkUpOwogfQogCiBzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgZGVzX2FsZyA9IHsKQEAgLTcxLDcgKzY4LDcgQEAKIAkuY3JhX3ByaW9yaXR5CQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCiAJLmNyYV9mbGFncwkJPQlDUllQVE9fQUxHX1RZUEVfQ0lQSEVSLAogCS5jcmFfYmxvY2tzaXplCQk9CURFU19CTE9DS19TSVpFLAotCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2Yoc3RydWN0IGNyeXB0X3MzOTBfZGVzX2N0eCksCisJLmNyYV9jdHhzaXplCQk9CXNpemVvZihzdHJ1Y3QgczM5MF9kZXNfY3R4KSwKIAkuY3JhX21vZHVsZQkJPQlUSElTX01PRFVMRSwKIAkuY3JhX2xpc3QJCT0JTElTVF9IRUFEX0lOSVQoZGVzX2FsZy5jcmFfbGlzdCksCiAJLmNyYV91CQkJPQl7CkBAIC04Niw3ICs4Myw3IEBACiB9OwogCiBzdGF0aWMgaW50IGVjYl9kZXNhbGxfY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLCBsb25nIGZ1bmMsCi0JCQkgICAgdm9pZCAqcGFyYW0sIHN0cnVjdCBibGtjaXBoZXJfd2FsayAqd2FsaykKKwkJCSAgICB1OCAqa2V5LCBzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgKndhbGspCiB7CiAJaW50IHJldCA9IGJsa2NpcGhlcl93YWxrX3ZpcnQoZGVzYywgd2Fsayk7CiAJdW5zaWduZWQgaW50IG5ieXRlczsKQEAgLTk3LDcgKzk0LDcgQEAKIAkJdTggKm91dCA9IHdhbGstPmRzdC52aXJ0LmFkZHI7CiAJCXU4ICppbiA9IHdhbGstPnNyYy52aXJ0LmFkZHI7CiAKLQkJcmV0ID0gY3J5cHRfczM5MF9rbShmdW5jLCBwYXJhbSwgb3V0LCBpbiwgbik7CisJCXJldCA9IGNyeXB0X3MzOTBfa20oZnVuYywga2V5LCBvdXQsIGluLCBuKTsKIAkJQlVHX09OKChyZXQgPCAwKSB8fCAocmV0ICE9IG4pKTsKIAogCQluYnl0ZXMgJj0gREVTX0JMT0NLX1NJWkUgLSAxOwpAQCAtMTA4LDcgKzEwNSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgY2JjX2Rlc2FsbF9jcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsIGxvbmcgZnVuYywKLQkJCSAgICB2b2lkICpwYXJhbSwgc3RydWN0IGJsa2NpcGhlcl93YWxrICp3YWxrKQorCQkJICAgIHU4ICppdiwgc3RydWN0IGJsa2NpcGhlcl93YWxrICp3YWxrKQogewogCWludCByZXQgPSBibGtjaXBoZXJfd2Fsa192aXJ0KGRlc2MsIHdhbGspOwogCXVuc2lnbmVkIGludCBuYnl0ZXMgPSB3YWxrLT5uYnl0ZXM7CkBAIC0xMTYsMjAgKzExMywyMCBAQAogCWlmICghbmJ5dGVzKQogCQlnb3RvIG91dDsKIAotCW1lbWNweShwYXJhbSwgd2Fsay0+aXYsIERFU19CTE9DS19TSVpFKTsKKwltZW1jcHkoaXYsIHdhbGstPml2LCBERVNfQkxPQ0tfU0laRSk7CiAJZG8gewogCQkvKiBvbmx5IHVzZSBjb21wbGV0ZSBibG9ja3MgKi8KIAkJdW5zaWduZWQgaW50IG4gPSBuYnl0ZXMgJiB+KERFU19CTE9DS19TSVpFIC0gMSk7CiAJCXU4ICpvdXQgPSB3YWxrLT5kc3QudmlydC5hZGRyOwogCQl1OCAqaW4gPSB3YWxrLT5zcmMudmlydC5hZGRyOwogCi0JCXJldCA9IGNyeXB0X3MzOTBfa21jKGZ1bmMsIHBhcmFtLCBvdXQsIGluLCBuKTsKKwkJcmV0ID0gY3J5cHRfczM5MF9rbWMoZnVuYywgaXYsIG91dCwgaW4sIG4pOwogCQlCVUdfT04oKHJldCA8IDApIHx8IChyZXQgIT0gbikpOwogCiAJCW5ieXRlcyAmPSBERVNfQkxPQ0tfU0laRSAtIDE7CiAJCXJldCA9IGJsa2NpcGhlcl93YWxrX2RvbmUoZGVzYywgd2FsaywgbmJ5dGVzKTsKIAl9IHdoaWxlICgobmJ5dGVzID0gd2Fsay0+bmJ5dGVzKSk7Ci0JbWVtY3B5KHdhbGstPml2LCBwYXJhbSwgREVTX0JMT0NLX1NJWkUpOworCW1lbWNweSh3YWxrLT5pdiwgaXYsIERFU19CTE9DS19TSVpFKTsKIAogb3V0OgogCXJldHVybiByZXQ7CkBAIC0xMzksMjIgKzEzNiwyMiBAQAogCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAogCQkJICAgdW5zaWduZWQgaW50IG5ieXRlcykKIHsKLQlzdHJ1Y3QgY3J5cHRfczM5MF9kZXNfY3R4ICpzY3R4ID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKTsKKwlzdHJ1Y3QgczM5MF9kZXNfY3R4ICpjdHggPSBjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pOwogCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOwogCiAJYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7Ci0JcmV0dXJuIGVjYl9kZXNhbGxfY3J5cHQoZGVzYywgS01fREVBX0VOQ1JZUFQsIHNjdHgtPmtleSwgJndhbGspOworCXJldHVybiBlY2JfZGVzYWxsX2NyeXB0KGRlc2MsIEtNX0RFQV9FTkNSWVBULCBjdHgtPmtleSwgJndhbGspOwogfQogCiBzdGF0aWMgaW50IGVjYl9kZXNfZGVjcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCiAJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCiAJCQkgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQogewotCXN0cnVjdCBjcnlwdF9zMzkwX2Rlc19jdHggKnNjdHggPSBjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pOworCXN0cnVjdCBzMzkwX2Rlc19jdHggKmN0eCA9IGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSk7CiAJc3RydWN0IGJsa2NpcGhlcl93YWxrIHdhbGs7CiAKIAlibGtjaXBoZXJfd2Fsa19pbml0KCZ3YWxrLCBkc3QsIHNyYywgbmJ5dGVzKTsKLQlyZXR1cm4gZWNiX2Rlc2FsbF9jcnlwdChkZXNjLCBLTV9ERUFfREVDUllQVCwgc2N0eC0+a2V5LCAmd2Fsayk7CisJcmV0dXJuIGVjYl9kZXNhbGxfY3J5cHQoZGVzYywgS01fREVBX0RFQ1JZUFQsIGN0eC0+a2V5LCAmd2Fsayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBlY2JfZGVzX2FsZyA9IHsKQEAgLTE2Myw3ICsxNjAsNyBAQAogCS5jcmFfcHJpb3JpdHkJCT0JQ1JZUFRfUzM5MF9DT01QT1NJVEVfUFJJT1JJVFksCiAJLmNyYV9mbGFncwkJPQlDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSLAogCS5jcmFfYmxvY2tzaXplCQk9CURFU19CTE9DS19TSVpFLAotCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2Yoc3RydWN0IGNyeXB0X3MzOTBfZGVzX2N0eCksCisJLmNyYV9jdHhzaXplCQk9CXNpemVvZihzdHJ1Y3QgczM5MF9kZXNfY3R4KSwKIAkuY3JhX3R5cGUJCT0JJmNyeXB0b19ibGtjaXBoZXJfdHlwZSwKIAkuY3JhX21vZHVsZQkJPQlUSElTX01PRFVMRSwKIAkuY3JhX2xpc3QJCT0JTElTVF9IRUFEX0lOSVQoZWNiX2Rlc19hbGcuY3JhX2xpc3QpLApAQCAtMTgyLDIyICsxNzksMjIgQEAKIAkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKIAkJCSAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCiB7Ci0Jc3RydWN0IGNyeXB0X3MzOTBfZGVzX2N0eCAqc2N0eCA9IGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSk7CisJc3RydWN0IHMzOTBfZGVzX2N0eCAqY3R4ID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKTsKIAlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKIAogCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOwotCXJldHVybiBjYmNfZGVzYWxsX2NyeXB0KGRlc2MsIEtNQ19ERUFfRU5DUllQVCwgc2N0eC0+aXYsICZ3YWxrKTsKKwlyZXR1cm4gY2JjX2Rlc2FsbF9jcnlwdChkZXNjLCBLTUNfREVBX0VOQ1JZUFQsIGN0eC0+aXYsICZ3YWxrKTsKIH0KIAogc3RhdGljIGludCBjYmNfZGVzX2RlY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAogCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAogCQkJICAgdW5zaWduZWQgaW50IG5ieXRlcykKIHsKLQlzdHJ1Y3QgY3J5cHRfczM5MF9kZXNfY3R4ICpzY3R4ID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKTsKKwlzdHJ1Y3QgczM5MF9kZXNfY3R4ICpjdHggPSBjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pOwogCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOwogCiAJYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7Ci0JcmV0dXJuIGNiY19kZXNhbGxfY3J5cHQoZGVzYywgS01DX0RFQV9ERUNSWVBULCBzY3R4LT5pdiwgJndhbGspOworCXJldHVybiBjYmNfZGVzYWxsX2NyeXB0KGRlc2MsIEtNQ19ERUFfREVDUllQVCwgY3R4LT5pdiwgJndhbGspOwogfQogCiBzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgY2JjX2Rlc19hbGcgPSB7CkBAIC0yMDYsNyArMjAzLDcgQEAKIAkuY3JhX3ByaW9yaXR5CQk9CUNSWVBUX1MzOTBfQ09NUE9TSVRFX1BSSU9SSVRZLAogCS5jcmFfZmxhZ3MJCT0JQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUiwKIAkuY3JhX2Jsb2Nrc2l6ZQkJPQlERVNfQkxPQ0tfU0laRSwKLQkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBjcnlwdF9zMzkwX2Rlc19jdHgpLAorCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2Yoc3RydWN0IHMzOTBfZGVzX2N0eCksCiAJLmNyYV90eXBlCQk9CSZjcnlwdG9fYmxrY2lwaGVyX3R5cGUsCiAJLmNyYV9tb2R1bGUJCT0JVEhJU19NT0RVTEUsCiAJLmNyYV9saXN0CQk9CUxJU1RfSEVBRF9JTklUKGNiY19kZXNfYWxnLmNyYV9saXN0KSwKQEAgLTIzNSwxMCArMjMyLDEwIEBACiAgKiAgIHByb3BlcnR5LgogICoKICAqLwotc3RhdGljIGludCBkZXMzXzE5Ml9zZXRrZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmtleSwKLQkJCSAgIHVuc2lnbmVkIGludCBrZXlsZW4pCitzdGF0aWMgaW50IGRlczNfc2V0a2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICprZXksCisJCSAgICAgICB1bnNpZ25lZCBpbnQga2V5X2xlbikKIHsKLQlzdHJ1Y3QgY3J5cHRfczM5MF9kZXMzXzE5Ml9jdHggKmRjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBzMzkwX2Rlc19jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CiAJdTMyICpmbGFncyA9ICZ0Zm0tPmNydF9mbGFnczsKIAogCWlmICghKG1lbWNtcChrZXksICZrZXlbREVTX0tFWV9TSVpFXSwgREVTX0tFWV9TSVpFKSAmJgpAQCAtMjQ4LDE0MSArMjQ1LDI3NiBAQAogCQkqZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfV0VBS19LRVk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQltZW1jcHkoZGN0eC0+a2V5LCBrZXksIGtleWxlbik7CisJbWVtY3B5KGN0eC0+a2V5LCBrZXksIGtleV9sZW4pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkZXMzXzE5Ml9lbmNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCitzdGF0aWMgdm9pZCBkZXMzX2VuY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKmRzdCwgY29uc3QgdTggKnNyYykKIHsKLQlzdHJ1Y3QgY3J5cHRfczM5MF9kZXMzXzE5Ml9jdHggKmRjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBzMzkwX2Rlc19jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CiAKLQljcnlwdF9zMzkwX2ttKEtNX1RERUFfMTkyX0VOQ1JZUFQsIGRjdHgtPmtleSwgZHN0LCAodm9pZCopc3JjLAotCQkgICAgICBERVNfQkxPQ0tfU0laRSk7CisJY3J5cHRfczM5MF9rbShLTV9UREVBXzE5Ml9FTkNSWVBULCBjdHgtPmtleSwgZHN0LCBzcmMsIERFU19CTE9DS19TSVpFKTsKIH0KIAotc3RhdGljIHZvaWQgZGVzM18xOTJfZGVjcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQorc3RhdGljIHZvaWQgZGVzM19kZWNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCiB7Ci0Jc3RydWN0IGNyeXB0X3MzOTBfZGVzM18xOTJfY3R4ICpkY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3QgczM5MF9kZXNfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwogCi0JY3J5cHRfczM5MF9rbShLTV9UREVBXzE5Ml9ERUNSWVBULCBkY3R4LT5rZXksIGRzdCwgKHZvaWQqKXNyYywKLQkJICAgICAgREVTX0JMT0NLX1NJWkUpOworCWNyeXB0X3MzOTBfa20oS01fVERFQV8xOTJfREVDUllQVCwgY3R4LT5rZXksIGRzdCwgc3JjLCBERVNfQkxPQ0tfU0laRSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBkZXMzXzE5Ml9hbGcgPSB7CitzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgZGVzM19hbGcgPSB7CiAJLmNyYV9uYW1lCQk9CSJkZXMzX2VkZSIsCiAJLmNyYV9kcml2ZXJfbmFtZQk9CSJkZXMzX2VkZS1zMzkwIiwKIAkuY3JhX3ByaW9yaXR5CQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCiAJLmNyYV9mbGFncwkJPQlDUllQVE9fQUxHX1RZUEVfQ0lQSEVSLAogCS5jcmFfYmxvY2tzaXplCQk9CURFU19CTE9DS19TSVpFLAotCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2Yoc3RydWN0IGNyeXB0X3MzOTBfZGVzM18xOTJfY3R4KSwKKwkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBzMzkwX2Rlc19jdHgpLAogCS5jcmFfbW9kdWxlCQk9CVRISVNfTU9EVUxFLAotCS5jcmFfbGlzdAkJPQlMSVNUX0hFQURfSU5JVChkZXMzXzE5Ml9hbGcuY3JhX2xpc3QpLAorCS5jcmFfbGlzdAkJPQlMSVNUX0hFQURfSU5JVChkZXMzX2FsZy5jcmFfbGlzdCksCiAJLmNyYV91CQkJPQl7CiAJCS5jaXBoZXIgPSB7Ci0JCQkuY2lhX21pbl9rZXlzaXplCT0JREVTM18xOTJfS0VZX1NJWkUsCi0JCQkuY2lhX21heF9rZXlzaXplCT0JREVTM18xOTJfS0VZX1NJWkUsCi0JCQkuY2lhX3NldGtleQkJPQlkZXMzXzE5Ml9zZXRrZXksCi0JCQkuY2lhX2VuY3J5cHQJCT0JZGVzM18xOTJfZW5jcnlwdCwKLQkJCS5jaWFfZGVjcnlwdAkJPQlkZXMzXzE5Ml9kZWNyeXB0LAorCQkJLmNpYV9taW5fa2V5c2l6ZQk9CURFUzNfS0VZX1NJWkUsCisJCQkuY2lhX21heF9rZXlzaXplCT0JREVTM19LRVlfU0laRSwKKwkJCS5jaWFfc2V0a2V5CQk9CWRlczNfc2V0a2V5LAorCQkJLmNpYV9lbmNyeXB0CQk9CWRlczNfZW5jcnlwdCwKKwkJCS5jaWFfZGVjcnlwdAkJPQlkZXMzX2RlY3J5cHQsCiAJCX0KIAl9CiB9OwogCi1zdGF0aWMgaW50IGVjYl9kZXMzXzE5Ml9lbmNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKLQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwKLQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywgdW5zaWduZWQgaW50IG5ieXRlcykKK3N0YXRpYyBpbnQgZWNiX2RlczNfZW5jcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCQkgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkJICAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCiB7Ci0Jc3RydWN0IGNyeXB0X3MzOTBfZGVzM18xOTJfY3R4ICpzY3R4ID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKTsKKwlzdHJ1Y3QgczM5MF9kZXNfY3R4ICpjdHggPSBjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pOwogCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOwogCiAJYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7Ci0JcmV0dXJuIGVjYl9kZXNhbGxfY3J5cHQoZGVzYywgS01fVERFQV8xOTJfRU5DUllQVCwgc2N0eC0+a2V5LCAmd2Fsayk7CisJcmV0dXJuIGVjYl9kZXNhbGxfY3J5cHQoZGVzYywgS01fVERFQV8xOTJfRU5DUllQVCwgY3R4LT5rZXksICZ3YWxrKTsKIH0KIAotc3RhdGljIGludCBlY2JfZGVzM18xOTJfZGVjcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCi0JCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCi0JCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsIHVuc2lnbmVkIGludCBuYnl0ZXMpCitzdGF0aWMgaW50IGVjYl9kZXMzX2RlY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkJICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJCSAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQogewotCXN0cnVjdCBjcnlwdF9zMzkwX2RlczNfMTkyX2N0eCAqc2N0eCA9IGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSk7CisJc3RydWN0IHMzOTBfZGVzX2N0eCAqY3R4ID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKTsKIAlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKIAogCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOwotCXJldHVybiBlY2JfZGVzYWxsX2NyeXB0KGRlc2MsIEtNX1RERUFfMTkyX0RFQ1JZUFQsIHNjdHgtPmtleSwgJndhbGspOworCXJldHVybiBlY2JfZGVzYWxsX2NyeXB0KGRlc2MsIEtNX1RERUFfMTkyX0RFQ1JZUFQsIGN0eC0+a2V5LCAmd2Fsayk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBlY2JfZGVzM18xOTJfYWxnID0geworc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGVjYl9kZXMzX2FsZyA9IHsKIAkuY3JhX25hbWUJCT0JImVjYihkZXMzX2VkZSkiLAogCS5jcmFfZHJpdmVyX25hbWUJPQkiZWNiLWRlczNfZWRlLXMzOTAiLAogCS5jcmFfcHJpb3JpdHkJCT0JQ1JZUFRfUzM5MF9DT01QT1NJVEVfUFJJT1JJVFksCiAJLmNyYV9mbGFncwkJPQlDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSLAogCS5jcmFfYmxvY2tzaXplCQk9CURFU19CTE9DS19TSVpFLAotCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2Yoc3RydWN0IGNyeXB0X3MzOTBfZGVzM18xOTJfY3R4KSwKKwkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBzMzkwX2Rlc19jdHgpLAogCS5jcmFfdHlwZQkJPQkmY3J5cHRvX2Jsa2NpcGhlcl90eXBlLAogCS5jcmFfbW9kdWxlCQk9CVRISVNfTU9EVUxFLAogCS5jcmFfbGlzdAkJPQlMSVNUX0hFQURfSU5JVCgKLQkJCQkJCWVjYl9kZXMzXzE5Ml9hbGcuY3JhX2xpc3QpLAorCQkJCQkJZWNiX2RlczNfYWxnLmNyYV9saXN0KSwKIAkuY3JhX3UJCQk9CXsKIAkJLmJsa2NpcGhlciA9IHsKLQkJCS5taW5fa2V5c2l6ZQkJPQlERVMzXzE5Ml9LRVlfU0laRSwKLQkJCS5tYXhfa2V5c2l6ZQkJPQlERVMzXzE5Ml9LRVlfU0laRSwKLQkJCS5zZXRrZXkJCQk9CWRlczNfMTkyX3NldGtleSwKLQkJCS5lbmNyeXB0CQk9CWVjYl9kZXMzXzE5Ml9lbmNyeXB0LAotCQkJLmRlY3J5cHQJCT0JZWNiX2RlczNfMTkyX2RlY3J5cHQsCisJCQkubWluX2tleXNpemUJCT0JREVTM19LRVlfU0laRSwKKwkJCS5tYXhfa2V5c2l6ZQkJPQlERVMzX0tFWV9TSVpFLAorCQkJLnNldGtleQkJCT0JZGVzM19zZXRrZXksCisJCQkuZW5jcnlwdAkJPQllY2JfZGVzM19lbmNyeXB0LAorCQkJLmRlY3J5cHQJCT0JZWNiX2RlczNfZGVjcnlwdCwKIAkJfQogCX0KIH07CiAKLXN0YXRpYyBpbnQgY2JjX2RlczNfMTkyX2VuY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAotCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LAotCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKQorc3RhdGljIGludCBjYmNfZGVzM19lbmNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJCSAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCQkgICAgdW5zaWduZWQgaW50IG5ieXRlcykKIHsKLQlzdHJ1Y3QgY3J5cHRfczM5MF9kZXMzXzE5Ml9jdHggKnNjdHggPSBjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pOworCXN0cnVjdCBzMzkwX2Rlc19jdHggKmN0eCA9IGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSk7CiAJc3RydWN0IGJsa2NpcGhlcl93YWxrIHdhbGs7CiAKIAlibGtjaXBoZXJfd2Fsa19pbml0KCZ3YWxrLCBkc3QsIHNyYywgbmJ5dGVzKTsKLQlyZXR1cm4gY2JjX2Rlc2FsbF9jcnlwdChkZXNjLCBLTUNfVERFQV8xOTJfRU5DUllQVCwgc2N0eC0+aXYsICZ3YWxrKTsKKwlyZXR1cm4gY2JjX2Rlc2FsbF9jcnlwdChkZXNjLCBLTUNfVERFQV8xOTJfRU5DUllQVCwgY3R4LT5pdiwgJndhbGspOwogfQogCi1zdGF0aWMgaW50IGNiY19kZXMzXzE5Ml9kZWNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKLQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwKLQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywgdW5zaWduZWQgaW50IG5ieXRlcykKK3N0YXRpYyBpbnQgY2JjX2RlczNfZGVjcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCQkgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkJICAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCiB7Ci0Jc3RydWN0IGNyeXB0X3MzOTBfZGVzM18xOTJfY3R4ICpzY3R4ID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKTsKKwlzdHJ1Y3QgczM5MF9kZXNfY3R4ICpjdHggPSBjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pOwogCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOwogCiAJYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7Ci0JcmV0dXJuIGNiY19kZXNhbGxfY3J5cHQoZGVzYywgS01DX1RERUFfMTkyX0RFQ1JZUFQsIHNjdHgtPml2LCAmd2Fsayk7CisJcmV0dXJuIGNiY19kZXNhbGxfY3J5cHQoZGVzYywgS01DX1RERUFfMTkyX0RFQ1JZUFQsIGN0eC0+aXYsICZ3YWxrKTsKIH0KIAotc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGNiY19kZXMzXzE5Ml9hbGcgPSB7CitzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgY2JjX2RlczNfYWxnID0gewogCS5jcmFfbmFtZQkJPQkiY2JjKGRlczNfZWRlKSIsCiAJLmNyYV9kcml2ZXJfbmFtZQk9CSJjYmMtZGVzM19lZGUtczM5MCIsCiAJLmNyYV9wcmlvcml0eQkJPQlDUllQVF9TMzkwX0NPTVBPU0lURV9QUklPUklUWSwKIAkuY3JhX2ZsYWdzCQk9CUNSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVIsCiAJLmNyYV9ibG9ja3NpemUJCT0JREVTX0JMT0NLX1NJWkUsCi0JLmNyYV9jdHhzaXplCQk9CXNpemVvZihzdHJ1Y3QgY3J5cHRfczM5MF9kZXMzXzE5Ml9jdHgpLAorCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2Yoc3RydWN0IHMzOTBfZGVzX2N0eCksCiAJLmNyYV90eXBlCQk9CSZjcnlwdG9fYmxrY2lwaGVyX3R5cGUsCiAJLmNyYV9tb2R1bGUJCT0JVEhJU19NT0RVTEUsCiAJLmNyYV9saXN0CQk9CUxJU1RfSEVBRF9JTklUKAotCQkJCQkJY2JjX2RlczNfMTkyX2FsZy5jcmFfbGlzdCksCisJCQkJCQljYmNfZGVzM19hbGcuY3JhX2xpc3QpLAogCS5jcmFfdQkJCT0JewogCQkuYmxrY2lwaGVyID0gewotCQkJLm1pbl9rZXlzaXplCQk9CURFUzNfMTkyX0tFWV9TSVpFLAotCQkJLm1heF9rZXlzaXplCQk9CURFUzNfMTkyX0tFWV9TSVpFLAorCQkJLm1pbl9rZXlzaXplCQk9CURFUzNfS0VZX1NJWkUsCisJCQkubWF4X2tleXNpemUJCT0JREVTM19LRVlfU0laRSwKIAkJCS5pdnNpemUJCQk9CURFU19CTE9DS19TSVpFLAotCQkJLnNldGtleQkJCT0JZGVzM18xOTJfc2V0a2V5LAotCQkJLmVuY3J5cHQJCT0JY2JjX2RlczNfMTkyX2VuY3J5cHQsCi0JCQkuZGVjcnlwdAkJPQljYmNfZGVzM18xOTJfZGVjcnlwdCwKKwkJCS5zZXRrZXkJCQk9CWRlczNfc2V0a2V5LAorCQkJLmVuY3J5cHQJCT0JY2JjX2RlczNfZW5jcnlwdCwKKwkJCS5kZWNyeXB0CQk9CWNiY19kZXMzX2RlY3J5cHQsCiAJCX0KIAl9CiB9OwogCi1zdGF0aWMgaW50IGRlc19zMzkwX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgY3RyX2Rlc2FsbF9jcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsIGxvbmcgZnVuYywKKwkJCSAgICBzdHJ1Y3QgczM5MF9kZXNfY3R4ICpjdHgsIHN0cnVjdCBibGtjaXBoZXJfd2FsayAqd2FsaykKK3sKKwlpbnQgcmV0ID0gYmxrY2lwaGVyX3dhbGtfdmlydF9ibG9jayhkZXNjLCB3YWxrLCBERVNfQkxPQ0tfU0laRSk7CisJdW5zaWduZWQgaW50IGksIG4sIG5ieXRlczsKKwl1OCBidWZbREVTX0JMT0NLX1NJWkVdOworCXU4ICpvdXQsICppbjsKKworCW1lbWNweShjdHJibGssIHdhbGstPml2LCBERVNfQkxPQ0tfU0laRSk7CisJd2hpbGUgKChuYnl0ZXMgPSB3YWxrLT5uYnl0ZXMpID49IERFU19CTE9DS19TSVpFKSB7CisJCW91dCA9IHdhbGstPmRzdC52aXJ0LmFkZHI7CisJCWluID0gd2Fsay0+c3JjLnZpcnQuYWRkcjsKKwkJd2hpbGUgKG5ieXRlcyA+PSBERVNfQkxPQ0tfU0laRSkgeworCQkJLyogYWxpZ24gdG8gYmxvY2sgc2l6ZSwgbWF4LiBQQUdFX1NJWkUgKi8KKwkJCW4gPSAobmJ5dGVzID4gUEFHRV9TSVpFKSA/IFBBR0VfU0laRSA6CisJCQkJbmJ5dGVzICYgfihERVNfQkxPQ0tfU0laRSAtIDEpOworCQkJZm9yIChpID0gREVTX0JMT0NLX1NJWkU7IGkgPCBuOyBpICs9IERFU19CTE9DS19TSVpFKSB7CisJCQkJbWVtY3B5KGN0cmJsayArIGksIGN0cmJsayArIGkgLSBERVNfQkxPQ0tfU0laRSwKKwkJCQkgICAgICAgREVTX0JMT0NLX1NJWkUpOworCQkJCWNyeXB0b19pbmMoY3RyYmxrICsgaSwgREVTX0JMT0NLX1NJWkUpOworCQkJfQorCQkJcmV0ID0gY3J5cHRfczM5MF9rbWN0cihmdW5jLCBjdHgtPmtleSwgb3V0LCBpbiwgbiwgY3RyYmxrKTsKKwkJCUJVR19PTigocmV0IDwgMCkgfHwgKHJldCAhPSBuKSk7CisJCQlpZiAobiA+IERFU19CTE9DS19TSVpFKQorCQkJCW1lbWNweShjdHJibGssIGN0cmJsayArIG4gLSBERVNfQkxPQ0tfU0laRSwKKwkJCQkgICAgICAgREVTX0JMT0NLX1NJWkUpOworCQkJY3J5cHRvX2luYyhjdHJibGssIERFU19CTE9DS19TSVpFKTsKKwkJCW91dCArPSBuOworCQkJaW4gKz0gbjsKKwkJCW5ieXRlcyAtPSBuOworCQl9CisJCXJldCA9IGJsa2NpcGhlcl93YWxrX2RvbmUoZGVzYywgd2FsaywgbmJ5dGVzKTsKKwl9CisKKwkvKiBmaW5hbCBibG9jayBtYXkgYmUgPCBERVNfQkxPQ0tfU0laRSwgY29weSBvbmx5IG5ieXRlcyAqLworCWlmIChuYnl0ZXMpIHsKKwkJb3V0ID0gd2Fsay0+ZHN0LnZpcnQuYWRkcjsKKwkJaW4gPSB3YWxrLT5zcmMudmlydC5hZGRyOworCQlyZXQgPSBjcnlwdF9zMzkwX2ttY3RyKGZ1bmMsIGN0eC0+a2V5LCBidWYsIGluLAorCQkJCSAgICAgICBERVNfQkxPQ0tfU0laRSwgY3RyYmxrKTsKKwkJQlVHX09OKHJldCA8IDAgfHwgcmV0ICE9IERFU19CTE9DS19TSVpFKTsKKwkJbWVtY3B5KG91dCwgYnVmLCBuYnl0ZXMpOworCQljcnlwdG9faW5jKGN0cmJsaywgREVTX0JMT0NLX1NJWkUpOworCQlyZXQgPSBibGtjaXBoZXJfd2Fsa19kb25lKGRlc2MsIHdhbGssIDApOworCX0KKwltZW1jcHkod2Fsay0+aXYsIGN0cmJsaywgREVTX0JMT0NLX1NJWkUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY3RyX2Rlc19lbmNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJCSAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IHMzOTBfZGVzX2N0eCAqY3R4ID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKTsKKwlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKKworCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOworCXJldHVybiBjdHJfZGVzYWxsX2NyeXB0KGRlc2MsIEtNQ1RSX0RFQV9FTkNSWVBULCBjdHgsICZ3YWxrKTsKK30KKworc3RhdGljIGludCBjdHJfZGVzX2RlY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkJICAgdW5zaWduZWQgaW50IG5ieXRlcykKK3sKKwlzdHJ1Y3QgczM5MF9kZXNfY3R4ICpjdHggPSBjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pOworCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOworCisJYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7CisJcmV0dXJuIGN0cl9kZXNhbGxfY3J5cHQoZGVzYywgS01DVFJfREVBX0RFQ1JZUFQsIGN0eCwgJndhbGspOworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgY3RyX2Rlc19hbGcgPSB7CisJLmNyYV9uYW1lCQk9CSJjdHIoZGVzKSIsCisJLmNyYV9kcml2ZXJfbmFtZQk9CSJjdHItZGVzLXMzOTAiLAorCS5jcmFfcHJpb3JpdHkJCT0JQ1JZUFRfUzM5MF9DT01QT1NJVEVfUFJJT1JJVFksCisJLmNyYV9mbGFncwkJPQlDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSLAorCS5jcmFfYmxvY2tzaXplCQk9CTEsCisJLmNyYV9jdHhzaXplCQk9CXNpemVvZihzdHJ1Y3QgczM5MF9kZXNfY3R4KSwKKwkuY3JhX3R5cGUJCT0JJmNyeXB0b19ibGtjaXBoZXJfdHlwZSwKKwkuY3JhX21vZHVsZQkJPQlUSElTX01PRFVMRSwKKwkuY3JhX2xpc3QJCT0JTElTVF9IRUFEX0lOSVQoY3RyX2Rlc19hbGcuY3JhX2xpc3QpLAorCS5jcmFfdQkJCT0JeworCQkuYmxrY2lwaGVyID0geworCQkJLm1pbl9rZXlzaXplCQk9CURFU19LRVlfU0laRSwKKwkJCS5tYXhfa2V5c2l6ZQkJPQlERVNfS0VZX1NJWkUsCisJCQkuaXZzaXplCQkJPQlERVNfQkxPQ0tfU0laRSwKKwkJCS5zZXRrZXkJCQk9CWRlc19zZXRrZXksCisJCQkuZW5jcnlwdAkJPQljdHJfZGVzX2VuY3J5cHQsCisJCQkuZGVjcnlwdAkJPQljdHJfZGVzX2RlY3J5cHQsCisJCX0KKwl9Cit9OworCitzdGF0aWMgaW50IGN0cl9kZXMzX2VuY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkJICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJCSAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCXN0cnVjdCBzMzkwX2Rlc19jdHggKmN0eCA9IGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSk7CisJc3RydWN0IGJsa2NpcGhlcl93YWxrIHdhbGs7CisKKwlibGtjaXBoZXJfd2Fsa19pbml0KCZ3YWxrLCBkc3QsIHNyYywgbmJ5dGVzKTsKKwlyZXR1cm4gY3RyX2Rlc2FsbF9jcnlwdChkZXNjLCBLTUNUUl9UREVBXzE5Ml9FTkNSWVBULCBjdHgsICZ3YWxrKTsKK30KKworc3RhdGljIGludCBjdHJfZGVzM19kZWNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJCSAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCQkgICAgdW5zaWduZWQgaW50IG5ieXRlcykKK3sKKwlzdHJ1Y3QgczM5MF9kZXNfY3R4ICpjdHggPSBjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pOworCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOworCisJYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7CisJcmV0dXJuIGN0cl9kZXNhbGxfY3J5cHQoZGVzYywgS01DVFJfVERFQV8xOTJfREVDUllQVCwgY3R4LCAmd2Fsayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBjdHJfZGVzM19hbGcgPSB7CisJLmNyYV9uYW1lCQk9CSJjdHIoZGVzM19lZGUpIiwKKwkuY3JhX2RyaXZlcl9uYW1lCT0JImN0ci1kZXMzX2VkZS1zMzkwIiwKKwkuY3JhX3ByaW9yaXR5CQk9CUNSWVBUX1MzOTBfQ09NUE9TSVRFX1BSSU9SSVRZLAorCS5jcmFfZmxhZ3MJCT0JQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUiwKKwkuY3JhX2Jsb2Nrc2l6ZQkJPQkxLAorCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2Yoc3RydWN0IHMzOTBfZGVzX2N0eCksCisJLmNyYV90eXBlCQk9CSZjcnlwdG9fYmxrY2lwaGVyX3R5cGUsCisJLmNyYV9tb2R1bGUJCT0JVEhJU19NT0RVTEUsCisJLmNyYV9saXN0CQk9CUxJU1RfSEVBRF9JTklUKGN0cl9kZXMzX2FsZy5jcmFfbGlzdCksCisJLmNyYV91CQkJPQl7CisJCS5ibGtjaXBoZXIgPSB7CisJCQkubWluX2tleXNpemUJCT0JREVTM19LRVlfU0laRSwKKwkJCS5tYXhfa2V5c2l6ZQkJPQlERVMzX0tFWV9TSVpFLAorCQkJLml2c2l6ZQkJCT0JREVTX0JMT0NLX1NJWkUsCisJCQkuc2V0a2V5CQkJPQlkZXMzX3NldGtleSwKKwkJCS5lbmNyeXB0CQk9CWN0cl9kZXMzX2VuY3J5cHQsCisJCQkuZGVjcnlwdAkJPQljdHJfZGVzM19kZWNyeXB0LAorCQl9CisJfQorfTsKKworc3RhdGljIGludCBfX2luaXQgZGVzX3MzOTBfaW5pdCh2b2lkKQogewogCWludCByZXQ7CiAKLQlpZiAoIWNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS01fREVBX0VOQ1JZUFQpIHx8Ci0JICAgICFjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKEtNX1RERUFfMTkyX0VOQ1JZUFQpKQorCWlmICghY3J5cHRfczM5MF9mdW5jX2F2YWlsYWJsZShLTV9ERUFfRU5DUllQVCwgQ1JZUFRfUzM5MF9NU0EpIHx8CisJICAgICFjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKEtNX1RERUFfMTkyX0VOQ1JZUFQsIENSWVBUX1MzOTBfTVNBKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJcmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmZGVzX2FsZyk7CkBAIC0zOTQsMjMgKzUyNiw0NiBAQAogCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmNiY19kZXNfYWxnKTsKIAlpZiAocmV0KQogCQlnb3RvIGNiY19kZXNfZXJyOwotCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmRlczNfMTkyX2FsZyk7CisJcmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmZGVzM19hbGcpOwogCWlmIChyZXQpCi0JCWdvdG8gZGVzM18xOTJfZXJyOwotCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmVjYl9kZXMzXzE5Ml9hbGcpOworCQlnb3RvIGRlczNfZXJyOworCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmVjYl9kZXMzX2FsZyk7CiAJaWYgKHJldCkKLQkJZ290byBlY2JfZGVzM18xOTJfZXJyOwotCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmNiY19kZXMzXzE5Ml9hbGcpOworCQlnb3RvIGVjYl9kZXMzX2VycjsKKwlyZXQgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZjYmNfZGVzM19hbGcpOwogCWlmIChyZXQpCi0JCWdvdG8gY2JjX2RlczNfMTkyX2VycjsKKwkJZ290byBjYmNfZGVzM19lcnI7CisKKwlpZiAoY3J5cHRfczM5MF9mdW5jX2F2YWlsYWJsZShLTUNUUl9ERUFfRU5DUllQVCwKKwkJCUNSWVBUX1MzOTBfTVNBIHwgQ1JZUFRfUzM5MF9NU0E0KSAmJgorCSAgICBjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKEtNQ1RSX1RERUFfMTkyX0VOQ1JZUFQsCisJCQlDUllQVF9TMzkwX01TQSB8IENSWVBUX1MzOTBfTVNBNCkpIHsKKwkJcmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmY3RyX2Rlc19hbGcpOworCQlpZiAocmV0KQorCQkJZ290byBjdHJfZGVzX2VycjsKKwkJcmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmY3RyX2RlczNfYWxnKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gY3RyX2RlczNfZXJyOworCQljdHJibGsgPSAodTggKikgX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOworCQlpZiAoIWN0cmJsaykgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gY3RyX21lbV9lcnI7CisJCX0KKwl9CiBvdXQ6CiAJcmV0dXJuIHJldDsKIAotY2JjX2RlczNfMTkyX2VycjoKLQljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmVjYl9kZXMzXzE5Ml9hbGcpOwotZWNiX2RlczNfMTkyX2VycjoKLQljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmRlczNfMTkyX2FsZyk7Ci1kZXMzXzE5Ml9lcnI6CitjdHJfbWVtX2VycjoKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmN0cl9kZXMzX2FsZyk7CitjdHJfZGVzM19lcnI6CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZjdHJfZGVzX2FsZyk7CitjdHJfZGVzX2VycjoKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmNiY19kZXMzX2FsZyk7CitjYmNfZGVzM19lcnI6CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZlY2JfZGVzM19hbGcpOworZWNiX2RlczNfZXJyOgorCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmZGVzM19hbGcpOworZGVzM19lcnI6CiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZjYmNfZGVzX2FsZyk7CiBjYmNfZGVzX2VycjoKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmVjYl9kZXNfYWxnKTsKQEAgLTQyMiw5ICs1NzcsMTQgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGRlc19zMzkwX2V4aXQodm9pZCkKIHsKLQljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmNiY19kZXMzXzE5Ml9hbGcpOwotCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmZWNiX2RlczNfMTkyX2FsZyk7Ci0JY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZkZXMzXzE5Ml9hbGcpOworCWlmIChjdHJibGspIHsKKwkJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZjdHJfZGVzX2FsZyk7CisJCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmY3RyX2RlczNfYWxnKTsKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBjdHJibGspOworCX0KKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmNiY19kZXMzX2FsZyk7CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZlY2JfZGVzM19hbGcpOworCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmZGVzM19hbGcpOwogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmY2JjX2Rlc19hbGcpOwogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmZWNiX2Rlc19hbGcpOwogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmZGVzX2FsZyk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL2doYXNoX3MzOTAuYyBiL2FyY2gvczM5MC9jcnlwdG8vZ2hhc2hfczM5MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYmQxNzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3MzOTAvY3J5cHRvL2doYXNoX3MzOTAuYwpAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIENyeXB0b2dyYXBoaWMgQVBJLgorICoKKyAqIHMzOTAgaW1wbGVtZW50YXRpb24gb2YgdGhlIEdIQVNIIGFsZ29yaXRobSBmb3IgR0NNIChHYWxvaXMvQ291bnRlciBNb2RlKS4KKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMTEKKyAqIEF1dGhvcihzKTogR2VyYWxkIFNjaGFlZmVyIDxnZXJhbGQuc2NoYWVmZXJAZGUuaWJtLmNvbT4KKyAqLworCisjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2hhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgImNyeXB0X3MzOTAuaCIKKworI2RlZmluZSBHSEFTSF9CTE9DS19TSVpFCTE2CisjZGVmaW5lIEdIQVNIX0RJR0VTVF9TSVpFCTE2CisKK3N0cnVjdCBnaGFzaF9jdHggeworCXU4IGljdlsxNl07CisJdTgga2V5WzE2XTsKK307CisKK3N0cnVjdCBnaGFzaF9kZXNjX2N0eCB7CisJdTggYnVmZmVyW0dIQVNIX0JMT0NLX1NJWkVdOworCXUzMiBieXRlczsKK307CisKK3N0YXRpYyBpbnQgZ2hhc2hfaW5pdChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3QgZ2hhc2hfZGVzY19jdHggKmRjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKworCW1lbXNldChkY3R4LCAwLCBzaXplb2YoKmRjdHgpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdoYXNoX3NldGtleShzdHJ1Y3QgY3J5cHRvX3NoYXNoICp0Zm0sCisJCQljb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKQoreworCXN0cnVjdCBnaGFzaF9jdHggKmN0eCA9IGNyeXB0b19zaGFzaF9jdHgodGZtKTsKKworCWlmIChrZXlsZW4gIT0gR0hBU0hfQkxPQ0tfU0laRSkgeworCQljcnlwdG9fc2hhc2hfc2V0X2ZsYWdzKHRmbSwgQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU4pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltZW1jcHkoY3R4LT5rZXksIGtleSwgR0hBU0hfQkxPQ0tfU0laRSk7CisJbWVtc2V0KGN0eC0+aWN2LCAwLCBHSEFTSF9CTE9DS19TSVpFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdoYXNoX3VwZGF0ZShzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywKKwkJCSBjb25zdCB1OCAqc3JjLCB1bnNpZ25lZCBpbnQgc3JjbGVuKQoreworCXN0cnVjdCBnaGFzaF9kZXNjX2N0eCAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworCXN0cnVjdCBnaGFzaF9jdHggKmN0eCA9IGNyeXB0b19zaGFzaF9jdHgoZGVzYy0+dGZtKTsKKwl1bnNpZ25lZCBpbnQgbjsKKwl1OCAqYnVmID0gZGN0eC0+YnVmZmVyOworCWludCByZXQ7CisKKwlpZiAoZGN0eC0+Ynl0ZXMpIHsKKwkJdTggKnBvcyA9IGJ1ZiArIChHSEFTSF9CTE9DS19TSVpFIC0gZGN0eC0+Ynl0ZXMpOworCisJCW4gPSBtaW4oc3JjbGVuLCBkY3R4LT5ieXRlcyk7CisJCWRjdHgtPmJ5dGVzIC09IG47CisJCXNyY2xlbiAtPSBuOworCisJCW1lbWNweShwb3MsIHNyYywgbik7CisJCXNyYyArPSBuOworCisJCWlmICghZGN0eC0+Ynl0ZXMpIHsKKwkJCXJldCA9IGNyeXB0X3MzOTBfa2ltZChLSU1EX0dIQVNILCBjdHgsIGJ1ZiwKKwkJCQkJICAgICAgR0hBU0hfQkxPQ0tfU0laRSk7CisJCQlCVUdfT04ocmV0ICE9IEdIQVNIX0JMT0NLX1NJWkUpOworCQl9CisJfQorCisJbiA9IHNyY2xlbiAmIH4oR0hBU0hfQkxPQ0tfU0laRSAtIDEpOworCWlmIChuKSB7CisJCXJldCA9IGNyeXB0X3MzOTBfa2ltZChLSU1EX0dIQVNILCBjdHgsIHNyYywgbik7CisJCUJVR19PTihyZXQgIT0gbik7CisJCXNyYyArPSBuOworCQlzcmNsZW4gLT0gbjsKKwl9CisKKwlpZiAoc3JjbGVuKSB7CisJCWRjdHgtPmJ5dGVzID0gR0hBU0hfQkxPQ0tfU0laRSAtIHNyY2xlbjsKKwkJbWVtY3B5KGJ1Ziwgc3JjLCBzcmNsZW4pOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBnaGFzaF9mbHVzaChzdHJ1Y3QgZ2hhc2hfY3R4ICpjdHgsIHN0cnVjdCBnaGFzaF9kZXNjX2N0eCAqZGN0eCkKK3sKKwl1OCAqYnVmID0gZGN0eC0+YnVmZmVyOworCWludCByZXQ7CisKKwlpZiAoZGN0eC0+Ynl0ZXMpIHsKKwkJdTggKnBvcyA9IGJ1ZiArIChHSEFTSF9CTE9DS19TSVpFIC0gZGN0eC0+Ynl0ZXMpOworCisJCW1lbXNldChwb3MsIDAsIGRjdHgtPmJ5dGVzKTsKKworCQlyZXQgPSBjcnlwdF9zMzkwX2tpbWQoS0lNRF9HSEFTSCwgY3R4LCBidWYsIEdIQVNIX0JMT0NLX1NJWkUpOworCQlCVUdfT04ocmV0ICE9IEdIQVNIX0JMT0NLX1NJWkUpOworCX0KKworCWRjdHgtPmJ5dGVzID0gMDsKK30KKworc3RhdGljIGludCBnaGFzaF9maW5hbChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgdTggKmRzdCkKK3sKKwlzdHJ1Y3QgZ2hhc2hfZGVzY19jdHggKmRjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKwlzdHJ1Y3QgZ2hhc2hfY3R4ICpjdHggPSBjcnlwdG9fc2hhc2hfY3R4KGRlc2MtPnRmbSk7CisKKwlnaGFzaF9mbHVzaChjdHgsIGRjdHgpOworCW1lbWNweShkc3QsIGN0eC0+aWN2LCBHSEFTSF9CTE9DS19TSVpFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNoYXNoX2FsZyBnaGFzaF9hbGcgPSB7CisJLmRpZ2VzdHNpemUJPSBHSEFTSF9ESUdFU1RfU0laRSwKKwkuaW5pdAkJPSBnaGFzaF9pbml0LAorCS51cGRhdGUJCT0gZ2hhc2hfdXBkYXRlLAorCS5maW5hbAkJPSBnaGFzaF9maW5hbCwKKwkuc2V0a2V5CQk9IGdoYXNoX3NldGtleSwKKwkuZGVzY3NpemUJPSBzaXplb2Yoc3RydWN0IGdoYXNoX2Rlc2NfY3R4KSwKKwkuYmFzZQkJPSB7CisJCS5jcmFfbmFtZQkJPSAiZ2hhc2giLAorCQkuY3JhX2RyaXZlcl9uYW1lCT0gImdoYXNoLXMzOTAiLAorCQkuY3JhX3ByaW9yaXR5CQk9IENSWVBUX1MzOTBfUFJJT1JJVFksCisJCS5jcmFfZmxhZ3MJCT0gQ1JZUFRPX0FMR19UWVBFX1NIQVNILAorCQkuY3JhX2Jsb2Nrc2l6ZQkJPSBHSEFTSF9CTE9DS19TSVpFLAorCQkuY3JhX2N0eHNpemUJCT0gc2l6ZW9mKHN0cnVjdCBnaGFzaF9jdHgpLAorCQkuY3JhX21vZHVsZQkJPSBUSElTX01PRFVMRSwKKwkJLmNyYV9saXN0CQk9IExJU1RfSEVBRF9JTklUKGdoYXNoX2FsZy5iYXNlLmNyYV9saXN0KSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZ2hhc2hfbW9kX2luaXQodm9pZCkKK3sKKwlpZiAoIWNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS0lNRF9HSEFTSCwKKwkJCQkgICAgICAgQ1JZUFRfUzM5MF9NU0EgfCBDUllQVF9TMzkwX01TQTQpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX3NoYXNoKCZnaGFzaF9hbGcpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZ2hhc2hfbW9kX2V4aXQodm9pZCkKK3sKKwljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaCgmZ2hhc2hfYWxnKTsKK30KKworbW9kdWxlX2luaXQoZ2hhc2hfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoZ2hhc2hfbW9kX2V4aXQpOworCitNT0RVTEVfQUxJQVMoImdoYXNoIik7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiR0hBU0ggTWVzc2FnZSBEaWdlc3QgQWxnb3JpdGhtLCBzMzkwIGltcGxlbWVudGF0aW9uIik7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3BybmcuYyBiL2FyY2gvczM5MC9jcnlwdG8vcHJuZy5jCmluZGV4IDk3NWUzYWIuLjA4MDhmYmYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vcHJuZy5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vcHJuZy5jCkBAIC03Niw3ICs3Niw3IEBACiAKIAkvKiBBZGQgdGhlIGVudHJvcHkgKi8KIAl3aGlsZSAobmJ5dGVzID49IDgpIHsKLQkJKigoX191NjQgKilwYXJtX2Jsb2NrKSBePSAqKChfX3U2NCAqKWJ1ZitpKjgpOworCQkqKChfX3U2NCAqKXBhcm1fYmxvY2spIF49ICooKF9fdTY0ICopKGJ1ZitpKSk7CiAJCXBybmdfYWRkX2VudHJvcHkoKTsKIAkJaSArPSA4OwogCQluYnl0ZXMgLT0gODsKQEAgLTE2Niw3ICsxNjYsNyBAQAogCWludCByZXQ7CiAKIAkvKiBjaGVjayBpZiB0aGUgQ1BVIGhhcyBhIFBSTkcgKi8KLQlpZiAoIWNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS01DX1BSTkcpKQorCWlmICghY3J5cHRfczM5MF9mdW5jX2F2YWlsYWJsZShLTUNfUFJORywgQ1JZUFRfUzM5MF9NU0EpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlpZiAocHJuZ19jaHVua19zaXplIDwgOCkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vc2hhMV9zMzkwLmMgYi9hcmNoL3MzOTAvY3J5cHRvL3NoYTFfczM5MC5jCmluZGV4IGY2ZGU3ODIuLmU5ODY4YzYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vc2hhMV9zMzkwLmMKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9zaGExX3MzOTAuYwpAQCAtOTAsNyArOTAsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzaGExX3MzOTBfaW5pdCh2b2lkKQogewotCWlmICghY3J5cHRfczM5MF9mdW5jX2F2YWlsYWJsZShLSU1EX1NIQV8xKSkKKwlpZiAoIWNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS0lNRF9TSEFfMSwgQ1JZUFRfUzM5MF9NU0EpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9zaGFzaCgmYWxnKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vc2hhMjU2X3MzOTAuYyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhMjU2X3MzOTAuYwppbmRleCA2MWE3ZGIzLi41ZWQ4ZDY0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL3NoYTI1Nl9zMzkwLmMKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9zaGEyNTZfczM5MC5jCkBAIC04Niw3ICs4Niw3IEBACiAKIHN0YXRpYyBpbnQgc2hhMjU2X3MzOTBfaW5pdCh2b2lkKQogewotCWlmICghY3J5cHRfczM5MF9mdW5jX2F2YWlsYWJsZShLSU1EX1NIQV8yNTYpKQorCWlmICghY3J5cHRfczM5MF9mdW5jX2F2YWlsYWJsZShLSU1EX1NIQV8yNTYsIENSWVBUX1MzOTBfTVNBKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9zaGFzaCgmYWxnKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vc2hhNTEyX3MzOTAuYyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhNTEyX3MzOTAuYwppbmRleCA0YmY3M2QwLi4zMmE4MTM4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL3NoYTUxMl9zMzkwLmMKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9zaGE1MTJfczM5MC5jCkBAIC0xMzIsNyArMTMyLDcgQEAKIHsKIAlpbnQgcmV0OwogCi0JaWYgKCFjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKEtJTURfU0hBXzUxMikpCisJaWYgKCFjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKEtJTURfU0hBXzUxMiwgQ1JZUFRfUzM5MF9NU0EpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJaWYgKChyZXQgPSBjcnlwdG9fcmVnaXN0ZXJfc2hhc2goJnNoYTUxMl9hbGcpKSA8IDApCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggNDNhNWM3OC4uM2UyMDM4MyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC0xMSw1ICsxMSw2IEBACiBpbnQgc2V0X21lbW9yeV9ybyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7CiBpbnQgc2V0X21lbW9yeV9ydyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7CiBpbnQgc2V0X21lbW9yeV9ueCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyk7CitpbnQgc2V0X21lbW9yeV94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTsKIAogI2VuZGlmIC8qIF9TMzkwX0NBQ0hFRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2RpYWcuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9kaWFnLmgKaW5kZXggNzJiMmUyZi4uN2U5MWM1OCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2RpYWcuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZGlhZy5oCkBAIC05LDkgKzksMjIgQEAKICNkZWZpbmUgX0FTTV9TMzkwX0RJQUdfSAogCiAvKgotICogRGlhZ25vc2UgMTA6IFJlbGVhc2UgcGFnZXMKKyAqIERpYWdub3NlIDEwOiBSZWxlYXNlIHBhZ2UgcmFuZ2UKICAqLwotZXh0ZXJuIHZvaWQgZGlhZzEwKHVuc2lnbmVkIGxvbmcgYWRkcik7CitzdGF0aWMgaW5saW5lIHZvaWQgZGlhZzEwX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG51bV9wZm4pCit7CisJdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyLCBlbmRfYWRkcjsKKworCXN0YXJ0X2FkZHIgPSBzdGFydF9wZm4gPDwgUEFHRV9TSElGVDsKKwllbmRfYWRkciA9IChzdGFydF9wZm4gKyBudW1fcGZuIC0gMSkgPDwgUEFHRV9TSElGVDsKKworCWFzbSB2b2xhdGlsZSgKKwkJIjA6CWRpYWcJJTAsJTEsMHgxMFxuIgorCQkiMTpcbiIKKwkJRVhfVEFCTEUoMGIsIDFiKQorCQlFWF9UQUJMRSgxYiwgMWIpCisJCTogOiAiYSIgKHN0YXJ0X2FkZHIpLCAiYSIgKGVuZF9hZGRyKSk7Cit9CiAKIC8qCiAgKiBEaWFnbm9zZSAxNDogSW5wdXQgc3Bvb2wgZmlsZSBtYW5pcHVsYXRpb24KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9mdHJhY2UuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9mdHJhY2UuaAppbmRleCAzYzI5YmU0Li5iNzkzMWZhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZnRyYWNlLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCkBAIC0xMSwxNSArMTEsMTMgQEAKIAogI2lmZGVmIENPTkZJR182NEJJVAogI2RlZmluZSBNQ09VTlRfSU5TTl9TSVpFICAxMgotI2RlZmluZSBNQ09VTlRfT0ZGU0VUCSAgIDgKICNlbHNlCiAjZGVmaW5lIE1DT1VOVF9JTlNOX1NJWkUgIDIwCi0jZGVmaW5lIE1DT1VOVF9PRkZTRVQJICAgNAogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmdHJhY2VfY2FsbF9hZGp1c3QodW5zaWduZWQgbG9uZyBhZGRyKQogewotCXJldHVybiBhZGRyIC0gTUNPVU5UX09GRlNFVDsKKwlyZXR1cm4gYWRkcjsKIH0KIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2p1bXBfbGFiZWwuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9qdW1wX2xhYmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVhNmNmMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9qdW1wX2xhYmVsLmgKQEAgLTAsMCArMSwzNyBAQAorI2lmbmRlZiBfQVNNX1MzOTBfSlVNUF9MQUJFTF9ICisjZGVmaW5lIF9BU01fUzM5MF9KVU1QX0xBQkVMX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgSlVNUF9MQUJFTF9OT1BfU0laRSA2CisKKyNpZmRlZiBDT05GSUdfNjRCSVQKKyNkZWZpbmUgQVNNX1BUUiAiLnF1YWQiCisjZGVmaW5lIEFTTV9BTElHTiAiLmJhbGlnbiA4IgorI2Vsc2UKKyNkZWZpbmUgQVNNX1BUUiAiLmxvbmciCisjZGVmaW5lIEFTTV9BTElHTiAiLmJhbGlnbiA0IgorI2VuZGlmCisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBhcmNoX3N0YXRpY19icmFuY2goc3RydWN0IGp1bXBfbGFiZWxfa2V5ICprZXkpCit7CisJYXNtIGdvdG8oIjA6CWJyY2wgMCwwXG4iCisJCSIucHVzaHNlY3Rpb24gX19qdW1wX3RhYmxlLCBcImF3XCJcbiIKKwkJQVNNX0FMSUdOICJcbiIKKwkJQVNNX1BUUiAiIDBiLCAlbFtsYWJlbF0sICUwXG4iCisJCSIucG9wc2VjdGlvblxuIgorCQk6IDogIlgiIChrZXkpIDogOiBsYWJlbCk7CisJcmV0dXJuIGZhbHNlOworbGFiZWw6CisJcmV0dXJuIHRydWU7Cit9CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBqdW1wX2xhYmVsX3Q7CisKK3N0cnVjdCBqdW1wX2VudHJ5IHsKKwlqdW1wX2xhYmVsX3QgY29kZTsKKwlqdW1wX2xhYmVsX3QgdGFyZ2V0OworCWp1bXBfbGFiZWxfdCBrZXk7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggYTZmMGU3Yy4uOGMyNzdjYSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTIzLDcgKzIzLDcgQEAKICNpZmRlZiBDT05GSUdfNjRCSVQKIAltbS0+Y29udGV4dC5hc2NlX2JpdHMgfD0gX0FTQ0VfVFlQRV9SRUdJT04zOwogI2VuZGlmCi0JaWYgKGN1cnJlbnQtPm1tLT5jb250ZXh0LmFsbG9jX3Bnc3RlKSB7CisJaWYgKGN1cnJlbnQtPm1tICYmIGN1cnJlbnQtPm1tLT5jb250ZXh0LmFsbG9jX3Bnc3RlKSB7CiAJCS8qCiAJCSAqIGFsbG9jX3Bnc3RlIGluZGljYXRlcywgdGhhdCBhbnkgTkVXIGNvbnRleHQgd2lsbCBiZSBjcmVhdGVkCiAJCSAqIHdpdGggZXh0ZW5kZWQgcGFnZSB0YWJsZXMuIFRoZSBvbGQgY29udGV4dCBpcyB1bmNoYW5nZWQuIFRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUKaW5kZXggNjQyMzBiYy4uNWZmMTVkYSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlCkBAIC0yMyw3ICsyMyw3IEBACiBvYmoteQk6PSAgYml0bWFwLm8gdHJhcHMubyB0aW1lLm8gcHJvY2Vzcy5vIGJhc2UubyBlYXJseS5vIHNldHVwLm8gXAogCSAgICBwcm9jZXNzb3IubyBzeXNfczM5MC5vIHB0cmFjZS5vIHNpZ25hbC5vIGNwY21kLm8gZWJjZGljLm8gXAogCSAgICBzMzkwX2V4dC5vIGRlYnVnLm8gaXJxLm8gaXBsLm8gZGlzLm8gZGlhZy5vIG1lbV9kZXRlY3QubyBcCi0JICAgIHZkc28ubyB2dGltZS5vIHN5c2luZm8ubyBubWkubyBzY2xwLm8KKwkgICAgdmRzby5vIHZ0aW1lLm8gc3lzaW5mby5vIG5taS5vIHNjbHAubyBqdW1wX2xhYmVsLm8KIAogb2JqLXkJKz0gJChpZiAkKENPTkZJR182NEJJVCksZW50cnk2NC5vLGVudHJ5Lm8pCiBvYmoteQkrPSAkKGlmICQoQ09ORklHXzY0QklUKSxyZWlwbDY0Lm8scmVpcGwubykKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZGlhZy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9kaWFnLmMKaW5kZXggYzAzMmQxMS4uODIzN2ZjMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9kaWFnLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9kaWFnLmMKQEAgLTksMjcgKzksNiBAQAogI2luY2x1ZGUgPGFzbS9kaWFnLmg+CiAKIC8qCi0gKiBEaWFnbm9zZSAxMDogUmVsZWFzZSBwYWdlcwotICovCi12b2lkIGRpYWcxMCh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JaWYgKGFkZHIgPj0gMHg3ZmYwMDAwMCkKLQkJcmV0dXJuOwotCWFzbSB2b2xhdGlsZSgKLSNpZmRlZiBDT05GSUdfNjRCSVQKLQkJIglzYW0zMVxuIgotCQkiCWRpYWcJJTAsJTAsMHgxMFxuIgotCQkiMDoJc2FtNjRcbiIKLSNlbHNlCi0JCSIJZGlhZwklMCwlMCwweDEwXG4iCi0JCSIwOlxuIgotI2VuZGlmCi0JCUVYX1RBQkxFKDBiLCAwYikKLQkJOiA6ICJhIiAoYWRkcikpOwotfQotRVhQT1JUX1NZTUJPTChkaWFnMTApOwotCi0vKgogICogRGlhZ25vc2UgMTQ6IElucHV0IHNwb29sIGZpbGUgbWFuaXB1bGF0aW9uCiAgKi8KIGludCBkaWFnMTQodW5zaWduZWQgbG9uZyByeCwgdW5zaWduZWQgbG9uZyByeTEsIHVuc2lnbmVkIGxvbmcgc3ViY29kZSkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZGlzLmMgYi9hcmNoL3MzOTAva2VybmVsL2Rpcy5jCmluZGV4IGM4MzcyNmMuLjNkNGE3OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZGlzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9kaXMuYwpAQCAtNjcyLDYgKzY3Miw3IEBACiAJeyAicnAiLCAweDc3LCBJTlNUUl9TX1JEIH0sCiAJeyAic3Rja2UiLCAweDc4LCBJTlNUUl9TX1JEIH0sCiAJeyAic2FjZiIsIDB4NzksIElOU1RSX1NfUkQgfSwKKwl7ICJzcHAiLCAweDgwLCBJTlNUUl9TX1JEIH0sCiAJeyAic3RzaSIsIDB4N2QsIElOU1RSX1NfUkQgfSwKIAl7ICJzcm5tIiwgMHg5OSwgSU5TVFJfU19SRCB9LAogCXsgInN0ZnBjIiwgMHg5YywgSU5TVFJfU19SRCB9LApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TCmluZGV4IDY0OGY2NDIuLjFiNjdmYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMKQEAgLTgzNiw3ICs4MzYsNyBAQAogCXN0b3NtCV9fU0ZfRU1QVFkoJXIxNSksMHgwNAkjIG5vdyB3ZSBjYW4gdHVybiBkYXQgb24KIAliYXNyCSVyMTQsMAogCWwJJXIxNCxyZXN0YXJ0X2FkZHItLiglcjE0KQotCWJyCSVyMTQJCQkjIGJyYW5jaCB0byBzdGFydF9zZWNvbmRhcnkKKwliYXNyCSVyMTQsJXIxNAkJIyBicmFuY2ggdG8gc3RhcnRfc2Vjb25kYXJ5CiByZXN0YXJ0X2FkZHI6CiAJLmxvbmcJc3RhcnRfc2Vjb25kYXJ5CiAJLmFsaWduCTgKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMKaW5kZXggOWQzNjAzZC4uOWZkODY0NSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMKQEAgLTg0MSw3ICs4NDEsNyBAQAogCW12YwlfX0xDX1NZU1RFTV9USU1FUig4KSxfX1RJX3N5c3RlbV90aW1lciglcjEpCiAJeGMJX19MQ19TVEVBTF9USU1FUig4KSxfX0xDX1NURUFMX1RJTUVSCiAJc3Rvc20JX19TRl9FTVBUWSglcjE1KSwweDA0CSMgbm93IHdlIGNhbiB0dXJuIGRhdCBvbgotCWpnCXN0YXJ0X3NlY29uZGFyeQorCWJyYXNsCSVyMTQsc3RhcnRfc2Vjb25kYXJ5CiAJLmFsaWduCTgKIHJlc3RhcnRfdnRpbWU6CiAJLmxvbmcJMHg3ZmZmZmZmZiwweGZmZmZmZmZmCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2p1bXBfbGFiZWwuYyBiL2FyY2gvczM5MC9rZXJuZWwvanVtcF9sYWJlbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0Y2MwNmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3MzOTAva2VybmVsL2p1bXBfbGFiZWwuYwpAQCAtMCwwICsxLDU5IEBACisvKgorICogSnVtcCBsYWJlbCBzMzkwIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMTEKKyAqIEF1dGhvcihzKTogSmFuIEdsYXViZXIgPGphbmdAbGludXgudm5ldC5pYm0uY29tPgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0b3BfbWFjaGluZS5oPgorI2luY2x1ZGUgPGxpbnV4L2p1bXBfbGFiZWwuaD4KKyNpbmNsdWRlIDxhc20vaXBsLmg+CisKKyNpZmRlZiBIQVZFX0pVTVBfTEFCRUwKKworc3RydWN0IGluc24geworCXUxNiBvcGNvZGU7CisJczMyIG9mZnNldDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBpbnNuX2FyZ3MgeworCXVuc2lnbmVkIGxvbmcgKnRhcmdldDsKKwlzdHJ1Y3QgaW5zbiAqaW5zbjsKKwlzc2l6ZV90IHNpemU7Cit9OworCitzdGF0aWMgaW50IF9fYXJjaF9qdW1wX2xhYmVsX3RyYW5zZm9ybSh2b2lkICpkYXRhKQoreworCXN0cnVjdCBpbnNuX2FyZ3MgKmFyZ3MgPSBkYXRhOworCWludCByYzsKKworCXJjID0gcHJvYmVfa2VybmVsX3dyaXRlKGFyZ3MtPnRhcmdldCwgYXJncy0+aW5zbiwgYXJncy0+c2l6ZSk7CisJV0FSTl9PTl9PTkNFKHJjIDwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYXJjaF9qdW1wX2xhYmVsX3RyYW5zZm9ybShzdHJ1Y3QganVtcF9lbnRyeSAqZW50cnksCisJCQkgICAgICAgZW51bSBqdW1wX2xhYmVsX3R5cGUgdHlwZSkKK3sKKwlzdHJ1Y3QgaW5zbl9hcmdzIGFyZ3M7CisJc3RydWN0IGluc24gaW5zbjsKKworCWlmICh0eXBlID09IEpVTVBfTEFCRUxfRU5BQkxFKSB7CisJCS8qIGJyY2wgMTUsb2Zmc2V0ICovCisJCWluc24ub3Bjb2RlID0gMHhjMGY0OworCQlpbnNuLm9mZnNldCA9IChlbnRyeS0+dGFyZ2V0IC0gZW50cnktPmNvZGUpID4+IDE7CisJfSBlbHNlIHsKKwkJLyogYnJjbCAwLDAgKi8KKwkJaW5zbi5vcGNvZGUgPSAweGMwMDQ7CisJCWluc24ub2Zmc2V0ID0gMDsKKwl9CisKKwlhcmdzLnRhcmdldCA9ICh2b2lkICopIGVudHJ5LT5jb2RlOworCWFyZ3MuaW5zbiA9ICZpbnNuOworCWFyZ3Muc2l6ZSA9IEpVTVBfTEFCRUxfTk9QX1NJWkU7CisKKwlzdG9wX21hY2hpbmUoX19hcmNoX2p1bXBfbGFiZWxfdHJhbnNmb3JtLCAmYXJncywgTlVMTCk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9zaWU2NGEuUyBiL2FyY2gvczM5MC9rdm0vc2llNjRhLlMKaW5kZXggN2U5ZDMwZC4uYWIwZTA0MSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9zaWU2NGEuUworKysgYi9hcmNoL3MzOTAva3ZtL3NpZTY0YS5TCkBAIC00OCwxMCArNDgsMTAgQEAKIAl0bQlfX1RJX2ZsYWdzKzcoJXIyKSxfVElGX0VYSVRfU0lFCiAJanoJMGYKIAlsYXJsCSVyMixzaWVfZXhpdAkJCSMgd29yayBwZW5kaW5nLCBsZWF2ZSBzaWUKLQlzdGcJJXIyLF9fTENfUkVUVVJOX1BTVys4CisJc3RnCSVyMixTUElfUFNXKzgoMCwlcjE1KQogCWJyCSVyMTQKIDA6CWxhcmwJJXIyLHNpZV9yZWVudGVyCQkJIyByZS1lbnRlciB3aXRoIGd1ZXN0IGlkCi0Jc3RnCSVyMixfX0xDX1JFVFVSTl9QU1crOAorCXN0ZwklcjIsU1BJX1BTVys4KDAsJXIxNSkKIDE6CWJyCSVyMTQKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9jbW0uYyBiL2FyY2gvczM5MC9tbS9jbW0uYwppbmRleCBjNjZmZmQ4Li4xZjFkYmE5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vY21tLmMKKysrIGIvYXJjaC9zMzkwL21tL2NtbS5jCkBAIC05MSw3ICs5MSw3IEBACiAJCQl9IGVsc2UKIAkJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIG5wYSk7CiAJCX0KLQkJZGlhZzEwKGFkZHIpOworCQlkaWFnMTBfcmFuZ2UoYWRkciA+PiBQQUdFX1NISUZULCAxKTsKIAkJcGEtPnBhZ2VzW3BhLT5pbmRleCsrXSA9IGFkZHI7CiAJCSgqY291bnRlcikrKzsKIAkJc3Bpbl91bmxvY2soJmNtbV9sb2NrKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9mYXVsdC5jIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKaW5kZXggOTIxN2UzMy4uYWI5ODgxMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKQEAgLTU0Myw3ICs1NDMsNiBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwogCV9fdTE2IHN1YmNvZGU7CiAKLQlrc3RhdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKS5pcnFzW0VYVElOVF9QRkxdKys7CiAJLyoKIAkgKiBHZXQgdGhlIGV4dGVybmFsIGludGVycnVwdGlvbiBzdWJjb2RlICYgcGZhdWx0CiAJICogaW5pdGlhbC9jb21wbGV0aW9uIHNpZ25hbCBiaXQuIFZNIHN0b3JlcyB0aGlzIApAQCAtNTUzLDE0ICs1NTIsMTUgQEAKIAlzdWJjb2RlID0gZXh0X2ludF9jb2RlID4+IDE2OwogCWlmICgoc3ViY29kZSAmIDB4ZmYwMCkgIT0gX19TVUJDT0RFX01BU0spCiAJCXJldHVybjsKKwlrc3RhdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKS5pcnFzW0VYVElOVF9QRkxdKys7CiAKIAkvKgogCSAqIEdldCB0aGUgdG9rZW4gKD0gYWRkcmVzcyBvZiB0aGUgdGFzayBzdHJ1Y3R1cmUgb2YgdGhlIGFmZmVjdGVkIHRhc2spLgogCSAqLwogI2lmZGVmIENPTkZJR182NEJJVAotCXRzayA9ICooc3RydWN0IHRhc2tfc3RydWN0ICoqKSBwYXJhbTY0OworCXRzayA9IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKikgcGFyYW02NDsKICNlbHNlCi0JdHNrID0gKihzdHJ1Y3QgdGFza19zdHJ1Y3QgKiopIHBhcmFtMzI7CisJdHNrID0gKHN0cnVjdCB0YXNrX3N0cnVjdCAqKSBwYXJhbTMyOwogI2VuZGlmCiAKIAlpZiAoc3ViY29kZSAmIDB4MDA4MCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL3BhZ2VhdHRyLmMgYi9hcmNoL3MzOTAvbW0vcGFnZWF0dHIuYwppbmRleCAxMjJmZmJkLi5mMDVlZGNjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vcGFnZWF0dHIuYworKysgYi9hcmNoL3MzOTAvbW0vcGFnZWF0dHIuYwpAQCAtMjQsMTIgKzI0LDEzIEBACiAJCQlXQVJOX09OX09OQ0UoMSk7CiAJCQljb250aW51ZTsKIAkJfQotCQlwdGVwID0gcHRlX29mZnNldF9rZXJuZWwocG1kcCwgYWRkciArIGkgKiBQQUdFX1NJWkUpOworCQlwdGVwID0gcHRlX29mZnNldF9rZXJuZWwocG1kcCwgYWRkcik7CiAKIAkJcHRlID0gKnB0ZXA7CiAJCXB0ZSA9IHNldChwdGUpOwotCQlwdGVwX2ludmFsaWRhdGUoJmluaXRfbW0sIGFkZHIgKyBpICogUEFHRV9TSVpFLCBwdGVwKTsKKwkJcHRlcF9pbnZhbGlkYXRlKCZpbml0X21tLCBhZGRyLCBwdGVwKTsKIAkJKnB0ZXAgPSBwdGU7CisJCWFkZHIgKz0gUEFHRV9TSVpFOwogCX0KIH0KIApAQCAtNTMsMyArNTQsOCBAQAogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2V0X21lbW9yeV9ueCk7CisKK2ludCBzZXRfbWVtb3J5X3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpCit7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvb3Byb2ZpbGUvaHdzYW1wbGVyLmMgYi9hcmNoL3MzOTAvb3Byb2ZpbGUvaHdzYW1wbGVyLmMKaW5kZXggNDk1Mjg3Mi4uMzNjYmQzNyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL29wcm9maWxlL2h3c2FtcGxlci5jCisrKyBiL2FyY2gvczM5MC9vcHJvZmlsZS9od3NhbXBsZXIuYwpAQCAtMTAyMSwyMCArMTAyMSwxNCBAQAogCXJldHVybiByYzsKIH0KIAotbG9uZyBod3NhbXBsZXJfcXVlcnlfbWluX2ludGVydmFsKHZvaWQpCit1bnNpZ25lZCBsb25nIGh3c2FtcGxlcl9xdWVyeV9taW5faW50ZXJ2YWwodm9pZCkKIHsKLQlpZiAobWluX3NhbXBsZXJfcmF0ZSkKLQkJcmV0dXJuIG1pbl9zYW1wbGVyX3JhdGU7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gbWluX3NhbXBsZXJfcmF0ZTsKIH0KIAotbG9uZyBod3NhbXBsZXJfcXVlcnlfbWF4X2ludGVydmFsKHZvaWQpCit1bnNpZ25lZCBsb25nIGh3c2FtcGxlcl9xdWVyeV9tYXhfaW50ZXJ2YWwodm9pZCkKIHsKLQlpZiAobWF4X3NhbXBsZXJfcmF0ZSkKLQkJcmV0dXJuIG1heF9zYW1wbGVyX3JhdGU7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gbWF4X3NhbXBsZXJfcmF0ZTsKIH0KIAogdW5zaWduZWQgbG9uZyBod3NhbXBsZXJfZ2V0X3NhbXBsZV9vdmVyZmxvd19jb3VudCh1bnNpZ25lZCBpbnQgY3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL29wcm9maWxlL2h3c2FtcGxlci5oIGIvYXJjaC9zMzkwL29wcm9maWxlL2h3c2FtcGxlci5oCmluZGV4IDhjNzJiNTkuLjE5MTJmM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9vcHJvZmlsZS9od3NhbXBsZXIuaAorKysgYi9hcmNoL3MzOTAvb3Byb2ZpbGUvaHdzYW1wbGVyLmgKQEAgLTEwMiw4ICsxMDIsOCBAQAogaW50IGh3c2FtcGxlcl9zaHV0ZG93bih2b2lkKTsKIGludCBod3NhbXBsZXJfYWxsb2NhdGUodW5zaWduZWQgbG9uZyBzZGJ0LCB1bnNpZ25lZCBsb25nIHNkYik7CiBpbnQgaHdzYW1wbGVyX2RlYWxsb2NhdGUodm9pZCk7Ci1sb25nIGh3c2FtcGxlcl9xdWVyeV9taW5faW50ZXJ2YWwodm9pZCk7Ci1sb25nIGh3c2FtcGxlcl9xdWVyeV9tYXhfaW50ZXJ2YWwodm9pZCk7Cit1bnNpZ25lZCBsb25nIGh3c2FtcGxlcl9xdWVyeV9taW5faW50ZXJ2YWwodm9pZCk7Cit1bnNpZ25lZCBsb25nIGh3c2FtcGxlcl9xdWVyeV9tYXhfaW50ZXJ2YWwodm9pZCk7CiBpbnQgaHdzYW1wbGVyX3N0YXJ0X2FsbCh1bnNpZ25lZCBsb25nIGludGVydmFsKTsKIGludCBod3NhbXBsZXJfc3RvcF9hbGwodm9pZCk7CiBpbnQgaHdzYW1wbGVyX2RlYWN0aXZhdGUodW5zaWduZWQgaW50IGNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvb3Byb2ZpbGUvaW5pdC5jIGIvYXJjaC9zMzkwL29wcm9maWxlL2luaXQuYwppbmRleCBjNjNkN2U1Li41OTk1ZTliIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvb3Byb2ZpbGUvaW5pdC5jCisrKyBiL2FyY2gvczM5MC9vcHJvZmlsZS9pbml0LmMKQEAgLTE0NSwxNSArMTQ1LDExIEBACiAJICogY3JlYXRlIGh3c2FtcGxlciBmaWxlcyBvbmx5IGlmIGh3c2FtcGxlcl9zZXR1cCgpIHN1Y2NlZWRzLgogCSAqLwogCW9wcm9maWxlX21pbl9pbnRlcnZhbCA9IGh3c2FtcGxlcl9xdWVyeV9taW5faW50ZXJ2YWwoKTsKLQlpZiAob3Byb2ZpbGVfbWluX2ludGVydmFsIDwgMCkgewotCQlvcHJvZmlsZV9taW5faW50ZXJ2YWwgPSAwOworCWlmIChvcHJvZmlsZV9taW5faW50ZXJ2YWwgPT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JfQogCW9wcm9maWxlX21heF9pbnRlcnZhbCA9IGh3c2FtcGxlcl9xdWVyeV9tYXhfaW50ZXJ2YWwoKTsKLQlpZiAob3Byb2ZpbGVfbWF4X2ludGVydmFsIDwgMCkgewotCQlvcHJvZmlsZV9tYXhfaW50ZXJ2YWwgPSAwOworCWlmIChvcHJvZmlsZV9tYXhfaW50ZXJ2YWwgPT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JfQogCiAJaWYgKG9wcm9maWxlX3RpbWVyX2luaXQob3BzKSkKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggNGI4OWRhMi4uYmM0MzlkZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCisrKyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtMjQsNyArMjQsNiBAQAogCXNlbGVjdCBSVENfTElCCiAJc2VsZWN0IEdFTkVSSUNfQVRPTUlDNjQKIAlzZWxlY3QgR0VORVJJQ19JUlFfU0hPVwotCXNlbGVjdCBBUkNIX05PX1NZU0RFVl9PUFMKIAloZWxwCiAJICBUaGUgU3VwZXJIIGlzIGEgUklTQyBwcm9jZXNzb3IgdGFyZ2V0ZWQgZm9yIHVzZSBpbiBlbWJlZGRlZCBzeXN0ZW1zCiAJICBhbmQgY29uc3VtZXIgZWxlY3Ryb25pY3M7IGl0IHdhcyBhbHNvIHVzZWQgaW4gdGhlIFNlZ2EgRHJlYW1jYXN0CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvYXBzaDRhZDBhX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9hcHNoNGFkMGFfZGVmY29uZmlnCmluZGV4IGU3MWE1MzEuLjc3ZWMwZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9hcHNoNGFkMGFfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9hcHNoNGFkMGFfZGVmY29uZmlnCkBAIC00OCw3ICs0OCw2IEBACiBDT05GSUdfQklORk1UX01JU0M9eQogQ09ORklHX1BNPXkKIENPTkZJR19QTV9ERUJVRz15Ci1DT05GSUdfUE1fVkVSQk9TRT15CiBDT05GSUdfUE1fUlVOVElNRT15CiBDT05GSUdfQ1BVX0lETEU9eQogQ09ORklHX05FVD15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4Nl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4Nl9kZWZjb25maWcKaW5kZXggZGM0YTJlYi4uYzQxNjUwNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3Nkazc3ODZfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZGs3Nzg2X2RlZmNvbmZpZwpAQCAtODMsNyArODMsNiBAQAogQ09ORklHX0JJTkZNVF9NSVNDPXkKIENPTkZJR19QTT15CiBDT05GSUdfUE1fREVCVUc9eQotQ09ORklHX1BNX1ZFUkJPU0U9eQogQ09ORklHX1BNX1JVTlRJTUU9eQogQ09ORklHX0NQVV9JRExFPXkKIENPTkZJR19ORVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zcS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zcS5jCmluZGV4IDE0NzI2ZWUuLmYwOTA3OTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc3EuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NxLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGNwdS9zcS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3BtX3J1bnRpbWUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9wbV9ydW50aW1lLmMKaW5kZXggNmRjYjgxNi4uMjJkYjEyNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3BtX3J1bnRpbWUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvcG1fcnVudGltZS5jCkBAIC0xMzksNyArMTM5LDcgQEAKIAlxdWV1ZV93b3JrKHBtX3dxLCAmaHdibGtfd29yayk7CiB9CiAKLWludCBwbGF0Zm9ybV9wbV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBkZWZhdWx0X3BsYXRmb3JtX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBwZGV2X2FyY2hkYXRhICphZCA9ICZwZGV2LT5hcmNoZGF0YTsKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCWludCBod2JsayA9IGFkLT5od2Jsa19pZDsKIAlpbnQgcmV0ID0gMDsKIAotCWRldl9kYmcoZGV2LCAicGxhdGZvcm1fcG1fcnVudGltZV9zdXNwZW5kKCkgWyVkXVxuIiwgaHdibGspOworCWRldl9kYmcoZGV2LCAiJXMoKSBbJWRdXG4iLCBfX2Z1bmNfXywgaHdibGspOwogCiAJLyogaWdub3JlIG9mZi1jaGlwIHBsYXRmb3JtIGRldmljZXMgKi8KIAlpZiAoIWh3YmxrKQpAQCAtMTgzLDIwICsxODMsMjAgQEAKIAltdXRleF91bmxvY2soJmFkLT5tdXRleCk7CiAKIG91dDoKLQlkZXZfZGJnKGRldiwgInBsYXRmb3JtX3BtX3J1bnRpbWVfc3VzcGVuZCgpIFslZF0gcmV0dXJucyAlZFxuIiwKLQkJaHdibGssIHJldCk7CisJZGV2X2RiZyhkZXYsICIlcygpIFslZF0gcmV0dXJucyAlZFxuIiwKKwkJIF9fZnVuY19fLCBod2JsaywgcmV0KTsKIAogCXJldHVybiByZXQ7CiB9CiAKLWludCBwbGF0Zm9ybV9wbV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGRlZmF1bHRfcGxhdGZvcm1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgcGRldl9hcmNoZGF0YSAqYWQgPSAmcGRldi0+YXJjaGRhdGE7CiAJaW50IGh3YmxrID0gYWQtPmh3YmxrX2lkOwogCWludCByZXQgPSAwOwogCi0JZGV2X2RiZyhkZXYsICJwbGF0Zm9ybV9wbV9ydW50aW1lX3Jlc3VtZSgpIFslZF1cbiIsIGh3YmxrKTsKKwlkZXZfZGJnKGRldiwgIiVzKCkgWyVkXVxuIiwgX19mdW5jX18sIGh3YmxrKTsKIAogCS8qIGlnbm9yZSBvZmYtY2hpcCBwbGF0Zm9ybSBkZXZpY2VzICovCiAJaWYgKCFod2JsaykKQEAgLTIyOCwxOSArMjI4LDE5IEBACiAJICovCiAJbXV0ZXhfdW5sb2NrKCZhZC0+bXV0ZXgpOwogb3V0OgotCWRldl9kYmcoZGV2LCAicGxhdGZvcm1fcG1fcnVudGltZV9yZXN1bWUoKSBbJWRdIHJldHVybnMgJWRcbiIsCi0JCWh3YmxrLCByZXQpOworCWRldl9kYmcoZGV2LCAiJXMoKSBbJWRdIHJldHVybnMgJWRcbiIsCisJCV9fZnVuY19fLCBod2JsaywgcmV0KTsKIAogCXJldHVybiByZXQ7CiB9CiAKLWludCBwbGF0Zm9ybV9wbV9ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBkZWZhdWx0X3BsYXRmb3JtX3J1bnRpbWVfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCWludCBod2JsayA9IHBkZXYtPmFyY2hkYXRhLmh3YmxrX2lkOwogCWludCByZXQgPSAwOwogCi0JZGV2X2RiZyhkZXYsICJwbGF0Zm9ybV9wbV9ydW50aW1lX2lkbGUoKSBbJWRdXG4iLCBod2Jsayk7CisJZGV2X2RiZyhkZXYsICIlcygpIFslZF1cbiIsIF9fZnVuY19fLCBod2Jsayk7CiAKIAkvKiBpZ25vcmUgb2ZmLWNoaXAgcGxhdGZvcm0gZGV2aWNlcyAqLwogCWlmICghaHdibGspCkBAIC0yNTIsMTAgKzI1MiwxOSBAQAogCS8qIHN1c3BlbmQgc3luY2hyb25vdXNseSB0byBkaXNhYmxlIGNsb2NrcyBpbW1lZGlhdGVseSAqLwogCXJldCA9IHBtX3J1bnRpbWVfc3VzcGVuZChkZXYpOwogb3V0OgotCWRldl9kYmcoZGV2LCAicGxhdGZvcm1fcG1fcnVudGltZV9pZGxlKCkgWyVkXSBkb25lIVxuIiwgaHdibGspOworCWRldl9kYmcoZGV2LCAiJXMoKSBbJWRdIGRvbmUhXG4iLCBfX2Z1bmNfXywgaHdibGspOwogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZGV2X3Bvd2VyX2RvbWFpbiBkZWZhdWx0X3Bvd2VyX2RvbWFpbiA9IHsKKwkub3BzID0geworCQkucnVudGltZV9zdXNwZW5kID0gZGVmYXVsdF9wbGF0Zm9ybV9ydW50aW1lX3N1c3BlbmQsCisJCS5ydW50aW1lX3Jlc3VtZSA9IGRlZmF1bHRfcGxhdGZvcm1fcnVudGltZV9yZXN1bWUsCisJCS5ydW50aW1lX2lkbGUgPSBkZWZhdWx0X3BsYXRmb3JtX3J1bnRpbWVfaWRsZSwKKwkJVVNFX1BMQVRGT1JNX1BNX1NMRUVQX09QUworCX0sCit9OworCiBzdGF0aWMgaW50IHBsYXRmb3JtX2J1c19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqZGF0YSkKIHsKQEAgLTI3Niw2ICsyODUsNyBAQAogCQlod2Jsa19kaXNhYmxlKGh3YmxrX2luZm8sIGh3YmxrKTsKIAkJLyogbWFrZSBzdXJlIGRyaXZlciByZS1pbml0cyBpdHNlbGYgb25jZSAqLwogCQlfX3NldF9iaXQoUERFVl9BUkNIREFUQV9GTEFHX0lOSVQsICZwZGV2LT5hcmNoZGF0YS5mbGFncyk7CisJCWRldi0+cHdyX2RvbWFpbiA9ICZkZWZhdWx0X3Bvd2VyX2RvbWFpbjsKIAkJYnJlYWs7CiAJLyogVE9ETzogYWRkIEJVU19OT1RJRllfQklORF9EUklWRVIgYW5kIGluY3JlYXNlIGlkbGUgY291bnQgKi8KIAljYXNlIEJVU19OT1RJRllfQk9VTkRfRFJJVkVSOgpAQCAtMjg5LDYgKzI5OSw3IEBACiAJCV9fc2V0X2JpdChQREVWX0FSQ0hEQVRBX0ZMQUdfSU5JVCwgJnBkZXYtPmFyY2hkYXRhLmZsYWdzKTsKIAkJYnJlYWs7CiAJY2FzZSBCVVNfTk9USUZZX0RFTF9ERVZJQ0U6CisJCWRldi0+cHdyX2RvbWFpbiA9IE5VTEw7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jIGIvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmMKaW5kZXggMjEzMGNhNi4uM2Q3YjIwOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmMKQEAgLTExNyw3ICsxMTcsMTEgQEAKIAogCXNldF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TSU5HTEVTVEVQKTsKIAorCWlmIChwdHJhY2VfZ2V0X2JyZWFrcG9pbnRzKGNoaWxkKSA8IDApCisJCXJldHVybjsKKwogCXNldF9zaW5nbGVfc3RlcChjaGlsZCwgcGMpOworCXB0cmFjZV9wdXRfYnJlYWtwb2ludHMoY2hpbGQpOwogfQogCiB2b2lkIHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdHJhcHNfMzIuYyBiL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMKaW5kZXggMzQ4NGMyZi4uYjUxYTE3MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdHJhcHNfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC90cmFwc18zMi5jCkBAIC04Nyw3ICs4Nyw2IEBACiAJYnVzdF9zcGlubG9ja3MoMSk7CiAKIAlwcmludGsoIiVzOiAlMDRseCBbIyVkXVxuIiwgc3RyLCBlcnIgJiAweGZmZmYsICsrZGllX2NvdW50ZXIpOwotCXN5c2ZzX3ByaW50a19sYXN0X2ZpbGUoKTsKIAlwcmludF9tb2R1bGVzKCk7CiAJc2hvd19yZWdzKHJlZ3MpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2p1bXBfbGFiZWwuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vanVtcF9sYWJlbC5oCmluZGV4IDQyN2Q0NjguLmZjNzNhODIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vanVtcF9sYWJlbC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vanVtcF9sYWJlbC5oCkBAIC03LDE3ICs3LDIwIEBACiAKICNkZWZpbmUgSlVNUF9MQUJFTF9OT1BfU0laRSA0CiAKLSNkZWZpbmUgSlVNUF9MQUJFTChrZXksIGxhYmVsKQkJCQkJXAotCWRvIHsJCQkJCQkJXAotCQlhc20gZ290bygiMTpcblx0IgkJCQlcCi0JCQkgIm5vcFxuXHQiCQkJCVwKLQkJCSAibm9wXG5cdCIJCQkJXAotCQkJICIucHVzaHNlY3Rpb24gX19qdW1wX3RhYmxlLCAgXCJhXCJcblx0IlwKLQkJCSAiLmFsaWduIDRcblx0IgkJCQlcCi0JCQkgIi53b3JkIDFiLCAlbFsiICNsYWJlbCAiXSwgJWMwXG5cdCIJXAotCQkJICIucG9wc2VjdGlvbiBcblx0IgkJCVwKLQkJCSA6IDogICJpIiAoa2V5KSA6ICA6IGxhYmVsKTtcCi0JfSB3aGlsZSAoMCkKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBhcmNoX3N0YXRpY19icmFuY2goc3RydWN0IGp1bXBfbGFiZWxfa2V5ICprZXkpCit7CisJCWFzbSBnb3RvKCIxOlxuXHQiCisJCQkgIm5vcFxuXHQiCisJCQkgIm5vcFxuXHQiCisJCQkgIi5wdXNoc2VjdGlvbiBfX2p1bXBfdGFibGUsICBcImF3XCJcblx0IgorCQkJICIuYWxpZ24gNFxuXHQiCisJCQkgIi53b3JkIDFiLCAlbFtsX3llc10sICVjMFxuXHQiCisJCQkgIi5wb3BzZWN0aW9uIFxuXHQiCisJCQkgOiA6ICAiaSIgKGtleSkgOiA6IGxfeWVzKTsKKwlyZXR1cm4gZmFsc2U7CitsX3llczoKKwlyZXR1cm4gdHJ1ZTsKK30KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90b3BvbG9neV82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90b3BvbG9neV82NC5oCmluZGV4IDFjNzlmMzIuLjhiOWM1NTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdG9wb2xvZ3lfNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RvcG9sb2d5XzY0LmgKQEAgLTY1LDYgKzY1LDEwIEBACiAjZGVmaW5lIHNtdF9jYXBhYmxlKCkJCQkJKHNwYXJjNjRfbXVsdGlfY29yZSkKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKLSNkZWZpbmUgY3B1X2NvcmVncm91cF9tYXNrKGNwdSkJCQkoJmNwdV9jb3JlX21hcFtjcHVdKQorZXh0ZXJuIGNwdW1hc2tfdCBjcHVfY29yZV9tYXBbTlJfQ1BVU107CitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfY29yZWdyb3VwX21hc2soaW50IGNwdSkKK3sKKyAgICAgICAgcmV0dXJuICZjcHVfY29yZV9tYXBbY3B1XTsKK30KIAogI2VuZGlmIC8qIF9BU01fU1BBUkM2NF9UT1BPTE9HWV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCA5ZDg5N2I2Li5jNTM4N2VkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTQwNCw4ICs0MDQsOSBAQAogI2RlZmluZSBfX05SX29wZW5fYnlfaGFuZGxlX2F0CTMzMwogI2RlZmluZSBfX05SX2Nsb2NrX2FkanRpbWUJMzM0CiAjZGVmaW5lIF9fTlJfc3luY2ZzCQkzMzUKKyNkZWZpbmUgX19OUl9zZW5kbW1zZwkJMzM2CiAKLSNkZWZpbmUgTlJfc3lzY2FsbHMJCTMzNgorI2RlZmluZSBOUl9zeXNjYWxscwkJMzM3CiAKICNpZmRlZiBfXzMyYml0X3N5c2NhbGxfbnVtYmVyc19fCiAvKiBTcGFyYyAzMi1iaXQgb25seSBoYXMgdGhlICJzZXRyZXN1aWQzMiIsICJnZXRyZXN1aWQzMiIgdmFyaWFudHMsCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfc2FicmUuYyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaV9zYWJyZS5jCmluZGV4IDk0ODA2OGEuLmQxODQwZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BjaV9zYWJyZS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaV9zYWJyZS5jCkBAIC00NTIsOCArNDUyLDEwIEBACiAJc2FicmVfc2Nhbl9idXMocGJtLCAmb3AtPmRldik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHNhYnJlX21hdGNoW107CiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzYWJyZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCkKIHsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKIAljb25zdCBzdHJ1Y3QgbGludXhfcHJvbTY0X3JlZ2lzdGVycyAqcHJfcmVnczsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwID0gb3AtPmRldi5vZl9ub2RlOwogCXN0cnVjdCBwY2lfcGJtX2luZm8gKnBibTsKQEAgLTQ2Myw3ICs0NjUsOCBAQAogCWNvbnN0IHUzMiAqdmRtYTsKIAl1NjQgY2xlYXJfaXJxOwogCi0JaHVtbWluZ2JpcmRfcCA9IG9wLT5kZXYub2ZfbWF0Y2ggJiYgKG9wLT5kZXYub2ZfbWF0Y2gtPmRhdGEgIT0gTlVMTCk7CisJbWF0Y2ggPSBvZl9tYXRjaF9kZXZpY2Uoc2FicmVfbWF0Y2gsICZvcC0+ZGV2KTsKKwlodW1taW5nYmlyZF9wID0gbWF0Y2ggJiYgKG1hdGNoLT5kYXRhICE9IE5VTEwpOwogCWlmICghaHVtbWluZ2JpcmRfcCkgewogCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdV9kcDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX3NjaGl6by5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX3NjaGl6by5jCmluZGV4IGZlY2ZjYjIuLjI4M2ZiYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BjaV9zY2hpem8uYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfc2NoaXpvLmMKQEAgLTE0NTgsMTEgKzE0NTgsMTUgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBzY2hpem9fbWF0Y2hbXTsKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNjaGl6b19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCkKIHsKLQlpZiAoIW9wLT5kZXYub2ZfbWF0Y2gpCisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CisKKwltYXRjaCA9IG9mX21hdGNoX2RldmljZShzY2hpem9fbWF0Y2gsICZvcC0+ZGV2KTsKKwlpZiAoIW1hdGNoKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gX19zY2hpem9faW5pdChvcCwgKHVuc2lnbmVkIGxvbmcpIG9wLT5kZXYub2ZfbWF0Y2gtPmRhdGEpOworCXJldHVybiBfX3NjaGl6b19pbml0KG9wLCAodW5zaWduZWQgbG9uZyltYXRjaC0+ZGF0YSk7CiB9CiAKIC8qIFRoZSBvcmRlcmluZyBvZiB0aGlzIHRhYmxlIGlzIHZlcnkgaW1wb3J0YW50LiAgU29tZSBUb21hdGlsbG8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfMzIuUyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfMzIuUwppbmRleCA0N2FjNzNjLi4zMzJjODNmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzXzMyLlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc18zMi5TCkBAIC04NCw0ICs4NCw0IEBACiAvKjMyMCovCS5sb25nIHN5c19kdXAzLCBzeXNfcGlwZTIsIHN5c19pbm90aWZ5X2luaXQxLCBzeXNfYWNjZXB0NCwgc3lzX3ByZWFkdgogLyozMjUqLwkubG9uZyBzeXNfcHdyaXRldiwgc3lzX3J0X3Rnc2lncXVldWVpbmZvLCBzeXNfcGVyZl9ldmVudF9vcGVuLCBzeXNfcmVjdm1tc2csIHN5c19mYW5vdGlmeV9pbml0CiAvKjMzMCovCS5sb25nIHN5c19mYW5vdGlmeV9tYXJrLCBzeXNfcHJsaW1pdDY0LCBzeXNfbmFtZV90b19oYW5kbGVfYXQsIHN5c19vcGVuX2J5X2hhbmRsZV9hdCwgc3lzX2Nsb2NrX2FkanRpbWUKLS8qMzM1Ki8JLmxvbmcgc3lzX3N5bmNmcworLyozMzUqLwkubG9uZyBzeXNfc3luY2ZzLCBzeXNfc2VuZG1tc2cKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfNjQuUyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfNjQuUwppbmRleCA0ZjMxNzBjLi40Mzg4N2NhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzXzY0LlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc182NC5TCkBAIC04NSw3ICs4NSw3IEBACiAvKjMyMCovCS53b3JkIHN5c19kdXAzLCBzeXNfcGlwZTIsIHN5c19pbm90aWZ5X2luaXQxLCBzeXNfYWNjZXB0NCwgY29tcGF0X3N5c19wcmVhZHYKIAkud29yZCBjb21wYXRfc3lzX3B3cml0ZXYsIGNvbXBhdF9zeXNfcnRfdGdzaWdxdWV1ZWluZm8sIHN5c19wZXJmX2V2ZW50X29wZW4sIGNvbXBhdF9zeXNfcmVjdm1tc2csIHN5c19mYW5vdGlmeV9pbml0CiAvKjMzMCovCS53b3JkIHN5czMyX2Zhbm90aWZ5X21hcmssIHN5c19wcmxpbWl0NjQsIHN5c19uYW1lX3RvX2hhbmRsZV9hdCwgY29tcGF0X3N5c19vcGVuX2J5X2hhbmRsZV9hdCwgY29tcGF0X3N5c19jbG9ja19hZGp0aW1lCi0JLndvcmQgc3lzX3N5bmNmcworCS53b3JkIHN5c19zeW5jZnMsIGNvbXBhdF9zeXNfc2VuZG1tc2cKIAogI2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi8KIApAQCAtMTYyLDQgKzE2Miw0IEBACiAvKjMyMCovCS53b3JkIHN5c19kdXAzLCBzeXNfcGlwZTIsIHN5c19pbm90aWZ5X2luaXQxLCBzeXNfYWNjZXB0NCwgc3lzX3ByZWFkdgogCS53b3JkIHN5c19wd3JpdGV2LCBzeXNfcnRfdGdzaWdxdWV1ZWluZm8sIHN5c19wZXJmX2V2ZW50X29wZW4sIHN5c19yZWN2bW1zZywgc3lzX2Zhbm90aWZ5X2luaXQKIC8qMzMwKi8JLndvcmQgc3lzX2Zhbm90aWZ5X21hcmssIHN5c19wcmxpbWl0NjQsIHN5c19uYW1lX3RvX2hhbmRsZV9hdCwgc3lzX29wZW5fYnlfaGFuZGxlX2F0LCBzeXNfY2xvY2tfYWRqdGltZQotCS53b3JkIHN5c19zeW5jZnMKKwkud29yZCBzeXNfc3luY2ZzLCBzeXNfc2VuZG1tc2cKZGlmZiAtLWdpdCBhL2FyY2gvdW0vS2NvbmZpZy51bSBiL2FyY2gvdW0vS2NvbmZpZy51bQppbmRleCA5MGE0MzhhLi5iNWU2NzVlIDEwMDY0NAotLS0gYS9hcmNoL3VtL0tjb25maWcudW0KKysrIGIvYXJjaC91bS9LY29uZmlnLnVtCkBAIC00Nyw3ICs0Nyw3IEBACiAKIGNvbmZpZyBIUFBGUwogCXRyaXN0YXRlICJIb25leVBvdCBQcm9jRlMgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBQUk9DX0ZTCiAJaGVscAogCSAgaHBwZnMgKEhvbmV5UG90IFByb2NGUykgaXMgYSBmaWxlc3lzdGVtIHdoaWNoIGFsbG93cyBVTUwgL3Byb2MKIAkgIGVudHJpZXMgdG8gYmUgb3ZlcnJpZGRlbiwgcmVtb3ZlZCwgb3IgZmFicmljYXRlZCBmcm9tIHRoZSBob3N0LgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IGUyY2Y3ODYuLjViZDFiYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTQ5LDcgKzQ5LDEwIEBACiB7CiAJc3RydWN0IHRocmVhZF9pbmZvICp0aTsKIAl1bnNpZ25lZCBsb25nIG1hc2sgPSBUSFJFQURfU0laRSAtIDE7Ci0JdGkgPSAoc3RydWN0IHRocmVhZF9pbmZvICopICgoKHVuc2lnbmVkIGxvbmcpICZ0aSkgJiB+bWFzayk7CisJdm9pZCAqcDsKKworCWFzbSB2b2xhdGlsZSAoIiIgOiAiPXIiIChwKSA6ICIwIiAoJnRpKSk7CisJdGkgPSAoc3RydWN0IHRocmVhZF9pbmZvICopICgoKHVuc2lnbmVkIGxvbmcpcCkgJiB+bWFzayk7CiAJcmV0dXJuIHRpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3V0aWwuYyBiL2FyY2gvdW0vb3MtTGludXgvdXRpbC5jCmluZGV4IDZlYTc3OTcuLjQyODI3Y2EgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvdXRpbC5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvdXRpbC5jCkBAIC01LDYgKzUsNyBAQAogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtNzUsNiArNzYsMjYgQEAKIAkJIGhvc3QucmVsZWFzZSwgaG9zdC52ZXJzaW9uLCBob3N0Lm1hY2hpbmUpOwogfQogCisvKgorICogV2UgY2Fubm90IHVzZSBnbGliYydzIGFib3J0KCkuIEl0IG1ha2VzIHVzZSBvZiB0Z2tpbGwoKSB3aGljaAorICogaGFzIG5vIGVmZmVjdCB3aXRoaW4gVU1MJ3Mga2VybmVsIHRocmVhZHMuCisgKiBBZnRlciB0aGF0IGdsaWJjIHdvdWxkIGV4ZWN1dGUgYW4gaW52YWxpZCBpbnN0cnVjdGlvbiB0byBraWxsCisgKiB0aGUgY2FsbGluZyBwcm9jZXNzIGFuZCBVTUwgY3Jhc2hlcyB3aXRoIFNJR1NFR1YuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKSB1bWxfYWJvcnQodm9pZCkKK3sKKwlzaWdzZXRfdCBzaWc7CisKKwlmZmx1c2goTlVMTCk7CisKKwlpZiAoIXNpZ2VtcHR5c2V0KCZzaWcpICYmICFzaWdhZGRzZXQoJnNpZywgU0lHQUJSVCkpCisJCXNpZ3Byb2NtYXNrKFNJR19VTkJMT0NLLCAmc2lnLCAwKTsKKworCWZvciAoOzspCisJCWlmIChraWxsKGdldHBpZCgpLCBTSUdBQlJUKSA8IDApCisJCQlleGl0KDEyNyk7Cit9CisKIHZvaWQgb3NfZHVtcF9jb3JlKHZvaWQpCiB7CiAJaW50IHBpZDsKQEAgLTExNiw1ICsxMzcsNSBAQAogCXdoaWxlICgocGlkID0gd2FpdHBpZCgtMSwgTlVMTCwgV05PSEFORyB8IF9fV0FMTCkpID4gMCkKIAkJb3Nfa2lsbF9wdHJhY2VkX3Byb2Nlc3MocGlkLCAwKTsKIAotCWFib3J0KCk7CisJdW1sX2Fib3J0KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L01ha2VmaWxlIGIvYXJjaC91bS9zeXMtaTM4Ni9NYWtlZmlsZQppbmRleCA4MDRiMjhkLi5iMWRhOTFjIDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy1pMzg2L01ha2VmaWxlCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAKIG9iai15ID0gYnVnLm8gYnVncy5vIGNoZWNrc3VtLm8gZGVsYXkubyBmYXVsdC5vIGtzeW1zLm8gbGR0Lm8gcHRyYWNlLm8gXAogCXB0cmFjZV91c2VyLm8gc2V0am1wLm8gc2lnbmFsLm8gc3R1Yi5vIHN0dWJfc2Vndi5vIHN5c2NhbGxzLm8gc3lzcnEubyBcCi0Jc3lzX2NhbGxfdGFibGUubyB0bHMubworCXN5c19jYWxsX3RhYmxlLm8gdGxzLm8gYXRvbWljNjRfY3g4XzMyLm8KIAogb2JqLSQoQ09ORklHX0JJTkZNVF9FTEYpICs9IGVsZmNvcmUubwogCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L2F0b21pYzY0X2N4OF8zMi5TIGIvYXJjaC91bS9zeXMtaTM4Ni9hdG9taWM2NF9jeDhfMzIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTkwMWQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9hdG9taWM2NF9jeDhfMzIuUwpAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIGF0b21pYzY0X3QgZm9yIDU4NisKKyAqCisgKiBDb3BpZWQgZnJvbSBhcmNoL3g4Ni9saWIvYXRvbWljNjRfY3g4XzMyLlMKKyAqCisgKiBDb3B5cmlnaHQgwqkgMjAxMCAgTHVjYSBCYXJiaWVyaQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLWFzbS5oPgorI2luY2x1ZGUgPGFzbS9kd2FyZjIuaD4KKworLm1hY3JvIFNBVkUgcmVnCisJcHVzaGxfY2ZpICVccmVnCisJQ0ZJX1JFTF9PRkZTRVQgXHJlZywgMAorLmVuZG0KKworLm1hY3JvIFJFU1RPUkUgcmVnCisJcG9wbF9jZmkgJVxyZWcKKwlDRklfUkVTVE9SRSBccmVnCisuZW5kbQorCisubWFjcm8gcmVhZDY0IHJlZworCW1vdmwgJWVieCwgJWVheAorCW1vdmwgJWVjeCwgJWVkeAorLyogd2UgbmVlZCBMT0NLX1BSRUZJWCBzaW5jZSBvdGhlcndpc2UgY21weGNoZzhiIGFsd2F5cyBkb2VzIHRoZSB3cml0ZSAqLworCUxPQ0tfUFJFRklYCisJY21weGNoZzhiIChccmVnKQorLmVuZG0KKworRU5UUlkoYXRvbWljNjRfcmVhZF9jeDgpCisJQ0ZJX1NUQVJUUFJPQworCisJcmVhZDY0ICVlY3gKKwlyZXQKKwlDRklfRU5EUFJPQworRU5EUFJPQyhhdG9taWM2NF9yZWFkX2N4OCkKKworRU5UUlkoYXRvbWljNjRfc2V0X2N4OCkKKwlDRklfU1RBUlRQUk9DCisKKzE6CisvKiB3ZSBkb24ndCBuZWVkIExPQ0tfUFJFRklYIHNpbmNlIGFsaWduZWQgNjQtYml0IHdyaXRlcworICogYXJlIGF0b21pYyBvbiA1ODYgYW5kIG5ld2VyICovCisJY21weGNoZzhiICglZXNpKQorCWpuZSAxYgorCisJcmV0CisJQ0ZJX0VORFBST0MKK0VORFBST0MoYXRvbWljNjRfc2V0X2N4OCkKKworRU5UUlkoYXRvbWljNjRfeGNoZ19jeDgpCisJQ0ZJX1NUQVJUUFJPQworCisJbW92bCAlZWJ4LCAlZWF4CisJbW92bCAlZWN4LCAlZWR4CisxOgorCUxPQ0tfUFJFRklYCisJY21weGNoZzhiICglZXNpKQorCWpuZSAxYgorCisJcmV0CisJQ0ZJX0VORFBST0MKK0VORFBST0MoYXRvbWljNjRfeGNoZ19jeDgpCisKKy5tYWNybyBhZGRzdWJfcmV0dXJuIGZ1bmMgaW5zIGluc2MKK0VOVFJZKGF0b21pYzY0X1xmdW5jXCgpX3JldHVybl9jeDgpCisJQ0ZJX1NUQVJUUFJPQworCVNBVkUgZWJwCisJU0FWRSBlYngKKwlTQVZFIGVzaQorCVNBVkUgZWRpCisKKwltb3ZsICVlYXgsICVlc2kKKwltb3ZsICVlZHgsICVlZGkKKwltb3ZsICVlY3gsICVlYnAKKworCXJlYWQ2NCAlZWJwCisxOgorCW1vdmwgJWVheCwgJWVieAorCW1vdmwgJWVkeCwgJWVjeAorCVxpbnNcKClsICVlc2ksICVlYngKKwlcaW5zY1woKWwgJWVkaSwgJWVjeAorCUxPQ0tfUFJFRklYCisJY21weGNoZzhiICglZWJwKQorCWpuZSAxYgorCisxMDoKKwltb3ZsICVlYngsICVlYXgKKwltb3ZsICVlY3gsICVlZHgKKwlSRVNUT1JFIGVkaQorCVJFU1RPUkUgZXNpCisJUkVTVE9SRSBlYngKKwlSRVNUT1JFIGVicAorCXJldAorCUNGSV9FTkRQUk9DCitFTkRQUk9DKGF0b21pYzY0X1xmdW5jXCgpX3JldHVybl9jeDgpCisuZW5kbQorCithZGRzdWJfcmV0dXJuIGFkZCBhZGQgYWRjCithZGRzdWJfcmV0dXJuIHN1YiBzdWIgc2JiCisKKy5tYWNybyBpbmNkZWNfcmV0dXJuIGZ1bmMgaW5zIGluc2MKK0VOVFJZKGF0b21pYzY0X1xmdW5jXCgpX3JldHVybl9jeDgpCisJQ0ZJX1NUQVJUUFJPQworCVNBVkUgZWJ4CisKKwlyZWFkNjQgJWVzaQorMToKKwltb3ZsICVlYXgsICVlYngKKwltb3ZsICVlZHgsICVlY3gKKwlcaW5zXCgpbCAkMSwgJWVieAorCVxpbnNjXCgpbCAkMCwgJWVjeAorCUxPQ0tfUFJFRklYCisJY21weGNoZzhiICglZXNpKQorCWpuZSAxYgorCisxMDoKKwltb3ZsICVlYngsICVlYXgKKwltb3ZsICVlY3gsICVlZHgKKwlSRVNUT1JFIGVieAorCXJldAorCUNGSV9FTkRQUk9DCitFTkRQUk9DKGF0b21pYzY0X1xmdW5jXCgpX3JldHVybl9jeDgpCisuZW5kbQorCitpbmNkZWNfcmV0dXJuIGluYyBhZGQgYWRjCitpbmNkZWNfcmV0dXJuIGRlYyBzdWIgc2JiCisKK0VOVFJZKGF0b21pYzY0X2RlY19pZl9wb3NpdGl2ZV9jeDgpCisJQ0ZJX1NUQVJUUFJPQworCVNBVkUgZWJ4CisKKwlyZWFkNjQgJWVzaQorMToKKwltb3ZsICVlYXgsICVlYngKKwltb3ZsICVlZHgsICVlY3gKKwlzdWJsICQxLCAlZWJ4CisJc2JiICQwLCAlZWN4CisJanMgMmYKKwlMT0NLX1BSRUZJWAorCWNtcHhjaGc4YiAoJWVzaSkKKwlqbmUgMWIKKworMjoKKwltb3ZsICVlYngsICVlYXgKKwltb3ZsICVlY3gsICVlZHgKKwlSRVNUT1JFIGVieAorCXJldAorCUNGSV9FTkRQUk9DCitFTkRQUk9DKGF0b21pYzY0X2RlY19pZl9wb3NpdGl2ZV9jeDgpCisKK0VOVFJZKGF0b21pYzY0X2FkZF91bmxlc3NfY3g4KQorCUNGSV9TVEFSVFBST0MKKwlTQVZFIGVicAorCVNBVkUgZWJ4CisvKiB0aGVzZSBqdXN0IHB1c2ggdGhlc2UgdHdvIHBhcmFtZXRlcnMgb24gdGhlIHN0YWNrICovCisJU0FWRSBlZGkKKwlTQVZFIGVzaQorCisJbW92bCAlZWN4LCAlZWJwCisJbW92bCAlZWF4LCAlZXNpCisJbW92bCAlZWR4LCAlZWRpCisKKwlyZWFkNjQgJWVicAorMToKKwljbXBsICVlYXgsIDAoJWVzcCkKKwlqZSA0ZgorMjoKKwltb3ZsICVlYXgsICVlYngKKwltb3ZsICVlZHgsICVlY3gKKwlhZGRsICVlc2ksICVlYngKKwlhZGNsICVlZGksICVlY3gKKwlMT0NLX1BSRUZJWAorCWNtcHhjaGc4YiAoJWVicCkKKwlqbmUgMWIKKworCW1vdmwgJDEsICVlYXgKKzM6CisJYWRkbCAkOCwgJWVzcAorCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtOAorCVJFU1RPUkUgZWJ4CisJUkVTVE9SRSBlYnAKKwlyZXQKKzQ6CisJY21wbCAlZWR4LCA0KCVlc3ApCisJam5lIDJiCisJeG9ybCAlZWF4LCAlZWF4CisJam1wIDNiCisJQ0ZJX0VORFBST0MKK0VORFBST0MoYXRvbWljNjRfYWRkX3VubGVzc19jeDgpCisKK0VOVFJZKGF0b21pYzY0X2luY19ub3RfemVyb19jeDgpCisJQ0ZJX1NUQVJUUFJPQworCVNBVkUgZWJ4CisKKwlyZWFkNjQgJWVzaQorMToKKwl0ZXN0bCAlZWF4LCAlZWF4CisJamUgNGYKKzI6CisJbW92bCAlZWF4LCAlZWJ4CisJbW92bCAlZWR4LCAlZWN4CisJYWRkbCAkMSwgJWVieAorCWFkY2wgJDAsICVlY3gKKwlMT0NLX1BSRUZJWAorCWNtcHhjaGc4YiAoJWVzaSkKKwlqbmUgMWIKKworCW1vdmwgJDEsICVlYXgKKzM6CisJUkVTVE9SRSBlYngKKwlyZXQKKzQ6CisJdGVzdGwgJWVkeCwgJWVkeAorCWpuZSAyYgorCWptcCAzYgorCUNGSV9FTkRQUk9DCitFTkRQUk9DKGF0b21pYzY0X2luY19ub3RfemVyb19jeDgpCmRpZmYgLS1naXQgYS9hcmNoL3VuaWNvcmUzMi9rZXJuZWwvaXJxLmMgYi9hcmNoL3VuaWNvcmUzMi9rZXJuZWwvaXJxLmMKaW5kZXggMmFhMzBhMy4uZDRlZmE3ZCAxMDA2NDQKLS0tIGEvYXJjaC91bmljb3JlMzIva2VybmVsL2lycS5jCisrKyBiL2FyY2gvdW5pY29yZTMyL2tlcm5lbC9pcnEuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTIzNyw3ICsyMzcsNyBAQAogCXVuc2lnbmVkIGludAlpY2NyOwogfSBwdXYzX2lycV9zdGF0ZTsKIAotc3RhdGljIGludCBwdXYzX2lycV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcHV2M19pcnFfc3VzcGVuZCh2b2lkKQogewogCXN0cnVjdCBwdXYzX2lycV9zdGF0ZSAqc3QgPSAmcHV2M19pcnFfc3RhdGU7CiAKQEAgLTI2NSw3ICsyNjUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHB1djNfaXJxX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgcHV2M19pcnFfcmVzdW1lKHZvaWQpCiB7CiAJc3RydWN0IHB1djNfaXJxX3N0YXRlICpzdCA9ICZwdXYzX2lycV9zdGF0ZTsKIApAQCAtMjc4LDI3ICsyNzgsMjAgQEAKIAogCQl3cml0ZWwoc3QtPmljbXIsIElOVENfSUNNUik7CiAJfQotCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBwdXYzX2lycV9zeXNjbGFzcyA9IHsKLQkubmFtZQkJPSAicGt1bml0eS1pcnEiLAorc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBwdXYzX2lycV9zeXNjb3JlX29wcyA9IHsKIAkuc3VzcGVuZAk9IHB1djNfaXJxX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBwdXYzX2lycV9yZXN1bWUsCiB9OwogCi1zdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgcHV2M19pcnFfZGV2aWNlID0gewotCS5pZAkJPSAwLAotCS5jbHMJCT0gJnB1djNfaXJxX3N5c2NsYXNzLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgcHV2M19pcnFfaW5pdF9kZXZpY2Vmcyh2b2lkKQorc3RhdGljIGludCBfX2luaXQgcHV2M19pcnFfaW5pdF9zeXNjb3JlKHZvaWQpCiB7Ci0Jc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZwdXYzX2lycV9zeXNjbGFzcyk7Ci0JcmV0dXJuIHN5c2Rldl9yZWdpc3RlcigmcHV2M19pcnFfZGV2aWNlKTsKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmcHV2M19pcnFfc3lzY29yZV9vcHMpOworCXJldHVybiAwOwogfQogCi1kZXZpY2VfaW5pdGNhbGwocHV2M19pcnFfaW5pdF9kZXZpY2Vmcyk7CitkZXZpY2VfaW5pdGNhbGwocHV2M19pcnFfaW5pdF9zeXNjb3JlKTsKIAogdm9pZCBfX2luaXQgaW5pdF9JUlEodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvdW5pY29yZTMyL2tlcm5lbC90cmFwcy5jIGIvYXJjaC91bmljb3JlMzIva2VybmVsL3RyYXBzLmMKaW5kZXggMjU0ZTM2Zi4uYjlhMjY0NiAxMDA2NDQKLS0tIGEvYXJjaC91bmljb3JlMzIva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC91bmljb3JlMzIva2VybmVsL3RyYXBzLmMKQEAgLTE5Miw3ICsxOTIsNiBAQAogCiAJcHJpbnRrKEtFUk5fRU1FUkcgIkludGVybmFsIGVycm9yOiAlczogJXggWyMlZF1cbiIsCiAJICAgICAgIHN0ciwgZXJyLCArK2RpZV9jb3VudGVyKTsKLQlzeXNmc19wcmludGtfbGFzdF9maWxlKCk7CiAKIAkvKiB0cmFwIGFuZCBlcnJvciBudW1iZXJzIGFyZSBtb3N0bHkgbWVhbmluZ2xlc3Mgb24gVW5pQ29yZSAqLwogCXJldCA9IG5vdGlmeV9kaWUoRElFX09PUFMsIHN0ciwgcmVncywgZXJyLCB0c2stPnRocmVhZC50cmFwX25vLCBcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LYnVpbGQgYi9hcmNoL3g4Ni9LYnVpbGQKaW5kZXggMGUxMDMyMy4uMGU5ZGVjNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2J1aWxkCisrKyBiL2FyY2gveDg2L0tidWlsZApAQCAtMTUsMyArMTUsNCBAQAogb2JqLSQoQ09ORklHX0lBMzJfRU1VTEFUSU9OKSArPSBpYTMyLwogCiBvYmoteSArPSBwbGF0Zm9ybS8KK29iai15ICs9IG5ldC8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IGNjNmM1M2EuLjg4MGZjYjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZwpAQCAtOCw2ICs4LDcgQEAKIAogY29uZmlnIFg4Nl8zMgogCWRlZl9ib29sICE2NEJJVAorCXNlbGVjdCBDTEtTUkNfSTgyNTMKIAogY29uZmlnIFg4Nl82NAogCWRlZl9ib29sIDY0QklUCkBAIC03MSw3ICs3Miw3IEBACiAJc2VsZWN0IEdFTkVSSUNfSVJRX1NIT1cKIAlzZWxlY3QgSVJRX0ZPUkNFRF9USFJFQURJTkcKIAlzZWxlY3QgVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgaWYgU01QCi0Jc2VsZWN0IEFSQ0hfTk9fU1lTREVWX09QUworCXNlbGVjdCBIQVZFX0JQRl9KSVQgaWYgKFg4Nl82NCAmJiBORVQpCiAKIGNvbmZpZyBJTlNUUlVDVElPTl9ERUNPREVSCiAJZGVmX2Jvb2wgKEtQUk9CRVMgfHwgUEVSRl9FVkVOVFMpCkBAIC0xMTIsNyArMTEzLDE0IEBACiAJZGVmX2Jvb2wgeQogCiBjb25maWcgWk9ORV9ETUEKLQlkZWZfYm9vbCB5CisJYm9vbCAiRE1BIG1lbW9yeSBhbGxvY2F0aW9uIHN1cHBvcnQiIGlmIEVYUEVSVAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIERNQSBtZW1vcnkgYWxsb2NhdGlvbiBzdXBwb3J0IGFsbG93cyBkZXZpY2VzIHdpdGggbGVzcyB0aGFuIDMyLWJpdAorCSAgYWRkcmVzc2luZyB0byBhbGxvY2F0ZSB3aXRoaW4gdGhlIGZpcnN0IDE2TUIgb2YgYWRkcmVzcyBzcGFjZS4KKwkgIERpc2FibGUgaWYgbm8gc3VjaCBkZXZpY2VzIHdpbGwgYmUgdXNlZC4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAogY29uZmlnIFNCVVMKIAlib29sCkBAIC0zNjUsMTcgKzM3Myw2IEBACiAjIEZvbGxvd2luZyBpcyBhbiBhbHBoYWJldGljYWxseSBzb3J0ZWQgbGlzdCBvZiAzMiBiaXQgZXh0ZW5kZWQgcGxhdGZvcm1zCiAjIFBsZWFzZSBtYWludGFpbiB0aGUgYWxwaGFiZXRpYyBvcmRlciBpZiBhbmQgd2hlbiB0aGVyZSBhcmUgYWRkaXRpb25zCiAKLWNvbmZpZyBYODZfRUxBTgotCWJvb2wgIkFNRCBFbGFuIgotCWRlcGVuZHMgb24gWDg2XzMyCi0JZGVwZW5kcyBvbiBYODZfRVhURU5ERURfUExBVEZPUk0KLQktLS1oZWxwLS0tCi0JICBTZWxlY3QgdGhpcyBmb3IgYW4gQU1EIEVsYW4gcHJvY2Vzc29yLgotCi0JICBEbyBub3QgdXNlIHRoaXMgb3B0aW9uIGZvciBLNi9BdGhsb24vT3B0ZXJvbiBwcm9jZXNzb3JzIQotCi0JICBJZiB1bnN1cmUsIGNob29zZSAiUEMtY29tcGF0aWJsZSIgaW5zdGVhZC4KLQogY29uZmlnIFg4Nl9JTlRFTF9DRQogCWJvb2wgIkNFNDEwMCBUViBwbGF0Zm9ybSIKIAlkZXBlbmRzIG9uIFBDSQpAQCAtNjkwLDYgKzY4Nyw3IEBACiAJYm9vbCAiQU1EIElPTU1VIHN1cHBvcnQiCiAJc2VsZWN0IFNXSU9UTEIKIAlzZWxlY3QgUENJX01TSQorCXNlbGVjdCBQQ0lfSU9WCiAJZGVwZW5kcyBvbiBYODZfNjQgJiYgUENJICYmIEFDUEkKIAktLS1oZWxwLS0tCiAJICBXaXRoIHRoaXMgb3B0aW9uIHlvdSBjYW4gZW5hYmxlIHN1cHBvcnQgZm9yIEFNRCBJT01NVSBoYXJkd2FyZSBpbgpAQCAtMTE3NCw3ICsxMTcyLDcgQEAKIGNvbmZpZyBBTURfTlVNQQogCWRlZl9ib29sIHkKIAlwcm9tcHQgIk9sZCBzdHlsZSBBTUQgT3B0ZXJvbiBOVU1BIGRldGVjdGlvbiIKLQlkZXBlbmRzIG9uIFg4Nl82NCAmJiBOVU1BICYmIFBDSQorCWRlcGVuZHMgb24gTlVNQSAmJiBQQ0kKIAktLS1oZWxwLS0tCiAJICBFbmFibGUgQU1EIE5VTUEgbm9kZSB0b3BvbG9neSBkZXRlY3Rpb24uICBZb3Ugc2hvdWxkIHNheSBZIGhlcmUgaWYKIAkgIHlvdSBoYXZlIGEgbXVsdGkgcHJvY2Vzc29yIEFNRCBzeXN0ZW0uIFRoaXMgdXNlcyBhbiBvbGQgbWV0aG9kIHRvCkBAIC0xMjAxLDcgKzExOTksNyBAQAogCiBjb25maWcgTlVNQV9FTVUKIAlib29sICJOVU1BIGVtdWxhdGlvbiIKLQlkZXBlbmRzIG9uIFg4Nl82NCAmJiBOVU1BCisJZGVwZW5kcyBvbiBOVU1BCiAJLS0taGVscC0tLQogCSAgRW5hYmxlIE5VTUEgZW11bGF0aW9uLiBBIGZsYXQgbWFjaGluZSB3aWxsIGJlIHNwbGl0CiAJICBpbnRvIHZpcnR1YWwgbm9kZXMgd2hlbiBib290ZWQgd2l0aCAibnVtYT1mYWtlPU4iLCB3aGVyZSBOIGlzIHRoZQpAQCAtMTIyMyw2ICsxMjIxLDEwIEBACiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gWDg2XzMyICYmIE5VTUEKIAorY29uZmlnIEhBVkVfQVJDSF9BTExPQ19SRU1BUAorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIFg4Nl8zMiAmJiBOVU1BCisKIGNvbmZpZyBBUkNIX0hBVkVfTUVNT1JZX1BSRVNFTlQKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBYODZfMzIgJiYgRElTQ09OVElHTUVNCkBAIC0xMjMxLDEzICsxMjMzLDkgQEAKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBYODZfMzIgJiYgKERJU0NPTlRJR01FTSB8fCBTUEFSU0VNRU0pCiAKLWNvbmZpZyBIQVZFX0FSQ0hfQUxMT0NfUkVNQVAKLQlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBYODZfMzIgJiYgTlVNQQotCiBjb25maWcgQVJDSF9GTEFUTUVNX0VOQUJMRQogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIFg4Nl8zMiAmJiBBUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgJiYgIU5VTUEKKwlkZXBlbmRzIG9uIFg4Nl8zMiAmJiAhTlVNQQogCiBjb25maWcgQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFCiAJZGVmX2Jvb2wgeQpAQCAtMTI0NywyMCArMTI0NSwxNiBAQAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIE5VTUEgJiYgWDg2XzMyCiAKLWNvbmZpZyBBUkNIX1BST0NfS0NPUkVfVEVYVAotCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIFg4Nl82NCAmJiBQUk9DX0tDT1JFCi0KLWNvbmZpZyBBUkNIX1NQQVJTRU1FTV9ERUZBVUxUCi0JZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gWDg2XzY0Ci0KIGNvbmZpZyBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBYODZfNjQgfHwgTlVNQSB8fCAoRVhQRVJJTUVOVEFMICYmIFg4Nl8zMikgfHwgWDg2XzMyX05PTl9TVEFOREFSRAogCXNlbGVjdCBTUEFSU0VNRU1fU1RBVElDIGlmIFg4Nl8zMgogCXNlbGVjdCBTUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaWYgWDg2XzY0CiAKK2NvbmZpZyBBUkNIX1NQQVJTRU1FTV9ERUZBVUxUCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gWDg2XzY0CisKIGNvbmZpZyBBUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKQEAgLTEyNjksNiArMTI2MywxMCBAQAogCWRlZl9ib29sIFg4Nl82NAogCWRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUcKIAorY29uZmlnIEFSQ0hfUFJPQ19LQ09SRV9URVhUCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gWDg2XzY0ICYmIFBST0NfS0NPUkUKKwogY29uZmlnIElMTEVHQUxfUE9JTlRFUl9WQUxVRQogICAgICAgIGhleAogICAgICAgIGRlZmF1bHQgMCBpZiBYODZfMzIKQEAgLTE3MDMsMTAgKzE3MDEsNiBAQAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHCiAKLWNvbmZpZyBIQVZFX0FSQ0hfRUFSTFlfUEZOX1RPX05JRAotCWRlZl9ib29sIFg4Nl82NAotCWRlcGVuZHMgb24gTlVNQQotCiBjb25maWcgVVNFX1BFUkNQVV9OVU1BX05PREVfSUQKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBOVU1BCkBAIC0xODQ4LDcgKzE4NDIsNyBAQAogCiBlbmRpZiAjIEFQTQogCi1zb3VyY2UgImFyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9LY29uZmlnIgorc291cmNlICJkcml2ZXJzL2NwdWZyZXEvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL2NwdWlkbGUvS2NvbmZpZyIKIApAQCAtMjA3Niw3ICsyMDcwLDcgQEAKIAlkZXBlbmRzIG9uICFYODZfUEFFCiAJc2VsZWN0IEdQSU9MSUIKIAlzZWxlY3QgT0YKLQlzZWxlY3QgT0ZfUFJPTVRSRUUgaWYgUFJPQ19ERVZJQ0VUUkVFCisJc2VsZWN0IE9GX1BST01UUkVFCiAJLS0taGVscC0tLQogCSAgQWRkIHN1cHBvcnQgZm9yIGRldGVjdGluZyB0aGUgdW5pcXVlIGZlYXR1cmVzIG9mIHRoZSBPTFBDCiAJICBYTyBoYXJkd2FyZS4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcuY3B1IGIvYXJjaC94ODYvS2NvbmZpZy5jcHUKaW5kZXggZDE2MWU5My4uNmE3Y2ZkZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZy5jcHUKKysrIGIvYXJjaC94ODYvS2NvbmZpZy5jcHUKQEAgLTEsNiArMSw0IEBACiAjIFB1dCBoZXJlIG9wdGlvbiBmb3IgQ1BVIHNlbGVjdGlvbiBhbmQgZGVwZW5kaW5nIG9wdGltaXphdGlvbgotaWYgIVg4Nl9FTEFOCi0KIGNob2ljZQogCXByb21wdCAiUHJvY2Vzc29yIGZhbWlseSIKIAlkZWZhdWx0IE02ODYgaWYgWDg2XzMyCkBAIC0yMDMsNiArMjAxLDE0IEBACiAJICBzdG9yZXMgZm9yIHRoaXMgQ1BVLCB3aGljaCBjYW4gaW5jcmVhc2UgcGVyZm9ybWFuY2Ugb2Ygc29tZQogCSAgb3BlcmF0aW9ucy4KIAorY29uZmlnIE1FTEFOCisJYm9vbCAiQU1EIEVsYW4iCisJZGVwZW5kcyBvbiBYODZfMzIKKwktLS1oZWxwLS0tCisJICBTZWxlY3QgdGhpcyBmb3IgYW4gQU1EIEVsYW4gcHJvY2Vzc29yLgorCisJICBEbyBub3QgdXNlIHRoaXMgb3B0aW9uIGZvciBLNi9BdGhsb24vT3B0ZXJvbiBwcm9jZXNzb3JzIQorCiBjb25maWcgTUdFT0RFR1gxCiAJYm9vbCAiR2VvZGVHWDEiCiAJZGVwZW5kcyBvbiBYODZfMzIKQEAgLTI5Miw4ICsyOTgsNiBAQAogCSAgVGhpcyBpcyByZWFsbHkgaW50ZW5kZWQgZm9yIGRpc3RyaWJ1dG9ycyB3aG8gbmVlZCBtb3JlCiAJICBnZW5lcmljIG9wdGltaXphdGlvbnMuCiAKLWVuZGlmCi0KICMKICMgRGVmaW5lIGltcGxpZWQgb3B0aW9ucyBmcm9tIHRoZSBDUFUgc2VsZWN0aW9uIGhlcmUKIGNvbmZpZyBYODZfSU5URVJOT0RFX0NBQ0hFX1NISUZUCkBAIC0zMTIsNyArMzE2LDcgQEAKIAlpbnQKIAlkZWZhdWx0ICI3IiBpZiBNUEVOVElVTTQgfHwgTVBTQwogCWRlZmF1bHQgIjYiIGlmIE1LNyB8fCBNSzggfHwgTVBFTlRJVU1NIHx8IE1DT1JFMiB8fCBNQVRPTSB8fCBNVklBQzcgfHwgWDg2X0dFTkVSSUMgfHwgR0VORVJJQ19DUFUKLQlkZWZhdWx0ICI0IiBpZiBYODZfRUxBTiB8fCBNNDg2IHx8IE0zODYgfHwgTUdFT0RFR1gxCisJZGVmYXVsdCAiNCIgaWYgTUVMQU4gfHwgTTQ4NiB8fCBNMzg2IHx8IE1HRU9ERUdYMQogCWRlZmF1bHQgIjUiIGlmIE1XSU5DSElQM0QgfHwgTVdJTkNISVBDNiB8fCBNQ1JVU09FIHx8IE1FRkZJQ0VPTiB8fCBNQ1lSSVhJSUkgfHwgTUs2IHx8IE1QRU5USVVNSUlJIHx8IE1QRU5USVVNSUkgfHwgTTY4NiB8fCBNNTg2TU1YIHx8IE01ODZUU0MgfHwgTTU4NiB8fCBNVklBQzNfMiB8fCBNR0VPREVfTFgKIAogY29uZmlnIFg4Nl9YQURECkBAIC0zNTgsNyArMzYyLDcgQEAKIAogY29uZmlnIFg4Nl9BTElHTk1FTlRfMTYKIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBNV0lOQ0hJUDNEIHx8IE1XSU5DSElQQzYgfHwgTUNZUklYSUlJIHx8IFg4Nl9FTEFOIHx8IE1LNiB8fCBNNTg2TU1YIHx8IE01ODZUU0MgfHwgTTU4NiB8fCBNNDg2IHx8IE1WSUFDM18yIHx8IE1HRU9ERUdYMQorCWRlcGVuZHMgb24gTVdJTkNISVAzRCB8fCBNV0lOQ0hJUEM2IHx8IE1DWVJJWElJSSB8fCBNRUxBTiB8fCBNSzYgfHwgTTU4Nk1NWCB8fCBNNTg2VFNDIHx8IE01ODYgfHwgTTQ4NiB8fCBNVklBQzNfMiB8fCBNR0VPREVHWDEKIAogY29uZmlnIFg4Nl9JTlRFTF9VU0VSQ09QWQogCWRlZl9ib29sIHkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L01ha2VmaWxlXzMyLmNwdSBiL2FyY2gveDg2L01ha2VmaWxlXzMyLmNwdQppbmRleCBmMmVlMWFiLi44NmNlZTdiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9NYWtlZmlsZV8zMi5jcHUKKysrIGIvYXJjaC94ODYvTWFrZWZpbGVfMzIuY3B1CkBAIC0zNyw3ICszNyw3IEBACiAJJChjYWxsIGNjLW9wdGlvbiwtbXR1bmU9YXRvbSwkKGNhbGwgY2Mtb3B0aW9uLC1tdHVuZT1nZW5lcmljKSkKIAogIyBBTUQgRWxhbiBzdXBwb3J0Ci1jZmxhZ3MtJChDT05GSUdfWDg2X0VMQU4pCSs9IC1tYXJjaD1pNDg2CitjZmxhZ3MtJChDT05GSUdfTUVMQU4pCQkrPSAtbWFyY2g9aTQ4NgogCiAjIEdlb2RlIEdYMSBzdXBwb3J0CiBjZmxhZ3MtJChDT05GSUdfTUdFT0RFR1gxKQkrPSAtbWFyY2g9cGVudGl1bS1tbXgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvbWVtb3J5LmMgYi9hcmNoL3g4Ni9ib290L21lbW9yeS5jCmluZGV4IGNhZTNmZWIuLmRiNzVkMDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvbWVtb3J5LmMKKysrIGIvYXJjaC94ODYvYm9vdC9tZW1vcnkuYwpAQCAtOTEsNyArOTEsNyBAQAogCWlmIChvcmVnLmF4ID4gMTUqMTAyNCkgewogCQlyZXR1cm4gLTE7CS8qIEJvZ3VzISAqLwogCX0gZWxzZSBpZiAob3JlZy5heCA9PSAxNSoxMDI0KSB7Ci0JCWJvb3RfcGFyYW1zLmFsdF9tZW1fayA9IChvcmVnLmR4IDw8IDYpICsgb3JlZy5heDsKKwkJYm9vdF9wYXJhbXMuYWx0X21lbV9rID0gKG9yZWcuYnggPDwgNikgKyBvcmVnLmF4OwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIFRoaXMgaWdub3JlcyBtZW1vcnkgYWJvdmUgMTZNQiBpZiB3ZSBoYXZlIGEgbWVtb3J5CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGUgYi9hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGUKaW5kZXggMWE1OGFkOC4uYzA0ZjFiNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2NyeXB0by9NYWtlZmlsZQpAQCAtMiw4ICsyLDYgQEAKICMgQXJjaC1zcGVjaWZpYyBDcnlwdG9BUEkgbW9kdWxlcy4KICMKIAotb2JqLSQoQ09ORklHX0NSWVBUT19GUFUpICs9IGZwdS5vCi0KIG9iai0kKENPTkZJR19DUllQVE9fQUVTXzU4NikgKz0gYWVzLWk1ODYubwogb2JqLSQoQ09ORklHX0NSWVBUT19UV09GSVNIXzU4NikgKz0gdHdvZmlzaC1pNTg2Lm8KIG9iai0kKENPTkZJR19DUllQVE9fU0FMU0EyMF81ODYpICs9IHNhbHNhMjAtaTU4Ni5vCkBAIC0yNCw2ICsyMiw2IEBACiB0d29maXNoLXg4Nl82NC15IDo9IHR3b2Zpc2gteDg2XzY0LWFzbV82NC5vIHR3b2Zpc2hfZ2x1ZS5vCiBzYWxzYTIwLXg4Nl82NC15IDo9IHNhbHNhMjAteDg2XzY0LWFzbV82NC5vIHNhbHNhMjBfZ2x1ZS5vCiAKLWFlc25pLWludGVsLXkgOj0gYWVzbmktaW50ZWxfYXNtLm8gYWVzbmktaW50ZWxfZ2x1ZS5vCithZXNuaS1pbnRlbC15IDo9IGFlc25pLWludGVsX2FzbS5vIGFlc25pLWludGVsX2dsdWUubyBmcHUubwogCiBnaGFzaC1jbG11bG5pLWludGVsLXkgOj0gZ2hhc2gtY2xtdWxuaS1pbnRlbF9hc20ubyBnaGFzaC1jbG11bG5pLWludGVsX2dsdWUubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2dsdWUuYyBiL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9nbHVlLmMKaW5kZXggMjU3NzYxMy4uZmVlZThmZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2dsdWUuYworKysgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfZ2x1ZS5jCkBAIC05NCw2ICs5NCwxMCBAQAogCQkJICAgICAgY29uc3QgdTggKmluLCB1bnNpZ25lZCBpbnQgbGVuLCB1OCAqaXYpOwogYXNtbGlua2FnZSB2b2lkIGFlc25pX2NiY19kZWMoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpvdXQsCiAJCQkgICAgICBjb25zdCB1OCAqaW4sIHVuc2lnbmVkIGludCBsZW4sIHU4ICppdik7CisKK2ludCBjcnlwdG9fZnB1X2luaXQodm9pZCk7Cit2b2lkIGNyeXB0b19mcHVfZXhpdCh2b2lkKTsKKwogI2lmZGVmIENPTkZJR19YODZfNjQKIGFzbWxpbmthZ2Ugdm9pZCBhZXNuaV9jdHJfZW5jKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqb3V0LAogCQkJICAgICAgY29uc3QgdTggKmluLCB1bnNpZ25lZCBpbnQgbGVuLCB1OCAqaXYpOwpAQCAtMTI1Nyw2ICsxMjYxLDggQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCisJaWYgKChlcnIgPSBjcnlwdG9fZnB1X2luaXQoKSkpCisJCWdvdG8gZnB1X2VycjsKIAlpZiAoKGVyciA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFlc25pX2FsZykpKQogCQlnb3RvIGFlc19lcnI7CiAJaWYgKChlcnIgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZfX2Flc25pX2FsZykpKQpAQCAtMTMzNCw2ICsxMzQwLDcgQEAKIF9fYWVzX2VycjoKIAljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFlc25pX2FsZyk7CiBhZXNfZXJyOgorZnB1X2VycjoKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMzYzLDYgKzEzNzAsOCBAQAogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYmxrX2VjYl9hbGcpOwogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmX19hZXNuaV9hbGcpOwogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWVzbmlfYWxnKTsKKworCWNyeXB0b19mcHVfZXhpdCgpOwogfQogCiBtb2R1bGVfaW5pdChhZXNuaV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NyeXB0by9mcHUuYyBiL2FyY2gveDg2L2NyeXB0by9mcHUuYwppbmRleCAxYThmODY0Li45OGQ3YTE4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jcnlwdG8vZnB1LmMKKysrIGIvYXJjaC94ODYvY3J5cHRvL2ZwdS5jCkBAIC0xNTAsMTggKzE1MCwxMiBAQAogCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGNyeXB0b19mcHVfbW9kdWxlX2luaXQodm9pZCkKK2ludCBfX2luaXQgY3J5cHRvX2ZwdV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl90ZW1wbGF0ZSgmY3J5cHRvX2ZwdV90bXBsKTsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IGNyeXB0b19mcHVfbW9kdWxlX2V4aXQodm9pZCkKK3ZvaWQgX19leGl0IGNyeXB0b19mcHVfZXhpdCh2b2lkKQogewogCWNyeXB0b191bnJlZ2lzdGVyX3RlbXBsYXRlKCZjcnlwdG9fZnB1X3RtcGwpOwogfQotCi1tb2R1bGVfaW5pdChjcnlwdG9fZnB1X21vZHVsZV9pbml0KTsKLW1vZHVsZV9leGl0KGNyeXB0b19mcHVfbW9kdWxlX2V4aXQpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkZQVSBibG9jayBjaXBoZXIgd3JhcHBlciIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUyBiL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKaW5kZXggODQ5YTlkMi4uOTVmNTgyNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUworKysgYi9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCkBAIC04NDgsNCArODQ4LDUgQEAKIAkucXVhZCBjb21wYXRfc3lzX29wZW5fYnlfaGFuZGxlX2F0CiAJLnF1YWQgY29tcGF0X3N5c19jbG9ja19hZGp0aW1lCiAJLnF1YWQgc3lzX3N5bmNmcworCS5xdWFkIGNvbXBhdF9zeXNfc2VuZG1tc2cJLyogMzQ1ICovCiBpYTMyX3N5c2NhbGxfZW5kOgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNwaS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNwaS5oCmluZGV4IDEyZTBlN2QuLjQxNmQ4NjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FjcGkuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3BpLmgKQEAgLTE4Myw4ICsxODMsNiBAQAogCiAjZGVmaW5lIEFSQ0hfSEFTX1BPV0VSX0lOSVQJMQogCi1zdHJ1Y3QgYm9vdG5vZGU7Ci0KICNpZmRlZiBDT05GSUdfQUNQSV9OVU1BCiBleHRlcm4gaW50IGFjcGlfbnVtYTsKIGV4dGVybiBpbnQgeDg2X2FjcGlfbnVtYV9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUtYXNtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS1hc20uaAppbmRleCBhNjNhNjhiLi45NGQ0MjBiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS1hc20uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS1hc20uaApAQCAtMTUsNCArMTUsMTMgQEAKIAkuZW5kbQogI2VuZGlmCiAKKy5tYWNybyBhbHRpbnN0cnVjdGlvbl9lbnRyeSBvcmlnIGFsdCBmZWF0dXJlIG9yaWdfbGVuIGFsdF9sZW4KKwkuYWxpZ24gOAorCS5xdWFkIFxvcmlnCisJLnF1YWQgXGFsdAorCS53b3JkIFxmZWF0dXJlCisJLmJ5dGUgXG9yaWdfbGVuCisJLmJ5dGUgXGFsdF9sZW4KKy5lbmRtCisKICNlbmRpZiAgLyogIF9fQVNTRU1CTFlfXyAgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS5oCmluZGV4IDEzMDA5ZDEuLmJmNTM1ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUuaApAQCAtNCw3ICs0LDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgotI2luY2x1ZGUgPGxpbnV4L2p1bXBfbGFiZWwuaD4KICNpbmNsdWRlIDxhc20vYXNtLmg+CiAKIC8qCkBAIC0xOTEsMTIgKzE5MCw0IEBACiBleHRlcm4gdm9pZCAqdGV4dF9wb2tlX3NtcCh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4pOwogZXh0ZXJuIHZvaWQgdGV4dF9wb2tlX3NtcF9iYXRjaChzdHJ1Y3QgdGV4dF9wb2tlX3BhcmFtICpwYXJhbXMsIGludCBuKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfRlRSQUNFKSB8fCBkZWZpbmVkKEhBVkVfSlVNUF9MQUJFTCkKLSNkZWZpbmUgSURFQUxfTk9QX1NJWkVfNSA1Ci1leHRlcm4gdW5zaWduZWQgY2hhciBpZGVhbF9ub3A1W0lERUFMX05PUF9TSVpFXzVdOwotZXh0ZXJuIHZvaWQgYXJjaF9pbml0X2lkZWFsX25vcDUodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfaW5pdF9pZGVhbF9ub3A1KHZvaWQpIHt9Ci0jZW5kaWYKLQogI2VuZGlmIC8qIF9BU01fWDg2X0FMVEVSTkFUSVZFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FtZF9pb21tdV9wcm90by5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11X3Byb3RvLmgKaW5kZXggOTE2YmM4MS4uNTVkOTVlYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11X3Byb3RvLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11X3Byb3RvLmgKQEAgLTE5LDEzICsxOSwxMiBAQAogI2lmbmRlZiBfQVNNX1g4Nl9BTURfSU9NTVVfUFJPVE9fSAogI2RlZmluZSBfQVNNX1g4Nl9BTURfSU9NTVVfUFJPVE9fSAogCi1zdHJ1Y3QgYW1kX2lvbW11OworI2luY2x1ZGUgPGFzbS9hbWRfaW9tbXVfdHlwZXMuaD4KIAogZXh0ZXJuIGludCBhbWRfaW9tbXVfaW5pdF9kbWFfb3BzKHZvaWQpOwogZXh0ZXJuIGludCBhbWRfaW9tbXVfaW5pdF9wYXNzdGhyb3VnaCh2b2lkKTsKK2V4dGVybiBpcnFyZXR1cm5fdCBhbWRfaW9tbXVfaW50X3RocmVhZChpbnQgaXJxLCB2b2lkICpkYXRhKTsKIGV4dGVybiBpcnFyZXR1cm5fdCBhbWRfaW9tbXVfaW50X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSk7Ci1leHRlcm4gdm9pZCBhbWRfaW9tbXVfZmx1c2hfYWxsX2RvbWFpbnModm9pZCk7Ci1leHRlcm4gdm9pZCBhbWRfaW9tbXVfZmx1c2hfYWxsX2RldmljZXModm9pZCk7CiBleHRlcm4gdm9pZCBhbWRfaW9tbXVfYXBwbHlfZXJyYXR1bV82Myh1MTYgZGV2aWQpOwogZXh0ZXJuIHZvaWQgYW1kX2lvbW11X3Jlc2V0X2NtZF9idWZmZXIoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUpOwogZXh0ZXJuIGludCBhbWRfaW9tbXVfaW5pdF9kZXZpY2VzKHZvaWQpOwpAQCAtNDQsNCArNDMsMTIgQEAKIAkgICAgICAgKHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1JEODkwX0lPTU1VKTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGlvbW11X2ZlYXR1cmUoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsIHU2NCBmKQoreworCWlmICghKGlvbW11LT5jYXAgJiAoMSA8PCBJT01NVV9DQVBfRUZSKSkpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiAhIShpb21tdS0+ZmVhdHVyZXMgJiBmKTsKK30KKwogI2VuZGlmIC8qIF9BU01fWDg2X0FNRF9JT01NVV9QUk9UT19IICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11X3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbWRfaW9tbXVfdHlwZXMuaAppbmRleCBlMzUwOWZjLi40Yzk5ODI5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbWRfaW9tbXVfdHlwZXMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbWRfaW9tbXVfdHlwZXMuaApAQCAtNjgsMTIgKzY4LDI1IEBACiAjZGVmaW5lIE1NSU9fQ09OVFJPTF9PRkZTRVQgICAgIDB4MDAxOAogI2RlZmluZSBNTUlPX0VYQ0xfQkFTRV9PRkZTRVQgICAweDAwMjAKICNkZWZpbmUgTU1JT19FWENMX0xJTUlUX09GRlNFVCAgMHgwMDI4CisjZGVmaW5lIE1NSU9fRVhUX0ZFQVRVUkVTCTB4MDAzMAogI2RlZmluZSBNTUlPX0NNRF9IRUFEX09GRlNFVAkweDIwMDAKICNkZWZpbmUgTU1JT19DTURfVEFJTF9PRkZTRVQJMHgyMDA4CiAjZGVmaW5lIE1NSU9fRVZUX0hFQURfT0ZGU0VUCTB4MjAxMAogI2RlZmluZSBNTUlPX0VWVF9UQUlMX09GRlNFVAkweDIwMTgKICNkZWZpbmUgTU1JT19TVEFUVVNfT0ZGU0VUCTB4MjAyMAogCisKKy8qIEV4dGVuZGVkIEZlYXR1cmUgQml0cyAqLworI2RlZmluZSBGRUFUVVJFX1BSRUZFVENICSgxVUxMPDwwKQorI2RlZmluZSBGRUFUVVJFX1BQUgkJKDFVTEw8PDEpCisjZGVmaW5lIEZFQVRVUkVfWDJBUElDCQkoMVVMTDw8MikKKyNkZWZpbmUgRkVBVFVSRV9OWAkJKDFVTEw8PDMpCisjZGVmaW5lIEZFQVRVUkVfR1QJCSgxVUxMPDw0KQorI2RlZmluZSBGRUFUVVJFX0lBCQkoMVVMTDw8NikKKyNkZWZpbmUgRkVBVFVSRV9HQQkJKDFVTEw8PDcpCisjZGVmaW5lIEZFQVRVUkVfSEUJCSgxVUxMPDw4KQorI2RlZmluZSBGRUFUVVJFX1BDCQkoMVVMTDw8OSkKKwogLyogTU1JTyBzdGF0dXMgYml0cyAqLwogI2RlZmluZSBNTUlPX1NUQVRVU19DT01fV0FJVF9JTlRfTUFTSwkweDA0CiAKQEAgLTExMyw3ICsxMjYsOSBAQAogLyogY29tbWFuZCBzcGVjaWZpYyBkZWZpbmVzICovCiAjZGVmaW5lIENNRF9DT01QTF9XQUlUICAgICAgICAgIDB4MDEKICNkZWZpbmUgQ01EX0lOVl9ERVZfRU5UUlkgICAgICAgMHgwMgotI2RlZmluZSBDTURfSU5WX0lPTU1VX1BBR0VTICAgICAweDAzCisjZGVmaW5lIENNRF9JTlZfSU9NTVVfUEFHRVMJMHgwMworI2RlZmluZSBDTURfSU5WX0lPVExCX1BBR0VTCTB4MDQKKyNkZWZpbmUgQ01EX0lOVl9BTEwJCTB4MDgKIAogI2RlZmluZSBDTURfQ09NUExfV0FJVF9TVE9SRV9NQVNLCTB4MDEKICNkZWZpbmUgQ01EX0NPTVBMX1dBSVRfSU5UX01BU0sJCTB4MDIKQEAgLTIxNSw2ICsyMzAsOCBAQAogI2RlZmluZSBJT01NVV9QVEVfSVIgKDFVTEwgPDwgNjEpCiAjZGVmaW5lIElPTU1VX1BURV9JVyAoMVVMTCA8PCA2MikKIAorI2RlZmluZSBEVEVfRkxBR19JT1RMQgkweDAxCisKICNkZWZpbmUgSU9NTVVfUEFHRV9NQVNLICgoKDFVTEwgPDwgNTIpIC0gMSkgJiB+MHhmZmZVTEwpCiAjZGVmaW5lIElPTU1VX1BURV9QUkVTRU5UKHB0ZSkgKChwdGUpICYgSU9NTVVfUFRFX1ApCiAjZGVmaW5lIElPTU1VX1BURV9QQUdFKHB0ZSkgKHBoeXNfdG9fdmlydCgocHRlKSAmIElPTU1VX1BBR0VfTUFTSykpCkBAIC0yMjcsNiArMjQ0LDcgQEAKIC8qIElPTU1VIGNhcGFiaWxpdGllcyAqLwogI2RlZmluZSBJT01NVV9DQVBfSU9UTEIgICAyNAogI2RlZmluZSBJT01NVV9DQVBfTlBDQUNIRSAyNgorI2RlZmluZSBJT01NVV9DQVBfRUZSICAgICAyNwogCiAjZGVmaW5lIE1BWF9ET01BSU5fSUQgNjU1MzYKIApAQCAtMjQ5LDYgKzI2Nyw4IEBACiAKIC8qIGdsb2JhbCBmbGFnIGlmIElPTU1VcyBjYWNoZSBub24tcHJlc2VudCBlbnRyaWVzICovCiBleHRlcm4gYm9vbCBhbWRfaW9tbXVfbnBfY2FjaGU7CisvKiBPbmx5IHRydWUgaWYgYWxsIElPTU1VcyBzdXBwb3J0IGRldmljZSBJT1RMQnMgKi8KK2V4dGVybiBib29sIGFtZF9pb21tdV9pb3RsYl9zdXA7CiAKIC8qCiAgKiBNYWtlIGl0ZXJhdGluZyBvdmVyIGFsbCBJT01NVXMgZWFzaWVyCkBAIC0zNzEsNiArMzkxLDkgQEAKIAkvKiBmbGFncyByZWFkIGZyb20gYWNwaSB0YWJsZSAqLwogCXU4IGFjcGlfZmxhZ3M7CiAKKwkvKiBFeHRlbmRlZCBmZWF0dXJlcyAqLworCXU2NCBmZWF0dXJlczsKKwogCS8qCiAJICogQ2FwYWJpbGl0eSBwb2ludGVyLiBUaGVyZSBjb3VsZCBiZSBtb3JlIHRoYW4gb25lIElPTU1VIHBlciBQQ0kKIAkgKiBkZXZpY2UgZnVuY3Rpb24gaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgQU1EIElPTU1VIGNhcGFiaWxpdHkKQEAgLTQwOSw5ICs0MzIsNiBAQAogCS8qIGlmIG9uZSwgd2UgbmVlZCB0byBzZW5kIGEgY29tcGxldGlvbiB3YWl0IGNvbW1hbmQgKi8KIAlib29sIG5lZWRfc3luYzsKIAotCS8qIGJlY29tZXMgdHJ1ZSBpZiBhIGNvbW1hbmQgYnVmZmVyIHJlc2V0IGlzIHJ1bm5pbmcgKi8KLQlib29sIHJlc2V0X2luX3Byb2dyZXNzOwotCiAJLyogZGVmYXVsdCBkbWFfb3BzIGRvbWFpbiBmb3IgdGhhdCBJT01NVSAqLwogCXN0cnVjdCBkbWFfb3BzX2RvbWFpbiAqZGVmYXVsdF9kb207CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FtZF9uYi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX25iLmgKaW5kZXggMzMxNjgyMi4uNjdmODdmMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX25iLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX25iLmgKQEAgLTExLDcgKzExLDYgQEAKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFtZF9uYl9taXNjX2lkc1tdOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhbWRfbmJfYnVzX2Rldl9yYW5nZSBhbWRfbmJfYnVzX2Rldl9yYW5nZXNbXTsKLXN0cnVjdCBib290bm9kZTsKIAogZXh0ZXJuIGJvb2wgZWFybHlfaXNfYW1kX25iKHUzMiB2YWx1ZSk7CiBleHRlcm4gaW50IGFtZF9jYWNoZV9ub3J0aGJyaWRnZXModm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmgKaW5kZXggMmI3ZDU3My4uYTBjNDZmMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaApAQCAtMzYzLDcgKzM2MywxMiBAQAogCSAqLwogCWludCAoKng4Nl8zMl9lYXJseV9sb2dpY2FsX2FwaWNpZCkoaW50IGNwdSk7CiAKLQkvKiBkZXRlcm1pbmUgQ1BVIC0+IE5VTUEgbm9kZSBtYXBwaW5nICovCisJLyoKKwkgKiBPcHRpb25hbCBtZXRob2QgY2FsbGVkIGZyb20gc2V0dXBfbG9jYWxfQVBJQygpIGFmdGVyIGxvZ2ljYWwKKwkgKiBhcGljaWQgaXMgZ3VhcmFudGVlZCB0byBiZSBrbm93biB0byBpbml0aWFsaXplIGFwaWNpZCAtPiBub2RlCisJICogbWFwcGluZyBpZiBOVU1BIGluaXRpYWxpemF0aW9uIGhhc24ndCBkb25lIHNvIGFscmVhZHkuICBEb24ndAorCSAqIGFkZCBuZXcgdXNlcnMuCisJICovCiAJaW50ICgqeDg2XzMyX251bWFfY3B1X25vZGUpKGludCBjcHUpOwogI2VuZGlmCiB9OwpAQCAtNTM3LDggKzU0Miw2IEBACiAJcmV0dXJuIGNwdWlkX2FwaWMgPj4gaW5kZXhfbXNiOwogfQogCi1leHRlcm4gaW50IGRlZmF1bHRfeDg2XzMyX251bWFfY3B1X25vZGUoaW50IGNwdSk7Ci0KICNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpY2RlZi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpY2RlZi5oCmluZGV4IGQ4Nzk4OGIuLjM0NTk1ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWNkZWYuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljZGVmLmgKQEAgLTc4LDYgKzc4LDcgQEAKICNkZWZpbmUJCUFQSUNfREVTVF9MT0dJQ0FMCTB4MDA4MDAKICNkZWZpbmUJCUFQSUNfREVTVF9QSFlTSUNBTAkweDAwMDAwCiAjZGVmaW5lCQlBUElDX0RNX0ZJWEVECQkweDAwMDAwCisjZGVmaW5lCQlBUElDX0RNX0ZJWEVEX01BU0sJMHgwMDcwMAogI2RlZmluZQkJQVBJQ19ETV9MT1dFU1QJCTB4MDAxMDAKICNkZWZpbmUJCUFQSUNfRE1fU01JCQkweDAwMjAwCiAjZGVmaW5lCQlBUElDX0RNX1JFTVJECQkweDAwMzAwCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9iaW9zX2ViZGEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Jpb3NfZWJkYS5oCmluZGV4IDNjNzUyMTAuLmFhNmEzMTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Jpb3NfZWJkYS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Jpb3NfZWJkYS5oCkBAIC00LDE2ICs0LDQwIEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIC8qCi0gKiB0aGVyZSBpcyBhIHJlYWwtbW9kZSBzZWdtZW50ZWQgcG9pbnRlciBwb2ludGluZyB0byB0aGUKLSAqIDRLIEVCREEgYXJlYSBhdCAweDQwRS4KKyAqIFJldHVybnMgcGh5c2ljYWwgYWRkcmVzcyBvZiBFQkRBLiAgUmV0dXJucyAwIGlmIHRoZXJlIGlzIG5vIEVCREEuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9iaW9zX2ViZGEodm9pZCkKIHsKKwkvKgorCSAqIFRoZXJlIGlzIGEgcmVhbC1tb2RlIHNlZ21lbnRlZCBwb2ludGVyIHBvaW50aW5nIHRvIHRoZQorCSAqIDRLIEVCREEgYXJlYSBhdCAweDQwRS4KKwkgKi8KIAl1bnNpZ25lZCBpbnQgYWRkcmVzcyA9ICoodW5zaWduZWQgc2hvcnQgKilwaHlzX3RvX3ZpcnQoMHg0MEUpOwogCWFkZHJlc3MgPDw9IDQ7CiAJcmV0dXJuIGFkZHJlc3M7CS8qIDAgbWVhbnMgbm9uZSAqLwogfQogCisvKgorICogUmV0dXJuIHRoZSBzYW5pdGl6ZWQgbGVuZ3RoIG9mIHRoZSBFQkRBIGluIGJ5dGVzLCBpZiBpdCBleGlzdHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9iaW9zX2ViZGFfbGVuZ3RoKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGFkZHJlc3M7CisJdW5zaWduZWQgaW50IGxlbmd0aDsKKworCWFkZHJlc3MgPSBnZXRfYmlvc19lYmRhKCk7CisJaWYgKCFhZGRyZXNzKQorCQlyZXR1cm4gMDsKKworCS8qIEVCREEgbGVuZ3RoIGlzIGJ5dGUgMCBvZiB0aGUgRUJEQSAoc3RvcmVkIGluIEtpQikgKi8KKwlsZW5ndGggPSAqKHVuc2lnbmVkIGNoYXIgKilwaHlzX3RvX3ZpcnQoYWRkcmVzcyk7CisJbGVuZ3RoIDw8PSAxMDsKKworCS8qIFRyaW0gdGhlIGxlbmd0aCBpZiBpdCBleHRlbmRzIGJleW9uZCA2NDBLaUIgKi8KKwlsZW5ndGggPSBtaW5fdCh1bnNpZ25lZCBpbnQsICg2NDAgKiAxMDI0KSAtIGFkZHJlc3MsIGxlbmd0aCk7CisJcmV0dXJuIGxlbmd0aDsKK30KKwogdm9pZCByZXNlcnZlX2ViZGFfcmVnaW9uKHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl9DSEVDS19CSU9TX0NPUlJVUFRJT04KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaAppbmRleCA5MWYzZTA4Ny4uNWRjNmFjYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaApAQCAtMTk1LDYgKzE5NSw4IEBACiAKIC8qIEludGVsLWRlZmluZWQgQ1BVIGZlYXR1cmVzLCBDUFVJRCBsZXZlbCAweDAwMDAwMDA3OjAgKGVieCksIHdvcmQgOSAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9GU0dTQkFTRQkoOSozMisgMCkgLyoge1JEL1dSfXtGUy9HU31CQVNFIGluc3RydWN0aW9ucyovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1NNRVAJKDkqMzIrIDcpIC8qIFN1cGVydmlzb3IgTW9kZSBFeGVjdXRpb24gUHJvdGVjdGlvbiAqLworI2RlZmluZSBYODZfRkVBVFVSRV9FUk1TCSg5KjMyKyA5KSAvKiBFbmhhbmNlZCBSRVAgTU9WU0IvU1RPU0IgKi8KIAogI2lmIGRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoX19BU1NFTUJMWV9fKQogCkBAIC0yMDcsOCArMjA5LDcgQEAKICNkZWZpbmUgdGVzdF9jcHVfY2FwKGMsIGJpdCkJCQkJCQlcCiAJIHRlc3RfYml0KGJpdCwgKHVuc2lnbmVkIGxvbmcgKikoKGMpLT54ODZfY2FwYWJpbGl0eSkpCiAKLSNkZWZpbmUgY3B1X2hhcyhjLCBiaXQpCQkJCQkJCVwKLQkoX19idWlsdGluX2NvbnN0YW50X3AoYml0KSAmJgkJCQkJXAorI2RlZmluZSBSRVFVSVJFRF9NQVNLX0JJVF9TRVQoYml0KQkJCQkJXAogCSAoICgoKGJpdCk+PjUpPT0wICYmICgxVUw8PCgoYml0KSYzMSkgJiBSRVFVSVJFRF9NQVNLMCkpIHx8CVwKIAkgICAoKChiaXQpPj41KT09MSAmJiAoMVVMPDwoKGJpdCkmMzEpICYgUkVRVUlSRURfTUFTSzEpKSB8fAlcCiAJICAgKCgoYml0KT4+NSk9PTIgJiYgKDFVTDw8KChiaXQpJjMxKSAmIFJFUVVJUkVEX01BU0syKSkgfHwJXApAQCAtMjE4LDEwICsyMTksMTYgQEAKIAkgICAoKChiaXQpPj41KT09NiAmJiAoMVVMPDwoKGJpdCkmMzEpICYgUkVRVUlSRURfTUFTSzYpKSB8fAlcCiAJICAgKCgoYml0KT4+NSk9PTcgJiYgKDFVTDw8KChiaXQpJjMxKSAmIFJFUVVJUkVEX01BU0s3KSkgfHwJXAogCSAgICgoKGJpdCk+PjUpPT04ICYmICgxVUw8PCgoYml0KSYzMSkgJiBSRVFVSVJFRF9NQVNLOCkpIHx8CVwKLQkgICAoKChiaXQpPj41KT09OSAmJiAoMVVMPDwoKGJpdCkmMzEpICYgUkVRVUlSRURfTUFTSzkpKSApCVwKLQkgID8gMSA6CQkJCQkJCQlcCisJICAgKCgoYml0KT4+NSk9PTkgJiYgKDFVTDw8KChiaXQpJjMxKSAmIFJFUVVJUkVEX01BU0s5KSkgKQorCisjZGVmaW5lIGNwdV9oYXMoYywgYml0KQkJCQkJCQlcCisJKF9fYnVpbHRpbl9jb25zdGFudF9wKGJpdCkgJiYgUkVRVUlSRURfTUFTS19CSVRfU0VUKGJpdCkgPyAxIDoJXAogCSB0ZXN0X2NwdV9jYXAoYywgYml0KSkKIAorI2RlZmluZSB0aGlzX2NwdV9oYXMoYml0KQkJCQkJCVwKKwkoX19idWlsdGluX2NvbnN0YW50X3AoYml0KSAmJiBSRVFVSVJFRF9NQVNLX0JJVF9TRVQoYml0KSA/IDEgOiAJXAorCSB4ODZfdGhpc19jcHVfdGVzdF9iaXQoYml0LCAodW5zaWduZWQgbG9uZyAqKSZjcHVfaW5mby54ODZfY2FwYWJpbGl0eSkpCisKICNkZWZpbmUgYm9vdF9jcHVfaGFzKGJpdCkJY3B1X2hhcygmYm9vdF9jcHVfZGF0YSwgYml0KQogCiAjZGVmaW5lIHNldF9jcHVfY2FwKGMsIGJpdCkJc2V0X2JpdChiaXQsICh1bnNpZ25lZCBsb25nICopKChjKS0+eDg2X2NhcGFiaWxpdHkpKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1hLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEuaAppbmRleCAwNTcwOTllLi4wYmRiMGM1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEuaApAQCAtNjksMjIgKzY5LDE4IEBACiAKICNkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwk4CiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0KLS8qIFRoZSBtYXhpbXVtIGFkZHJlc3MgdGhhdCB3ZSBjYW4gcGVyZm9ybSBhIERNQSB0cmFuc2ZlciB0byBvbiB0aGlzIHBsYXRmb3JtICovCi0jZGVmaW5lIE1BWF9ETUFfQUREUkVTUyAgICAgIChQQUdFX09GRlNFVCArIDB4MTAwMDAwMCkKLQotI2Vsc2UKLQogLyogMTZNQiBJU0EgRE1BIHpvbmUgKi8KICNkZWZpbmUgTUFYX0RNQV9QRk4gICAoKDE2ICogMTAyNCAqIDEwMjQpID4+IFBBR0VfU0hJRlQpCiAKIC8qIDRHQiBicm9rZW4gUENJL0FHUCBoYXJkd2FyZSBidXMgbWFzdGVyIHpvbmUgKi8KICNkZWZpbmUgTUFYX0RNQTMyX1BGTiAoKDRVTCAqIDEwMjQgKiAxMDI0ICogMTAyNCkgPj4gUEFHRV9TSElGVCkKIAorI2lmZGVmIENPTkZJR19YODZfMzIKKy8qIFRoZSBtYXhpbXVtIGFkZHJlc3MgdGhhdCB3ZSBjYW4gcGVyZm9ybSBhIERNQSB0cmFuc2ZlciB0byBvbiB0aGlzIHBsYXRmb3JtICovCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUyAgICAgIChQQUdFX09GRlNFVCArIDB4MTAwMDAwMCkKKyNlbHNlCiAvKiBDb21wYXQgZGVmaW5lIGZvciBvbGQgZG1hIHpvbmUgKi8KICNkZWZpbmUgTUFYX0RNQV9BRERSRVNTICgodW5zaWduZWQgbG9uZylfX3ZhKE1BWF9ETUFfUEZOIDw8IFBBR0VfU0hJRlQpKQotCiAjZW5kaWYKIAogLyogODIzNyBETUEgY29udHJvbGxlcnMgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VmaS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmgKaW5kZXggOGU0YTE2NS4uNzA5M2U0YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmgKQEAgLTkwLDYgKzkwLDcgQEAKICNlbmRpZiAvKiBDT05GSUdfWDg2XzMyICovCiAKIGV4dGVybiBpbnQgYWRkX2VmaV9tZW1tYXA7CitleHRlcm4gdm9pZCBlZmlfc2V0X2V4ZWN1dGFibGUoZWZpX21lbW9yeV9kZXNjX3QgKm1kLCBib29sIGV4ZWN1dGFibGUpOwogZXh0ZXJuIHZvaWQgZWZpX21lbWJsb2NrX3g4Nl9yZXNlcnZlX3JhbmdlKHZvaWQpOwogZXh0ZXJuIHZvaWQgZWZpX2NhbGxfcGh5c19wcmVsb2codm9pZCk7CiBleHRlcm4gdm9pZCBlZmlfY2FsbF9waHlzX2VwaWxvZyh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Z0cmFjZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZnRyYWNlLmgKaW5kZXggZGIyNGMyMi4uMjY4Yzc4MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZnRyYWNlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZnRyYWNlLmgKQEAgLTM4LDExICszOCwxMCBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZ0cmFjZV9jYWxsX2FkanVzdCh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJLyoKLQkgKiBjYWxsIG1jb3VudCBpcyAiZTggPDQgYnl0ZSBvZmZzZXQ+IgotCSAqIFRoZSBhZGRyIHBvaW50cyB0byB0aGUgNCBieXRlIG9mZnNldCBhbmQgdGhlIGNhbGxlciBvZiB0aGlzCi0JICogZnVuY3Rpb24gd2FudHMgdGhlIHBvaW50ZXIgdG8gZTguIFNpbXBseSBzdWJ0cmFjdCBvbmUuCisJICogYWRkciBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgbWNvdW50IGNhbGwgaW5zdHJ1Y3Rpb24uCisJICogcmVjb3JkbWNvdW50IGRvZXMgdGhlIG5lY2Vzc2FyeSBvZmZzZXQgY2FsY3VsYXRpb24uCiAJICovCi0JcmV0dXJuIGFkZHIgLSAxOworCXJldHVybiBhZGRyOwogfQogCiAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pODI1My5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaTgyNTMuaAppbmRleCBmYzFmNTc5Li42NWFhYTkxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pODI1My5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2k4MjUzLmgKQEAgLTYsNiArNiw4IEBACiAjZGVmaW5lIFBJVF9DSDAJCQkweDQwCiAjZGVmaW5lIFBJVF9DSDIJCQkweDQyCiAKKyNkZWZpbmUgUElUX0xBVENICUxBVENICisKIGV4dGVybiByYXdfc3BpbmxvY2tfdCBpODI1M19sb2NrOwogCiBleHRlcm4gc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZ2xvYmFsX2Nsb2NrX2V2ZW50OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fYXBpYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fYXBpYy5oCmluZGV4IGM0YmQyNjcuLmE5N2EyNDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb19hcGljLmgKQEAgLTE1MCw3ICsxNTAsNyBAQAogZXh0ZXJuIHZvaWQgaW9hcGljX2FuZF9nc2lfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIGlvYXBpY19pbnNlcnRfcmVzb3VyY2VzKHZvaWQpOwogCi1pbnQgaW9fYXBpY19zZXR1cF9pcnFfcGluKHVuc2lnbmVkIGludCBpcnEsIGludCBub2RlLCBzdHJ1Y3QgaW9fYXBpY19pcnFfYXR0ciAqYXR0cik7CitpbnQgaW9fYXBpY19zZXR1cF9pcnFfcGluX29uY2UodW5zaWduZWQgaW50IGlycSwgaW50IG5vZGUsIHN0cnVjdCBpb19hcGljX2lycV9hdHRyICphdHRyKTsKIAogZXh0ZXJuIHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5ICoqYWxsb2NfaW9hcGljX2VudHJpZXModm9pZCk7CiBleHRlcm4gdm9pZCBmcmVlX2lvYXBpY19lbnRyaWVzKHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5ICoqaW9hcGljX2VudHJpZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vanVtcF9sYWJlbC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vanVtcF9sYWJlbC5oCmluZGV4IDU3NGRiYzIuLmEzMmIxOGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2p1bXBfbGFiZWwuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9qdW1wX2xhYmVsLmgKQEAgLTUsMjAgKzUsMjUgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL25vcHMuaD4KKyNpbmNsdWRlIDxhc20vYXNtLmg+CiAKICNkZWZpbmUgSlVNUF9MQUJFTF9OT1BfU0laRSA1CiAKLSMgZGVmaW5lIEpVTVBfTEFCRUxfSU5JVElBTF9OT1AgIi5ieXRlIDB4ZTkgXG5cdCAubG9uZyAwXG5cdCIKKyNkZWZpbmUgSlVNUF9MQUJFTF9JTklUSUFMX05PUCAiLmJ5dGUgMHhlOSBcblx0IC5sb25nIDBcblx0IgogCi0jIGRlZmluZSBKVU1QX0xBQkVMKGtleSwgbGFiZWwpCQkJCQlcCi0JZG8gewkJCQkJCQlcCi0JCWFzbSBnb3RvKCIxOiIJCQkJCVwKLQkJCUpVTVBfTEFCRUxfSU5JVElBTF9OT1AJCQlcCi0JCQkiLnB1c2hzZWN0aW9uIF9fanVtcF90YWJsZSwgIFwiYXdcIiBcblx0IlwKLQkJCV9BU01fUFRSICIxYiwgJWxbIiAjbGFiZWwgIl0sICVjMCBcblx0IiBcCi0JCQkiLnBvcHNlY3Rpb24gXG5cdCIJCQlcCi0JCQk6IDogICJpIiAoa2V5KSA6ICA6IGxhYmVsKTsJCVwKLQl9IHdoaWxlICgwKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGFyY2hfc3RhdGljX2JyYW5jaChzdHJ1Y3QganVtcF9sYWJlbF9rZXkgKmtleSkKK3sKKwlhc20gZ290bygiMToiCisJCUpVTVBfTEFCRUxfSU5JVElBTF9OT1AKKwkJIi5wdXNoc2VjdGlvbiBfX2p1bXBfdGFibGUsICBcImF3XCIgXG5cdCIKKwkJX0FTTV9BTElHTiAiXG5cdCIKKwkJX0FTTV9QVFIgIjFiLCAlbFtsX3llc10sICVjMCBcblx0IgorCQkiLnBvcHNlY3Rpb24gXG5cdCIKKwkJOiA6ICAiaSIgKGtleSkgOiA6IGxfeWVzKTsKKwlyZXR1cm4gZmFsc2U7CitsX3llczoKKwlyZXR1cm4gdHJ1ZTsKK30KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tY2UuaAppbmRleCBlYjE2ZTk0Li4wMjE5NzlhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tY2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tY2UuaApAQCAtMTQyLDggKzE0Miw2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX3A1X21jZSh2b2lkKSB7fQogI2VuZGlmCiAKLWV4dGVybiB2b2lkICgqeDg2X21jZV9kZWNvZGVfY2FsbGJhY2spKHN0cnVjdCBtY2UgKm0pOwotCiB2b2lkIG1jZV9zZXR1cChzdHJ1Y3QgbWNlICptKTsKIHZvaWQgbWNlX2xvZyhzdHJ1Y3QgbWNlICptKTsKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3Qgc3lzX2RldmljZSwgbWNlX2Rldik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXpvbmVfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tem9uZV8zMi5oCmluZGV4IDkxZGY3YzUuLjVlODNhNDEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tem9uZV8zMi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tem9uZV8zMi5oCkBAIC0xMywzMSArMTMsMTEgQEAKICNkZWZpbmUgTk9ERV9EQVRBKG5pZCkJKG5vZGVfZGF0YVtuaWRdKQogCiAjaW5jbHVkZSA8YXNtL251bWFxLmg+Ci0vKiBzdW1taXQgb3IgZ2VuZXJpYyBhcmNoICovCi0jaW5jbHVkZSA8YXNtL3NyYXQuaD4KLQotZXh0ZXJuIGludCBnZXRfbWVtY2ZnX251bWFfZmxhdCh2b2lkKTsKLS8qCi0gKiBUaGlzIGFsbG93cyBhbnkgb25lIE5VTUEgYXJjaGl0ZWN0dXJlIHRvIGJlIGNvbXBpbGVkCi0gKiBmb3IsIGFuZCBzdGlsbCBmYWxsIGJhY2sgdG8gdGhlIGZsYXQgZnVuY3Rpb24gaWYgaXQKLSAqIGZhaWxzLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X21lbWNmZ19udW1hKHZvaWQpCi17Ci0KLQlpZiAoZ2V0X21lbWNmZ19udW1hcSgpKQotCQlyZXR1cm47Ci0JaWYgKGdldF9tZW1jZmdfZnJvbV9zcmF0KCkpCi0JCXJldHVybjsKLQlnZXRfbWVtY2ZnX251bWFfZmxhdCgpOwotfQogCiBleHRlcm4gdm9pZCByZXN1bWVfbWFwX251bWFfa3ZhKHBnZF90ICpwZ2QpOwogCiAjZWxzZSAvKiAhQ09ORklHX05VTUEgKi8KIAotI2RlZmluZSBnZXRfbWVtY2ZnX251bWEgZ2V0X21lbWNmZ19udW1hX2ZsYXQKLQogc3RhdGljIGlubGluZSB2b2lkIHJlc3VtZV9tYXBfbnVtYV9rdmEocGdkX3QgKnBnZCkge30KIAogI2VuZGlmIC8qIENPTkZJR19OVU1BICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXpvbmVfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tem9uZV82NC5oCmluZGV4IDI4OGI5NmYuLmIzZjg4ZDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tem9uZV82NC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tem9uZV82NC5oCkBAIC00LDM2ICs0LDEzIEBACiAjaWZuZGVmIF9BU01fWDg2X01NWk9ORV82NF9ICiAjZGVmaW5lIF9BU01fWDg2X01NWk9ORV82NF9ICiAKLQogI2lmZGVmIENPTkZJR19OVU1BCiAKICNpbmNsdWRlIDxsaW51eC9tbWRlYnVnLmg+Ci0KICNpbmNsdWRlIDxhc20vc21wLmg+CiAKLS8qIFNpbXBsZSBwZXJmZWN0IGhhc2ggdG8gbWFwIHBoeXNpY2FsIGFkZHJlc3NlcyB0byBub2RlIG51bWJlcnMgKi8KLXN0cnVjdCBtZW1ub2RlIHsKLQlpbnQgc2hpZnQ7Ci0JdW5zaWduZWQgaW50IG1hcHNpemU7Ci0JczE2ICptYXA7Ci0JczE2IGVtYmVkZGVkX21hcFs2NCAtIDhdOwotfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7IC8qIHRvdGFsIHNpemUgPSAxMjggYnl0ZXMgKi8KLWV4dGVybiBzdHJ1Y3QgbWVtbm9kZSBtZW1ub2RlOwotI2RlZmluZSBtZW1ub2RlX3NoaWZ0IG1lbW5vZGUuc2hpZnQKLSNkZWZpbmUgbWVtbm9kZW1hcCBtZW1ub2RlLm1hcAotI2RlZmluZSBtZW1ub2RlbWFwc2l6ZSBtZW1ub2RlLm1hcHNpemUKLQogZXh0ZXJuIHN0cnVjdCBwZ2xpc3RfZGF0YSAqbm9kZV9kYXRhW107CiAKLXN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygocHVyZSkpIGludCBwaHlzX3RvX25pZCh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JdW5zaWduZWQgbmlkOwotCVZJUlRVQUxfQlVHX09OKCFtZW1ub2RlbWFwKTsKLQluaWQgPSBtZW1ub2RlbWFwW2FkZHIgPj4gbWVtbm9kZV9zaGlmdF07Ci0JVklSVFVBTF9CVUdfT04obmlkID49IE1BWF9OVU1OT0RFUyB8fCAhbm9kZV9kYXRhW25pZF0pOwotCXJldHVybiBuaWQ7Ci19Ci0KICNkZWZpbmUgTk9ERV9EQVRBKG5pZCkJCShub2RlX2RhdGFbbmlkXSkKIAogI2RlZmluZSBub2RlX3N0YXJ0X3BmbihuaWQpCShOT0RFX0RBVEEobmlkKS0+bm9kZV9zdGFydF9wZm4pCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tb2R1bGUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21vZHVsZS5oCmluZGV4IDY3NzYzYzUuLjllYWU3NzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21vZHVsZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21vZHVsZS5oCkBAIC0zNSw3ICszNSw3IEBACiAjZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiSzcgIgogI2VsaWYgZGVmaW5lZCBDT05GSUdfTUs4CiAjZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiSzggIgotI2VsaWYgZGVmaW5lZCBDT05GSUdfWDg2X0VMQU4KKyNlbGlmIGRlZmluZWQgQ09ORklHX01FTEFOCiAjZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiRUxBTiAiCiAjZWxpZiBkZWZpbmVkIENPTkZJR19NQ1JVU09FCiAjZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiQ1JVU09FICIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL25vcHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL25vcHMuaAppbmRleCBhZjc4ODQ5Li40MDViNDAzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ub3BzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbm9wcy5oCkBAIC0xLDcgKzEsMTMgQEAKICNpZm5kZWYgX0FTTV9YODZfTk9QU19ICiAjZGVmaW5lIF9BU01fWDg2X05PUFNfSAogCi0vKiBEZWZpbmUgbm9wcyBmb3IgdXNlIHdpdGggYWx0ZXJuYXRpdmUoKSAqLworLyoKKyAqIERlZmluZSBub3BzIGZvciB1c2Ugd2l0aCBhbHRlcm5hdGl2ZSgpIGFuZCBmb3IgdHJhY2luZy4KKyAqCisgKiAqX05PUDVfQVRPTUlDIG11c3QgYmUgYSBzaW5nbGUgaW5zdHJ1Y3Rpb24uCisgKi8KKworI2RlZmluZSBOT1BfRFNfUFJFRklYIDB4M2UKIAogLyogZ2VuZXJpYyB2ZXJzaW9ucyBmcm9tIGdhcwogICAgMTogbm9wCkBAIC0xMywxNCArMTksMTUgQEAKICAgIDY6IGxlYWwgMHgwMDAwMDAwMCglZXNpKSwlZXNpCiAgICA3OiBsZWFsIDB4MDAwMDAwMDAoLCVlc2ksMSksJWVzaQogKi8KLSNkZWZpbmUgR0VORVJJQ19OT1AxICIuYnl0ZSAweDkwXG4iCi0jZGVmaW5lIEdFTkVSSUNfTk9QMiAiLmJ5dGUgMHg4OSwweGY2XG4iCi0jZGVmaW5lIEdFTkVSSUNfTk9QMyAiLmJ5dGUgMHg4ZCwweDc2LDB4MDBcbiIKLSNkZWZpbmUgR0VORVJJQ19OT1A0ICIuYnl0ZSAweDhkLDB4NzQsMHgyNiwweDAwXG4iCi0jZGVmaW5lIEdFTkVSSUNfTk9QNSBHRU5FUklDX05PUDEgR0VORVJJQ19OT1A0Ci0jZGVmaW5lIEdFTkVSSUNfTk9QNiAiLmJ5dGUgMHg4ZCwweGI2LDB4MDAsMHgwMCwweDAwLDB4MDBcbiIKLSNkZWZpbmUgR0VORVJJQ19OT1A3ICIuYnl0ZSAweDhkLDB4YjQsMHgyNiwweDAwLDB4MDAsMHgwMCwweDAwXG4iCi0jZGVmaW5lIEdFTkVSSUNfTk9QOCBHRU5FUklDX05PUDEgR0VORVJJQ19OT1A3CisjZGVmaW5lIEdFTkVSSUNfTk9QMSAweDkwCisjZGVmaW5lIEdFTkVSSUNfTk9QMiAweDg5LDB4ZjYKKyNkZWZpbmUgR0VORVJJQ19OT1AzIDB4OGQsMHg3NiwweDAwCisjZGVmaW5lIEdFTkVSSUNfTk9QNCAweDhkLDB4NzQsMHgyNiwweDAwCisjZGVmaW5lIEdFTkVSSUNfTk9QNSBHRU5FUklDX05PUDEsR0VORVJJQ19OT1A0CisjZGVmaW5lIEdFTkVSSUNfTk9QNiAweDhkLDB4YjYsMHgwMCwweDAwLDB4MDAsMHgwMAorI2RlZmluZSBHRU5FUklDX05PUDcgMHg4ZCwweGI0LDB4MjYsMHgwMCwweDAwLDB4MDAsMHgwMAorI2RlZmluZSBHRU5FUklDX05PUDggR0VORVJJQ19OT1AxLEdFTkVSSUNfTk9QNworI2RlZmluZSBHRU5FUklDX05PUDVfQVRPTUlDIE5PUF9EU19QUkVGSVgsR0VORVJJQ19OT1A0CiAKIC8qIE9wdGVyb24gNjRiaXQgbm9wcwogICAgMTogbm9wCkBAIC0yOSwxMyArMzYsMTQgQEAKICAgIDQ6IG9zcCBvc3Agb3NwIG5vcAogKi8KICNkZWZpbmUgSzhfTk9QMSBHRU5FUklDX05PUDEKLSNkZWZpbmUgSzhfTk9QMgkiLmJ5dGUgMHg2NiwweDkwXG4iCi0jZGVmaW5lIEs4X05PUDMJIi5ieXRlIDB4NjYsMHg2NiwweDkwXG4iCi0jZGVmaW5lIEs4X05PUDQJIi5ieXRlIDB4NjYsMHg2NiwweDY2LDB4OTBcbiIKLSNkZWZpbmUgSzhfTk9QNQlLOF9OT1AzIEs4X05PUDIKLSNkZWZpbmUgSzhfTk9QNglLOF9OT1AzIEs4X05PUDMKLSNkZWZpbmUgSzhfTk9QNwlLOF9OT1A0IEs4X05PUDMKLSNkZWZpbmUgSzhfTk9QOAlLOF9OT1A0IEs4X05PUDQKKyNkZWZpbmUgSzhfTk9QMgkweDY2LEs4X05PUDEKKyNkZWZpbmUgSzhfTk9QMwkweDY2LEs4X05PUDIKKyNkZWZpbmUgSzhfTk9QNAkweDY2LEs4X05PUDMKKyNkZWZpbmUgSzhfTk9QNQlLOF9OT1AzLEs4X05PUDIKKyNkZWZpbmUgSzhfTk9QNglLOF9OT1AzLEs4X05PUDMKKyNkZWZpbmUgSzhfTk9QNwlLOF9OT1A0LEs4X05PUDMKKyNkZWZpbmUgSzhfTk9QOAlLOF9OT1A0LEs4X05PUDQKKyNkZWZpbmUgSzhfTk9QNV9BVE9NSUMgMHg2NixLOF9OT1A0CiAKIC8qIEs3IG5vcHMKICAgIHVzZXMgZWF4IGRlcGVuZGVuY2llcyAoYXJiaXRyYXJ5IGNob2ljZSkKQEAgLTQ3LDEzICs1NSwxNCBAQAogICAgNzogbGVhbCAweDAwMDAwMDAwKCwlZWF4LDEpLCVlYXgKICovCiAjZGVmaW5lIEs3X05PUDEJR0VORVJJQ19OT1AxCi0jZGVmaW5lIEs3X05PUDIJIi5ieXRlIDB4OGIsMHhjMFxuIgotI2RlZmluZSBLN19OT1AzCSIuYnl0ZSAweDhkLDB4MDQsMHgyMFxuIgotI2RlZmluZSBLN19OT1A0CSIuYnl0ZSAweDhkLDB4NDQsMHgyMCwweDAwXG4iCi0jZGVmaW5lIEs3X05PUDUJSzdfTk9QNCBBU01fTk9QMQotI2RlZmluZSBLN19OT1A2CSIuYnl0ZSAweDhkLDB4ODAsMCwwLDAsMFxuIgotI2RlZmluZSBLN19OT1A3CSIuYnl0ZSAweDhELDB4MDQsMHgwNSwwLDAsMCwwXG4iCi0jZGVmaW5lIEs3X05PUDgJSzdfTk9QNyBBU01fTk9QMQorI2RlZmluZSBLN19OT1AyCTB4OGIsMHhjMAorI2RlZmluZSBLN19OT1AzCTB4OGQsMHgwNCwweDIwCisjZGVmaW5lIEs3X05PUDQJMHg4ZCwweDQ0LDB4MjAsMHgwMAorI2RlZmluZSBLN19OT1A1CUs3X05PUDQsSzdfTk9QMQorI2RlZmluZSBLN19OT1A2CTB4OGQsMHg4MCwwLDAsMCwwCisjZGVmaW5lIEs3X05PUDcJMHg4RCwweDA0LDB4MDUsMCwwLDAsMAorI2RlZmluZSBLN19OT1A4CUs3X05PUDcsSzdfTk9QMQorI2RlZmluZSBLN19OT1A1X0FUT01JQyBOT1BfRFNfUFJFRklYLEs3X05PUDQKIAogLyogUDYgbm9wcwogICAgdXNlcyBlYXggZGVwZW5kZW5jaWVzIChJbnRlbC1yZWNvbW1lbmRlZCBjaG9pY2UpCkBAIC02OSw1MiArNzgsNjUgQEAKIAlUaGVyZSBpcyBrZXJuZWwgY29kZSB0aGF0IGRlcGVuZHMgb24gdGhpcy4KICovCiAjZGVmaW5lIFA2X05PUDEJR0VORVJJQ19OT1AxCi0jZGVmaW5lIFA2X05PUDIJIi5ieXRlIDB4NjYsMHg5MFxuIgotI2RlZmluZSBQNl9OT1AzCSIuYnl0ZSAweDBmLDB4MWYsMHgwMFxuIgotI2RlZmluZSBQNl9OT1A0CSIuYnl0ZSAweDBmLDB4MWYsMHg0MCwwXG4iCi0jZGVmaW5lIFA2X05PUDUJIi5ieXRlIDB4MGYsMHgxZiwweDQ0LDB4MDAsMFxuIgotI2RlZmluZSBQNl9OT1A2CSIuYnl0ZSAweDY2LDB4MGYsMHgxZiwweDQ0LDB4MDAsMFxuIgotI2RlZmluZSBQNl9OT1A3CSIuYnl0ZSAweDBmLDB4MWYsMHg4MCwwLDAsMCwwXG4iCi0jZGVmaW5lIFA2X05PUDgJIi5ieXRlIDB4MGYsMHgxZiwweDg0LDB4MDAsMCwwLDAsMFxuIgorI2RlZmluZSBQNl9OT1AyCTB4NjYsMHg5MAorI2RlZmluZSBQNl9OT1AzCTB4MGYsMHgxZiwweDAwCisjZGVmaW5lIFA2X05PUDQJMHgwZiwweDFmLDB4NDAsMAorI2RlZmluZSBQNl9OT1A1CTB4MGYsMHgxZiwweDQ0LDB4MDAsMAorI2RlZmluZSBQNl9OT1A2CTB4NjYsMHgwZiwweDFmLDB4NDQsMHgwMCwwCisjZGVmaW5lIFA2X05PUDcJMHgwZiwweDFmLDB4ODAsMCwwLDAsMAorI2RlZmluZSBQNl9OT1A4CTB4MGYsMHgxZiwweDg0LDB4MDAsMCwwLDAsMAorI2RlZmluZSBQNl9OT1A1X0FUT01JQyBQNl9OT1A1CisKKyNkZWZpbmUgX0FTTV9NS19OT1AoeCkgIi5ieXRlICIgX19zdHJpbmdpZnkoeCkgIlxuIgogCiAjaWYgZGVmaW5lZChDT05GSUdfTUs3KQotI2RlZmluZSBBU01fTk9QMSBLN19OT1AxCi0jZGVmaW5lIEFTTV9OT1AyIEs3X05PUDIKLSNkZWZpbmUgQVNNX05PUDMgSzdfTk9QMwotI2RlZmluZSBBU01fTk9QNCBLN19OT1A0Ci0jZGVmaW5lIEFTTV9OT1A1IEs3X05PUDUKLSNkZWZpbmUgQVNNX05PUDYgSzdfTk9QNgotI2RlZmluZSBBU01fTk9QNyBLN19OT1A3Ci0jZGVmaW5lIEFTTV9OT1A4IEs3X05PUDgKKyNkZWZpbmUgQVNNX05PUDEgX0FTTV9NS19OT1AoSzdfTk9QMSkKKyNkZWZpbmUgQVNNX05PUDIgX0FTTV9NS19OT1AoSzdfTk9QMikKKyNkZWZpbmUgQVNNX05PUDMgX0FTTV9NS19OT1AoSzdfTk9QMykKKyNkZWZpbmUgQVNNX05PUDQgX0FTTV9NS19OT1AoSzdfTk9QNCkKKyNkZWZpbmUgQVNNX05PUDUgX0FTTV9NS19OT1AoSzdfTk9QNSkKKyNkZWZpbmUgQVNNX05PUDYgX0FTTV9NS19OT1AoSzdfTk9QNikKKyNkZWZpbmUgQVNNX05PUDcgX0FTTV9NS19OT1AoSzdfTk9QNykKKyNkZWZpbmUgQVNNX05PUDggX0FTTV9NS19OT1AoSzdfTk9QOCkKKyNkZWZpbmUgQVNNX05PUDVfQVRPTUlDIF9BU01fTUtfTk9QKEs3X05PUDVfQVRPTUlDKQogI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2X1A2X05PUCkKLSNkZWZpbmUgQVNNX05PUDEgUDZfTk9QMQotI2RlZmluZSBBU01fTk9QMiBQNl9OT1AyCi0jZGVmaW5lIEFTTV9OT1AzIFA2X05PUDMKLSNkZWZpbmUgQVNNX05PUDQgUDZfTk9QNAotI2RlZmluZSBBU01fTk9QNSBQNl9OT1A1Ci0jZGVmaW5lIEFTTV9OT1A2IFA2X05PUDYKLSNkZWZpbmUgQVNNX05PUDcgUDZfTk9QNwotI2RlZmluZSBBU01fTk9QOCBQNl9OT1A4CisjZGVmaW5lIEFTTV9OT1AxIF9BU01fTUtfTk9QKFA2X05PUDEpCisjZGVmaW5lIEFTTV9OT1AyIF9BU01fTUtfTk9QKFA2X05PUDIpCisjZGVmaW5lIEFTTV9OT1AzIF9BU01fTUtfTk9QKFA2X05PUDMpCisjZGVmaW5lIEFTTV9OT1A0IF9BU01fTUtfTk9QKFA2X05PUDQpCisjZGVmaW5lIEFTTV9OT1A1IF9BU01fTUtfTk9QKFA2X05PUDUpCisjZGVmaW5lIEFTTV9OT1A2IF9BU01fTUtfTk9QKFA2X05PUDYpCisjZGVmaW5lIEFTTV9OT1A3IF9BU01fTUtfTk9QKFA2X05PUDcpCisjZGVmaW5lIEFTTV9OT1A4IF9BU01fTUtfTk9QKFA2X05PUDgpCisjZGVmaW5lIEFTTV9OT1A1X0FUT01JQyBfQVNNX01LX05PUChQNl9OT1A1X0FUT01JQykKICNlbGlmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKLSNkZWZpbmUgQVNNX05PUDEgSzhfTk9QMQotI2RlZmluZSBBU01fTk9QMiBLOF9OT1AyCi0jZGVmaW5lIEFTTV9OT1AzIEs4X05PUDMKLSNkZWZpbmUgQVNNX05PUDQgSzhfTk9QNAotI2RlZmluZSBBU01fTk9QNSBLOF9OT1A1Ci0jZGVmaW5lIEFTTV9OT1A2IEs4X05PUDYKLSNkZWZpbmUgQVNNX05PUDcgSzhfTk9QNwotI2RlZmluZSBBU01fTk9QOCBLOF9OT1A4CisjZGVmaW5lIEFTTV9OT1AxIF9BU01fTUtfTk9QKEs4X05PUDEpCisjZGVmaW5lIEFTTV9OT1AyIF9BU01fTUtfTk9QKEs4X05PUDIpCisjZGVmaW5lIEFTTV9OT1AzIF9BU01fTUtfTk9QKEs4X05PUDMpCisjZGVmaW5lIEFTTV9OT1A0IF9BU01fTUtfTk9QKEs4X05PUDQpCisjZGVmaW5lIEFTTV9OT1A1IF9BU01fTUtfTk9QKEs4X05PUDUpCisjZGVmaW5lIEFTTV9OT1A2IF9BU01fTUtfTk9QKEs4X05PUDYpCisjZGVmaW5lIEFTTV9OT1A3IF9BU01fTUtfTk9QKEs4X05PUDcpCisjZGVmaW5lIEFTTV9OT1A4IF9BU01fTUtfTk9QKEs4X05PUDgpCisjZGVmaW5lIEFTTV9OT1A1X0FUT01JQyBfQVNNX01LX05PUChLOF9OT1A1X0FUT01JQykKICNlbHNlCi0jZGVmaW5lIEFTTV9OT1AxIEdFTkVSSUNfTk9QMQotI2RlZmluZSBBU01fTk9QMiBHRU5FUklDX05PUDIKLSNkZWZpbmUgQVNNX05PUDMgR0VORVJJQ19OT1AzCi0jZGVmaW5lIEFTTV9OT1A0IEdFTkVSSUNfTk9QNAotI2RlZmluZSBBU01fTk9QNSBHRU5FUklDX05PUDUKLSNkZWZpbmUgQVNNX05PUDYgR0VORVJJQ19OT1A2Ci0jZGVmaW5lIEFTTV9OT1A3IEdFTkVSSUNfTk9QNwotI2RlZmluZSBBU01fTk9QOCBHRU5FUklDX05PUDgKKyNkZWZpbmUgQVNNX05PUDEgX0FTTV9NS19OT1AoR0VORVJJQ19OT1AxKQorI2RlZmluZSBBU01fTk9QMiBfQVNNX01LX05PUChHRU5FUklDX05PUDIpCisjZGVmaW5lIEFTTV9OT1AzIF9BU01fTUtfTk9QKEdFTkVSSUNfTk9QMykKKyNkZWZpbmUgQVNNX05PUDQgX0FTTV9NS19OT1AoR0VORVJJQ19OT1A0KQorI2RlZmluZSBBU01fTk9QNSBfQVNNX01LX05PUChHRU5FUklDX05PUDUpCisjZGVmaW5lIEFTTV9OT1A2IF9BU01fTUtfTk9QKEdFTkVSSUNfTk9QNikKKyNkZWZpbmUgQVNNX05PUDcgX0FTTV9NS19OT1AoR0VORVJJQ19OT1A3KQorI2RlZmluZSBBU01fTk9QOCBfQVNNX01LX05PUChHRU5FUklDX05PUDgpCisjZGVmaW5lIEFTTV9OT1A1X0FUT01JQyBfQVNNX01LX05PUChHRU5FUklDX05PUDVfQVRPTUlDKQogI2VuZGlmCiAKICNkZWZpbmUgQVNNX05PUF9NQVggOAorI2RlZmluZSBOT1BfQVRPTUlDNSAoQVNNX05PUF9NQVgrMSkJLyogRW50cnkgZm9yIHRoZSA1LWJ5dGUgYXRvbWljIE5PUCAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBjb25zdCAqaWRlYWxfbm9wczsKK2V4dGVybiB2b2lkIGFyY2hfaW5pdF9pZGVhbF9ub3BzKHZvaWQpOworI2VuZGlmCiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9OT1BTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWEuaAppbmRleCAzZDRkYWI0Li5iZmFjZDJjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYS5oCkBAIC0xLDEyICsxLDI0IEBACiAjaWZuZGVmIF9BU01fWDg2X05VTUFfSAogI2RlZmluZSBfQVNNX1g4Nl9OVU1BX0gKIAorI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+CisKICNpbmNsdWRlIDxhc20vdG9wb2xvZ3kuaD4KICNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgogCiAjaWZkZWYgQ09ORklHX05VTUEKIAogI2RlZmluZSBOUl9OT0RFX01FTUJMS1MJCShNQVhfTlVNTk9ERVMqMikKKyNkZWZpbmUgWk9ORV9BTElHTiAoMVVMIDw8IChNQVhfT1JERVIrUEFHRV9TSElGVCkpCisKKy8qCisgKiBUb28gc21hbGwgbm9kZSBzaXplcyBtYXkgY29uZnVzZSB0aGUgVk0gYmFkbHkuIFVzdWFsbHkgdGhleQorICogcmVzdWx0IGZyb20gQklPUyBidWdzLiBTbyBkb250IHJlY29nbml6ZSBub2RlcyBhcyBzdGFuZGFsb25lCisgKiBOVU1BIGVudGl0aWVzIHRoYXQgaGF2ZSBsZXNzIHRoYW4gdGhpcyBhbW91bnQgb2YgUkFNIGxpc3RlZDoKKyAqLworI2RlZmluZSBOT0RFX01JTl9TSVpFICg0KjEwMjQqMTAyNCkKKworZXh0ZXJuIGludCBudW1hX29mZjsKIAogLyoKICAqIF9fYXBpY2lkX3RvX25vZGVbXSBzdG9yZXMgdGhlIHJhdyBtYXBwaW5nIGJldHdlZW4gcGh5c2ljYWwgYXBpY2lkIGFuZApAQCAtMTcsMTUgKzI5LDI3IEBACiAgKiBudW1hX2NwdV9ub2RlKCkuCiAgKi8KIGV4dGVybiBzMTYgX19hcGljaWRfdG9fbm9kZVtNQVhfTE9DQUxfQVBJQ107CitleHRlcm4gbm9kZW1hc2tfdCBudW1hX25vZGVzX3BhcnNlZCBfX2luaXRkYXRhOworCitleHRlcm4gaW50IF9faW5pdCBudW1hX2FkZF9tZW1ibGsoaW50IG5vZGVpZCwgdTY0IHN0YXJ0LCB1NjQgZW5kKTsKK2V4dGVybiB2b2lkIF9faW5pdCBudW1hX3NldF9kaXN0YW5jZShpbnQgZnJvbSwgaW50IHRvLCBpbnQgZGlzdGFuY2UpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2FwaWNpZF90b19ub2RlKGludCBhcGljaWQsIHMxNiBub2RlKQogewogCV9fYXBpY2lkX3RvX25vZGVbYXBpY2lkXSA9IG5vZGU7CiB9CisKK2V4dGVybiBpbnQgX19jcHVpbml0IG51bWFfY3B1X25vZGUoaW50IGNwdSk7CisKICNlbHNlCS8qIENPTkZJR19OVU1BICovCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2FwaWNpZF90b19ub2RlKGludCBhcGljaWQsIHMxNiBub2RlKQogewogfQorCitzdGF0aWMgaW5saW5lIGludCBudW1hX2NwdV9ub2RlKGludCBjcHUpCit7CisJcmV0dXJuIE5VTUFfTk9fTk9ERTsKK30KICNlbmRpZgkvKiBDT05GSUdfTlVNQSAqLwogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgpAQCAtMzcsMjEgKzYxLDI1IEBACiAjaWZkZWYgQ09ORklHX05VTUEKIGV4dGVybiB2b2lkIF9fY3B1aW5pdCBudW1hX3NldF9ub2RlKGludCBjcHUsIGludCBub2RlKTsKIGV4dGVybiB2b2lkIF9fY3B1aW5pdCBudW1hX2NsZWFyX25vZGUoaW50IGNwdSk7Ci1leHRlcm4gdm9pZCBfX2luaXQgbnVtYV9pbml0X2FycmF5KHZvaWQpOwogZXh0ZXJuIHZvaWQgX19pbml0IGluaXRfY3B1X3RvX25vZGUodm9pZCk7CiBleHRlcm4gdm9pZCBfX2NwdWluaXQgbnVtYV9hZGRfY3B1KGludCBjcHUpOwogZXh0ZXJuIHZvaWQgX19jcHVpbml0IG51bWFfcmVtb3ZlX2NwdShpbnQgY3B1KTsKICNlbHNlCS8qIENPTkZJR19OVU1BICovCiBzdGF0aWMgaW5saW5lIHZvaWQgbnVtYV9zZXRfbm9kZShpbnQgY3B1LCBpbnQgbm9kZSkJeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgbnVtYV9jbGVhcl9ub2RlKGludCBjcHUpCQl7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBudW1hX2luaXRfYXJyYXkodm9pZCkJCXsgfQogc3RhdGljIGlubGluZSB2b2lkIGluaXRfY3B1X3RvX25vZGUodm9pZCkJCXsgfQogc3RhdGljIGlubGluZSB2b2lkIG51bWFfYWRkX2NwdShpbnQgY3B1KQkJeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgbnVtYV9yZW1vdmVfY3B1KGludCBjcHUpCQl7IH0KICNlbmRpZgkvKiBDT05GSUdfTlVNQSAqLwogCiAjaWZkZWYgQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUwotc3RydWN0IGNwdW1hc2sgX19jcHVpbml0ICpkZWJ1Z19jcHVtYXNrX3NldF9jcHUoaW50IGNwdSwgaW50IGVuYWJsZSk7Cit2b2lkIGRlYnVnX2NwdW1hc2tfc2V0X2NwdShpbnQgY3B1LCBpbnQgbm9kZSwgYm9vbCBlbmFibGUpOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfTlVNQV9FTVUKKyNkZWZpbmUgRkFLRV9OT0RFX01JTl9TSVpFCSgodTY0KTMyIDw8IDIwKQorI2RlZmluZSBGQUtFX05PREVfTUlOX0hBU0hfTUFTSwkofihGQUtFX05PREVfTUlOX1NJWkUgLSAxVUwpKQordm9pZCBudW1hX2VtdV9jbWRsaW5lKGNoYXIgKik7CisjZW5kaWYgLyogQ09ORklHX05VTUFfRU1VICovCisKICNlbmRpZgkvKiBfQVNNX1g4Nl9OVU1BX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFfMzIuaAppbmRleCBjNmJlZWQxLi5lN2Q2YjgyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hXzMyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYV8zMi5oCkBAIC0xLDE2ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9YODZfTlVNQV8zMl9ICiAjZGVmaW5lIF9BU01fWDg2X05VTUFfMzJfSAogCi1leHRlcm4gaW50IG51bWFfb2ZmOwotCi1leHRlcm4gaW50IHB4bV90b19uaWQoaW50IHB4bSk7Ci0KLSNpZmRlZiBDT05GSUdfTlVNQQotZXh0ZXJuIGludCBfX2NwdWluaXQgbnVtYV9jcHVfbm9kZShpbnQgY3B1KTsKLSNlbHNlCS8qIENPTkZJR19OVU1BICovCi1zdGF0aWMgaW5saW5lIGludCBudW1hX2NwdV9ub2RlKGludCBjcHUpCQl7IHJldHVybiBOVU1BX05PX05PREU7IH0KLSNlbmRpZgkvKiBDT05GSUdfTlVNQSAqLwotCiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KIGV4dGVybiB2b2lkIHNldF9oaWdobWVtX3BhZ2VzX2luaXQodm9pZCk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYV82NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYV82NC5oCmluZGV4IDM0NGViMTcuLjBjMDVmN2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFfNjQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hXzY0LmgKQEAgLTEsNDIgKzEsNiBAQAogI2lmbmRlZiBfQVNNX1g4Nl9OVU1BXzY0X0gKICNkZWZpbmUgX0FTTV9YODZfTlVNQV82NF9ICiAKLSNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgotCi1zdHJ1Y3QgYm9vdG5vZGUgewotCXU2NCBzdGFydDsKLQl1NjQgZW5kOwotfTsKLQotI2RlZmluZSBaT05FX0FMSUdOICgxVUwgPDwgKE1BWF9PUkRFUitQQUdFX1NISUZUKSkKLQotZXh0ZXJuIGludCBudW1hX29mZjsKLQogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbnVtYV9mcmVlX2FsbF9ib290bWVtKHZvaWQpOwotZXh0ZXJuIHZvaWQgc2V0dXBfbm9kZV9ib290bWVtKGludCBub2RlaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBlbmQpOwotCi0jaWZkZWYgQ09ORklHX05VTUEKLS8qCi0gKiBUb28gc21hbGwgbm9kZSBzaXplcyBtYXkgY29uZnVzZSB0aGUgVk0gYmFkbHkuIFVzdWFsbHkgdGhleQotICogcmVzdWx0IGZyb20gQklPUyBidWdzLiBTbyBkb250IHJlY29nbml6ZSBub2RlcyBhcyBzdGFuZGFsb25lCi0gKiBOVU1BIGVudGl0aWVzIHRoYXQgaGF2ZSBsZXNzIHRoYW4gdGhpcyBhbW91bnQgb2YgUkFNIGxpc3RlZDoKLSAqLwotI2RlZmluZSBOT0RFX01JTl9TSVpFICg0KjEwMjQqMTAyNCkKLQotZXh0ZXJuIG5vZGVtYXNrX3QgbnVtYV9ub2Rlc19wYXJzZWQgX19pbml0ZGF0YTsKLQotZXh0ZXJuIGludCBfX2NwdWluaXQgbnVtYV9jcHVfbm9kZShpbnQgY3B1KTsKLWV4dGVybiBpbnQgX19pbml0IG51bWFfYWRkX21lbWJsayhpbnQgbm9kZWlkLCB1NjQgc3RhcnQsIHU2NCBlbmQpOwotZXh0ZXJuIHZvaWQgX19pbml0IG51bWFfc2V0X2Rpc3RhbmNlKGludCBmcm9tLCBpbnQgdG8sIGludCBkaXN0YW5jZSk7Ci0KLSNpZmRlZiBDT05GSUdfTlVNQV9FTVUKLSNkZWZpbmUgRkFLRV9OT0RFX01JTl9TSVpFCSgodTY0KTMyIDw8IDIwKQotI2RlZmluZSBGQUtFX05PREVfTUlOX0hBU0hfTUFTSwkofihGQUtFX05PREVfTUlOX1NJWkUgLSAxVUwpKQotdm9pZCBudW1hX2VtdV9jbWRsaW5lKGNoYXIgKik7Ci0jZW5kaWYgLyogQ09ORklHX05VTUFfRU1VICovCi0jZWxzZQotc3RhdGljIGlubGluZSBpbnQgbnVtYV9jcHVfbm9kZShpbnQgY3B1KQkJeyByZXR1cm4gTlVNQV9OT19OT0RFOyB9Ci0jZW5kaWYKIAogI2VuZGlmIC8qIF9BU01fWDg2X05VTUFfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYXEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxLmgKaW5kZXggMzdjNTE2NS4uYzNiM2MzMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYXEuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hcS5oCkBAIC0yOSw3ICsyOSw3IEBACiAjaWZkZWYgQ09ORklHX1g4Nl9OVU1BUQogCiBleHRlcm4gaW50IGZvdW5kX251bWFxOwotZXh0ZXJuIGludCBnZXRfbWVtY2ZnX251bWFxKHZvaWQpOworZXh0ZXJuIGludCBudW1hcV9udW1hX2luaXQodm9pZCk7CiBleHRlcm4gaW50IHBjaV9udW1hcV9pbml0KHZvaWQpOwogCiBleHRlcm4gdm9pZCAqeHF1YWRfcG9ydGlvOwpAQCAtMTY2LDExICsxNjYsNiBAQAogCiB2b2lkIG51bWFxX3RzY19kaXNhYmxlKHZvaWQpOwogCi0jZWxzZQotc3RhdGljIGlubGluZSBpbnQgZ2V0X21lbWNmZ19udW1hcSh2b2lkKQotewotCXJldHVybiAwOwotfQogI2VuZGlmIC8qIENPTkZJR19YODZfTlVNQVEgKi8KICNlbmRpZiAvKiBfQVNNX1g4Nl9OVU1BUV9IICovCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL29scGNfb2Z3LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9vbHBjX29mdy5oCmluZGV4IGM1ZDNhNWEuLjI0NDg3NzEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL29scGNfb2Z3LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vb2xwY19vZncuaApAQCAtMjYsMTUgKzI2LDEyIEBACiAvKiBjaGVjayBpZiBPRlcgd2FzIGRldGVjdGVkIGR1cmluZyBib290ICovCiBleHRlcm4gYm9vbCBvbHBjX29md19wcmVzZW50KHZvaWQpOwogCitleHRlcm4gdm9pZCBvbHBjX2R0X2J1aWxkX2RldmljZXRyZWUodm9pZCk7CisKICNlbHNlIC8qICFDT05GSUdfT0xQQyAqLwogc3RhdGljIGlubGluZSB2b2lkIG9scGNfb2Z3X2RldGVjdCh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9vbHBjX29md19wZ2Qodm9pZCkgeyB9Ci0jZW5kaWYgLyogIUNPTkZJR19PTFBDICovCi0KLSNpZmRlZiBDT05GSUdfT0ZfUFJPTVRSRUUKLWV4dGVybiB2b2lkIG9scGNfZHRfYnVpbGRfZGV2aWNldHJlZSh2b2lkKTsKLSNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgb2xwY19kdF9idWlsZF9kZXZpY2V0cmVlKHZvaWQpIHsgfQotI2VuZGlmCisjZW5kaWYgLyogIUNPTkZJR19PTFBDICovCiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9PTFBDX09GV19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmNwdS5oCmluZGV4IGQ0NzViNDMuLjUzMjc4YjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmNwdS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmNwdS5oCkBAIC01MTcsNyArNTE3LDcgQEAKIAl0eXBlb2YobzIpIF9fbzIgPSBvMjsJCQkJCQlcCiAJdHlwZW9mKG8yKSBfX24yID0gbjI7CQkJCQkJXAogCXR5cGVvZihvMikgX19kdW1teTsJCQkJCQlcCi0JYWx0ZXJuYXRpdmVfaW8oImNhbGwgdGhpc19jcHVfY21weGNoZzE2Yl9lbXVcblx0IiBQNl9OT1A0LAlcCisJYWx0ZXJuYXRpdmVfaW8oImNhbGwgdGhpc19jcHVfY21weGNoZzE2Yl9lbXVcblx0IiBBU01fTk9QNCwJXAogCQkgICAgICAgImNtcHhjaGcxNmIgIiBfX3BlcmNwdV9wcmVmaXggIiglJXJzaSlcblx0c2V0eiAlMFxuXHQiLAlcCiAJCSAgICAgICBYODZfRkVBVFVSRV9DWDE2LAkJCQlcCiAJCSAgICAgICBBU01fT1VUUFVUMigiPWEiKF9fcmV0KSwgIj1kIihfX2R1bW15KSksCQlcCkBAIC01NDIsNiArNTQyLDMzIEBACiAJb2xkX187CQkJCQkJCQlcCiB9KQogCitzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCB4ODZfdGhpc19jcHVfY29uc3RhbnRfdGVzdF9iaXQodW5zaWduZWQgaW50IG5yLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBfX3BlcmNwdSAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIF9fcGVyY3B1ICphID0gKHVuc2lnbmVkIGxvbmcgKilhZGRyICsgbnIgLyBCSVRTX1BFUl9MT05HOworCisJcmV0dXJuICgoMVVMIDw8IChuciAlIEJJVFNfUEVSX0xPTkcpKSAmIHBlcmNwdV9yZWFkKCphKSkgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgeDg2X3RoaXNfY3B1X3ZhcmlhYmxlX3Rlc3RfYml0KGludCBuciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgX19wZXJjcHUgKmFkZHIpCit7CisJaW50IG9sZGJpdDsKKworCWFzbSB2b2xhdGlsZSgiYnQgIl9fcGVyY3B1X2FyZygyKSIsJTFcblx0IgorCQkJInNiYiAlMCwlMCIKKwkJCTogIj1yIiAob2xkYml0KQorCQkJOiAibSIgKCoodW5zaWduZWQgbG9uZyAqKWFkZHIpLCAiSXIiIChucikpOworCisJcmV0dXJuIG9sZGJpdDsKK30KKworI2RlZmluZSB4ODZfdGhpc19jcHVfdGVzdF9iaXQobnIsIGFkZHIpCQkJXAorCShfX2J1aWx0aW5fY29uc3RhbnRfcCgobnIpKQkJCVwKKwkgPyB4ODZfdGhpc19jcHVfY29uc3RhbnRfdGVzdF9iaXQoKG5yKSwgKGFkZHIpKQlcCisJIDogeDg2X3RoaXNfY3B1X3ZhcmlhYmxlX3Rlc3RfYml0KChuciksIChhZGRyKSkpCisKKwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BlcmNwdS5oPgogCiAvKiBXZSBjYW4gdXNlIHRoaXMgZGlyZWN0bHkgZm9yIGxvY2FsIENQVSAoZmFzdGVyKS4gKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfdHlwZXMuaAppbmRleCA3ZGI3NzIzLi5kNTYxODdjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oCkBAIC0yOTksNiArMjk5LDcgQEAKIC8qIEluc3RhbGwgYSBwdGUgZm9yIGEgcGFydGljdWxhciB2YWRkciBpbiBrZXJuZWwgc3BhY2UuICovCiB2b2lkIHNldF9wdGVfdmFkZHIodW5zaWduZWQgbG9uZyB2YWRkciwgcHRlX3QgcHRlKTsKIAorZXh0ZXJuIHZvaWQgbmF0aXZlX3BhZ2V0YWJsZV9yZXNlcnZlKHU2NCBzdGFydCwgdTY0IGVuZCk7CiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogZXh0ZXJuIHZvaWQgbmF0aXZlX3BhZ2V0YWJsZV9zZXR1cF9zdGFydChwZ2RfdCAqYmFzZSk7CiBleHRlcm4gdm9pZCBuYXRpdmVfcGFnZXRhYmxlX3NldHVwX2RvbmUocGdkX3QgKmJhc2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvYmVfcm9tcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvYmVfcm9tcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NTBhMGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9iZV9yb21zLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIF9QUk9CRV9ST01TX0hfCisjZGVmaW5lIF9QUk9CRV9ST01TX0hfCitzdHJ1Y3QgcGNpX2RldjsKKworZXh0ZXJuIHZvaWQgX19pb21lbSAqcGNpX21hcF9iaW9zcm9tKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKK2V4dGVybiB2b2lkIHBjaV91bm1hcF9iaW9zcm9tKHZvaWQgX19pb21lbSAqcm9tKTsKK2V4dGVybiBzaXplX3QgcGNpX2Jpb3Nyb21fc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci1mbGFncy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLWZsYWdzLmgKaW5kZXggYTg5OGEyYi4uNTlhYjRkZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLWZsYWdzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLWZsYWdzLmgKQEAgLTYwLDYgKzYwLDcgQEAKICNkZWZpbmUgWDg2X0NSNF9PU1hNTUVYQ1BUIDB4MDAwMDA0MDAgLyogZW5hYmxlIHVubWFza2VkIFNTRSBleGNlcHRpb25zICovCiAjZGVmaW5lIFg4Nl9DUjRfVk1YRQkweDAwMDAyMDAwIC8qIGVuYWJsZSBWTVggdmlydHVhbGl6YXRpb24gKi8KICNkZWZpbmUgWDg2X0NSNF9PU1hTQVZFIDB4MDAwNDAwMDAgLyogZW5hYmxlIHhzYXZlIGFuZCB4cmVzdG9yZSAqLworI2RlZmluZSBYODZfQ1I0X1NNRVAJMHgwMDEwMDAwMCAvKiBlbmFibGUgU01FUCBzdXBwb3J0ICovCiAKIC8qCiAgKiB4ODYtNjQgVGFzayBQcmlvcml0eSBSZWdpc3RlciwgQ1I4CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXR1cC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0dXAuaAppbmRleCBkYjhhYTE5Li45NzU2NTUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXR1cC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldHVwLmgKQEAgLTg4LDcgKzg4LDcgQEAKICAqIGV4ZWN1dGFibGUuKQogICovCiAjZGVmaW5lIFJFU0VSVkVfQlJLKG5hbWUsc3opCQkJCQkJXAotCXN0YXRpYyB2b2lkIF9fc2VjdGlvbiguZGlzY2FyZC50ZXh0KSBfX3VzZWQJCQlcCisJc3RhdGljIHZvaWQgX19zZWN0aW9uKC5kaXNjYXJkLnRleHQpIF9fdXNlZCBub3RyYWNlCQlcCiAJX19icmtfcmVzZXJ2YXRpb25fZm5fIyNuYW1lIyNfXyh2b2lkKSB7CQkJCVwKIAkJYXNtIHZvbGF0aWxlICgJCQkJCQlcCiAJCQkiLnB1c2hzZWN0aW9uIC5icmtfcmVzZXJ2YXRpb24sXCJhd1wiLEBub2JpdHM7IiBcCkBAIC0xMDQsMTAgKzEwNCwxMCBAQAogCXR5cGUgKm5hbWU7CQkJCQlcCiAJUkVTRVJWRV9CUksobmFtZSwgc2l6ZW9mKHR5cGUpICogZW50cmllcykKIAorZXh0ZXJuIHZvaWQgcHJvYmVfcm9tcyh2b2lkKTsKICNpZmRlZiBfX2kzODZfXwogCiB2b2lkIF9faW5pdCBpMzg2X3N0YXJ0X2tlcm5lbCh2b2lkKTsKLWV4dGVybiB2b2lkIHByb2JlX3JvbXModm9pZCk7CiAKICNlbHNlCiB2b2lkIF9faW5pdCB4ODZfNjRfc3RhcnRfa2VybmVsKGNoYXIgKnJlYWxfbW9kZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zcmF0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zcmF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1MDhkNjMuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3JhdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqIFNvbWUgb2YgdGhlIGNvZGUgaW4gdGhpcyBmaWxlIGhhcyBiZWVuIGdsZWFuZWQgZnJvbSB0aGUgNjQgYml0Ci0gKiBkaXNjb250aWdtZW0gc3VwcG9ydCBjb2RlIGJhc2UuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAyLCBJQk0gQ29ycC4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCi0gKiBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQotICogZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICoKLSAqIFNlbmQgZmVlZGJhY2sgdG8gUGF0IEdhdWdoZW4gPGdvbmVAdXMuaWJtLmNvbT4KLSAqLwotCi0jaWZuZGVmIF9BU01fWDg2X1NSQVRfSAotI2RlZmluZSBfQVNNX1g4Nl9TUkFUX0gKLQotI2lmZGVmIENPTkZJR19BQ1BJX05VTUEKLWV4dGVybiBpbnQgZ2V0X21lbWNmZ19mcm9tX3NyYXQodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSBpbnQgZ2V0X21lbWNmZ19mcm9tX3NyYXQodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0jZW5kaWYgLyogX0FTTV9YODZfU1JBVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmgKaW5kZXggZDdlODljOC4uNzBiYmUzOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaApAQCAtMzcsOSArMzcsNiBAQAogLyogR2VuZXJpYyBzdGFjayB0cmFjZXIgd2l0aCBjYWxsYmFja3MgKi8KIAogc3RydWN0IHN0YWNrdHJhY2Vfb3BzIHsKLQl2b2lkICgqd2FybmluZykodm9pZCAqZGF0YSwgY2hhciAqbXNnKTsKLQkvKiBtc2cgbXVzdCBjb250YWluICVzIGZvciB0aGUgc3ltYm9sICovCi0Jdm9pZCAoKndhcm5pbmdfc3ltYm9sKSh2b2lkICpkYXRhLCBjaGFyICptc2csIHVuc2lnbmVkIGxvbmcgc3ltYm9sKTsKIAl2b2lkICgqYWRkcmVzcykodm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgcmVsaWFibGUpOwogCS8qIE9uIG5lZ2F0aXZlIHJldHVybiBzdG9wIGR1bXBpbmcgKi8KIAlpbnQgKCpzdGFjaykodm9pZCAqZGF0YSwgY2hhciAqbmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbS5oCmluZGV4IDEyNTY5ZTYuLmMyZmYyYTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC0zMDMsMjQgKzMwMyw4MSBAQAogI2lmZGVmIENPTkZJR19QQVJBVklSVAogI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgogI2Vsc2UKLSNkZWZpbmUgcmVhZF9jcjAoKQkobmF0aXZlX3JlYWRfY3IwKCkpCi0jZGVmaW5lIHdyaXRlX2NyMCh4KQkobmF0aXZlX3dyaXRlX2NyMCh4KSkKLSNkZWZpbmUgcmVhZF9jcjIoKQkobmF0aXZlX3JlYWRfY3IyKCkpCi0jZGVmaW5lIHdyaXRlX2NyMih4KQkobmF0aXZlX3dyaXRlX2NyMih4KSkKLSNkZWZpbmUgcmVhZF9jcjMoKQkobmF0aXZlX3JlYWRfY3IzKCkpCi0jZGVmaW5lIHdyaXRlX2NyMyh4KQkobmF0aXZlX3dyaXRlX2NyMyh4KSkKLSNkZWZpbmUgcmVhZF9jcjQoKQkobmF0aXZlX3JlYWRfY3I0KCkpCi0jZGVmaW5lIHJlYWRfY3I0X3NhZmUoKQkobmF0aXZlX3JlYWRfY3I0X3NhZmUoKSkKLSNkZWZpbmUgd3JpdGVfY3I0KHgpCShuYXRpdmVfd3JpdGVfY3I0KHgpKQotI2RlZmluZSB3YmludmQoKQkobmF0aXZlX3diaW52ZCgpKQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmVhZF9jcjAodm9pZCkKK3sKKwlyZXR1cm4gbmF0aXZlX3JlYWRfY3IwKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9jcjAodW5zaWduZWQgbG9uZyB4KQoreworCW5hdGl2ZV93cml0ZV9jcjAoeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZWFkX2NyMih2b2lkKQoreworCXJldHVybiBuYXRpdmVfcmVhZF9jcjIoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2NyMih1bnNpZ25lZCBsb25nIHgpCit7CisJbmF0aXZlX3dyaXRlX2NyMih4KTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlYWRfY3IzKHZvaWQpCit7CisJcmV0dXJuIG5hdGl2ZV9yZWFkX2NyMygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfY3IzKHVuc2lnbmVkIGxvbmcgeCkKK3sKKwluYXRpdmVfd3JpdGVfY3IzKHgpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmVhZF9jcjQodm9pZCkKK3sKKwlyZXR1cm4gbmF0aXZlX3JlYWRfY3I0KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZWFkX2NyNF9zYWZlKHZvaWQpCit7CisJcmV0dXJuIG5hdGl2ZV9yZWFkX2NyNF9zYWZlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9jcjQodW5zaWduZWQgbG9uZyB4KQoreworCW5hdGl2ZV93cml0ZV9jcjQoeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YmludmQodm9pZCkKK3sKKwluYXRpdmVfd2JpbnZkKCk7Cit9CisKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci0jZGVmaW5lIHJlYWRfY3I4KCkJKG5hdGl2ZV9yZWFkX2NyOCgpKQotI2RlZmluZSB3cml0ZV9jcjgoeCkJKG5hdGl2ZV93cml0ZV9jcjgoeCkpCi0jZGVmaW5lIGxvYWRfZ3NfaW5kZXggICBuYXRpdmVfbG9hZF9nc19pbmRleAorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmVhZF9jcjgodm9pZCkKK3sKKwlyZXR1cm4gbmF0aXZlX3JlYWRfY3I4KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9jcjgodW5zaWduZWQgbG9uZyB4KQoreworCW5hdGl2ZV93cml0ZV9jcjgoeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2FkX2dzX2luZGV4KHVuc2lnbmVkIHNlbGVjdG9yKQoreworCW5hdGl2ZV9sb2FkX2dzX2luZGV4KHNlbGVjdG9yKTsKK30KKwogI2VuZGlmCiAKIC8qIENsZWFyIHRoZSAnVFMnIGJpdCAqLwotI2RlZmluZSBjbHRzKCkJCShuYXRpdmVfY2x0cygpKQorc3RhdGljIGlubGluZSB2b2lkIGNsdHModm9pZCkKK3sKKwluYXRpdmVfY2x0cygpOworfQogCiAjZW5kaWYvKiBDT05GSUdfUEFSQVZJUlQgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKaW5kZXggOTEwYTcwOC4uYzAwNjkyNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90b3BvbG9neS5oCkBAIC05MywxOSArOTMsMTEgQEAKICNkZWZpbmUgcGNpYnVzX3RvX25vZGUoYnVzKSBfX3BjaWJ1c190b19ub2RlKGJ1cykKIAogI2lmZGVmIENPTkZJR19YODZfMzIKLWV4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfc3RhcnRfcGZuW107Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX2VuZF9wZm5bXTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcmVtYXBfc2l6ZVtdOwotI2RlZmluZSBub2RlX2hhc19vbmxpbmVfbWVtKG5pZCkgKG5vZGVfc3RhcnRfcGZuW25pZF0gIT0gbm9kZV9lbmRfcGZuW25pZF0pCi0KICMgZGVmaW5lIFNEX0NBQ0hFX05JQ0VfVFJJRVMJMQogIyBkZWZpbmUgU0RfSURMRV9JRFgJCTEKLQogI2Vsc2UKLQogIyBkZWZpbmUgU0RfQ0FDSEVfTklDRV9UUklFUwkyCiAjIGRlZmluZSBTRF9JRExFX0lEWAkJMgotCiAjZW5kaWYKIAogLyogc2NoZWRfZG9tYWlucyBTRF9OT0RFX0lOSVQgZm9yIE5VTUEgbWFjaGluZXMgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAppbmRleCBhYmQzZTBlLi45OWRkZDE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCkBAIC02LDcgKzYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgotI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CkBAIC00Miw3ICs0MSw3IEBACiAgKiBSZXR1cm5zIDAgaWYgdGhlIHJhbmdlIGlzIHZhbGlkLCBub256ZXJvIG90aGVyd2lzZS4KICAqCiAgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXN0OgotICogKHUzMylhZGRyICsgKHUzMylzaXplID49ICh1MzMpY3VycmVudC0+YWRkcl9saW1pdC5zZWcgKHU2NSBmb3IgeDg2XzY0KQorICogKHUzMylhZGRyICsgKHUzMylzaXplID4gKHUzMyljdXJyZW50LT5hZGRyX2xpbWl0LnNlZyAodTY1IGZvciB4ODZfNjQpCiAgKgogICogVGhpcyBuZWVkcyAzMy1iaXQgKDY1LWJpdCBmb3IgeDg2XzY0KSBhcml0aG1ldGljLiBXZSBoYXZlIGEgY2FycnkuLi4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc18zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc18zMi5oCmluZGV4IDA4OGQwOWYuLjU2NmU4MDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfMzIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzMyLmgKQEAgLTYsNyArNiw2IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxhc20vYXNtLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaAppbmRleCAzMTY3MDhkLi4xYzY2ZDMwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCkBAIC02LDcgKzYsNiBAQAogICovCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8bGludXgvbG9ja2RlcC5oPgogI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgogI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF8zMi5oCmluZGV4IGE3NTVlZjUuLmZiNmE2MjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF8zMi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF8zMi5oCkBAIC0zNTAsMTAgKzM1MCwxMSBAQAogI2RlZmluZSBfX05SX29wZW5fYnlfaGFuZGxlX2F0ICAzNDIKICNkZWZpbmUgX19OUl9jbG9ja19hZGp0aW1lCTM0MwogI2RlZmluZSBfX05SX3N5bmNmcyAgICAgICAgICAgICAzNDQKKyNkZWZpbmUgX19OUl9zZW5kbW1zZwkJMzQ1CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNkZWZpbmUgTlJfc3lzY2FsbHMgMzQ1CisjZGVmaW5lIE5SX3N5c2NhbGxzIDM0NgogCiAjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCmluZGV4IDE2MGZhNzYuLjc5ZjkwZWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCkBAIC02NzcsNiArNjc3LDggQEAKIF9fU1lTQ0FMTChfX05SX2Nsb2NrX2FkanRpbWUsIHN5c19jbG9ja19hZGp0aW1lKQogI2RlZmluZSBfX05SX3N5bmNmcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA2CiBfX1NZU0NBTEwoX19OUl9zeW5jZnMsIHN5c19zeW5jZnMpCisjZGVmaW5lIF9fTlJfc2VuZG1tc2cJCQkJMzA3CitfX1NZU0NBTEwoX19OUl9zZW5kbW1zZywgc3lzX3NlbmRtbXNnKQogCiAjaWZuZGVmIF9fTk9fU1RVQlMKICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2JhdS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfYmF1LmgKaW5kZXggM2UwOTRhZi4uMTMwZjFlZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfYmF1LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfYmF1LmgKQEAgLTk0LDYgKzk0LDggQEAKIC8qIGFmdGVyIHRoaXMgIyBjb25zZWN1dGl2ZSBzdWNjZXNzZXMsIGJ1bXAgdXAgdGhlIHRocm90dGxlIGlmIGl0IHdhcyBsb3dlcmVkICovCiAjZGVmaW5lIENPTVBMRVRFX1RIUkVTSE9MRCA1CiAKKyNkZWZpbmUgVVZfTEJfU1VCTk9ERUlEIDB4MTAKKwogLyoKICAqIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBkZXN0aW5hdGlvbiBzaWRlIHBheWxvYWQgcXVldWUKICAqLwpAQCAtMTI0LDcgKzEyNiw3IEBACiAgKiBUaGUgZGlzdHJpYnV0aW9uIHNwZWNpZmljYXRpb24gKDMyIGJ5dGVzKSBpcyBpbnRlcnByZXRlZCBhcyBhIDI1Ni1iaXQKICAqIGRpc3RyaWJ1dGlvbiB2ZWN0b3IuIEFkamFjZW50IGJpdHMgY29ycmVzcG9uZCB0byBjb25zZWN1dGl2ZSBldmVuIG51bWJlcmVkCiAgKiBub2RlSURzLiBUaGUgcmVzdWx0IG9mIGFkZGluZyB0aGUgaW5kZXggb2YgYSBnaXZlbiBiaXQgdG8gdGhlIDE1LWJpdAotICogJ2Jhc2VfZGVzdF9ub2RlaWQnIGZpZWxkIG9mIHRoZSBoZWFkZXIgY29ycmVzcG9uZHMgdG8gdGhlCisgKiAnYmFzZV9kZXN0X25hc2lkJyBmaWVsZCBvZiB0aGUgaGVhZGVyIGNvcnJlc3BvbmRzIHRvIHRoZQogICogZGVzdGluYXRpb24gbm9kZUlEIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHNwZWNpZmllZCBiaXQuCiAgKi8KIHN0cnVjdCBiYXVfdGFyZ2V0X3V2aHVibWFzayB7CkBAIC0xNzYsNyArMTc4LDcgQEAKIHN0cnVjdCBiYXVfbXNnX2hlYWRlciB7CiAJdW5zaWduZWQgaW50IGRlc3Rfc3Vibm9kZWlkOjY7CS8qIG11c3QgYmUgMHgxMCwgZm9yIHRoZSBMQiAqLwogCS8qIGJpdHMgNTowICovCi0JdW5zaWduZWQgaW50IGJhc2VfZGVzdF9ub2RlaWQ6MTU7IC8qIG5hc2lkIG9mIHRoZSAqLworCXVuc2lnbmVkIGludCBiYXNlX2Rlc3RfbmFzaWQ6MTU7IC8qIG5hc2lkIG9mIHRoZSAqLwogCS8qIGJpdHMgMjA6NiAqLwkJCSAgLyogZmlyc3QgYml0IGluIHV2aHViIG1hcCAqLwogCXVuc2lnbmVkIGludCBjb21tYW5kOjg7CS8qIG1lc3NhZ2UgdHlwZSAqLwogCS8qIGJpdHMgMjg6MjEgKi8KQEAgLTM3OCw2ICszODAsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGRfcmNhbmNlbGVkOyAvKiBudW1iZXIgb2YgbWVzc2FnZXMgY2FuY2VsZWQgYnkgcmVzZXRzICovCiB9OwogCitzdHJ1Y3QgaHViX2FuZF9wbm9kZSB7CisJc2hvcnQgdXZodWI7CisJc2hvcnQgcG5vZGU7Cit9OwogLyoKICAqIG9uZSBwZXItY3B1OyB0byBsb2NhdGUgdGhlIHNvZnR3YXJlIHRhYmxlcwogICovCkBAIC0zOTksMTAgKzQwNSwxMiBAQAogCWludCBiYXVkaXNhYmxlZDsKIAlpbnQgc2V0X2JhdV9vZmY7CiAJc2hvcnQgY3B1OworCXNob3J0IG9zbm9kZTsKIAlzaG9ydCB1dmh1Yl9jcHU7CiAJc2hvcnQgdXZodWI7CiAJc2hvcnQgY3B1c19pbl9zb2NrZXQ7CiAJc2hvcnQgY3B1c19pbl91dmh1YjsKKwlzaG9ydCBwYXJ0aXRpb25fYmFzZV9wbm9kZTsKIAl1bnNpZ25lZCBzaG9ydCBtZXNzYWdlX251bWJlcjsKIAl1bnNpZ25lZCBzaG9ydCB1dmh1Yl9xdWllc2NlOwogCXNob3J0IHNvY2tldF9hY2tub3dsZWRnZV9jb3VudFtERVNUX1FfU0laRV07CkBAIC00MjIsMTUgKzQzMCwxNiBAQAogCWludCBjb25nZXN0ZWRfcGVyaW9kOwogCWN5Y2xlc190IHBlcmlvZF90aW1lOwogCWxvbmcgcGVyaW9kX3JlcXVlc3RzOworCXN0cnVjdCBodWJfYW5kX3Bub2RlICp0YXJnZXRfaHViX2FuZF9wbm9kZTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IGJhdV91dmh1Yl9pc3NldChpbnQgdXZodWIsIHN0cnVjdCBiYXVfdGFyZ2V0X3V2aHVibWFzayAqZHN0cCkKIHsKIAlyZXR1cm4gY29uc3RhbnRfdGVzdF9iaXQodXZodWIsICZkc3RwLT5iaXRzWzBdKTsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBiYXVfdXZodWJfc2V0KGludCB1dmh1Yiwgc3RydWN0IGJhdV90YXJnZXRfdXZodWJtYXNrICpkc3RwKQorc3RhdGljIGlubGluZSB2b2lkIGJhdV91dmh1Yl9zZXQoaW50IHBub2RlLCBzdHJ1Y3QgYmF1X3RhcmdldF91dmh1Ym1hc2sgKmRzdHApCiB7Ci0JX19zZXRfYml0KHV2aHViLCAmZHN0cC0+Yml0c1swXSk7CisJX19zZXRfYml0KHBub2RlLCAmZHN0cC0+Yml0c1swXSk7CiB9CiBzdGF0aWMgaW5saW5lIHZvaWQgYmF1X3V2aHVic19jbGVhcihzdHJ1Y3QgYmF1X3RhcmdldF91dmh1Ym1hc2sgKmRzdHAsCiAJCQkJICAgIGludCBuYml0cykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKaW5kZXggYTUwMTc0MS4uNDI5ODAwMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKQEAgLTM5OCw2ICszOTgsOCBAQAogCXVuc2lnbmVkIHNob3J0CW5yX29ubGluZV9jcHVzOwogCXVuc2lnbmVkIHNob3J0CXBub2RlOwogCXNob3J0CQltZW1vcnlfbmlkOworCXNwaW5sb2NrX3QJbm1pX2xvY2s7CisJdW5zaWduZWQgbG9uZwlubWlfY291bnQ7CiB9OwogZXh0ZXJuIHN0cnVjdCB1dl9ibGFkZV9pbmZvICp1dl9ibGFkZV9pbmZvOwogZXh0ZXJuIHNob3J0ICp1dl9ub2RlX3RvX2JsYWRlOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfbW1ycy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfbW1ycy5oCmluZGV4IDIwY2FmZWEuLmY1YmI2NGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X21tcnMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9tbXJzLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogU0dJIFVWIE1NUiBkZWZpbml0aW9ucwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDExIFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqLwogCiAjaWZuZGVmIF9BU01fWDg2X1VWX1VWX01NUlNfSApAQCAtMTA5OSw1ICsxMDk5LDE5IEBACiAgICAgfSBzOwogfTsKIAorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVZIX1NDUkFUQ0g1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2RlZmluZSBVVkhfU0NSQVRDSDUgMHgyZDAyMDBVTAorI2RlZmluZSBVVkhfU0NSQVRDSDVfMzIgMHgwMDc3OAorCisjZGVmaW5lIFVWSF9TQ1JBVENINV9TQ1JBVENINV9TSEZUIDAKKyNkZWZpbmUgVVZIX1NDUkFUQ0g1X1NDUkFUQ0g1X01BU0sgMHhmZmZmZmZmZmZmZmZmZmZmVUwKK3VuaW9uIHV2aF9zY3JhdGNoNV91IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9zY3JhdGNoNV9zIHsKKwl1bnNpZ25lZCBsb25nCXNjcmF0Y2g1IDogNjQ7ICAvKiBSVywgVzFDUyAqLworICAgIH0gczsKK307CiAKICNlbmRpZiAvKiBfX0FTTV9VVl9NTVJTX1g4Nl9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oCmluZGV4IDY0M2ViZjIuLmQzZDg1OTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaApAQCAtNjgsNiArNjgsMTcgQEAKIH07CiAKIC8qKgorICogc3RydWN0IHg4Nl9pbml0X21hcHBpbmcgLSBwbGF0Zm9ybSBzcGVjaWZpYyBpbml0aWFsIGtlcm5lbCBwYWdldGFibGUgc2V0dXAKKyAqIEBwYWdldGFibGVfcmVzZXJ2ZToJcmVzZXJ2ZSBhIHJhbmdlIG9mIGFkZHJlc3NlcyBmb3Iga2VybmVsIHBhZ2V0YWJsZSB1c2FnZQorICoKKyAqIEZvciBtb3JlIGRldGFpbHMgb24gdGhlIHB1cnBvc2Ugb2YgdGhpcyBob29rLCBsb29rIGluCisgKiBpbml0X21lbW9yeV9tYXBwaW5nIGFuZCB0aGUgY29tbWl0IHRoYXQgYWRkZWQgaXQuCisgKi8KK3N0cnVjdCB4ODZfaW5pdF9tYXBwaW5nIHsKKwl2b2lkICgqcGFnZXRhYmxlX3Jlc2VydmUpKHU2NCBzdGFydCwgdTY0IGVuZCk7Cit9OworCisvKioKICAqIHN0cnVjdCB4ODZfaW5pdF9wYWdpbmcgLSBwbGF0Zm9ybSBzcGVjaWZpYyBwYWdpbmcgZnVuY3Rpb25zCiAgKiBAcGFnZXRhYmxlX3NldHVwX3N0YXJ0OglwbGF0Zm9ybSBzcGVjaWZpYyBwcmUgcGFnaW5nX2luaXQoKSBjYWxsCiAgKiBAcGFnZXRhYmxlX3NldHVwX2RvbmU6CXBsYXRmb3JtIHNwZWNpZmljIHBvc3QgcGFnaW5nX2luaXQoKSBjYWxsCkBAIC0xMjMsNiArMTM0LDcgQEAKIAlzdHJ1Y3QgeDg2X2luaXRfbXBwYXJzZQkJbXBwYXJzZTsKIAlzdHJ1Y3QgeDg2X2luaXRfaXJxcwkJaXJxczsKIAlzdHJ1Y3QgeDg2X2luaXRfb2VtCQlvZW07CisJc3RydWN0IHg4Nl9pbml0X21hcHBpbmcJCW1hcHBpbmc7CiAJc3RydWN0IHg4Nl9pbml0X3BhZ2luZwkJcGFnaW5nOwogCXN0cnVjdCB4ODZfaW5pdF90aW1lcnMJCXRpbWVyczsKIAlzdHJ1Y3QgeDg2X2luaXRfaW9tbXUJCWlvbW11OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL3BhZ2UuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9wYWdlLmgKaW5kZXggYzYxOTM0Zi4uNjRhNjE5ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL3BhZ2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vcGFnZS5oCkBAIC00Nyw4ICs0Nyw5IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBzZXRfcGh5c19yYW5nZV9pZGVudGl0eSh1bnNpZ25lZCBsb25nIHBmbl9zLAogCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGZuX2UpOwogCi1leHRlcm4gaW50IG0ycF9hZGRfb3ZlcnJpZGUodW5zaWduZWQgbG9uZyBtZm4sIHN0cnVjdCBwYWdlICpwYWdlKTsKLWV4dGVybiBpbnQgbTJwX3JlbW92ZV9vdmVycmlkZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CitleHRlcm4gaW50IG0ycF9hZGRfb3ZlcnJpZGUodW5zaWduZWQgbG9uZyBtZm4sIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJICAgIGJvb2wgY2xlYXJfcHRlKTsKK2V4dGVybiBpbnQgbTJwX3JlbW92ZV9vdmVycmlkZShzdHJ1Y3QgcGFnZSAqcGFnZSwgYm9vbCBjbGVhcl9wdGUpOwogZXh0ZXJuIHN0cnVjdCBwYWdlICptMnBfZmluZF9vdmVycmlkZSh1bnNpZ25lZCBsb25nIG1mbik7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBtMnBfZmluZF9vdmVycmlkZV9wZm4odW5zaWduZWQgbG9uZyBtZm4sIHVuc2lnbmVkIGxvbmcgcGZuKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL3BjaS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL3BjaS5oCmluZGV4IGFhODYyMDkuLjRmYmRhOWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9wY2kuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vcGNpLmgKQEAgLTE1LDEwICsxNSwyNiBAQAogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfWEVOX0RPTTApCiB2b2lkIF9faW5pdCB4ZW5fc2V0dXBfcGlycXModm9pZCk7CitpbnQgeGVuX2ZpbmRfZGV2aWNlX2RvbWFpbl9vd25lcihzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2ludCB4ZW5fcmVnaXN0ZXJfZGV2aWNlX2RvbWFpbl9vd25lcihzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1aW50MTZfdCBkb21haW4pOworaW50IHhlbl91bnJlZ2lzdGVyX2RldmljZV9kb21haW5fb3duZXIoc3RydWN0IHBjaV9kZXYgKmRldik7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCB4ZW5fc2V0dXBfcGlycXModm9pZCkKIHsKIH0KK3N0YXRpYyBpbmxpbmUgaW50IHhlbl9maW5kX2RldmljZV9kb21haW5fb3duZXIoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlyZXR1cm4gLTE7Cit9CitzdGF0aWMgaW5saW5lIGludCB4ZW5fcmVnaXN0ZXJfZGV2aWNlX2RvbWFpbl9vd25lcihzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkJICAgdWludDE2X3QgZG9tYWluKQoreworCXJldHVybiAtMTsKK30KK3N0YXRpYyBpbmxpbmUgaW50IHhlbl91bnJlZ2lzdGVyX2RldmljZV9kb21haW5fb3duZXIoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlyZXR1cm4gLTE7Cit9CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1BDSV9NU0kpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKaW5kZXggNzMzOGVmMi4uMjUwODA2NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQpAQCAtMzYsNyArMzYsNyBAQAogb2JqLXkJCQkrPSB0aW1lLm8gaW9wb3J0Lm8gbGR0Lm8gZHVtcHN0YWNrLm8KIG9iai15CQkJKz0gc2V0dXAubyB4ODZfaW5pdC5vIGk4MjU5Lm8gaXJxaW5pdC5vIGp1bXBfbGFiZWwubwogb2JqLSQoQ09ORklHX0lSUV9XT1JLKSAgKz0gaXJxX3dvcmsubwotb2JqLSQoQ09ORklHX1g4Nl8zMikJKz0gcHJvYmVfcm9tc18zMi5vCitvYmoteQkJCSs9IHByb2JlX3JvbXMubwogb2JqLSQoQ09ORklHX1g4Nl8zMikJKz0gc3lzX2kzODZfMzIubyBpMzg2X2tzeW1zXzMyLm8KIG9iai0kKENPTkZJR19YODZfNjQpCSs9IHN5c194ODZfNjQubyB4ODY2NF9rc3ltc182NC5vCiBvYmotJChDT05GSUdfWDg2XzY0KQkrPSBzeXNjYWxsXzY0Lm8gdnN5c2NhbGxfNjQubwpAQCAtMTE3LDcgKzExNyw3IEBACiBpZmVxICgkKENPTkZJR19YODZfNjQpLHkpCiAJb2JqLSQoQ09ORklHX0FVRElUKQkJKz0gYXVkaXRfNjQubwogCi0Jb2JqLSQoQ09ORklHX0dBUlRfSU9NTVUpCSs9IHBjaS1nYXJ0XzY0Lm8gYXBlcnR1cmVfNjQubworCW9iai0kKENPTkZJR19HQVJUX0lPTU1VKQkrPSBhbWRfZ2FydF82NC5vIGFwZXJ0dXJlXzY0Lm8KIAlvYmotJChDT05GSUdfQ0FMR0FSWV9JT01NVSkJKz0gcGNpLWNhbGdhcnlfNjQubyB0Y2VfNjQubwogCW9iai0kKENPTkZJR19BTURfSU9NTVUpCQkrPSBhbWRfaW9tbXVfaW5pdC5vIGFtZF9pb21tdS5vCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3NsZWVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9zbGVlcC5jCmluZGV4IGZmOTNiYzEuLjE4YTg1N2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3NsZWVwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvc2xlZXAuYwpAQCAtMTEyLDExICsxMTIsNiBAQAogI2lmZGVmIENPTkZJR19ISUJFUk5BVElPTgogCQlpZiAoc3RybmNtcChzdHIsICJzNF9ub2h3c2lnIiwgMTApID09IDApCiAJCQlhY3BpX25vX3M0X2h3X3NpZ25hdHVyZSgpOwotCQlpZiAoc3RybmNtcChzdHIsICJzNF9ub252cyIsIDgpID09IDApIHsKLQkJCXByX3dhcm5pbmcoIkFDUEk6IGFjcGlfc2xlZXA9czRfbm9udnMgaXMgZGVwcmVjYXRlZCwgIgotCQkJCQkicGxlYXNlIHVzZSBhY3BpX3NsZWVwPW5vbnZzIGluc3RlYWQiKTsKLQkJCWFjcGlfbnZzX25vc2F2ZSgpOwotCQl9CiAjZW5kaWYKIAkJaWYgKHN0cm5jbXAoc3RyLCAibm9udnMiLCA1KSA9PSAwKQogCQkJYWNwaV9udnNfbm9zYXZlKCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCmluZGV4IDRhMjM0NjcuLmE4MWYyZDUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCkBAIC02NywxNyArNjcsMzAgQEAKICNkZWZpbmUgRFBSSU5USyhmbXQsIGFyZ3MuLi4pIGlmIChkZWJ1Z19hbHRlcm5hdGl2ZSkgXAogCXByaW50ayhLRVJOX0RFQlVHIGZtdCwgYXJncykKIAorLyoKKyAqIEVhY2ggR0VORVJJQ19OT1BYIGlzIG9mIFggYnl0ZXMsIGFuZCBkZWZpbmVkIGFzIGFuIGFycmF5IG9mIGJ5dGVzCisgKiB0aGF0IGNvcnJlc3BvbmQgdG8gdGhhdCBub3AuIEdldHRpbmcgZnJvbSBvbmUgbm9wIHRvIHRoZSBuZXh0LCB3ZQorICogYWRkIHRvIHRoZSBhcnJheSB0aGUgb2Zmc2V0IHRoYXQgaXMgZXF1YWwgdG8gdGhlIHN1bSBvZiBhbGwgc2l6ZXMgb2YKKyAqIG5vcHMgcHJlY2VkaW5nIHRoZSBvbmUgd2UgYXJlIGFmdGVyLgorICoKKyAqIE5vdGU6IFRoZSBHRU5FUklDX05PUDVfQVRPTUlDIGlzIGF0IHRoZSBlbmQsIGFzIGl0IGJyZWFrcyB0aGUKKyAqIG5pY2Ugc3ltbWV0cnkgb2Ygc2l6ZXMgb2YgdGhlIHByZXZpb3VzIG5vcHMuCisgKi8KICNpZiBkZWZpbmVkKEdFTkVSSUNfTk9QMSkgJiYgIWRlZmluZWQoQ09ORklHX1g4Nl82NCkKLS8qIFVzZSBpbmxpbmUgYXNzZW1ibHkgdG8gZGVmaW5lIHRoaXMgYmVjYXVzZSB0aGUgbm9wcyBhcmUgZGVmaW5lZAotICAgYXMgaW5saW5lIGFzc2VtYmx5IHN0cmluZ3MgaW4gdGhlIGluY2x1ZGUgZmlsZXMgYW5kIHdlIGNhbm5vdAotICAgZ2V0IHRoZW0gZWFzaWx5IGludG8gc3RyaW5ncy4gKi8KLWFzbSgiXHQiIF9fc3RyaW5naWZ5KF9fSU5JVFJPREFUQV9PUl9NT0RVTEUpICJcbmludGVsbm9wczogIgotCUdFTkVSSUNfTk9QMSBHRU5FUklDX05PUDIgR0VORVJJQ19OT1AzIEdFTkVSSUNfTk9QNCBHRU5FUklDX05PUDUgR0VORVJJQ19OT1A2Ci0JR0VORVJJQ19OT1A3IEdFTkVSSUNfTk9QOAotICAgICJcdC5wcmV2aW91cyIpOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW50ZWxub3BzW107Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqY29uc3QgX19pbml0Y29uc3Rfb3JfbW9kdWxlCi1pbnRlbF9ub3BzW0FTTV9OT1BfTUFYKzFdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW50ZWxub3BzW10gPQoreworCUdFTkVSSUNfTk9QMSwKKwlHRU5FUklDX05PUDIsCisJR0VORVJJQ19OT1AzLAorCUdFTkVSSUNfTk9QNCwKKwlHRU5FUklDX05PUDUsCisJR0VORVJJQ19OT1A2LAorCUdFTkVSSUNfTk9QNywKKwlHRU5FUklDX05PUDgsCisJR0VORVJJQ19OT1A1X0FUT01JQworfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICogY29uc3QgaW50ZWxfbm9wc1tBU01fTk9QX01BWCsyXSA9Cit7CiAJTlVMTCwKIAlpbnRlbG5vcHMsCiAJaW50ZWxub3BzICsgMSwKQEAgLTg3LDE3ICsxMDAsMjUgQEAKIAlpbnRlbG5vcHMgKyAxICsgMiArIDMgKyA0ICsgNSwKIAlpbnRlbG5vcHMgKyAxICsgMiArIDMgKyA0ICsgNSArIDYsCiAJaW50ZWxub3BzICsgMSArIDIgKyAzICsgNCArIDUgKyA2ICsgNywKKwlpbnRlbG5vcHMgKyAxICsgMiArIDMgKyA0ICsgNSArIDYgKyA3ICsgOCwKIH07CiAjZW5kaWYKIAogI2lmZGVmIEs4X05PUDEKLWFzbSgiXHQiIF9fc3RyaW5naWZ5KF9fSU5JVFJPREFUQV9PUl9NT0RVTEUpICJcbms4bm9wczogIgotCUs4X05PUDEgSzhfTk9QMiBLOF9OT1AzIEs4X05PUDQgSzhfTk9QNSBLOF9OT1A2Ci0JSzhfTk9QNyBLOF9OT1A4Ci0gICAgIlx0LnByZXZpb3VzIik7Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBrOG5vcHNbXTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCBfX2luaXRjb25zdF9vcl9tb2R1bGUKLWs4X25vcHNbQVNNX05PUF9NQVgrMV0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrOG5vcHNbXSA9Cit7CisJSzhfTk9QMSwKKwlLOF9OT1AyLAorCUs4X05PUDMsCisJSzhfTk9QNCwKKwlLOF9OT1A1LAorCUs4X05PUDYsCisJSzhfTk9QNywKKwlLOF9OT1A4LAorCUs4X05PUDVfQVRPTUlDCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBjb25zdCBrOF9ub3BzW0FTTV9OT1BfTUFYKzJdID0KK3sKIAlOVUxMLAogCWs4bm9wcywKIAlrOG5vcHMgKyAxLApAQCAtMTA3LDE3ICsxMjgsMjUgQEAKIAlrOG5vcHMgKyAxICsgMiArIDMgKyA0ICsgNSwKIAlrOG5vcHMgKyAxICsgMiArIDMgKyA0ICsgNSArIDYsCiAJazhub3BzICsgMSArIDIgKyAzICsgNCArIDUgKyA2ICsgNywKKwlrOG5vcHMgKyAxICsgMiArIDMgKyA0ICsgNSArIDYgKyA3ICsgOCwKIH07CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoSzdfTk9QMSkgJiYgIWRlZmluZWQoQ09ORklHX1g4Nl82NCkKLWFzbSgiXHQiIF9fc3RyaW5naWZ5KF9fSU5JVFJPREFUQV9PUl9NT0RVTEUpICJcbms3bm9wczogIgotCUs3X05PUDEgSzdfTk9QMiBLN19OT1AzIEs3X05PUDQgSzdfTk9QNSBLN19OT1A2Ci0JSzdfTk9QNyBLN19OT1A4Ci0gICAgIlx0LnByZXZpb3VzIik7Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBrN25vcHNbXTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCBfX2luaXRjb25zdF9vcl9tb2R1bGUKLWs3X25vcHNbQVNNX05PUF9NQVgrMV0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrN25vcHNbXSA9Cit7CisJSzdfTk9QMSwKKwlLN19OT1AyLAorCUs3X05PUDMsCisJSzdfTk9QNCwKKwlLN19OT1A1LAorCUs3X05PUDYsCisJSzdfTk9QNywKKwlLN19OT1A4LAorCUs3X05PUDVfQVRPTUlDCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBjb25zdCBrN19ub3BzW0FTTV9OT1BfTUFYKzJdID0KK3sKIAlOVUxMLAogCWs3bm9wcywKIAlrN25vcHMgKyAxLApAQCAtMTI3LDE3ICsxNTYsMjUgQEAKIAlrN25vcHMgKyAxICsgMiArIDMgKyA0ICsgNSwKIAlrN25vcHMgKyAxICsgMiArIDMgKyA0ICsgNSArIDYsCiAJazdub3BzICsgMSArIDIgKyAzICsgNCArIDUgKyA2ICsgNywKKwlrN25vcHMgKyAxICsgMiArIDMgKyA0ICsgNSArIDYgKyA3ICsgOCwKIH07CiAjZW5kaWYKIAogI2lmZGVmIFA2X05PUDEKLWFzbSgiXHQiIF9fc3RyaW5naWZ5KF9fSU5JVFJPREFUQV9PUl9NT0RVTEUpICJcbnA2bm9wczogIgotCVA2X05PUDEgUDZfTk9QMiBQNl9OT1AzIFA2X05PUDQgUDZfTk9QNSBQNl9OT1A2Ci0JUDZfTk9QNyBQNl9OT1A4Ci0gICAgIlx0LnByZXZpb3VzIik7Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBwNm5vcHNbXTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCBfX2luaXRjb25zdF9vcl9tb2R1bGUKLXA2X25vcHNbQVNNX05PUF9NQVgrMV0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAgX19pbml0Y29uc3Rfb3JfbW9kdWxlIHA2bm9wc1tdID0KK3sKKwlQNl9OT1AxLAorCVA2X05PUDIsCisJUDZfTk9QMywKKwlQNl9OT1A0LAorCVA2X05PUDUsCisJUDZfTk9QNiwKKwlQNl9OT1A3LAorCVA2X05PUDgsCisJUDZfTk9QNV9BVE9NSUMKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqIGNvbnN0IHA2X25vcHNbQVNNX05PUF9NQVgrMl0gPQorewogCU5VTEwsCiAJcDZub3BzLAogCXA2bm9wcyArIDEsCkBAIC0xNDcsNDcgKzE4NCw2NSBAQAogCXA2bm9wcyArIDEgKyAyICsgMyArIDQgKyA1LAogCXA2bm9wcyArIDEgKyAyICsgMyArIDQgKyA1ICsgNiwKIAlwNm5vcHMgKyAxICsgMiArIDMgKyA0ICsgNSArIDYgKyA3LAorCXA2bm9wcyArIDEgKyAyICsgMyArIDQgKyA1ICsgNiArIDcgKyA4LAogfTsKICNlbmRpZgogCisvKiBJbml0aWFsaXplIHRoZXNlIHRvIGEgc2FmZSBkZWZhdWx0ICovCiAjaWZkZWYgQ09ORklHX1g4Nl82NAorY29uc3QgdW5zaWduZWQgY2hhciAqIGNvbnN0ICppZGVhbF9ub3BzID0gcDZfbm9wczsKKyNlbHNlCitjb25zdCB1bnNpZ25lZCBjaGFyICogY29uc3QgKmlkZWFsX25vcHMgPSBpbnRlbF9ub3BzOworI2VuZGlmCiAKLWV4dGVybiBjaGFyIF9fdnN5c2NhbGxfMDsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCAqX19pbml0X29yX21vZHVsZSBmaW5kX25vcF90YWJsZSh2b2lkKQordm9pZCBfX2luaXQgYXJjaF9pbml0X2lkZWFsX25vcHModm9pZCkKIHsKLQlpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwgJiYKLQkgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05PUEwpKQotCQlyZXR1cm4gcDZfbm9wczsKLQllbHNlCi0JCXJldHVybiBrOF9ub3BzOworCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yKSB7CisJY2FzZSBYODZfVkVORE9SX0lOVEVMOgorCQkvKgorCQkgKiBEdWUgdG8gYSBkZWNvZGVyIGltcGxlbWVudGF0aW9uIHF1aXJrLCBzb21lCisJCSAqIHNwZWNpZmljIEludGVsIENQVXMgYWN0dWFsbHkgcGVyZm9ybSBiZXR0ZXIgd2l0aAorCQkgKiB0aGUgIms4X25vcHMiIHRoYW4gd2l0aCB0aGUgU0RNLXJlY29tbWVuZGVkIE5PUHMuCisJCSAqLworCQlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gNiAmJgorCQkgICAgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPj0gMHgwZiAmJgorCQkgICAgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgIT0gMHgxYyAmJgorCQkgICAgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgIT0gMHgyNiAmJgorCQkgICAgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgIT0gMHgyNyAmJgorCQkgICAgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPCAweDMwKSB7CisJCQlpZGVhbF9ub3BzID0gazhfbm9wczsKKwkJfSBlbHNlIGlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTk9QTCkpIHsKKwkJCSAgIGlkZWFsX25vcHMgPSBwNl9ub3BzOworCQl9IGVsc2UgeworI2lmZGVmIENPTkZJR19YODZfNjQKKwkJCWlkZWFsX25vcHMgPSBrOF9ub3BzOworI2Vsc2UKKwkJCWlkZWFsX25vcHMgPSBpbnRlbF9ub3BzOworI2VuZGlmCisJCX0KKworCWRlZmF1bHQ6CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCQlpZGVhbF9ub3BzID0gazhfbm9wczsKKyNlbHNlCisJCWlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSzgpKQorCQkJaWRlYWxfbm9wcyA9IGs4X25vcHM7CisJCWVsc2UgaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9LNykpCisJCQlpZGVhbF9ub3BzID0gazdfbm9wczsKKwkJZWxzZQorCQkJaWRlYWxfbm9wcyA9IGludGVsX25vcHM7CisjZW5kaWYKKwl9CiB9CiAKLSNlbHNlIC8qIENPTkZJR19YODZfNjQgKi8KLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbnN0ICpfX2luaXRfb3JfbW9kdWxlIGZpbmRfbm9wX3RhYmxlKHZvaWQpCi17Ci0JaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9LOCkpCi0JCXJldHVybiBrOF9ub3BzOwotCWVsc2UgaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9LNykpCi0JCXJldHVybiBrN19ub3BzOwotCWVsc2UgaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9OT1BMKSkKLQkJcmV0dXJuIHA2X25vcHM7Ci0JZWxzZQotCQlyZXR1cm4gaW50ZWxfbm9wczsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KLQogLyogVXNlIHRoaXMgdG8gYWRkIG5vcHMgdG8gYSBidWZmZXIsIHRoZW4gdGV4dF9wb2tlIHRoZSB3aG9sZSBidWZmZXIuICovCiBzdGF0aWMgdm9pZCBfX2luaXRfb3JfbW9kdWxlIGFkZF9ub3BzKHZvaWQgKmluc25zLCB1bnNpZ25lZCBpbnQgbGVuKQogewotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbnN0ICpub3B0YWJsZSA9IGZpbmRfbm9wX3RhYmxlKCk7Ci0KIAl3aGlsZSAobGVuID4gMCkgewogCQl1bnNpZ25lZCBpbnQgbm9wbGVuID0gbGVuOwogCQlpZiAobm9wbGVuID4gQVNNX05PUF9NQVgpCiAJCQlub3BsZW4gPSBBU01fTk9QX01BWDsKLQkJbWVtY3B5KGluc25zLCBub3B0YWJsZVtub3BsZW5dLCBub3BsZW4pOworCQltZW1jcHkoaW5zbnMsIGlkZWFsX25vcHNbbm9wbGVuXSwgbm9wbGVuKTsKIAkJaW5zbnMgKz0gbm9wbGVuOwogCQlsZW4gLT0gbm9wbGVuOwogCX0KQEAgLTE5NSw2ICsyNTAsNyBAQAogCiBleHRlcm4gc3RydWN0IGFsdF9pbnN0ciBfX2FsdF9pbnN0cnVjdGlvbnNbXSwgX19hbHRfaW5zdHJ1Y3Rpb25zX2VuZFtdOwogZXh0ZXJuIHMzMiBfX3NtcF9sb2Nrc1tdLCBfX3NtcF9sb2Nrc19lbmRbXTsKK2V4dGVybiBjaGFyIF9fdnN5c2NhbGxfMDsKIHZvaWQgKnRleHRfcG9rZV9lYXJseSh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4pOwogCiAvKiBSZXBsYWNlIGluc3RydWN0aW9ucyB3aXRoIGJldHRlciBhbHRlcm5hdGl2ZXMgZm9yIHRoaXMgQ1BVIHR5cGUuCkBAIC0yMTAsNiArMjY2LDE1IEBACiAJdTggaW5zbmJ1ZltNQVhfUEFUQ0hfTEVOXTsKIAogCURQUklOVEsoIiVzOiBhbHQgdGFibGUgJXAgLT4gJXBcbiIsIF9fZnVuY19fLCBzdGFydCwgZW5kKTsKKwkvKgorCSAqIFRoZSBzY2FuIG9yZGVyIHNob3VsZCBiZSBmcm9tIHN0YXJ0IHRvIGVuZC4gQSBsYXRlciBzY2FubmVkCisJICogYWx0ZXJuYXRpdmUgY29kZSBjYW4gb3ZlcndyaXRlIGEgcHJldmlvdXMgc2Nhbm5lZCBhbHRlcm5hdGl2ZSBjb2RlLgorCSAqIFNvbWUga2VybmVsIGZ1bmN0aW9ucyAoZS5nLiBtZW1jcHksIG1lbXNldCwgZXRjKSB1c2UgdGhpcyBvcmRlciB0bworCSAqIHBhdGNoIGNvZGUuCisJICoKKwkgKiBTbyBiZSBjYXJlZnVsIGlmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgc2NhbiBvcmRlciB0byBhbnkgb3RoZXIKKwkgKiBvcmRlci4KKwkgKi8KIAlmb3IgKGEgPSBzdGFydDsgYSA8IGVuZDsgYSsrKSB7CiAJCXU4ICppbnN0ciA9IGEtPmluc3RyOwogCQlCVUdfT04oYS0+cmVwbGFjZW1lbnRsZW4gPiBhLT5pbnN0cmxlbik7CkBAIC02NzgsMjkgKzc0MywzIEBACiAJd3JvdGVfdGV4dCA9IDA7CiAJX19zdG9wX21hY2hpbmUoc3RvcF9tYWNoaW5lX3RleHRfcG9rZSwgKHZvaWQgKikmdHBwLCBOVUxMKTsKIH0KLQotI2lmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfRlRSQUNFKSB8fCBkZWZpbmVkKEhBVkVfSlVNUF9MQUJFTCkKLQotI2lmZGVmIENPTkZJR19YODZfNjQKLXVuc2lnbmVkIGNoYXIgaWRlYWxfbm9wNVs1XSA9IHsgMHg2NiwgMHg2NiwgMHg2NiwgMHg2NiwgMHg5MCB9OwotI2Vsc2UKLXVuc2lnbmVkIGNoYXIgaWRlYWxfbm9wNVs1XSA9IHsgMHgzZSwgMHg4ZCwgMHg3NCwgMHgyNiwgMHgwMCB9OwotI2VuZGlmCi0KLXZvaWQgX19pbml0IGFyY2hfaW5pdF9pZGVhbF9ub3A1KHZvaWQpCi17Ci0JLyoKLQkgKiBUaGVyZSBpcyBubyBnb29kIG5vcCBmb3IgYWxsIHg4NiBhcmNocy4gIFRoaXMgc2VsZWN0aW9uCi0JICogYWxnb3JpdGhtIHNob3VsZCBiZSB1bmlmaWVkIHdpdGggdGhlIG9uZSBpbiBmaW5kX25vcF90YWJsZSgpLAotCSAqIGJ1dCB0aGlzIHNob3VsZCBiZSBnb29kIGVub3VnaCBmb3Igbm93LgotCSAqCi0JICogRm9yIGNhc2VzIG90aGVyIHRoYW4gdGhlIG9uZXMgYmVsb3csIHVzZSB0aGUgc2FmZSAoYXMgaW4KLQkgKiBhbHdheXMgZnVuY3Rpb25hbCkgZGVmYXVsdHMgYWJvdmUuCi0JICovCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCS8qIERvbid0IHVzZSB0aGVzZSBvbiAzMiBiaXRzIGR1ZSB0byBicm9rZW4gdmlydHVhbGl6ZXJzICovCi0JaWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKQotCQltZW1jcHkoaWRlYWxfbm9wNSwgcDZfbm9wc1s1XSwgNSk7Ci0jZW5kaWYKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2dhcnRfNjQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKcmVuYW1lIHRvIGFyY2gveDg2L2tlcm5lbC9hbWRfZ2FydF82NC5jCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKaW5kZXggNTdjYTc3Ny4uODczZTdlMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYwpAQCAtMTgsNiArMTgsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2ktYXRzLmg+CiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KQEAgLTI1LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvbW11LWhlbHBlci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KICNpbmNsdWRlIDxhc20vaW9tbXUuaD4KICNpbmNsdWRlIDxhc20vZ2FydC5oPgpAQCAtMzQsNyArMzYsNyBAQAogCiAjZGVmaW5lIENNRF9TRVRfVFlQRShjbWQsIHQpICgoY21kKS0+ZGF0YVsxXSB8PSAoKHQpIDw8IDI4KSkKIAotI2RlZmluZSBFWElUX0xPT1BfQ09VTlQgMTAwMDAwMDAKKyNkZWZpbmUgTE9PUF9USU1FT1VUCTEwMDAwMAogCiBzdGF0aWMgREVGSU5FX1JXTE9DSyhhbWRfaW9tbXVfZGV2dGFibGVfbG9jayk7CiAKQEAgLTU3LDcgKzU5LDYgQEAKIAl1MzIgZGF0YVs0XTsKIH07CiAKLXN0YXRpYyB2b2lkIHJlc2V0X2lvbW11X2NvbW1hbmRfYnVmZmVyKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KTsKIHN0YXRpYyB2b2lkIHVwZGF0ZV9kb21haW4oc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW4pOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzIyLDggKzMyMyw2IEBACiAJCWJyZWFrOwogCWNhc2UgRVZFTlRfVFlQRV9JTExfQ01EOgogCQlwcmludGsoIklMTEVHQUxfQ09NTUFORF9FUlJPUiBhZGRyZXNzPTB4JTAxNmxseF1cbiIsIGFkZHJlc3MpOwotCQlpb21tdS0+cmVzZXRfaW5fcHJvZ3Jlc3MgPSB0cnVlOwotCQlyZXNldF9pb21tdV9jb21tYW5kX2J1ZmZlcihpb21tdSk7CiAJCWR1bXBfY29tbWFuZChhZGRyZXNzKTsKIAkJYnJlYWs7CiAJY2FzZSBFVkVOVF9UWVBFX0NNRF9IQVJEX0VSUjoKQEAgLTM2Nyw3ICszNjYsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5sb2NrLCBmbGFncyk7CiB9CiAKLWlycXJldHVybl90IGFtZF9pb21tdV9pbnRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQoraXJxcmV0dXJuX3QgYW1kX2lvbW11X2ludF90aHJlYWQoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgYW1kX2lvbW11ICppb21tdTsKIApAQCAtMzc3LDEzMCArMzc2LDM2MCBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAoraXJxcmV0dXJuX3QgYW1kX2lvbW11X2ludF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIElSUV9XQUtFX1RIUkVBRDsKK30KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBJT01NVSBjb21tYW5kIHF1ZXVpbmcgZnVuY3Rpb25zCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qCi0gKiBXcml0ZXMgdGhlIGNvbW1hbmQgdG8gdGhlIElPTU1VcyBjb21tYW5kIGJ1ZmZlciBhbmQgaW5mb3JtcyB0aGUKLSAqIGhhcmR3YXJlIGFib3V0IHRoZSBuZXcgY29tbWFuZC4gTXVzdCBiZSBjYWxsZWQgd2l0aCBpb21tdS0+bG9jayBoZWxkLgotICovCi1zdGF0aWMgaW50IF9faW9tbXVfcXVldWVfY29tbWFuZChzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwgc3RydWN0IGlvbW11X2NtZCAqY21kKQorc3RhdGljIGludCB3YWl0X29uX3NlbSh2b2xhdGlsZSB1NjQgKnNlbSkKIHsKLQl1MzIgdGFpbCwgaGVhZDsKLQl1OCAqdGFyZ2V0OworCWludCBpID0gMDsKIAotCVdBUk5fT04oaW9tbXUtPmNtZF9idWZfc2l6ZSAmIENNRF9CVUZGRVJfVU5JTklUSUFMSVpFRCk7Ci0JdGFpbCA9IHJlYWRsKGlvbW11LT5tbWlvX2Jhc2UgKyBNTUlPX0NNRF9UQUlMX09GRlNFVCk7Ci0JdGFyZ2V0ID0gaW9tbXUtPmNtZF9idWYgKyB0YWlsOwotCW1lbWNweV90b2lvKHRhcmdldCwgY21kLCBzaXplb2YoKmNtZCkpOwotCXRhaWwgPSAodGFpbCArIHNpemVvZigqY21kKSkgJSBpb21tdS0+Y21kX2J1Zl9zaXplOwotCWhlYWQgPSByZWFkbChpb21tdS0+bW1pb19iYXNlICsgTU1JT19DTURfSEVBRF9PRkZTRVQpOwotCWlmICh0YWlsID09IGhlYWQpCi0JCXJldHVybiAtRU5PTUVNOwotCXdyaXRlbCh0YWlsLCBpb21tdS0+bW1pb19iYXNlICsgTU1JT19DTURfVEFJTF9PRkZTRVQpOworCXdoaWxlICgqc2VtID09IDAgJiYgaSA8IExPT1BfVElNRU9VVCkgeworCQl1ZGVsYXkoMSk7CisJCWkgKz0gMTsKKwl9CisKKwlpZiAoaSA9PSBMT09QX1RJTUVPVVQpIHsKKwkJcHJfYWxlcnQoIkFNRC1WaTogQ29tcGxldGlvbi1XYWl0IGxvb3AgdGltZWQgb3V0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQogCiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBHZW5lcmFsIHF1ZXVpbmcgZnVuY3Rpb24gZm9yIGNvbW1hbmRzLiBUYWtlcyBpb21tdS0+bG9jayBhbmQgY2FsbHMKLSAqIF9faW9tbXVfcXVldWVfY29tbWFuZCgpLgotICovCi1zdGF0aWMgaW50IGlvbW11X3F1ZXVlX2NvbW1hbmQoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsIHN0cnVjdCBpb21tdV9jbWQgKmNtZCkKK3N0YXRpYyB2b2lkIGNvcHlfY21kX3RvX2J1ZmZlcihzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwKKwkJCSAgICAgICBzdHJ1Y3QgaW9tbXVfY21kICpjbWQsCisJCQkgICAgICAgdTMyIHRhaWwpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0OworCXU4ICp0YXJnZXQ7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsKLQlyZXQgPSBfX2lvbW11X3F1ZXVlX2NvbW1hbmQoaW9tbXUsIGNtZCk7Ci0JaWYgKCFyZXQpCi0JCWlvbW11LT5uZWVkX3N5bmMgPSB0cnVlOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5sb2NrLCBmbGFncyk7CisJdGFyZ2V0ID0gaW9tbXUtPmNtZF9idWYgKyB0YWlsOworCXRhaWwgICA9ICh0YWlsICsgc2l6ZW9mKCpjbWQpKSAlIGlvbW11LT5jbWRfYnVmX3NpemU7CiAKLQlyZXR1cm4gcmV0OworCS8qIENvcHkgY29tbWFuZCB0byBidWZmZXIgKi8KKwltZW1jcHkodGFyZ2V0LCBjbWQsIHNpemVvZigqY21kKSk7CisKKwkvKiBUZWxsIHRoZSBJT01NVSBhYm91dCBpdCAqLworCXdyaXRlbCh0YWlsLCBpb21tdS0+bW1pb19iYXNlICsgTU1JT19DTURfVEFJTF9PRkZTRVQpOworfQorCitzdGF0aWMgdm9pZCBidWlsZF9jb21wbGV0aW9uX3dhaXQoc3RydWN0IGlvbW11X2NtZCAqY21kLCB1NjQgYWRkcmVzcykKK3sKKwlXQVJOX09OKGFkZHJlc3MgJiAweDdVTEwpOworCisJbWVtc2V0KGNtZCwgMCwgc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmRhdGFbMF0gPSBsb3dlcl8zMl9iaXRzKF9fcGEoYWRkcmVzcykpIHwgQ01EX0NPTVBMX1dBSVRfU1RPUkVfTUFTSzsKKwljbWQtPmRhdGFbMV0gPSB1cHBlcl8zMl9iaXRzKF9fcGEoYWRkcmVzcykpOworCWNtZC0+ZGF0YVsyXSA9IDE7CisJQ01EX1NFVF9UWVBFKGNtZCwgQ01EX0NPTVBMX1dBSVQpOworfQorCitzdGF0aWMgdm9pZCBidWlsZF9pbnZfZHRlKHN0cnVjdCBpb21tdV9jbWQgKmNtZCwgdTE2IGRldmlkKQoreworCW1lbXNldChjbWQsIDAsIHNpemVvZigqY21kKSk7CisJY21kLT5kYXRhWzBdID0gZGV2aWQ7CisJQ01EX1NFVF9UWVBFKGNtZCwgQ01EX0lOVl9ERVZfRU5UUlkpOworfQorCitzdGF0aWMgdm9pZCBidWlsZF9pbnZfaW9tbXVfcGFnZXMoc3RydWN0IGlvbW11X2NtZCAqY21kLCB1NjQgYWRkcmVzcywKKwkJCQkgIHNpemVfdCBzaXplLCB1MTYgZG9taWQsIGludCBwZGUpCit7CisJdTY0IHBhZ2VzOworCWludCBzOworCisJcGFnZXMgPSBpb21tdV9udW1fcGFnZXMoYWRkcmVzcywgc2l6ZSwgUEFHRV9TSVpFKTsKKwlzICAgICA9IDA7CisKKwlpZiAocGFnZXMgPiAxKSB7CisJCS8qCisJCSAqIElmIHdlIGhhdmUgdG8gZmx1c2ggbW9yZSB0aGFuIG9uZSBwYWdlLCBmbHVzaCBhbGwKKwkJICogVExCIGVudHJpZXMgZm9yIHRoaXMgZG9tYWluCisJCSAqLworCQlhZGRyZXNzID0gQ01EX0lOVl9JT01NVV9BTExfUEFHRVNfQUREUkVTUzsKKwkJcyA9IDE7CisJfQorCisJYWRkcmVzcyAmPSBQQUdFX01BU0s7CisKKwltZW1zZXQoY21kLCAwLCBzaXplb2YoKmNtZCkpOworCWNtZC0+ZGF0YVsxXSB8PSBkb21pZDsKKwljbWQtPmRhdGFbMl0gID0gbG93ZXJfMzJfYml0cyhhZGRyZXNzKTsKKwljbWQtPmRhdGFbM10gID0gdXBwZXJfMzJfYml0cyhhZGRyZXNzKTsKKwlDTURfU0VUX1RZUEUoY21kLCBDTURfSU5WX0lPTU1VX1BBR0VTKTsKKwlpZiAocykgLyogc2l6ZSBiaXQgLSB3ZSBmbHVzaCBtb3JlIHRoYW4gb25lIDRrYiBwYWdlICovCisJCWNtZC0+ZGF0YVsyXSB8PSBDTURfSU5WX0lPTU1VX1BBR0VTX1NJWkVfTUFTSzsKKwlpZiAocGRlKSAvKiBQREUgYml0IC0gd2Ugd2FuJ3QgZmx1c2ggZXZlcnl0aGluZyBub3Qgb25seSB0aGUgUFRFcyAqLworCQljbWQtPmRhdGFbMl0gfD0gQ01EX0lOVl9JT01NVV9QQUdFU19QREVfTUFTSzsKK30KKworc3RhdGljIHZvaWQgYnVpbGRfaW52X2lvdGxiX3BhZ2VzKHN0cnVjdCBpb21tdV9jbWQgKmNtZCwgdTE2IGRldmlkLCBpbnQgcWRlcCwKKwkJCQkgIHU2NCBhZGRyZXNzLCBzaXplX3Qgc2l6ZSkKK3sKKwl1NjQgcGFnZXM7CisJaW50IHM7CisKKwlwYWdlcyA9IGlvbW11X251bV9wYWdlcyhhZGRyZXNzLCBzaXplLCBQQUdFX1NJWkUpOworCXMgICAgID0gMDsKKworCWlmIChwYWdlcyA+IDEpIHsKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSB0byBmbHVzaCBtb3JlIHRoYW4gb25lIHBhZ2UsIGZsdXNoIGFsbAorCQkgKiBUTEIgZW50cmllcyBmb3IgdGhpcyBkb21haW4KKwkJICovCisJCWFkZHJlc3MgPSBDTURfSU5WX0lPTU1VX0FMTF9QQUdFU19BRERSRVNTOworCQlzID0gMTsKKwl9CisKKwlhZGRyZXNzICY9IFBBR0VfTUFTSzsKKworCW1lbXNldChjbWQsIDAsIHNpemVvZigqY21kKSk7CisJY21kLT5kYXRhWzBdICA9IGRldmlkOworCWNtZC0+ZGF0YVswXSB8PSAocWRlcCAmIDB4ZmYpIDw8IDI0OworCWNtZC0+ZGF0YVsxXSAgPSBkZXZpZDsKKwljbWQtPmRhdGFbMl0gID0gbG93ZXJfMzJfYml0cyhhZGRyZXNzKTsKKwljbWQtPmRhdGFbM10gID0gdXBwZXJfMzJfYml0cyhhZGRyZXNzKTsKKwlDTURfU0VUX1RZUEUoY21kLCBDTURfSU5WX0lPVExCX1BBR0VTKTsKKwlpZiAocykKKwkJY21kLT5kYXRhWzJdIHw9IENNRF9JTlZfSU9NTVVfUEFHRVNfU0laRV9NQVNLOworfQorCitzdGF0aWMgdm9pZCBidWlsZF9pbnZfYWxsKHN0cnVjdCBpb21tdV9jbWQgKmNtZCkKK3sKKwltZW1zZXQoY21kLCAwLCBzaXplb2YoKmNtZCkpOworCUNNRF9TRVRfVFlQRShjbWQsIENNRF9JTlZfQUxMKTsKIH0KIAogLyoKLSAqIFRoaXMgZnVuY3Rpb24gd2FpdHMgdW50aWwgYW4gSU9NTVUgaGFzIGNvbXBsZXRlZCBhIGNvbXBsZXRpb24KLSAqIHdhaXQgY29tbWFuZAorICogV3JpdGVzIHRoZSBjb21tYW5kIHRvIHRoZSBJT01NVXMgY29tbWFuZCBidWZmZXIgYW5kIGluZm9ybXMgdGhlCisgKiBoYXJkd2FyZSBhYm91dCB0aGUgbmV3IGNvbW1hbmQuCiAgKi8KLXN0YXRpYyB2b2lkIF9faW9tbXVfd2FpdF9mb3JfY29tcGxldGlvbihzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSkKK3N0YXRpYyBpbnQgaW9tbXVfcXVldWVfY29tbWFuZChzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwgc3RydWN0IGlvbW11X2NtZCAqY21kKQogewotCWludCByZWFkeSA9IDA7Ci0JdW5zaWduZWQgc3RhdHVzID0gMDsKLQl1bnNpZ25lZCBsb25nIGkgPSAwOworCXUzMiBsZWZ0LCB0YWlsLCBoZWFkLCBuZXh0X3RhaWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUlOQ19TVEFUU19DT1VOVEVSKGNvbXBsX3dhaXQpOworCVdBUk5fT04oaW9tbXUtPmNtZF9idWZfc2l6ZSAmIENNRF9CVUZGRVJfVU5JTklUSUFMSVpFRCk7CiAKLQl3aGlsZSAoIXJlYWR5ICYmIChpIDwgRVhJVF9MT09QX0NPVU5UKSkgewotCQkrK2k7Ci0JCS8qIHdhaXQgZm9yIHRoZSBiaXQgdG8gYmVjb21lIG9uZSAqLwotCQlzdGF0dXMgPSByZWFkbChpb21tdS0+bW1pb19iYXNlICsgTU1JT19TVEFUVVNfT0ZGU0VUKTsKLQkJcmVhZHkgPSBzdGF0dXMgJiBNTUlPX1NUQVRVU19DT01fV0FJVF9JTlRfTUFTSzsKK2FnYWluOgorCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+bG9jaywgZmxhZ3MpOworCisJaGVhZCAgICAgID0gcmVhZGwoaW9tbXUtPm1taW9fYmFzZSArIE1NSU9fQ01EX0hFQURfT0ZGU0VUKTsKKwl0YWlsICAgICAgPSByZWFkbChpb21tdS0+bW1pb19iYXNlICsgTU1JT19DTURfVEFJTF9PRkZTRVQpOworCW5leHRfdGFpbCA9ICh0YWlsICsgc2l6ZW9mKCpjbWQpKSAlIGlvbW11LT5jbWRfYnVmX3NpemU7CisJbGVmdCAgICAgID0gKGhlYWQgLSBuZXh0X3RhaWwpICUgaW9tbXUtPmNtZF9idWZfc2l6ZTsKKworCWlmIChsZWZ0IDw9IDIpIHsKKwkJc3RydWN0IGlvbW11X2NtZCBzeW5jX2NtZDsKKwkJdm9sYXRpbGUgdTY0IHNlbSA9IDA7CisJCWludCByZXQ7CisKKwkJYnVpbGRfY29tcGxldGlvbl93YWl0KCZzeW5jX2NtZCwgKHU2NCkmc2VtKTsKKwkJY29weV9jbWRfdG9fYnVmZmVyKGlvbW11LCAmc3luY19jbWQsIHRhaWwpOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5sb2NrLCBmbGFncyk7CisKKwkJaWYgKChyZXQgPSB3YWl0X29uX3NlbSgmc2VtKSkgIT0gMCkKKwkJCXJldHVybiByZXQ7CisKKwkJZ290byBhZ2FpbjsKIAl9CiAKLQkvKiBzZXQgYml0IGJhY2sgdG8gemVybyAqLwotCXN0YXR1cyAmPSB+TU1JT19TVEFUVVNfQ09NX1dBSVRfSU5UX01BU0s7Ci0Jd3JpdGVsKHN0YXR1cywgaW9tbXUtPm1taW9fYmFzZSArIE1NSU9fU1RBVFVTX09GRlNFVCk7CisJY29weV9jbWRfdG9fYnVmZmVyKGlvbW11LCBjbWQsIHRhaWwpOwogCi0JaWYgKHVubGlrZWx5KGkgPT0gRVhJVF9MT09QX0NPVU5UKSkKLQkJaW9tbXUtPnJlc2V0X2luX3Byb2dyZXNzID0gdHJ1ZTsKKwkvKiBXZSBuZWVkIHRvIHN5bmMgbm93IHRvIG1ha2Ugc3VyZSBhbGwgY29tbWFuZHMgYXJlIHByb2Nlc3NlZCAqLworCWlvbW11LT5uZWVkX3N5bmMgPSB0cnVlOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOwogfQogCiAvKgogICogVGhpcyBmdW5jdGlvbiBxdWV1ZXMgYSBjb21wbGV0aW9uIHdhaXQgY29tbWFuZCBpbnRvIHRoZSBjb21tYW5kCiAgKiBidWZmZXIgb2YgYW4gSU9NTVUKICAqLwotc3RhdGljIGludCBfX2lvbW11X2NvbXBsZXRpb25fd2FpdChzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSkKK3N0YXRpYyBpbnQgaW9tbXVfY29tcGxldGlvbl93YWl0KHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQoreworCXN0cnVjdCBpb21tdV9jbWQgY21kOworCXZvbGF0aWxlIHU2NCBzZW0gPSAwOworCWludCByZXQ7CisKKwlpZiAoIWlvbW11LT5uZWVkX3N5bmMpCisJCXJldHVybiAwOworCisJYnVpbGRfY29tcGxldGlvbl93YWl0KCZjbWQsICh1NjQpJnNlbSk7CisKKwlyZXQgPSBpb21tdV9xdWV1ZV9jb21tYW5kKGlvbW11LCAmY21kKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHdhaXRfb25fc2VtKCZzZW0pOworfQorCitzdGF0aWMgaW50IGlvbW11X2ZsdXNoX2R0ZShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwgdTE2IGRldmlkKQogewogCXN0cnVjdCBpb21tdV9jbWQgY21kOwogCi0JIG1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7Ci0JIGNtZC5kYXRhWzBdID0gQ01EX0NPTVBMX1dBSVRfSU5UX01BU0s7Ci0JIENNRF9TRVRfVFlQRSgmY21kLCBDTURfQ09NUExfV0FJVCk7CisJYnVpbGRfaW52X2R0ZSgmY21kLCBkZXZpZCk7CiAKLQkgcmV0dXJuIF9faW9tbXVfcXVldWVfY29tbWFuZChpb21tdSwgJmNtZCk7CisJcmV0dXJuIGlvbW11X3F1ZXVlX2NvbW1hbmQoaW9tbXUsICZjbWQpOworfQorCitzdGF0aWMgdm9pZCBpb21tdV9mbHVzaF9kdGVfYWxsKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQoreworCXUzMiBkZXZpZDsKKworCWZvciAoZGV2aWQgPSAwOyBkZXZpZCA8PSAweGZmZmY7ICsrZGV2aWQpCisJCWlvbW11X2ZsdXNoX2R0ZShpb21tdSwgZGV2aWQpOworCisJaW9tbXVfY29tcGxldGlvbl93YWl0KGlvbW11KTsKIH0KIAogLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW5ldmVyIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIElPTU1VIGhhcwotICogY29tcGxldGVkIGV4ZWN1dGlvbiBvZiBhbGwgY29tbWFuZHMgd2Ugc2VudC4gSXQgc2VuZHMgYQotICogQ09NUExFVElPTl9XQUlUIGNvbW1hbmQgYW5kIHdhaXRzIGZvciBpdCB0byBmaW5pc2guIFRoZSBJT01NVSBpbmZvcm1zCi0gKiB1cyBhYm91dCB0aGF0IGJ5IHdyaXRpbmcgYSB2YWx1ZSB0byBhIHBoeXNpY2FsIGFkZHJlc3Mgd2UgcGFzcyB3aXRoCi0gKiB0aGUgY29tbWFuZC4KKyAqIFRoaXMgZnVuY3Rpb24gdXNlcyBoZWF2eSBsb2NraW5nIGFuZCBtYXkgZGlzYWJsZSBpcnFzIGZvciBzb21lIHRpbWUuIEJ1dAorICogdGhpcyBpcyBubyBpc3N1ZSBiZWNhdXNlIGl0IGlzIG9ubHkgY2FsbGVkIGR1cmluZyByZXN1bWUuCiAgKi8KLXN0YXRpYyBpbnQgaW9tbXVfY29tcGxldGlvbl93YWl0KHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQorc3RhdGljIHZvaWQgaW9tbXVfZmx1c2hfdGxiX2FsbChzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSkKIHsKLQlpbnQgcmV0ID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBkb21faWQ7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsKKwlmb3IgKGRvbV9pZCA9IDA7IGRvbV9pZCA8PSAweGZmZmY7ICsrZG9tX2lkKSB7CisJCXN0cnVjdCBpb21tdV9jbWQgY21kOworCQlidWlsZF9pbnZfaW9tbXVfcGFnZXMoJmNtZCwgMCwgQ01EX0lOVl9JT01NVV9BTExfUEFHRVNfQUREUkVTUywKKwkJCQkgICAgICBkb21faWQsIDEpOworCQlpb21tdV9xdWV1ZV9jb21tYW5kKGlvbW11LCAmY21kKTsKKwl9CiAKLQlpZiAoIWlvbW11LT5uZWVkX3N5bmMpCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gX19pb21tdV9jb21wbGV0aW9uX3dhaXQoaW9tbXUpOwotCi0JaW9tbXUtPm5lZWRfc3luYyA9IGZhbHNlOwotCi0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQlfX2lvbW11X3dhaXRfZm9yX2NvbXBsZXRpb24oaW9tbXUpOwotCi1vdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChpb21tdS0+cmVzZXRfaW5fcHJvZ3Jlc3MpCi0JCXJlc2V0X2lvbW11X2NvbW1hbmRfYnVmZmVyKGlvbW11KTsKLQotCXJldHVybiAwOworCWlvbW11X2NvbXBsZXRpb25fd2FpdChpb21tdSk7CiB9CiAKLXN0YXRpYyB2b2lkIGlvbW11X2ZsdXNoX2NvbXBsZXRlKHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluKQorc3RhdGljIHZvaWQgaW9tbXVfZmx1c2hfYWxsKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQoreworCXN0cnVjdCBpb21tdV9jbWQgY21kOworCisJYnVpbGRfaW52X2FsbCgmY21kKTsKKworCWlvbW11X3F1ZXVlX2NvbW1hbmQoaW9tbXUsICZjbWQpOworCWlvbW11X2NvbXBsZXRpb25fd2FpdChpb21tdSk7Cit9CisKK3ZvaWQgaW9tbXVfZmx1c2hfYWxsX2NhY2hlcyhzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSkKK3sKKwlpZiAoaW9tbXVfZmVhdHVyZShpb21tdSwgRkVBVFVSRV9JQSkpIHsKKwkJaW9tbXVfZmx1c2hfYWxsKGlvbW11KTsKKwl9IGVsc2UgeworCQlpb21tdV9mbHVzaF9kdGVfYWxsKGlvbW11KTsKKwkJaW9tbXVfZmx1c2hfdGxiX2FsbChpb21tdSk7CisJfQorfQorCisvKgorICogQ29tbWFuZCBzZW5kIGZ1bmN0aW9uIGZvciBmbHVzaGluZyBvbi1kZXZpY2UgVExCCisgKi8KK3N0YXRpYyBpbnQgZGV2aWNlX2ZsdXNoX2lvdGxiKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IGFkZHJlc3MsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCXN0cnVjdCBhbWRfaW9tbXUgKmlvbW11OworCXN0cnVjdCBpb21tdV9jbWQgY21kOworCXUxNiBkZXZpZDsKKwlpbnQgcWRlcDsKKworCXFkZXAgID0gcGNpX2F0c19xdWV1ZV9kZXB0aChwZGV2KTsKKwlkZXZpZCA9IGdldF9kZXZpY2VfaWQoZGV2KTsKKwlpb21tdSA9IGFtZF9pb21tdV9ybG9va3VwX3RhYmxlW2RldmlkXTsKKworCWJ1aWxkX2ludl9pb3RsYl9wYWdlcygmY21kLCBkZXZpZCwgcWRlcCwgYWRkcmVzcywgc2l6ZSk7CisKKwlyZXR1cm4gaW9tbXVfcXVldWVfY29tbWFuZChpb21tdSwgJmNtZCk7Cit9CisKKy8qCisgKiBDb21tYW5kIHNlbmQgZnVuY3Rpb24gZm9yIGludmFsaWRhdGluZyBhIGRldmljZSB0YWJsZSBlbnRyeQorICovCitzdGF0aWMgaW50IGRldmljZV9mbHVzaF9kdGUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBhbWRfaW9tbXUgKmlvbW11OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXUxNiBkZXZpZDsKKwlpbnQgcmV0OworCisJcGRldiAgPSB0b19wY2lfZGV2KGRldik7CisJZGV2aWQgPSBnZXRfZGV2aWNlX2lkKGRldik7CisJaW9tbXUgPSBhbWRfaW9tbXVfcmxvb2t1cF90YWJsZVtkZXZpZF07CisKKwlyZXQgPSBpb21tdV9mbHVzaF9kdGUoaW9tbXUsIGRldmlkKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHBjaV9hdHNfZW5hYmxlZChwZGV2KSkKKwkJcmV0ID0gZGV2aWNlX2ZsdXNoX2lvdGxiKGRldiwgMCwgfjBVTCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVExCIGludmFsaWRhdGlvbiBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgZnJvbSB0aGUgbWFwcGluZyBmdW5jdGlvbnMuCisgKiBJdCBpbnZhbGlkYXRlcyBhIHNpbmdsZSBQVEUgaWYgdGhlIHJhbmdlIHRvIGZsdXNoIGlzIHdpdGhpbiBhIHNpbmdsZQorICogcGFnZS4gT3RoZXJ3aXNlIGl0IGZsdXNoZXMgdGhlIHdob2xlIFRMQiBvZiB0aGUgSU9NTVUuCisgKi8KK3N0YXRpYyB2b2lkIF9fZG9tYWluX2ZsdXNoX3BhZ2VzKHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluLAorCQkJCSB1NjQgYWRkcmVzcywgc2l6ZV90IHNpemUsIGludCBwZGUpCit7CisJc3RydWN0IGlvbW11X2Rldl9kYXRhICpkZXZfZGF0YTsKKwlzdHJ1Y3QgaW9tbXVfY21kIGNtZDsKKwlpbnQgcmV0ID0gMCwgaTsKKworCWJ1aWxkX2ludl9pb21tdV9wYWdlcygmY21kLCBhZGRyZXNzLCBzaXplLCBkb21haW4tPmlkLCBwZGUpOworCisJZm9yIChpID0gMDsgaSA8IGFtZF9pb21tdXNfcHJlc2VudDsgKytpKSB7CisJCWlmICghZG9tYWluLT5kZXZfaW9tbXVbaV0pCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBEZXZpY2VzIG9mIHRoaXMgZG9tYWluIGFyZSBiZWhpbmQgdGhpcyBJT01NVQorCQkgKiBXZSBuZWVkIGEgVExCIGZsdXNoCisJCSAqLworCQlyZXQgfD0gaW9tbXVfcXVldWVfY29tbWFuZChhbWRfaW9tbXVzW2ldLCAmY21kKTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldl9kYXRhLCAmZG9tYWluLT5kZXZfbGlzdCwgbGlzdCkgeworCQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2X2RhdGEtPmRldik7CisKKwkJaWYgKCFwY2lfYXRzX2VuYWJsZWQocGRldikpCisJCQljb250aW51ZTsKKworCQlyZXQgfD0gZGV2aWNlX2ZsdXNoX2lvdGxiKGRldl9kYXRhLT5kZXYsIGFkZHJlc3MsIHNpemUpOworCX0KKworCVdBUk5fT04ocmV0KTsKK30KKworc3RhdGljIHZvaWQgZG9tYWluX2ZsdXNoX3BhZ2VzKHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluLAorCQkJICAgICAgIHU2NCBhZGRyZXNzLCBzaXplX3Qgc2l6ZSkKK3sKKwlfX2RvbWFpbl9mbHVzaF9wYWdlcyhkb21haW4sIGFkZHJlc3MsIHNpemUsIDApOworfQorCisvKiBGbHVzaCB0aGUgd2hvbGUgSU8vVExCIGZvciBhIGdpdmVuIHByb3RlY3Rpb24gZG9tYWluICovCitzdGF0aWMgdm9pZCBkb21haW5fZmx1c2hfdGxiKHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluKQoreworCV9fZG9tYWluX2ZsdXNoX3BhZ2VzKGRvbWFpbiwgMCwgQ01EX0lOVl9JT01NVV9BTExfUEFHRVNfQUREUkVTUywgMCk7Cit9CisKKy8qIEZsdXNoIHRoZSB3aG9sZSBJTy9UTEIgZm9yIGEgZ2l2ZW4gcHJvdGVjdGlvbiBkb21haW4gLSBpbmNsdWRpbmcgUERFICovCitzdGF0aWMgdm9pZCBkb21haW5fZmx1c2hfdGxiX3BkZShzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbikKK3sKKwlfX2RvbWFpbl9mbHVzaF9wYWdlcyhkb21haW4sIDAsIENNRF9JTlZfSU9NTVVfQUxMX1BBR0VTX0FERFJFU1MsIDEpOworfQorCitzdGF0aWMgdm9pZCBkb21haW5fZmx1c2hfY29tcGxldGUoc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW4pCiB7CiAJaW50IGk7CiAKQEAgLTUxNiwxMTggKzc0NSwxMSBAQAogCX0KIH0KIAotLyoKLSAqIENvbW1hbmQgc2VuZCBmdW5jdGlvbiBmb3IgaW52YWxpZGF0aW5nIGEgZGV2aWNlIHRhYmxlIGVudHJ5Ci0gKi8KLXN0YXRpYyBpbnQgaW9tbXVfZmx1c2hfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYW1kX2lvbW11ICppb21tdTsKLQlzdHJ1Y3QgaW9tbXVfY21kIGNtZDsKLQl1MTYgZGV2aWQ7Ci0KLQlkZXZpZCA9IGdldF9kZXZpY2VfaWQoZGV2KTsKLQlpb21tdSA9IGFtZF9pb21tdV9ybG9va3VwX3RhYmxlW2RldmlkXTsKLQotCS8qIEJ1aWxkIGNvbW1hbmQgKi8KLQltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwotCUNNRF9TRVRfVFlQRSgmY21kLCBDTURfSU5WX0RFVl9FTlRSWSk7Ci0JY21kLmRhdGFbMF0gPSBkZXZpZDsKLQotCXJldHVybiBpb21tdV9xdWV1ZV9jb21tYW5kKGlvbW11LCAmY21kKTsKLX0KLQotc3RhdGljIHZvaWQgX19pb21tdV9idWlsZF9pbnZfaW9tbXVfcGFnZXMoc3RydWN0IGlvbW11X2NtZCAqY21kLCB1NjQgYWRkcmVzcywKLQkJCQkJICB1MTYgZG9taWQsIGludCBwZGUsIGludCBzKQotewotCW1lbXNldChjbWQsIDAsIHNpemVvZigqY21kKSk7Ci0JYWRkcmVzcyAmPSBQQUdFX01BU0s7Ci0JQ01EX1NFVF9UWVBFKGNtZCwgQ01EX0lOVl9JT01NVV9QQUdFUyk7Ci0JY21kLT5kYXRhWzFdIHw9IGRvbWlkOwotCWNtZC0+ZGF0YVsyXSA9IGxvd2VyXzMyX2JpdHMoYWRkcmVzcyk7Ci0JY21kLT5kYXRhWzNdID0gdXBwZXJfMzJfYml0cyhhZGRyZXNzKTsKLQlpZiAocykgLyogc2l6ZSBiaXQgLSB3ZSBmbHVzaCBtb3JlIHRoYW4gb25lIDRrYiBwYWdlICovCi0JCWNtZC0+ZGF0YVsyXSB8PSBDTURfSU5WX0lPTU1VX1BBR0VTX1NJWkVfTUFTSzsKLQlpZiAocGRlKSAvKiBQREUgYml0IC0gd2Ugd2FuJ3QgZmx1c2ggZXZlcnl0aGluZyBub3Qgb25seSB0aGUgUFRFcyAqLwotCQljbWQtPmRhdGFbMl0gfD0gQ01EX0lOVl9JT01NVV9QQUdFU19QREVfTUFTSzsKLX0KLQotLyoKLSAqIEdlbmVyaWMgY29tbWFuZCBzZW5kIGZ1bmN0aW9uIGZvciBpbnZhbGlkYWluZyBUTEIgZW50cmllcwotICovCi1zdGF0aWMgaW50IGlvbW11X3F1ZXVlX2ludl9pb21tdV9wYWdlcyhzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwKLQkJdTY0IGFkZHJlc3MsIHUxNiBkb21pZCwgaW50IHBkZSwgaW50IHMpCi17Ci0Jc3RydWN0IGlvbW11X2NtZCBjbWQ7Ci0JaW50IHJldDsKLQotCV9faW9tbXVfYnVpbGRfaW52X2lvbW11X3BhZ2VzKCZjbWQsIGFkZHJlc3MsIGRvbWlkLCBwZGUsIHMpOwotCi0JcmV0ID0gaW9tbXVfcXVldWVfY29tbWFuZChpb21tdSwgJmNtZCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogVExCIGludmFsaWRhdGlvbiBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgZnJvbSB0aGUgbWFwcGluZyBmdW5jdGlvbnMuCi0gKiBJdCBpbnZhbGlkYXRlcyBhIHNpbmdsZSBQVEUgaWYgdGhlIHJhbmdlIHRvIGZsdXNoIGlzIHdpdGhpbiBhIHNpbmdsZQotICogcGFnZS4gT3RoZXJ3aXNlIGl0IGZsdXNoZXMgdGhlIHdob2xlIFRMQiBvZiB0aGUgSU9NTVUuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW9tbXVfZmx1c2hfcGFnZXMoc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW4sCi0JCQkJdTY0IGFkZHJlc3MsIHNpemVfdCBzaXplLCBpbnQgcGRlKQotewotCWludCBzID0gMCwgaTsKLQl1bnNpZ25lZCBsb25nIHBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKGFkZHJlc3MsIHNpemUsIFBBR0VfU0laRSk7Ci0KLQlhZGRyZXNzICY9IFBBR0VfTUFTSzsKLQotCWlmIChwYWdlcyA+IDEpIHsKLQkJLyoKLQkJICogSWYgd2UgaGF2ZSB0byBmbHVzaCBtb3JlIHRoYW4gb25lIHBhZ2UsIGZsdXNoIGFsbAotCQkgKiBUTEIgZW50cmllcyBmb3IgdGhpcyBkb21haW4KLQkJICovCi0JCWFkZHJlc3MgPSBDTURfSU5WX0lPTU1VX0FMTF9QQUdFU19BRERSRVNTOwotCQlzID0gMTsKLQl9Ci0KLQotCWZvciAoaSA9IDA7IGkgPCBhbWRfaW9tbXVzX3ByZXNlbnQ7ICsraSkgewotCQlpZiAoIWRvbWFpbi0+ZGV2X2lvbW11W2ldKQotCQkJY29udGludWU7Ci0KLQkJLyoKLQkJICogRGV2aWNlcyBvZiB0aGlzIGRvbWFpbiBhcmUgYmVoaW5kIHRoaXMgSU9NTVUKLQkJICogV2UgbmVlZCBhIFRMQiBmbHVzaAotCQkgKi8KLQkJaW9tbXVfcXVldWVfaW52X2lvbW11X3BhZ2VzKGFtZF9pb21tdXNbaV0sIGFkZHJlc3MsCi0JCQkJCSAgICBkb21haW4tPmlkLCBwZGUsIHMpOwotCX0KLQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgaW9tbXVfZmx1c2hfcGFnZXMoc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW4sCi0JCQkgICAgIHU2NCBhZGRyZXNzLCBzaXplX3Qgc2l6ZSkKLXsKLQlfX2lvbW11X2ZsdXNoX3BhZ2VzKGRvbWFpbiwgYWRkcmVzcywgc2l6ZSwgMCk7Ci19Ci0KLS8qIEZsdXNoIHRoZSB3aG9sZSBJTy9UTEIgZm9yIGEgZ2l2ZW4gcHJvdGVjdGlvbiBkb21haW4gKi8KLXN0YXRpYyB2b2lkIGlvbW11X2ZsdXNoX3RsYihzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbikKLXsKLQlfX2lvbW11X2ZsdXNoX3BhZ2VzKGRvbWFpbiwgMCwgQ01EX0lOVl9JT01NVV9BTExfUEFHRVNfQUREUkVTUywgMCk7Ci19Ci0KLS8qIEZsdXNoIHRoZSB3aG9sZSBJTy9UTEIgZm9yIGEgZ2l2ZW4gcHJvdGVjdGlvbiBkb21haW4gLSBpbmNsdWRpbmcgUERFICovCi1zdGF0aWMgdm9pZCBpb21tdV9mbHVzaF90bGJfcGRlKHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluKQotewotCV9faW9tbXVfZmx1c2hfcGFnZXMoZG9tYWluLCAwLCBDTURfSU5WX0lPTU1VX0FMTF9QQUdFU19BRERSRVNTLCAxKTsKLX0KLQogCiAvKgogICogVGhpcyBmdW5jdGlvbiBmbHVzaGVzIHRoZSBEVEVzIGZvciBhbGwgZGV2aWNlcyBpbiBkb21haW4KICAqLwotc3RhdGljIHZvaWQgaW9tbXVfZmx1c2hfZG9tYWluX2RldmljZXMoc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW4pCitzdGF0aWMgdm9pZCBkb21haW5fZmx1c2hfZGV2aWNlcyhzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbikKIHsKIAlzdHJ1Y3QgaW9tbXVfZGV2X2RhdGEgKmRldl9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC02MzUsNjYgKzc1NywxMSBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZkb21haW4tPmxvY2ssIGZsYWdzKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2X2RhdGEsICZkb21haW4tPmRldl9saXN0LCBsaXN0KQotCQlpb21tdV9mbHVzaF9kZXZpY2UoZGV2X2RhdGEtPmRldik7CisJCWRldmljZV9mbHVzaF9kdGUoZGV2X2RhdGEtPmRldik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkb21haW4tPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgaW9tbXVfZmx1c2hfYWxsX2RvbWFpbl9kZXZpY2VzKHZvaWQpCi17Ci0Jc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW47Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhbWRfaW9tbXVfcGRfbG9jaywgZmxhZ3MpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShkb21haW4sICZhbWRfaW9tbXVfcGRfbGlzdCwgbGlzdCkgewotCQlpb21tdV9mbHVzaF9kb21haW5fZGV2aWNlcyhkb21haW4pOwotCQlpb21tdV9mbHVzaF9jb21wbGV0ZShkb21haW4pOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtZF9pb21tdV9wZF9sb2NrLCBmbGFncyk7Ci19Ci0KLXZvaWQgYW1kX2lvbW11X2ZsdXNoX2FsbF9kZXZpY2VzKHZvaWQpCi17Ci0JaW9tbXVfZmx1c2hfYWxsX2RvbWFpbl9kZXZpY2VzKCk7Ci19Ci0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIHVzZXMgaGVhdnkgbG9ja2luZyBhbmQgbWF5IGRpc2FibGUgaXJxcyBmb3Igc29tZSB0aW1lLiBCdXQKLSAqIHRoaXMgaXMgbm8gaXNzdWUgYmVjYXVzZSBpdCBpcyBvbmx5IGNhbGxlZCBkdXJpbmcgcmVzdW1lLgotICovCi12b2lkIGFtZF9pb21tdV9mbHVzaF9hbGxfZG9tYWlucyh2b2lkKQotewotCXN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1kX2lvbW11X3BkX2xvY2ssIGZsYWdzKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9tYWluLCAmYW1kX2lvbW11X3BkX2xpc3QsIGxpc3QpIHsKLQkJc3Bpbl9sb2NrKCZkb21haW4tPmxvY2spOwotCQlpb21tdV9mbHVzaF90bGJfcGRlKGRvbWFpbik7Ci0JCWlvbW11X2ZsdXNoX2NvbXBsZXRlKGRvbWFpbik7Ci0JCXNwaW5fdW5sb2NrKCZkb21haW4tPmxvY2spOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtZF9pb21tdV9wZF9sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlc2V0X2lvbW11X2NvbW1hbmRfYnVmZmVyKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQotewotCXByX2VycigiQU1ELVZpOiBSZXNldHRpbmcgSU9NTVUgY29tbWFuZCBidWZmZXJcbiIpOwotCi0JaWYgKGlvbW11LT5yZXNldF9pbl9wcm9ncmVzcykKLQkJcGFuaWMoIkFNRC1WaTogSUxMRUdBTF9DT01NQU5EX0VSUk9SIHdoaWxlIHJlc2V0dGluZyBjb21tYW5kIGJ1ZmZlclxuIik7Ci0KLQlhbWRfaW9tbXVfcmVzZXRfY21kX2J1ZmZlcihpb21tdSk7Ci0JYW1kX2lvbW11X2ZsdXNoX2FsbF9kZXZpY2VzKCk7Ci0JYW1kX2lvbW11X2ZsdXNoX2FsbF9kb21haW5zKCk7Ci0KLQlpb21tdS0+cmVzZXRfaW5fcHJvZ3Jlc3MgPSBmYWxzZTsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBUaGUgZnVuY3Rpb25zIGJlbG93IGFyZSB1c2VkIHRoZSBjcmVhdGUgdGhlIHBhZ2UgdGFibGUgbWFwcGluZ3MgZm9yCkBAIC0xNDEwLDE3ICsxNDc3LDIyIEBACiAJcmV0dXJuIGRvbWFpbi0+ZmxhZ3MgJiBQRF9ETUFfT1BTX01BU0s7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9kdGVfZW50cnkodTE2IGRldmlkLCBzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbikKK3N0YXRpYyB2b2lkIHNldF9kdGVfZW50cnkodTE2IGRldmlkLCBzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbiwgYm9vbCBhdHMpCiB7CiAJdTY0IHB0ZV9yb290ID0gdmlydF90b19waHlzKGRvbWFpbi0+cHRfcm9vdCk7CisJdTMyIGZsYWdzID0gMDsKIAogCXB0ZV9yb290IHw9IChkb21haW4tPm1vZGUgJiBERVZfRU5UUllfTU9ERV9NQVNLKQogCQkgICAgPDwgREVWX0VOVFJZX01PREVfU0hJRlQ7CiAJcHRlX3Jvb3QgfD0gSU9NTVVfUFRFX0lSIHwgSU9NTVVfUFRFX0lXIHwgSU9NTVVfUFRFX1AgfCBJT01NVV9QVEVfVFY7CiAKLQlhbWRfaW9tbXVfZGV2X3RhYmxlW2RldmlkXS5kYXRhWzJdID0gZG9tYWluLT5pZDsKLQlhbWRfaW9tbXVfZGV2X3RhYmxlW2RldmlkXS5kYXRhWzFdID0gdXBwZXJfMzJfYml0cyhwdGVfcm9vdCk7Ci0JYW1kX2lvbW11X2Rldl90YWJsZVtkZXZpZF0uZGF0YVswXSA9IGxvd2VyXzMyX2JpdHMocHRlX3Jvb3QpOworCWlmIChhdHMpCisJCWZsYWdzIHw9IERURV9GTEFHX0lPVExCOworCisJYW1kX2lvbW11X2Rldl90YWJsZVtkZXZpZF0uZGF0YVszXSB8PSBmbGFnczsKKwlhbWRfaW9tbXVfZGV2X3RhYmxlW2RldmlkXS5kYXRhWzJdICA9IGRvbWFpbi0+aWQ7CisJYW1kX2lvbW11X2Rldl90YWJsZVtkZXZpZF0uZGF0YVsxXSAgPSB1cHBlcl8zMl9iaXRzKHB0ZV9yb290KTsKKwlhbWRfaW9tbXVfZGV2X3RhYmxlW2RldmlkXS5kYXRhWzBdICA9IGxvd2VyXzMyX2JpdHMocHRlX3Jvb3QpOwogfQogCiBzdGF0aWMgdm9pZCBjbGVhcl9kdGVfZW50cnkodTE2IGRldmlkKQpAQCAtMTQzNywzNCArMTUwOSw0MiBAQAogewogCXN0cnVjdCBpb21tdV9kZXZfZGF0YSAqZGV2X2RhdGE7CiAJc3RydWN0IGFtZF9pb21tdSAqaW9tbXU7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJYm9vbCBhdHMgPSBmYWxzZTsKIAl1MTYgZGV2aWQ7CiAKIAlkZXZpZCAgICA9IGdldF9kZXZpY2VfaWQoZGV2KTsKIAlpb21tdSAgICA9IGFtZF9pb21tdV9ybG9va3VwX3RhYmxlW2RldmlkXTsKIAlkZXZfZGF0YSA9IGdldF9kZXZfZGF0YShkZXYpOworCXBkZXYgICAgID0gdG9fcGNpX2RldihkZXYpOworCisJaWYgKGFtZF9pb21tdV9pb3RsYl9zdXApCisJCWF0cyA9IHBjaV9hdHNfZW5hYmxlZChwZGV2KTsKIAogCS8qIFVwZGF0ZSBkYXRhIHN0cnVjdHVyZXMgKi8KIAlkZXZfZGF0YS0+ZG9tYWluID0gZG9tYWluOwogCWxpc3RfYWRkKCZkZXZfZGF0YS0+bGlzdCwgJmRvbWFpbi0+ZGV2X2xpc3QpOwotCXNldF9kdGVfZW50cnkoZGV2aWQsIGRvbWFpbik7CisJc2V0X2R0ZV9lbnRyeShkZXZpZCwgZG9tYWluLCBhdHMpOwogCiAJLyogRG8gcmVmZXJlbmNlIGNvdW50aW5nICovCiAJZG9tYWluLT5kZXZfaW9tbXVbaW9tbXUtPmluZGV4XSArPSAxOwogCWRvbWFpbi0+ZGV2X2NudCAgICAgICAgICAgICAgICAgKz0gMTsKIAogCS8qIEZsdXNoIHRoZSBEVEUgZW50cnkgKi8KLQlpb21tdV9mbHVzaF9kZXZpY2UoZGV2KTsKKwlkZXZpY2VfZmx1c2hfZHRlKGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIGRvX2RldGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlvbW11X2Rldl9kYXRhICpkZXZfZGF0YTsKIAlzdHJ1Y3QgYW1kX2lvbW11ICppb21tdTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAl1MTYgZGV2aWQ7CiAKIAlkZXZpZCAgICA9IGdldF9kZXZpY2VfaWQoZGV2KTsKIAlpb21tdSAgICA9IGFtZF9pb21tdV9ybG9va3VwX3RhYmxlW2RldmlkXTsKIAlkZXZfZGF0YSA9IGdldF9kZXZfZGF0YShkZXYpOworCXBkZXYgICAgID0gdG9fcGNpX2RldihkZXYpOwogCiAJLyogZGVjcmVhc2UgcmVmZXJlbmNlIGNvdW50ZXJzICovCiAJZGV2X2RhdGEtPmRvbWFpbi0+ZGV2X2lvbW11W2lvbW11LT5pbmRleF0gLT0gMTsKQEAgLTE0NzYsNyArMTU1Niw3IEBACiAJY2xlYXJfZHRlX2VudHJ5KGRldmlkKTsKIAogCS8qIEZsdXNoIHRoZSBEVEUgZW50cnkgKi8KLQlpb21tdV9mbHVzaF9kZXZpY2UoZGV2KTsKKwlkZXZpY2VfZmx1c2hfZHRlKGRldik7CiB9CiAKIC8qCkBAIC0xNTM5LDkgKzE2MTksMTMgQEAKIHN0YXRpYyBpbnQgYXR0YWNoX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW4pCiB7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCisJaWYgKGFtZF9pb21tdV9pb3RsYl9zdXApCisJCXBjaV9lbmFibGVfYXRzKHBkZXYsIFBBR0VfU0hJRlQpOworCiAJd3JpdGVfbG9ja19pcnFzYXZlKCZhbWRfaW9tbXVfZGV2dGFibGVfbG9jaywgZmxhZ3MpOwogCXJldCA9IF9fYXR0YWNoX2RldmljZShkZXYsIGRvbWFpbik7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFtZF9pb21tdV9kZXZ0YWJsZV9sb2NrLCBmbGFncyk7CkBAIC0xNTUxLDcgKzE2MzUsNyBAQAogCSAqIGxlZnQgdGhlIGNhY2hlcyBpbiB0aGUgSU9NTVUgZGlydHkuIFNvIHdlIGhhdmUgdG8gZmx1c2gKIAkgKiBoZXJlIHRvIGV2aWN0IGFsbCBkaXJ0eSBzdHVmZi4KIAkgKi8KLQlpb21tdV9mbHVzaF90bGJfcGRlKGRvbWFpbik7CisJZG9tYWluX2ZsdXNoX3RsYl9wZGUoZG9tYWluKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNTk4LDEyICsxNjgyLDE2IEBACiAgKi8KIHN0YXRpYyB2b2lkIGRldGFjaF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBsb2NrIGRldmljZSB0YWJsZSAqLwogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYW1kX2lvbW11X2RldnRhYmxlX2xvY2ssIGZsYWdzKTsKIAlfX2RldGFjaF9kZXZpY2UoZGV2KTsKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYW1kX2lvbW11X2RldnRhYmxlX2xvY2ssIGZsYWdzKTsKKworCWlmIChhbWRfaW9tbXVfaW90bGJfc3VwICYmIHBjaV9hdHNfZW5hYmxlZChwZGV2KSkKKwkJcGNpX2Rpc2FibGVfYXRzKHBkZXYpOwogfQogCiAvKgpAQCAtMTY5Miw3ICsxNzgwLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaW9tbXVfZmx1c2hfZGV2aWNlKGRldik7CisJZGV2aWNlX2ZsdXNoX2R0ZShkZXYpOwogCWlvbW11X2NvbXBsZXRpb25fd2FpdChpb21tdSk7CiAKIG91dDoKQEAgLTE3NTMsOCArMTg0MSw5IEBACiAJc3RydWN0IGlvbW11X2Rldl9kYXRhICpkZXZfZGF0YTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2X2RhdGEsICZkb21haW4tPmRldl9saXN0LCBsaXN0KSB7CisJCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXZfZGF0YS0+ZGV2KTsKIAkJdTE2IGRldmlkID0gZ2V0X2RldmljZV9pZChkZXZfZGF0YS0+ZGV2KTsKLQkJc2V0X2R0ZV9lbnRyeShkZXZpZCwgZG9tYWluKTsKKwkJc2V0X2R0ZV9lbnRyeShkZXZpZCwgZG9tYWluLCBwY2lfYXRzX2VuYWJsZWQocGRldikpOwogCX0KIH0KIApAQCAtMTc2NCw4ICsxODUzLDkgQEAKIAkJcmV0dXJuOwogCiAJdXBkYXRlX2RldmljZV90YWJsZShkb21haW4pOwotCWlvbW11X2ZsdXNoX2RvbWFpbl9kZXZpY2VzKGRvbWFpbik7Ci0JaW9tbXVfZmx1c2hfdGxiX3BkZShkb21haW4pOworCisJZG9tYWluX2ZsdXNoX2RldmljZXMoZG9tYWluKTsKKwlkb21haW5fZmx1c2hfdGxiX3BkZShkb21haW4pOwogCiAJZG9tYWluLT51cGRhdGVkID0gZmFsc2U7CiB9CkBAIC0xOTI0LDEwICsyMDE0LDEwIEBACiAJQUREX1NUQVRTX0NPVU5URVIoYWxsb2NlZF9pb19tZW0sIHNpemUpOwogCiAJaWYgKHVubGlrZWx5KGRtYV9kb20tPm5lZWRfZmx1c2ggJiYgIWFtZF9pb21tdV91bm1hcF9mbHVzaCkpIHsKLQkJaW9tbXVfZmx1c2hfdGxiKCZkbWFfZG9tLT5kb21haW4pOworCQlkb21haW5fZmx1c2hfdGxiKCZkbWFfZG9tLT5kb21haW4pOwogCQlkbWFfZG9tLT5uZWVkX2ZsdXNoID0gZmFsc2U7CiAJfSBlbHNlIGlmICh1bmxpa2VseShhbWRfaW9tbXVfbnBfY2FjaGUpKQotCQlpb21tdV9mbHVzaF9wYWdlcygmZG1hX2RvbS0+ZG9tYWluLCBhZGRyZXNzLCBzaXplKTsKKwkJZG9tYWluX2ZsdXNoX3BhZ2VzKCZkbWFfZG9tLT5kb21haW4sIGFkZHJlc3MsIHNpemUpOwogCiBvdXQ6CiAJcmV0dXJuIGFkZHJlc3M7CkBAIC0xOTc2LDcgKzIwNjYsNyBAQAogCWRtYV9vcHNfZnJlZV9hZGRyZXNzZXMoZG1hX2RvbSwgZG1hX2FkZHIsIHBhZ2VzKTsKIAogCWlmIChhbWRfaW9tbXVfdW5tYXBfZmx1c2ggfHwgZG1hX2RvbS0+bmVlZF9mbHVzaCkgewotCQlpb21tdV9mbHVzaF9wYWdlcygmZG1hX2RvbS0+ZG9tYWluLCBmbHVzaF9hZGRyLCBzaXplKTsKKwkJZG9tYWluX2ZsdXNoX3BhZ2VzKCZkbWFfZG9tLT5kb21haW4sIGZsdXNoX2FkZHIsIHNpemUpOwogCQlkbWFfZG9tLT5uZWVkX2ZsdXNoID0gZmFsc2U7CiAJfQogfQpAQCAtMjAxMiw3ICsyMTAyLDcgQEAKIAlpZiAoYWRkciA9PSBETUFfRVJST1JfQ09ERSkKIAkJZ290byBvdXQ7CiAKLQlpb21tdV9mbHVzaF9jb21wbGV0ZShkb21haW4pOworCWRvbWFpbl9mbHVzaF9jb21wbGV0ZShkb21haW4pOwogCiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG9tYWluLT5sb2NrLCBmbGFncyk7CkBAIC0yMDM5LDcgKzIxMjksNyBAQAogCiAJX191bm1hcF9zaW5nbGUoZG9tYWluLT5wcml2LCBkbWFfYWRkciwgc2l6ZSwgZGlyKTsKIAotCWlvbW11X2ZsdXNoX2NvbXBsZXRlKGRvbWFpbik7CisJZG9tYWluX2ZsdXNoX2NvbXBsZXRlKGRvbWFpbik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkb21haW4tPmxvY2ssIGZsYWdzKTsKIH0KQEAgLTIxMDQsNyArMjE5NCw3IEBACiAJCQlnb3RvIHVubWFwOwogCX0KIAotCWlvbW11X2ZsdXNoX2NvbXBsZXRlKGRvbWFpbik7CisJZG9tYWluX2ZsdXNoX2NvbXBsZXRlKGRvbWFpbik7CiAKIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkb21haW4tPmxvY2ssIGZsYWdzKTsKQEAgLTIxNTAsNyArMjI0MCw3IEBACiAJCXMtPmRtYV9hZGRyZXNzID0gcy0+ZG1hX2xlbmd0aCA9IDA7CiAJfQogCi0JaW9tbXVfZmx1c2hfY29tcGxldGUoZG9tYWluKTsKKwlkb21haW5fZmx1c2hfY29tcGxldGUoZG9tYWluKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRvbWFpbi0+bG9jaywgZmxhZ3MpOwogfQpAQCAtMjIwMCw3ICsyMjkwLDcgQEAKIAkJZ290byBvdXRfZnJlZTsKIAl9CiAKLQlpb21tdV9mbHVzaF9jb21wbGV0ZShkb21haW4pOworCWRvbWFpbl9mbHVzaF9jb21wbGV0ZShkb21haW4pOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG9tYWluLT5sb2NrLCBmbGFncyk7CiAKQEAgLTIyMzIsNyArMjMyMiw3IEBACiAKIAlfX3VubWFwX3NpbmdsZShkb21haW4tPnByaXYsIGRtYV9hZGRyLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCk7CiAKLQlpb21tdV9mbHVzaF9jb21wbGV0ZShkb21haW4pOworCWRvbWFpbl9mbHVzaF9jb21wbGV0ZShkb21haW4pOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG9tYWluLT5sb2NrLCBmbGFncyk7CiAKQEAgLTI0NzYsNyArMjU2Niw3IEBACiAJaWYgKCFpb21tdSkKIAkJcmV0dXJuOwogCi0JaW9tbXVfZmx1c2hfZGV2aWNlKGRldik7CisJZGV2aWNlX2ZsdXNoX2R0ZShkZXYpOwogCWlvbW11X2NvbXBsZXRpb25fd2FpdChpb21tdSk7CiB9CiAKQEAgLTI1NDIsNyArMjYzMiw3IEBACiAJdW5tYXBfc2l6ZSA9IGlvbW11X3VubWFwX3BhZ2UoZG9tYWluLCBpb3ZhLCBwYWdlX3NpemUpOwogCW11dGV4X3VubG9jaygmZG9tYWluLT5hcGlfbG9jayk7CiAKLQlpb21tdV9mbHVzaF90bGJfcGRlKGRvbWFpbik7CisJZG9tYWluX2ZsdXNoX3RsYl9wZGUoZG9tYWluKTsKIAogCXJldHVybiBnZXRfb3JkZXIodW5tYXBfc2l6ZSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jCmluZGV4IDI0NmQ3MjcuLjkxNzljMjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jCkBAIC0xMzcsNiArMTM3LDcgQEAKIAogLyogSU9NTVVzIGhhdmUgYSBub24tcHJlc2VudCBjYWNoZT8gKi8KIGJvb2wgYW1kX2lvbW11X25wX2NhY2hlIF9fcmVhZF9tb3N0bHk7Citib29sIGFtZF9pb21tdV9pb3RsYl9zdXAgX19yZWFkX21vc3RseSA9IHRydWU7CiAKIC8qCiAgKiBUaGUgQUNQSSB0YWJsZSBwYXJzaW5nIGZ1bmN0aW9ucyBzZXQgdGhpcyB2YXJpYWJsZSBvbiBhbiBlcnJvcgpAQCAtMTgwLDYgKzE4MSwxMiBAQAogc3RhdGljIHUzMiBhbGlhc190YWJsZV9zaXplOwkvKiBzaXplIG9mIHRoZSBhbGlhcyB0YWJsZSAqLwogc3RhdGljIHUzMiBybG9va3VwX3RhYmxlX3NpemU7CS8qIHNpemUgaWYgdGhlIHJsb29rdXAgdGFibGUgKi8KIAorLyoKKyAqIFRoaXMgZnVuY3Rpb24gZmx1c2hlcyBhbGwgaW50ZXJuYWwgY2FjaGVzIG9mCisgKiB0aGUgSU9NTVUgdXNlZCBieSB0aGlzIGRyaXZlci4KKyAqLworZXh0ZXJuIHZvaWQgaW9tbXVfZmx1c2hfYWxsX2NhY2hlcyhzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSk7CisKIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfbGFzdF9kZXZpZCh1MTYgZGV2aWQpCiB7CiAJaWYgKGRldmlkID4gYW1kX2lvbW11X2xhc3RfYmRmKQpAQCAtMjkzLDkgKzMwMCwyMyBAQAogLyogRnVuY3Rpb24gdG8gZW5hYmxlIHRoZSBoYXJkd2FyZSAqLwogc3RhdGljIHZvaWQgaW9tbXVfZW5hYmxlKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQogewotCXByaW50ayhLRVJOX0lORk8gIkFNRC1WaTogRW5hYmxpbmcgSU9NTVUgYXQgJXMgY2FwIDB4JWh4XG4iLAorCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmVhdF9zdHJbXSA9IHsKKwkJIlByZUYiLCAiUFBSIiwgIlgyQVBJQyIsICJOWCIsICJHVCIsICJbNV0iLAorCQkiSUEiLCAiR0EiLCAiSEUiLCAiUEMiLCBOVUxMCisJfTsKKwlpbnQgaTsKKworCXByaW50ayhLRVJOX0lORk8gIkFNRC1WaTogRW5hYmxpbmcgSU9NTVUgYXQgJXMgY2FwIDB4JWh4IiwKIAkgICAgICAgZGV2X25hbWUoJmlvbW11LT5kZXYtPmRldiksIGlvbW11LT5jYXBfcHRyKTsKIAorCWlmIChpb21tdS0+Y2FwICYgKDEgPDwgSU9NTVVfQ0FQX0VGUikpIHsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiIGV4dGVuZGVkIGZlYXR1cmVzOiAiKTsKKwkJZm9yIChpID0gMDsgZmVhdF9zdHJbaV07ICsraSkKKwkJCWlmIChpb21tdV9mZWF0dXJlKGlvbW11LCAoMVVMTCA8PCBpKSkpCisJCQkJcHJpbnRrKEtFUk5fQ09OVCAiICVzIiwgZmVhdF9zdHJbaV0pOworCX0KKwlwcmludGsoS0VSTl9DT05UICJcbiIpOworCiAJaW9tbXVfZmVhdHVyZV9lbmFibGUoaW9tbXUsIENPTlRST0xfSU9NTVVfRU4pOwogfQogCkBAIC02NTEsNyArNjcyLDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBpbml0X2lvbW11X2Zyb21fcGNpKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQogewogCWludCBjYXBfcHRyID0gaW9tbXUtPmNhcF9wdHI7Ci0JdTMyIHJhbmdlLCBtaXNjOworCXUzMiByYW5nZSwgbWlzYywgbG93LCBoaWdoOwogCWludCBpLCBqOwogCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGlvbW11LT5kZXYsIGNhcF9wdHIgKyBNTUlPX0NBUF9IRFJfT0ZGU0VULApAQCAtNjY3LDYgKzY4OCwxNSBAQAogCQkJCQlNTUlPX0dFVF9MRChyYW5nZSkpOwogCWlvbW11LT5ldnRfbXNpX251bSA9IE1NSU9fTVNJX05VTShtaXNjKTsKIAorCWlmICghKGlvbW11LT5jYXAgJiAoMSA8PCBJT01NVV9DQVBfSU9UTEIpKSkKKwkJYW1kX2lvbW11X2lvdGxiX3N1cCA9IGZhbHNlOworCisJLyogcmVhZCBleHRlbmRlZCBmZWF0dXJlIGJpdHMgKi8KKwlsb3cgID0gcmVhZGwoaW9tbXUtPm1taW9fYmFzZSArIE1NSU9fRVhUX0ZFQVRVUkVTKTsKKwloaWdoID0gcmVhZGwoaW9tbXUtPm1taW9fYmFzZSArIE1NSU9fRVhUX0ZFQVRVUkVTICsgNCk7CisKKwlpb21tdS0+ZmVhdHVyZXMgPSAoKHU2NCloaWdoIDw8IDMyKSB8IGxvdzsKKwogCWlmICghaXNfcmQ4OTBfaW9tbXUoaW9tbXUtPmRldikpCiAJCXJldHVybjsKIApAQCAtMTAwNCwxMCArMTAzNCwxMSBAQAogCWlmIChwY2lfZW5hYmxlX21zaShpb21tdS0+ZGV2KSkKIAkJcmV0dXJuIDE7CiAKLQlyID0gcmVxdWVzdF9pcnEoaW9tbXUtPmRldi0+aXJxLCBhbWRfaW9tbXVfaW50X2hhbmRsZXIsCi0JCQlJUlFGX1NBTVBMRV9SQU5ET00sCi0JCQkiQU1ELVZpIiwKLQkJCU5VTEwpOworCXIgPSByZXF1ZXN0X3RocmVhZGVkX2lycShpb21tdS0+ZGV2LT5pcnEsCisJCQkJIGFtZF9pb21tdV9pbnRfaGFuZGxlciwKKwkJCQkgYW1kX2lvbW11X2ludF90aHJlYWQsCisJCQkJIDAsICJBTUQtVmkiLAorCQkJCSBpb21tdS0+ZGV2KTsKIAogCWlmIChyKSB7CiAJCXBjaV9kaXNhYmxlX21zaShpb21tdS0+ZGV2KTsKQEAgLTEyNDQsNiArMTI3NSw3IEBACiAJCWlvbW11X3NldF9leGNsdXNpb25fcmFuZ2UoaW9tbXUpOwogCQlpb21tdV9pbml0X21zaShpb21tdSk7CiAJCWlvbW11X2VuYWJsZShpb21tdSk7CisJCWlvbW11X2ZsdXNoX2FsbF9jYWNoZXMoaW9tbXUpOwogCX0KIH0KIApAQCAtMTI3NCw4ICsxMzA2LDggQEAKIAkgKiB3ZSBoYXZlIHRvIGZsdXNoIGFmdGVyIHRoZSBJT01NVXMgYXJlIGVuYWJsZWQgYmVjYXVzZSBhCiAJICogZGlzYWJsZWQgSU9NTVUgd2lsbCBuZXZlciBleGVjdXRlIHRoZSBjb21tYW5kcyB3ZSBzZW5kCiAJICovCi0JYW1kX2lvbW11X2ZsdXNoX2FsbF9kZXZpY2VzKCk7Ci0JYW1kX2lvbW11X2ZsdXNoX2FsbF9kb21haW5zKCk7CisJZm9yX2VhY2hfaW9tbXUoaW9tbXUpCisJCWlvbW11X2ZsdXNoX2FsbF9jYWNoZXMoaW9tbXUpOwogfQogCiBzdGF0aWMgaW50IGFtZF9pb21tdV9zdXNwZW5kKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBiX3RpbWVyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBiX3RpbWVyLmMKaW5kZXggY2QxZmZlZC4uMjg5ZTkyOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwYl90aW1lci5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGJfdGltZXIuYwpAQCAtMTc3LDcgKzE3Nyw2IEBACiAJLnJhdGluZwkJPSBBUEJUX0NMT0NLU09VUkNFX1JBVElORywKIAkucmVhZAkJPSBhcGJ0X3JlYWRfY2xvY2tzb3VyY2UsCiAJLm1hc2sJCT0gQVBCVF9NQVNLLAotCS5zaGlmdAkJPSBBUEJUX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIAkucmVzdW1lCQk9IGFwYnRfcmVzdGFydF9jbG9ja3NvdXJjZSwKIH07CkBAIC01NDMsMTQgKzU0Miw3IEBACiAJaWYgKHQxID09IGFwYnRfcmVhZF9jbG9ja3NvdXJjZSgmY2xvY2tzb3VyY2VfYXBidCkpCiAJCXBhbmljKCJBUEJUIGNvdW50ZXIgbm90IGNvdW50aW5nLiBBUEJUIGRpc2FibGVkXG4iKTsKIAotCS8qCi0JICogaW5pdGlhbGl6ZSBhbmQgcmVnaXN0ZXIgQVBCVCBjbG9ja3NvdXJjZQotCSAqIGNvbnZlcnQgdGhhdCB0byBucy9jbG9jayBjeWNsZQotCSAqIG11bHQgPSAobnMvYykgKiAyXkFQQlRfU0hJRlQKLQkgKi8KLQljbG9ja3NvdXJjZV9hcGJ0Lm11bHQgPSBkaXZfc2MoTVNFQ19QRVJfU0VDLAotCQkJCSAgICAgICAodW5zaWduZWQgbG9uZykgYXBidF9mcmVxLCBBUEJUX1NISUZUKTsKLQljbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfYXBidCk7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfa2h6KCZjbG9ja3NvdXJjZV9hcGJ0LCAodTMyKWFwYnRfZnJlcSoxMDAwKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwZXJ0dXJlXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBlcnR1cmVfNjQuYwppbmRleCA3M2ZiNDY5Li4zZDI2NjFjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBlcnR1cmVfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBlcnR1cmVfNjQuYwpAQCAtMzAsNiArMzAsMjIgQEAKICNpbmNsdWRlIDxhc20vYW1kX25iLmg+CiAjaW5jbHVkZSA8YXNtL3g4Nl9pbml0Lmg+CiAKKy8qCisgKiBVc2luZyA1MTJNIGFzIGdvYWwsIGluIGNhc2Uga2V4ZWMgd2lsbCBsb2FkIGtlcm5lbF9iaWcKKyAqIHRoYXQgd2lsbCBkbyB0aGUgb24tcG9zaXRpb24gZGVjb21wcmVzcywgYW5kIGNvdWxkIG92ZXJsYXAgd2l0aAorICogd2l0aCB0aGUgZ2FydCBhcGVydHVyZSB0aGF0IGlzIHVzZWQuCisgKiBTZXF1ZW5jZToKKyAqIGtlcm5lbF9zbWFsbAorICogPT0+IGtleGVjICh3aXRoIGtkdW1wIHRyaWdnZXIgcGF0aCBvciBnYXJ0IHN0aWxsIGVuYWJsZWQpCisgKiA9PT4ga2VybmVsX3NtYWxsIChnYXJ0IGFyZWEgYmVjb21lIGU4MjBfcmVzZXJ2ZWQpCisgKiA9PT4ga2V4ZWMgKHdpdGgga2R1bXAgdHJpZ2dlciBwYXRoIG9yIGdhcnQgc3RpbGwgZW5hYmxlZCkKKyAqID09PiBrZXJuZV9iaWcgKHVuY29tcHJlc3NlZCBzaXplIHdpbGwgYmUgYmlnIHRoYW4gNjRNIG9yIDEyOE0pCisgKiBTbyBkb24ndCB1c2UgNTEyTSBiZWxvdyBhcyBnYXJ0IGlvbW11LCBsZWF2ZSB0aGUgc3BhY2UgZm9yIGtlcm5lbAorICogY29kZSBmb3Igc2FmZS4KKyAqLworI2RlZmluZSBHQVJUX01JTl9BRERSCSg1MTJVTEwgPDwgMjApCisjZGVmaW5lIEdBUlRfTUFYX0FERFIJKDFVTEwgICA8PCAzMikKKwogaW50IGdhcnRfaW9tbXVfYXBlcnR1cmU7CiBpbnQgZ2FydF9pb21tdV9hcGVydHVyZV9kaXNhYmxlZCBfX2luaXRkYXRhOwogaW50IGdhcnRfaW9tbXVfYXBlcnR1cmVfYWxsb3dlZCBfX2luaXRkYXRhOwpAQCAtNzAsMjEgKzg2LDkgQEAKIAkgKiBtZW1vcnkuIFVuZm9ydHVuYXRlbHkgd2UgY2Fubm90IG1vdmUgaXQgdXAgYmVjYXVzZSB0aGF0IHdvdWxkCiAJICogbWFrZSB0aGUgSU9NTVUgdXNlbGVzcy4KIAkgKi8KLQkvKgotCSAqIHVzaW5nIDUxMk0gYXMgZ29hbCwgaW4gY2FzZSBrZXhlYyB3aWxsIGxvYWQga2VybmVsX2JpZwotCSAqIHRoYXQgd2lsbCBkbyB0aGUgb24gcG9zaXRpb24gZGVjb21wcmVzcywgYW5kICBjb3VsZCBvdmVybGFwIHdpdGgKLQkgKiB0aGF0IHBvc2l0aW9uIHdpdGggZ2FydCB0aGF0IGlzIHVzZWQuCi0JICogc2VxdWVuZGU6Ci0JICoga2VybmVsX3NtYWxsCi0JICogPT0+IGtleGVjICh3aXRoIGtkdW1wIHRyaWdnZXIgcGF0aCBvciBwcmV2aW91cyBkb2Vzbid0IHNodXRkb3duIGdhcnQpCi0JICogPT0+IGtlcm5lbF9zbWFsbChnYXJ0IGFyZWEgYmVjb21lIGU4MjBfcmVzZXJ2ZWQpCi0JICogPT0+IGtleGVjICh3aXRoIGtkdW1wIHRyaWdnZXIgcGF0aCBvciBwcmV2aW91cyBkb2Vzbid0IHNodXRkb3duIGdhcnQpCi0JICogPT0+IGtlcm5lX2JpZyAodW5jb21wcmVzc2VkIHNpemUgd2lsbCBiZSBiaWcgdGhhbiA2NE0gb3IgMTI4TSkKLQkgKiBzbyBkb24ndCB1c2UgNTEyTSBiZWxvdyBhcyBnYXJ0IGlvbW11LCBsZWF2ZSB0aGUgc3BhY2UgZm9yIGtlcm5lbAotCSAqIGNvZGUgZm9yIHNhZmUKLQkgKi8KLQlhZGRyID0gbWVtYmxvY2tfZmluZF9pbl9yYW5nZSgwLCAxVUxMPDwzMiwgYXBlcl9zaXplLCA1MTJVTEw8PDIwKTsKLQlpZiAoYWRkciA9PSBNRU1CTE9DS19FUlJPUiB8fCBhZGRyICsgYXBlcl9zaXplID4gMHhmZmZmZmZmZikgeworCWFkZHIgPSBtZW1ibG9ja19maW5kX2luX3JhbmdlKEdBUlRfTUlOX0FERFIsIEdBUlRfTUFYX0FERFIsCisJCQkJICAgICAgYXBlcl9zaXplLCBhcGVyX3NpemUpOworCWlmIChhZGRyID09IE1FTUJMT0NLX0VSUk9SIHx8IGFkZHIgKyBhcGVyX3NpemUgPiBHQVJUX01BWF9BRERSKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkJIkNhbm5vdCBhbGxvY2F0ZSBhcGVydHVyZSBtZW1vcnkgaG9sZSAoJWx4LCV1SylcbiIsCiAJCQkJYWRkciwgYXBlcl9zaXplPj4xMCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKaW5kZXggZmFiZjAxZS4uZjkyYThlNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYwpAQCAtNTA1LDcgKzUwNSw3IEBACiB7CiAJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqbGV2dCA9ICZfX2dldF9jcHVfdmFyKGxhcGljX2V2ZW50cyk7CiAKLQlpZiAoY3B1X2hhcyhfX3RoaXNfY3B1X3B0cigmY3B1X2luZm8pLCBYODZfRkVBVFVSRV9BUkFUKSkgeworCWlmICh0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVJBVCkpIHsKIAkJbGFwaWNfY2xvY2tldmVudC5mZWF0dXJlcyAmPSB+Q0xPQ0tfRVZUX0ZFQVRfQzNTVE9QOwogCQkvKiBNYWtlIExBUElDIHRpbWVyIHByZWZlcnJhYmxlIG92ZXIgcGVyY3B1IEhQRVQgKi8KIAkJbGFwaWNfY2xvY2tldmVudC5yYXRpbmcgPSAxNTA7CkBAIC0xMjM3LDYgKzEyMzcsMTcgQEAKIAkvKiBhbHdheXMgdXNlIHRoZSB2YWx1ZSBmcm9tIExEUiAqLwogCWVhcmx5X3Blcl9jcHUoeDg2X2NwdV90b19sb2dpY2FsX2FwaWNpZCwgY3B1KSA9CiAJCWxvZ2ljYWxfc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJLyoKKwkgKiBTb21lIE5VTUEgaW1wbGVtZW50YXRpb25zIChOVU1BUSkgZG9uJ3QgaW5pdGlhbGl6ZSBhcGljaWQgdG8KKwkgKiBub2RlIG1hcHBpbmcgZHVyaW5nIE5VTUEgaW5pdC4gIE5vdyB0aGF0IGxvZ2ljYWwgYXBpY2lkIGlzCisJICogZ3VhcmFudGVlZCB0byBiZSBrbm93biwgZ2l2ZSBpdCBhbm90aGVyIGNoYW5jZS4gIFRoaXMgaXMgYWxyZWFkeQorCSAqIGEgYml0IHRvbyBsYXRlIC0gcGVyY3B1IGFsbG9jYXRpb24gaGFzIGFscmVhZHkgaGFwcGVuZWQgd2l0aG91dAorCSAqIHByb3BlciBOVU1BIGFmZmluaXR5LgorCSAqLworCWlmIChhcGljLT54ODZfMzJfbnVtYV9jcHVfbm9kZSkKKwkJc2V0X2FwaWNpZF90b19ub2RlKGVhcmx5X3Blcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSksCisJCQkJICAgYXBpYy0+eDg2XzMyX251bWFfY3B1X25vZGUoY3B1KSk7CiAjZW5kaWYKIAogCS8qCkBAIC0xODEyLDMwICsxODIzLDQxIEBACiAgKi8KIHZvaWQgc21wX2Vycm9yX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQl1MzIgdiwgdjE7CisJdTMyIHYwLCB2MTsKKwl1MzIgaSA9IDA7CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBlcnJvcl9pbnRlcnJ1cHRfcmVhc29uW10gPSB7CisJCSJTZW5kIENTIGVycm9yIiwJCS8qIEFQSUMgRXJyb3IgQml0IDAgKi8KKwkJIlJlY2VpdmUgQ1MgZXJyb3IiLAkJLyogQVBJQyBFcnJvciBCaXQgMSAqLworCQkiU2VuZCBhY2NlcHQgZXJyb3IiLAkJLyogQVBJQyBFcnJvciBCaXQgMiAqLworCQkiUmVjZWl2ZSBhY2NlcHQgZXJyb3IiLAkJLyogQVBJQyBFcnJvciBCaXQgMyAqLworCQkiUmVkaXJlY3RhYmxlIElQSSIsCQkvKiBBUElDIEVycm9yIEJpdCA0ICovCisJCSJTZW5kIGlsbGVnYWwgdmVjdG9yIiwJCS8qIEFQSUMgRXJyb3IgQml0IDUgKi8KKwkJIlJlY2VpdmVkIGlsbGVnYWwgdmVjdG9yIiwJLyogQVBJQyBFcnJvciBCaXQgNiAqLworCQkiSWxsZWdhbCByZWdpc3RlciBhZGRyZXNzIiwJLyogQVBJQyBFcnJvciBCaXQgNyAqLworCX07CiAKIAlleGl0X2lkbGUoKTsKIAlpcnFfZW50ZXIoKTsKIAkvKiBGaXJzdCB0aWNrbGUgdGhlIGhhcmR3YXJlLCBvbmx5IHRoZW4gcmVwb3J0IHdoYXQgd2VudCBvbi4gLS0gUkVXICovCi0JdiA9IGFwaWNfcmVhZChBUElDX0VTUik7CisJdjAgPSBhcGljX3JlYWQoQVBJQ19FU1IpOwogCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOwogCXYxID0gYXBpY19yZWFkKEFQSUNfRVNSKTsKIAlhY2tfQVBJQ19pcnEoKTsKIAlhdG9taWNfaW5jKCZpcnFfZXJyX2NvdW50KTsKIAotCS8qCi0JICogSGVyZSBpcyB3aGF0IHRoZSBBUElDIGVycm9yIGJpdHMgbWVhbjoKLQkgKiAwOiBTZW5kIENTIGVycm9yCi0JICogMTogUmVjZWl2ZSBDUyBlcnJvcgotCSAqIDI6IFNlbmQgYWNjZXB0IGVycm9yCi0JICogMzogUmVjZWl2ZSBhY2NlcHQgZXJyb3IKLQkgKiA0OiBSZXNlcnZlZAotCSAqIDU6IFNlbmQgaWxsZWdhbCB2ZWN0b3IKLQkgKiA2OiBSZWNlaXZlZCBpbGxlZ2FsIHZlY3RvcgotCSAqIDc6IElsbGVnYWwgcmVnaXN0ZXIgYWRkcmVzcwotCSAqLwotCXByX2RlYnVnKCJBUElDIGVycm9yIG9uIENQVSVkOiAlMDJ4KCUwMngpXG4iLAotCQlzbXBfcHJvY2Vzc29yX2lkKCksIHYgLCB2MSk7CisJYXBpY19wcmludGsoQVBJQ19ERUJVRywgS0VSTl9ERUJVRyAiQVBJQyBlcnJvciBvbiBDUFUlZDogJTAyeCglMDJ4KSIsCisJCSAgICBzbXBfcHJvY2Vzc29yX2lkKCksIHYwICwgdjEpOworCisJdjEgPSB2MSAmIDB4ZmY7CisJd2hpbGUgKHYxKSB7CisJCWlmICh2MSAmIDB4MSkKKwkJCWFwaWNfcHJpbnRrKEFQSUNfREVCVUcsIEtFUk5fQ09OVCAiIDogJXMiLCBlcnJvcl9pbnRlcnJ1cHRfcmVhc29uW2ldKTsKKwkJaSsrOworCQl2MSA+Pj0gMTsKKwl9OworCisJYXBpY19wcmludGsoQVBJQ19ERUJVRywgS0VSTl9DT05UICJcbiIpOworCiAJaXJxX2V4aXQoKTsKIH0KIApAQCAtMjAwMywyMSArMjAyNSw2IEBACiAJYXBpY193cml0ZShBUElDX0xEUiwgdmFsKTsKIH0KIAotI2lmZGVmIENPTkZJR19YODZfMzIKLWludCBkZWZhdWx0X3g4Nl8zMl9udW1hX2NwdV9ub2RlKGludCBjcHUpCi17Ci0jaWZkZWYgQ09ORklHX05VTUEKLQlpbnQgYXBpY2lkID0gZWFybHlfcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KTsKLQotCWlmIChhcGljaWQgIT0gQkFEX0FQSUNJRCkKLQkJcmV0dXJuIF9fYXBpY2lkX3RvX25vZGVbYXBpY2lkXTsKLQlyZXR1cm4gTlVNQV9OT19OT0RFOwotI2Vsc2UKLQlyZXR1cm4gMDsKLSNlbmRpZgotfQotI2VuZGlmCi0KIC8qCiAgKiBQb3dlciBtYW5hZ2VtZW50CiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWNfbm9vcC5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpY19ub29wLmMKaW5kZXggZjFiYWEyZC4uNzc1YjgyYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpY19ub29wLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpY19ub29wLmMKQEAgLTExOSwxNCArMTE5LDYgQEAKIAlXQVJOX09OX09OQ0UoY3B1X2hhc19hcGljICYmICFkaXNhYmxlX2FwaWMpOwogfQogCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotc3RhdGljIGludCBub29wX3g4Nl8zMl9udW1hX2NwdV9ub2RlKGludCBjcHUpCi17Ci0JLyogd2UncmUgYWx3YXlzIG9uIG5vZGUgMCAqLwotCXJldHVybiAwOwotfQotI2VuZGlmCi0KIHN0cnVjdCBhcGljIGFwaWNfbm9vcCA9IHsKIAkubmFtZQkJCQk9ICJub29wIiwKIAkucHJvYmUJCQkJPSBub29wX3Byb2JlLApAQCAtMTk1LDYgKzE4Nyw1IEBACiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAJLng4Nl8zMl9lYXJseV9sb2dpY2FsX2FwaWNpZAk9IG5vb3BfeDg2XzMyX2Vhcmx5X2xvZ2ljYWxfYXBpY2lkLAotCS54ODZfMzJfbnVtYV9jcHVfbm9kZQkJPSBub29wX3g4Nl8zMl9udW1hX2NwdV9ub2RlLAogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvYmlnc21wXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9iaWdzbXBfMzIuYwppbmRleCA1NDFhMmU0Li5kODRhYzVhNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvYmlnc21wXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYmlnc21wXzMyLmMKQEAgLTI1Myw1ICsyNTMsNCBAQAogCS5zYWZlX3dhaXRfaWNyX2lkbGUJCT0gbmF0aXZlX3NhZmVfYXBpY193YWl0X2ljcl9pZGxlLAogCiAJLng4Nl8zMl9lYXJseV9sb2dpY2FsX2FwaWNpZAk9IGJpZ3NtcF9lYXJseV9sb2dpY2FsX2FwaWNpZCwKLQkueDg2XzMyX251bWFfY3B1X25vZGUJCT0gZGVmYXVsdF94ODZfMzJfbnVtYV9jcHVfbm9kZSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9lczcwMDBfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2VzNzAwMF8zMi5jCmluZGV4IDNlOWRlNDguLjcwNTMzZGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2VzNzAwMF8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2VzNzAwMF8zMi5jCkBAIC01MTAsMTEgKzUxMCw2IEBACiAJCW5yX2lvYXBpY3MsIGNwdW1hc2tfYml0cyhlczcwMDBfdGFyZ2V0X2NwdXMoKSlbMF0pOwogfQogCi1zdGF0aWMgaW50IGVzNzAwMF9udW1hX2NwdV9ub2RlKGludCBjcHUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgZXM3MDAwX2NwdV9wcmVzZW50X3RvX2FwaWNpZChpbnQgbXBzX2NwdSkKIHsKIAlpZiAoIW1wc19jcHUpCkBAIC02ODgsNyArNjgzLDYgQEAKIAkuc2FmZV93YWl0X2ljcl9pZGxlCQk9IG5hdGl2ZV9zYWZlX2FwaWNfd2FpdF9pY3JfaWRsZSwKIAogCS54ODZfMzJfZWFybHlfbG9naWNhbF9hcGljaWQJPSBlczcwMDBfZWFybHlfbG9naWNhbF9hcGljaWQsCi0JLng4Nl8zMl9udW1hX2NwdV9ub2RlCQk9IGVzNzAwMF9udW1hX2NwdV9ub2RlLAogfTsKIAogc3RydWN0IGFwaWMgX19yZWZkYXRhIGFwaWNfZXM3MDAwID0gewpAQCAtNzUyLDUgKzc0Niw0IEBACiAJLnNhZmVfd2FpdF9pY3JfaWRsZQkJPSBuYXRpdmVfc2FmZV9hcGljX3dhaXRfaWNyX2lkbGUsCiAKIAkueDg2XzMyX2Vhcmx5X2xvZ2ljYWxfYXBpY2lkCT0gZXM3MDAwX2Vhcmx5X2xvZ2ljYWxfYXBpY2lkLAotCS54ODZfMzJfbnVtYV9jcHVfbm9kZQkJPSBlczcwMDBfbnVtYV9jcHVfbm9kZSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKaW5kZXggNjhkZjA5Yi4uNDVmZDMzZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYwpAQCAtMTI4LDggKzEyOCw4IEBACiB9CiBlYXJseV9wYXJhbSgibm9hcGljIiwgcGFyc2Vfbm9hcGljKTsKIAotc3RhdGljIGludCBpb19hcGljX3NldHVwX2lycV9waW5fb25jZSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgbm9kZSwKLQkJCQkgICAgICBzdHJ1Y3QgaW9fYXBpY19pcnFfYXR0ciAqYXR0cik7CitzdGF0aWMgaW50IGlvX2FwaWNfc2V0dXBfaXJxX3Bpbih1bnNpZ25lZCBpbnQgaXJxLCBpbnQgbm9kZSwKKwkJCQkgc3RydWN0IGlvX2FwaWNfaXJxX2F0dHIgKmF0dHIpOwogCiAvKiBXaWxsIGJlIGNhbGxlZCBpbiBtcHBhcnNlL2FjcGkvc2ZpIGNvZGVzIGZvciBzYXZpbmcgSVJRIGluZm8gKi8KIHZvaWQgbXBfc2F2ZV9pcnEoc3RydWN0IG1wY19pbnRzcmMgKm0pCkBAIC0zNTcwLDcgKzM1NzAsNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19IVF9JUlEgKi8KIAotaW50CitzdGF0aWMgaW50CiBpb19hcGljX3NldHVwX2lycV9waW4odW5zaWduZWQgaW50IGlycSwgaW50IG5vZGUsIHN0cnVjdCBpb19hcGljX2lycV9hdHRyICphdHRyKQogewogCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBhbGxvY19pcnFfYW5kX2NmZ19hdChpcnEsIG5vZGUpOwpAQCAtMzU4NSw4ICszNTg1LDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGlvX2FwaWNfc2V0dXBfaXJxX3Bpbl9vbmNlKHVuc2lnbmVkIGludCBpcnEsIGludCBub2RlLAotCQkJCSAgICAgIHN0cnVjdCBpb19hcGljX2lycV9hdHRyICphdHRyKQoraW50IGlvX2FwaWNfc2V0dXBfaXJxX3Bpbl9vbmNlKHVuc2lnbmVkIGludCBpcnEsIGludCBub2RlLAorCQkJICAgICAgIHN0cnVjdCBpb19hcGljX2lycV9hdHRyICphdHRyKQogewogCXVuc2lnbmVkIGludCBpZCA9IGF0dHItPmlvYXBpYywgcGluID0gYXR0ci0+aW9hcGljX3BpbjsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvbnVtYXFfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL251bWFxXzMyLmMKaW5kZXggNjI3M2VlZS4uMzBmMTMzMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvbnVtYXFfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9udW1hcV8zMi5jCkBAIC00OCw4ICs0OCw2IEBACiAjaW5jbHVkZSA8YXNtL2U4MjAuaD4KICNpbmNsdWRlIDxhc20vaXBpLmg+CiAKLSNkZWZpbmUJTUJfVE9fUEFHRVMoYWRkcikJCSgoYWRkcikgPDwgKDIwIC0gUEFHRV9TSElGVCkpCi0KIGludCBmb3VuZF9udW1hcTsKIAogLyoKQEAgLTc5LDMxICs3NywyMCBAQAogc3RhdGljIGlubGluZSB2b2lkIG51bWFxX3JlZ2lzdGVyX25vZGUoaW50IG5vZGUsIHN0cnVjdCBzeXNfY2ZnX2RhdGEgKnNjZCkKIHsKIAlzdHJ1Y3QgZWFjaHF1YWRtZW0gKmVxID0gc2NkLT5lcSArIG5vZGU7CisJdTY0IHN0YXJ0ID0gKHU2NCkoZXEtPmhpX3NocmRfbWVtX3N0YXJ0IC0gZXEtPnByaXZfbWVtX3NpemUpIDw8IDIwOworCXU2NCBlbmQgPSAodTY0KShlcS0+aGlfc2hyZF9tZW1fc3RhcnQgKyBlcS0+aGlfc2hyZF9tZW1fc2l6ZSkgPDwgMjA7CisJaW50IHJldDsKIAotCW5vZGVfc2V0X29ubGluZShub2RlKTsKLQotCS8qIENvbnZlcnQgdG8gcGFnZXMgKi8KLQlub2RlX3N0YXJ0X3Bmbltub2RlXSA9Ci0JCSBNQl9UT19QQUdFUyhlcS0+aGlfc2hyZF9tZW1fc3RhcnQgLSBlcS0+cHJpdl9tZW1fc2l6ZSk7Ci0KLQlub2RlX2VuZF9wZm5bbm9kZV0gPQotCQkgTUJfVE9fUEFHRVMoZXEtPmhpX3NocmRfbWVtX3N0YXJ0ICsgZXEtPmhpX3NocmRfbWVtX3NpemUpOwotCi0JbWVtYmxvY2tfeDg2X3JlZ2lzdGVyX2FjdGl2ZV9yZWdpb25zKG5vZGUsIG5vZGVfc3RhcnRfcGZuW25vZGVdLAotCQkJCQkJbm9kZV9lbmRfcGZuW25vZGVdKTsKLQotCW1lbW9yeV9wcmVzZW50KG5vZGUsIG5vZGVfc3RhcnRfcGZuW25vZGVdLCBub2RlX2VuZF9wZm5bbm9kZV0pOwotCi0Jbm9kZV9yZW1hcF9zaXplW25vZGVdID0gbm9kZV9tZW1tYXBfc2l6ZV9ieXRlcyhub2RlLAotCQkJCQlub2RlX3N0YXJ0X3Bmbltub2RlXSwKLQkJCQkJbm9kZV9lbmRfcGZuW25vZGVdKTsKKwlub2RlX3NldChub2RlLCBudW1hX25vZGVzX3BhcnNlZCk7CisJcmV0ID0gbnVtYV9hZGRfbWVtYmxrKG5vZGUsIHN0YXJ0LCBlbmQpOworCUJVR19PTihyZXQgPCAwKTsKIH0KIAogLyoKICAqIEZ1bmN0aW9uOiBzbXBfZHVtcF9xY3QoKQogICoKICAqIERlc2NyaXB0aW9uOiBnZXRzIG1lbW9yeSBsYXlvdXQgZnJvbSB0aGUgcXVhZCBjb25maWcgdGFibGUuICBUaGlzCi0gKiBmdW5jdGlvbiBhbHNvIHVwZGF0ZXMgbm9kZV9vbmxpbmVfbWFwIHdpdGggdGhlIG5vZGVzIChxdWFkcykgcHJlc2VudC4KKyAqIGZ1bmN0aW9uIGFsc28gdXBkYXRlcyBudW1hX25vZGVzX3BhcnNlZCB3aXRoIHRoZSBub2RlcyAocXVhZHMpIHByZXNlbnQuCiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBzbXBfZHVtcF9xY3Qodm9pZCkKIHsKQEAgLTExMiw3ICs5OSw2IEBACiAKIAlzY2QgPSAodm9pZCAqKV9fdmEoU1lTX0NGR19EQVRBX1BSSVZfQUREUik7CiAKLQlub2Rlc19jbGVhcihub2RlX29ubGluZV9tYXApOwogCWZvcl9lYWNoX25vZGUobm9kZSkgewogCQlpZiAoc2NkLT5xdWFkc19wcmVzZW50MzFfMCAmICgxIDw8IG5vZGUpKQogCQkJbnVtYXFfcmVnaXN0ZXJfbm9kZShub2RlLCBzY2QpOwpAQCAtMjgyLDE0ICsyNjgsMTQgQEAKIAl9CiB9CiAKLWludCBfX2luaXQgZ2V0X21lbWNmZ19udW1hcSh2b2lkKQoraW50IF9faW5pdCBudW1hcV9udW1hX2luaXQodm9pZCkKIHsKIAllYXJseV9jaGVja19udW1hcSgpOwogCWlmICghZm91bmRfbnVtYXEpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVOT0VOVDsKIAlzbXBfZHVtcF9xY3QoKTsKIAotCXJldHVybiAxOworCXJldHVybiAwOwogfQogCiAjZGVmaW5lIE5VTUFRX0FQSUNfREZSX1ZBTFVFCShBUElDX0RGUl9DTFVTVEVSKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzMyLmMKaW5kZXggZmM4NGM3Yi4uNjU0MWU0NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9wcm9iZV8zMi5jCkBAIC0xNzIsNyArMTcyLDYgQEAKIAkuc2FmZV93YWl0X2ljcl9pZGxlCQk9IG5hdGl2ZV9zYWZlX2FwaWNfd2FpdF9pY3JfaWRsZSwKIAogCS54ODZfMzJfZWFybHlfbG9naWNhbF9hcGljaWQJPSBkZWZhdWx0X3g4Nl8zMl9lYXJseV9sb2dpY2FsX2FwaWNpZCwKLQkueDg2XzMyX251bWFfY3B1X25vZGUJCT0gZGVmYXVsdF94ODZfMzJfbnVtYV9jcHVfbm9kZSwKIH07CiAKIGV4dGVybiBzdHJ1Y3QgYXBpYyBhcGljX251bWFxOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvc3VtbWl0XzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9zdW1taXRfMzIuYwppbmRleCBlNGI4MDU5Li4zNWJjZDdkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9zdW1taXRfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9zdW1taXRfMzIuYwpAQCAtNTUxLDUgKzU1MSw0IEBACiAJLnNhZmVfd2FpdF9pY3JfaWRsZQkJPSBuYXRpdmVfc2FmZV9hcGljX3dhaXRfaWNyX2lkbGUsCiAKIAkueDg2XzMyX2Vhcmx5X2xvZ2ljYWxfYXBpY2lkCT0gc3VtbWl0X2Vhcmx5X2xvZ2ljYWxfYXBpY2lkLAotCS54ODZfMzJfbnVtYV9jcHVfbm9kZQkJPSBkZWZhdWx0X3g4Nl8zMl9udW1hX2NwdV9ub2RlLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCmluZGV4IDMzYjEwYTAuLjdhY2QyZDIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYwpAQCAtMzcsNiArMzcsMTMgQEAKICNpbmNsdWRlIDxhc20vc21wLmg+CiAjaW5jbHVkZSA8YXNtL3g4Nl9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2VtZXJnZW5jeS1yZXN0YXJ0Lmg+CisjaW5jbHVkZSA8YXNtL25taS5oPgorCisvKiBCTUMgc2V0cyBhIGJpdCB0aGlzIE1NUiBub24temVybyBiZWZvcmUgc2VuZGluZyBhbiBOTUkgKi8KKyNkZWZpbmUgVVZIX05NSV9NTVIJCQkJVVZIX1NDUkFUQ0g1CisjZGVmaW5lIFVWSF9OTUlfTU1SX0NMRUFSCQkJKFVWSF9OTUlfTU1SICsgOCkKKyNkZWZpbmUgVVZfTk1JX1BFTkRJTkdfTUFTSwkJCSgxVUwgPDwgNjMpCitERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBjcHVfbGFzdF9ubWlfY291bnQpOwogCiBERUZJTkVfUEVSX0NQVShpbnQsIHgyYXBpY19leHRyYV9iaXRzKTsKIApAQCAtNjQyLDE4ICs2NDksNDYgQEAKICAqLwogaW50IHV2X2hhbmRsZV9ubWkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIHJlYXNvbiwgdm9pZCAqZGF0YSkKIHsKKwl1bnNpZ25lZCBsb25nIHJlYWxfdXZfbm1pOworCWludCBiaWQ7CisKIAlpZiAocmVhc29uICE9IERJRV9OTUlVTktOT1dOKQogCQlyZXR1cm4gTk9USUZZX09LOwogCiAJaWYgKGluX2NyYXNoX2tleGVjKQogCQkvKiBkbyBub3RoaW5nIGlmIGVudGVyaW5nIHRoZSBjcmFzaCBrZXJuZWwgKi8KIAkJcmV0dXJuIE5PVElGWV9PSzsKKwogCS8qCi0JICogVXNlIGEgbG9jayBzbyBvbmx5IG9uZSBjcHUgcHJpbnRzIGF0IGEgdGltZQotCSAqIHRvIHByZXZlbnQgaW50ZXJtaXhlZCBvdXRwdXQuCisJICogRWFjaCBibGFkZSBoYXMgYW4gTU1SIHRoYXQgaW5kaWNhdGVzIHdoZW4gYW4gTk1JIGhhcyBiZWVuIHNlbnQKKwkgKiB0byBjcHVzIG9uIHRoZSBibGFkZS4gSWYgYW4gTk1JIGlzIGRldGVjdGVkLCBhdG9taWNhbGx5CisJICogY2xlYXIgdGhlIE1NUiBhbmQgdXBkYXRlIGEgcGVyLWJsYWRlIE5NSSBjb3VudCB1c2VkIHRvCisJICogY2F1c2UgZWFjaCBjcHUgb24gdGhlIGJsYWRlIHRvIG5vdGljZSBhIG5ldyBOTUkuCisJICovCisJYmlkID0gdXZfbnVtYV9ibGFkZV9pZCgpOworCXJlYWxfdXZfbm1pID0gKHV2X3JlYWRfbG9jYWxfbW1yKFVWSF9OTUlfTU1SKSAmIFVWX05NSV9QRU5ESU5HX01BU0spOworCisJaWYgKHVubGlrZWx5KHJlYWxfdXZfbm1pKSkgeworCQlzcGluX2xvY2soJnV2X2JsYWRlX2luZm9bYmlkXS5ubWlfbG9jayk7CisJCXJlYWxfdXZfbm1pID0gKHV2X3JlYWRfbG9jYWxfbW1yKFVWSF9OTUlfTU1SKSAmIFVWX05NSV9QRU5ESU5HX01BU0spOworCQlpZiAocmVhbF91dl9ubWkpIHsKKwkJCXV2X2JsYWRlX2luZm9bYmlkXS5ubWlfY291bnQrKzsKKwkJCXV2X3dyaXRlX2xvY2FsX21tcihVVkhfTk1JX01NUl9DTEVBUiwgVVZfTk1JX1BFTkRJTkdfTUFTSyk7CisJCX0KKwkJc3Bpbl91bmxvY2soJnV2X2JsYWRlX2luZm9bYmlkXS5ubWlfbG9jayk7CisJfQorCisJaWYgKGxpa2VseShfX2dldF9jcHVfdmFyKGNwdV9sYXN0X25taV9jb3VudCkgPT0gdXZfYmxhZGVfaW5mb1tiaWRdLm5taV9jb3VudCkpCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCV9fZ2V0X2NwdV92YXIoY3B1X2xhc3Rfbm1pX2NvdW50KSA9IHV2X2JsYWRlX2luZm9bYmlkXS5ubWlfY291bnQ7CisKKwkvKgorCSAqIFVzZSBhIGxvY2sgc28gb25seSBvbmUgY3B1IHByaW50cyBhdCBhIHRpbWUuCisJICogVGhpcyBwcmV2ZW50cyBpbnRlcm1peGVkIG91dHB1dC4KIAkgKi8KIAlzcGluX2xvY2soJnV2X25taV9sb2NrKTsKLQlwcl9pbmZvKCJOTUkgc3RhY2sgZHVtcCBjcHUgJXU6XG4iLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCXByX2luZm8oIlVWIE5NSSBzdGFjayBkdW1wIGNwdSAldTpcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJZHVtcF9zdGFjaygpOwogCXNwaW5fdW5sb2NrKCZ1dl9ubWlfbG9jayk7CiAKQEAgLTY2MSw3ICs2OTYsOCBAQAogfQogCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHV2X2R1bXBfc3RhY2tfbm1pX25iID0gewotCS5ub3RpZmllcl9jYWxsCT0gdXZfaGFuZGxlX25taQorCS5ub3RpZmllcl9jYWxsCT0gdXZfaGFuZGxlX25taSwKKwkucHJpb3JpdHkgPSBOTUlfTE9DQUxfTE9XX1BSSU9SIC0gMSwKIH07CiAKIHZvaWQgdXZfcmVnaXN0ZXJfbm1pX25vdGlmaWVyKHZvaWQpCkBAIC03MjAsOCArNzU2LDkgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiVVY6IEZvdW5kICVkIGJsYWRlc1xuIiwgdXZfbnVtX3Bvc3NpYmxlX2JsYWRlcygpKTsKIAogCWJ5dGVzID0gc2l6ZW9mKHN0cnVjdCB1dl9ibGFkZV9pbmZvKSAqIHV2X251bV9wb3NzaWJsZV9ibGFkZXMoKTsKLQl1dl9ibGFkZV9pbmZvID0ga21hbGxvYyhieXRlcywgR0ZQX0tFUk5FTCk7CisJdXZfYmxhZGVfaW5mbyA9IGt6YWxsb2MoYnl0ZXMsIEdGUF9LRVJORUwpOwogCUJVR19PTighdXZfYmxhZGVfaW5mbyk7CisKIAlmb3IgKGJsYWRlID0gMDsgYmxhZGUgPCB1dl9udW1fcG9zc2libGVfYmxhZGVzKCk7IGJsYWRlKyspCiAJCXV2X2JsYWRlX2luZm9bYmxhZGVdLm1lbW9yeV9uaWQgPSAtMTsKIApAQCAtNzQ3LDYgKzc4NCw3IEBACiAJCQl1dl9ibGFkZV9pbmZvW2JsYWRlXS5wbm9kZSA9IHBub2RlOwogCQkJdXZfYmxhZGVfaW5mb1tibGFkZV0ubnJfcG9zc2libGVfY3B1cyA9IDA7CiAJCQl1dl9ibGFkZV9pbmZvW2JsYWRlXS5ucl9vbmxpbmVfY3B1cyA9IDA7CisJCQlzcGluX2xvY2tfaW5pdCgmdXZfYmxhZGVfaW5mb1tibGFkZV0ubm1pX2xvY2spOwogCQkJbWF4X3Bub2RlID0gbWF4KHBub2RlLCBtYXhfcG5vZGUpOwogCQkJYmxhZGUrKzsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jIGIvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jCmluZGV4IDBiNGJlNDMuLjNiZmEwMjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMKQEAgLTIyOCw2ICsyMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTEyMzcsNyArMTIzOCw3IEBACiAJZHBtX3N1c3BlbmRfbm9pcnEoUE1TR19TVVNQRU5EKTsKIAogCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0Jc3lzZGV2X3N1c3BlbmQoUE1TR19TVVNQRU5EKTsKKwlzeXNjb3JlX3N1c3BlbmQoKTsKIAogCWxvY2FsX2lycV9lbmFibGUoKTsKIApAQCAtMTI1NSw3ICsxMjU2LDcgQEAKIAkJYXBtX2Vycm9yKCJzdXNwZW5kIiwgZXJyKTsKIAllcnIgPSAoZXJyID09IEFQTV9TVUNDRVNTKSA/IDAgOiAtRUlPOwogCi0Jc3lzZGV2X3Jlc3VtZSgpOworCXN5c2NvcmVfcmVzdW1lKCk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCiAJZHBtX3Jlc3VtZV9ub2lycShQTVNHX1JFU1VNRSk7CkBAIC0xMjc5LDcgKzEyODAsNyBAQAogCWRwbV9zdXNwZW5kX25vaXJxKFBNU0dfU1VTUEVORCk7CiAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCXN5c2Rldl9zdXNwZW5kKFBNU0dfU1VTUEVORCk7CisJc3lzY29yZV9zdXNwZW5kKCk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCiAJZXJyID0gc2V0X3N5c3RlbV9wb3dlcl9zdGF0ZShBUE1fU1RBVEVfU1RBTkRCWSk7CkBAIC0xMjg3LDcgKzEyODgsNyBAQAogCQlhcG1fZXJyb3IoInN0YW5kYnkiLCBlcnIpOwogCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQlzeXNkZXZfcmVzdW1lKCk7CisJc3lzY29yZV9yZXN1bWUoKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKIAlkcG1fcmVzdW1lX25vaXJxKFBNU0dfUkVTVU1FKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L01ha2VmaWxlCmluZGV4IDNmMGViZTQuLjYwNDI5ODEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9NYWtlZmlsZQpAQCAtMzAsNyArMzAsNiBAQAogCiBvYmotJChDT05GSUdfWDg2X01DRSkJCQkrPSBtY2hlY2svCiBvYmotJChDT05GSUdfTVRSUikJCQkrPSBtdHJyLwotb2JqLSQoQ09ORklHX0NQVV9GUkVRKQkJCSs9IGNwdWZyZXEvCiAKIG9iai0kKENPTkZJR19YODZfTE9DQUxfQVBJQykJCSs9IHBlcmZjdHItd2F0Y2hkb2cubwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYwppbmRleCAzNTMyZDNiLi42ZjlkMWY2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKQEAgLTYxMyw3ICs2MTMsNyBAQAogI2VuZGlmCiAKIAkvKiBBcyBhIHJ1bGUgcHJvY2Vzc29ycyBoYXZlIEFQSUMgdGltZXIgcnVubmluZyBpbiBkZWVwIEMgc3RhdGVzICovCi0JaWYgKGMtPng4NiA+PSAweGYgJiYgIWNwdV9oYXNfYW1kX2VycmF0dW0oYW1kX2VycmF0dW1fNDAwKSkKKwlpZiAoYy0+eDg2ID4gMHhmICYmICFjcHVfaGFzX2FtZF9lcnJhdHVtKGFtZF9lcnJhdHVtXzQwMCkpCiAJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0FSQVQpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCmluZGV4IGUyY2VkMDAuLmM4YjQxNjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwpAQCAtMjU0LDYgKzI1NCwyNSBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBpbnQgZGlzYWJsZV9zbWVwIF9fY3B1aW5pdGRhdGE7CitzdGF0aWMgX19pbml0IGludCBzZXR1cF9kaXNhYmxlX3NtZXAoY2hhciAqYXJnKQoreworCWRpc2FibGVfc21lcCA9IDE7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJub3NtZXAiLCBzZXR1cF9kaXNhYmxlX3NtZXApOworCitzdGF0aWMgX19jcHVpbml0IHZvaWQgc2V0dXBfc21lcChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCit7CisJaWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfU01FUCkpIHsKKwkJaWYgKHVubGlrZWx5KGRpc2FibGVfc21lcCkpIHsKKwkJCXNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfU01FUCk7CisJCQljbGVhcl9pbl9jcjQoWDg2X0NSNF9TTUVQKTsKKwkJfSBlbHNlCisJCQlzZXRfaW5fY3I0KFg4Nl9DUjRfU01FUCk7CisJfQorfQorCiAvKgogICogU29tZSBDUFUgZmVhdHVyZXMgZGVwZW5kIG9uIGhpZ2hlciBDUFVJRCBsZXZlbHMsIHdoaWNoIG1heSBub3QgYWx3YXlzCiAgKiBiZSBhdmFpbGFibGUgZHVlIHRvIENQVUlEIGxldmVsIGNhcHBpbmcgb3IgYnJva2VuIHZpcnR1YWxpemF0aW9uCkBAIC01NjUsOCArNTg0LDcgQEAKIAogCQljcHVpZF9jb3VudCgweDAwMDAwMDA3LCAwLCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKIAotCQlpZiAoZWF4ID4gMCkKLQkJCWMtPng4Nl9jYXBhYmlsaXR5WzldID0gZWJ4OworCQljLT54ODZfY2FwYWJpbGl0eVs5XSA9IGVieDsKIAl9CiAKIAkvKiBBTUQtZGVmaW5lZCBmbGFnczogbGV2ZWwgMHg4MDAwMDAwMSAqLwpAQCAtNjY4LDYgKzY4Niw4IEBACiAJYy0+Y3B1X2luZGV4ID0gMDsKICNlbmRpZgogCWZpbHRlcl9jcHVpZF9mZWF0dXJlcyhjLCBmYWxzZSk7CisKKwlzZXR1cF9zbWVwKGMpOwogfQogCiB2b2lkIF9faW5pdCBlYXJseV9jcHVfaW5pdCh2b2lkKQpAQCAtNzUzLDYgKzc3Myw4IEBACiAjZW5kaWYKIAl9CiAKKwlzZXR1cF9zbWVwKGMpOworCiAJZ2V0X21vZGVsX25hbWUoYyk7IC8qIERlZmF1bHQgbmFtZSAqLwogCiAJZGV0ZWN0X25vcGwoYyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkNTRiZjYuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotIyBMaW5rIG9yZGVyIG1hdHRlcnMuIEs4IGlzIHByZWZlcnJlZCB0byBBQ1BJIGJlY2F1c2Ugb2YgZmlybXdhcmUgYnVncyBpbiBlYXJseQotIyBLOCBzeXN0ZW1zLiBBQ1BJIGlzIHByZWZlcnJlZCB0byBhbGwgb3RoZXIgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycy4KLSMgc3BlZWRzdGVwLSogaXMgcHJlZmVycmVkIG92ZXIgcDQtY2xvY2ttb2QuCi0KLW9iai0kKENPTkZJR19YODZfUE9XRVJOT1dfSzgpCQkrPSBwb3dlcm5vdy1rOC5vIG1wZXJmLm8KLW9iai0kKENPTkZJR19YODZfQUNQSV9DUFVGUkVRKQkJKz0gYWNwaS1jcHVmcmVxLm8gbXBlcmYubwotb2JqLSQoQ09ORklHX1g4Nl9QQ0NfQ1BVRlJFUSkJCSs9IHBjYy1jcHVmcmVxLm8KLW9iai0kKENPTkZJR19YODZfUE9XRVJOT1dfSzYpCQkrPSBwb3dlcm5vdy1rNi5vCi1vYmotJChDT05GSUdfWDg2X1BPV0VSTk9XX0s3KQkJKz0gcG93ZXJub3ctazcubwotb2JqLSQoQ09ORklHX1g4Nl9MT05HSEFVTCkJCSs9IGxvbmdoYXVsLm8KLW9iai0kKENPTkZJR19YODZfRV9QT1dFUlNBVkVSKQkJKz0gZV9wb3dlcnNhdmVyLm8KLW9iai0kKENPTkZJR19FTEFOX0NQVUZSRVEpCQkrPSBlbGFuZnJlcS5vCi1vYmotJChDT05GSUdfU0M1MjBfQ1BVRlJFUSkJCSs9IHNjNTIwX2ZyZXEubwotb2JqLSQoQ09ORklHX1g4Nl9MT05HUlVOKQkJKz0gbG9uZ3J1bi5vICAKLW9iai0kKENPTkZJR19YODZfR1hfU1VTUE1PRCkJCSs9IGd4LXN1c3Btb2Qubwotb2JqLSQoQ09ORklHX1g4Nl9TUEVFRFNURVBfSUNIKQkJKz0gc3BlZWRzdGVwLWljaC5vCi1vYmotJChDT05GSUdfWDg2X1NQRUVEU1RFUF9MSUIpCQkrPSBzcGVlZHN0ZXAtbGliLm8KLW9iai0kKENPTkZJR19YODZfU1BFRURTVEVQX1NNSSkJCSs9IHNwZWVkc3RlcC1zbWkubwotb2JqLSQoQ09ORklHX1g4Nl9TUEVFRFNURVBfQ0VOVFJJTk8pCSs9IHNwZWVkc3RlcC1jZW50cmluby5vCi1vYmotJChDT05GSUdfWDg2X1A0X0NMT0NLTU9EKQkJKz0gcDQtY2xvY2ttb2Qubwotb2JqLSQoQ09ORklHX1g4Nl9DUFVGUkVRX05GT1JDRTIpCSs9IGNwdWZyZXEtbmZvcmNlMi5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMKaW5kZXggZGY4NmJjOC4uMWVkZjViYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYwpAQCAtMjksMTAgKzI5LDEwIEBACiAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBlYXJseV9pbml0X2ludGVsKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKKwl1NjQgbWlzY19lbmFibGU7CisKIAkvKiBVbm1hc2sgQ1BVSUQgbGV2ZWxzIGlmIG1hc2tlZDogKi8KIAlpZiAoYy0+eDg2ID4gNiB8fCAoYy0+eDg2ID09IDYgJiYgYy0+eDg2X21vZGVsID49IDB4ZCkpIHsKLQkJdTY0IG1pc2NfZW5hYmxlOwotCiAJCXJkbXNybChNU1JfSUEzMl9NSVNDX0VOQUJMRSwgbWlzY19lbmFibGUpOwogCiAJCWlmIChtaXNjX2VuYWJsZSAmIE1TUl9JQTMyX01JU0NfRU5BQkxFX0xJTUlUX0NQVUlEKSB7CkBAIC0xMTgsOCArMTE4LDYgQEAKIAkgKiAobW9kZWwgMikgd2l0aCB0aGUgc2FtZSBwcm9ibGVtLgogCSAqLwogCWlmIChjLT54ODYgPT0gMTUpIHsKLQkJdTY0IG1pc2NfZW5hYmxlOwotCiAJCXJkbXNybChNU1JfSUEzMl9NSVNDX0VOQUJMRSwgbWlzY19lbmFibGUpOwogCiAJCWlmIChtaXNjX2VuYWJsZSAmIE1TUl9JQTMyX01JU0NfRU5BQkxFX0ZBU1RfU1RSSU5HKSB7CkBAIC0xMzAsNiArMTI4LDE5IEBACiAJCX0KIAl9CiAjZW5kaWYKKworCS8qCisJICogSWYgZmFzdCBzdHJpbmcgaXMgbm90IGVuYWJsZWQgaW4gSUEzMl9NSVNDX0VOQUJMRSBmb3IgYW55IHJlYXNvbiwKKwkgKiBjbGVhciB0aGUgZmFzdCBzdHJpbmcgYW5kIGVuaGFuY2VkIGZhc3Qgc3RyaW5nIENQVSBjYXBhYmlsaXRpZXMuCisJICovCisJaWYgKGMtPng4NiA+IDYgfHwgKGMtPng4NiA9PSA2ICYmIGMtPng4Nl9tb2RlbCA+PSAweGQpKSB7CisJCXJkbXNybChNU1JfSUEzMl9NSVNDX0VOQUJMRSwgbWlzY19lbmFibGUpOworCQlpZiAoIShtaXNjX2VuYWJsZSAmIE1TUl9JQTMyX01JU0NfRU5BQkxFX0ZBU1RfU1RSSU5HKSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiRGlzYWJsZWQgZmFzdCBzdHJpbmcgb3BlcmF0aW9uc1xuIik7CisJCQlzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1JFUF9HT09EKTsKKwkJCXNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfRVJNUyk7CisJCX0KKwl9CiB9CiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCkBAIC00MDAsMTIgKzQxMSwxMCBAQAogCiAJCXN3aXRjaCAoYy0+eDg2X21vZGVsKSB7CiAJCWNhc2UgNToKLQkJCWlmIChjLT54ODZfbWFzayA9PSAwKSB7Ci0JCQkJaWYgKGwyID09IDApCi0JCQkJCXAgPSAiQ2VsZXJvbiAoQ292aW5ndG9uKSI7Ci0JCQkJZWxzZSBpZiAobDIgPT0gMjU2KQotCQkJCQlwID0gIk1vYmlsZSBQZW50aXVtIElJIChEaXhvbikiOwotCQkJfQorCQkJaWYgKGwyID09IDApCisJCQkJcCA9ICJDZWxlcm9uIChDb3Zpbmd0b24pIjsKKwkJCWVsc2UgaWYgKGwyID09IDI1NikKKwkJCQlwID0gIk1vYmlsZSBQZW50aXVtIElJIChEaXhvbikiOwogCQkJYnJlYWs7CiAKIAkJY2FzZSA2OgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKaW5kZXggMWNlMWFmMi4uYzEwNWM1MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCkBAIC0zMjcsNyArMzI3LDYgQEAKIAlsMy0+c3ViY2FjaGVzWzJdID0gc2MyID0gISh2YWwgJiBCSVQoOCkpICArICEodmFsICYgQklUKDkpKTsKIAlsMy0+c3ViY2FjaGVzWzNdID0gc2MzID0gISh2YWwgJiBCSVQoMTIpKSArICEodmFsICYgQklUKDEzKSk7CiAKLQlsMy0+aW5kaWNlcyA9IChtYXgobWF4KG1heChzYzAsIHNjMSksIHNjMiksIHNjMykgPDwgMTApIC0gMTsKIAlsMy0+aW5kaWNlcyA9IChtYXgobWF4MyhzYzAsIHNjMSwgc2MyKSwgc2MzKSA8PCAxMCkgLSAxOwogfQogCkBAIC00NTQsMjcgKzQ1MywxNiBAQAogewogCWludCByZXQgPSAwOwogCi0jZGVmaW5lIFNVQkNBQ0hFX01BU0sJKDNVTCA8PCAyMCkKLSNkZWZpbmUgU1VCQ0FDSEVfSU5ERVgJMHhmZmYKLQotCS8qCi0JICogY2hlY2sgd2hldGhlciB0aGlzIHNsb3QgaXMgYWxyZWFkeSB1c2VkIG9yCi0JICogdGhlIGluZGV4IGlzIGFscmVhZHkgZGlzYWJsZWQKLQkgKi8KKwkvKiAgY2hlY2sgaWYgQHNsb3QgaXMgYWxyZWFkeSB1c2VkIG9yIHRoZSBpbmRleCBpcyBhbHJlYWR5IGRpc2FibGVkICovCiAJcmV0ID0gYW1kX2dldF9sM19kaXNhYmxlX3Nsb3QobDMsIHNsb3QpOwogCWlmIChyZXQgPj0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKgotCSAqIGNoZWNrIHdoZXRoZXIgdGhlIG90aGVyIHNsb3QgaGFzIGRpc2FibGVkIHRoZQotCSAqIHNhbWUgaW5kZXggYWxyZWFkeQotCSAqLwotCWlmIChpbmRleCA9PSBhbWRfZ2V0X2wzX2Rpc2FibGVfc2xvdChsMywgIXNsb3QpKQorCWlmIChpbmRleCA+IGwzLT5pbmRpY2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qIGRvIG5vdCBhbGxvdyB3cml0ZXMgb3V0c2lkZSBvZiBhbGxvd2VkIGJpdHMgKi8KLQlpZiAoKGluZGV4ICYgfihTVUJDQUNIRV9NQVNLIHwgU1VCQ0FDSEVfSU5ERVgpKSB8fAotCSAgICAoKGluZGV4ICYgU1VCQ0FDSEVfSU5ERVgpID4gbDMtPmluZGljZXMpKQorCS8qIGNoZWNrIHdoZXRoZXIgdGhlIG90aGVyIHNsb3QgaGFzIGRpc2FibGVkIHRoZSBzYW1lIGluZGV4IGFscmVhZHkgKi8KKwlpZiAoaW5kZXggPT0gYW1kX2dldF9sM19kaXNhYmxlX3Nsb3QobDMsICFzbG90KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlhbWRfbDNfZGlzYWJsZV9pbmRleChsMywgY3B1LCBzbG90LCBpbmRleCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCmluZGV4IDMzODVlYTIuLmZmMWFlOWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCkBAIC0xMDUsMjAgKzEwNSw2IEBACiBBVE9NSUNfTk9USUZJRVJfSEVBRCh4ODZfbWNlX2RlY29kZXJfY2hhaW4pOwogRVhQT1JUX1NZTUJPTF9HUEwoeDg2X21jZV9kZWNvZGVyX2NoYWluKTsKIAotc3RhdGljIGludCBkZWZhdWx0X2RlY29kZV9tY2Uoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsCi0JCQkgICAgICAgdm9pZCAqZGF0YSkKLXsKLQlwcl9lbWVyZyhIV19FUlIgIk5vIGh1bWFuIHJlYWRhYmxlIE1DRSBkZWNvZGluZyBzdXBwb3J0IG9uIHRoaXMgQ1BVIHR5cGUuXG4iKTsKLQlwcl9lbWVyZyhIV19FUlIgIlJ1biB0aGUgbWVzc2FnZSB0aHJvdWdoICdtY2Vsb2cgLS1hc2NpaScgdG8gZGVjb2RlLlxuIik7Ci0KLQlyZXR1cm4gTk9USUZZX1NUT1A7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbWNlX2RlY19uYiA9IHsKLQkubm90aWZpZXJfY2FsbCA9IGRlZmF1bHRfZGVjb2RlX21jZSwKLQkucHJpb3JpdHkgICAgICA9IC0xLAotfTsKLQogLyogTUNBIGJhbmtzIHBvbGxlZCBieSB0aGUgcGVyaW9kIHBvbGxpbmcgdGltZXIgZm9yIGNvcnJlY3RlZCBldmVudHMgKi8KIERFRklORV9QRVJfQ1BVKG1jZV9iYW5rc190LCBtY2VfcG9sbF9iYW5rcykgPSB7CiAJWzAgLi4uIEJJVFNfVE9fTE9OR1MoTUFYX05SX0JBTktTKS0xXSA9IH4wVUwKQEAgLTIxMiw2ICsxOTgsOCBAQAogCiBzdGF0aWMgdm9pZCBwcmludF9tY2Uoc3RydWN0IG1jZSAqbSkKIHsKKwlpbnQgcmV0ID0gMDsKKwogCXByX2VtZXJnKEhXX0VSUiAiQ1BVICVkOiBNYWNoaW5lIENoZWNrIEV4Y2VwdGlvbjogJUx4IEJhbmsgJWQ6ICUwMTZMeFxuIiwKIAkgICAgICAgbS0+ZXh0Y3B1LCBtLT5tY2dzdGF0dXMsIG0tPmJhbmssIG0tPnN0YXR1cyk7CiAKQEAgLTIzOSw3ICsyMjcsMTEgQEAKIAkgKiBQcmludCBvdXQgaHVtYW4tcmVhZGFibGUgZGV0YWlscyBhYm91dCB0aGUgTUNFIGVycm9yLAogCSAqIChpZiB0aGUgQ1BVIGhhcyBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgdGhhdCkKIAkgKi8KLQlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmeDg2X21jZV9kZWNvZGVyX2NoYWluLCAwLCBtKTsKKwlyZXQgPSBhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmeDg2X21jZV9kZWNvZGVyX2NoYWluLCAwLCBtKTsKKwlpZiAocmV0ID09IE5PVElGWV9TVE9QKQorCQlyZXR1cm47CisKKwlwcl9lbWVyZ19yYXRlbGltaXRlZChIV19FUlIgIlJ1biB0aGUgYWJvdmUgdGhyb3VnaCAnbWNlbG9nIC0tYXNjaWknXG4iKTsKIH0KIAogI2RlZmluZSBQQU5JQ19USU1FT1VUIDUgLyogNSBzZWNvbmRzICovCkBAIC01OTAsNyArNTgyLDYgQEAKIAkJaWYgKCEoZmxhZ3MgJiBNQ1BfRE9OVExPRykgJiYgIW1jZV9kb250X2xvZ19jZSkgewogCQkJbWNlX2xvZygmbSk7CiAJCQlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmeDg2X21jZV9kZWNvZGVyX2NoYWluLCAwLCAmbSk7Ci0JCQlhZGRfdGFpbnQoVEFJTlRfTUFDSElORV9DSEVDSyk7CiAJCX0KIAogCQkvKgpAQCAtMTcyMiw4ICsxNzEzLDYgQEAKIAogaW50IF9faW5pdCBtY2hlY2tfaW5pdCh2b2lkKQogewotCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmeDg2X21jZV9kZWNvZGVyX2NoYWluLCAmbWNlX2RlY19uYik7Ci0KIAltY2hlY2tfaW50ZWxfdGhlcm1faW5pdCgpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kLmMKaW5kZXggMTY3Zjk3Yi4uYmIwYWRhZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWQuYwpAQCAtNTA5LDYgKzUwOSw3IEBACiBvdXRfZnJlZToKIAlpZiAoYikgewogCQlrb2JqZWN0X3B1dCgmYi0+a29iaik7CisJCWxpc3RfZGVsKCZiLT5taXNjaik7CiAJCWtmcmVlKGIpOwogCX0KIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMKaW5kZXggNmY4YzVlOS4uMjdjNjI1MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCkBAIC0xODcsOCArMTg3LDYgQEAKIAkJCQl0aGlzX2NwdSwKIAkJCQlsZXZlbCA9PSBDT1JFX0xFVkVMID8gIkNvcmUiIDogIlBhY2thZ2UiLAogCQkJCXN0YXRlLT5jb3VudCk7Ci0KLQkJYWRkX3RhaW50KFRBSU5UX01BQ0hJTkVfQ0hFQ0spOwogCQlyZXR1cm4gMTsKIAl9CiAJaWYgKG9sZF9ldmVudCkgewpAQCAtMzU1LDcgKzM1Myw2IEBACiBzdGF0aWMgdm9pZCBpbnRlbF90aGVybWFsX2ludGVycnVwdCh2b2lkKQogewogCV9fdTY0IG1zcl92YWw7Ci0Jc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAKIAlyZG1zcmwoTVNSX0lBMzJfVEhFUk1fU1RBVFVTLCBtc3JfdmFsKTsKIApAQCAtMzY3LDE5ICszNjQsMTkgQEAKIAkJCQlDT1JFX0xFVkVMKSAhPSAwKQogCQltY2VfbG9nX3RoZXJtX3Rocm90X2V2ZW50KENPUkVfVEhST1RUTEVEIHwgbXNyX3ZhbCk7CiAKLQlpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9QTE4pKQorCWlmICh0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfUExOKSkKIAkJaWYgKHRoZXJtX3Rocm90X3Byb2Nlc3MobXNyX3ZhbCAmIFRIRVJNX1NUQVRVU19QT1dFUl9MSU1JVCwKIAkJCQkJUE9XRVJfTElNSVRfRVZFTlQsCiAJCQkJCUNPUkVfTEVWRUwpICE9IDApCiAJCQltY2VfbG9nX3RoZXJtX3Rocm90X2V2ZW50KENPUkVfUE9XRVJfTElNSVQgfCBtc3JfdmFsKTsKIAotCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX1BUUykpIHsKKwlpZiAodGhpc19jcHVfaGFzKFg4Nl9GRUFUVVJFX1BUUykpIHsKIAkJcmRtc3JsKE1TUl9JQTMyX1BBQ0tBR0VfVEhFUk1fU1RBVFVTLCBtc3JfdmFsKTsKIAkJaWYgKHRoZXJtX3Rocm90X3Byb2Nlc3MobXNyX3ZhbCAmIFBBQ0tBR0VfVEhFUk1fU1RBVFVTX1BST0NIT1QsCiAJCQkJCVRIRVJNQUxfVEhST1RUTElOR19FVkVOVCwKIAkJCQkJUEFDS0FHRV9MRVZFTCkgIT0gMCkKIAkJCW1jZV9sb2dfdGhlcm1fdGhyb3RfZXZlbnQoUEFDS0FHRV9USFJPVFRMRUQgfCBtc3JfdmFsKTsKLQkJaWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfUExOKSkKKwkJaWYgKHRoaXNfY3B1X2hhcyhYODZfRkVBVFVSRV9QTE4pKQogCQkJaWYgKHRoZXJtX3Rocm90X3Byb2Nlc3MobXNyX3ZhbCAmCiAJCQkJCVBBQ0tBR0VfVEhFUk1fU1RBVFVTX1BPV0VSX0xJTUlULAogCQkJCQlQT1dFUl9MSU1JVF9FVkVOVCwKQEAgLTM5Myw3ICszOTAsNiBAQAogewogCXByaW50ayhLRVJOX0VSUiAiQ1BVJWQ6IFVuZXhwZWN0ZWQgTFZUIHRoZXJtYWwgaW50ZXJydXB0IVxuIiwKIAkJCXNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JYWRkX3RhaW50KFRBSU5UX01BQ0hJTkVfQ0hFQ0spOwogfQogCiBzdGF0aWMgdm9pZCAoKnNtcF90aGVybWFsX3ZlY3Rvcikodm9pZCkgPSB1bmV4cGVjdGVkX3RoZXJtYWxfaW50ZXJydXB0OwpAQCAtNDQ2LDE4ICs0NDIsMjAgQEAKIAkgKi8KIAlyZG1zcihNU1JfSUEzMl9NSVNDX0VOQUJMRSwgbCwgaCk7CiAKKwloID0gbHZ0dGhtcl9pbml0OwogCS8qCiAJICogVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlcm1hbCBMVlQgZW50cmllcyBvbiBhbGwgQVBzIGFsd2F5cyByZWFkcwogCSAqIDB4MTAwMDAgYmVjYXVzZSBBUHMgYXJlIHdva2VuIHVwIGJ5IEJTUCBpc3N1aW5nIElOSVQtU0lQSS1TSVBJCiAJICogc2VxdWVuY2UgdG8gdGhlbSBhbmQgTFZUIHJlZ2lzdGVycyBhcmUgcmVzZXQgdG8gMHMgZXhjZXB0IGZvcgogCSAqIHRoZSBtYXNrIGJpdHMgd2hpY2ggYXJlIHNldCB0byAxcyB3aGVuIEFQcyByZWNlaXZlIElOSVQgSVBJLgotCSAqIEFsd2F5cyByZXN0b3JlIHRoZSB2YWx1ZSB0aGF0IEJJT1MgaGFzIHByb2dyYW1tZWQgb24gQVAgYmFzZWQgb24KLQkgKiBCU1AncyBpbmZvIHdlIHNhdmVkIHNpbmNlIEJJT1MgaXMgYWx3YXlzIHNldHRpbmcgdGhlIHNhbWUgdmFsdWUKLQkgKiBmb3IgYWxsIHRocmVhZHMvY29yZXMKKwkgKiBJZiBCSU9TIHRha2VzIG92ZXIgdGhlIHRoZXJtYWwgaW50ZXJydXB0IGFuZCBzZXRzIGl0cyBpbnRlcnJ1cHQKKwkgKiBkZWxpdmVyeSBtb2RlIHRvIFNNSSAobm90IGZpeGVkKSwgaXQgcmVzdG9yZXMgdGhlIHZhbHVlIHRoYXQgdGhlCisJICogQklPUyBoYXMgcHJvZ3JhbW1lZCBvbiBBUCBiYXNlZCBvbiBCU1AncyBpbmZvIHdlIHNhdmVkIHNpbmNlIEJJT1MKKwkgKiBpcyBhbHdheXMgc2V0dGluZyB0aGUgc2FtZSB2YWx1ZSBmb3IgYWxsIHRocmVhZHMvY29yZXMuCiAJICovCi0JYXBpY193cml0ZShBUElDX0xWVFRITVIsIGx2dHRobXJfaW5pdCk7CisJaWYgKChoICYgQVBJQ19ETV9GSVhFRF9NQVNLKSAhPSBBUElDX0RNX0ZJWEVEKQorCQlhcGljX3dyaXRlKEFQSUNfTFZUVEhNUiwgbHZ0dGhtcl9pbml0KTsKIAotCWggPSBsdnR0aG1yX2luaXQ7CiAKIAlpZiAoKGwgJiBNU1JfSUEzMl9NSVNDX0VOQUJMRV9UTTEpICYmIChoICYgQVBJQ19ETV9TTUkpKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jCmluZGV4IGVlZDM2NzNhLi4zYTAzMzhiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGFzbS9ubWkuaD4KICNpbmNsdWRlIDxhc20vY29tcGF0Lmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgogCiAjaWYgMAogI3VuZGVmIHdybXNybApAQCAtMzYzLDEyICszNjQsMTggQEAKIAlyZXR1cm4gbmV3X3Jhd19jb3VudDsKIH0KIAotLyogdXNpbmcgWDg2X0ZFQVRVUkVfUEVSRkNUUl9DT1JFIHRvIGxhdGVyIGltcGxlbWVudCBBTFRFUk5BVElWRSgpIGhlcmUgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHg4Nl9wbXVfYWRkcl9vZmZzZXQoaW50IGluZGV4KQogewotCWlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfUEVSRkNUUl9DT1JFKSkKLQkJcmV0dXJuIGluZGV4IDw8IDE7Ci0JcmV0dXJuIGluZGV4OworCWludCBvZmZzZXQ7CisKKwkvKiBvZmZzZXQgPSBYODZfRkVBVFVSRV9QRVJGQ1RSX0NPUkUgPyBpbmRleCA8PCAxIDogaW5kZXggKi8KKwlhbHRlcm5hdGl2ZV9pbyhBU01fTk9QMiwKKwkJICAgICAgICJzaGxsICQxLCAlJWVheCIsCisJCSAgICAgICBYODZfRkVBVFVSRV9QRVJGQ1RSX0NPUkUsCisJCSAgICAgICAiPWEiIChvZmZzZXQpLAorCQkgICAgICAgImEiICAoaW5kZXgpKTsKKworCXJldHVybiBvZmZzZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHg4Nl9wbXVfY29uZmlnX2FkZHIoaW50IGluZGV4KQpAQCAtNTg2LDggKzU5MywxMiBAQAogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAorCS8qCisJICogRG8gbm90IGFsbG93IGNvbmZpZzEgKGV4dGVuZGVkIHJlZ2lzdGVycykgdG8gcHJvcGFnYXRlLAorCSAqIHRoZXJlJ3Mgbm8gc2FuZSB1c2VyLXNwYWNlIGdlbmVyYWxpemF0aW9uIHlldDoKKwkgKi8KIAlpZiAoYXR0ci0+dHlwZSA9PSBQRVJGX1RZUEVfUkFXKQotCQlyZXR1cm4geDg2X3BtdV9leHRyYV9yZWdzKGV2ZW50LT5hdHRyLmNvbmZpZywgZXZlbnQpOworCQlyZXR1cm4gMDsKIAogCWlmIChhdHRyLT50eXBlID09IFBFUkZfVFlQRV9IV19DQUNIRSkKIAkJcmV0dXJuIHNldF9leHRfaHdfYXR0cihod2MsIGV2ZW50KTsKQEAgLTYwOSw4ICs2MjAsOCBAQAogCS8qCiAJICogQnJhbmNoIHRyYWNpbmc6CiAJICovCi0JaWYgKChhdHRyLT5jb25maWcgPT0gUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TKSAmJgotCSAgICAoaHdjLT5zYW1wbGVfcGVyaW9kID09IDEpKSB7CisJaWYgKGF0dHItPmNvbmZpZyA9PSBQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlMgJiYKKwkgICAgIWF0dHItPmZyZXEgJiYgaHdjLT5zYW1wbGVfcGVyaW9kID09IDEpIHsKIAkJLyogQlRTIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhcmNoaXRlY3R1cmUuICovCiAJCWlmICgheDg2X3BtdS5idHNfYWN0aXZlKQogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtMTI4NCw2ICsxMjk1LDE2IEBACiAKIAljcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CiAKKwkvKgorCSAqIFNvbWUgY2hpcHNldHMgbmVlZCB0byB1bm1hc2sgdGhlIExWVFBDIGluIGEgcGFydGljdWxhciBzcG90CisJICogaW5zaWRlIHRoZSBubWkgaGFuZGxlci4gIEFzIGEgcmVzdWx0LCB0aGUgdW5tYXNraW5nIHdhcyBwdXNoZWQKKwkgKiBpbnRvIGFsbCB0aGUgbm1pIGhhbmRsZXJzLgorCSAqCisJICogVGhpcyBnZW5lcmljIGhhbmRsZXIgZG9lc24ndCBzZWVtIHRvIGhhdmUgYW55IGlzc3VlcyB3aGVyZSB0aGUKKwkgKiB1bm1hc2tpbmcgb2NjdXJzIHNvIGl0IHdhcyBsZWZ0IGF0IHRoZSB0b3AuCisJICovCisJYXBpY193cml0ZShBUElDX0xWVFBDLCBBUElDX0RNX05NSSk7CisKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IHg4Nl9wbXUubnVtX2NvdW50ZXJzOyBpZHgrKykgewogCQlpZiAoIXRlc3RfYml0KGlkeCwgY3B1Yy0+YWN0aXZlX21hc2spKSB7CiAJCQkvKgpAQCAtMTM3MCw4ICsxMzkxLDYgQEAKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCX0KIAotCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgQVBJQ19ETV9OTUkpOwotCiAJaGFuZGxlZCA9IHg4Nl9wbXUuaGFuZGxlX2lycShhcmdzLT5yZWdzKTsKIAlpZiAoIWhhbmRsZWQpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKQEAgLTE3NTQsMTcgKzE3NzMsNiBAQAogICogY2FsbGNoYWluIHN1cHBvcnQKICAqLwogCi1zdGF0aWMgdm9pZAotYmFja3RyYWNlX3dhcm5pbmdfc3ltYm9sKHZvaWQgKmRhdGEsIGNoYXIgKm1zZywgdW5zaWduZWQgbG9uZyBzeW1ib2wpCi17Ci0JLyogSWdub3JlIHdhcm5pbmdzICovCi19Ci0KLXN0YXRpYyB2b2lkIGJhY2t0cmFjZV93YXJuaW5nKHZvaWQgKmRhdGEsIGNoYXIgKm1zZykKLXsKLQkvKiBJZ25vcmUgd2FybmluZ3MgKi8KLX0KLQogc3RhdGljIGludCBiYWNrdHJhY2Vfc3RhY2sodm9pZCAqZGF0YSwgY2hhciAqbmFtZSkKIHsKIAlyZXR1cm4gMDsKQEAgLTE3NzgsOCArMTc4Niw2IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHMgYmFja3RyYWNlX29wcyA9IHsKLQkud2FybmluZwkJPSBiYWNrdHJhY2Vfd2FybmluZywKLQkud2FybmluZ19zeW1ib2wJCT0gYmFja3RyYWNlX3dhcm5pbmdfc3ltYm9sLAogCS5zdGFjawkJCT0gYmFja3RyYWNlX3N0YWNrLAogCS5hZGRyZXNzCQk9IGJhY2t0cmFjZV9hZGRyZXNzLAogCS53YWxrX3N0YWNrCQk9IHByaW50X2NvbnRleHRfc3RhY2tfYnAsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfYW1kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfYW1kLmMKaW5kZXggY2Y0ZTM2OS4uZmUyOWMxZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9hbWQuYwpAQCAtOTYsMTIgKzk2LDE0IEBACiAgKi8KIHN0YXRpYyBjb25zdCB1NjQgYW1kX3BlcmZtb25fZXZlbnRfbWFwW10gPQogewotICBbUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTXQkJPSAweDAwNzYsCi0gIFtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10JCT0gMHgwMGMwLAotICBbUEVSRl9DT1VOVF9IV19DQUNIRV9SRUZFUkVOQ0VTXQk9IDB4MDA4MCwKLSAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTXQkJPSAweDAwODEsCi0gIFtQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlNdCT0gMHgwMGMyLAotICBbUEVSRl9DT1VOVF9IV19CUkFOQ0hfTUlTU0VTXQkJPSAweDAwYzMsCisgIFtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdCQkJPSAweDAwNzYsCisgIFtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10JCQk9IDB4MDBjMCwKKyAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10JCT0gMHgwMDgwLAorICBbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdCQkJPSAweDAwODEsCisgIFtQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlNdCQk9IDB4MDBjMiwKKyAgW1BFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFU10JCQk9IDB4MDBjMywKKyAgW1BFUkZfQ09VTlRfSFdfU1RBTExFRF9DWUNMRVNfRlJPTlRFTkRdCT0gMHgwMGQwLCAvKiAiRGVjb2RlciBlbXB0eSIgZXZlbnQgKi8KKyAgW1BFUkZfQ09VTlRfSFdfU1RBTExFRF9DWUNMRVNfQkFDS0VORF0JPSAweDAwZDEsIC8qICJEaXNwYXRjaCBzdGFsbHMiIGV2ZW50ICovCiB9OwogCiBzdGF0aWMgdTY0IGFtZF9wbXVfZXZlbnRfbWFwKGludCBod19ldmVudCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsLmMKaW5kZXggOGZjMmIyYy4uNDExNzhjOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsLmMKQEAgLTI1LDcgKzI1LDcgQEAKIC8qCiAgKiBJbnRlbCBQZXJmTW9uLCB1c2VkIG9uIENvcmUgYW5kIGxhdGVyLgogICovCi1zdGF0aWMgY29uc3QgdTY0IGludGVsX3BlcmZtb25fZXZlbnRfbWFwW10gPQorc3RhdGljIHU2NCBpbnRlbF9wZXJmbW9uX2V2ZW50X21hcFtQRVJGX0NPVU5UX0hXX01BWF0gX19yZWFkX21vc3RseSA9CiB7CiAgIFtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdCQk9IDB4MDAzYywKICAgW1BFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TXQkJPSAweDAwYzAsCkBAIC0zNiw3ICszNiw3IEBACiAgIFtQRVJGX0NPVU5UX0hXX0JVU19DWUNMRVNdCQk9IDB4MDEzYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9jb3JlX2V2ZW50X2NvbnN0cmFpbnRzW10gPQorc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX2NvcmVfZXZlbnRfY29uc3RyYWludHNbXSBfX3JlYWRfbW9zdGx5ID0KIHsKIAlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTEsIDB4MiksIC8qIEZQX0FTU0lTVCAqLwogCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHgxMiwgMHgyKSwgLyogTVVMICovCkBAIC00Nyw3ICs0Nyw3IEBACiAJRVZFTlRfQ09OU1RSQUlOVF9FTkQKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9jb3JlMl9ldmVudF9jb25zdHJhaW50c1tdID0KK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9jb3JlMl9ldmVudF9jb25zdHJhaW50c1tdIF9fcmVhZF9tb3N0bHkgPQogewogCUZJWEVEX0VWRU5UX0NPTlNUUkFJTlQoMHgwMGMwLCAwKSwgLyogSU5TVF9SRVRJUkVELkFOWSAqLwogCUZJWEVEX0VWRU5UX0NPTlNUUkFJTlQoMHgwMDNjLCAxKSwgLyogQ1BVX0NMS19VTkhBTFRFRC5DT1JFICovCkBAIC03MCw3ICs3MCw3IEBACiAJRVZFTlRfQ09OU1RSQUlOVF9FTkQKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9uZWhhbGVtX2V2ZW50X2NvbnN0cmFpbnRzW10gPQorc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX25laGFsZW1fZXZlbnRfY29uc3RyYWludHNbXSBfX3JlYWRfbW9zdGx5ID0KIHsKIAlGSVhFRF9FVkVOVF9DT05TVFJBSU5UKDB4MDBjMCwgMCksIC8qIElOU1RfUkVUSVJFRC5BTlkgKi8KIAlGSVhFRF9FVkVOVF9DT05TVFJBSU5UKDB4MDAzYywgMSksIC8qIENQVV9DTEtfVU5IQUxURUQuQ09SRSAqLwpAQCAtODYsMTkgKzg2LDE5IEBACiAJRVZFTlRfQ09OU1RSQUlOVF9FTkQKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZXh0cmFfcmVnIGludGVsX25laGFsZW1fZXh0cmFfcmVnc1tdID0KK3N0YXRpYyBzdHJ1Y3QgZXh0cmFfcmVnIGludGVsX25laGFsZW1fZXh0cmFfcmVnc1tdIF9fcmVhZF9tb3N0bHkgPQogewogCUlOVEVMX0VWRU5UX0VYVFJBX1JFRygweGI3LCBNU1JfT0ZGQ09SRV9SU1BfMCwgMHhmZmZmKSwKIAlFVkVOVF9FWFRSQV9FTkQKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9uZWhhbGVtX3BlcmNvcmVfY29uc3RyYWludHNbXSA9CitzdGF0aWMgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfbmVoYWxlbV9wZXJjb3JlX2NvbnN0cmFpbnRzW10gX19yZWFkX21vc3RseSA9CiB7CiAJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGI3LCAwKSwKIAlFVkVOVF9DT05TVFJBSU5UX0VORAogfTsKIAotc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX3dlc3RtZXJlX2V2ZW50X2NvbnN0cmFpbnRzW10gPQorc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX3dlc3RtZXJlX2V2ZW50X2NvbnN0cmFpbnRzW10gX19yZWFkX21vc3RseSA9CiB7CiAJRklYRURfRVZFTlRfQ09OU1RSQUlOVCgweDAwYzAsIDApLCAvKiBJTlNUX1JFVElSRUQuQU5ZICovCiAJRklYRURfRVZFTlRfQ09OU1RSQUlOVCgweDAwM2MsIDEpLCAvKiBDUFVfQ0xLX1VOSEFMVEVELkNPUkUgKi8KQEAgLTExMCw3ICsxMTAsNyBAQAogCUVWRU5UX0NPTlNUUkFJTlRfRU5ECiB9OwogCi1zdGF0aWMgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfc25iX2V2ZW50X2NvbnN0cmFpbnRzW10gPQorc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX3NuYl9ldmVudF9jb25zdHJhaW50c1tdIF9fcmVhZF9tb3N0bHkgPQogewogCUZJWEVEX0VWRU5UX0NPTlNUUkFJTlQoMHgwMGMwLCAwKSwgLyogSU5TVF9SRVRJUkVELkFOWSAqLwogCUZJWEVEX0VWRU5UX0NPTlNUUkFJTlQoMHgwMDNjLCAxKSwgLyogQ1BVX0NMS19VTkhBTFRFRC5DT1JFICovCkBAIC0xMjMsMjEgKzEyMywyMSBAQAogCUVWRU5UX0NPTlNUUkFJTlRfRU5ECiB9OwogCi1zdGF0aWMgc3RydWN0IGV4dHJhX3JlZyBpbnRlbF93ZXN0bWVyZV9leHRyYV9yZWdzW10gPQorc3RhdGljIHN0cnVjdCBleHRyYV9yZWcgaW50ZWxfd2VzdG1lcmVfZXh0cmFfcmVnc1tdIF9fcmVhZF9tb3N0bHkgPQogewogCUlOVEVMX0VWRU5UX0VYVFJBX1JFRygweGI3LCBNU1JfT0ZGQ09SRV9SU1BfMCwgMHhmZmZmKSwKIAlJTlRFTF9FVkVOVF9FWFRSQV9SRUcoMHhiYiwgTVNSX09GRkNPUkVfUlNQXzEsIDB4ZmZmZiksCiAJRVZFTlRfRVhUUkFfRU5ECiB9OwogCi1zdGF0aWMgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfd2VzdG1lcmVfcGVyY29yZV9jb25zdHJhaW50c1tdID0KK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF93ZXN0bWVyZV9wZXJjb3JlX2NvbnN0cmFpbnRzW10gX19yZWFkX21vc3RseSA9CiB7CiAJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGI3LCAwKSwKIAlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4YmIsIDApLAogCUVWRU5UX0NPTlNUUkFJTlRfRU5ECiB9OwogCi1zdGF0aWMgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfZ2VuX2V2ZW50X2NvbnN0cmFpbnRzW10gPQorc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX2dlbl9ldmVudF9jb25zdHJhaW50c1tdIF9fcmVhZF9tb3N0bHkgPQogewogCUZJWEVEX0VWRU5UX0NPTlNUUkFJTlQoMHgwMGMwLCAwKSwgLyogSU5TVF9SRVRJUkVELkFOWSAqLwogCUZJWEVEX0VWRU5UX0NPTlNUUkFJTlQoMHgwMDNjLCAxKSwgLyogQ1BVX0NMS19VTkhBTFRFRC5DT1JFICovCkBAIC0xODQsMjYgKzE4NCwyMyBAQAogCX0sCiAgfSwKICBbIEMoTEwgICkgXSA9IHsKLQkvKgotCSAqIFRCRDogTmVlZCBPZmYtY29yZSBSZXNwb25zZSBQZXJmb3JtYW5jZSBNb25pdG9yaW5nIHN1cHBvcnQKLQkgKi8KIAlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJLyogT0ZGQ09SRV9SRVNQT05TRV8wLkFOWV9EQVRBLkxPQ0FMX0NBQ0hFICovCisJCS8qIE9GRkNPUkVfUkVTUE9OU0UuQU5ZX0RBVEEuTE9DQUxfQ0FDSEUgKi8KIAkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxYjcsCi0JCS8qIE9GRkNPUkVfUkVTUE9OU0VfMS5BTllfREFUQS5BTllfTExDX01JU1MgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxYmIsCisJCS8qIE9GRkNPUkVfUkVTUE9OU0UuQU5ZX0RBVEEuQU5ZX0xMQ19NSVNTICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMWI3LAogCX0sCiAJWyBDKE9QX1dSSVRFKSBdID0gewotCQkvKiBPRkZDT1JFX1JFU1BPTlNFXzAuQU5ZX1JGTy5MT0NBTF9DQUNIRSAqLworCQkvKiBPRkZDT1JFX1JFU1BPTlNFLkFOWV9SRk8uTE9DQUxfQ0FDSEUgKi8KIAkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxYjcsCi0JCS8qIE9GRkNPUkVfUkVTUE9OU0VfMS5BTllfUkZPLkFOWV9MTENfTUlTUyAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDFiYiwKKwkJLyogT0ZGQ09SRV9SRVNQT05TRS5BTllfUkZPLkFOWV9MTENfTUlTUyAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDFiNywKIAl9LAogCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJLyogT0ZGQ09SRV9SRVNQT05TRV8wLlBSRUZFVENILkxPQ0FMX0NBQ0hFICovCisJCS8qIE9GRkNPUkVfUkVTUE9OU0UuUFJFRkVUQ0guTE9DQUxfQ0FDSEUgKi8KIAkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxYjcsCi0JCS8qIE9GRkNPUkVfUkVTUE9OU0VfMS5QUkVGRVRDSC5BTllfTExDX01JU1MgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxYmIsCisJCS8qIE9GRkNPUkVfUkVTUE9OU0UuUFJFRkVUQ0guQU5ZX0xMQ19NSVNTICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMWI3LAogCX0sCiAgfSwKICBbIEMoRFRMQikgXSA9IHsKQEAgLTI4NSwyNiArMjgyLDI2IEBACiAgfSwKICBbIEMoTEwgICkgXSA9IHsKIAlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJLyogT0ZGQ09SRV9SRVNQT05TRV8wLkFOWV9EQVRBLkxPQ0FMX0NBQ0hFICovCisJCS8qIE9GRkNPUkVfUkVTUE9OU0UuQU5ZX0RBVEEuTE9DQUxfQ0FDSEUgKi8KIAkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxYjcsCi0JCS8qIE9GRkNPUkVfUkVTUE9OU0VfMS5BTllfREFUQS5BTllfTExDX01JU1MgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxYmIsCisJCS8qIE9GRkNPUkVfUkVTUE9OU0UuQU5ZX0RBVEEuQU5ZX0xMQ19NSVNTICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMWI3LAogCX0sCiAJLyoKIAkgKiBVc2UgUkZPLCBub3QgV1JJVEVCQUNLLCBiZWNhdXNlIGEgd3JpdGUgbWlzcyB3b3VsZCB0eXBpY2FsbHkgb2NjdXIKIAkgKiBvbiBSRk8uCiAJICovCiAJWyBDKE9QX1dSSVRFKSBdID0gewotCQkvKiBPRkZDT1JFX1JFU1BPTlNFXzEuQU5ZX1JGTy5MT0NBTF9DQUNIRSAqLwotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDFiYiwKLQkJLyogT0ZGQ09SRV9SRVNQT05TRV8wLkFOWV9SRk8uQU5ZX0xMQ19NSVNTICovCisJCS8qIE9GRkNPUkVfUkVTUE9OU0UuQU5ZX1JGTy5MT0NBTF9DQUNIRSAqLworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDFiNywKKwkJLyogT0ZGQ09SRV9SRVNQT05TRS5BTllfUkZPLkFOWV9MTENfTUlTUyAqLwogCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDFiNywKIAl9LAogCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJLyogT0ZGQ09SRV9SRVNQT05TRV8wLlBSRUZFVENILkxPQ0FMX0NBQ0hFICovCisJCS8qIE9GRkNPUkVfUkVTUE9OU0UuUFJFRkVUQ0guTE9DQUxfQ0FDSEUgKi8KIAkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxYjcsCi0JCS8qIE9GRkNPUkVfUkVTUE9OU0VfMS5QUkVGRVRDSC5BTllfTExDX01JU1MgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxYmIsCisJCS8qIE9GRkNPUkVfUkVTUE9OU0UuUFJFRkVUQ0guQU5ZX0xMQ19NSVNTICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMWI3LAogCX0sCiAgfSwKICBbIEMoRFRMQikgXSA9IHsKQEAgLTM1MiwxNiArMzQ5LDM2IEBACiB9OwogCiAvKgotICogT0ZGQ09SRV9SRVNQT05TRSBNU1IgYml0cyAoc3Vic2V0KSwgU2VlIElBMzIgU0RNIFZvbCAzIDMwLjYuMS4zCisgKiBOZWhhbGVtL1dlc3RtZXJlIE1TUl9PRkZDT1JFX1JFU1BPTlNFIGJpdHM7CisgKiBTZWUgSUEzMiBTRE0gVm9sIDNCIDMwLjYuMS4zCiAgKi8KIAotI2RlZmluZSBETU5EX0RBVEFfUkQgICAgICgxIDw8IDApCi0jZGVmaW5lIERNTkRfUkZPICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgRE1ORF9XQiAgICAgICAgICAoMSA8PCAzKQotI2RlZmluZSBQRl9EQVRBX1JEICAgICAgICgxIDw8IDQpCi0jZGVmaW5lIFBGX0RBVEFfUkZPICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgUkVTUF9VTkNPUkVfSElUICAoMSA8PCA4KQotI2RlZmluZSBSRVNQX01JU1MgICAgICAgICgweGY2MDApIC8qIG5vbiB1bmNvcmUgaGl0ICovCisjZGVmaW5lIE5ITV9ETU5EX0RBVEFfUkQJKDEgPDwgMCkKKyNkZWZpbmUgTkhNX0RNTkRfUkZPCQkoMSA8PCAxKQorI2RlZmluZSBOSE1fRE1ORF9JRkVUQ0gJCSgxIDw8IDIpCisjZGVmaW5lIE5ITV9ETU5EX1dCCQkoMSA8PCAzKQorI2RlZmluZSBOSE1fUEZfREFUQV9SRAkJKDEgPDwgNCkKKyNkZWZpbmUgTkhNX1BGX0RBVEFfUkZPCQkoMSA8PCA1KQorI2RlZmluZSBOSE1fUEZfSUZFVENICQkoMSA8PCA2KQorI2RlZmluZSBOSE1fT0ZGQ09SRV9PVEhFUgkoMSA8PCA3KQorI2RlZmluZSBOSE1fVU5DT1JFX0hJVAkJKDEgPDwgOCkKKyNkZWZpbmUgTkhNX09USEVSX0NPUkVfSElUX1NOUAkoMSA8PCA5KQorI2RlZmluZSBOSE1fT1RIRVJfQ09SRV9ISVRNCSgxIDw8IDEwKQorICAgICAgICAJCQkvKiByZXNlcnZlZCAqLworI2RlZmluZSBOSE1fUkVNT1RFX0NBQ0hFX0ZXRAkoMSA8PCAxMikKKyNkZWZpbmUgTkhNX1JFTU9URV9EUkFNCQkoMSA8PCAxMykKKyNkZWZpbmUgTkhNX0xPQ0FMX0RSQU0JCSgxIDw8IDE0KQorI2RlZmluZSBOSE1fTk9OX0RSQU0JCSgxIDw8IDE1KQorCisjZGVmaW5lIE5ITV9BTExfRFJBTQkJKE5ITV9SRU1PVEVfRFJBTXxOSE1fTE9DQUxfRFJBTSkKKworI2RlZmluZSBOSE1fRE1ORF9SRUFECQkoTkhNX0RNTkRfREFUQV9SRCkKKyNkZWZpbmUgTkhNX0RNTkRfV1JJVEUJCShOSE1fRE1ORF9SRk98TkhNX0RNTkRfV0IpCisjZGVmaW5lIE5ITV9ETU5EX1BSRUZFVENICShOSE1fUEZfREFUQV9SRHxOSE1fUEZfREFUQV9SRk8pCisKKyNkZWZpbmUgTkhNX0wzX0hJVAkoTkhNX1VOQ09SRV9ISVR8TkhNX09USEVSX0NPUkVfSElUX1NOUHxOSE1fT1RIRVJfQ09SRV9ISVRNKQorI2RlZmluZSBOSE1fTDNfTUlTUwkoTkhNX05PTl9EUkFNfE5ITV9BTExfRFJBTXxOSE1fUkVNT1RFX0NBQ0hFX0ZXRCkKKyNkZWZpbmUgTkhNX0wzX0FDQ0VTUwkoTkhNX0wzX0hJVHxOSE1fTDNfTUlTUykKIAogc3RhdGljIF9faW5pdGNvbnN0IGNvbnN0IHU2NCBuZWhhbGVtX2h3X2NhY2hlX2V4dHJhX3JlZ3MKIAkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9NQVhdCkBAIC0zNzAsMTYgKzM4NywxNiBAQAogewogIFsgQyhMTCAgKSBdID0gewogCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IERNTkRfREFUQV9SRHxSRVNQX1VOQ09SRV9ISVQsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gRE1ORF9EQVRBX1JEfFJFU1BfTUlTUywKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSBOSE1fRE1ORF9SRUFEfE5ITV9MM19BQ0NFU1MsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gTkhNX0RNTkRfUkVBRHxOSE1fTDNfTUlTUywKIAl9LAogCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSBETU5EX1JGT3xETU5EX1dCfFJFU1BfVU5DT1JFX0hJVCwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSBETU5EX1JGT3xETU5EX1dCfFJFU1BfTUlTUywKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSBOSE1fRE1ORF9XUklURXxOSE1fTDNfQUNDRVNTLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IE5ITV9ETU5EX1dSSVRFfE5ITV9MM19NSVNTLAogCX0sCiAJWyBDKE9QX1BSRUZFVENIKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IFBGX0RBVEFfUkR8UEZfREFUQV9SRk98UkVTUF9VTkNPUkVfSElULAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IFBGX0RBVEFfUkR8UEZfREFUQV9SRk98UkVTUF9NSVNTLAorCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IE5ITV9ETU5EX1BSRUZFVENIfE5ITV9MM19BQ0NFU1MsCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gTkhNX0RNTkRfUFJFRkVUQ0h8TkhNX0wzX01JU1MsCiAJfSwKICB9CiB9OwpAQCAtMzkxLDEyICs0MDgsMTIgQEAKIHsKICBbIEMoTDFEKSBdID0gewogCVsgQyhPUF9SRUFEKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MCwgLyogTDFEX0NBQ0hFX0xELk1FU0kgICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE0MCwgLyogTDFEX0NBQ0hFX0xELklfU1RBVEUgICAgICAgICAqLworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDEwYiwgLyogTUVNX0lOU1RfUkVUSVJFRC5MT0FEUyAgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE1MSwgLyogTDFELlJFUEwgICAgICAgICAgICAgICAgICAgICAqLwogCX0sCiAJWyBDKE9QX1dSSVRFKSBdID0gewotCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MGY0MSwgLyogTDFEX0NBQ0hFX1NULk1FU0kgICAgICAgICAgICAqLwotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDE0MSwgLyogTDFEX0NBQ0hFX1NULklfU1RBVEUgICAgICAgICAqLworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDIwYiwgLyogTUVNX0lOU1RfUkVUVVJFRC5TVE9SRVMgICAgICAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDI1MSwgLyogTDFELk1fUkVQTCAgICAgICAgICAgICAgICAgICAqLwogCX0sCiAJWyBDKE9QX1BSRUZFVENIKSBdID0gewogCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDE0ZSwgLyogTDFEX1BSRUZFVENILlJFUVVFU1RTICAgICAgICAqLwpAQCAtOTMzLDYgKzk1MCwxNiBAQAogCiAJY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCisJLyoKKwkgKiBTb21lIGNoaXBzZXRzIG5lZWQgdG8gdW5tYXNrIHRoZSBMVlRQQyBpbiBhIHBhcnRpY3VsYXIgc3BvdAorCSAqIGluc2lkZSB0aGUgbm1pIGhhbmRsZXIuICBBcyBhIHJlc3VsdCwgdGhlIHVubWFza2luZyB3YXMgcHVzaGVkCisJICogaW50byBhbGwgdGhlIG5taSBoYW5kbGVycy4KKwkgKgorCSAqIFRoaXMgaGFuZGxlciBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhbnkgaXNzdWVzIHdpdGggdGhlIHVubWFza2luZworCSAqIHNvIGl0IHdhcyBsZWZ0IGF0IHRoZSB0b3AuCisJICovCisJYXBpY193cml0ZShBUElDX0xWVFBDLCBBUElDX0RNX05NSSk7CisKIAlpbnRlbF9wbXVfZGlzYWJsZV9hbGwoKTsKIAloYW5kbGVkID0gaW50ZWxfcG11X2RyYWluX2J0c19idWZmZXIoKTsKIAlzdGF0dXMgPSBpbnRlbF9wbXVfZ2V0X3N0YXR1cygpOwpAQCAtOTk4LDYgKzEwMjUsOSBAQAogCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OwogCXVuc2lnbmVkIGludCBod19ldmVudCwgYnRzX2V2ZW50OwogCisJaWYgKGV2ZW50LT5hdHRyLmZyZXEpCisJCXJldHVybiBOVUxMOworCiAJaHdfZXZlbnQgPSBod2MtPmNvbmZpZyAmIElOVEVMX0FSQ0hfRVZFTlRfTUFTSzsKIAlidHNfZXZlbnQgPSB4ODZfcG11LmV2ZW50X21hcChQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlMpOwogCkBAIC0xMzA1LDcgKzEzMzUsNyBAQAogCSAqIEFKMTA2IGNvdWxkIHBvc3NpYmx5IGJlIHdvcmtlZCBhcm91bmQgYnkgbm90IGFsbG93aW5nIExCUgogCSAqICAgICAgIHVzYWdlIGZyb20gUEVCUywgaW5jbHVkaW5nIHRoZSBmaXh1cC4KIAkgKiBBSjY4ICBjb3VsZCBwb3NzaWJseSBiZSB3b3JrZWQgYXJvdW5kIGJ5IGFsd2F5cyBwcm9ncmFtbWluZwotCSAqIAkgYSBwZWJzX2V2ZW50X3Jlc2V0WzBdIHZhbHVlIGFuZCBjb3Bpbmcgd2l0aCB0aGUgbG9zdCBldmVudHMuCisJICoJIGEgcGVic19ldmVudF9yZXNldFswXSB2YWx1ZSBhbmQgY29waW5nIHdpdGggdGhlIGxvc3QgZXZlbnRzLgogCSAqCiAJICogQnV0IHRha2VuIHRvZ2V0aGVyIGl0IG1pZ2h0IGp1c3QgbWFrZSBzZW5zZSB0byBub3QgZW5hYmxlIFBFQlMgb24KIAkgKiB0aGVzZSBjaGlwcy4KQEAgLTE0MDksNiArMTQzOSwyMyBAQAogCQl4ODZfcG11LnBlcmNvcmVfY29uc3RyYWludHMgPSBpbnRlbF9uZWhhbGVtX3BlcmNvcmVfY29uc3RyYWludHM7CiAJCXg4Nl9wbXUuZW5hYmxlX2FsbCA9IGludGVsX3BtdV9uaG1fZW5hYmxlX2FsbDsKIAkJeDg2X3BtdS5leHRyYV9yZWdzID0gaW50ZWxfbmVoYWxlbV9leHRyYV9yZWdzOworCisJCS8qIFVPUFNfSVNTVUVELlNUQUxMRURfQ1lDTEVTICovCisJCWludGVsX3BlcmZtb25fZXZlbnRfbWFwW1BFUkZfQ09VTlRfSFdfU1RBTExFRF9DWUNMRVNfRlJPTlRFTkRdID0gMHgxODAwMTBlOworCQkvKiBVT1BTX0VYRUNVVEVELkNPUkVfQUNUSVZFX0NZQ0xFUyxjPTEsaT0xICovCisJCWludGVsX3BlcmZtb25fZXZlbnRfbWFwW1BFUkZfQ09VTlRfSFdfU1RBTExFRF9DWUNMRVNfQkFDS0VORF0gPSAweDE4MDNmYjE7CisKKwkJaWYgKGVieCAmIDB4NDApIHsKKwkJCS8qCisJCQkgKiBFcnJhdHVtIEFBSjgwIGRldGVjdGVkLCB3ZSB3b3JrIGl0IGFyb3VuZCBieSB1c2luZworCQkJICogdGhlIEJSX01JU1BfRVhFQy5BTlkgZXZlbnQuIFRoaXMgd2lsbCBvdmVyLWNvdW50CisJCQkgKiBicmFuY2gtbWlzc2VzLCBidXQgaXQncyBzdGlsbCBtdWNoIGJldHRlciB0aGFuIHRoZQorCQkJICogYXJjaGl0ZWN0dXJhbCBldmVudCB3aGljaCBpcyBvZnRlbiBjb21wbGV0ZWx5IGJvZ3VzOgorCQkJICovCisJCQlpbnRlbF9wZXJmbW9uX2V2ZW50X21hcFtQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVNdID0gMHg3Zjg5OworCisJCQlwcl9jb250KCJlcnJhdHVtIEFBSjgwIHdvcmtlZCBhcm91bmQsICIpOworCQl9CiAJCXByX2NvbnQoIk5laGFsZW0gZXZlbnRzLCAiKTsKIAkJYnJlYWs7CiAKQEAgLTE0MjUsNiArMTQ3Miw3IEBACiAKIAljYXNlIDM3OiAvKiAzMiBubSBuZWhhbGVtLCAiQ2xhcmtkYWxlIiAqLwogCWNhc2UgNDQ6IC8qIDMyIG5tIG5laGFsZW0sICJHdWxmdG93biIgKi8KKwljYXNlIDQ3OiAvKiAzMiBubSBYZW9uIEU3ICovCiAJCW1lbWNweShod19jYWNoZV9ldmVudF9pZHMsIHdlc3RtZXJlX2h3X2NhY2hlX2V2ZW50X2lkcywKIAkJICAgICAgIHNpemVvZihod19jYWNoZV9ldmVudF9pZHMpKTsKIAkJbWVtY3B5KGh3X2NhY2hlX2V4dHJhX3JlZ3MsIG5laGFsZW1faHdfY2FjaGVfZXh0cmFfcmVncywKQEAgLTE0MzcsNiArMTQ4NSwxMiBAQAogCQl4ODZfcG11LmVuYWJsZV9hbGwgPSBpbnRlbF9wbXVfbmhtX2VuYWJsZV9hbGw7CiAJCXg4Nl9wbXUucGVic19jb25zdHJhaW50cyA9IGludGVsX3dlc3RtZXJlX3BlYnNfZXZlbnRfY29uc3RyYWludHM7CiAJCXg4Nl9wbXUuZXh0cmFfcmVncyA9IGludGVsX3dlc3RtZXJlX2V4dHJhX3JlZ3M7CisKKwkJLyogVU9QU19JU1NVRUQuU1RBTExFRF9DWUNMRVMgKi8KKwkJaW50ZWxfcGVyZm1vbl9ldmVudF9tYXBbUEVSRl9DT1VOVF9IV19TVEFMTEVEX0NZQ0xFU19GUk9OVEVORF0gPSAweDE4MDAxMGU7CisJCS8qIFVPUFNfRVhFQ1VURUQuQ09SRV9BQ1RJVkVfQ1lDTEVTLGM9MSxpPTEgKi8KKwkJaW50ZWxfcGVyZm1vbl9ldmVudF9tYXBbUEVSRl9DT1VOVF9IV19TVEFMTEVEX0NZQ0xFU19CQUNLRU5EXSA9IDB4MTgwM2ZiMTsKKwogCQlwcl9jb250KCJXZXN0bWVyZSBldmVudHMsICIpOwogCQlicmVhazsKIApAQCAtMTQ0OCw2ICsxNTAyLDEyIEBACiAKIAkJeDg2X3BtdS5ldmVudF9jb25zdHJhaW50cyA9IGludGVsX3NuYl9ldmVudF9jb25zdHJhaW50czsKIAkJeDg2X3BtdS5wZWJzX2NvbnN0cmFpbnRzID0gaW50ZWxfc25iX3BlYnNfZXZlbnRzOworCisJCS8qIFVPUFNfSVNTVUVELkFOWSxjPTEsaT0xIHRvIGNvdW50IHN0YWxsIGN5Y2xlcyAqLworCQlpbnRlbF9wZXJmbW9uX2V2ZW50X21hcFtQRVJGX0NPVU5UX0hXX1NUQUxMRURfQ1lDTEVTX0ZST05URU5EXSA9IDB4MTgwMDEwZTsKKwkJLyogVU9QU19ESVNQQVRDSEVELlRIUkVBRCxjPTEsaT0xIHRvIGNvdW50IHN0YWxsIGN5Y2xlcyovCisJCWludGVsX3BlcmZtb25fZXZlbnRfbWFwW1BFUkZfQ09VTlRfSFdfU1RBTExFRF9DWUNMRVNfQkFDS0VORF0gPSAweDE4MDAxYjE7CisKIAkJcHJfY29udCgiU2FuZHlCcmlkZ2UgZXZlbnRzLCAiKTsKIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9wNC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X3A0LmMKaW5kZXggYzI1MjBlMS4uZWFkNTg0ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X3A0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X3A0LmMKQEAgLTQ2OCw3ICs0NjgsNyBAQAogCQkub3Bjb2RlCQk9IFA0X09QQ09ERShQNF9FVkVOVF9NSVNQUkVEX0JSQU5DSF9SRVRJUkVEKSwKIAkJLmVzY3JfbXNyCT0geyBNU1JfUDRfQ1JVX0VTQ1IwLCBNU1JfUDRfQ1JVX0VTQ1IxIH0sCiAJCS5lc2NyX2VtYXNrCT0KLQkJUDRfRVNDUl9FTUFTS19CSVQoUDRfRVZFTlRfTUlTUFJFRF9CUkFOQ0hfUkVUSVJFRCwgTkJPR1VTKSwKKwkJCVA0X0VTQ1JfRU1BU0tfQklUKFA0X0VWRU5UX01JU1BSRURfQlJBTkNIX1JFVElSRUQsIE5CT0dVUyksCiAJCS5jbnRyCQk9IHsgezEyLCAxMywgMTZ9LCB7MTQsIDE1LCAxN30gfSwKIAl9LAogCVtQNF9FVkVOVF9YODdfQVNTSVNUXSA9IHsKQEAgLTkxMiw4ICs5MTIsNyBAQAogCWludCBpZHgsIGhhbmRsZWQgPSAwOwogCXU2NCB2YWw7CiAKLQlkYXRhLmFkZHIgPSAwOwotCWRhdGEucmF3ID0gTlVMTDsKKwlwZXJmX3NhbXBsZV9kYXRhX2luaXQoJmRhdGEsIDApOwogCiAJY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCkBAIC05NDcsMTQgKzk0NiwyMyBAQAogCQlpZiAoIXg4Nl9wZXJmX2V2ZW50X3NldF9wZXJpb2QoZXZlbnQpKQogCQkJY29udGludWU7CiAJCWlmIChwZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCAxLCAmZGF0YSwgcmVncykpCi0JCQlwNF9wbXVfZGlzYWJsZV9ldmVudChldmVudCk7CisJCQl4ODZfcG11X3N0b3AoZXZlbnQsIDApOwogCX0KIAotCWlmIChoYW5kbGVkKSB7Ci0JCS8qIHA0IHF1aXJrOiB1bm1hc2sgaXQgYWdhaW4gKi8KLQkJYXBpY193cml0ZShBUElDX0xWVFBDLCBhcGljX3JlYWQoQVBJQ19MVlRQQykgJiB+QVBJQ19MVlRfTUFTS0VEKTsKKwlpZiAoaGFuZGxlZCkKIAkJaW5jX2lycV9zdGF0KGFwaWNfcGVyZl9pcnFzKTsKLQl9CisKKwkvKgorCSAqIFdoZW4gZGVhbGluZyB3aXRoIHRoZSB1bm1hc2tpbmcgb2YgdGhlIExWVFBDIG9uIFA0IHBlcmYgaHcsIGl0IGhhcworCSAqIGJlZW4gb2JzZXJ2ZWQgdGhhdCB0aGUgT1ZGIGJpdCBmbGFnIGhhcyB0byBiZSBjbGVhcmVkIGZpcnN0IF9iZWZvcmVfCisJICogdGhlIExWVFBDIGNhbiBiZSB1bm1hc2tlZC4KKwkgKgorCSAqIFRoZSByZWFzb24gaXMgdGhlIE5NSSBsaW5lIHdpbGwgY29udGludWUgdG8gYmUgYXNzZXJ0ZWQgd2hpbGUgdGhlIE9WRgorCSAqIGJpdCBpcyBzZXQuICBUaGlzIGNhdXNlcyBhIHNlY29uZCBOTUkgdG8gZ2VuZXJhdGUgaWYgdGhlIExWVFBDIGlzCisJICogdW5tYXNrZWQgYmVmb3JlIHRoZSBPVkYgYml0IGlzIGNsZWFyZWQsIGxlYWRpbmcgdG8gdW5rbm93biBOTUkKKwkgKiBtZXNzYWdlcy4KKwkgKi8KKwlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIEFQSUNfRE1fTk1JKTsKIAogCXJldHVybiBoYW5kbGVkOwogfQpAQCAtMTE4OCw3ICsxMTk2LDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgbG93LCBoaWdoOwogCi0JLyogSWYgd2UgZ2V0IHN0cmlwcGVkIC0tIGluZGV4aWcgZmFpbHMgKi8KKwkvKiBJZiB3ZSBnZXQgc3RyaXBwZWQgLS0gaW5kZXhpbmcgZmFpbHMgKi8KIAlCVUlMRF9CVUdfT04oQVJDSF9QNF9NQVhfQ0NDUiA+IFg4Nl9QTUNfTUFYX0dFTkVSSUMpOwogCiAJcmRtc3IoTVNSX0lBMzJfTUlTQ19FTkFCTEUsIGxvdywgaGlnaCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZGV2aWNldHJlZS5jIGIvYXJjaC94ODYva2VybmVsL2RldmljZXRyZWUuYwppbmRleCA3MDZhOWZiLi5lOTBmMDg0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZGV2aWNldHJlZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9kZXZpY2V0cmVlLmMKQEAgLTM5MSw3ICszOTEsNyBAQAogCiAJc2V0X2lvX2FwaWNfaXJxX2F0dHIoJmF0dHIsIGlkeCwgbGluZSwgaXQtPnRyaWdnZXIsIGl0LT5wb2xhcml0eSk7CiAKLQlyZXR1cm4gaW9fYXBpY19zZXR1cF9pcnFfcGluKCpvdXRfaHdpcnEsIGNwdV90b19ub2RlKDApLCAmYXR0cik7CisJcmV0dXJuIGlvX2FwaWNfc2V0dXBfaXJxX3Bpbl9vbmNlKCpvdXRfaHdpcnEsIGNwdV90b19ub2RlKDApLCAmYXR0cik7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpb2FwaWNfYWRkX29mbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jCmluZGV4IGUyYTNmMDYuLjFhYWU3OGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMKQEAgLTEzNSwyMCArMTM1LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHByaW50X2NvbnRleHRfc3RhY2tfYnApOwogCi0KLXN0YXRpYyB2b2lkCi1wcmludF90cmFjZV93YXJuaW5nX3N5bWJvbCh2b2lkICpkYXRhLCBjaGFyICptc2csIHVuc2lnbmVkIGxvbmcgc3ltYm9sKQotewotCXByaW50ayhkYXRhKTsKLQlwcmludF9zeW1ib2wobXNnLCBzeW1ib2wpOwotCXByaW50aygiXG4iKTsKLX0KLQotc3RhdGljIHZvaWQgcHJpbnRfdHJhY2Vfd2FybmluZyh2b2lkICpkYXRhLCBjaGFyICptc2cpCi17Ci0JcHJpbnRrKCIlcyVzXG4iLCAoY2hhciAqKWRhdGEsIG1zZyk7Ci19Ci0KIHN0YXRpYyBpbnQgcHJpbnRfdHJhY2Vfc3RhY2sodm9pZCAqZGF0YSwgY2hhciAqbmFtZSkKIHsKIAlwcmludGsoIiVzIDwlcz4gIiwgKGNoYXIgKilkYXRhLCBuYW1lKTsKQEAgLTE2Niw4ICsxNTIsNiBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN0YWNrdHJhY2Vfb3BzIHByaW50X3RyYWNlX29wcyA9IHsKLQkud2FybmluZwkJPSBwcmludF90cmFjZV93YXJuaW5nLAotCS53YXJuaW5nX3N5bWJvbAkJPSBwcmludF90cmFjZV93YXJuaW5nX3N5bWJvbCwKIAkuc3RhY2sJCQk9IHByaW50X3RyYWNlX3N0YWNrLAogCS5hZGRyZXNzCQk9IHByaW50X3RyYWNlX2FkZHJlc3MsCiAJLndhbGtfc3RhY2sJCT0gcHJpbnRfY29udGV4dF9zdGFjaywKQEAgLTI3OSw3ICsyNjMsNiBAQAogCXByaW50aygiREVCVUdfUEFHRUFMTE9DIik7CiAjZW5kaWYKIAlwcmludGsoIlxuIik7Ci0Jc3lzZnNfcHJpbnRrX2xhc3RfZmlsZSgpOwogCWlmIChub3RpZnlfZGllKERJRV9PT1BTLCBzdHIsIHJlZ3MsIGVyciwKIAkJCWN1cnJlbnQtPnRocmVhZC50cmFwX25vLCBTSUdTRUdWKSA9PSBOT1RJRllfU1RPUCkKIAkJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMKaW5kZXggYTkzNzQyYS4uMGJhMTVhNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYwpAQCAtMjYwLDkgKzI2MCw5IEBACiAJcmV0dXJuIG1vZF9jb2RlX3N0YXR1czsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgKmZ0cmFjZV9ub3BfcmVwbGFjZSh2b2lkKQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZ0cmFjZV9ub3BfcmVwbGFjZSh2b2lkKQogewotCXJldHVybiBpZGVhbF9ub3A1OworCXJldHVybiBpZGVhbF9ub3BzW05PUF9BVE9NSUM1XTsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hlYWQzMi5jIGIvYXJjaC94ODYva2VybmVsL2hlYWQzMi5jCmluZGV4IGQ2ZDZiYjMuLjNiYjA4NTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9oZWFkMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZDMyLmMKQEAgLTIzLDcgKzIzLDYgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBpMzg2X2RlZmF1bHRfZWFybHlfc2V0dXAodm9pZCkKIHsKIAkvKiBJbml0aWFsaXplIDMyYml0IHNwZWNpZmljIHNldHVwIGZ1bmN0aW9ucyAqLwotCXg4Nl9pbml0LnJlc291cmNlcy5wcm9iZV9yb21zID0gcHJvYmVfcm9tczsKIAl4ODZfaW5pdC5yZXNvdXJjZXMucmVzZXJ2ZV9yZXNvdXJjZXMgPSBpMzg2X3Jlc2VydmVfcmVzb3VyY2VzOwogCXg4Nl9pbml0Lm1wcGFyc2Uuc2V0dXBfaW9hcGljX2lkcyA9IHNldHVwX2lvYXBpY19pZHNfZnJvbV9tcGM7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9ocGV0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaHBldC5jCmluZGV4IGJmZThmNzIuLjY3ODE3NjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9ocGV0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2hwZXQuYwpAQCAtMjE3LDcgKzIxNyw3IEBACiAvKgogICogQ29tbW9uIGhwZXQgaW5mbwogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBocGV0X3BlcmlvZDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGhwZXRfZnJlcTsKIAogc3RhdGljIHZvaWQgaHBldF9sZWdhY3lfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCiAJCQkgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCk7CkBAIC0yMzIsNyArMjMyLDYgQEAKIAkuZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQyB8IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCiAJLnNldF9tb2RlCT0gaHBldF9sZWdhY3lfc2V0X21vZGUsCiAJLnNldF9uZXh0X2V2ZW50ID0gaHBldF9sZWdhY3lfbmV4dF9ldmVudCwKLQkuc2hpZnQJCT0gMzIsCiAJLmlycQkJPSAwLAogCS5yYXRpbmcJCT0gNTAsCiB9OwpAQCAtMjkwLDI4ICsyODksMTIgQEAKIAlocGV0X2VuYWJsZV9sZWdhY3lfaW50KCk7CiAKIAkvKgotCSAqIFRoZSBtdWx0IGZhY3RvciBpcyBkZWZpbmVkIGFzIChpbmNsdWRlL2xpbnV4L2Nsb2NrY2hpcHMuaCkKLQkgKiAgbXVsdC8yXnNoaWZ0ID0gY3ljL25zIChpbiBjb250cmFzdCB0byBucy9jeWMgaW4gY2xvY2tzb3VyY2UuaCkKLQkgKiBocGV0X3BlcmlvZCBpcyBpbiB1bml0cyBvZiBmZW10b3NlY29uZHMgKHBlciBjeWNsZSksIHNvCi0JICogIG11bHQvMl5zaGlmdCA9IGN5Yy9ucyA9IDEwXjYvaHBldF9wZXJpb2QKLQkgKiAgbXVsdCA9ICgxMF42ICogMl5zaGlmdCkvaHBldF9wZXJpb2QKLQkgKiAgbXVsdCA9IChGU0VDX1BFUl9OU0VDIDw8IGhwZXRfY2xvY2tldmVudC5zaGlmdCkvaHBldF9wZXJpb2QKLQkgKi8KLQlocGV0X2Nsb2NrZXZlbnQubXVsdCA9IGRpdl9zYygodW5zaWduZWQgbG9uZykgRlNFQ19QRVJfTlNFQywKLQkJCQkgICAgICBocGV0X3BlcmlvZCwgaHBldF9jbG9ja2V2ZW50LnNoaWZ0KTsKLQkvKiBDYWxjdWxhdGUgdGhlIG1pbiAvIG1heCBkZWx0YSAqLwotCWhwZXRfY2xvY2tldmVudC5tYXhfZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4N0ZGRkZGRkYsCi0JCQkJCQkJICAgJmhwZXRfY2xvY2tldmVudCk7Ci0JLyogU2V0dXAgbWluaW11bSByZXByb2dyYW1taW5nIGRlbHRhLiAqLwotCWhwZXRfY2xvY2tldmVudC5taW5fZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKEhQRVRfTUlOX1BST0dfREVMVEEsCi0JCQkJCQkJICAgJmhwZXRfY2xvY2tldmVudCk7Ci0KLQkvKgogCSAqIFN0YXJ0IGhwZXQgd2l0aCB0aGUgYm9vdCBjcHUgbWFzayBhbmQgbWFrZSBpdAogCSAqIGdsb2JhbCBhZnRlciB0aGUgSU9fQVBJQyBoYXMgYmVlbiBpbml0aWFsaXplZC4KIAkgKi8KIAlocGV0X2Nsb2NrZXZlbnQuY3B1bWFzayA9IGNwdW1hc2tfb2Yoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoJmhwZXRfY2xvY2tldmVudCk7CisJY2xvY2tldmVudHNfY29uZmlnX2FuZF9yZWdpc3RlcigmaHBldF9jbG9ja2V2ZW50LCBocGV0X2ZyZXEsCisJCQkJCUhQRVRfTUlOX1BST0dfREVMVEEsIDB4N0ZGRkZGRkYpOwogCWdsb2JhbF9jbG9ja19ldmVudCA9ICZocGV0X2Nsb2NrZXZlbnQ7CiAJcHJpbnRrKEtFUk5fREVCVUcgImhwZXQgY2xvY2tldmVudCByZWdpc3RlcmVkXG4iKTsKIH0KQEAgLTU0OSw3ICs1MzIsNiBAQAogc3RhdGljIHZvaWQgaW5pdF9vbmVfaHBldF9tc2lfY2xvY2tldmVudChzdHJ1Y3QgaHBldF9kZXYgKmhkZXYsIGludCBjcHUpCiB7CiAJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0ID0gJmhkZXYtPmV2dDsKLQl1aW50NjRfdCBocGV0X2ZyZXE7CiAKIAlXQVJOX09OKGNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCWlmICghKGhkZXYtPmZsYWdzICYgSFBFVF9ERVZfVkFMSUQpKQpAQCAtNTcxLDI0ICs1NTMsMTAgQEAKIAogCWV2dC0+c2V0X21vZGUgPSBocGV0X21zaV9zZXRfbW9kZTsKIAlldnQtPnNldF9uZXh0X2V2ZW50ID0gaHBldF9tc2lfbmV4dF9ldmVudDsKLQlldnQtPnNoaWZ0ID0gMzI7Ci0KLQkvKgotCSAqIFRoZSBwZXJpb2QgaXMgYSBmZW10byBzZWNvbmRzIHZhbHVlLiBXZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUKLQkgKiBzY2FsZWQgbWF0aCBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgZm9yIG5hbm9zZWNvbmQgdG8gaHBldCB0aWNrCi0JICogY29udmVyc2lvbi4KLQkgKi8KLQlocGV0X2ZyZXEgPSBGU0VDX1BFUl9TRUM7Ci0JZG9fZGl2KGhwZXRfZnJlcSwgaHBldF9wZXJpb2QpOwotCWV2dC0+bXVsdCA9IGRpdl9zYygodW5zaWduZWQgbG9uZykgaHBldF9mcmVxLAotCQkJCSAgICAgIE5TRUNfUEVSX1NFQywgZXZ0LT5zaGlmdCk7Ci0JLyogQ2FsY3VsYXRlIHRoZSBtYXggZGVsdGEgKi8KLQlldnQtPm1heF9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHg3RkZGRkZGRiwgZXZ0KTsKLQkvKiA1IHVzZWMgbWluaW11bSByZXByb2dyYW1taW5nIGRlbHRhLiAqLwotCWV2dC0+bWluX2RlbHRhX25zID0gNTAwMDsKLQogCWV2dC0+Y3B1bWFzayA9IGNwdW1hc2tfb2YoaGRldi0+Y3B1KTsKLQljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoZXZ0KTsKKworCWNsb2NrZXZlbnRzX2NvbmZpZ19hbmRfcmVnaXN0ZXIoZXZ0LCBocGV0X2ZyZXEsIEhQRVRfTUlOX1BST0dfREVMVEEsCisJCQkJCTB4N0ZGRkZGRkYpOwogfQogCiAjaWZkZWYgQ09ORklHX0hQRVQKQEAgLTc5Miw3ICs3NjAsNiBAQAogc3RhdGljIGludCBocGV0X2Nsb2Nrc291cmNlX3JlZ2lzdGVyKHZvaWQpCiB7CiAJdTY0IHN0YXJ0LCBub3c7Ci0JdTY0IGhwZXRfZnJlcTsKIAljeWNsZV90IHQxOwogCiAJLyogU3RhcnQgdGhlIGNvdW50ZXIgKi8KQEAgLTgxOSwyNCArNzg2LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JLyoKLQkgKiBUaGUgZGVmaW5pdGlvbiBvZiBtdWx0IGlzIChpbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmgpCi0JICogbXVsdC8yXnNoaWZ0ID0gbnMvY3ljIGFuZCBocGV0X3BlcmlvZCBpcyBpbiB1bml0cyBvZiBmc2VjL2N5YwotCSAqIHNvIHdlIGZpcnN0IG5lZWQgdG8gY29udmVydCBocGV0X3BlcmlvZCB0byBucy9jeWMgdW5pdHM6Ci0JICogIG11bHQvMl5zaGlmdCA9IG5zL2N5YyA9IGhwZXRfcGVyaW9kLzEwXjYKLQkgKiAgbXVsdCA9IChocGV0X3BlcmlvZCAqIDJec2hpZnQpLzEwXjYKLQkgKiAgbXVsdCA9IChocGV0X3BlcmlvZCA8PCBzaGlmdCkvRlNFQ19QRVJfTlNFQwotCSAqLwotCi0JLyogTmVlZCB0byBjb252ZXJ0IGhwZXRfcGVyaW9kIChmc2VjL2N5YykgdG8gY3ljL3NlYzoKLQkgKgotCSAqIGN5Yy9zZWMgPSBGU0VDX1BFUl9TRUMvaHBldF9wZXJpb2QoZnNlYy9jeWMpCi0JICogY3ljL3NlYyA9IChGU0VDX1BFUl9OU0VDICogTlNFQ19QRVJfU0VDKS9ocGV0X3BlcmlvZAotCSAqLwotCWhwZXRfZnJlcSA9IEZTRUNfUEVSX1NFQzsKLQlkb19kaXYoaHBldF9mcmVxLCBocGV0X3BlcmlvZCk7CiAJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmNsb2Nrc291cmNlX2hwZXQsICh1MzIpaHBldF9mcmVxKTsKLQogCXJldHVybiAwOwogfQogCkBAIC04NDUsNyArNzk1LDkgQEAKICAqLwogaW50IF9faW5pdCBocGV0X2VuYWJsZSh2b2lkKQogeworCXVuc2lnbmVkIGxvbmcgaHBldF9wZXJpb2Q7CiAJdW5zaWduZWQgaW50IGlkOworCXU2NCBmcmVxOwogCWludCBpOwogCiAJaWYgKCFpc19ocGV0X2NhcGFibGUoKSkKQEAgLTg4NCw2ICs4MzYsMTQgQEAKIAkJZ290byBvdXRfbm9ocGV0OwogCiAJLyoKKwkgKiBUaGUgcGVyaW9kIGlzIGEgZmVtdG8gc2Vjb25kcyB2YWx1ZS4gQ29udmVydCBpdCB0byBhCisJICogZnJlcXVlbmN5LgorCSAqLworCWZyZXEgPSBGU0VDX1BFUl9TRUM7CisJZG9fZGl2KGZyZXEsIGhwZXRfcGVyaW9kKTsKKwlocGV0X2ZyZXEgPSBmcmVxOworCisJLyoKIAkgKiBSZWFkIHRoZSBIUEVUIElEIHJlZ2lzdGVyIHRvIHJldHJpZXZlIHRoZSBJUlEgcm91dGluZwogCSAqIGluZm9ybWF0aW9uIGFuZCB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzCiAJICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaTgyNTMuYyBiL2FyY2gveDg2L2tlcm5lbC9pODI1My5jCmluZGV4IDJkZmQzMTUuLmZiNjZkYzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pODI1My5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pODI1My5jCkBAIC05Myw3ICs5Myw2IEBACiAJLmZlYXR1cmVzCT0gQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUMgfCBDTE9DS19FVlRfRkVBVF9PTkVTSE9ULAogCS5zZXRfbW9kZQk9IGluaXRfcGl0X3RpbWVyLAogCS5zZXRfbmV4dF9ldmVudCA9IHBpdF9uZXh0X2V2ZW50LAotCS5zaGlmdAkJPSAzMiwKIAkuaXJxCQk9IDAsCiB9OwogCkBAIC0xMDgsOTAgKzEwNywxMiBAQAogCSAqIElPX0FQSUMgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuCiAJICovCiAJcGl0X2NlLmNwdW1hc2sgPSBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JcGl0X2NlLm11bHQgPSBkaXZfc2MoQ0xPQ0tfVElDS19SQVRFLCBOU0VDX1BFUl9TRUMsIHBpdF9jZS5zaGlmdCk7Ci0JcGl0X2NlLm1heF9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHg3RkZGLCAmcGl0X2NlKTsKLQlwaXRfY2UubWluX2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygweEYsICZwaXRfY2UpOwogCi0JY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKCZwaXRfY2UpOworCWNsb2NrZXZlbnRzX2NvbmZpZ19hbmRfcmVnaXN0ZXIoJnBpdF9jZSwgQ0xPQ0tfVElDS19SQVRFLCAweEYsIDB4N0ZGRik7CiAJZ2xvYmFsX2Nsb2NrX2V2ZW50ID0gJnBpdF9jZTsKIH0KIAogI2lmbmRlZiBDT05GSUdfWDg2XzY0Ci0vKgotICogU2luY2UgdGhlIFBJVCBvdmVyZmxvd3MgZXZlcnkgdGljaywgaXRzIG5vdCB2ZXJ5IHVzZWZ1bAotICogdG8ganVzdCByZWFkIGJ5IGl0c2VsZi4gU28gdXNlIGppZmZpZXMgdG8gZW11bGF0ZSBhIGZyZWUKLSAqIHJ1bm5pbmcgY291bnRlcjoKLSAqLwotc3RhdGljIGN5Y2xlX3QgcGl0X3JlYWQoc3RydWN0IGNsb2Nrc291cmNlICpjcykKLXsKLQlzdGF0aWMgaW50IG9sZF9jb3VudDsKLQlzdGF0aWMgdTMyIG9sZF9qaWZzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGNvdW50OwotCXUzMiBqaWZzOwotCi0JcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpODI1M19sb2NrLCBmbGFncyk7Ci0JLyoKLQkgKiBBbHRob3VnaCBvdXIgY2FsbGVyIG1heSBoYXZlIHRoZSByZWFkIHNpZGUgb2YgeHRpbWVfbG9jaywKLQkgKiB0aGlzIGlzIG5vdyBhIHNlcWxvY2ssIGFuZCB3ZSBhcmUgY2hlYXRpbmcgaW4gdGhpcyByb3V0aW5lCi0JICogYnkgaGF2aW5nIHNpZGUgZWZmZWN0cyBvbiBzdGF0ZSB0aGF0IHdlIGNhbm5vdCB1bmRvIGlmCi0JICogdGhlcmUgaXMgYSBjb2xsaXNpb24gb24gdGhlIHNlcWxvY2sgYW5kIG91ciBjYWxsZXIgaGFzIHRvCi0JICogcmV0cnkuICAoTmFtZWx5LCBvbGRfamlmcyBhbmQgb2xkX2NvdW50LikgIFNvIHdlIG11c3QgdHJlYXQKLQkgKiBqaWZmaWVzIGFzIHZvbGF0aWxlIGRlc3BpdGUgdGhlIGxvY2suICBXZSByZWFkIGppZmZpZXMKLQkgKiBiZWZvcmUgbGF0Y2hpbmcgdGhlIHRpbWVyIGNvdW50IHRvIGd1YXJhbnRlZSB0aGF0IGFsdGhvdWdoCi0JICogdGhlIGppZmZpZXMgdmFsdWUgbWlnaHQgYmUgb2xkZXIgdGhhbiB0aGUgY291bnQgKHRoYXQgaXMsCi0JICogdGhlIGNvdW50ZXIgbWF5IHVuZGVyZmxvdyBiZXR3ZWVuIHRoZSBsYXN0IHBvaW50IHdoZXJlCi0JICogamlmZmllcyB3YXMgaW5jcmVtZW50ZWQgYW5kIHRoZSBwb2ludCB3aGVyZSB3ZSBsYXRjaCB0aGUKLQkgKiBjb3VudCksIGl0IGNhbm5vdCBiZSBuZXdlci4KLQkgKi8KLQlqaWZzID0gamlmZmllczsKLQlvdXRiX3BpdCgweDAwLCBQSVRfTU9ERSk7CS8qIGxhdGNoIHRoZSBjb3VudCBBU0FQICovCi0JY291bnQgPSBpbmJfcGl0KFBJVF9DSDApOwkvKiByZWFkIHRoZSBsYXRjaGVkIGNvdW50ICovCi0JY291bnQgfD0gaW5iX3BpdChQSVRfQ0gwKSA8PCA4OwotCi0JLyogVklBNjg2YSB0ZXN0IGNvZGUuLi4gcmVzZXQgdGhlIGxhdGNoIGlmIGNvdW50ID4gbWF4ICsgMSAqLwotCWlmIChjb3VudCA+IExBVENIKSB7Ci0JCW91dGJfcGl0KDB4MzQsIFBJVF9NT0RFKTsKLQkJb3V0Yl9waXQoTEFUQ0ggJiAweGZmLCBQSVRfQ0gwKTsKLQkJb3V0Yl9waXQoTEFUQ0ggPj4gOCwgUElUX0NIMCk7Ci0JCWNvdW50ID0gTEFUQ0ggLSAxOwotCX0KLQotCS8qCi0JICogSXQncyBwb3NzaWJsZSBmb3IgY291bnQgdG8gYXBwZWFyIHRvIGdvIHRoZSB3cm9uZyB3YXkgZm9yIGEKLQkgKiBjb3VwbGUgb2YgcmVhc29uczoKLQkgKgotCSAqICAxLiBUaGUgdGltZXIgY291bnRlciB1bmRlcmZsb3dzLCBidXQgd2UgaGF2ZW4ndCBoYW5kbGVkIHRoZQotCSAqICAgICByZXN1bHRpbmcgaW50ZXJydXB0IGFuZCBpbmNyZW1lbnRlZCBqaWZmaWVzIHlldC4KLQkgKiAgMi4gSGFyZHdhcmUgcHJvYmxlbSB3aXRoIHRoZSB0aW1lciwgbm90IGdpdmluZyB1cyBjb250aW51b3VzIHRpbWUsCi0JICogICAgIHRoZSBjb3VudGVyIGRvZXMgc21hbGwgImp1bXBzIiB1cHdhcmRzIG9uIHNvbWUgUGVudGl1bSBzeXN0ZW1zLAotCSAqICAgICAoc2VlIGMndCA5NS8xMCBwYWdlIDMzNSBmb3IgTmVwdHVuIGJ1Zy4pCi0JICoKLQkgKiBQcmV2aW91cyBhdHRlbXB0cyB0byBoYW5kbGUgdGhlc2UgY2FzZXMgaW50ZWxsaWdlbnRseSB3ZXJlCi0JICogYnVnZ3ksIHNvIHdlIGp1c3QgZG8gdGhlIHNpbXBsZSB0aGluZyBub3cuCi0JICovCi0JaWYgKGNvdW50ID4gb2xkX2NvdW50ICYmIGppZnMgPT0gb2xkX2ppZnMpCi0JCWNvdW50ID0gb2xkX2NvdW50OwotCi0Jb2xkX2NvdW50ID0gY291bnQ7Ci0Jb2xkX2ppZnMgPSBqaWZzOwotCi0JcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjUzX2xvY2ssIGZsYWdzKTsKLQotCWNvdW50ID0gKExBVENIIC0gMSkgLSBjb3VudDsKLQotCXJldHVybiAoY3ljbGVfdCkoamlmcyAqIExBVENIKSArIGNvdW50OwotfQotCi1zdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIHBpdF9jcyA9IHsKLQkubmFtZQkJPSAicGl0IiwKLQkucmF0aW5nCQk9IDExMCwKLQkucmVhZAkJPSBwaXRfcmVhZCwKLQkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKLQkubXVsdAkJPSAwLAotCS5zaGlmdAkJPSAyMCwKLX07Ci0KIHN0YXRpYyBpbnQgX19pbml0IGluaXRfcGl0X2Nsb2Nrc291cmNlKHZvaWQpCiB7CiAJIC8qCkBAIC0yMDUsMTAgKzEyNiw3IEBACiAJICAgIHBpdF9jZS5tb2RlICE9IENMT0NLX0VWVF9NT0RFX1BFUklPRElDKQogCQlyZXR1cm4gMDsKIAotCXBpdF9jcy5tdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChDTE9DS19USUNLX1JBVEUsIHBpdF9jcy5zaGlmdCk7Ci0KLQlyZXR1cm4gY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJnBpdF9jcyk7CisJcmV0dXJuIGNsb2Nrc291cmNlX2k4MjUzX2luaXQoKTsKIH0KIGFyY2hfaW5pdGNhbGwoaW5pdF9waXRfY2xvY2tzb3VyY2UpOwotCiAjZW5kaWYgLyogIUNPTkZJR19YODZfNjQgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnEuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnEuYwppbmRleCAxY2IwYjlmLi42YzA4MDJlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycS5jCkBAIC0yNDksNyArMjQ5LDcgQEAKIAogCQlkYXRhID0gaXJxX2Rlc2NfZ2V0X2lycV9kYXRhKGRlc2MpOwogCQlhZmZpbml0eSA9IGRhdGEtPmFmZmluaXR5OwotCQlpZiAoIWlycV9oYXNfYWN0aW9uKGlycSkgfHwKKwkJaWYgKCFpcnFfaGFzX2FjdGlvbihpcnEpIHx8IGlycWRfaXNfcGVyX2NwdShkYXRhKSB8fAogCQkgICAgY3B1bWFza19zdWJzZXQoYWZmaW5pdHksIGNwdV9vbmxpbmVfbWFzaykpIHsKIAkJCXJhd19zcGluX3VubG9jaygmZGVzYy0+bG9jayk7CiAJCQljb250aW51ZTsKQEAgLTI3Niw3ICsyNzYsOCBAQAogCQllbHNlIGlmICghKHdhcm5lZCsrKSkKIAkJCXNldF9hZmZpbml0eSA9IDA7CiAKLQkJaWYgKCFpcnFkX2Nhbl9tb3ZlX2luX3Byb2Nlc3NfY29udGV4dChkYXRhKSAmJiBjaGlwLT5pcnFfdW5tYXNrKQorCQlpZiAoIWlycWRfY2FuX21vdmVfaW5fcHJvY2Vzc19jb250ZXh0KGRhdGEpICYmCisJCSAgICAhaXJxZF9pcnFfZGlzYWJsZWQoZGF0YSkgJiYgY2hpcC0+aXJxX3VubWFzaykKIAkJCWNoaXAtPmlycV91bm1hc2soZGF0YSk7CiAKIAkJcmF3X3NwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9qdW1wX2xhYmVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvanVtcF9sYWJlbC5jCmluZGV4IDk2MWI2YjMuLjNmZWUzNDYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9qdW1wX2xhYmVsLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2p1bXBfbGFiZWwuYwpAQCAtMzQsNyArMzQsNyBAQAogCQljb2RlLm9mZnNldCA9IGVudHJ5LT50YXJnZXQgLQogCQkJCShlbnRyeS0+Y29kZSArIEpVTVBfTEFCRUxfTk9QX1NJWkUpOwogCX0gZWxzZQotCQltZW1jcHkoJmNvZGUsIGlkZWFsX25vcDUsIEpVTVBfTEFCRUxfTk9QX1NJWkUpOworCQltZW1jcHkoJmNvZGUsIGlkZWFsX25vcHNbTk9QX0FUT01JQzVdLCBKVU1QX0xBQkVMX05PUF9TSVpFKTsKIAlnZXRfb25saW5lX2NwdXMoKTsKIAltdXRleF9sb2NrKCZ0ZXh0X211dGV4KTsKIAl0ZXh0X3Bva2Vfc21wKCh2b2lkICopZW50cnktPmNvZGUsICZjb2RlLCBKVU1QX0xBQkVMX05PUF9TSVpFKTsKQEAgLTQ0LDcgKzQ0LDggQEAKIAogdm9pZCBhcmNoX2p1bXBfbGFiZWxfdGV4dF9wb2tlX2Vhcmx5KGp1bXBfbGFiZWxfdCBhZGRyKQogewotCXRleHRfcG9rZV9lYXJseSgodm9pZCAqKWFkZHIsIGlkZWFsX25vcDUsIEpVTVBfTEFCRUxfTk9QX1NJWkUpOworCXRleHRfcG9rZV9lYXJseSgodm9pZCAqKWFkZHIsIGlkZWFsX25vcHNbTk9QX0FUT01JQzVdLAorCQkJSlVNUF9MQUJFTF9OT1BfU0laRSk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggYzk2OWZkOS4uZjFhNjI0NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jCkBAIC0xMTgzLDEyICsxMTgzLDEzIEBACiAJCQkJCSBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiID0gZ2V0X2twcm9iZV9jdGxibGsoKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogVGhpcyBpcyBwb3NzaWJsZSBpZiBvcCBpcyB1bmRlciBkZWxheWVkIHVub3B0aW1pemluZyAqLwogCWlmIChrcHJvYmVfZGlzYWJsZWQoJm9wLT5rcCkpCiAJCXJldHVybjsKIAotCXByZWVtcHRfZGlzYWJsZSgpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlpZiAoa3Byb2JlX3J1bm5pbmcoKSkgewogCQlrcHJvYmVzX2luY19ubWlzc2VkX2NvdW50KCZvcC0+a3ApOwogCX0gZWxzZSB7CkBAIC0xMjA3LDcgKzEyMDgsNyBAQAogCQlvcHRfcHJlX2hhbmRsZXIoJm9wLT5rcCwgcmVncyk7CiAJCV9fdGhpc19jcHVfd3JpdGUoY3VycmVudF9rcHJvYmUsIE5VTEwpOwogCX0KLQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IF9fa3Byb2JlcyBjb3B5X29wdGltaXplZF9pbnN0cnVjdGlvbnModTggKmRlc3QsIHU4ICpzcmMpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva3ZtY2xvY2suYyBiL2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jCmluZGV4IGY5OGQzZWEuLjYzODlhNmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jCkBAIC0yNiw4ICsyNiw2IEBACiAjaW5jbHVkZSA8YXNtL3g4Nl9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgogCi0jZGVmaW5lIEtWTV9TQ0FMRSAyMgotCiBzdGF0aWMgaW50IGt2bWNsb2NrID0gMTsKIHN0YXRpYyBpbnQgbXNyX2t2bV9zeXN0ZW1fdGltZSA9IE1TUl9LVk1fU1lTVEVNX1RJTUU7CiBzdGF0aWMgaW50IG1zcl9rdm1fd2FsbF9jbG9jayA9IE1TUl9LVk1fV0FMTF9DTE9DSzsKQEAgLTEyMCw4ICsxMTgsNiBAQAogCS5yZWFkID0ga3ZtX2Nsb2NrX2dldF9jeWNsZXMsCiAJLnJhdGluZyA9IDQwMCwKIAkubWFzayA9IENMT0NLU09VUkNFX01BU0soNjQpLAotCS5tdWx0ID0gMSA8PCBLVk1fU0NBTEUsCi0JLnNoaWZ0ID0gS1ZNX1NDQUxFLAogCS5mbGFncyA9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIApAQCAtMjAzLDcgKzE5OSw3IEBACiAJbWFjaGluZV9vcHMuY3Jhc2hfc2h1dGRvd24gID0ga3ZtX2NyYXNoX3NodXRkb3duOwogI2VuZGlmCiAJa3ZtX2dldF9wcmVzZXRfbHBqKCk7Ci0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmt2bV9jbG9jayk7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmt2bV9jbG9jaywgTlNFQ19QRVJfU0VDKTsKIAlwdl9pbmZvLnBhcmF2aXJ0X2VuYWJsZWQgPSAxOwogCXB2X2luZm8ubmFtZSA9ICJLVk0iOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbW9kdWxlLmMKaW5kZXggYWIyM2YxYS4uNTJmMjU2ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9tb2R1bGUuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CisjaW5jbHVkZSA8bGludXgvanVtcF9sYWJlbC5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jIGIvYXJjaC94ODYva2VybmVsL21wcGFyc2UuYwppbmRleCA1YTUzMmNlLi42ZjliZmZmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmMKQEAgLTcxNSwxNyArNzE1LDE1IEBACiAJfQogfQogCi1zdGF0aWMgaW50CitzdGF0aWMgaW50IF9faW5pdAogY2hlY2tfc2xvdCh1bnNpZ25lZCBsb25nIG1wY19uZXdfcGh5cywgdW5zaWduZWQgbG9uZyBtcGNfbmV3X2xlbmd0aCwgaW50IGNvdW50KQogewotCWludCByZXQgPSAwOwotCiAJaWYgKCFtcGNfbmV3X3BoeXMgfHwgY291bnQgPD0gbXBjX25ld19sZW5ndGgpIHsKIAkJV0FSTigxLCAidXBkYXRlX21wdGFibGU6IE5vIHNwYXJlIHNsb3RzIChsZW5ndGg6ICV4KVxuIiwgY291bnQpOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KICNlbHNlIC8qIENPTkZJR19YODZfSU9fQVBJQyAqLwogc3RhdGljCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWlvbW11X3RhYmxlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWlvbW11X3RhYmxlLmMKaW5kZXggNTVkNzQ1ZS4uMzVjY2Y3NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1pb21tdV90YWJsZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktaW9tbXVfdGFibGUuYwpAQCAtNTAsMjAgKzUwLDE0IEBACiAJCQkJc3RydWN0IGlvbW11X3RhYmxlX2VudHJ5ICpmaW5pc2gpCiB7CiAJc3RydWN0IGlvbW11X3RhYmxlX2VudHJ5ICpwLCAqcSwgKng7Ci0JY2hhciBzeW1fcFtLU1lNX1NZTUJPTF9MRU5dOwotCWNoYXIgc3ltX3FbS1NZTV9TWU1CT0xfTEVOXTsKIAogCS8qIFNpbXBsZSBjeWNsaWMgZGVwZW5kZW5jeSBjaGVja2VyLiAqLwogCWZvciAocCA9IHN0YXJ0OyBwIDwgZmluaXNoOyBwKyspIHsKIAkJcSA9IGZpbmRfZGVwZW5kZW50c19vZihzdGFydCwgZmluaXNoLCBwKTsKIAkJeCA9IGZpbmRfZGVwZW5kZW50c19vZihzdGFydCwgZmluaXNoLCBxKTsKIAkJaWYgKHAgPT0geCkgewotCQkJc3ByaW50X3N5bWJvbChzeW1fcCwgKHVuc2lnbmVkIGxvbmcpcC0+ZGV0ZWN0KTsKLQkJCXNwcmludF9zeW1ib2woc3ltX3EsICh1bnNpZ25lZCBsb25nKXEtPmRldGVjdCk7Ci0KLQkJCXByaW50ayhLRVJOX0VSUiAiQ1lDTElDIERFUEVOREVOQ1kgRk9VTkQhICVzIGRlcGVuZHMiIFwKLQkJCQkJIiBvbiAlcyBhbmQgdmljZS12ZXJzYS4gQlJFQUtJTkcgSVQuXG4iLAotCQkJCQlzeW1fcCwgc3ltX3EpOworCQkJcHJpbnRrKEtFUk5fRVJSICJDWUNMSUMgREVQRU5ERU5DWSBGT1VORCEgJXBTIGRlcGVuZHMgb24gJXBTIGFuZCB2aWNlLXZlcnNhLiBCUkVBS0lORyBJVC5cbiIsCisJCQkgICAgICAgcC0+ZGV0ZWN0LCBxLT5kZXRlY3QpOwogCQkJLyogSGVhdnkgaGFuZGVkIHdheS4uKi8KIAkJCXgtPmRlcGVuZCA9IDA7CiAJCX0KQEAgLTcyLDEyICs2Niw4IEBACiAJZm9yIChwID0gc3RhcnQ7IHAgPCBmaW5pc2g7IHArKykgewogCQlxID0gZmluZF9kZXBlbmRlbnRzX29mKHAsIGZpbmlzaCwgcCk7CiAJCWlmIChxICYmIHEgPiBwKSB7Ci0JCQlzcHJpbnRfc3ltYm9sKHN5bV9wLCAodW5zaWduZWQgbG9uZylwLT5kZXRlY3QpOwotCQkJc3ByaW50X3N5bWJvbChzeW1fcSwgKHVuc2lnbmVkIGxvbmcpcS0+ZGV0ZWN0KTsKLQotCQkJcHJpbnRrKEtFUk5fRVJSICJFWEVDVVRJT04gT1JERVIgSU5WQUxJRCEgJXMgIlwKLQkJCQkJInNob3VsZCBiZSBjYWxsZWQgYmVmb3JlICVzIVxuIiwKLQkJCQkJc3ltX3AsIHN5bV9xKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiRVhFQ1VUSU9OIE9SREVSIElOVkFMSUQhICVwUyBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSAlcFMhXG4iLAorCQkJICAgICAgIHAtPmRldGVjdCwgcS0+ZGV0ZWN0KTsKIAkJfQogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9iZV9yb21zXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvYmVfcm9tcy5jCnNpbWlsYXJpdHkgaW5kZXggNjUlCnJlbmFtZSBmcm9tIGFyY2gveDg2L2tlcm5lbC9wcm9iZV9yb21zXzMyLmMKcmVuYW1lIHRvIGFyY2gveDg2L2tlcm5lbC9wcm9iZV9yb21zLmMKaW5kZXggMDcxZTdmZS4uYmEwYTRjYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2JlX3JvbXNfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvYmVfcm9tcy5jCkBAIC03Myw2ICs3MywxMDcgQEAKIAkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kgfCBJT1JFU09VUkNFX1JFQURPTkxZIHwgSU9SRVNPVVJDRV9NRU0KIH07CiAKKy8qIGRvZXMgdGhpcyBvcHJvbSBzdXBwb3J0IHRoZSBnaXZlbiBwY2kgZGV2aWNlLCBvciBhbnkgb2YgdGhlIGRldmljZXMKKyAqIHRoYXQgdGhlIGRyaXZlciBzdXBwb3J0cz8KKyAqLworc3RhdGljIGJvb2wgbWF0Y2hfaWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIHNob3J0IHZlbmRvciwgdW5zaWduZWQgc2hvcnQgZGV2aWNlKQoreworCXN0cnVjdCBwY2lfZHJpdmVyICpkcnYgPSBwZGV2LT5kcml2ZXI7CisJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkOworCisJaWYgKHBkZXYtPnZlbmRvciA9PSB2ZW5kb3IgJiYgcGRldi0+ZGV2aWNlID09IGRldmljZSkKKwkJcmV0dXJuIHRydWU7CisKKwlmb3IgKGlkID0gZHJ2ID8gZHJ2LT5pZF90YWJsZSA6IE5VTEw7IGlkICYmIGlkLT52ZW5kb3I7IGlkKyspCisJCWlmIChpZC0+dmVuZG9yID09IHZlbmRvciAmJiBpZC0+ZGV2aWNlID09IGRldmljZSkKKwkJCWJyZWFrOworCisJcmV0dXJuIGlkICYmIGlkLT52ZW5kb3I7Cit9CisKK3N0YXRpYyBib29sIHByb2JlX2xpc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIHNob3J0IHZlbmRvciwKKwkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJvbV9saXN0KQoreworCXVuc2lnbmVkIHNob3J0IGRldmljZTsKKworCWRvIHsKKwkJaWYgKHByb2JlX2tlcm5lbF9hZGRyZXNzKHJvbV9saXN0LCBkZXZpY2UpICE9IDApCisJCQlkZXZpY2UgPSAwOworCisJCWlmIChkZXZpY2UgJiYgbWF0Y2hfaWQocGRldiwgdmVuZG9yLCBkZXZpY2UpKQorCQkJYnJlYWs7CisKKwkJcm9tX2xpc3QgKz0gMjsKKwl9IHdoaWxlIChkZXZpY2UpOworCisJcmV0dXJuICEhZGV2aWNlOworfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlICpmaW5kX29wcm9tKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqb3Byb20gPSBOVUxMOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWRhcHRlcl9yb21fcmVzb3VyY2VzKTsgaSsrKSB7CisJCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gJmFkYXB0ZXJfcm9tX3Jlc291cmNlc1tpXTsKKwkJdW5zaWduZWQgc2hvcnQgb2Zmc2V0LCB2ZW5kb3IsIGRldmljZSwgbGlzdCwgcmV2OworCQljb25zdCB1bnNpZ25lZCBjaGFyICpyb207CisKKwkJaWYgKHJlcy0+ZW5kID09IDApCisJCQlicmVhazsKKworCQlyb20gPSBpc2FfYnVzX3RvX3ZpcnQocmVzLT5zdGFydCk7CisJCWlmIChwcm9iZV9rZXJuZWxfYWRkcmVzcyhyb20gKyAweDE4LCBvZmZzZXQpICE9IDApCisJCQljb250aW51ZTsKKworCQlpZiAocHJvYmVfa2VybmVsX2FkZHJlc3Mocm9tICsgb2Zmc2V0ICsgMHg0LCB2ZW5kb3IpICE9IDApCisJCQljb250aW51ZTsKKworCQlpZiAocHJvYmVfa2VybmVsX2FkZHJlc3Mocm9tICsgb2Zmc2V0ICsgMHg2LCBkZXZpY2UpICE9IDApCisJCQljb250aW51ZTsKKworCQlpZiAobWF0Y2hfaWQocGRldiwgdmVuZG9yLCBkZXZpY2UpKSB7CisJCQlvcHJvbSA9IHJlczsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHByb2JlX2tlcm5lbF9hZGRyZXNzKHJvbSArIG9mZnNldCArIDB4OCwgbGlzdCkgPT0gMCAmJgorCQkgICAgcHJvYmVfa2VybmVsX2FkZHJlc3Mocm9tICsgb2Zmc2V0ICsgMHhjLCByZXYpID09IDAgJiYKKwkJICAgIHJldiA+PSAzICYmIGxpc3QgJiYKKwkJICAgIHByb2JlX2xpc3QocGRldiwgdmVuZG9yLCByb20gKyBvZmZzZXQgKyBsaXN0KSkgeworCQkJb3Byb20gPSByZXM7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBvcHJvbTsKK30KKwordm9pZCAqcGNpX21hcF9iaW9zcm9tKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqb3Byb20gPSBmaW5kX29wcm9tKHBkZXYpOworCisJaWYgKCFvcHJvbSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gaW9yZW1hcChvcHJvbS0+c3RhcnQsIHJlc291cmNlX3NpemUob3Byb20pKTsKK30KK0VYUE9SVF9TWU1CT0wocGNpX21hcF9iaW9zcm9tKTsKKwordm9pZCBwY2lfdW5tYXBfYmlvc3JvbSh2b2lkIF9faW9tZW0gKmltYWdlKQoreworCWlvdW5tYXAoaW1hZ2UpOworfQorRVhQT1JUX1NZTUJPTChwY2lfdW5tYXBfYmlvc3JvbSk7CisKK3NpemVfdCBwY2lfYmlvc3JvbV9zaXplKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqb3Byb20gPSBmaW5kX29wcm9tKHBkZXYpOworCisJcmV0dXJuIG9wcm9tID8gcmVzb3VyY2Vfc2l6ZShvcHJvbSkgOiAwOworfQorRVhQT1JUX1NZTUJPTChwY2lfYmlvc3JvbV9zaXplKTsKKwogI2RlZmluZSBST01TSUdOQVRVUkUgMHhhYTU1CiAKIHN0YXRpYyBpbnQgX19pbml0IHJvbXNpZ25hdHVyZShjb25zdCB1bnNpZ25lZCBjaGFyICpyb20pCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYwppbmRleCBkNDZjYmU0Li44OGE5MGE5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTQ0OSw3ICs0NDksNyBAQAogdm9pZCBtd2FpdF9pZGxlX3dpdGhfaGludHModW5zaWduZWQgbG9uZyBheCwgdW5zaWduZWQgbG9uZyBjeCkKIHsKIAlpZiAoIW5lZWRfcmVzY2hlZCgpKSB7Ci0JCWlmIChjcHVfaGFzKF9fdGhpc19jcHVfcHRyKCZjcHVfaW5mbyksIFg4Nl9GRUFUVVJFX0NMRkxVU0hfTU9OSVRPUikpCisJCWlmICh0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ0xGTFVTSF9NT05JVE9SKSkKIAkJCWNsZmx1c2goKHZvaWQgKikmY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFncyk7CiAKIAkJX19tb25pdG9yKCh2b2lkICopJmN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZmxhZ3MsIDAsIDApOwpAQCAtNDY1LDcgKzQ2NSw3IEBACiAJaWYgKCFuZWVkX3Jlc2NoZWQoKSkgewogCQl0cmFjZV9wb3dlcl9zdGFydChQT1dFUl9DU1RBVEUsIDEsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJCXRyYWNlX2NwdV9pZGxlKDEsIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JCWlmIChjcHVfaGFzKF9fdGhpc19jcHVfcHRyKCZjcHVfaW5mbyksIFg4Nl9GRUFUVVJFX0NMRkxVU0hfTU9OSVRPUikpCisJCWlmICh0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ0xGTFVTSF9NT05JVE9SKSkKIAkJCWNsZmx1c2goKHZvaWQgKikmY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFncyk7CiAKIAkJX19tb25pdG9yKCh2b2lkICopJmN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZmxhZ3MsIDAsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jIGIvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCmluZGV4IDQ1ODkyZGMuLmY2NWU1YjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMKQEAgLTYwOCw2ICs2MDgsOSBAQAogCXVuc2lnbmVkIGxlbiwgdHlwZTsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqYnA7CiAKKwlpZiAocHRyYWNlX2dldF9icmVha3BvaW50cyh0c2spIDwgMCkKKwkJcmV0dXJuIC1FU1JDSDsKKwogCWRhdGEgJj0gfkRSX0NPTlRST0xfUkVTRVJWRUQ7CiAJb2xkX2RyNyA9IHB0cmFjZV9nZXRfZHI3KHRocmVhZC0+cHRyYWNlX2Jwcyk7CiByZXN0b3JlOgpAQCAtNjU1LDYgKzY1OCw5IEBACiAJCX0KIAkJZ290byByZXN0b3JlOwogCX0KKworCXB0cmFjZV9wdXRfYnJlYWtwb2ludHModHNrKTsKKwogCXJldHVybiAoKG9yaWdfcmV0IDwgMCkgPyBvcmlnX3JldCA6IHJjKTsKIH0KIApAQCAtNjY4LDEwICs2NzQsMTcgQEAKIAogCWlmIChuIDwgSEJQX05VTSkgewogCQlzdHJ1Y3QgcGVyZl9ldmVudCAqYnA7CisKKwkJaWYgKHB0cmFjZV9nZXRfYnJlYWtwb2ludHModHNrKSA8IDApCisJCQlyZXR1cm4gLUVTUkNIOworCiAJCWJwID0gdGhyZWFkLT5wdHJhY2VfYnBzW25dOwogCQlpZiAoIWJwKQotCQkJcmV0dXJuIDA7Ci0JCXZhbCA9IGJwLT5ody5pbmZvLmFkZHJlc3M7CisJCQl2YWwgPSAwOworCQllbHNlCisJCQl2YWwgPSBicC0+aHcuaW5mby5hZGRyZXNzOworCisJCXB0cmFjZV9wdXRfYnJlYWtwb2ludHModHNrKTsKIAl9IGVsc2UgaWYgKG4gPT0gNikgewogCQl2YWwgPSB0aHJlYWQtPmRlYnVncmVnNjsKIAkgfSBlbHNlIGlmIChuID09IDcpIHsKQEAgLTY4Niw2ICs2OTksMTAgQEAKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqYnA7CiAJc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQgPSAmdHNrLT50aHJlYWQ7CiAJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyOworCWludCBlcnIgPSAwOworCisJaWYgKHB0cmFjZV9nZXRfYnJlYWtwb2ludHModHNrKSA8IDApCisJCXJldHVybiAtRVNSQ0g7CiAKIAlpZiAoIXQtPnB0cmFjZV9icHNbbnJdKSB7CiAJCXB0cmFjZV9icmVha3BvaW50X2luaXQoJmF0dHIpOwpAQCAtNzA5LDI0ICs3MjYsMjMgQEAKIAkJICogd3JpdGluZyBmb3IgdGhlIHVzZXIuIEFuZCBhbnl3YXkgdGhpcyBpcyB0aGUgcHJldmlvdXMKIAkJICogYmVoYXZpb3VyLgogCQkgKi8KLQkJaWYgKElTX0VSUihicCkpCi0JCQlyZXR1cm4gUFRSX0VSUihicCk7CisJCWlmIChJU19FUlIoYnApKSB7CisJCQllcnIgPSBQVFJfRVJSKGJwKTsKKwkJCWdvdG8gcHV0OworCQl9CiAKIAkJdC0+cHRyYWNlX2Jwc1tucl0gPSBicDsKIAl9IGVsc2UgewotCQlpbnQgZXJyOwotCiAJCWJwID0gdC0+cHRyYWNlX2Jwc1tucl07CiAKIAkJYXR0ciA9IGJwLT5hdHRyOwogCQlhdHRyLmJwX2FkZHIgPSBhZGRyOwogCQllcnIgPSBtb2RpZnlfdXNlcl9od19icmVha3BvaW50KGJwLCAmYXR0cik7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwogCX0KIAotCi0JcmV0dXJuIDA7CitwdXQ6CisJcHRyYWNlX3B1dF9icmVha3BvaW50cyh0c2spOworCXJldHVybiBlcnI7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMKaW5kZXggMDhjNDRiMC4uMGMwMTZmNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYwpAQCAtMzYsNyArMzYsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRlc2NfcHRyIG5vX2lkdCA9IHt9Owogc3RhdGljIGludCByZWJvb3RfbW9kZTsKLWVudW0gcmVib290X3R5cGUgcmVib290X3R5cGUgPSBCT09UX0tCRDsKK2VudW0gcmVib290X3R5cGUgcmVib290X3R5cGUgPSBCT09UX0FDUEk7CiBpbnQgcmVib290X2ZvcmNlOwogCiAjaWYgZGVmaW5lZChDT05GSUdfWDg2XzMyKSAmJiBkZWZpbmVkKENPTkZJR19TTVApCkBAIC00NzgsOSArNDc4LDI0IEBACiB7CiB9CiAKKy8qCisgKiBXaW5kb3dzIGNvbXBhdGlibGUgeDg2IGhhcmR3YXJlIGV4cGVjdHMgdGhlIGZvbGxvd2luZyBvbiByZWJvb3Q6CisgKgorICogMSkgSWYgdGhlIEZBRFQgaGFzIHRoZSBBQ1BJIHJlYm9vdCByZWdpc3RlciBmbGFnIHNldCwgdHJ5IGl0CisgKiAyKSBJZiBzdGlsbCBhbGl2ZSwgd3JpdGUgdG8gdGhlIGtleWJvYXJkIGNvbnRyb2xsZXIKKyAqIDMpIElmIHN0aWxsIGFsaXZlLCB3cml0ZSB0byB0aGUgQUNQSSByZWJvb3QgcmVnaXN0ZXIgYWdhaW4KKyAqIDQpIElmIHN0aWxsIGFsaXZlLCB3cml0ZSB0byB0aGUga2V5Ym9hcmQgY29udHJvbGxlciBhZ2FpbgorICoKKyAqIElmIHRoZSBtYWNoaW5lIGlzIHN0aWxsIGFsaXZlIGF0IHRoaXMgc3RhZ2UsIGl0IGdpdmVzIHVwLiBXZSBkZWZhdWx0IHRvCisgKiBmb2xsb3dpbmcgdGhlIHNhbWUgcGF0dGVybiwgZXhjZXB0IHRoYXQgaWYgd2UncmUgc3RpbGwgYWxpdmUgYWZ0ZXIgKDQpIHdlJ2xsCisgKiB0cnkgdG8gZm9yY2UgYSB0cmlwbGUgZmF1bHQgYW5kIHRoZW4gY3ljbGUgYmV0d2VlbiBoaXR0aW5nIHRoZSBrZXlib2FyZAorICogY29udHJvbGxlciBhbmQgZG9pbmcgdGhhdAorICovCiBzdGF0aWMgdm9pZCBuYXRpdmVfbWFjaGluZV9lbWVyZ2VuY3lfcmVzdGFydCh2b2lkKQogewogCWludCBpOworCWludCBhdHRlbXB0ID0gMDsKKwlpbnQgb3JpZ19yZWJvb3RfdHlwZSA9IHJlYm9vdF90eXBlOwogCiAJaWYgKHJlYm9vdF9lbWVyZ2VuY3kpCiAJCWVtZXJnZW5jeV92bXhfZGlzYWJsZV9hbGwoKTsKQEAgLTUwMiw2ICs1MTcsMTMgQEAKIAkJCQlvdXRiKDB4ZmUsIDB4NjQpOyAvKiBwdWxzZSByZXNldCBsb3cgKi8KIAkJCQl1ZGVsYXkoNTApOwogCQkJfQorCQkJaWYgKGF0dGVtcHQgPT0gMCAmJiBvcmlnX3JlYm9vdF90eXBlID09IEJPT1RfQUNQSSkgeworCQkJCWF0dGVtcHQgPSAxOworCQkJCXJlYm9vdF90eXBlID0gQk9PVF9BQ1BJOworCQkJfSBlbHNlIHsKKwkJCQlyZWJvb3RfdHlwZSA9IEJPT1RfVFJJUExFOworCQkJfQorCQkJYnJlYWs7CiAKIAkJY2FzZSBCT09UX1RSSVBMRToKIAkJCWxvYWRfaWR0KCZub19pZHQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3JlYm9vdF8zMi5TIGIvYXJjaC94ODYva2VybmVsL3JlYm9vdF8zMi5TCmluZGV4IDI5MDkyYjMuLjFkNWM0NmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3RfMzIuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcmVib290XzMyLlMKQEAgLTIxLDI2ICsyMSwyNiBAQAogCS8qIEdldCBvdXIgb3duIHJlbG9jYXRlZCBhZGRyZXNzICovCiAJY2FsbAkxZgogMToJcG9wbAklZWJ4Ci0Jc3VibAkkMWIsICVlYngKKwlzdWJsCSQoMWIgLSByX2Jhc2UpLCAlZWJ4CiAKIAkvKiBDb21wdXRlIHRoZSBlcXVpdmFsZW50IHJlYWwtbW9kZSBzZWdtZW50ICovCiAJbW92bAklZWJ4LCAlZWN4CiAJc2hybAkkNCwgJWVjeAogCQogCS8qIFBhdGNoIHBvc3QtcmVhbC1tb2RlIHNlZ21lbnQganVtcCAqLwotCW1vdncJZGlzcGF0Y2hfdGFibGUoJWVieCwlZWF4LDIpLCVheAotCW1vdncJJWF4LCAxMDFmKCVlYngpCi0JbW92dwklY3gsIDEwMmYoJWVieCkKKwltb3Z3CShkaXNwYXRjaF90YWJsZSAtIHJfYmFzZSkoJWVieCwlZWF4LDIpLCVheAorCW1vdncJJWF4LCAoMTAxZiAtIHJfYmFzZSkoJWVieCkKKwltb3Z3CSVjeCwgKDEwMmYgLSByX2Jhc2UpKCVlYngpCiAKIAkvKiBTZXQgdXAgdGhlIElEVCBmb3IgcmVhbCBtb2RlLiAqLwotCWxpZHRsCW1hY2hpbmVfcmVhbF9yZXN0YXJ0X2lkdCglZWJ4KQorCWxpZHRsCShtYWNoaW5lX3JlYWxfcmVzdGFydF9pZHQgLSByX2Jhc2UpKCVlYngpCiAKIAkvKgogCSAqIFNldCB1cCBhIEdEVCBmcm9tIHdoaWNoIHdlIGNhbiBsb2FkIHNlZ21lbnQgZGVzY3JpcHRvcnMgZm9yIHJlYWwKIAkgKiBtb2RlLiAgVGhlIEdEVCBpcyBub3QgdXNlZCBpbiByZWFsIG1vZGU7IGl0IGlzIGp1c3QgbmVlZGVkIGhlcmUgdG8KIAkgKiBwcmVwYXJlIHRoZSBkZXNjcmlwdG9ycy4KIAkgKi8KLQlsZ2R0bAltYWNoaW5lX3JlYWxfcmVzdGFydF9nZHQoJWVieCkKKwlsZ2R0bAkobWFjaGluZV9yZWFsX3Jlc3RhcnRfZ2R0IC0gcl9iYXNlKSglZWJ4KQogCiAJLyoKIAkgKiBMb2FkIHRoZSBkYXRhIHNlZ21lbnQgcmVnaXN0ZXJzIHdpdGggMTYtYml0IGNvbXBhdGlibGUgdmFsdWVzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCmluZGV4IDRiZTliMzkuLmMzMDUwYWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCkBAIC02OTEsOCArNjkxLDYgQEAKIAogdm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KICNpZmRlZiBDT05GSUdfWDg2XzMyCiAJbWVtY3B5KCZib290X2NwdV9kYXRhLCAmbmV3X2NwdV9kYXRhLCBzaXplb2YobmV3X2NwdV9kYXRhKSk7CiAJdmlzd3NfZWFybHlfZGV0ZWN0KCk7CkBAIC0xMDQxLDkgKzEwMzksNyBAQAogCiAJbWNoZWNrX2luaXQoKTsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlhcmNoX2luaXRfaWRlYWxfbm9wNSgpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlhcmNoX2luaXRfaWRlYWxfbm9wcygpOwogfQogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NpZ25hbC5jIGIvYXJjaC94ODYva2VybmVsL3NpZ25hbC5jCmluZGV4IDRmZDE3M2MuLjQwYTI0OTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2lnbmFsLmMKQEAgLTYwMSwxMCArNjAxLDcgQEAKIAkJZ290byBiYWRmcmFtZTsKIAogCXNpZ2RlbHNldG1hc2soJnNldCwgfl9CTE9DS0FCTEUpOwotCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCWN1cnJlbnQtPmJsb2NrZWQgPSBzZXQ7Ci0JcmVjYWxjX3NpZ3BlbmRpbmcoKTsKLQlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOworCXNldF9jdXJyZW50X2Jsb2NrZWQoJnNldCk7CiAKIAlpZiAocmVzdG9yZV9zaWdjb250ZXh0KHJlZ3MsICZmcmFtZS0+dWMudWNfbWNvbnRleHQsICZheCkpCiAJCWdvdG8gYmFkZnJhbWU7CkBAIC02ODIsNiArNjc5LDcgQEAKIGhhbmRsZV9zaWduYWwodW5zaWduZWQgbG9uZyBzaWcsIHNpZ2luZm9fdCAqaW5mbywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwKIAkgICAgICBzaWdzZXRfdCAqb2xkc2V0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKKwlzaWdzZXRfdCBibG9ja2VkOwogCWludCByZXQ7CiAKIAkvKiBBcmUgd2UgZnJvbSBhIHN5c3RlbSBjYWxsPyAqLwpAQCAtNzQxLDEyICs3MzksMTAgQEAKIAkgKi8KIAlyZWdzLT5mbGFncyAmPSB+WDg2X0VGTEFHU19URjsKIAotCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCXNpZ29yc2V0cygmY3VycmVudC0+YmxvY2tlZCwgJmN1cnJlbnQtPmJsb2NrZWQsICZrYS0+c2Euc2FfbWFzayk7CisJc2lnb3JzZXRzKCZibG9ja2VkLCAmY3VycmVudC0+YmxvY2tlZCwgJmthLT5zYS5zYV9tYXNrKTsKIAlpZiAoIShrYS0+c2Euc2FfZmxhZ3MgJiBTQV9OT0RFRkVSKSkKLQkJc2lnYWRkc2V0KCZjdXJyZW50LT5ibG9ja2VkLCBzaWcpOwotCXJlY2FsY19zaWdwZW5kaW5nKCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwkJc2lnYWRkc2V0KCZibG9ja2VkLCBzaWcpOworCXNldF9jdXJyZW50X2Jsb2NrZWQoJmJsb2NrZWQpOwogCiAJdHJhY2Vob29rX3NpZ25hbF9oYW5kbGVyKHNpZywgaW5mbywga2EsIHJlZ3MsCiAJCQkJIHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NJTkdMRVNURVApKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IDhlZDg5MDguLmEzYzQzMGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwpAQCAtMzEyLDI2ICszMTIsNiBAQAogCQlpZGVudGlmeV9zZWNvbmRhcnlfY3B1KGMpOwogfQogCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgY2hlY2tfY3B1X3NpYmxpbmdzX29uX3NhbWVfbm9kZShpbnQgY3B1MSwgaW50IGNwdTIpCi17Ci0JaW50IG5vZGUxID0gZWFybHlfY3B1X3RvX25vZGUoY3B1MSk7Ci0JaW50IG5vZGUyID0gZWFybHlfY3B1X3RvX25vZGUoY3B1Mik7Ci0KLQkvKgotCSAqIE91ciBDUFUgc2NoZWR1bGVyIGFzc3VtZXMgYWxsIGxvZ2ljYWwgY3B1cyBpbiB0aGUgc2FtZSBwaHlzaWNhbCBjcHUKLQkgKiBzaGFyZSB0aGUgc2FtZSBub2RlLiBCdXQsIGJ1Z2d5IEFDUEkgb3IgTlVNQSBlbXVsYXRpb24gbWlnaHQgYXNzaWduCi0JICogdGhlbSB0byBkaWZmZXJlbnQgbm9kZS4gRml4IGl0LgotCSAqLwotCWlmIChub2RlMSAhPSBub2RlMikgewotCQlwcl93YXJuaW5nKCJDUFUgJWQgaW4gbm9kZSAlZCBhbmQgQ1BVICVkIGluIG5vZGUgJWQgYXJlIGluIHRoZSBzYW1lIHBoeXNpY2FsIENQVS4gZm9yY2luZyBzYW1lIG5vZGUgJWRcbiIsCi0JCQkgICBjcHUxLCBub2RlMSwgY3B1Miwgbm9kZTIsIG5vZGUyKTsKLQotCQludW1hX3JlbW92ZV9jcHUoY3B1MSk7Ci0JCW51bWFfc2V0X25vZGUoY3B1MSwgbm9kZTIpOwotCQludW1hX2FkZF9jcHUoY3B1MSk7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgbGlua190aHJlYWRfc2libGluZ3MoaW50IGNwdTEsIGludCBjcHUyKQogewogCWNwdW1hc2tfc2V0X2NwdShjcHUxLCBjcHVfc2libGluZ19tYXNrKGNwdTIpKTsKQEAgLTM0MCw3ICszMjAsNiBAQAogCWNwdW1hc2tfc2V0X2NwdShjcHUyLCBjcHVfY29yZV9tYXNrKGNwdTEpKTsKIAljcHVtYXNrX3NldF9jcHUoY3B1MSwgY3B1X2xsY19zaGFyZWRfbWFzayhjcHUyKSk7CiAJY3B1bWFza19zZXRfY3B1KGNwdTIsIGNwdV9sbGNfc2hhcmVkX21hc2soY3B1MSkpOwotCWNoZWNrX2NwdV9zaWJsaW5nc19vbl9zYW1lX25vZGUoY3B1MSwgY3B1Mik7CiB9CiAKIApAQCAtMzgyLDEyICszNjEsMTAgQEAKIAkJICAgIHBlcl9jcHUoY3B1X2xsY19pZCwgY3B1KSA9PSBwZXJfY3B1KGNwdV9sbGNfaWQsIGkpKSB7CiAJCQljcHVtYXNrX3NldF9jcHUoaSwgY3B1X2xsY19zaGFyZWRfbWFzayhjcHUpKTsKIAkJCWNwdW1hc2tfc2V0X2NwdShjcHUsIGNwdV9sbGNfc2hhcmVkX21hc2soaSkpOwotCQkJY2hlY2tfY3B1X3NpYmxpbmdzX29uX3NhbWVfbm9kZShjcHUsIGkpOwogCQl9CiAJCWlmIChjLT5waHlzX3Byb2NfaWQgPT0gY3B1X2RhdGEoaSkucGh5c19wcm9jX2lkKSB7CiAJCQljcHVtYXNrX3NldF9jcHUoaSwgY3B1X2NvcmVfbWFzayhjcHUpKTsKIAkJCWNwdW1hc2tfc2V0X2NwdShjcHUsIGNwdV9jb3JlX21hc2soaSkpOwotCQkJY2hlY2tfY3B1X3NpYmxpbmdzX29uX3NhbWVfbm9kZShjcHUsIGkpOwogCQkJLyoKIAkJCSAqICBEb2VzIHRoaXMgbmV3IGNwdSBicmluZ3VwIGEgbmV3IGNvcmU/CiAJCQkgKi8KQEAgLTEzNTUsOSArMTMzMiw5IEBACiAJdm9pZCAqbXdhaXRfcHRyOwogCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9IF9fdGhpc19jcHVfcHRyKCZjcHVfaW5mbyk7CiAKLQlpZiAoIShjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX01XQUlUKSAmJiBtd2FpdF91c2FibGUoYykpKQorCWlmICghdGhpc19jcHVfaGFzKFg4Nl9GRUFUVVJFX01XQUlUKSAmJiBtd2FpdF91c2FibGUoYykpCiAJCXJldHVybjsKLQlpZiAoIWNwdV9oYXMoX190aGlzX2NwdV9wdHIoJmNwdV9pbmZvKSwgWDg2X0ZFQVRVUkVfQ0xGTFNIKSkKKwlpZiAoIXRoaXNfY3B1X2hhcyhYODZfRkVBVFVSRV9DTEZMU0gpKQogCQlyZXR1cm47CiAJaWYgKF9fdGhpc19jcHVfcmVhZChjcHVfaW5mby5jcHVpZF9sZXZlbCkgPCBDUFVJRF9NV0FJVF9MRUFGKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc3RhY2t0cmFjZS5jIGIvYXJjaC94ODYva2VybmVsL3N0YWNrdHJhY2UuYwppbmRleCA2NTE1NzMzLi41NWQ5YmMwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3RhY2t0cmFjZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zdGFja3RyYWNlLmMKQEAgLTksMTUgKzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgogCi1zdGF0aWMgdm9pZCBzYXZlX3N0YWNrX3dhcm5pbmcodm9pZCAqZGF0YSwgY2hhciAqbXNnKQotewotfQotCi1zdGF0aWMgdm9pZAotc2F2ZV9zdGFja193YXJuaW5nX3N5bWJvbCh2b2lkICpkYXRhLCBjaGFyICptc2csIHVuc2lnbmVkIGxvbmcgc3ltYm9sKQotewotfQotCiBzdGF0aWMgaW50IHNhdmVfc3RhY2tfc3RhY2sodm9pZCAqZGF0YSwgY2hhciAqbmFtZSkKIHsKIAlyZXR1cm4gMDsKQEAgLTUzLDE2ICs0NCwxMiBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN0YWNrdHJhY2Vfb3BzIHNhdmVfc3RhY2tfb3BzID0gewotCS53YXJuaW5nCT0gc2F2ZV9zdGFja193YXJuaW5nLAotCS53YXJuaW5nX3N5bWJvbAk9IHNhdmVfc3RhY2tfd2FybmluZ19zeW1ib2wsCiAJLnN0YWNrCQk9IHNhdmVfc3RhY2tfc3RhY2ssCiAJLmFkZHJlc3MJPSBzYXZlX3N0YWNrX2FkZHJlc3MsCiAJLndhbGtfc3RhY2sJPSBwcmludF9jb250ZXh0X3N0YWNrLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzdGFja3RyYWNlX29wcyBzYXZlX3N0YWNrX29wc19ub3NjaGVkID0gewotCS53YXJuaW5nCT0gc2F2ZV9zdGFja193YXJuaW5nLAotCS53YXJuaW5nX3N5bWJvbAk9IHNhdmVfc3RhY2tfd2FybmluZ19zeW1ib2wsCiAJLnN0YWNrCQk9IHNhdmVfc3RhY2tfc3RhY2ssCiAJLmFkZHJlc3MJPSBzYXZlX3N0YWNrX2FkZHJlc3Nfbm9zY2hlZCwKIAkud2Fsa19zdGFjawk9IHByaW50X2NvbnRleHRfc3RhY2ssCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZV8zMi5TIGIvYXJjaC94ODYva2VybmVsL3N5c2NhbGxfdGFibGVfMzIuUwppbmRleCBhYmNlMzRkLi4zMmNiZmZiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZV8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zeXNjYWxsX3RhYmxlXzMyLlMKQEAgLTM0NCwzICszNDQsNCBAQAogCS5sb25nIHN5c19vcGVuX2J5X2hhbmRsZV9hdAogCS5sb25nIHN5c19jbG9ja19hZGp0aW1lCiAJLmxvbmcgc3lzX3N5bmNmcworCS5sb25nIHN5c19zZW5kbW1zZwkJLyogMzQ1ICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYyBiL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jCmluZGV4IGMxMTUxNGUuLjZmMTY0YmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jCkBAIC0zNSw3ICszNSw3IEBACiBzdHJ1Y3QgeDg2X2luaXRfb3BzIHg4Nl9pbml0IF9faW5pdGRhdGEgPSB7CiAKIAkucmVzb3VyY2VzID0gewotCQkucHJvYmVfcm9tcwkJPSB4ODZfaW5pdF9ub29wLAorCQkucHJvYmVfcm9tcwkJPSBwcm9iZV9yb21zLAogCQkucmVzZXJ2ZV9yZXNvdXJjZXMJPSByZXNlcnZlX3N0YW5kYXJkX2lvX3Jlc291cmNlcywKIAkJLm1lbW9yeV9zZXR1cAkJPSBkZWZhdWx0X21hY2hpbmVfc3BlY2lmaWNfbWVtb3J5X3NldHVwLAogCX0sCkBAIC02MSw2ICs2MSwxMCBAQAogCQkuYmFubmVyCQkJPSBkZWZhdWx0X2Jhbm5lciwKIAl9LAogCisJLm1hcHBpbmcgPSB7CisJCS5wYWdldGFibGVfcmVzZXJ2ZQkJPSBuYXRpdmVfcGFnZXRhYmxlX3Jlc2VydmUsCisJfSwKKwogCS5wYWdpbmcgPSB7CiAJCS5wYWdldGFibGVfc2V0dXBfc3RhcnQJPSBuYXRpdmVfcGFnZXRhYmxlX3NldHVwX3N0YXJ0LAogCQkucGFnZXRhYmxlX3NldHVwX2RvbmUJPSBuYXRpdmVfcGFnZXRhYmxlX3NldHVwX2RvbmUsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jIGIvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYwppbmRleCAxY2Q2MDg5Li5lMTkxYzA5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jCisrKyBiL2FyY2gveDg2L2xndWVzdC9ib290LmMKQEAgLTcsNyArNyw3IEBACiAgKiBrZXJuZWwgYW5kIGluc2VydCBhIG1vZHVsZSAobGcua28pIHdoaWNoIGFsbG93cyB1cyB0byBydW4gb3RoZXIgTGludXgKICAqIGtlcm5lbHMgdGhlIHNhbWUgd2F5IHdlJ2QgcnVuIHByb2Nlc3Nlcy4gIFdlIGNhbGwgdGhlIGZpcnN0IGtlcm5lbCB0aGUgSG9zdCwKICAqIGFuZCB0aGUgb3RoZXJzIHRoZSBHdWVzdHMuICBUaGUgcHJvZ3JhbSB3aGljaCBzZXRzIHVwIGFuZCBjb25maWd1cmVzIEd1ZXN0cwotICogKHN1Y2ggYXMgdGhlIGV4YW1wbGUgaW4gRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvbGd1ZXN0LmMpIGlzIGNhbGxlZCB0aGUKKyAqIChzdWNoIGFzIHRoZSBleGFtcGxlIGluIERvY3VtZW50YXRpb24vdmlydHVhbC9sZ3Vlc3QvbGd1ZXN0LmMpIGlzIGNhbGxlZCB0aGUKICAqIExhdW5jaGVyLgogICoKICAqIFNlY29uZGx5LCB3ZSBvbmx5IHJ1biBzcGVjaWFsbHkgbW9kaWZpZWQgR3Vlc3RzLCBub3Qgbm9ybWFsIGtlcm5lbHM6IHNldHRpbmcKQEAgLTkxMyw4ICs5MTMsNiBAQAogCS5yYXRpbmcJCT0gMjAwLAogCS5yZWFkCQk9IGxndWVzdF9jbG9ja19yZWFkLAogCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soNjQpLAotCS5tdWx0CQk9IDEgPDwgMjIsCi0JLnNoaWZ0CQk9IDIyLAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKQEAgLTk5Nyw3ICs5OTUsNyBAQAogCS8qIFNldCB1cCB0aGUgdGltZXIgaW50ZXJydXB0ICgwKSB0byBnbyB0byBvdXIgc2ltcGxlIHRpbWVyIHJvdXRpbmUgKi8KIAlpcnFfc2V0X2hhbmRsZXIoMCwgbGd1ZXN0X3RpbWVfaXJxKTsKIAotCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZsZ3Vlc3RfY2xvY2spOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZsZ3Vlc3RfY2xvY2ssIE5TRUNfUEVSX1NFQyk7CiAKIAkvKiBXZSBjYW4ndCBzZXQgY3B1bWFzayBpbiB0aGUgaW5pdGlhbGl6ZXI6IGRhbW4gQyBsaW1pdGF0aW9ucyEgIFNldCBpdAogCSAqIGhlcmUgYW5kIHJlZ2lzdGVyIG91ciB0aW1lciBkZXZpY2UuICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvY2xlYXJfcGFnZV82NC5TIGIvYXJjaC94ODYvbGliL2NsZWFyX3BhZ2VfNjQuUwppbmRleCBhYTQzMjZiLi5mMjE0NWNmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvY2xlYXJfcGFnZV82NC5TCisrKyBiL2FyY2gveDg2L2xpYi9jbGVhcl9wYWdlXzY0LlMKQEAgLTEsNSArMSw2IEBACiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9kd2FyZjIuaD4KKyNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUtYXNtLmg+CiAKIC8qCiAgKiBaZXJvIGEgcGFnZS4gCQpAQCAtMTQsNiArMTUsMTUgQEAKIAlDRklfRU5EUFJPQwogRU5EUFJPQyhjbGVhcl9wYWdlX2MpCiAKK0VOVFJZKGNsZWFyX3BhZ2VfY19lKQorCUNGSV9TVEFSVFBST0MKKwltb3ZsICQ0MDk2LCVlY3gKKwl4b3JsICVlYXgsJWVheAorCXJlcCBzdG9zYgorCXJldAorCUNGSV9FTkRQUk9DCitFTkRQUk9DKGNsZWFyX3BhZ2VfY19lKQorCiBFTlRSWShjbGVhcl9wYWdlKQogCUNGSV9TVEFSVFBST0MKIAl4b3JsICAgJWVheCwlZWF4CkBAIC0zOCwyMSArNDgsMjYgQEAKIC5MY2xlYXJfcGFnZV9lbmQ6CiBFTkRQUk9DKGNsZWFyX3BhZ2UpCiAKLQkvKiBTb21lIENQVXMgcnVuIGZhc3RlciB1c2luZyB0aGUgc3RyaW5nIGluc3RydWN0aW9ucy4KLQkgICBJdCBpcyBhbHNvIGEgbG90IHNpbXBsZXIuIFVzZSB0aGlzIHdoZW4gcG9zc2libGUgKi8KKwkvKgorCSAqIFNvbWUgQ1BVcyBzdXBwb3J0IGVuaGFuY2VkIFJFUCBNT1ZTQi9TVE9TQiBpbnN0cnVjdGlvbnMuCisJICogSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoaXMgd2hlbiBwb3NzaWJsZS4KKwkgKiBJZiBlbmhhbmNlZCBSRVAgTU9WU0IvU1RPU0IgaXMgbm90IGF2YWlsYWJsZSwgdHJ5IHRvIHVzZSBmYXN0IHN0cmluZy4KKwkgKiBPdGhlcndpc2UsIHVzZSBvcmlnaW5hbCBmdW5jdGlvbi4KKwkgKgorCSAqLwogCiAjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KIAogCS5zZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCwiYXgiCiAxOgkuYnl0ZSAweGViCQkJCQkvKiBqbXAgPGRpc3A4PiAqLwogCS5ieXRlIChjbGVhcl9wYWdlX2MgLSBjbGVhcl9wYWdlKSAtICgyZiAtIDFiKQkvKiBvZmZzZXQgKi8KLTI6CisyOgkuYnl0ZSAweGViCQkJCQkvKiBqbXAgPGRpc3A4PiAqLworCS5ieXRlIChjbGVhcl9wYWdlX2NfZSAtIGNsZWFyX3BhZ2UpIC0gKDNmIC0gMmIpCS8qIG9mZnNldCAqLworMzoKIAkucHJldmlvdXMKIAkuc2VjdGlvbiAuYWx0aW5zdHJ1Y3Rpb25zLCJhIgotCS5hbGlnbiA4Ci0JLnF1YWQgY2xlYXJfcGFnZQotCS5xdWFkIDFiCi0JLndvcmQgWDg2X0ZFQVRVUkVfUkVQX0dPT0QKLQkuYnl0ZSAuTGNsZWFyX3BhZ2VfZW5kIC0gY2xlYXJfcGFnZQotCS5ieXRlIDJiIC0gMWIKKwlhbHRpbnN0cnVjdGlvbl9lbnRyeSBjbGVhcl9wYWdlLDFiLFg4Nl9GRUFUVVJFX1JFUF9HT09ELFwKKwkJCSAgICAgLkxjbGVhcl9wYWdlX2VuZC1jbGVhcl9wYWdlLCAyYi0xYgorCWFsdGluc3RydWN0aW9uX2VudHJ5IGNsZWFyX3BhZ2UsMmIsWDg2X0ZFQVRVUkVfRVJNUywgICBcCisJCQkgICAgIC5MY2xlYXJfcGFnZV9lbmQtY2xlYXJfcGFnZSwzYi0yYgogCS5wcmV2aW91cwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL2NvcHlfdXNlcl82NC5TIGIvYXJjaC94ODYvbGliL2NvcHlfdXNlcl82NC5TCmluZGV4IDk5ZTQ4MjYuLjAyNDg0MDIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9jb3B5X3VzZXJfNjQuUworKysgYi9hcmNoL3g4Ni9saWIvY29weV91c2VyXzY0LlMKQEAgLTE1LDIzICsxNSwzMCBAQAogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLWFzbS5oPgogCi0JLm1hY3JvIEFMVEVSTkFUSVZFX0pVTVAgZmVhdHVyZSxvcmlnLGFsdAorLyoKKyAqIEJ5IHBsYWNpbmcgZmVhdHVyZTIgYWZ0ZXIgZmVhdHVyZTEgaW4gYWx0aW5zdHJ1Y3Rpb25zIHNlY3Rpb24sIHdlIGxvZ2ljYWxseQorICogaW1wbGVtZW50OgorICogSWYgQ1BVIGhhcyBmZWF0dXJlMiwgam1wIHRvIGFsdDIgaXMgdXNlZAorICogZWxzZSBpZiBDUFUgaGFzIGZlYXR1cmUxLCBqbXAgdG8gYWx0MSBpcyB1c2VkCisgKiBlbHNlIGptcCB0byBvcmlnIGlzIHVzZWQuCisgKi8KKwkubWFjcm8gQUxURVJOQVRJVkVfSlVNUCBmZWF0dXJlMSxmZWF0dXJlMixvcmlnLGFsdDEsYWx0MgogMDoKIAkuYnl0ZSAweGU5CS8qIDMyYml0IGp1bXAgKi8KIAkubG9uZyBcb3JpZy0xZgkvKiBieSBkZWZhdWx0IGp1bXAgdG8gb3JpZyAqLwogMToKIAkuc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsImF4IgogMjoJLmJ5dGUgMHhlOQkJCS8qIG5lYXIganVtcCB3aXRoIDMyYml0IGltbWVkaWF0ZSAqLwotCS5sb25nIFxhbHQtMWIgLyogb2Zmc2V0ICovICAgLyogb3IgYWx0ZXJuYXRpdmVseSB0byBhbHQgKi8KKwkubG9uZyBcYWx0MS0xYiAvKiBvZmZzZXQgKi8gICAvKiBvciBhbHRlcm5hdGl2ZWx5IHRvIGFsdDEgKi8KKzM6CS5ieXRlIDB4ZTkJCQkvKiBuZWFyIGp1bXAgd2l0aCAzMmJpdCBpbW1lZGlhdGUgKi8KKwkubG9uZyBcYWx0Mi0xYiAvKiBvZmZzZXQgKi8gICAvKiBvciBhbHRlcm5hdGl2ZWx5IHRvIGFsdDIgKi8KIAkucHJldmlvdXMKKwogCS5zZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsImEiCi0JLmFsaWduIDgKLQkucXVhZCAgMGIKLQkucXVhZCAgMmIKLQkud29yZCAgXGZlYXR1cmUJCQkvKiB3aGVuIGZlYXR1cmUgaXMgc2V0ICovCi0JLmJ5dGUgIDUKLQkuYnl0ZSAgNQorCWFsdGluc3RydWN0aW9uX2VudHJ5IDBiLDJiLFxmZWF0dXJlMSw1LDUKKwlhbHRpbnN0cnVjdGlvbl9lbnRyeSAwYiwzYixcZmVhdHVyZTIsNSw1CiAJLnByZXZpb3VzCiAJLmVuZG0KIApAQCAtNzIsOCArNzksMTAgQEAKIAlhZGRxICVyZHgsJXJjeAogCWpjIGJhZF90b191c2VyCiAJY21wcSBUSV9hZGRyX2xpbWl0KCVyYXgpLCVyY3gKLQlqYWUgYmFkX3RvX3VzZXIKLQlBTFRFUk5BVElWRV9KVU1QIFg4Nl9GRUFUVVJFX1JFUF9HT09ELGNvcHlfdXNlcl9nZW5lcmljX3Vucm9sbGVkLGNvcHlfdXNlcl9nZW5lcmljX3N0cmluZworCWphIGJhZF90b191c2VyCisJQUxURVJOQVRJVkVfSlVNUCBYODZfRkVBVFVSRV9SRVBfR09PRCxYODZfRkVBVFVSRV9FUk1TLAlcCisJCWNvcHlfdXNlcl9nZW5lcmljX3Vucm9sbGVkLGNvcHlfdXNlcl9nZW5lcmljX3N0cmluZywJXAorCQljb3B5X3VzZXJfZW5oYW5jZWRfZmFzdF9zdHJpbmcKIAlDRklfRU5EUFJPQwogRU5EUFJPQyhfY29weV90b191c2VyKQogCkBAIC04NSw4ICs5NCwxMCBAQAogCWFkZHEgJXJkeCwlcmN4CiAJamMgYmFkX2Zyb21fdXNlcgogCWNtcHEgVElfYWRkcl9saW1pdCglcmF4KSwlcmN4Ci0JamFlIGJhZF9mcm9tX3VzZXIKLQlBTFRFUk5BVElWRV9KVU1QIFg4Nl9GRUFUVVJFX1JFUF9HT09ELGNvcHlfdXNlcl9nZW5lcmljX3Vucm9sbGVkLGNvcHlfdXNlcl9nZW5lcmljX3N0cmluZworCWphIGJhZF9mcm9tX3VzZXIKKwlBTFRFUk5BVElWRV9KVU1QIFg4Nl9GRUFUVVJFX1JFUF9HT09ELFg4Nl9GRUFUVVJFX0VSTVMsCVwKKwkJY29weV91c2VyX2dlbmVyaWNfdW5yb2xsZWQsY29weV91c2VyX2dlbmVyaWNfc3RyaW5nLAlcCisJCWNvcHlfdXNlcl9lbmhhbmNlZF9mYXN0X3N0cmluZwogCUNGSV9FTkRQUk9DCiBFTkRQUk9DKF9jb3B5X2Zyb21fdXNlcikKIApAQCAtMjU1LDMgKzI2NiwzNyBAQAogCS5wcmV2aW91cwogCUNGSV9FTkRQUk9DCiBFTkRQUk9DKGNvcHlfdXNlcl9nZW5lcmljX3N0cmluZykKKworLyoKKyAqIFNvbWUgQ1BVcyBhcmUgYWRkaW5nIGVuaGFuY2VkIFJFUCBNT1ZTQi9TVE9TQiBpbnN0cnVjdGlvbnMuCisgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSBlbmhhbmNlZCBSRVAgTU9WU0IvU1RPU0IgaWYgaXQncyBlbmFibGVkLgorICoKKyAqIElucHV0OgorICogcmRpIGRlc3RpbmF0aW9uCisgKiByc2kgc291cmNlCisgKiByZHggY291bnQKKyAqCisgKiBPdXRwdXQ6CisgKiBlYXggdW5jb3BpZWQgYnl0ZXMgb3IgMCBpZiBzdWNjZXNzZnVsLgorICovCitFTlRSWShjb3B5X3VzZXJfZW5oYW5jZWRfZmFzdF9zdHJpbmcpCisJQ0ZJX1NUQVJUUFJPQworCWFuZGwgJWVkeCwlZWR4CisJanogMmYKKwltb3ZsICVlZHgsJWVjeAorMToJcmVwCisJbW92c2IKKzI6CXhvcmwgJWVheCwlZWF4CisJcmV0CisKKwkuc2VjdGlvbiAuZml4dXAsImF4IgorMTI6CW1vdmwgJWVjeCwlZWR4CQkvKiBlY3ggaXMgemVyb3Jlc3QgYWxzbyAqLworCWptcCBjb3B5X3VzZXJfaGFuZGxlX3RhaWwKKwkucHJldmlvdXMKKworCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCisJLmFsaWduIDgKKwkucXVhZCAxYiwxMmIKKwkucHJldmlvdXMKKwlDRklfRU5EUFJPQworRU5EUFJPQyhjb3B5X3VzZXJfZW5oYW5jZWRfZmFzdF9zdHJpbmcpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvbWVtY3B5XzY0LlMgYi9hcmNoL3g4Ni9saWIvbWVtY3B5XzY0LlMKaW5kZXggNzVlZjYxZS4uZWZiZjJhMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGliL21lbWNweV82NC5TCisrKyBiL2FyY2gveDg2L2xpYi9tZW1jcHlfNjQuUwpAQCAtNCw2ICs0LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CiAjaW5jbHVkZSA8YXNtL2R3YXJmMi5oPgorI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS1hc20uaD4KIAogLyoKICAqIG1lbWNweSAtIENvcHkgYSBtZW1vcnkgYmxvY2suCkBAIC0zNyw2ICszOCwyMyBAQAogLkxtZW1jcHlfZToKIAkucHJldmlvdXMKIAorLyoKKyAqIG1lbWNweV9jX2UoKSAtIGVuaGFuY2VkIGZhc3Qgc3RyaW5nIG1lbWNweS4gVGhpcyBpcyBmYXN0ZXIgYW5kIHNpbXBsZXIgdGhhbgorICogbWVtY3B5X2MuIFVzZSBtZW1jcHlfY19lIHdoZW4gcG9zc2libGUuCisgKgorICogVGhpcyBnZXRzIHBhdGNoZWQgb3ZlciB0aGUgdW5yb2xsZWQgdmFyaWFudCAoYmVsb3cpIHZpYSB0aGUKKyAqIGFsdGVybmF0aXZlIGluc3RydWN0aW9ucyBmcmFtZXdvcms6CisgKi8KKwkuc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsICJheCIsIEBwcm9nYml0cworLkxtZW1jcHlfY19lOgorCW1vdnEgJXJkaSwgJXJheAorCisJbW92bCAlZWR4LCAlZWN4CisJcmVwIG1vdnNiCisJcmV0CisuTG1lbWNweV9lX2U6CisJLnByZXZpb3VzCisKIEVOVFJZKF9fbWVtY3B5KQogRU5UUlkobWVtY3B5KQogCUNGSV9TVEFSVFBST0MKQEAgLTQ5LDcgKzY3LDcgQEAKIAlqYiAuTGhhbmRsZV90YWlsCiAKIAkvKgotCSAqIFdlIGNoZWNrIHdoZXRoZXIgbWVtb3J5IGZhbHNlIGRlcGVuZGVjZSBjb3VsZCBvY2N1ciwKKwkgKiBXZSBjaGVjayB3aGV0aGVyIG1lbW9yeSBmYWxzZSBkZXBlbmRlbmNlIGNvdWxkIG9jY3VyLAogCSAqIHRoZW4ganVtcCB0byBjb3JyZXNwb25kaW5nIGNvcHkgbW9kZS4KIAkgKi8KIAljbXAgICVkaWwsICVzaWwKQEAgLTE3MSwyMSArMTg5LDIyIEBACiBFTkRQUk9DKF9fbWVtY3B5KQogCiAJLyoKLQkgKiBTb21lIENQVXMgcnVuIGZhc3RlciB1c2luZyB0aGUgc3RyaW5nIGNvcHkgaW5zdHJ1Y3Rpb25zLgotCSAqIEl0IGlzIGFsc28gYSBsb3Qgc2ltcGxlci4gVXNlIHRoaXMgd2hlbiBwb3NzaWJsZToKLQkgKi8KLQotCS5zZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsICJhIgotCS5hbGlnbiA4Ci0JLnF1YWQgbWVtY3B5Ci0JLnF1YWQgLkxtZW1jcHlfYwotCS53b3JkIFg4Nl9GRUFUVVJFX1JFUF9HT09ECi0KLQkvKgorCSAqIFNvbWUgQ1BVcyBhcmUgYWRkaW5nIGVuaGFuY2VkIFJFUCBNT1ZTQi9TVE9TQiBmZWF0dXJlCisJICogSWYgdGhlIGZlYXR1cmUgaXMgc3VwcG9ydGVkLCBtZW1jcHlfY19lKCkgaXMgdGhlIGZpcnN0IGNob2ljZS4KKwkgKiBJZiBlbmhhbmNlZCByZXAgbW92c2IgY29weSBpcyBub3QgYXZhaWxhYmxlLCB1c2UgZmFzdCBzdHJpbmcgY29weQorCSAqIG1lbWNweV9jKCkgd2hlbiBwb3NzaWJsZS4gVGhpcyBpcyBmYXN0ZXIgYW5kIGNvZGUgaXMgc2ltcGxlciB0aGFuCisJICogb3JpZ2luYWwgbWVtY3B5KCkuCisJICogT3RoZXJ3aXNlLCBvcmlnaW5hbCBtZW1jcHkoKSBpcyB1c2VkLgorCSAqIEluIC5hbHRpbnN0cnVjdGlvbnMgc2VjdGlvbiwgRVJNUyBmZWF0dXJlIGlzIHBsYWNlZCBhZnRlciBSRUdfR09PRAorICAgICAgICAgKiBmZWF0dXJlIHRvIGltcGxlbWVudCB0aGUgcmlnaHQgcGF0Y2ggb3JkZXIuCisJICoKIAkgKiBSZXBsYWNlIG9ubHkgYmVnaW5uaW5nLCBtZW1jcHkgaXMgdXNlZCB0byBhcHBseSBhbHRlcm5hdGl2ZXMsCiAJICogc28gaXQgaXMgc2lsbHkgdG8gb3ZlcndyaXRlIGl0c2VsZiB3aXRoIG5vcHMgLSByZWJvb3QgaXMgdGhlCiAJICogb25seSBvdXRjb21lLi4uCiAJICovCi0JLmJ5dGUgLkxtZW1jcHlfZSAtIC5MbWVtY3B5X2MKLQkuYnl0ZSAuTG1lbWNweV9lIC0gLkxtZW1jcHlfYworCS5zZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsICJhIgorCWFsdGluc3RydWN0aW9uX2VudHJ5IG1lbWNweSwuTG1lbWNweV9jLFg4Nl9GRUFUVVJFX1JFUF9HT09ELFwKKwkJCSAgICAgLkxtZW1jcHlfZS0uTG1lbWNweV9jLC5MbWVtY3B5X2UtLkxtZW1jcHlfYworCWFsdGluc3RydWN0aW9uX2VudHJ5IG1lbWNweSwuTG1lbWNweV9jX2UsWDg2X0ZFQVRVUkVfRVJNUywgXAorCQkJICAgICAuTG1lbWNweV9lX2UtLkxtZW1jcHlfY19lLC5MbWVtY3B5X2VfZS0uTG1lbWNweV9jX2UKIAkucHJldmlvdXMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9tZW1tb3ZlXzY0LlMgYi9hcmNoL3g4Ni9saWIvbWVtbW92ZV82NC5TCmluZGV4IDBlY2I4NDMuLmQwZWM5YzIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9tZW1tb3ZlXzY0LlMKKysrIGIvYXJjaC94ODYvbGliL21lbW1vdmVfNjQuUwpAQCAtOCw2ICs4LDcgQEAKICNkZWZpbmUgX1NUUklOR19DCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9kd2FyZjIuaD4KKyNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgogCiAjdW5kZWYgbWVtbW92ZQogCkBAIC0yNCw2ICsyNSw3IEBACiAgKi8KIEVOVFJZKG1lbW1vdmUpCiAJQ0ZJX1NUQVJUUFJPQworCiAJLyogSGFuZGxlIG1vcmUgMzJieXRlcyBpbiBsb29wICovCiAJbW92ICVyZGksICVyYXgKIAljbXAgJDB4MjAsICVyZHgKQEAgLTMxLDggKzMzLDEzIEBACiAKIAkvKiBEZWNpZGUgZm9yd2FyZC9iYWNrd2FyZCBjb3B5IG1vZGUgKi8KIAljbXAgJXJkaSwgJXJzaQotCWpiCTJmCisJamdlIC5MbWVtbW92ZV9iZWdpbl9mb3J3YXJkCisJbW92ICVyc2ksICVyOAorCWFkZCAlcmR4LCAlcjgKKwljbXAgJXJkaSwgJXI4CisJamcgMmYKIAorLkxtZW1tb3ZlX2JlZ2luX2ZvcndhcmQ6CiAJLyoKIAkgKiBtb3ZzcSBpbnN0cnVjdGlvbiBoYXZlIG1hbnkgc3RhcnR1cCBsYXRlbmN5CiAJICogc28gd2UgaGFuZGxlIHNtYWxsIHNpemUgYnkgZ2VuZXJhbCByZWdpc3Rlci4KQEAgLTc4LDYgKzg1LDggQEAKIAlyZXAgbW92c3EKIAltb3ZxICVyMTEsICglcjEwKQogCWptcCAxM2YKKy5MbWVtbW92ZV9lbmRfZm9yd2FyZDoKKwogCS8qCiAJICogSGFuZGxlIGRhdGEgYmFja3dhcmQgYnkgbW92c3EuCiAJICovCkBAIC0xOTQsNCArMjAzLDIyIEBACiAxMzoKIAlyZXRxCiAJQ0ZJX0VORFBST0MKKworCS5zZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCwiYXgiCisuTG1lbW1vdmVfYmVnaW5fZm9yd2FyZF9lZnM6CisJLyogRm9yd2FyZCBtb3ZpbmcgZGF0YS4gKi8KKwltb3ZxICVyZHgsICVyY3gKKwlyZXAgbW92c2IKKwlyZXRxCisuTG1lbW1vdmVfZW5kX2ZvcndhcmRfZWZzOgorCS5wcmV2aW91cworCisJLnNlY3Rpb24gLmFsdGluc3RydWN0aW9ucywiYSIKKwkuYWxpZ24gOAorCS5xdWFkIC5MbWVtbW92ZV9iZWdpbl9mb3J3YXJkCisJLnF1YWQgLkxtZW1tb3ZlX2JlZ2luX2ZvcndhcmRfZWZzCisJLndvcmQgWDg2X0ZFQVRVUkVfRVJNUworCS5ieXRlIC5MbWVtbW92ZV9lbmRfZm9yd2FyZC0uTG1lbW1vdmVfYmVnaW5fZm9yd2FyZAorCS5ieXRlIC5MbWVtbW92ZV9lbmRfZm9yd2FyZF9lZnMtLkxtZW1tb3ZlX2JlZ2luX2ZvcndhcmRfZWZzCisJLnByZXZpb3VzCiBFTkRQUk9DKG1lbW1vdmUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvbWVtc2V0XzY0LlMgYi9hcmNoL3g4Ni9saWIvbWVtc2V0XzY0LlMKaW5kZXggMDlkMzQ0Mi4uNzliZDQ1NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGliL21lbXNldF82NC5TCisrKyBiL2FyY2gveDg2L2xpYi9tZW1zZXRfNjQuUwpAQCAtMiw5ICsyLDEzIEBACiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2R3YXJmMi5oPgorI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLWFzbS5oPgogCiAvKgotICogSVNPIEMgbWVtc2V0IC0gc2V0IGEgbWVtb3J5IGJsb2NrIHRvIGEgYnl0ZSB2YWx1ZS4KKyAqIElTTyBDIG1lbXNldCAtIHNldCBhIG1lbW9yeSBibG9jayB0byBhIGJ5dGUgdmFsdWUuIFRoaXMgZnVuY3Rpb24gdXNlcyBmYXN0CisgKiBzdHJpbmcgdG8gZ2V0IGJldHRlciBwZXJmb3JtYW5jZSB0aGFuIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi4gVGhlIGNvZGUgaXMKKyAqIHNpbXBsZXIgYW5kIHNob3J0ZXIgdGhhbiB0aGUgb3JpZ25hbCBmdW5jdGlvbiBhcyB3ZWxsLgogICoJCiAgKiByZGkgICBkZXN0aW5hdGlvbgogICogcnNpICAgdmFsdWUgKGNoYXIpIApAQCAtMzEsNiArMzUsMjggQEAKIC5MbWVtc2V0X2U6CiAJLnByZXZpb3VzCiAKKy8qCisgKiBJU08gQyBtZW1zZXQgLSBzZXQgYSBtZW1vcnkgYmxvY2sgdG8gYSBieXRlIHZhbHVlLiBUaGlzIGZ1bmN0aW9uIHVzZXMKKyAqIGVuaGFuY2VkIHJlcCBzdG9zYiB0byBvdmVycmlkZSB0aGUgZmFzdCBzdHJpbmcgZnVuY3Rpb24uCisgKiBUaGUgY29kZSBpcyBzaW1wbGVyIGFuZCBzaG9ydGVyIHRoYW4gdGhlIGZhc3Qgc3RyaW5nIGZ1bmN0aW9uIGFzIHdlbGwuCisgKgorICogcmRpICAgZGVzdGluYXRpb24KKyAqIHJzaSAgIHZhbHVlIChjaGFyKQorICogcmR4ICAgY291bnQgKGJ5dGVzKQorICoKKyAqIHJheCAgIG9yaWdpbmFsIGRlc3RpbmF0aW9uCisgKi8KKwkuc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsICJheCIsIEBwcm9nYml0cworLkxtZW1zZXRfY19lOgorCW1vdnEgJXJkaSwlcjkKKwltb3ZiICVzaWwsJWFsCisJbW92bCAlZWR4LCVlY3gKKwlyZXAgc3Rvc2IKKwltb3ZxICVyOSwlcmF4CisJcmV0CisuTG1lbXNldF9lX2U6CisJLnByZXZpb3VzCisKIEVOVFJZKG1lbXNldCkKIEVOVFJZKF9fbWVtc2V0KQogCUNGSV9TVEFSVFBST0MKQEAgLTExMiwxNiArMTM4LDIwIEBACiBFTkRQUk9DKG1lbXNldCkKIEVORFBST0MoX19tZW1zZXQpCiAKLQkvKiBTb21lIENQVXMgcnVuIGZhc3RlciB1c2luZyB0aGUgc3RyaW5nIGluc3RydWN0aW9ucy4KLQkgICBJdCBpcyBhbHNvIGEgbG90IHNpbXBsZXIuIFVzZSB0aGlzIHdoZW4gcG9zc2libGUgKi8KLQotI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+Ci0KKwkvKiBTb21lIENQVXMgc3VwcG9ydCBlbmhhbmNlZCBSRVAgTU9WU0IvU1RPU0IgZmVhdHVyZS4KKwkgKiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhpcyB3aGVuIHBvc3NpYmxlLgorCSAqCisJICogSWYgZW5oYW5jZWQgUkVQIE1PVlNCL1NUT1NCIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSwgdXNlIGZhc3Qgc3RyaW5nCisJICogaW5zdHJ1Y3Rpb25zLgorCSAqCisJICogT3RoZXJ3aXNlLCB1c2Ugb3JpZ2luYWwgbWVtc2V0IGZ1bmN0aW9uLgorCSAqCisJICogSW4gLmFsdGluc3RydWN0aW9ucyBzZWN0aW9uLCBFUk1TIGZlYXR1cmUgaXMgcGxhY2VkIGFmdGVyIFJFR19HT09ECisgICAgICAgICAqIGZlYXR1cmUgdG8gaW1wbGVtZW50IHRoZSByaWdodCBwYXRjaCBvcmRlci4KKwkgKi8KIAkuc2VjdGlvbiAuYWx0aW5zdHJ1Y3Rpb25zLCJhIgotCS5hbGlnbiA4Ci0JLnF1YWQgbWVtc2V0Ci0JLnF1YWQgLkxtZW1zZXRfYwotCS53b3JkIFg4Nl9GRUFUVVJFX1JFUF9HT09ECi0JLmJ5dGUgLkxmaW5hbCAtIG1lbXNldAotCS5ieXRlIC5MbWVtc2V0X2UgLSAuTG1lbXNldF9jCisJYWx0aW5zdHJ1Y3Rpb25fZW50cnkgbWVtc2V0LC5MbWVtc2V0X2MsWDg2X0ZFQVRVUkVfUkVQX0dPT0QsXAorCQkJICAgICAuTGZpbmFsLW1lbXNldCwuTG1lbXNldF9lLS5MbWVtc2V0X2MKKwlhbHRpbnN0cnVjdGlvbl9lbnRyeSBtZW1zZXQsLkxtZW1zZXRfY19lLFg4Nl9GRUFUVVJFX0VSTVMsIFwKKwkJCSAgICAgLkxmaW5hbC1tZW1zZXQsLkxtZW1zZXRfZV9lLS5MbWVtc2V0X2NfZQogCS5wcmV2aW91cwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vTWFrZWZpbGUgYi9hcmNoL3g4Ni9tbS9NYWtlZmlsZQppbmRleCAzZTYwOGVkLi4zZDExMzI3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9tbS9NYWtlZmlsZQpAQCAtMjMsOCArMjMsOCBAQAogb2JqLSQoQ09ORklHX01NSU9UUkFDRV9URVNUKQkrPSB0ZXN0bW1pb3RyYWNlLm8KIAogb2JqLSQoQ09ORklHX05VTUEpCQkrPSBudW1hLm8gbnVtYV8kKEJJVFMpLm8KLW9iai0kKENPTkZJR19BTURfTlVNQSkJCSs9IGFtZHRvcG9sb2d5XzY0Lm8KLW9iai0kKENPTkZJR19BQ1BJX05VTUEpCQkrPSBzcmF0XyQoQklUUykubworb2JqLSQoQ09ORklHX0FNRF9OVU1BKQkJKz0gYW1kdG9wb2xvZ3kubworb2JqLSQoQ09ORklHX0FDUElfTlVNQSkJCSs9IHNyYXQubwogb2JqLSQoQ09ORklHX05VTUFfRU1VKQkJKz0gbnVtYV9lbXVsYXRpb24ubwogCiBvYmotJChDT05GSUdfSEFWRV9NRU1CTE9DSykJCSs9IG1lbWJsb2NrLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2FtZHRvcG9sb2d5XzY0LmMgYi9hcmNoL3g4Ni9tbS9hbWR0b3BvbG9neS5jCnNpbWlsYXJpdHkgaW5kZXggODklCnJlbmFtZSBmcm9tIGFyY2gveDg2L21tL2FtZHRvcG9sb2d5XzY0LmMKcmVuYW1lIHRvIGFyY2gveDg2L21tL2FtZHRvcG9sb2d5LmMKaW5kZXggMDkxOWMyNi4uNTI0N2QwMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vYW1kdG9wb2xvZ3lfNjQuYworKysgYi9hcmNoL3g4Ni9tbS9hbWR0b3BvbG9neS5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KQEAgLTY5LDEwICs3MCwxMCBAQAogCiBpbnQgX19pbml0IGFtZF9udW1hX2luaXQodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gUEZOX1BIWVMoMCk7Ci0JdW5zaWduZWQgbG9uZyBlbmQgPSBQRk5fUEhZUyhtYXhfcGZuKTsKKwl1NjQgc3RhcnQgPSBQRk5fUEhZUygwKTsKKwl1NjQgZW5kID0gUEZOX1BIWVMobWF4X3Bmbik7CiAJdW5zaWduZWQgbnVtbm9kZXM7Ci0JdW5zaWduZWQgbG9uZyBwcmV2YmFzZTsKKwl1NjQgcHJldmJhc2U7CiAJaW50IGksIGosIG5iOwogCXUzMiBub2RlaWQsIHJlZzsKIAl1bnNpZ25lZCBpbnQgYml0cywgY29yZXMsIGFwaWNpZF9iYXNlOwpAQCAtOTUsNyArOTYsNyBAQAogCiAJcHJldmJhc2UgPSAwOwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJdW5zaWduZWQgbG9uZyBiYXNlLCBsaW1pdDsKKwkJdTY0IGJhc2UsIGxpbWl0OwogCiAJCWJhc2UgPSByZWFkX3BjaV9jb25maWcoMCwgbmIsIDEsIDB4NDAgKyBpKjgpOwogCQlsaW1pdCA9IHJlYWRfcGNpX2NvbmZpZygwLCBuYiwgMSwgMHg0NCArIGkqOCk7CkBAIC0xMDcsMTggKzEwOCwxOCBAQAogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKG5vZGVpZCA+PSBudW1ub2RlcykgewotCQkJcHJfaW5mbygiSWdub3JpbmcgZXhjZXNzIG5vZGUgJWQgKCVseDolbHgpXG4iLCBub2RlaWQsCisJCQlwcl9pbmZvKCJJZ25vcmluZyBleGNlc3Mgbm9kZSAlZCAoJUx4OiVMeClcbiIsIG5vZGVpZCwKIAkJCQliYXNlLCBsaW1pdCk7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCWlmICghbGltaXQpIHsKLQkJCXByX2luZm8oIlNraXBwaW5nIG5vZGUgZW50cnkgJWQgKGJhc2UgJWx4KVxuIiwKKwkJCXByX2luZm8oIlNraXBwaW5nIG5vZGUgZW50cnkgJWQgKGJhc2UgJUx4KVxuIiwKIAkJCQlpLCBiYXNlKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmICgoYmFzZSA+PiA4KSAmIDMgfHwgKGxpbWl0ID4+IDgpICYgMykgewotCQkJcHJfZXJyKCJOb2RlICVkIHVzaW5nIGludGVybGVhdmluZyBtb2RlICVseC8lbHhcbiIsCisJCQlwcl9lcnIoIk5vZGUgJWQgdXNpbmcgaW50ZXJsZWF2aW5nIG1vZGUgJUx4LyVMeFxuIiwKIAkJCSAgICAgICBub2RlaWQsIChiYXNlID4+IDgpICYgMywgKGxpbWl0ID4+IDgpICYgMyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtMTUwLDE5ICsxNTEsMTkgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmIChsaW1pdCA8IGJhc2UpIHsKLQkJCXByX2VycigiTm9kZSAlZCBib2d1cyBzZXR0aW5ncyAlbHgtJWx4LlxuIiwKKwkJCXByX2VycigiTm9kZSAlZCBib2d1cyBzZXR0aW5ncyAlTHgtJUx4LlxuIiwKIAkJCSAgICAgICBub2RlaWQsIGJhc2UsIGxpbWl0KTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJLyogQ291bGQgc29ydCBoZXJlLCBidXQgcHVuIGZvciBub3cuIFNob3VsZCBub3QgaGFwcGVuIGFueXJvYWRzLiAqLwogCQlpZiAocHJldmJhc2UgPiBiYXNlKSB7Ci0JCQlwcl9lcnIoIk5vZGUgbWFwIG5vdCBzb3J0ZWQgJWx4LCVseFxuIiwKKwkJCXByX2VycigiTm9kZSBtYXAgbm90IHNvcnRlZCAlTHgsJUx4XG4iLAogCQkJICAgICAgIHByZXZiYXNlLCBiYXNlKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJcHJfaW5mbygiTm9kZSAlZCBNZW1CYXNlICUwMTZseCBMaW1pdCAlMDE2bHhcbiIsCisJCXByX2luZm8oIk5vZGUgJWQgTWVtQmFzZSAlMDE2THggTGltaXQgJTAxNkx4XG4iLAogCQkJbm9kZWlkLCBiYXNlLCBsaW1pdCk7CiAKIAkJcHJldmJhc2UgPSBiYXNlOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vZmF1bHQuYyBiL2FyY2gveDg2L21tL2ZhdWx0LmMKaW5kZXggMjBlM2Y4Ny4uYmNiMzk0ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vZmF1bHQuYworKysgYi9hcmNoL3g4Ni9tbS9mYXVsdC5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvbW1pb3RyYWNlLmg+CQkvKiBrbW1pb19oYW5kbGVyLCAuLi4JCSovCiAjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgkJLyogcGVyZl9zd19ldmVudAkJKi8KICNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+CQkvKiBoc3RhdGVfaW5kZXhfdG9fc2hpZnQJKi8KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgkJLyogcHJlZmV0Y2h3CQkJKi8KIAogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgkJCS8qIGRvdHJhcGxpbmthZ2UsIC4uLgkJKi8KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgkJLyogcGdkXyooKSwgLi4uCQkJKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXQuYyBiL2FyY2gveDg2L21tL2luaXQuYwppbmRleCAyODZkMjg5Li4zN2I4YjBmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pbml0LmMKKysrIGIvYXJjaC94ODYvbW0vaW5pdC5jCkBAIC04MSw2ICs4MSwxMSBAQAogCQllbmQsIHBndF9idWZfc3RhcnQgPDwgUEFHRV9TSElGVCwgcGd0X2J1Zl90b3AgPDwgUEFHRV9TSElGVCk7CiB9CiAKK3ZvaWQgX19pbml0IG5hdGl2ZV9wYWdldGFibGVfcmVzZXJ2ZSh1NjQgc3RhcnQsIHU2NCBlbmQpCit7CisJbWVtYmxvY2tfeDg2X3Jlc2VydmVfcmFuZ2Uoc3RhcnQsIGVuZCwgIlBHVEFCTEUiKTsKK30KKwogc3RydWN0IG1hcF9yYW5nZSB7CiAJdW5zaWduZWQgbG9uZyBzdGFydDsKIAl1bnNpZ25lZCBsb25nIGVuZDsKQEAgLTI3Miw5ICsyNzcsMjQgQEAKIAogCV9fZmx1c2hfdGxiX2FsbCgpOwogCisJLyoKKwkgKiBSZXNlcnZlIHRoZSBrZXJuZWwgcGFnZXRhYmxlIHBhZ2VzIHdlIHVzZWQgKHBndF9idWZfc3RhcnQgLQorCSAqIHBndF9idWZfZW5kKSBhbmQgZnJlZSB0aGUgb3RoZXIgb25lcyAocGd0X2J1Zl9lbmQgLSBwZ3RfYnVmX3RvcCkKKwkgKiBzbyB0aGF0IHRoZXkgY2FuIGJlIHJldXNlZCBmb3Igb3RoZXIgcHVycG9zZXMuCisJICoKKwkgKiBPbiBuYXRpdmUgaXQganVzdCBtZWFucyBjYWxsaW5nIG1lbWJsb2NrX3g4Nl9yZXNlcnZlX3JhbmdlLCBvbiBYZW4gaXQKKwkgKiBhbHNvIG1lYW5zIG1hcmtpbmcgUlcgdGhlIHBhZ2V0YWJsZSBwYWdlcyB0aGF0IHdlIGFsbG9jYXRlZCBiZWZvcmUKKwkgKiBidXQgdGhhdCBoYXZlbid0IGJlZW4gdXNlZC4KKwkgKgorCSAqIEluIGZhY3Qgb24geGVuIHdlIG1hcmsgUk8gdGhlIHdob2xlIHJhbmdlIHBndF9idWZfc3RhcnQgLQorCSAqIHBndF9idWZfdG9wLCBiZWNhdXNlIHdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgd2hlbgorCSAqIGluaXRfbWVtb3J5X21hcHBpbmcgcmVhY2hlcyB0aGUgcGFnZXRhYmxlIHBhZ2VzIGFyZWEsIGl0IG1hcHMKKwkgKiBSTyBhbGwgdGhlIHBhZ2V0YWJsZSBwYWdlcywgaW5jbHVkaW5nIHRoZSBvbmVzIHRoYXQgYXJlIGJleW9uZAorCSAqIHBndF9idWZfZW5kIGF0IHRoYXQgdGltZS4KKwkgKi8KIAlpZiAoIWFmdGVyX2Jvb3RtZW0gJiYgcGd0X2J1Zl9lbmQgPiBwZ3RfYnVmX3N0YXJ0KQotCQltZW1ibG9ja194ODZfcmVzZXJ2ZV9yYW5nZShwZ3RfYnVmX3N0YXJ0IDw8IFBBR0VfU0hJRlQsCi0JCQkJIHBndF9idWZfZW5kIDw8IFBBR0VfU0hJRlQsICJQR1RBQkxFIik7CisJCXg4Nl9pbml0Lm1hcHBpbmcucGFnZXRhYmxlX3Jlc2VydmUoUEZOX1BIWVMocGd0X2J1Zl9zdGFydCksCisJCQkJUEZOX1BIWVMocGd0X2J1Zl9lbmQpKTsKIAogCWlmICghYWZ0ZXJfYm9vdG1lbSkKIAkJZWFybHlfbWVtdGVzdChzdGFydCwgZW5kKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXRfMzIuYyBiL2FyY2gveDg2L21tL2luaXRfMzIuYwppbmRleCA4MDA4OGY5Li4yOWY3YzZkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pbml0XzMyLmMKKysrIGIvYXJjaC94ODYvbW0vaW5pdF8zMi5jCkBAIC02NzgsOCArNjc4LDEwIEBACiB7CiAJdW5zaWduZWQgbG9uZyBtYXhfem9uZV9wZm5zW01BWF9OUl9aT05FU107CiAJbWVtc2V0KG1heF96b25lX3BmbnMsIDAsIHNpemVvZihtYXhfem9uZV9wZm5zKSk7CisjaWZkZWYgQ09ORklHX1pPTkVfRE1BCiAJbWF4X3pvbmVfcGZuc1taT05FX0RNQV0gPQogCQl2aXJ0X3RvX3BoeXMoKGNoYXIgKilNQVhfRE1BX0FERFJFU1MpID4+IFBBR0VfU0hJRlQ7CisjZW5kaWYKIAltYXhfem9uZV9wZm5zW1pPTkVfTk9STUFMXSA9IG1heF9sb3dfcGZuOwogI2lmZGVmIENPTkZJR19ISUdITUVNCiAJbWF4X3pvbmVfcGZuc1taT05FX0hJR0hNRU1dID0gaGlnaGVuZF9wZm47CkBAIC03MTYsNiArNzE4LDcgQEAKIAkgKiBOT1RFOiBhdCB0aGlzIHBvaW50IHRoZSBib290bWVtIGFsbG9jYXRvciBpcyBmdWxseSBhdmFpbGFibGUuCiAJICovCiAJb2xwY19kdF9idWlsZF9kZXZpY2V0cmVlKCk7CisJc3BhcnNlX21lbW9yeV9wcmVzZW50X3dpdGhfYWN0aXZlX3JlZ2lvbnMoTUFYX05VTU5PREVTKTsKIAlzcGFyc2VfaW5pdCgpOwogCXpvbmVfc2l6ZXNfaW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW5pdF82NC5jIGIvYXJjaC94ODYvbW0vaW5pdF82NC5jCmluZGV4IDc5NDIzMzUuLmQ4NjVjNGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2luaXRfNjQuYworKysgYi9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKQEAgLTYxNiw3ICs2MTYsOSBAQAogCXVuc2lnbmVkIGxvbmcgbWF4X3pvbmVfcGZuc1tNQVhfTlJfWk9ORVNdOwogCiAJbWVtc2V0KG1heF96b25lX3BmbnMsIDAsIHNpemVvZihtYXhfem9uZV9wZm5zKSk7CisjaWZkZWYgQ09ORklHX1pPTkVfRE1BCiAJbWF4X3pvbmVfcGZuc1taT05FX0RNQV0gPSBNQVhfRE1BX1BGTjsKKyNlbmRpZgogCW1heF96b25lX3BmbnNbWk9ORV9ETUEzMl0gPSBNQVhfRE1BMzJfUEZOOwogCW1heF96b25lX3BmbnNbWk9ORV9OT1JNQUxdID0gbWF4X3BmbjsKIApAQCAtNjc5LDE0ICs2ODEsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoYXJjaF9hZGRfbWVtb3J5KTsKIAotI2lmICFkZWZpbmVkKENPTkZJR19BQ1BJX05VTUEpICYmIGRlZmluZWQoQ09ORklHX05VTUEpCi1pbnQgbWVtb3J5X2FkZF9waHlzYWRkcl90b19uaWQodTY0IHN0YXJ0KQotewotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwobWVtb3J5X2FkZF9waHlzYWRkcl90b19uaWQpOwotI2VuZGlmCi0KICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi8KIAogc3RhdGljIHN0cnVjdCBrY29yZV9saXN0IGtjb3JlX3ZzeXNjYWxsOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW9yZW1hcC5jIGIvYXJjaC94ODYvbW0vaW9yZW1hcC5jCmluZGV4IDAzNjk4NDMuLmJlMWVmNTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2lvcmVtYXAuYworKysgYi9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKQEAgLTkxLDEzICs5MSw2IEBACiAJCXJldHVybiAoX19mb3JjZSB2b2lkIF9faW9tZW0gKilwaHlzX3RvX3ZpcnQocGh5c19hZGRyKTsKIAogCS8qCi0JICogQ2hlY2sgaWYgdGhlIHJlcXVlc3Qgc3BhbnMgbW9yZSB0aGFuIGFueSBCQVIgaW4gdGhlIGlvbWVtIHJlc291cmNlCi0JICogdHJlZS4KLQkgKi8KLQlXQVJOX09OQ0UoaW9tZW1fbWFwX3Nhbml0eV9jaGVjayhwaHlzX2FkZHIsIHNpemUpLAotCQkgIEtFUk5fSU5GTyAiSW5mbzogbWFwcGluZyBtdWx0aXBsZSBCQVJzLiBZb3VyIGtlcm5lbCBpcyBmaW5lLiIpOwotCi0JLyoKIAkgKiBEb24ndCBhbGxvdyBhbnlib2R5IHRvIHJlbWFwIG5vcm1hbCBSQU0gdGhhdCB3ZSdyZSB1c2luZy4uCiAJICovCiAJbGFzdF9wZm4gPSBsYXN0X2FkZHIgPj4gUEFHRV9TSElGVDsKQEAgLTE3MCw2ICsxNjMsMTMgQEAKIAlyZXRfYWRkciA9ICh2b2lkIF9faW9tZW0gKikgKHZhZGRyICsgb2Zmc2V0KTsKIAltbWlvdHJhY2VfaW9yZW1hcCh1bmFsaWduZWRfcGh5c19hZGRyLCB1bmFsaWduZWRfc2l6ZSwgcmV0X2FkZHIpOwogCisJLyoKKwkgKiBDaGVjayBpZiB0aGUgcmVxdWVzdCBzcGFucyBtb3JlIHRoYW4gYW55IEJBUiBpbiB0aGUgaW9tZW0gcmVzb3VyY2UKKwkgKiB0cmVlLgorCSAqLworCVdBUk5fT05DRShpb21lbV9tYXBfc2FuaXR5X2NoZWNrKHVuYWxpZ25lZF9waHlzX2FkZHIsIHVuYWxpZ25lZF9zaXplKSwKKwkJICBLRVJOX0lORk8gIkluZm86IG1hcHBpbmcgbXVsdGlwbGUgQkFScy4gWW91ciBrZXJuZWwgaXMgZmluZS4iKTsKKwogCXJldHVybiByZXRfYWRkcjsKIGVycl9mcmVlX2FyZWE6CiAJZnJlZV92bV9hcmVhKGFyZWEpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbnVtYS5jIGIvYXJjaC94ODYvbW0vbnVtYS5jCmluZGV4IDk1NTlkMzYuLmY1NTEwZDggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL251bWEuYworKysgYi9hcmNoL3g4Ni9tbS9udW1hLmMKQEAgLTEsMTEgKzEsMzkgQEAKIC8qIENvbW1vbiBjb2RlIGZvciAzMiBhbmQgNjQtYml0IE5VTUEgKi8KLSNpbmNsdWRlIDxsaW51eC90b3BvbG9neS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KLSNpbmNsdWRlIDxhc20vbnVtYS5oPgorI2luY2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdG9wb2xvZ3kuaD4KKworI2luY2x1ZGUgPGFzbS9lODIwLmg+CisjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9hY3BpLmg+CisjaW5jbHVkZSA8YXNtL2FtZF9uYi5oPgorCisjaW5jbHVkZSAibnVtYV9pbnRlcm5hbC5oIgogCiBpbnQgX19pbml0ZGF0YSBudW1hX29mZjsKK25vZGVtYXNrX3QgbnVtYV9ub2Rlc19wYXJzZWQgX19pbml0ZGF0YTsKKworc3RydWN0IHBnbGlzdF9kYXRhICpub2RlX2RhdGFbTUFYX05VTU5PREVTXSBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTChub2RlX2RhdGEpOworCitzdGF0aWMgc3RydWN0IG51bWFfbWVtaW5mbyBudW1hX21lbWluZm8KKyNpZm5kZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCitfX2luaXRkYXRhCisjZW5kaWYKKzsKKworc3RhdGljIGludCBudW1hX2Rpc3RhbmNlX2NudDsKK3N0YXRpYyB1OCAqbnVtYV9kaXN0YW5jZTsKIAogc3RhdGljIF9faW5pdCBpbnQgbnVtYV9zZXR1cChjaGFyICpvcHQpCiB7CkBAIC0zMiw2ICs2MCwxNSBAQAogCVswIC4uLiBNQVhfTE9DQUxfQVBJQy0xXSA9IE5VTUFfTk9fTk9ERQogfTsKIAoraW50IF9fY3B1aW5pdCBudW1hX2NwdV9ub2RlKGludCBjcHUpCit7CisJaW50IGFwaWNpZCA9IGVhcmx5X3Blcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSk7CisKKwlpZiAoYXBpY2lkICE9IEJBRF9BUElDSUQpCisJCXJldHVybiBfX2FwaWNpZF90b19ub2RlW2FwaWNpZF07CisJcmV0dXJuIE5VTUFfTk9fTk9ERTsKK30KKwogY3B1bWFza192YXJfdCBub2RlX3RvX2NwdW1hc2tfbWFwW01BWF9OVU1OT0RFU107CiBFWFBPUlRfU1lNQk9MKG5vZGVfdG9fY3B1bWFza19tYXApOwogCkBAIC05NSw2ICsxMzIsNDA3IEBACiAJcHJfZGVidWcoIk5vZGUgdG8gY3B1bWFzayBtYXAgZm9yICVkIG5vZGVzXG4iLCBucl9ub2RlX2lkcyk7CiB9CiAKK3N0YXRpYyBpbnQgX19pbml0IG51bWFfYWRkX21lbWJsa190byhpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBlbmQsCisJCQkJICAgICBzdHJ1Y3QgbnVtYV9tZW1pbmZvICptaSkKK3sKKwkvKiBpZ25vcmUgemVybyBsZW5ndGggYmxrcyAqLworCWlmIChzdGFydCA9PSBlbmQpCisJCXJldHVybiAwOworCisJLyogd2hpbmUgYWJvdXQgYW5kIGlnbm9yZSBpbnZhbGlkIGJsa3MgKi8KKwlpZiAoc3RhcnQgPiBlbmQgfHwgbmlkIDwgMCB8fCBuaWQgPj0gTUFYX05VTU5PREVTKSB7CisJCXByX3dhcm5pbmcoIk5VTUE6IFdhcm5pbmc6IGludmFsaWQgbWVtYmxrIG5vZGUgJWQgKCVMeC0lTHgpXG4iLAorCQkJICAgbmlkLCBzdGFydCwgZW5kKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKG1pLT5ucl9ibGtzID49IE5SX05PREVfTUVNQkxLUykgeworCQlwcl9lcnIoIk5VTUE6IHRvbyBtYW55IG1lbWJsayByYW5nZXNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltaS0+YmxrW21pLT5ucl9ibGtzXS5zdGFydCA9IHN0YXJ0OworCW1pLT5ibGtbbWktPm5yX2Jsa3NdLmVuZCA9IGVuZDsKKwltaS0+YmxrW21pLT5ucl9ibGtzXS5uaWQgPSBuaWQ7CisJbWktPm5yX2Jsa3MrKzsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBudW1hX3JlbW92ZV9tZW1ibGtfZnJvbSAtIFJlbW92ZSBvbmUgbnVtYV9tZW1ibGsgZnJvbSBhIG51bWFfbWVtaW5mbworICogQGlkeDogSW5kZXggb2YgbWVtYmxrIHRvIHJlbW92ZQorICogQG1pOiBudW1hX21lbWluZm8gdG8gcmVtb3ZlIG1lbWJsayBmcm9tCisgKgorICogUmVtb3ZlIEBpZHgndGggbnVtYV9tZW1ibGsgZnJvbSBAbWkgYnkgc2hpZnRpbmcgQG1pLT5ibGtbXSBhbmQKKyAqIGRlY3JlbWVudGluZyBAbWktPm5yX2Jsa3MuCisgKi8KK3ZvaWQgX19pbml0IG51bWFfcmVtb3ZlX21lbWJsa19mcm9tKGludCBpZHgsIHN0cnVjdCBudW1hX21lbWluZm8gKm1pKQoreworCW1pLT5ucl9ibGtzLS07CisJbWVtbW92ZSgmbWktPmJsa1tpZHhdLCAmbWktPmJsa1tpZHggKyAxXSwKKwkJKG1pLT5ucl9ibGtzIC0gaWR4KSAqIHNpemVvZihtaS0+YmxrWzBdKSk7Cit9CisKKy8qKgorICogbnVtYV9hZGRfbWVtYmxrIC0gQWRkIG9uZSBudW1hX21lbWJsayB0byBudW1hX21lbWluZm8KKyAqIEBuaWQ6IE5VTUEgbm9kZSBJRCBvZiB0aGUgbmV3IG1lbWJsaworICogQHN0YXJ0OiBTdGFydCBhZGRyZXNzIG9mIHRoZSBuZXcgbWVtYmxrCisgKiBAZW5kOiBFbmQgYWRkcmVzcyBvZiB0aGUgbmV3IG1lbWJsaworICoKKyAqIEFkZCBhIG5ldyBtZW1ibGsgdG8gdGhlIGRlZmF1bHQgbnVtYV9tZW1pbmZvLgorICoKKyAqIFJFVFVSTlM6CisgKiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLgorICovCitpbnQgX19pbml0IG51bWFfYWRkX21lbWJsayhpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBlbmQpCit7CisJcmV0dXJuIG51bWFfYWRkX21lbWJsa190byhuaWQsIHN0YXJ0LCBlbmQsICZudW1hX21lbWluZm8pOworfQorCisvKiBJbml0aWFsaXplIE5PREVfREFUQSBmb3IgYSBub2RlIG9uIHRoZSBsb2NhbCBtZW1vcnkgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ub2RlX2RhdGEoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgZW5kKQoreworCWNvbnN0IHU2NCBuZF9sb3cgPSBQRk5fUEhZUyhNQVhfRE1BX1BGTik7CisJY29uc3QgdTY0IG5kX2hpZ2ggPSBQRk5fUEhZUyhtYXhfcGZuX21hcHBlZCk7CisJY29uc3Qgc2l6ZV90IG5kX3NpemUgPSByb3VuZHVwKHNpemVvZihwZ19kYXRhX3QpLCBQQUdFX1NJWkUpOworCWJvb2wgcmVtYXBwZWQgPSBmYWxzZTsKKwl1NjQgbmRfcGE7CisJdm9pZCAqbmQ7CisJaW50IHRuaWQ7CisKKwkvKgorCSAqIERvbid0IGNvbmZ1c2UgVk0gd2l0aCBhIG5vZGUgdGhhdCBkb2Vzbid0IGhhdmUgdGhlCisJICogbWluaW11bSBhbW91bnQgb2YgbWVtb3J5OgorCSAqLworCWlmIChlbmQgJiYgKGVuZCAtIHN0YXJ0KSA8IE5PREVfTUlOX1NJWkUpCisJCXJldHVybjsKKworCS8qIGluaXRpYWxpemUgcmVtYXAgYWxsb2NhdG9yIGJlZm9yZSBhbGlnbmluZyB0byBaT05FX0FMSUdOICovCisJaW5pdF9hbGxvY19yZW1hcChuaWQsIHN0YXJ0LCBlbmQpOworCisJc3RhcnQgPSByb3VuZHVwKHN0YXJ0LCBaT05FX0FMSUdOKTsKKworCXByaW50ayhLRVJOX0lORk8gIkluaXRtZW0gc2V0dXAgbm9kZSAlZCAlMDE2THgtJTAxNkx4XG4iLAorCSAgICAgICBuaWQsIHN0YXJ0LCBlbmQpOworCisJLyoKKwkgKiBBbGxvY2F0ZSBub2RlIGRhdGEuICBUcnkgcmVtYXAgYWxsb2NhdG9yIGZpcnN0LCBub2RlLWxvY2FsCisJICogbWVtb3J5IGFuZCB0aGVuIGFueSBub2RlLiAgTmV2ZXIgYWxsb2NhdGUgaW4gRE1BIHpvbmUuCisJICovCisJbmQgPSBhbGxvY19yZW1hcChuaWQsIG5kX3NpemUpOworCWlmIChuZCkgeworCQluZF9wYSA9IF9fcGEobmQpOworCQlyZW1hcHBlZCA9IHRydWU7CisJfSBlbHNlIHsKKwkJbmRfcGEgPSBtZW1ibG9ja194ODZfZmluZF9pbl9yYW5nZV9ub2RlKG5pZCwgbmRfbG93LCBuZF9oaWdoLAorCQkJCQkJbmRfc2l6ZSwgU01QX0NBQ0hFX0JZVEVTKTsKKwkJaWYgKG5kX3BhID09IE1FTUJMT0NLX0VSUk9SKQorCQkJbmRfcGEgPSBtZW1ibG9ja19maW5kX2luX3JhbmdlKG5kX2xvdywgbmRfaGlnaCwKKwkJCQkJCW5kX3NpemUsIFNNUF9DQUNIRV9CWVRFUyk7CisJCWlmIChuZF9wYSA9PSBNRU1CTE9DS19FUlJPUikgeworCQkJcHJfZXJyKCJDYW5ub3QgZmluZCAlenUgYnl0ZXMgaW4gbm9kZSAlZFxuIiwKKwkJCSAgICAgICBuZF9zaXplLCBuaWQpOworCQkJcmV0dXJuOworCQl9CisJCW1lbWJsb2NrX3g4Nl9yZXNlcnZlX3JhbmdlKG5kX3BhLCBuZF9wYSArIG5kX3NpemUsICJOT0RFX0RBVEEiKTsKKwkJbmQgPSBfX3ZhKG5kX3BhKTsKKwl9CisKKwkvKiByZXBvcnQgYW5kIGluaXRpYWxpemUgKi8KKwlwcmludGsoS0VSTl9JTkZPICIgIE5PREVfREFUQSBbJTAxNkx4IC0gJTAxNkx4XSVzXG4iLAorCSAgICAgICBuZF9wYSwgbmRfcGEgKyBuZF9zaXplIC0gMSwgcmVtYXBwZWQgPyAiIChyZW1hcHBlZCkiIDogIiIpOworCXRuaWQgPSBlYXJseV9wZm5fdG9fbmlkKG5kX3BhID4+IFBBR0VfU0hJRlQpOworCWlmICghcmVtYXBwZWQgJiYgdG5pZCAhPSBuaWQpCisJCXByaW50ayhLRVJOX0lORk8gIiAgICBOT0RFX0RBVEEoJWQpIG9uIG5vZGUgJWRcbiIsIG5pZCwgdG5pZCk7CisKKwlub2RlX2RhdGFbbmlkXSA9IG5kOworCW1lbXNldChOT0RFX0RBVEEobmlkKSwgMCwgc2l6ZW9mKHBnX2RhdGFfdCkpOworCU5PREVfREFUQShuaWQpLT5ub2RlX2lkID0gbmlkOworCU5PREVfREFUQShuaWQpLT5ub2RlX3N0YXJ0X3BmbiA9IHN0YXJ0ID4+IFBBR0VfU0hJRlQ7CisJTk9ERV9EQVRBKG5pZCktPm5vZGVfc3Bhbm5lZF9wYWdlcyA9IChlbmQgLSBzdGFydCkgPj4gUEFHRV9TSElGVDsKKworCW5vZGVfc2V0X29ubGluZShuaWQpOworfQorCisvKioKKyAqIG51bWFfY2xlYW51cF9tZW1pbmZvIC0gQ2xlYW51cCBhIG51bWFfbWVtaW5mbworICogQG1pOiBudW1hX21lbWluZm8gdG8gY2xlYW4gdXAKKyAqCisgKiBTYW5pdGl6ZSBAbWkgYnkgbWVyZ2luZyBhbmQgcmVtb3ZpbmcgdW5uY2Vzc2FyeSBtZW1ibGtzLiAgQWxzbyBjaGVjayBmb3IKKyAqIGNvbmZsaWN0cyBhbmQgY2xlYXIgdW51c2VkIG1lbWJsa3MuCisgKgorICogUkVUVVJOUzoKKyAqIDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuCisgKi8KK2ludCBfX2luaXQgbnVtYV9jbGVhbnVwX21lbWluZm8oc3RydWN0IG51bWFfbWVtaW5mbyAqbWkpCit7CisJY29uc3QgdTY0IGxvdyA9IDA7CisJY29uc3QgdTY0IGhpZ2ggPSBQRk5fUEhZUyhtYXhfcGZuKTsKKwlpbnQgaSwgaiwgazsKKworCS8qIGZpcnN0LCB0cmltIGFsbCBlbnRyaWVzICovCisJZm9yIChpID0gMDsgaSA8IG1pLT5ucl9ibGtzOyBpKyspIHsKKwkJc3RydWN0IG51bWFfbWVtYmxrICpiaSA9ICZtaS0+YmxrW2ldOworCisJCS8qIG1ha2Ugc3VyZSBhbGwgYmxvY2tzIGFyZSBpbnNpZGUgdGhlIGxpbWl0cyAqLworCQliaS0+c3RhcnQgPSBtYXgoYmktPnN0YXJ0LCBsb3cpOworCQliaS0+ZW5kID0gbWluKGJpLT5lbmQsIGhpZ2gpOworCisJCS8qIGFuZCB0aGVyZSdzIG5vIGVtcHR5IGJsb2NrICovCisJCWlmIChiaS0+c3RhcnQgPj0gYmktPmVuZCkKKwkJCW51bWFfcmVtb3ZlX21lbWJsa19mcm9tKGktLSwgbWkpOworCX0KKworCS8qIG1lcmdlIG5laWdoYm9yaW5nIC8gb3ZlcmxhcHBpbmcgZW50cmllcyAqLworCWZvciAoaSA9IDA7IGkgPCBtaS0+bnJfYmxrczsgaSsrKSB7CisJCXN0cnVjdCBudW1hX21lbWJsayAqYmkgPSAmbWktPmJsa1tpXTsKKworCQlmb3IgKGogPSBpICsgMTsgaiA8IG1pLT5ucl9ibGtzOyBqKyspIHsKKwkJCXN0cnVjdCBudW1hX21lbWJsayAqYmogPSAmbWktPmJsa1tqXTsKKwkJCXU2NCBzdGFydCwgZW5kOworCisJCQkvKgorCQkJICogU2VlIHdoZXRoZXIgdGhlcmUgYXJlIG92ZXJsYXBwaW5nIGJsb2Nrcy4gIFdoaW5lCisJCQkgKiBhYm91dCBidXQgYWxsb3cgb3ZlcmxhcHMgb2YgdGhlIHNhbWUgbmlkLiAgVGhleQorCQkJICogd2lsbCBiZSBtZXJnZWQgYmVsb3cuCisJCQkgKi8KKwkJCWlmIChiaS0+ZW5kID4gYmotPnN0YXJ0ICYmIGJpLT5zdGFydCA8IGJqLT5lbmQpIHsKKwkJCQlpZiAoYmktPm5pZCAhPSBiai0+bmlkKSB7CisJCQkJCXByX2VycigiTlVNQTogbm9kZSAlZCAoJUx4LSVMeCkgb3ZlcmxhcHMgd2l0aCBub2RlICVkICglTHgtJUx4KVxuIiwKKwkJCQkJICAgICAgIGJpLT5uaWQsIGJpLT5zdGFydCwgYmktPmVuZCwKKwkJCQkJICAgICAgIGJqLT5uaWQsIGJqLT5zdGFydCwgYmotPmVuZCk7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KKwkJCQlwcl93YXJuaW5nKCJOVU1BOiBXYXJuaW5nOiBub2RlICVkICglTHgtJUx4KSBvdmVybGFwcyB3aXRoIGl0c2VsZiAoJUx4LSVMeClcbiIsCisJCQkJCSAgIGJpLT5uaWQsIGJpLT5zdGFydCwgYmktPmVuZCwKKwkJCQkJICAgYmotPnN0YXJ0LCBiai0+ZW5kKTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIEpvaW4gdG9nZXRoZXIgYmxvY2tzIG9uIHRoZSBzYW1lIG5vZGUsIGhvbGVzCisJCQkgKiBiZXR3ZWVuIHdoaWNoIGRvbid0IG92ZXJsYXAgd2l0aCBtZW1vcnkgb24gb3RoZXIKKwkJCSAqIG5vZGVzLgorCQkJICovCisJCQlpZiAoYmktPm5pZCAhPSBiai0+bmlkKQorCQkJCWNvbnRpbnVlOworCQkJc3RhcnQgPSBtaW4oYmktPnN0YXJ0LCBiai0+c3RhcnQpOworCQkJZW5kID0gbWF4KGJpLT5lbmQsIGJqLT5lbmQpOworCQkJZm9yIChrID0gMDsgayA8IG1pLT5ucl9ibGtzOyBrKyspIHsKKwkJCQlzdHJ1Y3QgbnVtYV9tZW1ibGsgKmJrID0gJm1pLT5ibGtba107CisKKwkJCQlpZiAoYmktPm5pZCA9PSBiay0+bmlkKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAoc3RhcnQgPCBiay0+ZW5kICYmIGVuZCA+IGJrLT5zdGFydCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoayA8IG1pLT5ucl9ibGtzKQorCQkJCWNvbnRpbnVlOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiTlVNQTogTm9kZSAlZCBbJUx4LCVMeCkgKyBbJUx4LCVMeCkgLT4gWyVMeCwlTHgpXG4iLAorCQkJICAgICAgIGJpLT5uaWQsIGJpLT5zdGFydCwgYmktPmVuZCwgYmotPnN0YXJ0LCBiai0+ZW5kLAorCQkJICAgICAgIHN0YXJ0LCBlbmQpOworCQkJYmktPnN0YXJ0ID0gc3RhcnQ7CisJCQliaS0+ZW5kID0gZW5kOworCQkJbnVtYV9yZW1vdmVfbWVtYmxrX2Zyb20oai0tLCBtaSk7CisJCX0KKwl9CisKKwkvKiBjbGVhciB1bnVzZWQgb25lcyAqLworCWZvciAoaSA9IG1pLT5ucl9ibGtzOyBpIDwgQVJSQVlfU0laRShtaS0+YmxrKTsgaSsrKSB7CisJCW1pLT5ibGtbaV0uc3RhcnQgPSBtaS0+YmxrW2ldLmVuZCA9IDA7CisJCW1pLT5ibGtbaV0ubmlkID0gTlVNQV9OT19OT0RFOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogU2V0IG5vZGVzLCB3aGljaCBoYXZlIG1lbW9yeSBpbiBAbWksIGluICpAbm9kZW1hc2suCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBudW1hX25vZGVtYXNrX2Zyb21fbWVtaW5mbyhub2RlbWFza190ICpub2RlbWFzaywKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IG51bWFfbWVtaW5mbyAqbWkpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtaS0+YmxrKTsgaSsrKQorCQlpZiAobWktPmJsa1tpXS5zdGFydCAhPSBtaS0+YmxrW2ldLmVuZCAmJgorCQkgICAgbWktPmJsa1tpXS5uaWQgIT0gTlVNQV9OT19OT0RFKQorCQkJbm9kZV9zZXQobWktPmJsa1tpXS5uaWQsICpub2RlbWFzayk7Cit9CisKKy8qKgorICogbnVtYV9yZXNldF9kaXN0YW5jZSAtIFJlc2V0IE5VTUEgZGlzdGFuY2UgdGFibGUKKyAqCisgKiBUaGUgY3VycmVudCB0YWJsZSBpcyBmcmVlZC4gIFRoZSBuZXh0IG51bWFfc2V0X2Rpc3RhbmNlKCkgY2FsbCB3aWxsCisgKiBjcmVhdGUgYSBuZXcgb25lLgorICovCit2b2lkIF9faW5pdCBudW1hX3Jlc2V0X2Rpc3RhbmNlKHZvaWQpCit7CisJc2l6ZV90IHNpemUgPSBudW1hX2Rpc3RhbmNlX2NudCAqIG51bWFfZGlzdGFuY2VfY250ICogc2l6ZW9mKG51bWFfZGlzdGFuY2VbMF0pOworCisJLyogbnVtYV9kaXN0YW5jZSBjb3VsZCBiZSAxTFUgbWFya2luZyBhbGxvY2F0aW9uIGZhaWx1cmUsIHRlc3QgY250ICovCisJaWYgKG51bWFfZGlzdGFuY2VfY250KQorCQltZW1ibG9ja194ODZfZnJlZV9yYW5nZShfX3BhKG51bWFfZGlzdGFuY2UpLAorCQkJCQlfX3BhKG51bWFfZGlzdGFuY2UpICsgc2l6ZSk7CisJbnVtYV9kaXN0YW5jZV9jbnQgPSAwOworCW51bWFfZGlzdGFuY2UgPSBOVUxMOwkvKiBlbmFibGUgdGFibGUgY3JlYXRpb24gKi8KK30KKworc3RhdGljIGludCBfX2luaXQgbnVtYV9hbGxvY19kaXN0YW5jZSh2b2lkKQoreworCW5vZGVtYXNrX3Qgbm9kZXNfcGFyc2VkOworCXNpemVfdCBzaXplOworCWludCBpLCBqLCBjbnQgPSAwOworCXU2NCBwaHlzOworCisJLyogc2l6ZSB0aGUgbmV3IHRhYmxlIGFuZCBhbGxvY2F0ZSBpdCAqLworCW5vZGVzX3BhcnNlZCA9IG51bWFfbm9kZXNfcGFyc2VkOworCW51bWFfbm9kZW1hc2tfZnJvbV9tZW1pbmZvKCZub2Rlc19wYXJzZWQsICZudW1hX21lbWluZm8pOworCisJZm9yX2VhY2hfbm9kZV9tYXNrKGksIG5vZGVzX3BhcnNlZCkKKwkJY250ID0gaTsKKwljbnQrKzsKKwlzaXplID0gY250ICogY250ICogc2l6ZW9mKG51bWFfZGlzdGFuY2VbMF0pOworCisJcGh5cyA9IG1lbWJsb2NrX2ZpbmRfaW5fcmFuZ2UoMCwgUEZOX1BIWVMobWF4X3Bmbl9tYXBwZWQpLAorCQkJCSAgICAgIHNpemUsIFBBR0VfU0laRSk7CisJaWYgKHBoeXMgPT0gTUVNQkxPQ0tfRVJST1IpIHsKKwkJcHJfd2FybmluZygiTlVNQTogV2FybmluZzogY2FuJ3QgYWxsb2NhdGUgZGlzdGFuY2UgdGFibGUhXG4iKTsKKwkJLyogZG9uJ3QgcmV0cnkgdW50aWwgZXhwbGljaXRseSByZXNldCAqLworCQludW1hX2Rpc3RhbmNlID0gKHZvaWQgKikxTFU7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1ibG9ja194ODZfcmVzZXJ2ZV9yYW5nZShwaHlzLCBwaHlzICsgc2l6ZSwgIk5VTUEgRElTVCIpOworCisJbnVtYV9kaXN0YW5jZSA9IF9fdmEocGh5cyk7CisJbnVtYV9kaXN0YW5jZV9jbnQgPSBjbnQ7CisKKwkvKiBmaWxsIHdpdGggdGhlIGRlZmF1bHQgZGlzdGFuY2VzICovCisJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKQorCQlmb3IgKGogPSAwOyBqIDwgY250OyBqKyspCisJCQludW1hX2Rpc3RhbmNlW2kgKiBjbnQgKyBqXSA9IGkgPT0gaiA/CisJCQkJTE9DQUxfRElTVEFOQ0UgOiBSRU1PVEVfRElTVEFOQ0U7CisJcHJpbnRrKEtFUk5fREVCVUcgIk5VTUE6IEluaXRpYWxpemVkIGRpc3RhbmNlIHRhYmxlLCBjbnQ9JWRcbiIsIGNudCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBudW1hX3NldF9kaXN0YW5jZSAtIFNldCBOVU1BIGRpc3RhbmNlIGZyb20gb25lIE5VTUEgdG8gYW5vdGhlcgorICogQGZyb206IHRoZSAnZnJvbScgbm9kZSB0byBzZXQgZGlzdGFuY2UKKyAqIEB0bzogdGhlICd0bycgIG5vZGUgdG8gc2V0IGRpc3RhbmNlCisgKiBAZGlzdGFuY2U6IE5VTUEgZGlzdGFuY2UKKyAqCisgKiBTZXQgdGhlIGRpc3RhbmNlIGZyb20gbm9kZSBAZnJvbSB0byBAdG8gdG8gQGRpc3RhbmNlLiAgSWYgZGlzdGFuY2UgdGFibGUKKyAqIGRvZXNuJ3QgZXhpc3QsIG9uZSB3aGljaCBpcyBsYXJnZSBlbm91Z2ggdG8gYWNjb21tb2RhdGUgYWxsIHRoZSBjdXJyZW50bHkKKyAqIGtub3duIG5vZGVzIHdpbGwgYmUgY3JlYXRlZC4KKyAqCisgKiBJZiBzdWNoIHRhYmxlIGNhbm5vdCBiZSBhbGxvY2F0ZWQsIGEgd2FybmluZyBpcyBwcmludGVkIGFuZCBmdXJ0aGVyCisgKiBjYWxscyBhcmUgaWdub3JlZCB1bnRpbCB0aGUgZGlzdGFuY2UgdGFibGUgaXMgcmVzZXQgd2l0aAorICogbnVtYV9yZXNldF9kaXN0YW5jZSgpLgorICoKKyAqIElmIEBmcm9tIG9yIEB0byBpcyBoaWdoZXIgdGhhbiB0aGUgaGlnaGVzdCBrbm93biBub2RlIGF0IHRoZSB0aW1lIG9mCisgKiB0YWJsZSBjcmVhdGlvbiBvciBAZGlzdGFuY2UgZG9lc24ndCBtYWtlIHNlbnNlLCB0aGUgY2FsbCBpcyBpZ25vcmVkLgorICogVGhpcyBpcyB0byBhbGxvdyBzaW1wbGlmaWNhdGlvbiBvZiBzcGVjaWZpYyBOVU1BIGNvbmZpZyBpbXBsZW1lbnRhdGlvbnMuCisgKi8KK3ZvaWQgX19pbml0IG51bWFfc2V0X2Rpc3RhbmNlKGludCBmcm9tLCBpbnQgdG8sIGludCBkaXN0YW5jZSkKK3sKKwlpZiAoIW51bWFfZGlzdGFuY2UgJiYgbnVtYV9hbGxvY19kaXN0YW5jZSgpIDwgMCkKKwkJcmV0dXJuOworCisJaWYgKGZyb20gPj0gbnVtYV9kaXN0YW5jZV9jbnQgfHwgdG8gPj0gbnVtYV9kaXN0YW5jZV9jbnQpIHsKKwkJcHJpbnRrX29uY2UoS0VSTl9ERUJVRyAiTlVNQTogRGVidWc6IGRpc3RhbmNlIG91dCBvZiBib3VuZCwgZnJvbT0lZCB0bz0lZCBkaXN0YW5jZT0lZFxuIiwKKwkJCSAgICBmcm9tLCB0bywgZGlzdGFuY2UpOworCQlyZXR1cm47CisJfQorCisJaWYgKCh1OClkaXN0YW5jZSAhPSBkaXN0YW5jZSB8fAorCSAgICAoZnJvbSA9PSB0byAmJiBkaXN0YW5jZSAhPSBMT0NBTF9ESVNUQU5DRSkpIHsKKwkJcHJfd2Fybl9vbmNlKCJOVU1BOiBXYXJuaW5nOiBpbnZhbGlkIGRpc3RhbmNlIHBhcmFtZXRlciwgZnJvbT0lZCB0bz0lZCBkaXN0YW5jZT0lZFxuIiwKKwkJCSAgICAgZnJvbSwgdG8sIGRpc3RhbmNlKTsKKwkJcmV0dXJuOworCX0KKworCW51bWFfZGlzdGFuY2VbZnJvbSAqIG51bWFfZGlzdGFuY2VfY250ICsgdG9dID0gZGlzdGFuY2U7Cit9CisKK2ludCBfX25vZGVfZGlzdGFuY2UoaW50IGZyb20sIGludCB0bykKK3sKKwlpZiAoZnJvbSA+PSBudW1hX2Rpc3RhbmNlX2NudCB8fCB0byA+PSBudW1hX2Rpc3RhbmNlX2NudCkKKwkJcmV0dXJuIGZyb20gPT0gdG8gPyBMT0NBTF9ESVNUQU5DRSA6IFJFTU9URV9ESVNUQU5DRTsKKwlyZXR1cm4gbnVtYV9kaXN0YW5jZVtmcm9tICogbnVtYV9kaXN0YW5jZV9jbnQgKyB0b107Cit9CitFWFBPUlRfU1lNQk9MKF9fbm9kZV9kaXN0YW5jZSk7CisKKy8qCisgKiBTYW5pdHkgY2hlY2sgdG8gY2F0Y2ggbW9yZSBiYWQgTlVNQSBjb25maWd1cmF0aW9ucyAodGhleSBhcmUgYW1hemluZ2x5CisgKiBjb21tb24pLiAgTWFrZSBzdXJlIHRoZSBub2RlcyBjb3ZlciBhbGwgbWVtb3J5LgorICovCitzdGF0aWMgYm9vbCBfX2luaXQgbnVtYV9tZW1pbmZvX2NvdmVyX21lbW9yeShjb25zdCBzdHJ1Y3QgbnVtYV9tZW1pbmZvICptaSkKK3sKKwl1NjQgbnVtYXJhbSwgZTgyMHJhbTsKKwlpbnQgaTsKKworCW51bWFyYW0gPSAwOworCWZvciAoaSA9IDA7IGkgPCBtaS0+bnJfYmxrczsgaSsrKSB7CisJCXU2NCBzID0gbWktPmJsa1tpXS5zdGFydCA+PiBQQUdFX1NISUZUOworCQl1NjQgZSA9IG1pLT5ibGtbaV0uZW5kID4+IFBBR0VfU0hJRlQ7CisJCW51bWFyYW0gKz0gZSAtIHM7CisJCW51bWFyYW0gLT0gX19hYnNlbnRfcGFnZXNfaW5fcmFuZ2UobWktPmJsa1tpXS5uaWQsIHMsIGUpOworCQlpZiAoKHM2NCludW1hcmFtIDwgMCkKKwkJCW51bWFyYW0gPSAwOworCX0KKworCWU4MjByYW0gPSBtYXhfcGZuIC0gKG1lbWJsb2NrX3g4Nl9ob2xlX3NpemUoMCwKKwkJCQkJUEZOX1BIWVMobWF4X3BmbikpID4+IFBBR0VfU0hJRlQpOworCS8qIFdlIHNlZW0gdG8gbG9zZSAzIHBhZ2VzIHNvbWV3aGVyZS4gQWxsb3cgMU0gb2Ygc2xhY2suICovCisJaWYgKChzNjQpKGU4MjByYW0gLSBudW1hcmFtKSA+PSAoMSA8PCAoMjAgLSBQQUdFX1NISUZUKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJOVU1BOiBub2RlcyBvbmx5IGNvdmVyICVMdU1CIG9mIHlvdXIgJUx1TUIgZTgyMCBSQU0uIE5vdCB1c2VkLlxuIiwKKwkJICAgICAgIChudW1hcmFtIDw8IFBBR0VfU0hJRlQpID4+IDIwLAorCQkgICAgICAgKGU4MjByYW0gPDwgUEFHRV9TSElGVCkgPj4gMjApOworCQlyZXR1cm4gZmFsc2U7CisJfQorCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50IF9faW5pdCBudW1hX3JlZ2lzdGVyX21lbWJsa3Moc3RydWN0IG51bWFfbWVtaW5mbyAqbWkpCit7CisJaW50IGksIG5pZDsKKworCS8qIEFjY291bnQgZm9yIG5vZGVzIHdpdGggY3B1cyBhbmQgbm8gbWVtb3J5ICovCisJbm9kZV9wb3NzaWJsZV9tYXAgPSBudW1hX25vZGVzX3BhcnNlZDsKKwludW1hX25vZGVtYXNrX2Zyb21fbWVtaW5mbygmbm9kZV9wb3NzaWJsZV9tYXAsIG1pKTsKKwlpZiAoV0FSTl9PTihub2Rlc19lbXB0eShub2RlX3Bvc3NpYmxlX21hcCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoaSA9IDA7IGkgPCBtaS0+bnJfYmxrczsgaSsrKQorCQltZW1ibG9ja194ODZfcmVnaXN0ZXJfYWN0aXZlX3JlZ2lvbnMobWktPmJsa1tpXS5uaWQsCisJCQkJCW1pLT5ibGtbaV0uc3RhcnQgPj4gUEFHRV9TSElGVCwKKwkJCQkJbWktPmJsa1tpXS5lbmQgPj4gUEFHRV9TSElGVCk7CisKKwkvKiBmb3Igb3V0IG9mIG9yZGVyIGVudHJpZXMgKi8KKwlzb3J0X25vZGVfbWFwKCk7CisJaWYgKCFudW1hX21lbWluZm9fY292ZXJfbWVtb3J5KG1pKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBGaW5hbGx5IHJlZ2lzdGVyIG5vZGVzLiAqLworCWZvcl9lYWNoX25vZGVfbWFzayhuaWQsIG5vZGVfcG9zc2libGVfbWFwKSB7CisJCXU2NCBzdGFydCA9IFBGTl9QSFlTKG1heF9wZm4pOworCQl1NjQgZW5kID0gMDsKKworCQlmb3IgKGkgPSAwOyBpIDwgbWktPm5yX2Jsa3M7IGkrKykgeworCQkJaWYgKG5pZCAhPSBtaS0+YmxrW2ldLm5pZCkKKwkJCQljb250aW51ZTsKKwkJCXN0YXJ0ID0gbWluKG1pLT5ibGtbaV0uc3RhcnQsIHN0YXJ0KTsKKwkJCWVuZCA9IG1heChtaS0+YmxrW2ldLmVuZCwgZW5kKTsKKwkJfQorCisJCWlmIChzdGFydCA8IGVuZCkKKwkJCXNldHVwX25vZGVfZGF0YShuaWQsIHN0YXJ0LCBlbmQpOworCX0KKworCXJldHVybiAwOworfQorCiAvKgogICogVGhlcmUgYXJlIHVuZm9ydHVuYXRlbHkgc29tZSBwb29ybHkgZGVzaWduZWQgbWFpbmJvYXJkcyBhcm91bmQgdGhhdAogICogb25seSBjb25uZWN0IG1lbW9yeSB0byBhIHNpbmdsZSBDUFUuIFRoaXMgYnJlYWtzIHRoZSAxOjEgY3B1LT5ub2RlCkBAIC0xMDIsNyArNTQwLDcgQEAKICAqIGFzIHRoZSBudW1iZXIgb2YgQ1BVcyBpcyBub3Qga25vd24geWV0LiBXZSByb3VuZCByb2JpbiB0aGUgZXhpc3RpbmcKICAqIG5vZGVzLgogICovCi12b2lkIF9faW5pdCBudW1hX2luaXRfYXJyYXkodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBudW1hX2luaXRfYXJyYXkodm9pZCkKIHsKIAlpbnQgcnIsIGk7CiAKQEAgLTExNyw2ICs1NTUsOTUgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgX19pbml0IG51bWFfaW5pdChpbnQgKCppbml0X2Z1bmMpKHZvaWQpKQoreworCWludCBpOworCWludCByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0xPQ0FMX0FQSUM7IGkrKykKKwkJc2V0X2FwaWNpZF90b19ub2RlKGksIE5VTUFfTk9fTk9ERSk7CisKKwlub2Rlc19jbGVhcihudW1hX25vZGVzX3BhcnNlZCk7CisJbm9kZXNfY2xlYXIobm9kZV9wb3NzaWJsZV9tYXApOworCW5vZGVzX2NsZWFyKG5vZGVfb25saW5lX21hcCk7CisJbWVtc2V0KCZudW1hX21lbWluZm8sIDAsIHNpemVvZihudW1hX21lbWluZm8pKTsKKwlyZW1vdmVfYWxsX2FjdGl2ZV9yYW5nZXMoKTsKKwludW1hX3Jlc2V0X2Rpc3RhbmNlKCk7CisKKwlyZXQgPSBpbml0X2Z1bmMoKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBudW1hX2NsZWFudXBfbWVtaW5mbygmbnVtYV9tZW1pbmZvKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCW51bWFfZW11bGF0aW9uKCZudW1hX21lbWluZm8sIG51bWFfZGlzdGFuY2VfY250KTsKKworCXJldCA9IG51bWFfcmVnaXN0ZXJfbWVtYmxrcygmbnVtYV9tZW1pbmZvKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBucl9jcHVfaWRzOyBpKyspIHsKKwkJaW50IG5pZCA9IGVhcmx5X2NwdV90b19ub2RlKGkpOworCisJCWlmIChuaWQgPT0gTlVNQV9OT19OT0RFKQorCQkJY29udGludWU7CisJCWlmICghbm9kZV9vbmxpbmUobmlkKSkKKwkJCW51bWFfY2xlYXJfbm9kZShpKTsKKwl9CisJbnVtYV9pbml0X2FycmF5KCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZHVtbXlfbnVtYV9pbml0IC0gRmFsbGJhY2sgZHVtbXkgTlVNQSBpbml0CisgKgorICogVXNlZCBpZiB0aGVyZSdzIG5vIHVuZGVybHlpbmcgTlVNQSBhcmNoaXRlY3R1cmUsIE5VTUEgaW5pdGlhbGl6YXRpb24KKyAqIGZhaWxzLCBvciBOVU1BIGlzIGRpc2FibGVkIG9uIHRoZSBjb21tYW5kIGxpbmUuCisgKgorICogTXVzdCBvbmxpbmUgYXQgbGVhc3Qgb25lIG5vZGUgYW5kIGFkZCBtZW1vcnkgYmxvY2tzIHRoYXQgY292ZXIgYWxsCisgKiBhbGxvd2VkIG1lbW9yeS4gIFRoaXMgZnVuY3Rpb24gbXVzdCBub3QgZmFpbC4KKyAqLworc3RhdGljIGludCBfX2luaXQgZHVtbXlfbnVtYV9pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsCisJICAgICAgIG51bWFfb2ZmID8gIk5VTUEgdHVybmVkIG9mZiIgOiAiTm8gTlVNQSBjb25maWd1cmF0aW9uIGZvdW5kIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiRmFraW5nIGEgbm9kZSBhdCAlMDE2THgtJTAxNkx4XG4iLAorCSAgICAgICAwTExVLCBQRk5fUEhZUyhtYXhfcGZuKSk7CisKKwlub2RlX3NldCgwLCBudW1hX25vZGVzX3BhcnNlZCk7CisJbnVtYV9hZGRfbWVtYmxrKDAsIDAsIFBGTl9QSFlTKG1heF9wZm4pKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHg4Nl9udW1hX2luaXQgLSBJbml0aWFsaXplIE5VTUEKKyAqCisgKiBUcnkgZWFjaCBjb25maWd1cmVkIE5VTUEgaW5pdGlhbGl6YXRpb24gbWV0aG9kIHVudGlsIG9uZSBzdWNjZWVkcy4gIFRoZQorICogbGFzdCBmYWxsYmFjayBpcyBkdW1teSBzaW5nbGUgbm9kZSBjb25maWcgZW5jb21hcHNzaW5nIHdob2xlIG1lbW9yeSBhbmQKKyAqIG5ldmVyIGZhaWxzLgorICovCit2b2lkIF9faW5pdCB4ODZfbnVtYV9pbml0KHZvaWQpCit7CisJaWYgKCFudW1hX29mZikgeworI2lmZGVmIENPTkZJR19YODZfTlVNQVEKKwkJaWYgKCFudW1hX2luaXQobnVtYXFfbnVtYV9pbml0KSkKKwkJCXJldHVybjsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BQ1BJX05VTUEKKwkJaWYgKCFudW1hX2luaXQoeDg2X2FjcGlfbnVtYV9pbml0KSkKKwkJCXJldHVybjsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BTURfTlVNQQorCQlpZiAoIW51bWFfaW5pdChhbWRfbnVtYV9pbml0KSkKKwkJCXJldHVybjsKKyNlbmRpZgorCX0KKworCW51bWFfaW5pdChkdW1teV9udW1hX2luaXQpOworfQorCiBzdGF0aWMgX19pbml0IGludCBmaW5kX25lYXJfb25saW5lX25vZGUoaW50IG5vZGUpCiB7CiAJaW50IG4sIHZhbDsKQEAgLTIxMyw1MyArNzQwLDQ4IEBACiAJcmV0dXJuIHBlcl9jcHUoeDg2X2NwdV90b19ub2RlX21hcCwgY3B1KTsKIH0KIAotc3RydWN0IGNwdW1hc2sgX19jcHVpbml0ICpkZWJ1Z19jcHVtYXNrX3NldF9jcHUoaW50IGNwdSwgaW50IGVuYWJsZSkKK3ZvaWQgZGVidWdfY3B1bWFza19zZXRfY3B1KGludCBjcHUsIGludCBub2RlLCBib29sIGVuYWJsZSkKIHsKLQlpbnQgbm9kZSA9IGVhcmx5X2NwdV90b19ub2RlKGNwdSk7CiAJc3RydWN0IGNwdW1hc2sgKm1hc2s7CiAJY2hhciBidWZbNjRdOwogCiAJaWYgKG5vZGUgPT0gTlVNQV9OT19OT0RFKSB7CiAJCS8qIGVhcmx5X2NwdV90b19ub2RlKCkgYWxyZWFkeSBlbWl0cyBhIHdhcm5pbmcgYW5kIHRyYWNlICovCi0JCXJldHVybiBOVUxMOworCQlyZXR1cm47CiAJfQogCW1hc2sgPSBub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdOwogCWlmICghbWFzaykgewogCQlwcl9lcnIoIm5vZGVfdG9fY3B1bWFza19tYXBbJWldIE5VTExcbiIsIG5vZGUpOwogCQlkdW1wX3N0YWNrKCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWNwdWxpc3Rfc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIG1hc2spOwotCXByaW50ayhLRVJOX0RFQlVHICIlcyBjcHUgJWQgbm9kZSAlZDogbWFzayBub3cgJXNcbiIsCi0JCWVuYWJsZSA/ICJudW1hX2FkZF9jcHUiIDogIm51bWFfcmVtb3ZlX2NwdSIsCi0JCWNwdSwgbm9kZSwgYnVmKTsKLQlyZXR1cm4gbWFzazsKLX0KLQotIyBpZm5kZWYgQ09ORklHX05VTUFfRU1VCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgbnVtYV9zZXRfY3B1bWFzayhpbnQgY3B1LCBpbnQgZW5hYmxlKQotewotCXN0cnVjdCBjcHVtYXNrICptYXNrOwotCi0JbWFzayA9IGRlYnVnX2NwdW1hc2tfc2V0X2NwdShjcHUsIGVuYWJsZSk7Ci0JaWYgKCFtYXNrKQogCQlyZXR1cm47CisJfQogCiAJaWYgKGVuYWJsZSkKIAkJY3B1bWFza19zZXRfY3B1KGNwdSwgbWFzayk7CiAJZWxzZQogCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG1hc2spOworCisJY3B1bGlzdF9zY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgbWFzayk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzIGNwdSAlZCBub2RlICVkOiBtYXNrIG5vdyAlc1xuIiwKKwkJZW5hYmxlID8gIm51bWFfYWRkX2NwdSIgOiAibnVtYV9yZW1vdmVfY3B1IiwKKwkJY3B1LCBub2RlLCBidWYpOworCXJldHVybjsKK30KKworIyBpZm5kZWYgQ09ORklHX05VTUFfRU1VCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgbnVtYV9zZXRfY3B1bWFzayhpbnQgY3B1LCBib29sIGVuYWJsZSkKK3sKKwlkZWJ1Z19jcHVtYXNrX3NldF9jcHUoY3B1LCBlYXJseV9jcHVfdG9fbm9kZShjcHUpLCBlbmFibGUpOwogfQogCiB2b2lkIF9fY3B1aW5pdCBudW1hX2FkZF9jcHUoaW50IGNwdSkKIHsKLQludW1hX3NldF9jcHVtYXNrKGNwdSwgMSk7CisJbnVtYV9zZXRfY3B1bWFzayhjcHUsIHRydWUpOwogfQogCiB2b2lkIF9fY3B1aW5pdCBudW1hX3JlbW92ZV9jcHUoaW50IGNwdSkKIHsKLQludW1hX3NldF9jcHVtYXNrKGNwdSwgMCk7CisJbnVtYV9zZXRfY3B1bWFzayhjcHUsIGZhbHNlKTsKIH0KICMgZW5kaWYJLyogIUNPTkZJR19OVU1BX0VNVSAqLwogCkBAIC0yODcsMyArODA5LDE4IEBACiBFWFBPUlRfU1lNQk9MKGNwdW1hc2tfb2Zfbm9kZSk7CiAKICNlbmRpZgkvKiAhQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUyAqLworCisjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCitpbnQgbWVtb3J5X2FkZF9waHlzYWRkcl90b19uaWQodTY0IHN0YXJ0KQoreworCXN0cnVjdCBudW1hX21lbWluZm8gKm1pID0gJm51bWFfbWVtaW5mbzsKKwlpbnQgbmlkID0gbWktPmJsa1swXS5uaWQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbWktPm5yX2Jsa3M7IGkrKykKKwkJaWYgKG1pLT5ibGtbaV0uc3RhcnQgPD0gc3RhcnQgJiYgbWktPmJsa1tpXS5lbmQgPiBzdGFydCkKKwkJCW5pZCA9IG1pLT5ibGtbaV0ubmlkOworCXJldHVybiBuaWQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtZW1vcnlfYWRkX3BoeXNhZGRyX3RvX25pZCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL251bWFfMzIuYyBiL2FyY2gveDg2L21tL251bWFfMzIuYwppbmRleCBiZGUzOTA2Li44NDlhOTc1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9udW1hXzMyLmMKKysrIGIvYXJjaC94ODYvbW0vbnVtYV8zMi5jCkBAIC0yMiwzOSArMjIsMTEgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgotI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KLSNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+Ci0jaW5jbHVkZSA8bGludXgvcGZuLmg+Ci0jaW5jbHVkZSA8bGludXgvc3dhcC5oPgotI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KIAotI2luY2x1ZGUgPGFzbS9lODIwLmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL21tem9uZS5oPgotI2luY2x1ZGUgPGFzbS9iaW9zX2ViZGEuaD4KLSNpbmNsdWRlIDxhc20vcHJvdG8uaD4KLQotc3RydWN0IHBnbGlzdF9kYXRhICpub2RlX2RhdGFbTUFYX05VTU5PREVTXSBfX3JlYWRfbW9zdGx5OwotRVhQT1JUX1NZTUJPTChub2RlX2RhdGEpOwotCi0vKgotICogbnVtYSBpbnRlcmZhY2UgLSB3ZSBleHBlY3QgdGhlIG51bWEgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvZGUgdG8gaGF2ZQotICogICAgICAgICAgICAgICAgICBwb3B1bGF0ZWQgdGhlIGZvbGxvd2luZyBpbml0aWFsaXNhdGlvbi4KLSAqCi0gKiAxKSBub2RlX29ubGluZV9tYXAgIC0gdGhlIG1hcCBvZiBhbGwgbm9kZXMgY29uZmlndXJlZCAob25saW5lKSBpbiB0aGUgc3lzdGVtCi0gKiAyKSBub2RlX3N0YXJ0X3BmbiAgIC0gdGhlIHN0YXJ0aW5nIHBhZ2UgZnJhbWUgbnVtYmVyIGZvciBhIG5vZGUKLSAqIDMpIG5vZGVfZW5kX3BmbiAgICAgLSB0aGUgZW5kaW5nIHBhZ2UgZnJhbSBudW1iZXIgZm9yIGEgbm9kZQotICovCi11bnNpZ25lZCBsb25nIG5vZGVfc3RhcnRfcGZuW01BWF9OVU1OT0RFU10gX19yZWFkX21vc3RseTsKLXVuc2lnbmVkIGxvbmcgbm9kZV9lbmRfcGZuW01BWF9OVU1OT0RFU10gX19yZWFkX21vc3RseTsKLQorI2luY2x1ZGUgIm51bWFfaW50ZXJuYWwuaCIKIAogI2lmZGVmIENPTkZJR19ESVNDT05USUdNRU0KIC8qCkBAIC05OSwxMDggKzcxLDQ2IEBACiB9CiAjZW5kaWYKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZmluZF9tYXhfbG93X3Bmbih2b2lkKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGhpZ2hlbmRfcGZuLCBoaWdoc3RhcnRfcGZuOwogCiAjZGVmaW5lIExBUkdFX1BBR0VfQllURVMgKFBUUlNfUEVSX1BURSAqIFBBR0VfU0laRSkKIAotdW5zaWduZWQgbG9uZyBub2RlX3JlbWFwX3NpemVbTUFYX05VTU5PREVTXTsKIHN0YXRpYyB2b2lkICpub2RlX3JlbWFwX3N0YXJ0X3ZhZGRyW01BWF9OVU1OT0RFU107CiB2b2lkIHNldF9wbWRfcGZuKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgcGZuLCBwZ3Byb3RfdCBmbGFncyk7CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGt2YV9zdGFydF9wZm47Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBrdmFfcGFnZXM7Ci0KLWludCBfX2NwdWluaXQgbnVtYV9jcHVfbm9kZShpbnQgY3B1KQotewotCXJldHVybiBhcGljLT54ODZfMzJfbnVtYV9jcHVfbm9kZShjcHUpOwotfQotCiAvKgotICogRkxBVCAtIHN1cHBvcnQgZm9yIGJhc2ljIFBDIG1lbW9yeSBtb2RlbCB3aXRoIGRpc2NvbnRpZyBlbmFibGVkLCBlc3NlbnRpYWxseQotICogICAgICAgIGEgc2luZ2xlIG5vZGUgd2l0aCBhbGwgYXZhaWxhYmxlIHByb2Nlc3NvcnMgaW4gaXQgd2l0aCBhIGZsYXQKLSAqICAgICAgICBtZW1vcnkgbWFwLgotICovCi1pbnQgX19pbml0IGdldF9tZW1jZmdfbnVtYV9mbGF0KHZvaWQpCi17Ci0JcHJpbnRrKEtFUk5fREVCVUcgIk5VTUEgLSBzaW5nbGUgbm9kZSwgZmxhdCBtZW1vcnkgbW9kZVxuIik7Ci0KLQlub2RlX3N0YXJ0X3BmblswXSA9IDA7Ci0Jbm9kZV9lbmRfcGZuWzBdID0gbWF4X3BmbjsKLQltZW1ibG9ja194ODZfcmVnaXN0ZXJfYWN0aXZlX3JlZ2lvbnMoMCwgMCwgbWF4X3Bmbik7Ci0JbWVtb3J5X3ByZXNlbnQoMCwgMCwgbWF4X3Bmbik7Ci0Jbm9kZV9yZW1hcF9zaXplWzBdID0gbm9kZV9tZW1tYXBfc2l6ZV9ieXRlcygwLCAwLCBtYXhfcGZuKTsKLQotICAgICAgICAvKiBJbmRpY2F0ZSB0aGVyZSBpcyBvbmUgbm9kZSBhdmFpbGFibGUuICovCi0Jbm9kZXNfY2xlYXIobm9kZV9vbmxpbmVfbWFwKTsKLQlub2RlX3NldF9vbmxpbmUoMCk7Ci0JcmV0dXJuIDE7Ci19Ci0KLS8qCi0gKiBGaW5kIHRoZSBoaWdoZXN0IHBhZ2UgZnJhbWUgbnVtYmVyIHdlIGhhdmUgYXZhaWxhYmxlIGZvciB0aGUgbm9kZQotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgcHJvcGFnYXRlX2U4MjBfbWFwX25vZGUoaW50IG5pZCkKLXsKLQlpZiAobm9kZV9lbmRfcGZuW25pZF0gPiBtYXhfcGZuKQotCQlub2RlX2VuZF9wZm5bbmlkXSA9IG1heF9wZm47Ci0JLyoKLQkgKiBpZiBhIHVzZXIgaGFzIGdpdmVuIG1lbT1YWFhYLCB0aGVuIHdlIG5lZWQgdG8gbWFrZSBzdXJlIAotCSAqIHRoYXQgdGhlIG5vZGUgX3N0YXJ0c18gYmVmb3JlIHRoYXQsIHRvbywgbm90IGp1c3QgZW5kcwotCSAqLwotCWlmIChub2RlX3N0YXJ0X3BmbltuaWRdID4gbWF4X3BmbikKLQkJbm9kZV9zdGFydF9wZm5bbmlkXSA9IG1heF9wZm47Ci0JQlVHX09OKG5vZGVfc3RhcnRfcGZuW25pZF0gPiBub2RlX2VuZF9wZm5bbmlkXSk7Ci19Ci0KLS8qIAotICogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgcGdfZGF0YV90IGZvciB0aGlzIG5vZGUgdmlhIGEgY3J1ZGUgcHJlLWJvb3RtZW0KLSAqIG1ldGhvZC4gIEZvciBub2RlIHplcm8gdGFrZSB0aGlzIGZyb20gdGhlIGJvdHRvbSBvZiBtZW1vcnksIGZvcgotICogc3Vic2VxdWVudCBub2RlcyBwbGFjZSB0aGVtIGF0IG5vZGVfcmVtYXBfc3RhcnRfdmFkZHIgd2hpY2ggY29udGFpbnMKLSAqIG5vZGUgbG9jYWwgZGF0YSBpbiBwaHlzaWNhbGx5IG5vZGUgbG9jYWwgbWVtb3J5LiAgU2VlIHNldHVwX21lbW9yeSgpCi0gKiBmb3IgZGV0YWlscy4KLSAqLwotc3RhdGljIHZvaWQgX19pbml0IGFsbG9jYXRlX3BnZGF0KGludCBuaWQpCi17Ci0JY2hhciBidWZbMTZdOwotCi0JaWYgKG5vZGVfaGFzX29ubGluZV9tZW0obmlkKSAmJiBub2RlX3JlbWFwX3N0YXJ0X3ZhZGRyW25pZF0pCi0JCU5PREVfREFUQShuaWQpID0gKHBnX2RhdGFfdCAqKW5vZGVfcmVtYXBfc3RhcnRfdmFkZHJbbmlkXTsKLQllbHNlIHsKLQkJdW5zaWduZWQgbG9uZyBwZ2RhdF9waHlzOwotCQlwZ2RhdF9waHlzID0gbWVtYmxvY2tfZmluZF9pbl9yYW5nZShtaW5fbG93X3Bmbjw8UEFHRV9TSElGVCwKLQkJCQkgbWF4X3Bmbl9tYXBwZWQ8PFBBR0VfU0hJRlQsCi0JCQkJIHNpemVvZihwZ19kYXRhX3QpLAotCQkJCSBQQUdFX1NJWkUpOwotCQlOT0RFX0RBVEEobmlkKSA9IChwZ19kYXRhX3QgKikocGZuX3RvX2thZGRyKHBnZGF0X3BoeXM+PlBBR0VfU0hJRlQpKTsKLQkJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwotCQlzcHJpbnRmKGJ1ZiwgIk5PREVfREFUQSAlZCIsICBuaWQpOwotCQltZW1ibG9ja194ODZfcmVzZXJ2ZV9yYW5nZShwZ2RhdF9waHlzLCBwZ2RhdF9waHlzICsgc2l6ZW9mKHBnX2RhdGFfdCksIGJ1Zik7Ci0JfQotCXByaW50ayhLRVJOX0RFQlVHICJhbGxvY2F0ZV9wZ2RhdDogbm9kZSAlZCBOT0RFX0RBVEEgJTA4bHhcbiIsCi0JCW5pZCwgKHVuc2lnbmVkIGxvbmcpTk9ERV9EQVRBKG5pZCkpOwotfQotCi0vKgotICogSW4gdGhlIERJU0NPTlRJR01FTSBhbmQgU1BBUlNFTUVNIG1lbW9yeSBtb2RlbCwgYSBwb3J0aW9uIG9mIHRoZSBrZXJuZWwKLSAqIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSAoS1ZBKSBpcyByZXNlcnZlZCBhbmQgcG9ydGlvbnMgb2Ygbm9kZXMgYXJlIG1hcHBlZAotICogdXNpbmcgaXQuIFRoaXMgaXMgdG8gYWxsb3cgbm9kZS1sb2NhbCBtZW1vcnkgdG8gYmUgYWxsb2NhdGVkIGZvcgotICogc3RydWN0dXJlcyB0aGF0IHdvdWxkIG5vcm1hbGx5IHJlcXVpcmUgWk9ORV9OT1JNQUwuIFRoZSBtZW1vcnkgaXMKLSAqIGFsbG9jYXRlZCB3aXRoIGFsbG9jX3JlbWFwKCkgYW5kIGNhbGxlcnMgc2hvdWxkIGJlIHByZXBhcmVkIHRvIGFsbG9jYXRlCi0gKiBmcm9tIHRoZSBib290bWVtIGFsbG9jYXRvciBpbnN0ZWFkLgorICogUmVtYXAgbWVtb3J5IGFsbG9jYXRvcgogICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBub2RlX3JlbWFwX3N0YXJ0X3BmbltNQVhfTlVNTk9ERVNdOwogc3RhdGljIHZvaWQgKm5vZGVfcmVtYXBfZW5kX3ZhZGRyW01BWF9OVU1OT0RFU107CiBzdGF0aWMgdm9pZCAqbm9kZV9yZW1hcF9hbGxvY192YWRkcltNQVhfTlVNTk9ERVNdOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgbm9kZV9yZW1hcF9vZmZzZXRbTUFYX05VTU5PREVTXTsKIAorLyoqCisgKiBhbGxvY19yZW1hcCAtIEFsbG9jYXRlIHJlbWFwcGVkIG1lbW9yeQorICogQG5pZDogTlVNQSBub2RlIHRvIGFsbG9jYXRlIG1lbW9yeSBmcm9tCisgKiBAc2l6ZTogVGhlIHNpemUgb2YgYWxsb2NhdGlvbgorICoKKyAqIEFsbG9jYXRlIEBzaXplIGJ5dGVzIGZyb20gdGhlIHJlbWFwIGFyZWEgb2YgTlVNQSBub2RlIEBuaWQuICBUaGUKKyAqIHNpemUgb2YgdGhlIHJlbWFwIGFyZWEgaXMgcHJlZGV0ZXJtaW5lZCBieSBpbml0X2FsbG9jX3JlbWFwKCkgYW5kCisgKiBvbmx5IHRoZSBjYWxsZXJzIGNvbnNpZGVyZWQgdGhlcmUgc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbi4gIEZvcgorICogbW9yZSBpbmZvLCBwbGVhc2UgcmVhZCB0aGUgY29tbWVudCBvbiB0b3Agb2YgaW5pdF9hbGxvY19yZW1hcCgpLgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBiZSByZWFkeSB0byBoYW5kbGUgYWxsb2NhdGlvbiBmYWlsdXJlIGZyb20gdGhpcworICogZnVuY3Rpb24gYW5kIGZhbGwgYmFjayB0byByZWd1bGFyIG1lbW9yeSBhbGxvY2F0b3IgaW4gc3VjaCBjYXNlcy4KKyAqCisgKiBDT05URVhUOgorICogU2luZ2xlIENQVSBlYXJseSBib290IGNvbnRleHQuCisgKgorICogUkVUVVJOUzoKKyAqIFBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBtZW1vcnkgb24gc3VjY2VzcywgJU5VTEwgb24gZmFpbHVyZS4KKyAqLwogdm9pZCAqYWxsb2NfcmVtYXAoaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzaXplKQogewogCXZvaWQgKmFsbG9jYXRpb24gPSBub2RlX3JlbWFwX2FsbG9jX3ZhZGRyW25pZF07CiAKIAlzaXplID0gQUxJR04oc2l6ZSwgTDFfQ0FDSEVfQllURVMpOwogCi0JaWYgKCFhbGxvY2F0aW9uIHx8IChhbGxvY2F0aW9uICsgc2l6ZSkgPj0gbm9kZV9yZW1hcF9lbmRfdmFkZHJbbmlkXSkKKwlpZiAoIWFsbG9jYXRpb24gfHwgKGFsbG9jYXRpb24gKyBzaXplKSA+IG5vZGVfcmVtYXBfZW5kX3ZhZGRyW25pZF0pCiAJCXJldHVybiBOVUxMOwogCiAJbm9kZV9yZW1hcF9hbGxvY192YWRkcltuaWRdICs9IHNpemU7CkBAIC0yMDksMjYgKzExOSw2IEBACiAJcmV0dXJuIGFsbG9jYXRpb247CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCByZW1hcF9udW1hX2t2YSh2b2lkKQotewotCXZvaWQgKnZhZGRyOwotCXVuc2lnbmVkIGxvbmcgcGZuOwotCWludCBub2RlOwotCi0JZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAicmVtYXBfbnVtYV9rdmE6IG5vZGUgJWRcbiIsIG5vZGUpOwotCQlmb3IgKHBmbj0wOyBwZm4gPCBub2RlX3JlbWFwX3NpemVbbm9kZV07IHBmbiArPSBQVFJTX1BFUl9QVEUpIHsKLQkJCXZhZGRyID0gbm9kZV9yZW1hcF9zdGFydF92YWRkcltub2RlXSsocGZuPDxQQUdFX1NISUZUKTsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJyZW1hcF9udW1hX2t2YTogJTA4bHggdG8gcGZuICUwOGx4XG4iLAotCQkJCSh1bnNpZ25lZCBsb25nKXZhZGRyLAotCQkJCW5vZGVfcmVtYXBfc3RhcnRfcGZuW25vZGVdICsgcGZuKTsKLQkJCXNldF9wbWRfcGZuKCh1bG9uZykgdmFkZHIsIAotCQkJCW5vZGVfcmVtYXBfc3RhcnRfcGZuW25vZGVdICsgcGZuLCAKLQkJCQlQQUdFX0tFUk5FTF9MQVJHRSk7Ci0JCX0KLQl9Ci19Ci0KICNpZmRlZiBDT05GSUdfSElCRVJOQVRJT04KIC8qKgogICogcmVzdW1lX21hcF9udW1hX2t2YSAtIGFkZCBLVkEgbWFwcGluZyB0byB0aGUgdGVtcG9yYXJ5IHBhZ2UgdGFibGVzIGNyZWF0ZWQKQEAgLTI0MCwxNSArMTMwLDE2IEBACiAJaW50IG5vZGU7CiAKIAlmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7Ci0JCXVuc2lnbmVkIGxvbmcgc3RhcnRfdmEsIHN0YXJ0X3Bmbiwgc2l6ZSwgcGZuOworCQl1bnNpZ25lZCBsb25nIHN0YXJ0X3ZhLCBzdGFydF9wZm4sIG5yX3BhZ2VzLCBwZm47CiAKIAkJc3RhcnRfdmEgPSAodW5zaWduZWQgbG9uZylub2RlX3JlbWFwX3N0YXJ0X3ZhZGRyW25vZGVdOwogCQlzdGFydF9wZm4gPSBub2RlX3JlbWFwX3N0YXJ0X3Bmbltub2RlXTsKLQkJc2l6ZSA9IG5vZGVfcmVtYXBfc2l6ZVtub2RlXTsKKwkJbnJfcGFnZXMgPSAobm9kZV9yZW1hcF9lbmRfdmFkZHJbbm9kZV0gLQorCQkJICAgIG5vZGVfcmVtYXBfc3RhcnRfdmFkZHJbbm9kZV0pID4+IFBBR0VfU0hJRlQ7CiAKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBub2RlICVkXG4iLCBfX2Z1bmNfXywgbm9kZSk7CiAKLQkJZm9yIChwZm4gPSAwOyBwZm4gPCBzaXplOyBwZm4gKz0gUFRSU19QRVJfUFRFKSB7CisJCWZvciAocGZuID0gMDsgcGZuIDwgbnJfcGFnZXM7IHBmbiArPSBQVFJTX1BFUl9QVEUpIHsKIAkJCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSBzdGFydF92YSArIChwZm4gPDwgUEFHRV9TSElGVCk7CiAJCQlwZ2RfdCAqcGdkID0gcGdkX2Jhc2UgKyBwZ2RfaW5kZXgodmFkZHIpOwogCQkJcHVkX3QgKnB1ZCA9IHB1ZF9vZmZzZXQocGdkLCB2YWRkcik7CkBAIC0yNjQsMTMyICsxNTUsODkgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgX19pbml0IHVuc2lnbmVkIGxvbmcgY2FsY3VsYXRlX251bWFfcmVtYXBfcGFnZXModm9pZCkKKy8qKgorICogaW5pdF9hbGxvY19yZW1hcCAtIEluaXRpYWxpemUgcmVtYXAgYWxsb2NhdG9yIGZvciBhIE5VTUEgbm9kZQorICogQG5pZDogTlVNQSBub2RlIHRvIGluaXRpemxpZSByZW1hcCBhbGxvY2F0b3IgZm9yCisgKgorICogTlVNQSBub2RlcyBtYXkgZW5kIHVwIHdpdGhvdXQgYW55IGxvd21lbS4gIEFzIGFsbG9jYXRpbmcgcGdkYXQgYW5kCisgKiBtZW1tYXAgb24gYSBkaWZmZXJlbnQgbm9kZSB3aXRoIGxvd21lbSBpcyBpbmVmZmljaWVudCwgYSBzcGVjaWFsCisgKiByZW1hcCBhbGxvY2F0b3IgaXMgaW1wbGVtZW50ZWQgd2hpY2ggY2FuIGJlIHVzZWQgYnkgYWxsb2NfcmVtYXAoKS4KKyAqCisgKiBGb3IgZWFjaCBub2RlLCB0aGUgYW1vdW50IG9mIG1lbW9yeSB3aGljaCB3aWxsIGJlIG5lY2Vzc2FyeSBmb3IKKyAqIHBnZGF0IGFuZCBtZW1tYXAgaXMgY2FsY3VsYXRlZCBhbmQgdHdvIG1lbW9yeSBhcmVhcyBvZiB0aGUgc2l6ZSBhcmUKKyAqIGFsbG9jYXRlZCAtIG9uZSBpbiB0aGUgbm9kZSBhbmQgdGhlIG90aGVyIGluIGxvd21lbTsgdGhlbiwgdGhlIGFyZWEKKyAqIGluIHRoZSBub2RlIGlzIHJlbWFwcGVkIHRvIHRoZSBsb3dtZW0gYXJlYS4KKyAqCisgKiBBcyBwZ2RhdCBhbmQgbWVtbWFwIG11c3QgYmUgYWxsb2NhdGVkIGluIGxvd21lbSBhbnl3YXksIHRoaXMKKyAqIGRvZXNuJ3Qgd2FzdGUgbG93bWVtIGFkZHJlc3Mgc3BhY2U7IGhvd2V2ZXIsIHRoZSBhY3R1YWwgbG93bWVtCisgKiB3aGljaCBnZXRzIHJlbWFwcGVkIG92ZXIgaXMgd2FzdGVkLiAgVGhlIGFtb3VudCBzaG91bGRuJ3QgYmUKKyAqIHByb2JsZW1hdGljIG9uIG1hY2hpbmVzIHRoaXMgZmVhdHVyZSB3aWxsIGJlIHVzZWQuCisgKgorICogSW5pdGlhbGl6YXRpb24gZmFpbHVyZSBpc24ndCBmYXRhbC4gIGFsbG9jX3JlbWFwKCkgaXMgdXNlZAorICogb3Bwb3J0dW5pc3RpY2FsbHkgYW5kIHRoZSBjYWxsZXJzIHdpbGwgZmFsbCBiYWNrIHRvIG90aGVyIG1lbW9yeQorICogYWxsb2NhdGlvbiBtZWNoYW5pc21zIG9uIGZhaWx1cmUuCisgKi8KK3ZvaWQgX19pbml0IGluaXRfYWxsb2NfcmVtYXAoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgZW5kKQogewotCWludCBuaWQ7Ci0JdW5zaWduZWQgbG9uZyBzaXplLCByZXNlcnZlX3BhZ2VzID0gMDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiA9IHN0YXJ0ID4+IFBBR0VfU0hJRlQ7CisJdW5zaWduZWQgbG9uZyBlbmRfcGZuID0gZW5kID4+IFBBR0VfU0hJRlQ7CisJdW5zaWduZWQgbG9uZyBzaXplLCBwZm47CisJdTY0IG5vZGVfcGEsIHJlbWFwX3BhOworCXZvaWQgKnJlbWFwX3ZhOwogCi0JZm9yX2VhY2hfb25saW5lX25vZGUobmlkKSB7Ci0JCXU2NCBub2RlX2t2YV90YXJnZXQ7Ci0JCXU2NCBub2RlX2t2YV9maW5hbDsKKwkvKgorCSAqIFRoZSBhY3BpL3NyYXQgbm9kZSBpbmZvIGNhbiBzaG93IGhvdC1hZGQgbWVtcm95IHpvbmVzIHdoZXJlCisJICogbWVtb3J5IGNvdWxkIGJlIGFkZGVkIGJ1dCBub3QgY3VycmVudGx5IHByZXNlbnQuCisJICovCisJcHJpbnRrKEtFUk5fREVCVUcgIm5vZGUgJWQgcGZuOiBbJWx4IC0gJWx4XVxuIiwKKwkgICAgICAgbmlkLCBzdGFydF9wZm4sIGVuZF9wZm4pOwogCi0JCS8qCi0JCSAqIFRoZSBhY3BpL3NyYXQgbm9kZSBpbmZvIGNhbiBzaG93IGhvdC1hZGQgbWVtcm95IHpvbmVzCi0JCSAqIHdoZXJlIG1lbW9yeSBjb3VsZCBiZSBhZGRlZCBidXQgbm90IGN1cnJlbnRseSBwcmVzZW50LgotCQkgKi8KLQkJcHJpbnRrKEtFUk5fREVCVUcgIm5vZGUgJWQgcGZuOiBbJWx4IC0gJWx4XVxuIiwKLQkJCW5pZCwgbm9kZV9zdGFydF9wZm5bbmlkXSwgbm9kZV9lbmRfcGZuW25pZF0pOwotCQlpZiAobm9kZV9zdGFydF9wZm5bbmlkXSA+IG1heF9wZm4pCi0JCQljb250aW51ZTsKLQkJaWYgKCFub2RlX2VuZF9wZm5bbmlkXSkKLQkJCWNvbnRpbnVlOwotCQlpZiAobm9kZV9lbmRfcGZuW25pZF0gPiBtYXhfcGZuKQotCQkJbm9kZV9lbmRfcGZuW25pZF0gPSBtYXhfcGZuOworCS8qIGNhbGN1bGF0ZSB0aGUgbmVjZXNzYXJ5IHNwYWNlIGFsaWduZWQgdG8gbGFyZ2UgcGFnZSBzaXplICovCisJc2l6ZSA9IG5vZGVfbWVtbWFwX3NpemVfYnl0ZXMobmlkLCBzdGFydF9wZm4sIGVuZF9wZm4pOworCXNpemUgKz0gQUxJR04oc2l6ZW9mKHBnX2RhdGFfdCksIFBBR0VfU0laRSk7CisJc2l6ZSA9IEFMSUdOKHNpemUsIExBUkdFX1BBR0VfQllURVMpOwogCi0JCS8qIGVuc3VyZSB0aGUgcmVtYXAgaW5jbHVkZXMgc3BhY2UgZm9yIHRoZSBwZ2RhdC4gKi8KLQkJc2l6ZSA9IG5vZGVfcmVtYXBfc2l6ZVtuaWRdICsgc2l6ZW9mKHBnX2RhdGFfdCk7Ci0KLQkJLyogY29udmVydCBzaXplIHRvIGxhcmdlIChwbWQgc2l6ZSkgcGFnZXMsIHJvdW5kaW5nIHVwICovCi0JCXNpemUgPSAoc2l6ZSArIExBUkdFX1BBR0VfQllURVMgLSAxKSAvIExBUkdFX1BBR0VfQllURVM7Ci0JCS8qIG5vdyB0aGUgcm91bmR1cCBpcyBjb3JyZWN0LCBjb252ZXJ0IHRvIFBBR0VfU0laRSBwYWdlcyAqLwotCQlzaXplID0gc2l6ZSAqIFBUUlNfUEVSX1BURTsKLQotCQlub2RlX2t2YV90YXJnZXQgPSByb3VuZF9kb3duKG5vZGVfZW5kX3BmbltuaWRdIC0gc2l6ZSwKLQkJCQkJCSBQVFJTX1BFUl9QVEUpOwotCQlub2RlX2t2YV90YXJnZXQgPDw9IFBBR0VfU0hJRlQ7Ci0JCWRvIHsKLQkJCW5vZGVfa3ZhX2ZpbmFsID0gbWVtYmxvY2tfZmluZF9pbl9yYW5nZShub2RlX2t2YV90YXJnZXQsCi0JCQkJCSgodTY0KW5vZGVfZW5kX3BmbltuaWRdKTw8UEFHRV9TSElGVCwKLQkJCQkJCSgodTY0KXNpemUpPDxQQUdFX1NISUZULAotCQkJCQkJTEFSR0VfUEFHRV9CWVRFUyk7Ci0JCQlub2RlX2t2YV90YXJnZXQgLT0gTEFSR0VfUEFHRV9CWVRFUzsKLQkJfSB3aGlsZSAobm9kZV9rdmFfZmluYWwgPT0gTUVNQkxPQ0tfRVJST1IgJiYKLQkJCSAobm9kZV9rdmFfdGFyZ2V0Pj5QQUdFX1NISUZUKSA+IChub2RlX3N0YXJ0X3BmbltuaWRdKSk7Ci0KLQkJaWYgKG5vZGVfa3ZhX2ZpbmFsID09IE1FTUJMT0NLX0VSUk9SKQotCQkJcGFuaWMoIkNhbiBub3QgZ2V0IGt2YSByYW1cbiIpOwotCi0JCW5vZGVfcmVtYXBfc2l6ZVtuaWRdID0gc2l6ZTsKLQkJbm9kZV9yZW1hcF9vZmZzZXRbbmlkXSA9IHJlc2VydmVfcGFnZXM7Ci0JCXJlc2VydmVfcGFnZXMgKz0gc2l6ZTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlJlc2VydmluZyAlbGQgcGFnZXMgb2YgS1ZBIGZvciBsbWVtX21hcCBvZiIKLQkJCQkgICIgbm9kZSAlZCBhdCAlbGx4XG4iLAotCQkJCXNpemUsIG5pZCwgbm9kZV9rdmFfZmluYWw+PlBBR0VfU0hJRlQpOwotCi0JCS8qCi0JCSAqICBwcmV2ZW50IGt2YSBhZGRyZXNzIGJlbG93IG1heF9sb3dfcGZuIHdhbnQgaXQgb24gc3lzdGVtCi0JCSAqICB3aXRoIGxlc3MgbWVtb3J5IGxhdGVyLgotCQkgKiAgbGF5b3V0IHdpbGwgYmU6IEtWQSBhZGRyZXNzICwgS1ZBIFJBTQotCQkgKgotCQkgKiAgd2UgYXJlIHN1cHBvc2VkIHRvIG9ubHkgcmVjb3JkIHRoZSBvbmUgbGVzcyB0aGVuIG1heF9sb3dfcGZuCi0JCSAqICBidXQgd2UgY291bGQgaGF2ZSBzb21lIGhvbGUgaW4gaGlnaCBtZW1vcnksIGFuZCBpdCB3aWxsIG9ubHkKLQkJICogIGNoZWNrIHBhZ2VfaXNfcmFtKHBmbikgJiYgIXBhZ2VfaXNfcmVzZXJ2ZWRfZWFybHkocGZuKSB0byBkZWNpZGUKLQkJICogIHRvIHVzZSBpdCBhcyBmcmVlLgotCQkgKiAgU28gbWVtYmxvY2tfeDg2X3Jlc2VydmVfcmFuZ2UgaGVyZSwgaG9wZSB3ZSBkb24ndCBydW4gb3V0IG9mIHRoYXQgYXJyYXkKLQkJICovCi0JCW1lbWJsb2NrX3g4Nl9yZXNlcnZlX3JhbmdlKG5vZGVfa3ZhX2ZpbmFsLAotCQkJICAgICAgbm9kZV9rdmFfZmluYWwrKCgodTY0KXNpemUpPDxQQUdFX1NISUZUKSwKLQkJCSAgICAgICJLVkEgUkFNIik7Ci0KLQkJbm9kZV9yZW1hcF9zdGFydF9wZm5bbmlkXSA9IG5vZGVfa3ZhX2ZpbmFsPj5QQUdFX1NISUZUOworCS8qIGFsbG9jYXRlIG5vZGUgbWVtb3J5IGFuZCB0aGUgbG93bWVtIHJlbWFwIGFyZWEgKi8KKwlub2RlX3BhID0gbWVtYmxvY2tfZmluZF9pbl9yYW5nZShzdGFydCwgZW5kLCBzaXplLCBMQVJHRV9QQUdFX0JZVEVTKTsKKwlpZiAobm9kZV9wYSA9PSBNRU1CTE9DS19FUlJPUikgeworCQlwcl93YXJuaW5nKCJyZW1hcF9hbGxvYzogZmFpbGVkIHRvIGFsbG9jYXRlICVsdSBieXRlcyBmb3Igbm9kZSAlZFxuIiwKKwkJCSAgIHNpemUsIG5pZCk7CisJCXJldHVybjsKIAl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiUmVzZXJ2aW5nIHRvdGFsIG9mICVseCBwYWdlcyBmb3IgbnVtYSBLVkEgcmVtYXBcbiIsCi0JCQlyZXNlcnZlX3BhZ2VzKTsKLQlyZXR1cm4gcmVzZXJ2ZV9wYWdlczsKLX0KKwltZW1ibG9ja194ODZfcmVzZXJ2ZV9yYW5nZShub2RlX3BhLCBub2RlX3BhICsgc2l6ZSwgIktWQSBSQU0iKTsKIAotc3RhdGljIHZvaWQgaW5pdF9yZW1hcF9hbGxvY2F0b3IoaW50IG5pZCkKLXsKLQlub2RlX3JlbWFwX3N0YXJ0X3ZhZGRyW25pZF0gPSBwZm5fdG9fa2FkZHIoCi0JCQlrdmFfc3RhcnRfcGZuICsgbm9kZV9yZW1hcF9vZmZzZXRbbmlkXSk7Ci0Jbm9kZV9yZW1hcF9lbmRfdmFkZHJbbmlkXSA9IG5vZGVfcmVtYXBfc3RhcnRfdmFkZHJbbmlkXSArCi0JCShub2RlX3JlbWFwX3NpemVbbmlkXSAqIFBBR0VfU0laRSk7Ci0Jbm9kZV9yZW1hcF9hbGxvY192YWRkcltuaWRdID0gbm9kZV9yZW1hcF9zdGFydF92YWRkcltuaWRdICsKLQkJQUxJR04oc2l6ZW9mKHBnX2RhdGFfdCksIFBBR0VfU0laRSk7CisJcmVtYXBfcGEgPSBtZW1ibG9ja19maW5kX2luX3JhbmdlKG1pbl9sb3dfcGZuIDw8IFBBR0VfU0hJRlQsCisJCQkJCSAgbWF4X2xvd19wZm4gPDwgUEFHRV9TSElGVCwKKwkJCQkJICBzaXplLCBMQVJHRV9QQUdFX0JZVEVTKTsKKwlpZiAocmVtYXBfcGEgPT0gTUVNQkxPQ0tfRVJST1IpIHsKKwkJcHJfd2FybmluZygicmVtYXBfYWxsb2M6IGZhaWxlZCB0byBhbGxvY2F0ZSAlbHUgYnl0ZXMgcmVtYXAgYXJlYSBmb3Igbm9kZSAlZFxuIiwKKwkJCSAgIHNpemUsIG5pZCk7CisJCW1lbWJsb2NrX3g4Nl9mcmVlX3JhbmdlKG5vZGVfcGEsIG5vZGVfcGEgKyBzaXplKTsKKwkJcmV0dXJuOworCX0KKwltZW1ibG9ja194ODZfcmVzZXJ2ZV9yYW5nZShyZW1hcF9wYSwgcmVtYXBfcGEgKyBzaXplLCAiS1ZBIFBHIik7CisJcmVtYXBfdmEgPSBwaHlzX3RvX3ZpcnQocmVtYXBfcGEpOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgIm5vZGUgJWQgd2lsbCByZW1hcCB0byB2YWRkciAlMDhseCAtICUwOGx4XG4iLCBuaWQsCi0JCSh1bG9uZykgbm9kZV9yZW1hcF9zdGFydF92YWRkcltuaWRdLAotCQkodWxvbmcpIG5vZGVfcmVtYXBfZW5kX3ZhZGRyW25pZF0pOworCS8qIHBlcmZvcm0gYWN0dWFsIHJlbWFwICovCisJZm9yIChwZm4gPSAwOyBwZm4gPCBzaXplID4+IFBBR0VfU0hJRlQ7IHBmbiArPSBQVFJTX1BFUl9QVEUpCisJCXNldF9wbWRfcGZuKCh1bnNpZ25lZCBsb25nKXJlbWFwX3ZhICsgKHBmbiA8PCBQQUdFX1NISUZUKSwKKwkJCSAgICAobm9kZV9wYSA+PiBQQUdFX1NISUZUKSArIHBmbiwKKwkJCSAgICBQQUdFX0tFUk5FTF9MQVJHRSk7CisKKwkvKiBpbml0aWFsaXplIHJlbWFwIGFsbG9jYXRvciBwYXJhbWV0ZXJzICovCisJbm9kZV9yZW1hcF9zdGFydF9wZm5bbmlkXSA9IG5vZGVfcGEgPj4gUEFHRV9TSElGVDsKKwlub2RlX3JlbWFwX3N0YXJ0X3ZhZGRyW25pZF0gPSByZW1hcF92YTsKKwlub2RlX3JlbWFwX2VuZF92YWRkcltuaWRdID0gcmVtYXBfdmEgKyBzaXplOworCW5vZGVfcmVtYXBfYWxsb2NfdmFkZHJbbmlkXSA9IHJlbWFwX3ZhOworCisJcHJpbnRrKEtFUk5fREVCVUcgInJlbWFwX2FsbG9jOiBub2RlICVkIFslMDhsbHgtJTA4bGx4KSAtPiBbJXAtJXApXG4iLAorCSAgICAgICBuaWQsIG5vZGVfcGEsIG5vZGVfcGEgKyBzaXplLCByZW1hcF92YSwgcmVtYXBfdmEgKyBzaXplKTsKIH0KIAogdm9pZCBfX2luaXQgaW5pdG1lbV9pbml0KHZvaWQpCiB7Ci0JaW50IG5pZDsKLQlsb25nIGt2YV90YXJnZXRfcGZuOworCXg4Nl9udW1hX2luaXQoKTsKIAotCS8qCi0JICogV2hlbiBtYXBwaW5nIGEgTlVNQSBtYWNoaW5lIHdlIGFsbG9jYXRlIHRoZSBub2RlX21lbV9tYXAgYXJyYXlzCi0JICogZnJvbSBub2RlIGxvY2FsIG1lbW9yeS4gIFRoZXkgYXJlIHRoZW4gbWFwcGVkIGRpcmVjdGx5IGludG8gS1ZBCi0JICogYmV0d2VlbiB6b25lIG5vcm1hbCBhbmQgdm1hbGxvYyBzcGFjZS4gIENhbGN1bGF0ZSB0aGUgc2l6ZSBvZgotCSAqIHRoaXMgc3BhY2UgYW5kIHVzZSBpdCB0byBhZGp1c3QgdGhlIGJvdW5kYXJ5IGJldHdlZW4gWk9ORV9OT1JNQUwKLQkgKiBhbmQgWk9ORV9ISUdITUVNLgotCSAqLwotCi0JZ2V0X21lbWNmZ19udW1hKCk7Ci0JbnVtYV9pbml0X2FycmF5KCk7Ci0KLQlrdmFfcGFnZXMgPSByb3VuZHVwKGNhbGN1bGF0ZV9udW1hX3JlbWFwX3BhZ2VzKCksIFBUUlNfUEVSX1BURSk7Ci0KLQlrdmFfdGFyZ2V0X3BmbiA9IHJvdW5kX2Rvd24obWF4X2xvd19wZm4gLSBrdmFfcGFnZXMsIFBUUlNfUEVSX1BURSk7Ci0JZG8gewotCQlrdmFfc3RhcnRfcGZuID0gbWVtYmxvY2tfZmluZF9pbl9yYW5nZShrdmFfdGFyZ2V0X3Bmbjw8UEFHRV9TSElGVCwKLQkJCQkJbWF4X2xvd19wZm48PFBBR0VfU0hJRlQsCi0JCQkJCWt2YV9wYWdlczw8UEFHRV9TSElGVCwKLQkJCQkJUFRSU19QRVJfUFRFPDxQQUdFX1NISUZUKSA+PiBQQUdFX1NISUZUOwotCQlrdmFfdGFyZ2V0X3BmbiAtPSBQVFJTX1BFUl9QVEU7Ci0JfSB3aGlsZSAoa3ZhX3N0YXJ0X3BmbiA9PSBNRU1CTE9DS19FUlJPUiAmJiBrdmFfdGFyZ2V0X3BmbiA+IG1pbl9sb3dfcGZuKTsKLQotCWlmIChrdmFfc3RhcnRfcGZuID09IE1FTUJMT0NLX0VSUk9SKQotCQlwYW5pYygiQ2FuIG5vdCBnZXQga3ZhIHNwYWNlXG4iKTsKLQotCXByaW50ayhLRVJOX0lORk8gImt2YV9zdGFydF9wZm4gfiAlbHggbWF4X2xvd19wZm4gfiAlbHhcbiIsCi0JCWt2YV9zdGFydF9wZm4sIG1heF9sb3dfcGZuKTsKLQlwcmludGsoS0VSTl9JTkZPICJtYXhfcGZuID0gJWx4XG4iLCBtYXhfcGZuKTsKLQotCS8qIGF2b2lkIGNsYXNoIHdpdGggaW5pdHJkICovCi0JbWVtYmxvY2tfeDg2X3Jlc2VydmVfcmFuZ2Uoa3ZhX3N0YXJ0X3Bmbjw8UEFHRV9TSElGVCwKLQkJICAgICAgKGt2YV9zdGFydF9wZm4gKyBrdmFfcGFnZXMpPDxQQUdFX1NISUZULAotCQkgICAgICJLVkEgUEciKTsKICNpZmRlZiBDT05GSUdfSElHSE1FTQogCWhpZ2hzdGFydF9wZm4gPSBoaWdoZW5kX3BmbiA9IG1heF9wZm47CiAJaWYgKG1heF9wZm4gPiBtYXhfbG93X3BmbikKQEAgLTQwOSw1MSArMjU3LDkgQEAKIAogCXByaW50ayhLRVJOX0RFQlVHICJMb3cgbWVtb3J5IGVuZHMgYXQgdmFkZHIgJTA4bHhcbiIsCiAJCQkodWxvbmcpIHBmbl90b19rYWRkcihtYXhfbG93X3BmbikpOwotCWZvcl9lYWNoX29ubGluZV9ub2RlKG5pZCkgewotCQlpbml0X3JlbWFwX2FsbG9jYXRvcihuaWQpOwotCi0JCWFsbG9jYXRlX3BnZGF0KG5pZCk7Ci0JfQotCXJlbWFwX251bWFfa3ZhKCk7CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiSGlnaCBtZW1vcnkgc3RhcnRzIGF0IHZhZGRyICUwOGx4XG4iLAogCQkJKHVsb25nKSBwZm5fdG9fa2FkZHIoaGlnaHN0YXJ0X3BmbikpOwotCWZvcl9lYWNoX29ubGluZV9ub2RlKG5pZCkKLQkJcHJvcGFnYXRlX2U4MjBfbWFwX25vZGUobmlkKTsKLQotCWZvcl9lYWNoX29ubGluZV9ub2RlKG5pZCkgewotCQltZW1zZXQoTk9ERV9EQVRBKG5pZCksIDAsIHNpemVvZihzdHJ1Y3QgcGdsaXN0X2RhdGEpKTsKLQkJTk9ERV9EQVRBKG5pZCktPm5vZGVfaWQgPSBuaWQ7Ci0JfQogCiAJc2V0dXBfYm9vdG1lbV9hbGxvY2F0b3IoKTsKIH0KLQotI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRwotc3RhdGljIGludCBwYWRkcl90b19uaWQodTY0IGFkZHIpCi17Ci0JaW50IG5pZDsKLQl1bnNpZ25lZCBsb25nIHBmbiA9IFBGTl9ET1dOKGFkZHIpOwotCi0JZm9yX2VhY2hfbm9kZShuaWQpCi0JCWlmIChub2RlX3N0YXJ0X3BmbltuaWRdIDw9IHBmbiAmJgotCQkgICAgcGZuIDwgbm9kZV9lbmRfcGZuW25pZF0pCi0JCQlyZXR1cm4gbmlkOwotCi0JcmV0dXJuIC0xOwotfQotCi0vKgotICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGFzayBub2RlIGlkIEJFRk9SRSBtZW1tYXAgYW5kIG1lbV9zZWN0aW9uJ3MKLSAqIGluaXRpYWxpemF0aW9uIChwZm5fdG9fbmlkKCkgY2FuJ3QgYmUgdXNlZCB5ZXQpLgotICogSWYgX1BYTSBpcyBub3QgZGVmaW5lZCBvbiBBQ1BJJ3MgRFNEVCwgbm9kZSBpZCBtdXN0IGJlIGZvdW5kIGJ5IHRoaXMuCi0gKi8KLWludCBtZW1vcnlfYWRkX3BoeXNhZGRyX3RvX25pZCh1NjQgYWRkcikKLXsKLQlpbnQgbmlkID0gcGFkZHJfdG9fbmlkKGFkZHIpOwotCXJldHVybiAobmlkID49IDApID8gbmlkIDogMDsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwobWVtb3J5X2FkZF9waHlzYWRkcl90b19uaWQpOwotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL251bWFfNjQuYyBiL2FyY2gveDg2L21tL251bWFfNjQuYwppbmRleCBlOGMwMGNjLi5kZDI3ZjQwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9udW1hXzY0LmMKKysrIGIvYXJjaC94ODYvbW0vbnVtYV82NC5jCkBAIC0yLDY0NiArMiwxMyBAQAogICogR2VuZXJpYyBWTSBpbml0aWFsaXphdGlvbiBmb3IgeDg2LTY0IE5VTUEgc2V0dXBzLgogICogQ29weXJpZ2h0IDIwMDIsMjAwMyBBbmRpIEtsZWVuLCBTdVNFIExhYnMuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvbWVtYmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KLSNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9hY3BpLmg+Ci0KLSNpbmNsdWRlIDxhc20vZTgyMC5oPgotI2luY2x1ZGUgPGFzbS9wcm90by5oPgotI2luY2x1ZGUgPGFzbS9kbWEuaD4KLSNpbmNsdWRlIDxhc20vYWNwaS5oPgotI2luY2x1ZGUgPGFzbS9hbWRfbmIuaD4KIAogI2luY2x1ZGUgIm51bWFfaW50ZXJuYWwuaCIKIAotc3RydWN0IHBnbGlzdF9kYXRhICpub2RlX2RhdGFbTUFYX05VTU5PREVTXSBfX3JlYWRfbW9zdGx5OwotRVhQT1JUX1NZTUJPTChub2RlX2RhdGEpOwotCi1ub2RlbWFza190IG51bWFfbm9kZXNfcGFyc2VkIF9faW5pdGRhdGE7Ci0KLXN0cnVjdCBtZW1ub2RlIG1lbW5vZGU7Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgbm9kZW1hcF9hZGRyOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBub2RlbWFwX3NpemU7Ci0KLXN0YXRpYyBzdHJ1Y3QgbnVtYV9tZW1pbmZvIG51bWFfbWVtaW5mbyBfX2luaXRkYXRhOwotCi1zdGF0aWMgaW50IG51bWFfZGlzdGFuY2VfY250Owotc3RhdGljIHU4ICpudW1hX2Rpc3RhbmNlOwotCi0vKgotICogR2l2ZW4gYSBzaGlmdCB2YWx1ZSwgdHJ5IHRvIHBvcHVsYXRlIG1lbW5vZGVtYXBbXQotICogUmV0dXJucyA6Ci0gKiAxIGlmIE9LCi0gKiAwIGlmIG1lbW5vZG1hcFtdIHRvbyBzbWFsbCAob2Ygc2hpZnQgdG9vIHNtYWxsKQotICogLTEgaWYgbm9kZSBvdmVybGFwIG9yIGxvc3QgcmFtIChzaGlmdCB0b28gYmlnKQotICovCi1zdGF0aWMgaW50IF9faW5pdCBwb3B1bGF0ZV9tZW1ub2RlbWFwKGNvbnN0IHN0cnVjdCBudW1hX21lbWluZm8gKm1pLCBpbnQgc2hpZnQpCi17Ci0JdW5zaWduZWQgbG9uZyBhZGRyLCBlbmQ7Ci0JaW50IGksIHJlcyA9IC0xOwotCi0JbWVtc2V0KG1lbW5vZGVtYXAsIDB4ZmYsIHNpemVvZihzMTYpKm1lbW5vZGVtYXBzaXplKTsKLQlmb3IgKGkgPSAwOyBpIDwgbWktPm5yX2Jsa3M7IGkrKykgewotCQlhZGRyID0gbWktPmJsa1tpXS5zdGFydDsKLQkJZW5kID0gbWktPmJsa1tpXS5lbmQ7Ci0JCWlmIChhZGRyID49IGVuZCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoKGVuZCA+PiBzaGlmdCkgPj0gbWVtbm9kZW1hcHNpemUpCi0JCQlyZXR1cm4gMDsKLQkJZG8gewotCQkJaWYgKG1lbW5vZGVtYXBbYWRkciA+PiBzaGlmdF0gIT0gTlVNQV9OT19OT0RFKQotCQkJCXJldHVybiAtMTsKLQkJCW1lbW5vZGVtYXBbYWRkciA+PiBzaGlmdF0gPSBtaS0+YmxrW2ldLm5pZDsKLQkJCWFkZHIgKz0gKDFVTCA8PCBzaGlmdCk7Ci0JCX0gd2hpbGUgKGFkZHIgPCBlbmQpOwotCQlyZXMgPSAxOwotCX0KLQlyZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBhbGxvY2F0ZV9jYWNoZWFsaWduZWRfbWVtbm9kZW1hcCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQotCW1lbW5vZGVtYXAgPSBtZW1ub2RlLmVtYmVkZGVkX21hcDsKLQlpZiAobWVtbm9kZW1hcHNpemUgPD0gQVJSQVlfU0laRShtZW1ub2RlLmVtYmVkZGVkX21hcCkpCi0JCXJldHVybiAwOwotCi0JYWRkciA9IDB4ODAwMDsKLQlub2RlbWFwX3NpemUgPSByb3VuZHVwKHNpemVvZihzMTYpICogbWVtbm9kZW1hcHNpemUsIEwxX0NBQ0hFX0JZVEVTKTsKLQlub2RlbWFwX2FkZHIgPSBtZW1ibG9ja19maW5kX2luX3JhbmdlKGFkZHIsIGdldF9tYXhfbWFwcGVkKCksCi0JCQkJICAgICAgbm9kZW1hcF9zaXplLCBMMV9DQUNIRV9CWVRFUyk7Ci0JaWYgKG5vZGVtYXBfYWRkciA9PSBNRU1CTE9DS19FUlJPUikgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJOVU1BOiBVbmFibGUgdG8gYWxsb2NhdGUgTWVtb3J5IHRvIE5vZGUgaGFzaCBtYXBcbiIpOwotCQlub2RlbWFwX2FkZHIgPSBub2RlbWFwX3NpemUgPSAwOwotCQlyZXR1cm4gLTE7Ci0JfQotCW1lbW5vZGVtYXAgPSBwaHlzX3RvX3ZpcnQobm9kZW1hcF9hZGRyKTsKLQltZW1ibG9ja194ODZfcmVzZXJ2ZV9yYW5nZShub2RlbWFwX2FkZHIsIG5vZGVtYXBfYWRkciArIG5vZGVtYXBfc2l6ZSwgIk1FTU5PREVNQVAiKTsKLQotCXByaW50ayhLRVJOX0RFQlVHICJOVU1BOiBBbGxvY2F0ZWQgbWVtbm9kZW1hcCBmcm9tICVseCAtICVseFxuIiwKLQkgICAgICAgbm9kZW1hcF9hZGRyLCBub2RlbWFwX2FkZHIgKyBub2RlbWFwX3NpemUpOwotCXJldHVybiAwOwotfQotCi0vKgotICogVGhlIExTQiBvZiBhbGwgc3RhcnQgYW5kIGVuZCBhZGRyZXNzZXMgaW4gdGhlIG5vZGUgbWFwIGlzIHRoZSB2YWx1ZSBvZiB0aGUKLSAqIG1heGltdW0gcG9zc2libGUgc2hpZnQuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGV4dHJhY3RfbHNiX2Zyb21fbm9kZXMoY29uc3Qgc3RydWN0IG51bWFfbWVtaW5mbyAqbWkpCi17Ci0JaW50IGksIG5vZGVzX3VzZWQgPSAwOwotCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKLQl1bnNpZ25lZCBsb25nIGJpdGZpZWxkID0gMCwgbWVtdG9wID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBtaS0+bnJfYmxrczsgaSsrKSB7Ci0JCXN0YXJ0ID0gbWktPmJsa1tpXS5zdGFydDsKLQkJZW5kID0gbWktPmJsa1tpXS5lbmQ7Ci0JCWlmIChzdGFydCA+PSBlbmQpCi0JCQljb250aW51ZTsKLQkJYml0ZmllbGQgfD0gc3RhcnQ7Ci0JCW5vZGVzX3VzZWQrKzsKLQkJaWYgKGVuZCA+IG1lbXRvcCkKLQkJCW1lbXRvcCA9IGVuZDsKLQl9Ci0JaWYgKG5vZGVzX3VzZWQgPD0gMSkKLQkJaSA9IDYzOwotCWVsc2UKLQkJaSA9IGZpbmRfZmlyc3RfYml0KCZiaXRmaWVsZCwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKjgpOwotCW1lbW5vZGVtYXBzaXplID0gKG1lbXRvcCA+PiBpKSsxOwotCXJldHVybiBpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBjb21wdXRlX2hhc2hfc2hpZnQoY29uc3Qgc3RydWN0IG51bWFfbWVtaW5mbyAqbWkpCi17Ci0JaW50IHNoaWZ0OwotCi0Jc2hpZnQgPSBleHRyYWN0X2xzYl9mcm9tX25vZGVzKG1pKTsKLQlpZiAoYWxsb2NhdGVfY2FjaGVhbGlnbmVkX21lbW5vZGVtYXAoKSkKLQkJcmV0dXJuIC0xOwotCXByaW50ayhLRVJOX0RFQlVHICJOVU1BOiBVc2luZyAlZCBmb3IgdGhlIGhhc2ggc2hpZnQuXG4iLAotCQlzaGlmdCk7Ci0KLQlpZiAocG9wdWxhdGVfbWVtbm9kZW1hcChtaSwgc2hpZnQpICE9IDEpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiWW91ciBtZW1vcnkgaXMgbm90IGFsaWduZWQgeW91IG5lZWQgdG8gIgotCQkgICAgICAgInJlYnVpbGQgeW91ciBrZXJuZWwgd2l0aCBhIGJpZ2dlciBOT0RFTUFQU0laRSAiCi0JCSAgICAgICAic2hpZnQ9JWRcbiIsIHNoaWZ0KTsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXR1cm4gc2hpZnQ7Ci19Ci0KLWludCBfX21lbWluaXQgIF9fZWFybHlfcGZuX3RvX25pZCh1bnNpZ25lZCBsb25nIHBmbikKLXsKLQlyZXR1cm4gcGh5c190b19uaWQocGZuIDw8IFBBR0VfU0hJRlQpOwotfQotCi1zdGF0aWMgdm9pZCAqIF9faW5pdCBlYXJseV9ub2RlX21lbShpbnQgbm9kZWlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJCSAgICB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCSAgICB1bnNpZ25lZCBsb25nIGFsaWduKQotewotCXVuc2lnbmVkIGxvbmcgbWVtOwotCi0JLyoKLQkgKiBwdXQgaXQgb24gaGlnaCBhcyBwb3NzaWJsZQotCSAqIHNvbWV0aGluZyB3aWxsIGdvIHdpdGggTk9ERV9EQVRBCi0JICovCi0JaWYgKHN0YXJ0IDwgKE1BWF9ETUFfUEZOPDxQQUdFX1NISUZUKSkKLQkJc3RhcnQgPSBNQVhfRE1BX1BGTjw8UEFHRV9TSElGVDsKLQlpZiAoc3RhcnQgPCAoTUFYX0RNQTMyX1BGTjw8UEFHRV9TSElGVCkgJiYKLQkgICAgZW5kID4gKE1BWF9ETUEzMl9QRk48PFBBR0VfU0hJRlQpKQotCQlzdGFydCA9IE1BWF9ETUEzMl9QRk48PFBBR0VfU0hJRlQ7Ci0JbWVtID0gbWVtYmxvY2tfeDg2X2ZpbmRfaW5fcmFuZ2Vfbm9kZShub2RlaWQsIHN0YXJ0LCBlbmQsIHNpemUsIGFsaWduKTsKLQlpZiAobWVtICE9IE1FTUJMT0NLX0VSUk9SKQotCQlyZXR1cm4gX192YShtZW0pOwotCi0JLyogZXh0ZW5kIHRoZSBzZWFyY2ggc2NvcGUgKi8KLQllbmQgPSBtYXhfcGZuX21hcHBlZCA8PCBQQUdFX1NISUZUOwotCXN0YXJ0ID0gTUFYX0RNQV9QRk4gPDwgUEFHRV9TSElGVDsKLQltZW0gPSBtZW1ibG9ja19maW5kX2luX3JhbmdlKHN0YXJ0LCBlbmQsIHNpemUsIGFsaWduKTsKLQlpZiAobWVtICE9IE1FTUJMT0NLX0VSUk9SKQotCQlyZXR1cm4gX192YShtZW0pOwotCi0JcHJpbnRrKEtFUk5fRVJSICJDYW5ub3QgZmluZCAlbHUgYnl0ZXMgaW4gbm9kZSAlZFxuIiwKLQkJICAgICAgIHNpemUsIG5vZGVpZCk7Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGludCBfX2luaXQgbnVtYV9hZGRfbWVtYmxrX3RvKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IGVuZCwKLQkJCQkgICAgIHN0cnVjdCBudW1hX21lbWluZm8gKm1pKQotewotCS8qIGlnbm9yZSB6ZXJvIGxlbmd0aCBibGtzICovCi0JaWYgKHN0YXJ0ID09IGVuZCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiB3aGluZSBhYm91dCBhbmQgaWdub3JlIGludmFsaWQgYmxrcyAqLwotCWlmIChzdGFydCA+IGVuZCB8fCBuaWQgPCAwIHx8IG5pZCA+PSBNQVhfTlVNTk9ERVMpIHsKLQkJcHJfd2FybmluZygiTlVNQTogV2FybmluZzogaW52YWxpZCBtZW1ibGsgbm9kZSAlZCAoJUx4LSVMeClcbiIsCi0JCQkgICBuaWQsIHN0YXJ0LCBlbmQpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAobWktPm5yX2Jsa3MgPj0gTlJfTk9ERV9NRU1CTEtTKSB7Ci0JCXByX2VycigiTlVNQTogdG9vIG1hbnkgbWVtYmxrIHJhbmdlc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW1pLT5ibGtbbWktPm5yX2Jsa3NdLnN0YXJ0ID0gc3RhcnQ7Ci0JbWktPmJsa1ttaS0+bnJfYmxrc10uZW5kID0gZW5kOwotCW1pLT5ibGtbbWktPm5yX2Jsa3NdLm5pZCA9IG5pZDsKLQltaS0+bnJfYmxrcysrOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqIG51bWFfcmVtb3ZlX21lbWJsa19mcm9tIC0gUmVtb3ZlIG9uZSBudW1hX21lbWJsayBmcm9tIGEgbnVtYV9tZW1pbmZvCi0gKiBAaWR4OiBJbmRleCBvZiBtZW1ibGsgdG8gcmVtb3ZlCi0gKiBAbWk6IG51bWFfbWVtaW5mbyB0byByZW1vdmUgbWVtYmxrIGZyb20KLSAqCi0gKiBSZW1vdmUgQGlkeCd0aCBudW1hX21lbWJsayBmcm9tIEBtaSBieSBzaGlmdGluZyBAbWktPmJsa1tdIGFuZAotICogZGVjcmVtZW50aW5nIEBtaS0+bnJfYmxrcy4KLSAqLwotdm9pZCBfX2luaXQgbnVtYV9yZW1vdmVfbWVtYmxrX2Zyb20oaW50IGlkeCwgc3RydWN0IG51bWFfbWVtaW5mbyAqbWkpCi17Ci0JbWktPm5yX2Jsa3MtLTsKLQltZW1tb3ZlKCZtaS0+YmxrW2lkeF0sICZtaS0+YmxrW2lkeCArIDFdLAotCQkobWktPm5yX2Jsa3MgLSBpZHgpICogc2l6ZW9mKG1pLT5ibGtbMF0pKTsKLX0KLQotLyoqCi0gKiBudW1hX2FkZF9tZW1ibGsgLSBBZGQgb25lIG51bWFfbWVtYmxrIHRvIG51bWFfbWVtaW5mbwotICogQG5pZDogTlVNQSBub2RlIElEIG9mIHRoZSBuZXcgbWVtYmxrCi0gKiBAc3RhcnQ6IFN0YXJ0IGFkZHJlc3Mgb2YgdGhlIG5ldyBtZW1ibGsKLSAqIEBlbmQ6IEVuZCBhZGRyZXNzIG9mIHRoZSBuZXcgbWVtYmxrCi0gKgotICogQWRkIGEgbmV3IG1lbWJsayB0byB0aGUgZGVmYXVsdCBudW1hX21lbWluZm8uCi0gKgotICogUkVUVVJOUzoKLSAqIDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuCi0gKi8KLWludCBfX2luaXQgbnVtYV9hZGRfbWVtYmxrKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IGVuZCkKLXsKLQlyZXR1cm4gbnVtYV9hZGRfbWVtYmxrX3RvKG5pZCwgc3RhcnQsIGVuZCwgJm51bWFfbWVtaW5mbyk7Ci19Ci0KLS8qIEluaXRpYWxpemUgYm9vdG1lbSBhbGxvY2F0b3IgZm9yIGEgbm9kZSAqLwotdm9pZCBfX2luaXQKLXNldHVwX25vZGVfYm9vdG1lbShpbnQgbm9kZWlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgbGFzdF9wZm4sIG5vZGVkYXRhX3BoeXM7Ci0JY29uc3QgaW50IHBnZGF0X3NpemUgPSByb3VuZHVwKHNpemVvZihwZ19kYXRhX3QpLCBQQUdFX1NJWkUpOwotCWludCBuaWQ7Ci0KLQlpZiAoIWVuZCkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBEb24ndCBjb25mdXNlIFZNIHdpdGggYSBub2RlIHRoYXQgZG9lc24ndCBoYXZlIHRoZQotCSAqIG1pbmltdW0gYW1vdW50IG9mIG1lbW9yeToKLQkgKi8KLQlpZiAoZW5kICYmIChlbmQgLSBzdGFydCkgPCBOT0RFX01JTl9TSVpFKQotCQlyZXR1cm47Ci0KLQlzdGFydCA9IHJvdW5kdXAoc3RhcnQsIFpPTkVfQUxJR04pOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiSW5pdG1lbSBzZXR1cCBub2RlICVkICUwMTZseC0lMDE2bHhcbiIsIG5vZGVpZCwKLQkgICAgICAgc3RhcnQsIGVuZCk7Ci0KLQlzdGFydF9wZm4gPSBzdGFydCA+PiBQQUdFX1NISUZUOwotCWxhc3RfcGZuID0gZW5kID4+IFBBR0VfU0hJRlQ7Ci0KLQlub2RlX2RhdGFbbm9kZWlkXSA9IGVhcmx5X25vZGVfbWVtKG5vZGVpZCwgc3RhcnQsIGVuZCwgcGdkYXRfc2l6ZSwKLQkJCQkJICAgU01QX0NBQ0hFX0JZVEVTKTsKLQlpZiAobm9kZV9kYXRhW25vZGVpZF0gPT0gTlVMTCkKLQkJcmV0dXJuOwotCW5vZGVkYXRhX3BoeXMgPSBfX3BhKG5vZGVfZGF0YVtub2RlaWRdKTsKLQltZW1ibG9ja194ODZfcmVzZXJ2ZV9yYW5nZShub2RlZGF0YV9waHlzLCBub2RlZGF0YV9waHlzICsgcGdkYXRfc2l6ZSwgIk5PREVfREFUQSIpOwotCXByaW50ayhLRVJOX0lORk8gIiAgTk9ERV9EQVRBIFslMDE2bHggLSAlMDE2bHhdXG4iLCBub2RlZGF0YV9waHlzLAotCQlub2RlZGF0YV9waHlzICsgcGdkYXRfc2l6ZSAtIDEpOwotCW5pZCA9IHBoeXNfdG9fbmlkKG5vZGVkYXRhX3BoeXMpOwotCWlmIChuaWQgIT0gbm9kZWlkKQotCQlwcmludGsoS0VSTl9JTkZPICIgICAgTk9ERV9EQVRBKCVkKSBvbiBub2RlICVkXG4iLCBub2RlaWQsIG5pZCk7Ci0KLQltZW1zZXQoTk9ERV9EQVRBKG5vZGVpZCksIDAsIHNpemVvZihwZ19kYXRhX3QpKTsKLQlOT0RFX0RBVEEobm9kZWlkKS0+bm9kZV9pZCA9IG5vZGVpZDsKLQlOT0RFX0RBVEEobm9kZWlkKS0+bm9kZV9zdGFydF9wZm4gPSBzdGFydF9wZm47Ci0JTk9ERV9EQVRBKG5vZGVpZCktPm5vZGVfc3Bhbm5lZF9wYWdlcyA9IGxhc3RfcGZuIC0gc3RhcnRfcGZuOwotCi0Jbm9kZV9zZXRfb25saW5lKG5vZGVpZCk7Ci19Ci0KLS8qKgotICogbnVtYV9jbGVhbnVwX21lbWluZm8gLSBDbGVhbnVwIGEgbnVtYV9tZW1pbmZvCi0gKiBAbWk6IG51bWFfbWVtaW5mbyB0byBjbGVhbiB1cAotICoKLSAqIFNhbml0aXplIEBtaSBieSBtZXJnaW5nIGFuZCByZW1vdmluZyB1bm5jZXNzYXJ5IG1lbWJsa3MuICBBbHNvIGNoZWNrIGZvcgotICogY29uZmxpY3RzIGFuZCBjbGVhciB1bnVzZWQgbWVtYmxrcy4KLSAqCi0gKiBSRVRVUk5TOgotICogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS4KLSAqLwotaW50IF9faW5pdCBudW1hX2NsZWFudXBfbWVtaW5mbyhzdHJ1Y3QgbnVtYV9tZW1pbmZvICptaSkKLXsKLQljb25zdCB1NjQgbG93ID0gMDsKLQljb25zdCB1NjQgaGlnaCA9ICh1NjQpbWF4X3BmbiA8PCBQQUdFX1NISUZUOwotCWludCBpLCBqLCBrOwotCi0JZm9yIChpID0gMDsgaSA8IG1pLT5ucl9ibGtzOyBpKyspIHsKLQkJc3RydWN0IG51bWFfbWVtYmxrICpiaSA9ICZtaS0+YmxrW2ldOwotCi0JCS8qIG1ha2Ugc3VyZSBhbGwgYmxvY2tzIGFyZSBpbnNpZGUgdGhlIGxpbWl0cyAqLwotCQliaS0+c3RhcnQgPSBtYXgoYmktPnN0YXJ0LCBsb3cpOwotCQliaS0+ZW5kID0gbWluKGJpLT5lbmQsIGhpZ2gpOwotCi0JCS8qIGFuZCB0aGVyZSdzIG5vIGVtcHR5IGJsb2NrICovCi0JCWlmIChiaS0+c3RhcnQgPT0gYmktPmVuZCkgewotCQkJbnVtYV9yZW1vdmVfbWVtYmxrX2Zyb20oaS0tLCBtaSk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWZvciAoaiA9IGkgKyAxOyBqIDwgbWktPm5yX2Jsa3M7IGorKykgewotCQkJc3RydWN0IG51bWFfbWVtYmxrICpiaiA9ICZtaS0+YmxrW2pdOwotCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOwotCi0JCQkvKgotCQkJICogU2VlIHdoZXRoZXIgdGhlcmUgYXJlIG92ZXJsYXBwaW5nIGJsb2Nrcy4gIFdoaW5lCi0JCQkgKiBhYm91dCBidXQgYWxsb3cgb3ZlcmxhcHMgb2YgdGhlIHNhbWUgbmlkLiAgVGhleQotCQkJICogd2lsbCBiZSBtZXJnZWQgYmVsb3cuCi0JCQkgKi8KLQkJCWlmIChiaS0+ZW5kID4gYmotPnN0YXJ0ICYmIGJpLT5zdGFydCA8IGJqLT5lbmQpIHsKLQkJCQlpZiAoYmktPm5pZCAhPSBiai0+bmlkKSB7Ci0JCQkJCXByX2VycigiTlVNQTogbm9kZSAlZCAoJUx4LSVMeCkgb3ZlcmxhcHMgd2l0aCBub2RlICVkICglTHgtJUx4KVxuIiwKLQkJCQkJICAgICAgIGJpLT5uaWQsIGJpLT5zdGFydCwgYmktPmVuZCwKLQkJCQkJICAgICAgIGJqLT5uaWQsIGJqLT5zdGFydCwgYmotPmVuZCk7Ci0JCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCX0KLQkJCQlwcl93YXJuaW5nKCJOVU1BOiBXYXJuaW5nOiBub2RlICVkICglTHgtJUx4KSBvdmVybGFwcyB3aXRoIGl0c2VsZiAoJUx4LSVMeClcbiIsCi0JCQkJCSAgIGJpLT5uaWQsIGJpLT5zdGFydCwgYmktPmVuZCwKLQkJCQkJICAgYmotPnN0YXJ0LCBiai0+ZW5kKTsKLQkJCX0KLQotCQkJLyoKLQkJCSAqIEpvaW4gdG9nZXRoZXIgYmxvY2tzIG9uIHRoZSBzYW1lIG5vZGUsIGhvbGVzCi0JCQkgKiBiZXR3ZWVuIHdoaWNoIGRvbid0IG92ZXJsYXAgd2l0aCBtZW1vcnkgb24gb3RoZXIKLQkJCSAqIG5vZGVzLgotCQkJICovCi0JCQlpZiAoYmktPm5pZCAhPSBiai0+bmlkKQotCQkJCWNvbnRpbnVlOwotCQkJc3RhcnQgPSBtYXgobWluKGJpLT5zdGFydCwgYmotPnN0YXJ0KSwgbG93KTsKLQkJCWVuZCA9IG1pbihtYXgoYmktPmVuZCwgYmotPmVuZCksIGhpZ2gpOwotCQkJZm9yIChrID0gMDsgayA8IG1pLT5ucl9ibGtzOyBrKyspIHsKLQkJCQlzdHJ1Y3QgbnVtYV9tZW1ibGsgKmJrID0gJm1pLT5ibGtba107Ci0KLQkJCQlpZiAoYmktPm5pZCA9PSBiay0+bmlkKQotCQkJCQljb250aW51ZTsKLQkJCQlpZiAoc3RhcnQgPCBiay0+ZW5kICYmIGVuZCA+IGJrLT5zdGFydCkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAoayA8IG1pLT5ucl9ibGtzKQotCQkJCWNvbnRpbnVlOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiTlVNQTogTm9kZSAlZCBbJUx4LCVMeCkgKyBbJUx4LCVMeCkgLT4gWyVseCwlbHgpXG4iLAotCQkJICAgICAgIGJpLT5uaWQsIGJpLT5zdGFydCwgYmktPmVuZCwgYmotPnN0YXJ0LCBiai0+ZW5kLAotCQkJICAgICAgIHN0YXJ0LCBlbmQpOwotCQkJYmktPnN0YXJ0ID0gc3RhcnQ7Ci0JCQliaS0+ZW5kID0gZW5kOwotCQkJbnVtYV9yZW1vdmVfbWVtYmxrX2Zyb20oai0tLCBtaSk7Ci0JCX0KLQl9Ci0KLQlmb3IgKGkgPSBtaS0+bnJfYmxrczsgaSA8IEFSUkFZX1NJWkUobWktPmJsayk7IGkrKykgewotCQltaS0+YmxrW2ldLnN0YXJ0ID0gbWktPmJsa1tpXS5lbmQgPSAwOwotCQltaS0+YmxrW2ldLm5pZCA9IE5VTUFfTk9fTk9ERTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFNldCBub2Rlcywgd2hpY2ggaGF2ZSBtZW1vcnkgaW4gQG1pLCBpbiAqQG5vZGVtYXNrLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgbnVtYV9ub2RlbWFza19mcm9tX21lbWluZm8obm9kZW1hc2tfdCAqbm9kZW1hc2ssCi0JCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBudW1hX21lbWluZm8gKm1pKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWktPmJsayk7IGkrKykKLQkJaWYgKG1pLT5ibGtbaV0uc3RhcnQgIT0gbWktPmJsa1tpXS5lbmQgJiYKLQkJICAgIG1pLT5ibGtbaV0ubmlkICE9IE5VTUFfTk9fTk9ERSkKLQkJCW5vZGVfc2V0KG1pLT5ibGtbaV0ubmlkLCAqbm9kZW1hc2spOwotfQotCi0vKioKLSAqIG51bWFfcmVzZXRfZGlzdGFuY2UgLSBSZXNldCBOVU1BIGRpc3RhbmNlIHRhYmxlCi0gKgotICogVGhlIGN1cnJlbnQgdGFibGUgaXMgZnJlZWQuICBUaGUgbmV4dCBudW1hX3NldF9kaXN0YW5jZSgpIGNhbGwgd2lsbAotICogY3JlYXRlIGEgbmV3IG9uZS4KLSAqLwotdm9pZCBfX2luaXQgbnVtYV9yZXNldF9kaXN0YW5jZSh2b2lkKQotewotCXNpemVfdCBzaXplID0gbnVtYV9kaXN0YW5jZV9jbnQgKiBudW1hX2Rpc3RhbmNlX2NudCAqIHNpemVvZihudW1hX2Rpc3RhbmNlWzBdKTsKLQotCS8qIG51bWFfZGlzdGFuY2UgY291bGQgYmUgMUxVIG1hcmtpbmcgYWxsb2NhdGlvbiBmYWlsdXJlLCB0ZXN0IGNudCAqLwotCWlmIChudW1hX2Rpc3RhbmNlX2NudCkKLQkJbWVtYmxvY2tfeDg2X2ZyZWVfcmFuZ2UoX19wYShudW1hX2Rpc3RhbmNlKSwKLQkJCQkJX19wYShudW1hX2Rpc3RhbmNlKSArIHNpemUpOwotCW51bWFfZGlzdGFuY2VfY250ID0gMDsKLQludW1hX2Rpc3RhbmNlID0gTlVMTDsJLyogZW5hYmxlIHRhYmxlIGNyZWF0aW9uICovCi19Ci0KLXN0YXRpYyBpbnQgX19pbml0IG51bWFfYWxsb2NfZGlzdGFuY2Uodm9pZCkKLXsKLQlub2RlbWFza190IG5vZGVzX3BhcnNlZDsKLQlzaXplX3Qgc2l6ZTsKLQlpbnQgaSwgaiwgY250ID0gMDsKLQl1NjQgcGh5czsKLQotCS8qIHNpemUgdGhlIG5ldyB0YWJsZSBhbmQgYWxsb2NhdGUgaXQgKi8KLQlub2Rlc19wYXJzZWQgPSBudW1hX25vZGVzX3BhcnNlZDsKLQludW1hX25vZGVtYXNrX2Zyb21fbWVtaW5mbygmbm9kZXNfcGFyc2VkLCAmbnVtYV9tZW1pbmZvKTsKLQotCWZvcl9lYWNoX25vZGVfbWFzayhpLCBub2Rlc19wYXJzZWQpCi0JCWNudCA9IGk7Ci0JY250Kys7Ci0Jc2l6ZSA9IGNudCAqIGNudCAqIHNpemVvZihudW1hX2Rpc3RhbmNlWzBdKTsKLQotCXBoeXMgPSBtZW1ibG9ja19maW5kX2luX3JhbmdlKDAsICh1NjQpbWF4X3Bmbl9tYXBwZWQgPDwgUEFHRV9TSElGVCwKLQkJCQkgICAgICBzaXplLCBQQUdFX1NJWkUpOwotCWlmIChwaHlzID09IE1FTUJMT0NLX0VSUk9SKSB7Ci0JCXByX3dhcm5pbmcoIk5VTUE6IFdhcm5pbmc6IGNhbid0IGFsbG9jYXRlIGRpc3RhbmNlIHRhYmxlIVxuIik7Ci0JCS8qIGRvbid0IHJldHJ5IHVudGlsIGV4cGxpY2l0bHkgcmVzZXQgKi8KLQkJbnVtYV9kaXN0YW5jZSA9ICh2b2lkICopMUxVOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JbWVtYmxvY2tfeDg2X3Jlc2VydmVfcmFuZ2UocGh5cywgcGh5cyArIHNpemUsICJOVU1BIERJU1QiKTsKLQotCW51bWFfZGlzdGFuY2UgPSBfX3ZhKHBoeXMpOwotCW51bWFfZGlzdGFuY2VfY250ID0gY250OwotCi0JLyogZmlsbCB3aXRoIHRoZSBkZWZhdWx0IGRpc3RhbmNlcyAqLwotCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykKLQkJZm9yIChqID0gMDsgaiA8IGNudDsgaisrKQotCQkJbnVtYV9kaXN0YW5jZVtpICogY250ICsgal0gPSBpID09IGogPwotCQkJCUxPQ0FMX0RJU1RBTkNFIDogUkVNT1RFX0RJU1RBTkNFOwotCXByaW50ayhLRVJOX0RFQlVHICJOVU1BOiBJbml0aWFsaXplZCBkaXN0YW5jZSB0YWJsZSwgY250PSVkXG4iLCBjbnQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogbnVtYV9zZXRfZGlzdGFuY2UgLSBTZXQgTlVNQSBkaXN0YW5jZSBmcm9tIG9uZSBOVU1BIHRvIGFub3RoZXIKLSAqIEBmcm9tOiB0aGUgJ2Zyb20nIG5vZGUgdG8gc2V0IGRpc3RhbmNlCi0gKiBAdG86IHRoZSAndG8nICBub2RlIHRvIHNldCBkaXN0YW5jZQotICogQGRpc3RhbmNlOiBOVU1BIGRpc3RhbmNlCi0gKgotICogU2V0IHRoZSBkaXN0YW5jZSBmcm9tIG5vZGUgQGZyb20gdG8gQHRvIHRvIEBkaXN0YW5jZS4gIElmIGRpc3RhbmNlIHRhYmxlCi0gKiBkb2Vzbid0IGV4aXN0LCBvbmUgd2hpY2ggaXMgbGFyZ2UgZW5vdWdoIHRvIGFjY29tbW9kYXRlIGFsbCB0aGUgY3VycmVudGx5Ci0gKiBrbm93biBub2RlcyB3aWxsIGJlIGNyZWF0ZWQuCi0gKgotICogSWYgc3VjaCB0YWJsZSBjYW5ub3QgYmUgYWxsb2NhdGVkLCBhIHdhcm5pbmcgaXMgcHJpbnRlZCBhbmQgZnVydGhlcgotICogY2FsbHMgYXJlIGlnbm9yZWQgdW50aWwgdGhlIGRpc3RhbmNlIHRhYmxlIGlzIHJlc2V0IHdpdGgKLSAqIG51bWFfcmVzZXRfZGlzdGFuY2UoKS4KLSAqCi0gKiBJZiBAZnJvbSBvciBAdG8gaXMgaGlnaGVyIHRoYW4gdGhlIGhpZ2hlc3Qga25vd24gbm9kZSBhdCB0aGUgdGltZSBvZgotICogdGFibGUgY3JlYXRpb24gb3IgQGRpc3RhbmNlIGRvZXNuJ3QgbWFrZSBzZW5zZSwgdGhlIGNhbGwgaXMgaWdub3JlZC4KLSAqIFRoaXMgaXMgdG8gYWxsb3cgc2ltcGxpZmljYXRpb24gb2Ygc3BlY2lmaWMgTlVNQSBjb25maWcgaW1wbGVtZW50YXRpb25zLgotICovCi12b2lkIF9faW5pdCBudW1hX3NldF9kaXN0YW5jZShpbnQgZnJvbSwgaW50IHRvLCBpbnQgZGlzdGFuY2UpCi17Ci0JaWYgKCFudW1hX2Rpc3RhbmNlICYmIG51bWFfYWxsb2NfZGlzdGFuY2UoKSA8IDApCi0JCXJldHVybjsKLQotCWlmIChmcm9tID49IG51bWFfZGlzdGFuY2VfY250IHx8IHRvID49IG51bWFfZGlzdGFuY2VfY250KSB7Ci0JCXByaW50a19vbmNlKEtFUk5fREVCVUcgIk5VTUE6IERlYnVnOiBkaXN0YW5jZSBvdXQgb2YgYm91bmQsIGZyb209JWQgdG89JWQgZGlzdGFuY2U9JWRcbiIsCi0JCQkgICAgZnJvbSwgdG8sIGRpc3RhbmNlKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICgodTgpZGlzdGFuY2UgIT0gZGlzdGFuY2UgfHwKLQkgICAgKGZyb20gPT0gdG8gJiYgZGlzdGFuY2UgIT0gTE9DQUxfRElTVEFOQ0UpKSB7Ci0JCXByX3dhcm5fb25jZSgiTlVNQTogV2FybmluZzogaW52YWxpZCBkaXN0YW5jZSBwYXJhbWV0ZXIsIGZyb209JWQgdG89JWQgZGlzdGFuY2U9JWRcbiIsCi0JCQkgICAgIGZyb20sIHRvLCBkaXN0YW5jZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQludW1hX2Rpc3RhbmNlW2Zyb20gKiBudW1hX2Rpc3RhbmNlX2NudCArIHRvXSA9IGRpc3RhbmNlOwotfQotCi1pbnQgX19ub2RlX2Rpc3RhbmNlKGludCBmcm9tLCBpbnQgdG8pCi17Ci0JaWYgKGZyb20gPj0gbnVtYV9kaXN0YW5jZV9jbnQgfHwgdG8gPj0gbnVtYV9kaXN0YW5jZV9jbnQpCi0JCXJldHVybiBmcm9tID09IHRvID8gTE9DQUxfRElTVEFOQ0UgOiBSRU1PVEVfRElTVEFOQ0U7Ci0JcmV0dXJuIG51bWFfZGlzdGFuY2VbZnJvbSAqIG51bWFfZGlzdGFuY2VfY250ICsgdG9dOwotfQotRVhQT1JUX1NZTUJPTChfX25vZGVfZGlzdGFuY2UpOwotCi0vKgotICogU2FuaXR5IGNoZWNrIHRvIGNhdGNoIG1vcmUgYmFkIE5VTUEgY29uZmlndXJhdGlvbnMgKHRoZXkgYXJlIGFtYXppbmdseQotICogY29tbW9uKS4gIE1ha2Ugc3VyZSB0aGUgbm9kZXMgY292ZXIgYWxsIG1lbW9yeS4KLSAqLwotc3RhdGljIGJvb2wgX19pbml0IG51bWFfbWVtaW5mb19jb3Zlcl9tZW1vcnkoY29uc3Qgc3RydWN0IG51bWFfbWVtaW5mbyAqbWkpCi17Ci0JdW5zaWduZWQgbG9uZyBudW1hcmFtLCBlODIwcmFtOwotCWludCBpOwotCi0JbnVtYXJhbSA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IG1pLT5ucl9ibGtzOyBpKyspIHsKLQkJdW5zaWduZWQgbG9uZyBzID0gbWktPmJsa1tpXS5zdGFydCA+PiBQQUdFX1NISUZUOwotCQl1bnNpZ25lZCBsb25nIGUgPSBtaS0+YmxrW2ldLmVuZCA+PiBQQUdFX1NISUZUOwotCQludW1hcmFtICs9IGUgLSBzOwotCQludW1hcmFtIC09IF9fYWJzZW50X3BhZ2VzX2luX3JhbmdlKG1pLT5ibGtbaV0ubmlkLCBzLCBlKTsKLQkJaWYgKChsb25nKW51bWFyYW0gPCAwKQotCQkJbnVtYXJhbSA9IDA7Ci0JfQotCi0JZTgyMHJhbSA9IG1heF9wZm4gLSAobWVtYmxvY2tfeDg2X2hvbGVfc2l6ZSgwLAotCQkJCQltYXhfcGZuIDw8IFBBR0VfU0hJRlQpID4+IFBBR0VfU0hJRlQpOwotCS8qIFdlIHNlZW0gdG8gbG9zZSAzIHBhZ2VzIHNvbWV3aGVyZS4gQWxsb3cgMU0gb2Ygc2xhY2suICovCi0JaWYgKChsb25nKShlODIwcmFtIC0gbnVtYXJhbSkgPj0gKDEgPDwgKDIwIC0gUEFHRV9TSElGVCkpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiTlVNQTogbm9kZXMgb25seSBjb3ZlciAlbHVNQiBvZiB5b3VyICVsdU1CIGU4MjAgUkFNLiBOb3QgdXNlZC5cbiIsCi0JCSAgICAgICAobnVtYXJhbSA8PCBQQUdFX1NISUZUKSA+PiAyMCwKLQkJICAgICAgIChlODIwcmFtIDw8IFBBR0VfU0hJRlQpID4+IDIwKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgbnVtYV9yZWdpc3Rlcl9tZW1ibGtzKHN0cnVjdCBudW1hX21lbWluZm8gKm1pKQotewotCWludCBpLCBuaWQ7Ci0KLQkvKiBBY2NvdW50IGZvciBub2RlcyB3aXRoIGNwdXMgYW5kIG5vIG1lbW9yeSAqLwotCW5vZGVfcG9zc2libGVfbWFwID0gbnVtYV9ub2Rlc19wYXJzZWQ7Ci0JbnVtYV9ub2RlbWFza19mcm9tX21lbWluZm8oJm5vZGVfcG9zc2libGVfbWFwLCBtaSk7Ci0JaWYgKFdBUk5fT04obm9kZXNfZW1wdHkobm9kZV9wb3NzaWJsZV9tYXApKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltZW1ub2RlX3NoaWZ0ID0gY29tcHV0ZV9oYXNoX3NoaWZ0KG1pKTsKLQlpZiAobWVtbm9kZV9zaGlmdCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJOVU1BOiBObyBOVU1BIG5vZGUgaGFzaCBmdW5jdGlvbiBmb3VuZC4gQ29udGFjdCBtYWludGFpbmVyXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IG1pLT5ucl9ibGtzOyBpKyspCi0JCW1lbWJsb2NrX3g4Nl9yZWdpc3Rlcl9hY3RpdmVfcmVnaW9ucyhtaS0+YmxrW2ldLm5pZCwKLQkJCQkJbWktPmJsa1tpXS5zdGFydCA+PiBQQUdFX1NISUZULAotCQkJCQltaS0+YmxrW2ldLmVuZCA+PiBQQUdFX1NISUZUKTsKLQotCS8qIGZvciBvdXQgb2Ygb3JkZXIgZW50cmllcyAqLwotCXNvcnRfbm9kZV9tYXAoKTsKLQlpZiAoIW51bWFfbWVtaW5mb19jb3Zlcl9tZW1vcnkobWkpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIEZpbmFsbHkgcmVnaXN0ZXIgbm9kZXMuICovCi0JZm9yX2VhY2hfbm9kZV9tYXNrKG5pZCwgbm9kZV9wb3NzaWJsZV9tYXApIHsKLQkJdTY0IHN0YXJ0ID0gKHU2NCltYXhfcGZuIDw8IFBBR0VfU0hJRlQ7Ci0JCXU2NCBlbmQgPSAwOwotCi0JCWZvciAoaSA9IDA7IGkgPCBtaS0+bnJfYmxrczsgaSsrKSB7Ci0JCQlpZiAobmlkICE9IG1pLT5ibGtbaV0ubmlkKQotCQkJCWNvbnRpbnVlOwotCQkJc3RhcnQgPSBtaW4obWktPmJsa1tpXS5zdGFydCwgc3RhcnQpOwotCQkJZW5kID0gbWF4KG1pLT5ibGtbaV0uZW5kLCBlbmQpOwotCQl9Ci0KLQkJaWYgKHN0YXJ0IDwgZW5kKQotCQkJc2V0dXBfbm9kZV9ib290bWVtKG5pZCwgc3RhcnQsIGVuZCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZHVtbXlfbnVtbWFfaW5pdCAtIEZhbGxiYWNrIGR1bW15IE5VTUEgaW5pdAotICoKLSAqIFVzZWQgaWYgdGhlcmUncyBubyB1bmRlcmx5aW5nIE5VTUEgYXJjaGl0ZWN0dXJlLCBOVU1BIGluaXRpYWxpemF0aW9uCi0gKiBmYWlscywgb3IgTlVNQSBpcyBkaXNhYmxlZCBvbiB0aGUgY29tbWFuZCBsaW5lLgotICoKLSAqIE11c3Qgb25saW5lIGF0IGxlYXN0IG9uZSBub2RlIGFuZCBhZGQgbWVtb3J5IGJsb2NrcyB0aGF0IGNvdmVyIGFsbAotICogYWxsb3dlZCBtZW1vcnkuICBUaGlzIGZ1bmN0aW9uIG11c3Qgbm90IGZhaWwuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGR1bW15X251bWFfaW5pdCh2b2lkKQotewotCXByaW50ayhLRVJOX0lORk8gIiVzXG4iLAotCSAgICAgICBudW1hX29mZiA/ICJOVU1BIHR1cm5lZCBvZmYiIDogIk5vIE5VTUEgY29uZmlndXJhdGlvbiBmb3VuZCIpOwotCXByaW50ayhLRVJOX0lORk8gIkZha2luZyBhIG5vZGUgYXQgJTAxNmx4LSUwMTZseFxuIiwKLQkgICAgICAgMExVLCBtYXhfcGZuIDw8IFBBR0VfU0hJRlQpOwotCi0Jbm9kZV9zZXQoMCwgbnVtYV9ub2Rlc19wYXJzZWQpOwotCW51bWFfYWRkX21lbWJsaygwLCAwLCAodTY0KW1heF9wZm4gPDwgUEFHRV9TSElGVCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX2luaXQgbnVtYV9pbml0KGludCAoKmluaXRfZnVuYykodm9pZCkpCi17Ci0JaW50IGk7Ci0JaW50IHJldDsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfTE9DQUxfQVBJQzsgaSsrKQotCQlzZXRfYXBpY2lkX3RvX25vZGUoaSwgTlVNQV9OT19OT0RFKTsKLQotCW5vZGVzX2NsZWFyKG51bWFfbm9kZXNfcGFyc2VkKTsKLQlub2Rlc19jbGVhcihub2RlX3Bvc3NpYmxlX21hcCk7Ci0Jbm9kZXNfY2xlYXIobm9kZV9vbmxpbmVfbWFwKTsKLQltZW1zZXQoJm51bWFfbWVtaW5mbywgMCwgc2l6ZW9mKG51bWFfbWVtaW5mbykpOwotCXJlbW92ZV9hbGxfYWN0aXZlX3JhbmdlcygpOwotCW51bWFfcmVzZXRfZGlzdGFuY2UoKTsKLQotCXJldCA9IGluaXRfZnVuYygpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCXJldCA9IG51bWFfY2xlYW51cF9tZW1pbmZvKCZudW1hX21lbWluZm8pOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JbnVtYV9lbXVsYXRpb24oJm51bWFfbWVtaW5mbywgbnVtYV9kaXN0YW5jZV9jbnQpOwotCi0JcmV0ID0gbnVtYV9yZWdpc3Rlcl9tZW1ibGtzKCZudW1hX21lbWluZm8pOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JZm9yIChpID0gMDsgaSA8IG5yX2NwdV9pZHM7IGkrKykgewotCQlpbnQgbmlkID0gZWFybHlfY3B1X3RvX25vZGUoaSk7Ci0KLQkJaWYgKG5pZCA9PSBOVU1BX05PX05PREUpCi0JCQljb250aW51ZTsKLQkJaWYgKCFub2RlX29ubGluZShuaWQpKQotCQkJbnVtYV9jbGVhcl9ub2RlKGkpOwotCX0KLQludW1hX2luaXRfYXJyYXkoKTsKLQlyZXR1cm4gMDsKLX0KLQogdm9pZCBfX2luaXQgaW5pdG1lbV9pbml0KHZvaWQpCiB7Ci0JaW50IHJldDsKLQotCWlmICghbnVtYV9vZmYpIHsKLSNpZmRlZiBDT05GSUdfQUNQSV9OVU1BCi0JCXJldCA9IG51bWFfaW5pdCh4ODZfYWNwaV9udW1hX2luaXQpOwotCQlpZiAoIXJldCkKLQkJCXJldHVybjsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19BTURfTlVNQQotCQlyZXQgPSBudW1hX2luaXQoYW1kX251bWFfaW5pdCk7Ci0JCWlmICghcmV0KQotCQkJcmV0dXJuOwotI2VuZGlmCi0JfQotCi0JbnVtYV9pbml0KGR1bW15X251bWFfaW5pdCk7CisJeDg2X251bWFfaW5pdCgpOwogfQogCiB1bnNpZ25lZCBsb25nIF9faW5pdCBudW1hX2ZyZWVfYWxsX2Jvb3RtZW0odm9pZCkKQEAgLTY1NiwxMiArMjMsMyBAQAogCiAJcmV0dXJuIHBhZ2VzOwogfQotCi1pbnQgX19jcHVpbml0IG51bWFfY3B1X25vZGUoaW50IGNwdSkKLXsKLQlpbnQgYXBpY2lkID0gZWFybHlfcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KTsKLQotCWlmIChhcGljaWQgIT0gQkFEX0FQSUNJRCkKLQkJcmV0dXJuIF9fYXBpY2lkX3RvX25vZGVbYXBpY2lkXTsKLQlyZXR1cm4gTlVNQV9OT19OT0RFOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbnVtYV9lbXVsYXRpb24uYyBiL2FyY2gveDg2L21tL251bWFfZW11bGF0aW9uLmMKaW5kZXggYWQwOTFlNC4uZDBlZDA4NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vbnVtYV9lbXVsYXRpb24uYworKysgYi9hcmNoL3g4Ni9tbS9udW1hX2VtdWxhdGlvbi5jCkBAIC01LDYgKzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvdG9wb2xvZ3kuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAKICNpbmNsdWRlICJudW1hX2ludGVybmFsLmgiCkBAIC04NCw3ICs4NSwxMyBAQAogCQlucl9ub2RlcyA9IE1BWF9OVU1OT0RFUzsKIAl9CiAKLQlzaXplID0gKG1heF9hZGRyIC0gYWRkciAtIG1lbWJsb2NrX3g4Nl9ob2xlX3NpemUoYWRkciwgbWF4X2FkZHIpKSAvIG5yX25vZGVzOworCS8qCisJICogQ2FsY3VsYXRlIHRhcmdldCBub2RlIHNpemUuICB4ODZfMzIgZnJlYWtzIG9uIF9fdWRpdmRpMygpIHNvIGRvCisJICogdGhlIGRpdmlzaW9uIGluIHVsb25nIG51bWJlciBvZiBwYWdlcyBhbmQgY29udmVydCBiYWNrLgorCSAqLworCXNpemUgPSBtYXhfYWRkciAtIGFkZHIgLSBtZW1ibG9ja194ODZfaG9sZV9zaXplKGFkZHIsIG1heF9hZGRyKTsKKwlzaXplID0gUEZOX1BIWVMoKHVuc2lnbmVkIGxvbmcpKHNpemUgPj4gUEFHRV9TSElGVCkgLyBucl9ub2Rlcyk7CisKIAkvKgogCSAqIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGJpZyBub2RlcyB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQgYXMgYSByZXN1bHQKIAkgKiBvZiBjb25zb2xpZGF0aW5nIHRoZSByZW1haW5kZXIuCkBAIC0yMjYsNyArMjMzLDcgQEAKIAkgKi8KIAl3aGlsZSAobm9kZXNfd2VpZ2h0KHBoeXNub2RlX21hc2spKSB7CiAJCWZvcl9lYWNoX25vZGVfbWFzayhpLCBwaHlzbm9kZV9tYXNrKSB7Ci0JCQl1NjQgZG1hMzJfZW5kID0gTUFYX0RNQTMyX1BGTiA8PCBQQUdFX1NISUZUOworCQkJdTY0IGRtYTMyX2VuZCA9IFBGTl9QSFlTKE1BWF9ETUEzMl9QRk4pOwogCQkJdTY0IHN0YXJ0LCBsaW1pdCwgZW5kOwogCQkJaW50IHBoeXNfYmxrOwogCkBAIC0yOTgsNyArMzA1LDcgQEAKIHsKIAlzdGF0aWMgc3RydWN0IG51bWFfbWVtaW5mbyBlaSBfX2luaXRkYXRhOwogCXN0YXRpYyBzdHJ1Y3QgbnVtYV9tZW1pbmZvIHBpIF9faW5pdGRhdGE7Ci0JY29uc3QgdTY0IG1heF9hZGRyID0gbWF4X3BmbiA8PCBQQUdFX1NISUZUOworCWNvbnN0IHU2NCBtYXhfYWRkciA9IFBGTl9QSFlTKG1heF9wZm4pOwogCXU4ICpwaHlzX2Rpc3QgPSBOVUxMOwogCXNpemVfdCBwaHlzX3NpemUgPSBudW1hX2Rpc3RfY250ICogbnVtYV9kaXN0X2NudCAqIHNpemVvZihwaHlzX2Rpc3RbMF0pOwogCWludCBtYXhfZW11X25pZCwgZGZsX3BoeXNfbmlkOwpAQCAtMzQyLDggKzM0OSw3IEBACiAJaWYgKG51bWFfZGlzdF9jbnQpIHsKIAkJdTY0IHBoeXM7CiAKLQkJcGh5cyA9IG1lbWJsb2NrX2ZpbmRfaW5fcmFuZ2UoMCwKLQkJCQkJICAgICAgKHU2NCltYXhfcGZuX21hcHBlZCA8PCBQQUdFX1NISUZULAorCQlwaHlzID0gbWVtYmxvY2tfZmluZF9pbl9yYW5nZSgwLCBQRk5fUEhZUyhtYXhfcGZuX21hcHBlZCksCiAJCQkJCSAgICAgIHBoeXNfc2l6ZSwgUEFHRV9TSVpFKTsKIAkJaWYgKHBoeXMgPT0gTUVNQkxPQ0tfRVJST1IpIHsKIAkJCXByX3dhcm5pbmcoIk5VTUE6IFdhcm5pbmc6IGNhbid0IGFsbG9jYXRlIGNvcHkgb2YgZGlzdGFuY2UgdGFibGUsIGRpc2FibGluZyBlbXVsYXRpb25cbiIpOwpAQCAtNDU0LDEwICs0NjAsOSBAQAogCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG5vZGVfdG9fY3B1bWFza19tYXBbaV0pOwogfQogI2Vsc2UJLyogIUNPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMgKi8KLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBudW1hX3NldF9jcHVtYXNrKGludCBjcHUsIGludCBlbmFibGUpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgbnVtYV9zZXRfY3B1bWFzayhpbnQgY3B1LCBib29sIGVuYWJsZSkKIHsKLQlzdHJ1Y3QgY3B1bWFzayAqbWFzazsKLQlpbnQgbmlkLCBwaHlzbmlkLCBpOworCWludCBuaWQsIHBoeXNuaWQ7CiAKIAluaWQgPSBlYXJseV9jcHVfdG9fbm9kZShjcHUpOwogCWlmIChuaWQgPT0gTlVNQV9OT19OT0RFKSB7CkBAIC00NjcsMjggKzQ3MiwyMSBAQAogCiAJcGh5c25pZCA9IGVtdV9uaWRfdG9fcGh5c1tuaWRdOwogCi0JZm9yX2VhY2hfb25saW5lX25vZGUoaSkgeworCWZvcl9lYWNoX29ubGluZV9ub2RlKG5pZCkgewogCQlpZiAoZW11X25pZF90b19waHlzW25pZF0gIT0gcGh5c25pZCkKIAkJCWNvbnRpbnVlOwogCi0JCW1hc2sgPSBkZWJ1Z19jcHVtYXNrX3NldF9jcHUoY3B1LCBlbmFibGUpOwotCQlpZiAoIW1hc2spCi0JCQlyZXR1cm47Ci0KLQkJaWYgKGVuYWJsZSkKLQkJCWNwdW1hc2tfc2V0X2NwdShjcHUsIG1hc2spOwotCQllbHNlCi0JCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG1hc2spOworCQlkZWJ1Z19jcHVtYXNrX3NldF9jcHUoY3B1LCBuaWQsIGVuYWJsZSk7CiAJfQogfQogCiB2b2lkIF9fY3B1aW5pdCBudW1hX2FkZF9jcHUoaW50IGNwdSkKIHsKLQludW1hX3NldF9jcHVtYXNrKGNwdSwgMSk7CisJbnVtYV9zZXRfY3B1bWFzayhjcHUsIHRydWUpOwogfQogCiB2b2lkIF9fY3B1aW5pdCBudW1hX3JlbW92ZV9jcHUoaW50IGNwdSkKIHsKLQludW1hX3NldF9jcHVtYXNrKGNwdSwgMCk7CisJbnVtYV9zZXRfY3B1bWFzayhjcHUsIGZhbHNlKTsKIH0KICNlbmRpZgkvKiAhQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbnVtYV9pbnRlcm5hbC5oIGIvYXJjaC94ODYvbW0vbnVtYV9pbnRlcm5hbC5oCmluZGV4IGVmMmQ5NzMuLjcxNzhjM2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL251bWFfaW50ZXJuYWwuaAorKysgYi9hcmNoL3g4Ni9tbS9udW1hX2ludGVybmFsLmgKQEAgLTE5LDYgKzE5LDE0IEBACiBpbnQgX19pbml0IG51bWFfY2xlYW51cF9tZW1pbmZvKHN0cnVjdCBudW1hX21lbWluZm8gKm1pKTsKIHZvaWQgX19pbml0IG51bWFfcmVzZXRfZGlzdGFuY2Uodm9pZCk7CiAKK3ZvaWQgX19pbml0IHg4Nl9udW1hX2luaXQodm9pZCk7CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9hbGxvY19yZW1hcChpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBlbmQpCXsgfQorI2Vsc2UKK3ZvaWQgX19pbml0IGluaXRfYWxsb2NfcmVtYXAoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgZW5kKTsKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX05VTUFfRU1VCiB2b2lkIF9faW5pdCBudW1hX2VtdWxhdGlvbihzdHJ1Y3QgbnVtYV9tZW1pbmZvICpudW1hX21lbWluZm8sCiAJCQkgICBpbnQgbnVtYV9kaXN0X2NudCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9zcmF0XzY0LmMgYi9hcmNoL3g4Ni9tbS9zcmF0LmMKc2ltaWxhcml0eSBpbmRleCA2NyUKcmVuYW1lIGZyb20gYXJjaC94ODYvbW0vc3JhdF82NC5jCnJlbmFtZSB0byBhcmNoL3g4Ni9tbS9zcmF0LmMKaW5kZXggOGU5ZDMzOS4uODFkYmZkZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vc3JhdF82NC5jCisrKyBiL2FyY2gveDg2L21tL3NyYXQuYwpAQCAtMjYsOCArMjYsNiBAQAogCiBpbnQgYWNwaV9udW1hIF9faW5pdGRhdGE7CiAKLXN0YXRpYyBzdHJ1Y3QgYm9vdG5vZGUgbm9kZXNfYWRkW01BWF9OVU1OT0RFU107Ci0KIHN0YXRpYyBfX2luaXQgaW50IHNldHVwX25vZGUoaW50IHB4bSkKIHsKIAlyZXR1cm4gYWNwaV9tYXBfcHhtX3RvX25vZGUocHhtKTsKQEAgLTM3LDcgKzM1LDYgQEAKIHsKIAlwcmludGsoS0VSTl9FUlIgIlNSQVQ6IFNSQVQgbm90IHVzZWQuXG4iKTsKIAlhY3BpX251bWEgPSAtMTsKLQltZW1zZXQobm9kZXNfYWRkLCAwLCBzaXplb2Yobm9kZXNfYWRkKSk7CiB9CiAKIHN0YXRpYyBfX2luaXQgaW5saW5lIGludCBzcmF0X2Rpc2FibGVkKHZvaWQpCkBAIC0xMzEsNzMgKzEyOCwxNyBAQAogCSAgICAgICBweG0sIGFwaWNfaWQsIG5vZGUpOwogfQogCi0jaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHX1NQQVJTRQorI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRwogc3RhdGljIGlubGluZSBpbnQgc2F2ZV9hZGRfaW5mbyh2b2lkKSB7cmV0dXJuIDE7fQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IHNhdmVfYWRkX2luZm8odm9pZCkge3JldHVybiAwO30KICNlbmRpZgotLyoKLSAqIFVwZGF0ZSBub2Rlc19hZGRbXQotICogVGhpcyBjb2RlIHN1cHBvcnRzIG9uZSBjb250aWd1b3VzIGhvdCBhZGQgYXJlYSBwZXIgbm9kZQotICovCi1zdGF0aWMgdm9pZCBfX2luaXQKLXVwZGF0ZV9ub2Rlc19hZGQoaW50IG5vZGUsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCXVuc2lnbmVkIGxvbmcgc19wZm4gPSBzdGFydCA+PiBQQUdFX1NISUZUOwotCXVuc2lnbmVkIGxvbmcgZV9wZm4gPSBlbmQgPj4gUEFHRV9TSElGVDsKLQlpbnQgY2hhbmdlZCA9IDA7Ci0Jc3RydWN0IGJvb3Rub2RlICpuZCA9ICZub2Rlc19hZGRbbm9kZV07Ci0KLQkvKiBJIGhhZCBzb21lIHRyb3VibGUgd2l0aCBzdHJhbmdlIG1lbW9yeSBob3RhZGQgcmVnaW9ucyBicmVha2luZwotCSAgIHRoZSBib290LiBCZSB2ZXJ5IHN0cmljdCBoZXJlIGFuZCByZWplY3QgYW55dGhpbmcgdW5leHBlY3RlZC4KLQkgICBJZiB5b3Ugd2FudCB3b3JraW5nIG1lbW9yeSBob3RhZGQgd3JpdGUgY29ycmVjdCBTUkFUcy4KLQotCSAgIFRoZSBub2RlIHNpemUgY2hlY2sgaXMgYSBiYXNpYyBzYW5pdHkgY2hlY2sgdG8gZ3VhcmQgYWdhaW5zdAotCSAgIG1pc3Rha2VzICovCi0JaWYgKChzaWduZWQgbG9uZykoZW5kIC0gc3RhcnQpIDwgTk9ERV9NSU5fU0laRSkgewotCQlwcmludGsoS0VSTl9FUlIgIlNSQVQ6IEhvdHBsdWcgYXJlYSB0b28gc21hbGxcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogVGhpcyBjaGVjayBtaWdodCBiZSBhIGJpdCB0b28gc3RyaWN0LCBidXQgSSdtIGtlZXBpbmcgaXQgZm9yIG5vdy4gKi8KLQlpZiAoYWJzZW50X3BhZ2VzX2luX3JhbmdlKHNfcGZuLCBlX3BmbikgIT0gZV9wZm4gLSBzX3BmbikgewotCQlwcmludGsoS0VSTl9FUlIKLQkJCSJTUkFUOiBIb3RwbHVnIGFyZWEgJWx1IC0+ICVsdSBoYXMgZXhpc3RpbmcgbWVtb3J5XG4iLAotCQkJc19wZm4sIGVfcGZuKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIExvb2tzIGdvb2QgKi8KLQotCWlmIChuZC0+c3RhcnQgPT0gbmQtPmVuZCkgewotCQluZC0+c3RhcnQgPSBzdGFydDsKLQkJbmQtPmVuZCA9IGVuZDsKLQkJY2hhbmdlZCA9IDE7Ci0JfSBlbHNlIHsKLQkJaWYgKG5kLT5zdGFydCA9PSBlbmQpIHsKLQkJCW5kLT5zdGFydCA9IHN0YXJ0OwotCQkJY2hhbmdlZCA9IDE7Ci0JCX0KLQkJaWYgKG5kLT5lbmQgPT0gc3RhcnQpIHsKLQkJCW5kLT5lbmQgPSBlbmQ7Ci0JCQljaGFuZ2VkID0gMTsKLQkJfQotCQlpZiAoIWNoYW5nZWQpCi0JCQlwcmludGsoS0VSTl9FUlIgIlNSQVQ6IEhvdHBsdWcgem9uZSBub3QgY29udGludW91cy4gUGFydGx5IGlnbm9yZWRcbiIpOwotCX0KLQotCWlmIChjaGFuZ2VkKSB7Ci0JCW5vZGVfc2V0KG5vZGUsIG51bWFfbm9kZXNfcGFyc2VkKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiU1JBVDogaG90IHBsdWcgem9uZSBmb3VuZCAlTHggLSAlTHhcbiIsCi0JCQkJIG5kLT5zdGFydCwgbmQtPmVuZCk7Ci0JfQotfQogCiAvKiBDYWxsYmFjayBmb3IgcGFyc2luZyBvZiB0aGUgUHJveGltaXR5IERvbWFpbiA8LT4gTWVtb3J5IEFyZWEgbWFwcGluZ3MgKi8KIHZvaWQgX19pbml0CiBhY3BpX251bWFfbWVtb3J5X2FmZmluaXR5X2luaXQoc3RydWN0IGFjcGlfc3JhdF9tZW1fYWZmaW5pdHkgKm1hKQogewotCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKKwl1NjQgc3RhcnQsIGVuZDsKIAlpbnQgbm9kZSwgcHhtOwogCiAJaWYgKHNyYXRfZGlzYWJsZWQoKSkKQEAgLTIyNiwxMSArMTY3LDggQEAKIAkJcmV0dXJuOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIlNSQVQ6IE5vZGUgJXUgUFhNICV1ICVseC0lbHhcbiIsIG5vZGUsIHB4bSwKKwlwcmludGsoS0VSTl9JTkZPICJTUkFUOiBOb2RlICV1IFBYTSAldSAlTHgtJUx4XG4iLCBub2RlLCBweG0sCiAJICAgICAgIHN0YXJ0LCBlbmQpOwotCi0JaWYgKG1hLT5mbGFncyAmIEFDUElfU1JBVF9NRU1fSE9UX1BMVUdHQUJMRSkKLQkJdXBkYXRlX25vZGVzX2FkZChub2RlLCBzdGFydCwgZW5kKTsKIH0KIAogdm9pZCBfX2luaXQgYWNwaV9udW1hX2FyY2hfZml4dXAodm9pZCkge30KQEAgLTI0NCwxNyArMTgyLDMgQEAKIAkJcmV0dXJuIHJldDsKIAlyZXR1cm4gc3JhdF9kaXNhYmxlZCgpID8gLUVJTlZBTCA6IDA7CiB9Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVR19TUEFSU0UpIHx8IGRlZmluZWQoQ09ORklHX0FDUElfSE9UUExVR19NRU1PUlkpCi1pbnQgbWVtb3J5X2FkZF9waHlzYWRkcl90b19uaWQodTY0IHN0YXJ0KQotewotCWludCBpLCByZXQgPSAwOwotCi0JZm9yX2VhY2hfbm9kZShpKQotCQlpZiAobm9kZXNfYWRkW2ldLnN0YXJ0IDw9IHN0YXJ0ICYmIG5vZGVzX2FkZFtpXS5lbmQgPiBzdGFydCkKLQkJCXJldCA9IGk7Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwobWVtb3J5X2FkZF9waHlzYWRkcl90b19uaWQpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9zcmF0XzMyLmMgYi9hcmNoL3g4Ni9tbS9zcmF0XzMyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2NGYzNmIuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvbW0vc3JhdF8zMi5jCisrKyAvZGV2L251bGwKQEAgLTEsMjg4ICswLDAgQEAKLS8qCi0gKiBTb21lIG9mIHRoZSBjb2RlIGluIHRoaXMgZmlsZSBoYXMgYmVlbiBnbGVhbmVkIGZyb20gdGhlIDY0IGJpdCAKLSAqIGRpc2NvbnRpZ21lbSBzdXBwb3J0IGNvZGUgYmFzZS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIsIElCTSBDb3JwLgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgIAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCi0gKiBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQotICogZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICoKLSAqIFNlbmQgZmVlZGJhY2sgdG8gUGF0IEdhdWdoZW4gPGdvbmVAdXMuaWJtLmNvbT4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvbW16b25lLmg+Ci0jaW5jbHVkZSA8bGludXgvYWNwaS5oPgotI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+Ci0jaW5jbHVkZSA8YXNtL3NyYXQuaD4KLSNpbmNsdWRlIDxhc20vdG9wb2xvZ3kuaD4KLSNpbmNsdWRlIDxhc20vc21wLmg+Ci0jaW5jbHVkZSA8YXNtL2U4MjAuaD4KLQotLyoKLSAqIHByb3hpbWl0eSBtYWNyb3MgYW5kIGRlZmluaXRpb25zCi0gKi8KLSNkZWZpbmUgTk9ERV9BUlJBWV9JTkRFWCh4KQkoKHgpIC8gOCkJLyogOCBiaXRzL2NoYXIgKi8KLSNkZWZpbmUgTk9ERV9BUlJBWV9PRkZTRVQoeCkJKCh4KSAlIDgpCS8qIDggYml0cy9jaGFyICovCi0jZGVmaW5lIEJNQVBfU0VUKGJtYXAsIGJpdCkJKChibWFwKVtOT0RFX0FSUkFZX0lOREVYKGJpdCldIHw9IDEgPDwgTk9ERV9BUlJBWV9PRkZTRVQoYml0KSkKLSNkZWZpbmUgQk1BUF9URVNUKGJtYXAsIGJpdCkJKChibWFwKVtOT0RFX0FSUkFZX0lOREVYKGJpdCldICYgKDEgPDwgTk9ERV9BUlJBWV9PRkZTRVQoYml0KSkpCi0vKiBiaXRtYXAgbGVuZ3RoOyBfUFhNIGlzIGF0IG1vc3QgMjU1ICovCi0jZGVmaW5lIFBYTV9CSVRNQVBfTEVOIChNQVhfUFhNX0RPTUFJTlMgLyA4KSAKLXN0YXRpYyB1OCBfX2luaXRkYXRhIHB4bV9iaXRtYXBbUFhNX0JJVE1BUF9MRU5dOwkvKiBiaXRtYXAgb2YgcHJveGltaXR5IGRvbWFpbnMgKi8KLQotI2RlZmluZSBNQVhfQ0hVTktTX1BFUl9OT0RFCTMKLSNkZWZpbmUgTUFYQ0hVTktTCQkoTUFYX0NIVU5LU19QRVJfTk9ERSAqIE1BWF9OVU1OT0RFUykKLXN0cnVjdCBub2RlX21lbW9yeV9jaHVua19zIHsKLQl1bnNpZ25lZCBsb25nCXN0YXJ0X3BmbjsKLQl1bnNpZ25lZCBsb25nCWVuZF9wZm47Ci0JdTgJcHhtOwkJLy8gcHJveGltaXR5IGRvbWFpbiBvZiBub2RlCi0JdTgJbmlkOwkJLy8gd2hpY2ggY25vZGUgY29udGFpbnMgdGhpcyBjaHVuaz8KLQl1OAliYW5rOwkJLy8gd2hpY2ggbWVtIGJhbmsgb24gdGhpcyBub2RlCi19Owotc3RhdGljIHN0cnVjdCBub2RlX21lbW9yeV9jaHVua19zIF9faW5pdGRhdGEgbm9kZV9tZW1vcnlfY2h1bmtbTUFYQ0hVTktTXTsKLQotc3RhdGljIGludCBfX2luaXRkYXRhIG51bV9tZW1vcnlfY2h1bmtzOyAvKiB0b3RhbCBudW1iZXIgb2YgbWVtb3J5IGNodW5rcyAqLwotc3RhdGljIHU4IF9faW5pdGRhdGEgYXBpY2lkX3RvX3B4bVtNQVhfTE9DQUxfQVBJQ107Ci0KLWludCBhY3BpX251bWEgX19pbml0ZGF0YTsKLQotc3RhdGljIF9faW5pdCB2b2lkIGJhZF9zcmF0KHZvaWQpCi17Ci0gICAgICAgIHByaW50ayhLRVJOX0VSUiAiU1JBVDogU1JBVCBub3QgdXNlZC5cbiIpOwotICAgICAgICBhY3BpX251bWEgPSAtMTsKLQludW1fbWVtb3J5X2NodW5rcyA9IDA7Ci19Ci0KLXN0YXRpYyBfX2luaXQgaW5saW5lIGludCBzcmF0X2Rpc2FibGVkKHZvaWQpCi17Ci0JcmV0dXJuIG51bWFfb2ZmIHx8IGFjcGlfbnVtYSA8IDA7Ci19Ci0KLS8qIElkZW50aWZ5IENQVSBwcm94aW1pdHkgZG9tYWlucyAqLwotdm9pZCBfX2luaXQKLWFjcGlfbnVtYV9wcm9jZXNzb3JfYWZmaW5pdHlfaW5pdChzdHJ1Y3QgYWNwaV9zcmF0X2NwdV9hZmZpbml0eSAqY3B1X2FmZmluaXR5KQotewotCWlmIChzcmF0X2Rpc2FibGVkKCkpCi0JCXJldHVybjsKLQlpZiAoY3B1X2FmZmluaXR5LT5oZWFkZXIubGVuZ3RoICE9Ci0JICAgICBzaXplb2Yoc3RydWN0IGFjcGlfc3JhdF9jcHVfYWZmaW5pdHkpKSB7Ci0JCWJhZF9zcmF0KCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoKGNwdV9hZmZpbml0eS0+ZmxhZ3MgJiBBQ1BJX1NSQVRfQ1BVX0VOQUJMRUQpID09IDApCi0JCXJldHVybjsJCS8qIGVtcHR5IGVudHJ5ICovCi0KLQkvKiBtYXJrIHRoaXMgbm9kZSBhcyAic2VlbiIgaW4gbm9kZSBiaXRtYXAgKi8KLQlCTUFQX1NFVChweG1fYml0bWFwLCBjcHVfYWZmaW5pdHktPnByb3hpbWl0eV9kb21haW5fbG8pOwotCi0JLyogZG9uJ3QgbmVlZCB0byBjaGVjayBhcGljX2lkIGhlcmUsIGJlY2F1c2UgaXQgaXMgYWx3YXlzIDggYml0cyAqLwotCWFwaWNpZF90b19weG1bY3B1X2FmZmluaXR5LT5hcGljX2lkXSA9IGNwdV9hZmZpbml0eS0+cHJveGltaXR5X2RvbWFpbl9sbzsKLQotCXByaW50ayhLRVJOX0RFQlVHICJDUFUgJTAyeCBpbiBwcm94aW1pdHkgZG9tYWluICUwMnhcbiIsCi0JCWNwdV9hZmZpbml0eS0+YXBpY19pZCwgY3B1X2FmZmluaXR5LT5wcm94aW1pdHlfZG9tYWluX2xvKTsKLX0KLQotLyoKLSAqIElkZW50aWZ5IG1lbW9yeSBwcm94aW1pdHkgZG9tYWlucyBhbmQgaG90LXJlbW92ZSBjYXBhYmlsaXRpZXMuCi0gKiBGaWxsIG5vZGUgbWVtb3J5IGNodW5rIGxpc3Qgc3RydWN0dXJlLgotICovCi12b2lkIF9faW5pdAotYWNwaV9udW1hX21lbW9yeV9hZmZpbml0eV9pbml0KHN0cnVjdCBhY3BpX3NyYXRfbWVtX2FmZmluaXR5ICptZW1vcnlfYWZmaW5pdHkpCi17Ci0JdW5zaWduZWQgbG9uZyBsb25nIHBhZGRyLCBzaXplOwotCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuOwotCXU4IHB4bTsKLQlzdHJ1Y3Qgbm9kZV9tZW1vcnlfY2h1bmtfcyAqcCwgKnEsICpwZW5kOwotCi0JaWYgKHNyYXRfZGlzYWJsZWQoKSkKLQkJcmV0dXJuOwotCWlmIChtZW1vcnlfYWZmaW5pdHktPmhlYWRlci5sZW5ndGggIT0KLQkgICAgIHNpemVvZihzdHJ1Y3QgYWNwaV9zcmF0X21lbV9hZmZpbml0eSkpIHsKLQkJYmFkX3NyYXQoKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICgobWVtb3J5X2FmZmluaXR5LT5mbGFncyAmIEFDUElfU1JBVF9NRU1fRU5BQkxFRCkgPT0gMCkKLQkJcmV0dXJuOwkJLyogZW1wdHkgZW50cnkgKi8KLQotCXB4bSA9IG1lbW9yeV9hZmZpbml0eS0+cHJveGltaXR5X2RvbWFpbiAmIDB4ZmY7Ci0KLQkvKiBtYXJrIHRoaXMgbm9kZSBhcyAic2VlbiIgaW4gbm9kZSBiaXRtYXAgKi8KLQlCTUFQX1NFVChweG1fYml0bWFwLCBweG0pOwotCi0JLyogY2FsY3VsYXRlIGluZm8gZm9yIG1lbW9yeSBjaHVuayBzdHJ1Y3R1cmUgKi8KLQlwYWRkciA9IG1lbW9yeV9hZmZpbml0eS0+YmFzZV9hZGRyZXNzOwotCXNpemUgPSBtZW1vcnlfYWZmaW5pdHktPmxlbmd0aDsKLQotCXN0YXJ0X3BmbiA9IHBhZGRyID4+IFBBR0VfU0hJRlQ7Ci0JZW5kX3BmbiA9IChwYWRkciArIHNpemUpID4+IFBBR0VfU0hJRlQ7Ci0KLQotCWlmIChudW1fbWVtb3J5X2NodW5rcyA+PSBNQVhDSFVOS1MpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVG9vIG1hbnkgbWVtIGNodW5rcyBpbiBTUkFULiIKLQkJCSIgSWdub3JpbmcgJWxsZCBNQnl0ZXMgYXQgJWxseFxuIiwKLQkJCXNpemUvKDEwMjQqMTAyNCksIHBhZGRyKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIEluc2VydGlvbiBzb3J0IGJhc2VkIG9uIGJhc2UgYWRkcmVzcyAqLwotCXBlbmQgPSAmbm9kZV9tZW1vcnlfY2h1bmtbbnVtX21lbW9yeV9jaHVua3NdOwotCWZvciAocCA9ICZub2RlX21lbW9yeV9jaHVua1swXTsgcCA8IHBlbmQ7IHArKykgewotCQlpZiAoc3RhcnRfcGZuIDwgcC0+c3RhcnRfcGZuKQotCQkJYnJlYWs7Ci0JfQotCWlmIChwIDwgcGVuZCkgewotCQlmb3IgKHEgPSBwZW5kOyBxID49IHA7IHEtLSkKLQkJCSoocSArIDEpID0gKnE7Ci0JfQotCXAtPnN0YXJ0X3BmbiA9IHN0YXJ0X3BmbjsKLQlwLT5lbmRfcGZuID0gZW5kX3BmbjsKLQlwLT5weG0gPSBweG07Ci0KLQludW1fbWVtb3J5X2NodW5rcysrOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIk1lbW9yeSByYW5nZSAlMDhseCB0byAlMDhseCIKLQkJCSAgIiBpbiBwcm94aW1pdHkgZG9tYWluICUwMnggJXNcbiIsCi0JCXN0YXJ0X3BmbiwgZW5kX3BmbiwKLQkJcHhtLAotCQkoKG1lbW9yeV9hZmZpbml0eS0+ZmxhZ3MgJiBBQ1BJX1NSQVRfTUVNX0hPVF9QTFVHR0FCTEUpID8KLQkJICJlbmFibGVkIGFuZCByZW1vdmFibGUiIDogImVuYWJsZWQiICkgKTsKLX0KLQotLyogQ2FsbGJhY2sgZm9yIFNMSVQgcGFyc2luZyAqLwotdm9pZCBfX2luaXQgYWNwaV9udW1hX3NsaXRfaW5pdChzdHJ1Y3QgYWNwaV90YWJsZV9zbGl0ICpzbGl0KQotewotfQotCi12b2lkIGFjcGlfbnVtYV9hcmNoX2ZpeHVwKHZvaWQpCi17Ci19Ci0vKgotICogVGhlIFNSQVQgdGFibGUgYWx3YXlzIGxpc3RzIGFzY2VuZGluZyBhZGRyZXNzZXMsIHNvIGNhbiBhbHdheXMKLSAqIGFzc3VtZSB0aGF0IHRoZSBmaXJzdCAic3RhcnQiIGFkZHJlc3MgdGhhdCB5b3Ugc2VlIGlzIHRoZSByZWFsCi0gKiBzdGFydCBvZiB0aGUgbm9kZSwgYW5kIHRoYXQgdGhlIGN1cnJlbnQgImVuZCIgYWRkcmVzcyBpcyBhZnRlcgotICogdGhlIHByZXZpb3VzIG9uZS4KLSAqLwotc3RhdGljIF9faW5pdCBpbnQgbm9kZV9yZWFkX2NodW5rKGludCBuaWQsIHN0cnVjdCBub2RlX21lbW9yeV9jaHVua19zICptZW1vcnlfY2h1bmspCi17Ci0JLyoKLQkgKiBPbmx5IGFkZCBwcmVzZW50IG1lbW9yeSBhcyB0b2xkIGJ5IHRoZSBlODIwLgotCSAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSBmcm9tIHRoZSBTUkFUIHRoYXQgdGhlIG1lbW9yeSBpdAotCSAqIGVudW1lcmF0ZXMgaXMgcHJlc2VudCBhdCBib290IHRpbWUgYmVjYXVzZSBpdCByZXByZXNlbnRzCi0JICogKnBvc3NpYmxlKiBtZW1vcnkgaG90cGx1ZyBhcmVhcyB0aGUgc2FtZSBhcyBub3JtYWwgUkFNLgotCSAqLwotCWlmIChtZW1vcnlfY2h1bmstPnN0YXJ0X3BmbiA+PSBtYXhfcGZuKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIklnbm9yaW5nIFNSQVQgcGZuczogJTA4bHggLSAlMDhseFxuIiwKLQkJCW1lbW9yeV9jaHVuay0+c3RhcnRfcGZuLCBtZW1vcnlfY2h1bmstPmVuZF9wZm4pOwotCQlyZXR1cm4gLTE7Ci0JfQotCWlmIChtZW1vcnlfY2h1bmstPm5pZCAhPSBuaWQpCi0JCXJldHVybiAtMTsKLQotCWlmICghbm9kZV9oYXNfb25saW5lX21lbShuaWQpKQotCQlub2RlX3N0YXJ0X3BmbltuaWRdID0gbWVtb3J5X2NodW5rLT5zdGFydF9wZm47Ci0KLQlpZiAobm9kZV9zdGFydF9wZm5bbmlkXSA+IG1lbW9yeV9jaHVuay0+c3RhcnRfcGZuKQotCQlub2RlX3N0YXJ0X3BmbltuaWRdID0gbWVtb3J5X2NodW5rLT5zdGFydF9wZm47Ci0KLQlpZiAobm9kZV9lbmRfcGZuW25pZF0gPCBtZW1vcnlfY2h1bmstPmVuZF9wZm4pCi0JCW5vZGVfZW5kX3BmbltuaWRdID0gbWVtb3J5X2NodW5rLT5lbmRfcGZuOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBfX2luaXQgZ2V0X21lbWNmZ19mcm9tX3NyYXQodm9pZCkKLXsKLQlpbnQgaSwgaiwgbmlkOwotCi0JaWYgKHNyYXRfZGlzYWJsZWQoKSkKLQkJZ290byBvdXRfZmFpbDsKLQotCWlmIChhY3BpX251bWFfaW5pdCgpIDwgMCkKLQkJZ290byBvdXRfZmFpbDsKLQotCWlmIChudW1fbWVtb3J5X2NodW5rcyA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHCi0JCQkgImNvdWxkIG5vdCBmaW5kIGFueSBBQ1BJIFNSQVQgbWVtb3J5IGFyZWFzLlxuIik7Ci0JCWdvdG8gb3V0X2ZhaWw7Ci0JfQotCi0JLyogQ2FsY3VsYXRlIHRvdGFsIG51bWJlciBvZiBub2RlcyBpbiBzeXN0ZW0gZnJvbSBQWE0gYml0bWFwIGFuZCBjcmVhdGUKLQkgKiBhIHNldCBvZiBzZXF1ZW50aWFsIG5vZGUgSURzIHN0YXJ0aW5nIGF0IHplcm8uICAoQUNQSSBkb2Vzbid0IHNlZW0KLQkgKiB0byBzcGVjaWZ5IHRoZSByYW5nZSBvZiBfUFhNIHZhbHVlcy4pCi0JICovCi0JLyoKLQkgKiBNQ0QgLSB3ZSBubyBsb25nZXIgSEFWRSB0byBudW1iZXIgbm9kZXMgc2VxdWVudGlhbGx5LiAgUFhNIGRvbWFpbgotCSAqIG51bWJlcnMgY291bGQgZ28gYXMgaGlnaCBhcyAyNTYsIGFuZCBNQVhfTlVNTk9ERVMgZm9yIGkzODYgaXMgdHlwaWNhbGx5Ci0JICogMzIsIHNvIHdlIHdpbGwgY29udGludWUgbnVtYmVyaW5nIHRoZW0gaW4gdGhpcyBtYW5uZXIgdW50aWwgTUFYX05VTU5PREVTCi0JICogYXBwcm9hY2hlcyBNQVhfUFhNX0RPTUFJTlMgZm9yIGkzODYuCi0JICovCi0Jbm9kZXNfY2xlYXIobm9kZV9vbmxpbmVfbWFwKTsKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX1BYTV9ET01BSU5TOyBpKyspIHsKLQkJaWYgKEJNQVBfVEVTVChweG1fYml0bWFwLCBpKSkgewotCQkJaW50IG5pZCA9IGFjcGlfbWFwX3B4bV90b19ub2RlKGkpOwotCQkJbm9kZV9zZXRfb25saW5lKG5pZCk7Ci0JCX0KLQl9Ci0JQlVHX09OKG51bV9vbmxpbmVfbm9kZXMoKSA9PSAwKTsKLQotCS8qIHNldCBjbm9kZSBpZCBpbiBtZW1vcnkgY2h1bmsgc3RydWN0dXJlICovCi0JZm9yIChpID0gMDsgaSA8IG51bV9tZW1vcnlfY2h1bmtzOyBpKyspCi0JCW5vZGVfbWVtb3J5X2NodW5rW2ldLm5pZCA9IHB4bV90b19ub2RlKG5vZGVfbWVtb3J5X2NodW5rW2ldLnB4bSk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAicHhtIGJpdG1hcDogIik7Ci0JZm9yIChpID0gMDsgaSA8IHNpemVvZihweG1fYml0bWFwKTsgaSsrKSB7Ci0JCXByaW50ayhLRVJOX0NPTlQgIiUwMnggIiwgcHhtX2JpdG1hcFtpXSk7Ci0JfQotCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIk51bWJlciBvZiBsb2dpY2FsIG5vZGVzIGluIHN5c3RlbSA9ICVkXG4iLAotCQkJIG51bV9vbmxpbmVfbm9kZXMoKSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIk51bWJlciBvZiBtZW1vcnkgY2h1bmtzIGluIHN5c3RlbSA9ICVkXG4iLAotCQkJIG51bV9tZW1vcnlfY2h1bmtzKTsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfTE9DQUxfQVBJQzsgaSsrKQotCQlzZXRfYXBpY2lkX3RvX25vZGUoaSwgcHhtX3RvX25vZGUoYXBpY2lkX3RvX3B4bVtpXSkpOwotCi0JZm9yIChqID0gMDsgaiA8IG51bV9tZW1vcnlfY2h1bmtzOyBqKyspewotCQlzdHJ1Y3Qgbm9kZV9tZW1vcnlfY2h1bmtfcyAqIGNodW5rID0gJm5vZGVfbWVtb3J5X2NodW5rW2pdOwotCQlwcmludGsoS0VSTl9ERUJVRwotCQkJImNodW5rICVkIG5pZCAlZCBzdGFydF9wZm4gJTA4bHggZW5kX3BmbiAlMDhseFxuIiwKLQkJICAgICAgIGosIGNodW5rLT5uaWQsIGNodW5rLT5zdGFydF9wZm4sIGNodW5rLT5lbmRfcGZuKTsKLQkJaWYgKG5vZGVfcmVhZF9jaHVuayhjaHVuay0+bmlkLCBjaHVuaykpCi0JCQljb250aW51ZTsKLQotCQltZW1ibG9ja194ODZfcmVnaXN0ZXJfYWN0aXZlX3JlZ2lvbnMoY2h1bmstPm5pZCwgY2h1bmstPnN0YXJ0X3BmbiwKLQkJCQkJICAgICBtaW4oY2h1bmstPmVuZF9wZm4sIG1heF9wZm4pKTsKLQl9Ci0JLyogZm9yIG91dCBvZiBvcmRlciBlbnRyaWVzIGluIFNSQVQgKi8KLQlzb3J0X25vZGVfbWFwKCk7Ci0KLQlmb3JfZWFjaF9vbmxpbmVfbm9kZShuaWQpIHsKLQkJdW5zaWduZWQgbG9uZyBzdGFydCA9IG5vZGVfc3RhcnRfcGZuW25pZF07Ci0JCXVuc2lnbmVkIGxvbmcgZW5kID0gbWluKG5vZGVfZW5kX3BmbltuaWRdLCBtYXhfcGZuKTsKLQotCQltZW1vcnlfcHJlc2VudChuaWQsIHN0YXJ0LCBlbmQpOwotCQlub2RlX3JlbWFwX3NpemVbbmlkXSA9IG5vZGVfbWVtbWFwX3NpemVfYnl0ZXMobmlkLCBzdGFydCwgZW5kKTsKLQl9Ci0JcmV0dXJuIDE7Ci1vdXRfZmFpbDoKLQlwcmludGsoS0VSTl9ERUJVRyAiZmFpbGVkIHRvIGdldCBOVU1BIG1lbW9yeSBpbmZvcm1hdGlvbiBmcm9tIFNSQVQiCi0JCQkiIHRhYmxlXG4iKTsKLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9NYWtlZmlsZSBiL2FyY2gveDg2L25ldC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDU2OGMzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvbmV0L01ha2VmaWxlCkBAIC0wLDAgKzEsNCBAQAorIworIyBBcmNoLXNwZWNpZmljIG5ldHdvcmsgbW9kdWxlcworIworb2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IGJwZl9qaXQubyBicGZfaml0X2NvbXAubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXQuUyBiL2FyY2gveDg2L25ldC9icGZfaml0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY4NzAyMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L25ldC9icGZfaml0LlMKQEAgLTAsMCArMSwxNDAgQEAKKy8qIGJwZl9qaXQuUyA6IEJQRiBKSVQgaGVscGVyIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBFcmljIER1bWF6ZXQgKGVyaWMuZHVtYXpldEBnbWFpbC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLgorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9kd2FyZjIuaD4KKworLyoKKyAqIENhbGxpbmcgY29udmVudGlvbiA6CisgKiByZGkgOiBza2IgcG9pbnRlcgorICogZXNpIDogb2Zmc2V0IG9mIGJ5dGUocykgdG8gZmV0Y2ggaW4gc2tiIChjYW4gYmUgc2NyYXRjaGVkKQorICogcjggIDogY29weSBvZiBza2ItPmRhdGEKKyAqIHI5ZCA6IGhsZW4gPSBza2ItPmxlbiAtIHNrYi0+ZGF0YV9sZW4KKyAqLworI2RlZmluZSBTS0JEQVRBCSVyOAorCitza19sb2FkX3dvcmRfaW5kOgorCS5nbG9ibAlza19sb2FkX3dvcmRfaW5kCisKKwlhZGQJJWVieCwlZXNpCS8qIG9mZnNldCArPSBYICovCisjCXRlc3QgICAgJWVzaSwlZXNpCS8qIGlmIChvZmZzZXQgPCAwKSBnb3RvIGJwZl9lcnJvcjsgKi8KKwlqcwlicGZfZXJyb3IKKworc2tfbG9hZF93b3JkOgorCS5nbG9ibAlza19sb2FkX3dvcmQKKworCW1vdgklcjlkLCVlYXgJCSMgaGxlbgorCXN1YgklZXNpLCVlYXgJCSMgaGxlbiAtIG9mZnNldAorCWNtcAkkMywlZWF4CisJamxlCWJwZl9zbG93X3BhdGhfd29yZAorCW1vdiAgICAgKFNLQkRBVEEsJXJzaSksJWVheAorCWJzd2FwICAgJWVheCAgCQkJLyogbnRvaGwoKSAqLworCXJldAorCisKK3NrX2xvYWRfaGFsZl9pbmQ6CisJLmdsb2JsIHNrX2xvYWRfaGFsZl9pbmQKKworCWFkZAklZWJ4LCVlc2kJLyogb2Zmc2V0ICs9IFggKi8KKwlqcwlicGZfZXJyb3IKKworc2tfbG9hZF9oYWxmOgorCS5nbG9ibAlza19sb2FkX2hhbGYKKworCW1vdgklcjlkLCVlYXgKKwlzdWIJJWVzaSwlZWF4CQkjCWhsZW4gLSBvZmZzZXQKKwljbXAJJDEsJWVheAorCWpsZQlicGZfc2xvd19wYXRoX2hhbGYKKwltb3Z6d2wJKFNLQkRBVEEsJXJzaSksJWVheAorCXJvbAkkOCwlYXgJCQkjIG50b2hzKCkKKwlyZXQKKworc2tfbG9hZF9ieXRlX2luZDoKKwkuZ2xvYmwgc2tfbG9hZF9ieXRlX2luZAorCWFkZAklZWJ4LCVlc2kJLyogb2Zmc2V0ICs9IFggKi8KKwlqcwlicGZfZXJyb3IKKworc2tfbG9hZF9ieXRlOgorCS5nbG9ibAlza19sb2FkX2J5dGUKKworCWNtcAklZXNpLCVyOWQgICAvKiBpZiAob2Zmc2V0ID49IGhsZW4pIGdvdG8gYnBmX3Nsb3dfcGF0aF9ieXRlICovCisJamxlCWJwZl9zbG93X3BhdGhfYnl0ZQorCW1vdnpibAkoU0tCREFUQSwlcnNpKSwlZWF4CisJcmV0CisKKy8qKgorICogc2tfbG9hZF9ieXRlX21zaCAtIEJQRl9TX0xEWF9CX01TSCBoZWxwZXIKKyAqCisgKiBJbXBsZW1lbnRzIEJQRl9TX0xEWF9CX01TSCA6IGxkeGIgIDQqKFtvZmZzZXRdJjB4ZikKKyAqIE11c3QgcHJlc2VydmUgQSBhY2N1bXVsYXRvciAoJWVheCkKKyAqIElucHV0cyA6ICVlc2kgaXMgdGhlIG9mZnNldCB2YWx1ZSwgYWxyZWFkeSBrbm93biBwb3NpdGl2ZQorICovCitFTlRSWShza19sb2FkX2J5dGVfbXNoKQorCUNGSV9TVEFSVFBST0MKKwljbXAJJWVzaSwlcjlkICAgICAgLyogaWYgKG9mZnNldCA+PSBobGVuKSBnb3RvIGJwZl9zbG93X3BhdGhfYnl0ZV9tc2ggKi8KKwlqbGUJYnBmX3Nsb3dfcGF0aF9ieXRlX21zaAorCW1vdnpibAkoU0tCREFUQSwlcnNpKSwlZWJ4CisJYW5kCSQxNSwlYmwKKwlzaGwJJDIsJWJsCisJcmV0CisJQ0ZJX0VORFBST0MKK0VORFBST0Moc2tfbG9hZF9ieXRlX21zaCkKKworYnBmX2Vycm9yOgorIyBmb3JjZSBhIHJldHVybiAwIGZyb20gaml0IGhhbmRsZXIKKwl4b3IJCSVlYXgsJWVheAorCW1vdgkJLTgoJXJicCksJXJieAorCWxlYXZlcQorCXJldAorCisvKiByc2kgY29udGFpbnMgb2Zmc2V0IGFuZCBjYW4gYmUgc2NyYXRjaGVkICovCisjZGVmaW5lIGJwZl9zbG93X3BhdGhfY29tbW9uKExFTikJCVwKKwlwdXNoCSVyZGk7ICAgIC8qIHNhdmUgc2tiICovCQlcCisJcHVzaAklcjk7CQkJCVwKKwlwdXNoCVNLQkRBVEE7CQkJXAorLyogcnNpIGFscmVhZHkgaGFzIG9mZnNldCAqLwkJCVwKKwltb3YJJExFTiwlZWN4OwkvKiBsZW4gKi8JXAorCWxlYQktMTIoJXJicCksJXJkeDsJCQlcCisJY2FsbAlza2JfY29weV9iaXRzOwkJCVwKKwl0ZXN0ICAgICVlYXgsJWVheDsJCQlcCisJcG9wCVNLQkRBVEE7CQkJXAorCXBvcAklcjk7CQkJCVwKKwlwb3AJJXJkaQorCisKK2JwZl9zbG93X3BhdGhfd29yZDoKKwlicGZfc2xvd19wYXRoX2NvbW1vbig0KQorCWpzCWJwZl9lcnJvcgorCW1vdgktMTIoJXJicCksJWVheAorCWJzd2FwCSVlYXgKKwlyZXQKKworYnBmX3Nsb3dfcGF0aF9oYWxmOgorCWJwZl9zbG93X3BhdGhfY29tbW9uKDIpCisJanMJYnBmX2Vycm9yCisJbW92CS0xMiglcmJwKSwlYXgKKwlyb2wJJDgsJWF4CisJbW92endsCSVheCwlZWF4CisJcmV0CisKK2JwZl9zbG93X3BhdGhfYnl0ZToKKwlicGZfc2xvd19wYXRoX2NvbW1vbigxKQorCWpzCWJwZl9lcnJvcgorCW1vdnpibAktMTIoJXJicCksJWVheAorCXJldAorCiticGZfc2xvd19wYXRoX2J5dGVfbXNoOgorCXhjaGcJJWVheCwlZWJ4IC8qIGRvbnQgbG9zZSBBICwgWCBpcyBhYm91dCB0byBiZSBzY3JhdGNoZWQgKi8KKwlicGZfc2xvd19wYXRoX2NvbW1vbigxKQorCWpzCWJwZl9lcnJvcgorCW1vdnpibAktMTIoJXJicCksJWVheAorCWFuZAkkMTUsJWFsCisJc2hsCSQyLCVhbAorCXhjaGcJJWVheCwlZWJ4CisJcmV0CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZhYjNmYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwpAQCAtMCwwICsxLDY1NCBAQAorLyogYnBmX2ppdF9jb21wLmMgOiBCUEYgSklUIGNvbXBpbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIEVyaWMgRHVtYXpldCAoZXJpYy5kdW1hemV0QGdtYWlsLmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVsb2FkZXIuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbHRlci5oPgorCisvKgorICogQ29udmVudGlvbnMgOgorICogIEVBWCA6IEJQRiBBIGFjY3VtdWxhdG9yCisgKiAgRUJYIDogQlBGIFggYWNjdW11bGF0b3IKKyAqICBSREkgOiBwb2ludGVyIHRvIHNrYiAgIChmaXJzdCBhcmd1bWVudCBnaXZlbiB0byBKSVQgZnVuY3Rpb24pCisgKiAgUkJQIDogZnJhbWUgcG9pbnRlciAoZXZlbiBpZiBDT05GSUdfRlJBTUVfUE9JTlRFUj1uKQorICogIEVDWCxFRFgsRVNJIDogc2NyYXRjaCByZWdpc3RlcnMKKyAqICByOWQgOiBza2ItPmxlbiAtIHNrYi0+ZGF0YV9sZW4gKGhlYWRsZW4pCisgKiAgcjggIDogc2tiLT5kYXRhCisgKiAtOChSQlApIDogc2F2ZWQgUkJYIHZhbHVlCisgKiAtMTYoUkJQKS4uLTgwKFJCUCkgOiBCUEZfTUVNV09SRFMgdmFsdWVzCisgKi8KK2ludCBicGZfaml0X2VuYWJsZSBfX3JlYWRfbW9zdGx5OworCisvKgorICogYXNzZW1ibHkgY29kZSBpbiBhcmNoL3g4Ni9uZXQvYnBmX2ppdC5TCisgKi8KK2V4dGVybiB1OCBza19sb2FkX3dvcmRbXSwgc2tfbG9hZF9oYWxmW10sIHNrX2xvYWRfYnl0ZVtdLCBza19sb2FkX2J5dGVfbXNoW107CitleHRlcm4gdTggc2tfbG9hZF93b3JkX2luZFtdLCBza19sb2FkX2hhbGZfaW5kW10sIHNrX2xvYWRfYnl0ZV9pbmRbXTsKKworc3RhdGljIGlubGluZSB1OCAqZW1pdF9jb2RlKHU4ICpwdHIsIHUzMiBieXRlcywgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpZiAobGVuID09IDEpCisJCSpwdHIgPSBieXRlczsKKwllbHNlIGlmIChsZW4gPT0gMikKKwkJKih1MTYgKilwdHIgPSBieXRlczsKKwllbHNlIHsKKwkJKih1MzIgKilwdHIgPSBieXRlczsKKwkJYmFycmllcigpOworCX0KKwlyZXR1cm4gcHRyICsgbGVuOworfQorCisjZGVmaW5lIEVNSVQoYnl0ZXMsIGxlbikJZG8geyBwcm9nID0gZW1pdF9jb2RlKHByb2csIGJ5dGVzLCBsZW4pOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIEVNSVQxKGIxKQkJRU1JVChiMSwgMSkKKyNkZWZpbmUgRU1JVDIoYjEsIGIyKQkJRU1JVCgoYjEpICsgKChiMikgPDwgOCksIDIpCisjZGVmaW5lIEVNSVQzKGIxLCBiMiwgYjMpCUVNSVQoKGIxKSArICgoYjIpIDw8IDgpICsgKChiMykgPDwgMTYpLCAzKQorI2RlZmluZSBFTUlUNChiMSwgYjIsIGIzLCBiNCkgICBFTUlUKChiMSkgKyAoKGIyKSA8PCA4KSArICgoYjMpIDw8IDE2KSArICgoYjQpIDw8IDI0KSwgNCkKKyNkZWZpbmUgRU1JVDFfb2ZmMzIoYjEsIG9mZikJZG8geyBFTUlUMShiMSk7IEVNSVQob2ZmLCA0KTt9IHdoaWxlICgwKQorCisjZGVmaW5lIENMRUFSX0EoKSBFTUlUMigweDMxLCAweGMwKSAvKiB4b3IgJWVheCwlZWF4ICovCisjZGVmaW5lIENMRUFSX1goKSBFTUlUMigweDMxLCAweGRiKSAvKiB4b3IgJWVieCwlZWJ4ICovCisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19pbW04KGludCB2YWx1ZSkKK3sKKwlyZXR1cm4gdmFsdWUgPD0gMTI3ICYmIHZhbHVlID49IC0xMjg7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19uZWFyKGludCBvZmZzZXQpCit7CisJcmV0dXJuIG9mZnNldCA8PSAxMjcgJiYgb2Zmc2V0ID49IC0xMjg7Cit9CisKKyNkZWZpbmUgRU1JVF9KTVAob2Zmc2V0KQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKG9mZnNldCkgewkJCQkJCQlcCisJCWlmIChpc19uZWFyKG9mZnNldCkpCQkJCQlcCisJCQlFTUlUMigweGViLCBvZmZzZXQpOyAvKiBqbXAgLitvZmY4ICovCQlcCisJCWVsc2UJCQkJCQkJXAorCQkJRU1JVDFfb2ZmMzIoMHhlOSwgb2Zmc2V0KTsgLyogam1wIC4rb2ZmMzIgKi8JXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qIGxpc3Qgb2YgeDg2IGNvbmQganVtcHMgb3Bjb2RlcyAoLiArIHM4KQorICogQWRkIDB4MTAgKGFuZCBhbiBleHRyYSAweDBmKSB0byBnZW5lcmF0ZSBmYXIganVtcHMgKC4gKyBzMzIpCisgKi8KKyNkZWZpbmUgWDg2X0pCICAweDcyCisjZGVmaW5lIFg4Nl9KQUUgMHg3MworI2RlZmluZSBYODZfSkUgIDB4NzQKKyNkZWZpbmUgWDg2X0pORSAweDc1CisjZGVmaW5lIFg4Nl9KQkUgMHg3NgorI2RlZmluZSBYODZfSkEgIDB4NzcKKworI2RlZmluZSBFTUlUX0NPTkRfSk1QKG9wLCBvZmZzZXQpCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlpZiAoaXNfbmVhcihvZmZzZXQpKQkJCQkJXAorCQlFTUlUMihvcCwgb2Zmc2V0KTsgLyoganh4IC4rb2ZmOCAqLwkJXAorCWVsc2UgewkJCQkJCQlcCisJCUVNSVQyKDB4MGYsIG9wICsgMHgxMCk7CQkJCVwKKwkJRU1JVChvZmZzZXQsIDQpOyAvKiBqeHggLitvZmYzMiAqLwkJXAorCX0JCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBDT05EX1NFTChDT0RFLCBUT1AsIEZPUCkJXAorCWNhc2UgQ09ERToJCQlcCisJCXRfb3AgPSBUT1A7CQlcCisJCWZfb3AgPSBGT1A7CQlcCisJCWdvdG8gY29uZF9icmFuY2gKKworCisjZGVmaW5lIFNFRU5fREFUQVJFRiAxIC8qIG1pZ2h0IGNhbGwgZXh0ZXJuYWwgaGVscGVycyAqLworI2RlZmluZSBTRUVOX1hSRUcgICAgMiAvKiBlYnggaXMgdXNlZCAqLworI2RlZmluZSBTRUVOX01FTSAgICAgNCAvKiB1c2UgbWVtW10gZm9yIHRlbXBvcmFyeSBzdG9yYWdlICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBicGZfZmx1c2hfaWNhY2hlKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpCit7CisJbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOworCisJc2V0X2ZzKEtFUk5FTF9EUyk7CisJc21wX3dtYigpOworCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylzdGFydCwgKHVuc2lnbmVkIGxvbmcpZW5kKTsKKwlzZXRfZnMob2xkX2ZzKTsKK30KKworCit2b2lkIGJwZl9qaXRfY29tcGlsZShzdHJ1Y3Qgc2tfZmlsdGVyICpmcCkKK3sKKwl1OCB0ZW1wWzY0XTsKKwl1OCAqcHJvZzsKKwl1bnNpZ25lZCBpbnQgcHJvZ2xlbiwgb2xkcHJvZ2xlbiA9IDA7CisJaW50IGlsZW4sIGk7CisJaW50IHRfb2Zmc2V0LCBmX29mZnNldDsKKwl1OCB0X29wLCBmX29wLCBzZWVuID0gMCwgcGFzczsKKwl1OCAqaW1hZ2UgPSBOVUxMOworCXU4ICpmdW5jOworCWludCBwY19yZXQwID0gLTE7IC8qIGJwZiBpbmRleCBvZiBmaXJzdCBSRVQgIzAgaW5zdHJ1Y3Rpb24gKGlmIGFueSkgKi8KKwl1bnNpZ25lZCBpbnQgY2xlYW51cF9hZGRyOyAvKiBlcGlsb2d1ZSBjb2RlIG9mZnNldCAqLworCXVuc2lnbmVkIGludCAqYWRkcnM7CisJY29uc3Qgc3RydWN0IHNvY2tfZmlsdGVyICpmaWx0ZXIgPSBmcC0+aW5zbnM7CisJaW50IGZsZW4gPSBmcC0+bGVuOworCisJaWYgKCFicGZfaml0X2VuYWJsZSkKKwkJcmV0dXJuOworCisJYWRkcnMgPSBrbWFsbG9jKGZsZW4gKiBzaXplb2YoKmFkZHJzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGFkZHJzID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIEJlZm9yZSBmaXJzdCBwYXNzLCBtYWtlIGEgcm91Z2ggZXN0aW1hdGlvbiBvZiBhZGRyc1tdCisJICogZWFjaCBicGYgaW5zdHJ1Y3Rpb24gaXMgdHJhbnNsYXRlZCB0byBsZXNzIHRoYW4gNjQgYnl0ZXMKKwkgKi8KKwlmb3IgKHByb2dsZW4gPSAwLCBpID0gMDsgaSA8IGZsZW47IGkrKykgeworCQlwcm9nbGVuICs9IDY0OworCQlhZGRyc1tpXSA9IHByb2dsZW47CisJfQorCWNsZWFudXBfYWRkciA9IHByb2dsZW47IC8qIGVwaWxvZ3VlIGFkZHJlc3MgKi8KKworCWZvciAocGFzcyA9IDA7IHBhc3MgPCAxMDsgcGFzcysrKSB7CisJCS8qIG5vIHByb2xvZ3VlL2VwaWxvZ3VlIGZvciB0cml2aWFsIGZpbHRlcnMgKFJFVCBzb21ldGhpbmcpICovCisJCXByb2dsZW4gPSAwOworCQlwcm9nID0gdGVtcDsKKworCQlpZiAoc2VlbikgeworCQkJRU1JVDQoMHg1NSwgMHg0OCwgMHg4OSwgMHhlNSk7IC8qIHB1c2ggJXJicDsgbW92ICVyc3AsJXJicCAqLworCQkJRU1JVDQoMHg0OCwgMHg4MywgMHhlYywgOTYpOwkvKiBzdWJxICAkOTYsJXJzcAkqLworCQkJLyogbm90ZSA6IG11c3Qgc2F2ZSAlcmJ4IGluIGNhc2UgYnBmX2Vycm9yIGlzIGhpdCAqLworCQkJaWYgKHNlZW4gJiAoU0VFTl9YUkVHIHwgU0VFTl9EQVRBUkVGKSkKKwkJCQlFTUlUNCgweDQ4LCAweDg5LCAweDVkLCAweGY4KTsgLyogbW92ICVyYngsIC04KCVyYnApICovCisJCQlpZiAoc2VlbiAmIFNFRU5fWFJFRykKKwkJCQlDTEVBUl9YKCk7IC8qIG1ha2Ugc3VyZSB3ZSBkb250IGxlZWsga2VybmVsIG1lbW9yeSAqLworCisJCQkvKgorCQkJICogSWYgdGhpcyBmaWx0ZXIgbmVlZHMgdG8gYWNjZXNzIHNrYiBkYXRhLAorCQkJICogbG9hZHMgcjkgYW5kIHI4IHdpdGggOgorCQkJICogIHI5ID0gc2tiLT5sZW4gLSBza2ItPmRhdGFfbGVuCisJCQkgKiAgcjggPSBza2ItPmRhdGEKKwkJCSAqLworCQkJaWYgKHNlZW4gJiBTRUVOX0RBVEFSRUYpIHsKKwkJCQlpZiAob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIGxlbikgPD0gMTI3KQorCQkJCQkvKiBtb3YgICAgb2ZmOCglcmRpKSwlcjlkICovCisJCQkJCUVNSVQ0KDB4NDQsIDB4OGIsIDB4NGYsIG9mZnNldG9mKHN0cnVjdCBza19idWZmLCBsZW4pKTsKKwkJCQllbHNlIHsKKwkJCQkJLyogbW92ICAgIG9mZjMyKCVyZGkpLCVyOWQgKi8KKwkJCQkJRU1JVDMoMHg0NCwgMHg4YiwgMHg4Zik7CisJCQkJCUVNSVQob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIGxlbiksIDQpOworCQkJCX0KKwkJCQlpZiAoaXNfaW1tOChvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgZGF0YV9sZW4pKSkKKwkJCQkJLyogc3ViICAgIG9mZjgoJXJkaSksJXI5ZCAqLworCQkJCQlFTUlUNCgweDQ0LCAweDJiLCAweDRmLCBvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgZGF0YV9sZW4pKTsKKwkJCQllbHNlIHsKKwkJCQkJRU1JVDMoMHg0NCwgMHgyYiwgMHg4Zik7CisJCQkJCUVNSVQob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIGRhdGFfbGVuKSwgNCk7CisJCQkJfQorCisJCQkJaWYgKGlzX2ltbTgob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIGRhdGEpKSkKKwkJCQkJLyogbW92IG9mZjgoJXJkaSksJXI4ICovCisJCQkJCUVNSVQ0KDB4NGMsIDB4OGIsIDB4NDcsIG9mZnNldG9mKHN0cnVjdCBza19idWZmLCBkYXRhKSk7CisJCQkJZWxzZSB7CisJCQkJCS8qIG1vdiBvZmYzMiglcmRpKSwlcjggKi8KKwkJCQkJRU1JVDMoMHg0YywgMHg4YiwgMHg4Nyk7CisJCQkJCUVNSVQob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIGRhdGEpLCA0KTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlzd2l0Y2ggKGZpbHRlclswXS5jb2RlKSB7CisJCWNhc2UgQlBGX1NfUkVUX0s6CisJCWNhc2UgQlBGX1NfTERfV19MRU46CisJCWNhc2UgQlBGX1NfQU5DX1BST1RPQ09MOgorCQljYXNlIEJQRl9TX0FOQ19JRklOREVYOgorCQljYXNlIEJQRl9TX0FOQ19NQVJLOgorCQljYXNlIEJQRl9TX0FOQ19SWEhBU0g6CisJCWNhc2UgQlBGX1NfQU5DX0NQVToKKwkJY2FzZSBCUEZfU19BTkNfUVVFVUU6CisJCWNhc2UgQlBGX1NfTERfV19BQlM6CisJCWNhc2UgQlBGX1NfTERfSF9BQlM6CisJCWNhc2UgQlBGX1NfTERfQl9BQlM6CisJCQkvKiBmaXJzdCBpbnN0cnVjdGlvbiBzZXRzIEEgcmVnaXN0ZXIgKG9yIGlzIFJFVCAnY29uc3RhbnQnKSAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBtYWtlIHN1cmUgd2UgZG9udCBsZWFrIGtlcm5lbCBpbmZvcm1hdGlvbiB0byB1c2VyICovCisJCQlDTEVBUl9BKCk7IC8qIEEgPSAwICovCisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgZmxlbjsgaSsrKSB7CisJCQl1bnNpZ25lZCBpbnQgSyA9IGZpbHRlcltpXS5rOworCisJCQlzd2l0Y2ggKGZpbHRlcltpXS5jb2RlKSB7CisJCQljYXNlIEJQRl9TX0FMVV9BRERfWDogLyogQSArPSBYOyAqLworCQkJCXNlZW4gfD0gU0VFTl9YUkVHOworCQkJCUVNSVQyKDB4MDEsIDB4ZDgpOwkJLyogYWRkICVlYngsJWVheCAqLworCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19BTFVfQUREX0s6IC8qIEEgKz0gSzsgKi8KKwkJCQlpZiAoIUspCisJCQkJCWJyZWFrOworCQkJCWlmIChpc19pbW04KEspKQorCQkJCQlFTUlUMygweDgzLCAweGMwLCBLKTsJLyogYWRkIGltbTgsJWVheCAqLworCQkJCWVsc2UKKwkJCQkJRU1JVDFfb2ZmMzIoMHgwNSwgSyk7CS8qIGFkZCBpbW0zMiwlZWF4ICovCisJCQkJYnJlYWs7CisJCQljYXNlIEJQRl9TX0FMVV9TVUJfWDogLyogQSAtPSBYOyAqLworCQkJCXNlZW4gfD0gU0VFTl9YUkVHOworCQkJCUVNSVQyKDB4MjksIDB4ZDgpOwkJLyogc3ViICAgICVlYngsJWVheCAqLworCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19BTFVfU1VCX0s6IC8qIEEgLT0gSyAqLworCQkJCWlmICghSykKKwkJCQkJYnJlYWs7CisJCQkJaWYgKGlzX2ltbTgoSykpCisJCQkJCUVNSVQzKDB4ODMsIDB4ZTgsIEspOyAvKiBzdWIgaW1tOCwlZWF4ICovCisJCQkJZWxzZQorCQkJCQlFTUlUMV9vZmYzMigweDJkLCBLKTsgLyogc3ViIGltbTMyLCVlYXggKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgQlBGX1NfQUxVX01VTF9YOiAvKiBBICo9IFg7ICovCisJCQkJc2VlbiB8PSBTRUVOX1hSRUc7CisJCQkJRU1JVDMoMHgwZiwgMHhhZiwgMHhjMyk7CS8qIGltdWwgJWVieCwlZWF4ICovCisJCQkJYnJlYWs7CisJCQljYXNlIEJQRl9TX0FMVV9NVUxfSzogLyogQSAqPSBLICovCisJCQkJaWYgKGlzX2ltbTgoSykpCisJCQkJCUVNSVQzKDB4NmIsIDB4YzAsIEspOyAvKiBpbXVsIGltbTgsJWVheCwlZWF4ICovCisJCQkJZWxzZSB7CisJCQkJCUVNSVQyKDB4NjksIDB4YzApOwkJLyogaW11bCBpbW0zMiwlZWF4ICovCisJCQkJCUVNSVQoSywgNCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19BTFVfRElWX1g6IC8qIEEgLz0gWDsgKi8KKwkJCQlzZWVuIHw9IFNFRU5fWFJFRzsKKwkJCQlFTUlUMigweDg1LCAweGRiKTsJLyogdGVzdCAlZWJ4LCVlYnggKi8KKwkJCQlpZiAocGNfcmV0MCAhPSAtMSkKKwkJCQkJRU1JVF9DT05EX0pNUChYODZfSkUsIGFkZHJzW3BjX3JldDBdIC0gKGFkZHJzW2ldIC0gNCkpOworCQkJCWVsc2UgeworCQkJCQlFTUlUX0NPTkRfSk1QKFg4Nl9KTkUsIDIgKyA1KTsKKwkJCQkJQ0xFQVJfQSgpOworCQkJCQlFTUlUMV9vZmYzMigweGU5LCBjbGVhbnVwX2FkZHIgLSAoYWRkcnNbaV0gLSA0KSk7IC8qIGptcCAuK29mZjMyICovCisJCQkJfQorCQkJCUVNSVQ0KDB4MzEsIDB4ZDIsIDB4ZjcsIDB4ZjMpOyAvKiB4b3IgJWVkeCwlZWR4OyBkaXYgJWVieCAqLworCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19BTFVfRElWX0s6IC8qIEEgPSByZWNpcHJvY2FsX2RpdmlkZShBLCBLKTsgKi8KKwkJCQlFTUlUMygweDQ4LCAweDY5LCAweGMwKTsgLyogaW11bCBpbW0zMiwlcmF4LCVyYXggKi8KKwkJCQlFTUlUKEssIDQpOworCQkJCUVNSVQ0KDB4NDgsIDB4YzEsIDB4ZTgsIDB4MjApOyAvKiBzaHIgJDB4MjAsJXJheCAqLworCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19BTFVfQU5EX1g6CisJCQkJc2VlbiB8PSBTRUVOX1hSRUc7CisJCQkJRU1JVDIoMHgyMSwgMHhkOCk7CQkvKiBhbmQgJWVieCwlZWF4ICovCisJCQkJYnJlYWs7CisJCQljYXNlIEJQRl9TX0FMVV9BTkRfSzoKKwkJCQlpZiAoSyA+PSAweEZGRkZGRjAwKSB7CisJCQkJCUVNSVQyKDB4MjQsIEsgJiAweEZGKTsgLyogYW5kIGltbTgsJWFsICovCisJCQkJfSBlbHNlIGlmIChLID49IDB4RkZGRjAwMDApIHsKKwkJCQkJRU1JVDIoMHg2NiwgMHgyNSk7CS8qIGFuZCBpbW0xNiwlYXggKi8KKwkJCQkJRU1JVDIoSywgMik7CisJCQkJfSBlbHNlIHsKKwkJCQkJRU1JVDFfb2ZmMzIoMHgyNSwgSyk7CS8qIGFuZCBpbW0zMiwlZWF4ICovCisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19BTFVfT1JfWDoKKwkJCQlzZWVuIHw9IFNFRU5fWFJFRzsKKwkJCQlFTUlUMigweDA5LCAweGQ4KTsJCS8qIG9yICVlYngsJWVheCAqLworCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19BTFVfT1JfSzoKKwkJCQlpZiAoaXNfaW1tOChLKSkKKwkJCQkJRU1JVDMoMHg4MywgMHhjOCwgSyk7IC8qIG9yIGltbTgsJWVheCAqLworCQkJCWVsc2UKKwkJCQkJRU1JVDFfb2ZmMzIoMHgwZCwgSyk7CS8qIG9yIGltbTMyLCVlYXggKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgQlBGX1NfQUxVX0xTSF9YOiAvKiBBIDw8PSBYOyAqLworCQkJCXNlZW4gfD0gU0VFTl9YUkVHOworCQkJCUVNSVQ0KDB4ODksIDB4ZDksIDB4ZDMsIDB4ZTApOwkvKiBtb3YgJWVieCwlZWN4OyBzaGwgJWNsLCVlYXggKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgQlBGX1NfQUxVX0xTSF9LOgorCQkJCWlmIChLID09IDApCisJCQkJCWJyZWFrOworCQkJCWVsc2UgaWYgKEsgPT0gMSkKKwkJCQkJRU1JVDIoMHhkMSwgMHhlMCk7IC8qIHNobCAlZWF4ICovCisJCQkJZWxzZQorCQkJCQlFTUlUMygweGMxLCAweGUwLCBLKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQlBGX1NfQUxVX1JTSF9YOiAvKiBBID4+PSBYOyAqLworCQkJCXNlZW4gfD0gU0VFTl9YUkVHOworCQkJCUVNSVQ0KDB4ODksIDB4ZDksIDB4ZDMsIDB4ZTgpOwkvKiBtb3YgJWVieCwlZWN4OyBzaHIgJWNsLCVlYXggKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgQlBGX1NfQUxVX1JTSF9LOiAvKiBBID4+PSBLOyAqLworCQkJCWlmIChLID09IDApCisJCQkJCWJyZWFrOworCQkJCWVsc2UgaWYgKEsgPT0gMSkKKwkJCQkJRU1JVDIoMHhkMSwgMHhlOCk7IC8qIHNociAlZWF4ICovCisJCQkJZWxzZQorCQkJCQlFTUlUMygweGMxLCAweGU4LCBLKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQlBGX1NfQUxVX05FRzoKKwkJCQlFTUlUMigweGY3LCAweGQ4KTsJCS8qIG5lZyAlZWF4ICovCisJCQkJYnJlYWs7CisJCQljYXNlIEJQRl9TX1JFVF9LOgorCQkJCWlmICghSykgeworCQkJCQlpZiAocGNfcmV0MCA9PSAtMSkKKwkJCQkJCXBjX3JldDAgPSBpOworCQkJCQlDTEVBUl9BKCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJRU1JVDFfb2ZmMzIoMHhiOCwgSyk7CS8qIG1vdiAkaW1tMzIsJWVheCAqLworCQkJCX0KKwkJCQkvKiBmYWxsaW50byAqLworCQkJY2FzZSBCUEZfU19SRVRfQToKKwkJCQlpZiAoc2VlbikgeworCQkJCQlpZiAoaSAhPSBmbGVuIC0gMSkgeworCQkJCQkJRU1JVF9KTVAoY2xlYW51cF9hZGRyIC0gYWRkcnNbaV0pOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJaWYgKHNlZW4gJiBTRUVOX1hSRUcpCisJCQkJCQlFTUlUNCgweDQ4LCAweDhiLCAweDVkLCAweGY4KTsgIC8qIG1vdiAgLTgoJXJicCksJXJieCAqLworCQkJCQlFTUlUMSgweGM5KTsJCS8qIGxlYXZlcSAqLworCQkJCX0KKwkJCQlFTUlUMSgweGMzKTsJCS8qIHJldCAqLworCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19NSVNDX1RBWDogLyogWCA9IEEgKi8KKwkJCQlzZWVuIHw9IFNFRU5fWFJFRzsKKwkJCQlFTUlUMigweDg5LCAweGMzKTsJLyogbW92ICAgICVlYXgsJWVieCAqLworCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19NSVNDX1RYQTogLyogQSA9IFggKi8KKwkJCQlzZWVuIHw9IFNFRU5fWFJFRzsKKwkJCQlFTUlUMigweDg5LCAweGQ4KTsJLyogbW92ICAgICVlYngsJWVheCAqLworCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19MRF9JTU06IC8qIEEgPSBLICovCisJCQkJaWYgKCFLKQorCQkJCQlDTEVBUl9BKCk7CisJCQkJZWxzZQorCQkJCQlFTUlUMV9vZmYzMigweGI4LCBLKTsgLyogbW92ICRpbW0zMiwlZWF4ICovCisJCQkJYnJlYWs7CisJCQljYXNlIEJQRl9TX0xEWF9JTU06IC8qIFggPSBLICovCisJCQkJc2VlbiB8PSBTRUVOX1hSRUc7CisJCQkJaWYgKCFLKQorCQkJCQlDTEVBUl9YKCk7CisJCQkJZWxzZQorCQkJCQlFTUlUMV9vZmYzMigweGJiLCBLKTsgLyogbW92ICRpbW0zMiwlZWJ4ICovCisJCQkJYnJlYWs7CisJCQljYXNlIEJQRl9TX0xEX01FTTogLyogQSA9IG1lbVtLXSA6IG1vdiBvZmY4KCVyYnApLCVlYXggKi8KKwkJCQlzZWVuIHw9IFNFRU5fTUVNOworCQkJCUVNSVQzKDB4OGIsIDB4NDUsIDB4ZjAgLSBLKjQpOworCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19MRFhfTUVNOiAvKiBYID0gbWVtW0tdIDogbW92IG9mZjgoJXJicCksJWVieCAqLworCQkJCXNlZW4gfD0gU0VFTl9YUkVHIHwgU0VFTl9NRU07CisJCQkJRU1JVDMoMHg4YiwgMHg1ZCwgMHhmMCAtIEsqNCk7CisJCQkJYnJlYWs7CisJCQljYXNlIEJQRl9TX1NUOiAvKiBtZW1bS10gPSBBIDogbW92ICVlYXgsb2ZmOCglcmJwKSAqLworCQkJCXNlZW4gfD0gU0VFTl9NRU07CisJCQkJRU1JVDMoMHg4OSwgMHg0NSwgMHhmMCAtIEsqNCk7CisJCQkJYnJlYWs7CisJCQljYXNlIEJQRl9TX1NUWDogLyogbWVtW0tdID0gWCA6IG1vdiAlZWJ4LG9mZjgoJXJicCkgKi8KKwkJCQlzZWVuIHw9IFNFRU5fWFJFRyB8IFNFRU5fTUVNOworCQkJCUVNSVQzKDB4ODksIDB4NWQsIDB4ZjAgLSBLKjQpOworCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19MRF9XX0xFTjogLyoJQSA9IHNrYi0+bGVuOyAqLworCQkJCUJVSUxEX0JVR19PTihGSUVMRF9TSVpFT0Yoc3RydWN0IHNrX2J1ZmYsIGxlbikgIT0gNCk7CisJCQkJaWYgKGlzX2ltbTgob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIGxlbikpKQorCQkJCQkvKiBtb3YgICAgb2ZmOCglcmRpKSwlZWF4ICovCisJCQkJCUVNSVQzKDB4OGIsIDB4NDcsIG9mZnNldG9mKHN0cnVjdCBza19idWZmLCBsZW4pKTsKKwkJCQllbHNlIHsKKwkJCQkJRU1JVDIoMHg4YiwgMHg4Nyk7CisJCQkJCUVNSVQob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIGxlbiksIDQpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgQlBGX1NfTERYX1dfTEVOOiAvKiBYID0gc2tiLT5sZW47ICovCisJCQkJc2VlbiB8PSBTRUVOX1hSRUc7CisJCQkJaWYgKGlzX2ltbTgob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIGxlbikpKQorCQkJCQkvKiBtb3Ygb2ZmOCglcmRpKSwlZWJ4ICovCisJCQkJCUVNSVQzKDB4OGIsIDB4NWYsIG9mZnNldG9mKHN0cnVjdCBza19idWZmLCBsZW4pKTsKKwkJCQllbHNlIHsKKwkJCQkJRU1JVDIoMHg4YiwgMHg5Zik7CisJCQkJCUVNSVQob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIGxlbiksIDQpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgQlBGX1NfQU5DX1BST1RPQ09MOiAvKiBBID0gbnRvaHMoc2tiLT5wcm90b2NvbCk7ICovCisJCQkJQlVJTERfQlVHX09OKEZJRUxEX1NJWkVPRihzdHJ1Y3Qgc2tfYnVmZiwgcHJvdG9jb2wpICE9IDIpOworCQkJCWlmIChpc19pbW04KG9mZnNldG9mKHN0cnVjdCBza19idWZmLCBwcm90b2NvbCkpKSB7CisJCQkJCS8qIG1vdnp3bCBvZmY4KCVyZGkpLCVlYXggKi8KKwkJCQkJRU1JVDQoMHgwZiwgMHhiNywgMHg0Nywgb2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIHByb3RvY29sKSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJRU1JVDMoMHgwZiwgMHhiNywgMHg4Nyk7IC8qIG1vdnp3bCBvZmYzMiglcmRpKSwlZWF4ICovCisJCQkJCUVNSVQob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIHByb3RvY29sKSwgNCk7CisJCQkJfQorCQkJCUVNSVQyKDB4ODYsIDB4YzQpOyAvKiBudG9ocygpIDogeGNoZyAgICVhbCwlYWggKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgQlBGX1NfQU5DX0lGSU5ERVg6CisJCQkJaWYgKGlzX2ltbTgob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIGRldikpKSB7CisJCQkJCS8qIG1vdnEgb2ZmOCglcmRpKSwlcmF4ICovCisJCQkJCUVNSVQ0KDB4NDgsIDB4OGIsIDB4NDcsIG9mZnNldG9mKHN0cnVjdCBza19idWZmLCBkZXYpKTsKKwkJCQl9IGVsc2UgeworCQkJCQlFTUlUMygweDQ4LCAweDhiLCAweDg3KTsgLyogbW92cSBvZmYzMiglcmRpKSwlcmF4ICovCisJCQkJCUVNSVQob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIGRldiksIDQpOworCQkJCX0KKwkJCQlFTUlUMygweDQ4LCAweDg1LCAweGMwKTsJLyogdGVzdCAlcmF4LCVyYXggKi8KKwkJCQlFTUlUX0NPTkRfSk1QKFg4Nl9KRSwgY2xlYW51cF9hZGRyIC0gKGFkZHJzW2ldIC0gNikpOworCQkJCUJVSUxEX0JVR19PTihGSUVMRF9TSVpFT0Yoc3RydWN0IG5ldF9kZXZpY2UsIGlmaW5kZXgpICE9IDQpOworCQkJCUVNSVQyKDB4OGIsIDB4ODApOwkvKiBtb3Ygb2ZmMzIoJXJheCksJWVheCAqLworCQkJCUVNSVQob2Zmc2V0b2Yoc3RydWN0IG5ldF9kZXZpY2UsIGlmaW5kZXgpLCA0KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQlBGX1NfQU5DX01BUks6CisJCQkJQlVJTERfQlVHX09OKEZJRUxEX1NJWkVPRihzdHJ1Y3Qgc2tfYnVmZiwgbWFyaykgIT0gNCk7CisJCQkJaWYgKGlzX2ltbTgob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIG1hcmspKSkgeworCQkJCQkvKiBtb3Ygb2ZmOCglcmRpKSwlZWF4ICovCisJCQkJCUVNSVQzKDB4OGIsIDB4NDcsIG9mZnNldG9mKHN0cnVjdCBza19idWZmLCBtYXJrKSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJRU1JVDIoMHg4YiwgMHg4Nyk7CisJCQkJCUVNSVQob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIG1hcmspLCA0KTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIEJQRl9TX0FOQ19SWEhBU0g6CisJCQkJQlVJTERfQlVHX09OKEZJRUxEX1NJWkVPRihzdHJ1Y3Qgc2tfYnVmZiwgcnhoYXNoKSAhPSA0KTsKKwkJCQlpZiAoaXNfaW1tOChvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgcnhoYXNoKSkpIHsKKwkJCQkJLyogbW92IG9mZjgoJXJkaSksJWVheCAqLworCQkJCQlFTUlUMygweDhiLCAweDQ3LCBvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgcnhoYXNoKSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJRU1JVDIoMHg4YiwgMHg4Nyk7CisJCQkJCUVNSVQob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIHJ4aGFzaCksIDQpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgQlBGX1NfQU5DX1FVRVVFOgorCQkJCUJVSUxEX0JVR19PTihGSUVMRF9TSVpFT0Yoc3RydWN0IHNrX2J1ZmYsIHF1ZXVlX21hcHBpbmcpICE9IDIpOworCQkJCWlmIChpc19pbW04KG9mZnNldG9mKHN0cnVjdCBza19idWZmLCBxdWV1ZV9tYXBwaW5nKSkpIHsKKwkJCQkJLyogbW92endsIG9mZjgoJXJkaSksJWVheCAqLworCQkJCQlFTUlUNCgweDBmLCAweGI3LCAweDQ3LCBvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgcXVldWVfbWFwcGluZykpOworCQkJCX0gZWxzZSB7CisJCQkJCUVNSVQzKDB4MGYsIDB4YjcsIDB4ODcpOyAvKiBtb3Z6d2wgb2ZmMzIoJXJkaSksJWVheCAqLworCQkJCQlFTUlUKG9mZnNldG9mKHN0cnVjdCBza19idWZmLCBxdWV1ZV9tYXBwaW5nKSwgNCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19BTkNfQ1BVOgorI2lmZGVmIENPTkZJR19TTVAKKwkJCQlFTUlUNCgweDY1LCAweDhiLCAweDA0LCAweDI1KTsgLyogbW92ICVnczpvZmYzMiwlZWF4ICovCisJCQkJRU1JVCgodTMyKSh1bnNpZ25lZCBsb25nKSZjcHVfbnVtYmVyLCA0KTsgLyogQSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsgKi8KKyNlbHNlCisJCQkJQ0xFQVJfQSgpOworI2VuZGlmCisJCQkJYnJlYWs7CisJCQljYXNlIEJQRl9TX0xEX1dfQUJTOgorCQkJCWZ1bmMgPSBza19sb2FkX3dvcmQ7Citjb21tb25fbG9hZDoJCQlzZWVuIHw9IFNFRU5fREFUQVJFRjsKKwkJCQlpZiAoKGludClLIDwgMCkKKwkJCQkJZ290byBvdXQ7CisJCQkJdF9vZmZzZXQgPSBmdW5jIC0gKGltYWdlICsgYWRkcnNbaV0pOworCQkJCUVNSVQxX29mZjMyKDB4YmUsIEspOyAvKiBtb3YgaW1tMzIsJWVzaSAqLworCQkJCUVNSVQxX29mZjMyKDB4ZTgsIHRfb2Zmc2V0KTsgLyogY2FsbCAqLworCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19MRF9IX0FCUzoKKwkJCQlmdW5jID0gc2tfbG9hZF9oYWxmOworCQkJCWdvdG8gY29tbW9uX2xvYWQ7CisJCQljYXNlIEJQRl9TX0xEX0JfQUJTOgorCQkJCWZ1bmMgPSBza19sb2FkX2J5dGU7CisJCQkJZ290byBjb21tb25fbG9hZDsKKwkJCWNhc2UgQlBGX1NfTERYX0JfTVNIOgorCQkJCWlmICgoaW50KUsgPCAwKSB7CisJCQkJCWlmIChwY19yZXQwICE9IC0xKSB7CisJCQkJCQlFTUlUX0pNUChhZGRyc1twY19yZXQwXSAtIGFkZHJzW2ldKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCUNMRUFSX0EoKTsKKwkJCQkJRU1JVF9KTVAoY2xlYW51cF9hZGRyIC0gYWRkcnNbaV0pOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJc2VlbiB8PSBTRUVOX0RBVEFSRUYgfCBTRUVOX1hSRUc7CisJCQkJdF9vZmZzZXQgPSBza19sb2FkX2J5dGVfbXNoIC0gKGltYWdlICsgYWRkcnNbaV0pOworCQkJCUVNSVQxX29mZjMyKDB4YmUsIEspOwkvKiBtb3YgaW1tMzIsJWVzaSAqLworCQkJCUVNSVQxX29mZjMyKDB4ZTgsIHRfb2Zmc2V0KTsgLyogY2FsbCBza19sb2FkX2J5dGVfbXNoICovCisJCQkJYnJlYWs7CisJCQljYXNlIEJQRl9TX0xEX1dfSU5EOgorCQkJCWZ1bmMgPSBza19sb2FkX3dvcmRfaW5kOworY29tbW9uX2xvYWRfaW5kOgkJc2VlbiB8PSBTRUVOX0RBVEFSRUYgfCBTRUVOX1hSRUc7CisJCQkJdF9vZmZzZXQgPSBmdW5jIC0gKGltYWdlICsgYWRkcnNbaV0pOworCQkJCUVNSVQxX29mZjMyKDB4YmUsIEspOwkvKiBtb3YgaW1tMzIsJWVzaSAgICovCisJCQkJRU1JVDFfb2ZmMzIoMHhlOCwgdF9vZmZzZXQpOwkvKiBjYWxsIHNrX2xvYWRfeHh4X2luZCAqLworCQkJCWJyZWFrOworCQkJY2FzZSBCUEZfU19MRF9IX0lORDoKKwkJCQlmdW5jID0gc2tfbG9hZF9oYWxmX2luZDsKKwkJCQlnb3RvIGNvbW1vbl9sb2FkX2luZDsKKwkJCWNhc2UgQlBGX1NfTERfQl9JTkQ6CisJCQkJZnVuYyA9IHNrX2xvYWRfYnl0ZV9pbmQ7CisJCQkJZ290byBjb21tb25fbG9hZF9pbmQ7CisJCQljYXNlIEJQRl9TX0pNUF9KQToKKwkJCQl0X29mZnNldCA9IGFkZHJzW2kgKyBLXSAtIGFkZHJzW2ldOworCQkJCUVNSVRfSk1QKHRfb2Zmc2V0KTsKKwkJCQlicmVhazsKKwkJCUNPTkRfU0VMKEJQRl9TX0pNUF9KR1RfSywgWDg2X0pBLCBYODZfSkJFKTsKKwkJCUNPTkRfU0VMKEJQRl9TX0pNUF9KR0VfSywgWDg2X0pBRSwgWDg2X0pCKTsKKwkJCUNPTkRfU0VMKEJQRl9TX0pNUF9KRVFfSywgWDg2X0pFLCBYODZfSk5FKTsKKwkJCUNPTkRfU0VMKEJQRl9TX0pNUF9KU0VUX0ssWDg2X0pORSwgWDg2X0pFKTsKKwkJCUNPTkRfU0VMKEJQRl9TX0pNUF9KR1RfWCwgWDg2X0pBLCBYODZfSkJFKTsKKwkJCUNPTkRfU0VMKEJQRl9TX0pNUF9KR0VfWCwgWDg2X0pBRSwgWDg2X0pCKTsKKwkJCUNPTkRfU0VMKEJQRl9TX0pNUF9KRVFfWCwgWDg2X0pFLCBYODZfSk5FKTsKKwkJCUNPTkRfU0VMKEJQRl9TX0pNUF9KU0VUX1gsWDg2X0pORSwgWDg2X0pFKTsKKworY29uZF9icmFuY2g6CQkJZl9vZmZzZXQgPSBhZGRyc1tpICsgZmlsdGVyW2ldLmpmXSAtIGFkZHJzW2ldOworCQkJCXRfb2Zmc2V0ID0gYWRkcnNbaSArIGZpbHRlcltpXS5qdF0gLSBhZGRyc1tpXTsKKworCQkJCS8qIHNhbWUgdGFyZ2V0cywgY2FuIGF2b2lkIGRvaW5nIHRoZSB0ZXN0IDopICovCisJCQkJaWYgKGZpbHRlcltpXS5qdCA9PSBmaWx0ZXJbaV0uamYpIHsKKwkJCQkJRU1JVF9KTVAodF9vZmZzZXQpOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlzd2l0Y2ggKGZpbHRlcltpXS5jb2RlKSB7CisJCQkJY2FzZSBCUEZfU19KTVBfSkdUX1g6CisJCQkJY2FzZSBCUEZfU19KTVBfSkdFX1g6CisJCQkJY2FzZSBCUEZfU19KTVBfSkVRX1g6CisJCQkJCXNlZW4gfD0gU0VFTl9YUkVHOworCQkJCQlFTUlUMigweDM5LCAweGQ4KTsgLyogY21wICVlYngsJWVheCAqLworCQkJCQlicmVhazsKKwkJCQljYXNlIEJQRl9TX0pNUF9KU0VUX1g6CisJCQkJCXNlZW4gfD0gU0VFTl9YUkVHOworCQkJCQlFTUlUMigweDg1LCAweGQ4KTsgLyogdGVzdCAlZWJ4LCVlYXggKi8KKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBCUEZfU19KTVBfSkVRX0s6CisJCQkJCWlmIChLID09IDApIHsKKwkJCQkJCUVNSVQyKDB4ODUsIDB4YzApOyAvKiB0ZXN0ICAgJWVheCwlZWF4ICovCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCWNhc2UgQlBGX1NfSk1QX0pHVF9LOgorCQkJCWNhc2UgQlBGX1NfSk1QX0pHRV9LOgorCQkJCQlpZiAoSyA8PSAxMjcpCisJCQkJCQlFTUlUMygweDgzLCAweGY4LCBLKTsgLyogY21wIGltbTgsJWVheCAqLworCQkJCQllbHNlCisJCQkJCQlFTUlUMV9vZmYzMigweDNkLCBLKTsgLyogY21wIGltbTMyLCVlYXggKi8KKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBCUEZfU19KTVBfSlNFVF9LOgorCQkJCQlpZiAoSyA8PSAweEZGKQorCQkJCQkJRU1JVDIoMHhhOCwgSyk7IC8qIHRlc3QgaW1tOCwlYWwgKi8KKwkJCQkJZWxzZSBpZiAoIShLICYgMHhGRkZGMDBGRikpCisJCQkJCQlFTUlUMygweGY2LCAweGM0LCBLID4+IDgpOyAvKiB0ZXN0IGltbTgsJWFoICovCisJCQkJCWVsc2UgaWYgKEsgPD0gMHhGRkZGKSB7CisJCQkJCQlFTUlUMigweDY2LCAweGE5KTsgLyogdGVzdCBpbW0xNiwlYXggKi8KKwkJCQkJCUVNSVQoSywgMik7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlFTUlUMV9vZmYzMigweGE5LCBLKTsgLyogdGVzdCBpbW0zMiwlZWF4ICovCisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmIChmaWx0ZXJbaV0uanQgIT0gMCkgeworCQkJCQlpZiAoZmlsdGVyW2ldLmpmKQorCQkJCQkJdF9vZmZzZXQgKz0gaXNfbmVhcihmX29mZnNldCkgPyAyIDogNjsKKwkJCQkJRU1JVF9DT05EX0pNUCh0X29wLCB0X29mZnNldCk7CisJCQkJCWlmIChmaWx0ZXJbaV0uamYpCisJCQkJCQlFTUlUX0pNUChmX29mZnNldCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlFTUlUX0NPTkRfSk1QKGZfb3AsIGZfb2Zmc2V0KTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJLyogaG1tLCB0b28gY29tcGxleCBmaWx0ZXIsIGdpdmUgdXAgd2l0aCBqaXQgY29tcGlsZXIgKi8KKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWlsZW4gPSBwcm9nIC0gdGVtcDsKKwkJCWlmIChpbWFnZSkgeworCQkJCWlmICh1bmxpa2VseShwcm9nbGVuICsgaWxlbiA+IG9sZHByb2dsZW4pKSB7CisJCQkJCXByX2VycigiYnBiX2ppdF9jb21waWxlIGZhdGFsIGVycm9yXG4iKTsKKwkJCQkJa2ZyZWUoYWRkcnMpOworCQkJCQltb2R1bGVfZnJlZShOVUxMLCBpbWFnZSk7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQkJbWVtY3B5KGltYWdlICsgcHJvZ2xlbiwgdGVtcCwgaWxlbik7CisJCQl9CisJCQlwcm9nbGVuICs9IGlsZW47CisJCQlhZGRyc1tpXSA9IHByb2dsZW47CisJCQlwcm9nID0gdGVtcDsKKwkJfQorCQkvKiBsYXN0IGJwZiBpbnN0cnVjdGlvbiBpcyBhbHdheXMgYSBSRVQgOgorCQkgKiB1c2UgaXQgdG8gZ2l2ZSB0aGUgY2xlYW51cCBpbnN0cnVjdGlvbihzKSBhZGRyCisJCSAqLworCQljbGVhbnVwX2FkZHIgPSBwcm9nbGVuIC0gMTsgLyogcmV0ICovCisJCWlmIChzZWVuKQorCQkJY2xlYW51cF9hZGRyIC09IDE7IC8qIGxlYXZlcSAqLworCQlpZiAoc2VlbiAmIFNFRU5fWFJFRykKKwkJCWNsZWFudXBfYWRkciAtPSA0OyAvKiBtb3YgIC04KCVyYnApLCVyYnggKi8KKworCQlpZiAoaW1hZ2UpIHsKKwkJCVdBUk5fT04ocHJvZ2xlbiAhPSBvbGRwcm9nbGVuKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChwcm9nbGVuID09IG9sZHByb2dsZW4pIHsKKwkJCWltYWdlID0gbW9kdWxlX2FsbG9jKG1heF90KHVuc2lnbmVkIGludCwKKwkJCQkJCSAgIHByb2dsZW4sCisJCQkJCQkgICBzaXplb2Yoc3RydWN0IHdvcmtfc3RydWN0KSkpOworCQkJaWYgKCFpbWFnZSkKKwkJCQlnb3RvIG91dDsKKwkJfQorCQlvbGRwcm9nbGVuID0gcHJvZ2xlbjsKKwl9CisJaWYgKGJwZl9qaXRfZW5hYmxlID4gMSkKKwkJcHJfZXJyKCJmbGVuPSVkIHByb2dsZW49JXUgcGFzcz0lZCBpbWFnZT0lcFxuIiwKKwkJICAgICAgIGZsZW4sIHByb2dsZW4sIHBhc3MsIGltYWdlKTsKKworCWlmIChpbWFnZSkgeworCQlpZiAoYnBmX2ppdF9lbmFibGUgPiAxKQorCQkJcHJpbnRfaGV4X2R1bXAoS0VSTl9FUlIsICJKSVQgY29kZTogIiwgRFVNUF9QUkVGSVhfQUREUkVTUywKKwkJCQkgICAgICAgMTYsIDEsIGltYWdlLCBwcm9nbGVuLCBmYWxzZSk7CisKKwkJYnBmX2ZsdXNoX2ljYWNoZShpbWFnZSwgaW1hZ2UgKyBwcm9nbGVuKTsKKworCQlmcC0+YnBmX2Z1bmMgPSAodm9pZCAqKWltYWdlOworCX0KK291dDoKKwlrZnJlZShhZGRycyk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBqaXRfZnJlZV9kZWZlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmFyZykKK3sKKwltb2R1bGVfZnJlZShOVUxMLCBhcmcpOworfQorCisvKiBydW4gZnJvbSBzb2Z0aXJxLCB3ZSBtdXN0IHVzZSBhIHdvcmtfc3RydWN0IHRvIGNhbGwKKyAqIG1vZHVsZV9mcmVlKCkgZnJvbSBwcm9jZXNzIGNvbnRleHQKKyAqLwordm9pZCBicGZfaml0X2ZyZWUoc3RydWN0IHNrX2ZpbHRlciAqZnApCit7CisJaWYgKGZwLT5icGZfZnVuYyAhPSBza19ydW5fZmlsdGVyKSB7CisJCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayA9IChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKilmcC0+YnBmX2Z1bmM7CisKKwkJSU5JVF9XT1JLKHdvcmssIGppdF9mcmVlX2RlZmVyKTsKKwkJc2NoZWR1bGVfd29yayh3b3JrKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9iYWNrdHJhY2UuYyBiL2FyY2gveDg2L29wcm9maWxlL2JhY2t0cmFjZS5jCmluZGV4IDJkNDlkNGUuLmE1YjY0YWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL2JhY2t0cmFjZS5jCisrKyBiL2FyY2gveDg2L29wcm9maWxlL2JhY2t0cmFjZS5jCkBAIC0xNiwxNyArMTYsNiBAQAogI2luY2x1ZGUgPGFzbS9zdGFja3RyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAKLXN0YXRpYyB2b2lkIGJhY2t0cmFjZV93YXJuaW5nX3N5bWJvbCh2b2lkICpkYXRhLCBjaGFyICptc2csCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIHN5bWJvbCkKLXsKLQkvKiBJZ25vcmUgd2FybmluZ3MgKi8KLX0KLQotc3RhdGljIHZvaWQgYmFja3RyYWNlX3dhcm5pbmcodm9pZCAqZGF0YSwgY2hhciAqbXNnKQotewotCS8qIElnbm9yZSB3YXJuaW5ncyAqLwotfQotCiBzdGF0aWMgaW50IGJhY2t0cmFjZV9zdGFjayh2b2lkICpkYXRhLCBjaGFyICpuYW1lKQogewogCS8qIFllcywgd2Ugd2FudCBhbGwgc3RhY2tzICovCkBAIC00Miw4ICszMSw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHMgYmFja3RyYWNlX29wcyA9IHsKLQkud2FybmluZwk9IGJhY2t0cmFjZV93YXJuaW5nLAotCS53YXJuaW5nX3N5bWJvbAk9IGJhY2t0cmFjZV93YXJuaW5nX3N5bWJvbCwKIAkuc3RhY2sJCT0gYmFja3RyYWNlX3N0YWNrLAogCS5hZGRyZXNzCT0gYmFja3RyYWNlX2FkZHJlc3MsCiAJLndhbGtfc3RhY2sJPSBwcmludF9jb250ZXh0X3N0YWNrLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL3hlbi5jIGIvYXJjaC94ODYvcGNpL3hlbi5jCmluZGV4IGUzN2I0MDcuLjgyMTQ3MjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS94ZW4uYworKysgYi9hcmNoL3g4Ni9wY2kveGVuLmMKQEAgLTEwOCw3ICsxMDgsOCBAQAogCQl9CiAJCWlycSA9IHhlbl9iaW5kX3BpcnFfbXNpX3RvX2lycShkZXYsIG1zaWRlc2MsIHBpcnEsIDAsCiAJCQkJCSAgICAgICAodHlwZSA9PSBQQ0lfQ0FQX0lEX01TSVgpID8KLQkJCQkJICAgICAgICJtc2kteCIgOiAibXNpIik7CisJCQkJCSAgICAgICAibXNpLXgiIDogIm1zaSIsCisJCQkJCSAgICAgICBET01JRF9TRUxGKTsKIAkJaWYgKGlycSA8IDApCiAJCQlnb3RvIGVycm9yOwogCQlkZXZfZGJnKCZkZXYtPmRldiwKQEAgLTE0OCw3ICsxNDksOCBAQAogCQlpcnEgPSB4ZW5fYmluZF9waXJxX21zaV90b19pcnEoZGV2LCBtc2lkZXNjLCB2W2ldLCAwLAogCQkJCQkgICAgICAgKHR5cGUgPT0gUENJX0NBUF9JRF9NU0lYKSA/CiAJCQkJCSAgICAgICAicGNpZnJvbnQtbXNpLXgiIDoKLQkJCQkJICAgICAgICJwY2lmcm9udC1tc2kiKTsKKwkJCQkJICAgICAgICJwY2lmcm9udC1tc2kiLAorCQkJCQkJRE9NSURfU0VMRik7CiAJCWlmIChpcnEgPCAwKQogCQkJZ290byBmcmVlOwogCQlpKys7CkBAIC0xOTAsOSArMTkyLDE2IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1zaWRlc2MsICZkZXYtPm1zaV9saXN0LCBsaXN0KSB7CiAJCXN0cnVjdCBwaHlzZGV2X21hcF9waXJxIG1hcF9pcnE7CisJCWRvbWlkX3QgZG9taWQ7CisKKwkJZG9taWQgPSByZXQgPSB4ZW5fZmluZF9kZXZpY2VfZG9tYWluX293bmVyKGRldik7CisJCS8qIE4uQi4gQ2FzdGluZyBpbnQncyAtRU5PREVWIHRvIHVpbnQxNl90IHJlc3VsdHMgaW4gMHhGRkVELAorCQkgKiBoZW5jZSBjaGVjayByZXQgdmFsdWUgZm9yIDwgMC4gKi8KKwkJaWYgKHJldCA8IDApCisJCQlkb21pZCA9IERPTUlEX1NFTEY7CiAKIAkJbWVtc2V0KCZtYXBfaXJxLCAwLCBzaXplb2YobWFwX2lycSkpOwotCQltYXBfaXJxLmRvbWlkID0gRE9NSURfU0VMRjsKKwkJbWFwX2lycS5kb21pZCA9IGRvbWlkOwogCQltYXBfaXJxLnR5cGUgPSBNQVBfUElSUV9UWVBFX01TSTsKIAkJbWFwX2lycS5pbmRleCA9IC0xOwogCQltYXBfaXJxLnBpcnEgPSAtMTsKQEAgLTIxNSwxNCArMjI0LDE2IEBACiAKIAkJcmV0ID0gSFlQRVJWSVNPUl9waHlzZGV2X29wKFBIWVNERVZPUF9tYXBfcGlycSwgJm1hcF9pcnEpOwogCQlpZiAocmV0KSB7Ci0JCQlkZXZfd2FybigmZGV2LT5kZXYsICJ4ZW4gbWFwIGlycSBmYWlsZWQgJWRcbiIsIHJldCk7CisJCQlkZXZfd2FybigmZGV2LT5kZXYsICJ4ZW4gbWFwIGlycSBmYWlsZWQgJWQgZm9yICVkIGRvbWFpblxuIiwKKwkJCQkgcmV0LCBkb21pZCk7CiAJCQlnb3RvIG91dDsKIAkJfQogCiAJCXJldCA9IHhlbl9iaW5kX3BpcnFfbXNpX3RvX2lycShkZXYsIG1zaWRlc2MsCiAJCQkJCSAgICAgICBtYXBfaXJxLnBpcnEsIG1hcF9pcnEuaW5kZXgsCiAJCQkJCSAgICAgICAodHlwZSA9PSBQQ0lfQ0FQX0lEX01TSVgpID8KLQkJCQkJICAgICAgICJtc2kteCIgOiAibXNpIik7CisJCQkJCSAgICAgICAibXNpLXgiIDogIm1zaSIsCisJCQkJCQlkb21pZCk7CiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBvdXQ7CiAJfQpAQCAtNDYxLDMgKzQ3Miw3OCBAQAogCX0KIH0KICNlbmRpZgorCisjaWZkZWYgQ09ORklHX1hFTl9ET00wCitzdHJ1Y3QgeGVuX2RldmljZV9kb21haW5fb3duZXIgeworCWRvbWlkX3QgZG9tYWluOworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworc3RhdGljIERFRklORV9TUElOTE9DSyhkZXZfZG9tYWluX2xpc3Rfc3BpbmxvY2spOworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgZGV2X2RvbWFpbl9saXN0ID0gTElTVF9IRUFEX0lOSVQoZGV2X2RvbWFpbl9saXN0KTsKKworc3RhdGljIHN0cnVjdCB4ZW5fZGV2aWNlX2RvbWFpbl9vd25lciAqZmluZF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgeGVuX2RldmljZV9kb21haW5fb3duZXIgKm93bmVyOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShvd25lciwgJmRldl9kb21haW5fbGlzdCwgbGlzdCkgeworCQlpZiAob3duZXItPmRldiA9PSBkZXYpCisJCQlyZXR1cm4gb3duZXI7CisJfQorCXJldHVybiBOVUxMOworfQorCitpbnQgeGVuX2ZpbmRfZGV2aWNlX2RvbWFpbl9vd25lcihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCB4ZW5fZGV2aWNlX2RvbWFpbl9vd25lciAqb3duZXI7CisJaW50IGRvbWFpbiA9IC1FTk9ERVY7CisKKwlzcGluX2xvY2soJmRldl9kb21haW5fbGlzdF9zcGlubG9jayk7CisJb3duZXIgPSBmaW5kX2RldmljZShkZXYpOworCWlmIChvd25lcikKKwkJZG9tYWluID0gb3duZXItPmRvbWFpbjsKKwlzcGluX3VubG9jaygmZGV2X2RvbWFpbl9saXN0X3NwaW5sb2NrKTsKKwlyZXR1cm4gZG9tYWluOworfQorRVhQT1JUX1NZTUJPTF9HUEwoeGVuX2ZpbmRfZGV2aWNlX2RvbWFpbl9vd25lcik7CisKK2ludCB4ZW5fcmVnaXN0ZXJfZGV2aWNlX2RvbWFpbl9vd25lcihzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1aW50MTZfdCBkb21haW4pCit7CisJc3RydWN0IHhlbl9kZXZpY2VfZG9tYWluX293bmVyICpvd25lcjsKKworCW93bmVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHhlbl9kZXZpY2VfZG9tYWluX293bmVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvd25lcikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzcGluX2xvY2soJmRldl9kb21haW5fbGlzdF9zcGlubG9jayk7CisJaWYgKGZpbmRfZGV2aWNlKGRldikpIHsKKwkJc3Bpbl91bmxvY2soJmRldl9kb21haW5fbGlzdF9zcGlubG9jayk7CisJCWtmcmVlKG93bmVyKTsKKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQorCW93bmVyLT5kb21haW4gPSBkb21haW47CisJb3duZXItPmRldiA9IGRldjsKKwlsaXN0X2FkZF90YWlsKCZvd25lci0+bGlzdCwgJmRldl9kb21haW5fbGlzdCk7CisJc3Bpbl91bmxvY2soJmRldl9kb21haW5fbGlzdF9zcGlubG9jayk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh4ZW5fcmVnaXN0ZXJfZGV2aWNlX2RvbWFpbl9vd25lcik7CisKK2ludCB4ZW5fdW5yZWdpc3Rlcl9kZXZpY2VfZG9tYWluX293bmVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IHhlbl9kZXZpY2VfZG9tYWluX293bmVyICpvd25lcjsKKworCXNwaW5fbG9jaygmZGV2X2RvbWFpbl9saXN0X3NwaW5sb2NrKTsKKwlvd25lciA9IGZpbmRfZGV2aWNlKGRldik7CisJaWYgKCFvd25lcikgeworCQlzcGluX3VubG9jaygmZGV2X2RvbWFpbl9saXN0X3NwaW5sb2NrKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWxpc3RfZGVsKCZvd25lci0+bGlzdCk7CisJc3Bpbl91bmxvY2soJmRldl9kb21haW5fbGlzdF9zcGlubG9jayk7CisJa2ZyZWUob3duZXIpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoeGVuX3VucmVnaXN0ZXJfZGV2aWNlX2RvbWFpbl9vd25lcik7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL2NlNDEwMC9mYWxjb25mYWxscy5kdHMgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9jZTQxMDAvZmFsY29uZmFsbHMuZHRzCmluZGV4IDJkNmQyMjYuLmU3MGJlMzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BsYXRmb3JtL2NlNDEwMC9mYWxjb25mYWxscy5kdHMKKysrIGIvYXJjaC94ODYvcGxhdGZvcm0vY2U0MTAwL2ZhbGNvbmZhbGxzLmR0cwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAJCQkJCQkgICAicGNpY2xhc3MwYzAzIjsKIAogCQkJCQlyZWcgPSA8MHgxNjgwMCAweDAgMHgwIDB4MCAweDA+OwotCQkJCQlpbnRlcnJ1cHRzID0gPDIyIDM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDIyIDE+OwogCQkJCX07CiAKIAkJCQl1c2JAZCwxIHsKQEAgLTM1Nyw3ICszNTcsNyBAQAogCQkJCQkJICAgInBjaWNsYXNzMGMwMyI7CiAKIAkJCQkJcmVnID0gPDB4MTY5MDAgMHgwIDB4MCAweDAgMHgwPjsKLQkJCQkJaW50ZXJydXB0cyA9IDwyMiAzPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwyMiAxPjsKIAkJCQl9OwogCiAJCQkJc2F0YUBlLDAgewpAQCAtMzY3LDcgKzM2Nyw3IEBACiAJCQkJCQkgICAicGNpY2xhc3MwMTA2IjsKIAogCQkJCQlyZWcgPSA8MHgxNzAwMCAweDAgMHgwIDB4MCAweDA+OwotCQkJCQlpbnRlcnJ1cHRzID0gPDIzIDM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDIzIDE+OwogCQkJCX07CiAKIAkJCQlmbGFzaEBmLDAgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaS5jIGIvYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaS5jCmluZGV4IDBmZTI3ZDcuLmIzMGFhMjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuYworKysgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpLmMKQEAgLTE0NSwxNyArMTQ1LDYgQEAKIAkJICAgICAgIGRhdGFfc2l6ZSwgZGF0YSk7CiB9CiAKLXN0YXRpYyBlZmlfc3RhdHVzX3QgdmlydF9lZmlfc2V0X3ZpcnR1YWxfYWRkcmVzc19tYXAoCi0JdW5zaWduZWQgbG9uZyBtZW1vcnlfbWFwX3NpemUsCi0JdW5zaWduZWQgbG9uZyBkZXNjcmlwdG9yX3NpemUsCi0JdTMyIGRlc2NyaXB0b3JfdmVyc2lvbiwKLQllZmlfbWVtb3J5X2Rlc2NfdCAqdmlydHVhbF9tYXApCi17Ci0JcmV0dXJuIGVmaV9jYWxsX3ZpcnQ0KHNldF92aXJ0dWFsX2FkZHJlc3NfbWFwLAotCQkJICAgICAgbWVtb3J5X21hcF9zaXplLCBkZXNjcmlwdG9yX3NpemUsCi0JCQkgICAgICBkZXNjcmlwdG9yX3ZlcnNpb24sIHZpcnR1YWxfbWFwKTsKLX0KLQogc3RhdGljIGVmaV9zdGF0dXNfdCBfX2luaXQgcGh5c19lZmlfc2V0X3ZpcnR1YWxfYWRkcmVzc19tYXAoCiAJdW5zaWduZWQgbG9uZyBtZW1vcnlfbWFwX3NpemUsCiAJdW5zaWduZWQgbG9uZyBkZXNjcmlwdG9yX3NpemUsCkBAIC00NjgsMTEgKzQ1NywyNSBAQAogI2VuZGlmCiB9CiAKK3ZvaWQgX19pbml0IGVmaV9zZXRfZXhlY3V0YWJsZShlZmlfbWVtb3J5X2Rlc2NfdCAqbWQsIGJvb2wgZXhlY3V0YWJsZSkKK3sKKwl1NjQgYWRkciwgbnBhZ2VzOworCisJYWRkciA9IG1kLT52aXJ0X2FkZHI7CisJbnBhZ2VzID0gbWQtPm51bV9wYWdlczsKKworCW1lbXJhbmdlX2VmaV90b19uYXRpdmUoJmFkZHIsICZucGFnZXMpOworCisJaWYgKGV4ZWN1dGFibGUpCisJCXNldF9tZW1vcnlfeChhZGRyLCBucGFnZXMpOworCWVsc2UKKwkJc2V0X21lbW9yeV9ueChhZGRyLCBucGFnZXMpOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgcnVudGltZV9jb2RlX3BhZ2VfbWtleGVjKHZvaWQpCiB7CiAJZWZpX21lbW9yeV9kZXNjX3QgKm1kOwogCXZvaWQgKnA7Ci0JdTY0IGFkZHIsIG5wYWdlczsKIAogCS8qIE1ha2UgRUZJIHJ1bnRpbWUgc2VydmljZSBjb2RlIGFyZWEgZXhlY3V0YWJsZSAqLwogCWZvciAocCA9IG1lbW1hcC5tYXA7IHAgPCBtZW1tYXAubWFwX2VuZDsgcCArPSBtZW1tYXAuZGVzY19zaXplKSB7CkBAIC00ODEsMTAgKzQ4NCw3IEBACiAJCWlmIChtZC0+dHlwZSAhPSBFRklfUlVOVElNRV9TRVJWSUNFU19DT0RFKQogCQkJY29udGludWU7CiAKLQkJYWRkciA9IG1kLT52aXJ0X2FkZHI7Ci0JCW5wYWdlcyA9IG1kLT5udW1fcGFnZXM7Ci0JCW1lbXJhbmdlX2VmaV90b19uYXRpdmUoJmFkZHIsICZucGFnZXMpOwotCQlzZXRfbWVtb3J5X3goYWRkciwgbnBhZ2VzKTsKKwkJZWZpX3NldF9leGVjdXRhYmxlKG1kLCB0cnVlKTsKIAl9CiB9CiAKQEAgLTQ5OCwxMyArNDk4LDQyIEBACiAgKi8KIHZvaWQgX19pbml0IGVmaV9lbnRlcl92aXJ0dWFsX21vZGUodm9pZCkKIHsKLQllZmlfbWVtb3J5X2Rlc2NfdCAqbWQ7CisJZWZpX21lbW9yeV9kZXNjX3QgKm1kLCAqcHJldl9tZCA9IE5VTEw7CiAJZWZpX3N0YXR1c190IHN0YXR1czsKIAl1bnNpZ25lZCBsb25nIHNpemU7CiAJdTY0IGVuZCwgc3lzdGFiLCBhZGRyLCBucGFnZXMsIGVuZF9wZm47Ci0Jdm9pZCAqcCwgKnZhOworCXZvaWQgKnAsICp2YSwgKm5ld19tZW1tYXAgPSBOVUxMOworCWludCBjb3VudCA9IDA7CiAKIAllZmkuc3lzdGFiID0gTlVMTDsKKworCS8qIE1lcmdlIGNvbnRpZ3VvdXMgcmVnaW9ucyBvZiB0aGUgc2FtZSB0eXBlIGFuZCBhdHRyaWJ1dGUgKi8KKwlmb3IgKHAgPSBtZW1tYXAubWFwOyBwIDwgbWVtbWFwLm1hcF9lbmQ7IHAgKz0gbWVtbWFwLmRlc2Nfc2l6ZSkgeworCQl1NjQgcHJldl9zaXplOworCQltZCA9IHA7CisKKwkJaWYgKCFwcmV2X21kKSB7CisJCQlwcmV2X21kID0gbWQ7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChwcmV2X21kLT50eXBlICE9IG1kLT50eXBlIHx8CisJCSAgICBwcmV2X21kLT5hdHRyaWJ1dGUgIT0gbWQtPmF0dHJpYnV0ZSkgeworCQkJcHJldl9tZCA9IG1kOworCQkJY29udGludWU7CisJCX0KKworCQlwcmV2X3NpemUgPSBwcmV2X21kLT5udW1fcGFnZXMgPDwgRUZJX1BBR0VfU0hJRlQ7CisKKwkJaWYgKG1kLT5waHlzX2FkZHIgPT0gKHByZXZfbWQtPnBoeXNfYWRkciArIHByZXZfc2l6ZSkpIHsKKwkJCXByZXZfbWQtPm51bV9wYWdlcyArPSBtZC0+bnVtX3BhZ2VzOworCQkJbWQtPnR5cGUgPSBFRklfUkVTRVJWRURfVFlQRTsKKwkJCW1kLT5hdHRyaWJ1dGUgPSAwOworCQkJY29udGludWU7CisJCX0KKwkJcHJldl9tZCA9IG1kOworCX0KKwogCWZvciAocCA9IG1lbW1hcC5tYXA7IHAgPCBtZW1tYXAubWFwX2VuZDsgcCArPSBtZW1tYXAuZGVzY19zaXplKSB7CiAJCW1kID0gcDsKIAkJaWYgKCEobWQtPmF0dHJpYnV0ZSAmIEVGSV9NRU1PUllfUlVOVElNRSkpCkBAIC01NDEsMTUgKzU3MCwyMSBAQAogCQkJc3lzdGFiICs9IG1kLT52aXJ0X2FkZHIgLSBtZC0+cGh5c19hZGRyOwogCQkJZWZpLnN5c3RhYiA9IChlZmlfc3lzdGVtX3RhYmxlX3QgKikgKHVuc2lnbmVkIGxvbmcpIHN5c3RhYjsKIAkJfQorCQluZXdfbWVtbWFwID0ga3JlYWxsb2MobmV3X21lbW1hcCwKKwkJCQkgICAgICAoY291bnQgKyAxKSAqIG1lbW1hcC5kZXNjX3NpemUsCisJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJCW1lbWNweShuZXdfbWVtbWFwICsgKGNvdW50ICogbWVtbWFwLmRlc2Nfc2l6ZSksIG1kLAorCQkgICAgICAgbWVtbWFwLmRlc2Nfc2l6ZSk7CisJCWNvdW50Kys7CiAJfQogCiAJQlVHX09OKCFlZmkuc3lzdGFiKTsKIAogCXN0YXR1cyA9IHBoeXNfZWZpX3NldF92aXJ0dWFsX2FkZHJlc3NfbWFwKAotCQltZW1tYXAuZGVzY19zaXplICogbWVtbWFwLm5yX21hcCwKKwkJbWVtbWFwLmRlc2Nfc2l6ZSAqIGNvdW50LAogCQltZW1tYXAuZGVzY19zaXplLAogCQltZW1tYXAuZGVzY192ZXJzaW9uLAotCQltZW1tYXAucGh5c19tYXApOworCQkoZWZpX21lbW9yeV9kZXNjX3QgKilfX3BhKG5ld19tZW1tYXApKTsKIAogCWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHsKIAkJcHJpbnRrKEtFUk5fQUxFUlQgIlVuYWJsZSB0byBzd2l0Y2ggRUZJIGludG8gdmlydHVhbCBtb2RlICIKQEAgLTU3MiwxMSArNjA3LDEyIEBACiAJZWZpLnNldF92YXJpYWJsZSA9IHZpcnRfZWZpX3NldF92YXJpYWJsZTsKIAllZmkuZ2V0X25leHRfaGlnaF9tb25vX2NvdW50ID0gdmlydF9lZmlfZ2V0X25leHRfaGlnaF9tb25vX2NvdW50OwogCWVmaS5yZXNldF9zeXN0ZW0gPSB2aXJ0X2VmaV9yZXNldF9zeXN0ZW07Ci0JZWZpLnNldF92aXJ0dWFsX2FkZHJlc3NfbWFwID0gdmlydF9lZmlfc2V0X3ZpcnR1YWxfYWRkcmVzc19tYXA7CisJZWZpLnNldF92aXJ0dWFsX2FkZHJlc3NfbWFwID0gTlVMTDsKIAlpZiAoX19zdXBwb3J0ZWRfcHRlX21hc2sgJiBfUEFHRV9OWCkKIAkJcnVudGltZV9jb2RlX3BhZ2VfbWtleGVjKCk7CiAJZWFybHlfaW91bm1hcChtZW1tYXAubWFwLCBtZW1tYXAubnJfbWFwICogbWVtbWFwLmRlc2Nfc2l6ZSk7CiAJbWVtbWFwLm1hcCA9IE5VTEw7CisJa2ZyZWUobmV3X21lbW1hcCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzY0LmMgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzY0LmMKaW5kZXggYWMwNjIxYS4uMjY0OTQyNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaV82NC5jCisrKyBiL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmlfNjQuYwpAQCAtNDEsMjIgKzQxLDcgQEAKIHN0YXRpYyBwZ2RfdCBzYXZlX3BnZCBfX2luaXRkYXRhOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgZWZpX2ZsYWdzIF9faW5pdGRhdGE7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9tYXBwaW5nX3NldF9leGVjKHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkJCSAgdW5zaWduZWQgbG9uZyBlbmQsCi0JCQkJCSAgaW50IGV4ZWN1dGFibGUpCi17Ci0JdW5zaWduZWQgbG9uZyBudW1fcGFnZXM7Ci0KLQlzdGFydCAmPSBQTURfTUFTSzsKLQllbmQgPSAoZW5kICsgUE1EX1NJWkUgLSAxKSAmIFBNRF9NQVNLOwotCW51bV9wYWdlcyA9IChlbmQgLSBzdGFydCkgPj4gUEFHRV9TSElGVDsKLQlpZiAoZXhlY3V0YWJsZSkKLQkJc2V0X21lbW9yeV94KCh1bnNpZ25lZCBsb25nKV9fdmEoc3RhcnQpLCBudW1fcGFnZXMpOwotCWVsc2UKLQkJc2V0X21lbW9yeV9ueCgodW5zaWduZWQgbG9uZylfX3ZhKHN0YXJ0KSwgbnVtX3BhZ2VzKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X3J1bnRpbWVfY29kZV9tYXBwaW5nX3NldF9leGVjKGludCBleGVjdXRhYmxlKQorc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X2NvZGVfbWFwcGluZ19zZXRfZXhlYyhpbnQgZXhlY3V0YWJsZSkKIHsKIAllZmlfbWVtb3J5X2Rlc2NfdCAqbWQ7CiAJdm9pZCAqcDsKQEAgLTY3LDExICs1Miw4IEBACiAJLyogTWFrZSBFRkkgcnVudGltZSBzZXJ2aWNlIGNvZGUgYXJlYSBleGVjdXRhYmxlICovCiAJZm9yIChwID0gbWVtbWFwLm1hcDsgcCA8IG1lbW1hcC5tYXBfZW5kOyBwICs9IG1lbW1hcC5kZXNjX3NpemUpIHsKIAkJbWQgPSBwOwotCQlpZiAobWQtPnR5cGUgPT0gRUZJX1JVTlRJTUVfU0VSVklDRVNfQ09ERSkgewotCQkJdW5zaWduZWQgbG9uZyBlbmQ7Ci0JCQllbmQgPSBtZC0+cGh5c19hZGRyICsgKG1kLT5udW1fcGFnZXMgPDwgRUZJX1BBR0VfU0hJRlQpOwotCQkJZWFybHlfbWFwcGluZ19zZXRfZXhlYyhtZC0+cGh5c19hZGRyLCBlbmQsIGV4ZWN1dGFibGUpOwotCQl9CisJCWlmIChtZC0+dHlwZSA9PSBFRklfUlVOVElNRV9TRVJWSUNFU19DT0RFKQorCQkJZWZpX3NldF9leGVjdXRhYmxlKG1kLCBleGVjdXRhYmxlKTsKIAl9CiB9CiAKQEAgLTc5LDcgKzYxLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHZhZGRyZXNzOwogCi0JZWFybHlfcnVudGltZV9jb2RlX21hcHBpbmdfc2V0X2V4ZWMoMSk7CisJZWFybHlfY29kZV9tYXBwaW5nX3NldF9leGVjKDEpOwogCWxvY2FsX2lycV9zYXZlKGVmaV9mbGFncyk7CiAJdmFkZHJlc3MgPSAodW5zaWduZWQgbG9uZylfX3ZhKDB4MFVMKTsKIAlzYXZlX3BnZCA9ICpwZ2Rfb2Zmc2V0X2soMHgwVUwpOwpAQCAtOTUsNyArNzcsNyBAQAogCXNldF9wZ2QocGdkX29mZnNldF9rKDB4MFVMKSwgc2F2ZV9wZ2QpOwogCV9fZmx1c2hfdGxiX2FsbCgpOwogCWxvY2FsX2lycV9yZXN0b3JlKGVmaV9mbGFncyk7Ci0JZWFybHlfcnVudGltZV9jb2RlX21hcHBpbmdfc2V0X2V4ZWMoMCk7CisJZWFybHlfY29kZV9tYXBwaW5nX3NldF9leGVjKDApOwogfQogCiB2b2lkIF9faW9tZW0gKl9faW5pdCBlZmlfaW9yZW1hcCh1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLApAQCAtMTA3LDggKzg5LDEwIEBACiAJCXJldHVybiBpb3JlbWFwKHBoeXNfYWRkciwgc2l6ZSk7CiAKIAlsYXN0X21hcF9wZm4gPSBpbml0X21lbW9yeV9tYXBwaW5nKHBoeXNfYWRkciwgcGh5c19hZGRyICsgc2l6ZSk7Ci0JaWYgKChsYXN0X21hcF9wZm4gPDwgUEFHRV9TSElGVCkgPCBwaHlzX2FkZHIgKyBzaXplKQotCQlyZXR1cm4gTlVMTDsKKwlpZiAoKGxhc3RfbWFwX3BmbiA8PCBQQUdFX1NISUZUKSA8IHBoeXNfYWRkciArIHNpemUpIHsKKwkJdW5zaWduZWQgbG9uZyB0b3AgPSBsYXN0X21hcF9wZm4gPDwgUEFHRV9TSElGVDsKKwkJZWZpX2lvcmVtYXAodG9wLCBzaXplIC0gKHRvcCAtIHBoeXNfYWRkciksIHR5cGUpOworCX0KIAogCXJldHVybiAodm9pZCBfX2lvbWVtICopX192YShwaHlzX2FkZHIpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGxhdGZvcm0vbXJzdC9tcnN0LmMgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9tcnN0L21yc3QuYwppbmRleCAyNzVkYmMxLi43MDAwZTc0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wbGF0Zm9ybS9tcnN0L21yc3QuYworKysgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9tcnN0L21yc3QuYwpAQCAtMTk0LDcgKzE5NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgX19pbml0IG1yc3RfdGltZV9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgbXJzdF90aW1lX2luaXQodm9pZCkKIHsKIAlzZmlfdGFibGVfcGFyc2UoU0ZJX1NJR19NVE1SLCBOVUxMLCBOVUxMLCBzZmlfcGFyc2VfbXRtcik7CiAJc3dpdGNoIChtcnN0X3RpbWVyX29wdGlvbnMpIHsKQEAgLTIxNiw3ICsyMTYsNyBAQAogCWFwYnRfdGltZV9pbml0KCk7CiB9CiAKLXZvaWQgX19jcHVpbml0IG1yc3RfYXJjaF9zZXR1cCh2b2lkKQorc3RhdGljIHZvaWQgX19jcHVpbml0IG1yc3RfYXJjaF9zZXR1cCh2b2lkKQogewogCWlmIChib290X2NwdV9kYXRhLng4NiA9PSA2ICYmIGJvb3RfY3B1X2RhdGEueDg2X21vZGVsID09IDB4MjcpCiAJCV9fbXJzdF9jcHVfY2hpcCA9IE1SU1RfQ1BVX0NISVBfUEVOV0VMTDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL29scGMvTWFrZWZpbGUgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9vbHBjL01ha2VmaWxlCmluZGV4IGMyYThjYWIuLjgxYzVlMjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BsYXRmb3JtL29scGMvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvcGxhdGZvcm0vb2xwYy9NYWtlZmlsZQpAQCAtMSw0ICsxLDIgQEAKLW9iai0kKENPTkZJR19PTFBDKQkJKz0gb2xwYy5vCitvYmotJChDT05GSUdfT0xQQykJCSs9IG9scGMubyBvbHBjX29mdy5vIG9scGNfZHQubwogb2JqLSQoQ09ORklHX09MUENfWE8xKQkJKz0gb2xwYy14bzEubwotb2JqLSQoQ09ORklHX09MUEMpCQkrPSBvbHBjX29mdy5vCi1vYmotJChDT05GSUdfT0ZfUFJPTVRSRUUpCSs9IG9scGNfZHQubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGxhdGZvcm0vb2xwYy9vbHBjLmMgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9vbHBjL29scGMuYwppbmRleCBlZGFmM2ZlLi4wMDYwZmQ1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wbGF0Zm9ybS9vbHBjL29scGMuYworKysgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9vbHBjL29scGMuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KIAogI2luY2x1ZGUgPGFzbS9nZW9kZS5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgpAQCAtMTg3LDQxICsxODgsNDMgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG9scGNfZWNfY21kKTsKIAotc3RhdGljIGJvb2wgX19pbml0IGNoZWNrX29md19hcmNoaXRlY3R1cmUodm9pZCkKK3N0YXRpYyBib29sIF9faW5pdCBjaGVja19vZndfYXJjaGl0ZWN0dXJlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdCkKIHsKLQlzaXplX3QgcHJvcHNpemU7Ci0JY2hhciBvbHBjX2FyY2hbNV07Ci0JY29uc3Qgdm9pZCAqYXJnc1tdID0geyBOVUxMLCAiYXJjaGl0ZWN0dXJlIiwgb2xwY19hcmNoLCAodm9pZCAqKTUgfTsKLQl2b2lkICpyZXNbXSA9IHsgJnByb3BzaXplIH07CisJY29uc3QgY2hhciAqb2xwY19hcmNoOworCWludCBwcm9wc2l6ZTsKIAotCWlmIChvbHBjX29mdygiZ2V0cHJvcCIsIGFyZ3MsIHJlcykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJvZnc6IGdldHByb3AgY2FsbCBmYWlsZWQhXG4iKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KKwlvbHBjX2FyY2ggPSBvZl9nZXRfcHJvcGVydHkocm9vdCwgImFyY2hpdGVjdHVyZSIsICZwcm9wc2l6ZSk7CiAJcmV0dXJuIHByb3BzaXplID09IDUgJiYgc3RybmNtcCgiT0xQQyIsIG9scGNfYXJjaCwgNSkgPT0gMDsKIH0KIAotc3RhdGljIHUzMiBfX2luaXQgZ2V0X2JvYXJkX3JldmlzaW9uKHZvaWQpCitzdGF0aWMgdTMyIF9faW5pdCBnZXRfYm9hcmRfcmV2aXNpb24oc3RydWN0IGRldmljZV9ub2RlICpyb290KQogewotCXNpemVfdCBwcm9wc2l6ZTsKLQlfX2JlMzIgcmV2OwotCWNvbnN0IHZvaWQgKmFyZ3NbXSA9IHsgTlVMTCwgImJvYXJkLXJldmlzaW9uLWludCIsICZyZXYsICh2b2lkICopNCB9OwotCXZvaWQgKnJlc1tdID0geyAmcHJvcHNpemUgfTsKKwlpbnQgcHJvcHNpemU7CisJY29uc3QgX19iZTMyICpyZXY7CiAKLQlpZiAob2xwY19vZncoImdldHByb3AiLCBhcmdzLCByZXMpIHx8IHByb3BzaXplICE9IDQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJvZnc6IGdldHByb3AgY2FsbCBmYWlsZWQhXG4iKTsKLQkJcmV0dXJuIGNwdV90b19iZTMyKDApOwotCX0KLQlyZXR1cm4gYmUzMl90b19jcHUocmV2KTsKKwlyZXYgPSBvZl9nZXRfcHJvcGVydHkocm9vdCwgImJvYXJkLXJldmlzaW9uLWludCIsICZwcm9wc2l6ZSk7CisJaWYgKHByb3BzaXplICE9IDQpCisJCXJldHVybiAwOworCisJcmV0dXJuIGJlMzJfdG9fY3B1KCpyZXYpOwogfQogCiBzdGF0aWMgYm9vbCBfX2luaXQgcGxhdGZvcm1fZGV0ZWN0KHZvaWQpCiB7Ci0JaWYgKCFjaGVja19vZndfYXJjaGl0ZWN0dXJlKCkpCisJc3RydWN0IGRldmljZV9ub2RlICpyb290ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKKwlib29sIHN1Y2Nlc3M7CisKKwlpZiAoIXJvb3QpCiAJCXJldHVybiBmYWxzZTsKLQlvbHBjX3BsYXRmb3JtX2luZm8uZmxhZ3MgfD0gT0xQQ19GX1BSRVNFTlQ7Ci0Jb2xwY19wbGF0Zm9ybV9pbmZvLmJvYXJkcmV2ID0gZ2V0X2JvYXJkX3JldmlzaW9uKCk7Ci0JcmV0dXJuIHRydWU7CisKKwlzdWNjZXNzID0gY2hlY2tfb2Z3X2FyY2hpdGVjdHVyZShyb290KTsKKwlpZiAoc3VjY2VzcykgeworCQlvbHBjX3BsYXRmb3JtX2luZm8uYm9hcmRyZXYgPSBnZXRfYm9hcmRfcmV2aXNpb24ocm9vdCk7CisJCW9scGNfcGxhdGZvcm1faW5mby5mbGFncyB8PSBPTFBDX0ZfUFJFU0VOVDsKKwl9CisKKwlvZl9ub2RlX3B1dChyb290KTsKKwlyZXR1cm4gc3VjY2VzczsKIH0KIAogc3RhdGljIGludCBfX2luaXQgYWRkX3hvMV9wbGF0Zm9ybV9kZXZpY2VzKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wbGF0Zm9ybS9vbHBjL29scGNfZHQuYyBiL2FyY2gveDg2L3BsYXRmb3JtL29scGMvb2xwY19kdC5jCmluZGV4IDA0NGJkYTUuLmQzOWY2M2QgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BsYXRmb3JtL29scGMvb2xwY19kdC5jCisrKyBiL2FyY2gveDg2L3BsYXRmb3JtL29scGMvb2xwY19kdC5jCkBAIC0xOSw3ICsxOSw5IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wZHQuaD4KKyNpbmNsdWRlIDxhc20vb2xwYy5oPgogI2luY2x1ZGUgPGFzbS9vbHBjX29mdy5oPgogCiBzdGF0aWMgcGhhbmRsZSBfX2luaXQgb2xwY19kdF9nZXRzaWJsaW5nKHBoYW5kbGUgbm9kZSkKQEAgLTE4MCwzICsxODIsMjAgQEAKIAlwcl9pbmZvKCJQUk9NIERUOiBCdWlsdCBkZXZpY2UgdHJlZSB3aXRoICV1IGJ5dGVzIG9mIG1lbW9yeS5cbiIsCiAJCQlwcm9tX2Vhcmx5X2FsbG9jYXRlZCk7CiB9CisKKy8qIEEgbGlzdCBvZiBEVCBub2RlL2J1cyBtYXRjaGVzIHRoYXQgd2Ugd2FudCB0byBleHBvc2UgYXMgcGxhdGZvcm0gZGV2aWNlcyAqLworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgX19pbml0ZGF0YSBvZl9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm9scGMseG8xLWJhdHRlcnkiIH0sCisJeyAuY29tcGF0aWJsZSA9ICJvbHBjLHhvMS1kY29uIiB9LAorCXsgLmNvbXBhdGlibGUgPSAib2xwYyx4bzEtcnRjIiB9LAorCXt9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgb2xwY19jcmVhdGVfcGxhdGZvcm1fZGV2aWNlcyh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX29scGMoKSkKKwkJcmV0dXJuIG9mX3BsYXRmb3JtX2J1c19wcm9iZShOVUxMLCBvZl9pZHMsIE5VTEwpOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CitkZXZpY2VfaW5pdGNhbGwob2xwY19jcmVhdGVfcGxhdGZvcm1fZGV2aWNlcyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wbGF0Zm9ybS91di90bGJfdXYuYyBiL2FyY2gveDg2L3BsYXRmb3JtL3V2L3RsYl91di5jCmluZGV4IDdjYjY0MjQuLmM1OGUwZWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BsYXRmb3JtL3V2L3RsYl91di5jCisrKyBiL2FyY2gveDg2L3BsYXRmb3JtL3V2L3RsYl91di5jCkBAIC02OTksMTYgKzY5OSwxNyBAQAogCQkJCQkgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgdmEsIHVuc2lnbmVkIGludCBjcHUpCiB7Ci0JaW50IHRjcHU7Ci0JaW50IHV2aHViOwogCWludCBsb2NhbHMgPSAwOwogCWludCByZW1vdGVzID0gMDsKIAlpbnQgaHVicyA9IDA7CisJaW50IHRjcHU7CisJaW50IHRwbm9kZTsKIAlzdHJ1Y3QgYmF1X2Rlc2MgKmJhdV9kZXNjOwogCXN0cnVjdCBjcHVtYXNrICpmbHVzaF9tYXNrOwogCXN0cnVjdCBwdGNfc3RhdHMgKnN0YXQ7CiAJc3RydWN0IGJhdV9jb250cm9sICpiY3A7CiAJc3RydWN0IGJhdV9jb250cm9sICp0YmNwOworCXN0cnVjdCBodWJfYW5kX3Bub2RlICpocHA7CiAKIAkvKiBrZXJuZWwgd2FzIGJvb3RlZCAnbm9iYXUnICovCiAJaWYgKG5vYmF1KQpAQCAtNzUwLDExICs3NTEsMTggQEAKIAliYXVfZGVzYyArPSBVVl9JVEVNU19QRVJfREVTQ1JJUFRPUiAqIGJjcC0+dXZodWJfY3B1OwogCWJhdV91dmh1YnNfY2xlYXIoJmJhdV9kZXNjLT5kaXN0cmlidXRpb24sIFVWX0RJU1RSSUJVVElPTl9TSVpFKTsKIAotCS8qIGNwdSBzdGF0aXN0aWNzICovCiAJZm9yX2VhY2hfY3B1KHRjcHUsIGZsdXNoX21hc2spIHsKLQkJdXZodWIgPSB1dl9jcHVfdG9fYmxhZGVfaWQodGNwdSk7Ci0JCWJhdV91dmh1Yl9zZXQodXZodWIsICZiYXVfZGVzYy0+ZGlzdHJpYnV0aW9uKTsKLQkJaWYgKHV2aHViID09IGJjcC0+dXZodWIpCisJCS8qCisJCSAqIFRoZSBkaXN0cmlidXRpb24gdmVjdG9yIGlzIGEgYml0IG1hcCBvZiBwbm9kZXMsIHJlbGF0aXZlCisJCSAqIHRvIHRoZSBwYXJ0aXRpb24gYmFzZSBwbm9kZSAoYW5kIHRoZSBwYXJ0aXRpb24gYmFzZSBuYXNpZAorCQkgKiBpbiB0aGUgaGVhZGVyKS4KKwkJICogVHJhbnNsYXRlIGNwdSB0byBwbm9kZSBhbmQgaHViIHVzaW5nIGFuIGFycmF5IHN0b3JlZAorCQkgKiBpbiBsb2NhbCBtZW1vcnkuCisJCSAqLworCQlocHAgPSAmYmNwLT5zb2NrZXRfbWFzdGVyLT50YXJnZXRfaHViX2FuZF9wbm9kZVt0Y3B1XTsKKwkJdHBub2RlID0gaHBwLT5wbm9kZSAtIGJjcC0+cGFydGl0aW9uX2Jhc2VfcG5vZGU7CisJCWJhdV91dmh1Yl9zZXQodHBub2RlLCAmYmF1X2Rlc2MtPmRpc3RyaWJ1dGlvbik7CisJCWlmIChocHAtPnV2aHViID09IGJjcC0+dXZodWIpCiAJCQlsb2NhbHMrKzsKIAkJZWxzZQogCQkJcmVtb3RlcysrOwpAQCAtODU1LDcgKzg2Myw3IEBACiAgKiBhbiBpbnRlcnJ1cHQsIGJ1dCBjYXVzZXMgYW4gZXJyb3IgbWVzc2FnZSB0byBiZSByZXR1cm5lZCB0bwogICogdGhlIHNlbmRlci4KICAqLwotc3RhdGljIHZvaWQgdXZfZW5hYmxlX3RpbWVvdXRzKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgdXZfZW5hYmxlX3RpbWVvdXRzKHZvaWQpCiB7CiAJaW50IHV2aHViOwogCWludCBudXZodWJzOwpAQCAtMTMyNiwxMCArMTMzNCwxMCBAQAogfQogCiAvKgotICogaW5pdGlhbGl6ZSB0aGUgc2VuZGluZyBzaWRlJ3Mgc2VuZGluZyBidWZmZXJzCisgKiBJbml0aWFsaXplIHRoZSBzZW5kaW5nIHNpZGUncyBzZW5kaW5nIGJ1ZmZlcnMuCiAgKi8KIHN0YXRpYyB2b2lkCi11dl9hY3RpdmF0aW9uX2Rlc2NyaXB0b3JfaW5pdChpbnQgbm9kZSwgaW50IHBub2RlKQordXZfYWN0aXZhdGlvbl9kZXNjcmlwdG9yX2luaXQoaW50IG5vZGUsIGludCBwbm9kZSwgaW50IGJhc2VfcG5vZGUpCiB7CiAJaW50IGk7CiAJaW50IGNwdTsKQEAgLTEzNTIsMTEgKzEzNjAsMTEgQEAKIAluID0gcGEgPj4gdXZfbnNoaWZ0OwogCW0gPSBwYSAmIHV2X21tYXNrOwogCisJLyogdGhlIDE0LWJpdCBwbm9kZSAqLwogCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX0xCX0JBVV9TQl9ERVNDUklQVE9SX0JBU0UsCiAJCQkgICAgICAobiA8PCBVVl9ERVNDX0JBU0VfUE5PREVfU0hJRlQgfCBtKSk7Ci0KIAkvKgotCSAqIGluaXRpYWxpemluZyBhbGwgOCAoVVZfSVRFTVNfUEVSX0RFU0NSSVBUT1IpIGRlc2NyaXB0b3JzIGZvciBlYWNoCisJICogSW5pdGlhbGl6aW5nIGFsbCA4IChVVl9JVEVNU19QRVJfREVTQ1JJUFRPUikgZGVzY3JpcHRvcnMgZm9yIGVhY2gKIAkgKiBjcHUgZXZlbiB0aG91Z2ggd2Ugb25seSB1c2UgdGhlIGZpcnN0IG9uZTsgb25lIGRlc2NyaXB0b3IgY2FuCiAJICogZGVzY3JpYmUgYSBicm9hZGNhc3QgdG8gMjU2IHV2IGh1YnMuCiAJICovCkBAIC0xMzY1LDEyICsxMzczLDEzIEBACiAJCW1lbXNldChiZDIsIDAsIHNpemVvZihzdHJ1Y3QgYmF1X2Rlc2MpKTsKIAkJYmQyLT5oZWFkZXIuc3dfYWNrX2ZsYWcgPSAxOwogCQkvKgotCQkgKiBiYXNlX2Rlc3Rfbm9kZWlkIGlzIHRoZSBuYXNpZCBvZiB0aGUgZmlyc3QgdXZodWIKLQkJICogaW4gdGhlIHBhcnRpdGlvbi4gVGhlIGJpdCBtYXAgd2lsbCBpbmRpY2F0ZSB1dmh1YiBudW1iZXJzLAotCQkgKiB3aGljaCBhcmUgMC1OIGluIGEgcGFydGl0aW9uLiBQbm9kZXMgYXJlIHVuaXF1ZSBzeXN0ZW0td2lkZS4KKwkJICogVGhlIGJhc2VfZGVzdF9uYXNpZCBzZXQgaW4gdGhlIG1lc3NhZ2UgaGVhZGVyIGlzIHRoZSBuYXNpZAorCQkgKiBvZiB0aGUgZmlyc3QgdXZodWIgaW4gdGhlIHBhcnRpdGlvbi4gVGhlIGJpdCBtYXAgd2lsbAorCQkgKiBpbmRpY2F0ZSBkZXN0aW5hdGlvbiBwbm9kZSBudW1iZXJzIHJlbGF0aXZlIHRvIHRoYXQgYmFzZS4KKwkJICogVGhleSBtYXkgbm90IGJlIGNvbnNlY3V0aXZlIGlmIG5hc2lkIHN0cmlkaW5nIGlzIGJlaW5nIHVzZWQuCiAJCSAqLwotCQliZDItPmhlYWRlci5iYXNlX2Rlc3Rfbm9kZWlkID0gVVZfUE5PREVfVE9fTkFTSUQodXZfcGFydGl0aW9uX2Jhc2VfcG5vZGUpOwotCQliZDItPmhlYWRlci5kZXN0X3N1Ym5vZGVpZCA9IDB4MTA7IC8qIHRoZSBMQiAqLworCQliZDItPmhlYWRlci5iYXNlX2Rlc3RfbmFzaWQgPSBVVl9QTk9ERV9UT19OQVNJRChiYXNlX3Bub2RlKTsKKwkJYmQyLT5oZWFkZXIuZGVzdF9zdWJub2RlaWQgPSBVVl9MQl9TVUJOT0RFSUQ7CiAJCWJkMi0+aGVhZGVyLmNvbW1hbmQgPSBVVl9ORVRfRU5EUE9JTlRfSU5URDsKIAkJYmQyLT5oZWFkZXIuaW50X2JvdGggPSAxOwogCQkvKgpAQCAtMTQ0Miw3ICsxNDUxLDcgQEAKIC8qCiAgKiBJbml0aWFsaXphdGlvbiBvZiBlYWNoIFVWIGh1YidzIHN0cnVjdHVyZXMKICAqLwotc3RhdGljIHZvaWQgX19pbml0IHV2X2luaXRfdXZodWIoaW50IHV2aHViLCBpbnQgdmVjdG9yKQorc3RhdGljIHZvaWQgX19pbml0IHV2X2luaXRfdXZodWIoaW50IHV2aHViLCBpbnQgdmVjdG9yLCBpbnQgYmFzZV9wbm9kZSkKIHsKIAlpbnQgbm9kZTsKIAlpbnQgcG5vZGU7CkBAIC0xNDUwLDExICsxNDU5LDExIEBACiAKIAlub2RlID0gdXZodWJfdG9fZmlyc3Rfbm9kZSh1dmh1Yik7CiAJcG5vZGUgPSB1dl9ibGFkZV90b19wbm9kZSh1dmh1Yik7Ci0JdXZfYWN0aXZhdGlvbl9kZXNjcmlwdG9yX2luaXQobm9kZSwgcG5vZGUpOworCXV2X2FjdGl2YXRpb25fZGVzY3JpcHRvcl9pbml0KG5vZGUsIHBub2RlLCBiYXNlX3Bub2RlKTsKIAl1dl9wYXlsb2FkX3F1ZXVlX2luaXQobm9kZSwgcG5vZGUpOwogCS8qCi0JICogdGhlIGJlbG93IGluaXRpYWxpemF0aW9uIGNhbid0IGJlIGluIGZpcm13YXJlIGJlY2F1c2UgdGhlCi0JICogbWVzc2FnaW5nIElSUSB3aWxsIGJlIGRldGVybWluZWQgYnkgdGhlIE9TCisJICogVGhlIGJlbG93IGluaXRpYWxpemF0aW9uIGNhbid0IGJlIGluIGZpcm13YXJlIGJlY2F1c2UgdGhlCisJICogbWVzc2FnaW5nIElSUSB3aWxsIGJlIGRldGVybWluZWQgYnkgdGhlIE9TLgogCSAqLwogCWFwaWNpZCA9IHV2aHViX3RvX2ZpcnN0X2FwaWNpZCh1dmh1YikgfCB1dl9hcGljaWRfaGliaXRzOwogCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX0JBVV9EQVRBX0NPTkZJRywKQEAgLTE0OTEsMTAgKzE1MDAsMTEgQEAKIC8qCiAgKiBpbml0aWFsaXplIHRoZSBiYXVfY29udHJvbCBzdHJ1Y3R1cmUgZm9yIGVhY2ggY3B1CiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IHV2X2luaXRfcGVyX2NwdShpbnQgbnV2aHVicykKK3N0YXRpYyBpbnQgX19pbml0IHV2X2luaXRfcGVyX2NwdShpbnQgbnV2aHVicywgaW50IGJhc2VfcGFydF9wbm9kZSkKIHsKIAlpbnQgaTsKIAlpbnQgY3B1OworCWludCB0Y3B1OwogCWludCBwbm9kZTsKIAlpbnQgdXZodWI7CiAJaW50IGhhdmVfaG1hc3RlcjsKQEAgLTE1MjgsNiArMTUzOCwxNSBAQAogCQliY3AgPSAmcGVyX2NwdShiYXVfY29udHJvbCwgY3B1KTsKIAkJbWVtc2V0KGJjcCwgMCwgc2l6ZW9mKHN0cnVjdCBiYXVfY29udHJvbCkpOwogCQlwbm9kZSA9IHV2X2NwdV9odWJfaW5mbyhjcHUpLT5wbm9kZTsKKwkJaWYgKChwbm9kZSAtIGJhc2VfcGFydF9wbm9kZSkgPj0gVVZfRElTVFJJQlVUSU9OX1NJWkUpIHsKKwkJCXByaW50ayhLRVJOX0VNRVJHCisJCQkJImNwdSAlZCBwbm9kZSAlZC0lZCBiZXlvbmQgJWQ7IEJBVSBkaXNhYmxlZFxuIiwKKwkJCQljcHUsIHBub2RlLCBiYXNlX3BhcnRfcG5vZGUsCisJCQkJVVZfRElTVFJJQlVUSU9OX1NJWkUpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJYmNwLT5vc25vZGUgPSBjcHVfdG9fbm9kZShjcHUpOworCQliY3AtPnBhcnRpdGlvbl9iYXNlX3Bub2RlID0gdXZfcGFydGl0aW9uX2Jhc2VfcG5vZGU7CiAJCXV2aHViID0gdXZfY3B1X2h1Yl9pbmZvKGNwdSktPm51bWFfYmxhZGVfaWQ7CiAJCSoodXZodWJfbWFzayArICh1dmh1Yi84KSkgfD0gKDEgPDwgKHV2aHViJTgpKTsKIAkJYmRwID0gJnV2aHViX2Rlc2NzW3V2aHViXTsKQEAgLTE1MzYsNyArMTU1NSw3IEBACiAJCWJkcC0+cG5vZGUgPSBwbm9kZTsKIAkJLyoga2x1ZGdlOiAnYXNzdW1pbmcnIG9uZSBub2RlIHBlciBzb2NrZXQsIGFuZCBhc3N1bWluZyB0aGF0CiAJCSAgIGRpc2FibGluZyBhIHNvY2tldCBqdXN0IGxlYXZlcyBhIGdhcCBpbiBub2RlIG51bWJlcnMgKi8KLQkJc29ja2V0ID0gKGNwdV90b19ub2RlKGNwdSkgJiAxKTsKKwkJc29ja2V0ID0gYmNwLT5vc25vZGUgJiAxOwogCQliZHAtPnNvY2tldF9tYXNrIHw9ICgxIDw8IHNvY2tldCk7CiAJCXNkcCA9ICZiZHAtPnNvY2tldFtzb2NrZXRdOwogCQlzZHAtPmNwdV9udW1iZXJbc2RwLT5udW1fY3B1c10gPSBjcHU7CkBAIC0xNTg1LDYgKzE2MDQsMjAgQEAKIG5leHRzb2NrZXQ6CiAJCQlzb2NrZXQrKzsKIAkJCXNvY2tldF9tYXNrID0gKHNvY2tldF9tYXNrID4+IDEpOworCQkJLyogZWFjaCBzb2NrZXQgZ2V0cyBhIGxvY2FsIGFycmF5IG9mIHBub2Rlcy9odWJzICovCisJCQliY3AgPSBzbWFzdGVyOworCQkJYmNwLT50YXJnZXRfaHViX2FuZF9wbm9kZSA9IGttYWxsb2Nfbm9kZSgKKwkJCQlzaXplb2Yoc3RydWN0IGh1Yl9hbmRfcG5vZGUpICoKKwkJCQludW1fcG9zc2libGVfY3B1cygpLCBHRlBfS0VSTkVMLCBiY3AtPm9zbm9kZSk7CisJCQltZW1zZXQoYmNwLT50YXJnZXRfaHViX2FuZF9wbm9kZSwgMCwKKwkJCQlzaXplb2Yoc3RydWN0IGh1Yl9hbmRfcG5vZGUpICoKKwkJCQludW1fcG9zc2libGVfY3B1cygpKTsKKwkJCWZvcl9lYWNoX3ByZXNlbnRfY3B1KHRjcHUpIHsKKwkJCQliY3AtPnRhcmdldF9odWJfYW5kX3Bub2RlW3RjcHVdLnBub2RlID0KKwkJCQkJdXZfY3B1X2h1Yl9pbmZvKHRjcHUpLT5wbm9kZTsKKwkJCQliY3AtPnRhcmdldF9odWJfYW5kX3Bub2RlW3RjcHVdLnV2aHViID0KKwkJCQkJdXZfY3B1X2h1Yl9pbmZvKHRjcHUpLT5udW1hX2JsYWRlX2lkOworCQkJfQogCQl9CiAJfQogCWtmcmVlKHV2aHViX2Rlc2NzKTsKQEAgLTE2MzcsMjEgKzE2NzAsMjIgQEAKIAlzcGluX2xvY2tfaW5pdCgmZGlzYWJsZV9sb2NrKTsKIAljb25nZXN0ZWRfY3ljbGVzID0gbWljcm9zZWNfMl9jeWNsZXMoY29uZ2VzdGVkX3Jlc3BvbnNlX3VzKTsKIAotCWlmICh1dl9pbml0X3Blcl9jcHUobnV2aHVicykpIHsKKwl1dl9wYXJ0aXRpb25fYmFzZV9wbm9kZSA9IDB4N2ZmZmZmZmY7CisJZm9yICh1dmh1YiA9IDA7IHV2aHViIDwgbnV2aHViczsgdXZodWIrKykgeworCQlpZiAodXZfYmxhZGVfbnJfcG9zc2libGVfY3B1cyh1dmh1YikgJiYKKwkJCSh1dl9ibGFkZV90b19wbm9kZSh1dmh1YikgPCB1dl9wYXJ0aXRpb25fYmFzZV9wbm9kZSkpCisJCQl1dl9wYXJ0aXRpb25fYmFzZV9wbm9kZSA9IHV2X2JsYWRlX3RvX3Bub2RlKHV2aHViKTsKKwl9CisKKwlpZiAodXZfaW5pdF9wZXJfY3B1KG51dmh1YnMsIHV2X3BhcnRpdGlvbl9iYXNlX3Bub2RlKSkgewogCQlub2JhdSA9IDE7CiAJCXJldHVybiAwOwogCX0KIAotCXV2X3BhcnRpdGlvbl9iYXNlX3Bub2RlID0gMHg3ZmZmZmZmZjsKLQlmb3IgKHV2aHViID0gMDsgdXZodWIgPCBudXZodWJzOyB1dmh1YisrKQotCQlpZiAodXZfYmxhZGVfbnJfcG9zc2libGVfY3B1cyh1dmh1YikgJiYKLQkJCSh1dl9ibGFkZV90b19wbm9kZSh1dmh1YikgPCB1dl9wYXJ0aXRpb25fYmFzZV9wbm9kZSkpCi0JCQl1dl9wYXJ0aXRpb25fYmFzZV9wbm9kZSA9IHV2X2JsYWRlX3RvX3Bub2RlKHV2aHViKTsKLQogCXZlY3RvciA9IFVWX0JBVV9NRVNTQUdFOwogCWZvcl9lYWNoX3Bvc3NpYmxlX2JsYWRlKHV2aHViKQogCQlpZiAodXZfYmxhZGVfbnJfcG9zc2libGVfY3B1cyh1dmh1YikpCi0JCQl1dl9pbml0X3V2aHViKHV2aHViLCB2ZWN0b3IpOworCQkJdXZfaW5pdF91dmh1Yih1dmh1YiwgdmVjdG9yLCB1dl9wYXJ0aXRpb25fYmFzZV9wbm9kZSk7CiAKIAl1dl9lbmFibGVfdGltZW91dHMoKTsKIAlhbGxvY19pbnRyX2dhdGUodmVjdG9yLCB1dl9iYXVfbWVzc2FnZV9pbnRyMSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wbGF0Zm9ybS91di91dl90aW1lLmMgYi9hcmNoL3g4Ni9wbGF0Zm9ybS91di91dl90aW1lLmMKaW5kZXggOWRhZjVkMS4uMGViOTAxOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGxhdGZvcm0vdXYvdXZfdGltZS5jCisrKyBiL2FyY2gveDg2L3BsYXRmb3JtL3V2L3V2X3RpbWUuYwpAQCAtNDAsNyArNDAsNiBAQAogCS5yYXRpbmcJCT0gNDAwLAogCS5yZWFkCQk9IHV2X3JlYWRfcnRjLAogCS5tYXNrCQk9IChjeWNsZV90KVVWSF9SVENfUkVBTF9USU1FX0NMT0NLX01BU0ssCi0JLnNoaWZ0CQk9IDEwLAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKQEAgLTM3MiwxNCArMzcxLDExIEBACiAJaWYgKCFpc191dl9zeXN0ZW0oKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQljbG9ja3NvdXJjZV91di5tdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChzbl9ydGNfY3ljbGVzX3Blcl9zZWNvbmQsCi0JCQkJY2xvY2tzb3VyY2VfdXYuc2hpZnQpOwotCiAJLyogSWYgc2luZ2xlIGJsYWRlLCBwcmVmZXIgdHNjICovCiAJaWYgKHV2X251bV9wb3NzaWJsZV9ibGFkZXMoKSA9PSAxKQogCQljbG9ja3NvdXJjZV91di5yYXRpbmcgPSAyNTA7CiAKLQlyYyA9IGNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV91dik7CisJcmMgPSBjbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2xvY2tzb3VyY2VfdXYsIHNuX3J0Y19jeWNsZXNfcGVyX3NlY29uZCk7CiAJaWYgKHJjKQogCQlwcmludGsoS0VSTl9JTkZPICJVViBSVEMgY2xvY2tzb3VyY2UgZmFpbGVkIHJjICVkXG4iLCByYyk7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCmluZGV4IGUzYzZhMDYuLmRkN2I4OGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYworKysgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKQEAgLTIzNSw3ICsyMzUsNyBAQAogCSpkeCAmPSBtYXNrZWR4OwogfQogCi1zdGF0aWMgX19pbml0IHZvaWQgeGVuX2luaXRfY3B1aWRfbWFzayh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHhlbl9pbml0X2NwdWlkX21hc2sodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgYXgsIGJ4LCBjeCwgZHg7CiAJdW5zaWduZWQgaW50IHhzYXZlX21hc2s7CkBAIC00MDAsNyArNDAwLDcgQEAKIC8qCiAgKiBsb2FkX2dkdCBmb3IgZWFybHkgYm9vdCwgd2hlbiB0aGUgZ2R0IGlzIG9ubHkgbWFwcGVkIG9uY2UKICAqLwotc3RhdGljIF9faW5pdCB2b2lkIHhlbl9sb2FkX2dkdF9ib290KGNvbnN0IHN0cnVjdCBkZXNjX3B0ciAqZHRyKQorc3RhdGljIHZvaWQgX19pbml0IHhlbl9sb2FkX2dkdF9ib290KGNvbnN0IHN0cnVjdCBkZXNjX3B0ciAqZHRyKQogewogCXVuc2lnbmVkIGxvbmcgdmEgPSBkdHItPmFkZHJlc3M7CiAJdW5zaWduZWQgaW50IHNpemUgPSBkdHItPnNpemUgKyAxOwpAQCAtNjYyLDcgKzY2Miw3IEBACiAgKiBWZXJzaW9uIG9mIHdyaXRlX2dkdF9lbnRyeSBmb3IgdXNlIGF0IGVhcmx5IGJvb3QtdGltZSBuZWVkZWQgdG8KICAqIHVwZGF0ZSBhbiBlbnRyeSBhcyBzaW1wbHkgYXMgcG9zc2libGUuCiAgKi8KLXN0YXRpYyBfX2luaXQgdm9pZCB4ZW5fd3JpdGVfZ2R0X2VudHJ5X2Jvb3Qoc3RydWN0IGRlc2Nfc3RydWN0ICpkdCwgaW50IGVudHJ5LAorc3RhdGljIHZvaWQgX19pbml0IHhlbl93cml0ZV9nZHRfZW50cnlfYm9vdChzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmR0LCBpbnQgZW50cnksCiAJCQkJCSAgICBjb25zdCB2b2lkICpkZXNjLCBpbnQgdHlwZSkKIHsKIAlzd2l0Y2ggKHR5cGUpIHsKQEAgLTkzMywxOCArOTMzLDE4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwdl9pbmZvIHhlbl9pbmZvIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHB2X2luZm8geGVuX2luZm8gX19pbml0Y29uc3QgPSB7CiAJLnBhcmF2aXJ0X2VuYWJsZWQgPSAxLAogCS5zaGFyZWRfa2VybmVsX3BtZCA9IDAsCiAKIAkubmFtZSA9ICJYZW4iLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwdl9pbml0X29wcyB4ZW5faW5pdF9vcHMgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHZfaW5pdF9vcHMgeGVuX2luaXRfb3BzIF9faW5pdGNvbnN0ID0gewogCS5wYXRjaCA9IHhlbl9wYXRjaCwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZfY3B1X29wcyB4ZW5fY3B1X29wcyBfX2luaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwdl9jcHVfb3BzIHhlbl9jcHVfb3BzIF9faW5pdGNvbnN0ID0gewogCS5jcHVpZCA9IHhlbl9jcHVpZCwKIAogCS5zZXRfZGVidWdyZWcgPSB4ZW5fc2V0X2RlYnVncmVnLApAQCAtMTAwNCw3ICsxMDA0LDcgQEAKIAkuZW5kX2NvbnRleHRfc3dpdGNoID0geGVuX2VuZF9jb250ZXh0X3N3aXRjaCwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZfYXBpY19vcHMgeGVuX2FwaWNfb3BzIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHB2X2FwaWNfb3BzIHhlbl9hcGljX29wcyBfX2luaXRjb25zdCA9IHsKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKIAkuc3RhcnR1cF9pcGlfaG9vayA9IHBhcmF2aXJ0X25vcCwKICNlbmRpZgpAQCAtMTA1NSw3ICsxMDU1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBtYWNoaW5lX29wcyBfX2luaXRkYXRhIHhlbl9tYWNoaW5lX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWFjaGluZV9vcHMgeGVuX21hY2hpbmVfb3BzIF9faW5pdGNvbnN0ID0gewogCS5yZXN0YXJ0ID0geGVuX3Jlc3RhcnQsCiAJLmhhbHQgPSB4ZW5fbWFjaGluZV9oYWx0LAogCS5wb3dlcl9vZmYgPSB4ZW5fbWFjaGluZV9oYWx0LApAQCAtMTMzMiw3ICsxMzMyLDcgQEAKIAlyZXR1cm4gTk9USUZZX09LOwogfQogCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fY3B1aW5pdGRhdGEgeGVuX2h2bV9jcHVfbm90aWZpZXIgPSB7CitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHhlbl9odm1fY3B1X25vdGlmaWVyIF9fY3B1aW5pdGRhdGEgPSB7CiAJLm5vdGlmaWVyX2NhbGwJPSB4ZW5faHZtX2NwdV9ub3RpZnksCiB9OwogCkBAIC0xMzgxLDcgKzEzODEsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoeGVuX2h2bV9uZWVkX2xhcGljKTsKIAotY29uc3QgX19yZWZjb25zdCBzdHJ1Y3QgaHlwZXJ2aXNvcl94ODYgeDg2X2h5cGVyX3hlbl9odm0gPSB7Citjb25zdCBzdHJ1Y3QgaHlwZXJ2aXNvcl94ODYgeDg2X2h5cGVyX3hlbl9odm0gX19yZWZjb25zdCA9IHsKIAkubmFtZQkJCT0gIlhlbiBIVk0iLAogCS5kZXRlY3QJCQk9IHhlbl9odm1fcGxhdGZvcm0sCiAJLmluaXRfcGxhdGZvcm0JCT0geGVuX2h2bV9ndWVzdF9pbml0LApkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL2lycS5jIGIvYXJjaC94ODYveGVuL2lycS5jCmluZGV4IDZhNmZlODkuLjhiYmI0NjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9pcnEuYworKysgYi9hcmNoL3g4Ni94ZW4vaXJxLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCQl4ZW5fc2FmZV9oYWx0KCk7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZfaXJxX29wcyB4ZW5faXJxX29wcyBfX2luaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwdl9pcnFfb3BzIHhlbl9pcnFfb3BzIF9faW5pdGNvbnN0ID0gewogCS5zYXZlX2ZsID0gUFZfQ0FMTEVFX1NBVkUoeGVuX3NhdmVfZmwpLAogCS5yZXN0b3JlX2ZsID0gUFZfQ0FMTEVFX1NBVkUoeGVuX3Jlc3RvcmVfZmwpLAogCS5pcnFfZGlzYWJsZSA9IFBWX0NBTExFRV9TQVZFKHhlbl9pcnFfZGlzYWJsZSksCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vbW11LmMgYi9hcmNoL3g4Ni94ZW4vbW11LmMKaW5kZXggYTk5MWI1Ny4uMDJkNzUyNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL21tdS5jCisrKyBiL2FyY2gveDg2L3hlbi9tbXUuYwpAQCAtMTA1NCw3ICsxMDU0LDcgQEAKICAqIHRoYXQncyBiZWZvcmUgd2UgaGF2ZSBwYWdlIHN0cnVjdHVyZXMgdG8gc3RvcmUgdGhlIGJpdHMuICBTbyBkbyBhbGwKICAqIHRoZSBib29rLWtlZXBpbmcgbm93LgogICovCi1zdGF0aWMgX19pbml0IGludCB4ZW5fbWFya19waW5uZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBwYWdlICpwYWdlLAorc3RhdGljIGludCBfX2luaXQgeGVuX21hcmtfcGlubmVkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCQkgIGVudW0gcHRfbGV2ZWwgbGV2ZWwpCiB7CiAJU2V0UGFnZVBpbm5lZChwYWdlKTsKQEAgLTExODcsNyArMTE4Nyw3IEBACiAKIAlhY3RpdmVfbW0gPSBwZXJjcHVfcmVhZChjcHVfdGxic3RhdGUuYWN0aXZlX21tKTsKIAotCWlmIChhY3RpdmVfbW0gPT0gbW0pCisJaWYgKGFjdGl2ZV9tbSA9PSBtbSAmJiBwZXJjcHVfcmVhZChjcHVfdGxic3RhdGUuc3RhdGUpICE9IFRMQlNUQVRFX09LKQogCQlsZWF2ZV9tbShzbXBfcHJvY2Vzc29yX2lkKCkpOwogCiAJLyogSWYgdGhpcyBjcHUgc3RpbGwgaGFzIGEgc3RhbGUgY3IzIHJlZmVyZW5jZSwgdGhlbiBtYWtlIHN1cmUKQEAgLTEyNzEsMTMgKzEyNzEsMjcgQEAKIAlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CiB9CiAKLXN0YXRpYyBfX2luaXQgdm9pZCB4ZW5fcGFnZXRhYmxlX3NldHVwX3N0YXJ0KHBnZF90ICpiYXNlKQorc3RhdGljIHZvaWQgX19pbml0IHhlbl9wYWdldGFibGVfc2V0dXBfc3RhcnQocGdkX3QgKmJhc2UpCiB7CiB9CiAKK3N0YXRpYyBfX2luaXQgdm9pZCB4ZW5fbWFwcGluZ19wYWdldGFibGVfcmVzZXJ2ZSh1NjQgc3RhcnQsIHU2NCBlbmQpCit7CisJLyogcmVzZXJ2ZSB0aGUgcmFuZ2UgdXNlZCAqLworCW5hdGl2ZV9wYWdldGFibGVfcmVzZXJ2ZShzdGFydCwgZW5kKTsKKworCS8qIHNldCBhcyBSVyB0aGUgcmVzdCAqLworCXByaW50ayhLRVJOX0RFQlVHICJ4ZW46IHNldHRpbmcgUlcgdGhlIHJhbmdlICVsbHggLSAlbGx4XG4iLCBlbmQsCisJCQlQRk5fUEhZUyhwZ3RfYnVmX3RvcCkpOworCXdoaWxlIChlbmQgPCBQRk5fUEhZUyhwZ3RfYnVmX3RvcCkpIHsKKwkJbWFrZV9sb3dtZW1fcGFnZV9yZWFkd3JpdGUoX192YShlbmQpKTsKKwkJZW5kICs9IFBBR0VfU0laRTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIHhlbl9wb3N0X2FsbG9jYXRvcl9pbml0KHZvaWQpOwogCi1zdGF0aWMgX19pbml0IHZvaWQgeGVuX3BhZ2V0YWJsZV9zZXR1cF9kb25lKHBnZF90ICpiYXNlKQorc3RhdGljIHZvaWQgX19pbml0IHhlbl9wYWdldGFibGVfc2V0dXBfZG9uZShwZ2RfdCAqYmFzZSkKIHsKIAl4ZW5fc2V0dXBfc2hhcmVkX2luZm8oKTsKIAl4ZW5fcG9zdF9hbGxvY2F0b3JfaW5pdCgpOwpAQCAtMTQ3MywxNiArMTQ4NywyMCBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBfX2luaXQgcHRlX3QgbWFza19yd19wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHBmbiA9IHB0ZV9wZm4ocHRlKTsKLQogI2lmZGVmIENPTkZJR19YODZfMzIKK3N0YXRpYyBwdGVfdCBfX2luaXQgbWFza19yd19wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKK3sKIAkvKiBJZiB0aGVyZSdzIGFuIGV4aXN0aW5nIHB0ZSwgdGhlbiBkb24ndCBhbGxvdyBfUEFHRV9SVyB0byBiZSBzZXQgKi8KIAlpZiAocHRlX3ZhbF9tYSgqcHRlcCkgJiBfUEFHRV9QUkVTRU5UKQogCQlwdGUgPSBfX3B0ZV9tYSgoKHB0ZV92YWxfbWEoKnB0ZXApICYgX1BBR0VfUlcpIHwgfl9QQUdFX1JXKSAmCiAJCQkgICAgICAgcHRlX3ZhbF9tYShwdGUpKTsKLSNlbmRpZgorCisJcmV0dXJuIHB0ZTsKK30KKyNlbHNlIC8qIENPTkZJR19YODZfNjQgKi8KK3N0YXRpYyBwdGVfdCBfX2luaXQgbWFza19yd19wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBmbiA9IHB0ZV9wZm4ocHRlKTsKIAogCS8qCiAJICogSWYgdGhlIG5ldyBwZm4gaXMgd2l0aGluIHRoZSByYW5nZSBvZiB0aGUgbmV3bHkgYWxsb2NhdGVkCkBAIC0xNDkxLDE2ICsxNTA5LDE3IEBACiAJICogaXQgaXMgUk8uCiAJICovCiAJaWYgKCgoIWlzX2Vhcmx5X2lvcmVtYXBfcHRlcChwdGVwKSAmJgotCQkJcGZuID49IHBndF9idWZfc3RhcnQgJiYgcGZuIDwgcGd0X2J1Zl9lbmQpKSB8fAorCQkJcGZuID49IHBndF9idWZfc3RhcnQgJiYgcGZuIDwgcGd0X2J1Zl90b3ApKSB8fAogCQkJKGlzX2Vhcmx5X2lvcmVtYXBfcHRlcChwdGVwKSAmJiBwZm4gIT0gKHBndF9idWZfZW5kIC0gMSkpKQogCQlwdGUgPSBwdGVfd3Jwcm90ZWN0KHB0ZSk7CiAKIAlyZXR1cm4gcHRlOwogfQorI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KIAogLyogSW5pdC10aW1lIHNldF9wdGUgd2hpbGUgY29uc3RydWN0aW5nIGluaXRpYWwgcGFnZXRhYmxlcywgd2hpY2gKICAgIGRvZXNuJ3QgYWxsb3cgUk8gcGFnZXRhYmxlIHBhZ2VzIHRvIGJlIHJlbWFwcGVkIFJXICovCi1zdGF0aWMgX19pbml0IHZvaWQgeGVuX3NldF9wdGVfaW5pdChwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQorc3RhdGljIHZvaWQgX19pbml0IHhlbl9zZXRfcHRlX2luaXQocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKIHsKIAlwdGUgPSBtYXNrX3J3X3B0ZShwdGVwLCBwdGUpOwogCkBAIC0xNTE4LDcgKzE1MzcsNyBAQAogCiAvKiBFYXJseSBpbiBib290LCB3aGlsZSBzZXR0aW5nIHVwIHRoZSBpbml0aWFsIHBhZ2V0YWJsZSwgYXNzdW1lCiAgICBldmVyeXRoaW5nIGlzIHBpbm5lZC4gKi8KLXN0YXRpYyBfX2luaXQgdm9pZCB4ZW5fYWxsb2NfcHRlX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcGZuKQorc3RhdGljIHZvaWQgX19pbml0IHhlbl9hbGxvY19wdGVfaW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBwZm4pCiB7CiAjaWZkZWYgQ09ORklHX0ZMQVRNRU0KIAlCVUdfT04obWVtX21hcCk7CS8qIHNob3VsZCBvbmx5IGJlIHVzZWQgZWFybHkgKi8KQEAgLTE1MjgsNyArMTU0Nyw3IEBACiB9CiAKIC8qIFVzZWQgZm9yIHBtZCBhbmQgcHVkICovCi1zdGF0aWMgX19pbml0IHZvaWQgeGVuX2FsbG9jX3BtZF9pbml0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHBmbikKK3N0YXRpYyB2b2lkIF9faW5pdCB4ZW5fYWxsb2NfcG1kX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcGZuKQogewogI2lmZGVmIENPTkZJR19GTEFUTUVNCiAJQlVHX09OKG1lbV9tYXApOwkvKiBzaG91bGQgb25seSBiZSB1c2VkIGVhcmx5ICovCkBAIC0xNTM4LDEzICsxNTU3LDEzIEBACiAKIC8qIEVhcmx5IHJlbGVhc2VfcHRlIGFzc3VtZXMgdGhhdCBhbGwgcHRzIGFyZSBwaW5uZWQsIHNpbmNlIHRoZXJlJ3MKICAgIG9ubHkgaW5pdF9tbSBhbmQgYW55dGhpbmcgYXR0YWNoZWQgdG8gdGhhdCBpcyBwaW5uZWQuICovCi1zdGF0aWMgX19pbml0IHZvaWQgeGVuX3JlbGVhc2VfcHRlX2luaXQodW5zaWduZWQgbG9uZyBwZm4pCitzdGF0aWMgdm9pZCBfX2luaXQgeGVuX3JlbGVhc2VfcHRlX2luaXQodW5zaWduZWQgbG9uZyBwZm4pCiB7CiAJcGluX3BhZ2V0YWJsZV9wZm4oTU1VRVhUX1VOUElOX1RBQkxFLCBwZm4pOwogCW1ha2VfbG93bWVtX3BhZ2VfcmVhZHdyaXRlKF9fdmEoUEZOX1BIWVMocGZuKSkpOwogfQogCi1zdGF0aWMgX19pbml0IHZvaWQgeGVuX3JlbGVhc2VfcG1kX2luaXQodW5zaWduZWQgbG9uZyBwZm4pCitzdGF0aWMgdm9pZCBfX2luaXQgeGVuX3JlbGVhc2VfcG1kX2luaXQodW5zaWduZWQgbG9uZyBwZm4pCiB7CiAJbWFrZV9sb3dtZW1fcGFnZV9yZWFkd3JpdGUoX192YShQRk5fUEhZUyhwZm4pKSk7CiB9CkBAIC0xNjcwLDcgKzE2ODksNyBAQAogCQlCVUcoKTsKIH0KIAotc3RhdGljIF9faW5pdCB2b2lkIHhlbl9tYXBfaWRlbnRpdHlfZWFybHkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBtYXhfcGZuKQorc3RhdGljIHZvaWQgX19pbml0IHhlbl9tYXBfaWRlbnRpdHlfZWFybHkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBtYXhfcGZuKQogewogCXVuc2lnbmVkIHBtZGlkeCwgcHRlaWR4OwogCXVuc2lnbmVkIGlkZW50X3B0ZTsKQEAgLTE3NTMsNyArMTc3Miw3IEBACiAgKiBvZiB0aGUgcGh5c2ljYWwgbWFwcGluZyBvbmNlIHNvbWUgc29ydCBvZiBhbGxvY2F0b3IgaGFzIGJlZW4gc2V0CiAgKiB1cC4KICAqLwotX19pbml0IHBnZF90ICp4ZW5fc2V0dXBfa2VybmVsX3BhZ2V0YWJsZShwZ2RfdCAqcGdkLAorcGdkX3QgKiBfX2luaXQgeGVuX3NldHVwX2tlcm5lbF9wYWdldGFibGUocGdkX3QgKnBnZCwKIAkJCQkJIHVuc2lnbmVkIGxvbmcgbWF4X3BmbikKIHsKIAlwdWRfdCAqbDM7CkBAIC0xODI0LDcgKzE4NDMsNyBAQAogc3RhdGljIFJFU0VSVkVfQlJLX0FSUkFZKHBtZF90LCBpbml0aWFsX2tlcm5lbF9wbWQsIFBUUlNfUEVSX1BNRCk7CiBzdGF0aWMgUkVTRVJWRV9CUktfQVJSQVkocG1kX3QsIHN3YXBwZXJfa2VybmVsX3BtZCwgUFRSU19QRVJfUE1EKTsKIAotc3RhdGljIF9faW5pdCB2b2lkIHhlbl93cml0ZV9jcjNfaW5pdCh1bnNpZ25lZCBsb25nIGNyMykKK3N0YXRpYyB2b2lkIF9faW5pdCB4ZW5fd3JpdGVfY3IzX2luaXQodW5zaWduZWQgbG9uZyBjcjMpCiB7CiAJdW5zaWduZWQgbG9uZyBwZm4gPSBQRk5fRE9XTihfX3BhKHN3YXBwZXJfcGdfZGlyKSk7CiAKQEAgLTE4NjEsNyArMTg4MCw3IEBACiAJcHZfbW11X29wcy53cml0ZV9jcjMgPSAmeGVuX3dyaXRlX2NyMzsKIH0KIAotX19pbml0IHBnZF90ICp4ZW5fc2V0dXBfa2VybmVsX3BhZ2V0YWJsZShwZ2RfdCAqcGdkLAorcGdkX3QgKiBfX2luaXQgeGVuX3NldHVwX2tlcm5lbF9wYWdldGFibGUocGdkX3QgKnBnZCwKIAkJCQkJIHVuc2lnbmVkIGxvbmcgbWF4X3BmbikKIHsKIAlwbWRfdCAqa2VybmVsX3BtZDsKQEAgLTE5NjcsNyArMTk4Niw3IEBACiAjZW5kaWYKIH0KIAotX19pbml0IHZvaWQgeGVuX2lkZW50X21hcF9JU0Eodm9pZCkKK3ZvaWQgX19pbml0IHhlbl9pZGVudF9tYXBfSVNBKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBwYTsKIApAQCAtMTk5MCw3ICsyMDA5LDcgQEAKIAl4ZW5fZmx1c2hfdGxiKCk7CiB9CiAKLXN0YXRpYyBfX2luaXQgdm9pZCB4ZW5fcG9zdF9hbGxvY2F0b3JfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHhlbl9wb3N0X2FsbG9jYXRvcl9pbml0KHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1hFTl9ERUJVRwogCXB2X21tdV9vcHMubWFrZV9wdGUgPSBQVl9DQUxMRUVfU0FWRSh4ZW5fbWFrZV9wdGVfZGVidWcpOwpAQCAtMjAyNyw3ICsyMDQ2LDcgQEAKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHB2X21tdV9vcHMgeGVuX21tdV9vcHMgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHZfbW11X29wcyB4ZW5fbW11X29wcyBfX2luaXRjb25zdCA9IHsKIAkucmVhZF9jcjIgPSB4ZW5fcmVhZF9jcjIsCiAJLndyaXRlX2NyMiA9IHhlbl93cml0ZV9jcjIsCiAKQEAgLTIxMDAsNiArMjExOSw3IEBACiAKIHZvaWQgX19pbml0IHhlbl9pbml0X21tdV9vcHModm9pZCkKIHsKKwl4ODZfaW5pdC5tYXBwaW5nLnBhZ2V0YWJsZV9yZXNlcnZlID0geGVuX21hcHBpbmdfcGFnZXRhYmxlX3Jlc2VydmU7CiAJeDg2X2luaXQucGFnaW5nLnBhZ2V0YWJsZV9zZXR1cF9zdGFydCA9IHhlbl9wYWdldGFibGVfc2V0dXBfc3RhcnQ7CiAJeDg2X2luaXQucGFnaW5nLnBhZ2V0YWJsZV9zZXR1cF9kb25lID0geGVuX3BhZ2V0YWJsZV9zZXR1cF9kb25lOwogCXB2X21tdV9vcHMgPSB4ZW5fbW11X29wczsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9wMm0uYyBiL2FyY2gveDg2L3hlbi9wMm0uYwppbmRleCAxNDFlYjBkLi41OGVmZWI5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vcDJtLmMKKysrIGIvYXJjaC94ODYveGVuL3AybS5jCkBAIC01MjIsMTEgKzUyMiwyMCBAQAogCS8qIEJvdW5kYXJ5IGNyb3NzLW92ZXIgZm9yIHRoZSBlZGdlczogKi8KIAlpZiAoaWR4KSB7CiAJCXVuc2lnbmVkIGxvbmcgKnAybSA9IGV4dGVuZF9icmsoUEFHRV9TSVpFLCBQQUdFX1NJWkUpOworCQl1bnNpZ25lZCBsb25nICptaWRfbWZuX3A7CiAKIAkJcDJtX2luaXQocDJtKTsKIAogCQlwMm1fdG9wW3RvcGlkeF1bbWlkaWR4XSA9IHAybTsKIAorCQkvKiBGb3Igc2F2ZS9yZXN0b3JlIHdlIG5lZWQgdG8gTUZOIG9mIHRoZSBQMk0gc2F2ZWQgKi8KKwkJCisJCW1pZF9tZm5fcCA9IHAybV90b3BfbWZuX3BbdG9waWR4XTsKKwkJV0FSTihtaWRfbWZuX3BbbWlkaWR4XSAhPSB2aXJ0X3RvX21mbihwMm1fbWlzc2luZyksCisJCQkiUDJNX1RPUF9QWyVkXVslZF0gIT0gTUZOIG9mIHAybV9taXNzaW5nIVxuIiwKKwkJCXRvcGlkeCwgbWlkaWR4KTsKKwkJbWlkX21mbl9wW21pZGlkeF0gPSB2aXJ0X3RvX21mbihwMm0pOworCiAJfQogCXJldHVybiBpZHggIT0gMDsKIH0KQEAgLTU0OSwxMiArNTU4LDI5IEBACiAJCXBmbiArPSBQMk1fTUlEX1BFUl9QQUdFICogUDJNX1BFUl9QQUdFKQogCXsKIAkJdW5zaWduZWQgdG9waWR4ID0gcDJtX3RvcF9pbmRleChwZm4pOwotCQlpZiAocDJtX3RvcFt0b3BpZHhdID09IHAybV9taWRfbWlzc2luZykgewotCQkJdW5zaWduZWQgbG9uZyAqKm1pZCA9IGV4dGVuZF9icmsoUEFHRV9TSVpFLCBQQUdFX1NJWkUpOworCQl1bnNpZ25lZCBsb25nICptaWRfbWZuX3A7CisJCXVuc2lnbmVkIGxvbmcgKiptaWQ7CisKKwkJbWlkID0gcDJtX3RvcFt0b3BpZHhdOworCQltaWRfbWZuX3AgPSBwMm1fdG9wX21mbl9wW3RvcGlkeF07CisJCWlmIChtaWQgPT0gcDJtX21pZF9taXNzaW5nKSB7CisJCQltaWQgPSBleHRlbmRfYnJrKFBBR0VfU0laRSwgUEFHRV9TSVpFKTsKIAogCQkJcDJtX21pZF9pbml0KG1pZCk7CiAKIAkJCXAybV90b3BbdG9waWR4XSA9IG1pZDsKKworCQkJQlVHX09OKG1pZF9tZm5fcCAhPSBwMm1fbWlkX21pc3NpbmdfbWZuKTsKKwkJfQorCQkvKiBBbmQgdGhlIHNhdmUvcmVzdG9yZSBQMk0gdGFibGVzLi4gKi8KKwkJaWYgKG1pZF9tZm5fcCA9PSBwMm1fbWlkX21pc3NpbmdfbWZuKSB7CisJCQltaWRfbWZuX3AgPSBleHRlbmRfYnJrKFBBR0VfU0laRSwgUEFHRV9TSVpFKTsKKwkJCXAybV9taWRfbWZuX2luaXQobWlkX21mbl9wKTsKKworCQkJcDJtX3RvcF9tZm5fcFt0b3BpZHhdID0gbWlkX21mbl9wOworCQkJcDJtX3RvcF9tZm5bdG9waWR4XSA9IHZpcnRfdG9fbWZuKG1pZF9tZm5fcCk7CisJCQkvKiBOb3RlOiB3ZSBkb24ndCBzZXQgbWlkX21mbl9wW21pZGl4XSBoZXJlLAorCQkgCSAqIGxvb2sgaW4gX19lYXJseV9hbGxvY19wMm0gKi8KIAkJfQogCX0KIApAQCAtNjUwLDcgKzY3Niw3IEBACiB9CiAKIC8qIEFkZCBhbiBNRk4gb3ZlcnJpZGUgZm9yIGEgcGFydGljdWxhciBwYWdlICovCi1pbnQgbTJwX2FkZF9vdmVycmlkZSh1bnNpZ25lZCBsb25nIG1mbiwgc3RydWN0IHBhZ2UgKnBhZ2UpCitpbnQgbTJwX2FkZF9vdmVycmlkZSh1bnNpZ25lZCBsb25nIG1mbiwgc3RydWN0IHBhZ2UgKnBhZ2UsIGJvb2wgY2xlYXJfcHRlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBwZm47CkBAIC02NjIsNyArNjg4LDYgQEAKIAlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKSB7CiAJCWFkZHJlc3MgPSAodW5zaWduZWQgbG9uZylfX3ZhKHBmbiA8PCBQQUdFX1NISUZUKTsKIAkJcHRlcCA9IGxvb2t1cF9hZGRyZXNzKGFkZHJlc3MsICZsZXZlbCk7Ci0KIAkJaWYgKFdBUk4ocHRlcCA9PSBOVUxMIHx8IGxldmVsICE9IFBHX0xFVkVMXzRLLAogCQkJCQkibTJwX2FkZF9vdmVycmlkZTogcGZuICVseCBub3QgbWFwcGVkIiwgcGZuKSkKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtNjc0LDE4ICs2OTksMTcgQEAKIAlpZiAodW5saWtlbHkoIXNldF9waHlzX3RvX21hY2hpbmUocGZuLCBGT1JFSUdOX0ZSQU1FKG1mbikpKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKQorCWlmIChjbGVhcl9wdGUgJiYgIVBhZ2VIaWdoTWVtKHBhZ2UpKQogCQkvKiBKdXN0IHphcCBvbGQgbWFwcGluZyBmb3Igbm93ICovCiAJCXB0ZV9jbGVhcigmaW5pdF9tbSwgYWRkcmVzcywgcHRlcCk7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmbTJwX292ZXJyaWRlX2xvY2ssIGZsYWdzKTsKIAlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAgJm0ycF9vdmVycmlkZXNbbWZuX2hhc2gobWZuKV0pOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm0ycF9vdmVycmlkZV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KLQotaW50IG0ycF9yZW1vdmVfb3ZlcnJpZGUoc3RydWN0IHBhZ2UgKnBhZ2UpCitFWFBPUlRfU1lNQk9MX0dQTChtMnBfYWRkX292ZXJyaWRlKTsKK2ludCBtMnBfcmVtb3ZlX292ZXJyaWRlKHN0cnVjdCBwYWdlICpwYWdlLCBib29sIGNsZWFyX3B0ZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgbWZuOwpAQCAtNzEzLDcgKzczNyw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbTJwX292ZXJyaWRlX2xvY2ssIGZsYWdzKTsKIAlzZXRfcGh5c190b19tYWNoaW5lKHBmbiwgcGFnZS0+aW5kZXgpOwogCi0JaWYgKCFQYWdlSGlnaE1lbShwYWdlKSkKKwlpZiAoY2xlYXJfcHRlICYmICFQYWdlSGlnaE1lbShwYWdlKSkKIAkJc2V0X3B0ZV9hdCgmaW5pdF9tbSwgYWRkcmVzcywgcHRlcCwKIAkJCQlwZm5fcHRlKHBmbiwgUEFHRV9LRVJORUwpKTsKIAkJLyogTm8gdGxiIGZsdXNoIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBjYWxsZXIgYWxyZWFkeQpAQCAtNzIxLDYgKzc0NSw3IEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG0ycF9yZW1vdmVfb3ZlcnJpZGUpOwogCiBzdHJ1Y3QgcGFnZSAqbTJwX2ZpbmRfb3ZlcnJpZGUodW5zaWduZWQgbG9uZyBtZm4pCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vc2V0dXAuYyBiL2FyY2gveDg2L3hlbi9zZXR1cC5jCmluZGV4IGZhMDI2OWEuLmJlMWE0NjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9zZXR1cC5jCisrKyBiL2FyY2gveDg2L3hlbi9zZXR1cC5jCkBAIC01MCw3ICs1MCw3IEBACiAgKi8KICNkZWZpbmUgRVhUUkFfTUVNX1JBVElPCQkoMTApCiAKLXN0YXRpYyBfX2luaXQgdm9pZCB4ZW5fYWRkX2V4dHJhX21lbSh1bnNpZ25lZCBsb25nIHBhZ2VzKQorc3RhdGljIHZvaWQgX19pbml0IHhlbl9hZGRfZXh0cmFfbWVtKHVuc2lnbmVkIGxvbmcgcGFnZXMpCiB7CiAJdW5zaWduZWQgbG9uZyBwZm47CiAKQEAgLTE2Niw3ICsxNjYsNyBAQAogCQlpZiAobGFzdCA+IGVuZCkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChlbnRyeS0+dHlwZSA9PSBFODIwX1JBTSkgeworCQlpZiAoKGVudHJ5LT50eXBlID09IEU4MjBfUkFNKSB8fCAoZW50cnktPnR5cGUgPT0gRTgyMF9VTlVTQUJMRSkpIHsKIAkJCWlmIChzdGFydCA+IHN0YXJ0X3BjaSkKIAkJCQlpZGVudGl0eSArPSBzZXRfcGh5c19yYW5nZV9pZGVudGl0eSgKIAkJCQkJCVBGTl9VUChzdGFydF9wY2kpLCBQRk5fRE9XTihzdGFydCkpOwpAQCAtMjI3LDcgKzIyNywxMSBAQAogCiAJbWVtY3B5KG1hcF9yYXcsIG1hcCwgc2l6ZW9mKG1hcCkpOwogCWU4MjAubnJfbWFwID0gMDsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCiAJeGVuX2V4dHJhX21lbV9zdGFydCA9IG1lbV9lbmQ7CisjZWxzZQorCXhlbl9leHRyYV9tZW1fc3RhcnQgPSBtYXgoKDFVTEwgPDwgMzIpLCBtZW1fZW5kKTsKKyNlbmRpZgogCWZvciAoaSA9IDA7IGkgPCBtZW1tYXAubnJfZW50cmllczsgaSsrKSB7CiAJCXVuc2lnbmVkIGxvbmcgbG9uZyBlbmQ7CiAKQEAgLTMzNiw3ICszNDAsNyBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBfX2NwdWluaXQgaW50IHJlZ2lzdGVyX2NhbGxiYWNrKHVuc2lnbmVkIHR5cGUsIGNvbnN0IHZvaWQgKmZ1bmMpCitzdGF0aWMgaW50IF9fY3B1aW5pdCByZWdpc3Rlcl9jYWxsYmFjayh1bnNpZ25lZCB0eXBlLCBjb25zdCB2b2lkICpmdW5jKQogewogCXN0cnVjdCBjYWxsYmFja19yZWdpc3RlciBjYWxsYmFjayA9IHsKIAkJLnR5cGUgPSB0eXBlLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3NtcC5jIGIvYXJjaC94ODYveGVuL3NtcC5jCmluZGV4IDc2MmI0NmEuLjQxMDM4YzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9zbXAuYworKysgYi9hcmNoL3g4Ni94ZW4vc21wLmMKQEAgLTU2LDcgKzU2LDcgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBfX2NwdWluaXQgdm9pZCBjcHVfYnJpbmd1cCh2b2lkKQorc3RhdGljIHZvaWQgX19jcHVpbml0IGNwdV9icmluZ3VwKHZvaWQpCiB7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIApAQCAtODQsNyArODQsNyBAQAogCXdtYigpOwkJCS8qIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIG91dCAqLwogfQogCi1zdGF0aWMgX19jcHVpbml0IHZvaWQgY3B1X2JyaW5ndXBfYW5kX2lkbGUodm9pZCkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBjcHVfYnJpbmd1cF9hbmRfaWRsZSh2b2lkKQogewogCWNwdV9icmluZ3VwKCk7CiAJY3B1X2lkbGUoKTsKQEAgLTI0MSw3ICsyNDEsNyBAQAogCX0KIH0KIAotc3RhdGljIF9fY3B1aW5pdCBpbnQKK3N0YXRpYyBpbnQgX19jcHVpbml0CiBjcHVfaW5pdGlhbGl6ZV9jb250ZXh0KHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqaWRsZSkKIHsKIAlzdHJ1Y3QgdmNwdV9ndWVzdF9jb250ZXh0ICpjdHh0OwpAQCAtNDg1LDcgKzQ4NSw3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNtcF9vcHMgeGVuX3NtcF9vcHMgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc21wX29wcyB4ZW5fc21wX29wcyBfX2luaXRjb25zdCA9IHsKIAkuc21wX3ByZXBhcmVfYm9vdF9jcHUgPSB4ZW5fc21wX3ByZXBhcmVfYm9vdF9jcHUsCiAJLnNtcF9wcmVwYXJlX2NwdXMgPSB4ZW5fc21wX3ByZXBhcmVfY3B1cywKIAkuc21wX2NwdXNfZG9uZSA9IHhlbl9zbXBfY3B1c19kb25lLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3RpbWUuYyBiL2FyY2gveDg2L3hlbi90aW1lLmMKaW5kZXggMmUyZDM3MC4uNTE1OGM1MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3RpbWUuYworKysgYi9hcmNoL3g4Ni94ZW4vdGltZS5jCkBAIC0yNiw4ICsyNiw2IEBACiAKICNpbmNsdWRlICJ4ZW4tb3BzLmgiCiAKLSNkZWZpbmUgWEVOX1NISUZUIDIyCi0KIC8qIFhlbiBtYXkgZmlyZSBhIHRpbWVyIHVwIHRvIHRoaXMgbWFueSBucyBlYXJseSAqLwogI2RlZmluZSBUSU1FUl9TTE9QCTEwMDAwMAogI2RlZmluZSBOU19QRVJfVElDSwkoMTAwMDAwMDAwMExMIC8gSFopCkBAIC0yMTEsOCArMjA5LDYgQEAKIAkucmF0aW5nID0gNDAwLAogCS5yZWFkID0geGVuX2Nsb2Nrc291cmNlX2dldF9jeWNsZXMsCiAJLm1hc2sgPSB+MCwKLQkubXVsdCA9IDE8PFhFTl9TSElGVCwJCS8qIHRpbWUgZGlyZWN0bHkgaW4gbmFub3NlY29uZHMgKi8KLQkuc2hpZnQgPSBYRU5fU0hJRlQsCiAJLmZsYWdzID0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCkBAIC00MzksMTYgKzQzNSwxNiBAQAogCX0KIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwdl90aW1lX29wcyB4ZW5fdGltZV9vcHMgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHZfdGltZV9vcHMgeGVuX3RpbWVfb3BzIF9faW5pdGNvbnN0ID0gewogCS5zY2hlZF9jbG9jayA9IHhlbl9jbG9ja3NvdXJjZV9yZWFkLAogfTsKIAotc3RhdGljIF9faW5pdCB2b2lkIHhlbl90aW1lX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCB4ZW5fdGltZV9pbml0KHZvaWQpCiB7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlzdHJ1Y3QgdGltZXNwZWMgdHA7CiAKLQljbG9ja3NvdXJjZV9yZWdpc3RlcigmeGVuX2Nsb2Nrc291cmNlKTsKKwljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmeGVuX2Nsb2Nrc291cmNlLCBOU0VDX1BFUl9TRUMpOwogCiAJaWYgKEhZUEVSVklTT1JfdmNwdV9vcChWQ1BVT1Bfc3RvcF9wZXJpb2RpY190aW1lciwgY3B1LCBOVUxMKSA9PSAwKSB7CiAJCS8qIFN1Y2Nlc3NmdWxseSB0dXJuZWQgb2ZmIDEwMEh6IHRpY2ssIHNvIHdlIGhhdmUgdGhlCkBAIC00NjgsNyArNDY0LDcgQEAKIAl4ZW5fc2V0dXBfY3B1X2Nsb2NrZXZlbnRzKCk7CiB9CiAKLV9faW5pdCB2b2lkIHhlbl9pbml0X3RpbWVfb3BzKHZvaWQpCit2b2lkIF9faW5pdCB4ZW5faW5pdF90aW1lX29wcyh2b2lkKQogewogCXB2X3RpbWVfb3BzID0geGVuX3RpbWVfb3BzOwogCkBAIC00OTAsNyArNDg2LDcgQEAKIAl4ZW5fc2V0dXBfY3B1X2Nsb2NrZXZlbnRzKCk7CiB9CiAKLV9faW5pdCB2b2lkIHhlbl9odm1faW5pdF90aW1lX29wcyh2b2lkKQordm9pZCBfX2luaXQgeGVuX2h2bV9pbml0X3RpbWVfb3BzKHZvaWQpCiB7CiAJLyogdmVjdG9yIGNhbGxiYWNrIGlzIG5lZWRlZCBvdGhlcndpc2Ugd2UgY2Fubm90IHJlY2VpdmUgaW50ZXJydXB0cwogCSAqIG9uIGNwdSA+IDAgYW5kIGF0IHRoaXMgcG9pbnQgd2UgZG9uJ3Qga25vdyBob3cgbWFueSBjcHVzIGFyZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3hlbi1vcHMuaCBiL2FyY2gveDg2L3hlbi94ZW4tb3BzLmgKaW5kZXggMzExMmY1NS4uOTdkZmRjOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3hlbi1vcHMuaAorKysgYi9hcmNoL3g4Ni94ZW4veGVuLW9wcy5oCkBAIC03NCw3ICs3NCw3IEBACiAKICNpZmRlZiBDT05GSUdfUEFSQVZJUlRfU1BJTkxPQ0tTCiB2b2lkIF9faW5pdCB4ZW5faW5pdF9zcGlubG9ja3Modm9pZCk7Ci1fX2NwdWluaXQgdm9pZCB4ZW5faW5pdF9sb2NrX2NwdShpbnQgY3B1KTsKK3ZvaWQgX19jcHVpbml0IHhlbl9pbml0X2xvY2tfY3B1KGludCBjcHUpOwogdm9pZCB4ZW5fdW5pbml0X2xvY2tfY3B1KGludCBjcHUpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCB4ZW5faW5pdF9zcGlubG9ja3Modm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9pcnEuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC9pcnEuYwppbmRleCBkNzcwODlkLi40MzQwZWUwIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL2lycS5jCkBAIC02NCw0NyArNjQsNDEgQEAKIAogaW50IGFyY2hfc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgaW50IHByZWMpCiB7Ci0JaW50IGo7Ci0KLQlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJOTUkiKTsKLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCXNlcV9wcmludGYocCwgIiUxMHUgIiwgbm1pX2NvdW50KGopKTsKLQlzZXFfcHV0YyhwLCAnXG4nKTsKIAlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJFUlIiKTsKIAlzZXFfcHJpbnRmKHAsICIlMTB1XG4iLCBhdG9taWNfcmVhZCgmaXJxX2Vycl9jb3VudCkpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB4dGVuc2FfaXJxX21hc2soc3RydWN0IGlycV9jaGlwICpkKQorc3RhdGljIHZvaWQgeHRlbnNhX2lycV9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAljYWNoZWRfaXJxX21hc2sgJj0gfigxIDw8IGQtPmlycSk7CiAJc2V0X3NyIChjYWNoZWRfaXJxX21hc2ssIElOVEVOQUJMRSk7CiB9CiAKLXN0YXRpYyB2b2lkIHh0ZW5zYV9pcnFfdW5tYXNrKHN0cnVjdCBpcnFfY2hpcCAqZCkKK3N0YXRpYyB2b2lkIHh0ZW5zYV9pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAljYWNoZWRfaXJxX21hc2sgfD0gMSA8PCBkLT5pcnE7CiAJc2V0X3NyIChjYWNoZWRfaXJxX21hc2ssIElOVEVOQUJMRSk7CiB9CiAKLXN0YXRpYyB2b2lkIHh0ZW5zYV9pcnFfZW5hYmxlKHN0cnVjdCBpcnFfY2hpcCAqZCkKK3N0YXRpYyB2b2lkIHh0ZW5zYV9pcnFfZW5hYmxlKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl2YXJpYW50X2lycV9lbmFibGUoZC0+aXJxKTsKIAl4dGVuc2FfaXJxX3VubWFzayhkLT5pcnEpOwogfQogCi1zdGF0aWMgdm9pZCB4dGVuc2FfaXJxX2Rpc2FibGUoc3RydWN0IGlycV9jaGlwICpkKQorc3RhdGljIHZvaWQgeHRlbnNhX2lycV9kaXNhYmxlKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl4dGVuc2FfaXJxX21hc2soZC0+aXJxKTsKIAl2YXJpYW50X2lycV9kaXNhYmxlKGQtPmlycSk7CiB9CiAKLXN0YXRpYyB2b2lkIHh0ZW5zYV9pcnFfYWNrKHN0cnVjdCBpcnFfY2hpcCAqZCkKK3N0YXRpYyB2b2lkIHh0ZW5zYV9pcnFfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlzZXRfc3IoMSA8PCBkLT5pcnEsIElOVENMRUFSKTsKIH0KIAotc3RhdGljIGludCB4dGVuc2FfaXJxX3JldHJpZ2dlcihzdHJ1Y3QgaXJxX2NoaXAgKmQpCitzdGF0aWMgaW50IHh0ZW5zYV9pcnFfcmV0cmlnZ2VyKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlzZXRfc3IgKDEgPDwgZC0+aXJxLCBJTlRTRVQpOwogCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5jIGIvYmxvY2svYmxrLWNncm91cC5jCmluZGV4IGYwNjA1YWIuLjQ3MWZkY2MgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jZ3JvdXAuYworKysgYi9ibG9jay9ibGstY2dyb3VwLmMKQEAgLTExNCw2ICsxMTQsMTMgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNncm91cF90b19ibGtpb19jZ3JvdXApOwogCitzdHJ1Y3QgYmxraW9fY2dyb3VwICp0YXNrX2Jsa2lvX2Nncm91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHRhc2tfc3Vic3lzX3N0YXRlKHRzaywgYmxraW9fc3Vic3lzX2lkKSwKKwkJCSAgICBzdHJ1Y3QgYmxraW9fY2dyb3VwLCBjc3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodGFza19ibGtpb19jZ3JvdXApOworCiBzdGF0aWMgaW5saW5lIHZvaWQKIGJsa2lvX3VwZGF0ZV9ncm91cF93ZWlnaHQoc3RydWN0IGJsa2lvX2dyb3VwICpibGtnLCB1bnNpZ25lZCBpbnQgd2VpZ2h0KQogewpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5oIGIvYmxvY2svYmxrLWNncm91cC5oCmluZGV4IDEwOTE5ZmEuLmM3NzQ5MzAgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jZ3JvdXAuaAorKysgYi9ibG9jay9ibGstY2dyb3VwLmgKQEAgLTI5MSw2ICsyOTEsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHX0JMS19DR1JPVVApIHx8IGRlZmluZWQoQ09ORklHX0JMS19DR1JPVVBfTU9EVUxFKQogZXh0ZXJuIHN0cnVjdCBibGtpb19jZ3JvdXAgYmxraW9fcm9vdF9jZ3JvdXA7CiBleHRlcm4gc3RydWN0IGJsa2lvX2Nncm91cCAqY2dyb3VwX3RvX2Jsa2lvX2Nncm91cChzdHJ1Y3QgY2dyb3VwICpjZ3JvdXApOworZXh0ZXJuIHN0cnVjdCBibGtpb19jZ3JvdXAgKnRhc2tfYmxraW9fY2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKIGV4dGVybiB2b2lkIGJsa2lvY2dfYWRkX2Jsa2lvX2dyb3VwKHN0cnVjdCBibGtpb19jZ3JvdXAgKmJsa2NnLAogCXN0cnVjdCBibGtpb19ncm91cCAqYmxrZywgdm9pZCAqa2V5LCBkZXZfdCBkZXYsCiAJZW51bSBibGtpb19wb2xpY3lfaWQgcGxpZCk7CkBAIC0zMTQsNiArMzE1LDggQEAKIHN0cnVjdCBjZ3JvdXA7CiBzdGF0aWMgaW5saW5lIHN0cnVjdCBibGtpb19jZ3JvdXAgKgogY2dyb3VwX3RvX2Jsa2lvX2Nncm91cChzdHJ1Y3QgY2dyb3VwICpjZ3JvdXApIHsgcmV0dXJuIE5VTEw7IH0KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJsa2lvX2Nncm91cCAqCit0YXNrX2Jsa2lvX2Nncm91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykgeyByZXR1cm4gTlVMTDsgfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYmxraW9jZ19hZGRfYmxraW9fZ3JvdXAoc3RydWN0IGJsa2lvX2Nncm91cCAqYmxrY2csCiAJCXN0cnVjdCBibGtpb19ncm91cCAqYmxrZywgdm9pZCAqa2V5LCBkZXZfdCBkZXYsCmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuYwppbmRleCA1ZmEzZGQyLi4zZmUwMGExIDEwMDY0NAotLS0gYS9ibG9jay9ibGstY29yZS5jCisrKyBiL2Jsb2NrL2Jsay1jb3JlLmMKQEAgLTI5Miw3ICsyOTIsNiBAQAogLyoqCiAgKiBfX2Jsa19ydW5fcXVldWUgLSBydW4gYSBzaW5nbGUgZGV2aWNlIHF1ZXVlCiAgKiBAcToJVGhlIHF1ZXVlIHRvIHJ1bgotICogQGZvcmNlX2tibG9ja2Q6IERvbid0IHJ1biBAcS0+cmVxdWVzdF9mbiBkaXJlY3RseS4gIFVzZSBrYmxvY2tkLgogICoKICAqIERlc2NyaXB0aW9uOgogICogICAgU2VlIEBibGtfcnVuX3F1ZXVlLiBUaGlzIHZhcmlhbnQgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgcXVldWUgbG9jawpAQCAtMzAzLDE1ICszMDIsNyBAQAogCWlmICh1bmxpa2VseShibGtfcXVldWVfc3RvcHBlZChxKSkpCiAJCXJldHVybjsKIAotCS8qCi0JICogT25seSByZWN1cnNlIG9uY2UgdG8gYXZvaWQgb3ZlcnJ1bm5pbmcgdGhlIHN0YWNrLCBsZXQgdGhlIHVucGx1ZwotCSAqIGhhbmRsaW5nIHJlaW52b2tlIHRoZSBoYW5kbGVyIHNob3J0bHkgaWYgd2UgYWxyZWFkeSBnb3QgdGhlcmUuCi0JICovCi0JaWYgKCFxdWV1ZV9mbGFnX3Rlc3RfYW5kX3NldChRVUVVRV9GTEFHX1JFRU5URVIsIHEpKSB7Ci0JCXEtPnJlcXVlc3RfZm4ocSk7Ci0JCXF1ZXVlX2ZsYWdfY2xlYXIoUVVFVUVfRkxBR19SRUVOVEVSLCBxKTsKLQl9IGVsc2UKLQkJcXVldWVfZGVsYXllZF93b3JrKGtibG9ja2Rfd29ya3F1ZXVlLCAmcS0+ZGVsYXlfd29yaywgMCk7CisJcS0+cmVxdWVzdF9mbihxKTsKIH0KIEVYUE9SVF9TWU1CT0woX19ibGtfcnVuX3F1ZXVlKTsKIApAQCAtMzI1LDkgKzMxNiwxMiBAQAogICovCiB2b2lkIGJsa19ydW5fcXVldWVfYXN5bmMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7Ci0JaWYgKGxpa2VseSghYmxrX3F1ZXVlX3N0b3BwZWQocSkpKQorCWlmIChsaWtlbHkoIWJsa19xdWV1ZV9zdG9wcGVkKHEpKSkgeworCQlfX2NhbmNlbF9kZWxheWVkX3dvcmsoJnEtPmRlbGF5X3dvcmspOwogCQlxdWV1ZV9kZWxheWVkX3dvcmsoa2Jsb2NrZF93b3JrcXVldWUsICZxLT5kZWxheV93b3JrLCAwKTsKKwl9CiB9CitFWFBPUlRfU1lNQk9MKGJsa19ydW5fcXVldWVfYXN5bmMpOwogCiAvKioKICAqIGJsa19ydW5fcXVldWUgLSBydW4gYSBzaW5nbGUgZGV2aWNlIHF1ZXVlCkBAIC0yNzg3LDcgKzI3ODEsNiBAQAogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQotRVhQT1JUX1NZTUJPTChibGtfZmx1c2hfcGx1Z19saXN0KTsKIAogdm9pZCBibGtfZmluaXNoX3BsdWcoc3RydWN0IGJsa19wbHVnICpwbHVnKQogewpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXN5c2ZzLmMgYi9ibG9jay9ibGstc3lzZnMuYwppbmRleCA2ZDczNTEyLi5iZDIzNjMxIDEwMDY0NAotLS0gYS9ibG9jay9ibGstc3lzZnMuYworKysgYi9ibG9jay9ibGstc3lzZnMuYwpAQCAtNjYsMTQgKzY2LDE0IEBACiAKIAlpZiAocmwtPmNvdW50W0JMS19SV19TWU5DXSA+PSBxLT5ucl9yZXF1ZXN0cykgewogCQlibGtfc2V0X3F1ZXVlX2Z1bGwocSwgQkxLX1JXX1NZTkMpOwotCX0gZWxzZSBpZiAocmwtPmNvdW50W0JMS19SV19TWU5DXSsxIDw9IHEtPm5yX3JlcXVlc3RzKSB7CisJfSBlbHNlIHsKIAkJYmxrX2NsZWFyX3F1ZXVlX2Z1bGwocSwgQkxLX1JXX1NZTkMpOwogCQl3YWtlX3VwKCZybC0+d2FpdFtCTEtfUldfU1lOQ10pOwogCX0KIAogCWlmIChybC0+Y291bnRbQkxLX1JXX0FTWU5DXSA+PSBxLT5ucl9yZXF1ZXN0cykgewogCQlibGtfc2V0X3F1ZXVlX2Z1bGwocSwgQkxLX1JXX0FTWU5DKTsKLQl9IGVsc2UgaWYgKHJsLT5jb3VudFtCTEtfUldfQVNZTkNdKzEgPD0gcS0+bnJfcmVxdWVzdHMpIHsKKwl9IGVsc2UgewogCQlibGtfY2xlYXJfcXVldWVfZnVsbChxLCBCTEtfUldfQVNZTkMpOwogCQl3YWtlX3VwKCZybC0+d2FpdFtCTEtfUldfQVNZTkNdKTsKIAl9CkBAIC01MDgsOCArNTA4LDEwIEBACiAJCXJldHVybiByZXQ7CiAKIAlyZXQgPSBrb2JqZWN0X2FkZCgmcS0+a29iaiwga29iamVjdF9nZXQoJmRldi0+a29iaiksICIlcyIsICJxdWV1ZSIpOwotCWlmIChyZXQgPCAwKQorCWlmIChyZXQgPCAwKSB7CisJCWJsa190cmFjZV9yZW1vdmVfc3lzZnMoZGV2KTsKIAkJcmV0dXJuIHJldDsKKwl9CiAKIAlrb2JqZWN0X3VldmVudCgmcS0+a29iaiwgS09CSl9BREQpOwogCmRpZmYgLS1naXQgYS9ibG9jay9ibGstdGhyb3R0bGUuYyBiL2Jsb2NrL2Jsay10aHJvdHRsZS5jCmluZGV4IDA0NzVhMjIuLjI1MmE4MWEgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jCisrKyBiL2Jsb2NrL2Jsay10aHJvdHRsZS5jCkBAIC0xNjAsOSArMTYwLDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCB0aHJvdGxfZ3JwICogdGhyb3RsX2ZpbmRfYWxsb2NfdGcoc3RydWN0IHRocm90bF9kYXRhICp0ZCwKLQkJCXN0cnVjdCBjZ3JvdXAgKmNncm91cCkKKwkJCXN0cnVjdCBibGtpb19jZ3JvdXAgKmJsa2NnKQogewotCXN0cnVjdCBibGtpb19jZ3JvdXAgKmJsa2NnID0gY2dyb3VwX3RvX2Jsa2lvX2Nncm91cChjZ3JvdXApOwogCXN0cnVjdCB0aHJvdGxfZ3JwICp0ZyA9IE5VTEw7CiAJdm9pZCAqa2V5ID0gdGQ7CiAJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSA9ICZ0ZC0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm87CkBAIC0yMjksMTIgKzIyOCwxMiBAQAogCiBzdGF0aWMgc3RydWN0IHRocm90bF9ncnAgKiB0aHJvdGxfZ2V0X3RnKHN0cnVjdCB0aHJvdGxfZGF0YSAqdGQpCiB7Ci0Jc3RydWN0IGNncm91cCAqY2dyb3VwOwogCXN0cnVjdCB0aHJvdGxfZ3JwICp0ZyA9IE5VTEw7CisJc3RydWN0IGJsa2lvX2Nncm91cCAqYmxrY2c7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JY2dyb3VwID0gdGFza19jZ3JvdXAoY3VycmVudCwgYmxraW9fc3Vic3lzX2lkKTsKLQl0ZyA9IHRocm90bF9maW5kX2FsbG9jX3RnKHRkLCBjZ3JvdXApOworCWJsa2NnID0gdGFza19ibGtpb19jZ3JvdXAoY3VycmVudCk7CisJdGcgPSB0aHJvdGxfZmluZF9hbGxvY190Zyh0ZCwgYmxrY2cpOwogCWlmICghdGcpCiAJCXRnID0gJnRkLT5yb290X3RnOwogCXJjdV9yZWFkX3VubG9jaygpOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLmggYi9ibG9jay9ibGsuaAppbmRleCBjOWRmOGZjLi42MTI2MzQ2IDEwMDY0NAotLS0gYS9ibG9jay9ibGsuaAorKysgYi9ibG9jay9ibGsuaApAQCAtMjIsNyArMjIsNiBAQAogdm9pZCBibGtfZGVsZXRlX3RpbWVyKHN0cnVjdCByZXF1ZXN0ICopOwogdm9pZCBibGtfYWRkX3RpbWVyKHN0cnVjdCByZXF1ZXN0ICopOwogdm9pZCBfX2dlbmVyaWNfdW5wbHVnX2RldmljZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqKTsKLXZvaWQgYmxrX3J1bl9xdWV1ZV9hc3luYyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7CiAKIC8qCiAgKiBJbnRlcm5hbCBhdG9taWMgZmxhZ3MgZm9yIHJlcXVlc3QgaGFuZGxpbmcKZGlmZiAtLWdpdCBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMgYi9ibG9jay9jZnEtaW9zY2hlZC5jCmluZGV4IDQ2YjBhMWQuLmFiN2E5ZTYgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMKKysrIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwpAQCAtMTAxNCwxMCArMTAxNCw5IEBACiAJY2ZxZy0+bmVlZHNfdXBkYXRlID0gdHJ1ZTsKIH0KIAotc3RhdGljIHN0cnVjdCBjZnFfZ3JvdXAgKgotY2ZxX2ZpbmRfYWxsb2NfY2ZxZyhzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZ3JvdXAgKmNncm91cCwgaW50IGNyZWF0ZSkKK3N0YXRpYyBzdHJ1Y3QgY2ZxX2dyb3VwICogY2ZxX2ZpbmRfYWxsb2NfY2ZxZyhzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsCisJCXN0cnVjdCBibGtpb19jZ3JvdXAgKmJsa2NnLCBpbnQgY3JlYXRlKQogewotCXN0cnVjdCBibGtpb19jZ3JvdXAgKmJsa2NnID0gY2dyb3VwX3RvX2Jsa2lvX2Nncm91cChjZ3JvdXApOwogCXN0cnVjdCBjZnFfZ3JvdXAgKmNmcWcgPSBOVUxMOwogCXZvaWQgKmtleSA9IGNmcWQ7CiAJaW50IGksIGo7CkBAIC0xMDc5LDEyICsxMDc4LDEyIEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2ZxX2dyb3VwICpjZnFfZ2V0X2NmcWcoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBpbnQgY3JlYXRlKQogewotCXN0cnVjdCBjZ3JvdXAgKmNncm91cDsKKwlzdHJ1Y3QgYmxraW9fY2dyb3VwICpibGtjZzsKIAlzdHJ1Y3QgY2ZxX2dyb3VwICpjZnFnID0gTlVMTDsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQljZ3JvdXAgPSB0YXNrX2Nncm91cChjdXJyZW50LCBibGtpb19zdWJzeXNfaWQpOwotCWNmcWcgPSBjZnFfZmluZF9hbGxvY19jZnFnKGNmcWQsIGNncm91cCwgY3JlYXRlKTsKKwlibGtjZyA9IHRhc2tfYmxraW9fY2dyb3VwKGN1cnJlbnQpOworCWNmcWcgPSBjZnFfZmluZF9hbGxvY19jZnFnKGNmcWQsIGJsa2NnLCBjcmVhdGUpOwogCWlmICghY2ZxZyAmJiBjcmVhdGUpCiAJCWNmcWcgPSAmY2ZxZC0+cm9vdF9ncm91cDsKIAlyY3VfcmVhZF91bmxvY2soKTsKQEAgLTI1ODIsMjggKzI1ODEsMjAgQEAKIH0KIAogLyoKLSAqIE11c3QgYWx3YXlzIGJlIGNhbGxlZCB3aXRoIHRoZSByY3VfcmVhZF9sb2NrKCkgaGVsZAotICovCi1zdGF0aWMgdm9pZAotX19jYWxsX2Zvcl9lYWNoX2NpYyhzdHJ1Y3QgaW9fY29udGV4dCAqaW9jLAotCQkgICAgdm9pZCAoKmZ1bmMpKHN0cnVjdCBpb19jb250ZXh0ICosIHN0cnVjdCBjZnFfaW9fY29udGV4dCAqKSkKLXsKLQlzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNpYzsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKLQotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjaWMsIG4sICZpb2MtPmNpY19saXN0LCBjaWNfbGlzdCkKLQkJZnVuYyhpb2MsIGNpYyk7Ci19Ci0KLS8qCiAgKiBDYWxsIGZ1bmMgZm9yIGVhY2ggY2ljIGF0dGFjaGVkIHRvIHRoaXMgaW9jLgogICovCiBzdGF0aWMgdm9pZAogY2FsbF9mb3JfZWFjaF9jaWMoc3RydWN0IGlvX2NvbnRleHQgKmlvYywKIAkJICB2b2lkICgqZnVuYykoc3RydWN0IGlvX2NvbnRleHQgKiwgc3RydWN0IGNmcV9pb19jb250ZXh0ICopKQogeworCXN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljOworCXN0cnVjdCBobGlzdF9ub2RlICpuOworCiAJcmN1X3JlYWRfbG9jaygpOwotCV9fY2FsbF9mb3JfZWFjaF9jaWMoaW9jLCBmdW5jKTsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjaWMsIG4sICZpb2MtPmNpY19saXN0LCBjaWNfbGlzdCkKKwkJZnVuYyhpb2MsIGNpYyk7CisKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIApAQCAtMjY2NCw3ICsyNjU1LDcgQEAKIAkgKiBzaG91bGQgYmUgb2sgdG8gaXRlcmF0ZSBvdmVyIHRoZSBrbm93biBsaXN0LCB3ZSB3aWxsIHNlZSBhbGwgY2ljJ3MKIAkgKiBzaW5jZSBubyBuZXcgb25lcyBhcmUgYWRkZWQuCiAJICovCi0JX19jYWxsX2Zvcl9lYWNoX2NpYyhpb2MsIGNpY19mcmVlX2Z1bmMpOworCWNhbGxfZm9yX2VhY2hfY2ljKGlvYywgY2ljX2ZyZWVfZnVuYyk7CiB9CiAKIHN0YXRpYyB2b2lkIGNmcV9wdXRfY29vcGVyYXRvcihzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxKQpkaWZmIC0tZ2l0IGEvYmxvY2svZWxldmF0b3IuYyBiL2Jsb2NrL2VsZXZhdG9yLmMKaW5kZXggNmY2YWJjMC4uNDVjYTFlMyAxMDA2NDQKLS0tIGEvYmxvY2svZWxldmF0b3IuYworKysgYi9ibG9jay9lbGV2YXRvci5jCkBAIC02NzEsNyArNjcxLDggQEAKIAkJCXEtPmJvdW5kYXJ5X3JxID0gcnE7CiAJCX0KIAl9IGVsc2UgaWYgKCEocnEtPmNtZF9mbGFncyAmIFJFUV9FTFZQUklWKSAmJgotCQkgICAgd2hlcmUgPT0gRUxFVkFUT1JfSU5TRVJUX1NPUlQpCisJCSAgICAod2hlcmUgPT0gRUxFVkFUT1JfSU5TRVJUX1NPUlQgfHwKKwkJICAgICB3aGVyZSA9PSBFTEVWQVRPUl9JTlNFUlRfU09SVF9NRVJHRSkpCiAJCXdoZXJlID0gRUxFVkFUT1JfSU5TRVJUX0JBQ0s7CiAKIAlzd2l0Y2ggKHdoZXJlKSB7CmRpZmYgLS1naXQgYS9ibG9jay9nZW5oZC5jIGIvYmxvY2svZ2VuaGQuYwppbmRleCBiMzY0YmQwLi4yZGQ5ODg3IDEwMDY0NAotLS0gYS9ibG9jay9nZW5oZC5jCisrKyBiL2Jsb2NrL2dlbmhkLmMKQEAgLTE1ODgsOSArMTU4OCwxMyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxKCZldi0+bG9jayk7CiAKLQkvKiB0ZWxsIHVzZXJsYW5kIGFib3V0IG5ldyBldmVudHMgKi8KKwkvKgorCSAqIFRlbGwgdXNlcmxhbmQgYWJvdXQgbmV3IGV2ZW50cy4gIE9ubHkgdGhlIGV2ZW50cyBsaXN0ZWQgaW4KKwkgKiBAZGlzay0+ZXZlbnRzIGFyZSByZXBvcnRlZC4gIFVubGlzdGVkIGV2ZW50cyBhcmUgcHJvY2Vzc2VkIHRoZQorCSAqIHNhbWUgaW50ZXJuYWxseSBidXQgbmV2ZXIgZ2V0IHJlcG9ydGVkIHRvIHVzZXJsYW5kLgorCSAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRpc2tfdWV2ZW50cyk7IGkrKykKLQkJaWYgKGV2ZW50cyAmICgxIDw8IGkpKQorCQlpZiAoZXZlbnRzICYgZGlzay0+ZXZlbnRzICYgKDEgPDwgaSkpCiAJCQllbnZwW25yX2V2ZW50cysrXSA9IGRpc2tfdWV2ZW50c1tpXTsKIAogCWlmIChucl9ldmVudHMpCmRpZmYgLS1naXQgYS9jcnlwdG8vS2NvbmZpZyBiL2NyeXB0by9LY29uZmlnCmluZGV4IDRiN2NiMGUuLjg3YjIyY2EgMTAwNjQ0Ci0tLSBhL2NyeXB0by9LY29uZmlnCisrKyBiL2NyeXB0by9LY29uZmlnCkBAIC0yNjQsMTEgKzI2NCw2IEBACiAJICBrZXkgc2l6ZSAyNTYsIDM4NCBvciA1MTIgYml0cy4gVGhpcyBpbXBsZW1lbnRhdGlvbiBjdXJyZW50bHkKIAkgIGNhbid0IGhhbmRsZSBhIHNlY3RvcnNpemUgd2hpY2ggaXMgbm90IGEgbXVsdGlwbGUgb2YgMTYgYnl0ZXMuCiAKLWNvbmZpZyBDUllQVE9fRlBVCi0JdHJpc3RhdGUKLQlzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUgotCXNlbGVjdCBDUllQVE9fTUFOQUdFUgotCiBjb21tZW50ICJIYXNoIG1vZGVzIgogCiBjb25maWcgQ1JZUFRPX0hNQUMKQEAgLTU0Myw3ICs1MzgsNiBAQAogCXNlbGVjdCBDUllQVE9fQUVTXzU4NiBpZiAhNjRCSVQKIAlzZWxlY3QgQ1JZUFRPX0NSWVBURAogCXNlbGVjdCBDUllQVE9fQUxHQVBJCi0Jc2VsZWN0IENSWVBUT19GUFUKIAloZWxwCiAJICBVc2UgSW50ZWwgQUVTLU5JIGluc3RydWN0aW9ucyBmb3IgQUVTIGFsZ29yaXRobS4KIApkaWZmIC0tZ2l0IGEvY3J5cHRvL3RjcnlwdC5jIGIvY3J5cHRvL3RjcnlwdC5jCmluZGV4IGU5MTJlYTUuLjIyMjI2MTcgMTAwNjQ0Ci0tLSBhL2NyeXB0by90Y3J5cHQuYworKysgYi9jcnlwdG8vdGNyeXB0LmMKQEAgLTEwMDksNiArMTAwOSwxMCBAQAogCQkJCXNwZWVkX3RlbXBsYXRlXzMyXzQ4XzY0KTsKIAkJdGVzdF9jaXBoZXJfc3BlZWQoInh0cyhhZXMpIiwgREVDUllQVCwgc2VjLCBOVUxMLCAwLAogCQkJCXNwZWVkX3RlbXBsYXRlXzMyXzQ4XzY0KTsKKwkJdGVzdF9jaXBoZXJfc3BlZWQoImN0cihhZXMpIiwgRU5DUllQVCwgc2VjLCBOVUxMLCAwLAorCQkJCXNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTsKKwkJdGVzdF9jaXBoZXJfc3BlZWQoImN0cihhZXMpIiwgREVDUllQVCwgc2VjLCBOVUxMLCAwLAorCQkJCXNwZWVkX3RlbXBsYXRlXzE2XzI0XzMyKTsKIAkJYnJlYWs7CiAKIAljYXNlIDIwMToKZGlmZiAtLWdpdCBhL2NyeXB0by90ZXN0bWdyLmMgYi9jcnlwdG8vdGVzdG1nci5jCmluZGV4IDI4NTQ4NjUuLmI2YjkzZDQgMTAwNjQ0Ci0tLSBhL2NyeXB0by90ZXN0bWdyLmMKKysrIGIvY3J5cHRvL3Rlc3RtZ3IuYwpAQCAtMjIxOSw2ICsyMjE5LDIyIEBACiAJCQl9CiAJCX0KIAl9LCB7CisJCS5hbGcgPSAib2ZiKGFlcykiLAorCQkudGVzdCA9IGFsZ190ZXN0X3NrY2lwaGVyLAorCQkuZmlwc19hbGxvd2VkID0gMSwKKwkJLnN1aXRlID0geworCQkJLmNpcGhlciA9IHsKKwkJCQkuZW5jID0geworCQkJCQkudmVjcyA9IGFlc19vZmJfZW5jX3R2X3RlbXBsYXRlLAorCQkJCQkuY291bnQgPSBBRVNfT0ZCX0VOQ19URVNUX1ZFQ1RPUlMKKwkJCQl9LAorCQkJCS5kZWMgPSB7CisJCQkJCS52ZWNzID0gYWVzX29mYl9kZWNfdHZfdGVtcGxhdGUsCisJCQkJCS5jb3VudCA9IEFFU19PRkJfREVDX1RFU1RfVkVDVE9SUworCQkJCX0KKwkJCX0KKwkJfQorCX0sIHsKIAkJLmFsZyA9ICJwY2JjKGZjcnlwdCkiLAogCQkudGVzdCA9IGFsZ190ZXN0X3NrY2lwaGVyLAogCQkuc3VpdGUgPSB7CmRpZmYgLS1naXQgYS9jcnlwdG8vdGVzdG1nci5oIGIvY3J5cHRvL3Rlc3RtZ3IuaAppbmRleCBhYTZkYWMwLi4yN2U2MDYxIDEwMDY0NAotLS0gYS9jcnlwdG8vdGVzdG1nci5oCisrKyBiL2NyeXB0by90ZXN0bWdyLmgKQEAgLTI5ODAsNiArMjk4MCw4IEBACiAjZGVmaW5lIEFFU19YVFNfREVDX1RFU1RfVkVDVE9SUyA0CiAjZGVmaW5lIEFFU19DVFJfRU5DX1RFU1RfVkVDVE9SUyAzCiAjZGVmaW5lIEFFU19DVFJfREVDX1RFU1RfVkVDVE9SUyAzCisjZGVmaW5lIEFFU19PRkJfRU5DX1RFU1RfVkVDVE9SUyAxCisjZGVmaW5lIEFFU19PRkJfREVDX1RFU1RfVkVDVE9SUyAxCiAjZGVmaW5lIEFFU19DVFJfMzY4Nl9FTkNfVEVTVF9WRUNUT1JTIDcKICNkZWZpbmUgQUVTX0NUUl8zNjg2X0RFQ19URVNUX1ZFQ1RPUlMgNgogI2RlZmluZSBBRVNfR0NNX0VOQ19URVNUX1ZFQ1RPUlMgOQpAQCAtNTUwNiw2ICs1NTA4LDY0IEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMgYWVzX29mYl9lbmNfdHZfdGVtcGxhdGVbXSA9IHsKKwkgLyogRnJvbSBOSVNUIFNwZWNpYWwgUHVibGljYXRpb24gODAwLTM4QSwgQXBwZW5kaXggRi41ICovCisJeworCQkua2V5CT0gIlx4MmJceDdlXHgxNVx4MTZceDI4XHhhZVx4ZDJceGE2IgorCQkJICAiXHhhYlx4ZjdceDE1XHg4OFx4MDlceGNmXHg0Zlx4M2MiLAorCQkua2xlbgk9IDE2LAorCQkuaXYJPSAiXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdceDA4IgorCQkJICAiXHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZiIsCisJCS5pbnB1dCA9ICJceDZiXHhjMVx4YmVceGUyXHgyZVx4NDBceDlmXHg5NiIKKwkJCSAgIlx4ZTlceDNkXHg3ZVx4MTFceDczXHg5M1x4MTdceDJhIgorCQkJICAiXHhhZVx4MmRceDhhXHg1N1x4MWVceDAzXHhhY1x4OWMiCisJCQkgICJceDllXHhiN1x4NmZceGFjXHg0NVx4YWZceDhlXHg1MSIKKwkJCSAgIlx4MzBceGM4XHgxY1x4NDZceGEzXHg1Y1x4ZTRceDExIgorCQkJICAiXHhlNVx4ZmJceGMxXHgxOVx4MWFceDBhXHg1Mlx4ZWYiCisJCQkgICJceGY2XHg5Zlx4MjRceDQ1XHhkZlx4NGZceDliXHgxNyIKKwkJCSAgIlx4YWRceDJiXHg0MVx4N2JceGU2XHg2Y1x4MzdceDEwIiwKKwkJLmlsZW4JPSA2NCwKKwkJLnJlc3VsdCA9ICJceDNiXHgzZlx4ZDlceDJlXHhiN1x4MmRceGFkXHgyMCIKKwkJCSAgIlx4MzNceDM0XHg0OVx4ZjhceGU4XHgzY1x4ZmJceDRhIgorCQkJICAiXHg3N1x4ODlceDUwXHg4ZFx4MTZceDkxXHg4Zlx4MDNceGY1IgorCQkJICAiXHgzY1x4NTJceGRhXHhjNVx4NGVceGQ4XHgyNSIKKwkJCSAgIlx4OTdceDQwXHgwNVx4MWVceDljXHg1Zlx4ZWNceGY2XHg0MyIKKwkJCSAgIlx4NDRceGY3XHhhOFx4MjJceDYwXHhlZFx4Y2MiCisJCQkgICJceDMwXHg0Y1x4NjVceDI4XHhmNlx4NTlceGM3XHg3OCIKKwkJCSAgIlx4NjZceGE1XHgxMFx4ZDlceGMxXHhkNlx4YWVceDVlIiwKKwkJLnJsZW4JPSA2NCwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGNpcGhlcl90ZXN0dmVjIGFlc19vZmJfZGVjX3R2X3RlbXBsYXRlW10gPSB7CisJIC8qIEZyb20gTklTVCBTcGVjaWFsIFB1YmxpY2F0aW9uIDgwMC0zOEEsIEFwcGVuZGl4IEYuNSAqLworCXsKKwkJLmtleQk9ICJceDJiXHg3ZVx4MTVceDE2XHgyOFx4YWVceGQyXHhhNiIKKwkJCSAgIlx4YWJceGY3XHgxNVx4ODhceDA5XHhjZlx4NGZceDNjIiwKKwkJLmtsZW4JPSAxNiwKKwkJLml2CT0gIlx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOCIKKwkJCSAgIlx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGYiLAorCQkuaW5wdXQgPSAiXHgzYlx4M2ZceGQ5XHgyZVx4YjdceDJkXHhhZFx4MjAiCisJCQkgICJceDMzXHgzNFx4NDlceGY4XHhlOFx4M2NceGZiXHg0YSIKKwkJCSAgIlx4NzdceDg5XHg1MFx4OGRceDE2XHg5MVx4OGZceDAzXHhmNSIKKwkJCSAgIlx4M2NceDUyXHhkYVx4YzVceDRlXHhkOFx4MjUiCisJCQkgICJceDk3XHg0MFx4MDVceDFlXHg5Y1x4NWZceGVjXHhmNlx4NDMiCisJCQkgICJceDQ0XHhmN1x4YThceDIyXHg2MFx4ZWRceGNjIgorCQkJICAiXHgzMFx4NGNceDY1XHgyOFx4ZjZceDU5XHhjN1x4NzgiCisJCQkgICJceDY2XHhhNVx4MTBceGQ5XHhjMVx4ZDZceGFlXHg1ZSIsCisJCS5pbGVuCT0gNjQsCisJCS5yZXN1bHQgPSAiXHg2Ylx4YzFceGJlXHhlMlx4MmVceDQwXHg5Zlx4OTYiCisJCQkgICJceGU5XHgzZFx4N2VceDExXHg3M1x4OTNceDE3XHgyYSIKKwkJCSAgIlx4YWVceDJkXHg4YVx4NTdceDFlXHgwM1x4YWNceDljIgorCQkJICAiXHg5ZVx4YjdceDZmXHhhY1x4NDVceGFmXHg4ZVx4NTEiCisJCQkgICJceDMwXHhjOFx4MWNceDQ2XHhhM1x4NWNceGU0XHgxMSIKKwkJCSAgIlx4ZTVceGZiXHhjMVx4MTlceDFhXHgwYVx4NTJceGVmIgorCQkJICAiXHhmNlx4OWZceDI0XHg0NVx4ZGZceDRmXHg5Ylx4MTciCisJCQkgICJceGFkXHgyYlx4NDFceDdiXHhlNlx4NmNceDM3XHgxMCIsCisJCS5ybGVuCT0gNjQsCisJfQorfTsKKwogc3RhdGljIHN0cnVjdCBhZWFkX3Rlc3R2ZWMgYWVzX2djbV9lbmNfdHZfdGVtcGxhdGVbXSA9IHsKIAl7IC8qIEZyb20gTWNHcmV3ICYgVmllZ2EgLSBodHRwOi8vY2l0ZXNlZXIuaXN0LnBzdS5lZHUvNjU2OTg5Lmh0bWwgKi8KIAkJLmtleSAgICA9IHplcm9lZF9zdHJpbmcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL0tjb25maWcgYi9kcml2ZXJzL0tjb25maWcKaW5kZXggMTc3YzdkMS4uNjE2MzFlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9LY29uZmlnCisrKyBiL2RyaXZlcnMvS2NvbmZpZwpAQCAtNjgsNiArNjgsOCBAQAogCiBzb3VyY2UgImRyaXZlcnMvc3NiL0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9iY21hL0tjb25maWciCisKIHNvdXJjZSAiZHJpdmVycy9tZmQvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnIgpAQCAtMTE5LDQgKzEyMSw3IEBACiBzb3VyY2UgImRyaXZlcnMvY2xrL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9od3NwaW5sb2NrL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9jbG9ja3NvdXJjZS9LY29uZmlnIgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9NYWtlZmlsZQppbmRleCAzZjEzNWI2Li5hMjk1MjdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvTWFrZWZpbGUKQEAgLTExMCw2ICsxMTAsNyBAQAogb2JqLSQoQ09ORklHX1BQQ19QUzMpCQkrPSBwczMvCiBvYmotJChDT05GSUdfT0YpCQkrPSBvZi8KIG9iai0kKENPTkZJR19TU0IpCQkrPSBzc2IvCitvYmotJChDT05GSUdfQkNNQSkJCSs9IGJjbWEvCiBvYmotJChDT05GSUdfVkhPU1RfTkVUKQkJKz0gdmhvc3QvCiBvYmotJChDT05GSUdfVkxZTlEpCQkrPSB2bHlucS8KIG9iai0kKENPTkZJR19TVEFHSU5HKQkJKz0gc3RhZ2luZy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hcGVpL0tjb25maWcgYi9kcml2ZXJzL2FjcGkvYXBlaS9LY29uZmlnCmluZGV4IDY2YTAzY2EuLmY3MzlhNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hcGVpL0tjb25maWcKKysrIGIvZHJpdmVycy9hY3BpL2FwZWkvS2NvbmZpZwpAQCAtMSw1ICsxLDYgQEAKIGNvbmZpZyBBQ1BJX0FQRUkKIAlib29sICJBQ1BJIFBsYXRmb3JtIEVycm9yIEludGVyZmFjZSAoQVBFSSkiCisJc2VsZWN0IE1JU0NfRklMRVNZU1RFTVMKIAlzZWxlY3QgUFNUT1JFCiAJZGVwZW5kcyBvbiBYODYKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYXBlaS9lcnN0LmMgYi9kcml2ZXJzL2FjcGkvYXBlaS9lcnN0LmMKaW5kZXggZDZjYjBmZi4uZTZjZWY4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FwZWkvZXJzdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hcGVpL2Vyc3QuYwpAQCAtOTI5LDEzICs5MjksMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNpemVfdCBlcnN0X3JlYWRlcih1NjQgKmlkLCBlbnVtIHBzdG9yZV90eXBlX2lkICp0eXBlLAorc3RhdGljIGludCBlcnN0X29wZW5fcHN0b3JlKHN0cnVjdCBwc3RvcmVfaW5mbyAqcHNpKTsKK3N0YXRpYyBpbnQgZXJzdF9jbG9zZV9wc3RvcmUoc3RydWN0IHBzdG9yZV9pbmZvICpwc2kpOworc3RhdGljIHNzaXplX3QgZXJzdF9yZWFkZXIodTY0ICppZCwgZW51bSBwc3RvcmVfdHlwZV9pZCAqdHlwZSwKIAkJICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqdGltZSk7CiBzdGF0aWMgdTY0IGVyc3Rfd3JpdGVyKGVudW0gcHN0b3JlX3R5cGVfaWQgdHlwZSwgc2l6ZV90IHNpemUpOwogCiBzdGF0aWMgc3RydWN0IHBzdG9yZV9pbmZvIGVyc3RfaW5mbyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImVyc3QiLAorCS5vcGVuCQk9IGVyc3Rfb3Blbl9wc3RvcmUsCisJLmNsb3NlCQk9IGVyc3RfY2xvc2VfcHN0b3JlLAogCS5yZWFkCQk9IGVyc3RfcmVhZGVyLAogCS53cml0ZQkJPSBlcnN0X3dyaXRlciwKIAkuZXJhc2UJCT0gZXJzdF9jbGVhcgpAQCAtOTU3LDEyICs5NjEsMzIgQEAKIAljaGFyIGRhdGFbXTsKIH0gX19wYWNrZWQ7CiAKLXN0YXRpYyBzaXplX3QgZXJzdF9yZWFkZXIodTY0ICppZCwgZW51bSBwc3RvcmVfdHlwZV9pZCAqdHlwZSwKK3N0YXRpYyBpbnQgcmVhZGVyX3BvczsKKworc3RhdGljIGludCBlcnN0X29wZW5fcHN0b3JlKHN0cnVjdCBwc3RvcmVfaW5mbyAqcHNpKQoreworCWludCByYzsKKworCWlmIChlcnN0X2Rpc2FibGUpCisJCXJldHVybiAtRU5PREVWOworCisJcmMgPSBlcnN0X2dldF9yZWNvcmRfaWRfYmVnaW4oJnJlYWRlcl9wb3MpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGVyc3RfY2xvc2VfcHN0b3JlKHN0cnVjdCBwc3RvcmVfaW5mbyAqcHNpKQoreworCWVyc3RfZ2V0X3JlY29yZF9pZF9lbmQoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBlcnN0X3JlYWRlcih1NjQgKmlkLCBlbnVtIHBzdG9yZV90eXBlX2lkICp0eXBlLAogCQkgICAgICAgc3RydWN0IHRpbWVzcGVjICp0aW1lKQogewogCWludCByYzsKLQlzc2l6ZV90IGxlbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNzaXplX3QgbGVuID0gMDsKIAl1NjQgcmVjb3JkX2lkOwogCXN0cnVjdCBjcGVyX3BzdG9yZV9yZWNvcmQgKnJjZCA9IChzdHJ1Y3QgY3Blcl9wc3RvcmVfcmVjb3JkICopCiAJCQkJCShlcnN0X2luZm8uYnVmIC0gc2l6ZW9mKCpyY2QpKTsKQEAgLTk3MCwyNCArOTk0LDI4IEBACiAJaWYgKGVyc3RfZGlzYWJsZSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmVyc3RfbG9jaywgZmxhZ3MpOwogc2tpcDoKLQlyYyA9IF9fZXJzdF9nZXRfbmV4dF9yZWNvcmRfaWQoJnJlY29yZF9pZCk7Ci0JaWYgKHJjKSB7Ci0JCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcnN0X2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIHJjOwotCX0KKwlyYyA9IGVyc3RfZ2V0X3JlY29yZF9pZF9uZXh0KCZyZWFkZXJfcG9zLCAmcmVjb3JkX2lkKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0OworCiAJLyogbm8gbW9yZSByZWNvcmQgKi8KIAlpZiAocmVjb3JkX2lkID09IEFQRUlfRVJTVF9JTlZBTElEX1JFQ09SRF9JRCkgewotCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXJzdF9sb2NrLCBmbGFncyk7Ci0JCXJldHVybiAwOworCQlyYyA9IC0xOworCQlnb3RvIG91dDsKIAl9CiAKLQlsZW4gPSBfX2Vyc3RfcmVhZChyZWNvcmRfaWQsICZyY2QtPmhkciwgc2l6ZW9mKCpyY2QpICsKLQkJCSAgZXJzdF9lcmFuZ2Uuc2l6ZSk7CisJbGVuID0gZXJzdF9yZWFkKHJlY29yZF9pZCwgJnJjZC0+aGRyLCBzaXplb2YoKnJjZCkgKworCQkJZXJzdF9pbmZvLmJ1ZnNpemUpOworCS8qIFRoZSByZWNvcmQgbWF5IGJlIGNsZWFyZWQgYnkgb3RoZXJzLCB0cnkgcmVhZCBuZXh0IHJlY29yZCAqLworCWlmIChsZW4gPT0gLUVOT0VOVCkKKwkJZ290byBza2lwOworCWVsc2UgaWYgKGxlbiA8IDApIHsKKwkJcmMgPSAtMTsKKwkJZ290byBvdXQ7CisJfQogCWlmICh1dWlkX2xlX2NtcChyY2QtPmhkci5jcmVhdG9yX2lkLCBDUEVSX0NSRUFUT1JfUFNUT1JFKSAhPSAwKQogCQlnb3RvIHNraXA7Ci0JcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVyc3RfbG9jaywgZmxhZ3MpOwogCiAJKmlkID0gcmVjb3JkX2lkOwogCWlmICh1dWlkX2xlX2NtcChyY2QtPnNlY19oZHIuc2VjdGlvbl90eXBlLApAQCAtMTAwNSw3ICsxMDMzLDggQEAKIAkJdGltZS0+dHZfc2VjID0gMDsKIAl0aW1lLT50dl9uc2VjID0gMDsKIAotCXJldHVybiBsZW4gLSBzaXplb2YoKnJjZCk7CitvdXQ6CisJcmV0dXJuIChyYyA8IDApID8gcmMgOiAobGVuIC0gc2l6ZW9mKCpyY2QpKTsKIH0KIAogc3RhdGljIHU2NCBlcnN0X3dyaXRlcihlbnVtIHBzdG9yZV90eXBlX2lkIHR5cGUsIHNpemVfdCBzaXplKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYwppbmRleCAzYTczYTkzLi44NWIzMjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYwpAQCAtNDksMTAgKzQ5LDYgQEAKIAogc3RhdGljIERFRklORV9NVVRFWChwZXJmb3JtYW5jZV9tdXRleCk7CiAKLS8qIFVzZSBjcHVmcmVxIGRlYnVnIGxheWVyIGZvciBfUFBDIGNoYW5nZXMuICovCi0jZGVmaW5lIGNwdWZyZXFfcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19DT1JFLCBcCi0JCQkJCQkiY3B1ZnJlcS1jb3JlIiwgbXNnKQotCiAvKgogICogX1BQQyBzdXBwb3J0IGlzIGltcGxlbWVudGVkIGFzIGEgQ1BVZnJlcSBwb2xpY3kgbm90aWZpZXI6CiAgKiBUaGlzIG1lYW5zIGVhY2ggdGltZSBhIENQVWZyZXEgZHJpdmVyIHJlZ2lzdGVyZWQgYWxzbyB3aXRoCkBAIC0xNDUsNyArMTQxLDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JY3B1ZnJlcV9wcmludGsoIkNQVSAlZDogX1BQQyBpcyAlZCAtIGZyZXF1ZW5jeSAlcyBsaW1pdGVkXG4iLCBwci0+aWQsCisJcHJfZGVidWcoIkNQVSAlZDogX1BQQyBpcyAlZCAtIGZyZXF1ZW5jeSAlcyBsaW1pdGVkXG4iLCBwci0+aWQsCiAJCSAgICAgICAoaW50KXBwYywgcHBjID8gIiIgOiAibm90Iik7CiAKIAlwci0+cGVyZm9ybWFuY2VfcGxhdGZvcm1fbGltaXQgPSAoaW50KXBwYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMKaW5kZXggYWQzNTAxNy4uNjA1YTI5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aHJvdHRsaW5nLmMKQEAgLTcxMCwyMCArNzEwLDE0IEBACiB9CiAKICNpZmRlZiBDT05GSUdfWDg2Ci1zdGF0aWMgaW50IGFjcGlfdGhyb3R0bGluZ19yZG1zcihzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByLAotCQkJCQl1NjQgKnZhbHVlKQorc3RhdGljIGludCBhY3BpX3Rocm90dGxpbmdfcmRtc3IodTY0ICp2YWx1ZSkKIHsKLQlzdHJ1Y3QgY3B1aW5mb194ODYgKmM7CiAJdTY0IG1zcl9oaWdoLCBtc3JfbG93OwotCXVuc2lnbmVkIGludCBjcHU7CiAJdTY0IG1zciA9IDA7CiAJaW50IHJldCA9IC0xOwogCi0JY3B1ID0gcHItPmlkOwotCWMgPSAmY3B1X2RhdGEoY3B1KTsKLQotCWlmICgoYy0+eDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0lOVEVMKSB8fAotCQkhY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9BQ1BJKSkgeworCWlmICgodGhpc19jcHVfcmVhZChjcHVfaW5mby54ODZfdmVuZG9yKSAhPSBYODZfVkVORE9SX0lOVEVMKSB8fAorCQkhdGhpc19jcHVfaGFzKFg4Nl9GRUFUVVJFX0FDUEkpKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQUkVGSVgKIAkJCSJIQVJEV0FSRSBhZGRyIHNwYWNlLE5PVCBzdXBwb3J0ZWQgeWV0XG4iKTsKIAl9IGVsc2UgewpAQCAtNzM4LDE4ICs3MzIsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGFjcGlfdGhyb3R0bGluZ193cm1zcihzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByLCB1NjQgdmFsdWUpCitzdGF0aWMgaW50IGFjcGlfdGhyb3R0bGluZ193cm1zcih1NjQgdmFsdWUpCiB7Ci0Jc3RydWN0IGNwdWluZm9feDg2ICpjOwotCXVuc2lnbmVkIGludCBjcHU7CiAJaW50IHJldCA9IC0xOwogCXU2NCBtc3I7CiAKLQljcHUgPSBwci0+aWQ7Ci0JYyA9ICZjcHVfZGF0YShjcHUpOwotCi0JaWYgKChjLT54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwpIHx8Ci0JCSFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0FDUEkpKSB7CisJaWYgKCh0aGlzX2NwdV9yZWFkKGNwdV9pbmZvLng4Nl92ZW5kb3IpICE9IFg4Nl9WRU5ET1JfSU5URUwpIHx8CisJCSF0aGlzX2NwdV9oYXMoWDg2X0ZFQVRVUkVfQUNQSSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWAogCQkJIkhBUkRXQVJFIGFkZHIgc3BhY2UsTk9UIHN1cHBvcnRlZCB5ZXRcbiIpOwogCX0gZWxzZSB7CkBAIC03NjEsMTUgKzc1MCwxNCBAQAogCXJldHVybiByZXQ7CiB9CiAjZWxzZQotc3RhdGljIGludCBhY3BpX3Rocm90dGxpbmdfcmRtc3Ioc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciwKLQkJCQl1NjQgKnZhbHVlKQorc3RhdGljIGludCBhY3BpX3Rocm90dGxpbmdfcmRtc3IodTY0ICp2YWx1ZSkKIHsKIAlwcmludGsoS0VSTl9FUlIgUFJFRklYCiAJCSJIQVJEV0FSRSBhZGRyIHNwYWNlLE5PVCBzdXBwb3J0ZWQgeWV0XG4iKTsKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgYWNwaV90aHJvdHRsaW5nX3dybXNyKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIsIHU2NCB2YWx1ZSkKK3N0YXRpYyBpbnQgYWNwaV90aHJvdHRsaW5nX3dybXNyKHU2NCB2YWx1ZSkKIHsKIAlwcmludGsoS0VSTl9FUlIgUFJFRklYCiAJCSJIQVJEV0FSRSBhZGRyIHNwYWNlLE5PVCBzdXBwb3J0ZWQgeWV0XG4iKTsKQEAgLTgwMSw3ICs3ODksNyBAQAogCQlyZXQgPSAwOwogCQlicmVhazsKIAljYXNlIEFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFOgotCQlyZXQgPSBhY3BpX3Rocm90dGxpbmdfcmRtc3IocHIsIHZhbHVlKTsKKwkJcmV0ID0gYWNwaV90aHJvdHRsaW5nX3JkbXNyKHZhbHVlKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiVW5rbm93biBhZGRyIHNwYWNlICVkXG4iLApAQCAtODM0LDcgKzgyMiw3IEBACiAJCXJldCA9IDA7CiAJCWJyZWFrOwogCWNhc2UgQUNQSV9BRFJfU1BBQ0VfRklYRURfSEFSRFdBUkU6Ci0JCXJldCA9IGFjcGlfdGhyb3R0bGluZ193cm1zcihwciwgdmFsdWUpOworCQlyZXQgPSBhY3BpX3Rocm90dGxpbmdfd3Jtc3IodmFsdWUpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJVbmtub3duIGFkZHIgc3BhY2UgJWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2Nhbi5jIGIvZHJpdmVycy9hY3BpL3NjYW4uYwppbmRleCBiMTM2YzljLi40NDljNTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2Nhbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9zY2FuLmMKQEAgLTk0Myw2ICs5NDMsMTAgQEAKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCiAJCWRldmljZS0+ZmxhZ3MubG9ja2FibGUgPSAxOwogCisJLyogUG93ZXIgcmVzb3VyY2VzIGNhbm5vdCBiZSBwb3dlciBtYW5hZ2VhYmxlLiAqLworCWlmIChkZXZpY2UtPmRldmljZV90eXBlID09IEFDUElfQlVTX1RZUEVfUE9XRVIpCisJCXJldHVybiAwOworCiAJLyogUHJlc2VuY2Ugb2YgX1BTMHxfUFIwIGluZGljYXRlcyAncG93ZXIgbWFuYWdlYWJsZScgKi8KIAlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoZGV2aWNlLT5oYW5kbGUsICJfUFMwIiwgJnRlbXApOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2FjYXJkLWFoY2kuYyBiL2RyaXZlcnMvYXRhL2FjYXJkLWFoY2kuYwppbmRleCAzMzljMjEwLi5hZTIyYmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9hY2FyZC1haGNpLmMKKysrIGIvZHJpdmVycy9hdGEvYWNhcmQtYWhjaS5jCkBAIC00MTcsNyArNDE3LDcgQEAKIAogCVZQUklOVEsoIkVOVEVSXG4iKTsKIAotCVdBUk5fT04oQVRBX01BWF9RVUVVRSA+IEFIQ0lfTUFYX0NNRFMpOworCVdBUk5fT04oKGludClBVEFfTUFYX1FVRVVFID4gQUhDSV9NQVhfQ01EUyk7CiAKIAlpZiAoIXByaW50ZWRfdmVyc2lvbisrKQogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsICJ2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9haGNpLmMgYi9kcml2ZXJzL2F0YS9haGNpLmMKaW5kZXggMzlkODI5Yy4uNzFhZmUwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYWhjaS5jCisrKyBiL2RyaXZlcnMvYXRhL2FoY2kuYwpAQCAtMTUwLDcgKzE1MCw3IEBACiAJewogCQlBSENJX0hGTEFHUwkoQUhDSV9IRkxBR19OT19GUERNQV9BQSB8IEFIQ0lfSEZMQUdfTk9fUE1QIHwKIAkJCQkgQUhDSV9IRkxBR19ZRVNfTkNRKSwKLQkJLmZsYWdzCQk9IEFIQ0lfRkxBR19DT01NT04sCisJCS5mbGFncwkJPSBBSENJX0ZMQUdfQ09NTU9OIHwgQVRBX0ZMQUdfTk9fRElQTSwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZhaGNpX29wcywKQEAgLTI2MSw2ICsyNjEsMTIgQEAKIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweDFkMDYpLCBib2FyZF9haGNpIH0sIC8qIFBCRyBSQUlEICovCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgyODI2KSwgYm9hcmRfYWhjaSB9LCAvKiBQQkcgUkFJRCAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MjMyMyksIGJvYXJkX2FoY2kgfSwgLyogREg4OXh4Q0MgQUhDSSAqLworCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MWUwMiksIGJvYXJkX2FoY2kgfSwgLyogUGFudGhlciBQb2ludCBBSENJICovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgxZTAzKSwgYm9hcmRfYWhjaSB9LCAvKiBQYW50aGVyIFBvaW50IEFIQ0kgKi8KKwl7IFBDSV9WREVWSUNFKElOVEVMLCAweDFlMDQpLCBib2FyZF9haGNpIH0sIC8qIFBhbnRoZXIgUG9pbnQgUkFJRCAqLworCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MWUwNSksIGJvYXJkX2FoY2kgfSwgLyogUGFudGhlciBQb2ludCBSQUlEICovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgxZTA2KSwgYm9hcmRfYWhjaSB9LCAvKiBQYW50aGVyIFBvaW50IFJBSUQgKi8KKwl7IFBDSV9WREVWSUNFKElOVEVMLCAweDFlMDcpLCBib2FyZF9haGNpIH0sIC8qIFBhbnRoZXIgUG9pbnQgUkFJRCAqLwogCiAJLyogSk1pY3JvbiAzNjAvMS8zLzUvNiwgbWF0Y2ggY2xhc3MgdG8gYXZvaWQgSURFIGZ1bmN0aW9uICovCiAJeyBQQ0lfVkVORE9SX0lEX0pNSUNST04sIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9haGNpLmggYi9kcml2ZXJzL2F0YS9haGNpLmgKaW5kZXggMzk4NjUwMC4uMTJjNTI4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYWhjaS5oCisrKyBiL2RyaXZlcnMvYXRhL2FoY2kuaApAQCAtMjI5LDYgKzIyOSwxMCBAQAogCUVNX0NUTF9BTEhECQk9ICgxIDw8IDI2KSwgLyogQWN0aXZpdHkgTEVEICovCiAJRU1fQ1RMX1hNVAkJPSAoMSA8PCAyNSksIC8qIFRyYW5zbWl0IE9ubHkgKi8KIAlFTV9DVExfU01CCQk9ICgxIDw8IDI0KSwgLyogU2luZ2xlIE1lc3NhZ2UgQnVmZmVyICovCisJRU1fQ1RMX1NHUElPCQk9ICgxIDw8IDE5KSwgLyogU0dQSU8gbWVzc2FnZXMgc3VwcG9ydGVkICovCisJRU1fQ1RMX1NFUwkJPSAoMSA8PCAxOCksIC8qIFNFUy0yIG1lc3NhZ2VzIHN1cHBvcnRlZCAqLworCUVNX0NUTF9TQUZURQkJPSAoMSA8PCAxNyksIC8qIFNBRi1URSBtZXNzYWdlcyBzdXBwb3J0ZWQgKi8KKwlFTV9DVExfTEVECQk9ICgxIDw8IDE2KSwgLyogTEVEIG1lc3NhZ2VzIHN1cHBvcnRlZCAqLwogCiAJLyogZW0gbWVzc2FnZSB0eXBlICovCiAJRU1fTVNHX1RZUEVfTEVECQk9ICgxIDw8IDApLCAvKiBMRUQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2F0YV9waWl4LmMgYi9kcml2ZXJzL2F0YS9hdGFfcGlpeC5jCmluZGV4IDBiYzNmZDYuLjZmNmU3NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2F0YV9waWl4LmMKKysrIGIvZHJpdmVycy9hdGEvYXRhX3BpaXguYwpAQCAtMzA5LDYgKzMwOSwxNCBAQAogCXsgMHg4MDg2LCAweDFkMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDhfc2F0YSB9LAogCS8qIFNBVEEgQ29udHJvbGxlciBJREUgKFBCRykgKi8KIAl7IDB4ODA4NiwgMHgxZDA4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g4XzJwb3J0X3NhdGEgfSwKKwkvKiBTQVRBIENvbnRyb2xsZXIgSURFIChQYW50aGVyIFBvaW50KSAqLworCXsgMHg4MDg2LCAweDFlMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDhfc2F0YSB9LAorCS8qIFNBVEEgQ29udHJvbGxlciBJREUgKFBhbnRoZXIgUG9pbnQpICovCisJeyAweDgwODYsIDB4MWUwMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoOF9zYXRhIH0sCisJLyogU0FUQSBDb250cm9sbGVyIElERSAoUGFudGhlciBQb2ludCkgKi8KKwl7IDB4ODA4NiwgMHgxZTA4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g4XzJwb3J0X3NhdGEgfSwKKwkvKiBTQVRBIENvbnRyb2xsZXIgSURFIChQYW50aGVyIFBvaW50KSAqLworCXsgMHg4MDg2LCAweDFlMDksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDhfMnBvcnRfc2F0YSB9LAogCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYWhjaS5jIGIvZHJpdmVycy9hdGEvbGliYWhjaS5jCmluZGV4IDI2ZDQ1MjMuLmQzOGM0MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmFoY2kuYworKysgYi9kcml2ZXJzL2F0YS9saWJhaGNpLmMKQEAgLTEwOSw2ICsxMDksOCBAQAogc3RhdGljIHNzaXplX3QgYWhjaV9zdG9yZV9lbV9idWZmZXIoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSk7CitzdGF0aWMgc3NpemVfdCBhaGNpX3Nob3dfZW1fc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKIAogc3RhdGljIERFVklDRV9BVFRSKGFoY2lfaG9zdF9jYXBzLCBTX0lSVUdPLCBhaGNpX3Nob3dfaG9zdF9jYXBzLCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihhaGNpX2hvc3RfY2FwMiwgU19JUlVHTywgYWhjaV9zaG93X2hvc3RfY2FwMiwgTlVMTCk7CkBAIC0xMTYsNiArMTE4LDcgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihhaGNpX3BvcnRfY21kLCBTX0lSVUdPLCBhaGNpX3Nob3dfcG9ydF9jbWQsIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGVtX2J1ZmZlciwgU19JV1VTUiB8IFNfSVJVR08sCiAJCSAgIGFoY2lfcmVhZF9lbV9idWZmZXIsIGFoY2lfc3RvcmVfZW1fYnVmZmVyKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihlbV9tZXNzYWdlX3N1cHBvcnRlZCwgU19JUlVHTywgYWhjaV9zaG93X2VtX3N1cHBvcnRlZCwgTlVMTCk7CiAKIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphaGNpX3Nob3N0X2F0dHJzW10gPSB7CiAJJmRldl9hdHRyX2xpbmtfcG93ZXJfbWFuYWdlbWVudF9wb2xpY3ksCkBAIC0xMjYsNiArMTI5LDcgQEAKIAkmZGV2X2F0dHJfYWhjaV9ob3N0X3ZlcnNpb24sCiAJJmRldl9hdHRyX2FoY2lfcG9ydF9jbWQsCiAJJmRldl9hdHRyX2VtX2J1ZmZlciwKKwkmZGV2X2F0dHJfZW1fbWVzc2FnZV9zdXBwb3J0ZWQsCiAJTlVMTAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGFoY2lfc2hvc3RfYXR0cnMpOwpAQCAtMzQzLDYgKzM0NywyNCBAQAogCXJldHVybiBzaXplOwogfQogCitzdGF0aWMgc3NpemVfdCBhaGNpX3Nob3dfZW1fc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gYXRhX3Nob3N0X3RvX3BvcnQoc2hvc3QpOworCXN0cnVjdCBhaGNpX2hvc3RfcHJpdiAqaHByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX19pb21lbSAqbW1pbyA9IGhwcml2LT5tbWlvOworCXUzMiBlbV9jdGw7CisKKwllbV9jdGwgPSByZWFkbChtbWlvICsgSE9TVF9FTV9DVEwpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXMlcyVzJXNcbiIsCisJCSAgICAgICBlbV9jdGwgJiBFTV9DVExfTEVEID8gImxlZCAiIDogIiIsCisJCSAgICAgICBlbV9jdGwgJiBFTV9DVExfU0FGVEUgPyAic2FmLXRlICIgOiAiIiwKKwkJICAgICAgIGVtX2N0bCAmIEVNX0NUTF9TRVMgPyAic2VzLTIgIiA6ICIiLAorCQkgICAgICAgZW1fY3RsICYgRU1fQ1RMX1NHUElPID8gInNncGlvICIgOiAiIik7Cit9CisKIC8qKgogICoJYWhjaV9zYXZlX2luaXRpYWxfY29uZmlnIC0gU2F2ZSBhbmQgZml4dXAgaW5pdGlhbCBjb25maWcgdmFsdWVzCiAgKglAZGV2OiB0YXJnZXQgQUhDSSBkZXZpY2UKQEAgLTE4OTcsNyArMTkxOSwxNyBAQAogCWFoY2lfZW5hYmxlX2ZicyhhcCk7CiAKIAlwcC0+aW50cl9tYXNrIHw9IFBPUlRfSVJRX0JBRF9QTVA7Ci0Jd3JpdGVsKHBwLT5pbnRyX21hc2ssIHBvcnRfbW1pbyArIFBPUlRfSVJRX01BU0spOworCisJLyoKKwkgKiBXZSBtdXN0IG5vdCBjaGFuZ2UgdGhlIHBvcnQgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgaWYgdGhlCisJICogcG9ydCBpcyBtYXJrZWQgZnJvemVuLCB0aGUgdmFsdWUgaW4gcHAtPmludHJfbWFzayB3aWxsIGJlCisJICogcmVzdG9yZWQgbGF0ZXIgd2hlbiB0aGUgcG9ydCBpcyB0aGF3ZWQuCisJICoKKwkgKiBOb3RlIHRoYXQgZHVyaW5nIGluaXRpYWxpemF0aW9uLCB0aGUgcG9ydCBpcyBtYXJrZWQgYXMKKwkgKiBmcm96ZW4gc2luY2UgdGhlIGlycSBoYW5kbGVyIGlzIG5vdCB5ZXQgcmVnaXN0ZXJlZC4KKwkgKi8KKwlpZiAoIShhcC0+cGZsYWdzICYgQVRBX1BGTEFHX0ZST1pFTikpCisJCXdyaXRlbChwcC0+aW50cl9tYXNrLCBwb3J0X21taW8gKyBQT1JUX0lSUV9NQVNLKTsKIH0KIAogc3RhdGljIHZvaWQgYWhjaV9wbXBfZGV0YWNoKHN0cnVjdCBhdGFfcG9ydCAqYXApCkBAIC0xOTEzLDcgKzE5NDUsMTAgQEAKIAl3cml0ZWwoY21kLCBwb3J0X21taW8gKyBQT1JUX0NNRCk7CiAKIAlwcC0+aW50cl9tYXNrICY9IH5QT1JUX0lSUV9CQURfUE1QOwotCXdyaXRlbChwcC0+aW50cl9tYXNrLCBwb3J0X21taW8gKyBQT1JUX0lSUV9NQVNLKTsKKworCS8qIHNlZSBjb21tZW50IGFib3ZlIGluIGFoY2lfcG1wX2F0dGFjaCgpICovCisJaWYgKCEoYXAtPnBmbGFncyAmIEFUQV9QRkxBR19GUk9aRU4pKQorCQl3cml0ZWwocHAtPmludHJfbWFzaywgcG9ydF9tbWlvICsgUE9SVF9JUlFfTUFTSyk7CiB9CiAKIGludCBhaGNpX3BvcnRfcmVzdW1lKHN0cnVjdCBhdGFfcG9ydCAqYXApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwppbmRleCA0MjNjMGE2Li43MzZiZWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKQEAgLTM2MTksOCArMzYxOSwxNCBAQAogCQlzY29udHJvbCB8PSAoMHgyIDw8IDgpOwogCQlicmVhazsKIAljYXNlIEFUQV9MUE1fTUlOX1BPV0VSOgotCQkvKiBubyByZXN0cmljdGlvbnMgb24gTFBNIHRyYW5zaXRpb25zICovCi0JCXNjb250cm9sICY9IH4oMHgzIDw8IDgpOworCQlpZiAoYXRhX2xpbmtfbnJfZW5hYmxlZChsaW5rKSA+IDApCisJCQkvKiBubyByZXN0cmljdGlvbnMgb24gTFBNIHRyYW5zaXRpb25zICovCisJCQlzY29udHJvbCAmPSB+KDB4MyA8PCA4KTsKKwkJZWxzZSB7CisJCQkvKiBlbXB0eSBwb3J0LCBwb3dlciBvZmYgKi8KKwkJCXNjb250cm9sICY9IH4weGY7CisJCQlzY29udHJvbCB8PSAoMHgxIDw8IDIpOworCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCVdBUk5fT04oMSk7CkBAIC00MTM5LDYgKzQxNDUsNyBAQAogCSAqLwogCXsgIlBJT05FRVIgRFZELVJXICBEVlJURDA4IiwJIjEuMDAiLAlBVEFfSE9SS0FHRV9OT1NFVFhGRVIgfSwKIAl7ICJQSU9ORUVSIERWRC1SVyAgRFZSLTIxMkQiLAkiMS4yOCIsIEFUQV9IT1JLQUdFX05PU0VUWEZFUiB9LAorCXsgIlBJT05FRVIgRFZELVJXICBEVlItMjE2RCIsCSIxLjA4IiwgQVRBX0hPUktBR0VfTk9TRVRYRkVSIH0sCiAKIAkvKiBFbmQgTWFya2VyICovCiAJeyB9CkBAIC01NDgwLDcgKzU0ODcsNyBAQAogCWlmICghYXApCiAJCXJldHVybiBOVUxMOwogCi0JYXAtPnBmbGFncyB8PSBBVEFfUEZMQUdfSU5JVElBTElaSU5HOworCWFwLT5wZmxhZ3MgfD0gQVRBX1BGTEFHX0lOSVRJQUxJWklORyB8IEFUQV9QRkxBR19GUk9aRU47CiAJYXAtPmxvY2sgPSAmaG9zdC0+bG9jazsKIAlhcC0+cHJpbnRfaWQgPSAtMTsKIAlhcC0+aG9zdCA9IGhvc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtZWguYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCmluZGV4IDg4Y2QyMmYuLmRmYjZlOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCkBAIC0zMzE2LDYgKzMzMTYsNyBAQAogCXN0cnVjdCBhdGFfZWhfY29udGV4dCAqZWhjID0gJmxpbmstPmVoX2NvbnRleHQ7CiAJc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgKmxpbmtfZGV2ID0gTlVMTCwgKmxwbV9kZXYgPSBOVUxMOwogCWVudW0gYXRhX2xwbV9wb2xpY3kgb2xkX3BvbGljeSA9IGxpbmstPmxwbV9wb2xpY3k7CisJYm9vbCBub19kaXBtID0gbGluay0+YXAtPmZsYWdzICYgQVRBX0ZMQUdfTk9fRElQTTsKIAl1bnNpZ25lZCBpbnQgaGludHMgPSBBVEFfTFBNX0VNUFRZIHwgQVRBX0xQTV9ISVBNOwogCXVuc2lnbmVkIGludCBlcnJfbWFzazsKIAlpbnQgcmM7CkBAIC0zMzMyLDcgKzMzMzMsNyBAQAogCSAqLwogCWF0YV9mb3JfZWFjaF9kZXYoZGV2LCBsaW5rLCBFTkFCTEVEKSB7CiAJCWJvb2wgaGlwbSA9IGF0YV9pZF9oYXNfaGlwbShkZXYtPmlkKTsKLQkJYm9vbCBkaXBtID0gYXRhX2lkX2hhc19kaXBtKGRldi0+aWQpOworCQlib29sIGRpcG0gPSBhdGFfaWRfaGFzX2RpcG0oZGV2LT5pZCkgJiYgIW5vX2RpcG07CiAKIAkJLyogZmluZCB0aGUgZmlyc3QgZW5hYmxlZCBhbmQgTFBNIGVuYWJsZWQgZGV2aWNlcyAqLwogCQlpZiAoIWxpbmtfZGV2KQpAQCAtMzM4OSw3ICszMzkwLDggQEAKIAogCS8qIGhvc3QgY29uZmlnIHVwZGF0ZWQsIGVuYWJsZSBESVBNIGlmIHRyYW5zaXRpb25pbmcgdG8gTUlOX1BPV0VSICovCiAJYXRhX2Zvcl9lYWNoX2RldihkZXYsIGxpbmssIEVOQUJMRUQpIHsKLQkJaWYgKHBvbGljeSA9PSBBVEFfTFBNX01JTl9QT1dFUiAmJiBhdGFfaWRfaGFzX2RpcG0oZGV2LT5pZCkpIHsKKwkJaWYgKHBvbGljeSA9PSBBVEFfTFBNX01JTl9QT1dFUiAmJiAhbm9fZGlwbSAmJgorCQkgICAgYXRhX2lkX2hhc19kaXBtKGRldi0+aWQpKSB7CiAJCQllcnJfbWFzayA9IGF0YV9kZXZfc2V0X2ZlYXR1cmUoZGV2LAogCQkJCQlTRVRGRUFUVVJFU19TQVRBX0VOQUJMRSwgU0FUQV9ESVBNKTsKIAkJCWlmIChlcnJfbWFzayAmJiBlcnJfbWFzayAhPSBBQ19FUlJfREVWKSB7CkBAIC0zNDIxLDcgKzM0MjMsNyBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBhdGFfbGlua19ucl9lbmFibGVkKHN0cnVjdCBhdGFfbGluayAqbGluaykKK2ludCBhdGFfbGlua19ucl9lbmFibGVkKHN0cnVjdCBhdGFfbGluayAqbGluaykKIHsKIAlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2OwogCWludCBjbnQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLXBtcC5jIGIvZHJpdmVycy9hdGEvbGliYXRhLXBtcC5jCmluZGV4IDMxMjA1OTYuLmYwNmI3ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1wbXAuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtcG1wLmMKQEAgLTQ0OSw2ICs0NDksMTYgQEAKIAkJICogb3RoZXJ3aXNlLiAgRG9uJ3QgdHJ5IGhhcmQgdG8gcmVjb3ZlciBpdC4KIAkJICovCiAJCWFwLT5wbXBfbGlua1thcC0+bnJfcG1wX2xpbmtzIC0gMV0uZmxhZ3MgfD0gQVRBX0xGTEFHX05PX1JFVFJZOworCX0gZWxzZSBpZiAodmVuZG9yID09IDB4MTk3YiAmJiBkZXZpZCA9PSAweDIzNTIpIHsKKwkJLyogY2hpcCBmb3VuZCBpbiBUaGVybWFsdGFrZSBCbGFja1ggRHVldCwgam1pY3JvbiBKTUIzNTA/ICovCisJCWF0YV9mb3JfZWFjaF9saW5rKGxpbmssIGFwLCBFREdFKSB7CisJCQkvKiBTUlNUIGJyZWFrcyBkZXRlY3Rpb24gYW5kIGRpc2tzIGdldCBtaXNjbGFzc2lmaWVkCisJCQkgKiBMUE0gZGlzYWJsZWQgdG8gYXZvaWQgcG90ZW50aWFsIHByb2JsZW1zCisJCQkgKi8KKwkJCWxpbmstPmZsYWdzIHw9IEFUQV9MRkxBR19OT19MUE0gfAorCQkJCSAgICAgICBBVEFfTEZMQUdfTk9fU1JTVCB8CisJCQkJICAgICAgIEFUQV9MRkxBR19BU1NVTUVfQVRBOworCQl9CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYwppbmRleCBlMmY1N2U5ZS4uMzBlYTk1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCkBAIC0yMTM4LDcgKzIxMzgsNyBAQAogCSAqIHdpdGggdGhlIHVubWFwIGJpdCBzZXQuCiAJICovCiAJaWYgKGF0YV9pZF9oYXNfdHJpbShhcmdzLT5pZCkpIHsKLQkJcHV0X3VuYWxpZ25lZF9iZTMyKDY1NTM1ICogNTEyIC8gOCwgJnJidWZbMjBdKTsKKwkJcHV0X3VuYWxpZ25lZF9iZTY0KDY1NTM1ICogNTEyIC8gOCwgJnJidWZbMzZdKTsKIAkJcHV0X3VuYWxpZ25lZF9iZTMyKDEsICZyYnVmWzI4XSk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKaW5kZXggZjgzODBjZS4uYjFiOTI2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYwpAQCAtMjQ0NywxMyArMjQ0NywxOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWlmICghbGVnYWN5X21vZGUgJiYgcGRldi0+aXJxKSB7CisJCWludCBpOworCiAJCXJjID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIHBkZXYtPmlycSwgaXJxX2hhbmRsZXIsCiAJCQkJICAgICAgSVJRRl9TSEFSRUQsIGRydl9uYW1lLCBob3N0KTsKIAkJaWYgKHJjKQogCQkJZ290byBvdXQ7CiAKLQkJYXRhX3BvcnRfZGVzYyhob3N0LT5wb3J0c1swXSwgImlycSAlZCIsIHBkZXYtPmlycSk7Ci0JCWF0YV9wb3J0X2Rlc2MoaG9zdC0+cG9ydHNbMV0sICJpcnEgJWQiLCBwZGV2LT5pcnEpOworCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCQlpZiAoYXRhX3BvcnRfaXNfZHVtbXkoaG9zdC0+cG9ydHNbaV0pKQorCQkJCWNvbnRpbnVlOworCQkJYXRhX3BvcnRfZGVzYyhob3N0LT5wb3J0c1tpXSwgImlycSAlZCIsIHBkZXYtPmlycSk7CisJCX0KIAl9IGVsc2UgaWYgKGxlZ2FjeV9tb2RlKSB7CiAJCWlmICghYXRhX3BvcnRfaXNfZHVtbXkoaG9zdC0+cG9ydHNbMF0pKSB7CiAJCQlyYyA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBBVEFfUFJJTUFSWV9JUlEocGRldiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2F0OTEuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYXQ5MS5jCmluZGV4IDBkYTBkY2MuLjk2MGM3MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYXQ5MS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYXQ5MS5jCkBAIC0zLDYgKzMsNyBAQAogICogd2l0aCBDb21wYWN0Rmxhc2ggaW50ZXJmYWNlIGluIFRydWUgSURFIG1vZGUKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF0eXVrZXZpY2ggU2VyZ2V5CisgKiAgICAgICAgICAgICAgIDIwMTEgSWdvciBQbHlhdG92CiAgKgogICogQmFzZWQgb246CiAgKiAgICAgICogZ2VuZXJpYyBwbGF0Zm9ybSBkcml2ZXIgYnkgUGF1bCBNdW5kdDogZHJpdmVycy9hdGEvcGF0YV9wbGF0Zm9ybS5jCkBAIC0zMSwyNiArMzIsMTQ5IEBACiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogCisjZGVmaW5lIERSVl9OQU1FCQkicGF0YV9hdDkxIgorI2RlZmluZSBEUlZfVkVSU0lPTgkJIjAuMyIKIAotI2RlZmluZSBEUlZfTkFNRSAicGF0YV9hdDkxIgotI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4xIgotCi0jZGVmaW5lIENGX0lERV9PRkZTRVQJICAgIDB4MDBjMDAwMDAKLSNkZWZpbmUgQ0ZfQUxUX0lERV9PRkZTRVQgICAweDAwZTAwMDAwCi0jZGVmaW5lIENGX0lERV9SRVNfU0laRSAgICAgMHgwOAorI2RlZmluZSBDRl9JREVfT0ZGU0VUCQkweDAwYzAwMDAwCisjZGVmaW5lIENGX0FMVF9JREVfT0ZGU0VUCTB4MDBlMDAwMDAKKyNkZWZpbmUgQ0ZfSURFX1JFU19TSVpFCQkweDA4CisjZGVmaW5lIENTX1BVTFNFX01BWElNVU0JMzE5CisjZGVmaW5lIEVSX1NNQ19DQUxDCQkxCisjZGVmaW5lIEVSX1NNQ19SRUNBTEMJCTIKIAogc3RydWN0IGF0OTFfaWRlX2luZm8gewogCXVuc2lnbmVkIGxvbmcgbW9kZTsKIAl1bnNpZ25lZCBpbnQgY3M7Ci0KIAlzdHJ1Y3QgY2xrICptY2s7Ci0KIAl2b2lkIF9faW9tZW0gKmlkZV9hZGRyOwogCXZvaWQgX19pb21lbSAqYWx0X2FkZHI7CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0YV90aW1pbmcgaW5pdGlhbF90aW1pbmcgPQotCXtYRkVSX1BJT18wLCA3MCwgMjkwLCAyNDAsIDYwMCwgMTY1LCAxNTAsIDYwMCwgMH07CisvKioKKyAqIHN0cnVjdCBzbWNfcmFuZ2UgLSByYW5nZSBvZiB2YWxpZCB2YWx1ZXMgZm9yIFNNQyByZWdpc3Rlci4KKyAqLworc3RydWN0IHNtY19yYW5nZSB7CisJaW50IG1pbjsKKwlpbnQgbWF4OworfTsKKworLyoqCisgKiBhZGp1c3Rfc21jX3ZhbHVlIC0gYWRqdXN0IHZhbHVlIGZvciBvbmUgb2YgU01DIHJlZ2lzdGVycy4KKyAqIEB2YWx1ZTogYWRqdXN0ZWQgdmFsdWUKKyAqIEByYW5nZTogYXJyYXkgb2YgU01DIHJhbmdlcyB3aXRoIHZhbGlkIHZhbHVlcworICogQHNpemU6IFNNQyByYW5nZXMgYXJyYXkgc2l6ZQorICoKKyAqIFRoaXMgcmV0dXJucyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGlucHV0IGFuZCBvdXRwdXQgdmFsdWUgb3IgbmVnYXRpdmUKKyAqIGluIGNhc2Ugb2YgaW52YWxpZCBpbnB1dCB2YWx1ZS4KKyAqIElmIG5lZ2F0aXZlIHJldHVybmVkLCB0aGVuIG91dHB1dCB2YWx1ZSA9IG1heGltYWwgcG9zc2libGUgZnJvbSByYW5nZXMuCisgKi8KK3N0YXRpYyBpbnQgYWRqdXN0X3NtY192YWx1ZShpbnQgKnZhbHVlLCBzdHJ1Y3Qgc21jX3JhbmdlICpyYW5nZSwgaW50IHNpemUpCit7CisJaW50IG1heGltdW0gPSAocmFuZ2UgKyBzaXplIC0gMSktPm1heDsKKwlpbnQgcmVtYWluZGVyOworCisJZG8geworCQlpZiAoKnZhbHVlIDwgcmFuZ2UtPm1pbikgeworCQkJcmVtYWluZGVyID0gcmFuZ2UtPm1pbiAtICp2YWx1ZTsKKwkJCSp2YWx1ZSA9IHJhbmdlLT5taW47IC8qIG5lYXJlc3QgdmFsaWQgdmFsdWUgKi8KKwkJCXJldHVybiByZW1haW5kZXI7CisJCX0gZWxzZSBpZiAoKHJhbmdlLT5taW4gPD0gKnZhbHVlKSAmJiAoKnZhbHVlIDw9IHJhbmdlLT5tYXgpKQorCQkJcmV0dXJuIDA7CisKKwkJcmFuZ2UrKzsKKwl9IHdoaWxlICgtLXNpemUpOworCSp2YWx1ZSA9IG1heGltdW07CisKKwlyZXR1cm4gLTE7IC8qIGludmFsaWQgdmFsdWUgKi8KK30KKworLyoqCisgKiBjYWxjX3NtY192YWxzIC0gY2FsY3VsYXRlIFNNQyByZWdpc3RlciB2YWx1ZXMKKyAqIEBkZXY6IEFUQSBkZXZpY2UKKyAqIEBzZXR1cDogU01DX1NFVFVQIHJlZ2lzdGVyIHZhbHVlCisgKiBAcHVsc2U6IFNNQ19QVUxTRSByZWdpc3RlciB2YWx1ZQorICogQGN5Y2xlOiBTTUNfQ1lDTEUgcmVnaXN0ZXIgdmFsdWUKKyAqCisgKiBUaGlzIHJldHVybnMgbmVnYXRpdmUgaW4gY2FzZSBvZiBpbnZhbGlkIHZhbHVlcyBmb3IgU01DIHJlZ2lzdGVyczoKKyAqIC1FUl9TTUNfUkVDQUxDIC0gcmVjYWxjdWxhdGlvbiByZXF1aXJlZCBmb3IgU01DIHZhbHVlcywKKyAqIC1FUl9TTUNfQ0FMQyAtIGNhbGN1bGF0aW9uIGZhaWxlZCAoaW52YWxpZCBpbnB1dCB2YWx1ZXMpLgorICoKKyAqIFNNQyB1c2Ugc3BlY2lhbCBjb2Rpbmcgc2NoZW1lLCBzZWUgIkNvZGluZyBhbmQgUmFuZ2Ugb2YgVGltaW5nCisgKiBQYXJhbWV0ZXJzIiB0YWJsZSBmcm9tIEFUOTFTQU05IGRhdGFzaGVldHMuCisgKgorICoJU01DX1NFVFVQID0gMTI4KnNldHVwWzVdICsgc2V0dXBbNDowXQorICoJU01DX1BVTFNFID0gMjU2KnB1bHNlWzZdICsgcHVsc2VbNTowXQorICoJU01DX0NZQ0xFID0gMjU2KmN5Y2xlWzg6N10gKyBjeWNsZVs2OjBdCisgKi8KK3N0YXRpYyBpbnQgY2FsY19zbWNfdmFscyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCWludCAqc2V0dXAsIGludCAqcHVsc2UsIGludCAqY3ljbGUsIGludCAqY3NfcHVsc2UpCit7CisJaW50IHJldF92YWw7CisJaW50IGVyciA9IDA7CisJc3RydWN0IHNtY19yYW5nZSByYW5nZV9zZXR1cFtdID0gewkvKiBTTUNfU0VUVVAgdmFsaWQgdmFsdWVzICovCisJCXsubWluID0gMCwJLm1heCA9IDMxfSwJLyogZmlyc3QgIHJhbmdlICovCisJCXsubWluID0gMTI4LAkubWF4ID0gMTU5fQkvKiBzZWNvbmQgcmFuZ2UgKi8KKwl9OworCXN0cnVjdCBzbWNfcmFuZ2UgcmFuZ2VfcHVsc2VbXSA9IHsJLyogU01DX1BVTFNFIHZhbGlkIHZhbHVlcyAqLworCQl7Lm1pbiA9IDAsCS5tYXggPSA2M30sCS8qIGZpcnN0ICByYW5nZSAqLworCQl7Lm1pbiA9IDI1NiwJLm1heCA9IDMxOX0JLyogc2Vjb25kIHJhbmdlICovCisJfTsKKwlzdHJ1Y3Qgc21jX3JhbmdlIHJhbmdlX2N5Y2xlW10gPSB7CS8qIFNNQ19DWUNMRSB2YWxpZCB2YWx1ZXMgKi8KKwkJey5taW4gPSAwLAkubWF4ID0gMTI3fSwJLyogZmlyc3QgIHJhbmdlICovCisJCXsubWluID0gMjU2LAkubWF4ID0gMzgzfSwJLyogc2Vjb25kIHJhbmdlICovCisJCXsubWluID0gNTEyLAkubWF4ID0gNjM5fSwJLyogdGhpcmQgIHJhbmdlICovCisJCXsubWluID0gNzY4LAkubWF4ID0gODk1fQkvKiBmb3VydGggcmFuZ2UgKi8KKwl9OworCisJcmV0X3ZhbCA9IGFkanVzdF9zbWNfdmFsdWUoc2V0dXAsIHJhbmdlX3NldHVwLCBBUlJBWV9TSVpFKHJhbmdlX3NldHVwKSk7CisJaWYgKHJldF92YWwgPCAwKQorCQlkZXZfd2FybihkZXYsICJtYXhpbWFsIFNNQyBTZXR1cCB2YWx1ZVxuIik7CisJZWxzZQorCQkqY3ljbGUgKz0gcmV0X3ZhbDsKKworCXJldF92YWwgPSBhZGp1c3Rfc21jX3ZhbHVlKHB1bHNlLCByYW5nZV9wdWxzZSwgQVJSQVlfU0laRShyYW5nZV9wdWxzZSkpOworCWlmIChyZXRfdmFsIDwgMCkKKwkJZGV2X3dhcm4oZGV2LCAibWF4aW1hbCBTTUMgUHVsc2UgdmFsdWVcbiIpOworCWVsc2UKKwkJKmN5Y2xlICs9IHJldF92YWw7CisKKwlyZXRfdmFsID0gYWRqdXN0X3NtY192YWx1ZShjeWNsZSwgcmFuZ2VfY3ljbGUsIEFSUkFZX1NJWkUocmFuZ2VfY3ljbGUpKTsKKwlpZiAocmV0X3ZhbCA8IDApCisJCWRldl93YXJuKGRldiwgIm1heGltYWwgU01DIEN5Y2xlIHZhbHVlXG4iKTsKKworCSpjc19wdWxzZSA9ICpjeWNsZTsKKwlpZiAoKmNzX3B1bHNlID4gQ1NfUFVMU0VfTUFYSU1VTSkgeworCQlkZXZfZXJyKGRldiwgInVuYWJsZSB0byBjYWxjdWxhdGUgdmFsaWQgU01DIHNldHRpbmdzXG4iKTsKKwkJcmV0dXJuIC1FUl9TTUNfQ0FMQzsKKwl9CisKKwlyZXRfdmFsID0gYWRqdXN0X3NtY192YWx1ZShjc19wdWxzZSwgcmFuZ2VfcHVsc2UsCisJCQkJCUFSUkFZX1NJWkUocmFuZ2VfcHVsc2UpKTsKKwlpZiAocmV0X3ZhbCA8IDApIHsKKwkJZGV2X3dhcm4oZGV2LCAibWF4aW1hbCBTTUMgQ1MgUHVsc2UgdmFsdWVcbiIpOworCX0gZWxzZSBpZiAocmV0X3ZhbCAhPSAwKSB7CisJCSpjeWNsZSA9ICpjc19wdWxzZTsKKwkJZGV2X3dhcm4oZGV2LCAiU01DIEN5Y2xlIGV4dGVuZGVkXG4iKTsKKwkJZXJyID0gLUVSX1NNQ19SRUNBTEM7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiB0b19zbWNfZm9ybWF0IC0gY29udmVydCB2YWx1ZXMgaW50byBTTUMgZm9ybWF0CisgKiBAc2V0dXA6IFNFVFVQIHZhbHVlIG9mIFNNQyBTZXR1cCBSZWdpc3RlcgorICogQHB1bHNlOiBQVUxTRSB2YWx1ZSBvZiBTTUMgUHVsc2UgUmVnaXN0ZXIKKyAqIEBjeWNsZTogQ1lDTEUgdmFsdWUgb2YgU01DIEN5Y2xlIFJlZ2lzdGVyCisgKiBAY3NfcHVsc2U6IE5DU19QVUxTRSB2YWx1ZSBvZiBTTUMgUHVsc2UgUmVnaXN0ZXIKKyAqLworc3RhdGljIHZvaWQgdG9fc21jX2Zvcm1hdChpbnQgKnNldHVwLCBpbnQgKnB1bHNlLCBpbnQgKmN5Y2xlLCBpbnQgKmNzX3B1bHNlKQoreworCSpzZXR1cCA9ICgqc2V0dXAgJiAweDFmKSB8ICgoKnNldHVwICYgMHg4MCkgPj4gMik7CisJKnB1bHNlID0gKCpwdWxzZSAmIDB4M2YpIHwgKCgqcHVsc2UgJiAweDEwMCkgPj4gMik7CisJKmN5Y2xlID0gKCpjeWNsZSAmIDB4N2YpIHwgKCgqY3ljbGUgJiAweDMwMCkgPj4gMSk7CisJKmNzX3B1bHNlID0gKCpjc19wdWxzZSAmIDB4M2YpIHwgKCgqY3NfcHVsc2UgJiAweDEwMCkgPj4gMik7Cit9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNhbGNfbWNrX2N5Y2xlcyh1bnNpZ25lZCBsb25nIG5zLCB1bnNpZ25lZCBsb25nIG1ja19oeikKIHsKQEAgLTY5LDgwICsxOTMsNzcgQEAKIAlyZXR1cm4gKG5zICogbXVsICsgNjU1MzYpID4+IDE2OyAgICAvKiByb3VuZGluZyAqLwogfQogCi1zdGF0aWMgdm9pZCBzZXRfc21jX21vZGUoc3RydWN0IGF0OTFfaWRlX2luZm8gKmluZm8pCi17Ci0JYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfTU9ERShpbmZvLT5jcyksIGluZm8tPm1vZGUpOwotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgc2V0X3NtY190aW1pbmcoc3RydWN0IGRldmljZSAqZGV2LAorLyoqCisgKiBzZXRfc21jX3RpbWluZyAtIFNNQyB0aW1pbmdzIHNldHVwLgorICogQGRldjogZGV2aWNlCisgKiBAaW5mbzogQVQ5MSBJREUgaW5mbworICogQGF0YTogQVRBIHRpbWluZ3MKKyAqCisgKiBJdHMgYXNzdW1lZCB0aGF0IHdyaXRlIHRpbWluZ3MgYXJlIHNhbWUgYXMgcmVhZCB0aW1pbmdzLAorICogY3Nfc2V0dXAgPSAwIGFuZCBjc19wdWxzZSA9IGN5Y2xlLgorICovCitzdGF0aWMgdm9pZCBzZXRfc21jX3RpbWluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2LAogCQlzdHJ1Y3QgYXQ5MV9pZGVfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGF0YV90aW1pbmcgKmF0YSkKIHsKLQl1bnNpZ25lZCBsb25nIHJlYWRfY3ljbGUsIHdyaXRlX2N5Y2xlLCBhY3RpdmUsIHJlY292ZXI7Ci0JdW5zaWduZWQgbG9uZyBucmRfc2V0dXAsIG5yZF9wdWxzZSwgbnJkX3JlY292ZXI7Ci0JdW5zaWduZWQgbG9uZyBud2Vfc2V0dXAsIG53ZV9wdWxzZTsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgdXNlX2lvcmR5OworCXVuc2lnbmVkIGludCB0Nno7ICAgICAgICAgLyogZGF0YSB0cmlzdGF0ZSB0aW1lIGluIG5zICovCisJdW5zaWduZWQgaW50IGN5Y2xlOyAgICAgICAvKiBTTUMgQ3ljbGUgd2lkdGggaW4gTUNLIHRpY2tzICovCisJdW5zaWduZWQgaW50IHNldHVwOyAgICAgICAvKiBTTUMgU2V0dXAgd2lkdGggaW4gTUNLIHRpY2tzICovCisJdW5zaWduZWQgaW50IHB1bHNlOyAgICAgICAvKiBDRklPUiBhbmQgQ0ZJT1cgcHVsc2Ugd2lkdGggaW4gTUNLIHRpY2tzICovCisJdW5zaWduZWQgaW50IGNzX3NldHVwID0gMDsvKiBDUzQgb3IgQ1M1IHNldHVwIHdpZHRoIGluIE1DSyB0aWNrcyAqLworCXVuc2lnbmVkIGludCBjc19wdWxzZTsgICAgLyogQ1M0IG9yIENTNSBwdWxzZSB3aWR0aCBpbiBNQ0sgdGlja3MqLworCXVuc2lnbmVkIGludCB0ZGZfY3ljbGVzOyAgLyogU01DIFRERiBNQ0sgdGlja3MgKi8KKwl1bnNpZ25lZCBsb25nIG1ja19oejsgICAgIC8qIE1DSyBmcmVxdWVuY3kgaW4gSHogKi8KIAotCXVuc2lnbmVkIGxvbmcgbmNzX3dyaXRlX3NldHVwLCBuY3Nfd3JpdGVfcHVsc2U7Ci0JdW5zaWduZWQgbG9uZyBuY3NfcmVhZF9zZXR1cCwgbmNzX3JlYWRfcHVsc2U7Ci0KLQl1bnNpZ25lZCBsb25nIG1ja19oejsKLQotCXJlYWRfY3ljbGUgID0gYXRhLT5jeWM4YjsKLQlucmRfc2V0dXAgICA9IGF0YS0+c2V0dXA7Ci0JbnJkX3B1bHNlICAgPSBhdGEtPmFjdDhiOwotCW5yZF9yZWNvdmVyID0gYXRhLT5yZWM4YjsKLQorCXQ2eiA9IChhdGEtPm1vZGUgPCBYRkVSX1BJT181KSA/IDMwIDogMjA7CiAJbWNrX2h6ID0gY2xrX2dldF9yYXRlKGluZm8tPm1jayk7CisJY3ljbGUgPSBjYWxjX21ja19jeWNsZXMoYXRhLT5jeWM4YiwgbWNrX2h6KTsKKwlzZXR1cCA9IGNhbGNfbWNrX2N5Y2xlcyhhdGEtPnNldHVwLCBtY2tfaHopOworCXB1bHNlID0gY2FsY19tY2tfY3ljbGVzKGF0YS0+YWN0OGIsIG1ja19oeik7CisJdGRmX2N5Y2xlcyA9IGNhbGNfbWNrX2N5Y2xlcyh0NnosIG1ja19oeik7CiAKLQlyZWFkX2N5Y2xlICA9IGNhbGNfbWNrX2N5Y2xlcyhyZWFkX2N5Y2xlLCBtY2tfaHopOwotCW5yZF9zZXR1cCAgID0gY2FsY19tY2tfY3ljbGVzKG5yZF9zZXR1cCwgbWNrX2h6KTsKLQlucmRfcHVsc2UgICA9IGNhbGNfbWNrX2N5Y2xlcyhucmRfcHVsc2UsIG1ja19oeik7Ci0JbnJkX3JlY292ZXIgPSBjYWxjX21ja19jeWNsZXMobnJkX3JlY292ZXIsIG1ja19oeik7CisJZG8geworCQlyZXQgPSBjYWxjX3NtY192YWxzKGRldiwgJnNldHVwLCAmcHVsc2UsICZjeWNsZSwgJmNzX3B1bHNlKTsKKwl9IHdoaWxlIChyZXQgPT0gLUVSX1NNQ19SRUNBTEMpOwogCi0JYWN0aXZlICA9IG5yZF9zZXR1cCArIG5yZF9wdWxzZTsKLQlyZWNvdmVyID0gcmVhZF9jeWNsZSAtIGFjdGl2ZTsKKwlpZiAocmV0ID09IC1FUl9TTUNfQ0FMQykKKwkJZGV2X2VycihkZXYsICJJbnRlcmZhY2UgbWF5IG5vdCBvcGVyYXRlIGNvcnJlY3RseVxuIik7CiAKLQkvKiBOZWVkIGF0IGxlYXN0IHR3byBjeWNsZXMgcmVjb3ZlcnkgKi8KLQlpZiAocmVjb3ZlciA8IDIpCi0JCXJlYWRfY3ljbGUgPSBhY3RpdmUgKyAyOworCWRldl9kYmcoZGV2LCAiU01DIFNldHVwPSV1LCBQdWxzZT0ldSwgQ3ljbGU9JXUsIENTIFB1bHNlPSV1XG4iLAorCQlzZXR1cCwgcHVsc2UsIGN5Y2xlLCBjc19wdWxzZSk7CisJdG9fc21jX2Zvcm1hdCgmc2V0dXAsICZwdWxzZSwgJmN5Y2xlLCAmY3NfcHVsc2UpOworCS8qIGRpc2FibGUgb3IgZW5hYmxlIHdhaXRpbmcgZm9yIElPUkRZIHNpZ25hbCAqLworCXVzZV9pb3JkeSA9IGF0YV9waW9fbmVlZF9pb3JkeShhZGV2KTsKKwlpZiAodXNlX2lvcmR5KQorCQlpbmZvLT5tb2RlIHw9IEFUOTFfU01DX0VYTldNT0RFX1JFQURZOwogCi0JLyogKENTMCwgQ1MxLCBESVIsIE9FKSA8PSAoQ0ZDRTEsIENGQ0UyLCBDRlJOVywgTkNTWCkgdGltaW5ncyAqLwotCW5jc19yZWFkX3NldHVwID0gMTsKLQluY3NfcmVhZF9wdWxzZSA9IHJlYWRfY3ljbGUgLSAyOworCWlmICh0ZGZfY3ljbGVzID4gMTUpIHsKKwkJdGRmX2N5Y2xlcyA9IDE1OworCQlkZXZfd2FybihkZXYsICJtYXhpbWFsIFNNQyBUREYgQ3ljbGVzIHZhbHVlXG4iKTsKKwl9CiAKLQkvKiBXcml0ZSB0aW1pbmdzIHNhbWUgYXMgcmVhZCB0aW1pbmdzICovCi0Jd3JpdGVfY3ljbGUgPSByZWFkX2N5Y2xlOwotCW53ZV9zZXR1cCA9IG5yZF9zZXR1cDsKLQlud2VfcHVsc2UgPSBucmRfcHVsc2U7Ci0JbmNzX3dyaXRlX3NldHVwID0gbmNzX3JlYWRfc2V0dXA7Ci0JbmNzX3dyaXRlX3B1bHNlID0gbmNzX3JlYWRfcHVsc2U7CisJZGV2X2RiZyhkZXYsICJVc2UgSU9SRFk9JXUsIFRERiBDeWNsZXM9JXVcbiIsIHVzZV9pb3JkeSwgdGRmX2N5Y2xlcyk7CisJaW5mby0+bW9kZSB8PSBBVDkxX1NNQ19UREZfKHRkZl9jeWNsZXMpOwogCi0JZGV2X2RiZyhkZXYsICJBVEEgdGltaW5nczogbnJkX3NldHVwID0gJWx1IG5yZF9wdWxzZSA9ICVsdSBucmRfY3ljbGUgPSAlbHVcbiIsCi0JCQlucmRfc2V0dXAsIG5yZF9wdWxzZSwgcmVhZF9jeWNsZSk7Ci0JZGV2X2RiZyhkZXYsICJBVEEgdGltaW5nczogbndlX3NldHVwID0gJWx1IG53ZV9wdWxzZSA9ICVsdSBud2VfY3ljbGUgPSAlbHVcbiIsCi0JCQlud2Vfc2V0dXAsIG53ZV9wdWxzZSwgd3JpdGVfY3ljbGUpOwotCWRldl9kYmcoZGV2LCAiQVRBIHRpbWluZ3M6IG5jc19yZWFkX3NldHVwID0gJWx1IG5jc19yZWFkX3B1bHNlID0gJWx1XG4iLAotCQkJbmNzX3JlYWRfc2V0dXAsIG5jc19yZWFkX3B1bHNlKTsKLQlkZXZfZGJnKGRldiwgIkFUQSB0aW1pbmdzOiBuY3Nfd3JpdGVfc2V0dXAgPSAlbHUgbmNzX3dyaXRlX3B1bHNlID0gJWx1XG4iLAotCQkJbmNzX3dyaXRlX3NldHVwLCBuY3Nfd3JpdGVfcHVsc2UpOwotCisJLyogd3JpdGUgU01DIFNldHVwIFJlZ2lzdGVyICovCiAJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TTUNfU0VUVVAoaW5mby0+Y3MpLAotCQkJQVQ5MV9TTUNfTldFU0VUVVBfKG53ZV9zZXR1cCkgfAotCQkJQVQ5MV9TTUNfTlJEU0VUVVBfKG5yZF9zZXR1cCkgfAotCQkJQVQ5MV9TTUNfTkNTX1dSU0VUVVBfKG5jc193cml0ZV9zZXR1cCkgfAotCQkJQVQ5MV9TTUNfTkNTX1JEU0VUVVBfKG5jc19yZWFkX3NldHVwKSk7Ci0KKwkJCUFUOTFfU01DX05XRVNFVFVQXyhzZXR1cCkgfAorCQkJQVQ5MV9TTUNfTlJEU0VUVVBfKHNldHVwKSB8CisJCQlBVDkxX1NNQ19OQ1NfV1JTRVRVUF8oY3Nfc2V0dXApIHwKKwkJCUFUOTFfU01DX05DU19SRFNFVFVQXyhjc19zZXR1cCkpOworCS8qIHdyaXRlIFNNQyBQdWxzZSBSZWdpc3RlciAqLwogCWF0OTFfc3lzX3dyaXRlKEFUOTFfU01DX1BVTFNFKGluZm8tPmNzKSwKLQkJCUFUOTFfU01DX05XRVBVTFNFXyhud2VfcHVsc2UpIHwKLQkJCUFUOTFfU01DX05SRFBVTFNFXyhucmRfcHVsc2UpIHwKLQkJCUFUOTFfU01DX05DU19XUlBVTFNFXyhuY3Nfd3JpdGVfcHVsc2UpIHwKLQkJCUFUOTFfU01DX05DU19SRFBVTFNFXyhuY3NfcmVhZF9wdWxzZSkpOwotCisJCQlBVDkxX1NNQ19OV0VQVUxTRV8ocHVsc2UpIHwKKwkJCUFUOTFfU01DX05SRFBVTFNFXyhwdWxzZSkgfAorCQkJQVQ5MV9TTUNfTkNTX1dSUFVMU0VfKGNzX3B1bHNlKSB8CisJCQlBVDkxX1NNQ19OQ1NfUkRQVUxTRV8oY3NfcHVsc2UpKTsKKwkvKiB3cml0ZSBTTUMgQ3ljbGUgUmVnaXN0ZXIgKi8KIAlhdDkxX3N5c193cml0ZShBVDkxX1NNQ19DWUNMRShpbmZvLT5jcyksCi0JCQlBVDkxX1NNQ19OV0VDWUNMRV8od3JpdGVfY3ljbGUpIHwKLQkJCUFUOTFfU01DX05SRENZQ0xFXyhyZWFkX2N5Y2xlKSk7Ci0KLQlyZXR1cm47CisJCQlBVDkxX1NNQ19OV0VDWUNMRV8oY3ljbGUpIHwKKwkJCUFUOTFfU01DX05SRENZQ0xFXyhjeWNsZSkpOworCS8qIHdyaXRlIFNNQyBNb2RlIFJlZ2lzdGVyKi8KKwlhdDkxX3N5c193cml0ZShBVDkxX1NNQ19NT0RFKGluZm8tPmNzKSwgaW5mby0+bW9kZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBhdGFfYXQ5MV9zZXRfcGlvbW9kZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldikKQEAgLTE1NiwxNSArMjc3LDkgQEAKIAlpZiAocmV0KSB7CiAJCWRldl93YXJuKGFwLT5kZXYsICJGYWlsZWQgdG8gY29tcHV0ZSBBVEEgdGltaW5nICVkLCAiCiAJCQkgInNldCBQSU9fMCB0aW1pbmdcbiIsIHJldCk7Ci0JCXNldF9zbWNfdGltaW5nKGFwLT5kZXYsIGluZm8sICZpbml0aWFsX3RpbWluZyk7Ci0JfSBlbHNlIHsKLQkJc2V0X3NtY190aW1pbmcoYXAtPmRldiwgaW5mbywgJnRpbWluZyk7CisJCXRpbWluZyA9ICphdGFfdGltaW5nX2ZpbmRfbW9kZShYRkVSX1BJT18wKTsKIAl9Ci0KLQkvKiBTZXR1cCBTTUMgbW9kZSAqLwotCXNldF9zbWNfbW9kZShpbmZvKTsKLQotCXJldHVybjsKKwlzZXRfc21jX3RpbWluZyhhcC0+ZGV2LCBhZGV2LCBpbmZvLCAmdGltaW5nKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBwYXRhX2F0OTFfZGF0YV94ZmVyX25vaXJxKHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsCkBAIC0zMzAsNyArNDQ1LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBhdGFfYXQ5MV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHBhdGFfYXQ5MV9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHBhdGFfYXQ5MV9yZW1vdmUpLAotCS5kcml2ZXIgCT0geworCS5kcml2ZXIJCT0gewogCQkubmFtZQkJPSBEUlZfTkFNRSwKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0eC5jIGIvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NHguYwppbmRleCA5MDVmZjc2Li43YmFmYzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY21kNjR4LmMKQEAgLTQxLDYgKzQxLDkgQEAKIGVudW0gewogCUNGUiAJCT0gMHg1MCwKIAkJQ0ZSX0lOVFJfQ0gwICA9IDB4MDQsCisJQ05UUkwJCT0gMHg1MSwKKwkJQ05UUkxfQ0gwICAgICA9IDB4MDQsCisJCUNOVFJMX0NIMSAgICAgPSAweDA4LAogCUNNRFRJTSAJCT0gMHg1MiwKIAlBUlRUSU0wIAk9IDB4NTMsCiAJRFJXVElNMCAJPSAweDU0LApAQCAtMzI4LDkgKzMzMSwxOSBAQAogCQkJLnBvcnRfb3BzID0gJmNtZDY0OF9wb3J0X29wcwogCQl9CiAJfTsKLQljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZjbWRfaW5mb1tpZC0+ZHJpdmVyX2RhdGFdLCBOVUxMIH07Ci0JdTggbXJkbW9kZTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7IAorCQkmY21kX2luZm9baWQtPmRyaXZlcl9kYXRhXSwKKwkJJmNtZF9pbmZvW2lkLT5kcml2ZXJfZGF0YV0sCisJCU5VTEwKKwl9OworCXU4IG1yZG1vZGUsIHJlZzsKIAlpbnQgcmM7CisJc3RydWN0IHBjaV9kZXYgKmJyaWRnZSA9IHBkZXYtPmJ1cy0+c2VsZjsKKwkvKiBtb2JpbGl0eSBzcGxpdCBicmlkZ2VzIGRvbid0IHJlcG9ydCBlbmFibGVkIHBvcnRzIGNvcnJlY3RseSAqLworCWludCBwb3J0X29rID0gIShicmlkZ2UgJiYgYnJpZGdlLT52ZW5kb3IgPT0KKwkJCVBDSV9WRU5ET1JfSURfTU9CSUxJVFlfRUxFQ1RST05JQ1MpOworCS8qIGFsbCAod2l0aCBleGNlcHRpb25zIGJlbG93KSBhcGFydCBmcm9tIDY0MyBoYXZlIENOVFJMX0NIMCBiaXQgKi8KKwlpbnQgY250cmxfY2gwX29rID0gKGlkLT5kcml2ZXJfZGF0YSAhPSAwKTsKIAogCXJjID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChyYykKQEAgLTM0MSwxMSArMzU0LDE4IEBACiAKIAlpZiAocGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQ01EXzY0NikgewogCQkvKiBEb2VzIFVETUEgd29yayA/ICovCi0JCWlmIChwZGV2LT5yZXZpc2lvbiA+IDQpCisJCWlmIChwZGV2LT5yZXZpc2lvbiA+IDQpIHsKIAkJCXBwaVswXSA9ICZjbWRfaW5mb1syXTsKKwkJCXBwaVsxXSA9ICZjbWRfaW5mb1syXTsKKwkJfQogCQkvKiBFYXJseSByZXYgd2l0aCBvdGhlciBwcm9ibGVtcyA/ICovCi0JCWVsc2UgaWYgKHBkZXYtPnJldmlzaW9uID09IDEpCisJCWVsc2UgaWYgKHBkZXYtPnJldmlzaW9uID09IDEpIHsKIAkJCXBwaVswXSA9ICZjbWRfaW5mb1szXTsKKwkJCXBwaVsxXSA9ICZjbWRfaW5mb1szXTsKKwkJfQorCQkvKiByZXZzIDEsMiBoYXZlIG5vIENOVFJMX0NIMCAqLworCQlpZiAocGRldi0+cmV2aXNpb24gPCAzKQorCQkJY250cmxfY2gwX29rID0gMDsKIAl9CiAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUENJX0xBVEVOQ1lfVElNRVIsIDY0KTsKQEAgLTM1NCw2ICszNzQsMjAgQEAKIAltcmRtb2RlIHw9IDB4MDI7CS8qIE1lbW9yeSByZWFkIGxpbmUgZW5hYmxlICovCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIE1SRE1PREUsIG1yZG1vZGUpOwogCisJLyogY2hlY2sgZm9yIGVuYWJsZWQgcG9ydHMgKi8KKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBDTlRSTCwgJnJlZyk7CisJaWYgKCFwb3J0X29rKQorCQlkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCAmcGRldi0+ZGV2LCAiTW9iaWxpdHkgQnJpZGdlIGRldGVjdGVkLCBpZ25vcmluZyBDTlRSTCBwb3J0IGVuYWJsZS9kaXNhYmxlXG4iKTsKKwlpZiAocG9ydF9vayAmJiBjbnRybF9jaDBfb2sgJiYgIShyZWcgJiBDTlRSTF9DSDApKSB7CisJCWRldl9wcmludGsoS0VSTl9OT1RJQ0UsICZwZGV2LT5kZXYsICJQcmltYXJ5IHBvcnQgaXMgZGlzYWJsZWRcbiIpOworCQlwcGlbMF0gPSAmYXRhX2R1bW15X3BvcnRfaW5mbzsKKwkJCisJfQorCWlmIChwb3J0X29rICYmICEocmVnICYgQ05UUkxfQ0gxKSkgeworCQlkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCAmcGRldi0+ZGV2LCAiU2Vjb25kYXJ5IHBvcnQgaXMgZGlzYWJsZWRcbiIpOworCQlwcGlbMV0gPSAmYXRhX2R1bW15X3BvcnRfaW5mbzsKKwl9CisKIAkvKiBGb3JjZSBQSU8gMCBoZXJlLi4gKi8KIAogCS8qIFBQQyBzcGVjaWZpYyBmaXh1cCBjb3BpZWQgZnJvbSBvbGQgZHJpdmVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3RyaWZsZXguYyBiL2RyaXZlcnMvYXRhL3BhdGFfdHJpZmxleC5jCmluZGV4IDAzYjZkNjkuLmIzZTBjOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfdHJpZmxleC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfdHJpZmxleC5jCkBAIC0yMTAsMTMgKzIxMCwzNCBAQAogCXsgfSwKIH07CiAKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgdHJpZmxleF9hdGFfcGNpX2RldmljZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKK3sKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJaW50IHJjID0gMDsKKworCXJjID0gYXRhX2hvc3Rfc3VzcGVuZChob3N0LCBtZXNnKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCS8qCisJICogV2UgbXVzdCBub3QgZGlzYWJsZSBvciBwb3dlcmRvd24gdGhlIGRldmljZS4KKwkgKiBBUE0gYmlvcyByZWZ1c2VzIHRvIHN1c3BlbmQgaWYgSURFIGlzIG5vdCBhY2Nlc3NpYmxlLgorCSAqLworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHJpZmxleF9wY2lfZHJpdmVyID0gewogCS5uYW1lIAkJPSBEUlZfTkFNRSwKIAkuaWRfdGFibGUJPSB0cmlmbGV4LAogCS5wcm9iZSAJCT0gdHJpZmxleF9pbml0X29uZSwKIAkucmVtb3ZlCQk9IGF0YV9wY2lfcmVtb3ZlX29uZSwKICNpZmRlZiBDT05GSUdfUE0KLQkuc3VzcGVuZAk9IGF0YV9wY2lfZGV2aWNlX3N1c3BlbmQsCisJLnN1c3BlbmQJPSB0cmlmbGV4X2F0YV9wY2lfZGV2aWNlX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBhdGFfcGNpX2RldmljZV9yZXN1bWUsCiAjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9lbmkuYyBiL2RyaXZlcnMvYXRtL2VuaS5jCmluZGV4IGM0OTVmYWUuLjMyMzBlYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2VuaS5jCisrKyBiL2RyaXZlcnMvYXRtL2VuaS5jCkBAIC0xNDY5LDEwICsxNDY5LDcgQEAKIAogc3RhdGljIHZvaWQgYnVnX2ludChzdHJ1Y3QgYXRtX2RldiAqZGV2LHVuc2lnbmVkIGxvbmcgcmVhc29uKQogewotCXN0cnVjdCBlbmlfZGV2ICplbmlfZGV2OwotCiAJRFBSSU5USygiPmJ1Z19pbnRcbiIpOwotCWVuaV9kZXYgPSBFTklfREVWKGRldik7CiAJaWYgKHJlYXNvbiAmIE1JRF9ETUFfRVJSX0FDSykKIAkJcHJpbnRrKEtFUk5fQ1JJVCBERVZfTEFCRUwgIihpdGYgJWQpOiBkcml2ZXIgZXJyb3IgLSBETUEgIgogCQkgICAgImVycm9yXG4iLGRldi0+bnVtYmVyKTsKQEAgLTE5MDAsNyArMTg5Nyw2IEBACiAKIHN0YXRpYyBpbnQgZW5pX29wZW4oc3RydWN0IGF0bV92Y2MgKnZjYykKIHsKLQlzdHJ1Y3QgZW5pX2RldiAqZW5pX2RldjsKIAlzdHJ1Y3QgZW5pX3ZjYyAqZW5pX3ZjYzsKIAlpbnQgZXJyb3I7CiAJc2hvcnQgdnBpID0gdmNjLT52cGk7CkBAIC0xOTEwLDcgKzE5MDYsNiBAQAogCUVWRU5UKCJlbmlfb3BlblxuIiwwLDApOwogCWlmICghdGVzdF9iaXQoQVRNX1ZGX1BBUlRJQUwsJnZjYy0+ZmxhZ3MpKQogCQl2Y2MtPmRldl9kYXRhID0gTlVMTDsKLQllbmlfZGV2ID0gRU5JX0RFVih2Y2MtPmRldik7CiAJaWYgKHZjaSAhPSBBVE1fVlBJX1VOU1BFQyAmJiB2cGkgIT0gQVRNX1ZDSV9VTlNQRUMpCiAJCXNldF9iaXQoQVRNX1ZGX0FERFIsJnZjYy0+ZmxhZ3MpOwogCWlmICh2Y2MtPnFvcy5hYWwgIT0gQVRNX0FBTDAgJiYgdmNjLT5xb3MuYWFsICE9IEFUTV9BQUw1KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vZm9yZTIwMGUuYyBiL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmMKaW5kZXggYmRkMjcxOS4uYmM5ZTcwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vZm9yZTIwMGUuYworKysgYi9kcml2ZXJzL2F0bS9mb3JlMjAwZS5jCkBAIC0yNjQzLDE2ICsyNjQzLDE5IEBACiB9CiAKICNpZmRlZiBDT05GSUdfU0JVUworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZm9yZTIwMGVfc2JhX21hdGNoW107CiBzdGF0aWMgaW50IF9fZGV2aW5pdCBmb3JlMjAwZV9zYmFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3ApCiB7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CiAJY29uc3Qgc3RydWN0IGZvcmUyMDBlX2J1cyAqYnVzOwogCXN0cnVjdCBmb3JlMjAwZSAqZm9yZTIwMGU7CiAJc3RhdGljIGludCBpbmRleCA9IDA7CiAJaW50IGVycjsKIAotCWlmICghb3AtPmRldi5vZl9tYXRjaCkKKwltYXRjaCA9IG9mX21hdGNoX2RldmljZShmb3JlMjAwZV9zYmFfbWF0Y2gsICZvcC0+ZGV2KTsKKwlpZiAoIW1hdGNoKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlidXMgPSBvcC0+ZGV2Lm9mX21hdGNoLT5kYXRhOworCWJ1cyA9IG1hdGNoLT5kYXRhOwogCiAJZm9yZTIwMGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZm9yZTIwMGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWZvcmUyMDBlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaGUuYyBiL2RyaXZlcnMvYXRtL2hlLmMKaW5kZXggNmNmNTliZi4uOWE1MWRmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vaGUuYworKysgYi9kcml2ZXJzL2F0bS9oZS5jCkBAIC0xODAxLDcgKzE4MDEsNyBAQAogbmV4dF9yYnJxX2VudHJ5OgogCQloZV9kZXYtPnJicnFfaGVhZCA9IChzdHJ1Y3QgaGVfcmJycSAqKQogCQkJCSgodW5zaWduZWQgbG9uZykgaGVfZGV2LT5yYnJxX2Jhc2UgfAotCQkJCQlSQlJRX01BU0soKytoZV9kZXYtPnJicnFfaGVhZCkpOworCQkJCQlSQlJRX01BU0soaGVfZGV2LT5yYnJxX2hlYWQgKyAxKSk7CiAKIAl9CiAJcmVhZF91bmxvY2soJnZjY19za2xpc3RfbG9jayk7CkBAIC0xODg0LDcgKzE4ODQsNyBAQAogCQkJcGNpX3Bvb2xfZnJlZShoZV9kZXYtPnRwZF9wb29sLCB0cGQsIFRQRF9BRERSKHRwZC0+c3RhdHVzKSk7CiAJCWhlX2Rldi0+dGJycV9oZWFkID0gKHN0cnVjdCBoZV90YnJxICopCiAJCQkJKCh1bnNpZ25lZCBsb25nKSBoZV9kZXYtPnRicnFfYmFzZSB8Ci0JCQkJCVRCUlFfTUFTSygrK2hlX2Rldi0+dGJycV9oZWFkKSk7CisJCQkJCVRCUlFfTUFTSyhoZV9kZXYtPnRicnFfaGVhZCArIDEpKTsKIAl9CiAKIAlpZiAodXBkYXRlZCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaWR0NzcyNTIuYyBiL2RyaXZlcnMvYXRtL2lkdDc3MjUyLmMKaW5kZXggMDQ4Zjk5Zi4uMWY4ZDcyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vaWR0NzcyNTIuYworKysgYi9kcml2ZXJzL2F0bS9pZHQ3NzI1Mi5jCkBAIC0xMjYxLDE0ICsxMjYxLDEzIEBACiAJCQkJICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKIAl3aGlsZSAoaGVhZCAhPSB0YWlsKSB7Ci0JCXVuc2lnbmVkIGludCB2cGksIHZjaSwgcHRpOworCQl1bnNpZ25lZCBpbnQgdnBpLCB2Y2k7CiAJCXUzMiBoZWFkZXI7CiAKIAkJaGVhZGVyID0gbGUzMl90b19jcHUoKih1MzIgKikgJnF1ZXVlLT5kYXRhWzBdKTsKIAogCQl2cGkgPSAoaGVhZGVyICYgQVRNX0hEUl9WUElfTUFTSykgPj4gQVRNX0hEUl9WUElfU0hJRlQ7CiAJCXZjaSA9IChoZWFkZXIgJiBBVE1fSERSX1ZDSV9NQVNLKSA+PiBBVE1fSERSX1ZDSV9TSElGVDsKLQkJcHRpID0gKGhlYWRlciAmIEFUTV9IRFJfUFRJX01BU0spID4+IEFUTV9IRFJfUFRJX1NISUZUOwogCiAjaWZkZWYgQ09ORklHX0FUTV9JRFQ3NzI1Ml9ERUJVRwogCQlpZiAoZGVidWcgJiBEQkdfUkFXX0NFTEwpIHsKQEAgLTI3MDksNTMgKzI3MDgsMTAgQEAKIHN0YXRpYyB2b2lkCiBpZHQ3NzI1Ml9jb2xsZWN0X3N0YXQoc3RydWN0IGlkdDc3MjUyX2RldiAqY2FyZCkKIHsKLQl1MzIgY2RjLCB2cGVjLCBpY2M7CisJKHZvaWQpIHJlYWRsKFNBUl9SRUdfQ0RDKTsKKwkodm9pZCkgcmVhZGwoU0FSX1JFR19WUEVDKTsKKwkodm9pZCkgcmVhZGwoU0FSX1JFR19JQ0MpOwogCi0JY2RjID0gcmVhZGwoU0FSX1JFR19DREMpOwotCXZwZWMgPSByZWFkbChTQVJfUkVHX1ZQRUMpOwotCWljYyA9IHJlYWRsKFNBUl9SRUdfSUNDKTsKLQotI2lmZGVmCU5PVERFRgotCXByaW50aygiJXM6IiwgY2FyZC0+bmFtZSk7Ci0KLQlpZiAoY2RjICYgMHg3ZjAwMDApIHsKLQkJY2hhciAqcyA9ICIiOwotCi0JCXByaW50aygiIFsiKTsKLQkJaWYgKGNkYyAmICgxIDw8IDIyKSkgewotCQkJcHJpbnRrKCIlc1JNIElEIiwgcyk7Ci0JCQlzID0gIiB8ICI7Ci0JCX0KLQkJaWYgKGNkYyAmICgxIDw8IDIxKSkgewotCQkJcHJpbnRrKCIlc0NPTiBUQUIiLCBzKTsKLQkJCXMgPSAiIHwgIjsKLQkJfQotCQlpZiAoY2RjICYgKDEgPDwgMjApKSB7Ci0JCQlwcmludGsoIiVzTk8gRkIiLCBzKTsKLQkJCXMgPSAiIHwgIjsKLQkJfQotCQlpZiAoY2RjICYgKDEgPDwgMTkpKSB7Ci0JCQlwcmludGsoIiVzT0FNIENSQyIsIHMpOwotCQkJcyA9ICIgfCAiOwotCQl9Ci0JCWlmIChjZGMgJiAoMSA8PCAxOCkpIHsKLQkJCXByaW50aygiJXNSTSBDUkMiLCBzKTsKLQkJCXMgPSAiIHwgIjsKLQkJfQotCQlpZiAoY2RjICYgKDEgPDwgMTcpKSB7Ci0JCQlwcmludGsoIiVzUk0gRklGTyIsIHMpOwotCQkJcyA9ICIgfCAiOwotCQl9Ci0JCWlmIChjZGMgJiAoMSA8PCAxNikpIHsKLQkJCXByaW50aygiJXNSWCBGSUZPIiwgcyk7Ci0JCQlzID0gIiB8ICI7Ci0JCX0KLQkJcHJpbnRrKCJdIik7Ci0JfQotCi0JcHJpbnRrKCIgQ0RDICUwNHgsIFZQRUMgJTA0eCwgSUNDOiAlMDR4XG4iLAotCSAgICAgICBjZGMgJiAweGZmZmYsIHZwZWMgJiAweGZmZmYsIGljYyAmIDB4ZmZmZik7Ci0jZW5kaWYKIH0KIAogc3RhdGljIGlycXJldHVybl90CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9pcGhhc2UuYyBiL2RyaXZlcnMvYXRtL2lwaGFzZS5jCmluZGV4IDFjNjc0YTkuLmRlZTRmMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2lwaGFzZS5jCisrKyBiL2RyaXZlcnMvYXRtL2lwaGFzZS5jCkBAIC02MTMsNyArNjEzLDYgQEAKICAgIHN0cnVjdCBza19idWZmICpza2I7CiAgICBpbnQgbnVtX2Rlc2M7CiAgICBzdHJ1Y3QgYXRtX3ZjYyAqdmNjOwotICAgc3RydWN0IGlhX3ZjYyAqaWF2Y2M7CiAgICBudW1fZGVzYyA9IGlhX2F2YWlsX2Rlc2NzKGlhZGV2KTsKIAogICAgd2hpbGUgKG51bV9kZXNjICYmIChza2IgPSBza2JfZGVxdWV1ZSgmaWFkZXYtPnR4X2JhY2tsb2cpKSkgewpAQCAtNjI3LDcgKzYyNiw2IEBACiAgICAgICAgICBwcmludGsoIkZyZWUgdGhlIFNLQiBvbiBjbG9zZWQgdmNpICVkIFxuIiwgdmNjLT52Y2kpOwogICAgICAgICAgYnJlYWs7CiAgICAgICB9Ci0gICAgICBpYXZjYyA9IElOUEhfSUFfVkNDKHZjYyk7CiAgICAgICBpZiAoaWFfcGt0X3R4ICh2Y2MsIHNrYikpIHsKICAgICAgICAgIHNrYl9xdWV1ZV9oZWFkKCZpYWRldi0+dHhfYmFja2xvZywgc2tiKTsKICAgICAgIH0KQEAgLTgyMyw4ICs4MjEsNiBAQAogICB2b2xhdGlsZSBJQV9TVU5JICpzdW5pOwogICB2b2xhdGlsZSBpYV9tYjI1X3QgKm1iMjU7CiAgIHZvbGF0aWxlIHN1bmlfcG03MzQ1X3QgKnN1bmlfcG03MzQ1OwotICB1MzIgaW50cl9zdGF0dXM7Ci0gIHVfaW50IGZybXJfaW50cjsKIAogICBpZihpYWRldi0+cGh5X3R5cGUgJiBGRV8yNU1CSVRfUEhZKSB7CiAgICAgIG1iMjUgPSAoaWFfbWIyNV90KilpYWRldi0+cGh5OwpAQCAtODMyLDE4ICs4MjgsMTggQEAKICAgfSBlbHNlIGlmIChpYWRldi0+cGh5X3R5cGUgJiBGRV9EUzNfUEhZKSB7CiAgICAgIHN1bmlfcG03MzQ1ID0gKHN1bmlfcG03MzQ1X3QgKilpYWRldi0+cGh5OwogICAgICAvKiBjbGVhciBGUk1SIGludGVycnVwdHMgKi8KLSAgICAgZnJtcl9pbnRyICAgPSBzdW5pX3BtNzM0NS0+c3VuaV9kczNfZnJtX2ludHJfc3RhdDsgCisgICAgICh2b2lkKSBzdW5pX3BtNzM0NS0+c3VuaV9kczNfZnJtX2ludHJfc3RhdDsgCiAgICAgIGlhZGV2LT5jYXJyaWVyX2RldGVjdCA9ICAKICAgICAgICAgICAgQm9vbGVhbighKHN1bmlfcG03MzQ1LT5zdW5pX2RzM19mcm1fc3RhdCAmIFNVTklfRFMzX0xPU1YpKTsKICAgfSBlbHNlIGlmIChpYWRldi0+cGh5X3R5cGUgJiBGRV9FM19QSFkgKSB7CiAgICAgIHN1bmlfcG03MzQ1ID0gKHN1bmlfcG03MzQ1X3QgKilpYWRldi0+cGh5OwotICAgICBmcm1yX2ludHIgICA9IHN1bmlfcG03MzQ1LT5zdW5pX2UzX2ZybV9tYWludF9pbnRyX2luZDsKKyAgICAgKHZvaWQpIHN1bmlfcG03MzQ1LT5zdW5pX2UzX2ZybV9tYWludF9pbnRyX2luZDsKICAgICAgaWFkZXYtPmNhcnJpZXJfZGV0ZWN0ID0KICAgICAgICAgICAgQm9vbGVhbighKHN1bmlfcG03MzQ1LT5zdW5pX2UzX2ZybV9mcmFtX2ludHJfaW5kX3N0YXQmU1VOSV9FM19MT1MpKTsKICAgfQogICBlbHNlIHsgCiAgICAgIHN1bmkgPSAoSUFfU1VOSSAqKWlhZGV2LT5waHk7Ci0gICAgIGludHJfc3RhdHVzID0gc3VuaS0+c3VuaV9yc29wX3N0YXR1cyAmIDB4ZmY7CisgICAgICh2b2lkKSBzdW5pLT5zdW5pX3Jzb3Bfc3RhdHVzOwogICAgICBpYWRldi0+Y2Fycmllcl9kZXRlY3QgPSBCb29sZWFuKCEoc3VuaS0+c3VuaV9yc29wX3N0YXR1cyAmIFNVTklfTE9TVikpOwogICB9CiAgIGlmIChpYWRldi0+Y2Fycmllcl9kZXRlY3QpCkBAIC0yNjYwLDcgKzI2NTYsNiBAQAogICAKIHN0YXRpYyBpbnQgaWFfb3BlbihzdHJ1Y3QgYXRtX3ZjYyAqdmNjKQogeyAgCi0JSUFERVYgKmlhZGV2OyAgCiAJc3RydWN0IGlhX3ZjYyAqaWFfdmNjOyAgCiAJaW50IGVycm9yOyAgCiAJaWYgKCF0ZXN0X2JpdChBVE1fVkZfUEFSVElBTCwmdmNjLT5mbGFncykpICAKQEAgLTI2NjgsNyArMjY2Myw2IEBACiAJCUlGX0VWRU5UKHByaW50aygiaWE6IG5vdCBwYXJ0aWFsbHkgYWxsb2NhdGVkIHJlc291cmNlc1xuIik7KSAgCiAJCXZjYy0+ZGV2X2RhdGEgPSBOVUxMOwogCX0gIAotCWlhZGV2ID0gSU5QSF9JQV9ERVYodmNjLT5kZXYpOyAgCiAJaWYgKHZjYy0+dmNpICE9IEFUTV9WUElfVU5TUEVDICYmIHZjYy0+dnBpICE9IEFUTV9WQ0lfVU5TUEVDKSAgCiAJeyAgCiAJCUlGX0VWRU5UKHByaW50aygiaXBoYXNlIG9wZW46IHVuc3BlYyBwYXJ0XG4iKTspICAKQEAgLTMwNTIsMTEgKzMwNDYsOSBAQAogc3RhdGljIGludCBpYV9zZW5kKHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAgICAgICAgIElBREVWICppYWRldjsgCi0gICAgICAgIHN0cnVjdCBpYV92Y2MgKmlhdmNjOwogICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAgICAgICAgIGlhZGV2ID0gSU5QSF9JQV9ERVYodmNjLT5kZXYpOwotICAgICAgICBpYXZjYyA9IElOUEhfSUFfVkNDKHZjYyk7IAogICAgICAgICBpZiAoKCFza2IpfHwoc2tiLT5sZW4+KGlhZGV2LT50eF9idWZfc3otc2l6ZW9mKHN0cnVjdCBjcGNzX3RyYWlsZXIpKSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghc2tiKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vc29sb3MtcGNpLmMgYi9kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYwppbmRleCBjZDBmZjY2Li41ZDFkMDc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYworKysgYi9kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYwpAQCAtNTI3LDcgKzUyNyw2IEBACiB7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKIAljb25zdCBjaGFyICpmd19uYW1lOwotCXVpbnQzMl90IGRhdGEzMiA9IDA7CiAJaW50IGJsb2Nrc2l6ZSA9IDA7CiAJaW50IG51bWJsb2NrcyA9IDA7CiAJaW50IG9mZnNldDsKQEAgLTU3Niw3ICs1NzUsNyBAQAogCQogCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIkNoYW5naW5nIEZQR0EgdG8gVXBkYXRlIG1vZGVcbiIpOwogCWlvd3JpdGUzMigxLCBjYXJkLT5jb25maWdfcmVncyArIEZQR0FfTU9ERSk7Ci0JZGF0YTMyID0gaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX01PREUpOyAKKwkodm9pZCkgaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX01PREUpOyAKIAogCS8qIFNldCBtb2RlIHRvIENoaXAgRXJhc2UgKi8KIAlpZihjaGlwID09IDAgfHwgY2hpcCA9PSAyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL0tjb25maWcgYi9kcml2ZXJzL2Jhc2UvS2NvbmZpZwppbmRleCBlOWU1MjM4Li5kNTdlOGQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvS2NvbmZpZworKysgYi9kcml2ZXJzL2Jhc2UvS2NvbmZpZwpAQCAtMTY4LDExICsxNjgsNCBAQAogCWJvb2wKIAlkZWZhdWx0IG4KIAotY29uZmlnIEFSQ0hfTk9fU1lTREVWX09QUwotCWJvb2wKLQktLS1oZWxwLS0tCi0JICBUbyBiZSBzZWxlY3RlZCBieSBhcmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3QgdXNlIHN5c2RldiBjbGFzcyBvcgotCSAgc3lzZGV2IGRyaXZlciBwb3dlciBtYW5hZ2VtZW50IChzdXNwZW5kL3Jlc3VtZSkgYW5kIHNodXRkb3duCi0JICBvcGVyYXRpb25zLgotCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvYmFzZS5oIGIvZHJpdmVycy9iYXNlL2Jhc2UuaAppbmRleCAxOWY0OWU0Li5hMzRkY2EwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvYmFzZS5oCisrKyBiL2RyaXZlcnMvYmFzZS9iYXNlLmgKQEAgLTExMSw4ICsxMTEsNiBAQAogCXJldHVybiBkcnYtPmJ1cy0+bWF0Y2ggPyBkcnYtPmJ1cy0+bWF0Y2goZGV2LCBkcnYpIDogMTsKIH0KIAotZXh0ZXJuIHZvaWQgc3lzZGV2X3NodXRkb3duKHZvaWQpOwotCiBleHRlcm4gY2hhciAqbWFrZV9jbGFzc19uYW1lKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBrb2JqZWN0ICprb2JqKTsKIAogZXh0ZXJuIGludCBkZXZyZXNfcmVsZWFzZV9hbGwoc3RydWN0IGRldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jb3JlLmMgYi9kcml2ZXJzL2Jhc2UvY29yZS5jCmluZGV4IDgxYjc4ZWQuLmJjODcyOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9jb3JlLmMKKysrIGIvZHJpdmVycy9iYXNlL2NvcmUuYwpAQCAtNDAwLDcgKzQwMCw3IEBACiBzdGF0aWMgaW50IGRldmljZV9hZGRfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBjbGFzcyAqY2xhc3MgPSBkZXYtPmNsYXNzOwotCXN0cnVjdCBkZXZpY2VfdHlwZSAqdHlwZSA9IGRldi0+dHlwZTsKKwljb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgKnR5cGUgPSBkZXYtPnR5cGU7CiAJaW50IGVycm9yOwogCiAJaWYgKGNsYXNzKSB7CkBAIC00NDAsNyArNDQwLDcgQEAKIHN0YXRpYyB2b2lkIGRldmljZV9yZW1vdmVfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBjbGFzcyAqY2xhc3MgPSBkZXYtPmNsYXNzOwotCXN0cnVjdCBkZXZpY2VfdHlwZSAqdHlwZSA9IGRldi0+dHlwZTsKKwljb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgKnR5cGUgPSBkZXYtPnR5cGU7CiAKIAlkZXZpY2VfcmVtb3ZlX2dyb3VwcyhkZXYsIGRldi0+Z3JvdXBzKTsKIApAQCAtMTMxNCw4ICsxMzE0LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9jcmVhdGVfZmlsZSk7CiBFWFBPUlRfU1lNQk9MX0dQTChkZXZpY2VfcmVtb3ZlX2ZpbGUpOwogCi1zdHJ1Y3Qgcm9vdF9kZXZpY2UKLXsKK3N0cnVjdCByb290X2RldmljZSB7CiAJc3RydWN0IGRldmljZSBkZXY7CiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2RkLmMgYi9kcml2ZXJzL2Jhc2UvZGQuYwppbmRleCBkYTU3ZWU5Li42NjU4ZGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZGQuYworKysgYi9kcml2ZXJzL2Jhc2UvZGQuYwpAQCAtMjQ1LDYgKzI0NSwxMCBAQAogCiAJZGV2aWNlX2xvY2soZGV2KTsKIAlpZiAoZGV2LT5kcml2ZXIpIHsKKwkJaWYgKGtsaXN0X25vZGVfYXR0YWNoZWQoJmRldi0+cC0+a25vZGVfZHJpdmVyKSkgeworCQkJcmV0ID0gMTsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQogCQlyZXQgPSBkZXZpY2VfYmluZF9kcml2ZXIoZGV2KTsKIAkJaWYgKHJldCA9PSAwKQogCQkJcmV0ID0gMTsKQEAgLTI1Nyw2ICsyNjEsNyBAQAogCQlyZXQgPSBidXNfZm9yX2VhY2hfZHJ2KGRldi0+YnVzLCBOVUxMLCBkZXYsIF9fZGV2aWNlX2F0dGFjaCk7CiAJCXBtX3J1bnRpbWVfcHV0X3N5bmMoZGV2KTsKIAl9CitvdXRfdW5sb2NrOgogCWRldmljZV91bmxvY2soZGV2KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzE2LDggKzMyMSw3IEBACiAKIAlkcnYgPSBkZXYtPmRyaXZlcjsKIAlpZiAoZHJ2KSB7Ci0JCXBtX3J1bnRpbWVfZ2V0X25vcmVzdW1lKGRldik7Ci0JCXBtX3J1bnRpbWVfYmFycmllcihkZXYpOworCQlwbV9ydW50aW1lX2dldF9zeW5jKGRldik7CiAKIAkJZHJpdmVyX3N5c2ZzX3JlbW92ZShkZXYpOwogCkBAIC0zMjYsNiArMzMwLDggQEAKIAkJCQkJCSAgICAgQlVTX05PVElGWV9VTkJJTkRfRFJJVkVSLAogCQkJCQkJICAgICBkZXYpOwogCisJCXBtX3J1bnRpbWVfcHV0X3N5bmMoZGV2KTsKKwogCQlpZiAoZGV2LT5idXMgJiYgZGV2LT5idXMtPnJlbW92ZSkKIAkJCWRldi0+YnVzLT5yZW1vdmUoZGV2KTsKIAkJZWxzZSBpZiAoZHJ2LT5yZW1vdmUpCkBAIC0zMzgsNyArMzQ0LDYgQEAKIAkJCQkJCSAgICAgQlVTX05PVElGWV9VTkJPVU5EX0RSSVZFUiwKIAkJCQkJCSAgICAgZGV2KTsKIAotCQlwbV9ydW50aW1lX3B1dF9zeW5jKGRldik7CiAJfQogfQogCkBAIC00MDgsMTcgKzQxMywxNiBAQAogfQogRVhQT1JUX1NZTUJPTChkZXZfZ2V0X2RydmRhdGEpOwogCi12b2lkIGRldl9zZXRfZHJ2ZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCitpbnQgZGV2X3NldF9kcnZkYXRhKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKIHsKIAlpbnQgZXJyb3I7CiAKLQlpZiAoIWRldikKLQkJcmV0dXJuOwogCWlmICghZGV2LT5wKSB7CiAJCWVycm9yID0gZGV2aWNlX3ByaXZhdGVfaW5pdChkZXYpOwogCQlpZiAoZXJyb3IpCi0JCQlyZXR1cm47CisJCQlyZXR1cm4gZXJyb3I7CiAJfQogCWRldi0+cC0+ZHJpdmVyX2RhdGEgPSBkYXRhOworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChkZXZfc2V0X2RydmRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMgYi9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYwppbmRleCA4Yzc5OGVmLi5iYmIwM2U2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYworKysgYi9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYwpAQCAtNTIxLDYgKzUyMSwxMSBAQAogCWlmICghZmlybXdhcmVfcCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAoV0FSTl9PTih1c2VybW9kZWhlbHBlcl9pc19kaXNhYmxlZCgpKSkgeworCQlkZXZfZXJyKGRldmljZSwgImZpcm13YXJlOiAlcyB3aWxsIG5vdCBiZSBsb2FkZWRcbiIsIG5hbWUpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwogCSpmaXJtd2FyZV9wID0gZmlybXdhcmUgPSBremFsbG9jKHNpemVvZigqZmlybXdhcmUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWZpcm13YXJlKSB7CiAJCWRldl9lcnIoZGV2aWNlLCAiJXM6IGttYWxsb2Moc3RydWN0IGZpcm13YXJlKSBmYWlsZWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMKaW5kZXggM2RhNmE0My4uMGExMzRhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL21lbW9yeS5jCisrKyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuYwpAQCAtNDgsNyArNDgsOCBAQAogCXJldHVybiBNRU1PUllfQ0xBU1NfTkFNRTsKIH0KIAotc3RhdGljIGludCBtZW1vcnlfdWV2ZW50KHN0cnVjdCBrc2V0ICprc2V0LCBzdHJ1Y3Qga29iamVjdCAqb2JqLCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCitzdGF0aWMgaW50IG1lbW9yeV91ZXZlbnQoc3RydWN0IGtzZXQgKmtzZXQsIHN0cnVjdCBrb2JqZWN0ICpvYmosCisJCQlzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCiB7CiAJaW50IHJldHZhbCA9IDA7CiAKQEAgLTIyOCwxMCArMjI5LDExIEBACiAgKiBPSyB0byBoYXZlIGRpcmVjdCByZWZlcmVuY2VzIHRvIHNwYXJzZW1lbSB2YXJpYWJsZXMgaW4gaGVyZS4KICAqLwogc3RhdGljIGludAotbWVtb3J5X3NlY3Rpb25fYWN0aW9uKHVuc2lnbmVkIGxvbmcgcGh5c19pbmRleCwgdW5zaWduZWQgbG9uZyBhY3Rpb24pCittZW1vcnlfYmxvY2tfYWN0aW9uKHVuc2lnbmVkIGxvbmcgcGh5c19pbmRleCwgdW5zaWduZWQgbG9uZyBhY3Rpb24pCiB7CiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHN0YXJ0X3BhZGRyOworCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBQQUdFU19QRVJfU0VDVElPTiAqIHNlY3Rpb25zX3Blcl9ibG9jazsKIAlzdHJ1Y3QgcGFnZSAqZmlyc3RfcGFnZTsKIAlpbnQgcmV0OwogCkBAIC0yNDMsNyArMjQ1LDcgQEAKIAkgKiB0aGF0IHdheS4KIAkgKi8KIAlpZiAoYWN0aW9uID09IE1FTV9PTkxJTkUpIHsKLQkJZm9yIChpID0gMDsgaSA8IFBBR0VTX1BFUl9TRUNUSU9OOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKIAkJCWlmIChQYWdlUmVzZXJ2ZWQoZmlyc3RfcGFnZStpKSkKIAkJCQljb250aW51ZTsKIApAQCAtMjU3LDEyICsyNTksMTIgQEAKIAlzd2l0Y2ggKGFjdGlvbikgewogCQljYXNlIE1FTV9PTkxJTkU6CiAJCQlzdGFydF9wZm4gPSBwYWdlX3RvX3BmbihmaXJzdF9wYWdlKTsKLQkJCXJldCA9IG9ubGluZV9wYWdlcyhzdGFydF9wZm4sIFBBR0VTX1BFUl9TRUNUSU9OKTsKKwkJCXJldCA9IG9ubGluZV9wYWdlcyhzdGFydF9wZm4sIG5yX3BhZ2VzKTsKIAkJCWJyZWFrOwogCQljYXNlIE1FTV9PRkZMSU5FOgogCQkJc3RhcnRfcGFkZHIgPSBwYWdlX3RvX3BmbihmaXJzdF9wYWdlKSA8PCBQQUdFX1NISUZUOwogCQkJcmV0ID0gcmVtb3ZlX21lbW9yeShzdGFydF9wYWRkciwKLQkJCQkJICAgIFBBR0VTX1BFUl9TRUNUSU9OIDw8IFBBR0VfU0hJRlQpOworCQkJCQkgICAgbnJfcGFnZXMgPDwgUEFHRV9TSElGVCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCVdBUk4oMSwgS0VSTl9XQVJOSU5HICIlcyglbGQsICVsZCkgdW5rbm93biBhY3Rpb246ICIKQEAgLTI3Niw3ICsyNzgsNyBAQAogc3RhdGljIGludCBtZW1vcnlfYmxvY2tfY2hhbmdlX3N0YXRlKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSwKIAkJdW5zaWduZWQgbG9uZyB0b19zdGF0ZSwgdW5zaWduZWQgbG9uZyBmcm9tX3N0YXRlX3JlcSkKIHsKLQlpbnQgaSwgcmV0ID0gMDsKKwlpbnQgcmV0ID0gMDsKIAogCW11dGV4X2xvY2soJm1lbS0+c3RhdGVfbXV0ZXgpOwogCkBAIC0yODgsMjAgKzI5MCwxMSBAQAogCWlmICh0b19zdGF0ZSA9PSBNRU1fT0ZGTElORSkKIAkJbWVtLT5zdGF0ZSA9IE1FTV9HT0lOR19PRkZMSU5FOwogCi0JZm9yIChpID0gMDsgaSA8IHNlY3Rpb25zX3Blcl9ibG9jazsgaSsrKSB7Ci0JCXJldCA9IG1lbW9yeV9zZWN0aW9uX2FjdGlvbihtZW0tPnN0YXJ0X3NlY3Rpb25fbnIgKyBpLAotCQkJCQkgICAgdG9fc3RhdGUpOwotCQlpZiAocmV0KQotCQkJYnJlYWs7Ci0JfQorCXJldCA9IG1lbW9yeV9ibG9ja19hY3Rpb24obWVtLT5zdGFydF9zZWN0aW9uX25yLCB0b19zdGF0ZSk7CiAKLQlpZiAocmV0KSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBzZWN0aW9uc19wZXJfYmxvY2s7IGkrKykKLQkJCW1lbW9yeV9zZWN0aW9uX2FjdGlvbihtZW0tPnN0YXJ0X3NlY3Rpb25fbnIgKyBpLAotCQkJCQkgICAgICBmcm9tX3N0YXRlX3JlcSk7Ci0KKwlpZiAocmV0KQogCQltZW0tPnN0YXRlID0gZnJvbV9zdGF0ZV9yZXE7Ci0JfSBlbHNlCisJZWxzZQogCQltZW0tPnN0YXRlID0gdG9fc3RhdGU7CiAKIG91dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKaW5kZXggOWUwZTRmYy4uMWMyOTFhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKQEAgLTE5MiwxOCArMTkyLDE4IEBACiBpbnQgcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIAkJCQkgIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBpbnQgbnVtKQogewotCXN0cnVjdCByZXNvdXJjZSAqcjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSBOVUxMOwogCi0JaWYgKCFyZXMpCi0JCXJldHVybiAwOwotCi0JciA9IGttZW1kdXAocmVzLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIG51bSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHIpIHsKLQkJcGRldi0+cmVzb3VyY2UgPSByOwotCQlwZGV2LT5udW1fcmVzb3VyY2VzID0gbnVtOwotCQlyZXR1cm4gMDsKKwlpZiAocmVzKSB7CisJCXIgPSBrbWVtZHVwKHJlcywgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiBudW0sIEdGUF9LRVJORUwpOworCQlpZiAoIXIpCisJCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JcmV0dXJuIC1FTk9NRU07CisKKwlrZnJlZShwZGV2LT5yZXNvdXJjZSk7CisJcGRldi0+cmVzb3VyY2UgPSByOworCXBkZXYtPm51bV9yZXNvdXJjZXMgPSBudW07CisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyk7CiAKQEAgLTIyMCwxNyArMjIwLDE3IEBACiBpbnQgcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGNvbnN0IHZvaWQgKmRhdGEsCiAJCQkgICAgIHNpemVfdCBzaXplKQogewotCXZvaWQgKmQ7CisJdm9pZCAqZCA9IE5VTEw7CiAKLQlpZiAoIWRhdGEpCi0JCXJldHVybiAwOwotCi0JZCA9IGttZW1kdXAoZGF0YSwgc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGQpIHsKLQkJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBkOwotCQlyZXR1cm4gMDsKKwlpZiAoZGF0YSkgeworCQlkID0ga21lbWR1cChkYXRhLCBzaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFkKQorCQkJcmV0dXJuIC1FTk9NRU07CiAJfQotCXJldHVybiAtRU5PTUVNOworCisJa2ZyZWUocGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpOworCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gZDsKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YSk7CiAKQEAgLTY2Nyw3ICs2NjcsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgcGxhdGZvcm1fcG1fcHJlcGFyZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitpbnQgcGxhdGZvcm1fcG1fcHJlcGFyZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IGRldi0+ZHJpdmVyOwogCWludCByZXQgPSAwOwpAQCAtNjc4LDcgKzY3OCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgcGxhdGZvcm1fcG1fY29tcGxldGUoc3RydWN0IGRldmljZSAqZGV2KQordm9pZCBwbGF0Zm9ybV9wbV9jb21wbGV0ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IGRldi0+ZHJpdmVyOwogCkBAIC02ODYsMTYgKzY4NiwxMSBAQAogCQlkcnYtPnBtLT5jb21wbGV0ZShkZXYpOwogfQogCi0jZWxzZSAvKiAhQ09ORklHX1BNX1NMRUVQICovCi0KLSNkZWZpbmUgcGxhdGZvcm1fcG1fcHJlcGFyZQkJTlVMTAotI2RlZmluZSBwbGF0Zm9ybV9wbV9jb21wbGV0ZQkJTlVMTAotCi0jZW5kaWYgLyogIUNPTkZJR19QTV9TTEVFUCAqLworI2VuZGlmIC8qIENPTkZJR19QTV9TTEVFUCAqLwogCiAjaWZkZWYgQ09ORklHX1NVU1BFTkQKIAotaW50IF9fd2VhayBwbGF0Zm9ybV9wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK2ludCBwbGF0Zm9ybV9wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7CiAJaW50IHJldCA9IDA7CkBAIC03MTMsNyArNzA4LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgX193ZWFrIHBsYXRmb3JtX3BtX3N1c3BlbmRfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQoraW50IHBsYXRmb3JtX3BtX3N1c3BlbmRfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKIAlpbnQgcmV0ID0gMDsKQEAgLTcyOSw3ICs3MjQsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBfX3dlYWsgcGxhdGZvcm1fcG1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK2ludCBwbGF0Zm9ybV9wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKIAlpbnQgcmV0ID0gMDsKQEAgLTc0Nyw3ICs3NDIsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBfX3dlYWsgcGxhdGZvcm1fcG1fcmVzdW1lX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKK2ludCBwbGF0Zm9ybV9wbV9yZXN1bWVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKIAlpbnQgcmV0ID0gMDsKQEAgLTc2MywxOCArNzU4LDExIEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2Vsc2UgLyogIUNPTkZJR19TVVNQRU5EICovCi0KLSNkZWZpbmUgcGxhdGZvcm1fcG1fc3VzcGVuZAkJTlVMTAotI2RlZmluZSBwbGF0Zm9ybV9wbV9yZXN1bWUJCU5VTEwKLSNkZWZpbmUgcGxhdGZvcm1fcG1fc3VzcGVuZF9ub2lycQlOVUxMCi0jZGVmaW5lIHBsYXRmb3JtX3BtX3Jlc3VtZV9ub2lycQlOVUxMCi0KLSNlbmRpZiAvKiAhQ09ORklHX1NVU1BFTkQgKi8KKyNlbmRpZiAvKiBDT05GSUdfU1VTUEVORCAqLwogCiAjaWZkZWYgQ09ORklHX0hJQkVSTkFURV9DQUxMQkFDS1MKIAotc3RhdGljIGludCBwbGF0Zm9ybV9wbV9mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KQoraW50IHBsYXRmb3JtX3BtX2ZyZWV6ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IGRldi0+ZHJpdmVyOwogCWludCByZXQgPSAwOwpAQCAtNzkyLDcgKzc4MCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBwbGF0Zm9ybV9wbV9mcmVlemVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQoraW50IHBsYXRmb3JtX3BtX2ZyZWV6ZV9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IGRldi0+ZHJpdmVyOwogCWludCByZXQgPSAwOwpAQCAtODA4LDcgKzc5Niw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBwbGF0Zm9ybV9wbV90aGF3KHN0cnVjdCBkZXZpY2UgKmRldikKK2ludCBwbGF0Zm9ybV9wbV90aGF3KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7CiAJaW50IHJldCA9IDA7CkBAIC04MjYsNyArODE0LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHBsYXRmb3JtX3BtX3RoYXdfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQoraW50IHBsYXRmb3JtX3BtX3RoYXdfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKIAlpbnQgcmV0ID0gMDsKQEAgLTg0Miw3ICs4MzAsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgcGxhdGZvcm1fcG1fcG93ZXJvZmYoc3RydWN0IGRldmljZSAqZGV2KQoraW50IHBsYXRmb3JtX3BtX3Bvd2Vyb2ZmKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7CiAJaW50IHJldCA9IDA7CkBAIC04NjAsNyArODQ4LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHBsYXRmb3JtX3BtX3Bvd2Vyb2ZmX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKK2ludCBwbGF0Zm9ybV9wbV9wb3dlcm9mZl9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IGRldi0+ZHJpdmVyOwogCWludCByZXQgPSAwOwpAQCAtODc2LDcgKzg2NCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBwbGF0Zm9ybV9wbV9yZXN0b3JlKHN0cnVjdCBkZXZpY2UgKmRldikKK2ludCBwbGF0Zm9ybV9wbV9yZXN0b3JlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7CiAJaW50IHJldCA9IDA7CkBAIC04OTQsNyArODgyLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHBsYXRmb3JtX3BtX3Jlc3RvcmVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQoraW50IHBsYXRmb3JtX3BtX3Jlc3RvcmVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKIAlpbnQgcmV0ID0gMDsKQEAgLTkxMCw2MiArODk4LDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2Vsc2UgLyogIUNPTkZJR19ISUJFUk5BVEVfQ0FMTEJBQ0tTICovCi0KLSNkZWZpbmUgcGxhdGZvcm1fcG1fZnJlZXplCQlOVUxMCi0jZGVmaW5lIHBsYXRmb3JtX3BtX3RoYXcJCU5VTEwKLSNkZWZpbmUgcGxhdGZvcm1fcG1fcG93ZXJvZmYJCU5VTEwKLSNkZWZpbmUgcGxhdGZvcm1fcG1fcmVzdG9yZQkJTlVMTAotI2RlZmluZSBwbGF0Zm9ybV9wbV9mcmVlemVfbm9pcnEJTlVMTAotI2RlZmluZSBwbGF0Zm9ybV9wbV90aGF3X25vaXJxCQlOVUxMCi0jZGVmaW5lIHBsYXRmb3JtX3BtX3Bvd2Vyb2ZmX25vaXJxCU5VTEwKLSNkZWZpbmUgcGxhdGZvcm1fcG1fcmVzdG9yZV9ub2lycQlOVUxMCi0KLSNlbmRpZiAvKiAhQ09ORklHX0hJQkVSTkFURV9DQUxMQkFDS1MgKi8KLQotI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCi0KLWludCBfX3dlYWsgcGxhdGZvcm1fcG1fcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gcG1fZ2VuZXJpY19ydW50aW1lX3N1c3BlbmQoZGV2KTsKLX07Ci0KLWludCBfX3dlYWsgcGxhdGZvcm1fcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBwbV9nZW5lcmljX3J1bnRpbWVfcmVzdW1lKGRldik7Ci19OwotCi1pbnQgX193ZWFrIHBsYXRmb3JtX3BtX3J1bnRpbWVfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIHBtX2dlbmVyaWNfcnVudGltZV9pZGxlKGRldik7Ci19OwotCi0jZWxzZSAvKiAhQ09ORklHX1BNX1JVTlRJTUUgKi8KLQotI2RlZmluZSBwbGF0Zm9ybV9wbV9ydW50aW1lX3N1c3BlbmQgTlVMTAotI2RlZmluZSBwbGF0Zm9ybV9wbV9ydW50aW1lX3Jlc3VtZSBOVUxMCi0jZGVmaW5lIHBsYXRmb3JtX3BtX3J1bnRpbWVfaWRsZSBOVUxMCi0KLSNlbmRpZiAvKiAhQ09ORklHX1BNX1JVTlRJTUUgKi8KKyNlbmRpZiAvKiBDT05GSUdfSElCRVJOQVRFX0NBTExCQUNLUyAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgcGxhdGZvcm1fZGV2X3BtX29wcyA9IHsKLQkucHJlcGFyZSA9IHBsYXRmb3JtX3BtX3ByZXBhcmUsCi0JLmNvbXBsZXRlID0gcGxhdGZvcm1fcG1fY29tcGxldGUsCi0JLnN1c3BlbmQgPSBwbGF0Zm9ybV9wbV9zdXNwZW5kLAotCS5yZXN1bWUgPSBwbGF0Zm9ybV9wbV9yZXN1bWUsCi0JLmZyZWV6ZSA9IHBsYXRmb3JtX3BtX2ZyZWV6ZSwKLQkudGhhdyA9IHBsYXRmb3JtX3BtX3RoYXcsCi0JLnBvd2Vyb2ZmID0gcGxhdGZvcm1fcG1fcG93ZXJvZmYsCi0JLnJlc3RvcmUgPSBwbGF0Zm9ybV9wbV9yZXN0b3JlLAotCS5zdXNwZW5kX25vaXJxID0gcGxhdGZvcm1fcG1fc3VzcGVuZF9ub2lycSwKLQkucmVzdW1lX25vaXJxID0gcGxhdGZvcm1fcG1fcmVzdW1lX25vaXJxLAotCS5mcmVlemVfbm9pcnEgPSBwbGF0Zm9ybV9wbV9mcmVlemVfbm9pcnEsCi0JLnRoYXdfbm9pcnEgPSBwbGF0Zm9ybV9wbV90aGF3X25vaXJxLAotCS5wb3dlcm9mZl9ub2lycSA9IHBsYXRmb3JtX3BtX3Bvd2Vyb2ZmX25vaXJxLAotCS5yZXN0b3JlX25vaXJxID0gcGxhdGZvcm1fcG1fcmVzdG9yZV9ub2lycSwKLQkucnVudGltZV9zdXNwZW5kID0gcGxhdGZvcm1fcG1fcnVudGltZV9zdXNwZW5kLAotCS5ydW50aW1lX3Jlc3VtZSA9IHBsYXRmb3JtX3BtX3J1bnRpbWVfcmVzdW1lLAotCS5ydW50aW1lX2lkbGUgPSBwbGF0Zm9ybV9wbV9ydW50aW1lX2lkbGUsCisJLnJ1bnRpbWVfc3VzcGVuZCA9IHBtX2dlbmVyaWNfcnVudGltZV9zdXNwZW5kLAorCS5ydW50aW1lX3Jlc3VtZSA9IHBtX2dlbmVyaWNfcnVudGltZV9yZXN1bWUsCisJLnJ1bnRpbWVfaWRsZSA9IHBtX2dlbmVyaWNfcnVudGltZV9pZGxlLAorCVVTRV9QTEFURk9STV9QTV9TTEVFUF9PUFMKIH07CiAKIHN0cnVjdCBidXNfdHlwZSBwbGF0Zm9ybV9idXNfdHlwZSA9IHsKQEAgLTk3Nyw0MSArOTE2LDYgQEAKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChwbGF0Zm9ybV9idXNfdHlwZSk7CiAKLS8qKgotICogcGxhdGZvcm1fYnVzX2dldF9wbV9vcHMoKSAtIHJldHVybiBwb2ludGVyIHRvIGJ1c3NlcyBkZXZfcG1fb3BzCi0gKgotICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBieSBwbGF0Zm9ybSBjb2RlIHRvIGdldCB0aGUgY3VycmVudAotICogc2V0IG9mIGRldl9wbV9vcHMgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIHBsYXRmb3JtX2J1c190eXBlLgotICovCi1jb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqIF9faW5pdCBwbGF0Zm9ybV9idXNfZ2V0X3BtX29wcyh2b2lkKQotewotCXJldHVybiBwbGF0Zm9ybV9idXNfdHlwZS5wbTsKLX0KLQotLyoqCi0gKiBwbGF0Zm9ybV9idXNfc2V0X3BtX29wcygpIC0gdXBkYXRlIGRldl9wbV9vcHMgZm9yIHRoZSBwbGF0Zm9ybV9idXNfdHlwZQotICoKLSAqIEBwbTogcG9pbnRlciB0byBuZXcgZGV2X3BtX29wcyBzdHJ1Y3QgdG8gYmUgdXNlZCBmb3IgcGxhdGZvcm1fYnVzX3R5cGUKLSAqCi0gKiBQbGF0Zm9ybSBjb2RlIGNhbiBvdmVycmlkZSB0aGUgZGV2X3BtX29wcyBtZXRob2RzIG9mCi0gKiBwbGF0Zm9ybV9idXNfdHlwZSBieSB1c2luZyB0aGlzIGZ1bmN0aW9uLiAgSXQgaXMgZXhwZWN0ZWQgdGhhdAotICogcGxhdGZvcm0gY29kZSB3aWxsIGZpcnN0IGRvIGEgcGxhdGZvcm1fYnVzX2dldF9wbV9vcHMoKSwgdGhlbgotICoga21lbWR1cCBpdCwgdGhlbiBjdXN0b21pemUgc2VsZWN0ZWQgbWV0aG9kcyBhbmQgcGFzcyBhIHBvaW50ZXIgdG8KLSAqIHRoZSBuZXcgc3RydWN0IGRldl9wbV9vcHMgdG8gdGhpcyBmdW5jdGlvbi4KLSAqCi0gKiBTaW5jZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlIGlzIGN1c3RvbWl6aW5nIG1ldGhvZHMgZm9yICphbGwqCi0gKiBkZXZpY2VzIChub3QganVzdCBwbGF0Zm9ybS1zcGVjaWZpYyBkZXZpY2VzKSBpdCBpcyBleHBlY3RlZCB0aGF0Ci0gKiBhbnkgY3VzdG9tIG92ZXJyaWRlcyBvZiB0aGVzZSBmdW5jdGlvbnMgd2lsbCBrZWVwIGV4aXN0aW5nIGJlaGF2aW9yCi0gKiBhbmQgc2ltcGx5IGV4dGVuZCBpdC4gIEZvciBleGFtcGxlLCBhbnkgY3VzdG9taXphdGlvbiBvZiB0aGUKLSAqIHJ1bnRpbWUgUE0gbWV0aG9kcyBzaG91bGQgY29udGludWUgdG8gY2FsbCB0aGUgcG1fZ2VuZXJpY18qCi0gKiBmdW5jdGlvbnMgYXMgdGhlIGRlZmF1bHQgb25lcyBkbyBpbiBhZGRpdGlvbiB0byB0aGUKLSAqIHBsYXRmb3JtLXNwZWNpZmljIGJlaGF2aW9yLgotICovCi12b2lkIF9faW5pdCBwbGF0Zm9ybV9idXNfc2V0X3BtX29wcyhjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG0pCi17Ci0JcGxhdGZvcm1fYnVzX3R5cGUucG0gPSBwbTsKLX0KLQogaW50IF9faW5pdCBwbGF0Zm9ybV9idXNfaW5pdCh2b2lkKQogewogCWludCBlcnJvcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9NYWtlZmlsZSBiL2RyaXZlcnMvYmFzZS9wb3dlci9NYWtlZmlsZQppbmRleCAxMThjMWI5Li4zNjQ3ZTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL01ha2VmaWxlCkBAIC0zLDYgKzMsNiBAQAogb2JqLSQoQ09ORklHX1BNX1JVTlRJTUUpCSs9IHJ1bnRpbWUubwogb2JqLSQoQ09ORklHX1BNX1RSQUNFX1JUQykJKz0gdHJhY2Uubwogb2JqLSQoQ09ORklHX1BNX09QUCkJKz0gb3BwLm8KK29iai0kKENPTkZJR19IQVZFX0NMSykJKz0gY2xvY2tfb3BzLm8KIAotY2NmbGFncy0kKENPTkZJR19ERUJVR19EUklWRVIpIDo9IC1EREVCVUcKLWNjZmxhZ3MtJChDT05GSUdfUE1fVkVSQk9TRSkgICArPSAtRERFQlVHCitjY2ZsYWdzLSQoQ09ORklHX0RFQlVHX0RSSVZFUikgOj0gLURERUJVRwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9jbG9ja19vcHMuYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9jbG9ja19vcHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGRkMDlkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL2Nsb2NrX29wcy5jCkBAIC0wLDAgKzEsNDMxIEBACisvKgorICogZHJpdmVycy9iYXNlL3Bvd2VyL2Nsb2NrX29wcy5jIC0gR2VuZXJpYyBjbG9jayBtYW5pcHVsYXRpb24gUE0gY2FsbGJhY2tzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDExIFJhZmFlbCBKLiBXeXNvY2tpIDxyandAc2lzay5wbD4sIFJlbmVzYXMgRWxlY3Ryb25pY3MgQ29ycC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTHYyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKKyNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorCitzdHJ1Y3QgcG1fcnVudGltZV9jbGtfZGF0YSB7CisJc3RydWN0IGxpc3RfaGVhZCBjbG9ja19saXN0OworCXN0cnVjdCBtdXRleCBsb2NrOworfTsKKworZW51bSBwY2Vfc3RhdHVzIHsKKwlQQ0VfU1RBVFVTX05PTkUgPSAwLAorCVBDRV9TVEFUVVNfQUNRVUlSRUQsCisJUENFX1NUQVRVU19FTkFCTEVELAorCVBDRV9TVEFUVVNfRVJST1IsCit9OworCitzdHJ1Y3QgcG1fY2xvY2tfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwljaGFyICpjb25faWQ7CisJc3RydWN0IGNsayAqY2xrOworCWVudW0gcGNlX3N0YXR1cyBzdGF0dXM7Cit9OworCitzdGF0aWMgc3RydWN0IHBtX3J1bnRpbWVfY2xrX2RhdGEgKl9fdG9fcHJkKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZGV2ID8gZGV2LT5wb3dlci5zdWJzeXNfZGF0YSA6IE5VTEw7Cit9CisKKy8qKgorICogcG1fcnVudGltZV9jbGtfYWRkIC0gU3RhcnQgdXNpbmcgYSBkZXZpY2UgY2xvY2sgZm9yIHJ1bnRpbWUgUE0uCisgKiBAZGV2OiBEZXZpY2Ugd2hvc2UgY2xvY2sgaXMgZ29pbmcgdG8gYmUgdXNlZCBmb3IgcnVudGltZSBQTS4KKyAqIEBjb25faWQ6IENvbm5lY3Rpb24gSUQgb2YgdGhlIGNsb2NrLgorICoKKyAqIEFkZCB0aGUgY2xvY2sgcmVwcmVzZW50ZWQgYnkgQGNvbl9pZCB0byB0aGUgbGlzdCBvZiBjbG9ja3MgdXNlZCBmb3IKKyAqIHRoZSBydW50aW1lIFBNIG9mIEBkZXYuCisgKi8KK2ludCBwbV9ydW50aW1lX2Nsa19hZGQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpjb25faWQpCit7CisJc3RydWN0IHBtX3J1bnRpbWVfY2xrX2RhdGEgKnByZCA9IF9fdG9fcHJkKGRldik7CisJc3RydWN0IHBtX2Nsb2NrX2VudHJ5ICpjZTsKKworCWlmICghcHJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNlID0ga3phbGxvYyhzaXplb2YoKmNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjZSkgeworCQlkZXZfZXJyKGRldiwgIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBjbG9jayBlbnRyeS5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAoY29uX2lkKSB7CisJCWNlLT5jb25faWQgPSBrc3RyZHVwKGNvbl9pZCwgR0ZQX0tFUk5FTCk7CisJCWlmICghY2UtPmNvbl9pZCkgeworCQkJZGV2X2VycihkZXYsCisJCQkJIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBjbG9jayBjb25uZWN0aW9uIElELlxuIik7CisJCQlrZnJlZShjZSk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KKworCW11dGV4X2xvY2soJnByZC0+bG9jayk7CisJbGlzdF9hZGRfdGFpbCgmY2UtPm5vZGUsICZwcmQtPmNsb2NrX2xpc3QpOworCW11dGV4X3VubG9jaygmcHJkLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBfX3BtX3J1bnRpbWVfY2xrX3JlbW92ZSAtIERlc3Ryb3kgcnVudGltZSBQTSBjbG9jayBlbnRyeS4KKyAqIEBjZTogUnVudGltZSBQTSBjbG9jayBlbnRyeSB0byBkZXN0cm95LgorICoKKyAqIFRoaXMgcm91dGluZSBtdXN0IGJlIGNhbGxlZCB1bmRlciB0aGUgbXV0ZXggcHJvdGVjdGluZyB0aGUgcnVudGltZSBQTSBsaXN0CisgKiBvZiBjbG9ja3MgY29ycmVzcG9uZGluZyB0aGUgdGhlIEBjZSdzIGRldmljZS4KKyAqLworc3RhdGljIHZvaWQgX19wbV9ydW50aW1lX2Nsa19yZW1vdmUoc3RydWN0IHBtX2Nsb2NrX2VudHJ5ICpjZSkKK3sKKwlpZiAoIWNlKQorCQlyZXR1cm47CisKKwlsaXN0X2RlbCgmY2UtPm5vZGUpOworCisJaWYgKGNlLT5zdGF0dXMgPCBQQ0VfU1RBVFVTX0VSUk9SKSB7CisJCWlmIChjZS0+c3RhdHVzID09IFBDRV9TVEFUVVNfRU5BQkxFRCkKKwkJCWNsa19kaXNhYmxlKGNlLT5jbGspOworCisJCWlmIChjZS0+c3RhdHVzID49IFBDRV9TVEFUVVNfQUNRVUlSRUQpCisJCQljbGtfcHV0KGNlLT5jbGspOworCX0KKworCWlmIChjZS0+Y29uX2lkKQorCQlrZnJlZShjZS0+Y29uX2lkKTsKKworCWtmcmVlKGNlKTsKK30KKworLyoqCisgKiBwbV9ydW50aW1lX2Nsa19yZW1vdmUgLSBTdG9wIHVzaW5nIGEgZGV2aWNlIGNsb2NrIGZvciBydW50aW1lIFBNLgorICogQGRldjogRGV2aWNlIHdob3NlIGNsb2NrIHNob3VsZCBub3QgYmUgdXNlZCBmb3IgcnVudGltZSBQTSBhbnkgbW9yZS4KKyAqIEBjb25faWQ6IENvbm5lY3Rpb24gSUQgb2YgdGhlIGNsb2NrLgorICoKKyAqIFJlbW92ZSB0aGUgY2xvY2sgcmVwcmVzZW50ZWQgYnkgQGNvbl9pZCBmcm9tIHRoZSBsaXN0IG9mIGNsb2NrcyB1c2VkIGZvcgorICogdGhlIHJ1bnRpbWUgUE0gb2YgQGRldi4KKyAqLwordm9pZCBwbV9ydW50aW1lX2Nsa19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpjb25faWQpCit7CisJc3RydWN0IHBtX3J1bnRpbWVfY2xrX2RhdGEgKnByZCA9IF9fdG9fcHJkKGRldik7CisJc3RydWN0IHBtX2Nsb2NrX2VudHJ5ICpjZTsKKworCWlmICghcHJkKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZwcmQtPmxvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjZSwgJnByZC0+Y2xvY2tfbGlzdCwgbm9kZSkgeworCQlpZiAoIWNvbl9pZCAmJiAhY2UtPmNvbl9pZCkgeworCQkJX19wbV9ydW50aW1lX2Nsa19yZW1vdmUoY2UpOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoIWNvbl9pZCB8fCAhY2UtPmNvbl9pZCkgeworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjb25faWQsIGNlLT5jb25faWQpKSB7CisJCQlfX3BtX3J1bnRpbWVfY2xrX3JlbW92ZShjZSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmcHJkLT5sb2NrKTsKK30KKworLyoqCisgKiBwbV9ydW50aW1lX2Nsa19pbml0IC0gSW5pdGlhbGl6ZSBhIGRldmljZSdzIGxpc3Qgb2YgcnVudGltZSBQTSBjbG9ja3MuCisgKiBAZGV2OiBEZXZpY2UgdG8gaW5pdGlhbGl6ZSB0aGUgbGlzdCBvZiBydW50aW1lIFBNIGNsb2NrcyBmb3IuCisgKgorICogQWxsb2NhdGUgYSBzdHJ1Y3QgcG1fcnVudGltZV9jbGtfZGF0YSBvYmplY3QsIGluaXRpYWxpemUgaXRzIGxvY2sgbWVtYmVyIGFuZAorICogbWFrZSB0aGUgQGRldidzIHBvd2VyLnN1YnN5c19kYXRhIGZpZWxkIHBvaW50IHRvIGl0LgorICovCitpbnQgcG1fcnVudGltZV9jbGtfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBtX3J1bnRpbWVfY2xrX2RhdGEgKnByZDsKKworCXByZCA9IGt6YWxsb2Moc2l6ZW9mKCpwcmQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByZCkgeworCQlkZXZfZXJyKGRldiwgIk5vdCBlbm91Z2ggbWVtb3J5IGZvIHJ1bnRpbWUgUE0gZGF0YS5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmcHJkLT5jbG9ja19saXN0KTsKKwltdXRleF9pbml0KCZwcmQtPmxvY2spOworCWRldi0+cG93ZXIuc3Vic3lzX2RhdGEgPSBwcmQ7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcG1fcnVudGltZV9jbGtfZGVzdHJveSAtIERlc3Ryb3kgYSBkZXZpY2UncyBsaXN0IG9mIHJ1bnRpbWUgUE0gY2xvY2tzLgorICogQGRldjogRGV2aWNlIHRvIGRlc3Ryb3kgdGhlIGxpc3Qgb2YgcnVudGltZSBQTSBjbG9ja3MgZm9yLgorICoKKyAqIENsZWFyIHRoZSBAZGV2J3MgcG93ZXIuc3Vic3lzX2RhdGEgZmllbGQsIHJlbW92ZSB0aGUgbGlzdCBvZiBjbG9jayBlbnRyaWVzCisgKiBmcm9tIHRoZSBzdHJ1Y3QgcG1fcnVudGltZV9jbGtfZGF0YSBvYmplY3QgcG9pbnRlZCB0byBieSBpdCBiZWZvcmUgYW5kIGZyZWUKKyAqIHRoYXQgb2JqZWN0LgorICovCit2b2lkIHBtX3J1bnRpbWVfY2xrX2Rlc3Ryb3koc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbV9ydW50aW1lX2Nsa19kYXRhICpwcmQgPSBfX3RvX3ByZChkZXYpOworCXN0cnVjdCBwbV9jbG9ja19lbnRyeSAqY2UsICpjOworCisJaWYgKCFwcmQpCisJCXJldHVybjsKKworCWRldi0+cG93ZXIuc3Vic3lzX2RhdGEgPSBOVUxMOworCisJbXV0ZXhfbG9jaygmcHJkLT5sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKGNlLCBjLCAmcHJkLT5jbG9ja19saXN0LCBub2RlKQorCQlfX3BtX3J1bnRpbWVfY2xrX3JlbW92ZShjZSk7CisKKwltdXRleF91bmxvY2soJnByZC0+bG9jayk7CisKKwlrZnJlZShwcmQpOworfQorCisvKioKKyAqIHBtX3J1bnRpbWVfY2xrX2FjcXVpcmUgLSBBY3F1aXJlIGEgZGV2aWNlIGNsb2NrLgorICogQGRldjogRGV2aWNlIHdob3NlIGNsb2NrIGlzIHRvIGJlIGFjcXVpcmVkLgorICogQGNvbl9pZDogQ29ubmVjdGlvbiBJRCBvZiB0aGUgY2xvY2suCisgKi8KK3N0YXRpYyB2b2lkIHBtX3J1bnRpbWVfY2xrX2FjcXVpcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgcG1fY2xvY2tfZW50cnkgKmNlKQoreworCWNlLT5jbGsgPSBjbGtfZ2V0KGRldiwgY2UtPmNvbl9pZCk7CisJaWYgKElTX0VSUihjZS0+Y2xrKSkgeworCQljZS0+c3RhdHVzID0gUENFX1NUQVRVU19FUlJPUjsKKwl9IGVsc2UgeworCQljZS0+c3RhdHVzID0gUENFX1NUQVRVU19BQ1FVSVJFRDsKKwkJZGV2X2RiZyhkZXYsICJDbG9jayAlcyBtYW5hZ2VkIGJ5IHJ1bnRpbWUgUE0uXG4iLCBjZS0+Y29uX2lkKTsKKwl9Cit9CisKKy8qKgorICogcG1fcnVudGltZV9jbGtfc3VzcGVuZCAtIERpc2FibGUgY2xvY2tzIGluIGEgZGV2aWNlJ3MgcnVudGltZSBQTSBjbG9jayBsaXN0LgorICogQGRldjogRGV2aWNlIHRvIGRpc2FibGUgdGhlIGNsb2NrcyBmb3IuCisgKi8KK2ludCBwbV9ydW50aW1lX2Nsa19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcG1fcnVudGltZV9jbGtfZGF0YSAqcHJkID0gX190b19wcmQoZGV2KTsKKwlzdHJ1Y3QgcG1fY2xvY2tfZW50cnkgKmNlOworCisJZGV2X2RiZyhkZXYsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoIXByZCkKKwkJcmV0dXJuIDA7CisKKwltdXRleF9sb2NrKCZwcmQtPmxvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGNlLCAmcHJkLT5jbG9ja19saXN0LCBub2RlKSB7CisJCWlmIChjZS0+c3RhdHVzID09IFBDRV9TVEFUVVNfTk9ORSkKKwkJCXBtX3J1bnRpbWVfY2xrX2FjcXVpcmUoZGV2LCBjZSk7CisKKwkJaWYgKGNlLT5zdGF0dXMgPCBQQ0VfU1RBVFVTX0VSUk9SKSB7CisJCQljbGtfZGlzYWJsZShjZS0+Y2xrKTsKKwkJCWNlLT5zdGF0dXMgPSBQQ0VfU1RBVFVTX0FDUVVJUkVEOworCQl9CisJfQorCisJbXV0ZXhfdW5sb2NrKCZwcmQtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcG1fcnVudGltZV9jbGtfcmVzdW1lIC0gRW5hYmxlIGNsb2NrcyBpbiBhIGRldmljZSdzIHJ1bnRpbWUgUE0gY2xvY2sgbGlzdC4KKyAqIEBkZXY6IERldmljZSB0byBlbmFibGUgdGhlIGNsb2NrcyBmb3IuCisgKi8KK2ludCBwbV9ydW50aW1lX2Nsa19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbV9ydW50aW1lX2Nsa19kYXRhICpwcmQgPSBfX3RvX3ByZChkZXYpOworCXN0cnVjdCBwbV9jbG9ja19lbnRyeSAqY2U7CisKKwlkZXZfZGJnKGRldiwgIiVzKClcbiIsIF9fZnVuY19fKTsKKworCWlmICghcHJkKQorCQlyZXR1cm4gMDsKKworCW11dGV4X2xvY2soJnByZC0+bG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNlLCAmcHJkLT5jbG9ja19saXN0LCBub2RlKSB7CisJCWlmIChjZS0+c3RhdHVzID09IFBDRV9TVEFUVVNfTk9ORSkKKwkJCXBtX3J1bnRpbWVfY2xrX2FjcXVpcmUoZGV2LCBjZSk7CisKKwkJaWYgKGNlLT5zdGF0dXMgPCBQQ0VfU1RBVFVTX0VSUk9SKSB7CisJCQljbGtfZW5hYmxlKGNlLT5jbGspOworCQkJY2UtPnN0YXR1cyA9IFBDRV9TVEFUVVNfRU5BQkxFRDsKKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmcHJkLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHBtX3J1bnRpbWVfY2xrX25vdGlmeSAtIE5vdGlmeSByb3V0aW5lIGZvciBkZXZpY2UgYWRkaXRpb24gYW5kIHJlbW92YWwuCisgKiBAbmI6IE5vdGlmaWVyIGJsb2NrIG9iamVjdCB0aGlzIGZ1bmN0aW9uIGlzIGEgbWVtYmVyIG9mLgorICogQGFjdGlvbjogT3BlcmF0aW9uIGJlaW5nIGNhcnJpZWQgb3V0IGJ5IHRoZSBjYWxsZXIuCisgKiBAZGF0YTogRGV2aWNlIHRoZSByb3V0aW5lIGlzIGJlaW5nIHJ1biBmb3IuCisgKgorICogRm9yIHRoaXMgZnVuY3Rpb24gdG8gd29yaywgQG5iIG11c3QgYmUgYSBtZW1iZXIgb2YgYW4gb2JqZWN0IG9mIHR5cGUKKyAqIHN0cnVjdCBwbV9jbGtfbm90aWZpZXJfYmxvY2sgY29udGFpbmluZyBhbGwgb2YgdGhlIHJlcXVpc2l0ZSBkYXRhLgorICogU3BlY2lmaWNhbGx5LCB0aGUgcHdyX2RvbWFpbiBtZW1iZXIgb2YgdGhhdCBvYmplY3QgaXMgY29waWVkIHRvIHRoZSBkZXZpY2UncworICogcHdyX2RvbWFpbiBmaWVsZCBhbmQgaXRzIGNvbl9pZHMgbWVtYmVyIGlzIHVzZWQgdG8gcG9wdWxhdGUgdGhlIGRldmljZSdzIGxpc3QKKyAqIG9mIHJ1bnRpbWUgUE0gY2xvY2tzLCBkZXBlbmRpbmcgb24gQGFjdGlvbi4KKyAqCisgKiBJZiB0aGUgZGV2aWNlJ3MgcHdyX2RvbWFpbiBmaWVsZCBpcyBhbHJlYWR5IHBvcHVsYXRlZCB3aXRoIGEgdmFsdWUgZGlmZmVyZW50CisgKiBmcm9tIHRoZSBvbmUgc3RvcmVkIGluIHRoZSBzdHJ1Y3QgcG1fY2xrX25vdGlmaWVyX2Jsb2NrIG9iamVjdCwgdGhlIGZ1bmN0aW9uCisgKiBkb2VzIG5vdGhpbmcuCisgKi8KK3N0YXRpYyBpbnQgcG1fcnVudGltZV9jbGtfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwbV9jbGtfbm90aWZpZXJfYmxvY2sgKmNsa25iOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRhdGE7CisJY2hhciAqY29uX2lkOworCWludCBlcnJvcjsKKworCWRldl9kYmcoZGV2LCAiJXMoKSAlbGRcbiIsIF9fZnVuY19fLCBhY3Rpb24pOworCisJY2xrbmIgPSBjb250YWluZXJfb2YobmIsIHN0cnVjdCBwbV9jbGtfbm90aWZpZXJfYmxvY2ssIG5iKTsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBCVVNfTk9USUZZX0FERF9ERVZJQ0U6CisJCWlmIChkZXYtPnB3cl9kb21haW4pCisJCQlicmVhazsKKworCQllcnJvciA9IHBtX3J1bnRpbWVfY2xrX2luaXQoZGV2KTsKKwkJaWYgKGVycm9yKQorCQkJYnJlYWs7CisKKwkJZGV2LT5wd3JfZG9tYWluID0gY2xrbmItPnB3cl9kb21haW47CisJCWlmIChjbGtuYi0+Y29uX2lkc1swXSkgeworCQkJZm9yIChjb25faWQgPSBjbGtuYi0+Y29uX2lkc1swXTsgKmNvbl9pZDsgY29uX2lkKyspCisJCQkJcG1fcnVudGltZV9jbGtfYWRkKGRldiwgY29uX2lkKTsKKwkJfSBlbHNlIHsKKwkJCXBtX3J1bnRpbWVfY2xrX2FkZChkZXYsIE5VTEwpOworCQl9CisKKwkJYnJlYWs7CisJY2FzZSBCVVNfTk9USUZZX0RFTF9ERVZJQ0U6CisJCWlmIChkZXYtPnB3cl9kb21haW4gIT0gY2xrbmItPnB3cl9kb21haW4pCisJCQlicmVhazsKKworCQlkZXYtPnB3cl9kb21haW4gPSBOVUxMOworCQlwbV9ydW50aW1lX2Nsa19kZXN0cm95KGRldik7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCisjZWxzZSAvKiAhQ09ORklHX1BNX1JVTlRJTUUgKi8KKworLyoqCisgKiBlbmFibGVfY2xvY2sgLSBFbmFibGUgYSBkZXZpY2UgY2xvY2suCisgKiBAZGV2OiBEZXZpY2Ugd2hvc2UgY2xvY2sgaXMgdG8gYmUgZW5hYmxlZC4KKyAqIEBjb25faWQ6IENvbm5lY3Rpb24gSUQgb2YgdGhlIGNsb2NrLgorICovCitzdGF0aWMgdm9pZCBlbmFibGVfY2xvY2soc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpjb25faWQpCit7CisJc3RydWN0IGNsayAqY2xrOworCisJY2xrID0gY2xrX2dldChkZXYsIGNvbl9pZCk7CisJaWYgKCFJU19FUlIoY2xrKSkgeworCQljbGtfZW5hYmxlKGNsayk7CisJCWNsa19wdXQoY2xrKTsKKwkJZGV2X2luZm8oZGV2LCAiUnVudGltZSBQTSBkaXNhYmxlZCwgY2xvY2sgZm9yY2VkIG9uLlxuIik7CisJfQorfQorCisvKioKKyAqIGRpc2FibGVfY2xvY2sgLSBEaXNhYmxlIGEgZGV2aWNlIGNsb2NrLgorICogQGRldjogRGV2aWNlIHdob3NlIGNsb2NrIGlzIHRvIGJlIGRpc2FibGVkLgorICogQGNvbl9pZDogQ29ubmVjdGlvbiBJRCBvZiB0aGUgY2xvY2suCisgKi8KK3N0YXRpYyB2b2lkIGRpc2FibGVfY2xvY2soc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpjb25faWQpCit7CisJc3RydWN0IGNsayAqY2xrOworCisJY2xrID0gY2xrX2dldChkZXYsIGNvbl9pZCk7CisJaWYgKCFJU19FUlIoY2xrKSkgeworCQljbGtfZGlzYWJsZShjbGspOworCQljbGtfcHV0KGNsayk7CisJCWRldl9pbmZvKGRldiwgIlJ1bnRpbWUgUE0gZGlzYWJsZWQsIGNsb2NrIGZvcmNlZCBvZmYuXG4iKTsKKwl9Cit9CisKKy8qKgorICogcG1fcnVudGltZV9jbGtfbm90aWZ5IC0gTm90aWZ5IHJvdXRpbmUgZm9yIGRldmljZSBhZGRpdGlvbiBhbmQgcmVtb3ZhbC4KKyAqIEBuYjogTm90aWZpZXIgYmxvY2sgb2JqZWN0IHRoaXMgZnVuY3Rpb24gaXMgYSBtZW1iZXIgb2YuCisgKiBAYWN0aW9uOiBPcGVyYXRpb24gYmVpbmcgY2FycmllZCBvdXQgYnkgdGhlIGNhbGxlci4KKyAqIEBkYXRhOiBEZXZpY2UgdGhlIHJvdXRpbmUgaXMgYmVpbmcgcnVuIGZvci4KKyAqCisgKiBGb3IgdGhpcyBmdW5jdGlvbiB0byB3b3JrLCBAbmIgbXVzdCBiZSBhIG1lbWJlciBvZiBhbiBvYmplY3Qgb2YgdHlwZQorICogc3RydWN0IHBtX2Nsa19ub3RpZmllcl9ibG9jayBjb250YWluaW5nIGFsbCBvZiB0aGUgcmVxdWlzaXRlIGRhdGEuCisgKiBTcGVjaWZpY2FsbHksIHRoZSBjb25faWRzIG1lbWJlciBvZiB0aGF0IG9iamVjdCBpcyB1c2VkIHRvIGVuYWJsZSBvciBkaXNhYmxlCisgKiB0aGUgZGV2aWNlJ3MgY2xvY2tzLCBkZXBlbmRpbmcgb24gQGFjdGlvbi4KKyAqLworc3RhdGljIGludCBwbV9ydW50aW1lX2Nsa19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKKwkJCQkgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBtX2Nsa19ub3RpZmllcl9ibG9jayAqY2xrbmI7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZGF0YTsKKwljaGFyICpjb25faWQ7CisKKwlkZXZfZGJnKGRldiwgIiVzKCkgJWxkXG4iLCBfX2Z1bmNfXywgYWN0aW9uKTsKKworCWNsa25iID0gY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgcG1fY2xrX25vdGlmaWVyX2Jsb2NrLCBuYik7CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgQlVTX05PVElGWV9BRERfREVWSUNFOgorCQlpZiAoY2xrbmItPmNvbl9pZHNbMF0pIHsKKwkJCWZvciAoY29uX2lkID0gY2xrbmItPmNvbl9pZHNbMF07ICpjb25faWQ7IGNvbl9pZCsrKQorCQkJCWVuYWJsZV9jbG9jayhkZXYsIGNvbl9pZCk7CisJCX0gZWxzZSB7CisJCQllbmFibGVfY2xvY2soZGV2LCBOVUxMKTsKKwkJfQorCQlicmVhazsKKwljYXNlIEJVU19OT1RJRllfREVMX0RFVklDRToKKwkJaWYgKGNsa25iLT5jb25faWRzWzBdKSB7CisJCQlmb3IgKGNvbl9pZCA9IGNsa25iLT5jb25faWRzWzBdOyAqY29uX2lkOyBjb25faWQrKykKKwkJCQlkaXNhYmxlX2Nsb2NrKGRldiwgY29uX2lkKTsKKwkJfSBlbHNlIHsKKwkJCWRpc2FibGVfY2xvY2soZGV2LCBOVUxMKTsKKwkJfQorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qICFDT05GSUdfUE1fUlVOVElNRSAqLworCisvKioKKyAqIHBtX3J1bnRpbWVfY2xrX2FkZF9ub3RpZmllciAtIEFkZCBidXMgdHlwZSBub3RpZmllciBmb3IgcnVudGltZSBQTSBjbG9ja3MuCisgKiBAYnVzOiBCdXMgdHlwZSB0byBhZGQgdGhlIG5vdGlmaWVyIHRvLgorICogQGNsa25iOiBOb3RpZmllciB0byBiZSBhZGRlZCB0byB0aGUgZ2l2ZW4gYnVzIHR5cGUuCisgKgorICogVGhlIG5iIG1lbWJlciBvZiBAY2xrbmIgaXMgbm90IGV4cGVjdGVkIHRvIGJlIGluaXRpYWxpemVkIGFuZCBpdHMKKyAqIG5vdGlmaWVyX2NhbGwgbWVtYmVyIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBwbV9ydW50aW1lX2Nsa19ub3RpZnkoKS4gIEhvd2V2ZXIsCisgKiB0aGUgcmVtYWluaW5nIG1lbWJlcnMgb2YgQGNsa25iIHNob3VsZCBiZSBwb3B1bGF0ZWQgcHJpb3IgdG8gY2FsbGluZyB0aGlzCisgKiByb3V0aW5lLgorICovCit2b2lkIHBtX3J1bnRpbWVfY2xrX2FkZF9ub3RpZmllcihzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywKKwkJCQkgc3RydWN0IHBtX2Nsa19ub3RpZmllcl9ibG9jayAqY2xrbmIpCit7CisJaWYgKCFidXMgfHwgIWNsa25iKQorCQlyZXR1cm47CisKKwljbGtuYi0+bmIubm90aWZpZXJfY2FsbCA9IHBtX3J1bnRpbWVfY2xrX25vdGlmeTsKKwlidXNfcmVnaXN0ZXJfbm90aWZpZXIoYnVzLCAmY2xrbmItPm5iKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9nZW5lcmljX29wcy5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL2dlbmVyaWNfb3BzLmMKaW5kZXggNDJmOTdmOS4uY2IzYmIzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL2dlbmVyaWNfb3BzLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL2dlbmVyaWNfb3BzLmMKQEAgLTc0LDYgKzc0LDIzIEBACiAKICNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIC8qKgorICogcG1fZ2VuZXJpY19wcmVwYXJlIC0gR2VuZXJpYyByb3V0aW5lIHByZXBhcmluZyBhIGRldmljZSBmb3IgcG93ZXIgdHJhbnNpdGlvbi4KKyAqIEBkZXY6IERldmljZSB0byBwcmVwYXJlLgorICoKKyAqIFByZXBhcmUgYSBkZXZpY2UgZm9yIGEgc3lzdGVtLXdpZGUgcG93ZXIgdHJhbnNpdGlvbi4KKyAqLworaW50IHBtX2dlbmVyaWNfcHJlcGFyZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IGRldi0+ZHJpdmVyOworCWludCByZXQgPSAwOworCisJaWYgKGRydiAmJiBkcnYtPnBtICYmIGRydi0+cG0tPnByZXBhcmUpCisJCXJldCA9IGRydi0+cG0tPnByZXBhcmUoZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgogICogX19wbV9nZW5lcmljX2NhbGwgLSBHZW5lcmljIHN1c3BlbmQvZnJlZXplL3Bvd2Vyb2ZmL3RoYXcgc3Vic3lzdGVtIGNhbGxiYWNrLgogICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KICAqIEBldmVudDogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIHVuZGVyIHdheS4KQEAgLTIxMywxNiArMjMwLDM4IEBACiAJcmV0dXJuIF9fcG1fZ2VuZXJpY19yZXN1bWUoZGV2LCBQTV9FVkVOVF9SRVNUT1JFKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBtX2dlbmVyaWNfcmVzdG9yZSk7CisKKy8qKgorICogcG1fZ2VuZXJpY19jb21wbGV0ZSAtIEdlbmVyaWMgcm91dGluZSBjb21wZXRpbmcgYSBkZXZpY2UgcG93ZXIgdHJhbnNpdGlvbi4KKyAqIEBkZXY6IERldmljZSB0byBoYW5kbGUuCisgKgorICogQ29tcGxldGUgYSBkZXZpY2UgcG93ZXIgdHJhbnNpdGlvbiBkdXJpbmcgYSBzeXN0ZW0td2lkZSBwb3dlciB0cmFuc2l0aW9uLgorICovCit2b2lkIHBtX2dlbmVyaWNfY29tcGxldGUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKKworCWlmIChkcnYgJiYgZHJ2LT5wbSAmJiBkcnYtPnBtLT5jb21wbGV0ZSkKKwkJZHJ2LT5wbS0+Y29tcGxldGUoZGV2KTsKKworCS8qCisJICogTGV0IHJ1bnRpbWUgUE0gdHJ5IHRvIHN1c3BlbmQgZGV2aWNlcyB0aGF0IGhhdmVuJ3QgYmVlbiBpbiB1c2UgYmVmb3JlCisJICogZ29pbmcgaW50byB0aGUgc3lzdGVtLXdpZGUgc2xlZXAgc3RhdGUgd2UncmUgcmVzdW1pbmcgZnJvbS4KKwkgKi8KKwlwbV9ydW50aW1lX2lkbGUoZGV2KTsKK30KICNlbmRpZiAvKiBDT05GSUdfUE1fU0xFRVAgKi8KIAogc3RydWN0IGRldl9wbV9vcHMgZ2VuZXJpY19zdWJzeXNfcG1fb3BzID0gewogI2lmZGVmIENPTkZJR19QTV9TTEVFUAorCS5wcmVwYXJlID0gcG1fZ2VuZXJpY19wcmVwYXJlLAogCS5zdXNwZW5kID0gcG1fZ2VuZXJpY19zdXNwZW5kLAogCS5yZXN1bWUgPSBwbV9nZW5lcmljX3Jlc3VtZSwKIAkuZnJlZXplID0gcG1fZ2VuZXJpY19mcmVlemUsCiAJLnRoYXcgPSBwbV9nZW5lcmljX3RoYXcsCiAJLnBvd2Vyb2ZmID0gcG1fZ2VuZXJpY19wb3dlcm9mZiwKIAkucmVzdG9yZSA9IHBtX2dlbmVyaWNfcmVzdG9yZSwKKwkuY29tcGxldGUgPSBwbV9nZW5lcmljX2NvbXBsZXRlLAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKIAkucnVudGltZV9zdXNwZW5kID0gcG1fZ2VuZXJpY19ydW50aW1lX3N1c3BlbmQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwppbmRleCBmYmM1YjZlLi5hYTYzMjAyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCkBAIC02Myw2ICs2Myw3IEBACiAJZGV2LT5wb3dlci53YWtldXAgPSBOVUxMOwogCXNwaW5fbG9ja19pbml0KCZkZXYtPnBvd2VyLmxvY2spOwogCXBtX3J1bnRpbWVfaW5pdChkZXYpOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPnBvd2VyLmVudHJ5KTsKIH0KIAogLyoqCkBAIC00MjUsMTAgKzQyNiw4IEBACiAKIAlpZiAoZGV2LT5wd3JfZG9tYWluKSB7CiAJCXBtX2Rldl9kYmcoZGV2LCBzdGF0ZSwgIkVBUkxZIHBvd2VyIGRvbWFpbiAiKTsKLQkJcG1fbm9pcnFfb3AoZGV2LCAmZGV2LT5wd3JfZG9tYWluLT5vcHMsIHN0YXRlKTsKLQl9Ci0KLQlpZiAoZGV2LT50eXBlICYmIGRldi0+dHlwZS0+cG0pIHsKKwkJZXJyb3IgPSBwbV9ub2lycV9vcChkZXYsICZkZXYtPnB3cl9kb21haW4tPm9wcywgc3RhdGUpOworCX0gZWxzZSBpZiAoZGV2LT50eXBlICYmIGRldi0+dHlwZS0+cG0pIHsKIAkJcG1fZGV2X2RiZyhkZXYsIHN0YXRlLCAiRUFSTFkgdHlwZSAiKTsKIAkJZXJyb3IgPSBwbV9ub2lycV9vcChkZXYsIGRldi0+dHlwZS0+cG0sIHN0YXRlKTsKIAl9IGVsc2UgaWYgKGRldi0+Y2xhc3MgJiYgZGV2LT5jbGFzcy0+cG0pIHsKQEAgLTUxNiw3ICs1MTUsOCBAQAogCiAJaWYgKGRldi0+cHdyX2RvbWFpbikgewogCQlwbV9kZXZfZGJnKGRldiwgc3RhdGUsICJwb3dlciBkb21haW4gIik7Ci0JCXBtX29wKGRldiwgJmRldi0+cHdyX2RvbWFpbi0+b3BzLCBzdGF0ZSk7CisJCWVycm9yID0gcG1fb3AoZGV2LCAmZGV2LT5wd3JfZG9tYWluLT5vcHMsIHN0YXRlKTsKKwkJZ290byBFbmQ7CiAJfQogCiAJaWYgKGRldi0+dHlwZSAmJiBkZXYtPnR5cGUtPnBtKSB7CkBAIC01NzksMTEgKzU3OSwxMyBAQAogICogRXhlY3V0ZSB0aGUgYXBwcm9wcmlhdGUgInJlc3VtZSIgY2FsbGJhY2sgZm9yIGFsbCBkZXZpY2VzIHdob3NlIHN0YXR1cwogICogaW5kaWNhdGVzIHRoYXQgdGhleSBhcmUgc3VzcGVuZGVkLgogICovCi1zdGF0aWMgdm9pZCBkcG1fcmVzdW1lKHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3ZvaWQgZHBtX3Jlc3VtZShwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCWt0aW1lX3Qgc3RhcnR0aW1lID0ga3RpbWVfZ2V0KCk7CiAKKwltaWdodF9zbGVlcCgpOworCiAJbXV0ZXhfbG9jaygmZHBtX2xpc3RfbXR4KTsKIAlwbV90cmFuc2l0aW9uID0gc3RhdGU7CiAJYXN5bmNfZXJyb3IgPSAwOwpAQCAtNjI4LDEyICs2MzAsMTEgQEAKIHsKIAlkZXZpY2VfbG9jayhkZXYpOwogCi0JaWYgKGRldi0+cHdyX2RvbWFpbiAmJiBkZXYtPnB3cl9kb21haW4tPm9wcy5jb21wbGV0ZSkgeworCWlmIChkZXYtPnB3cl9kb21haW4pIHsKIAkJcG1fZGV2X2RiZyhkZXYsIHN0YXRlLCAiY29tcGxldGluZyBwb3dlciBkb21haW4gIik7Ci0JCWRldi0+cHdyX2RvbWFpbi0+b3BzLmNvbXBsZXRlKGRldik7Ci0JfQotCi0JaWYgKGRldi0+dHlwZSAmJiBkZXYtPnR5cGUtPnBtKSB7CisJCWlmIChkZXYtPnB3cl9kb21haW4tPm9wcy5jb21wbGV0ZSkKKwkJCWRldi0+cHdyX2RvbWFpbi0+b3BzLmNvbXBsZXRlKGRldik7CisJfSBlbHNlIGlmIChkZXYtPnR5cGUgJiYgZGV2LT50eXBlLT5wbSkgewogCQlwbV9kZXZfZGJnKGRldiwgc3RhdGUsICJjb21wbGV0aW5nIHR5cGUgIik7CiAJCWlmIChkZXYtPnR5cGUtPnBtLT5jb21wbGV0ZSkKIAkJCWRldi0+dHlwZS0+cG0tPmNvbXBsZXRlKGRldik7CkBAIC02NTcsMTAgKzY1OCwxMiBAQAogICogRXhlY3V0ZSB0aGUgLT5jb21wbGV0ZSgpIGNhbGxiYWNrcyBmb3IgYWxsIGRldmljZXMgd2hvc2UgUE0gc3RhdHVzIGlzIG5vdAogICogRFBNX09OICh0aGlzIGFsbG93cyBuZXcgZGV2aWNlcyB0byBiZSByZWdpc3RlcmVkKS4KICAqLwotc3RhdGljIHZvaWQgZHBtX2NvbXBsZXRlKHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3ZvaWQgZHBtX2NvbXBsZXRlKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAKKwltaWdodF9zbGVlcCgpOworCiAJSU5JVF9MSVNUX0hFQUQoJmxpc3QpOwogCW11dGV4X2xvY2soJmRwbV9saXN0X210eCk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZkcG1fcHJlcGFyZWRfbGlzdCkpIHsKQEAgLTY4OSw3ICs2OTIsNiBAQAogICovCiB2b2lkIGRwbV9yZXN1bWVfZW5kKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQltaWdodF9zbGVlcCgpOwogCWRwbV9yZXN1bWUoc3RhdGUpOwogCWRwbV9jb21wbGV0ZShzdGF0ZSk7CiB9CkBAIC03MzEsNyArNzMzLDEyIEBACiB7CiAJaW50IGVycm9yOwogCi0JaWYgKGRldi0+dHlwZSAmJiBkZXYtPnR5cGUtPnBtKSB7CisJaWYgKGRldi0+cHdyX2RvbWFpbikgeworCQlwbV9kZXZfZGJnKGRldiwgc3RhdGUsICJMQVRFIHBvd2VyIGRvbWFpbiAiKTsKKwkJZXJyb3IgPSBwbV9ub2lycV9vcChkZXYsICZkZXYtPnB3cl9kb21haW4tPm9wcywgc3RhdGUpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisJfSBlbHNlIGlmIChkZXYtPnR5cGUgJiYgZGV2LT50eXBlLT5wbSkgewogCQlwbV9kZXZfZGJnKGRldiwgc3RhdGUsICJMQVRFIHR5cGUgIik7CiAJCWVycm9yID0gcG1fbm9pcnFfb3AoZGV2LCBkZXYtPnR5cGUtPnBtLCBzdGF0ZSk7CiAJCWlmIChlcnJvcikKQEAgLTc0OCwxMSArNzU1LDYgQEAKIAkJCXJldHVybiBlcnJvcjsKIAl9CiAKLQlpZiAoZGV2LT5wd3JfZG9tYWluKSB7Ci0JCXBtX2Rldl9kYmcoZGV2LCBzdGF0ZSwgIkxBVEUgcG93ZXIgZG9tYWluICIpOwotCQlwbV9ub2lycV9vcChkZXYsICZkZXYtPnB3cl9kb21haW4tPm9wcywgc3RhdGUpOwotCX0KLQogCXJldHVybiAwOwogfQogCkBAIC04NDAsMjEgKzg0MiwyNyBAQAogCQlnb3RvIEVuZDsKIAl9CiAKKwlpZiAoZGV2LT5wd3JfZG9tYWluKSB7CisJCXBtX2Rldl9kYmcoZGV2LCBzdGF0ZSwgInBvd2VyIGRvbWFpbiAiKTsKKwkJZXJyb3IgPSBwbV9vcChkZXYsICZkZXYtPnB3cl9kb21haW4tPm9wcywgc3RhdGUpOworCQlnb3RvIEVuZDsKKwl9CisKIAlpZiAoZGV2LT50eXBlICYmIGRldi0+dHlwZS0+cG0pIHsKIAkJcG1fZGV2X2RiZyhkZXYsIHN0YXRlLCAidHlwZSAiKTsKIAkJZXJyb3IgPSBwbV9vcChkZXYsIGRldi0+dHlwZS0+cG0sIHN0YXRlKTsKLQkJZ290byBEb21haW47CisJCWdvdG8gRW5kOwogCX0KIAogCWlmIChkZXYtPmNsYXNzKSB7CiAJCWlmIChkZXYtPmNsYXNzLT5wbSkgewogCQkJcG1fZGV2X2RiZyhkZXYsIHN0YXRlLCAiY2xhc3MgIik7CiAJCQllcnJvciA9IHBtX29wKGRldiwgZGV2LT5jbGFzcy0+cG0sIHN0YXRlKTsKLQkJCWdvdG8gRG9tYWluOworCQkJZ290byBFbmQ7CiAJCX0gZWxzZSBpZiAoZGV2LT5jbGFzcy0+c3VzcGVuZCkgewogCQkJcG1fZGV2X2RiZyhkZXYsIHN0YXRlLCAibGVnYWN5IGNsYXNzICIpOwogCQkJZXJyb3IgPSBsZWdhY3lfc3VzcGVuZChkZXYsIHN0YXRlLCBkZXYtPmNsYXNzLT5zdXNwZW5kKTsKLQkJCWdvdG8gRG9tYWluOworCQkJZ290byBFbmQ7CiAJCX0KIAl9CiAKQEAgLTg2OCwxMiArODc2LDYgQEAKIAkJfQogCX0KIAotIERvbWFpbjoKLQlpZiAoIWVycm9yICYmIGRldi0+cHdyX2RvbWFpbikgewotCQlwbV9kZXZfZGJnKGRldiwgc3RhdGUsICJwb3dlciBkb21haW4gIik7Ci0JCXBtX29wKGRldiwgJmRldi0+cHdyX2RvbWFpbi0+b3BzLCBzdGF0ZSk7Ci0JfQotCiAgRW5kOgogCWRldmljZV91bmxvY2soZGV2KTsKIAljb21wbGV0ZV9hbGwoJmRldi0+cG93ZXIuY29tcGxldGlvbik7CkBAIC05MTMsMTEgKzkxNSwxMyBAQAogICogZHBtX3N1c3BlbmQgLSBFeGVjdXRlICJzdXNwZW5kIiBjYWxsYmFja3MgZm9yIGFsbCBub24tc3lzZGV2IGRldmljZXMuCiAgKiBAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KICAqLwotc3RhdGljIGludCBkcG1fc3VzcGVuZChwbV9tZXNzYWdlX3Qgc3RhdGUpCitpbnQgZHBtX3N1c3BlbmQocG1fbWVzc2FnZV90IHN0YXRlKQogewogCWt0aW1lX3Qgc3RhcnR0aW1lID0ga3RpbWVfZ2V0KCk7CiAJaW50IGVycm9yID0gMDsKIAorCW1pZ2h0X3NsZWVwKCk7CisKIAltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwogCXBtX3RyYW5zaXRpb24gPSBzdGF0ZTsKIAlhc3luY19lcnJvciA9IDA7CkBAIC05NjQsNyArOTY4LDE0IEBACiAKIAlkZXZpY2VfbG9jayhkZXYpOwogCi0JaWYgKGRldi0+dHlwZSAmJiBkZXYtPnR5cGUtPnBtKSB7CisJaWYgKGRldi0+cHdyX2RvbWFpbikgeworCQlwbV9kZXZfZGJnKGRldiwgc3RhdGUsICJwcmVwYXJpbmcgcG93ZXIgZG9tYWluICIpOworCQlpZiAoZGV2LT5wd3JfZG9tYWluLT5vcHMucHJlcGFyZSkKKwkJCWVycm9yID0gZGV2LT5wd3JfZG9tYWluLT5vcHMucHJlcGFyZShkZXYpOworCQlzdXNwZW5kX3JlcG9ydF9yZXN1bHQoZGV2LT5wd3JfZG9tYWluLT5vcHMucHJlcGFyZSwgZXJyb3IpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIEVuZDsKKwl9IGVsc2UgaWYgKGRldi0+dHlwZSAmJiBkZXYtPnR5cGUtPnBtKSB7CiAJCXBtX2Rldl9kYmcoZGV2LCBzdGF0ZSwgInByZXBhcmluZyB0eXBlICIpOwogCQlpZiAoZGV2LT50eXBlLT5wbS0+cHJlcGFyZSkKIAkJCWVycm9yID0gZGV2LT50eXBlLT5wbS0+cHJlcGFyZShkZXYpOwpAQCAtOTgzLDEzICs5OTQsNiBAQAogCQlpZiAoZGV2LT5idXMtPnBtLT5wcmVwYXJlKQogCQkJZXJyb3IgPSBkZXYtPmJ1cy0+cG0tPnByZXBhcmUoZGV2KTsKIAkJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGRldi0+YnVzLT5wbS0+cHJlcGFyZSwgZXJyb3IpOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIEVuZDsKLQl9Ci0KLQlpZiAoZGV2LT5wd3JfZG9tYWluICYmIGRldi0+cHdyX2RvbWFpbi0+b3BzLnByZXBhcmUpIHsKLQkJcG1fZGV2X2RiZyhkZXYsIHN0YXRlLCAicHJlcGFyaW5nIHBvd2VyIGRvbWFpbiAiKTsKLQkJZGV2LT5wd3JfZG9tYWluLT5vcHMucHJlcGFyZShkZXYpOwogCX0KIAogIEVuZDoKQEAgLTEwMDQsMTAgKzEwMDgsMTIgQEAKICAqCiAgKiBFeGVjdXRlIHRoZSAtPnByZXBhcmUoKSBjYWxsYmFjayhzKSBmb3IgYWxsIGRldmljZXMuCiAgKi8KLXN0YXRpYyBpbnQgZHBtX3ByZXBhcmUocG1fbWVzc2FnZV90IHN0YXRlKQoraW50IGRwbV9wcmVwYXJlKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlpbnQgZXJyb3IgPSAwOwogCisJbWlnaHRfc2xlZXAoKTsKKwogCW11dGV4X2xvY2soJmRwbV9saXN0X210eCk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZkcG1fbGlzdCkpIHsKIAkJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKGRwbV9saXN0Lm5leHQpOwpAQCAtMTA1Niw3ICsxMDYyLDYgQEAKIHsKIAlpbnQgZXJyb3I7CiAKLQltaWdodF9zbGVlcCgpOwogCWVycm9yID0gZHBtX3ByZXBhcmUoc3RhdGUpOwogCWlmICghZXJyb3IpCiAJCWVycm9yID0gZHBtX3N1c3BlbmQoc3RhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKaW5kZXggMzE3MmM2MC4uMGQ0NTg3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCkBAIC0xNjgsNyArMTY4LDYgQEAKIHN0YXRpYyBpbnQgcnBtX2lkbGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcnBtZmxhZ3MpCiB7CiAJaW50ICgqY2FsbGJhY2spKHN0cnVjdCBkZXZpY2UgKik7Ci0JaW50ICgqZG9tYWluX2NhbGxiYWNrKShzdHJ1Y3QgZGV2aWNlICopOwogCWludCByZXR2YWw7CiAKIAlyZXR2YWwgPSBycG1fY2hlY2tfc3VzcGVuZF9hbGxvd2VkKGRldik7CkBAIC0yMTQsNyArMjEzLDkgQEAKIAogCWRldi0+cG93ZXIuaWRsZV9ub3RpZmljYXRpb24gPSB0cnVlOwogCi0JaWYgKGRldi0+dHlwZSAmJiBkZXYtPnR5cGUtPnBtKQorCWlmIChkZXYtPnB3cl9kb21haW4pCisJCWNhbGxiYWNrID0gZGV2LT5wd3JfZG9tYWluLT5vcHMucnVudGltZV9pZGxlOworCWVsc2UgaWYgKGRldi0+dHlwZSAmJiBkZXYtPnR5cGUtPnBtKQogCQljYWxsYmFjayA9IGRldi0+dHlwZS0+cG0tPnJ1bnRpbWVfaWRsZTsKIAllbHNlIGlmIChkZXYtPmNsYXNzICYmIGRldi0+Y2xhc3MtPnBtKQogCQljYWxsYmFjayA9IGRldi0+Y2xhc3MtPnBtLT5ydW50aW1lX2lkbGU7CkBAIC0yMjMsMTkgKzIyNCwxMCBAQAogCWVsc2UKIAkJY2FsbGJhY2sgPSBOVUxMOwogCi0JaWYgKGRldi0+cHdyX2RvbWFpbikKLQkJZG9tYWluX2NhbGxiYWNrID0gZGV2LT5wd3JfZG9tYWluLT5vcHMucnVudGltZV9pZGxlOwotCWVsc2UKLQkJZG9tYWluX2NhbGxiYWNrID0gTlVMTDsKLQotCWlmIChjYWxsYmFjayB8fCBkb21haW5fY2FsbGJhY2spIHsKKwlpZiAoY2FsbGJhY2spIHsKIAkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOwogCi0JCWlmIChkb21haW5fY2FsbGJhY2spCi0JCQlyZXR2YWwgPSBkb21haW5fY2FsbGJhY2soZGV2KTsKLQotCQlpZiAoIXJldHZhbCAmJiBjYWxsYmFjaykKLQkJCWNhbGxiYWNrKGRldik7CisJCWNhbGxiYWNrKGRldik7CiAKIAkJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKIAl9CkBAIC0zODIsNyArMzc0LDkgQEAKIAogCV9fdXBkYXRlX3J1bnRpbWVfc3RhdHVzKGRldiwgUlBNX1NVU1BFTkRJTkcpOwogCi0JaWYgKGRldi0+dHlwZSAmJiBkZXYtPnR5cGUtPnBtKQorCWlmIChkZXYtPnB3cl9kb21haW4pCisJCWNhbGxiYWNrID0gZGV2LT5wd3JfZG9tYWluLT5vcHMucnVudGltZV9zdXNwZW5kOworCWVsc2UgaWYgKGRldi0+dHlwZSAmJiBkZXYtPnR5cGUtPnBtKQogCQljYWxsYmFjayA9IGRldi0+dHlwZS0+cG0tPnJ1bnRpbWVfc3VzcGVuZDsKIAllbHNlIGlmIChkZXYtPmNsYXNzICYmIGRldi0+Y2xhc3MtPnBtKQogCQljYWxsYmFjayA9IGRldi0+Y2xhc3MtPnBtLT5ydW50aW1lX3N1c3BlbmQ7CkBAIC00MDAsOCArMzk0LDYgQEAKIAkJZWxzZQogCQkJcG1fcnVudGltZV9jYW5jZWxfcGVuZGluZyhkZXYpOwogCX0gZWxzZSB7Ci0JCWlmIChkZXYtPnB3cl9kb21haW4pCi0JCQlycG1fY2FsbGJhY2soZGV2LT5wd3JfZG9tYWluLT5vcHMucnVudGltZV9zdXNwZW5kLCBkZXYpOwogIG5vX2NhbGxiYWNrOgogCQlfX3VwZGF0ZV9ydW50aW1lX3N0YXR1cyhkZXYsIFJQTV9TVVNQRU5ERUQpOwogCQlwbV9ydW50aW1lX2RlYWN0aXZhdGVfdGltZXIoZGV2KTsKQEAgLTU4Miw5ICs1NzQsOCBAQAogCV9fdXBkYXRlX3J1bnRpbWVfc3RhdHVzKGRldiwgUlBNX1JFU1VNSU5HKTsKIAogCWlmIChkZXYtPnB3cl9kb21haW4pCi0JCXJwbV9jYWxsYmFjayhkZXYtPnB3cl9kb21haW4tPm9wcy5ydW50aW1lX3Jlc3VtZSwgZGV2KTsKLQotCWlmIChkZXYtPnR5cGUgJiYgZGV2LT50eXBlLT5wbSkKKwkJY2FsbGJhY2sgPSBkZXYtPnB3cl9kb21haW4tPm9wcy5ydW50aW1lX3Jlc3VtZTsKKwllbHNlIGlmIChkZXYtPnR5cGUgJiYgZGV2LT50eXBlLT5wbSkKIAkJY2FsbGJhY2sgPSBkZXYtPnR5cGUtPnBtLT5ydW50aW1lX3Jlc3VtZTsKIAllbHNlIGlmIChkZXYtPmNsYXNzICYmIGRldi0+Y2xhc3MtPnBtKQogCQljYWxsYmFjayA9IGRldi0+Y2xhc3MtPnBtLT5ydW50aW1lX3Jlc3VtZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9zeXNmcy5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3N5c2ZzLmMKaW5kZXggZmZmNDliZS4uYTlmNWI4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL3N5c2ZzLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3N5c2ZzLmMKQEAgLTIxMiw4ICsyMTIsOSBAQAogc3RhdGljIERFVklDRV9BVFRSKGF1dG9zdXNwZW5kX2RlbGF5X21zLCAwNjQ0LCBhdXRvc3VzcGVuZF9kZWxheV9tc19zaG93LAogCQlhdXRvc3VzcGVuZF9kZWxheV9tc19zdG9yZSk7CiAKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19QTV9SVU5USU1FICovCiAKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIHN0YXRpYyBzc2l6ZV90CiB3YWtlX3Nob3coc3RydWN0IGRldmljZSAqIGRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKiBidWYpCiB7CkBAIC0yNDgsNyArMjQ5LDYgQEAKIAogc3RhdGljIERFVklDRV9BVFRSKHdha2V1cCwgMDY0NCwgd2FrZV9zaG93LCB3YWtlX3N0b3JlKTsKIAotI2lmZGVmIENPTkZJR19QTV9TTEVFUAogc3RhdGljIHNzaXplX3Qgd2FrZXVwX2NvdW50X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmMKaW5kZXggNDU3M2M4My4uODRmN2M3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL3dha2V1cC5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci93YWtldXAuYwpAQCAtMTEwLDcgKzExMCw2IEBACiAJc3Bpbl9sb2NrX2lycSgmZXZlbnRzX2xvY2spOwogCWxpc3RfYWRkX3JjdSgmd3MtPmVudHJ5LCAmd2FrZXVwX3NvdXJjZXMpOwogCXNwaW5fdW5sb2NrX2lycSgmZXZlbnRzX2xvY2spOwotCXN5bmNocm9uaXplX3JjdSgpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwod2FrZXVwX3NvdXJjZV9hZGQpOwogCkBAIC0yNTgsNyArMjU3LDcgQEAKIAlpZiAoISFkZXYtPnBvd2VyLmNhbl93YWtldXAgPT0gISFjYXBhYmxlKQogCQlyZXR1cm47CiAKLQlpZiAoZGV2aWNlX2lzX3JlZ2lzdGVyZWQoZGV2KSkgeworCWlmIChkZXZpY2VfaXNfcmVnaXN0ZXJlZChkZXYpICYmICFsaXN0X2VtcHR5KCZkZXYtPnBvd2VyLmVudHJ5KSkgewogCQlpZiAoY2FwYWJsZSkgewogCQkJaWYgKHdha2V1cF9zeXNmc19hZGQoZGV2KSkKIAkJCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2Uvc3lzLmMgYi9kcml2ZXJzL2Jhc2Uvc3lzLmMKaW5kZXggYWNkZTliNS4uOWRmZjc3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3N5cy5jCisrKyBiL2RyaXZlcnMvYmFzZS9zeXMuYwpAQCAtMzI4LDIwMyArMzI4LDggQEAKIAlrb2JqZWN0X3B1dCgmc3lzZGV2LT5rb2JqKTsKIH0KIAotCi0jaWZuZGVmIENPTkZJR19BUkNIX05PX1NZU0RFVl9PUFMKLS8qKgotICoJc3lzZGV2X3NodXRkb3duIC0gU2h1dCBkb3duIGFsbCBzeXN0ZW0gZGV2aWNlcy4KLSAqCi0gKglMb29wIG92ZXIgZWFjaCBjbGFzcyBvZiBzeXN0ZW0gZGV2aWNlcywgYW5kIHRoZSBkZXZpY2VzIGluIGVhY2gKLSAqCW9mIHRob3NlIGNsYXNzZXMuIEZvciBlYWNoIGRldmljZSwgd2UgY2FsbCB0aGUgc2h1dGRvd24gbWV0aG9kIGZvcgotICoJZWFjaCBkcml2ZXIgcmVnaXN0ZXJlZCBmb3IgdGhlIGRldmljZSAtIHRoZSBhdXhpbGlhcmllcywKLSAqCWFuZCB0aGUgY2xhc3MgZHJpdmVyLgotICoKLSAqCU5vdGU6IFRoZSBsaXN0IGlzIGl0ZXJhdGVkIGluIHJldmVyc2Ugb3JkZXIsIHNvIHRoYXQgd2Ugc2h1dCBkb3duCi0gKgljaGlsZCBkZXZpY2VzIGJlZm9yZSB3ZSBzaHV0IGRvd24gdGhlaXIgcGFyZW50cy4gVGhlIGxpc3Qgb3JkZXJpbmcKLSAqCWlzIGd1YXJhbnRlZWQgYnkgdmlydHVlIG9mIHRoZSBmYWN0IHRoYXQgY2hpbGQgZGV2aWNlcyBhcmUgcmVnaXN0ZXJlZAotICoJYWZ0ZXIgdGhlaXIgcGFyZW50cy4KLSAqLwotdm9pZCBzeXNkZXZfc2h1dGRvd24odm9pZCkKLXsKLQlzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbHM7Ci0KLQlwcl9kZWJ1ZygiU2h1dHRpbmcgRG93biBTeXN0ZW0gRGV2aWNlc1xuIik7Ci0KLQltdXRleF9sb2NrKCZzeXNkZXZfZHJpdmVyc19sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoY2xzLCAmc3lzdGVtX2tzZXQtPmxpc3QsIGtzZXQua29iai5lbnRyeSkgewotCQlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2OwotCi0JCXByX2RlYnVnKCJTaHV0dGluZyBkb3duIHR5cGUgJyVzJzpcbiIsCi0JCQkga29iamVjdF9uYW1lKCZjbHMtPmtzZXQua29iaikpOwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkoc3lzZGV2LCAmY2xzLT5rc2V0Lmxpc3QsIGtvYmouZW50cnkpIHsKLQkJCXN0cnVjdCBzeXNkZXZfZHJpdmVyICpkcnY7Ci0JCQlwcl9kZWJ1ZygiICVzXG4iLCBrb2JqZWN0X25hbWUoJnN5c2Rldi0+a29iaikpOwotCi0JCQkvKiBDYWxsIGF1eGlsaWFyeSBkcml2ZXJzIGZpcnN0ICovCi0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRydiwgJmNscy0+ZHJpdmVycywgZW50cnkpIHsKLQkJCQlpZiAoZHJ2LT5zaHV0ZG93bikKLQkJCQkJZHJ2LT5zaHV0ZG93bihzeXNkZXYpOwotCQkJfQotCi0JCQkvKiBOb3cgY2FsbCB0aGUgZ2VuZXJpYyBvbmUgKi8KLQkJCWlmIChjbHMtPnNodXRkb3duKQotCQkJCWNscy0+c2h1dGRvd24oc3lzZGV2KTsKLQkJfQotCX0KLQltdXRleF91bmxvY2soJnN5c2Rldl9kcml2ZXJzX2xvY2spOwotfQotCi1zdGF0aWMgdm9pZCBfX3N5c2Rldl9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbHMgPSBkZXYtPmNsczsKLQlzdHJ1Y3Qgc3lzZGV2X2RyaXZlciAqZHJ2OwotCi0JLyogRmlyc3QsIGNhbGwgdGhlIGNsYXNzLXNwZWNpZmljIG9uZSAqLwotCWlmIChjbHMtPnJlc3VtZSkKLQkJY2xzLT5yZXN1bWUoZGV2KTsKLQlXQVJOX09OQ0UoIWlycXNfZGlzYWJsZWQoKSwKLQkJIkludGVycnVwdHMgZW5hYmxlZCBhZnRlciAlcEZcbiIsIGNscy0+cmVzdW1lKTsKLQotCS8qIENhbGwgYXV4aWxpYXJ5IGRyaXZlcnMgbmV4dC4gKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRydiwgJmNscy0+ZHJpdmVycywgZW50cnkpIHsKLQkJaWYgKGRydi0+cmVzdW1lKQotCQkJZHJ2LT5yZXN1bWUoZGV2KTsKLQkJV0FSTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCksCi0JCQkiSW50ZXJydXB0cyBlbmFibGVkIGFmdGVyICVwRlxuIiwgZHJ2LT5yZXN1bWUpOwotCX0KLX0KLQotLyoqCi0gKglzeXNkZXZfc3VzcGVuZCAtIFN1c3BlbmQgYWxsIHN5c3RlbSBkZXZpY2VzLgotICoJQHN0YXRlOgkJUG93ZXIgc3RhdGUgdG8gZW50ZXIuCi0gKgotICoJV2UgcGVyZm9ybSBhbiBhbG1vc3QgaWRlbnRpY2FsIG9wZXJhdGlvbiBhcyBzeXNkZXZfc2h1dGRvd24oKQotICoJYWJvdmUsIHRob3VnaCBjYWxsaW5nIC0+c3VzcGVuZCgpIGluc3RlYWQuIEludGVycnVwdHMgYXJlIGRpc2FibGVkCi0gKgl3aGVuIHRoaXMgY2FsbGVkLiBEZXZpY2VzIGFyZSByZXNwb25zaWJsZSBmb3IgYm90aCBzYXZpbmcgc3RhdGUgYW5kCi0gKglxdWllc2Npbmcgb3IgcG93ZXJpbmcgZG93biB0aGUgZGV2aWNlLgotICoKLSAqCVRoaXMgaXMgb25seSBjYWxsZWQgYnkgdGhlIGRldmljZSBQTSBjb3JlLCBzbyB3ZSBsZXQgdGhlbSBoYW5kbGUKLSAqCWFsbCBzeW5jaHJvbml6YXRpb24uCi0gKi8KLWludCBzeXNkZXZfc3VzcGVuZChwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0Jc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xzOwotCXN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYsICplcnJfZGV2OwotCXN0cnVjdCBzeXNkZXZfZHJpdmVyICpkcnYsICplcnJfZHJ2OwotCWludCByZXQ7Ci0KLQlwcl9kZWJ1ZygiQ2hlY2tpbmcgd2FrZS11cCBpbnRlcnJ1cHRzXG4iKTsKLQotCS8qIFJldHVybiBlcnJvciBjb2RlIGlmIHRoZXJlIGFyZSBhbnkgd2FrZS11cCBpbnRlcnJ1cHRzIHBlbmRpbmcgKi8KLQlyZXQgPSBjaGVja193YWtldXBfaXJxcygpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlXQVJOX09OQ0UoIWlycXNfZGlzYWJsZWQoKSwKLQkJIkludGVycnVwdHMgZW5hYmxlZCB3aGlsZSBzdXNwZW5kaW5nIHN5c3RlbSBkZXZpY2VzXG4iKTsKLQotCXByX2RlYnVnKCJTdXNwZW5kaW5nIFN5c3RlbSBEZXZpY2VzXG4iKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShjbHMsICZzeXN0ZW1fa3NldC0+bGlzdCwga3NldC5rb2JqLmVudHJ5KSB7Ci0JCXByX2RlYnVnKCJTdXNwZW5kaW5nIHR5cGUgJyVzJzpcbiIsCi0JCQkga29iamVjdF9uYW1lKCZjbHMtPmtzZXQua29iaikpOwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkoc3lzZGV2LCAmY2xzLT5rc2V0Lmxpc3QsIGtvYmouZW50cnkpIHsKLQkJCXByX2RlYnVnKCIgJXNcbiIsIGtvYmplY3RfbmFtZSgmc3lzZGV2LT5rb2JqKSk7Ci0KLQkJCS8qIENhbGwgYXV4aWxpYXJ5IGRyaXZlcnMgZmlyc3QgKi8KLQkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJ2LCAmY2xzLT5kcml2ZXJzLCBlbnRyeSkgewotCQkJCWlmIChkcnYtPnN1c3BlbmQpIHsKLQkJCQkJcmV0ID0gZHJ2LT5zdXNwZW5kKHN5c2Rldiwgc3RhdGUpOwotCQkJCQlpZiAocmV0KQotCQkJCQkJZ290byBhdXhfZHJpdmVyOwotCQkJCX0KLQkJCQlXQVJOX09OQ0UoIWlycXNfZGlzYWJsZWQoKSwKLQkJCQkJIkludGVycnVwdHMgZW5hYmxlZCBhZnRlciAlcEZcbiIsCi0JCQkJCWRydi0+c3VzcGVuZCk7Ci0JCQl9Ci0KLQkJCS8qIE5vdyBjYWxsIHRoZSBnZW5lcmljIG9uZSAqLwotCQkJaWYgKGNscy0+c3VzcGVuZCkgewotCQkJCXJldCA9IGNscy0+c3VzcGVuZChzeXNkZXYsIHN0YXRlKTsKLQkJCQlpZiAocmV0KQotCQkJCQlnb3RvIGNsc19kcml2ZXI7Ci0JCQkJV0FSTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCksCi0JCQkJCSJJbnRlcnJ1cHRzIGVuYWJsZWQgYWZ0ZXIgJXBGXG4iLAotCQkJCQljbHMtPnN1c3BlbmQpOwotCQkJfQotCQl9Ci0JfQotCXJldHVybiAwOwotCS8qIHJlc3VtZSBjdXJyZW50IHN5c2RldiAqLwotY2xzX2RyaXZlcjoKLQlkcnYgPSBOVUxMOwotCXByaW50ayhLRVJOX0VSUiAiQ2xhc3Mgc3VzcGVuZCBmYWlsZWQgZm9yICVzOiAlZFxuIiwKLQkJa29iamVjdF9uYW1lKCZzeXNkZXYtPmtvYmopLCByZXQpOwotCi1hdXhfZHJpdmVyOgotCWlmIChkcnYpCi0JCXByaW50ayhLRVJOX0VSUiAiQ2xhc3MgZHJpdmVyIHN1c3BlbmQgZmFpbGVkIGZvciAlczogJWRcbiIsCi0JCQkJa29iamVjdF9uYW1lKCZzeXNkZXYtPmtvYmopLCByZXQpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZXJyX2RydiwgJmNscy0+ZHJpdmVycywgZW50cnkpIHsKLQkJaWYgKGVycl9kcnYgPT0gZHJ2KQotCQkJYnJlYWs7Ci0JCWlmIChlcnJfZHJ2LT5yZXN1bWUpCi0JCQllcnJfZHJ2LT5yZXN1bWUoc3lzZGV2KTsKLQl9Ci0KLQkvKiByZXN1bWUgb3RoZXIgc3lzZGV2cyBpbiBjdXJyZW50IGNsYXNzICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShlcnJfZGV2LCAmY2xzLT5rc2V0Lmxpc3QsIGtvYmouZW50cnkpIHsKLQkJaWYgKGVycl9kZXYgPT0gc3lzZGV2KQotCQkJYnJlYWs7Ci0JCXByX2RlYnVnKCIgJXNcbiIsIGtvYmplY3RfbmFtZSgmZXJyX2Rldi0+a29iaikpOwotCQlfX3N5c2Rldl9yZXN1bWUoZXJyX2Rldik7Ci0JfQotCi0JLyogcmVzdW1lIG90aGVyIGNsYXNzZXMgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKGNscywgJnN5c3RlbV9rc2V0LT5saXN0LCBrc2V0LmtvYmouZW50cnkpIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShlcnJfZGV2LCAmY2xzLT5rc2V0Lmxpc3QsIGtvYmouZW50cnkpIHsKLQkJCXByX2RlYnVnKCIgJXNcbiIsIGtvYmplY3RfbmFtZSgmZXJyX2Rldi0+a29iaikpOwotCQkJX19zeXNkZXZfcmVzdW1lKGVycl9kZXYpOwotCQl9Ci0JfQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChzeXNkZXZfc3VzcGVuZCk7Ci0KLS8qKgotICoJc3lzZGV2X3Jlc3VtZSAtIEJyaW5nIHN5c3RlbSBkZXZpY2VzIGJhY2sgdG8gbGlmZS4KLSAqCi0gKglTaW1pbGFyIHRvIHN5c2Rldl9zdXNwZW5kKCksIGJ1dCB3ZSBpdGVyYXRlIHRoZSBsaXN0IGZvcndhcmRzCi0gKgl0byBndWFyYW50ZWUgdGhhdCBwYXJlbnQgZGV2aWNlcyBhcmUgcmVzdW1lZCBiZWZvcmUgdGhlaXIgY2hpbGRyZW4uCi0gKgotICoJTm90ZTogSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgd2hlbiBjYWxsZWQuCi0gKi8KLWludCBzeXNkZXZfcmVzdW1lKHZvaWQpCi17Ci0Jc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xzOwotCi0JV0FSTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCksCi0JCSJJbnRlcnJ1cHRzIGVuYWJsZWQgd2hpbGUgcmVzdW1pbmcgc3lzdGVtIGRldmljZXNcbiIpOwotCi0JcHJfZGVidWcoIlJlc3VtaW5nIFN5c3RlbSBEZXZpY2VzXG4iKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xzLCAmc3lzdGVtX2tzZXQtPmxpc3QsIGtzZXQua29iai5lbnRyeSkgewotCQlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2OwotCi0JCXByX2RlYnVnKCJSZXN1bWluZyB0eXBlICclcyc6XG4iLAotCQkJIGtvYmplY3RfbmFtZSgmY2xzLT5rc2V0LmtvYmopKTsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN5c2RldiwgJmNscy0+a3NldC5saXN0LCBrb2JqLmVudHJ5KSB7Ci0JCQlwcl9kZWJ1ZygiICVzXG4iLCBrb2JqZWN0X25hbWUoJnN5c2Rldi0+a29iaikpOwotCi0JCQlfX3N5c2Rldl9yZXN1bWUoc3lzZGV2KTsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHN5c2Rldl9yZXN1bWUpOwotI2VuZGlmIC8qIENPTkZJR19BUkNIX05PX1NZU0RFVl9PUFMgKi8KK0VYUE9SVF9TWU1CT0xfR1BMKHN5c2Rldl9yZWdpc3Rlcik7CitFWFBPUlRfU1lNQk9MX0dQTChzeXNkZXZfdW5yZWdpc3Rlcik7CiAKIGludCBfX2luaXQgc3lzdGVtX2J1c19pbml0KHZvaWQpCiB7CkBAIC01MzQsOSArMzM5LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotRVhQT1JUX1NZTUJPTF9HUEwoc3lzZGV2X3JlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0xfR1BMKHN5c2Rldl91bnJlZ2lzdGVyKTsKLQogI2RlZmluZSB0b19leHRfYXR0cih4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IHN5c2Rldl9leHRfYXR0cmlidXRlLCBhdHRyKQogCiBzc2l6ZV90IHN5c2Rldl9zdG9yZV91bG9uZyhzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3N5c2NvcmUuYyBiL2RyaXZlcnMvYmFzZS9zeXNjb3JlLmMKaW5kZXggOTBhZjI5NC4uYzEyNmRiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3N5c2NvcmUuYworKysgYi9kcml2ZXJzL2Jhc2Uvc3lzY29yZS5jCkBAIC03Myw2ICs3Myw3IEBACiAKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc3lzY29yZV9zdXNwZW5kKTsKIAogLyoqCiAgKiBzeXNjb3JlX3Jlc3VtZSAtIEV4ZWN1dGUgYWxsIHRoZSByZWdpc3RlcmVkIHN5c3RlbSBjb3JlIHJlc3VtZSBjYWxsYmFja3MuCkBAIC05NSw2ICs5Niw3IEBACiAJCQkJIkludGVycnVwdHMgZW5hYmxlZCBhZnRlciAlcEZcbiIsIG9wcy0+cmVzdW1lKTsKIAkJfQogfQorRVhQT1JUX1NZTUJPTF9HUEwoc3lzY29yZV9yZXN1bWUpOwogI2VuZGlmIC8qIENPTkZJR19QTV9TTEVFUCAqLwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmNtYS9LY29uZmlnIGIvZHJpdmVycy9iY21hL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUzNzgxYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYmNtYS9LY29uZmlnCkBAIC0wLDAgKzEsMzMgQEAKK2NvbmZpZyBCQ01BX1BPU1NJQkxFCisJYm9vbAorCWRlcGVuZHMgb24gSEFTX0lPTUVNICYmIEhBU19ETUEKKwlkZWZhdWx0IHkKKworbWVudSAiQnJvYWRjb20gc3BlY2lmaWMgQU1CQSIKKwlkZXBlbmRzIG9uIEJDTUFfUE9TU0lCTEUKKworY29uZmlnIEJDTUEKKwl0cmlzdGF0ZSAiQkNNQSBzdXBwb3J0IgorCWRlcGVuZHMgb24gQkNNQV9QT1NTSUJMRQorCWhlbHAKKwkgIEJ1cyBkcml2ZXIgZm9yIEJyb2FkY29tIHNwZWNpZmljIEFkdmFuY2VkIE1pY3JvY29udHJvbGxlciBCdXMKKwkgIEFyY2hpdGVjdHVyZS4KKworY29uZmlnIEJDTUFfSE9TVF9QQ0lfUE9TU0lCTEUKKwlib29sCisJZGVwZW5kcyBvbiBCQ01BICYmIFBDSSA9IHkKKwlkZWZhdWx0IHkKKworY29uZmlnIEJDTUFfSE9TVF9QQ0kKKwlib29sICJTdXBwb3J0IGZvciBCQ01BIG9uIFBDSS1ob3N0IGJ1cyIKKwlkZXBlbmRzIG9uIEJDTUFfSE9TVF9QQ0lfUE9TU0lCTEUKKworY29uZmlnIEJDTUFfREVCVUcKKwlib29sICJCQ01BIGRlYnVnZ2luZyIKKwlkZXBlbmRzIG9uIEJDTUEKKwloZWxwCisJICBUaGlzIHR1cm5zIG9uIGFkZGl0aW9uYWwgZGVidWdnaW5nIG1lc3NhZ2VzLgorCisJICBJZiB1bnN1cmUsIHNheSBOCisKK2VuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmNtYS9NYWtlZmlsZSBiL2RyaXZlcnMvYmNtYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDU2MjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9iY21hL01ha2VmaWxlCkBAIC0wLDAgKzEsNyBAQAorYmNtYS15CQkJCQkrPSBtYWluLm8gc2Nhbi5vIGNvcmUubworYmNtYS15CQkJCQkrPSBkcml2ZXJfY2hpcGNvbW1vbi5vIGRyaXZlcl9jaGlwY29tbW9uX3BtdS5vCitiY21hLXkJCQkJCSs9IGRyaXZlcl9wY2kubworYmNtYS0kKENPTkZJR19CQ01BX0hPU1RfUENJKQkJKz0gaG9zdF9wY2kubworb2JqLSQoQ09ORklHX0JDTUEpCQkJKz0gYmNtYS5vCisKK2NjZmxhZ3MtJChDT05GSUdfQkNNQV9ERUJVRykJCTo9IC1EREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmNtYS9SRUFETUUgYi9kcml2ZXJzL2JjbWEvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZTdjZTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2JjbWEvUkVBRE1FCkBAIC0wLDAgKzEsMTkgQEAKK0Jyb2FkY29tIGludHJvZHVjZWQgbmV3IGJ1cyBhcyByZXBsYWNlbWVudCBmb3Igb2xkZXIgU1NCLiBJdCBpcyBiYXNlZCBvbiBBTUJBLAoraG93ZXZlciBmcm9tIHByb2dyYW1taW5nIHBvaW50IG9mIHZpZXcgdGhlcmUgaXMgbm90aGluZyBBTUJBIHNwZWNpZmljIHdlIHVzZS4KKworU3RhbmRhcmQgQU1CQSBkcml2ZXJzIGFyZSBwbGF0Zm9ybSBzcGVjaWZpYywgaGF2ZSBoYXJkY29kZWQgYWRkcmVzc2VzIGFuZCB1c2UKK0FNQkEgc3RhbmRhcmQgZmllbGRzIGxpa2UgQ0lEIGFuZCBQSUQuCisKK0luIGNhc2Ugb2YgQnJvYWRjb20ncyBjYXJkcyBldmVyeSBkZXZpY2UgY29uc2lzdHMgb2Y6CisxKSBCcm9hZGNvbSBzcGVjaWZpYyBBTUJBIGRldmljZS4gSXQgaXMgcHV0IG9uIEFNQkEgYnVzLCBidXQgY2FuIG5vdCBiZSB0cmVhdGVkCisgICBhcyBzdGFuZGFyZCBBTUJBIGRldmljZS4gUmVhZGluZyBpdCdzIENJRCBvciBQSUQgY2FuIGNhdXNlIG1hY2hpbmUgbG9ja3VwLgorMikgQU1CQSBzdGFuZGFyZCBkZXZpY2VzIGNhbGxlZCBwb3J0cyBvciB3cmFwcGVycy4gVGhleSBoYXZlIENJRHMgKEFNQkFfQ0lEKQorICAgYW5kIFBJRHMgKDB4MTAzQkIzNjkpLCBidXQgd2UgZG8gbm90IHVzZSB0aGF0IGluZm8gZm9yIGFueXRoaW5nLiBPbmUgb2YgdGhhdAorICAgZGV2aWNlcyBpcyB1c2VkIGZvciBtYW5hZ2luZyBCcm9hZGNvbSBzcGVjaWZpYyBjb3JlLgorCitBZGRyZXNzZXMgb2YgQU1CQSBkZXZpY2VzIGFyZSBub3QgaGFyZGNvZGVkIGluIGRyaXZlciBhbmQgaGF2ZSB0byBiZSByZWFkIGZyb20KK0VQUk9NLgorCitJbiB0aGlzIHNpdHVhdGlvbiB3ZSBkZWNpZGVkIHRvIGludHJvZHVjZSBzZXBhcmF0ZWQgYnVzLiBJdCBjYW4gY29udGFpbiB1cCB0bworMTYgZGV2aWNlcyBpZGVudGlmaWVkIGJ5IEJyb2FkY29tIHNwZWNpZmljIGZpZWxkczogbWFudWZhY3R1cmVyLCBpZCwgcmV2aXNpb24KK2FuZCBjbGFzcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmNtYS9UT0RPIGIvZHJpdmVycy9iY21hL1RPRE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE3YWE5OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYmNtYS9UT0RPCkBAIC0wLDAgKzEsMyBAQAorLSBJbnRlcnJ1cHRzCistIERlZmluZXMgZm9yIFBDSSBjb3JlIGRyaXZlcgorLSBDcmVhdGUga2VybmVsIERvY3VtZW50YXRpb24gKHVzZSBpbmZvIGZyb20gUkVBRE1FKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iY21hL2JjbWFfcHJpdmF0ZS5oIGIvZHJpdmVycy9iY21hL2JjbWFfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNzJlOWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2JjbWEvYmNtYV9wcml2YXRlLmgKQEAgLTAsMCArMSwyOCBAQAorI2lmbmRlZiBMSU5VWF9CQ01BX1BSSVZBVEVfSF8KKyNkZWZpbmUgTElOVVhfQkNNQV9QUklWQVRFX0hfCisKKyNpZm5kZWYgcHJfZm10CisjZGVmaW5lIHByX2ZtdChmbXQpCQlLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9iY21hL2JjbWEuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjZGVmaW5lIEJDTUFfQ09SRV9TSVpFCQkweDEwMDAKKworc3RydWN0IGJjbWFfYnVzOworCisvKiBtYWluLmMgKi8KK2V4dGVybiBpbnQgYmNtYV9idXNfcmVnaXN0ZXIoc3RydWN0IGJjbWFfYnVzICpidXMpOworZXh0ZXJuIHZvaWQgYmNtYV9idXNfdW5yZWdpc3RlcihzdHJ1Y3QgYmNtYV9idXMgKmJ1cyk7CisKKy8qIHNjYW4uYyAqLworaW50IGJjbWFfYnVzX3NjYW4oc3RydWN0IGJjbWFfYnVzICpidXMpOworCisjaWZkZWYgQ09ORklHX0JDTUFfSE9TVF9QQ0kKKy8qIGhvc3RfcGNpLmMgKi8KK2V4dGVybiBpbnQgX19pbml0IGJjbWFfaG9zdF9wY2lfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIF9fZXhpdCBiY21hX2hvc3RfcGNpX2V4aXQodm9pZCk7CisjZW5kaWYgLyogQ09ORklHX0JDTUFfSE9TVF9QQ0kgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JjbWEvY29yZS5jIGIvZHJpdmVycy9iY21hL2NvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWQzNzlmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9iY21hL2NvcmUuYwpAQCAtMCwwICsxLDUxIEBACisvKgorICogQnJvYWRjb20gc3BlY2lmaWMgQU1CQQorICogQ29yZSBvcHMKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR05VL0dQTC4gU2VlIENPUFlJTkcgZm9yIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgImJjbWFfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPGxpbnV4L2JjbWEvYmNtYS5oPgorCitib29sIGJjbWFfY29yZV9pc19lbmFibGVkKHN0cnVjdCBiY21hX2RldmljZSAqY29yZSkKK3sKKwlpZiAoKGJjbWFfYXJlYWQzMihjb3JlLCBCQ01BX0lPQ1RMKSAmIChCQ01BX0lPQ1RMX0NMSyB8IEJDTUFfSU9DVExfRkdDKSkKKwkgICAgIT0gQkNNQV9JT0NUTF9DTEspCisJCXJldHVybiBmYWxzZTsKKwlpZiAoYmNtYV9hcmVhZDMyKGNvcmUsIEJDTUFfUkVTRVRfQ1RMKSAmIEJDTUFfUkVTRVRfQ1RMX1JFU0VUKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRydWU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChiY21hX2NvcmVfaXNfZW5hYmxlZCk7CisKK3N0YXRpYyB2b2lkIGJjbWFfY29yZV9kaXNhYmxlKHN0cnVjdCBiY21hX2RldmljZSAqY29yZSwgdTMyIGZsYWdzKQoreworCWlmIChiY21hX2FyZWFkMzIoY29yZSwgQkNNQV9SRVNFVF9DVEwpICYgQkNNQV9SRVNFVF9DVExfUkVTRVQpCisJCXJldHVybjsKKworCWJjbWFfYXdyaXRlMzIoY29yZSwgQkNNQV9JT0NUTCwgZmxhZ3MpOworCWJjbWFfYXJlYWQzMihjb3JlLCBCQ01BX0lPQ1RMKTsKKwl1ZGVsYXkoMTApOworCisJYmNtYV9hd3JpdGUzMihjb3JlLCBCQ01BX1JFU0VUX0NUTCwgQkNNQV9SRVNFVF9DVExfUkVTRVQpOworCXVkZWxheSgxKTsKK30KKworaW50IGJjbWFfY29yZV9lbmFibGUoc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlLCB1MzIgZmxhZ3MpCit7CisJYmNtYV9jb3JlX2Rpc2FibGUoY29yZSwgZmxhZ3MpOworCisJYmNtYV9hd3JpdGUzMihjb3JlLCBCQ01BX0lPQ1RMLCAoQkNNQV9JT0NUTF9DTEsgfCBCQ01BX0lPQ1RMX0ZHQyB8IGZsYWdzKSk7CisJYmNtYV9hcmVhZDMyKGNvcmUsIEJDTUFfSU9DVEwpOworCisJYmNtYV9hd3JpdGUzMihjb3JlLCBCQ01BX1JFU0VUX0NUTCwgMCk7CisJdWRlbGF5KDEpOworCisJYmNtYV9hd3JpdGUzMihjb3JlLCBCQ01BX0lPQ1RMLCAoQkNNQV9JT0NUTF9DTEsgfCBmbGFncykpOworCWJjbWFfYXJlYWQzMihjb3JlLCBCQ01BX0lPQ1RMKTsKKwl1ZGVsYXkoMSk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJjbWFfY29yZV9lbmFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iY21hL2RyaXZlcl9jaGlwY29tbW9uLmMgYi9kcml2ZXJzL2JjbWEvZHJpdmVyX2NoaXBjb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDYxMDIyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9iY21hL2RyaXZlcl9jaGlwY29tbW9uLmMKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIEJyb2FkY29tIHNwZWNpZmljIEFNQkEKKyAqIENoaXBDb21tb24gY29yZSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwNSwgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAyMDA2LCAyMDA3LCBNaWNoYWVsIEJ1ZXNjaCA8bWJAYnUzc2NoLmRlPgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHTlUvR1BMLiBTZWUgQ09QWUlORyBmb3IgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSAiYmNtYV9wcml2YXRlLmgiCisjaW5jbHVkZSA8bGludXgvYmNtYS9iY21hLmg+CisKK3N0YXRpYyBpbmxpbmUgdTMyIGJjbWFfY2Nfd3JpdGUzMl9tYXNrZWQoc3RydWN0IGJjbWFfZHJ2X2NjICpjYywgdTE2IG9mZnNldCwKKwkJCQkJIHUzMiBtYXNrLCB1MzIgdmFsdWUpCit7CisJdmFsdWUgJj0gbWFzazsKKwl2YWx1ZSB8PSBiY21hX2NjX3JlYWQzMihjYywgb2Zmc2V0KSAmIH5tYXNrOworCWJjbWFfY2Nfd3JpdGUzMihjYywgb2Zmc2V0LCB2YWx1ZSk7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3ZvaWQgYmNtYV9jb3JlX2NoaXBjb21tb25faW5pdChzdHJ1Y3QgYmNtYV9kcnZfY2MgKmNjKQoreworCWlmIChjYy0+Y29yZS0+aWQucmV2ID49IDExKQorCQljYy0+c3RhdHVzID0gYmNtYV9jY19yZWFkMzIoY2MsIEJDTUFfQ0NfQ0hJUFNUQVQpOworCWNjLT5jYXBhYmlsaXRpZXMgPSBiY21hX2NjX3JlYWQzMihjYywgQkNNQV9DQ19DQVApOworCWlmIChjYy0+Y29yZS0+aWQucmV2ID49IDM1KQorCQljYy0+Y2FwYWJpbGl0aWVzX2V4dCA9IGJjbWFfY2NfcmVhZDMyKGNjLCBCQ01BX0NDX0NBUF9FWFQpOworCisJaWYgKGNjLT5jb3JlLT5pZC5yZXYgPj0gMjApIHsKKwkJYmNtYV9jY193cml0ZTMyKGNjLCBCQ01BX0NDX0dQSU9QVUxMVVAsIDApOworCQliY21hX2NjX3dyaXRlMzIoY2MsIEJDTUFfQ0NfR1BJT1BVTExET1dOLCAwKTsKKwl9CisKKwlpZiAoY2MtPmNhcGFiaWxpdGllcyAmIEJDTUFfQ0NfQ0FQX1BNVSkKKwkJYmNtYV9wbXVfaW5pdChjYyk7CisJaWYgKGNjLT5jYXBhYmlsaXRpZXMgJiBCQ01BX0NDX0NBUF9QQ1RMKQorCQlwcl9lcnIoIlBvd2VyIGNvbnRyb2wgbm90IGltcGxlbWVudGVkIVxuIik7Cit9CisKKy8qIFNldCBjaGlwIHdhdGNoZG9nIHJlc2V0IHRpbWVyIHRvIGZpcmUgaW4gJ3RpY2tzJyBiYWNrcGxhbmUgY3ljbGVzICovCit2b2lkIGJjbWFfY2hpcGNvX3dhdGNoZG9nX3RpbWVyX3NldChzdHJ1Y3QgYmNtYV9kcnZfY2MgKmNjLCB1MzIgdGlja3MpCit7CisJLyogaW5zdGFudCBOTUkgKi8KKwliY21hX2NjX3dyaXRlMzIoY2MsIEJDTUFfQ0NfV0FUQ0hET0csIHRpY2tzKTsKK30KKwordm9pZCBiY21hX2NoaXBjb19pcnFfbWFzayhzdHJ1Y3QgYmNtYV9kcnZfY2MgKmNjLCB1MzIgbWFzaywgdTMyIHZhbHVlKQoreworCWJjbWFfY2Nfd3JpdGUzMl9tYXNrZWQoY2MsIEJDTUFfQ0NfSVJRTUFTSywgbWFzaywgdmFsdWUpOworfQorCit1MzIgYmNtYV9jaGlwY29faXJxX3N0YXR1cyhzdHJ1Y3QgYmNtYV9kcnZfY2MgKmNjLCB1MzIgbWFzaykKK3sKKwlyZXR1cm4gYmNtYV9jY19yZWFkMzIoY2MsIEJDTUFfQ0NfSVJRU1RBVCkgJiBtYXNrOworfQorCit1MzIgYmNtYV9jaGlwY29fZ3Bpb19pbihzdHJ1Y3QgYmNtYV9kcnZfY2MgKmNjLCB1MzIgbWFzaykKK3sKKwlyZXR1cm4gYmNtYV9jY19yZWFkMzIoY2MsIEJDTUFfQ0NfR1BJT0lOKSAmIG1hc2s7Cit9CisKK3UzMiBiY21hX2NoaXBjb19ncGlvX291dChzdHJ1Y3QgYmNtYV9kcnZfY2MgKmNjLCB1MzIgbWFzaywgdTMyIHZhbHVlKQoreworCXJldHVybiBiY21hX2NjX3dyaXRlMzJfbWFza2VkKGNjLCBCQ01BX0NDX0dQSU9PVVQsIG1hc2ssIHZhbHVlKTsKK30KKwordTMyIGJjbWFfY2hpcGNvX2dwaW9fb3V0ZW4oc3RydWN0IGJjbWFfZHJ2X2NjICpjYywgdTMyIG1hc2ssIHUzMiB2YWx1ZSkKK3sKKwlyZXR1cm4gYmNtYV9jY193cml0ZTMyX21hc2tlZChjYywgQkNNQV9DQ19HUElPT1VURU4sIG1hc2ssIHZhbHVlKTsKK30KKwordTMyIGJjbWFfY2hpcGNvX2dwaW9fY29udHJvbChzdHJ1Y3QgYmNtYV9kcnZfY2MgKmNjLCB1MzIgbWFzaywgdTMyIHZhbHVlKQoreworCXJldHVybiBiY21hX2NjX3dyaXRlMzJfbWFza2VkKGNjLCBCQ01BX0NDX0dQSU9DVEwsIG1hc2ssIHZhbHVlKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJjbWFfY2hpcGNvX2dwaW9fY29udHJvbCk7CisKK3UzMiBiY21hX2NoaXBjb19ncGlvX2ludG1hc2soc3RydWN0IGJjbWFfZHJ2X2NjICpjYywgdTMyIG1hc2ssIHUzMiB2YWx1ZSkKK3sKKwlyZXR1cm4gYmNtYV9jY193cml0ZTMyX21hc2tlZChjYywgQkNNQV9DQ19HUElPSVJRLCBtYXNrLCB2YWx1ZSk7Cit9CisKK3UzMiBiY21hX2NoaXBjb19ncGlvX3BvbGFyaXR5KHN0cnVjdCBiY21hX2Rydl9jYyAqY2MsIHUzMiBtYXNrLCB1MzIgdmFsdWUpCit7CisJcmV0dXJuIGJjbWFfY2Nfd3JpdGUzMl9tYXNrZWQoY2MsIEJDTUFfQ0NfR1BJT1BPTCwgbWFzaywgdmFsdWUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iY21hL2RyaXZlcl9jaGlwY29tbW9uX3BtdS5jIGIvZHJpdmVycy9iY21hL2RyaXZlcl9jaGlwY29tbW9uX3BtdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NDE3N2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2JjbWEvZHJpdmVyX2NoaXBjb21tb25fcG11LmMKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBCcm9hZGNvbSBzcGVjaWZpYyBBTUJBCisgKiBDaGlwQ29tbW9uIFBvd2VyIE1hbmFnZW1lbnQgVW5pdCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSwgTWljaGFlbCBCdWVzY2ggPG1iQGJ1M3NjaC5kZT4KKyAqIENvcHlyaWdodCAyMDA3LCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHTlUvR1BMLiBTZWUgQ09QWUlORyBmb3IgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSAiYmNtYV9wcml2YXRlLmgiCisjaW5jbHVkZSA8bGludXgvYmNtYS9iY21hLmg+CisKK3N0YXRpYyB2b2lkIGJjbWFfY2hpcGNvX2NoaXBjdGxfbWFza3NldChzdHJ1Y3QgYmNtYV9kcnZfY2MgKmNjLAorCQkJCQl1MzIgb2Zmc2V0LCB1MzIgbWFzaywgdTMyIHNldCkKK3sKKwl1MzIgdmFsdWU7CisKKwliY21hX2NjX3JlYWQzMihjYywgQkNNQV9DQ19DSElQQ1RMX0FERFIpOworCWJjbWFfY2Nfd3JpdGUzMihjYywgQkNNQV9DQ19DSElQQ1RMX0FERFIsIG9mZnNldCk7CisJYmNtYV9jY19yZWFkMzIoY2MsIEJDTUFfQ0NfQ0hJUENUTF9BRERSKTsKKwl2YWx1ZSA9IGJjbWFfY2NfcmVhZDMyKGNjLCBCQ01BX0NDX0NISVBDVExfREFUQSk7CisJdmFsdWUgJj0gbWFzazsKKwl2YWx1ZSB8PSBzZXQ7CisJYmNtYV9jY193cml0ZTMyKGNjLCBCQ01BX0NDX0NISVBDVExfREFUQSwgdmFsdWUpOworCWJjbWFfY2NfcmVhZDMyKGNjLCBCQ01BX0NDX0NISVBDVExfREFUQSk7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFfcG11X3BsbF9pbml0KHN0cnVjdCBiY21hX2Rydl9jYyAqY2MpCit7CisJc3RydWN0IGJjbWFfYnVzICpidXMgPSBjYy0+Y29yZS0+YnVzOworCisJc3dpdGNoIChidXMtPmNoaXBpbmZvLmlkKSB7CisJY2FzZSAweDQzMTM6CisJY2FzZSAweDQzMzE6CisJY2FzZSA0MzIyNDoKKwljYXNlIDQzMjI1OgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9lcnIoIlBMTCBpbml0IHVua25vd24gZm9yIGRldmljZSAweCUwNFhcbiIsCisJCQlidXMtPmNoaXBpbmZvLmlkKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFfcG11X3Jlc291cmNlc19pbml0KHN0cnVjdCBiY21hX2Rydl9jYyAqY2MpCit7CisJc3RydWN0IGJjbWFfYnVzICpidXMgPSBjYy0+Y29yZS0+YnVzOworCXUzMiBtaW5fbXNrID0gMCwgbWF4X21zayA9IDA7CisKKwlzd2l0Y2ggKGJ1cy0+Y2hpcGluZm8uaWQpIHsKKwljYXNlIDB4NDMxMzoKKwkJbWluX21zayA9IDB4MjAwRDsKKwkJbWF4X21zayA9IDB4RkZGRjsKKwkJYnJlYWs7CisJY2FzZSA0MzIyNDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfZXJyKCJQTVUgcmVzb3VyY2UgY29uZmlnIHVua25vd24gZm9yIGRldmljZSAweCUwNFhcbiIsCisJCQlidXMtPmNoaXBpbmZvLmlkKTsKKwl9CisKKwkvKiBTZXQgdGhlIHJlc291cmNlIG1hc2tzLiAqLworCWlmIChtaW5fbXNrKQorCQliY21hX2NjX3dyaXRlMzIoY2MsIEJDTUFfQ0NfUE1VX01JTlJFU19NU0ssIG1pbl9tc2spOworCWlmIChtYXhfbXNrKQorCQliY21hX2NjX3dyaXRlMzIoY2MsIEJDTUFfQ0NfUE1VX01BWFJFU19NU0ssIG1heF9tc2spOworfQorCit2b2lkIGJjbWFfcG11X3N3cmVnX2luaXQoc3RydWN0IGJjbWFfZHJ2X2NjICpjYykKK3sKKwlzdHJ1Y3QgYmNtYV9idXMgKmJ1cyA9IGNjLT5jb3JlLT5idXM7CisKKwlzd2l0Y2ggKGJ1cy0+Y2hpcGluZm8uaWQpIHsKKwljYXNlIDB4NDMxMzoKKwljYXNlIDB4NDMzMToKKwljYXNlIDQzMjI0OgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9lcnIoIlBNVSBzd2l0Y2gvcmVndWxhdG9ycyBpbml0IHVua25vd24gZm9yIGRldmljZSAiCisJCQkiMHglMDRYXG4iLCBidXMtPmNoaXBpbmZvLmlkKTsKKwl9Cit9CisKK3ZvaWQgYmNtYV9wbXVfd29ya2Fyb3VuZHMoc3RydWN0IGJjbWFfZHJ2X2NjICpjYykKK3sKKwlzdHJ1Y3QgYmNtYV9idXMgKmJ1cyA9IGNjLT5jb3JlLT5idXM7CisKKwlzd2l0Y2ggKGJ1cy0+Y2hpcGluZm8uaWQpIHsKKwljYXNlIDB4NDMxMzoKKwkJYmNtYV9jaGlwY29fY2hpcGN0bF9tYXNrc2V0KGNjLCAwLCB+MCwgMHg3KTsKKwkJYnJlYWs7CisJY2FzZSAweDQzMzE6CisJCXByX2VycigiRW5hYmxpbmcgRXh0IFBBIGxpbmVzIG5vdCBpbXBsZW1lbnRlZFxuIik7CisJCWJyZWFrOworCWNhc2UgNDMyMjQ6CisJCWlmIChidXMtPmNoaXBpbmZvLnJldiA9PSAwKSB7CisJCQlwcl9lcnIoIldvcmthcm91bmRzIGZvciA0MzIyNCByZXYgMCBub3QgZnVsbHkgIgorCQkJCSJpbXBsZW1lbnRlZFxuIik7CisJCQliY21hX2NoaXBjb19jaGlwY3RsX21hc2tzZXQoY2MsIDAsIH4wLCAweEYwKTsKKwkJfSBlbHNlIHsKKwkJCWJjbWFfY2hpcGNvX2NoaXBjdGxfbWFza3NldChjYywgMCwgfjAsIDB4RjApOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2VycigiV29ya2Fyb3VuZHMgdW5rbm93biBmb3IgZGV2aWNlIDB4JTA0WFxuIiwKKwkJCWJ1cy0+Y2hpcGluZm8uaWQpOworCX0KK30KKwordm9pZCBiY21hX3BtdV9pbml0KHN0cnVjdCBiY21hX2Rydl9jYyAqY2MpCit7CisJdTMyIHBtdWNhcDsKKworCXBtdWNhcCA9IGJjbWFfY2NfcmVhZDMyKGNjLCBCQ01BX0NDX1BNVV9DQVApOworCWNjLT5wbXUucmV2ID0gKHBtdWNhcCAmIEJDTUFfQ0NfUE1VX0NBUF9SRVZJU0lPTik7CisKKwlwcl9kZWJ1ZygiRm91bmQgcmV2ICV1IFBNVSAoY2FwYWJpbGl0aWVzIDB4JTA4WClcbiIsIGNjLT5wbXUucmV2LAorCQkgcG11Y2FwKTsKKworCWlmIChjYy0+cG11LnJldiA9PSAxKQorCQliY21hX2NjX21hc2szMihjYywgQkNNQV9DQ19QTVVfQ1RMLAorCQkJICAgICAgfkJDTUFfQ0NfUE1VX0NUTF9OT0lMUE9OVyk7CisJZWxzZQorCQliY21hX2NjX3NldDMyKGNjLCBCQ01BX0NDX1BNVV9DVEwsCisJCQkgICAgIEJDTUFfQ0NfUE1VX0NUTF9OT0lMUE9OVyk7CisKKwlpZiAoY2MtPmNvcmUtPmlkLmlkID09IDB4NDMyOSAmJiBjYy0+Y29yZS0+aWQucmV2ID09IDIpCisJCXByX2VycigiRml4IGZvciA0MzI5YjAgYmFkIExQT00gc3RhdGUgbm90IGltcGxlbWVudGVkIVxuIik7CisKKwliY21hX3BtdV9wbGxfaW5pdChjYyk7CisJYmNtYV9wbXVfcmVzb3VyY2VzX2luaXQoY2MpOworCWJjbWFfcG11X3N3cmVnX2luaXQoY2MpOworCWJjbWFfcG11X3dvcmthcm91bmRzKGNjKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmNtYS9kcml2ZXJfcGNpLmMgYi9kcml2ZXJzL2JjbWEvZHJpdmVyX3BjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NTdlNGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2JjbWEvZHJpdmVyX3BjaS5jCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQnJvYWRjb20gc3BlY2lmaWMgQU1CQQorICogUENJIENvcmUKKyAqCisgKiBDb3B5cmlnaHQgMjAwNSwgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAyMDA2LCAyMDA3LCBNaWNoYWVsIEJ1ZXNjaCA8bWJAYnUzc2NoLmRlPgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHTlUvR1BMLiBTZWUgQ09QWUlORyBmb3IgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSAiYmNtYV9wcml2YXRlLmgiCisjaW5jbHVkZSA8bGludXgvYmNtYS9iY21hLmg+CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUi9XIG9wcy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHUzMiBiY21hX3BjaWVfcmVhZChzdHJ1Y3QgYmNtYV9kcnZfcGNpICpwYywgdTMyIGFkZHJlc3MpCit7CisJcGNpY29yZV93cml0ZTMyKHBjLCAweDEzMCwgYWRkcmVzcyk7CisJcGNpY29yZV9yZWFkMzIocGMsIDB4MTMwKTsKKwlyZXR1cm4gcGNpY29yZV9yZWFkMzIocGMsIDB4MTM0KTsKK30KKworI2lmIDAKK3N0YXRpYyB2b2lkIGJjbWFfcGNpZV93cml0ZShzdHJ1Y3QgYmNtYV9kcnZfcGNpICpwYywgdTMyIGFkZHJlc3MsIHUzMiBkYXRhKQoreworCXBjaWNvcmVfd3JpdGUzMihwYywgMHgxMzAsIGFkZHJlc3MpOworCXBjaWNvcmVfcmVhZDMyKHBjLCAweDEzMCk7CisJcGNpY29yZV93cml0ZTMyKHBjLCAweDEzNCwgZGF0YSk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgYmNtYV9wY2llX21kaW9fc2V0X3BoeShzdHJ1Y3QgYmNtYV9kcnZfcGNpICpwYywgdTggcGh5KQoreworCWNvbnN0IHUxNiBtZGlvX2NvbnRyb2wgPSAweDEyODsKKwljb25zdCB1MTYgbWRpb19kYXRhID0gMHgxMkM7CisJdTMyIHY7CisJaW50IGk7CisKKwl2ID0gKDEgPDwgMzApOyAvKiBTdGFydCBvZiBUcmFuc2FjdGlvbiAqLworCXYgfD0gKDEgPDwgMjgpOyAvKiBXcml0ZSBUcmFuc2FjdGlvbiAqLworCXYgfD0gKDEgPDwgMTcpOyAvKiBUdXJuYXJvdW5kICovCisJdiB8PSAoMHgxRiA8PCAxOCk7CisJdiB8PSAocGh5IDw8IDQpOworCXBjaWNvcmVfd3JpdGUzMihwYywgbWRpb19kYXRhLCB2KTsKKworCXVkZWxheSgxMCk7CisJZm9yIChpID0gMDsgaSA8IDIwMDsgaSsrKSB7CisJCXYgPSBwY2ljb3JlX3JlYWQzMihwYywgbWRpb19jb250cm9sKTsKKwkJaWYgKHYgJiAweDEwMCAvKiBUcmFucyBjb21wbGV0ZSAqLykKKwkJCWJyZWFrOworCQltc2xlZXAoMSk7CisJfQorfQorCitzdGF0aWMgdTE2IGJjbWFfcGNpZV9tZGlvX3JlYWQoc3RydWN0IGJjbWFfZHJ2X3BjaSAqcGMsIHU4IGRldmljZSwgdTggYWRkcmVzcykKK3sKKwljb25zdCB1MTYgbWRpb19jb250cm9sID0gMHgxMjg7CisJY29uc3QgdTE2IG1kaW9fZGF0YSA9IDB4MTJDOworCWludCBtYXhfcmV0cmllcyA9IDEwOworCXUxNiByZXQgPSAwOworCXUzMiB2OworCWludCBpOworCisJdiA9IDB4ODA7IC8qIEVuYWJsZSBQcmVhbWJsZSBTZXF1ZW5jZSAqLworCXYgfD0gMHgyOyAvKiBNRElPIENsb2NrIERpdmlzb3IgKi8KKwlwY2ljb3JlX3dyaXRlMzIocGMsIG1kaW9fY29udHJvbCwgdik7CisKKwlpZiAocGMtPmNvcmUtPmlkLnJldiA+PSAxMCkgeworCQltYXhfcmV0cmllcyA9IDIwMDsKKwkJYmNtYV9wY2llX21kaW9fc2V0X3BoeShwYywgZGV2aWNlKTsKKwl9CisKKwl2ID0gKDEgPDwgMzApOyAvKiBTdGFydCBvZiBUcmFuc2FjdGlvbiAqLworCXYgfD0gKDEgPDwgMjkpOyAvKiBSZWFkIFRyYW5zYWN0aW9uICovCisJdiB8PSAoMSA8PCAxNyk7IC8qIFR1cm5hcm91bmQgKi8KKwlpZiAocGMtPmNvcmUtPmlkLnJldiA8IDEwKQorCQl2IHw9ICh1MzIpZGV2aWNlIDw8IDIyOworCXYgfD0gKHUzMilhZGRyZXNzIDw8IDE4OworCXBjaWNvcmVfd3JpdGUzMihwYywgbWRpb19kYXRhLCB2KTsKKwkvKiBXYWl0IGZvciB0aGUgZGV2aWNlIHRvIGNvbXBsZXRlIHRoZSB0cmFuc2FjdGlvbiAqLworCXVkZWxheSgxMCk7CisJZm9yIChpID0gMDsgaSA8IG1heF9yZXRyaWVzOyBpKyspIHsKKwkJdiA9IHBjaWNvcmVfcmVhZDMyKHBjLCBtZGlvX2NvbnRyb2wpOworCQlpZiAodiAmIDB4MTAwIC8qIFRyYW5zIGNvbXBsZXRlICovKSB7CisJCQl1ZGVsYXkoMTApOworCQkJcmV0ID0gcGNpY29yZV9yZWFkMzIocGMsIG1kaW9fZGF0YSk7CisJCQlicmVhazsKKwkJfQorCQltc2xlZXAoMSk7CisJfQorCXBjaWNvcmVfd3JpdGUzMihwYywgbWRpb19jb250cm9sLCAwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBiY21hX3BjaWVfbWRpb193cml0ZShzdHJ1Y3QgYmNtYV9kcnZfcGNpICpwYywgdTggZGV2aWNlLAorCQkJCXU4IGFkZHJlc3MsIHUxNiBkYXRhKQoreworCWNvbnN0IHUxNiBtZGlvX2NvbnRyb2wgPSAweDEyODsKKwljb25zdCB1MTYgbWRpb19kYXRhID0gMHgxMkM7CisJaW50IG1heF9yZXRyaWVzID0gMTA7CisJdTMyIHY7CisJaW50IGk7CisKKwl2ID0gMHg4MDsgLyogRW5hYmxlIFByZWFtYmxlIFNlcXVlbmNlICovCisJdiB8PSAweDI7IC8qIE1ESU8gQ2xvY2sgRGl2aXNvciAqLworCXBjaWNvcmVfd3JpdGUzMihwYywgbWRpb19jb250cm9sLCB2KTsKKworCWlmIChwYy0+Y29yZS0+aWQucmV2ID49IDEwKSB7CisJCW1heF9yZXRyaWVzID0gMjAwOworCQliY21hX3BjaWVfbWRpb19zZXRfcGh5KHBjLCBkZXZpY2UpOworCX0KKworCXYgPSAoMSA8PCAzMCk7IC8qIFN0YXJ0IG9mIFRyYW5zYWN0aW9uICovCisJdiB8PSAoMSA8PCAyOCk7IC8qIFdyaXRlIFRyYW5zYWN0aW9uICovCisJdiB8PSAoMSA8PCAxNyk7IC8qIFR1cm5hcm91bmQgKi8KKwlpZiAocGMtPmNvcmUtPmlkLnJldiA8IDEwKQorCQl2IHw9ICh1MzIpZGV2aWNlIDw8IDIyOworCXYgfD0gKHUzMilhZGRyZXNzIDw8IDE4OworCXYgfD0gZGF0YTsKKwlwY2ljb3JlX3dyaXRlMzIocGMsIG1kaW9fZGF0YSwgdik7CisJLyogV2FpdCBmb3IgdGhlIGRldmljZSB0byBjb21wbGV0ZSB0aGUgdHJhbnNhY3Rpb24gKi8KKwl1ZGVsYXkoMTApOworCWZvciAoaSA9IDA7IGkgPCBtYXhfcmV0cmllczsgaSsrKSB7CisJCXYgPSBwY2ljb3JlX3JlYWQzMihwYywgbWRpb19jb250cm9sKTsKKwkJaWYgKHYgJiAweDEwMCAvKiBUcmFucyBjb21wbGV0ZSAqLykKKwkJCWJyZWFrOworCQltc2xlZXAoMSk7CisJfQorCXBjaWNvcmVfd3JpdGUzMihwYywgbWRpb19jb250cm9sLCAwKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBXb3JrYXJvdW5kcy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHU4IGJjbWFfcGNpY29yZV9wb2xhcml0eV93b3JrYXJvdW5kKHN0cnVjdCBiY21hX2Rydl9wY2kgKnBjKQoreworCXJldHVybiAoYmNtYV9wY2llX3JlYWQocGMsIDB4MjA0KSAmIDB4MTApID8gMHhDMCA6IDB4ODA7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFfcGNpY29yZV9zZXJkZXNfd29ya2Fyb3VuZChzdHJ1Y3QgYmNtYV9kcnZfcGNpICpwYykKK3sKKwljb25zdCB1OCBzZXJkZXNfcGxsX2RldmljZSA9IDB4MUQ7CisJY29uc3QgdTggc2VyZGVzX3J4X2RldmljZSA9IDB4MUY7CisJdTE2IHRtcDsKKworCWJjbWFfcGNpZV9tZGlvX3dyaXRlKHBjLCBzZXJkZXNfcnhfZGV2aWNlLCAxIC8qIENvbnRyb2wgKi8sCisJCQkgICAgICBiY21hX3BjaWNvcmVfcG9sYXJpdHlfd29ya2Fyb3VuZChwYykpOworCXRtcCA9IGJjbWFfcGNpZV9tZGlvX3JlYWQocGMsIHNlcmRlc19wbGxfZGV2aWNlLCAxIC8qIENvbnRyb2wgKi8pOworCWlmICh0bXAgJiAweDQwMDApCisJCWJjbWFfcGNpZV9tZGlvX3dyaXRlKHBjLCBzZXJkZXNfcGxsX2RldmljZSwgMSwgdG1wICYgfjB4NDAwMCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSW5pdC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCBiY21hX2NvcmVfcGNpX2luaXQoc3RydWN0IGJjbWFfZHJ2X3BjaSAqcGMpCit7CisJYmNtYV9wY2ljb3JlX3NlcmRlc193b3JrYXJvdW5kKHBjKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmNtYS9ob3N0X3BjaS5jIGIvZHJpdmVycy9iY21hL2hvc3RfcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlkZDM2ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYmNtYS9ob3N0X3BjaS5jCkBAIC0wLDAgKzEsMTk2IEBACisvKgorICogQnJvYWRjb20gc3BlY2lmaWMgQU1CQQorICogUENJIEhvc3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR05VL0dQTC4gU2VlIENPUFlJTkcgZm9yIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgImJjbWFfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPGxpbnV4L2JjbWEvYmNtYS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCitzdGF0aWMgdm9pZCBiY21hX2hvc3RfcGNpX3N3aXRjaF9jb3JlKHN0cnVjdCBiY21hX2RldmljZSAqY29yZSkKK3sKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGNvcmUtPmJ1cy0+aG9zdF9wY2ksIEJDTUFfUENJX0JBUjBfV0lOLAorCQkJICAgICAgIGNvcmUtPmFkZHIpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoY29yZS0+YnVzLT5ob3N0X3BjaSwgQkNNQV9QQ0lfQkFSMF9XSU4yLAorCQkJICAgICAgIGNvcmUtPndyYXApOworCWNvcmUtPmJ1cy0+bWFwcGVkX2NvcmUgPSBjb3JlOworCXByX2RlYnVnKCJTd2l0Y2hlZCB0byBjb3JlOiAweCVYXG4iLCBjb3JlLT5pZC5pZCk7Cit9CisKK3N0YXRpYyB1OCBiY21hX2hvc3RfcGNpX3JlYWQ4KHN0cnVjdCBiY21hX2RldmljZSAqY29yZSwgdTE2IG9mZnNldCkKK3sKKwlpZiAoY29yZS0+YnVzLT5tYXBwZWRfY29yZSAhPSBjb3JlKQorCQliY21hX2hvc3RfcGNpX3N3aXRjaF9jb3JlKGNvcmUpOworCXJldHVybiBpb3JlYWQ4KGNvcmUtPmJ1cy0+bW1pbyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB1MTYgYmNtYV9ob3N0X3BjaV9yZWFkMTYoc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlLCB1MTYgb2Zmc2V0KQoreworCWlmIChjb3JlLT5idXMtPm1hcHBlZF9jb3JlICE9IGNvcmUpCisJCWJjbWFfaG9zdF9wY2lfc3dpdGNoX2NvcmUoY29yZSk7CisJcmV0dXJuIGlvcmVhZDE2KGNvcmUtPmJ1cy0+bW1pbyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB1MzIgYmNtYV9ob3N0X3BjaV9yZWFkMzIoc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlLCB1MTYgb2Zmc2V0KQoreworCWlmIChjb3JlLT5idXMtPm1hcHBlZF9jb3JlICE9IGNvcmUpCisJCWJjbWFfaG9zdF9wY2lfc3dpdGNoX2NvcmUoY29yZSk7CisJcmV0dXJuIGlvcmVhZDMyKGNvcmUtPmJ1cy0+bW1pbyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFfaG9zdF9wY2lfd3JpdGU4KHN0cnVjdCBiY21hX2RldmljZSAqY29yZSwgdTE2IG9mZnNldCwKKwkJCQkgdTggdmFsdWUpCit7CisJaWYgKGNvcmUtPmJ1cy0+bWFwcGVkX2NvcmUgIT0gY29yZSkKKwkJYmNtYV9ob3N0X3BjaV9zd2l0Y2hfY29yZShjb3JlKTsKKwlpb3dyaXRlOCh2YWx1ZSwgY29yZS0+YnVzLT5tbWlvICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgYmNtYV9ob3N0X3BjaV93cml0ZTE2KHN0cnVjdCBiY21hX2RldmljZSAqY29yZSwgdTE2IG9mZnNldCwKKwkJCQkgdTE2IHZhbHVlKQoreworCWlmIChjb3JlLT5idXMtPm1hcHBlZF9jb3JlICE9IGNvcmUpCisJCWJjbWFfaG9zdF9wY2lfc3dpdGNoX2NvcmUoY29yZSk7CisJaW93cml0ZTE2KHZhbHVlLCBjb3JlLT5idXMtPm1taW8gKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBiY21hX2hvc3RfcGNpX3dyaXRlMzIoc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlLCB1MTYgb2Zmc2V0LAorCQkJCSB1MzIgdmFsdWUpCit7CisJaWYgKGNvcmUtPmJ1cy0+bWFwcGVkX2NvcmUgIT0gY29yZSkKKwkJYmNtYV9ob3N0X3BjaV9zd2l0Y2hfY29yZShjb3JlKTsKKwlpb3dyaXRlMzIodmFsdWUsIGNvcmUtPmJ1cy0+bW1pbyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB1MzIgYmNtYV9ob3N0X3BjaV9hcmVhZDMyKHN0cnVjdCBiY21hX2RldmljZSAqY29yZSwgdTE2IG9mZnNldCkKK3sKKwlpZiAoY29yZS0+YnVzLT5tYXBwZWRfY29yZSAhPSBjb3JlKQorCQliY21hX2hvc3RfcGNpX3N3aXRjaF9jb3JlKGNvcmUpOworCXJldHVybiBpb3JlYWQzMihjb3JlLT5idXMtPm1taW8gKyAoMSAqIEJDTUFfQ09SRV9TSVpFKSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIGJjbWFfaG9zdF9wY2lfYXdyaXRlMzIoc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlLCB1MTYgb2Zmc2V0LAorCQkJCSAgdTMyIHZhbHVlKQoreworCWlmIChjb3JlLT5idXMtPm1hcHBlZF9jb3JlICE9IGNvcmUpCisJCWJjbWFfaG9zdF9wY2lfc3dpdGNoX2NvcmUoY29yZSk7CisJaW93cml0ZTMyKHZhbHVlLCBjb3JlLT5idXMtPm1taW8gKyAoMSAqIEJDTUFfQ09SRV9TSVpFKSArIG9mZnNldCk7Cit9CisKK2NvbnN0IHN0cnVjdCBiY21hX2hvc3Rfb3BzIGJjbWFfaG9zdF9wY2lfb3BzID0geworCS5yZWFkOAkJPSBiY21hX2hvc3RfcGNpX3JlYWQ4LAorCS5yZWFkMTYJCT0gYmNtYV9ob3N0X3BjaV9yZWFkMTYsCisJLnJlYWQzMgkJPSBiY21hX2hvc3RfcGNpX3JlYWQzMiwKKwkud3JpdGU4CQk9IGJjbWFfaG9zdF9wY2lfd3JpdGU4LAorCS53cml0ZTE2CT0gYmNtYV9ob3N0X3BjaV93cml0ZTE2LAorCS53cml0ZTMyCT0gYmNtYV9ob3N0X3BjaV93cml0ZTMyLAorCS5hcmVhZDMyCT0gYmNtYV9ob3N0X3BjaV9hcmVhZDMyLAorCS5hd3JpdGUzMgk9IGJjbWFfaG9zdF9wY2lfYXdyaXRlMzIsCit9OworCitzdGF0aWMgaW50IGJjbWFfaG9zdF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCSAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBiY21hX2J1cyAqYnVzOworCWludCBlcnIgPSAtRU5PTUVNOworCWNvbnN0IGNoYXIgKm5hbWU7CisJdTMyIHZhbDsKKworCS8qIEFsbG9jICovCisJYnVzID0ga3phbGxvYyhzaXplb2YoKmJ1cyksIEdGUF9LRVJORUwpOworCWlmICghYnVzKQorCQlnb3RvIG91dDsKKworCS8qIEJhc2ljIFBDSSBjb25maWd1cmF0aW9uICovCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9rZnJlZV9idXM7CisKKwluYW1lID0gZGV2X25hbWUoJmRldi0+ZGV2KTsKKwlpZiAoZGV2LT5kcml2ZXIgJiYgZGV2LT5kcml2ZXItPm5hbWUpCisJCW5hbWUgPSBkZXYtPmRyaXZlci0+bmFtZTsKKwllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKGRldiwgbmFtZSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfcGNpX2Rpc2FibGU7CisJcGNpX3NldF9tYXN0ZXIoZGV2KTsKKworCS8qIERpc2FibGUgdGhlIFJFVFJZX1RJTUVPVVQgcmVnaXN0ZXIgKDB4NDEpIHRvIGtlZXAKKwkgKiBQQ0kgVHggcmV0cmllcyBmcm9tIGludGVyZmVyaW5nIHdpdGggQzMgQ1BVIHN0YXRlICovCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHg0MCwgJnZhbCk7CisJaWYgKCh2YWwgJiAweDAwMDBmZjAwKSAhPSAwKQorCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg0MCwgdmFsICYgMHhmZmZmMDBmZik7CisKKwkvKiBTU0IgbmVlZGVkIGFkZGl0aW9uYWwgcG93ZXJpbmcgdXAsIGRvIHdlIGhhdmUgYW55IEFNQkEgUENJIGNhcmRzPyAqLworCWlmICghcGNpX2lzX3BjaWUoZGV2KSkKKwkJcHJfZXJyKCJQQ0kgY2FyZCBkZXRlY3RlZCwgcmVwb3J0IHByb2JsZW1zLlxuIik7CisKKwkvKiBNYXAgTU1JTyAqLworCWVyciA9IC1FTk9NRU07CisJYnVzLT5tbWlvID0gcGNpX2lvbWFwKGRldiwgMCwgfjBVTCk7CisJaWYgKCFidXMtPm1taW8pCisJCWdvdG8gZXJyX3BjaV9yZWxlYXNlX3JlZ2lvbnM7CisKKwkvKiBIb3N0IHNwZWNpZmljICovCisJYnVzLT5ob3N0X3BjaSA9IGRldjsKKwlidXMtPmhvc3R0eXBlID0gQkNNQV9IT1NUVFlQRV9QQ0k7CisJYnVzLT5vcHMgPSAmYmNtYV9ob3N0X3BjaV9vcHM7CisKKwkvKiBSZWdpc3RlciAqLworCWVyciA9IGJjbWFfYnVzX3JlZ2lzdGVyKGJ1cyk7CisJaWYgKGVycikKKwkJZ290byBlcnJfcGNpX3VubWFwX21taW87CisKKwlwY2lfc2V0X2RydmRhdGEoZGV2LCBidXMpOworCitvdXQ6CisJcmV0dXJuIGVycjsKKworZXJyX3BjaV91bm1hcF9tbWlvOgorCXBjaV9pb3VubWFwKGRldiwgYnVzLT5tbWlvKTsKK2Vycl9wY2lfcmVsZWFzZV9yZWdpb25zOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKK2Vycl9wY2lfZGlzYWJsZToKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKK2Vycl9rZnJlZV9idXM6CisJa2ZyZWUoYnVzKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBiY21hX2hvc3RfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBiY21hX2J1cyAqYnVzID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisKKwliY21hX2J1c191bnJlZ2lzdGVyKGJ1cyk7CisJcGNpX2lvdW5tYXAoZGV2LCBidXMtPm1taW8pOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKKwlrZnJlZShidXMpOworCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworfQorCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYmNtYV9wY2lfYnJpZGdlX3RibCkgPSB7CisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMzMSkgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzUzKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQ3MjcpIH0sCisJeyAwLCB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBiY21hX3BjaV9icmlkZ2VfdGJsKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGJjbWFfcGNpX2JyaWRnZV9kcml2ZXIgPSB7CisJLm5hbWUgPSAiYmNtYS1wY2ktYnJpZGdlIiwKKwkuaWRfdGFibGUgPSBiY21hX3BjaV9icmlkZ2VfdGJsLAorCS5wcm9iZSA9IGJjbWFfaG9zdF9wY2lfcHJvYmUsCisJLnJlbW92ZSA9IGJjbWFfaG9zdF9wY2lfcmVtb3ZlLAorfTsKKworaW50IF9faW5pdCBiY21hX2hvc3RfcGNpX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYmNtYV9wY2lfYnJpZGdlX2RyaXZlcik7Cit9CisKK3ZvaWQgX19leGl0IGJjbWFfaG9zdF9wY2lfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYmNtYV9wY2lfYnJpZGdlX2RyaXZlcik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JjbWEvbWFpbi5jIGIvZHJpdmVycy9iY21hL21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTUyMzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9iY21hL21haW4uYwpAQCAtMCwwICsxLDI0NyBAQAorLyoKKyAqIEJyb2FkY29tIHNwZWNpZmljIEFNQkEKKyAqIEJ1cyBzdWJzeXN0ZW0KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR05VL0dQTC4gU2VlIENPUFlJTkcgZm9yIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgImJjbWFfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPGxpbnV4L2JjbWEvYmNtYS5oPgorCitNT0RVTEVfREVTQ1JJUFRJT04oIkJyb2FkY29tJ3Mgc3BlY2lmaWMgQU1CQSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCBiY21hX2J1c19tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpOworc3RhdGljIGludCBiY21hX2RldmljZV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworc3RhdGljIGludCBiY21hX2RldmljZV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KTsKKworc3RhdGljIHNzaXplX3QgbWFudWZfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGJjbWFfZGV2aWNlLCBkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTAzWFxuIiwgY29yZS0+aWQubWFudWYpOworfQorc3RhdGljIHNzaXplX3QgaWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGJjbWFfZGV2aWNlLCBkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTAzWFxuIiwgY29yZS0+aWQuaWQpOworfQorc3RhdGljIHNzaXplX3QgcmV2X3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBiY21hX2RldmljZSAqY29yZSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBiY21hX2RldmljZSwgZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwMlhcbiIsIGNvcmUtPmlkLnJldik7Cit9CitzdGF0aWMgc3NpemVfdCBjbGFzc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmUgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgYmNtYV9kZXZpY2UsIGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglWFxuIiwgY29yZS0+aWQuY2xhc3MpOworfQorc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGJjbWFfZGV2aWNlX2F0dHJzW10gPSB7CisJX19BVFRSX1JPKG1hbnVmKSwKKwlfX0FUVFJfUk8oaWQpLAorCV9fQVRUUl9STyhyZXYpLAorCV9fQVRUUl9STyhjbGFzcyksCisJX19BVFRSX05VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGJ1c190eXBlIGJjbWFfYnVzX3R5cGUgPSB7CisJLm5hbWUJCT0gImJjbWEiLAorCS5tYXRjaAkJPSBiY21hX2J1c19tYXRjaCwKKwkucHJvYmUJCT0gYmNtYV9kZXZpY2VfcHJvYmUsCisJLnJlbW92ZQkJPSBiY21hX2RldmljZV9yZW1vdmUsCisJLmRldl9hdHRycwk9IGJjbWFfZGV2aWNlX2F0dHJzLAorfTsKKworc3RhdGljIHN0cnVjdCBiY21hX2RldmljZSAqYmNtYV9maW5kX2NvcmUoc3RydWN0IGJjbWFfYnVzICpidXMsIHUxNiBjb3JlaWQpCit7CisJc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb3JlLCAmYnVzLT5jb3JlcywgbGlzdCkgeworCQlpZiAoY29yZS0+aWQuaWQgPT0gY29yZWlkKQorCQkJcmV0dXJuIGNvcmU7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBiY21hX3JlbGVhc2VfY29yZV9kZXYoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBiY21hX2RldmljZSAqY29yZSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBiY21hX2RldmljZSwgZGV2KTsKKwlrZnJlZShjb3JlKTsKK30KKworc3RhdGljIGludCBiY21hX3JlZ2lzdGVyX2NvcmVzKHN0cnVjdCBiY21hX2J1cyAqYnVzKQoreworCXN0cnVjdCBiY21hX2RldmljZSAqY29yZTsKKwlpbnQgZXJyLCBkZXZfaWQgPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb3JlLCAmYnVzLT5jb3JlcywgbGlzdCkgeworCQkvKiBXZSBzdXBwb3J0IHRoYXQgY29yZXMgb3Vyc2VsZiAqLworCQlzd2l0Y2ggKGNvcmUtPmlkLmlkKSB7CisJCWNhc2UgQkNNQV9DT1JFX0NISVBDT01NT046CisJCWNhc2UgQkNNQV9DT1JFX1BDSToKKwkJY2FzZSBCQ01BX0NPUkVfUENJRToKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJY29yZS0+ZGV2LnJlbGVhc2UgPSBiY21hX3JlbGVhc2VfY29yZV9kZXY7CisJCWNvcmUtPmRldi5idXMgPSAmYmNtYV9idXNfdHlwZTsKKwkJZGV2X3NldF9uYW1lKCZjb3JlLT5kZXYsICJiY21hJWQ6JWQiLCAwLypidXMtPm51bSovLCBkZXZfaWQpOworCisJCXN3aXRjaCAoYnVzLT5ob3N0dHlwZSkgeworCQljYXNlIEJDTUFfSE9TVFRZUEVfUENJOgorCQkJY29yZS0+ZGV2LnBhcmVudCA9ICZidXMtPmhvc3RfcGNpLT5kZXY7CisJCQlicmVhazsKKwkJY2FzZSBCQ01BX0hPU1RUWVBFX05PTkU6CisJCWNhc2UgQkNNQV9IT1NUVFlQRV9TRElPOgorCQkJYnJlYWs7CisJCX0KKworCQllcnIgPSBkZXZpY2VfcmVnaXN0ZXIoJmNvcmUtPmRldik7CisJCWlmIChlcnIpIHsKKwkJCXByX2VycigiQ291bGQgbm90IHJlZ2lzdGVyIGRldiBmb3IgY29yZSAweCUwM1hcbiIsCisJCQkgICAgICAgY29yZS0+aWQuaWQpOworCQkJY29udGludWU7CisJCX0KKwkJY29yZS0+ZGV2X3JlZ2lzdGVyZWQgPSB0cnVlOworCQlkZXZfaWQrKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKHN0cnVjdCBiY21hX2J1cyAqYnVzKQoreworCXN0cnVjdCBiY21hX2RldmljZSAqY29yZTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29yZSwgJmJ1cy0+Y29yZXMsIGxpc3QpIHsKKwkJaWYgKGNvcmUtPmRldl9yZWdpc3RlcmVkKQorCQkJZGV2aWNlX3VucmVnaXN0ZXIoJmNvcmUtPmRldik7CisJfQorfQorCitpbnQgYmNtYV9idXNfcmVnaXN0ZXIoc3RydWN0IGJjbWFfYnVzICpidXMpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmU7CisKKwkvKiBTY2FuIGZvciBkZXZpY2VzIChjb3JlcykgKi8KKwllcnIgPSBiY21hX2J1c19zY2FuKGJ1cyk7CisJaWYgKGVycikgeworCQlwcl9lcnIoIkZhaWxlZCB0byBzY2FuOiAlZFxuIiwgZXJyKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIEluaXQgQ0MgY29yZSAqLworCWNvcmUgPSBiY21hX2ZpbmRfY29yZShidXMsIEJDTUFfQ09SRV9DSElQQ09NTU9OKTsKKwlpZiAoY29yZSkgeworCQlidXMtPmRydl9jYy5jb3JlID0gY29yZTsKKwkJYmNtYV9jb3JlX2NoaXBjb21tb25faW5pdCgmYnVzLT5kcnZfY2MpOworCX0KKworCS8qIEluaXQgUENJRSBjb3JlICovCisJY29yZSA9IGJjbWFfZmluZF9jb3JlKGJ1cywgQkNNQV9DT1JFX1BDSUUpOworCWlmIChjb3JlKSB7CisJCWJ1cy0+ZHJ2X3BjaS5jb3JlID0gY29yZTsKKwkJYmNtYV9jb3JlX3BjaV9pbml0KCZidXMtPmRydl9wY2kpOworCX0KKworCS8qIFJlZ2lzdGVyIGZvdW5kIGNvcmVzICovCisJYmNtYV9yZWdpc3Rlcl9jb3JlcyhidXMpOworCisJcHJfaW5mbygiQnVzIHJlZ2lzdGVyZWRcbiIpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChiY21hX2J1c19yZWdpc3Rlcik7CisKK3ZvaWQgYmNtYV9idXNfdW5yZWdpc3RlcihzdHJ1Y3QgYmNtYV9idXMgKmJ1cykKK3sKKwliY21hX3VucmVnaXN0ZXJfY29yZXMoYnVzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJjbWFfYnVzX3VucmVnaXN0ZXIpOworCitpbnQgX19iY21hX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgYmNtYV9kcml2ZXIgKmRydiwgc3RydWN0IG1vZHVsZSAqb3duZXIpCit7CisJZHJ2LT5kcnYubmFtZSA9IGRydi0+bmFtZTsKKwlkcnYtPmRydi5idXMgPSAmYmNtYV9idXNfdHlwZTsKKwlkcnYtPmRydi5vd25lciA9IG93bmVyOworCisJcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmZHJ2LT5kcnYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoX19iY21hX2RyaXZlcl9yZWdpc3Rlcik7CisKK3ZvaWQgYmNtYV9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgYmNtYV9kcml2ZXIgKmRydikKK3sKKwlkcml2ZXJfdW5yZWdpc3RlcigmZHJ2LT5kcnYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYmNtYV9kcml2ZXJfdW5yZWdpc3Rlcik7CisKK3N0YXRpYyBpbnQgYmNtYV9idXNfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQoreworCXN0cnVjdCBiY21hX2RldmljZSAqY29yZSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBiY21hX2RldmljZSwgZGV2KTsKKwlzdHJ1Y3QgYmNtYV9kcml2ZXIgKmFkcnYgPSBjb250YWluZXJfb2YoZHJ2LCBzdHJ1Y3QgYmNtYV9kcml2ZXIsIGRydik7CisJY29uc3Qgc3RydWN0IGJjbWFfZGV2aWNlX2lkICpjaWQgPSAmY29yZS0+aWQ7CisJY29uc3Qgc3RydWN0IGJjbWFfZGV2aWNlX2lkICpkaWQ7CisKKwlmb3IgKGRpZCA9IGFkcnYtPmlkX3RhYmxlOyBkaWQtPm1hbnVmIHx8IGRpZC0+aWQgfHwgZGlkLT5yZXY7IGRpZCsrKSB7CisJICAgIGlmICgoZGlkLT5tYW51ZiA9PSBjaWQtPm1hbnVmIHx8IGRpZC0+bWFudWYgPT0gQkNNQV9BTllfTUFOVUYpICYmCisJCShkaWQtPmlkID09IGNpZC0+aWQgfHwgZGlkLT5pZCA9PSBCQ01BX0FOWV9JRCkgJiYKKwkJKGRpZC0+cmV2ID09IGNpZC0+cmV2IHx8IGRpZC0+cmV2ID09IEJDTUFfQU5ZX1JFVikgJiYKKwkJKGRpZC0+Y2xhc3MgPT0gY2lkLT5jbGFzcyB8fCBkaWQtPmNsYXNzID09IEJDTUFfQU5ZX0NMQVNTKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiY21hX2RldmljZV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGJjbWFfZGV2aWNlLCBkZXYpOworCXN0cnVjdCBiY21hX2RyaXZlciAqYWRydiA9IGNvbnRhaW5lcl9vZihkZXYtPmRyaXZlciwgc3RydWN0IGJjbWFfZHJpdmVyLAorCQkJCQkgICAgICAgZHJ2KTsKKwlpbnQgZXJyID0gMDsKKworCWlmIChhZHJ2LT5wcm9iZSkKKwkJZXJyID0gYWRydi0+cHJvYmUoY29yZSk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGJjbWFfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGJjbWFfZGV2aWNlLCBkZXYpOworCXN0cnVjdCBiY21hX2RyaXZlciAqYWRydiA9IGNvbnRhaW5lcl9vZihkZXYtPmRyaXZlciwgc3RydWN0IGJjbWFfZHJpdmVyLAorCQkJCQkgICAgICAgZHJ2KTsKKworCWlmIChhZHJ2LT5yZW1vdmUpCisJCWFkcnYtPnJlbW92ZShjb3JlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBiY21hX21vZGluaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gYnVzX3JlZ2lzdGVyKCZiY21hX2J1c190eXBlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisjaWZkZWYgQ09ORklHX0JDTUFfSE9TVF9QQ0kKKwllcnIgPSBiY21hX2hvc3RfcGNpX2luaXQoKTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigiUENJIGhvc3QgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKKwkJZXJyID0gMDsKKwl9CisjZW5kaWYKKworCXJldHVybiBlcnI7Cit9Citmc19pbml0Y2FsbChiY21hX21vZGluaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgYmNtYV9tb2RleGl0KHZvaWQpCit7CisjaWZkZWYgQ09ORklHX0JDTUFfSE9TVF9QQ0kKKwliY21hX2hvc3RfcGNpX2V4aXQoKTsKKyNlbmRpZgorCWJ1c191bnJlZ2lzdGVyKCZiY21hX2J1c190eXBlKTsKK30KK21vZHVsZV9leGl0KGJjbWFfbW9kZXhpdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmNtYS9zY2FuLmMgYi9kcml2ZXJzL2JjbWEvc2Nhbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZDdkY2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2JjbWEvc2Nhbi5jCkBAIC0wLDAgKzEsMzYwIEBACisvKgorICogQnJvYWRjb20gc3BlY2lmaWMgQU1CQQorICogQnVzIHNjYW5uaW5nCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdOVS9HUEwuIFNlZSBDT1BZSU5HIGZvciBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlICJzY2FuLmgiCisjaW5jbHVkZSAiYmNtYV9wcml2YXRlLmgiCisKKyNpbmNsdWRlIDxsaW51eC9iY21hL2JjbWEuaD4KKyNpbmNsdWRlIDxsaW51eC9iY21hL2JjbWFfcmVncy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKK3N0cnVjdCBiY21hX2RldmljZV9pZF9uYW1lIHsKKwl1MTYgaWQ7CisJY29uc3QgY2hhciAqbmFtZTsKK307CitzdHJ1Y3QgYmNtYV9kZXZpY2VfaWRfbmFtZSBiY21hX2RldmljZV9uYW1lc1tdID0geworCXsgQkNNQV9DT1JFX09PQl9ST1VURVIsICJPT0IgUm91dGVyIiB9LAorCXsgQkNNQV9DT1JFX0lOVkFMSUQsICJJbnZhbGlkIiB9LAorCXsgQkNNQV9DT1JFX0NISVBDT01NT04sICJDaGlwQ29tbW9uIiB9LAorCXsgQkNNQV9DT1JFX0lMSU5FMjAsICJJTGluZSAyMCIgfSwKKwl7IEJDTUFfQ09SRV9TUkFNLCAiU1JBTSIgfSwKKwl7IEJDTUFfQ09SRV9TRFJBTSwgIlNEUkFNIiB9LAorCXsgQkNNQV9DT1JFX1BDSSwgIlBDSSIgfSwKKwl7IEJDTUFfQ09SRV9NSVBTLCAiTUlQUyIgfSwKKwl7IEJDTUFfQ09SRV9FVEhFUk5FVCwgIkZhc3QgRXRoZXJuZXQiIH0sCisJeyBCQ01BX0NPUkVfVjkwLCAiVjkwIiB9LAorCXsgQkNNQV9DT1JFX1VTQjExX0hPU1RERVYsICJVU0IgMS4xIEhvc3RkZXYiIH0sCisJeyBCQ01BX0NPUkVfQURTTCwgIkFEU0wiIH0sCisJeyBCQ01BX0NPUkVfSUxJTkUxMDAsICJJTGluZSAxMDAiIH0sCisJeyBCQ01BX0NPUkVfSVBTRUMsICJJUFNFQyIgfSwKKwl7IEJDTUFfQ09SRV9VVE9QSUEsICJVVE9QSUEiIH0sCisJeyBCQ01BX0NPUkVfUENNQ0lBLCAiUENNQ0lBIiB9LAorCXsgQkNNQV9DT1JFX0lOVEVSTkFMX01FTSwgIkludGVybmFsIE1lbW9yeSIgfSwKKwl7IEJDTUFfQ09SRV9NRU1DX1NEUkFNLCAiTUVNQyBTRFJBTSIgfSwKKwl7IEJDTUFfQ09SRV9PRkRNLCAiT0ZETSIgfSwKKwl7IEJDTUFfQ09SRV9FWFRJRiwgIkVYVElGIiB9LAorCXsgQkNNQV9DT1JFXzgwMjExLCAiSUVFRSA4MDIuMTEiIH0sCisJeyBCQ01BX0NPUkVfUEhZX0EsICJQSFkgQSIgfSwKKwl7IEJDTUFfQ09SRV9QSFlfQiwgIlBIWSBCIiB9LAorCXsgQkNNQV9DT1JFX1BIWV9HLCAiUEhZIEciIH0sCisJeyBCQ01BX0NPUkVfTUlQU18zMzAyLCAiTUlQUyAzMzAyIiB9LAorCXsgQkNNQV9DT1JFX1VTQjExX0hPU1QsICJVU0IgMS4xIEhvc3QiIH0sCisJeyBCQ01BX0NPUkVfVVNCMTFfREVWLCAiVVNCIDEuMSBEZXZpY2UiIH0sCisJeyBCQ01BX0NPUkVfVVNCMjBfSE9TVCwgIlVTQiAyLjAgSG9zdCIgfSwKKwl7IEJDTUFfQ09SRV9VU0IyMF9ERVYsICJVU0IgMi4wIERldmljZSIgfSwKKwl7IEJDTUFfQ09SRV9TRElPX0hPU1QsICJTRElPIEhvc3QiIH0sCisJeyBCQ01BX0NPUkVfUk9CT1NXSVRDSCwgIlJvYm9zd2l0Y2giIH0sCisJeyBCQ01BX0NPUkVfUEFSQV9BVEEsICJQQVRBIiB9LAorCXsgQkNNQV9DT1JFX1NBVEFfWE9SRE1BLCAiU0FUQSBYT1ItRE1BIiB9LAorCXsgQkNNQV9DT1JFX0VUSEVSTkVUX0dCSVQsICJHQml0IEV0aGVybmV0IiB9LAorCXsgQkNNQV9DT1JFX1BDSUUsICJQQ0llIiB9LAorCXsgQkNNQV9DT1JFX1BIWV9OLCAiUEhZIE4iIH0sCisJeyBCQ01BX0NPUkVfU1JBTV9DVEwsICJTUkFNIENvbnRyb2xsZXIiIH0sCisJeyBCQ01BX0NPUkVfTUlOSV9NQUNQSFksICJNaW5pIE1BQ1BIWSIgfSwKKwl7IEJDTUFfQ09SRV9BUk1fMTE3NiwgIkFSTSAxMTc2IiB9LAorCXsgQkNNQV9DT1JFX0FSTV83VERNSSwgIkFSTSA3VERNSSIgfSwKKwl7IEJDTUFfQ09SRV9QSFlfTFAsICJQSFkgTFAiIH0sCisJeyBCQ01BX0NPUkVfUE1VLCAiUE1VIiB9LAorCXsgQkNNQV9DT1JFX1BIWV9TU04sICJQSFkgU1NOIiB9LAorCXsgQkNNQV9DT1JFX1NESU9fREVWLCAiU0RJTyBEZXZpY2UiIH0sCisJeyBCQ01BX0NPUkVfQVJNX0NNMywgIkFSTSBDTTMiIH0sCisJeyBCQ01BX0NPUkVfUEhZX0hULCAiUEhZIEhUIiB9LAorCXsgQkNNQV9DT1JFX01JUFNfNzRLLCAiTUlQUyA3NEsiIH0sCisJeyBCQ01BX0NPUkVfTUFDX0dCSVQsICJHQml0IE1BQyIgfSwKKwl7IEJDTUFfQ09SRV9ERFIxMl9NRU1fQ1RMLCAiRERSMS9ERFIyIE1lbW9yeSBDb250cm9sbGVyIiB9LAorCXsgQkNNQV9DT1JFX1BDSUVfUkMsICJQQ0llIFJvb3QgQ29tcGxleCIgfSwKKwl7IEJDTUFfQ09SRV9PQ1BfT0NQX0JSSURHRSwgIk9DUCB0byBPQ1AgQnJpZGdlIiB9LAorCXsgQkNNQV9DT1JFX1NIQVJFRF9DT01NT04sICJDb21tb24gU2hhcmVkIiB9LAorCXsgQkNNQV9DT1JFX09DUF9BSEJfQlJJREdFLCAiT0NQIHRvIEFIQiBCcmlkZ2UiIH0sCisJeyBCQ01BX0NPUkVfU1BJX0hPU1QsICJTUEkgSG9zdCIgfSwKKwl7IEJDTUFfQ09SRV9JMlMsICJJMlMiIH0sCisJeyBCQ01BX0NPUkVfU0RSX0REUjFfTUVNX0NUTCwgIlNEUi9ERFIxIE1lbW9yeSBDb250cm9sbGVyIiB9LAorCXsgQkNNQV9DT1JFX1NISU0sICJTSElNIiB9LAorCXsgQkNNQV9DT1JFX0RFRkFVTFQsICJEZWZhdWx0IiB9LAorfTsKK2NvbnN0IGNoYXIgKmJjbWFfZGV2aWNlX25hbWUoc3RydWN0IGJjbWFfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgaTsKKworCWlmIChpZC0+bWFudWYgPT0gQkNNQV9NQU5VRl9CQ00pIHsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYmNtYV9kZXZpY2VfbmFtZXMpOyBpKyspIHsKKwkJCWlmIChiY21hX2RldmljZV9uYW1lc1tpXS5pZCA9PSBpZC0+aWQpCisJCQkJcmV0dXJuIGJjbWFfZGV2aWNlX25hbWVzW2ldLm5hbWU7CisJCX0KKwl9CisJcmV0dXJuICJVTktOT1dOIjsKK30KKworc3RhdGljIHUzMiBiY21hX3NjYW5fcmVhZDMyKHN0cnVjdCBiY21hX2J1cyAqYnVzLCB1OCBjdXJyZW50X2NvcmVpZHgsCisJCSAgICAgICB1MTYgb2Zmc2V0KQoreworCXJldHVybiByZWFkbChidXMtPm1taW8gKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBiY21hX3NjYW5fc3dpdGNoX2NvcmUoc3RydWN0IGJjbWFfYnVzICpidXMsIHUzMiBhZGRyKQoreworCWlmIChidXMtPmhvc3R0eXBlID09IEJDTUFfSE9TVFRZUEVfUENJKQorCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJ1cy0+aG9zdF9wY2ksIEJDTUFfUENJX0JBUjBfV0lOLAorCQkJCSAgICAgICBhZGRyKTsKK30KKworc3RhdGljIHUzMiBiY21hX2Vyb21fZ2V0X2VudChzdHJ1Y3QgYmNtYV9idXMgKmJ1cywgdTMyICoqZXJvbXB0cikKK3sKKwl1MzIgZW50ID0gcmVhZGwoKmVyb21wdHIpOworCSgqZXJvbXB0cikrKzsKKwlyZXR1cm4gZW50OworfQorCitzdGF0aWMgdm9pZCBiY21hX2Vyb21fcHVzaF9lbnQodTMyICoqZXJvbXB0cikKK3sKKwkoKmVyb21wdHIpLS07Cit9CisKK3N0YXRpYyBzMzIgYmNtYV9lcm9tX2dldF9jaShzdHJ1Y3QgYmNtYV9idXMgKmJ1cywgdTMyICoqZXJvbXB0cikKK3sKKwl1MzIgZW50ID0gYmNtYV9lcm9tX2dldF9lbnQoYnVzLCBlcm9tcHRyKTsKKwlpZiAoIShlbnQgJiBTQ0FOX0VSX1ZBTElEKSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJaWYgKChlbnQgJiBTQ0FOX0VSX1RBRykgIT0gU0NBTl9FUl9UQUdfQ0kpCisJCXJldHVybiAtRU5PRU5UOworCXJldHVybiBlbnQ7Cit9CisKK3N0YXRpYyBib29sIGJjbWFfZXJvbV9pc19lbmQoc3RydWN0IGJjbWFfYnVzICpidXMsIHUzMiAqKmVyb21wdHIpCit7CisJdTMyIGVudCA9IGJjbWFfZXJvbV9nZXRfZW50KGJ1cywgZXJvbXB0cik7CisJYmNtYV9lcm9tX3B1c2hfZW50KGVyb21wdHIpOworCXJldHVybiAoZW50ID09IChTQ0FOX0VSX1RBR19FTkQgfCBTQ0FOX0VSX1ZBTElEKSk7Cit9CisKK3N0YXRpYyBib29sIGJjbWFfZXJvbV9pc19icmlkZ2Uoc3RydWN0IGJjbWFfYnVzICpidXMsIHUzMiAqKmVyb21wdHIpCit7CisJdTMyIGVudCA9IGJjbWFfZXJvbV9nZXRfZW50KGJ1cywgZXJvbXB0cik7CisJYmNtYV9lcm9tX3B1c2hfZW50KGVyb21wdHIpOworCXJldHVybiAoKChlbnQgJiBTQ0FOX0VSX1ZBTElEKSkgJiYKKwkJKChlbnQgJiBTQ0FOX0VSX1RBR1gpID09IFNDQU5fRVJfVEFHX0FERFIpICYmCisJCSgoZW50ICYgU0NBTl9BRERSX1RZUEUpID09IFNDQU5fQUREUl9UWVBFX0JSSURHRSkpOworfQorCitzdGF0aWMgdm9pZCBiY21hX2Vyb21fc2tpcF9jb21wb25lbnQoc3RydWN0IGJjbWFfYnVzICpidXMsIHUzMiAqKmVyb21wdHIpCit7CisJdTMyIGVudDsKKwl3aGlsZSAoMSkgeworCQllbnQgPSBiY21hX2Vyb21fZ2V0X2VudChidXMsIGVyb21wdHIpOworCQlpZiAoKGVudCAmIFNDQU5fRVJfVkFMSUQpICYmCisJCSAgICAoKGVudCAmIFNDQU5fRVJfVEFHKSA9PSBTQ0FOX0VSX1RBR19DSSkpCisJCQlicmVhazsKKwkJaWYgKGVudCA9PSAoU0NBTl9FUl9UQUdfRU5EIHwgU0NBTl9FUl9WQUxJRCkpCisJCQlicmVhazsKKwl9CisJYmNtYV9lcm9tX3B1c2hfZW50KGVyb21wdHIpOworfQorCitzdGF0aWMgczMyIGJjbWFfZXJvbV9nZXRfbXN0X3BvcnQoc3RydWN0IGJjbWFfYnVzICpidXMsIHUzMiAqKmVyb21wdHIpCit7CisJdTMyIGVudCA9IGJjbWFfZXJvbV9nZXRfZW50KGJ1cywgZXJvbXB0cik7CisJaWYgKCEoZW50ICYgU0NBTl9FUl9WQUxJRCkpCisJCXJldHVybiAtRU5PRU5UOworCWlmICgoZW50ICYgU0NBTl9FUl9UQUcpICE9IFNDQU5fRVJfVEFHX01QKQorCQlyZXR1cm4gLUVOT0VOVDsKKwlyZXR1cm4gZW50OworfQorCitzdGF0aWMgczMyIGJjbWFfZXJvbV9nZXRfYWRkcl9kZXNjKHN0cnVjdCBiY21hX2J1cyAqYnVzLCB1MzIgKiplcm9tcHRyLAorCQkJCSAgdTMyIHR5cGUsIHU4IHBvcnQpCit7CisJdTMyIGFkZHJsLCBhZGRyaCwgc2l6ZWwsIHNpemVoID0gMDsKKwl1MzIgc2l6ZTsKKworCXUzMiBlbnQgPSBiY21hX2Vyb21fZ2V0X2VudChidXMsIGVyb21wdHIpOworCWlmICgoIShlbnQgJiBTQ0FOX0VSX1ZBTElEKSkgfHwKKwkgICAgKChlbnQgJiBTQ0FOX0VSX1RBR1gpICE9IFNDQU5fRVJfVEFHX0FERFIpIHx8CisJICAgICgoZW50ICYgU0NBTl9BRERSX1RZUEUpICE9IHR5cGUpIHx8CisJICAgICgoKGVudCAmIFNDQU5fQUREUl9QT1JUKSA+PiBTQ0FOX0FERFJfUE9SVF9TSElGVCkgIT0gcG9ydCkpIHsKKwkJYmNtYV9lcm9tX3B1c2hfZW50KGVyb21wdHIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlhZGRybCA9IGVudCAmIFNDQU5fQUREUl9BRERSOworCWlmIChlbnQgJiBTQ0FOX0FERFJfQUczMikKKwkJYWRkcmggPSBiY21hX2Vyb21fZ2V0X2VudChidXMsIGVyb21wdHIpOworCWVsc2UKKwkJYWRkcmggPSAwOworCisJaWYgKChlbnQgJiBTQ0FOX0FERFJfU1opID09IFNDQU5fQUREUl9TWl9TWkQpIHsKKwkJc2l6ZSA9IGJjbWFfZXJvbV9nZXRfZW50KGJ1cywgZXJvbXB0cik7CisJCXNpemVsID0gc2l6ZSAmIFNDQU5fU0laRV9TWjsKKwkJaWYgKHNpemUgJiBTQ0FOX1NJWkVfU0czMikKKwkJCXNpemVoID0gYmNtYV9lcm9tX2dldF9lbnQoYnVzLCBlcm9tcHRyKTsKKwl9IGVsc2UKKwkJc2l6ZWwgPSBTQ0FOX0FERFJfU1pfQkFTRSA8PAorCQkJCSgoZW50ICYgU0NBTl9BRERSX1NaKSA+PiBTQ0FOX0FERFJfU1pfU0hJRlQpOworCisJcmV0dXJuIGFkZHJsOworfQorCitpbnQgYmNtYV9idXNfc2NhbihzdHJ1Y3QgYmNtYV9idXMgKmJ1cykKK3sKKwl1MzIgZXJvbWJhc2U7CisJdTMyIF9faW9tZW0gKmVyb21wdHIsICplcm9tZW5kOworCisJczMyIGNpYSwgY2liOworCXU4IHBvcnRzWzJdLCB3cmFwcGVyc1syXTsKKworCXMzMiB0bXA7CisJdTggaSwgajsKKworCWludCBlcnI7CisKKwlJTklUX0xJU1RfSEVBRCgmYnVzLT5jb3Jlcyk7CisJYnVzLT5ucl9jb3JlcyA9IDA7CisKKwliY21hX3NjYW5fc3dpdGNoX2NvcmUoYnVzLCBCQ01BX0FERFJfQkFTRSk7CisKKwl0bXAgPSBiY21hX3NjYW5fcmVhZDMyKGJ1cywgMCwgQkNNQV9DQ19JRCk7CisJYnVzLT5jaGlwaW5mby5pZCA9ICh0bXAgJiBCQ01BX0NDX0lEX0lEKSA+PiBCQ01BX0NDX0lEX0lEX1NISUZUOworCWJ1cy0+Y2hpcGluZm8ucmV2ID0gKHRtcCAmIEJDTUFfQ0NfSURfUkVWKSA+PiBCQ01BX0NDX0lEX1JFVl9TSElGVDsKKwlidXMtPmNoaXBpbmZvLnBrZyA9ICh0bXAgJiBCQ01BX0NDX0lEX1BLRykgPj4gQkNNQV9DQ19JRF9QS0dfU0hJRlQ7CisKKwllcm9tYmFzZSA9IGJjbWFfc2Nhbl9yZWFkMzIoYnVzLCAwLCBCQ01BX0NDX0VST00pOworCWVyb21wdHIgPSBidXMtPm1taW87CisJZXJvbWVuZCA9IGVyb21wdHIgKyBCQ01BX0NPUkVfU0laRSAvIHNpemVvZih1MzIpOworCisJYmNtYV9zY2FuX3N3aXRjaF9jb3JlKGJ1cywgZXJvbWJhc2UpOworCisJd2hpbGUgKGVyb21wdHIgPCBlcm9tZW5kKSB7CisJCXN0cnVjdCBiY21hX2RldmljZSAqY29yZSA9IGt6YWxsb2Moc2l6ZW9mKCpjb3JlKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghY29yZSkKKwkJCXJldHVybiAtRU5PTUVNOworCQlJTklUX0xJU1RfSEVBRCgmY29yZS0+bGlzdCk7CisJCWNvcmUtPmJ1cyA9IGJ1czsKKworCQkvKiBnZXQgQ0lzICovCisJCWNpYSA9IGJjbWFfZXJvbV9nZXRfY2koYnVzLCAmZXJvbXB0cik7CisJCWlmIChjaWEgPCAwKSB7CisJCQliY21hX2Vyb21fcHVzaF9lbnQoJmVyb21wdHIpOworCQkJaWYgKGJjbWFfZXJvbV9pc19lbmQoYnVzLCAmZXJvbXB0cikpCisJCQkJYnJlYWs7CisJCQllcnI9IC1FSUxTRVE7CisJCQlnb3RvIG91dDsKKwkJfQorCQljaWIgPSBiY21hX2Vyb21fZ2V0X2NpKGJ1cywgJmVyb21wdHIpOworCQlpZiAoY2liIDwgMCkgeworCQkJZXJyPSAtRUlMU0VROworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKiBwYXJzZSBDSXMgKi8KKwkJY29yZS0+aWQuY2xhc3MgPSAoY2lhICYgU0NBTl9DSUFfQ0xBU1MpID4+IFNDQU5fQ0lBX0NMQVNTX1NISUZUOworCQljb3JlLT5pZC5pZCA9IChjaWEgJiBTQ0FOX0NJQV9JRCkgPj4gU0NBTl9DSUFfSURfU0hJRlQ7CisJCWNvcmUtPmlkLm1hbnVmID0gKGNpYSAmIFNDQU5fQ0lBX01BTlVGKSA+PiBTQ0FOX0NJQV9NQU5VRl9TSElGVDsKKwkJcG9ydHNbMF0gPSAoY2liICYgU0NBTl9DSUJfTk1QKSA+PiBTQ0FOX0NJQl9OTVBfU0hJRlQ7CisJCXBvcnRzWzFdID0gKGNpYiAmIFNDQU5fQ0lCX05TUCkgPj4gU0NBTl9DSUJfTlNQX1NISUZUOworCQl3cmFwcGVyc1swXSA9IChjaWIgJiBTQ0FOX0NJQl9OTVcpID4+IFNDQU5fQ0lCX05NV19TSElGVDsKKwkJd3JhcHBlcnNbMV0gPSAoY2liICYgU0NBTl9DSUJfTlNXKSA+PiBTQ0FOX0NJQl9OU1dfU0hJRlQ7CisJCWNvcmUtPmlkLnJldiA9IChjaWIgJiBTQ0FOX0NJQl9SRVYpID4+IFNDQU5fQ0lCX1JFVl9TSElGVDsKKworCQlpZiAoKChjb3JlLT5pZC5tYW51ZiA9PSBCQ01BX01BTlVGX0FSTSkgJiYKKwkJICAgICAoY29yZS0+aWQuaWQgPT0gMHhGRkYpKSB8fAorCQkgICAgKHBvcnRzWzFdID09IDApKSB7CisJCQliY21hX2Vyb21fc2tpcF9jb21wb25lbnQoYnVzLCAmZXJvbXB0cik7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIGNoZWNrIGlmIGNvbXBvbmVudCBpcyBhIGNvcmUgYXQgYWxsICovCisJCWlmICh3cmFwcGVyc1swXSArIHdyYXBwZXJzWzFdID09IDApIHsKKwkJCS8qIHdlIGNvdWxkIHNhdmUgYWRkcmwgb2YgdGhlIHJvdXRlcgorCQkJaWYgKGNpZCA9PSBCQ01BX0NPUkVfT09CX1JPVVRFUikKKwkJCSAqLworCQkJYmNtYV9lcm9tX3NraXBfY29tcG9uZW50KGJ1cywgJmVyb21wdHIpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoYmNtYV9lcm9tX2lzX2JyaWRnZShidXMsICZlcm9tcHRyKSkgeworCQkJYmNtYV9lcm9tX3NraXBfY29tcG9uZW50KGJ1cywgJmVyb21wdHIpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBnZXQgJiBwYXJzZSBtYXN0ZXIgcG9ydHMgKi8KKwkJZm9yIChpID0gMDsgaSA8IHBvcnRzWzBdOyBpKyspIHsKKwkJCXUzMiBtc3RfcG9ydF9kID0gYmNtYV9lcm9tX2dldF9tc3RfcG9ydChidXMsICZlcm9tcHRyKTsKKwkJCWlmIChtc3RfcG9ydF9kIDwgMCkgeworCQkJCWVycj0gLUVJTFNFUTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCisJCS8qIGdldCAmIHBhcnNlIHNsYXZlIHBvcnRzICovCisJCWZvciAoaSA9IDA7IGkgPCBwb3J0c1sxXTsgaSsrKSB7CisJCQlmb3IgKGogPSAwOyA7IGorKykgeworCQkJCXRtcCA9IGJjbWFfZXJvbV9nZXRfYWRkcl9kZXNjKGJ1cywgJmVyb21wdHIsCisJCQkJCVNDQU5fQUREUl9UWVBFX1NMQVZFLCBpKTsKKwkJCQlpZiAodG1wIDwgMCkgeworCQkJCQkvKiBubyBtb3JlIGVudHJpZXMgZm9yIHBvcnQgX2lfICovCisJCQkJCS8qIHByX2RlYnVnKCJlcm9tOiBzbGF2ZSBwb3J0ICVkICIKKwkJCQkJICogImhhcyAlZCBkZXNjcmlwdG9yc1xuIiwgaSwgaik7ICovCisJCQkJCWJyZWFrOworCQkJCX0gZWxzZSB7CisJCQkJCWlmIChpID09IDAgJiYgaiA9PSAwKQorCQkJCQkJY29yZS0+YWRkciA9IHRtcDsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBnZXQgJiBwYXJzZSBtYXN0ZXIgd3JhcHBlcnMgKi8KKwkJZm9yIChpID0gMDsgaSA8IHdyYXBwZXJzWzBdOyBpKyspIHsKKwkJCWZvciAoaiA9IDA7IDsgaisrKSB7CisJCQkJdG1wID0gYmNtYV9lcm9tX2dldF9hZGRyX2Rlc2MoYnVzLCAmZXJvbXB0ciwKKwkJCQkJU0NBTl9BRERSX1RZUEVfTVdSQVAsIGkpOworCQkJCWlmICh0bXAgPCAwKSB7CisJCQkJCS8qIG5vIG1vcmUgZW50cmllcyBmb3IgcG9ydCBfaV8gKi8KKwkJCQkJLyogcHJfZGVidWcoImVyb206IG1hc3RlciB3cmFwcGVyICVkICIKKwkJCQkJICogImhhcyAlZCBkZXNjcmlwdG9yc1xuIiwgaSwgaik7ICovCisJCQkJCWJyZWFrOworCQkJCX0gZWxzZSB7CisJCQkJCWlmIChpID09IDAgJiYgaiA9PSAwKQorCQkJCQkJY29yZS0+d3JhcCA9IHRtcDsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBnZXQgJiBwYXJzZSBzbGF2ZSB3cmFwcGVycyAqLworCQlmb3IgKGkgPSAwOyBpIDwgd3JhcHBlcnNbMV07IGkrKykgeworCQkJdTggaGFjayA9IChwb3J0c1sxXSA9PSAxKSA/IDAgOiAxOworCQkJZm9yIChqID0gMDsgOyBqKyspIHsKKwkJCQl0bXAgPSBiY21hX2Vyb21fZ2V0X2FkZHJfZGVzYyhidXMsICZlcm9tcHRyLAorCQkJCQlTQ0FOX0FERFJfVFlQRV9TV1JBUCwgaSArIGhhY2spOworCQkJCWlmICh0bXAgPCAwKSB7CisJCQkJCS8qIG5vIG1vcmUgZW50cmllcyBmb3IgcG9ydCBfaV8gKi8KKwkJCQkJLyogcHJfZGVidWcoImVyb206IG1hc3RlciB3cmFwcGVyICVkICIKKwkJCQkJICogaGFzICVkIGRlc2NyaXB0b3JzXG4iLCBpLCBqKTsgKi8KKwkJCQkJYnJlYWs7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHdyYXBwZXJzWzBdID09IDAgJiYgIWkgJiYgIWopCisJCQkJCQljb3JlLT53cmFwID0gdG1wOworCQkJCX0KKwkJCX0KKwkJfQorCisJCXByX2luZm8oIkNvcmUgJWQgZm91bmQ6ICVzICIKKwkJCSIobWFudWYgMHglMDNYLCBpZCAweCUwM1gsIHJldiAweCUwMlgsIGNsYXNzIDB4JVgpXG4iLAorCQkJYnVzLT5ucl9jb3JlcywgYmNtYV9kZXZpY2VfbmFtZSgmY29yZS0+aWQpLAorCQkJY29yZS0+aWQubWFudWYsIGNvcmUtPmlkLmlkLCBjb3JlLT5pZC5yZXYsCisJCQljb3JlLT5pZC5jbGFzcyk7CisKKwkJY29yZS0+Y29yZV9pbmRleCA9IGJ1cy0+bnJfY29yZXMrKzsKKwkJbGlzdF9hZGQoJmNvcmUtPmxpc3QsICZidXMtPmNvcmVzKTsKKwkJY29udGludWU7CitvdXQ6CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JjbWEvc2Nhbi5oIGIvZHJpdmVycy9iY21hL3NjYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTNlNmE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9iY21hL3NjYW4uaApAQCAtMCwwICsxLDU2IEBACisjaWZuZGVmIEJDTUFfU0NBTl9IXworI2RlZmluZSBCQ01BX1NDQU5fSF8KKworI2RlZmluZSBCQ01BX0FERFJfQkFTRQkJMHgxODAwMDAwMAorI2RlZmluZSBCQ01BX1dSQVBfQkFTRQkJMHgxODEwMDAwMAorCisjZGVmaW5lIFNDQU5fRVJfVkFMSUQJCTB4MDAwMDAwMDEKKyNkZWZpbmUgU0NBTl9FUl9UQUdYCQkweDAwMDAwMDA2IC8qIHdlIGhhdmUgdG8gaWdub3JlIDB4OCBiaXQgd2hlbiBjaGVja2luZyB0YWcgZm9yIFNDQU5fRVJfVEFHX0FERFIgKi8KKyNkZWZpbmUgU0NBTl9FUl9UQUcJCTB4MDAwMDAwMEUKKyNkZWZpbmUgIFNDQU5fRVJfVEFHX0NJCQkweDAwMDAwMDAwCisjZGVmaW5lICBTQ0FOX0VSX1RBR19NUAkJMHgwMDAwMDAwMgorI2RlZmluZSAgU0NBTl9FUl9UQUdfQUREUgkweDAwMDAwMDA0CisjZGVmaW5lICBTQ0FOX0VSX1RBR19FTkQJMHgwMDAwMDAwRQorI2RlZmluZSBTQ0FOX0VSX0JBRAkJMHhGRkZGRkZGRgorCisjZGVmaW5lIFNDQU5fQ0lBX0NMQVNTCQkweDAwMDAwMEYwCisjZGVmaW5lIFNDQU5fQ0lBX0NMQVNTX1NISUZUCTQKKyNkZWZpbmUgU0NBTl9DSUFfSUQJCTB4MDAwRkZGMDAKKyNkZWZpbmUgU0NBTl9DSUFfSURfU0hJRlQJOAorI2RlZmluZSBTQ0FOX0NJQV9NQU5VRgkJMHhGRkYwMDAwMAorI2RlZmluZSBTQ0FOX0NJQV9NQU5VRl9TSElGVAkyMAorCisjZGVmaW5lIFNDQU5fQ0lCX05NUAkJMHgwMDAwMDFGMAorI2RlZmluZSBTQ0FOX0NJQl9OTVBfU0hJRlQJNAorI2RlZmluZSBTQ0FOX0NJQl9OU1AJCTB4MDAwMDNFMDAKKyNkZWZpbmUgU0NBTl9DSUJfTlNQX1NISUZUCTkKKyNkZWZpbmUgU0NBTl9DSUJfTk1XCQkweDAwMDdDMDAwCisjZGVmaW5lIFNDQU5fQ0lCX05NV19TSElGVAkxNAorI2RlZmluZSBTQ0FOX0NJQl9OU1cJCTB4MDBGODAwMDAKKyNkZWZpbmUgU0NBTl9DSUJfTlNXX1NISUZUCTE3CisjZGVmaW5lIFNDQU5fQ0lCX1JFVgkJMHhGRjAwMDAwMAorI2RlZmluZSBTQ0FOX0NJQl9SRVZfU0hJRlQJMjQKKworI2RlZmluZSBTQ0FOX0FERFJfQUczMgkJMHgwMDAwMDAwOAorI2RlZmluZSBTQ0FOX0FERFJfU1oJCTB4MDAwMDAwMzAKKyNkZWZpbmUgU0NBTl9BRERSX1NaX1NISUZUCTQKKyNkZWZpbmUgIFNDQU5fQUREUl9TWl80SwkweDAwMDAwMDAwCisjZGVmaW5lICBTQ0FOX0FERFJfU1pfOEsJMHgwMDAwMDAxMAorI2RlZmluZSAgU0NBTl9BRERSX1NaXzE2SwkweDAwMDAwMDIwCisjZGVmaW5lICBTQ0FOX0FERFJfU1pfU1pECTB4MDAwMDAwMzAKKyNkZWZpbmUgU0NBTl9BRERSX1RZUEUJCTB4MDAwMDAwQzAKKyNkZWZpbmUgIFNDQU5fQUREUl9UWVBFX1NMQVZFCTB4MDAwMDAwMDAKKyNkZWZpbmUgIFNDQU5fQUREUl9UWVBFX0JSSURHRQkweDAwMDAwMDQwCisjZGVmaW5lICBTQ0FOX0FERFJfVFlQRV9TV1JBUAkweDAwMDAwMDgwCisjZGVmaW5lICBTQ0FOX0FERFJfVFlQRV9NV1JBUAkweDAwMDAwMEMwCisjZGVmaW5lIFNDQU5fQUREUl9QT1JUCQkweDAwMDAwRjAwCisjZGVmaW5lIFNDQU5fQUREUl9QT1JUX1NISUZUCTgKKyNkZWZpbmUgU0NBTl9BRERSX0FERFIJCTB4RkZGRkYwMDAKKworI2RlZmluZSBTQ0FOX0FERFJfU1pfQkFTRQkweDAwMDAxMDAwCS8qIDRLQiAqLworCisjZGVmaW5lIFNDQU5fU0laRV9TWl9BTElHTgkweDAwMDAwRkZGCisjZGVmaW5lIFNDQU5fU0laRV9TWgkJMHhGRkZGRjAwMAorI2RlZmluZSBTQ0FOX1NJWkVfU0czMgkJMHgwMDAwMDAwOAorCisjZW5kaWYgLyogQkNNQV9TQ0FOX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jIGIvZHJpdmVycy9ibG9jay9EQUM5NjAuYwppbmRleCA4MDY2ZDA4Li5lMDg2ZmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jCisrKyBiL2RyaXZlcnMvYmxvY2svREFDOTYwLmMKQEAgLTI1NDcsNyArMjU0Nyw2IEBACiAJZGlzay0+bWFqb3IgPSBNYWpvck51bWJlcjsKIAlkaXNrLT5maXJzdF9taW5vciA9IG4gPDwgREFDOTYwX01heFBhcnRpdGlvbnNCaXRzOwogCWRpc2stPmZvcHMgPSAmREFDOTYwX0Jsb2NrRGV2aWNlT3BlcmF0aW9uczsKLQlkaXNrLT5ldmVudHMgPSBESVNLX0VWRU5UX01FRElBX0NIQU5HRTsKICAgIH0KICAgLyoKICAgICBJbmRpY2F0ZSB0aGUgQmxvY2sgRGV2aWNlIFJlZ2lzdHJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9hbWlmbG9wLmMgYi9kcml2ZXJzL2Jsb2NrL2FtaWZsb3AuYwppbmRleCA0NTZjMGNjLi44ZWJhODZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2FtaWZsb3AuYworKysgYi9kcml2ZXJzL2Jsb2NrL2FtaWZsb3AuYwpAQCAtMTczNiw3ICsxNzM2LDYgQEAKIAkJZGlzay0+bWFqb3IgPSBGTE9QUFlfTUFKT1I7CiAJCWRpc2stPmZpcnN0X21pbm9yID0gZHJpdmU7CiAJCWRpc2stPmZvcHMgPSAmZmxvcHB5X2ZvcHM7Ci0JCWRpc2stPmV2ZW50cyA9IERJU0tfRVZFTlRfTUVESUFfQ0hBTkdFOwogCQlzcHJpbnRmKGRpc2stPmRpc2tfbmFtZSwgImZkJWQiLCBkcml2ZSk7CiAJCWRpc2stPnByaXZhdGVfZGF0YSA9ICZ1bml0W2RyaXZlXTsKIAkJc2V0X2NhcGFjaXR5KGRpc2ssIDg4MCoyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYXRhZmxvcC5jIGIvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKaW5kZXggYzg3MWVhZS4uZWRlMTZjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKKysrIGIvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKQEAgLTE5NjQsNyArMTk2NCw2IEBACiAJCXVuaXRbaV0uZGlzay0+Zmlyc3RfbWlub3IgPSBpOwogCQlzcHJpbnRmKHVuaXRbaV0uZGlzay0+ZGlza19uYW1lLCAiZmQlZCIsIGkpOwogCQl1bml0W2ldLmRpc2stPmZvcHMgPSAmZmxvcHB5X2ZvcHM7Ci0JCXVuaXRbaV0uZGlzay0+ZXZlbnRzID0gRElTS19FVkVOVF9NRURJQV9DSEFOR0U7CiAJCXVuaXRbaV0uZGlzay0+cHJpdmF0ZV9kYXRhID0gJnVuaXRbaV07CiAJCXVuaXRbaV0uZGlzay0+cXVldWUgPSBibGtfaW5pdF9xdWV1ZShkb19mZF9yZXF1ZXN0LAogCQkJCQkmYXRhZmxvcF9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX2ludC5oIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfaW50LmgKaW5kZXggYjI2OTliYi4uZDg3MWIxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfaW50LmgKKysrIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfaW50LmgKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9nZW5oZC5oPgogI2luY2x1ZGUgPG5ldC90Y3AuaD4KICNpbmNsdWRlIDxsaW51eC9scnVfY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjaWZkZWYgX19DSEVDS0VSX18KICMgZGVmaW5lIF9fcHJvdGVjdGVkX2J5KHgpICAgICAgIF9fYXR0cmlidXRlX18oKHJlcXVpcmVfY29udGV4dCh4LDEsOTk5LCJyZHdyIikpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKaW5kZXggMzAxZDdhOS4uZGI4Zjg4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCkBAIC00MjA1LDcgKzQyMDUsNiBAQAogCQlkaXNrc1tkcl0tPm1ham9yID0gRkxPUFBZX01BSk9SOwogCQlkaXNrc1tkcl0tPmZpcnN0X21pbm9yID0gVE9NSU5PUihkcik7CiAJCWRpc2tzW2RyXS0+Zm9wcyA9ICZmbG9wcHlfZm9wczsKLQkJZGlza3NbZHJdLT5ldmVudHMgPSBESVNLX0VWRU5UX01FRElBX0NIQU5HRTsKIAkJc3ByaW50ZihkaXNrc1tkcl0tPmRpc2tfbmFtZSwgImZkJWQiLCBkcik7CiAKIAkJaW5pdF90aW1lcigmbW90b3Jfb2ZmX3RpbWVyW2RyXSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wY2QuYyBiL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BjZC5jCmluZGV4IDJmMmNjZjYuLjg2OTBlMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BjZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BjZC5jCkBAIC0zMjAsNyArMzIwLDYgQEAKIAkJZGlzay0+Zmlyc3RfbWlub3IgPSB1bml0OwogCQlzdHJjcHkoZGlzay0+ZGlza19uYW1lLCBjZC0+bmFtZSk7CS8qIHVtbS4uLiAqLwogCQlkaXNrLT5mb3BzID0gJnBjZF9iZG9wczsKLQkJZGlzay0+ZXZlbnRzID0gRElTS19FVkVOVF9NRURJQV9DSEFOR0U7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZC5jIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGQuYwppbmRleCAyMWRmZGI3Li44NjllNzY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BkLmMKQEAgLTgzNyw3ICs4MzcsNiBAQAogCXAtPmZvcHMgPSAmcGRfZm9wczsKIAlwLT5tYWpvciA9IG1ham9yOwogCXAtPmZpcnN0X21pbm9yID0gKGRpc2sgLSBwZCkgPDwgUERfQklUUzsKLQlwLT5ldmVudHMgPSBESVNLX0VWRU5UX01FRElBX0NIQU5HRTsKIAlkaXNrLT5nZCA9IHA7CiAJcC0+cHJpdmF0ZV9kYXRhID0gZGlzazsKIAlwLT5xdWV1ZSA9IHBkX3F1ZXVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGYuYyBiL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BmLmMKaW5kZXggN2FkZWIxZS4uZjIxYjUyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGYuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZi5jCkBAIC0yOTQsNyArMjk0LDYgQEAKIAkJZGlzay0+Zmlyc3RfbWlub3IgPSB1bml0OwogCQlzdHJjcHkoZGlzay0+ZGlza19uYW1lLCBwZi0+bmFtZSk7CiAJCWRpc2stPmZvcHMgPSAmcGZfZm9wczsKLQkJZGlzay0+ZXZlbnRzID0gRElTS19FVkVOVF9NRURJQV9DSEFOR0U7CiAJCWlmICghKCpkcml2ZXNbdW5pdF0pW0RfUFJUXSkKIAkJCXBmX2RyaXZlX2NvdW50Kys7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9yYmQuYyBiL2RyaXZlcnMvYmxvY2svcmJkLmMKaW5kZXggMTZkYzM2NC4uOTcxMmZhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9yYmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3JiZC5jCkBAIC05Miw2ICs5Miw4IEBACiAJc3RydWN0IGxpc3RfaGVhZAlub2RlOwogfTsKIAorc3RydWN0IHJiZF9yZXFfY29sbDsKKwogLyoKICAqIGEgc2luZ2xlIGlvIHJlcXVlc3QKICAqLwpAQCAtMTAwLDYgKzEwMiwyNCBAQAogCXN0cnVjdCBiaW8JCSpiaW87CQkvKiBjbG9uZWQgYmlvICovCiAJc3RydWN0IHBhZ2UJCSoqcGFnZXM7CS8qIGxpc3Qgb2YgdXNlZCBwYWdlcyAqLwogCXU2NAkJCWxlbjsKKwlpbnQJCQljb2xsX2luZGV4OworCXN0cnVjdCByYmRfcmVxX2NvbGwJKmNvbGw7Cit9OworCitzdHJ1Y3QgcmJkX3JlcV9zdGF0dXMgeworCWludCBkb25lOworCWludCByYzsKKwl1NjQgYnl0ZXM7Cit9OworCisvKgorICogYSBjb2xsZWN0aW9uIG9mIHJlcXVlc3RzCisgKi8KK3N0cnVjdCByYmRfcmVxX2NvbGwgeworCWludAkJCXRvdGFsOworCWludAkJCW51bV9kb25lOworCXN0cnVjdCBrcmVmCQlrcmVmOworCXN0cnVjdCByYmRfcmVxX3N0YXR1cwlzdGF0dXNbMF07CiB9OwogCiBzdHJ1Y3QgcmJkX3NuYXAgewpAQCAtNDE2LDYgKzQzNiwxNyBAQAogCXJiZF9kZXYtPmNsaWVudCA9IE5VTEw7CiB9CiAKKy8qCisgKiBEZXN0cm95IHJlcXVlc3RzIGNvbGxlY3Rpb24KKyAqLworc3RhdGljIHZvaWQgcmJkX2NvbGxfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgcmJkX3JlcV9jb2xsICpjb2xsID0KKwkJY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByYmRfcmVxX2NvbGwsIGtyZWYpOworCisJZG91dCgicmJkX2NvbGxfcmVsZWFzZSAlcFxuIiwgY29sbCk7CisJa2ZyZWUoY29sbCk7Cit9CiAKIC8qCiAgKiBDcmVhdGUgYSBuZXcgaGVhZGVyIHN0cnVjdHVyZSwgdHJhbnNsYXRlIGhlYWRlciBmb3JtYXQgZnJvbSB0aGUgb24tZGlzawpAQCAtNTkwLDYgKzYyMSwxNCBAQAogCXJldHVybiBsZW47CiB9CiAKK3N0YXRpYyBpbnQgcmJkX2dldF9udW1fc2VnbWVudHMoc3RydWN0IHJiZF9pbWFnZV9oZWFkZXIgKmhlYWRlciwKKwkJCQl1NjQgb2ZzLCB1NjQgbGVuKQoreworCXU2NCBzdGFydF9zZWcgPSBvZnMgPj4gaGVhZGVyLT5vYmpfb3JkZXI7CisJdTY0IGVuZF9zZWcgPSAob2ZzICsgbGVuIC0gMSkgPj4gaGVhZGVyLT5vYmpfb3JkZXI7CisJcmV0dXJuIGVuZF9zZWcgLSBzdGFydF9zZWcgKyAxOworfQorCiAvKgogICogYmlvIGhlbHBlcnMKICAqLwpAQCAtNzM1LDYgKzc3NCw1MCBAQAogCWtmcmVlKG9wcyk7CiB9CiAKK3N0YXRpYyB2b2lkIHJiZF9jb2xsX2VuZF9yZXFfaW5kZXgoc3RydWN0IHJlcXVlc3QgKnJxLAorCQkJCSAgIHN0cnVjdCByYmRfcmVxX2NvbGwgKmNvbGwsCisJCQkJICAgaW50IGluZGV4LAorCQkJCSAgIGludCByZXQsIHU2NCBsZW4pCit7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnE7CisJaW50IG1pbiwgbWF4LCBpOworCisJZG91dCgicmJkX2NvbGxfZW5kX3JlcV9pbmRleCAlcCBpbmRleCAlZCByZXQgJWQgbGVuICVsbGRcbiIsCisJICAgICBjb2xsLCBpbmRleCwgcmV0LCBsZW4pOworCisJaWYgKCFycSkKKwkJcmV0dXJuOworCisJaWYgKCFjb2xsKSB7CisJCWJsa19lbmRfcmVxdWVzdChycSwgcmV0LCBsZW4pOworCQlyZXR1cm47CisJfQorCisJcSA9IHJxLT5xOworCisJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKKwljb2xsLT5zdGF0dXNbaW5kZXhdLmRvbmUgPSAxOworCWNvbGwtPnN0YXR1c1tpbmRleF0ucmMgPSByZXQ7CisJY29sbC0+c3RhdHVzW2luZGV4XS5ieXRlcyA9IGxlbjsKKwltYXggPSBtaW4gPSBjb2xsLT5udW1fZG9uZTsKKwl3aGlsZSAobWF4IDwgY29sbC0+dG90YWwgJiYgY29sbC0+c3RhdHVzW21heF0uZG9uZSkKKwkJbWF4Kys7CisKKwlmb3IgKGkgPSBtaW47IGk8bWF4OyBpKyspIHsKKwkJX19ibGtfZW5kX3JlcXVlc3QocnEsIGNvbGwtPnN0YXR1c1tpXS5yYywKKwkJCQkgIGNvbGwtPnN0YXR1c1tpXS5ieXRlcyk7CisJCWNvbGwtPm51bV9kb25lKys7CisJCWtyZWZfcHV0KCZjb2xsLT5rcmVmLCByYmRfY29sbF9yZWxlYXNlKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOworfQorCitzdGF0aWMgdm9pZCByYmRfY29sbF9lbmRfcmVxKHN0cnVjdCByYmRfcmVxdWVzdCAqcmVxLAorCQkJICAgICBpbnQgcmV0LCB1NjQgbGVuKQoreworCXJiZF9jb2xsX2VuZF9yZXFfaW5kZXgocmVxLT5ycSwgcmVxLT5jb2xsLCByZXEtPmNvbGxfaW5kZXgsIHJldCwgbGVuKTsKK30KKwogLyoKICAqIFNlbmQgY2VwaCBvc2QgcmVxdWVzdAogICovCkBAIC03NDksNiArODMyLDggQEAKIAkJCSAgaW50IGZsYWdzLAogCQkJICBzdHJ1Y3QgY2VwaF9vc2RfcmVxX29wICpvcHMsCiAJCQkgIGludCBudW1fcmVwbHksCisJCQkgIHN0cnVjdCByYmRfcmVxX2NvbGwgKmNvbGwsCisJCQkgIGludCBjb2xsX2luZGV4LAogCQkJICB2b2lkICgqcmJkX2NiKShzdHJ1Y3QgY2VwaF9vc2RfcmVxdWVzdCAqcmVxLAogCQkJCQkgc3RydWN0IGNlcGhfbXNnICptc2cpLAogCQkJICBzdHJ1Y3QgY2VwaF9vc2RfcmVxdWVzdCAqKmxpbmdlcl9yZXEsCkBAIC03NjMsMTIgKzg0OCwyMCBAQAogCXN0cnVjdCBjZXBoX29zZF9yZXF1ZXN0X2hlYWQgKnJlcWhlYWQ7CiAJc3RydWN0IHJiZF9pbWFnZV9oZWFkZXIgKmhlYWRlciA9ICZkZXYtPmhlYWRlcjsKIAotCXJldCA9IC1FTk9NRU07CiAJcmVxX2RhdGEgPSBremFsbG9jKHNpemVvZigqcmVxX2RhdGEpLCBHRlBfTk9JTyk7Ci0JaWYgKCFyZXFfZGF0YSkKLQkJZ290byBkb25lOworCWlmICghcmVxX2RhdGEpIHsKKwkJaWYgKGNvbGwpCisJCQlyYmRfY29sbF9lbmRfcmVxX2luZGV4KHJxLCBjb2xsLCBjb2xsX2luZGV4LAorCQkJCQkgICAgICAgLUVOT01FTSwgbGVuKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCi0JZG91dCgicmJkX2RvX3JlcXVlc3QgbGVuPSVsbGQgb2ZzPSVsbGRcbiIsIGxlbiwgb2ZzKTsKKwlpZiAoY29sbCkgeworCQlyZXFfZGF0YS0+Y29sbCA9IGNvbGw7CisJCXJlcV9kYXRhLT5jb2xsX2luZGV4ID0gY29sbF9pbmRleDsKKwl9CisKKwlkb3V0KCJyYmRfZG9fcmVxdWVzdCBvYmo9JXMgb2ZzPSVsbGQgbGVuPSVsbGRcbiIsIG9iaiwgbGVuLCBvZnMpOwogCiAJZG93bl9yZWFkKCZoZWFkZXItPnNuYXBfcndzZW0pOwogCkBAIC03NzcsOSArODcwLDkgQEAKIAkJCQkgICAgICBvcHMsCiAJCQkJICAgICAgZmFsc2UsCiAJCQkJICAgICAgR0ZQX05PSU8sIHBhZ2VzLCBiaW8pOwotCWlmIChJU19FUlIocmVxKSkgeworCWlmICghcmVxKSB7CiAJCXVwX3JlYWQoJmhlYWRlci0+c25hcF9yd3NlbSk7Ci0JCXJldCA9IFBUUl9FUlIocmVxKTsKKwkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBkb25lX3BhZ2VzOwogCX0KIApAQCAtODI4LDcgKzkyMSw4IEBACiAJCXJldCA9IGNlcGhfb3NkY193YWl0X3JlcXVlc3QoJmRldi0+Y2xpZW50LT5vc2RjLCByZXEpOwogCQlpZiAodmVyKQogCQkJKnZlciA9IGxlNjRfdG9fY3B1KHJlcS0+cl9yZWFzc2VydF92ZXJzaW9uLnZlcnNpb24pOwotCQlkb3V0KCJyZWFzc2VydF92ZXI9JWxsZFxuIiwgbGU2NF90b19jcHUocmVxLT5yX3JlYXNzZXJ0X3ZlcnNpb24udmVyc2lvbikpOworCQlkb3V0KCJyZWFzc2VydF92ZXI9JWxsZFxuIiwKKwkJICAgICBsZTY0X3RvX2NwdShyZXEtPnJfcmVhc3NlcnRfdmVyc2lvbi52ZXJzaW9uKSk7CiAJCWNlcGhfb3NkY19wdXRfcmVxdWVzdChyZXEpOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtODM3LDEwICs5MzEsOCBAQAogCWJpb19jaGFpbl9wdXQocmVxX2RhdGEtPmJpbyk7CiAJY2VwaF9vc2RjX3B1dF9yZXF1ZXN0KHJlcSk7CiBkb25lX3BhZ2VzOgorCXJiZF9jb2xsX2VuZF9yZXEocmVxX2RhdGEsIHJldCwgbGVuKTsKIAlrZnJlZShyZXFfZGF0YSk7Ci1kb25lOgotCWlmIChycSkKLQkJYmxrX2VuZF9yZXF1ZXN0KHJxLCByZXQsIGxlbik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtODc0LDcgKzk2Niw3IEBACiAJCWJ5dGVzID0gcmVxX2RhdGEtPmxlbjsKIAl9CiAKLQlibGtfZW5kX3JlcXVlc3QocmVxX2RhdGEtPnJxLCByYywgYnl0ZXMpOworCXJiZF9jb2xsX2VuZF9yZXEocmVxX2RhdGEsIHJjLCBieXRlcyk7CiAKIAlpZiAocmVxX2RhdGEtPmJpbykKIAkJYmlvX2NoYWluX3B1dChyZXFfZGF0YS0+YmlvKTsKQEAgLTkzNCw2ICsxMDI2LDcgQEAKIAkJCSAgZmxhZ3MsCiAJCQkgIG9wcywKIAkJCSAgMiwKKwkJCSAgTlVMTCwgMCwKIAkJCSAgTlVMTCwKIAkJCSAgbGluZ2VyX3JlcSwgdmVyKTsKIAlpZiAocmV0IDwgMCkKQEAgLTk1OSw3ICsxMDUyLDkgQEAKIAkJICAgICB1NjQgc25hcGlkLAogCQkgICAgIGludCBvcGNvZGUsIGludCBmbGFncywgaW50IG51bV9yZXBseSwKIAkJICAgICB1NjQgb2ZzLCB1NjQgbGVuLAotCQkgICAgIHN0cnVjdCBiaW8gKmJpbykKKwkJICAgICBzdHJ1Y3QgYmlvICpiaW8sCisJCSAgICAgc3RydWN0IHJiZF9yZXFfY29sbCAqY29sbCwKKwkJICAgICBpbnQgY29sbF9pbmRleCkKIHsKIAljaGFyICpzZWdfbmFtZTsKIAl1NjQgc2VnX29mczsKQEAgLTk5NSw3ICsxMDkwLDEwIEBACiAJCQkgICAgIGZsYWdzLAogCQkJICAgICBvcHMsCiAJCQkgICAgIG51bV9yZXBseSwKKwkJCSAgICAgY29sbCwgY29sbF9pbmRleCwKIAkJCSAgICAgcmJkX3JlcV9jYiwgMCwgTlVMTCk7CisKKwlyYmRfZGVzdHJveV9vcHMob3BzKTsKIGRvbmU6CiAJa2ZyZWUoc2VnX25hbWUpOwogCXJldHVybiByZXQ7CkBAIC0xMDA4LDEzICsxMTA2LDE1IEBACiAJCQkgc3RydWN0IHJiZF9kZXZpY2UgKnJiZF9kZXYsCiAJCQkgc3RydWN0IGNlcGhfc25hcF9jb250ZXh0ICpzbmFwYywKIAkJCSB1NjQgb2ZzLCB1NjQgbGVuLAotCQkJIHN0cnVjdCBiaW8gKmJpbykKKwkJCSBzdHJ1Y3QgYmlvICpiaW8sCisJCQkgc3RydWN0IHJiZF9yZXFfY29sbCAqY29sbCwKKwkJCSBpbnQgY29sbF9pbmRleCkKIHsKIAlyZXR1cm4gcmJkX2RvX29wKHJxLCByYmRfZGV2LCBzbmFwYywgQ0VQSF9OT1NOQVAsCiAJCQkgQ0VQSF9PU0RfT1BfV1JJVEUsCiAJCQkgQ0VQSF9PU0RfRkxBR19XUklURSB8IENFUEhfT1NEX0ZMQUdfT05ESVNLLAogCQkJIDIsCi0JCQkgb2ZzLCBsZW4sIGJpbyk7CisJCQkgb2ZzLCBsZW4sIGJpbywgY29sbCwgY29sbF9pbmRleCk7CiB9CiAKIC8qCkBAIC0xMDI0LDE0ICsxMTI0LDE2IEBACiAJCQkgc3RydWN0IHJiZF9kZXZpY2UgKnJiZF9kZXYsCiAJCQkgdTY0IHNuYXBpZCwKIAkJCSB1NjQgb2ZzLCB1NjQgbGVuLAotCQkJIHN0cnVjdCBiaW8gKmJpbykKKwkJCSBzdHJ1Y3QgYmlvICpiaW8sCisJCQkgc3RydWN0IHJiZF9yZXFfY29sbCAqY29sbCwKKwkJCSBpbnQgY29sbF9pbmRleCkKIHsKIAlyZXR1cm4gcmJkX2RvX29wKHJxLCByYmRfZGV2LCBOVUxMLAogCQkJIChzbmFwaWQgPyBzbmFwaWQgOiBDRVBIX05PU05BUCksCiAJCQkgQ0VQSF9PU0RfT1BfUkVBRCwKIAkJCSBDRVBIX09TRF9GTEFHX1JFQUQsCiAJCQkgMiwKLQkJCSBvZnMsIGxlbiwgYmlvKTsKKwkJCSBvZnMsIGxlbiwgYmlvLCBjb2xsLCBjb2xsX2luZGV4KTsKIH0KIAogLyoKQEAgLTEwNjMsNyArMTE2NSw5IEBACiB7CiAJc3RydWN0IGNlcGhfb3NkX3JlcV9vcCAqb3BzOwogCXN0cnVjdCBwYWdlICoqcGFnZXMgPSBOVUxMOwotCWludCByZXQgPSByYmRfY3JlYXRlX3J3X29wcygmb3BzLCAxLCBDRVBIX09TRF9PUF9OT1RJRllfQUNLLCAwKTsKKwlpbnQgcmV0OworCisJcmV0ID0gcmJkX2NyZWF0ZV9yd19vcHMoJm9wcywgMSwgQ0VQSF9PU0RfT1BfTk9USUZZX0FDSywgMCk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTEwNzcsNiArMTE4MSw3IEBACiAJCQkgIENFUEhfT1NEX0ZMQUdfUkVBRCwKIAkJCSAgb3BzLAogCQkJICAxLAorCQkJICBOVUxMLCAwLAogCQkJICByYmRfc2ltcGxlX3JlcV9jYiwgMCwgTlVMTCk7CiAKIAlyYmRfZGVzdHJveV9vcHMob3BzKTsKQEAgLTEyNzQsNiArMTM3OSwyMCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgcmJkX3JlcV9jb2xsICpyYmRfYWxsb2NfY29sbChpbnQgbnVtX3JlcXMpCit7CisJc3RydWN0IHJiZF9yZXFfY29sbCAqY29sbCA9CisJCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgcmJkX3JlcV9jb2xsKSArCisJCQkgICAgICAgIHNpemVvZihzdHJ1Y3QgcmJkX3JlcV9zdGF0dXMpICogbnVtX3JlcXMsCisJCQkJR0ZQX0FUT01JQyk7CisKKwlpZiAoIWNvbGwpCisJCXJldHVybiBOVUxMOworCWNvbGwtPnRvdGFsID0gbnVtX3JlcXM7CisJa3JlZl9pbml0KCZjb2xsLT5rcmVmKTsKKwlyZXR1cm4gY29sbDsKK30KKwogLyoKICAqIGJsb2NrIGRldmljZSBxdWV1ZSBjYWxsYmFjawogICovCkBAIC0xMjkxLDYgKzE0MTAsOCBAQAogCQlib29sIGRvX3dyaXRlOwogCQlpbnQgc2l6ZSwgb3Bfc2l6ZSA9IDA7CiAJCXU2NCBvZnM7CisJCWludCBudW1fc2VncywgY3VyX3NlZyA9IDA7CisJCXN0cnVjdCByYmRfcmVxX2NvbGwgKmNvbGw7CiAKIAkJLyogcGVlayBhdCByZXF1ZXN0IGZyb20gYmxvY2sgbGF5ZXIgKi8KIAkJaWYgKCFycSkKQEAgLTEzMjEsNiArMTQ0MiwxNCBAQAogCQkgICAgIGRvX3dyaXRlID8gIndyaXRlIiA6ICJyZWFkIiwKIAkJICAgICBzaXplLCBibGtfcnFfcG9zKHJxKSAqIDUxMlVMTCk7CiAKKwkJbnVtX3NlZ3MgPSByYmRfZ2V0X251bV9zZWdtZW50cygmcmJkX2Rldi0+aGVhZGVyLCBvZnMsIHNpemUpOworCQljb2xsID0gcmJkX2FsbG9jX2NvbGwobnVtX3NlZ3MpOworCQlpZiAoIWNvbGwpIHsKKwkJCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7CisJCQlfX2Jsa19lbmRfcmVxdWVzdF9hbGwocnEsIC1FTk9NRU0pOworCQkJZ290byBuZXh0OworCQl9CisKIAkJZG8gewogCQkJLyogYSBiaW8gY2xvbmUgdG8gYmUgcGFzc2VkIGRvd24gdG8gT1NEIHJlcSAqLwogCQkJZG91dCgicnEtPmJpby0+YmlfdmNudD0lZFxuIiwgcnEtPmJpby0+YmlfdmNudCk7CkBAIC0xMzI4LDM1ICsxNDU3LDQxIEBACiAJCQkJCQkgIHJiZF9kZXYtPmhlYWRlci5ibG9ja19uYW1lLAogCQkJCQkJICBvZnMsIHNpemUsCiAJCQkJCQkgIE5VTEwsIE5VTEwpOworCQkJa3JlZl9nZXQoJmNvbGwtPmtyZWYpOwogCQkJYmlvID0gYmlvX2NoYWluX2Nsb25lKCZycV9iaW8sICZuZXh0X2JpbywgJmJwLAogCQkJCQkgICAgICBvcF9zaXplLCBHRlBfQVRPTUlDKTsKIAkJCWlmICghYmlvKSB7Ci0JCQkJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKLQkJCQlfX2Jsa19lbmRfcmVxdWVzdF9hbGwocnEsIC1FTk9NRU0pOwotCQkJCWdvdG8gbmV4dDsKKwkJCQlyYmRfY29sbF9lbmRfcmVxX2luZGV4KHJxLCBjb2xsLCBjdXJfc2VnLAorCQkJCQkJICAgICAgIC1FTk9NRU0sIG9wX3NpemUpOworCQkJCWdvdG8gbmV4dF9zZWc7CiAJCQl9CiAKKwogCQkJLyogaW5pdCBPU0QgY29tbWFuZDogd3JpdGUgb3IgcmVhZCAqLwogCQkJaWYgKGRvX3dyaXRlKQogCQkJCXJiZF9yZXFfd3JpdGUocnEsIHJiZF9kZXYsCiAJCQkJCSAgICAgIHJiZF9kZXYtPmhlYWRlci5zbmFwYywKIAkJCQkJICAgICAgb2ZzLAotCQkJCQkgICAgICBvcF9zaXplLCBiaW8pOworCQkJCQkgICAgICBvcF9zaXplLCBiaW8sCisJCQkJCSAgICAgIGNvbGwsIGN1cl9zZWcpOwogCQkJZWxzZQogCQkJCXJiZF9yZXFfcmVhZChycSwgcmJkX2RldiwKIAkJCQkJICAgICBjdXJfc25hcF9pZChyYmRfZGV2KSwKIAkJCQkJICAgICBvZnMsCi0JCQkJCSAgICAgb3Bfc2l6ZSwgYmlvKTsKKwkJCQkJICAgICBvcF9zaXplLCBiaW8sCisJCQkJCSAgICAgY29sbCwgY3VyX3NlZyk7CiAKK25leHRfc2VnOgogCQkJc2l6ZSAtPSBvcF9zaXplOwogCQkJb2ZzICs9IG9wX3NpemU7CiAKKwkJCWN1cl9zZWcrKzsKIAkJCXJxX2JpbyA9IG5leHRfYmlvOwogCQl9IHdoaWxlIChzaXplID4gMCk7CisJCWtyZWZfcHV0KCZjb2xsLT5rcmVmLCByYmRfY29sbF9yZWxlYXNlKTsKIAogCQlpZiAoYnApCiAJCQliaW9fcGFpcl9yZWxlYXNlKGJwKTsKLQogCQlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogbmV4dDoKIAkJcnEgPSBibGtfZmV0Y2hfcmVxdWVzdChxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svc3dpbS5jIGIvZHJpdmVycy9ibG9jay9zd2ltLmMKaW5kZXggMjRhNDgyZi4uZmQ1YWRjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9zd2ltLmMKKysrIGIvZHJpdmVycy9ibG9jay9zd2ltLmMKQEAgLTg1OCw3ICs4NTgsNiBAQAogCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2stPmZpcnN0X21pbm9yID0gZHJpdmU7CiAJCXNwcmludGYoc3dkLT51bml0W2RyaXZlXS5kaXNrLT5kaXNrX25hbWUsICJmZCVkIiwgZHJpdmUpOwogCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2stPmZvcHMgPSAmZmxvcHB5X2ZvcHM7Ci0JCXN3ZC0+dW5pdFtkcml2ZV0uZGlzay0+ZXZlbnRzID0gRElTS19FVkVOVF9NRURJQV9DSEFOR0U7CiAJCXN3ZC0+dW5pdFtkcml2ZV0uZGlzay0+cHJpdmF0ZV9kYXRhID0gJnN3ZC0+dW5pdFtkcml2ZV07CiAJCXN3ZC0+dW5pdFtkcml2ZV0uZGlzay0+cXVldWUgPSBzd2QtPnF1ZXVlOwogCQlzZXRfY2FwYWNpdHkoc3dkLT51bml0W2RyaXZlXS5kaXNrLCAyODgwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svc3dpbTMuYyBiL2RyaXZlcnMvYmxvY2svc3dpbTMuYwppbmRleCA0YzEwZjU2Li43NzNiZmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3N3aW0zLmMKKysrIGIvZHJpdmVycy9ibG9jay9zd2ltMy5jCkBAIC0xMTYzLDcgKzExNjMsNiBAQAogCWRpc2stPm1ham9yID0gRkxPUFBZX01BSk9SOwogCWRpc2stPmZpcnN0X21pbm9yID0gaTsKIAlkaXNrLT5mb3BzID0gJmZsb3BweV9mb3BzOwotCWRpc2stPmV2ZW50cyA9IERJU0tfRVZFTlRfTUVESUFfQ0hBTkdFOwogCWRpc2stPnByaXZhdGVfZGF0YSA9ICZmbG9wcHlfc3RhdGVzW2ldOwogCWRpc2stPnF1ZXVlID0gc3dpbTNfcXVldWU7CiAJZGlzay0+ZmxhZ3MgfD0gR0VOSERfRkxfUkVNT1ZBQkxFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91Yi5jIGIvZHJpdmVycy9ibG9jay91Yi5jCmluZGV4IDY4Yjk0MzAuLjBlMzc2ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdWIuYworKysgYi9kcml2ZXJzL2Jsb2NrL3ViLmMKQEAgLTIzMzQsNyArMjMzNCw2IEBACiAJZGlzay0+bWFqb3IgPSBVQl9NQUpPUjsKIAlkaXNrLT5maXJzdF9taW5vciA9IGx1bi0+aWQgKiBVQl9QQVJUU19QRVJfTFVOOwogCWRpc2stPmZvcHMgPSAmdWJfYmRfZm9wczsKLQlkaXNrLT5ldmVudHMgPSBESVNLX0VWRU5UX01FRElBX0NIQU5HRTsKIAlkaXNrLT5wcml2YXRlX2RhdGEgPSBsdW47CiAJZGlzay0+ZHJpdmVyZnNfZGV2ID0gJnNjLT5pbnRmLT5kZXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2sveHN5c2FjZS5jIGIvZHJpdmVycy9ibG9jay94c3lzYWNlLmMKaW5kZXggNjQ1ZmY3Ni4uNmM3ZmQ3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay94c3lzYWNlLmMKKysrIGIvZHJpdmVycy9ibG9jay94c3lzYWNlLmMKQEAgLTEwMDUsNyArMTAwNSw2IEBACiAJYWNlLT5nZC0+bWFqb3IgPSBhY2VfbWFqb3I7CiAJYWNlLT5nZC0+Zmlyc3RfbWlub3IgPSBhY2UtPmlkICogQUNFX05VTV9NSU5PUlM7CiAJYWNlLT5nZC0+Zm9wcyA9ICZhY2VfZm9wczsKLQlhY2UtPmdkLT5ldmVudHMgPSBESVNLX0VWRU5UX01FRElBX0NIQU5HRTsKIAlhY2UtPmdkLT5xdWV1ZSA9IGFjZS0+cXVldWU7CiAJYWNlLT5nZC0+cHJpdmF0ZV9kYXRhID0gYWNlOwogCXNucHJpbnRmKGFjZS0+Z2QtPmRpc2tfbmFtZSwgMzIsICJ4cyVjIiwgYWNlLT5pZCArICdhJyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnIGIvZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZwppbmRleCA4ZTBkZTlhLi4xMWI0MWZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWcKQEAgLTE4OCw3ICsxODgsNyBAQAogCSAgVGhlIGNvcmUgZHJpdmVyIHRvIHN1cHBvcnQgTWFydmVsbCBCbHVldG9vdGggZGV2aWNlcy4KIAogCSAgVGhpcyBkcml2ZXIgaXMgcmVxdWlyZWQgaWYgeW91IHdhbnQgdG8gc3VwcG9ydAotCSAgTWFydmVsbCBCbHVldG9vdGggZGV2aWNlcywgc3VjaCBhcyA4Njg4LgorCSAgTWFydmVsbCBCbHVldG9vdGggZGV2aWNlcywgc3VjaCBhcyA4Njg4Lzg3ODcuCiAKIAkgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBNYXJ2ZWxsIEJsdWV0b290aCBkcml2ZXIKIAkgIGludG8gdGhlIGtlcm5lbCBvciBzYXkgTSB0byBjb21waWxlIGl0IGFzIG1vZHVsZS4KQEAgLTIwMSw3ICsyMDEsNyBAQAogCSAgVGhlIGRyaXZlciBmb3IgTWFydmVsbCBCbHVldG9vdGggY2hpcHNldHMgd2l0aCBTRElPIGludGVyZmFjZS4KIAogCSAgVGhpcyBkcml2ZXIgaXMgcmVxdWlyZWQgaWYgeW91IHdhbnQgdG8gdXNlIE1hcnZlbGwgQmx1ZXRvb3RoCi0JICBkZXZpY2VzIHdpdGggU0RJTyBpbnRlcmZhY2UuIEN1cnJlbnRseSBvbmx5IFNEODY4OCBjaGlwc2V0IGlzCisJICBkZXZpY2VzIHdpdGggU0RJTyBpbnRlcmZhY2UuIEN1cnJlbnRseSBTRDg2ODgvU0Q4Nzg3IGNoaXBzZXRzIGFyZQogCSAgc3VwcG9ydGVkLgogCiAJICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgc3VwcG9ydCBmb3IgTWFydmVsbCBCVC1vdmVyLVNESU8gZHJpdmVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9hdGgzay5jIGIvZHJpdmVycy9ibHVldG9vdGgvYXRoM2suYwppbmRleCA1NTc3ZWQ2Li42YmFjZWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9hdGgzay5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2F0aDNrLmMKQEAgLTYyLDYgKzYyLDcgQEAKIAogCS8qIEF0aGVyb3MgQVIzMDExIHdpdGggc2ZsYXNoIGZpcm13YXJlKi8KIAl7IFVTQl9ERVZJQ0UoMHgwQ0YzLCAweDMwMDIpIH0sCisJeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzMzA0KSB9LAogCiAJLyogQXRoZXJvcyBBUjkyODUgTWFsYmVjIHdpdGggc2ZsYXNoIGZpcm13YXJlICovCiAJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgzMTFEKSB9LApAQCAtMTM4LDkgKzEzOSw2IEBACiAJCWNvdW50IC09IHNpemU7CiAJfQogCi0Ja2ZyZWUoc2VuZF9idWYpOwotCXJldHVybiAwOwotCiBlcnJvcjoKIAlrZnJlZShzZW5kX2J1Zik7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9zZGlvLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfc2Rpby5jCmluZGV4IGRjYzJhNmUuLjdmNTIxZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9zZGlvLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX3NkaW8uYwpAQCAtNDksMTUgKzQ5LDU5IEBACiBzdGF0aWMgdTggdXNlcl9ybW1vZDsKIHN0YXRpYyB1OCBzZGlvX2lyZWc7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRtcnZsX3NkaW9fY2FyZF9yZWcgYnRtcnZsX3JlZ184Njg4ID0geworCS5jZmcgPSAweDAzLAorCS5ob3N0X2ludF9tYXNrID0gMHgwNCwKKwkuaG9zdF9pbnRzdGF0dXMgPSAweDA1LAorCS5jYXJkX3N0YXR1cyA9IDB4MjAsCisJLnNxX3JlYWRfYmFzZV9hZGRyX2EwID0gMHgxMCwKKwkuc3FfcmVhZF9iYXNlX2FkZHJfYTEgPSAweDExLAorCS5jYXJkX2Z3X3N0YXR1czAgPSAweDQwLAorCS5jYXJkX2Z3X3N0YXR1czEgPSAweDQxLAorCS5jYXJkX3J4X2xlbiA9IDB4NDIsCisJLmNhcmRfcnhfdW5pdCA9IDB4NDMsCisJLmlvX3BvcnRfMCA9IDB4MDAsCisJLmlvX3BvcnRfMSA9IDB4MDEsCisJLmlvX3BvcnRfMiA9IDB4MDIsCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBidG1ydmxfc2Rpb19jYXJkX3JlZyBidG1ydmxfcmVnXzg3ODcgPSB7CisJLmNmZyA9IDB4MDAsCisJLmhvc3RfaW50X21hc2sgPSAweDAyLAorCS5ob3N0X2ludHN0YXR1cyA9IDB4MDMsCisJLmNhcmRfc3RhdHVzID0gMHgzMCwKKwkuc3FfcmVhZF9iYXNlX2FkZHJfYTAgPSAweDQwLAorCS5zcV9yZWFkX2Jhc2VfYWRkcl9hMSA9IDB4NDEsCisJLmNhcmRfcmV2aXNpb24gPSAweDVjLAorCS5jYXJkX2Z3X3N0YXR1czAgPSAweDYwLAorCS5jYXJkX2Z3X3N0YXR1czEgPSAweDYxLAorCS5jYXJkX3J4X2xlbiA9IDB4NjIsCisJLmNhcmRfcnhfdW5pdCA9IDB4NjMsCisJLmlvX3BvcnRfMCA9IDB4NzgsCisJLmlvX3BvcnRfMSA9IDB4NzksCisJLmlvX3BvcnRfMiA9IDB4N2EsCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGJ0bXJ2bF9zZGlvX2RldmljZSBidG1ydmxfc2Rpb19zZDY4ODggPSB7CiAJLmhlbHBlcgkJPSAic2Q4Njg4X2hlbHBlci5iaW4iLAogCS5maXJtd2FyZQk9ICJzZDg2ODguYmluIiwKKwkucmVnCQk9ICZidG1ydmxfcmVnXzg2ODgsCisJLnNkX2Jsa3N6X2Z3X2RsCT0gNjQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGJ0bXJ2bF9zZGlvX2RldmljZSBidG1ydmxfc2Rpb19zZDg3ODcgPSB7CisJLmhlbHBlcgkJPSBOVUxMLAorCS5maXJtd2FyZQk9ICJtcnZsL3NkODc4N191YXBzdGEuYmluIiwKKwkucmVnCQk9ICZidG1ydmxfcmVnXzg3ODcsCisJLnNkX2Jsa3N6X2Z3X2RsCT0gMjU2LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCBidG1ydmxfc2Rpb19pZHNbXSA9IHsKIAkvKiBNYXJ2ZWxsIFNEODY4OCBCbHVldG9vdGggZGV2aWNlICovCiAJeyBTRElPX0RFVklDRShTRElPX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDkxMDUpLAogCQkJLmRyaXZlcl9kYXRhID0gKHVuc2lnbmVkIGxvbmcpICZidG1ydmxfc2Rpb19zZDY4ODggfSwKKwkvKiBNYXJ2ZWxsIFNEODc4NyBCbHVldG9vdGggZGV2aWNlICovCisJeyBTRElPX0RFVklDRShTRElPX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDkxMUEpLAorCQkJLmRyaXZlcl9kYXRhID0gKHVuc2lnbmVkIGxvbmcpICZidG1ydmxfc2Rpb19zZDg3ODcgfSwKIAogCXsgfQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKQEAgLTY5LDcgKzExMyw3IEBACiAJdTggcmVnOwogCWludCByZXQ7CiAKLQlyZWcgPSBzZGlvX3JlYWRiKGNhcmQtPmZ1bmMsIENBUkRfUlhfVU5JVF9SRUcsICZyZXQpOworCXJlZyA9IHNkaW9fcmVhZGIoY2FyZC0+ZnVuYywgY2FyZC0+cmVnLT5jYXJkX3J4X3VuaXQsICZyZXQpOwogCWlmICghcmV0KQogCQljYXJkLT5yeF91bml0ID0gcmVnOwogCkBAIC04MywxMSArMTI3LDExIEBACiAKIAkqZGF0ID0gMDsKIAotCWZ3czAgPSBzZGlvX3JlYWRiKGNhcmQtPmZ1bmMsIENBUkRfRldfU1RBVFVTMF9SRUcsICZyZXQpOworCWZ3czAgPSBzZGlvX3JlYWRiKGNhcmQtPmZ1bmMsIGNhcmQtPnJlZy0+Y2FyZF9md19zdGF0dXMwLCAmcmV0KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gLUVJTzsKIAotCWZ3czEgPSBzZGlvX3JlYWRiKGNhcmQtPmZ1bmMsIENBUkRfRldfU1RBVFVTMV9SRUcsICZyZXQpOworCWZ3czEgPSBzZGlvX3JlYWRiKGNhcmQtPmZ1bmMsIGNhcmQtPnJlZy0+Y2FyZF9md19zdGF0dXMxLCAmcmV0KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gLUVJTzsKIApAQCAtMTAxLDcgKzE0NSw3IEBACiAJdTggcmVnOwogCWludCByZXQ7CiAKLQlyZWcgPSBzZGlvX3JlYWRiKGNhcmQtPmZ1bmMsIENBUkRfUlhfTEVOX1JFRywgJnJldCk7CisJcmVnID0gc2Rpb19yZWFkYihjYXJkLT5mdW5jLCBjYXJkLT5yZWctPmNhcmRfcnhfbGVuLCAmcmV0KTsKIAlpZiAoIXJldCkKIAkJKmRhdCA9ICh1MTYpIHJlZyA8PCBjYXJkLT5yeF91bml0OwogCkBAIC0xMTMsNyArMTU3LDcgQEAKIHsKIAlpbnQgcmV0OwogCi0Jc2Rpb193cml0ZWIoY2FyZC0+ZnVuYywgbWFzaywgSE9TVF9JTlRfTUFTS19SRUcsICZyZXQpOworCXNkaW9fd3JpdGViKGNhcmQtPmZ1bmMsIG1hc2ssIGNhcmQtPnJlZy0+aG9zdF9pbnRfbWFzaywgJnJldCk7CiAJaWYgKHJldCkgewogCQlCVF9FUlIoIlVuYWJsZSB0byBlbmFibGUgdGhlIGhvc3QgaW50ZXJydXB0ISIpOwogCQlyZXQgPSAtRUlPOwpAQCAtMTI4LDEzICsxNzIsMTMgQEAKIAl1OCBob3N0X2ludF9tYXNrOwogCWludCByZXQ7CiAKLQlob3N0X2ludF9tYXNrID0gc2Rpb19yZWFkYihjYXJkLT5mdW5jLCBIT1NUX0lOVF9NQVNLX1JFRywgJnJldCk7CisJaG9zdF9pbnRfbWFzayA9IHNkaW9fcmVhZGIoY2FyZC0+ZnVuYywgY2FyZC0+cmVnLT5ob3N0X2ludF9tYXNrLCAmcmV0KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gLUVJTzsKIAogCWhvc3RfaW50X21hc2sgJj0gfm1hc2s7CiAKLQlzZGlvX3dyaXRlYihjYXJkLT5mdW5jLCBob3N0X2ludF9tYXNrLCBIT1NUX0lOVF9NQVNLX1JFRywgJnJldCk7CisJc2Rpb193cml0ZWIoY2FyZC0+ZnVuYywgaG9zdF9pbnRfbWFzaywgY2FyZC0+cmVnLT5ob3N0X2ludF9tYXNrLCAmcmV0KTsKIAlpZiAocmV0IDwgMCkgewogCQlCVF9FUlIoIlVuYWJsZSB0byBkaXNhYmxlIHRoZSBob3N0IGludGVycnVwdCEiKTsKIAkJcmV0dXJuIC1FSU87CkBAIC0xNTAsNyArMTk0LDcgQEAKIAlpbnQgcmV0OwogCiAJZm9yICh0cmllcyA9IDA7IHRyaWVzIDwgTUFYX1BPTExfVFJJRVMgKiAxMDAwOyB0cmllcysrKSB7Ci0JCXN0YXR1cyA9IHNkaW9fcmVhZGIoY2FyZC0+ZnVuYywgQ0FSRF9TVEFUVVNfUkVHLCAmcmV0KTsKKwkJc3RhdHVzID0gc2Rpb19yZWFkYihjYXJkLT5mdW5jLCBjYXJkLT5yZWctPmNhcmRfc3RhdHVzLAkmcmV0KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZmFpbGVkOwogCQlpZiAoKHN0YXR1cyAmIGJpdHMpID09IGJpdHMpCkBAIC0yOTksNyArMzQzLDcgQEAKIAl1OCBiYXNlMCwgYmFzZTE7CiAJdm9pZCAqdG1wZndidWYgPSBOVUxMOwogCXU4ICpmd2J1ZjsKLQl1MTYgbGVuOworCXUxNiBsZW4sIGJsa3N6X2RsID0gY2FyZC0+c2RfYmxrc3pfZndfZGw7CiAJaW50IHR4bGVuID0gMCwgdHhfYmxvY2tzID0gMCwgY291bnQgPSAwOwogCiAJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZndfZmlybXdhcmUsIGNhcmQtPmZpcm13YXJlLApAQCAtMzQ1LDcgKzM4OSw3IEBACiAKIAkJZm9yICh0cmllcyA9IDA7IHRyaWVzIDwgTUFYX1BPTExfVFJJRVM7IHRyaWVzKyspIHsKIAkJCWJhc2UwID0gc2Rpb19yZWFkYihjYXJkLT5mdW5jLAotCQkJCQlTUV9SRUFEX0JBU0VfQUREUkVTU19BMF9SRUcsICZyZXQpOworCQkJCQljYXJkLT5yZWctPnNxX3JlYWRfYmFzZV9hZGRyX2EwLCAmcmV0KTsKIAkJCWlmIChyZXQpIHsKIAkJCQlCVF9FUlIoIkJBU0UwIHJlZ2lzdGVyIHJlYWQgZmFpbGVkOiIKIAkJCQkJIiBiYXNlMCA9IDB4JTA0WCglZCkuIgpAQCAtMzU1LDcgKzM5OSw3IEBACiAJCQkJZ290byBkb25lOwogCQkJfQogCQkJYmFzZTEgPSBzZGlvX3JlYWRiKGNhcmQtPmZ1bmMsCi0JCQkJCVNRX1JFQURfQkFTRV9BRERSRVNTX0ExX1JFRywgJnJldCk7CisJCQkJCWNhcmQtPnJlZy0+c3FfcmVhZF9iYXNlX2FkZHJfYTEsICZyZXQpOwogCQkJaWYgKHJldCkgewogCQkJCUJUX0VSUigiQkFTRTEgcmVnaXN0ZXIgcmVhZCBmYWlsZWQ6IgogCQkJCQkiIGJhc2UxID0gMHglMDRYKCVkKS4iCkBAIC00MDMsMjAgKzQ0NywxOSBAQAogCQkJaWYgKGZpcm13YXJlbGVuIC0gb2Zmc2V0IDwgdHhsZW4pCiAJCQkJdHhsZW4gPSBmaXJtd2FyZWxlbiAtIG9mZnNldDsKIAotCQkJdHhfYmxvY2tzID0KLQkJCSAgICAodHhsZW4gKyBTRElPX0JMT0NLX1NJWkUgLSAxKSAvIFNESU9fQkxPQ0tfU0laRTsKKwkJCXR4X2Jsb2NrcyA9ICh0eGxlbiArIGJsa3N6X2RsIC0gMSkgLyBibGtzel9kbDsKIAogCQkJbWVtY3B5KGZ3YnVmLCAmZmlybXdhcmVbb2Zmc2V0XSwgdHhsZW4pOwogCQl9CiAKIAkJcmV0ID0gc2Rpb193cml0ZXNiKGNhcmQtPmZ1bmMsIGNhcmQtPmlvcG9ydCwgZndidWYsCi0JCQkJCXR4X2Jsb2NrcyAqIFNESU9fQkxPQ0tfU0laRSk7CisJCQkJCQl0eF9ibG9ja3MgKiBibGtzel9kbCk7CiAKIAkJaWYgKHJldCA8IDApIHsKIAkJCUJUX0VSUigiRlcgZG93bmxvYWQsIHdyaXRlc2IoJWQpIGZhaWxlZCBAJWQiLAogCQkJCQkJCWNvdW50LCBvZmZzZXQpOwotCQkJc2Rpb193cml0ZWIoY2FyZC0+ZnVuYywgSE9TVF9DTUQ1M19GSU4sIENPTkZJR19SRUcsCi0JCQkJCQkJCQkmcmV0KTsKKwkJCXNkaW9fd3JpdGViKGNhcmQtPmZ1bmMsIEhPU1RfQ01ENTNfRklOLAorCQkJCQkJY2FyZC0+cmVnLT5jZmcsICZyZXQpOwogCQkJaWYgKHJldCkKIAkJCQlCVF9FUlIoIndyaXRlYiBmYWlsZWQgKENGRykiKTsKIAkJfQpAQCAtNTk3LDcgKzY0MCw3IEBACiAKIAlwcml2ID0gY2FyZC0+cHJpdjsKIAotCWlyZWcgPSBzZGlvX3JlYWRiKGNhcmQtPmZ1bmMsIEhPU1RfSU5UU1RBVFVTX1JFRywgJnJldCk7CisJaXJlZyA9IHNkaW9fcmVhZGIoY2FyZC0+ZnVuYywgY2FyZC0+cmVnLT5ob3N0X2ludHN0YXR1cywgJnJldCk7CiAJaWYgKHJldCkgewogCQlCVF9FUlIoInNkaW9fcmVhZGI6IHJlYWQgaW50IHN0YXR1cyByZWdpc3RlciBmYWlsZWQiKTsKIAkJcmV0dXJuOwpAQCAtNjEzLDcgKzY1Niw3IEBACiAKIAkJc2Rpb193cml0ZWIoY2FyZC0+ZnVuYywgfihpcmVnKSAmIChETl9MRF9IT1NUX0lOVF9TVEFUVVMgfAogCQkJCQlVUF9MRF9IT1NUX0lOVF9TVEFUVVMpLAotCQkJCUhPU1RfSU5UU1RBVFVTX1JFRywgJnJldCk7CisJCQkJY2FyZC0+cmVnLT5ob3N0X2ludHN0YXR1cywgJnJldCk7CiAJCWlmIChyZXQpIHsKIAkJCUJUX0VSUigic2Rpb193cml0ZWI6IGNsZWFyIGludCBzdGF0dXMgcmVnaXN0ZXIgZmFpbGVkIik7CiAJCQlyZXR1cm47CkBAIC02NjQsNyArNzA3LDcgQEAKIAkJZ290byByZWxlYXNlX2lycTsKIAl9CiAKLQlyZWcgPSBzZGlvX3JlYWRiKGZ1bmMsIElPX1BPUlRfMF9SRUcsICZyZXQpOworCXJlZyA9IHNkaW9fcmVhZGIoZnVuYywgY2FyZC0+cmVnLT5pb19wb3J0XzAsICZyZXQpOwogCWlmIChyZXQgPCAwKSB7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gcmVsZWFzZV9pcnE7CkBAIC02NzIsNyArNzE1LDcgQEAKIAogCWNhcmQtPmlvcG9ydCA9IHJlZzsKIAotCXJlZyA9IHNkaW9fcmVhZGIoZnVuYywgSU9fUE9SVF8xX1JFRywgJnJldCk7CisJcmVnID0gc2Rpb19yZWFkYihmdW5jLCBjYXJkLT5yZWctPmlvX3BvcnRfMSwgJnJldCk7CiAJaWYgKHJldCA8IDApIHsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byByZWxlYXNlX2lycTsKQEAgLTY4MCw3ICs3MjMsNyBAQAogCiAJY2FyZC0+aW9wb3J0IHw9IChyZWcgPDwgOCk7CiAKLQlyZWcgPSBzZGlvX3JlYWRiKGZ1bmMsIElPX1BPUlRfMl9SRUcsICZyZXQpOworCXJlZyA9IHNkaW9fcmVhZGIoZnVuYywgY2FyZC0+cmVnLT5pb19wb3J0XzIsICZyZXQpOwogCWlmIChyZXQgPCAwKSB7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gcmVsZWFzZV9pcnE7CkBAIC04MTUsNiArODU4LDggQEAKIHN0YXRpYyBpbnQgYnRtcnZsX3NkaW9fZG93bmxvYWRfZncoc3RydWN0IGJ0bXJ2bF9zZGlvX2NhcmQgKmNhcmQpCiB7CiAJaW50IHJldCA9IDA7CisJdTggZndzMDsKKwlpbnQgcG9sbG51bSA9IE1BWF9QT0xMX1RSSUVTOwogCiAJaWYgKCFjYXJkIHx8ICFjYXJkLT5mdW5jKSB7CiAJCUJUX0VSUigiY2FyZCBvciBmdW5jdGlvbiBpcyBOVUxMISIpOwpAQCAtODI3LDIwICs4NzIsMzYgQEAKIAkJZ290byBkb25lOwogCX0KIAotCXJldCA9IGJ0bXJ2bF9zZGlvX2Rvd25sb2FkX2hlbHBlcihjYXJkKTsKKwkvKiBDaGVjayBpZiBvdGhlciBmdW5jdGlvbiBkcml2ZXIgaXMgZG93bmxvYWRpbmcgdGhlIGZpcm13YXJlICovCisJZndzMCA9IHNkaW9fcmVhZGIoY2FyZC0+ZnVuYywgY2FyZC0+cmVnLT5jYXJkX2Z3X3N0YXR1czAsICZyZXQpOwogCWlmIChyZXQpIHsKLQkJQlRfRVJSKCJGYWlsZWQgdG8gZG93bmxvYWQgaGVscGVyISIpOworCQlCVF9FUlIoIkZhaWxlZCB0byByZWFkIEZXIGRvd25sb2FkaW5nIHN0YXR1cyEiKTsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byBkb25lOwogCX0KKwlpZiAoZndzMCkgeworCQlCVF9EQkcoIkJUIG5vdCB0aGUgd2lubmVyICglI3gpLiBTa2lwIEZXIGRvd25sb2FkaW5nIiwgZndzMCk7CiAKLQlpZiAoYnRtcnZsX3NkaW9fZG93bmxvYWRfZndfd19oZWxwZXIoY2FyZCkpIHsKLQkJQlRfRVJSKCJGYWlsZWQgdG8gZG93bmxvYWQgZmlybXdhcmUhIik7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gZG9uZTsKKwkJLyogR2l2ZSBvdGhlciBmdW5jdGlvbiBtb3JlIHRpbWUgdG8gZG93bmxvYWQgdGhlIGZpcm13YXJlICovCisJCXBvbGxudW0gKj0gMTA7CisJfSBlbHNlIHsKKwkJaWYgKGNhcmQtPmhlbHBlcikgeworCQkJcmV0ID0gYnRtcnZsX3NkaW9fZG93bmxvYWRfaGVscGVyKGNhcmQpOworCQkJaWYgKHJldCkgeworCQkJCUJUX0VSUigiRmFpbGVkIHRvIGRvd25sb2FkIGhlbHBlciEiKTsKKwkJCQlyZXQgPSAtRUlPOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJfQorCisJCWlmIChidG1ydmxfc2Rpb19kb3dubG9hZF9md193X2hlbHBlcihjYXJkKSkgeworCQkJQlRfRVJSKCJGYWlsZWQgdG8gZG93bmxvYWQgZmlybXdhcmUhIik7CisJCQlyZXQgPSAtRUlPOworCQkJZ290byBkb25lOworCQl9CiAJfQogCi0JaWYgKGJ0bXJ2bF9zZGlvX3ZlcmlmeV9md19kb3dubG9hZChjYXJkLCBNQVhfUE9MTF9UUklFUykpIHsKKwlpZiAoYnRtcnZsX3NkaW9fdmVyaWZ5X2Z3X2Rvd25sb2FkKGNhcmQsIHBvbGxudW0pKSB7CiAJCUJUX0VSUigiRlcgZmFpbGVkIHRvIGJlIGFjdGl2ZSBpbiB0aW1lISIpOwogCQlyZXQgPSAtRVRJTUVET1VUOwogCQlnb3RvIGRvbmU7CkBAIC04NjQsNyArOTI1LDcgQEAKIAogCXNkaW9fY2xhaW1faG9zdChjYXJkLT5mdW5jKTsKIAotCXNkaW9fd3JpdGViKGNhcmQtPmZ1bmMsIEhPU1RfUE9XRVJfVVAsIENPTkZJR19SRUcsICZyZXQpOworCXNkaW9fd3JpdGViKGNhcmQtPmZ1bmMsIEhPU1RfUE9XRVJfVVAsIGNhcmQtPnJlZy0+Y2ZnLCAmcmV0KTsKIAogCXNkaW9fcmVsZWFzZV9ob3N0KGNhcmQtPmZ1bmMpOwogCkBAIC04OTMsOCArOTU0LDEwIEBACiAKIAlpZiAoaWQtPmRyaXZlcl9kYXRhKSB7CiAJCXN0cnVjdCBidG1ydmxfc2Rpb19kZXZpY2UgKmRhdGEgPSAodm9pZCAqKSBpZC0+ZHJpdmVyX2RhdGE7Ci0JCWNhcmQtPmhlbHBlciAgID0gZGF0YS0+aGVscGVyOworCQljYXJkLT5oZWxwZXIgPSBkYXRhLT5oZWxwZXI7CiAJCWNhcmQtPmZpcm13YXJlID0gZGF0YS0+ZmlybXdhcmU7CisJCWNhcmQtPnJlZyA9IGRhdGEtPnJlZzsKKwkJY2FyZC0+c2RfYmxrc3pfZndfZGwgPSBkYXRhLT5zZF9ibGtzel9md19kbDsKIAl9CiAKIAlpZiAoYnRtcnZsX3NkaW9fcmVnaXN0ZXJfZGV2KGNhcmQpIDwgMCkgewpAQCAtMTAxMSwzICsxMDc0LDQgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKIE1PRFVMRV9GSVJNV0FSRSgic2Q4Njg4X2hlbHBlci5iaW4iKTsKIE1PRFVMRV9GSVJNV0FSRSgic2Q4Njg4LmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJtcnZsL3NkODc4N191YXBzdGEuYmluIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfc2Rpby5oIGIvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX3NkaW8uaAppbmRleCAyNzMyOWYxLi40M2QzNWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfc2Rpby5oCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9zZGlvLmgKQEAgLTQ3LDQ0ICs0Nyw0NiBAQAogLyogTWF4IHJldHJ5IG51bWJlciBvZiBDTUQ1MyB3cml0ZSAqLwogI2RlZmluZSBNQVhfV1JJVEVfSU9NRU1fUkVUUlkJCTIKIAotLyogSG9zdCBDb250cm9sIFJlZ2lzdGVycyAqLwotI2RlZmluZSBJT19QT1JUXzBfUkVHCQkJMHgwMAotI2RlZmluZSBJT19QT1JUXzFfUkVHCQkJMHgwMQotI2RlZmluZSBJT19QT1JUXzJfUkVHCQkJMHgwMgorLyogcmVnaXN0ZXIgYml0bWFza3MgKi8KKyNkZWZpbmUgSE9TVF9QT1dFUl9VUAkJCQlCSVQoMSkKKyNkZWZpbmUgSE9TVF9DTUQ1M19GSU4JCQkJQklUKDIpCiAKLSNkZWZpbmUgQ09ORklHX1JFRwkJCTB4MDMKLSNkZWZpbmUgSE9TVF9QT1dFUl9VUAkJCUJJVCgxKQotI2RlZmluZSBIT1NUX0NNRDUzX0ZJTgkJCUJJVCgyKQorI2RlZmluZSBISU1fRElTQUJMRQkJCQkweGZmCisjZGVmaW5lIEhJTV9FTkFCTEUJCQkJKEJJVCgwKSB8IEJJVCgxKSkKIAotI2RlZmluZSBIT1NUX0lOVF9NQVNLX1JFRwkJMHgwNAotI2RlZmluZSBISU1fRElTQUJMRQkJCTB4ZmYKLSNkZWZpbmUgSElNX0VOQUJMRQkJCShCSVQoMCkgfCBCSVQoMSkpCisjZGVmaW5lIFVQX0xEX0hPU1RfSU5UX1NUQVRVUwkJCUJJVCgwKQorI2RlZmluZSBETl9MRF9IT1NUX0lOVF9TVEFUVVMJCQlCSVQoMSkKIAotI2RlZmluZSBIT1NUX0lOVFNUQVRVU19SRUcJCTB4MDUKLSNkZWZpbmUgVVBfTERfSE9TVF9JTlRfU1RBVFVTCQlCSVQoMCkKLSNkZWZpbmUgRE5fTERfSE9TVF9JTlRfU1RBVFVTCQlCSVQoMSkKKyNkZWZpbmUgRE5fTERfQ0FSRF9SRFkJCQkJQklUKDApCisjZGVmaW5lIENBUkRfSU9fUkVBRFkJCQkJQklUKDMpCiAKLS8qIENhcmQgQ29udHJvbCBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgU1FfUkVBRF9CQVNFX0FERFJFU1NfQTBfUkVHICAJMHgxMAotI2RlZmluZSBTUV9SRUFEX0JBU0VfQUREUkVTU19BMV9SRUcgIAkweDExCisjZGVmaW5lIEZJUk1XQVJFX1JFQURZCQkJCTB4ZmVkYwogCi0jZGVmaW5lIENBUkRfU1RBVFVTX1JFRyAgICAgICAgICAgICAgCTB4MjAKLSNkZWZpbmUgRE5fTERfQ0FSRF9SRFkgICAgICAgICAgICAgICAJQklUKDApCi0jZGVmaW5lIENBUkRfSU9fUkVBRFkgICAgICAgICAgICAgIAlCSVQoMykKIAotI2RlZmluZSBDQVJEX0ZXX1NUQVRVUzBfUkVHCQkweDQwCi0jZGVmaW5lIENBUkRfRldfU1RBVFVTMV9SRUcJCTB4NDEKLSNkZWZpbmUgRklSTVdBUkVfUkVBRFkJCQkweGZlZGMKLQotI2RlZmluZSBDQVJEX1JYX0xFTl9SRUcJCQkweDQyCi0jZGVmaW5lIENBUkRfUlhfVU5JVF9SRUcJCTB4NDMKLQorc3RydWN0IGJ0bXJ2bF9zZGlvX2NhcmRfcmVnIHsKKwl1OCBjZmc7CisJdTggaG9zdF9pbnRfbWFzazsKKwl1OCBob3N0X2ludHN0YXR1czsKKwl1OCBjYXJkX3N0YXR1czsKKwl1OCBzcV9yZWFkX2Jhc2VfYWRkcl9hMDsKKwl1OCBzcV9yZWFkX2Jhc2VfYWRkcl9hMTsKKwl1OCBjYXJkX3JldmlzaW9uOworCXU4IGNhcmRfZndfc3RhdHVzMDsKKwl1OCBjYXJkX2Z3X3N0YXR1czE7CisJdTggY2FyZF9yeF9sZW47CisJdTggY2FyZF9yeF91bml0OworCXU4IGlvX3BvcnRfMDsKKwl1OCBpb19wb3J0XzE7CisJdTggaW9fcG9ydF8yOworfTsKIAogc3RydWN0IGJ0bXJ2bF9zZGlvX2NhcmQgewogCXN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmM7CiAJdTMyIGlvcG9ydDsKIAljb25zdCBjaGFyICpoZWxwZXI7CiAJY29uc3QgY2hhciAqZmlybXdhcmU7CisJY29uc3Qgc3RydWN0IGJ0bXJ2bF9zZGlvX2NhcmRfcmVnICpyZWc7CisJdTE2IHNkX2Jsa3N6X2Z3X2RsOwogCXU4IHJ4X3VuaXQ7CiAJc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2OwogfTsKQEAgLTkyLDYgKzk0LDggQEAKIHN0cnVjdCBidG1ydmxfc2Rpb19kZXZpY2UgewogCWNvbnN0IGNoYXIgKmhlbHBlcjsKIAljb25zdCBjaGFyICpmaXJtd2FyZTsKKwljb25zdCBzdHJ1Y3QgYnRtcnZsX3NkaW9fY2FyZF9yZWcgKnJlZzsKKwl1MTYgc2RfYmxrc3pfZndfZGw7CiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCmluZGV4IDc2MmE1MTAuLmMyZGU4OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYwpAQCAtMTA0LDYgKzEwNCw3IEBACiAKIAkvKiBBdGhlcm9zIDMwMTEgd2l0aCBzZmxhc2ggZmlybXdhcmUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweDMwMDIpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9JR05PUkUgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMzMDQpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9JR05PUkUgfSwKIAogCS8qIEF0aGVyb3MgQVI5Mjg1IE1hbGJlYyB3aXRoIHNmbGFzaCBmaXJtd2FyZSAqLwogCXsgVVNCX0RFVklDRSgweDAzZjAsIDB4MzExZCksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0lHTk9SRSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2F0aC5jIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2F0aC5jCmluZGV4IGJkMzQ0MDYuLjQwOTM5MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9hdGguYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfYXRoLmMKQEAgLTIwMSw4ICsyMDEsMTMgQEAKIC8qIFJlY3YgZGF0YSAqLwogc3RhdGljIGludCBhdGhfcmVjdihzdHJ1Y3QgaGNpX3VhcnQgKmh1LCB2b2lkICpkYXRhLCBpbnQgY291bnQpCiB7Ci0JaWYgKGhjaV9yZWN2X3N0cmVhbV9mcmFnbWVudChodS0+aGRldiwgZGF0YSwgY291bnQpIDwgMCkKKwlpbnQgcmV0OworCisJcmV0ID0gaGNpX3JlY3Zfc3RyZWFtX2ZyYWdtZW50KGh1LT5oZGV2LCBkYXRhLCBjb3VudCk7CisJaWYgKHJldCA8IDApIHsKIAkJQlRfRVJSKCJGcmFtZSBSZWFzc2VtYmx5IEZhaWxlZCIpOworCQlyZXR1cm4gcmV0OworCX0KIAogCXJldHVybiBjb3VudDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9oNC5jIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g0LmMKaW5kZXggN2I4YWQ5My4uMmZjZDhiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g0LmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g0LmMKQEAgLTE1MSw4ICsxNTEsMTMgQEAKIC8qIFJlY3YgZGF0YSAqLwogc3RhdGljIGludCBoNF9yZWN2KHN0cnVjdCBoY2lfdWFydCAqaHUsIHZvaWQgKmRhdGEsIGludCBjb3VudCkKIHsKLQlpZiAoaGNpX3JlY3Zfc3RyZWFtX2ZyYWdtZW50KGh1LT5oZGV2LCBkYXRhLCBjb3VudCkgPCAwKQorCWludCByZXQ7CisKKwlyZXQgPSBoY2lfcmVjdl9zdHJlYW1fZnJhZ21lbnQoaHUtPmhkZXYsIGRhdGEsIGNvdW50KTsKKwlpZiAocmV0IDwgMCkgewogCQlCVF9FUlIoIkZyYW1lIFJlYXNzZW1ibHkgRmFpbGVkIik7CisJCXJldHVybiByZXQ7CisJfQogCiAJcmV0dXJuIGNvdW50OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYwppbmRleCA0OGFkMmE3Li4zMjBmNzE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYwpAQCAtMzU5LDYgKzM1OSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGhjaV91YXJ0X3R0eV9yZWNlaXZlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHU4ICpkYXRhLCBjaGFyICpmbGFncywgaW50IGNvdW50KQogeworCWludCByZXQ7CiAJc3RydWN0IGhjaV91YXJ0ICpodSA9ICh2b2lkICopdHR5LT5kaXNjX2RhdGE7CiAKIAlpZiAoIWh1IHx8IHR0eSAhPSBodS0+dHR5KQpAQCAtMzY4LDggKzM2OSw5IEBACiAJCXJldHVybjsKIAogCXNwaW5fbG9jaygmaHUtPnJ4X2xvY2spOwotCWh1LT5wcm90by0+cmVjdihodSwgKHZvaWQgKikgZGF0YSwgY291bnQpOwotCWh1LT5oZGV2LT5zdGF0LmJ5dGVfcnggKz0gY291bnQ7CisJcmV0ID0gaHUtPnByb3RvLT5yZWN2KGh1LCAodm9pZCAqKSBkYXRhLCBjb3VudCk7CisJaWYgKHJldCA+IDApCisJCWh1LT5oZGV2LT5zdGF0LmJ5dGVfcnggKz0gY291bnQ7CiAJc3Bpbl91bmxvY2soJmh1LT5yeF9sb2NrKTsKIAogCXR0eV91bnRocm90dGxlKHR0eSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMgYi9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMKaW5kZXggNTE0ZGQ4ZS4uNzVmYjk2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jZHJvbS9jZHJvbS5jCisrKyBiL2RyaXZlcnMvY2Ryb20vY2Ryb20uYwpAQCAtOTg2LDYgKzk4Niw5IEBACiAKIAljZGluZm8oQ0RfT1BFTiwgImVudGVyaW5nIGNkcm9tX29wZW5cbiIpOyAKIAorCS8qIG9wZW4gaXMgZXZlbnQgc3luY2hyb25pemF0aW9uIHBvaW50LCBjaGVjayBldmVudHMgZmlyc3QgKi8KKwljaGVja19kaXNrX2NoYW5nZShiZGV2KTsKKwogCS8qIGlmIHRoaXMgd2FzIGEgT19OT05CTE9DSyBvcGVuIGFuZCB3ZSBzaG91bGQgaG9ub3IgdGhlIGZsYWdzLAogCSAqIGRvIGEgcXVpY2sgb3BlbiB3aXRob3V0IGRyaXZlL2Rpc2MgaW50ZWdyaXR5IGNoZWNrcy4gKi8KIAljZGktPnVzZV9jb3VudCsrOwpAQCAtMTAxMiw5ICsxMDE1LDYgQEAKIAogCWNkaW5mbyhDRF9PUEVOLCAiVXNlIGNvdW50IGZvciBcIi9kZXYvJXNcIiBub3cgJWRcbiIsCiAJCQljZGktPm5hbWUsIGNkaS0+dXNlX2NvdW50KTsKLQkvKiBEbyB0aGlzIG9uIG9wZW4uICBEb24ndCB3YWl0IGZvciBtb3VudCwgYmVjYXVzZSB0aGV5IG1pZ2h0Ci0JICAgIG5vdCBiZSBtb3VudGluZywgYnV0IG9wZW5pbmcgd2l0aCBPX05PTkJMT0NLICovCi0JY2hlY2tfZGlza19jaGFuZ2UoYmRldik7CiAJcmV0dXJuIDA7CiBlcnJfcmVsZWFzZToKIAlpZiAoQ0RST01fQ0FOKENEQ19MT0NLKSAmJiBjZGktPm9wdGlvbnMgJiBDRE9fTE9DSykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jZHJvbS9nZHJvbS5jIGIvZHJpdmVycy9jZHJvbS9nZHJvbS5jCmluZGV4IGIyYjAzNGYuLjNjZWFmMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vZ2Ryb20uYworKysgYi9kcml2ZXJzL2Nkcm9tL2dkcm9tLmMKQEAgLTgwMyw3ICs4MDMsNiBAQAogCQlnb3RvIHByb2JlX2ZhaWxfY2Ryb21fcmVnaXN0ZXI7CiAJfQogCWdkLmRpc2stPmZvcHMgPSAmZ2Ryb21fYmRvcHM7Ci0JZ2QuZGlzay0+ZXZlbnRzID0gRElTS19FVkVOVF9NRURJQV9DSEFOR0U7CiAJLyogbGF0Y2ggb24gdG8gdGhlIGludGVycnVwdCAqLwogCWVyciA9IGdkcm9tX3NldF9pbnRlcnJ1cHRfaGFuZGxlcnMoKTsKIAlpZiAoZXJyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jZHJvbS92aW9jZC5jIGIvZHJpdmVycy9jZHJvbS92aW9jZC5jCmluZGV4IDRlODc0YzUuLmU0MjdmYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vdmlvY2QuYworKysgYi9kcml2ZXJzL2Nkcm9tL3Zpb2NkLmMKQEAgLTYyNiw3ICs2MjYsNiBAQAogCWdlbmRpc2stPnF1ZXVlID0gcTsKIAlnZW5kaXNrLT5mb3BzID0gJnZpb2NkX2ZvcHM7CiAJZ2VuZGlzay0+ZmxhZ3MgPSBHRU5IRF9GTF9DRHxHRU5IRF9GTF9SRU1PVkFCTEU7Ci0JZ2VuZGlzay0+ZXZlbnRzID0gRElTS19FVkVOVF9NRURJQV9DSEFOR0U7CiAJc2V0X2NhcGFjaXR5KGdlbmRpc2ssIDApOwogCWdlbmRpc2stPnByaXZhdGVfZGF0YSA9IGQ7CiAJZC0+dmlvY2RfZGlzayA9IGdlbmRpc2s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCmluZGV4IGFkNTliNGUuLjQ5NTAyYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCkBAIC01MjMsNyArNTIzLDcgQEAKICAgICAgICAgICB3aXRoIHRoZSBPX0RJUkVDVCBmbGFnLgogCiBjb25maWcgTUFYX1JBV19ERVZTCi0JaW50ICJNYXhpbXVtIG51bWJlciBvZiBSQVcgZGV2aWNlcyB0byBzdXBwb3J0ICgxLTgxOTIpIgorCWludCAiTWF4aW11bSBudW1iZXIgb2YgUkFXIGRldmljZXMgdG8gc3VwcG9ydCAoMS02NTUzNikiCiAJZGVwZW5kcyBvbiBSQVdfRFJJVkVSCiAJZGVmYXVsdCAiMjU2IgogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvZ2VuZXJpYy5jIGIvZHJpdmVycy9jaGFyL2FncC9nZW5lcmljLmMKaW5kZXggMDEyY2JhMC4uYjA3MjY0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9nZW5lcmljLmMKQEAgLTExNSw2ICsxMTUsOSBAQAogCXN0cnVjdCBhZ3BfbWVtb3J5ICpuZXc7CiAJdW5zaWduZWQgbG9uZyBhbGxvY19zaXplID0gbnVtX2FncF9wYWdlcypzaXplb2Yoc3RydWN0IHBhZ2UgKik7CiAKKwlpZiAoSU5UX01BWC9zaXplb2Yoc3RydWN0IHBhZ2UgKikgPCBudW1fYWdwX3BhZ2VzKQorCQlyZXR1cm4gTlVMTDsKKwogCW5ldyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhZ3BfbWVtb3J5KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKG5ldyA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKQEAgLTIzNCwxMSArMjM3LDE0IEBACiAJaW50IHNjcmF0Y2hfcGFnZXM7CiAJc3RydWN0IGFncF9tZW1vcnkgKm5ldzsKIAlzaXplX3QgaTsKKwlpbnQgY3VyX21lbW9yeTsKIAogCWlmICghYnJpZGdlKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmICgoYXRvbWljX3JlYWQoJmJyaWRnZS0+Y3VycmVudF9tZW1vcnlfYWdwKSArIHBhZ2VfY291bnQpID4gYnJpZGdlLT5tYXhfbWVtb3J5X2FncCkKKwljdXJfbWVtb3J5ID0gYXRvbWljX3JlYWQoJmJyaWRnZS0+Y3VycmVudF9tZW1vcnlfYWdwKTsKKwlpZiAoKGN1cl9tZW1vcnkgKyBwYWdlX2NvdW50ID4gYnJpZGdlLT5tYXhfbWVtb3J5X2FncCkgfHwKKwkgICAgKGN1cl9tZW1vcnkgKyBwYWdlX2NvdW50IDwgcGFnZV9jb3VudCkpCiAJCXJldHVybiBOVUxMOwogCiAJaWYgKHR5cGUgPj0gQUdQX1VTRVJfVFlQRVMpIHsKQEAgLTEwODksOCArMTA5NSw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIEFLOiBjb3VsZCB3cmFwICovCi0JaWYgKChwZ19zdGFydCArIG1lbS0+cGFnZV9jb3VudCkgPiBudW1fZW50cmllcykKKwlpZiAoKChwZ19zdGFydCArIG1lbS0+cGFnZV9jb3VudCkgPiBudW1fZW50cmllcykgfHwKKwkgICAgKChwZ19zdGFydCArIG1lbS0+cGFnZV9jb3VudCkgPCBwZ19zdGFydCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaiA9IHBnX3N0YXJ0OwpAQCAtMTEyNCw3ICsxMTMwLDcgQEAKIHsKIAlzaXplX3QgaTsKIAlzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2U7Ci0JaW50IG1hc2tfdHlwZTsKKwlpbnQgbWFza190eXBlLCBudW1fZW50cmllczsKIAogCWJyaWRnZSA9IG1lbS0+YnJpZGdlOwogCWlmICghYnJpZGdlKQpAQCAtMTEzNiw2ICsxMTQyLDExIEBACiAJaWYgKHR5cGUgIT0gbWVtLT50eXBlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCW51bV9lbnRyaWVzID0gYWdwX251bV9lbnRyaWVzKCk7CisJaWYgKCgocGdfc3RhcnQgKyBtZW0tPnBhZ2VfY291bnQpID4gbnVtX2VudHJpZXMpIHx8CisJICAgICgocGdfc3RhcnQgKyBtZW0tPnBhZ2VfY291bnQpIDwgcGdfc3RhcnQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCW1hc2tfdHlwZSA9IGJyaWRnZS0+ZHJpdmVyLT5hZ3BfdHlwZV90b19tYXNrX3R5cGUoYnJpZGdlLCB0eXBlKTsKIAlpZiAobWFza190eXBlICE9IDApIHsKIAkJLyogVGhlIGdlbmVyaWMgcm91dGluZXMga25vdyBub3RoaW5nIG9mIG1lbW9yeSB0eXBlcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2Jzci5jIGIvZHJpdmVycy9jaGFyL2Jzci5jCmluZGV4IGE0YTZjMmYuLmNmMzliYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9ic3IuYworKysgYi9kcml2ZXJzL2NoYXIvYnNyLmMKQEAgLTI5NSw3ICsyOTUsNyBAQAogc3RhdGljIGludCBfX2luaXQgYnNyX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCWRldl90IGJzcl9kZXYgPSBNS0RFVihic3JfbWFqb3IsIDApOworCWRldl90IGJzcl9kZXY7CiAJaW50IHJldCA9IC1FTk9ERVY7CiAJaW50IHJlc3VsdDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2hwZXQuYyBiL2RyaXZlcnMvY2hhci9ocGV0LmMKaW5kZXggNzA2NmU4MC4uMDUxNDc0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2hwZXQuYworKysgYi9kcml2ZXJzL2NoYXIvaHBldC5jCkBAIC04NCw4ICs4NCw2IEBACiAJLnJhdGluZwkJPSAyNTAsCiAJLnJlYWQJCT0gcmVhZF9ocGV0LAogCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soNjQpLAotCS5tdWx0CQk9IDAsCQkvKiB0byBiZSBjYWxjdWxhdGVkICovCi0JLnNoaWZ0CQk9IDEwLAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiBzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlICpocGV0X2Nsb2Nrc291cmNlOwpAQCAtOTM0LDkgKzkzMiw3IEBACiAJaWYgKCFocGV0X2Nsb2Nrc291cmNlKSB7CiAJCWhwZXRfbWN0ciA9ICh2b2lkIF9faW9tZW0gKikmaHBldHAtPmhwX2hwZXQtPmhwZXRfbWM7CiAJCUNMS1NSQ19GU1lTX01NSU9fU0VUKGNsb2Nrc291cmNlX2hwZXQuZnN5c19tbWlvLCBocGV0X21jdHIpOwotCQljbG9ja3NvdXJjZV9ocGV0Lm11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KGhwZXRwLT5ocF90aWNrX2ZyZXEsCi0JCQkJCQljbG9ja3NvdXJjZV9ocGV0LnNoaWZ0KTsKLQkJY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX2hwZXQpOworCQljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2xvY2tzb3VyY2VfaHBldCwgaHBldHAtPmhwX3RpY2tfZnJlcSk7CiAJCWhwZXRwLT5ocF9jbG9ja3NvdXJjZSA9ICZjbG9ja3NvdXJjZV9ocGV0OwogCQlocGV0X2Nsb2Nrc291cmNlID0gJmNsb2Nrc291cmNlX2hwZXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnCmluZGV4IGJlZWNkMWMuLmE2MDA0M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWcKQEAgLTQ5LDcgKzQ5LDcgQEAKIAogY29uZmlnIEhXX1JBTkRPTV9BTUQKIAl0cmlzdGF0ZSAiQU1EIEhXIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBIV19SQU5ET00gJiYgWDg2ICYmIFBDSQorCWRlcGVuZHMgb24gSFdfUkFORE9NICYmIChYODYgfHwgUFBDX01BUExFKSAmJiBQQ0kKIAlkZWZhdWx0IEhXX1JBTkRPTQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGtlcm5lbC1zaWRlIHN1cHBvcnQgZm9yIHRoZSBSYW5kb20gTnVtYmVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2FtZC1ybmcuYyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vYW1kLXJuZy5jCmluZGV4IDBkOGM1NzguLmM2YWYwMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vYW1kLXJuZy5jCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vYW1kLXJuZy5jCkBAIC0xMzMsNiArMTMzLDEyIEBACiAJcG1iYXNlICY9IDB4MDAwMEZGMDA7CiAJaWYgKHBtYmFzZSA9PSAwKQogCQlnb3RvIG91dDsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKHBtYmFzZSArIDB4RjAsIDgsICJBTUQgSFdSTkciKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJBTUQgSFdSTkcgcmVnaW9uIDB4JXggYWxyZWFkeSBpbiB1c2UhXG4iLAorCQkJcG1iYXNlICsgMHhGMCk7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQogCWFtZF9ybmcucHJpdiA9ICh1bnNpZ25lZCBsb25nKXBtYmFzZTsKIAlhbWRfcGRldiA9IHBkZXY7CiAKQEAgLTE0MSw2ICsxNDcsNyBAQAogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiUk5HIHJlZ2lzdGVyaW5nIGZhaWxlZCAoJWQpXG4iLAogCQkgICAgICAgZXJyKTsKKwkJcmVsZWFzZV9yZWdpb24ocG1iYXNlICsgMHhGMCwgOCk7CiAJCWdvdG8gb3V0OwogCX0KIG91dDoKQEAgLTE0OSw2ICsxNTYsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbW9kX2V4aXQodm9pZCkKIHsKKwl1MzIgcG1iYXNlID0gKHVuc2lnbmVkIGxvbmcpYW1kX3JuZy5wcml2OworCXJlbGVhc2VfcmVnaW9uKHBtYmFzZSArIDB4RjAsIDgpOwogCWh3cm5nX3VucmVnaXN0ZXIoJmFtZF9ybmcpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL24yLWRydi5jIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9uMi1kcnYuYwppbmRleCA0M2FjNjE5Li5hYzY3MzllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL24yLWRydi5jCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vbjItZHJ2LmMKQEAgLTYxOSwxNSArNjE5LDE4IEBACiAJCXByX2luZm8oIiVzIiwgdmVyc2lvbik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG4ycm5nX21hdGNoW107CiBzdGF0aWMgaW50IF9fZGV2aW5pdCBuMnJuZ19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCkKIHsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKIAlpbnQgdmljdG9yaWFfZmFsbHM7CiAJaW50IGVyciA9IC1FTk9NRU07CiAJc3RydWN0IG4ycm5nICpucDsKIAotCWlmICghb3AtPmRldi5vZl9tYXRjaCkKKwltYXRjaCA9IG9mX21hdGNoX2RldmljZShuMnJuZ19tYXRjaCwgJm9wLT5kZXYpOworCWlmICghbWF0Y2gpCiAJCXJldHVybiAtRUlOVkFMOwotCXZpY3RvcmlhX2ZhbGxzID0gKG9wLT5kZXYub2ZfbWF0Y2gtPmRhdGEgIT0gTlVMTCk7CisJdmljdG9yaWFfZmFsbHMgPSAobWF0Y2gtPmRhdGEgIT0gTlVMTCk7CiAKIAluMnJuZ19kcml2ZXJfdmVyc2lvbigpOwogCW5wID0ga3phbGxvYyhzaXplb2YoKm5wKSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCmluZGV4IGNjNmM5YjIuLjY0YzZiODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCkBAIC0yNTU0LDkgKzI1NTQsMTEgQEAKIH07CiAjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBpcG1pX21hdGNoW107CiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpcG1pX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKICNpZmRlZiBDT05GSUdfT0YKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKIAlzdHJ1Y3Qgc21pX2luZm8gKmluZm87CiAJc3RydWN0IHJlc291cmNlIHJlc291cmNlOwogCWNvbnN0IF9fYmUzMiAqcmVnc2l6ZSwgKnJlZ3NwYWNpbmcsICpyZWdzaGlmdDsKQEAgLTI1NjYsNyArMjU2OCw4IEBACiAKIAlkZXZfaW5mbygmZGV2LT5kZXYsICJwcm9iaW5nIHZpYSBkZXZpY2UgdHJlZVxuIik7CiAKLQlpZiAoIWRldi0+ZGV2Lm9mX21hdGNoKQorCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKGlwbWlfbWF0Y2gsICZkZXYtPmRldik7CisJaWYgKCFtYXRjaCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXQgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmcmVzb3VyY2UpOwpAQCAtMjYwMSw3ICsyNjA0LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaW5mby0+c2lfdHlwZQkJPSAoZW51bSBzaV90eXBlKSBkZXYtPmRldi5vZl9tYXRjaC0+ZGF0YTsKKwlpbmZvLT5zaV90eXBlCQk9IChlbnVtIHNpX3R5cGUpIG1hdGNoLT5kYXRhOwogCWluZm8tPmFkZHJfc291cmNlCT0gU0lfREVWSUNFVFJFRTsKIAlpbmZvLT5pcnFfc2V0dXAJCT0gc3RkX2lycV9zZXR1cDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21lbS5jIGIvZHJpdmVycy9jaGFyL21lbS5jCmluZGV4IDQzNmE5OTAuLjhmYzA0YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9tZW0uYworKysgYi9kcml2ZXJzL2NoYXIvbWVtLmMKQEAgLTgwNiwyOSArODA2LDQxIEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzc2l6ZV90IGttc2dfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCi0JCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQorc3RhdGljIHNzaXplX3Qga21zZ193cml0ZXYoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKml2LAorCQkJICAgdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IHBvcykKIHsKLQljaGFyICp0bXA7Ci0Jc3NpemVfdCByZXQ7CisJY2hhciAqbGluZSwgKnA7CisJaW50IGk7CisJc3NpemVfdCByZXQgPSAtRUZBVUxUOworCXNpemVfdCBsZW4gPSBpb3ZfbGVuZ3RoKGl2LCBjb3VudCk7CiAKLQl0bXAgPSBrbWFsbG9jKGNvdW50ICsgMSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHRtcCA9PSBOVUxMKQorCWxpbmUgPSBrbWFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOworCWlmIChsaW5lID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCXJldCA9IC1FRkFVTFQ7Ci0JaWYgKCFjb3B5X2Zyb21fdXNlcih0bXAsIGJ1ZiwgY291bnQpKSB7Ci0JCXRtcFtjb3VudF0gPSAwOwotCQlyZXQgPSBwcmludGsoIiVzIiwgdG1wKTsKLQkJaWYgKHJldCA+IGNvdW50KQotCQkJLyogcHJpbnRrIGNhbiBhZGQgYSBwcmVmaXggKi8KLQkJCXJldCA9IGNvdW50OworCisJLyoKKwkgKiBjb3B5IGFsbCB2ZWN0b3JzIGludG8gYSBzaW5nbGUgc3RyaW5nLCB0byBlbnN1cmUgd2UgZG8KKwkgKiBub3QgaW50ZXJsZWF2ZSBvdXIgbG9nIGxpbmUgd2l0aCBvdGhlciBwcmludGsgY2FsbHMKKwkgKi8KKwlwID0gbGluZTsKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpZiAoY29weV9mcm9tX3VzZXIocCwgaXZbaV0uaW92X2Jhc2UsIGl2W2ldLmlvdl9sZW4pKQorCQkJZ290byBvdXQ7CisJCXAgKz0gaXZbaV0uaW92X2xlbjsKIAl9Ci0Ja2ZyZWUodG1wKTsKKwlwWzBdID0gJ1wwJzsKKworCXJldCA9IHByaW50aygiJXMiLCBsaW5lKTsKKwkvKiBwcmludGsgY2FuIGFkZCBhIHByZWZpeCAqLworCWlmIChyZXQgPiBsZW4pCisJCXJldCA9IGxlbjsKK291dDoKKwlrZnJlZShsaW5lKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBrbXNnX2ZvcHMgPSB7Ci0JLndyaXRlID0ga21zZ193cml0ZSwKKwkuYWlvX3dyaXRlID0ga21zZ193cml0ZXYsCiAJLmxsc2VlayA9IG5vb3BfbGxzZWVrLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jhdy5jIGIvZHJpdmVycy9jaGFyL3Jhdy5jCmluZGV4IGI0YjlkNWEuLmIzM2U4ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yYXcuYworKysgYi9kcml2ZXJzL2NoYXIvcmF3LmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKQEAgLTMwLDEwICszMSwxNSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGFzcyAqcmF3X2NsYXNzOwotc3RhdGljIHN0cnVjdCByYXdfZGV2aWNlX2RhdGEgcmF3X2RldmljZXNbTUFYX1JBV19NSU5PUlNdOworc3RhdGljIHN0cnVjdCByYXdfZGV2aWNlX2RhdGEgKnJhd19kZXZpY2VzOwogc3RhdGljIERFRklORV9NVVRFWChyYXdfbXV0ZXgpOwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmF3X2N0bF9mb3BzOyAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uICovCiAKK3N0YXRpYyBpbnQgbWF4X3Jhd19taW5vcnMgPSBNQVhfUkFXX01JTk9SUzsKKworbW9kdWxlX3BhcmFtKG1heF9yYXdfbWlub3JzLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtYXhfcmF3X21pbm9ycywgIk1heGltdW0gbnVtYmVyIG9mIHJhdyBkZXZpY2VzICgxLTY1NTM2KSIpOworCiAvKgogICogT3Blbi9jbG9zZSBjb2RlIGZvciByYXcgSU8uCiAgKgpAQCAtMTI1LDcgKzEzMSw3IEBACiAJc3RydWN0IHJhd19kZXZpY2VfZGF0YSAqcmF3ZGV2OwogCWludCBlcnIgPSAwOwogCi0JaWYgKG51bWJlciA8PSAwIHx8IG51bWJlciA+PSBNQVhfUkFXX01JTk9SUykKKwlpZiAobnVtYmVyIDw9IDAgfHwgbnVtYmVyID49IG1heF9yYXdfbWlub3JzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChNQUpPUihkZXYpICE9IG1ham9yIHx8IE1JTk9SKGRldikgIT0gbWlub3IpCkBAIC0zMTIsMTQgKzMxOCwyNyBAQAogCWRldl90IGRldiA9IE1LREVWKFJBV19NQUpPUiwgMCk7CiAJaW50IHJldDsKIAotCXJldCA9IHJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2LCBNQVhfUkFXX01JTk9SUywgInJhdyIpOworCWlmIChtYXhfcmF3X21pbm9ycyA8IDEgfHwgbWF4X3Jhd19taW5vcnMgPiA2NTUzNikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJyYXc6IGludmFsaWQgbWF4X3Jhd19taW5vcnMgKG11c3QgYmUiCisJCQkiIGJldHdlZW4gMSBhbmQgNjU1MzYpLCB1c2luZyAlZFxuIiwgTUFYX1JBV19NSU5PUlMpOworCQltYXhfcmF3X21pbm9ycyA9IE1BWF9SQVdfTUlOT1JTOworCX0KKworCXJhd19kZXZpY2VzID0gdm1hbGxvYyhzaXplb2Yoc3RydWN0IHJhd19kZXZpY2VfZGF0YSkgKiBtYXhfcmF3X21pbm9ycyk7CisJaWYgKCFyYXdfZGV2aWNlcykgeworCQlwcmludGsoS0VSTl9FUlIgIk5vdCBlbm91Z2ggbWVtb3J5IGZvciByYXcgZGV2aWNlIHN0cnVjdHVyZXNcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKwltZW1zZXQocmF3X2RldmljZXMsIDAsIHNpemVvZihzdHJ1Y3QgcmF3X2RldmljZV9kYXRhKSAqIG1heF9yYXdfbWlub3JzKTsKKworCXJldCA9IHJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2LCBtYXhfcmF3X21pbm9ycywgInJhdyIpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3I7CiAKIAljZGV2X2luaXQoJnJhd19jZGV2LCAmcmF3X2ZvcHMpOwotCXJldCA9IGNkZXZfYWRkKCZyYXdfY2RldiwgZGV2LCBNQVhfUkFXX01JTk9SUyk7CisJcmV0ID0gY2Rldl9hZGQoJnJhd19jZGV2LCBkZXYsIG1heF9yYXdfbWlub3JzKTsKIAlpZiAocmV0KSB7Ci0JCWtvYmplY3RfcHV0KCZyYXdfY2Rldi5rb2JqKTsKIAkJZ290byBlcnJvcl9yZWdpb247CiAJfQogCkBAIC0zMzYsOCArMzU1LDkgQEAKIAlyZXR1cm4gMDsKIAogZXJyb3JfcmVnaW9uOgotCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihkZXYsIE1BWF9SQVdfTUlOT1JTKTsKKwl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2LCBtYXhfcmF3X21pbm9ycyk7CiBlcnJvcjoKKwl2ZnJlZShyYXdfZGV2aWNlcyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzQ2LDcgKzM2Niw3IEBACiAJZGV2aWNlX2Rlc3Ryb3kocmF3X2NsYXNzLCBNS0RFVihSQVdfTUFKT1IsIDApKTsKIAljbGFzc19kZXN0cm95KHJhd19jbGFzcyk7CiAJY2Rldl9kZWwoJnJhd19jZGV2KTsKLQl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oTUtERVYoUkFXX01BSk9SLCAwKSwgTUFYX1JBV19NSU5PUlMpOworCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihSQVdfTUFKT1IsIDApLCBtYXhfcmF3X21pbm9ycyk7CiB9CiAKIG1vZHVsZV9pbml0KHJhd19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jIGIvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKaW5kZXggODRiMTY0ZC4uODM4NTY4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKKysrIGIvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKQEAgLTEyODAsMTggKzEyODAsNyBAQAogCQlzcGluX2xvY2tfaXJxKCZwZHJ2ZGF0YV9sb2NrKTsKIAkJbGlzdF9kZWwoJnBvcnQtPmNvbnMubGlzdCk7CiAJCXNwaW5fdW5sb2NrX2lycSgmcGRydmRhdGFfbG9jayk7Ci0jaWYgMAotCQkvKgotCQkgKiBodmNfcmVtb3ZlKCkgbm90IGNhbGxlZCBhcyByZW1vdmluZyBvbmUgaHZjIHBvcnQKLQkJICogcmVzdWx0cyBpbiBvdGhlciBodmMgcG9ydHMgZ2V0dGluZyBmcm96ZW4uCi0JCSAqCi0JCSAqIE9uY2UgdGhpcyBpcyByZXNvbHZlZCBpbiBodmMsIHRoaXMgZnVuY3Rpb25hbGl0eQotCQkgKiB3aWxsIGJlIGVuYWJsZWQuICBUaWxsIHRoYXQgaXMgZG9uZSwgdGhlIC1FUElQRQotCQkgKiByZXR1cm4gZnJvbSBnZXRfY2hhcnMoKSBhYm92ZSB3aWxsIGhlbHAKLQkJICogaHZjX2NvbnNvbGUuYyB0byBjbGVhbiB1cCBvbiBwb3J0cyB3ZSByZW1vdmUgaGVyZS4KLQkJICovCiAJCWh2Y19yZW1vdmUocG9ydC0+Y29ucy5odmMpOwotI2VuZGlmCiAJfQogCiAJLyogUmVtb3ZlIHVudXNlZCBkYXRhIHRoaXMgcG9ydCBtaWdodCBoYXZlIHJlY2VpdmVkLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3hpbGlueF9od2ljYXAveGlsaW54X2h3aWNhcC5jIGIvZHJpdmVycy9jaGFyL3hpbGlueF9od2ljYXAveGlsaW54X2h3aWNhcC5jCmluZGV4IGQ2NDEyYzEuLjM5Y2NkZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci94aWxpbnhfaHdpY2FwL3hpbGlueF9od2ljYXAuYworKysgYi9kcml2ZXJzL2NoYXIveGlsaW54X2h3aWNhcC94aWxpbnhfaHdpY2FwLmMKQEAgLTcxNSwxMyArNzE1LDEzIEBACiB9CiAKICNpZmRlZiBDT05GSUdfT0YKLXN0YXRpYyBpbnQgX19kZXZpbml0IGh3aWNhcF9vZl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGh3aWNhcF9vZl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBod2ljYXBfZHJpdmVyX2NvbmZpZyAqY29uZmlnKQogewogCXN0cnVjdCByZXNvdXJjZSByZXM7CiAJY29uc3QgdW5zaWduZWQgaW50ICppZDsKIAljb25zdCBjaGFyICpmYW1pbHk7CiAJaW50IHJjOwotCWNvbnN0IHN0cnVjdCBod2ljYXBfZHJpdmVyX2NvbmZpZyAqY29uZmlnID0gb3AtPmRldi5vZl9tYXRjaC0+ZGF0YTsKIAljb25zdCBzdHJ1Y3QgY29uZmlnX3JlZ2lzdGVycyAqcmVnczsKIAogCkBAIC03NTEsMjAgKzc1MSwyNCBAQAogCQkJcmVncyk7CiB9CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgaHdpY2FwX29mX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wKQorc3RhdGljIGlubGluZSBpbnQgaHdpY2FwX29mX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wLAorCQkJCSAgY29uc3Qgc3RydWN0IGh3aWNhcF9kcml2ZXJfY29uZmlnICpjb25maWcpCiB7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAjZW5kaWYgLyogQ09ORklHX09GICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIF9fZGV2aW5pdGNvbnN0IGh3aWNhcF9vZl9tYXRjaFtdOwogc3RhdGljIGludCBfX2RldmluaXQgaHdpY2FwX2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogeworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCWNvbnN0IHN0cnVjdCBjb25maWdfcmVnaXN0ZXJzICpyZWdzOwogCWNvbnN0IGNoYXIgKmZhbWlseTsKIAotCWlmIChwZGV2LT5kZXYub2ZfbWF0Y2gpCi0JCXJldHVybiBod2ljYXBfb2ZfcHJvYmUocGRldik7CisJbWF0Y2ggPSBvZl9tYXRjaF9kZXZpY2UoaHdpY2FwX29mX21hdGNoLCAmcGRldi0+ZGV2KTsKKwlpZiAobWF0Y2gpCisJCXJldHVybiBod2ljYXBfb2ZfcHJvYmUocGRldiwgbWF0Y2gtPmRhdGEpOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIXJlcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2Nsa2Rldi5jIGIvZHJpdmVycy9jbGsvY2xrZGV2LmMKaW5kZXggMGZjMGE3OS4uNmRiMTYxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvY2xrZGV2LmMKKysrIGIvZHJpdmVycy9jbGsvY2xrZGV2LmMKQEAgLTMyLDEwICszMiw5IEBACiAgKiBUaGVuIHdlIHRha2UgdGhlIG1vc3Qgc3BlY2lmaWMgZW50cnkgLSB3aXRoIHRoZSBmb2xsb3dpbmcKICAqIG9yZGVyIG9mIHByZWNlZGVuY2U6IGRlditjb24gPiBkZXYgb25seSA+IGNvbiBvbmx5LgogICovCi1zdGF0aWMgc3RydWN0IGNsayAqY2xrX2ZpbmQoY29uc3QgY2hhciAqZGV2X2lkLCBjb25zdCBjaGFyICpjb25faWQpCitzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgKmNsa19maW5kKGNvbnN0IGNoYXIgKmRldl9pZCwgY29uc3QgY2hhciAqY29uX2lkKQogewotCXN0cnVjdCBjbGtfbG9va3VwICpwOwotCXN0cnVjdCBjbGsgKmNsayA9IE5VTEw7CisJc3RydWN0IGNsa19sb29rdXAgKnAsICpjbCA9IE5VTEw7CiAJaW50IG1hdGNoLCBiZXN0ID0gMDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmNsb2Nrcywgbm9kZSkgewpAQCAtNTIsMjcgKzUxLDI3IEBACiAJCX0KIAogCQlpZiAobWF0Y2ggPiBiZXN0KSB7Ci0JCQljbGsgPSBwLT5jbGs7CisJCQljbCA9IHA7CiAJCQlpZiAobWF0Y2ggIT0gMykKIAkJCQliZXN0ID0gbWF0Y2g7CiAJCQllbHNlCiAJCQkJYnJlYWs7CiAJCX0KIAl9Ci0JcmV0dXJuIGNsazsKKwlyZXR1cm4gY2w7CiB9CiAKIHN0cnVjdCBjbGsgKmNsa19nZXRfc3lzKGNvbnN0IGNoYXIgKmRldl9pZCwgY29uc3QgY2hhciAqY29uX2lkKQogewotCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgY2xrX2xvb2t1cCAqY2w7CiAKIAltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOwotCWNsayA9IGNsa19maW5kKGRldl9pZCwgY29uX2lkKTsKLQlpZiAoY2xrICYmICFfX2Nsa19nZXQoY2xrKSkKLQkJY2xrID0gTlVMTDsKKwljbCA9IGNsa19maW5kKGRldl9pZCwgY29uX2lkKTsKKwlpZiAoY2wgJiYgIV9fY2xrX2dldChjbC0+Y2xrKSkKKwkJY2wgPSBOVUxMOwogCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKIAotCXJldHVybiBjbGsgPyBjbGsgOiBFUlJfUFRSKC1FTk9FTlQpOworCXJldHVybiBjbCA/IGNsLT5jbGsgOiBFUlJfUFRSKC1FTk9FTlQpOwogfQogRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3N5cyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvS2NvbmZpZyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTBhZWViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9LY29uZmlnCkBAIC0wLDAgKzEsMiBAQAorY29uZmlnIENMS1NSQ19JODI1MworCWJvb2wKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvTWFrZWZpbGUgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL01ha2VmaWxlCmluZGV4IGJlNjFlY2UuLmNmYjYzODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9NYWtlZmlsZQpAQCAtNiwzICs2LDQgQEAKIG9iai0kKENPTkZJR19TSF9USU1FUl9DTVQpCSs9IHNoX2NtdC5vCiBvYmotJChDT05GSUdfU0hfVElNRVJfTVRVMikJKz0gc2hfbXR1Mi5vCiBvYmotJChDT05GSUdfU0hfVElNRVJfVE1VKQkrPSBzaF90bXUubworb2JqLSQoQ09ORklHX0NMS1NSQ19JODI1MykJKz0gaTgyNTMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9jeWNsb25lLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2N5Y2xvbmUuYwppbmRleCA2NGU1MjhlLi43MmY4MTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2N5Y2xvbmUuYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2N5Y2xvbmUuYwpAQCAtMjksOCArMjksNiBAQAogCS5yYXRpbmcJCT0gMjUwLAogCS5yZWFkCQk9IHJlYWRfY3ljbG9uZSwKIAkubWFzawkJPSBDWUNMT05FX1RJTUVSX01BU0ssCi0JLm11bHQJCT0gMTAsCi0JLnNoaWZ0CQk9IDAsCiAJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIApAQCAtMTA4LDEyICsxMDYsOCBAQAogCX0KIAljeWNsb25lX3B0ciA9IGN5Y2xvbmVfdGltZXI7CiAKLQkvKiBzb3J0IG91dCBtdWx0L3NoaWZ0IHZhbHVlczogKi8KLQljbG9ja3NvdXJjZV9jeWNsb25lLnNoaWZ0ID0gMjI7Ci0JY2xvY2tzb3VyY2VfY3ljbG9uZS5tdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChDWUNMT05FX1RJTUVSX0ZSRVEsCi0JCQkJCQljbG9ja3NvdXJjZV9jeWNsb25lLnNoaWZ0KTsKLQotCXJldHVybiBjbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfY3ljbG9uZSk7CisJcmV0dXJuIGNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZjbG9ja3NvdXJjZV9jeWNsb25lLAorCQkJCQlDWUNMT05FX1RJTUVSX0ZSRVEpOwogfQogCiBhcmNoX2luaXRjYWxsKGluaXRfY3ljbG9uZV9jbG9ja3NvdXJjZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2k4MjUzLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2k4MjUzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI1YzE3NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvaTgyNTMuYwpAQCAtMCwwICsxLDg4IEBACisvKgorICogaTgyNTMgUElUIGNsb2Nrc291cmNlCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKworI2luY2x1ZGUgPGFzbS9pODI1My5oPgorCisvKgorICogU2luY2UgdGhlIFBJVCBvdmVyZmxvd3MgZXZlcnkgdGljaywgaXRzIG5vdCB2ZXJ5IHVzZWZ1bAorICogdG8ganVzdCByZWFkIGJ5IGl0c2VsZi4gU28gdXNlIGppZmZpZXMgdG8gZW11bGF0ZSBhIGZyZWUKKyAqIHJ1bm5pbmcgY291bnRlcjoKKyAqLworc3RhdGljIGN5Y2xlX3QgaTgyNTNfcmVhZChzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQoreworCXN0YXRpYyBpbnQgb2xkX2NvdW50OworCXN0YXRpYyB1MzIgb2xkX2ppZnM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgY291bnQ7CisJdTMyIGppZnM7CisKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjUzX2xvY2ssIGZsYWdzKTsKKwkvKgorCSAqIEFsdGhvdWdoIG91ciBjYWxsZXIgbWF5IGhhdmUgdGhlIHJlYWQgc2lkZSBvZiB4dGltZV9sb2NrLAorCSAqIHRoaXMgaXMgbm93IGEgc2VxbG9jaywgYW5kIHdlIGFyZSBjaGVhdGluZyBpbiB0aGlzIHJvdXRpbmUKKwkgKiBieSBoYXZpbmcgc2lkZSBlZmZlY3RzIG9uIHN0YXRlIHRoYXQgd2UgY2Fubm90IHVuZG8gaWYKKwkgKiB0aGVyZSBpcyBhIGNvbGxpc2lvbiBvbiB0aGUgc2VxbG9jayBhbmQgb3VyIGNhbGxlciBoYXMgdG8KKwkgKiByZXRyeS4gIChOYW1lbHksIG9sZF9qaWZzIGFuZCBvbGRfY291bnQuKSAgU28gd2UgbXVzdCB0cmVhdAorCSAqIGppZmZpZXMgYXMgdm9sYXRpbGUgZGVzcGl0ZSB0aGUgbG9jay4gIFdlIHJlYWQgamlmZmllcworCSAqIGJlZm9yZSBsYXRjaGluZyB0aGUgdGltZXIgY291bnQgdG8gZ3VhcmFudGVlIHRoYXQgYWx0aG91Z2gKKwkgKiB0aGUgamlmZmllcyB2YWx1ZSBtaWdodCBiZSBvbGRlciB0aGFuIHRoZSBjb3VudCAodGhhdCBpcywKKwkgKiB0aGUgY291bnRlciBtYXkgdW5kZXJmbG93IGJldHdlZW4gdGhlIGxhc3QgcG9pbnQgd2hlcmUKKwkgKiBqaWZmaWVzIHdhcyBpbmNyZW1lbnRlZCBhbmQgdGhlIHBvaW50IHdoZXJlIHdlIGxhdGNoIHRoZQorCSAqIGNvdW50KSwgaXQgY2Fubm90IGJlIG5ld2VyLgorCSAqLworCWppZnMgPSBqaWZmaWVzOworCW91dGJfcGl0KDB4MDAsIFBJVF9NT0RFKTsJLyogbGF0Y2ggdGhlIGNvdW50IEFTQVAgKi8KKwljb3VudCA9IGluYl9waXQoUElUX0NIMCk7CS8qIHJlYWQgdGhlIGxhdGNoZWQgY291bnQgKi8KKwljb3VudCB8PSBpbmJfcGl0KFBJVF9DSDApIDw8IDg7CisKKwkvKiBWSUE2ODZhIHRlc3QgY29kZS4uLiByZXNldCB0aGUgbGF0Y2ggaWYgY291bnQgPiBtYXggKyAxICovCisJaWYgKGNvdW50ID4gTEFUQ0gpIHsKKwkJb3V0Yl9waXQoMHgzNCwgUElUX01PREUpOworCQlvdXRiX3BpdChQSVRfTEFUQ0ggJiAweGZmLCBQSVRfQ0gwKTsKKwkJb3V0Yl9waXQoUElUX0xBVENIID4+IDgsIFBJVF9DSDApOworCQljb3VudCA9IFBJVF9MQVRDSCAtIDE7CisJfQorCisJLyoKKwkgKiBJdCdzIHBvc3NpYmxlIGZvciBjb3VudCB0byBhcHBlYXIgdG8gZ28gdGhlIHdyb25nIHdheSBmb3IgYQorCSAqIGNvdXBsZSBvZiByZWFzb25zOgorCSAqCisJICogIDEuIFRoZSB0aW1lciBjb3VudGVyIHVuZGVyZmxvd3MsIGJ1dCB3ZSBoYXZlbid0IGhhbmRsZWQgdGhlCisJICogICAgIHJlc3VsdGluZyBpbnRlcnJ1cHQgYW5kIGluY3JlbWVudGVkIGppZmZpZXMgeWV0LgorCSAqICAyLiBIYXJkd2FyZSBwcm9ibGVtIHdpdGggdGhlIHRpbWVyLCBub3QgZ2l2aW5nIHVzIGNvbnRpbnVvdXMgdGltZSwKKwkgKiAgICAgdGhlIGNvdW50ZXIgZG9lcyBzbWFsbCAianVtcHMiIHVwd2FyZHMgb24gc29tZSBQZW50aXVtIHN5c3RlbXMsCisJICogICAgIChzZWUgYyd0IDk1LzEwIHBhZ2UgMzM1IGZvciBOZXB0dW4gYnVnLikKKwkgKgorCSAqIFByZXZpb3VzIGF0dGVtcHRzIHRvIGhhbmRsZSB0aGVzZSBjYXNlcyBpbnRlbGxpZ2VudGx5IHdlcmUKKwkgKiBidWdneSwgc28gd2UganVzdCBkbyB0aGUgc2ltcGxlIHRoaW5nIG5vdy4KKwkgKi8KKwlpZiAoY291bnQgPiBvbGRfY291bnQgJiYgamlmcyA9PSBvbGRfamlmcykKKwkJY291bnQgPSBvbGRfY291bnQ7CisKKwlvbGRfY291bnQgPSBjb3VudDsKKwlvbGRfamlmcyA9IGppZnM7CisKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTNfbG9jaywgZmxhZ3MpOworCisJY291bnQgPSAoUElUX0xBVENIIC0gMSkgLSBjb3VudDsKKworCXJldHVybiAoY3ljbGVfdCkoamlmcyAqIFBJVF9MQVRDSCkgKyBjb3VudDsKK30KKworc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBpODI1M19jcyA9IHsKKwkubmFtZQkJPSAicGl0IiwKKwkucmF0aW5nCQk9IDExMCwKKwkucmVhZAkJPSBpODI1M19yZWFkLAorCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soMzIpLAorfTsKKworaW50IF9faW5pdCBjbG9ja3NvdXJjZV9pODI1M19pbml0KHZvaWQpCit7CisJcmV0dXJuIGNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZpODI1M19jcywgUElUX1RJQ0tfUkFURSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvS2NvbmZpZyBiL2RyaXZlcnMvY3B1ZnJlcS9LY29uZmlnCmluZGV4IGNhOGVlODAuLjlmYjg0ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9LY29uZmlnCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9LY29uZmlnCkBAIC0xLDMgKzEsNSBAQAorbWVudSAiQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nIgorCiBjb25maWcgQ1BVX0ZSRVEKIAlib29sICJDUFUgRnJlcXVlbmN5IHNjYWxpbmciCiAJaGVscApAQCAtMTgsMTkgKzIwLDYgQEAKIGNvbmZpZyBDUFVfRlJFUV9UQUJMRQogCXRyaXN0YXRlCiAKLWNvbmZpZyBDUFVfRlJFUV9ERUJVRwotCWJvb2wgIkVuYWJsZSBDUFVmcmVxIGRlYnVnZ2luZyIKLQloZWxwCi0JICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBDUFVmcmVxIHN1YnN5c3RlbSAoaW5jbHVkaW5nIGRyaXZlcnMpCi0JICBkZWJ1Z2dpbmcuIFlvdSB3aWxsIG5lZWQgdG8gYWN0aXZhdGUgaXQgdmlhIHRoZSBrZXJuZWwKLQkgIGNvbW1hbmQgbGluZSBieSBwYXNzaW5nCi0JICAgICBjcHVmcmVxLmRlYnVnPTx2YWx1ZT4KLQotCSAgVG8gZ2V0IDx2YWx1ZT4sIGFkZCAKLQkgICAgICAgMSB0byBhY3RpdmF0ZSBDUFVmcmVxIGNvcmUgZGVidWdnaW5nLAotCSAgICAgICAyIHRvIGFjdGl2YXRlIENQVWZyZXEgZHJpdmVycyBkZWJ1Z2dpbmcsIGFuZAotCSAgICAgICA0IHRvIGFjdGl2YXRlIENQVWZyZXEgZ292ZXJub3IgZGVidWdnaW5nCi0KIGNvbmZpZyBDUFVfRlJFUV9TVEFUCiAJdHJpc3RhdGUgIkNQVSBmcmVxdWVuY3kgdHJhbnNsYXRpb24gc3RhdGlzdGljcyIKIAlzZWxlY3QgQ1BVX0ZSRVFfVEFCTEUKQEAgLTE5MCw0ICsxNzksMTAgQEAKIAogCSAgSWYgaW4gZG91YnQsIHNheSBOLgogCi1lbmRpZgkjIENQVV9GUkVRCittZW51ICJ4ODYgQ1BVIGZyZXF1ZW5jeSBzY2FsaW5nIGRyaXZlcnMiCitkZXBlbmRzIG9uIFg4Ngorc291cmNlICJkcml2ZXJzL2NwdWZyZXEvS2NvbmZpZy54ODYiCitlbmRtZW51CisKK2VuZGlmCitlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvS2NvbmZpZyBiL2RyaXZlcnMvY3B1ZnJlcS9LY29uZmlnLng4NgpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvS2NvbmZpZwpyZW5hbWUgdG8gZHJpdmVycy9jcHVmcmVxL0tjb25maWcueDg2CmluZGV4IDg3MGU2Y2MuLjc4ZmY3ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9LY29uZmlnCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9LY29uZmlnLng4NgpAQCAtMSwxNSArMSw3IEBACiAjCi0jIENQVSBGcmVxdWVuY3kgc2NhbGluZworIyB4ODYgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nIGRyaXZlcnMKICMKIAotbWVudSAiQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nIgotCi1zb3VyY2UgImRyaXZlcnMvY3B1ZnJlcS9LY29uZmlnIgotCi1pZiBDUFVfRlJFUQotCi1jb21tZW50ICJDUFVGcmVxIHByb2Nlc3NvciBkcml2ZXJzIgotCiBjb25maWcgWDg2X1BDQ19DUFVGUkVRCiAJdHJpc3RhdGUgIlByb2Nlc3NvciBDbG9ja2luZyBDb250cm9sIGludGVyZmFjZSBkcml2ZXIiCiAJZGVwZW5kcyBvbiBBQ1BJICYmIEFDUElfUFJPQ0VTU09SCkBAIC00Myw3ICszNSw3IEBACiBjb25maWcgRUxBTl9DUFVGUkVRCiAJdHJpc3RhdGUgIkFNRCBFbGFuIFNDNDAwIGFuZCBTQzQxMCIKIAlzZWxlY3QgQ1BVX0ZSRVFfVEFCTEUKLQlkZXBlbmRzIG9uIFg4Nl9FTEFOCisJZGVwZW5kcyBvbiBNRUxBTgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgYWRkcyB0aGUgQ1BVRnJlcSBkcml2ZXIgZm9yIEFNRCBFbGFuIFNDNDAwIGFuZCBTQzQxMAogCSAgcHJvY2Vzc29ycy4KQEAgLTU5LDcgKzUxLDcgQEAKIGNvbmZpZyBTQzUyMF9DUFVGUkVRCiAJdHJpc3RhdGUgIkFNRCBFbGFuIFNDNTIwIgogCXNlbGVjdCBDUFVfRlJFUV9UQUJMRQotCWRlcGVuZHMgb24gWDg2X0VMQU4KKwlkZXBlbmRzIG9uIE1FTEFOCiAJLS0taGVscC0tLQogCSAgVGhpcyBhZGRzIHRoZSBDUFVGcmVxIGRyaXZlciBmb3IgQU1EIEVsYW4gU0M1MjAgcHJvY2Vzc29yLgogCkBAIC0yNjEsNiArMjUzLDMgQEAKIAkgIG9wdGlvbiBsZXRzIHRoZSBwcm9iaW5nIGNvZGUgYnlwYXNzIHNvbWUgb2YgdGhvc2UgY2hlY2tzIGlmIHRoZQogCSAgcGFyYW1ldGVyICJyZWxheGVkX2NoZWNrPTEiIGlzIHBhc3NlZCB0byB0aGUgbW9kdWxlLgogCi1lbmRpZgkjIENQVV9GUkVRCi0KLWVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9NYWtlZmlsZSBiL2RyaXZlcnMvY3B1ZnJlcS9NYWtlZmlsZQppbmRleCA3MWZjM2I0Li5jN2YxYTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jcHVmcmVxL01ha2VmaWxlCkBAIC0xMywzICsxMywyOSBAQAogIyBDUFVmcmVxIGNyb3NzLWFyY2ggaGVscGVycwogb2JqLSQoQ09ORklHX0NQVV9GUkVRX1RBQkxFKQkJKz0gZnJlcV90YWJsZS5vCiAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNkCisjIHg4NiBkcml2ZXJzLgorIyBMaW5rIG9yZGVyIG1hdHRlcnMuIEs4IGlzIHByZWZlcnJlZCB0byBBQ1BJIGJlY2F1c2Ugb2YgZmlybXdhcmUgYnVncyBpbiBlYXJseQorIyBLOCBzeXN0ZW1zLiBBQ1BJIGlzIHByZWZlcnJlZCB0byBhbGwgb3RoZXIgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycy4KKyMgc3BlZWRzdGVwLSogaXMgcHJlZmVycmVkIG92ZXIgcDQtY2xvY2ttb2QuCisKK29iai0kKENPTkZJR19YODZfUE9XRVJOT1dfSzgpCQkrPSBwb3dlcm5vdy1rOC5vIG1wZXJmLm8KK29iai0kKENPTkZJR19YODZfQUNQSV9DUFVGUkVRKQkJKz0gYWNwaS1jcHVmcmVxLm8gbXBlcmYubworb2JqLSQoQ09ORklHX1g4Nl9QQ0NfQ1BVRlJFUSkJCSs9IHBjYy1jcHVmcmVxLm8KK29iai0kKENPTkZJR19YODZfUE9XRVJOT1dfSzYpCQkrPSBwb3dlcm5vdy1rNi5vCitvYmotJChDT05GSUdfWDg2X1BPV0VSTk9XX0s3KQkJKz0gcG93ZXJub3ctazcubworb2JqLSQoQ09ORklHX1g4Nl9MT05HSEFVTCkJCSs9IGxvbmdoYXVsLm8KK29iai0kKENPTkZJR19YODZfRV9QT1dFUlNBVkVSKQkJKz0gZV9wb3dlcnNhdmVyLm8KK29iai0kKENPTkZJR19FTEFOX0NQVUZSRVEpCQkrPSBlbGFuZnJlcS5vCitvYmotJChDT05GSUdfU0M1MjBfQ1BVRlJFUSkJCSs9IHNjNTIwX2ZyZXEubworb2JqLSQoQ09ORklHX1g4Nl9MT05HUlVOKQkJKz0gbG9uZ3J1bi5vCitvYmotJChDT05GSUdfWDg2X0dYX1NVU1BNT0QpCQkrPSBneC1zdXNwbW9kLm8KK29iai0kKENPTkZJR19YODZfU1BFRURTVEVQX0lDSCkJCSs9IHNwZWVkc3RlcC1pY2gubworb2JqLSQoQ09ORklHX1g4Nl9TUEVFRFNURVBfTElCKQkJKz0gc3BlZWRzdGVwLWxpYi5vCitvYmotJChDT05GSUdfWDg2X1NQRUVEU1RFUF9TTUkpCQkrPSBzcGVlZHN0ZXAtc21pLm8KK29iai0kKENPTkZJR19YODZfU1BFRURTVEVQX0NFTlRSSU5PKQkrPSBzcGVlZHN0ZXAtY2VudHJpbm8ubworb2JqLSQoQ09ORklHX1g4Nl9QNF9DTE9DS01PRCkJCSs9IHA0LWNsb2NrbW9kLm8KK29iai0kKENPTkZJR19YODZfQ1BVRlJFUV9ORk9SQ0UyKQkrPSBjcHVmcmVxLW5mb3JjZTIubworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjZAorCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMgYi9kcml2ZXJzL2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCnJlbmFtZSB0byBkcml2ZXJzL2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKaW5kZXggYTJiYWFmYi4uNGUwNGUxMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYwpAQCAtNDcsOSArNDcsNiBAQAogI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CiAjaW5jbHVkZSAibXBlcmYuaCIKIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKLQkJImFjcGktY3B1ZnJlcSIsIG1zZykKLQogTU9EVUxFX0FVVEhPUigiUGF1bCBEaWVmZW5iYXVnaCwgRG9taW5payBCcm9kb3dza2kiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQUNQSSBQcm9jZXNzb3IgUC1TdGF0ZXMgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC0yMzMsNyArMjMwLDcgQEAKIAljbWQubWFzayA9IG1hc2s7CiAJZHJ2X3JlYWQoJmNtZCk7CiAKLQlkcHJpbnRrKCJnZXRfY3VyX3ZhbCA9ICV1XG4iLCBjbWQudmFsKTsKKwlwcl9kZWJ1ZygiZ2V0X2N1cl92YWwgPSAldVxuIiwgY21kLnZhbCk7CiAKIAlyZXR1cm4gY21kLnZhbDsKIH0KQEAgLTI0NCw3ICsyNDEsNyBAQAogCXVuc2lnbmVkIGludCBmcmVxOwogCXVuc2lnbmVkIGludCBjYWNoZWRfZnJlcTsKIAotCWRwcmludGsoImdldF9jdXJfZnJlcV9vbl9jcHUgKCVkKVxuIiwgY3B1KTsKKwlwcl9kZWJ1ZygiZ2V0X2N1cl9mcmVxX29uX2NwdSAoJWQpXG4iLCBjcHUpOwogCiAJaWYgKHVubGlrZWx5KGRhdGEgPT0gTlVMTCB8fAogCQkgICAgIGRhdGEtPmFjcGlfZGF0YSA9PSBOVUxMIHx8IGRhdGEtPmZyZXFfdGFibGUgPT0gTlVMTCkpIHsKQEAgLTI2MSw3ICsyNTgsNyBAQAogCQlkYXRhLT5yZXN1bWUgPSAxOwogCX0KIAotCWRwcmludGsoImN1ciBmcmVxID0gJXVcbiIsIGZyZXEpOworCXByX2RlYnVnKCJjdXIgZnJlcSA9ICV1XG4iLCBmcmVxKTsKIAogCXJldHVybiBmcmVxOwogfQpAQCAtMjkzLDcgKzI5MCw3IEBACiAJdW5zaWduZWQgaW50IGk7CiAJaW50IHJlc3VsdCA9IDA7CiAKLQlkcHJpbnRrKCJhY3BpX2NwdWZyZXFfdGFyZ2V0ICVkICglZClcbiIsIHRhcmdldF9mcmVxLCBwb2xpY3ktPmNwdSk7CisJcHJfZGVidWcoImFjcGlfY3B1ZnJlcV90YXJnZXQgJWQgKCVkKVxuIiwgdGFyZ2V0X2ZyZXEsIHBvbGljeS0+Y3B1KTsKIAogCWlmICh1bmxpa2VseShkYXRhID09IE5VTEwgfHwKIAkgICAgIGRhdGEtPmFjcGlfZGF0YSA9PSBOVUxMIHx8IGRhdGEtPmZyZXFfdGFibGUgPT0gTlVMTCkpIHsKQEAgLTMxMywxMSArMzEwLDExIEBACiAJbmV4dF9wZXJmX3N0YXRlID0gZGF0YS0+ZnJlcV90YWJsZVtuZXh0X3N0YXRlXS5pbmRleDsKIAlpZiAocGVyZi0+c3RhdGUgPT0gbmV4dF9wZXJmX3N0YXRlKSB7CiAJCWlmICh1bmxpa2VseShkYXRhLT5yZXN1bWUpKSB7Ci0JCQlkcHJpbnRrKCJDYWxsZWQgYWZ0ZXIgcmVzdW1lLCByZXNldHRpbmcgdG8gUCVkXG4iLAorCQkJcHJfZGVidWcoIkNhbGxlZCBhZnRlciByZXN1bWUsIHJlc2V0dGluZyB0byBQJWRcbiIsCiAJCQkJbmV4dF9wZXJmX3N0YXRlKTsKIAkJCWRhdGEtPnJlc3VtZSA9IDA7CiAJCX0gZWxzZSB7Ci0JCQlkcHJpbnRrKCJBbHJlYWR5IGF0IHRhcmdldCBzdGF0ZSAoUCVkKVxuIiwKKwkJCXByX2RlYnVnKCJBbHJlYWR5IGF0IHRhcmdldCBzdGF0ZSAoUCVkKVxuIiwKIAkJCQluZXh0X3BlcmZfc3RhdGUpOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTM1Nyw3ICszNTQsNyBAQAogCiAJaWYgKGFjcGlfcHN0YXRlX3N0cmljdCkgewogCQlpZiAoIWNoZWNrX2ZyZXFzKGNtZC5tYXNrLCBmcmVxcy5uZXcsIGRhdGEpKSB7Ci0JCQlkcHJpbnRrKCJhY3BpX2NwdWZyZXFfdGFyZ2V0IGZhaWxlZCAoJWQpXG4iLAorCQkJcHJfZGVidWcoImFjcGlfY3B1ZnJlcV90YXJnZXQgZmFpbGVkICglZClcbiIsCiAJCQkJcG9saWN5LT5jcHUpOwogCQkJcmVzdWx0ID0gLUVBR0FJTjsKIAkJCWdvdG8gb3V0OwpAQCAtMzc4LDcgKzM3NSw3IEBACiB7CiAJc3RydWN0IGFjcGlfY3B1ZnJlcV9kYXRhICpkYXRhID0gcGVyX2NwdShhY2ZyZXFfZGF0YSwgcG9saWN5LT5jcHUpOwogCi0JZHByaW50aygiYWNwaV9jcHVmcmVxX3ZlcmlmeVxuIik7CisJcHJfZGVidWcoImFjcGlfY3B1ZnJlcV92ZXJpZnlcbiIpOwogCiAJcmV0dXJuIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3ZlcmlmeShwb2xpY3ksIGRhdGEtPmZyZXFfdGFibGUpOwogfQpAQCAtNDMzLDExICs0MzAsMTEgQEAKIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfY3B1ZnJlcV9lYXJseV9pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGk7Ci0JZHByaW50aygiYWNwaV9jcHVmcmVxX2Vhcmx5X2luaXRcbiIpOworCXByX2RlYnVnKCJhY3BpX2NwdWZyZXFfZWFybHlfaW5pdFxuIik7CiAKIAlhY3BpX3BlcmZfZGF0YSA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UpOwogCWlmICghYWNwaV9wZXJmX2RhdGEpIHsKLQkJZHByaW50aygiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3IgZm9yIGFjcGlfcGVyZl9kYXRhLlxuIik7CisJCXByX2RlYnVnKCJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvciBmb3IgYWNwaV9wZXJmX2RhdGEuXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CkBAIC01MTksNyArNTE2LDcgQEAKIAlzdGF0aWMgaW50IGJsYWNrbGlzdGVkOwogI2VuZGlmCiAKLQlkcHJpbnRrKCJhY3BpX2NwdWZyZXFfY3B1X2luaXRcbiIpOworCXByX2RlYnVnKCJhY3BpX2NwdWZyZXFfY3B1X2luaXRcbiIpOwogCiAjaWZkZWYgQ09ORklHX1NNUAogCWlmIChibGFja2xpc3RlZCkKQEAgLTU2Niw3ICs1NjMsNyBAQAogCiAJLyogY2FwYWJpbGl0eSBjaGVjayAqLwogCWlmIChwZXJmLT5zdGF0ZV9jb3VudCA8PSAxKSB7Ci0JCWRwcmludGsoIk5vIFAtU3RhdGVzXG4iKTsKKwkJcHJfZGVidWcoIk5vIFAtU3RhdGVzXG4iKTsKIAkJcmVzdWx0ID0gLUVOT0RFVjsKIAkJZ290byBlcnJfdW5yZWc7CiAJfQpAQCAtNTc4LDExICs1NzUsMTEgQEAKIAogCXN3aXRjaCAocGVyZi0+Y29udHJvbF9yZWdpc3Rlci5zcGFjZV9pZCkgewogCWNhc2UgQUNQSV9BRFJfU1BBQ0VfU1lTVEVNX0lPOgotCQlkcHJpbnRrKCJTWVNURU0gSU8gYWRkciBzcGFjZVxuIik7CisJCXByX2RlYnVnKCJTWVNURU0gSU8gYWRkciBzcGFjZVxuIik7CiAJCWRhdGEtPmNwdV9mZWF0dXJlID0gU1lTVEVNX0lPX0NBUEFCTEU7CiAJCWJyZWFrOwogCWNhc2UgQUNQSV9BRFJfU1BBQ0VfRklYRURfSEFSRFdBUkU6Ci0JCWRwcmludGsoIkhBUkRXQVJFIGFkZHIgc3BhY2VcbiIpOworCQlwcl9kZWJ1ZygiSEFSRFdBUkUgYWRkciBzcGFjZVxuIik7CiAJCWlmICghY2hlY2tfZXN0X2NwdShjcHUpKSB7CiAJCQlyZXN1bHQgPSAtRU5PREVWOwogCQkJZ290byBlcnJfdW5yZWc7CkBAIC01OTAsNyArNTg3LDcgQEAKIAkJZGF0YS0+Y3B1X2ZlYXR1cmUgPSBTWVNURU1fSU5URUxfTVNSX0NBUEFCTEU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWRwcmludGsoIlVua25vd24gYWRkciBzcGFjZSAlZFxuIiwKKwkJcHJfZGVidWcoIlVua25vd24gYWRkciBzcGFjZSAlZFxuIiwKIAkJCSh1MzIpIChwZXJmLT5jb250cm9sX3JlZ2lzdGVyLnNwYWNlX2lkKSk7CiAJCXJlc3VsdCA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX3VucmVnOwpAQCAtNjYxLDkgKzY1OCw5IEBACiAJaWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfQVBFUkZNUEVSRikpCiAJCWFjcGlfY3B1ZnJlcV9kcml2ZXIuZ2V0YXZnID0gY3B1ZnJlcV9nZXRfbWVhc3VyZWRfcGVyZjsKIAotCWRwcmludGsoIkNQVSV1IC0gQUNQSSBwZXJmb3JtYW5jZSBtYW5hZ2VtZW50IGFjdGl2YXRlZC5cbiIsIGNwdSk7CisJcHJfZGVidWcoIkNQVSV1IC0gQUNQSSBwZXJmb3JtYW5jZSBtYW5hZ2VtZW50IGFjdGl2YXRlZC5cbiIsIGNwdSk7CiAJZm9yIChpID0gMDsgaSA8IHBlcmYtPnN0YXRlX2NvdW50OyBpKyspCi0JCWRwcmludGsoIiAgICAgJWNQJWQ6ICVkIE1IeiwgJWQgbVcsICVkIHVTXG4iLAorCQlwcl9kZWJ1ZygiICAgICAlY1AlZDogJWQgTUh6LCAlZCBtVywgJWQgdVNcbiIsCiAJCQkoaSA9PSBwZXJmLT5zdGF0ZSA/ICcqJyA6ICcgJyksIGksCiAJCQkodTMyKSBwZXJmLT5zdGF0ZXNbaV0uY29yZV9mcmVxdWVuY3ksCiAJCQkodTMyKSBwZXJmLT5zdGF0ZXNbaV0ucG93ZXIsCkBAIC02OTQsNyArNjkxLDcgQEAKIHsKIAlzdHJ1Y3QgYWNwaV9jcHVmcmVxX2RhdGEgKmRhdGEgPSBwZXJfY3B1KGFjZnJlcV9kYXRhLCBwb2xpY3ktPmNwdSk7CiAKLQlkcHJpbnRrKCJhY3BpX2NwdWZyZXFfY3B1X2V4aXRcbiIpOworCXByX2RlYnVnKCJhY3BpX2NwdWZyZXFfY3B1X2V4aXRcbiIpOwogCiAJaWYgKGRhdGEpIHsKIAkJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfcHV0X2F0dHIocG9saWN5LT5jcHUpOwpAQCAtNzEyLDcgKzcwOSw3IEBACiB7CiAJc3RydWN0IGFjcGlfY3B1ZnJlcV9kYXRhICpkYXRhID0gcGVyX2NwdShhY2ZyZXFfZGF0YSwgcG9saWN5LT5jcHUpOwogCi0JZHByaW50aygiYWNwaV9jcHVmcmVxX3Jlc3VtZVxuIik7CisJcHJfZGVidWcoImFjcGlfY3B1ZnJlcV9yZXN1bWVcbiIpOwogCiAJZGF0YS0+cmVzdW1lID0gMTsKIApAQCAtNzQzLDcgKzc0MCw3IEBACiAJaWYgKGFjcGlfZGlzYWJsZWQpCiAJCXJldHVybiAwOwogCi0JZHByaW50aygiYWNwaV9jcHVmcmVxX2luaXRcbiIpOworCXByX2RlYnVnKCJhY3BpX2NwdWZyZXFfaW5pdFxuIik7CiAKIAlyZXQgPSBhY3BpX2NwdWZyZXFfZWFybHlfaW5pdCgpOwogCWlmIChyZXQpCkBAIC03NTgsNyArNzU1LDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGFjcGlfY3B1ZnJlcV9leGl0KHZvaWQpCiB7Ci0JZHByaW50aygiYWNwaV9jcHVmcmVxX2V4aXRcbiIpOworCXByX2RlYnVnKCJhY3BpX2NwdWZyZXFfZXhpdFxuIik7CiAKIAljcHVmcmVxX3VucmVnaXN0ZXJfZHJpdmVyKCZhY3BpX2NwdWZyZXFfZHJpdmVyKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2NwdWZyZXEtbmZvcmNlMi5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEtbmZvcmNlMi5jCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGFyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9jcHVmcmVxLW5mb3JjZTIuYwpyZW5hbWUgdG8gZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEtbmZvcmNlMi5jCmluZGV4IDE0MWFiZWIuLjdiYWM4MDggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9jcHVmcmVxLW5mb3JjZTIuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS1uZm9yY2UyLmMKQEAgLTU3LDggKzU3LDYgQEAKIAkJIk1pbmltdW0gRlNCIHRvIHVzZSwgaWYgbm90IGRlZmluZWQ6IGN1cnJlbnQgRlNCIC0gNTAiKTsKIAogI2RlZmluZSBQRlggImNwdWZyZXEtbmZvcmNlMjogIgotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKLQkJImNwdWZyZXEtbmZvcmNlMiIsIG1zZykKIAogLyoqCiAgKiBuZm9yY2UyX2NhbGNfZnNiIC0gY2FsY3VsYXRlIEZTQgpAQCAtMjcwLDcgKzI2OCw3IEBACiAJaWYgKGZyZXFzLm9sZCA9PSBmcmVxcy5uZXcpCiAJCXJldHVybiAwOwogCi0JZHByaW50aygiT2xkIENQVSBmcmVxdWVuY3kgJWQga0h6LCBuZXcgJWQga0h6XG4iLAorCXByX2RlYnVnKCJPbGQgQ1BVIGZyZXF1ZW5jeSAlZCBrSHosIG5ldyAlZCBrSHpcbiIsCiAJICAgICAgIGZyZXFzLm9sZCwgZnJlcXMubmV3KTsKIAogCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BSRUNIQU5HRSk7CkBAIC0yODIsNyArMjgwLDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2hhbmdpbmcgRlNCIHRvICVkIGZhaWxlZFxuIiwKIAkJCXRhcmdldF9mc2IpOwogCWVsc2UKLQkJZHByaW50aygiQ2hhbmdlZCBGU0Igc3VjY2Vzc2Z1bGx5IHRvICVkXG4iLAorCQlwcl9kZWJ1ZygiQ2hhbmdlZCBGU0Igc3VjY2Vzc2Z1bGx5IHRvICVkXG4iLAogCQkJdGFyZ2V0X2ZzYik7CiAKIAkvKiBFbmFibGUgSVJRcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKaW5kZXggMmRhZmM1Yy4uMGE1YmVhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCkBAIC0zMiw5ICszMiw2IEBACiAKICNpbmNsdWRlIDx0cmFjZS9ldmVudHMvcG93ZXIuaD4KIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19DT1JFLCBcCi0JCQkJCQkiY3B1ZnJlcS1jb3JlIiwgbXNnKQotCiAvKioKICAqIFRoZSAiY3B1ZnJlcSBkcml2ZXIiIC0gdGhlIGFyY2gtIG9yIGhhcmR3YXJlLWRlcGVuZGVudCBsb3cKICAqIGxldmVsIGRyaXZlciBvZiBDUFVGcmVxIHN1cHBvcnQsIGFuZCBpdHMgc3BpbmxvY2suIFRoaXMgbG9jawpAQCAtMTgxLDkzICsxNzgsNiBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgVU5JRklFRCBERUJVRyBIRUxQRVJTICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZkZWYgQ09ORklHX0NQVV9GUkVRX0RFQlVHCi0KLS8qIHdoYXQgcGFydChzKSBvZiB0aGUgQ1BVZnJlcSBzdWJzeXN0ZW0gYXJlIGRlYnVnZ2VkPyAqLwotc3RhdGljIHVuc2lnbmVkIGludCBkZWJ1ZzsKLQotLyogaXMgdGhlIGRlYnVnIG91dHB1dCByYXRlbGltaXQnZWQgdXNpbmcgcHJpbnRrX3JhdGVsaW1pdD8gVXNlciBjYW4KLSAqIHNldCBvciBtb2RpZnkgdGhpcyB2YWx1ZS4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBkZWJ1Z19yYXRlbGltaXQgPSAxOwotCi0vKiBpcyB0aGUgcHJpbnRrX3JhdGVsaW1pdCdpbmcgZW5hYmxlZD8gSXQncyBlbmFibGVkIGFmdGVyIGEgc3VjY2Vzc2Z1bAotICogbG9hZGluZyBvZiBhIGNwdWZyZXEgZHJpdmVyLCB0ZW1wb3JhcmlseSBkaXNhYmxlZCB3aGVuIGEgbmV3IHBvbGljeQotICogaXMgc2V0LCBhbmQgZGlzYWJsZWQgdXBvbiBjcHVmcmVxIGRyaXZlciByZW1vdmFsCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGlzYWJsZV9yYXRlbGltaXQgPSAxOwotc3RhdGljIERFRklORV9TUElOTE9DSyhkaXNhYmxlX3JhdGVsaW1pdF9sb2NrKTsKLQotc3RhdGljIHZvaWQgY3B1ZnJlcV9kZWJ1Z19lbmFibGVfcmF0ZWxpbWl0KHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkaXNhYmxlX3JhdGVsaW1pdF9sb2NrLCBmbGFncyk7Ci0JaWYgKGRpc2FibGVfcmF0ZWxpbWl0KQotCQlkaXNhYmxlX3JhdGVsaW1pdC0tOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRpc2FibGVfcmF0ZWxpbWl0X2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgY3B1ZnJlcV9kZWJ1Z19kaXNhYmxlX3JhdGVsaW1pdCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGlzYWJsZV9yYXRlbGltaXRfbG9jaywgZmxhZ3MpOwotCWRpc2FibGVfcmF0ZWxpbWl0Kys7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGlzYWJsZV9yYXRlbGltaXRfbG9jaywgZmxhZ3MpOwotfQotCi12b2lkIGNwdWZyZXFfZGVidWdfcHJpbnRrKHVuc2lnbmVkIGludCB0eXBlLCBjb25zdCBjaGFyICpwcmVmaXgsCi0JCQljb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLQljaGFyIHNbMjU2XTsKLQl2YV9saXN0IGFyZ3M7Ci0JdW5zaWduZWQgaW50IGxlbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JV0FSTl9PTighcHJlZml4KTsKLQlpZiAodHlwZSAmIGRlYnVnKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZkaXNhYmxlX3JhdGVsaW1pdF9sb2NrLCBmbGFncyk7Ci0JCWlmICghZGlzYWJsZV9yYXRlbGltaXQgJiYgZGVidWdfcmF0ZWxpbWl0Ci0JCQkJCSYmICFwcmludGtfcmF0ZWxpbWl0KCkpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRpc2FibGVfcmF0ZWxpbWl0X2xvY2ssIGZsYWdzKTsKLQkJCXJldHVybjsKLQkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkaXNhYmxlX3JhdGVsaW1pdF9sb2NrLCBmbGFncyk7Ci0KLQkJbGVuID0gc25wcmludGYocywgMjU2LCBLRVJOX0RFQlVHICIlczogIiwgcHJlZml4KTsKLQotCQl2YV9zdGFydChhcmdzLCBmbXQpOwotCQlsZW4gKz0gdnNucHJpbnRmKCZzW2xlbl0sICgyNTYgLSBsZW4pLCBmbXQsIGFyZ3MpOwotCQl2YV9lbmQoYXJncyk7Ci0KLQkJcHJpbnRrKHMpOwotCi0JCVdBUk5fT04obGVuIDwgNSk7Ci0JfQotfQotRVhQT1JUX1NZTUJPTChjcHVmcmVxX2RlYnVnX3ByaW50ayk7Ci0KLQotbW9kdWxlX3BhcmFtKGRlYnVnLCB1aW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJDUFVmcmVxIGRlYnVnZ2luZzogYWRkIDEgdG8gZGVidWcgY29yZSwiCi0JCQkiIDIgdG8gZGVidWcgZHJpdmVycywgYW5kIDQgdG8gZGVidWcgZ292ZXJub3JzLiIpOwotCi1tb2R1bGVfcGFyYW0oZGVidWdfcmF0ZWxpbWl0LCB1aW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWdfcmF0ZWxpbWl0LCAiQ1BVZnJlcSBkZWJ1Z2dpbmc6IgotCQkJCQkiIHNldCB0byAwIHRvIGRpc2FibGUgcmF0ZWxpbWl0aW5nLiIpOwotCi0jZWxzZSAvKiAhQ09ORklHX0NQVV9GUkVRX0RFQlVHICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjcHVmcmVxX2RlYnVnX2VuYWJsZV9yYXRlbGltaXQodm9pZCkgeyByZXR1cm47IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjcHVmcmVxX2RlYnVnX2Rpc2FibGVfcmF0ZWxpbWl0KHZvaWQpIHsgcmV0dXJuOyB9Ci0KLSNlbmRpZiAvKiBDT05GSUdfQ1BVX0ZSRVFfREVCVUcgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgIEVYVEVSTkFMTFkgQUZGRUNUSU5HIEZSRVFVRU5DWSBDSEFOR0VTICAgICAgICAgICAgICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC0yOTEsNyArMjAxLDcgQEAKIAlpZiAoIWxfcF9qX3JlZl9mcmVxKSB7CiAJCWxfcF9qX3JlZiA9IGxvb3BzX3Blcl9qaWZmeTsKIAkJbF9wX2pfcmVmX2ZyZXEgPSBjaS0+b2xkOwotCQlkcHJpbnRrKCJzYXZpbmcgJWx1IGFzIHJlZmVyZW5jZSB2YWx1ZSBmb3IgbG9vcHNfcGVyX2ppZmZ5OyAiCisJCXByX2RlYnVnKCJzYXZpbmcgJWx1IGFzIHJlZmVyZW5jZSB2YWx1ZSBmb3IgbG9vcHNfcGVyX2ppZmZ5OyAiCiAJCQkiZnJlcSBpcyAldSBrSHpcbiIsIGxfcF9qX3JlZiwgbF9wX2pfcmVmX2ZyZXEpOwogCX0KIAlpZiAoKHZhbCA9PSBDUFVGUkVRX1BSRUNIQU5HRSAgJiYgY2ktPm9sZCA8IGNpLT5uZXcpIHx8CkBAIC0yOTksNyArMjA5LDcgQEAKIAkgICAgKHZhbCA9PSBDUFVGUkVRX1JFU1VNRUNIQU5HRSB8fCB2YWwgPT0gQ1BVRlJFUV9TVVNQRU5EQ0hBTkdFKSkgewogCQlsb29wc19wZXJfamlmZnkgPSBjcHVmcmVxX3NjYWxlKGxfcF9qX3JlZiwgbF9wX2pfcmVmX2ZyZXEsCiAJCQkJCQkJCWNpLT5uZXcpOwotCQlkcHJpbnRrKCJzY2FsaW5nIGxvb3BzX3Blcl9qaWZmeSB0byAlbHUgIgorCQlwcl9kZWJ1Zygic2NhbGluZyBsb29wc19wZXJfamlmZnkgdG8gJWx1ICIKIAkJCSJmb3IgZnJlcXVlbmN5ICV1IGtIelxuIiwgbG9vcHNfcGVyX2ppZmZ5LCBjaS0+bmV3KTsKIAl9CiB9CkBAIC0zMjYsNyArMjM2LDcgQEAKIAlCVUdfT04oaXJxc19kaXNhYmxlZCgpKTsKIAogCWZyZXFzLT5mbGFncyA9IGNwdWZyZXFfZHJpdmVyLT5mbGFnczsKLQlkcHJpbnRrKCJub3RpZmljYXRpb24gJXUgb2YgZnJlcXVlbmN5IHRyYW5zaXRpb24gdG8gJXUga0h6XG4iLAorCXByX2RlYnVnKCJub3RpZmljYXRpb24gJXUgb2YgZnJlcXVlbmN5IHRyYW5zaXRpb24gdG8gJXUga0h6XG4iLAogCQlzdGF0ZSwgZnJlcXMtPm5ldyk7CiAKIAlwb2xpY3kgPSBwZXJfY3B1KGNwdWZyZXFfY3B1X2RhdGEsIGZyZXFzLT5jcHUpOwpAQCAtMzQwLDcgKzI1MCw3IEBACiAJCWlmICghKGNwdWZyZXFfZHJpdmVyLT5mbGFncyAmIENQVUZSRVFfQ09OU1RfTE9PUFMpKSB7CiAJCQlpZiAoKHBvbGljeSkgJiYgKHBvbGljeS0+Y3B1ID09IGZyZXFzLT5jcHUpICYmCiAJCQkgICAgKHBvbGljeS0+Y3VyKSAmJiAocG9saWN5LT5jdXIgIT0gZnJlcXMtPm9sZCkpIHsKLQkJCQlkcHJpbnRrKCJXYXJuaW5nOiBDUFUgZnJlcXVlbmN5IGlzIgorCQkJCXByX2RlYnVnKCJXYXJuaW5nOiBDUFUgZnJlcXVlbmN5IGlzIgogCQkJCQkiICV1LCBjcHVmcmVxIGFzc3VtZWQgJXUga0h6LlxuIiwKIAkJCQkJZnJlcXMtPm9sZCwgcG9saWN5LT5jdXIpOwogCQkJCWZyZXFzLT5vbGQgPSBwb2xpY3ktPmN1cjsKQEAgLTM1Myw3ICsyNjMsNyBAQAogCiAJY2FzZSBDUFVGUkVRX1BPU1RDSEFOR0U6CiAJCWFkanVzdF9qaWZmaWVzKENQVUZSRVFfUE9TVENIQU5HRSwgZnJlcXMpOwotCQlkcHJpbnRrKCJGUkVROiAlbHUgLSBDUFU6ICVsdSIsICh1bnNpZ25lZCBsb25nKWZyZXFzLT5uZXcsCisJCXByX2RlYnVnKCJGUkVROiAlbHUgLSBDUFU6ICVsdSIsICh1bnNpZ25lZCBsb25nKWZyZXFzLT5uZXcsCiAJCQkodW5zaWduZWQgbG9uZylmcmVxcy0+Y3B1KTsKIAkJdHJhY2VfcG93ZXJfZnJlcXVlbmN5KFBPV0VSX1BTVEFURSwgZnJlcXMtPm5ldywgZnJlcXMtPmNwdSk7CiAJCXRyYWNlX2NwdV9mcmVxdWVuY3koZnJlcXMtPm5ldywgZnJlcXMtPmNwdSk7CkBAIC00MTEsMjEgKzMyMSwxNCBAQAogCQl0ID0gX19maW5kX2dvdmVybm9yKHN0cl9nb3Zlcm5vcik7CiAKIAkJaWYgKHQgPT0gTlVMTCkgewotCQkJY2hhciAqbmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiY3B1ZnJlcV8lcyIsCi0JCQkJCQkJCXN0cl9nb3Zlcm5vcik7CisJCQlpbnQgcmV0OwogCi0JCQlpZiAobmFtZSkgewotCQkJCWludCByZXQ7CisJCQltdXRleF91bmxvY2soJmNwdWZyZXFfZ292ZXJub3JfbXV0ZXgpOworCQkJcmV0ID0gcmVxdWVzdF9tb2R1bGUoImNwdWZyZXFfJXMiLCBzdHJfZ292ZXJub3IpOworCQkJbXV0ZXhfbG9jaygmY3B1ZnJlcV9nb3Zlcm5vcl9tdXRleCk7CiAKLQkJCQltdXRleF91bmxvY2soJmNwdWZyZXFfZ292ZXJub3JfbXV0ZXgpOwotCQkJCXJldCA9IHJlcXVlc3RfbW9kdWxlKCIlcyIsIG5hbWUpOwotCQkJCW11dGV4X2xvY2soJmNwdWZyZXFfZ292ZXJub3JfbXV0ZXgpOwotCi0JCQkJaWYgKHJldCA9PSAwKQotCQkJCQl0ID0gX19maW5kX2dvdmVybm9yKHN0cl9nb3Zlcm5vcik7Ci0JCQl9Ci0KLQkJCWtmcmVlKG5hbWUpOworCQkJaWYgKHJldCA9PSAwKQorCQkJCXQgPSBfX2ZpbmRfZ292ZXJub3Ioc3RyX2dvdmVybm9yKTsKIAkJfQogCiAJCWlmICh0ICE9IE5VTEwpIHsKQEAgLTc1Myw3ICs2NTYsNyBAQAogc3RhdGljIHZvaWQgY3B1ZnJlcV9zeXNmc19yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKQogewogCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5ID0gdG9fcG9saWN5KGtvYmopOwotCWRwcmludGsoImxhc3QgcmVmZXJlbmNlIGlzIGRyb3BwZWRcbiIpOworCXByX2RlYnVnKCJsYXN0IHJlZmVyZW5jZSBpcyBkcm9wcGVkXG4iKTsKIAljb21wbGV0ZSgmcG9saWN5LT5rb2JqX3VucmVnaXN0ZXIpOwogfQogCkBAIC03ODgsNyArNjkxLDcgQEAKIAlnb3YgPSBfX2ZpbmRfZ292ZXJub3IocGVyX2NwdShjcHVmcmVxX2NwdV9nb3Zlcm5vciwgY3B1KSk7CiAJaWYgKGdvdikgewogCQlwb2xpY3ktPmdvdmVybm9yID0gZ292OwotCQlkcHJpbnRrKCJSZXN0b3JpbmcgZ292ZXJub3IgJXMgZm9yIGNwdSAlZFxuIiwKKwkJcHJfZGVidWcoIlJlc3RvcmluZyBnb3Zlcm5vciAlcyBmb3IgY3B1ICVkXG4iLAogCQkgICAgICAgcG9saWN5LT5nb3Zlcm5vci0+bmFtZSwgY3B1KTsKIAl9CiAjZW5kaWYKQEAgLTgyNCw3ICs3MjcsNyBAQAogCQkJcGVyX2NwdShjcHVmcmVxX2NwdV9kYXRhLCBjcHUpID0gbWFuYWdlZF9wb2xpY3k7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcHVmcmVxX2RyaXZlcl9sb2NrLCBmbGFncyk7CiAKLQkJCWRwcmludGsoIkNQVSBhbHJlYWR5IG1hbmFnZWQsIGFkZGluZyBsaW5rXG4iKTsKKwkJCXByX2RlYnVnKCJDUFUgYWxyZWFkeSBtYW5hZ2VkLCBhZGRpbmcgbGlua1xuIik7CiAJCQlyZXQgPSBzeXNmc19jcmVhdGVfbGluaygmc3lzX2Rldi0+a29iaiwKIAkJCQkJCSZtYW5hZ2VkX3BvbGljeS0+a29iaiwKIAkJCQkJCSJjcHVmcmVxIik7CkBAIC04NjUsNyArNzY4LDcgQEAKIAkJaWYgKCFjcHVfb25saW5lKGopKQogCQkJY29udGludWU7CiAKLQkJZHByaW50aygiQ1BVICV1IGFscmVhZHkgbWFuYWdlZCwgYWRkaW5nIGxpbmtcbiIsIGopOworCQlwcl9kZWJ1ZygiQ1BVICV1IGFscmVhZHkgbWFuYWdlZCwgYWRkaW5nIGxpbmtcbiIsIGopOwogCQltYW5hZ2VkX3BvbGljeSA9IGNwdWZyZXFfY3B1X2dldChjcHUpOwogCQljcHVfc3lzX2RldiA9IGdldF9jcHVfc3lzZGV2KGopOwogCQlyZXQgPSBzeXNmc19jcmVhdGVfbGluaygmY3B1X3N5c19kZXYtPmtvYmosICZwb2xpY3ktPmtvYmosCkBAIC05NDEsNyArODQ0LDcgQEAKIAlwb2xpY3ktPnVzZXJfcG9saWN5LmdvdmVybm9yID0gcG9saWN5LT5nb3Zlcm5vcjsKIAogCWlmIChyZXQpIHsKLQkJZHByaW50aygic2V0dGluZyBwb2xpY3kgZmFpbGVkXG4iKTsKKwkJcHJfZGVidWcoInNldHRpbmcgcG9saWN5IGZhaWxlZFxuIik7CiAJCWlmIChjcHVmcmVxX2RyaXZlci0+ZXhpdCkKIAkJCWNwdWZyZXFfZHJpdmVyLT5leGl0KHBvbGljeSk7CiAJfQpAQCAtOTc3LDggKzg4MCw3IEBACiAJaWYgKGNwdV9pc19vZmZsaW5lKGNwdSkpCiAJCXJldHVybiAwOwogCi0JY3B1ZnJlcV9kZWJ1Z19kaXNhYmxlX3JhdGVsaW1pdCgpOwotCWRwcmludGsoImFkZGluZyBDUFUgJXVcbiIsIGNwdSk7CisJcHJfZGVidWcoImFkZGluZyBDUFUgJXVcbiIsIGNwdSk7CiAKICNpZmRlZiBDT05GSUdfU01QCiAJLyogY2hlY2sgd2hldGhlciBhIGRpZmZlcmVudCBDUFUgYWxyZWFkeSByZWdpc3RlcmVkIHRoaXMKQEAgLTk4Niw3ICs4ODgsNiBAQAogCXBvbGljeSA9IGNwdWZyZXFfY3B1X2dldChjcHUpOwogCWlmICh1bmxpa2VseShwb2xpY3kpKSB7CiAJCWNwdWZyZXFfY3B1X3B1dChwb2xpY3kpOwotCQljcHVmcmVxX2RlYnVnX2VuYWJsZV9yYXRlbGltaXQoKTsKIAkJcmV0dXJuIDA7CiAJfQogI2VuZGlmCkBAIC0xMDM3LDcgKzkzOCw3IEBACiAJICovCiAJcmV0ID0gY3B1ZnJlcV9kcml2ZXItPmluaXQocG9saWN5KTsKIAlpZiAocmV0KSB7Ci0JCWRwcmludGsoImluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7CisJCXByX2RlYnVnKCJpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIGVycl91bmxvY2tfcG9saWN5OwogCX0KIAlwb2xpY3ktPnVzZXJfcG9saWN5Lm1pbiA9IHBvbGljeS0+bWluOwpAQCAtMTA2Myw4ICs5NjQsNyBAQAogCiAJa29iamVjdF91ZXZlbnQoJnBvbGljeS0+a29iaiwgS09CSl9BREQpOwogCW1vZHVsZV9wdXQoY3B1ZnJlcV9kcml2ZXItPm93bmVyKTsKLQlkcHJpbnRrKCJpbml0aWFsaXphdGlvbiBjb21wbGV0ZVxuIik7Ci0JY3B1ZnJlcV9kZWJ1Z19lbmFibGVfcmF0ZWxpbWl0KCk7CisJcHJfZGVidWcoImluaXRpYWxpemF0aW9uIGNvbXBsZXRlXG4iKTsKIAogCXJldHVybiAwOwogCkBAIC0xMDg4LDcgKzk4OCw2IEBACiBub21lbV9vdXQ6CiAJbW9kdWxlX3B1dChjcHVmcmVxX2RyaXZlci0+b3duZXIpOwogbW9kdWxlX291dDoKLQljcHVmcmVxX2RlYnVnX2VuYWJsZV9yYXRlbGltaXQoKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMTEyLDE1ICsxMDExLDEzIEBACiAJdW5zaWduZWQgaW50IGo7CiAjZW5kaWYKIAotCWNwdWZyZXFfZGVidWdfZGlzYWJsZV9yYXRlbGltaXQoKTsKLQlkcHJpbnRrKCJ1bnJlZ2lzdGVyaW5nIENQVSAldVxuIiwgY3B1KTsKKwlwcl9kZWJ1ZygidW5yZWdpc3RlcmluZyBDUFUgJXVcbiIsIGNwdSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3B1ZnJlcV9kcml2ZXJfbG9jaywgZmxhZ3MpOwogCWRhdGEgPSBwZXJfY3B1KGNwdWZyZXFfY3B1X2RhdGEsIGNwdSk7CiAKIAlpZiAoIWRhdGEpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3B1ZnJlcV9kcml2ZXJfbG9jaywgZmxhZ3MpOwotCQljcHVmcmVxX2RlYnVnX2VuYWJsZV9yYXRlbGltaXQoKTsKIAkJdW5sb2NrX3BvbGljeV9yd3NlbV93cml0ZShjcHUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xMTMyLDEyICsxMDI5LDExIEBACiAJICogb25seSBuZWVkIHRvIHVubGluaywgcHV0IGFuZCBleGl0CiAJICovCiAJaWYgKHVubGlrZWx5KGNwdSAhPSBkYXRhLT5jcHUpKSB7Ci0JCWRwcmludGsoInJlbW92aW5nIGxpbmtcbiIpOworCQlwcl9kZWJ1ZygicmVtb3ZpbmcgbGlua1xuIik7CiAJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgZGF0YS0+Y3B1cyk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwdWZyZXFfZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAkJa29iaiA9ICZzeXNfZGV2LT5rb2JqOwogCQljcHVmcmVxX2NwdV9wdXQoZGF0YSk7Ci0JCWNwdWZyZXFfZGVidWdfZW5hYmxlX3JhdGVsaW1pdCgpOwogCQl1bmxvY2tfcG9saWN5X3J3c2VtX3dyaXRlKGNwdSk7CiAJCXN5c2ZzX3JlbW92ZV9saW5rKGtvYmosICJjcHVmcmVxIik7CiAJCXJldHVybiAwOwpAQCAtMTE3MCw3ICsxMDY2LDcgQEAKIAkJZm9yX2VhY2hfY3B1KGosIGRhdGEtPmNwdXMpIHsKIAkJCWlmIChqID09IGNwdSkKIAkJCQljb250aW51ZTsKLQkJCWRwcmludGsoInJlbW92aW5nIGxpbmsgZm9yIGNwdSAldVxuIiwgaik7CisJCQlwcl9kZWJ1ZygicmVtb3ZpbmcgbGluayBmb3IgY3B1ICV1XG4iLCBqKTsKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIAkJCXN0cm5jcHkocGVyX2NwdShjcHVmcmVxX2NwdV9nb3Zlcm5vciwgaiksCiAJCQkJZGF0YS0+Z292ZXJub3ItPm5hbWUsIENQVUZSRVFfTkFNRV9MRU4pOwpAQCAtMTE5OSwyMSArMTA5NSwzNSBAQAogCSAqIG5vdCByZWZlcmVuY2VkIGFueW1vcmUgYnkgYW55Ym9keSBiZWZvcmUgd2UgcHJvY2VlZCB3aXRoCiAJICogdW5sb2FkaW5nLgogCSAqLwotCWRwcmludGsoIndhaXRpbmcgZm9yIGRyb3BwaW5nIG9mIHJlZmNvdW50XG4iKTsKKwlwcl9kZWJ1Zygid2FpdGluZyBmb3IgZHJvcHBpbmcgb2YgcmVmY291bnRcbiIpOwogCXdhaXRfZm9yX2NvbXBsZXRpb24oY21wKTsKLQlkcHJpbnRrKCJ3YWl0IGNvbXBsZXRlXG4iKTsKKwlwcl9kZWJ1Zygid2FpdCBjb21wbGV0ZVxuIik7CiAKIAlsb2NrX3BvbGljeV9yd3NlbV93cml0ZShjcHUpOwogCWlmIChjcHVmcmVxX2RyaXZlci0+ZXhpdCkKIAkJY3B1ZnJlcV9kcml2ZXItPmV4aXQoZGF0YSk7CiAJdW5sb2NrX3BvbGljeV9yd3NlbV93cml0ZShjcHUpOwogCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisJLyogd2hlbiB0aGUgQ1BVIHdoaWNoIGlzIHRoZSBwYXJlbnQgb2YgdGhlIGtvYmogaXMgaG90cGx1Z2dlZAorCSAqIG9mZmxpbmUsIGNoZWNrIGZvciBzaWJsaW5ncywgYW5kIGNyZWF0ZSBjcHVmcmVxIHN5c2ZzIGludGVyZmFjZQorCSAqIGFuZCBzeW1saW5rcworCSAqLworCWlmICh1bmxpa2VseShjcHVtYXNrX3dlaWdodChkYXRhLT5jcHVzKSA+IDEpKSB7CisJCS8qIGZpcnN0IHNpYmxpbmcgbm93IG93bnMgdGhlIG5ldyBzeXNmcyBkaXIgKi8KKwkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBkYXRhLT5jcHVzKTsKKwkJY3B1ZnJlcV9hZGRfZGV2KGdldF9jcHVfc3lzZGV2KGNwdW1hc2tfZmlyc3QoZGF0YS0+Y3B1cykpKTsKKworCQkvKiBmaW5hbGx5IHJlbW92ZSBvdXIgb3duIHN5bWxpbmsgKi8KKwkJbG9ja19wb2xpY3lfcndzZW1fd3JpdGUoY3B1KTsKKwkJX19jcHVmcmVxX3JlbW92ZV9kZXYoc3lzX2Rldik7CisJfQorI2VuZGlmCisKIAlmcmVlX2NwdW1hc2tfdmFyKGRhdGEtPnJlbGF0ZWRfY3B1cyk7CiAJZnJlZV9jcHVtYXNrX3ZhcihkYXRhLT5jcHVzKTsKIAlrZnJlZShkYXRhKTsKLQlwZXJfY3B1KGNwdWZyZXFfY3B1X2RhdGEsIGNwdSkgPSBOVUxMOwogCi0JY3B1ZnJlcV9kZWJ1Z19lbmFibGVfcmF0ZWxpbWl0KCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyMzksNyArMTE0OSw3IEBACiAJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGNwdWZyZXFfcG9saWN5LCB1cGRhdGUpOwogCXVuc2lnbmVkIGludCBjcHUgPSBwb2xpY3ktPmNwdTsKLQlkcHJpbnRrKCJoYW5kbGVfdXBkYXRlIGZvciBjcHUgJXUgY2FsbGVkXG4iLCBjcHUpOworCXByX2RlYnVnKCJoYW5kbGVfdXBkYXRlIGZvciBjcHUgJXUgY2FsbGVkXG4iLCBjcHUpOwogCWNwdWZyZXFfdXBkYXRlX3BvbGljeShjcHUpOwogfQogCkBAIC0xMjU3LDcgKzExNjcsNyBAQAogewogCXN0cnVjdCBjcHVmcmVxX2ZyZXFzIGZyZXFzOwogCi0JZHByaW50aygiV2FybmluZzogQ1BVIGZyZXF1ZW5jeSBvdXQgb2Ygc3luYzogY3B1ZnJlcSBhbmQgdGltaW5nICIKKwlwcl9kZWJ1ZygiV2FybmluZzogQ1BVIGZyZXF1ZW5jeSBvdXQgb2Ygc3luYzogY3B1ZnJlcSBhbmQgdGltaW5nICIKIAkgICAgICAgImNvcmUgdGhpbmtzIG9mICV1LCBpcyAldSBrSHouXG4iLCBvbGRfZnJlcSwgbmV3X2ZyZXEpOwogCiAJZnJlcXMuY3B1ID0gY3B1OwpAQCAtMTM2MCw3ICsxMjcwLDcgQEAKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqY3B1X3BvbGljeTsKIAotCWRwcmludGsoInN1c3BlbmRpbmcgY3B1ICV1XG4iLCBjcHUpOworCXByX2RlYnVnKCJzdXNwZW5kaW5nIGNwdSAldVxuIiwgY3B1KTsKIAogCS8qIElmIHRoZXJlJ3Mgbm8gcG9saWN5IGZvciB0aGUgYm9vdCBDUFUsIHdlIGhhdmUgbm90aGluZyB0byBkby4gKi8KIAljcHVfcG9saWN5ID0gY3B1ZnJlcV9jcHVfZ2V0KGNwdSk7CkBAIC0xMzk4LDcgKzEzMDgsNyBAQAogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpjcHVfcG9saWN5OwogCi0JZHByaW50aygicmVzdW1pbmcgY3B1ICV1XG4iLCBjcHUpOworCXByX2RlYnVnKCJyZXN1bWluZyBjcHUgJXVcbiIsIGNwdSk7CiAKIAkvKiBJZiB0aGVyZSdzIG5vIHBvbGljeSBmb3IgdGhlIGJvb3QgQ1BVLCB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uICovCiAJY3B1X3BvbGljeSA9IGNwdWZyZXFfY3B1X2dldChjcHUpOwpAQCAtMTUxMCw3ICsxNDIwLDcgQEAKIHsKIAlpbnQgcmV0dmFsID0gLUVJTlZBTDsKIAotCWRwcmludGsoInRhcmdldCBmb3IgQ1BVICV1OiAldSBrSHosIHJlbGF0aW9uICV1XG4iLCBwb2xpY3ktPmNwdSwKKwlwcl9kZWJ1ZygidGFyZ2V0IGZvciBDUFUgJXU6ICV1IGtIeiwgcmVsYXRpb24gJXVcbiIsIHBvbGljeS0+Y3B1LAogCQl0YXJnZXRfZnJlcSwgcmVsYXRpb24pOwogCWlmIChjcHVfb25saW5lKHBvbGljeS0+Y3B1KSAmJiBjcHVmcmVxX2RyaXZlci0+dGFyZ2V0KQogCQlyZXR2YWwgPSBjcHVmcmVxX2RyaXZlci0+dGFyZ2V0KHBvbGljeSwgdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uKTsKQEAgLTE1OTYsNyArMTUwNiw3IEBACiAJaWYgKCF0cnlfbW9kdWxlX2dldChwb2xpY3ktPmdvdmVybm9yLT5vd25lcikpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZHByaW50aygiX19jcHVmcmVxX2dvdmVybm9yIGZvciBDUFUgJXUsIGV2ZW50ICV1XG4iLAorCXByX2RlYnVnKCJfX2NwdWZyZXFfZ292ZXJub3IgZm9yIENQVSAldSwgZXZlbnQgJXVcbiIsCiAJCQkJCQlwb2xpY3ktPmNwdSwgZXZlbnQpOwogCXJldCA9IHBvbGljeS0+Z292ZXJub3ItPmdvdmVybm9yKHBvbGljeSwgZXZlbnQpOwogCkBAIC0xNjk3LDggKzE2MDcsNyBAQAogewogCWludCByZXQgPSAwOwogCi0JY3B1ZnJlcV9kZWJ1Z19kaXNhYmxlX3JhdGVsaW1pdCgpOwotCWRwcmludGsoInNldHRpbmcgbmV3IHBvbGljeSBmb3IgQ1BVICV1OiAldSAtICV1IGtIelxuIiwgcG9saWN5LT5jcHUsCisJcHJfZGVidWcoInNldHRpbmcgbmV3IHBvbGljeSBmb3IgQ1BVICV1OiAldSAtICV1IGtIelxuIiwgcG9saWN5LT5jcHUsCiAJCXBvbGljeS0+bWluLCBwb2xpY3ktPm1heCk7CiAKIAltZW1jcHkoJnBvbGljeS0+Y3B1aW5mbywgJmRhdGEtPmNwdWluZm8sCkBAIC0xNzM1LDE5ICsxNjQ0LDE5IEBACiAJZGF0YS0+bWluID0gcG9saWN5LT5taW47CiAJZGF0YS0+bWF4ID0gcG9saWN5LT5tYXg7CiAKLQlkcHJpbnRrKCJuZXcgbWluIGFuZCBtYXggZnJlcXMgYXJlICV1IC0gJXUga0h6XG4iLAorCXByX2RlYnVnKCJuZXcgbWluIGFuZCBtYXggZnJlcXMgYXJlICV1IC0gJXUga0h6XG4iLAogCQkJCQlkYXRhLT5taW4sIGRhdGEtPm1heCk7CiAKIAlpZiAoY3B1ZnJlcV9kcml2ZXItPnNldHBvbGljeSkgewogCQlkYXRhLT5wb2xpY3kgPSBwb2xpY3ktPnBvbGljeTsKLQkJZHByaW50aygic2V0dGluZyByYW5nZVxuIik7CisJCXByX2RlYnVnKCJzZXR0aW5nIHJhbmdlXG4iKTsKIAkJcmV0ID0gY3B1ZnJlcV9kcml2ZXItPnNldHBvbGljeShwb2xpY3kpOwogCX0gZWxzZSB7CiAJCWlmIChwb2xpY3ktPmdvdmVybm9yICE9IGRhdGEtPmdvdmVybm9yKSB7CiAJCQkvKiBzYXZlIG9sZCwgd29ya2luZyB2YWx1ZXMgKi8KIAkJCXN0cnVjdCBjcHVmcmVxX2dvdmVybm9yICpvbGRfZ292ID0gZGF0YS0+Z292ZXJub3I7CiAKLQkJCWRwcmludGsoImdvdmVybm9yIHN3aXRjaFxuIik7CisJCQlwcl9kZWJ1ZygiZ292ZXJub3Igc3dpdGNoXG4iKTsKIAogCQkJLyogZW5kIG9sZCBnb3Zlcm5vciAqLwogCQkJaWYgKGRhdGEtPmdvdmVybm9yKQpAQCAtMTc1Nyw3ICsxNjY2LDcgQEAKIAkJCWRhdGEtPmdvdmVybm9yID0gcG9saWN5LT5nb3Zlcm5vcjsKIAkJCWlmIChfX2NwdWZyZXFfZ292ZXJub3IoZGF0YSwgQ1BVRlJFUV9HT1ZfU1RBUlQpKSB7CiAJCQkJLyogbmV3IGdvdmVybm9yIGZhaWxlZCwgc28gcmUtc3RhcnQgb2xkIG9uZSAqLwotCQkJCWRwcmludGsoInN0YXJ0aW5nIGdvdmVybm9yICVzIGZhaWxlZFxuIiwKKwkJCQlwcl9kZWJ1Zygic3RhcnRpbmcgZ292ZXJub3IgJXMgZmFpbGVkXG4iLAogCQkJCQkJCWRhdGEtPmdvdmVybm9yLT5uYW1lKTsKIAkJCQlpZiAob2xkX2dvdikgewogCQkJCQlkYXRhLT5nb3Zlcm5vciA9IG9sZF9nb3Y7CkBAIC0xNzY5LDEyICsxNjc4LDExIEBACiAJCQl9CiAJCQkvKiBtaWdodCBiZSBhIHBvbGljeSBjaGFuZ2UsIHRvbywgc28gZmFsbCB0aHJvdWdoICovCiAJCX0KLQkJZHByaW50aygiZ292ZXJub3I6IGNoYW5nZSBvciB1cGRhdGUgbGltaXRzXG4iKTsKKwkJcHJfZGVidWcoImdvdmVybm9yOiBjaGFuZ2Ugb3IgdXBkYXRlIGxpbWl0c1xuIik7CiAJCV9fY3B1ZnJlcV9nb3Zlcm5vcihkYXRhLCBDUFVGUkVRX0dPVl9MSU1JVFMpOwogCX0KIAogZXJyb3Jfb3V0OgotCWNwdWZyZXFfZGVidWdfZW5hYmxlX3JhdGVsaW1pdCgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE4MDEsNyArMTcwOSw3IEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKLQlkcHJpbnRrKCJ1cGRhdGluZyBwb2xpY3kgZm9yIENQVSAldVxuIiwgY3B1KTsKKwlwcl9kZWJ1ZygidXBkYXRpbmcgcG9saWN5IGZvciBDUFUgJXVcbiIsIGNwdSk7CiAJbWVtY3B5KCZwb2xpY3ksIGRhdGEsIHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kpKTsKIAlwb2xpY3kubWluID0gZGF0YS0+dXNlcl9wb2xpY3kubWluOwogCXBvbGljeS5tYXggPSBkYXRhLT51c2VyX3BvbGljeS5tYXg7CkBAIC0xODEzLDcgKzE3MjEsNyBAQAogCWlmIChjcHVmcmVxX2RyaXZlci0+Z2V0KSB7CiAJCXBvbGljeS5jdXIgPSBjcHVmcmVxX2RyaXZlci0+Z2V0KGNwdSk7CiAJCWlmICghZGF0YS0+Y3VyKSB7Ci0JCQlkcHJpbnRrKCJEcml2ZXIgZGlkIG5vdCBpbml0aWFsaXplIGN1cnJlbnQgZnJlcSIpOworCQkJcHJfZGVidWcoIkRyaXZlciBkaWQgbm90IGluaXRpYWxpemUgY3VycmVudCBmcmVxIik7CiAJCQlkYXRhLT5jdXIgPSBwb2xpY3kuY3VyOwogCQl9IGVsc2UgewogCQkJaWYgKGRhdGEtPmN1ciAhPSBwb2xpY3kuY3VyKQpAQCAtMTg4OSw3ICsxNzk3LDcgQEAKIAkgICAgKCghZHJpdmVyX2RhdGEtPnNldHBvbGljeSkgJiYgKCFkcml2ZXJfZGF0YS0+dGFyZ2V0KSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZHByaW50aygidHJ5aW5nIHRvIHJlZ2lzdGVyIGRyaXZlciAlc1xuIiwgZHJpdmVyX2RhdGEtPm5hbWUpOworCXByX2RlYnVnKCJ0cnlpbmcgdG8gcmVnaXN0ZXIgZHJpdmVyICVzXG4iLCBkcml2ZXJfZGF0YS0+bmFtZSk7CiAKIAlpZiAoZHJpdmVyX2RhdGEtPnNldHBvbGljeSkKIAkJZHJpdmVyX2RhdGEtPmZsYWdzIHw9IENQVUZSRVFfQ09OU1RfTE9PUFM7CkBAIC0xOTIwLDE1ICsxODI4LDE0IEBACiAKIAkJLyogaWYgYWxsIC0+aW5pdCgpIGNhbGxzIGZhaWxlZCwgdW5yZWdpc3RlciAqLwogCQlpZiAocmV0KSB7Ci0JCQlkcHJpbnRrKCJubyBDUFUgaW5pdGlhbGl6ZWQgZm9yIGRyaXZlciAlc1xuIiwKKwkJCXByX2RlYnVnKCJubyBDUFUgaW5pdGlhbGl6ZWQgZm9yIGRyaXZlciAlc1xuIiwKIAkJCQkJCQlkcml2ZXJfZGF0YS0+bmFtZSk7CiAJCQlnb3RvIGVycl9zeXNkZXZfdW5yZWc7CiAJCX0KIAl9CiAKIAlyZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIoJmNwdWZyZXFfY3B1X25vdGlmaWVyKTsKLQlkcHJpbnRrKCJkcml2ZXIgJXMgdXAgYW5kIHJ1bm5pbmdcbiIsIGRyaXZlcl9kYXRhLT5uYW1lKTsKLQljcHVmcmVxX2RlYnVnX2VuYWJsZV9yYXRlbGltaXQoKTsKKwlwcl9kZWJ1ZygiZHJpdmVyICVzIHVwIGFuZCBydW5uaW5nXG4iLCBkcml2ZXJfZGF0YS0+bmFtZSk7CiAKIAlyZXR1cm4gMDsKIGVycl9zeXNkZXZfdW5yZWc6CkBAIC0xOTU1LDE0ICsxODYyLDEwIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWNwdWZyZXFfZGVidWdfZGlzYWJsZV9yYXRlbGltaXQoKTsKLQotCWlmICghY3B1ZnJlcV9kcml2ZXIgfHwgKGRyaXZlciAhPSBjcHVmcmVxX2RyaXZlcikpIHsKLQkJY3B1ZnJlcV9kZWJ1Z19lbmFibGVfcmF0ZWxpbWl0KCk7CisJaWYgKCFjcHVmcmVxX2RyaXZlciB8fCAoZHJpdmVyICE9IGNwdWZyZXFfZHJpdmVyKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCi0JZHByaW50aygidW5yZWdpc3RlcmluZyBkcml2ZXIgJXNcbiIsIGRyaXZlci0+bmFtZSk7CisJcHJfZGVidWcoInVucmVnaXN0ZXJpbmcgZHJpdmVyICVzXG4iLCBkcml2ZXItPm5hbWUpOwogCiAJc3lzZGV2X2RyaXZlcl91bnJlZ2lzdGVyKCZjcHVfc3lzZGV2X2NsYXNzLCAmY3B1ZnJlcV9zeXNkZXZfZHJpdmVyKTsKIAl1bnJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmY3B1ZnJlcV9jcHVfbm90aWZpZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfcGVyZm9ybWFuY2UuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3BlcmZvcm1hbmNlLmMKaW5kZXggN2UyZTUxNS4uZjEzYThhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfcGVyZm9ybWFuY2UuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9wZXJmb3JtYW5jZS5jCkBAIC0xNSw5ICsxNSw2IEBACiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgXAotCWNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfR09WRVJOT1IsICJwZXJmb3JtYW5jZSIsIG1zZykKLQogCiBzdGF0aWMgaW50IGNwdWZyZXFfZ292ZXJub3JfcGVyZm9ybWFuY2Uoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCiAJCQkJCXVuc2lnbmVkIGludCBldmVudCkKQEAgLTI1LDcgKzIyLDcgQEAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBDUFVGUkVRX0dPVl9TVEFSVDoKIAljYXNlIENQVUZSRVFfR09WX0xJTUlUUzoKLQkJZHByaW50aygic2V0dGluZyB0byAldSBrSHogYmVjYXVzZSBvZiBldmVudCAldVxuIiwKKwkJcHJfZGVidWcoInNldHRpbmcgdG8gJXUga0h6IGJlY2F1c2Ugb2YgZXZlbnQgJXVcbiIsCiAJCQkJCQlwb2xpY3ktPm1heCwgZXZlbnQpOwogCQlfX2NwdWZyZXFfZHJpdmVyX3RhcmdldChwb2xpY3ksIHBvbGljeS0+bWF4LAogCQkJCQkJQ1BVRlJFUV9SRUxBVElPTl9IKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3Bvd2Vyc2F2ZS5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfcG93ZXJzYXZlLmMKaW5kZXggZTZkYjVmYS4uNGMyZWI1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfcG93ZXJzYXZlLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfcG93ZXJzYXZlLmMKQEAgLTE1LDE2ICsxNSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIFwKLQljcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0dPVkVSTk9SLCAicG93ZXJzYXZlIiwgbXNnKQotCiBzdGF0aWMgaW50IGNwdWZyZXFfZ292ZXJub3JfcG93ZXJzYXZlKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAogCQkJCQl1bnNpZ25lZCBpbnQgZXZlbnQpCiB7CiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgQ1BVRlJFUV9HT1ZfU1RBUlQ6CiAJY2FzZSBDUFVGUkVRX0dPVl9MSU1JVFM6Ci0JCWRwcmludGsoInNldHRpbmcgdG8gJXUga0h6IGJlY2F1c2Ugb2YgZXZlbnQgJXVcbiIsCisJCXByX2RlYnVnKCJzZXR0aW5nIHRvICV1IGtIeiBiZWNhdXNlIG9mIGV2ZW50ICV1XG4iLAogCQkJCQkJCXBvbGljeS0+bWluLCBldmVudCk7CiAJCV9fY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0KHBvbGljeSwgcG9saWN5LT5taW4sCiAJCQkJCQlDUFVGUkVRX1JFTEFUSU9OX0wpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3N0YXRzLmMKaW5kZXggMDBkNzNmYy4uYjYwYTRjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9zdGF0cy5jCkBAIC0xNjUsMTcgKzE2NSwyNyBAQAogCXJldHVybiAtMTsKIH0KIAorLyogc2hvdWxkIGJlIGNhbGxlZCBsYXRlIGluIHRoZSBDUFUgcmVtb3ZhbCBzZXF1ZW5jZSBzbyB0aGF0IHRoZSBzdGF0cworICogbWVtb3J5IGlzIHN0aWxsIGF2YWlsYWJsZSBpbiBjYXNlIHNvbWVvbmUgdHJpZXMgdG8gdXNlIGl0LgorICovCiBzdGF0aWMgdm9pZCBjcHVmcmVxX3N0YXRzX2ZyZWVfdGFibGUodW5zaWduZWQgaW50IGNwdSkKIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqc3RhdCA9IHBlcl9jcHUoY3B1ZnJlcV9zdGF0c190YWJsZSwgY3B1KTsKLQlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSA9IGNwdWZyZXFfY3B1X2dldChjcHUpOwotCWlmIChwb2xpY3kgJiYgcG9saWN5LT5jcHUgPT0gY3B1KQotCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnBvbGljeS0+a29iaiwgJnN0YXRzX2F0dHJfZ3JvdXApOwogCWlmIChzdGF0KSB7CiAJCWtmcmVlKHN0YXQtPnRpbWVfaW5fc3RhdGUpOwogCQlrZnJlZShzdGF0KTsKIAl9CiAJcGVyX2NwdShjcHVmcmVxX3N0YXRzX3RhYmxlLCBjcHUpID0gTlVMTDsKK30KKworLyogbXVzdCBiZSBjYWxsZWQgZWFybHkgaW4gdGhlIENQVSByZW1vdmFsIHNlcXVlbmNlIChiZWZvcmUKKyAqIGNwdWZyZXFfcmVtb3ZlX2Rldikgc28gdGhhdCBwb2xpY3kgaXMgc3RpbGwgdmFsaWQuCisgKi8KK3N0YXRpYyB2b2lkIGNwdWZyZXFfc3RhdHNfZnJlZV9zeXNmcyh1bnNpZ25lZCBpbnQgY3B1KQoreworCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5ID0gY3B1ZnJlcV9jcHVfZ2V0KGNwdSk7CisJaWYgKHBvbGljeSAmJiBwb2xpY3ktPmNwdSA9PSBjcHUpCisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmcG9saWN5LT5rb2JqLCAmc3RhdHNfYXR0cl9ncm91cCk7CiAJaWYgKHBvbGljeSkKIAkJY3B1ZnJlcV9jcHVfcHV0KHBvbGljeSk7CiB9CkBAIC0zMTYsNiArMzI2LDkgQEAKIAljYXNlIENQVV9PTkxJTkVfRlJPWkVOOgogCQljcHVmcmVxX3VwZGF0ZV9wb2xpY3koY3B1KTsKIAkJYnJlYWs7CisJY2FzZSBDUFVfRE9XTl9QUkVQQVJFOgorCQljcHVmcmVxX3N0YXRzX2ZyZWVfc3lzZnMoY3B1KTsKKwkJYnJlYWs7CiAJY2FzZSBDUFVfREVBRDoKIAljYXNlIENQVV9ERUFEX0ZST1pFTjoKIAkJY3B1ZnJlcV9zdGF0c19mcmVlX3RhYmxlKGNwdSk7CkBAIC0zMjQsOSArMzM3LDEwIEBACiAJcmV0dXJuIE5PVElGWV9PSzsKIH0KIAotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjcHVmcmVxX3N0YXRfY3B1X25vdGlmaWVyIF9fcmVmZGF0YSA9Ci17CisvKiBwcmlvcml0eT0xIHNvIHRoaXMgd2lsbCBnZXQgY2FsbGVkIGJlZm9yZSBjcHVmcmVxX3JlbW92ZV9kZXYgKi8KK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY3B1ZnJlcV9zdGF0X2NwdV9ub3RpZmllciBfX3JlZmRhdGEgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSBjcHVmcmVxX3N0YXRfY3B1X2NhbGxiYWNrLAorCS5wcmlvcml0eSA9IDEsCiB9OwogCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG5vdGlmaWVyX3BvbGljeV9ibG9jayA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3VzZXJzcGFjZS5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfdXNlcnNwYWNlLmMKaW5kZXggNjZkMmQxZC4uZjIzMTAxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfdXNlcnNwYWNlLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfdXNlcnNwYWNlLmMKQEAgLTM3LDkgKzM3LDYgQEAKIHN0YXRpYyBERUZJTkVfTVVURVgodXNlcnNwYWNlX211dGV4KTsKIHN0YXRpYyBpbnQgY3B1c191c2luZ191c2Vyc3BhY2VfZ292ZXJub3I7CiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIFwKLQljcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0dPVkVSTk9SLCAidXNlcnNwYWNlIiwgbXNnKQotCiAvKiBrZWVwIHRyYWNrIG9mIGZyZXF1ZW5jeSB0cmFuc2l0aW9ucyAqLwogc3RhdGljIGludAogdXNlcnNwYWNlX2NwdWZyZXFfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsCkBAIC01MCw3ICs0Nyw3IEBACiAJaWYgKCFwZXJfY3B1KGNwdV9pc19tYW5hZ2VkLCBmcmVxLT5jcHUpKQogCQlyZXR1cm4gMDsKIAotCWRwcmludGsoInNhdmluZyBjcHVfY3VyX2ZyZXEgb2YgY3B1ICV1IHRvIGJlICV1IGtIelxuIiwKKwlwcl9kZWJ1Zygic2F2aW5nIGNwdV9jdXJfZnJlcSBvZiBjcHUgJXUgdG8gYmUgJXUga0h6XG4iLAogCQkJZnJlcS0+Y3B1LCBmcmVxLT5uZXcpOwogCXBlcl9jcHUoY3B1X2N1cl9mcmVxLCBmcmVxLT5jcHUpID0gZnJlcS0+bmV3OwogCkBAIC03Myw3ICs3MCw3IEBACiB7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKLQlkcHJpbnRrKCJjcHVmcmVxX3NldCBmb3IgY3B1ICV1LCBmcmVxICV1IGtIelxuIiwgcG9saWN5LT5jcHUsIGZyZXEpOworCXByX2RlYnVnKCJjcHVmcmVxX3NldCBmb3IgY3B1ICV1LCBmcmVxICV1IGtIelxuIiwgcG9saWN5LT5jcHUsIGZyZXEpOwogCiAJbXV0ZXhfbG9jaygmdXNlcnNwYWNlX211dGV4KTsKIAlpZiAoIXBlcl9jcHUoY3B1X2lzX21hbmFnZWQsIHBvbGljeS0+Y3B1KSkKQEAgLTEzNCw3ICsxMzEsNyBAQAogCQlwZXJfY3B1KGNwdV9tYXhfZnJlcSwgY3B1KSA9IHBvbGljeS0+bWF4OwogCQlwZXJfY3B1KGNwdV9jdXJfZnJlcSwgY3B1KSA9IHBvbGljeS0+Y3VyOwogCQlwZXJfY3B1KGNwdV9zZXRfZnJlcSwgY3B1KSA9IHBvbGljeS0+Y3VyOwotCQlkcHJpbnRrKCJtYW5hZ2luZyBjcHUgJXUgc3RhcnRlZCAiCisJCXByX2RlYnVnKCJtYW5hZ2luZyBjcHUgJXUgc3RhcnRlZCAiCiAJCQkiKCV1IC0gJXUga0h6LCBjdXJyZW50bHkgJXUga0h6KVxuIiwKIAkJCQljcHUsCiAJCQkJcGVyX2NwdShjcHVfbWluX2ZyZXEsIGNwdSksCkBAIC0xNTYsMTIgKzE1MywxMiBAQAogCQlwZXJfY3B1KGNwdV9taW5fZnJlcSwgY3B1KSA9IDA7CiAJCXBlcl9jcHUoY3B1X21heF9mcmVxLCBjcHUpID0gMDsKIAkJcGVyX2NwdShjcHVfc2V0X2ZyZXEsIGNwdSkgPSAwOwotCQlkcHJpbnRrKCJtYW5hZ2luZyBjcHUgJXUgc3RvcHBlZFxuIiwgY3B1KTsKKwkJcHJfZGVidWcoIm1hbmFnaW5nIGNwdSAldSBzdG9wcGVkXG4iLCBjcHUpOwogCQltdXRleF91bmxvY2soJnVzZXJzcGFjZV9tdXRleCk7CiAJCWJyZWFrOwogCWNhc2UgQ1BVRlJFUV9HT1ZfTElNSVRTOgogCQltdXRleF9sb2NrKCZ1c2Vyc3BhY2VfbXV0ZXgpOwotCQlkcHJpbnRrKCJsaW1pdCBldmVudCBmb3IgY3B1ICV1OiAldSAtICV1IGtIeiwgIgorCQlwcl9kZWJ1ZygibGltaXQgZXZlbnQgZm9yIGNwdSAldTogJXUgLSAldSBrSHosICIKIAkJCSJjdXJyZW50bHkgJXUga0h6LCBsYXN0IHNldCB0byAldSBrSHpcbiIsCiAJCQljcHUsIHBvbGljeS0+bWluLCBwb2xpY3ktPm1heCwKIAkJCXBlcl9jcHUoY3B1X2N1cl9mcmVxLCBjcHUpLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2VfcG93ZXJzYXZlci5jIGIvZHJpdmVycy9jcHVmcmVxL2VfcG93ZXJzYXZlci5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZV9wb3dlcnNhdmVyLmMKcmVuYW1lIHRvIGRyaXZlcnMvY3B1ZnJlcS9lX3Bvd2Vyc2F2ZXIuYwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2VsYW5mcmVxLmMgYi9kcml2ZXJzL2NwdWZyZXEvZWxhbmZyZXEuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2VsYW5mcmVxLmMKcmVuYW1lIHRvIGRyaXZlcnMvY3B1ZnJlcS9lbGFuZnJlcS5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvZnJlcV90YWJsZS5jIGIvZHJpdmVycy9jcHVmcmVxL2ZyZXFfdGFibGUuYwppbmRleCAwNTQzMjIxLi45MDQzMWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvZnJlcV90YWJsZS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9mcmVxX3RhYmxlLmMKQEAgLTE0LDkgKzE0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBcCi0JY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19DT1JFLCAiZnJlcS10YWJsZSIsIG1zZykKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAgICBGUkVRVUVOQ1kgVEFCTEUgSEVMUEVSUyAgICAgICAgICAgICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTMxLDExICsyOCwxMSBAQAogCWZvciAoaSA9IDA7ICh0YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKyspIHsKIAkJdW5zaWduZWQgaW50IGZyZXEgPSB0YWJsZVtpXS5mcmVxdWVuY3k7CiAJCWlmIChmcmVxID09IENQVUZSRVFfRU5UUllfSU5WQUxJRCkgewotCQkJZHByaW50aygidGFibGUgZW50cnkgJXUgaXMgaW52YWxpZCwgc2tpcHBpbmdcbiIsIGkpOworCQkJcHJfZGVidWcoInRhYmxlIGVudHJ5ICV1IGlzIGludmFsaWQsIHNraXBwaW5nXG4iLCBpKTsKIAogCQkJY29udGludWU7CiAJCX0KLQkJZHByaW50aygidGFibGUgZW50cnkgJXU6ICV1IGtIeiwgJXUgaW5kZXhcbiIsCisJCXByX2RlYnVnKCJ0YWJsZSBlbnRyeSAldTogJXUga0h6LCAldSBpbmRleFxuIiwKIAkJCQkJaSwgZnJlcSwgdGFibGVbaV0uaW5kZXgpOwogCQlpZiAoZnJlcSA8IG1pbl9mcmVxKQogCQkJbWluX2ZyZXEgPSBmcmVxOwpAQCAtNjEsNyArNTgsNyBAQAogCXVuc2lnbmVkIGludCBpOwogCXVuc2lnbmVkIGludCBjb3VudCA9IDA7CiAKLQlkcHJpbnRrKCJyZXF1ZXN0IGZvciB2ZXJpZmljYXRpb24gb2YgcG9saWN5ICgldSAtICV1IGtIeikgZm9yIGNwdSAldVxuIiwKKwlwcl9kZWJ1ZygicmVxdWVzdCBmb3IgdmVyaWZpY2F0aW9uIG9mIHBvbGljeSAoJXUgLSAldSBrSHopIGZvciBjcHUgJXVcbiIsCiAJCQkJCXBvbGljeS0+bWluLCBwb2xpY3ktPm1heCwgcG9saWN5LT5jcHUpOwogCiAJaWYgKCFjcHVfb25saW5lKHBvbGljeS0+Y3B1KSkKQEAgLTg2LDcgKzgzLDcgQEAKIAljcHVmcmVxX3ZlcmlmeV93aXRoaW5fbGltaXRzKHBvbGljeSwgcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxLAogCQkJCSAgICAgcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxKTsKIAotCWRwcmludGsoInZlcmlmaWNhdGlvbiBsZWFkIHRvICgldSAtICV1IGtIeikgZm9yIGNwdSAldVxuIiwKKwlwcl9kZWJ1ZygidmVyaWZpY2F0aW9uIGxlYWQgdG8gKCV1IC0gJXUga0h6KSBmb3IgY3B1ICV1XG4iLAogCQkJCXBvbGljeS0+bWluLCBwb2xpY3ktPm1heCwgcG9saWN5LT5jcHUpOwogCiAJcmV0dXJuIDA7CkBAIC0xMTAsNyArMTA3LDcgQEAKIAl9OwogCXVuc2lnbmVkIGludCBpOwogCi0JZHByaW50aygicmVxdWVzdCBmb3IgdGFyZ2V0ICV1IGtIeiAocmVsYXRpb246ICV1KSBmb3IgY3B1ICV1XG4iLAorCXByX2RlYnVnKCJyZXF1ZXN0IGZvciB0YXJnZXQgJXUga0h6IChyZWxhdGlvbjogJXUpIGZvciBjcHUgJXVcbiIsCiAJCQkJCXRhcmdldF9mcmVxLCByZWxhdGlvbiwgcG9saWN5LT5jcHUpOwogCiAJc3dpdGNoIChyZWxhdGlvbikgewpAQCAtMTY3LDcgKzE2NCw3IEBACiAJfSBlbHNlCiAJCSppbmRleCA9IG9wdGltYWwuaW5kZXg7CiAKLQlkcHJpbnRrKCJ0YXJnZXQgaXMgJXUgKCV1IGtIeiwgJXUpXG4iLCAqaW5kZXgsIHRhYmxlWyppbmRleF0uZnJlcXVlbmN5LAorCXByX2RlYnVnKCJ0YXJnZXQgaXMgJXUgKCV1IGtIeiwgJXUpXG4iLCAqaW5kZXgsIHRhYmxlWyppbmRleF0uZnJlcXVlbmN5LAogCQl0YWJsZVsqaW5kZXhdLmluZGV4KTsKIAogCXJldHVybiAwOwpAQCAtMjE2LDE0ICsyMTMsMTQgQEAKIHZvaWQgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfZ2V0X2F0dHIoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICp0YWJsZSwKIAkJCQkgICAgICB1bnNpZ25lZCBpbnQgY3B1KQogewotCWRwcmludGsoInNldHRpbmcgc2hvd190YWJsZSBmb3IgY3B1ICV1IHRvICVwXG4iLCBjcHUsIHRhYmxlKTsKKwlwcl9kZWJ1Zygic2V0dGluZyBzaG93X3RhYmxlIGZvciBjcHUgJXUgdG8gJXBcbiIsIGNwdSwgdGFibGUpOwogCXBlcl9jcHUoY3B1ZnJlcV9zaG93X3RhYmxlLCBjcHUpID0gdGFibGU7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9nZXRfYXR0cik7CiAKIHZvaWQgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfcHV0X2F0dHIodW5zaWduZWQgaW50IGNwdSkKIHsKLQlkcHJpbnRrKCJjbGVhcmluZyBzaG93X3RhYmxlIGZvciBjcHUgJXVcbiIsIGNwdSk7CisJcHJfZGVidWcoImNsZWFyaW5nIHNob3dfdGFibGUgZm9yIGNwdSAldVxuIiwgY3B1KTsKIAlwZXJfY3B1KGNwdWZyZXFfc2hvd190YWJsZSwgY3B1KSA9IE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9wdXRfYXR0cik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZ3gtc3VzcG1vZC5jIGIvZHJpdmVycy9jcHVmcmVxL2d4LXN1c3Btb2QuYwpzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZ3gtc3VzcG1vZC5jCnJlbmFtZSB0byBkcml2ZXJzL2NwdWZyZXEvZ3gtc3VzcG1vZC5jCmluZGV4IDMyOTc0Y2YuLmZmZTFmMmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9neC1zdXNwbW9kLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2d4LXN1c3Btb2QuYwpAQCAtMTQyLDkgKzE0Miw2IEBACiAjZGVmaW5lIFBPTElDWV9NSU5fRElWIDIwCiAKIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKLQkJImd4LXN1c3Btb2QiLCBtc2cpCi0KIC8qKgogICogd2UgY2FuIGRldGVjdCBhIGNvcmUgbXVsdGlwaWxlciBmcm9tIGRpcjBfbHNiCiAgKiBmcm9tIEdYMSBkYXRhc2hlZXQgcC41NiwKQEAgLTE5MSw3ICsxODgsNyBAQAogCS8qIGNoZWNrIGlmIENQVSBpcyBhIE1lZGlhR1ggb3IgYSBHZW9kZS4gKi8KIAlpZiAoKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX05TQykgJiYKIAkgICAgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0NZUklYKSkgewotCQlkcHJpbnRrKCJlcnJvcjogbm8gTWVkaWFHWC9HZW9kZSBwcm9jZXNzb3IgZm91bmQhXG4iKTsKKwkJcHJfZGVidWcoImVycm9yOiBubyBNZWRpYUdYL0dlb2RlIHByb2Nlc3NvciBmb3VuZCFcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTIwMSw3ICsxOTgsNyBAQAogCQkJcmV0dXJuIGd4X3BjaTsKIAl9CiAKLQlkcHJpbnRrKCJlcnJvcjogbm8gc3VwcG9ydGVkIGNoaXBzZXQgZm91bmQhXG4iKTsKKwlwcl9kZWJ1ZygiZXJyb3I6IG5vIHN1cHBvcnRlZCBjaGlwc2V0IGZvdW5kIVxuIik7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTMwNSwxNCArMzAyLDE0IEBACiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJCWRwcmludGsoImZhdGFsOiB0cnkgdG8gc2V0IHVua25vd24gY2hpcHNldC5cbiIpOworCQkJcHJfZGVidWcoImZhdGFsOiB0cnkgdG8gc2V0IHVua25vd24gY2hpcHNldC5cbiIpOwogCQkJcmV0dXJuOwogCQl9CiAJfSBlbHNlIHsKIAkJc3VzY2ZnID0gZ3hfcGFyYW1zLT5wY2lfc3VzY2ZnICYgfihTVVNNT0QpOwogCQlneF9wYXJhbXMtPm9mZl9kdXJhdGlvbiA9IDA7CiAJCWd4X3BhcmFtcy0+b25fZHVyYXRpb24gPSAwOwotCQlkcHJpbnRrKCJzdXNwZW5kIG1vZHVsYXRpb24gZGlzYWJsZWQ6IGNwdSBydW5zIDEwMCUlIHNwZWVkLlxuIik7CisJCXByX2RlYnVnKCJzdXNwZW5kIG1vZHVsYXRpb24gZGlzYWJsZWQ6IGNwdSBydW5zIDEwMCUlIHNwZWVkLlxuIik7CiAJfQogCiAJZ3hfd3JpdGVfYnl0ZShQQ0lfTU9ET0ZGLCBneF9wYXJhbXMtPm9mZl9kdXJhdGlvbik7CkBAIC0zMjcsOSArMzI0LDkgQEAKIAogCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BPU1RDSEFOR0UpOwogCi0JZHByaW50aygic3VzcGVuZCBtb2R1bGF0aW9uIHcvIGR1cmF0aW9uIG9mIE9OOiVkIHVzLCBPRkY6JWQgdXNcbiIsCisJcHJfZGVidWcoInN1c3BlbmQgbW9kdWxhdGlvbiB3LyBkdXJhdGlvbiBvZiBPTjolZCB1cywgT0ZGOiVkIHVzXG4iLAogCQlneF9wYXJhbXMtPm9uX2R1cmF0aW9uICogMzIsIGd4X3BhcmFtcy0+b2ZmX2R1cmF0aW9uICogMzIpOwotCWRwcmludGsoInN1c3BlbmQgbW9kdWxhdGlvbiB3LyBjbG9jayBzcGVlZDogJWQga0h6LlxuIiwgZnJlcXMubmV3KTsKKwlwcl9kZWJ1Zygic3VzcGVuZCBtb2R1bGF0aW9uIHcvIGNsb2NrIHNwZWVkOiAlZCBrSHouXG4iLCBmcmVxcy5uZXcpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDI4LDggKzQyNSw4IEBACiAJc3RvY2tfZnJlcSA9IG1heGZyZXE7CiAJY3VyZnJlcSA9IGd4X2dldF9jcHVzcGVlZCgwKTsKIAotCWRwcmludGsoImNwdSBtYXggZnJlcXVlbmN5IGlzICVkLlxuIiwgbWF4ZnJlcSk7Ci0JZHByaW50aygiY3B1IGN1cnJlbnQgZnJlcXVlbmN5IGlzICVka0h6LlxuIiwgY3VyZnJlcSk7CisJcHJfZGVidWcoImNwdSBtYXggZnJlcXVlbmN5IGlzICVkLlxuIiwgbWF4ZnJlcSk7CisJcHJfZGVidWcoImNwdSBjdXJyZW50IGZyZXF1ZW5jeSBpcyAlZGtIei5cbiIsIGN1cmZyZXEpOwogCiAJLyogc2V0dXAgYmFzaWMgc3RydWN0IGZvciBjcHVmcmVxIEFQSSAqLwogCXBvbGljeS0+Y3B1ID0gMDsKQEAgLTQ3NSw3ICs0NzIsNyBAQAogCWlmIChtYXhfZHVyYXRpb24gPiAweGZmKQogCQltYXhfZHVyYXRpb24gPSAweGZmOwogCi0JZHByaW50aygiZ2VvZGUgc3VzcGVuZCBtb2R1bGF0aW9uIGF2YWlsYWJsZS5cbiIpOworCXByX2RlYnVnKCJnZW9kZSBzdXNwZW5kIG1vZHVsYXRpb24gYXZhaWxhYmxlLlxuIik7CiAKIAlwYXJhbXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZ3hmcmVxX3BhcmFtcyksIEdGUF9LRVJORUwpOwogCWlmIChwYXJhbXMgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jIGIvZHJpdmVycy9jcHVmcmVxL2xvbmdoYXVsLmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMKcmVuYW1lIHRvIGRyaXZlcnMvY3B1ZnJlcS9sb25naGF1bC5jCmluZGV4IGNmNDhjZGQuLmY0N2QyNmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9sb25naGF1bC5jCkBAIC03Nyw5ICs3Nyw2IEBACiBzdGF0aWMgaW50IGRpc2FibGVfYWNwaV9jMzsKIHN0YXRpYyBpbnQgcmV2aWRfZXJyYXRhOwogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgXAotCQkibG9uZ2hhdWwiLCBtc2cpCi0KIAogLyogQ2xvY2sgcmF0aW9zIG11bHRpcGxpZWQgYnkgMTAgKi8KIHN0YXRpYyBpbnQgbXVsdHNbMzJdOwpAQCAtODcsNyArODQsNiBAQAogc3RhdGljIGludCBsb25naGF1bF92ZXJzaW9uOwogc3RhdGljIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqbG9uZ2hhdWxfdGFibGU7CiAKLSNpZmRlZiBDT05GSUdfQ1BVX0ZSRVFfREVCVUcKIHN0YXRpYyBjaGFyIHNwZWVkYnVmZmVyWzhdOwogCiBzdGF0aWMgY2hhciAqcHJpbnRfc3BlZWQoaW50IHNwZWVkKQpAQCAtMTA2LDcgKzEwMiw2IEBACiAKIAlyZXR1cm4gc3BlZWRidWZmZXI7CiB9Ci0jZW5kaWYKIAogCiBzdGF0aWMgdW5zaWduZWQgaW50IGNhbGNfc3BlZWQoaW50IG11bHQpCkBAIC0yNzUsNyArMjcwLDcgQEAKIAogCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BSRUNIQU5HRSk7CiAKLQlkcHJpbnRrKCJTZXR0aW5nIHRvIEZTQjolZE1IeiBNdWx0OiVkLiVkeCAoJXMpXG4iLAorCXByX2RlYnVnKCJTZXR0aW5nIHRvIEZTQjolZE1IeiBNdWx0OiVkLiVkeCAoJXMpXG4iLAogCQkJZnNiLCBtdWx0LzEwLCBtdWx0JTEwLCBwcmludF9zcGVlZChzcGVlZC8xMDAwKSk7CiByZXRyeV9sb29wOgogCXByZWVtcHRfZGlzYWJsZSgpOwpAQCAtNDYwLDEyICs0NTUsMTIgQEAKIAkJYnJlYWs7CiAJfQogCi0JZHByaW50aygiTWluTXVsdDolZC4lZHggTWF4TXVsdDolZC4lZHhcbiIsCisJcHJfZGVidWcoIk1pbk11bHQ6JWQuJWR4IE1heE11bHQ6JWQuJWR4XG4iLAogCQkgbWlubXVsdC8xMCwgbWlubXVsdCUxMCwgbWF4bXVsdC8xMCwgbWF4bXVsdCUxMCk7CiAKIAloaWdoZXN0X3NwZWVkID0gY2FsY19zcGVlZChtYXhtdWx0KTsKIAlsb3dlc3Rfc3BlZWQgPSBjYWxjX3NwZWVkKG1pbm11bHQpOwotCWRwcmludGsoIkZTQjolZE1IeiAgTG93ZXN0IHNwZWVkOiAlcyAgIEhpZ2hlc3Qgc3BlZWQ6JXNcbiIsIGZzYiwKKwlwcl9kZWJ1ZygiRlNCOiVkTUh6ICBMb3dlc3Qgc3BlZWQ6ICVzICAgSGlnaGVzdCBzcGVlZDolc1xuIiwgZnNiLAogCQkgcHJpbnRfc3BlZWQobG93ZXN0X3NwZWVkLzEwMDApLAogCQkgcHJpbnRfc3BlZWQoaGlnaGVzdF9zcGVlZC8xMDAwKSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5oIGIvZHJpdmVycy9jcHVmcmVxL2xvbmdoYXVsLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5oCnJlbmFtZSB0byBkcml2ZXJzL2NwdWZyZXEvbG9uZ2hhdWwuaApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdydW4uYyBiL2RyaXZlcnMvY3B1ZnJlcS9sb25ncnVuLmMKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdydW4uYwpyZW5hbWUgdG8gZHJpdmVycy9jcHVmcmVxL2xvbmdydW4uYwppbmRleCBkOWY1MTM2Li4zNGVhMzU5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ3J1bi5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9sb25ncnVuLmMKQEAgLTE1LDkgKzE1LDYgQEAKICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgXAotCQkibG9uZ3J1biIsIG1zZykKLQogc3RhdGljIHN0cnVjdCBjcHVmcmVxX2RyaXZlcglsb25ncnVuX2RyaXZlcjsKIAogLyoqCkBAIC00MCwxNCArMzcsMTQgQEAKIAl1MzIgbXNyX2xvLCBtc3JfaGk7CiAKIAlyZG1zcihNU1JfVE1UQV9MT05HUlVOX0ZMQUdTLCBtc3JfbG8sIG1zcl9oaSk7Ci0JZHByaW50aygibG9uZ3J1biBmbGFncyBhcmUgJXggLSAleFxuIiwgbXNyX2xvLCBtc3JfaGkpOworCXByX2RlYnVnKCJsb25ncnVuIGZsYWdzIGFyZSAleCAtICV4XG4iLCBtc3JfbG8sIG1zcl9oaSk7CiAJaWYgKG1zcl9sbyAmIDB4MDEpCiAJCXBvbGljeS0+cG9saWN5ID0gQ1BVRlJFUV9QT0xJQ1lfUEVSRk9STUFOQ0U7CiAJZWxzZQogCQlwb2xpY3ktPnBvbGljeSA9IENQVUZSRVFfUE9MSUNZX1BPV0VSU0FWRTsKIAogCXJkbXNyKE1TUl9UTVRBX0xPTkdSVU5fQ1RSTCwgbXNyX2xvLCBtc3JfaGkpOwotCWRwcmludGsoImxvbmdydW4gY3RybCBpcyAleCAtICV4XG4iLCBtc3JfbG8sIG1zcl9oaSk7CisJcHJfZGVidWcoImxvbmdydW4gY3RybCBpcyAleCAtICV4XG4iLCBtc3JfbG8sIG1zcl9oaSk7CiAJbXNyX2xvICY9IDB4MDAwMDAwN0Y7CiAJbXNyX2hpICY9IDB4MDAwMDAwN0Y7CiAKQEAgLTE1MCw3ICsxNDcsNyBAQAogCQlyZXR1cm4gMDsKIAogCWNwdWlkKDB4ODA4NjAwMDcsICZlYXgsICZlYngsICZlY3gsICZlZHgpOwotCWRwcmludGsoImNwdWlkIGVheCBpcyAldVxuIiwgZWF4KTsKKwlwcl9kZWJ1ZygiY3B1aWQgZWF4IGlzICV1XG4iLCBlYXgpOwogCiAJcmV0dXJuIGVheCAqIDEwMDA7CiB9CkBAIC0xOTYsNyArMTkzLDcgQEAKIAkJcmRtc3IoTVNSX1RNVEFfTFJUSV9WT0xUX01IWiwgbXNyX2xvLCBtc3JfaGkpOwogCQkqaGlnaF9mcmVxID0gbXNyX2xvICogMTAwMDsgLyogdG8ga0h6ICovCiAKLQkJZHByaW50aygibG9uZ3J1biB0YWJsZSBpbnRlcmZhY2UgdG9sZCAldSAtICV1IGtIelxuIiwKKwkJcHJfZGVidWcoImxvbmdydW4gdGFibGUgaW50ZXJmYWNlIHRvbGQgJXUgLSAldSBrSHpcbiIsCiAJCQkJKmxvd19mcmVxLCAqaGlnaF9mcmVxKTsKIAogCQlpZiAoKmxvd19mcmVxID4gKmhpZ2hfZnJlcSkKQEAgLTIwNyw3ICsyMDQsNyBAQAogCS8qIHNldCB0aGUgdXBwZXIgYm9yZGVyIHRvIHRoZSB2YWx1ZSBkZXRlcm1pbmVkIGR1cmluZyBUU0MgaW5pdCAqLwogCSpoaWdoX2ZyZXEgPSAoY3B1X2toeiAvIDEwMDApOwogCSpoaWdoX2ZyZXEgPSAqaGlnaF9mcmVxICogMTAwMDsKLQlkcHJpbnRrKCJoaWdoIGZyZXF1ZW5jeSBpcyAldSBrSHpcbiIsICpoaWdoX2ZyZXEpOworCXByX2RlYnVnKCJoaWdoIGZyZXF1ZW5jeSBpcyAldSBrSHpcbiIsICpoaWdoX2ZyZXEpOwogCiAJLyogZ2V0IGN1cnJlbnQgYm9yZGVycyAqLwogCXJkbXNyKE1TUl9UTVRBX0xPTkdSVU5fQ1RSTCwgbXNyX2xvLCBtc3JfaGkpOwpAQCAtMjMzLDcgKzIzMCw3IEBACiAJCS8qIHJlc3RvcmUgdmFsdWVzICovCiAJCXdybXNyKE1TUl9UTVRBX0xPTkdSVU5fQ1RSTCwgc2F2ZV9sbywgc2F2ZV9oaSk7CiAJfQotCWRwcmludGsoInBlcmNlbnRhZ2UgaXMgJXUgJSUsIGZyZXEgaXMgJXUgTUh6XG4iLCBlY3gsIGVheCk7CisJcHJfZGVidWcoInBlcmNlbnRhZ2UgaXMgJXUgJSUsIGZyZXEgaXMgJXUgTUh6XG4iLCBlY3gsIGVheCk7CiAKIAkvKiBwZXJmb3JtYW5jZV9wY3RnID0gKGN1cnJlbnRfZnJlcSAtIGxvd19mcmVxKS8oaGlnaF9mcmVxIC0gbG93X2ZyZXEpCiAJICogZXFhbHMKQEAgLTI0OSw3ICsyNDYsNyBAQAogCWVkeCA9ICgoZWF4IC0gZWJ4KSAqIDEwMCkgLyAoMTAwIC0gZWN4KTsKIAkqbG93X2ZyZXEgPSBlZHggKiAxMDAwOyAvKiBiYWNrIHRvIGtIeiAqLwogCi0JZHByaW50aygibG93IGZyZXF1ZW5jeSBpcyAldSBrSHpcbiIsICpsb3dfZnJlcSk7CisJcHJfZGVidWcoImxvdyBmcmVxdWVuY3kgaXMgJXUga0h6XG4iLCAqbG93X2ZyZXEpOwogCiAJaWYgKCpsb3dfZnJlcSA+ICpoaWdoX2ZyZXEpCiAJCSpsb3dfZnJlcSA9ICpoaWdoX2ZyZXE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbXBlcmYuYyBiL2RyaXZlcnMvY3B1ZnJlcS9tcGVyZi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbXBlcmYuYwpyZW5hbWUgdG8gZHJpdmVycy9jcHVmcmVxL21wZXJmLmMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9tcGVyZi5oIGIvZHJpdmVycy9jcHVmcmVxL21wZXJmLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9tcGVyZi5oCnJlbmFtZSB0byBkcml2ZXJzL2NwdWZyZXEvbXBlcmYuaApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3A0LWNsb2NrbW9kLmMgYi9kcml2ZXJzL2NwdWZyZXEvcDQtY2xvY2ttb2QuYwpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcDQtY2xvY2ttb2QuYwpyZW5hbWUgdG8gZHJpdmVycy9jcHVmcmVxL3A0LWNsb2NrbW9kLmMKaW5kZXggNTJjOTM2NC4uNmJlM2UwNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3A0LWNsb2NrbW9kLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL3A0LWNsb2NrbW9kLmMKQEAgLTM1LDggKzM1LDYgQEAKICNpbmNsdWRlICJzcGVlZHN0ZXAtbGliLmgiCiAKICNkZWZpbmUgUEZYCSJwNC1jbG9ja21vZDogIgotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKLQkJInA0LWNsb2NrbW9kIiwgbXNnKQogCiAvKgogICogRHV0eSBDeWNsZSAoM2JpdHMpLCBub3RlIERDX0RJU0FCTEUgaXMgbm90IHNwZWNpZmllZCBpbgpAQCAtNjYsNyArNjQsNyBAQAogCXJkbXNyX29uX2NwdShjcHUsIE1TUl9JQTMyX1RIRVJNX1NUQVRVUywgJmwsICZoKTsKIAogCWlmIChsICYgMHgwMSkKLQkJZHByaW50aygiQ1BVIyVkIGN1cnJlbnRseSB0aGVybWFsIHRocm90dGxlZFxuIiwgY3B1KTsKKwkJcHJfZGVidWcoIkNQVSMlZCBjdXJyZW50bHkgdGhlcm1hbCB0aHJvdHRsZWRcbiIsIGNwdSk7CiAKIAlpZiAoaGFzX040NF9PMTdfZXJyYXRhW2NwdV0gJiYKIAkgICAgKG5ld3N0YXRlID09IERDXzI1UFQgfHwgbmV3c3RhdGUgPT0gRENfREZMVCkpCkBAIC03NCwxMCArNzIsMTAgQEAKIAogCXJkbXNyX29uX2NwdShjcHUsIE1TUl9JQTMyX1RIRVJNX0NPTlRST0wsICZsLCAmaCk7CiAJaWYgKG5ld3N0YXRlID09IERDX0RJU0FCTEUpIHsKLQkJZHByaW50aygiQ1BVIyVkIGRpc2FibGluZyBtb2R1bGF0aW9uXG4iLCBjcHUpOworCQlwcl9kZWJ1ZygiQ1BVIyVkIGRpc2FibGluZyBtb2R1bGF0aW9uXG4iLCBjcHUpOwogCQl3cm1zcl9vbl9jcHUoY3B1LCBNU1JfSUEzMl9USEVSTV9DT05UUk9MLCBsICYgfigxPDw0KSwgaCk7CiAJfSBlbHNlIHsKLQkJZHByaW50aygiQ1BVIyVkIHNldHRpbmcgZHV0eSBjeWNsZSB0byAlZCUlXG4iLAorCQlwcl9kZWJ1ZygiQ1BVIyVkIHNldHRpbmcgZHV0eSBjeWNsZSB0byAlZCUlXG4iLAogCQkJY3B1LCAoKDEyNSAqIG5ld3N0YXRlKSAvIDEwKSk7CiAJCS8qIGJpdHMgNjMgLSA1CTogcmVzZXJ2ZWQKIAkJICogYml0ICA0CTogZW5hYmxlL2Rpc2FibGUKQEAgLTIxNyw3ICsyMTUsNyBAQAogCWNhc2UgMHgwZjExOgogCWNhc2UgMHgwZjEyOgogCQloYXNfTjQ0X08xN19lcnJhdGFbcG9saWN5LT5jcHVdID0gMTsKLQkJZHByaW50aygiaGFzIGVycmF0YSAtLSBkaXNhYmxpbmcgbG93IGZyZXF1ZW5jaWVzXG4iKTsKKwkJcHJfZGVidWcoImhhcyBlcnJhdGEgLS0gZGlzYWJsaW5nIGxvdyBmcmVxdWVuY2llc1xuIik7CiAJfQogCiAJaWYgKHNwZWVkc3RlcF9kZXRlY3RfcHJvY2Vzc29yKCkgPT0gU1BFRURTVEVQX0NQVV9QNEQgJiYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wY2MtY3B1ZnJlcS5jIGIvZHJpdmVycy9jcHVmcmVxL3BjYy1jcHVmcmVxLmMKc2ltaWxhcml0eSBpbmRleCA5MCUKcmVuYW1lIGZyb20gYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3BjYy1jcHVmcmVxLmMKcmVuYW1lIHRvIGRyaXZlcnMvY3B1ZnJlcS9wY2MtY3B1ZnJlcS5jCmluZGV4IDc1NWEzMWUuLjdiMDYwM2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wY2MtY3B1ZnJlcS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9wY2MtY3B1ZnJlcS5jCkBAIC0zOSw3ICszOSw3IEBACiAKICNpbmNsdWRlIDxhY3BpL3Byb2Nlc3Nvci5oPgogCi0jZGVmaW5lIFBDQ19WRVJTSU9OIAkiMS4wMC4wMCIKKyNkZWZpbmUgUENDX1ZFUlNJT04JIjEuMTAuMDAiCiAjZGVmaW5lIFBPTExfTE9PUFMgCTMwMAogCiAjZGVmaW5lIENNRF9DT01QTEVURSAJMHgxCkBAIC00OCw5ICs0OCw2IEBACiAKICNkZWZpbmUgQlVGX1NaCQk0CiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLAlcCi0JCQkJCSAgICAgInBjYy1jcHVmcmVxIiwgbXNnKQotCiBzdHJ1Y3QgcGNjX3JlZ2lzdGVyX3Jlc291cmNlIHsKIAl1OCBkZXNjcmlwdG9yOwogCXUxNiBsZW5ndGg7CkBAIC0xMDIsNyArOTksNyBAQAogc3RhdGljIHU2NCBkb29yYmVsbF9wcmVzZXJ2ZTsKIHN0YXRpYyB1NjQgZG9vcmJlbGxfd3JpdGU7CiAKLXN0YXRpYyB1OCBPU0NfVVVJRFsxNl0gPSB7MHg2MywgMHg5QiwgMHgyQywgMHg5RiwgMHg3MCwgMHg5MSwgMHg0OSwgMHgxZiwKK3N0YXRpYyB1OCBPU0NfVVVJRFsxNl0gPSB7MHg5RiwgMHgyQywgMHg5QiwgMHg2MywgMHg5MSwgMHg3MCwgMHgxZiwgMHg0OSwKIAkJCSAgMHhCQiwgMHg0RiwgMHhBNSwgMHg5OCwgMHgyRiwgMHhBMSwgMHhCNSwgMHg0Nn07CiAKIHN0cnVjdCBwY2NfY3B1IHsKQEAgLTE1Miw3ICsxNDksNyBAQAogCiAJc3Bpbl9sb2NrKCZwY2NfbG9jayk7CiAKLQlkcHJpbnRrKCJnZXQ6IGdldF9mcmVxIGZvciBDUFUgJWRcbiIsIGNwdSk7CisJcHJfZGVidWcoImdldDogZ2V0X2ZyZXEgZm9yIENQVSAlZFxuIiwgY3B1KTsKIAlwY2NfY3B1X2RhdGEgPSBwZXJfY3B1X3B0cihwY2NfY3B1X2luZm8sIGNwdSk7CiAKIAlpbnB1dF9idWZmZXIgPSAweDE7CkBAIC0xNzAsNyArMTY3LDcgQEAKIAogCXN0YXR1cyA9IGlvcmVhZDE2KCZwY2NoX2hkci0+c3RhdHVzKTsKIAlpZiAoc3RhdHVzICE9IENNRF9DT01QTEVURSkgewotCQlkcHJpbnRrKCJnZXQ6IEZBSUxFRDogZm9yIENQVSAlZCwgc3RhdHVzIGlzICVkXG4iLAorCQlwcl9kZWJ1ZygiZ2V0OiBGQUlMRUQ6IGZvciBDUFUgJWQsIHN0YXR1cyBpcyAlZFxuIiwKIAkJCWNwdSwgc3RhdHVzKTsKIAkJZ290byBjbWRfaW5jb21wbGV0ZTsKIAl9CkBAIC0xNzgsMTQgKzE3NSwxNCBAQAogCWN1cnJfZnJlcSA9ICgoKGlvcmVhZDMyKCZwY2NoX2hkci0+bm9taW5hbCkgKiAob3V0cHV0X2J1ZmZlciAmIDB4ZmYpKQogCQkJLyAxMDApICogMTAwMCk7CiAKLQlkcHJpbnRrKCJnZXQ6IFNVQ0NFU1M6ICh2aXJ0dWFsKSBvdXRwdXRfb2Zmc2V0IGZvciBjcHUgJWQgaXMgIgotCQkiMHgleCwgY29udGFpbnMgYSB2YWx1ZSBvZjogMHgleC4gU3BlZWQgaXM6ICVkIE1IelxuIiwKKwlwcl9kZWJ1ZygiZ2V0OiBTVUNDRVNTOiAodmlydHVhbCkgb3V0cHV0X29mZnNldCBmb3IgY3B1ICVkIGlzICIKKwkJIjB4JXAsIGNvbnRhaW5zIGEgdmFsdWUgb2Y6IDB4JXguIFNwZWVkIGlzOiAlZCBNSHpcbiIsCiAJCWNwdSwgKHBjY2hfdmlydF9hZGRyICsgcGNjX2NwdV9kYXRhLT5vdXRwdXRfb2Zmc2V0KSwKIAkJb3V0cHV0X2J1ZmZlciwgY3Vycl9mcmVxKTsKIAogCWZyZXFfbGltaXQgPSAob3V0cHV0X2J1ZmZlciA+PiA4KSAmIDB4ZmY7CiAJaWYgKGZyZXFfbGltaXQgIT0gMHhmZikgewotCQlkcHJpbnRrKCJnZXQ6IGZyZXF1ZW5jeSBmb3IgY3B1ICVkIGlzIGJlaW5nIHRlbXBvcmFyaWx5IgorCQlwcl9kZWJ1ZygiZ2V0OiBmcmVxdWVuY3kgZm9yIGNwdSAlZCBpcyBiZWluZyB0ZW1wb3JhcmlseSIKIAkJCSIgY2FwcGVkIGF0ICVkXG4iLCBjcHUsIGN1cnJfZnJlcSk7CiAJfQogCkBAIC0yMTIsOCArMjA5LDggQEAKIAljcHUgPSBwb2xpY3ktPmNwdTsKIAlwY2NfY3B1X2RhdGEgPSBwZXJfY3B1X3B0cihwY2NfY3B1X2luZm8sIGNwdSk7CiAKLQlkcHJpbnRrKCJ0YXJnZXQ6IENQVSAlZCBzaG91bGQgZ28gdG8gdGFyZ2V0IGZyZXE6ICVkICIKLQkJIih2aXJ0dWFsKSBpbnB1dF9vZmZzZXQgaXMgMHgleFxuIiwKKwlwcl9kZWJ1ZygidGFyZ2V0OiBDUFUgJWQgc2hvdWxkIGdvIHRvIHRhcmdldCBmcmVxOiAlZCAiCisJCSIodmlydHVhbCkgaW5wdXRfb2Zmc2V0IGlzIDB4JXBcbiIsCiAJCWNwdSwgdGFyZ2V0X2ZyZXEsCiAJCShwY2NoX3ZpcnRfYWRkciArIHBjY19jcHVfZGF0YS0+aW5wdXRfb2Zmc2V0KSk7CiAKQEAgLTIzNCwxNCArMjMxLDE0IEBACiAKIAlzdGF0dXMgPSBpb3JlYWQxNigmcGNjaF9oZHItPnN0YXR1cyk7CiAJaWYgKHN0YXR1cyAhPSBDTURfQ09NUExFVEUpIHsKLQkJZHByaW50aygidGFyZ2V0OiBGQUlMRUQgZm9yIGNwdSAlZCwgd2l0aCBzdGF0dXM6IDB4JXhcbiIsCisJCXByX2RlYnVnKCJ0YXJnZXQ6IEZBSUxFRCBmb3IgY3B1ICVkLCB3aXRoIHN0YXR1czogMHgleFxuIiwKIAkJCWNwdSwgc3RhdHVzKTsKIAkJZ290byBjbWRfaW5jb21wbGV0ZTsKIAl9CiAJaW93cml0ZTE2KDAsICZwY2NoX2hkci0+c3RhdHVzKTsKIAogCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BPU1RDSEFOR0UpOwotCWRwcmludGsoInRhcmdldDogd2FzIFNVQ0NFU1NGVUwgZm9yIGNwdSAlZFxuIiwgY3B1KTsKKwlwcl9kZWJ1ZygidGFyZ2V0OiB3YXMgU1VDQ0VTU0ZVTCBmb3IgY3B1ICVkXG4iLCBjcHUpOwogCXNwaW5fdW5sb2NrKCZwY2NfbG9jayk7CiAKIAlyZXR1cm4gMDsKQEAgLTI5Myw3ICsyOTAsNyBAQAogCW1lbXNldF9pbygocGNjaF92aXJ0X2FkZHIgKyBwY2NfY3B1X2RhdGEtPmlucHV0X29mZnNldCksIDAsIEJVRl9TWik7CiAJbWVtc2V0X2lvKChwY2NoX3ZpcnRfYWRkciArIHBjY19jcHVfZGF0YS0+b3V0cHV0X29mZnNldCksIDAsIEJVRl9TWik7CiAKLQlkcHJpbnRrKCJwY2NfZ2V0X29mZnNldDogZm9yIENQVSAlZDogcGNjX2NwdV9kYXRhICIKKwlwcl9kZWJ1ZygicGNjX2dldF9vZmZzZXQ6IGZvciBDUFUgJWQ6IHBjY19jcHVfZGF0YSAiCiAJCSJpbnB1dF9vZmZzZXQ6IDB4JXgsIHBjY19jcHVfZGF0YSBvdXRwdXRfb2Zmc2V0OiAweCV4XG4iLAogCQljcHUsIHBjY19jcHVfZGF0YS0+aW5wdXRfb2Zmc2V0LCBwY2NfY3B1X2RhdGEtPm91dHB1dF9vZmZzZXQpOwogb3V0X2ZyZWU6CkBAIC00MTAsNyArNDA3LDcgQEAKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKIAkJcmV0ID0gcGNjX2NwdWZyZXFfZG9fb3NjKCZvc2NfaGFuZGxlKTsKIAkJaWYgKHJldCkKLQkJCWRwcmludGsoInByb2JlOiBfT1NDIGV2YWx1YXRpb24gZGlkIG5vdCBzdWNjZWVkXG4iKTsKKwkJCXByX2RlYnVnKCJwcm9iZTogX09TQyBldmFsdWF0aW9uIGRpZCBub3Qgc3VjY2VlZFxuIik7CiAJCS8qIEZpcm13YXJlJ3MgdXNlIG9mIF9PU0MgaXMgb3B0aW9uYWwgKi8KIAkJcmV0ID0gMDsKIAl9CkBAIC00MzMsNyArNDMwLDcgQEAKIAogCW1lbV9yZXNvdXJjZSA9IChzdHJ1Y3QgcGNjX21lbW9yeV9yZXNvdXJjZSAqKW1lbWJlci0+YnVmZmVyLnBvaW50ZXI7CiAKLQlkcHJpbnRrKCJwcm9iZTogbWVtX3Jlc291cmNlIGRlc2NyaXB0b3I6IDB4JXgsIgorCXByX2RlYnVnKCJwcm9iZTogbWVtX3Jlc291cmNlIGRlc2NyaXB0b3I6IDB4JXgsIgogCQkiIGxlbmd0aDogJWQsIHNwYWNlX2lkOiAlZCwgcmVzb3VyY2VfdXNhZ2U6ICVkLCIKIAkJIiB0eXBlX3NwZWNpZmljOiAlZCwgZ3JhbnVsYXJpdHk6IDB4JWxseCwiCiAJCSIgbWluaW11bTogMHglbGx4LCBtYXhpbXVtOiAweCVsbHgsIgpAQCAtNDUzLDEzICs0NTAsMTMgQEAKIAlwY2NoX3ZpcnRfYWRkciA9IGlvcmVtYXBfbm9jYWNoZShtZW1fcmVzb3VyY2UtPm1pbmltdW0sCiAJCQkJCW1lbV9yZXNvdXJjZS0+YWRkcmVzc19sZW5ndGgpOwogCWlmIChwY2NoX3ZpcnRfYWRkciA9PSBOVUxMKSB7Ci0JCWRwcmludGsoInByb2JlOiBjb3VsZCBub3QgbWFwIHNoYXJlZCBtZW0gcmVnaW9uXG4iKTsKKwkJcHJfZGVidWcoInByb2JlOiBjb3VsZCBub3QgbWFwIHNoYXJlZCBtZW0gcmVnaW9uXG4iKTsKIAkJZ290byBvdXRfZnJlZTsKIAl9CiAJcGNjaF9oZHIgPSBwY2NoX3ZpcnRfYWRkcjsKIAotCWRwcmludGsoInByb2JlOiBQQ0NIIGhlYWRlciAodmlydHVhbCkgYWRkcjogMHglcFxuIiwgcGNjaF9oZHIpOwotCWRwcmludGsoInByb2JlOiBQQ0NIIGhlYWRlciBpcyBhdCBwaHlzaWNhbCBhZGRyZXNzOiAweCVsbHgsIgorCXByX2RlYnVnKCJwcm9iZTogUENDSCBoZWFkZXIgKHZpcnR1YWwpIGFkZHI6IDB4JXBcbiIsIHBjY2hfaGRyKTsKKwlwcl9kZWJ1ZygicHJvYmU6IFBDQ0ggaGVhZGVyIGlzIGF0IHBoeXNpY2FsIGFkZHJlc3M6IDB4JWxseCwiCiAJCSIgc2lnbmF0dXJlOiAweCV4LCBsZW5ndGg6ICVkIGJ5dGVzLCBtYWpvcjogJWQsIG1pbm9yOiAlZCwiCiAJCSIgc3VwcG9ydGVkIGZlYXR1cmVzOiAweCV4LCBjb21tYW5kIGZpZWxkOiAweCV4LCIKIAkJIiBzdGF0dXMgZmllbGQ6IDB4JXgsIG5vbWluYWwgbGF0ZW5jeTogJWQgdXNcbiIsCkBAIC00NjksNyArNDY2LDcgQEAKIAkJaW9yZWFkMTYoJnBjY2hfaGRyLT5jb21tYW5kKSwgaW9yZWFkMTYoJnBjY2hfaGRyLT5zdGF0dXMpLAogCQlpb3JlYWQzMigmcGNjaF9oZHItPmxhdGVuY3kpKTsKIAotCWRwcmludGsoInByb2JlOiBtaW4gdGltZSBiZXR3ZWVuIGNvbW1hbmRzOiAlZCB1cywiCisJcHJfZGVidWcoInByb2JlOiBtaW4gdGltZSBiZXR3ZWVuIGNvbW1hbmRzOiAlZCB1cywiCiAJCSIgbWF4IHRpbWUgYmV0d2VlbiBjb21tYW5kczogJWQgdXMsIgogCQkiIG5vbWluYWwgQ1BVIGZyZXF1ZW5jeTogJWQgTUh6LCIKIAkJIiBtaW5pbXVtIENQVSBmcmVxdWVuY3k6ICVkIE1IeiwiCkBAIC00OTQsNyArNDkxLDcgQEAKIAlkb29yYmVsbC5hY2Nlc3Nfd2lkdGggPSA2NDsKIAlkb29yYmVsbC5hZGRyZXNzID0gcmVnX3Jlc291cmNlLT5hZGRyZXNzOwogCi0JZHByaW50aygicHJvYmU6IGRvb3JiZWxsOiBzcGFjZV9pZCBpcyAlZCwgYml0X3dpZHRoIGlzICVkLCAiCisJcHJfZGVidWcoInByb2JlOiBkb29yYmVsbDogc3BhY2VfaWQgaXMgJWQsIGJpdF93aWR0aCBpcyAlZCwgIgogCQkiYml0X29mZnNldCBpcyAlZCwgYWNjZXNzX3dpZHRoIGlzICVkLCBhZGRyZXNzIGlzIDB4JWxseFxuIiwKIAkJZG9vcmJlbGwuc3BhY2VfaWQsIGRvb3JiZWxsLmJpdF93aWR0aCwgZG9vcmJlbGwuYml0X29mZnNldCwKIAkJZG9vcmJlbGwuYWNjZXNzX3dpZHRoLCByZWdfcmVzb3VyY2UtPmFkZHJlc3MpOwpAQCAtNTE1LDcgKzUxMiw3IEBACiAKIAlkb29yYmVsbF93cml0ZSA9IG1lbWJlci0+aW50ZWdlci52YWx1ZTsKIAotCWRwcmludGsoInByb2JlOiBkb29yYmVsbF9wcmVzZXJ2ZTogMHglbGx4LCIKKwlwcl9kZWJ1ZygicHJvYmU6IGRvb3JiZWxsX3ByZXNlcnZlOiAweCVsbHgsIgogCQkiIGRvb3JiZWxsX3dyaXRlOiAweCVsbHhcbiIsCiAJCWRvb3JiZWxsX3ByZXNlcnZlLCBkb29yYmVsbF93cml0ZSk7CiAKQEAgLTU1MCw3ICs1NDcsNyBAQAogCiAJcmVzdWx0ID0gcGNjX2dldF9vZmZzZXQoY3B1KTsKIAlpZiAocmVzdWx0KSB7Ci0JCWRwcmludGsoImluaXQ6IFBDQ1AgZXZhbHVhdGlvbiBmYWlsZWRcbiIpOworCQlwcl9kZWJ1ZygiaW5pdDogUENDUCBldmFsdWF0aW9uIGZhaWxlZFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNTYxLDEyICs1NTgsMTIgQEAKIAlwb2xpY3ktPmN1ciA9IHBjY19nZXRfZnJlcShjcHUpOwogCiAJaWYgKCFwb2xpY3ktPmN1cikgewotCQlkcHJpbnRrKCJpbml0OiBVbmFibGUgdG8gZ2V0IGN1cnJlbnQgQ1BVIGZyZXF1ZW5jeVxuIik7CisJCXByX2RlYnVnKCJpbml0OiBVbmFibGUgdG8gZ2V0IGN1cnJlbnQgQ1BVIGZyZXF1ZW5jeVxuIik7CiAJCXJlc3VsdCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KIAotCWRwcmludGsoImluaXQ6IHBvbGljeS0+bWF4IGlzICVkLCBwb2xpY3ktPm1pbiBpcyAlZFxuIiwKKwlwcl9kZWJ1ZygiaW5pdDogcG9saWN5LT5tYXggaXMgJWQsIHBvbGljeS0+bWluIGlzICVkXG4iLAogCQlwb2xpY3ktPm1heCwgcG9saWN5LT5taW4pOwogb3V0OgogCXJldHVybiByZXN1bHQ7CkBAIC01OTcsNyArNTk0LDcgQEAKIAogCXJldCA9IHBjY19jcHVmcmVxX3Byb2JlKCk7CiAJaWYgKHJldCkgewotCQlkcHJpbnRrKCJwY2NfY3B1ZnJlcV9pbml0OiBQQ0NIIGV2YWx1YXRpb24gZmFpbGVkXG4iKTsKKwkJcHJfZGVidWcoInBjY19jcHVmcmVxX2luaXQ6IFBDQ0ggZXZhbHVhdGlvbiBmYWlsZWRcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs2LmMgYi9kcml2ZXJzL2NwdWZyZXEvcG93ZXJub3ctazYuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs2LmMKcmVuYW1lIHRvIGRyaXZlcnMvY3B1ZnJlcS9wb3dlcm5vdy1rNi5jCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazcuYyBiL2RyaXZlcnMvY3B1ZnJlcS9wb3dlcm5vdy1rNy5jCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIGFyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNy5jCnJlbmFtZSB0byBkcml2ZXJzL2NwdWZyZXEvcG93ZXJub3ctazcuYwppbmRleCA0YTQ1ZmQ2Li5kNzFkOWYzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazcuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvcG93ZXJub3ctazcuYwpAQCAtNjgsNyArNjgsNiBAQAogfTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0NQVV9GUkVRX0RFQlVHCiAvKiBkaXZpZGUgYnkgMTAwMCB0byBnZXQgVkNvcmUgdm9sdGFnZSBpbiBWLiAqLwogc3RhdGljIGNvbnN0IGludCBtb2JpbGVfdmlkX3RhYmxlWzMyXSA9IHsKICAgICAyMDAwLCAxOTUwLCAxOTAwLCAxODUwLCAxODAwLCAxNzUwLCAxNzAwLCAxNjUwLApAQCAtNzYsNyArNzUsNiBAQAogICAgIDEyNzUsIDEyNTAsIDEyMjUsIDEyMDAsIDExNzUsIDExNTAsIDExMjUsIDExMDAsCiAgICAgMTA3NSwgMTA1MCwgMTAyNSwgMTAwMCwgOTc1LCA5NTAsIDkyNSwgMCwKIH07Ci0jZW5kaWYKIAogLyogZGl2aWRlIGJ5IDEwIHRvIGdldCBGSUQuICovCiBzdGF0aWMgY29uc3QgaW50IGZpZF9jb2Rlc1szMl0gPSB7CkBAIC0xMDMsOSArMTAxLDYgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbGF0ZW5jeTsKIHN0YXRpYyBjaGFyIGhhdmVfYTA7CiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCBcCi0JCSJwb3dlcm5vdy1rNyIsIG1zZykKLQogc3RhdGljIGludCBjaGVja19mc2IodW5zaWduZWQgaW50IGZzYnNwZWVkKQogewogCWludCBkZWx0YTsKQEAgLTIwOSw3ICsyMDQsNyBAQAogCQl2aWQgPSAqcHN0Kys7CiAJCXBvd2Vybm93X3RhYmxlW2pdLmluZGV4IHw9ICh2aWQgPDwgOCk7IC8qIHVwcGVyIDggYml0cyAqLwogCi0JCWRwcmludGsoIiAgIEZJRDogMHgleCAoJWQuJWR4IFslZE1Iel0pICAiCisJCXByX2RlYnVnKCIgICBGSUQ6IDB4JXggKCVkLiVkeCBbJWRNSHpdKSAgIgogCQkJICJWSUQ6IDB4JXggKCVkLiUwM2RWKVxuIiwgZmlkLCBmaWRfY29kZXNbZmlkXSAvIDEwLAogCQkJIGZpZF9jb2Rlc1tmaWRdICUgMTAsIHNwZWVkLzEwMDAsIHZpZCwKIAkJCSBtb2JpbGVfdmlkX3RhYmxlW3ZpZF0vMTAwMCwKQEAgLTM2Nyw3ICszNjIsNyBAQAogCQl1bnNpZ25lZCBpbnQgc3BlZWQsIHNwZWVkX21oejsKIAogCQlwYy52YWwgPSAodW5zaWduZWQgbG9uZykgc3RhdGUtPmNvbnRyb2w7Ci0JCWRwcmludGsoImFjcGk6ICBQJWQ6ICVkIE1IeiAlZCBtVyAlZCB1UyBjb250cm9sICUwOHggU0dUQyAlZFxuIiwKKwkJcHJfZGVidWcoImFjcGk6ICBQJWQ6ICVkIE1IeiAlZCBtVyAlZCB1UyBjb250cm9sICUwOHggU0dUQyAlZFxuIiwKIAkJCSBpLAogCQkJICh1MzIpIHN0YXRlLT5jb3JlX2ZyZXF1ZW5jeSwKIAkJCSAodTMyKSBzdGF0ZS0+cG93ZXIsCkBAIC00MDEsNyArMzk2LDcgQEAKIAkJCQlpbnZhbGlkYXRlX2VudHJ5KGkpOwogCQl9CiAKLQkJZHByaW50aygiICAgRklEOiAweCV4ICglZC4lZHggWyVkTUh6XSkgICIKKwkJcHJfZGVidWcoIiAgIEZJRDogMHgleCAoJWQuJWR4IFslZE1Iel0pICAiCiAJCQkgIlZJRDogMHgleCAoJWQuJTAzZFYpXG4iLCBmaWQsIGZpZF9jb2Rlc1tmaWRdIC8gMTAsCiAJCQkgZmlkX2NvZGVzW2ZpZF0gJSAxMCwgc3BlZWRfbWh6LCB2aWQsCiAJCQkgbW9iaWxlX3ZpZF90YWJsZVt2aWRdLzEwMDAsCkBAIC00MDksNyArNDA0LDcgQEAKIAogCQlpZiAoc3RhdGUtPmNvcmVfZnJlcXVlbmN5ICE9IHNwZWVkX21oeikgewogCQkJc3RhdGUtPmNvcmVfZnJlcXVlbmN5ID0gc3BlZWRfbWh6OwotCQkJZHByaW50aygiICAgQ29ycmVjdGVkIEFDUEkgZnJlcXVlbmN5IHRvICVkXG4iLAorCQkJcHJfZGVidWcoIiAgIENvcnJlY3RlZCBBQ1BJIGZyZXF1ZW5jeSB0byAlZFxuIiwKIAkJCQlzcGVlZF9taHopOwogCQl9CiAKQEAgLTQ1Myw4ICs0NDgsOCBAQAogCiBzdGF0aWMgdm9pZCBwcmludF9wc3RfZW50cnkoc3RydWN0IHBzdF9zICpwc3QsIHVuc2lnbmVkIGludCBqKQogewotCWRwcmludGsoIlBTVDolZCAoQCVwKVxuIiwgaiwgcHN0KTsKLQlkcHJpbnRrKCIgY3B1aWQ6IDB4JXggIGZzYjogJWQgIG1heEZJRDogMHgleCAgc3RhcnR2aWQ6IDB4JXhcbiIsCisJcHJfZGVidWcoIlBTVDolZCAoQCVwKVxuIiwgaiwgcHN0KTsKKwlwcl9kZWJ1ZygiIGNwdWlkOiAweCV4ICBmc2I6ICVkICBtYXhGSUQ6IDB4JXggIHN0YXJ0dmlkOiAweCV4XG4iLAogCQlwc3QtPmNwdWlkLCBwc3QtPmZzYnNwZWVkLCBwc3QtPm1heGZpZCwgcHN0LT5zdGFydHZpZCk7CiB9CiAKQEAgLTQ3NCwyMCArNDY5LDIwIEBACiAJCXAgPSBwaHlzX3RvX3ZpcnQoaSk7CiAKIAkJaWYgKG1lbWNtcChwLCAiQU1ESzdQTk9XISIsICAxMCkgPT0gMCkgewotCQkJZHByaW50aygiRm91bmQgUFNCIGhlYWRlciBhdCAlcFxuIiwgcCk7CisJCQlwcl9kZWJ1ZygiRm91bmQgUFNCIGhlYWRlciBhdCAlcFxuIiwgcCk7CiAJCQlwc2IgPSAoc3RydWN0IHBzYl9zICopIHA7Ci0JCQlkcHJpbnRrKCJUYWJsZSB2ZXJzaW9uOiAweCV4XG4iLCBwc2ItPnRhYmxldmVyc2lvbik7CisJCQlwcl9kZWJ1ZygiVGFibGUgdmVyc2lvbjogMHgleFxuIiwgcHNiLT50YWJsZXZlcnNpb24pOwogCQkJaWYgKHBzYi0+dGFibGV2ZXJzaW9uICE9IDB4MTIpIHsKIAkJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiU29ycnksIG9ubHkgdjEuMiB0YWJsZXMiCiAJCQkJCQkiIHN1cHBvcnRlZCByaWdodCBub3dcbiIpOwogCQkJCXJldHVybiAtRU5PREVWOwogCQkJfQogCi0JCQlkcHJpbnRrKCJGbGFnczogMHgleFxuIiwgcHNiLT5mbGFncyk7CisJCQlwcl9kZWJ1ZygiRmxhZ3M6IDB4JXhcbiIsIHBzYi0+ZmxhZ3MpOwogCQkJaWYgKChwc2ItPmZsYWdzICYgMSkgPT0gMCkKLQkJCQlkcHJpbnRrKCJNb2JpbGUgdm9sdGFnZSByZWd1bGF0b3JcbiIpOworCQkJCXByX2RlYnVnKCJNb2JpbGUgdm9sdGFnZSByZWd1bGF0b3JcbiIpOwogCQkJZWxzZQotCQkJCWRwcmludGsoIkRlc2t0b3Agdm9sdGFnZSByZWd1bGF0b3JcbiIpOworCQkJCXByX2RlYnVnKCJEZXNrdG9wIHZvbHRhZ2UgcmVndWxhdG9yXG4iKTsKIAogCQkJbGF0ZW5jeSA9IHBzYi0+c2V0dGxpbmd0aW1lOwogCQkJaWYgKGxhdGVuY3kgPCAxMDApIHsKQEAgLTQ5Nyw5ICs0OTIsOSBAQAogCQkJCQkJIkNvcnJlY3RpbmcuXG4iLCBsYXRlbmN5KTsKIAkJCQlsYXRlbmN5ID0gMTAwOwogCQkJfQotCQkJZHByaW50aygiU2V0dGxpbmcgVGltZTogJWQgbWljcm9zZWNvbmRzLlxuIiwKKwkJCXByX2RlYnVnKCJTZXR0bGluZyBUaW1lOiAlZCBtaWNyb3NlY29uZHMuXG4iLAogCQkJCQlwc2ItPnNldHRsaW5ndGltZSk7Ci0JCQlkcHJpbnRrKCJIYXMgJWQgUFNUIHRhYmxlcy4gKE9ubHkgZHVtcGluZyBvbmVzICIKKwkJCXByX2RlYnVnKCJIYXMgJWQgUFNUIHRhYmxlcy4gKE9ubHkgZHVtcGluZyBvbmVzICIKIAkJCQkJInJlbGV2YW50IHRvIHRoaXMgQ1BVKS5cbiIsCiAJCQkJCXBzYi0+bnVtcHN0KTsKIApAQCAtNjUwLDcgKzY0NSw3IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJjYW4gbm90IGRldGVybWluZSBidXMgZnJlcXVlbmN5XG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWRwcmludGsoIkZTQjogJTNkTUh6XG4iLCBmc2IvMTAwMCk7CisJcHJfZGVidWcoIkZTQjogJTNkTUh6XG4iLCBmc2IvMTAwMCk7CiAKIAlpZiAoZG1pX2NoZWNrX3N5c3RlbShwb3dlcm5vd19kbWlfdGFibGUpIHx8IGFjcGlfZm9yY2UpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlBTQi9QU1Qga25vd24gdG8gYmUgYnJva2VuLiAgIgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmggYi9kcml2ZXJzL2NwdWZyZXEvcG93ZXJub3ctazcuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmgKcmVuYW1lIHRvIGRyaXZlcnMvY3B1ZnJlcS9wb3dlcm5vdy1rNy5oCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYyBiL2RyaXZlcnMvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCnNpbWlsYXJpdHkgaW5kZXggOTMlCnJlbmFtZSBmcm9tIGFyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCnJlbmFtZSB0byBkcml2ZXJzL2NwdWZyZXEvcG93ZXJub3ctazguYwppbmRleCAyMzY4ZTM4Li44MzQ3OWI2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYworKysgYi9kcml2ZXJzL2NwdWZyZXEvcG93ZXJub3ctazguYwpAQCAtMTM5LDcgKzEzOSw3IEBACiAJfQogCWRvIHsKIAkJaWYgKGkrKyA+IDEwMDAwKSB7Ci0JCQlkcHJpbnRrKCJkZXRlY3RlZCBjaGFuZ2UgcGVuZGluZyBzdHVja1xuIik7CisJCQlwcl9kZWJ1ZygiZGV0ZWN0ZWQgY2hhbmdlIHBlbmRpbmcgc3R1Y2tcbiIpOwogCQkJcmV0dXJuIDE7CiAJCX0KIAkJcmRtc3IoTVNSX0ZJRFZJRF9TVEFUVVMsIGxvLCBoaSk7CkBAIC0xNzYsNyArMTc2LDcgQEAKIAlmaWQgPSBsbyAmIE1TUl9TX0xPX0NVUlJFTlRfRklEOwogCWxvID0gZmlkIHwgKHZpZCA8PCBNU1JfQ19MT19WSURfU0hJRlQpOwogCWhpID0gTVNSX0NfSElfU1RQX0dOVF9CRU5JR047Ci0JZHByaW50aygiY3B1JWQsIGluaXQgbG8gMHgleCwgaGkgMHgleFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBsbywgaGkpOworCXByX2RlYnVnKCJjcHUlZCwgaW5pdCBsbyAweCV4LCBoaSAweCV4XG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIGxvLCBoaSk7CiAJd3Jtc3IoTVNSX0ZJRFZJRF9DVEwsIGxvLCBoaSk7CiB9CiAKQEAgLTE5Niw3ICsxOTYsNyBAQAogCWxvIHw9IChkYXRhLT5jdXJydmlkIDw8IE1TUl9DX0xPX1ZJRF9TSElGVCk7CiAJbG8gfD0gTVNSX0NfTE9fSU5JVF9GSURfVklEOwogCi0JZHByaW50aygid3JpdGluZyBmaWQgMHgleCwgbG8gMHgleCwgaGkgMHgleFxuIiwKKwlwcl9kZWJ1Zygid3JpdGluZyBmaWQgMHgleCwgbG8gMHgleCwgaGkgMHgleFxuIiwKIAkJZmlkLCBsbywgZGF0YS0+cGxsbG9jayAqIFBMTF9MT0NLX0NPTlZFUlNJT04pOwogCiAJZG8gewpAQCAtMjQ0LDcgKzI0NCw3IEBACiAJbG8gfD0gKHZpZCA8PCBNU1JfQ19MT19WSURfU0hJRlQpOwogCWxvIHw9IE1TUl9DX0xPX0lOSVRfRklEX1ZJRDsKIAotCWRwcmludGsoIndyaXRpbmcgdmlkIDB4JXgsIGxvIDB4JXgsIGhpIDB4JXhcbiIsCisJcHJfZGVidWcoIndyaXRpbmcgdmlkIDB4JXgsIGxvIDB4JXgsIGhpIDB4JXhcbiIsCiAJCXZpZCwgbG8sIFNUT1BfR1JBTlRfNU5TKTsKIAogCWRvIHsKQEAgLTMyNSw3ICszMjUsNyBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlkcHJpbnRrKCJ0cmFuc2l0aW9uZWQgKGNwdSVkKTogbmV3IGZpZCAweCV4LCB2aWQgMHgleFxuIiwKKwlwcl9kZWJ1ZygidHJhbnNpdGlvbmVkIChjcHUlZCk6IG5ldyBmaWQgMHgleCwgdmlkIDB4JXhcbiIsCiAJCXNtcF9wcm9jZXNzb3JfaWQoKSwgZGF0YS0+Y3VycmZpZCwgZGF0YS0+Y3VycnZpZCk7CiAKIAlyZXR1cm4gMDsKQEAgLTMzOSw3ICszMzksNyBAQAogCXUzMiBzYXZlZmlkID0gZGF0YS0+Y3VycmZpZDsKIAl1MzIgbWF4dmlkLCBsbywgcnZvbXVsdCA9IDE7CiAKLQlkcHJpbnRrKCJwaDEgKGNwdSVkKTogc3RhcnQsIGN1cnJmaWQgMHgleCwgY3VycnZpZCAweCV4LCAiCisJcHJfZGVidWcoInBoMSAoY3B1JWQpOiBzdGFydCwgY3VycmZpZCAweCV4LCBjdXJydmlkIDB4JXgsICIKIAkJInJlcXZpZCAweCV4LCBydm8gMHgleFxuIiwKIAkJc21wX3Byb2Nlc3Nvcl9pZCgpLAogCQlkYXRhLT5jdXJyZmlkLCBkYXRhLT5jdXJydmlkLCByZXF2aWQsIGRhdGEtPnJ2byk7CkBAIC0zNDksMTIgKzM0OSwxMiBAQAogCXJ2b3N0ZXBzICo9IHJ2b211bHQ7CiAJcmRtc3IoTVNSX0ZJRFZJRF9TVEFUVVMsIGxvLCBtYXh2aWQpOwogCW1heHZpZCA9IDB4MWYgJiAobWF4dmlkID4+IDE2KTsKLQlkcHJpbnRrKCJwaDEgbWF4dmlkPTB4JXhcbiIsIG1heHZpZCk7CisJcHJfZGVidWcoInBoMSBtYXh2aWQ9MHgleFxuIiwgbWF4dmlkKTsKIAlpZiAocmVxdmlkIDwgbWF4dmlkKSAvKiBsb3dlciBudW1iZXJzIGFyZSBoaWdoZXIgdm9sdGFnZXMgKi8KIAkJcmVxdmlkID0gbWF4dmlkOwogCiAJd2hpbGUgKGRhdGEtPmN1cnJ2aWQgPiByZXF2aWQpIHsKLQkJZHByaW50aygicGgxOiBjdXJyIDB4JXgsIHJlcSB2aWQgMHgleFxuIiwKKwkJcHJfZGVidWcoInBoMTogY3VyciAweCV4LCByZXEgdmlkIDB4JXhcbiIsCiAJCQlkYXRhLT5jdXJydmlkLCByZXF2aWQpOwogCQlpZiAoZGVjcmVhc2VfdmlkX2NvZGVfYnlfc3RlcChkYXRhLCByZXF2aWQsIGRhdGEtPnZpZG12cykpCiAJCQlyZXR1cm4gMTsKQEAgLTM2NSw3ICszNjUsNyBAQAogCQlpZiAoZGF0YS0+Y3VycnZpZCA9PSBtYXh2aWQpIHsKIAkJCXJ2b3N0ZXBzID0gMDsKIAkJfSBlbHNlIHsKLQkJCWRwcmludGsoInBoMTogY2hhbmdpbmcgdmlkIGZvciBydm8sIHJlcSAweCV4XG4iLAorCQkJcHJfZGVidWcoInBoMTogY2hhbmdpbmcgdmlkIGZvciBydm8sIHJlcSAweCV4XG4iLAogCQkJCWRhdGEtPmN1cnJ2aWQgLSAxKTsKIAkJCWlmIChkZWNyZWFzZV92aWRfY29kZV9ieV9zdGVwKGRhdGEsIGRhdGEtPmN1cnJ2aWQtMSwgMSkpCiAJCQkJcmV0dXJuIDE7CkBAIC0zODIsNyArMzgyLDcgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JZHByaW50aygicGgxIGNvbXBsZXRlLCBjdXJyZmlkIDB4JXgsIGN1cnJ2aWQgMHgleFxuIiwKKwlwcl9kZWJ1ZygicGgxIGNvbXBsZXRlLCBjdXJyZmlkIDB4JXgsIGN1cnJ2aWQgMHgleFxuIiwKIAkJZGF0YS0+Y3VycmZpZCwgZGF0YS0+Y3VycnZpZCk7CiAKIAlyZXR1cm4gMDsKQEAgLTQwMCw3ICs0MDAsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlkcHJpbnRrKCJwaDIgKGNwdSVkKTogc3RhcnRpbmcsIGN1cnJmaWQgMHgleCwgY3VycnZpZCAweCV4LCAiCisJcHJfZGVidWcoInBoMiAoY3B1JWQpOiBzdGFydGluZywgY3VycmZpZCAweCV4LCBjdXJydmlkIDB4JXgsICIKIAkJInJlcWZpZCAweCV4XG4iLAogCQlzbXBfcHJvY2Vzc29yX2lkKCksCiAJCWRhdGEtPmN1cnJmaWQsIGRhdGEtPmN1cnJ2aWQsIHJlcWZpZCk7CkBAIC00NTcsNyArNDU3LDcgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JZHByaW50aygicGgyIGNvbXBsZXRlLCBjdXJyZmlkIDB4JXgsIGN1cnJ2aWQgMHgleFxuIiwKKwlwcl9kZWJ1ZygicGgyIGNvbXBsZXRlLCBjdXJyZmlkIDB4JXgsIGN1cnJ2aWQgMHgleFxuIiwKIAkJZGF0YS0+Y3VycmZpZCwgZGF0YS0+Y3VycnZpZCk7CiAKIAlyZXR1cm4gMDsKQEAgLTQ3MCw3ICs0NzAsNyBAQAogCXUzMiBzYXZlZmlkID0gZGF0YS0+Y3VycmZpZDsKIAl1MzIgc2F2ZXJlcXZpZCA9IHJlcXZpZDsKIAotCWRwcmludGsoInBoMyAoY3B1JWQpOiBzdGFydGluZywgY3VycmZpZCAweCV4LCBjdXJydmlkIDB4JXhcbiIsCisJcHJfZGVidWcoInBoMyAoY3B1JWQpOiBzdGFydGluZywgY3VycmZpZCAweCV4LCBjdXJydmlkIDB4JXhcbiIsCiAJCXNtcF9wcm9jZXNzb3JfaWQoKSwKIAkJZGF0YS0+Y3VycmZpZCwgZGF0YS0+Y3VycnZpZCk7CiAKQEAgLTQ5OCwxNyArNDk4LDE3IEBACiAJCXJldHVybiAxOwogCiAJaWYgKHNhdmVyZXF2aWQgIT0gZGF0YS0+Y3VycnZpZCkgewotCQlkcHJpbnRrKCJwaDMgZmFpbGVkLCBjdXJydmlkIDB4JXhcbiIsIGRhdGEtPmN1cnJ2aWQpOworCQlwcl9kZWJ1ZygicGgzIGZhaWxlZCwgY3VycnZpZCAweCV4XG4iLCBkYXRhLT5jdXJydmlkKTsKIAkJcmV0dXJuIDE7CiAJfQogCiAJaWYgKHNhdmVmaWQgIT0gZGF0YS0+Y3VycmZpZCkgewotCQlkcHJpbnRrKCJwaDMgZmFpbGVkLCBjdXJyZmlkIGNoYW5nZWQgMHgleFxuIiwKKwkJcHJfZGVidWcoInBoMyBmYWlsZWQsIGN1cnJmaWQgY2hhbmdlZCAweCV4XG4iLAogCQkJZGF0YS0+Y3VycmZpZCk7CiAJCXJldHVybiAxOwogCX0KIAotCWRwcmludGsoInBoMyBjb21wbGV0ZSwgY3VycmZpZCAweCV4LCBjdXJydmlkIDB4JXhcbiIsCisJcHJfZGVidWcoInBoMyBjb21wbGV0ZSwgY3VycmZpZCAweCV4LCBjdXJydmlkIDB4JXhcbiIsCiAJCWRhdGEtPmN1cnJmaWQsIGRhdGEtPmN1cnJ2aWQpOwogCiAJcmV0dXJuIDA7CkBAIC03MDcsNyArNzA3LDcgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JZHByaW50aygiY2ZpZCAweCV4LCBjdmlkIDB4JXhcbiIsIGRhdGEtPmN1cnJmaWQsIGRhdGEtPmN1cnJ2aWQpOworCXByX2RlYnVnKCJjZmlkIDB4JXgsIGN2aWQgMHgleFxuIiwgZGF0YS0+Y3VycmZpZCwgZGF0YS0+Y3VycnZpZCk7CiAJZGF0YS0+cG93ZXJub3dfdGFibGUgPSBwb3dlcm5vd190YWJsZTsKIAlpZiAoY3B1bWFza19maXJzdChjcHVfY29yZV9tYXNrKGRhdGEtPmNwdSkpID09IGRhdGEtPmNwdSkKIAkJcHJpbnRfYmFzaWNzKGRhdGEpOwpAQCAtNzE3LDcgKzcxNyw3IEBACiAJCSAgICAocHN0W2pdLnZpZCA9PSBkYXRhLT5jdXJydmlkKSkKIAkJCXJldHVybiAwOwogCi0JZHByaW50aygiY3VycmZpZC92aWQgZG8gbm90IG1hdGNoIFBTVCwgaWdub3JpbmdcbiIpOworCXByX2RlYnVnKCJjdXJyZmlkL3ZpZCBkbyBub3QgbWF0Y2ggUFNULCBpZ25vcmluZ1xuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTczOSwzNiArNzM5LDM2IEBACiAJCWlmIChtZW1jbXAocHNiLCBQU0JfSURfU1RSSU5HLCBQU0JfSURfU1RSSU5HX0xFTikgIT0gMCkKIAkJCWNvbnRpbnVlOwogCi0JCWRwcmludGsoImZvdW5kIFBTQiBoZWFkZXIgYXQgMHglcFxuIiwgcHNiKTsKKwkJcHJfZGVidWcoImZvdW5kIFBTQiBoZWFkZXIgYXQgMHglcFxuIiwgcHNiKTsKIAotCQlkcHJpbnRrKCJ0YWJsZSB2ZXJzOiAweCV4XG4iLCBwc2ItPnRhYmxldmVyc2lvbik7CisJCXByX2RlYnVnKCJ0YWJsZSB2ZXJzOiAweCV4XG4iLCBwc2ItPnRhYmxldmVyc2lvbik7CiAJCWlmIChwc2ItPnRhYmxldmVyc2lvbiAhPSBQU0JfVkVSU0lPTl8xXzQpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBGV19CVUcgUEZYICJQU0IgdGFibGUgaXMgbm90IHYxLjRcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAotCQlkcHJpbnRrKCJmbGFnczogMHgleFxuIiwgcHNiLT5mbGFnczEpOworCQlwcl9kZWJ1ZygiZmxhZ3M6IDB4JXhcbiIsIHBzYi0+ZmxhZ3MxKTsKIAkJaWYgKHBzYi0+ZmxhZ3MxKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgRldfQlVHIFBGWCAidW5rbm93biBmbGFnc1xuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCiAJCWRhdGEtPnZzdGFibGUgPSBwc2ItPnZzdGFibGU7Ci0JCWRwcmludGsoInZvbHRhZ2Ugc3RhYmlsaXphdGlvbiB0aW1lOiAlZCgqMjB1cylcbiIsCisJCXByX2RlYnVnKCJ2b2x0YWdlIHN0YWJpbGl6YXRpb24gdGltZTogJWQoKjIwdXMpXG4iLAogCQkJCWRhdGEtPnZzdGFibGUpOwogCi0JCWRwcmludGsoImZsYWdzMjogMHgleFxuIiwgcHNiLT5mbGFnczIpOworCQlwcl9kZWJ1ZygiZmxhZ3MyOiAweCV4XG4iLCBwc2ItPmZsYWdzMik7CiAJCWRhdGEtPnJ2byA9IHBzYi0+ZmxhZ3MyICYgMzsKIAkJZGF0YS0+aXJ0ID0gKChwc2ItPmZsYWdzMikgPj4gMikgJiAzOwogCQltdnMgPSAoKHBzYi0+ZmxhZ3MyKSA+PiA0KSAmIDM7CiAJCWRhdGEtPnZpZG12cyA9IDEgPDwgbXZzOwogCQlkYXRhLT5iYXRwcyA9ICgocHNiLT5mbGFnczIpID4+IDYpICYgMzsKIAotCQlkcHJpbnRrKCJyYW1wIHZvbHRhZ2Ugb2Zmc2V0OiAlZFxuIiwgZGF0YS0+cnZvKTsKLQkJZHByaW50aygiaXNvY2hyb25vdXMgcmVsaWVmIHRpbWU6ICVkXG4iLCBkYXRhLT5pcnQpOwotCQlkcHJpbnRrKCJtYXhpbXVtIHZvbHRhZ2Ugc3RlcDogJWQgLSAweCV4XG4iLCBtdnMsIGRhdGEtPnZpZG12cyk7CisJCXByX2RlYnVnKCJyYW1wIHZvbHRhZ2Ugb2Zmc2V0OiAlZFxuIiwgZGF0YS0+cnZvKTsKKwkJcHJfZGVidWcoImlzb2Nocm9ub3VzIHJlbGllZiB0aW1lOiAlZFxuIiwgZGF0YS0+aXJ0KTsKKwkJcHJfZGVidWcoIm1heGltdW0gdm9sdGFnZSBzdGVwOiAlZCAtIDB4JXhcbiIsIG12cywgZGF0YS0+dmlkbXZzKTsKIAotCQlkcHJpbnRrKCJudW1wc3Q6IDB4JXhcbiIsIHBzYi0+bnVtX3RhYmxlcyk7CisJCXByX2RlYnVnKCJudW1wc3Q6IDB4JXhcbiIsIHBzYi0+bnVtX3RhYmxlcyk7CiAJCWNwc3QgPSBwc2ItPm51bV90YWJsZXM7CiAJCWlmICgocHNiLT5jcHVpZCA9PSAweDAwMDAwZmMwKSB8fAogCQkgICAgKHBzYi0+Y3B1aWQgPT0gMHgwMDAwMGZlMCkpIHsKQEAgLTc4MywxMyArNzgzLDEzIEBACiAJCX0KIAogCQlkYXRhLT5wbGxsb2NrID0gcHNiLT5wbGxsb2NrdGltZTsKLQkJZHByaW50aygicGxsbG9ja3RpbWU6IDB4JXggKHVuaXRzIDF1cylcbiIsIHBzYi0+cGxsbG9ja3RpbWUpOwotCQlkcHJpbnRrKCJtYXhmaWQ6IDB4JXhcbiIsIHBzYi0+bWF4ZmlkKTsKLQkJZHByaW50aygibWF4dmlkOiAweCV4XG4iLCBwc2ItPm1heHZpZCk7CisJCXByX2RlYnVnKCJwbGxsb2NrdGltZTogMHgleCAodW5pdHMgMXVzKVxuIiwgcHNiLT5wbGxsb2NrdGltZSk7CisJCXByX2RlYnVnKCJtYXhmaWQ6IDB4JXhcbiIsIHBzYi0+bWF4ZmlkKTsKKwkJcHJfZGVidWcoIm1heHZpZDogMHgleFxuIiwgcHNiLT5tYXh2aWQpOwogCQltYXh2aWQgPSBwc2ItPm1heHZpZDsKIAogCQlkYXRhLT5udW1wcyA9IHBzYi0+bnVtcHM7Ci0JCWRwcmludGsoIm51bXBzdGF0ZXM6IDB4JXhcbiIsIGRhdGEtPm51bXBzKTsKKwkJcHJfZGVidWcoIm51bXBzdGF0ZXM6IDB4JXhcbiIsIGRhdGEtPm51bXBzKTsKIAkJcmV0dXJuIGZpbGxfcG93ZXJub3dfdGFibGUoZGF0YSwKIAkJCQkoc3RydWN0IHBzdF9zICopKHBzYisxKSwgbWF4dmlkKTsKIAl9CkBAIC04MzQsMTMgKzgzNCwxMyBAQAogCXU2NCBjb250cm9sLCBzdGF0dXM7CiAKIAlpZiAoYWNwaV9wcm9jZXNzb3JfcmVnaXN0ZXJfcGVyZm9ybWFuY2UoJmRhdGEtPmFjcGlfZGF0YSwgZGF0YS0+Y3B1KSkgewotCQlkcHJpbnRrKCJyZWdpc3RlciBwZXJmb3JtYW5jZSBmYWlsZWQ6IGJhZCBBQ1BJIGRhdGFcbiIpOworCQlwcl9kZWJ1ZygicmVnaXN0ZXIgcGVyZm9ybWFuY2UgZmFpbGVkOiBiYWQgQUNQSSBkYXRhXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJLyogdmVyaWZ5IHRoZSBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgQUNQSSBzdHJ1Y3R1cmVzICovCiAJaWYgKGRhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudCA8PSAxKSB7Ci0JCWRwcmludGsoIk5vIEFDUEkgUC1TdGF0ZXNcbiIpOworCQlwcl9kZWJ1ZygiTm8gQUNQSSBQLVN0YXRlc1xuIik7CiAJCWdvdG8gZXJyX291dDsKIAl9CiAKQEAgLTg0OSw3ICs4NDksNyBAQAogCiAJaWYgKChjb250cm9sICE9IEFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFKSB8fAogCSAgICAoc3RhdHVzICE9IEFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFKSkgewotCQlkcHJpbnRrKCJJbnZhbGlkIGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVycyAoJXggLSAleClcbiIsCisJCXByX2RlYnVnKCJJbnZhbGlkIGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVycyAoJWxseCAtICVsbHgpXG4iLAogCQkJY29udHJvbCwgc3RhdHVzKTsKIAkJZ290byBlcnJfb3V0OwogCX0KQEAgLTg1OCw3ICs4NTgsNyBAQAogCXBvd2Vybm93X3RhYmxlID0ga21hbGxvYygoc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSkKIAkJKiAoZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50ICsgMSkpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBvd2Vybm93X3RhYmxlKSB7Ci0JCWRwcmludGsoInBvd2Vybm93X3RhYmxlIG1lbW9yeSBhbGxvYyBmYWlsdXJlXG4iKTsKKwkJcHJfZGVidWcoInBvd2Vybm93X3RhYmxlIG1lbW9yeSBhbGxvYyBmYWlsdXJlXG4iKTsKIAkJZ290byBlcnJfb3V0OwogCX0KIApAQCAtOTI4LDcgKzkyOCw3IEBACiAJCX0KIAkJcmRtc3IoTVNSX1BTVEFURV9ERUZfQkFTRSArIGluZGV4LCBsbywgaGkpOwogCQlpZiAoIShoaSAmIEhXX1BTVEFURV9WQUxJRF9NQVNLKSkgewotCQkJZHByaW50aygiaW52YWxpZCBwc3RhdGUgJWQsIGlnbm9yaW5nXG4iLCBpbmRleCk7CisJCQlwcl9kZWJ1ZygiaW52YWxpZCBwc3RhdGUgJWQsIGlnbm9yaW5nXG4iLCBpbmRleCk7CiAJCQlpbnZhbGlkYXRlX2VudHJ5KHBvd2Vybm93X3RhYmxlLCBpKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC05NjgsNyArOTY4LDcgQEAKIAkJCXZpZCA9IChjb250cm9sID4+IFZJRF9TSElGVCkgJiBWSURfTUFTSzsKIAkJfQogCi0JCWRwcmludGsoIiAgICVkIDogZmlkIDB4JXgsIHZpZCAweCV4XG4iLCBpLCBmaWQsIHZpZCk7CisJCXByX2RlYnVnKCIgICAlZCA6IGZpZCAweCV4LCB2aWQgMHgleFxuIiwgaSwgZmlkLCB2aWQpOwogCiAJCWluZGV4ID0gZmlkIHwgKHZpZDw8OCk7CiAJCXBvd2Vybm93X3RhYmxlW2ldLmluZGV4ID0gaW5kZXg7CkBAIC05NzgsNyArOTc4LDcgQEAKIAogCQkvKiB2ZXJpZnkgZnJlcXVlbmN5IGlzIE9LICovCiAJCWlmICgoZnJlcSA+IChNQVhfRlJFUSAqIDEwMDApKSB8fCAoZnJlcSA8IChNSU5fRlJFUSAqIDEwMDApKSkgewotCQkJZHByaW50aygiaW52YWxpZCBmcmVxICV1IGtIeiwgaWdub3JpbmdcbiIsIGZyZXEpOworCQkJcHJfZGVidWcoImludmFsaWQgZnJlcSAldSBrSHosIGlnbm9yaW5nXG4iLCBmcmVxKTsKIAkJCWludmFsaWRhdGVfZW50cnkocG93ZXJub3dfdGFibGUsIGkpOwogCQkJY29udGludWU7CiAJCX0KQEAgLTk4Niw3ICs5ODYsNyBAQAogCQkvKiB2ZXJpZnkgdm9sdGFnZSBpcyBPSyAtCiAJCSAqIEJJT1NzIGFyZSB1c2luZyAib2ZmIiB0byBpbmRpY2F0ZSBpbnZhbGlkICovCiAJCWlmICh2aWQgPT0gVklEX09GRikgewotCQkJZHByaW50aygiaW52YWxpZCB2aWQgJXUsIGlnbm9yaW5nXG4iLCB2aWQpOworCQkJcHJfZGVidWcoImludmFsaWQgdmlkICV1LCBpZ25vcmluZ1xuIiwgdmlkKTsKIAkJCWludmFsaWRhdGVfZW50cnkocG93ZXJub3dfdGFibGUsIGkpOwogCQkJY29udGludWU7CiAJCX0KQEAgLTEwNDcsNyArMTA0Nyw3IEBACiAJaW50IHJlcywgaTsKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyBmcmVxczsKIAotCWRwcmludGsoImNwdSAlZCB0cmFuc2l0aW9uIHRvIGluZGV4ICV1XG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIGluZGV4KTsKKwlwcl9kZWJ1ZygiY3B1ICVkIHRyYW5zaXRpb24gdG8gaW5kZXggJXVcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgaW5kZXgpOwogCiAJLyogZmlkL3ZpZCBjb3JyZWN0bmVzcyBjaGVjayBmb3IgazggKi8KIAkvKiBmaWQgYXJlIHRoZSBsb3dlciA4IGJpdHMgb2YgdGhlIGluZGV4IHdlIHN0b3JlZCBpbnRvCkBAIC0xMDU3LDE4ICsxMDU3LDE4IEBACiAJZmlkID0gZGF0YS0+cG93ZXJub3dfdGFibGVbaW5kZXhdLmluZGV4ICYgMHhGRjsKIAl2aWQgPSAoZGF0YS0+cG93ZXJub3dfdGFibGVbaW5kZXhdLmluZGV4ICYgMHhGRjAwKSA+PiA4OwogCi0JZHByaW50aygidGFibGUgbWF0Y2hlZCBmaWQgMHgleCwgZ2l2aW5nIHZpZCAweCV4XG4iLCBmaWQsIHZpZCk7CisJcHJfZGVidWcoInRhYmxlIG1hdGNoZWQgZmlkIDB4JXgsIGdpdmluZyB2aWQgMHgleFxuIiwgZmlkLCB2aWQpOwogCiAJaWYgKHF1ZXJ5X2N1cnJlbnRfdmFsdWVzX3dpdGhfcGVuZGluZ193YWl0KGRhdGEpKQogCQlyZXR1cm4gMTsKIAogCWlmICgoZGF0YS0+Y3VycnZpZCA9PSB2aWQpICYmIChkYXRhLT5jdXJyZmlkID09IGZpZCkpIHsKLQkJZHByaW50aygidGFyZ2V0IG1hdGNoZXMgY3VycmVudCB2YWx1ZXMgKGZpZCAweCV4LCB2aWQgMHgleClcbiIsCisJCXByX2RlYnVnKCJ0YXJnZXQgbWF0Y2hlcyBjdXJyZW50IHZhbHVlcyAoZmlkIDB4JXgsIHZpZCAweCV4KVxuIiwKIAkJCWZpZCwgdmlkKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JZHByaW50aygiY3B1ICVkLCBjaGFuZ2luZyB0byBmaWQgMHgleCwgdmlkIDB4JXhcbiIsCisJcHJfZGVidWcoImNwdSAlZCwgY2hhbmdpbmcgdG8gZmlkIDB4JXgsIHZpZCAweCV4XG4iLAogCQlzbXBfcHJvY2Vzc29yX2lkKCksIGZpZCwgdmlkKTsKIAlmcmVxcy5vbGQgPSBmaW5kX2toel9mcmVxX2Zyb21fZmlkKGRhdGEtPmN1cnJmaWQpOwogCWZyZXFzLm5ldyA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9maWQoZmlkKTsKQEAgLTEwOTYsNyArMTA5Niw3IEBACiAJaW50IHJlcywgaTsKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyBmcmVxczsKIAotCWRwcmludGsoImNwdSAlZCB0cmFuc2l0aW9uIHRvIGluZGV4ICV1XG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIGluZGV4KTsKKwlwcl9kZWJ1ZygiY3B1ICVkIHRyYW5zaXRpb24gdG8gaW5kZXggJXVcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgaW5kZXgpOwogCiAJLyogZ2V0IE1TUiBpbmRleCBmb3IgaGFyZHdhcmUgcHN0YXRlIHRyYW5zaXRpb24gKi8KIAlwc3RhdGUgPSBpbmRleCAmIEhXX1BTVEFURV9NQVNLOwpAQCAtMTE1NiwxNCArMTE1NiwxNCBAQAogCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JZHByaW50aygidGFyZzogY3B1ICVkLCAlZCBrSHosIG1pbiAlZCwgbWF4ICVkLCByZWxhdGlvbiAlZFxuIiwKKwlwcl9kZWJ1ZygidGFyZzogY3B1ICVkLCAlZCBrSHosIG1pbiAlZCwgbWF4ICVkLCByZWxhdGlvbiAlZFxuIiwKIAkJcG9sLT5jcHUsIHRhcmdmcmVxLCBwb2wtPm1pbiwgcG9sLT5tYXgsIHJlbGF0aW9uKTsKIAogCWlmIChxdWVyeV9jdXJyZW50X3ZhbHVlc193aXRoX3BlbmRpbmdfd2FpdChkYXRhKSkKIAkJZ290byBlcnJfb3V0OwogCiAJaWYgKGNwdV9mYW1pbHkgIT0gQ1BVX0hXX1BTVEFURSkgewotCQlkcHJpbnRrKCJ0YXJnOiBjdXJyIGZpZCAweCV4LCB2aWQgMHgleFxuIiwKKwkJcHJfZGVidWcoInRhcmc6IGN1cnIgZmlkIDB4JXgsIHZpZCAweCV4XG4iLAogCQlkYXRhLT5jdXJyZmlkLCBkYXRhLT5jdXJydmlkKTsKIAogCQlpZiAoKGNoZWNrdmlkICE9IGRhdGEtPmN1cnJ2aWQpIHx8CkBAIC0xMzE5LDcgKzEzMTksNyBAQAogCQkJCWRhdGEtPmN1cnJwc3RhdGUpOwogCWVsc2UKIAkJcG9sLT5jdXIgPSBmaW5kX2toel9mcmVxX2Zyb21fZmlkKGRhdGEtPmN1cnJmaWQpOwotCWRwcmludGsoInBvbGljeSBjdXJyZW50IGZyZXF1ZW5jeSAlZCBrSHpcbiIsIHBvbC0+Y3VyKTsKKwlwcl9kZWJ1ZygicG9saWN5IGN1cnJlbnQgZnJlcXVlbmN5ICVkIGtIelxuIiwgcG9sLT5jdXIpOwogCiAJLyogbWluL21heCB0aGUgY3B1IGlzIGNhcGFibGUgb2YgKi8KIAlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfY3B1aW5mbyhwb2wsIGRhdGEtPnBvd2Vybm93X3RhYmxlKSkgewpAQCAtMTMzNywxMCArMTMzNywxMCBAQAogCWNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2dldF9hdHRyKGRhdGEtPnBvd2Vybm93X3RhYmxlLCBwb2wtPmNwdSk7CiAKIAlpZiAoY3B1X2ZhbWlseSA9PSBDUFVfSFdfUFNUQVRFKQotCQlkcHJpbnRrKCJjcHVfaW5pdCBkb25lLCBjdXJyZW50IHBzdGF0ZSAweCV4XG4iLAorCQlwcl9kZWJ1ZygiY3B1X2luaXQgZG9uZSwgY3VycmVudCBwc3RhdGUgMHgleFxuIiwKIAkJCQlkYXRhLT5jdXJycHN0YXRlKTsKIAllbHNlCi0JCWRwcmludGsoImNwdV9pbml0IGRvbmUsIGN1cnJlbnQgZmlkIDB4JXgsIHZpZCAweCV4XG4iLAorCQlwcl9kZWJ1ZygiY3B1X2luaXQgZG9uZSwgY3VycmVudCBmaWQgMHgleCwgdmlkIDB4JXhcbiIsCiAJCQlkYXRhLT5jdXJyZmlkLCBkYXRhLT5jdXJydmlkKTsKIAogCXBlcl9jcHUocG93ZXJub3dfZGF0YSwgcG9sLT5jcHUpID0gZGF0YTsKQEAgLTE1ODYsNyArMTU4Niw3IEBACiAvKiBkcml2ZXIgZW50cnkgcG9pbnQgZm9yIHRlcm0gKi8KIHN0YXRpYyB2b2lkIF9fZXhpdCBwb3dlcm5vd2s4X2V4aXQodm9pZCkKIHsKLQlkcHJpbnRrKCJleGl0XG4iKTsKKwlwcl9kZWJ1ZygiZXhpdFxuIik7CiAKIAlpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NQQikpIHsKIAkJbXNyc19mcmVlKG1zcnMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmggYi9kcml2ZXJzL2NwdWZyZXEvcG93ZXJub3ctazguaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguaApyZW5hbWUgdG8gZHJpdmVycy9jcHVmcmVxL3Bvd2Vybm93LWs4LmgKaW5kZXggZGYzNTI5Yi4uMzc0NGQyNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmgKKysrIGIvZHJpdmVycy9jcHVmcmVxL3Bvd2Vybm93LWs4LmgKQEAgLTIxMSw4ICsyMTEsNiBAQAogCXU4IHZpZDsKIH07CiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCAicG93ZXJub3ctazgiLCBtc2cpCi0KIHN0YXRpYyBpbnQgY29yZV92b2x0YWdlX3ByZV90cmFuc2l0aW9uKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLAogCXUzMiByZXF2aWQsIHUzMiByZWdmaWQpOwogc3RhdGljIGludCBjb3JlX3ZvbHRhZ2VfcG9zdF90cmFuc2l0aW9uKHN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhLCB1MzIgcmVxdmlkKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zYzUyMF9mcmVxLmMgYi9kcml2ZXJzL2NwdWZyZXEvc2M1MjBfZnJlcS5jCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIGFyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zYzUyMF9mcmVxLmMKcmVuYW1lIHRvIGRyaXZlcnMvY3B1ZnJlcS9zYzUyMF9mcmVxLmMKaW5kZXggNDM1YTk5Ni4uMWUyMDVlNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NjNTIwX2ZyZXEuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvc2M1MjBfZnJlcS5jCkBAIC0yOSw4ICsyOSw2IEBACiAKIHN0YXRpYyBfX3U4IF9faW9tZW0gKmNwdWN0bDsKIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKLQkJInNjNTIwX2ZyZXEiLCBtc2cpCiAjZGVmaW5lIFBGWCAic2M1MjBfZnJlcTogIgogCiBzdGF0aWMgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlIHNjNTIwX2ZyZXFfdGFibGVbXSA9IHsKQEAgLTY2LDcgKzY0LDcgQEAKIAogCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BSRUNIQU5HRSk7CiAKLQlkcHJpbnRrKCJhdHRlbXB0aW5nIHRvIHNldCBmcmVxdWVuY3kgdG8gJWkga0h6XG4iLAorCXByX2RlYnVnKCJhdHRlbXB0aW5nIHRvIHNldCBmcmVxdWVuY3kgdG8gJWkga0h6XG4iLAogCQkJc2M1MjBfZnJlcV90YWJsZVtzdGF0ZV0uZnJlcXVlbmN5KTsKIAogCWxvY2FsX2lycV9kaXNhYmxlKCk7CkBAIC0xNjEsNyArMTU5LDcgQEAKIAkvKiBUZXN0IGlmIHdlIGhhdmUgdGhlIHJpZ2h0IGhhcmR3YXJlICovCiAJaWYgKGMtPng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9BTUQgfHwKIAkgICAgYy0+eDg2ICE9IDQgfHwgYy0+eDg2X21vZGVsICE9IDkpIHsKLQkJZHByaW50aygibm8gRWxhbiBTQzUyMCBwcm9jZXNzb3IgZm91bmQhXG4iKTsKKwkJcHJfZGVidWcoIm5vIEVsYW4gU0M1MjAgcHJvY2Vzc29yIGZvdW5kIVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAljcHVjdGwgPSBpb3JlbWFwKCh1bnNpZ25lZCBsb25nKShNTUNSX0JBU0UgKyBPRkZTX0NQVUNUTCksIDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1jZW50cmluby5jIGIvZHJpdmVycy9jcHVmcmVxL3NwZWVkc3RlcC1jZW50cmluby5jCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIGFyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtY2VudHJpbm8uYwpyZW5hbWUgdG8gZHJpdmVycy9jcHVmcmVxL3NwZWVkc3RlcC1jZW50cmluby5jCmluZGV4IDliMWZmMzcuLjZlYTM0NTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtY2VudHJpbm8uYworKysgYi9kcml2ZXJzL2NwdWZyZXEvc3BlZWRzdGVwLWNlbnRyaW5vLmMKQEAgLTI5LDkgKzI5LDYgQEAKICNkZWZpbmUgUEZYCQkic3BlZWRzdGVwLWNlbnRyaW5vOiAiCiAjZGVmaW5lIE1BSU5UQUlORVIJImNwdWZyZXFAdmdlci5rZXJuZWwub3JnIgogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBcCi0JY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsICJzcGVlZHN0ZXAtY2VudHJpbm8iLCBtc2cpCi0KICNkZWZpbmUgSU5URUxfTVNSX1JBTkdFCSgweGZmZmYpCiAKIHN0cnVjdCBjcHVfaWQKQEAgLTI0NCw3ICsyNDEsNyBAQAogCiAJaWYgKG1vZGVsLT5jcHVfaWQgPT0gTlVMTCkgewogCQkvKiBObyBtYXRjaCBhdCBhbGwgKi8KLQkJZHByaW50aygibm8gc3VwcG9ydCBmb3IgQ1BVIG1vZGVsIFwiJXNcIjogIgorCQlwcl9kZWJ1Zygibm8gc3VwcG9ydCBmb3IgQ1BVIG1vZGVsIFwiJXNcIjogIgogCQkgICAgICAgInNlbmQgL3Byb2MvY3B1aW5mbyB0byAiIE1BSU5UQUlORVIgIlxuIiwKIAkJICAgICAgIGNwdS0+eDg2X21vZGVsX2lkKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CkBAIC0yNTIsMTUgKzI0OSwxNSBAQAogCiAJaWYgKG1vZGVsLT5vcF9wb2ludHMgPT0gTlVMTCkgewogCQkvKiBNYXRjaGVkIGEgbm9uLW1hdGNoICovCi0JCWRwcmludGsoIm5vIHRhYmxlIHN1cHBvcnQgZm9yIENQVSBtb2RlbCBcIiVzXCJcbiIsCisJCXByX2RlYnVnKCJubyB0YWJsZSBzdXBwb3J0IGZvciBDUFUgbW9kZWwgXCIlc1wiXG4iLAogCQkgICAgICAgY3B1LT54ODZfbW9kZWxfaWQpOwotCQlkcHJpbnRrKCJ0cnkgdXNpbmcgdGhlIGFjcGktY3B1ZnJlcSBkcml2ZXJcbiIpOworCQlwcl9kZWJ1ZygidHJ5IHVzaW5nIHRoZSBhY3BpLWNwdWZyZXEgZHJpdmVyXG4iKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCiAJcGVyX2NwdShjZW50cmlub19tb2RlbCwgcG9saWN5LT5jcHUpID0gbW9kZWw7CiAKLQlkcHJpbnRrKCJmb3VuZCBcIiVzXCI6IG1heCBmcmVxdWVuY3k6ICVka0h6XG4iLAorCXByX2RlYnVnKCJmb3VuZCBcIiVzXCI6IG1heCBmcmVxdWVuY3k6ICVka0h6XG4iLAogCSAgICAgICBtb2RlbC0+bW9kZWxfbmFtZSwgbW9kZWwtPm1heF9mcmVxKTsKIAogCXJldHVybiAwOwpAQCAtMzY5LDcgKzM2Niw3IEBACiAJCXBlcl9jcHUoY2VudHJpbm9fY3B1LCBwb2xpY3ktPmNwdSkgPSAmY3B1X2lkc1tpXTsKIAogCWlmICghcGVyX2NwdShjZW50cmlub19jcHUsIHBvbGljeS0+Y3B1KSkgewotCQlkcHJpbnRrKCJmb3VuZCB1bnN1cHBvcnRlZCBDUFUgd2l0aCAiCisJCXByX2RlYnVnKCJmb3VuZCB1bnN1cHBvcnRlZCBDUFUgd2l0aCAiCiAJCSJFbmhhbmNlZCBTcGVlZFN0ZXA6IHNlbmQgL3Byb2MvY3B1aW5mbyB0byAiCiAJCU1BSU5UQUlORVIgIlxuIik7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtMzg1LDcgKzM4Miw3IEBACiAKIAlpZiAoIShsICYgTVNSX0lBMzJfTUlTQ19FTkFCTEVfRU5IQU5DRURfU1BFRURTVEVQKSkgewogCQlsIHw9IE1TUl9JQTMyX01JU0NfRU5BQkxFX0VOSEFOQ0VEX1NQRUVEU1RFUDsKLQkJZHByaW50aygidHJ5aW5nIHRvIGVuYWJsZSBFbmhhbmNlZCBTcGVlZFN0ZXAgKCV4KVxuIiwgbCk7CisJCXByX2RlYnVnKCJ0cnlpbmcgdG8gZW5hYmxlIEVuaGFuY2VkIFNwZWVkU3RlcCAoJXgpXG4iLCBsKTsKIAkJd3Jtc3IoTVNSX0lBMzJfTUlTQ19FTkFCTEUsIGwsIGgpOwogCiAJCS8qIGNoZWNrIHRvIHNlZSBpZiBpdCBzdHVjayAqLwpAQCAtNDAyLDcgKzM5OSw3IEBACiAJCQkJCQkvKiAxMHVTIHRyYW5zaXRpb24gbGF0ZW5jeSAqLwogCXBvbGljeS0+Y3VyID0gZnJlcTsKIAotCWRwcmludGsoImNlbnRyaW5vX2NwdV9pbml0OiBjdXI9JWRrSHpcbiIsIHBvbGljeS0+Y3VyKTsKKwlwcl9kZWJ1ZygiY2VudHJpbm9fY3B1X2luaXQ6IGN1cj0lZGtIelxuIiwgcG9saWN5LT5jdXIpOwogCiAJcmV0ID0gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfY3B1aW5mbyhwb2xpY3ksCiAJCXBlcl9jcHUoY2VudHJpbm9fbW9kZWwsIHBvbGljeS0+Y3B1KS0+b3BfcG9pbnRzKTsKQEAgLTQ5OCw3ICs0OTUsNyBAQAogCQkJZ29vZF9jcHUgPSBqOwogCiAJCWlmIChnb29kX2NwdSA+PSBucl9jcHVfaWRzKSB7Ci0JCQlkcHJpbnRrKCJjb3VsZG4ndCBsaW1pdCB0byBDUFVzIGluIHRoaXMgZG9tYWluXG4iKTsKKwkJCXByX2RlYnVnKCJjb3VsZG4ndCBsaW1pdCB0byBDUFVzIGluIHRoaXMgZG9tYWluXG4iKTsKIAkJCXJldHZhbCA9IC1FQUdBSU47CiAJCQlpZiAoZmlyc3RfY3B1KSB7CiAJCQkJLyogV2UgaGF2ZW4ndCBzdGFydGVkIHRoZSB0cmFuc2l0aW9uIHlldC4gKi8KQEAgLTUxMiw3ICs1MDksNyBAQAogCQlpZiAoZmlyc3RfY3B1KSB7CiAJCQlyZG1zcl9vbl9jcHUoZ29vZF9jcHUsIE1TUl9JQTMyX1BFUkZfQ1RMLCAmb2xkbXNyLCAmaCk7CiAJCQlpZiAobXNyID09IChvbGRtc3IgJiAweGZmZmYpKSB7Ci0JCQkJZHByaW50aygibm8gY2hhbmdlIG5lZWRlZCAtIG1zciB3YXMgYW5kIG5lZWRzICIKKwkJCQlwcl9kZWJ1Zygibm8gY2hhbmdlIG5lZWRlZCAtIG1zciB3YXMgYW5kIG5lZWRzICIKIAkJCQkJInRvIGJlICV4XG4iLCBvbGRtc3IpOwogCQkJCXJldHZhbCA9IDA7CiAJCQkJZ290byBvdXQ7CkBAIC01MjEsNyArNTE4LDcgQEAKIAkJCWZyZXFzLm9sZCA9IGV4dHJhY3RfY2xvY2sob2xkbXNyLCBjcHUsIDApOwogCQkJZnJlcXMubmV3ID0gZXh0cmFjdF9jbG9jayhtc3IsIGNwdSwgMCk7CiAKLQkJCWRwcmludGsoInRhcmdldD0lZGtIeiBvbGQ9JWQgbmV3PSVkIG1zcj0lMDR4XG4iLAorCQkJcHJfZGVidWcoInRhcmdldD0lZGtIeiBvbGQ9JWQgbmV3PSVkIG1zcj0lMDR4XG4iLAogCQkJCXRhcmdldF9mcmVxLCBmcmVxcy5vbGQsIGZyZXFzLm5ldywgbXNyKTsKIAogCQkJZm9yX2VhY2hfY3B1KGssIHBvbGljeS0+Y3B1cykgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYyBiL2RyaXZlcnMvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKc2ltaWxhcml0eSBpbmRleCA5MiUKcmVuYW1lIGZyb20gYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYwpyZW5hbWUgdG8gZHJpdmVycy9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYwppbmRleCA1NjE3NThlLi5hNzQ4Y2U3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKQEAgLTUzLDEwICs1Myw2IEBACiB9OwogCiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCBcCi0JCSJzcGVlZHN0ZXAtaWNoIiwgbXNnKQotCi0KIC8qKgogICogc3BlZWRzdGVwX2ZpbmRfcmVnaXN0ZXIgLSByZWFkIHRoZSBQTUJBU0UgYWRkcmVzcwogICoKQEAgLTgwLDcgKzc2LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JZHByaW50aygicG1iYXNlIGlzIDB4JXhcbiIsIHBtYmFzZSk7CisJcHJfZGVidWcoInBtYmFzZSBpcyAweCV4XG4iLCBwbWJhc2UpOwogCXJldHVybiAwOwogfQogCkBAIC0xMDYsMTMgKzEwMiwxMyBAQAogCS8qIHJlYWQgc3RhdGUgKi8KIAl2YWx1ZSA9IGluYihwbWJhc2UgKyAweDUwKTsKIAotCWRwcmludGsoInJlYWQgYXQgcG1iYXNlIDB4JXggKyAweDUwIHJldHVybmVkIDB4JXhcbiIsIHBtYmFzZSwgdmFsdWUpOworCXByX2RlYnVnKCJyZWFkIGF0IHBtYmFzZSAweCV4ICsgMHg1MCByZXR1cm5lZCAweCV4XG4iLCBwbWJhc2UsIHZhbHVlKTsKIAogCS8qIHdyaXRlIG5ldyBzdGF0ZSAqLwogCXZhbHVlICY9IDB4RkU7CiAJdmFsdWUgfD0gc3RhdGU7CiAKLQlkcHJpbnRrKCJ3cml0aW5nIDB4JXggdG8gcG1iYXNlIDB4JXggKyAweDUwXG4iLCB2YWx1ZSwgcG1iYXNlKTsKKwlwcl9kZWJ1Zygid3JpdGluZyAweCV4IHRvIHBtYmFzZSAweCV4ICsgMHg1MFxuIiwgdmFsdWUsIHBtYmFzZSk7CiAKIAkvKiBEaXNhYmxlIGJ1cyBtYXN0ZXIgYXJiaXRyYXRpb24gKi8KIAlwbTJfYmxrID0gaW5iKHBtYmFzZSArIDB4MjApOwpAQCAtMTMyLDEwICsxMjgsMTAgQEAKIAkvKiBFbmFibGUgSVJRcyAqLwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAotCWRwcmludGsoInJlYWQgYXQgcG1iYXNlIDB4JXggKyAweDUwIHJldHVybmVkIDB4JXhcbiIsIHBtYmFzZSwgdmFsdWUpOworCXByX2RlYnVnKCJyZWFkIGF0IHBtYmFzZSAweCV4ICsgMHg1MCByZXR1cm5lZCAweCV4XG4iLCBwbWJhc2UsIHZhbHVlKTsKIAogCWlmIChzdGF0ZSA9PSAodmFsdWUgJiAweDEpKQotCQlkcHJpbnRrKCJjaGFuZ2UgdG8gJXUgTUh6IHN1Y2NlZWRlZFxuIiwKKwkJcHJfZGVidWcoImNoYW5nZSB0byAldSBNSHogc3VjY2VlZGVkXG4iLAogCQkJc3BlZWRzdGVwX2dldF9mcmVxdWVuY3koc3BlZWRzdGVwX3Byb2Nlc3NvcikgLyAxMDAwKTsKIAllbHNlCiAJCXByaW50ayhLRVJOX0VSUiAiY3B1ZnJlcTogY2hhbmdlIGZhaWxlZCAtIEkvTyBlcnJvclxuIik7CkBAIC0xNjUsNyArMTYxLDcgQEAKIAlwY2lfcmVhZF9jb25maWdfd29yZChzcGVlZHN0ZXBfY2hpcHNldF9kZXYsIDB4MDBBMCwgJnZhbHVlKTsKIAlpZiAoISh2YWx1ZSAmIDB4MDgpKSB7CiAJCXZhbHVlIHw9IDB4MDg7Ci0JCWRwcmludGsoImFjdGl2YXRpbmcgU3BlZWRTdGVwIChUTSkgcmVnaXN0ZXJzXG4iKTsKKwkJcHJfZGVidWcoImFjdGl2YXRpbmcgU3BlZWRTdGVwIChUTSkgcmVnaXN0ZXJzXG4iKTsKIAkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHNwZWVkc3RlcF9jaGlwc2V0X2RldiwgMHgwMEEwLCB2YWx1ZSk7CiAJfQogCkBAIC0yMTgsNyArMjE0LDcgQEAKIAkJCXJldHVybiAyOyAvKiAyLU0gKi8KIAogCQlpZiAoaG9zdGJyaWRnZS0+cmV2aXNpb24gPCA1KSB7Ci0JCQlkcHJpbnRrKCJob3N0YnJpZGdlIGRvZXMgbm90IHN1cHBvcnQgc3BlZWRzdGVwXG4iKTsKKwkJCXByX2RlYnVnKCJob3N0YnJpZGdlIGRvZXMgbm90IHN1cHBvcnQgc3BlZWRzdGVwXG4iKTsKIAkJCXNwZWVkc3RlcF9jaGlwc2V0X2RldiA9IE5VTEw7CiAJCQlwY2lfZGV2X3B1dChob3N0YnJpZGdlKTsKIAkJCXJldHVybiAwOwpAQCAtMjQ2LDcgKzI0Miw3IEBACiAJaWYgKHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGdldF9mcmVxX2RhdGEsICZzcGVlZCwgMSkgIT0gMCkKIAkJQlVHKCk7CiAKLQlkcHJpbnRrKCJkZXRlY3RlZCAldSBrSHogYXMgY3VycmVudCBmcmVxdWVuY3lcbiIsIHNwZWVkKTsKKwlwcl9kZWJ1ZygiZGV0ZWN0ZWQgJXUga0h6IGFzIGN1cnJlbnQgZnJlcXVlbmN5XG4iLCBzcGVlZCk7CiAJcmV0dXJuIHNwZWVkOwogfQogCkBAIC0yNzYsNyArMjcyLDcgQEAKIAlmcmVxcy5uZXcgPSBzcGVlZHN0ZXBfZnJlcXNbbmV3c3RhdGVdLmZyZXF1ZW5jeTsKIAlmcmVxcy5jcHUgPSBwb2xpY3ktPmNwdTsKIAotCWRwcmludGsoInRyYW5zaXRpbmcgZnJvbSAldSB0byAldSBrSHpcbiIsIGZyZXFzLm9sZCwgZnJlcXMubmV3KTsKKwlwcl9kZWJ1ZygidHJhbnNpdGluZyBmcm9tICV1IHRvICV1IGtIelxuIiwgZnJlcXMub2xkLCBmcmVxcy5uZXcpOwogCiAJLyogbm8gdHJhbnNpdGlvbiBuZWNlc3NhcnkgKi8KIAlpZiAoZnJlcXMub2xkID09IGZyZXFzLm5ldykKQEAgLTM1MSw3ICszNDcsNyBAQAogCWlmICghc3BlZWQpCiAJCXJldHVybiAtRUlPOwogCi0JZHByaW50aygiY3VycmVudGx5IGF0ICVzIHNwZWVkIHNldHRpbmcgLSAlaSBNSHpcbiIsCisJcHJfZGVidWcoImN1cnJlbnRseSBhdCAlcyBzcGVlZCBzZXR0aW5nIC0gJWkgTUh6XG4iLAogCQkoc3BlZWQgPT0gc3BlZWRzdGVwX2ZyZXFzW1NQRUVEU1RFUF9MT1ddLmZyZXF1ZW5jeSkKIAkJPyAibG93IiA6ICJoaWdoIiwKIAkJKHNwZWVkIC8gMTAwMCkpOwpAQCAtNDA1LDE0ICs0MDEsMTQgQEAKIAkvKiBkZXRlY3QgcHJvY2Vzc29yICovCiAJc3BlZWRzdGVwX3Byb2Nlc3NvciA9IHNwZWVkc3RlcF9kZXRlY3RfcHJvY2Vzc29yKCk7CiAJaWYgKCFzcGVlZHN0ZXBfcHJvY2Vzc29yKSB7Ci0JCWRwcmludGsoIkludGVsKFIpIFNwZWVkU3RlcChUTSkgY2FwYWJsZSBwcm9jZXNzb3IgIgorCQlwcl9kZWJ1ZygiSW50ZWwoUikgU3BlZWRTdGVwKFRNKSBjYXBhYmxlIHByb2Nlc3NvciAiCiAJCQkJIm5vdCBmb3VuZFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCS8qIGRldGVjdCBjaGlwc2V0ICovCiAJaWYgKCFzcGVlZHN0ZXBfZGV0ZWN0X2NoaXBzZXQoKSkgewotCQlkcHJpbnRrKCJJbnRlbChSKSBTcGVlZFN0ZXAoVE0pIGZvciB0aGlzIGNoaXBzZXQgbm90ICIKKwkJcHJfZGVidWcoIkludGVsKFIpIFNwZWVkU3RlcChUTSkgZm9yIHRoaXMgY2hpcHNldCBub3QgIgogCQkJCSIoeWV0KSBhdmFpbGFibGUuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuYyBiL2RyaXZlcnMvY3B1ZnJlcS9zcGVlZHN0ZXAtbGliLmMKc2ltaWxhcml0eSBpbmRleCA4OSUKcmVuYW1lIGZyb20gYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuYwpyZW5hbWUgdG8gZHJpdmVycy9jcHVmcmVxL3NwZWVkc3RlcC1saWIuYwppbmRleCBhOTRlYzZiLi44YWYyZDJmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWxpYi5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9zcGVlZHN0ZXAtbGliLmMKQEAgLTE4LDkgKzE4LDYgQEAKICNpbmNsdWRlIDxhc20vdHNjLmg+CiAjaW5jbHVkZSAic3BlZWRzdGVwLWxpYi5oIgogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgXAotCQkic3BlZWRzdGVwLWxpYiIsIG1zZykKLQogI2RlZmluZSBQRlggInNwZWVkc3RlcC1saWI6ICIKIAogI2lmZGVmIENPTkZJR19YODZfU1BFRURTVEVQX1JFTEFYRURfQ0FQX0NIRUNLCkBAIC03NSw3ICs3Miw3IEBACiAKIAkvKiByZWFkIE1TUiAweDJhIC0gd2Ugb25seSBuZWVkIHRoZSBsb3cgMzIgYml0cyAqLwogCXJkbXNyKE1TUl9JQTMyX0VCTF9DUl9QT1dFUk9OLCBtc3JfbG8sIG1zcl90bXApOwotCWRwcmludGsoIlAzIC0gTVNSX0lBMzJfRUJMX0NSX1BPV0VST046IDB4JXggMHgleFxuIiwgbXNyX2xvLCBtc3JfdG1wKTsKKwlwcl9kZWJ1ZygiUDMgLSBNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTjogMHgleCAweCV4XG4iLCBtc3JfbG8sIG1zcl90bXApOwogCW1zcl90bXAgPSBtc3JfbG87CiAKIAkvKiBkZWNvZGUgdGhlIEZTQiAqLwpAQCAtODksNyArODYsNyBAQAogCiAJLyogZGVjb2RlIHRoZSBtdWx0aXBsaWVyICovCiAJaWYgKHByb2Nlc3NvciA9PSBTUEVFRFNURVBfQ1BVX1BJSUlfQ19FQVJMWSkgewotCQlkcHJpbnRrKCJ3b3JrYXJvdW5kIGZvciBlYXJseSBQSUlJc1xuIik7CisJCXByX2RlYnVnKCJ3b3JrYXJvdW5kIGZvciBlYXJseSBQSUlJc1xuIik7CiAJCW1zcl9sbyAmPSAweDAzYzAwMDAwOwogCX0gZWxzZQogCQltc3JfbG8gJj0gMHgwYmMwMDAwMDsKQEAgLTEwMCw3ICs5Nyw3IEBACiAJCWorKzsKIAl9CiAKLQlkcHJpbnRrKCJzcGVlZCBpcyAldVxuIiwKKwlwcl9kZWJ1Zygic3BlZWQgaXMgJXVcbiIsCiAJCShtc3JfZGVjb2RlX211bHRbal0ucmF0aW8gKiBtc3JfZGVjb2RlX2ZzYltpXS52YWx1ZSAqIDEwMCkpOwogCiAJcmV0dXJuIG1zcl9kZWNvZGVfbXVsdFtqXS5yYXRpbyAqIG1zcl9kZWNvZGVfZnNiW2ldLnZhbHVlICogMTAwOwpAQCAtMTEyLDcgKzEwOSw3IEBACiAJdTMyIG1zcl9sbywgbXNyX3RtcDsKIAogCXJkbXNyKE1TUl9JQTMyX0VCTF9DUl9QT1dFUk9OLCBtc3JfbG8sIG1zcl90bXApOwotCWRwcmludGsoIlBNIC0gTVNSX0lBMzJfRUJMX0NSX1BPV0VST046IDB4JXggMHgleFxuIiwgbXNyX2xvLCBtc3JfdG1wKTsKKwlwcl9kZWJ1ZygiUE0gLSBNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTjogMHgleCAweCV4XG4iLCBtc3JfbG8sIG1zcl90bXApOwogCiAJLyogc2VlIHRhYmxlIEItMiBvZiAyNDU0NzIxMi5wZGYgKi8KIAlpZiAobXNyX2xvICYgMHgwMDA0MDAwMCkgewpAQCAtMTIyLDcgKzExOSw3IEBACiAJfQogCiAJbXNyX3RtcCA9IChtc3JfbG8gPj4gMjIpICYgMHgxZjsKLQlkcHJpbnRrKCJiaXRzIDIyLTI2IGFyZSAweCV4LCBzcGVlZCBpcyAldVxuIiwKKwlwcl9kZWJ1ZygiYml0cyAyMi0yNiBhcmUgMHgleCwgc3BlZWQgaXMgJXVcbiIsCiAJCQltc3JfdG1wLCAobXNyX3RtcCAqIDEwMCAqIDEwMDApKTsKIAogCXJldHVybiBtc3JfdG1wICogMTAwICogMTAwMDsKQEAgLTE2MCwxMSArMTU3LDExIEBACiAJfQogCiAJcmRtc3IoTVNSX0lBMzJfRUJMX0NSX1BPV0VST04sIG1zcl9sbywgbXNyX3RtcCk7Ci0JZHByaW50aygiUENPUkUgLSBNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTjogMHgleCAweCV4XG4iLAorCXByX2RlYnVnKCJQQ09SRSAtIE1TUl9JQTMyX0VCTF9DUl9QT1dFUk9OOiAweCV4IDB4JXhcbiIsCiAJCQltc3JfbG8sIG1zcl90bXApOwogCiAJbXNyX3RtcCA9IChtc3JfbG8gPj4gMjIpICYgMHgxZjsKLQlkcHJpbnRrKCJiaXRzIDIyLTI2IGFyZSAweCV4LCBzcGVlZCBpcyAldVxuIiwKKwlwcl9kZWJ1ZygiYml0cyAyMi0yNiBhcmUgMHgleCwgc3BlZWQgaXMgJXVcbiIsCiAJCQltc3JfdG1wLCAobXNyX3RtcCAqIGZzYikpOwogCiAJcmV0ID0gKG1zcl90bXAgKiBmc2IpOwpAQCAtMTkwLDcgKzE4Nyw3IEBACiAKIAlyZG1zcigweDJjLCBtc3JfbG8sIG1zcl9oaSk7CiAKLQlkcHJpbnRrKCJQNCAtIE1TUl9FQkNfRlJFUVVFTkNZX0lEOiAweCV4IDB4JXhcbiIsIG1zcl9sbywgbXNyX2hpKTsKKwlwcl9kZWJ1ZygiUDQgLSBNU1JfRUJDX0ZSRVFVRU5DWV9JRDogMHgleCAweCV4XG4iLCBtc3JfbG8sIG1zcl9oaSk7CiAKIAkvKiBkZWNvZGUgdGhlIEZTQjogc2VlIElBLTMyIEludGVsIChDKSBBcmNoaXRlY3R1cmUgU29mdHdhcmUKIAkgKiBEZXZlbG9wZXIncyBNYW51YWwsIFZvbHVtZSAzOiBTeXN0ZW0gUHJncmFtbWluZyBHdWlkZSwKQEAgLTIxNyw3ICsyMTQsNyBAQAogCS8qIE11bHRpcGxpZXIuICovCiAJbXVsdCA9IG1zcl9sbyA+PiAyNDsKIAotCWRwcmludGsoIlA0IC0gRlNCICV1IGtIejsgTXVsdGlwbGllciAldTsgU3BlZWQgJXUga0h6XG4iLAorCXByX2RlYnVnKCJQNCAtIEZTQiAldSBrSHo7IE11bHRpcGxpZXIgJXU7IFNwZWVkICV1IGtIelxuIiwKIAkJCWZzYiwgbXVsdCwgKGZzYiAqIG11bHQpKTsKIAogCXJldCA9IChmc2IgKiBtdWx0KTsKQEAgLTI1Nyw3ICsyNTQsNyBAQAogCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YSgwKTsKIAl1MzIgZWJ4LCBtc3JfbG8sIG1zcl9oaTsKIAotCWRwcmludGsoIng4NjogJXgsIG1vZGVsOiAleFxuIiwgYy0+eDg2LCBjLT54ODZfbW9kZWwpOworCXByX2RlYnVnKCJ4ODY6ICV4LCBtb2RlbDogJXhcbiIsIGMtPng4NiwgYy0+eDg2X21vZGVsKTsKIAogCWlmICgoYy0+eDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0lOVEVMKSB8fAogCSAgICAoKGMtPng4NiAhPSA2KSAmJiAoYy0+eDg2ICE9IDB4RikpKQpAQCAtMjcyLDcgKzI2OSw3IEBACiAJCWVieCA9IGNwdWlkX2VieCgweDAwMDAwMDAxKTsKIAkJZWJ4ICY9IDB4MDAwMDAwRkY7CiAKLQkJZHByaW50aygiZWJ4IHZhbHVlIGlzICV4LCB4ODZfbWFzayBpcyAleFxuIiwgZWJ4LCBjLT54ODZfbWFzayk7CisJCXByX2RlYnVnKCJlYnggdmFsdWUgaXMgJXgsIHg4Nl9tYXNrIGlzICV4XG4iLCBlYngsIGMtPng4Nl9tYXNrKTsKIAogCQlzd2l0Y2ggKGMtPng4Nl9tYXNrKSB7CiAJCWNhc2UgNDoKQEAgLTMyNyw3ICszMjQsNyBAQAogCQkvKiBjcHVpZF9lYngoMSkgaXMgMHgwNCBmb3IgZGVza3RvcCBQSUlJLAogCQkgKiAweDA2IGZvciBtb2JpbGUgUElJSS1NICovCiAJCWVieCA9IGNwdWlkX2VieCgweDAwMDAwMDAxKTsKLQkJZHByaW50aygiZWJ4IGlzICV4XG4iLCBlYngpOworCQlwcl9kZWJ1ZygiZWJ4IGlzICV4XG4iLCBlYngpOwogCiAJCWVieCAmPSAweDAwMDAwMEZGOwogCkBAIC0zNDQsNyArMzQxLDcgQEAKIAkJLyogYWxsIG1vYmlsZSBQSUlJIENvcHBlcm1pbmVzIGhhdmUgRlNCIDEwMCBNSHoKIAkJICogPT0+IHNvcnQgb3V0IGEgZmV3IGRlc2t0b3AgUElJSXMuICovCiAJCXJkbXNyKE1TUl9JQTMyX0VCTF9DUl9QT1dFUk9OLCBtc3JfbG8sIG1zcl9oaSk7Ci0JCWRwcmludGsoIkNvcHBlcm1pbmU6IE1TUl9JQTMyX0VCTF9DUl9QT1dFUk9OIGlzIDB4JXgsIDB4JXhcbiIsCisJCXByX2RlYnVnKCJDb3BwZXJtaW5lOiBNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTiBpcyAweCV4LCAweCV4XG4iLAogCQkJCW1zcl9sbywgbXNyX2hpKTsKIAkJbXNyX2xvICY9IDB4MDBjMDAwMDsKIAkJaWYgKG1zcl9sbyAhPSAweDAwODAwMDApCkBAIC0zNTcsMTIgKzM1NCwxMiBAQAogCQkgKiBiaXQgNTYgb3IgNTcgaXMgc2V0CiAJCSAqLwogCQlyZG1zcihNU1JfSUEzMl9QTEFURk9STV9JRCwgbXNyX2xvLCBtc3JfaGkpOwotCQlkcHJpbnRrKCJDb3BwZXJtaW5lOiBNU1JfSUEzMl9QTEFURk9STSBJRCBpcyAweCV4LCAweCV4XG4iLAorCQlwcl9kZWJ1ZygiQ29wcGVybWluZTogTVNSX0lBMzJfUExBVEZPUk0gSUQgaXMgMHgleCwgMHgleFxuIiwKIAkJCQltc3JfbG8sIG1zcl9oaSk7CiAJCWlmICgobXNyX2hpICYgKDE8PDE4KSkgJiYKIAkJICAgIChyZWxheGVkX2NoZWNrID8gMSA6IChtc3JfaGkgJiAoMzw8MjQpKSkpIHsKIAkJCWlmIChjLT54ODZfbWFzayA9PSAweDAxKSB7Ci0JCQkJZHByaW50aygiZWFybHkgUElJSSB2ZXJzaW9uXG4iKTsKKwkJCQlwcl9kZWJ1ZygiZWFybHkgUElJSSB2ZXJzaW9uXG4iKTsKIAkJCQlyZXR1cm4gU1BFRURTVEVQX0NQVV9QSUlJX0NfRUFSTFk7CiAJCQl9IGVsc2UKIAkJCQlyZXR1cm4gU1BFRURTVEVQX0NQVV9QSUlJX0M7CkBAIC0zOTMsMTQgKzM5MCwxNCBAQAogCWlmICgoIXByb2Nlc3NvcikgfHwgKCFsb3dfc3BlZWQpIHx8ICghaGlnaF9zcGVlZCkgfHwgKCFzZXRfc3RhdGUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRwcmludGsoInRyeWluZyB0byBkZXRlcm1pbmUgYm90aCBzcGVlZHNcbiIpOworCXByX2RlYnVnKCJ0cnlpbmcgdG8gZGV0ZXJtaW5lIGJvdGggc3BlZWRzXG4iKTsKIAogCS8qIGdldCBjdXJyZW50IHNwZWVkICovCiAJcHJldl9zcGVlZCA9IHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KHByb2Nlc3Nvcik7CiAJaWYgKCFwcmV2X3NwZWVkKQogCQlyZXR1cm4gLUVJTzsKIAotCWRwcmludGsoInByZXZpb3VzIHNwZWVkIGlzICV1XG4iLCBwcmV2X3NwZWVkKTsKKwlwcl9kZWJ1ZygicHJldmlvdXMgc3BlZWQgaXMgJXVcbiIsIHByZXZfc3BlZWQpOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCkBAIC00MTIsNyArNDA5LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZHByaW50aygibG93IHNwZWVkIGlzICV1XG4iLCAqbG93X3NwZWVkKTsKKwlwcl9kZWJ1ZygibG93IHNwZWVkIGlzICV1XG4iLCAqbG93X3NwZWVkKTsKIAogCS8qIHN0YXJ0IGxhdGVuY3kgbWVhc3VyZW1lbnQgKi8KIAlpZiAodHJhbnNpdGlvbl9sYXRlbmN5KQpAQCAtNDMxLDcgKzQyOCw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWRwcmludGsoImhpZ2ggc3BlZWQgaXMgJXVcbiIsICpoaWdoX3NwZWVkKTsKKwlwcl9kZWJ1ZygiaGlnaCBzcGVlZCBpcyAldVxuIiwgKmhpZ2hfc3BlZWQpOwogCiAJaWYgKCpsb3dfc3BlZWQgPT0gKmhpZ2hfc3BlZWQpIHsKIAkJcmV0ID0gLUVOT0RFVjsKQEAgLTQ0NSw3ICs0NDIsNyBAQAogCWlmICh0cmFuc2l0aW9uX2xhdGVuY3kpIHsKIAkJKnRyYW5zaXRpb25fbGF0ZW5jeSA9ICh0djIudHZfc2VjIC0gdHYxLnR2X3NlYykgKiBVU0VDX1BFUl9TRUMgKwogCQkJdHYyLnR2X3VzZWMgLSB0djEudHZfdXNlYzsKLQkJZHByaW50aygidHJhbnNpdGlvbiBsYXRlbmN5IGlzICV1IHVTZWNcbiIsICp0cmFuc2l0aW9uX2xhdGVuY3kpOworCQlwcl9kZWJ1ZygidHJhbnNpdGlvbiBsYXRlbmN5IGlzICV1IHVTZWNcbiIsICp0cmFuc2l0aW9uX2xhdGVuY3kpOwogCiAJCS8qIGNvbnZlcnQgdVNlYyB0byBuU2VjIGFuZCBhZGQgMjAlIGZvciBzYWZldHkgcmVhc29ucyAqLwogCQkqdHJhbnNpdGlvbl9sYXRlbmN5ICo9IDEyMDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWxpYi5oIGIvZHJpdmVycy9jcHVmcmVxL3NwZWVkc3RlcC1saWIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuaApyZW5hbWUgdG8gZHJpdmVycy9jcHVmcmVxL3NwZWVkc3RlcC1saWIuaApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1zbWkuYyBiL2RyaXZlcnMvY3B1ZnJlcS9zcGVlZHN0ZXAtc21pLmMKc2ltaWxhcml0eSBpbmRleCA4OSUKcmVuYW1lIGZyb20gYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1zbWkuYwpyZW5hbWUgdG8gZHJpdmVycy9jcHVmcmVxL3NwZWVkc3RlcC1zbWkuYwppbmRleCA5MWJjMjViLi5jNzZlYWQzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLXNtaS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9zcGVlZHN0ZXAtc21pLmMKQEAgLTU1LDkgKzU1LDYgQEAKICAqIG9mIERNQSBhY3Rpdml0eSBnb2luZyBvbj8gKi8KICNkZWZpbmUgU01JX1RSSUVTIDUKIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKLQkJInNwZWVkc3RlcC1zbWkiLCBtc2cpCi0KIC8qKgogICogc3BlZWRzdGVwX3NtaV9vd25lcnNoaXAKICAqLwpAQCAtNzAsNyArNjcsNyBAQAogCWNvbW1hbmQgPSAoc21pX3NpZyAmIDB4ZmZmZmZmMDApIHwgKHNtaV9jbWQgJiAweGZmKTsKIAltYWdpYyA9IHZpcnRfdG9fcGh5cyhtYWdpY19kYXRhKTsKIAotCWRwcmludGsoInRyeWluZyB0byBvYnRhaW4gb3duZXJzaGlwIHdpdGggY29tbWFuZCAleCBhdCBwb3J0ICV4XG4iLAorCXByX2RlYnVnKCJ0cnlpbmcgdG8gb2J0YWluIG93bmVyc2hpcCB3aXRoIGNvbW1hbmQgJXggYXQgcG9ydCAleFxuIiwKIAkJCWNvbW1hbmQsIHNtaV9wb3J0KTsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKApAQCAtODUsNyArODIsNyBAQAogCQk6ICJtZW1vcnkiCiAJKTsKIAotCWRwcmludGsoInJlc3VsdCBpcyAleFxuIiwgcmVzdWx0KTsKKwlwcl9kZWJ1ZygicmVzdWx0IGlzICV4XG4iLCByZXN1bHQpOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTEwNiwxMyArMTAzLDEzIEBACiAJdTMyIGZ1bmN0aW9uID0gR0VUX1NQRUVEU1RFUF9GUkVRUzsKIAogCWlmICghKGlzdF9pbmZvLmV2ZW50ICYgMHhGRkZGKSkgewotCQlkcHJpbnRrKCJidWcgIzE0MjIgLS0gY2FuJ3QgcmVhZCBmcmVxcyBmcm9tIEJJT1NcbiIpOworCQlwcl9kZWJ1ZygiYnVnICMxNDIyIC0tIGNhbid0IHJlYWQgZnJlcXMgZnJvbSBCSU9TXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJY29tbWFuZCA9IChzbWlfc2lnICYgMHhmZmZmZmYwMCkgfCAoc21pX2NtZCAmIDB4ZmYpOwogCi0JZHByaW50aygidHJ5aW5nIHRvIGRldGVybWluZSBmcmVxdWVuY2llcyB3aXRoIGNvbW1hbmQgJXggYXQgcG9ydCAleFxuIiwKKwlwcl9kZWJ1ZygidHJ5aW5nIHRvIGRldGVybWluZSBmcmVxdWVuY2llcyB3aXRoIGNvbW1hbmQgJXggYXQgcG9ydCAleFxuIiwKIAkJCWNvbW1hbmQsIHNtaV9wb3J0KTsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKApAQCAtMTI5LDcgKzEyNiw3IEBACiAJCSAgImQiIChzbWlfcG9ydCksICJTIiAoMCksICJEIiAoMCkKIAkpOwogCi0JZHByaW50aygicmVzdWx0ICV4LCBsb3dfZnJlcSAldSwgaGlnaF9mcmVxICV1XG4iLAorCXByX2RlYnVnKCJyZXN1bHQgJXgsIGxvd19mcmVxICV1LCBoaWdoX2ZyZXEgJXVcbiIsCiAJCQlyZXN1bHQsIGxvd19taHosIGhpZ2hfbWh6KTsKIAogCS8qIGFib3J0IGlmIHJlc3VsdHMgYXJlIG9idmlvdXNseSBpbmNvcnJlY3QuLi4gKi8KQEAgLTE1NCw3ICsxNTEsNyBAQAogCiAJY29tbWFuZCA9IChzbWlfc2lnICYgMHhmZmZmZmYwMCkgfCAoc21pX2NtZCAmIDB4ZmYpOwogCi0JZHByaW50aygidHJ5aW5nIHRvIGRldGVybWluZSBjdXJyZW50IHNldHRpbmcgd2l0aCBjb21tYW5kICV4ICIKKwlwcl9kZWJ1ZygidHJ5aW5nIHRvIGRldGVybWluZSBjdXJyZW50IHNldHRpbmcgd2l0aCBjb21tYW5kICV4ICIKIAkJImF0IHBvcnQgJXhcbiIsIGNvbW1hbmQsIHNtaV9wb3J0KTsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKApAQCAtMTY4LDcgKzE2NSw3IEBACiAJCSAgImQiIChzbWlfcG9ydCksICJTIiAoMCksICJEIiAoMCkKIAkpOwogCi0JZHByaW50aygic3RhdGUgaXMgJXgsIHJlc3VsdCBpcyAleFxuIiwgc3RhdGUsIHJlc3VsdCk7CisJcHJfZGVidWcoInN0YXRlIGlzICV4LCByZXN1bHQgaXMgJXhcbiIsIHN0YXRlLCByZXN1bHQpOwogCiAJcmV0dXJuIHN0YXRlICYgMTsKIH0KQEAgLTE5NCwxMyArMTkxLDEzIEBACiAKIAljb21tYW5kID0gKHNtaV9zaWcgJiAweGZmZmZmZjAwKSB8IChzbWlfY21kICYgMHhmZik7CiAKLQlkcHJpbnRrKCJ0cnlpbmcgdG8gc2V0IGZyZXF1ZW5jeSB0byBzdGF0ZSAldSAiCisJcHJfZGVidWcoInRyeWluZyB0byBzZXQgZnJlcXVlbmN5IHRvIHN0YXRlICV1ICIKIAkJIndpdGggY29tbWFuZCAleCBhdCBwb3J0ICV4XG4iLAogCQlzdGF0ZSwgY29tbWFuZCwgc21pX3BvcnQpOwogCiAJZG8gewogCQlpZiAocmV0cnkpIHsKLQkJCWRwcmludGsoInJldHJ5ICV1LCBwcmV2aW91cyByZXN1bHQgJXUsIHdhaXRpbmcuLi5cbiIsCisJCQlwcl9kZWJ1ZygicmV0cnkgJXUsIHByZXZpb3VzIHJlc3VsdCAldSwgd2FpdGluZy4uLlxuIiwKIAkJCQkJcmV0cnksIHJlc3VsdCk7CiAJCQltZGVsYXkocmV0cnkgKiA1MCk7CiAJCX0KQEAgLTIyMSw3ICsyMTgsNyBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCWlmIChuZXdfc3RhdGUgPT0gc3RhdGUpCi0JCWRwcmludGsoImNoYW5nZSB0byAldSBNSHogc3VjY2VlZGVkIGFmdGVyICV1IHRyaWVzICIKKwkJcHJfZGVidWcoImNoYW5nZSB0byAldSBNSHogc3VjY2VlZGVkIGFmdGVyICV1IHRyaWVzICIKIAkJCSJ3aXRoIHJlc3VsdCAldVxuIiwKIAkJCShzcGVlZHN0ZXBfZnJlcXNbbmV3X3N0YXRlXS5mcmVxdWVuY3kgLyAxMDAwKSwKIAkJCXJldHJ5LCByZXN1bHQpOwpAQCAtMjkyLDcgKzI4OSw3IEBACiAKIAlyZXN1bHQgPSBzcGVlZHN0ZXBfc21pX293bmVyc2hpcCgpOwogCWlmIChyZXN1bHQpIHsKLQkJZHByaW50aygiZmFpbHMgaW4gYWNxdWlyaW5nIG93bmVyc2hpcCBvZiBhIFNNSSBpbnRlcmZhY2UuXG4iKTsKKwkJcHJfZGVidWcoImZhaWxzIGluIGFjcXVpcmluZyBvd25lcnNoaXAgb2YgYSBTTUkgaW50ZXJmYWNlLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMzA0LDcgKzMwMSw3IEBACiAJaWYgKHJlc3VsdCkgewogCQkvKiBmYWxsIGJhY2sgdG8gc3BlZWRzdGVwX2xpYi5jIGRlY3Rpb24gbWVjaGFuaXNtOgogCQkgKiB0cnkgYm90aCBzdGF0ZXMgb3V0ICovCi0JCWRwcmludGsoImNvdWxkIG5vdCBkZXRlY3QgbG93IGFuZCBoaWdoIGZyZXF1ZW5jaWVzICIKKwkJcHJfZGVidWcoImNvdWxkIG5vdCBkZXRlY3QgbG93IGFuZCBoaWdoIGZyZXF1ZW5jaWVzICIKIAkJCQkiYnkgU01JIGNhbGwuXG4iKTsKIAkJcmVzdWx0ID0gc3BlZWRzdGVwX2dldF9mcmVxcyhzcGVlZHN0ZXBfcHJvY2Vzc29yLAogCQkJCWxvdywgaGlnaCwKQEAgLTMxMiwxOCArMzA5LDE4IEBACiAJCQkJJnNwZWVkc3RlcF9zZXRfc3RhdGUpOwogCiAJCWlmIChyZXN1bHQpIHsKLQkJCWRwcmludGsoImNvdWxkIG5vdCBkZXRlY3QgdHdvIGRpZmZlcmVudCBzcGVlZHMiCisJCQlwcl9kZWJ1ZygiY291bGQgbm90IGRldGVjdCB0d28gZGlmZmVyZW50IHNwZWVkcyIKIAkJCQkJIiAtLSBhYm9ydGluZy5cbiIpOwogCQkJcmV0dXJuIHJlc3VsdDsKIAkJfSBlbHNlCi0JCQlkcHJpbnRrKCJ3b3JrYXJvdW5kIHdvcmtlZC5cbiIpOworCQkJcHJfZGVidWcoIndvcmthcm91bmQgd29ya2VkLlxuIik7CiAJfQogCiAJLyogZ2V0IGN1cnJlbnQgc3BlZWQgc2V0dGluZyAqLwogCXN0YXRlID0gc3BlZWRzdGVwX2dldF9zdGF0ZSgpOwogCXNwZWVkID0gc3BlZWRzdGVwX2ZyZXFzW3N0YXRlXS5mcmVxdWVuY3k7CiAKLQlkcHJpbnRrKCJjdXJyZW50bHkgYXQgJXMgc3BlZWQgc2V0dGluZyAtICVpIE1IelxuIiwKKwlwcl9kZWJ1ZygiY3VycmVudGx5IGF0ICVzIHNwZWVkIHNldHRpbmcgLSAlaSBNSHpcbiIsCiAJCShzcGVlZCA9PSBzcGVlZHN0ZXBfZnJlcXNbU1BFRURTVEVQX0xPV10uZnJlcXVlbmN5KQogCQk/ICJsb3ciIDogImhpZ2giLAogCQkoc3BlZWQgLyAxMDAwKSk7CkBAIC0zNjAsNyArMzU3LDcgQEAKIAlpbnQgcmVzdWx0ID0gc3BlZWRzdGVwX3NtaV9vd25lcnNoaXAoKTsKIAogCWlmIChyZXN1bHQpCi0JCWRwcmludGsoImZhaWxzIGluIHJlLWFjcXVpcmluZyBvd25lcnNoaXAgb2YgYSBTTUkgaW50ZXJmYWNlLlxuIik7CisJCXByX2RlYnVnKCJmYWlscyBpbiByZS1hY3F1aXJpbmcgb3duZXJzaGlwIG9mIGEgU01JIGludGVyZmFjZS5cbiIpOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTQwMywxMiArNDAwLDEyIEBACiAJfQogCiAJaWYgKCFzcGVlZHN0ZXBfcHJvY2Vzc29yKSB7Ci0JCWRwcmludGsoIk5vIHN1cHBvcnRlZCBJbnRlbCBDUFUgZGV0ZWN0ZWQuXG4iKTsKKwkJcHJfZGVidWcoIk5vIHN1cHBvcnRlZCBJbnRlbCBDUFUgZGV0ZWN0ZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JZHByaW50aygic2lnbmF0dXJlOjB4JS44bHgsIGNvbW1hbmQ6MHglLjhseCwgIgotCQkiZXZlbnQ6MHglLjhseCwgcGVyZl9sZXZlbDoweCUuOGx4LlxuIiwKKwlwcl9kZWJ1Zygic2lnbmF0dXJlOjB4JS44dWx4LCBjb21tYW5kOjB4JS44dWx4LCAiCisJCSJldmVudDoweCUuOHVseCwgcGVyZl9sZXZlbDoweCUuOHVseC5cbiIsCiAJCWlzdF9pbmZvLnNpZ25hdHVyZSwgaXN0X2luZm8uY29tbWFuZCwKIAkJaXN0X2luZm8uZXZlbnQsIGlzdF9pbmZvLnBlcmZfbGV2ZWwpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9LY29uZmlnIGIvZHJpdmVycy9jcnlwdG8vS2NvbmZpZwppbmRleCBlNTQxODUyLi5jNjRjMzgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9LY29uZmlnCisrKyBiL2RyaXZlcnMvY3J5cHRvL0tjb25maWcKQEAgLTkxLDYgKzkxLDggQEAKIAkgIFRoaXMgaXMgdGhlIHMzOTAgaGFyZHdhcmUgYWNjZWxlcmF0ZWQgaW1wbGVtZW50YXRpb24gb2YgdGhlCiAJICBTSEEtMSBzZWN1cmUgaGFzaCBzdGFuZGFyZCAoRklQUyAxODAtMS9ERklQUyAxODAtMikuCiAKKwkgIEl0IGlzIGF2YWlsYWJsZSBhcyBvZiB6OTkwLgorCiBjb25maWcgQ1JZUFRPX1NIQTI1Nl9TMzkwCiAJdHJpc3RhdGUgIlNIQTI1NiBkaWdlc3QgYWxnb3JpdGhtIgogCWRlcGVuZHMgb24gUzM5MApAQCAtOTksOCArMTAxLDcgQEAKIAkgIFRoaXMgaXMgdGhlIHMzOTAgaGFyZHdhcmUgYWNjZWxlcmF0ZWQgaW1wbGVtZW50YXRpb24gb2YgdGhlCiAJICBTSEEyNTYgc2VjdXJlIGhhc2ggc3RhbmRhcmQgKERGSVBTIDE4MC0yKS4KIAotCSAgVGhpcyB2ZXJzaW9uIG9mIFNIQSBpbXBsZW1lbnRzIGEgMjU2IGJpdCBoYXNoIHdpdGggMTI4IGJpdHMgb2YKLQkgIHNlY3VyaXR5IGFnYWluc3QgY29sbGlzaW9uIGF0dGFja3MuCisJICBJdCBpcyBhdmFpbGFibGUgYXMgb2YgejkuCiAKIGNvbmZpZyBDUllQVE9fU0hBNTEyX1MzOTAKIAl0cmlzdGF0ZSAiU0hBMzg0IGFuZCBTSEE1MTIgZGlnZXN0IGFsZ29yaXRobSIKQEAgLTExMCwxMCArMTExLDcgQEAKIAkgIFRoaXMgaXMgdGhlIHMzOTAgaGFyZHdhcmUgYWNjZWxlcmF0ZWQgaW1wbGVtZW50YXRpb24gb2YgdGhlCiAJICBTSEE1MTIgc2VjdXJlIGhhc2ggc3RhbmRhcmQuCiAKLQkgIFRoaXMgdmVyc2lvbiBvZiBTSEEgaW1wbGVtZW50cyBhIDUxMiBiaXQgaGFzaCB3aXRoIDI1NiBiaXRzIG9mCi0JICBzZWN1cml0eSBhZ2FpbnN0IGNvbGxpc2lvbiBhdHRhY2tzLiBUaGUgY29kZSBhbHNvIGluY2x1ZGVzIFNIQS0zODQsCi0JICBhIDM4NCBiaXQgaGFzaCB3aXRoIDE5MiBiaXRzIG9mIHNlY3VyaXR5IGFnYWluc3QgY29sbGlzaW9uIGF0dGFja3MuCi0KKwkgIEl0IGlzIGF2YWlsYWJsZSBhcyBvZiB6MTAuCiAKIGNvbmZpZyBDUllQVE9fREVTX1MzOTAKIAl0cmlzdGF0ZSAiREVTIGFuZCBUcmlwbGUgREVTIGNpcGhlciBhbGdvcml0aG1zIgpAQCAtMTIxLDkgKzExOSwxMiBAQAogCXNlbGVjdCBDUllQVE9fQUxHQVBJCiAJc2VsZWN0IENSWVBUT19CTEtDSVBIRVIKIAloZWxwCi0JICBUaGlzIHVzIHRoZSBzMzkwIGhhcmR3YXJlIGFjY2VsZXJhdGVkIGltcGxlbWVudGF0aW9uIG9mIHRoZQorCSAgVGhpcyBpcyB0aGUgczM5MCBoYXJkd2FyZSBhY2NlbGVyYXRlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKIAkgIERFUyBjaXBoZXIgYWxnb3JpdGhtIChGSVBTIDQ2LTIpLCBhbmQgVHJpcGxlIERFUyBFREUgKEZJUFMgNDYtMykuCiAKKwkgIEFzIG9mIHo5OTAgdGhlIEVDQiBhbmQgQ0JDIG1vZGUgYXJlIGhhcmR3YXJlIGFjY2VsZXJhdGVkLgorCSAgQXMgb2YgejE5NiB0aGUgQ1RSIG1vZGUgaXMgaGFyZHdhcmUgYWNjZWxlcmF0ZWQuCisKIGNvbmZpZyBDUllQVE9fQUVTX1MzOTAKIAl0cmlzdGF0ZSAiQUVTIGNpcGhlciBhbGdvcml0aG1zIgogCWRlcGVuZHMgb24gUzM5MApAQCAtMTMxLDIwICsxMzIsMTUgQEAKIAlzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUgogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIHMzOTAgaGFyZHdhcmUgYWNjZWxlcmF0ZWQgaW1wbGVtZW50YXRpb24gb2YgdGhlCi0JICBBRVMgY2lwaGVyIGFsZ29yaXRobXMgKEZJUFMtMTk3KS4gQUVTIHVzZXMgdGhlIFJpam5kYWVsCi0JICBhbGdvcml0aG0uCisJICBBRVMgY2lwaGVyIGFsZ29yaXRobXMgKEZJUFMtMTk3KS4KIAotCSAgUmlqbmRhZWwgYXBwZWFycyB0byBiZSBjb25zaXN0ZW50bHkgYSB2ZXJ5IGdvb2QgcGVyZm9ybWVyIGluCi0JICBib3RoIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSBhY3Jvc3MgYSB3aWRlIHJhbmdlIG9mIGNvbXB1dGluZwotCSAgZW52aXJvbm1lbnRzIHJlZ2FyZGxlc3Mgb2YgaXRzIHVzZSBpbiBmZWVkYmFjayBvciBub24tZmVlZGJhY2sKLQkgIG1vZGVzLiBJdHMga2V5IHNldHVwIHRpbWUgaXMgZXhjZWxsZW50LCBhbmQgaXRzIGtleSBhZ2lsaXR5IGlzCi0JICBnb29kLiBSaWpuZGFlbCdzIHZlcnkgbG93IG1lbW9yeSByZXF1aXJlbWVudHMgbWFrZSBpdCB2ZXJ5IHdlbGwKLQkgIHN1aXRlZCBmb3IgcmVzdHJpY3RlZC1zcGFjZSBlbnZpcm9ubWVudHMsIGluIHdoaWNoIGl0IGFsc28KLQkgIGRlbW9uc3RyYXRlcyBleGNlbGxlbnQgcGVyZm9ybWFuY2UuIFJpam5kYWVsJ3Mgb3BlcmF0aW9ucyBhcmUKLQkgIGFtb25nIHRoZSBlYXNpZXN0IHRvIGRlZmVuZCBhZ2FpbnN0IHBvd2VyIGFuZCB0aW1pbmcgYXR0YWNrcy4KLQotCSAgT24gczM5MCB0aGUgU3lzdGVtIHo5LTEwOSBjdXJyZW50bHkgb25seSBzdXBwb3J0cyB0aGUga2V5IHNpemUKLQkgIG9mIDEyOCBiaXQuCisJICBBcyBvZiB6OSB0aGUgRUNCIGFuZCBDQkMgbW9kZXMgYXJlIGhhcmR3YXJlIGFjY2VsZXJhdGVkCisJICBmb3IgMTI4IGJpdCBrZXlzLgorCSAgQXMgb2YgejEwIHRoZSBFQ0IgYW5kIENCQyBtb2RlcyBhcmUgaGFyZHdhcmUgYWNjZWxlcmF0ZWQKKwkgIGZvciBhbGwgQUVTIGtleSBzaXplcy4KKwkgIEFzIG9mIHoxOTYgdGhlIENUUiBtb2RlIGlzIGhhcmR3YXJlIGFjY2VsZXJhdGVkIGZvciBhbGwgQUVTCisJICBrZXkgc2l6ZXMgYW5kIFhUUyBtb2RlIGlzIGhhcmR3YXJlIGFjY2VsZXJhdGVkIGZvciAyNTYgYW5kCisJICA1MTIgYml0IGtleXMuCiAKIGNvbmZpZyBTMzkwX1BSTkcKIAl0cmlzdGF0ZSAiUHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGRldmljZSBkcml2ZXIiCkBAIC0xNTQsOCArMTUwLDIwIEBACiAJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBzMzkwIHBzZXVkbyByYW5kb20gbnVtYmVyCiAJICBnZW5lcmF0b3IuIFRoZSBQUk5HIGlzIHBhcnQgb2YgdGhlIGNyeXB0b2dyYXBoaWMgcHJvY2Vzc29yIGZ1bmN0aW9ucwogCSAgYW5kIHVzZXMgdHJpcGxlLURFUyB0byBnZW5lcmF0ZSBzZWN1cmUgcmFuZG9tIG51bWJlcnMgbGlrZSB0aGUKLQkgIEFOU0kgWDkuMTcgc3RhbmRhcmQuIFRoZSBQUk5HIGlzIHVzYWJsZSB2aWEgdGhlIGNoYXIgZGV2aWNlCi0JICAvZGV2L3ByYW5kb20uCisJICBBTlNJIFg5LjE3IHN0YW5kYXJkLiBVc2VyLXNwYWNlIHByb2dyYW1zIGFjY2VzcyB0aGUKKwkgIHBzZXVkby1yYW5kb20tbnVtYmVyIGRldmljZSB0aHJvdWdoIHRoZSBjaGFyIGRldmljZSAvZGV2L3ByYW5kb20uCisKKwkgIEl0IGlzIGF2YWlsYWJsZSBhcyBvZiB6OS4KKworY29uZmlnIENSWVBUT19HSEFTSF9TMzkwCisJdHJpc3RhdGUgIkdIQVNIIGRpZ2VzdCBhbGdvcml0aG0iCisJZGVwZW5kcyBvbiBTMzkwCisJc2VsZWN0IENSWVBUT19IQVNICisJaGVscAorCSAgVGhpcyBpcyB0aGUgczM5MCBoYXJkd2FyZSBhY2NlbGVyYXRlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKKwkgIEdIQVNIIG1lc3NhZ2UgZGlnZXN0IGFsZ29yaXRobSBmb3IgR0NNIChHYWxvaXMvQ291bnRlciBNb2RlKS4KKworCSAgSXQgaXMgYXZhaWxhYmxlIGFzIG9mIHoxOTYuCiAKIGNvbmZpZyBDUllQVE9fREVWX01WX0NFU0EKIAl0cmlzdGF0ZSAiTWFydmVsbCdzIENyeXB0b2dyYXBoaWMgRW5naW5lIgpAQCAtMjAwLDYgKzIwOCw4IEBACiAJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgogCSAgb24gdGhlIEhJRk4gNzk1eCBjcnlwdG8gYWRhcHRlcnMuCiAKK3NvdXJjZSBkcml2ZXJzL2NyeXB0by9jYWFtL0tjb25maWcKKwogY29uZmlnIENSWVBUT19ERVZfVEFMSVRPUwogCXRyaXN0YXRlICJUYWxpdG9zIEZyZWVzY2FsZSBTZWN1cml0eSBFbmdpbmUgKFNFQykiCiAJc2VsZWN0IENSWVBUT19BTEdBUEkKQEAgLTI2OSw0ICsyNzksMTUgQEAKIAogCSAgU2F5aW5nIG0gaGVyZSB3aWxsIGJ1aWxkIGEgbW9kdWxlIG5hbWVkIHBpcGNveGNlbGxfY3J5cHRvLgogCitjb25maWcgQ1JZUFRPX0RFVl9TNVAKKwl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgU2Ftc3VuZyBTNVBWMjEwIGNyeXB0byBhY2NlbGVyYXRvciIKKwlkZXBlbmRzIG9uIEFSQ0hfUzVQVjIxMAorCXNlbGVjdCBDUllQVE9fQUVTCisJc2VsZWN0IENSWVBUT19BTEdBUEkKKwlzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gaGF2ZSBzdXBwb3J0IGZvciBTNVAgY3J5cHRvIGFjY2VsZXJhdGlvbi4KKwkgIFNlbGVjdCB0aGlzIHRvIG9mZmxvYWQgU2Ftc3VuZyBTNVBWMjEwIG9yIFM1UEMxMTAgZnJvbSBBRVMKKwkgIGFsZ29yaXRobXMgZXhlY3V0aW9uLgorCiBlbmRpZiAjIENSWVBUT19IVwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vTWFrZWZpbGUgYi9kcml2ZXJzL2NyeXB0by9NYWtlZmlsZQppbmRleCA1MjAzZTM0Li41M2VhNTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2NyeXB0by9NYWtlZmlsZQpAQCAtNiw4ICs2LDEwIEBACiBvYmotJChDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVgpICs9IGhpZm5fNzk1eC5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0RFVl9NVl9DRVNBKSArPSBtdl9jZXNhLm8KIG9iai0kKENPTkZJR19DUllQVE9fREVWX1RBTElUT1MpICs9IHRhbGl0b3Mubworb2JqLSQoQ09ORklHX0NSWVBUT19ERVZfRlNMX0NBQU0pICs9IGNhYW0vCiBvYmotJChDT05GSUdfQ1JZUFRPX0RFVl9JWFA0WFgpICs9IGl4cDR4eF9jcnlwdG8ubwogb2JqLSQoQ09ORklHX0NSWVBUT19ERVZfUFBDNFhYKSArPSBhbWNjLwogb2JqLSQoQ09ORklHX0NSWVBUT19ERVZfT01BUF9TSEFNKSArPSBvbWFwLXNoYW0ubwogb2JqLSQoQ09ORklHX0NSWVBUT19ERVZfT01BUF9BRVMpICs9IG9tYXAtYWVzLm8KIG9iai0kKENPTkZJR19DUllQVE9fREVWX1BJQ09YQ0VMTCkgKz0gcGljb3hjZWxsX2NyeXB0by5vCitvYmotJChDT05GSUdfQ1JZUFRPX0RFVl9TNVApICs9IHM1cC1zc3MubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vY2FhbS9LY29uZmlnIGIvZHJpdmVycy9jcnlwdG8vY2FhbS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkODc2YmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NyeXB0by9jYWFtL0tjb25maWcKQEAgLTAsMCArMSw3MiBAQAorY29uZmlnIENSWVBUT19ERVZfRlNMX0NBQU0KKwl0cmlzdGF0ZSAiRnJlZXNjYWxlIENBQU0tTXVsdGljb3JlIGRyaXZlciBiYWNrZW5kIgorCWRlcGVuZHMgb24gRlNMX1NPQworCWhlbHAKKwkgIEVuYWJsZXMgdGhlIGRyaXZlciBtb2R1bGUgZm9yIEZyZWVzY2FsZSdzIENyeXB0b2dyYXBoaWMgQWNjZWxlcmF0b3IKKwkgIGFuZCBBc3N1cmFuY2UgTW9kdWxlIChDQUFNKSwgYWxzbyBrbm93biBhcyB0aGUgU0VDIHZlcnNpb24gNCAoU0VDNCkuCisJICBUaGlzIG1vZHVsZSBhZGRzIGEgam9iIHJpbmcgb3BlcmF0aW9uIGludGVyZmFjZSwgYW5kIGNvbmZpZ3VyZXMgaC93CisJICB0byBvcGVyYXRlIGFzIGEgRFBBQSBjb21wb25lbnQgYXV0b21hdGljYWxseSwgZGVwZW5kaW5nCisJICBvbiBoL3cgZmVhdHVyZSBhdmFpbGFiaWxpdHkuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGNhYW0uCisKK2NvbmZpZyBDUllQVE9fREVWX0ZTTF9DQUFNX1JJTkdTSVpFCisJaW50ICJKb2IgUmluZyBzaXplIgorCWRlcGVuZHMgb24gQ1JZUFRPX0RFVl9GU0xfQ0FBTQorCXJhbmdlIDIgOQorCWRlZmF1bHQgIjkiCisJaGVscAorCSAgU2VsZWN0IHNpemUgb2YgSm9iIFJpbmdzIGFzIGEgcG93ZXIgb2YgMiwgd2l0aGluIHRoZQorCSAgcmFuZ2UgMi05IChyaW5nIHNpemUgNC01MTIpLgorCSAgRXhhbXBsZXM6CisJCTIgPT4gNAorCQkzID0+IDgKKwkJNCA9PiAxNgorCQk1ID0+IDMyCisJCTYgPT4gNjQKKwkJNyA9PiAxMjgKKwkJOCA9PiAyNTYKKwkJOSA9PiA1MTIKKworY29uZmlnIENSWVBUT19ERVZfRlNMX0NBQU1fSU5UQworCWJvb2wgIkpvYiBSaW5nIGludGVycnVwdCBjb2FsZXNjaW5nIgorCWRlcGVuZHMgb24gQ1JZUFRPX0RFVl9GU0xfQ0FBTQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIEVuYWJsZSB0aGUgSm9iIFJpbmcncyBpbnRlcnJ1cHQgY29hbGVzY2luZyBmZWF0dXJlLgorCitjb25maWcgQ1JZUFRPX0RFVl9GU0xfQ0FBTV9JTlRDX0NPVU5UX1RITEQKKwlpbnQgIkpvYiBSaW5nIGludGVycnVwdCBjb2FsZXNjaW5nIGNvdW50IHRocmVzaG9sZCIKKwlkZXBlbmRzIG9uIENSWVBUT19ERVZfRlNMX0NBQU1fSU5UQworCXJhbmdlIDEgMjU1CisJZGVmYXVsdCAyNTUKKwloZWxwCisJICBTZWxlY3QgbnVtYmVyIG9mIGRlc2NyaXB0b3IgY29tcGxldGlvbnMgdG8gcXVldWUgYmVmb3JlCisJICByYWlzaW5nIGFuIGludGVycnVwdCwgaW4gdGhlIHJhbmdlIDEtMjU1LiBOb3RlIHRoYXQgYSBzZWxlY3Rpb24KKwkgIG9mIDEgZnVuY3Rpb25hbGx5IGRlZmVhdHMgdGhlIGNvYWxlc2NpbmcgZmVhdHVyZSwgYW5kIGEgc2VsZWN0aW9uCisJICBlcXVhbCBvciBncmVhdGVyIHRoYW4gdGhlIGpvYiByaW5nIHNpemUgd2lsbCBmb3JjZSB0aW1lb3V0cy4KKworY29uZmlnIENSWVBUT19ERVZfRlNMX0NBQU1fSU5UQ19USU1FX1RITEQKKwlpbnQgIkpvYiBSaW5nIGludGVycnVwdCBjb2FsZXNjaW5nIHRpbWVyIHRocmVzaG9sZCIKKwlkZXBlbmRzIG9uIENSWVBUT19ERVZfRlNMX0NBQU1fSU5UQworCXJhbmdlIDEgNjU1MzUKKwlkZWZhdWx0IDIwNDgKKwloZWxwCisJICBTZWxlY3QgbnVtYmVyIG9mIGJ1cyBjbG9ja3MvNjQgdG8gdGltZW91dCBpbiB0aGUgY2FzZSB0aGF0IG9uZSBvcgorCSAgbW9yZSBkZXNjcmlwdG9yIGNvbXBsZXRpb25zIGFyZSBxdWV1ZWQgd2l0aG91dCByZWFjaGluZyB0aGUgY291bnQKKwkgIHRocmVzaG9sZC4gUmFuZ2UgaXMgMS02NTUzNS4KKworY29uZmlnIENSWVBUT19ERVZfRlNMX0NBQU1fQ1JZUFRPX0FQSQorCXRyaXN0YXRlICJSZWdpc3RlciBhbGdvcml0aG0gaW1wbGVtZW50YXRpb25zIHdpdGggdGhlIENyeXB0byBBUEkiCisJZGVwZW5kcyBvbiBDUllQVE9fREVWX0ZTTF9DQUFNCisJZGVmYXVsdCB5CisJc2VsZWN0IENSWVBUT19BTEdBUEkKKwlzZWxlY3QgQ1JZUFRPX0FVVEhFTkMKKwloZWxwCisJICBTZWxlY3RpbmcgdGhpcyB3aWxsIG9mZmxvYWQgY3J5cHRvIGZvciB1c2VycyBvZiB0aGUKKwkgIHNjYXR0ZXJsaXN0IGNyeXB0byBBUEkgKHN1Y2ggYXMgdGhlIGxpbnV4IG5hdGl2ZSBJUFNlYworCSAgc3RhY2spIHRvIHRoZSBTRUM0IHZpYSBqb2IgcmluZy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBjYWFtYWxnLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vY2FhbS9NYWtlZmlsZSBiL2RyaXZlcnMvY3J5cHRvL2NhYW0vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYzOTAxMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY3J5cHRvL2NhYW0vTWFrZWZpbGUKQEAgLTAsMCArMSw4IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgQ0FBTSBiYWNrZW5kIGFuZCBkZXBlbmRlbnQgY29tcG9uZW50cworIworCitvYmotJChDT05GSUdfQ1JZUFRPX0RFVl9GU0xfQ0FBTSkgKz0gY2FhbS5vCitvYmotJChDT05GSUdfQ1JZUFRPX0RFVl9GU0xfQ0FBTV9DUllQVE9fQVBJKSArPSBjYWFtYWxnLm8KKworY2FhbS1vYmpzIDo9IGN0cmwubyBqci5vIGVycm9yLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2NhYW0vY2FhbWFsZy5jIGIvZHJpdmVycy9jcnlwdG8vY2FhbS9jYWFtYWxnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBlNjVkNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY3J5cHRvL2NhYW0vY2FhbWFsZy5jCkBAIC0wLDAgKzEsMTI2OCBAQAorLyoKKyAqIGNhYW0gLSBGcmVlc2NhbGUgRlNMIENBQU0gc3VwcG9ydCBmb3IgY3J5cHRvIEFQSQorICoKKyAqIENvcHlyaWdodCAyMDA4LTIwMTEgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBCYXNlZCBvbiB0YWxpdG9zIGNyeXB0byBBUEkgZHJpdmVyLgorICoKKyAqIHJlbGF0aW9uc2hpcCBvZiBqb2IgZGVzY3JpcHRvcnMgdG8gc2hhcmVkIGRlc2NyaXB0b3JzIChTdGV2ZUMgRGVjIDEwIDIwMDgpOgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLQorICogfCBKb2JEZXNjICMxICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0+fCAgU2hhcmVEZXNjICB8CisgKiB8ICoocGFja2V0IDEpIHwgICAgICAgICAgICAgICAgICAgICB8ICAgKFBEQikgICAgIHwKKyAqIC0tLS0tLS0tLS0tLS0tLSAgICAgIHwtLS0tLS0tLS0tLS0tPnwgIChoYXNoS2V5KSAgfAorICogICAgICAgLiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAoY2lwaGVyS2V5KSB8CisgKiAgICAgICAuICAgICAgICAgICAgICB8ICAgIHwtLS0tLS0tLT58IChvcGVyYXRpb24pIHwKKyAqIC0tLS0tLS0tLS0tLS0tLSAgICAgIHwgICAgfCAgICAgICAgIC0tLS0tLS0tLS0tLS0tLQorICogfCBKb2JEZXNjICMyICB8LS0tLS0tfCAgICB8CisgKiB8ICoocGFja2V0IDIpIHwgICAgICAgICAgIHwKKyAqIC0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgfAorICogICAgICAgLiAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAuICAgICAgICAgICAgICAgICAgIHwKKyAqIC0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgfAorICogfCBKb2JEZXNjICMzICB8LS0tLS0tLS0tLS0tCisgKiB8ICoocGFja2V0IDMpIHwKKyAqIC0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFRoZSBTaGFyZWREZXNjIG5ldmVyIGNoYW5nZXMgZm9yIGEgY29ubmVjdGlvbiB1bmxlc3MgcmVrZXllZCwgYnV0CisgKiBlYWNoIHBhY2tldCB3aWxsIGxpa2VseSBiZSBpbiBhIGRpZmZlcmVudCBwbGFjZS4gU28gYWxsIHdlIG5lZWQKKyAqIHRvIGtub3cgdG8gcHJvY2VzcyB0aGUgcGFja2V0IGlzIHdoZXJlIHRoZSBpbnB1dCBpcywgd2hlcmUgdGhlCisgKiBvdXRwdXQgZ29lcywgYW5kIHdoYXQgY29udGV4dCB3ZSB3YW50IHRvIHByb2Nlc3Mgd2l0aC4gQ29udGV4dCBpcworICogaW4gdGhlIFNoYXJlZERlc2MsIHBhY2tldCByZWZlcmVuY2VzIGluIHRoZSBKb2JEZXNjLgorICoKKyAqIFNvLCBhIGpvYiBkZXNjIGxvb2tzIGxpa2U6CisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB8IEhlYWRlciAgICAgICAgICAgIHwKKyAqIHwgU2hhcmVEZXNjIFBvaW50ZXIgfAorICogfCBTRVFfT1VUX1BUUiAgICAgICB8CisgKiB8IChvdXRwdXQgYnVmZmVyKSAgIHwKKyAqIHwgU0VRX0lOX1BUUiAgICAgICAgfAorICogfCAoaW5wdXQgYnVmZmVyKSAgICB8CisgKiB8IExPQUQgKHRvIERFQ08pICAgIHwKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJjb21wYXQuaCIKKworI2luY2x1ZGUgInJlZ3MuaCIKKyNpbmNsdWRlICJpbnRlcm4uaCIKKyNpbmNsdWRlICJkZXNjX2NvbnN0ci5oIgorI2luY2x1ZGUgImpyLmgiCisjaW5jbHVkZSAiZXJyb3IuaCIKKworLyoKKyAqIGNyeXB0byBhbGcKKyAqLworI2RlZmluZSBDQUFNX0NSQV9QUklPUklUWQkJMzAwMAorLyogbWF4IGtleSBpcyBzdW0gb2YgQUVTX01BWF9LRVlfU0laRSwgbWF4IHNwbGl0IGtleSBzaXplICovCisjZGVmaW5lIENBQU1fTUFYX0tFWV9TSVpFCQkoQUVTX01BWF9LRVlfU0laRSArIFwKKwkJCQkJIFNIQTUxMl9ESUdFU1RfU0laRSAqIDIpCisvKiBtYXggSVYgaXMgbWF4IG9mIEFFU19CTE9DS19TSVpFLCBERVMzX0VERV9CTE9DS19TSVpFICovCisjZGVmaW5lIENBQU1fTUFYX0lWX0xFTkdUSAkJMTYKKworLyogbGVuZ3RoIG9mIGRlc2NyaXB0b3JzIHRleHQgKi8KKyNkZWZpbmUgREVTQ19BRUFEX1NIQVJFRF9URVhUX0xFTgk0CisjZGVmaW5lIERFU0NfQUVBRF9FTkNSWVBUX1RFWFRfTEVOIAkyMQorI2RlZmluZSBERVNDX0FFQURfREVDUllQVF9URVhUX0xFTiAJMjQKKyNkZWZpbmUgREVTQ19BRUFEX0dJVkVOQ1JZUFRfVEVYVF9MRU4gCTI3CisKKyNpZmRlZiBERUJVRworLyogZm9yIHByaW50X2hleF9kdW1wcyB3aXRoIGxpbmUgcmVmZXJlbmNlcyAqLworI2RlZmluZSB4c3RyKHMpIHN0cihzKQorI2RlZmluZSBzdHIocykgI3MKKyNkZWZpbmUgZGVidWcoZm9ybWF0LCBhcmcuLi4pIHByaW50ayhmb3JtYXQsIGFyZykKKyNlbHNlCisjZGVmaW5lIGRlYnVnKGZvcm1hdCwgYXJnLi4uKQorI2VuZGlmCisKKy8qCisgKiBwZXItc2Vzc2lvbiBjb250ZXh0CisgKi8KK3N0cnVjdCBjYWFtX2N0eCB7CisJc3RydWN0IGRldmljZSAqanJkZXY7CisJdTMyICpzaF9kZXNjOworCWRtYV9hZGRyX3Qgc2hhcmVkX2Rlc2NfcGh5czsKKwl1MzIgY2xhc3MxX2FsZ190eXBlOworCXUzMiBjbGFzczJfYWxnX3R5cGU7CisJdTMyIGFsZ19vcDsKKwl1OCAqa2V5OworCWRtYV9hZGRyX3Qga2V5X3BoeXM7CisJdW5zaWduZWQgaW50IGVuY2tleWxlbjsKKwl1bnNpZ25lZCBpbnQgc3BsaXRfa2V5X2xlbjsKKwl1bnNpZ25lZCBpbnQgc3BsaXRfa2V5X3BhZF9sZW47CisJdW5zaWduZWQgaW50IGF1dGhzaXplOworfTsKKworc3RhdGljIGludCBhZWFkX2F1dGhlbmNfc2V0YXV0aHNpemUoc3RydWN0IGNyeXB0b19hZWFkICphdXRoZW5jLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgYXV0aHNpemUpCit7CisJc3RydWN0IGNhYW1fY3R4ICpjdHggPSBjcnlwdG9fYWVhZF9jdHgoYXV0aGVuYyk7CisKKwljdHgtPmF1dGhzaXplID0gYXV0aHNpemU7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNwbGl0X2tleV9yZXN1bHQgeworCXN0cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRpb247CisJaW50IGVycjsKK307CisKK3N0YXRpYyB2b2lkIHNwbGl0X2tleV9kb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyICpkZXNjLCB1MzIgZXJyLAorCQkJICAgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3Qgc3BsaXRfa2V5X3Jlc3VsdCAqcmVzID0gY29udGV4dDsKKworI2lmZGVmIERFQlVHCisJZGV2X2VycihkZXYsICIlcyAlZDogZXJyIDB4JXhcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgZXJyKTsKKyNlbmRpZgorCWlmIChlcnIpIHsKKwkJY2hhciB0bXBbQ0FBTV9FUlJPUl9TVFJfTUFYXTsKKworCQlkZXZfZXJyKGRldiwgIiUwOHg6ICVzXG4iLCBlcnIsIGNhYW1fanJfc3Ryc3RhdHVzKHRtcCwgZXJyKSk7CisJfQorCisJcmVzLT5lcnIgPSBlcnI7CisKKwljb21wbGV0ZSgmcmVzLT5jb21wbGV0aW9uKTsKK30KKworLyoKK2dldCBhIHNwbGl0IGlwYWQvb3BhZCBrZXkKKworU3BsaXQga2V5IGdlbmVyYXRpb24tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitbMDBdIDB4YjA4MTAwMDggICAgam9iZGVzYzogc3RpZHg9MSBzaGFyZT1uZXZlciBsZW49OAorWzAxXSAweDA0MDAwMDE0ICAgICAgICBrZXk6IGNsYXNzMi0+a2V5cmVnIGxlbj0yMAorCQkJQDB4ZmZlMDEwMDAKK1swM10gMHg4NDQxMDAxNCAgb3BlcmF0aW9uOiBjbHMyLW9wIHNoYTEgaG1hYyBpbml0IGRlYworWzA0XSAweDI0OTQwMDAwICAgICBmaWZvbGQ6IGNsYXNzMiBtc2dkYXRhLWxhc3QyIGxlbj0wIGltbQorWzA1XSAweGE0MDAwMDAxICAgICAgIGp1bXA6IGNsYXNzMiBsb2NhbCBhbGwgLT4xIFswNl0KK1swNl0gMHg2NDI2MDAyOCAgICBmaWZvc3RyOiBjbGFzczIgbWRzcGxpdC1qZGsgbGVuPTQwCisJCQlAMHhmZmUwNDAwMAorKi8KK3N0YXRpYyB1MzIgZ2VuX3NwbGl0X2tleShzdHJ1Y3QgY2FhbV9jdHggKmN0eCwgY29uc3QgdTggKmtleV9pbiwgdTMyIGF1dGhrZXlsZW4pCit7CisJc3RydWN0IGRldmljZSAqanJkZXYgPSBjdHgtPmpyZGV2OworCXUzMiAqZGVzYzsKKwlzdHJ1Y3Qgc3BsaXRfa2V5X3Jlc3VsdCByZXN1bHQ7CisJZG1hX2FkZHJfdCBkbWFfYWRkcl9pbiwgZG1hX2FkZHJfb3V0OworCWludCByZXQgPSAwOworCisJZGVzYyA9IGttYWxsb2MoQ0FBTV9DTURfU1ogKiA2ICsgQ0FBTV9QVFJfU1ogKiAyLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisKKwlpbml0X2pvYl9kZXNjKGRlc2MsIDApOworCisJZG1hX2FkZHJfaW4gPSBkbWFfbWFwX3NpbmdsZShqcmRldiwgKHZvaWQgKilrZXlfaW4sIGF1dGhrZXlsZW4sCisJCQkJICAgICBETUFfVE9fREVWSUNFKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoanJkZXYsIGRtYV9hZGRyX2luKSkgeworCQlkZXZfZXJyKGpyZGV2LCAidW5hYmxlIHRvIG1hcCBrZXkgaW5wdXQgbWVtb3J5XG4iKTsKKwkJa2ZyZWUoZGVzYyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlhcHBlbmRfa2V5KGRlc2MsIGRtYV9hZGRyX2luLCBhdXRoa2V5bGVuLCBDTEFTU18yIHwKKwkJICAgICAgIEtFWV9ERVNUX0NMQVNTX1JFRyk7CisKKwkvKiBTZXRzIE1ESEEgdXAgaW50byBhbiBITUFDLUlOSVQgKi8KKwlhcHBlbmRfb3BlcmF0aW9uKGRlc2MsIGN0eC0+YWxnX29wIHwgT1BfQUxHX0RFQ1JZUFQgfAorCQkJICAgICBPUF9BTEdfQVNfSU5JVCk7CisKKwkvKgorCSAqIGRvIGEgRklGT19MT0FEIG9mIHplcm8sIHRoaXMgd2lsbCB0cmlnZ2VyIHRoZSBpbnRlcm5hbCBrZXkgZXhwYW5zaW9uCisJICAgaW50byBib3RoIHBhZHMgaW5zaWRlIE1ESEEKKwkgKi8KKwlhcHBlbmRfZmlmb19sb2FkX2FzX2ltbShkZXNjLCBOVUxMLCAwLCBMRFNUX0NMQVNTXzJfQ0NCIHwKKwkJCQlGSUZPTERfVFlQRV9NU0cgfCBGSUZPTERfVFlQRV9MQVNUMik7CisKKwkvKgorCSAqIEZJRk9fU1RPUkUgd2l0aCB0aGUgZXhwbGljaXQgc3BsaXQta2V5IGNvbnRlbnQgc3RvcmUKKwkgKiAoMHgyNiBvdXRwdXQgdHlwZSkKKwkgKi8KKwlkbWFfYWRkcl9vdXQgPSBkbWFfbWFwX3NpbmdsZShqcmRldiwgY3R4LT5rZXksIGN0eC0+c3BsaXRfa2V5X3BhZF9sZW4sCisJCQkJICAgICAgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoanJkZXYsIGRtYV9hZGRyX291dCkpIHsKKwkJZGV2X2VycihqcmRldiwgInVuYWJsZSB0byBtYXAga2V5IG91dHB1dCBtZW1vcnlcbiIpOworCQlrZnJlZShkZXNjKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWFwcGVuZF9maWZvX3N0b3JlKGRlc2MsIGRtYV9hZGRyX291dCwgY3R4LT5zcGxpdF9rZXlfbGVuLAorCQkJICBMRFNUX0NMQVNTXzJfQ0NCIHwgRklGT1NUX1RZUEVfU1BMSVRfS0VLKTsKKworI2lmZGVmIERFQlVHCisJcHJpbnRfaGV4X2R1bXAoS0VSTl9FUlIsICJjdHgua2V5QCJ4c3RyKF9fTElORV9fKSI6ICIsCisJCSAgICAgICBEVU1QX1BSRUZJWF9BRERSRVNTLCAxNiwgNCwga2V5X2luLCBhdXRoa2V5bGVuLCAxKTsKKwlwcmludF9oZXhfZHVtcChLRVJOX0VSUiwgImpvYmRlc2NAInhzdHIoX19MSU5FX18pIjogIiwKKwkJICAgICAgIERVTVBfUFJFRklYX0FERFJFU1MsIDE2LCA0LCBkZXNjLCBkZXNjX2J5dGVzKGRlc2MpLCAxKTsKKyNlbmRpZgorCisJcmVzdWx0LmVyciA9IDA7CisJaW5pdF9jb21wbGV0aW9uKCZyZXN1bHQuY29tcGxldGlvbik7CisKKwlyZXQgPSBjYWFtX2pyX2VucXVldWUoanJkZXYsIGRlc2MsIHNwbGl0X2tleV9kb25lLCAmcmVzdWx0KTsKKwlpZiAoIXJldCkgeworCQkvKiBpbiBwcm9ncmVzcyAqLworCQl3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJnJlc3VsdC5jb21wbGV0aW9uKTsKKwkJcmV0ID0gcmVzdWx0LmVycjsKKyNpZmRlZiBERUJVRworCQlwcmludF9oZXhfZHVtcChLRVJOX0VSUiwgImN0eC5rZXlAInhzdHIoX19MSU5FX18pIjogIiwKKwkJCSAgICAgICBEVU1QX1BSRUZJWF9BRERSRVNTLCAxNiwgNCwgY3R4LT5rZXksCisJCQkgICAgICAgY3R4LT5zcGxpdF9rZXlfcGFkX2xlbiwgMSk7CisjZW5kaWYKKwl9CisKKwlkbWFfdW5tYXBfc2luZ2xlKGpyZGV2LCBkbWFfYWRkcl9vdXQsIGN0eC0+c3BsaXRfa2V5X3BhZF9sZW4sCisJCQkgRE1BX0ZST01fREVWSUNFKTsKKwlkbWFfdW5tYXBfc2luZ2xlKGpyZGV2LCBkbWFfYWRkcl9pbiwgYXV0aGtleWxlbiwgRE1BX1RPX0RFVklDRSk7CisKKwlrZnJlZShkZXNjKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYnVpbGRfc2hfZGVzY19pcHNlYyhzdHJ1Y3QgY2FhbV9jdHggKmN0eCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpqcmRldiA9IGN0eC0+anJkZXY7CisJdTMyICpzaF9kZXNjOworCXUzMiAqanVtcF9jbWQ7CisJYm9vbCBrZXlzX2ZpdF9pbmxpbmUgPSAwOworCisJLyoKKwkgKiBsYXJnZXN0IEpvYiBEZXNjcmlwdG9yIGFuZCBpdHMgU2hhcmVkIERlc2NyaXB0b3IKKwkgKiBtdXN0IGJvdGggZml0IGludG8gdGhlIDY0LXdvcmQgRGVzY3JpcHRvciBoL3cgQnVmZmVyCisJICovCisJaWYgKChERVNDX0FFQURfR0lWRU5DUllQVF9URVhUX0xFTiArCisJICAgICBERVNDX0FFQURfU0hBUkVEX1RFWFRfTEVOKSAqIENBQU1fQ01EX1NaICsKKwkgICAgY3R4LT5zcGxpdF9rZXlfcGFkX2xlbiArIGN0eC0+ZW5ja2V5bGVuIDw9IENBQU1fREVTQ19CWVRFU19NQVgpCisJCWtleXNfZml0X2lubGluZSA9IDE7CisKKwkvKiBidWlsZCBzaGFyZWQgZGVzY3JpcHRvciBmb3IgdGhpcyBzZXNzaW9uICovCisJc2hfZGVzYyA9IGttYWxsb2MoQ0FBTV9DTURfU1ogKiBERVNDX0FFQURfU0hBUkVEX1RFWFRfTEVOICsKKwkJCSAga2V5c19maXRfaW5saW5lID8KKwkJCSAgY3R4LT5zcGxpdF9rZXlfcGFkX2xlbiArIGN0eC0+ZW5ja2V5bGVuIDoKKwkJCSAgQ0FBTV9QVFJfU1ogKiAyLCBHRlBfRE1BIHwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzaF9kZXNjKSB7CisJCWRldl9lcnIoanJkZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgc2hhcmVkIGRlc2NyaXB0b3JcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpbml0X3NoX2Rlc2Moc2hfZGVzYywgSERSX1NBVkVDVFggfCBIRFJfU0hBUkVfU0VSSUFMKTsKKworCWp1bXBfY21kID0gYXBwZW5kX2p1bXAoc2hfZGVzYywgQ0xBU1NfQk9USCB8IEpVTVBfVEVTVF9BTEwgfAorCQkJICAgICAgIEpVTVBfQ09ORF9TSFJEIHwgSlVNUF9DT05EX1NFTEYpOworCisJLyoKKwkgKiBwcm9jZXNzIGtleXMsIHN0YXJ0aW5nIHdpdGggY2xhc3MgMi9hdXRoZW50aWNhdGlvbi4KKwkgKi8KKwlpZiAoa2V5c19maXRfaW5saW5lKSB7CisJCWFwcGVuZF9rZXlfYXNfaW1tKHNoX2Rlc2MsIGN0eC0+a2V5LCBjdHgtPnNwbGl0X2tleV9wYWRfbGVuLAorCQkJCSAgY3R4LT5zcGxpdF9rZXlfbGVuLAorCQkJCSAgQ0xBU1NfMiB8IEtFWV9ERVNUX01ESEFfU1BMSVQgfCBLRVlfRU5DKTsKKworCQlhcHBlbmRfa2V5X2FzX2ltbShzaF9kZXNjLCAodm9pZCAqKWN0eC0+a2V5ICsKKwkJCQkgIGN0eC0+c3BsaXRfa2V5X3BhZF9sZW4sIGN0eC0+ZW5ja2V5bGVuLAorCQkJCSAgY3R4LT5lbmNrZXlsZW4sIENMQVNTXzEgfCBLRVlfREVTVF9DTEFTU19SRUcpOworCX0gZWxzZSB7CisJCWFwcGVuZF9rZXkoc2hfZGVzYywgY3R4LT5rZXlfcGh5cywgY3R4LT5zcGxpdF9rZXlfbGVuLCBDTEFTU18yIHwKKwkJCSAgIEtFWV9ERVNUX01ESEFfU1BMSVQgfCBLRVlfRU5DKTsKKwkJYXBwZW5kX2tleShzaF9kZXNjLCBjdHgtPmtleV9waHlzICsgY3R4LT5zcGxpdF9rZXlfcGFkX2xlbiwKKwkJCSAgIGN0eC0+ZW5ja2V5bGVuLCBDTEFTU18xIHwgS0VZX0RFU1RfQ0xBU1NfUkVHKTsKKwl9CisKKwkvKiB1cGRhdGUganVtcCBjbWQgbm93IHRoYXQgd2UgYXJlIGF0IHRoZSBqdW1wIHRhcmdldCAqLworCXNldF9qdW1wX3RndF9oZXJlKHNoX2Rlc2MsIGp1bXBfY21kKTsKKworCWN0eC0+c2hhcmVkX2Rlc2NfcGh5cyA9IGRtYV9tYXBfc2luZ2xlKGpyZGV2LCBzaF9kZXNjLAorCQkJCQkgICAgICAgZGVzY19ieXRlcyhzaF9kZXNjKSwKKwkJCQkJICAgICAgIERNQV9UT19ERVZJQ0UpOworCWlmIChkbWFfbWFwcGluZ19lcnJvcihqcmRldiwgY3R4LT5zaGFyZWRfZGVzY19waHlzKSkgeworCQlkZXZfZXJyKGpyZGV2LCAidW5hYmxlIHRvIG1hcCBzaGFyZWQgZGVzY3JpcHRvclxuIik7CisJCWtmcmVlKHNoX2Rlc2MpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljdHgtPnNoX2Rlc2MgPSBzaF9kZXNjOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWVhZF9hdXRoZW5jX3NldGtleShzdHJ1Y3QgY3J5cHRvX2FlYWQgKmFlYWQsCisJCQkgICAgICAgY29uc3QgdTggKmtleSwgdW5zaWduZWQgaW50IGtleWxlbikKK3sKKwkvKiBTaXplcyBmb3IgTURIQSBwYWRzICgqbm90KiBrZXlzKTogTUQ1LCBTSEExLCAyMjQsIDI1NiwgMzg0LCA1MTIgKi8KKwlzdGF0aWMgY29uc3QgdTggbWRwYWRsZW5bXSA9IHsgMTYsIDIwLCAzMiwgMzIsIDY0LCA2NCB9OworCXN0cnVjdCBjYWFtX2N0eCAqY3R4ID0gY3J5cHRvX2FlYWRfY3R4KGFlYWQpOworCXN0cnVjdCBkZXZpY2UgKmpyZGV2ID0gY3R4LT5qcmRldjsKKwlzdHJ1Y3QgcnRhdHRyICpydGEgPSAodm9pZCAqKWtleTsKKwlzdHJ1Y3QgY3J5cHRvX2F1dGhlbmNfa2V5X3BhcmFtICpwYXJhbTsKKwl1bnNpZ25lZCBpbnQgYXV0aGtleWxlbjsKKwl1bnNpZ25lZCBpbnQgZW5ja2V5bGVuOworCWludCByZXQgPSAwOworCisJcGFyYW0gPSBSVEFfREFUQShydGEpOworCWVuY2tleWxlbiA9IGJlMzJfdG9fY3B1KHBhcmFtLT5lbmNrZXlsZW4pOworCisJa2V5ICs9IFJUQV9BTElHTihydGEtPnJ0YV9sZW4pOworCWtleWxlbiAtPSBSVEFfQUxJR04ocnRhLT5ydGFfbGVuKTsKKworCWlmIChrZXlsZW4gPCBlbmNrZXlsZW4pCisJCWdvdG8gYmFka2V5OworCisJYXV0aGtleWxlbiA9IGtleWxlbiAtIGVuY2tleWxlbjsKKworCWlmIChrZXlsZW4gPiBDQUFNX01BWF9LRVlfU0laRSkKKwkJZ290byBiYWRrZXk7CisKKwkvKiBQaWNrIGNsYXNzIDIga2V5IGxlbmd0aCBmcm9tIGFsZ29yaXRobSBzdWJtYXNrICovCisJY3R4LT5zcGxpdF9rZXlfbGVuID0gbWRwYWRsZW5bKGN0eC0+YWxnX29wICYgT1BfQUxHX0FMR1NFTF9TVUJNQVNLKSA+PgorCQkJCSAgICAgIE9QX0FMR19BTEdTRUxfU0hJRlRdICogMjsKKwljdHgtPnNwbGl0X2tleV9wYWRfbGVuID0gQUxJR04oY3R4LT5zcGxpdF9rZXlfbGVuLCAxNik7CisKKyNpZmRlZiBERUJVRworCXByaW50ayhLRVJOX0VSUiAia2V5bGVuICVkIGVuY2tleWxlbiAlZCBhdXRoa2V5bGVuICVkXG4iLAorCSAgICAgICBrZXlsZW4sIGVuY2tleWxlbiwgYXV0aGtleWxlbik7CisJcHJpbnRrKEtFUk5fRVJSICJzcGxpdF9rZXlfbGVuICVkIHNwbGl0X2tleV9wYWRfbGVuICVkXG4iLAorCSAgICAgICBjdHgtPnNwbGl0X2tleV9sZW4sIGN0eC0+c3BsaXRfa2V5X3BhZF9sZW4pOworCXByaW50X2hleF9kdW1wKEtFUk5fRVJSLCAia2V5IGluIEAieHN0cihfX0xJTkVfXykiOiAiLAorCQkgICAgICAgRFVNUF9QUkVGSVhfQUREUkVTUywgMTYsIDQsIGtleSwga2V5bGVuLCAxKTsKKyNlbmRpZgorCWN0eC0+a2V5ID0ga21hbGxvYyhjdHgtPnNwbGl0X2tleV9wYWRfbGVuICsgZW5ja2V5bGVuLAorCQkJICAgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOworCWlmICghY3R4LT5rZXkpIHsKKwkJZGV2X2VycihqcmRldiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBrZXkgb3V0cHV0IG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldCA9IGdlbl9zcGxpdF9rZXkoY3R4LCBrZXksIGF1dGhrZXlsZW4pOworCWlmIChyZXQpIHsKKwkJa2ZyZWUoY3R4LT5rZXkpOworCQlnb3RvIGJhZGtleTsKKwl9CisKKwkvKiBwb3N0cGVuZCBlbmNyeXB0aW9uIGtleSB0byBhdXRoIHNwbGl0IGtleSAqLworCW1lbWNweShjdHgtPmtleSArIGN0eC0+c3BsaXRfa2V5X3BhZF9sZW4sIGtleSArIGF1dGhrZXlsZW4sIGVuY2tleWxlbik7CisKKwljdHgtPmtleV9waHlzID0gZG1hX21hcF9zaW5nbGUoanJkZXYsIGN0eC0+a2V5LCBjdHgtPnNwbGl0X2tleV9wYWRfbGVuICsKKwkJCQkgICAgICAgZW5ja2V5bGVuLCBETUFfVE9fREVWSUNFKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoanJkZXYsIGN0eC0+a2V5X3BoeXMpKSB7CisJCWRldl9lcnIoanJkZXYsICJ1bmFibGUgdG8gbWFwIGtleSBpL28gbWVtb3J5XG4iKTsKKwkJa2ZyZWUoY3R4LT5rZXkpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisjaWZkZWYgREVCVUcKKwlwcmludF9oZXhfZHVtcChLRVJOX0VSUiwgImN0eC5rZXlAInhzdHIoX19MSU5FX18pIjogIiwKKwkJICAgICAgIERVTVBfUFJFRklYX0FERFJFU1MsIDE2LCA0LCBjdHgtPmtleSwKKwkJICAgICAgIGN0eC0+c3BsaXRfa2V5X3BhZF9sZW4gKyBlbmNrZXlsZW4sIDEpOworI2VuZGlmCisKKwljdHgtPmVuY2tleWxlbiA9IGVuY2tleWxlbjsKKworCXJldCA9IGJ1aWxkX3NoX2Rlc2NfaXBzZWMoY3R4KTsKKwlpZiAocmV0KSB7CisJCWRtYV91bm1hcF9zaW5nbGUoanJkZXYsIGN0eC0+a2V5X3BoeXMsIGN0eC0+c3BsaXRfa2V5X3BhZF9sZW4gKworCQkJCSBlbmNrZXlsZW4sIERNQV9UT19ERVZJQ0UpOworCQlrZnJlZShjdHgtPmtleSk7CisJfQorCisJcmV0dXJuIHJldDsKK2JhZGtleToKKwljcnlwdG9fYWVhZF9zZXRfZmxhZ3MoYWVhZCwgQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU4pOworCXJldHVybiAtRUlOVkFMOworfQorCitzdHJ1Y3QgbGlua190YmxfZW50cnkgeworCXU2NCBwdHI7CisJdTMyIGxlbjsKKwl1OCByZXNlcnZlZDsKKwl1OCBidWZfcG9vbF9pZDsKKwl1MTYgb2Zmc2V0OworfTsKKworLyoKKyAqIGlwc2VjX2VzcF9lZGVzYyAtIHMvdy1leHRlbmRlZCBpcHNlY19lc3AgZGVzY3JpcHRvcgorICogQHNyY19uZW50czogbnVtYmVyIG9mIHNlZ21lbnRzIGluIGlucHV0IHNjYXR0ZXJsaXN0CisgKiBAZHN0X25lbnRzOiBudW1iZXIgb2Ygc2VnbWVudHMgaW4gb3V0cHV0IHNjYXR0ZXJsaXN0CisgKiBAYXNzb2NfbmVudHM6IG51bWJlciBvZiBzZWdtZW50cyBpbiBhc3NvY2lhdGVkIGRhdGEgKFNQSStTZXEpIHNjYXR0ZXJsaXN0CisgKiBAZGVzYzogaC93IGRlc2NyaXB0b3IgKHZhcmlhYmxlIGxlbmd0aDsgbXVzdCBub3QgZXhjZWVkIE1BWF9DQUFNX0RFU0NTSVpFKQorICogQGxpbmtfdGJsX2J5dGVzOiBsZW5ndGggb2YgZG1hIG1hcHBlZCBsaW5rX3RibCBzcGFjZQorICogQGxpbmtfdGJsX2RtYTogYnVzIHBoeXNpY2FsIG1hcHBlZCBhZGRyZXNzIG9mIGgvdyBsaW5rIHRhYmxlCisgKiBAaHdfZGVzYzogdGhlIGgvdyBqb2IgZGVzY3JpcHRvciBmb2xsb3dlZCBieSBhbnkgcmVmZXJlbmNlZCBsaW5rIHRhYmxlcworICovCitzdHJ1Y3QgaXBzZWNfZXNwX2VkZXNjIHsKKwlpbnQgYXNzb2NfbmVudHM7CisJaW50IHNyY19uZW50czsKKwlpbnQgZHN0X25lbnRzOworCWludCBsaW5rX3RibF9ieXRlczsKKwlkbWFfYWRkcl90IGxpbmtfdGJsX2RtYTsKKwlzdHJ1Y3QgbGlua190YmxfZW50cnkgKmxpbmtfdGJsOworCXUzMiBod19kZXNjWzBdOworfTsKKworc3RhdGljIHZvaWQgaXBzZWNfZXNwX3VubWFwKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgaXBzZWNfZXNwX2VkZXNjICplZGVzYywKKwkJCSAgICBzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICphcmVxKQoreworCWRtYV91bm1hcF9zZyhkZXYsIGFyZXEtPmFzc29jLCBlZGVzYy0+YXNzb2NfbmVudHMsIERNQV9UT19ERVZJQ0UpOworCisJaWYgKHVubGlrZWx5KGFyZXEtPmRzdCAhPSBhcmVxLT5zcmMpKSB7CisJCWRtYV91bm1hcF9zZyhkZXYsIGFyZXEtPnNyYywgZWRlc2MtPnNyY19uZW50cywKKwkJCSAgICAgRE1BX1RPX0RFVklDRSk7CisJCWRtYV91bm1hcF9zZyhkZXYsIGFyZXEtPmRzdCwgZWRlc2MtPmRzdF9uZW50cywKKwkJCSAgICAgRE1BX0ZST01fREVWSUNFKTsKKwl9IGVsc2UgeworCQlkbWFfdW5tYXBfc2coZGV2LCBhcmVxLT5zcmMsIGVkZXNjLT5zcmNfbmVudHMsCisJCQkgICAgIERNQV9CSURJUkVDVElPTkFMKTsKKwl9CisKKwlpZiAoZWRlc2MtPmxpbmtfdGJsX2J5dGVzKQorCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgZWRlc2MtPmxpbmtfdGJsX2RtYSwKKwkJCQkgZWRlc2MtPmxpbmtfdGJsX2J5dGVzLAorCQkJCSBETUFfVE9fREVWSUNFKTsKK30KKworLyoKKyAqIGlwc2VjX2VzcCBkZXNjcmlwdG9yIGNhbGxiYWNrcworICovCitzdGF0aWMgdm9pZCBpcHNlY19lc3BfZW5jcnlwdF9kb25lKHN0cnVjdCBkZXZpY2UgKmpyZGV2LCB1MzIgKmRlc2MsIHUzMiBlcnIsCisJCQkJICAgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICphcmVxID0gY29udGV4dDsKKwlzdHJ1Y3QgaXBzZWNfZXNwX2VkZXNjICplZGVzYzsKKyNpZmRlZiBERUJVRworCXN0cnVjdCBjcnlwdG9fYWVhZCAqYWVhZCA9IGNyeXB0b19hZWFkX3JlcXRmbShhcmVxKTsKKwlpbnQgaXZzaXplID0gY3J5cHRvX2FlYWRfaXZzaXplKGFlYWQpOworCXN0cnVjdCBjYWFtX2N0eCAqY3R4ID0gY3J5cHRvX2FlYWRfY3R4KGFlYWQpOworCisJZGV2X2VycihqcmRldiwgIiVzICVkOiBlcnIgMHgleFxuIiwgX19mdW5jX18sIF9fTElORV9fLCBlcnIpOworI2VuZGlmCisJZWRlc2MgPSAoc3RydWN0IGlwc2VjX2VzcF9lZGVzYyAqKSgoY2hhciAqKWRlc2MgLQorCQkgb2Zmc2V0b2Yoc3RydWN0IGlwc2VjX2VzcF9lZGVzYywgaHdfZGVzYykpOworCisJaWYgKGVycikgeworCQljaGFyIHRtcFtDQUFNX0VSUk9SX1NUUl9NQVhdOworCisJCWRldl9lcnIoanJkZXYsICIlMDh4OiAlc1xuIiwgZXJyLCBjYWFtX2pyX3N0cnN0YXR1cyh0bXAsIGVycikpOworCX0KKworCWlwc2VjX2VzcF91bm1hcChqcmRldiwgZWRlc2MsIGFyZXEpOworCisjaWZkZWYgREVCVUcKKwlwcmludF9oZXhfZHVtcChLRVJOX0VSUiwgImFzc29jICBAInhzdHIoX19MSU5FX18pIjogIiwKKwkJICAgICAgIERVTVBfUFJFRklYX0FERFJFU1MsIDE2LCA0LCBzZ192aXJ0KGFyZXEtPmFzc29jKSwKKwkJICAgICAgIGFyZXEtPmFzc29jbGVuICwgMSk7CisJcHJpbnRfaGV4X2R1bXAoS0VSTl9FUlIsICJkc3RpdiAgQCJ4c3RyKF9fTElORV9fKSI6ICIsCisJCSAgICAgICBEVU1QX1BSRUZJWF9BRERSRVNTLCAxNiwgNCwgc2dfdmlydChhcmVxLT5zcmMpIC0gaXZzaXplLAorCQkgICAgICAgZWRlc2MtPnNyY19uZW50cyA/IDEwMCA6IGl2c2l6ZSwgMSk7CisJcHJpbnRfaGV4X2R1bXAoS0VSTl9FUlIsICJkc3QgICAgQCJ4c3RyKF9fTElORV9fKSI6ICIsCisJCSAgICAgICBEVU1QX1BSRUZJWF9BRERSRVNTLCAxNiwgNCwgc2dfdmlydChhcmVxLT5zcmMpLAorCQkgICAgICAgZWRlc2MtPnNyY19uZW50cyA/IDEwMCA6IGFyZXEtPmNyeXB0bGVuICsKKwkJICAgICAgIGN0eC0+YXV0aHNpemUgKyA0LCAxKTsKKyNlbmRpZgorCisJa2ZyZWUoZWRlc2MpOworCisJYWVhZF9yZXF1ZXN0X2NvbXBsZXRlKGFyZXEsIGVycik7Cit9CisKK3N0YXRpYyB2b2lkIGlwc2VjX2VzcF9kZWNyeXB0X2RvbmUoc3RydWN0IGRldmljZSAqanJkZXYsIHUzMiAqZGVzYywgdTMyIGVyciwKKwkJCQkgICB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBhZWFkX3JlcXVlc3QgKmFyZXEgPSBjb250ZXh0OworCXN0cnVjdCBpcHNlY19lc3BfZWRlc2MgKmVkZXNjOworI2lmZGVmIERFQlVHCisJc3RydWN0IGNyeXB0b19hZWFkICphZWFkID0gY3J5cHRvX2FlYWRfcmVxdGZtKGFyZXEpOworCXN0cnVjdCBjYWFtX2N0eCAqY3R4ID0gY3J5cHRvX2FlYWRfY3R4KGFlYWQpOworCisJZGV2X2VycihqcmRldiwgIiVzICVkOiBlcnIgMHgleFxuIiwgX19mdW5jX18sIF9fTElORV9fLCBlcnIpOworI2VuZGlmCisJZWRlc2MgPSAoc3RydWN0IGlwc2VjX2VzcF9lZGVzYyAqKSgoY2hhciAqKWRlc2MgLQorCQkgb2Zmc2V0b2Yoc3RydWN0IGlwc2VjX2VzcF9lZGVzYywgaHdfZGVzYykpOworCisJaWYgKGVycikgeworCQljaGFyIHRtcFtDQUFNX0VSUk9SX1NUUl9NQVhdOworCisJCWRldl9lcnIoanJkZXYsICIlMDh4OiAlc1xuIiwgZXJyLCBjYWFtX2pyX3N0cnN0YXR1cyh0bXAsIGVycikpOworCX0KKworCWlwc2VjX2VzcF91bm1hcChqcmRldiwgZWRlc2MsIGFyZXEpOworCisJLyoKKwkgKiB2ZXJpZnkgaHcgYXV0aCBjaGVjayBwYXNzZWQgZWxzZSByZXR1cm4gLUVCQURNU0cKKwkgKi8KKwlpZiAoKGVyciAmIEpSU1RBX0NDQkVSUl9FUlJJRF9NQVNLKSA9PSBKUlNUQV9DQ0JFUlJfRVJSSURfSUNWQ0hLKQorCQllcnIgPSAtRUJBRE1TRzsKKworI2lmZGVmIERFQlVHCisJcHJpbnRfaGV4X2R1bXAoS0VSTl9FUlIsICJpcGhkcm91dEAieHN0cihfX0xJTkVfXykiOiAiLAorCQkgICAgICAgRFVNUF9QUkVGSVhfQUREUkVTUywgMTYsIDQsCisJCSAgICAgICAoKGNoYXIgKilzZ192aXJ0KGFyZXEtPmFzc29jKSAtIHNpemVvZihzdHJ1Y3QgaXBoZHIpKSwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXBoZHIpICsgYXJlcS0+YXNzb2NsZW4gKworCQkgICAgICAgKChhcmVxLT5jcnlwdGxlbiA+IDE1MDApID8gMTUwMCA6IGFyZXEtPmNyeXB0bGVuKSArCisJCSAgICAgICBjdHgtPmF1dGhzaXplICsgMzYsIDEpOworCWlmICghZXJyICYmIGVkZXNjLT5saW5rX3RibF9ieXRlcykgeworCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gc2dfbGFzdChhcmVxLT5zcmMsIGVkZXNjLT5zcmNfbmVudHMpOworCQlwcmludF9oZXhfZHVtcChLRVJOX0VSUiwgInNnbGFzdG91dEAieHN0cihfX0xJTkVfXykiOiAiLAorCQkJICAgICAgIERVTVBfUFJFRklYX0FERFJFU1MsIDE2LCA0LCBzZ192aXJ0KHNnKSwKKwkJCXNnLT5sZW5ndGggKyBjdHgtPmF1dGhzaXplICsgMTYsIDEpOworCX0KKyNlbmRpZgorCWtmcmVlKGVkZXNjKTsKKworCWFlYWRfcmVxdWVzdF9jb21wbGV0ZShhcmVxLCBlcnIpOworfQorCisvKgorICogY29udmVydCBzY2F0dGVybGlzdCB0byBoL3cgbGluayB0YWJsZSBmb3JtYXQKKyAqIHNjYXR0ZXJsaXN0IG11c3QgaGF2ZSBiZWVuIHByZXZpb3VzbHkgZG1hIG1hcHBlZAorICovCitzdGF0aWMgdm9pZCBzZ190b19saW5rX3RibChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgc2dfY291bnQsCisJCQkgICBzdHJ1Y3QgbGlua190YmxfZW50cnkgKmxpbmtfdGJsX3B0ciwgdTMyIG9mZnNldCkKK3sKKwl3aGlsZSAoc2dfY291bnQpIHsKKwkJbGlua190YmxfcHRyLT5wdHIgPSBzZ19kbWFfYWRkcmVzcyhzZyk7CisJCWxpbmtfdGJsX3B0ci0+bGVuID0gc2dfZG1hX2xlbihzZyk7CisJCWxpbmtfdGJsX3B0ci0+cmVzZXJ2ZWQgPSAwOworCQlsaW5rX3RibF9wdHItPmJ1Zl9wb29sX2lkID0gMDsKKwkJbGlua190YmxfcHRyLT5vZmZzZXQgPSBvZmZzZXQ7CisJCWxpbmtfdGJsX3B0cisrOworCQlzZyA9IHNnX25leHQoc2cpOworCQlzZ19jb3VudC0tOworCX0KKworCS8qIHNldCBGaW5hbCBiaXQgKG1hcmtzIGVuZCBvZiBsaW5rIHRhYmxlKSAqLworCWxpbmtfdGJsX3B0ci0tOworCWxpbmtfdGJsX3B0ci0+bGVuIHw9IDB4NDAwMDAwMDA7Cit9CisKKy8qCisgKiBmaWxsIGluIGFuZCBzdWJtaXQgaXBzZWNfZXNwIGpvYiBkZXNjcmlwdG9yCisgKi8KK3N0YXRpYyBpbnQgaXBzZWNfZXNwKHN0cnVjdCBpcHNlY19lc3BfZWRlc2MgKmVkZXNjLCBzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICphcmVxLAorCQkgICAgIHUzMiBlbmNyeXB0LAorCQkgICAgIHZvaWQgKCpjYWxsYmFjaykgKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyICpkZXNjLAorCQkJCSAgICAgICB1MzIgZXJyLCB2b2lkICpjb250ZXh0KSkKK3sKKwlzdHJ1Y3QgY3J5cHRvX2FlYWQgKmFlYWQgPSBjcnlwdG9fYWVhZF9yZXF0Zm0oYXJlcSk7CisJc3RydWN0IGNhYW1fY3R4ICpjdHggPSBjcnlwdG9fYWVhZF9jdHgoYWVhZCk7CisJc3RydWN0IGRldmljZSAqanJkZXYgPSBjdHgtPmpyZGV2OworCXUzMiAqZGVzYyA9IGVkZXNjLT5od19kZXNjLCBvcHRpb25zOworCWludCByZXQsIHNnX2NvdW50LCBhc3NvY19zZ19jb3VudDsKKwlpbnQgaXZzaXplID0gY3J5cHRvX2FlYWRfaXZzaXplKGFlYWQpOworCWludCBhdXRoc2l6ZSA9IGN0eC0+YXV0aHNpemU7CisJZG1hX2FkZHJfdCBwdHIsIGRzdF9kbWEsIHNyY19kbWE7CisjaWZkZWYgREVCVUcKKwl1MzIgKnNoX2Rlc2MgPSBjdHgtPnNoX2Rlc2M7CisKKwlkZWJ1ZygiYXNzb2NsZW4gJWQgY3J5cHRsZW4gJWQgYXV0aHNpemUgJWRcbiIsCisJICAgICAgYXJlcS0+YXNzb2NsZW4sIGFyZXEtPmNyeXB0bGVuLCBhdXRoc2l6ZSk7CisJcHJpbnRfaGV4X2R1bXAoS0VSTl9FUlIsICJhc3NvYyAgQCJ4c3RyKF9fTElORV9fKSI6ICIsCisJCSAgICAgICBEVU1QX1BSRUZJWF9BRERSRVNTLCAxNiwgNCwgc2dfdmlydChhcmVxLT5hc3NvYyksCisJCSAgICAgICBhcmVxLT5hc3NvY2xlbiAsIDEpOworCXByaW50X2hleF9kdW1wKEtFUk5fRVJSLCAicHJlc2NpdkAieHN0cihfX0xJTkVfXykiOiAiLAorCQkgICAgICAgRFVNUF9QUkVGSVhfQUREUkVTUywgMTYsIDQsIHNnX3ZpcnQoYXJlcS0+c3JjKSAtIGl2c2l6ZSwKKwkJICAgICAgIGVkZXNjLT5zcmNfbmVudHMgPyAxMDAgOiBpdnNpemUsIDEpOworCXByaW50X2hleF9kdW1wKEtFUk5fRVJSLCAic3JjICAgIEAieHN0cihfX0xJTkVfXykiOiAiLAorCQkgICAgICAgRFVNUF9QUkVGSVhfQUREUkVTUywgMTYsIDQsIHNnX3ZpcnQoYXJlcS0+c3JjKSwKKwkJCWVkZXNjLT5zcmNfbmVudHMgPyAxMDAgOiBhcmVxLT5jcnlwdGxlbiArIGF1dGhzaXplLCAxKTsKKwlwcmludF9oZXhfZHVtcChLRVJOX0VSUiwgInNocmRlc2NAInhzdHIoX19MSU5FX18pIjogIiwKKwkJICAgICAgIERVTVBfUFJFRklYX0FERFJFU1MsIDE2LCA0LCBzaF9kZXNjLAorCQkgICAgICAgZGVzY19ieXRlcyhzaF9kZXNjKSwgMSk7CisjZW5kaWYKKwlhc3NvY19zZ19jb3VudCA9IGRtYV9tYXBfc2coanJkZXYsIGFyZXEtPmFzc29jLCBlZGVzYy0+YXNzb2NfbmVudHMgPzogMSwKKwkJCQkgICAgRE1BX1RPX0RFVklDRSk7CisJaWYgKGFyZXEtPnNyYyA9PSBhcmVxLT5kc3QpCisJCXNnX2NvdW50ID0gZG1hX21hcF9zZyhqcmRldiwgYXJlcS0+c3JjLCBlZGVzYy0+c3JjX25lbnRzID8gOiAxLAorCQkJCSAgICAgIERNQV9CSURJUkVDVElPTkFMKTsKKwllbHNlCisJCXNnX2NvdW50ID0gZG1hX21hcF9zZyhqcmRldiwgYXJlcS0+c3JjLCBlZGVzYy0+c3JjX25lbnRzID8gOiAxLAorCQkJCSAgICAgIERNQV9UT19ERVZJQ0UpOworCisJLyogc3RhcnQgYXV0aCBvcGVyYXRpb24gKi8KKwlhcHBlbmRfb3BlcmF0aW9uKGRlc2MsIGN0eC0+Y2xhc3MyX2FsZ190eXBlIHwgT1BfQUxHX0FTX0lOSVRGSU5BTCB8CisJCQkgKGVuY3J5cHQgPyA6IE9QX0FMR19JQ1ZfT04pKTsKKworCS8qIExvYWQgRklGTyB3aXRoIGRhdGEgZm9yIENsYXNzIDIgQ0hBICovCisJb3B0aW9ucyA9IEZJRk9MRF9DTEFTU19DTEFTUzIgfCBGSUZPTERfVFlQRV9NU0c7CisJaWYgKCFlZGVzYy0+YXNzb2NfbmVudHMpIHsKKwkJcHRyID0gc2dfZG1hX2FkZHJlc3MoYXJlcS0+YXNzb2MpOworCX0gZWxzZSB7CisJCXNnX3RvX2xpbmtfdGJsKGFyZXEtPmFzc29jLCBlZGVzYy0+YXNzb2NfbmVudHMsCisJCQkgICAgICAgZWRlc2MtPmxpbmtfdGJsLCAwKTsKKwkJcHRyID0gZWRlc2MtPmxpbmtfdGJsX2RtYTsKKwkJb3B0aW9ucyB8PSBMRFNUX1NHRjsKKwl9CisJYXBwZW5kX2ZpZm9fbG9hZChkZXNjLCBwdHIsIGFyZXEtPmFzc29jbGVuLCBvcHRpb25zKTsKKworCS8qIGNvcHkgaXYgZnJvbSBjaXBoZXIvY2xhc3MxIGlucHV0IGNvbnRleHQgdG8gY2xhc3MyIGluZmlmbyAqLworCWFwcGVuZF9tb3ZlKGRlc2MsIE1PVkVfU1JDX0NMQVNTMUNUWCB8IE1PVkVfREVTVF9DTEFTUzJJTkZJRk8gfCBpdnNpemUpOworCisJaWYgKCFlbmNyeXB0KSB7CisJCXUzMiAqanVtcF9jbWQsICp1bmNvbmRfanVtcF9jbWQ7CisKKwkJLyogSlVNUCBpZiBzaGFyZWQgKi8KKwkJanVtcF9jbWQgPSBhcHBlbmRfanVtcChkZXNjLCBKVU1QX1RFU1RfQUxMIHwgSlVNUF9DT05EX1NIUkQpOworCisJCS8qIHN0YXJ0IGNsYXNzIDEgKGNpcGhlcikgb3BlcmF0aW9uLCBub24tc2hhcmVkIHZlcnNpb24gKi8KKwkJYXBwZW5kX29wZXJhdGlvbihkZXNjLCBjdHgtPmNsYXNzMV9hbGdfdHlwZSB8CisJCQkJIE9QX0FMR19BU19JTklURklOQUwpOworCisJCXVuY29uZF9qdW1wX2NtZCA9IGFwcGVuZF9qdW1wKGRlc2MsIDApOworCisJCXNldF9qdW1wX3RndF9oZXJlKGRlc2MsIGp1bXBfY21kKTsKKworCQkvKiBzdGFydCBjbGFzcyAxIChjaXBoZXIpIG9wZXJhdGlvbiwgc2hhcmVkIHZlcnNpb24gKi8KKwkJYXBwZW5kX29wZXJhdGlvbihkZXNjLCBjdHgtPmNsYXNzMV9hbGdfdHlwZSB8CisJCQkJIE9QX0FMR19BU19JTklURklOQUwgfCBPUF9BTEdfQUFJX0RLKTsKKwkJc2V0X2p1bXBfdGd0X2hlcmUoZGVzYywgdW5jb25kX2p1bXBfY21kKTsKKwl9IGVsc2UKKwkJYXBwZW5kX29wZXJhdGlvbihkZXNjLCBjdHgtPmNsYXNzMV9hbGdfdHlwZSB8CisJCQkJIE9QX0FMR19BU19JTklURklOQUwgfCBlbmNyeXB0KTsKKworCS8qIGxvYWQgcGF5bG9hZCAmIGluc3RydWN0IHRvIGNsYXNzMiB0byBzbm9vcCBjbGFzcyAxIGlmIGVuY3J5cHRpbmcgKi8KKwlvcHRpb25zID0gMDsKKwlpZiAoIWVkZXNjLT5zcmNfbmVudHMpIHsKKwkJc3JjX2RtYSA9IHNnX2RtYV9hZGRyZXNzKGFyZXEtPnNyYyk7CisJfSBlbHNlIHsKKwkJc2dfdG9fbGlua190YmwoYXJlcS0+c3JjLCBlZGVzYy0+c3JjX25lbnRzLCBlZGVzYy0+bGlua190YmwgKworCQkJICAgICAgIGVkZXNjLT5hc3NvY19uZW50cywgMCk7CisJCXNyY19kbWEgPSBlZGVzYy0+bGlua190YmxfZG1hICsgZWRlc2MtPmFzc29jX25lbnRzICoKKwkJCSAgc2l6ZW9mKHN0cnVjdCBsaW5rX3RibF9lbnRyeSk7CisJCW9wdGlvbnMgfD0gTERTVF9TR0Y7CisJfQorCWFwcGVuZF9zZXFfaW5fcHRyKGRlc2MsIHNyY19kbWEsIGFyZXEtPmNyeXB0bGVuICsgYXV0aHNpemUsIG9wdGlvbnMpOworCWFwcGVuZF9zZXFfZmlmb19sb2FkKGRlc2MsIGFyZXEtPmNyeXB0bGVuLCBGSUZPTERfQ0xBU1NfQk9USCB8CisJCQkgICAgIEZJRk9MRF9UWVBFX0xBU1RCT1RIIHwKKwkJCSAgICAgKGVuY3J5cHQgPyBGSUZPTERfVFlQRV9NU0cxT1VUMgorCQkJCSAgICAgIDogRklGT0xEX1RZUEVfTVNHKSk7CisKKwkvKiBzcGVjaWZ5IGRlc3RpbmF0aW9uICovCisJaWYgKGFyZXEtPnNyYyA9PSBhcmVxLT5kc3QpIHsKKwkJZHN0X2RtYSA9IHNyY19kbWE7CisJfSBlbHNlIHsKKwkJc2dfY291bnQgPSBkbWFfbWFwX3NnKGpyZGV2LCBhcmVxLT5kc3QsIGVkZXNjLT5kc3RfbmVudHMgPyA6IDEsCisJCQkJICAgICAgRE1BX0ZST01fREVWSUNFKTsKKwkJaWYgKCFlZGVzYy0+ZHN0X25lbnRzKSB7CisJCQlkc3RfZG1hID0gc2dfZG1hX2FkZHJlc3MoYXJlcS0+ZHN0KTsKKwkJCW9wdGlvbnMgPSAwOworCQl9IGVsc2UgeworCQkJc2dfdG9fbGlua190YmwoYXJlcS0+ZHN0LCBlZGVzYy0+ZHN0X25lbnRzLAorCQkJCSAgICAgICBlZGVzYy0+bGlua190YmwgKyBlZGVzYy0+YXNzb2NfbmVudHMgKworCQkJCSAgICAgICBlZGVzYy0+c3JjX25lbnRzLCAwKTsKKwkJCWRzdF9kbWEgPSBlZGVzYy0+bGlua190YmxfZG1hICsgKGVkZXNjLT5hc3NvY19uZW50cyArCisJCQkJICBlZGVzYy0+c3JjX25lbnRzKSAqCisJCQkJICBzaXplb2Yoc3RydWN0IGxpbmtfdGJsX2VudHJ5KTsKKwkJCW9wdGlvbnMgPSBMRFNUX1NHRjsKKwkJfQorCX0KKwlhcHBlbmRfc2VxX291dF9wdHIoZGVzYywgZHN0X2RtYSwgYXJlcS0+Y3J5cHRsZW4gKyBhdXRoc2l6ZSwgb3B0aW9ucyk7CisJYXBwZW5kX3NlcV9maWZvX3N0b3JlKGRlc2MsIGFyZXEtPmNyeXB0bGVuLCBGSUZPU1RfVFlQRV9NRVNTQUdFX0RBVEEpOworCisJLyogSUNWICovCisJaWYgKGVuY3J5cHQpCisJCWFwcGVuZF9zZXFfc3RvcmUoZGVzYywgYXV0aHNpemUsIExEU1RfQ0xBU1NfMl9DQ0IgfAorCQkJCSBMRFNUX1NSQ0RTVF9CWVRFX0NPTlRFWFQpOworCWVsc2UKKwkJYXBwZW5kX3NlcV9maWZvX2xvYWQoZGVzYywgYXV0aHNpemUsIEZJRk9MRF9DTEFTU19DTEFTUzIgfAorCQkJCSAgICAgRklGT0xEX1RZUEVfTEFTVDIgfCBGSUZPTERfVFlQRV9JQ1YpOworCisjaWZkZWYgREVCVUcKKwlkZWJ1Zygiam9iX2Rlc2NfbGVuICVkXG4iLCBkZXNjX2xlbihkZXNjKSk7CisJcHJpbnRfaGV4X2R1bXAoS0VSTl9FUlIsICJqb2JkZXNjQCJ4c3RyKF9fTElORV9fKSI6ICIsCisJCSAgICAgICBEVU1QX1BSRUZJWF9BRERSRVNTLCAxNiwgNCwgZGVzYywgZGVzY19ieXRlcyhkZXNjKSAsIDEpOworCXByaW50X2hleF9kdW1wKEtFUk5fRVJSLCAiamRsaW5rdEAieHN0cihfX0xJTkVfXykiOiAiLAorCQkgICAgICAgRFVNUF9QUkVGSVhfQUREUkVTUywgMTYsIDQsIGVkZXNjLT5saW5rX3RibCwKKwkJCWVkZXNjLT5saW5rX3RibF9ieXRlcywgMSk7CisjZW5kaWYKKworCXJldCA9IGNhYW1fanJfZW5xdWV1ZShqcmRldiwgZGVzYywgY2FsbGJhY2ssIGFyZXEpOworCWlmICghcmV0KQorCQlyZXQgPSAtRUlOUFJPR1JFU1M7CisJZWxzZSB7CisJCWlwc2VjX2VzcF91bm1hcChqcmRldiwgZWRlc2MsIGFyZXEpOworCQlrZnJlZShlZGVzYyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGRlcml2ZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gc2NhdHRlcmxpc3QKKyAqLworc3RhdGljIGludCBzZ19jb3VudChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX2xpc3QsIGludCBuYnl0ZXMsIGludCAqY2hhaW5lZCkKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gc2dfbGlzdDsKKwlpbnQgc2dfbmVudHMgPSAwOworCisJKmNoYWluZWQgPSAwOworCXdoaWxlIChuYnl0ZXMgPiAwKSB7CisJCXNnX25lbnRzKys7CisJCW5ieXRlcyAtPSBzZy0+bGVuZ3RoOworCQlpZiAoIXNnX2lzX2xhc3Qoc2cpICYmIChzZyArIDEpLT5sZW5ndGggPT0gMCkKKwkJCSpjaGFpbmVkID0gMTsKKwkJc2cgPSBzY2F0dGVyd2Fsa19zZ19uZXh0KHNnKTsKKwl9CisKKwlyZXR1cm4gc2dfbmVudHM7Cit9CisKKy8qCisgKiBhbGxvY2F0ZSBhbmQgbWFwIHRoZSBpcHNlY19lc3AgZXh0ZW5kZWQgZGVzY3JpcHRvcgorICovCitzdGF0aWMgc3RydWN0IGlwc2VjX2VzcF9lZGVzYyAqaXBzZWNfZXNwX2VkZXNjX2FsbG9jKHN0cnVjdCBhZWFkX3JlcXVlc3QgKmFyZXEsCisJCQkJCQkgICAgIGludCBkZXNjX2J5dGVzKQoreworCXN0cnVjdCBjcnlwdG9fYWVhZCAqYWVhZCA9IGNyeXB0b19hZWFkX3JlcXRmbShhcmVxKTsKKwlzdHJ1Y3QgY2FhbV9jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChhZWFkKTsKKwlzdHJ1Y3QgZGV2aWNlICpqcmRldiA9IGN0eC0+anJkZXY7CisJZ2ZwX3QgZmxhZ3MgPSBhcmVxLT5iYXNlLmZsYWdzICYgQ1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQID8gR0ZQX0tFUk5FTCA6CisJCSAgICAgIEdGUF9BVE9NSUM7CisJaW50IGFzc29jX25lbnRzLCBzcmNfbmVudHMsIGRzdF9uZW50cyA9IDAsIGNoYWluZWQsIGxpbmtfdGJsX2J5dGVzOworCXN0cnVjdCBpcHNlY19lc3BfZWRlc2MgKmVkZXNjOworCisJYXNzb2NfbmVudHMgPSBzZ19jb3VudChhcmVxLT5hc3NvYywgYXJlcS0+YXNzb2NsZW4sICZjaGFpbmVkKTsKKwlCVUdfT04oY2hhaW5lZCk7CisJaWYgKGxpa2VseShhc3NvY19uZW50cyA9PSAxKSkKKwkJYXNzb2NfbmVudHMgPSAwOworCisJc3JjX25lbnRzID0gc2dfY291bnQoYXJlcS0+c3JjLCBhcmVxLT5jcnlwdGxlbiArIGN0eC0+YXV0aHNpemUsCisJCQkgICAgICZjaGFpbmVkKTsKKwlCVUdfT04oY2hhaW5lZCk7CisJaWYgKHNyY19uZW50cyA9PSAxKQorCQlzcmNfbmVudHMgPSAwOworCisJaWYgKHVubGlrZWx5KGFyZXEtPmRzdCAhPSBhcmVxLT5zcmMpKSB7CisJCWRzdF9uZW50cyA9IHNnX2NvdW50KGFyZXEtPmRzdCwgYXJlcS0+Y3J5cHRsZW4gKyBjdHgtPmF1dGhzaXplLAorCQkJCSAgICAgJmNoYWluZWQpOworCQlCVUdfT04oY2hhaW5lZCk7CisJCWlmIChkc3RfbmVudHMgPT0gMSkKKwkJCWRzdF9uZW50cyA9IDA7CisJfQorCisJbGlua190YmxfYnl0ZXMgPSAoYXNzb2NfbmVudHMgKyBzcmNfbmVudHMgKyBkc3RfbmVudHMpICoKKwkJCSBzaXplb2Yoc3RydWN0IGxpbmtfdGJsX2VudHJ5KTsKKwlkZWJ1ZygibGlua190YmxfYnl0ZXMgJWRcbiIsIGxpbmtfdGJsX2J5dGVzKTsKKworCS8qIGFsbG9jYXRlIHNwYWNlIGZvciBiYXNlIGVkZXNjIGFuZCBodyBkZXNjIGNvbW1hbmRzLCBsaW5rIHRhYmxlcyAqLworCWVkZXNjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlwc2VjX2VzcF9lZGVzYykgKyBkZXNjX2J5dGVzICsKKwkJCWxpbmtfdGJsX2J5dGVzLCBHRlBfRE1BIHwgZmxhZ3MpOworCWlmICghZWRlc2MpIHsKKwkJZGV2X2VycihqcmRldiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBleHRlbmRlZCBkZXNjcmlwdG9yXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJZWRlc2MtPmFzc29jX25lbnRzID0gYXNzb2NfbmVudHM7CisJZWRlc2MtPnNyY19uZW50cyA9IHNyY19uZW50czsKKwllZGVzYy0+ZHN0X25lbnRzID0gZHN0X25lbnRzOworCWVkZXNjLT5saW5rX3RibCA9ICh2b2lkICopZWRlc2MgKyBzaXplb2Yoc3RydWN0IGlwc2VjX2VzcF9lZGVzYykgKworCQkJICBkZXNjX2J5dGVzOworCWVkZXNjLT5saW5rX3RibF9kbWEgPSBkbWFfbWFwX3NpbmdsZShqcmRldiwgZWRlc2MtPmxpbmtfdGJsLAorCQkJCQkgICAgIGxpbmtfdGJsX2J5dGVzLCBETUFfVE9fREVWSUNFKTsKKwllZGVzYy0+bGlua190YmxfYnl0ZXMgPSBsaW5rX3RibF9ieXRlczsKKworCXJldHVybiBlZGVzYzsKK30KKworc3RhdGljIGludCBhZWFkX2F1dGhlbmNfZW5jcnlwdChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICphcmVxKQoreworCXN0cnVjdCBpcHNlY19lc3BfZWRlc2MgKmVkZXNjOworCXN0cnVjdCBjcnlwdG9fYWVhZCAqYWVhZCA9IGNyeXB0b19hZWFkX3JlcXRmbShhcmVxKTsKKwlzdHJ1Y3QgY2FhbV9jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eChhZWFkKTsKKwlzdHJ1Y3QgZGV2aWNlICpqcmRldiA9IGN0eC0+anJkZXY7CisJaW50IGl2c2l6ZSA9IGNyeXB0b19hZWFkX2l2c2l6ZShhZWFkKTsKKwl1MzIgKmRlc2M7CisJZG1hX2FkZHJfdCBpdl9kbWE7CisKKwkvKiBhbGxvY2F0ZSBleHRlbmRlZCBkZXNjcmlwdG9yICovCisJZWRlc2MgPSBpcHNlY19lc3BfZWRlc2NfYWxsb2MoYXJlcSwgREVTQ19BRUFEX0VOQ1JZUFRfVEVYVF9MRU4gKgorCQkJCSAgICAgIENBQU1fQ01EX1NaKTsKKwlpZiAoSVNfRVJSKGVkZXNjKSkKKwkJcmV0dXJuIFBUUl9FUlIoZWRlc2MpOworCisJZGVzYyA9IGVkZXNjLT5od19kZXNjOworCisJLyogaW5zZXJ0IHNoYXJlZCBkZXNjcmlwdG9yIHBvaW50ZXIgKi8KKwlpbml0X2pvYl9kZXNjX3NoYXJlZChkZXNjLCBjdHgtPnNoYXJlZF9kZXNjX3BoeXMsCisJCQkgICAgIGRlc2NfbGVuKGN0eC0+c2hfZGVzYyksIEhEUl9TSEFSRV9ERUZFUik7CisKKwlpdl9kbWEgPSBkbWFfbWFwX3NpbmdsZShqcmRldiwgYXJlcS0+aXYsIGl2c2l6ZSwgRE1BX1RPX0RFVklDRSk7CisJLyogY2hlY2sgZG1hIGVycm9yICovCisKKwlhcHBlbmRfbG9hZChkZXNjLCBpdl9kbWEsIGl2c2l6ZSwKKwkJICAgIExEU1RfQ0xBU1NfMV9DQ0IgfCBMRFNUX1NSQ0RTVF9CWVRFX0NPTlRFWFQpOworCisJcmV0dXJuIGlwc2VjX2VzcChlZGVzYywgYXJlcSwgT1BfQUxHX0VOQ1JZUFQsIGlwc2VjX2VzcF9lbmNyeXB0X2RvbmUpOworfQorCitzdGF0aWMgaW50IGFlYWRfYXV0aGVuY19kZWNyeXB0KHN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgY3J5cHRvX2FlYWQgKmFlYWQgPSBjcnlwdG9fYWVhZF9yZXF0Zm0ocmVxKTsKKwlpbnQgaXZzaXplID0gY3J5cHRvX2FlYWRfaXZzaXplKGFlYWQpOworCXN0cnVjdCBjYWFtX2N0eCAqY3R4ID0gY3J5cHRvX2FlYWRfY3R4KGFlYWQpOworCXN0cnVjdCBkZXZpY2UgKmpyZGV2ID0gY3R4LT5qcmRldjsKKwlzdHJ1Y3QgaXBzZWNfZXNwX2VkZXNjICplZGVzYzsKKwl1MzIgKmRlc2M7CisJZG1hX2FkZHJfdCBpdl9kbWE7CisKKwlyZXEtPmNyeXB0bGVuIC09IGN0eC0+YXV0aHNpemU7CisKKwkvKiBhbGxvY2F0ZSBleHRlbmRlZCBkZXNjcmlwdG9yICovCisJZWRlc2MgPSBpcHNlY19lc3BfZWRlc2NfYWxsb2MocmVxLCBERVNDX0FFQURfREVDUllQVF9URVhUX0xFTiAqCisJCQkJICAgICAgQ0FBTV9DTURfU1opOworCWlmIChJU19FUlIoZWRlc2MpKQorCQlyZXR1cm4gUFRSX0VSUihlZGVzYyk7CisKKwlkZXNjID0gZWRlc2MtPmh3X2Rlc2M7CisKKwkvKiBpbnNlcnQgc2hhcmVkIGRlc2NyaXB0b3IgcG9pbnRlciAqLworCWluaXRfam9iX2Rlc2Nfc2hhcmVkKGRlc2MsIGN0eC0+c2hhcmVkX2Rlc2NfcGh5cywKKwkJCSAgICAgZGVzY19sZW4oY3R4LT5zaF9kZXNjKSwgSERSX1NIQVJFX0RFRkVSKTsKKworCWl2X2RtYSA9IGRtYV9tYXBfc2luZ2xlKGpyZGV2LCByZXEtPml2LCBpdnNpemUsIERNQV9UT19ERVZJQ0UpOworCS8qIGNoZWNrIGRtYSBlcnJvciAqLworCisJYXBwZW5kX2xvYWQoZGVzYywgaXZfZG1hLCBpdnNpemUsCisJCSAgICBMRFNUX0NMQVNTXzFfQ0NCIHwgTERTVF9TUkNEU1RfQllURV9DT05URVhUKTsKKworCXJldHVybiBpcHNlY19lc3AoZWRlc2MsIHJlcSwgIU9QX0FMR19FTkNSWVBULCBpcHNlY19lc3BfZGVjcnlwdF9kb25lKTsKK30KKworc3RhdGljIGludCBhZWFkX2F1dGhlbmNfZ2l2ZW5jcnlwdChzdHJ1Y3QgYWVhZF9naXZjcnlwdF9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGFlYWRfcmVxdWVzdCAqYXJlcSA9ICZyZXEtPmFyZXE7CisJc3RydWN0IGlwc2VjX2VzcF9lZGVzYyAqZWRlc2M7CisJc3RydWN0IGNyeXB0b19hZWFkICphZWFkID0gY3J5cHRvX2FlYWRfcmVxdGZtKGFyZXEpOworCXN0cnVjdCBjYWFtX2N0eCAqY3R4ID0gY3J5cHRvX2FlYWRfY3R4KGFlYWQpOworCXN0cnVjdCBkZXZpY2UgKmpyZGV2ID0gY3R4LT5qcmRldjsKKwlpbnQgaXZzaXplID0gY3J5cHRvX2FlYWRfaXZzaXplKGFlYWQpOworCWRtYV9hZGRyX3QgaXZfZG1hOworCXUzMiAqZGVzYzsKKworCWl2X2RtYSA9IGRtYV9tYXBfc2luZ2xlKGpyZGV2LCByZXEtPmdpdiwgaXZzaXplLCBETUFfRlJPTV9ERVZJQ0UpOworCisJZGVidWcoIiVzOiBnaXYgJXBcbiIsIF9fZnVuY19fLCByZXEtPmdpdik7CisKKwkvKiBhbGxvY2F0ZSBleHRlbmRlZCBkZXNjcmlwdG9yICovCisJZWRlc2MgPSBpcHNlY19lc3BfZWRlc2NfYWxsb2MoYXJlcSwgREVTQ19BRUFEX0dJVkVOQ1JZUFRfVEVYVF9MRU4gKgorCQkJCSAgICAgIENBQU1fQ01EX1NaKTsKKwlpZiAoSVNfRVJSKGVkZXNjKSkKKwkJcmV0dXJuIFBUUl9FUlIoZWRlc2MpOworCisJZGVzYyA9IGVkZXNjLT5od19kZXNjOworCisJLyogaW5zZXJ0IHNoYXJlZCBkZXNjcmlwdG9yIHBvaW50ZXIgKi8KKwlpbml0X2pvYl9kZXNjX3NoYXJlZChkZXNjLCBjdHgtPnNoYXJlZF9kZXNjX3BoeXMsCisJCQkgICAgIGRlc2NfbGVuKGN0eC0+c2hfZGVzYyksIEhEUl9TSEFSRV9ERUZFUik7CisKKwkvKgorCSAqIExPQUQgSU1NIEluZm8gRklGTworCSAqIHRvIERFQ08sIExhc3QsIFBhZGRpbmcsIFJhbmRvbSwgTWVzc2FnZSwgMTYgYnl0ZXMKKwkgKi8KKwlhcHBlbmRfbG9hZF9pbW1fdTMyKGRlc2MsIE5GSUZPRU5UUllfREVTVF9ERUNPIHwgTkZJRk9FTlRSWV9MQzEgfAorCQkJICAgIE5GSUZPRU5UUllfU1RZUEVfUEFEIHwgTkZJRk9FTlRSWV9EVFlQRV9NU0cgfAorCQkJICAgIE5GSUZPRU5UUllfUFRZUEVfUk5EIHwgaXZzaXplLAorCQkJICAgIExEU1RfU1JDRFNUX1dPUkRfSU5GT19GSUZPKTsKKworCS8qCisJICogZGlzYWJsZSBpbmZvIGZpZm8gZW50cmllcyBzaW5jZSB0aGUgYWJvdmUgc2VydmVzIGFzIHRoZSBlbnRyeQorCSAqIHRoaXMgd2F5LCB0aGUgTU9WRSBjb21tYW5kIHdvbid0IGdlbmVyYXRlIGFuIGVudHJ5LgorCSAqIE5vdGUgdGhhdCB0aGlzIGlzbid0IHJlcXVpcmVkIGluIG1vcmUgcmVjZW50IHZlcnNpb25zIG9mCisJICogU0VDIGFzIGEgTU9WRSB0aGF0IGRvZXNuJ3QgZG8gaW5mbyBGSUZPIGVudHJpZXMgaXMgYXZhaWxhYmxlLgorCSAqLworCWFwcGVuZF9jbWQoZGVzYywgQ01EX0xPQUQgfCBESVNBQkxFX0FVVE9fSU5GT19GSUZPKTsKKworCS8qIE1PVkUgREVDTyBBbGlnbm1lbnQgLT4gQzEgQ29udGV4dCAxNiBieXRlcyAqLworCWFwcGVuZF9tb3ZlKGRlc2MsIE1PVkVfU1JDX0lORklGTyB8IE1PVkVfREVTVF9DTEFTUzFDVFggfCBpdnNpemUpOworCisJLyogcmUtZW5hYmxlIGluZm8gZmlmbyBlbnRyaWVzICovCisJYXBwZW5kX2NtZChkZXNjLCBDTURfTE9BRCB8IEVOQUJMRV9BVVRPX0lORk9fRklGTyk7CisKKwkvKiBNT1ZFIEMxIENvbnRleHQgLT4gT0ZJRk8gMTYgYnl0ZXMgKi8KKwlhcHBlbmRfbW92ZShkZXNjLCBNT1ZFX1NSQ19DTEFTUzFDVFggfCBNT1ZFX0RFU1RfT1VURklGTyB8IGl2c2l6ZSk7CisKKwlhcHBlbmRfZmlmb19zdG9yZShkZXNjLCBpdl9kbWEsIGl2c2l6ZSwgRklGT1NUX1RZUEVfTUVTU0FHRV9EQVRBKTsKKworCXJldHVybiBpcHNlY19lc3AoZWRlc2MsIGFyZXEsIE9QX0FMR19FTkNSWVBULCBpcHNlY19lc3BfZW5jcnlwdF9kb25lKTsKK30KKworc3RydWN0IGNhYW1fYWxnX3RlbXBsYXRlIHsKKwljaGFyIG5hbWVbQ1JZUFRPX01BWF9BTEdfTkFNRV07CisJY2hhciBkcml2ZXJfbmFtZVtDUllQVE9fTUFYX0FMR19OQU1FXTsKKwl1bnNpZ25lZCBpbnQgYmxvY2tzaXplOworCXN0cnVjdCBhZWFkX2FsZyBhZWFkOworCXUzMiBjbGFzczFfYWxnX3R5cGU7CisJdTMyIGNsYXNzMl9hbGdfdHlwZTsKKwl1MzIgYWxnX29wOworfTsKKworc3RhdGljIHN0cnVjdCBjYWFtX2FsZ190ZW1wbGF0ZSBkcml2ZXJfYWxnc1tdID0geworCS8qIHNpbmdsZS1wYXNzIGlwc2VjX2VzcCBkZXNjcmlwdG9yICovCisJeworCQkubmFtZSA9ICJhdXRoZW5jKGhtYWMoc2hhMSksY2JjKGFlcykpIiwKKwkJLmRyaXZlcl9uYW1lID0gImF1dGhlbmMtaG1hYy1zaGExLWNiYy1hZXMtY2FhbSIsCisJCS5ibG9ja3NpemUgPSBBRVNfQkxPQ0tfU0laRSwKKwkJLmFlYWQgPSB7CisJCQkuc2V0a2V5ID0gYWVhZF9hdXRoZW5jX3NldGtleSwKKwkJCS5zZXRhdXRoc2l6ZSA9IGFlYWRfYXV0aGVuY19zZXRhdXRoc2l6ZSwKKwkJCS5lbmNyeXB0ID0gYWVhZF9hdXRoZW5jX2VuY3J5cHQsCisJCQkuZGVjcnlwdCA9IGFlYWRfYXV0aGVuY19kZWNyeXB0LAorCQkJLmdpdmVuY3J5cHQgPSBhZWFkX2F1dGhlbmNfZ2l2ZW5jcnlwdCwKKwkJCS5nZW5pdiA9ICI8YnVpbHQtaW4+IiwKKwkJCS5pdnNpemUgPSBBRVNfQkxPQ0tfU0laRSwKKwkJCS5tYXhhdXRoc2l6ZSA9IFNIQTFfRElHRVNUX1NJWkUsCisJCQl9LAorCQkuY2xhc3MxX2FsZ190eXBlID0gT1BfQUxHX0FMR1NFTF9BRVMgfCBPUF9BTEdfQUFJX0NCQywKKwkJLmNsYXNzMl9hbGdfdHlwZSA9IE9QX0FMR19BTEdTRUxfU0hBMSB8IE9QX0FMR19BQUlfSE1BQ19QUkVDT01QLAorCQkuYWxnX29wID0gT1BfQUxHX0FMR1NFTF9TSEExIHwgT1BfQUxHX0FBSV9ITUFDLAorCX0sCisJeworCQkubmFtZSA9ICJhdXRoZW5jKGhtYWMoc2hhMjU2KSxjYmMoYWVzKSkiLAorCQkuZHJpdmVyX25hbWUgPSAiYXV0aGVuYy1obWFjLXNoYTI1Ni1jYmMtYWVzLWNhYW0iLAorCQkuYmxvY2tzaXplID0gQUVTX0JMT0NLX1NJWkUsCisJCS5hZWFkID0geworCQkJLnNldGtleSA9IGFlYWRfYXV0aGVuY19zZXRrZXksCisJCQkuc2V0YXV0aHNpemUgPSBhZWFkX2F1dGhlbmNfc2V0YXV0aHNpemUsCisJCQkuZW5jcnlwdCA9IGFlYWRfYXV0aGVuY19lbmNyeXB0LAorCQkJLmRlY3J5cHQgPSBhZWFkX2F1dGhlbmNfZGVjcnlwdCwKKwkJCS5naXZlbmNyeXB0ID0gYWVhZF9hdXRoZW5jX2dpdmVuY3J5cHQsCisJCQkuZ2VuaXYgPSAiPGJ1aWx0LWluPiIsCisJCQkuaXZzaXplID0gQUVTX0JMT0NLX1NJWkUsCisJCQkubWF4YXV0aHNpemUgPSBTSEEyNTZfRElHRVNUX1NJWkUsCisJCQl9LAorCQkuY2xhc3MxX2FsZ190eXBlID0gT1BfQUxHX0FMR1NFTF9BRVMgfCBPUF9BTEdfQUFJX0NCQywKKwkJLmNsYXNzMl9hbGdfdHlwZSA9IE9QX0FMR19BTEdTRUxfU0hBMjU2IHwKKwkJCQkgICBPUF9BTEdfQUFJX0hNQUNfUFJFQ09NUCwKKwkJLmFsZ19vcCA9IE9QX0FMR19BTEdTRUxfU0hBMjU2IHwgT1BfQUxHX0FBSV9ITUFDLAorCX0sCisJeworCQkubmFtZSA9ICJhdXRoZW5jKGhtYWMoc2hhNTEyKSxjYmMoYWVzKSkiLAorCQkuZHJpdmVyX25hbWUgPSAiYXV0aGVuYy1obWFjLXNoYTUxMi1jYmMtYWVzLWNhYW0iLAorCQkuYmxvY2tzaXplID0gQUVTX0JMT0NLX1NJWkUsCisJCS5hZWFkID0geworCQkJLnNldGtleSA9IGFlYWRfYXV0aGVuY19zZXRrZXksCisJCQkuc2V0YXV0aHNpemUgPSBhZWFkX2F1dGhlbmNfc2V0YXV0aHNpemUsCisJCQkuZW5jcnlwdCA9IGFlYWRfYXV0aGVuY19lbmNyeXB0LAorCQkJLmRlY3J5cHQgPSBhZWFkX2F1dGhlbmNfZGVjcnlwdCwKKwkJCS5naXZlbmNyeXB0ID0gYWVhZF9hdXRoZW5jX2dpdmVuY3J5cHQsCisJCQkuZ2VuaXYgPSAiPGJ1aWx0LWluPiIsCisJCQkuaXZzaXplID0gQUVTX0JMT0NLX1NJWkUsCisJCQkubWF4YXV0aHNpemUgPSBTSEE1MTJfRElHRVNUX1NJWkUsCisJCQl9LAorCQkuY2xhc3MxX2FsZ190eXBlID0gT1BfQUxHX0FMR1NFTF9BRVMgfCBPUF9BTEdfQUFJX0NCQywKKwkJLmNsYXNzMl9hbGdfdHlwZSA9IE9QX0FMR19BTEdTRUxfU0hBNTEyIHwKKwkJCQkgICBPUF9BTEdfQUFJX0hNQUNfUFJFQ09NUCwKKwkJLmFsZ19vcCA9IE9QX0FMR19BTEdTRUxfU0hBNTEyIHwgT1BfQUxHX0FBSV9ITUFDLAorCX0sCisJeworCQkubmFtZSA9ICJhdXRoZW5jKGhtYWMoc2hhMSksY2JjKGRlczNfZWRlKSkiLAorCQkuZHJpdmVyX25hbWUgPSAiYXV0aGVuYy1obWFjLXNoYTEtY2JjLWRlczNfZWRlLWNhYW0iLAorCQkuYmxvY2tzaXplID0gREVTM19FREVfQkxPQ0tfU0laRSwKKwkJLmFlYWQgPSB7CisJCQkuc2V0a2V5ID0gYWVhZF9hdXRoZW5jX3NldGtleSwKKwkJCS5zZXRhdXRoc2l6ZSA9IGFlYWRfYXV0aGVuY19zZXRhdXRoc2l6ZSwKKwkJCS5lbmNyeXB0ID0gYWVhZF9hdXRoZW5jX2VuY3J5cHQsCisJCQkuZGVjcnlwdCA9IGFlYWRfYXV0aGVuY19kZWNyeXB0LAorCQkJLmdpdmVuY3J5cHQgPSBhZWFkX2F1dGhlbmNfZ2l2ZW5jcnlwdCwKKwkJCS5nZW5pdiA9ICI8YnVpbHQtaW4+IiwKKwkJCS5pdnNpemUgPSBERVMzX0VERV9CTE9DS19TSVpFLAorCQkJLm1heGF1dGhzaXplID0gU0hBMV9ESUdFU1RfU0laRSwKKwkJCX0sCisJCS5jbGFzczFfYWxnX3R5cGUgPSBPUF9BTEdfQUxHU0VMXzNERVMgfCBPUF9BTEdfQUFJX0NCQywKKwkJLmNsYXNzMl9hbGdfdHlwZSA9IE9QX0FMR19BTEdTRUxfU0hBMSB8IE9QX0FMR19BQUlfSE1BQ19QUkVDT01QLAorCQkuYWxnX29wID0gT1BfQUxHX0FMR1NFTF9TSEExIHwgT1BfQUxHX0FBSV9ITUFDLAorCX0sCisJeworCQkubmFtZSA9ICJhdXRoZW5jKGhtYWMoc2hhMjU2KSxjYmMoZGVzM19lZGUpKSIsCisJCS5kcml2ZXJfbmFtZSA9ICJhdXRoZW5jLWhtYWMtc2hhMjU2LWNiYy1kZXMzX2VkZS1jYWFtIiwKKwkJLmJsb2Nrc2l6ZSA9IERFUzNfRURFX0JMT0NLX1NJWkUsCisJCS5hZWFkID0geworCQkJLnNldGtleSA9IGFlYWRfYXV0aGVuY19zZXRrZXksCisJCQkuc2V0YXV0aHNpemUgPSBhZWFkX2F1dGhlbmNfc2V0YXV0aHNpemUsCisJCQkuZW5jcnlwdCA9IGFlYWRfYXV0aGVuY19lbmNyeXB0LAorCQkJLmRlY3J5cHQgPSBhZWFkX2F1dGhlbmNfZGVjcnlwdCwKKwkJCS5naXZlbmNyeXB0ID0gYWVhZF9hdXRoZW5jX2dpdmVuY3J5cHQsCisJCQkuZ2VuaXYgPSAiPGJ1aWx0LWluPiIsCisJCQkuaXZzaXplID0gREVTM19FREVfQkxPQ0tfU0laRSwKKwkJCS5tYXhhdXRoc2l6ZSA9IFNIQTI1Nl9ESUdFU1RfU0laRSwKKwkJCX0sCisJCS5jbGFzczFfYWxnX3R5cGUgPSBPUF9BTEdfQUxHU0VMXzNERVMgfCBPUF9BTEdfQUFJX0NCQywKKwkJLmNsYXNzMl9hbGdfdHlwZSA9IE9QX0FMR19BTEdTRUxfU0hBMjU2IHwKKwkJCQkgICBPUF9BTEdfQUFJX0hNQUNfUFJFQ09NUCwKKwkJLmFsZ19vcCA9IE9QX0FMR19BTEdTRUxfU0hBMjU2IHwgT1BfQUxHX0FBSV9ITUFDLAorCX0sCisJeworCQkubmFtZSA9ICJhdXRoZW5jKGhtYWMoc2hhNTEyKSxjYmMoZGVzM19lZGUpKSIsCisJCS5kcml2ZXJfbmFtZSA9ICJhdXRoZW5jLWhtYWMtc2hhNTEyLWNiYy1kZXMzX2VkZS1jYWFtIiwKKwkJLmJsb2Nrc2l6ZSA9IERFUzNfRURFX0JMT0NLX1NJWkUsCisJCS5hZWFkID0geworCQkJLnNldGtleSA9IGFlYWRfYXV0aGVuY19zZXRrZXksCisJCQkuc2V0YXV0aHNpemUgPSBhZWFkX2F1dGhlbmNfc2V0YXV0aHNpemUsCisJCQkuZW5jcnlwdCA9IGFlYWRfYXV0aGVuY19lbmNyeXB0LAorCQkJLmRlY3J5cHQgPSBhZWFkX2F1dGhlbmNfZGVjcnlwdCwKKwkJCS5naXZlbmNyeXB0ID0gYWVhZF9hdXRoZW5jX2dpdmVuY3J5cHQsCisJCQkuZ2VuaXYgPSAiPGJ1aWx0LWluPiIsCisJCQkuaXZzaXplID0gREVTM19FREVfQkxPQ0tfU0laRSwKKwkJCS5tYXhhdXRoc2l6ZSA9IFNIQTUxMl9ESUdFU1RfU0laRSwKKwkJCX0sCisJCS5jbGFzczFfYWxnX3R5cGUgPSBPUF9BTEdfQUxHU0VMXzNERVMgfCBPUF9BTEdfQUFJX0NCQywKKwkJLmNsYXNzMl9hbGdfdHlwZSA9IE9QX0FMR19BTEdTRUxfU0hBNTEyIHwKKwkJCQkgICBPUF9BTEdfQUFJX0hNQUNfUFJFQ09NUCwKKwkJLmFsZ19vcCA9IE9QX0FMR19BTEdTRUxfU0hBNTEyIHwgT1BfQUxHX0FBSV9ITUFDLAorCX0sCisJeworCQkubmFtZSA9ICJhdXRoZW5jKGhtYWMoc2hhMSksY2JjKGRlcykpIiwKKwkJLmRyaXZlcl9uYW1lID0gImF1dGhlbmMtaG1hYy1zaGExLWNiYy1kZXMtY2FhbSIsCisJCS5ibG9ja3NpemUgPSBERVNfQkxPQ0tfU0laRSwKKwkJLmFlYWQgPSB7CisJCQkuc2V0a2V5ID0gYWVhZF9hdXRoZW5jX3NldGtleSwKKwkJCS5zZXRhdXRoc2l6ZSA9IGFlYWRfYXV0aGVuY19zZXRhdXRoc2l6ZSwKKwkJCS5lbmNyeXB0ID0gYWVhZF9hdXRoZW5jX2VuY3J5cHQsCisJCQkuZGVjcnlwdCA9IGFlYWRfYXV0aGVuY19kZWNyeXB0LAorCQkJLmdpdmVuY3J5cHQgPSBhZWFkX2F1dGhlbmNfZ2l2ZW5jcnlwdCwKKwkJCS5nZW5pdiA9ICI8YnVpbHQtaW4+IiwKKwkJCS5pdnNpemUgPSBERVNfQkxPQ0tfU0laRSwKKwkJCS5tYXhhdXRoc2l6ZSA9IFNIQTFfRElHRVNUX1NJWkUsCisJCQl9LAorCQkuY2xhc3MxX2FsZ190eXBlID0gT1BfQUxHX0FMR1NFTF9ERVMgfCBPUF9BTEdfQUFJX0NCQywKKwkJLmNsYXNzMl9hbGdfdHlwZSA9IE9QX0FMR19BTEdTRUxfU0hBMSB8IE9QX0FMR19BQUlfSE1BQ19QUkVDT01QLAorCQkuYWxnX29wID0gT1BfQUxHX0FMR1NFTF9TSEExIHwgT1BfQUxHX0FBSV9ITUFDLAorCX0sCisJeworCQkubmFtZSA9ICJhdXRoZW5jKGhtYWMoc2hhMjU2KSxjYmMoZGVzKSkiLAorCQkuZHJpdmVyX25hbWUgPSAiYXV0aGVuYy1obWFjLXNoYTI1Ni1jYmMtZGVzLWNhYW0iLAorCQkuYmxvY2tzaXplID0gREVTX0JMT0NLX1NJWkUsCisJCS5hZWFkID0geworCQkJLnNldGtleSA9IGFlYWRfYXV0aGVuY19zZXRrZXksCisJCQkuc2V0YXV0aHNpemUgPSBhZWFkX2F1dGhlbmNfc2V0YXV0aHNpemUsCisJCQkuZW5jcnlwdCA9IGFlYWRfYXV0aGVuY19lbmNyeXB0LAorCQkJLmRlY3J5cHQgPSBhZWFkX2F1dGhlbmNfZGVjcnlwdCwKKwkJCS5naXZlbmNyeXB0ID0gYWVhZF9hdXRoZW5jX2dpdmVuY3J5cHQsCisJCQkuZ2VuaXYgPSAiPGJ1aWx0LWluPiIsCisJCQkuaXZzaXplID0gREVTX0JMT0NLX1NJWkUsCisJCQkubWF4YXV0aHNpemUgPSBTSEEyNTZfRElHRVNUX1NJWkUsCisJCQl9LAorCQkuY2xhc3MxX2FsZ190eXBlID0gT1BfQUxHX0FMR1NFTF9ERVMgfCBPUF9BTEdfQUFJX0NCQywKKwkJLmNsYXNzMl9hbGdfdHlwZSA9IE9QX0FMR19BTEdTRUxfU0hBMjU2IHwKKwkJCQkgICBPUF9BTEdfQUFJX0hNQUNfUFJFQ09NUCwKKwkJLmFsZ19vcCA9IE9QX0FMR19BTEdTRUxfU0hBMjU2IHwgT1BfQUxHX0FBSV9ITUFDLAorCX0sCisJeworCQkubmFtZSA9ICJhdXRoZW5jKGhtYWMoc2hhNTEyKSxjYmMoZGVzKSkiLAorCQkuZHJpdmVyX25hbWUgPSAiYXV0aGVuYy1obWFjLXNoYTUxMi1jYmMtZGVzLWNhYW0iLAorCQkuYmxvY2tzaXplID0gREVTX0JMT0NLX1NJWkUsCisJCS5hZWFkID0geworCQkJLnNldGtleSA9IGFlYWRfYXV0aGVuY19zZXRrZXksCisJCQkuc2V0YXV0aHNpemUgPSBhZWFkX2F1dGhlbmNfc2V0YXV0aHNpemUsCisJCQkuZW5jcnlwdCA9IGFlYWRfYXV0aGVuY19lbmNyeXB0LAorCQkJLmRlY3J5cHQgPSBhZWFkX2F1dGhlbmNfZGVjcnlwdCwKKwkJCS5naXZlbmNyeXB0ID0gYWVhZF9hdXRoZW5jX2dpdmVuY3J5cHQsCisJCQkuZ2VuaXYgPSAiPGJ1aWx0LWluPiIsCisJCQkuaXZzaXplID0gREVTX0JMT0NLX1NJWkUsCisJCQkubWF4YXV0aHNpemUgPSBTSEE1MTJfRElHRVNUX1NJWkUsCisJCQl9LAorCQkuY2xhc3MxX2FsZ190eXBlID0gT1BfQUxHX0FMR1NFTF9ERVMgfCBPUF9BTEdfQUFJX0NCQywKKwkJLmNsYXNzMl9hbGdfdHlwZSA9IE9QX0FMR19BTEdTRUxfU0hBNTEyIHwKKwkJCQkgICBPUF9BTEdfQUFJX0hNQUNfUFJFQ09NUCwKKwkJLmFsZ19vcCA9IE9QX0FMR19BTEdTRUxfU0hBNTEyIHwgT1BfQUxHX0FBSV9ITUFDLAorCX0sCit9OworCitzdHJ1Y3QgY2FhbV9jcnlwdG9fYWxnIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5OworCXN0cnVjdCBkZXZpY2UgKmN0cmxkZXY7CisJaW50IGNsYXNzMV9hbGdfdHlwZTsKKwlpbnQgY2xhc3MyX2FsZ190eXBlOworCWludCBhbGdfb3A7CisJc3RydWN0IGNyeXB0b19hbGcgY3J5cHRvX2FsZzsKK307CisKK3N0YXRpYyBpbnQgY2FhbV9jcmFfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXN0cnVjdCBjcnlwdG9fYWxnICphbGcgPSB0Zm0tPl9fY3J0X2FsZzsKKwlzdHJ1Y3QgY2FhbV9jcnlwdG9fYWxnICpjYWFtX2FsZyA9CisJCSBjb250YWluZXJfb2YoYWxnLCBzdHJ1Y3QgY2FhbV9jcnlwdG9fYWxnLCBjcnlwdG9fYWxnKTsKKwlzdHJ1Y3QgY2FhbV9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisJc3RydWN0IGNhYW1fZHJ2X3ByaXZhdGUgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoY2FhbV9hbGctPmN0cmxkZXYpOworCWludCB0Z3RfanIgPSBhdG9taWNfaW5jX3JldHVybigmcHJpdi0+dGZtX2NvdW50KTsKKworCS8qCisJICogZGlzdHJpYnV0ZSB0Zm1zIGFjcm9zcyBqb2IgcmluZ3MgdG8gZW5zdXJlIGluLW9yZGVyCisJICogY3J5cHRvIHJlcXVlc3QgcHJvY2Vzc2luZyBwZXIgdGZtCisJICovCisJY3R4LT5qcmRldiA9IHByaXYtPmFsZ2FwaV9qclsodGd0X2pyIC8gMikgJSBwcml2LT5udW1fanJzX2Zvcl9hbGdhcGldOworCisJLyogY29weSBkZXNjcmlwdG9yIGhlYWRlciB0ZW1wbGF0ZSB2YWx1ZSAqLworCWN0eC0+Y2xhc3MxX2FsZ190eXBlID0gT1BfVFlQRV9DTEFTUzFfQUxHIHwgY2FhbV9hbGctPmNsYXNzMV9hbGdfdHlwZTsKKwljdHgtPmNsYXNzMl9hbGdfdHlwZSA9IE9QX1RZUEVfQ0xBU1MyX0FMRyB8IGNhYW1fYWxnLT5jbGFzczJfYWxnX3R5cGU7CisJY3R4LT5hbGdfb3AgPSBPUF9UWVBFX0NMQVNTMl9BTEcgfCBjYWFtX2FsZy0+YWxnX29wOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNhYW1fY3JhX2V4aXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgY2FhbV9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisKKwlpZiAoIWRtYV9tYXBwaW5nX2Vycm9yKGN0eC0+anJkZXYsIGN0eC0+c2hhcmVkX2Rlc2NfcGh5cykpCisJCWRtYV91bm1hcF9zaW5nbGUoY3R4LT5qcmRldiwgY3R4LT5zaGFyZWRfZGVzY19waHlzLAorCQkJCSBkZXNjX2J5dGVzKGN0eC0+c2hfZGVzYyksIERNQV9UT19ERVZJQ0UpOworCWtmcmVlKGN0eC0+c2hfZGVzYyk7CisKKwlpZiAoIWRtYV9tYXBwaW5nX2Vycm9yKGN0eC0+anJkZXYsIGN0eC0+a2V5X3BoeXMpKQorCQlkbWFfdW5tYXBfc2luZ2xlKGN0eC0+anJkZXYsIGN0eC0+a2V5X3BoeXMsCisJCQkJIGN0eC0+c3BsaXRfa2V5X3BhZF9sZW4gKyBjdHgtPmVuY2tleWxlbiwKKwkJCQkgRE1BX1RPX0RFVklDRSk7CisJa2ZyZWUoY3R4LT5rZXkpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY2FhbV9hbGdhcGlfZXhpdCh2b2lkKQoreworCisJc3RydWN0IGRldmljZV9ub2RlICpkZXZfbm9kZTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBkZXZpY2UgKmN0cmxkZXY7CisJc3RydWN0IGNhYW1fZHJ2X3ByaXZhdGUgKnByaXY7CisJc3RydWN0IGNhYW1fY3J5cHRvX2FsZyAqdF9hbGcsICpuOworCWludCBpLCBlcnI7CisKKwlkZXZfbm9kZSA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJmc2wsc2VjLXY0LjAiKTsKKwlpZiAoIWRldl9ub2RlKQorCQlyZXR1cm47CisKKwlwZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShkZXZfbm9kZSk7CisJaWYgKCFwZGV2KQorCQlyZXR1cm47CisKKwljdHJsZGV2ID0gJnBkZXYtPmRldjsKKwlvZl9ub2RlX3B1dChkZXZfbm9kZSk7CisJcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShjdHJsZGV2KTsKKworCWlmICghcHJpdi0+YWxnX2xpc3QubmV4dCkKKwkJcmV0dXJuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRfYWxnLCBuLCAmcHJpdi0+YWxnX2xpc3QsIGVudHJ5KSB7CisJCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmdF9hbGctPmNyeXB0b19hbGcpOworCQlsaXN0X2RlbCgmdF9hbGctPmVudHJ5KTsKKwkJa2ZyZWUodF9hbGcpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBwcml2LT50b3RhbF9qb2JyczsgaSsrKSB7CisJCWVyciA9IGNhYW1fanJfZGVyZWdpc3Rlcihwcml2LT5hbGdhcGlfanJbaV0pOworCQlpZiAoZXJyIDwgMCkKKwkJCWJyZWFrOworCX0KKwlrZnJlZShwcml2LT5hbGdhcGlfanIpOworfQorCitzdGF0aWMgc3RydWN0IGNhYW1fY3J5cHRvX2FsZyAqY2FhbV9hbGdfYWxsb2Moc3RydWN0IGRldmljZSAqY3RybGRldiwKKwkJCQkJICAgICAgc3RydWN0IGNhYW1fYWxnX3RlbXBsYXRlCisJCQkJCSAgICAgICp0ZW1wbGF0ZSkKK3sKKwlzdHJ1Y3QgY2FhbV9jcnlwdG9fYWxnICp0X2FsZzsKKwlzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnOworCisJdF9hbGcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2FhbV9jcnlwdG9fYWxnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0X2FsZykgeworCQlkZXZfZXJyKGN0cmxkZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgdF9hbGdcbiIpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CisKKwlhbGcgPSAmdF9hbGctPmNyeXB0b19hbGc7CisKKwlzbnByaW50ZihhbGctPmNyYV9uYW1lLCBDUllQVE9fTUFYX0FMR19OQU1FLCAiJXMiLCB0ZW1wbGF0ZS0+bmFtZSk7CisJc25wcmludGYoYWxnLT5jcmFfZHJpdmVyX25hbWUsIENSWVBUT19NQVhfQUxHX05BTUUsICIlcyIsCisJCSB0ZW1wbGF0ZS0+ZHJpdmVyX25hbWUpOworCWFsZy0+Y3JhX21vZHVsZSA9IFRISVNfTU9EVUxFOworCWFsZy0+Y3JhX2luaXQgPSBjYWFtX2NyYV9pbml0OworCWFsZy0+Y3JhX2V4aXQgPSBjYWFtX2NyYV9leGl0OworCWFsZy0+Y3JhX3ByaW9yaXR5ID0gQ0FBTV9DUkFfUFJJT1JJVFk7CisJYWxnLT5jcmFfZmxhZ3MgPSBDUllQVE9fQUxHX1RZUEVfQUVBRCB8IENSWVBUT19BTEdfQVNZTkM7CisJYWxnLT5jcmFfYmxvY2tzaXplID0gdGVtcGxhdGUtPmJsb2Nrc2l6ZTsKKwlhbGctPmNyYV9hbGlnbm1hc2sgPSAwOworCWFsZy0+Y3JhX3R5cGUgPSAmY3J5cHRvX2FlYWRfdHlwZTsKKwlhbGctPmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBjYWFtX2N0eCk7CisJYWxnLT5jcmFfdS5hZWFkID0gdGVtcGxhdGUtPmFlYWQ7CisKKwl0X2FsZy0+Y2xhc3MxX2FsZ190eXBlID0gdGVtcGxhdGUtPmNsYXNzMV9hbGdfdHlwZTsKKwl0X2FsZy0+Y2xhc3MyX2FsZ190eXBlID0gdGVtcGxhdGUtPmNsYXNzMl9hbGdfdHlwZTsKKwl0X2FsZy0+YWxnX29wID0gdGVtcGxhdGUtPmFsZ19vcDsKKwl0X2FsZy0+Y3RybGRldiA9IGN0cmxkZXY7CisKKwlyZXR1cm4gdF9hbGc7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGNhYW1fYWxnYXBpX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldl9ub2RlOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IGRldmljZSAqY3RybGRldiwgKipqcmRldjsKKwlzdHJ1Y3QgY2FhbV9kcnZfcHJpdmF0ZSAqcHJpdjsKKwlpbnQgaSA9IDAsIGVyciA9IDA7CisKKwlkZXZfbm9kZSA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJmc2wsc2VjLXY0LjAiKTsKKwlpZiAoIWRldl9ub2RlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXBkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKGRldl9ub2RlKTsKKwlpZiAoIXBkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJY3RybGRldiA9ICZwZGV2LT5kZXY7CisJcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShjdHJsZGV2KTsKKwlvZl9ub2RlX3B1dChkZXZfbm9kZSk7CisKKwlJTklUX0xJU1RfSEVBRCgmcHJpdi0+YWxnX2xpc3QpOworCisJanJkZXYgPSBrbWFsbG9jKHNpemVvZigqanJkZXYpICogcHJpdi0+dG90YWxfam9icnMsIEdGUF9LRVJORUwpOworCWlmICghanJkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IHByaXYtPnRvdGFsX2pvYnJzOyBpKyspIHsKKwkJZXJyID0gY2FhbV9qcl9yZWdpc3RlcihjdHJsZGV2LCAmanJkZXZbaV0pOworCQlpZiAoZXJyIDwgMCkKKwkJCWJyZWFrOworCX0KKwlpZiAoZXJyIDwgMCAmJiBpID09IDApIHsKKwkJZGV2X2VycihjdHJsZGV2LCAiYWxnYXBpIGVycm9yIGluIGpvYiByaW5nIHJlZ2lzdHJhdGlvbjogJWRcbiIsCisJCQllcnIpOworCQlrZnJlZShqcmRldik7CisJCXJldHVybiBlcnI7CisJfQorCisJcHJpdi0+bnVtX2pyc19mb3JfYWxnYXBpID0gaTsKKwlwcml2LT5hbGdhcGlfanIgPSBqcmRldjsKKwlhdG9taWNfc2V0KCZwcml2LT50Zm1fY291bnQsIC0xKTsKKworCS8qIHJlZ2lzdGVyIGNyeXB0byBhbGdvcml0aG1zIHRoZSBkZXZpY2Ugc3VwcG9ydHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkcml2ZXJfYWxncyk7IGkrKykgeworCQkvKiBUT0RPOiBjaGVjayBpZiBoL3cgc3VwcG9ydHMgYWxnICovCisJCXN0cnVjdCBjYWFtX2NyeXB0b19hbGcgKnRfYWxnOworCisJCXRfYWxnID0gY2FhbV9hbGdfYWxsb2MoY3RybGRldiwgJmRyaXZlcl9hbGdzW2ldKTsKKwkJaWYgKElTX0VSUih0X2FsZykpIHsKKwkJCWVyciA9IFBUUl9FUlIodF9hbGcpOworCQkJZGV2X3dhcm4oY3RybGRldiwgIiVzIGFsZyBhbGxvY2F0aW9uIGZhaWxlZFxuIiwKKwkJCQkgZHJpdmVyX2FsZ3NbaV0uZHJpdmVyX25hbWUpOworCQkJY29udGludWU7CisJCX0KKworCQllcnIgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZ0X2FsZy0+Y3J5cHRvX2FsZyk7CisJCWlmIChlcnIpIHsKKwkJCWRldl93YXJuKGN0cmxkZXYsICIlcyBhbGcgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIiwKKwkJCQl0X2FsZy0+Y3J5cHRvX2FsZy5jcmFfZHJpdmVyX25hbWUpOworCQkJa2ZyZWUodF9hbGcpOworCQl9IGVsc2UgeworCQkJbGlzdF9hZGRfdGFpbCgmdF9hbGctPmVudHJ5LCAmcHJpdi0+YWxnX2xpc3QpOworCQkJZGV2X2luZm8oY3RybGRldiwgIiVzXG4iLAorCQkJCSB0X2FsZy0+Y3J5cHRvX2FsZy5jcmFfZHJpdmVyX25hbWUpOworCQl9CisJfQorCisJcmV0dXJuIGVycjsKK30KKworbW9kdWxlX2luaXQoY2FhbV9hbGdhcGlfaW5pdCk7Cittb2R1bGVfZXhpdChjYWFtX2FsZ2FwaV9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJGU0wgQ0FBTSBzdXBwb3J0IGZvciBjcnlwdG8gQVBJIik7CitNT0RVTEVfQVVUSE9SKCJGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciAtIE5NRy9TVEMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2NhYW0vY29tcGF0LmggYi9kcml2ZXJzL2NyeXB0by9jYWFtL2NvbXBhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MDQ1MDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NyeXB0by9jYWFtL2NvbXBhdC5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOC0yMDExIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKi8KKworI2lmbmRlZiBDQUFNX0NPTVBBVF9ICisjZGVmaW5lIENBQU1fQ09NUEFUX0gKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L2h3X3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvY2lyY19idWYuaD4KKyNpbmNsdWRlIDxuZXQveGZybS5oPgorCisjaW5jbHVkZSA8Y3J5cHRvL2FsZ2FwaS5oPgorI2luY2x1ZGUgPGNyeXB0by9hZXMuaD4KKyNpbmNsdWRlIDxjcnlwdG8vZGVzLmg+CisjaW5jbHVkZSA8Y3J5cHRvL3NoYS5oPgorI2luY2x1ZGUgPGNyeXB0by9hZWFkLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2F1dGhlbmMuaD4KKyNpbmNsdWRlIDxjcnlwdG8vc2NhdHRlcndhbGsuaD4KKworI2VuZGlmIC8qICFkZWZpbmVkKENBQU1fQ09NUEFUX0gpICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9jYWFtL2N0cmwuYyBiL2RyaXZlcnMvY3J5cHRvL2NhYW0vY3RybC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMDk3MTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NyeXB0by9jYWFtL2N0cmwuYwpAQCAtMCwwICsxLDI2OSBAQAorLyoKKyAqIENBQU0gY29udHJvbC1wbGFuZSBkcml2ZXIgYmFja2VuZAorICogQ29udHJvbGxlci1sZXZlbCBkcml2ZXIsIGtlcm5lbCBwcm9wZXJ0eSBkZXRlY3Rpb24sIGluaXRpYWxpemF0aW9uCisgKgorICogQ29weXJpZ2h0IDIwMDgtMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICovCisKKyNpbmNsdWRlICJjb21wYXQuaCIKKyNpbmNsdWRlICJyZWdzLmgiCisjaW5jbHVkZSAiaW50ZXJuLmgiCisjaW5jbHVkZSAianIuaCIKKworc3RhdGljIGludCBjYWFtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmN0cmxkZXY7CisJc3RydWN0IGNhYW1fZHJ2X3ByaXZhdGUgKmN0cmxwcml2OworCXN0cnVjdCBjYWFtX2Rydl9wcml2YXRlX2pyICpqcnByaXY7CisJc3RydWN0IGNhYW1fZnVsbCBfX2lvbWVtICp0b3ByZWdzOworCWludCByaW5nLCByZXQgPSAwOworCisJY3RybGRldiA9ICZwZGV2LT5kZXY7CisJY3RybHByaXYgPSBkZXZfZ2V0X2RydmRhdGEoY3RybGRldik7CisJdG9wcmVncyA9IChzdHJ1Y3QgY2FhbV9mdWxsIF9faW9tZW0gKiljdHJscHJpdi0+Y3RybDsKKworCS8qIHNodXQgZG93biBKb2JScyAqLworCWZvciAocmluZyA9IDA7IHJpbmcgPCBjdHJscHJpdi0+dG90YWxfam9icnM7IHJpbmcrKykgeworCQlyZXQgfD0gY2FhbV9qcl9zaHV0ZG93bihjdHJscHJpdi0+anJkZXZbcmluZ10pOworCQlqcnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoY3RybHByaXYtPmpyZGV2W3JpbmddKTsKKwkJaXJxX2Rpc3Bvc2VfbWFwcGluZyhqcnByaXYtPmlycSk7CisJfQorCisJLyogU2h1dCBkb3duIGRlYnVnIHZpZXdzICovCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGN0cmxwcml2LT5kZnNfcm9vdCk7CisjZW5kaWYKKworCS8qIFVubWFwIGNvbnRyb2xsZXIgcmVnaW9uICovCisJaW91bm1hcCgmdG9wcmVncy0+Y3RybCk7CisKKwlrZnJlZShjdHJscHJpdi0+anJkZXYpOworCWtmcmVlKGN0cmxwcml2KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIFByb2JlIHJvdXRpbmUgZm9yIENBQU0gdG9wIChjb250cm9sbGVyKSBsZXZlbCAqLworc3RhdGljIGludCBjYWFtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IGQsIHJpbmcsIHJzcGVjOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wcm9wLCAqbnA7CisJc3RydWN0IGNhYW1fY3RybCBfX2lvbWVtICpjdHJsOworCXN0cnVjdCBjYWFtX2Z1bGwgX19pb21lbSAqdG9wcmVnczsKKwlzdHJ1Y3QgY2FhbV9kcnZfcHJpdmF0ZSAqY3RybHByaXY7CisJc3RydWN0IGNhYW1fcGVyZm1vbiAqcGVyZm1vbjsKKwlzdHJ1Y3QgY2FhbV9kZWNvICoqZGVjbzsKKwl1MzIgZGVjb251bTsKKworCWN0cmxwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNhYW1fZHJ2X3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWN0cmxwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldiA9ICZwZGV2LT5kZXY7CisJZGV2X3NldF9kcnZkYXRhKGRldiwgY3RybHByaXYpOworCWN0cmxwcml2LT5wZGV2ID0gcGRldjsKKwlucHJvcCA9IHBkZXYtPmRldi5vZl9ub2RlOworCisJLyogR2V0IGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmcm9tIGRldmljZSB0cmVlICovCisJLyogRmlyc3QsIGdldCByZWdpc3RlciBwYWdlICovCisJY3RybCA9IG9mX2lvbWFwKG5wcm9wLCAwKTsKKwlpZiAoY3RybCA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAiY2FhbTogb2ZfaW9tYXAoKSBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJY3RybHByaXYtPmN0cmwgPSAoc3RydWN0IGNhYW1fY3RybCBfX2ZvcmNlICopY3RybDsKKworCS8qIHRvcHJlZ3MgdXNlZCB0byBkZXJpdmUgcG9pbnRlcnMgdG8gQ0FBTSBzdWItYmxvY2tzIG9ubHkgKi8KKwl0b3ByZWdzID0gKHN0cnVjdCBjYWFtX2Z1bGwgX19pb21lbSAqKWN0cmw7CisKKwkvKiBHZXQgdGhlIElSUSBvZiB0aGUgY29udHJvbGxlciAoZm9yIHNlY3VyaXR5IHZpb2xhdGlvbnMgb25seSkgKi8KKwljdHJscHJpdi0+c2VjdmlvX2lycSA9IG9mX2lycV90b19yZXNvdXJjZShucHJvcCwgMCwgTlVMTCk7CisKKwkvKgorCSAqIEVuYWJsZSBERUNPIHdhdGNoZG9ncyBhbmQsIGlmIHRoaXMgaXMgYSBQSFlTX0FERFJfVF82NEJJVCBrZXJuZWwsCisJICogMzYtYml0IHBvaW50ZXJzIGluIG1hc3RlciBjb25maWd1cmF0aW9uIHJlZ2lzdGVyCisJICovCisJc2V0Yml0czMyKCZ0b3ByZWdzLT5jdHJsLm1jciwgTUNGR1JfV0RFTkFCTEUgfAorCQkgIChzaXplb2YoZG1hX2FkZHJfdCkgPT0gc2l6ZW9mKHU2NCkgPyBNQ0ZHUl9MT05HX1BUUiA6IDApKTsKKworCWlmIChzaXplb2YoZG1hX2FkZHJfdCkgPT0gc2l6ZW9mKHU2NCkpCisJCWRtYV9zZXRfbWFzayhkZXYsIERNQV9CSVRfTUFTSygzNikpOworCisJLyogRmluZCBvdXQgaG93IG1hbnkgREVDT3MgYXJlIHByZXNlbnQgKi8KKwlkZWNvbnVtID0gKHJkX3JlZzY0KCZ0b3ByZWdzLT5jdHJsLnBlcmZtb24uY2hhX251bSkgJgorCQkgICBDSEFfTlVNX0RFQ09OVU1fTUFTSykgPj4gQ0hBX05VTV9ERUNPTlVNX1NISUZUOworCisJY3RybHByaXYtPmRlY28gPSBrbWFsbG9jKGRlY29udW0gKiBzaXplb2Yoc3RydWN0IGNhYW1fZGVjbyAqKSwKKwkJCQkgR0ZQX0tFUk5FTCk7CisKKwlkZWNvID0gKHN0cnVjdCBjYWFtX2RlY28gX19mb3JjZSAqKikmdG9wcmVncy0+ZGVjbzsKKwlmb3IgKGQgPSAwOyBkIDwgZGVjb251bTsgZCsrKQorCQljdHJscHJpdi0+ZGVjb1tkXSA9IGRlY29bZF07CisKKwkvKgorCSAqIERldGVjdCBhbmQgZW5hYmxlIEpvYlJzCisJICogRmlyc3QsIGZpbmQgb3V0IGhvdyBtYW55IHJpbmcgc3BlYydlZCwgYWxsb2NhdGUgcmVmZXJlbmNlcworCSAqIGZvciBhbGwsIHRoZW4gZ28gcHJvYmUgZWFjaCBvbmUuCisJICovCisJcnNwZWMgPSAwOworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgTlVMTCwgImZzbCxzZWMtdjQuMC1qb2ItcmluZyIpCisJCXJzcGVjKys7CisJY3RybHByaXYtPmpyZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRldmljZSAqKSAqIHJzcGVjLCBHRlBfS0VSTkVMKTsKKwlpZiAoY3RybHByaXYtPmpyZGV2ID09IE5VTEwpIHsKKwkJaW91bm1hcCgmdG9wcmVncy0+Y3RybCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJpbmcgPSAwOworCWN0cmxwcml2LT50b3RhbF9qb2JycyA9IDA7CisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCBOVUxMLCAiZnNsLHNlYy12NC4wLWpvYi1yaW5nIikgeworCQljYWFtX2pyX3Byb2JlKHBkZXYsIG5wLCByaW5nKTsKKwkJY3RybHByaXYtPnRvdGFsX2pvYnJzKys7CisJCXJpbmcrKzsKKwl9CisKKwkvKiBDaGVjayB0byBzZWUgaWYgUUkgcHJlc2VudC4gSWYgc28sIGVuYWJsZSAqLworCWN0cmxwcml2LT5xaV9wcmVzZW50ID0gISEocmRfcmVnNjQoJnRvcHJlZ3MtPmN0cmwucGVyZm1vbi5jb21wX3Bhcm1zKSAmCisJCQkJICBDVFBSX1FJX01BU0spOworCWlmIChjdHJscHJpdi0+cWlfcHJlc2VudCkgeworCQljdHJscHJpdi0+cWkgPSAoc3RydWN0IGNhYW1fcXVldWVfaWYgX19mb3JjZSAqKSZ0b3ByZWdzLT5xaTsKKwkJLyogVGhpcyBpcyBhbGwgdGhhdCdzIHJlcXVpcmVkIHRvIHBoeXNpY2FsbHkgZW5hYmxlIFFJICovCisJCXdyX3JlZzMyKCZ0b3ByZWdzLT5xaS5xaV9jb250cm9sX2xvLCBRSUNUTF9EUUVOKTsKKwl9CisKKwkvKiBJZiBubyBRSSBhbmQgbm8gcmluZ3Mgc3BlY2lmaWVkLCBxdWl0IGFuZCBnbyBob21lICovCisJaWYgKCghY3RybHByaXYtPnFpX3ByZXNlbnQpICYmICghY3RybHByaXYtPnRvdGFsX2pvYnJzKSkgeworCQlkZXZfZXJyKGRldiwgIm5vIHF1ZXVlcyBjb25maWd1cmVkLCB0ZXJtaW5hdGluZ1xuIik7CisJCWNhYW1fcmVtb3ZlKHBkZXYpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBOT1RFOiBSVElDIGRldGVjdGlvbiBvdWdodCB0byBnbyBoZXJlLCBhcm91bmQgU2kgdGltZSAqLworCisJLyogSW5pdGlhbGl6ZSBxdWV1ZSBhbGxvY2F0b3IgbG9jayAqLworCXNwaW5fbG9ja19pbml0KCZjdHJscHJpdi0+anJfYWxsb2NfbG9jayk7CisKKwkvKiBSZXBvcnQgImFsaXZlIiBmb3IgZGV2ZWxvcGVyIHRvIHNlZSAqLworCWRldl9pbmZvKGRldiwgImRldmljZSBJRCA9IDB4JTAxNmxseFxuIiwKKwkJIHJkX3JlZzY0KCZ0b3ByZWdzLT5jdHJsLnBlcmZtb24uY2FhbV9pZCkpOworCWRldl9pbmZvKGRldiwgImpvYiByaW5ncyA9ICVkLCBxaSA9ICVkXG4iLAorCQkgY3RybHByaXYtPnRvdGFsX2pvYnJzLCBjdHJscHJpdi0+cWlfcHJlc2VudCk7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwkvKgorCSAqIEZJWE1FOiBuZWVkcyBiZXR0ZXIgbmFtaW5nIGRpc3RpbmN0aW9uLCBhcyBzb21lIGFtYWxnYW1hdGlvbiBvZgorCSAqICJjYWFtIiBhbmQgbnByb3AtPmZ1bGxfbmFtZS4gVGhlIE9GIG5hbWUgaXNuJ3QgZGlzdGluY3RpdmUsCisJICogYnV0IGRvZXMgc2VwYXJhdGUgaW5zdGFuY2VzCisJICovCisJcGVyZm1vbiA9IChzdHJ1Y3QgY2FhbV9wZXJmbW9uIF9fZm9yY2UgKikmY3RybC0+cGVyZm1vbjsKKworCWN0cmxwcml2LT5kZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcigiY2FhbSIsIE5VTEwpOworCWN0cmxwcml2LT5jdGwgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImN0bCIsIGN0cmxwcml2LT5kZnNfcm9vdCk7CisKKwkvKiBDb250cm9sbGVyLWxldmVsIC0gcGVyZm9ybWFuY2UgbW9uaXRvciBjb3VudGVycyAqLworCWN0cmxwcml2LT5jdGxfcnFfZGVxdWV1ZWQgPQorCQlkZWJ1Z2ZzX2NyZWF0ZV91NjQoInJxX2RlcXVldWVkIiwKKwkJCQkgICBTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVJHUlAgfCBTX0lST1RILAorCQkJCSAgIGN0cmxwcml2LT5jdGwsICZwZXJmbW9uLT5yZXFfZGVxdWV1ZWQpOworCWN0cmxwcml2LT5jdGxfb2JfZW5jX3JlcSA9CisJCWRlYnVnZnNfY3JlYXRlX3U2NCgib2JfcnFfZW5jcnlwdGVkIiwKKwkJCQkgICBTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVJHUlAgfCBTX0lST1RILAorCQkJCSAgIGN0cmxwcml2LT5jdGwsICZwZXJmbW9uLT5vYl9lbmNfcmVxKTsKKwljdHJscHJpdi0+Y3RsX2liX2RlY19yZXEgPQorCQlkZWJ1Z2ZzX2NyZWF0ZV91NjQoImliX3JxX2RlY3J5cHRlZCIsCisJCQkJICAgU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lSR1JQIHwgU19JUk9USCwKKwkJCQkgICBjdHJscHJpdi0+Y3RsLCAmcGVyZm1vbi0+aWJfZGVjX3JlcSk7CisJY3RybHByaXYtPmN0bF9vYl9lbmNfYnl0ZXMgPQorCQlkZWJ1Z2ZzX2NyZWF0ZV91NjQoIm9iX2J5dGVzX2VuY3J5cHRlZCIsCisJCQkJICAgU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lSR1JQIHwgU19JUk9USCwKKwkJCQkgICBjdHJscHJpdi0+Y3RsLCAmcGVyZm1vbi0+b2JfZW5jX2J5dGVzKTsKKwljdHJscHJpdi0+Y3RsX29iX3Byb3RfYnl0ZXMgPQorCQlkZWJ1Z2ZzX2NyZWF0ZV91NjQoIm9iX2J5dGVzX3Byb3RlY3RlZCIsCisJCQkJICAgU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lSR1JQIHwgU19JUk9USCwKKwkJCQkgICBjdHJscHJpdi0+Y3RsLCAmcGVyZm1vbi0+b2JfcHJvdF9ieXRlcyk7CisJY3RybHByaXYtPmN0bF9pYl9kZWNfYnl0ZXMgPQorCQlkZWJ1Z2ZzX2NyZWF0ZV91NjQoImliX2J5dGVzX2RlY3J5cHRlZCIsCisJCQkJICAgU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lSR1JQIHwgU19JUk9USCwKKwkJCQkgICBjdHJscHJpdi0+Y3RsLCAmcGVyZm1vbi0+aWJfZGVjX2J5dGVzKTsKKwljdHJscHJpdi0+Y3RsX2liX3ZhbGlkX2J5dGVzID0KKwkJZGVidWdmc19jcmVhdGVfdTY0KCJpYl9ieXRlc192YWxpZGF0ZWQiLAorCQkJCSAgIFNfSUZDSFIgfCBTX0lSVVNSIHwgU19JUkdSUCB8IFNfSVJPVEgsCisJCQkJICAgY3RybHByaXYtPmN0bCwgJnBlcmZtb24tPmliX3ZhbGlkX2J5dGVzKTsKKworCS8qIENvbnRyb2xsZXIgbGV2ZWwgLSBnbG9iYWwgc3RhdHVzIHZhbHVlcyAqLworCWN0cmxwcml2LT5jdGxfZmF1bHRhZGRyID0KKwkJZGVidWdmc19jcmVhdGVfdTY0KCJmYXVsdF9hZGRyIiwKKwkJCQkgICBTX0lGQ0hSIHwgU19JUlVTUiB8IFNfSVJHUlAgfCBTX0lST1RILAorCQkJCSAgIGN0cmxwcml2LT5jdGwsICZwZXJmbW9uLT5mYXVsdGFkZHIpOworCWN0cmxwcml2LT5jdGxfZmF1bHRkZXRhaWwgPQorCQlkZWJ1Z2ZzX2NyZWF0ZV91MzIoImZhdWx0X2RldGFpbCIsCisJCQkJICAgU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lSR1JQIHwgU19JUk9USCwKKwkJCQkgICBjdHJscHJpdi0+Y3RsLCAmcGVyZm1vbi0+ZmF1bHRkZXRhaWwpOworCWN0cmxwcml2LT5jdGxfZmF1bHRzdGF0dXMgPQorCQlkZWJ1Z2ZzX2NyZWF0ZV91MzIoImZhdWx0X3N0YXR1cyIsCisJCQkJICAgU19JRkNIUiB8IFNfSVJVU1IgfCBTX0lSR1JQIHwgU19JUk9USCwKKwkJCQkgICBjdHJscHJpdi0+Y3RsLCAmcGVyZm1vbi0+c3RhdHVzKTsKKworCS8qIEludGVybmFsIGNvdmVyaW5nIGtleXMgKHVzZWZ1bCBpbiBub24tc2VjdXJlIG1vZGUgb25seSkgKi8KKwljdHJscHJpdi0+Y3RsX2tla193cmFwLmRhdGEgPSAmY3RybHByaXYtPmN0cmwtPmtla1swXTsKKwljdHJscHJpdi0+Y3RsX2tla193cmFwLnNpemUgPSBLRUtfS0VZX1NJWkUgKiBzaXplb2YodTMyKTsKKwljdHJscHJpdi0+Y3RsX2tlayA9IGRlYnVnZnNfY3JlYXRlX2Jsb2IoImtlayIsCisJCQkJCQlTX0lGQ0hSIHwgU19JUlVTUiB8CisJCQkJCQlTX0lSR1JQIHwgU19JUk9USCwKKwkJCQkJCWN0cmxwcml2LT5jdGwsCisJCQkJCQkmY3RybHByaXYtPmN0bF9rZWtfd3JhcCk7CisKKwljdHJscHJpdi0+Y3RsX3RrZWtfd3JhcC5kYXRhID0gJmN0cmxwcml2LT5jdHJsLT50a2VrWzBdOworCWN0cmxwcml2LT5jdGxfdGtla193cmFwLnNpemUgPSBLRUtfS0VZX1NJWkUgKiBzaXplb2YodTMyKTsKKwljdHJscHJpdi0+Y3RsX3RrZWsgPSBkZWJ1Z2ZzX2NyZWF0ZV9ibG9iKCJ0a2VrIiwKKwkJCQkJCSBTX0lGQ0hSIHwgU19JUlVTUiB8CisJCQkJCQkgU19JUkdSUCB8IFNfSVJPVEgsCisJCQkJCQkgY3RybHByaXYtPmN0bCwKKwkJCQkJCSAmY3RybHByaXYtPmN0bF90a2VrX3dyYXApOworCisJY3RybHByaXYtPmN0bF90ZHNrX3dyYXAuZGF0YSA9ICZjdHJscHJpdi0+Y3RybC0+dGRza1swXTsKKwljdHJscHJpdi0+Y3RsX3Rkc2tfd3JhcC5zaXplID0gS0VLX0tFWV9TSVpFICogc2l6ZW9mKHUzMik7CisJY3RybHByaXYtPmN0bF90ZHNrID0gZGVidWdmc19jcmVhdGVfYmxvYigidGRzayIsCisJCQkJCQkgU19JRkNIUiB8IFNfSVJVU1IgfAorCQkJCQkJIFNfSVJHUlAgfCBTX0lST1RILAorCQkJCQkJIGN0cmxwcml2LT5jdGwsCisJCQkJCQkgJmN0cmxwcml2LT5jdGxfdGRza193cmFwKTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBjYWFtX21hdGNoW10gPSB7CisJeworCQkuY29tcGF0aWJsZSA9ICJmc2wsc2VjLXY0LjAiLAorCX0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgY2FhbV9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNhYW1fZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImNhYW0iLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gY2FhbV9tYXRjaCwKKwl9LAorCS5wcm9iZSAgICAgICA9IGNhYW1fcHJvYmUsCisJLnJlbW92ZSAgICAgID0gX19kZXZleGl0X3AoY2FhbV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY2FhbV9iYXNlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZjYWFtX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjYWFtX2Jhc2VfZXhpdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmY2FhbV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChjYWFtX2Jhc2VfaW5pdCk7Cittb2R1bGVfZXhpdChjYWFtX2Jhc2VfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiRlNMIENBQU0gcmVxdWVzdCBiYWNrZW5kIik7CitNT0RVTEVfQVVUSE9SKCJGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciAtIE5NRy9TVEMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2NhYW0vZGVzYy5oIGIvZHJpdmVycy9jcnlwdG8vY2FhbS9kZXNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc0YTc1OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY3J5cHRvL2NhYW0vZGVzYy5oCkBAIC0wLDAgKzEsMTYwNSBAQAorLyoKKyAqIENBQU0gZGVzY3JpcHRvciBjb21wb3NpdGlvbiBoZWFkZXIKKyAqIERlZmluaXRpb25zIHRvIHN1cHBvcnQgQ0FBTSBkZXNjcmlwdG9yIGluc3RydWN0aW9uIGdlbmVyYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgMjAwOC0yMDExIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKi8KKworI2lmbmRlZiBERVNDX0gKKyNkZWZpbmUgREVTQ19ICisKKy8qIE1heCBzaXplIG9mIGFueSBDQUFNIGRlc2NyaXB0b3IgaW4gMzItYml0IHdvcmRzLCBpbmNsdXNpdmUgb2YgaGVhZGVyICovCisjZGVmaW5lIE1BWF9DQUFNX0RFU0NTSVpFICAgICAgIDY0CisKKy8qIEJsb2NrIHNpemUgb2YgYW55IGVudGl0eSBjb3ZlcmVkL3VuY292ZXJlZCB3aXRoIGEgS0VLL1RLRUsgKi8KKyNkZWZpbmUgS0VLX0JMT0NLU0laRQkJMTYKKworLyoKKyAqIFN1cHBvcnRlZCBkZXNjcmlwdG9yIGNvbW1hbmQgdHlwZXMgYXMgdGhleSBzaG93IHVwCisgKiBpbnNpZGUgYSBkZXNjcmlwdG9yIGNvbW1hbmQgd29yZC4KKyAqLworI2RlZmluZSBDTURfU0hJRlQgICAgICAgICAgICAgICAyNworI2RlZmluZSBDTURfTUFTSyAgICAgICAgICAgICAgICAweGY4MDAwMDAwCisKKyNkZWZpbmUgQ01EX0tFWSAgICAgICAgICAgICAgICAgKDB4MDAgPDwgQ01EX1NISUZUKQorI2RlZmluZSBDTURfU0VRX0tFWSAgICAgICAgICAgICAoMHgwMSA8PCBDTURfU0hJRlQpCisjZGVmaW5lIENNRF9MT0FEICAgICAgICAgICAgICAgICgweDAyIDw8IENNRF9TSElGVCkKKyNkZWZpbmUgQ01EX1NFUV9MT0FEICAgICAgICAgICAgKDB4MDMgPDwgQ01EX1NISUZUKQorI2RlZmluZSBDTURfRklGT19MT0FEICAgICAgICAgICAoMHgwNCA8PCBDTURfU0hJRlQpCisjZGVmaW5lIENNRF9TRVFfRklGT19MT0FEICAgICAgICgweDA1IDw8IENNRF9TSElGVCkKKyNkZWZpbmUgQ01EX1NUT1JFICAgICAgICAgICAgICAgKDB4MGEgPDwgQ01EX1NISUZUKQorI2RlZmluZSBDTURfU0VRX1NUT1JFICAgICAgICAgICAoMHgwYiA8PCBDTURfU0hJRlQpCisjZGVmaW5lIENNRF9GSUZPX1NUT1JFICAgICAgICAgICgweDBjIDw8IENNRF9TSElGVCkKKyNkZWZpbmUgQ01EX1NFUV9GSUZPX1NUT1JFICAgICAgKDB4MGQgPDwgQ01EX1NISUZUKQorI2RlZmluZSBDTURfTU9WRV9MRU4gICAgICAgICAgICAoMHgwZSA8PCBDTURfU0hJRlQpCisjZGVmaW5lIENNRF9NT1ZFICAgICAgICAgICAgICAgICgweDBmIDw8IENNRF9TSElGVCkKKyNkZWZpbmUgQ01EX09QRVJBVElPTiAgICAgICAgICAgKDB4MTAgPDwgQ01EX1NISUZUKQorI2RlZmluZSBDTURfU0lHTkFUVVJFICAgICAgICAgICAoMHgxMiA8PCBDTURfU0hJRlQpCisjZGVmaW5lIENNRF9KVU1QICAgICAgICAgICAgICAgICgweDE0IDw8IENNRF9TSElGVCkKKyNkZWZpbmUgQ01EX01BVEggICAgICAgICAgICAgICAgKDB4MTUgPDwgQ01EX1NISUZUKQorI2RlZmluZSBDTURfREVTQ19IRFIgICAgICAgICAgICAoMHgxNiA8PCBDTURfU0hJRlQpCisjZGVmaW5lIENNRF9TSEFSRURfREVTQ19IRFIgICAgICgweDE3IDw8IENNRF9TSElGVCkKKyNkZWZpbmUgQ01EX1NFUV9JTl9QVFIgICAgICAgICAgKDB4MWUgPDwgQ01EX1NISUZUKQorI2RlZmluZSBDTURfU0VRX09VVF9QVFIgICAgICAgICAoMHgxZiA8PCBDTURfU0hJRlQpCisKKy8qIEdlbmVyYWwtcHVycG9zZSBjbGFzcyBzZWxlY3RvciBmb3IgYWxsIGNvbW1hbmRzICovCisjZGVmaW5lIENMQVNTX1NISUZUICAgICAgICAgICAgIDI1CisjZGVmaW5lIENMQVNTX01BU0sgICAgICAgICAgICAgICgweDAzIDw8IENMQVNTX1NISUZUKQorCisjZGVmaW5lIENMQVNTX05PTkUgICAgICAgICAgICAgICgweDAwIDw8IENMQVNTX1NISUZUKQorI2RlZmluZSBDTEFTU18xICAgICAgICAgICAgICAgICAoMHgwMSA8PCBDTEFTU19TSElGVCkKKyNkZWZpbmUgQ0xBU1NfMiAgICAgICAgICAgICAgICAgKDB4MDIgPDwgQ0xBU1NfU0hJRlQpCisjZGVmaW5lIENMQVNTX0JPVEggICAgICAgICAgICAgICgweDAzIDw8IENMQVNTX1NISUZUKQorCisvKgorICogRGVzY3JpcHRvciBoZWFkZXIgY29tbWFuZCBjb25zdHJ1Y3RzCisgKiBDb3ZlcnMgc2hhcmVkLCBqb2IsIGFuZCB0cnVzdGVkIGRlc2NyaXB0b3IgaGVhZGVycworICovCisKKy8qCisgKiBEbyBOb3QgUnVuIC0gbWFya3MgYSBkZXNjcmlwdG9yIGluZXhlY3V0YWJsZSBpZiB0aGVyZSB3YXMKKyAqIGEgcHJlY2VkaW5nIGVycm9yIHNvbWV3aGVyZQorICovCisjZGVmaW5lIEhEUl9ETlIgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKworLyoKKyAqIE9ORSAtIHNob3VsZCBhbHdheXMgYmUgc2V0LiBDb21iaW5hdGlvbiBvZiBPTkUgKGFsd2F5cworICogc2V0KSBhbmQgWlJPIChhbHdheXMgY2xlYXIpIGZvcm1zIGFuIGVuZGlhbm5lc3Mgc2FuaXR5IGNoZWNrCisgKi8KKyNkZWZpbmUgSERSX09ORSAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBIRFJfWlJPICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisKKy8qIFN0YXJ0IEluZGV4IG9yIFNoYXJlZERlc2MgTGVuZ3RoICovCisjZGVmaW5lIEhEUl9TVEFSVF9JRFhfTUFTSyAgICAgIDB4M2YKKyNkZWZpbmUgSERSX1NUQVJUX0lEWF9TSElGVCAgICAgMTYKKworLyogSWYgc2hhcmVkIGRlc2NyaXB0b3IgaGVhZGVyLCA2LWJpdCBsZW5ndGggKi8KKyNkZWZpbmUgSERSX0RFU0NMRU5fU0hSX01BU0sgIDB4M2YKKworLyogSWYgbm9uLXNoYXJlZCBoZWFkZXIsIDctYml0IGxlbmd0aCAqLworI2RlZmluZSBIRFJfREVTQ0xFTl9NQVNLICAgICAgMHg3ZgorCisvKiBUaGlzIGlzIGEgVHJ1c3RlZERlc2MgKGlmIG5vdCBTaGFyZWREZXNjKSAqLworI2RlZmluZSBIRFJfVFJVU1RFRCAgICAgICAgICAgICAweDAwMDA0MDAwCisKKy8qIE1ha2UgaW50byBUcnVzdGVkRGVzYyAoaWYgbm90IFNoYXJlZERlc2MpICovCisjZGVmaW5lIEhEUl9NQUtFX1RSVVNURUQgICAgICAgIDB4MDAwMDIwMDAKKworLyogU2F2ZSBjb250ZXh0IGlmIHNlbGYtc2hhcmVkIChpZiBTaGFyZWREZXNjKSAqLworI2RlZmluZSBIRFJfU0FWRUNUWCAgICAgICAgICAgICAweDAwMDAxMDAwCisKKy8qIE5leHQgaXRlbSBwb2ludHMgdG8gU2hhcmVkRGVzYyAqLworI2RlZmluZSBIRFJfU0hBUkVEICAgICAgICAgICAgICAweDAwMDAxMDAwCisKKy8qCisgKiBSZXZlcnNlIEV4ZWN1dGlvbiBPcmRlciAtIGV4ZWN1dGUgSm9iRGVzYyBmaXJzdCwgdGhlbgorICogZXhlY3V0ZSBTaGFyZWREZXNjIChub3JtYWxseSBTaGFyZWREZXNjIGdvZXMgZmlyc3QpLgorICovCisjZGVmaW5lIEhEUl9SRVZFUlNFICAgICAgICAgICAgIDB4MDAwMDA4MDAKKworLyogUHJvcG9nYXRlIEROUiBwcm9wZXJ0eSB0byBTaGFyZWREZXNjICovCisjZGVmaW5lIEhEUl9QUk9QX0ROUiAgICAgICAgICAgIDB4MDAwMDA4MDAKKworLyogSm9iRGVzYy9TaGFyZWREZXNjIHNoYXJlIHByb3BlcnR5ICovCisjZGVmaW5lIEhEUl9TRF9TSEFSRV9NQVNLICAgICAgIDB4MDMKKyNkZWZpbmUgSERSX1NEX1NIQVJFX1NISUZUICAgICAgOAorI2RlZmluZSBIRFJfSkRfU0hBUkVfTUFTSyAgICAgICAweDA3CisjZGVmaW5lIEhEUl9KRF9TSEFSRV9TSElGVCAgICAgIDgKKworI2RlZmluZSBIRFJfU0hBUkVfTkVWRVIgICAgICAgICAoMHgwMCA8PCBIRFJfU0RfU0hBUkVfU0hJRlQpCisjZGVmaW5lIEhEUl9TSEFSRV9XQUlUICAgICAgICAgICgweDAxIDw8IEhEUl9TRF9TSEFSRV9TSElGVCkKKyNkZWZpbmUgSERSX1NIQVJFX1NFUklBTCAgICAgICAgKDB4MDIgPDwgSERSX1NEX1NIQVJFX1NISUZUKQorI2RlZmluZSBIRFJfU0hBUkVfQUxXQVlTICAgICAgICAoMHgwMyA8PCBIRFJfU0RfU0hBUkVfU0hJRlQpCisjZGVmaW5lIEhEUl9TSEFSRV9ERUZFUiAgICAgICAgICgweDA0IDw8IEhEUl9TRF9TSEFSRV9TSElGVCkKKworLyogSm9iRGVzYy9TaGFyZWREZXNjIGRlc2NyaXB0b3IgbGVuZ3RoICovCisjZGVmaW5lIEhEUl9KRF9MRU5HVEhfTUFTSyAgICAgIDB4N2YKKyNkZWZpbmUgSERSX1NEX0xFTkdUSF9NQVNLICAgICAgMHgzZgorCisvKgorICogS0VZL1NFUV9LRVkgQ29tbWFuZCBDb25zdHJ1Y3RzCisgKi8KKworLyogS2V5IERlc3RpbmF0aW9uIENsYXNzOiAwMSA9IENsYXNzIDEsIDAyIC0gQ2xhc3MgMiAgKi8KKyNkZWZpbmUgS0VZX0RFU1RfQ0xBU1NfU0hJRlQgICAgMjUgIC8qIHVzZSBDTEFTU18xIG9yIENMQVNTXzIgKi8KKyNkZWZpbmUgS0VZX0RFU1RfQ0xBU1NfTUFTSyAgICAgKDB4MDMgPDwgS0VZX0RFU1RfQ0xBU1NfU0hJRlQpCisKKy8qIFNjYXR0ZXItR2F0aGVyIFRhYmxlL1ZhcmlhYmxlIExlbmd0aCBGaWVsZCAqLworI2RlZmluZSBLRVlfU0dGICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEtFWV9WTEYgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKworLyogSW1tZWRpYXRlIC0gS2V5IGZvbGxvd3MgY29tbWFuZCBpbiB0aGUgZGVzY3JpcHRvciAqLworI2RlZmluZSBLRVlfSU1NICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisKKy8qCisgKiBFbmNyeXB0ZWQgLSBLZXkgaXMgZW5jcnlwdGVkIGVpdGhlciB3aXRoIHRoZSBLRUssIG9yCisgKiB3aXRoIHRoZSBUREtFSyBpZiBUSyBpcyBzZXQKKyAqLworI2RlZmluZSBLRVlfRU5DICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisKKy8qCisgKiBObyBXcml0ZSBCYWNrIC0gRG8gbm90IGFsbG93IGtleSB0byBiZSBGSUZPIFNUT1JFZAorICovCisjZGVmaW5lIEtFWV9OV0IJCQkweDAwMjAwMDAwCisKKy8qCisgKiBFbmhhbmNlZCBFbmNyeXB0aW9uIG9mIEtleQorICovCisjZGVmaW5lIEtFWV9FS1QJCQkweDAwMTAwMDAwCisKKy8qCisgKiBFbmNyeXB0ZWQgd2l0aCBUcnVzdGVkIEtleQorICovCisjZGVmaW5lIEtFWV9USwkJCTB4MDAwMDgwMDAKKworLyoKKyAqIEtERVNUIC0gS2V5IERlc3RpbmF0aW9uOiAwIC0gY2xhc3Mga2V5IHJlZ2lzdGVyLAorICogMSAtIFBLSEEgJ2UnLCAyIC0gQUZIQSBTYm94LCAzIC0gTURIQSBzcGxpdC1rZXkKKyAqLworI2RlZmluZSBLRVlfREVTVF9TSElGVCAgICAgICAgICAxNgorI2RlZmluZSBLRVlfREVTVF9NQVNLICAgICAgICAgICAoMHgwMyA8PCBLRVlfREVTVF9TSElGVCkKKworI2RlZmluZSBLRVlfREVTVF9DTEFTU19SRUcgICAgICAoMHgwMCA8PCBLRVlfREVTVF9TSElGVCkKKyNkZWZpbmUgS0VZX0RFU1RfUEtIQV9FICAgICAgICAgKDB4MDEgPDwgS0VZX0RFU1RfU0hJRlQpCisjZGVmaW5lIEtFWV9ERVNUX0FGSEFfU0JPWCAgICAgICgweDAyIDw8IEtFWV9ERVNUX1NISUZUKQorI2RlZmluZSBLRVlfREVTVF9NREhBX1NQTElUICAgICAoMHgwMyA8PCBLRVlfREVTVF9TSElGVCkKKworLyogTGVuZ3RoIGluIGJ5dGVzICovCisjZGVmaW5lIEtFWV9MRU5HVEhfTUFTSyAgICAgICAgIDB4MDAwMDAzZmYKKworLyoKKyAqIExPQUQvU0VRX0xPQUQvU1RPUkUvU0VRX1NUT1JFIENvbW1hbmQgQ29uc3RydWN0cworICovCisKKy8qCisgKiBMb2FkL1N0b3JlIERlc3RpbmF0aW9uOiAwID0gY2xhc3MgaW5kZXBlbmRlbnQgQ0NCLAorICogMSA9IGNsYXNzIDEgQ0NCLCAyID0gY2xhc3MgMiBDQ0IsIDMgPSBERUNPCisgKi8KKyNkZWZpbmUgTERTVF9DTEFTU19TSElGVCAgICAgICAgMjUKKyNkZWZpbmUgTERTVF9DTEFTU19NQVNLICAgICAgICAgKDB4MDMgPDwgTERTVF9DTEFTU19TSElGVCkKKyNkZWZpbmUgTERTVF9DTEFTU19JTkRfQ0NCICAgICAgKDB4MDAgPDwgTERTVF9DTEFTU19TSElGVCkKKyNkZWZpbmUgTERTVF9DTEFTU18xX0NDQiAgICAgICAgKDB4MDEgPDwgTERTVF9DTEFTU19TSElGVCkKKyNkZWZpbmUgTERTVF9DTEFTU18yX0NDQiAgICAgICAgKDB4MDIgPDwgTERTVF9DTEFTU19TSElGVCkKKyNkZWZpbmUgTERTVF9DTEFTU19ERUNPICAgICAgICAgKDB4MDMgPDwgTERTVF9DTEFTU19TSElGVCkKKworLyogU2NhdHRlci1HYXRoZXIgVGFibGUvVmFyaWFibGUgTGVuZ3RoIEZpZWxkICovCisjZGVmaW5lIExEU1RfU0dGICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgTERTVF9WTEYJCUxEU1RfU0dGCisKKy8qIEltbWVkaWF0ZSAtIEtleSBmb2xsb3dzIHRoaXMgY29tbWFuZCBpbiBkZXNjcmlwdG9yICAgICovCisjZGVmaW5lIExEU1RfSU1NX01BU0sgICAgICAgICAgIDEKKyNkZWZpbmUgTERTVF9JTU1fU0hJRlQgICAgICAgICAgMjMKKyNkZWZpbmUgTERTVF9JTU0gICAgICAgICAgICAgICAgKExEU1RfSU1NX01BU0sgPDwgTERTVF9JTU1fU0hJRlQpCisKKy8qIFNSQy9EU1QgLSBEZXN0aW5hdGlvbiBmb3IgTE9BRCwgU291cmNlIGZvciBTVE9SRSAgICovCisjZGVmaW5lIExEU1RfU1JDRFNUX1NISUZUICAgICAgIDE2CisjZGVmaW5lIExEU1RfU1JDRFNUX01BU0sgICAgICAgICgweDdmIDw8IExEU1RfU1JDRFNUX1NISUZUKQorCisjZGVmaW5lIExEU1RfU1JDRFNUX0JZVEVfQ09OVEVYVAkoMHgyMCA8PCBMRFNUX1NSQ0RTVF9TSElGVCkKKyNkZWZpbmUgTERTVF9TUkNEU1RfQllURV9LRVkJCSgweDQwIDw8IExEU1RfU1JDRFNUX1NISUZUKQorI2RlZmluZSBMRFNUX1NSQ0RTVF9CWVRFX0lORklGTwkJKDB4N2MgPDwgTERTVF9TUkNEU1RfU0hJRlQpCisjZGVmaW5lIExEU1RfU1JDRFNUX0JZVEVfT1VURklGTwkoMHg3ZSA8PCBMRFNUX1NSQ0RTVF9TSElGVCkKKworI2RlZmluZSBMRFNUX1NSQ0RTVF9XT1JEX01PREVfUkVHCSgweDAwIDw8IExEU1RfU1JDRFNUX1NISUZUKQorI2RlZmluZSBMRFNUX1NSQ0RTVF9XT1JEX0tFWVNaX1JFRwkoMHgwMSA8PCBMRFNUX1NSQ0RTVF9TSElGVCkKKyNkZWZpbmUgTERTVF9TUkNEU1RfV09SRF9EQVRBU1pfUkVHCSgweDAyIDw8IExEU1RfU1JDRFNUX1NISUZUKQorI2RlZmluZSBMRFNUX1NSQ0RTVF9XT1JEX0lDVlNaX1JFRwkoMHgwMyA8PCBMRFNUX1NSQ0RTVF9TSElGVCkKKyNkZWZpbmUgTERTVF9TUkNEU1RfV09SRF9DSEFDVFJMCSgweDA2IDw8IExEU1RfU1JDRFNUX1NISUZUKQorI2RlZmluZSBMRFNUX1NSQ0RTVF9XT1JEX0RFQ09DVFJMICAgICAgICgweDA2IDw8IExEU1RfU1JDRFNUX1NISUZUKQorI2RlZmluZSBMRFNUX1NSQ0RTVF9XT1JEX0lSUUNUUkwJKDB4MDcgPDwgTERTVF9TUkNEU1RfU0hJRlQpCisjZGVmaW5lIExEU1RfU1JDRFNUX1dPUkRfREVDT19QQ0xPVlJEICAgKDB4MDcgPDwgTERTVF9TUkNEU1RfU0hJRlQpCisjZGVmaW5lIExEU1RfU1JDRFNUX1dPUkRfQ0xSVwkJKDB4MDggPDwgTERTVF9TUkNEU1RfU0hJRlQpCisjZGVmaW5lIExEU1RfU1JDRFNUX1dPUkRfREVDT19NQVRIMCAgICAgKDB4MDggPDwgTERTVF9TUkNEU1RfU0hJRlQpCisjZGVmaW5lIExEU1RfU1JDRFNUX1dPUkRfU1RBVAkJKDB4MDkgPDwgTERTVF9TUkNEU1RfU0hJRlQpCisjZGVmaW5lIExEU1RfU1JDRFNUX1dPUkRfREVDT19NQVRIMSAgICAgKDB4MDkgPDwgTERTVF9TUkNEU1RfU0hJRlQpCisjZGVmaW5lIExEU1RfU1JDRFNUX1dPUkRfREVDT19NQVRIMiAgICAgKDB4MGEgPDwgTERTVF9TUkNEU1RfU0hJRlQpCisjZGVmaW5lIExEU1RfU1JDRFNUX1dPUkRfREVDT19BQURfU1ogICAgKDB4MGIgPDwgTERTVF9TUkNEU1RfU0hJRlQpCisjZGVmaW5lIExEU1RfU1JDRFNUX1dPUkRfREVDT19NQVRIMyAgICAgKDB4MGIgPDwgTERTVF9TUkNEU1RfU0hJRlQpCisjZGVmaW5lIExEU1RfU1JDRFNUX1dPUkRfQ0xBU1MxX0lDVl9TWiAgKDB4MGMgPDwgTERTVF9TUkNEU1RfU0hJRlQpCisjZGVmaW5lIExEU1RfU1JDRFNUX1dPUkRfQUxURFNfQ0xBU1MxICAgKDB4MGYgPDwgTERTVF9TUkNEU1RfU0hJRlQpCisjZGVmaW5lIExEU1RfU1JDRFNUX1dPUkRfUEtIQV9BX1NaICAgICAgKDB4MTAgPDwgTERTVF9TUkNEU1RfU0hJRlQpCisjZGVmaW5lIExEU1RfU1JDRFNUX1dPUkRfUEtIQV9CX1NaICAgICAgKDB4MTEgPDwgTERTVF9TUkNEU1RfU0hJRlQpCisjZGVmaW5lIExEU1RfU1JDRFNUX1dPUkRfUEtIQV9OX1NaICAgICAgKDB4MTIgPDwgTERTVF9TUkNEU1RfU0hJRlQpCisjZGVmaW5lIExEU1RfU1JDRFNUX1dPUkRfUEtIQV9FX1NaICAgICAgKDB4MTMgPDwgTERTVF9TUkNEU1RfU0hJRlQpCisjZGVmaW5lIExEU1RfU1JDRFNUX1dPUkRfREVTQ0JVRiAgICAgICAgKDB4NDAgPDwgTERTVF9TUkNEU1RfU0hJRlQpCisjZGVmaW5lIExEU1RfU1JDRFNUX1dPUkRfSU5GT19GSUZPICAgICAgKDB4N2EgPDwgTERTVF9TUkNEU1RfU0hJRlQpCisKKy8qIE9mZnNldCBpbiBzb3VyY2UvZGVzdGluYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMRFNUX09GRlNFVF9TSElGVCAgICAgICA4CisjZGVmaW5lIExEU1RfT0ZGU0VUX01BU0sgICAgICAgICgweGZmIDw8IExEU1RfT0ZGU0VUX1NISUZUKQorCisvKiBMRE9GRiBkZWZpbml0aW9ucyB1c2VkIHdoZW4gRFNUID0gTERTVF9TUkNEU1RfV09SRF9ERUNPQ1RSTCAqLworLyogVGhlc2UgY291bGQgYWxzbyBiZSBzaGlmdGVkIGJ5IExEU1RfT0ZGU0VUX1NISUZUIC0gdGhpcyByZWFkcyBiZXR0ZXIgKi8KKyNkZWZpbmUgTERPRkZfQ0hHX1NIQVJFX1NISUZUICAgICAgICAwCisjZGVmaW5lIExET0ZGX0NIR19TSEFSRV9NQVNLICAgICAgICAgKDB4MyA8PCBMRE9GRl9DSEdfU0hBUkVfU0hJRlQpCisjZGVmaW5lIExET0ZGX0NIR19TSEFSRV9ORVZFUiAgICAgICAgKDB4MSA8PCBMRE9GRl9DSEdfU0hBUkVfU0hJRlQpCisjZGVmaW5lIExET0ZGX0NIR19TSEFSRV9PS19OT19QUk9QICAgKDB4MiA8PCBMRE9GRl9DSEdfU0hBUkVfU0hJRlQpCisjZGVmaW5lIExET0ZGX0NIR19TSEFSRV9PS19QUk9QICAgICAgKDB4MyA8PCBMRE9GRl9DSEdfU0hBUkVfU0hJRlQpCisKKyNkZWZpbmUgTERPRkZfRU5BQkxFX0FVVE9fTkZJRk8gICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBMRE9GRl9ESVNBQkxFX0FVVE9fTkZJRk8gICAgICAgICgxIDw8IDMpCisKKyNkZWZpbmUgTERPRkZfQ0hHX05PTlNFUUxJT0ROX1NISUZUICAgICA0CisjZGVmaW5lIExET0ZGX0NIR19OT05TRVFMSU9ETl9NQVNLICAgICAgKDB4MyA8PCBMRE9GRl9DSEdfTk9OU0VRTElPRE5fU0hJRlQpCisjZGVmaW5lIExET0ZGX0NIR19OT05TRVFMSU9ETl9TRVEgICAgICAgKDB4MSA8PCBMRE9GRl9DSEdfTk9OU0VRTElPRE5fU0hJRlQpCisjZGVmaW5lIExET0ZGX0NIR19OT05TRVFMSU9ETl9OT05fU0VRICAgKDB4MiA8PCBMRE9GRl9DSEdfTk9OU0VRTElPRE5fU0hJRlQpCisjZGVmaW5lIExET0ZGX0NIR19OT05TRVFMSU9ETl9UUlVTVEVEICAgKDB4MyA8PCBMRE9GRl9DSEdfTk9OU0VRTElPRE5fU0hJRlQpCisKKyNkZWZpbmUgTERPRkZfQ0hHX1NFUUxJT0ROX1NISUZUICAgICA2CisjZGVmaW5lIExET0ZGX0NIR19TRVFMSU9ETl9NQVNLICAgICAgKDB4MyA8PCBMRE9GRl9DSEdfU0VRTElPRE5fU0hJRlQpCisjZGVmaW5lIExET0ZGX0NIR19TRVFMSU9ETl9TRVEgICAgICAgKDB4MSA8PCBMRE9GRl9DSEdfU0VRTElPRE5fU0hJRlQpCisjZGVmaW5lIExET0ZGX0NIR19TRVFMSU9ETl9OT05fU0VRICAgKDB4MiA8PCBMRE9GRl9DSEdfU0VRTElPRE5fU0hJRlQpCisjZGVmaW5lIExET0ZGX0NIR19TRVFMSU9ETl9UUlVTVEVEICAgKDB4MyA8PCBMRE9GRl9DSEdfU0VRTElPRE5fU0hJRlQpCisKKy8qIERhdGEgbGVuZ3RoIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTERTVF9MRU5fU0hJRlQgICAgICAgICAgMAorI2RlZmluZSBMRFNUX0xFTl9NQVNLICAgICAgICAgICAoMHhmZiA8PCBMRFNUX0xFTl9TSElGVCkKKworLyogU3BlY2lhbCBMZW5ndGggZGVmaW5pdGlvbnMgd2hlbiBkc3Q9ZGVjby1jdHJsICovCisjZGVmaW5lIExETEVOX0VOQUJMRV9PU0xfQ09VTlQgICAgICAoMSA8PCA3KQorI2RlZmluZSBMRExFTl9SU1RfQ0hBX09GSUZPX1BUUiAgICAgKDEgPDwgNikKKyNkZWZpbmUgTERMRU5fUlNUX09GSUZPICAgICAgICAgICAgICgxIDw8IDUpCisjZGVmaW5lIExETEVOX1NFVF9PRklGT19PRkZfVkFMSUQgICAoMSA8PCA0KQorI2RlZmluZSBMRExFTl9TRVRfT0ZJRk9fT0ZGX1JTVkQgICAgKDEgPDwgMykKKyNkZWZpbmUgTERMRU5fU0VUX09GSUZPX09GRlNFVF9TSElGVCAwCisjZGVmaW5lIExETEVOX1NFVF9PRklGT19PRkZTRVRfTUFTSyAoMyA8PCBMRExFTl9TRVRfT0ZJRk9fT0ZGU0VUX1NISUZUKQorCisvKgorICogRklGT19MT0FEL0ZJRk9fU1RPUkUvU0VRX0ZJRk9fTE9BRC9TRVFfRklGT19TVE9SRQorICogQ29tbWFuZCBDb25zdHJ1Y3RzCisgKi8KKworLyoKKyAqIExvYWQgRGVzdGluYXRpb246IDAgPSBza2lwIChTRVFfRklGT19MT0FEIG9ubHkpLAorICogMSA9IExvYWQgZm9yIENsYXNzMSwgMiA9IExvYWQgZm9yIENsYXNzMiwgMyA9IExvYWQgYm90aAorICogU3RvcmUgU291cmNlOiAwID0gbm9ybWFsLCAxID0gQ2xhc3Mxa2V5LCAyID0gQ2xhc3Mya2V5CisgKi8KKyNkZWZpbmUgRklGT0xEX0NMQVNTX1NISUZUICAgICAgMjUKKyNkZWZpbmUgRklGT0xEX0NMQVNTX01BU0sgICAgICAgKDB4MDMgPDwgRklGT0xEX0NMQVNTX1NISUZUKQorI2RlZmluZSBGSUZPTERfQ0xBU1NfU0tJUCAgICAgICAoMHgwMCA8PCBGSUZPTERfQ0xBU1NfU0hJRlQpCisjZGVmaW5lIEZJRk9MRF9DTEFTU19DTEFTUzEgICAgICgweDAxIDw8IEZJRk9MRF9DTEFTU19TSElGVCkKKyNkZWZpbmUgRklGT0xEX0NMQVNTX0NMQVNTMiAgICAgKDB4MDIgPDwgRklGT0xEX0NMQVNTX1NISUZUKQorI2RlZmluZSBGSUZPTERfQ0xBU1NfQk9USCAgICAgICAoMHgwMyA8PCBGSUZPTERfQ0xBU1NfU0hJRlQpCisKKyNkZWZpbmUgRklGT1NUX0NMQVNTX1NISUZUICAgICAgMjUKKyNkZWZpbmUgRklGT1NUX0NMQVNTX01BU0sgICAgICAgKDB4MDMgPDwgRklGT1NUX0NMQVNTX1NISUZUKQorI2RlZmluZSBGSUZPU1RfQ0xBU1NfTk9STUFMICAgICAoMHgwMCA8PCBGSUZPU1RfQ0xBU1NfU0hJRlQpCisjZGVmaW5lIEZJRk9TVF9DTEFTU19DTEFTUzFLRVkgICgweDAxIDw8IEZJRk9TVF9DTEFTU19TSElGVCkKKyNkZWZpbmUgRklGT1NUX0NMQVNTX0NMQVNTMktFWSAgKDB4MDIgPDwgRklGT1NUX0NMQVNTX1NISUZUKQorCisvKgorICogU2NhdHRlci1HYXRoZXIgVGFibGUvVmFyaWFibGUgTGVuZ3RoIEZpZWxkCisgKiBJZiBzZXQgZm9yIEZJRk9fTE9BRCwgcmVmZXJzIHRvIGEgU0cgdGFibGUuIFdpdGhpbgorICogU0VRX0ZJRk9fTE9BRCwgaXMgdmFyaWFibGUgaW5wdXQgc2VxdWVuY2UKKyAqLworI2RlZmluZSBGSUZPTERTVF9TR0ZfU0hJRlQgICAgICAyNAorI2RlZmluZSBGSUZPTERTVF9TR0ZfTUFTSyAgICAgICAoMSA8PCBGSUZPTERTVF9TR0ZfU0hJRlQpCisjZGVmaW5lIEZJRk9MRFNUX1ZMRl9NQVNLICAgICAgICgxIDw8IEZJRk9MRFNUX1NHRl9TSElGVCkKKyNkZWZpbmUgRklGT0xEU1RfU0dGICAgICAgICAgICAgKDEgPDwgRklGT0xEU1RfU0dGX1NISUZUKQorI2RlZmluZSBGSUZPTERTVF9WTEYgICAgICAgICAgICAoMSA8PCBGSUZPTERTVF9TR0ZfU0hJRlQpCisKKy8qIEltbWVkaWF0ZSAtIERhdGEgZm9sbG93cyBjb21tYW5kIGluIGRlc2NyaXB0b3IgKi8KKyNkZWZpbmUgRklGT0xEX0lNTV9TSElGVCAgICAgIDIzCisjZGVmaW5lIEZJRk9MRF9JTU1fTUFTSyAgICAgICAoMSA8PCBGSUZPTERfSU1NX1NISUZUKQorI2RlZmluZSBGSUZPTERfSU1NICAgICAgICAgICAgKDEgPDwgRklGT0xEX0lNTV9TSElGVCkKKworLyogQ29udGludWUgLSBOb3QgdGhlIGxhc3QgRklGTyBzdG9yZSB0byBjb21lICovCisjZGVmaW5lIEZJRk9TVF9DT05UX1NISUZUICAgICAyMworI2RlZmluZSBGSUZPU1RfQ09OVF9NQVNLICAgICAgKDEgPDwgRklGT1NUX0NPTlRfU0hJRlQpCisjZGVmaW5lIEZJRk9TVF9DT05UX01BU0sgICAgICAoMSA8PCBGSUZPU1RfQ09OVF9TSElGVCkKKworLyoKKyAqIEV4dGVuZGVkIExlbmd0aCAtIHVzZSAzMi1iaXQgZXh0ZW5kZWQgbGVuZ3RoIHRoYXQKKyAqIGZvbGxvd3MgdGhlIHBvaW50ZXIgZmllbGQuIElsbGVnYWwgd2l0aCBJTU0gc2V0CisgKi8KKyNkZWZpbmUgRklGT0xEU1RfRVhUX1NISUZUICAgICAgMjIKKyNkZWZpbmUgRklGT0xEU1RfRVhUX01BU0sgICAgICAgKDEgPDwgRklGT0xEU1RfRVhUX1NISUZUKQorI2RlZmluZSBGSUZPTERTVF9FWFQgICAgICAgICAgICAoMSA8PCBGSUZPTERTVF9FWFRfU0hJRlQpCisKKy8qIElucHV0IGRhdGEgdHlwZS4qLworI2RlZmluZSBGSUZPTERfVFlQRV9TSElGVCAgICAgICAxNgorI2RlZmluZSBGSUZPTERfQ09OVF9UWVBFX1NISUZUICAxOSAvKiBzaGlmdCBwYXN0IGxhc3QtZmx1c2ggYml0cyAqLworI2RlZmluZSBGSUZPTERfVFlQRV9NQVNLICAgICAgICAoMHgzZiA8PCBGSUZPTERfVFlQRV9TSElGVCkKKworLyogUEsgdHlwZXMgKi8KKyNkZWZpbmUgRklGT0xEX1RZUEVfUEsgICAgICAgICAgKDB4MDAgPDwgRklGT0xEX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9MRF9UWVBFX1BLX01BU0sgICAgICgweDMwIDw8IEZJRk9MRF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPTERfVFlQRV9QS19UWVBFTUFTSyAoMHgwZiA8PCBGSUZPTERfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT0xEX1RZUEVfUEtfQTAgICAgICAgKDB4MDAgPDwgRklGT0xEX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9MRF9UWVBFX1BLX0ExICAgICAgICgweDAxIDw8IEZJRk9MRF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPTERfVFlQRV9QS19BMiAgICAgICAoMHgwMiA8PCBGSUZPTERfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT0xEX1RZUEVfUEtfQTMgICAgICAgKDB4MDMgPDwgRklGT0xEX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9MRF9UWVBFX1BLX0IwICAgICAgICgweDA0IDw8IEZJRk9MRF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPTERfVFlQRV9QS19CMSAgICAgICAoMHgwNSA8PCBGSUZPTERfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT0xEX1RZUEVfUEtfQjIgICAgICAgKDB4MDYgPDwgRklGT0xEX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9MRF9UWVBFX1BLX0IzICAgICAgICgweDA3IDw8IEZJRk9MRF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPTERfVFlQRV9QS19OICAgICAgICAoMHgwOCA8PCBGSUZPTERfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT0xEX1RZUEVfUEtfQSAgICAgICAgKDB4MGMgPDwgRklGT0xEX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9MRF9UWVBFX1BLX0IgICAgICAgICgweDBkIDw8IEZJRk9MRF9UWVBFX1NISUZUKQorCisvKiBPdGhlciB0eXBlcy4gTmVlZCB0byBPUiBpbiBsYXN0L2ZsdXNoIGJpdHMgYXMgZGVzaXJlZCAqLworI2RlZmluZSBGSUZPTERfVFlQRV9NU0dfTUFTSyAgICAoMHgzOCA8PCBGSUZPTERfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT0xEX1RZUEVfTVNHICAgICAgICAgKDB4MTAgPDwgRklGT0xEX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9MRF9UWVBFX01TRzFPVVQyICAgICgweDE4IDw8IEZJRk9MRF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPTERfVFlQRV9JViAgICAgICAgICAoMHgyMCA8PCBGSUZPTERfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT0xEX1RZUEVfQklUREFUQSAgICAgKDB4MjggPDwgRklGT0xEX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9MRF9UWVBFX0FBRCAgICAgICAgICgweDMwIDw8IEZJRk9MRF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPTERfVFlQRV9JQ1YgICAgICAgICAoMHgzOCA8PCBGSUZPTERfVFlQRV9TSElGVCkKKworLyogTGFzdC9GbHVzaCBiaXRzIGZvciB1c2Ugd2l0aCAib3RoZXIiIHR5cGVzIGFib3ZlICovCisjZGVmaW5lIEZJRk9MRF9UWVBFX0FDVF9NQVNLICAgICgweDA3IDw8IEZJRk9MRF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPTERfVFlQRV9OT0FDVElPTiAgICAoMHgwMCA8PCBGSUZPTERfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT0xEX1RZUEVfRkxVU0gxICAgICAgKDB4MDEgPDwgRklGT0xEX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9MRF9UWVBFX0xBU1QxICAgICAgICgweDAyIDw8IEZJRk9MRF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPTERfVFlQRV9MQVNUMkZMVVNIICAoMHgwMyA8PCBGSUZPTERfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT0xEX1RZUEVfTEFTVDIgICAgICAgKDB4MDQgPDwgRklGT0xEX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9MRF9UWVBFX0xBU1QyRkxVU0gxICgweDA1IDw8IEZJRk9MRF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPTERfVFlQRV9MQVNUQk9USCAgICAoMHgwNiA8PCBGSUZPTERfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT0xEX1RZUEVfTEFTVEJPVEhGTCAgKDB4MDcgPDwgRklGT0xEX1RZUEVfU0hJRlQpCisKKyNkZWZpbmUgRklGT0xEU1RfTEVOX01BU0sgICAgICAgMHhmZmZmCisjZGVmaW5lIEZJRk9MRFNUX0VYVF9MRU5fTUFTSyAgIDB4ZmZmZmZmZmYKKworLyogT3V0cHV0IGRhdGEgdHlwZXMgKi8KKyNkZWZpbmUgRklGT1NUX1RZUEVfU0hJRlQgICAgICAgMTYKKyNkZWZpbmUgRklGT1NUX1RZUEVfTUFTSyAgICAgICAgKDB4M2YgPDwgRklGT1NUX1RZUEVfU0hJRlQpCisKKyNkZWZpbmUgRklGT1NUX1RZUEVfUEtIQV9BMCAgICAgICgweDAwIDw8IEZJRk9TVF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPU1RfVFlQRV9QS0hBX0ExICAgICAgKDB4MDEgPDwgRklGT1NUX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9TVF9UWVBFX1BLSEFfQTIgICAgICAoMHgwMiA8PCBGSUZPU1RfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT1NUX1RZUEVfUEtIQV9BMyAgICAgICgweDAzIDw8IEZJRk9TVF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPU1RfVFlQRV9QS0hBX0IwICAgICAgKDB4MDQgPDwgRklGT1NUX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9TVF9UWVBFX1BLSEFfQjEgICAgICAoMHgwNSA8PCBGSUZPU1RfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT1NUX1RZUEVfUEtIQV9CMiAgICAgICgweDA2IDw8IEZJRk9TVF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPU1RfVFlQRV9QS0hBX0IzICAgICAgKDB4MDcgPDwgRklGT1NUX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9TVF9UWVBFX1BLSEFfTiAgICAgICAoMHgwOCA8PCBGSUZPU1RfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT1NUX1RZUEVfUEtIQV9BICAgICAgICgweDBjIDw8IEZJRk9TVF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPU1RfVFlQRV9QS0hBX0IgICAgICAgKDB4MGQgPDwgRklGT1NUX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9TVF9UWVBFX0FGX1NCT1hfSktFSyAoMHgxMCA8PCBGSUZPU1RfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT1NUX1RZUEVfQUZfU0JPWF9US0VLICgweDIxIDw8IEZJRk9TVF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPU1RfVFlQRV9QS0hBX0VfSktFSyAgKDB4MjIgPDwgRklGT1NUX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9TVF9UWVBFX1BLSEFfRV9US0VLICAoMHgyMyA8PCBGSUZPU1RfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT1NUX1RZUEVfS0VZX0tFSyAgICAgICgweDI0IDw8IEZJRk9TVF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPU1RfVFlQRV9LRVlfVEtFSyAgICAgKDB4MjUgPDwgRklGT1NUX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9TVF9UWVBFX1NQTElUX0tFSyAgICAoMHgyNiA8PCBGSUZPU1RfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT1NUX1RZUEVfU1BMSVRfVEtFSyAgICgweDI3IDw8IEZJRk9TVF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPU1RfVFlQRV9PVVRGSUZPX0tFSyAgKDB4MjggPDwgRklGT1NUX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9TVF9UWVBFX09VVEZJRk9fVEtFSyAoMHgyOSA8PCBGSUZPU1RfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT1NUX1RZUEVfTUVTU0FHRV9EQVRBICgweDMwIDw8IEZJRk9TVF9UWVBFX1NISUZUKQorI2RlZmluZSBGSUZPU1RfVFlQRV9STkdTVE9SRSAgICAgKDB4MzQgPDwgRklGT1NUX1RZUEVfU0hJRlQpCisjZGVmaW5lIEZJRk9TVF9UWVBFX1JOR0ZJRk8gICAgICAoMHgzNSA8PCBGSUZPU1RfVFlQRV9TSElGVCkKKyNkZWZpbmUgRklGT1NUX1RZUEVfU0tJUCAgICAgICAgICgweDNmIDw8IEZJRk9TVF9UWVBFX1NISUZUKQorCisvKgorICogT1BFUkFUSU9OIENvbW1hbmQgQ29uc3RydWN0cworICovCisKKy8qIE9wZXJhdGlvbiB0eXBlIHNlbGVjdG9ycyAtIE9QIFRZUEUgKi8KKyNkZWZpbmUgT1BfVFlQRV9TSElGVCAgICAgICAgICAgMjQKKyNkZWZpbmUgT1BfVFlQRV9NQVNLICAgICAgICAgICAgKDB4MDcgPDwgT1BfVFlQRV9TSElGVCkKKworI2RlZmluZSBPUF9UWVBFX1VOSV9QUk9UT0NPTCAgICAoMHgwMCA8PCBPUF9UWVBFX1NISUZUKQorI2RlZmluZSBPUF9UWVBFX1BLICAgICAgICAgICAgICAoMHgwMSA8PCBPUF9UWVBFX1NISUZUKQorI2RlZmluZSBPUF9UWVBFX0NMQVNTMV9BTEcgICAgICAoMHgwMiA8PCBPUF9UWVBFX1NISUZUKQorI2RlZmluZSBPUF9UWVBFX0NMQVNTMl9BTEcgICAgICAoMHgwNCA8PCBPUF9UWVBFX1NISUZUKQorI2RlZmluZSBPUF9UWVBFX0RFQ0FQX1BST1RPQ09MICAoMHgwNiA8PCBPUF9UWVBFX1NISUZUKQorI2RlZmluZSBPUF9UWVBFX0VOQ0FQX1BST1RPQ09MICAoMHgwNyA8PCBPUF9UWVBFX1NISUZUKQorCisvKiBQcm90b2NvbElEIHNlbGVjdG9ycyAtIFBST1RJRCAqLworI2RlZmluZSBPUF9QQ0xJRF9TSElGVCAgICAgICAgICAxNgorI2RlZmluZSBPUF9QQ0xJRF9NQVNLICAgICAgICAgICAoMHhmZiA8PCAxNikKKworLyogQXNzdW1pbmcgT1BfVFlQRSA9IE9QX1RZUEVfVU5JX1BST1RPQ09MICovCisjZGVmaW5lIE9QX1BDTElEX0lLRVYxX1BSRiAgICAgICgweDAxIDw8IE9QX1BDTElEX1NISUZUKQorI2RlZmluZSBPUF9QQ0xJRF9JS0VWMl9QUkYgICAgICAoMHgwMiA8PCBPUF9QQ0xJRF9TSElGVCkKKyNkZWZpbmUgT1BfUENMSURfU1NMMzBfUFJGICAgICAgKDB4MDggPDwgT1BfUENMSURfU0hJRlQpCisjZGVmaW5lIE9QX1BDTElEX1RMUzEwX1BSRiAgICAgICgweDA5IDw8IE9QX1BDTElEX1NISUZUKQorI2RlZmluZSBPUF9QQ0xJRF9UTFMxMV9QUkYgICAgICAoMHgwYSA8PCBPUF9QQ0xJRF9TSElGVCkKKyNkZWZpbmUgT1BfUENMSURfRFRMUzEwX1BSRiAgICAgKDB4MGMgPDwgT1BfUENMSURfU0hJRlQpCisjZGVmaW5lIE9QX1BDTElEX1BSRiAgICAgICAgICAgICgweDA2IDw8IE9QX1BDTElEX1NISUZUKQorI2RlZmluZSBPUF9QQ0xJRF9CTE9CICAgICAgICAgICAoMHgwZCA8PCBPUF9QQ0xJRF9TSElGVCkKKyNkZWZpbmUgT1BfUENMSURfU0VDUkVUS0VZICAgICAgKDB4MTEgPDwgT1BfUENMSURfU0hJRlQpCisjZGVmaW5lIE9QX1BDTElEX1BVQkxJQ0tFWVBBSVIgICgweDE0IDw8IE9QX1BDTElEX1NISUZUKQorI2RlZmluZSBPUF9QQ0xJRF9EU0FTSUdOICAgICAgICAoMHgxNSA8PCBPUF9QQ0xJRF9TSElGVCkKKyNkZWZpbmUgT1BfUENMSURfRFNBVkVSSUZZICAgICAgKDB4MTYgPDwgT1BfUENMSURfU0hJRlQpCisKKy8qIEFzc3VtaW5nIE9QX1RZUEUgPSBPUF9UWVBFX0RFQ0FQX1BST1RPQ09ML0VOQ0FQX1BST1RPQ09MICovCisjZGVmaW5lIE9QX1BDTElEX0lQU0VDICAgICAgICAgICgweDAxIDw8IE9QX1BDTElEX1NISUZUKQorI2RlZmluZSBPUF9QQ0xJRF9TUlRQICAgICAgICAgICAoMHgwMiA8PCBPUF9QQ0xJRF9TSElGVCkKKyNkZWZpbmUgT1BfUENMSURfTUFDU0VDICAgICAgICAgKDB4MDMgPDwgT1BfUENMSURfU0hJRlQpCisjZGVmaW5lIE9QX1BDTElEX1dJRkkgICAgICAgICAgICgweDA0IDw8IE9QX1BDTElEX1NISUZUKQorI2RlZmluZSBPUF9QQ0xJRF9XSU1BWCAgICAgICAgICAoMHgwNSA8PCBPUF9QQ0xJRF9TSElGVCkKKyNkZWZpbmUgT1BfUENMSURfU1NMMzAgICAgICAgICAgKDB4MDggPDwgT1BfUENMSURfU0hJRlQpCisjZGVmaW5lIE9QX1BDTElEX1RMUzEwICAgICAgICAgICgweDA5IDw8IE9QX1BDTElEX1NISUZUKQorI2RlZmluZSBPUF9QQ0xJRF9UTFMxMSAgICAgICAgICAoMHgwYSA8PCBPUF9QQ0xJRF9TSElGVCkKKyNkZWZpbmUgT1BfUENMSURfVExTMTIgICAgICAgICAgKDB4MGIgPDwgT1BfUENMSURfU0hJRlQpCisjZGVmaW5lIE9QX1BDTElEX0RUTFMgICAgICAgICAgICgweDBjIDw8IE9QX1BDTElEX1NISUZUKQorCisvKgorICogUHJvdG9jb2xJbmZvIHNlbGVjdG9ycworICovCisjZGVmaW5lIE9QX1BDTElORk9fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmCisKKy8qIGZvciBPUF9QQ0xJRF9JUFNFQyAqLworI2RlZmluZSBPUF9QQ0xfSVBTRUNfQ0lQSEVSX01BU0sgICAgICAgICAgICAgICAgIDB4ZmYwMAorI2RlZmluZSBPUF9QQ0xfSVBTRUNfQVVUSF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDBmZgorCisjZGVmaW5lIE9QX1BDTF9JUFNFQ19ERVNfSVY2NCAgICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIE9QX1BDTF9JUFNFQ19ERVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIE9QX1BDTF9JUFNFQ18zREVTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzAwCisjZGVmaW5lIE9QX1BDTF9JUFNFQ19BRVNfQ0JDICAgICAgICAgICAgICAgICAgICAgMHgwYzAwCisjZGVmaW5lIE9QX1BDTF9JUFNFQ19BRVNfQ1RSICAgICAgICAgICAgICAgICAgICAgMHgwZDAwCisjZGVmaW5lIE9QX1BDTF9JUFNFQ19BRVNfWFRTICAgICAgICAgICAgICAgICAgICAgMHgxNjAwCisjZGVmaW5lIE9QX1BDTF9JUFNFQ19BRVNfQ0NNOCAgICAgICAgICAgICAgICAgICAgMHgwZTAwCisjZGVmaW5lIE9QX1BDTF9JUFNFQ19BRVNfQ0NNMTIgICAgICAgICAgICAgICAgICAgMHgwZjAwCisjZGVmaW5lIE9QX1BDTF9JUFNFQ19BRVNfQ0NNMTYgICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIE9QX1BDTF9JUFNFQ19BRVNfR0NNOCAgICAgICAgICAgICAgICAgICAgMHgxMjAwCisjZGVmaW5lIE9QX1BDTF9JUFNFQ19BRVNfR0NNMTIgICAgICAgICAgICAgICAgICAgMHgxMzAwCisjZGVmaW5lIE9QX1BDTF9JUFNFQ19BRVNfR0NNMTYgICAgICAgICAgICAgICAgICAgMHgxNDAwCisKKyNkZWZpbmUgT1BfUENMX0lQU0VDX0hNQUNfTlVMTCAgICAgICAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgT1BfUENMX0lQU0VDX0hNQUNfTUQ1Xzk2ICAgICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgT1BfUENMX0lQU0VDX0hNQUNfU0hBMV85NiAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgT1BfUENMX0lQU0VDX0FFU19YQ0JDX01BQ185NiAgICAgICAgICAgICAweDAwMDUKKyNkZWZpbmUgT1BfUENMX0lQU0VDX0hNQUNfTUQ1XzEyOCAgICAgICAgICAgICAgICAweDAwMDYKKyNkZWZpbmUgT1BfUENMX0lQU0VDX0hNQUNfU0hBMV8xNjAgICAgICAgICAgICAgICAweDAwMDcKKyNkZWZpbmUgT1BfUENMX0lQU0VDX0hNQUNfU0hBMl8yNTZfMTI4ICAgICAgICAgICAweDAwMGMKKyNkZWZpbmUgT1BfUENMX0lQU0VDX0hNQUNfU0hBMl8zODRfMTkyICAgICAgICAgICAweDAwMGQKKyNkZWZpbmUgT1BfUENMX0lQU0VDX0hNQUNfU0hBMl81MTJfMjU2ICAgICAgICAgICAweDAwMGUKKworLyogRm9yIFNSVFAgLSBPUF9QQ0xJRF9TUlRQICovCisjZGVmaW5lIE9QX1BDTF9TUlRQX0NJUEhFUl9NQVNLICAgICAgICAgICAgICAgICAgMHhmZjAwCisjZGVmaW5lIE9QX1BDTF9TUlRQX0FVVEhfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMGZmCisKKyNkZWZpbmUgT1BfUENMX1NSVFBfQUVTX0NUUiAgICAgICAgICAgICAgICAgICAgICAweDBkMDAKKworI2RlZmluZSBPUF9QQ0xfU1JUUF9ITUFDX1NIQTFfMTYwICAgICAgICAgICAgICAgIDB4MDAwNworCisvKiBGb3IgU1NMIDMuMCAtIE9QX1BDTElEX1NTTDMwICovCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMTI4X0NCQ19TSEEgICAgICAgICAgICAgMHgwMDJmCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMTI4X0NCQ19TSEFfMiAgICAgICAgICAgMHgwMDMwCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMTI4X0NCQ19TSEFfMyAgICAgICAgICAgMHgwMDMxCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMTI4X0NCQ19TSEFfNCAgICAgICAgICAgMHgwMDMyCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMTI4X0NCQ19TSEFfNSAgICAgICAgICAgMHgwMDMzCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMTI4X0NCQ19TSEFfNiAgICAgICAgICAgMHgwMDM0CisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMTI4X0NCQ19TSEFfNyAgICAgICAgICAgMHgwMDhjCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMTI4X0NCQ19TSEFfOCAgICAgICAgICAgMHgwMDkwCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMTI4X0NCQ19TSEFfOSAgICAgICAgICAgMHgwMDk0CisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMTI4X0NCQ19TSEFfMTAgICAgICAgICAgMHhjMDA0CisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMTI4X0NCQ19TSEFfMTEgICAgICAgICAgMHhjMDA5CisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMTI4X0NCQ19TSEFfMTIgICAgICAgICAgMHhjMDBlCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMTI4X0NCQ19TSEFfMTMgICAgICAgICAgMHhjMDEzCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMTI4X0NCQ19TSEFfMTQgICAgICAgICAgMHhjMDE4CisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMTI4X0NCQ19TSEFfMTUgICAgICAgICAgMHhjMDFkCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMTI4X0NCQ19TSEFfMTYgICAgICAgICAgMHhjMDFlCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9BRVNfMTI4X0NCQ19TSEFfMTcgICAgICAgICAgMHhjMDFmCisKKyNkZWZpbmUgT1BfUENMX1NTTDMwX0FFU18yNTZfQ0JDX1NIQSAgICAgICAgICAgICAweDAwMzUKKyNkZWZpbmUgT1BfUENMX1NTTDMwX0FFU18yNTZfQ0JDX1NIQV8yICAgICAgICAgICAweDAwMzYKKyNkZWZpbmUgT1BfUENMX1NTTDMwX0FFU18yNTZfQ0JDX1NIQV8zICAgICAgICAgICAweDAwMzcKKyNkZWZpbmUgT1BfUENMX1NTTDMwX0FFU18yNTZfQ0JDX1NIQV80ICAgICAgICAgICAweDAwMzgKKyNkZWZpbmUgT1BfUENMX1NTTDMwX0FFU18yNTZfQ0JDX1NIQV81ICAgICAgICAgICAweDAwMzkKKyNkZWZpbmUgT1BfUENMX1NTTDMwX0FFU18yNTZfQ0JDX1NIQV82ICAgICAgICAgICAweDAwM2EKKyNkZWZpbmUgT1BfUENMX1NTTDMwX0FFU18yNTZfQ0JDX1NIQV83ICAgICAgICAgICAweDAwOGQKKyNkZWZpbmUgT1BfUENMX1NTTDMwX0FFU18yNTZfQ0JDX1NIQV84ICAgICAgICAgICAweDAwOTEKKyNkZWZpbmUgT1BfUENMX1NTTDMwX0FFU18yNTZfQ0JDX1NIQV85ICAgICAgICAgICAweDAwOTUKKyNkZWZpbmUgT1BfUENMX1NTTDMwX0FFU18yNTZfQ0JDX1NIQV8xMCAgICAgICAgICAweGMwMDUKKyNkZWZpbmUgT1BfUENMX1NTTDMwX0FFU18yNTZfQ0JDX1NIQV8xMSAgICAgICAgICAweGMwMGEKKyNkZWZpbmUgT1BfUENMX1NTTDMwX0FFU18yNTZfQ0JDX1NIQV8xMiAgICAgICAgICAweGMwMGYKKyNkZWZpbmUgT1BfUENMX1NTTDMwX0FFU18yNTZfQ0JDX1NIQV8xMyAgICAgICAgICAweGMwMTQKKyNkZWZpbmUgT1BfUENMX1NTTDMwX0FFU18yNTZfQ0JDX1NIQV8xNCAgICAgICAgICAweGMwMTkKKyNkZWZpbmUgT1BfUENMX1NTTDMwX0FFU18yNTZfQ0JDX1NIQV8xNSAgICAgICAgICAweGMwMjAKKyNkZWZpbmUgT1BfUENMX1NTTDMwX0FFU18yNTZfQ0JDX1NIQV8xNiAgICAgICAgICAweGMwMjEKKyNkZWZpbmUgT1BfUENMX1NTTDMwX0FFU18yNTZfQ0JDX1NIQV8xNyAgICAgICAgICAweGMwMjIKKworI2RlZmluZSBPUF9QQ0xfU1NMMzBfM0RFU19FREVfQ0JDX01ENSAgICAgICAgICAgIDB4MDAyMworCisjZGVmaW5lIE9QX1BDTF9TU0wzMF8zREVTX0VERV9DQkNfU0hBICAgICAgICAgICAgMHgwMDFmCisjZGVmaW5lIE9QX1BDTF9TU0wzMF8zREVTX0VERV9DQkNfU0hBXzIgICAgICAgICAgMHgwMDhiCisjZGVmaW5lIE9QX1BDTF9TU0wzMF8zREVTX0VERV9DQkNfU0hBXzMgICAgICAgICAgMHgwMDhmCisjZGVmaW5lIE9QX1BDTF9TU0wzMF8zREVTX0VERV9DQkNfU0hBXzQgICAgICAgICAgMHgwMDkzCisjZGVmaW5lIE9QX1BDTF9TU0wzMF8zREVTX0VERV9DQkNfU0hBXzUgICAgICAgICAgMHgwMDBhCisjZGVmaW5lIE9QX1BDTF9TU0wzMF8zREVTX0VERV9DQkNfU0hBXzYgICAgICAgICAgMHgwMDBkCisjZGVmaW5lIE9QX1BDTF9TU0wzMF8zREVTX0VERV9DQkNfU0hBXzcgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIE9QX1BDTF9TU0wzMF8zREVTX0VERV9DQkNfU0hBXzggICAgICAgICAgMHgwMDEzCisjZGVmaW5lIE9QX1BDTF9TU0wzMF8zREVTX0VERV9DQkNfU0hBXzkgICAgICAgICAgMHgwMDE2CisjZGVmaW5lIE9QX1BDTF9TU0wzMF8zREVTX0VERV9DQkNfU0hBXzEwICAgICAgICAgMHgwMDFiCisjZGVmaW5lIE9QX1BDTF9TU0wzMF8zREVTX0VERV9DQkNfU0hBXzExICAgICAgICAgMHhjMDAzCisjZGVmaW5lIE9QX1BDTF9TU0wzMF8zREVTX0VERV9DQkNfU0hBXzEyICAgICAgICAgMHhjMDA4CisjZGVmaW5lIE9QX1BDTF9TU0wzMF8zREVTX0VERV9DQkNfU0hBXzEzICAgICAgICAgMHhjMDBkCisjZGVmaW5lIE9QX1BDTF9TU0wzMF8zREVTX0VERV9DQkNfU0hBXzE0ICAgICAgICAgMHhjMDEyCisjZGVmaW5lIE9QX1BDTF9TU0wzMF8zREVTX0VERV9DQkNfU0hBXzE1ICAgICAgICAgMHhjMDE3CisjZGVmaW5lIE9QX1BDTF9TU0wzMF8zREVTX0VERV9DQkNfU0hBXzE2ICAgICAgICAgMHhjMDFhCisjZGVmaW5lIE9QX1BDTF9TU0wzMF8zREVTX0VERV9DQkNfU0hBXzE3ICAgICAgICAgMHhjMDFiCisjZGVmaW5lIE9QX1BDTF9TU0wzMF8zREVTX0VERV9DQkNfU0hBXzE4ICAgICAgICAgMHhjMDFjCisKKyNkZWZpbmUgT1BfUENMX1NTTDMwX0RFUzQwX0NCQ19NRDUgICAgICAgICAgICAgICAweDAwMjkKKworI2RlZmluZSBPUF9QQ0xfU1NMMzBfREVTX0NCQ19NRDUgICAgICAgICAgICAgICAgIDB4MDAyMgorCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9ERVM0MF9DQkNfU0hBICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIE9QX1BDTF9TU0wzMF9ERVM0MF9DQkNfU0hBXzIgICAgICAgICAgICAgMHgwMDBiCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9ERVM0MF9DQkNfU0hBXzMgICAgICAgICAgICAgMHgwMDBlCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9ERVM0MF9DQkNfU0hBXzQgICAgICAgICAgICAgMHgwMDExCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9ERVM0MF9DQkNfU0hBXzUgICAgICAgICAgICAgMHgwMDE0CisjZGVmaW5lIE9QX1BDTF9TU0wzMF9ERVM0MF9DQkNfU0hBXzYgICAgICAgICAgICAgMHgwMDE5CisjZGVmaW5lIE9QX1BDTF9TU0wzMF9ERVM0MF9DQkNfU0hBXzcgICAgICAgICAgICAgMHgwMDI2CisKKyNkZWZpbmUgT1BfUENMX1NTTDMwX0RFU19DQkNfU0hBICAgICAgICAgICAgICAgICAweDAwMWUKKyNkZWZpbmUgT1BfUENMX1NTTDMwX0RFU19DQkNfU0hBXzIgICAgICAgICAgICAgICAweDAwMDkKKyNkZWZpbmUgT1BfUENMX1NTTDMwX0RFU19DQkNfU0hBXzMgICAgICAgICAgICAgICAweDAwMGMKKyNkZWZpbmUgT1BfUENMX1NTTDMwX0RFU19DQkNfU0hBXzQgICAgICAgICAgICAgICAweDAwMGYKKyNkZWZpbmUgT1BfUENMX1NTTDMwX0RFU19DQkNfU0hBXzUgICAgICAgICAgICAgICAweDAwMTIKKyNkZWZpbmUgT1BfUENMX1NTTDMwX0RFU19DQkNfU0hBXzYgICAgICAgICAgICAgICAweDAwMTUKKyNkZWZpbmUgT1BfUENMX1NTTDMwX0RFU19DQkNfU0hBXzcgICAgICAgICAgICAgICAweDAwMWEKKworI2RlZmluZSBPUF9QQ0xfU1NMMzBfUkM0XzEyOF9NRDUgICAgICAgICAgICAgICAgIDB4MDAyNAorI2RlZmluZSBPUF9QQ0xfU1NMMzBfUkM0XzEyOF9NRDVfMiAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBPUF9QQ0xfU1NMMzBfUkM0XzEyOF9NRDVfMyAgICAgICAgICAgICAgIDB4MDAxOAorCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9SQzRfNDBfTUQ1ICAgICAgICAgICAgICAgICAgMHgwMDJiCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9SQzRfNDBfTUQ1XzIgICAgICAgICAgICAgICAgMHgwMDAzCisjZGVmaW5lIE9QX1BDTF9TU0wzMF9SQzRfNDBfTUQ1XzMgICAgICAgICAgICAgICAgMHgwMDE3CisKKyNkZWZpbmUgT1BfUENMX1NTTDMwX1JDNF8xMjhfU0hBICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgT1BfUENMX1NTTDMwX1JDNF8xMjhfU0hBXzIgICAgICAgICAgICAgICAweDAwOGEKKyNkZWZpbmUgT1BfUENMX1NTTDMwX1JDNF8xMjhfU0hBXzMgICAgICAgICAgICAgICAweDAwOGUKKyNkZWZpbmUgT1BfUENMX1NTTDMwX1JDNF8xMjhfU0hBXzQgICAgICAgICAgICAgICAweDAwOTIKKyNkZWZpbmUgT1BfUENMX1NTTDMwX1JDNF8xMjhfU0hBXzUgICAgICAgICAgICAgICAweDAwMDUKKyNkZWZpbmUgT1BfUENMX1NTTDMwX1JDNF8xMjhfU0hBXzYgICAgICAgICAgICAgICAweGMwMDIKKyNkZWZpbmUgT1BfUENMX1NTTDMwX1JDNF8xMjhfU0hBXzcgICAgICAgICAgICAgICAweGMwMDcKKyNkZWZpbmUgT1BfUENMX1NTTDMwX1JDNF8xMjhfU0hBXzggICAgICAgICAgICAgICAweGMwMGMKKyNkZWZpbmUgT1BfUENMX1NTTDMwX1JDNF8xMjhfU0hBXzkgICAgICAgICAgICAgICAweGMwMTEKKyNkZWZpbmUgT1BfUENMX1NTTDMwX1JDNF8xMjhfU0hBXzEwICAgICAgICAgICAgICAweGMwMTYKKworI2RlZmluZSBPUF9QQ0xfU1NMMzBfUkM0XzQwX1NIQSAgICAgICAgICAgICAgICAgIDB4MDAyOAorCisKKy8qIEZvciBUTFMgMS4wIC0gT1BfUENMSURfVExTMTAgKi8KKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18xMjhfQ0JDX1NIQSAgICAgICAgICAgICAweDAwMmYKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18xMjhfQ0JDX1NIQV8yICAgICAgICAgICAweDAwMzAKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18xMjhfQ0JDX1NIQV8zICAgICAgICAgICAweDAwMzEKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18xMjhfQ0JDX1NIQV80ICAgICAgICAgICAweDAwMzIKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18xMjhfQ0JDX1NIQV81ICAgICAgICAgICAweDAwMzMKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18xMjhfQ0JDX1NIQV82ICAgICAgICAgICAweDAwMzQKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18xMjhfQ0JDX1NIQV83ICAgICAgICAgICAweDAwOGMKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18xMjhfQ0JDX1NIQV84ICAgICAgICAgICAweDAwOTAKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18xMjhfQ0JDX1NIQV85ICAgICAgICAgICAweDAwOTQKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18xMjhfQ0JDX1NIQV8xMCAgICAgICAgICAweGMwMDQKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18xMjhfQ0JDX1NIQV8xMSAgICAgICAgICAweGMwMDkKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18xMjhfQ0JDX1NIQV8xMiAgICAgICAgICAweGMwMGUKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18xMjhfQ0JDX1NIQV8xMyAgICAgICAgICAweGMwMTMKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18xMjhfQ0JDX1NIQV8xNCAgICAgICAgICAweGMwMTgKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18xMjhfQ0JDX1NIQV8xNSAgICAgICAgICAweGMwMWQKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18xMjhfQ0JDX1NIQV8xNiAgICAgICAgICAweGMwMWUKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0FFU18xMjhfQ0JDX1NIQV8xNyAgICAgICAgICAweGMwMWYKKworI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzI1Nl9DQkNfU0hBICAgICAgICAgICAgIDB4MDAzNQorI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzI1Nl9DQkNfU0hBXzIgICAgICAgICAgIDB4MDAzNgorI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzI1Nl9DQkNfU0hBXzMgICAgICAgICAgIDB4MDAzNworI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzI1Nl9DQkNfU0hBXzQgICAgICAgICAgIDB4MDAzOAorI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzI1Nl9DQkNfU0hBXzUgICAgICAgICAgIDB4MDAzOQorI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzI1Nl9DQkNfU0hBXzYgICAgICAgICAgIDB4MDAzYQorI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzI1Nl9DQkNfU0hBXzcgICAgICAgICAgIDB4MDA4ZAorI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzI1Nl9DQkNfU0hBXzggICAgICAgICAgIDB4MDA5MQorI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzI1Nl9DQkNfU0hBXzkgICAgICAgICAgIDB4MDA5NQorI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzI1Nl9DQkNfU0hBXzEwICAgICAgICAgIDB4YzAwNQorI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzI1Nl9DQkNfU0hBXzExICAgICAgICAgIDB4YzAwYQorI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzI1Nl9DQkNfU0hBXzEyICAgICAgICAgIDB4YzAwZgorI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzI1Nl9DQkNfU0hBXzEzICAgICAgICAgIDB4YzAxNAorI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzI1Nl9DQkNfU0hBXzE0ICAgICAgICAgIDB4YzAxOQorI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzI1Nl9DQkNfU0hBXzE1ICAgICAgICAgIDB4YzAyMAorI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzI1Nl9DQkNfU0hBXzE2ICAgICAgICAgIDB4YzAyMQorI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzI1Nl9DQkNfU0hBXzE3ICAgICAgICAgIDB4YzAyMgorCisvKiAjZGVmaW5lIE9QX1BDTF9UTFMxMF8zREVTX0VERV9DQkNfTUQ1ICAgICAgICAgICAgMHgwMDIzICovCisKKyNkZWZpbmUgT1BfUENMX1RMUzEwXzNERVNfRURFX0NCQ19TSEEgICAgICAgICAgICAweDAwMWYKKyNkZWZpbmUgT1BfUENMX1RMUzEwXzNERVNfRURFX0NCQ19TSEFfMiAgICAgICAgICAweDAwOGIKKyNkZWZpbmUgT1BfUENMX1RMUzEwXzNERVNfRURFX0NCQ19TSEFfMyAgICAgICAgICAweDAwOGYKKyNkZWZpbmUgT1BfUENMX1RMUzEwXzNERVNfRURFX0NCQ19TSEFfNCAgICAgICAgICAweDAwOTMKKyNkZWZpbmUgT1BfUENMX1RMUzEwXzNERVNfRURFX0NCQ19TSEFfNSAgICAgICAgICAweDAwMGEKKyNkZWZpbmUgT1BfUENMX1RMUzEwXzNERVNfRURFX0NCQ19TSEFfNiAgICAgICAgICAweDAwMGQKKyNkZWZpbmUgT1BfUENMX1RMUzEwXzNERVNfRURFX0NCQ19TSEFfNyAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgT1BfUENMX1RMUzEwXzNERVNfRURFX0NCQ19TSEFfOCAgICAgICAgICAweDAwMTMKKyNkZWZpbmUgT1BfUENMX1RMUzEwXzNERVNfRURFX0NCQ19TSEFfOSAgICAgICAgICAweDAwMTYKKyNkZWZpbmUgT1BfUENMX1RMUzEwXzNERVNfRURFX0NCQ19TSEFfMTAgICAgICAgICAweDAwMWIKKyNkZWZpbmUgT1BfUENMX1RMUzEwXzNERVNfRURFX0NCQ19TSEFfMTEgICAgICAgICAweGMwMDMKKyNkZWZpbmUgT1BfUENMX1RMUzEwXzNERVNfRURFX0NCQ19TSEFfMTIgICAgICAgICAweGMwMDgKKyNkZWZpbmUgT1BfUENMX1RMUzEwXzNERVNfRURFX0NCQ19TSEFfMTMgICAgICAgICAweGMwMGQKKyNkZWZpbmUgT1BfUENMX1RMUzEwXzNERVNfRURFX0NCQ19TSEFfMTQgICAgICAgICAweGMwMTIKKyNkZWZpbmUgT1BfUENMX1RMUzEwXzNERVNfRURFX0NCQ19TSEFfMTUgICAgICAgICAweGMwMTcKKyNkZWZpbmUgT1BfUENMX1RMUzEwXzNERVNfRURFX0NCQ19TSEFfMTYgICAgICAgICAweGMwMWEKKyNkZWZpbmUgT1BfUENMX1RMUzEwXzNERVNfRURFX0NCQ19TSEFfMTcgICAgICAgICAweGMwMWIKKyNkZWZpbmUgT1BfUENMX1RMUzEwXzNERVNfRURFX0NCQ19TSEFfMTggICAgICAgICAweGMwMWMKKworI2RlZmluZSBPUF9QQ0xfVExTMTBfREVTNDBfQ0JDX01ENSAgICAgICAgICAgICAgIDB4MDAyOQorCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9ERVNfQ0JDX01ENSAgICAgICAgICAgICAgICAgMHgwMDIyCisKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0RFUzQwX0NCQ19TSEEgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0RFUzQwX0NCQ19TSEFfMiAgICAgICAgICAgICAweDAwMGIKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0RFUzQwX0NCQ19TSEFfMyAgICAgICAgICAgICAweDAwMGUKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0RFUzQwX0NCQ19TSEFfNCAgICAgICAgICAgICAweDAwMTEKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0RFUzQwX0NCQ19TSEFfNSAgICAgICAgICAgICAweDAwMTQKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0RFUzQwX0NCQ19TSEFfNiAgICAgICAgICAgICAweDAwMTkKKyNkZWZpbmUgT1BfUENMX1RMUzEwX0RFUzQwX0NCQ19TSEFfNyAgICAgICAgICAgICAweDAwMjYKKworCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9ERVNfQ0JDX1NIQSAgICAgICAgICAgICAgICAgMHgwMDFlCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9ERVNfQ0JDX1NIQV8yICAgICAgICAgICAgICAgMHgwMDA5CisjZGVmaW5lIE9QX1BDTF9UTFMxMF9ERVNfQ0JDX1NIQV8zICAgICAgICAgICAgICAgMHgwMDBjCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9ERVNfQ0JDX1NIQV80ICAgICAgICAgICAgICAgMHgwMDBmCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9ERVNfQ0JDX1NIQV81ICAgICAgICAgICAgICAgMHgwMDEyCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9ERVNfQ0JDX1NIQV82ICAgICAgICAgICAgICAgMHgwMDE1CisjZGVmaW5lIE9QX1BDTF9UTFMxMF9ERVNfQ0JDX1NIQV83ICAgICAgICAgICAgICAgMHgwMDFhCisKKyNkZWZpbmUgT1BfUENMX1RMUzEwX1JDNF8xMjhfTUQ1ICAgICAgICAgICAgICAgICAweDAwMjQKKyNkZWZpbmUgT1BfUENMX1RMUzEwX1JDNF8xMjhfTUQ1XzIgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgT1BfUENMX1RMUzEwX1JDNF8xMjhfTUQ1XzMgICAgICAgICAgICAgICAweDAwMTgKKworI2RlZmluZSBPUF9QQ0xfVExTMTBfUkM0XzQwX01ENSAgICAgICAgICAgICAgICAgIDB4MDAyYgorI2RlZmluZSBPUF9QQ0xfVExTMTBfUkM0XzQwX01ENV8yICAgICAgICAgICAgICAgIDB4MDAwMworI2RlZmluZSBPUF9QQ0xfVExTMTBfUkM0XzQwX01ENV8zICAgICAgICAgICAgICAgIDB4MDAxNworCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9SQzRfMTI4X1NIQSAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9SQzRfMTI4X1NIQV8yICAgICAgICAgICAgICAgMHgwMDhhCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9SQzRfMTI4X1NIQV8zICAgICAgICAgICAgICAgMHgwMDhlCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9SQzRfMTI4X1NIQV80ICAgICAgICAgICAgICAgMHgwMDkyCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9SQzRfMTI4X1NIQV81ICAgICAgICAgICAgICAgMHgwMDA1CisjZGVmaW5lIE9QX1BDTF9UTFMxMF9SQzRfMTI4X1NIQV82ICAgICAgICAgICAgICAgMHhjMDAyCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9SQzRfMTI4X1NIQV83ICAgICAgICAgICAgICAgMHhjMDA3CisjZGVmaW5lIE9QX1BDTF9UTFMxMF9SQzRfMTI4X1NIQV84ICAgICAgICAgICAgICAgMHhjMDBjCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9SQzRfMTI4X1NIQV85ICAgICAgICAgICAgICAgMHhjMDExCisjZGVmaW5lIE9QX1BDTF9UTFMxMF9SQzRfMTI4X1NIQV8xMCAgICAgICAgICAgICAgMHhjMDE2CisKKyNkZWZpbmUgT1BfUENMX1RMUzEwX1JDNF80MF9TSEEgICAgICAgICAgICAgICAgICAweDAwMjgKKworI2RlZmluZSBPUF9QQ0xfVExTMTBfM0RFU19FREVfQ0JDX01ENSAgICAgICAgICAgIDB4ZmYyMworI2RlZmluZSBPUF9QQ0xfVExTMTBfM0RFU19FREVfQ0JDX1NIQTE2MCAgICAgICAgIDB4ZmYzMAorI2RlZmluZSBPUF9QQ0xfVExTMTBfM0RFU19FREVfQ0JDX1NIQTIyNCAgICAgICAgIDB4ZmYzNAorI2RlZmluZSBPUF9QQ0xfVExTMTBfM0RFU19FREVfQ0JDX1NIQTI1NiAgICAgICAgIDB4ZmYzNgorI2RlZmluZSBPUF9QQ0xfVExTMTBfM0RFU19FREVfQ0JDX1NIQTM4NCAgICAgICAgIDB4ZmYzMworI2RlZmluZSBPUF9QQ0xfVExTMTBfM0RFU19FREVfQ0JDX1NIQTUxMiAgICAgICAgIDB4ZmYzNQorI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzEyOF9DQkNfU0hBMTYwICAgICAgICAgIDB4ZmY4MAorI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzEyOF9DQkNfU0hBMjI0ICAgICAgICAgIDB4ZmY4NAorI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzEyOF9DQkNfU0hBMjU2ICAgICAgICAgIDB4ZmY4NgorI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzEyOF9DQkNfU0hBMzg0ICAgICAgICAgIDB4ZmY4MworI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzEyOF9DQkNfU0hBNTEyICAgICAgICAgIDB4ZmY4NQorI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzE5Ml9DQkNfU0hBMTYwICAgICAgICAgIDB4ZmYyMAorI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzE5Ml9DQkNfU0hBMjI0ICAgICAgICAgIDB4ZmYyNAorI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzE5Ml9DQkNfU0hBMjU2ICAgICAgICAgIDB4ZmYyNgorI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzE5Ml9DQkNfU0hBMzg0ICAgICAgICAgIDB4ZmYyMworI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzE5Ml9DQkNfU0hBNTEyICAgICAgICAgIDB4ZmYyNQorI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzI1Nl9DQkNfU0hBMTYwICAgICAgICAgIDB4ZmY2MAorI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzI1Nl9DQkNfU0hBMjI0ICAgICAgICAgIDB4ZmY2NAorI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzI1Nl9DQkNfU0hBMjU2ICAgICAgICAgIDB4ZmY2NgorI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzI1Nl9DQkNfU0hBMzg0ICAgICAgICAgIDB4ZmY2MworI2RlZmluZSBPUF9QQ0xfVExTMTBfQUVTXzI1Nl9DQkNfU0hBNTEyICAgICAgICAgIDB4ZmY2NQorCisKKworLyogRm9yIFRMUyAxLjEgLSBPUF9QQ0xJRF9UTFMxMSAqLworI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzEyOF9DQkNfU0hBICAgICAgICAgICAgIDB4MDAyZgorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzEyOF9DQkNfU0hBXzIgICAgICAgICAgIDB4MDAzMAorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzEyOF9DQkNfU0hBXzMgICAgICAgICAgIDB4MDAzMQorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzEyOF9DQkNfU0hBXzQgICAgICAgICAgIDB4MDAzMgorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzEyOF9DQkNfU0hBXzUgICAgICAgICAgIDB4MDAzMworI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzEyOF9DQkNfU0hBXzYgICAgICAgICAgIDB4MDAzNAorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzEyOF9DQkNfU0hBXzcgICAgICAgICAgIDB4MDA4YworI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzEyOF9DQkNfU0hBXzggICAgICAgICAgIDB4MDA5MAorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzEyOF9DQkNfU0hBXzkgICAgICAgICAgIDB4MDA5NAorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzEyOF9DQkNfU0hBXzEwICAgICAgICAgIDB4YzAwNAorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzEyOF9DQkNfU0hBXzExICAgICAgICAgIDB4YzAwOQorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzEyOF9DQkNfU0hBXzEyICAgICAgICAgIDB4YzAwZQorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzEyOF9DQkNfU0hBXzEzICAgICAgICAgIDB4YzAxMworI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzEyOF9DQkNfU0hBXzE0ICAgICAgICAgIDB4YzAxOAorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzEyOF9DQkNfU0hBXzE1ICAgICAgICAgIDB4YzAxZAorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzEyOF9DQkNfU0hBXzE2ICAgICAgICAgIDB4YzAxZQorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzEyOF9DQkNfU0hBXzE3ICAgICAgICAgIDB4YzAxZgorCisjZGVmaW5lIE9QX1BDTF9UTFMxMV9BRVNfMjU2X0NCQ19TSEEgICAgICAgICAgICAgMHgwMDM1CisjZGVmaW5lIE9QX1BDTF9UTFMxMV9BRVNfMjU2X0NCQ19TSEFfMiAgICAgICAgICAgMHgwMDM2CisjZGVmaW5lIE9QX1BDTF9UTFMxMV9BRVNfMjU2X0NCQ19TSEFfMyAgICAgICAgICAgMHgwMDM3CisjZGVmaW5lIE9QX1BDTF9UTFMxMV9BRVNfMjU2X0NCQ19TSEFfNCAgICAgICAgICAgMHgwMDM4CisjZGVmaW5lIE9QX1BDTF9UTFMxMV9BRVNfMjU2X0NCQ19TSEFfNSAgICAgICAgICAgMHgwMDM5CisjZGVmaW5lIE9QX1BDTF9UTFMxMV9BRVNfMjU2X0NCQ19TSEFfNiAgICAgICAgICAgMHgwMDNhCisjZGVmaW5lIE9QX1BDTF9UTFMxMV9BRVNfMjU2X0NCQ19TSEFfNyAgICAgICAgICAgMHgwMDhkCisjZGVmaW5lIE9QX1BDTF9UTFMxMV9BRVNfMjU2X0NCQ19TSEFfOCAgICAgICAgICAgMHgwMDkxCisjZGVmaW5lIE9QX1BDTF9UTFMxMV9BRVNfMjU2X0NCQ19TSEFfOSAgICAgICAgICAgMHgwMDk1CisjZGVmaW5lIE9QX1BDTF9UTFMxMV9BRVNfMjU2X0NCQ19TSEFfMTAgICAgICAgICAgMHhjMDA1CisjZGVmaW5lIE9QX1BDTF9UTFMxMV9BRVNfMjU2X0NCQ19TSEFfMTEgICAgICAgICAgMHhjMDBhCisjZGVmaW5lIE9QX1BDTF9UTFMxMV9BRVNfMjU2X0NCQ19TSEFfMTIgICAgICAgICAgMHhjMDBmCisjZGVmaW5lIE9QX1BDTF9UTFMxMV9BRVNfMjU2X0NCQ19TSEFfMTMgICAgICAgICAgMHhjMDE0CisjZGVmaW5lIE9QX1BDTF9UTFMxMV9BRVNfMjU2X0NCQ19TSEFfMTQgICAgICAgICAgMHhjMDE5CisjZGVmaW5lIE9QX1BDTF9UTFMxMV9BRVNfMjU2X0NCQ19TSEFfMTUgICAgICAgICAgMHhjMDIwCisjZGVmaW5lIE9QX1BDTF9UTFMxMV9BRVNfMjU2X0NCQ19TSEFfMTYgICAgICAgICAgMHhjMDIxCisjZGVmaW5lIE9QX1BDTF9UTFMxMV9BRVNfMjU2X0NCQ19TSEFfMTcgICAgICAgICAgMHhjMDIyCisKKy8qICNkZWZpbmUgT1BfUENMX1RMUzExXzNERVNfRURFX0NCQ19NRDUgICAgICAgICAgICAweDAwMjMgKi8KKworI2RlZmluZSBPUF9QQ0xfVExTMTFfM0RFU19FREVfQ0JDX1NIQSAgICAgICAgICAgIDB4MDAxZgorI2RlZmluZSBPUF9QQ0xfVExTMTFfM0RFU19FREVfQ0JDX1NIQV8yICAgICAgICAgIDB4MDA4YgorI2RlZmluZSBPUF9QQ0xfVExTMTFfM0RFU19FREVfQ0JDX1NIQV8zICAgICAgICAgIDB4MDA4ZgorI2RlZmluZSBPUF9QQ0xfVExTMTFfM0RFU19FREVfQ0JDX1NIQV80ICAgICAgICAgIDB4MDA5MworI2RlZmluZSBPUF9QQ0xfVExTMTFfM0RFU19FREVfQ0JDX1NIQV81ICAgICAgICAgIDB4MDAwYQorI2RlZmluZSBPUF9QQ0xfVExTMTFfM0RFU19FREVfQ0JDX1NIQV82ICAgICAgICAgIDB4MDAwZAorI2RlZmluZSBPUF9QQ0xfVExTMTFfM0RFU19FREVfQ0JDX1NIQV83ICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBPUF9QQ0xfVExTMTFfM0RFU19FREVfQ0JDX1NIQV84ICAgICAgICAgIDB4MDAxMworI2RlZmluZSBPUF9QQ0xfVExTMTFfM0RFU19FREVfQ0JDX1NIQV85ICAgICAgICAgIDB4MDAxNgorI2RlZmluZSBPUF9QQ0xfVExTMTFfM0RFU19FREVfQ0JDX1NIQV8xMCAgICAgICAgIDB4MDAxYgorI2RlZmluZSBPUF9QQ0xfVExTMTFfM0RFU19FREVfQ0JDX1NIQV8xMSAgICAgICAgIDB4YzAwMworI2RlZmluZSBPUF9QQ0xfVExTMTFfM0RFU19FREVfQ0JDX1NIQV8xMiAgICAgICAgIDB4YzAwOAorI2RlZmluZSBPUF9QQ0xfVExTMTFfM0RFU19FREVfQ0JDX1NIQV8xMyAgICAgICAgIDB4YzAwZAorI2RlZmluZSBPUF9QQ0xfVExTMTFfM0RFU19FREVfQ0JDX1NIQV8xNCAgICAgICAgIDB4YzAxMgorI2RlZmluZSBPUF9QQ0xfVExTMTFfM0RFU19FREVfQ0JDX1NIQV8xNSAgICAgICAgIDB4YzAxNworI2RlZmluZSBPUF9QQ0xfVExTMTFfM0RFU19FREVfQ0JDX1NIQV8xNiAgICAgICAgIDB4YzAxYQorI2RlZmluZSBPUF9QQ0xfVExTMTFfM0RFU19FREVfQ0JDX1NIQV8xNyAgICAgICAgIDB4YzAxYgorI2RlZmluZSBPUF9QQ0xfVExTMTFfM0RFU19FREVfQ0JDX1NIQV8xOCAgICAgICAgIDB4YzAxYworCisjZGVmaW5lIE9QX1BDTF9UTFMxMV9ERVM0MF9DQkNfTUQ1ICAgICAgICAgICAgICAgMHgwMDI5CisKKyNkZWZpbmUgT1BfUENMX1RMUzExX0RFU19DQkNfTUQ1ICAgICAgICAgICAgICAgICAweDAwMjIKKworI2RlZmluZSBPUF9QQ0xfVExTMTFfREVTNDBfQ0JDX1NIQSAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBPUF9QQ0xfVExTMTFfREVTNDBfQ0JDX1NIQV8yICAgICAgICAgICAgIDB4MDAwYgorI2RlZmluZSBPUF9QQ0xfVExTMTFfREVTNDBfQ0JDX1NIQV8zICAgICAgICAgICAgIDB4MDAwZQorI2RlZmluZSBPUF9QQ0xfVExTMTFfREVTNDBfQ0JDX1NIQV80ICAgICAgICAgICAgIDB4MDAxMQorI2RlZmluZSBPUF9QQ0xfVExTMTFfREVTNDBfQ0JDX1NIQV81ICAgICAgICAgICAgIDB4MDAxNAorI2RlZmluZSBPUF9QQ0xfVExTMTFfREVTNDBfQ0JDX1NIQV82ICAgICAgICAgICAgIDB4MDAxOQorI2RlZmluZSBPUF9QQ0xfVExTMTFfREVTNDBfQ0JDX1NIQV83ICAgICAgICAgICAgIDB4MDAyNgorCisjZGVmaW5lIE9QX1BDTF9UTFMxMV9ERVNfQ0JDX1NIQSAgICAgICAgICAgICAgICAgMHgwMDFlCisjZGVmaW5lIE9QX1BDTF9UTFMxMV9ERVNfQ0JDX1NIQV8yICAgICAgICAgICAgICAgMHgwMDA5CisjZGVmaW5lIE9QX1BDTF9UTFMxMV9ERVNfQ0JDX1NIQV8zICAgICAgICAgICAgICAgMHgwMDBjCisjZGVmaW5lIE9QX1BDTF9UTFMxMV9ERVNfQ0JDX1NIQV80ICAgICAgICAgICAgICAgMHgwMDBmCisjZGVmaW5lIE9QX1BDTF9UTFMxMV9ERVNfQ0JDX1NIQV81ICAgICAgICAgICAgICAgMHgwMDEyCisjZGVmaW5lIE9QX1BDTF9UTFMxMV9ERVNfQ0JDX1NIQV82ICAgICAgICAgICAgICAgMHgwMDE1CisjZGVmaW5lIE9QX1BDTF9UTFMxMV9ERVNfQ0JDX1NIQV83ICAgICAgICAgICAgICAgMHgwMDFhCisKKyNkZWZpbmUgT1BfUENMX1RMUzExX1JDNF8xMjhfTUQ1ICAgICAgICAgICAgICAgICAweDAwMjQKKyNkZWZpbmUgT1BfUENMX1RMUzExX1JDNF8xMjhfTUQ1XzIgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgT1BfUENMX1RMUzExX1JDNF8xMjhfTUQ1XzMgICAgICAgICAgICAgICAweDAwMTgKKworI2RlZmluZSBPUF9QQ0xfVExTMTFfUkM0XzQwX01ENSAgICAgICAgICAgICAgICAgIDB4MDAyYgorI2RlZmluZSBPUF9QQ0xfVExTMTFfUkM0XzQwX01ENV8yICAgICAgICAgICAgICAgIDB4MDAwMworI2RlZmluZSBPUF9QQ0xfVExTMTFfUkM0XzQwX01ENV8zICAgICAgICAgICAgICAgIDB4MDAxNworCisjZGVmaW5lIE9QX1BDTF9UTFMxMV9SQzRfMTI4X1NIQSAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIE9QX1BDTF9UTFMxMV9SQzRfMTI4X1NIQV8yICAgICAgICAgICAgICAgMHgwMDhhCisjZGVmaW5lIE9QX1BDTF9UTFMxMV9SQzRfMTI4X1NIQV8zICAgICAgICAgICAgICAgMHgwMDhlCisjZGVmaW5lIE9QX1BDTF9UTFMxMV9SQzRfMTI4X1NIQV80ICAgICAgICAgICAgICAgMHgwMDkyCisjZGVmaW5lIE9QX1BDTF9UTFMxMV9SQzRfMTI4X1NIQV81ICAgICAgICAgICAgICAgMHgwMDA1CisjZGVmaW5lIE9QX1BDTF9UTFMxMV9SQzRfMTI4X1NIQV82ICAgICAgICAgICAgICAgMHhjMDAyCisjZGVmaW5lIE9QX1BDTF9UTFMxMV9SQzRfMTI4X1NIQV83ICAgICAgICAgICAgICAgMHhjMDA3CisjZGVmaW5lIE9QX1BDTF9UTFMxMV9SQzRfMTI4X1NIQV84ICAgICAgICAgICAgICAgMHhjMDBjCisjZGVmaW5lIE9QX1BDTF9UTFMxMV9SQzRfMTI4X1NIQV85ICAgICAgICAgICAgICAgMHhjMDExCisjZGVmaW5lIE9QX1BDTF9UTFMxMV9SQzRfMTI4X1NIQV8xMCAgICAgICAgICAgICAgMHhjMDE2CisKKyNkZWZpbmUgT1BfUENMX1RMUzExX1JDNF80MF9TSEEgICAgICAgICAgICAgICAgICAweDAwMjgKKworI2RlZmluZSBPUF9QQ0xfVExTMTFfM0RFU19FREVfQ0JDX01ENSAgICAgICAgICAgIDB4ZmYyMworI2RlZmluZSBPUF9QQ0xfVExTMTFfM0RFU19FREVfQ0JDX1NIQTE2MCAgICAgICAgIDB4ZmYzMAorI2RlZmluZSBPUF9QQ0xfVExTMTFfM0RFU19FREVfQ0JDX1NIQTIyNCAgICAgICAgIDB4ZmYzNAorI2RlZmluZSBPUF9QQ0xfVExTMTFfM0RFU19FREVfQ0JDX1NIQTI1NiAgICAgICAgIDB4ZmYzNgorI2RlZmluZSBPUF9QQ0xfVExTMTFfM0RFU19FREVfQ0JDX1NIQTM4NCAgICAgICAgIDB4ZmYzMworI2RlZmluZSBPUF9QQ0xfVExTMTFfM0RFU19FREVfQ0JDX1NIQTUxMiAgICAgICAgIDB4ZmYzNQorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzEyOF9DQkNfU0hBMTYwICAgICAgICAgIDB4ZmY4MAorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzEyOF9DQkNfU0hBMjI0ICAgICAgICAgIDB4ZmY4NAorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzEyOF9DQkNfU0hBMjU2ICAgICAgICAgIDB4ZmY4NgorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzEyOF9DQkNfU0hBMzg0ICAgICAgICAgIDB4ZmY4MworI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzEyOF9DQkNfU0hBNTEyICAgICAgICAgIDB4ZmY4NQorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzE5Ml9DQkNfU0hBMTYwICAgICAgICAgIDB4ZmYyMAorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzE5Ml9DQkNfU0hBMjI0ICAgICAgICAgIDB4ZmYyNAorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzE5Ml9DQkNfU0hBMjU2ICAgICAgICAgIDB4ZmYyNgorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzE5Ml9DQkNfU0hBMzg0ICAgICAgICAgIDB4ZmYyMworI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzE5Ml9DQkNfU0hBNTEyICAgICAgICAgIDB4ZmYyNQorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzI1Nl9DQkNfU0hBMTYwICAgICAgICAgIDB4ZmY2MAorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzI1Nl9DQkNfU0hBMjI0ICAgICAgICAgIDB4ZmY2NAorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzI1Nl9DQkNfU0hBMjU2ICAgICAgICAgIDB4ZmY2NgorI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzI1Nl9DQkNfU0hBMzg0ICAgICAgICAgIDB4ZmY2MworI2RlZmluZSBPUF9QQ0xfVExTMTFfQUVTXzI1Nl9DQkNfU0hBNTEyICAgICAgICAgIDB4ZmY2NQorCisKKy8qIEZvciBUTFMgMS4yIC0gT1BfUENMSURfVExTMTIgKi8KKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18xMjhfQ0JDX1NIQSAgICAgICAgICAgICAweDAwMmYKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18xMjhfQ0JDX1NIQV8yICAgICAgICAgICAweDAwMzAKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18xMjhfQ0JDX1NIQV8zICAgICAgICAgICAweDAwMzEKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18xMjhfQ0JDX1NIQV80ICAgICAgICAgICAweDAwMzIKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18xMjhfQ0JDX1NIQV81ICAgICAgICAgICAweDAwMzMKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18xMjhfQ0JDX1NIQV82ICAgICAgICAgICAweDAwMzQKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18xMjhfQ0JDX1NIQV83ICAgICAgICAgICAweDAwOGMKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18xMjhfQ0JDX1NIQV84ICAgICAgICAgICAweDAwOTAKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18xMjhfQ0JDX1NIQV85ICAgICAgICAgICAweDAwOTQKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18xMjhfQ0JDX1NIQV8xMCAgICAgICAgICAweGMwMDQKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18xMjhfQ0JDX1NIQV8xMSAgICAgICAgICAweGMwMDkKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18xMjhfQ0JDX1NIQV8xMiAgICAgICAgICAweGMwMGUKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18xMjhfQ0JDX1NIQV8xMyAgICAgICAgICAweGMwMTMKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18xMjhfQ0JDX1NIQV8xNCAgICAgICAgICAweGMwMTgKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18xMjhfQ0JDX1NIQV8xNSAgICAgICAgICAweGMwMWQKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18xMjhfQ0JDX1NIQV8xNiAgICAgICAgICAweGMwMWUKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18xMjhfQ0JDX1NIQV8xNyAgICAgICAgICAweGMwMWYKKworI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzI1Nl9DQkNfU0hBICAgICAgICAgICAgIDB4MDAzNQorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzI1Nl9DQkNfU0hBXzIgICAgICAgICAgIDB4MDAzNgorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzI1Nl9DQkNfU0hBXzMgICAgICAgICAgIDB4MDAzNworI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzI1Nl9DQkNfU0hBXzQgICAgICAgICAgIDB4MDAzOAorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzI1Nl9DQkNfU0hBXzUgICAgICAgICAgIDB4MDAzOQorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzI1Nl9DQkNfU0hBXzYgICAgICAgICAgIDB4MDAzYQorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzI1Nl9DQkNfU0hBXzcgICAgICAgICAgIDB4MDA4ZAorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzI1Nl9DQkNfU0hBXzggICAgICAgICAgIDB4MDA5MQorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzI1Nl9DQkNfU0hBXzkgICAgICAgICAgIDB4MDA5NQorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzI1Nl9DQkNfU0hBXzEwICAgICAgICAgIDB4YzAwNQorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzI1Nl9DQkNfU0hBXzExICAgICAgICAgIDB4YzAwYQorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzI1Nl9DQkNfU0hBXzEyICAgICAgICAgIDB4YzAwZgorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzI1Nl9DQkNfU0hBXzEzICAgICAgICAgIDB4YzAxNAorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzI1Nl9DQkNfU0hBXzE0ICAgICAgICAgIDB4YzAxOQorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzI1Nl9DQkNfU0hBXzE1ICAgICAgICAgIDB4YzAyMAorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzI1Nl9DQkNfU0hBXzE2ICAgICAgICAgIDB4YzAyMQorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzI1Nl9DQkNfU0hBXzE3ICAgICAgICAgIDB4YzAyMgorCisvKiAjZGVmaW5lIE9QX1BDTF9UTFMxMl8zREVTX0VERV9DQkNfTUQ1ICAgICAgICAgICAgMHgwMDIzICovCisKKyNkZWZpbmUgT1BfUENMX1RMUzEyXzNERVNfRURFX0NCQ19TSEEgICAgICAgICAgICAweDAwMWYKKyNkZWZpbmUgT1BfUENMX1RMUzEyXzNERVNfRURFX0NCQ19TSEFfMiAgICAgICAgICAweDAwOGIKKyNkZWZpbmUgT1BfUENMX1RMUzEyXzNERVNfRURFX0NCQ19TSEFfMyAgICAgICAgICAweDAwOGYKKyNkZWZpbmUgT1BfUENMX1RMUzEyXzNERVNfRURFX0NCQ19TSEFfNCAgICAgICAgICAweDAwOTMKKyNkZWZpbmUgT1BfUENMX1RMUzEyXzNERVNfRURFX0NCQ19TSEFfNSAgICAgICAgICAweDAwMGEKKyNkZWZpbmUgT1BfUENMX1RMUzEyXzNERVNfRURFX0NCQ19TSEFfNiAgICAgICAgICAweDAwMGQKKyNkZWZpbmUgT1BfUENMX1RMUzEyXzNERVNfRURFX0NCQ19TSEFfNyAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgT1BfUENMX1RMUzEyXzNERVNfRURFX0NCQ19TSEFfOCAgICAgICAgICAweDAwMTMKKyNkZWZpbmUgT1BfUENMX1RMUzEyXzNERVNfRURFX0NCQ19TSEFfOSAgICAgICAgICAweDAwMTYKKyNkZWZpbmUgT1BfUENMX1RMUzEyXzNERVNfRURFX0NCQ19TSEFfMTAgICAgICAgICAweDAwMWIKKyNkZWZpbmUgT1BfUENMX1RMUzEyXzNERVNfRURFX0NCQ19TSEFfMTEgICAgICAgICAweGMwMDMKKyNkZWZpbmUgT1BfUENMX1RMUzEyXzNERVNfRURFX0NCQ19TSEFfMTIgICAgICAgICAweGMwMDgKKyNkZWZpbmUgT1BfUENMX1RMUzEyXzNERVNfRURFX0NCQ19TSEFfMTMgICAgICAgICAweGMwMGQKKyNkZWZpbmUgT1BfUENMX1RMUzEyXzNERVNfRURFX0NCQ19TSEFfMTQgICAgICAgICAweGMwMTIKKyNkZWZpbmUgT1BfUENMX1RMUzEyXzNERVNfRURFX0NCQ19TSEFfMTUgICAgICAgICAweGMwMTcKKyNkZWZpbmUgT1BfUENMX1RMUzEyXzNERVNfRURFX0NCQ19TSEFfMTYgICAgICAgICAweGMwMWEKKyNkZWZpbmUgT1BfUENMX1RMUzEyXzNERVNfRURFX0NCQ19TSEFfMTcgICAgICAgICAweGMwMWIKKyNkZWZpbmUgT1BfUENMX1RMUzEyXzNERVNfRURFX0NCQ19TSEFfMTggICAgICAgICAweGMwMWMKKworI2RlZmluZSBPUF9QQ0xfVExTMTJfREVTNDBfQ0JDX01ENSAgICAgICAgICAgICAgIDB4MDAyOQorCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9ERVNfQ0JDX01ENSAgICAgICAgICAgICAgICAgMHgwMDIyCisKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0RFUzQwX0NCQ19TSEEgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0RFUzQwX0NCQ19TSEFfMiAgICAgICAgICAgICAweDAwMGIKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0RFUzQwX0NCQ19TSEFfMyAgICAgICAgICAgICAweDAwMGUKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0RFUzQwX0NCQ19TSEFfNCAgICAgICAgICAgICAweDAwMTEKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0RFUzQwX0NCQ19TSEFfNSAgICAgICAgICAgICAweDAwMTQKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0RFUzQwX0NCQ19TSEFfNiAgICAgICAgICAgICAweDAwMTkKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0RFUzQwX0NCQ19TSEFfNyAgICAgICAgICAgICAweDAwMjYKKworI2RlZmluZSBPUF9QQ0xfVExTMTJfREVTX0NCQ19TSEEgICAgICAgICAgICAgICAgIDB4MDAxZQorI2RlZmluZSBPUF9QQ0xfVExTMTJfREVTX0NCQ19TSEFfMiAgICAgICAgICAgICAgIDB4MDAwOQorI2RlZmluZSBPUF9QQ0xfVExTMTJfREVTX0NCQ19TSEFfMyAgICAgICAgICAgICAgIDB4MDAwYworI2RlZmluZSBPUF9QQ0xfVExTMTJfREVTX0NCQ19TSEFfNCAgICAgICAgICAgICAgIDB4MDAwZgorI2RlZmluZSBPUF9QQ0xfVExTMTJfREVTX0NCQ19TSEFfNSAgICAgICAgICAgICAgIDB4MDAxMgorI2RlZmluZSBPUF9QQ0xfVExTMTJfREVTX0NCQ19TSEFfNiAgICAgICAgICAgICAgIDB4MDAxNQorI2RlZmluZSBPUF9QQ0xfVExTMTJfREVTX0NCQ19TSEFfNyAgICAgICAgICAgICAgIDB4MDAxYQorCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9SQzRfMTI4X01ENSAgICAgICAgICAgICAgICAgMHgwMDI0CisjZGVmaW5lIE9QX1BDTF9UTFMxMl9SQzRfMTI4X01ENV8yICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIE9QX1BDTF9UTFMxMl9SQzRfMTI4X01ENV8zICAgICAgICAgICAgICAgMHgwMDE4CisKKyNkZWZpbmUgT1BfUENMX1RMUzEyX1JDNF80MF9NRDUgICAgICAgICAgICAgICAgICAweDAwMmIKKyNkZWZpbmUgT1BfUENMX1RMUzEyX1JDNF80MF9NRDVfMiAgICAgICAgICAgICAgICAweDAwMDMKKyNkZWZpbmUgT1BfUENMX1RMUzEyX1JDNF80MF9NRDVfMyAgICAgICAgICAgICAgICAweDAwMTcKKworI2RlZmluZSBPUF9QQ0xfVExTMTJfUkM0XzEyOF9TSEEgICAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBPUF9QQ0xfVExTMTJfUkM0XzEyOF9TSEFfMiAgICAgICAgICAgICAgIDB4MDA4YQorI2RlZmluZSBPUF9QQ0xfVExTMTJfUkM0XzEyOF9TSEFfMyAgICAgICAgICAgICAgIDB4MDA4ZQorI2RlZmluZSBPUF9QQ0xfVExTMTJfUkM0XzEyOF9TSEFfNCAgICAgICAgICAgICAgIDB4MDA5MgorI2RlZmluZSBPUF9QQ0xfVExTMTJfUkM0XzEyOF9TSEFfNSAgICAgICAgICAgICAgIDB4MDAwNQorI2RlZmluZSBPUF9QQ0xfVExTMTJfUkM0XzEyOF9TSEFfNiAgICAgICAgICAgICAgIDB4YzAwMgorI2RlZmluZSBPUF9QQ0xfVExTMTJfUkM0XzEyOF9TSEFfNyAgICAgICAgICAgICAgIDB4YzAwNworI2RlZmluZSBPUF9QQ0xfVExTMTJfUkM0XzEyOF9TSEFfOCAgICAgICAgICAgICAgIDB4YzAwYworI2RlZmluZSBPUF9QQ0xfVExTMTJfUkM0XzEyOF9TSEFfOSAgICAgICAgICAgICAgIDB4YzAxMQorI2RlZmluZSBPUF9QQ0xfVExTMTJfUkM0XzEyOF9TSEFfMTAgICAgICAgICAgICAgIDB4YzAxNgorCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9SQzRfNDBfU0hBICAgICAgICAgICAgICAgICAgMHgwMDI4CisKKy8qICNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18xMjhfQ0JDX1NIQTI1NiAgICAgICAgICAweDAwM2MgKi8KKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18xMjhfQ0JDX1NIQTI1Nl8yICAgICAgICAweDAwM2UKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18xMjhfQ0JDX1NIQTI1Nl8zICAgICAgICAweDAwM2YKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18xMjhfQ0JDX1NIQTI1Nl80ICAgICAgICAweDAwNDAKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18xMjhfQ0JDX1NIQTI1Nl81ICAgICAgICAweDAwNjcKKyNkZWZpbmUgT1BfUENMX1RMUzEyX0FFU18xMjhfQ0JDX1NIQTI1Nl82ICAgICAgICAweDAwNmMKKworLyogI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzI1Nl9DQkNfU0hBMjU2ICAgICAgICAgIDB4MDAzZCAqLworI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzI1Nl9DQkNfU0hBMjU2XzIgICAgICAgIDB4MDA2OAorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzI1Nl9DQkNfU0hBMjU2XzMgICAgICAgIDB4MDA2OQorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzI1Nl9DQkNfU0hBMjU2XzQgICAgICAgIDB4MDA2YQorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzI1Nl9DQkNfU0hBMjU2XzUgICAgICAgIDB4MDA2YgorI2RlZmluZSBPUF9QQ0xfVExTMTJfQUVTXzI1Nl9DQkNfU0hBMjU2XzYgICAgICAgIDB4MDA2ZAorCisvKiBBRUFEX0FFU194eHhfQ0NNL0dDTSByZW1haW4gdG8gYmUgZGVmaW5lZC4uLiAqLworCisjZGVmaW5lIE9QX1BDTF9UTFMxMl8zREVTX0VERV9DQkNfTUQ1ICAgICAgICAgICAgMHhmZjIzCisjZGVmaW5lIE9QX1BDTF9UTFMxMl8zREVTX0VERV9DQkNfU0hBMTYwICAgICAgICAgMHhmZjMwCisjZGVmaW5lIE9QX1BDTF9UTFMxMl8zREVTX0VERV9DQkNfU0hBMjI0ICAgICAgICAgMHhmZjM0CisjZGVmaW5lIE9QX1BDTF9UTFMxMl8zREVTX0VERV9DQkNfU0hBMjU2ICAgICAgICAgMHhmZjM2CisjZGVmaW5lIE9QX1BDTF9UTFMxMl8zREVTX0VERV9DQkNfU0hBMzg0ICAgICAgICAgMHhmZjMzCisjZGVmaW5lIE9QX1BDTF9UTFMxMl8zREVTX0VERV9DQkNfU0hBNTEyICAgICAgICAgMHhmZjM1CisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTI4X0NCQ19TSEExNjAgICAgICAgICAgMHhmZjgwCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTI4X0NCQ19TSEEyMjQgICAgICAgICAgMHhmZjg0CisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTI4X0NCQ19TSEEyNTYgICAgICAgICAgMHhmZjg2CisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTI4X0NCQ19TSEEzODQgICAgICAgICAgMHhmZjgzCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTI4X0NCQ19TSEE1MTIgICAgICAgICAgMHhmZjg1CisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTkyX0NCQ19TSEExNjAgICAgICAgICAgMHhmZjIwCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTkyX0NCQ19TSEEyMjQgICAgICAgICAgMHhmZjI0CisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTkyX0NCQ19TSEEyNTYgICAgICAgICAgMHhmZjI2CisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTkyX0NCQ19TSEEzODQgICAgICAgICAgMHhmZjIzCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMTkyX0NCQ19TSEE1MTIgICAgICAgICAgMHhmZjI1CisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMjU2X0NCQ19TSEExNjAgICAgICAgICAgMHhmZjYwCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMjU2X0NCQ19TSEEyMjQgICAgICAgICAgMHhmZjY0CisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMjU2X0NCQ19TSEEyNTYgICAgICAgICAgMHhmZjY2CisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMjU2X0NCQ19TSEEzODQgICAgICAgICAgMHhmZjYzCisjZGVmaW5lIE9QX1BDTF9UTFMxMl9BRVNfMjU2X0NCQ19TSEE1MTIgICAgICAgICAgMHhmZjY1CisKKy8qIEZvciBEVExTIC0gT1BfUENMSURfRFRMUyAqLworCisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18xMjhfQ0JDX1NIQSAgICAgICAgICAgICAgMHgwMDJmCisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18xMjhfQ0JDX1NIQV8yICAgICAgICAgICAgMHgwMDMwCisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18xMjhfQ0JDX1NIQV8zICAgICAgICAgICAgMHgwMDMxCisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18xMjhfQ0JDX1NIQV80ICAgICAgICAgICAgMHgwMDMyCisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18xMjhfQ0JDX1NIQV81ICAgICAgICAgICAgMHgwMDMzCisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18xMjhfQ0JDX1NIQV82ICAgICAgICAgICAgMHgwMDM0CisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18xMjhfQ0JDX1NIQV83ICAgICAgICAgICAgMHgwMDhjCisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18xMjhfQ0JDX1NIQV84ICAgICAgICAgICAgMHgwMDkwCisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18xMjhfQ0JDX1NIQV85ICAgICAgICAgICAgMHgwMDk0CisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18xMjhfQ0JDX1NIQV8xMCAgICAgICAgICAgMHhjMDA0CisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18xMjhfQ0JDX1NIQV8xMSAgICAgICAgICAgMHhjMDA5CisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18xMjhfQ0JDX1NIQV8xMiAgICAgICAgICAgMHhjMDBlCisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18xMjhfQ0JDX1NIQV8xMyAgICAgICAgICAgMHhjMDEzCisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18xMjhfQ0JDX1NIQV8xNCAgICAgICAgICAgMHhjMDE4CisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18xMjhfQ0JDX1NIQV8xNSAgICAgICAgICAgMHhjMDFkCisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18xMjhfQ0JDX1NIQV8xNiAgICAgICAgICAgMHhjMDFlCisjZGVmaW5lIE9QX1BDTF9EVExTX0FFU18xMjhfQ0JDX1NIQV8xNyAgICAgICAgICAgMHhjMDFmCisKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzI1Nl9DQkNfU0hBICAgICAgICAgICAgICAweDAwMzUKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzI1Nl9DQkNfU0hBXzIgICAgICAgICAgICAweDAwMzYKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzI1Nl9DQkNfU0hBXzMgICAgICAgICAgICAweDAwMzcKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzI1Nl9DQkNfU0hBXzQgICAgICAgICAgICAweDAwMzgKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzI1Nl9DQkNfU0hBXzUgICAgICAgICAgICAweDAwMzkKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzI1Nl9DQkNfU0hBXzYgICAgICAgICAgICAweDAwM2EKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzI1Nl9DQkNfU0hBXzcgICAgICAgICAgICAweDAwOGQKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzI1Nl9DQkNfU0hBXzggICAgICAgICAgICAweDAwOTEKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzI1Nl9DQkNfU0hBXzkgICAgICAgICAgICAweDAwOTUKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzI1Nl9DQkNfU0hBXzEwICAgICAgICAgICAweGMwMDUKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzI1Nl9DQkNfU0hBXzExICAgICAgICAgICAweGMwMGEKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzI1Nl9DQkNfU0hBXzEyICAgICAgICAgICAweGMwMGYKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzI1Nl9DQkNfU0hBXzEzICAgICAgICAgICAweGMwMTQKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzI1Nl9DQkNfU0hBXzE0ICAgICAgICAgICAweGMwMTkKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzI1Nl9DQkNfU0hBXzE1ICAgICAgICAgICAweGMwMjAKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzI1Nl9DQkNfU0hBXzE2ICAgICAgICAgICAweGMwMjEKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzI1Nl9DQkNfU0hBXzE3ICAgICAgICAgICAweGMwMjIKKworLyogI2RlZmluZSBPUF9QQ0xfRFRMU18zREVTX0VERV9DQkNfTUQ1ICAgICAgICAgICAgIDB4MDAyMyAqLworCisjZGVmaW5lIE9QX1BDTF9EVExTXzNERVNfRURFX0NCQ19TSEEgICAgICAgICAgICAgMHgwMDFmCisjZGVmaW5lIE9QX1BDTF9EVExTXzNERVNfRURFX0NCQ19TSEFfMiAgICAgICAgICAgMHgwMDhiCisjZGVmaW5lIE9QX1BDTF9EVExTXzNERVNfRURFX0NCQ19TSEFfMyAgICAgICAgICAgMHgwMDhmCisjZGVmaW5lIE9QX1BDTF9EVExTXzNERVNfRURFX0NCQ19TSEFfNCAgICAgICAgICAgMHgwMDkzCisjZGVmaW5lIE9QX1BDTF9EVExTXzNERVNfRURFX0NCQ19TSEFfNSAgICAgICAgICAgMHgwMDBhCisjZGVmaW5lIE9QX1BDTF9EVExTXzNERVNfRURFX0NCQ19TSEFfNiAgICAgICAgICAgMHgwMDBkCisjZGVmaW5lIE9QX1BDTF9EVExTXzNERVNfRURFX0NCQ19TSEFfNyAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIE9QX1BDTF9EVExTXzNERVNfRURFX0NCQ19TSEFfOCAgICAgICAgICAgMHgwMDEzCisjZGVmaW5lIE9QX1BDTF9EVExTXzNERVNfRURFX0NCQ19TSEFfOSAgICAgICAgICAgMHgwMDE2CisjZGVmaW5lIE9QX1BDTF9EVExTXzNERVNfRURFX0NCQ19TSEFfMTAgICAgICAgICAgMHgwMDFiCisjZGVmaW5lIE9QX1BDTF9EVExTXzNERVNfRURFX0NCQ19TSEFfMTEgICAgICAgICAgMHhjMDAzCisjZGVmaW5lIE9QX1BDTF9EVExTXzNERVNfRURFX0NCQ19TSEFfMTIgICAgICAgICAgMHhjMDA4CisjZGVmaW5lIE9QX1BDTF9EVExTXzNERVNfRURFX0NCQ19TSEFfMTMgICAgICAgICAgMHhjMDBkCisjZGVmaW5lIE9QX1BDTF9EVExTXzNERVNfRURFX0NCQ19TSEFfMTQgICAgICAgICAgMHhjMDEyCisjZGVmaW5lIE9QX1BDTF9EVExTXzNERVNfRURFX0NCQ19TSEFfMTUgICAgICAgICAgMHhjMDE3CisjZGVmaW5lIE9QX1BDTF9EVExTXzNERVNfRURFX0NCQ19TSEFfMTYgICAgICAgICAgMHhjMDFhCisjZGVmaW5lIE9QX1BDTF9EVExTXzNERVNfRURFX0NCQ19TSEFfMTcgICAgICAgICAgMHhjMDFiCisjZGVmaW5lIE9QX1BDTF9EVExTXzNERVNfRURFX0NCQ19TSEFfMTggICAgICAgICAgMHhjMDFjCisKKyNkZWZpbmUgT1BfUENMX0RUTFNfREVTNDBfQ0JDX01ENSAgICAgICAgICAgICAgICAweDAwMjkKKworI2RlZmluZSBPUF9QQ0xfRFRMU19ERVNfQ0JDX01ENSAgICAgICAgICAgICAgICAgIDB4MDAyMgorCisjZGVmaW5lIE9QX1BDTF9EVExTX0RFUzQwX0NCQ19TSEEgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIE9QX1BDTF9EVExTX0RFUzQwX0NCQ19TSEFfMiAgICAgICAgICAgICAgMHgwMDBiCisjZGVmaW5lIE9QX1BDTF9EVExTX0RFUzQwX0NCQ19TSEFfMyAgICAgICAgICAgICAgMHgwMDBlCisjZGVmaW5lIE9QX1BDTF9EVExTX0RFUzQwX0NCQ19TSEFfNCAgICAgICAgICAgICAgMHgwMDExCisjZGVmaW5lIE9QX1BDTF9EVExTX0RFUzQwX0NCQ19TSEFfNSAgICAgICAgICAgICAgMHgwMDE0CisjZGVmaW5lIE9QX1BDTF9EVExTX0RFUzQwX0NCQ19TSEFfNiAgICAgICAgICAgICAgMHgwMDE5CisjZGVmaW5lIE9QX1BDTF9EVExTX0RFUzQwX0NCQ19TSEFfNyAgICAgICAgICAgICAgMHgwMDI2CisKKworI2RlZmluZSBPUF9QQ0xfRFRMU19ERVNfQ0JDX1NIQSAgICAgICAgICAgICAgICAgIDB4MDAxZQorI2RlZmluZSBPUF9QQ0xfRFRMU19ERVNfQ0JDX1NIQV8yICAgICAgICAgICAgICAgIDB4MDAwOQorI2RlZmluZSBPUF9QQ0xfRFRMU19ERVNfQ0JDX1NIQV8zICAgICAgICAgICAgICAgIDB4MDAwYworI2RlZmluZSBPUF9QQ0xfRFRMU19ERVNfQ0JDX1NIQV80ICAgICAgICAgICAgICAgIDB4MDAwZgorI2RlZmluZSBPUF9QQ0xfRFRMU19ERVNfQ0JDX1NIQV81ICAgICAgICAgICAgICAgIDB4MDAxMgorI2RlZmluZSBPUF9QQ0xfRFRMU19ERVNfQ0JDX1NIQV82ICAgICAgICAgICAgICAgIDB4MDAxNQorI2RlZmluZSBPUF9QQ0xfRFRMU19ERVNfQ0JDX1NIQV83ICAgICAgICAgICAgICAgIDB4MDAxYQorCisKKyNkZWZpbmUgT1BfUENMX0RUTFNfM0RFU19FREVfQ0JDX01ENSAgICAgICAgICAgICAweGZmMjMKKyNkZWZpbmUgT1BfUENMX0RUTFNfM0RFU19FREVfQ0JDX1NIQTE2MCAgICAgICAgICAweGZmMzAKKyNkZWZpbmUgT1BfUENMX0RUTFNfM0RFU19FREVfQ0JDX1NIQTIyNCAgICAgICAgICAweGZmMzQKKyNkZWZpbmUgT1BfUENMX0RUTFNfM0RFU19FREVfQ0JDX1NIQTI1NiAgICAgICAgICAweGZmMzYKKyNkZWZpbmUgT1BfUENMX0RUTFNfM0RFU19FREVfQ0JDX1NIQTM4NCAgICAgICAgICAweGZmMzMKKyNkZWZpbmUgT1BfUENMX0RUTFNfM0RFU19FREVfQ0JDX1NIQTUxMiAgICAgICAgICAweGZmMzUKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzEyOF9DQkNfU0hBMTYwICAgICAgICAgICAweGZmODAKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzEyOF9DQkNfU0hBMjI0ICAgICAgICAgICAweGZmODQKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzEyOF9DQkNfU0hBMjU2ICAgICAgICAgICAweGZmODYKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzEyOF9DQkNfU0hBMzg0ICAgICAgICAgICAweGZmODMKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzEyOF9DQkNfU0hBNTEyICAgICAgICAgICAweGZmODUKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzE5Ml9DQkNfU0hBMTYwICAgICAgICAgICAweGZmMjAKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzE5Ml9DQkNfU0hBMjI0ICAgICAgICAgICAweGZmMjQKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzE5Ml9DQkNfU0hBMjU2ICAgICAgICAgICAweGZmMjYKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzE5Ml9DQkNfU0hBMzg0ICAgICAgICAgICAweGZmMjMKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzE5Ml9DQkNfU0hBNTEyICAgICAgICAgICAweGZmMjUKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzI1Nl9DQkNfU0hBMTYwICAgICAgICAgICAweGZmNjAKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzI1Nl9DQkNfU0hBMjI0ICAgICAgICAgICAweGZmNjQKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzI1Nl9DQkNfU0hBMjU2ICAgICAgICAgICAweGZmNjYKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzI1Nl9DQkNfU0hBMzg0ICAgICAgICAgICAweGZmNjMKKyNkZWZpbmUgT1BfUENMX0RUTFNfQUVTXzI1Nl9DQkNfU0hBNTEyICAgICAgICAgICAweGZmNjUKKworLyogODAyLjE2IFdpTUFYIHByb3RpbmZvcyAqLworI2RlZmluZSBPUF9QQ0xfV0lNQVhfT0ZETSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMQorI2RlZmluZSBPUF9QQ0xfV0lNQVhfT0ZETUEgICAgICAgICAgICAgICAgICAgICAgIDB4MDIzMQorCisvKiA4MDIuMTEgV2lGaSBwcm90aW5mb3MgKi8KKyNkZWZpbmUgT1BfUENMX1dJRkkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGFjMDQKKworLyogTWFjU2VjIHByb3RpbmZvcyAqLworI2RlZmluZSBPUF9QQ0xfTUFDU0VDICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKiBQS0kgdW5pZGlyZWN0aW9uYWwgcHJvdG9jb2wgcHJvdGluZm8gYml0cyAqLworI2RlZmluZSBPUF9QQ0xfUEtQUk9UX1RFU1QgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBPUF9QQ0xfUEtQUk9UX0RFQ1JZUFQgICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBPUF9QQ0xfUEtQUk9UX0VDQyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBPUF9QQ0xfUEtQUk9UX0YyTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorCisvKiBGb3Igbm9uLXByb3RvY29sL2FsZy1vbmx5IG9wIGNvbW1hbmRzICovCisjZGVmaW5lIE9QX0FMR19UWVBFX1NISUZUCTI0CisjZGVmaW5lIE9QX0FMR19UWVBFX01BU0sJKDB4NyA8PCBPUF9BTEdfVFlQRV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX1RZUEVfQ0xBU1MxCTIKKyNkZWZpbmUgT1BfQUxHX1RZUEVfQ0xBU1MyCTQKKworI2RlZmluZSBPUF9BTEdfQUxHU0VMX1NISUZUCTE2CisjZGVmaW5lIE9QX0FMR19BTEdTRUxfTUFTSwkoMHhmZiA8PCBPUF9BTEdfQUxHU0VMX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUxHU0VMX1NVQk1BU0sJKDB4MGYgPDwgT1BfQUxHX0FMR1NFTF9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FMR1NFTF9BRVMJKDB4MTAgPDwgT1BfQUxHX0FMR1NFTF9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FMR1NFTF9ERVMJKDB4MjAgPDwgT1BfQUxHX0FMR1NFTF9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FMR1NFTF8zREVTCSgweDIxIDw8IE9QX0FMR19BTEdTRUxfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BTEdTRUxfQVJDNAkoMHgzMCA8PCBPUF9BTEdfQUxHU0VMX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUxHU0VMX01ENQkoMHg0MCA8PCBPUF9BTEdfQUxHU0VMX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUxHU0VMX1NIQTEJKDB4NDEgPDwgT1BfQUxHX0FMR1NFTF9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FMR1NFTF9TSEEyMjQJKDB4NDIgPDwgT1BfQUxHX0FMR1NFTF9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FMR1NFTF9TSEEyNTYJKDB4NDMgPDwgT1BfQUxHX0FMR1NFTF9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FMR1NFTF9TSEEzODQJKDB4NDQgPDwgT1BfQUxHX0FMR1NFTF9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FMR1NFTF9TSEE1MTIJKDB4NDUgPDwgT1BfQUxHX0FMR1NFTF9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FMR1NFTF9STkcJKDB4NTAgPDwgT1BfQUxHX0FMR1NFTF9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FMR1NFTF9TTk9XCSgweDYwIDw8IE9QX0FMR19BTEdTRUxfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BTEdTRUxfU05PV19GOAkoMHg2MCA8PCBPUF9BTEdfQUxHU0VMX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUxHU0VMX0tBU1VNSQkoMHg3MCA8PCBPUF9BTEdfQUxHU0VMX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUxHU0VMX0NSQwkoMHg5MCA8PCBPUF9BTEdfQUxHU0VMX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUxHU0VMX1NOT1dfRjkJKDB4QTAgPDwgT1BfQUxHX0FMR1NFTF9TSElGVCkKKworI2RlZmluZSBPUF9BTEdfQUFJX1NISUZUCTQKKyNkZWZpbmUgT1BfQUxHX0FBSV9NQVNLCQkoMHgxZmYgPDwgT1BfQUxHX0FBSV9TSElGVCkKKworLyogYmxvY2tjaXBoZXIgQUFJIHNldCAqLworI2RlZmluZSBPUF9BTEdfQUFJX0NUUl9NT0QxMjgJKDB4MDAgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9DVFJfTU9EOAkoMHgwMSA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX0NUUl9NT0QxNgkoMHgwMiA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX0NUUl9NT0QyNAkoMHgwMyA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX0NUUl9NT0QzMgkoMHgwNCA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX0NUUl9NT0Q0MAkoMHgwNSA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX0NUUl9NT0Q0OAkoMHgwNiA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX0NUUl9NT0Q1NgkoMHgwNyA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX0NUUl9NT0Q2NAkoMHgwOCA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX0NUUl9NT0Q3MgkoMHgwOSA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX0NUUl9NT0Q4MAkoMHgwYSA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX0NUUl9NT0Q4OAkoMHgwYiA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX0NUUl9NT0Q5NgkoMHgwYyA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX0NUUl9NT0QxMDQJKDB4MGQgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9DVFJfTU9EMTEyCSgweDBlIDw8IE9QX0FMR19BQUlfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BQUlfQ1RSX01PRDEyMAkoMHgwZiA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX0NCQwkJKDB4MTAgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9FQ0IJCSgweDIwIDw8IE9QX0FMR19BQUlfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BQUlfQ0ZCCQkoMHgzMCA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX09GQgkJKDB4NDAgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9YVFMJCSgweDUwIDw8IE9QX0FMR19BQUlfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BQUlfQ01BQwkJKDB4NjAgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9YQ0JDX01BQwkoMHg3MCA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX0NDTQkJKDB4ODAgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9HQ00JCSgweDkwIDw8IE9QX0FMR19BQUlfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BQUlfQ0JDX1hDQkNNQUMJKDB4YTAgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9DVFJfWENCQ01BQwkoMHhiMCA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX0NIRUNLT0RECSgweDgwIDw8IE9QX0FMR19BQUlfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BQUlfREsJCSgweDEwMCA8PCBPUF9BTEdfQUFJX1NISUZUKQorCisvKiByYW5kb21pemVyIEFBSSBzZXQgKi8KKyNkZWZpbmUgT1BfQUxHX0FBSV9STkcJCSgweDAwIDw8IE9QX0FMR19BQUlfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BQUlfUk5HX05PWkVSTwkoMHgxMCA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX1JOR19PREQJKDB4MjAgPDwgT1BfQUxHX0FBSV9TSElGVCkKKworLyogaG1hYy9zbWFjIEFBSSBzZXQgKi8KKyNkZWZpbmUgT1BfQUxHX0FBSV9IQVNICQkoMHgwMCA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX0hNQUMJCSgweDAxIDw8IE9QX0FMR19BQUlfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BQUlfU01BQwkJKDB4MDIgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9ITUFDX1BSRUNPTVAJKDB4MDQgPDwgT1BfQUxHX0FBSV9TSElGVCkKKworLyogQ1JDIEFBSSBzZXQqLworI2RlZmluZSBPUF9BTEdfQUFJXzgwMgkJKDB4MDEgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV8zMzg1CQkoMHgwMiA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX0NVU1RfUE9MWQkoMHgwNCA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX0RJUwkJKDB4MTAgPDwgT1BfQUxHX0FBSV9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FBSV9ET1MJCSgweDIwIDw8IE9QX0FMR19BQUlfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BQUlfRE9DCQkoMHg0MCA8PCBPUF9BTEdfQUFJX1NISUZUKQorCisvKiBLYXN1bWkvU05PVyBBQUkgc2V0ICovCisjZGVmaW5lIE9QX0FMR19BQUlfRjgJCSgweGMwIDw8IE9QX0FMR19BQUlfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BQUlfRjkJCSgweGM4IDw8IE9QX0FMR19BQUlfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19BQUlfR1NNCQkoMHgxMCA8PCBPUF9BTEdfQUFJX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQUFJX0VER0UJCSgweDIwIDw8IE9QX0FMR19BQUlfU0hJRlQpCisKKworI2RlZmluZSBPUF9BTEdfQVNfU0hJRlQJCTIKKyNkZWZpbmUgT1BfQUxHX0FTX01BU0sJCSgweDMgPDwgT1BfQUxHX0FTX1NISUZUKQorI2RlZmluZSBPUF9BTEdfQVNfVVBEQVRFCSgwIDw8IE9QX0FMR19BU19TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FTX0lOSVQJCSgxIDw8IE9QX0FMR19BU19TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FTX0ZJTkFMSVpFCSgyIDw8IE9QX0FMR19BU19TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0FTX0lOSVRGSU5BTAkoMyA8PCBPUF9BTEdfQVNfU0hJRlQpCisKKyNkZWZpbmUgT1BfQUxHX0lDVl9TSElGVAkxCisjZGVmaW5lIE9QX0FMR19JQ1ZfTUFTSwkJKDEgPDwgT1BfQUxHX0lDVl9TSElGVCkKKyNkZWZpbmUgT1BfQUxHX0lDVl9PRkYJCSgwIDw8IE9QX0FMR19JQ1ZfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19JQ1ZfT04JCSgxIDw8IE9QX0FMR19JQ1ZfU0hJRlQpCisKKyNkZWZpbmUgT1BfQUxHX0RJUl9TSElGVAkwCisjZGVmaW5lIE9QX0FMR19ESVJfTUFTSwkJMQorI2RlZmluZSBPUF9BTEdfREVDUllQVAkJMAorI2RlZmluZSBPUF9BTEdfRU5DUllQVAkJMQorCisvKiBQS0hBIGFsZ29yaXRobSB0eXBlIHNldCAqLworI2RlZmluZSBPUF9BTEdfUEsgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgT1BfQUxHX1BLX0ZVTl9NQVNLICAgICAgICAgICAweDNmIC8qIGNscm1lbSwgbW9kbWF0aCwgb3IgY3B5bWVtICovCisKKy8qIFBLSEEgbW9kZSBjbGVhciBtZW1vcnkgZnVuY3Rpb25zICovCisjZGVmaW5lIE9QX0FMR19QS01PREVfQV9SQU0gICAgICAgICAgMHg4MDAwMAorI2RlZmluZSBPUF9BTEdfUEtNT0RFX0JfUkFNICAgICAgICAgIDB4NDAwMDAKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9FX1JBTSAgICAgICAgICAweDIwMDAwCisjZGVmaW5lIE9QX0FMR19QS01PREVfTl9SQU0gICAgICAgICAgMHgxMDAwMAorI2RlZmluZSBPUF9BTEdfUEtNT0RFX0NMRUFSTUVNICAgICAgIDB4MDAwMDEKKworLyogUEtIQSBtb2RlIG1vZHVsYXItYXJpdGhtZXRpYyBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9NT0RfSU5fTU9OVFkgICAweDgwMDAwCisjZGVmaW5lIE9QX0FMR19QS01PREVfTU9EX09VVF9NT05UWSAgMHg0MDAwMAorI2RlZmluZSBPUF9BTEdfUEtNT0RFX01PRF9GMk0gICAgICAgIDB4MjAwMDAKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9NT0RfUjJfSU4gICAgICAweDEwMDAwCisjZGVmaW5lIE9QX0FMR19QS01PREVfUFJKRUNUViAgICAgICAgMHgwMDgwMAorI2RlZmluZSBPUF9BTEdfUEtNT0RFX1RJTUVfRVEgICAgICAgIDB4NDAwCisjZGVmaW5lIE9QX0FMR19QS01PREVfT1VUX0IgICAgICAgICAgMHgwMDAKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9PVVRfQSAgICAgICAgICAweDEwMAorI2RlZmluZSBPUF9BTEdfUEtNT0RFX01PRF9BREQgICAgICAgIDB4MDAyCisjZGVmaW5lIE9QX0FMR19QS01PREVfTU9EX1NVQl9BQiAgICAgMHgwMDMKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9NT0RfU1VCX0JBICAgICAweDAwNAorI2RlZmluZSBPUF9BTEdfUEtNT0RFX01PRF9NVUxUICAgICAgIDB4MDA1CisjZGVmaW5lIE9QX0FMR19QS01PREVfTU9EX0VYUE8gICAgICAgMHgwMDYKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9NT0RfUkVEVUNUICAgICAweDAwNworI2RlZmluZSBPUF9BTEdfUEtNT0RFX01PRF9JTlYgICAgICAgIDB4MDA4CisjZGVmaW5lIE9QX0FMR19QS01PREVfTU9EX0VDQ19BREQgICAgMHgwMDkKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9NT0RfRUNDX0RCTCAgICAweDAwYQorI2RlZmluZSBPUF9BTEdfUEtNT0RFX01PRF9FQ0NfTVVMVCAgIDB4MDBiCisjZGVmaW5lIE9QX0FMR19QS01PREVfTU9EX01PTlRfQ05TVCAgMHgwMGMKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9NT0RfQ1JUX0NOU1QgICAweDAwZAorI2RlZmluZSBPUF9BTEdfUEtNT0RFX01PRF9HQ0QgICAgICAgIDB4MDBlCisjZGVmaW5lIE9QX0FMR19QS01PREVfTU9EX1BSSU1BTElUWSAgMHgwMGYKKworLyogUEtIQSBtb2RlIGNvcHktbWVtb3J5IGZ1bmN0aW9ucyAqLworI2RlZmluZSBPUF9BTEdfUEtNT0RFX1NSQ19SRUdfU0hJRlQgIDEzCisjZGVmaW5lIE9QX0FMR19QS01PREVfU1JDX1JFR19NQVNLICAgKDcgPDwgT1BfQUxHX1BLTU9ERV9TUkNfUkVHX1NISUZUKQorI2RlZmluZSBPUF9BTEdfUEtNT0RFX0RTVF9SRUdfU0hJRlQgIDEwCisjZGVmaW5lIE9QX0FMR19QS01PREVfRFNUX1JFR19NQVNLICAgKDcgPDwgT1BfQUxHX1BLTU9ERV9EU1RfUkVHX1NISUZUKQorI2RlZmluZSBPUF9BTEdfUEtNT0RFX1NSQ19TRUdfU0hJRlQgIDgKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9TUkNfU0VHX01BU0sgICAoMyA8PCBPUF9BTEdfUEtNT0RFX1NSQ19TRUdfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19QS01PREVfRFNUX1NFR19TSElGVCAgNgorI2RlZmluZSBPUF9BTEdfUEtNT0RFX0RTVF9TRUdfTUFTSyAgICgzIDw8IE9QX0FMR19QS01PREVfRFNUX1NFR19TSElGVCkKKworI2RlZmluZSBPUF9BTEdfUEtNT0RFX1NSQ19SRUdfQSAgICAgICgwIDw8IE9QX0FMR19QS01PREVfU1JDX1JFR19TSElGVCkKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9TUkNfUkVHX0IgICAgICAoMSA8PCBPUF9BTEdfUEtNT0RFX1NSQ19SRUdfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19QS01PREVfU1JDX1JFR19OICAgICAgKDMgPDwgT1BfQUxHX1BLTU9ERV9TUkNfUkVHX1NISUZUKQorI2RlZmluZSBPUF9BTEdfUEtNT0RFX0RTVF9SRUdfQSAgICAgICgwIDw8IE9QX0FMR19QS01PREVfRFNUX1JFR19TSElGVCkKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9EU1RfUkVHX0IgICAgICAoMSA8PCBPUF9BTEdfUEtNT0RFX0RTVF9SRUdfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19QS01PREVfRFNUX1JFR19FICAgICAgKDIgPDwgT1BfQUxHX1BLTU9ERV9EU1RfUkVHX1NISUZUKQorI2RlZmluZSBPUF9BTEdfUEtNT0RFX0RTVF9SRUdfTiAgICAgICgzIDw8IE9QX0FMR19QS01PREVfRFNUX1JFR19TSElGVCkKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9TUkNfU0VHXzAgICAgICAoMCA8PCBPUF9BTEdfUEtNT0RFX1NSQ19TRUdfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19QS01PREVfU1JDX1NFR18xICAgICAgKDEgPDwgT1BfQUxHX1BLTU9ERV9TUkNfU0VHX1NISUZUKQorI2RlZmluZSBPUF9BTEdfUEtNT0RFX1NSQ19TRUdfMiAgICAgICgyIDw8IE9QX0FMR19QS01PREVfU1JDX1NFR19TSElGVCkKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9TUkNfU0VHXzMgICAgICAoMyA8PCBPUF9BTEdfUEtNT0RFX1NSQ19TRUdfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19QS01PREVfRFNUX1NFR18wICAgICAgKDAgPDwgT1BfQUxHX1BLTU9ERV9EU1RfU0VHX1NISUZUKQorI2RlZmluZSBPUF9BTEdfUEtNT0RFX0RTVF9TRUdfMSAgICAgICgxIDw8IE9QX0FMR19QS01PREVfRFNUX1NFR19TSElGVCkKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9EU1RfU0VHXzIgICAgICAoMiA8PCBPUF9BTEdfUEtNT0RFX0RTVF9TRUdfU0hJRlQpCisjZGVmaW5lIE9QX0FMR19QS01PREVfRFNUX1NFR18zICAgICAgKDMgPDwgT1BfQUxHX1BLTU9ERV9EU1RfU0VHX1NISUZUKQorI2RlZmluZSBPUF9BTEdfUEtNT0RFX0NQWU1FTV9OX1NaICAgIDB4ODAKKyNkZWZpbmUgT1BfQUxHX1BLTU9ERV9DUFlNRU1fU1JDX1NaICAweDgxCisKKy8qCisgKiBTRVFfSU5fUFRSIENvbW1hbmQgQ29uc3RydWN0cworICovCisKKy8qIFJlbGVhc2UgQnVmZmVycyAqLworI2RlZmluZSBTUUlOX1JCUyAgICAgICAgICAgICAgIDB4MDQwMDAwMDAKKworLyogU2VxdWVuY2UgcG9pbnRlciBpcyByZWFsbHkgYSBkZXNjcmlwdG9yICovCisjZGVmaW5lIFNRSU5fSU5MICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorCisvKiBTZXF1ZW5jZSBwb2ludGVyIGlzIGEgc2NhdHRlci1nYXRoZXIgdGFibGUgKi8KKyNkZWZpbmUgU1FJTl9TR0YgICAgICAgICAgICAgICAweDAxMDAwMDAwCisKKy8qIEFwcGVuZHMgdG8gYSBwcmV2aW91cyBwb2ludGVyICovCisjZGVmaW5lIFNRSU5fUFJFICAgICAgICAgICAgICAgMHgwMDgwMDAwMAorCisvKiBVc2UgZXh0ZW5kZWQgbGVuZ3RoIGZvbGxvd2luZyBwb2ludGVyICovCisjZGVmaW5lIFNRSU5fRVhUICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorCisvKiBSZXN0b3JlIHNlcXVlbmNlIHdpdGggcG9pbnRlci9sZW5ndGggKi8KKyNkZWZpbmUgU1FJTl9SVE8gICAgICAgICAgICAgICAweDAwMjAwMDAwCisKKy8qIFJlcGxhY2Ugam9iIGRlc2NyaXB0b3IgKi8KKyNkZWZpbmUgU1FJTl9SSkQgICAgICAgICAgICAgICAweDAwMTAwMDAwCisKKyNkZWZpbmUgU1FJTl9MRU5fU0hJRlQgICAgICAgICAgIDAKKyNkZWZpbmUgU1FJTl9MRU5fTUFTSyAgICAgICAgICAgKDB4ZmZmZiA8PCBTUUlOX0xFTl9TSElGVCkKKworLyoKKyAqIFNFUV9PVVRfUFRSIENvbW1hbmQgQ29uc3RydWN0cworICovCisKKy8qIFNlcXVlbmNlIHBvaW50ZXIgaXMgYSBzY2F0dGVyLWdhdGhlciB0YWJsZSAqLworI2RlZmluZSBTUU9VVF9TR0YgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKworLyogQXBwZW5kcyB0byBhIHByZXZpb3VzIHBvaW50ZXIgKi8KKyNkZWZpbmUgU1FPVVRfUFJFICAgICAgICAgICAgICAweDAwODAwMDAwCisKKy8qIFJlc3RvcmUgc2VxdWVuY2Ugd2l0aCBwb2ludGVyL2xlbmd0aCAqLworI2RlZmluZSBTUU9VVF9SVE8gICAgICAgICAgICAgIDB4MDAyMDAwMDAKKworLyogVXNlIGV4dGVuZGVkIGxlbmd0aCBmb2xsb3dpbmcgcG9pbnRlciAqLworI2RlZmluZSBTUU9VVF9FWFQgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKworI2RlZmluZSBTUU9VVF9MRU5fU0hJRlQgICAgICAgICAgIDAKKyNkZWZpbmUgU1FPVVRfTEVOX01BU0sgICAgICAgICAgICgweGZmZmYgPDwgU1FPVVRfTEVOX1NISUZUKQorCisKKy8qCisgKiBTSUdOQVRVUkUgQ29tbWFuZCBDb25zdHJ1Y3RzCisgKi8KKworLyogVFlQRSBmaWVsZCBpcyBhbGwgdGhhdCdzIHJlbGV2YW50ICovCisjZGVmaW5lIFNJR05fVFlQRV9TSElGVCAgICAgICAgIDE2CisjZGVmaW5lIFNJR05fVFlQRV9NQVNLICAgICAgICAgICgweDBmIDw8IFNJR05fVFlQRV9TSElGVCkKKworI2RlZmluZSBTSUdOX1RZUEVfRklOQUwgICAgICAgICAoMHgwMCA8PCBTSUdOX1RZUEVfU0hJRlQpCisjZGVmaW5lIFNJR05fVFlQRV9GSU5BTF9SRVNUT1JFICgweDAxIDw8IFNJR05fVFlQRV9TSElGVCkKKyNkZWZpbmUgU0lHTl9UWVBFX0ZJTkFMX05PTlpFUk8gKDB4MDIgPDwgU0lHTl9UWVBFX1NISUZUKQorI2RlZmluZSBTSUdOX1RZUEVfSU1NXzIgICAgICAgICAoMHgwYSA8PCBTSUdOX1RZUEVfU0hJRlQpCisjZGVmaW5lIFNJR05fVFlQRV9JTU1fMyAgICAgICAgICgweDBiIDw8IFNJR05fVFlQRV9TSElGVCkKKyNkZWZpbmUgU0lHTl9UWVBFX0lNTV80ICAgICAgICAgKDB4MGMgPDwgU0lHTl9UWVBFX1NISUZUKQorCisvKgorICogTU9WRSBDb21tYW5kIENvbnN0cnVjdHMKKyAqLworCisjZGVmaW5lIE1PVkVfQVVYX1NISUZUICAgICAgICAgIDI1CisjZGVmaW5lIE1PVkVfQVVYX01BU0sgICAgICAgICAgICgzIDw8IE1PVkVfQVVYX1NISUZUKQorI2RlZmluZSBNT1ZFX0FVWF9NUyAgICAgICAgICAgICAoMiA8PCBNT1ZFX0FVWF9TSElGVCkKKyNkZWZpbmUgTU9WRV9BVVhfTFMgICAgICAgICAgICAgKDEgPDwgTU9WRV9BVVhfU0hJRlQpCisKKyNkZWZpbmUgTU9WRV9XQUlUQ09NUF9TSElGVCAgICAgMjQKKyNkZWZpbmUgTU9WRV9XQUlUQ09NUF9NQVNLICAgICAgKDEgPDwgTU9WRV9XQUlUQ09NUF9TSElGVCkKKyNkZWZpbmUgTU9WRV9XQUlUQ09NUCAgICAgICAgICAgKDEgPDwgTU9WRV9XQUlUQ09NUF9TSElGVCkKKworI2RlZmluZSBNT1ZFX1NSQ19TSElGVCAgICAgICAgICAyMAorI2RlZmluZSBNT1ZFX1NSQ19NQVNLICAgICAgICAgICAoMHgwZiA8PCBNT1ZFX1NSQ19TSElGVCkKKyNkZWZpbmUgTU9WRV9TUkNfQ0xBU1MxQ1RYICAgICAgKDB4MDAgPDwgTU9WRV9TUkNfU0hJRlQpCisjZGVmaW5lIE1PVkVfU1JDX0NMQVNTMkNUWCAgICAgICgweDAxIDw8IE1PVkVfU1JDX1NISUZUKQorI2RlZmluZSBNT1ZFX1NSQ19PVVRGSUZPICAgICAgICAoMHgwMiA8PCBNT1ZFX1NSQ19TSElGVCkKKyNkZWZpbmUgTU9WRV9TUkNfREVTQ0JVRiAgICAgICAgKDB4MDMgPDwgTU9WRV9TUkNfU0hJRlQpCisjZGVmaW5lIE1PVkVfU1JDX01BVEgwICAgICAgICAgICgweDA0IDw8IE1PVkVfU1JDX1NISUZUKQorI2RlZmluZSBNT1ZFX1NSQ19NQVRIMSAgICAgICAgICAoMHgwNSA8PCBNT1ZFX1NSQ19TSElGVCkKKyNkZWZpbmUgTU9WRV9TUkNfTUFUSDIgICAgICAgICAgKDB4MDYgPDwgTU9WRV9TUkNfU0hJRlQpCisjZGVmaW5lIE1PVkVfU1JDX01BVEgzICAgICAgICAgICgweDA3IDw8IE1PVkVfU1JDX1NISUZUKQorI2RlZmluZSBNT1ZFX1NSQ19JTkZJRk8gICAgICAgICAoMHgwOCA8PCBNT1ZFX1NSQ19TSElGVCkKKyNkZWZpbmUgTU9WRV9TUkNfSU5GSUZPX0NMICAgICAgKDB4MDkgPDwgTU9WRV9TUkNfU0hJRlQpCisKKyNkZWZpbmUgTU9WRV9ERVNUX1NISUZUICAgICAgICAgMTYKKyNkZWZpbmUgTU9WRV9ERVNUX01BU0sgICAgICAgICAgKDB4MGYgPDwgTU9WRV9ERVNUX1NISUZUKQorI2RlZmluZSBNT1ZFX0RFU1RfQ0xBU1MxQ1RYICAgICAoMHgwMCA8PCBNT1ZFX0RFU1RfU0hJRlQpCisjZGVmaW5lIE1PVkVfREVTVF9DTEFTUzJDVFggICAgICgweDAxIDw8IE1PVkVfREVTVF9TSElGVCkKKyNkZWZpbmUgTU9WRV9ERVNUX09VVEZJRk8gICAgICAgKDB4MDIgPDwgTU9WRV9ERVNUX1NISUZUKQorI2RlZmluZSBNT1ZFX0RFU1RfREVTQ0JVRiAgICAgICAoMHgwMyA8PCBNT1ZFX0RFU1RfU0hJRlQpCisjZGVmaW5lIE1PVkVfREVTVF9NQVRIMCAgICAgICAgICgweDA0IDw8IE1PVkVfREVTVF9TSElGVCkKKyNkZWZpbmUgTU9WRV9ERVNUX01BVEgxICAgICAgICAgKDB4MDUgPDwgTU9WRV9ERVNUX1NISUZUKQorI2RlZmluZSBNT1ZFX0RFU1RfTUFUSDIgICAgICAgICAoMHgwNiA8PCBNT1ZFX0RFU1RfU0hJRlQpCisjZGVmaW5lIE1PVkVfREVTVF9NQVRIMyAgICAgICAgICgweDA3IDw8IE1PVkVfREVTVF9TSElGVCkKKyNkZWZpbmUgTU9WRV9ERVNUX0NMQVNTMUlORklGTyAgKDB4MDggPDwgTU9WRV9ERVNUX1NISUZUKQorI2RlZmluZSBNT1ZFX0RFU1RfQ0xBU1MySU5GSUZPICAoMHgwOSA8PCBNT1ZFX0RFU1RfU0hJRlQpCisjZGVmaW5lIE1PVkVfREVTVF9QS19BICAgICAgICAgICgweDBjIDw8IE1PVkVfREVTVF9TSElGVCkKKyNkZWZpbmUgTU9WRV9ERVNUX0NMQVNTMUtFWSAgICAgKDB4MGQgPDwgTU9WRV9ERVNUX1NISUZUKQorI2RlZmluZSBNT1ZFX0RFU1RfQ0xBU1MyS0VZICAgICAoMHgwZSA8PCBNT1ZFX0RFU1RfU0hJRlQpCisKKyNkZWZpbmUgTU9WRV9PRkZTRVRfU0hJRlQgICAgICAgOAorI2RlZmluZSBNT1ZFX09GRlNFVF9NQVNLICAgICAgICAoMHhmZiA8PCBNT1ZFX09GRlNFVF9TSElGVCkKKworI2RlZmluZSBNT1ZFX0xFTl9TSElGVCAgICAgICAgICAwCisjZGVmaW5lIE1PVkVfTEVOX01BU0sgICAgICAgICAgICgweGZmIDw8IE1PVkVfTEVOX1NISUZUKQorCisjZGVmaW5lIE1PVkVMRU5fTVJTRUxfU0hJRlQgICAgIDAKKyNkZWZpbmUgTU9WRUxFTl9NUlNFTF9NQVNLICAgICAgKDB4MyA8PCBNT1ZFX0xFTl9TSElGVCkKKworLyoKKyAqIE1BVEggQ29tbWFuZCBDb25zdHJ1Y3RzCisgKi8KKworI2RlZmluZSBNQVRIX0lGQl9TSElGVCAgICAgICAgICAyNgorI2RlZmluZSBNQVRIX0lGQl9NQVNLICAgICAgICAgICAoMSA8PCBNQVRIX0lGQl9TSElGVCkKKyNkZWZpbmUgTUFUSF9JRkIgICAgICAgICAgICAgICAgKDEgPDwgTUFUSF9JRkJfU0hJRlQpCisKKyNkZWZpbmUgTUFUSF9ORlVfU0hJRlQgICAgICAgICAgMjUKKyNkZWZpbmUgTUFUSF9ORlVfTUFTSyAgICAgICAgICAgKDEgPDwgTUFUSF9ORlVfU0hJRlQpCisjZGVmaW5lIE1BVEhfTkZVICAgICAgICAgICAgICAgICgxIDw8IE1BVEhfTkZVX1NISUZUKQorCisjZGVmaW5lIE1BVEhfU1RMX1NISUZUICAgICAgICAgIDI0CisjZGVmaW5lIE1BVEhfU1RMX01BU0sgICAgICAgICAgICgxIDw8IE1BVEhfU1RMX1NISUZUKQorI2RlZmluZSBNQVRIX1NUTCAgICAgICAgICAgICAgICAoMSA8PCBNQVRIX1NUTF9TSElGVCkKKworLyogRnVuY3Rpb24gc2VsZWN0b3JzICovCisjZGVmaW5lIE1BVEhfRlVOX1NISUZUICAgICAgICAgIDIwCisjZGVmaW5lIE1BVEhfRlVOX01BU0sgICAgICAgICAgICgweDBmIDw8IE1BVEhfRlVOX1NISUZUKQorI2RlZmluZSBNQVRIX0ZVTl9BREQgICAgICAgICAgICAoMHgwMCA8PCBNQVRIX0ZVTl9TSElGVCkKKyNkZWZpbmUgTUFUSF9GVU5fQUREQyAgICAgICAgICAgKDB4MDEgPDwgTUFUSF9GVU5fU0hJRlQpCisjZGVmaW5lIE1BVEhfRlVOX1NVQiAgICAgICAgICAgICgweDAyIDw8IE1BVEhfRlVOX1NISUZUKQorI2RlZmluZSBNQVRIX0ZVTl9TVUJCICAgICAgICAgICAoMHgwMyA8PCBNQVRIX0ZVTl9TSElGVCkKKyNkZWZpbmUgTUFUSF9GVU5fT1IgICAgICAgICAgICAgKDB4MDQgPDwgTUFUSF9GVU5fU0hJRlQpCisjZGVmaW5lIE1BVEhfRlVOX0FORCAgICAgICAgICAgICgweDA1IDw8IE1BVEhfRlVOX1NISUZUKQorI2RlZmluZSBNQVRIX0ZVTl9YT1IgICAgICAgICAgICAoMHgwNiA8PCBNQVRIX0ZVTl9TSElGVCkKKyNkZWZpbmUgTUFUSF9GVU5fTFNISUZUICAgICAgICAgKDB4MDcgPDwgTUFUSF9GVU5fU0hJRlQpCisjZGVmaW5lIE1BVEhfRlVOX1JTSElGVCAgICAgICAgICgweDA4IDw8IE1BVEhfRlVOX1NISUZUKQorI2RlZmluZSBNQVRIX0ZVTl9TSExEICAgICAgICAgICAoMHgwOSA8PCBNQVRIX0ZVTl9TSElGVCkKKyNkZWZpbmUgTUFUSF9GVU5fWkJZVCAgICAgICAgICAgKDB4MGEgPDwgTUFUSF9GVU5fU0hJRlQpCisKKy8qIFNvdXJjZSAwIHNlbGVjdG9ycyAqLworI2RlZmluZSBNQVRIX1NSQzBfU0hJRlQgICAgICAgICAxNgorI2RlZmluZSBNQVRIX1NSQzBfTUFTSyAgICAgICAgICAoMHgwZiA8PCBNQVRIX1NSQzBfU0hJRlQpCisjZGVmaW5lIE1BVEhfU1JDMF9SRUcwICAgICAgICAgICgweDAwIDw8IE1BVEhfU1JDMF9TSElGVCkKKyNkZWZpbmUgTUFUSF9TUkMwX1JFRzEgICAgICAgICAgKDB4MDEgPDwgTUFUSF9TUkMwX1NISUZUKQorI2RlZmluZSBNQVRIX1NSQzBfUkVHMiAgICAgICAgICAoMHgwMiA8PCBNQVRIX1NSQzBfU0hJRlQpCisjZGVmaW5lIE1BVEhfU1JDMF9SRUczICAgICAgICAgICgweDAzIDw8IE1BVEhfU1JDMF9TSElGVCkKKyNkZWZpbmUgTUFUSF9TUkMwX0lNTSAgICAgICAgICAgKDB4MDQgPDwgTUFUSF9TUkMwX1NISUZUKQorI2RlZmluZSBNQVRIX1NSQzBfU0VRSU5MRU4gICAgICAoMHgwOCA8PCBNQVRIX1NSQzBfU0hJRlQpCisjZGVmaW5lIE1BVEhfU1JDMF9TRVFPVVRMRU4gICAgICgweDA5IDw8IE1BVEhfU1JDMF9TSElGVCkKKyNkZWZpbmUgTUFUSF9TUkMwX1ZBUlNFUUlOTEVOICAgKDB4MGEgPDwgTUFUSF9TUkMwX1NISUZUKQorI2RlZmluZSBNQVRIX1NSQzBfVkFSU0VRT1VUTEVOICAoMHgwYiA8PCBNQVRIX1NSQzBfU0hJRlQpCisjZGVmaW5lIE1BVEhfU1JDMF9aRVJPICAgICAgICAgICgweDBjIDw8IE1BVEhfU1JDMF9TSElGVCkKKworLyogU291cmNlIDEgc2VsZWN0b3JzICovCisjZGVmaW5lIE1BVEhfU1JDMV9TSElGVCAgICAgICAgIDEyCisjZGVmaW5lIE1BVEhfU1JDMV9NQVNLICAgICAgICAgICgweDBmIDw8IE1BVEhfU1JDMV9TSElGVCkKKyNkZWZpbmUgTUFUSF9TUkMxX1JFRzAgICAgICAgICAgKDB4MDAgPDwgTUFUSF9TUkMxX1NISUZUKQorI2RlZmluZSBNQVRIX1NSQzFfUkVHMSAgICAgICAgICAoMHgwMSA8PCBNQVRIX1NSQzFfU0hJRlQpCisjZGVmaW5lIE1BVEhfU1JDMV9SRUcyICAgICAgICAgICgweDAyIDw8IE1BVEhfU1JDMV9TSElGVCkKKyNkZWZpbmUgTUFUSF9TUkMxX1JFRzMgICAgICAgICAgKDB4MDMgPDwgTUFUSF9TUkMxX1NISUZUKQorI2RlZmluZSBNQVRIX1NSQzFfSU1NICAgICAgICAgICAoMHgwNCA8PCBNQVRIX1NSQzFfU0hJRlQpCisjZGVmaW5lIE1BVEhfU1JDMV9JTkZJRk8gICAgICAgICgweDBhIDw8IE1BVEhfU1JDMV9TSElGVCkKKyNkZWZpbmUgTUFUSF9TUkMxX09VVEZJRk8gICAgICAgKDB4MGIgPDwgTUFUSF9TUkMxX1NISUZUKQorI2RlZmluZSBNQVRIX1NSQzFfT05FICAgICAgICAgICAoMHgwYyA8PCBNQVRIX1NSQzFfU0hJRlQpCisKKy8qIERlc3RpbmF0aW9uIHNlbGVjdG9ycyAqLworI2RlZmluZSBNQVRIX0RFU1RfU0hJRlQgICAgICAgICA4CisjZGVmaW5lIE1BVEhfREVTVF9NQVNLICAgICAgICAgICgweDBmIDw8IE1BVEhfREVTVF9TSElGVCkKKyNkZWZpbmUgTUFUSF9ERVNUX1JFRzAgICAgICAgICAgKDB4MDAgPDwgTUFUSF9ERVNUX1NISUZUKQorI2RlZmluZSBNQVRIX0RFU1RfUkVHMSAgICAgICAgICAoMHgwMSA8PCBNQVRIX0RFU1RfU0hJRlQpCisjZGVmaW5lIE1BVEhfREVTVF9SRUcyICAgICAgICAgICgweDAyIDw8IE1BVEhfREVTVF9TSElGVCkKKyNkZWZpbmUgTUFUSF9ERVNUX1JFRzMgICAgICAgICAgKDB4MDMgPDwgTUFUSF9ERVNUX1NISUZUKQorI2RlZmluZSBNQVRIX0RFU1RfU0VRSU5MRU4gICAgICAoMHgwOCA8PCBNQVRIX0RFU1RfU0hJRlQpCisjZGVmaW5lIE1BVEhfREVTVF9TRVFPVVRMRU4gICAgICgweDA5IDw8IE1BVEhfREVTVF9TSElGVCkKKyNkZWZpbmUgTUFUSF9ERVNUX1ZBUlNFUUlOTEVOICAgKDB4MGEgPDwgTUFUSF9ERVNUX1NISUZUKQorI2RlZmluZSBNQVRIX0RFU1RfVkFSU0VRT1VUTEVOICAoMHgwYiA8PCBNQVRIX0RFU1RfU0hJRlQpCisjZGVmaW5lIE1BVEhfREVTVF9OT05FICAgICAgICAgICgweDBmIDw8IE1BVEhfREVTVF9TSElGVCkKKworLyogTGVuZ3RoIHNlbGVjdG9ycyAqLworI2RlZmluZSBNQVRIX0xFTl9TSElGVCAgICAgICAgICAwCisjZGVmaW5lIE1BVEhfTEVOX01BU0sgICAgICAgICAgICgweDBmIDw8IE1BVEhfTEVOX1NISUZUKQorI2RlZmluZSBNQVRIX0xFTl8xQllURSAgICAgICAgICAweDAxCisjZGVmaW5lIE1BVEhfTEVOXzJCWVRFICAgICAgICAgIDB4MDIKKyNkZWZpbmUgTUFUSF9MRU5fNEJZVEUgICAgICAgICAgMHgwNAorI2RlZmluZSBNQVRIX0xFTl84QllURSAgICAgICAgICAweDA4CisKKy8qCisgKiBKVU1QIENvbW1hbmQgQ29uc3RydWN0cworICovCisKKyNkZWZpbmUgSlVNUF9DTEFTU19TSElGVCAgICAgICAgMjUKKyNkZWZpbmUgSlVNUF9DTEFTU19NQVNLCQkoMyA8PCBKVU1QX0NMQVNTX1NISUZUKQorI2RlZmluZSBKVU1QX0NMQVNTX05PTkUJCTAKKyNkZWZpbmUgSlVNUF9DTEFTU19DTEFTUzEJKDEgPDwgSlVNUF9DTEFTU19TSElGVCkKKyNkZWZpbmUgSlVNUF9DTEFTU19DTEFTUzIJKDIgPDwgSlVNUF9DTEFTU19TSElGVCkKKyNkZWZpbmUgSlVNUF9DTEFTU19CT1RICQkoMyA8PCBKVU1QX0NMQVNTX1NISUZUKQorCisjZGVmaW5lIEpVTVBfSlNMX1NISUZUICAgICAgICAgIDI0CisjZGVmaW5lIEpVTVBfSlNMX01BU0sgICAgICAgICAgICgxIDw8IEpVTVBfSlNMX1NISUZUKQorI2RlZmluZSBKVU1QX0pTTCAgICAgICAgICAgICAgICAoMSA8PCBKVU1QX0pTTF9TSElGVCkKKworI2RlZmluZSBKVU1QX1RZUEVfU0hJRlQgICAgICAgICAyMgorI2RlZmluZSBKVU1QX1RZUEVfTUFTSyAgICAgICAgICAoMHgwMyA8PCBKVU1QX1RZUEVfU0hJRlQpCisjZGVmaW5lIEpVTVBfVFlQRV9MT0NBTCAgICAgICAgICgweDAwIDw8IEpVTVBfVFlQRV9TSElGVCkKKyNkZWZpbmUgSlVNUF9UWVBFX05PTkxPQ0FMICAgICAgKDB4MDEgPDwgSlVNUF9UWVBFX1NISUZUKQorI2RlZmluZSBKVU1QX1RZUEVfSEFMVCAgICAgICAgICAoMHgwMiA8PCBKVU1QX1RZUEVfU0hJRlQpCisjZGVmaW5lIEpVTVBfVFlQRV9IQUxUX1VTRVIgICAgICgweDAzIDw8IEpVTVBfVFlQRV9TSElGVCkKKworI2RlZmluZSBKVU1QX1RFU1RfU0hJRlQgICAgICAgICAxNgorI2RlZmluZSBKVU1QX1RFU1RfTUFTSyAgICAgICAgICAoMHgwMyA8PCBKVU1QX1RFU1RfU0hJRlQpCisjZGVmaW5lIEpVTVBfVEVTVF9BTEwgICAgICAgICAgICgweDAwIDw8IEpVTVBfVEVTVF9TSElGVCkKKyNkZWZpbmUgSlVNUF9URVNUX0lOVkFMTCAgICAgICAgKDB4MDEgPDwgSlVNUF9URVNUX1NISUZUKQorI2RlZmluZSBKVU1QX1RFU1RfQU5ZICAgICAgICAgICAoMHgwMiA8PCBKVU1QX1RFU1RfU0hJRlQpCisjZGVmaW5lIEpVTVBfVEVTVF9JTlZBTlkgICAgICAgICgweDAzIDw8IEpVTVBfVEVTVF9TSElGVCkKKworLyogQ29uZGl0aW9uIGNvZGVzLiBKU0wgYml0IGlzIGZhY3RvcmVkIGluICovCisjZGVmaW5lIEpVTVBfQ09ORF9TSElGVCAgICAgICAgIDgKKyNkZWZpbmUgSlVNUF9DT05EX01BU0sgICAgICAgICAgKDB4MTAwZmYgPDwgSlVNUF9DT05EX1NISUZUKQorI2RlZmluZSBKVU1QX0NPTkRfUEtfMCAgICAgICAgICAoMHg4MCA8PCBKVU1QX0NPTkRfU0hJRlQpCisjZGVmaW5lIEpVTVBfQ09ORF9QS19HQ0RfMSAgICAgICgweDQwIDw8IEpVTVBfQ09ORF9TSElGVCkKKyNkZWZpbmUgSlVNUF9DT05EX1BLX1BSSU1FICAgICAgKDB4MjAgPDwgSlVNUF9DT05EX1NISUZUKQorI2RlZmluZSBKVU1QX0NPTkRfTUFUSF9OICAgICAgICAoMHgwOCA8PCBKVU1QX0NPTkRfU0hJRlQpCisjZGVmaW5lIEpVTVBfQ09ORF9NQVRIX1ogICAgICAgICgweDA0IDw8IEpVTVBfQ09ORF9TSElGVCkKKyNkZWZpbmUgSlVNUF9DT05EX01BVEhfQyAgICAgICAgKDB4MDIgPDwgSlVNUF9DT05EX1NISUZUKQorI2RlZmluZSBKVU1QX0NPTkRfTUFUSF9OViAgICAgICAoMHgwMSA8PCBKVU1QX0NPTkRfU0hJRlQpCisKKyNkZWZpbmUgSlVNUF9DT05EX0pSUCAgICAgICAgICAgKCgweDgwIDw8IEpVTVBfQ09ORF9TSElGVCkgfCBKVU1QX0pTTCkKKyNkZWZpbmUgSlVNUF9DT05EX1NIUkQgICAgICAgICAgKCgweDQwIDw8IEpVTVBfQ09ORF9TSElGVCkgfCBKVU1QX0pTTCkKKyNkZWZpbmUgSlVNUF9DT05EX1NFTEYgICAgICAgICAgKCgweDIwIDw8IEpVTVBfQ09ORF9TSElGVCkgfCBKVU1QX0pTTCkKKyNkZWZpbmUgSlVNUF9DT05EX0NBTE0gICAgICAgICAgKCgweDEwIDw8IEpVTVBfQ09ORF9TSElGVCkgfCBKVU1QX0pTTCkKKyNkZWZpbmUgSlVNUF9DT05EX05JUCAgICAgICAgICAgKCgweDA4IDw8IEpVTVBfQ09ORF9TSElGVCkgfCBKVU1QX0pTTCkKKyNkZWZpbmUgSlVNUF9DT05EX05JRlAgICAgICAgICAgKCgweDA0IDw8IEpVTVBfQ09ORF9TSElGVCkgfCBKVU1QX0pTTCkKKyNkZWZpbmUgSlVNUF9DT05EX05PUCAgICAgICAgICAgKCgweDAyIDw8IEpVTVBfQ09ORF9TSElGVCkgfCBKVU1QX0pTTCkKKyNkZWZpbmUgSlVNUF9DT05EX05DUCAgICAgICAgICAgKCgweDAxIDw8IEpVTVBfQ09ORF9TSElGVCkgfCBKVU1QX0pTTCkKKworI2RlZmluZSBKVU1QX09GRlNFVF9TSElGVCAgICAgICAwCisjZGVmaW5lIEpVTVBfT0ZGU0VUX01BU0sgICAgICAgICgweGZmIDw8IEpVTVBfT0ZGU0VUX1NISUZUKQorCisvKgorICogTkZJRk8gRU5UUlkKKyAqIERhdGEgQ29uc3RydWN0cworICoKKyAqLworI2RlZmluZSBORklGT0VOVFJZX0RFU1RfU0hJRlQJMzAKKyNkZWZpbmUgTkZJRk9FTlRSWV9ERVNUX01BU0sJKDMgPDwgTkZJRk9FTlRSWV9ERVNUX1NISUZUKQorI2RlZmluZSBORklGT0VOVFJZX0RFU1RfREVDTwkoMCA8PCBORklGT0VOVFJZX0RFU1RfU0hJRlQpCisjZGVmaW5lIE5GSUZPRU5UUllfREVTVF9DTEFTUzEJKDEgPDwgTkZJRk9FTlRSWV9ERVNUX1NISUZUKQorI2RlZmluZSBORklGT0VOVFJZX0RFU1RfQ0xBU1MyCSgyIDw8IE5GSUZPRU5UUllfREVTVF9TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9ERVNUX0JPVEgJKDMgPDwgTkZJRk9FTlRSWV9ERVNUX1NISUZUKQorCisjZGVmaW5lIE5GSUZPRU5UUllfTEMyX1NISUZUCTI5CisjZGVmaW5lIE5GSUZPRU5UUllfTEMyX01BU0sJCSgxIDw8IE5GSUZPRU5UUllfTEMyX1NISUZUKQorI2RlZmluZSBORklGT0VOVFJZX0xDMgkJCSgxIDw8IE5GSUZPRU5UUllfTEMyX1NISUZUKQorCisjZGVmaW5lIE5GSUZPRU5UUllfTEMxX1NISUZUCTI4CisjZGVmaW5lIE5GSUZPRU5UUllfTEMxX01BU0sJCSgxIDw8IE5GSUZPRU5UUllfTEMxX1NISUZUKQorI2RlZmluZSBORklGT0VOVFJZX0xDMQkJCSgxIDw8IE5GSUZPRU5UUllfTEMxX1NISUZUKQorCisjZGVmaW5lIE5GSUZPRU5UUllfRkMyX1NISUZUCTI3CisjZGVmaW5lIE5GSUZPRU5UUllfRkMyX01BU0sJCSgxIDw8IE5GSUZPRU5UUllfRkMyX1NISUZUKQorI2RlZmluZSBORklGT0VOVFJZX0ZDMgkJCSgxIDw8IE5GSUZPRU5UUllfRkMyX1NISUZUKQorCisjZGVmaW5lIE5GSUZPRU5UUllfRkMxX1NISUZUCTI2CisjZGVmaW5lIE5GSUZPRU5UUllfRkMxX01BU0sJCSgxIDw8IE5GSUZPRU5UUllfRkMxX1NISUZUKQorI2RlZmluZSBORklGT0VOVFJZX0ZDMQkJCSgxIDw8IE5GSUZPRU5UUllfRkMxX1NISUZUKQorCisjZGVmaW5lIE5GSUZPRU5UUllfU1RZUEVfU0hJRlQJMjQKKyNkZWZpbmUgTkZJRk9FTlRSWV9TVFlQRV9NQVNLCSgzIDw8IE5GSUZPRU5UUllfU1RZUEVfU0hJRlQpCisjZGVmaW5lIE5GSUZPRU5UUllfU1RZUEVfREZJRk8JKDAgPDwgTkZJRk9FTlRSWV9TVFlQRV9TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9TVFlQRV9PRklGTwkoMSA8PCBORklGT0VOVFJZX1NUWVBFX1NISUZUKQorI2RlZmluZSBORklGT0VOVFJZX1NUWVBFX1BBRAkoMiA8PCBORklGT0VOVFJZX1NUWVBFX1NISUZUKQorI2RlZmluZSBORklGT0VOVFJZX1NUWVBFX1NOT09QCSgzIDw8IE5GSUZPRU5UUllfU1RZUEVfU0hJRlQpCisKKyNkZWZpbmUgTkZJRk9FTlRSWV9EVFlQRV9TSElGVAkyMAorI2RlZmluZSBORklGT0VOVFJZX0RUWVBFX01BU0sJKDB4RiA8PCBORklGT0VOVFJZX0RUWVBFX1NISUZUKQorCisjZGVmaW5lIE5GSUZPRU5UUllfRFRZUEVfU0JPWCAgICAgICgweDAgIDw8IE5GSUZPRU5UUllfRFRZUEVfU0hJRlQpCisjZGVmaW5lIE5GSUZPRU5UUllfRFRZUEVfQUFEICAgICAgICgweDEgIDw8IE5GSUZPRU5UUllfRFRZUEVfU0hJRlQpCisjZGVmaW5lIE5GSUZPRU5UUllfRFRZUEVfSVYgICAgICAgICgweDIgIDw8IE5GSUZPRU5UUllfRFRZUEVfU0hJRlQpCisjZGVmaW5lIE5GSUZPRU5UUllfRFRZUEVfU0FEICAgICAgICgweDMgIDw8IE5GSUZPRU5UUllfRFRZUEVfU0hJRlQpCisjZGVmaW5lIE5GSUZPRU5UUllfRFRZUEVfSUNWICAgICAgICgweEEgIDw8IE5GSUZPRU5UUllfRFRZUEVfU0hJRlQpCisjZGVmaW5lIE5GSUZPRU5UUllfRFRZUEVfU0tJUCAgICAgICgweEUgIDw8IE5GSUZPRU5UUllfRFRZUEVfU0hJRlQpCisjZGVmaW5lIE5GSUZPRU5UUllfRFRZUEVfTVNHICAgICAgICgweEYgIDw8IE5GSUZPRU5UUllfRFRZUEVfU0hJRlQpCisKKyNkZWZpbmUgTkZJRk9FTlRSWV9EVFlQRV9QS19BMCAgICAgKDB4MCAgPDwgTkZJRk9FTlRSWV9EVFlQRV9TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9EVFlQRV9QS19BMSAgICAgKDB4MSAgPDwgTkZJRk9FTlRSWV9EVFlQRV9TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9EVFlQRV9QS19BMiAgICAgKDB4MiAgPDwgTkZJRk9FTlRSWV9EVFlQRV9TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9EVFlQRV9QS19BMyAgICAgKDB4MyAgPDwgTkZJRk9FTlRSWV9EVFlQRV9TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9EVFlQRV9QS19CMCAgICAgKDB4NCAgPDwgTkZJRk9FTlRSWV9EVFlQRV9TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9EVFlQRV9QS19CMSAgICAgKDB4NSAgPDwgTkZJRk9FTlRSWV9EVFlQRV9TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9EVFlQRV9QS19CMiAgICAgKDB4NiAgPDwgTkZJRk9FTlRSWV9EVFlQRV9TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9EVFlQRV9QS19CMyAgICAgKDB4NyAgPDwgTkZJRk9FTlRSWV9EVFlQRV9TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9EVFlQRV9QS19OICAgICAgKDB4OCAgPDwgTkZJRk9FTlRSWV9EVFlQRV9TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9EVFlQRV9QS19FICAgICAgKDB4OSAgPDwgTkZJRk9FTlRSWV9EVFlQRV9TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9EVFlQRV9QS19BICAgICAgKDB4QyAgPDwgTkZJRk9FTlRSWV9EVFlQRV9TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9EVFlQRV9QS19CICAgICAgKDB4RCAgPDwgTkZJRk9FTlRSWV9EVFlQRV9TSElGVCkKKworCisjZGVmaW5lIE5GSUZPRU5UUllfQk5EX1NISUZUCTE5CisjZGVmaW5lIE5GSUZPRU5UUllfQk5EX01BU0sJCSgxIDw8IE5GSUZPRU5UUllfQk5EX1NISUZUKQorI2RlZmluZSBORklGT0VOVFJZX0JORAkJCSgxIDw8IE5GSUZPRU5UUllfQk5EX1NISUZUKQorCisjZGVmaW5lIE5GSUZPRU5UUllfUFRZUEVfU0hJRlQJMTYKKyNkZWZpbmUgTkZJRk9FTlRSWV9QVFlQRV9NQVNLCSgweDcgPDwgTkZJRk9FTlRSWV9QVFlQRV9TSElGVCkKKworI2RlZmluZSBORklGT0VOVFJZX1BUWVBFX1pFUk9TICAgICAgICAgKDB4MCAgPDwgTkZJRk9FTlRSWV9QVFlQRV9TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9QVFlQRV9STkRfTk9aRVJPUyAgICgweDEgIDw8IE5GSUZPRU5UUllfUFRZUEVfU0hJRlQpCisjZGVmaW5lIE5GSUZPRU5UUllfUFRZUEVfSU5DUkVNRU5UICAgICAoMHgyICA8PCBORklGT0VOVFJZX1BUWVBFX1NISUZUKQorI2RlZmluZSBORklGT0VOVFJZX1BUWVBFX1JORCAgICAgICAgICAgKDB4MyAgPDwgTkZJRk9FTlRSWV9QVFlQRV9TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9QVFlQRV9aRVJPU19OWiAgICAgICgweDQgIDw8IE5GSUZPRU5UUllfUFRZUEVfU0hJRlQpCisjZGVmaW5lIE5GSUZPRU5UUllfUFRZUEVfUk5EX05aX0xaICAgICAoMHg1ICA8PCBORklGT0VOVFJZX1BUWVBFX1NISUZUKQorI2RlZmluZSBORklGT0VOVFJZX1BUWVBFX04gICAgICAgICAgICAgKDB4NiAgPDwgTkZJRk9FTlRSWV9QVFlQRV9TSElGVCkKKyNkZWZpbmUgTkZJRk9FTlRSWV9QVFlQRV9STkRfTlpfTiAgICAgICgweDcgIDw8IE5GSUZPRU5UUllfUFRZUEVfU0hJRlQpCisKKyNkZWZpbmUgTkZJRk9FTlRSWV9PQ19TSElGVAkJMTUKKyNkZWZpbmUgTkZJRk9FTlRSWV9PQ19NQVNLCQkoMSA8PCBORklGT0VOVFJZX09DX1NISUZUKQorI2RlZmluZSBORklGT0VOVFJZX09DCQkJKDEgPDwgTkZJRk9FTlRSWV9PQ19TSElGVCkKKworI2RlZmluZSBORklGT0VOVFJZX0FTVF9TSElGVAkxNAorI2RlZmluZSBORklGT0VOVFJZX0FTVF9NQVNLCQkoMSA8PCBORklGT0VOVFJZX09DX1NISUZUKQorI2RlZmluZSBORklGT0VOVFJZX0FTVAkJCSgxIDw8IE5GSUZPRU5UUllfT0NfU0hJRlQpCisKKyNkZWZpbmUgTkZJRk9FTlRSWV9CTV9TSElGVAkJMTEKKyNkZWZpbmUgTkZJRk9FTlRSWV9CTV9NQVNLCQkoMSA8PCBORklGT0VOVFJZX0JNX1NISUZUKQorI2RlZmluZSBORklGT0VOVFJZX0JNCQkJKDEgPDwgTkZJRk9FTlRSWV9CTV9TSElGVCkKKworI2RlZmluZSBORklGT0VOVFJZX1BTX1NISUZUCQkxMAorI2RlZmluZSBORklGT0VOVFJZX1BTX01BU0sJCSgxIDw8IE5GSUZPRU5UUllfUFNfU0hJRlQpCisjZGVmaW5lIE5GSUZPRU5UUllfUFMJCQkoMSA8PCBORklGT0VOVFJZX1BTX1NISUZUKQorCisKKyNkZWZpbmUgTkZJRk9FTlRSWV9ETEVOX1NISUZUCTAKKyNkZWZpbmUgTkZJRk9FTlRSWV9ETEVOX01BU0sJKDB4RkZGIDw8IE5GSUZPRU5UUllfRExFTl9TSElGVCkKKworI2RlZmluZSBORklGT0VOVFJZX1BMRU5fU0hJRlQJMAorI2RlZmluZSBORklGT0VOVFJZX1BMRU5fTUFTSwkoMHhGRiA8PCBORklGT0VOVFJZX1BMRU5fU0hJRlQpCisKKy8qCisgKiBQREIgaW50ZXJuYWwgZGVmaW5pdGlvbnMKKyAqLworCisvKiBJUFNlYyBFU1AgQ0JDIEVuY2FwL0RlY2FwIE9wdGlvbnMgKi8KKyNkZWZpbmUgUERCT1BUU19FU1BDQkNfQVJTTk9ORSAgMHgwMCAgIC8qIG5vIGFudGlyZXBsYXkgd2luZG93ICAgICAgICAgICAgICAqLworI2RlZmluZSBQREJPUFRTX0VTUENCQ19BUlMzMiAgICAweDQwICAgLyogMzItZW50cnkgYW50aXJlcGxheSB3aW5kb3cgICAgICAgICovCisjZGVmaW5lIFBEQk9QVFNfRVNQQ0JDX0FSUzY0ICAgIDB4YzAgICAvKiA2NC1lbnRyeSBhbnRpcmVwbGF5IHdpbmRvdyAgICAgICAgKi8KKyNkZWZpbmUgUERCT1BUU19FU1BDQkNfSVZTUkMgICAgMHgyMCAgIC8qIElWIGNvbWVzIGZyb20gaW50ZXJuYWwgcmFuZG9tIGdlbiAqLworI2RlZmluZSBQREJPUFRTX0VTUENCQ19FU04gICAgICAweDEwICAgLyogZXh0ZW5kZWQgc2VxdWVuY2UgaW5jbHVkZWQgICAgICAgICovCisjZGVmaW5lIFBEQk9QVFNfRVNQQ0JDX09VVEZNVCAgIDB4MDggICAvKiBvdXRwdXQgb25seSBkZWNhcHN1bGF0aW9uIChkZWNhcCkgKi8KKyNkZWZpbmUgUERCT1BUU19FU1BDQkNfSVBIRFJTUkMgMHgwOCAgIC8qIElQIGhlYWRlciBjb21lcyBmcm9tIFBEQiAoZW5jYXApICAqLworI2RlZmluZSBQREJPUFRTX0VTUENCQ19JTkNJUEhEUiAweDA0ICAgLyogUHJlcGVuZCBJUCBoZWFkZXIgdG8gb3V0cHV0IGZyYW1lICovCisjZGVmaW5lIFBEQk9QVFNfRVNQQ0JDX0lQVlNOICAgIDB4MDIgICAvKiBwcm9jZXNzIElQdjYgaGVhZGVyICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUERCT1BUU19FU1BDQkNfVFVOTkVMICAgMHgwMSAgIC8qIHR1bm5lbCBtb2RlIG5leHQtaGVhZGVyIGJ5dGUgICAgICAqLworCisjZW5kaWYgLyogREVTQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9jYWFtL2Rlc2NfY29uc3RyLmggYi9kcml2ZXJzL2NyeXB0by9jYWFtL2Rlc2NfY29uc3RyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY5MTU4MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY3J5cHRvL2NhYW0vZGVzY19jb25zdHIuaApAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAqIGNhYW0gZGVzY3JpcHRvciBjb25zdHJ1Y3Rpb24gaGVscGVyIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAyMDA4LTIwMTEgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqLworCisjaW5jbHVkZSAiZGVzYy5oIgorCisjZGVmaW5lIElNTUVESUFURSAoMSA8PCAyMykKKyNkZWZpbmUgQ0FBTV9DTURfU1ogc2l6ZW9mKHUzMikKKyNkZWZpbmUgQ0FBTV9QVFJfU1ogc2l6ZW9mKGRtYV9hZGRyX3QpCisjZGVmaW5lIENBQU1fREVTQ19CWVRFU19NQVggKENBQU1fQ01EX1NaICogNjQpCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBQUklOVF9QT1MgZG8geyBwcmludGsoS0VSTl9ERUJVRyAiJTAyZDogJXNcbiIsIGRlc2NfbGVuKGRlc2MpLFwKKwkJCSAgICAgICZfX2Z1bmNfX1tzaXplb2YoImFwcGVuZCIpXSk7IH0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBQUklOVF9QT1MKKyNlbmRpZgorCisjZGVmaW5lIERJU0FCTEVfQVVUT19JTkZPX0ZJRk8gKElNTUVESUFURSB8IExEU1RfQ0xBU1NfREVDTyB8IFwKKwkJCQlMRFNUX1NSQ0RTVF9XT1JEX0RFQ09DVFJMIHwgXAorCQkJCShMRE9GRl9ESVNBQkxFX0FVVE9fTkZJRk8gPDwgTERTVF9PRkZTRVRfU0hJRlQpKQorI2RlZmluZSBFTkFCTEVfQVVUT19JTkZPX0ZJRk8gKElNTUVESUFURSB8IExEU1RfQ0xBU1NfREVDTyB8IFwKKwkJCSAgICAgICBMRFNUX1NSQ0RTVF9XT1JEX0RFQ09DVFJMIHwgXAorCQkJICAgICAgIChMRE9GRl9FTkFCTEVfQVVUT19ORklGTyA8PCBMRFNUX09GRlNFVF9TSElGVCkpCisKK3N0YXRpYyBpbmxpbmUgaW50IGRlc2NfbGVuKHUzMiAqZGVzYykKK3sKKwlyZXR1cm4gKmRlc2MgJiBIRFJfREVTQ0xFTl9NQVNLOworfQorCitzdGF0aWMgaW5saW5lIGludCBkZXNjX2J5dGVzKHZvaWQgKmRlc2MpCit7CisJcmV0dXJuIGRlc2NfbGVuKGRlc2MpICogQ0FBTV9DTURfU1o7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyICpkZXNjX2VuZCh1MzIgKmRlc2MpCit7CisJcmV0dXJuIGRlc2MgKyBkZXNjX2xlbihkZXNjKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpzaF9kZXNjX3BkYih1MzIgKmRlc2MpCit7CisJcmV0dXJuIGRlc2MgKyAxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9kZXNjKHUzMiAqZGVzYywgdTMyIG9wdGlvbnMpCit7CisJKmRlc2MgPSBvcHRpb25zIHwgSERSX09ORSB8IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NoX2Rlc2ModTMyICpkZXNjLCB1MzIgb3B0aW9ucykKK3sKKwlQUklOVF9QT1M7CisJaW5pdF9kZXNjKGRlc2MsIENNRF9TSEFSRURfREVTQ19IRFIgfCBvcHRpb25zKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfc2hfZGVzY19wZGIodTMyICpkZXNjLCB1MzIgb3B0aW9ucywgc2l6ZV90IHBkYl9ieXRlcykKK3sKKwl1MzIgcGRiX2xlbiA9IHBkYl9ieXRlcyAvIENBQU1fQ01EX1NaICsgMTsKKworCWluaXRfc2hfZGVzYyhkZXNjLCAoKHBkYl9sZW4gPDwgSERSX1NUQVJUX0lEWF9TSElGVCkgKyBwZGJfbGVuKSB8CisJCSAgICAgb3B0aW9ucyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2pvYl9kZXNjKHUzMiAqZGVzYywgdTMyIG9wdGlvbnMpCit7CisJaW5pdF9kZXNjKGRlc2MsIENNRF9ERVNDX0hEUiB8IG9wdGlvbnMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kX3B0cih1MzIgKmRlc2MsIGRtYV9hZGRyX3QgcHRyKQoreworCWRtYV9hZGRyX3QgKm9mZnNldCA9IChkbWFfYWRkcl90ICopZGVzY19lbmQoZGVzYyk7CisKKwkqb2Zmc2V0ID0gcHRyOworCisJKCpkZXNjKSArPSBDQUFNX1BUUl9TWiAvIENBQU1fQ01EX1NaOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9qb2JfZGVzY19zaGFyZWQodTMyICpkZXNjLCBkbWFfYWRkcl90IHB0ciwgaW50IGxlbiwKKwkJCQkJdTMyIG9wdGlvbnMpCit7CisJUFJJTlRfUE9TOworCWluaXRfam9iX2Rlc2MoZGVzYywgSERSX1NIQVJFRCB8IG9wdGlvbnMgfAorCQkgICAgICAobGVuIDw8IEhEUl9TVEFSVF9JRFhfU0hJRlQpKTsKKwlhcHBlbmRfcHRyKGRlc2MsIHB0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRfZGF0YSh1MzIgKmRlc2MsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisJdTMyICpvZmZzZXQgPSBkZXNjX2VuZChkZXNjKTsKKworCWlmIChsZW4pIC8qIGF2b2lkIHNwYXJzZSB3YXJuaW5nOiBtZW1jcHkgd2l0aCBieXRlIGNvdW50IG9mIDAgKi8KKwkJbWVtY3B5KG9mZnNldCwgZGF0YSwgbGVuKTsKKworCSgqZGVzYykgKz0gKGxlbiArIENBQU1fQ01EX1NaIC0gMSkgLyBDQUFNX0NNRF9TWjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZF9jbWQodTMyICpkZXNjLCB1MzIgY29tbWFuZCkKK3sKKwl1MzIgKmNtZCA9IGRlc2NfZW5kKGRlc2MpOworCisJKmNtZCA9IGNvbW1hbmQ7CisKKwkoKmRlc2MpKys7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRfY21kX3B0cih1MzIgKmRlc2MsIGRtYV9hZGRyX3QgcHRyLCBpbnQgbGVuLAorCQkJCSAgdTMyIGNvbW1hbmQpCit7CisJYXBwZW5kX2NtZChkZXNjLCBjb21tYW5kIHwgbGVuKTsKKwlhcHBlbmRfcHRyKGRlc2MsIHB0cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRfY21kX2RhdGEodTMyICpkZXNjLCB2b2lkICpkYXRhLCBpbnQgbGVuLAorCQkJCSAgIHUzMiBjb21tYW5kKQoreworCWFwcGVuZF9jbWQoZGVzYywgY29tbWFuZCB8IElNTUVESUFURSB8IGxlbik7CisJYXBwZW5kX2RhdGEoZGVzYywgZGF0YSwgbGVuKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgKmFwcGVuZF9qdW1wKHUzMiAqZGVzYywgdTMyIG9wdGlvbnMpCit7CisJdTMyICpjbWQgPSBkZXNjX2VuZChkZXNjKTsKKworCVBSSU5UX1BPUzsKKwlhcHBlbmRfY21kKGRlc2MsIENNRF9KVU1QIHwgb3B0aW9ucyk7CisKKwlyZXR1cm4gY21kOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2p1bXBfdGd0X2hlcmUodTMyICpkZXNjLCB1MzIgKmp1bXBfY21kKQoreworCSpqdW1wX2NtZCA9ICpqdW1wX2NtZCB8IChkZXNjX2xlbihkZXNjKSAtIChqdW1wX2NtZCAtIGRlc2MpKTsKK30KKworI2RlZmluZSBBUFBFTkRfQ01EKGNtZCwgb3ApIFwKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRfIyNjbWQodTMyICpkZXNjLCB1MzIgb3B0aW9ucykgXAoreyBcCisJUFJJTlRfUE9TOyBcCisJYXBwZW5kX2NtZChkZXNjLCBDTURfIyNvcCB8IG9wdGlvbnMpOyBcCit9CitBUFBFTkRfQ01EKG9wZXJhdGlvbiwgT1BFUkFUSU9OKQorQVBQRU5EX0NNRChtb3ZlLCBNT1ZFKQorCisjZGVmaW5lIEFQUEVORF9DTURfTEVOKGNtZCwgb3ApIFwKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRfIyNjbWQodTMyICpkZXNjLCB1bnNpZ25lZCBpbnQgbGVuLCB1MzIgb3B0aW9ucykgXAoreyBcCisJUFJJTlRfUE9TOyBcCisJYXBwZW5kX2NtZChkZXNjLCBDTURfIyNvcCB8IGxlbiB8IG9wdGlvbnMpOyBcCit9CitBUFBFTkRfQ01EX0xFTihzZXFfc3RvcmUsIFNFUV9TVE9SRSkKK0FQUEVORF9DTURfTEVOKHNlcV9maWZvX2xvYWQsIFNFUV9GSUZPX0xPQUQpCitBUFBFTkRfQ01EX0xFTihzZXFfZmlmb19zdG9yZSwgU0VRX0ZJRk9fU1RPUkUpCisKKyNkZWZpbmUgQVBQRU5EX0NNRF9QVFIoY21kLCBvcCkgXAorc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZF8jI2NtZCh1MzIgKmRlc2MsIGRtYV9hZGRyX3QgcHRyLCB1bnNpZ25lZCBpbnQgbGVuLCBcCisJCQkJdTMyIG9wdGlvbnMpIFwKK3sgXAorCVBSSU5UX1BPUzsgXAorCWFwcGVuZF9jbWRfcHRyKGRlc2MsIHB0ciwgbGVuLCBDTURfIyNvcCB8IG9wdGlvbnMpOyBcCit9CitBUFBFTkRfQ01EX1BUUihrZXksIEtFWSkKK0FQUEVORF9DTURfUFRSKHNlcV9pbl9wdHIsIFNFUV9JTl9QVFIpCitBUFBFTkRfQ01EX1BUUihzZXFfb3V0X3B0ciwgU0VRX09VVF9QVFIpCitBUFBFTkRfQ01EX1BUUihsb2FkLCBMT0FEKQorQVBQRU5EX0NNRF9QVFIoc3RvcmUsIFNUT1JFKQorQVBQRU5EX0NNRF9QVFIoZmlmb19sb2FkLCBGSUZPX0xPQUQpCitBUFBFTkRfQ01EX1BUUihmaWZvX3N0b3JlLCBGSUZPX1NUT1JFKQorCisjZGVmaW5lIEFQUEVORF9DTURfUFRSX1RPX0lNTShjbWQsIG9wKSBcCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kXyMjY21kIyNfYXNfaW1tKHUzMiAqZGVzYywgdm9pZCAqZGF0YSwgXAorCQkJCQkgdW5zaWduZWQgaW50IGxlbiwgdTMyIG9wdGlvbnMpIFwKK3sgXAorCVBSSU5UX1BPUzsgXAorCWFwcGVuZF9jbWRfZGF0YShkZXNjLCBkYXRhLCBsZW4sIENNRF8jI29wIHwgb3B0aW9ucyk7IFwKK30KK0FQUEVORF9DTURfUFRSX1RPX0lNTShsb2FkLCBMT0FEKTsKK0FQUEVORF9DTURfUFRSX1RPX0lNTShmaWZvX2xvYWQsIEZJRk9fTE9BRCk7CisKKy8qCisgKiAybmQgdmFyaWFudCBmb3IgY29tbWFuZHMgd2hvc2Ugc3BlY2lmaWVkIGltbWVkaWF0ZSBsZW5ndGggZGlmZmVycworICogZnJvbSBsZW5ndGggb2YgaW1tZWRpYXRlIGRhdGEgcHJvdmlkZWQsIGUuZy4sIHNwbGl0IGtleXMKKyAqLworI2RlZmluZSBBUFBFTkRfQ01EX1BUUl9UT19JTU0yKGNtZCwgb3ApIFwKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRfIyNjbWQjI19hc19pbW0odTMyICpkZXNjLCB2b2lkICpkYXRhLCBcCisJCQkJCSB1bnNpZ25lZCBpbnQgZGF0YV9sZW4sIFwKKwkJCQkJIHVuc2lnbmVkIGludCBsZW4sIHUzMiBvcHRpb25zKSBcCit7IFwKKwlQUklOVF9QT1M7IFwKKwlhcHBlbmRfY21kKGRlc2MsIENNRF8jI29wIHwgSU1NRURJQVRFIHwgbGVuIHwgb3B0aW9ucyk7IFwKKwlhcHBlbmRfZGF0YShkZXNjLCBkYXRhLCBkYXRhX2xlbik7IFwKK30KK0FQUEVORF9DTURfUFRSX1RPX0lNTTIoa2V5LCBLRVkpOworCisjZGVmaW5lIEFQUEVORF9DTURfUkFXX0lNTShjbWQsIG9wLCB0eXBlKSBcCitzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kXyMjY21kIyNfaW1tXyMjdHlwZSh1MzIgKmRlc2MsIHR5cGUgaW1tZWRpYXRlLCBcCisJCQkJCSAgICAgdTMyIG9wdGlvbnMpIFwKK3sgXAorCVBSSU5UX1BPUzsgXAorCWFwcGVuZF9jbWQoZGVzYywgQ01EXyMjb3AgfCBJTU1FRElBVEUgfCBvcHRpb25zIHwgc2l6ZW9mKHR5cGUpKTsgXAorCWFwcGVuZF9jbWQoZGVzYywgaW1tZWRpYXRlKTsgXAorfQorQVBQRU5EX0NNRF9SQVdfSU1NKGxvYWQsIExPQUQsIHUzMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9jYWFtL2Vycm9yLmMgYi9kcml2ZXJzL2NyeXB0by9jYWFtL2Vycm9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UyZDU0YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY3J5cHRvL2NhYW0vZXJyb3IuYwpAQCAtMCwwICsxLDI0OCBAQAorLyoKKyAqIENBQU0gRXJyb3IgUmVwb3J0aW5nCisgKgorICogQ29weXJpZ2h0IDIwMDktMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICovCisKKyNpbmNsdWRlICJjb21wYXQuaCIKKyNpbmNsdWRlICJyZWdzLmgiCisjaW5jbHVkZSAiaW50ZXJuLmgiCisjaW5jbHVkZSAiZGVzYy5oIgorI2luY2x1ZGUgImpyLmgiCisjaW5jbHVkZSAiZXJyb3IuaCIKKworI2RlZmluZSBTUFJJTlRGQ0FUKHN0ciwgZm9ybWF0LCBwYXJhbSwgbWF4X2FsbG9jKQkJXAorewkJCQkJCQkJXAorCWNoYXIgKnRtcDsJCQkJCQlcCisJCQkJCQkJCVwKKwl0bXAgPSBrbWFsbG9jKHNpemVvZihmb3JtYXQpICsgbWF4X2FsbG9jLCBHRlBfQVRPTUlDKTsJXAorCXNwcmludGYodG1wLCBmb3JtYXQsIHBhcmFtKTsJCQkJXAorCXN0cmNhdChzdHIsIHRtcCk7CQkJCQlcCisJa2ZyZWUodG1wKTsJCQkJCQlcCit9CisKK3N0YXRpYyB2b2lkIHJlcG9ydF9qdW1wX2lkeCh1MzIgc3RhdHVzLCBjaGFyICpvdXRzdHIpCit7CisJdTggaWR4ID0gKHN0YXR1cyAmIEpSU1RBX0RFQ09FUlJfSU5ERVhfTUFTSykgPj4KKwkJICBKUlNUQV9ERUNPRVJSX0lOREVYX1NISUZUOworCisJaWYgKHN0YXR1cyAmIEpSU1RBX0RFQ09FUlJfSlVNUCkKKwkJc3RyY2F0KG91dHN0ciwgImp1bXAgdGd0IGRlc2MgaWR4ICIpOworCWVsc2UKKwkJc3RyY2F0KG91dHN0ciwgImRlc2MgaWR4ICIpOworCisJU1BSSU5URkNBVChvdXRzdHIsICIlZDogIiwgaWR4LCBzaXplb2YoIjI1NSIpKTsKK30KKworc3RhdGljIHZvaWQgcmVwb3J0X2NjYl9zdGF0dXModTMyIHN0YXR1cywgY2hhciAqb3V0c3RyKQoreworCWNoYXIgKmNoYV9pZF9saXN0W10gPSB7CisJCSIiLAorCQkiQUVTIiwKKwkJIkRFUywgM0RFUyIsCisJCSJBUkM0IiwKKwkJIk1ENSwgU0hBLTEsIFNILTIyNCwgU0hBLTI1NiwgU0hBLTM4NCwgU0hBLTUxMiIsCisJCSJSTkciLAorCQkiU05PVyBmOCIsCisJCSJLYXN1bWkgZjgsIGY5IiwKKwkJIkFsbCBQdWJsaWMgS2V5IEFsZ29yaXRobXMiLAorCQkiQ1JDIiwKKwkJIlNOT1cgZjkiLAorCX07CisJY2hhciAqZXJyX2lkX2xpc3RbXSA9IHsKKwkJIk5vbmUuIE5vIGVycm9yLiIsCisJCSJNb2RlIGVycm9yLiIsCisJCSJEYXRhIHNpemUgZXJyb3IuIiwKKwkJIktleSBzaXplIGVycm9yLiIsCisJCSJQS0hBIEEgbWVtb3J5IHNpemUgZXJyb3IuIiwKKwkJIlBLSEEgQiBtZW1vcnkgc2l6ZSBlcnJvci4iLAorCQkiRGF0YSBhcnJpdmVkIG91dCBvZiBzZXF1ZW5jZSBlcnJvci4iLAorCQkiUEtIQSBkaXZpZGUtYnktemVybyBlcnJvci4iLAorCQkiUEtIQSBtb2R1bHVzIGV2ZW4gZXJyb3IuIiwKKwkJIkRFUyBrZXkgcGFyaXR5IGVycm9yLiIsCisJCSJJQ1YgY2hlY2sgZmFpbGVkLiIsCisJCSJIYXJkd2FyZSBlcnJvci4iLAorCQkiVW5zdXBwb3J0ZWQgQ0NNIEFBRCBzaXplLiIsCisJCSJDbGFzcyAxIENIQSBpcyBub3QgcmVzZXQiLAorCQkiSW52YWxpZCBDSEEgY29tYmluYXRpb24gd2FzIHNlbGVjdGVkIiwKKwkJIkludmFsaWQgQ0hBIHNlbGVjdGVkLiIsCisJfTsKKwl1OCBjaGFfaWQgPSAoc3RhdHVzICYgSlJTVEFfQ0NCRVJSX0NIQUlEX01BU0spID4+CisJCSAgICBKUlNUQV9DQ0JFUlJfQ0hBSURfU0hJRlQ7CisJdTggZXJyX2lkID0gc3RhdHVzICYgSlJTVEFfQ0NCRVJSX0VSUklEX01BU0s7CisKKwlyZXBvcnRfanVtcF9pZHgoc3RhdHVzLCBvdXRzdHIpOworCisJaWYgKGNoYV9pZCA8IEFSUkFZX1NJWkUoY2hhX2lkX2xpc3QpKSB7CisJCVNQUklOVEZDQVQob3V0c3RyLCAiJXM6ICIsIGNoYV9pZF9saXN0W2NoYV9pZF0sCisJCQkgICBzdHJsZW4oY2hhX2lkX2xpc3RbY2hhX2lkXSkpOworCX0gZWxzZSB7CisJCVNQUklOVEZDQVQob3V0c3RyLCAidW5pZGVudGlmaWVkIGNoYV9pZCB2YWx1ZSAweCUwMng6ICIsCisJCQkgICBjaGFfaWQsIHNpemVvZigiZmYiKSk7CisJfQorCisJaWYgKGVycl9pZCA8IEFSUkFZX1NJWkUoZXJyX2lkX2xpc3QpKSB7CisJCVNQUklOVEZDQVQob3V0c3RyLCAiJXMiLCBlcnJfaWRfbGlzdFtlcnJfaWRdLAorCQkJICAgc3RybGVuKGVycl9pZF9saXN0W2Vycl9pZF0pKTsKKwl9IGVsc2UgeworCQlTUFJJTlRGQ0FUKG91dHN0ciwgInVuaWRlbnRpZmllZCBlcnJfaWQgdmFsdWUgMHglMDJ4IiwKKwkJCSAgIGVycl9pZCwgc2l6ZW9mKCJmZiIpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlcG9ydF9qdW1wX3N0YXR1cyh1MzIgc3RhdHVzLCBjaGFyICpvdXRzdHIpCit7CisJU1BSSU5URkNBVChvdXRzdHIsICIlcygpIG5vdCBpbXBsZW1lbnRlZCIsIF9fZnVuY19fLCBzaXplb2YoX19mdW5jX18pKTsKK30KKworc3RhdGljIHZvaWQgcmVwb3J0X2RlY29fc3RhdHVzKHUzMiBzdGF0dXMsIGNoYXIgKm91dHN0cikKK3sKKwljb25zdCBzdHJ1Y3QgeworCQl1OCB2YWx1ZTsKKwkJY2hhciAqZXJyb3JfdGV4dDsKKwl9IGRlc2NfZXJyb3JfbGlzdFtdID0geworCQl7IDB4MDAsICJOb25lLiBObyBlcnJvci4iIH0sCisJCXsgMHgwMSwgIlNHVCBMZW5ndGggRXJyb3IuIFRoZSBkZXNjcmlwdG9yIGlzIHRyeWluZyB0byByZWFkICIKKwkJCSJtb3JlIGRhdGEgdGhhbiBpcyBjb250YWluZWQgaW4gdGhlIFNHVCB0YWJsZS4iIH0sCisJCXsgMHgwMiwgIlJlc2VydmVkLiIgfSwKKwkJeyAweDAzLCAiSm9iIFJpbmcgQ29udHJvbCBFcnJvci4gVGhlcmUgaXMgYSBiYWQgdmFsdWUgaW4gdGhlICIKKwkJCSJKb2IgUmluZyBDb250cm9sIHJlZ2lzdGVyLiIgfSwKKwkJeyAweDA0LCAiSW52YWxpZCBEZXNjcmlwdG9yIENvbW1hbmQuIFRoZSBEZXNjcmlwdG9yIENvbW1hbmQgIgorCQkJImZpZWxkIGlzIGludmFsaWQuIiB9LAorCQl7IDB4MDUsICJSZXNlcnZlZC4iIH0sCisJCXsgMHgwNiwgIkludmFsaWQgS0VZIENvbW1hbmQiIH0sCisJCXsgMHgwNywgIkludmFsaWQgTE9BRCBDb21tYW5kIiB9LAorCQl7IDB4MDgsICJJbnZhbGlkIFNUT1JFIENvbW1hbmQiIH0sCisJCXsgMHgwOSwgIkludmFsaWQgT1BFUkFUSU9OIENvbW1hbmQiIH0sCisJCXsgMHgwQSwgIkludmFsaWQgRklGTyBMT0FEIENvbW1hbmQiIH0sCisJCXsgMHgwQiwgIkludmFsaWQgRklGTyBTVE9SRSBDb21tYW5kIiB9LAorCQl7IDB4MEMsICJJbnZhbGlkIE1PVkUgQ29tbWFuZCIgfSwKKwkJeyAweDBELCAiSW52YWxpZCBKVU1QIENvbW1hbmQuIEEgbm9ubG9jYWwgSlVNUCBDb21tYW5kIGlzICIKKwkJCSJpbnZhbGlkIGJlY2F1c2UgdGhlIHRhcmdldCBpcyBub3QgYSBKb2IgSGVhZGVyICIKKwkJCSJDb21tYW5kLCBvciB0aGUganVtcCBpcyBmcm9tIGEgVHJ1c3RlZCBEZXNjcmlwdG9yIHRvICIKKwkJCSJhIEpvYiBEZXNjcmlwdG9yLCBvciBiZWNhdXNlIHRoZSB0YXJnZXQgRGVzY3JpcHRvciAiCisJCQkiY29udGFpbnMgYSBTaGFyZWQgRGVzY3JpcHRvci4iIH0sCisJCXsgMHgwRSwgIkludmFsaWQgTUFUSCBDb21tYW5kIiB9LAorCQl7IDB4MEYsICJJbnZhbGlkIFNJR05BVFVSRSBDb21tYW5kIiB9LAorCQl7IDB4MTAsICJJbnZhbGlkIFNlcXVlbmNlIENvbW1hbmQuIEEgU0VRIElOIFBUUiBPUiBTRVEgT1VUIFBUUiAiCisJCQkiQ29tbWFuZCBpcyBpbnZhbGlkIG9yIGEgU0VRIEtFWSwgU0VRIExPQUQsIFNFUSBGSUZPICIKKwkJCSJMT0FELCBvciBTRVEgRklGTyBTVE9SRSBkZWNyZW1lbnRlZCB0aGUgaW5wdXQgb3IgIgorCQkJIm91dHB1dCBzZXF1ZW5jZSBsZW5ndGggYmVsb3cgMC4gVGhpcyBlcnJvciBtYXkgcmVzdWx0ICIKKwkJCSJpZiBhIGJ1aWx0LWluIFBST1RPQ09MIENvbW1hbmQgaGFzIGVuY291bnRlcmVkIGEgIgorCQkJIm1hbGZvcm1lZCBQRFUuIiB9LAorCQl7IDB4MTEsICJTa2lwIGRhdGEgdHlwZSBpbnZhbGlkLiBUaGUgdHlwZSBtdXN0IGJlIDB4RSBvciAweEYuIn0sCisJCXsgMHgxMiwgIlNoYXJlZCBEZXNjcmlwdG9yIEhlYWRlciBFcnJvciIgfSwKKwkJeyAweDEzLCAiSGVhZGVyIEVycm9yLiBJbnZhbGlkIGxlbmd0aCBvciBwYXJpdHksIG9yIGNlcnRhaW4gIgorCQkJIm90aGVyIHByb2JsZW1zLiIgfSwKKwkJeyAweDE0LCAiQnVyc3RlciBFcnJvci4gQnVyc3RlciBoYXMgZ290dGVuIHRvIGFuIGlsbGVnYWwgIgorCQkJInN0YXRlIiB9LAorCQl7IDB4MTUsICJDb250ZXh0IFJlZ2lzdGVyIExlbmd0aCBFcnJvci4gVGhlIGRlc2NyaXB0b3IgaXMgIgorCQkJInRyeWluZyB0byByZWFkIG9yIHdyaXRlIHBhc3QgdGhlIGVuZCBvZiB0aGUgQ29udGV4dCAiCisJCQkiUmVnaXN0ZXIuIEEgU0VRIExPQUQgb3IgU0VRIFNUT1JFIHdpdGggdGhlIFZMRiBiaXQgIgorCQkJInNldCB3YXMgZXhlY3V0ZWQgd2l0aCB0b28gbGFyZ2UgYSBsZW5ndGggaW4gdGhlICIKKwkJCSJ2YXJpYWJsZSBsZW5ndGggcmVnaXN0ZXIgKFZTT0wgZm9yIFNFUSBTVE9SRSBvciBWU0lMICIKKwkJCSJmb3IgU0VRIExPQUQpLiIgfSwKKwkJeyAweDE2LCAiRE1BIEVycm9yIiB9LAorCQl7IDB4MTcsICJSZXNlcnZlZC4iIH0sCisJCXsgMHgxQSwgIkpvYiBmYWlsZWQgZHVlIHRvIEpSIHJlc2V0IiB9LAorCQl7IDB4MUIsICJKb2IgZmFpbGVkIGR1ZSB0byBGYWlsIE1vZGUiIH0sCisJCXsgMHgxQywgIkRFQ08gV2F0Y2hkb2cgdGltZXIgdGltZW91dCBlcnJvciIgfSwKKwkJeyAweDFELCAiREVDTyB0cmllZCB0byBjb3B5IGEga2V5IGZyb20gYW5vdGhlciBERUNPIGJ1dCB0aGUgIgorCQkJIm90aGVyIERFQ08ncyBLZXkgUmVnaXN0ZXJzIHdlcmUgbG9ja2VkIiB9LAorCQl7IDB4MUUsICJERUNPIGF0dGVtcHRlZCB0byBjb3B5IGRhdGEgZnJvbSBhIERFQ08gdGhhdCBoYWQgYW4gIgorCQkJInVubWFza2VkIERlc2NyaXB0b3IgZXJyb3IiIH0sCisJCXsgMHgxRiwgIkxJT0ROIGVycm9yLiBERUNPIHdhcyB0cnlpbmcgdG8gc2hhcmUgZnJvbSBpdHNlbGYgb3IgIgorCQkJImZyb20gYW5vdGhlciBERUNPIGJ1dCB0aGUgdHdvIE5vbi1TRVEgTElPRE4gdmFsdWVzICIKKwkJCSJkaWRuJ3QgbWF0Y2ggb3IgdGhlICdzaGFyZWQgZnJvbScgREVDTydzIERlc2NyaXB0b3IgIgorCQkJInJlcXVpcmVkIHRoYXQgdGhlIFNFUSBMSU9ETnMgYmUgdGhlIHNhbWUgYW5kIHRoZXkgIgorCQkJImFyZW4ndC4iIH0sCisJCXsgMHgyMCwgIkRFQ08gaGFzIGNvbXBsZXRlZCBhIHJlc2V0IGluaXRpYXRlZCB2aWEgdGhlIERSUiAiCisJCQkicmVnaXN0ZXIiIH0sCisJCXsgMHgyMSwgIk5vbmNlIGVycm9yLiBXaGVuIHVzaW5nIEVLVCAoQ0NNKSBrZXkgZW5jcnlwdGlvbiAiCisJCQkib3B0aW9uIGluIHRoZSBGSUZPIFNUT1JFIENvbW1hbmQsIHRoZSBOb25jZSBjb3VudGVyICIKKwkJCSJyZWFjaGVkIGl0cyBtYXhpbXVtIHZhbHVlIGFuZCB0aGlzIGVuY3J5cHRpb24gbW9kZSAiCisJCQkiY2FuIG5vIGxvbmdlciBiZSB1c2VkLiIgfSwKKwkJeyAweDIyLCAiTWV0YSBkYXRhIGlzIHRvbyBsYXJnZSAoPiA1MTEgYnl0ZXMpIGZvciBUTFMgZGVjYXAgIgorCQkJIihpbnB1dCBmcmFtZTsgYmxvY2sgY2lwaGVycykgYW5kIElQc2VjIGRlY2FwIChvdXRwdXQgIgorCQkJImZyYW1lLCB3aGVuIGRvaW5nIHRoZSBuZXh0IGhlYWRlciBieXRlIHVwZGF0ZSkgYW5kICIKKwkJCSJEQ1JDIChvdXRwdXQgZnJhbWUpLiIgfSwKKwkJeyAweDgwLCAiRE5SIChkbyBub3QgcnVuKSBlcnJvciIgfSwKKwkJeyAweDgxLCAidW5kZWZpbmVkIHByb3RvY29sIGNvbW1hbmQiIH0sCisJCXsgMHg4MiwgImludmFsaWQgc2V0dGluZyBpbiBQREIiIH0sCisJCXsgMHg4MywgIkFudGktcmVwbGF5IExBVEUgZXJyb3IiIH0sCisJCXsgMHg4NCwgIkFudGktcmVwbGF5IFJFUExBWSBlcnJvciIgfSwKKwkJeyAweDg1LCAiU2VxdWVuY2UgbnVtYmVyIG92ZXJmbG93IiB9LAorCQl7IDB4ODYsICJTaWd2ZXIgaW52YWxpZCBzaWduYXR1cmUiIH0sCisJCXsgMHg4NywgIkRTQSBTaWduIElsbGVnYWwgdGVzdCBkZXNjcmlwdG9yIiB9LAorCQl7IDB4ODgsICJQcm90b2NvbCBGb3JtYXQgRXJyb3IgLSBBIHByb3RvY29sIGhhcyBzZWVuIGFuIGVycm9yICIKKwkJCSJpbiB0aGUgZm9ybWF0IG9mIGRhdGEgcmVjZWl2ZWQuIFdoZW4gcnVubmluZyBSU0EsICIKKwkJCSJ0aGlzIG1lYW5zIHRoYXQgZm9ybWF0dGluZyB3aXRoIHJhbmRvbSBwYWRkaW5nIHdhcyAiCisJCQkidXNlZCwgYW5kIGRpZCBub3QgZm9sbG93IHRoZSBmb3JtOiAweDAwLCAweDAyLCA4LXRvLU4gIgorCQkJImJ5dGVzIG9mIG5vbi16ZXJvIHBhZCwgMHgwMCwgRiBkYXRhLiIgfSwKKwkJeyAweDg5LCAiUHJvdG9jb2wgU2l6ZSBFcnJvciAtIEEgcHJvdG9jb2wgaGFzIHNlZW4gYW4gZXJyb3IgaW4gIgorCQkJInNpemUuIFdoZW4gcnVubmluZyBSU0EsIHBkYiBzaXplIE4gPCAoc2l6ZSBvZiBGKSB3aGVuICIKKwkJCSJubyBmb3JtYXR0aW5nIGlzIHVzZWQ7IG9yIHBkYiBzaXplIE4gPCAoRiArIDExKSB3aGVuICIKKwkJCSJmb3JtYXR0aW5nIGlzIHVzZWQuIiB9LAorCQl7IDB4QzEsICJCbG9iIENvbW1hbmQgZXJyb3I6IFVuZGVmaW5lZCBtb2RlIiB9LAorCQl7IDB4QzIsICJCbG9iIENvbW1hbmQgZXJyb3I6IFNlY3VyZSBNZW1vcnkgQmxvYiBtb2RlIGVycm9yIiB9LAorCQl7IDB4QzQsICJCbG9iIENvbW1hbmQgZXJyb3I6IEJsYWNrIEJsb2Iga2V5IG9yIGlucHV0IHNpemUgIgorCQkJImVycm9yIiB9LAorCQl7IDB4QzUsICJCbG9iIENvbW1hbmQgZXJyb3I6IEludmFsaWQga2V5IGRlc3RpbmF0aW9uIiB9LAorCQl7IDB4QzgsICJCbG9iIENvbW1hbmQgZXJyb3I6IFRydXN0ZWQvU2VjdXJlIG1vZGUgZXJyb3IiIH0sCisJCXsgMHhGMCwgIklQc2VjIFRUTCBvciBob3AgbGltaXQgZmllbGQgZWl0aGVyIGNhbWUgaW4gYXMgMCwgIgorCQkJIm9yIHdhcyBkZWNyZW1lbnRlZCB0byAwIiB9LAorCQl7IDB4RjEsICIzR1BQIEhGTiBtYXRjaGVzIG9yIGV4Y2VlZHMgdGhlIFRocmVzaG9sZCIgfSwKKwl9OworCXU4IGRlc2NfZXJyb3IgPSBzdGF0dXMgJiBKUlNUQV9ERUNPRVJSX0VSUk9SX01BU0s7CisJaW50IGk7CisKKwlyZXBvcnRfanVtcF9pZHgoc3RhdHVzLCBvdXRzdHIpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGVzY19lcnJvcl9saXN0KTsgaSsrKQorCQlpZiAoZGVzY19lcnJvcl9saXN0W2ldLnZhbHVlID09IGRlc2NfZXJyb3IpCisJCQlicmVhazsKKworCWlmIChpICE9IEFSUkFZX1NJWkUoZGVzY19lcnJvcl9saXN0KSAmJiBkZXNjX2Vycm9yX2xpc3RbaV0uZXJyb3JfdGV4dCkgeworCQlTUFJJTlRGQ0FUKG91dHN0ciwgIiVzIiwgZGVzY19lcnJvcl9saXN0W2ldLmVycm9yX3RleHQsCisJCQkgICBzdHJsZW4oZGVzY19lcnJvcl9saXN0W2ldLmVycm9yX3RleHQpKTsKKwl9IGVsc2UgeworCQlTUFJJTlRGQ0FUKG91dHN0ciwgInVuaWRlbnRpZmllZCBlcnJvciB2YWx1ZSAweCUwMngiLAorCQkJICAgZGVzY19lcnJvciwgc2l6ZW9mKCJmZiIpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlcG9ydF9qcl9zdGF0dXModTMyIHN0YXR1cywgY2hhciAqb3V0c3RyKQoreworCVNQUklOVEZDQVQob3V0c3RyLCAiJXMoKSBub3QgaW1wbGVtZW50ZWQiLCBfX2Z1bmNfXywgc2l6ZW9mKF9fZnVuY19fKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlcG9ydF9jb25kX2NvZGVfc3RhdHVzKHUzMiBzdGF0dXMsIGNoYXIgKm91dHN0cikKK3sKKwlTUFJJTlRGQ0FUKG91dHN0ciwgIiVzKCkgbm90IGltcGxlbWVudGVkIiwgX19mdW5jX18sIHNpemVvZihfX2Z1bmNfXykpOworfQorCitjaGFyICpjYWFtX2pyX3N0cnN0YXR1cyhjaGFyICpvdXRzdHIsIHUzMiBzdGF0dXMpCit7CisJc3RydWN0IHN0YXRfc3JjIHsKKwkJdm9pZCAoKnJlcG9ydF9zc2VkKSh1MzIgc3RhdHVzLCBjaGFyICpvdXRzdHIpOworCQljaGFyICplcnJvcjsKKwl9IHN0YXR1c19zcmNbXSA9IHsKKwkJeyBOVUxMLCAiTm8gZXJyb3IiIH0sCisJCXsgTlVMTCwgTlVMTCB9LAorCQl7IHJlcG9ydF9jY2Jfc3RhdHVzLCAiQ0NCIiB9LAorCQl7IHJlcG9ydF9qdW1wX3N0YXR1cywgIkp1bXAiIH0sCisJCXsgcmVwb3J0X2RlY29fc3RhdHVzLCAiREVDTyIgfSwKKwkJeyBOVUxMLCBOVUxMIH0sCisJCXsgcmVwb3J0X2pyX3N0YXR1cywgIkpvYiBSaW5nIiB9LAorCQl7IHJlcG9ydF9jb25kX2NvZGVfc3RhdHVzLCAiQ29uZGl0aW9uIENvZGUiIH0sCisJfTsKKwl1MzIgc3NyYyA9IHN0YXR1cyA+PiBKUlNUQV9TU1JDX1NISUZUOworCisJc3ByaW50ZihvdXRzdHIsICIlczogIiwgc3RhdHVzX3NyY1tzc3JjXS5lcnJvcik7CisKKwlpZiAoc3RhdHVzX3NyY1tzc3JjXS5yZXBvcnRfc3NlZCkKKwkJc3RhdHVzX3NyY1tzc3JjXS5yZXBvcnRfc3NlZChzdGF0dXMsIG91dHN0cik7CisKKwlyZXR1cm4gb3V0c3RyOworfQorRVhQT1JUX1NZTUJPTChjYWFtX2pyX3N0cnN0YXR1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9jYWFtL2Vycm9yLmggYi9kcml2ZXJzL2NyeXB0by9jYWFtL2Vycm9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJjN2JhYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY3J5cHRvL2NhYW0vZXJyb3IuaApAQCAtMCwwICsxLDExIEBACisvKgorICogQ0FBTSBFcnJvciBSZXBvcnRpbmcgY29kZSBoZWFkZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOS0yMDExIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKi8KKworI2lmbmRlZiBDQUFNX0VSUk9SX0gKKyNkZWZpbmUgQ0FBTV9FUlJPUl9ICisjZGVmaW5lIENBQU1fRVJST1JfU1RSX01BWCAzMDIKK2V4dGVybiBjaGFyICpjYWFtX2pyX3N0cnN0YXR1cyhjaGFyICpvdXRzdHIsIHUzMiBzdGF0dXMpOworI2VuZGlmIC8qIENBQU1fRVJST1JfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vY2FhbS9pbnRlcm4uaCBiL2RyaXZlcnMvY3J5cHRvL2NhYW0vaW50ZXJuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM0YmUwMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY3J5cHRvL2NhYW0vaW50ZXJuLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDQUFNL1NFQyA0LnggZHJpdmVyIGJhY2tlbmQKKyAqIFByaXZhdGUvaW50ZXJuYWwgZGVmaW5pdGlvbnMgYmV0d2VlbiBtb2R1bGVzCisgKgorICogQ29weXJpZ2h0IDIwMDgtMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqLworCisjaWZuZGVmIElOVEVSTl9ICisjZGVmaW5lIElOVEVSTl9ICisKKyNkZWZpbmUgSk9CUl9VTkFTU0lHTkVEIDAKKyNkZWZpbmUgSk9CUl9BU1NJR05FRCAxCisKKy8qIEN1cnJlbnRseSBjb21lcyBmcm9tIEtjb25maWcgcGFyYW0gYXMgYSBeMiAoZHJpdmVyLXJlcXVpcmVkKSAqLworI2RlZmluZSBKT0JSX0RFUFRIICgxIDw8IENPTkZJR19DUllQVE9fREVWX0ZTTF9DQUFNX1JJTkdTSVpFKQorCisvKiBLY29uZmlnIHBhcmFtcyBmb3IgaW50ZXJydXB0IGNvYWxlc2NpbmcgaWYgc2VsZWN0ZWQgKGVsc2UgemVybykgKi8KKyNpZmRlZiBDT05GSUdfQ1JZUFRPX0RFVl9GU0xfQ0FBTV9JTlRDCisjZGVmaW5lIEpPQlJfSU5UQyBKUkNGR19JQ0VOCisjZGVmaW5lIEpPQlJfSU5UQ19USU1FX1RITEQgQ09ORklHX0NSWVBUT19ERVZfRlNMX0NBQU1fSU5UQ19USU1FX1RITEQKKyNkZWZpbmUgSk9CUl9JTlRDX0NPVU5UX1RITEQgQ09ORklHX0NSWVBUT19ERVZfRlNMX0NBQU1fSU5UQ19DT1VOVF9USExECisjZWxzZQorI2RlZmluZSBKT0JSX0lOVEMgMAorI2RlZmluZSBKT0JSX0lOVENfVElNRV9USExEIDAKKyNkZWZpbmUgSk9CUl9JTlRDX0NPVU5UX1RITEQgMAorI2VuZGlmCisKKy8qCisgKiBTdG9yYWdlIGZvciB0cmFja2luZyBlYWNoIGluLXByb2Nlc3MgZW50cnkgbW92aW5nIGFjcm9zcyBhIHJpbmcKKyAqIEVhY2ggZW50cnkgb24gYW4gb3V0cHV0IHJpbmcgbmVlZHMgb25lIG9mIHRoZXNlCisgKi8KK3N0cnVjdCBjYWFtX2pyZW50cnlfaW5mbyB7CisJdm9pZCAoKmNhbGxiaykoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgKmRlc2MsIHUzMiBzdGF0dXMsIHZvaWQgKmFyZyk7CisJdm9pZCAqY2JrYXJnOwkvKiBBcmd1bWVudCBwZXIgcmluZyBlbnRyeSAqLworCXUzMiAqZGVzY19hZGRyX3ZpcnQ7CS8qIFN0b3JlZCB2aXJ0IGFkZHIgZm9yIHBvc3Rwcm9jZXNzaW5nICovCisJZG1hX2FkZHJfdCBkZXNjX2FkZHJfZG1hOwkvKiBTdG9yZWQgYnVzIGFkZHIgZm9yIGRvbmUgbWF0Y2hpbmcgKi8KKwl1MzIgZGVzY19zaXplOwkvKiBTdG9yZWQgc2l6ZSBmb3IgcG9zdHByb2Nlc3NpbmcsIGhlYWRlciBkZXJpdmVkICovCit9OworCisvKiBQcml2YXRlIHN1Yi1zdG9yYWdlIGZvciBhIHNpbmdsZSBKb2JSICovCitzdHJ1Y3QgY2FhbV9kcnZfcHJpdmF0ZV9qciB7CisJc3RydWN0IGRldmljZSAqcGFyZW50ZGV2OwkvKiBwb2ludHMgYmFjayB0byBjb250cm9sbGVyIGRldiAqLworCWludCByaWR4OworCXN0cnVjdCBjYWFtX2pvYl9yaW5nIF9faW9tZW0gKnJyZWdzOwkvKiBKb2JSJ3MgcmVnaXN0ZXIgc3BhY2UgKi8KKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgaXJxdGFza1tOUl9DUFVTXTsKKwlpbnQgaXJxOwkJCS8qIE9uZSBwZXIgcXVldWUgKi8KKwlpbnQgYXNzaWduOwkJCS8qIGJ1c3kvZnJlZSAqLworCisJLyogSm9iIHJpbmcgaW5mbyAqLworCWludCByaW5nc2l6ZTsJLyogU2l6ZSBvZiByaW5ncyAoYXNzdW1lIGlucHV0ID0gb3V0cHV0KSAqLworCXN0cnVjdCBjYWFtX2pyZW50cnlfaW5mbyAqZW50aW5mbzsJLyogQWxsb2MnZWQgMSBwZXIgcmluZyBlbnRyeSAqLworCXNwaW5sb2NrX3QgaW5wbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWQ7IC8qIElucHV0IHJpbmcgaW5kZXggbG9jayAqLworCWludCBpbnBfcmluZ193cml0ZV9pbmRleDsJLyogSW5wdXQgaW5kZXggInRhaWwiICovCisJaW50IGhlYWQ7CQkJLyogZW50aW5mbyAocy93IHJpbmcpIGhlYWQgaW5kZXggKi8KKwlkbWFfYWRkcl90ICppbnByaW5nOwkvKiBCYXNlIG9mIGlucHV0IHJpbmcsIGFsbG9jIERNQS1zYWZlICovCisJc3BpbmxvY2tfdCBvdXRsb2NrIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsgLyogT3V0cHV0IHJpbmcgaW5kZXggbG9jayAqLworCWludCBvdXRfcmluZ19yZWFkX2luZGV4OwkvKiBPdXRwdXQgaW5kZXggInRhaWwiICovCisJaW50IHRhaWw7CQkJLyogZW50aW5mbyAocy93IHJpbmcpIHRhaWwgaW5kZXggKi8KKwlzdHJ1Y3QganJfb3V0ZW50cnkgKm91dHJpbmc7CS8qIEJhc2Ugb2Ygb3V0cHV0IHJpbmcsIERNQS1zYWZlICovCit9OworCisvKgorICogRHJpdmVyLXByaXZhdGUgc3RvcmFnZSBmb3IgYSBzaW5nbGUgQ0FBTSBibG9jayBpbnN0YW5jZQorICovCitzdHJ1Y3QgY2FhbV9kcnZfcHJpdmF0ZSB7CisKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGRldmljZSAqKmpyZGV2OyAvKiBBbGxvYydlZCBhcnJheSBwZXIgc3ViLWRldmljZSAqLworCXNwaW5sb2NrX3QganJfYWxsb2NfbG9jazsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCisJLyogUGh5c2ljYWwtcHJlc2VuY2Ugc2VjdGlvbiAqLworCXN0cnVjdCBjYWFtX2N0cmwgKmN0cmw7IC8qIGNvbnRyb2xsZXIgcmVnaW9uICovCisJc3RydWN0IGNhYW1fZGVjbyAqKmRlY287IC8qIERFQ08vQ0NCIHZpZXdzICovCisJc3RydWN0IGNhYW1fYXNzdXJhbmNlICphYzsKKwlzdHJ1Y3QgY2FhbV9xdWV1ZV9pZiAqcWk7IC8qIFFJIGNvbnRyb2wgcmVnaW9uICovCisKKwkvKgorCSAqIERldGVjdGVkIGdlb21ldHJ5IGJsb2NrLiBGaWxsZWQgaW4gZnJvbSBkZXZpY2UgdHJlZSBpZiBwb3dlcnBjLAorCSAqIG9yIGZyb20gcmVnaXN0ZXItYmFzZWQgdmVyc2lvbiBkZXRlY3Rpb24gY29kZQorCSAqLworCXU4IHRvdGFsX2pvYnJzOwkJLyogVG90YWwgSm9iIFJpbmdzIGluIGRldmljZSAqLworCXU4IHFpX3ByZXNlbnQ7CQkvKiBOb256ZXJvIGlmIFFJIHByZXNlbnQgaW4gZGV2aWNlICovCisJaW50IHNlY3Zpb19pcnE7CQkvKiBTZWN1cml0eSB2aW9sYXRpb24gaW50ZXJydXB0IG51bWJlciAqLworCisJLyogd2hpY2gganIgYWxsb2NhdGVkIHRvIHNjYXR0ZXJsaXN0IGNyeXB0byAqLworCWF0b21pY190IHRmbV9jb3VudCBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisJaW50IG51bV9qcnNfZm9yX2FsZ2FwaTsKKwlzdHJ1Y3QgZGV2aWNlICoqYWxnYXBpX2pyOworCS8qIGxpc3Qgb2YgcmVnaXN0ZXJlZCBjcnlwdG8gYWxnb3JpdGhtcyAobWsgZ2VuZXJpYyBjb250ZXh0IGhhbmRsZT8pICovCisJc3RydWN0IGxpc3RfaGVhZCBhbGdfbGlzdDsKKworCS8qCisJICogZGVidWdmcyBlbnRyaWVzIGZvciBkZXZlbG9wZXIgdmlldyBpbnRvIGRyaXZlci9kZXZpY2UKKwkgKiB2YXJpYWJsZXMgYXQgcnVudGltZS4KKwkgKi8KKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwlzdHJ1Y3QgZGVudHJ5ICpkZnNfcm9vdDsKKwlzdHJ1Y3QgZGVudHJ5ICpjdGw7IC8qIGNvbnRyb2xsZXIgZGlyICovCisJc3RydWN0IGRlbnRyeSAqY3RsX3JxX2RlcXVldWVkLCAqY3RsX29iX2VuY19yZXEsICpjdGxfaWJfZGVjX3JlcTsKKwlzdHJ1Y3QgZGVudHJ5ICpjdGxfb2JfZW5jX2J5dGVzLCAqY3RsX29iX3Byb3RfYnl0ZXM7CisJc3RydWN0IGRlbnRyeSAqY3RsX2liX2RlY19ieXRlcywgKmN0bF9pYl92YWxpZF9ieXRlczsKKwlzdHJ1Y3QgZGVudHJ5ICpjdGxfZmF1bHRhZGRyLCAqY3RsX2ZhdWx0ZGV0YWlsLCAqY3RsX2ZhdWx0c3RhdHVzOworCisJc3RydWN0IGRlYnVnZnNfYmxvYl93cmFwcGVyIGN0bF9rZWtfd3JhcCwgY3RsX3RrZWtfd3JhcCwgY3RsX3Rkc2tfd3JhcDsKKwlzdHJ1Y3QgZGVudHJ5ICpjdGxfa2VrLCAqY3RsX3RrZWssICpjdGxfdGRzazsKKyNlbmRpZgorfTsKKwordm9pZCBjYWFtX2pyX2FsZ2FwaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldik7Cit2b2lkIGNhYW1fanJfYWxnYXBpX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworI2VuZGlmIC8qIElOVEVSTl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9jYWFtL2pyLmMgYi9kcml2ZXJzL2NyeXB0by9jYWFtL2pyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQwZmEzMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY3J5cHRvL2NhYW0vanIuYwpAQCAtMCwwICsxLDUxNyBAQAorLyoKKyAqIENBQU0vU0VDIDQueCB0cmFuc3BvcnQvYmFja2VuZCBkcml2ZXIKKyAqIEpvYlIgYmFja2VuZCBmdW5jdGlvbmFsaXR5CisgKgorICogQ29weXJpZ2h0IDIwMDgtMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICovCisKKyNpbmNsdWRlICJjb21wYXQuaCIKKyNpbmNsdWRlICJyZWdzLmgiCisjaW5jbHVkZSAianIuaCIKKyNpbmNsdWRlICJkZXNjLmgiCisjaW5jbHVkZSAiaW50ZXJuLmgiCisKKy8qIE1haW4gcGVyLXJpbmcgaW50ZXJydXB0IGhhbmRsZXIgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBjYWFtX2pyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpzdF9kZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gc3RfZGV2OworCXN0cnVjdCBjYWFtX2Rydl9wcml2YXRlX2pyICpqcnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1MzIgaXJxc3RhdGU7CisKKwkvKgorCSAqIENoZWNrIHRoZSBvdXRwdXQgcmluZyBmb3IgcmVhZHkgcmVzcG9uc2VzLCBraWNrCisJICogdGFza2xldCBpZiBqb2JzIGRvbmUuCisJICovCisJaXJxc3RhdGUgPSByZF9yZWczMigmanJwLT5ycmVncy0+anJpbnRzdGF0dXMpOworCWlmICghaXJxc3RhdGUpCisJCXJldHVybiBJUlFfTk9ORTsKKworCS8qCisJICogSWYgSm9iUiBlcnJvciwgd2UgZ290IG1vcmUgZGV2ZWxvcG1lbnQgd29yayB0byBkbworCSAqIEZsYWcgYSBidWcgbm93LCBidXQgd2UgcmVhbGx5IG5lZWQgdG8gc2h1dCBkb3duIGFuZAorCSAqIHJlc3RhcnQgdGhlIHF1ZXVlIChhbmQgZml4IGNvZGUpLgorCSAqLworCWlmIChpcnFzdGF0ZSAmIEpSSU5UX0pSX0VSUk9SKSB7CisJCWRldl9lcnIoZGV2LCAiam9iIHJpbmcgZXJyb3I6IGlycXN0YXRlOiAlMDh4XG4iLCBpcnFzdGF0ZSk7CisJCUJVRygpOworCX0KKworCS8qIG1hc2sgdmFsaWQgaW50ZXJydXB0cyAqLworCXNldGJpdHMzMigmanJwLT5ycmVncy0+cmNvbmZpZ19sbywgSlJDRkdfSU1TSyk7CisKKwkvKiBIYXZlIHZhbGlkIGludGVycnVwdCBhdCB0aGlzIHBvaW50LCBqdXN0IEFDSyBhbmQgdHJpZ2dlciAqLworCXdyX3JlZzMyKCZqcnAtPnJyZWdzLT5qcmludHN0YXR1cywgaXJxc3RhdGUpOworCisJcHJlZW1wdF9kaXNhYmxlKCk7CisJdGFza2xldF9zY2hlZHVsZSgmanJwLT5pcnF0YXNrW3NtcF9wcm9jZXNzb3JfaWQoKV0pOworCXByZWVtcHRfZW5hYmxlKCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qIERlZmVycmVkIHNlcnZpY2UgaGFuZGxlciwgcnVuIGFzIGludGVycnVwdC1maXJlZCB0YXNrbGV0ICovCitzdGF0aWMgdm9pZCBjYWFtX2pyX2RlcXVldWUodW5zaWduZWQgbG9uZyBkZXZhcmcpCit7CisJaW50IGh3X2lkeCwgc3dfaWR4LCBpLCBoZWFkLCB0YWlsOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IChzdHJ1Y3QgZGV2aWNlICopZGV2YXJnOworCXN0cnVjdCBjYWFtX2Rydl9wcml2YXRlX2pyICpqcnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl2b2lkICgqdXNlcmNhbGwpKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyICpkZXNjLCB1MzIgc3RhdHVzLCB2b2lkICphcmcpOworCXUzMiAqdXNlcmRlc2MsIHVzZXJzdGF0dXM7CisJdm9pZCAqdXNlcmFyZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmpycC0+b3V0bG9jaywgZmxhZ3MpOworCisJaGVhZCA9IEFDQ0VTU19PTkNFKGpycC0+aGVhZCk7CisJc3dfaWR4ID0gdGFpbCA9IGpycC0+dGFpbDsKKworCXdoaWxlIChDSVJDX0NOVChoZWFkLCB0YWlsLCBKT0JSX0RFUFRIKSA+PSAxICYmCisJICAgICAgIHJkX3JlZzMyKCZqcnAtPnJyZWdzLT5vdXRyaW5nX3VzZWQpKSB7CisKKwkJaHdfaWR4ID0ganJwLT5vdXRfcmluZ19yZWFkX2luZGV4OworCQlmb3IgKGkgPSAwOyBDSVJDX0NOVChoZWFkLCB0YWlsICsgaSwgSk9CUl9ERVBUSCkgPj0gMTsgaSsrKSB7CisJCQlzd19pZHggPSAodGFpbCArIGkpICYgKEpPQlJfREVQVEggLSAxKTsKKworCQkJc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCk7CisKKwkJCWlmIChqcnAtPm91dHJpbmdbaHdfaWR4XS5kZXNjID09CisJCQkgICAganJwLT5lbnRpbmZvW3N3X2lkeF0uZGVzY19hZGRyX2RtYSkKKwkJCQlicmVhazsgLyogZm91bmQgKi8KKwkJfQorCQkvKiB3ZSBzaG91bGQgbmV2ZXIgZmFpbCB0byBmaW5kIGEgbWF0Y2hpbmcgZGVzY3JpcHRvciAqLworCQlCVUdfT04oQ0lSQ19DTlQoaGVhZCwgdGFpbCArIGksIEpPQlJfREVQVEgpIDw9IDApOworCisJCS8qIFVubWFwIGp1c3QtcnVuIGRlc2NyaXB0b3Igc28gd2UgY2FuIHBvc3QtcHJvY2VzcyAqLworCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwganJwLT5vdXRyaW5nW2h3X2lkeF0uZGVzYywKKwkJCQkganJwLT5lbnRpbmZvW3N3X2lkeF0uZGVzY19zaXplLAorCQkJCSBETUFfVE9fREVWSUNFKTsKKworCQkvKiBtYXJrIGNvbXBsZXRlZCwgYXZvaWQgbWF0Y2hpbmcgb24gYSByZWN5Y2xlZCBkZXNjIGFkZHIgKi8KKwkJanJwLT5lbnRpbmZvW3N3X2lkeF0uZGVzY19hZGRyX2RtYSA9IDA7CisKKwkJLyogU3Rhc2ggY2FsbGJhY2sgcGFyYW1zIGZvciB1c2Ugb3V0c2lkZSBvZiBsb2NrICovCisJCXVzZXJjYWxsID0ganJwLT5lbnRpbmZvW3N3X2lkeF0uY2FsbGJrOworCQl1c2VyYXJnID0ganJwLT5lbnRpbmZvW3N3X2lkeF0uY2JrYXJnOworCQl1c2VyZGVzYyA9IGpycC0+ZW50aW5mb1tzd19pZHhdLmRlc2NfYWRkcl92aXJ0OworCQl1c2Vyc3RhdHVzID0ganJwLT5vdXRyaW5nW2h3X2lkeF0uanJzdGF0dXM7CisKKwkJc21wX21iKCk7CisKKwkJanJwLT5vdXRfcmluZ19yZWFkX2luZGV4ID0gKGpycC0+b3V0X3JpbmdfcmVhZF9pbmRleCArIDEpICYKKwkJCQkJICAgKEpPQlJfREVQVEggLSAxKTsKKworCQkvKgorCQkgKiBpZiB0aGlzIGpvYiBjb21wbGV0ZWQgb3V0LW9mLW9yZGVyLCBkbyBub3QgaW5jcmVtZW50CisJCSAqIHRoZSB0YWlsLiAgT3RoZXJ3aXNlLCBpbmNyZW1lbnQgdGFpbCBieSAxIHBsdXMgdGhlCisJCSAqIG51bWJlciBvZiBzdWJzZXF1ZW50IGpvYnMgYWxyZWFkeSBjb21wbGV0ZWQgb3V0LW9mLW9yZGVyCisJCSAqLworCQlpZiAoc3dfaWR4ID09IHRhaWwpIHsKKwkJCWRvIHsKKwkJCQl0YWlsID0gKHRhaWwgKyAxKSAmIChKT0JSX0RFUFRIIC0gMSk7CisJCQkJc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCk7CisJCQl9IHdoaWxlIChDSVJDX0NOVChoZWFkLCB0YWlsLCBKT0JSX0RFUFRIKSA+PSAxICYmCisJCQkJIGpycC0+ZW50aW5mb1t0YWlsXS5kZXNjX2FkZHJfZG1hID09IDApOworCisJCQlqcnAtPnRhaWwgPSB0YWlsOworCQl9CisKKwkJLyogc2V0IGRvbmUgKi8KKwkJd3JfcmVnMzIoJmpycC0+cnJlZ3MtPm91dHJpbmdfcm12ZCwgMSk7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmanJwLT5vdXRsb2NrLCBmbGFncyk7CisKKwkJLyogRmluYWxseSwgZXhlY3V0ZSB1c2VyJ3MgY2FsbGJhY2sgKi8KKwkJdXNlcmNhbGwoZGV2LCB1c2VyZGVzYywgdXNlcnN0YXR1cywgdXNlcmFyZyk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmpycC0+b3V0bG9jaywgZmxhZ3MpOworCisJCWhlYWQgPSBBQ0NFU1NfT05DRShqcnAtPmhlYWQpOworCQlzd19pZHggPSB0YWlsID0ganJwLT50YWlsOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmpycC0+b3V0bG9jaywgZmxhZ3MpOworCisJLyogcmVlbmFibGUgLyB1bm1hc2sgSVJRcyAqLworCWNscmJpdHMzMigmanJwLT5ycmVncy0+cmNvbmZpZ19sbywgSlJDRkdfSU1TSyk7Cit9CisKKy8qKgorICogY2FhbV9qcl9yZWdpc3RlcigpIC0gQWxsb2MgYSByaW5nIGZvciBzb21lb25lIHRvIHVzZSBhcyBuZWVkZWQuIFJldHVybnMKKyAqIGFuIG9yZGluYWwgb2YgdGhlIHJpbmdzIGFsbG9jYXRlZCwgZWxzZSByZXR1cm5zIC1FTk9ERVYgaWYgbm8gcmluZ3MKKyAqIGFyZSBhdmFpbGFibGUuCisgKiBAY3RybGRldjogcG9pbnRzIHRvIHRoZSBjb250cm9sbGVyIGxldmVsIGRldiAocGFyZW50KSB0aGF0CisgKiAgICAgICAgICAgb3ducyByaW5ncyBhdmFpbGFibGUgZm9yIHVzZS4KKyAqIEBkZXY6ICAgICBwb2ludHMgdG8gd2hlcmUgYSBwb2ludGVyIHRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgcXVldWUncworICogICAgICAgICAgIGRldiBjYW4gYmUgd3JpdHRlbiB0byBpZiBzdWNjZXNzZnVsLgorICoqLworaW50IGNhYW1fanJfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqY3RybGRldiwgc3RydWN0IGRldmljZSAqKnJkZXYpCit7CisJc3RydWN0IGNhYW1fZHJ2X3ByaXZhdGUgKmN0cmxwcml2ID0gZGV2X2dldF9kcnZkYXRhKGN0cmxkZXYpOworCXN0cnVjdCBjYWFtX2Rydl9wcml2YXRlX2pyICpqcnByaXYgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJpbmc7CisKKwkvKiBMb2NrLCBpZiBmcmVlIHJpbmcgLSBhc3NpZ24sIHVubG9jayAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZjdHJscHJpdi0+anJfYWxsb2NfbG9jaywgZmxhZ3MpOworCWZvciAocmluZyA9IDA7IHJpbmcgPCBjdHJscHJpdi0+dG90YWxfam9icnM7IHJpbmcrKykgeworCQlqcnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoY3RybHByaXYtPmpyZGV2W3JpbmddKTsKKwkJaWYgKGpycHJpdi0+YXNzaWduID09IEpPQlJfVU5BU1NJR05FRCkgeworCQkJanJwcml2LT5hc3NpZ24gPSBKT0JSX0FTU0lHTkVEOworCQkJKnJkZXYgPSBjdHJscHJpdi0+anJkZXZbcmluZ107CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHJscHJpdi0+anJfYWxsb2NfbG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIHJpbmc7CisJCX0KKwl9CisKKwkvKiBJZiBhc3NpZ25lZCwgd3JpdGUgZGV2IHdoZXJlIGNhbGxlciBuZWVkcyBpdCAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0cmxwcml2LT5qcl9hbGxvY19sb2NrLCBmbGFncyk7CisJKnJkZXYgPSBOVUxMOworCisJcmV0dXJuIC1FTk9ERVY7Cit9CitFWFBPUlRfU1lNQk9MKGNhYW1fanJfcmVnaXN0ZXIpOworCisvKioKKyAqIGNhYW1fanJfZGVyZWdpc3RlcigpIC0gRGVyZWdpc3RlciBhbiBBUEkgYW5kIHJlbGVhc2UgdGhlIHF1ZXVlLgorICogUmV0dXJucyAwIGlmIE9LLCAtRUJVU1kgaWYgcXVldWUgc3RpbGwgY29udGFpbnMgcGVuZGluZyBlbnRyaWVzCisgKiBvciB1bnByb2Nlc3NlZCByZXN1bHRzIGF0IHRoZSB0aW1lIG9mIHRoZSBjYWxsCisgKiBAZGV2ICAgICAtIHBvaW50cyB0byB0aGUgZGV2IHRoYXQgaWRlbnRpZmllcyB0aGUgcXVldWUgdG8KKyAqICAgICAgICAgICAgYmUgcmVsZWFzZWQuCisgKiovCitpbnQgY2FhbV9qcl9kZXJlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKnJkZXYpCit7CisJc3RydWN0IGNhYW1fZHJ2X3ByaXZhdGVfanIgKmpycHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlzdHJ1Y3QgY2FhbV9kcnZfcHJpdmF0ZSAqY3RybHByaXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIEdldCB0aGUgb3duaW5nIGNvbnRyb2xsZXIncyBwcml2YXRlIHNwYWNlICovCisJY3RybHByaXYgPSBkZXZfZ2V0X2RydmRhdGEoanJwcml2LT5wYXJlbnRkZXYpOworCisJLyoKKwkgKiBNYWtlIHN1cmUgcmluZyBlbXB0eSBiZWZvcmUgcmVsZWFzZQorCSAqLworCWlmIChyZF9yZWczMigmanJwcml2LT5ycmVncy0+b3V0cmluZ191c2VkKSB8fAorCSAgICAocmRfcmVnMzIoJmpycHJpdi0+cnJlZ3MtPmlucHJpbmdfYXZhaWwpICE9IEpPQlJfREVQVEgpKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogUmVsZWFzZSByaW5nICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmN0cmxwcml2LT5qcl9hbGxvY19sb2NrLCBmbGFncyk7CisJanJwcml2LT5hc3NpZ24gPSBKT0JSX1VOQVNTSUdORUQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3RybHByaXYtPmpyX2FsbG9jX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjYWFtX2pyX2RlcmVnaXN0ZXIpOworCisvKioKKyAqIGNhYW1fanJfZW5xdWV1ZSgpIC0gRW5xdWV1ZSBhIGpvYiBkZXNjcmlwdG9yIGhlYWQuIFJldHVybnMgMCBpZiBPSywKKyAqIC1FQlVTWSBpZiB0aGUgcXVldWUgaXMgZnVsbCwgLUVJTyBpZiBpdCBjYW5ub3QgbWFwIHRoZSBjYWxsZXIncworICogZGVzY3JpcHRvci4KKyAqIEBkZXY6ICBkZXZpY2Ugb2YgdGhlIGpvYiByaW5nIHRvIGJlIHVzZWQuIFRoaXMgZGV2aWNlIHNob3VsZCBoYXZlCisgKiAgICAgICAgYmVlbiBhc3NpZ25lZCBwcmlvciBieSBjYWFtX2pyX3JlZ2lzdGVyKCkuCisgKiBAZGVzYzogcG9pbnRzIHRvIGEgam9iIGRlc2NyaXB0b3IgdGhhdCBleGVjdXRlIG91ciByZXF1ZXN0LiBBbGwKKyAqICAgICAgICBkZXNjcmlwdG9ycyAoYW5kIGFsbCByZWZlcmVuY2VkIGRhdGEpIG11c3QgYmUgaW4gYSBETUFhYmxlCisgKiAgICAgICAgcmVnaW9uLCBhbmQgYWxsIGRhdGEgcmVmZXJlbmNlcyBtdXN0IGJlIHBoeXNpY2FsIGFkZHJlc3NlcworICogICAgICAgIGFjY2Vzc2libGUgdG8gQ0FBTSAoaS5lLiB3aXRoaW4gYSBQQU1VIHdpbmRvdyBncmFudGVkCisgKiAgICAgICAgdG8gaXQpLgorICogQGNiazogIHBvaW50ZXIgdG8gYSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBpbnZva2VkIHVwb24gY29tcGxldGlvbgorICogICAgICAgIG9mIHRoaXMgcmVxdWVzdC4gVGhpcyBoYXMgdGhlIGZvcm06CisgKiAgICAgICAgY2FsbGJhY2soc3RydWN0IGRldmljZSAqZGV2LCB1MzIgKmRlc2MsIHUzMiBzdGF0LCB2b2lkICphcmcpCisgKiAgICAgICAgd2hlcmU6CisgKiAgICAgICAgQGRldjogICAgY29udGFpbnMgdGhlIGpvYiByaW5nIGRldmljZSB0aGF0IHByb2Nlc3NlZCB0aGlzCisgKiAgICAgICAgICAgICAgICAgcmVzcG9uc2UuCisgKiAgICAgICAgQGRlc2M6ICAgZGVzY3JpcHRvciB0aGF0IGluaXRpYXRlZCB0aGUgcmVxdWVzdCwgc2FtZSBhcworICogICAgICAgICAgICAgICAgICJkZXNjIiBiZWluZyBhcmd1ZWQgdG8gY2FhbV9qcl9lbnF1ZXVlKCkuCisgKiAgICAgICAgQHN0YXR1czogdW50cmFuc2xhdGVkIHN0YXR1cyByZWNlaXZlZCBmcm9tIENBQU0uIFNlZSB0aGUKKyAqICAgICAgICAgICAgICAgICByZWZlcmVuY2UgbWFudWFsIGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mCisgKiAgICAgICAgICAgICAgICAgZXJyb3IgbWVhbmluZywgb3Igc2VlIHRoZSBKUlNUQSBkZWZpbml0aW9ucyBpbiB0aGUKKyAqICAgICAgICAgICAgICAgICByZWdpc3RlciBoZWFkZXIgZmlsZQorICogICAgICAgIEBhcmVxOiAgIG9wdGlvbmFsIHBvaW50ZXIgdG8gYW4gYXJndW1lbnQgcGFzc2VkIHdpdGggdGhlCisgKiAgICAgICAgICAgICAgICAgb3JpZ2luYWwgcmVxdWVzdAorICogQGFyZXE6IG9wdGlvbmFsIHBvaW50ZXIgdG8gYSB1c2VyIGFyZ3VtZW50IGZvciB1c2UgYXQgY2FsbGJhY2sKKyAqICAgICAgICB0aW1lLgorICoqLworaW50IGNhYW1fanJfZW5xdWV1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiAqZGVzYywKKwkJICAgIHZvaWQgKCpjYmspKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyICpkZXNjLAorCQkJCXUzMiBzdGF0dXMsIHZvaWQgKmFyZXEpLAorCQkgICAgdm9pZCAqYXJlcSkKK3sKKwlzdHJ1Y3QgY2FhbV9kcnZfcHJpdmF0ZV9qciAqanJwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGNhYW1fanJlbnRyeV9pbmZvICpoZWFkX2VudHJ5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGhlYWQsIHRhaWwsIGRlc2Nfc2l6ZTsKKwlkbWFfYWRkcl90IGRlc2NfZG1hOworCisJZGVzY19zaXplID0gKCpkZXNjICYgSERSX0pEX0xFTkdUSF9NQVNLKSAqIHNpemVvZih1MzIpOworCWRlc2NfZG1hID0gZG1hX21hcF9zaW5nbGUoZGV2LCBkZXNjLCBkZXNjX3NpemUsIERNQV9UT19ERVZJQ0UpOworCWlmIChkbWFfbWFwcGluZ19lcnJvcihkZXYsIGRlc2NfZG1hKSkgeworCQlkZXZfZXJyKGRldiwgImNhYW1fanJfZW5xdWV1ZSgpOiBjYW4ndCBtYXAgam9iZGVzY1xuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZqcnAtPmlucGxvY2ssIGZsYWdzKTsKKworCWhlYWQgPSBqcnAtPmhlYWQ7CisJdGFpbCA9IEFDQ0VTU19PTkNFKGpycC0+dGFpbCk7CisKKwlpZiAoIXJkX3JlZzMyKCZqcnAtPnJyZWdzLT5pbnByaW5nX2F2YWlsKSB8fAorCSAgICBDSVJDX1NQQUNFKGhlYWQsIHRhaWwsIEpPQlJfREVQVEgpIDw9IDApIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmanJwLT5pbnBsb2NrLCBmbGFncyk7CisJCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBkZXNjX2RtYSwgZGVzY19zaXplLCBETUFfVE9fREVWSUNFKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwloZWFkX2VudHJ5ID0gJmpycC0+ZW50aW5mb1toZWFkXTsKKwloZWFkX2VudHJ5LT5kZXNjX2FkZHJfdmlydCA9IGRlc2M7CisJaGVhZF9lbnRyeS0+ZGVzY19zaXplID0gZGVzY19zaXplOworCWhlYWRfZW50cnktPmNhbGxiayA9ICh2b2lkICopY2JrOworCWhlYWRfZW50cnktPmNia2FyZyA9IGFyZXE7CisJaGVhZF9lbnRyeS0+ZGVzY19hZGRyX2RtYSA9IGRlc2NfZG1hOworCisJanJwLT5pbnByaW5nW2pycC0+aW5wX3Jpbmdfd3JpdGVfaW5kZXhdID0gZGVzY19kbWE7CisKKwlzbXBfd21iKCk7CisKKwlqcnAtPmlucF9yaW5nX3dyaXRlX2luZGV4ID0gKGpycC0+aW5wX3Jpbmdfd3JpdGVfaW5kZXggKyAxKSAmCisJCQkJICAgIChKT0JSX0RFUFRIIC0gMSk7CisJanJwLT5oZWFkID0gKGhlYWQgKyAxKSAmIChKT0JSX0RFUFRIIC0gMSk7CisKKwl3bWIoKTsKKworCXdyX3JlZzMyKCZqcnAtPnJyZWdzLT5pbnByaW5nX2pvYmFkZCwgMSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZqcnAtPmlucGxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjYWFtX2pyX2VucXVldWUpOworCitzdGF0aWMgaW50IGNhYW1fcmVzZXRfaHdfanIoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBjYWFtX2Rydl9wcml2YXRlX2pyICpqcnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBpbnQgdGltZW91dCA9IDEwMDAwMDsKKworCS8qCisJICogbWFzayBpbnRlcnJ1cHRzIHNpbmNlIHdlIGFyZSBnb2luZyB0byBwb2xsCisJICogZm9yIHJlc2V0IGNvbXBsZXRpb24gc3RhdHVzCisJICovCisJc2V0Yml0czMyKCZqcnAtPnJyZWdzLT5yY29uZmlnX2xvLCBKUkNGR19JTVNLKTsKKworCS8qIGluaXRpYXRlIGZsdXNoIChyZXF1aXJlZCBwcmlvciB0byByZXNldCkgKi8KKwl3cl9yZWczMigmanJwLT5ycmVncy0+anJjb21tYW5kLCBKUkNSX1JFU0VUKTsKKwl3aGlsZSAoKChyZF9yZWczMigmanJwLT5ycmVncy0+anJpbnRzdGF0dXMpICYgSlJJTlRfRVJSX0hBTFRfTUFTSykgPT0KKwkJSlJJTlRfRVJSX0hBTFRfSU5QUk9HUkVTUykgJiYgLS10aW1lb3V0KQorCQljcHVfcmVsYXgoKTsKKworCWlmICgocmRfcmVnMzIoJmpycC0+cnJlZ3MtPmpyaW50c3RhdHVzKSAmIEpSSU5UX0VSUl9IQUxUX01BU0spICE9CisJICAgIEpSSU5UX0VSUl9IQUxUX0NPTVBMRVRFIHx8IHRpbWVvdXQgPT0gMCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBmbHVzaCBqb2IgcmluZyAlZFxuIiwganJwLT5yaWR4KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogaW5pdGlhdGUgcmVzZXQgKi8KKwl0aW1lb3V0ID0gMTAwMDAwOworCXdyX3JlZzMyKCZqcnAtPnJyZWdzLT5qcmNvbW1hbmQsIEpSQ1JfUkVTRVQpOworCXdoaWxlICgocmRfcmVnMzIoJmpycC0+cnJlZ3MtPmpyY29tbWFuZCkgJiBKUkNSX1JFU0VUKSAmJiAtLXRpbWVvdXQpCisJCWNwdV9yZWxheCgpOworCisJaWYgKHRpbWVvdXQgPT0gMCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZXNldCBqb2IgcmluZyAlZFxuIiwganJwLT5yaWR4KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogdW5tYXNrIGludGVycnVwdHMgKi8KKwljbHJiaXRzMzIoJmpycC0+cnJlZ3MtPnJjb25maWdfbG8sIEpSQ0ZHX0lNU0spOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbml0IEpvYlIgaW5kZXBlbmRlbnQgb2YgcGxhdGZvcm0gcHJvcGVydHkgZGV0ZWN0aW9uCisgKi8KK3N0YXRpYyBpbnQgY2FhbV9qcl9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY2FhbV9kcnZfcHJpdmF0ZV9qciAqanJwOworCWRtYV9hZGRyX3QgaW5wYnVzYWRkciwgb3V0YnVzYWRkcjsKKwlpbnQgaSwgZXJyb3I7CisKKwlqcnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCS8qIENvbm5lY3Qgam9iIHJpbmcgaW50ZXJydXB0IGhhbmRsZXIuICovCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCisJCXRhc2tsZXRfaW5pdCgmanJwLT5pcnF0YXNrW2ldLCBjYWFtX2pyX2RlcXVldWUsCisJCQkgICAgICh1bnNpZ25lZCBsb25nKWRldik7CisKKwllcnJvciA9IHJlcXVlc3RfaXJxKGpycC0+aXJxLCBjYWFtX2pyX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJCQkgICAgImNhYW0tam9iciIsIGRldik7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoZGV2LCAiY2FuJ3QgY29ubmVjdCBKb2JSICVkIGludGVycnVwdCAoJWQpXG4iLAorCQkJanJwLT5yaWR4LCBqcnAtPmlycSk7CisJCWlycV9kaXNwb3NlX21hcHBpbmcoanJwLT5pcnEpOworCQlqcnAtPmlycSA9IDA7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVycm9yID0gY2FhbV9yZXNldF9od19qcihkZXYpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJanJwLT5pbnByaW5nID0ga3phbGxvYyhzaXplb2YoZG1hX2FkZHJfdCkgKiBKT0JSX0RFUFRILAorCQkJICAgICAgIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwlqcnAtPm91dHJpbmcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QganJfb3V0ZW50cnkpICoKKwkJCSAgICAgICBKT0JSX0RFUFRILCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisKKwlqcnAtPmVudGluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2FhbV9qcmVudHJ5X2luZm8pICogSk9CUl9ERVBUSCwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKKworCWlmICgoanJwLT5pbnByaW5nID09IE5VTEwpIHx8IChqcnAtPm91dHJpbmcgPT0gTlVMTCkgfHwKKwkgICAgKGpycC0+ZW50aW5mbyA9PSBOVUxMKSkgeworCQlkZXZfZXJyKGRldiwgImNhbid0IGFsbG9jYXRlIGpvYiByaW5ncyBmb3IgJWRcbiIsCisJCQlqcnAtPnJpZHgpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgSk9CUl9ERVBUSDsgaSsrKQorCQlqcnAtPmVudGluZm9baV0uZGVzY19hZGRyX2RtYSA9ICEwOworCisJLyogU2V0dXAgcmluZ3MgKi8KKwlpbnBidXNhZGRyID0gZG1hX21hcF9zaW5nbGUoZGV2LCBqcnAtPmlucHJpbmcsCisJCQkJICAgIHNpemVvZih1MzIgKikgKiBKT0JSX0RFUFRILAorCQkJCSAgICBETUFfQklESVJFQ1RJT05BTCk7CisJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgaW5wYnVzYWRkcikpIHsKKwkJZGV2X2VycihkZXYsICJjYWFtX2pyX2luaXQoKTogY2FuJ3QgbWFwIGlucHV0IHJpbmdcbiIpOworCQlrZnJlZShqcnAtPmlucHJpbmcpOworCQlrZnJlZShqcnAtPm91dHJpbmcpOworCQlrZnJlZShqcnAtPmVudGluZm8pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlvdXRidXNhZGRyID0gZG1hX21hcF9zaW5nbGUoZGV2LCBqcnAtPm91dHJpbmcsCisJCQkJICAgIHNpemVvZihzdHJ1Y3QganJfb3V0ZW50cnkpICogSk9CUl9ERVBUSCwKKwkJCQkgICAgRE1BX0JJRElSRUNUSU9OQUwpOworCWlmIChkbWFfbWFwcGluZ19lcnJvcihkZXYsIG91dGJ1c2FkZHIpKSB7CisJCWRldl9lcnIoZGV2LCAiY2FhbV9qcl9pbml0KCk6IGNhbid0IG1hcCBvdXRwdXQgcmluZ1xuIik7CisJCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgaW5wYnVzYWRkciwKKwkJCQkJIHNpemVvZih1MzIgKikgKiBKT0JSX0RFUFRILAorCQkJCQkgRE1BX0JJRElSRUNUSU9OQUwpOworCQlrZnJlZShqcnAtPmlucHJpbmcpOworCQlrZnJlZShqcnAtPm91dHJpbmcpOworCQlrZnJlZShqcnAtPmVudGluZm8pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlqcnAtPmlucF9yaW5nX3dyaXRlX2luZGV4ID0gMDsKKwlqcnAtPm91dF9yaW5nX3JlYWRfaW5kZXggPSAwOworCWpycC0+aGVhZCA9IDA7CisJanJwLT50YWlsID0gMDsKKworCXdyX3JlZzY0KCZqcnAtPnJyZWdzLT5pbnByaW5nX2Jhc2UsIGlucGJ1c2FkZHIpOworCXdyX3JlZzY0KCZqcnAtPnJyZWdzLT5vdXRyaW5nX2Jhc2UsIG91dGJ1c2FkZHIpOworCXdyX3JlZzMyKCZqcnAtPnJyZWdzLT5pbnByaW5nX3NpemUsIEpPQlJfREVQVEgpOworCXdyX3JlZzMyKCZqcnAtPnJyZWdzLT5vdXRyaW5nX3NpemUsIEpPQlJfREVQVEgpOworCisJanJwLT5yaW5nc2l6ZSA9IEpPQlJfREVQVEg7CisKKwlzcGluX2xvY2tfaW5pdCgmanJwLT5pbnBsb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmanJwLT5vdXRsb2NrKTsKKworCS8qIFNlbGVjdCBpbnRlcnJ1cHQgY29hbGVzY2luZyBwYXJhbWV0ZXJzICovCisJc2V0Yml0czMyKCZqcnAtPnJyZWdzLT5yY29uZmlnX2xvLCBKT0JSX0lOVEMgfAorCQkgIChKT0JSX0lOVENfQ09VTlRfVEhMRCA8PCBKUkNGR19JQ0RDVF9TSElGVCkgfAorCQkgIChKT0JSX0lOVENfVElNRV9USExEIDw8IEpSQ0ZHX0lDVFRfU0hJRlQpKTsKKworCWpycC0+YXNzaWduID0gSk9CUl9VTkFTU0lHTkVEOworCXJldHVybiAwOworfQorCisvKgorICogU2h1dGRvd24gSm9iUiBpbmRlcGVuZGVudCBvZiBwbGF0Zm9ybSBwcm9wZXJ0eSBjb2RlCisgKi8KK2ludCBjYWFtX2pyX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY2FhbV9kcnZfcHJpdmF0ZV9qciAqanJwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJZG1hX2FkZHJfdCBpbnBidXNhZGRyLCBvdXRidXNhZGRyOworCWludCByZXQsIGk7CisKKwlyZXQgPSBjYWFtX3Jlc2V0X2h3X2pyKGRldik7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKKwkJdGFza2xldF9raWxsKCZqcnAtPmlycXRhc2tbaV0pOworCisJLyogUmVsZWFzZSBpbnRlcnJ1cHQgKi8KKwlmcmVlX2lycShqcnAtPmlycSwgZGV2KTsKKworCS8qIEZyZWUgcmluZ3MgKi8KKwlpbnBidXNhZGRyID0gcmRfcmVnNjQoJmpycC0+cnJlZ3MtPmlucHJpbmdfYmFzZSk7CisJb3V0YnVzYWRkciA9IHJkX3JlZzY0KCZqcnAtPnJyZWdzLT5vdXRyaW5nX2Jhc2UpOworCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBvdXRidXNhZGRyLAorCQkJIHNpemVvZihzdHJ1Y3QganJfb3V0ZW50cnkpICogSk9CUl9ERVBUSCwKKwkJCSBETUFfQklESVJFQ1RJT05BTCk7CisJZG1hX3VubWFwX3NpbmdsZShkZXYsIGlucGJ1c2FkZHIsIHNpemVvZih1MzIgKikgKiBKT0JSX0RFUFRILAorCQkJIERNQV9CSURJUkVDVElPTkFMKTsKKwlrZnJlZShqcnAtPm91dHJpbmcpOworCWtmcmVlKGpycC0+aW5wcmluZyk7CisJa2ZyZWUoanJwLT5lbnRpbmZvKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBQcm9iZSByb3V0aW5lIGZvciBlYWNoIGRldGVjdGVkIEpvYlIgc3Vic3lzdGVtLiBJdCBhc3N1bWVzIHRoYXQKKyAqIHByb3BlcnR5IGRldGVjdGlvbiB3YXMgcGlja2VkIHVwIGV4dGVybmFsbHkuCisgKi8KK2ludCBjYWFtX2pyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCSAgaW50IHJpbmcpCit7CisJc3RydWN0IGRldmljZSAqY3RybGRldiwgKmpyZGV2OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmpyX3BkZXY7CisJc3RydWN0IGNhYW1fZHJ2X3ByaXZhdGUgKmN0cmxwcml2OworCXN0cnVjdCBjYWFtX2Rydl9wcml2YXRlX2pyICpqcnByaXY7CisJdTMyICpqcm9mZnNldDsKKwlpbnQgZXJyb3I7CisKKwljdHJsZGV2ID0gJnBkZXYtPmRldjsKKwljdHJscHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShjdHJsZGV2KTsKKworCWpycHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjYWFtX2Rydl9wcml2YXRlX2pyKSwKKwkJCSBHRlBfS0VSTkVMKTsKKwlpZiAoanJwcml2ID09IE5VTEwpIHsKKwkJZGV2X2VycihjdHJsZGV2LCAiY2FuJ3QgYWxsb2MgcHJpdmF0ZSBtZW0gZm9yIGpvYiByaW5nICVkXG4iLAorCQkJcmluZyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlqcnByaXYtPnBhcmVudGRldiA9IGN0cmxkZXY7IC8qIHBvaW50IGJhY2sgdG8gcGFyZW50ICovCisJanJwcml2LT5yaWR4ID0gcmluZzsgLyogc2F2ZSByaW5nIGlkZW50aXR5IHJlbGF0aXZlIHRvIGRldGVjdGlvbiAqLworCisJLyoKKwkgKiBEZXJpdmUgYSBwb2ludGVyIHRvIHRoZSBkZXRlY3RlZCBKb2JScyByZWdzCisJICogRHJpdmVyIGhhcyBhbHJlYWR5IGlvbWFwcGVkIHRoZSBlbnRpcmUgc3BhY2UsIHdlIGp1c3QKKwkgKiBuZWVkIHRvIGFkZCBpbiB0aGUgb2Zmc2V0IHRvIHRoaXMgSm9iUi4gRG9uJ3Qga25vdyBpZiBJCisJICogbGlrZSB0aGlzIGxvbmctdGVybSwgYnV0IGl0J2xsIHJ1bgorCSAqLworCWpyb2Zmc2V0ID0gKHUzMiAqKW9mX2dldF9wcm9wZXJ0eShucCwgInJlZyIsIE5VTEwpOworCWpycHJpdi0+cnJlZ3MgPSAoc3RydWN0IGNhYW1fam9iX3JpbmcgX19pb21lbSAqKSgodm9pZCAqKWN0cmxwcml2LT5jdHJsCisJCQkJCQkJICsgKmpyb2Zmc2V0KTsKKworCS8qIEJ1aWxkIGEgbG9jYWwgZGV2IGZvciBlYWNoIGRldGVjdGVkIHF1ZXVlICovCisJanJfcGRldiA9IG9mX3BsYXRmb3JtX2RldmljZV9jcmVhdGUobnAsIE5VTEwsIGN0cmxkZXYpOworCWlmIChqcl9wZGV2ID09IE5VTEwpIHsKKwkJa2ZyZWUoanJwcml2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWpyZGV2ID0gJmpyX3BkZXYtPmRldjsKKwlkZXZfc2V0X2RydmRhdGEoanJkZXYsIGpycHJpdik7CisJY3RybHByaXYtPmpyZGV2W3JpbmddID0ganJkZXY7CisKKwkvKiBJZGVudGlmeSB0aGUgaW50ZXJydXB0ICovCisJanJwcml2LT5pcnEgPSBvZl9pcnFfdG9fcmVzb3VyY2UobnAsIDAsIE5VTEwpOworCisJLyogTm93IGRvIHRoZSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBwYXJ0ICovCisJZXJyb3IgPSBjYWFtX2pyX2luaXQoanJkZXYpOyAvKiBub3cgdHVybiBvbiBoYXJkd2FyZSAqLworCWlmIChlcnJvcikgeworCQlrZnJlZShqcnByaXYpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJcmV0dXJuIGVycm9yOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vY2FhbS9qci5oIGIvZHJpdmVycy9jcnlwdG8vY2FhbS9qci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyM2RmMzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NyeXB0by9jYWFtL2pyLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENBQU0gcHVibGljLWxldmVsIGluY2x1ZGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBKb2JSIGJhY2tlbmQKKyAqCisgKiBDb3B5cmlnaHQgMjAwOC0yMDExIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKi8KKworI2lmbmRlZiBKUl9ICisjZGVmaW5lIEpSX0gKKworLyogUHJvdG90eXBlcyBmb3IgYmFja2VuZC1sZXZlbCBzZXJ2aWNlcyBleHBvc2VkIHRvIEFQSXMgKi8KK2ludCBjYWFtX2pyX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmN0cmxkZXYsIHN0cnVjdCBkZXZpY2UgKipyZGV2KTsKK2ludCBjYWFtX2pyX2RlcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqcmRldik7CitpbnQgY2FhbV9qcl9lbnF1ZXVlKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyICpkZXNjLAorCQkgICAgdm9pZCAoKmNiaykoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgKmRlc2MsIHUzMiBzdGF0dXMsCisJCQkJdm9pZCAqYXJlcSksCisJCSAgICB2b2lkICphcmVxKTsKKworZXh0ZXJuIGludCBjYWFtX2pyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkgaW50IHJpbmcpOworZXh0ZXJuIGludCBjYWFtX2pyX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldik7CisjZW5kaWYgLyogSlJfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vY2FhbS9yZWdzLmggYi9kcml2ZXJzL2NyeXB0by9jYWFtL3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWUzOTRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jcnlwdG8vY2FhbS9yZWdzLmgKQEAgLTAsMCArMSw2NjMgQEAKKy8qCisgKiBDQUFNIGhhcmR3YXJlIHJlZ2lzdGVyLWxldmVsIHZpZXcKKyAqCisgKiBDb3B5cmlnaHQgMjAwOC0yMDExIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKi8KKworI2lmbmRlZiBSRUdTX0gKKyNkZWZpbmUgUkVHU19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKy8qCisgKiBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgcmVnaXN0ZXIgYWNjZXNzIG1ldGhvZHMKKyAqCisgKiBDQUFNJ3MgYnVzLWFkZHJlc3NhYmxlIHJlZ2lzdGVycyBhcmUgNjQgYml0cyBpbnRlcm5hbGx5LgorICogVGhleSBoYXZlIGJlZW4gd2lyZWQgdG8gYmUgc2FmZWx5IGFjY2Vzc2libGUgb24gMzItYml0CisgKiBhcmNoaXRlY3R1cmVzLCBob3dldmVyLiBSZWdpc3RlcnMgd2VyZSBvcmdhbml6ZWQgc3VjaAorICogdGhhdCAoYSkgdGhleSBjYW4gYmUgY29udGFpbmVkIGluIDMyIGJpdHMsIChiKSBpZiBub3QsIHRoZW4gdGhleQorICogY2FuIGJlIHRyZWF0ZWQgYXMgdHdvIDMyLWJpdCBlbnRpdGllcywgb3IgZmluYWxseSAoYykgaWYgdGhleQorICogbXVzdCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlIDY0LWJpdCB2YWx1ZSwgdGhlbiB0aGlzIGNhbiBzYWZlbHkKKyAqIGJlIGRvbmUgd2l0aCB0d28gMzItYml0IGN5Y2xlcy4KKyAqCisgKiBGb3IgMzItYml0IG9wZXJhdGlvbnMgb24gNjQtYml0IHZhbHVlcywgQ0FBTSBmb2xsb3dzIHRoZSBzYW1lCisgKiA2NC1iaXQgcmVnaXN0ZXIgYWNjZXNzIGNvbnZlbnRpb25zIGFzIGl0J3MgcHJlZGVjZXNzb3JzLCBpbiB0aGF0CisgKiB3cml0ZXMgYXJlICJ0cmlnZ2VyZWQiIGJ5IGEgd3JpdGUgdG8gdGhlIHJlZ2lzdGVyIGF0IHRoZSBudW1lcmljYWxseQorICogaGlnaGVyIGFkZHJlc3MsIHRodXMsIGEgZnVsbCA2NC1iaXQgd3JpdGUgY3ljbGUgcmVxdWlyZXMgYSB3cml0ZQorICogdG8gdGhlIGxvd2VyIGFkZHJlc3MsIGZvbGxvd2VkIGJ5IGEgd3JpdGUgdG8gdGhlIGhpZ2hlciBhZGRyZXNzLAorICogd2hpY2ggd2lsbCBsYXRjaC9leGVjdXRlIHRoZSB3cml0ZSBjeWNsZS4KKyAqCisgKiBGb3IgZXhhbXBsZSwgbGV0J3MgYXNzdW1lIGEgU1cgcmVzZXQgb2YgQ0FBTSB0aHJvdWdoIHRoZSBtYXN0ZXIKKyAqIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuCisgKiAtIFNXUlNUIGlzIGluIGJpdCAzMSBvZiBNQ0ZHLgorICogLSBNQ0ZHIGJlZ2lucyBhdCBiYXNlKzB4MDAwMC4KKyAqIC0gQml0cyA2My0zMiBhcmUgYSAzMi1iaXQgd29yZCBhdCBiYXNlKzB4MDAwMCAobnVtZXJpY2FsbHktbG93ZXIpCisgKiAtIEJpdHMgMzEtMCBhcmUgYSAzMi1iaXQgd29yZCBhdCBiYXNlKzB4MDAwNCAobnVtZXJpY2FsbHktaGlnaGVyKQorICoKKyAqIChhbmQgb24gUG93ZXIsIHRoZSBjb252ZW50aW9uIGlzIDAtMzEsIDMyLTYzLCBJIGtub3cuLi4pCisgKgorICogQXNzdW1pbmcgYSA2NC1iaXQgd3JpdGUgdG8gdGhpcyBNQ0ZHIHRvIHBlcmZvcm0gYSBzb2Z0d2FyZSByZXNldAorICogd291bGQgdGhlbiByZXF1aXJlIGEgd3JpdGUgb2YgMCB0byBiYXNlKzB4MDAwMCwgZm9sbG93ZWQgYnkgYQorICogd3JpdGUgb2YgMHg4MDAwMDAwMCB0byBiYXNlKzB4MDAwNCwgd2hpY2ggd291bGQgImV4ZWN1dGUiIHRoZQorICogcmVzZXQuCisgKgorICogT2YgY291cnNlLCBzaW5jZSBNQ0ZHIDYzLTMyIGlzIGFsbCB6ZXJvLCB3ZSBjb3VsZCBjaGVhdCBhbmQgc2ltcGx5CisgKiB3cml0ZSAweDgwMDAwMDAgdG8gYmFzZSsweDAwMDQsIGFuZCB0aGUgcmVzZXQgd291bGQgd29yayBmaW5lLgorICogSG93ZXZlciwgc2luY2UgQ0FBTSBkb2VzIGNvbnRhaW4gc29tZSB3cml0ZS1hbmQtcmVhZC1pbnRlbmRlZAorICogNjQtYml0IHJlZ2lzdGVycywgdGhpcyBjb2RlIGRlZmluZXMgNjQtYml0IGFjY2VzcyBtZXRob2RzIGZvcgorICogdGhlIHNha2Ugb2YgaW50ZXJuYWwgY29uc2lzdGVuY3kgYW5kIHNpbXBsaWNpdHksIGFuZCBzbyB0aGF0IGEKKyAqIGNsZWFuIHRyYW5zaXRpb24gdG8gNjQtYml0IGlzIHBvc3NpYmxlIHdoZW4gaXQgYmVjb21lcyBuZWNlc3NhcnkuCisgKgorICogVGhlcmUgYXJlIGxpbWl0YXRpb25zIHRvIHRoaXMgdGhhdCB0aGUgZGV2ZWxvcGVyIG11c3QgcmVjb2duaXplLgorICogMzItYml0IGFyY2hpdGVjdHVyZXMgY2Fubm90IGVuZm9yY2UgYW4gYXRvbWljLTY0IG9wZXJhdGlvbiwKKyAqIFRoZXJlZm9yZToKKyAqCisgKiAtIE9uIHdyaXRlcywgc2luY2UgdGhlIEhXIGlzIGFzc3VtZWQgdG8gbGF0Y2ggdGhlIGN5Y2xlIG9uIHRoZQorICogICB3cml0ZSBvZiB0aGUgaGlnaGVyLW51bWVyaWMtYWRkcmVzcyB3b3JkLCB0aGVuIG9yZGVyZWQKKyAqICAgd3JpdGVzIHdvcmsgT0suCisgKgorICogLSBGb3IgcmVhZHMsIHdoZXJlIGEgcmVnaXN0ZXIgY29udGFpbnMgYSByZWxldmFudCB2YWx1ZSBvZiBtb3JlCisgKiAgIHRoYXQgMzIgYml0cywgdGhlIGhhcmR3YXJlIGVtcGxveXMgbG9naWMgdG8gbGF0Y2ggdGhlIG90aGVyCisgKiAgICJoYWxmIiBvZiB0aGUgZGF0YSB1bnRpbCByZWFkLCBlbnN1cmluZyBhbiBhY2N1cmF0ZSB2YWx1ZS4KKyAqICAgVGhpcyBpcyBvZiBwYXJ0aWN1bGFyIHJlbGV2YW5jZSB3aGVuIGRlYWxpbmcgd2l0aCBDQUFNJ3MKKyAqICAgcGVyZm9ybWFuY2UgY291bnRlcnMuCisgKgorICovCisKKyNpZmRlZiBfX0JJR19FTkRJQU4KKyNkZWZpbmUgd3JfcmVnMzIocmVnLCBkYXRhKSBvdXRfYmUzMihyZWcsIGRhdGEpCisjZGVmaW5lIHJkX3JlZzMyKHJlZykgaW5fYmUzMihyZWcpCisjaWZkZWYgQ09ORklHXzY0QklUCisjZGVmaW5lIHdyX3JlZzY0KHJlZywgZGF0YSkgb3V0X2JlNjQocmVnLCBkYXRhKQorI2RlZmluZSByZF9yZWc2NChyZWcpIGluX2JlNjQocmVnKQorI2VuZGlmCisjZWxzZQorI2lmZGVmIF9fTElUVExFX0VORElBTgorI2RlZmluZSB3cl9yZWczMihyZWcsIGRhdGEpIF9fcmF3X3dyaXRlbChyZWcsIGRhdGEpCisjZGVmaW5lIHJkX3JlZzMyKHJlZykgX19yYXdfcmVhZGwocmVnKQorI2lmZGVmIENPTkZJR182NEJJVAorI2RlZmluZSB3cl9yZWc2NChyZWcsIGRhdGEpIF9fcmF3X3dyaXRlcShyZWcsIGRhdGEpCisjZGVmaW5lIHJkX3JlZzY0KHJlZykgX19yYXdfcmVhZHEocmVnKQorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR182NEJJVAorc3RhdGljIGlubGluZSB2b2lkIHdyX3JlZzY0KHU2NCBfX2lvbWVtICpyZWcsIHU2NCBkYXRhKQoreworCXdyX3JlZzMyKCh1MzIgX19pb21lbSAqKXJlZywgKGRhdGEgJiAweGZmZmZmZmZmMDAwMDAwMDB1bGwpID4+IDMyKTsKKwl3cl9yZWczMigodTMyIF9faW9tZW0gKilyZWcgKyAxLCBkYXRhICYgMHgwMDAwMDAwMGZmZmZmZmZmdWxsKTsKK30KKworc3RhdGljIGlubGluZSB1NjQgcmRfcmVnNjQodTY0IF9faW9tZW0gKnJlZykKK3sKKwlyZXR1cm4gKCgodTY0KXJkX3JlZzMyKCh1MzIgX19pb21lbSAqKXJlZykpIDw8IDMyKSB8CisJCSgodTY0KXJkX3JlZzMyKCh1MzIgX19pb21lbSAqKXJlZyArIDEpKTsKK30KKyNlbmRpZgorCisvKgorICoganJfb3V0ZW50cnkKKyAqIFJlcHJlc2VudHMgZWFjaCBlbnRyeSBpbiBhIEpvYlIgb3V0cHV0IHJpbmcKKyAqLworc3RydWN0IGpyX291dGVudHJ5IHsKKwlkbWFfYWRkcl90IGRlc2M7LyogUG9pbnRlciB0byBjb21wbGV0ZWQgZGVzY3JpcHRvciAqLworCXUzMiBqcnN0YXR1czsJLyogU3RhdHVzIGZvciBjb21wbGV0ZWQgZGVzY3JpcHRvciAqLworfSBfX3BhY2tlZDsKKworLyoKKyAqIGNhYW1fcGVyZm1vbiAtIFBlcmZvcm1hbmNlIE1vbml0b3IvU2VjdXJlIE1lbW9yeSBTdGF0dXMvCisgKiAgICAgICAgICAgICAgICBDQUFNIEdsb2JhbCBTdGF0dXMvQ29tcG9uZW50IFZlcnNpb24gSURzCisgKgorICogU3BhbnMgZjAwLWZmZiB3aGVyZXZlciBpbnN0YW50aWF0ZWQKKyAqLworCisvKiBOdW1iZXIgb2YgREVDT3MgKi8KKyNkZWZpbmUgQ0hBX05VTV9ERUNPTlVNX1NISUZUCTU2CisjZGVmaW5lIENIQV9OVU1fREVDT05VTV9NQVNLCSgweGZ1bGwgPDwgQ0hBX05VTV9ERUNPTlVNX1NISUZUKQorCitzdHJ1Y3QgY2FhbV9wZXJmbW9uIHsKKwkvKiBQZXJmb3JtYW5jZSBNb25pdG9yIFJlZ2lzdGVycwkJCWYwMC1mOWYgKi8KKwl1NjQgcmVxX2RlcXVldWVkOwkvKiBQQ19SRVFfREVRIC0gRGVxdWV1ZWQgUmVxdWVzdHMJICAgICAqLworCXU2NCBvYl9lbmNfcmVxOwkvKiBQQ19PQl9FTkNfUkVRIC0gT3V0Ym91bmQgRW5jcnlwdCBSZXF1ZXN0cyAqLworCXU2NCBpYl9kZWNfcmVxOwkvKiBQQ19JQl9ERUNfUkVRIC0gSW5ib3VuZCBEZWNyeXB0IFJlcXVlc3RzICAqLworCXU2NCBvYl9lbmNfYnl0ZXM7CS8qIFBDX09CX0VOQ1JZUFQgLSBPdXRib3VuZCBCeXRlcyBFbmNyeXB0ZWQgICovCisJdTY0IG9iX3Byb3RfYnl0ZXM7CS8qIFBDX09CX1BST1RFQ1QgLSBPdXRib3VuZCBCeXRlcyBQcm90ZWN0ZWQgICovCisJdTY0IGliX2RlY19ieXRlczsJLyogUENfSUJfREVDUllQVCAtIEluYm91bmQgQnl0ZXMgRGVjcnlwdGVkICAgKi8KKwl1NjQgaWJfdmFsaWRfYnl0ZXM7CS8qIFBDX0lCX1ZBTElEQVRFRCBJbmJvdW5kIEJ5dGVzIFZhbGlkYXRlZCAgICovCisJdTY0IHJzdmRbMTNdOworCisJLyogQ0FBTSBIYXJkd2FyZSBJbnN0YW50aWF0aW9uIFBhcmFtZXRlcnMJCWZhMC1mYmYgKi8KKwl1NjQgY2hhX3JldjsJCS8qIENSTlIgLSBDSEEgUmV2aXNpb24gTnVtYmVyCQkqLworI2RlZmluZSBDVFBSX1FJX1NISUZUCQk1NworI2RlZmluZSBDVFBSX1FJX01BU0sJCSgweDF1bGwgPDwgQ1RQUl9RSV9TSElGVCkKKwl1NjQgY29tcF9wYXJtczsJLyogQ1RQUiAtIENvbXBpbGUgUGFyYW1ldGVycyBSZWdpc3RlcgkqLworCXU2NCByc3ZkMVsyXTsKKworCS8qIENBQU0gR2xvYmFsIFN0YXR1cwkJCQkJZmMwLWZkZiAqLworCXU2NCBmYXVsdGFkZHI7CS8qIEZBUiAgLSBGYXVsdCBBZGRyZXNzCQkqLworCXUzMiBmYXVsdGxpb2RuOwkvKiBGQUxSIC0gRmF1bHQgQWRkcmVzcyBMSU9ETgkqLworCXUzMiBmYXVsdGRldGFpbDsJLyogRkFEUiAtIEZhdWx0IEFkZHIgRGV0YWlsCSovCisJdTMyIHJzdmQyOworCXUzMiBzdGF0dXM7CQkvKiBDU1RBIC0gQ0FBTSBTdGF0dXMgKi8KKwl1NjQgcnN2ZDM7CisKKwkvKiBDb21wb25lbnQgSW5zdGFudGlhdGlvbiBQYXJhbWV0ZXJzCQkJZmUwLWZmZiAqLworCXUzMiBydGljX2lkOwkJLyogUlZJRCAtIFJUSUMgVmVyc2lvbiBJRAkqLworCXUzMiBjY2JfaWQ7CQkvKiBDQ0JWSUQgLSBDQ0IgVmVyc2lvbiBJRAkqLworCXU2NCBjaGFfaWQ7CQkvKiBDSEFWSUQgLSBDSEEgVmVyc2lvbiBJRAkqLworCXU2NCBjaGFfbnVtOwkJLyogQ0hBTlVNIC0gQ0hBIE51bWJlcgkJKi8KKwl1NjQgY2FhbV9pZDsJCS8qIENBQU1WSUQgLSBDQUFNIFZlcnNpb24gSUQJKi8KK307CisKKy8qIExJT0ROIHByb2dyYW1taW5nIGZvciBETUEgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSBNU1RSSURfTE9DS19MSU9ETgkweDgwMDAwMDAwCisjZGVmaW5lIE1TVFJJRF9MT0NLX01BS0VUUlVTVEVECTB4MDAwMTAwMDAJLyogb25seSBmb3IgSlIgbWFzdGVyaWQgKi8KKworI2RlZmluZSBNU1RSSURfTElPRE5fTUFTSwkweDBmZmYKK3N0cnVjdCBtYXN0ZXJpZCB7CisJdTMyIGxpb2RuX21zOwkvKiBsb2NrIGFuZCBtYWtlLXRydXN0ZWQgY29udHJvbCBiaXRzICovCisJdTMyIGxpb2RuX2xzOwkvKiBMSU9ETiBmb3Igbm9uLXNlcXVlbmNlIGFuZCBzZXEgYWNjZXNzICovCit9OworCisvKiBQYXJ0aXRpb24gSUQgZm9yIERNQSBjb25maWd1cmF0aW9uICovCitzdHJ1Y3QgcGFydGlkIHsKKwl1MzIgcnN2ZDE7CisJdTMyIHBpZHI7CS8qIHBhcnRpdGlvbiBJRCwgREVDTyAqLworfTsKKworLyogUk5HIHRlc3QgbW9kZSAocmVwbGljYXRlZCB0d2ljZSBpbiBzb21lIGNvbmZpZ3VyYXRpb25zKSAqLworLyogUGFkZGVkIG91dCB0byAweDEwMCAqLworc3RydWN0IHJuZ3RzdCB7CisJdTMyIG1vZGU7CQkvKiBSVFNUTU9ERXggLSBUZXN0IG1vZGUgKi8KKwl1MzIgcnN2ZDFbM107CisJdTMyIHJlc2V0OwkJLyogUlRTVFJFU0VUeCAtIFRlc3QgcmVzZXQgY29udHJvbCAqLworCXUzMiByc3ZkMlszXTsKKwl1MzIgc3RhdHVzOwkJLyogUlRTVFNTVEFUVVN4IC0gVGVzdCBzdGF0dXMgKi8KKwl1MzIgcnN2ZDM7CisJdTMyIGVycnN0YXQ7CQkvKiBSVFNURVJSU1RBVHggLSBUZXN0IGVycm9yIHN0YXR1cyAqLworCXUzMiByc3ZkNDsKKwl1MzIgZXJyY3RsOwkJLyogUlRTVEVSUkNUTHggLSBUZXN0IGVycm9yIGNvbnRyb2wgKi8KKwl1MzIgcnN2ZDU7CisJdTMyIGVudHJvcHk7CQkvKiBSVFNURU5UUk9QWXggLSBUZXN0IGVudHJvcHkgKi8KKwl1MzIgcnN2ZDZbMTVdOworCXUzMiB2ZXJpZmN0bDsJLyogUlRTVFZFUklGQ1RMeCAtIFRlc3QgdmVyaWZpY2F0aW9uIGNvbnRyb2wgKi8KKwl1MzIgcnN2ZDc7CisJdTMyIHZlcmlmc3RhdDsJLyogUlRTVFZFUklGU1RBVHggLSBUZXN0IHZlcmlmaWNhdGlvbiBzdGF0dXMgKi8KKwl1MzIgcnN2ZDg7CisJdTMyIHZlcmlmZGF0YTsJLyogUlRTVFZFUklGRHggLSBUZXN0IHZlcmlmaWNhdGlvbiBkYXRhICovCisJdTMyIHJzdmQ5OworCXUzMiB4a2V5OwkJLyogUlRTVFhLRVl4IC0gVGVzdCBYS0VZICovCisJdTMyIHJzdmQxMDsKKwl1MzIgb3NjY3RjdGw7CS8qIFJUU1RPU0NDVENUTHggLSBUZXN0IG9zYy4gY291bnRlciBjb250cm9sICovCisJdTMyIHJzdmQxMTsKKwl1MzIgb3NjY3Q7CQkvKiBSVFNUT1NDQ1R4IC0gVGVzdCBvc2NpbGxhdG9yIGNvdW50ZXIgKi8KKwl1MzIgcnN2ZDEyOworCXUzMiBvc2NjdHN0YXQ7CS8qIFJUU1RPRENDVFNUQVR4IC0gVGVzdCBvc2MgY291bnRlciBzdGF0dXMgKi8KKwl1MzIgcnN2ZDEzWzJdOworCXUzMiBvZmlmb1s0XTsJLyogUlRTVE9GSUZPeCAtIFRlc3Qgb3V0cHV0IEZJRk8gKi8KKwl1MzIgcnN2ZDE0WzE1XTsKK307CisKKy8qCisgKiBjYWFtX2N0cmwgLSBiYXNpYyBjb3JlIGNvbmZpZ3VyYXRpb24KKyAqIHN0YXJ0cyBiYXNlICsgMHgwMDAwIHBhZGRlZCBvdXQgdG8gMHgxMDAwCisgKi8KKworI2RlZmluZSBLRUtfS0VZX1NJWkUJCTgKKyNkZWZpbmUgVEtFS19LRVlfU0laRQkJOAorI2RlZmluZSBURFNLX0tFWV9TSVpFCQk4CisKKyNkZWZpbmUgREVDT19SRVNFVAkxCS8qIFVzZSB3aXRoIERFQ08gcmVzZXQvYXZhaWxhYmlsaXR5IHJlZ3MgKi8KKyNkZWZpbmUgREVDT19SRVNFVF8wCShERUNPX1JFU0VUIDw8IDApCisjZGVmaW5lIERFQ09fUkVTRVRfMQkoREVDT19SRVNFVCA8PCAxKQorI2RlZmluZSBERUNPX1JFU0VUXzIJKERFQ09fUkVTRVQgPDwgMikKKyNkZWZpbmUgREVDT19SRVNFVF8zCShERUNPX1JFU0VUIDw8IDMpCisjZGVmaW5lIERFQ09fUkVTRVRfNAkoREVDT19SRVNFVCA8PCA0KQorCitzdHJ1Y3QgY2FhbV9jdHJsIHsKKwkvKiBCYXNpYyBDb25maWd1cmF0aW9uIFNlY3Rpb24JCQkJMDAwLTAxZiAqLworCS8qIFJlYWQvV3JpdGFibGUJCQkJCSAgICAgICAgKi8KKwl1MzIgcnN2ZDE7CisJdTMyIG1jcjsJCS8qIE1DRkcgICAgICBNYXN0ZXIgQ29uZmlnIFJlZ2lzdGVyICAqLworCXUzMiByc3ZkMlsyXTsKKworCS8qIEJ1cyBBY2Nlc3MgQ29uZmlndXJhdGlvbiBTZWN0aW9uCQkJMDEwLTExZiAqLworCS8qIFJlYWQvV3JpdGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXN0cnVjdCBtYXN0ZXJpZCBqcl9taWRbNF07CS8qIEpSeExJT0ROUiAtIEpvYlIgTElPRE4gc2V0dXAgKi8KKwl1MzIgcnN2ZDNbMTJdOworCXN0cnVjdCBtYXN0ZXJpZCBydGljX21pZFs0XTsJLyogUlRJQ3hMSU9ETlIgLSBSVElDIExJT0ROIHNldHVwICovCisJdTMyIHJzdmQ0WzddOworCXUzMiBkZWNvX3JxOwkJCS8qIERFQ09SUiAtIERFQ08gUmVxdWVzdCAqLworCXN0cnVjdCBwYXJ0aWQgZGVjb19taWRbNV07CS8qIERFQ094TElPRE5SIC0gMSBwZXIgREVDTyAqLworCXUzMiByc3ZkNVsyMl07CisKKwkvKiBERUNPIEF2YWlsYWJpbGl0eS9SZXNldCBTZWN0aW9uCQkJMTIwLTNmZiAqLworCXUzMiBkZWNvX2F2YWlsOwkJLyogREFSIC0gREVDTyBhdmFpbGFiaWxpdHkgKi8KKwl1MzIgZGVjb19yZXNldDsJCS8qIERSUiAtIERFQ08gcmVzZXQgKi8KKwl1MzIgcnN2ZDZbMTgyXTsKKworCS8qIEtleSBFbmNyeXB0aW9uL0RlY3J5cHRpb24gQ29uZmlndXJhdGlvbiAgICAgICAgICAgICAgNDAwLTVmZiAqLworCS8qIFJlYWQvV3JpdGFibGUgb25seSB3aGlsZSBpbiBOb24tc2VjdXJlIG1vZGUgICAgICAgICAgICAgICAgICAqLworCXUzMiBrZWtbS0VLX0tFWV9TSVpFXTsJLyogSkRLRUtSIC0gS2V5IEVuY3J5cHRpb24gS2V5ICovCisJdTMyIHRrZWtbVEtFS19LRVlfU0laRV07CS8qIFRES0VLUiAtIFRydXN0ZWQgRGVzYyBLRUsgKi8KKwl1MzIgdGRza1tURFNLX0tFWV9TSVpFXTsJLyogVERTS1IgLSBUcnVzdGVkIERlc2MgU2lnbmluZyBLZXkgKi8KKwl1MzIgcnN2ZDdbMzJdOworCXU2NCBza25vbmNlOwkJCS8qIFNLTlIgLSBTZWN1cmUgS2V5IE5vbmNlICovCisJdTMyIHJzdmQ4WzcwXTsKKworCS8qIFJORyBUZXN0L1ZlcmlmaWNhdGlvbi9EZWJ1ZyBBY2Nlc3MgICAgICAgICAgICAgICAgICAgNjAwLTdmZiAqLworCS8qIChVc2VmdWwgaW4gVGVzdC9EZWJ1ZyBtb2RlcyBvbmx5Li4uKSAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXN0cnVjdCBybmd0c3QgcnRzdFsyXTsKKworCXUzMiByc3ZkOVs0NDhdOworCisJLyogUGVyZm9ybWFuY2UgTW9uaXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmMDAtZmZmICovCisJc3RydWN0IGNhYW1fcGVyZm1vbiBwZXJmbW9uOworfTsKKworLyoKKyAqIENvbnRyb2xsZXIgbWFzdGVyIGNvbmZpZyByZWdpc3RlciBkZWZzCisgKi8KKyNkZWZpbmUgTUNGR1JfU1dSRVNFVAkJMHg4MDAwMDAwMCAvKiBzb2Z0d2FyZSByZXNldCAqLworI2RlZmluZSBNQ0ZHUl9XREVOQUJMRQkJMHg0MDAwMDAwMCAvKiBERUNPIHdhdGNoZG9nIGVuYWJsZSAqLworI2RlZmluZSBNQ0ZHUl9XREZBSUwJCTB4MjAwMDAwMDAgLyogREVDTyB3YXRjaGRvZyBmb3JjZS1mYWlsICovCisjZGVmaW5lIE1DRkdSX0RNQV9SRVNFVAkJMHgxMDAwMDAwMAorI2RlZmluZSBNQ0ZHUl9MT05HX1BUUgkJMHgwMDAxMDAwMCAvKiBVc2UgPjMyLWJpdCBkZXNjIGFkZHJlc3NpbmcgKi8KKworLyogQVhJIHJlYWQgY2FjaGUgY29udHJvbCAqLworI2RlZmluZSBNQ0ZHUl9BUkNBQ0hFX1NISUZUCTEyCisjZGVmaW5lIE1DRkdSX0FSQ0FDSEVfTUFTSwkoMHhmIDw8IE1DRkdSX0FSQ0FDSEVfU0hJRlQpCisKKy8qIEFYSSB3cml0ZSBjYWNoZSBjb250cm9sICovCisjZGVmaW5lIE1DRkdSX0FXQ0FDSEVfU0hJRlQJOAorI2RlZmluZSBNQ0ZHUl9BV0NBQ0hFX01BU0sJKDB4ZiA8PCBNQ0ZHUl9BV0NBQ0hFX1NISUZUKQorCisvKiBBWEkgcGlwZWxpbmUgZGVwdGggKi8KKyNkZWZpbmUgTUNGR1JfQVhJUElQRV9TSElGVAk0CisjZGVmaW5lIE1DRkdSX0FYSVBJUEVfTUFTSwkoMHhmIDw8IE1DRkdSX0FYSVBJUEVfU0hJRlQpCisKKyNkZWZpbmUgTUNGR1JfQVhJUFJJCQkweDAwMDAwMDA4IC8qIEFzc2VydCBBWEkgcHJpb3JpdHkgc2lkZWJhbmQgKi8KKyNkZWZpbmUgTUNGR1JfQlVSU1RfNjQJCTB4MDAwMDAwMDEgLyogTWF4IGJ1cnN0IHNpemUgKi8KKworLyoKKyAqIGNhYW1fam9iX3JpbmcgLSBkaXJlY3Qgam9iIHJpbmcgc2V0dXAKKyAqIDEtNCBwb3NzaWJsZSBwZXIgaW5zdGFudGlhdGlvbiwgYmFzZSArIDEwMDAvMjAwMC8zMDAwLzQwMDAKKyAqIFBhZGRlZCBvdXQgdG8gMHgxMDAwCisgKi8KK3N0cnVjdCBjYWFtX2pvYl9yaW5nIHsKKwkvKiBJbnB1dCByaW5nICovCisJdTY0IGlucHJpbmdfYmFzZTsJLyogSVJCQXggLSAgSW5wdXQgZGVzYyByaW5nIGJhc2VhZGRyICovCisJdTMyIHJzdmQxOworCXUzMiBpbnByaW5nX3NpemU7CS8qIElSU3ggLSBJbnB1dCByaW5nIHNpemUgKi8KKwl1MzIgcnN2ZDI7CisJdTMyIGlucHJpbmdfYXZhaWw7CS8qIElSU0F4IC0gSW5wdXQgcmluZyByb29tIHJlbWFpbmluZyAqLworCXUzMiByc3ZkMzsKKwl1MzIgaW5wcmluZ19qb2JhZGQ7CS8qIElSSkF4IC0gSW5wdXQgcmluZyBqb2JzIGFkZGVkICovCisKKwkvKiBPdXRwdXQgUmluZyAqLworCXU2NCBvdXRyaW5nX2Jhc2U7CS8qIE9SQkF4IC0gT3V0cHV0IHN0YXR1cyByaW5nIGJhc2UgYWRkciAqLworCXUzMiByc3ZkNDsKKwl1MzIgb3V0cmluZ19zaXplOwkvKiBPUlN4IC0gT3V0cHV0IHJpbmcgc2l6ZSAqLworCXUzMiByc3ZkNTsKKwl1MzIgb3V0cmluZ19ybXZkOwkvKiBPUkpSeCAtIE91dHB1dCByaW5nIGpvYnMgcmVtb3ZlZCAqLworCXUzMiByc3ZkNjsKKwl1MzIgb3V0cmluZ191c2VkOwkvKiBPUlNGeCAtIE91dHB1dCByaW5nIHNsb3RzIGZ1bGwgKi8KKworCS8qIFN0YXR1cy9Db25maWd1cmF0aW9uICovCisJdTMyIHJzdmQ3OworCXUzMiBqcm91dHN0YXR1czsJLyogSlJTVEF4IC0gSm9iUiBvdXRwdXQgc3RhdHVzICovCisJdTMyIHJzdmQ4OworCXUzMiBqcmludHN0YXR1czsJLyogSlJJTlR4IC0gSm9iUiBpbnRlcnJ1cHQgc3RhdHVzICovCisJdTMyIHJjb25maWdfaGk7CS8qIEpSeENGRyAtIFJpbmcgY29uZmlndXJhdGlvbiAqLworCXUzMiByY29uZmlnX2xvOworCisJLyogSW5kaWNlcy4gQ0FBTSBtYWludGFpbnMgYXMgImhlYWRzIiBvZiBlYWNoIHF1ZXVlICovCisJdTMyIHJzdmQ5OworCXUzMiBpbnBfcmRpZHg7CS8qIElSUkl4IC0gSW5wdXQgcmluZyByZWFkIGluZGV4ICovCisJdTMyIHJzdmQxMDsKKwl1MzIgb3V0X3d0aWR4OwkvKiBPUldJeCAtIE91dHB1dCByaW5nIHdyaXRlIGluZGV4ICovCisKKwkvKiBDb21tYW5kL2NvbnRyb2wgKi8KKwl1MzIgcnN2ZDExOworCXUzMiBqcmNvbW1hbmQ7CS8qIEpSQ1J4IC0gSm9iUiBjb21tYW5kICovCisKKwl1MzIgcnN2ZDEyWzkzMl07CisKKwkvKiBQZXJmb3JtYW5jZSBNb25pdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYwMC1mZmYgKi8KKwlzdHJ1Y3QgY2FhbV9wZXJmbW9uIHBlcmZtb247Cit9OworCisjZGVmaW5lIEpSX1JJTkdTSVpFX01BU0sJMHgwM2ZmCisvKgorICoganJzdGF0dXMgLSBKb2IgUmluZyBPdXRwdXQgU3RhdHVzCisgKiBBbGwgdmFsdWVzIGluIGxvIHdvcmQKKyAqIEFsc28gbm90ZSwgc2FtZSB2YWx1ZXMgd3JpdHRlbiBvdXQgYXMgc3RhdHVzIHRocm91Z2ggUUkKKyAqIGluIHRoZSBjb21tYW5kL3N0YXR1cyBmaWVsZCBvZiBhIGZyYW1lIGRlc2NyaXB0b3IKKyAqLworI2RlZmluZSBKUlNUQV9TU1JDX1NISUZUICAgICAgICAgICAgMjgKKyNkZWZpbmUgSlJTVEFfU1NSQ19NQVNLICAgICAgICAgICAgIDB4ZjAwMDAwMDAKKworI2RlZmluZSBKUlNUQV9TU1JDX05PTkUgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBKUlNUQV9TU1JDX0NDQl9FUlJPUiAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBKUlNUQV9TU1JDX0pVTVBfSEFMVF9VU0VSICAgMHgzMDAwMDAwMAorI2RlZmluZSBKUlNUQV9TU1JDX0RFQ08gICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBKUlNUQV9TU1JDX0pSRVJST1IgICAgICAgICAgMHg2MDAwMDAwMAorI2RlZmluZSBKUlNUQV9TU1JDX0pVTVBfSEFMVF9DQyAgICAgMHg3MDAwMDAwMAorCisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfSlVNUCAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfSU5ERVhfU0hJRlQgICA4CisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfSU5ERVhfTUFTSyAgICAweGZmMDAKKyNkZWZpbmUgSlJTVEFfREVDT0VSUl9FUlJPUl9NQVNLICAgIDB4MDBmZgorCisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfTk9ORSAgICAgICAgICAweDAwCisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfTElOS0xFTiAgICAgICAweDAxCisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfTElOS1BUUiAgICAgICAweDAyCisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfSlJDVFJMICAgICAgICAweDAzCisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfREVTQ0NNRCAgICAgICAweDA0CisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfT1JERVIgICAgICAgICAweDA1CisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfS0VZQ01EICAgICAgICAweDA2CisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfTE9BRENNRCAgICAgICAweDA3CisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfU1RPUkVDTUQgICAgICAweDA4CisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfT1BDTUQgICAgICAgICAweDA5CisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfRklGT0xEQ01EICAgICAweDBhCisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfRklGT1NUQ01EICAgICAweDBiCisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfTU9WRUNNRCAgICAgICAweDBjCisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfSlVNUENNRCAgICAgICAweDBkCisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfTUFUSENNRCAgICAgICAweDBlCisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfU0hBU0hDTUQgICAgICAweDBmCisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfU0VRQ01EICAgICAgICAweDEwCisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfREVDT0lOVEVSTkFMICAweDExCisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfU0hERVNDSERSICAgICAweDEyCisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfSERSTEVOICAgICAgICAweDEzCisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfQlVSU1RFUiAgICAgICAweDE0CisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfREVTQ1NJR05BVFVSRSAweDE1CisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfRE1BICAgICAgICAgICAweDE2CisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfQlVSU1RGSUZPICAgICAweDE3CisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfSlJSRVNFVCAgICAgICAweDFhCisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfSk9CRkFJTCAgICAgICAweDFiCisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfRE5SRVJSICAgICAgICAweDgwCisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfVU5ERUZQQ0wgICAgICAweDgxCisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfUERCRVJSICAgICAgICAweDgyCisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfQU5SUExZX0xBVEUgICAweDgzCisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfQU5SUExZX1JFUExBWSAweDg0CisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfU0VRT1ZGICAgICAgICAweDg1CisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfSU5WU0lHTiAgICAgICAweDg2CisjZGVmaW5lIEpSU1RBX0RFQ09FUlJfRFNBU0lHTiAgICAgICAweDg3CisKKyNkZWZpbmUgSlJTVEFfQ0NCRVJSX0pVTVAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgSlJTVEFfQ0NCRVJSX0lOREVYX01BU0sgICAgIDB4ZmYwMAorI2RlZmluZSBKUlNUQV9DQ0JFUlJfSU5ERVhfU0hJRlQgICAgOAorI2RlZmluZSBKUlNUQV9DQ0JFUlJfQ0hBSURfTUFTSyAgICAgMHgwMGYwCisjZGVmaW5lIEpSU1RBX0NDQkVSUl9DSEFJRF9TSElGVCAgICA0CisjZGVmaW5lIEpSU1RBX0NDQkVSUl9FUlJJRF9NQVNLICAgICAweDAwMGYKKworI2RlZmluZSBKUlNUQV9DQ0JFUlJfQ0hBSURfQUVTICAgICAgKDB4MDEgPDwgSlJTVEFfQ0NCRVJSX0NIQUlEX1NISUZUKQorI2RlZmluZSBKUlNUQV9DQ0JFUlJfQ0hBSURfREVTICAgICAgKDB4MDIgPDwgSlJTVEFfQ0NCRVJSX0NIQUlEX1NISUZUKQorI2RlZmluZSBKUlNUQV9DQ0JFUlJfQ0hBSURfQVJDNCAgICAgKDB4MDMgPDwgSlJTVEFfQ0NCRVJSX0NIQUlEX1NISUZUKQorI2RlZmluZSBKUlNUQV9DQ0JFUlJfQ0hBSURfTUQgICAgICAgKDB4MDQgPDwgSlJTVEFfQ0NCRVJSX0NIQUlEX1NISUZUKQorI2RlZmluZSBKUlNUQV9DQ0JFUlJfQ0hBSURfUk5HICAgICAgKDB4MDUgPDwgSlJTVEFfQ0NCRVJSX0NIQUlEX1NISUZUKQorI2RlZmluZSBKUlNUQV9DQ0JFUlJfQ0hBSURfU05PVyAgICAgKDB4MDYgPDwgSlJTVEFfQ0NCRVJSX0NIQUlEX1NISUZUKQorI2RlZmluZSBKUlNUQV9DQ0JFUlJfQ0hBSURfS0FTVU1JICAgKDB4MDcgPDwgSlJTVEFfQ0NCRVJSX0NIQUlEX1NISUZUKQorI2RlZmluZSBKUlNUQV9DQ0JFUlJfQ0hBSURfUEsgICAgICAgKDB4MDggPDwgSlJTVEFfQ0NCRVJSX0NIQUlEX1NISUZUKQorI2RlZmluZSBKUlNUQV9DQ0JFUlJfQ0hBSURfQ1JDICAgICAgKDB4MDkgPDwgSlJTVEFfQ0NCRVJSX0NIQUlEX1NISUZUKQorCisjZGVmaW5lIEpSU1RBX0NDQkVSUl9FUlJJRF9OT05FICAgICAweDAwCisjZGVmaW5lIEpSU1RBX0NDQkVSUl9FUlJJRF9NT0RFICAgICAweDAxCisjZGVmaW5lIEpSU1RBX0NDQkVSUl9FUlJJRF9EQVRBU0laICAweDAyCisjZGVmaW5lIEpSU1RBX0NDQkVSUl9FUlJJRF9LRVlTSVogICAweDAzCisjZGVmaW5lIEpSU1RBX0NDQkVSUl9FUlJJRF9QS0FNRU1TWiAweDA0CisjZGVmaW5lIEpSU1RBX0NDQkVSUl9FUlJJRF9QS0JNRU1TWiAweDA1CisjZGVmaW5lIEpSU1RBX0NDQkVSUl9FUlJJRF9TRVFVRU5DRSAweDA2CisjZGVmaW5lIEpSU1RBX0NDQkVSUl9FUlJJRF9QS0RJVlpSTyAweDA3CisjZGVmaW5lIEpSU1RBX0NDQkVSUl9FUlJJRF9QS01PREVWTiAweDA4CisjZGVmaW5lIEpSU1RBX0NDQkVSUl9FUlJJRF9LRVlQQVJJVCAweDA5CisjZGVmaW5lIEpSU1RBX0NDQkVSUl9FUlJJRF9JQ1ZDSEsgICAweDBhCisjZGVmaW5lIEpSU1RBX0NDQkVSUl9FUlJJRF9IQVJEV0FSRSAweDBiCisjZGVmaW5lIEpSU1RBX0NDQkVSUl9FUlJJRF9DQ01BQUQgICAweDBjCisjZGVmaW5lIEpSU1RBX0NDQkVSUl9FUlJJRF9JTlZDSEEgICAweDBmCisKKyNkZWZpbmUgSlJJTlRfRVJSX0lOREVYX01BU0sgICAgICAgIDB4M2ZmZjAwMDAKKyNkZWZpbmUgSlJJTlRfRVJSX0lOREVYX1NISUZUICAgICAgIDE2CisjZGVmaW5lIEpSSU5UX0VSUl9UWVBFX01BU0sgICAgICAgICAweGYwMAorI2RlZmluZSBKUklOVF9FUlJfVFlQRV9TSElGVCAgICAgICAgOAorI2RlZmluZSBKUklOVF9FUlJfSEFMVF9NQVNLICAgICAgICAgMHhjCisjZGVmaW5lIEpSSU5UX0VSUl9IQUxUX1NISUZUICAgICAgICAyCisjZGVmaW5lIEpSSU5UX0VSUl9IQUxUX0lOUFJPR1JFU1MgICAweDQKKyNkZWZpbmUgSlJJTlRfRVJSX0hBTFRfQ09NUExFVEUgICAgIDB4OAorI2RlZmluZSBKUklOVF9KUl9FUlJPUiAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBKUklOVF9KUl9JTlQgICAgICAgICAgICAgICAgMHgwMQorCisjZGVmaW5lIEpSSU5UX0VSUl9UWVBFX1dSSVRFICAgICAgICAxCisjZGVmaW5lIEpSSU5UX0VSUl9UWVBFX0JBRF9JTlBBRERSICAzCisjZGVmaW5lIEpSSU5UX0VSUl9UWVBFX0JBRF9PVVRBRERSICA0CisjZGVmaW5lIEpSSU5UX0VSUl9UWVBFX0lOVl9JTlBXUlQgICA1CisjZGVmaW5lIEpSSU5UX0VSUl9UWVBFX0lOVl9PVVRXUlQgICA2CisjZGVmaW5lIEpSSU5UX0VSUl9UWVBFX1JFU0VUICAgICAgICA3CisjZGVmaW5lIEpSSU5UX0VSUl9UWVBFX1JFTU9WRV9PRkwgICA4CisjZGVmaW5lIEpSSU5UX0VSUl9UWVBFX0FERF9PRkwgICAgICA5CisKKyNkZWZpbmUgSlJDRkdfU09FCQkweDA0CisjZGVmaW5lIEpSQ0ZHX0lDRU4JCTB4MDIKKyNkZWZpbmUgSlJDRkdfSU1TSwkJMHgwMQorI2RlZmluZSBKUkNGR19JQ0RDVF9TSElGVAk4CisjZGVmaW5lIEpSQ0ZHX0lDVFRfU0hJRlQJMTYKKworI2RlZmluZSBKUkNSX1JFU0VUICAgICAgICAgICAgICAgICAgMHgwMQorCisvKgorICogY2FhbV9hc3N1cmFuY2UgLSBBc3N1cmFuY2UgQ29udHJvbGxlciBWaWV3CisgKiBiYXNlICsgMHg2MDAwIHBhZGRlZCBvdXQgdG8gMHgxMDAwCisgKi8KKworc3RydWN0IHJ0aWNfZWxlbWVudCB7CisJdTY0IGFkZHJlc3M7CisJdTMyIHJzdmQ7CisJdTMyIGxlbmd0aDsKK307CisKK3N0cnVjdCBydGljX2Jsb2NrIHsKKwlzdHJ1Y3QgcnRpY19lbGVtZW50IGVsZW1lbnRbMl07Cit9OworCitzdHJ1Y3QgcnRpY19tZW1oYXNoIHsKKwl1MzIgbWVtaGFzaF9iZVszMl07CisJdTMyIG1lbWhhc2hfbGVbMzJdOworfTsKKworc3RydWN0IGNhYW1fYXNzdXJhbmNlIHsKKyAgICAvKiBTdGF0dXMvQ29tbWFuZC9XYXRjaGRvZyAqLworCXUzMiByc3ZkMTsKKwl1MzIgc3RhdHVzOwkJLyogUlNUQSAtIFN0YXR1cyAqLworCXUzMiByc3ZkMjsKKwl1MzIgY21kOwkJLyogUkNNRCAtIENvbW1hbmQgKi8KKwl1MzIgcnN2ZDM7CisJdTMyIGN0cmw7CQkvKiBSQ1RMIC0gQ29udHJvbCAqLworCXUzMiByc3ZkNDsKKwl1MzIgdGhyb3R0bGU7CS8qIFJUSFIgLSBUaHJvdHRsZSAqLworCXUzMiByc3ZkNVsyXTsKKwl1NjQgd2F0Y2hkb2c7CS8qIFJXRE9HIC0gV2F0Y2hkb2cgVGltZXIgKi8KKwl1MzIgcnN2ZDY7CisJdTMyIHJlbmQ7CQkvKiBSRU5EIC0gRW5kaWFuIGNvcnJlY3Rpb25zICovCisJdTMyIHJzdmQ3WzUwXTsKKworCS8qIEJsb2NrIGFjY2Vzcy9jb25maWd1cmF0aW9uIEAgMTAwLzExMC8xMjAvMTMwICovCisJc3RydWN0IHJ0aWNfYmxvY2sgbWVtYmxrWzRdOwkvKiBNZW1vcnkgQmxvY2tzIEEtRCAqLworCXUzMiByc3ZkOFszMl07CisKKwkvKiBCbG9jayBoYXNoZXMgQCAyMDAvMzAwLzQwMC81MDAgKi8KKwlzdHJ1Y3QgcnRpY19tZW1oYXNoIGhhc2hbNF07CS8qIEJsb2NrIGhhc2ggdmFsdWVzIEEtRCAqLworCXUzMiByc3ZkXzNbNjQwXTsKK307CisKKy8qCisgKiBjYWFtX3F1ZXVlX2lmIC0gUUkgY29uZmlndXJhdGlvbiBhbmQgY29udHJvbAorICogc3RhcnRzIGJhc2UgKyAweDcwMDAsIHBhZGRlZCBvdXQgdG8gMHgxMDAwIGxvbmcKKyAqLworCitzdHJ1Y3QgY2FhbV9xdWV1ZV9pZiB7CisJdTMyIHFpX2NvbnRyb2xfaGk7CS8qIFFJQ1RMICAtIFFJIENvbnRyb2wgKi8KKwl1MzIgcWlfY29udHJvbF9sbzsKKwl1MzIgcnN2ZDE7CisJdTMyIHFpX3N0YXR1czsJLyogUUlTVEEgIC0gUUkgU3RhdHVzICovCisJdTMyIHFpX2RlcV9jZmdfaGk7CS8qIFFJRFFDICAtIFFJIERlcXVldWUgQ29uZmlndXJhdGlvbiAqLworCXUzMiBxaV9kZXFfY2ZnX2xvOworCXUzMiBxaV9lbnFfY2ZnX2hpOwkvKiBRSVNFUUMgLSBRSSBFbnF1ZXVlIENvbW1hbmQgICAgICovCisJdTMyIHFpX2VucV9jZmdfbG87CisJdTMyIHJzdmQyWzEwMTZdOworfTsKKworLyogUUkgY29udHJvbCBiaXRzIC0gbG93IHdvcmQgKi8KKyNkZWZpbmUgUUlDVExfRFFFTiAgICAgIDB4MDEgICAgICAgICAgICAgIC8qIEVuYWJsZSBmcmFtZSBwb3AgICAgICAgICAgKi8KKyNkZWZpbmUgUUlDVExfU1RPUCAgICAgIDB4MDIgICAgICAgICAgICAgIC8qIFN0b3AgZGVxdWV1ZS9lbnF1ZXVlICAgICAgKi8KKyNkZWZpbmUgUUlDVExfU09FICAgICAgIDB4MDQgICAgICAgICAgICAgIC8qIFN0b3Agb24gZXJyb3IgICAgICAgICAgICAgKi8KKworLyogUUkgY29udHJvbCBiaXRzIC0gaGlnaCB3b3JkICovCisjZGVmaW5lIFFJQ1RMX01CU0kJMHgwMQorI2RlZmluZSBRSUNUTF9NSFdTSQkweDAyCisjZGVmaW5lIFFJQ1RMX01XU0kJMHgwNAorI2RlZmluZSBRSUNUTF9NRFdTSQkweDA4CisjZGVmaW5lIFFJQ1RMX0NCU0kJMHgxMAkJLyogQ3RybERhdGFCeXRlU3dhcElucHV0ICAgICAqLworI2RlZmluZSBRSUNUTF9DSFdTSQkweDIwCQkvKiBDdHJsRGF0YUhhbGZTd2FwSW5wdXQgICAgICovCisjZGVmaW5lIFFJQ1RMX0NXU0kJMHg0MAkJLyogQ3RybERhdGFXb3JkU3dhcElucHV0ICAgICAqLworI2RlZmluZSBRSUNUTF9DRFdTSQkweDgwCQkvKiBDdHJsRGF0YURXb3JkU3dhcElucHV0ICAgICovCisjZGVmaW5lIFFJQ1RMX01CU08JMHgwMTAwCisjZGVmaW5lIFFJQ1RMX01IV1NPCTB4MDIwMAorI2RlZmluZSBRSUNUTF9NV1NPCTB4MDQwMAorI2RlZmluZSBRSUNUTF9NRFdTTwkweDA4MDAKKyNkZWZpbmUgUUlDVExfQ0JTTwkweDEwMDAJCS8qIEN0cmxEYXRhQnl0ZVN3YXBPdXRwdXQgICAgKi8KKyNkZWZpbmUgUUlDVExfQ0hXU08JMHgyMDAwCQkvKiBDdHJsRGF0YUhhbGZTd2FwT3V0cHV0ICAgICovCisjZGVmaW5lIFFJQ1RMX0NXU08JMHg0MDAwCQkvKiBDdHJsRGF0YVdvcmRTd2FwT3V0cHV0ICAgICovCisjZGVmaW5lIFFJQ1RMX0NEV1NPICAgICAweDgwMDAJCS8qIEN0cmxEYXRhRFdvcmRTd2FwT3V0cHV0ICAgKi8KKyNkZWZpbmUgUUlDVExfRE1CUwkweDAxMDAwMAorI2RlZmluZSBRSUNUTF9FUE8JMHgwMjAwMDAKKworLyogUUkgc3RhdHVzIGJpdHMgKi8KKyNkZWZpbmUgUUlTVEFfUEhSREVSUiAgIDB4MDEgICAgICAgICAgICAgIC8qIFByZUhlYWRlciBSZWFkIEVycm9yICAgICAgKi8KKyNkZWZpbmUgUUlTVEFfQ0ZSREVSUiAgIDB4MDIgICAgICAgICAgICAgIC8qIENvbXBvdW5kIEZyYW1lIFJlYWQgRXJyb3IgKi8KKyNkZWZpbmUgUUlTVEFfT0ZXUkVSUiAgIDB4MDQgICAgICAgICAgICAgIC8qIE91dHB1dCBGcmFtZSBSZWFkIEVycm9yICAgKi8KKyNkZWZpbmUgUUlTVEFfQlBERVJSICAgIDB4MDggICAgICAgICAgICAgIC8qIEJ1ZmZlciBQb29sIERlcGxldGVkICAgICAgKi8KKyNkZWZpbmUgUUlTVEFfQlRTRVJSICAgIDB4MTAgICAgICAgICAgICAgIC8qIEJ1ZmZlciBVbmRlcnNpemUgICAgICAgICAgKi8KKyNkZWZpbmUgUUlTVEFfQ0ZXUkVSUiAgIDB4MjAgICAgICAgICAgICAgIC8qIENvbXBvdW5kIEZyYW1lIFdyaXRlIEVyciAgKi8KKyNkZWZpbmUgUUlTVEFfU1RPUEQgICAgIDB4ODAwMDAwMDAgICAgICAgIC8qIFFJIFN0b3BwZWQgKHNlZSBRSUNUTCkgICAgKi8KKworLyogZGVjb19zZ190YWJsZSAtIERFQ08gdmlldyBvZiBzY2F0dGVyL2dhdGhlciB0YWJsZSAqLworc3RydWN0IGRlY29fc2dfdGFibGUgeworCXU2NCBhZGRyOwkJLyogU2VnbWVudCBBZGRyZXNzICovCisJdTMyIGVsZW47CQkvKiBFLCBGIGJpdHMgKyAzMC1iaXQgbGVuZ3RoICovCisJdTMyIGJwaWRfb2Zmc2V0OwkvKiBCdWZmZXIgUG9vbCBJRCArIDE2LWJpdCBsZW5ndGggKi8KK307CisKKy8qCisgKiBjYWFtX2RlY28gLSBkZXNjcmlwdG9yIGNvbnRyb2xsZXIgLSBDSEEgY2x1c3RlciBibG9jaworICoKKyAqIE9ubHkgYWNjZXNzaWJsZSB3aGVuIGRpcmVjdCBERUNPIGFjY2VzcyBpcyB0dXJuZWQgb24KKyAqIChkb25lIGluIERFQ09SUiwgdmlhIE1JRCBwcm9ncmFtbWVkIGluIERFQ094TUlECisgKgorICogNSB0eXBpY2FsLCBiYXNlICsgMHg4MDAwLzkwMDAvYTAwMC9iMDAwCisgKiBQYWRkZWQgb3V0IHRvIDB4MTAwMCBsb25nCisgKi8KK3N0cnVjdCBjYWFtX2RlY28geworCXUzMiByc3ZkMTsKKwl1MzIgY2xzMV9tb2RlOwkvKiBDeEMxTVIgLSAgQ2xhc3MgMSBNb2RlICovCisJdTMyIHJzdmQyOworCXUzMiBjbHMxX2tleXNpemU7CS8qIEN4QzFLU1IgLSBDbGFzcyAxIEtleSBTaXplICovCisJdTMyIGNsczFfZGF0YXNpemVfaGk7CS8qIEN4QzFEU1IgLSBDbGFzcyAxIERhdGEgU2l6ZSAqLworCXUzMiBjbHMxX2RhdGFzaXplX2xvOworCXUzMiByc3ZkMzsKKwl1MzIgY2xzMV9pY3ZzaXplOwkvKiBDeEMxSUNWU1IgLSBDbGFzcyAxIElDViBzaXplICovCisJdTMyIHJzdmQ0WzVdOworCXUzMiBjaGFfY3RybDsJLyogQ0NUTFIgLSBDSEEgY29udHJvbCAqLworCXUzMiByc3ZkNTsKKwl1MzIgaXJxX2NydGw7CS8qIEN4Q0lSUSAtIENDQiBpbnRlcnJ1cHQgZG9uZS9lcnJvci9jbGVhciAqLworCXUzMiByc3ZkNjsKKwl1MzIgY2xyX3dyaXR0ZW47CS8qIEN4Q1dSIC0gQ2xlYXItV3JpdHRlbiAqLworCXUzMiBjY2Jfc3RhdHVzX2hpOwkvKiBDeENTVEEgLSBDQ0IgU3RhdHVzL0Vycm9yICovCisJdTMyIGNjYl9zdGF0dXNfbG87CisJdTMyIHJzdmQ3WzNdOworCXUzMiBhYWRfc2l6ZTsJLyogQ3hBQURTWlIgLSBDdXJyZW50IEFBRCBTaXplICovCisJdTMyIHJzdmQ4OworCXUzMiBjbHMxX2l2X3NpemU7CS8qIEN4QzFJVlNaUiAtIEN1cnJlbnQgQ2xhc3MgMSBJViBTaXplICovCisJdTMyIHJzdmQ5WzddOworCXUzMiBwa2hhX2Ffc2l6ZTsJLyogUEtBU1pSeCAtIFNpemUgb2YgUEtIQSBBICovCisJdTMyIHJzdmQxMDsKKwl1MzIgcGtoYV9iX3NpemU7CS8qIFBLQlNaUnggLSBTaXplIG9mIFBLSEEgQiAqLworCXUzMiByc3ZkMTE7CisJdTMyIHBraGFfbl9zaXplOwkvKiBQS05TWlJ4IC0gU2l6ZSBvZiBQS0hBIE4gKi8KKwl1MzIgcnN2ZDEyOworCXUzMiBwa2hhX2Vfc2l6ZTsJLyogUEtFU1pSeCAtIFNpemUgb2YgUEtIQSBFICovCisJdTMyIHJzdmQxM1syNF07CisJdTMyIGNsczFfY3R4WzE2XTsJLyogQ3hDMUNUWFIgLSBDbGFzcyAxIENvbnRleHQgQDEwMCAqLworCXUzMiByc3ZkMTRbNDhdOworCXUzMiBjbHMxX2tleVs4XTsJLyogQ3hDMUtFWVIgLSBDbGFzcyAxIEtleSBAMjAwICovCisJdTMyIHJzdmQxNVsxMjFdOworCXUzMiBjbHMyX21vZGU7CS8qIEN4QzJNUiAtIENsYXNzIDIgTW9kZSAqLworCXUzMiByc3ZkMTY7CisJdTMyIGNsczJfa2V5c2l6ZTsJLyogQ3hYMktTUiAtIENsYXNzIDIgS2V5IFNpemUgKi8KKwl1MzIgY2xzMl9kYXRhc2l6ZV9oaTsJLyogQ3hDMkRTUiAtIENsYXNzIDIgRGF0YSBTaXplICovCisJdTMyIGNsczJfZGF0YXNpemVfbG87CisJdTMyIHJzdmQxNzsKKwl1MzIgY2xzMl9pY3ZzaXplOwkvKiBDeEMySUNWU1pSIC0gQ2xhc3MgMiBJQ1YgU2l6ZSAqLworCXUzMiByc3ZkMThbNTZdOworCXUzMiBjbHMyX2N0eFsxOF07CS8qIEN4QzJDVFhSIC0gQ2xhc3MgMiBDb250ZXh0IEA1MDAgKi8KKwl1MzIgcnN2ZDE5WzQ2XTsKKwl1MzIgY2xzMl9rZXlbMzJdOwkvKiBDeEMyS0VZUiAtIENsYXNzMiBLZXkgQDYwMCAqLworCXUzMiByc3ZkMjBbODRdOworCXUzMiBpbnBfaW5mb2ZpZm9faGk7CS8qIEN4SUZJRk8gLSBJbnB1dCBJbmZvIEZJRk8gQDdkMCAqLworCXUzMiBpbnBfaW5mb2ZpZm9fbG87CisJdTMyIHJzdmQyMVsyXTsKKwl1NjQgaW5wX2RhdGFmaWZvOwkvKiBDeERGSUZPIC0gSW5wdXQgRGF0YSBGSUZPICovCisJdTMyIHJzdmQyMlsyXTsKKwl1NjQgb3V0X2RhdGFmaWZvOwkvKiBDeE9GSUZPIC0gT3V0cHV0IERhdGEgRklGTyAqLworCXUzMiByc3ZkMjNbMl07CisJdTMyIGpyX2N0bF9oaTsJLyogQ3hKUlIgLSBKb2JSIENvbnRyb2wgUmVnaXN0ZXIgICAgICBAODAwICovCisJdTMyIGpyX2N0bF9sbzsKKwl1NjQganJfZGVzY2FkZHI7CS8qIEN4REFEUiAtIEpvYlIgRGVzY3JpcHRvciBBZGRyZXNzICovCisJdTMyIG9wX3N0YXR1c19oaTsJLyogRHhPUFNUQSAtIERFQ08gT3BlcmF0aW9uIFN0YXR1cyAqLworCXUzMiBvcF9zdGF0dXNfbG87CisJdTMyIHJzdmQyNFsyXTsKKwl1MzIgbGlvZG47CQkvKiBEeExTUiAtIERFQ08gTElPRE4gU3RhdHVzIC0gbm9uLXNlcSAqLworCXUzMiB0ZF9saW9kbjsJLyogRHhMU1IgLSBERUNPIExJT0ROIFN0YXR1cyAtIHRydXN0ZGVzYyAqLworCXUzMiByc3ZkMjZbNl07CisJdTY0IG1hdGhbNF07CQkvKiBEeE1USCAtIE1hdGggcmVnaXN0ZXIgKi8KKwl1MzIgcnN2ZDI3WzhdOworCXN0cnVjdCBkZWNvX3NnX3RhYmxlIGd0aHJfdGJsWzRdOwkvKiBEeEdUUiAtIEdhdGhlciBUYWJsZXMgKi8KKwl1MzIgcnN2ZDI4WzE2XTsKKwlzdHJ1Y3QgZGVjb19zZ190YWJsZSBzY3RyX3RibFs0XTsJLyogRHhTVFIgLSBTY2F0dGVyIFRhYmxlcyAqLworCXUzMiByc3ZkMjlbNDhdOworCXUzMiBkZXNjYnVmWzY0XTsJLyogRHhERVNCIC0gRGVzY3JpcHRvciBidWZmZXIgKi8KKwl1MzIgcnN2ZDMwWzMyMF07Cit9OworCisvKgorICogQ3VycmVudCB0b3AtbGV2ZWwgdmlldyBvZiBtZW1vcnkgbWFwIGlzOgorICoKKyAqIDB4MDAwMCAtIDB4MGZmZiAtIENBQU0gVG9wLUxldmVsIENvbnRyb2wKKyAqIDB4MTAwMCAtIDB4MWZmZiAtIEpvYiBSaW5nIDAKKyAqIDB4MjAwMCAtIDB4MmZmZiAtIEpvYiBSaW5nIDEKKyAqIDB4MzAwMCAtIDB4M2ZmZiAtIEpvYiBSaW5nIDIKKyAqIDB4NDAwMCAtIDB4NGZmZiAtIEpvYiBSaW5nIDMKKyAqIDB4NTAwMCAtIDB4NWZmZiAtICh1bnVzZWQpCisgKiAweDYwMDAgLSAweDZmZmYgLSBBc3N1cmFuY2UgQ29udHJvbGxlcgorICogMHg3MDAwIC0gMHg3ZmZmIC0gUXVldWUgSW50ZXJmYWNlCisgKiAweDgwMDAgLSAweDhmZmYgLSBERUNPLUNDQiAwCisgKiAweDkwMDAgLSAweDlmZmYgLSBERUNPLUNDQiAxCisgKiAweGEwMDAgLSAweGFmZmYgLSBERUNPLUNDQiAyCisgKiAweGIwMDAgLSAweGJmZmYgLSBERUNPLUNDQiAzCisgKiAweGMwMDAgLSAweGNmZmYgLSBERUNPLUNDQiA0CisgKgorICogY2FhbV9mdWxsIGRlc2NyaWJlcyB0aGUgZnVsbCByZWdpc3RlciB2aWV3IG9mIENBQU0gaWYgdXNlZnVsLAorICogYWx0aG91Z2ggbWFueSBjb25maWd1cmF0aW9ucyBtYXkgY2hvb3NlIHRvIGltcGxlbWVudCBwYXJ0cyBvZgorICogdGhlIHJlZ2lzdGVyIG1hcCBzZXBhcmF0ZWx5LCBpbiBkaWZmZXJpbmcgcHJpdmlsZWdlIHJlZ2lvbnMKKyAqLworc3RydWN0IGNhYW1fZnVsbCB7CisJc3RydWN0IGNhYW1fY3RybCBfX2lvbWVtIGN0cmw7CisJc3RydWN0IGNhYW1fam9iX3JpbmcganJbNF07CisJdTY0IHJzdmRbNTEyXTsKKwlzdHJ1Y3QgY2FhbV9hc3N1cmFuY2UgYXNzdXJlOworCXN0cnVjdCBjYWFtX3F1ZXVlX2lmIHFpOworCXN0cnVjdCBjYWFtX2RlY28gKmRlY287Cit9OworCisjZW5kaWYgLyogUkVHU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9tdl9jZXNhLmMgYi9kcml2ZXJzL2NyeXB0by9tdl9jZXNhLmMKaW5kZXggYzk5MzA1YS4uM2NmMzAzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vbXZfY2VzYS5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL212X2Nlc2EuYwpAQCAtMTMzLDcgKzEzMyw2IEBACiAJaW50IGV4dHJhX2J5dGVzOwkvKiB1bnByb2Nlc3NlZCBieXRlcyBpbiBidWZmZXIgKi8KIAllbnVtIGhhc2hfb3Agb3A7CiAJaW50IGNvdW50X2FkZDsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgZHVtbXlzZzsKIH07CiAKIHN0YXRpYyB2b2lkIGNvbXB1dGVfYWVzX2RlY19rZXkoc3RydWN0IG12X2N0eCAqY3R4KQpAQCAtMTg3LDkgKzE4Niw5IEBACiB7CiAJaW50IHJldDsKIAl2b2lkICpzYnVmOwotCWludCBjb3BpZWQgPSAwOworCWludCBjb3B5X2xlbjsKIAotCXdoaWxlICgxKSB7CisJd2hpbGUgKGxlbikgewogCQlpZiAoIXAtPnNnX3NyY19sZWZ0KSB7CiAJCQlyZXQgPSBzZ19taXRlcl9uZXh0KCZwLT5zcmNfc2dfaXQpOwogCQkJQlVHX09OKCFyZXQpOwpAQCAtMTk5LDE5ICsxOTgsMTQgQEAKIAogCQlzYnVmID0gcC0+c3JjX3NnX2l0LmFkZHIgKyBwLT5zcmNfc3RhcnQ7CiAKLQkJaWYgKHAtPnNnX3NyY19sZWZ0IDw9IGxlbiAtIGNvcGllZCkgewotCQkJbWVtY3B5KGRidWYgKyBjb3BpZWQsIHNidWYsIHAtPnNnX3NyY19sZWZ0KTsKLQkJCWNvcGllZCArPSBwLT5zZ19zcmNfbGVmdDsKLQkJCXAtPnNnX3NyY19sZWZ0ID0gMDsKLQkJCWlmIChjb3BpZWQgPj0gbGVuKQotCQkJCWJyZWFrOwotCQl9IGVsc2UgewotCQkJaW50IGNvcHlfbGVuID0gbGVuIC0gY29waWVkOwotCQkJbWVtY3B5KGRidWYgKyBjb3BpZWQsIHNidWYsIGNvcHlfbGVuKTsKLQkJCXAtPnNyY19zdGFydCArPSBjb3B5X2xlbjsKLQkJCXAtPnNnX3NyY19sZWZ0IC09IGNvcHlfbGVuOwotCQkJYnJlYWs7Ci0JCX0KKwkJY29weV9sZW4gPSBtaW4ocC0+c2dfc3JjX2xlZnQsIGxlbik7CisJCW1lbWNweShkYnVmLCBzYnVmLCBjb3B5X2xlbik7CisKKwkJcC0+c3JjX3N0YXJ0ICs9IGNvcHlfbGVuOworCQlwLT5zZ19zcmNfbGVmdCAtPSBjb3B5X2xlbjsKKworCQlsZW4gLT0gY29weV9sZW47CisJCWRidWYgKz0gY29weV9sZW47CiAJfQogfQogCkBAIC0yNzUsNyArMjY5LDYgQEAKIAltZW1jcHkoY3BnLT5zcmFtICsgU1JBTV9DT05GSUcsICZvcCwKIAkJCXNpemVvZihzdHJ1Y3Qgc2VjX2FjY2VsX2NvbmZpZykpOwogCi0Jd3JpdGVsKFNSQU1fQ09ORklHLCBjcGctPnJlZyArIFNFQ19BQ0NFTF9ERVNDX1AwKTsKIAkvKiBHTyAqLwogCXdyaXRlbChTRUNfQ01EX0VOX1NFQ19BQ0NMMCwgY3BnLT5yZWcgKyBTRUNfQUNDRUxfQ01EKTsKIApAQCAtMzAyLDYgKzI5NSw3IEBACiBzdGF0aWMgdm9pZCBtdl9wcm9jZXNzX2hhc2hfY3VycmVudChpbnQgZmlyc3RfYmxvY2spCiB7CiAJc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSA9IGFoYXNoX3JlcXVlc3RfY2FzdChjcGctPmN1cl9yZXEpOworCWNvbnN0IHN0cnVjdCBtdl90Zm1faGFzaF9jdHggKnRmbV9jdHggPSBjcnlwdG9fdGZtX2N0eChyZXEtPmJhc2UudGZtKTsKIAlzdHJ1Y3QgbXZfcmVxX2hhc2hfY3R4ICpyZXFfY3R4ID0gYWhhc2hfcmVxdWVzdF9jdHgocmVxKTsKIAlzdHJ1Y3QgcmVxX3Byb2dyZXNzICpwID0gJmNwZy0+cDsKIAlzdHJ1Y3Qgc2VjX2FjY2VsX2NvbmZpZyBvcCA9IHsgMCB9OwpAQCAtMzE0LDYgKzMwOCw4IEBACiAJCWJyZWFrOwogCWNhc2UgQ09QX0hNQUNfU0hBMToKIAkJb3AuY29uZmlnID0gQ0ZHX09QX01BQ19PTkxZIHwgQ0ZHX01BQ01fSE1BQ19TSEExOworCQltZW1jcHkoY3BnLT5zcmFtICsgU1JBTV9ITUFDX0lWX0lOLAorCQkJCXRmbV9jdHgtPml2cywgc2l6ZW9mKHRmbV9jdHgtPml2cykpOwogCQlicmVhazsKIAl9CiAKQEAgLTM0NSwxMSArMzQxLDE2IEBACiAJCQlvcC5jb25maWcgfD0gQ0ZHX0xBU1RfRlJBRzsKIAkJZWxzZQogCQkJb3AuY29uZmlnIHw9IENGR19NSURfRlJBRzsKKworCQl3cml0ZWwocmVxX2N0eC0+c3RhdGVbMF0sIGNwZy0+cmVnICsgRElHRVNUX0lOSVRJQUxfVkFMX0EpOworCQl3cml0ZWwocmVxX2N0eC0+c3RhdGVbMV0sIGNwZy0+cmVnICsgRElHRVNUX0lOSVRJQUxfVkFMX0IpOworCQl3cml0ZWwocmVxX2N0eC0+c3RhdGVbMl0sIGNwZy0+cmVnICsgRElHRVNUX0lOSVRJQUxfVkFMX0MpOworCQl3cml0ZWwocmVxX2N0eC0+c3RhdGVbM10sIGNwZy0+cmVnICsgRElHRVNUX0lOSVRJQUxfVkFMX0QpOworCQl3cml0ZWwocmVxX2N0eC0+c3RhdGVbNF0sIGNwZy0+cmVnICsgRElHRVNUX0lOSVRJQUxfVkFMX0UpOwogCX0KIAogCW1lbWNweShjcGctPnNyYW0gKyBTUkFNX0NPTkZJRywgJm9wLCBzaXplb2Yoc3RydWN0IHNlY19hY2NlbF9jb25maWcpKTsKIAotCXdyaXRlbChTUkFNX0NPTkZJRywgY3BnLT5yZWcgKyBTRUNfQUNDRUxfREVTQ19QMCk7CiAJLyogR08gKi8KIAl3cml0ZWwoU0VDX0NNRF9FTl9TRUNfQUNDTDAsIGNwZy0+cmVnICsgU0VDX0FDQ0VMX0NNRCk7CiAKQEAgLTQwOSwxMiArNDEwLDYgQEAKIAkJY29weV9zcmNfdG9fYnVmKCZjcGctPnAsIGN0eC0+YnVmZmVyLCBjdHgtPmV4dHJhX2J5dGVzKTsKIAlzZ19taXRlcl9zdG9wKCZjcGctPnAuc3JjX3NnX2l0KTsKIAotCWN0eC0+c3RhdGVbMF0gPSByZWFkbChjcGctPnJlZyArIERJR0VTVF9JTklUSUFMX1ZBTF9BKTsKLQljdHgtPnN0YXRlWzFdID0gcmVhZGwoY3BnLT5yZWcgKyBESUdFU1RfSU5JVElBTF9WQUxfQik7Ci0JY3R4LT5zdGF0ZVsyXSA9IHJlYWRsKGNwZy0+cmVnICsgRElHRVNUX0lOSVRJQUxfVkFMX0MpOwotCWN0eC0+c3RhdGVbM10gPSByZWFkbChjcGctPnJlZyArIERJR0VTVF9JTklUSUFMX1ZBTF9EKTsKLQljdHgtPnN0YXRlWzRdID0gcmVhZGwoY3BnLT5yZWcgKyBESUdFU1RfSU5JVElBTF9WQUxfRSk7Ci0KIAlpZiAobGlrZWx5KGN0eC0+bGFzdF9jaHVuaykpIHsKIAkJaWYgKGxpa2VseShjdHgtPmNvdW50IDw9IE1BWF9IV19IQVNIX1NJWkUpKSB7CiAJCQltZW1jcHkocmVxLT5yZXN1bHQsIGNwZy0+c3JhbSArIFNSQU1fRElHRVNUX0JVRiwKQEAgLTQyMiw2ICs0MTcsMTIgQEAKIAkJCQkJCSAgICAgICAocmVxKSkpOwogCQl9IGVsc2UKIAkJCW12X2hhc2hfZmluYWxfZmFsbGJhY2socmVxKTsKKwl9IGVsc2UgeworCQljdHgtPnN0YXRlWzBdID0gcmVhZGwoY3BnLT5yZWcgKyBESUdFU1RfSU5JVElBTF9WQUxfQSk7CisJCWN0eC0+c3RhdGVbMV0gPSByZWFkbChjcGctPnJlZyArIERJR0VTVF9JTklUSUFMX1ZBTF9CKTsKKwkJY3R4LT5zdGF0ZVsyXSA9IHJlYWRsKGNwZy0+cmVnICsgRElHRVNUX0lOSVRJQUxfVkFMX0MpOworCQljdHgtPnN0YXRlWzNdID0gcmVhZGwoY3BnLT5yZWcgKyBESUdFU1RfSU5JVElBTF9WQUxfRCk7CisJCWN0eC0+c3RhdGVbNF0gPSByZWFkbChjcGctPnJlZyArIERJR0VTVF9JTklUSUFMX1ZBTF9FKTsKIAl9CiB9CiAKQEAgLTQ4MCw3ICs0ODEsNyBAQAogCWludCBpID0gMDsKIAlzaXplX3QgY3VyX2xlbjsKIAotCXdoaWxlICgxKSB7CisJd2hpbGUgKHNsKSB7CiAJCWN1cl9sZW4gPSBzbFtpXS5sZW5ndGg7CiAJCSsraTsKIAkJaWYgKHRvdGFsX2J5dGVzID4gY3VyX2xlbikKQEAgLTUxNywyOSArNTE4LDEyIEBACiB7CiAJc3RydWN0IHJlcV9wcm9ncmVzcyAqcCA9ICZjcGctPnA7CiAJc3RydWN0IG12X3JlcV9oYXNoX2N0eCAqY3R4ID0gYWhhc2hfcmVxdWVzdF9jdHgocmVxKTsKLQljb25zdCBzdHJ1Y3QgbXZfdGZtX2hhc2hfY3R4ICp0Zm1fY3R4ID0gY3J5cHRvX3RmbV9jdHgocmVxLT5iYXNlLnRmbSk7CiAJaW50IG51bV9zZ3MsIGh3X2J5dGVzLCBvbGRfZXh0cmFfYnl0ZXMsIHJjOwogCWNwZy0+Y3VyX3JlcSA9ICZyZXEtPmJhc2U7CiAJbWVtc2V0KHAsIDAsIHNpemVvZihzdHJ1Y3QgcmVxX3Byb2dyZXNzKSk7CiAJaHdfYnl0ZXMgPSByZXEtPm5ieXRlcyArIGN0eC0+ZXh0cmFfYnl0ZXM7CiAJb2xkX2V4dHJhX2J5dGVzID0gY3R4LT5leHRyYV9ieXRlczsKIAotCWlmICh1bmxpa2VseShjdHgtPmV4dHJhX2J5dGVzKSkgewotCQltZW1jcHkoY3BnLT5zcmFtICsgU1JBTV9EQVRBX0lOX1NUQVJULCBjdHgtPmJ1ZmZlciwKLQkJICAgICAgIGN0eC0+ZXh0cmFfYnl0ZXMpOwotCQlwLT5jcnlwdF9sZW4gPSBjdHgtPmV4dHJhX2J5dGVzOwotCX0KLQotCW1lbWNweShjcGctPnNyYW0gKyBTUkFNX0hNQUNfSVZfSU4sIHRmbV9jdHgtPml2cywgc2l6ZW9mKHRmbV9jdHgtPml2cykpOwotCi0JaWYgKHVubGlrZWx5KCFjdHgtPmZpcnN0X2hhc2gpKSB7Ci0JCXdyaXRlbChjdHgtPnN0YXRlWzBdLCBjcGctPnJlZyArIERJR0VTVF9JTklUSUFMX1ZBTF9BKTsKLQkJd3JpdGVsKGN0eC0+c3RhdGVbMV0sIGNwZy0+cmVnICsgRElHRVNUX0lOSVRJQUxfVkFMX0IpOwotCQl3cml0ZWwoY3R4LT5zdGF0ZVsyXSwgY3BnLT5yZWcgKyBESUdFU1RfSU5JVElBTF9WQUxfQyk7Ci0JCXdyaXRlbChjdHgtPnN0YXRlWzNdLCBjcGctPnJlZyArIERJR0VTVF9JTklUSUFMX1ZBTF9EKTsKLQkJd3JpdGVsKGN0eC0+c3RhdGVbNF0sIGNwZy0+cmVnICsgRElHRVNUX0lOSVRJQUxfVkFMX0UpOwotCX0KLQogCWN0eC0+ZXh0cmFfYnl0ZXMgPSBod19ieXRlcyAlIFNIQTFfQkxPQ0tfU0laRTsKIAlpZiAoY3R4LT5leHRyYV9ieXRlcyAhPSAwCiAJICAgICYmICghY3R4LT5sYXN0X2NodW5rIHx8IGN0eC0+Y291bnQgPiBNQVhfSFdfSEFTSF9TSVpFKSkKQEAgLTU1NSw2ICs1MzksMTIgQEAKIAkJcC0+Y29tcGxldGUgPSBtdl9oYXNoX2FsZ29fY29tcGxldGlvbjsKIAkJcC0+cHJvY2VzcyA9IG12X3Byb2Nlc3NfaGFzaF9jdXJyZW50OwogCisJCWlmICh1bmxpa2VseShvbGRfZXh0cmFfYnl0ZXMpKSB7CisJCQltZW1jcHkoY3BnLT5zcmFtICsgU1JBTV9EQVRBX0lOX1NUQVJULCBjdHgtPmJ1ZmZlciwKKwkJCSAgICAgICBvbGRfZXh0cmFfYnl0ZXMpOworCQkJcC0+Y3J5cHRfbGVuID0gb2xkX2V4dHJhX2J5dGVzOworCQl9CisKIAkJbXZfcHJvY2Vzc19oYXNoX2N1cnJlbnQoMSk7CiAJfSBlbHNlIHsKIAkJY29weV9zcmNfdG9fYnVmKHAsIGN0eC0+YnVmZmVyICsgb2xkX2V4dHJhX2J5dGVzLApAQCAtNjAzLDkgKzU5Myw3IEBACiAJCQlpZiAoYXN5bmNfcmVxLT50Zm0tPl9fY3J0X2FsZy0+Y3JhX3R5cGUgIT0KIAkJCSAgICAmY3J5cHRvX2FoYXNoX3R5cGUpIHsKIAkJCQlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEgPQotCQkJCSAgICBjb250YWluZXJfb2YoYXN5bmNfcmVxLAotCQkJCQkJIHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QsCi0JCQkJCQkgYmFzZSk7CisJCQkJICAgIGFibGtjaXBoZXJfcmVxdWVzdF9jYXN0KGFzeW5jX3JlcSk7CiAJCQkJbXZfc3RhcnRfbmV3X2NyeXB0X3JlcShyZXEpOwogCQkJfSBlbHNlIHsKIAkJCQlzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxID0KQEAgLTcyMiwxOSArNzEwLDEzIEBACiBzdGF0aWMgaW50IG12X2hhc2hfZmluYWwoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSkKIHsKIAlzdHJ1Y3QgbXZfcmVxX2hhc2hfY3R4ICpjdHggPSBhaGFzaF9yZXF1ZXN0X2N0eChyZXEpOwotCS8qIGR1bW15IGJ1ZmZlciBvZiA0IGJ5dGVzICovCi0Jc2dfaW5pdF9vbmUoJmN0eC0+ZHVtbXlzZywgY3R4LT5idWZmZXIsIDQpOwotCS8qIEkgdGhpbmsgSSdtIGFsbG93ZWQgdG8gZG8gdGhhdC4uLiAqLwotCWFoYXNoX3JlcXVlc3Rfc2V0X2NyeXB0KHJlcSwgJmN0eC0+ZHVtbXlzZywgcmVxLT5yZXN1bHQsIDApOworCiAJbXZfdXBkYXRlX2hhc2hfcmVxX2N0eChjdHgsIDEsIDApOwogCXJldHVybiBtdl9oYW5kbGVfcmVxKCZyZXEtPmJhc2UpOwogfQogCiBzdGF0aWMgaW50IG12X2hhc2hfZmludXAoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSkKIHsKLQlpZiAoIXJlcS0+bmJ5dGVzKQotCQlyZXR1cm4gbXZfaGFzaF9maW5hbChyZXEpOwotCiAJbXZfdXBkYXRlX2hhc2hfcmVxX2N0eChhaGFzaF9yZXF1ZXN0X2N0eChyZXEpLCAxLCByZXEtPm5ieXRlcyk7CiAJcmV0dXJuIG12X2hhbmRsZV9yZXEoJnJlcS0+YmFzZSk7CiB9CkBAIC0xMDY1LDE0ICsxMDQ3LDIxIEBACiAKIAl3cml0ZWwoU0VDX0lOVF9BQ0NFTDBfRE9ORSwgY3BnLT5yZWcgKyBTRUNfQUNDRUxfSU5UX01BU0spOwogCXdyaXRlbChTRUNfQ0ZHX1NUT1BfRElHX0VSUiwgY3BnLT5yZWcgKyBTRUNfQUNDRUxfQ0ZHKTsKKwl3cml0ZWwoU1JBTV9DT05GSUcsIGNwZy0+cmVnICsgU0VDX0FDQ0VMX0RFU0NfUDApOwogCiAJcmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmbXZfYWVzX2FsZ19lY2IpOwotCWlmIChyZXQpCisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIE1WX0NFU0EKKwkJICAgICAgICJDb3VsZCBub3QgcmVnaXN0ZXIgYWVzLWVjYiBkcml2ZXJcbiIpOwogCQlnb3RvIGVycl9pcnE7CisJfQogCiAJcmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmbXZfYWVzX2FsZ19jYmMpOwotCWlmIChyZXQpCisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIE1WX0NFU0EKKwkJICAgICAgICJDb3VsZCBub3QgcmVnaXN0ZXIgYWVzLWNiYyBkcml2ZXJcbiIpOwogCQlnb3RvIGVycl91bnJlZ19lY2I7CisJfQogCiAJcmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FoYXNoKCZtdl9zaGExX2FsZyk7CiAJaWYgKHJldCA9PSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vb21hcC1zaGFtLmMgYi9kcml2ZXJzL2NyeXB0by9vbWFwLXNoYW0uYwppbmRleCA0NjVjZGUzLi5iYThmMWVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9vbWFwLXNoYW0uYworKysgYi9kcml2ZXJzL2NyeXB0by9vbWFwLXNoYW0uYwpAQCAtNzgsNyArNzgsNiBAQAogI2RlZmluZSBGTEFHU19TSEExCQkweDAwMTAKICNkZWZpbmUgRkxBR1NfRE1BX0FDVElWRQkweDAwMjAKICNkZWZpbmUgRkxBR1NfT1VUUFVUX1JFQURZCTB4MDA0MAotI2RlZmluZSBGTEFHU19DTEVBTgkJMHgwMDgwCiAjZGVmaW5lIEZMQUdTX0lOSVQJCTB4MDEwMAogI2RlZmluZSBGTEFHU19DUFUJCTB4MDIwMAogI2RlZmluZSBGTEFHU19ITUFDCQkweDA0MDAKQEAgLTUxMSwyNiArNTEwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgb21hcF9zaGFtX2NsZWFudXAoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSkKLXsKLQlzdHJ1Y3Qgb21hcF9zaGFtX3JlcWN0eCAqY3R4ID0gYWhhc2hfcmVxdWVzdF9jdHgocmVxKTsKLQlzdHJ1Y3Qgb21hcF9zaGFtX2RldiAqZGQgPSBjdHgtPmRkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGQtPmxvY2ssIGZsYWdzKTsKLQlpZiAoY3R4LT5mbGFncyAmIEZMQUdTX0NMRUFOKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRkLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybjsKLQl9Ci0JY3R4LT5mbGFncyB8PSBGTEFHU19DTEVBTjsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZC0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKGN0eC0+ZGlnY250KQotCQlvbWFwX3NoYW1fY29weV9yZWFkeV9oYXNoKHJlcSk7Ci0KLQlkZXZfZGJnKGRkLT5kZXYsICJkaWdjbnQ6ICVkLCBidWZjbnQ6ICVkXG4iLCBjdHgtPmRpZ2NudCwgY3R4LT5idWZjbnQpOwotfQotCiBzdGF0aWMgaW50IG9tYXBfc2hhbV9pbml0KHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpCiB7CiAJc3RydWN0IGNyeXB0b19haGFzaCAqdGZtID0gY3J5cHRvX2FoYXNoX3JlcXRmbShyZXEpOwpAQCAtNjE4LDkgKzU5Nyw4IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBvbWFwX3NoYW1fZmluaXNoX3JlcV9obWFjKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpCitzdGF0aWMgaW50IG9tYXBfc2hhbV9maW5pc2hfaG1hYyhzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQogewotCXN0cnVjdCBvbWFwX3NoYW1fcmVxY3R4ICpjdHggPSBhaGFzaF9yZXF1ZXN0X2N0eChyZXEpOwogCXN0cnVjdCBvbWFwX3NoYW1fY3R4ICp0Y3R4ID0gY3J5cHRvX3RmbV9jdHgocmVxLT5iYXNlLnRmbSk7CiAJc3RydWN0IG9tYXBfc2hhbV9obWFjX2N0eCAqYmN0eCA9IHRjdHgtPmJhc2U7CiAJaW50IGJzID0gY3J5cHRvX3NoYXNoX2Jsb2Nrc2l6ZShiY3R4LT5zaGFzaCk7CkBAIC02MzUsNyArNjEzLDI0IEBACiAKIAlyZXR1cm4gY3J5cHRvX3NoYXNoX2luaXQoJmRlc2Muc2hhc2gpID86CiAJICAgICAgIGNyeXB0b19zaGFzaF91cGRhdGUoJmRlc2Muc2hhc2gsIGJjdHgtPm9wYWQsIGJzKSA/OgotCSAgICAgICBjcnlwdG9fc2hhc2hfZmludXAoJmRlc2Muc2hhc2gsIGN0eC0+ZGlnZXN0LCBkcywgY3R4LT5kaWdlc3QpOworCSAgICAgICBjcnlwdG9fc2hhc2hfZmludXAoJmRlc2Muc2hhc2gsIHJlcS0+cmVzdWx0LCBkcywgcmVxLT5yZXN1bHQpOworfQorCitzdGF0aWMgaW50IG9tYXBfc2hhbV9maW5pc2goc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3Qgb21hcF9zaGFtX3JlcWN0eCAqY3R4ID0gYWhhc2hfcmVxdWVzdF9jdHgocmVxKTsKKwlzdHJ1Y3Qgb21hcF9zaGFtX2RldiAqZGQgPSBjdHgtPmRkOworCWludCBlcnIgPSAwOworCisJaWYgKGN0eC0+ZGlnY250KSB7CisJCW9tYXBfc2hhbV9jb3B5X3JlYWR5X2hhc2gocmVxKTsKKwkJaWYgKGN0eC0+ZmxhZ3MgJiBGTEFHU19ITUFDKQorCQkJZXJyID0gb21hcF9zaGFtX2ZpbmlzaF9obWFjKHJlcSk7CisJfQorCisJZGV2X2RiZyhkZC0+ZGV2LCAiZGlnY250OiAlZCwgYnVmY250OiAlZFxuIiwgY3R4LT5kaWdjbnQsIGN0eC0+YnVmY250KTsKKworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIG9tYXBfc2hhbV9maW5pc2hfcmVxKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEsIGludCBlcnIpCkBAIC02NDUsMTUgKzY0MCwxMiBAQAogCiAJaWYgKCFlcnIpIHsKIAkJb21hcF9zaGFtX2NvcHlfaGFzaChjdHgtPmRkLT5yZXEsIDEpOwotCQlpZiAoY3R4LT5mbGFncyAmIEZMQUdTX0hNQUMpCi0JCQllcnIgPSBvbWFwX3NoYW1fZmluaXNoX3JlcV9obWFjKHJlcSk7CisJCWlmIChjdHgtPmZsYWdzICYgRkxBR1NfRklOQUwpCisJCQllcnIgPSBvbWFwX3NoYW1fZmluaXNoKHJlcSk7CiAJfSBlbHNlIHsKIAkJY3R4LT5mbGFncyB8PSBGTEFHU19FUlJPUjsKIAl9CiAKLQlpZiAoKGN0eC0+ZmxhZ3MgJiBGTEFHU19GSU5BTCkgfHwgZXJyKQotCQlvbWFwX3NoYW1fY2xlYW51cChyZXEpOwotCiAJY2xrX2Rpc2FibGUoZGQtPmljbGspOwogCWRkLT5mbGFncyAmPSB+RkxBR1NfQlVTWTsKIApAQCAtODA5LDIyICs4MDEsMjEgQEAKIHN0YXRpYyBpbnQgb21hcF9zaGFtX2ZpbmFsKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpCiB7CiAJc3RydWN0IG9tYXBfc2hhbV9yZXFjdHggKmN0eCA9IGFoYXNoX3JlcXVlc3RfY3R4KHJlcSk7Ci0JaW50IGVyciA9IDA7CiAKIAljdHgtPmZsYWdzIHw9IEZMQUdTX0ZJTlVQOwogCi0JaWYgKCEoY3R4LT5mbGFncyAmIEZMQUdTX0VSUk9SKSkgewotCQkvKiBPTUFQIEhXIGFjY2VsIHdvcmtzIG9ubHkgd2l0aCBidWZmZXJzID49IDkgKi8KLQkJLyogSE1BQyBpcyBhbHdheXMgPj0gOSBiZWNhdXNlIG9mIGlwYWQgKi8KLQkJaWYgKChjdHgtPmRpZ2NudCArIGN0eC0+YnVmY250KSA8IDkpCi0JCQllcnIgPSBvbWFwX3NoYW1fZmluYWxfc2hhc2gocmVxKTsKLQkJZWxzZSBpZiAoY3R4LT5idWZjbnQpCi0JCQlyZXR1cm4gb21hcF9zaGFtX2VucXVldWUocmVxLCBPUF9GSU5BTCk7Ci0JfQorCWlmIChjdHgtPmZsYWdzICYgRkxBR1NfRVJST1IpCisJCXJldHVybiAwOyAvKiB1bmNvbXBsZXRlZCBoYXNoIGlzIG5vdCBuZWVkZWQgKi8KIAotCW9tYXBfc2hhbV9jbGVhbnVwKHJlcSk7CisJLyogT01BUCBIVyBhY2NlbCB3b3JrcyBvbmx5IHdpdGggYnVmZmVycyA+PSA5ICovCisJLyogSE1BQyBpcyBhbHdheXMgPj0gOSBiZWNhdXNlIGlwYWQgPT0gYmxvY2sgc2l6ZSAqLworCWlmICgoY3R4LT5kaWdjbnQgKyBjdHgtPmJ1ZmNudCkgPCA5KQorCQlyZXR1cm4gb21hcF9zaGFtX2ZpbmFsX3NoYXNoKHJlcSk7CisJZWxzZSBpZiAoY3R4LT5idWZjbnQpCisJCXJldHVybiBvbWFwX3NoYW1fZW5xdWV1ZShyZXEsIE9QX0ZJTkFMKTsKIAotCXJldHVybiBlcnI7CisJLyogY29weSByZWFkeSBoYXNoICgrIGZpbmFsaXplIGhtYWMpICovCisJcmV0dXJuIG9tYXBfc2hhbV9maW5pc2gocmVxKTsKIH0KIAogc3RhdGljIGludCBvbWFwX3NoYW1fZmludXAoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSkKQEAgLTgzNSw3ICs4MjYsNyBAQAogCWN0eC0+ZmxhZ3MgfD0gRkxBR1NfRklOVVA7CiAKIAllcnIxID0gb21hcF9zaGFtX3VwZGF0ZShyZXEpOwotCWlmIChlcnIxID09IC1FSU5QUk9HUkVTUykKKwlpZiAoZXJyMSA9PSAtRUlOUFJPR1JFU1MgfHwgZXJyMSA9PSAtRUJVU1kpCiAJCXJldHVybiBlcnIxOwogCS8qCiAJICogZmluYWwoKSBoYXMgdG8gYmUgYWx3YXlzIGNhbGxlZCB0byBjbGVhbnVwIHJlc291cmNlcwpAQCAtODkwLDggKzg4MSw2IEBACiAJc3RydWN0IG9tYXBfc2hhbV9jdHggKnRjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwogCWNvbnN0IGNoYXIgKmFsZ19uYW1lID0gY3J5cHRvX3RmbV9hbGdfbmFtZSh0Zm0pOwogCi0JcHJfaW5mbygiZW50ZXJcbiIpOwotCiAJLyogQWxsb2NhdGUgYSBmYWxsYmFjayBhbmQgYWJvcnQgaWYgaXQgZmFpbGVkLiAqLwogCXRjdHgtPmZhbGxiYWNrID0gY3J5cHRvX2FsbG9jX3NoYXNoKGFsZ19uYW1lLCAwLAogCQkJCQkgICAgQ1JZUFRPX0FMR19ORUVEX0ZBTExCQUNLKTsKQEAgLTEyOTcsNyArMTI4Niw4IEBACiAJcHJfaW5mbygibG9hZGluZyAlcyBkcml2ZXJcbiIsICJvbWFwLXNoYW0iKTsKIAogCWlmICghY3B1X2NsYXNzX2lzX29tYXAyKCkgfHwKLQkJb21hcF90eXBlKCkgIT0gT01BUDJfREVWSUNFX1RZUEVfU0VDKSB7CisJCShvbWFwX3R5cGUoKSAhPSBPTUFQMl9ERVZJQ0VfVFlQRV9TRUMgJiYKKwkJCW9tYXBfdHlwZSgpICE9IE9NQVAyX0RFVklDRV9UWVBFX0VNVSkpIHsKIAkJcHJfZXJyKCJVbnN1cHBvcnRlZCBjcHVcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLXNoYS5jIGIvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1zaGEuYwppbmRleCBhZGYwNzViLi4wNmJkYjRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLXNoYS5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stc2hhLmMKQEAgLTI4OCw5ICsyODgsMjUwIEBACiAJfQogfTsKIAorLyogQWRkIHR3byBzaGFzaF9hbGcgaW5zdGFuY2UgZm9yIGhhcmR3YXJlLWltcGxlbWVudGVkICoKKyogbXVsdGlwbGUtcGFydHMgaGFzaCBzdXBwb3J0ZWQgYnkgVklBIE5hbm8gUHJvY2Vzc29yLiovCitzdGF0aWMgaW50IHBhZGxvY2tfc2hhMV9pbml0X25hbm8oc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MpCit7CisJc3RydWN0IHNoYTFfc3RhdGUgKnNjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKworCSpzY3R4ID0gKHN0cnVjdCBzaGExX3N0YXRlKXsKKwkJLnN0YXRlID0geyBTSEExX0gwLCBTSEExX0gxLCBTSEExX0gyLCBTSEExX0gzLCBTSEExX0g0IH0sCisJfTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhZGxvY2tfc2hhMV91cGRhdGVfbmFubyhzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywKKwkJCWNvbnN0IHU4ICpkYXRhLAl1bnNpZ25lZCBpbnQgbGVuKQoreworCXN0cnVjdCBzaGExX3N0YXRlICpzY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisJdW5zaWduZWQgaW50IHBhcnRpYWwsIGRvbmU7CisJY29uc3QgdTggKnNyYzsKKwkvKlRoZSBQSEUgcmVxdWlyZSB0aGUgb3V0IGJ1ZmZlciBtdXN0IDEyOCBieXRlcyBhbmQgMTYtYnl0ZXMgYWxpZ25lZCovCisJdTggYnVmWzEyOCArIFBBRExPQ0tfQUxJR05NRU5UIC0gU1RBQ0tfQUxJR05dIF9fYXR0cmlidXRlX18KKwkJKChhbGlnbmVkKFNUQUNLX0FMSUdOKSkpOworCXU4ICpkc3QgPSBQVFJfQUxJR04oJmJ1ZlswXSwgUEFETE9DS19BTElHTk1FTlQpOworCWludCB0c19zdGF0ZTsKKworCXBhcnRpYWwgPSBzY3R4LT5jb3VudCAmIDB4M2Y7CisJc2N0eC0+Y291bnQgKz0gbGVuOworCWRvbmUgPSAwOworCXNyYyA9IGRhdGE7CisJbWVtY3B5KGRzdCwgKHU4ICopKHNjdHgtPnN0YXRlKSwgU0hBMV9ESUdFU1RfU0laRSk7CisKKwlpZiAoKHBhcnRpYWwgKyBsZW4pID49IFNIQTFfQkxPQ0tfU0laRSkgeworCisJCS8qIEFwcGVuZCB0aGUgYnl0ZXMgaW4gc3RhdGUncyBidWZmZXIgdG8gYSBibG9jayB0byBoYW5kbGUgKi8KKwkJaWYgKHBhcnRpYWwpIHsKKwkJCWRvbmUgPSAtcGFydGlhbDsKKwkJCW1lbWNweShzY3R4LT5idWZmZXIgKyBwYXJ0aWFsLCBkYXRhLAorCQkJCWRvbmUgKyBTSEExX0JMT0NLX1NJWkUpOworCQkJc3JjID0gc2N0eC0+YnVmZmVyOworCQkJdHNfc3RhdGUgPSBpcnFfdHNfc2F2ZSgpOworCQkJYXNtIHZvbGF0aWxlICgiLmJ5dGUgMHhmMywweDBmLDB4YTYsMHhjOCIKKwkJCTogIitTIihzcmMpLCAiK0QiKGRzdCkgXAorCQkJOiAiYSIoKGxvbmcpLTEpLCAiYyIoKHVuc2lnbmVkIGxvbmcpMSkpOworCQkJaXJxX3RzX3Jlc3RvcmUodHNfc3RhdGUpOworCQkJZG9uZSArPSBTSEExX0JMT0NLX1NJWkU7CisJCQlzcmMgPSBkYXRhICsgZG9uZTsKKwkJfQorCisJCS8qIFByb2Nlc3MgdGhlIGxlZnQgYnl0ZXMgZnJvbSB0aGUgaW5wdXQgZGF0YSAqLworCQlpZiAobGVuIC0gZG9uZSA+PSBTSEExX0JMT0NLX1NJWkUpIHsKKwkJCXRzX3N0YXRlID0gaXJxX3RzX3NhdmUoKTsKKwkJCWFzbSB2b2xhdGlsZSAoIi5ieXRlIDB4ZjMsMHgwZiwweGE2LDB4YzgiCisJCQk6ICIrUyIoc3JjKSwgIitEIihkc3QpCisJCQk6ICJhIigobG9uZyktMSksCisJCQkiYyIoKHVuc2lnbmVkIGxvbmcpKChsZW4gLSBkb25lKSAvIFNIQTFfQkxPQ0tfU0laRSkpKTsKKwkJCWlycV90c19yZXN0b3JlKHRzX3N0YXRlKTsKKwkJCWRvbmUgKz0gKChsZW4gLSBkb25lKSAtIChsZW4gLSBkb25lKSAlIFNIQTFfQkxPQ0tfU0laRSk7CisJCQlzcmMgPSBkYXRhICsgZG9uZTsKKwkJfQorCQlwYXJ0aWFsID0gMDsKKwl9CisJbWVtY3B5KCh1OCAqKShzY3R4LT5zdGF0ZSksIGRzdCwgU0hBMV9ESUdFU1RfU0laRSk7CisJbWVtY3B5KHNjdHgtPmJ1ZmZlciArIHBhcnRpYWwsIHNyYywgbGVuIC0gZG9uZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYWRsb2NrX3NoYTFfZmluYWxfbmFubyhzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgdTggKm91dCkKK3sKKwlzdHJ1Y3Qgc2hhMV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IHNoYTFfc3RhdGUgKilzaGFzaF9kZXNjX2N0eChkZXNjKTsKKwl1bnNpZ25lZCBpbnQgcGFydGlhbCwgcGFkbGVuOworCV9fYmU2NCBiaXRzOworCXN0YXRpYyBjb25zdCB1OCBwYWRkaW5nWzY0XSA9IHsgMHg4MCwgfTsKKworCWJpdHMgPSBjcHVfdG9fYmU2NChzdGF0ZS0+Y291bnQgPDwgMyk7CisKKwkvKiBQYWQgb3V0IHRvIDU2IG1vZCA2NCAqLworCXBhcnRpYWwgPSBzdGF0ZS0+Y291bnQgJiAweDNmOworCXBhZGxlbiA9IChwYXJ0aWFsIDwgNTYpID8gKDU2IC0gcGFydGlhbCkgOiAoKDY0KzU2KSAtIHBhcnRpYWwpOworCXBhZGxvY2tfc2hhMV91cGRhdGVfbmFubyhkZXNjLCBwYWRkaW5nLCBwYWRsZW4pOworCisJLyogQXBwZW5kIGxlbmd0aCBmaWVsZCBieXRlcyAqLworCXBhZGxvY2tfc2hhMV91cGRhdGVfbmFubyhkZXNjLCAoY29uc3QgdTggKikmYml0cywgc2l6ZW9mKGJpdHMpKTsKKworCS8qIFN3YXAgdG8gb3V0cHV0ICovCisJcGFkbG9ja19vdXRwdXRfYmxvY2soKHVpbnQzMl90ICopKHN0YXRlLT5zdGF0ZSksICh1aW50MzJfdCAqKW91dCwgNSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYWRsb2NrX3NoYTI1Nl9pbml0X25hbm8oc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MpCit7CisJc3RydWN0IHNoYTI1Nl9zdGF0ZSAqc2N0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworCisJKnNjdHggPSAoc3RydWN0IHNoYTI1Nl9zdGF0ZSl7CisJCS5zdGF0ZSA9IHsgU0hBMjU2X0gwLCBTSEEyNTZfSDEsIFNIQTI1Nl9IMiwgU0hBMjU2X0gzLCBcCisJCQkJU0hBMjU2X0g0LCBTSEEyNTZfSDUsIFNIQTI1Nl9INiwgU0hBMjU2X0g3fSwKKwl9OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFkbG9ja19zaGEyNTZfdXBkYXRlX25hbm8oc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIGNvbnN0IHU4ICpkYXRhLAorCQkJICB1bnNpZ25lZCBpbnQgbGVuKQoreworCXN0cnVjdCBzaGEyNTZfc3RhdGUgKnNjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKwl1bnNpZ25lZCBpbnQgcGFydGlhbCwgZG9uZTsKKwljb25zdCB1OCAqc3JjOworCS8qVGhlIFBIRSByZXF1aXJlIHRoZSBvdXQgYnVmZmVyIG11c3QgMTI4IGJ5dGVzIGFuZCAxNi1ieXRlcyBhbGlnbmVkKi8KKwl1OCBidWZbMTI4ICsgUEFETE9DS19BTElHTk1FTlQgLSBTVEFDS19BTElHTl0gX19hdHRyaWJ1dGVfXworCQkoKGFsaWduZWQoU1RBQ0tfQUxJR04pKSk7CisJdTggKmRzdCA9IFBUUl9BTElHTigmYnVmWzBdLCBQQURMT0NLX0FMSUdOTUVOVCk7CisJaW50IHRzX3N0YXRlOworCisJcGFydGlhbCA9IHNjdHgtPmNvdW50ICYgMHgzZjsKKwlzY3R4LT5jb3VudCArPSBsZW47CisJZG9uZSA9IDA7CisJc3JjID0gZGF0YTsKKwltZW1jcHkoZHN0LCAodTggKikoc2N0eC0+c3RhdGUpLCBTSEEyNTZfRElHRVNUX1NJWkUpOworCisJaWYgKChwYXJ0aWFsICsgbGVuKSA+PSBTSEEyNTZfQkxPQ0tfU0laRSkgeworCisJCS8qIEFwcGVuZCB0aGUgYnl0ZXMgaW4gc3RhdGUncyBidWZmZXIgdG8gYSBibG9jayB0byBoYW5kbGUgKi8KKwkJaWYgKHBhcnRpYWwpIHsKKwkJCWRvbmUgPSAtcGFydGlhbDsKKwkJCW1lbWNweShzY3R4LT5idWYgKyBwYXJ0aWFsLCBkYXRhLAorCQkJCWRvbmUgKyBTSEEyNTZfQkxPQ0tfU0laRSk7CisJCQlzcmMgPSBzY3R4LT5idWY7CisJCQl0c19zdGF0ZSA9IGlycV90c19zYXZlKCk7CisJCQlhc20gdm9sYXRpbGUgKCIuYnl0ZSAweGYzLDB4MGYsMHhhNiwweGQwIgorCQkJOiAiK1MiKHNyYyksICIrRCIoZHN0KQorCQkJOiAiYSIoKGxvbmcpLTEpLCAiYyIoKHVuc2lnbmVkIGxvbmcpMSkpOworCQkJaXJxX3RzX3Jlc3RvcmUodHNfc3RhdGUpOworCQkJZG9uZSArPSBTSEEyNTZfQkxPQ0tfU0laRTsKKwkJCXNyYyA9IGRhdGEgKyBkb25lOworCQl9CisKKwkJLyogUHJvY2VzcyB0aGUgbGVmdCBieXRlcyBmcm9tIGlucHV0IGRhdGEqLworCQlpZiAobGVuIC0gZG9uZSA+PSBTSEEyNTZfQkxPQ0tfU0laRSkgeworCQkJdHNfc3RhdGUgPSBpcnFfdHNfc2F2ZSgpOworCQkJYXNtIHZvbGF0aWxlICgiLmJ5dGUgMHhmMywweDBmLDB4YTYsMHhkMCIKKwkJCTogIitTIihzcmMpLCAiK0QiKGRzdCkKKwkJCTogImEiKChsb25nKS0xKSwKKwkJCSJjIigodW5zaWduZWQgbG9uZykoKGxlbiAtIGRvbmUpIC8gNjQpKSk7CisJCQlpcnFfdHNfcmVzdG9yZSh0c19zdGF0ZSk7CisJCQlkb25lICs9ICgobGVuIC0gZG9uZSkgLSAobGVuIC0gZG9uZSkgJSA2NCk7CisJCQlzcmMgPSBkYXRhICsgZG9uZTsKKwkJfQorCQlwYXJ0aWFsID0gMDsKKwl9CisJbWVtY3B5KCh1OCAqKShzY3R4LT5zdGF0ZSksIGRzdCwgU0hBMjU2X0RJR0VTVF9TSVpFKTsKKwltZW1jcHkoc2N0eC0+YnVmICsgcGFydGlhbCwgc3JjLCBsZW4gLSBkb25lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhZGxvY2tfc2hhMjU2X2ZpbmFsX25hbm8oc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIHU4ICpvdXQpCit7CisJc3RydWN0IHNoYTI1Nl9zdGF0ZSAqc3RhdGUgPQorCQkoc3RydWN0IHNoYTI1Nl9zdGF0ZSAqKXNoYXNoX2Rlc2NfY3R4KGRlc2MpOworCXVuc2lnbmVkIGludCBwYXJ0aWFsLCBwYWRsZW47CisJX19iZTY0IGJpdHM7CisJc3RhdGljIGNvbnN0IHU4IHBhZGRpbmdbNjRdID0geyAweDgwLCB9OworCisJYml0cyA9IGNwdV90b19iZTY0KHN0YXRlLT5jb3VudCA8PCAzKTsKKworCS8qIFBhZCBvdXQgdG8gNTYgbW9kIDY0ICovCisJcGFydGlhbCA9IHN0YXRlLT5jb3VudCAmIDB4M2Y7CisJcGFkbGVuID0gKHBhcnRpYWwgPCA1NikgPyAoNTYgLSBwYXJ0aWFsKSA6ICgoNjQrNTYpIC0gcGFydGlhbCk7CisJcGFkbG9ja19zaGEyNTZfdXBkYXRlX25hbm8oZGVzYywgcGFkZGluZywgcGFkbGVuKTsKKworCS8qIEFwcGVuZCBsZW5ndGggZmllbGQgYnl0ZXMgKi8KKwlwYWRsb2NrX3NoYTI1Nl91cGRhdGVfbmFubyhkZXNjLCAoY29uc3QgdTggKikmYml0cywgc2l6ZW9mKGJpdHMpKTsKKworCS8qIFN3YXAgdG8gb3V0cHV0ICovCisJcGFkbG9ja19vdXRwdXRfYmxvY2soKHVpbnQzMl90ICopKHN0YXRlLT5zdGF0ZSksICh1aW50MzJfdCAqKW91dCwgOCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYWRsb2NrX3NoYV9leHBvcnRfbmFubyhzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywKKwkJCQl2b2lkICpvdXQpCit7CisJaW50IHN0YXRlc2l6ZSA9IGNyeXB0b19zaGFzaF9zdGF0ZXNpemUoZGVzYy0+dGZtKTsKKwl2b2lkICpzY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisKKwltZW1jcHkob3V0LCBzY3R4LCBzdGF0ZXNpemUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhZGxvY2tfc2hhX2ltcG9ydF9uYW5vKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLAorCQkJCWNvbnN0IHZvaWQgKmluKQoreworCWludCBzdGF0ZXNpemUgPSBjcnlwdG9fc2hhc2hfc3RhdGVzaXplKGRlc2MtPnRmbSk7CisJdm9pZCAqc2N0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworCisJbWVtY3B5KHNjdHgsIGluLCBzdGF0ZXNpemUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNoYXNoX2FsZyBzaGExX2FsZ19uYW5vID0geworCS5kaWdlc3RzaXplCT0JU0hBMV9ESUdFU1RfU0laRSwKKwkuaW5pdAkJPQlwYWRsb2NrX3NoYTFfaW5pdF9uYW5vLAorCS51cGRhdGUJCT0JcGFkbG9ja19zaGExX3VwZGF0ZV9uYW5vLAorCS5maW5hbAkJPQlwYWRsb2NrX3NoYTFfZmluYWxfbmFubywKKwkuZXhwb3J0CQk9CXBhZGxvY2tfc2hhX2V4cG9ydF9uYW5vLAorCS5pbXBvcnQJCT0JcGFkbG9ja19zaGFfaW1wb3J0X25hbm8sCisJLmRlc2NzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzaGExX3N0YXRlKSwKKwkuc3RhdGVzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzaGExX3N0YXRlKSwKKwkuYmFzZQkJPQl7CisJCS5jcmFfbmFtZQkJPQkic2hhMSIsCisJCS5jcmFfZHJpdmVyX25hbWUJPQkic2hhMS1wYWRsb2NrLW5hbm8iLAorCQkuY3JhX3ByaW9yaXR5CQk9CVBBRExPQ0tfQ1JBX1BSSU9SSVRZLAorCQkuY3JhX2ZsYWdzCQk9CUNSWVBUT19BTEdfVFlQRV9TSEFTSCwKKwkJLmNyYV9ibG9ja3NpemUJCT0JU0hBMV9CTE9DS19TSVpFLAorCQkuY3JhX21vZHVsZQkJPQlUSElTX01PRFVMRSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHNoYXNoX2FsZyBzaGEyNTZfYWxnX25hbm8gPSB7CisJLmRpZ2VzdHNpemUJPQlTSEEyNTZfRElHRVNUX1NJWkUsCisJLmluaXQJCT0JcGFkbG9ja19zaGEyNTZfaW5pdF9uYW5vLAorCS51cGRhdGUJCT0JcGFkbG9ja19zaGEyNTZfdXBkYXRlX25hbm8sCisJLmZpbmFsCQk9CXBhZGxvY2tfc2hhMjU2X2ZpbmFsX25hbm8sCisJLmV4cG9ydAkJPQlwYWRsb2NrX3NoYV9leHBvcnRfbmFubywKKwkuaW1wb3J0CQk9CXBhZGxvY2tfc2hhX2ltcG9ydF9uYW5vLAorCS5kZXNjc2l6ZQk9CXNpemVvZihzdHJ1Y3Qgc2hhMjU2X3N0YXRlKSwKKwkuc3RhdGVzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzaGEyNTZfc3RhdGUpLAorCS5iYXNlCQk9CXsKKwkJLmNyYV9uYW1lCQk9CSJzaGEyNTYiLAorCQkuY3JhX2RyaXZlcl9uYW1lCT0JInNoYTI1Ni1wYWRsb2NrLW5hbm8iLAorCQkuY3JhX3ByaW9yaXR5CQk9CVBBRExPQ0tfQ1JBX1BSSU9SSVRZLAorCQkuY3JhX2ZsYWdzCQk9CUNSWVBUT19BTEdfVFlQRV9TSEFTSCwKKwkJLmNyYV9ibG9ja3NpemUJCT0JU0hBMjU2X0JMT0NLX1NJWkUsCisJCS5jcmFfbW9kdWxlCQk9CVRISVNfTU9EVUxFLAorCX0KK307CisKIHN0YXRpYyBpbnQgX19pbml0IHBhZGxvY2tfaW5pdCh2b2lkKQogewogCWludCByYyA9IC1FTk9ERVY7CisJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKDApOworCXN0cnVjdCBzaGFzaF9hbGcgKnNoYTE7CisJc3RydWN0IHNoYXNoX2FsZyAqc2hhMjU2OwogCiAJaWYgKCFjcHVfaGFzX3BoZSkgewogCQlwcmludGsoS0VSTl9OT1RJQ0UgUEZYICJWSUEgUGFkTG9jayBIYXNoIEVuZ2luZSBub3QgZGV0ZWN0ZWQuXG4iKTsKQEAgLTMwMiwxMSArNTQzLDIxIEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXJjID0gY3J5cHRvX3JlZ2lzdGVyX3NoYXNoKCZzaGExX2FsZyk7CisJLyogUmVnaXN0ZXIgdGhlIG5ld2x5IGFkZGVkIGFsZ29yaXRobSBtb2R1bGUgaWYgb24gKgorCSogVklBIE5hbm8gcHJvY2Vzc29yLCBvciBlbHNlIGp1c3QgZG8gYXMgYmVmb3JlICovCisJaWYgKGMtPng4Nl9tb2RlbCA8IDB4MGYpIHsKKwkJc2hhMSA9ICZzaGExX2FsZzsKKwkJc2hhMjU2ID0gJnNoYTI1Nl9hbGc7CisJfSBlbHNlIHsKKwkJc2hhMSA9ICZzaGExX2FsZ19uYW5vOworCQlzaGEyNTYgPSAmc2hhMjU2X2FsZ19uYW5vOworCX0KKworCXJjID0gY3J5cHRvX3JlZ2lzdGVyX3NoYXNoKHNoYTEpOwogCWlmIChyYykKIAkJZ290byBvdXQ7CiAKLQlyYyA9IGNyeXB0b19yZWdpc3Rlcl9zaGFzaCgmc2hhMjU2X2FsZyk7CisJcmMgPSBjcnlwdG9fcmVnaXN0ZXJfc2hhc2goc2hhMjU2KTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0X3VucmVnMTsKIApAQCAtMzE1LDcgKzU2Niw4IEBACiAJcmV0dXJuIDA7CiAKIG91dF91bnJlZzE6Ci0JY3J5cHRvX3VucmVnaXN0ZXJfc2hhc2goJnNoYTFfYWxnKTsKKwljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaChzaGExKTsKKwogb3V0OgogCXByaW50ayhLRVJOX0VSUiBQRlggIlZJQSBQYWRMb2NrIFNIQTEvU0hBMjU2IGluaXRpYWxpemF0aW9uIGZhaWxlZC5cbiIpOwogCXJldHVybiByYzsKQEAgLTMyMyw4ICs1NzUsMTUgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IHBhZGxvY2tfZmluaSh2b2lkKQogewotCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoKCZzaGExX2FsZyk7Ci0JY3J5cHRvX3VucmVnaXN0ZXJfc2hhc2goJnNoYTI1Nl9hbGcpOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YSgwKTsKKworCWlmIChjLT54ODZfbW9kZWwgPj0gMHgwZikgeworCQljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaCgmc2hhMV9hbGdfbmFubyk7CisJCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoKCZzaGEyNTZfYWxnX25hbm8pOworCX0gZWxzZSB7CisJCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoKCZzaGExX2FsZyk7CisJCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoKCZzaGEyNTZfYWxnKTsKKwl9CiB9CiAKIG1vZHVsZV9pbml0KHBhZGxvY2tfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9waWNveGNlbGxfY3J5cHRvLmMgYi9kcml2ZXJzL2NyeXB0by9waWNveGNlbGxfY3J5cHRvLmMKaW5kZXggYjA5MmQwYS4uMjMwYjViOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vcGljb3hjZWxsX2NyeXB0by5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL3BpY294Y2VsbF9jcnlwdG8uYwpAQCAtMTc2LDYgKzE3Niw4IEBACiAJdTgJCQkJc2FsdFtBRVNfQkxPQ0tfU0laRV07CiB9OwogCitzdGF0aWMgaW50IHNwYWNjX2FibGtfc3VibWl0KHN0cnVjdCBzcGFjY19yZXEgKnJlcSk7CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNwYWNjX2FsZyAqdG9fc3BhY2NfYWxnKHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCiB7CiAJcmV0dXJuIGFsZyA/IGNvbnRhaW5lcl9vZihhbGcsIHN0cnVjdCBzcGFjY19hbGcsIGFsZykgOiBOVUxMOwpAQCAtNjY2LDYgKzY2OCwyNCBAQAogCXJldHVybiAtRUlOUFJPR1JFU1M7CiB9CiAKK3N0YXRpYyBpbnQgc3BhY2NfcmVxX3N1Ym1pdChzdHJ1Y3Qgc3BhY2NfcmVxICpyZXEpOworCitzdGF0aWMgdm9pZCBzcGFjY19wdXNoKHN0cnVjdCBzcGFjY19lbmdpbmUgKmVuZ2luZSkKK3sKKwlzdHJ1Y3Qgc3BhY2NfcmVxICpyZXE7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmVuZ2luZS0+cGVuZGluZykgJiYKKwkgICAgICAgZW5naW5lLT5pbl9mbGlnaHQgKyAxIDw9IGVuZ2luZS0+Zmlmb19zeikgeworCisJCSsrZW5naW5lLT5pbl9mbGlnaHQ7CisJCXJlcSA9IGxpc3RfZmlyc3RfZW50cnkoJmVuZ2luZS0+cGVuZGluZywgc3RydWN0IHNwYWNjX3JlcSwKKwkJCQkgICAgICAgbGlzdCk7CisJCWxpc3RfbW92ZV90YWlsKCZyZXEtPmxpc3QsICZlbmdpbmUtPmluX3Byb2dyZXNzKTsKKworCQlyZXEtPnJlc3VsdCA9IHNwYWNjX3JlcV9zdWJtaXQocmVxKTsKKwl9Cit9CisKIC8qCiAgKiBTZXR1cCBhbiBBRUFEIHJlcXVlc3QgZm9yIHByb2Nlc3NpbmcuIFRoaXMgd2lsbCBjb25maWd1cmUgdGhlIGVuZ2luZSwgbG9hZAogICogdGhlIGNvbnRleHQgYW5kIHRoZW4gc3RhcnQgdGhlIHBhY2tldCBwcm9jZXNzaW5nLgpAQCAtNjk4LDcgKzcxOCw4IEBACiAKIAllcnIgPSAtRUlOUFJPR1JFU1M7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmVuZ2luZS0+aHdfbG9jaywgZmxhZ3MpOwotCWlmICh1bmxpa2VseShzcGFjY19maWZvX2NtZF9mdWxsKGVuZ2luZSkpKSB7CisJaWYgKHVubGlrZWx5KHNwYWNjX2ZpZm9fY21kX2Z1bGwoZW5naW5lKSkgfHwKKwkgICAgZW5naW5lLT5pbl9mbGlnaHQgKyAxID4gZW5naW5lLT5maWZvX3N6KSB7CiAJCWlmICghKHJlcS0+YmFzZS5mbGFncyAmIENSWVBUT19URk1fUkVRX01BWV9CQUNLTE9HKSkgewogCQkJZXJyID0gLUVCVVNZOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT5od19sb2NrLCBmbGFncyk7CkBAIC03MDYsOSArNzI3LDggQEAKIAkJfQogCQlsaXN0X2FkZF90YWlsKCZkZXZfcmVxLT5saXN0LCAmZW5naW5lLT5wZW5kaW5nKTsKIAl9IGVsc2UgewotCQkrK2VuZ2luZS0+aW5fZmxpZ2h0OwotCQlsaXN0X2FkZF90YWlsKCZkZXZfcmVxLT5saXN0LCAmZW5naW5lLT5pbl9wcm9ncmVzcyk7Ci0JCXNwYWNjX2FlYWRfc3VibWl0KGRldl9yZXEpOworCQlsaXN0X2FkZF90YWlsKCZkZXZfcmVxLT5saXN0LCAmZW5naW5lLT5wZW5kaW5nKTsKKwkJc3BhY2NfcHVzaChlbmdpbmUpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlbmdpbmUtPmh3X2xvY2ssIGZsYWdzKTsKIApAQCAtMTA0MSw3ICsxMDYxLDggQEAKIAkgKiB3ZSBlaXRoZXIgc3RpY2sgaXQgb24gdGhlIGVuZCBvZiBhIHBlbmRpbmcgbGlzdCBpZiB3ZSBjYW4gYmFja2xvZywKIAkgKiBvciBiYWlsb3V0IHdpdGggYW4gZXJyb3IgaWYgbm90LgogCSAqLwotCWlmICh1bmxpa2VseShzcGFjY19maWZvX2NtZF9mdWxsKGVuZ2luZSkpKSB7CisJaWYgKHVubGlrZWx5KHNwYWNjX2ZpZm9fY21kX2Z1bGwoZW5naW5lKSkgfHwKKwkgICAgZW5naW5lLT5pbl9mbGlnaHQgKyAxID4gZW5naW5lLT5maWZvX3N6KSB7CiAJCWlmICghKHJlcS0+YmFzZS5mbGFncyAmIENSWVBUT19URk1fUkVRX01BWV9CQUNLTE9HKSkgewogCQkJZXJyID0gLUVCVVNZOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT5od19sb2NrLCBmbGFncyk7CkBAIC0xMDQ5LDkgKzEwNzAsOCBAQAogCQl9CiAJCWxpc3RfYWRkX3RhaWwoJmRldl9yZXEtPmxpc3QsICZlbmdpbmUtPnBlbmRpbmcpOwogCX0gZWxzZSB7Ci0JCSsrZW5naW5lLT5pbl9mbGlnaHQ7Ci0JCWxpc3RfYWRkX3RhaWwoJmRldl9yZXEtPmxpc3QsICZlbmdpbmUtPmluX3Byb2dyZXNzKTsKLQkJc3BhY2NfYWJsa19zdWJtaXQoZGV2X3JlcSk7CisJCWxpc3RfYWRkX3RhaWwoJmRldl9yZXEtPmxpc3QsICZlbmdpbmUtPnBlbmRpbmcpOworCQlzcGFjY19wdXNoKGVuZ2luZSk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZ2luZS0+aHdfbG9jaywgZmxhZ3MpOwogCkBAIC0xMTM5LDYgKzExNTksNyBAQAogCQlyZXEgPSBsaXN0X2ZpcnN0X2VudHJ5KCZlbmdpbmUtPmluX3Byb2dyZXNzLCBzdHJ1Y3Qgc3BhY2NfcmVxLAogCQkJCSAgICAgICBsaXN0KTsKIAkJbGlzdF9tb3ZlX3RhaWwoJnJlcS0+bGlzdCwgJmVuZ2luZS0+Y29tcGxldGVkKTsKKwkJLS1lbmdpbmUtPmluX2ZsaWdodDsKIAogCQkvKiBQT1AgdGhlIHN0YXR1cyByZWdpc3Rlci4gKi8KIAkJd3JpdGVsKH4wLCBlbmdpbmUtPnJlZ3MgKyBTUEFfU1RBVF9QT1BfUkVHX09GRlNFVCk7CkBAIC0xMjA4LDM2ICsxMjI5LDIxIEBACiAJc3RydWN0IHNwYWNjX2VuZ2luZSAqZW5naW5lID0gKHN0cnVjdCBzcGFjY19lbmdpbmUgKilkYXRhOwogCXN0cnVjdCBzcGFjY19yZXEgKnJlcSwgKnRtcDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBudW1fcmVtb3ZlZCA9IDA7CiAJTElTVF9IRUFEKGNvbXBsZXRlZCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZW5naW5lLT5od19sb2NrLCBmbGFncyk7CisKIAlsaXN0X3NwbGljZV9pbml0KCZlbmdpbmUtPmNvbXBsZXRlZCwgJmNvbXBsZXRlZCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT5od19sb2NrLCBmbGFncyk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCB0bXAsICZjb21wbGV0ZWQsIGxpc3QpIHsKLQkJKytudW1fcmVtb3ZlZDsKLQkJcmVxLT5jb21wbGV0ZShyZXEpOwotCX0KLQotCS8qIFRyeSBhbmQgZmlsbCB0aGUgZW5naW5lIGJhY2sgdXAgYWdhaW4uICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmVuZ2luZS0+aHdfbG9jaywgZmxhZ3MpOwotCi0JZW5naW5lLT5pbl9mbGlnaHQgLT0gbnVtX3JlbW92ZWQ7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCB0bXAsICZlbmdpbmUtPnBlbmRpbmcsIGxpc3QpIHsKLQkJaWYgKHNwYWNjX2ZpZm9fY21kX2Z1bGwoZW5naW5lKSkKLQkJCWJyZWFrOwotCi0JCWxpc3RfbW92ZV90YWlsKCZyZXEtPmxpc3QsICZlbmdpbmUtPmluX3Byb2dyZXNzKTsKLQkJKytlbmdpbmUtPmluX2ZsaWdodDsKLQkJcmVxLT5yZXN1bHQgPSBzcGFjY19yZXFfc3VibWl0KHJlcSk7Ci0JfQotCisJc3BhY2NfcHVzaChlbmdpbmUpOwogCWlmIChlbmdpbmUtPmluX2ZsaWdodCkKIAkJbW9kX3RpbWVyKCZlbmdpbmUtPnBhY2tldF90aW1lb3V0LCBqaWZmaWVzICsgUEFDS0VUX1RJTUVPVVQpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT5od19sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCB0bXAsICZjb21wbGV0ZWQsIGxpc3QpIHsKKwkJcmVxLT5jb21wbGV0ZShyZXEpOworCQlsaXN0X2RlbCgmcmVxLT5saXN0KTsKKwl9CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL3M1cC1zc3MuYyBiL2RyaXZlcnMvY3J5cHRvL3M1cC1zc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTE1NDE3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jcnlwdG8vczVwLXNzcy5jCkBAIC0wLDAgKzEsNzAxIEBACisvKgorICogQ3J5cHRvZ3JhcGhpYyBBUEkuCisgKgorICogU3VwcG9ydCBmb3IgU2Ftc3VuZyBTNVBWMjEwIEhXIGFjY2VsZXJhdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTmV0VVAgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjaW5jbHVkZSA8Y3J5cHRvL2FsZ2FwaS5oPgorI2luY2x1ZGUgPGNyeXB0by9hZXMuaD4KKyNpbmNsdWRlIDxjcnlwdG8vY3RyLmg+CisKKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvZG1hLmg+CisKKyNkZWZpbmUgX1NCRihzLCB2KSAgICAgICAgICAgICAgICAgICAgICAoKHYpIDw8IChzKSkKKyNkZWZpbmUgX0JJVChiKSAgICAgICAgICAgICAgICAgICAgICAgICBfU0JGKGIsIDEpCisKKy8qIEZlZWQgY29udHJvbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgU1NTX1JFR19GQ0lOVFNUQVQgICAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgU1NTX0ZDSU5UU1RBVF9CUkRNQUlOVCAgICAgICAgICBfQklUKDMpCisjZGVmaW5lIFNTU19GQ0lOVFNUQVRfQlRETUFJTlQgICAgICAgICAgX0JJVCgyKQorI2RlZmluZSBTU1NfRkNJTlRTVEFUX0hSRE1BSU5UICAgICAgICAgIF9CSVQoMSkKKyNkZWZpbmUgU1NTX0ZDSU5UU1RBVF9QS0RNQUlOVCAgICAgICAgICBfQklUKDApCisKKyNkZWZpbmUgU1NTX1JFR19GQ0lOVEVOU0VUICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgU1NTX0ZDSU5URU5TRVRfQlJETUFJTlRFTlNFVCAgICBfQklUKDMpCisjZGVmaW5lIFNTU19GQ0lOVEVOU0VUX0JURE1BSU5URU5TRVQgICAgX0JJVCgyKQorI2RlZmluZSBTU1NfRkNJTlRFTlNFVF9IUkRNQUlOVEVOU0VUICAgIF9CSVQoMSkKKyNkZWZpbmUgU1NTX0ZDSU5URU5TRVRfUEtETUFJTlRFTlNFVCAgICBfQklUKDApCisKKyNkZWZpbmUgU1NTX1JFR19GQ0lOVEVOQ0xSICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgU1NTX0ZDSU5URU5DTFJfQlJETUFJTlRFTkNMUiAgICBfQklUKDMpCisjZGVmaW5lIFNTU19GQ0lOVEVOQ0xSX0JURE1BSU5URU5DTFIgICAgX0JJVCgyKQorI2RlZmluZSBTU1NfRkNJTlRFTkNMUl9IUkRNQUlOVEVOQ0xSICAgIF9CSVQoMSkKKyNkZWZpbmUgU1NTX0ZDSU5URU5DTFJfUEtETUFJTlRFTkNMUiAgICBfQklUKDApCisKKyNkZWZpbmUgU1NTX1JFR19GQ0lOVFBFTkQgICAgICAgICAgICAgICAweDAwMEMKKyNkZWZpbmUgU1NTX0ZDSU5UUEVORF9CUkRNQUlOVFAgICAgICAgICBfQklUKDMpCisjZGVmaW5lIFNTU19GQ0lOVFBFTkRfQlRETUFJTlRQICAgICAgICAgX0JJVCgyKQorI2RlZmluZSBTU1NfRkNJTlRQRU5EX0hSRE1BSU5UUCAgICAgICAgIF9CSVQoMSkKKyNkZWZpbmUgU1NTX0ZDSU5UUEVORF9QS0RNQUlOVFAgICAgICAgICBfQklUKDApCisKKyNkZWZpbmUgU1NTX1JFR19GQ0ZJRk9TVEFUICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgU1NTX0ZDRklGT1NUQVRfQlJGSUZPRlVMICAgICAgICBfQklUKDcpCisjZGVmaW5lIFNTU19GQ0ZJRk9TVEFUX0JSRklGT0VNUCAgICAgICAgX0JJVCg2KQorI2RlZmluZSBTU1NfRkNGSUZPU1RBVF9CVEZJRk9GVUwgICAgICAgIF9CSVQoNSkKKyNkZWZpbmUgU1NTX0ZDRklGT1NUQVRfQlRGSUZPRU1QICAgICAgICBfQklUKDQpCisjZGVmaW5lIFNTU19GQ0ZJRk9TVEFUX0hSRklGT0ZVTCAgICAgICAgX0JJVCgzKQorI2RlZmluZSBTU1NfRkNGSUZPU1RBVF9IUkZJRk9FTVAgICAgICAgIF9CSVQoMikKKyNkZWZpbmUgU1NTX0ZDRklGT1NUQVRfUEtGSUZPRlVMICAgICAgICBfQklUKDEpCisjZGVmaW5lIFNTU19GQ0ZJRk9TVEFUX1BLRklGT0VNUCAgICAgICAgX0JJVCgwKQorCisjZGVmaW5lIFNTU19SRUdfRkNGSUZPQ1RSTCAgICAgICAgICAgICAgMHgwMDE0CisjZGVmaW5lIFNTU19GQ0ZJRk9DVFJMX0RFU1NFTCAgICAgICAgICAgX0JJVCgyKQorI2RlZmluZSBTU1NfSEFTSElOX0lOREVQRU5ERU5UICAgICAgICAgIF9TQkYoMCwgMHgwMCkKKyNkZWZpbmUgU1NTX0hBU0hJTl9DSVBIRVJfSU5QVVQgICAgICAgICBfU0JGKDAsIDB4MDEpCisjZGVmaW5lIFNTU19IQVNISU5fQ0lQSEVSX09VVFBVVCAgICAgICAgX1NCRigwLCAweDAyKQorCisjZGVmaW5lIFNTU19SRUdfRkNCUkRNQVMgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFNTU19SRUdfRkNCUkRNQUwgICAgICAgICAgICAgICAgMHgwMDI0CisjZGVmaW5lIFNTU19SRUdfRkNCUkRNQUMgICAgICAgICAgICAgICAgMHgwMDI4CisjZGVmaW5lIFNTU19GQ0JSRE1BQ19CWVRFU1dBUCAgICAgICAgICAgX0JJVCgxKQorI2RlZmluZSBTU1NfRkNCUkRNQUNfRkxVU0ggICAgICAgICAgICAgIF9CSVQoMCkKKworI2RlZmluZSBTU1NfUkVHX0ZDQlRETUFTICAgICAgICAgICAgICAgIDB4MDAzMAorI2RlZmluZSBTU1NfUkVHX0ZDQlRETUFMICAgICAgICAgICAgICAgIDB4MDAzNAorI2RlZmluZSBTU1NfUkVHX0ZDQlRETUFDICAgICAgICAgICAgICAgIDB4MDAzOAorI2RlZmluZSBTU1NfRkNCVERNQUNfQllURVNXQVAgICAgICAgICAgIF9CSVQoMSkKKyNkZWZpbmUgU1NTX0ZDQlRETUFDX0ZMVVNIICAgICAgICAgICAgICBfQklUKDApCisKKyNkZWZpbmUgU1NTX1JFR19GQ0hSRE1BUyAgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgU1NTX1JFR19GQ0hSRE1BTCAgICAgICAgICAgICAgICAweDAwNDQKKyNkZWZpbmUgU1NTX1JFR19GQ0hSRE1BQyAgICAgICAgICAgICAgICAweDAwNDgKKyNkZWZpbmUgU1NTX0ZDSFJETUFDX0JZVEVTV0FQICAgICAgICAgICBfQklUKDEpCisjZGVmaW5lIFNTU19GQ0hSRE1BQ19GTFVTSCAgICAgICAgICAgICAgX0JJVCgwKQorCisjZGVmaW5lIFNTU19SRUdfRkNQS0RNQVMgICAgICAgICAgICAgICAgMHgwMDUwCisjZGVmaW5lIFNTU19SRUdfRkNQS0RNQUwgICAgICAgICAgICAgICAgMHgwMDU0CisjZGVmaW5lIFNTU19SRUdfRkNQS0RNQUMgICAgICAgICAgICAgICAgMHgwMDU4CisjZGVmaW5lIFNTU19GQ1BLRE1BQ19CWVRFU1dBUCAgICAgICAgICAgX0JJVCgzKQorI2RlZmluZSBTU1NfRkNQS0RNQUNfREVTQ0VORCAgICAgICAgICAgIF9CSVQoMikKKyNkZWZpbmUgU1NTX0ZDUEtETUFDX1RSQU5TTUlUICAgICAgICAgICBfQklUKDEpCisjZGVmaW5lIFNTU19GQ1BLRE1BQ19GTFVTSCAgICAgICAgICAgICAgX0JJVCgwKQorCisjZGVmaW5lIFNTU19SRUdfRkNQS0RNQU8gICAgICAgICAgICAgICAgMHgwMDVDCisKKy8qIEFFUyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgU1NTX1JFR19BRVNfQ09OVFJPTCAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgU1NTX0FFU19CWVRFU1dBUF9ESSAgICAgICAgICAgICBfQklUKDExKQorI2RlZmluZSBTU1NfQUVTX0JZVEVTV0FQX0RPICAgICAgICAgICAgIF9CSVQoMTApCisjZGVmaW5lIFNTU19BRVNfQllURVNXQVBfSVYgICAgICAgICAgICAgX0JJVCg5KQorI2RlZmluZSBTU1NfQUVTX0JZVEVTV0FQX0NOVCAgICAgICAgICAgIF9CSVQoOCkKKyNkZWZpbmUgU1NTX0FFU19CWVRFU1dBUF9LRVkgICAgICAgICAgICBfQklUKDcpCisjZGVmaW5lIFNTU19BRVNfS0VZX0NIQU5HRV9NT0RFICAgICAgICAgX0JJVCg2KQorI2RlZmluZSBTU1NfQUVTX0tFWV9TSVpFXzEyOCAgICAgICAgICAgIF9TQkYoNCwgMHgwMCkKKyNkZWZpbmUgU1NTX0FFU19LRVlfU0laRV8xOTIgICAgICAgICAgICBfU0JGKDQsIDB4MDEpCisjZGVmaW5lIFNTU19BRVNfS0VZX1NJWkVfMjU2ICAgICAgICAgICAgX1NCRig0LCAweDAyKQorI2RlZmluZSBTU1NfQUVTX0ZJRk9fTU9ERSAgICAgICAgICAgICAgIF9CSVQoMykKKyNkZWZpbmUgU1NTX0FFU19DSEFJTl9NT0RFX0VDQiAgICAgICAgICBfU0JGKDEsIDB4MDApCisjZGVmaW5lIFNTU19BRVNfQ0hBSU5fTU9ERV9DQkMgICAgICAgICAgX1NCRigxLCAweDAxKQorI2RlZmluZSBTU1NfQUVTX0NIQUlOX01PREVfQ1RSICAgICAgICAgIF9TQkYoMSwgMHgwMikKKyNkZWZpbmUgU1NTX0FFU19NT0RFX0RFQ1JZUFQgICAgICAgICAgICBfQklUKDApCisKKyNkZWZpbmUgU1NTX1JFR19BRVNfU1RBVFVTICAgICAgICAgICAgICAweDQwMDQKKyNkZWZpbmUgU1NTX0FFU19CVVNZICAgICAgICAgICAgICAgICAgICBfQklUKDIpCisjZGVmaW5lIFNTU19BRVNfSU5QVVRfUkVBRFkgICAgICAgICAgICAgX0JJVCgxKQorI2RlZmluZSBTU1NfQUVTX09VVFBVVF9SRUFEWSAgICAgICAgICAgIF9CSVQoMCkKKworI2RlZmluZSBTU1NfUkVHX0FFU19JTl9EQVRBKHMpICAgICAgICAgICgweDQwMTAgKyAocyA8PCAyKSkKKyNkZWZpbmUgU1NTX1JFR19BRVNfT1VUX0RBVEEocykgICAgICAgICAoMHg0MDIwICsgKHMgPDwgMikpCisjZGVmaW5lIFNTU19SRUdfQUVTX0lWX0RBVEEocykgICAgICAgICAgKDB4NDAzMCArIChzIDw8IDIpKQorI2RlZmluZSBTU1NfUkVHX0FFU19DTlRfREFUQShzKSAgICAgICAgICgweDQwNDAgKyAocyA8PCAyKSkKKyNkZWZpbmUgU1NTX1JFR19BRVNfS0VZX0RBVEEocykgICAgICAgICAoMHg0MDgwICsgKHMgPDwgMikpCisKKyNkZWZpbmUgU1NTX1JFRyhkZXYsIHJlZykgICAgICAgICAgICAgICAoKGRldiktPmlvYWRkciArIChTU1NfUkVHXyMjcmVnKSkKKyNkZWZpbmUgU1NTX1JFQUQoZGV2LCByZWcpICAgICAgICAgICAgICBfX3Jhd19yZWFkbChTU1NfUkVHKGRldiwgcmVnKSkKKyNkZWZpbmUgU1NTX1dSSVRFKGRldiwgcmVnLCB2YWwpICAgICAgICBfX3Jhd193cml0ZWwoKHZhbCksIFNTU19SRUcoZGV2LCByZWcpKQorCisvKiBIVyBlbmdpbmUgbW9kZXMgKi8KKyNkZWZpbmUgRkxBR1NfQUVTX0RFQ1JZUFQgICAgICAgICAgICAgICBfQklUKDApCisjZGVmaW5lIEZMQUdTX0FFU19NT0RFX01BU0sgICAgICAgICAgICAgX1NCRigxLCAweDAzKQorI2RlZmluZSBGTEFHU19BRVNfQ0JDICAgICAgICAgICAgICAgICAgIF9TQkYoMSwgMHgwMSkKKyNkZWZpbmUgRkxBR1NfQUVTX0NUUiAgICAgICAgICAgICAgICAgICBfU0JGKDEsIDB4MDIpCisKKyNkZWZpbmUgQUVTX0tFWV9MRU4gICAgICAgICAxNgorI2RlZmluZSBDUllQVE9fUVVFVUVfTEVOICAgIDEKKworc3RydWN0IHM1cF9hZXNfcmVxY3R4IHsKKwl1bnNpZ25lZCBsb25nIG1vZGU7Cit9OworCitzdHJ1Y3QgczVwX2Flc19jdHggeworCXN0cnVjdCBzNXBfYWVzX2RldiAgICAgICAgICpkZXY7CisKKwl1aW50OF90ICAgICAgICAgICAgICAgICAgICAgYWVzX2tleVtBRVNfTUFYX0tFWV9TSVpFXTsKKwl1aW50OF90ICAgICAgICAgICAgICAgICAgICAgbm9uY2VbQ1RSX1JGQzM2ODZfTk9OQ0VfU0laRV07CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGtleWxlbjsKK307CisKK3N0cnVjdCBzNXBfYWVzX2RldiB7CisJc3RydWN0IGRldmljZSAgICAgICAgICAgICAgKmRldjsKKwlzdHJ1Y3QgY2xrICAgICAgICAgICAgICAgICAqY2xrOworCXZvaWQgX19pb21lbSAgICAgICAgICAgICAgICppb2FkZHI7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGlycV9oYXNoOworCWludCAgICAgICAgICAgICAgICAgICAgICAgICBpcnFfZmM7CisKKwlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICAqcmVxOworCXN0cnVjdCBzNXBfYWVzX2N0eCAgICAgICAgICpjdHg7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICAgICAgICAgKnNnX3NyYzsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgICAgICAgICAqc2dfZHN0OworCisJc3RydWN0IHRhc2tsZXRfc3RydWN0ICAgICAgIHRhc2tsZXQ7CisJc3RydWN0IGNyeXB0b19xdWV1ZSAgICAgICAgIHF1ZXVlOworCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICBidXN5OworCXNwaW5sb2NrX3QgICAgICAgICAgICAgICAgICBsb2NrOworfTsKKworc3RhdGljIHN0cnVjdCBzNXBfYWVzX2RldiAqczVwX2RldjsKKworc3RhdGljIHZvaWQgczVwX3NldF9kbWFfaW5kYXRhKHN0cnVjdCBzNXBfYWVzX2RldiAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnKQoreworCVNTU19XUklURShkZXYsIEZDQlJETUFTLCBzZ19kbWFfYWRkcmVzcyhzZykpOworCVNTU19XUklURShkZXYsIEZDQlJETUFMLCBzZ19kbWFfbGVuKHNnKSk7Cit9CisKK3N0YXRpYyB2b2lkIHM1cF9zZXRfZG1hX291dGRhdGEoc3RydWN0IHM1cF9hZXNfZGV2ICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2cpCit7CisJU1NTX1dSSVRFKGRldiwgRkNCVERNQVMsIHNnX2RtYV9hZGRyZXNzKHNnKSk7CisJU1NTX1dSSVRFKGRldiwgRkNCVERNQUwsIHNnX2RtYV9sZW4oc2cpKTsKK30KKworc3RhdGljIHZvaWQgczVwX2Flc19jb21wbGV0ZShzdHJ1Y3QgczVwX2Flc19kZXYgKmRldiwgaW50IGVycikKK3sKKwkvKiBob2xkaW5nIGEgbG9jayBvdXRzaWRlICovCisJZGV2LT5yZXEtPmJhc2UuY29tcGxldGUoJmRldi0+cmVxLT5iYXNlLCBlcnIpOworCWRldi0+YnVzeSA9IGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBzNXBfdW5zZXRfb3V0ZGF0YShzdHJ1Y3QgczVwX2Flc19kZXYgKmRldikKK3sKKwlkbWFfdW5tYXBfc2coZGV2LT5kZXYsIGRldi0+c2dfZHN0LCAxLCBETUFfRlJPTV9ERVZJQ0UpOworfQorCitzdGF0aWMgdm9pZCBzNXBfdW5zZXRfaW5kYXRhKHN0cnVjdCBzNXBfYWVzX2RldiAqZGV2KQoreworCWRtYV91bm1hcF9zZyhkZXYtPmRldiwgZGV2LT5zZ19zcmMsIDEsIERNQV9UT19ERVZJQ0UpOworfQorCitzdGF0aWMgaW50IHM1cF9zZXRfb3V0ZGF0YShzdHJ1Y3QgczVwX2Flc19kZXYgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZykKK3sKKwlpbnQgZXJyOworCisJaWYgKCFJU19BTElHTkVEKHNnX2RtYV9sZW4oc2cpLCBBRVNfQkxPQ0tfU0laRSkpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKwlpZiAoIXNnX2RtYV9sZW4oc2cpKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXhpdDsKKwl9CisKKwllcnIgPSBkbWFfbWFwX3NnKGRldi0+ZGV2LCBzZywgMSwgRE1BX0ZST01fREVWSUNFKTsKKwlpZiAoIWVycikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGV4aXQ7CisJfQorCisJZGV2LT5zZ19kc3QgPSBzZzsKKwllcnIgPSAwOworCisgZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHM1cF9zZXRfaW5kYXRhKHN0cnVjdCBzNXBfYWVzX2RldiAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnKQoreworCWludCBlcnI7CisKKwlpZiAoIUlTX0FMSUdORUQoc2dfZG1hX2xlbihzZyksIEFFU19CTE9DS19TSVpFKSkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCWlmICghc2dfZG1hX2xlbihzZykpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworCWVyciA9IGRtYV9tYXBfc2coZGV2LT5kZXYsIHNnLCAxLCBETUFfVE9fREVWSUNFKTsKKwlpZiAoIWVycikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGV4aXQ7CisJfQorCisJZGV2LT5zZ19zcmMgPSBzZzsKKwllcnIgPSAwOworCisgZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBzNXBfYWVzX3R4KHN0cnVjdCBzNXBfYWVzX2RldiAqZGV2KQoreworCWludCBlcnIgPSAwOworCisJczVwX3Vuc2V0X291dGRhdGEoZGV2KTsKKworCWlmICghc2dfaXNfbGFzdChkZXYtPnNnX2RzdCkpIHsKKwkJZXJyID0gczVwX3NldF9vdXRkYXRhKGRldiwgc2dfbmV4dChkZXYtPnNnX2RzdCkpOworCQlpZiAoZXJyKSB7CisJCQlzNXBfYWVzX2NvbXBsZXRlKGRldiwgZXJyKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXM1cF9zZXRfZG1hX291dGRhdGEoZGV2LCBkZXYtPnNnX2RzdCk7CisJfSBlbHNlCisJCXM1cF9hZXNfY29tcGxldGUoZGV2LCBlcnIpOworfQorCitzdGF0aWMgdm9pZCBzNXBfYWVzX3J4KHN0cnVjdCBzNXBfYWVzX2RldiAqZGV2KQoreworCWludCBlcnI7CisKKwlzNXBfdW5zZXRfaW5kYXRhKGRldik7CisKKwlpZiAoIXNnX2lzX2xhc3QoZGV2LT5zZ19zcmMpKSB7CisJCWVyciA9IHM1cF9zZXRfaW5kYXRhKGRldiwgc2dfbmV4dChkZXYtPnNnX3NyYykpOworCQlpZiAoZXJyKSB7CisJCQlzNXBfYWVzX2NvbXBsZXRlKGRldiwgZXJyKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXM1cF9zZXRfZG1hX2luZGF0YShkZXYsIGRldi0+c2dfc3JjKTsKKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzNXBfYWVzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGRldl9pZDsKKwlzdHJ1Y3QgczVwX2Flc19kZXYgICAgICpkZXYgID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJdWludDMyX3QgICAgICAgICAgICAgICAgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgICAgICAgICAgIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jaywgZmxhZ3MpOworCisJaWYgKGlycSA9PSBkZXYtPmlycV9mYykgeworCQlzdGF0dXMgPSBTU1NfUkVBRChkZXYsIEZDSU5UU1RBVCk7CisJCWlmIChzdGF0dXMgJiBTU1NfRkNJTlRTVEFUX0JSRE1BSU5UKQorCQkJczVwX2Flc19yeChkZXYpOworCQlpZiAoc3RhdHVzICYgU1NTX0ZDSU5UU1RBVF9CVERNQUlOVCkKKwkJCXM1cF9hZXNfdHgoZGV2KTsKKworCQlTU1NfV1JJVEUoZGV2LCBGQ0lOVFBFTkQsIHN0YXR1cyk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHM1cF9zZXRfYWVzKHN0cnVjdCBzNXBfYWVzX2RldiAqZGV2LAorCQkJdWludDhfdCAqa2V5LCB1aW50OF90ICppdiwgdW5zaWduZWQgaW50IGtleWxlbikKK3sKKwl2b2lkIF9faW9tZW0gKmtleXN0YXJ0OworCisJbWVtY3B5KGRldi0+aW9hZGRyICsgU1NTX1JFR19BRVNfSVZfREFUQSgwKSwgaXYsIDB4MTApOworCisJaWYgKGtleWxlbiA9PSBBRVNfS0VZU0laRV8yNTYpCisJCWtleXN0YXJ0ID0gZGV2LT5pb2FkZHIgKyBTU1NfUkVHX0FFU19LRVlfREFUQSgwKTsKKwllbHNlIGlmIChrZXlsZW4gPT0gQUVTX0tFWVNJWkVfMTkyKQorCQlrZXlzdGFydCA9IGRldi0+aW9hZGRyICsgU1NTX1JFR19BRVNfS0VZX0RBVEEoMik7CisJZWxzZQorCQlrZXlzdGFydCA9IGRldi0+aW9hZGRyICsgU1NTX1JFR19BRVNfS0VZX0RBVEEoNCk7CisKKwltZW1jcHkoa2V5c3RhcnQsIGtleSwga2V5bGVuKTsKK30KKworc3RhdGljIHZvaWQgczVwX2Flc19jcnlwdF9zdGFydChzdHJ1Y3QgczVwX2Flc19kZXYgKmRldiwgdW5zaWduZWQgbG9uZyBtb2RlKQoreworCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgICpyZXEgPSBkZXYtPnJlcTsKKworCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgICBhZXNfY29udHJvbDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgZXJyOworCXVuc2lnbmVkIGxvbmcgICAgICAgICAgICAgICBmbGFnczsKKworCWFlc19jb250cm9sID0gU1NTX0FFU19LRVlfQ0hBTkdFX01PREU7CisJaWYgKG1vZGUgJiBGTEFHU19BRVNfREVDUllQVCkKKwkJYWVzX2NvbnRyb2wgfD0gU1NTX0FFU19NT0RFX0RFQ1JZUFQ7CisKKwlpZiAoKG1vZGUgJiBGTEFHU19BRVNfTU9ERV9NQVNLKSA9PSBGTEFHU19BRVNfQ0JDKQorCQlhZXNfY29udHJvbCB8PSBTU1NfQUVTX0NIQUlOX01PREVfQ0JDOworCWVsc2UgaWYgKChtb2RlICYgRkxBR1NfQUVTX01PREVfTUFTSykgPT0gRkxBR1NfQUVTX0NUUikKKwkJYWVzX2NvbnRyb2wgfD0gU1NTX0FFU19DSEFJTl9NT0RFX0NUUjsKKworCWlmIChkZXYtPmN0eC0+a2V5bGVuID09IEFFU19LRVlTSVpFXzE5MikKKwkJYWVzX2NvbnRyb2wgfD0gU1NTX0FFU19LRVlfU0laRV8xOTI7CisJZWxzZSBpZiAoZGV2LT5jdHgtPmtleWxlbiA9PSBBRVNfS0VZU0laRV8yNTYpCisJCWFlc19jb250cm9sIHw9IFNTU19BRVNfS0VZX1NJWkVfMjU2OworCisJYWVzX2NvbnRyb2wgfD0gU1NTX0FFU19GSUZPX01PREU7CisKKwkvKiBhcyBhIHZhcmlhbnQgaXQgaXMgcG9zc2libGUgdG8gdXNlIGJ5dGUgc3dhcHBpbmcgb24gRE1BIHNpZGUgKi8KKwlhZXNfY29udHJvbCB8PSBTU1NfQUVTX0JZVEVTV0FQX0RJCisJCSAgICB8ICBTU1NfQUVTX0JZVEVTV0FQX0RPCisJCSAgICB8ICBTU1NfQUVTX0JZVEVTV0FQX0lWCisJCSAgICB8ICBTU1NfQUVTX0JZVEVTV0FQX0tFWQorCQkgICAgfCAgU1NTX0FFU19CWVRFU1dBUF9DTlQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlTU1NfV1JJVEUoZGV2LCBGQ0lOVEVOQ0xSLAorCQkgIFNTU19GQ0lOVEVOQ0xSX0JURE1BSU5URU5DTFIgfCBTU1NfRkNJTlRFTkNMUl9CUkRNQUlOVEVOQ0xSKTsKKwlTU1NfV1JJVEUoZGV2LCBGQ0ZJRk9DVFJMLCAweDAwKTsKKworCWVyciA9IHM1cF9zZXRfaW5kYXRhKGRldiwgcmVxLT5zcmMpOworCWlmIChlcnIpCisJCWdvdG8gaW5kYXRhX2Vycm9yOworCisJZXJyID0gczVwX3NldF9vdXRkYXRhKGRldiwgcmVxLT5kc3QpOworCWlmIChlcnIpCisJCWdvdG8gb3V0ZGF0YV9lcnJvcjsKKworCVNTU19XUklURShkZXYsIEFFU19DT05UUk9MLCBhZXNfY29udHJvbCk7CisJczVwX3NldF9hZXMoZGV2LCBkZXYtPmN0eC0+YWVzX2tleSwgcmVxLT5pbmZvLCBkZXYtPmN0eC0+a2V5bGVuKTsKKworCXM1cF9zZXRfZG1hX2luZGF0YShkZXYsICByZXEtPnNyYyk7CisJczVwX3NldF9kbWFfb3V0ZGF0YShkZXYsIHJlcS0+ZHN0KTsKKworCVNTU19XUklURShkZXYsIEZDSU5URU5TRVQsCisJCSAgU1NTX0ZDSU5URU5TRVRfQlRETUFJTlRFTlNFVCB8IFNTU19GQ0lOVEVOU0VUX0JSRE1BSU5URU5TRVQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm47CisKKyBvdXRkYXRhX2Vycm9yOgorCXM1cF91bnNldF9pbmRhdGEoZGV2KTsKKworIGluZGF0YV9lcnJvcjoKKwlzNXBfYWVzX2NvbXBsZXRlKGRldiwgZXJyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgczVwX3Rhc2tsZXRfY2IodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBzNXBfYWVzX2RldiAqZGV2ID0gKHN0cnVjdCBzNXBfYWVzX2RldiAqKWRhdGE7CisJc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICphc3luY19yZXEsICpiYWNrbG9nOworCXN0cnVjdCBzNXBfYWVzX3JlcWN0eCAqcmVxY3R4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLCBmbGFncyk7CisJYmFja2xvZyAgID0gY3J5cHRvX2dldF9iYWNrbG9nKCZkZXYtPnF1ZXVlKTsKKwlhc3luY19yZXEgPSBjcnlwdG9fZGVxdWV1ZV9yZXF1ZXN0KCZkZXYtPnF1ZXVlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCWlmICghYXN5bmNfcmVxKQorCQlyZXR1cm47CisKKwlpZiAoYmFja2xvZykKKwkJYmFja2xvZy0+Y29tcGxldGUoYmFja2xvZywgLUVJTlBST0dSRVNTKTsKKworCWRldi0+cmVxID0gYWJsa2NpcGhlcl9yZXF1ZXN0X2Nhc3QoYXN5bmNfcmVxKTsKKwlkZXYtPmN0eCA9IGNyeXB0b190Zm1fY3R4KGRldi0+cmVxLT5iYXNlLnRmbSk7CisJcmVxY3R4ICAgPSBhYmxrY2lwaGVyX3JlcXVlc3RfY3R4KGRldi0+cmVxKTsKKworCXM1cF9hZXNfY3J5cHRfc3RhcnQoZGV2LCByZXFjdHgtPm1vZGUpOworfQorCitzdGF0aWMgaW50IHM1cF9hZXNfaGFuZGxlX3JlcShzdHJ1Y3QgczVwX2Flc19kZXYgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnI7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLCBmbGFncyk7CisJaWYgKGRldi0+YnVzeSkgeworCQllcnIgPSAtRUFHQUlOOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwkJZ290byBleGl0OworCX0KKwlkZXYtPmJ1c3kgPSB0cnVlOworCisJZXJyID0gYWJsa2NpcGhlcl9lbnF1ZXVlX3JlcXVlc3QoJmRldi0+cXVldWUsIHJlcSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisKKwl0YXNrbGV0X3NjaGVkdWxlKCZkZXYtPnRhc2tsZXQpOworCisgZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHM1cF9hZXNfY3J5cHQoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxLCB1bnNpZ25lZCBsb25nIG1vZGUpCit7CisJc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICAgKnRmbSAgICA9IGNyeXB0b19hYmxrY2lwaGVyX3JlcXRmbShyZXEpOworCXN0cnVjdCBzNXBfYWVzX2N0eCAgICAgICAgICpjdHggICAgPSBjcnlwdG9fYWJsa2NpcGhlcl9jdHgodGZtKTsKKwlzdHJ1Y3QgczVwX2Flc19yZXFjdHggICAgICAqcmVxY3R4ID0gYWJsa2NpcGhlcl9yZXF1ZXN0X2N0eChyZXEpOworCXN0cnVjdCBzNXBfYWVzX2RldiAgICAgICAgICpkZXYgICAgPSBjdHgtPmRldjsKKworCWlmICghSVNfQUxJR05FRChyZXEtPm5ieXRlcywgQUVTX0JMT0NLX1NJWkUpKSB7CisJCXByX2VycigicmVxdWVzdCBzaXplIGlzIG5vdCBleGFjdCBhbW91bnQgb2YgQUVTIGJsb2Nrc1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJlcWN0eC0+bW9kZSA9IG1vZGU7CisKKwlyZXR1cm4gczVwX2Flc19oYW5kbGVfcmVxKGRldiwgcmVxKTsKK30KKworc3RhdGljIGludCBzNXBfYWVzX3NldGtleShzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKmNpcGhlciwKKwkJCSAgY29uc3QgdWludDhfdCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKQoreworCXN0cnVjdCBjcnlwdG9fdGZtICAqdGZtID0gY3J5cHRvX2FibGtjaXBoZXJfdGZtKGNpcGhlcik7CisJc3RydWN0IHM1cF9hZXNfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCisJaWYgKGtleWxlbiAhPSBBRVNfS0VZU0laRV8xMjggJiYKKwkgICAga2V5bGVuICE9IEFFU19LRVlTSVpFXzE5MiAmJgorCSAgICBrZXlsZW4gIT0gQUVTX0tFWVNJWkVfMjU2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbWNweShjdHgtPmFlc19rZXksIGtleSwga2V5bGVuKTsKKwljdHgtPmtleWxlbiA9IGtleWxlbjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHM1cF9hZXNfZWNiX2VuY3J5cHQoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKQoreworCXJldHVybiBzNXBfYWVzX2NyeXB0KHJlcSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgczVwX2Flc19lY2JfZGVjcnlwdChzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEpCit7CisJcmV0dXJuIHM1cF9hZXNfY3J5cHQocmVxLCBGTEFHU19BRVNfREVDUllQVCk7Cit9CisKK3N0YXRpYyBpbnQgczVwX2Flc19jYmNfZW5jcnlwdChzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEpCit7CisJcmV0dXJuIHM1cF9hZXNfY3J5cHQocmVxLCBGTEFHU19BRVNfQ0JDKTsKK30KKworc3RhdGljIGludCBzNXBfYWVzX2NiY19kZWNyeXB0KHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSkKK3sKKwlyZXR1cm4gczVwX2Flc19jcnlwdChyZXEsIEZMQUdTX0FFU19ERUNSWVBUIHwgRkxBR1NfQUVTX0NCQyk7Cit9CisKK3N0YXRpYyBpbnQgczVwX2Flc19jcmFfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXN0cnVjdCBzNXBfYWVzX2N0eCAgKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisKKwljdHgtPmRldiA9IHM1cF9kZXY7CisJdGZtLT5jcnRfYWJsa2NpcGhlci5yZXFzaXplID0gc2l6ZW9mKHN0cnVjdCBzNXBfYWVzX3JlcWN0eCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGFsZ3NbXSA9IHsKKwl7CisJCS5jcmFfbmFtZQkJPSAiZWNiKGFlcykiLAorCQkuY3JhX2RyaXZlcl9uYW1lCT0gImVjYi1hZXMtczVwIiwKKwkJLmNyYV9wcmlvcml0eQkJPSAxMDAsCisJCS5jcmFfZmxhZ3MJCT0gQ1JZUFRPX0FMR19UWVBFX0FCTEtDSVBIRVIgfAorCQkJCQkgIENSWVBUT19BTEdfQVNZTkMsCisJCS5jcmFfYmxvY2tzaXplCQk9IEFFU19CTE9DS19TSVpFLAorCQkuY3JhX2N0eHNpemUJCT0gc2l6ZW9mKHN0cnVjdCBzNXBfYWVzX2N0eCksCisJCS5jcmFfYWxpZ25tYXNrCQk9IDB4MGYsCisJCS5jcmFfdHlwZQkJPSAmY3J5cHRvX2FibGtjaXBoZXJfdHlwZSwKKwkJLmNyYV9tb2R1bGUJCT0gVEhJU19NT0RVTEUsCisJCS5jcmFfaW5pdAkJPSBzNXBfYWVzX2NyYV9pbml0LAorCQkuY3JhX3UuYWJsa2NpcGhlciA9IHsKKwkJCS5taW5fa2V5c2l6ZQk9IEFFU19NSU5fS0VZX1NJWkUsCisJCQkubWF4X2tleXNpemUJPSBBRVNfTUFYX0tFWV9TSVpFLAorCQkJLnNldGtleQkJPSBzNXBfYWVzX3NldGtleSwKKwkJCS5lbmNyeXB0CT0gczVwX2Flc19lY2JfZW5jcnlwdCwKKwkJCS5kZWNyeXB0CT0gczVwX2Flc19lY2JfZGVjcnlwdCwKKwkJfQorCX0sCisJeworCQkuY3JhX25hbWUJCT0gImNiYyhhZXMpIiwKKwkJLmNyYV9kcml2ZXJfbmFtZQk9ICJjYmMtYWVzLXM1cCIsCisJCS5jcmFfcHJpb3JpdHkJCT0gMTAwLAorCQkuY3JhX2ZsYWdzCQk9IENSWVBUT19BTEdfVFlQRV9BQkxLQ0lQSEVSIHwKKwkJCQkJICBDUllQVE9fQUxHX0FTWU5DLAorCQkuY3JhX2Jsb2Nrc2l6ZQkJPSBBRVNfQkxPQ0tfU0laRSwKKwkJLmNyYV9jdHhzaXplCQk9IHNpemVvZihzdHJ1Y3QgczVwX2Flc19jdHgpLAorCQkuY3JhX2FsaWdubWFzawkJPSAweDBmLAorCQkuY3JhX3R5cGUJCT0gJmNyeXB0b19hYmxrY2lwaGVyX3R5cGUsCisJCS5jcmFfbW9kdWxlCQk9IFRISVNfTU9EVUxFLAorCQkuY3JhX2luaXQJCT0gczVwX2Flc19jcmFfaW5pdCwKKwkJLmNyYV91LmFibGtjaXBoZXIgPSB7CisJCQkubWluX2tleXNpemUJPSBBRVNfTUlOX0tFWV9TSVpFLAorCQkJLm1heF9rZXlzaXplCT0gQUVTX01BWF9LRVlfU0laRSwKKwkJCS5pdnNpemUJCT0gQUVTX0JMT0NLX1NJWkUsCisJCQkuc2V0a2V5CQk9IHM1cF9hZXNfc2V0a2V5LAorCQkJLmVuY3J5cHQJPSBzNXBfYWVzX2NiY19lbmNyeXB0LAorCQkJLmRlY3J5cHQJPSBzNXBfYWVzX2NiY19kZWNyeXB0LAorCQl9CisJfSwKK307CisKK3N0YXRpYyBpbnQgczVwX2Flc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCAgICAgICAgICAgICAgICAgaSwgaiwgZXJyID0gLUVOT0RFVjsKKwlzdHJ1Y3QgczVwX2Flc19kZXYgKnBkYXRhOworCXN0cnVjdCBkZXZpY2UgICAgICAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgICAgKnJlczsKKworCWlmIChzNXBfZGV2KQorCQlyZXR1cm4gLUVFWElTVDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpCisJCXJldHVybiAtRU5PREVWOworCisJcGRhdGEgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoIWRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKGRldiwgcmVzLT5zdGFydCwKKwkJCQkgICAgIHJlc291cmNlX3NpemUocmVzKSwgcGRldi0+bmFtZSkpCisJCXJldHVybiAtRUJVU1k7CisKKwlwZGF0YS0+Y2xrID0gY2xrX2dldChkZXYsICJzZWNzcyIpOworCWlmIChJU19FUlIocGRhdGEtPmNsaykpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZmluZCBzZWNzcyBjbG9jayBzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwljbGtfZW5hYmxlKHBkYXRhLT5jbGspOworCisJc3Bpbl9sb2NrX2luaXQoJnBkYXRhLT5sb2NrKTsKKwlwZGF0YS0+aW9hZGRyID0gZGV2bV9pb3JlbWFwKGRldiwgcmVzLT5zdGFydCwKKwkJCQkgICAgIHJlc291cmNlX3NpemUocmVzKSk7CisKKwlwZGF0YS0+aXJxX2hhc2ggPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAiaGFzaCIpOworCWlmIChwZGF0YS0+aXJxX2hhc2ggPCAwKSB7CisJCWVyciA9IHBkYXRhLT5pcnFfaGFzaDsKKwkJZGV2X3dhcm4oZGV2LCAiaGFzaCBpbnRlcnJ1cHQgaXMgbm90IGF2YWlsYWJsZS5cbiIpOworCQlnb3RvIGVycl9pcnE7CisJfQorCWVyciA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBwZGF0YS0+aXJxX2hhc2gsIHM1cF9hZXNfaW50ZXJydXB0LAorCQkJICAgICAgIElSUUZfU0hBUkVELCBwZGV2LT5uYW1lLCBwZGV2KTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfd2FybihkZXYsICJoYXNoIGludGVycnVwdCBpcyBub3QgYXZhaWxhYmxlLlxuIik7CisJCWdvdG8gZXJyX2lycTsKKwl9CisKKwlwZGF0YS0+aXJxX2ZjID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgImZlZWQgY29udHJvbCIpOworCWlmIChwZGF0YS0+aXJxX2ZjIDwgMCkgeworCQllcnIgPSBwZGF0YS0+aXJxX2ZjOworCQlkZXZfd2FybihkZXYsICJmZWVkIGNvbnRyb2wgaW50ZXJydXB0IGlzIG5vdCBhdmFpbGFibGUuXG4iKTsKKwkJZ290byBlcnJfaXJxOworCX0KKwllcnIgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgcGRhdGEtPmlycV9mYywgczVwX2Flc19pbnRlcnJ1cHQsCisJCQkgICAgICAgSVJRRl9TSEFSRUQsIHBkZXYtPm5hbWUsIHBkZXYpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl93YXJuKGRldiwgImZlZWQgY29udHJvbCBpbnRlcnJ1cHQgaXMgbm90IGF2YWlsYWJsZS5cbiIpOworCQlnb3RvIGVycl9pcnE7CisJfQorCisJcGRhdGEtPmRldiA9IGRldjsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwZGF0YSk7CisJczVwX2RldiA9IHBkYXRhOworCisJdGFza2xldF9pbml0KCZwZGF0YS0+dGFza2xldCwgczVwX3Rhc2tsZXRfY2IsICh1bnNpZ25lZCBsb25nKXBkYXRhKTsKKwljcnlwdG9faW5pdF9xdWV1ZSgmcGRhdGEtPnF1ZXVlLCBDUllQVE9fUVVFVUVfTEVOKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFsZ3MpOyBpKyspIHsKKwkJSU5JVF9MSVNUX0hFQUQoJmFsZ3NbaV0uY3JhX2xpc3QpOworCQllcnIgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZhbGdzW2ldKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX2FsZ3M7CisJfQorCisJcHJfaW5mbygiczVwLXNzcyBkcml2ZXIgcmVnaXN0ZXJlZFxuIik7CisKKwlyZXR1cm4gMDsKKworIGVycl9hbGdzOgorCWRldl9lcnIoZGV2LCAiY2FuJ3QgcmVnaXN0ZXIgJyVzJzogJWRcbiIsIGFsZ3NbaV0uY3JhX25hbWUsIGVycik7CisKKwlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQorCQljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFsZ3Nbal0pOworCisJdGFza2xldF9raWxsKCZwZGF0YS0+dGFza2xldCk7CisKKyBlcnJfaXJxOgorCWNsa19kaXNhYmxlKHBkYXRhLT5jbGspOworCWNsa19wdXQocGRhdGEtPmNsayk7CisKKwlzNXBfZGV2ID0gTlVMTDsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgczVwX2Flc19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgczVwX2Flc19kZXYgKnBkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IGk7CisKKwlpZiAoIXBkYXRhKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFsZ3MpOyBpKyspCisJCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWxnc1tpXSk7CisKKwl0YXNrbGV0X2tpbGwoJnBkYXRhLT50YXNrbGV0KTsKKworCWNsa19kaXNhYmxlKHBkYXRhLT5jbGspOworCWNsa19wdXQocGRhdGEtPmNsayk7CisKKwlzNXBfZGV2ID0gTlVMTDsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzNXBfYWVzX2NyeXB0byA9IHsKKwkucHJvYmUJPSBzNXBfYWVzX3Byb2JlLAorCS5yZW1vdmUJPSBzNXBfYWVzX3JlbW92ZSwKKwkuZHJpdmVyCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSAiczVwLXNlY3NzIiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgczVwX2Flc19tb2RfaW5pdCh2b2lkKQoreworCXJldHVybiAgcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzNXBfYWVzX2NyeXB0byk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzNXBfYWVzX21vZF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnM1cF9hZXNfY3J5cHRvKTsKK30KKworbW9kdWxlX2luaXQoczVwX2Flc19tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzNXBfYWVzX21vZF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTNVBWMjEwIEFFUyBodyBhY2NlbGVyYXRpb24gc3VwcG9ydC4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BVVRIT1IoIlZsYWRpbWlyIFphcG9sc2tpeSA8dnphcG9sc2tpeUBnbWFpbC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0L2RtYS5jIGIvZHJpdmVycy9kbWEvaW9hdC9kbWEuYwppbmRleCBjOTIxM2VhLi5hNGQ2Y2IwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb2F0L2RtYS5jCisrKyBiL2RyaXZlcnMvZG1hL2lvYXQvZG1hLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlIDxsaW51eC9pNzMwMF9pZGxlLmg+CiAjaW5jbHVkZSAiZG1hLmgiCiAjaW5jbHVkZSAicmVnaXN0ZXJzLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0L2RtYV92Mi5jIGIvZHJpdmVycy9kbWEvaW9hdC9kbWFfdjIuYwppbmRleCBlZmZkMTQwLi5mNGE1MWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb2F0L2RtYV92Mi5jCisrKyBiL2RyaXZlcnMvZG1hL2lvYXQvZG1hX3YyLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlIDxsaW51eC9pNzMwMF9pZGxlLmg+CiAjaW5jbHVkZSAiZG1hLmgiCiAjaW5jbHVkZSAiZG1hX3YyLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0L2RtYV92My5jIGIvZHJpdmVycy9kbWEvaW9hdC9kbWFfdjMuYwppbmRleCBkMGY0OTkwLi5kODQ1ZGM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb2F0L2RtYV92My5jCisrKyBiL2RyaXZlcnMvZG1hL2lvYXQvZG1hX3YzLmMKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KICNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSAicmVnaXN0ZXJzLmgiCiAjaW5jbHVkZSAiaHcuaCIKICNpbmNsdWRlICJkbWEuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCmluZGV4IDMxZTcxYzRmLi45YThiZWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKQEAgLTIxMSw4ICsyMTEsNiBAQAogCiAJc2NydWJ2YWwgPSBzY3J1YnZhbCAmIDB4MDAxRjsKIAotCWFtZDY0X2RlYnVnKCJwY2ktcmVhZCwgc2RyYW0gc2NydWIgY29udHJvbCB2YWx1ZTogJWRcbiIsIHNjcnVidmFsKTsKLQogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNjcnVicmF0ZXMpOyBpKyspIHsKIAkJaWYgKHNjcnVicmF0ZXNbaV0uc2NydWJ2YWwgPT0gc2NydWJ2YWwpIHsKIAkJCXJldHZhbCA9IHNjcnVicmF0ZXNbaV0uYmFuZHdpZHRoOwpAQCAtOTMzLDI1ICs5MzEsNzQgQEAKIC8qIE9uIEYxMGggYW5kIGxhdGVyIEVyckFkZHIgaXMgTUM0X0FERFJbNDc6MV0gKi8KIHN0YXRpYyB1NjQgZ2V0X2Vycm9yX2FkZHJlc3Moc3RydWN0IG1jZSAqbSkKIHsKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmYm9vdF9jcHVfZGF0YTsKKwl1NjQgYWRkcjsKIAl1OCBzdGFydF9iaXQgPSAxOwogCXU4IGVuZF9iaXQgICA9IDQ3OwogCi0JaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDB4ZikgeworCWlmIChjLT54ODYgPT0gMHhmKSB7CiAJCXN0YXJ0X2JpdCA9IDM7CiAJCWVuZF9iaXQgICA9IDM5OwogCX0KIAotCXJldHVybiBtLT5hZGRyICYgR0VOTUFTSyhzdGFydF9iaXQsIGVuZF9iaXQpOworCWFkZHIgPSBtLT5hZGRyICYgR0VOTUFTSyhzdGFydF9iaXQsIGVuZF9iaXQpOworCisJLyoKKwkgKiBFcnJhdHVtIDYzNyB3b3JrYXJvdW5kCisJICovCisJaWYgKGMtPng4NiA9PSAweDE1KSB7CisJCXN0cnVjdCBhbWQ2NF9wdnQgKnB2dDsKKwkJdTY0IGNjNl9iYXNlLCB0bXBfYWRkcjsKKwkJdTMyIHRtcDsKKwkJdTggbWNlX25pZCwgaW50bHZfZW47CisKKwkJaWYgKChhZGRyICYgR0VOTUFTSygyNCwgNDcpKSA+PiAyNCAhPSAweDAwZmRmNykKKwkJCXJldHVybiBhZGRyOworCisJCW1jZV9uaWQJPSBhbWRfZ2V0X25iX2lkKG0tPmV4dGNwdSk7CisJCXB2dAk9IG1jaXNbbWNlX25pZF0tPnB2dF9pbmZvOworCisJCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPkYxLCBEUkFNX0xPQ0FMX05PREVfTElNLCAmdG1wKTsKKwkJaW50bHZfZW4gPSB0bXAgPj4gMjEgJiAweDc7CisKKwkJLyogYWRkIFs0NzoyN10gKyAzIHRyYWlsaW5nIGJpdHMgKi8KKwkJY2M2X2Jhc2UgID0gKHRtcCAmIEdFTk1BU0soMCwgMjApKSA8PCAzOworCisJCS8qIHJldmVyc2UgYW5kIGFkZCBEcmFtSW50bHZFbiAqLworCQljYzZfYmFzZSB8PSBpbnRsdl9lbiBeIDB4NzsKKworCQkvKiBwaW4gYXQgWzQ3OjI0XSAqLworCQljYzZfYmFzZSA8PD0gMjQ7CisKKwkJaWYgKCFpbnRsdl9lbikKKwkJCXJldHVybiBjYzZfYmFzZSB8IChhZGRyICYgR0VOTUFTSygwLCAyMykpOworCisJCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPkYxLCBEUkFNX0xPQ0FMX05PREVfQkFTRSwgJnRtcCk7CisKKwkJCQkJCQkvKiBmYXN0ZXIgbG9nMiAqLworCQl0bXBfYWRkciAgPSAoYWRkciAmIEdFTk1BU0soMTIsIDIzKSkgPDwgX19mbHMoaW50bHZfZW4gKyAxKTsKKworCQkvKiBPUiBEcmFtSW50bHZTZWwgaW50byBiaXRzIFsxNDoxMl0gKi8KKwkJdG1wX2FkZHIgfD0gKHRtcCAmIEdFTk1BU0soMjEsIDIzKSkgPj4gOTsKKworCQkvKiBhZGQgcmVtYWluaW5nIFsxMTowXSBiaXRzIGZyb20gb3JpZ2luYWwgTUM0X0FERFIgKi8KKwkJdG1wX2FkZHIgfD0gYWRkciAmIEdFTk1BU0soMCwgMTEpOworCisJCXJldHVybiBjYzZfYmFzZSB8IHRtcF9hZGRyOworCX0KKworCXJldHVybiBhZGRyOwogfQogCiBzdGF0aWMgdm9pZCByZWFkX2RyYW1fYmFzZV9saW1pdF9yZWdzKHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCwgdW5zaWduZWQgcmFuZ2UpCiB7CisJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmJvb3RfY3B1X2RhdGE7CiAJaW50IG9mZiA9IHJhbmdlIDw8IDM7CiAKIAlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5GMSwgRFJBTV9CQVNFX0xPICsgb2ZmLCAgJnB2dC0+cmFuZ2VzW3JhbmdlXS5iYXNlLmxvKTsKIAlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5GMSwgRFJBTV9MSU1JVF9MTyArIG9mZiwgJnB2dC0+cmFuZ2VzW3JhbmdlXS5saW0ubG8pOwogCi0JaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDB4ZikKKwlpZiAoYy0+eDg2ID09IDB4ZikKIAkJcmV0dXJuOwogCiAJaWYgKCFkcmFtX3J3KHB2dCwgcmFuZ2UpKQpAQCAtOTU5LDYgKzEwMDYsMzEgQEAKIAogCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPkYxLCBEUkFNX0JBU0VfSEkgKyBvZmYsICAmcHZ0LT5yYW5nZXNbcmFuZ2VdLmJhc2UuaGkpOwogCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPkYxLCBEUkFNX0xJTUlUX0hJICsgb2ZmLCAmcHZ0LT5yYW5nZXNbcmFuZ2VdLmxpbS5oaSk7CisKKwkvKiBGYWN0b3IgaW4gQ0M2IHNhdmUgYXJlYSBieSByZWFkaW5nIGRzdCBub2RlJ3MgbGltaXQgcmVnICovCisJaWYgKGMtPng4NiA9PSAweDE1KSB7CisJCXN0cnVjdCBwY2lfZGV2ICpmMSA9IE5VTEw7CisJCXU4IG5pZCA9IGRyYW1fZHN0X25vZGUocHZ0LCByYW5nZSk7CisJCXUzMiBsbGltOworCisJCWYxID0gcGNpX2dldF9kb21haW5fYnVzX2FuZF9zbG90KDAsIDAsIFBDSV9ERVZGTigweDE4ICsgbmlkLCAxKSk7CisJCWlmIChXQVJOX09OKCFmMSkpCisJCQlyZXR1cm47CisKKwkJYW1kNjRfcmVhZF9wY2lfY2ZnKGYxLCBEUkFNX0xPQ0FMX05PREVfTElNLCAmbGxpbSk7CisKKwkJcHZ0LT5yYW5nZXNbcmFuZ2VdLmxpbS5sbyAmPSBHRU5NQVNLKDAsIDE1KTsKKworCQkJCQkgICAgLyoge1szOToyN10sMTExYn0gKi8KKwkJcHZ0LT5yYW5nZXNbcmFuZ2VdLmxpbS5sbyB8PSAoKGxsaW0gJiAweDFmZmYpIDw8IDMgfCAweDcpIDw8IDE2OworCisJCXB2dC0+cmFuZ2VzW3JhbmdlXS5saW0uaGkgJj0gR0VOTUFTSygwLCA3KTsKKworCQkJCQkgICAgLyogWzQ3OjQwXSAqLworCQlwdnQtPnJhbmdlc1tyYW5nZV0ubGltLmhpIHw9IGxsaW0gPj4gMTM7CisKKwkJcGNpX2Rldl9wdXQoZjEpOworCX0KIH0KIAogc3RhdGljIHZvaWQgazhfbWFwX3N5c2FkZHJfdG9fY3Nyb3coc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLCB1NjQgc3lzX2FkZHIsCkBAIC0xNDAzLDEyICsxNDc1LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKGludGx2X2VuICYmCi0JICAgIChpbnRsdl9zZWwgIT0gKChzeXNfYWRkciA+PiAxMikgJiBpbnRsdl9lbikpKSB7Ci0JCWFtZDY0X3dhcm4oIkJvdGNoZWQgaW50bHYgYml0cywgZW46IDB4JXgsIHNlbDogMHgleFxuIiwKLQkJCSAgIGludGx2X2VuLCBpbnRsdl9zZWwpOworCWlmIChpbnRsdl9lbiAmJiAoaW50bHZfc2VsICE9ICgoc3lzX2FkZHIgPj4gMTIpICYgaW50bHZfZW4pKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCiAJc3lzX2FkZHIgPSBmMXhfc3dhcF9pbnRlcmxlYXZlZF9yZWdpb24ocHZ0LCBzeXNfYWRkcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmggYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5oCmluZGV4IDExYmUzNmEuLjlhNjY2Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmgKKysrIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuaApAQCAtMTk2LDYgKzE5Niw5IEBACiAKICNkZWZpbmUgRENUX0NGR19TRUwJCQkweDEwQwogCisjZGVmaW5lIERSQU1fTE9DQUxfTk9ERV9CQVNFCQkweDEyMAorI2RlZmluZSBEUkFNX0xPQ0FMX05PREVfTElNCQkweDEyNAorCiAjZGVmaW5lIERSQU1fQkFTRV9ISQkJCTB4MTQwCiAjZGVmaW5lIERSQU1fTElNSVRfSEkJCQkweDE0NAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19tY19zeXNmcy5jIGIvZHJpdmVycy9lZGFjL2VkYWNfbWNfc3lzZnMuYwppbmRleCAyNjM0M2ZkLi4yOWZmYTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvZWRhY19tY19zeXNmcy5jCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX21jX3N5c2ZzLmMKQEAgLTQ1OCwxMyArNDU4LDEzIEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJbmV3X2J3ID0gbWNpLT5zZXRfc2RyYW1fc2NydWJfcmF0ZShtY2ksIGJhbmR3aWR0aCk7Ci0JaWYgKG5ld19idyA+PSAwKSB7Ci0JCWVkYWNfcHJpbnRrKEtFUk5fREVCVUcsIEVEQUNfTUMsICJTY3J1YiByYXRlIHNldCB0byAlZFxuIiwgbmV3X2J3KTsKLQkJcmV0dXJuIGNvdW50OworCWlmIChuZXdfYncgPCAwKSB7CisJCWVkYWNfcHJpbnRrKEtFUk5fV0FSTklORywgRURBQ19NQywKKwkJCSAgICAiRXJyb3Igc2V0dGluZyBzY3J1YiByYXRlIHRvOiAlbHVcbiIsIGJhbmR3aWR0aCk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWVkYWNfcHJpbnRrKEtFUk5fREVCVUcsIEVEQUNfTUMsICJFcnJvciBzZXR0aW5nIHNjcnViIHJhdGUgdG86ICVsdVxuIiwgYmFuZHdpZHRoKTsKLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gY291bnQ7CiB9CiAKIC8qCkBAIC00ODMsNyArNDgzLDYgQEAKIAkJcmV0dXJuIGJhbmR3aWR0aDsKIAl9CiAKLQllZGFjX3ByaW50ayhLRVJOX0RFQlVHLCBFREFDX01DLCAiUmVhZCBzY3J1YiByYXRlOiAlZFxuIiwgYmFuZHdpZHRoKTsKIAlyZXR1cm4gc3ByaW50ZihkYXRhLCAiJWRcbiIsIGJhbmR3aWR0aCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9wcGM0eHhfZWRhYy5jIGIvZHJpdmVycy9lZGFjL3BwYzR4eF9lZGFjLmMKaW5kZXggYzFmMDA0NS4uYWY4ZTdiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL3BwYzR4eF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL3BwYzR4eF9lZGFjLmMKQEAgLTEwMTksNyArMTAxOSw3IEBACiAJc3RydWN0IHBwYzR4eF9lZGFjX3BkYXRhICpwZGF0YSA9IE5VTEw7CiAJY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9wLT5kZXYub2Zfbm9kZTsKIAotCWlmIChvcC0+ZGV2Lm9mX21hdGNoID09IE5VTEwpCisJaWYgKG9mX21hdGNoX2RldmljZShwcGM0eHhfZWRhY19tYXRjaCwgJm9wLT5kZXYpID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogSW5pdGlhbCBkcml2ZXIgcG9pbnRlcnMgYW5kIHByaXZhdGUgZGF0YSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9jb3JlLWNhcmQuYyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jYXJkLmMKaW5kZXggM2M0NGZiYy4uMjlkMjQyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9jb3JlLWNhcmQuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2FyZC5jCkBAIC0yMjgsOCArMjI4LDggQEAKIAogCS8qIFVzZSBhbiBhcmJpdHJhcnkgc2hvcnQgZGVsYXkgdG8gY29tYmluZSBtdWx0aXBsZSByZXNldCByZXF1ZXN0cy4gKi8KIAlmd19jYXJkX2dldChjYXJkKTsKLQlpZiAoIXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY2FyZC0+YnJfd29yaywKLQkJCQkgICBkZWxheWVkID8gRElWX1JPVU5EX1VQKEhaLCAxMDApIDogMCkpCisJaWYgKCFxdWV1ZV9kZWxheWVkX3dvcmsoZndfd29ya3F1ZXVlLCAmY2FyZC0+YnJfd29yaywKKwkJCQlkZWxheWVkID8gRElWX1JPVU5EX1VQKEhaLCAxMDApIDogMCkpCiAJCWZ3X2NhcmRfcHV0KGNhcmQpOwogfQogRVhQT1JUX1NZTUJPTChmd19zY2hlZHVsZV9idXNfcmVzZXQpOwpAQCAtMjQxLDcgKzI0MSw3IEBACiAJLyogRGVsYXkgZm9yIDJzIGFmdGVyIGxhc3QgcmVzZXQgcGVyIElFRUUgMTM5NCBjbGF1c2UgOC4yLjEuICovCiAJaWYgKGNhcmQtPnJlc2V0X2ppZmZpZXMgIT0gMCAmJgogCSAgICB0aW1lX2JlZm9yZTY0KGdldF9qaWZmaWVzXzY0KCksIGNhcmQtPnJlc2V0X2ppZmZpZXMgKyAyICogSFopKSB7Ci0JCWlmICghc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjYXJkLT5icl93b3JrLCAyICogSFopKQorCQlpZiAoIXF1ZXVlX2RlbGF5ZWRfd29yayhmd193b3JrcXVldWUsICZjYXJkLT5icl93b3JrLCAyICogSFopKQogCQkJZndfY2FyZF9wdXQoY2FyZCk7CiAJCXJldHVybjsKIAl9CkBAIC0yNTgsOCArMjU4LDcgQEAKIAogCWlmICghY2FyZC0+YnJvYWRjYXN0X2NoYW5uZWxfYWxsb2NhdGVkKSB7CiAJCWZ3X2lzb19yZXNvdXJjZV9tYW5hZ2UoY2FyZCwgZ2VuZXJhdGlvbiwgMVVMTCA8PCAzMSwKLQkJCQkgICAgICAgJmNoYW5uZWwsICZiYW5kd2lkdGgsIHRydWUsCi0JCQkJICAgICAgIGNhcmQtPmJtX3RyYW5zYWN0aW9uX2RhdGEpOworCQkJCSAgICAgICAmY2hhbm5lbCwgJmJhbmR3aWR0aCwgdHJ1ZSk7CiAJCWlmIChjaGFubmVsICE9IDMxKSB7CiAJCQlmd19ub3RpZnkoImZhaWxlZCB0byBhbGxvY2F0ZSBicm9hZGNhc3QgY2hhbm5lbFxuIik7CiAJCQlyZXR1cm47CkBAIC0yOTQsNiArMjkzLDcgQEAKIAlib29sIHJvb3RfZGV2aWNlX2lzX2NtYzsKIAlib29sIGlybV9pc18xMzk0XzE5OTVfb25seTsKIAlib29sIGtlZXBfdGhpc19pcm07CisJX19iZTMyIHRyYW5zYWN0aW9uX2RhdGFbMl07CiAKIAlzcGluX2xvY2tfaXJxKCZjYXJkLT5sb2NrKTsKIApAQCAtMzU1LDIxICszNTUsMjEgQEAKIAkJCWdvdG8gcGlja19tZTsKIAkJfQogCi0JCWNhcmQtPmJtX3RyYW5zYWN0aW9uX2RhdGFbMF0gPSBjcHVfdG9fYmUzMigweDNmKTsKLQkJY2FyZC0+Ym1fdHJhbnNhY3Rpb25fZGF0YVsxXSA9IGNwdV90b19iZTMyKGxvY2FsX2lkKTsKKwkJdHJhbnNhY3Rpb25fZGF0YVswXSA9IGNwdV90b19iZTMyKDB4M2YpOworCQl0cmFuc2FjdGlvbl9kYXRhWzFdID0gY3B1X3RvX2JlMzIobG9jYWxfaWQpOwogCiAJCXNwaW5fdW5sb2NrX2lycSgmY2FyZC0+bG9jayk7CiAKIAkJcmNvZGUgPSBmd19ydW5fdHJhbnNhY3Rpb24oY2FyZCwgVENPREVfTE9DS19DT01QQVJFX1NXQVAsCiAJCQkJaXJtX2lkLCBnZW5lcmF0aW9uLCBTQ09ERV8xMDAsCiAJCQkJQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfQlVTX01BTkFHRVJfSUQsCi0JCQkJY2FyZC0+Ym1fdHJhbnNhY3Rpb25fZGF0YSwgOCk7CisJCQkJdHJhbnNhY3Rpb25fZGF0YSwgOCk7CiAKIAkJaWYgKHJjb2RlID09IFJDT0RFX0dFTkVSQVRJT04pCiAJCQkvKiBBbm90aGVyIGJ1cyByZXNldCwgQk0gd29yayBoYXMgYmVlbiByZXNjaGVkdWxlZC4gKi8KIAkJCWdvdG8gb3V0OwogCi0JCWJtX2lkID0gYmUzMl90b19jcHUoY2FyZC0+Ym1fdHJhbnNhY3Rpb25fZGF0YVswXSk7CisJCWJtX2lkID0gYmUzMl90b19jcHUodHJhbnNhY3Rpb25fZGF0YVswXSk7CiAKIAkJc3Bpbl9sb2NrX2lycSgmY2FyZC0+bG9jayk7CiAJCWlmIChyY29kZSA9PSBSQ09ERV9DT01QTEVURSAmJiBnZW5lcmF0aW9uID09IGNhcmQtPmdlbmVyYXRpb24pCkBAIC00OTAsMTEgKzQ5MCwxMSBAQAogCQkvKgogCQkgKiBNYWtlIHN1cmUgdGhhdCB0aGUgY3ljbGUgbWFzdGVyIHNlbmRzIGN5Y2xlIHN0YXJ0IHBhY2tldHMuCiAJCSAqLwotCQljYXJkLT5ibV90cmFuc2FjdGlvbl9kYXRhWzBdID0gY3B1X3RvX2JlMzIoQ1NSX1NUQVRFX0JJVF9DTVNUUik7CisJCXRyYW5zYWN0aW9uX2RhdGFbMF0gPSBjcHVfdG9fYmUzMihDU1JfU1RBVEVfQklUX0NNU1RSKTsKIAkJcmNvZGUgPSBmd19ydW5fdHJhbnNhY3Rpb24oY2FyZCwgVENPREVfV1JJVEVfUVVBRExFVF9SRVFVRVNULAogCQkJCXJvb3RfaWQsIGdlbmVyYXRpb24sIFNDT0RFXzEwMCwKIAkJCQlDU1JfUkVHSVNURVJfQkFTRSArIENTUl9TVEFURV9TRVQsCi0JCQkJY2FyZC0+Ym1fdHJhbnNhY3Rpb25fZGF0YSwgNCk7CisJCQkJdHJhbnNhY3Rpb25fZGF0YSwgNCk7CiAJCWlmIChyY29kZSA9PSBSQ09ERV9HRU5FUkFUSU9OKQogCQkJZ290byBvdXQ7CiAJfQpAQCAtNjMwLDYgKzYzMCwxMCBAQAogCXJldHVybiAtRU5PREVWOwogfQogCitzdGF0aWMgdm9pZCBkdW1teV9mbHVzaF9xdWV1ZV9pc28oc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgpCit7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZndfY2FyZF9kcml2ZXIgZHVtbXlfZHJpdmVyX3RlbXBsYXRlID0gewogCS5yZWFkX3BoeV9yZWcJCT0gZHVtbXlfcmVhZF9waHlfcmVnLAogCS51cGRhdGVfcGh5X3JlZwkJPSBkdW1teV91cGRhdGVfcGh5X3JlZywKQEAgLTY0MSw2ICs2NDUsNyBAQAogCS5zdGFydF9pc28JCT0gZHVtbXlfc3RhcnRfaXNvLAogCS5zZXRfaXNvX2NoYW5uZWxzCT0gZHVtbXlfc2V0X2lzb19jaGFubmVscywKIAkucXVldWVfaXNvCQk9IGR1bW15X3F1ZXVlX2lzbywKKwkuZmx1c2hfcXVldWVfaXNvCT0gZHVtbXlfZmx1c2hfcXVldWVfaXNvLAogfTsKIAogdm9pZCBmd19jYXJkX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2Rldi5jIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLWNkZXYuYwppbmRleCA2MmFjMTExLi5iMWMxMTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2Rldi5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jZGV2LmMKQEAgLTE0MSw3ICsxNDEsNiBAQAogCWludCBnZW5lcmF0aW9uOwogCXU2NCBjaGFubmVsczsKIAlzMzIgYmFuZHdpZHRoOwotCV9fYmUzMiB0cmFuc2FjdGlvbl9kYXRhWzJdOwogCXN0cnVjdCBpc29fcmVzb3VyY2VfZXZlbnQgKmVfYWxsb2MsICplX2RlYWxsb2M7CiB9OwogCkBAIC0xNTAsNyArMTQ5LDcgQEAKIHN0YXRpYyB2b2lkIHNjaGVkdWxlX2lzb19yZXNvdXJjZShzdHJ1Y3QgaXNvX3Jlc291cmNlICpyLCB1bnNpZ25lZCBsb25nIGRlbGF5KQogewogCWNsaWVudF9nZXQoci0+Y2xpZW50KTsKLQlpZiAoIXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmci0+d29yaywgZGVsYXkpKQorCWlmICghcXVldWVfZGVsYXllZF93b3JrKGZ3X3dvcmtxdWV1ZSwgJnItPndvcmssIGRlbGF5KSkKIAkJY2xpZW50X3B1dChyLT5jbGllbnQpOwogfQogCkBAIC0xMTA4LDYgKzExMDcsNyBAQAogCQlwYXlsb2FkICs9IHUucGFja2V0LnBheWxvYWRfbGVuZ3RoOwogCQljb3VudCsrOwogCX0KKwlmd19pc29fY29udGV4dF9xdWV1ZV9mbHVzaChjdHgpOwogCiAJYS0+c2l6ZSAgICAtPSB1cHRyX3RvX3U2NChwKSAtIGEtPnBhY2tldHM7CiAJYS0+cGFja2V0cyAgPSB1cHRyX3RvX3U2NChwKTsKQEAgLTEyMjksOCArMTIyOSw3IEBACiAJCQlyLT5jaGFubmVscywgJmNoYW5uZWwsICZiYW5kd2lkdGgsCiAJCQl0b2RvID09IElTT19SRVNfQUxMT0MgfHwKIAkJCXRvZG8gPT0gSVNPX1JFU19SRUFMTE9DIHx8Ci0JCQl0b2RvID09IElTT19SRVNfQUxMT0NfT05DRSwKLQkJCXItPnRyYW5zYWN0aW9uX2RhdGEpOworCQkJdG9kbyA9PSBJU09fUkVTX0FMTE9DX09OQ0UpOwogCS8qCiAJICogSXMgdGhpcyBnZW5lcmF0aW9uIG91dGRhdGVkIGFscmVhZHk/ICBBcyBsb25nIGFzIHRoaXMgcmVzb3VyY2Ugc3RpY2tzCiAJICogaW4gdGhlIGlkciwgaXQgd2lsbCBiZSBzY2hlZHVsZWQgYWdhaW4gZm9yIGEgbmV3ZXIgZ2VuZXJhdGlvbiBvciBhdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9jb3JlLWRldmljZS5jIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLWRldmljZS5jCmluZGV4IDlhMjYyNDMuLjk1YTQ3MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1kZXZpY2UuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtZGV2aWNlLmMKQEAgLTcyNSw2ICs3MjUsMTUgQEAKIAlyZXR1cm4gZGV2aWNlOwogfQogCitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZndfd29ya3F1ZXVlOworRVhQT1JUX1NZTUJPTChmd193b3JrcXVldWUpOworCitzdGF0aWMgdm9pZCBmd19zY2hlZHVsZV9kZXZpY2Vfd29yayhzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgZGVsYXkpCit7CisJcXVldWVfZGVsYXllZF93b3JrKGZ3X3dvcmtxdWV1ZSwgJmRldmljZS0+d29yaywgZGVsYXkpOworfQorCiAvKgogICogVGhlc2UgZGVmaW5lcyBjb250cm9sIHRoZSByZXRyeSBiZWhhdmlvciBmb3IgcmVhZGluZyB0aGUgY29uZmlnCiAgKiByb20uICBJdCBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5IHRvIHR3ZWFrIHRoZXNlOyBpZiB0aGUgZGV2aWNlCkBAIC03NTAsNyArNzU5LDcgQEAKIAlpZiAodGltZV9iZWZvcmU2NChnZXRfamlmZmllc182NCgpLAogCQkJICBkZXZpY2UtPmNhcmQtPnJlc2V0X2ppZmZpZXMgKyBTSFVURE9XTl9ERUxBWSkKIAkgICAgJiYgIWxpc3RfZW1wdHkoJmRldmljZS0+Y2FyZC0+bGluaykpIHsKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXZpY2UtPndvcmssIFNIVVRET1dOX0RFTEFZKTsKKwkJZndfc2NoZWR1bGVfZGV2aWNlX3dvcmsoZGV2aWNlLCBTSFVURE9XTl9ERUxBWSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTg2Miw3ICs4NzEsNyBAQAogCQlmd19ub3RpZnkoInJlZGlzY292ZXJlZCBkZXZpY2UgJXNcbiIsIGRldl9uYW1lKGRldikpOwogCiAJCVBSRVBBUkVfREVMQVlFRF9XT1JLKCZvbGQtPndvcmssIGZ3X2RldmljZV91cGRhdGUpOwotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJm9sZC0+d29yaywgMCk7CisJCWZ3X3NjaGVkdWxlX2RldmljZV93b3JrKG9sZCwgMCk7CiAKIAkJaWYgKGN1cnJlbnRfbm9kZSA9PSBjYXJkLT5yb290X25vZGUpCiAJCQlmd19zY2hlZHVsZV9ibV93b3JrKGNhcmQsIDApOwpAQCAtOTUzLDcgKzk2Miw3IEBACiAJCWlmIChkZXZpY2UtPmNvbmZpZ19yb21fcmV0cmllcyA8IE1BWF9SRVRSSUVTICYmCiAJCSAgICBhdG9taWNfcmVhZCgmZGV2aWNlLT5zdGF0ZSkgPT0gRldfREVWSUNFX0lOSVRJQUxJWklORykgewogCQkJZGV2aWNlLT5jb25maWdfcm9tX3JldHJpZXMrKzsKLQkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2aWNlLT53b3JrLCBSRVRSWV9ERUxBWSk7CisJCQlmd19zY2hlZHVsZV9kZXZpY2Vfd29yayhkZXZpY2UsIFJFVFJZX0RFTEFZKTsKIAkJfSBlbHNlIHsKIAkJCWlmIChkZXZpY2UtPm5vZGUtPmxpbmtfb24pCiAJCQkJZndfbm90aWZ5KCJnaXZpbmcgdXAgb24gY29uZmlnIHJvbSBmb3Igbm9kZSBpZCAleFxuIiwKQEAgLTEwMTksNyArMTAyOCw3IEBACiAJCQkgICBGV19ERVZJQ0VfSU5JVElBTElaSU5HLAogCQkJICAgRldfREVWSUNFX1JVTk5JTkcpID09IEZXX0RFVklDRV9HT05FKSB7CiAJCVBSRVBBUkVfREVMQVlFRF9XT1JLKCZkZXZpY2UtPndvcmssIGZ3X2RldmljZV9zaHV0ZG93bik7Ci0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2aWNlLT53b3JrLCBTSFVURE9XTl9ERUxBWSk7CisJCWZ3X3NjaGVkdWxlX2RldmljZV93b3JrKGRldmljZSwgU0hVVERPV05fREVMQVkpOwogCX0gZWxzZSB7CiAJCWlmIChkZXZpY2UtPmNvbmZpZ19yb21fcmV0cmllcykKIAkJCWZ3X25vdGlmeSgiY3JlYXRlZCBkZXZpY2UgJXM6IEdVSUQgJTA4eCUwOHgsIFMlZDAwLCAiCkBAIC0xMDk4LDcgKzExMDcsNyBAQAogCQlpZiAoZGV2aWNlLT5jb25maWdfcm9tX3JldHJpZXMgPCBNQVhfUkVUUklFUyAvIDIgJiYKIAkJICAgIGF0b21pY19yZWFkKCZkZXZpY2UtPnN0YXRlKSA9PSBGV19ERVZJQ0VfSU5JVElBTElaSU5HKSB7CiAJCQlkZXZpY2UtPmNvbmZpZ19yb21fcmV0cmllcysrOwotCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXZpY2UtPndvcmssIFJFVFJZX0RFTEFZIC8gMik7CisJCQlmd19zY2hlZHVsZV9kZXZpY2Vfd29yayhkZXZpY2UsIFJFVFJZX0RFTEFZIC8gMik7CiAKIAkJCXJldHVybjsKIAkJfQpAQCAtMTEzMSw3ICsxMTQwLDcgQEAKIAkJaWYgKGRldmljZS0+Y29uZmlnX3JvbV9yZXRyaWVzIDwgTUFYX1JFVFJJRVMgJiYKIAkJICAgIGF0b21pY19yZWFkKCZkZXZpY2UtPnN0YXRlKSA9PSBGV19ERVZJQ0VfSU5JVElBTElaSU5HKSB7CiAJCQlkZXZpY2UtPmNvbmZpZ19yb21fcmV0cmllcysrOwotCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXZpY2UtPndvcmssIFJFVFJZX0RFTEFZKTsKKwkJCWZ3X3NjaGVkdWxlX2RldmljZV93b3JrKGRldmljZSwgUkVUUllfREVMQVkpOwogCiAJCQlyZXR1cm47CiAJCX0KQEAgLTExNTgsNyArMTE2Nyw3IEBACiAgZ29uZToKIAlhdG9taWNfc2V0KCZkZXZpY2UtPnN0YXRlLCBGV19ERVZJQ0VfR09ORSk7CiAJUFJFUEFSRV9ERUxBWUVEX1dPUksoJmRldmljZS0+d29yaywgZndfZGV2aWNlX3NodXRkb3duKTsKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldmljZS0+d29yaywgU0hVVERPV05fREVMQVkpOworCWZ3X3NjaGVkdWxlX2RldmljZV93b3JrKGRldmljZSwgU0hVVERPV05fREVMQVkpOwogIG91dDoKIAlpZiAobm9kZV9pZCA9PSBjYXJkLT5yb290X25vZGUtPm5vZGVfaWQpCiAJCWZ3X3NjaGVkdWxlX2JtX3dvcmsoY2FyZCwgMCk7CkBAIC0xMjE0LDcgKzEyMjMsNyBAQAogCQkgKiBmaXJzdCBjb25maWcgcm9tIHNjYW4gaGFsZiBhIHNlY29uZCBhZnRlciBidXMgcmVzZXQuCiAJCSAqLwogCQlJTklUX0RFTEFZRURfV09SSygmZGV2aWNlLT53b3JrLCBmd19kZXZpY2VfaW5pdCk7Ci0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2aWNlLT53b3JrLCBJTklUSUFMX0RFTEFZKTsKKwkJZndfc2NoZWR1bGVfZGV2aWNlX3dvcmsoZGV2aWNlLCBJTklUSUFMX0RFTEFZKTsKIAkJYnJlYWs7CiAKIAljYXNlIEZXX05PREVfSU5JVElBVEVEX1JFU0VUOgpAQCAtMTIzMCw3ICsxMjM5LDcgQEAKIAkJCSAgICBGV19ERVZJQ0VfUlVOTklORywKIAkJCSAgICBGV19ERVZJQ0VfSU5JVElBTElaSU5HKSA9PSBGV19ERVZJQ0VfUlVOTklORykgewogCQkJUFJFUEFSRV9ERUxBWUVEX1dPUksoJmRldmljZS0+d29yaywgZndfZGV2aWNlX3JlZnJlc2gpOwotCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXZpY2UtPndvcmssCisJCQlmd19zY2hlZHVsZV9kZXZpY2Vfd29yayhkZXZpY2UsCiAJCQkJZGV2aWNlLT5pc19sb2NhbCA/IDAgOiBJTklUSUFMX0RFTEFZKTsKIAkJfQogCQlicmVhazsKQEAgLTEyNDUsNyArMTI1NCw3IEBACiAJCWRldmljZS0+Z2VuZXJhdGlvbiA9IGNhcmQtPmdlbmVyYXRpb247CiAJCWlmIChhdG9taWNfcmVhZCgmZGV2aWNlLT5zdGF0ZSkgPT0gRldfREVWSUNFX1JVTk5JTkcpIHsKIAkJCVBSRVBBUkVfREVMQVlFRF9XT1JLKCZkZXZpY2UtPndvcmssIGZ3X2RldmljZV91cGRhdGUpOwotCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXZpY2UtPndvcmssIDApOworCQkJZndfc2NoZWR1bGVfZGV2aWNlX3dvcmsoZGV2aWNlLCAwKTsKIAkJfQogCQlicmVhazsKIApAQCAtMTI3MCw3ICsxMjc5LDcgQEAKIAkJaWYgKGF0b21pY194Y2hnKCZkZXZpY2UtPnN0YXRlLAogCQkJCUZXX0RFVklDRV9HT05FKSA9PSBGV19ERVZJQ0VfUlVOTklORykgewogCQkJUFJFUEFSRV9ERUxBWUVEX1dPUksoJmRldmljZS0+d29yaywgZndfZGV2aWNlX3NodXRkb3duKTsKLQkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2aWNlLT53b3JrLAorCQkJZndfc2NoZWR1bGVfZGV2aWNlX3dvcmsoZGV2aWNlLAogCQkJCWxpc3RfZW1wdHkoJmNhcmQtPmxpbmspID8gMCA6IFNIVVRET1dOX0RFTEFZKTsKIAkJfQogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYwppbmRleCA0ODEwNTZkLi41N2MzOTczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jCkBAIC0xODUsNiArMTg1LDEyIEBACiB9CiBFWFBPUlRfU1lNQk9MKGZ3X2lzb19jb250ZXh0X3F1ZXVlKTsKIAordm9pZCBmd19pc29fY29udGV4dF9xdWV1ZV9mbHVzaChzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCkKK3sKKwljdHgtPmNhcmQtPmRyaXZlci0+Zmx1c2hfcXVldWVfaXNvKGN0eCk7Cit9CitFWFBPUlRfU1lNQk9MKGZ3X2lzb19jb250ZXh0X3F1ZXVlX2ZsdXNoKTsKKwogaW50IGZ3X2lzb19jb250ZXh0X3N0b3Aoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgpCiB7CiAJcmV0dXJuIGN0eC0+Y2FyZC0+ZHJpdmVyLT5zdG9wX2lzbyhjdHgpOwpAQCAtMTk2LDkgKzIwMiwxMCBAQAogICovCiAKIHN0YXRpYyBpbnQgbWFuYWdlX2JhbmR3aWR0aChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IGlybV9pZCwgaW50IGdlbmVyYXRpb24sCi0JCQkgICAgaW50IGJhbmR3aWR0aCwgYm9vbCBhbGxvY2F0ZSwgX19iZTMyIGRhdGFbMl0pCisJCQkgICAgaW50IGJhbmR3aWR0aCwgYm9vbCBhbGxvY2F0ZSkKIHsKIAlpbnQgdHJ5LCBuZXcsIG9sZCA9IGFsbG9jYXRlID8gQkFORFdJRFRIX0FWQUlMQUJMRV9JTklUSUFMIDogMDsKKwlfX2JlMzIgZGF0YVsyXTsKIAogCS8qCiAJICogT24gYSAxMzk0YSBJUk0gd2l0aCBsb3cgY29udGVudGlvbiwgdHJ5IDwgMSBpcyBlbm91Z2guCkBAIC0yMzMsOSArMjQwLDEwIEBACiB9CiAKIHN0YXRpYyBpbnQgbWFuYWdlX2NoYW5uZWwoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBpcm1faWQsIGludCBnZW5lcmF0aW9uLAotCQl1MzIgY2hhbm5lbHNfbWFzaywgdTY0IG9mZnNldCwgYm9vbCBhbGxvY2F0ZSwgX19iZTMyIGRhdGFbMl0pCisJCXUzMiBjaGFubmVsc19tYXNrLCB1NjQgb2Zmc2V0LCBib29sIGFsbG9jYXRlKQogewogCV9fYmUzMiBiaXQsIGFsbCwgb2xkOworCV9fYmUzMiBkYXRhWzJdOwogCWludCBjaGFubmVsLCByZXQgPSAtRUlPLCByZXRyeSA9IDU7CiAKIAlvbGQgPSBhbGwgPSBhbGxvY2F0ZSA/IGNwdV90b19iZTMyKH4wKSA6IDA7CkBAIC0yODQsNyArMjkyLDcgQEAKIH0KIAogc3RhdGljIHZvaWQgZGVhbGxvY2F0ZV9jaGFubmVsKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgaXJtX2lkLAotCQkJICAgICAgIGludCBnZW5lcmF0aW9uLCBpbnQgY2hhbm5lbCwgX19iZTMyIGJ1ZmZlclsyXSkKKwkJCSAgICAgICBpbnQgZ2VuZXJhdGlvbiwgaW50IGNoYW5uZWwpCiB7CiAJdTMyIG1hc2s7CiAJdTY0IG9mZnNldDsKQEAgLTI5Myw3ICszMDEsNyBAQAogCW9mZnNldCA9IGNoYW5uZWwgPCAzMiA/IENTUl9SRUdJU1RFUl9CQVNFICsgQ1NSX0NIQU5ORUxTX0FWQUlMQUJMRV9ISSA6CiAJCQkJQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfQ0hBTk5FTFNfQVZBSUxBQkxFX0xPOwogCi0JbWFuYWdlX2NoYW5uZWwoY2FyZCwgaXJtX2lkLCBnZW5lcmF0aW9uLCBtYXNrLCBvZmZzZXQsIGZhbHNlLCBidWZmZXIpOworCW1hbmFnZV9jaGFubmVsKGNhcmQsIGlybV9pZCwgZ2VuZXJhdGlvbiwgbWFzaywgb2Zmc2V0LCBmYWxzZSk7CiB9CiAKIC8qKgpAQCAtMzIyLDcgKzMzMCw3IEBACiAgKi8KIHZvaWQgZndfaXNvX3Jlc291cmNlX21hbmFnZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IGdlbmVyYXRpb24sCiAJCQkgICAgdTY0IGNoYW5uZWxzX21hc2ssIGludCAqY2hhbm5lbCwgaW50ICpiYW5kd2lkdGgsCi0JCQkgICAgYm9vbCBhbGxvY2F0ZSwgX19iZTMyIGJ1ZmZlclsyXSkKKwkJCSAgICBib29sIGFsbG9jYXRlKQogewogCXUzMiBjaGFubmVsc19oaSA9IGNoYW5uZWxzX21hc2s7CS8qIGNoYW5uZWxzIDMxLi4uMCAqLwogCXUzMiBjaGFubmVsc19sbyA9IGNoYW5uZWxzX21hc2sgPj4gMzI7CS8qIGNoYW5uZWxzIDYzLi4uMzIgKi8KQEAgLTMzNSwxMSArMzQzLDExIEBACiAJaWYgKGNoYW5uZWxzX2hpKQogCQljID0gbWFuYWdlX2NoYW5uZWwoY2FyZCwgaXJtX2lkLCBnZW5lcmF0aW9uLCBjaGFubmVsc19oaSwKIAkJCQlDU1JfUkVHSVNURVJfQkFTRSArIENTUl9DSEFOTkVMU19BVkFJTEFCTEVfSEksCi0JCQkJYWxsb2NhdGUsIGJ1ZmZlcik7CisJCQkJYWxsb2NhdGUpOwogCWlmIChjaGFubmVsc19sbyAmJiBjIDwgMCkgewogCQljID0gbWFuYWdlX2NoYW5uZWwoY2FyZCwgaXJtX2lkLCBnZW5lcmF0aW9uLCBjaGFubmVsc19sbywKIAkJCQlDU1JfUkVHSVNURVJfQkFTRSArIENTUl9DSEFOTkVMU19BVkFJTEFCTEVfTE8sCi0JCQkJYWxsb2NhdGUsIGJ1ZmZlcik7CisJCQkJYWxsb2NhdGUpOwogCQlpZiAoYyA+PSAwKQogCQkJYyArPSAzMjsKIAl9CkBAIC0zNTEsMTQgKzM1OSwxMyBAQAogCWlmICgqYmFuZHdpZHRoID09IDApCiAJCXJldHVybjsKIAotCXJldCA9IG1hbmFnZV9iYW5kd2lkdGgoY2FyZCwgaXJtX2lkLCBnZW5lcmF0aW9uLCAqYmFuZHdpZHRoLAotCQkJICAgICAgIGFsbG9jYXRlLCBidWZmZXIpOworCXJldCA9IG1hbmFnZV9iYW5kd2lkdGgoY2FyZCwgaXJtX2lkLCBnZW5lcmF0aW9uLCAqYmFuZHdpZHRoLCBhbGxvY2F0ZSk7CiAJaWYgKHJldCA8IDApCiAJCSpiYW5kd2lkdGggPSAwOwogCiAJaWYgKGFsbG9jYXRlICYmIHJldCA8IDApIHsKIAkJaWYgKGMgPj0gMCkKLQkJCWRlYWxsb2NhdGVfY2hhbm5lbChjYXJkLCBpcm1faWQsIGdlbmVyYXRpb24sIGMsIGJ1ZmZlcik7CisJCQlkZWFsbG9jYXRlX2NoYW5uZWwoY2FyZCwgaXJtX2lkLCBnZW5lcmF0aW9uLCBjKTsKIAkJKmNoYW5uZWwgPSByZXQ7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9jb3JlLXRyYW5zYWN0aW9uLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtdHJhbnNhY3Rpb24uYwppbmRleCBkMDBmOGNlLi4zMzRiODJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtdHJhbnNhY3Rpb24uYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtdHJhbnNhY3Rpb24uYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIApAQCAtMzI2LDggKzMyNyw4IEBACiAgKiBJdCB3aWxsIGNvbnRhaW4gdGFnLCBjaGFubmVsLCBhbmQgc3kgZGF0YSBpbnN0ZWFkIG9mIGEgbm9kZSBJRCB0aGVuLgogICoKICAqIFRoZSBwYXlsb2FkIGJ1ZmZlciBhdCBAZGF0YSBpcyBnb2luZyB0byBiZSBETUEtbWFwcGVkIGV4Y2VwdCBpbiBjYXNlIG9mCi0gKiBxdWFkbGV0LXNpemVkIHBheWxvYWQgb3Igb2YgbG9jYWwgKGxvb3BiYWNrKSByZXF1ZXN0cy4gIEhlbmNlIG1ha2Ugc3VyZSB0aGF0Ci0gKiB0aGUgYnVmZmVyIGNvbXBsaWVzIHdpdGggdGhlIHJlc3RyaWN0aW9ucyBmb3IgRE1BLW1hcHBlZCBtZW1vcnkuICBUaGUKKyAqIEBsZW5ndGggPD0gOCBvciBvZiBsb2NhbCAobG9vcGJhY2spIHJlcXVlc3RzLiAgSGVuY2UgbWFrZSBzdXJlIHRoYXQgdGhlCisgKiBidWZmZXIgY29tcGxpZXMgd2l0aCB0aGUgcmVzdHJpY3Rpb25zIG9mIHRoZSBzdHJlYW1pbmcgRE1BIG1hcHBpbmcgQVBJLgogICogQHBheWxvYWQgbXVzdCBub3QgYmUgZnJlZWQgYmVmb3JlIHRoZSBAY2FsbGJhY2sgaXMgY2FsbGVkLgogICoKICAqIEluIGNhc2Ugb2YgcmVxdWVzdCB0eXBlcyB3aXRob3V0IHBheWxvYWQsIEBkYXRhIGlzIE5VTEwgYW5kIEBsZW5ndGggaXMgMC4KQEAgLTQxMSw3ICs0MTIsOCBAQAogICoKICAqIFJldHVybnMgdGhlIFJDT0RFLiAgU2VlIGZ3X3NlbmRfcmVxdWVzdCgpIGZvciBwYXJhbWV0ZXIgZG9jdW1lbnRhdGlvbi4KICAqIFVubGlrZSBmd19zZW5kX3JlcXVlc3QoKSwgQGRhdGEgcG9pbnRzIHRvIHRoZSBwYXlsb2FkIG9mIHRoZSByZXF1ZXN0IG9yL2FuZAotICogdG8gdGhlIHBheWxvYWQgb2YgdGhlIHJlc3BvbnNlLgorICogdG8gdGhlIHBheWxvYWQgb2YgdGhlIHJlc3BvbnNlLiAgRE1BIG1hcHBpbmcgcmVzdHJpY3Rpb25zIGFwcGx5IHRvIG91dGJvdW5kCisgKiByZXF1ZXN0IHBheWxvYWRzIG9mID49IDggYnl0ZXMgYnV0IG5vdCB0byBpbmJvdW5kIHJlc3BvbnNlIHBheWxvYWRzLgogICovCiBpbnQgZndfcnVuX3RyYW5zYWN0aW9uKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgdGNvZGUsIGludCBkZXN0aW5hdGlvbl9pZCwKIAkJICAgICAgIGludCBnZW5lcmF0aW9uLCBpbnQgc3BlZWQsIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsCkBAIC0xMjEyLDEzICsxMjE0LDIxIEBACiB7CiAJaW50IHJldDsKIAorCWZ3X3dvcmtxdWV1ZSA9IGFsbG9jX3dvcmtxdWV1ZSgiZmlyZXdpcmUiLAorCQkJCSAgICAgICBXUV9OT05fUkVFTlRSQU5UIHwgV1FfTUVNX1JFQ0xBSU0sIDApOworCWlmICghZndfd29ya3F1ZXVlKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXJldCA9IGJ1c19yZWdpc3RlcigmZndfYnVzX3R5cGUpOwotCWlmIChyZXQgPCAwKQorCWlmIChyZXQgPCAwKSB7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKGZ3X3dvcmtxdWV1ZSk7CiAJCXJldHVybiByZXQ7CisJfQogCiAJZndfY2Rldl9tYWpvciA9IHJlZ2lzdGVyX2NocmRldigwLCAiZmlyZXdpcmUiLCAmZndfZGV2aWNlX29wcyk7CiAJaWYgKGZ3X2NkZXZfbWFqb3IgPCAwKSB7CiAJCWJ1c191bnJlZ2lzdGVyKCZmd19idXNfdHlwZSk7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKGZ3X3dvcmtxdWV1ZSk7CiAJCXJldHVybiBmd19jZGV2X21ham9yOwogCX0KIApAQCAtMTIzNCw2ICsxMjQ0LDcgQEAKIHsKIAl1bnJlZ2lzdGVyX2NocmRldihmd19jZGV2X21ham9yLCAiZmlyZXdpcmUiKTsKIAlidXNfdW5yZWdpc3RlcigmZndfYnVzX3R5cGUpOworCWRlc3Ryb3lfd29ya3F1ZXVlKGZ3X3dvcmtxdWV1ZSk7CiAJaWRyX2Rlc3Ryb3koJmZ3X2RldmljZV9pZHIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUuaCBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS5oCmluZGV4IDI1ZTcyOWMuLjBmZTRlNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS5oCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS5oCkBAIC05Nyw2ICs5Nyw4IEBACiAJCQkgc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKIAkJCSB1bnNpZ25lZCBsb25nIHBheWxvYWQpOwogCisJdm9pZCAoKmZsdXNoX3F1ZXVlX2lzbykoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgpOworCiAJaW50ICgqc3RvcF9pc28pKHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4KTsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvbmV0LmMgYi9kcml2ZXJzL2ZpcmV3aXJlL25ldC5jCmluZGV4IDNmMDRkZDMuLmI5NzYyZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvbmV0LmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9uZXQuYwpAQCAtODgxLDcgKzg4MSw5IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKIAotCWlmIChyZXR2YWwgPCAwKQorCWlmIChyZXR2YWwgPj0gMCkKKwkJZndfaXNvX2NvbnRleHRfcXVldWVfZmx1c2goZGV2LT5icm9hZGNhc3RfcmN2X2NvbnRleHQpOworCWVsc2UKIAkJZndfZXJyb3IoInJlcXVldWUgZmFpbGVkXG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9vaGNpLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYwppbmRleCBmOTAzZDdiNi4uNDM4ZTZjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9vaGNpLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9vaGNpLmMKQEAgLTEwMDYsMTMgKzEwMDYsMTIgQEAKIAogc3RhdGljIHN0cnVjdCBkZXNjcmlwdG9yICpmaW5kX2JyYW5jaF9kZXNjcmlwdG9yKHN0cnVjdCBkZXNjcmlwdG9yICpkLCBpbnQgeikKIHsKLQlpbnQgYiwga2V5OworCV9fbGUxNiBicmFuY2g7CiAKLQliICAgPSAobGUxNl90b19jcHUoZC0+Y29udHJvbCkgJiBERVNDUklQVE9SX0JSQU5DSF9BTFdBWVMpID4+IDI7Ci0Ja2V5ID0gKGxlMTZfdG9fY3B1KGQtPmNvbnRyb2wpICYgREVTQ1JJUFRPUl9LRVlfSU1NRURJQVRFKSA+PiA4OworCWJyYW5jaCA9IGQtPmNvbnRyb2wgJiBjcHVfdG9fbGUxNihERVNDUklQVE9SX0JSQU5DSF9BTFdBWVMpOwogCiAJLyogZmlndXJlIG91dCB3aGljaCBkZXNjcmlwdG9yIHRoZSBicmFuY2ggYWRkcmVzcyBnb2VzIGluICovCi0JaWYgKHogPT0gMiAmJiAoYiA9PSAzIHx8IGtleSA9PSAyKSkKKwlpZiAoeiA9PSAyICYmIGJyYW5jaCA9PSBjcHVfdG9fbGUxNihERVNDUklQVE9SX0JSQU5DSF9BTFdBWVMpKQogCQlyZXR1cm4gZDsKIAllbHNlCiAJCXJldHVybiBkICsgeiAtIDE7CkBAIC0xMTkzLDkgKzExOTIsNiBAQAogCXdtYigpOyAvKiBmaW5pc2ggaW5pdCBvZiBuZXcgZGVzY3JpcHRvcnMgYmVmb3JlIGJyYW5jaF9hZGRyZXNzIHVwZGF0ZSAqLwogCWN0eC0+cHJldi0+YnJhbmNoX2FkZHJlc3MgPSBjcHVfdG9fbGUzMihkX2J1cyB8IHopOwogCWN0eC0+cHJldiA9IGZpbmRfYnJhbmNoX2Rlc2NyaXB0b3IoZCwgeik7Ci0KLQlyZWdfd3JpdGUoY3R4LT5vaGNpLCBDT05UUk9MX1NFVChjdHgtPnJlZ3MpLCBDT05URVhUX1dBS0UpOwotCWZsdXNoX3dyaXRlcyhjdHgtPm9oY2kpOwogfQogCiBzdGF0aWMgdm9pZCBjb250ZXh0X3N0b3Aoc3RydWN0IGNvbnRleHQgKmN0eCkKQEAgLTEyMTgsNiArMTIxNCw3IEBACiB9CiAKIHN0cnVjdCBkcml2ZXJfZGF0YSB7CisJdTggaW5saW5lX2RhdGFbOF07CiAJc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0OwogfTsKIApAQCAtMTMwMSwyMCArMTI5OCwyOCBAQAogCQlyZXR1cm4gLTE7CiAJfQogCisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgZHJpdmVyX2RhdGEpID4gc2l6ZW9mKHN0cnVjdCBkZXNjcmlwdG9yKSk7CiAJZHJpdmVyX2RhdGEgPSAoc3RydWN0IGRyaXZlcl9kYXRhICopICZkWzNdOwogCWRyaXZlcl9kYXRhLT5wYWNrZXQgPSBwYWNrZXQ7CiAJcGFja2V0LT5kcml2ZXJfZGF0YSA9IGRyaXZlcl9kYXRhOwogCiAJaWYgKHBhY2tldC0+cGF5bG9hZF9sZW5ndGggPiAwKSB7Ci0JCXBheWxvYWRfYnVzID0KLQkJCWRtYV9tYXBfc2luZ2xlKG9oY2ktPmNhcmQuZGV2aWNlLCBwYWNrZXQtPnBheWxvYWQsCi0JCQkJICAgICAgIHBhY2tldC0+cGF5bG9hZF9sZW5ndGgsIERNQV9UT19ERVZJQ0UpOwotCQlpZiAoZG1hX21hcHBpbmdfZXJyb3Iob2hjaS0+Y2FyZC5kZXZpY2UsIHBheWxvYWRfYnVzKSkgewotCQkJcGFja2V0LT5hY2sgPSBSQ09ERV9TRU5EX0VSUk9SOwotCQkJcmV0dXJuIC0xOworCQlpZiAocGFja2V0LT5wYXlsb2FkX2xlbmd0aCA+IHNpemVvZihkcml2ZXJfZGF0YS0+aW5saW5lX2RhdGEpKSB7CisJCQlwYXlsb2FkX2J1cyA9IGRtYV9tYXBfc2luZ2xlKG9oY2ktPmNhcmQuZGV2aWNlLAorCQkJCQkJICAgICBwYWNrZXQtPnBheWxvYWQsCisJCQkJCQkgICAgIHBhY2tldC0+cGF5bG9hZF9sZW5ndGgsCisJCQkJCQkgICAgIERNQV9UT19ERVZJQ0UpOworCQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKG9oY2ktPmNhcmQuZGV2aWNlLCBwYXlsb2FkX2J1cykpIHsKKwkJCQlwYWNrZXQtPmFjayA9IFJDT0RFX1NFTkRfRVJST1I7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJcGFja2V0LT5wYXlsb2FkX2J1cwk9IHBheWxvYWRfYnVzOworCQkJcGFja2V0LT5wYXlsb2FkX21hcHBlZAk9IHRydWU7CisJCX0gZWxzZSB7CisJCQltZW1jcHkoZHJpdmVyX2RhdGEtPmlubGluZV9kYXRhLCBwYWNrZXQtPnBheWxvYWQsCisJCQkgICAgICAgcGFja2V0LT5wYXlsb2FkX2xlbmd0aCk7CisJCQlwYXlsb2FkX2J1cyA9IGRfYnVzICsgMyAqIHNpemVvZigqZCk7CiAJCX0KLQkJcGFja2V0LT5wYXlsb2FkX2J1cwk9IHBheWxvYWRfYnVzOwotCQlwYWNrZXQtPnBheWxvYWRfbWFwcGVkCT0gdHJ1ZTsKIAogCQlkWzJdLnJlcV9jb3VudCAgICA9IGNwdV90b19sZTE2KHBhY2tldC0+cGF5bG9hZF9sZW5ndGgpOwogCQlkWzJdLmRhdGFfYWRkcmVzcyA9IGNwdV90b19sZTMyKHBheWxvYWRfYnVzKTsKQEAgLTEzNDAsOCArMTM0NSwxMiBAQAogCiAJY29udGV4dF9hcHBlbmQoY3R4LCBkLCB6LCA0IC0geik7CiAKLQlpZiAoIWN0eC0+cnVubmluZykKKwlpZiAoY3R4LT5ydW5uaW5nKSB7CisJCXJlZ193cml0ZShvaGNpLCBDT05UUk9MX1NFVChjdHgtPnJlZ3MpLCBDT05URVhUX1dBS0UpOworCQlmbHVzaF93cml0ZXMob2hjaSk7CisJfSBlbHNlIHsKIAkJY29udGV4dF9ydW4oY3R4LCAwKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIwNjYsOCArMjA3NSw2IEBACiAKIAlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfU2VsZklEQnVmZmVyLCBvaGNpLT5zZWxmX2lkX2J1cyk7CiAJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0xpbmtDb250cm9sU2V0LAotCQkgIE9IQ0kxMzk0X0xpbmtDb250cm9sX3JjdlNlbGZJRCB8Ci0JCSAgT0hDSTEzOTRfTGlua0NvbnRyb2xfcmN2UGh5UGt0IHwKIAkJICBPSENJMTM5NF9MaW5rQ29udHJvbF9jeWNsZVRpbWVyRW5hYmxlIHwKIAkJICBPSENJMTM5NF9MaW5rQ29udHJvbF9jeWNsZU1hc3Rlcik7CiAKQEAgLTIwOTQsOSArMjEwMSw2IEBACiAJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0ZhaXJuZXNzQ29udHJvbCwgMCk7CiAJY2FyZC0+cHJpb3JpdHlfYnVkZ2V0X2ltcGxlbWVudGVkID0gb2hjaS0+cHJpX3JlcV9tYXggIT0gMDsKIAotCWFyX2NvbnRleHRfcnVuKCZvaGNpLT5hcl9yZXF1ZXN0X2N0eCk7Ci0JYXJfY29udGV4dF9ydW4oJm9oY2ktPmFyX3Jlc3BvbnNlX2N0eCk7Ci0KIAlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfUGh5VXBwZXJCb3VuZCwgMHgwMDAxMDAwMCk7CiAJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0ludEV2ZW50Q2xlYXIsIH4wKTsKIAlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfSW50TWFza0NsZWFyLCB+MCk7CkBAIC0yMTg2LDcgKzIxOTAsMTMgQEAKIAlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfSENDb250cm9sU2V0LAogCQkgIE9IQ0kxMzk0X0hDQ29udHJvbF9saW5rRW5hYmxlIHwKIAkJICBPSENJMTM5NF9IQ0NvbnRyb2xfQklCaW1hZ2VWYWxpZCk7Ci0JZmx1c2hfd3JpdGVzKG9oY2kpOworCisJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0xpbmtDb250cm9sU2V0LAorCQkgIE9IQ0kxMzk0X0xpbmtDb250cm9sX3JjdlNlbGZJRCB8CisJCSAgT0hDSTEzOTRfTGlua0NvbnRyb2xfcmN2UGh5UGt0KTsKKworCWFyX2NvbnRleHRfcnVuKCZvaGNpLT5hcl9yZXF1ZXN0X2N0eCk7CisJYXJfY29udGV4dF9ydW4oJm9oY2ktPmFyX3Jlc3BvbnNlX2N0eCk7IC8qIGFsc28gZmx1c2hlcyB3cml0ZXMgKi8KIAogCS8qIFdlIGFyZSByZWFkeSB0byBnbywgcmVzZXQgYnVzIHRvIGZpbmlzaCBpbml0aWFsaXphdGlvbi4gKi8KIAlmd19zY2hlZHVsZV9idXNfcmVzZXQoJm9oY2ktPmNhcmQsIGZhbHNlLCB0cnVlKTsKQEAgLTIxOTksNyArMjIwOSw2IEBACiB7CiAJc3RydWN0IGZ3X29oY2kgKm9oY2k7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gLUVCVVNZOwogCV9fYmUzMiAqbmV4dF9jb25maWdfcm9tOwogCWRtYV9hZGRyX3QgdW5pbml0aWFsaXplZF92YXIobmV4dF9jb25maWdfcm9tX2J1cyk7CiAKQEAgLTIyNDAsMjIgKzIyNDksMzcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZvaGNpLT5sb2NrLCBmbGFncyk7CiAKKwkvKgorCSAqIElmIHRoZXJlIGlzIG5vdCBhbiBhbHJlYWR5IHBlbmRpbmcgY29uZmlnX3JvbSB1cGRhdGUsCisJICogcHVzaCBvdXIgbmV3IGFsbG9jYXRpb24gaW50byB0aGUgb2hjaS0+bmV4dF9jb25maWdfcm9tCisJICogYW5kIHRoZW4gbWFyayB0aGUgbG9jYWwgdmFyaWFibGUgYXMgbnVsbCBzbyB0aGF0IHdlCisJICogd29uJ3QgZGVhbGxvY2F0ZSB0aGUgbmV3IGJ1ZmZlci4KKwkgKgorCSAqIE9UT0gsIGlmIHRoZXJlIGlzIGEgcGVuZGluZyBjb25maWdfcm9tIHVwZGF0ZSwganVzdAorCSAqIHVzZSB0aGF0IGJ1ZmZlciB3aXRoIHRoZSBuZXcgY29uZmlnX3JvbSBkYXRhLCBhbmQKKwkgKiBsZXQgdGhpcyByb3V0aW5lIGZyZWUgdGhlIHVudXNlZCBETUEgYWxsb2NhdGlvbi4KKwkgKi8KKwogCWlmIChvaGNpLT5uZXh0X2NvbmZpZ19yb20gPT0gTlVMTCkgewogCQlvaGNpLT5uZXh0X2NvbmZpZ19yb20gPSBuZXh0X2NvbmZpZ19yb207CiAJCW9oY2ktPm5leHRfY29uZmlnX3JvbV9idXMgPSBuZXh0X2NvbmZpZ19yb21fYnVzOwotCi0JCWNvcHlfY29uZmlnX3JvbShvaGNpLT5uZXh0X2NvbmZpZ19yb20sIGNvbmZpZ19yb20sIGxlbmd0aCk7Ci0KLQkJb2hjaS0+bmV4dF9oZWFkZXIgPSBjb25maWdfcm9tWzBdOwotCQlvaGNpLT5uZXh0X2NvbmZpZ19yb21bMF0gPSAwOwotCi0JCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9Db25maWdST01tYXAsCi0JCQkgIG9oY2ktPm5leHRfY29uZmlnX3JvbV9idXMpOwotCQlyZXQgPSAwOworCQluZXh0X2NvbmZpZ19yb20gPSBOVUxMOwogCX0KIAorCWNvcHlfY29uZmlnX3JvbShvaGNpLT5uZXh0X2NvbmZpZ19yb20sIGNvbmZpZ19yb20sIGxlbmd0aCk7CisKKwlvaGNpLT5uZXh0X2hlYWRlciA9IGNvbmZpZ19yb21bMF07CisJb2hjaS0+bmV4dF9jb25maWdfcm9tWzBdID0gMDsKKworCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9Db25maWdST01tYXAsIG9oY2ktPm5leHRfY29uZmlnX3JvbV9idXMpOworCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2hjaS0+bG9jaywgZmxhZ3MpOwogCisJLyogSWYgd2UgZGlkbid0IHVzZSB0aGUgRE1BIGFsbG9jYXRpb24sIGRlbGV0ZSBpdC4gKi8KKwlpZiAobmV4dF9jb25maWdfcm9tICE9IE5VTEwpCisJCWRtYV9mcmVlX2NvaGVyZW50KG9oY2ktPmNhcmQuZGV2aWNlLCBDT05GSUdfUk9NX1NJWkUsCisJCQkJICBuZXh0X2NvbmZpZ19yb20sIG5leHRfY29uZmlnX3JvbV9idXMpOworCiAJLyoKIAkgKiBOb3cgaW5pdGlhdGUgYSBidXMgcmVzZXQgdG8gaGF2ZSB0aGUgY2hhbmdlcyB0YWtlCiAJICogZWZmZWN0LiBXZSBjbGVhbiB1cCB0aGUgb2xkIGNvbmZpZyByb20gbWVtb3J5IGFuZCBETUEKQEAgLTIyNjMsMTMgKzIyODcsMTAgQEAKIAkgKiBjb250cm9sbGVyIGNvdWxkIG5lZWQgdG8gYWNjZXNzIGl0IGJlZm9yZSB0aGUgYnVzIHJlc2V0CiAJICogdGFrZXMgZWZmZWN0LgogCSAqLwotCWlmIChyZXQgPT0gMCkKLQkJZndfc2NoZWR1bGVfYnVzX3Jlc2V0KCZvaGNpLT5jYXJkLCB0cnVlLCB0cnVlKTsKLQllbHNlCi0JCWRtYV9mcmVlX2NvaGVyZW50KG9oY2ktPmNhcmQuZGV2aWNlLCBDT05GSUdfUk9NX1NJWkUsCi0JCQkJICBuZXh0X2NvbmZpZ19yb20sIG5leHRfY29uZmlnX3JvbV9idXMpOwogCi0JcmV0dXJuIHJldDsKKwlmd19zY2hlZHVsZV9idXNfcmVzZXQoJm9oY2ktPmNhcmQsIHRydWUsIHRydWUpOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIG9oY2lfc2VuZF9yZXF1ZXN0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQpCkBAIC0zMTAxLDYgKzMxMjIsMTUgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBvaGNpX2ZsdXNoX3F1ZXVlX2lzbyhzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmJhc2UpCit7CisJc3RydWN0IGNvbnRleHQgKmN0eCA9CisJCQkmY29udGFpbmVyX29mKGJhc2UsIHN0cnVjdCBpc29fY29udGV4dCwgYmFzZSktPmNvbnRleHQ7CisKKwlyZWdfd3JpdGUoY3R4LT5vaGNpLCBDT05UUk9MX1NFVChjdHgtPnJlZ3MpLCBDT05URVhUX1dBS0UpOworCWZsdXNoX3dyaXRlcyhjdHgtPm9oY2kpOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZ3X2NhcmRfZHJpdmVyIG9oY2lfZHJpdmVyID0gewogCS5lbmFibGUJCQk9IG9oY2lfZW5hYmxlLAogCS5yZWFkX3BoeV9yZWcJCT0gb2hjaV9yZWFkX3BoeV9yZWcsCkBAIC0zMTE3LDYgKzMxNDcsNyBAQAogCS5mcmVlX2lzb19jb250ZXh0CT0gb2hjaV9mcmVlX2lzb19jb250ZXh0LAogCS5zZXRfaXNvX2NoYW5uZWxzCT0gb2hjaV9zZXRfaXNvX2NoYW5uZWxzLAogCS5xdWV1ZV9pc28JCT0gb2hjaV9xdWV1ZV9pc28sCisJLmZsdXNoX3F1ZXVlX2lzbwk9IG9oY2lfZmx1c2hfcXVldWVfaXNvLAogCS5zdGFydF9pc28JCT0gb2hjaV9zdGFydF9pc28sCiAJLnN0b3BfaXNvCQk9IG9oY2lfc3RvcF9pc28sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9zYnAyLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYwppbmRleCA3N2VkNTg5Li40MTg0MWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYwpAQCAtMTI1LDkgKzEyNSw2IEBACiAJIiwgb3ZlcnJpZGUgaW50ZXJuYWwgYmxhY2tsaXN0ID0gIiBfX3N0cmluZ2lmeShTQlAyX1dPUktBUk9VTkRfT1ZFUlJJREUpCiAJIiwgb3IgYSBjb21iaW5hdGlvbikiKTsKIAotLyogSSBkb24ndCBrbm93IHdoeSB0aGUgU0NTSSBzdGFjayBkb2Vzbid0IGRlZmluZSBzb21ldGhpbmcgbGlrZSB0aGlzLi4uICovCi10eXBlZGVmIHZvaWQgKCpzY3NpX2RvbmVfZm5fdCkoc3RydWN0IHNjc2lfY21uZCAqKTsKLQogc3RhdGljIGNvbnN0IGNoYXIgc2JwMl9kcml2ZXJfbmFtZVtdID0gInNicDIiOwogCiAvKgpAQCAtMjYxLDcgKzI1OCw2IEBACiAJc3RydWN0IGtyZWYga3JlZjsKIAlkbWFfYWRkcl90IHJlcXVlc3RfYnVzOwogCWludCByY29kZTsKLQlzdHJ1Y3Qgc2JwMl9wb2ludGVyIHBvaW50ZXI7CiAJdm9pZCAoKmNhbGxiYWNrKShzdHJ1Y3Qgc2JwMl9vcmIgKiBvcmIsIHN0cnVjdCBzYnAyX3N0YXR1cyAqIHN0YXR1cyk7CiAJc3RydWN0IGxpc3RfaGVhZCBsaW5rOwogfTsKQEAgLTMxNCw3ICszMTAsNiBAQAogCQl1OCBjb21tYW5kX2Jsb2NrW1NCUDJfTUFYX0NEQl9TSVpFXTsKIAl9IHJlcXVlc3Q7CiAJc3RydWN0IHNjc2lfY21uZCAqY21kOwotCXNjc2lfZG9uZV9mbl90IGRvbmU7CiAJc3RydWN0IHNicDJfbG9naWNhbF91bml0ICpsdTsKIAogCXN0cnVjdCBzYnAyX3BvaW50ZXIgcGFnZV90YWJsZVtTR19BTExdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKQEAgLTQ5NCwxMCArNDg5LDExIEBACiAJCQkgIGludCBub2RlX2lkLCBpbnQgZ2VuZXJhdGlvbiwgdTY0IG9mZnNldCkKIHsKIAlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPSB0YXJnZXRfZGV2aWNlKGx1LT50Z3QpOworCXN0cnVjdCBzYnAyX3BvaW50ZXIgb3JiX3BvaW50ZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCW9yYi0+cG9pbnRlci5oaWdoID0gMDsKLQlvcmItPnBvaW50ZXIubG93ID0gY3B1X3RvX2JlMzIob3JiLT5yZXF1ZXN0X2J1cyk7CisJb3JiX3BvaW50ZXIuaGlnaCA9IDA7CisJb3JiX3BvaW50ZXIubG93ID0gY3B1X3RvX2JlMzIob3JiLT5yZXF1ZXN0X2J1cyk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2aWNlLT5jYXJkLT5sb2NrLCBmbGFncyk7CiAJbGlzdF9hZGRfdGFpbCgmb3JiLT5saW5rLCAmbHUtPm9yYl9saXN0KTsKQEAgLTUwOCw3ICs1MDQsNyBAQAogCiAJZndfc2VuZF9yZXF1ZXN0KGRldmljZS0+Y2FyZCwgJm9yYi0+dCwgVENPREVfV1JJVEVfQkxPQ0tfUkVRVUVTVCwKIAkJCW5vZGVfaWQsIGdlbmVyYXRpb24sIGRldmljZS0+bWF4X3NwZWVkLCBvZmZzZXQsCi0JCQkmb3JiLT5wb2ludGVyLCA4LCBjb21wbGV0ZV90cmFuc2FjdGlvbiwgb3JiKTsKKwkJCSZvcmJfcG9pbnRlciwgOCwgY29tcGxldGVfdHJhbnNhY3Rpb24sIG9yYik7CiB9CiAKIHN0YXRpYyBpbnQgc2JwMl9jYW5jZWxfb3JicyhzdHJ1Y3Qgc2JwMl9sb2dpY2FsX3VuaXQgKmx1KQpAQCAtODMwLDggKzgyNiw2IEBACiAJa3JlZl9wdXQoJnRndC0+a3JlZiwgc2JwMl9yZWxlYXNlX3RhcmdldCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc2JwMl93cTsKLQogLyoKICAqIEFsd2F5cyBnZXQgdGhlIHRhcmdldCdzIGtyZWYgd2hlbiBzY2hlZHVsaW5nIHdvcmsgb24gb25lIGl0cyB1bml0cy4KICAqIEVhY2ggd29ya3F1ZXVlIGpvYiBpcyByZXNwb25zaWJsZSB0byBjYWxsIHNicDJfdGFyZ2V0X3B1dCgpIHVwb24gcmV0dXJuLgpAQCAtODM5LDcgKzgzMyw3IEBACiBzdGF0aWMgdm9pZCBzYnAyX3F1ZXVlX3dvcmsoc3RydWN0IHNicDJfbG9naWNhbF91bml0ICpsdSwgdW5zaWduZWQgbG9uZyBkZWxheSkKIHsKIAlzYnAyX3RhcmdldF9nZXQobHUtPnRndCk7Ci0JaWYgKCFxdWV1ZV9kZWxheWVkX3dvcmsoc2JwMl93cSwgJmx1LT53b3JrLCBkZWxheSkpCisJaWYgKCFxdWV1ZV9kZWxheWVkX3dvcmsoZndfd29ya3F1ZXVlLCAmbHUtPndvcmssIGRlbGF5KSkKIAkJc2JwMl90YXJnZXRfcHV0KGx1LT50Z3QpOwogfQogCkBAIC0xMzk4LDcgKzEzOTIsNyBAQAogCXNicDJfdW5tYXBfc2NhdHRlcmxpc3QoZGV2aWNlLT5jYXJkLT5kZXZpY2UsIG9yYik7CiAKIAlvcmItPmNtZC0+cmVzdWx0ID0gcmVzdWx0OwotCW9yYi0+ZG9uZShvcmItPmNtZCk7CisJb3JiLT5jbWQtPnNjc2lfZG9uZShvcmItPmNtZCk7CiB9CiAKIHN0YXRpYyBpbnQgc2JwMl9tYXBfc2NhdHRlcmxpc3Qoc3RydWN0IHNicDJfY29tbWFuZF9vcmIgKm9yYiwKQEAgLTE0NjMsNyArMTQ1Nyw4IEBACiAKIC8qIFNDU0kgc3RhY2sgaW50ZWdyYXRpb24gKi8KIAotc3RhdGljIGludCBzYnAyX3Njc2lfcXVldWVjb21tYW5kX2xjayhzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHNjc2lfZG9uZV9mbl90IGRvbmUpCitzdGF0aWMgaW50IHNicDJfc2NzaV9xdWV1ZWNvbW1hbmQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsCisJCQkJICBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7CiAJc3RydWN0IHNicDJfbG9naWNhbF91bml0ICpsdSA9IGNtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPSB0YXJnZXRfZGV2aWNlKGx1LT50Z3QpOwpAQCAtMTQ3Nyw3ICsxNDcyLDcgQEAKIAlpZiAoY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfQklESVJFQ1RJT05BTCkgewogCQlmd19lcnJvcigiQ2FuJ3QgaGFuZGxlIERNQV9CSURJUkVDVElPTkFMLCByZWplY3RpbmcgY29tbWFuZFxuIik7CiAJCWNtZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OwotCQlkb25lKGNtZCk7CisJCWNtZC0+c2NzaV9kb25lKGNtZCk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTQ5MCwxMSArMTQ4NSw4IEBACiAJLyogSW5pdGlhbGl6ZSByY29kZSB0byBzb21ldGhpbmcgbm90IFJDT0RFX0NPTVBMRVRFLiAqLwogCW9yYi0+YmFzZS5yY29kZSA9IC0xOwogCWtyZWZfaW5pdCgmb3JiLT5iYXNlLmtyZWYpOwotCi0Jb3JiLT5sdSAgID0gbHU7Ci0Jb3JiLT5kb25lID0gZG9uZTsKLQlvcmItPmNtZCAgPSBjbWQ7Ci0KKwlvcmItPmx1ID0gbHU7CisJb3JiLT5jbWQgPSBjbWQ7CiAJb3JiLT5yZXF1ZXN0Lm5leHQuaGlnaCA9IGNwdV90b19iZTMyKFNCUDJfT1JCX05VTEwpOwogCW9yYi0+cmVxdWVzdC5taXNjID0gY3B1X3RvX2JlMzIoCiAJCUNPTU1BTkRfT1JCX01BWF9QQVlMT0FEKGx1LT50Z3QtPm1heF9wYXlsb2FkKSB8CkBAIC0xNTI5LDggKzE1MjEsNiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBERUZfU0NTSV9RQ01EKHNicDJfc2NzaV9xdWV1ZWNvbW1hbmQpCi0KIHN0YXRpYyBpbnQgc2JwMl9zY3NpX3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKIAlzdHJ1Y3Qgc2JwMl9sb2dpY2FsX3VuaXQgKmx1ID0gc2Rldi0+aG9zdGRhdGE7CkBAIC0xNjUzLDE3ICsxNjQzLDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHNicDJfaW5pdCh2b2lkKQogewotCXNicDJfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShLQlVJTERfTU9ETkFNRSk7Ci0JaWYgKCFzYnAyX3dxKQotCQlyZXR1cm4gLUVOT01FTTsKLQogCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnNicDJfZHJpdmVyLmRyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzYnAyX2NsZWFudXAodm9pZCkKIHsKIAlkcml2ZXJfdW5yZWdpc3Rlcigmc2JwMl9kcml2ZXIuZHJpdmVyKTsKLQlkZXN0cm95X3dvcmtxdWV1ZShzYnAyX3dxKTsKIH0KIAogbW9kdWxlX2luaXQoc2JwMl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvS2NvbmZpZyBiL2RyaXZlcnMvZmlybXdhcmUvS2NvbmZpZwppbmRleCBiM2EyNWE1Li5lZmJhMTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL0tjb25maWcKKysrIGIvZHJpdmVycy9maXJtd2FyZS9LY29uZmlnCkBAIC0xNTcsNCArMTU3LDYgQEAKIAkgIElmIHVuc3VyZSwgc2F5IE4gaGVyZS4gIERyaXZlcnMgdGhhdCBuZWVkIHRoZXNlIGhlbHBlcnMgd2lsbCBzZWxlY3QKIAkgIHRoaXMgb3B0aW9uIGF1dG9tYXRpY2FsbHkuCiAKK3NvdXJjZSAiZHJpdmVycy9maXJtd2FyZS9nb29nbGUvS2NvbmZpZyIKKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9NYWtlZmlsZSBiL2RyaXZlcnMvZmlybXdhcmUvTWFrZWZpbGUKaW5kZXggMDBiYjBiOC4uNDczMzhjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2Zpcm13YXJlL01ha2VmaWxlCkBAIC0xMywzICsxMyw1IEBACiBvYmotJChDT05GSUdfSVNDU0lfSUJGVCkJKz0gaXNjc2lfaWJmdC5vCiBvYmotJChDT05GSUdfRklSTVdBUkVfTUVNTUFQKQkrPSBtZW1tYXAubwogb2JqLSQoQ09ORklHX1NJR01BKQkJKz0gc2lnbWEubworCitvYmotJChDT05GSUdfR09PR0xFX0ZJUk1XQVJFKQkrPSBnb29nbGUvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VkZC5jIGIvZHJpdmVycy9maXJtd2FyZS9lZGQuYwppbmRleCA5NmMyNWQ5Li5mMWI3ZjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VkZC5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWRkLmMKQEAgLTUzMSw4ICs1MzEsOCBAQAogZWRkX2hhc19lZGQzMChzdHJ1Y3QgZWRkX2RldmljZSAqZWRldikKIHsKIAlzdHJ1Y3QgZWRkX2luZm8gKmluZm87Ci0JaW50IGksIG5vbnplcm9fcGF0aCA9IDA7Ci0JY2hhciBjOworCWludCBpOworCXU4IGNzdW0gPSAwOwogCiAJaWYgKCFlZGV2KQogCQlyZXR1cm4gMDsKQEAgLTU0NCwxNiArNTQ0LDE2IEBACiAJCXJldHVybiAwOwogCX0KIAotCWZvciAoaSA9IDMwOyBpIDw9IDczOyBpKyspIHsKLQkJYyA9ICooKCh1aW50OF90ICopIGluZm8pICsgaSArIDQpOwotCQlpZiAoYykgewotCQkJbm9uemVyb19wYXRoKys7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAoIW5vbnplcm9fcGF0aCkgeworCisJLyogV2Ugc3VwcG9ydCBvbmx5IFQxMyBzcGVjICovCisJaWYgKGluZm8tPnBhcmFtcy5kZXZpY2VfcGF0aF9pbmZvX2xlbmd0aCAhPSA0NCkKIAkJcmV0dXJuIDA7Ci0JfQorCisJZm9yIChpID0gMzA7IGkgPCBpbmZvLT5wYXJhbXMuZGV2aWNlX3BhdGhfaW5mb19sZW5ndGggKyAzMDsgaSsrKQorCQljc3VtICs9ICooKCh1OCAqKSZpbmZvLT5wYXJhbXMpICsgaSk7CisKKwlpZiAoY3N1bSkKKwkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpdmFycy5jIGIvZHJpdmVycy9maXJtd2FyZS9lZml2YXJzLmMKaW5kZXggZmYwYzM3My4uYTJkMmYxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZml2YXJzLmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZml2YXJzLmMKQEAgLTY3Nyw4ICs2NzcsOCBAQAogCiAJcmV0dXJuIDA7CiBvdXRfZnJlZToKLQlrZnJlZShlZml2YXJzLT5uZXdfdmFyKTsKLQllZml2YXJzLT5uZXdfdmFyID0gTlVMTDsKKwlrZnJlZShlZml2YXJzLT5kZWxfdmFyKTsKKwllZml2YXJzLT5kZWxfdmFyID0gTlVMTDsKIAlrZnJlZShlZml2YXJzLT5uZXdfdmFyKTsKIAllZml2YXJzLT5uZXdfdmFyID0gTlVMTDsKIAlyZXR1cm4gZXJyb3I7CkBAIC04MDMsNiArODAzLDggQEAKIAlvcHMuc2V0X3ZhcmlhYmxlID0gZWZpLnNldF92YXJpYWJsZTsKIAlvcHMuZ2V0X25leHRfdmFyaWFibGUgPSBlZmkuZ2V0X25leHRfdmFyaWFibGU7CiAJZXJyb3IgPSByZWdpc3Rlcl9lZml2YXJzKCZfX2VmaXZhcnMsICZvcHMsIGVmaV9rb2JqKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXJyX3B1dDsKIAogCS8qIERvbid0IGZvcmdldCB0aGUgc3lzdGFiIGVudHJ5ICovCiAJZXJyb3IgPSBzeXNmc19jcmVhdGVfZ3JvdXAoZWZpX2tvYmosICZlZmlfc3Vic3lzX2F0dHJfZ3JvdXApOwpAQCAtODEwLDE4ICs4MTIsMjUgQEAKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiZWZpdmFyczogU3lzZnMgYXR0cmlidXRlIGV4cG9ydCBmYWlsZWQgd2l0aCBlcnJvciAlZC5cbiIsCiAJCSAgICAgICBlcnJvcik7Ci0JCXVucmVnaXN0ZXJfZWZpdmFycygmX19lZml2YXJzKTsKLQkJa29iamVjdF9wdXQoZWZpX2tvYmopOworCQlnb3RvIGVycl91bnJlZ2lzdGVyOwogCX0KIAorCXJldHVybiAwOworCitlcnJfdW5yZWdpc3RlcjoKKwl1bnJlZ2lzdGVyX2VmaXZhcnMoJl9fZWZpdmFycyk7CitlcnJfcHV0OgorCWtvYmplY3RfcHV0KGVmaV9rb2JqKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdAogZWZpdmFyc19leGl0KHZvaWQpCiB7Ci0JdW5yZWdpc3Rlcl9lZml2YXJzKCZfX2VmaXZhcnMpOwotCWtvYmplY3RfcHV0KGVmaV9rb2JqKTsKKwlpZiAoZWZpX2VuYWJsZWQpIHsKKwkJdW5yZWdpc3Rlcl9lZml2YXJzKCZfX2VmaXZhcnMpOworCQlrb2JqZWN0X3B1dChlZmlfa29iaik7CisJfQogfQogCiBtb2R1bGVfaW5pdChlZml2YXJzX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9nb29nbGUvS2NvbmZpZyBiL2RyaXZlcnMvZmlybXdhcmUvZ29vZ2xlL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcwOTZiNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZ29vZ2xlL0tjb25maWcKQEAgLTAsMCArMSwzMSBAQAorY29uZmlnIEdPT0dMRV9GSVJNV0FSRQorCWJvb2wgIkdvb2dsZSBGaXJtd2FyZSBEcml2ZXJzIgorCWRlcGVuZHMgb24gWDg2CisJZGVmYXVsdCBuCisJaGVscAorCSAgVGhlc2UgZmlybXdhcmUgZHJpdmVycyBhcmUgdXNlZCBieSBHb29nbGUncyBzZXJ2ZXJzLiAgVGhleSBhcmUKKwkgIG9ubHkgdXNlZnVsIGlmIHlvdSBhcmUgd29ya2luZyBkaXJlY3RseSBvbiBvbmUgb2YgdGhlaXIKKwkgIHByb3ByaWV0YXJ5IHNlcnZlcnMuICBJZiBpbiBkb3VidCwgc2F5ICJOIi4KKworbWVudSAiR29vZ2xlIEZpcm13YXJlIERyaXZlcnMiCisJZGVwZW5kcyBvbiBHT09HTEVfRklSTVdBUkUKKworY29uZmlnIEdPT0dMRV9TTUkKKwl0cmlzdGF0ZSAiU01JIGludGVyZmFjZSBmb3IgR29vZ2xlIHBsYXRmb3JtcyIKKwlkZXBlbmRzIG9uIEFDUEkgJiYgRE1JCisJc2VsZWN0IEVGSV9WQVJTCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgU01JIGNhbGxiYWNrcyBmb3IgR29vZ2xlCisJICBwbGF0Zm9ybXMuICBUaGlzIHByb3ZpZGVzIGFuIGludGVyZmFjZSBmb3Igd3JpdGluZyB0byBhbmQKKwkgIGNsZWFyaW5nIHRoZSBFRkkgZXZlbnQgbG9nIGFuZCByZWFkaW5nIGFuZCB3cml0aW5nIE5WUkFNCisJICB2YXJpYWJsZXMuCisKK2NvbmZpZyBHT09HTEVfTUVNQ09OU09MRQorCXRyaXN0YXRlICJGaXJtd2FyZSBNZW1vcnkgQ29uc29sZSIKKwlkZXBlbmRzIG9uIERNSQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGtlcm5lbCB0byBzZWFyY2ggZm9yIGEgZmlybXdhcmUgbG9nIGluCisJICB0aGUgRUJEQSBvbiBHb29nbGUgc2VydmVycy4gIElmIGZvdW5kLCB0aGlzIGxvZyBpcyBleHBvcnRlZCB0bworCSAgdXNlcmxhbmQgaW4gdGhlIGZpbGUgL3N5cy9maXJtd2FyZS9sb2cuCisKK2VuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZ29vZ2xlL01ha2VmaWxlIGIvZHJpdmVycy9maXJtd2FyZS9nb29nbGUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRhMjk0ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZ29vZ2xlL01ha2VmaWxlCkBAIC0wLDAgKzEsMyBAQAorCitvYmotJChDT05GSUdfR09PR0xFX1NNSSkJCSs9IGdzbWkubworb2JqLSQoQ09ORklHX0dPT0dMRV9NRU1DT05TT0xFKQkJKz0gbWVtY29uc29sZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2dvb2dsZS9nc21pLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2dvb2dsZS9nc21pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE3ZjBiMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZ29vZ2xlL2dzbWkuYwpAQCAtMCwwICsxLDk0MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBBdXRob3I6IGRsYXVyaWVAZ29vZ2xlLmNvbSAoRHVuY2FuIExhdXJpZSkKKyAqCisgKiBSZS13b3JrZWQgdG8gZXhwb3NlIHN5c2ZzIEFQSXMgYnkgbWlrZXdAZ29vZ2xlLmNvbSAoTWlrZSBXYXljaGlzb24pCisgKgorICogRUZJIFNNSSBpbnRlcmZhY2UgZm9yIEdvb2dsZSBwbGF0Zm9ybXMKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgorCisjZGVmaW5lIEdTTUlfU0hVVERPV05fQ0xFQU4JMAkvKiBDbGVhbiBTaHV0ZG93biAqLworLyogVE9ETyhtaWtld0Bnb29nbGUuY29tKTogVGllIGluIEhBUkRMT0NLVVBfREVURUNUT1Igd2l0aCBOTUlXRFQgKi8KKyNkZWZpbmUgR1NNSV9TSFVURE9XTl9OTUlXRFQJMQkvKiBOTUkgV2F0Y2hkb2cgKi8KKyNkZWZpbmUgR1NNSV9TSFVURE9XTl9QQU5JQwkyCS8qIFBhbmljICovCisjZGVmaW5lIEdTTUlfU0hVVERPV05fT09QUwkzCS8qIE9vcHMgKi8KKyNkZWZpbmUgR1NNSV9TSFVURE9XTl9ESUUJNAkvKiBEaWUgLS0gTm8gbG9uZ2VyIG1lYW5pbmdmdWwgKi8KKyNkZWZpbmUgR1NNSV9TSFVURE9XTl9NQ0UJNQkvKiBNYWNoaW5lIENoZWNrICovCisjZGVmaW5lIEdTTUlfU0hVVERPV05fU09GVFdEVAk2CS8qIFNvZnR3YXJlIFdhdGNoZG9nICovCisjZGVmaW5lIEdTTUlfU0hVVERPV05fTUJFCTcJLyogVW5jb3JyZWN0ZWQgRUNDICovCisjZGVmaW5lIEdTTUlfU0hVVERPV05fVFJJUExFCTgJLyogVHJpcGxlIEZhdWx0ICovCisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JCSIxLjAiCisjZGVmaW5lIEdTTUlfR1VJRF9TSVpFCQkxNgorI2RlZmluZSBHU01JX0JVRl9TSVpFCQkxMDI0CisjZGVmaW5lIEdTTUlfQlVGX0FMSUdOCQlzaXplb2YodTY0KQorI2RlZmluZSBHU01JX0NBTExCQUNLCQkweGVmCisKKy8qIFNNSSByZXR1cm4gY29kZXMgKi8KKyNkZWZpbmUgR1NNSV9TVUNDRVNTCQkweDAwCisjZGVmaW5lIEdTTUlfVU5TVVBQT1JURUQyCTB4MDMKKyNkZWZpbmUgR1NNSV9MT0dfRlVMTAkJMHgwYgorI2RlZmluZSBHU01JX1ZBUl9OT1RfRk9VTkQJMHgwZQorI2RlZmluZSBHU01JX0hBTkRTSEFLRV9TUElOCTB4N2QKKyNkZWZpbmUgR1NNSV9IQU5EU0hBS0VfQ0YJMHg3ZQorI2RlZmluZSBHU01JX0hBTkRTSEFLRV9OT05FCTB4N2YKKyNkZWZpbmUgR1NNSV9JTlZBTElEX1BBUkFNRVRFUgkweDgyCisjZGVmaW5lIEdTTUlfVU5TVVBQT1JURUQJMHg4MworI2RlZmluZSBHU01JX0JVRkZFUl9UT09fU01BTEwJMHg4NQorI2RlZmluZSBHU01JX05PVF9SRUFEWQkJMHg4NgorI2RlZmluZSBHU01JX0RFVklDRV9FUlJPUgkweDg3CisjZGVmaW5lIEdTTUlfTk9UX0ZPVU5ECQkweDhlCisKKyNkZWZpbmUgUVVJUktZX0JPQVJEX0hBU0ggMHg3OGEzMGE1MAorCisvKiBJbnRlcm5hbGx5IHVzZWQgY29tbWFuZHMgcGFzc2VkIHRvIHRoZSBmaXJtd2FyZSAqLworI2RlZmluZSBHU01JX0NNRF9HRVRfTlZSQU1fVkFSCQkweDAxCisjZGVmaW5lIEdTTUlfQ01EX0dFVF9ORVhUX1ZBUgkJMHgwMgorI2RlZmluZSBHU01JX0NNRF9TRVRfTlZSQU1fVkFSCQkweDAzCisjZGVmaW5lIEdTTUlfQ01EX1NFVF9FVkVOVF9MT0cJCTB4MDgKKyNkZWZpbmUgR1NNSV9DTURfQ0xFQVJfRVZFTlRfTE9HCTB4MDkKKyNkZWZpbmUgR1NNSV9DTURfQ0xFQVJfQ09ORklHCQkweDIwCisjZGVmaW5lIEdTTUlfQ01EX0hBTkRTSEFLRV9UWVBFCQkweEMxCisKKy8qIE1hZ2ljIGVudHJ5IHR5cGUgZm9yIGtlcm5lbCBldmVudHMgKi8KKyNkZWZpbmUgR1NNSV9MT0dfRU5UUllfVFlQRV9LRVJORUwgICAgIDB4REVBRAorCisvKiBTTUkgYnVmZmVycyBtdXN0IGJlIGluIDMyYml0IHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgKi8KK3N0cnVjdCBnc21pX2J1ZiB7CisJdTggKnN0YXJ0OwkJCS8qIHN0YXJ0IG9mIGJ1ZmZlciAqLworCXNpemVfdCBsZW5ndGg7CQkJLyogbGVuZ3RoIG9mIGJ1ZmZlciAqLworCWRtYV9hZGRyX3QgaGFuZGxlOwkJLyogZG1hIGFsbG9jYXRpb24gaGFuZGxlICovCisJdTMyIGFkZHJlc3M7CQkJLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBidWZmZXIgKi8KK307CisKK3N0cnVjdCBnc21pX2RldmljZSB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsJLyogcGxhdGZvcm0gZGV2aWNlICovCisJc3RydWN0IGdzbWlfYnVmICpuYW1lX2J1ZjsJLyogdmFyaWFibGUgbmFtZSBidWZmZXIgKi8KKwlzdHJ1Y3QgZ3NtaV9idWYgKmRhdGFfYnVmOwkvKiBnZW5lcmljIGRhdGEgYnVmZmVyICovCisJc3RydWN0IGdzbWlfYnVmICpwYXJhbV9idWY7CS8qIHBhcmFtZXRlciBidWZmZXIgKi8KKwlzcGlubG9ja190IGxvY2s7CQkvKiBzZXJpYWxpemUgYWNjZXNzIHRvIFNNSXMgKi8KKwl1MTYgc21pX2NtZDsJCQkvKiBTTUkgY29tbWFuZCBwb3J0ICovCisJaW50IGhhbmRzaGFrZV90eXBlOwkJLyogZmlybXdhcmUgaGFuZGxlciBpbnRlcmxvY2sgdHlwZSAqLworCXN0cnVjdCBkbWFfcG9vbCAqZG1hX3Bvb2w7CS8qIERNQSBidWZmZXIgcG9vbCAqLworfSBnc21pX2RldjsKKworLyogUGFja2VkIHN0cnVjdHVyZXMgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgZmlybXdhcmUgKi8KK3N0cnVjdCBnc21pX252cmFtX3Zhcl9wYXJhbSB7CisJZWZpX2d1aWRfdAlndWlkOworCXUzMgkJbmFtZV9wdHI7CisJdTMyCQlhdHRyaWJ1dGVzOworCXUzMgkJZGF0YV9sZW47CisJdTMyCQlkYXRhX3B0cjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBnc21pX2dldF9uZXh0X3Zhcl9wYXJhbSB7CisJdTgJZ3VpZFtHU01JX0dVSURfU0laRV07CisJdTMyCW5hbWVfcHRyOworCXUzMgluYW1lX2xlbjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBnc21pX3NldF9ldmVudGxvZ19wYXJhbSB7CisJdTMyCWRhdGFfcHRyOworCXUzMglkYXRhX2xlbjsKKwl1MzIJdHlwZTsKK30gX19wYWNrZWQ7CisKKy8qIEV2ZW50IGxvZyBmb3JtYXRzICovCitzdHJ1Y3QgZ3NtaV9sb2dfZW50cnlfdHlwZV8xIHsKKwl1MTYJdHlwZTsKKwl1MzIJaW5zdGFuY2U7Cit9IF9fcGFja2VkOworCisKKy8qCisgKiBTb21lIHBsYXRmb3JtcyBkb24ndCBoYXZlIGV4cGxpY2l0IFNNSSBoYW5kc2hha2UKKyAqIGFuZCBuZWVkIHRvIHdhaXQgZm9yIFNNSSB0byBjb21wbGV0ZS4KKyAqLworI2RlZmluZSBHU01JX0RFRkFVTFRfU1BJTkNPVU5UCTB4MTAwMDAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3BpbmNvdW50ID0gR1NNSV9ERUZBVUxUX1NQSU5DT1VOVDsKK21vZHVsZV9wYXJhbShzcGluY291bnQsIHVpbnQsIDA2MDApOworTU9EVUxFX1BBUk1fREVTQyhzcGluY291bnQsCisJIlRoZSBudW1iZXIgb2YgbG9vcCBpdGVyYXRpb25zIHRvIHVzZSB3aGVuIHVzaW5nIHRoZSBzcGluIGhhbmRzaGFrZS4iKTsKKworc3RhdGljIHN0cnVjdCBnc21pX2J1ZiAqZ3NtaV9idWZfYWxsb2Modm9pZCkKK3sKKwlzdHJ1Y3QgZ3NtaV9idWYgKnNtaWJ1ZjsKKworCXNtaWJ1ZiA9IGt6YWxsb2Moc2l6ZW9mKCpzbWlidWYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNtaWJ1ZikgeworCQlwcmludGsoS0VSTl9FUlIgImdzbWk6IG91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBhbGxvY2F0ZSBidWZmZXIgaW4gMzJiaXQgYWRkcmVzcyBzcGFjZSAqLworCXNtaWJ1Zi0+c3RhcnQgPSBkbWFfcG9vbF9hbGxvYyhnc21pX2Rldi5kbWFfcG9vbCwgR0ZQX0tFUk5FTCwKKwkJCQkgICAgICAgJnNtaWJ1Zi0+aGFuZGxlKTsKKwlpZiAoIXNtaWJ1Zi0+c3RhcnQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc21pOiBmYWlsZWQgdG8gYWxsb2NhdGUgbmFtZSBidWZmZXJcbiIpOworCQlrZnJlZShzbWlidWYpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBmaWxsIGluIHRoZSBidWZmZXIgaGFuZGxlICovCisJc21pYnVmLT5sZW5ndGggPSBHU01JX0JVRl9TSVpFOworCXNtaWJ1Zi0+YWRkcmVzcyA9ICh1MzIpdmlydF90b19waHlzKHNtaWJ1Zi0+c3RhcnQpOworCisJcmV0dXJuIHNtaWJ1ZjsKK30KKworc3RhdGljIHZvaWQgZ3NtaV9idWZfZnJlZShzdHJ1Y3QgZ3NtaV9idWYgKnNtaWJ1ZikKK3sKKwlpZiAoc21pYnVmKSB7CisJCWlmIChzbWlidWYtPnN0YXJ0KQorCQkJZG1hX3Bvb2xfZnJlZShnc21pX2Rldi5kbWFfcG9vbCwgc21pYnVmLT5zdGFydCwKKwkJCQkgICAgICBzbWlidWYtPmhhbmRsZSk7CisJCWtmcmVlKHNtaWJ1Zik7CisJfQorfQorCisvKgorICogTWFrZSBhIGNhbGwgdG8gZ3NtaSBmdW5jKHN1YikuICBHU01JIGVycm9yIGNvZGVzIGFyZSB0cmFuc2xhdGVkIHRvCisgKiBpbi1rZXJuZWwgZXJybm9zICgwIG9uIHN1Y2Nlc3MsIC1FUlJOTyBvbiBlcnJvcikuCisgKi8KK3N0YXRpYyBpbnQgZ3NtaV9leGVjKHU4IGZ1bmMsIHU4IHN1YikKK3sKKwl1MTYgY21kID0gKHN1YiA8PCA4KSB8IGZ1bmM7CisJdTE2IHJlc3VsdCA9IDA7CisJaW50IHJjID0gMDsKKworCS8qCisJICogQUggIDogU3ViZnVuY3Rpb24gbnVtYmVyCisJICogQUwgIDogRnVuY3Rpb24gbnVtYmVyCisJICogRUJYIDogUGFyYW1ldGVyIGJsb2NrIGFkZHJlc3MKKwkgKiBEWCAgOiBTTUkgY29tbWFuZCBwb3J0CisJICoKKwkgKiBUaHJlZSBwcm90b2NvbHMgaGVyZS4gU2VlIGFsc28gdGhlIGNvbW1lbnQgaW4gZ3NtaV9pbml0KCkuCisJICovCisJaWYgKGdzbWlfZGV2LmhhbmRzaGFrZV90eXBlID09IEdTTUlfSEFORFNIQUtFX0NGKSB7CisJCS8qCisJCSAqIElmIGhhbmRzaGFrZV90eXBlID09IEhBTkRTSEFLRV9DRiB0aGVuIHNldCBDRiBvbiB0aGUKKwkJICogd2F5IGluIGFuZCB3YWl0IGZvciB0aGUgaGFuZGxlciB0byBjbGVhciBpdDsgdGhpcyBhdm9pZHMKKwkJICogY29ycnVwdGluZyByZWdpc3RlciBzdGF0ZSBvbiB0aG9zZSBjaGlwc2V0cyB3aGljaCBoYXZlCisJCSAqIGEgZGVsYXkgYmV0d2VlbiB3cml0aW5nIHRoZSBTTUkgdHJpZ2dlciByZWdpc3RlciBhbmQKKwkJICogZW50ZXJpbmcgU01NLgorCQkgKi8KKwkJYXNtIHZvbGF0aWxlICgKKwkJCSJzdGNcbiIKKwkJCSJvdXRiICUlYWwsICUlZHhcbiIKKwkJIjE6ICAgICAgamMgMWJcbiIKKwkJCTogIj1hIiAocmVzdWx0KQorCQkJOiAiMCIgKGNtZCksCisJCQkgICJkIiAoZ3NtaV9kZXYuc21pX2NtZCksCisJCQkgICJiIiAoZ3NtaV9kZXYucGFyYW1fYnVmLT5hZGRyZXNzKQorCQkJOiAibWVtb3J5IiwgImNjIgorCQkpOworCX0gZWxzZSBpZiAoZ3NtaV9kZXYuaGFuZHNoYWtlX3R5cGUgPT0gR1NNSV9IQU5EU0hBS0VfU1BJTikgeworCQkvKgorCQkgKiBJZiBoYW5kc2hha2VfdHlwZSA9PSBIQU5EU0hBS0VfU1BJTiB3ZSBzcGluIGEKKwkJICogaHVuZHJlZC1pc2ggdXNlY3MgdG8gZW5zdXJlIHRoZSBTTUkgaGFzIHRyaWdnZXJlZC4KKwkJICovCisJCWFzbSB2b2xhdGlsZSAoCisJCQkib3V0YiAlJWFsLCAlJWR4XG4iCisJCSIxOiAgICAgIGxvb3AgMWJcbiIKKwkJCTogIj1hIiAocmVzdWx0KQorCQkJOiAiMCIgKGNtZCksCisJCQkgICJkIiAoZ3NtaV9kZXYuc21pX2NtZCksCisJCQkgICJiIiAoZ3NtaV9kZXYucGFyYW1fYnVmLT5hZGRyZXNzKSwKKwkJCSAgImMiIChzcGluY291bnQpCisJCQk6ICJtZW1vcnkiLCAiY2MiCisJCSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogSWYgaGFuZHNoYWtlX3R5cGUgPT0gSEFORFNIQUtFX05PTkUgd2UgZG8gbm90aGluZzsKKwkJICogZWl0aGVyIHdlIGRvbid0IG5lZWQgdG8gb3IgaXQncyBsZWdhY3kgZmlybXdhcmUgdGhhdAorCQkgKiBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlIENGIHByb3RvY29sLgorCQkgKi8KKwkJYXNtIHZvbGF0aWxlICgKKwkJCSJvdXRiICUlYWwsICUlZHhcblx0IgorCQkJOiAiPWEiIChyZXN1bHQpCisJCQk6ICIwIiAoY21kKSwKKwkJCSAgImQiIChnc21pX2Rldi5zbWlfY21kKSwKKwkJCSAgImIiIChnc21pX2Rldi5wYXJhbV9idWYtPmFkZHJlc3MpCisJCQk6ICJtZW1vcnkiLCAiY2MiCisJCSk7CisJfQorCisJLyogY2hlY2sgcmV0dXJuIGNvZGUgZnJvbSBTTUkgaGFuZGxlciAqLworCXN3aXRjaCAocmVzdWx0KSB7CisJY2FzZSBHU01JX1NVQ0NFU1M6CisJCWJyZWFrOworCWNhc2UgR1NNSV9WQVJfTk9UX0ZPVU5EOgorCQkvKiBub3QgcmVhbGx5IGFuIGVycm9yLCBidXQgbGV0IHRoZSBjYWxsZXIga25vdyAqLworCQlyYyA9IDE7CisJCWJyZWFrOworCWNhc2UgR1NNSV9JTlZBTElEX1BBUkFNRVRFUjoKKwkJcHJpbnRrKEtFUk5fRVJSICJnc21pOiBleGVjIDB4JTA0eDogSW52YWxpZCBwYXJhbWV0ZXJcbiIsIGNtZCk7CisJCXJjID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSBHU01JX0JVRkZFUl9UT09fU01BTEw6CisJCXByaW50ayhLRVJOX0VSUiAiZ3NtaTogZXhlYyAweCUwNHg6IEJ1ZmZlciB0b28gc21hbGxcbiIsIGNtZCk7CisJCXJjID0gLUVOT01FTTsKKwkJYnJlYWs7CisJY2FzZSBHU01JX1VOU1VQUE9SVEVEOgorCWNhc2UgR1NNSV9VTlNVUFBPUlRFRDI6CisJCWlmIChzdWIgIT0gR1NNSV9DTURfSEFORFNIQUtFX1RZUEUpCisJCQlwcmludGsoS0VSTl9FUlIgImdzbWk6IGV4ZWMgMHglMDR4OiBOb3Qgc3VwcG9ydGVkXG4iLAorCQkJICAgICAgIGNtZCk7CisJCXJjID0gLUVOT1NZUzsKKwkJYnJlYWs7CisJY2FzZSBHU01JX05PVF9SRUFEWToKKwkJcHJpbnRrKEtFUk5fRVJSICJnc21pOiBleGVjIDB4JTA0eDogTm90IHJlYWR5XG4iLCBjbWQpOworCQlyYyA9IC1FQlVTWTsKKwkJYnJlYWs7CisJY2FzZSBHU01JX0RFVklDRV9FUlJPUjoKKwkJcHJpbnRrKEtFUk5fRVJSICJnc21pOiBleGVjIDB4JTA0eDogRGV2aWNlIGVycm9yXG4iLCBjbWQpOworCQlyYyA9IC1FRkFVTFQ7CisJCWJyZWFrOworCWNhc2UgR1NNSV9OT1RfRk9VTkQ6CisJCXByaW50ayhLRVJOX0VSUiAiZ3NtaTogZXhlYyAweCUwNHg6IERhdGEgbm90IGZvdW5kXG4iLCBjbWQpOworCQlyYyA9IC1FTk9FTlQ7CisJCWJyZWFrOworCWNhc2UgR1NNSV9MT0dfRlVMTDoKKwkJcHJpbnRrKEtFUk5fRVJSICJnc21pOiBleGVjIDB4JTA0eDogTG9nIGZ1bGxcbiIsIGNtZCk7CisJCXJjID0gLUVOT1NQQzsKKwkJYnJlYWs7CisJY2FzZSBHU01JX0hBTkRTSEFLRV9DRjoKKwljYXNlIEdTTUlfSEFORFNIQUtFX1NQSU46CisJY2FzZSBHU01JX0hBTkRTSEFLRV9OT05FOgorCQlyYyA9IHJlc3VsdDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJnc21pOiBleGVjIDB4JTA0eDogVW5rbm93biBlcnJvciAweCUwNHhcbiIsCisJCSAgICAgICBjbWQsIHJlc3VsdCk7CisJCXJjID0gLUVOWElPOworCX0KKworCXJldHVybiByYzsKK30KKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgdW5pY29kZSBjaGFyYWN0ZXJzIGluIGRhdGEgKi8KK3N0YXRpYyBzaXplX3QKK3V0ZjE2X3N0cmxlbihlZmlfY2hhcjE2X3QgKmRhdGEsIHVuc2lnbmVkIGxvbmcgbWF4bGVuZ3RoKQoreworCXVuc2lnbmVkIGxvbmcgbGVuZ3RoID0gMDsKKworCXdoaWxlICgqZGF0YSsrICE9IDAgJiYgbGVuZ3RoIDwgbWF4bGVuZ3RoKQorCQlsZW5ndGgrKzsKKwlyZXR1cm4gbGVuZ3RoOworfQorCitzdGF0aWMgZWZpX3N0YXR1c190IGdzbWlfZ2V0X3ZhcmlhYmxlKGVmaV9jaGFyMTZfdCAqbmFtZSwKKwkJCQkgICAgICBlZmlfZ3VpZF90ICp2ZW5kb3IsIHUzMiAqYXR0ciwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nICpkYXRhX3NpemUsCisJCQkJICAgICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZ3NtaV9udnJhbV92YXJfcGFyYW0gcGFyYW0gPSB7CisJCS5uYW1lX3B0ciA9IGdzbWlfZGV2Lm5hbWVfYnVmLT5hZGRyZXNzLAorCQkuZGF0YV9wdHIgPSBnc21pX2Rldi5kYXRhX2J1Zi0+YWRkcmVzcywKKwkJLmRhdGFfbGVuID0gKHUzMikqZGF0YV9zaXplLAorCX07CisJZWZpX3N0YXR1c190IHJldCA9IEVGSV9TVUNDRVNTOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc2l6ZV90IG5hbWVfbGVuID0gdXRmMTZfc3RybGVuKG5hbWUsIEdTTUlfQlVGX1NJWkUgLyAyKTsKKwlpbnQgcmM7CisKKwlpZiAobmFtZV9sZW4gPj0gR1NNSV9CVUZfU0laRSAvIDIpCisJCXJldHVybiBFRklfQkFEX0JVRkZFUl9TSVpFOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdzbWlfZGV2LmxvY2ssIGZsYWdzKTsKKworCS8qIFZlbmRvciBndWlkICovCisJbWVtY3B5KCZwYXJhbS5ndWlkLCB2ZW5kb3IsIHNpemVvZihwYXJhbS5ndWlkKSk7CisKKwkvKiB2YXJpYWJsZSBuYW1lLCBhbHJlYWR5IGluIFVURi0xNiAqLworCW1lbXNldChnc21pX2Rldi5uYW1lX2J1Zi0+c3RhcnQsIDAsIGdzbWlfZGV2Lm5hbWVfYnVmLT5sZW5ndGgpOworCW1lbWNweShnc21pX2Rldi5uYW1lX2J1Zi0+c3RhcnQsIG5hbWUsIG5hbWVfbGVuICogMik7CisKKwkvKiBkYXRhIHBvaW50ZXIgKi8KKwltZW1zZXQoZ3NtaV9kZXYuZGF0YV9idWYtPnN0YXJ0LCAwLCBnc21pX2Rldi5kYXRhX2J1Zi0+bGVuZ3RoKTsKKworCS8qIHBhcmFtZXRlciBidWZmZXIgKi8KKwltZW1zZXQoZ3NtaV9kZXYucGFyYW1fYnVmLT5zdGFydCwgMCwgZ3NtaV9kZXYucGFyYW1fYnVmLT5sZW5ndGgpOworCW1lbWNweShnc21pX2Rldi5wYXJhbV9idWYtPnN0YXJ0LCAmcGFyYW0sIHNpemVvZihwYXJhbSkpOworCisJcmMgPSBnc21pX2V4ZWMoR1NNSV9DQUxMQkFDSywgR1NNSV9DTURfR0VUX05WUkFNX1ZBUik7CisJaWYgKHJjIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImdzbWk6IEdldCBWYXJpYWJsZSBmYWlsZWRcbiIpOworCQlyZXQgPSBFRklfTE9BRF9FUlJPUjsKKwl9IGVsc2UgaWYgKHJjID09IDEpIHsKKwkJLyogdmFyaWFibGUgd2FzIG5vdCBmb3VuZCAqLworCQlyZXQgPSBFRklfTk9UX0ZPVU5EOworCX0gZWxzZSB7CisJCS8qIEdldCB0aGUgYXJndW1lbnRzIGJhY2sgKi8KKwkJbWVtY3B5KCZwYXJhbSwgZ3NtaV9kZXYucGFyYW1fYnVmLT5zdGFydCwgc2l6ZW9mKHBhcmFtKSk7CisKKwkJLyogVGhlIHNpemUgcmVwb3J0ZWQgaXMgdGhlIG1pbiBvZiBhbGwgb2Ygb3VyIGJ1ZmZlcnMgKi8KKwkJKmRhdGFfc2l6ZSA9IG1pbigqZGF0YV9zaXplLCBnc21pX2Rldi5kYXRhX2J1Zi0+bGVuZ3RoKTsKKwkJKmRhdGFfc2l6ZSA9IG1pbl90KHVuc2lnbmVkIGxvbmcsICpkYXRhX3NpemUsIHBhcmFtLmRhdGFfbGVuKTsKKworCQkvKiBDb3B5IGRhdGEgYmFjayB0byByZXR1cm4gYnVmZmVyLiAqLworCQltZW1jcHkoZGF0YSwgZ3NtaV9kZXYuZGF0YV9idWYtPnN0YXJ0LCAqZGF0YV9zaXplKTsKKworCQkvKiBBbGwgdmFyaWFibGVzIGFyZSBoYXZlIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyAqLworCQkqYXR0ciA9IEVGSV9WQVJJQUJMRV9OT05fVk9MQVRJTEUgfAorCQkJRUZJX1ZBUklBQkxFX0JPT1RTRVJWSUNFX0FDQ0VTUyB8CisJCQlFRklfVkFSSUFCTEVfUlVOVElNRV9BQ0NFU1M7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3NtaV9kZXYubG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGVmaV9zdGF0dXNfdCBnc21pX2dldF9uZXh0X3ZhcmlhYmxlKHVuc2lnbmVkIGxvbmcgKm5hbWVfc2l6ZSwKKwkJCQkJICAgZWZpX2NoYXIxNl90ICpuYW1lLAorCQkJCQkgICBlZmlfZ3VpZF90ICp2ZW5kb3IpCit7CisJc3RydWN0IGdzbWlfZ2V0X25leHRfdmFyX3BhcmFtIHBhcmFtID0geworCQkubmFtZV9wdHIgPSBnc21pX2Rldi5uYW1lX2J1Zi0+YWRkcmVzcywKKwkJLm5hbWVfbGVuID0gZ3NtaV9kZXYubmFtZV9idWYtPmxlbmd0aCwKKwl9OworCWVmaV9zdGF0dXNfdCByZXQgPSBFRklfU1VDQ0VTUzsKKwlpbnQgcmM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIEZvciB0aGUgbW9tZW50LCBvbmx5IHN1cHBvcnQgYnVmZmVycyB0aGF0IGV4YWN0bHkgbWF0Y2ggaW4gc2l6ZSAqLworCWlmICgqbmFtZV9zaXplICE9IEdTTUlfQlVGX1NJWkUpCisJCXJldHVybiBFRklfQkFEX0JVRkZFUl9TSVpFOworCisJLyogTGV0J3MgbWFrZSBzdXJlIHRoZSB0aGluZyBpcyBhdCBsZWFzdCBudWxsLXRlcm1pbmF0ZWQgKi8KKwlpZiAodXRmMTZfc3RybGVuKG5hbWUsIEdTTUlfQlVGX1NJWkUgLyAyKSA9PSBHU01JX0JVRl9TSVpFIC8gMikKKwkJcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZnc21pX2Rldi5sb2NrLCBmbGFncyk7CisKKwkvKiBndWlkICovCisJbWVtY3B5KCZwYXJhbS5ndWlkLCB2ZW5kb3IsIHNpemVvZihwYXJhbS5ndWlkKSk7CisKKwkvKiB2YXJpYWJsZSBuYW1lLCBhbHJlYWR5IGluIFVURi0xNiAqLworCW1lbWNweShnc21pX2Rldi5uYW1lX2J1Zi0+c3RhcnQsIG5hbWUsICpuYW1lX3NpemUpOworCisJLyogcGFyYW1ldGVyIGJ1ZmZlciAqLworCW1lbXNldChnc21pX2Rldi5wYXJhbV9idWYtPnN0YXJ0LCAwLCBnc21pX2Rldi5wYXJhbV9idWYtPmxlbmd0aCk7CisJbWVtY3B5KGdzbWlfZGV2LnBhcmFtX2J1Zi0+c3RhcnQsICZwYXJhbSwgc2l6ZW9mKHBhcmFtKSk7CisKKwlyYyA9IGdzbWlfZXhlYyhHU01JX0NBTExCQUNLLCBHU01JX0NNRF9HRVRfTkVYVF9WQVIpOworCWlmIChyYyA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc21pOiBHZXQgTmV4dCBWYXJpYWJsZSBOYW1lIGZhaWxlZFxuIik7CisJCXJldCA9IEVGSV9MT0FEX0VSUk9SOworCX0gZWxzZSBpZiAocmMgPT0gMSkgeworCQkvKiB2YXJpYWJsZSBub3QgZm91bmQgLS0gZW5kIG9mIGxpc3QgKi8KKwkJcmV0ID0gRUZJX05PVF9GT1VORDsKKwl9IGVsc2UgeworCQkvKiBjb3B5IHZhcmlhYmxlIGRhdGEgYmFjayB0byByZXR1cm4gYnVmZmVyICovCisJCW1lbWNweSgmcGFyYW0sIGdzbWlfZGV2LnBhcmFtX2J1Zi0+c3RhcnQsIHNpemVvZihwYXJhbSkpOworCisJCS8qIENvcHkgdGhlIG5hbWUgYmFjayAqLworCQltZW1jcHkobmFtZSwgZ3NtaV9kZXYubmFtZV9idWYtPnN0YXJ0LCBHU01JX0JVRl9TSVpFKTsKKwkJKm5hbWVfc2l6ZSA9IHV0ZjE2X3N0cmxlbihuYW1lLCBHU01JX0JVRl9TSVpFIC8gMikgKiAyOworCisJCS8qIGNvcHkgZ3VpZCB0byByZXR1cm4gYnVmZmVyICovCisJCW1lbWNweSh2ZW5kb3IsICZwYXJhbS5ndWlkLCBzaXplb2YocGFyYW0uZ3VpZCkpOworCQlyZXQgPSBFRklfU1VDQ0VTUzsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnc21pX2Rldi5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgZWZpX3N0YXR1c190IGdzbWlfc2V0X3ZhcmlhYmxlKGVmaV9jaGFyMTZfdCAqbmFtZSwKKwkJCQkgICAgICBlZmlfZ3VpZF90ICp2ZW5kb3IsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBhdHRyLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YV9zaXplLAorCQkJCSAgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGdzbWlfbnZyYW1fdmFyX3BhcmFtIHBhcmFtID0geworCQkubmFtZV9wdHIgPSBnc21pX2Rldi5uYW1lX2J1Zi0+YWRkcmVzcywKKwkJLmRhdGFfcHRyID0gZ3NtaV9kZXYuZGF0YV9idWYtPmFkZHJlc3MsCisJCS5kYXRhX2xlbiA9ICh1MzIpZGF0YV9zaXplLAorCQkuYXR0cmlidXRlcyA9IEVGSV9WQVJJQUJMRV9OT05fVk9MQVRJTEUgfAorCQkJICAgICAgRUZJX1ZBUklBQkxFX0JPT1RTRVJWSUNFX0FDQ0VTUyB8CisJCQkgICAgICBFRklfVkFSSUFCTEVfUlVOVElNRV9BQ0NFU1MsCisJfTsKKwlzaXplX3QgbmFtZV9sZW4gPSB1dGYxNl9zdHJsZW4obmFtZSwgR1NNSV9CVUZfU0laRSAvIDIpOworCWVmaV9zdGF0dXNfdCByZXQgPSBFRklfU1VDQ0VTUzsKKwlpbnQgcmM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChuYW1lX2xlbiA+PSBHU01JX0JVRl9TSVpFIC8gMikKKwkJcmV0dXJuIEVGSV9CQURfQlVGRkVSX1NJWkU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3NtaV9kZXYubG9jaywgZmxhZ3MpOworCisJLyogZ3VpZCAqLworCW1lbWNweSgmcGFyYW0uZ3VpZCwgdmVuZG9yLCBzaXplb2YocGFyYW0uZ3VpZCkpOworCisJLyogdmFyaWFibGUgbmFtZSwgYWxyZWFkeSBpbiBVVEYtMTYgKi8KKwltZW1zZXQoZ3NtaV9kZXYubmFtZV9idWYtPnN0YXJ0LCAwLCBnc21pX2Rldi5uYW1lX2J1Zi0+bGVuZ3RoKTsKKwltZW1jcHkoZ3NtaV9kZXYubmFtZV9idWYtPnN0YXJ0LCBuYW1lLCBuYW1lX2xlbiAqIDIpOworCisJLyogZGF0YSBwb2ludGVyICovCisJbWVtc2V0KGdzbWlfZGV2LmRhdGFfYnVmLT5zdGFydCwgMCwgZ3NtaV9kZXYuZGF0YV9idWYtPmxlbmd0aCk7CisJbWVtY3B5KGdzbWlfZGV2LmRhdGFfYnVmLT5zdGFydCwgZGF0YSwgZGF0YV9zaXplKTsKKworCS8qIHBhcmFtZXRlciBidWZmZXIgKi8KKwltZW1zZXQoZ3NtaV9kZXYucGFyYW1fYnVmLT5zdGFydCwgMCwgZ3NtaV9kZXYucGFyYW1fYnVmLT5sZW5ndGgpOworCW1lbWNweShnc21pX2Rldi5wYXJhbV9idWYtPnN0YXJ0LCAmcGFyYW0sIHNpemVvZihwYXJhbSkpOworCisJcmMgPSBnc21pX2V4ZWMoR1NNSV9DQUxMQkFDSywgR1NNSV9DTURfU0VUX05WUkFNX1ZBUik7CisJaWYgKHJjIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImdzbWk6IFNldCBWYXJpYWJsZSBmYWlsZWRcbiIpOworCQlyZXQgPSBFRklfSU5WQUxJRF9QQVJBTUVURVI7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3NtaV9kZXYubG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBlZml2YXJfb3BlcmF0aW9ucyBlZml2YXJfb3BzID0geworCS5nZXRfdmFyaWFibGUgPSBnc21pX2dldF92YXJpYWJsZSwKKwkuc2V0X3ZhcmlhYmxlID0gZ3NtaV9zZXRfdmFyaWFibGUsCisJLmdldF9uZXh0X3ZhcmlhYmxlID0gZ3NtaV9nZXRfbmV4dF92YXJpYWJsZSwKK307CisKK3N0YXRpYyBzc2l6ZV90IGV2ZW50bG9nX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCSAgICAgICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCisJCQkgICAgICAgY2hhciAqYnVmLCBsb2ZmX3QgcG9zLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGdzbWlfc2V0X2V2ZW50bG9nX3BhcmFtIHBhcmFtID0geworCQkuZGF0YV9wdHIgPSBnc21pX2Rldi5kYXRhX2J1Zi0+YWRkcmVzcywKKwl9OworCWludCByYyA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIFB1bGwgdGhlIHR5cGUgb3V0ICovCisJaWYgKGNvdW50IDwgc2l6ZW9mKHUzMikpCisJCXJldHVybiAtRUlOVkFMOworCXBhcmFtLnR5cGUgPSAqKHUzMiAqKWJ1ZjsKKwljb3VudCAtPSBzaXplb2YodTMyKTsKKwlidWYgKz0gc2l6ZW9mKHUzMik7CisKKwkvKiBUaGUgcmVtYWluaW5nIGJ1ZmZlciBpcyB0aGUgZGF0YSBwYXlsb2FkICovCisJaWYgKGNvdW50ID4gZ3NtaV9kZXYuZGF0YV9idWYtPmxlbmd0aCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcGFyYW0uZGF0YV9sZW4gPSBjb3VudCAtIHNpemVvZih1MzIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdzbWlfZGV2LmxvY2ssIGZsYWdzKTsKKworCS8qIGRhdGEgcG9pbnRlciAqLworCW1lbXNldChnc21pX2Rldi5kYXRhX2J1Zi0+c3RhcnQsIDAsIGdzbWlfZGV2LmRhdGFfYnVmLT5sZW5ndGgpOworCW1lbWNweShnc21pX2Rldi5kYXRhX2J1Zi0+c3RhcnQsIGJ1ZiwgcGFyYW0uZGF0YV9sZW4pOworCisJLyogcGFyYW1ldGVyIGJ1ZmZlciAqLworCW1lbXNldChnc21pX2Rldi5wYXJhbV9idWYtPnN0YXJ0LCAwLCBnc21pX2Rldi5wYXJhbV9idWYtPmxlbmd0aCk7CisJbWVtY3B5KGdzbWlfZGV2LnBhcmFtX2J1Zi0+c3RhcnQsICZwYXJhbSwgc2l6ZW9mKHBhcmFtKSk7CisKKwlyYyA9IGdzbWlfZXhlYyhHU01JX0NBTExCQUNLLCBHU01JX0NNRF9TRVRfRVZFTlRfTE9HKTsKKwlpZiAocmMgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgImdzbWk6IFNldCBFdmVudCBMb2cgZmFpbGVkXG4iKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdzbWlfZGV2LmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByYzsKKworfQorCitzdGF0aWMgc3RydWN0IGJpbl9hdHRyaWJ1dGUgZXZlbnRsb2dfYmluX2F0dHIgPSB7CisJLmF0dHIgPSB7Lm5hbWUgPSAiYXBwZW5kX3RvX2V2ZW50bG9nIiwgLm1vZGUgPSAwMjAwfSwKKwkud3JpdGUgPSBldmVudGxvZ193cml0ZSwKK307CisKK3N0YXRpYyBzc2l6ZV90IGdzbWlfY2xlYXJfZXZlbnRsb2dfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJCSBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgcmM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlzdHJ1Y3QgeworCQl1MzIgcGVyY2VudGFnZTsKKwkJdTMyIGRhdGFfdHlwZTsKKwl9IHBhcmFtOworCisJcmMgPSBzdHJpY3Rfc3RydG91bChidWYsIDAsICZ2YWwpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJLyoKKwkgKiBWYWx1ZSBlbnRlcmVkIGlzIGEgcGVyY2VudGFnZSwgMCB0aHJvdWdoIDEwMCwgYW55dGhpbmcgZWxzZQorCSAqIGlzIGludmFsaWQuCisJICovCisJaWYgKHZhbCA+IDEwMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBkYXRhX3R5cGUgaGVyZSBzZWxlY3RzIHRoZSBzbWJpb3MgZXZlbnQgbG9nLiAqLworCXBhcmFtLnBlcmNlbnRhZ2UgPSB2YWw7CisJcGFyYW0uZGF0YV90eXBlID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZnc21pX2Rldi5sb2NrLCBmbGFncyk7CisKKwkvKiBwYXJhbWV0ZXIgYnVmZmVyICovCisJbWVtc2V0KGdzbWlfZGV2LnBhcmFtX2J1Zi0+c3RhcnQsIDAsIGdzbWlfZGV2LnBhcmFtX2J1Zi0+bGVuZ3RoKTsKKwltZW1jcHkoZ3NtaV9kZXYucGFyYW1fYnVmLT5zdGFydCwgJnBhcmFtLCBzaXplb2YocGFyYW0pKTsKKworCXJjID0gZ3NtaV9leGVjKEdTTUlfQ0FMTEJBQ0ssIEdTTUlfQ01EX0NMRUFSX0VWRU5UX0xPRyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnc21pX2Rldi5sb2NrLCBmbGFncyk7CisKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZ3NtaV9jbGVhcl9ldmVudGxvZ19hdHRyID0geworCS5hdHRyID0gey5uYW1lID0gImNsZWFyX2V2ZW50bG9nIiwgLm1vZGUgPSAwMjAwfSwKKwkuc3RvcmUgPSBnc21pX2NsZWFyX2V2ZW50bG9nX3N0b3JlLAorfTsKKworc3RhdGljIHNzaXplX3QgZ3NtaV9jbGVhcl9jb25maWdfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICAgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJaW50IHJjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3NtaV9kZXYubG9jaywgZmxhZ3MpOworCisJLyogY2xlYXIgcGFyYW1ldGVyIGJ1ZmZlciAqLworCW1lbXNldChnc21pX2Rldi5wYXJhbV9idWYtPnN0YXJ0LCAwLCBnc21pX2Rldi5wYXJhbV9idWYtPmxlbmd0aCk7CisKKwlyYyA9IGdzbWlfZXhlYyhHU01JX0NBTExCQUNLLCBHU01JX0NNRF9DTEVBUl9DT05GSUcpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3NtaV9kZXYubG9jaywgZmxhZ3MpOworCisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGdzbWlfY2xlYXJfY29uZmlnX2F0dHIgPSB7CisJLmF0dHIgPSB7Lm5hbWUgPSAiY2xlYXJfY29uZmlnIiwgLm1vZGUgPSAwMjAwfSwKKwkuc3RvcmUgPSBnc21pX2NsZWFyX2NvbmZpZ19zdG9yZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICpnc21pX2F0dHJzW10gPSB7CisJJmdzbWlfY2xlYXJfY29uZmlnX2F0dHIuYXR0ciwKKwkmZ3NtaV9jbGVhcl9ldmVudGxvZ19hdHRyLmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBpbnQgZ3NtaV9zaHV0ZG93bl9yZWFzb24oaW50IHJlYXNvbikKK3sKKwlzdHJ1Y3QgZ3NtaV9sb2dfZW50cnlfdHlwZV8xIGVudHJ5ID0geworCQkudHlwZSAgICAgPSBHU01JX0xPR19FTlRSWV9UWVBFX0tFUk5FTCwKKwkJLmluc3RhbmNlID0gcmVhc29uLAorCX07CisJc3RydWN0IGdzbWlfc2V0X2V2ZW50bG9nX3BhcmFtIHBhcmFtID0geworCQkuZGF0YV9sZW4gPSBzaXplb2YoZW50cnkpLAorCQkudHlwZSAgICAgPSAxLAorCX07CisJc3RhdGljIGludCBzYXZlZF9yZWFzb247CisJaW50IHJjID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogYXZvaWQgZHVwbGljYXRlIGVudHJpZXMgaW4gdGhlIGxvZyAqLworCWlmIChzYXZlZF9yZWFzb24gJiAoMSA8PCByZWFzb24pKQorCQlyZXR1cm4gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZnc21pX2Rldi5sb2NrLCBmbGFncyk7CisKKwlzYXZlZF9yZWFzb24gfD0gKDEgPDwgcmVhc29uKTsKKworCS8qIGRhdGEgcG9pbnRlciAqLworCW1lbXNldChnc21pX2Rldi5kYXRhX2J1Zi0+c3RhcnQsIDAsIGdzbWlfZGV2LmRhdGFfYnVmLT5sZW5ndGgpOworCW1lbWNweShnc21pX2Rldi5kYXRhX2J1Zi0+c3RhcnQsICZlbnRyeSwgc2l6ZW9mKGVudHJ5KSk7CisKKwkvKiBwYXJhbWV0ZXIgYnVmZmVyICovCisJcGFyYW0uZGF0YV9wdHIgPSBnc21pX2Rldi5kYXRhX2J1Zi0+YWRkcmVzczsKKwltZW1zZXQoZ3NtaV9kZXYucGFyYW1fYnVmLT5zdGFydCwgMCwgZ3NtaV9kZXYucGFyYW1fYnVmLT5sZW5ndGgpOworCW1lbWNweShnc21pX2Rldi5wYXJhbV9idWYtPnN0YXJ0LCAmcGFyYW0sIHNpemVvZihwYXJhbSkpOworCisJcmMgPSBnc21pX2V4ZWMoR1NNSV9DQUxMQkFDSywgR1NNSV9DTURfU0VUX0VWRU5UX0xPRyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnc21pX2Rldi5sb2NrLCBmbGFncyk7CisKKwlpZiAocmMgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgImdzbWk6IExvZyBTaHV0ZG93biBSZWFzb24gZmFpbGVkXG4iKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0VNRVJHICJnc21pOiBMb2cgU2h1dGRvd24gUmVhc29uIDB4JTAyeFxuIiwKKwkJICAgICAgIHJlYXNvbik7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgZ3NtaV9yZWJvb3RfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKKwkJCQl1bnNpZ25lZCBsb25nIHJlYXNvbiwgdm9pZCAqYXJnKQoreworCWdzbWlfc2h1dGRvd25fcmVhc29uKEdTTUlfU0hVVERPV05fQ0xFQU4pOworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBnc21pX3JlYm9vdF9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGdzbWlfcmVib290X2NhbGxiYWNrCit9OworCitzdGF0aWMgaW50IGdzbWlfZGllX2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgcmVhc29uLCB2b2lkICphcmcpCit7CisJaWYgKHJlYXNvbiA9PSBESUVfT09QUykKKwkJZ3NtaV9zaHV0ZG93bl9yZWFzb24oR1NNSV9TSFVURE9XTl9PT1BTKTsKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZ3NtaV9kaWVfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBnc21pX2RpZV9jYWxsYmFjaworfTsKKworc3RhdGljIGludCBnc21pX3BhbmljX2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyByZWFzb24sIHZvaWQgKmFyZykKK3sKKwlnc21pX3NodXRkb3duX3JlYXNvbihHU01JX1NIVVRET1dOX1BBTklDKTsKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZ3NtaV9wYW5pY19ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGdzbWlfcGFuaWNfY2FsbGJhY2ssCit9OworCisvKgorICogVGhpcyBoYXNoIGZ1bmN0aW9uIHdhcyBibGF0YW50bHkgY29waWVkIGZyb20gaW5jbHVkZS9saW51eC9oYXNoLmguCisgKiBJdCBpcyB1c2VkIGJ5IHRoaXMgZHJpdmVyIHRvIG9iZnVzY2F0ZSBhIGJvYXJkIG5hbWUgdGhhdCByZXF1aXJlcyBhCisgKiBxdWlyayB3aXRoaW4gdGhpcyBkcml2ZXIuCisgKgorICogUGxlYXNlIGRvIG5vdCByZW1vdmUgdGhpcyBjb3B5IG9mIHRoZSBmdW5jdGlvbiBhcyBhbnkgY2hhbmdlcyB0byB0aGUKKyAqIGdsb2JhbCB1dGlsaXR5IGhhc2hfNjQoKSBmdW5jdGlvbiB3b3VsZCBicmVhayB0aGlzIGRyaXZlcidzIGFiaWxpdHkKKyAqIHRvIGlkZW50aWZ5IGEgYm9hcmQgYW5kIHByb3ZpZGUgdGhlIGFwcHJvcHJpYXRlIHF1aXJrIC0tIG1pa2V3QGdvb2dsZS5jb20KKyAqLworc3RhdGljIHU2NCBfX2luaXQgbG9jYWxfaGFzaF82NCh1NjQgdmFsLCB1bnNpZ25lZCBiaXRzKQoreworCXU2NCBoYXNoID0gdmFsOworCisJLyogIFNpZ2gsIGdjYyBjYW4ndCBvcHRpbWlzZSB0aGlzIGFsb25lIGxpa2UgaXQgZG9lcyBmb3IgMzIgYml0cy4gKi8KKwl1NjQgbiA9IGhhc2g7CisJbiA8PD0gMTg7CisJaGFzaCAtPSBuOworCW4gPDw9IDMzOworCWhhc2ggLT0gbjsKKwluIDw8PSAzOworCWhhc2ggKz0gbjsKKwluIDw8PSAzOworCWhhc2ggLT0gbjsKKwluIDw8PSA0OworCWhhc2ggKz0gbjsKKwluIDw8PSAyOworCWhhc2ggKz0gbjsKKworCS8qIEhpZ2ggYml0cyBhcmUgbW9yZSByYW5kb20sIHNvIHVzZSB0aGVtLiAqLworCXJldHVybiBoYXNoID4+ICg2NCAtIGJpdHMpOworfQorCitzdGF0aWMgdTMyIF9faW5pdCBoYXNoX29lbV90YWJsZV9pZChjaGFyIHNbOF0pCit7CisJdTY0IGlucHV0OworCW1lbWNweSgmaW5wdXQsIHMsIDgpOworCXJldHVybiBsb2NhbF9oYXNoXzY0KGlucHV0LCAzMik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBnc21pX2RtaV90YWJsZVtdIF9faW5pdGRhdGEgPSB7CisJeworCQkuaWRlbnQgPSAiR29vZ2xlIEJvYXJkIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwgIkdvb2dsZSwgSW5jLiIpLAorCQl9LAorCX0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGRtaSwgZ3NtaV9kbWlfdGFibGUpOworCitzdGF0aWMgX19pbml0IGludCBnc21pX3N5c3RlbV92YWxpZCh2b2lkKQoreworCXUzMiBoYXNoOworCisJaWYgKCFkbWlfY2hlY2tfc3lzdGVtKGdzbWlfZG1pX3RhYmxlKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKgorCSAqIE9ubHkgbmV3ZXIgZmlybXdhcmUgc3VwcG9ydHMgdGhlIGdzbWkgaW50ZXJmYWNlLiAgQWxsIG9sZGVyCisJICogZmlybXdhcmUgdGhhdCBkaWRuJ3Qgc3VwcG9ydCB0aGlzIGludGVyZmFjZSB1c2VkIHRvIHBsdWcgdGhlCisJICogdGFibGUgbmFtZSBpbiB0aGUgZmlyc3QgZm91ciBieXRlcyBvZiB0aGUgb2VtX3RhYmxlX2lkIGZpZWxkLgorCSAqIE5ld2VyIGZpcm13YXJlIGRvZXNuJ3QgZG8gdGhhdCB0aG91Z2gsIHNvIHVzZSB0aGF0IGFzIHRoZQorCSAqIGRpc2NyaW1pbmFudCBmYWN0b3IuICBXZSBoYXZlIHRvIGRvIHRoaXMgaW4gb3JkZXIgdG8KKwkgKiB3aGl0ZXdhc2ggb3VyIGJvYXJkIG5hbWVzIG91dCBvZiB0aGUgcHVibGljIGRyaXZlci4KKwkgKi8KKwlpZiAoIXN0cm5jbXAoYWNwaV9nYmxfRkFEVC5oZWFkZXIub2VtX3RhYmxlX2lkLCAiRkFDUCIsIDQpKSB7CisJCXByaW50ayhLRVJOX0lORk8gImdzbWk6IEJvYXJkIGlzIHRvbyBvbGRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBEaXNhYmxlIG9uIGJvYXJkIHdpdGggMS4wIEJJT1MgZHVlIHRvIEdvb2dsZSBidWcgMjYwMjY1NyAqLworCWhhc2ggPSBoYXNoX29lbV90YWJsZV9pZChhY3BpX2dibF9GQURULmhlYWRlci5vZW1fdGFibGVfaWQpOworCWlmIChoYXNoID09IFFVSVJLWV9CT0FSRF9IQVNIKSB7CisJCWNvbnN0IGNoYXIgKmJpb3NfdmVyID0gZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQklPU19WRVJTSU9OKTsKKwkJaWYgKHN0cm5jbXAoYmlvc192ZXIsICIxLjAiLCAzKSA9PSAwKSB7CisJCQlwcl9pbmZvKCJnc21pOiBkaXNhYmxlZCBvbiB0aGlzIGJvYXJkJ3MgQklPUyAlc1xuIiwKKwkJCQliaW9zX3Zlcik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCX0KKworCS8qIGNoZWNrIGZvciB2YWxpZCBTTUkgY29tbWFuZCBwb3J0IGluIEFDUEkgRkFEVCAqLworCWlmIChhY3BpX2dibF9GQURULnNtaV9jb21tYW5kID09IDApIHsKKwkJcHJfaW5mbygiZ3NtaTogbWlzc2luZyBzbWlfY29tbWFuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIEZvdW5kICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qga29iamVjdCAqZ3NtaV9rb2JqOworc3RhdGljIHN0cnVjdCBlZml2YXJzIGVmaXZhcnM7CisKK3N0YXRpYyBfX2luaXQgaW50IGdzbWlfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCXJldCA9IGdzbWlfc3lzdGVtX3ZhbGlkKCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWdzbWlfZGV2LnNtaV9jbWQgPSBhY3BpX2dibF9GQURULnNtaV9jb21tYW5kOworCisJLyogcmVnaXN0ZXIgZGV2aWNlICovCisJZ3NtaV9kZXYucGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImdzbWkiLCAtMSwgTlVMTCwgMCk7CisJaWYgKElTX0VSUihnc21pX2Rldi5wZGV2KSkgeworCQlwcmludGsoS0VSTl9FUlIgImdzbWk6IHVuYWJsZSB0byByZWdpc3RlciBwbGF0Zm9ybSBkZXZpY2VcbiIpOworCQlyZXR1cm4gUFRSX0VSUihnc21pX2Rldi5wZGV2KTsKKwl9CisKKwkvKiBTTUkgYWNjZXNzIG5lZWRzIHRvIGJlIHNlcmlhbGl6ZWQgKi8KKwlzcGluX2xvY2tfaW5pdCgmZ3NtaV9kZXYubG9jayk7CisKKwkvKiBTTUkgY2FsbGJhY2tzIHJlcXVpcmUgMzJiaXQgYWRkcmVzc2VzICovCisJZ3NtaV9kZXYucGRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKwlnc21pX2Rldi5wZGV2LT5kZXYuZG1hX21hc2sgPQorCQkmZ3NtaV9kZXYucGRldi0+ZGV2LmNvaGVyZW50X2RtYV9tYXNrOworCXJldCA9IC1FTk9NRU07CisJZ3NtaV9kZXYuZG1hX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUoImdzbWkiLCAmZ3NtaV9kZXYucGRldi0+ZGV2LAorCQkJCQkgICAgIEdTTUlfQlVGX1NJWkUsIEdTTUlfQlVGX0FMSUdOLCAwKTsKKwlpZiAoIWdzbWlfZGV2LmRtYV9wb29sKQorCQlnb3RvIG91dF9lcnI7CisKKwkvKgorCSAqIHByZS1hbGxvY2F0ZSBidWZmZXJzIGJlY2F1c2Ugc29tZXRpbWVzIHdlIGFyZSBjYWxsZWQgd2hlbgorCSAqIHRoaXMgaXMgbm90IGZlYXNpYmxlOiBvb3BzLCBwYW5pYywgZGllLCBtY2UsIGV0YworCSAqLworCWdzbWlfZGV2Lm5hbWVfYnVmID0gZ3NtaV9idWZfYWxsb2MoKTsKKwlpZiAoIWdzbWlfZGV2Lm5hbWVfYnVmKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3NtaTogZmFpbGVkIHRvIGFsbG9jYXRlIG5hbWUgYnVmZmVyXG4iKTsKKwkJZ290byBvdXRfZXJyOworCX0KKworCWdzbWlfZGV2LmRhdGFfYnVmID0gZ3NtaV9idWZfYWxsb2MoKTsKKwlpZiAoIWdzbWlfZGV2LmRhdGFfYnVmKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3NtaTogZmFpbGVkIHRvIGFsbG9jYXRlIGRhdGEgYnVmZmVyXG4iKTsKKwkJZ290byBvdXRfZXJyOworCX0KKworCWdzbWlfZGV2LnBhcmFtX2J1ZiA9IGdzbWlfYnVmX2FsbG9jKCk7CisJaWYgKCFnc21pX2Rldi5wYXJhbV9idWYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJnc21pOiBmYWlsZWQgdG8gYWxsb2NhdGUgcGFyYW0gYnVmZmVyXG4iKTsKKwkJZ290byBvdXRfZXJyOworCX0KKworCS8qCisJICogRGV0ZXJtaW5lIHR5cGUgb2YgaGFuZHNoYWtlIHVzZWQgdG8gc2VyaWFsaXplIHRoZSBTTUkKKwkgKiBlbnRyeS4gU2VlIGFsc28gZ3NtaV9leGVjKCkuCisJICoKKwkgKiBUaGVyZSdzIGEgImJlaGF2aW9yIiBwcmVzZW50IG9uIHNvbWUgY2hpcHNldHMgd2hlcmUgd3JpdGluZyB0aGUKKwkgKiBTTUkgdHJpZ2dlciByZWdpc3RlciBpbiB0aGUgc291dGhicmlkZ2UgZG9lc24ndCByZXN1bHQgaW4gYW4KKwkgKiBpbW1lZGlhdGUgU01JLiBSYXRoZXIsIHRoZSBwcm9jZXNzb3IgY2FuIGV4ZWN1dGUgImEgZmV3IiBtb3JlCisJICogaW5zdHJ1Y3Rpb25zIGJlZm9yZSB0aGUgU01JIHRha2VzIGVmZmVjdC4gVG8gZW5zdXJlIHN5bmNocm9ub3VzCisJICogYmVoYXZpb3IsIGltcGxlbWVudCBhIGhhbmRzaGFrZSBiZXR3ZWVuIHRoZSBrZXJuZWwgZHJpdmVyIGFuZCB0aGUKKwkgKiBmaXJtd2FyZSBoYW5kbGVyIHRvIHNwaW4gdW50aWwgcmVsZWFzZWQuIFRoaXMgaW9jdGwgZGV0ZXJtaW5lcworCSAqIHRoZSB0eXBlIG9mIGhhbmRzaGFrZS4KKwkgKgorCSAqIE5PTkU6IFRoZSBmaXJtd2FyZSBoYW5kbGVyIGRvZXMgbm90IGltcGxlbWVudCBhbnkKKwkgKiBoYW5kc2hha2UuIEVpdGhlciBpdCBkb2Vzbid0IG5lZWQgdG8sIG9yIGl0J3MgbGVnYWN5IGZpcm13YXJlCisJICogdGhhdCBkb2Vzbid0IGtub3cgaXQgbmVlZHMgdG8gYW5kIG5ldmVyIHdpbGwuCisJICoKKwkgKiBDRjogVGhlIGZpcm13YXJlIGhhbmRsZXIgd2lsbCBjbGVhciB0aGUgQ0YgaW4gdGhlIHNhdmVkCisJICogc3RhdGUgYmVmb3JlIHJldHVybmluZy4gVGhlIGRyaXZlciBtYXkgc2V0IHRoZSBDRiBhbmQgdGVzdCBmb3IKKwkgKiBpdCB0byBjbGVhciBiZWZvcmUgcHJvY2VlZGluZy4KKwkgKgorCSAqIFNQSU46IFRoZSBmaXJtd2FyZSBoYW5kbGVyIGRvZXMgbm90IGltcGxlbWVudCBhbnkgaGFuZHNoYWtlCisJICogYnV0IHRoZSBkcml2ZXIgc2hvdWxkIHNwaW4gZm9yIGEgaHVuZHJlZCBvciBzbyBtaWNyb3NlY29uZHMKKwkgKiB0byBlbnN1cmUgdGhlIFNNSSBoYXMgdHJpZ2dlcmVkLgorCSAqCisJICogRmluYWxseSwgdGhlIGhhbmRsZXIgd2lsbCByZXR1cm4gLUVOT1NZUyBpZgorCSAqIEdTTUlfQ01EX0hBTkRTSEFLRV9UWVBFIGlzIHVuaW1wbGVtZW50ZWQsIHdoaWNoIGltcGxpZXMKKwkgKiBIQU5EU0hBS0VfTk9ORS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3NtaV9kZXYubG9jaywgZmxhZ3MpOworCWdzbWlfZGV2LmhhbmRzaGFrZV90eXBlID0gR1NNSV9IQU5EU0hBS0VfU1BJTjsKKwlnc21pX2Rldi5oYW5kc2hha2VfdHlwZSA9CisJICAgIGdzbWlfZXhlYyhHU01JX0NBTExCQUNLLCBHU01JX0NNRF9IQU5EU0hBS0VfVFlQRSk7CisJaWYgKGdzbWlfZGV2LmhhbmRzaGFrZV90eXBlID09IC1FTk9TWVMpCisJCWdzbWlfZGV2LmhhbmRzaGFrZV90eXBlID0gR1NNSV9IQU5EU0hBS0VfTk9ORTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnc21pX2Rldi5sb2NrLCBmbGFncyk7CisKKwkvKiBSZW1vdmUgYW5kIGNsZWFuIHVwIGdzbWkgaWYgdGhlIGhhbmRzaGFrZSBjb3VsZCBub3QgY29tcGxldGUuICovCisJaWYgKGdzbWlfZGV2LmhhbmRzaGFrZV90eXBlID09IC1FTlhJTykgeworCQlwcmludGsoS0VSTl9JTkZPICJnc21pIHZlcnNpb24gIiBEUklWRVJfVkVSU0lPTgorCQkgICAgICAgIiBmYWlsZWQgdG8gbG9hZFxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2VycjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJnc21pIHZlcnNpb24gIiBEUklWRVJfVkVSU0lPTiAiIGxvYWRlZFxuIik7CisKKwkvKiBSZWdpc3RlciBpbiB0aGUgZmlybXdhcmUgZGlyZWN0b3J5ICovCisJcmV0ID0gLUVOT01FTTsKKwlnc21pX2tvYmogPSBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkKCJnc21pIiwgZmlybXdhcmVfa29iaik7CisJaWYgKCFnc21pX2tvYmopIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiZ3NtaTogRmFpbGVkIHRvIGNyZWF0ZSBmaXJtd2FyZSBrb2JqXG4iKTsKKwkJZ290byBvdXRfZXJyOworCX0KKworCS8qIFNldHVwIGV2ZW50bG9nIGFjY2VzcyAqLworCXJldCA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZShnc21pX2tvYmosICZldmVudGxvZ19iaW5fYXR0cik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9JTkZPICJnc21pOiBGYWlsZWQgdG8gc2V0dXAgZXZlbnRsb2ciKTsKKwkJZ290byBvdXRfZXJyOworCX0KKworCS8qIE90aGVyIGF0dHJpYnV0ZXMgKi8KKwlyZXQgPSBzeXNmc19jcmVhdGVfZmlsZXMoZ3NtaV9rb2JqLCBnc21pX2F0dHJzKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0lORk8gImdzbWk6IEZhaWxlZCB0byBhZGQgYXR0cnMiKTsKKwkJZ290byBvdXRfZXJyOworCX0KKworCWlmIChyZWdpc3Rlcl9lZml2YXJzKCZlZml2YXJzLCAmZWZpdmFyX29wcywgZ3NtaV9rb2JqKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJnc21pOiBGYWlsZWQgdG8gcmVnaXN0ZXIgZWZpdmFyc1xuIik7CisJCWdvdG8gb3V0X2VycjsKKwl9CisKKwlyZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJmdzbWlfcmVib290X25vdGlmaWVyKTsKKwlyZWdpc3Rlcl9kaWVfbm90aWZpZXIoJmdzbWlfZGllX25vdGlmaWVyKTsKKwlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsCisJCQkJICAgICAgICZnc21pX3BhbmljX25vdGlmaWVyKTsKKworCXJldHVybiAwOworCisgb3V0X2VycjoKKwlrb2JqZWN0X3B1dChnc21pX2tvYmopOworCWdzbWlfYnVmX2ZyZWUoZ3NtaV9kZXYucGFyYW1fYnVmKTsKKwlnc21pX2J1Zl9mcmVlKGdzbWlfZGV2LmRhdGFfYnVmKTsKKwlnc21pX2J1Zl9mcmVlKGdzbWlfZGV2Lm5hbWVfYnVmKTsKKwlpZiAoZ3NtaV9kZXYuZG1hX3Bvb2wpCisJCWRtYV9wb29sX2Rlc3Ryb3koZ3NtaV9kZXYuZG1hX3Bvb2wpOworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGdzbWlfZGV2LnBkZXYpOworCXByX2luZm8oImdzbWk6IGZhaWxlZCB0byBsb2FkOiAlZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZ3NtaV9leGl0KHZvaWQpCit7CisJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJmdzbWlfcmVib290X25vdGlmaWVyKTsKKwl1bnJlZ2lzdGVyX2RpZV9ub3RpZmllcigmZ3NtaV9kaWVfbm90aWZpZXIpOworCWF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LAorCQkJCQkgJmdzbWlfcGFuaWNfbm90aWZpZXIpOworCXVucmVnaXN0ZXJfZWZpdmFycygmZWZpdmFycyk7CisKKwlrb2JqZWN0X3B1dChnc21pX2tvYmopOworCWdzbWlfYnVmX2ZyZWUoZ3NtaV9kZXYucGFyYW1fYnVmKTsKKwlnc21pX2J1Zl9mcmVlKGdzbWlfZGV2LmRhdGFfYnVmKTsKKwlnc21pX2J1Zl9mcmVlKGdzbWlfZGV2Lm5hbWVfYnVmKTsKKwlkbWFfcG9vbF9kZXN0cm95KGdzbWlfZGV2LmRtYV9wb29sKTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihnc21pX2Rldi5wZGV2KTsKK30KKworbW9kdWxlX2luaXQoZ3NtaV9pbml0KTsKK21vZHVsZV9leGl0KGdzbWlfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkdvb2dsZSwgSW5jLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9nb29nbGUvbWVtY29uc29sZS5jIGIvZHJpdmVycy9maXJtd2FyZS9nb29nbGUvbWVtY29uc29sZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhOTBiYTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Zpcm13YXJlL2dvb2dsZS9tZW1jb25zb2xlLmMKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBtZW1jb25zb2xlLmMKKyAqCisgKiBJbmZyYXN0cnVjdHVyZSBmb3IgaW1wb3J0aW5nIHRoZSBCSU9TIG1lbW9yeSBiYXNlZCBjb25zb2xlCisgKiBpbnRvIHRoZSBrZXJuZWwgbG9nIHJpbmdidWZmZXIuCisgKgorICogQ29weXJpZ2h0IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CisjaW5jbHVkZSA8YXNtL2Jpb3NfZWJkYS5oPgorCisjZGVmaW5lIEJJT1NfTUVNQ09OU09MRV9WMV9NQUdJQwkweERFQURCQUJFCisjZGVmaW5lIEJJT1NfTUVNQ09OU09MRV9WMl9NQUdJQwkoKCdNJyl8KCdDJzw8OCl8KCdPJzw8MTYpfCgnTic8PDI0KSkKKworc3RydWN0IGJpb3NtZW1jb25fZWJkYSB7CisJdTMyIHNpZ25hdHVyZTsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1OCAgZW5hYmxlZDsKKwkJCXUzMiBidWZmZXJfYWRkcjsKKwkJCXUxNiBzdGFydDsKKwkJCXUxNiBlbmQ7CisJCQl1MTYgbnVtX2NoYXJzOworCQkJdTggIHdyYXBwZWQ7CisJCX0gX19wYWNrZWQgdjE7CisJCXN0cnVjdCB7CisJCQl1MzIgYnVmZmVyX2FkZHI7CisJCQkvKiBNaXNkb2N1bWVudGVkIGFzIG51bWJlciBvZiBwYWdlcyEgKi8KKwkJCXUxNiBudW1fYnl0ZXM7CisJCQl1MTYgc3RhcnQ7CisJCQl1MTYgZW5kOworCQl9IF9fcGFja2VkIHYyOworCX07Cit9IF9fcGFja2VkOworCitzdGF0aWMgY2hhciAqbWVtY29uc29sZV9iYXNlYWRkcjsKK3N0YXRpYyBzaXplX3QgbWVtY29uc29sZV9sZW5ndGg7CisKK3N0YXRpYyBzc2l6ZV90IG1lbWNvbnNvbGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYnAsCisJCQkgICAgICAgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLCBjaGFyICpidWYsCisJCQkgICAgICAgbG9mZl90IHBvcywgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBtZW1vcnlfcmVhZF9mcm9tX2J1ZmZlcihidWYsIGNvdW50LCAmcG9zLCBtZW1jb25zb2xlX2Jhc2VhZGRyLAorCQkJCSAgICAgICBtZW1jb25zb2xlX2xlbmd0aCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBtZW1jb25zb2xlX2Jpbl9hdHRyID0geworCS5hdHRyID0gey5uYW1lID0gImxvZyIsIC5tb2RlID0gMDQ0NH0sCisJLnJlYWQgPSBtZW1jb25zb2xlX3JlYWQsCit9OworCisKK3N0YXRpYyB2b2lkIGZvdW5kX3YxX2hlYWRlcihzdHJ1Y3QgYmlvc21lbWNvbl9lYmRhICpoZHIpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiQklPUyBjb25zb2xlIHYxIEVCREEgc3RydWN0dXJlIGZvdW5kIGF0ICVwXG4iLCBoZHIpOworCXByaW50ayhLRVJOX0lORk8gIkJJT1MgY29uc29sZSBidWZmZXIgYXQgMHglLjh4LCAiCisJICAgICAgICJzdGFydCA9ICVkLCBlbmQgPSAlZCwgbnVtID0gJWRcbiIsCisJICAgICAgIGhkci0+djEuYnVmZmVyX2FkZHIsIGhkci0+djEuc3RhcnQsCisJICAgICAgIGhkci0+djEuZW5kLCBoZHItPnYxLm51bV9jaGFycyk7CisKKwltZW1jb25zb2xlX2xlbmd0aCA9IGhkci0+djEubnVtX2NoYXJzOworCW1lbWNvbnNvbGVfYmFzZWFkZHIgPSBwaHlzX3RvX3ZpcnQoaGRyLT52MS5idWZmZXJfYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIGZvdW5kX3YyX2hlYWRlcihzdHJ1Y3QgYmlvc21lbWNvbl9lYmRhICpoZHIpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiQklPUyBjb25zb2xlIHYyIEVCREEgc3RydWN0dXJlIGZvdW5kIGF0ICVwXG4iLCBoZHIpOworCXByaW50ayhLRVJOX0lORk8gIkJJT1MgY29uc29sZSBidWZmZXIgYXQgMHglLjh4LCAiCisJICAgICAgICJzdGFydCA9ICVkLCBlbmQgPSAlZCwgbnVtX2J5dGVzID0gJWRcbiIsCisJICAgICAgIGhkci0+djIuYnVmZmVyX2FkZHIsIGhkci0+djIuc3RhcnQsCisJICAgICAgIGhkci0+djIuZW5kLCBoZHItPnYyLm51bV9ieXRlcyk7CisKKwltZW1jb25zb2xlX2xlbmd0aCA9IGhkci0+djIuZW5kIC0gaGRyLT52Mi5zdGFydDsKKwltZW1jb25zb2xlX2Jhc2VhZGRyID0gcGh5c190b192aXJ0KGhkci0+djIuYnVmZmVyX2FkZHIKKwkJCQkJICAgKyBoZHItPnYyLnN0YXJ0KTsKK30KKworLyoKKyAqIFNlYXJjaCB0aHJvdWdoIHRoZSBFQkRBIGZvciB0aGUgQklPUyBNZW1vcnkgQ29uc29sZSwgYW5kCisgKiBzZXQgdGhlIGdsb2JhbCB2YXJpYWJsZXMgdG8gcG9pbnQgdG8gaXQuICBSZXR1cm4gdHJ1ZSBpZiBmb3VuZC4KKyAqLworc3RhdGljIGJvb2wgZm91bmRfbWVtY29uc29sZSh2b2lkKQoreworCXVuc2lnbmVkIGludCBhZGRyZXNzOworCXNpemVfdCBsZW5ndGgsIGN1cjsKKworCWFkZHJlc3MgPSBnZXRfYmlvc19lYmRhKCk7CisJaWYgKCFhZGRyZXNzKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkJJT1MgRUJEQSBub24tZXhpc3RlbnQuXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIEVCREEgbGVuZ3RoIGlzIGJ5dGUgMCBvZiBFQkRBIChpbiBLQikgKi8KKwlsZW5ndGggPSAqKHU4ICopcGh5c190b192aXJ0KGFkZHJlc3MpOworCWxlbmd0aCA8PD0gMTA7IC8qIGNvbnZlcnQgdG8gYnl0ZXMgKi8KKworCS8qCisJICogU2VhcmNoIHRocm91Z2ggRUJEQSBmb3IgQklPUyBtZW1vcnkgY29uc29sZSBzdHJ1Y3R1cmUKKwkgKiBub3RlOiBzaWduYXR1cmUgaXMgbm90IG5lY2Vzc2FyaWx5IGR3b3JkLWFsaWduZWQKKwkgKi8KKwlmb3IgKGN1ciA9IDA7IGN1ciA8IGxlbmd0aDsgY3VyKyspIHsKKwkJc3RydWN0IGJpb3NtZW1jb25fZWJkYSAqaGRyID0gcGh5c190b192aXJ0KGFkZHJlc3MgKyBjdXIpOworCisJCS8qIG1lbWNvbnNvbGUgdjEgKi8KKwkJaWYgKGhkci0+c2lnbmF0dXJlID09IEJJT1NfTUVNQ09OU09MRV9WMV9NQUdJQykgeworCQkJZm91bmRfdjFfaGVhZGVyKGhkcik7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJCS8qIG1lbWNvbnNvbGUgdjIgKi8KKwkJaWYgKGhkci0+c2lnbmF0dXJlID09IEJJT1NfTUVNQ09OU09MRV9WMl9NQUdJQykgeworCQkJZm91bmRfdjJfaGVhZGVyKGhkcik7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKworCXByaW50ayhLRVJOX0lORk8gIkJJT1MgY29uc29sZSBFQkRBIHN0cnVjdHVyZSBub3QgZm91bmQhXG4iKTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBtZW1jb25zb2xlX2RtaV90YWJsZVtdIF9faW5pdGRhdGEgPSB7CisJeworCQkuaWRlbnQgPSAiR29vZ2xlIEJvYXJkIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwgIkdvb2dsZSwgSW5jLiIpLAorCQl9LAorCX0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGRtaSwgbWVtY29uc29sZV9kbWlfdGFibGUpOworCitzdGF0aWMgaW50IF9faW5pdCBtZW1jb25zb2xlX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFkbWlfY2hlY2tfc3lzdGVtKG1lbWNvbnNvbGVfZG1pX3RhYmxlKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoIWZvdW5kX21lbWNvbnNvbGUoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltZW1jb25zb2xlX2Jpbl9hdHRyLnNpemUgPSBtZW1jb25zb2xlX2xlbmd0aDsKKworCXJldCA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZShmaXJtd2FyZV9rb2JqLCAmbWVtY29uc29sZV9iaW5fYXR0cik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbWVtY29uc29sZV9leGl0KHZvaWQpCit7CisJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKGZpcm13YXJlX2tvYmosICZtZW1jb25zb2xlX2Jpbl9hdHRyKTsKK30KKworbW9kdWxlX2luaXQobWVtY29uc29sZV9pbml0KTsKK21vZHVsZV9leGl0KG1lbWNvbnNvbGVfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkdvb2dsZSwgSW5jLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0X2ZpbmQuYyBiL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdF9maW5kLmMKaW5kZXggMjE5MjQ1Ni4uZjAzMmU0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0X2ZpbmQuYworKysgYi9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnRfZmluZC5jCkBAIC00Miw3ICs0MiwyMCBAQAogc3RydWN0IGFjcGlfdGFibGVfaWJmdCAqaWJmdF9hZGRyOwogRVhQT1JUX1NZTUJPTF9HUEwoaWJmdF9hZGRyKTsKIAotI2RlZmluZSBJQkZUX1NJR04gImlCRlQiCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwljaGFyICpzaWduOworfSBpYmZ0X3NpZ25zW10gPSB7CisjaWZkZWYgQ09ORklHX0FDUEkKKwkvKgorCSAqIE9uZSBzcGVjIHNheXMgIklCRlQiLCB0aGUgb3RoZXIgc2F5cyAiaUJGVCIuIFdlIGhhdmUgdG8gY2hlY2sKKwkgKiBmb3IgYm90aC4KKwkgKi8KKwl7IEFDUElfU0lHX0lCRlQgfSwKKyNlbmRpZgorCXsgImlCRlQiIH0sCisJeyAiQklGVCIgfSwJLyogQnJvYWRjb20gaVNDU0kgT2ZmbG9hZCAqLworfTsKKwogI2RlZmluZSBJQkZUX1NJR05fTEVOIDQKICNkZWZpbmUgSUJGVF9TVEFSVCAweDgwMDAwIC8qIDUxMmtCICovCiAjZGVmaW5lIElCRlRfRU5EIDB4MTAwMDAwIC8qIDFNQiAqLwpAQCAtNjIsNiArNzUsNyBAQAogCXVuc2lnbmVkIGxvbmcgcG9zOwogCXVuc2lnbmVkIGludCBsZW4gPSAwOwogCXZvaWQgKnZpcnQ7CisJaW50IGk7CiAKIAlmb3IgKHBvcyA9IElCRlRfU1RBUlQ7IHBvcyA8IElCRlRfRU5EOyBwb3MgKz0gMTYpIHsKIAkJLyogVGhlIHRhYmxlIGNhbid0IGJlIGluc2lkZSB0aGUgVkdBIEJJT1MgcmVzZXJ2ZWQgc3BhY2UsCkBAIC02OSwxOCArODMsMjMgQEAKIAkJaWYgKHBvcyA9PSBWR0FfTUVNKQogCQkJcG9zICs9IFZHQV9TSVpFOwogCQl2aXJ0ID0gaXNhX2J1c190b192aXJ0KHBvcyk7Ci0JCWlmIChtZW1jbXAodmlydCwgSUJGVF9TSUdOLCBJQkZUX1NJR05fTEVOKSA9PSAwKSB7Ci0JCQl1bnNpZ25lZCBsb25nICphZGRyID0KLQkJCSAgICAodW5zaWduZWQgbG9uZyAqKWlzYV9idXNfdG9fdmlydChwb3MgKyA0KTsKLQkJCWxlbiA9ICphZGRyOwotCQkJLyogaWYgdGhlIGxlbmd0aCBvZiB0aGUgdGFibGUgZXh0ZW5kcyBwYXN0IDFNLAotCQkJICogdGhlIHRhYmxlIGNhbm5vdCBiZSB2YWxpZC4gKi8KLQkJCWlmIChwb3MgKyBsZW4gPD0gKElCRlRfRU5ELTEpKSB7Ci0JCQkJaWJmdF9hZGRyID0gKHN0cnVjdCBhY3BpX3RhYmxlX2liZnQgKil2aXJ0OwotCQkJCWJyZWFrOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGliZnRfc2lnbnMpOyBpKyspIHsKKwkJCWlmIChtZW1jbXAodmlydCwgaWJmdF9zaWduc1tpXS5zaWduLCBJQkZUX1NJR05fTEVOKSA9PQorCQkJICAgIDApIHsKKwkJCQl1bnNpZ25lZCBsb25nICphZGRyID0KKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcgKilpc2FfYnVzX3RvX3ZpcnQocG9zICsgNCk7CisJCQkJbGVuID0gKmFkZHI7CisJCQkJLyogaWYgdGhlIGxlbmd0aCBvZiB0aGUgdGFibGUgZXh0ZW5kcyBwYXN0IDFNLAorCQkJCSAqIHRoZSB0YWJsZSBjYW5ub3QgYmUgdmFsaWQuICovCisJCQkJaWYgKHBvcyArIGxlbiA8PSAoSUJGVF9FTkQtMSkpIHsKKwkJCQkJaWJmdF9hZGRyID0gKHN0cnVjdCBhY3BpX3RhYmxlX2liZnQgKil2aXJ0OworCQkJCQlnb3RvIGRvbmU7CisJCQkJfQogCQkJfQogCQl9CiAJfQorZG9uZToKIAlyZXR1cm4gbGVuOwogfQogLyoKQEAgLTg5LDE4ICsxMDgsMTIgQEAKICAqLwogdW5zaWduZWQgbG9uZyBfX2luaXQgZmluZF9pYmZ0X3JlZ2lvbih1bnNpZ25lZCBsb25nICpzaXplcCkKIHsKLQorCWludCBpOwogCWliZnRfYWRkciA9IE5VTEw7CiAKICNpZmRlZiBDT05GSUdfQUNQSQotCS8qCi0JICogT25lIHNwZWMgc2F5cyAiSUJGVCIsIHRoZSBvdGhlciBzYXlzICJpQkZUIi4gV2UgaGF2ZSB0byBjaGVjawotCSAqIGZvciBib3RoLgotCSAqLwotCWlmICghaWJmdF9hZGRyKQotCQlhY3BpX3RhYmxlX3BhcnNlKEFDUElfU0lHX0lCRlQsIGFjcGlfZmluZF9pYmZ0KTsKLQlpZiAoIWliZnRfYWRkcikKLQkJYWNwaV90YWJsZV9wYXJzZShJQkZUX1NJR04sIGFjcGlfZmluZF9pYmZ0KTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpYmZ0X3NpZ25zKSAmJiAhaWJmdF9hZGRyOyBpKyspCisJCWFjcGlfdGFibGVfcGFyc2UoaWJmdF9zaWduc1tpXS5zaWduLCBhY3BpX2ZpbmRfaWJmdCk7CiAjZW5kaWYgLyogQ09ORklHX0FDUEkgKi8KIAogCS8qIGlCRlQgMS4wMyBzZWN0aW9uIDEuNC4zLjEgbWFuZGF0ZXMgdGhhdCBVRUZJIG1hY2hpbmVzIHdpbGwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKaW5kZXggYzU4ZjY5MS4uYjQ5MzY2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTI0LDYgKzI0LDcgQEAKIAlkZXBlbmRzIG9uIERSTQogCXNlbGVjdCBGQgogCXNlbGVjdCBGUkFNRUJVRkZFUl9DT05TT0xFIGlmICFFWFBFUlQKKwlzZWxlY3QgRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpZiBGUkFNRUJVRkZFUl9DT05TT0xFCiAJaGVscAogCSAgRkIgYW5kIENSVEMgaGVscGVycyBmb3IgS01TIGRyaXZlcnMuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCmluZGV4IDk1MDcyMDQuLjE0MGI5NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwpAQCAtMzQyLDkgKzM0MiwyMiBAQAogfQogRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX2RlYnVnX2xlYXZlKTsKIAorYm9vbCBkcm1fZmJfaGVscGVyX3Jlc3RvcmVfZmJkZXZfbW9kZShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKQoreworCWJvb2wgZXJyb3IgPSBmYWxzZTsKKwlpbnQgaSwgcmV0OworCWZvciAoaSA9IDA7IGkgPCBmYl9oZWxwZXItPmNydGNfY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2RlX3NldCA9ICZmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldDsKKwkJcmV0ID0gZHJtX2NydGNfaGVscGVyX3NldF9jb25maWcobW9kZV9zZXQpOworCQlpZiAocmV0KQorCQkJZXJyb3IgPSB0cnVlOworCX0KKwlyZXR1cm4gZXJyb3I7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfcmVzdG9yZV9mYmRldl9tb2RlKTsKKwogYm9vbCBkcm1fZmJfaGVscGVyX2ZvcmNlX2tlcm5lbF9tb2RlKHZvaWQpCiB7Ci0JaW50IGkgPSAwOwogCWJvb2wgcmV0LCBlcnJvciA9IGZhbHNlOwogCXN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXI7CiAKQEAgLTM1MiwxMiArMzY1LDEyIEBACiAJCXJldHVybiBmYWxzZTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoaGVscGVyLCAma2VybmVsX2ZiX2hlbHBlcl9saXN0LCBrZXJuZWxfZmJfbGlzdCkgewotCQlmb3IgKGkgPSAwOyBpIDwgaGVscGVyLT5jcnRjX2NvdW50OyBpKyspIHsKLQkJCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVfc2V0ID0gJmhlbHBlci0+Y3J0Y19pbmZvW2ldLm1vZGVfc2V0OwotCQkJcmV0ID0gZHJtX2NydGNfaGVscGVyX3NldF9jb25maWcobW9kZV9zZXQpOwotCQkJaWYgKHJldCkKLQkJCQllcnJvciA9IHRydWU7Ci0JCX0KKwkJaWYgKGhlbHBlci0+ZGV2LT5zd2l0Y2hfcG93ZXJfc3RhdGUgPT0gRFJNX1NXSVRDSF9QT1dFUl9PRkYpCisJCQljb250aW51ZTsKKworCQlyZXQgPSBkcm1fZmJfaGVscGVyX3Jlc3RvcmVfZmJkZXZfbW9kZShoZWxwZXIpOworCQlpZiAocmV0KQorCQkJZXJyb3IgPSB0cnVlOwogCX0KIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0xNTAzLDE3ICsxNTE2LDMzIEBACiB9CiBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfaW5pdGlhbF9jb25maWcpOwogCi1ib29sIGRybV9mYl9oZWxwZXJfaG90cGx1Z19ldmVudChzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKQorLyoqCisgKiBkcm1fZmJfaGVscGVyX2hvdHBsdWdfZXZlbnQgLSByZXNwb25kIHRvIGEgaG90cGx1ZyBub3RpZmljYXRpb24gYnkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2JpbmcgYWxsIHRoZSBvdXRwdXRzIGF0dGFjaGVkIHRvIHRoZSBmYi4KKyAqIEBmYl9oZWxwZXI6IHRoZSBkcm1fZmJfaGVscGVyCisgKgorICogTE9DS0lORzoKKyAqIENhbGxlZCBhdCBydW50aW1lLCBtdXN0IHRha2UgbW9kZSBjb25maWcgbG9jay4KKyAqCisgKiBTY2FuIHRoZSBjb25uZWN0b3JzIGF0dGFjaGVkIHRvIHRoZSBmYl9oZWxwZXIgYW5kIHRyeSB0byBwdXQgdG9nZXRoZXIgYQorICogc2V0dXAgYWZ0ZXIgKm5vdGlmaWNhdGlvbiBvZiBhIGNoYW5nZSBpbiBvdXRwdXQgY29uZmlndXJhdGlvbi4KKyAqCisgKiBSRVRVUk5TOgorICogMCBvbiBzdWNjZXNzIGFuZCBhIG5vbi16ZXJvIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgorICovCitpbnQgZHJtX2ZiX2hlbHBlcl9ob3RwbHVnX2V2ZW50KHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIpCiB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZiX2hlbHBlci0+ZGV2OwogCWludCBjb3VudCA9IDA7CiAJdTMyIG1heF93aWR0aCwgbWF4X2hlaWdodCwgYnBwX3NlbDsKIAlib29sIGJvdW5kID0gZmFsc2UsIGNydGNzX2JvdW5kID0gZmFsc2U7CiAJc3RydWN0IGRybV9jcnRjICpjcnRjOwogCiAJaWYgKCFmYl9oZWxwZXItPmZiKQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZmJfaGVscGVyLT5kZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKSB7CiAJCWlmIChjcnRjLT5mYikKIAkJCWNydGNzX2JvdW5kID0gdHJ1ZTsKIAkJaWYgKGNydGMtPmZiID09IGZiX2hlbHBlci0+ZmIpCkBAIC0xNTIyLDcgKzE1NTEsOCBAQAogCiAJaWYgKCFib3VuZCAmJiBjcnRjc19ib3VuZCkgewogCQlmYl9oZWxwZXItPmRlbGF5ZWRfaG90cGx1ZyA9IHRydWU7Ci0JCXJldHVybiBmYWxzZTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwkJcmV0dXJuIDA7CiAJfQogCURSTV9ERUJVR19LTVMoIlxuIik7CiAKQEAgLTE1MzMsNiArMTU2Myw3IEBACiAJY291bnQgPSBkcm1fZmJfaGVscGVyX3Byb2JlX2Nvbm5lY3Rvcl9tb2RlcyhmYl9oZWxwZXIsIG1heF93aWR0aCwKIAkJCQkJCSAgICBtYXhfaGVpZ2h0KTsKIAlkcm1fc2V0dXBfY3J0Y3MoZmJfaGVscGVyKTsKKwltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwogCiAJcmV0dXJuIGRybV9mYl9oZWxwZXJfc2luZ2xlX2ZiX3Byb2JlKGZiX2hlbHBlciwgYnBwX3NlbCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYwppbmRleCA3NDE0NTdiLi5hMWYxMmNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKQEAgLTkzMiwxMSArOTMyLDM0IEBACiAKIHZvaWQgZHJtX3ZibGFua19vZmYoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCiB7CisJc3RydWN0IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqZSwgKnQ7CisJc3RydWN0IHRpbWV2YWwgbm93OwogCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJdW5zaWduZWQgaW50IHNlcTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnZibF9sb2NrLCBpcnFmbGFncyk7CiAJdmJsYW5rX2Rpc2FibGVfYW5kX3NhdmUoZGV2LCBjcnRjKTsKIAlEUk1fV0FLRVVQKCZkZXYtPnZibF9xdWV1ZVtjcnRjXSk7CisKKwkvKiBTZW5kIGFueSBxdWV1ZWQgdmJsYW5rIGV2ZW50cywgbGVzdCB0aGUgbmF0aXZlcyBncm93IGRpc3F1aWV0ICovCisJc2VxID0gZHJtX3ZibGFua19jb3VudF9hbmRfdGltZShkZXYsIGNydGMsICZub3cpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlLCB0LCAmZGV2LT52YmxhbmtfZXZlbnRfbGlzdCwgYmFzZS5saW5rKSB7CisJCWlmIChlLT5waXBlICE9IGNydGMpCisJCQljb250aW51ZTsKKwkJRFJNX0RFQlVHKCJTZW5kaW5nIHByZW1hdHVyZSB2YmxhbmsgZXZlbnQgb24gZGlzYWJsZTogXAorCQkJICB3YW50ZWQgJWQsIGN1cnJlbnQgJWRcbiIsCisJCQkgIGUtPmV2ZW50LnNlcXVlbmNlLCBzZXEpOworCisJCWUtPmV2ZW50LnNlcXVlbmNlID0gc2VxOworCQllLT5ldmVudC50dl9zZWMgPSBub3cudHZfc2VjOworCQllLT5ldmVudC50dl91c2VjID0gbm93LnR2X3VzZWM7CisJCWRybV92YmxhbmtfcHV0KGRldiwgZS0+cGlwZSk7CisJCWxpc3RfbW92ZV90YWlsKCZlLT5iYXNlLmxpbmssICZlLT5iYXNlLmZpbGVfcHJpdi0+ZXZlbnRfbGlzdCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZS0+YmFzZS5maWxlX3ByaXYtPmV2ZW50X3dhaXQpOworCQl0cmFjZV9kcm1fdmJsYW5rX2V2ZW50X2RlbGl2ZXJlZChlLT5iYXNlLnBpZCwgZS0+cGlwZSwKKwkJCQkJCSBlLT5ldmVudC5zZXF1ZW5jZSk7CisJfQorCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChkcm1fdmJsYW5rX29mZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMKaW5kZXggNWQwMGIwZi4uOTU5MTg2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYwpAQCAtNDMxLDcgKzQzMSw3IEBACiB2b2lkIGRybV9tbV9yZXBsYWNlX25vZGUoc3RydWN0IGRybV9tbV9ub2RlICpvbGQsIHN0cnVjdCBkcm1fbW1fbm9kZSAqbmV3KQogewogCWxpc3RfcmVwbGFjZSgmb2xkLT5ub2RlX2xpc3QsICZuZXctPm5vZGVfbGlzdCk7Ci0JbGlzdF9yZXBsYWNlKCZvbGQtPm5vZGVfbGlzdCwgJm5ldy0+aG9sZV9zdGFjayk7CisJbGlzdF9yZXBsYWNlKCZvbGQtPmhvbGVfc3RhY2ssICZuZXctPmhvbGVfc3RhY2spOwogCW5ldy0+aG9sZV9mb2xsb3dzID0gb2xkLT5ob2xlX2ZvbGxvd3M7CiAJbmV3LT5tbSA9IG9sZC0+bW07CiAJbmV3LT5zdGFydCA9IG9sZC0+c3RhcnQ7CkBAIC02OTksOCArNjk5LDggQEAKIAkJCQllbnRyeS0+c2l6ZSk7CiAJCXRvdGFsX3VzZWQgKz0gZW50cnktPnNpemU7CiAJCWlmIChlbnRyeS0+aG9sZV9mb2xsb3dzKSB7Ci0JCQlob2xlX3N0YXJ0ID0gZHJtX21tX2hvbGVfbm9kZV9zdGFydCgmbW0tPmhlYWRfbm9kZSk7Ci0JCQlob2xlX2VuZCA9IGRybV9tbV9ob2xlX25vZGVfZW5kKCZtbS0+aGVhZF9ub2RlKTsKKwkJCWhvbGVfc3RhcnQgPSBkcm1fbW1faG9sZV9ub2RlX3N0YXJ0KGVudHJ5KTsKKwkJCWhvbGVfZW5kID0gZHJtX21tX2hvbGVfbm9kZV9lbmQoZW50cnkpOwogCQkJaG9sZV9zaXplID0gaG9sZV9lbmQgLSBob2xlX3N0YXJ0OwogCQkJc2VxX3ByaW50ZihtLCAiMHglMDhseC0weCUwOGx4OiAweCUwOGx4OiBmcmVlXG4iLAogCQkJCQlob2xlX3N0YXJ0LCBob2xlX2VuZCwgaG9sZV9zaXplKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCmluZGV4IDcyNzMwMzcuLjEyODc2ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwpAQCAtMjIwNyw3ICsyMjA3LDcgQEAKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAogCWlmICghZGV2X3ByaXYgfHwgZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgewotCQlkcm1fZmJfaGVscGVyX3Jlc3RvcmUoKTsKKwkJaW50ZWxfZmJfcmVzdG9yZV9tb2RlKGRldik7CiAJCXZnYV9zd2l0Y2hlcm9vX3Byb2Nlc3NfZGVsYXllZF9zd2l0Y2goKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4IGMzNGE4ZGQuLjMyZDFiM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtNDksNyArNDksNyBAQAogdW5zaWduZWQgaW50IGk5MTVfcG93ZXJzYXZlID0gMTsKIG1vZHVsZV9wYXJhbV9uYW1lZChwb3dlcnNhdmUsIGk5MTVfcG93ZXJzYXZlLCBpbnQsIDA2MDApOwogCi11bnNpZ25lZCBpbnQgaTkxNV9zZW1hcGhvcmVzID0gMTsKK3Vuc2lnbmVkIGludCBpOTE1X3NlbWFwaG9yZXMgPSAwOwogbW9kdWxlX3BhcmFtX25hbWVkKHNlbWFwaG9yZXMsIGk5MTVfc2VtYXBob3JlcywgaW50LCAwNjAwKTsKIAogdW5zaWduZWQgaW50IGk5MTVfZW5hYmxlX3JjNiA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggNDMyZmMwNC4uMjE2NmVlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwpAQCAtMzc3MSw4ICszNzcxLDExIEBACiAJaW50IGVudHJpZXMsIHRsYl9taXNzOwogCiAJY3J0YyA9IGludGVsX2dldF9jcnRjX2Zvcl9wbGFuZShkZXYsIHBsYW5lKTsKLQlpZiAoY3J0Yy0+ZmIgPT0gTlVMTCB8fCAhY3J0Yy0+ZW5hYmxlZCkKKwlpZiAoY3J0Yy0+ZmIgPT0gTlVMTCB8fCAhY3J0Yy0+ZW5hYmxlZCkgeworCQkqY3Vyc29yX3dtID0gY3Vyc29yLT5ndWFyZF9zaXplOworCQkqcGxhbmVfd20gPSBkaXNwbGF5LT5ndWFyZF9zaXplOwogCQlyZXR1cm4gZmFsc2U7CisJfQogCiAJaHRvdGFsID0gY3J0Yy0+bW9kZS5odG90YWw7CiAJaGRpc3BsYXkgPSBjcnRjLT5tb2RlLmhkaXNwbGF5OwpAQCAtNTYwMiw5ICs1NjA1LDkgQEAKIAlpbnRlbF9jbG9ja190IGNsb2NrOwogCiAJaWYgKChkcGxsICYgRElTUExBWV9SQVRFX1NFTEVDVF9GUEExKSA9PSAwKQotCQlmcCA9IEZQMChwaXBlKTsKKwkJZnAgPSBJOTE1X1JFQUQoRlAwKHBpcGUpKTsKIAllbHNlCi0JCWZwID0gRlAxKHBpcGUpOworCQlmcCA9IEk5MTVfUkVBRChGUDEocGlwZSkpOwogCiAJY2xvY2subTEgPSAoZnAgJiBGUF9NMV9ESVZfTUFTSykgPj4gRlBfTTFfRElWX1NISUZUOwogCWlmIChJU19QSU5FVklFVyhkZXYpKSB7CkBAIC02MjE1LDM2ICs2MjE4LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBpbnRlbF9jcnRjX3Jlc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKLXsKLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Ci0KLQkvKiBSZXNldCBmbGFncyBiYWNrIHRvIHRoZSAndW5rbm93bicgc3RhdHVzIHNvIHRoYXQgdGhleQotCSAqIHdpbGwgYmUgY29ycmVjdGx5IHNldCBvbiB0aGUgaW5pdGlhbCBtb2Rlc2V0LgotCSAqLwotCWludGVsX2NydGMtPmRwbXNfbW9kZSA9IC0xOwotfQotCi1zdGF0aWMgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBpbnRlbF9oZWxwZXJfZnVuY3MgPSB7Ci0JLmRwbXMgPSBpbnRlbF9jcnRjX2RwbXMsCi0JLm1vZGVfZml4dXAgPSBpbnRlbF9jcnRjX21vZGVfZml4dXAsCi0JLm1vZGVfc2V0ID0gaW50ZWxfY3J0Y19tb2RlX3NldCwKLQkubW9kZV9zZXRfYmFzZSA9IGludGVsX3BpcGVfc2V0X2Jhc2UsCi0JLm1vZGVfc2V0X2Jhc2VfYXRvbWljID0gaW50ZWxfcGlwZV9zZXRfYmFzZV9hdG9taWMsCi0JLmxvYWRfbHV0ID0gaW50ZWxfY3J0Y19sb2FkX2x1dCwKLQkuZGlzYWJsZSA9IGludGVsX2NydGNfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgaW50ZWxfY3J0Y19mdW5jcyA9IHsKLQkucmVzZXQgPSBpbnRlbF9jcnRjX3Jlc2V0LAotCS5jdXJzb3Jfc2V0ID0gaW50ZWxfY3J0Y19jdXJzb3Jfc2V0LAotCS5jdXJzb3JfbW92ZSA9IGludGVsX2NydGNfY3Vyc29yX21vdmUsCi0JLmdhbW1hX3NldCA9IGludGVsX2NydGNfZ2FtbWFfc2V0LAotCS5zZXRfY29uZmlnID0gZHJtX2NydGNfaGVscGVyX3NldF9jb25maWcsCi0JLmRlc3Ryb3kgPSBpbnRlbF9jcnRjX2Rlc3Ryb3ksCi0JLnBhZ2VfZmxpcCA9IGludGVsX2NydGNfcGFnZV9mbGlwLAotfTsKLQogc3RhdGljIHZvaWQgaW50ZWxfc2FuaXRpemVfbW9kZXNldHRpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgICAgaW50IHBpcGUsIGludCBwbGFuZSkKIHsKQEAgLTYyODEsNiArNjI1NCw0MiBAQAogCWludGVsX2Rpc2FibGVfcGlwZShkZXZfcHJpdiwgcGlwZSk7CiB9CiAKK3N0YXRpYyB2b2lkIGludGVsX2NydGNfcmVzZXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOworCisJLyogUmVzZXQgZmxhZ3MgYmFjayB0byB0aGUgJ3Vua25vd24nIHN0YXR1cyBzbyB0aGF0IHRoZXkKKwkgKiB3aWxsIGJlIGNvcnJlY3RseSBzZXQgb24gdGhlIGluaXRpYWwgbW9kZXNldC4KKwkgKi8KKwlpbnRlbF9jcnRjLT5kcG1zX21vZGUgPSAtMTsKKworCS8qIFdlIG5lZWQgdG8gZml4IHVwIGFueSBCSU9TIGNvbmZpZ3VyYXRpb24gdGhhdCBjb25mbGljdHMgd2l0aAorCSAqIG91ciBleHBlY3RhdGlvbnMuCisJICovCisJaW50ZWxfc2FuaXRpemVfbW9kZXNldHRpbmcoZGV2LCBpbnRlbF9jcnRjLT5waXBlLCBpbnRlbF9jcnRjLT5wbGFuZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIGludGVsX2hlbHBlcl9mdW5jcyA9IHsKKwkuZHBtcyA9IGludGVsX2NydGNfZHBtcywKKwkubW9kZV9maXh1cCA9IGludGVsX2NydGNfbW9kZV9maXh1cCwKKwkubW9kZV9zZXQgPSBpbnRlbF9jcnRjX21vZGVfc2V0LAorCS5tb2RlX3NldF9iYXNlID0gaW50ZWxfcGlwZV9zZXRfYmFzZSwKKwkubW9kZV9zZXRfYmFzZV9hdG9taWMgPSBpbnRlbF9waXBlX3NldF9iYXNlX2F0b21pYywKKwkubG9hZF9sdXQgPSBpbnRlbF9jcnRjX2xvYWRfbHV0LAorCS5kaXNhYmxlID0gaW50ZWxfY3J0Y19kaXNhYmxlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBpbnRlbF9jcnRjX2Z1bmNzID0geworCS5yZXNldCA9IGludGVsX2NydGNfcmVzZXQsCisJLmN1cnNvcl9zZXQgPSBpbnRlbF9jcnRjX2N1cnNvcl9zZXQsCisJLmN1cnNvcl9tb3ZlID0gaW50ZWxfY3J0Y19jdXJzb3JfbW92ZSwKKwkuZ2FtbWFfc2V0ID0gaW50ZWxfY3J0Y19nYW1tYV9zZXQsCisJLnNldF9jb25maWcgPSBkcm1fY3J0Y19oZWxwZXJfc2V0X2NvbmZpZywKKwkuZGVzdHJveSA9IGludGVsX2NydGNfZGVzdHJveSwKKwkucGFnZV9mbGlwID0gaW50ZWxfY3J0Y19wYWdlX2ZsaXAsCit9OworCiBzdGF0aWMgdm9pZCBpbnRlbF9jcnRjX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBpcGUpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC02MzMwLDggKzYzMzksNiBAQAogCiAJc2V0dXBfdGltZXIoJmludGVsX2NydGMtPmlkbGVfdGltZXIsIGludGVsX2NydGNfaWRsZV90aW1lciwKIAkJICAgICh1bnNpZ25lZCBsb25nKWludGVsX2NydGMpOwotCi0JaW50ZWxfc2FuaXRpemVfbW9kZXNldHRpbmcoZGV2LCBpbnRlbF9jcnRjLT5waXBlLCBpbnRlbF9jcnRjLT5wbGFuZSk7CiB9CiAKIGludCBpbnRlbF9nZXRfcGlwZV9mcm9tX2NydGNfaWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKQEAgLTY1NzIsOCArNjU3OSwxMCBAQAogCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKIAogCWludGVsX2ZiID0ga3phbGxvYyhzaXplb2YoKmludGVsX2ZiKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpbnRlbF9mYikKKwlpZiAoIWludGVsX2ZiKSB7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKCZvYmotPmJhc2UpOwogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CiAKIAlyZXQgPSBpbnRlbF9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgaW50ZWxfZmIsIG1vZGVfY21kLCBvYmopOwogCWlmIChyZXQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCmluZGV4IGNiODU3OGIuLmE0ZDgwMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwpAQCAtMTQ3MCw3ICsxNDcwLDggQEAKIAogCWlmICghSEFTX1BDSF9DUFQoZGV2KSAmJgogCSAgICBJOTE1X1JFQUQoaW50ZWxfZHAtPm91dHB1dF9yZWcpICYgRFBfUElQRUJfU0VMRUNUKSB7Ci0JCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhpbnRlbF9kcC0+YmFzZS5iYXNlLmNydGMpOworCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBpbnRlbF9kcC0+YmFzZS5iYXNlLmNydGM7CisKIAkJLyogSGFyZHdhcmUgd29ya2Fyb3VuZDogbGVhdmluZyBvdXIgdHJhbnNjb2RlciBzZWxlY3QKIAkJICogc2V0IHRvIHRyYW5zY29kZXIgQiB3aGlsZSBpdCdzIG9mZiB3aWxsIHByZXZlbnQgdGhlCiAJCSAqIGNvcnJlc3BvbmRpbmcgSERNSSBvdXRwdXQgb24gdHJhbnNjb2RlciBBLgpAQCAtMTQ4NSw3ICsxNDg2LDE5IEBACiAJCS8qIENoYW5nZXMgdG8gZW5hYmxlIG9yIHNlbGVjdCB0YWtlIHBsYWNlIHRoZSB2YmxhbmsKIAkJICogYWZ0ZXIgYmVpbmcgd3JpdHRlbi4KIAkJICovCi0JCWludGVsX3dhaXRfZm9yX3ZibGFuayhkZXYsIGludGVsX2NydGMtPnBpcGUpOworCQlpZiAoY3J0YyA9PSBOVUxMKSB7CisJCQkvKiBXZSBjYW4gYXJyaXZlIGhlcmUgbmV2ZXIgaGF2aW5nIGJlZW4gYXR0YWNoZWQKKwkJCSAqIHRvIGEgQ1JUQywgZm9yIGluc3RhbmNlLCBkdWUgdG8gaW5oZXJpdGluZworCQkJICogcmFuZG9tIHN0YXRlIGZyb20gdGhlIEJJT1MuCisJCQkgKgorCQkJICogSWYgdGhlIHBpcGUgaXMgbm90IHJ1bm5pbmcsIHBsYXkgc2FmZSBhbmQKKwkJCSAqIHdhaXQgZm9yIHRoZSBjbG9ja3MgdG8gc3RhYmlsaXNlIGJlZm9yZQorCQkJICogY29udGludWluZy4KKwkJCSAqLworCQkJUE9TVElOR19SRUFEKGludGVsX2RwLT5vdXRwdXRfcmVnKTsKKwkJCW1zbGVlcCg1MCk7CisJCX0gZWxzZQorCQkJaW50ZWxfd2FpdF9mb3JfdmJsYW5rKGRldiwgdG9faW50ZWxfY3J0YyhjcnRjKS0+cGlwZSk7CiAJfQogCiAJSTkxNV9XUklURShpbnRlbF9kcC0+b3V0cHV0X3JlZywgRFAgJiB+RFBfUE9SVF9FTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCmluZGV4IGY1YjBkODMuLjFkMjA3MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCkBAIC0zMzgsNCArMzM4LDUgQEAKIAkJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiAKIGV4dGVybiB2b2lkIGludGVsX2ZiX291dHB1dF9wb2xsX2NoYW5nZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBpbnRlbF9mYl9yZXN0b3JlX21vZGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAjZW5kaWYgLyogX19JTlRFTF9EUlZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmIuYwppbmRleCA1MTI3ODI3Li5lYzQ5YmFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiLmMKQEAgLTI2NCwzICsyNjQsMTMgQEAKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1fZmJfaGVscGVyX2hvdHBsdWdfZXZlbnQoJmRldl9wcml2LT5mYmRldi0+aGVscGVyKTsKIH0KKwordm9pZCBpbnRlbF9mYl9yZXN0b3JlX21vZGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJcmV0ID0gZHJtX2ZiX2hlbHBlcl9yZXN0b3JlX2ZiZGV2X21vZGUoJmRldl9wcml2LT5mYmRldi0+aGVscGVyKTsKKwlpZiAocmV0KQorCQlEUk1fREVCVUcoImZhaWxlZCB0byByZXN0b3JlIGNydGMgbW9kZVxuIik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKaW5kZXggYTU2MmJkMi4uNjdjYjA3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYwpAQCAtNTM5LDYgKzUzOSw5IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7CiAJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IGRldl9wcml2LT5pbnRfbHZkc19jb25uZWN0b3I7CiAKKwlpZiAoZGV2LT5zd2l0Y2hfcG93ZXJfc3RhdGUgIT0gRFJNX1NXSVRDSF9QT1dFUl9PTikKKwkJcmV0dXJuIE5PVElGWV9PSzsKKwogCS8qCiAJICogY2hlY2sgYW5kIHVwZGF0ZSB0aGUgc3RhdHVzIG9mIExWRFMgY29ubmVjdG9yIGFmdGVyIHJlY2VpdmluZwogCSAqIHRoZSBMSUQgbm9maWNhdGlvbiBldmVudC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jCmluZGV4IDQyNTZiOGUuLjZiMjJjMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYwpAQCAtMTE1MSwxMCArMTE1MSwxMCBAQAogCQkJICAgICh2aWRlb19sZXZlbHMtPmJsYW5rIDw8IFRWX0JMQU5LX0xFVkVMX1NISUZUKSkpOwogCXsKIAkJaW50IHBpcGVjb25mX3JlZyA9IFBJUEVDT05GKHBpcGUpOwotCQlpbnQgZHNwY250cl9yZWcgPSBEU1BDTlRSKHBpcGUpOworCQlpbnQgZHNwY250cl9yZWcgPSBEU1BDTlRSKGludGVsX2NydGMtPnBsYW5lKTsKIAkJaW50IHBpcGVjb25mID0gSTkxNV9SRUFEKHBpcGVjb25mX3JlZyk7CiAJCWludCBkc3BjbnRyID0gSTkxNV9SRUFEKGRzcGNudHJfcmVnKTsKLQkJaW50IGRzcGJhc2VfcmVnID0gRFNQQUREUihwaXBlKTsKKwkJaW50IGRzcGJhc2VfcmVnID0gRFNQQUREUihpbnRlbF9jcnRjLT5wbGFuZSk7CiAJCWludCB4cG9zID0gMHgwLCB5cG9zID0gMHgwOwogCQl1bnNpZ25lZCBpbnQgeHNpemUsIHlzaXplOwogCQkvKiBQaXBlIG11c3QgYmUgb2ZmIGhlcmUgKi8KQEAgLTEzNzgsNyArMTM3OCw5IEBACiAJaWYgKHR5cGUgPCAwKQogCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CiAKKwlpbnRlbF90di0+dHlwZSA9IHR5cGU7CiAJaW50ZWxfdHZfZmluZF9iZXR0ZXJfZm9ybWF0KGNvbm5lY3Rvcik7CisKIAlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CiB9CiAKQEAgLTE2NzAsOCArMTY3Miw3IEBACiAJICoKIAkgKiBNb3JlIHJlY2VudCBjaGlwc2V0cyBmYXZvdXIgSERNSSByYXRoZXIgdGhhbiBpbnRlZ3JhdGVkIFMtVmlkZW8uCiAJICovCi0JY29ubmVjdG9yLT5wb2xsZWQgPQotCQlEUk1fQ09OTkVDVE9SX1BPTExfQ09OTkVDVCB8IERSTV9DT05ORUNUT1JfUE9MTF9ESVNDT05ORUNUOworCWNvbm5lY3Rvci0+cG9sbGVkID0gRFJNX0NPTk5FQ1RPUl9QT0xMX0NPTk5FQ1Q7CiAKIAlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCBjb25uZWN0b3IsICZpbnRlbF90dl9jb25uZWN0b3JfZnVuY3MsCiAJCQkgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbWVtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X21lbS5jCmluZGV4IDUwNDVmOGIuLmMzZTk1M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbWVtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tZW0uYwpAQCAtMTUyLDggKzE1Miw2IEBACiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAotCW5vdXZlYXVfYm9fcmVmKE5VTEwsICZkZXZfcHJpdi0+dmdhX3JhbSk7Ci0KIAl0dG1fYm9fZGV2aWNlX3JlbGVhc2UoJmRldl9wcml2LT50dG0uYmRldik7CiAKIAlub3V2ZWF1X3R0bV9nbG9iYWxfcmVsZWFzZShkZXZfcHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3NnZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3NnZG1hLmMKaW5kZXggNGJjZTgwMS4uYzc3MTExZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zZ2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc2dkbWEuYwpAQCAtNDIsNyArNDIsOCBAQAogCiAJbnZiZS0+bnJfcGFnZXMgPSAwOwogCXdoaWxlIChudW1fcGFnZXMtLSkgewotCQlpZiAoZG1hX2FkZHJzW252YmUtPm5yX3BhZ2VzXSAhPSBETUFfRVJST1JfQ09ERSkgeworCQkvKiB0aGlzIGNvZGUgcGF0aCBpc24ndCBjYWxsZWQgYW5kIGlzIGluY29ycmVjdCBhbnl3YXlzICovCisJCWlmICgwKSB7IC8qZG1hX2FkZHJzW252YmUtPm5yX3BhZ2VzXSAhPSBETUFfRVJST1JfQ09ERSkqLwogCQkJbnZiZS0+cGFnZXNbbnZiZS0+bnJfcGFnZXNdID0KIAkJCQkJZG1hX2FkZHJzW252YmUtPm5yX3BhZ2VzXTsKIAkJIAludmJlLT50dG1fYWxsb2NlZFtudmJlLT5ucl9wYWdlc10gPSB0cnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jCmluZGV4IGEzMGFkZWMuLjkxNWZiY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3RhdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N0YXRlLmMKQEAgLTc2OCw2ICs3NjgsMTEgQEAKIAllbmdpbmUtPm1jLnRha2Vkb3duKGRldik7CiAJZW5naW5lLT5kaXNwbGF5LmxhdGVfdGFrZWRvd24oZGV2KTsKIAorCWlmIChkZXZfcHJpdi0+dmdhX3JhbSkgeworCQlub3V2ZWF1X2JvX3VucGluKGRldl9wcml2LT52Z2FfcmFtKTsKKwkJbm91dmVhdV9ib19yZWYoTlVMTCwgJmRldl9wcml2LT52Z2FfcmFtKTsKKwl9CisKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJdHRtX2JvX2NsZWFuX21tKCZkZXZfcHJpdi0+dHRtLmJkZXYsIFRUTV9QTF9WUkFNKTsKIAl0dG1fYm9fY2xlYW5fbW0oJmRldl9wcml2LT50dG0uYmRldiwgVFRNX1BMX1RUKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jCmluZGV4IDQzZmQwMTYuLjkwNzNlM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYwpAQCAtODYyLDkgKzg2MiwxNSBAQAogCQlTWVNURU1fQUNDRVNTX01PREVfTk9UX0lOX1NZUyB8CiAJCVNZU1RFTV9BUEVSVFVSRV9VTk1BUFBFRF9BQ0NFU1NfUEFTU19USFJVIHwKIAkJRUZGRUNUSVZFX0wxX1RMQl9TSVpFKDUpIHwgRUZGRUNUSVZFX0wxX1FVRVVFX1NJWkUoNSk7Ci0JV1JFRzMyKE1DX1ZNX01EX0wxX1RMQjBfQ05UTCwgdG1wKTsKLQlXUkVHMzIoTUNfVk1fTURfTDFfVExCMV9DTlRMLCB0bXApOwotCVdSRUczMihNQ19WTV9NRF9MMV9UTEIyX0NOVEwsIHRtcCk7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkgeworCQlXUkVHMzIoRlVTX01DX1ZNX01EX0wxX1RMQjBfQ05UTCwgdG1wKTsKKwkJV1JFRzMyKEZVU19NQ19WTV9NRF9MMV9UTEIxX0NOVEwsIHRtcCk7CisJCVdSRUczMihGVVNfTUNfVk1fTURfTDFfVExCMl9DTlRMLCB0bXApOworCX0gZWxzZSB7CisJCVdSRUczMihNQ19WTV9NRF9MMV9UTEIwX0NOVEwsIHRtcCk7CisJCVdSRUczMihNQ19WTV9NRF9MMV9UTEIxX0NOVEwsIHRtcCk7CisJCVdSRUczMihNQ19WTV9NRF9MMV9UTEIyX0NOVEwsIHRtcCk7CisJfQogCVdSRUczMihNQ19WTV9NQl9MMV9UTEIwX0NOVEwsIHRtcCk7CiAJV1JFRzMyKE1DX1ZNX01CX0wxX1RMQjFfQ05UTCwgdG1wKTsKIAlXUkVHMzIoTUNfVk1fTUJfTDFfVExCMl9DTlRMLCB0bXApOwpAQCAtMTc3NCw3ICsxNzgwLDEwIEBACiAKIAogCW1jX3NoYXJlZF9jaG1hcCA9IFJSRUczMihNQ19TSEFSRURfQ0hNQVApOwotCW1jX2FyYl9yYW1jZmcgPSBSUkVHMzIoTUNfQVJCX1JBTUNGRyk7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkKKwkJbWNfYXJiX3JhbWNmZyA9IFJSRUczMihGVVNfTUNfQVJCX1JBTUNGRyk7CisJZWxzZQorCQltY19hcmJfcmFtY2ZnID0gUlJFRzMyKE1DX0FSQl9SQU1DRkcpOwogCiAJc3dpdGNoIChyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF90aWxlX3BpcGVzKSB7CiAJY2FzZSAxOgpAQCAtMjU4MCw3ICsyNTg5LDcgQEAKIAl1MzIgd3B0ciwgdG1wOwogCiAJaWYgKHJkZXYtPndiLmVuYWJsZWQpCi0JCXdwdHIgPSByZGV2LT53Yi53YltSNjAwX1dCX0lIX1dQVFJfT0ZGU0VULzRdOworCQl3cHRyID0gbGUzMl90b19jcHUocmRldi0+d2Iud2JbUjYwMF9XQl9JSF9XUFRSX09GRlNFVC80XSk7CiAJZWxzZQogCQl3cHRyID0gUlJFRzMyKElIX1JCX1dQVFIpOwogCkBAIC0yOTIzLDExICsyOTMyLDYgQEAKIAkJcmRldi0+YXNpYy0+Y29weSA9IE5VTEw7CiAJCWRldl93YXJuKHJkZXYtPmRldiwgImZhaWxlZCBibGl0dGVyICglZCkgZmFsbGluZyBiYWNrIHRvIG1lbWNweVxuIiwgcik7CiAJfQotCS8qIFhYWDogb250YXJpbyBoYXMgcHJvYmxlbXMgYmxpdHRpbmcgdG8gZ2FydCBhdCB0aGUgbW9tZW50ICovCi0JaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1BBTE0pIHsKLQkJcmRldi0+YXNpYy0+Y29weSA9IE5VTEw7Ci0JCXJhZGVvbl90dG1fc2V0X2FjdGl2ZV92cmFtX3NpemUocmRldiwgcmRldi0+bWMudmlzaWJsZV92cmFtX3NpemUpOwotCX0KIAogCS8qIGFsbG9jYXRlIHdiIGJ1ZmZlciAqLwogCXIgPSByYWRlb25fd2JfaW5pdChyZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5kLmgKaW5kZXggOWFhYTNmMC4uZmM0MGUwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5kLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5kLmgKQEAgLTIwMCw2ICsyMDAsNyBAQAogI2RlZmluZQkJQlVSU1RMRU5HVEhfU0hJRlQJCQkJOQogI2RlZmluZQkJQlVSU1RMRU5HVEhfTUFTSwkJCQkweDAwMDAwMjAwCiAjZGVmaW5lCQlDSEFOU0laRV9PVkVSUklERQkJCQkoMSA8PCAxMSkKKyNkZWZpbmUJRlVTX01DX0FSQl9SQU1DRkcJCQkJMHgyNzY4CiAjZGVmaW5lCU1DX1ZNX0FHUF9UT1AJCQkJCTB4MjAyOAogI2RlZmluZQlNQ19WTV9BR1BfQk9UCQkJCQkweDIwMkMKICNkZWZpbmUJTUNfVk1fQUdQX0JBU0UJCQkJCTB4MjAzMApAQCAtMjIxLDYgKzIyMiwxMSBAQAogI2RlZmluZQlNQ19WTV9NRF9MMV9UTEIwX0NOVEwJCQkJMHgyNjU0CiAjZGVmaW5lCU1DX1ZNX01EX0wxX1RMQjFfQ05UTAkJCQkweDI2NTgKICNkZWZpbmUJTUNfVk1fTURfTDFfVExCMl9DTlRMCQkJCTB4MjY1QworCisjZGVmaW5lCUZVU19NQ19WTV9NRF9MMV9UTEIwX0NOVEwJCQkweDI2NUMKKyNkZWZpbmUJRlVTX01DX1ZNX01EX0wxX1RMQjFfQ05UTAkJCTB4MjY2MAorI2RlZmluZQlGVVNfTUNfVk1fTURfTDFfVExCMl9DTlRMCQkJMHgyNjY0CisKICNkZWZpbmUJTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0RFRkFVTFRfQUREUgkJMHgyMDNDCiAjZGVmaW5lCU1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ISUdIX0FERFIJCQkweDIwMzgKICNkZWZpbmUJTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSCQkJMHgyMDM0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL25pLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL25pLmMKaW5kZXggN2FhZGUyMC4uM2Q4YTc2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9uaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbmkuYwpAQCAtNjc0LDcgKzY3NCw3IEBACiAKIAljY19yYl9iYWNrZW5kX2Rpc2FibGUgPSBSUkVHMzIoQ0NfUkJfQkFDS0VORF9ESVNBQkxFKTsKIAljY19nY19zaGFkZXJfcGlwZV9jb25maWcgPSBSUkVHMzIoQ0NfR0NfU0hBREVSX1BJUEVfQ09ORklHKTsKLQljZ3RzX3RjY19kaXNhYmxlID0gUlJFRzMyKENHVFNfVENDX0RJU0FCTEUpOworCWNndHNfdGNjX2Rpc2FibGUgPSAweGZmMDAwMDAwOwogCWdjX3VzZXJfcmJfYmFja2VuZF9kaXNhYmxlID0gUlJFRzMyKEdDX1VTRVJfUkJfQkFDS0VORF9ESVNBQkxFKTsKIAlnY191c2VyX3NoYWRlcl9waXBlX2NvbmZpZyA9IFJSRUczMihHQ19VU0VSX1NIQURFUl9QSVBFX0NPTkZJRyk7CiAJY2d0c191c2VyX3RjY19kaXNhYmxlID0gUlJFRzMyKENHVFNfVVNFUl9UQ0NfRElTQUJMRSk7CkBAIC04NzEsNyArODcxLDcgQEAKIAogCXNteF9kY19jdGwwID0gUlJFRzMyKFNNWF9EQ19DVEwwKTsKIAlzbXhfZGNfY3RsMCAmPSB+TlVNQkVSX09GX1NFVFMoMHgxZmYpOwotCXNteF9kY19jdGwwIHw9IE5VTUJFUl9PRl9TRVRTKHJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3hfbnVtX29mX3NldHMpOworCXNteF9kY19jdGwwIHw9IE5VTUJFUl9PRl9TRVRTKHJkZXYtPmNvbmZpZy5jYXltYW4uc3hfbnVtX29mX3NldHMpOwogCVdSRUczMihTTVhfRENfQ1RMMCwgc214X2RjX2N0bDApOwogCiAJV1JFRzMyKFNQSV9DT05GSUdfQ05UTF8xLCBWVFhfRE9ORV9ERUxBWSg0KSB8IENSQ19TSU1EX0lEX1dBRERSX0RJU0FCTEUpOwpAQCAtODg3LDIwICs4ODcsMjAgQEAKIAogCVdSRUczMihUQV9DTlRMX0FVWCwgRElTQUJMRV9DVUJFX0FOSVNPKTsKIAotCVdSRUczMihTWF9FWFBPUlRfQlVGRkVSX1NJWkVTLCAoQ09MT1JfQlVGRkVSX1NJWkUoKHJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3hfbWF4X2V4cG9ydF9zaXplIC8gNCkgLSAxKSB8Ci0JCQkJCVBPU0lUSU9OX0JVRkZFUl9TSVpFKChyZGV2LT5jb25maWcuZXZlcmdyZWVuLnN4X21heF9leHBvcnRfcG9zX3NpemUgLyA0KSAtIDEpIHwKLQkJCQkJU01YX0JVRkZFUl9TSVpFKChyZGV2LT5jb25maWcuZXZlcmdyZWVuLnN4X21heF9leHBvcnRfc214X3NpemUgLyA0KSAtIDEpKSk7CisJV1JFRzMyKFNYX0VYUE9SVF9CVUZGRVJfU0laRVMsIChDT0xPUl9CVUZGRVJfU0laRSgocmRldi0+Y29uZmlnLmNheW1hbi5zeF9tYXhfZXhwb3J0X3NpemUgLyA0KSAtIDEpIHwKKwkJCQkJUE9TSVRJT05fQlVGRkVSX1NJWkUoKHJkZXYtPmNvbmZpZy5jYXltYW4uc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSAvIDQpIC0gMSkgfAorCQkJCQlTTVhfQlVGRkVSX1NJWkUoKHJkZXYtPmNvbmZpZy5jYXltYW4uc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZSAvIDQpIC0gMSkpKTsKIAotCVdSRUczMihQQV9TQ19GSUZPX1NJWkUsIChTQ19QUklNX0ZJRk9fU0laRShyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNjX3ByaW1fZmlmb19zaXplKSB8Ci0JCQkJIFNDX0hJWl9USUxFX0ZJRk9fU0laRShyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNjX2hpel90aWxlX2ZpZm9fc2l6ZSkgfAotCQkJCSBTQ19FQVJMWVpfVElMRV9GSUZPX1NJWkUocmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zY19lYXJseXpfdGlsZV9maWZvX3NpemUpKSk7CisJV1JFRzMyKFBBX1NDX0ZJRk9fU0laRSwgKFNDX1BSSU1fRklGT19TSVpFKHJkZXYtPmNvbmZpZy5jYXltYW4uc2NfcHJpbV9maWZvX3NpemUpIHwKKwkJCQkgU0NfSElaX1RJTEVfRklGT19TSVpFKHJkZXYtPmNvbmZpZy5jYXltYW4uc2NfaGl6X3RpbGVfZmlmb19zaXplKSB8CisJCQkJIFNDX0VBUkxZWl9USUxFX0ZJRk9fU0laRShyZGV2LT5jb25maWcuY2F5bWFuLnNjX2Vhcmx5el90aWxlX2ZpZm9fc2l6ZSkpKTsKIAogCiAJV1JFRzMyKFZHVF9OVU1fSU5TVEFOQ0VTLCAxKTsKIAogCVdSRUczMihDUF9QRVJGTU9OX0NOVEwsIDApOwogCi0JV1JFRzMyKFNRX01TX0ZJRk9fU0laRVMsIChDQUNIRV9GSUZPX1NJWkUoMTYgKiByZGV2LT5jb25maWcuZXZlcmdyZWVuLnNxX251bV9jZl9pbnN0cykgfAorCVdSRUczMihTUV9NU19GSUZPX1NJWkVTLCAoQ0FDSEVfRklGT19TSVpFKDE2ICogcmRldi0+Y29uZmlnLmNheW1hbi5zcV9udW1fY2ZfaW5zdHMpIHwKIAkJCQkgIEZFVENIX0ZJRk9fSElXQVRFUigweDQpIHwKIAkJCQkgIERPTkVfRklGT19ISVdBVEVSKDB4ZTApIHwKIAkJCQkgIEFMVV9VUERBVEVfRklGT19ISVdBVEVSKDB4OCkpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMKaW5kZXggMTVkNTgyOS4uNmYyNzU5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMKQEAgLTMyMzEsNyArMzIzMSw3IEBACiAJdTMyIHdwdHIsIHRtcDsKIAogCWlmIChyZGV2LT53Yi5lbmFibGVkKQotCQl3cHRyID0gcmRldi0+d2Iud2JbUjYwMF9XQl9JSF9XUFRSX09GRlNFVC80XTsKKwkJd3B0ciA9IGxlMzJfdG9fY3B1KHJkZXYtPndiLndiW1I2MDBfV0JfSUhfV1BUUl9PRkZTRVQvNF0pOwogCWVsc2UKIAkJd3B0ciA9IFJSRUczMihJSF9SQl9XUFRSKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKaW5kZXggZjVkMTJmYi4uOTBkZmIyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCkBAIC00MzEsNyArNDMxLDcgQEAKIAkJfQogCX0KIAotCS8qIEFjZXIgbGFwdG9wIChBY2VyIFRyYXZlbE1hdGUgNTczMEcpIGhhcyBhbiBIRE1JIHBvcnQKKwkvKiBBY2VyIGxhcHRvcCAoQWNlciBUcmF2ZWxNYXRlIDU3MzAvNTczMEcpIGhhcyBhbiBIRE1JIHBvcnQKIAkgKiBvbiB0aGUgbGFwdG9wIGFuZCBhIERWSSBwb3J0IG9uIHRoZSBkb2NraW5nIHN0YXRpb24gYW5kCiAJICogYm90aCBzaGFyZSB0aGUgc2FtZSBlbmNvZGVyLCBocGQgcGluLCBhbmQgZGRjIGxpbmUuCiAJICogU28gd2hpbGUgdGhlIGJpb3MgdGFibGUgaXMgdGVjaG5pY2FsbHkgY29ycmVjdCwKQEAgLTQ0MCw3ICs0NDAsNyBAQAogCSAqIHdpdGggZGlmZmVyZW50IGNydGNzIHdoaWNoIGlzbid0IHBvc3NpYmxlIG9uIHRoZSBoYXJkd2FyZQogCSAqIHNpZGUgYW5kIGxlYXZlcyBubyBjcnRjcyBmb3IgTFZEUyBvciBWR0EuCiAJICovCi0JaWYgKChkZXYtPnBkZXYtPmRldmljZSA9PSAweDk1YzQpICYmCisJaWYgKCgoZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHg5NWM0KSB8fCAoZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHg5NTkxKSkgJiYKIAkgICAgKGRldi0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDEwMjUpICYmCiAJICAgIChkZXYtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHgwMTNjKSkgewogCQlpZiAoKCpjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSkgJiYKQEAgLTE1NzQsOSArMTU3NCwxNyBAQAogCQkJQVRPTV9GQUtFX0VESURfUEFUQ0hfUkVDT1JEICpmYWtlX2VkaWRfcmVjb3JkOwogCQkJQVRPTV9QQU5FTF9SRVNPTFVUSU9OX1BBVENIX1JFQ09SRCAqcGFuZWxfcmVzX3JlY29yZDsKIAkJCWJvb2wgYmFkX3JlY29yZCA9IGZhbHNlOwotCQkJdTggKnJlY29yZCA9ICh1OCAqKShtb2RlX2luZm8tPmF0b21fY29udGV4dC0+YmlvcyArCi0JCQkJCSAgICBkYXRhX29mZnNldCArCi0JCQkJCSAgICBsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8udXNNb2RlUGF0Y2hUYWJsZU9mZnNldCkpOworCQkJdTggKnJlY29yZDsKKworCQkJaWYgKChmcmV2ID09IDEpICYmIChjcmV2IDwgMikpCisJCQkJLyogYWJzb2x1dGUgKi8KKwkJCQlyZWNvcmQgPSAodTggKikobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKworCQkJCQkJbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnVzTW9kZVBhdGNoVGFibGVPZmZzZXQpKTsKKwkJCWVsc2UKKwkJCQkvKiByZWxhdGl2ZSAqLworCQkJCXJlY29yZCA9ICh1OCAqKShtb2RlX2luZm8tPmF0b21fY29udGV4dC0+YmlvcyArCisJCQkJCQlkYXRhX29mZnNldCArCisJCQkJCQlsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8udXNNb2RlUGF0Y2hUYWJsZU9mZnNldCkpOwogCQkJd2hpbGUgKCpyZWNvcmQgIT0gQVRPTV9SRUNPUkRfRU5EX1RZUEUpIHsKIAkJCQlzd2l0Y2ggKCpyZWNvcmQpIHsKIAkJCQljYXNlIExDRF9NT0RFX1BBVENIX1JFQ09SRF9NT0RFX1RZUEU6CkBAIC0xNTk5LDkgKzE2MDcsMTAgQEAKIAkJCQkJCQltZW1jcHkoKHU4ICopZWRpZCwgKHU4ICopJmZha2VfZWRpZF9yZWNvcmQtPnVjRmFrZUVESURTdHJpbmdbMF0sCiAJCQkJCQkJICAgICAgIGZha2VfZWRpZF9yZWNvcmQtPnVjRmFrZUVESURMZW5ndGgpOwogCi0JCQkJCQkJaWYgKGRybV9lZGlkX2lzX3ZhbGlkKGVkaWQpKQorCQkJCQkJCWlmIChkcm1fZWRpZF9pc192YWxpZChlZGlkKSkgewogCQkJCQkJCQlyZGV2LT5tb2RlX2luZm8uYmlvc19oYXJkY29kZWRfZWRpZCA9IGVkaWQ7Ci0JCQkJCQkJZWxzZQorCQkJCQkJCQlyZGV2LT5tb2RlX2luZm8uYmlvc19oYXJkY29kZWRfZWRpZF9zaXplID0gZWRpZF9zaXplOworCQkJCQkJCX0gZWxzZQogCQkJCQkJCQlrZnJlZShlZGlkKTsKIAkJCQkJCX0KIAkJCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRweF9oYW5kbGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdHB4X2hhbmRsZXIuYwppbmRleCBlZDVkZmU1Li45ZDk1NzkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdHB4X2hhbmRsZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdHB4X2hhbmRsZXIuYwpAQCAtMTUsNiArMTUsOSBAQAogI2RlZmluZSBBVFBYX1ZFUlNJT04gMAogI2RlZmluZSBBVFBYX0dQVV9QV1IgMgogI2RlZmluZSBBVFBYX01VWF9TRUxFQ1QgMworI2RlZmluZSBBVFBYX0kyQ19NVVhfU0VMRUNUIDQKKyNkZWZpbmUgQVRQWF9TV0lUQ0hfU1RBUlQgNQorI2RlZmluZSBBVFBYX1NXSVRDSF9FTkQgNgogCiAjZGVmaW5lIEFUUFhfSU5URUdSQVRFRCAwCiAjZGVmaW5lIEFUUFhfRElTQ1JFVEUgMQpAQCAtMTQ5LDEzICsxNTIsMzUgQEAKIAlyZXR1cm4gcmFkZW9uX2F0cHhfZXhlY3V0ZShoYW5kbGUsIEFUUFhfTVVYX1NFTEVDVCwgbXV4X2lkKTsKIH0KIAorc3RhdGljIGludCByYWRlb25fYXRweF9zd2l0Y2hfaTJjX211eChhY3BpX2hhbmRsZSBoYW5kbGUsIGludCBtdXhfaWQpCit7CisJcmV0dXJuIHJhZGVvbl9hdHB4X2V4ZWN1dGUoaGFuZGxlLCBBVFBYX0kyQ19NVVhfU0VMRUNULCBtdXhfaWQpOworfQorCitzdGF0aWMgaW50IHJhZGVvbl9hdHB4X3N3aXRjaF9zdGFydChhY3BpX2hhbmRsZSBoYW5kbGUsIGludCBncHVfaWQpCit7CisJcmV0dXJuIHJhZGVvbl9hdHB4X2V4ZWN1dGUoaGFuZGxlLCBBVFBYX1NXSVRDSF9TVEFSVCwgZ3B1X2lkKTsKK30KKworc3RhdGljIGludCByYWRlb25fYXRweF9zd2l0Y2hfZW5kKGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IGdwdV9pZCkKK3sKKwlyZXR1cm4gcmFkZW9uX2F0cHhfZXhlY3V0ZShoYW5kbGUsIEFUUFhfU1dJVENIX0VORCwgZ3B1X2lkKTsKK30KIAogc3RhdGljIGludCByYWRlb25fYXRweF9zd2l0Y2h0byhlbnVtIHZnYV9zd2l0Y2hlcm9vX2NsaWVudF9pZCBpZCkKIHsKKwlpbnQgZ3B1X2lkOworCiAJaWYgKGlkID09IFZHQV9TV0lUQ0hFUk9PX0lHRCkKLQkJcmFkZW9uX2F0cHhfc3dpdGNoX211eChyYWRlb25fYXRweF9wcml2LmF0cHhfaGFuZGxlLCAwKTsKKwkJZ3B1X2lkID0gQVRQWF9JTlRFR1JBVEVEOwogCWVsc2UKLQkJcmFkZW9uX2F0cHhfc3dpdGNoX211eChyYWRlb25fYXRweF9wcml2LmF0cHhfaGFuZGxlLCAxKTsKKwkJZ3B1X2lkID0gQVRQWF9ESVNDUkVURTsKKworCXJhZGVvbl9hdHB4X3N3aXRjaF9zdGFydChyYWRlb25fYXRweF9wcml2LmF0cHhfaGFuZGxlLCBncHVfaWQpOworCXJhZGVvbl9hdHB4X3N3aXRjaF9tdXgocmFkZW9uX2F0cHhfcHJpdi5hdHB4X2hhbmRsZSwgZ3B1X2lkKTsKKwlyYWRlb25fYXRweF9zd2l0Y2hfaTJjX211eChyYWRlb25fYXRweF9wcml2LmF0cHhfaGFuZGxlLCBncHVfaWQpOworCXJhZGVvbl9hdHB4X3N3aXRjaF9lbmQocmFkZW9uX2F0cHhfcHJpdi5hdHB4X2hhbmRsZSwgZ3B1X2lkKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jdXJzb3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2N1cnNvci5jCmluZGV4IGJkZjJmYTEuLjMxODlhN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2N1cnNvci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2N1cnNvci5jCkBAIC0xNjcsOSArMTY3LDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmFkZW9uX2NydGMtPmN1cnNvcl93aWR0aCA9IHdpZHRoOwotCXJhZGVvbl9jcnRjLT5jdXJzb3JfaGVpZ2h0ID0gaGVpZ2h0OwotCiAJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGNydGMtPmRldiwgZmlsZV9wcml2LCBoYW5kbGUpOwogCWlmICghb2JqKSB7CiAJCURSTV9FUlJPUigiQ2Fubm90IGZpbmQgY3Vyc29yIG9iamVjdCAleCBmb3IgY3J0YyAlZFxuIiwgaGFuZGxlLCByYWRlb25fY3J0Yy0+Y3J0Y19pZCk7CkBAIC0xODAsNiArMTc3LDkgQEAKIAlpZiAocmV0KQogCQlnb3RvIGZhaWw7CiAKKwlyYWRlb25fY3J0Yy0+Y3Vyc29yX3dpZHRoID0gd2lkdGg7CisJcmFkZW9uX2NydGMtPmN1cnNvcl9oZWlnaHQgPSBoZWlnaHQ7CisKIAlyYWRlb25fbG9ja19jdXJzb3IoY3J0YywgdHJ1ZSk7CiAJLyogWFhYIG9ubHkgMjcgYml0IG9mZnNldCBmb3IgbGVnYWN5IGN1cnNvciAqLwogCXJhZGVvbl9zZXRfY3Vyc29yKGNydGMsIG9iaiwgZ3B1X2FkZHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2FydC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2FydC5jCmluZGV4IDhhOTU1YmIuLmE1MzNmNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dhcnQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nYXJ0LmMKQEAgLTE4MSw5ICsxODEsOSBAQAogCXAgPSB0IC8gKFBBR0VfU0laRSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFKTsKIAogCWZvciAoaSA9IDA7IGkgPCBwYWdlczsgaSsrLCBwKyspIHsKLQkJLyogT24gVFRNIHBhdGgsIHdlIG9ubHkgdXNlIHRoZSBETUEgQVBJIGlmIFRUTV9QQUdFX0ZMQUdfRE1BMzIKLQkJICogaXMgcmVxdWVzdGVkLiAqLwotCQlpZiAoZG1hX2FkZHJbaV0gIT0gRE1BX0VSUk9SX0NPREUpIHsKKwkJLyogd2UgcmV2ZXJ0ZWQgdGhlIHBhdGNoIHVzaW5nIGRtYV9hZGRyIGluIFRUTSBmb3Igbm93IGJ1dCB0aGlzCisJCSAqIGNvZGUgc3RvcHMgYnVpbGRpbmcgb24gYWxwaGEgc28ganVzdCBjb21tZW50IGl0IG91dCBmb3Igbm93ICovCisJCWlmICgwKSB7IC8qZG1hX2FkZHJbaV0gIT0gRE1BX0VSUk9SX0NPREUpICovCiAJCQlyZGV2LT5nYXJ0LnR0bV9hbGxvY2VkW3BdID0gdHJ1ZTsKIAkJCXJkZXYtPmdhcnQucGFnZXNfYWRkcltwXSA9IGRtYV9hZGRyW2ldOwogCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYwppbmRleCBiZjdkNGMwLi5iZDU4YWY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYwpAQCAtMjIxLDYgKzIyMSwyMiBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJYnJlYWs7CisJY2FzZSBSQURFT05fSU5GT19OVU1fVElMRV9QSVBFUzoKKwkJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX0NBWU1BTikKKwkJCXZhbHVlID0gcmRldi0+Y29uZmlnLmNheW1hbi5tYXhfdGlsZV9waXBlczsKKwkJZWxzZSBpZiAocmRldi0+ZmFtaWx5ID49IENISVBfQ0VEQVIpCisJCQl2YWx1ZSA9IHJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3RpbGVfcGlwZXM7CisJCWVsc2UgaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1JWNzcwKQorCQkJdmFsdWUgPSByZGV2LT5jb25maWcucnY3NzAubWF4X3RpbGVfcGlwZXM7CisJCWVsc2UgaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDApCisJCQl2YWx1ZSA9IHJkZXYtPmNvbmZpZy5yNjAwLm1heF90aWxlX3BpcGVzOworCQllbHNlIHsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWNhc2UgUkFERU9OX0lORk9fRlVTSU9OX0dBUlRfV09SS0lORzoKKwkJdmFsdWUgPSAxOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlEUk1fREVCVUdfS01TKCJJbnZhbGlkIHJlcXVlc3QgJWRcbiIsIGluZm8tPnJlcXVlc3QpOwogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvY2F5bWFuIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9jYXltYW4KaW5kZXggNjMzNGY4YS4uMGFhOGU4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9jYXltYW4KKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9jYXltYW4KQEAgLTMzLDYgKzMzLDcgQEAKIDB4MDAwMDhFNDggU1FfRVhfQUxMT0NfVEFCTEVfU0xPVFMKIDB4MDAwMDkxMDAgU1BJX0NPTkZJR19DTlRMCiAweDAwMDA5MTNDIFNQSV9DT05GSUdfQ05UTF8xCisweDAwMDA5NTA4IFRBX0NOVExfQVVYCiAweDAwMDA5ODMwIERCX0RFQlVHCiAweDAwMDA5ODM0IERCX0RFQlVHMgogMHgwMDAwOTgzOCBEQl9ERUJVRzMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvZXZlcmdyZWVuIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9ldmVyZ3JlZW4KaW5kZXggN2UxNjM3MS4uMGUyOGNhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9ldmVyZ3JlZW4KKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9ldmVyZ3JlZW4KQEAgLTQ2LDYgKzQ2LDcgQEAKIDB4MDAwMDhFNDggU1FfRVhfQUxMT0NfVEFCTEVfU0xPVFMKIDB4MDAwMDkxMDAgU1BJX0NPTkZJR19DTlRMCiAweDAwMDA5MTNDIFNQSV9DT05GSUdfQ05UTF8xCisweDAwMDA5NTA4IFRBX0NOVExfQVVYCiAweDAwMDA5NzAwIFZDX0NOVEwKIDB4MDAwMDk3MTQgVkNfRU5IQU5DRQogMHgwMDAwOTgzMCBEQl9ERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yNjAwIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yNjAwCmluZGV4IGFmMGRhNGEuLjkyZjE5MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcjYwMAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3I2MDAKQEAgLTcwOCw2ICs3MDgsNyBAQAogMHgwMDAyOEQwQyBEQl9SRU5ERVJfQ09OVFJPTAogMHgwMDAyOEQxMCBEQl9SRU5ERVJfT1ZFUlJJREUKIDB4MDAwMjg4MEMgREJfU0hBREVSX0NPTlRST0wKKzB4MDAwMjhEMjggREJfU1JFU1VMVFNfQ09NUEFSRV9TVEFURTAKIDB4MDAwMjhEMkMgREJfU1JFU1VMVFNfQ09NUEFSRV9TVEFURTEKIDB4MDAwMjg0MzAgREJfU1RFTkNJTFJFRk1BU0sKIDB4MDAwMjg0MzQgREJfU1RFTkNJTFJFRk1BU0tfQkYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L3ZnYS92Z2Ffc3dpdGNoZXJvby5jIGIvZHJpdmVycy9ncHUvdmdhL3ZnYV9zd2l0Y2hlcm9vLmMKaW5kZXggZTAxY2FjYi4uNDk4YjI4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvdmdhL3ZnYV9zd2l0Y2hlcm9vLmMKKysrIGIvZHJpdmVycy9ncHUvdmdhL3ZnYV9zd2l0Y2hlcm9vLmMKQEAgLTIxOSw5ICsyMTksNiBAQAogCWludCBpOwogCXN0cnVjdCB2Z2Ffc3dpdGNoZXJvb19jbGllbnQgKmFjdGl2ZSA9IE5VTEw7CiAKLQlpZiAobmV3X2NsaWVudC0+YWN0aXZlID09IHRydWUpCi0JCXJldHVybiAwOwotCiAJZm9yIChpID0gMDsgaSA8IFZHQV9TV0lUQ0hFUk9PX01BWF9DTElFTlRTOyBpKyspIHsKIAkJaWYgKHZnYXNyX3ByaXYuY2xpZW50c1tpXS5hY3RpdmUgPT0gdHJ1ZSkgewogCQkJYWN0aXZlID0gJnZnYXNyX3ByaXYuY2xpZW50c1tpXTsKQEAgLTM3Miw2ICszNjksOSBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlpZiAoY2xpZW50LT5hY3RpdmUgPT0gdHJ1ZSkKKwkJZ290byBvdXQ7CisKIAkvKiBva2F5IHdlIHdhbnQgYSBzd2l0Y2ggLSB0ZXN0IGlmIGRldmljZXMgYXJlIHdpbGxpbmcgdG8gc3dpdGNoICovCiAJY2FuX3N3aXRjaCA9IHRydWU7CiAJZm9yIChpID0gMDsgaSA8IFZHQV9TV0lUQ0hFUk9PX01BWF9DTElFTlRTOyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwppbmRleCAwNjBlZjYzLi41MGU0MGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL0tjb25maWcKKysrIGIvZHJpdmVycy9od21vbi9LY29uZmlnCkBAIC0xMTAsOCArMTEwLDcgQEAKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgQW5hbG9nIERldmljZXMgQURNMTAyMQogCSAgYW5kIEFETTEwMjMgc2Vuc29yIGNoaXBzIGFuZCBjbG9uZXM6IE1heGltIE1BWDE2MTcgYW5kIE1BWDE2MTdBLAotCSAgR2VuZXN5cyBMb2dpYyBHTDUyM1NNLCBOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNODQsIFRJIFRITUMxMCwKLQkgIGFuZCB0aGUgWEVPTiBwcm9jZXNzb3IgYnVpbHQtaW4gc2Vuc29yLgorCSAgR2VuZXN5cyBMb2dpYyBHTDUyM1NNLCBOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNODQgYW5kIFRJIFRITUMxMC4KIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgYWRtMTAyMS4KQEAgLTYxOCwxMCArNjE3LDEwIEBACiAJZGVwZW5kcyBvbiBJMkMKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTkwLAotCSAgTE04NiwgTE04OSBhbmQgTE05OSwgQW5hbG9nIERldmljZXMgQURNMTAzMiBhbmQgQURUNzQ2MSwgTWF4aW0KLQkgIE1BWDY2NDYsIE1BWDY2NDcsIE1BWDY2NDgsIE1BWDY2NDksIE1BWDY2NTcsIE1BWDY2NTgsIE1BWDY2NTksCi0JICBNQVg2NjgwLCBNQVg2NjgxLCBNQVg2NjkyLCBNQVg2Njk1LCBNQVg2Njk2LCBhbmQgV2luYm9uZC9OdXZvdG9uCi0JICBXODNMNzcxVy9HL0FXRy9BU0cgc2Vuc29yIGNoaXBzLgorCSAgTE04NiwgTE04OSBhbmQgTE05OSwgQW5hbG9nIERldmljZXMgQURNMTAzMiwgQURUNzQ2MSwgYW5kIEFEVDc0NjFBLAorCSAgTWF4aW0gTUFYNjY0NiwgTUFYNjY0NywgTUFYNjY0OCwgTUFYNjY0OSwgTUFYNjY1NywgTUFYNjY1OCwgTUFYNjY1OSwKKwkgIE1BWDY2ODAsIE1BWDY2ODEsIE1BWDY2OTIsIE1BWDY2OTUsIE1BWDY2OTYsIE9OIFNlbWljb25kdWN0b3IgTkNUMTAwOCwKKwkgIGFuZCBXaW5ib25kL051dm90b24gVzgzTDc3MVcvRy9BV0cvQVNHIHNlbnNvciBjaGlwcy4KIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgbG05MC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG04NS5jIGIvZHJpdmVycy9od21vbi9sbTg1LmMKaW5kZXggMjUwZDA5OS4uZGE3MmRjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTg1LmMKKysrIGIvZHJpdmVycy9od21vbi9sbTg1LmMKQEAgLTEwOTQsNiArMTA5NCw3IEBACiAJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fcHdtX21pbmN0bC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9hdXRvX3B3bV9taW5jdGwuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfYXV0b19wd21fbWluY3RsLmRldl9hdHRyLmF0dHIsCisJTlVMTAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbG04NV9ncm91cF9taW5jdGwgPSB7CkBAIC0xMTA0LDYgKzExMDUsNyBAQAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfYXV0b190ZW1wX29mZi5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfYXV0b190ZW1wX29mZi5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfYXV0b190ZW1wX29mZi5kZXZfYXR0ci5hdHRyLAorCU5VTEwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxtODVfZ3JvdXBfdGVtcF9vZmYgPSB7CkBAIC0xMzI5LDExICsxMzMxLDExIEBACiAJaWYgKGRhdGEtPnR5cGUgIT0gZW1jNmQxMDNzKSB7CiAJCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtODVfZ3JvdXBfbWluY3RsKTsKIAkJaWYgKGVycikKLQkJCWdvdG8gZXJyX2tmcmVlOworCQkJZ290byBlcnJfcmVtb3ZlX2ZpbGVzOwogCQllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosCiAJCQkJCSAmbG04NV9ncm91cF90ZW1wX29mZik7CiAJCWlmIChlcnIpCi0JCQlnb3RvIGVycl9rZnJlZTsKKwkJCWdvdG8gZXJyX3JlbW92ZV9maWxlczsKIAl9CiAKIAkvKiBUaGUgQURUNzQ2My82OCBoYXZlIGFuIG9wdGlvbmFsIFZSTSAxMCBtb2RlIHdoZXJlIHBpbiAyMSBpcyB1c2VkCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtOTAuYyBiL2RyaXZlcnMvaHdtb24vbG05MC5jCmluZGV4IGM0M2I0ZTkuLjJmOTRmOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG05MC5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG05MC5jCkBAIC00OSwxMCArNDksMTAgQEAKICAqIGNoaXBzLCBidXQgc3VwcG9ydCB0aHJlZSB0ZW1wZXJhdHVyZSBzZW5zb3JzIGluc3RlYWQgb2YgdHdvLiBNQVg2Njk1CiAgKiBhbmQgTUFYNjY5NiBvbmx5IGRpZmZlciBpbiB0aGUgcGlub3V0IHNvIHRoZXkgY2FuIGJlIHRyZWF0ZWQgaWRlbnRpY2FsbHkuCiAgKgotICogVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgQURUNzQ2MSBjaGlwIGZyb20gQW5hbG9nIERldmljZXMuCi0gKiBJdCdzIHN1cHBvcnRlZCBpbiBib3RoIGNvbXBhdGliaWxpdHkgYW5kIGV4dGVuZGVkIG1vZGUuIEl0IGlzIG1vc3RseQotICogY29tcGF0aWJsZSB3aXRoIExNOTAgZXhjZXB0IGZvciBhIGRhdGEgZm9ybWF0IGRpZmZlcmVuY2UgZm9yIHRoZQotICogdGVtcGVyYXR1cmUgdmFsdWUgcmVnaXN0ZXJzLgorICogVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyBBRFQ3NDYxIGFuZCBBRFQ3NDYxQSBmcm9tIEFuYWxvZyBEZXZpY2VzIGFzIHdlbGwgYXMKKyAqIE5DVDEwMDggZnJvbSBPTiBTZW1pY29uZHVjdG9yLiBUaGUgY2hpcHMgYXJlIHN1cHBvcnRlZCBpbiBib3RoIGNvbXBhdGliaWxpdHkKKyAqIGFuZCBleHRlbmRlZCBtb2RlLiBUaGV5IGFyZSBtb3N0bHkgY29tcGF0aWJsZSB3aXRoIExNOTAgZXhjZXB0IGZvciBhIGRhdGEKKyAqIGZvcm1hdCBkaWZmZXJlbmNlIGZvciB0aGUgdGVtcGVyYXR1cmUgdmFsdWUgcmVnaXN0ZXJzLgogICoKICAqIFNpbmNlIHRoZSBMTTkwIHdhcyB0aGUgZmlyc3QgY2hpcHNldCBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIsIG1vc3QKICAqIGNvbW1lbnRzIHdpbGwgcmVmZXIgdG8gdGhpcyBjaGlwc2V0LCBidXQgYXJlIGFjdHVhbGx5IGdlbmVyYWwgYW5kCkBAIC04OCw5ICs4OCwxMCBAQAogICogQWRkcmVzc2VzIHRvIHNjYW4KICAqIEFkZHJlc3MgaXMgZnVsbHkgZGVmaW5lZCBpbnRlcm5hbGx5IGFuZCBjYW5ub3QgYmUgY2hhbmdlZCBleGNlcHQgZm9yCiAgKiBNQVg2NjU5LCBNQVg2NjgwIGFuZCBNQVg2NjgxLgotICogTE04NiwgTE04OSwgTE05MCwgTE05OSwgQURNMTAzMiwgQURNMTAzMi0xLCBBRFQ3NDYxLCBNQVg2NjQ5LCBNQVg2NjU3LAotICogTUFYNjY1OCBhbmQgVzgzTDc3MSBoYXZlIGFkZHJlc3MgMHg0Yy4KLSAqIEFETTEwMzItMiwgQURUNzQ2MS0yLCBMTTg5LTEsIExNOTktMSBhbmQgTUFYNjY0NiBoYXZlIGFkZHJlc3MgMHg0ZC4KKyAqIExNODYsIExNODksIExNOTAsIExNOTksIEFETTEwMzIsIEFETTEwMzItMSwgQURUNzQ2MSwgQURUNzQ2MUEsIE1BWDY2NDksCisgKiBNQVg2NjU3LCBNQVg2NjU4LCBOQ1QxMDA4IGFuZCBXODNMNzcxIGhhdmUgYWRkcmVzcyAweDRjLgorICogQURNMTAzMi0yLCBBRFQ3NDYxLTIsIEFEVDc0NjFBLTIsIExNODktMSwgTE05OS0xLCBNQVg2NjQ2LCBhbmQgTkNUMTAwOEQKKyAqIGhhdmUgYWRkcmVzcyAweDRkLgogICogTUFYNjY0NyBoYXMgYWRkcmVzcyAweDRlLgogICogTUFYNjY1OSBjYW4gaGF2ZSBhZGRyZXNzIDB4NGMsIDB4NGQgb3IgMHg0ZS4KICAqIE1BWDY2ODAgYW5kIE1BWDY2ODEgY2FuIGhhdmUgYWRkcmVzcyAweDE4LCAweDE5LCAweDFhLCAweDI5LCAweDJhLCAweDJiLApAQCAtMTc0LDYgKzE3NSw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbG05MF9pZFtdID0gewogCXsgImFkbTEwMzIiLCBhZG0xMDMyIH0sCiAJeyAiYWR0NzQ2MSIsIGFkdDc0NjEgfSwKKwl7ICJhZHQ3NDYxYSIsIGFkdDc0NjEgfSwKIAl7ICJsbTkwIiwgbG05MCB9LAogCXsgImxtODYiLCBsbTg2IH0sCiAJeyAibG04OSIsIGxtODYgfSwKQEAgLTE4OCw2ICsxOTAsNyBAQAogCXsgIm1heDY2ODEiLCBtYXg2NjgwIH0sCiAJeyAibWF4NjY5NSIsIG1heDY2OTYgfSwKIAl7ICJtYXg2Njk2IiwgbWF4NjY5NiB9LAorCXsgIm5jdDEwMDgiLCBhZHQ3NDYxIH0sCiAJeyAidzgzbDc3MSIsIHc4M2w3NzEgfSwKIAl7IH0KIH07CkBAIC0xMTUzLDYgKzExNTYsMTEgQEAKIAkJICYmIChyZWdfY29uZmlnMSAmIDB4MUIpID09IDB4MDAKIAkJICYmIHJlZ19jb252cmF0ZSA8PSAweDBBKSB7CiAJCQluYW1lID0gImFkdDc0NjEiOworCQl9IGVsc2UKKwkJaWYgKGNoaXBfaWQgPT0gMHg1NyAvKiBBRFQ3NDYxQSwgTkNUMTAwOCAqLworCQkgJiYgKHJlZ19jb25maWcxICYgMHgxQikgPT0gMHgwMAorCQkgJiYgcmVnX2NvbnZyYXRlIDw9IDB4MEEpIHsKKwkJCW5hbWUgPSAiYWR0NzQ2MWEiOwogCQl9CiAJfSBlbHNlCiAJaWYgKG1hbl9pZCA9PSAweDREKSB7IC8qIE1heGltICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3BtYnVzX2NvcmUuYyBiL2RyaXZlcnMvaHdtb24vcG1idXNfY29yZS5jCmluZGV4IGVkZmI5MmUuLjE5NmZmYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vcG1idXNfY29yZS5jCisrKyBiL2RyaXZlcnMvaHdtb24vcG1idXNfY29yZS5jCkBAIC0xMzksNyArMTM5LDYgQEAKIAkgKiBBIHNpbmdsZSBzdGF0dXMgcmVnaXN0ZXIgY292ZXJzIG11bHRpcGxlIGF0dHJpYnV0ZXMsCiAJICogc28gd2Uga2VlcCB0aGVtIGFsbCB0b2dldGhlci4KIAkgKi8KLQl1OCBzdGF0dXNfYml0czsKIAl1OCBzdGF0dXNbUEJfTlVNX1NUQVRVU19SRUddOwogCiAJdTggY3VycnBhZ2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3R3bDQwMzAtbWFkYy1od21vbi5jIGIvZHJpdmVycy9od21vbi90d2w0MDMwLW1hZGMtaHdtb24uYwppbmRleCBkZTU4MTkxLi41NzI0MDc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3R3bDQwMzAtbWFkYy1od21vbi5jCisrKyBiL2RyaXZlcnMvaHdtb24vdHdsNDAzMC1tYWRjLWh3bW9uLmMKQEAgLTk4LDcgKzk4LDYgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHR3bDQwMzBfbWFkY19od21vbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWludCByZXQ7Ci0JaW50IHN0YXR1czsKIAlzdHJ1Y3QgZGV2aWNlICpod21vbjsKIAogCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZ0d2w0MDMwX21hZGNfZ3JvdXApOwpAQCAtMTA3LDcgKzEwNiw3IEBACiAJaHdtb24gPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldik7CiAJaWYgKElTX0VSUihod21vbikpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiaHdtb25fZGV2aWNlX3JlZ2lzdGVyIGZhaWxlZC5cbiIpOwotCQlzdGF0dXMgPSBQVFJfRVJSKGh3bW9uKTsKKwkJcmV0ID0gUFRSX0VSUihod21vbik7CiAJCWdvdG8gZXJyX3JlZzsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKaW5kZXggNzJjMDQxNS4uNDU1ZTkwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKQEAgLTEzNCwxMCArMTM0LDE1IEBACiAJCQkJIFNNQkhTVFNUU19CVVNfRVJSIHwgU01CSFNUU1RTX0RFVl9FUlIgfCBcCiAJCQkJIFNNQkhTVFNUU19JTlRSKQogCisvKiBPbGRlciBkZXZpY2VzIGhhdmUgdGhlaXIgSUQgZGVmaW5lZCBpbiA8bGludXgvcGNpX2lkcy5oPiAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0NPVUdBUlBPSU5UX1NNQlVTCTB4MWMyMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1BBVFNCVVJHX1NNQlVTCTB4MWQyMgogLyogUGF0c2J1cmcgYWxzbyBoYXMgdGhyZWUgJ0ludGVncmF0ZWQgRGV2aWNlIEZ1bmN0aW9uJyBTTUJ1cyBjb250cm9sbGVycyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1BBVFNCVVJHX1NNQlVTX0lERjAJMHgxZDcwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfUEFUU0JVUkdfU01CVVNfSURGMQkweDFkNzEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9QQVRTQlVSR19TTUJVU19JREYyCTB4MWQ3MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0RIODlYWENDX1NNQlVTCTB4MjMzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzVfMzQwMF9TRVJJRVNfU01CVVMJMHgzYjMwCiAKIHN0cnVjdCBpODAxX3ByaXYgewogCXN0cnVjdCBpMmNfYWRhcHRlciBhZGFwdGVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMKaW5kZXggNzViOTg0Yy4uMTA3Mzk3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCkBAIC01NjAsMTUgKzU2MCwxOCBAQAogCS50aW1lb3V0ID0gSFosCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtcGNfaTJjX29mX21hdGNoW107CiBzdGF0aWMgaW50IF9fZGV2aW5pdCBmc2xfaTJjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wKQogeworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCXN0cnVjdCBtcGNfaTJjICppMmM7CiAJY29uc3QgdTMyICpwcm9wOwogCXUzMiBjbG9jayA9IE1QQ19JMkNfQ0xPQ0tfTEVHQUNZOwogCWludCByZXN1bHQgPSAwOwogCWludCBwbGVuOwogCi0JaWYgKCFvcC0+ZGV2Lm9mX21hdGNoKQorCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKG1wY19pMmNfb2ZfbWF0Y2gsICZvcC0+ZGV2KTsKKwlpZiAoIW1hdGNoKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWkyYyA9IGt6YWxsb2Moc2l6ZW9mKCppMmMpLCBHRlBfS0VSTkVMKTsKQEAgLTYwNSw4ICs2MDgsOCBAQAogCQkJY2xvY2sgPSAqcHJvcDsKIAl9CiAKLQlpZiAob3AtPmRldi5vZl9tYXRjaC0+ZGF0YSkgewotCQlzdHJ1Y3QgbXBjX2kyY19kYXRhICpkYXRhID0gb3AtPmRldi5vZl9tYXRjaC0+ZGF0YTsKKwlpZiAobWF0Y2gtPmRhdGEpIHsKKwkJc3RydWN0IG1wY19pMmNfZGF0YSAqZGF0YSA9IG1hdGNoLT5kYXRhOwogCQlkYXRhLT5zZXR1cChvcC0+ZGV2Lm9mX25vZGUsIGkyYywgY2xvY2ssIGRhdGEtPnByZXNjYWxlcik7CiAJfSBlbHNlIHsKIAkJLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmMKaW5kZXggMGViMTUxNS4uMmRiYmExNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmMKQEAgLTEsNyArMSw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKgogICogaTJjLXBhcnBvcnQuYyBJMkMgYnVzIG92ZXIgcGFyYWxsZWwgcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqCi0gICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMCBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KKyAgIENvcHlyaWdodCAoQykgMjAwMy0yMDExIEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgogICAgCiAgICBCYXNlZCBvbiBvbGRlciBpMmMtcGhpbGlwcy1wYXIuYyBkcml2ZXIKICAgIENvcHlyaWdodCAoQykgMTk5NS0yMDAwIFNpbW9uIEcuIFZvZ2wKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtc21idXMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSAiaTJjLXBhcnBvcnQuaCIKIAogLyogLS0tLS0gRGV2aWNlIGxpc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC00MywxMCArNDUsMTEgQEAKIAlzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgYWxnb19kYXRhOwogCXN0cnVjdCBpMmNfc21idXNfYWxlcnRfc2V0dXAgYWxlcnRfZGF0YTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqYXJhOwotCXN0cnVjdCBpMmNfcGFyICpuZXh0OworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX3BhciAqYWRhcHRlcl9saXN0Oworc3RhdGljIExJU1RfSEVBRChhZGFwdGVyX2xpc3QpOworc3RhdGljIERFRklORV9NVVRFWChhZGFwdGVyX2xpc3RfbG9jayk7CiAKIC8qIC0tLS0tIExvdy1sZXZlbCBwYXJhbGxlbCBwb3J0IGFjY2VzcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0yMjgsOCArMjMxLDkgQEAKIAl9CiAKIAkvKiBBZGQgdGhlIG5ldyBhZGFwdGVyIHRvIHRoZSBsaXN0ICovCi0JYWRhcHRlci0+bmV4dCA9IGFkYXB0ZXJfbGlzdDsKLQlhZGFwdGVyX2xpc3QgPSBhZGFwdGVyOworCW11dGV4X2xvY2soJmFkYXB0ZXJfbGlzdF9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZhZGFwdGVyLT5ub2RlLCAmYWRhcHRlcl9saXN0KTsKKwltdXRleF91bmxvY2soJmFkYXB0ZXJfbGlzdF9sb2NrKTsKICAgICAgICAgcmV0dXJuOwogCiBFUlJPUjE6CkBAIC0yNDEsMTEgKzI0NSwxMSBAQAogCiBzdGF0aWMgdm9pZCBpMmNfcGFycG9ydF9kZXRhY2ggKHN0cnVjdCBwYXJwb3J0ICpwb3J0KQogewotCXN0cnVjdCBpMmNfcGFyICphZGFwdGVyLCAqcHJldjsKKwlzdHJ1Y3QgaTJjX3BhciAqYWRhcHRlciwgKl9uOwogCiAJLyogV2FsayB0aGUgbGlzdCAqLwotCWZvciAocHJldiA9IE5VTEwsIGFkYXB0ZXIgPSBhZGFwdGVyX2xpc3Q7IGFkYXB0ZXI7Ci0JICAgICBwcmV2ID0gYWRhcHRlciwgYWRhcHRlciA9IGFkYXB0ZXItPm5leHQpIHsKKwltdXRleF9sb2NrKCZhZGFwdGVyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGFkYXB0ZXIsIF9uLCAmYWRhcHRlcl9saXN0LCBub2RlKSB7CiAJCWlmIChhZGFwdGVyLT5wZGV2LT5wb3J0ID09IHBvcnQpIHsKIAkJCWlmIChhZGFwdGVyLT5hcmEpIHsKIAkJCQlwYXJwb3J0X2Rpc2FibGVfaXJxKHBvcnQpOwpAQCAtMjU5LDE0ICsyNjMsMTEgQEAKIAkJCQkKIAkJCXBhcnBvcnRfcmVsZWFzZShhZGFwdGVyLT5wZGV2KTsKIAkJCXBhcnBvcnRfdW5yZWdpc3Rlcl9kZXZpY2UoYWRhcHRlci0+cGRldik7Ci0JCQlpZiAocHJldikKLQkJCQlwcmV2LT5uZXh0ID0gYWRhcHRlci0+bmV4dDsKLQkJCWVsc2UKLQkJCQlhZGFwdGVyX2xpc3QgPSBhZGFwdGVyLT5uZXh0OworCQkJbGlzdF9kZWwoJmFkYXB0ZXItPm5vZGUpOwogCQkJa2ZyZWUoYWRhcHRlcik7Ci0JCQlyZXR1cm47CiAJCX0KIAl9CisJbXV0ZXhfdW5sb2NrKCZhZGFwdGVyX2xpc3RfbG9jayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGFycG9ydF9kcml2ZXIgaTJjX3BhcnBvcnRfZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wbnguYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG54LmMKaW5kZXggYTk3ZTNmZS4uMDRiZTlmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wbnguYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBueC5jCkBAIC02NSw3ICs2NSw3IEBACiAJCWppZmZpZXMsIGV4cGlyZXMpOwogCiAJdGltZXItPmV4cGlyZXMgPSBqaWZmaWVzICsgZXhwaXJlczsKLQl0aW1lci0+ZGF0YSA9ICh1bnNpZ25lZCBsb25nKSZhbGdfZGF0YTsKKwl0aW1lci0+ZGF0YSA9ICh1bnNpZ25lZCBsb25nKWFsZ19kYXRhOwogCiAJYWRkX3RpbWVyKHRpbWVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKaW5kZXggZmQxZTExNy4uYTVlYzVhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWNkLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKQEAgLTE3ODIsNyArMTc4Miw2IEBACiAJaWRlX2NkX3JlYWRfdG9jKGRyaXZlLCAmc2Vuc2UpOwogCWctPmZvcHMgPSAmaWRlY2Rfb3BzOwogCWctPmZsYWdzIHw9IEdFTkhEX0ZMX1JFTU9WQUJMRTsKLQlnLT5ldmVudHMgPSBESVNLX0VWRU5UX01FRElBX0NIQU5HRTsKIAlhZGRfZGlzayhnKTsKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWNkX2lvY3RsLmMgYi9kcml2ZXJzL2lkZS9pZGUtY2RfaW9jdGwuYwppbmRleCAyYTZiYzUwLi4wMmNhYTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtY2RfaW9jdGwuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtY2RfaW9jdGwuYwpAQCAtNzksNiArNzksMTIgQEAKIAlyZXR1cm4gQ0RTX0RSSVZFX05PVF9SRUFEWTsKIH0KIAorLyoKKyAqIGlkZS1jZCBhbHdheXMgZ2VuZXJhdGVzIG1lZGlhIGNoYW5nZWQgZXZlbnQgaWYgbWVkaWEgaXMgbWlzc2luZywgd2hpY2gKKyAqIG1ha2VzIGl0IGltcG9zc2libGUgdG8gdXNlIGZvciBwcm9wZXIgZXZlbnQgcmVwb3J0aW5nLCBzbyBkaXNrLT5ldmVudHMKKyAqIGlzIGNsZWFyZWQgdG8gMCBhbmQgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiBpcyB1c2VkIG9ubHkgdG8gdHJpZ2dlcgorICogcmV2YWxpZGF0aW9uIGFuZCBuZXZlciBwcm9wYWdhdGVkIHRvIHVzZXJsYW5kLgorICovCiB1bnNpZ25lZCBpbnQgaWRlX2Nkcm9tX2NoZWNrX2V2ZW50c19yZWFsKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAogCQkJCQkgdW5zaWduZWQgaW50IGNsZWFyaW5nLCBpbnQgc2xvdF9ucikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1nZC5jIGIvZHJpdmVycy9pZGUvaWRlLWdkLmMKaW5kZXggYzRmZmQ0OC4uNzBlYTg3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWdkLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWdkLmMKQEAgLTI5OCw2ICsyOTgsMTIgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIGlzIHVzZWQgdG8gZm9yY2UgcmV2YWxpZGF0aW9uIG9uIHRoZSBmaXJzdCBvcGVuIG9uCisJICogcmVtb3ZlYWJsZSBkZXZpY2VzLCBhbmQgbmV2ZXIgZ2V0cyByZXBvcnRlZCB0byB1c2VybGFuZCBhcworCSAqIGdlbmhkLT5ldmVudHMgaXMgMC4gIFRoaXMgaXMgaW50ZW5kZWQgYXMgcmVtb3ZlYWJsZSBpZGUgZGlzaworCSAqIGNhbid0IHJlYWxseSBkZXRlY3QgTUVESUFfQ0hBTkdFIGV2ZW50cy4KKwkgKi8KIAlyZXQgPSBkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX01FRElBX0NIQU5HRUQ7CiAJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX01FRElBX0NIQU5HRUQ7CiAKQEAgLTQxMyw3ICs0MTksNiBAQAogCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1JFTU9WQUJMRSkKIAkJZy0+ZmxhZ3MgPSBHRU5IRF9GTF9SRU1PVkFCTEU7CiAJZy0+Zm9wcyA9ICZpZGVfZ2Rfb3BzOwotCWctPmV2ZW50cyA9IERJU0tfRVZFTlRfTUVESUFfQ0hBTkdFOwogCWFkZF9kaXNrKGcpOwogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWU4MDIxNTQvZmFrZWhhcmQuYyBiL2RyaXZlcnMvaWVlZTgwMjE1NC9mYWtlaGFyZC5jCmluZGV4IGQ5ZDBlMTMuLmE1YTQ5YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTgwMjE1NC9mYWtlaGFyZC5jCisrKyBiL2RyaXZlcnMvaWVlZTgwMjE1NC9mYWtlaGFyZC5jCkBAIC0zOTMsMTYgKzM5Myw2IEBACiAJcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJcHJpdi0+cGh5ID0gcGh5OwogCi0JLyoKLQkgKiBJZiB0aGUgbmFtZSBpcyBhIGZvcm1hdCBzdHJpbmcgdGhlIGNhbGxlciB3YW50cyB1cyB0byBkbyBhCi0JICogbmFtZSBhbGxvY2F0aW9uLgotCSAqLwotCWlmIChzdHJjaHIoZGV2LT5uYW1lLCAnJScpKSB7Ci0JCWVyciA9IGRldl9hbGxvY19uYW1lKGRldiwgZGV2LT5uYW1lKTsKLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIG91dDsKLQl9Ci0KIAl3cGFuX3BoeV9zZXRfZGV2KHBoeSwgJnBkZXYtPmRldik7CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGh5LT5kZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9hZGRyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9hZGRyLmMKaW5kZXggNGZmYzIyNC4uOGUyMWQ0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvYWRkci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2FkZHIuYwpAQCAtMTg1LDE1ICsxODUsMjAgQEAKIAlfX2JlMzIgZHN0X2lwID0gZHN0X2luLT5zaW5fYWRkci5zX2FkZHI7CiAJc3RydWN0IHJ0YWJsZSAqcnQ7CiAJc3RydWN0IG5laWdoYm91ciAqbmVpZ2g7CisJc3RydWN0IGZsb3dpNCBmbDQ7CiAJaW50IHJldDsKIAotCXJ0ID0gaXBfcm91dGVfb3V0cHV0KCZpbml0X25ldCwgZHN0X2lwLCBzcmNfaXAsIDAsIGFkZHItPmJvdW5kX2Rldl9pZik7CisJbWVtc2V0KCZmbDQsIDAsIHNpemVvZihmbDQpKTsKKwlmbDQuZGFkZHIgPSBkc3RfaXA7CisJZmw0LnNhZGRyID0gc3JjX2lwOworCWZsNC5mbG93aTRfb2lmID0gYWRkci0+Ym91bmRfZGV2X2lmOworCXJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleSgmaW5pdF9uZXQsICZmbDQpOwogCWlmIChJU19FUlIocnQpKSB7CiAJCXJldCA9IFBUUl9FUlIocnQpOwogCQlnb3RvIG91dDsKIAl9CiAJc3JjX2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLQlzcmNfaW4tPnNpbl9hZGRyLnNfYWRkciA9IHJ0LT5ydF9zcmM7CisJc3JjX2luLT5zaW5fYWRkci5zX2FkZHIgPSBmbDQuc2FkZHI7CiAKIAlpZiAocnQtPmRzdC5kZXYtPmZsYWdzICYgSUZGX0xPT1BCQUNLKSB7CiAJCXJldCA9IHJkbWFfdHJhbnNsYXRlX2lwKChzdHJ1Y3Qgc29ja2FkZHIgKikgZHN0X2luLCBhZGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMKaW5kZXggNWVkOWQyNS4uOTlkZGU4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMKQEAgLTE0OCw2ICsxNDgsNyBAQAogCXUzMgkJCXFwX251bTsKIAl1OAkJCXNycTsKIAl1OAkJCXRvczsKKwl1OAkJCXJldXNlYWRkcjsKIH07CiAKIHN0cnVjdCBjbWFfbXVsdGljYXN0IHsKQEAgLTcxMiw2ICs3MTMsMjEgQEAKIAlyZXR1cm4gY21hX3plcm9fYWRkcihhZGRyKSB8fCBjbWFfbG9vcGJhY2tfYWRkcihhZGRyKTsKIH0KIAorc3RhdGljIGludCBjbWFfYWRkcl9jbXAoc3RydWN0IHNvY2thZGRyICpzcmMsIHN0cnVjdCBzb2NrYWRkciAqZHN0KQoreworCWlmIChzcmMtPnNhX2ZhbWlseSAhPSBkc3QtPnNhX2ZhbWlseSkKKwkJcmV0dXJuIC0xOworCisJc3dpdGNoIChzcmMtPnNhX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJcmV0dXJuICgoc3RydWN0IHNvY2thZGRyX2luICopIHNyYyktPnNpbl9hZGRyLnNfYWRkciAhPQorCQkgICAgICAgKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgZHN0KS0+c2luX2FkZHIuc19hZGRyOworCWRlZmF1bHQ6CisJCXJldHVybiBpcHY2X2FkZHJfY21wKCYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgc3JjKS0+c2luNl9hZGRyLAorCQkJCSAgICAgJigoc3RydWN0IHNvY2thZGRyX2luNiAqKSBkc3QpLT5zaW42X2FkZHIpOworCX0KK30KKwogc3RhdGljIGlubGluZSBfX2JlMTYgY21hX3BvcnQoc3RydWN0IHNvY2thZGRyICphZGRyKQogewogCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkKQEAgLTE1NjQsNTAgKzE1ODAsNiBAQAogCW11dGV4X3VubG9jaygmbG9jayk7CiB9CiAKLWludCByZG1hX2xpc3RlbihzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIGludCBiYWNrbG9nKQotewotCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXY7Ci0JaW50IHJldDsKLQotCWlkX3ByaXYgPSBjb250YWluZXJfb2YoaWQsIHN0cnVjdCByZG1hX2lkX3ByaXZhdGUsIGlkKTsKLQlpZiAoaWRfcHJpdi0+c3RhdGUgPT0gQ01BX0lETEUpIHsKLQkJKChzdHJ1Y3Qgc29ja2FkZHIgKikgJmlkLT5yb3V0ZS5hZGRyLnNyY19hZGRyKS0+c2FfZmFtaWx5ID0gQUZfSU5FVDsKLQkJcmV0ID0gcmRtYV9iaW5kX2FkZHIoaWQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmlkLT5yb3V0ZS5hZGRyLnNyY19hZGRyKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JaWYgKCFjbWFfY29tcF9leGNoKGlkX3ByaXYsIENNQV9BRERSX0JPVU5ELCBDTUFfTElTVEVOKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZF9wcml2LT5iYWNrbG9nID0gYmFja2xvZzsKLQlpZiAoaWQtPmRldmljZSkgewotCQlzd2l0Y2ggKHJkbWFfbm9kZV9nZXRfdHJhbnNwb3J0KGlkLT5kZXZpY2UtPm5vZGVfdHlwZSkpIHsKLQkJY2FzZSBSRE1BX1RSQU5TUE9SVF9JQjoKLQkJCXJldCA9IGNtYV9pYl9saXN0ZW4oaWRfcHJpdik7Ci0JCQlpZiAocmV0KQotCQkJCWdvdG8gZXJyOwotCQkJYnJlYWs7Ci0JCWNhc2UgUkRNQV9UUkFOU1BPUlRfSVdBUlA6Ci0JCQlyZXQgPSBjbWFfaXdfbGlzdGVuKGlkX3ByaXYsIGJhY2tsb2cpOwotCQkJaWYgKHJldCkKLQkJCQlnb3RvIGVycjsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0ID0gLUVOT1NZUzsKLQkJCWdvdG8gZXJyOwotCQl9Ci0JfSBlbHNlCi0JCWNtYV9saXN0ZW5fb25fYWxsKGlkX3ByaXYpOwotCi0JcmV0dXJuIDA7Ci1lcnI6Ci0JaWRfcHJpdi0+YmFja2xvZyA9IDA7Ci0JY21hX2NvbXBfZXhjaChpZF9wcml2LCBDTUFfTElTVEVOLCBDTUFfQUREUl9CT1VORCk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0wocmRtYV9saXN0ZW4pOwotCiB2b2lkIHJkbWFfc2V0X3NlcnZpY2VfdHlwZShzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIGludCB0b3MpCiB7CiAJc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdjsKQEAgLTIwOTAsNiArMjA2MiwyNSBAQAogfQogRVhQT1JUX1NZTUJPTChyZG1hX3Jlc29sdmVfYWRkcik7CiAKK2ludCByZG1hX3NldF9yZXVzZWFkZHIoc3RydWN0IHJkbWFfY21faWQgKmlkLCBpbnQgcmV1c2UpCit7CisJc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwlpZF9wcml2ID0gY29udGFpbmVyX29mKGlkLCBzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlLCBpZCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlkX3ByaXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAoaWRfcHJpdi0+c3RhdGUgPT0gQ01BX0lETEUpIHsKKwkJaWRfcHJpdi0+cmV1c2VhZGRyID0gcmV1c2U7CisJCXJldCA9IDA7CisJfSBlbHNlIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRfcHJpdi0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHJkbWFfc2V0X3JldXNlYWRkcik7CisKIHN0YXRpYyB2b2lkIGNtYV9iaW5kX3BvcnQoc3RydWN0IHJkbWFfYmluZF9saXN0ICpiaW5kX2xpc3QsCiAJCQkgIHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYpCiB7CkBAIC0yMTY1LDQxICsyMTU2LDcxIEBACiAJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogfQogCi1zdGF0aWMgaW50IGNtYV91c2VfcG9ydChzdHJ1Y3QgaWRyICpwcywgc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdikKKy8qCisgKiBDaGVjayB0aGF0IHRoZSByZXF1ZXN0ZWQgcG9ydCBpcyBhdmFpbGFibGUuICBUaGlzIGlzIGNhbGxlZCB3aGVuIHRyeWluZyB0bworICogYmluZCB0byBhIHNwZWNpZmljIHBvcnQsIG9yIHdoZW4gdHJ5aW5nIHRvIGxpc3RlbiBvbiBhIGJvdW5kIHBvcnQuICBJbgorICogdGhlIGxhdHRlciBjYXNlLCB0aGUgcHJvdmlkZWQgaWRfcHJpdiBtYXkgYWxyZWFkeSBiZSBvbiB0aGUgYmluZF9saXN0LCBidXQKKyAqIHdlIHN0aWxsIG5lZWQgdG8gY2hlY2sgdGhhdCBpdCdzIG9rYXkgdG8gc3RhcnQgbGlzdGVuaW5nLgorICovCitzdGF0aWMgaW50IGNtYV9jaGVja19wb3J0KHN0cnVjdCByZG1hX2JpbmRfbGlzdCAqYmluZF9saXN0LAorCQkJICBzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2LCB1aW50OF90IHJldXNlYWRkcikKIHsKIAlzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICpjdXJfaWQ7Ci0Jc3RydWN0IHNvY2thZGRyX2luICpzaW4sICpjdXJfc2luOwotCXN0cnVjdCByZG1hX2JpbmRfbGlzdCAqYmluZF9saXN0OworCXN0cnVjdCBzb2NrYWRkciAqYWRkciwgKmN1cl9hZGRyOwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCXVuc2lnbmVkIHNob3J0IHNudW07CiAKLQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopICZpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLnNyY19hZGRyOwotCXNudW0gPSBudG9ocyhzaW4tPnNpbl9wb3J0KTsKKwlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSAmaWRfcHJpdi0+aWQucm91dGUuYWRkci5zcmNfYWRkcjsKKwlpZiAoY21hX2FueV9hZGRyKGFkZHIpICYmICFyZXVzZWFkZHIpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGN1cl9pZCwgbm9kZSwgJmJpbmRfbGlzdC0+b3duZXJzLCBub2RlKSB7CisJCWlmIChpZF9wcml2ID09IGN1cl9pZCkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoY3VyX2lkLT5zdGF0ZSA9PSBDTUFfTElTVEVOKSB8fAorCQkgICAgIXJldXNlYWRkciB8fCAhY3VyX2lkLT5yZXVzZWFkZHIpIHsKKwkJCWN1cl9hZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSAmY3VyX2lkLT5pZC5yb3V0ZS5hZGRyLnNyY19hZGRyOworCQkJaWYgKGNtYV9hbnlfYWRkcihjdXJfYWRkcikpCisJCQkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCisJCQlpZiAoIWNtYV9hZGRyX2NtcChhZGRyLCBjdXJfYWRkcikpCisJCQkJcmV0dXJuIC1FQUREUklOVVNFOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNtYV91c2VfcG9ydChzdHJ1Y3QgaWRyICpwcywgc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdikKK3sKKwlzdHJ1Y3QgcmRtYV9iaW5kX2xpc3QgKmJpbmRfbGlzdDsKKwl1bnNpZ25lZCBzaG9ydCBzbnVtOworCWludCByZXQ7CisKKwlzbnVtID0gbnRvaHMoY21hX3BvcnQoKHN0cnVjdCBzb2NrYWRkciAqKSAmaWRfcHJpdi0+aWQucm91dGUuYWRkci5zcmNfYWRkcikpOwogCWlmIChzbnVtIDwgUFJPVF9TT0NLICYmICFjYXBhYmxlKENBUF9ORVRfQklORF9TRVJWSUNFKSkKIAkJcmV0dXJuIC1FQUNDRVM7CiAKIAliaW5kX2xpc3QgPSBpZHJfZmluZChwcywgc251bSk7Ci0JaWYgKCFiaW5kX2xpc3QpCi0JCXJldHVybiBjbWFfYWxsb2NfcG9ydChwcywgaWRfcHJpdiwgc251bSk7Ci0KLQkvKgotCSAqIFdlIGRvbid0IHN1cHBvcnQgYmluZGluZyB0byBhbnkgYWRkcmVzcyBpZiBhbnlvbmUgaXMgYm91bmQgdG8KLQkgKiBhIHNwZWNpZmljIGFkZHJlc3Mgb24gdGhlIHNhbWUgcG9ydC4KLQkgKi8KLQlpZiAoY21hX2FueV9hZGRyKChzdHJ1Y3Qgc29ja2FkZHIgKikgJmlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuc3JjX2FkZHIpKQotCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7Ci0KLQlobGlzdF9mb3JfZWFjaF9lbnRyeShjdXJfaWQsIG5vZGUsICZiaW5kX2xpc3QtPm93bmVycywgbm9kZSkgewotCQlpZiAoY21hX2FueV9hZGRyKChzdHJ1Y3Qgc29ja2FkZHIgKikgJmN1cl9pZC0+aWQucm91dGUuYWRkci5zcmNfYWRkcikpCi0JCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7Ci0KLQkJY3VyX3NpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJmN1cl9pZC0+aWQucm91dGUuYWRkci5zcmNfYWRkcjsKLQkJaWYgKHNpbi0+c2luX2FkZHIuc19hZGRyID09IGN1cl9zaW4tPnNpbl9hZGRyLnNfYWRkcikKLQkJCXJldHVybiAtRUFERFJJTlVTRTsKKwlpZiAoIWJpbmRfbGlzdCkgeworCQlyZXQgPSBjbWFfYWxsb2NfcG9ydChwcywgaWRfcHJpdiwgc251bSk7CisJfSBlbHNlIHsKKwkJcmV0ID0gY21hX2NoZWNrX3BvcnQoYmluZF9saXN0LCBpZF9wcml2LCBpZF9wcml2LT5yZXVzZWFkZHIpOworCQlpZiAoIXJldCkKKwkJCWNtYV9iaW5kX3BvcnQoYmluZF9saXN0LCBpZF9wcml2KTsKIAl9CisJcmV0dXJuIHJldDsKK30KIAotCWNtYV9iaW5kX3BvcnQoYmluZF9saXN0LCBpZF9wcml2KTsKLQlyZXR1cm4gMDsKK3N0YXRpYyBpbnQgY21hX2JpbmRfbGlzdGVuKHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYpCit7CisJc3RydWN0IHJkbWFfYmluZF9saXN0ICpiaW5kX2xpc3QgPSBpZF9wcml2LT5iaW5kX2xpc3Q7CisJaW50IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZsb2NrKTsKKwlpZiAoYmluZF9saXN0LT5vd25lcnMuZmlyc3QtPm5leHQpCisJCXJldCA9IGNtYV9jaGVja19wb3J0KGJpbmRfbGlzdCwgaWRfcHJpdiwgMCk7CisJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGNtYV9nZXRfcG9ydChzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2KQpAQCAtMjI1Myw2ICsyMjc0LDU2IEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCByZG1hX2xpc3RlbihzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIGludCBiYWNrbG9nKQoreworCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXY7CisJaW50IHJldDsKKworCWlkX3ByaXYgPSBjb250YWluZXJfb2YoaWQsIHN0cnVjdCByZG1hX2lkX3ByaXZhdGUsIGlkKTsKKwlpZiAoaWRfcHJpdi0+c3RhdGUgPT0gQ01BX0lETEUpIHsKKwkJKChzdHJ1Y3Qgc29ja2FkZHIgKikgJmlkLT5yb3V0ZS5hZGRyLnNyY19hZGRyKS0+c2FfZmFtaWx5ID0gQUZfSU5FVDsKKwkJcmV0ID0gcmRtYV9iaW5kX2FkZHIoaWQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmlkLT5yb3V0ZS5hZGRyLnNyY19hZGRyKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJaWYgKCFjbWFfY29tcF9leGNoKGlkX3ByaXYsIENNQV9BRERSX0JPVU5ELCBDTUFfTElTVEVOKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaWRfcHJpdi0+cmV1c2VhZGRyKSB7CisJCXJldCA9IGNtYV9iaW5kX2xpc3RlbihpZF9wcml2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyOworCX0KKworCWlkX3ByaXYtPmJhY2tsb2cgPSBiYWNrbG9nOworCWlmIChpZC0+ZGV2aWNlKSB7CisJCXN3aXRjaCAocmRtYV9ub2RlX2dldF90cmFuc3BvcnQoaWQtPmRldmljZS0+bm9kZV90eXBlKSkgeworCQljYXNlIFJETUFfVFJBTlNQT1JUX0lCOgorCQkJcmV0ID0gY21hX2liX2xpc3RlbihpZF9wcml2KTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBlcnI7CisJCQlicmVhazsKKwkJY2FzZSBSRE1BX1RSQU5TUE9SVF9JV0FSUDoKKwkJCXJldCA9IGNtYV9pd19saXN0ZW4oaWRfcHJpdiwgYmFja2xvZyk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXQgPSAtRU5PU1lTOworCQkJZ290byBlcnI7CisJCX0KKwl9IGVsc2UKKwkJY21hX2xpc3Rlbl9vbl9hbGwoaWRfcHJpdik7CisKKwlyZXR1cm4gMDsKK2VycjoKKwlpZF9wcml2LT5iYWNrbG9nID0gMDsKKwljbWFfY29tcF9leGNoKGlkX3ByaXYsIENNQV9MSVNURU4sIENNQV9BRERSX0JPVU5EKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChyZG1hX2xpc3Rlbik7CisKIGludCByZG1hX2JpbmRfYWRkcihzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIHN0cnVjdCBzb2NrYWRkciAqYWRkcikKIHsKIAlzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvaXdjbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvaXdjbS5jCmluZGV4IDJhMWU5YWUuLmE5YzA0MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2l3Y20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9pd2NtLmMKQEAgLTcyNSw3ICs3MjUsNyBAQAogCSAqLwogCWNsZWFyX2JpdChJV0NNX0ZfQ09OTkVDVF9XQUlULCAmY21faWRfcHJpdi0+ZmxhZ3MpOwogCUJVR19PTihjbV9pZF9wcml2LT5zdGF0ZSAhPSBJV19DTV9TVEFURV9DT05OX1NFTlQpOwotCWlmIChpd19ldmVudC0+c3RhdHVzID09IElXX0NNX0VWRU5UX1NUQVRVU19BQ0NFUFRFRCkgeworCWlmIChpd19ldmVudC0+c3RhdHVzID09IDApIHsKIAkJY21faWRfcHJpdi0+aWQubG9jYWxfYWRkciA9IGl3X2V2ZW50LT5sb2NhbF9hZGRyOwogCQljbV9pZF9wcml2LT5pZC5yZW1vdGVfYWRkciA9IGl3X2V2ZW50LT5yZW1vdGVfYWRkcjsKIAkJY21faWRfcHJpdi0+c3RhdGUgPSBJV19DTV9TVEFURV9FU1RBQkxJU0hFRDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbWEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbWEuYwppbmRleCBlYzFlOWRhLi5iM2ZhNzk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y21hLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtYS5jCkBAIC04ODMsNiArODgzLDEzIEBACiAJCX0KIAkJcmRtYV9zZXRfc2VydmljZV90eXBlKGN0eC0+Y21faWQsICooKHU4ICopIG9wdHZhbCkpOwogCQlicmVhazsKKwljYXNlIFJETUFfT1BUSU9OX0lEX1JFVVNFQUREUjoKKwkJaWYgKG9wdGxlbiAhPSBzaXplb2YoaW50KSkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCXJldCA9IHJkbWFfc2V0X3JldXNlYWRkcihjdHgtPmNtX2lkLCAqKChpbnQgKikgb3B0dmFsKSA/IDEgOiAwKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVOT1NZUzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5jCmluZGV4IGRjODVkNzcuLjBjZmM0NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5jCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfY20uYwppbmRleCAzMjE2YmNhLi4yMzkxODQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NtLmMKQEAgLTMzOCw4ICszMzgsOSBAQAogCQkJCSBfX2JlMTYgcGVlcl9wb3J0LCB1OCB0b3MpCiB7CiAJc3RydWN0IHJ0YWJsZSAqcnQ7CisJc3RydWN0IGZsb3dpNCBmbDQ7CiAKLQlydCA9IGlwX3JvdXRlX291dHB1dF9wb3J0cygmaW5pdF9uZXQsIE5VTEwsIHBlZXJfaXAsIGxvY2FsX2lwLAorCXJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKCZpbml0X25ldCwgJmZsNCwgTlVMTCwgcGVlcl9pcCwgbG9jYWxfaXAsCiAJCQkJICAgcGVlcl9wb3J0LCBsb2NhbF9wb3J0LCBJUFBST1RPX1RDUCwKIAkJCQkgICB0b3MsIDApOwogCWlmIChJU19FUlIocnQpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYwppbmRleCA5ZDhkY2ZhLi5mNjYwY2QwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYwpAQCAtMzE1LDggKzMxNSw5IEBACiAJCQkJIF9fYmUxNiBwZWVyX3BvcnQsIHU4IHRvcykKIHsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKKwlzdHJ1Y3QgZmxvd2k0IGZsNDsKIAotCXJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKCZpbml0X25ldCwgTlVMTCwgcGVlcl9pcCwgbG9jYWxfaXAsCisJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMoJmluaXRfbmV0LCAmZmw0LCBOVUxMLCBwZWVyX2lwLCBsb2NhbF9pcCwKIAkJCQkgICBwZWVyX3BvcnQsIGxvY2FsX3BvcnQsIElQUFJPVE9fVENQLAogCQkJCSAgIHRvcywgMCk7CiAJaWYgKElTX0VSUihydCkpCkBAIC0xMTk4LDkgKzExOTksNyBAQAogCX0KIAlQREJHKCIlcyBlcCAlcCBzdGF0dXMgJWQgZXJyb3IgJWRcbiIsIF9fZnVuY19fLCBlcCwKIAkgICAgIHJwbC0+c3RhdHVzLCBzdGF0dXMyZXJybm8ocnBsLT5zdGF0dXMpKTsKLQllcC0+Y29tLndyX3dhaXQucmV0ID0gc3RhdHVzMmVycm5vKHJwbC0+c3RhdHVzKTsKLQllcC0+Y29tLndyX3dhaXQuZG9uZSA9IDE7Ci0Jd2FrZV91cCgmZXAtPmNvbS53cl93YWl0LndhaXQpOworCWM0aXdfd2FrZV91cCgmZXAtPmNvbS53cl93YWl0LCBzdGF0dXMyZXJybm8ocnBsLT5zdGF0dXMpKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTIzNCw5ICsxMjMzLDcgQEAKIAlzdHJ1Y3QgYzRpd19saXN0ZW5fZXAgKmVwID0gbG9va3VwX3N0aWQodCwgc3RpZCk7CiAKIAlQREJHKCIlcyBlcCAlcFxuIiwgX19mdW5jX18sIGVwKTsKLQllcC0+Y29tLndyX3dhaXQucmV0ID0gc3RhdHVzMmVycm5vKHJwbC0+c3RhdHVzKTsKLQllcC0+Y29tLndyX3dhaXQuZG9uZSA9IDE7Ci0Jd2FrZV91cCgmZXAtPmNvbS53cl93YWl0LndhaXQpOworCWM0aXdfd2FrZV91cCgmZXAtPmNvbS53cl93YWl0LCBzdGF0dXMyZXJybm8ocnBsLT5zdGF0dXMpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQ2Niw3ICsxNDYzLDcgQEAKIAlzdHJ1Y3QgYzRpd19xcF9hdHRyaWJ1dGVzIGF0dHJzOwogCWludCBkaXNjb25uZWN0ID0gMTsKIAlpbnQgcmVsZWFzZSA9IDA7Ci0JaW50IGNsb3NpbmcgPSAwOworCWludCBhYm9ydCA9IDA7CiAJc3RydWN0IHRpZF9pbmZvICp0ID0gZGV2LT5yZGV2LmxsZGkudGlkczsKIAl1bnNpZ25lZCBpbnQgdGlkID0gR0VUX1RJRChoZHIpOwogCkBAIC0xNDkyLDIzICsxNDg5LDIyIEBACiAJCSAqIGluIHJkbWEgY29ubmVjdGlvbiBtaWdyYXRpb24gKHNlZSBjNGl3X2FjY2VwdF9jcigpKS4KIAkJICovCiAJCV9fc3RhdGVfc2V0KCZlcC0+Y29tLCBDTE9TSU5HKTsKLQkJZXAtPmNvbS53cl93YWl0LmRvbmUgPSAxOwotCQllcC0+Y29tLndyX3dhaXQucmV0ID0gLUVDT05OUkVTRVQ7CiAJCVBEQkcoIndha2luZyB1cCBlcCAlcCB0aWQgJXVcbiIsIGVwLCBlcC0+aHd0aWQpOwotCQl3YWtlX3VwKCZlcC0+Y29tLndyX3dhaXQud2FpdCk7CisJCWM0aXdfd2FrZV91cCgmZXAtPmNvbS53cl93YWl0LCAtRUNPTk5SRVNFVCk7CiAJCWJyZWFrOwogCWNhc2UgTVBBX1JFUF9TRU5UOgogCQlfX3N0YXRlX3NldCgmZXAtPmNvbSwgQ0xPU0lORyk7Ci0JCWVwLT5jb20ud3Jfd2FpdC5kb25lID0gMTsKLQkJZXAtPmNvbS53cl93YWl0LnJldCA9IC1FQ09OTlJFU0VUOwogCQlQREJHKCJ3YWtpbmcgdXAgZXAgJXAgdGlkICV1XG4iLCBlcCwgZXAtPmh3dGlkKTsKLQkJd2FrZV91cCgmZXAtPmNvbS53cl93YWl0LndhaXQpOworCQljNGl3X3dha2VfdXAoJmVwLT5jb20ud3Jfd2FpdCwgLUVDT05OUkVTRVQpOwogCQlicmVhazsKIAljYXNlIEZQRFVfTU9ERToKIAkJc3RhcnRfZXBfdGltZXIoZXApOwogCQlfX3N0YXRlX3NldCgmZXAtPmNvbSwgQ0xPU0lORyk7Ci0JCWNsb3NpbmcgPSAxOworCQlhdHRycy5uZXh0X3N0YXRlID0gQzRJV19RUF9TVEFURV9DTE9TSU5HOworCQlhYm9ydCA9IGM0aXdfbW9kaWZ5X3FwKGVwLT5jb20ucXAtPnJocCwgZXAtPmNvbS5xcCwKKwkJCQkgICAgICAgQzRJV19RUF9BVFRSX05FWFRfU1RBVEUsICZhdHRycywgMSk7CiAJCXBlZXJfY2xvc2VfdXBjYWxsKGVwKTsKKwkJZGlzY29ubmVjdCA9IDE7CiAJCWJyZWFrOwogCWNhc2UgQUJPUlRJTkc6CiAJCWRpc2Nvbm5lY3QgPSAwOwpAQCAtMTUzNiwxMSArMTUzMiw2IEBACiAJCUJVR19PTigxKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZlcC0+Y29tLm11dGV4KTsKLQlpZiAoY2xvc2luZykgewotCQlhdHRycy5uZXh0X3N0YXRlID0gQzRJV19RUF9TVEFURV9DTE9TSU5HOwotCQljNGl3X21vZGlmeV9xcChlcC0+Y29tLnFwLT5yaHAsIGVwLT5jb20ucXAsCi0JCQkgICAgICAgQzRJV19RUF9BVFRSX05FWFRfU1RBVEUsICZhdHRycywgMSk7Ci0JfQogCWlmIChkaXNjb25uZWN0KQogCQljNGl3X2VwX2Rpc2Nvbm5lY3QoZXAsIDAsIEdGUF9LRVJORUwpOwogCWlmIChyZWxlYXNlKQpAQCAtMTU4MSw5ICsxNTcyLDcgQEAKIAkvKgogCSAqIFdha2UgdXAgYW55IHRocmVhZHMgaW4gcmRtYV9pbml0KCkgb3IgcmRtYV9maW5pKCkuCiAJICovCi0JZXAtPmNvbS53cl93YWl0LmRvbmUgPSAxOwotCWVwLT5jb20ud3Jfd2FpdC5yZXQgPSAtRUNPTk5SRVNFVDsKLQl3YWtlX3VwKCZlcC0+Y29tLndyX3dhaXQud2FpdCk7CisJYzRpd193YWtlX3VwKCZlcC0+Y29tLndyX3dhaXQsIC1FQ09OTlJFU0VUKTsKIAogCW11dGV4X2xvY2soJmVwLT5jb20ubXV0ZXgpOwogCXN3aXRjaCAoZXAtPmNvbS5zdGF0ZSkgewpAQCAtMTcxMCwxNCArMTY5OSwxNCBAQAogCWVwID0gbG9va3VwX3RpZCh0LCB0aWQpOwogCUJVR19PTighZXApOwogCi0JaWYgKGVwLT5jb20ucXApIHsKKwlpZiAoZXAgJiYgZXAtPmNvbS5xcCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIE1PRCAiVEVSTSByZWNlaXZlZCB0aWQgJXUgcXBpZCAldVxuIiwgdGlkLAogCQkgICAgICAgZXAtPmNvbS5xcC0+d3Euc3EucWlkKTsKIAkJYXR0cnMubmV4dF9zdGF0ZSA9IEM0SVdfUVBfU1RBVEVfVEVSTUlOQVRFOwogCQljNGl3X21vZGlmeV9xcChlcC0+Y29tLnFwLT5yaHAsIGVwLT5jb20ucXAsCiAJCQkgICAgICAgQzRJV19RUF9BVFRSX05FWFRfU1RBVEUsICZhdHRycywgMSk7CiAJfSBlbHNlCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgTU9EICJURVJNIHJlY2VpdmVkIHRpZCAldSBubyBxcFxuIiwgdGlkKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBNT0QgIlRFUk0gcmVjZWl2ZWQgdGlkICV1IG5vIGVwL3FwXG4iLCB0aWQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMjk2LDE0ICsyMjg1LDggQEAKIAkJcmV0ID0gKGludCkoKGJlNjRfdG9fY3B1KHJwbC0+ZGF0YVswXSkgPj4gOCkgJiAweGZmKTsKIAkJd3Jfd2FpdHAgPSAoc3RydWN0IGM0aXdfd3Jfd2FpdCAqKShfX2ZvcmNlIHVuc2lnbmVkIGxvbmcpIHJwbC0+ZGF0YVsxXTsKIAkJUERCRygiJXMgd3Jfd2FpdHAgJXAgcmV0ICV1XG4iLCBfX2Z1bmNfXywgd3Jfd2FpdHAsIHJldCk7Ci0JCWlmICh3cl93YWl0cCkgewotCQkJaWYgKHJldCkKLQkJCQl3cl93YWl0cC0+cmV0ID0gLXJldDsKLQkJCWVsc2UKLQkJCQl3cl93YWl0cC0+cmV0ID0gMDsKLQkJCXdyX3dhaXRwLT5kb25lID0gMTsKLQkJCXdha2VfdXAoJndyX3dhaXRwLT53YWl0KTsKLQkJfQorCQlpZiAod3Jfd2FpdHApCisJCQljNGl3X3dha2VfdXAod3Jfd2FpdHAsIHJldCA/IC1yZXQgOiAwKTsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWJyZWFrOwogCWNhc2UgMjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9kZXZpY2UuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9kZXZpY2UuYwppbmRleCBlMjkxNzJjLi40MGExM2NjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvZGV2aWNlLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2RldmljZS5jCkBAIC00NCw3ICs0NCw3IEBACiBNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CiBNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CiAKLXN0YXRpYyBMSVNUX0hFQUQoZGV2X2xpc3QpOworc3RhdGljIExJU1RfSEVBRCh1bGRfY3R4X2xpc3QpOwogc3RhdGljIERFRklORV9NVVRFWChkZXZfbXV0ZXgpOwogCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqYzRpd19kZWJ1Z2ZzX3Jvb3Q7CkBAIC0zNzAsMTggKzM3MCwyMyBAQAogCWM0aXdfZGVzdHJveV9yZXNvdXJjZSgmcmRldi0+cmVzb3VyY2UpOwogfQogCi1zdGF0aWMgdm9pZCBjNGl3X3JlbW92ZShzdHJ1Y3QgYzRpd19kZXYgKmRldikKK3N0cnVjdCB1bGRfY3R4IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5OworCXN0cnVjdCBjeGdiNF9sbGRfaW5mbyBsbGRpOworCXN0cnVjdCBjNGl3X2RldiAqZGV2OworfTsKKworc3RhdGljIHZvaWQgYzRpd19yZW1vdmUoc3RydWN0IHVsZF9jdHggKmN0eCkKIHsKLQlQREJHKCIlcyBjNGl3X2RldiAlcFxuIiwgX19mdW5jX18sICBkZXYpOwotCWxpc3RfZGVsKCZkZXYtPmVudHJ5KTsKLQlpZiAoZGV2LT5yZWdpc3RlcmVkKQotCQljNGl3X3VucmVnaXN0ZXJfZGV2aWNlKGRldik7Ci0JYzRpd19yZGV2X2Nsb3NlKCZkZXYtPnJkZXYpOwotCWlkcl9kZXN0cm95KCZkZXYtPmNxaWRyKTsKLQlpZHJfZGVzdHJveSgmZGV2LT5xcGlkcik7Ci0JaWRyX2Rlc3Ryb3koJmRldi0+bW1pZHIpOwotCWlvdW5tYXAoZGV2LT5yZGV2Lm9jX213X2t2YSk7Ci0JaWJfZGVhbGxvY19kZXZpY2UoJmRldi0+aWJkZXYpOworCVBEQkcoIiVzIGM0aXdfZGV2ICVwXG4iLCBfX2Z1bmNfXywgIGN0eC0+ZGV2KTsKKwljNGl3X3VucmVnaXN0ZXJfZGV2aWNlKGN0eC0+ZGV2KTsKKwljNGl3X3JkZXZfY2xvc2UoJmN0eC0+ZGV2LT5yZGV2KTsKKwlpZHJfZGVzdHJveSgmY3R4LT5kZXYtPmNxaWRyKTsKKwlpZHJfZGVzdHJveSgmY3R4LT5kZXYtPnFwaWRyKTsKKwlpZHJfZGVzdHJveSgmY3R4LT5kZXYtPm1taWRyKTsKKwlpb3VubWFwKGN0eC0+ZGV2LT5yZGV2Lm9jX213X2t2YSk7CisJaWJfZGVhbGxvY19kZXZpY2UoJmN0eC0+ZGV2LT5pYmRldik7CisJY3R4LT5kZXYgPSBOVUxMOwogfQogCiBzdGF0aWMgc3RydWN0IGM0aXdfZGV2ICpjNGl3X2FsbG9jKGNvbnN0IHN0cnVjdCBjeGdiNF9sbGRfaW5mbyAqaW5mb3ApCkBAIC0zOTIsNyArMzk3LDcgQEAKIAlkZXZwID0gKHN0cnVjdCBjNGl3X2RldiAqKWliX2FsbG9jX2RldmljZShzaXplb2YoKmRldnApKTsKIAlpZiAoIWRldnApIHsKIAkJcHJpbnRrKEtFUk5fRVJSIE1PRCAiQ2Fubm90IGFsbG9jYXRlIGliIGRldmljZVxuIik7Ci0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAl9CiAJZGV2cC0+cmRldi5sbGRpID0gKmluZm9wOwogCkBAIC00MDIsMjcgKzQwNywyMyBAQAogCWRldnAtPnJkZXYub2NfbXdfa3ZhID0gaW9yZW1hcF93YyhkZXZwLT5yZGV2Lm9jX213X3BhLAogCQkJCQkgICAgICAgZGV2cC0+cmRldi5sbGRpLnZyLT5vY3Euc2l6ZSk7CiAKLQlwcmludGsoS0VSTl9JTkZPIE1PRCAib2NxIG1lbW9yeTogIgorCVBEQkcoS0VSTl9JTkZPIE1PRCAib2NxIG1lbW9yeTogIgogCSAgICAgICAiaHdfc3RhcnQgMHgleCBzaXplICV1IG13X3BhIDB4JWx4IG13X2t2YSAlcFxuIiwKIAkgICAgICAgZGV2cC0+cmRldi5sbGRpLnZyLT5vY3Euc3RhcnQsIGRldnAtPnJkZXYubGxkaS52ci0+b2NxLnNpemUsCiAJICAgICAgIGRldnAtPnJkZXYub2NfbXdfcGEsIGRldnAtPnJkZXYub2NfbXdfa3ZhKTsKIAotCW11dGV4X2xvY2soJmRldl9tdXRleCk7Ci0KIAlyZXQgPSBjNGl3X3JkZXZfb3BlbigmZGV2cC0+cmRldik7CiAJaWYgKHJldCkgewogCQltdXRleF91bmxvY2soJmRldl9tdXRleCk7CiAJCXByaW50ayhLRVJOX0VSUiBNT0QgIlVuYWJsZSB0byBvcGVuIENYSU8gcmRldiBlcnIgJWRcbiIsIHJldCk7CiAJCWliX2RlYWxsb2NfZGV2aWNlKCZkZXZwLT5pYmRldik7Ci0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOwogCX0KIAogCWlkcl9pbml0KCZkZXZwLT5jcWlkcik7CiAJaWRyX2luaXQoJmRldnAtPnFwaWRyKTsKIAlpZHJfaW5pdCgmZGV2cC0+bW1pZHIpOwogCXNwaW5fbG9ja19pbml0KCZkZXZwLT5sb2NrKTsKLQlsaXN0X2FkZF90YWlsKCZkZXZwLT5lbnRyeSwgJmRldl9saXN0KTsKLQltdXRleF91bmxvY2soJmRldl9tdXRleCk7CiAKIAlpZiAoYzRpd19kZWJ1Z2ZzX3Jvb3QpIHsKIAkJZGV2cC0+ZGVidWdmc19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKApAQCAtNDM1LDcgKzQzNiw3IEBACiAKIHN0YXRpYyB2b2lkICpjNGl3X3VsZF9hZGQoY29uc3Qgc3RydWN0IGN4Z2I0X2xsZF9pbmZvICppbmZvcCkKIHsKLQlzdHJ1Y3QgYzRpd19kZXYgKmRldjsKKwlzdHJ1Y3QgdWxkX2N0eCAqY3R4OwogCXN0YXRpYyBpbnQgdmVyc19wcmludGVkOwogCWludCBpOwogCkBAIC00NDMsMjUgKzQ0NCwzMyBAQAogCQlwcmludGsoS0VSTl9JTkZPIE1PRCAiQ2hlbHNpbyBUNCBSRE1BIERyaXZlciAtIHZlcnNpb24gJXNcbiIsCiAJCSAgICAgICBEUlZfVkVSU0lPTik7CiAKLQlkZXYgPSBjNGl3X2FsbG9jKGluZm9wKTsKLQlpZiAoIWRldikKKwljdHggPSBremFsbG9jKHNpemVvZiAqY3R4LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWN0eCkgeworCQljdHggPSBFUlJfUFRSKC1FTk9NRU0pOwogCQlnb3RvIG91dDsKKwl9CisJY3R4LT5sbGRpID0gKmluZm9wOwogCiAJUERCRygiJXMgZm91bmQgZGV2aWNlICVzIG5jaGFuICV1IG5yeHEgJXUgbnR4cSAldSBucG9ydHMgJXVcbiIsCi0JICAgICBfX2Z1bmNfXywgcGNpX25hbWUoZGV2LT5yZGV2LmxsZGkucGRldiksCi0JICAgICBkZXYtPnJkZXYubGxkaS5uY2hhbiwgZGV2LT5yZGV2LmxsZGkubnJ4cSwKLQkgICAgIGRldi0+cmRldi5sbGRpLm50eHEsIGRldi0+cmRldi5sbGRpLm5wb3J0cyk7CisJICAgICBfX2Z1bmNfXywgcGNpX25hbWUoY3R4LT5sbGRpLnBkZXYpLAorCSAgICAgY3R4LT5sbGRpLm5jaGFuLCBjdHgtPmxsZGkubnJ4cSwKKwkgICAgIGN0eC0+bGxkaS5udHhxLCBjdHgtPmxsZGkubnBvcnRzKTsKIAotCWZvciAoaSA9IDA7IGkgPCBkZXYtPnJkZXYubGxkaS5ucnhxOyBpKyspCi0JCVBEQkcoInJ4cWlkWyV1XSAldVxuIiwgaSwgZGV2LT5yZGV2LmxsZGkucnhxX2lkc1tpXSk7CisJbXV0ZXhfbG9jaygmZGV2X211dGV4KTsKKwlsaXN0X2FkZF90YWlsKCZjdHgtPmVudHJ5LCAmdWxkX2N0eF9saXN0KTsKKwltdXRleF91bmxvY2soJmRldl9tdXRleCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3R4LT5sbGRpLm5yeHE7IGkrKykKKwkJUERCRygicnhxaWRbJXVdICV1XG4iLCBpLCBjdHgtPmxsZGkucnhxX2lkc1tpXSk7CiBvdXQ6Ci0JcmV0dXJuIGRldjsKKwlyZXR1cm4gY3R4OwogfQogCiBzdGF0aWMgaW50IGM0aXdfdWxkX3J4X2hhbmRsZXIodm9pZCAqaGFuZGxlLCBjb25zdCBfX2JlNjQgKnJzcCwKIAkJCWNvbnN0IHN0cnVjdCBwa3RfZ2wgKmdsKQogewotCXN0cnVjdCBjNGl3X2RldiAqZGV2ID0gaGFuZGxlOworCXN0cnVjdCB1bGRfY3R4ICpjdHggPSBoYW5kbGU7CisJc3RydWN0IGM0aXdfZGV2ICpkZXYgPSBjdHgtPmRldjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWNvbnN0IHN0cnVjdCBjcGxfYWN0X2VzdGFibGlzaCAqcnBsOwogCXVuc2lnbmVkIGludCBvcGNvZGU7CkBAIC01MDMsNDcgKzUxMiw0OSBAQAogCiBzdGF0aWMgaW50IGM0aXdfdWxkX3N0YXRlX2NoYW5nZSh2b2lkICpoYW5kbGUsIGVudW0gY3hnYjRfc3RhdGUgbmV3X3N0YXRlKQogewotCXN0cnVjdCBjNGl3X2RldiAqZGV2ID0gaGFuZGxlOworCXN0cnVjdCB1bGRfY3R4ICpjdHggPSBoYW5kbGU7CiAKIAlQREJHKCIlcyBuZXdfc3RhdGUgJXVcbiIsIF9fZnVuY19fLCBuZXdfc3RhdGUpOwogCXN3aXRjaCAobmV3X3N0YXRlKSB7CiAJY2FzZSBDWEdCNF9TVEFURV9VUDoKLQkJcHJpbnRrKEtFUk5fSU5GTyBNT0QgIiVzOiBVcFxuIiwgcGNpX25hbWUoZGV2LT5yZGV2LmxsZGkucGRldikpOwotCQlpZiAoIWRldi0+cmVnaXN0ZXJlZCkgewotCQkJaW50IHJldDsKLQkJCXJldCA9IGM0aXdfcmVnaXN0ZXJfZGV2aWNlKGRldik7Ci0JCQlpZiAocmV0KQorCQlwcmludGsoS0VSTl9JTkZPIE1PRCAiJXM6IFVwXG4iLCBwY2lfbmFtZShjdHgtPmxsZGkucGRldikpOworCQlpZiAoIWN0eC0+ZGV2KSB7CisJCQlpbnQgcmV0ID0gMDsKKworCQkJY3R4LT5kZXYgPSBjNGl3X2FsbG9jKCZjdHgtPmxsZGkpOworCQkJaWYgKCFJU19FUlIoY3R4LT5kZXYpKQorCQkJCXJldCA9IGM0aXdfcmVnaXN0ZXJfZGV2aWNlKGN0eC0+ZGV2KTsKKwkJCWlmIChJU19FUlIoY3R4LT5kZXYpIHx8IHJldCkKIAkJCQlwcmludGsoS0VSTl9FUlIgTU9ECiAJCQkJICAgICAgICIlczogUkRNQSByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwKLQkJCQkgICAgICAgcGNpX25hbWUoZGV2LT5yZGV2LmxsZGkucGRldiksIHJldCk7CisJCQkJICAgICAgIHBjaV9uYW1lKGN0eC0+bGxkaS5wZGV2KSwgcmV0KTsKIAkJfQogCQlicmVhazsKIAljYXNlIENYR0I0X1NUQVRFX0RPV046CiAJCXByaW50ayhLRVJOX0lORk8gTU9EICIlczogRG93blxuIiwKLQkJICAgICAgIHBjaV9uYW1lKGRldi0+cmRldi5sbGRpLnBkZXYpKTsKLQkJaWYgKGRldi0+cmVnaXN0ZXJlZCkKLQkJCWM0aXdfdW5yZWdpc3Rlcl9kZXZpY2UoZGV2KTsKKwkJICAgICAgIHBjaV9uYW1lKGN0eC0+bGxkaS5wZGV2KSk7CisJCWlmIChjdHgtPmRldikKKwkJCWM0aXdfcmVtb3ZlKGN0eCk7CiAJCWJyZWFrOwogCWNhc2UgQ1hHQjRfU1RBVEVfU1RBUlRfUkVDT1ZFUlk6CiAJCXByaW50ayhLRVJOX0lORk8gTU9EICIlczogRmF0YWwgRXJyb3JcbiIsCi0JCSAgICAgICBwY2lfbmFtZShkZXYtPnJkZXYubGxkaS5wZGV2KSk7Ci0JCWRldi0+cmRldi5mbGFncyB8PSBUNF9GQVRBTF9FUlJPUjsKLQkJaWYgKGRldi0+cmVnaXN0ZXJlZCkgeworCQkgICAgICAgcGNpX25hbWUoY3R4LT5sbGRpLnBkZXYpKTsKKwkJaWYgKGN0eC0+ZGV2KSB7CiAJCQlzdHJ1Y3QgaWJfZXZlbnQgZXZlbnQ7CiAKKwkJCWN0eC0+ZGV2LT5yZGV2LmZsYWdzIHw9IFQ0X0ZBVEFMX0VSUk9SOwogCQkJbWVtc2V0KCZldmVudCwgMCwgc2l6ZW9mIGV2ZW50KTsKIAkJCWV2ZW50LmV2ZW50ICA9IElCX0VWRU5UX0RFVklDRV9GQVRBTDsKLQkJCWV2ZW50LmRldmljZSA9ICZkZXYtPmliZGV2OworCQkJZXZlbnQuZGV2aWNlID0gJmN0eC0+ZGV2LT5pYmRldjsKIAkJCWliX2Rpc3BhdGNoX2V2ZW50KCZldmVudCk7Ci0JCQljNGl3X3VucmVnaXN0ZXJfZGV2aWNlKGRldik7CisJCQljNGl3X3JlbW92ZShjdHgpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1hHQjRfU1RBVEVfREVUQUNIOgogCQlwcmludGsoS0VSTl9JTkZPIE1PRCAiJXM6IERldGFjaFxuIiwKLQkJICAgICAgIHBjaV9uYW1lKGRldi0+cmRldi5sbGRpLnBkZXYpKTsKLQkJbXV0ZXhfbG9jaygmZGV2X211dGV4KTsKLQkJYzRpd19yZW1vdmUoZGV2KTsKLQkJbXV0ZXhfdW5sb2NrKCZkZXZfbXV0ZXgpOworCQkgICAgICAgcGNpX25hbWUoY3R4LT5sbGRpLnBkZXYpKTsKKwkJaWYgKGN0eC0+ZGV2KQorCQkJYzRpd19yZW1vdmUoY3R4KTsKIAkJYnJlYWs7CiAJfQogCXJldHVybiAwOwpAQCAtNTc2LDExICs1ODcsMTMgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGM0aXdfZXhpdF9tb2R1bGUodm9pZCkKIHsKLQlzdHJ1Y3QgYzRpd19kZXYgKmRldiwgKnRtcDsKKwlzdHJ1Y3QgdWxkX2N0eCAqY3R4LCAqdG1wOwogCiAJbXV0ZXhfbG9jaygmZGV2X211dGV4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGV2LCB0bXAsICZkZXZfbGlzdCwgZW50cnkpIHsKLQkJYzRpd19yZW1vdmUoZGV2KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3R4LCB0bXAsICZ1bGRfY3R4X2xpc3QsIGVudHJ5KSB7CisJCWlmIChjdHgtPmRldikKKwkJCWM0aXdfcmVtb3ZlKGN0eCk7CisJCWtmcmVlKGN0eCk7CiAJfQogCW11dGV4X3VubG9jaygmZGV2X211dGV4KTsKIAljeGdiNF91bnJlZ2lzdGVyX3VsZChDWEdCNF9VTERfUkRNQSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvaXdfY3hnYjQuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9pd19jeGdiNC5oCmluZGV4IDlmNjE2NmYuLjM1ZDJhNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9pd19jeGdiNC5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9pd19jeGdiNC5oCkBAIC0xMzEsNDIgKzEzMSw1OCBAQAogCiAjZGVmaW5lIEM0SVdfV1JfVE8gKDEwKkhaKQogCitlbnVtIHsKKwlSRVBMWV9SRUFEWSA9IDAsCit9OworCiBzdHJ1Y3QgYzRpd193cl93YWl0IHsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwotCWludCBkb25lOworCXVuc2lnbmVkIGxvbmcgc3RhdHVzOwogCWludCByZXQ7CiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgYzRpd19pbml0X3dyX3dhaXQoc3RydWN0IGM0aXdfd3Jfd2FpdCAqd3Jfd2FpdHApCiB7CiAJd3Jfd2FpdHAtPnJldCA9IDA7Ci0Jd3Jfd2FpdHAtPmRvbmUgPSAwOworCXdyX3dhaXRwLT5zdGF0dXMgPSAwOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJndyX3dhaXRwLT53YWl0KTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGM0aXdfd2FrZV91cChzdHJ1Y3QgYzRpd193cl93YWl0ICp3cl93YWl0cCwgaW50IHJldCkKK3sKKwl3cl93YWl0cC0+cmV0ID0gcmV0OworCXNldF9iaXQoUkVQTFlfUkVBRFksICZ3cl93YWl0cC0+c3RhdHVzKTsKKwl3YWtlX3VwKCZ3cl93YWl0cC0+d2FpdCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGM0aXdfd2FpdF9mb3JfcmVwbHkoc3RydWN0IGM0aXdfcmRldiAqcmRldiwKIAkJCQkgc3RydWN0IGM0aXdfd3Jfd2FpdCAqd3Jfd2FpdHAsCiAJCQkJIHUzMiBod3RpZCwgdTMyIHFwaWQsCiAJCQkJIGNvbnN0IGNoYXIgKmZ1bmMpCiB7CiAJdW5zaWduZWQgdG8gPSBDNElXX1dSX1RPOwotCWRvIHsKKwlpbnQgcmV0OwogCi0JCXdhaXRfZXZlbnRfdGltZW91dCh3cl93YWl0cC0+d2FpdCwgd3Jfd2FpdHAtPmRvbmUsIHRvKTsKLQkJaWYgKCF3cl93YWl0cC0+ZG9uZSkgeworCWRvIHsKKwkJcmV0ID0gd2FpdF9ldmVudF90aW1lb3V0KHdyX3dhaXRwLT53YWl0LAorCQkJdGVzdF9hbmRfY2xlYXJfYml0KFJFUExZX1JFQURZLCAmd3Jfd2FpdHAtPnN0YXR1cyksIHRvKTsKKwkJaWYgKCFyZXQpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBNT0QgIiVzIC0gRGV2aWNlICVzIG5vdCByZXNwb25kaW5nIC0gIgogCQkJICAgICAgICJ0aWQgJXUgcXBpZCAldVxuIiwgZnVuYywKIAkJCSAgICAgICBwY2lfbmFtZShyZGV2LT5sbGRpLnBkZXYpLCBod3RpZCwgcXBpZCk7CisJCQlpZiAoYzRpd19mYXRhbF9lcnJvcihyZGV2KSkgeworCQkJCXdyX3dhaXRwLT5yZXQgPSAtRUlPOworCQkJCWJyZWFrOworCQkJfQogCQkJdG8gPSB0byA8PCAyOwogCQl9Ci0JfSB3aGlsZSAoIXdyX3dhaXRwLT5kb25lKTsKKwl9IHdoaWxlICghcmV0KTsKIAlpZiAod3Jfd2FpdHAtPnJldCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBNT0QgIiVzOiBGVyByZXBseSAlZCB0aWQgJXUgcXBpZCAldVxuIiwKLQkJICAgICAgIHBjaV9uYW1lKHJkZXYtPmxsZGkucGRldiksIHdyX3dhaXRwLT5yZXQsIGh3dGlkLCBxcGlkKTsKKwkJUERCRygiJXM6IEZXIHJlcGx5ICVkIHRpZCAldSBxcGlkICV1XG4iLAorCQkgICAgIHBjaV9uYW1lKHJkZXYtPmxsZGkucGRldiksIHdyX3dhaXRwLT5yZXQsIGh3dGlkLCBxcGlkKTsKIAlyZXR1cm4gd3Jfd2FpdHAtPnJldDsKIH0KIAotCiBzdHJ1Y3QgYzRpd19kZXYgewogCXN0cnVjdCBpYl9kZXZpY2UgaWJkZXY7CiAJc3RydWN0IGM0aXdfcmRldiByZGV2OwpAQCAtMTc1LDkgKzE5MSw3IEBACiAJc3RydWN0IGlkciBxcGlkcjsKIAlzdHJ1Y3QgaWRyIG1taWRyOwogCXNwaW5sb2NrX3QgbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5OwogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdDsKLQl1OCByZWdpc3RlcmVkOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgYzRpd19kZXYgKnRvX2M0aXdfZGV2KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3Byb3ZpZGVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvcHJvdmlkZXIuYwppbmRleCBmNjZkZDhiLi41YjllNDIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvcHJvdmlkZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvcHJvdmlkZXIuYwpAQCAtNTE2LDcgKzUxNiw2IEBACiAJCWlmIChyZXQpCiAJCQlnb3RvIGJhaWwyOwogCX0KLQlkZXYtPnJlZ2lzdGVyZWQgPSAxOwogCXJldHVybiAwOwogYmFpbDI6CiAJaWJfdW5yZWdpc3Rlcl9kZXZpY2UoJmRldi0+aWJkZXYpOwpAQCAtNTM1LDYgKzUzNCw1IEBACiAJCQkJICAgYzRpd19jbGFzc19hdHRyaWJ1dGVzW2ldKTsKIAlpYl91bnJlZ2lzdGVyX2RldmljZSgmZGV2LT5pYmRldik7CiAJa2ZyZWUoZGV2LT5pYmRldi5pd2NtKTsKLQlkZXYtPnJlZ2lzdGVyZWQgPSAwOwogCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3FwLmMKaW5kZXggNzBhNWEzYy4uM2I3NzNiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3FwLmMKQEAgLTIxNCw3ICsyMTQsNyBAQAogCQlWX0ZXX1JJX1JFU19XUl9IT1NURkNNT0RFKDApIHwJLyogbm8gaG9zdCBjaWR4IHVwZGF0ZXMgKi8KIAkJVl9GV19SSV9SRVNfV1JfQ1BSSU8oMCkgfAkvKiBkb24ndCBrZWVwIGluIGNoaXAgY2FjaGUgKi8KIAkJVl9GV19SSV9SRVNfV1JfUENJRUNITigwKSB8CS8qIHNldCBieSB1UCBhdCByaV9pbml0IHRpbWUgKi8KLQkJdDRfc3Ffb25jaGlwKCZ3cS0+c3EpID8gRl9GV19SSV9SRVNfV1JfT05DSElQIDogMCB8CisJCSh0NF9zcV9vbmNoaXAoJndxLT5zcSkgPyBGX0ZXX1JJX1JFU19XUl9PTkNISVAgOiAwKSB8CiAJCVZfRldfUklfUkVTX1dSX0lRSUQoc2NxLT5jcWlkKSk7CiAJcmVzLT51LnNxcnEuZGNhZW5fdG9fZXFzaXplID0gY3B1X3RvX2JlMzIoCiAJCVZfRldfUklfUkVTX1dSX0RDQUVOKDApIHwKQEAgLTEyMTAsNyArMTIxMCw2IEBACiAJCQlpZiAocmV0KSB7CiAJCQkJaWYgKGludGVybmFsKQogCQkJCQljNGl3X2dldF9lcCgmcWhwLT5lcC0+Y29tKTsKLQkJCQlkaXNjb25uZWN0ID0gYWJvcnQgPSAxOwogCQkJCWdvdG8gZXJyOwogCQkJfQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvdDQuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC90NC5oCmluZGV4IDI0YWYxMmYuLmMwMjIxZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC90NC5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC90NC5oCkBAIC0yNjksMTEgKzI2OSw4IEBACiAKIHN0YXRpYyBpbmxpbmUgcGdwcm90X3QgdDRfcGdwcm90X3djKHBncHJvdF90IHByb3QpCiB7Ci0jaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChDT05GSUdfUFBDNjQpCiAJcmV0dXJuIHBncHJvdF93cml0ZWNvbWJpbmUocHJvdCk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19QUEM2NCkKLQlyZXR1cm4gX19wZ3Byb3QoKHBncHJvdF92YWwocHJvdCkgfCBfUEFHRV9OT19DQUNIRSkgJgotCQkJfihwZ3Byb3RfdClfUEFHRV9HVUFSREVEKTsKICNlbHNlCiAJcmV0dXJuIHBncHJvdF9ub25jYWNoZWQocHJvdCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYwppbmRleCA1OGMwZTQxLi5iZTI0YWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jCkBAIC0zOTgsNyArMzk4LDYgQEAKIAlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQ7CiAJdW5zaWduZWQgbG9uZyBsb25nIGFkZHI7CiAJdTMyIGJhcjAgPSAwLCBiYXIxID0gMDsKLQl1OCByZXY7CiAKIAlkZCA9IGlwYXRoX2FsbG9jX2RldmRhdGEocGRldik7CiAJaWYgKElTX0VSUihkZCkpIHsKQEAgLTU0MCwxMyArNTM5LDcgQEAKIAkJZ290byBiYWlsX3JlZ2lvbnM7CiAJfQogCi0JcmV0ID0gcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX1JFVklTSU9OX0lELCAmcmV2KTsKLQlpZiAocmV0KSB7Ci0JCWlwYXRoX2Rldl9lcnIoZGQsICJGYWlsZWQgdG8gcmVhZCBQQ0kgcmV2aXNpb24gSUQgdW5pdCAiCi0JCQkgICAgICAiJXU6IGVyciAlZFxuIiwgZGQtPmlwYXRoX3VuaXQsIC1yZXQpOwotCQlnb3RvIGJhaWxfcmVnaW9uczsJLyogc2hvdWxkbid0IGV2ZXIgaGFwcGVuICovCi0JfQotCWRkLT5pcGF0aF9wY2lyZXYgPSByZXY7CisJZGQtPmlwYXRoX3BjaXJldiA9IHBkZXYtPnJldmlzaW9uOwogCiAjaWYgZGVmaW5lZChfX3Bvd2VycGNfXykKIAkvKiBUaGVyZSBpc24ndCBhIGdlbmVyaWMgd2F5IHRvIHNwZWNpZnkgd3JpdGV0aHJvdWdoIG1hcHBpbmdzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uYwppbmRleCAzM2M3ZWVkLi5lNzRjZGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmMKQEAgLTI1NjMsNyArMjU2Myw3IEBACiAJdTE2IGxhc3RfYWU7CiAJdTggb3JpZ2luYWxfaHdfdGNwX3N0YXRlOwogCXU4IG9yaWdpbmFsX2licXBfc3RhdGU7Ci0JZW51bSBpd19jbV9ldmVudF9zdGF0dXMgZGlzY29ubl9zdGF0dXMgPSBJV19DTV9FVkVOVF9TVEFUVVNfT0s7CisJaW50IGRpc2Nvbm5fc3RhdHVzID0gMDsKIAlpbnQgaXNzdWVfZGlzY29ubiA9IDA7CiAJaW50IGlzc3VlX2Nsb3NlID0gMDsKIAlpbnQgaXNzdWVfZmx1c2ggPSAwOwpAQCAtMjYwNSw3ICsyNjA1LDcgQEAKIAkJCShsYXN0X2FlID09IE5FU19BRVFFX0FFSURfTExQX0NPTk5FQ1RJT05fUkVTRVQpKSkgewogCQlpc3N1ZV9kaXNjb25uID0gMTsKIAkJaWYgKGxhc3RfYWUgPT0gTkVTX0FFUUVfQUVJRF9MTFBfQ09OTkVDVElPTl9SRVNFVCkKLQkJCWRpc2Nvbm5fc3RhdHVzID0gSVdfQ01fRVZFTlRfU1RBVFVTX1JFU0VUOworCQkJZGlzY29ubl9zdGF0dXMgPSAtRUNPTk5SRVNFVDsKIAl9CiAKIAlpZiAoKChvcmlnaW5hbF9od190Y3Bfc3RhdGUgPT0gTkVTX0FFUUVfVENQX1NUQVRFX0NMT1NFRCkgfHwKQEAgLTI2NjYsNyArMjY2Niw3IEBACiAJCQljbV9pZC0+cHJvdmlkZXJfZGF0YSA9IG5lc3FwOwogCQkJLyogU2VuZCB1cCB0aGUgY2xvc2UgY29tcGxldGUgZXZlbnQgKi8KIAkJCWNtX2V2ZW50LmV2ZW50ID0gSVdfQ01fRVZFTlRfQ0xPU0U7Ci0JCQljbV9ldmVudC5zdGF0dXMgPSBJV19DTV9FVkVOVF9TVEFUVVNfT0s7CisJCQljbV9ldmVudC5zdGF0dXMgPSAwOwogCQkJY21fZXZlbnQucHJvdmlkZXJfZGF0YSA9IGNtX2lkLT5wcm92aWRlcl9kYXRhOwogCQkJY21fZXZlbnQubG9jYWxfYWRkciA9IGNtX2lkLT5sb2NhbF9hZGRyOwogCQkJY21fZXZlbnQucmVtb3RlX2FkZHIgPSBjbV9pZC0+cmVtb3RlX2FkZHI7CkBAIC0yOTY2LDcgKzI5NjYsNyBAQAogCW5lc19hZGRfcmVmKCZuZXNxcC0+aWJxcCk7CiAKIAljbV9ldmVudC5ldmVudCA9IElXX0NNX0VWRU5UX0VTVEFCTElTSEVEOwotCWNtX2V2ZW50LnN0YXR1cyA9IElXX0NNX0VWRU5UX1NUQVRVU19BQ0NFUFRFRDsKKwljbV9ldmVudC5zdGF0dXMgPSAwOwogCWNtX2V2ZW50LnByb3ZpZGVyX2RhdGEgPSAodm9pZCAqKW5lc3FwOwogCWNtX2V2ZW50LmxvY2FsX2FkZHIgPSBjbV9pZC0+bG9jYWxfYWRkcjsKIAljbV9ldmVudC5yZW1vdGVfYWRkciA9IGNtX2lkLT5yZW1vdGVfYWRkcjsKQEAgLTMzNzcsNyArMzM3Nyw3IEBACiAKIAkvKiBub3RpZnkgT0YgbGF5ZXIgd2Ugc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgdGhlIHJlcXVlc3RlZCBjb25uZWN0aW9uICovCiAJY21fZXZlbnQuZXZlbnQgPSBJV19DTV9FVkVOVF9DT05ORUNUX1JFUExZOwotCWNtX2V2ZW50LnN0YXR1cyA9IElXX0NNX0VWRU5UX1NUQVRVU19BQ0NFUFRFRDsKKwljbV9ldmVudC5zdGF0dXMgPSAwOwogCWNtX2V2ZW50LnByb3ZpZGVyX2RhdGEgPSBjbV9pZC0+cHJvdmlkZXJfZGF0YTsKIAljbV9ldmVudC5sb2NhbF9hZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwogCWNtX2V2ZW50LmxvY2FsX2FkZHIuc2luX3BvcnQgPSBjbV9pZC0+bG9jYWxfYWRkci5zaW5fcG9ydDsKQEAgLTM0ODQsNyArMzQ4NCw3IEBACiAJbmVzcXAtPmNtX2lkID0gTlVMTDsKIAkvKiBjbV9pZC0+cHJvdmlkZXJfZGF0YSA9IE5VTEw7ICovCiAJY21fZXZlbnQuZXZlbnQgPSBJV19DTV9FVkVOVF9ESVNDT05ORUNUOwotCWNtX2V2ZW50LnN0YXR1cyA9IElXX0NNX0VWRU5UX1NUQVRVU19SRVNFVDsKKwljbV9ldmVudC5zdGF0dXMgPSAtRUNPTk5SRVNFVDsKIAljbV9ldmVudC5wcm92aWRlcl9kYXRhID0gY21faWQtPnByb3ZpZGVyX2RhdGE7CiAJY21fZXZlbnQubG9jYWxfYWRkciA9IGNtX2lkLT5sb2NhbF9hZGRyOwogCWNtX2V2ZW50LnJlbW90ZV9hZGRyID0gY21faWQtPnJlbW90ZV9hZGRyOwpAQCAtMzQ5NSw3ICszNDk1LDcgQEAKIAlyZXQgPSBjbV9pZC0+ZXZlbnRfaGFuZGxlcihjbV9pZCwgJmNtX2V2ZW50KTsKIAlhdG9taWNfaW5jKCZjbV9jbG9zZXMpOwogCWNtX2V2ZW50LmV2ZW50ID0gSVdfQ01fRVZFTlRfQ0xPU0U7Ci0JY21fZXZlbnQuc3RhdHVzID0gSVdfQ01fRVZFTlRfU1RBVFVTX09LOworCWNtX2V2ZW50LnN0YXR1cyA9IDA7CiAJY21fZXZlbnQucHJvdmlkZXJfZGF0YSA9IGNtX2lkLT5wcm92aWRlcl9kYXRhOwogCWNtX2V2ZW50LmxvY2FsX2FkZHIgPSBjbV9pZC0+bG9jYWxfYWRkcjsKIAljbV9ldmVudC5yZW1vdGVfYWRkciA9IGNtX2lkLT5yZW1vdGVfYWRkcjsKQEAgLTM1MzQsNyArMzUzNCw3IEBACiAJCQljbV9ub2RlLCBjbV9pZCwgamlmZmllcyk7CiAKIAljbV9ldmVudC5ldmVudCA9IElXX0NNX0VWRU5UX0NPTk5FQ1RfUkVRVUVTVDsKLQljbV9ldmVudC5zdGF0dXMgPSBJV19DTV9FVkVOVF9TVEFUVVNfT0s7CisJY21fZXZlbnQuc3RhdHVzID0gMDsKIAljbV9ldmVudC5wcm92aWRlcl9kYXRhID0gKHZvaWQgKiljbV9ub2RlOwogCiAJY21fZXZlbnQubG9jYWxfYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5jCmluZGV4IDEwZDBhNWUuLjk2ZmE5YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYwpAQCAtMjg4NSw5ICsyODg1LDggQEAKIAkJCQkJaWYgKChjcWVfZXJydiAmCiAJCQkJCQkJKE5FU19OSUNfRVJSVl9CSVRTX0lQVjRfQ1NVTV9FUlIgfCBORVNfTklDX0VSUlZfQklUU19UQ1BVRFBfQ1NVTV9FUlIgfAogCQkJCQkJCU5FU19OSUNfRVJSVl9CSVRTX0lQSF9FUlIgfCBORVNfTklDX0VSUlZfQklUU19XUUVfT1ZFUlJVTikpID09IDApIHsKLQkJCQkJCWlmIChuZXN2bmljLT5yeF9jaGVja3N1bV9kaXNhYmxlZCA9PSAwKSB7CisJCQkJCQlpZiAobmVzdm5pYy0+bmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKQogCQkJCQkJCXJ4X3NrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci0JCQkJCQl9CiAJCQkJCX0gZWxzZQogCQkJCQkJbmVzX2RlYnVnKE5FU19EQkdfQ1EsICIlczogdW5zdWNjZXNzZnVsbHkgY2hlY2tzdW1tZWQgVENQIG9yIFVEUCBwYWNrZXQuIgogCQkJCQkJCQkiIGVycnYgPSAweCVYLCBwa3RfdHlwZSA9IDB4JVguXG4iLApAQCAtMjg5Nyw3ICsyODk2LDcgQEAKIAkJCQkJaWYgKChjcWVfZXJydiAmCiAJCQkJCQkJKE5FU19OSUNfRVJSVl9CSVRTX0lQVjRfQ1NVTV9FUlIgfCBORVNfTklDX0VSUlZfQklUU19JUEhfRVJSIHwKIAkJCQkJCQlORVNfTklDX0VSUlZfQklUU19XUUVfT1ZFUlJVTikpID09IDApIHsKLQkJCQkJCWlmIChuZXN2bmljLT5yeF9jaGVja3N1bV9kaXNhYmxlZCA9PSAwKSB7CisJCQkJCQlpZiAobmVzdm5pYy0+bmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSB7CiAJCQkJCQkJcnhfc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAkJCQkJCQkvKiBuZXNfZGVidWcoTkVTX0RCR19DUSwgIiVzOiBSZXBvcnRpbmcgc3VjY2Vzc2Z1bGx5IGNoZWNrc3VtbWVkIElQdjQgcGFja2V0LlxuIiwKIAkJCQkJCQkJICBuZXN2bmljLT5uZXRkZXYtPm5hbWUpOyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmgKaW5kZXggZDJhYmUwNy4uOTE1OTQxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5oCkBAIC0xMjQ1LDcgKzEyNDUsNiBAQAogCXU4ICBuZXh0X3FwX25pY19pbmRleDsKIAl1OCAgb2ZfZGV2aWNlX3JlZ2lzdGVyZWQ7CiAJdTggIHJkbWFfZW5hYmxlZDsKLQl1OCAgcnhfY2hlY2tzdW1fZGlzYWJsZWQ7CiAJdTMyIGxyb19tYXhfYWdncjsKIAlzdHJ1Y3QgbmV0X2xyb19tZ3IgbHJvX21ncjsKIAlzdHJ1Y3QgbmV0X2xyb19kZXNjIGxyb19kZXNjW05FU19NQVhfTFJPX0RFU0NSSVBUT1JTXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX25pYy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKaW5kZXggZTk2YjhmYi4uZDNhMWM0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKQEAgLTEwOTMsMzQgKzEwOTMsNiBAQAogfTsKICNkZWZpbmUgTkVTX0VUSFRPT0xfU1RBVF9DT1VOVCAgQVJSQVlfU0laRShuZXNfZXRodG9vbF9zdHJpbmdzZXQpCiAKLS8qKgotICogbmVzX25ldGRldl9nZXRfcnhfY3N1bQotICovCi1zdGF0aWMgdTMyIG5lc19uZXRkZXZfZ2V0X3J4X2NzdW0gKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0Jc3RydWN0IG5lc192bmljICpuZXN2bmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCWlmIChuZXN2bmljLT5yeF9jaGVja3N1bV9kaXNhYmxlZCkKLQkJcmV0dXJuIDA7Ci0JZWxzZQotCQlyZXR1cm4gMTsKLX0KLQotCi0vKioKLSAqIG5lc19uZXRkZXZfc2V0X3JjX2NzdW0KLSAqLwotc3RhdGljIGludCBuZXNfbmV0ZGV2X3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBlbmFibGUpCi17Ci0Jc3RydWN0IG5lc192bmljICpuZXN2bmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCWlmIChlbmFibGUpCi0JCW5lc3ZuaWMtPnJ4X2NoZWNrc3VtX2Rpc2FibGVkID0gMDsKLQllbHNlCi0JCW5lc3ZuaWMtPnJ4X2NoZWNrc3VtX2Rpc2FibGVkID0gMTsKLQlyZXR1cm4gMDsKLX0KLQogCiAvKioKICAqIG5lc19uZXRkZXZfZ2V0X3NzZXRfY291bnQKQEAgLTE1MjEsNyArMTQ5Myw3IEBACiAJZXRfY21kLT5tYXhyeHBrdCA9IDUxMTsKIAogCWlmIChuZXNhZGFwdGVyLT5PbmVHX01vZGUpIHsKLQkJZXRfY21kLT5zcGVlZCA9IFNQRUVEXzEwMDA7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChldF9jbWQsIFNQRUVEXzEwMDApOwogCQlpZiAocGh5X3R5cGUgPT0gTkVTX1BIWV9UWVBFX1BVTUFfMUcpIHsKIAkJCWV0X2NtZC0+c3VwcG9ydGVkICAgPSBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGw7CiAJCQlldF9jbWQtPmFkdmVydGlzaW5nID0gQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbDsKQEAgLTE1NjAsNyArMTUzMiw3IEBACiAJCWV0X2NtZC0+YWR2ZXJ0aXNpbmcgPSBBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbDsKIAkJZXRfY21kLT5waHlfYWRkcmVzcyA9IG1hY19pbmRleDsKIAl9Ci0JZXRfY21kLT5zcGVlZCA9IFNQRUVEXzEwMDAwOworCWV0aHRvb2xfY21kX3NwZWVkX3NldChldF9jbWQsIFNQRUVEXzEwMDAwKTsKIAlldF9jbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNTk4LDE5ICsxNTcwLDEwIEBACiB9CiAKIAotc3RhdGljIGludCBuZXNfbmV0ZGV2X3NldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZmxhZ3MpCi17Ci0JcmV0dXJuIGV0aHRvb2xfb3Bfc2V0X2ZsYWdzKG5ldGRldiwgZmxhZ3MsIEVUSF9GTEFHX0xSTyk7Ci19Ci0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXNfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKIAkuZ2V0X3NldHRpbmdzID0gbmVzX25ldGRldl9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncyA9IG5lc19uZXRkZXZfc2V0X3NldHRpbmdzLAotCS5nZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCi0JLmdldF9yeF9jc3VtID0gbmVzX25ldGRldl9nZXRfcnhfY3N1bSwKLQkuZ2V0X3NnID0gZXRodG9vbF9vcF9nZXRfc2csCiAJLmdldF9zdHJpbmdzID0gbmVzX25ldGRldl9nZXRfc3RyaW5ncywKIAkuZ2V0X3NzZXRfY291bnQgPSBuZXNfbmV0ZGV2X2dldF9zc2V0X2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IG5lc19uZXRkZXZfZ2V0X2V0aHRvb2xfc3RhdHMsCkBAIC0xNjE5LDEzICsxNTgyLDYgQEAKIAkuc2V0X2NvYWxlc2NlID0gbmVzX25ldGRldl9zZXRfY29hbGVzY2UsCiAJLmdldF9wYXVzZXBhcmFtID0gbmVzX25ldGRldl9nZXRfcGF1c2VwYXJhbSwKIAkuc2V0X3BhdXNlcGFyYW0gPSBuZXNfbmV0ZGV2X3NldF9wYXVzZXBhcmFtLAotCS5zZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0sCi0JLnNldF9yeF9jc3VtID0gbmVzX25ldGRldl9zZXRfcnhfY3N1bSwKLQkuc2V0X3NnID0gZXRodG9vbF9vcF9zZXRfc2csCi0JLmdldF90c28gPSBldGh0b29sX29wX2dldF90c28sCi0JLnNldF90c28gPSBldGh0b29sX29wX3NldF90c28sCi0JLmdldF9mbGFncyA9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLAotCS5zZXRfZmxhZ3MgPSBuZXNfbmV0ZGV2X3NldF9mbGFncywKIH07CiAKIApAQCAtMTcyNywxMiArMTY4MywxMSBAQAogCW5ldGRldi0+ZGV2X2FkZHJbNV0gPSAodTgpdTY0dGVtcDsKIAltZW1jcHkobmV0ZGV2LT5wZXJtX2FkZHIsIG5ldGRldi0+ZGV2X2FkZHIsIDYpOwogCi0JaWYgKChuZXN2bmljLT5sb2dpY2FsX3BvcnQgPCAyKSB8fCAobmVzZGV2LT5uZXNhZGFwdGVyLT5od19yZXYgIT0gTkUwMjBfUkVWKSkgewotCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTTsKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0dTTyB8IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTTsKLQl9IGVsc2UgewotCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU07Ci0JfQorCW5ldGRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX1JYQ1NVTSB8IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU07CisJaWYgKChuZXN2bmljLT5sb2dpY2FsX3BvcnQgPCAyKSB8fCAobmVzZGV2LT5uZXNhZGFwdGVyLT5od19yZXYgIT0gTkUwMjBfUkVWKSkKKwkJbmV0ZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKKwluZXRkZXYtPmZlYXR1cmVzIHw9IG5ldGRldi0+aHdfZmVhdHVyZXM7CisJbmV0ZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX0xSTzsKIAogCW5lc19kZWJ1ZyhORVNfREJHX0lOSVQsICJuZXN2bmljID0gJXAsIHJlcG9ydGVkIGZlYXR1cmVzID0gMHglbFgsIFFQaWQgPSAlZCwiCiAJCQkiIG5pY19pbmRleCA9ICVkLCBsb2dpY2FsX3BvcnQgPSAlZCwgbWFjX2luZGV4ID0gJWQuXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmMKaW5kZXggMjZkODAxOC4uOTVjYTkzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5jCkBAIC0xNDg0LDcgKzE0ODQsNyBAQAogCQkJKG5lc3FwLT5pYnFwX3N0YXRlID09IElCX1FQU19SVFIpKSAmJiAobmVzcXAtPmNtX2lkKSkgewogCQljbV9pZCA9IG5lc3FwLT5jbV9pZDsKIAkJY21fZXZlbnQuZXZlbnQgPSBJV19DTV9FVkVOVF9DT05ORUNUX1JFUExZOwotCQljbV9ldmVudC5zdGF0dXMgPSBJV19DTV9FVkVOVF9TVEFUVVNfVElNRU9VVDsKKwkJY21fZXZlbnQuc3RhdHVzID0gLUVUSU1FRE9VVDsKIAkJY21fZXZlbnQubG9jYWxfYWRkciA9IGNtX2lkLT5sb2NhbF9hZGRyOwogCQljbV9ldmVudC5yZW1vdGVfYWRkciA9IGNtX2lkLT5yZW1vdGVfYWRkcjsKIAkJY21fZXZlbnQucHJpdmF0ZV9kYXRhID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTYxMjAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTYxMjAuYwppbmRleCA3ZGU0YjdlLi5kOGNhMGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE2MTIwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNjEyMC5jCkBAIC0xNzk5LDcgKzE3OTksNyBAQAogCS8qCiAJICogS2VlcCBjaGlwIGZyb20gYmVpbmcgYWNjZXNzZWQgdW50aWwgd2UgYXJlIHJlYWR5LiAgVXNlCiAJICogd3JpdGVxKCkgZGlyZWN0bHksIHRvIGFsbG93IHRoZSB3cml0ZSBldmVuIHRob3VnaCBRSUJfUFJFU0VOVAotCSAqIGlzbid0JyBzZXQuCisJICogaXNuJ3Qgc2V0LgogCSAqLwogCWRkLT5mbGFncyAmPSB+KFFJQl9JTklUVEVEIHwgUUlCX1BSRVNFTlQpOwogCWRkLT5pbnRfY291bnRlciA9IDA7IC8qIHNvIHdlIGNoZWNrIGludGVycnVwdHMgd29yayBhZ2FpbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNzIyMC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNzIyMC5jCmluZGV4IDc0ZmUwMzYuLmM3NjVhMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTcyMjAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE3MjIwLmMKQEAgLTIxMTEsNyArMjExMSw3IEBACiAJLyoKIAkgKiBLZWVwIGNoaXAgZnJvbSBiZWluZyBhY2Nlc3NlZCB1bnRpbCB3ZSBhcmUgcmVhZHkuICBVc2UKIAkgKiB3cml0ZXEoKSBkaXJlY3RseSwgdG8gYWxsb3cgdGhlIHdyaXRlIGV2ZW4gdGhvdWdoIFFJQl9QUkVTRU5UCi0JICogaXNuJ3QnIHNldC4KKwkgKiBpc24ndCBzZXQuCiAJICovCiAJZGQtPmZsYWdzICY9IH4oUUlCX0lOSVRURUQgfCBRSUJfUFJFU0VOVCk7CiAJZGQtPmludF9jb3VudGVyID0gMDsgLyogc28gd2UgY2hlY2sgaW50ZXJydXB0cyB3b3JrIGFnYWluICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE3MzIyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE3MzIyLmMKaW5kZXggNTVkZTNjZi4uOWY1M2U2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNzMyMi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTczMjIuYwpAQCAtMzI5OSw3ICszMjk5LDcgQEAKIAkvKgogCSAqIEtlZXAgY2hpcCBmcm9tIGJlaW5nIGFjY2Vzc2VkIHVudGlsIHdlIGFyZSByZWFkeS4gIFVzZQogCSAqIHdyaXRlcSgpIGRpcmVjdGx5LCB0byBhbGxvdyB0aGUgd3JpdGUgZXZlbiB0aG91Z2ggUUlCX1BSRVNFTlQKLQkgKiBpc24ndCcgc2V0LgorCSAqIGlzbid0IHNldC4KIAkgKi8KIAlkZC0+ZmxhZ3MgJj0gfihRSUJfSU5JVFRFRCB8IFFJQl9QUkVTRU5UIHwgUUlCX0JBRElOVFIpOwogCWRkLT5mbGFncyB8PSBRSUJfRE9JTkdfUkVTRVQ7CkBAIC03NTM0LDcgKzc1MzQsOCBAQAogCWlic2Rfd3JfYWxsY2hhbnMocHBkLCA0LCAoMSA8PCAxMCksIEJNQVNLKDEwLCAxMCkpOwogCXRzdGFydCA9IGdldF9qaWZmaWVzXzY0KCk7CiAJd2hpbGUgKGNoYW5fZG9uZSAmJgotCSAgICAgICAhdGltZV9hZnRlcjY0KHRzdGFydCwgdHN0YXJ0ICsgbXNlY3NfdG9famlmZmllcyg1MDApKSkgeworCSAgICAgICAhdGltZV9hZnRlcjY0KGdldF9qaWZmaWVzXzY0KCksCisJCQl0c3RhcnQgKyBtc2Vjc190b19qaWZmaWVzKDUwMCkpKSB7CiAJCW1zbGVlcCgyMCk7CiAJCWZvciAoY2hhbiA9IDA7IGNoYW4gPCBTRVJERVNfQ0hBTlM7ICsrY2hhbikgewogCQkJcnhjYWxkb25lID0gYWhiX21vZChwcGQtPmRkLCBJQlNEKHBwZC0+aHdfcGlkeCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9wY2llLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9wY2llLmMKaW5kZXggNDhiNjY3NC4uODkxY2MyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfcGNpZS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3BjaWUuYwpAQCAtNTI2LDExICs1MjYsOCBAQAogCSAqLwogCWRldmlkID0gcGFyZW50LT5kZXZpY2U7CiAJaWYgKGRldmlkID49IDB4MjVlMiAmJiBkZXZpZCA8PSAweDI1ZmEpIHsKLQkJdTggcmV2OwotCiAJCS8qIDUwMDAgUC9WL1gvWiAqLwotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwYXJlbnQsIFBDSV9SRVZJU0lPTl9JRCwgJnJldik7Ci0JCWlmIChyZXYgPD0gMHhiMikKKwkJaWYgKHBhcmVudC0+cmV2aXNpb24gPD0gMHhiMikKIAkJCWJpdHMgPSAxVSA8PCAxMDsKIAkJZWxzZQogCQkJYml0cyA9IDdVIDw8IDEwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oCmluZGV4IGFiOTdmOTIuLjdiNjk4NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liLmgKQEAgLTkxLDcgKzkxLDYgQEAKIAlJUE9JQl9TVE9QX1JFQVBFUgkgID0gNywKIAlJUE9JQl9GTEFHX0FETUlOX0NNCSAgPSA5LAogCUlQT0lCX0ZMQUdfVU1DQVNUCSAgPSAxMCwKLQlJUE9JQl9GTEFHX0NTVU0JCSAgPSAxMSwKIAogCUlQT0lCX01BWF9CQUNLT0ZGX1NFQ09ORFMgPSAxNiwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9jbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9jbS5jCmluZGV4IDkzZDU1ODAuLjM5OTEzYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2NtLmMKQEAgLTE0NjMsOCArMTQ2Myw3IEBACiAJCXNldF9iaXQoSVBPSUJfRkxBR19BRE1JTl9DTSwgJnByaXYtPmZsYWdzKTsKIAkJaXBvaWJfd2Fybihwcml2LCAiZW5hYmxpbmcgY29ubmVjdGVkIG1vZGUgIgogCQkJICAgIndpbGwgY2F1c2UgbXVsdGljYXN0IHBhY2tldCBkcm9wc1xuIik7Ci0KLQkJZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfU0cgfCBORVRJRl9GX1RTTyk7CisJCW5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTsKIAkJcnRubF91bmxvY2soKTsKIAkJcHJpdi0+dHhfd3Iuc2VuZF9mbGFncyAmPSB+SUJfU0VORF9JUF9DU1VNOwogCkBAIC0xNDc0LDEzICsxNDczLDcgQEAKIAogCWlmICghc3RyY21wKGJ1ZiwgImRhdGFncmFtXG4iKSkgewogCQljbGVhcl9iaXQoSVBPSUJfRkxBR19BRE1JTl9DTSwgJnByaXYtPmZsYWdzKTsKLQotCQlpZiAodGVzdF9iaXQoSVBPSUJfRkxBR19DU1VNLCAmcHJpdi0+ZmxhZ3MpKSB7Ci0JCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfU0c7Ci0JCQlwcml2LT5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfR1JPOwotCQkJaWYgKHByaXYtPmhjYV9jYXBzICYgSUJfREVWSUNFX1VEX1RTTykKLQkJCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwotCQl9CisJCW5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTsKIAkJZGV2X3NldF9tdHUoZGV2LCBtaW4ocHJpdi0+bWNhc3RfbXR1LCBkZXYtPm10dSkpOwogCQlydG5sX3VubG9jaygpOwogCQlpcG9pYl9mbHVzaF9wYXRocyhkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9ldGh0b29sLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2V0aHRvb2wuYwppbmRleCAxOWY3ZjUyLi4yOWJjN2I1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2V0aHRvb2wuYwpAQCAtNDIsMzIgKzQyLDYgQEAKIAlzdHJuY3B5KGRydmluZm8tPmRyaXZlciwgImlwb2liIiwgc2l6ZW9mKGRydmluZm8tPmRyaXZlcikgLSAxKTsKIH0KIAotc3RhdGljIHUzMiBpcG9pYl9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuIHRlc3RfYml0KElQT0lCX0ZMQUdfQ1NVTSwgJnByaXYtPmZsYWdzKSAmJgotCQkhdGVzdF9iaXQoSVBPSUJfRkxBR19BRE1JTl9DTSwgJnByaXYtPmZsYWdzKTsKLX0KLQotc3RhdGljIGludCBpcG9pYl9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoZGF0YSkgewotCQlpZiAoIXRlc3RfYml0KElQT0lCX0ZMQUdfQURNSU5fQ00sICZwcml2LT5mbGFncykgJiYKLQkJICAgIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9TRykgJiYKLQkJICAgIChwcml2LT5oY2FfY2FwcyAmIElCX0RFVklDRV9VRF9UU08pKSB7Ci0JCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwotCQl9IGVsc2UgewotCQkJaXBvaWJfd2Fybihwcml2LCAiY2FuJ3Qgc2V0IFRTTyBvblxuIik7Ci0JCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JCX0KLQl9IGVsc2UKLQkJZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9UU087Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBpcG9pYl9nZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICAgIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICpjb2FsKQogewpAQCAtMTA4LDggKzgyLDYgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpcG9pYl9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JCT0gaXBvaWJfZ2V0X2RydmluZm8sCi0JLmdldF9yeF9jc3VtCQk9IGlwb2liX2dldF9yeF9jc3VtLAotCS5zZXRfdHNvCQk9IGlwb2liX3NldF90c28sCiAJLmdldF9jb2FsZXNjZQkJPSBpcG9pYl9nZXRfY29hbGVzY2UsCiAJLnNldF9jb2FsZXNjZQkJPSBpcG9pYl9zZXRfY29hbGVzY2UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jCmluZGV4IDgwNmQwMjkuLjgxYWU2MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMKQEAgLTI5Miw3ICsyOTIsNyBAQAogCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKIAlza2ItPmRldiA9IGRldjsKLQlpZiAodGVzdF9iaXQoSVBPSUJfRkxBR19DU1VNLCAmcHJpdi0+ZmxhZ3MpICYmIGxpa2VseSh3Yy0+Y3N1bV9vaykpCisJaWYgKChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pICYmIGxpa2VseSh3Yy0+Y3N1bV9vaykpCiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAKIAluYXBpX2dyb19yZWNlaXZlKCZwcml2LT5uYXBpLCBza2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYwppbmRleCBhY2EzYjQ0Li44NmFkZGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYwpAQCAtMTcxLDYgKzE3MSwxNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdTMyIGlwb2liX2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpCit7CisJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmICh0ZXN0X2JpdChJUE9JQl9GTEFHX0FETUlOX0NNLCAmcHJpdi0+ZmxhZ3MpKQorCQlmZWF0dXJlcyAmPSB+KE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1RTTyk7CisKKwlyZXR1cm4gZmVhdHVyZXM7Cit9CisKIHN0YXRpYyBpbnQgaXBvaWJfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtOTcwLDYgKzk4MCw3IEBACiAJLm5kb19vcGVuCQkgPSBpcG9pYl9vcGVuLAogCS5uZG9fc3RvcAkJID0gaXBvaWJfc3RvcCwKIAkubmRvX2NoYW5nZV9tdHUJCSA9IGlwb2liX2NoYW5nZV9tdHUsCisJLm5kb19maXhfZmVhdHVyZXMJID0gaXBvaWJfZml4X2ZlYXR1cmVzLAogCS5uZG9fc3RhcnRfeG1pdAkgCSA9IGlwb2liX3N0YXJ0X3htaXQsCiAJLm5kb190eF90aW1lb3V0CQkgPSBpcG9pYl90aW1lb3V0LAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CSA9IGlwb2liX3NldF9tY2FzdF9saXN0LApAQCAtMTE1NCwxOSArMTE2NSwxOCBAQAogCWtmcmVlKGRldmljZV9hdHRyKTsKIAogCWlmIChwcml2LT5oY2FfY2FwcyAmIElCX0RFVklDRV9VRF9JUF9DU1VNKSB7Ci0JCXNldF9iaXQoSVBPSUJfRkxBR19DU1VNLCAmcHJpdi0+ZmxhZ3MpOwotCQlwcml2LT5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU07CisJCXByaXYtPmRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwKKwkJCU5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNOworCisJCWlmIChwcml2LT5oY2FfY2FwcyAmIElCX0RFVklDRV9VRF9UU08pCisJCQlwcml2LT5kZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOworCisJCXByaXYtPmRldi0+ZmVhdHVyZXMgfD0gcHJpdi0+ZGV2LT5od19mZWF0dXJlczsKIAl9CiAKLQlwcml2LT5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfR1JPOwotCi0JaWYgKHByaXYtPmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1NHICYmIHByaXYtPmhjYV9jYXBzICYgSUJfREVWSUNFX1VEX1RTTykKLQkJcHJpdi0+ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKLQogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaXBvaWJfYWRkX3BvcnQoY29uc3QgY2hhciAqZm9ybWF0LAogCQkJCQkgc3RydWN0IGliX2RldmljZSAqaGNhLCB1OCBwb3J0KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGFrYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRha2JkLmMKaW5kZXggMTgzOTE5NC4uMTBiY2Q0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGFrYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0YWtiZC5jCkBAIC0yMjMsOCArMjIzLDkgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvLyBuZWVkIHRvIGluaXQgY29yZSBkcml2ZXIgaWYgbm90IGFscmVhZHkgZG9uZSBzbwotCWlmIChhdGFyaV9rZXliX2luaXQoKSkKLQkJcmV0dXJuIC1FTk9ERVY7CisJZXJyb3IgPSBhdGFyaV9rZXliX2luaXQoKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKIAogCWF0YWtiZF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoIWF0YWtiZF9kZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2F0YXJpbW91c2UuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvYXRhcmltb3VzZS5jCmluZGV4IGFkZjQ1YjMuLjVjNGE2OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvYXRhcmltb3VzZS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvYXRhcmltb3VzZS5jCkBAIC03NywxNSArNzcsMTUgQEAKICNlbmRpZgogCiAJLyogb25seSByZWxhdGl2ZSBldmVudHMgZ2V0IGhlcmUgKi8KLQlkeCA9ICBidWZbMV07Ci0JZHkgPSAtYnVmWzJdOworCWR4ID0gYnVmWzFdOworCWR5ID0gYnVmWzJdOwogCiAJaW5wdXRfcmVwb3J0X3JlbChhdGFtb3VzZV9kZXYsIFJFTF9YLCBkeCk7CiAJaW5wdXRfcmVwb3J0X3JlbChhdGFtb3VzZV9kZXYsIFJFTF9ZLCBkeSk7CiAKLQlpbnB1dF9yZXBvcnRfa2V5KGF0YW1vdXNlX2RldiwgQlROX0xFRlQsICAgYnV0dG9ucyAmIDB4MSk7CisJaW5wdXRfcmVwb3J0X2tleShhdGFtb3VzZV9kZXYsIEJUTl9MRUZULCAgIGJ1dHRvbnMgJiAweDQpOwogCWlucHV0X3JlcG9ydF9rZXkoYXRhbW91c2VfZGV2LCBCVE5fTUlERExFLCBidXR0b25zICYgMHgyKTsKLQlpbnB1dF9yZXBvcnRfa2V5KGF0YW1vdXNlX2RldiwgQlROX1JJR0hULCAgYnV0dG9ucyAmIDB4NCk7CisJaW5wdXRfcmVwb3J0X2tleShhdGFtb3VzZV9kZXYsIEJUTl9SSUdIVCwgIGJ1dHRvbnMgJiAweDEpOwogCiAJaW5wdXRfc3luYyhhdGFtb3VzZV9kZXYpOwogCkBAIC0xMDgsNyArMTA4LDcgQEAKIHN0YXRpYyB2b2lkIGF0YW1vdXNlX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKIHsKIAlpa2JkX21vdXNlX2Rpc2FibGUoKTsKLQlhdGFyaV9tb3VzZV9pbnRlcnJ1cHRfaG9vayA9IE5VTEw7CisJYXRhcmlfaW5wdXRfbW91c2VfaW50ZXJydXB0X2hvb2sgPSBOVUxMOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBhdGFtb3VzZV9pbml0KHZvaWQpCkBAIC0xMTgsOCArMTE4LDkgQEAKIAlpZiAoIU1BQ0hfSVNfQVRBUkkgfHwgIUFUQVJJSFdfUFJFU0VOVChTVF9NRlApKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmICghYXRhcmlfa2V5Yl9pbml0KCkpCi0JCXJldHVybiAtRU5PREVWOworCWVycm9yID0gYXRhcmlfa2V5Yl9pbml0KCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CiAKIAlhdGFtb3VzZV9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoIWF0YW1vdXNlX2RldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMKaW5kZXggYzI0OTQ2Zi4uMWRlMWMxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMKQEAgLTI4MSwxNyArMjgxLDI0IEBACiAJdTgJCQljb21tYW5kOwogCXU4CQkJcmVmX29mZjsKIAl1MTYJCQlzY3JhdGNoOwotCV9fYmUxNgkJCXNhbXBsZTsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UJbXNnOwogCXN0cnVjdCBzcGlfdHJhbnNmZXIJeGZlcls2XTsKKwkvKgorCSAqIERNQSAodGh1cyBjYWNoZSBjb2hlcmVuY3kgbWFpbnRlbmFuY2UpIHJlcXVpcmVzIHRoZQorCSAqIHRyYW5zZmVyIGJ1ZmZlcnMgdG8gbGl2ZSBpbiB0aGVpciBvd24gY2FjaGUgbGluZXMuCisJICovCisJX19iZTE2IHNhbXBsZSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiB9OwogCiBzdHJ1Y3QgYWRzNzg0NV9zZXJfcmVxIHsKIAl1OAkJCWNvbW1hbmRbM107Ci0JdTgJCQlwd3Jkb3duWzNdOwotCXU4CQkJc2FtcGxlWzNdOwogCXN0cnVjdCBzcGlfbWVzc2FnZQltc2c7CiAJc3RydWN0IHNwaV90cmFuc2Zlcgl4ZmVyWzJdOworCS8qCisJICogRE1BICh0aHVzIGNhY2hlIGNvaGVyZW5jeSBtYWludGVuYW5jZSkgcmVxdWlyZXMgdGhlCisJICogdHJhbnNmZXIgYnVmZmVycyB0byBsaXZlIGluIHRoZWlyIG93biBjYWNoZSBsaW5lcy4KKwkgKi8KKwl1OCBzYW1wbGVbM10gX19fX2NhY2hlbGluZV9hbGlnbmVkOwogfTsKIAogc3RhdGljIGludCBhZHM3ODQ2X3JlYWQxMl9zZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBjb21tYW5kKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTgzMXgtdHMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd204MzF4LXRzLmMKaW5kZXggNmFlMDU0Zi4uOTE3NWQ0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTgzMXgtdHMuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtODMxeC10cy5jCkBAIC02OCw4ICs2OCwyMyBAQAogCXVuc2lnbmVkIGludCBwZF9pcnE7CiAJYm9vbCBwcmVzc3VyZTsKIAlib29sIHBlbl9kb3duOworCXN0cnVjdCB3b3JrX3N0cnVjdCBwZF9kYXRhX3dvcms7CiB9OwogCitzdGF0aWMgdm9pZCB3bTgzMXhfcGRfZGF0YV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgd204MzF4X3RzICp3bTgzMXhfdHMgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHdtODMxeF90cywgcGRfZGF0YV93b3JrKTsKKworCWlmICh3bTgzMXhfdHMtPnBlbl9kb3duKSB7CisJCWVuYWJsZV9pcnEod204MzF4X3RzLT5kYXRhX2lycSk7CisJCWRldl9kYmcod204MzF4X3RzLT53bTgzMXgtPmRldiwgIklSUSBQRC0+REFUQSBkb25lXG4iKTsKKwl9IGVsc2UgeworCQllbmFibGVfaXJxKHdtODMxeF90cy0+cGRfaXJxKTsKKwkJZGV2X2RiZyh3bTgzMXhfdHMtPndtODMxeC0+ZGV2LCAiSVJRIERBVEEtPlBEIGRvbmVcbiIpOworCX0KK30KKwogc3RhdGljIGlycXJldHVybl90IHdtODMxeF90c19kYXRhX2lycShpbnQgaXJxLCB2b2lkICppcnFfZGF0YSkKIHsKIAlzdHJ1Y3Qgd204MzF4X3RzICp3bTgzMXhfdHMgPSBpcnFfZGF0YTsKQEAgLTExMCw2ICsxMjUsOSBAQAogCX0KIAogCWlmICghd204MzF4X3RzLT5wZW5fZG93bikgeworCQkvKiBTd2l0Y2ggZnJvbSBkYXRhIHRvIHBlbiBkb3duICovCisJCWRldl9kYmcod204MzF4LT5kZXYsICJJUlEgREFUQS0+UERcbiIpOworCiAJCWRpc2FibGVfaXJxX25vc3luYyh3bTgzMXhfdHMtPmRhdGFfaXJxKTsKIAogCQkvKiBEb24ndCBuZWVkIGRhdGEgYW55IG1vcmUgKi8KQEAgLTEyOCw2ICsxNDYsMTAgQEAKIAkJCQkJIEFCU19QUkVTU1VSRSwgMCk7CiAKIAkJaW5wdXRfcmVwb3J0X2tleSh3bTgzMXhfdHMtPmlucHV0X2RldiwgQlROX1RPVUNILCAwKTsKKworCQlzY2hlZHVsZV93b3JrKCZ3bTgzMXhfdHMtPnBkX2RhdGFfd29yayk7CisJfSBlbHNlIHsKKwkJaW5wdXRfcmVwb3J0X2tleSh3bTgzMXhfdHMtPmlucHV0X2RldiwgQlROX1RPVUNILCAxKTsKIAl9CiAKIAlpbnB1dF9zeW5jKHdtODMxeF90cy0+aW5wdXRfZGV2KTsKQEAgLTE0MSw2ICsxNjMsMTEgQEAKIAlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSB3bTgzMXhfdHMtPndtODMxeDsKIAlpbnQgZW5hID0gMDsKIAorCWlmICh3bTgzMXhfdHMtPnBlbl9kb3duKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKwlkaXNhYmxlX2lycV9ub3N5bmMod204MzF4X3RzLT5wZF9pcnEpOworCiAJLyogU3RhcnQgY29sbGVjdGluZyBkYXRhICovCiAJaWYgKHdtODMxeF90cy0+cHJlc3N1cmUpCiAJCWVuYSB8PSBXTTgzMVhfVENIX1pfRU5BOwpAQCAtMTQ5LDE0ICsxNzYsMTQgQEAKIAkJCVdNODMxWF9UQ0hfWF9FTkEgfCBXTTgzMVhfVENIX1lfRU5BIHwgV004MzFYX1RDSF9aX0VOQSwKIAkJCVdNODMxWF9UQ0hfWF9FTkEgfCBXTTgzMVhfVENIX1lfRU5BIHwgZW5hKTsKIAotCWlucHV0X3JlcG9ydF9rZXkod204MzF4X3RzLT5pbnB1dF9kZXYsIEJUTl9UT1VDSCwgMSk7Ci0JaW5wdXRfc3luYyh3bTgzMXhfdHMtPmlucHV0X2Rldik7Ci0KIAl3bTgzMXhfc2V0X2JpdHMod204MzF4LCBXTTgzMVhfSU5URVJSVVBUX1NUQVRVU18xLAogCQkJV004MzFYX1RDSFBEX0VJTlQsIFdNODMxWF9UQ0hQRF9FSU5UKTsKIAogCXdtODMxeF90cy0+cGVuX2Rvd24gPSB0cnVlOwotCWVuYWJsZV9pcnEod204MzF4X3RzLT5kYXRhX2lycSk7CisKKwkvKiBTd2l0Y2ggZnJvbSBwZW4gZG93biB0byBkYXRhICovCisJZGV2X2RiZyh3bTgzMXgtPmRldiwgIklSUSBQRC0+REFUQVxuIik7CisJc2NoZWR1bGVfd29yaygmd204MzF4X3RzLT5wZF9kYXRhX3dvcmspOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMTgyLDEzICsyMDksMjggQEAKIAlzdHJ1Y3Qgd204MzF4X3RzICp3bTgzMXhfdHMgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpZGV2KTsKIAlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSB3bTgzMXhfdHMtPndtODMxeDsKIAorCS8qIFNodXQgdGhlIGNvbnRyb2xsZXIgZG93biwgZGlzYWJsaW5nIGFsbCBvdGhlciBmdW5jdGlvbmFsaXR5IHRvbyAqLwogCXdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9UT1VDSF9DT05UUk9MXzEsCi0JCQlXTTgzMVhfVENIX0VOQSB8IFdNODMxWF9UQ0hfQ1ZUX0VOQSB8Ci0JCQlXTTgzMVhfVENIX1hfRU5BIHwgV004MzFYX1RDSF9ZX0VOQSB8Ci0JCQlXTTgzMVhfVENIX1pfRU5BLCAwKTsKKwkJCVdNODMxWF9UQ0hfRU5BIHwgV004MzFYX1RDSF9YX0VOQSB8CisJCQlXTTgzMVhfVENIX1lfRU5BIHwgV004MzFYX1RDSF9aX0VOQSwgMCk7CiAKLQlpZiAod204MzF4X3RzLT5wZW5fZG93bikKKwkvKiBNYWtlIHN1cmUgYW55IHBlbmRpbmcgSVJRcyBhcmUgZG9uZSwgdGhlIGFib3ZlIHdpbGwgcHJldmVudAorCSAqIG5ldyBvbmVzIGZpcmluZy4KKwkgKi8KKwlzeW5jaHJvbml6ZV9pcnEod204MzF4X3RzLT5kYXRhX2lycSk7CisJc3luY2hyb25pemVfaXJxKHdtODMxeF90cy0+cGRfaXJxKTsKKworCS8qIE1ha2Ugc3VyZSB0aGUgSVJRIGNvbXBsZXRpb24gd29yayBpcyBxdWllc2NlZCAqLworCWZsdXNoX3dvcmtfc3luYygmd204MzF4X3RzLT5wZF9kYXRhX3dvcmspOworCisJLyogSWYgd2UgZW5kZWQgdXAgd2l0aCB0aGUgcGVuIGRvd24gdGhlbiBtYWtlIHN1cmUgd2UgcmV2ZXJ0IGJhY2sKKwkgKiB0byBwZW4gZGV0ZWN0aW9uIHN0YXRlIGZvciB0aGUgbmV4dCB0aW1lIHdlIHN0YXJ0IHVwLgorCSAqLworCWlmICh3bTgzMXhfdHMtPnBlbl9kb3duKSB7CiAJCWRpc2FibGVfaXJxKHdtODMxeF90cy0+ZGF0YV9pcnEpOworCQllbmFibGVfaXJxKHdtODMxeF90cy0+cGRfaXJxKTsKKwkJd204MzF4X3RzLT5wZW5fZG93biA9IGZhbHNlOworCX0KIH0KIAogc3RhdGljIF9fZGV2aW5pdCBpbnQgd204MzF4X3RzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC0xOTgsNyArMjQwLDcgQEAKIAlzdHJ1Y3Qgd204MzF4X3BkYXRhICpjb3JlX3BkYXRhID0gZGV2X2dldF9wbGF0ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKIAlzdHJ1Y3Qgd204MzF4X3RvdWNoX3BkYXRhICpwZGF0YSA9IE5VTEw7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwotCWludCBlcnJvcjsKKwlpbnQgZXJyb3IsIGlycWY7CiAKIAlpZiAoY29yZV9wZGF0YSkKIAkJcGRhdGEgPSBjb3JlX3BkYXRhLT50b3VjaDsKQEAgLTIxMiw2ICsyNTQsNyBAQAogCiAJd204MzF4X3RzLT53bTgzMXggPSB3bTgzMXg7CiAJd204MzF4X3RzLT5pbnB1dF9kZXYgPSBpbnB1dF9kZXY7CisJSU5JVF9XT1JLKCZ3bTgzMXhfdHMtPnBkX2RhdGFfd29yaywgd204MzF4X3BkX2RhdGFfd29yayk7CiAKIAkvKgogCSAqIElmIHdlIGhhdmUgYSBkaXJlY3QgSVJRIHVzZSBpdCwgb3RoZXJ3aXNlIHVzZSB0aGUgaW50ZXJydXB0CkBAIC0yNzAsOSArMzEzLDE0IEBACiAJd204MzF4X3NldF9iaXRzKHdtODMxeCwgV004MzFYX1RPVUNIX0NPTlRST0xfMSwKIAkJCVdNODMxWF9UQ0hfUkFURV9NQVNLLCA2KTsKIAorCWlmIChwZGF0YSAmJiBwZGF0YS0+ZGF0YV9pcnFmKQorCQlpcnFmID0gcGRhdGEtPmRhdGFfaXJxZjsKKwllbHNlCisJCWlycWYgPSBJUlFGX1RSSUdHRVJfSElHSDsKKwogCWVycm9yID0gcmVxdWVzdF90aHJlYWRlZF9pcnEod204MzF4X3RzLT5kYXRhX2lycSwKIAkJCQkgICAgIE5VTEwsIHdtODMxeF90c19kYXRhX2lycSwKLQkJCQkgICAgIElSUUZfT05FU0hPVCwKKwkJCQkgICAgIGlycWYgfCBJUlFGX09ORVNIT1QsCiAJCQkJICAgICAiVG91Y2hzY3JlZW4gZGF0YSIsIHdtODMxeF90cyk7CiAJaWYgKGVycm9yKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IGRhdGEgSVJRICVkOiAlZFxuIiwKQEAgLTI4MSw5ICszMjksMTQgQEAKIAl9CiAJZGlzYWJsZV9pcnEod204MzF4X3RzLT5kYXRhX2lycSk7CiAKKwlpZiAocGRhdGEgJiYgcGRhdGEtPnBkX2lycWYpCisJCWlycWYgPSBwZGF0YS0+cGRfaXJxZjsKKwllbHNlCisJCWlycWYgPSBJUlFGX1RSSUdHRVJfSElHSDsKKwogCWVycm9yID0gcmVxdWVzdF90aHJlYWRlZF9pcnEod204MzF4X3RzLT5wZF9pcnEsCiAJCQkJICAgICBOVUxMLCB3bTgzMXhfdHNfcGVuX2Rvd25faXJxLAotCQkJCSAgICAgSVJRRl9PTkVTSE9ULAorCQkJCSAgICAgaXJxZiB8IElSUUZfT05FU0hPVCwKIAkJCQkgICAgICJUb3VjaHNjcmVlbiBwZW4gZG93biIsIHdtODMxeF90cyk7CiAJaWYgKGVycm9yKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IHBlbiBkb3duIElSUSAlZDogJWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vY2FwaS9LY29uZmlnIGIvZHJpdmVycy9pc2RuL2NhcGkvS2NvbmZpZwppbmRleCBhMTY4ZThhLi4xNWMzZmZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vY2FwaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvaXNkbi9jYXBpL0tjb25maWcKQEAgLTMzLDIxICszMyw2IEBACiAJICBzdGFuZGFyZGl6ZWQgbGliY2FwaTIwIHRvIGFjY2VzcyB0aGlzIGZ1bmN0aW9uYWxpdHkuICBZb3Ugc2hvdWxkIHNheQogCSAgWS9NIGhlcmUuCiAKLWNvbmZpZyBJU0ROX0NBUElfQ0FQSUZTX0JPT0wKLQlib29sICJDQVBJMi4wIGZpbGVzeXN0ZW0gc3VwcG9ydCAoREVQUkVDQVRFRCkiCi0JZGVwZW5kcyBvbiBJU0ROX0NBUElfTUlERExFV0FSRSAmJiBJU0ROX0NBUElfQ0FQSTIwCi0JaGVscAotCSAgVGhpcyBvcHRpb24gcHJvdmlkZXMgYSBzcGVjaWFsIGZpbGUgc3lzdGVtLCBzaW1pbGFyIHRvIC9kZXYvcHRzIHdpdGgKLQkgIGRldmljZSBub2RlcyBmb3IgdGhlIHNwZWNpYWwgdHR5cyBlc3RhYmxpc2hlZCBieSB1c2luZyB0aGUKLQkgIG1pZGRsZXdhcmUgZXh0ZW5zaW9uIGFib3ZlLgotCSAgWW91IG5vIGxvbmdlciBuZWVkIHRoaXMsIHVkZXYgZnVsbHkgcmVwbGFjZXMgaXQuIFRoaXMgZmVhdHVyZSBpcwotCSAgc2NoZWR1bGVkIGZvciByZW1vdmFsLgotCi1jb25maWcgSVNETl9DQVBJX0NBUElGUwotCXRyaXN0YXRlCi0JZGVwZW5kcyBvbiBJU0ROX0NBUElfQ0FQSUZTX0JPT0wKLQlkZWZhdWx0IElTRE5fQ0FQSV9DQVBJMjAKLQogY29uZmlnIElTRE5fQ0FQSV9DQVBJRFJWCiAJdHJpc3RhdGUgIkNBUEkyLjAgY2FwaWRydiBpbnRlcmZhY2Ugc3VwcG9ydCIKIAlkZXBlbmRzIG9uIElTRE5fSTRMCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vY2FwaS9NYWtlZmlsZSBiL2RyaXZlcnMvaXNkbi9jYXBpL01ha2VmaWxlCmluZGV4IDU3MTIzZTMuLjRkNWI0YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9jYXBpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaXNkbi9jYXBpL01ha2VmaWxlCkBAIC03LDcgKzcsNiBAQAogb2JqLSQoQ09ORklHX0lTRE5fQ0FQSSkJCQkrPSBrZXJuZWxjYXBpLm8KIG9iai0kKENPTkZJR19JU0ROX0NBUElfQ0FQSTIwKQkJKz0gY2FwaS5vIAogb2JqLSQoQ09ORklHX0lTRE5fQ0FQSV9DQVBJRFJWKQkJKz0gY2FwaWRydi5vCi1vYmotJChDT05GSUdfSVNETl9DQVBJX0NBUElGUykJCSs9IGNhcGlmcy5vCiAKICMgTXVsdGlwYXJ0IG9iamVjdHMuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYyBiL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYwppbmRleCAwZDcwODgzLi5lNDQ5MzNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMKKysrIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jCkBAIC0zOCwxNSArMzgsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9pc2RuL2NhcGl1dGlsLmg+CiAjaW5jbHVkZSA8bGludXgvaXNkbi9jYXBpY21kLmg+CiAKLSNpbmNsdWRlICJjYXBpZnMuaCIKLQogTU9EVUxFX0RFU0NSSVBUSU9OKCJDQVBJNExpbnV4OiBVc2Vyc3BhY2UgL2Rldi9jYXBpMjAgaW50ZXJmYWNlIik7CiBNT0RVTEVfQVVUSE9SKCJDYXJzdGVuIFBhZXRoIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLSN1bmRlZiBfREVCVUdfVFRZRlVOQ1MJCS8qIGNhbGwgdG8gdHR5X2RyaXZlciAqLwotI3VuZGVmIF9ERUJVR19EQVRBRkxPVwkJLyogZGF0YSBmbG93ICovCi0KIC8qIC0tLS0tLS0tIGRyaXZlciBpbmZvcm1hdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgREVGSU5FX01VVEVYKGNhcGlfbXV0ZXgpOwpAQCAtODUsNyArODAsNiBAQAogCXN0cnVjdCBrcmVmIGtyZWY7CiAKIAl1bnNpZ25lZCBpbnQgICAgICBtaW5vcjsKLQlzdHJ1Y3QgZGVudHJ5ICpjYXBpZnNfZGVudHJ5OwogCiAJc3RydWN0IGNhcGkyMF9hcHBsCSphcDsKIAl1MzIJCQluY2NpOwpAQCAtMzAwLDE3ICsyOTQsOCBAQAogCiBzdGF0aWMgdm9pZCBjYXBpbmNjaV9hbGxvY19taW5vcihzdHJ1Y3QgY2FwaWRldiAqY2Rldiwgc3RydWN0IGNhcGluY2NpICpucCkKIHsKLQlzdHJ1Y3QgY2FwaW1pbm9yICptcDsKLQlkZXZfdCBkZXZpY2U7Ci0KLQlpZiAoIShjZGV2LT51c2VyZmxhZ3MgJiBDQVBJRkxBR19ISUdISkFDS0lORykpCi0JCXJldHVybjsKLQotCW1wID0gbnAtPm1pbm9ycCA9IGNhcGltaW5vcl9hbGxvYygmY2Rldi0+YXAsIG5wLT5uY2NpKTsKLQlpZiAobXApIHsKLQkJZGV2aWNlID0gTUtERVYoY2FwaW5jX3R0eV9kcml2ZXItPm1ham9yLCBtcC0+bWlub3IpOwotCQltcC0+Y2FwaWZzX2RlbnRyeSA9IGNhcGlmc19uZXdfbmNjaShtcC0+bWlub3IsIGRldmljZSk7Ci0JfQorCWlmIChjZGV2LT51c2VyZmxhZ3MgJiBDQVBJRkxBR19ISUdISkFDS0lORykKKwkJbnAtPm1pbm9ycCA9IGNhcGltaW5vcl9hbGxvYygmY2Rldi0+YXAsIG5wLT5uY2NpKTsKIH0KIAogc3RhdGljIHZvaWQgY2FwaW5jY2lfZnJlZV9taW5vcihzdHJ1Y3QgY2FwaW5jY2kgKm5wKQpAQCAtMzE5LDggKzMwNCw2IEBACiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAogCWlmIChtcCkgewotCQljYXBpZnNfZnJlZV9uY2NpKG1wLT5jYXBpZnNfZGVudHJ5KTsKLQogCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZtcC0+cG9ydCk7CiAJCWlmICh0dHkpIHsKIAkJCXR0eV92aGFuZ3VwKHR0eSk7CkBAIC00MzIsOSArNDE1LDcgQEAKIAogCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJm1wLT5wb3J0KTsKIAlpZiAoIXR0eSkgewotI2lmZGVmIF9ERUJVR19EQVRBRkxPVwotCQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaTogY3VycmVudGx5IG5vIHJlY2VpdmVyXG4iKTsKLSNlbmRpZgorCQlwcl9kZWJ1ZygiY2FwaTogY3VycmVudGx5IG5vIHJlY2VpdmVyXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAkKQEAgLTQ0NywyMyArNDI4LDE3IEBACiAJfQogCiAJaWYgKGxkLT5vcHMtPnJlY2VpdmVfYnVmID09IE5VTEwpIHsKLSNpZiBkZWZpbmVkKF9ERUJVR19EQVRBRkxPVykgfHwgZGVmaW5lZChfREVCVUdfVFRZRlVOQ1MpCi0JCXByaW50ayhLRVJOX0RFQlVHICJjYXBpOiBsZGlzYyBoYXMgbm8gcmVjZWl2ZV9idWYgZnVuY3Rpb25cbiIpOwotI2VuZGlmCisJCXByX2RlYnVnKCJjYXBpOiBsZGlzYyBoYXMgbm8gcmVjZWl2ZV9idWYgZnVuY3Rpb25cbiIpOwogCQkvKiBmYXRhbCBlcnJvciwgZG8gbm90IHJlcXVldWUgKi8KIAkJZ290byBmcmVlX3NrYjsKIAl9CiAJaWYgKG1wLT50dHlpbnN0b3ApIHsKLSNpZiBkZWZpbmVkKF9ERUJVR19EQVRBRkxPVykgfHwgZGVmaW5lZChfREVCVUdfVFRZRlVOQ1MpCi0JCXByaW50ayhLRVJOX0RFQlVHICJjYXBpOiByZWN2IHR0eSB0aHJvdHRsZWRcbiIpOwotI2VuZGlmCisJCXByX2RlYnVnKCJjYXBpOiByZWN2IHR0eSB0aHJvdHRsZWRcbiIpOwogCQlnb3RvIGRlcmVmX2xkaXNjOwogCX0KIAogCWlmICh0dHktPnJlY2VpdmVfcm9vbSA8IGRhdGFsZW4pIHsKLSNpZiBkZWZpbmVkKF9ERUJVR19EQVRBRkxPVykgfHwgZGVmaW5lZChfREVCVUdfVFRZRlVOQ1MpCi0JCXByaW50ayhLRVJOX0RFQlVHICJjYXBpOiBubyByb29tIGluIHR0eVxuIik7Ci0jZW5kaWYKKwkJcHJfZGVidWcoImNhcGk6IG5vIHJvb20gaW4gdHR5XG4iKTsKIAkJZ290byBkZXJlZl9sZGlzYzsKIAl9CiAKQEAgLTQ3OSwxMCArNDU0LDggQEAKIAogCWlmIChlcnJjb2RlID09IENBUElfTk9FUlJPUikgewogCQlza2JfcHVsbChza2IsIENBUElNU0dfTEVOKHNrYi0+ZGF0YSkpOwotI2lmZGVmIF9ERUJVR19EQVRBRkxPVwotCQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaTogREFUQV9CM19SRVNQICV1IGxlbj0lZCA9PiBsZGlzY1xuIiwKLQkJCQkJZGF0YWhhbmRsZSwgc2tiLT5sZW4pOwotI2VuZGlmCisJCXByX2RlYnVnKCJjYXBpOiBEQVRBX0IzX1JFU1AgJXUgbGVuPSVkID0+IGxkaXNjXG4iLAorCQkJIGRhdGFoYW5kbGUsIHNrYi0+bGVuKTsKIAkJbGQtPm9wcy0+cmVjZWl2ZV9idWYodHR5LCBza2ItPmRhdGEsIE5VTEwsIHNrYi0+bGVuKTsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgImNhcGk6IHNlbmQgREFUQV9CM19SRVNQIGZhaWxlZD0leFxuIiwKQEAgLTUyOSw5ICs1MDIsNyBAQAogCQlyZXR1cm47CiAKIAlpZiAobXAtPnR0eW91dHN0b3ApIHsKLSNpZiBkZWZpbmVkKF9ERUJVR19EQVRBRkxPVykgfHwgZGVmaW5lZChfREVCVUdfVFRZRlVOQ1MpCi0JCXByaW50ayhLRVJOX0RFQlVHICJjYXBpOiBzZW5kOiB0dHkgc3RvcHBlZFxuIik7Ci0jZW5kaWYKKwkJcHJfZGVidWcoImNhcGk6IHNlbmQ6IHR0eSBzdG9wcGVkXG4iKTsKIAkJdHR5X2tyZWZfcHV0KHR0eSk7CiAJCXJldHVybjsKIAl9CkBAIC01NzMsMTAgKzU0NCw4IEBACiAJCX0KIAkJZXJyY29kZSA9IGNhcGkyMF9wdXRfbWVzc2FnZShtcC0+YXAsIHNrYik7CiAJCWlmIChlcnJjb2RlID09IENBUElfTk9FUlJPUikgewotI2lmZGVmIF9ERUJVR19EQVRBRkxPVwotCQkJcHJpbnRrKEtFUk5fREVCVUcgImNhcGk6IERBVEFfQjNfUkVRICV1IGxlbj0ldVxuIiwKLQkJCQkJCQlkYXRhaGFuZGxlLCBsZW4pOwotI2VuZGlmCisJCQlwcl9kZWJ1ZygiY2FwaTogREFUQV9CM19SRVEgJXUgbGVuPSV1XG4iLAorCQkJCSBkYXRhaGFuZGxlLCBsZW4pOwogCQkJY29udGludWU7CiAJCX0KIAkJY2FwaW1pbm9yX2RlbF9hY2sobXAsIGRhdGFoYW5kbGUpOwpAQCAtNjUwLDEwICs2MTksOCBAQAogCX0KIAlpZiAoQ0FQSU1TR19TVUJDT01NQU5EKHNrYi0+ZGF0YSkgPT0gQ0FQSV9JTkQpIHsKIAkJZGF0YWhhbmRsZSA9IENBUElNU0dfVTE2KHNrYi0+ZGF0YSwgQ0FQSU1TR19CQVNFTEVOKzQrNCsyKTsKLSNpZmRlZiBfREVCVUdfREFUQUZMT1cKLQkJcHJpbnRrKEtFUk5fREVCVUcgImNhcGlfc2lnbmFsOiBEQVRBX0IzX0lORCAldSBsZW49JWRcbiIsCi0JCQkJZGF0YWhhbmRsZSwgc2tiLT5sZW4tQ0FQSU1TR19MRU4oc2tiLT5kYXRhKSk7Ci0jZW5kaWYKKwkJcHJfZGVidWcoImNhcGlfc2lnbmFsOiBEQVRBX0IzX0lORCAldSBsZW49JWRcbiIsCisJCQkgZGF0YWhhbmRsZSwgc2tiLT5sZW4tQ0FQSU1TR19MRU4oc2tiLT5kYXRhKSk7CiAJCXNrYl9xdWV1ZV90YWlsKCZtcC0+aW5xdWV1ZSwgc2tiKTsKIAogCQloYW5kbGVfbWlub3JfcmVjdihtcCk7CkBAIC02NjEsMTEgKzYyOCw5IEBACiAJfSBlbHNlIGlmIChDQVBJTVNHX1NVQkNPTU1BTkQoc2tiLT5kYXRhKSA9PSBDQVBJX0NPTkYpIHsKIAogCQlkYXRhaGFuZGxlID0gQ0FQSU1TR19VMTYoc2tiLT5kYXRhLCBDQVBJTVNHX0JBU0VMRU4rNCk7Ci0jaWZkZWYgX0RFQlVHX0RBVEFGTE9XCi0JCXByaW50ayhLRVJOX0RFQlVHICJjYXBpX3NpZ25hbDogREFUQV9CM19DT05GICV1IDB4JXhcbiIsCi0JCQkJZGF0YWhhbmRsZSwKLQkJCQlDQVBJTVNHX1UxNihza2ItPmRhdGEsIENBUElNU0dfQkFTRUxFTis0KzIpKTsKLSNlbmRpZgorCQlwcl9kZWJ1ZygiY2FwaV9zaWduYWw6IERBVEFfQjNfQ09ORiAldSAweCV4XG4iLAorCQkJIGRhdGFoYW5kbGUsCisJCQkgQ0FQSU1TR19VMTYoc2tiLT5kYXRhLCBDQVBJTVNHX0JBU0VMRU4rNCsyKSk7CiAJCWtmcmVlX3NrYihza2IpOwogCQljYXBpbWlub3JfZGVsX2FjayhtcCwgZGF0YWhhbmRsZSk7CiAJCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJm1wLT5wb3J0KTsKQEAgLTEwOTUsOSArMTA2MCw3IEBACiAJc3RydWN0IGNhcGltaW5vciAqbXAgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKLSNpZmRlZiBfREVCVUdfVFRZRlVOQ1MKLQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaW5jX3R0eV93cml0ZShjb3VudD0lZClcbiIsIGNvdW50KTsKLSNlbmRpZgorCXByX2RlYnVnKCJjYXBpbmNfdHR5X3dyaXRlKGNvdW50PSVkKVxuIiwgY291bnQpOwogCiAJc3Bpbl9sb2NrX2JoKCZtcC0+b3V0bG9jayk7CiAJc2tiID0gbXAtPm91dHNrYjsKQEAgLTExMzMsOSArMTA5Niw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgcmV0ID0gMTsKIAotI2lmZGVmIF9ERUJVR19UVFlGVU5DUwotCXByaW50ayhLRVJOX0RFQlVHICJjYXBpbmNfcHV0X2NoYXIoJXUpXG4iLCBjaCk7Ci0jZW5kaWYKKwlwcl9kZWJ1ZygiY2FwaW5jX3B1dF9jaGFyKCV1KVxuIiwgY2gpOwogCiAJc3Bpbl9sb2NrX2JoKCZtcC0+b3V0bG9jayk7CiAJc2tiID0gbXAtPm91dHNrYjsKQEAgLTExNzQsOSArMTEzNSw3IEBACiAJc3RydWN0IGNhcGltaW5vciAqbXAgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKLSNpZmRlZiBfREVCVUdfVFRZRlVOQ1MKLQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaW5jX3R0eV9mbHVzaF9jaGFyc1xuIik7Ci0jZW5kaWYKKwlwcl9kZWJ1ZygiY2FwaW5jX3R0eV9mbHVzaF9jaGFyc1xuIik7CiAKIAlzcGluX2xvY2tfYmgoJm1wLT5vdXRsb2NrKTsKIAlza2IgPSBtcC0+b3V0c2tiOwpAQCAtMTIwMCw5ICsxMTU5LDcgQEAKIAogCXJvb20gPSBDQVBJTkNfTUFYX1NFTkRRVUVVRS1za2JfcXVldWVfbGVuKCZtcC0+b3V0cXVldWUpOwogCXJvb20gKj0gQ0FQSV9NQVhfQkxLU0laRTsKLSNpZmRlZiBfREVCVUdfVFRZRlVOQ1MKLQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaW5jX3R0eV93cml0ZV9yb29tID0gJWRcbiIsIHJvb20pOwotI2VuZGlmCisJcHJfZGVidWcoImNhcGluY190dHlfd3JpdGVfcm9vbSA9ICVkXG4iLCByb29tKTsKIAlyZXR1cm4gcm9vbTsKIH0KIApAQCAtMTIxMCwxMiArMTE2NywxMCBAQAogewogCXN0cnVjdCBjYXBpbWlub3IgKm1wID0gdHR5LT5kcml2ZXJfZGF0YTsKIAotI2lmZGVmIF9ERUJVR19UVFlGVU5DUwotCXByaW50ayhLRVJOX0RFQlVHICJjYXBpbmNfdHR5X2NoYXJzX2luX2J1ZmZlciA9ICVkIG5hY2s9JWQgc3E9JWQgcnE9JWRcbiIsCi0JCQltcC0+b3V0Ynl0ZXMsIG1wLT5uYWNrLAotCQkJc2tiX3F1ZXVlX2xlbigmbXAtPm91dHF1ZXVlKSwKLQkJCXNrYl9xdWV1ZV9sZW4oJm1wLT5pbnF1ZXVlKSk7Ci0jZW5kaWYKKwlwcl9kZWJ1ZygiY2FwaW5jX3R0eV9jaGFyc19pbl9idWZmZXIgPSAlZCBuYWNrPSVkIHNxPSVkIHJxPSVkXG4iLAorCQkgbXAtPm91dGJ5dGVzLCBtcC0+bmFjaywKKwkJIHNrYl9xdWV1ZV9sZW4oJm1wLT5vdXRxdWV1ZSksCisJCSBza2JfcXVldWVfbGVuKCZtcC0+aW5xdWV1ZSkpOwogCXJldHVybiBtcC0+b3V0Ynl0ZXM7CiB9CiAKQEAgLTEyMjcsMTcgKzExODIsMTMgQEAKIAogc3RhdGljIHZvaWQgY2FwaW5jX3R0eV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qga3Rlcm1pb3MgKiBvbGQpCiB7Ci0jaWZkZWYgX0RFQlVHX1RUWUZVTkNTCi0JcHJpbnRrKEtFUk5fREVCVUcgImNhcGluY190dHlfc2V0X3Rlcm1pb3NcbiIpOwotI2VuZGlmCisJcHJfZGVidWcoImNhcGluY190dHlfc2V0X3Rlcm1pb3NcbiIpOwogfQogCiBzdGF0aWMgdm9pZCBjYXBpbmNfdHR5X3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IGNhcGltaW5vciAqbXAgPSB0dHktPmRyaXZlcl9kYXRhOwotI2lmZGVmIF9ERUJVR19UVFlGVU5DUwotCXByaW50ayhLRVJOX0RFQlVHICJjYXBpbmNfdHR5X3Rocm90dGxlXG4iKTsKLSNlbmRpZgorCXByX2RlYnVnKCJjYXBpbmNfdHR5X3Rocm90dGxlXG4iKTsKIAltcC0+dHR5aW5zdG9wID0gMTsKIH0KIApAQCAtMTI0NSw5ICsxMTk2LDcgQEAKIHsKIAlzdHJ1Y3QgY2FwaW1pbm9yICptcCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAKLSNpZmRlZiBfREVCVUdfVFRZRlVOQ1MKLQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaW5jX3R0eV91bnRocm90dGxlXG4iKTsKLSNlbmRpZgorCXByX2RlYnVnKCJjYXBpbmNfdHR5X3VudGhyb3R0bGVcbiIpOwogCW1wLT50dHlpbnN0b3AgPSAwOwogCWhhbmRsZV9taW5vcl9yZWN2KG1wKTsKIH0KQEAgLTEyNTYsOSArMTIwNSw3IEBACiB7CiAJc3RydWN0IGNhcGltaW5vciAqbXAgPSB0dHktPmRyaXZlcl9kYXRhOwogCi0jaWZkZWYgX0RFQlVHX1RUWUZVTkNTCi0JcHJpbnRrKEtFUk5fREVCVUcgImNhcGluY190dHlfc3RvcFxuIik7Ci0jZW5kaWYKKwlwcl9kZWJ1ZygiY2FwaW5jX3R0eV9zdG9wXG4iKTsKIAltcC0+dHR5b3V0c3RvcCA9IDE7CiB9CiAKQEAgLTEyNjYsOSArMTIxMyw3IEBACiB7CiAJc3RydWN0IGNhcGltaW5vciAqbXAgPSB0dHktPmRyaXZlcl9kYXRhOwogCi0jaWZkZWYgX0RFQlVHX1RUWUZVTkNTCi0JcHJpbnRrKEtFUk5fREVCVUcgImNhcGluY190dHlfc3RhcnRcbiIpOwotI2VuZGlmCisJcHJfZGVidWcoImNhcGluY190dHlfc3RhcnRcbiIpOwogCW1wLT50dHlvdXRzdG9wID0gMDsKIAloYW5kbGVfbWlub3Jfc2VuZChtcCk7CiB9CkBAIC0xMjc3LDM5ICsxMjIyLDI5IEBACiB7CiAJc3RydWN0IGNhcGltaW5vciAqbXAgPSB0dHktPmRyaXZlcl9kYXRhOwogCi0jaWZkZWYgX0RFQlVHX1RUWUZVTkNTCi0JcHJpbnRrKEtFUk5fREVCVUcgImNhcGluY190dHlfaGFuZ3VwXG4iKTsKLSNlbmRpZgorCXByX2RlYnVnKCJjYXBpbmNfdHR5X2hhbmd1cFxuIik7CiAJdHR5X3BvcnRfaGFuZ3VwKCZtcC0+cG9ydCk7CiB9CiAKIHN0YXRpYyBpbnQgY2FwaW5jX3R0eV9icmVha19jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHN0YXRlKQogewotI2lmZGVmIF9ERUJVR19UVFlGVU5DUwotCXByaW50ayhLRVJOX0RFQlVHICJjYXBpbmNfdHR5X2JyZWFrX2N0bCglZClcbiIsIHN0YXRlKTsKLSNlbmRpZgorCXByX2RlYnVnKCJjYXBpbmNfdHR5X2JyZWFrX2N0bCglZClcbiIsIHN0YXRlKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgY2FwaW5jX3R0eV9mbHVzaF9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLSNpZmRlZiBfREVCVUdfVFRZRlVOQ1MKLQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaW5jX3R0eV9mbHVzaF9idWZmZXJcbiIpOwotI2VuZGlmCisJcHJfZGVidWcoImNhcGluY190dHlfZmx1c2hfYnVmZmVyXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgY2FwaW5jX3R0eV9zZXRfbGRpc2Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLSNpZmRlZiBfREVCVUdfVFRZRlVOQ1MKLQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaW5jX3R0eV9zZXRfbGRpc2NcbiIpOwotI2VuZGlmCisJcHJfZGVidWcoImNhcGluY190dHlfc2V0X2xkaXNjXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgY2FwaW5jX3R0eV9zZW5kX3hjaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgY2gpCiB7Ci0jaWZkZWYgX0RFQlVHX1RUWUZVTkNTCi0JcHJpbnRrKEtFUk5fREVCVUcgImNhcGluY190dHlfc2VuZF94Y2hhciglZClcbiIsIGNoKTsKLSNlbmRpZgorCXByX2RlYnVnKCJjYXBpbmNfdHR5X3NlbmRfeGNoYXIoJWQpXG4iLCBjaCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgY2FwaW5jX29wcyA9IHsKQEAgLTE1MTQsMTAgKzE0NDksOCBAQAogCiAJcHJvY19pbml0KCk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19JU0ROX0NBUElfQ0FQSUZTKSB8fCBkZWZpbmVkKENPTkZJR19JU0ROX0NBUElfQ0FQSUZTX01PRFVMRSkKLSAgICAgICAgY29tcGlsZWluZm8gPSAiIChtaWRkbGV3YXJlK2NhcGlmcykiOwotI2VsaWYgZGVmaW5lZChDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUpCi0gICAgICAgIGNvbXBpbGVpbmZvID0gIiAobm8gY2FwaWZzKSI7CisjaWZkZWYgQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFCisgICAgICAgIGNvbXBpbGVpbmZvID0gIiAobWlkZGxld2FyZSkiOwogI2Vsc2UKICAgICAgICAgY29tcGlsZWluZm8gPSAiIChubyBtaWRkbGV3YXJlKSI7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGlmcy5jIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaWZzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0ZmFlZDcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9pc2RuL2NhcGkvY2FwaWZzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzkgKzAsMCBAQAotLyogJElkOiBjYXBpZnMuYyx2IDEuMS4yLjMgMjAwNC8wMS8xNiAyMTowOToyNiBrZWlsIEV4cCAkCi0gKiAKLSAqIENvcHlyaWdodCAyMDAwIGJ5IENhcnN0ZW4gUGFldGggPGNhbGxlQGNhbGxlLmRlPgotICoKLSAqIEhlYXZpbHkgYmFzZWQgb24gZGV2cHRzIGZpbGVzeXN0ZW0gZnJvbSBILiBQZXRlciBBbnZpbgotICogCi0gKiBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zCi0gKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CS8qIGN1cnJlbnQgKi8KLQotI2luY2x1ZGUgImNhcGlmcy5oIgotCi1NT0RVTEVfREVTQ1JJUFRJT04oIkNBUEk0TGludXg6IC9kZXYvY2FwaS8gZmlsZXN5c3RlbSIpOwotTU9EVUxFX0FVVEhPUigiQ2Fyc3RlbiBQYWV0aCIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2RlZmluZSBDQVBJRlNfU1VQRVJfTUFHSUMgKCgnQyc8PDgpfCdOJykKLQotc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqY2FwaWZzX21udDsKLXN0YXRpYyBpbnQgY2FwaWZzX21udF9jb3VudDsKLQotc3RhdGljIHN0cnVjdCB7Ci0JaW50IHNldHVpZDsKLQlpbnQgc2V0Z2lkOwotCXVpZF90ICAgdWlkOwotCWdpZF90ICAgZ2lkOwotCXVtb2RlX3QgbW9kZTsKLX0gY29uZmlnID0gey5tb2RlID0gMDYwMH07Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgaW50IGNhcGlmc19yZW1vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqcywgaW50ICpmbGFncywgY2hhciAqZGF0YSkKLXsKLQlpbnQgc2V0dWlkID0gMDsKLQlpbnQgc2V0Z2lkID0gMDsKLQl1aWRfdCB1aWQgPSAwOwotCWdpZF90IGdpZCA9IDA7Ci0JdW1vZGVfdCBtb2RlID0gMDYwMDsKLQljaGFyICp0aGlzX2NoYXI7Ci0JY2hhciAqbmV3X29wdCA9IGtzdHJkdXAoZGF0YSwgR0ZQX0tFUk5FTCk7Ci0KLQl0aGlzX2NoYXIgPSBOVUxMOwotCXdoaWxlICgodGhpc19jaGFyID0gc3Ryc2VwKCZkYXRhLCAiLCIpKSAhPSBOVUxMKSB7Ci0JCWludCBuOwotCQljaGFyIGR1bW15OwotCQlpZiAoISp0aGlzX2NoYXIpCi0JCQljb250aW51ZTsKLQkJaWYgKHNzY2FuZih0aGlzX2NoYXIsICJ1aWQ9JWklYyIsICZuLCAmZHVtbXkpID09IDEpIHsKLQkJCXNldHVpZCA9IDE7Ci0JCQl1aWQgPSBuOwotCQl9IGVsc2UgaWYgKHNzY2FuZih0aGlzX2NoYXIsICJnaWQ9JWklYyIsICZuLCAmZHVtbXkpID09IDEpIHsKLQkJCXNldGdpZCA9IDE7Ci0JCQlnaWQgPSBuOwotCQl9IGVsc2UgaWYgKHNzY2FuZih0aGlzX2NoYXIsICJtb2RlPSVvJWMiLCAmbiwgJmR1bW15KSA9PSAxKQotCQkJbW9kZSA9IG4gJiB+U19JRk1UOwotCQllbHNlIHsKLQkJCWtmcmVlKG5ld19vcHQpOwotCQkJcHJpbnRrKCJjYXBpZnM6IGNhbGxlZCB3aXRoIGJvZ3VzIG9wdGlvbnNcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9Ci0KLQltdXRleF9sb2NrKCZzLT5zX3Jvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOwotCi0JcmVwbGFjZV9tb3VudF9vcHRpb25zKHMsIG5ld19vcHQpOwotCWNvbmZpZy5zZXR1aWQgID0gc2V0dWlkOwotCWNvbmZpZy5zZXRnaWQgID0gc2V0Z2lkOwotCWNvbmZpZy51aWQgICAgID0gdWlkOwotCWNvbmZpZy5naWQgICAgID0gZ2lkOwotCWNvbmZpZy5tb2RlICAgID0gbW9kZTsKLQotCW11dGV4X3VubG9jaygmcy0+c19yb290LT5kX2lub2RlLT5pX211dGV4KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgY2FwaWZzX3NvcHMgPQotewotCS5zdGF0ZnMJCT0gc2ltcGxlX3N0YXRmcywKLQkucmVtb3VudF9mcwk9IGNhcGlmc19yZW1vdW50LAotCS5zaG93X29wdGlvbnMJPSBnZW5lcmljX3Nob3dfb3B0aW9ucywKLX07Ci0KLQotc3RhdGljIGludAotY2FwaWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCB2b2lkICpkYXRhLCBpbnQgc2lsZW50KQotewotCXN0cnVjdCBpbm9kZSAqIGlub2RlOwotCi0Jcy0+c19ibG9ja3NpemUgPSAxMDI0OwotCXMtPnNfYmxvY2tzaXplX2JpdHMgPSAxMDsKLQlzLT5zX21hZ2ljID0gQ0FQSUZTX1NVUEVSX01BR0lDOwotCXMtPnNfb3AgPSAmY2FwaWZzX3NvcHM7Ci0Jcy0+c190aW1lX2dyYW4gPSAxOwotCi0JaW5vZGUgPSBuZXdfaW5vZGUocyk7Ci0JaWYgKCFpbm9kZSkKLQkJZ290byBmYWlsOwotCWlub2RlLT5pX2lubyA9IDE7Ci0JaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwotCWlub2RlLT5pX21vZGUgPSBTX0lGRElSIHwgU19JUlVHTyB8IFNfSVhVR08gfCBTX0lXVVNSOwotCWlub2RlLT5pX29wID0gJnNpbXBsZV9kaXJfaW5vZGVfb3BlcmF0aW9uczsKLQlpbm9kZS0+aV9mb3AgPSAmc2ltcGxlX2Rpcl9vcGVyYXRpb25zOwotCWlub2RlLT5pX25saW5rID0gMjsKLQotCXMtPnNfcm9vdCA9IGRfYWxsb2Nfcm9vdChpbm9kZSk7Ci0JaWYgKHMtPnNfcm9vdCkKLQkJcmV0dXJuIDA7Ci0JCi0JcHJpbnRrKCJjYXBpZnM6IGdldCByb290IGRlbnRyeSBmYWlsZWRcbiIpOwotCWlwdXQoaW5vZGUpOwotZmFpbDoKLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotc3RhdGljIHN0cnVjdCBkZW50cnkgKmNhcGlmc19tb3VudChzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKLQlpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhKQotewotCXJldHVybiBtb3VudF9zaW5nbGUoZnNfdHlwZSwgZmxhZ3MsIGRhdGEsIGNhcGlmc19maWxsX3N1cGVyKTsKLX0KLQotc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGNhcGlmc19mc190eXBlID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJPSAiY2FwaWZzIiwKLQkubW91bnQJCT0gY2FwaWZzX21vdW50LAotCS5raWxsX3NiCT0ga2lsbF9hbm9uX3N1cGVyLAotfTsKLQotc3RhdGljIHN0cnVjdCBkZW50cnkgKm5ld19uY2NpKHVuc2lnbmVkIGludCBudW1iZXIsIGRldl90IGRldmljZSkKLXsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMgPSBjYXBpZnNfbW50LT5tbnRfc2I7Ci0Jc3RydWN0IGRlbnRyeSAqcm9vdCA9IHMtPnNfcm9vdDsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKLQljaGFyIG5hbWVbMTBdOwotCWludCBuYW1lbGVuOwotCi0JbXV0ZXhfbG9jaygmcm9vdC0+ZF9pbm9kZS0+aV9tdXRleCk7Ci0KLQluYW1lbGVuID0gc3ByaW50ZihuYW1lLCAiJWQiLCBudW1iZXIpOwotCWRlbnRyeSA9IGxvb2t1cF9vbmVfbGVuKG5hbWUsIHJvb3QsIG5hbWVsZW4pOwotCWlmIChJU19FUlIoZGVudHJ5KSkgewotCQlkZW50cnkgPSBOVUxMOwotCQlnb3RvIHVubG9ja19vdXQ7Ci0JfQotCi0JaWYgKGRlbnRyeS0+ZF9pbm9kZSkgewotCQlkcHV0KGRlbnRyeSk7Ci0JCWRlbnRyeSA9IE5VTEw7Ci0JCWdvdG8gdW5sb2NrX291dDsKLQl9Ci0KLQlpbm9kZSA9IG5ld19pbm9kZShzKTsKLQlpZiAoIWlub2RlKSB7Ci0JCWRwdXQoZGVudHJ5KTsKLQkJZGVudHJ5ID0gTlVMTDsKLQkJZ290byB1bmxvY2tfb3V0OwotCX0KLQotCS8qIGNvbmZpZyBjb250ZW50cyBpcyBwcm90ZWN0ZWQgYnkgcm9vdCdzIGlfbXV0ZXggKi8KLQlpbm9kZS0+aV91aWQgPSBjb25maWcuc2V0dWlkID8gY29uZmlnLnVpZCA6IGN1cnJlbnRfZnN1aWQoKTsKLQlpbm9kZS0+aV9naWQgPSBjb25maWcuc2V0Z2lkID8gY29uZmlnLmdpZCA6IGN1cnJlbnRfZnNnaWQoKTsKLQlpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7Ci0JaW5vZGUtPmlfaW5vID0gbnVtYmVyICsgMjsKLQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIFNfSUZDSFJ8Y29uZmlnLm1vZGUsIGRldmljZSk7Ci0KLQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwotCWRnZXQoZGVudHJ5KTsKLQotdW5sb2NrX291dDoKLQltdXRleF91bmxvY2soJnJvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOwotCi0JcmV0dXJuIGRlbnRyeTsKLX0KLQotc3RydWN0IGRlbnRyeSAqY2FwaWZzX25ld19uY2NpKHVuc2lnbmVkIGludCBudW1iZXIsIGRldl90IGRldmljZSkKLXsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7Ci0KLQlpZiAoc2ltcGxlX3Bpbl9mcygmY2FwaWZzX2ZzX3R5cGUsICZjYXBpZnNfbW50LCAmY2FwaWZzX21udF9jb3VudCkgPCAwKQotCQlyZXR1cm4gTlVMTDsKLQotCWRlbnRyeSA9IG5ld19uY2NpKG51bWJlciwgZGV2aWNlKTsKLQlpZiAoIWRlbnRyeSkKLQkJc2ltcGxlX3JlbGVhc2VfZnMoJmNhcGlmc19tbnQsICZjYXBpZnNfbW50X2NvdW50KTsKLQotCXJldHVybiBkZW50cnk7Ci19Ci0KLXZvaWQgY2FwaWZzX2ZyZWVfbmNjaShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCi17Ci0Jc3RydWN0IGRlbnRyeSAqcm9vdCA9IGNhcGlmc19tbnQtPm1udF9zYi0+c19yb290OwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0KLQlpZiAoIWRlbnRyeSkKLQkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmcm9vdC0+ZF9pbm9kZS0+aV9tdXRleCk7Ci0KLQlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQlpZiAoaW5vZGUpIHsKLQkJZHJvcF9ubGluayhpbm9kZSk7Ci0JCWRfZGVsZXRlKGRlbnRyeSk7Ci0JCWRwdXQoZGVudHJ5KTsKLQl9Ci0JZHB1dChkZW50cnkpOwotCi0JbXV0ZXhfdW5sb2NrKCZyb290LT5kX2lub2RlLT5pX211dGV4KTsKLQotCXNpbXBsZV9yZWxlYXNlX2ZzKCZjYXBpZnNfbW50LCAmY2FwaWZzX21udF9jb3VudCk7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGNhcGlmc19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmNhcGlmc19mc190eXBlKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGNhcGlmc19leGl0KHZvaWQpCi17Ci0JdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZjYXBpZnNfZnNfdHlwZSk7Ci19Ci0KLUVYUE9SVF9TWU1CT0woY2FwaWZzX25ld19uY2NpKTsKLUVYUE9SVF9TWU1CT0woY2FwaWZzX2ZyZWVfbmNjaSk7Ci0KLW1vZHVsZV9pbml0KGNhcGlmc19pbml0KTsKLW1vZHVsZV9leGl0KGNhcGlmc19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGlmcy5oIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaWZzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxOTNkMTEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9pc2RuL2NhcGkvY2FwaWZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKiAkSWQ6IGNhcGlmcy5oLHYgMS4xLjIuMiAyMDA0LzAxLzE2IDIxOjA5OjI2IGtlaWwgRXhwICQKLSAqIAotICogQ29weXJpZ2h0IDIwMDAgYnkgQ2Fyc3RlbiBQYWV0aCA8Y2FsbGVAY2FsbGUuZGU+Ci0gKgotICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcwotICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2RjYWNoZS5oPgotCi0jaWYgZGVmaW5lZChDT05GSUdfSVNETl9DQVBJX0NBUElGUykgfHwgZGVmaW5lZChDT05GSUdfSVNETl9DQVBJX0NBUElGU19NT0RVTEUpCi0KLXN0cnVjdCBkZW50cnkgKmNhcGlmc19uZXdfbmNjaSh1bnNpZ25lZCBpbnQgbnVtLCBkZXZfdCBkZXZpY2UpOwotdm9pZCBjYXBpZnNfZnJlZV9uY2NpKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7Ci0KLSNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRlbnRyeSAqY2FwaWZzX25ld19uY2NpKHVuc2lnbmVkIGludCBudW0sIGRldl90IGRldmljZSkKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNhcGlmc19mcmVlX25jY2koc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotewotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2Jhcy1naWdhc2V0LmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9iYXMtZ2lnYXNldC5jCmluZGV4IDhhM2M1Y2YuLjM5MTNmNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2Jhcy1naWdhc2V0LmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYmFzLWdpZ2FzZXQuYwpAQCAtMTE1Nyw3ICsxMTU3LDYgQEAKIAlzdHJ1Y3QgdXJiICp1cmI7CiAJaW50IHN0YXR1czsKIAlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqaWZkOwotCWludCBvZmZzZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtMTIyNSw3ICsxMjI0LDYgQEAKIAkJCSAqICAgc3VjY2Vzc2Z1bGx5IHNlbnQKIAkJCSAqIC0gYWxsIGZvbGxvd2luZyBmcmFtZXMgYXJlIG5vdCBzZW50IGF0IGFsbAogCQkJICovCi0JCQlvZmZzZXQgPSBkb25lLT5saW1pdDsJLyogZGVmYXVsdCAobm8gZXJyb3IpICovCiAJCQlmb3IgKGkgPSAwOyBpIDwgQkFTX05VTUZSQU1FUzsgaSsrKSB7CiAJCQkJaWZkID0gJnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV07CiAJCQkJaWYgKGlmZC0+c3RhdHVzIHx8CkBAIC0xMjM1LDkgKzEyMzMsNiBAQAogCQkJCQkJIGksIGlmZC0+YWN0dWFsX2xlbmd0aCwKIAkJCQkJCSBpZmQtPmxlbmd0aCwKIAkJCQkJCSBnZXRfdXNiX3N0YXRtc2coaWZkLT5zdGF0dXMpKTsKLQkJCQkJb2Zmc2V0ID0gKGlmZC0+b2Zmc2V0ICsKLQkJCQkJCSAgaWZkLT5hY3R1YWxfbGVuZ3RoKQotCQkJCQkJICUgQkFTX09VVEJVRlNJWkU7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2V2LWxheWVyLmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9ldi1sYXllci5jCmluZGV4IGExNDE4NzYuLmJhNzQ2NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2V2LWxheWVyLmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvZXYtbGF5ZXIuYwpAQCAtMzkwLDEyICszOTAsMTIgQEAKICAqLwogc3RhdGljIGludCBjaWRfb2ZfcmVzcG9uc2UoY2hhciAqcykKIHsKLQl1bnNpZ25lZCBsb25nIGNpZDsKKwlpbnQgY2lkOwogCWludCByYzsKIAogCWlmIChzWy0xXSAhPSAnOycpCiAJCXJldHVybiAwOwkvKiBubyBDSUQgc2VwYXJhdG9yICovCi0JcmMgPSBzdHJpY3Rfc3RydG91bChzLCAxMCwgJmNpZCk7CisJcmMgPSBrc3RydG9pbnQocywgMTAsICZjaWQpOwogCWlmIChyYykKIAkJcmV0dXJuIDA7CS8qIENJRCBub3QgbnVtZXJpYyAqLwogCWlmIChjaWQgPCAxIHx8IGNpZCA+IDY1NTM1KQpAQCAtNTY2LDI3ICs1NjYsMTkgQEAKIAkJY2FzZSBSVF9aQ0FVOgogCQkJZXZlbnQtPnBhcmFtZXRlciA9IC0xOwogCQkJaWYgKGN1cmFyZyArIDEgPCBwYXJhbXMpIHsKLQkJCQl1bnNpZ25lZCBsb25nIHR5cGUsIHZhbHVlOworCQkJCXU4IHR5cGUsIHZhbHVlOwogCi0JCQkJaSA9IHN0cmljdF9zdHJ0b3VsKGFyZ3ZbY3VyYXJnKytdLCAxNiwgJnR5cGUpOwotCQkJCWogPSBzdHJpY3Rfc3RydG91bChhcmd2W2N1cmFyZysrXSwgMTYsICZ2YWx1ZSk7Ci0KLQkJCQlpZiAoaSA9PSAwICYmIHR5cGUgPCAyNTYgJiYKLQkJCQkgICAgaiA9PSAwICYmIHZhbHVlIDwgMjU2KQorCQkJCWkgPSBrc3RydG91OChhcmd2W2N1cmFyZysrXSwgMTYsICZ0eXBlKTsKKwkJCQlqID0ga3N0cnRvdTgoYXJndltjdXJhcmcrK10sIDE2LCAmdmFsdWUpOworCQkJCWlmIChpID09IDAgJiYgaiA9PSAwKQogCQkJCQlldmVudC0+cGFyYW1ldGVyID0gKHR5cGUgPDwgOCkgfCB2YWx1ZTsKIAkJCX0gZWxzZQogCQkJCWN1cmFyZyA9IHBhcmFtcyAtIDE7CiAJCQlicmVhazsKIAkJY2FzZSBSVF9OVU1CRVI6Ci0JCQlldmVudC0+cGFyYW1ldGVyID0gLTE7Ci0JCQlpZiAoY3VyYXJnIDwgcGFyYW1zKSB7Ci0JCQkJdW5zaWduZWQgbG9uZyByZXM7Ci0JCQkJaW50IHJjOwotCi0JCQkJcmMgPSBzdHJpY3Rfc3RydG91bChhcmd2W2N1cmFyZysrXSwgMTAsICZyZXMpOwotCQkJCWlmIChyYyA9PSAwKQotCQkJCQlldmVudC0+cGFyYW1ldGVyID0gcmVzOwotCQkJfQorCQkJaWYgKGN1cmFyZyA+PSBwYXJhbXMgfHwKKwkJCSAgICBrc3RydG9pbnQoYXJndltjdXJhcmcrK10sIDEwLCAmZXZlbnQtPnBhcmFtZXRlcikpCisJCQkJZXZlbnQtPnBhcmFtZXRlciA9IC0xOwogCQkJZ2lnX2RiZyhERUJVR19FVkVOVCwgInBhcmFtZXRlcj09JWQiLCBldmVudC0+cGFyYW1ldGVyKTsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGVidWcuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kZWJ1Zy5jCmluZGV4IDM2MjY0MDEuLjdhOTg5NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kZWJ1Zy5jCkBAIC04NjEsNyArODYxLDcgQEAKIHZvaWQgZGl2YV9tbnRfYWRkX3hkaV9hZGFwdGVyIChjb25zdCBERVNDUklQVE9SKiBkKSB7CiAgIGRpdmFfb3Nfc3Bpbl9sb2NrX21hZ2ljX3Qgb2xkX2lycWwsIG9sZF9pcnFsMTsKICAgZHdvcmQgc2VjLCB1c2VjLCBsb2dpY2FsLCBzZXJpYWwsIG9yZ19tYXNrOwotICBpbnQgaWQsIGJlc3RfaWQgPSAwLCBmcmVlX2lkID0gLTE7CisgIGludCBpZCwgZnJlZV9pZCA9IC0xOwogICBjaGFyIHRtcFsxMjhdOwogICBkaXZhX2RiZ19lbnRyeV9oZWFkX3QqIHBtc2cgPSBOVUxMOwogICBpbnQgbGVuOwpAQCAtOTA2LDcgKzkwNiw2IEBACiAgICAgICAgIGFuZCBzbG90IGlzIHN0aWxsIGZyZWUgLSByZXVzZSBpdAogICAgICAgICAqLwogICAgICAgZnJlZV9pZCA9IGlkOwotICAgICAgYmVzdF9pZCA9IDE7CiAgICAgICBicmVhazsKICAgICB9CiAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tZXNzYWdlLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWVzc2FnZS5jCmluZGV4IDhjNWM1NjMuLmEzMzk1OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tZXNzYWdlLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL21lc3NhZ2UuYwpAQCAtMTE5OCw3ICsxMTk4LDYgQEAKICAgd29yZCBjaDsKICAgd29yZCBpOwogICB3b3JkIEluZm87Ci0gIHdvcmQgQ0lQOwogICBieXRlIExpbmtMYXllcjsKICAgQVBJX1BBUlNFICogYWk7CiAgIEFQSV9QQVJTRSAqIGJwOwpAQCAtMTM0MCw3ICsxMzM5LDYgQEAKICAgICAgICAgYWRkX3MocGxjaSxCQywmcGFybXNbNl0pOwogICAgICAgICBhZGRfcyhwbGNpLExMQywmcGFybXNbN10pOwogICAgICAgICBhZGRfcyhwbGNpLEhMQywmcGFybXNbOF0pOwotICAgICAgICBDSVAgPSBHRVRfV09SRChwYXJtc1swXS5pbmZvKTsKICAgICAgICAgaWYgKGEtPkluZm9fTWFza1thcHBsLT5JZC0xXSAmIDB4MjAwKQogICAgICAgICB7CiAgICAgICAgICAgLyogZWFybHkgQjMgY29ubmVjdCAoQ0lQIG1hc2sgYml0IDkpIG5vIHJlbGVhc2UgYWZ0ZXIgYSBkaXNjICovCkBAIC00ODMwLDcgKzQ4MjgsNiBAQAogICBkd29yZCB4X0lkOwogICBkd29yZCBJZDsKICAgZHdvcmQgcklkOwotICB3b3JkIE51bWJlciA9IDA7CiAgIHdvcmQgaTsKICAgd29yZCBjaXA7CiAgIGR3b3JkIGNpcF9tYXNrOwpAQCAtNTEwNiw3ICs1MTAzLDcgQEAKICAgICB9CiAgIH0KIAotICBpZihwbGNpLT5hcHBsKSBOdW1iZXIgPSBwbGNpLT5hcHBsLT5OdW1iZXIrKzsKKyAgaWYocGxjaS0+YXBwbCkgcGxjaS0+YXBwbC0+TnVtYmVyKys7CiAKICAgc3dpdGNoKHBsY2ktPlNpZy5JbmQpIHsKICAgLyogUmVzcG9uc2UgdG8gR2V0X1N1cHBvcnRlZF9TZXJ2aWNlcyByZXF1ZXN0ICovCkBAIC01ODk0LDcgKzU4OTEsNiBAQAogICAgIGJyZWFrOwogCiAgIGNhc2UgVEVMX0NUUkw6Ci0gICAgTnVtYmVyID0gMDsKICAgICBpZSA9IG11bHRpX2ZhY19wYXJtc1swXTsgLyogaW5zcGVjdCB0aGUgZmFjaWxpdHkgaG9vayBpbmRpY2F0aW9ucyAqLwogICAgIGlmKHBsY2ktPlN0YXRlPT1BRFZBTkNFRF9WT0lDRV9TSUcgJiYgaWVbMF0pewogICAgICAgc3dpdGNoIChpZVsxXSYweDkxKSB7CkBAIC0xMDExOSwxNCArMTAxMTUsMTIgQEAKIAogc3RhdGljIHZvaWQgZHRtZl9jb25maXJtYXRpb24gKGR3b3JkIElkLCBQTENJICAgKnBsY2kpCiB7Ci0gIHdvcmQgSW5mbzsKICAgd29yZCBpOwogICAgIGJ5dGUgcmVzdWx0WzRdOwogCiAgIGRidWcgKDEsIGRwcmludGYgKCJbJTA2bHhdICVzLCVkOiBkdG1mX2NvbmZpcm1hdGlvbiIsCiAgICAgVW5NYXBJZCAoSWQpLCAoY2hhciAgICopKEZJTEVfKSwgX19MSU5FX18pKTsKIAotICBJbmZvID0gR09PRDsKICAgcmVzdWx0WzBdID0gMjsKICAgUFVUX1dPUkQgKCZyZXN1bHRbMV0sIERUTUZfU1VDQ0VTUyk7CiAgIGlmIChwbGNpLT5kdG1mX3NlbmRfcmVxdWVzdHMgIT0gMCkKQEAgLTExNTIwLDEzICsxMTUxNCwxMiBAQAogc3RhdGljIHZvaWQgbWl4ZXJfY29tbWFuZCAoZHdvcmQgSWQsIFBMQ0kgICAqcGxjaSwgYnl0ZSBSYykKIHsKICAgRElWQV9DQVBJX0FEQVBURVIgICAqYTsKLSAgd29yZCBpLCBpbnRlcm5hbF9jb21tYW5kLCBJbmZvOworICB3b3JkIGksIGludGVybmFsX2NvbW1hbmQ7CiAKICAgZGJ1ZyAoMSwgZHByaW50ZiAoIlslMDZseF0gJXMsJWQ6IG1peGVyX2NvbW1hbmQgJTAyeCAlMDR4ICUwNHgiLAogICAgIFVuTWFwSWQgKElkKSwgKGNoYXIgICAqKShGSUxFXyksIF9fTElORV9fLCBSYywgcGxjaS0+aW50ZXJuYWxfY29tbWFuZCwKICAgICBwbGNpLT5saV9jbWQpKTsKIAotICBJbmZvID0gR09PRDsKICAgYSA9IHBsY2ktPmFkYXB0ZXI7CiAgIGludGVybmFsX2NvbW1hbmQgPSBwbGNpLT5pbnRlcm5hbF9jb21tYW5kOwogICBwbGNpLT5pbnRlcm5hbF9jb21tYW5kID0gMDsKQEAgLTExNTUwLDcgKzExNTQzLDYgQEAKICAgICAgICAgewogICAgICAgICAgIGRidWcgKDEsIGRwcmludGYgKCJbJTA2bHhdICVzLCVkOiBMb2FkIG1peGVyIGZhaWxlZCIsCiAgICAgICAgICAgICBVbk1hcElkIChJZCksIChjaGFyICAgKikoRklMRV8pLCBfX0xJTkVfXykpOwotICAgICAgICAgIEluZm8gPSBfRkFDSUxJVFlfTk9UX1NVUFBPUlRFRDsKICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAocGxjaS0+aW50ZXJuYWxfY29tbWFuZCkKQEAgLTExNTkyLDcgKzExNTg0LDYgQEAKICAgICAgICAgICAgIH0gd2hpbGUgKChwbGNpLT5saV9wbGNpX2Jfd3JpdGVfcG9zICE9IHBsY2ktPmxpX3BsY2lfYl9yZXFfcG9zKQogICAgICAgICAgICAgICAmJiAhKHBsY2ktPmxpX3BsY2lfYl9xdWV1ZVtpXSAmIExJX1BMQ0lfQl9MQVNUX0ZMQUcpKTsKICAgICAgICAgICB9Ci0gICAgICAgICAgSW5mbyA9IF9GQUNJTElUWV9OT1RfU1VQUE9SVEVEOwogICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmIChwbGNpLT5pbnRlcm5hbF9jb21tYW5kKQpAQCAtMTE2MTAsNyArMTE2MDEsNiBAQAogICAgICAgICB7CiAgICAgICAgICAgZGJ1ZyAoMSwgZHByaW50ZiAoIlslMDZseF0gJXMsJWQ6IFVubG9hZCBtaXhlciBmYWlsZWQiLAogICAgICAgICAgICAgVW5NYXBJZCAoSWQpLCAoY2hhciAgICopKEZJTEVfKSwgX19MSU5FX18pKTsKLSAgICAgICAgICBJbmZvID0gX0ZBQ0lMSVRZX05PVF9TVVBQT1JURUQ7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHBsY2ktPmludGVybmFsX2NvbW1hbmQpCkBAIC0xMjQ0OCwxMyArMTI0MzgsMTEgQEAKIHN0YXRpYyB2b2lkIG1peGVyX2luZGljYXRpb25fY29lZnNfc2V0IChkd29yZCBJZCwgUExDSSAgICpwbGNpKQogewogICBkd29yZCBkOwotICBESVZBX0NBUElfQURBUFRFUiAgICphOwogICAgIGJ5dGUgcmVzdWx0WzEyXTsKIAogICBkYnVnICgxLCBkcHJpbnRmICgiWyUwNmx4XSAlcywlZDogbWl4ZXJfaW5kaWNhdGlvbl9jb2Vmc19zZXQiLAogICAgIFVuTWFwSWQgKElkKSwgKGNoYXIgICAqKShGSUxFXyksIF9fTElORV9fKSk7CiAKLSAgYSA9IHBsY2ktPmFkYXB0ZXI7CiAgIGlmIChwbGNpLT5saV9wbGNpX2JfcmVhZF9wb3MgIT0gcGxjaS0+bGlfcGxjaV9iX3JlcV9wb3MpCiAgIHsKICAgICBkbwpAQCAtMTQxMTEsMTMgKzE0MDk5LDExIEBACiAKIHN0YXRpYyB2b2lkIGZheF9jb25uZWN0X2Fja19jb21tYW5kIChkd29yZCBJZCwgUExDSSAgICpwbGNpLCBieXRlIFJjKQogewotICB3b3JkIEluZm87CiAgIHdvcmQgaW50ZXJuYWxfY29tbWFuZDsKIAogICBkYnVnICgxLCBkcHJpbnRmICgiWyUwNmx4XSAlcywlZDogZmF4X2Nvbm5lY3RfYWNrX2NvbW1hbmQgJTAyeCAlMDR4IiwKICAgICBVbk1hcElkIChJZCksIChjaGFyICAgKikoRklMRV8pLCBfX0xJTkVfXywgUmMsIHBsY2ktPmludGVybmFsX2NvbW1hbmQpKTsKIAotICBJbmZvID0gR09PRDsKICAgaW50ZXJuYWxfY29tbWFuZCA9IHBsY2ktPmludGVybmFsX2NvbW1hbmQ7CiAgIHBsY2ktPmludGVybmFsX2NvbW1hbmQgPSAwOwogICBzd2l0Y2ggKGludGVybmFsX2NvbW1hbmQpCkBAIC0xNDE2MCwxMyArMTQxNDYsMTEgQEAKIAogc3RhdGljIHZvaWQgZmF4X2VkYXRhX2Fja19jb21tYW5kIChkd29yZCBJZCwgUExDSSAgICpwbGNpLCBieXRlIFJjKQogewotICB3b3JkIEluZm87CiAgIHdvcmQgaW50ZXJuYWxfY29tbWFuZDsKIAogICBkYnVnICgxLCBkcHJpbnRmICgiWyUwNmx4XSAlcywlZDogZmF4X2VkYXRhX2Fja19jb21tYW5kICUwMnggJTA0eCIsCiAgICAgVW5NYXBJZCAoSWQpLCAoY2hhciAgICopKEZJTEVfKSwgX19MSU5FX18sIFJjLCBwbGNpLT5pbnRlcm5hbF9jb21tYW5kKSk7CiAKLSAgSW5mbyA9IEdPT0Q7CiAgIGludGVybmFsX2NvbW1hbmQgPSBwbGNpLT5pbnRlcm5hbF9jb21tYW5kOwogICBwbGNpLT5pbnRlcm5hbF9jb21tYW5kID0gMDsKICAgc3dpdGNoIChpbnRlcm5hbF9jb21tYW5kKQpAQCAtMTQzOTUsMTMgKzE0Mzc5LDExIEBACiAKIHN0YXRpYyB2b2lkIHJ0cF9jb25uZWN0X2IzX3Jlc19jb21tYW5kIChkd29yZCBJZCwgUExDSSAgICpwbGNpLCBieXRlIFJjKQogewotICB3b3JkIEluZm87CiAgIHdvcmQgaW50ZXJuYWxfY29tbWFuZDsKIAogICBkYnVnICgxLCBkcHJpbnRmICgiWyUwNmx4XSAlcywlZDogcnRwX2Nvbm5lY3RfYjNfcmVzX2NvbW1hbmQgJTAyeCAlMDR4IiwKICAgICBVbk1hcElkIChJZCksIChjaGFyICAgKikoRklMRV8pLCBfX0xJTkVfXywgUmMsIHBsY2ktPmludGVybmFsX2NvbW1hbmQpKTsKIAotICBJbmZvID0gR09PRDsKICAgaW50ZXJuYWxfY29tbWFuZCA9IHBsY2ktPmludGVybmFsX2NvbW1hbmQ7CiAgIHBsY2ktPmludGVybmFsX2NvbW1hbmQgPSAwOwogICBzd2l0Y2ggKGludGVybmFsX2NvbW1hbmQpCkBAIC0xNDQyMyw3ICsxNDQwNSw2IEBACiAgICAgewogICAgICAgZGJ1ZyAoMSwgZHByaW50ZiAoIlslMDZseF0gJXMsJWQ6IFJUUCBzZXR0aW5nIGNvbm5lY3QgcmVzcCBpbmZvIGZhaWxlZCAlMDJ4IiwKICAgICAgICAgVW5NYXBJZCAoSWQpLCAoY2hhciAgICopKEZJTEVfKSwgX19MSU5FX18sIFJjKSk7Ci0gICAgICBJbmZvID0gX1dST05HX1NUQVRFOwogICAgICAgYnJlYWs7CiAgICAgfQogICAgIGlmIChwbGNpX25sX2J1c3kgKHBsY2kpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3BjaS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3BjaS5jCmluZGV4IDQzNDNhYmEuLmIwMWE3YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNwY2kuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjcGNpLmMKQEAgLTQwNSw3ICs0MDUsNyBAQAogICAgIHVfY2hhciAqYmRhdGEsIGludCBjb3VudCkKIHsKIAl1X2NoYXIJCSpwdHIsICpwdHIxLCBuZXdfZjI7Ci0JaW50CQl0b3RhbCwgbWF4bGVuLCBuZXdfejI7CisJaW50CQltYXhsZW4sIG5ld196MjsKIAlzdHJ1Y3QgenQJKnpwOwogCiAJaWYgKChiY2gtPmRlYnVnICYgREVCVUdfSFdfQkNIQU5ORUwpICYmICEoYmNoLT5kZWJ1ZyAmIERFQlVHX0hXX0JGSUZPKSkKQEAgLTQzMSw3ICs0MzEsNiBAQAogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSEZDUENJOiByZWNlaXZlIG91dCBvZiBtZW1vcnlcbiIpOwogCQkJcmV0dXJuOwogCQl9Ci0JCXRvdGFsID0gY291bnQ7CiAJCWNvdW50IC09IDM7CiAJCXB0ciA9IHNrYl9wdXQoYmNoLT5yeF9za2IsIGNvdW50KTsKIApAQCAtOTY4LDcgKzk2Nyw2IEBACiBwaF9zdGF0ZV9udChzdHJ1Y3QgZGNoYW5uZWwgKmRjaCkKIHsKIAlzdHJ1Y3QgaGZjX3BjaQkqaGMgPSBkY2gtPmh3OwotCXVfY2hhcgl2YWw7CiAKIAlpZiAoZGNoLT5kZWJ1ZykKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBOVCBuZXdzdGF0ZSAleFxuIiwKQEAgLTk4Miw3ICs5ODAsNyBAQAogCQkJaGMtPmh3LmludF9tMSAmPSB+SEZDUENJX0lOVFNfVElNRVI7CiAJCQlXcml0ZV9oZmMoaGMsIEhGQ1BDSV9JTlRfTTEsIGhjLT5ody5pbnRfbTEpOwogCQkJLyogQ2xlYXIgYWxyZWFkeSBwZW5kaW5nIGludHMgKi8KLQkJCXZhbCA9IFJlYWRfaGZjKGhjLCBIRkNQQ0lfSU5UX1MxKTsKKwkJCSh2b2lkKSBSZWFkX2hmYyhoYywgSEZDUENJX0lOVF9TMSk7CiAJCQlXcml0ZV9oZmMoaGMsIEhGQ1BDSV9TVEFURVMsIDQgfCBIRkNQQ0lfTE9BRF9TVEFURSk7CiAJCQl1ZGVsYXkoMTApOwogCQkJV3JpdGVfaGZjKGhjLCBIRkNQQ0lfU1RBVEVTLCA0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNzdXNiLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjc3VzYi5jCmluZGV4IDg3MDA0NzQuLjNjY2JmZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNzdXNiLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3N1c2IuYwpAQCAtMTE4LDE0ICsxMTgsMTIgQEAKIGN0cmxfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCBoZmNzdXNiICpodyA9IChzdHJ1Y3QgaGZjc3VzYiAqKSB1cmItPmNvbnRleHQ7Ci0Jc3RydWN0IGN0cmxfYnVmICpidWY7CiAKIAlpZiAoZGVidWcgJiBEQkdfSEZDX0NBTExfVFJBQ0UpCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogJXNcbiIsIGh3LT5uYW1lLCBfX2Z1bmNfXyk7CiAKIAl1cmItPmRldiA9IGh3LT5kZXY7CiAJaWYgKGh3LT5jdHJsX2NudCkgewotCQlidWYgPSAmaHctPmN0cmxfYnVmZltody0+Y3RybF9vdXRfaWR4XTsKIAkJaHctPmN0cmxfY250LS07CS8qIGRlY3JlbWVudCBhY3R1YWwgY291bnQgKi8KIAkJaWYgKCsraHctPmN0cmxfb3V0X2lkeCA+PSBIRkNfQ1RSTF9CVUZTSVpFKQogCQkJaHctPmN0cmxfb3V0X2lkeCA9IDA7CS8qIHBvaW50ZXIgd3JhcCAqLwpAQCAtMTcyNiw3ICsxNzI0LDYgQEAKIHN0YXRpYyBpbnQKIHNldHVwX2hmY3N1c2Ioc3RydWN0IGhmY3N1c2IgKmh3KQogewotCWludCBlcnI7CiAJdV9jaGFyIGI7CiAKIAlpZiAoZGVidWcgJiBEQkdfSEZDX0NBTExfVFJBQ0UpCkBAIC0xNzQ1LDcgKzE3NDIsNyBAQAogCX0KIAogCS8qIGZpcnN0IHNldCB0aGUgbmVlZGVkIGNvbmZpZywgaW50ZXJmYWNlIGFuZCBhbHRlcm5hdGUgKi8KLQllcnIgPSB1c2Jfc2V0X2ludGVyZmFjZShody0+ZGV2LCBody0+aWZfdXNlZCwgaHctPmFsdF91c2VkKTsKKwkodm9pZCkgdXNiX3NldF9pbnRlcmZhY2UoaHctPmRldiwgaHctPmlmX3VzZWQsIGh3LT5hbHRfdXNlZCk7CiAKIAlody0+bGVkX3N0YXRlID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2FyY29maS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2FyY29maS5jCmluZGV4IDg1YThmZDguLjIxY2JiZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9hcmNvZmkuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYXJjb2ZpLmMKQEAgLTMwLDggKzMwLDYgQEAKIAogc3RhdGljIHZvaWQKIHNlbmRfYXJjb2ZpKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcykgewotCXVfY2hhciB2YWw7Ci0JCiAJYWRkX2FyY29maV90aW1lcihjcyk7CiAJY3MtPmRjLmlzYWMubW9uX3R4cCA9IDA7CiAJY3MtPmRjLmlzYWMubW9uX3R4YyA9IGNzLT5kYy5pc2FjLmFyY29maV9saXN0LT5sZW47CkBAIC00NSw3ICs0Myw3IEBACiAJY3MtPmRjLmlzYWMubW9jciAmPSAweDBmOwogCWNzLT5kYy5pc2FjLm1vY3IgfD0gMHhhMDsKIAljcy0+d3JpdGVpc2FjKGNzLCBJU0FDX01PQ1IsIGNzLT5kYy5pc2FjLm1vY3IpOwotCXZhbCA9IGNzLT5yZWFkaXNhYyhjcywgSVNBQ19NT1NSKTsKKwkodm9pZCkgY3MtPnJlYWRpc2FjKGNzLCBJU0FDX01PU1IpOwogCWNzLT53cml0ZWlzYWMoY3MsIElTQUNfTU9YMSwgY3MtPmRjLmlzYWMubW9uX3R4W2NzLT5kYy5pc2FjLm1vbl90eHArK10pOwogCWNzLT5kYy5pc2FjLm1vY3IgfD0gMHgxMDsKIAljcy0+d3JpdGVpc2FjKGNzLCBJU0FDX01PQ1IsIGNzLT5kYy5pc2FjLm1vY3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2FfY3MuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhX2NzLmMKaW5kZXggNDk2ZDQ3Ny4uOWU1ZTg3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2FfY3MuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYV9jcy5jCkBAIC0xMjksMTIgKzEyOSwxMCBAQAogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBlbHNhX2NzX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBsb2NhbF9pbmZvX3QgKmRldjsKICAgICBpbnQgaTsKICAgICBJc2RuQ2FyZF90IGljYXJkOwogCiAgICAgZGV2X2RiZygmbGluay0+ZGV2LCAiZWxzYV9jb25maWcoMHglcClcbiIsIGxpbmspOwotICAgIGRldiA9IGxpbmstPnByaXY7CiAKICAgICBsaW5rLT5jb25maWdfZmxhZ3MgfD0gQ09ORl9FTkFCTEVfSVJRIHwgQ09ORl9BVVRPX1NFVF9JTzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2Ffc2VyLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYV9zZXIuYwppbmRleCBjYmRhMzc5Li4zZmE5ZjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYV9zZXIuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYV9zZXIuYwpAQCAtMTA5LDExICsxMDksMTAgQEAKIHsKIAlpbnQJcXVvdCA9IDAsIGJhdWRfYmFzZTsKIAl1bnNpZ25lZCBjdmFsLCBmY3IgPSAwOwotCWludAliaXRzOwogCiAKIAkvKiBieXRlIHNpemUgYW5kIHBhcml0eSAqLwotCWN2YWwgPSAweDAzOyBiaXRzID0gMTA7CisJY3ZhbCA9IDB4MDM7CiAJLyogRGV0ZXJtaW5lIGRpdmlzb3IgYmFzZWQgb24gYmF1ZCByYXRlICovCiAJYmF1ZF9iYXNlID0gQkFTRV9CQVVEOwogCXF1b3QgPSBiYXVkX2Jhc2UgLyBiYXVkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY191c2IuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfdXNiLmMKaW5kZXggZWQ5NTI3YS4uZjQwN2RlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY191c2IuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3VzYi5jCkBAIC0yNTgsMTEgKzI1OCw5IEBACiBjdHJsX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKIHsKIAloZmN1c2JfZGF0YSAqaGZjID0gKGhmY3VzYl9kYXRhICopIHVyYi0+Y29udGV4dDsKLQljdHJsX2J1ZnQgKmJ1ZjsKIAogCXVyYi0+ZGV2ID0gaGZjLT5kZXY7CiAJaWYgKGhmYy0+Y3RybF9jbnQpIHsKLQkJYnVmID0gJmhmYy0+Y3RybF9idWZmW2hmYy0+Y3RybF9vdXRfaWR4XTsKIAkJaGZjLT5jdHJsX2NudC0tOwkvKiBkZWNyZW1lbnQgYWN0dWFsIGNvdW50ICovCiAJCWlmICgrK2hmYy0+Y3RybF9vdXRfaWR4ID49IEhGQ19DVFJMX0JVRlNJWkUpCiAJCQloZmMtPmN0cmxfb3V0X2lkeCA9IDA7CS8qIHBvaW50ZXIgd3JhcCAqLwpAQCAtMTA5Nyw3ICsxMDk1LDcgQEAKIGhmY191c2JfaW5pdChoZmN1c2JfZGF0YSAqIGhmYykKIHsKIAl1c2JfZmlmbyAqZmlmbzsKLQlpbnQgaSwgZXJyOworCWludCBpOwogCXVfY2hhciBiOwogCXN0cnVjdCBoaXNheF9iX2lmICpwX2JfaWZbMl07CiAKQEAgLTExMTIsNyArMTExMCw3IEBACiAJfQogCiAJLyogZmlyc3Qgc2V0IHRoZSBuZWVkZWQgY29uZmlnLCBpbnRlcmZhY2UgYW5kIGFsdGVybmF0ZSAqLwotCWVyciA9IHVzYl9zZXRfaW50ZXJmYWNlKGhmYy0+ZGV2LCBoZmMtPmlmX3VzZWQsIGhmYy0+YWx0X3VzZWQpOworCXVzYl9zZXRfaW50ZXJmYWNlKGhmYy0+ZGV2LCBoZmMtPmlmX3VzZWQsIGhmYy0+YWx0X3VzZWQpOwogCiAJLyogZG8gQ2hpcCByZXNldCAqLwogCXdyaXRlX3VzYihoZmMsIEhGQ1VTQl9DSVJNLCA4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9pcGFjeC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lwYWN4LmMKaW5kZXggMzMyMTA0MS4uNjkwODQwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2lwYWN4LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lwYWN4LmMKQEAgLTk2LDcgKzk2LDcgQEAKIHsKIAlzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MgPSAoc3RydWN0IElzZG5DYXJkU3RhdGUgKikgc3QtPmwxLmhhcmR3YXJlOwogCXN0cnVjdCBza19idWZmICpza2IgPSBhcmc7Ci0gIHVfY2hhciBjZGExX2NyLCBjZGEyX2NyOworCXVfY2hhciBjZGExX2NyOwogCiAJc3dpdGNoIChwcikgewogCQljYXNlIChQSF9EQVRBIHxSRVFVRVNUKToKQEAgLTE2Myw3ICsxNjMsNyBAQAogICAgICAgY3MtPndyaXRlaXNhYyhjcywgSVBBQ1hfQ0RBX1RTRFAxMCwgMHg4MCk7IC8vIFRpbWVzbG90IDAgaXMgQjEKICAgICAgIGNzLT53cml0ZWlzYWMoY3MsIElQQUNYX0NEQV9UU0RQMTEsIDB4ODEpOyAvLyBUaW1lc2xvdCAwIGlzIEIxCiAgICAgICBjZGExX2NyID0gY3MtPnJlYWRpc2FjKGNzLCBJUEFDWF9DREExX0NSKTsKLSAgICAgIGNkYTJfY3IgPSBjcy0+cmVhZGlzYWMoY3MsIElQQUNYX0NEQTJfQ1IpOworICAgICAgKHZvaWQpIGNzLT5yZWFkaXNhYyhjcywgSVBBQ1hfQ0RBMl9DUik7CiAJCQlpZiAoKGxvbmcpYXJnICYxKSB7IC8vIGxvb3AgQjEKICAgICAgICAgY3MtPndyaXRlaXNhYyhjcywgSVBBQ1hfQ0RBMV9DUiwgY2RhMV9jciB8MHgwYSk7IAogICAgICAgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2phZGUuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9qYWRlLmMKaW5kZXggZWE4Zjg0MC4uYTA2Y2VhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2phZGUuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvamFkZS5jCkBAIC0yMywxMCArMjMsOSBAQAogaW50CiBKYWRlVmVyc2lvbihzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MsIGNoYXIgKnMpCiB7Ci0gICAgaW50IHZlcixpOworICAgIGludCB2ZXI7CiAgICAgaW50IHRvID0gNTA7CiAgICAgY3MtPkJDX1dyaXRlX1JlZyhjcywgLTEsIDB4NTAsIDB4MTkpOwotICAgIGk9MDsKICAgICB3aGlsZSAodG8pIHsKICAgICAJdWRlbGF5KDEpOwogCXZlciA9IGNzLT5CQ19SZWFkX1JlZyhjcywgLTEsIDB4NjApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2wzZHNzMS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2wzZHNzMS5jCmluZGV4IDhlMmZkMDIuLmIwZDlhYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9sM2RzczEuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbDNkc3MxLmMKQEAgLTI5NDMsNyArMjk0Myw3IEBACiBzdGF0aWMgdm9pZAogZHNzMXVwKHN0cnVjdCBQU3RhY2sgKnN0LCBpbnQgcHIsIHZvaWQgKmFyZykKIHsKLQlpbnQgaSwgbXQsIGNyLCBjYXVzZSwgY2FsbFN0YXRlOworCWludCBpLCBtdCwgY3IsIGNhbGxTdGF0ZTsKIAljaGFyICpwdHI7CiAJdV9jaGFyICpwOwogCXN0cnVjdCBza19idWZmICpza2IgPSBhcmc7CkBAIC0zMDM0LDEyICszMDM0LDEwIEBACiAJCQkJcmV0dXJuOwogCQkJfQogCQl9IGVsc2UgaWYgKG10ID09IE1UX1NUQVRVUykgewotCQkJY2F1c2UgPSAwOwogCQkJaWYgKChwdHIgPSBmaW5kaWUoc2tiLT5kYXRhLCBza2ItPmxlbiwgSUVfQ0FVU0UsIDApKSAhPSBOVUxMKSB7CiAJCQkJcHRyKys7CiAJCQkJaWYgKCpwdHIrKyA9PSAyKQogCQkJCQlwdHIrKzsKLQkJCQljYXVzZSA9ICpwdHIgJiAweDdmOwogCQkJfQogCQkJY2FsbFN0YXRlID0gMDsKIAkJCWlmICgocHRyID0gZmluZGllKHNrYi0+ZGF0YSwgc2tiLT5sZW4sIElFX0NBTExfU1RBVEUsIDApKSAhPSBOVUxMKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvbDNuaTEuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9sM25pMS5jCmluZGV4IDdiMjI5YzAuLjA5MmRjYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9sM25pMS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9sM25pMS5jCkBAIC0yODgzLDcgKzI4ODMsNyBAQAogc3RhdGljIHZvaWQKIG5pMXVwKHN0cnVjdCBQU3RhY2sgKnN0LCBpbnQgcHIsIHZvaWQgKmFyZykKIHsKLQlpbnQgaSwgbXQsIGNyLCBjYXVzZSwgY2FsbFN0YXRlOworCWludCBpLCBtdCwgY3IsIGNhbGxTdGF0ZTsKIAljaGFyICpwdHI7CiAJdV9jaGFyICpwOwogCXN0cnVjdCBza19idWZmICpza2IgPSBhcmc7CkBAIC0yOTg2LDEyICsyOTg2LDEwIEBACiAJCQkJcmV0dXJuOwogCQkJfQogCQl9IGVsc2UgaWYgKG10ID09IE1UX1NUQVRVUykgewotCQkJY2F1c2UgPSAwOwogCQkJaWYgKChwdHIgPSBmaW5kaWUoc2tiLT5kYXRhLCBza2ItPmxlbiwgSUVfQ0FVU0UsIDApKSAhPSBOVUxMKSB7CiAJCQkJcHRyKys7CiAJCQkJaWYgKCpwdHIrKyA9PSAyKQogCQkJCQlwdHIrKzsKLQkJCQljYXVzZSA9ICpwdHIgJiAweDdmOwogCQkJfQogCQkJY2FsbFN0YXRlID0gMDsKIAkJCWlmICgocHRyID0gZmluZGllKHNrYi0+ZGF0YSwgc2tiLT5sZW4sIElFX0NBTExfU1RBVEUsIDApKSAhPSBOVUxMKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxLmggYi9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxLmgKaW5kZXggNjRmNzhhOC4uYjkwNTRjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MS5oCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODEuaApAQCAtMzc3LDcgKzM3Nyw2IEBACiB9OwogCiBzdHJ1Y3Qgc3Q1NDgxX2FkYXB0ZXIgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlpbnQgbnVtYmVyX29mX2xlZHM7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXY7CiAJc3RydWN0IGhpc2F4X2RfaWYgaGlzYXhfZF9pZjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfaW5pdC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9pbml0LmMKaW5kZXggMTM3NTEyMy4uOWY3ZmQxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9pbml0LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9pbml0LmMKQEAgLTQ2LDggKzQ2LDYgQEAKICNlbmRpZgogaW50IHN0NTQ4MV9kZWJ1ZzsKIAotc3RhdGljIExJU1RfSEVBRChhZGFwdGVyX2xpc3QpOwotCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiByZWdpc3RyYXRpb24vZGVyZWdpc3RyYXRpb24gd2l0aCB0aGUgVVNCIGxheWVyCiAgKi8KQEAgLTg2LDcgKzg0LDYgQEAKIAkJYWRhcHRlci0+YmNzW2ldLmJfaWYuaWZjLnByaXYgPSAmYWRhcHRlci0+YmNzW2ldOwogCQlhZGFwdGVyLT5iY3NbaV0uYl9pZi5pZmMubDJsMSA9IHN0NTQ4MV9iX2wybDE7CiAJfQotCWxpc3RfYWRkKCZhZGFwdGVyLT5saXN0LCAmYWRhcHRlcl9saXN0KTsKIAogCXJldHZhbCA9IHN0NTQ4MV9zZXR1cF91c2IoYWRhcHRlcik7CiAJaWYgKHJldHZhbCA8IDApCkBAIC0xMjUsNiArMTIyLDcgQEAKICBlcnJfdXNiOgogCXN0NTQ4MV9yZWxlYXNlX3VzYihhZGFwdGVyKTsKICBlcnI6CisJa2ZyZWUoYWRhcHRlcik7CiAJcmV0dXJuIC1FSU87CiB9CiAKQEAgLTE0Miw4ICsxNDAsNiBAQAogCWlmICghYWRhcHRlcikKIAkJcmV0dXJuOwogCQotCWxpc3RfZGVsKCZhZGFwdGVyLT5saXN0KTsKLQogCXN0NTQ4MV9zdG9wKGFkYXB0ZXIpOwogCXN0NTQ4MV9yZWxlYXNlX2IoJmFkYXB0ZXItPmJjc1sxXSk7CiAJc3Q1NDgxX3JlbGVhc2VfYigmYWRhcHRlci0+YmNzWzBdKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlc19jcy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzX2NzLmMKaW5kZXggYWEyNWUxOC4uMzYwZjllYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzX2NzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzX2NzLmMKQEAgLTExMSwxMiArMTExLDEwIEBACiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHRlbGVzX2NzX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBsb2NhbF9pbmZvX3QgKmRldjsKICAgICBpbnQgaTsKICAgICBJc2RuQ2FyZF90IGljYXJkOwogCiAgICAgZGV2X2RiZygmbGluay0+ZGV2LCAidGVsZXNfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKLSAgICBkZXYgPSBsaW5rLT5wcml2OwogCiAgICAgaSA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCB0ZWxlc19jc19jb25maWdjaGVjaywgTlVMTCk7CiAgICAgaWYgKGkgIT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jbG9nLmMgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2xvZy5jCmluZGV4IDJlZTkzZDAuLjIzNmNjN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jbG9nLmMKKysrIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Nsb2cuYwpAQCAtMTU1LDcgKzE1NSw2IEBACiBzdGF0aWMgc3NpemVfdAogaHlzZG5fbG9nX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqIG9mZikKIHsKLQl1bnNpZ25lZCBsb25nIHUgPSAwOwogCWludCByYzsKIAl1bnNpZ25lZCBjaGFyIHZhbGJ1ZlsxMjhdOwogCWh5c2RuX2NhcmQgKmNhcmQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CkBAIC0xNjcsMTIgKzE2NiwxMCBAQAogCiAJdmFsYnVmW2NvdW50XSA9IDA7CS8qIHRlcm1pbmF0aW5nIDAgKi8KIAotCXJjID0gc3RyaWN0X3N0cnRvdWwodmFsYnVmLCAwLCAmdSk7Ci0KLQlpZiAocmMgPT0gMCkgewotCQljYXJkLT5kZWJ1Z19mbGFncyA9IHU7CS8qIHJlbWVtYmVyIGRlYnVnIGZsYWdzICovCi0JCWh5c2RuX2FkZGxvZyhjYXJkLCAiZGVidWcgc2V0IHRvIDB4JWx4IiwgY2FyZC0+ZGVidWdfZmxhZ3MpOwotCX0KKwlyYyA9IGtzdHJ0b3VsKHZhbGJ1ZiwgMCwgJmNhcmQtPmRlYnVnX2ZsYWdzKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisJaHlzZG5fYWRkbG9nKGNhcmQsICJkZWJ1ZyBzZXQgdG8gMHglbHgiLCBjYXJkLT5kZWJ1Z19mbGFncyk7CiAJcmV0dXJuIChjb3VudCk7CiB9CQkJCS8qIGh5c2RuX2xvZ193cml0ZSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fY29tbW9uLmMgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fY29tbW9uLmMKaW5kZXggMTU2MzJiZC4uNmVkODJhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9jb21tb24uYwpAQCAtMzk5LDEzICszOTksOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lzZG4vY2FwaWNtZC5oPgogCiBzdGF0aWMgaW50Ci1pc2RuX2NhcGlfcmVjX2hsX21zZyhjYXBpX21zZyAqY20pIHsKLQkKLQlpbnQgZGk7Ci0JaW50IGNoOwotCQotCWRpID0gKGNtLT5hZHIuQ29udHJvbGxlciAmIDB4N2YpIC0xOwotCWNoID0gaXNkbl9kYzJtaW5vcihkaSwgKGNtLT5hZHIuQ29udHJvbGxlcj4+OCkmIDB4N2YpOworaXNkbl9jYXBpX3JlY19obF9tc2coY2FwaV9tc2cgKmNtKQorewogCXN3aXRjaChjbS0+Q29tbWFuZCkgewogCQljYXNlIENBUElfRkFDSUxJVFk6CiAJCQkvKiBpbiB0aGUgbW9tZW50IG9ubHkgaGFuZGxlZCBpbiB0dHkgKi8KQEAgLTEyNzgsNyArMTI3Myw2IEBACiAJdWludCBtaW5vciA9IGltaW5vcihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlpc2RuX2N0cmwgYzsKIAlpbnQgZHJ2aWR4OwotCWludCBjaGlkeDsKIAlpbnQgcmV0OwogCWludCBpOwogCWNoYXIgX191c2VyICpwOwpAQCAtMTM0MCw3ICsxMzM0LDYgQEAKIAkJZHJ2aWR4ID0gaXNkbl9taW5vcjJkcnYobWlub3IpOwogCQlpZiAoZHJ2aWR4IDwgMCkKIAkJCXJldHVybiAtRU5PREVWOwotCQljaGlkeCA9IGlzZG5fbWlub3IyY2hhbihtaW5vcik7CiAJCWlmICghKGRldi0+ZHJ2W2RydmlkeF0tPmZsYWdzICYgRFJWX0ZMQUdfUlVOTklORykpCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fbmV0LmMgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fbmV0LmMKaW5kZXggMmE3ZDE3Yy4uOTc5ODgxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX25ldC5jCisrKyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9uZXQuYwpAQCAtMTY3OCw3ICsxNjc4LDYgQEAKIAl1MzIgeW91cl9zZXE7CiAJX19iZTMyIGxvY2FsOwogCV9fYmUzMiAqYWRkciwgKm1hc2s7Ci0JdTE2IHVudXNlZDsKIAogCWlmIChza2ItPmxlbiA8IDE0KQogCQlyZXR1cm47CkBAIC0xNzIyLDcgKzE3MjEsNiBAQAogCQlscC0+Y2lzY29fbGFzdF9zbGFycF9pbiA9IGppZmZpZXM7CiAJCW15X3NlcSA9IGJlMzJfdG9fY3B1cCgoX19iZTMyICopKHAgKyAwKSk7CiAJCXlvdXJfc2VxID0gYmUzMl90b19jcHVwKChfX2JlMzIgKikocCArIDQpKTsKLQkJdW51c2VkID0gYmUxNl90b19jcHVwKChfX2JlMTYgKikocCArIDgpKTsKIAkJcCArPSAxMDsKIAkJbHAtPmNpc2NvX3lvdXJzZXEgPSBteV9zZXE7CiAJCWxwLT5jaXNjb19taW5lc2VlbiA9IHlvdXJfc2VxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3R0eS5jIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3R0eS5jCmluZGV4IDYwN2Q4NDYuLmQ4NTA0MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl90dHkuYworKysgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fdHR5LmMKQEAgLTk5OCw3ICs5OTgsNiBAQAogewogCXVpbnQgY2ZsYWcsCiAJIGN2YWwsCi0JIGZjciwKIAkgcXVvdDsKIAlpbnQgaTsKIApAQCAtMTAzNyw3ICsxMDM2LDYgQEAKIAkJY3ZhbCB8PSBVQVJUX0xDUl9QQVJJVFk7CiAJaWYgKCEoY2ZsYWcgJiBQQVJPREQpKQogCQljdmFsIHw9IFVBUlRfTENSX0VQQVI7Ci0JZmNyID0gMDsKIAogCS8qIENUUyBmbG93IGNvbnRyb2wgZmxhZyBhbmQgbW9kZW0gc3RhdHVzIGludGVycnVwdHMgKi8KIAlpZiAoY2ZsYWcgJiBDUlRTQ1RTKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vbUlTRE4vbGF5ZXIyLmMgYi9kcml2ZXJzL2lzZG4vbUlTRE4vbGF5ZXIyLmMKaW5kZXggZDBhZWI0NC4uNWJjMDAxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL21JU0ROL2xheWVyMi5jCisrKyBiL2RyaXZlcnMvaXNkbi9tSVNETi9sYXllcjIuYwpAQCAtMTY0MCw3ICsxNjQwLDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLWwyX3N0MTRfcGVyc2lzdGFudF9kYShzdHJ1Y3QgRnNtSW5zdCAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKQorbDJfc3QxNF9wZXJzaXN0ZW50X2RhKHN0cnVjdCBGc21JbnN0ICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCiB7CiAJc3RydWN0IGxheWVyMiAqbDIgPSBmaS0+dXNlcmRhdGE7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGFyZzsKQEAgLTE2NTQsNyArMTY1NCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1sMl9zdDVfcGVyc2lzdGFudF9kYShzdHJ1Y3QgRnNtSW5zdCAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKQorbDJfc3Q1X3BlcnNpc3RlbnRfZGEoc3RydWN0IEZzbUluc3QgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgbGF5ZXIyICpsMiA9IGZpLT51c2VyZGF0YTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYXJnOwpAQCAtMTY3MSw3ICsxNjcxLDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLWwyX3N0Nl9wZXJzaXN0YW50X2RhKHN0cnVjdCBGc21JbnN0ICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCitsMl9zdDZfcGVyc2lzdGVudF9kYShzdHJ1Y3QgRnNtSW5zdCAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCBsYXllcjIgKmwyID0gZmktPnVzZXJkYXRhOwogCXN0cnVjdCBza19idWZmICpza2IgPSBhcmc7CkBAIC0xNjg1LDcgKzE2ODUsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotbDJfcGVyc2lzdGFudF9kYShzdHJ1Y3QgRnNtSW5zdCAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKQorbDJfcGVyc2lzdGVudF9kYShzdHJ1Y3QgRnNtSW5zdCAqZmksIGludCBldmVudCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCBsYXllcjIgKmwyID0gZmktPnVzZXJkYXRhOwogCXN0cnVjdCBza19idWZmICpza2IgPSBhcmc7CkBAIC0xODI5LDE0ICsxODI5LDE0IEBACiAJe1NUX0wyXzYsIEVWX0wyX0ZSQU1FX0VSUk9SLCBsMl9mcmFtZV9lcnJvcn0sCiAJe1NUX0wyXzcsIEVWX0wyX0ZSQU1FX0VSUk9SLCBsMl9mcmFtZV9lcnJvcl9yZWVzdH0sCiAJe1NUX0wyXzgsIEVWX0wyX0ZSQU1FX0VSUk9SLCBsMl9mcmFtZV9lcnJvcl9yZWVzdH0sCi0Je1NUX0wyXzEsIEVWX0wxX0RFQUNUSVZBVEUsIGwyX3N0MTRfcGVyc2lzdGFudF9kYX0sCisJe1NUX0wyXzEsIEVWX0wxX0RFQUNUSVZBVEUsIGwyX3N0MTRfcGVyc2lzdGVudF9kYX0sCiAJe1NUX0wyXzIsIEVWX0wxX0RFQUNUSVZBVEUsIGwyX3N0MjRfdGVpX3JlbW92ZX0sCiAJe1NUX0wyXzMsIEVWX0wxX0RFQUNUSVZBVEUsIGwyX3N0M190ZWlfcmVtb3ZlfSwKLQl7U1RfTDJfNCwgRVZfTDFfREVBQ1RJVkFURSwgbDJfc3QxNF9wZXJzaXN0YW50X2RhfSwKLQl7U1RfTDJfNSwgRVZfTDFfREVBQ1RJVkFURSwgbDJfc3Q1X3BlcnNpc3RhbnRfZGF9LAotCXtTVF9MMl82LCBFVl9MMV9ERUFDVElWQVRFLCBsMl9zdDZfcGVyc2lzdGFudF9kYX0sCi0Je1NUX0wyXzcsIEVWX0wxX0RFQUNUSVZBVEUsIGwyX3BlcnNpc3RhbnRfZGF9LAotCXtTVF9MMl84LCBFVl9MMV9ERUFDVElWQVRFLCBsMl9wZXJzaXN0YW50X2RhfSwKKwl7U1RfTDJfNCwgRVZfTDFfREVBQ1RJVkFURSwgbDJfc3QxNF9wZXJzaXN0ZW50X2RhfSwKKwl7U1RfTDJfNSwgRVZfTDFfREVBQ1RJVkFURSwgbDJfc3Q1X3BlcnNpc3RlbnRfZGF9LAorCXtTVF9MMl82LCBFVl9MMV9ERUFDVElWQVRFLCBsMl9zdDZfcGVyc2lzdGVudF9kYX0sCisJe1NUX0wyXzcsIEVWX0wxX0RFQUNUSVZBVEUsIGwyX3BlcnNpc3RlbnRfZGF9LAorCXtTVF9MMl84LCBFVl9MMV9ERUFDVElWQVRFLCBsMl9wZXJzaXN0ZW50X2RhfSwKIH07CiAKIHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9tSVNETi9zb2NrZXQuYyBiL2RyaXZlcnMvaXNkbi9tSVNETi9zb2NrZXQuYwppbmRleCA3NDQ2ZDhiLi44ZTMyNTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vbUlTRE4vc29ja2V0LmMKKysrIGIvZHJpdmVycy9pc2RuL21JU0ROL3NvY2tldC5jCkBAIC00NTcsNiArNDU3LDkgQEAKIAlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQogCQlyZXR1cm4gLUVGQVVMVDsKIAorCWlmIChsZW4gIT0gc2l6ZW9mKGNoYXIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXN3aXRjaCAob3B0bmFtZSkgewogCWNhc2UgTUlTRE5fVElNRV9TVEFNUDoKIAkJaWYgKF9wbXMoc2spLT5jbWFzayAmIE1JU0ROX1RJTUVfU1RBTVApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1sbTM1MzAuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWxtMzUzMC5jCmluZGV4IGU3MDg5YTEuLmIzN2U2MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLWxtMzUzMC5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWxtMzUzMC5jCkBAIC0zNDksNiArMzQ5LDcgQEAKIAl7TE0zNTMwX05BTUUsIDB9LAogCXt9CiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGxtMzUzMF9pZCk7CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsbTM1MzBfaTJjX2RyaXZlciA9IHsKIAkucHJvYmUgPSBsbTM1MzBfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xndWVzdC9LY29uZmlnIGIvZHJpdmVycy9sZ3Vlc3QvS2NvbmZpZwppbmRleCAwYWFhMDU5Li4zNGFlNDlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xndWVzdC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbGd1ZXN0L0tjb25maWcKQEAgLTUsOCArNSwxMCBAQAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSB2ZXJ5IHNpbXBsZSBtb2R1bGUgd2hpY2ggYWxsb3dzIHlvdSB0byBydW4KIAkgIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBMaW51eCBrZXJuZWwsIHVzaW5nIHRoZQotCSAgImxndWVzdCIgY29tbWFuZCBmb3VuZCBpbiB0aGUgRG9jdW1lbnRhdGlvbi9sZ3Vlc3QgZGlyZWN0b3J5LgorCSAgImxndWVzdCIgY29tbWFuZCBmb3VuZCBpbiB0aGUgRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2xndWVzdAorCSAgZGlyZWN0b3J5LgorCiAJICBOb3RlIHRoYXQgImxndWVzdCIgaXMgcHJvbm91bmNlZCB0byByaHltZSB3aXRoICJmZWxsIHF1ZXN0IiwKLQkgIG5vdCAicnVzdHl2aXNvciIuICBTZWUgRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvbGd1ZXN0LnR4dC4KKwkgIG5vdCAicnVzdHl2aXNvciIuIFNlZSBEb2N1bWVudGF0aW9uL3ZpcnR1YWwvbGd1ZXN0L2xndWVzdC50eHQuCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uICBJZiBjdXJpb3VzLCBzYXkgTS4gIElmIG1hc29jaGlzdGljLCBzYXkgWS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGd1ZXN0L01ha2VmaWxlIGIvZHJpdmVycy9sZ3Vlc3QvTWFrZWZpbGUKaW5kZXggN2Q0NjNjMi4uOGFjOTQ3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZ3Vlc3QvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9sZ3Vlc3QvTWFrZWZpbGUKQEAgLTE4LDcgKzE4LDcgQEAKIEJlZXI6CiAJQGZvciBmIGluIFByZXBhcmF0aW9uIEd1ZXN0IERyaXZlcnMgTGF1bmNoZXIgSG9zdCBTd2l0Y2hlciBNYXN0ZXJ5OyBkbyBlY2hvICJ7PT0tICQkZiAtPT19IjsgbWFrZSAtcyAkJGY7IGRvbmU7IGVjaG8gIns9PS09PX0iCiBQcmVwYXJhdGlvbiBQcmVwYXJhdGlvbiEgR3Vlc3QgRHJpdmVycyBMYXVuY2hlciBIb3N0IFN3aXRjaGVyIE1hc3Rlcnk6Ci0JQHNoIC4uLy4uL0RvY3VtZW50YXRpb24vbGd1ZXN0L2V4dHJhY3QgJChQUkVGSVgpIGBmaW5kIC4uLy4uLyogLW5hbWUgJyouW2NoU10nIC13aG9sZW5hbWUgJypsZ3Vlc3QqJ2AKKwlAc2ggLi4vLi4vRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2xndWVzdC9leHRyYWN0ICQoUFJFRklYKSBgZmluZCAuLi8uLi8qIC1uYW1lICcqLltjaFNdJyAtd2hvbGVuYW1lICcqbGd1ZXN0KidgCiBQdXBweToKIAlAY2xlYXIKIAlAcHJpbnRmICIgICAgICBfXyAgXG4gKF9fXygpJ1xgO1xuIC8sICAgIC9cYFxuIFxcXFxcXFwiLS1cXFxcXFwgICBcbiIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYwppbmRleCA4YjAyMWViLi42Y2NjZDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgpAQCAtMjUyNywxMiArMjUyNyw5IEBACiAjaWYgZGVmaW5lZChDT05GSUdfU1VTUEVORCkgJiYgZGVmaW5lZChDT05GSUdfUFBDMzIpCiBpbnQgcG11X3N5c19zdXNwZW5kZWQ7CiAKLXN0YXRpYyBpbnQgcG11X3N5c19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcG11X3N5c2NvcmVfc3VzcGVuZCh2b2lkKQogewotCWlmIChzdGF0ZS5ldmVudCAhPSBQTV9FVkVOVF9TVVNQRU5EIHx8IHBtdV9zeXNfc3VzcGVuZGVkKQotCQlyZXR1cm4gMDsKLQotCS8qIFN1c3BlbmQgUE1VIGV2ZW50IGludGVycnVwdHMgKi9cCisJLyogU3VzcGVuZCBQTVUgZXZlbnQgaW50ZXJydXB0cyAqLwogCXBtdV9zdXNwZW5kKCk7CiAJcG11X3N5c19zdXNwZW5kZWQgPSAxOwogCkBAIC0yNTQ0LDEyICsyNTQxLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcG11X3N5c19yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldikKK3N0YXRpYyB2b2lkIHBtdV9zeXNjb3JlX3Jlc3VtZSh2b2lkKQogewogCXN0cnVjdCBhZGJfcmVxdWVzdCByZXE7CiAKIAlpZiAoIXBtdV9zeXNfc3VzcGVuZGVkKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCiAJLyogVGVsbCBQTVUgd2UgYXJlIHJlYWR5ICovCiAJcG11X3JlcXVlc3QoJnJlcSwgTlVMTCwgMiwgUE1VX1NZU1RFTV9SRUFEWSwgMik7CkBAIC0yNTYyLDUwICsyNTU5LDIxIEBACiAJLyogUmVzdW1lIFBNVSBldmVudCBpbnRlcnJ1cHRzICovCiAJcG11X3Jlc3VtZSgpOwogCXBtdV9zeXNfc3VzcGVuZGVkID0gMDsKLQotCXJldHVybiAwOwogfQogCi0jZW5kaWYgLyogQ09ORklHX1NVU1BFTkQgJiYgQ09ORklHX1BQQzMyICovCi0KLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHBtdV9zeXNjbGFzcyA9IHsKLQkubmFtZSA9ICJwbXUiLAorc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBwbXVfc3lzY29yZV9vcHMgPSB7CisJLnN1c3BlbmQgPSBwbXVfc3lzY29yZV9zdXNwZW5kLAorCS5yZXN1bWUgPSBwbXVfc3lzY29yZV9yZXN1bWUsCiB9OwogCi1zdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgZGV2aWNlX3BtdSA9IHsKLQkuY2xzCQk9ICZwbXVfc3lzY2xhc3MsCi19OwotCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgZHJpdmVyX3BtdSA9IHsKLSNpZiBkZWZpbmVkKENPTkZJR19TVVNQRU5EKSAmJiBkZWZpbmVkKENPTkZJR19QUEMzMikKLQkuc3VzcGVuZAk9ICZwbXVfc3lzX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSAmcG11X3N5c19yZXN1bWUsCi0jZW5kaWYgLyogQ09ORklHX1NVU1BFTkQgJiYgQ09ORklHX1BQQzMyICovCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3BtdV9zeXNmcyh2b2lkKQorc3RhdGljIGludCBwbXVfc3lzY29yZV9yZWdpc3Rlcih2b2lkKQogewotCWludCByYzsKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmcG11X3N5c2NvcmVfb3BzKTsKIAotCXJjID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZwbXVfc3lzY2xhc3MpOwotCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCByZWdpc3RlcmluZyBQTVUgc3lzIGNsYXNzXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCXJjID0gc3lzZGV2X3JlZ2lzdGVyKCZkZXZpY2VfcG11KTsKLQlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgcmVnaXN0ZXJpbmcgUE1VIHN5cyBkZXZpY2VcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JcmMgPSBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZwbXVfc3lzY2xhc3MsICZkcml2ZXJfcG11KTsKLQlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgcmVnaXN0ZXJpbmcgUE1VIHN5cyBkcml2ZXJcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CiAJcmV0dXJuIDA7CiB9Ci0KLXN1YnN5c19pbml0Y2FsbChpbml0X3BtdV9zeXNmcyk7CitzdWJzeXNfaW5pdGNhbGwocG11X3N5c2NvcmVfcmVnaXN0ZXIpOworI2VuZGlmIC8qIENPTkZJR19TVVNQRU5EICYmIENPTkZJR19QUEMzMiAqLwogCiBFWFBPUlRfU1lNQk9MKHBtdV9yZXF1ZXN0KTsKIEVYUE9SVF9TWU1CT0wocG11X3F1ZXVlX3JlcXVlc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9iaXRtYXAuYyBiL2RyaXZlcnMvbWQvYml0bWFwLmMKaW5kZXggNWM5MzYyNy4uNzBiZDczOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9iaXRtYXAuYworKysgYi9kcml2ZXJzL21kL2JpdG1hcC5jCkBAIC00OTMsMTEgKzQ5MywxMSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJpdG1hcC0+bG9jaywgZmxhZ3MpOwogCXNiID0ga21hcF9hdG9taWMoYml0bWFwLT5zYl9wYWdlLCBLTV9VU0VSMCk7CiAJc2ItPmV2ZW50cyA9IGNwdV90b19sZTY0KGJpdG1hcC0+bWRkZXYtPmV2ZW50cyk7Ci0JaWYgKGJpdG1hcC0+bWRkZXYtPmV2ZW50cyA8IGJpdG1hcC0+ZXZlbnRzX2NsZWFyZWQpIHsKKwlpZiAoYml0bWFwLT5tZGRldi0+ZXZlbnRzIDwgYml0bWFwLT5ldmVudHNfY2xlYXJlZCkKIAkJLyogcm9ja2luZyBiYWNrIHRvIHJlYWQtb25seSAqLwogCQliaXRtYXAtPmV2ZW50c19jbGVhcmVkID0gYml0bWFwLT5tZGRldi0+ZXZlbnRzOwotCQlzYi0+ZXZlbnRzX2NsZWFyZWQgPSBjcHVfdG9fbGU2NChiaXRtYXAtPmV2ZW50c19jbGVhcmVkKTsKLQl9CisJc2ItPmV2ZW50c19jbGVhcmVkID0gY3B1X3RvX2xlNjQoYml0bWFwLT5ldmVudHNfY2xlYXJlZCk7CisJc2ItPnN0YXRlID0gY3B1X3RvX2xlMzIoYml0bWFwLT5mbGFncyk7CiAJLyogSnVzdCBpbiBjYXNlIHRoZXNlIGhhdmUgYmVlbiBjaGFuZ2VkIHZpYSBzeXNmczogKi8KIAlzYi0+ZGFlbW9uX3NsZWVwID0gY3B1X3RvX2xlMzIoYml0bWFwLT5tZGRldi0+Yml0bWFwX2luZm8uZGFlbW9uX3NsZWVwL0haKTsKIAlzYi0+d3JpdGVfYmVoaW5kID0gY3B1X3RvX2xlMzIoYml0bWFwLT5tZGRldi0+Yml0bWFwX2luZm8ubWF4X3dyaXRlX2JlaGluZCk7CkBAIC02MTgsNyArNjE4LDcgQEAKIAlpZiAobGUzMl90b19jcHUoc2ItPnZlcnNpb24pID09IEJJVE1BUF9NQUpPUl9IT1NURU5ESUFOKQogCQliaXRtYXAtPmZsYWdzIHw9IEJJVE1BUF9IT1NURU5ESUFOOwogCWJpdG1hcC0+ZXZlbnRzX2NsZWFyZWQgPSBsZTY0X3RvX2NwdShzYi0+ZXZlbnRzX2NsZWFyZWQpOwotCWlmIChzYi0+c3RhdGUgJiBjcHVfdG9fbGUzMihCSVRNQVBfU1RBTEUpKQorCWlmIChiaXRtYXAtPmZsYWdzICYgQklUTUFQX1NUQUxFKQogCQliaXRtYXAtPmV2ZW50c19jbGVhcmVkID0gYml0bWFwLT5tZGRldi0+ZXZlbnRzOwogCWVyciA9IDA7CiBvdXQ6CkBAIC02NTIsOSArNjUyLDExIEBACiAJc3dpdGNoIChvcCkgewogCWNhc2UgTUFTS19TRVQ6CiAJCXNiLT5zdGF0ZSB8PSBjcHVfdG9fbGUzMihiaXRzKTsKKwkJYml0bWFwLT5mbGFncyB8PSBiaXRzOwogCQlicmVhazsKIAljYXNlIE1BU0tfVU5TRVQ6CiAJCXNiLT5zdGF0ZSAmPSBjcHVfdG9fbGUzMih+Yml0cyk7CisJCWJpdG1hcC0+ZmxhZ3MgJj0gfmJpdHM7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCUJVRygpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jCmluZGV4IDZlODUzYzYuLmFhNjQwYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuYworKysgYi9kcml2ZXJzL21kL21kLmMKQEAgLTMxNzAsNiArMzE3MCw3IEBACiAJbWRkZXYtPmxheW91dCA9IG1kZGV2LT5uZXdfbGF5b3V0OwogCW1kZGV2LT5jaHVua19zZWN0b3JzID0gbWRkZXYtPm5ld19jaHVua19zZWN0b3JzOwogCW1kZGV2LT5kZWx0YV9kaXNrcyA9IDA7CisJbWRkZXYtPmRlZ3JhZGVkID0gMDsKIAlpZiAobWRkZXYtPnBlcnMtPnN5bmNfcmVxdWVzdCA9PSBOVUxMKSB7CiAJCS8qIHRoaXMgaXMgbm93IGFuIGFycmF5IHdpdGhvdXQgcmVkdW5kYW5jeSwgc28KIAkJICogaXQgbXVzdCBhbHdheXMgYmUgaW5fc3luYwpAQCAtMzMyMyw3ICszMzI0LDcgQEAKIAljaGFyICplOwogCXVuc2lnbmVkIGxvbmcgbG9uZyBuID0gc2ltcGxlX3N0cnRvdWxsKGJ1ZiwgJmUsIDEwKTsKIAotCWlmIChtZGRldi0+cGVycykKKwlpZiAobWRkZXYtPnBlcnMgJiYgIXRlc3RfYml0KE1EX1JFQ09WRVJZX0ZST1pFTiwgJm1kZGV2LT5yZWNvdmVyeSkpCiAJCXJldHVybiAtRUJVU1k7CiAJaWYgKGNtZF9tYXRjaChidWYsICJub25lIikpCiAJCW4gPSBNYXhTZWN0b3I7CkBAIC00MzQ2LDEzICs0MzQ3LDE5IEBACiAJZGlzay0+Zm9wcyA9ICZtZF9mb3BzOwogCWRpc2stPnByaXZhdGVfZGF0YSA9IG1kZGV2OwogCWRpc2stPnF1ZXVlID0gbWRkZXYtPnF1ZXVlOworCWJsa19xdWV1ZV9mbHVzaChtZGRldi0+cXVldWUsIFJFUV9GTFVTSCB8IFJFUV9GVUEpOwogCS8qIEFsbG93IGV4dGVuZGVkIHBhcnRpdGlvbnMuICBUaGlzIG1ha2VzIHRoZQogCSAqICdtZHAnIGRldmljZSByZWR1bmRhbnQsIGJ1dCB3ZSBjYW4ndCByZWFsbHkKIAkgKiByZW1vdmUgaXQgbm93LgogCSAqLwogCWRpc2stPmZsYWdzIHw9IEdFTkhEX0ZMX0VYVF9ERVZUOwotCWFkZF9kaXNrKGRpc2spOwogCW1kZGV2LT5nZW5kaXNrID0gZGlzazsKKwkvKiBBcyBzb29uIGFzIHdlIGNhbGwgYWRkX2Rpc2soKSwgYW5vdGhlciB0aHJlYWQgY291bGQgZ2V0CisJICogdGhyb3VnaCB0byBtZF9vcGVuLCBzbyBtYWtlIHN1cmUgaXQgZG9lc24ndCBnZXQgdG9vIGZhcgorCSAqLworCW11dGV4X2xvY2soJm1kZGV2LT5vcGVuX211dGV4KTsKKwlhZGRfZGlzayhkaXNrKTsKKwogCWVycm9yID0ga29iamVjdF9pbml0X2FuZF9hZGQoJm1kZGV2LT5rb2JqLCAmbWRfa3R5cGUsCiAJCQkJICAgICAmZGlza190b19kZXYoZGlzayktPmtvYmosICIlcyIsICJtZCIpOwogCWlmIChlcnJvcikgewpAQCAtNDM2Niw4ICs0MzczLDcgQEAKIAlpZiAobWRkZXYtPmtvYmouc2QgJiYKIAkgICAgc3lzZnNfY3JlYXRlX2dyb3VwKCZtZGRldi0+a29iaiwgJm1kX2JpdG1hcF9ncm91cCkpCiAJCXByaW50ayhLRVJOX0RFQlVHICJwb2ludGxlc3Mgd2FybmluZ1xuIik7Ci0KLQlibGtfcXVldWVfZmx1c2gobWRkZXYtPnF1ZXVlLCBSRVFfRkxVU0ggfCBSRVFfRlVBKTsKKwltdXRleF91bmxvY2soJm1kZGV2LT5vcGVuX211dGV4KTsKICBhYm9ydDoKIAltdXRleF91bmxvY2soJmRpc2tzX211dGV4KTsKIAlpZiAoIWVycm9yICYmIG1kZGV2LT5rb2JqLnNkKSB7CkBAIC01MjEwLDYgKzUyMTYsMTYgQEAKIAkJfSBlbHNlCiAJCQlzdXBlcl90eXBlc1ttZGRldi0+bWFqb3JfdmVyc2lvbl0uCiAJCQkJdmFsaWRhdGVfc3VwZXIobWRkZXYsIHJkZXYpOworCQlpZiAoKGluZm8tPnN0YXRlICYgKDE8PE1EX0RJU0tfU1lOQykpICYmCisJCSAgICAoIXRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykgfHwKKwkJICAgICByZGV2LT5yYWlkX2Rpc2sgIT0gaW5mby0+cmFpZF9kaXNrKSkgeworCQkJLyogVGhpcyB3YXMgYSBob3QtYWRkIHJlcXVlc3QsIGJ1dCBldmVudHMgZG9lc24ndAorCQkJICogbWF0Y2gsIHNvIHJlamVjdCBpdC4KKwkJCSAqLworCQkJZXhwb3J0X3JkZXYocmRldik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCiAJCWlmICh0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKQogCQkJcmRldi0+c2F2ZWRfcmFpZF9kaXNrID0gcmRldi0+cmFpZF9kaXNrOwogCQllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL211bHRpcGF0aC5jIGIvZHJpdmVycy9tZC9tdWx0aXBhdGguYwppbmRleCBjMzU4OTA5Li4zNTM1YzIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL211bHRpcGF0aC5jCisrKyBiL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogCWludCBpOwogCQogCXNlcV9wcmludGYgKHNlcSwgIiBbJWQvJWRdIFsiLCBjb25mLT5yYWlkX2Rpc2tzLAotCQkJCQkJIGNvbmYtPndvcmtpbmdfZGlza3MpOworCQkgICAgY29uZi0+cmFpZF9kaXNrcyAtIG1kZGV2LT5kZWdyYWRlZCk7CiAJZm9yIChpID0gMDsgaSA8IGNvbmYtPnJhaWRfZGlza3M7IGkrKykKIAkJc2VxX3ByaW50ZiAoc2VxLCAiJXMiLAogCQkJICAgICAgIGNvbmYtPm11bHRpcGF0aHNbaV0ucmRldiAmJiAKQEAgLTE4NiwzNSArMTg2LDM2IEBACiBzdGF0aWMgdm9pZCBtdWx0aXBhdGhfZXJyb3IgKG1kZGV2X3QgKm1kZGV2LCBtZGtfcmRldl90ICpyZGV2KQogewogCW11bHRpcGF0aF9jb25mX3QgKmNvbmYgPSBtZGRldi0+cHJpdmF0ZTsKKwljaGFyIGJbQkRFVk5BTUVfU0laRV07CiAKLQlpZiAoY29uZi0+d29ya2luZ19kaXNrcyA8PSAxKSB7CisJaWYgKGNvbmYtPnJhaWRfZGlza3MgLSBtZGRldi0+ZGVncmFkZWQgPD0gMSkgewogCQkvKgogCQkgKiBVaCBvaCwgd2UgY2FuIGRvIG5vdGhpbmcgaWYgdGhpcyBpcyBvdXIgbGFzdCBwYXRoLCBidXQKIAkJICogZmlyc3QgY2hlY2sgaWYgdGhpcyBpcyBhIHF1ZXVlZCByZXF1ZXN0IGZvciBhIGRldmljZQogCQkgKiB3aGljaCBoYXMganVzdCBmYWlsZWQuCiAJCSAqLwogCQlwcmludGsoS0VSTl9BTEVSVCAKLQkJCSJtdWx0aXBhdGg6IG9ubHkgb25lIElPIHBhdGggbGVmdCBhbmQgSU8gZXJyb3IuXG4iKTsKKwkJICAgICAgICJtdWx0aXBhdGg6IG9ubHkgb25lIElPIHBhdGggbGVmdCBhbmQgSU8gZXJyb3IuXG4iKTsKIAkJLyogbGVhdmUgaXQgYWN0aXZlLi4uIGl0J3MgYWxsIHdlIGhhdmUgKi8KLQl9IGVsc2UgewotCQkvKgotCQkgKiBNYXJrIGRpc2sgYXMgdW51c2FibGUKLQkJICovCi0JCWlmICghdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKSB7Ci0JCQljaGFyIGJbQkRFVk5BTUVfU0laRV07Ci0JCQljbGVhcl9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKLQkJCXNldF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpOwotCQkJc2V0X2JpdChNRF9DSEFOR0VfREVWUywgJm1kZGV2LT5mbGFncyk7Ci0JCQljb25mLT53b3JraW5nX2Rpc2tzLS07Ci0JCQltZGRldi0+ZGVncmFkZWQrKzsKLQkJCXByaW50ayhLRVJOX0FMRVJUICJtdWx0aXBhdGg6IElPIGZhaWx1cmUgb24gJXMsIgotCQkJCSIgZGlzYWJsaW5nIElPIHBhdGguXG4iCi0JCQkJIm11bHRpcGF0aDogT3BlcmF0aW9uIGNvbnRpbnVpbmciCi0JCQkJIiBvbiAlZCBJTyBwYXRocy5cbiIsCi0JCQkJYmRldm5hbWUgKHJkZXYtPmJkZXYsYiksCi0JCQkJY29uZi0+d29ya2luZ19kaXNrcyk7Ci0JCX0KKwkJcmV0dXJuOwogCX0KKwkvKgorCSAqIE1hcmsgZGlzayBhcyB1bnVzYWJsZQorCSAqLworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwkJbWRkZXYtPmRlZ3JhZGVkKys7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmYtPmRldmljZV9sb2NrLCBmbGFncyk7CisJfQorCXNldF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpOworCXNldF9iaXQoTURfQ0hBTkdFX0RFVlMsICZtZGRldi0+ZmxhZ3MpOworCXByaW50ayhLRVJOX0FMRVJUICJtdWx0aXBhdGg6IElPIGZhaWx1cmUgb24gJXMsIgorCSAgICAgICAiIGRpc2FibGluZyBJTyBwYXRoLlxuIgorCSAgICAgICAibXVsdGlwYXRoOiBPcGVyYXRpb24gY29udGludWluZyIKKwkgICAgICAgIiBvbiAlZCBJTyBwYXRocy5cbiIsCisJICAgICAgIGJkZXZuYW1lKHJkZXYtPmJkZXYsIGIpLAorCSAgICAgICBjb25mLT5yYWlkX2Rpc2tzIC0gbWRkZXYtPmRlZ3JhZGVkKTsKIH0KIAogc3RhdGljIHZvaWQgcHJpbnRfbXVsdGlwYXRoX2NvbmYgKG11bHRpcGF0aF9jb25mX3QgKmNvbmYpCkBAIC0yMjcsNyArMjI4LDcgQEAKIAkJcHJpbnRrKCIoY29uZj09TlVMTClcbiIpOwogCQlyZXR1cm47CiAJfQotCXByaW50aygiIC0tLSB3ZDolZCByZDolZFxuIiwgY29uZi0+d29ya2luZ19kaXNrcywKKwlwcmludGsoIiAtLS0gd2Q6JWQgcmQ6JWRcbiIsIGNvbmYtPnJhaWRfZGlza3MgLSBjb25mLT5tZGRldi0+ZGVncmFkZWQsCiAJCQkgY29uZi0+cmFpZF9kaXNrcyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY29uZi0+cmFpZF9kaXNrczsgaSsrKSB7CkBAIC0yNzQsMTAgKzI3NSwxMSBAQAogCQkJCQkJCSAgIFBBR0VfQ0FDSEVfU0laRSAtIDEpOwogCQkJfQogCi0JCQljb25mLT53b3JraW5nX2Rpc2tzKys7CisJCQlzcGluX2xvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CiAJCQltZGRldi0+ZGVncmFkZWQtLTsKIAkJCXJkZXYtPnJhaWRfZGlzayA9IHBhdGg7CiAJCQlzZXRfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7CisJCQlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAkJCXJjdV9hc3NpZ25fcG9pbnRlcihwLT5yZGV2LCByZGV2KTsKIAkJCWVyciA9IDA7CiAJCQltZF9pbnRlZ3JpdHlfYWRkX3JkZXYocmRldiwgbWRkZXYpOwpAQCAtMzkxLDYgKzM5Myw3IEBACiAJaW50IGRpc2tfaWR4OwogCXN0cnVjdCBtdWx0aXBhdGhfaW5mbyAqZGlzazsKIAltZGtfcmRldl90ICpyZGV2OworCWludCB3b3JraW5nX2Rpc2tzOwogCiAJaWYgKG1kX2NoZWNrX25vX2JpdG1hcChtZGRldikpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNDI0LDcgKzQyNyw3IEBACiAJCWdvdG8gb3V0X2ZyZWVfY29uZjsKIAl9CiAKLQljb25mLT53b3JraW5nX2Rpc2tzID0gMDsKKwl3b3JraW5nX2Rpc2tzID0gMDsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KSB7CiAJCWRpc2tfaWR4ID0gcmRldi0+cmFpZF9kaXNrOwogCQlpZiAoZGlza19pZHggPCAwIHx8CkBAIC00NDYsNyArNDQ5LDcgQEAKIAkJfQogCiAJCWlmICghdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKQotCQkJY29uZi0+d29ya2luZ19kaXNrcysrOworCQkJd29ya2luZ19kaXNrcysrOwogCX0KIAogCWNvbmYtPnJhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrczsKQEAgLTQ1NCwxMiArNDU3LDEyIEBACiAJc3Bpbl9sb2NrX2luaXQoJmNvbmYtPmRldmljZV9sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmY29uZi0+cmV0cnlfbGlzdCk7CiAKLQlpZiAoIWNvbmYtPndvcmtpbmdfZGlza3MpIHsKKwlpZiAoIXdvcmtpbmdfZGlza3MpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJtdWx0aXBhdGg6IG5vIG9wZXJhdGlvbmFsIElPIHBhdGhzIGZvciAlc1xuIiwKIAkJCW1kbmFtZShtZGRldikpOwogCQlnb3RvIG91dF9mcmVlX2NvbmY7CiAJfQotCW1kZGV2LT5kZWdyYWRlZCA9IGNvbmYtPnJhaWRfZGlza3MgLSBjb25mLT53b3JraW5nX2Rpc2tzOworCW1kZGV2LT5kZWdyYWRlZCA9IGNvbmYtPnJhaWRfZGlza3MgLSB3b3JraW5nX2Rpc2tzOwogCiAJY29uZi0+cG9vbCA9IG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcG9vbChOUl9SRVNFUlZFRF9CVUZTLAogCQkJCQkJIHNpemVvZihzdHJ1Y3QgbXVsdGlwYXRoX2JoKSk7CkBAIC00ODEsNyArNDg0LDggQEAKIAogCXByaW50ayhLRVJOX0lORk8gCiAJCSJtdWx0aXBhdGg6IGFycmF5ICVzIGFjdGl2ZSB3aXRoICVkIG91dCBvZiAlZCBJTyBwYXRoc1xuIiwKLQkJbWRuYW1lKG1kZGV2KSwgY29uZi0+d29ya2luZ19kaXNrcywgbWRkZXYtPnJhaWRfZGlza3MpOworCQltZG5hbWUobWRkZXYpLCBjb25mLT5yYWlkX2Rpc2tzIC0gbWRkZXYtPmRlZ3JhZGVkLAorCSAgICAgICBtZGRldi0+cmFpZF9kaXNrcyk7CiAJLyoKIAkgKiBPaywgZXZlcnl0aGluZyBpcyBqdXN0IGZpbmUgbm93CiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL211bHRpcGF0aC5oIGIvZHJpdmVycy9tZC9tdWx0aXBhdGguaAppbmRleCBkMWMyYThkLi4zYzVhNDVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL211bHRpcGF0aC5oCisrKyBiL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmgKQEAgLTksNyArOSw2IEBACiAJbWRkZXZfdAkJCSptZGRldjsKIAlzdHJ1Y3QgbXVsdGlwYXRoX2luZm8JKm11bHRpcGF0aHM7CiAJaW50CQkJcmFpZF9kaXNrczsKLQlpbnQJCQl3b3JraW5nX2Rpc2tzOwogCXNwaW5sb2NrX3QJCWRldmljZV9sb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQJcmV0cnlfbGlzdDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5jIGIvZHJpdmVycy9tZC9yYWlkMS5jCmluZGV4IDJiN2E3ZmYuLjVkMDk2MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuYworKysgYi9kcml2ZXJzL21kL3JhaWQxLmMKQEAgLTI5NywyMyArMjk3LDI0IEBACiAJcmRldl9kZWNfcGVuZGluZyhjb25mLT5taXJyb3JzW21pcnJvcl0ucmRldiwgY29uZi0+bWRkZXYpOwogfQogCi1zdGF0aWMgdm9pZCByMV9iaW9fd3JpdGVfZG9uZShyMWJpb190ICpyMV9iaW8sIGludCB2Y250LCBzdHJ1Y3QgYmlvX3ZlYyAqYnYsCi0JCQkgICAgICBpbnQgYmVoaW5kKQorc3RhdGljIHZvaWQgcjFfYmlvX3dyaXRlX2RvbmUocjFiaW9fdCAqcjFfYmlvKQogewogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyMV9iaW8tPnJlbWFpbmluZykpCiAJewogCQkvKiBpdCByZWFsbHkgaXMgdGhlIGVuZCBvZiB0aGlzIHJlcXVlc3QgKi8KIAkJaWYgKHRlc3RfYml0KFIxQklPX0JlaGluZElPLCAmcjFfYmlvLT5zdGF0ZSkpIHsKIAkJCS8qIGZyZWUgZXh0cmEgY29weSBvZiB0aGUgZGF0YSBwYWdlcyAqLwotCQkJaW50IGkgPSB2Y250OworCQkJaW50IGkgPSByMV9iaW8tPmJlaGluZF9wYWdlX2NvdW50OwogCQkJd2hpbGUgKGktLSkKLQkJCQlzYWZlX3B1dF9wYWdlKGJ2W2ldLmJ2X3BhZ2UpOworCQkJCXNhZmVfcHV0X3BhZ2UocjFfYmlvLT5iZWhpbmRfcGFnZXNbaV0pOworCQkJa2ZyZWUocjFfYmlvLT5iZWhpbmRfcGFnZXMpOworCQkJcjFfYmlvLT5iZWhpbmRfcGFnZXMgPSBOVUxMOwogCQl9CiAJCS8qIGNsZWFyIHRoZSBiaXRtYXAgaWYgYWxsIHdyaXRlcyBjb21wbGV0ZSBzdWNjZXNzZnVsbHkgKi8KIAkJYml0bWFwX2VuZHdyaXRlKHIxX2Jpby0+bWRkZXYtPmJpdG1hcCwgcjFfYmlvLT5zZWN0b3IsCiAJCQkJcjFfYmlvLT5zZWN0b3JzLAogCQkJCSF0ZXN0X2JpdChSMUJJT19EZWdyYWRlZCwgJnIxX2Jpby0+c3RhdGUpLAotCQkJCWJlaGluZCk7CisJCQkJdGVzdF9iaXQoUjFCSU9fQmVoaW5kSU8sICZyMV9iaW8tPnN0YXRlKSk7CiAJCW1kX3dyaXRlX2VuZChyMV9iaW8tPm1kZGV2KTsKIAkJcmFpZF9lbmRfYmlvX2lvKHIxX2Jpbyk7CiAJfQpAQCAtMzg2LDcgKzM4Nyw3IEBACiAJICogTGV0J3Mgc2VlIGlmIGFsbCBtaXJyb3JlZCB3cml0ZSBvcGVyYXRpb25zIGhhdmUgZmluaXNoZWQKIAkgKiBhbHJlYWR5LgogCSAqLwotCXIxX2Jpb193cml0ZV9kb25lKHIxX2JpbywgYmlvLT5iaV92Y250LCBiaW8tPmJpX2lvX3ZlYywgYmVoaW5kKTsKKwlyMV9iaW9fd3JpdGVfZG9uZShyMV9iaW8pOwogCiAJaWYgKHRvX3B1dCkKIAkJYmlvX3B1dCh0b19wdXQpOwpAQCAtNDExLDEwICs0MTIsMTAgQEAKIHsKIAljb25zdCBzZWN0b3JfdCB0aGlzX3NlY3RvciA9IHIxX2Jpby0+c2VjdG9yOwogCWNvbnN0IGludCBzZWN0b3JzID0gcjFfYmlvLT5zZWN0b3JzOwotCWludCBuZXdfZGlzayA9IC0xOwogCWludCBzdGFydF9kaXNrOworCWludCBiZXN0X2Rpc2s7CiAJaW50IGk7Ci0Jc2VjdG9yX3QgbmV3X2Rpc3RhbmNlLCBjdXJyZW50X2Rpc3RhbmNlOworCXNlY3Rvcl90IGJlc3RfZGlzdDsKIAltZGtfcmRldl90ICpyZGV2OwogCWludCBjaG9vc2VfZmlyc3Q7CiAKQEAgLTQyNSw2ICs0MjYsOCBAQAogCSAqIFdlIHRha2UgdGhlIGZpcnN0IHJlYWRhYmxlIGRpc2sgd2hlbiBhYm92ZSB0aGUgcmVzeW5jIHdpbmRvdy4KIAkgKi8KICByZXRyeToKKwliZXN0X2Rpc2sgPSAtMTsKKwliZXN0X2Rpc3QgPSBNYXhTZWN0b3I7CiAJaWYgKGNvbmYtPm1kZGV2LT5yZWNvdmVyeV9jcCA8IE1heFNlY3RvciAmJgogCSAgICAodGhpc19zZWN0b3IgKyBzZWN0b3JzID49IGNvbmYtPm5leHRfcmVzeW5jKSkgewogCQljaG9vc2VfZmlyc3QgPSAxOwpAQCAtNDM0LDggKzQzNyw4IEBACiAJCXN0YXJ0X2Rpc2sgPSBjb25mLT5sYXN0X3VzZWQ7CiAJfQogCi0JLyogbWFrZSBzdXJlIHRoZSBkaXNrIGlzIG9wZXJhdGlvbmFsICovCiAJZm9yIChpID0gMCA7IGkgPCBjb25mLT5yYWlkX2Rpc2tzIDsgaSsrKSB7CisJCXNlY3Rvcl90IGRpc3Q7CiAJCWludCBkaXNrID0gc3RhcnRfZGlzayArIGk7CiAJCWlmIChkaXNrID49IGNvbmYtPnJhaWRfZGlza3MpCiAJCQlkaXNrIC09IGNvbmYtPnJhaWRfZGlza3M7CkBAIC00NDMsNjAgKzQ0Niw0MyBAQAogCQlyZGV2ID0gcmN1X2RlcmVmZXJlbmNlKGNvbmYtPm1pcnJvcnNbZGlza10ucmRldik7CiAJCWlmIChyMV9iaW8tPmJpb3NbZGlza10gPT0gSU9fQkxPQ0tFRAogCQkgICAgfHwgcmRldiA9PSBOVUxMCi0JCSAgICB8fCAhdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkKKwkJICAgIHx8IHRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkKIAkJCWNvbnRpbnVlOwotCi0JCW5ld19kaXNrID0gZGlzazsKLQkJaWYgKCF0ZXN0X2JpdChXcml0ZU1vc3RseSwgJnJkZXYtPmZsYWdzKSkKLQkJCWJyZWFrOwotCX0KLQotCWlmIChuZXdfZGlzayA8IDAgfHwgY2hvb3NlX2ZpcnN0KQotCQlnb3RvIHJiX291dDsKLQotCS8qCi0JICogRG9uJ3QgY2hhbmdlIHRvIGFub3RoZXIgZGlzayBmb3Igc2VxdWVudGlhbCByZWFkczoKLQkgKi8KLQlpZiAoY29uZi0+bmV4dF9zZXFfc2VjdCA9PSB0aGlzX3NlY3RvcikKLQkJZ290byByYl9vdXQ7Ci0JaWYgKHRoaXNfc2VjdG9yID09IGNvbmYtPm1pcnJvcnNbbmV3X2Rpc2tdLmhlYWRfcG9zaXRpb24pCi0JCWdvdG8gcmJfb3V0OwotCi0JY3VycmVudF9kaXN0YW5jZSA9IGFicyh0aGlzX3NlY3RvciAKLQkJCSAgICAgICAtIGNvbmYtPm1pcnJvcnNbbmV3X2Rpc2tdLmhlYWRfcG9zaXRpb24pOwotCi0JLyogbG9vayBmb3IgYSBiZXR0ZXIgZGlzayAtIGkuZS4gaGVhZCBpcyBjbG9zZXIgKi8KLQlzdGFydF9kaXNrID0gbmV3X2Rpc2s7Ci0JZm9yIChpID0gMTsgaSA8IGNvbmYtPnJhaWRfZGlza3M7IGkrKykgewotCQlpbnQgZGlzayA9IHN0YXJ0X2Rpc2sgKyAxOwotCQlpZiAoZGlzayA+PSBjb25mLT5yYWlkX2Rpc2tzKQotCQkJZGlzayAtPSBjb25mLT5yYWlkX2Rpc2tzOwotCi0JCXJkZXYgPSByY3VfZGVyZWZlcmVuY2UoY29uZi0+bWlycm9yc1tkaXNrXS5yZGV2KTsKLQkJaWYgKHIxX2Jpby0+Ymlvc1tkaXNrXSA9PSBJT19CTE9DS0VECi0JCSAgICB8fCByZGV2ID09IE5VTEwKLQkJICAgIHx8ICF0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpCi0JCSAgICB8fCB0ZXN0X2JpdChXcml0ZU1vc3RseSwgJnJkZXYtPmZsYWdzKSkKKwkJaWYgKCF0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpICYmCisJCSAgICByZGV2LT5yZWNvdmVyeV9vZmZzZXQgPCB0aGlzX3NlY3RvciArIHNlY3RvcnMpCiAJCQljb250aW51ZTsKLQotCQlpZiAoIWF0b21pY19yZWFkKCZyZGV2LT5ucl9wZW5kaW5nKSkgewotCQkJbmV3X2Rpc2sgPSBkaXNrOworCQlpZiAodGVzdF9iaXQoV3JpdGVNb3N0bHksICZyZGV2LT5mbGFncykpIHsKKwkJCS8qIERvbid0IGJhbGFuY2UgYW1vbmcgd3JpdGUtbW9zdGx5LCBqdXN0CisJCQkgKiB1c2UgdGhlIGZpcnN0IGFzIGEgbGFzdCByZXNvcnQgKi8KKwkJCWlmIChiZXN0X2Rpc2sgPCAwKQorCQkJCWJlc3RfZGlzayA9IGRpc2s7CisJCQljb250aW51ZTsKKwkJfQorCQkvKiBUaGlzIGlzIGEgcmVhc29uYWJsZSBkZXZpY2UgdG8gdXNlLiAgSXQgbWlnaHQKKwkJICogZXZlbiBiZSBiZXN0LgorCQkgKi8KKwkJZGlzdCA9IGFicyh0aGlzX3NlY3RvciAtIGNvbmYtPm1pcnJvcnNbZGlza10uaGVhZF9wb3NpdGlvbik7CisJCWlmIChjaG9vc2VfZmlyc3QKKwkJICAgIC8qIERvbid0IGNoYW5nZSB0byBhbm90aGVyIGRpc2sgZm9yIHNlcXVlbnRpYWwgcmVhZHMgKi8KKwkJICAgIHx8IGNvbmYtPm5leHRfc2VxX3NlY3QgPT0gdGhpc19zZWN0b3IKKwkJICAgIHx8IGRpc3QgPT0gMAorCQkgICAgLyogSWYgZGV2aWNlIGlzIGlkbGUsIHVzZSBpdCAqLworCQkgICAgfHwgYXRvbWljX3JlYWQoJnJkZXYtPm5yX3BlbmRpbmcpID09IDApIHsKKwkJCWJlc3RfZGlzayA9IGRpc2s7CiAJCQlicmVhazsKIAkJfQotCQluZXdfZGlzdGFuY2UgPSBhYnModGhpc19zZWN0b3IgLSBjb25mLT5taXJyb3JzW2Rpc2tdLmhlYWRfcG9zaXRpb24pOwotCQlpZiAobmV3X2Rpc3RhbmNlIDwgY3VycmVudF9kaXN0YW5jZSkgewotCQkJY3VycmVudF9kaXN0YW5jZSA9IG5ld19kaXN0YW5jZTsKLQkJCW5ld19kaXNrID0gZGlzazsKKwkJaWYgKGRpc3QgPCBiZXN0X2Rpc3QpIHsKKwkJCWJlc3RfZGlzdCA9IGRpc3Q7CisJCQliZXN0X2Rpc2sgPSBkaXNrOwogCQl9CiAJfQogCi0gcmJfb3V0OgotCWlmIChuZXdfZGlzayA+PSAwKSB7Ci0JCXJkZXYgPSByY3VfZGVyZWZlcmVuY2UoY29uZi0+bWlycm9yc1tuZXdfZGlza10ucmRldik7CisJaWYgKGJlc3RfZGlzayA+PSAwKSB7CisJCXJkZXYgPSByY3VfZGVyZWZlcmVuY2UoY29uZi0+bWlycm9yc1tiZXN0X2Rpc2tdLnJkZXYpOwogCQlpZiAoIXJkZXYpCiAJCQlnb3RvIHJldHJ5OwogCQlhdG9taWNfaW5jKCZyZGV2LT5ucl9wZW5kaW5nKTsKLQkJaWYgKCF0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKSB7CisJCWlmICh0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKIAkJCS8qIGNhbm5vdCByaXNrIHJldHVybmluZyBhIGRldmljZSB0aGF0IGZhaWxlZAogCQkJICogYmVmb3JlIHdlIGluYydlZCBucl9wZW5kaW5nCiAJCQkgKi8KQEAgLTUwNCwxMSArNDkwLDExIEBACiAJCQlnb3RvIHJldHJ5OwogCQl9CiAJCWNvbmYtPm5leHRfc2VxX3NlY3QgPSB0aGlzX3NlY3RvciArIHNlY3RvcnM7Ci0JCWNvbmYtPmxhc3RfdXNlZCA9IG5ld19kaXNrOworCQljb25mLT5sYXN0X3VzZWQgPSBiZXN0X2Rpc2s7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogCi0JcmV0dXJuIG5ld19kaXNrOworCXJldHVybiBiZXN0X2Rpc2s7CiB9CiAKIHN0YXRpYyBpbnQgcmFpZDFfY29uZ2VzdGVkKHZvaWQgKmRhdGEsIGludCBiaXRzKQpAQCAtNjc1LDM3ICs2NjEsMzYgQEAKIAogCiAvKiBkdXBsaWNhdGUgdGhlIGRhdGEgcGFnZXMgZm9yIGJlaGluZCBJL08gCi0gKiBXZSByZXR1cm4gYSBsaXN0IG9mIGJpb192ZWMgcmF0aGVyIHRoYW4ganVzdCBwYWdlIHBvaW50ZXJzCi0gKiBhcyBpdCBtYWtlcyBmcmVlaW5nIGVhc2llcgogICovCi1zdGF0aWMgc3RydWN0IGJpb192ZWMgKmFsbG9jX2JlaGluZF9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8pCitzdGF0aWMgdm9pZCBhbGxvY19iZWhpbmRfcGFnZXMoc3RydWN0IGJpbyAqYmlvLCByMWJpb190ICpyMV9iaW8pCiB7CiAJaW50IGk7CiAJc3RydWN0IGJpb192ZWMgKmJ2ZWM7Ci0Jc3RydWN0IGJpb192ZWMgKnBhZ2VzID0ga3phbGxvYyhiaW8tPmJpX3ZjbnQgKiBzaXplb2Yoc3RydWN0IGJpb192ZWMpLAorCXN0cnVjdCBwYWdlICoqcGFnZXMgPSBremFsbG9jKGJpby0+YmlfdmNudCAqIHNpemVvZihzdHJ1Y3QgcGFnZSopLAogCQkJCQlHRlBfTk9JTyk7CiAJaWYgKHVubGlrZWx5KCFwYWdlcykpCi0JCWdvdG8gZG9fc3luY19pbzsKKwkJcmV0dXJuOwogCiAJYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnZlYywgYmlvLCBpKSB7Ci0JCXBhZ2VzW2ldLmJ2X3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9OT0lPKTsKLQkJaWYgKHVubGlrZWx5KCFwYWdlc1tpXS5idl9wYWdlKSkKKwkJcGFnZXNbaV0gPSBhbGxvY19wYWdlKEdGUF9OT0lPKTsKKwkJaWYgKHVubGlrZWx5KCFwYWdlc1tpXSkpCiAJCQlnb3RvIGRvX3N5bmNfaW87Ci0JCW1lbWNweShrbWFwKHBhZ2VzW2ldLmJ2X3BhZ2UpICsgYnZlYy0+YnZfb2Zmc2V0LAorCQltZW1jcHkoa21hcChwYWdlc1tpXSkgKyBidmVjLT5idl9vZmZzZXQsCiAJCQlrbWFwKGJ2ZWMtPmJ2X3BhZ2UpICsgYnZlYy0+YnZfb2Zmc2V0LCBidmVjLT5idl9sZW4pOwotCQlrdW5tYXAocGFnZXNbaV0uYnZfcGFnZSk7CisJCWt1bm1hcChwYWdlc1tpXSk7CiAJCWt1bm1hcChidmVjLT5idl9wYWdlKTsKIAl9Ci0KLQlyZXR1cm4gcGFnZXM7CisJcjFfYmlvLT5iZWhpbmRfcGFnZXMgPSBwYWdlczsKKwlyMV9iaW8tPmJlaGluZF9wYWdlX2NvdW50ID0gYmlvLT5iaV92Y250OworCXNldF9iaXQoUjFCSU9fQmVoaW5kSU8sICZyMV9iaW8tPnN0YXRlKTsKKwlyZXR1cm47CiAKIGRvX3N5bmNfaW86Ci0JaWYgKHBhZ2VzKQotCQlmb3IgKGkgPSAwOyBpIDwgYmlvLT5iaV92Y250ICYmIHBhZ2VzW2ldLmJ2X3BhZ2U7IGkrKykKLQkJCXB1dF9wYWdlKHBhZ2VzW2ldLmJ2X3BhZ2UpOworCWZvciAoaSA9IDA7IGkgPCBiaW8tPmJpX3ZjbnQ7IGkrKykKKwkJaWYgKHBhZ2VzW2ldKQorCQkJcHV0X3BhZ2UocGFnZXNbaV0pOwogCWtmcmVlKHBhZ2VzKTsKIAlQUklOVEsoIiVkQiBiZWhpbmQgYWxsb2MgZmFpbGVkLCBkb2luZyBzeW5jIEkvT1xuIiwgYmlvLT5iaV9zaXplKTsKLQlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIGludCBtYWtlX3JlcXVlc3QobWRkZXZfdCAqbWRkZXYsIHN0cnVjdCBiaW8gKiBiaW8pCkBAIC03MTcsNyArNzAyLDYgQEAKIAlpbnQgaSwgdGFyZ2V0cyA9IDAsIGRpc2tzOwogCXN0cnVjdCBiaXRtYXAgKmJpdG1hcDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBiaW9fdmVjICpiZWhpbmRfcGFnZXMgPSBOVUxMOwogCWNvbnN0IGludCBydyA9IGJpb19kYXRhX2RpcihiaW8pOwogCWNvbnN0IHVuc2lnbmVkIGxvbmcgZG9fc3luYyA9IChiaW8tPmJpX3J3ICYgUkVRX1NZTkMpOwogCWNvbnN0IHVuc2lnbmVkIGxvbmcgZG9fZmx1c2hfZnVhID0gKGJpby0+YmlfcncgJiAoUkVRX0ZMVVNIIHwgUkVRX0ZVQSkpOwpAQCAtODcwLDkgKzg1NCw4IEBACiAJaWYgKGJpdG1hcCAmJgogCSAgICAoYXRvbWljX3JlYWQoJmJpdG1hcC0+YmVoaW5kX3dyaXRlcykKIAkgICAgIDwgbWRkZXYtPmJpdG1hcF9pbmZvLm1heF93cml0ZV9iZWhpbmQpICYmCi0JICAgICF3YWl0cXVldWVfYWN0aXZlKCZiaXRtYXAtPmJlaGluZF93YWl0KSAmJgotCSAgICAoYmVoaW5kX3BhZ2VzID0gYWxsb2NfYmVoaW5kX3BhZ2VzKGJpbykpICE9IE5VTEwpCi0JCXNldF9iaXQoUjFCSU9fQmVoaW5kSU8sICZyMV9iaW8tPnN0YXRlKTsKKwkgICAgIXdhaXRxdWV1ZV9hY3RpdmUoJmJpdG1hcC0+YmVoaW5kX3dhaXQpKQorCQlhbGxvY19iZWhpbmRfcGFnZXMoYmlvLCByMV9iaW8pOwogCiAJYXRvbWljX3NldCgmcjFfYmlvLT5yZW1haW5pbmcsIDEpOwogCWF0b21pY19zZXQoJnIxX2Jpby0+YmVoaW5kX3JlbWFpbmluZywgMCk7CkBAIC04OTMsNyArODc2LDcgQEAKIAkJbWJpby0+YmlfcncgPSBXUklURSB8IGRvX2ZsdXNoX2Z1YSB8IGRvX3N5bmM7CiAJCW1iaW8tPmJpX3ByaXZhdGUgPSByMV9iaW87CiAKLQkJaWYgKGJlaGluZF9wYWdlcykgeworCQlpZiAocjFfYmlvLT5iZWhpbmRfcGFnZXMpIHsKIAkJCXN0cnVjdCBiaW9fdmVjICpidmVjOwogCQkJaW50IGo7CiAKQEAgLTkwNSw3ICs4ODgsNyBAQAogCQkJICogdGhlbSBhbGwKIAkJCSAqLwogCQkJX19iaW9fZm9yX2VhY2hfc2VnbWVudChidmVjLCBtYmlvLCBqLCAwKQotCQkJCWJ2ZWMtPmJ2X3BhZ2UgPSBiZWhpbmRfcGFnZXNbal0uYnZfcGFnZTsKKwkJCQlidmVjLT5idl9wYWdlID0gcjFfYmlvLT5iZWhpbmRfcGFnZXNbal07CiAJCQlpZiAodGVzdF9iaXQoV3JpdGVNb3N0bHksICZjb25mLT5taXJyb3JzW2ldLnJkZXYtPmZsYWdzKSkKIAkJCQlhdG9taWNfaW5jKCZyMV9iaW8tPmJlaGluZF9yZW1haW5pbmcpOwogCQl9CkBAIC05MTUsOCArODk4LDcgQEAKIAkJYmlvX2xpc3RfYWRkKCZjb25mLT5wZW5kaW5nX2Jpb19saXN0LCBtYmlvKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAl9Ci0JcjFfYmlvX3dyaXRlX2RvbmUocjFfYmlvLCBiaW8tPmJpX3ZjbnQsIGJlaGluZF9wYWdlcywgYmVoaW5kX3BhZ2VzICE9IE5VTEwpOwotCWtmcmVlKGJlaGluZF9wYWdlcyk7IC8qIHRoZSBiZWhpbmQgcGFnZXMgYXJlIGF0dGFjaGVkIHRvIHRoZSBiaW9zIG5vdyAqLworCXIxX2Jpb193cml0ZV9kb25lKHIxX2Jpbyk7CiAKIAkvKiBJbiBjYXNlIHJhaWQxZCBzbnVjayBpbiB0byBmcmVlemVfYXJyYXkgKi8KIAl3YWtlX3VwKCZjb25mLT53YWl0X2JhcnJpZXIpOwpAQCAtMTE5Niw2ICsxMTc4LDE5MyBAQAogCX0KIH0KIAorc3RhdGljIGludCBmaXhfc3luY19yZWFkX2Vycm9yKHIxYmlvX3QgKnIxX2JpbykKK3sKKwkvKiBUcnkgc29tZSBzeW5jaHJvbm91cyByZWFkcyBvZiBvdGhlciBkZXZpY2VzIHRvIGdldAorCSAqIGdvb2QgZGF0YSwgbXVjaCBsaWtlIHdpdGggbm9ybWFsIHJlYWQgZXJyb3JzLiAgT25seQorCSAqIHJlYWQgaW50byB0aGUgcGFnZXMgd2UgYWxyZWFkeSBoYXZlIHNvIHdlIGRvbid0CisJICogbmVlZCB0byByZS1pc3N1ZSB0aGUgcmVhZCByZXF1ZXN0LgorCSAqIFdlIGRvbid0IG5lZWQgdG8gZnJlZXplIHRoZSBhcnJheSwgYmVjYXVzZSBiZWluZyBpbiBhbgorCSAqIGFjdGl2ZSBzeW5jIHJlcXVlc3QsIHRoZXJlIGlzIG5vIG5vcm1hbCBJTywgYW5kCisJICogbm8gb3ZlcmxhcHBpbmcgc3luY3MuCisJICovCisJbWRkZXZfdCAqbWRkZXYgPSByMV9iaW8tPm1kZGV2OworCWNvbmZfdCAqY29uZiA9IG1kZGV2LT5wcml2YXRlOworCXN0cnVjdCBiaW8gKmJpbyA9IHIxX2Jpby0+Ymlvc1tyMV9iaW8tPnJlYWRfZGlza107CisJc2VjdG9yX3Qgc2VjdCA9IHIxX2Jpby0+c2VjdG9yOworCWludCBzZWN0b3JzID0gcjFfYmlvLT5zZWN0b3JzOworCWludCBpZHggPSAwOworCisJd2hpbGUoc2VjdG9ycykgeworCQlpbnQgcyA9IHNlY3RvcnM7CisJCWludCBkID0gcjFfYmlvLT5yZWFkX2Rpc2s7CisJCWludCBzdWNjZXNzID0gMDsKKwkJbWRrX3JkZXZfdCAqcmRldjsKKwkJaW50IHN0YXJ0OworCisJCWlmIChzID4gKFBBR0VfU0laRT4+OSkpCisJCQlzID0gUEFHRV9TSVpFID4+IDk7CisJCWRvIHsKKwkJCWlmIChyMV9iaW8tPmJpb3NbZF0tPmJpX2VuZF9pbyA9PSBlbmRfc3luY19yZWFkKSB7CisJCQkJLyogTm8gcmN1IHByb3RlY3Rpb24gbmVlZGVkIGhlcmUgZGV2aWNlcworCQkJCSAqIGNhbiBvbmx5IGJlIHJlbW92ZWQgd2hlbiBubyByZXN5bmMgaXMKKwkJCQkgKiBhY3RpdmUsIGFuZCByZXN5bmMgaXMgY3VycmVudGx5IGFjdGl2ZQorCQkJCSAqLworCQkJCXJkZXYgPSBjb25mLT5taXJyb3JzW2RdLnJkZXY7CisJCQkJaWYgKHN5bmNfcGFnZV9pbyhyZGV2LAorCQkJCQkJIHNlY3QsCisJCQkJCQkgczw8OSwKKwkJCQkJCSBiaW8tPmJpX2lvX3ZlY1tpZHhdLmJ2X3BhZ2UsCisJCQkJCQkgUkVBRCwgZmFsc2UpKSB7CisJCQkJCXN1Y2Nlc3MgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlkKys7CisJCQlpZiAoZCA9PSBjb25mLT5yYWlkX2Rpc2tzKQorCQkJCWQgPSAwOworCQl9IHdoaWxlICghc3VjY2VzcyAmJiBkICE9IHIxX2Jpby0+cmVhZF9kaXNrKTsKKworCQlpZiAoIXN1Y2Nlc3MpIHsKKwkJCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKKwkJCS8qIENhbm5vdCByZWFkIGZyb20gYW55d2hlcmUsIGFycmF5IGlzIHRvYXN0ICovCisJCQltZF9lcnJvcihtZGRldiwgY29uZi0+bWlycm9yc1tyMV9iaW8tPnJlYWRfZGlza10ucmRldik7CisJCQlwcmludGsoS0VSTl9BTEVSVCAibWQvcmFpZDE6JXM6ICVzOiB1bnJlY292ZXJhYmxlIEkvTyByZWFkIGVycm9yIgorCQkJICAgICAgICIgZm9yIGJsb2NrICVsbHVcbiIsCisJCQkgICAgICAgbWRuYW1lKG1kZGV2KSwKKwkJCSAgICAgICBiZGV2bmFtZShiaW8tPmJpX2JkZXYsIGIpLAorCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcjFfYmlvLT5zZWN0b3IpOworCQkJbWRfZG9uZV9zeW5jKG1kZGV2LCByMV9iaW8tPnNlY3RvcnMsIDApOworCQkJcHV0X2J1ZihyMV9iaW8pOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlzdGFydCA9IGQ7CisJCS8qIHdyaXRlIGl0IGJhY2sgYW5kIHJlLXJlYWQgKi8KKwkJd2hpbGUgKGQgIT0gcjFfYmlvLT5yZWFkX2Rpc2spIHsKKwkJCWlmIChkID09IDApCisJCQkJZCA9IGNvbmYtPnJhaWRfZGlza3M7CisJCQlkLS07CisJCQlpZiAocjFfYmlvLT5iaW9zW2RdLT5iaV9lbmRfaW8gIT0gZW5kX3N5bmNfcmVhZCkKKwkJCQljb250aW51ZTsKKwkJCXJkZXYgPSBjb25mLT5taXJyb3JzW2RdLnJkZXY7CisJCQlpZiAoc3luY19wYWdlX2lvKHJkZXYsCisJCQkJCSBzZWN0LAorCQkJCQkgczw8OSwKKwkJCQkJIGJpby0+YmlfaW9fdmVjW2lkeF0uYnZfcGFnZSwKKwkJCQkJIFdSSVRFLCBmYWxzZSkgPT0gMCkgeworCQkJCXIxX2Jpby0+Ymlvc1tkXS0+YmlfZW5kX2lvID0gTlVMTDsKKwkJCQlyZGV2X2RlY19wZW5kaW5nKHJkZXYsIG1kZGV2KTsKKwkJCQltZF9lcnJvcihtZGRldiwgcmRldik7CisJCQl9IGVsc2UKKwkJCQlhdG9taWNfYWRkKHMsICZyZGV2LT5jb3JyZWN0ZWRfZXJyb3JzKTsKKwkJfQorCQlkID0gc3RhcnQ7CisJCXdoaWxlIChkICE9IHIxX2Jpby0+cmVhZF9kaXNrKSB7CisJCQlpZiAoZCA9PSAwKQorCQkJCWQgPSBjb25mLT5yYWlkX2Rpc2tzOworCQkJZC0tOworCQkJaWYgKHIxX2Jpby0+Ymlvc1tkXS0+YmlfZW5kX2lvICE9IGVuZF9zeW5jX3JlYWQpCisJCQkJY29udGludWU7CisJCQlyZGV2ID0gY29uZi0+bWlycm9yc1tkXS5yZGV2OworCQkJaWYgKHN5bmNfcGFnZV9pbyhyZGV2LAorCQkJCQkgc2VjdCwKKwkJCQkJIHM8PDksCisJCQkJCSBiaW8tPmJpX2lvX3ZlY1tpZHhdLmJ2X3BhZ2UsCisJCQkJCSBSRUFELCBmYWxzZSkgPT0gMCkKKwkJCQltZF9lcnJvcihtZGRldiwgcmRldik7CisJCX0KKwkJc2VjdG9ycyAtPSBzOworCQlzZWN0ICs9IHM7CisJCWlkeCArKzsKKwl9CisJc2V0X2JpdChSMUJJT19VcHRvZGF0ZSwgJnIxX2Jpby0+c3RhdGUpOworCXNldF9iaXQoQklPX1VQVE9EQVRFLCAmYmlvLT5iaV9mbGFncyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19jaGVja3MocjFiaW9fdCAqcjFfYmlvKQoreworCS8qIFdlIGhhdmUgcmVhZCBhbGwgcmVhZGFibGUgZGV2aWNlcy4gIElmIHdlIGhhdmVuJ3QKKwkgKiBnb3QgdGhlIGJsb2NrLCB0aGVuIHRoZXJlIGlzIG5vIGhvcGUgbGVmdC4KKwkgKiBJZiB3ZSBoYXZlLCB0aGVuIHdlIHdhbnQgdG8gZG8gYSBjb21wYXJpc29uCisJICogYW5kIHNraXAgdGhlIHdyaXRlIGlmIGV2ZXJ5dGhpbmcgaXMgdGhlIHNhbWUuCisJICogSWYgYW55IGJsb2NrcyBmYWlsZWQgdG8gcmVhZCwgdGhlbiB3ZSBuZWVkIHRvCisJICogYXR0ZW1wdCBhbiBvdmVyLXdyaXRlCisJICovCisJbWRkZXZfdCAqbWRkZXYgPSByMV9iaW8tPm1kZGV2OworCWNvbmZfdCAqY29uZiA9IG1kZGV2LT5wcml2YXRlOworCWludCBwcmltYXJ5OworCWludCBpOworCisJZm9yIChwcmltYXJ5ID0gMDsgcHJpbWFyeSA8IGNvbmYtPnJhaWRfZGlza3M7IHByaW1hcnkrKykKKwkJaWYgKHIxX2Jpby0+Ymlvc1twcmltYXJ5XS0+YmlfZW5kX2lvID09IGVuZF9zeW5jX3JlYWQgJiYKKwkJICAgIHRlc3RfYml0KEJJT19VUFRPREFURSwgJnIxX2Jpby0+Ymlvc1twcmltYXJ5XS0+YmlfZmxhZ3MpKSB7CisJCQlyMV9iaW8tPmJpb3NbcHJpbWFyeV0tPmJpX2VuZF9pbyA9IE5VTEw7CisJCQlyZGV2X2RlY19wZW5kaW5nKGNvbmYtPm1pcnJvcnNbcHJpbWFyeV0ucmRldiwgbWRkZXYpOworCQkJYnJlYWs7CisJCX0KKwlyMV9iaW8tPnJlYWRfZGlzayA9IHByaW1hcnk7CisJZm9yIChpID0gMDsgaSA8IGNvbmYtPnJhaWRfZGlza3M7IGkrKykgeworCQlpbnQgajsKKwkJaW50IHZjbnQgPSByMV9iaW8tPnNlY3RvcnMgPj4gKFBBR0VfU0hJRlQtIDkpOworCQlzdHJ1Y3QgYmlvICpwYmlvID0gcjFfYmlvLT5iaW9zW3ByaW1hcnldOworCQlzdHJ1Y3QgYmlvICpzYmlvID0gcjFfYmlvLT5iaW9zW2ldOworCQlpbnQgc2l6ZTsKKworCQlpZiAocjFfYmlvLT5iaW9zW2ldLT5iaV9lbmRfaW8gIT0gZW5kX3N5bmNfcmVhZCkKKwkJCWNvbnRpbnVlOworCisJCWlmICh0ZXN0X2JpdChCSU9fVVBUT0RBVEUsICZzYmlvLT5iaV9mbGFncykpIHsKKwkJCWZvciAoaiA9IHZjbnQ7IGotLSA7ICkgeworCQkJCXN0cnVjdCBwYWdlICpwLCAqczsKKwkJCQlwID0gcGJpby0+YmlfaW9fdmVjW2pdLmJ2X3BhZ2U7CisJCQkJcyA9IHNiaW8tPmJpX2lvX3ZlY1tqXS5idl9wYWdlOworCQkJCWlmIChtZW1jbXAocGFnZV9hZGRyZXNzKHApLAorCQkJCQkgICBwYWdlX2FkZHJlc3MocyksCisJCQkJCSAgIFBBR0VfU0laRSkpCisJCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UKKwkJCWogPSAwOworCQlpZiAoaiA+PSAwKQorCQkJbWRkZXYtPnJlc3luY19taXNtYXRjaGVzICs9IHIxX2Jpby0+c2VjdG9yczsKKwkJaWYgKGogPCAwIHx8ICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9DSEVDSywgJm1kZGV2LT5yZWNvdmVyeSkKKwkJCSAgICAgICYmIHRlc3RfYml0KEJJT19VUFRPREFURSwgJnNiaW8tPmJpX2ZsYWdzKSkpIHsKKwkJCS8qIE5vIG5lZWQgdG8gd3JpdGUgdG8gdGhpcyBkZXZpY2UuICovCisJCQlzYmlvLT5iaV9lbmRfaW8gPSBOVUxMOworCQkJcmRldl9kZWNfcGVuZGluZyhjb25mLT5taXJyb3JzW2ldLnJkZXYsIG1kZGV2KTsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIGZpeHVwIHRoZSBiaW8gZm9yIHJldXNlICovCisJCXNiaW8tPmJpX3ZjbnQgPSB2Y250OworCQlzYmlvLT5iaV9zaXplID0gcjFfYmlvLT5zZWN0b3JzIDw8IDk7CisJCXNiaW8tPmJpX2lkeCA9IDA7CisJCXNiaW8tPmJpX3BoeXNfc2VnbWVudHMgPSAwOworCQlzYmlvLT5iaV9mbGFncyAmPSB+KEJJT19QT09MX01BU0sgLSAxKTsKKwkJc2Jpby0+YmlfZmxhZ3MgfD0gMSA8PCBCSU9fVVBUT0RBVEU7CisJCXNiaW8tPmJpX25leHQgPSBOVUxMOworCQlzYmlvLT5iaV9zZWN0b3IgPSByMV9iaW8tPnNlY3RvciArCisJCQljb25mLT5taXJyb3JzW2ldLnJkZXYtPmRhdGFfb2Zmc2V0OworCQlzYmlvLT5iaV9iZGV2ID0gY29uZi0+bWlycm9yc1tpXS5yZGV2LT5iZGV2OworCQlzaXplID0gc2Jpby0+Ymlfc2l6ZTsKKwkJZm9yIChqID0gMDsgaiA8IHZjbnQgOyBqKyspIHsKKwkJCXN0cnVjdCBiaW9fdmVjICpiaTsKKwkJCWJpID0gJnNiaW8tPmJpX2lvX3ZlY1tqXTsKKwkJCWJpLT5idl9vZmZzZXQgPSAwOworCQkJaWYgKHNpemUgPiBQQUdFX1NJWkUpCisJCQkJYmktPmJ2X2xlbiA9IFBBR0VfU0laRTsKKwkJCWVsc2UKKwkJCQliaS0+YnZfbGVuID0gc2l6ZTsKKwkJCXNpemUgLT0gUEFHRV9TSVpFOworCQkJbWVtY3B5KHBhZ2VfYWRkcmVzcyhiaS0+YnZfcGFnZSksCisJCQkgICAgICAgcGFnZV9hZGRyZXNzKHBiaW8tPmJpX2lvX3ZlY1tqXS5idl9wYWdlKSwKKwkJCSAgICAgICBQQUdFX1NJWkUpOworCQl9CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBzeW5jX3JlcXVlc3Rfd3JpdGUobWRkZXZfdCAqbWRkZXYsIHIxYmlvX3QgKnIxX2JpbykKIHsKIAljb25mX3QgKmNvbmYgPSBtZGRldi0+cHJpdmF0ZTsKQEAgLTEyMDUsMTg1ICsxMzc0LDE0IEBACiAKIAliaW8gPSByMV9iaW8tPmJpb3NbcjFfYmlvLT5yZWFkX2Rpc2tdOwogCi0KLQlpZiAodGVzdF9iaXQoTURfUkVDT1ZFUllfUkVRVUVTVEVELCAmbWRkZXYtPnJlY292ZXJ5KSkgewotCQkvKiBXZSBoYXZlIHJlYWQgYWxsIHJlYWRhYmxlIGRldmljZXMuICBJZiB3ZSBoYXZlbid0Ci0JCSAqIGdvdCB0aGUgYmxvY2ssIHRoZW4gdGhlcmUgaXMgbm8gaG9wZSBsZWZ0LgotCQkgKiBJZiB3ZSBoYXZlLCB0aGVuIHdlIHdhbnQgdG8gZG8gYSBjb21wYXJpc29uCi0JCSAqIGFuZCBza2lwIHRoZSB3cml0ZSBpZiBldmVyeXRoaW5nIGlzIHRoZSBzYW1lLgotCQkgKiBJZiBhbnkgYmxvY2tzIGZhaWxlZCB0byByZWFkLCB0aGVuIHdlIG5lZWQgdG8KLQkJICogYXR0ZW1wdCBhbiBvdmVyLXdyaXRlCi0JCSAqLwotCQlpbnQgcHJpbWFyeTsKLQkJaWYgKCF0ZXN0X2JpdChSMUJJT19VcHRvZGF0ZSwgJnIxX2Jpby0+c3RhdGUpKSB7Ci0JCQlmb3IgKGk9MDsgaTxtZGRldi0+cmFpZF9kaXNrczsgaSsrKQotCQkJCWlmIChyMV9iaW8tPmJpb3NbaV0tPmJpX2VuZF9pbyA9PSBlbmRfc3luY19yZWFkKQotCQkJCQltZF9lcnJvcihtZGRldiwgY29uZi0+bWlycm9yc1tpXS5yZGV2KTsKLQotCQkJbWRfZG9uZV9zeW5jKG1kZGV2LCByMV9iaW8tPnNlY3RvcnMsIDEpOwotCQkJcHV0X2J1ZihyMV9iaW8pOworCWlmICghdGVzdF9iaXQoUjFCSU9fVXB0b2RhdGUsICZyMV9iaW8tPnN0YXRlKSkKKwkJLyogb3VjaCAtIGZhaWxlZCB0byByZWFkIGFsbCBvZiB0aGF0LiAqLworCQlpZiAoIWZpeF9zeW5jX3JlYWRfZXJyb3IocjFfYmlvKSkKIAkJCXJldHVybjsKLQkJfQotCQlmb3IgKHByaW1hcnk9MDsgcHJpbWFyeTxtZGRldi0+cmFpZF9kaXNrczsgcHJpbWFyeSsrKQotCQkJaWYgKHIxX2Jpby0+Ymlvc1twcmltYXJ5XS0+YmlfZW5kX2lvID09IGVuZF9zeW5jX3JlYWQgJiYKLQkJCSAgICB0ZXN0X2JpdChCSU9fVVBUT0RBVEUsICZyMV9iaW8tPmJpb3NbcHJpbWFyeV0tPmJpX2ZsYWdzKSkgewotCQkJCXIxX2Jpby0+Ymlvc1twcmltYXJ5XS0+YmlfZW5kX2lvID0gTlVMTDsKLQkJCQlyZGV2X2RlY19wZW5kaW5nKGNvbmYtPm1pcnJvcnNbcHJpbWFyeV0ucmRldiwgbWRkZXYpOwotCQkJCWJyZWFrOwotCQkJfQotCQlyMV9iaW8tPnJlYWRfZGlzayA9IHByaW1hcnk7Ci0JCWZvciAoaT0wOyBpPG1kZGV2LT5yYWlkX2Rpc2tzOyBpKyspCi0JCQlpZiAocjFfYmlvLT5iaW9zW2ldLT5iaV9lbmRfaW8gPT0gZW5kX3N5bmNfcmVhZCkgewotCQkJCWludCBqOwotCQkJCWludCB2Y250ID0gcjFfYmlvLT5zZWN0b3JzID4+IChQQUdFX1NISUZULSA5KTsKLQkJCQlzdHJ1Y3QgYmlvICpwYmlvID0gcjFfYmlvLT5iaW9zW3ByaW1hcnldOwotCQkJCXN0cnVjdCBiaW8gKnNiaW8gPSByMV9iaW8tPmJpb3NbaV07CiAKLQkJCQlpZiAodGVzdF9iaXQoQklPX1VQVE9EQVRFLCAmc2Jpby0+YmlfZmxhZ3MpKSB7Ci0JCQkJCWZvciAoaiA9IHZjbnQ7IGotLSA7ICkgewotCQkJCQkJc3RydWN0IHBhZ2UgKnAsICpzOwotCQkJCQkJcCA9IHBiaW8tPmJpX2lvX3ZlY1tqXS5idl9wYWdlOwotCQkJCQkJcyA9IHNiaW8tPmJpX2lvX3ZlY1tqXS5idl9wYWdlOwotCQkJCQkJaWYgKG1lbWNtcChwYWdlX2FkZHJlc3MocCksCi0JCQkJCQkJICAgcGFnZV9hZGRyZXNzKHMpLAotCQkJCQkJCSAgIFBBR0VfU0laRSkpCi0JCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9IGVsc2UKLQkJCQkJaiA9IDA7Ci0JCQkJaWYgKGogPj0gMCkKLQkJCQkJbWRkZXYtPnJlc3luY19taXNtYXRjaGVzICs9IHIxX2Jpby0+c2VjdG9yczsKLQkJCQlpZiAoaiA8IDAgfHwgKHRlc3RfYml0KE1EX1JFQ09WRVJZX0NIRUNLLCAmbWRkZXYtPnJlY292ZXJ5KQotCQkJCQkgICAgICAmJiB0ZXN0X2JpdChCSU9fVVBUT0RBVEUsICZzYmlvLT5iaV9mbGFncykpKSB7Ci0JCQkJCXNiaW8tPmJpX2VuZF9pbyA9IE5VTEw7Ci0JCQkJCXJkZXZfZGVjX3BlbmRpbmcoY29uZi0+bWlycm9yc1tpXS5yZGV2LCBtZGRldik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLyogZml4dXAgdGhlIGJpbyBmb3IgcmV1c2UgKi8KLQkJCQkJaW50IHNpemU7Ci0JCQkJCXNiaW8tPmJpX3ZjbnQgPSB2Y250OwotCQkJCQlzYmlvLT5iaV9zaXplID0gcjFfYmlvLT5zZWN0b3JzIDw8IDk7Ci0JCQkJCXNiaW8tPmJpX2lkeCA9IDA7Ci0JCQkJCXNiaW8tPmJpX3BoeXNfc2VnbWVudHMgPSAwOwotCQkJCQlzYmlvLT5iaV9mbGFncyAmPSB+KEJJT19QT09MX01BU0sgLSAxKTsKLQkJCQkJc2Jpby0+YmlfZmxhZ3MgfD0gMSA8PCBCSU9fVVBUT0RBVEU7Ci0JCQkJCXNiaW8tPmJpX25leHQgPSBOVUxMOwotCQkJCQlzYmlvLT5iaV9zZWN0b3IgPSByMV9iaW8tPnNlY3RvciArCi0JCQkJCQljb25mLT5taXJyb3JzW2ldLnJkZXYtPmRhdGFfb2Zmc2V0OwotCQkJCQlzYmlvLT5iaV9iZGV2ID0gY29uZi0+bWlycm9yc1tpXS5yZGV2LT5iZGV2OwotCQkJCQlzaXplID0gc2Jpby0+Ymlfc2l6ZTsKLQkJCQkJZm9yIChqID0gMDsgaiA8IHZjbnQgOyBqKyspIHsKLQkJCQkJCXN0cnVjdCBiaW9fdmVjICpiaTsKLQkJCQkJCWJpID0gJnNiaW8tPmJpX2lvX3ZlY1tqXTsKLQkJCQkJCWJpLT5idl9vZmZzZXQgPSAwOwotCQkJCQkJaWYgKHNpemUgPiBQQUdFX1NJWkUpCi0JCQkJCQkJYmktPmJ2X2xlbiA9IFBBR0VfU0laRTsKLQkJCQkJCWVsc2UKLQkJCQkJCQliaS0+YnZfbGVuID0gc2l6ZTsKLQkJCQkJCXNpemUgLT0gUEFHRV9TSVpFOwotCQkJCQkJbWVtY3B5KHBhZ2VfYWRkcmVzcyhiaS0+YnZfcGFnZSksCi0JCQkJCQkgICAgICAgcGFnZV9hZGRyZXNzKHBiaW8tPmJpX2lvX3ZlY1tqXS5idl9wYWdlKSwKLQkJCQkJCSAgICAgICBQQUdFX1NJWkUpOwotCQkJCQl9Ci0KLQkJCQl9Ci0JCQl9Ci0JfQotCWlmICghdGVzdF9iaXQoUjFCSU9fVXB0b2RhdGUsICZyMV9iaW8tPnN0YXRlKSkgewotCQkvKiBvdWNoIC0gZmFpbGVkIHRvIHJlYWQgYWxsIG9mIHRoYXQuCi0JCSAqIFRyeSBzb21lIHN5bmNocm9ub3VzIHJlYWRzIG9mIG90aGVyIGRldmljZXMgdG8gZ2V0Ci0JCSAqIGdvb2QgZGF0YSwgbXVjaCBsaWtlIHdpdGggbm9ybWFsIHJlYWQgZXJyb3JzLiAgT25seQotCQkgKiByZWFkIGludG8gdGhlIHBhZ2VzIHdlIGFscmVhZHkgaGF2ZSBzbyB3ZSBkb24ndAotCQkgKiBuZWVkIHRvIHJlLWlzc3VlIHRoZSByZWFkIHJlcXVlc3QuCi0JCSAqIFdlIGRvbid0IG5lZWQgdG8gZnJlZXplIHRoZSBhcnJheSwgYmVjYXVzZSBiZWluZyBpbiBhbgotCQkgKiBhY3RpdmUgc3luYyByZXF1ZXN0LCB0aGVyZSBpcyBubyBub3JtYWwgSU8sIGFuZAotCQkgKiBubyBvdmVybGFwcGluZyBzeW5jcy4KLQkJICovCi0JCXNlY3Rvcl90IHNlY3QgPSByMV9iaW8tPnNlY3RvcjsKLQkJaW50IHNlY3RvcnMgPSByMV9iaW8tPnNlY3RvcnM7Ci0JCWludCBpZHggPSAwOwotCi0JCXdoaWxlKHNlY3RvcnMpIHsKLQkJCWludCBzID0gc2VjdG9yczsKLQkJCWludCBkID0gcjFfYmlvLT5yZWFkX2Rpc2s7Ci0JCQlpbnQgc3VjY2VzcyA9IDA7Ci0JCQltZGtfcmRldl90ICpyZGV2OwotCi0JCQlpZiAocyA+IChQQUdFX1NJWkU+PjkpKQotCQkJCXMgPSBQQUdFX1NJWkUgPj4gOTsKLQkJCWRvIHsKLQkJCQlpZiAocjFfYmlvLT5iaW9zW2RdLT5iaV9lbmRfaW8gPT0gZW5kX3N5bmNfcmVhZCkgewotCQkJCQkvKiBObyByY3UgcHJvdGVjdGlvbiBuZWVkZWQgaGVyZSBkZXZpY2VzCi0JCQkJCSAqIGNhbiBvbmx5IGJlIHJlbW92ZWQgd2hlbiBubyByZXN5bmMgaXMKLQkJCQkJICogYWN0aXZlLCBhbmQgcmVzeW5jIGlzIGN1cnJlbnRseSBhY3RpdmUKLQkJCQkJICovCi0JCQkJCXJkZXYgPSBjb25mLT5taXJyb3JzW2RdLnJkZXY7Ci0JCQkJCWlmIChzeW5jX3BhZ2VfaW8ocmRldiwKLQkJCQkJCQkgc2VjdCwKLQkJCQkJCQkgczw8OSwKLQkJCQkJCQkgYmlvLT5iaV9pb192ZWNbaWR4XS5idl9wYWdlLAotCQkJCQkJCSBSRUFELCBmYWxzZSkpIHsKLQkJCQkJCXN1Y2Nlc3MgPSAxOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJZCsrOwotCQkJCWlmIChkID09IGNvbmYtPnJhaWRfZGlza3MpCi0JCQkJCWQgPSAwOwotCQkJfSB3aGlsZSAoIXN1Y2Nlc3MgJiYgZCAhPSByMV9iaW8tPnJlYWRfZGlzayk7Ci0KLQkJCWlmIChzdWNjZXNzKSB7Ci0JCQkJaW50IHN0YXJ0ID0gZDsKLQkJCQkvKiB3cml0ZSBpdCBiYWNrIGFuZCByZS1yZWFkICovCi0JCQkJc2V0X2JpdChSMUJJT19VcHRvZGF0ZSwgJnIxX2Jpby0+c3RhdGUpOwotCQkJCXdoaWxlIChkICE9IHIxX2Jpby0+cmVhZF9kaXNrKSB7Ci0JCQkJCWlmIChkID09IDApCi0JCQkJCQlkID0gY29uZi0+cmFpZF9kaXNrczsKLQkJCQkJZC0tOwotCQkJCQlpZiAocjFfYmlvLT5iaW9zW2RdLT5iaV9lbmRfaW8gIT0gZW5kX3N5bmNfcmVhZCkKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQlyZGV2ID0gY29uZi0+bWlycm9yc1tkXS5yZGV2OwotCQkJCQlhdG9taWNfYWRkKHMsICZyZGV2LT5jb3JyZWN0ZWRfZXJyb3JzKTsKLQkJCQkJaWYgKHN5bmNfcGFnZV9pbyhyZGV2LAotCQkJCQkJCSBzZWN0LAotCQkJCQkJCSBzPDw5LAotCQkJCQkJCSBiaW8tPmJpX2lvX3ZlY1tpZHhdLmJ2X3BhZ2UsCi0JCQkJCQkJIFdSSVRFLCBmYWxzZSkgPT0gMCkKLQkJCQkJCW1kX2Vycm9yKG1kZGV2LCByZGV2KTsKLQkJCQl9Ci0JCQkJZCA9IHN0YXJ0OwotCQkJCXdoaWxlIChkICE9IHIxX2Jpby0+cmVhZF9kaXNrKSB7Ci0JCQkJCWlmIChkID09IDApCi0JCQkJCQlkID0gY29uZi0+cmFpZF9kaXNrczsKLQkJCQkJZC0tOwotCQkJCQlpZiAocjFfYmlvLT5iaW9zW2RdLT5iaV9lbmRfaW8gIT0gZW5kX3N5bmNfcmVhZCkKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQlyZGV2ID0gY29uZi0+bWlycm9yc1tkXS5yZGV2OwotCQkJCQlpZiAoc3luY19wYWdlX2lvKHJkZXYsCi0JCQkJCQkJIHNlY3QsCi0JCQkJCQkJIHM8PDksCi0JCQkJCQkJIGJpby0+YmlfaW9fdmVjW2lkeF0uYnZfcGFnZSwKLQkJCQkJCQkgUkVBRCwgZmFsc2UpID09IDApCi0JCQkJCQltZF9lcnJvcihtZGRldiwgcmRldik7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQljaGFyIGJbQkRFVk5BTUVfU0laRV07Ci0JCQkJLyogQ2Fubm90IHJlYWQgZnJvbSBhbnl3aGVyZSwgYXJyYXkgaXMgdG9hc3QgKi8KLQkJCQltZF9lcnJvcihtZGRldiwgY29uZi0+bWlycm9yc1tyMV9iaW8tPnJlYWRfZGlza10ucmRldik7Ci0JCQkJcHJpbnRrKEtFUk5fQUxFUlQgIm1kL3JhaWQxOiVzOiAlczogdW5yZWNvdmVyYWJsZSBJL08gcmVhZCBlcnJvciIKLQkJCQkgICAgICAgIiBmb3IgYmxvY2sgJWxsdVxuIiwKLQkJCQkgICAgICAgbWRuYW1lKG1kZGV2KSwKLQkJCQkgICAgICAgYmRldm5hbWUoYmlvLT5iaV9iZGV2LCBiKSwKLQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyMV9iaW8tPnNlY3Rvcik7Ci0JCQkJbWRfZG9uZV9zeW5jKG1kZGV2LCByMV9iaW8tPnNlY3RvcnMsIDApOwotCQkJCXB1dF9idWYocjFfYmlvKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQlzZWN0b3JzIC09IHM7Ci0JCQlzZWN0ICs9IHM7Ci0JCQlpZHggKys7Ci0JCX0KLQl9Ci0KKwlpZiAodGVzdF9iaXQoTURfUkVDT1ZFUllfUkVRVUVTVEVELCAmbWRkZXYtPnJlY292ZXJ5KSkKKwkJaWYgKHByb2Nlc3NfY2hlY2tzKHIxX2JpbykgPCAwKQorCQkJcmV0dXJuOwogCS8qCiAJICogc2NoZWR1bGUgd3JpdGVzCiAJICovCkBAIC0yMDYzLDcgKzIwNjEsNyBAQAogCXNldF9jYXBhY2l0eShtZGRldi0+Z2VuZGlzaywgbWRkZXYtPmFycmF5X3NlY3RvcnMpOwogCXJldmFsaWRhdGVfZGlzayhtZGRldi0+Z2VuZGlzayk7CiAJaWYgKHNlY3RvcnMgPiBtZGRldi0+ZGV2X3NlY3RvcnMgJiYKLQkgICAgbWRkZXYtPnJlY292ZXJ5X2NwID09IE1heFNlY3RvcikgeworCSAgICBtZGRldi0+cmVjb3ZlcnlfY3AgPiBtZGRldi0+ZGV2X3NlY3RvcnMpIHsKIAkJbWRkZXYtPnJlY292ZXJ5X2NwID0gbWRkZXYtPmRldl9zZWN0b3JzOwogCQlzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgJm1kZGV2LT5yZWNvdmVyeSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5oIGIvZHJpdmVycy9tZC9yYWlkMS5oCmluZGV4IGNiZmRmMWEuLjVmYzRjYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuaAorKysgYi9kcml2ZXJzL21kL3JhaWQxLmgKQEAgLTk0LDcgKzk0LDkgQEAKIAlpbnQJCQlyZWFkX2Rpc2s7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkCXJldHJ5X2xpc3Q7Ci0Jc3RydWN0IGJpdG1hcF91cGRhdGUJKmJpdG1hcF91cGRhdGU7CisJLyogTmV4dCB0d28gYXJlIG9ubHkgdmFsaWQgd2hlbiBSMUJJT19CZWhpbmRJTyBpcyBzZXQgKi8KKwlzdHJ1Y3QgcGFnZQkJKipiZWhpbmRfcGFnZXM7CisJaW50CQkJYmVoaW5kX3BhZ2VfY291bnQ7CiAJLyoKIAkgKiBpZiB0aGUgSU8gaXMgaW4gV1JJVEUgZGlyZWN0aW9uLCB0aGVuIG11bHRpcGxlIGJpb3MgYXJlIHVzZWQuCiAJICogV2UgY2hvb3NlIHRoZSBudW1iZXIgd2hlbiB0aGV5IGFyZSBhbGxvY2F0ZWQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuYwppbmRleCA4ZTk0NjI2Li42ZTg0NjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKQEAgLTI3MSw5ICsyNzEsMTAgQEAKIAkJICovCiAJCXNldF9iaXQoUjEwQklPX1VwdG9kYXRlLCAmcjEwX2Jpby0+c3RhdGUpOwogCQlyYWlkX2VuZF9iaW9faW8ocjEwX2Jpbyk7CisJCXJkZXZfZGVjX3BlbmRpbmcoY29uZi0+bWlycm9yc1tkZXZdLnJkZXYsIGNvbmYtPm1kZGV2KTsKIAl9IGVsc2UgewogCQkvKgotCQkgKiBvb3BzLCByZWFkIGVycm9yOgorCQkgKiBvb3BzLCByZWFkIGVycm9yIC0ga2VlcCB0aGUgcmVmY291bnQgb24gdGhlIHJkZXYKIAkJICovCiAJCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKIAkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKQEAgLTI4Miw4ICsyODMsNiBAQAogCQkJICAgICAgIGJkZXZuYW1lKGNvbmYtPm1pcnJvcnNbZGV2XS5yZGV2LT5iZGV2LGIpLCAodW5zaWduZWQgbG9uZyBsb25nKXIxMF9iaW8tPnNlY3Rvcik7CiAJCXJlc2NoZWR1bGVfcmV0cnkocjEwX2Jpbyk7CiAJfQotCi0JcmRldl9kZWNfcGVuZGluZyhjb25mLT5taXJyb3JzW2Rldl0ucmRldiwgY29uZi0+bWRkZXYpOwogfQogCiBzdGF0aWMgdm9pZCByYWlkMTBfZW5kX3dyaXRlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmlvLCBpbnQgZXJyb3IpCkBAIC00ODgsMTMgKzQ4NywxOSBAQAogc3RhdGljIGludCByZWFkX2JhbGFuY2UoY29uZl90ICpjb25mLCByMTBiaW9fdCAqcjEwX2JpbykKIHsKIAljb25zdCBzZWN0b3JfdCB0aGlzX3NlY3RvciA9IHIxMF9iaW8tPnNlY3RvcjsKLQlpbnQgZGlzaywgc2xvdCwgbnNsb3Q7CisJaW50IGRpc2ssIHNsb3Q7CiAJY29uc3QgaW50IHNlY3RvcnMgPSByMTBfYmlvLT5zZWN0b3JzOwotCXNlY3Rvcl90IG5ld19kaXN0YW5jZSwgY3VycmVudF9kaXN0YW5jZTsKKwlzZWN0b3JfdCBuZXdfZGlzdGFuY2UsIGJlc3RfZGlzdDsKIAltZGtfcmRldl90ICpyZGV2OworCWludCBkb19iYWxhbmNlOworCWludCBiZXN0X3Nsb3Q7CiAKIAlyYWlkMTBfZmluZF9waHlzKGNvbmYsIHIxMF9iaW8pOwogCXJjdV9yZWFkX2xvY2soKTsKK3JldHJ5OgorCWJlc3Rfc2xvdCA9IC0xOworCWJlc3RfZGlzdCA9IE1heFNlY3RvcjsKKwlkb19iYWxhbmNlID0gMTsKIAkvKgogCSAqIENoZWNrIGlmIHdlIGNhbiBiYWxhbmNlLiBXZSBjYW4gYmFsYW5jZSBvbiB0aGUgd2hvbGUKIAkgKiBkZXZpY2UgaWYgbm8gcmVzeW5jIGlzIGdvaW5nIG9uIChyZWNvdmVyeSBpcyBvayksIG9yIGJlbG93CkBAIC01MDIsODYgKzUwNyw1OCBAQAogCSAqIGFib3ZlIHRoZSByZXN5bmMgd2luZG93LgogCSAqLwogCWlmIChjb25mLT5tZGRldi0+cmVjb3ZlcnlfY3AgPCBNYXhTZWN0b3IKLQkgICAgJiYgKHRoaXNfc2VjdG9yICsgc2VjdG9ycyA+PSBjb25mLT5uZXh0X3Jlc3luYykpIHsKLQkJLyogbWFrZSBzdXJlIHRoYXQgZGlzayBpcyBvcGVyYXRpb25hbCAqLwotCQlzbG90ID0gMDsKLQkJZGlzayA9IHIxMF9iaW8tPmRldnNbc2xvdF0uZGV2bnVtOworCSAgICAmJiAodGhpc19zZWN0b3IgKyBzZWN0b3JzID49IGNvbmYtPm5leHRfcmVzeW5jKSkKKwkJZG9fYmFsYW5jZSA9IDA7CiAKLQkJd2hpbGUgKChyZGV2ID0gcmN1X2RlcmVmZXJlbmNlKGNvbmYtPm1pcnJvcnNbZGlza10ucmRldikpID09IE5VTEwgfHwKLQkJICAgICAgIHIxMF9iaW8tPmRldnNbc2xvdF0uYmlvID09IElPX0JMT0NLRUQgfHwKLQkJICAgICAgICF0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKSB7Ci0JCQlzbG90Kys7Ci0JCQlpZiAoc2xvdCA9PSBjb25mLT5jb3BpZXMpIHsKLQkJCQlzbG90ID0gMDsKLQkJCQlkaXNrID0gLTE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlkaXNrID0gcjEwX2Jpby0+ZGV2c1tzbG90XS5kZXZudW07Ci0JCX0KLQkJZ290byByYl9vdXQ7Ci0JfQotCi0KLQkvKiBtYWtlIHN1cmUgdGhlIGRpc2sgaXMgb3BlcmF0aW9uYWwgKi8KLQlzbG90ID0gMDsKLQlkaXNrID0gcjEwX2Jpby0+ZGV2c1tzbG90XS5kZXZudW07Ci0Jd2hpbGUgKChyZGV2PXJjdV9kZXJlZmVyZW5jZShjb25mLT5taXJyb3JzW2Rpc2tdLnJkZXYpKSA9PSBOVUxMIHx8Ci0JICAgICAgIHIxMF9iaW8tPmRldnNbc2xvdF0uYmlvID09IElPX0JMT0NLRUQgfHwKLQkgICAgICAgIXRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpIHsKLQkJc2xvdCArKzsKLQkJaWYgKHNsb3QgPT0gY29uZi0+Y29waWVzKSB7Ci0JCQlkaXNrID0gLTE7Ci0JCQlnb3RvIHJiX291dDsKLQkJfQotCQlkaXNrID0gcjEwX2Jpby0+ZGV2c1tzbG90XS5kZXZudW07Ci0JfQotCi0KLQljdXJyZW50X2Rpc3RhbmNlID0gYWJzKHIxMF9iaW8tPmRldnNbc2xvdF0uYWRkciAtCi0JCQkgICAgICAgY29uZi0+bWlycm9yc1tkaXNrXS5oZWFkX3Bvc2l0aW9uKTsKLQotCS8qIEZpbmQgdGhlIGRpc2sgd2hvc2UgaGVhZCBpcyBjbG9zZXN0LAotCSAqIG9yIC0gZm9yIGZhciA+IDEgLSBmaW5kIHRoZSBjbG9zZXN0IHRvIHBhcnRpdGlvbiBiZWdpbm5pbmcgKi8KLQotCWZvciAobnNsb3QgPSBzbG90OyBuc2xvdCA8IGNvbmYtPmNvcGllczsgbnNsb3QrKykgewotCQlpbnQgbmRpc2sgPSByMTBfYmlvLT5kZXZzW25zbG90XS5kZXZudW07Ci0KLQotCQlpZiAoKHJkZXY9cmN1X2RlcmVmZXJlbmNlKGNvbmYtPm1pcnJvcnNbbmRpc2tdLnJkZXYpKSA9PSBOVUxMIHx8Ci0JCSAgICByMTBfYmlvLT5kZXZzW25zbG90XS5iaW8gPT0gSU9fQkxPQ0tFRCB8fAotCQkgICAgIXRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpCisJZm9yIChzbG90ID0gMDsgc2xvdCA8IGNvbmYtPmNvcGllcyA7IHNsb3QrKykgeworCQlpZiAocjEwX2Jpby0+ZGV2c1tzbG90XS5iaW8gPT0gSU9fQkxPQ0tFRCkKIAkJCWNvbnRpbnVlOworCQlkaXNrID0gcjEwX2Jpby0+ZGV2c1tzbG90XS5kZXZudW07CisJCXJkZXYgPSByY3VfZGVyZWZlcmVuY2UoY29uZi0+bWlycm9yc1tkaXNrXS5yZGV2KTsKKwkJaWYgKHJkZXYgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpCisJCQljb250aW51ZTsKKworCQlpZiAoIWRvX2JhbGFuY2UpCisJCQlicmVhazsKIAogCQkvKiBUaGlzIG9wdGltaXNhdGlvbiBpcyBkZWJhdGFibGUsIGFuZCBjb21wbGV0ZWx5IGRlc3Ryb3lzCiAJCSAqIHNlcXVlbnRpYWwgcmVhZCBzcGVlZCBmb3IgJ2ZhciBjb3BpZXMnIGFycmF5cy4gIFNvIG9ubHkKIAkJICoga2VlcCBpdCBmb3IgJ25lYXInIGFycmF5cywgYW5kIHJldmlldyB0aG9zZSBsYXRlci4KIAkJICovCi0JCWlmIChjb25mLT5uZWFyX2NvcGllcyA+IDEgJiYgIWF0b21pY19yZWFkKCZyZGV2LT5ucl9wZW5kaW5nKSkgewotCQkJZGlzayA9IG5kaXNrOwotCQkJc2xvdCA9IG5zbG90OworCQlpZiAoY29uZi0+bmVhcl9jb3BpZXMgPiAxICYmICFhdG9taWNfcmVhZCgmcmRldi0+bnJfcGVuZGluZykpCiAJCQlicmVhazsKLQkJfQogCiAJCS8qIGZvciBmYXIgPiAxIGFsd2F5cyB1c2UgdGhlIGxvd2VzdCBhZGRyZXNzICovCiAJCWlmIChjb25mLT5mYXJfY29waWVzID4gMSkKLQkJCW5ld19kaXN0YW5jZSA9IHIxMF9iaW8tPmRldnNbbnNsb3RdLmFkZHI7CisJCQluZXdfZGlzdGFuY2UgPSByMTBfYmlvLT5kZXZzW3Nsb3RdLmFkZHI7CiAJCWVsc2UKLQkJCW5ld19kaXN0YW5jZSA9IGFicyhyMTBfYmlvLT5kZXZzW25zbG90XS5hZGRyIC0KLQkJCQkJICAgY29uZi0+bWlycm9yc1tuZGlza10uaGVhZF9wb3NpdGlvbik7Ci0JCWlmIChuZXdfZGlzdGFuY2UgPCBjdXJyZW50X2Rpc3RhbmNlKSB7Ci0JCQljdXJyZW50X2Rpc3RhbmNlID0gbmV3X2Rpc3RhbmNlOwotCQkJZGlzayA9IG5kaXNrOwotCQkJc2xvdCA9IG5zbG90OworCQkJbmV3X2Rpc3RhbmNlID0gYWJzKHIxMF9iaW8tPmRldnNbc2xvdF0uYWRkciAtCisJCQkJCSAgIGNvbmYtPm1pcnJvcnNbZGlza10uaGVhZF9wb3NpdGlvbik7CisJCWlmIChuZXdfZGlzdGFuY2UgPCBiZXN0X2Rpc3QpIHsKKwkJCWJlc3RfZGlzdCA9IG5ld19kaXN0YW5jZTsKKwkJCWJlc3Rfc2xvdCA9IHNsb3Q7CiAJCX0KIAl9CisJaWYgKHNsb3QgPT0gY29uZi0+Y29waWVzKQorCQlzbG90ID0gYmVzdF9zbG90OwogCi1yYl9vdXQ6Ci0JcjEwX2Jpby0+cmVhZF9zbG90ID0gc2xvdDsKLS8qCWNvbmYtPm5leHRfc2VxX3NlY3QgPSB0aGlzX3NlY3RvciArIHNlY3RvcnM7Ki8KLQotCWlmIChkaXNrID49IDAgJiYgKHJkZXY9cmN1X2RlcmVmZXJlbmNlKGNvbmYtPm1pcnJvcnNbZGlza10ucmRldikpIT0gTlVMTCkKLQkJYXRvbWljX2luYygmY29uZi0+bWlycm9yc1tkaXNrXS5yZGV2LT5ucl9wZW5kaW5nKTsKLQllbHNlCisJaWYgKHNsb3QgPj0gMCkgeworCQlkaXNrID0gcjEwX2Jpby0+ZGV2c1tzbG90XS5kZXZudW07CisJCXJkZXYgPSByY3VfZGVyZWZlcmVuY2UoY29uZi0+bWlycm9yc1tkaXNrXS5yZGV2KTsKKwkJaWYgKCFyZGV2KQorCQkJZ290byByZXRyeTsKKwkJYXRvbWljX2luYygmcmRldi0+bnJfcGVuZGluZyk7CisJCWlmICh0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKKwkJCS8qIENhbm5vdCByaXNrIHJldHVybmluZyBhIGRldmljZSB0aGF0IGZhaWxlZAorCQkJICogYmVmb3JlIHdlIGluYydlZCBucl9wZW5kaW5nCisJCQkgKi8KKwkJCXJkZXZfZGVjX3BlbmRpbmcocmRldiwgY29uZi0+bWRkZXYpOworCQkJZ290byByZXRyeTsKKwkJfQorCQlyMTBfYmlvLT5yZWFkX3Nsb3QgPSBzbG90OworCX0gZWxzZQogCQlkaXNrID0gLTE7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKQEAgLTE0NjAsNDAgKzE0MzcsMzMgQEAKIAlpbnQgbWF4X3JlYWRfZXJyb3JzID0gYXRvbWljX3JlYWQoJm1kZGV2LT5tYXhfY29ycl9yZWFkX2Vycm9ycyk7CiAJaW50IGQgPSByMTBfYmlvLT5kZXZzW3IxMF9iaW8tPnJlYWRfc2xvdF0uZGV2bnVtOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCXJkZXYgPSByY3VfZGVyZWZlcmVuY2UoY29uZi0+bWlycm9yc1tkXS5yZGV2KTsKLQlpZiAocmRldikgeyAvKiBJZiByZGV2IGlzIG5vdCBOVUxMICovCi0JCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKLQkJaW50IGN1cl9yZWFkX2Vycm9yX2NvdW50ID0gMDsKKwkvKiBzdGlsbCBvd24gYSByZWZlcmVuY2UgdG8gdGhpcyByZGV2LCBzbyBpdCBjYW5ub3QKKwkgKiBoYXZlIGJlZW4gY2xlYXJlZCByZWNlbnRseS4KKwkgKi8KKwlyZGV2ID0gY29uZi0+bWlycm9yc1tkXS5yZGV2OwogCisJaWYgKHRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkKKwkJLyogZHJpdmUgaGFzIGFscmVhZHkgYmVlbiBmYWlsZWQsIGp1c3QgaWdub3JlIGFueQorCQkgICBtb3JlIGZpeF9yZWFkX2Vycm9yKCkgYXR0ZW1wdHMgKi8KKwkJcmV0dXJuOworCisJY2hlY2tfZGVjYXlfcmVhZF9lcnJvcnMobWRkZXYsIHJkZXYpOworCWF0b21pY19pbmMoJnJkZXYtPnJlYWRfZXJyb3JzKTsKKwlpZiAoYXRvbWljX3JlYWQoJnJkZXYtPnJlYWRfZXJyb3JzKSA+IG1heF9yZWFkX2Vycm9ycykgeworCQljaGFyIGJbQkRFVk5BTUVfU0laRV07CiAJCWJkZXZuYW1lKHJkZXYtPmJkZXYsIGIpOwogCi0JCWlmICh0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwotCQkJLyogZHJpdmUgaGFzIGFscmVhZHkgYmVlbiBmYWlsZWQsIGp1c3QgaWdub3JlIGFueQotCQkJICAgbW9yZSBmaXhfcmVhZF9lcnJvcigpIGF0dGVtcHRzICovCi0JCQlyZXR1cm47Ci0JCX0KLQotCQljaGVja19kZWNheV9yZWFkX2Vycm9ycyhtZGRldiwgcmRldik7Ci0JCWF0b21pY19pbmMoJnJkZXYtPnJlYWRfZXJyb3JzKTsKLQkJY3VyX3JlYWRfZXJyb3JfY291bnQgPSBhdG9taWNfcmVhZCgmcmRldi0+cmVhZF9lcnJvcnMpOwotCQlpZiAoY3VyX3JlYWRfZXJyb3JfY291bnQgPiBtYXhfcmVhZF9lcnJvcnMpIHsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwotCQkJcHJpbnRrKEtFUk5fTk9USUNFCi0JCQkgICAgICAgIm1kL3JhaWQxMDolczogJXM6IFJhaWQgZGV2aWNlIGV4Y2VlZGVkICIKLQkJCSAgICAgICAicmVhZF9lcnJvciB0aHJlc2hvbGQgIgotCQkJICAgICAgICJbY3VyICVkOm1heCAlZF1cbiIsCi0JCQkgICAgICAgbWRuYW1lKG1kZGV2KSwKLQkJCSAgICAgICBiLCBjdXJfcmVhZF9lcnJvcl9jb3VudCwgbWF4X3JlYWRfZXJyb3JzKTsKLQkJCXByaW50ayhLRVJOX05PVElDRQotCQkJICAgICAgICJtZC9yYWlkMTA6JXM6ICVzOiBGYWlsaW5nIHJhaWQgIgotCQkJICAgICAgICJkZXZpY2VcbiIsIG1kbmFtZShtZGRldiksIGIpOwotCQkJbWRfZXJyb3IobWRkZXYsIGNvbmYtPm1pcnJvcnNbZF0ucmRldik7Ci0JCQlyZXR1cm47Ci0JCX0KKwkJcHJpbnRrKEtFUk5fTk9USUNFCisJCSAgICAgICAibWQvcmFpZDEwOiVzOiAlczogUmFpZCBkZXZpY2UgZXhjZWVkZWQgIgorCQkgICAgICAgInJlYWRfZXJyb3IgdGhyZXNob2xkIFtjdXIgJWQ6bWF4ICVkXVxuIiwKKwkJICAgICAgIG1kbmFtZShtZGRldiksIGIsCisJCSAgICAgICBhdG9taWNfcmVhZCgmcmRldi0+cmVhZF9lcnJvcnMpLCBtYXhfcmVhZF9lcnJvcnMpOworCQlwcmludGsoS0VSTl9OT1RJQ0UKKwkJICAgICAgICJtZC9yYWlkMTA6JXM6ICVzOiBGYWlsaW5nIHJhaWQgZGV2aWNlXG4iLAorCQkgICAgICAgbWRuYW1lKG1kZGV2KSwgYik7CisJCW1kX2Vycm9yKG1kZGV2LCBjb25mLT5taXJyb3JzW2RdLnJkZXYpOworCQlyZXR1cm47CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwogCiAJd2hpbGUoc2VjdG9ycykgewogCQlpbnQgcyA9IHNlY3RvcnM7CkBAIC0xNTYyLDggKzE1MzIsOCBAQAogCQkJCQkgICAgICAgIndyaXRlIGZhaWxlZCIKIAkJCQkJICAgICAgICIgKCVkIHNlY3RvcnMgYXQgJWxsdSBvbiAlcylcbiIsCiAJCQkJCSAgICAgICBtZG5hbWUobWRkZXYpLCBzLAotCQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykoc2VjdCsKLQkJCQkJICAgICAgIHJkZXYtPmRhdGFfb2Zmc2V0KSwKKwkJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKAorCQkJCQkJICAgICAgIHNlY3QgKyByZGV2LT5kYXRhX29mZnNldCksCiAJCQkJCSAgICAgICBiZGV2bmFtZShyZGV2LT5iZGV2LCBiKSk7CiAJCQkJCXByaW50ayhLRVJOX05PVElDRSAibWQvcmFpZDEwOiVzOiAlczogZmFpbGluZyAiCiAJCQkJCSAgICAgICAiZHJpdmVcbiIsCkBAIC0xNTk5LDggKzE1NjksOCBAQAogCQkJCQkgICAgICAgImNvcnJlY3RlZCBzZWN0b3JzIgogCQkJCQkgICAgICAgIiAoJWQgc2VjdG9ycyBhdCAlbGx1IG9uICVzKVxuIiwKIAkJCQkJICAgICAgIG1kbmFtZShtZGRldiksIHMsCi0JCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKShzZWN0KwotCQkJCQkJICAgIHJkZXYtPmRhdGFfb2Zmc2V0KSwKKwkJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKAorCQkJCQkJICAgICAgIHNlY3QgKyByZGV2LT5kYXRhX29mZnNldCksCiAJCQkJCSAgICAgICBiZGV2bmFtZShyZGV2LT5iZGV2LCBiKSk7CiAJCQkJCXByaW50ayhLRVJOX05PVElDRSAibWQvcmFpZDEwOiVzOiAlczogZmFpbGluZyBkcml2ZVxuIiwKIAkJCQkJICAgICAgIG1kbmFtZShtZGRldiksCkBAIC0xNjEyLDggKzE1ODIsOCBAQAogCQkJCQkgICAgICAgIm1kL3JhaWQxMDolczogcmVhZCBlcnJvciBjb3JyZWN0ZWQiCiAJCQkJCSAgICAgICAiICglZCBzZWN0b3JzIGF0ICVsbHUgb24gJXMpXG4iLAogCQkJCQkgICAgICAgbWRuYW1lKG1kZGV2KSwgcywKLQkJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKHNlY3QrCi0JCQkJCSAgICAgICAgICAgIHJkZXYtPmRhdGFfb2Zmc2V0KSwKKwkJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKAorCQkJCQkJICAgICAgIHNlY3QgKyByZGV2LT5kYXRhX29mZnNldCksCiAJCQkJCSAgICAgICBiZGV2bmFtZShyZGV2LT5iZGV2LCBiKSk7CiAJCQkJfQogCkBAIC0xNjYzLDcgKzE2MzMsOCBAQAogCQllbHNlIGlmICh0ZXN0X2JpdChSMTBCSU9fSXNSZWNvdmVyLCAmcjEwX2Jpby0+c3RhdGUpKQogCQkJcmVjb3ZlcnlfcmVxdWVzdF93cml0ZShtZGRldiwgcjEwX2Jpbyk7CiAJCWVsc2UgewotCQkJaW50IG1pcnJvcjsKKwkJCWludCBzbG90ID0gcjEwX2Jpby0+cmVhZF9zbG90OworCQkJaW50IG1pcnJvciA9IHIxMF9iaW8tPmRldnNbc2xvdF0uZGV2bnVtOwogCQkJLyogd2UgZ290IGEgcmVhZCBlcnJvci4gTWF5YmUgdGhlIGRyaXZlIGlzIGJhZC4gIE1heWJlIGp1c3QKIAkJCSAqIHRoZSBibG9jayBhbmQgd2UgY2FuIGZpeCBpdC4KIAkJCSAqIFdlIGZyZWV6ZSBhbGwgb3RoZXIgSU8sIGFuZCB0cnkgcmVhZGluZyB0aGUgYmxvY2sgZnJvbQpAQCAtMTY3Nyw5ICsxNjQ4LDEwIEBACiAJCQkJZml4X3JlYWRfZXJyb3IoY29uZiwgbWRkZXYsIHIxMF9iaW8pOwogCQkJCXVuZnJlZXplX2FycmF5KGNvbmYpOwogCQkJfQorCQkJcmRldl9kZWNfcGVuZGluZyhjb25mLT5taXJyb3JzW21pcnJvcl0ucmRldiwgbWRkZXYpOwogCi0JCQliaW8gPSByMTBfYmlvLT5kZXZzW3IxMF9iaW8tPnJlYWRfc2xvdF0uYmlvOwotCQkJcjEwX2Jpby0+ZGV2c1tyMTBfYmlvLT5yZWFkX3Nsb3RdLmJpbyA9CisJCQliaW8gPSByMTBfYmlvLT5kZXZzW3Nsb3RdLmJpbzsKKwkJCXIxMF9iaW8tPmRldnNbc2xvdF0uYmlvID0KIAkJCQltZGRldi0+cm8gPyBJT19CTE9DS0VEIDogTlVMTDsKIAkJCW1pcnJvciA9IHJlYWRfYmFsYW5jZShjb25mLCByMTBfYmlvKTsKIAkJCWlmIChtaXJyb3IgPT0gLTEpIHsKQEAgLTE2OTMsNiArMTY2NSw3IEBACiAJCQl9IGVsc2UgewogCQkJCWNvbnN0IHVuc2lnbmVkIGxvbmcgZG9fc3luYyA9IChyMTBfYmlvLT5tYXN0ZXJfYmlvLT5iaV9ydyAmIFJFUV9TWU5DKTsKIAkJCQliaW9fcHV0KGJpbyk7CisJCQkJc2xvdCA9IHIxMF9iaW8tPnJlYWRfc2xvdDsKIAkJCQlyZGV2ID0gY29uZi0+bWlycm9yc1ttaXJyb3JdLnJkZXY7CiAJCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKIAkJCQkJcHJpbnRrKEtFUk5fRVJSICJtZC9yYWlkMTA6JXM6ICVzOiByZWRpcmVjdGluZyBzZWN0b3IgJWxsdSB0byIKQEAgLTE3MDIsOCArMTY3NSw4IEBACiAJCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXIxMF9iaW8tPnNlY3Rvcik7CiAJCQkJYmlvID0gYmlvX2Nsb25lX21kZGV2KHIxMF9iaW8tPm1hc3Rlcl9iaW8sCiAJCQkJCQkgICAgICBHRlBfTk9JTywgbWRkZXYpOwotCQkJCXIxMF9iaW8tPmRldnNbcjEwX2Jpby0+cmVhZF9zbG90XS5iaW8gPSBiaW87Ci0JCQkJYmlvLT5iaV9zZWN0b3IgPSByMTBfYmlvLT5kZXZzW3IxMF9iaW8tPnJlYWRfc2xvdF0uYWRkcgorCQkJCXIxMF9iaW8tPmRldnNbc2xvdF0uYmlvID0gYmlvOworCQkJCWJpby0+Ymlfc2VjdG9yID0gcjEwX2Jpby0+ZGV2c1tzbG90XS5hZGRyCiAJCQkJCSsgcmRldi0+ZGF0YV9vZmZzZXQ7CiAJCQkJYmlvLT5iaV9iZGV2ID0gcmRldi0+YmRldjsKIAkJCQliaW8tPmJpX3J3ID0gUkVBRCB8IGRvX3N5bmM7CkBAIC0xNzYzLDEzICsxNzM2LDEzIEBACiAgKgogICovCiAKLXN0YXRpYyBzZWN0b3JfdCBzeW5jX3JlcXVlc3QobWRkZXZfdCAqbWRkZXYsIHNlY3Rvcl90IHNlY3Rvcl9uciwgaW50ICpza2lwcGVkLCBpbnQgZ29fZmFzdGVyKQorc3RhdGljIHNlY3Rvcl90IHN5bmNfcmVxdWVzdChtZGRldl90ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9yX25yLAorCQkJICAgICBpbnQgKnNraXBwZWQsIGludCBnb19mYXN0ZXIpCiB7CiAJY29uZl90ICpjb25mID0gbWRkZXYtPnByaXZhdGU7CiAJcjEwYmlvX3QgKnIxMF9iaW87CiAJc3RydWN0IGJpbyAqYmlvbGlzdCA9IE5VTEwsICpiaW87CiAJc2VjdG9yX3QgbWF4X3NlY3RvciwgbnJfc2VjdG9yczsKLQlpbnQgZGlzazsKIAlpbnQgaTsKIAlpbnQgbWF4X3N5bmM7CiAJc2VjdG9yX3Qgc3luY19ibG9ja3M7CkBAIC0xODU4LDEwOCArMTgzMSwxMTQgQEAKIAkJaW50IGosIGs7CiAJCXIxMF9iaW8gPSBOVUxMOwogCi0JCWZvciAoaT0wIDsgaTxjb25mLT5yYWlkX2Rpc2tzOyBpKyspCi0JCQlpZiAoY29uZi0+bWlycm9yc1tpXS5yZGV2ICYmCi0JCQkgICAgIXRlc3RfYml0KEluX3N5bmMsICZjb25mLT5taXJyb3JzW2ldLnJkZXYtPmZsYWdzKSkgewotCQkJCWludCBzdGlsbF9kZWdyYWRlZCA9IDA7Ci0JCQkJLyogd2FudCB0byByZWNvbnN0cnVjdCB0aGlzIGRldmljZSAqLwotCQkJCXIxMGJpb190ICpyYjIgPSByMTBfYmlvOwotCQkJCXNlY3Rvcl90IHNlY3QgPSByYWlkMTBfZmluZF92aXJ0KGNvbmYsIHNlY3Rvcl9uciwgaSk7Ci0JCQkJaW50IG11c3Rfc3luYzsKLQkJCQkvKiBVbmxlc3Mgd2UgYXJlIGRvaW5nIGEgZnVsbCBzeW5jLCB3ZSBvbmx5IG5lZWQKLQkJCQkgKiB0byByZWNvdmVyIHRoZSBibG9jayBpZiBpdCBpcyBzZXQgaW4gdGhlIGJpdG1hcAorCQlmb3IgKGk9MCA7IGk8Y29uZi0+cmFpZF9kaXNrczsgaSsrKSB7CisJCQlpbnQgc3RpbGxfZGVncmFkZWQ7CisJCQlyMTBiaW9fdCAqcmIyOworCQkJc2VjdG9yX3Qgc2VjdDsKKwkJCWludCBtdXN0X3N5bmM7CisKKwkJCWlmIChjb25mLT5taXJyb3JzW2ldLnJkZXYgPT0gTlVMTCB8fAorCQkJICAgIHRlc3RfYml0KEluX3N5bmMsICZjb25mLT5taXJyb3JzW2ldLnJkZXYtPmZsYWdzKSkgCisJCQkJY29udGludWU7CisKKwkJCXN0aWxsX2RlZ3JhZGVkID0gMDsKKwkJCS8qIHdhbnQgdG8gcmVjb25zdHJ1Y3QgdGhpcyBkZXZpY2UgKi8KKwkJCXJiMiA9IHIxMF9iaW87CisJCQlzZWN0ID0gcmFpZDEwX2ZpbmRfdmlydChjb25mLCBzZWN0b3JfbnIsIGkpOworCQkJLyogVW5sZXNzIHdlIGFyZSBkb2luZyBhIGZ1bGwgc3luYywgd2Ugb25seSBuZWVkCisJCQkgKiB0byByZWNvdmVyIHRoZSBibG9jayBpZiBpdCBpcyBzZXQgaW4gdGhlIGJpdG1hcAorCQkJICovCisJCQltdXN0X3N5bmMgPSBiaXRtYXBfc3RhcnRfc3luYyhtZGRldi0+Yml0bWFwLCBzZWN0LAorCQkJCQkJICAgICAgJnN5bmNfYmxvY2tzLCAxKTsKKwkJCWlmIChzeW5jX2Jsb2NrcyA8IG1heF9zeW5jKQorCQkJCW1heF9zeW5jID0gc3luY19ibG9ja3M7CisJCQlpZiAoIW11c3Rfc3luYyAmJgorCQkJICAgICFjb25mLT5mdWxsc3luYykgeworCQkJCS8qIHllcCwgc2tpcCB0aGUgc3luY19ibG9ja3MgaGVyZSwgYnV0IGRvbid0IGFzc3VtZQorCQkJCSAqIHRoYXQgdGhlcmUgd2lsbCBuZXZlciBiZSBhbnl0aGluZyB0byBkbyBoZXJlCiAJCQkJICovCi0JCQkJbXVzdF9zeW5jID0gYml0bWFwX3N0YXJ0X3N5bmMobWRkZXYtPmJpdG1hcCwgc2VjdCwKLQkJCQkJCQkgICAgICAmc3luY19ibG9ja3MsIDEpOwotCQkJCWlmIChzeW5jX2Jsb2NrcyA8IG1heF9zeW5jKQotCQkJCQltYXhfc3luYyA9IHN5bmNfYmxvY2tzOwotCQkJCWlmICghbXVzdF9zeW5jICYmCi0JCQkJICAgICFjb25mLT5mdWxsc3luYykgewotCQkJCQkvKiB5ZXAsIHNraXAgdGhlIHN5bmNfYmxvY2tzIGhlcmUsIGJ1dCBkb24ndCBhc3N1bWUKLQkJCQkJICogdGhhdCB0aGVyZSB3aWxsIG5ldmVyIGJlIGFueXRoaW5nIHRvIGRvIGhlcmUKLQkJCQkJICovCi0JCQkJCWNodW5rc19za2lwcGVkID0gLTE7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KKwkJCQljaHVua3Nfc2tpcHBlZCA9IC0xOworCQkJCWNvbnRpbnVlOworCQkJfQogCi0JCQkJcjEwX2JpbyA9IG1lbXBvb2xfYWxsb2MoY29uZi0+cjEwYnVmX3Bvb2wsIEdGUF9OT0lPKTsKLQkJCQlyYWlzZV9iYXJyaWVyKGNvbmYsIHJiMiAhPSBOVUxMKTsKLQkJCQlhdG9taWNfc2V0KCZyMTBfYmlvLT5yZW1haW5pbmcsIDApOworCQkJcjEwX2JpbyA9IG1lbXBvb2xfYWxsb2MoY29uZi0+cjEwYnVmX3Bvb2wsIEdGUF9OT0lPKTsKKwkJCXJhaXNlX2JhcnJpZXIoY29uZiwgcmIyICE9IE5VTEwpOworCQkJYXRvbWljX3NldCgmcjEwX2Jpby0+cmVtYWluaW5nLCAwKTsKIAotCQkJCXIxMF9iaW8tPm1hc3Rlcl9iaW8gPSAoc3RydWN0IGJpbyopcmIyOwotCQkJCWlmIChyYjIpCi0JCQkJCWF0b21pY19pbmMoJnJiMi0+cmVtYWluaW5nKTsKLQkJCQlyMTBfYmlvLT5tZGRldiA9IG1kZGV2OwotCQkJCXNldF9iaXQoUjEwQklPX0lzUmVjb3ZlciwgJnIxMF9iaW8tPnN0YXRlKTsKLQkJCQlyMTBfYmlvLT5zZWN0b3IgPSBzZWN0OworCQkJcjEwX2Jpby0+bWFzdGVyX2JpbyA9IChzdHJ1Y3QgYmlvKilyYjI7CisJCQlpZiAocmIyKQorCQkJCWF0b21pY19pbmMoJnJiMi0+cmVtYWluaW5nKTsKKwkJCXIxMF9iaW8tPm1kZGV2ID0gbWRkZXY7CisJCQlzZXRfYml0KFIxMEJJT19Jc1JlY292ZXIsICZyMTBfYmlvLT5zdGF0ZSk7CisJCQlyMTBfYmlvLT5zZWN0b3IgPSBzZWN0OwogCi0JCQkJcmFpZDEwX2ZpbmRfcGh5cyhjb25mLCByMTBfYmlvKTsKKwkJCXJhaWQxMF9maW5kX3BoeXMoY29uZiwgcjEwX2Jpbyk7CiAKLQkJCQkvKiBOZWVkIHRvIGNoZWNrIGlmIHRoZSBhcnJheSB3aWxsIHN0aWxsIGJlCi0JCQkJICogZGVncmFkZWQKLQkJCQkgKi8KLQkJCQlmb3IgKGo9MDsgajxjb25mLT5yYWlkX2Rpc2tzOyBqKyspCi0JCQkJCWlmIChjb25mLT5taXJyb3JzW2pdLnJkZXYgPT0gTlVMTCB8fAotCQkJCQkgICAgdGVzdF9iaXQoRmF1bHR5LCAmY29uZi0+bWlycm9yc1tqXS5yZGV2LT5mbGFncykpIHsKLQkJCQkJCXN0aWxsX2RlZ3JhZGVkID0gMTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0KLQkJCQltdXN0X3N5bmMgPSBiaXRtYXBfc3RhcnRfc3luYyhtZGRldi0+Yml0bWFwLCBzZWN0LAotCQkJCQkJCSAgICAgICZzeW5jX2Jsb2Nrcywgc3RpbGxfZGVncmFkZWQpOwotCi0JCQkJZm9yIChqPTA7IGo8Y29uZi0+Y29waWVzO2orKykgewotCQkJCQlpbnQgZCA9IHIxMF9iaW8tPmRldnNbal0uZGV2bnVtOwotCQkJCQlpZiAoY29uZi0+bWlycm9yc1tkXS5yZGV2ICYmCi0JCQkJCSAgICB0ZXN0X2JpdChJbl9zeW5jLCAmY29uZi0+bWlycm9yc1tkXS5yZGV2LT5mbGFncykpIHsKLQkJCQkJCS8qIFRoaXMgaXMgd2hlcmUgd2UgcmVhZCBmcm9tICovCi0JCQkJCQliaW8gPSByMTBfYmlvLT5kZXZzWzBdLmJpbzsKLQkJCQkJCWJpby0+YmlfbmV4dCA9IGJpb2xpc3Q7Ci0JCQkJCQliaW9saXN0ID0gYmlvOwotCQkJCQkJYmlvLT5iaV9wcml2YXRlID0gcjEwX2JpbzsKLQkJCQkJCWJpby0+YmlfZW5kX2lvID0gZW5kX3N5bmNfcmVhZDsKLQkJCQkJCWJpby0+YmlfcncgPSBSRUFEOwotCQkJCQkJYmlvLT5iaV9zZWN0b3IgPSByMTBfYmlvLT5kZXZzW2pdLmFkZHIgKwotCQkJCQkJCWNvbmYtPm1pcnJvcnNbZF0ucmRldi0+ZGF0YV9vZmZzZXQ7Ci0JCQkJCQliaW8tPmJpX2JkZXYgPSBjb25mLT5taXJyb3JzW2RdLnJkZXYtPmJkZXY7Ci0JCQkJCQlhdG9taWNfaW5jKCZjb25mLT5taXJyb3JzW2RdLnJkZXYtPm5yX3BlbmRpbmcpOwotCQkJCQkJYXRvbWljX2luYygmcjEwX2Jpby0+cmVtYWluaW5nKTsKLQkJCQkJCS8qIGFuZCB3ZSB3cml0ZSB0byAnaScgKi8KLQotCQkJCQkJZm9yIChrPTA7IGs8Y29uZi0+Y29waWVzOyBrKyspCi0JCQkJCQkJaWYgKHIxMF9iaW8tPmRldnNba10uZGV2bnVtID09IGkpCi0JCQkJCQkJCWJyZWFrOwotCQkJCQkJQlVHX09OKGsgPT0gY29uZi0+Y29waWVzKTsKLQkJCQkJCWJpbyA9IHIxMF9iaW8tPmRldnNbMV0uYmlvOwotCQkJCQkJYmlvLT5iaV9uZXh0ID0gYmlvbGlzdDsKLQkJCQkJCWJpb2xpc3QgPSBiaW87Ci0JCQkJCQliaW8tPmJpX3ByaXZhdGUgPSByMTBfYmlvOwotCQkJCQkJYmlvLT5iaV9lbmRfaW8gPSBlbmRfc3luY193cml0ZTsKLQkJCQkJCWJpby0+YmlfcncgPSBXUklURTsKLQkJCQkJCWJpby0+Ymlfc2VjdG9yID0gcjEwX2Jpby0+ZGV2c1trXS5hZGRyICsKLQkJCQkJCQljb25mLT5taXJyb3JzW2ldLnJkZXYtPmRhdGFfb2Zmc2V0OwotCQkJCQkJYmlvLT5iaV9iZGV2ID0gY29uZi0+bWlycm9yc1tpXS5yZGV2LT5iZGV2OwotCi0JCQkJCQlyMTBfYmlvLT5kZXZzWzBdLmRldm51bSA9IGQ7Ci0JCQkJCQlyMTBfYmlvLT5kZXZzWzFdLmRldm51bSA9IGk7Ci0KLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfQotCQkJCWlmIChqID09IGNvbmYtPmNvcGllcykgewotCQkJCQkvKiBDYW5ub3QgcmVjb3Zlciwgc28gYWJvcnQgdGhlIHJlY292ZXJ5ICovCi0JCQkJCXB1dF9idWYocjEwX2Jpbyk7Ci0JCQkJCWlmIChyYjIpCi0JCQkJCQlhdG9taWNfZGVjKCZyYjItPnJlbWFpbmluZyk7Ci0JCQkJCXIxMF9iaW8gPSByYjI7Ci0JCQkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChNRF9SRUNPVkVSWV9JTlRSLAotCQkJCQkJCSAgICAgICZtZGRldi0+cmVjb3ZlcnkpKQotCQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAibWQvcmFpZDEwOiVzOiBpbnN1ZmZpY2llbnQgIgotCQkJCQkJICAgICAgICJ3b3JraW5nIGRldmljZXMgZm9yIHJlY292ZXJ5LlxuIiwKLQkJCQkJCSAgICAgICBtZG5hbWUobWRkZXYpKTsKKwkJCS8qIE5lZWQgdG8gY2hlY2sgaWYgdGhlIGFycmF5IHdpbGwgc3RpbGwgYmUKKwkJCSAqIGRlZ3JhZGVkCisJCQkgKi8KKwkJCWZvciAoaj0wOyBqPGNvbmYtPnJhaWRfZGlza3M7IGorKykKKwkJCQlpZiAoY29uZi0+bWlycm9yc1tqXS5yZGV2ID09IE5VTEwgfHwKKwkJCQkgICAgdGVzdF9iaXQoRmF1bHR5LCAmY29uZi0+bWlycm9yc1tqXS5yZGV2LT5mbGFncykpIHsKKwkJCQkJc3RpbGxfZGVncmFkZWQgPSAxOwogCQkJCQlicmVhazsKIAkJCQl9CisKKwkJCW11c3Rfc3luYyA9IGJpdG1hcF9zdGFydF9zeW5jKG1kZGV2LT5iaXRtYXAsIHNlY3QsCisJCQkJCQkgICAgICAmc3luY19ibG9ja3MsIHN0aWxsX2RlZ3JhZGVkKTsKKworCQkJZm9yIChqPTA7IGo8Y29uZi0+Y29waWVzO2orKykgeworCQkJCWludCBkID0gcjEwX2Jpby0+ZGV2c1tqXS5kZXZudW07CisJCQkJaWYgKCFjb25mLT5taXJyb3JzW2RdLnJkZXYgfHwKKwkJCQkgICAgIXRlc3RfYml0KEluX3N5bmMsICZjb25mLT5taXJyb3JzW2RdLnJkZXYtPmZsYWdzKSkKKwkJCQkJY29udGludWU7CisJCQkJLyogVGhpcyBpcyB3aGVyZSB3ZSByZWFkIGZyb20gKi8KKwkJCQliaW8gPSByMTBfYmlvLT5kZXZzWzBdLmJpbzsKKwkJCQliaW8tPmJpX25leHQgPSBiaW9saXN0OworCQkJCWJpb2xpc3QgPSBiaW87CisJCQkJYmlvLT5iaV9wcml2YXRlID0gcjEwX2JpbzsKKwkJCQliaW8tPmJpX2VuZF9pbyA9IGVuZF9zeW5jX3JlYWQ7CisJCQkJYmlvLT5iaV9ydyA9IFJFQUQ7CisJCQkJYmlvLT5iaV9zZWN0b3IgPSByMTBfYmlvLT5kZXZzW2pdLmFkZHIgKworCQkJCQljb25mLT5taXJyb3JzW2RdLnJkZXYtPmRhdGFfb2Zmc2V0OworCQkJCWJpby0+YmlfYmRldiA9IGNvbmYtPm1pcnJvcnNbZF0ucmRldi0+YmRldjsKKwkJCQlhdG9taWNfaW5jKCZjb25mLT5taXJyb3JzW2RdLnJkZXYtPm5yX3BlbmRpbmcpOworCQkJCWF0b21pY19pbmMoJnIxMF9iaW8tPnJlbWFpbmluZyk7CisJCQkJLyogYW5kIHdlIHdyaXRlIHRvICdpJyAqLworCisJCQkJZm9yIChrPTA7IGs8Y29uZi0+Y29waWVzOyBrKyspCisJCQkJCWlmIChyMTBfYmlvLT5kZXZzW2tdLmRldm51bSA9PSBpKQorCQkJCQkJYnJlYWs7CisJCQkJQlVHX09OKGsgPT0gY29uZi0+Y29waWVzKTsKKwkJCQliaW8gPSByMTBfYmlvLT5kZXZzWzFdLmJpbzsKKwkJCQliaW8tPmJpX25leHQgPSBiaW9saXN0OworCQkJCWJpb2xpc3QgPSBiaW87CisJCQkJYmlvLT5iaV9wcml2YXRlID0gcjEwX2JpbzsKKwkJCQliaW8tPmJpX2VuZF9pbyA9IGVuZF9zeW5jX3dyaXRlOworCQkJCWJpby0+YmlfcncgPSBXUklURTsKKwkJCQliaW8tPmJpX3NlY3RvciA9IHIxMF9iaW8tPmRldnNba10uYWRkciArCisJCQkJCWNvbmYtPm1pcnJvcnNbaV0ucmRldi0+ZGF0YV9vZmZzZXQ7CisJCQkJYmlvLT5iaV9iZGV2ID0gY29uZi0+bWlycm9yc1tpXS5yZGV2LT5iZGV2OworCisJCQkJcjEwX2Jpby0+ZGV2c1swXS5kZXZudW0gPSBkOworCQkJCXIxMF9iaW8tPmRldnNbMV0uZGV2bnVtID0gaTsKKworCQkJCWJyZWFrOwogCQkJfQorCQkJaWYgKGogPT0gY29uZi0+Y29waWVzKSB7CisJCQkJLyogQ2Fubm90IHJlY292ZXIsIHNvIGFib3J0IHRoZSByZWNvdmVyeSAqLworCQkJCXB1dF9idWYocjEwX2Jpbyk7CisJCQkJaWYgKHJiMikKKwkJCQkJYXRvbWljX2RlYygmcmIyLT5yZW1haW5pbmcpOworCQkJCXIxMF9iaW8gPSByYjI7CisJCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KE1EX1JFQ09WRVJZX0lOVFIsCisJCQkJCQkgICAgICAmbWRkZXYtPnJlY292ZXJ5KSkKKwkJCQkJcHJpbnRrKEtFUk5fSU5GTyAibWQvcmFpZDEwOiVzOiBpbnN1ZmZpY2llbnQgIgorCQkJCQkgICAgICAgIndvcmtpbmcgZGV2aWNlcyBmb3IgcmVjb3ZlcnkuXG4iLAorCQkJCQkgICAgICAgbWRuYW1lKG1kZGV2KSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KIAkJaWYgKGJpb2xpc3QgPT0gTlVMTCkgewogCQkJd2hpbGUgKHIxMF9iaW8pIHsKIAkJCQlyMTBiaW9fdCAqcmIyID0gcjEwX2JpbzsKQEAgLTE5NzcsNyArMTk1Niw4IEBACiAKIAkJaWYgKCFiaXRtYXBfc3RhcnRfc3luYyhtZGRldi0+Yml0bWFwLCBzZWN0b3JfbnIsCiAJCQkJICAgICAgICZzeW5jX2Jsb2NrcywgbWRkZXYtPmRlZ3JhZGVkKSAmJgotCQkgICAgIWNvbmYtPmZ1bGxzeW5jICYmICF0ZXN0X2JpdChNRF9SRUNPVkVSWV9SRVFVRVNURUQsICZtZGRldi0+cmVjb3ZlcnkpKSB7CisJCSAgICAhY29uZi0+ZnVsbHN5bmMgJiYgIXRlc3RfYml0KE1EX1JFQ09WRVJZX1JFUVVFU1RFRCwKKwkJCQkJCSAmbWRkZXYtPnJlY292ZXJ5KSkgewogCQkJLyogV2UgY2FuIHNraXAgdGhpcyBibG9jayAqLwogCQkJKnNraXBwZWQgPSAxOwogCQkJcmV0dXJuIHN5bmNfYmxvY2tzICsgc2VjdG9yc19za2lwcGVkOwpAQCAtMjAyMiw3ICsyMDAyLDggQEAKIAkJCWZvciAoaT0wOyBpPGNvbmYtPmNvcGllczsgaSsrKSB7CiAJCQkJaW50IGQgPSByMTBfYmlvLT5kZXZzW2ldLmRldm51bTsKIAkJCQlpZiAocjEwX2Jpby0+ZGV2c1tpXS5iaW8tPmJpX2VuZF9pbykKLQkJCQkJcmRldl9kZWNfcGVuZGluZyhjb25mLT5taXJyb3JzW2RdLnJkZXYsIG1kZGV2KTsKKwkJCQkJcmRldl9kZWNfcGVuZGluZyhjb25mLT5taXJyb3JzW2RdLnJkZXYsCisJCQkJCQkJIG1kZGV2KTsKIAkJCX0KIAkJCXB1dF9idWYocjEwX2Jpbyk7CiAJCQliaW9saXN0ID0gTlVMTDsKQEAgLTIwNDcsMjYgKzIwMjgsMjcgQEAKIAlkbyB7CiAJCXN0cnVjdCBwYWdlICpwYWdlOwogCQlpbnQgbGVuID0gUEFHRV9TSVpFOwotCQlkaXNrID0gMDsKIAkJaWYgKHNlY3Rvcl9uciArIChsZW4+PjkpID4gbWF4X3NlY3RvcikKIAkJCWxlbiA9IChtYXhfc2VjdG9yIC0gc2VjdG9yX25yKSA8PCA5OwogCQlpZiAobGVuID09IDApCiAJCQlicmVhazsKIAkJZm9yIChiaW89IGJpb2xpc3QgOyBiaW8gOyBiaW89YmlvLT5iaV9uZXh0KSB7CisJCQlzdHJ1Y3QgYmlvICpiaW8yOwogCQkJcGFnZSA9IGJpby0+YmlfaW9fdmVjW2Jpby0+YmlfdmNudF0uYnZfcGFnZTsKLQkJCWlmIChiaW9fYWRkX3BhZ2UoYmlvLCBwYWdlLCBsZW4sIDApID09IDApIHsKLQkJCQkvKiBzdG9wIGhlcmUgKi8KLQkJCQlzdHJ1Y3QgYmlvICpiaW8yOwotCQkJCWJpby0+YmlfaW9fdmVjW2Jpby0+YmlfdmNudF0uYnZfcGFnZSA9IHBhZ2U7Ci0JCQkJZm9yIChiaW8yID0gYmlvbGlzdDsgYmlvMiAmJiBiaW8yICE9IGJpbzsgYmlvMiA9IGJpbzItPmJpX25leHQpIHsKLQkJCQkJLyogcmVtb3ZlIGxhc3QgcGFnZSBmcm9tIHRoaXMgYmlvICovCi0JCQkJCWJpbzItPmJpX3ZjbnQtLTsKLQkJCQkJYmlvMi0+Ymlfc2l6ZSAtPSBsZW47Ci0JCQkJCWJpbzItPmJpX2ZsYWdzICY9IH4oMTw8IEJJT19TRUdfVkFMSUQpOwotCQkJCX0KLQkJCQlnb3RvIGJpb19mdWxsOworCQkJaWYgKGJpb19hZGRfcGFnZShiaW8sIHBhZ2UsIGxlbiwgMCkpCisJCQkJY29udGludWU7CisKKwkJCS8qIHN0b3AgaGVyZSAqLworCQkJYmlvLT5iaV9pb192ZWNbYmlvLT5iaV92Y250XS5idl9wYWdlID0gcGFnZTsKKwkJCWZvciAoYmlvMiA9IGJpb2xpc3Q7CisJCQkgICAgIGJpbzIgJiYgYmlvMiAhPSBiaW87CisJCQkgICAgIGJpbzIgPSBiaW8yLT5iaV9uZXh0KSB7CisJCQkJLyogcmVtb3ZlIGxhc3QgcGFnZSBmcm9tIHRoaXMgYmlvICovCisJCQkJYmlvMi0+YmlfdmNudC0tOworCQkJCWJpbzItPmJpX3NpemUgLT0gbGVuOworCQkJCWJpbzItPmJpX2ZsYWdzICY9IH4oMTw8IEJJT19TRUdfVkFMSUQpOwogCQkJfQotCQkJZGlzayA9IGk7CisJCQlnb3RvIGJpb19mdWxsOwogCQl9CiAJCW5yX3NlY3RvcnMgKz0gbGVuPj45OwogCQlzZWN0b3JfbnIgKz0gbGVuPj45OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNS5jIGIvZHJpdmVycy9tZC9yYWlkNS5jCmluZGV4IGYzMDFlNmEuLjM0ZGQ1NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDUuYworKysgYi9kcml2ZXJzL21kL3JhaWQ1LmMKQEAgLTE3MDAsMjcgKzE3MDAsMjUgQEAKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSBtZGRldi0+cHJpdmF0ZTsKIAlwcl9kZWJ1ZygicmFpZDQ1NjogZXJyb3IgY2FsbGVkXG4iKTsKIAotCWlmICghdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKSB7Ci0JCXNldF9iaXQoTURfQ0hBTkdFX0RFVlMsICZtZGRldi0+ZmxhZ3MpOwotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpIHsKLQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKLQkJCW1kZGV2LT5kZWdyYWRlZCsrOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKLQkJCS8qCi0JCQkgKiBpZiByZWNvdmVyeSB3YXMgcnVubmluZywgbWFrZSBzdXJlIGl0IGFib3J0cy4KLQkJCSAqLwotCQkJc2V0X2JpdChNRF9SRUNPVkVSWV9JTlRSLCAmbWRkZXYtPnJlY292ZXJ5KTsKLQkJfQotCQlzZXRfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKTsKLQkJcHJpbnRrKEtFUk5fQUxFUlQKLQkJICAgICAgICJtZC9yYWlkOiVzOiBEaXNrIGZhaWx1cmUgb24gJXMsIGRpc2FibGluZyBkZXZpY2UuXG4iCi0JCSAgICAgICAibWQvcmFpZDolczogT3BlcmF0aW9uIGNvbnRpbnVpbmcgb24gJWQgZGV2aWNlcy5cbiIsCi0JCSAgICAgICBtZG5hbWUobWRkZXYpLAotCQkgICAgICAgYmRldm5hbWUocmRldi0+YmRldiwgYiksCi0JCSAgICAgICBtZG5hbWUobWRkZXYpLAotCQkgICAgICAgY29uZi0+cmFpZF9kaXNrcyAtIG1kZGV2LT5kZWdyYWRlZCk7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjb25mLT5kZXZpY2VfbG9jaywgZmxhZ3MpOworCQltZGRldi0+ZGVncmFkZWQrKzsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwkJLyoKKwkJICogaWYgcmVjb3Zlcnkgd2FzIHJ1bm5pbmcsIG1ha2Ugc3VyZSBpdCBhYm9ydHMuCisJCSAqLworCQlzZXRfYml0KE1EX1JFQ09WRVJZX0lOVFIsICZtZGRldi0+cmVjb3ZlcnkpOwogCX0KKwlzZXRfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKTsKKwlzZXRfYml0KE1EX0NIQU5HRV9ERVZTLCAmbWRkZXYtPmZsYWdzKTsKKwlwcmludGsoS0VSTl9BTEVSVAorCSAgICAgICAibWQvcmFpZDolczogRGlzayBmYWlsdXJlIG9uICVzLCBkaXNhYmxpbmcgZGV2aWNlLlxuIgorCSAgICAgICAibWQvcmFpZDolczogT3BlcmF0aW9uIGNvbnRpbnVpbmcgb24gJWQgZGV2aWNlcy5cbiIsCisJICAgICAgIG1kbmFtZShtZGRldiksCisJICAgICAgIGJkZXZuYW1lKHJkZXYtPmJkZXYsIGIpLAorCSAgICAgICBtZG5hbWUobWRkZXYpLAorCSAgICAgICBjb25mLT5yYWlkX2Rpc2tzIC0gbWRkZXYtPmRlZ3JhZGVkKTsKIH0KIAogLyoKQEAgLTUxNTEsNyArNTE0OSw2IEBACiAKIAkJbWRkZXYtPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvLmNvbmdlc3RlZF9kYXRhID0gbWRkZXY7CiAJCW1kZGV2LT5xdWV1ZS0+YmFja2luZ19kZXZfaW5mby5jb25nZXN0ZWRfZm4gPSByYWlkNV9jb25nZXN0ZWQ7Ci0JCW1kZGV2LT5xdWV1ZS0+cXVldWVfbG9jayA9ICZjb25mLT5kZXZpY2VfbG9jazsKIAogCQljaHVua19zaXplID0gbWRkZXYtPmNodW5rX3NlY3RvcnMgPDwgOTsKIAkJYmxrX3F1ZXVlX2lvX21pbihtZGRldi0+cXVldWUsIGNodW5rX3NpemUpOwpAQCAtNTM5Miw3ICs1Mzg5LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJc2V0X2NhcGFjaXR5KG1kZGV2LT5nZW5kaXNrLCBtZGRldi0+YXJyYXlfc2VjdG9ycyk7CiAJcmV2YWxpZGF0ZV9kaXNrKG1kZGV2LT5nZW5kaXNrKTsKLQlpZiAoc2VjdG9ycyA+IG1kZGV2LT5kZXZfc2VjdG9ycyAmJiBtZGRldi0+cmVjb3ZlcnlfY3AgPT0gTWF4U2VjdG9yKSB7CisJaWYgKHNlY3RvcnMgPiBtZGRldi0+ZGV2X3NlY3RvcnMgJiYKKwkgICAgbWRkZXYtPnJlY292ZXJ5X2NwID4gbWRkZXYtPmRldl9zZWN0b3JzKSB7CiAJCW1kZGV2LT5yZWNvdmVyeV9jcCA9IG1kZGV2LT5kZXZfc2VjdG9yczsKIAkJc2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZtZGRldi0+cmVjb3ZlcnkpOwogCX0KQEAgLTU2NzksNiArNTY3Nyw3IEBACiBzdGF0aWMgdm9pZCAqcmFpZDQ1X3Rha2VvdmVyX3JhaWQwKG1kZGV2X3QgKm1kZGV2LCBpbnQgbGV2ZWwpCiB7CiAJc3RydWN0IHJhaWQwX3ByaXZhdGVfZGF0YSAqcmFpZDBfcHJpdiA9IG1kZGV2LT5wcml2YXRlOworCXNlY3Rvcl90IHNlY3RvcnM7CiAKIAkvKiBmb3IgcmFpZDAgdGFrZW92ZXIgb25seSBvbmUgem9uZSBpcyBzdXBwb3J0ZWQgKi8KIAlpZiAocmFpZDBfcHJpdi0+bnJfc3RyaXBfem9uZXMgPiAxKSB7CkBAIC01Njg3LDYgKzU2ODYsOSBAQAogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9CiAKKwlzZWN0b3JzID0gcmFpZDBfcHJpdi0+c3RyaXBfem9uZVswXS56b25lX2VuZDsKKwlzZWN0b3JfZGl2KHNlY3RvcnMsIHJhaWQwX3ByaXYtPnN0cmlwX3pvbmVbMF0ubmJfZGV2KTsKKwltZGRldi0+ZGV2X3NlY3RvcnMgPSBzZWN0b3JzOwogCW1kZGV2LT5uZXdfbGV2ZWwgPSBsZXZlbDsKIAltZGRldi0+bmV3X2xheW91dCA9IEFMR09SSVRITV9QQVJJVFlfTjsKIAltZGRldi0+bmV3X2NodW5rX3NlY3RvcnMgPSBtZGRldi0+Y2h1bmtfc2VjdG9yczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1jb21tb24uYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1jb21tb24uYwppbmRleCA1NDY2ZDQ3Li5hYWU0MGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtY29tbW9uLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWNvbW1vbi5jCkBAIC01MzMsMTYgKzUzMyw3IEBACiAJaWYgKHRkYV9mYWlsKHJldCkpCiAJCWdvdG8gZmFpbDsKIAotCXJlZ3NbUl9NUERdICAgPSAoMHg3NyAmIHBkKTsKLQotCXN3aXRjaCAocHJpdi0+bW9kZSkgewotCWNhc2UgVERBMTgyNzFfQU5BTE9HOgotCQlyZWdzW1JfTVBEXSAgJj0gfjB4MDg7Ci0JCWJyZWFrOwotCWNhc2UgVERBMTgyNzFfRElHSVRBTDoKLQkJcmVnc1tSX01QRF0gIHw9ICAweDA4OwotCQlicmVhazsKLQl9CisJcmVnc1tSX01QRF0gICA9ICgweDdmICYgcGQpOwogCiAJZGl2ID0gICgoZCAqIChmcmVxIC8gMTAwMCkpIDw8IDcpIC8gMTI1OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtZmUuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1mZS5jCmluZGV4IDlhZDQ0NTQuLmQ4ODRmNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1mZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1mZS5jCkBAIC01NzksOCArNTc5LDggQEAKICNkZWZpbmUgUkYzIDIKIAl1MzIgcmZfZGVmYXVsdFszXTsKIAl1MzIgcmZfZnJlcVszXTsKLQl1OCBwcm9nX2NhbFszXTsKLQl1OCBwcm9nX3RhYlszXTsKKwlzMzIgcHJvZ19jYWxbM107CisJczMyIHByb2dfdGFiWzNdOwogCiAJaSA9IHRkYTE4MjcxX2xvb2t1cF9yZl9iYW5kKGZlLCAmZnJlcSwgTlVMTCk7CiAKQEAgLTYwMiwzMiArNjAyLDMzIEBACiAJCQlyZXR1cm4gYmNhbDsKIAogCQl0ZGExODI3MV9jYWxjX3JmX2NhbChmZSwgJnJmX2ZyZXFbcmZdKTsKLQkJcHJvZ190YWJbcmZdID0gcmVnc1tSX0VCMTRdOworCQlwcm9nX3RhYltyZl0gPSAoczMyKXJlZ3NbUl9FQjE0XTsKIAogCQlpZiAoMSA9PSBiY2FsKQotCQkJcHJvZ19jYWxbcmZdID0gdGRhMTgyNzFfY2FsaWJyYXRlX3JmKGZlLCByZl9mcmVxW3JmXSk7CisJCQlwcm9nX2NhbFtyZl0gPQorCQkJCShzMzIpdGRhMTgyNzFfY2FsaWJyYXRlX3JmKGZlLCByZl9mcmVxW3JmXSk7CiAJCWVsc2UKIAkJCXByb2dfY2FsW3JmXSA9IHByb2dfdGFiW3JmXTsKIAogCQlzd2l0Y2ggKHJmKSB7CiAJCWNhc2UgUkYxOgogCQkJbWFwW2ldLnJmX2ExID0gMDsKLQkJCW1hcFtpXS5yZl9iMSA9IChzMzIpKHByb2dfY2FsW1JGMV0gLSBwcm9nX3RhYltSRjFdKTsKKwkJCW1hcFtpXS5yZl9iMSA9IChwcm9nX2NhbFtSRjFdIC0gcHJvZ190YWJbUkYxXSk7CiAJCQltYXBbaV0ucmYxICAgPSByZl9mcmVxW1JGMV0gLyAxMDAwOwogCQkJYnJlYWs7CiAJCWNhc2UgUkYyOgotCQkJZGl2aWRlbmQgPSAoczMyKShwcm9nX2NhbFtSRjJdIC0gcHJvZ190YWJbUkYyXSkgLQotCQkJCSAgIChzMzIpKHByb2dfY2FsW1JGMV0gKyBwcm9nX3RhYltSRjFdKTsKKwkJCWRpdmlkZW5kID0gKHByb2dfY2FsW1JGMl0gLSBwcm9nX3RhYltSRjJdIC0KKwkJCQkgICAgcHJvZ19jYWxbUkYxXSArIHByb2dfdGFiW1JGMV0pOwogCQkJZGl2aXNvciA9IChzMzIpKHJmX2ZyZXFbUkYyXSAtIHJmX2ZyZXFbUkYxXSkgLyAxMDAwOwogCQkJbWFwW2ldLnJmX2ExID0gKGRpdmlkZW5kIC8gZGl2aXNvcik7CiAJCQltYXBbaV0ucmYyICAgPSByZl9mcmVxW1JGMl0gLyAxMDAwOwogCQkJYnJlYWs7CiAJCWNhc2UgUkYzOgotCQkJZGl2aWRlbmQgPSAoczMyKShwcm9nX2NhbFtSRjNdIC0gcHJvZ190YWJbUkYzXSkgLQotCQkJCSAgIChzMzIpKHByb2dfY2FsW1JGMl0gKyBwcm9nX3RhYltSRjJdKTsKKwkJCWRpdmlkZW5kID0gKHByb2dfY2FsW1JGM10gLSBwcm9nX3RhYltSRjNdIC0KKwkJCQkgICAgcHJvZ19jYWxbUkYyXSArIHByb2dfdGFiW1JGMl0pOwogCQkJZGl2aXNvciA9IChzMzIpKHJmX2ZyZXFbUkYzXSAtIHJmX2ZyZXFbUkYyXSkgLyAxMDAwOwogCQkJbWFwW2ldLnJmX2EyID0gKGRpdmlkZW5kIC8gZGl2aXNvcik7Ci0JCQltYXBbaV0ucmZfYjIgPSAoczMyKShwcm9nX2NhbFtSRjJdIC0gcHJvZ190YWJbUkYyXSk7CisJCQltYXBbaV0ucmZfYjIgPSAocHJvZ19jYWxbUkYyXSAtIHByb2dfdGFiW1JGMl0pOwogCQkJbWFwW2ldLnJmMyAgID0gcmZfZnJlcVtSRjNdIC8gMTAwMDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLW1hcHMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1tYXBzLmMKaW5kZXggZTdmODRjNy4uM2Q1YjZhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLW1hcHMuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtbWFwcy5jCkBAIC0yMjksOCArMjI5LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgdGRhMTgyNzFfbWFwIHRkYTE4MjcxX3JmX2JhbmRbXSA9IHsKIAl7IC5yZm1heCA9ICA0NzkwMCwgLnZhbCA9IDB4MDAgfSwKIAl7IC5yZm1heCA9ICA2MTEwMCwgLnZhbCA9IDB4MDEgfSwKLS8qCXsgLnJmbWF4ID0gMTUyNjAwLCAudmFsID0gMHgwMiB9LCAqLwotCXsgLnJmbWF4ID0gMTIxMjAwLCAudmFsID0gMHgwMiB9LAorCXsgLnJmbWF4ID0gMTUyNjAwLCAudmFsID0gMHgwMiB9LAogCXsgLnJmbWF4ID0gMTY0NzAwLCAudmFsID0gMHgwMyB9LAogCXsgLnJmbWF4ID0gMjAzNTAwLCAudmFsID0gMHgwNCB9LAogCXsgLnJmbWF4ID0gNDU3ODAwLCAudmFsID0gMHgwNSB9LApAQCAtNDQ4LDcgKzQ0Nyw3IEBACiAJeyAucmZtYXggPSAxNTAwMDAsIC52YWwgPSAweGIwIH0sCiAJeyAucmZtYXggPSAxNTEwMDAsIC52YWwgPSAweGIxIH0sCiAJeyAucmZtYXggPSAxNTIwMDAsIC52YWwgPSAweGI3IH0sCi0JeyAucmZtYXggPSAxNTMwMDAsIC52YWwgPSAweGJkIH0sCisJeyAucmZtYXggPSAxNTI2MDAsIC52YWwgPSAweGJkIH0sCiAJeyAucmZtYXggPSAxNTQwMDAsIC52YWwgPSAweDIwIH0sCiAJeyAucmZtYXggPSAxNTUwMDAsIC52YWwgPSAweDIyIH0sCiAJeyAucmZtYXggPSAxNTYwMDAsIC52YWwgPSAweDI0IH0sCkBAIC00NTksNyArNDU4LDcgQEAKIAl7IC5yZm1heCA9IDE2MTAwMCwgLnZhbCA9IDB4MmQgfSwKIAl7IC5yZm1heCA9IDE2MzAwMCwgLnZhbCA9IDB4MmUgfSwKIAl7IC5yZm1heCA9IDE2NDAwMCwgLnZhbCA9IDB4MmYgfSwKLQl7IC5yZm1heCA9IDE2NTAwMCwgLnZhbCA9IDB4MzAgfSwKKwl7IC5yZm1heCA9IDE2NDcwMCwgLnZhbCA9IDB4MzAgfSwKIAl7IC5yZm1heCA9IDE2NjAwMCwgLnZhbCA9IDB4MTEgfSwKIAl7IC5yZm1heCA9IDE2NzAwMCwgLnZhbCA9IDB4MTIgfSwKIAl7IC5yZm1heCA9IDE2ODAwMCwgLnZhbCA9IDB4MTMgfSwKQEAgLTUxMCw3ICs1MDksOCBAQAogCXsgLnJmbWF4ID0gMjM2MDAwLCAudmFsID0gMHgxYiB9LAogCXsgLnJmbWF4ID0gMjM3MDAwLCAudmFsID0gMHgxYyB9LAogCXsgLnJmbWF4ID0gMjQwMDAwLCAudmFsID0gMHgxZCB9LAotCXsgLnJmbWF4ID0gMjQyMDAwLCAudmFsID0gMHgxZiB9LAorCXsgLnJmbWF4ID0gMjQyMDAwLCAudmFsID0gMHgxZSB9LAorCXsgLnJmbWF4ID0gMjQ0MDAwLCAudmFsID0gMHgxZiB9LAogCXsgLnJmbWF4ID0gMjQ3MDAwLCAudmFsID0gMHgyMCB9LAogCXsgLnJmbWF4ID0gMjQ5MDAwLCAudmFsID0gMHgyMSB9LAogCXsgLnJmbWF4ID0gMjUyMDAwLCAudmFsID0gMHgyMiB9LApAQCAtNjI0LDcgKzYyNCw3IEBACiAJeyAucmZtYXggPSA0NTMwMDAsIC52YWwgPSAweDkzIH0sCiAJeyAucmZtYXggPSA0NTQwMDAsIC52YWwgPSAweDk0IH0sCiAJeyAucmZtYXggPSA0NTYwMDAsIC52YWwgPSAweDk2IH0sCi0JeyAucmZtYXggPSA0NTcwMDAsIC52YWwgPSAweDk4IH0sCisJeyAucmZtYXggPSA0NTc4MDAsIC52YWwgPSAweDk4IH0sCiAJeyAucmZtYXggPSA0NjEwMDAsIC52YWwgPSAweDExIH0sCiAJeyAucmZtYXggPSA0NjgwMDAsIC52YWwgPSAweDEyIH0sCiAJeyAucmZtYXggPSA0NzIwMDAsIC52YWwgPSAweDEzIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtcGNpLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtcGNpLmMKaW5kZXggOTU1MjU0MC4uMDNmOTZkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXBjaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1wY2kuYwpAQCAtMzgsNyArMzgsNyBAQAogCURFQlNUQVRVUyk7CiAKICNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjAuMSIKLSNkZWZpbmUgRFJJVkVSX05BTUUgIlRlY2huaXNhdC9CMkMyIEZsZXhDb3AgSUkvSUliL0lJSSBEaWdpdGFsIFRWIFBDSSBEcml2ZXIiCisjZGVmaW5lIERSSVZFUl9OQU1FICJmbGV4Y29wLXBjaSIKICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiUGF0cmljayBCb2V0dGNoZXIgPHBhdHJpY2suYm9ldHRjaGVyQGRlc3kuZGU+IgogCiBzdHJ1Y3QgZmxleGNvcF9wY2kgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCmluZGV4IGZlNGY4OTQuLmM1NDUwMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKQEAgLTM1NiwxMyArMzU2LDE1IEBACiAJc2VsZWN0IERWQl9UREE4MjZYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9TVFYwMjg4IGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9JWDI1MDVWIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9TVFYwMjk5IGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9QTEwgaWYgIURWQl9GRV9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIExNRSBETTA0L1FRQk9YIERWQi1TIFVTQjIuMCAuCiAKIGNvbmZpZyBEVkJfVVNCX1RFQ0hOSVNBVF9VU0IyCiAJdHJpc3RhdGUgIlRlY2huaXNhdCBEVkItUy9TMiBVU0IyLjAgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIERWQl9VU0IKLQlzZWxlY3QgRFZCX1NUQjA4OTkgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgRFZCX1NUQjYxMDAgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1NUVjA5MHggaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1NUVjYxMTB4IGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBUZWNobmlzYXQgVVNCMiBEVkItUy9TMiBkZXZpY2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCmluZGV4IDk3YWYyNjYuLjY1MjE0YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYwpAQCAtMjE2Miw3ICsyMTYyLDcgQEAKIAkJLmFnYzFfcHQzICAgICAgID0gOTgsCiAJCS5hZ2MxX3Nsb3BlMSAgICA9IDAsCiAJCS5hZ2MxX3Nsb3BlMiAgICA9IDE2NywKLQkJLmFnYzFfcHQxICAgICAgID0gOTgsCisJCS5hZ2MyX3B0MSAgICAgICA9IDk4LAogCQkuYWdjMl9wdDIgICAgICAgPSAyNTUsCiAJCS5hZ2MyX3Nsb3BlMSAgICA9IDEwNCwKIAkJLmFnYzJfc2xvcGUyICAgID0gMCwKQEAgLTI0NDAsMTEgKzI0NDAsMTEgQEAKIAlkaWIwNzAwX3NldF9pMmNfc3BlZWQoYWRhcC0+ZGV2LCAzNDApOwogCWFkYXAtPmZlID0gZHZiX2F0dGFjaChkaWI3MDAwcF9hdHRhY2gsICZhZGFwLT5kZXYtPmkyY19hZGFwLCAweDkwLCAmdGZlNzA5MHB2cl9kaWI3MDAwcF9jb25maWdbMF0pOwogCi0JZGliNzA5MF9zbGF2ZV9yZXNldChhZGFwLT5mZSk7Ci0KIAlpZiAoYWRhcC0+ZmUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlkaWI3MDkwX3NsYXZlX3Jlc2V0KGFkYXAtPmZlKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYwppbmRleCBmYzVjY2Q4Li4yMWM1MmUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMKQEAgLTEzMjAsMTQgKzEzMjAsMTAgQEAKIHsKIAlpbnQgcmV0OwogCi0JbXV0ZXhfbG9jaygmZmR0di0+YXZjX211dGV4KTsKLQogCXJldCA9IGZkdHZfcmVhZChmZHR2LCBhZGRyLCBkYXRhKTsKIAlpZiAocmV0IDwgMCkKIAkJZGV2X2VycihmZHR2LT5kZXZpY2UsICJDTVA6IHJlYWQgSS9PIGVycm9yXG4iKTsKIAotCW11dGV4X3VubG9jaygmZmR0di0+YXZjX211dGV4KTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEzMzUsMTggKzEzMzEsOSBAQAogewogCWludCByZXQ7CiAKLQltdXRleF9sb2NrKCZmZHR2LT5hdmNfbXV0ZXgpOwotCi0JLyogZGF0YVtdIGlzIHN0YWNrLWFsbG9jYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSBETUEtbWFwcGVkLiAqLwotCW1lbWNweShmZHR2LT5hdmNfZGF0YSwgZGF0YSwgOCk7Ci0KLQlyZXQgPSBmZHR2X2xvY2soZmR0diwgYWRkciwgZmR0di0+YXZjX2RhdGEpOworCXJldCA9IGZkdHZfbG9jayhmZHR2LCBhZGRyLCBkYXRhKTsKIAlpZiAocmV0IDwgMCkKIAkJZGV2X2VycihmZHR2LT5kZXZpY2UsICJDTVA6IGxvY2sgSS9PIGVycm9yXG4iKTsKLQllbHNlCi0JCW1lbWNweShkYXRhLCBmZHR2LT5hdmNfZGF0YSwgOCk7Ci0KLQltdXRleF91bmxvY2soJmZkdHYtPmF2Y19tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1mdy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1mdy5jCmluZGV4IDgwMjJiNzQuLjg2NGI2MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtZncuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWZ3LmMKQEAgLTEyNSw2ICsxMjUsNyBAQAogCiAJCWkgPSAoaSArIDEpICYgKE5fUEFDS0VUUyAtIDEpOwogCX0KKwlmd19pc29fY29udGV4dF9xdWV1ZV9mbHVzaChjdHgtPmNvbnRleHQpOwogCWN0eC0+Y3VycmVudF9wYWNrZXQgPSBpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9uZ2VuZS1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9uZ2VuZS1jb3JlLmMKaW5kZXggY2NjMmQxYS4uNjkyN2M3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvbmdlbmUvbmdlbmUtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL25nZW5lLWNvcmUuYwpAQCAtMTUyMCw2ICsxNTIwLDcgQEAKIAlpZiAoZGV2LT5jaS5lbiAmJiAoaW8gJiBOR0VORV9JT19UU09VVCkpIHsKIAkJZHZiX2NhX2VuNTAyMjFfaW5pdChhZGFwdGVyLCBkZXYtPmNpLmVuLCAwLCAxKTsKIAkJc2V0X3RyYW5zZmVyKGNoYW4sIDEpOworCQljaGFuLT5kZXYtPmNoYW5uZWxbMl0uRGF0YUZvcm1hdEZsYWdzID0gREZfU1dBUDMyOwogCQlzZXRfdHJhbnNmZXIoJmNoYW4tPmRldi0+Y2hhbm5lbFsyXSwgMSk7CiAJCWR2Yl9yZWdpc3Rlcl9kZXZpY2UoYWRhcHRlciwgJmNoYW4tPmNpX2RldiwKIAkJCQkgICAgJm5nZW5lX2R2YmRldl9jaSwgKHZvaWQgKikgY2hhbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvbWVkaWEtZW50aXR5LmMgYi9kcml2ZXJzL21lZGlhL21lZGlhLWVudGl0eS5jCmluZGV4IDIzNjQwZWQuLjA1NjEzOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvbWVkaWEtZW50aXR5LmMKKysrIGIvZHJpdmVycy9tZWRpYS9tZWRpYS1lbnRpdHkuYwpAQCAtMzc4LDcgKzM3OCw2IEBACiAKIHN0YXRpYyBpbnQgX19tZWRpYV9lbnRpdHlfc2V0dXBfbGlua19ub3RpZnkoc3RydWN0IG1lZGlhX2xpbmsgKmxpbmssIHUzMiBmbGFncykKIHsKLQljb25zdCB1MzIgbWFzayA9IE1FRElBX0xOS19GTF9FTkFCTEVEOwogCWludCByZXQ7CiAKIAkvKiBOb3RpZnkgYm90aCBlbnRpdGllcy4gKi8KQEAgLTM5NSw3ICszOTQsNyBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWxpbmstPmZsYWdzID0gKGxpbmstPmZsYWdzICYgfm1hc2spIHwgKGZsYWdzICYgbWFzayk7CisJbGluay0+ZmxhZ3MgPSBmbGFnczsKIAlsaW5rLT5yZXZlcnNlLT5mbGFncyA9IGxpbmstPmZsYWdzOwogCiAJcmV0dXJuIDA7CkBAIC00MTcsNiArNDE2LDcgQEAKICAqLwogaW50IF9fbWVkaWFfZW50aXR5X3NldHVwX2xpbmsoc3RydWN0IG1lZGlhX2xpbmsgKmxpbmssIHUzMiBmbGFncykKIHsKKwljb25zdCB1MzIgbWFzayA9IE1FRElBX0xOS19GTF9FTkFCTEVEOwogCXN0cnVjdCBtZWRpYV9kZXZpY2UgKm1kZXY7CiAJc3RydWN0IG1lZGlhX2VudGl0eSAqc291cmNlLCAqc2luazsKIAlpbnQgcmV0ID0gLUVCVVNZOwpAQCAtNDI0LDYgKzQyNCwxMCBAQAogCWlmIChsaW5rID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCisJLyogVGhlIG5vbi1tb2RpZmlhYmxlIGxpbmsgZmxhZ3MgbXVzdCBub3QgYmUgbW9kaWZpZWQuICovCisJaWYgKChsaW5rLT5mbGFncyAmIH5tYXNrKSAhPSAoZmxhZ3MgJiB+bWFzaykpCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKGxpbmstPmZsYWdzICYgTUVESUFfTE5LX0ZMX0lNTVVUQUJMRSkKIAkJcmV0dXJuIGxpbmstPmZsYWdzID09IGZsYWdzID8gMCA6IC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtcjIuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtcjIuYwppbmRleCBkYzNmMDRjLi44N2JhZDc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbXIyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1yMi5jCkBAIC0xNzAsNyArMTcwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogISEhIG5vdCB0ZXN0ZWQsIGluIG15IGNhcmQgdGhpcyBkb2VzJ3Qgd29yayAhISEgKi8KKy8qICEhISBub3QgdGVzdGVkLCBpbiBteSBjYXJkIHRoaXMgZG9lc24ndCB3b3JrICEhISAqLwogc3RhdGljIGludCBmbXIyX3NldHZvbHVtZShzdHJ1Y3QgZm1yMiAqZGV2KQogewogCWludCB2b2xbMTZdID0geyAweDAyMSwgMHgwODQsIDB4MDkwLCAweDEwNCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2FhNzcwNmguYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2FhNzcwNmguYwppbmRleCA1ODU2ODBmLi5iMTE5M2RmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3NhYTc3MDZoLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9zYWE3NzA2aC5jCkBAIC0zNzYsNyArMzc2LDcgQEAKIAl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHglMDJ4ICglcylcbiIsCiAJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAotCXN0YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNhYTc3MDZoX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FhNzcwNmhfc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3RhdGUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJc2QgPSAmc3RhdGUtPnNkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby90ZWY2ODYyLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3RlZjY4NjIuYwppbmRleCA3YzBkNzc3Li4wOTkxZTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3RlZjY4NjIuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3RlZjY4NjIuYwpAQCAtMTc2LDcgKzE3Niw3IEBACiAJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JTAyeCAoJXMpXG4iLAogCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKLQlzdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0ZWY2ODYyX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGVmNjg2Ml9zdGF0ZSksIEdGUF9LRVJORUwpOwogCWlmIChzdGF0ZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlzdGF0ZS0+ZnJlcSA9IFRFRjY4NjJfTE9fRlJFUTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvaW1vbi5jIGIvZHJpdmVycy9tZWRpYS9yYy9pbW9uLmMKaW5kZXggZWJkNjhlZC4uOGZjMGYwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9pbW9uLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9pbW9uLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKICNkZWZpbmUgTU9EX0FVVEhPUgkiSmFyb2QgV2lsc29uIDxqYXJvZEB3aWxzb25ldC5jb20+IgogI2RlZmluZSBNT0RfREVTQwkiRHJpdmVyIGZvciBTb3VuZEdyYXBoIGlNT04gTXVsdGlNZWRpYSBJUi9EaXNwbGF5IgogI2RlZmluZSBNT0RfTkFNRQkiaW1vbiIKLSNkZWZpbmUgTU9EX1ZFUlNJT04JIjAuOS4yIgorI2RlZmluZSBNT0RfVkVSU0lPTgkiMC45LjMiCiAKICNkZWZpbmUgRElTUExBWV9NSU5PUl9CQVNFCTE0NAogI2RlZmluZSBERVZJQ0VfTkFNRQkibGNkJWQiCkBAIC00NjAsOCArNDYwLDkgQEAKIH0KIAogLyoqCi0gKiBTZW5kcyBhIHBhY2tldCB0byB0aGUgZGV2aWNlIC0tIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQKLSAqIHdpdGggaWN0eC0+bG9jayBoZWxkLgorICogU2VuZHMgYSBwYWNrZXQgdG8gdGhlIGRldmljZSAtLSB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGgKKyAqIGljdHgtPmxvY2sgaGVsZCwgb3IgaXRzIHVubG9jay9sb2NrIHNlcXVlbmNlIHdoaWxlIHdhaXRpbmcgZm9yIHR4CisgKiB0byBjb21wbGV0ZSBjYW4vd2lsbCBsZWFkIHRvIGEgZGVhZGxvY2suCiAgKi8KIHN0YXRpYyBpbnQgc2VuZF9wYWNrZXQoc3RydWN0IGltb25fY29udGV4dCAqaWN0eCkKIHsKQEAgLTk5MSwxMiArOTkyLDIxIEBACiAgKiB0aGUgaU1PTiByZW1vdGVzLCBhbmQgdGhvc2UgdXNlZCBieSB0aGUgV2luZG93cyBNQ0UgcmVtb3RlcyAod2hpY2ggaXMKICAqIHJlYWxseSBqdXN0IFJDLTYpLCBidXQgb25seSBvbmUgb3IgdGhlIG90aGVyIGF0IGEgdGltZSwgYXMgdGhlIHNpZ25hbHMKICAqIGFyZSBkZWNvZGVkIG9uYm9hcmQgdGhlIHJlY2VpdmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgdHdvIGRpZmZlcmVudCB3YXlzLCBvbmUgd2F5IGlzIGZyb20KKyAqIHJjX3JlZ2lzdGVyX2RldmljZSwgZm9yIGluaXRpYWwgcHJvdG9jb2wgc2VsZWN0aW9uL3NldHVwLCBhbmQgdGhlIG90aGVyIGlzCisgKiB2aWEgYSB1c2Vyc3BhY2UtaW5pdGlhdGVkIHByb3RvY29sIGNoYW5nZSByZXF1ZXN0LCBlaXRoZXIgYnkgZGlyZWN0IHN5c2ZzCisgKiBwcm9kZGluZyBvciBieSBzb21ldGhpbmcgbGlrZSBpci1rZXl0YWJsZS4gSW4gdGhlIHJjX3JlZ2lzdGVyX2RldmljZSBjYXNlLAorICogdGhlIGltb24gY29udGV4dCBsb2NrIGlzIGFscmVhZHkgaGVsZCwgYnV0IHdoZW4gaW5pdGlhdGVkIGZyb20gdXNlcnNwYWNlLAorICogaXQgaXMgbm90LCBzbyB3ZSBtdXN0IGFjcXVpcmUgaXQgcHJpb3IgdG8gY2FsbGluZyBzZW5kX3BhY2tldCwgd2hpY2gKKyAqIHJlcXVpcmVzIHRoYXQgdGhlIGxvY2sgaXMgaGVsZC4KICAqLwogc3RhdGljIGludCBpbW9uX2lyX2NoYW5nZV9wcm90b2NvbChzdHJ1Y3QgcmNfZGV2ICpyYywgdTY0IHJjX3R5cGUpCiB7CiAJaW50IHJldHZhbDsKIAlzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4ID0gcmMtPnByaXY7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gaWN0eC0+ZGV2OworCWJvb2wgdW5sb2NrID0gZmFsc2U7CiAJdW5zaWduZWQgY2hhciBpcl9wcm90b19wYWNrZXRbXSA9IHsKIAkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NiB9OwogCkBAIC0xMDI5LDYgKzEwMzksMTEgQEAKIAogCW1lbWNweShpY3R4LT51c2JfdHhfYnVmLCAmaXJfcHJvdG9fcGFja2V0LCBzaXplb2YoaXJfcHJvdG9fcGFja2V0KSk7CiAKKwlpZiAoIW11dGV4X2lzX2xvY2tlZCgmaWN0eC0+bG9jaykpIHsKKwkJdW5sb2NrID0gdHJ1ZTsKKwkJbXV0ZXhfbG9jaygmaWN0eC0+bG9jayk7CisJfQorCiAJcmV0dmFsID0gc2VuZF9wYWNrZXQoaWN0eCk7CiAJaWYgKHJldHZhbCkKIAkJZ290byBvdXQ7CkBAIC0xMDM3LDYgKzEwNTIsOSBAQAogCWljdHgtPnBhZF9tb3VzZSA9IGZhbHNlOwogCiBvdXQ6CisJaWYgKHVubG9jaykKKwkJbXV0ZXhfdW5sb2NrKCZpY3R4LT5sb2NrKTsKKwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTIxMzQsNiArMjE1Miw3IEBACiAJCWdvdG8gcmRldl9zZXR1cF9mYWlsZWQ7CiAJfQogCisJbXV0ZXhfdW5sb2NrKCZpY3R4LT5sb2NrKTsKIAlyZXR1cm4gaWN0eDsKIAogcmRldl9zZXR1cF9mYWlsZWQ6CkBAIC0yMjA1LDYgKzIyMjQsNyBAQAogCQlnb3RvIHVyYl9zdWJtaXRfZmFpbGVkOwogCX0KIAorCW11dGV4X3VubG9jaygmaWN0eC0+bG9jayk7CiAJcmV0dXJuIGljdHg7CiAKIHVyYl9zdWJtaXRfZmFpbGVkOgpAQCAtMjI5OSw2ICsyMzE5LDggQEAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgaWN0eCk7CiAKIAlpZiAoaWZudW0gPT0gMCkgeworCQltdXRleF9sb2NrKCZpY3R4LT5sb2NrKTsKKwogCQlpZiAocHJvZHVjdCA9PSAweGZmZGMgJiYgaWN0eC0+cmZfZGV2aWNlKSB7CiAJCQlzeXNmc19lcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmludGVyZmFjZS0+ZGV2LmtvYmosCiAJCQkJCQkgICAgICAgJmltb25fcmZfYXR0cl9ncm91cCk7CkBAIC0yMzA5LDEzICsyMzMxLDE0IEBACiAKIAkJaWYgKGljdHgtPmRpc3BsYXlfc3VwcG9ydGVkKQogCQkJaW1vbl9pbml0X2Rpc3BsYXkoaWN0eCwgaW50ZXJmYWNlKTsKKworCQltdXRleF91bmxvY2soJmljdHgtPmxvY2spOwogCX0KIAogCWRldl9pbmZvKGRldiwgImlNT04gZGV2aWNlICglMDR4OiUwNHgsIGludGYlZCkgb24gIgogCQkgInVzYjwlZDolZD4gaW5pdGlhbGl6ZWRcbiIsIHZlbmRvciwgcHJvZHVjdCwgaWZudW0sCiAJCSB1c2JkZXYtPmJ1cy0+YnVzbnVtLCB1c2JkZXYtPmRldm51bSk7CiAKLQltdXRleF91bmxvY2soJmljdHgtPmxvY2spOwogCW11dGV4X3VubG9jaygmZHJpdmVyX2xvY2spOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2l0ZS1jaXIuYyBiL2RyaXZlcnMvbWVkaWEvcmMvaXRlLWNpci5jCmluZGV4IGFjY2FmNmMuLjQzOTA4YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmMvaXRlLWNpci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvaXRlLWNpci5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL21jZXVzYi5jIGIvZHJpdmVycy9tZWRpYS9yYy9tY2V1c2IuYwppbmRleCAwNDRmYjdhLi4wYzI3M2VjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL21jZXVzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvbWNldXNiLmMKQEAgLTIyMCw2ICsyMjAsOCBAQAogCXsgVVNCX0RFVklDRShWRU5ET1JfUEhJTElQUywgMHgyMDZjKSB9LAogCS8qIFBoaWxpcHMvU3BpbmVsIHBsdXMgSVIgdHJhbnNjZWl2ZXIgZm9yIEFTVVMgKi8KIAl7IFVTQl9ERVZJQ0UoVkVORE9SX1BISUxJUFMsIDB4MjA4OCkgfSwKKwkvKiBQaGlsaXBzIElSIHRyYW5zY2VpdmVyIChEZWxsIGJyYW5kZWQpICovCisJeyBVU0JfREVWSUNFKFZFTkRPUl9QSElMSVBTLCAweDIwOTMpIH0sCiAJLyogUmVhbHRlayBNQ0UgSVIgUmVjZWl2ZXIgYW5kIGNhcmQgcmVhZGVyICovCiAJeyBVU0JfREVWSUNFKFZFTkRPUl9SRUFMVEVLLCAweDAxNjEpLAogCSAgLmRyaXZlcl9pbmZvID0gTVVMVElGVU5DVElPTiB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmMgYi9kcml2ZXJzL21lZGlhL3JjL3JjLW1haW4uYwppbmRleCBmNTNmOWM2Li5hMjcwNjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL3JjLW1haW4uYworKysgYi9kcml2ZXJzL21lZGlhL3JjL3JjLW1haW4uYwpAQCAtNzA3LDcgKzcwNyw4IEBACiB7CiAJc3RydWN0IHJjX2RldiAqcmRldiA9IGlucHV0X2dldF9kcnZkYXRhKGlkZXYpOwogCi0JcmRldi0+Y2xvc2UocmRldik7CisJIGlmIChyZGV2KQorCQlyZGV2LT5jbG9zZShyZGV2KTsKIH0KIAogLyogY2xhc3MgZm9yIC9zeXMvY2xhc3MvcmMgKi8KQEAgLTczMyw2ICs3MzQsNyBAQAogCXsgUkNfVFlQRV9TT05ZLAkJInNvbnkiCQl9LAogCXsgUkNfVFlQRV9SQzVfU1osCSJyYy01LXN6Igl9LAogCXsgUkNfVFlQRV9MSVJDLAkJImxpcmMiCQl9LAorCXsgUkNfVFlQRV9PVEhFUiwJIm90aGVyIgkJfSwKIH07CiAKICNkZWZpbmUgUFJPVE9fTk9ORQkibm9uZSIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwppbmRleCA0NDk4Yjk0Li4wMGY1MWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCkBAIC04NzUsNyArODc1LDcgQEAKIGNvbmZpZyBWSURFT19NWDMKIAl0cmlzdGF0ZSAiaS5NWDN4IENhbWVyYSBTZW5zb3IgSW50ZXJmYWNlIGRyaXZlciIKIAlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBNWDNfSVBVICYmIFNPQ19DQU1FUkEKLQlzZWxlY3QgVklERU9CVUZfRE1BX0NPTlRJRworCXNlbGVjdCBWSURFT0JVRjJfRE1BX0NPTlRJRwogCXNlbGVjdCBNWDNfVklERU8KIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgdjRsMiBkcml2ZXIgZm9yIHRoZSBpLk1YM3ggQ2FtZXJhIFNlbnNvciBJbnRlcmZhY2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYwppbmRleCBjNmUyY2EzLi42ZmJjMzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5jCkBAIC0zNTAsOSArMzUwLDE3IEBACiAKIAkJLyogTm8gc3RydWN0IHZpZGVvX2RldmljZSwgYnV0IGNhbiBoYXZlIGJ1ZmZlcnMgYWxsb2NhdGVkICovCiAJCWlmICh0eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX0lEWCkgeworCQkJLyogSWYgdGhlIG1vZHVsZSBwYXJhbXMgZGlkbid0IGluaGliaXQgSURYIC4uLiAqLwogCQkJaWYgKGN4LT5zdHJlYW1fYnVmZmVyc1t0eXBlXSAhPSAwKSB7CiAJCQkJY3gtPnN0cmVhbV9idWZmZXJzW3R5cGVdID0gMDsKLQkJCQljeDE4X3N0cmVhbV9mcmVlKCZjeC0+c3RyZWFtc1t0eXBlXSk7CisJCQkJLyoKKwkJCQkgKiBCZWZvcmUgY2FsbGluZyBjeDE4X3N0cmVhbV9mcmVlKCksCisJCQkJICogY2hlY2sgaWYgdGhlIElEWCBzdHJlYW0gd2FzIGFjdHVhbGx5IHNldCB1cC4KKwkJCQkgKiBOZWVkZWQsIHNpbmNlIHRoZSBjeDE4X3Byb2JlKCkgZXJyb3IgcGF0aAorCQkJCSAqIGV4aXRzIHRocm91Z2ggaGVyZSBhcyB3ZWxsIGFzIG5vcm1hbCBjbGVhbiB1cAorCQkJCSAqLworCQkJCWlmIChjeC0+c3RyZWFtc1t0eXBlXS5idWZmZXJzICE9IDApCisJCQkJCWN4MThfc3RyZWFtX2ZyZWUoJmN4LT5zdHJlYW1zW3R5cGVdKTsKIAkJCX0KIAkJCWNvbnRpbnVlOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9LY29uZmlnCmluZGV4IDNiNmU3ZjIuLmNhYWIxYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9LY29uZmlnCkBAIC0yMiw2ICsyMiw3IEBACiAJc2VsZWN0IERWQl9DWDI0MTE2IGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9TVFYwOTAwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9EUzMwMDAgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1NUVjAzNjcgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgTUVESUFfVFVORVJfTVQyMTMxIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAlzZWxlY3QgTUVESUFfVFVORVJfWEMyMDI4IGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAlzZWxlY3QgTUVESUFfVFVORVJfVERBODI5MCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYwppbmRleCBjODIwZTJmLi4zZjQ0MjAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMKQEAgLTUyNCw3ICs1MjQsNyBAQAogCWZvciAodG9kbyA9IDMyOyB0b2RvID4gMDsgdG9kbyAtPSBiaXRzKSB7CiAJCWV2LnB1bHNlID0gc2FtcGxlcyAmIDB4ODAwMDAwMDAgPyBmYWxzZSA6IHRydWU7CiAJCWJpdHMgPSBtaW4odG9kbywgMzJVIC0gZmxzKGV2LnB1bHNlID8gc2FtcGxlcyA6IH5zYW1wbGVzKSk7Ci0JCWV2LmR1cmF0aW9uID0gKGJpdHMgKiBOU0VDX1BFUl9TRUMpIC8gKDEwMDAgKiBpcl9zYW1wbGVyYXRlKTsKKwkJZXYuZHVyYXRpb24gPSAoYml0cyAqIChOU0VDX1BFUl9TRUMgLyAxMDAwKSkgLyBpcl9zYW1wbGVyYXRlOwogCQlpcl9yYXdfZXZlbnRfc3RvcmVfd2l0aF9maWx0ZXIoaXItPmRldiwgJmV2KTsKIAkJc2FtcGxlcyA8PD0gYml0czsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2lteDA3NC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pbXgwNzQuYwppbmRleCAxYTExNjkxLi4wMzgyZWE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2lteDA3NC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaW14MDc0LmMKQEAgLTI5OCw3ICsyOTgsNyBAQAogc3RhdGljIGludCBpbXgwNzRfc2V0X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKIAkJCQkgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQlyZXR1cm4gLTE7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9vcHMgaW14MDc0X29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbTUyNzkwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL201Mjc5MC5jCmluZGV4IDVlMWM5YTguLjMwM2ZmYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbTUyNzkwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tNTI3OTAuYwpAQCAtMTc0LDcgKzE3NCw3IEBACiAJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKIAkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCi0Jc3RhdGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbTUyNzkwX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbTUyNzkwX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHN0YXRlID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3AuYwppbmRleCA1MDNiZDc5Li40NzJhNjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwLmMKQEAgLTIxNSwyMCArMjE1LDIxIEBACiAJfQogCiAJc3dpdGNoICh4Y2xrc2VsKSB7Ci0JY2FzZSAwOgorCWNhc2UgSVNQX1hDTEtfQToKIAkJaXNwX3JlZ19jbHJfc2V0KGlzcCwgT01BUDNfSVNQX0lPTUVNX01BSU4sIElTUF9UQ1RSTF9DVFJMLAogCQkJCUlTUFRDVFJMX0NUUkxfRElWQV9NQVNLLAogCQkJCWRpdmlzb3IgPDwgSVNQVENUUkxfQ1RSTF9ESVZBX1NISUZUKTsKIAkJZGV2X2RiZyhpc3AtPmRldiwgImlzcF9zZXRfeGNsaygpOiBjYW1feGNsa2Egc2V0IHRvICVkIEh6XG4iLAogCQkJY3VycmVudHhjbGspOwogCQlicmVhazsKLQljYXNlIDE6CisJY2FzZSBJU1BfWENMS19COgogCQlpc3BfcmVnX2Nscl9zZXQoaXNwLCBPTUFQM19JU1BfSU9NRU1fTUFJTiwgSVNQX1RDVFJMX0NUUkwsCiAJCQkJSVNQVENUUkxfQ1RSTF9ESVZCX01BU0ssCiAJCQkJZGl2aXNvciA8PCBJU1BUQ1RSTF9DVFJMX0RJVkJfU0hJRlQpOwogCQlkZXZfZGJnKGlzcC0+ZGV2LCAiaXNwX3NldF94Y2xrKCk6IGNhbV94Y2xrYiBzZXQgdG8gJWQgSHpcbiIsCiAJCQljdXJyZW50eGNsayk7CiAJCWJyZWFrOworCWNhc2UgSVNQX1hDTEtfTk9ORToKIAlkZWZhdWx0OgogCQlvbWFwM2lzcF9wdXQoaXNwKTsKIAkJZGV2X2RiZyhpc3AtPmRldiwgIklTUF9FUlI6IGlzcF9zZXRfeGNsaygpOiBJbnZhbGlkIHJlcXVlc3RlZCAiCkBAIC0yMzcsMTMgKzIzOCwxMyBAQAogCX0KIAogCS8qIERvIHdlIGdvIGZyb20gc3RhYmxlIHdoYXRldmVyIHRvIGNsb2NrPyAqLwotCWlmIChkaXZpc29yID49IDIgJiYgaXNwLT54Y2xrX2Rpdmlzb3JbeGNsa3NlbF0gPCAyKQorCWlmIChkaXZpc29yID49IDIgJiYgaXNwLT54Y2xrX2Rpdmlzb3JbeGNsa3NlbCAtIDFdIDwgMikKIAkJb21hcDNpc3BfZ2V0KGlzcCk7CiAJLyogU3RvcHBpbmcgdGhlIGNsb2NrLiAqLwotCWVsc2UgaWYgKGRpdmlzb3IgPCAyICYmIGlzcC0+eGNsa19kaXZpc29yW3hjbGtzZWxdID49IDIpCisJZWxzZSBpZiAoZGl2aXNvciA8IDIgJiYgaXNwLT54Y2xrX2Rpdmlzb3JbeGNsa3NlbCAtIDFdID49IDIpCiAJCW9tYXAzaXNwX3B1dChpc3ApOwogCi0JaXNwLT54Y2xrX2Rpdmlzb3JbeGNsa3NlbF0gPSBkaXZpc29yOworCWlzcC0+eGNsa19kaXZpc29yW3hjbGtzZWwgLSAxXSA9IGRpdmlzb3I7CiAKIAlvbWFwM2lzcF9wdXQoaXNwKTsKIApAQCAtMjg1LDcgKzI4Niw4IEBACiAgKi8KIHZvaWQgb21hcDNpc3BfY29uZmlndXJlX2JyaWRnZShzdHJ1Y3QgaXNwX2RldmljZSAqaXNwLAogCQkJICAgICAgIGVudW0gY2NkY19pbnB1dF9lbnRpdHkgaW5wdXQsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IGlzcF9wYXJhbGxlbF9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaXNwX3BhcmFsbGVsX3BsYXRmb3JtX2RhdGEgKnBkYXRhLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBzaGlmdCkKIHsKIAl1MzIgaXNwY3RybF92YWw7CiAKQEAgLTI5OCw5ICszMDAsOSBAQAogCXN3aXRjaCAoaW5wdXQpIHsKIAljYXNlIENDRENfSU5QVVRfUEFSQUxMRUw6CiAJCWlzcGN0cmxfdmFsIHw9IElTUENUUkxfUEFSX1NFUl9DTEtfU0VMX1BBUkFMTEVMOwotCQlpc3BjdHJsX3ZhbCB8PSBwZGF0YS0+ZGF0YV9sYW5lX3NoaWZ0IDw8IElTUENUUkxfU0hJRlRfU0hJRlQ7CiAJCWlzcGN0cmxfdmFsIHw9IHBkYXRhLT5jbGtfcG9sIDw8IElTUENUUkxfUEFSX0NMS19QT0xfU0hJRlQ7CiAJCWlzcGN0cmxfdmFsIHw9IHBkYXRhLT5icmlkZ2UgPDwgSVNQQ1RSTF9QQVJfQlJJREdFX1NISUZUOworCQlzaGlmdCArPSBwZGF0YS0+ZGF0YV9sYW5lX3NoaWZ0ICogMjsKIAkJYnJlYWs7CiAKIAljYXNlIENDRENfSU5QVVRfQ1NJMkE6CkBAIC0zMTksNiArMzIxLDggQEAKIAkJcmV0dXJuOwogCX0KIAorCWlzcGN0cmxfdmFsIHw9ICgoc2hpZnQvMikgPDwgSVNQQ1RSTF9TSElGVF9TSElGVCkgJiBJU1BDVFJMX1NISUZUX01BU0s7CisKIAlpc3BjdHJsX3ZhbCAmPSB+SVNQQ1RSTF9TWU5DX0RFVEVDVF9NQVNLOwogCWlzcGN0cmxfdmFsIHw9IElTUENUUkxfU1lOQ19ERVRFQ1RfVlNSSVNFOwogCkBAIC02NTgsNiArNjYyLDggQEAKIAogCS8qIEFwcGx5IHBvd2VyIGNoYW5nZSB0byBjb25uZWN0ZWQgbm9uLW5vZGVzLiAqLwogCXJldCA9IGlzcF9waXBlbGluZV9wbV9wb3dlcihlbnRpdHksIGNoYW5nZSk7CisJaWYgKHJldCA8IDApCisJCWVudGl0eS0+dXNlX2NvdW50IC09IGNoYW5nZTsKIAogCW11dGV4X3VubG9jaygmZW50aXR5LT5wYXJlbnQtPmdyYXBoX211dGV4KTsKIApAQCAtODcyLDYgKzg3OCw5IEBACiAJCX0KIAl9CiAKKwlpZiAoZmFpbHVyZSA8IDApCisJCWlzcC0+bmVlZHNfcmVzZXQgPSB0cnVlOworCiAJcmV0dXJuIGZhaWx1cmU7CiB9CiAKQEAgLTg4NCw3ICs4OTMsOCBAQAogICogc2luZ2xlLXNob3Qgb3IgY29udGludW91cyBtb2RlLgogICoKICAqIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIG9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZhaWxlZCB2aWRlbzo6c19zdHJlYW0KLSAqIG9wZXJhdGlvbiBvdGhlcndpc2UuCisgKiBvcGVyYXRpb24gb3RoZXJ3aXNlLiBUaGUgcGlwZWxpbmUgc3RhdGUgaXMgbm90IHVwZGF0ZWQgd2hlbiB0aGUgb3BlcmF0aW9uCisgKiBmYWlscywgZXhjZXB0IHdoZW4gc3RvcHBpbmcgdGhlIHBpcGVsaW5lLgogICovCiBpbnQgb21hcDNpc3BfcGlwZWxpbmVfc2V0X3N0cmVhbShzdHJ1Y3QgaXNwX3BpcGVsaW5lICpwaXBlLAogCQkJCSBlbnVtIGlzcF9waXBlbGluZV9zdHJlYW1fc3RhdGUgc3RhdGUpCkBAIC04OTUsNyArOTA1LDkgQEAKIAkJcmV0ID0gaXNwX3BpcGVsaW5lX2Rpc2FibGUocGlwZSk7CiAJZWxzZQogCQlyZXQgPSBpc3BfcGlwZWxpbmVfZW5hYmxlKHBpcGUsIHN0YXRlKTsKLQlwaXBlLT5zdHJlYW1fc3RhdGUgPSBzdGF0ZTsKKworCWlmIChyZXQgPT0gMCB8fCBzdGF0ZSA9PSBJU1BfUElQRUxJTkVfU1RSRUFNX1NUT1BQRUQpCisJCXBpcGUtPnN0cmVhbV9zdGF0ZSA9IHN0YXRlOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE0ODEsNiArMTQ5MywxMCBAQAogCWlmICgtLWlzcC0+cmVmX2NvdW50ID09IDApIHsKIAkJaXNwX2Rpc2FibGVfaW50ZXJydXB0cyhpc3ApOwogCQlpc3Bfc2F2ZV9jdHgoaXNwKTsKKwkJaWYgKGlzcC0+bmVlZHNfcmVzZXQpIHsKKwkJCWlzcF9yZXNldChpc3ApOworCQkJaXNwLT5uZWVkc19yZXNldCA9IGZhbHNlOworCQl9CiAJCWlzcF9kaXNhYmxlX2Nsb2Nrcyhpc3ApOwogCX0KIAltdXRleF91bmxvY2soJmlzcC0+aXNwX211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcC5oCmluZGV4IGNmNTIxNGUuLjI2MjBjNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3AuaApAQCAtMTMyLDcgKzEzMiw2IEBACiAKIC8qKgogICogc3RydWN0IGlzcF9wYXJhbGxlbF9wbGF0Zm9ybV9kYXRhIC0gUGFyYWxsZWwgaW50ZXJmYWNlIHBsYXRmb3JtIGRhdGEKLSAqIEB3aWR0aDogUGFyYWxsZWwgYnVzIHdpZHRoIGluIGJpdHMgKDgsIDEwLCAxMSBvciAxMikKICAqIEBkYXRhX2xhbmVfc2hpZnQ6IERhdGEgbGFuZSBzaGlmdGVyCiAgKgkJMCAtIENBTUVYVFsxMzowXSAtPiBDQU1bMTM6MF0KICAqCQkxIC0gQ0FNRVhUWzEzOjJdIC0+IENBTVsxMTowXQpAQCAtMTQ2LDcgKzE0NSw2IEBACiAgKgkJSVNQQ1RSTF9QQVJfQlJJREdFX0JFTkRJQU4gLSBCaWcgZW5kaWFuCiAgKi8KIHN0cnVjdCBpc3BfcGFyYWxsZWxfcGxhdGZvcm1fZGF0YSB7Ci0JdW5zaWduZWQgaW50IHdpZHRoOwogCXVuc2lnbmVkIGludCBkYXRhX2xhbmVfc2hpZnQ6MjsKIAl1bnNpZ25lZCBpbnQgY2xrX3BvbDoxOwogCXVuc2lnbmVkIGludCBicmlkZ2U6NDsKQEAgLTI2Miw2ICsyNjAsNyBAQAogCS8qIElTUCBPYmogKi8KIAlzcGlubG9ja190IHN0YXRfbG9jazsJLyogY29tbW9uIGxvY2sgZm9yIHN0YXRpc3RpYyBkcml2ZXJzICovCiAJc3RydWN0IG11dGV4IGlzcF9tdXRleDsJLyogRm9yIGhhbmRsaW5nIHJlZl9jb3VudCBmaWVsZCAqLworCWJvb2wgbmVlZHNfcmVzZXQ7CiAJaW50IGhhc19jb250ZXh0OwogCWludCByZWZfY291bnQ7CiAJdW5zaWduZWQgaW50IGF1dG9pZGxlOwpAQCAtMzExLDExICszMTAsMTIgQEAKIAkJCQkgZW51bSBpc3BfcGlwZWxpbmVfc3RyZWFtX3N0YXRlIHN0YXRlKTsKIHZvaWQgb21hcDNpc3BfY29uZmlndXJlX2JyaWRnZShzdHJ1Y3QgaXNwX2RldmljZSAqaXNwLAogCQkJICAgICAgIGVudW0gY2NkY19pbnB1dF9lbnRpdHkgaW5wdXQsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IGlzcF9wYXJhbGxlbF9wbGF0Zm9ybV9kYXRhICpwZGF0YSk7CisJCQkgICAgICAgY29uc3Qgc3RydWN0IGlzcF9wYXJhbGxlbF9wbGF0Zm9ybV9kYXRhICpwZGF0YSwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgc2hpZnQpOwogCi0jZGVmaW5lIElTUF9YQ0xLX05PTkUJCQktMQotI2RlZmluZSBJU1BfWENMS19BCQkJMAotI2RlZmluZSBJU1BfWENMS19CCQkJMQorI2RlZmluZSBJU1BfWENMS19OT05FCQkJMAorI2RlZmluZSBJU1BfWENMS19BCQkJMQorI2RlZmluZSBJU1BfWENMS19CCQkJMgogCiBzdHJ1Y3QgaXNwX2RldmljZSAqb21hcDNpc3BfZ2V0KHN0cnVjdCBpc3BfZGV2aWNlICppc3ApOwogdm9pZCBvbWFwM2lzcF9wdXQoc3RydWN0IGlzcF9kZXZpY2UgKmlzcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcGNjZGMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwY2NkYy5jCmluZGV4IDVmZjlkMTQuLjM5ZDUwMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwY2NkYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwY2NkYy5jCkBAIC00Myw2ICs0MywxMiBAQAogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNjZGNfZm10c1tdID0gewogCVY0TDJfTUJVU19GTVRfWThfMVg4LAorCVY0TDJfTUJVU19GTVRfWTEwXzFYMTAsCisJVjRMMl9NQlVTX0ZNVF9ZMTJfMVgxMiwKKwlWNEwyX01CVVNfRk1UX1NHUkJHOF8xWDgsCisJVjRMMl9NQlVTX0ZNVF9TUkdHQjhfMVg4LAorCVY0TDJfTUJVU19GTVRfU0JHR1I4XzFYOCwKKwlWNEwyX01CVVNfRk1UX1NHQlJHOF8xWDgsCiAJVjRMMl9NQlVTX0ZNVF9TR1JCRzEwXzFYMTAsCiAJVjRMMl9NQlVTX0ZNVF9TUkdHQjEwXzFYMTAsCiAJVjRMMl9NQlVTX0ZNVF9TQkdHUjEwXzFYMTAsCkBAIC0xMTEwLDIxICsxMTE2LDM4IEBACiAJc3RydWN0IGlzcF9wYXJhbGxlbF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IE5VTEw7CiAJc3RydWN0IHY0bDJfc3ViZGV2ICpzZW5zb3I7CiAJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqZm9ybWF0OworCWNvbnN0IHN0cnVjdCBpc3BfZm9ybWF0X2luZm8gKmZtdF9pbmZvOworCXN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgZm10X3NyYzsKKwl1bnNpZ25lZCBpbnQgZGVwdGhfb3V0OworCXVuc2lnbmVkIGludCBkZXB0aF9pbiA9IDA7CiAJc3RydWN0IG1lZGlhX3BhZCAqcGFkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHNoaWZ0OwogCXUzMiBzeW5fbW9kZTsKIAl1MzIgY2NkY19wYXR0ZXJuOwogCi0JaWYgKGNjZGMtPmlucHV0ID09IENDRENfSU5QVVRfUEFSQUxMRUwpIHsKLQkJcGFkID0gbWVkaWFfZW50aXR5X3JlbW90ZV9zb3VyY2UoJmNjZGMtPnBhZHNbQ0NEQ19QQURfU0lOS10pOwotCQlzZW5zb3IgPSBtZWRpYV9lbnRpdHlfdG9fdjRsMl9zdWJkZXYocGFkLT5lbnRpdHkpOworCXBhZCA9IG1lZGlhX2VudGl0eV9yZW1vdGVfc291cmNlKCZjY2RjLT5wYWRzW0NDRENfUEFEX1NJTktdKTsKKwlzZW5zb3IgPSBtZWRpYV9lbnRpdHlfdG9fdjRsMl9zdWJkZXYocGFkLT5lbnRpdHkpOworCWlmIChjY2RjLT5pbnB1dCA9PSBDQ0RDX0lOUFVUX1BBUkFMTEVMKQogCQlwZGF0YSA9ICYoKHN0cnVjdCBpc3BfdjRsMl9zdWJkZXZzX2dyb3VwICopc2Vuc29yLT5ob3N0X3ByaXYpCiAJCQktPmJ1cy5wYXJhbGxlbDsKKworCS8qIENvbXB1dGUgc2hpZnQgdmFsdWUgZm9yIGxhbmUgc2hpZnRlciB0byBjb25maWd1cmUgdGhlIGJyaWRnZS4gKi8KKwlmbXRfc3JjLnBhZCA9IHBhZC0+aW5kZXg7CisJZm10X3NyYy53aGljaCA9IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkU7CisJaWYgKCF2NGwyX3N1YmRldl9jYWxsKHNlbnNvciwgcGFkLCBnZXRfZm10LCBOVUxMLCAmZm10X3NyYykpIHsKKwkJZm10X2luZm8gPSBvbWFwM2lzcF92aWRlb19mb3JtYXRfaW5mbyhmbXRfc3JjLmZvcm1hdC5jb2RlKTsKKwkJZGVwdGhfaW4gPSBmbXRfaW5mby0+YnBwOwogCX0KIAotCW9tYXAzaXNwX2NvbmZpZ3VyZV9icmlkZ2UoaXNwLCBjY2RjLT5pbnB1dCwgcGRhdGEpOworCWZtdF9pbmZvID0gb21hcDNpc3BfdmlkZW9fZm9ybWF0X2luZm8KKwkJKGlzcC0+aXNwX2NjZGMuZm9ybWF0c1tDQ0RDX1BBRF9TSU5LXS5jb2RlKTsKKwlkZXB0aF9vdXQgPSBmbXRfaW5mby0+YnBwOwogCi0JY2NkYy0+c3luY2lmLmRhdHN6ID0gcGRhdGEgPyBwZGF0YS0+d2lkdGggOiAxMDsKKwlzaGlmdCA9IGRlcHRoX2luIC0gZGVwdGhfb3V0OworCW9tYXAzaXNwX2NvbmZpZ3VyZV9icmlkZ2UoaXNwLCBjY2RjLT5pbnB1dCwgcGRhdGEsIHNoaWZ0KTsKKworCWNjZGMtPnN5bmNpZi5kYXRzeiA9IGRlcHRoX291dDsKIAljY2RjX2NvbmZpZ19zeW5jX2lmKGNjZGMsICZjY2RjLT5zeW5jaWYpOwogCiAJLyogQ0NEQ19QQURfU0lOSyAqLwpAQCAtMTMzOCw3ICsxMzYxLDcgQEAKICAqIEBjY2RjOiBQb2ludGVyIHRvIElTUCBDQ0RDIGRldmljZS4KICAqIEBldmVudDogUG9pbnRpbmcgd2hpY2ggZXZlbnQgdHJpZ2dlciBoYW5kbGVyCiAgKgotICogUmV0dXJuIDEgd2hlbiB0aGUgZXZlbnQgYW5kIHN0b3BwaW5nIHJlcXVlc3QgY29tYmluYXRpb24gaXMgc2F0aXNmeWllZCwKKyAqIFJldHVybiAxIHdoZW4gdGhlIGV2ZW50IGFuZCBzdG9wcGluZyByZXF1ZXN0IGNvbWJpbmF0aW9uIGlzIHNhdGlzZmllZCwKICAqIHplcm8gb3RoZXJ3aXNlLgogICovCiBzdGF0aWMgaW50IF9fY2NkY19oYW5kbGVfc3RvcHBpbmcoc3RydWN0IGlzcF9jY2RjX2RldmljZSAqY2NkYywgdTMyIGV2ZW50KQpAQCAtMTYxOCw3ICsxNjQxLDcgQEAKIAogCWNjZGNfc2V0X291dGFkZHIoY2NkYywgYnVmZmVyLT5pc3BfYWRkcik7CiAKLQkvKiBXZSBub3cgaGF2ZSBhIGJ1ZmZlciBxdWV1ZWQgb24gdGhlIG91dHB1dCwgcmVzdGFydCB0aGUgcGlwZWxpbmUgaW4KKwkvKiBXZSBub3cgaGF2ZSBhIGJ1ZmZlciBxdWV1ZWQgb24gdGhlIG91dHB1dCwgcmVzdGFydCB0aGUgcGlwZWxpbmUKIAkgKiBvbiB0aGUgbmV4dCBDQ0RDIGludGVycnVwdCBpZiBydW5uaW5nIGluIGNvbnRpbnVvdXMgbW9kZSAob3Igd2hlbgogCSAqIHN0YXJ0aW5nIHRoZSBzdHJlYW0pLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BwcmV2aWV3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHByZXZpZXcuYwppbmRleCAyYjE2OTg4Li5hYmE1MzdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHByZXZpZXcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHByZXZpZXcuYwpAQCAtNzU1LDcgKzc1NSw3IEBACiAgKiBAY29uZmlncyAtIHBvaW50ZXIgdG8gdXBkYXRlIGNvbmZpZyBzdHJ1Y3R1cmUuCiAgKiBAY29uZmlnIC0gcmV0dXJuIHBvaW50ZXIgdG8gYXBwcm9wcmlhdGUgc3RydWN0dXJlIGZpZWxkLgogICogQGJpdCAtIGZvciB3aGljaCBmZWF0dXJlIHRvIHJldHVybiBwb2ludGVycy4KLSAqIFJldHVybiBzaXplIG9mIGNvcmVzcG9uZGluZyBwcmV2X3BhcmFtcyBtZW1iZXIKKyAqIFJldHVybiBzaXplIG9mIGNvcnJlc3BvbmRpbmcgcHJldl9wYXJhbXMgbWVtYmVyCiAgKi8KIHN0YXRpYyB1MzIKIF9fcHJldmlld19nZXRfcHRycyhzdHJ1Y3QgcHJldl9wYXJhbXMgKnBhcmFtcywgdm9pZCAqKnBhcmFtLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BxdWV1ZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BxdWV1ZS5jCmluZGV4IDhmZGRjNTguLjljMzE3MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwcXVldWUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHF1ZXVlLmMKQEAgLTMzOSw3ICszMzksNyBAQAogCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKIAlpZiAocmV0ICE9IGJ1Zi0+bnBhZ2VzKSB7Ci0JCWJ1Zi0+bnBhZ2VzID0gcmV0OworCQlidWYtPm5wYWdlcyA9IHJldCA8IDAgPyAwIDogcmV0OwogCQlpc3BfdmlkZW9fYnVmZmVyX2NsZWFudXAoYnVmKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQpAQCAtNDA4LDggKzQwOCw4IEBACiAgKiBpc3BfdmlkZW9fYnVmZmVyX3ByZXBhcmVfdm1fZmxhZ3MgLSBHZXQgVk1BIGZsYWdzIGZvciBhIHVzZXJzcGFjZSBhZGRyZXNzCiAgKgogICogVGhpcyBmdW5jdGlvbiBsb2NhdGVzIHRoZSBWTUFzIGZvciB0aGUgYnVmZmVyJ3MgdXNlcnNwYWNlIGFkZHJlc3MgYW5kIGNoZWNrcwotICogdGhhdCB0aGVpciBmbGFncyBtYXRjaC4gVGhlIG9ubGZsYWcgdGhhdCB3ZSBuZWVkIHRvIGNhcmUgZm9yIGF0IHRoZSBtb21lbnQgaXMKLSAqIFZNX1BGTk1BUC4KKyAqIHRoYXQgdGhlaXIgZmxhZ3MgbWF0Y2guIFRoZSBvbmx5IGZsYWcgdGhhdCB3ZSBuZWVkIHRvIGNhcmUgZm9yIGF0IHRoZSBtb21lbnQKKyAqIGlzIFZNX1BGTk1BUC4KICAqCiAgKiBUaGUgYnVmZmVyIHZtX2ZsYWdzIGZpZWxkIGlzIHNldCB0byB0aGUgZmlyc3QgVk1BIGZsYWdzLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwcmVzaXplci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3ByZXNpemVyLmMKaW5kZXggNjUzZjg4Yi4uMGJiMGY4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3ByZXNpemVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3ByZXNpemVyLmMKQEAgLTcxNCwxOSArNzE0LDUwIEBACiAgKiBpdyBhbmQgaWggYXJlIHRoZSBpbnB1dCB3aWR0aCBhbmQgaGVpZ2h0IGFmdGVyIGNyb3BwaW5nLiBUaG9zZSBlcXVhdGlvbnMgbmVlZAogICogdG8gYmUgc2F0aXNmaWVkIGV4YWN0bHkgZm9yIHRoZSByZXNpemVyIHRvIHdvcmsgY29ycmVjdGx5LgogICoKLSAqIFJldmVydGluZyB0aGUgZXF1YXRpb25zLCB3ZSBjYW4gY29tcHV0ZSB0aGUgcmVzaXppbmcgcmF0aW9zIHdpdGgKKyAqIFRoZSBlcXVhdGlvbnMgY2FuJ3QgYmUgZWFzaWx5IHJldmVydGVkLCBhcyB0aGUgPj4gOCBvcGVyYXRpb24gaXMgbm90IGxpbmVhci4KKyAqIEluIGFkZGl0aW9uLCBub3QgYWxsIGlucHV0IHNpemVzIGNhbiBiZSBhY2hpZXZlZCBmb3IgYSBnaXZlbiBvdXRwdXQgc2l6ZS4gVG8KKyAqIGdldCB0aGUgaGlnaGVzdCBpbnB1dCBzaXplIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHJlcXVlc3RlZCBpbnB1dCBzaXplLAorICogd2UgbmVlZCB0byBjb21wdXRlIHRoZSBoaWdoZXN0IHJlc2l6aW5nIHJhdGlvIHRoYXQgc2F0aXNmaWVzIHRoZSBmb2xsb3dpbmcKKyAqIGluZXF1YWxpdHkgKHRha2luZyB0aGUgNC10YXAgbW9kZSB3aWR0aCBlcXVhdGlvbiBhcyBhbiBleGFtcGxlKQorICoKKyAqCWl3ID49ICgzMiAqIHNwaCArIChvdyAtIDEpICogaHJzeiArIDE2KSA+PiA4IC0gNworICoKKyAqICh3aGVyZSBpdyBpcyB0aGUgcmVxdWVzdGVkIGlucHV0IHdpZHRoKSB3aGljaCBjYW4gYmUgcmV3cml0dGVuIGFzCisgKgorICoJICBpdyAtIDcgICAgICAgICAgICA+PSAoMzIgKiBzcGggKyAob3cgLSAxKSAqIGhyc3ogKyAxNikgPj4gOAorICoJIChpdyAtIDcpIDw8IDggICAgICA+PSAgMzIgKiBzcGggKyAob3cgLSAxKSAqIGhyc3ogKyAxNiAtIGIKKyAqCSgoaXcgLSA3KSA8PCA4KSArIGIgPj0gIDMyICogc3BoICsgKG93IC0gMSkgKiBocnN6ICsgMTYKKyAqCisgKiB3aGVyZSBiIGlzIHRoZSB2YWx1ZSBvZiB0aGUgOCBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIHRoZSByaWdodCBoYW5kIHNpZGUKKyAqIGV4cHJlc3Npb24gb2YgdGhlIGxhc3QgaW5lcXVhbGl0eS4gVGhlIGhpZ2hlc3QgcmVzaXppbmcgcmF0aW8gdmFsdWUgd2lsbCBiZQorICogYWNoaWV2ZWQgd2hlbiBiIGlzIGVxdWFsIHRvIGl0cyBtYXhpbXVtIHZhbHVlIG9mIDI1NS4gVGhhdCByZXNpemluZyByYXRpbworICogdmFsdWUgd2lsbCBzdGlsbCBzYXRpc2Z5IHRoZSBvcmlnaW5hbCBpbmVxdWFsaXR5LCBhcyBiIHdpbGwgZGlzYXBwZWFyIHdoZW4KKyAqIHRoZSBleHByZXNzaW9uIHdpbGwgYmUgc2hpZnRlZCByaWdodCBieSA4LgorICoKKyAqIFRoZSByZXZlcnRlZCB0aGUgZXF1YXRpb25zIHRodXMgYmVjb21lCiAgKgogICogLSA4LXBoYXNlLCA0LXRhcCBtb2RlCi0gKglocnN6ID0gKChpdyAtIDcpICogMjU2IC0gMTYgLSAzMiAqIHNwaCkgLyAob3cgLSAxKQotICoJdnJzeiA9ICgoaWggLSA0KSAqIDI1NiAtIDE2IC0gMzIgKiBzcHYpIC8gKG9oIC0gMSkKKyAqCWhyc3ogPSAoKGl3IC0gNykgKiAyNTYgKyAyNTUgLSAxNiAtIDMyICogc3BoKSAvIChvdyAtIDEpCisgKgl2cnN6ID0gKChpaCAtIDQpICogMjU2ICsgMjU1IC0gMTYgLSAzMiAqIHNwdikgLyAob2ggLSAxKQogICogLSA0LXBoYXNlLCA3LXRhcCBtb2RlCi0gKglocnN6ID0gKChpdyAtIDcpICogMjU2IC0gMzIgLSA2NCAqIHNwaCkgLyAob3cgLSAxKQotICoJdnJzeiA9ICgoaWggLSA3KSAqIDI1NiAtIDMyIC0gNjQgKiBzcHYpIC8gKG9oIC0gMSkKKyAqCWhyc3ogPSAoKGl3IC0gNykgKiAyNTYgKyAyNTUgLSAzMiAtIDY0ICogc3BoKSAvIChvdyAtIDEpCisgKgl2cnN6ID0gKChpaCAtIDcpICogMjU2ICsgMjU1IC0gMzIgLSA2NCAqIHNwdikgLyAob2ggLSAxKQogICoKLSAqIFRoZSByYXRpb3MgYXJlIGludGVnZXIgdmFsdWVzLCBhbmQgbXVzdCBiZSByb3VuZGVkIGRvd24gdG8gZW5zdXJlIHRoYXQgdGhlCi0gKiBjcm9wcGVkIGlucHV0IHNpemUgaXMgbm90IGJpZ2dlciB0aGFuIHRoZSB1bmNyb3BwZWQgaW5wdXQgc2l6ZS4gQXMgdGhlIHJhdGlvCi0gKiBpbiA3LXRhcCBtb2RlIGlzIGFsd2F5cyBzbWFsbGVyIHRoYW4gdGhlIHJhdGlvIGluIDQtdGFwIG1vZGUsIHdlIGNhbiB1c2UgdGhlCi0gKiA3LXRhcCBtb2RlIGVxdWF0aW9ucyB0byBjb21wdXRlIGEgcmF0aW8gYXBwcm94aW1hdGlvbi4KKyAqIFRoZSByYXRpb3MgYXJlIGludGVnZXIgdmFsdWVzLCBhbmQgYXJlIHJvdW5kZWQgZG93biB0byBlbnN1cmUgdGhhdCB0aGUKKyAqIGNyb3BwZWQgaW5wdXQgc2l6ZSBpcyBub3QgYmlnZ2VyIHRoYW4gdGhlIHVuY3JvcHBlZCBpbnB1dCBzaXplLgorICoKKyAqIEFzIHRoZSBudW1iZXIgb2YgcGhhc2VzL3RhcHMsIHVzZWQgdG8gc2VsZWN0IHRoZSBjb3JyZWN0IGVxdWF0aW9ucyB0byBjb21wdXRlCisgKiB0aGUgcmF0aW8sIGRlcGVuZHMgb24gdGhlIHJhdGlvLCB3ZSBzdGFydCB3aXRoIHRoZSA0LXRhcCBtb2RlIGVxdWF0aW9ucyB0bworICogY29tcHV0ZSBhbiBhcHByb3hpbWF0aW9uIG9mIHRoZSByYXRpbywgYW5kIHN3aXRjaCB0byB0aGUgNy10YXAgbW9kZSBlcXVhdGlvbnMKKyAqIGlmIHRoZSBhcHByb3hpbWF0aW9uIGlzIGhpZ2hlciB0aGFuIHRoZSByYXRpbyB0aHJlc2hvbGQuCisgKgorICogQXMgdGhlIDctdGFwIG1vZGUgZXF1YXRpb25zIHdpbGwgcmV0dXJuIGEgcmF0aW8gc21hbGxlciB0aGFuIG9yIGVxdWFsIHRvIHRoZQorICogNC10YXAgbW9kZSBlcXVhdGlvbnMsIHRoZSByZXN1bHRpbmcgcmF0aW8gY291bGQgYmVjb21lIGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8KKyAqIHRoZSByYXRpbyB0aHJlc2hvbGQuIFRoaXMgJ2VxdWF0aW9ucyBsb29wJyBpc24ndCBhbiBpc3N1ZSBhcyBsb25nIGFzIHRoZQorICogY29ycmVjdCBlcXVhdGlvbnMgYXJlIHVzZWQgdG8gY29tcHV0ZSB0aGUgZmluYWwgaW5wdXQgc2l6ZS4gU3RhcnRpbmcgd2l0aCB0aGUKKyAqIDQtdGFwIG1vZGUgZXF1YXRpb25zIGVuc3VyZSB0aGF0LCBpbiBjYXNlIG9mIHZhbHVlcyByZXN1bHRpbmcgaW4gYSAncmF0aW8KKyAqIGxvb3AnLCB0aGUgc21hbGxlc3Qgb2YgdGhlIHJhdGlvIHZhbHVlcyB3aWxsIGJlIHVzZWQsIG5ldmVyIGV4Y2VlZGluZyB0aGUKKyAqIHJlcXVlc3RlZCBpbnB1dCBzaXplLgogICoKICAqIFdlIGZpcnN0IGNsYW1wIHRoZSBvdXRwdXQgc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllIHRvIGF2b2lkCiAgKiBhdXRvLWNyb3BwaW5nIHRoZSBpbnB1dCBtb3JlIHRoYW4gcmVxdWlyZWQgdG8gc2F0aXNmeSB0aGUgVFJNIGVxdWF0aW9ucy4gVGhlCkBAIC03NzUsNiArODA2LDggQEAKIAl1bnNpZ25lZCBpbnQgbWF4X3dpZHRoOwogCXVuc2lnbmVkIGludCBtYXhfaGVpZ2h0OwogCXVuc2lnbmVkIGludCB3aWR0aF9hbGlnbm1lbnQ7CisJdW5zaWduZWQgaW50IHdpZHRoOworCXVuc2lnbmVkIGludCBoZWlnaHQ7CiAKIAkvKgogCSAqIENsYW1wIHRoZSBvdXRwdXQgaGVpZ2h0IGJhc2VkIG9uIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgYW5kCkBAIC03ODYsMTkgKzgxOSwyMiBAQAogCW1heF9oZWlnaHQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG1heF9oZWlnaHQsIE1BWF9PVVRfSEVJR0hUKTsKIAlvdXRwdXQtPmhlaWdodCA9IGNsYW1wKG91dHB1dC0+aGVpZ2h0LCBtaW5faGVpZ2h0LCBtYXhfaGVpZ2h0KTsKIAotCXJhdGlvLT52ZXJ0ID0gKChpbnB1dC0+aGVpZ2h0IC0gNykgKiAyNTYgLSAzMiAtIDY0ICogc3B2KQorCXJhdGlvLT52ZXJ0ID0gKChpbnB1dC0+aGVpZ2h0IC0gNCkgKiAyNTYgKyAyNTUgLSAxNiAtIDMyICogc3B2KQogCQkgICAgLyAob3V0cHV0LT5oZWlnaHQgLSAxKTsKKwlpZiAocmF0aW8tPnZlcnQgPiBNSURfUkVTSVpFX1ZBTFVFKQorCQlyYXRpby0+dmVydCA9ICgoaW5wdXQtPmhlaWdodCAtIDcpICogMjU2ICsgMjU1IC0gMzIgLSA2NCAqIHNwdikKKwkJCSAgICAvIChvdXRwdXQtPmhlaWdodCAtIDEpOwogCXJhdGlvLT52ZXJ0ID0gY2xhbXBfdCh1bnNpZ25lZCBpbnQsIHJhdGlvLT52ZXJ0LAogCQkJICAgICAgTUlOX1JFU0laRV9WQUxVRSwgTUFYX1JFU0laRV9WQUxVRSk7CiAKIAlpZiAocmF0aW8tPnZlcnQgPD0gTUlEX1JFU0laRV9WQUxVRSkgewogCQl1cHNjYWxlZF9oZWlnaHQgPSAob3V0cHV0LT5oZWlnaHQgLSAxKSAqIHJhdGlvLT52ZXJ0CiAJCQkJKyAzMiAqIHNwdiArIDE2OwotCQlpbnB1dC0+aGVpZ2h0ID0gKHVwc2NhbGVkX2hlaWdodCA+PiA4KSArIDQ7CisJCWhlaWdodCA9ICh1cHNjYWxlZF9oZWlnaHQgPj4gOCkgKyA0OwogCX0gZWxzZSB7CiAJCXVwc2NhbGVkX2hlaWdodCA9IChvdXRwdXQtPmhlaWdodCAtIDEpICogcmF0aW8tPnZlcnQKIAkJCQkrIDY0ICogc3B2ICsgMzI7Ci0JCWlucHV0LT5oZWlnaHQgPSAodXBzY2FsZWRfaGVpZ2h0ID4+IDgpICsgNzsKKwkJaGVpZ2h0ID0gKHVwc2NhbGVkX2hlaWdodCA+PiA4KSArIDc7CiAJfQogCiAJLyoKQEAgLTg1NCwyMCArODkwLDI5IEBACiAJCQkgICAgICBtYXhfd2lkdGggJiB+KHdpZHRoX2FsaWdubWVudCAtIDEpKTsKIAlvdXRwdXQtPndpZHRoID0gQUxJR04ob3V0cHV0LT53aWR0aCwgd2lkdGhfYWxpZ25tZW50KTsKIAotCXJhdGlvLT5ob3J6ID0gKChpbnB1dC0+d2lkdGggLSA3KSAqIDI1NiAtIDMyIC0gNjQgKiBzcGgpCisJcmF0aW8tPmhvcnogPSAoKGlucHV0LT53aWR0aCAtIDcpICogMjU2ICsgMjU1IC0gMTYgLSAzMiAqIHNwaCkKIAkJICAgIC8gKG91dHB1dC0+d2lkdGggLSAxKTsKKwlpZiAocmF0aW8tPmhvcnogPiBNSURfUkVTSVpFX1ZBTFVFKQorCQlyYXRpby0+aG9yeiA9ICgoaW5wdXQtPndpZHRoIC0gNykgKiAyNTYgKyAyNTUgLSAzMiAtIDY0ICogc3BoKQorCQkJICAgIC8gKG91dHB1dC0+d2lkdGggLSAxKTsKIAlyYXRpby0+aG9yeiA9IGNsYW1wX3QodW5zaWduZWQgaW50LCByYXRpby0+aG9yeiwKIAkJCSAgICAgIE1JTl9SRVNJWkVfVkFMVUUsIE1BWF9SRVNJWkVfVkFMVUUpOwogCiAJaWYgKHJhdGlvLT5ob3J6IDw9IE1JRF9SRVNJWkVfVkFMVUUpIHsKIAkJdXBzY2FsZWRfd2lkdGggPSAob3V0cHV0LT53aWR0aCAtIDEpICogcmF0aW8tPmhvcnoKIAkJCSAgICAgICArIDMyICogc3BoICsgMTY7Ci0JCWlucHV0LT53aWR0aCA9ICh1cHNjYWxlZF93aWR0aCA+PiA4KSArIDc7CisJCXdpZHRoID0gKHVwc2NhbGVkX3dpZHRoID4+IDgpICsgNzsKIAl9IGVsc2UgewogCQl1cHNjYWxlZF93aWR0aCA9IChvdXRwdXQtPndpZHRoIC0gMSkgKiByYXRpby0+aG9yegogCQkJICAgICAgICsgNjQgKiBzcGggKyAzMjsKLQkJaW5wdXQtPndpZHRoID0gKHVwc2NhbGVkX3dpZHRoID4+IDgpICsgNzsKKwkJd2lkdGggPSAodXBzY2FsZWRfd2lkdGggPj4gOCkgKyA3OwogCX0KKworCS8qIENlbnRlciB0aGUgbmV3IGNyb3AgcmVjdGFuZ2xlLiAqLworCWlucHV0LT5sZWZ0ICs9IChpbnB1dC0+d2lkdGggLSB3aWR0aCkgLyAyOworCWlucHV0LT50b3AgKz0gKGlucHV0LT5oZWlnaHQgLSBoZWlnaHQpIC8gMjsKKwlpbnB1dC0+d2lkdGggPSB3aWR0aDsKKwlpbnB1dC0+aGVpZ2h0ID0gaGVpZ2h0OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BzdGF0LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHN0YXQuaAppbmRleCA4MjA5NTBjLi5kODZkYTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHN0YXQuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHN0YXQuaApAQCAtMTMxLDkgKzEzMSw5IEBACiBzdHJ1Y3QgaXNwc3RhdF9nZW5lcmljX2NvbmZpZyB7CiAJLyoKIAkgKiBGaWVsZHMgbXVzdCBiZSBpbiB0aGUgc2FtZSBvcmRlciBhcyBpbjoKLQkgKiAgLSBpc3BoM2FfYWV3Yl9jb25maWcKLQkgKiAgLSBpc3BoM2FfYWZfY29uZmlnCi0JICogIC0gaXNwaGlzdF9jb25maWcKKwkgKiAgLSBvbWFwM2lzcF9oM2FfYWV3Yl9jb25maWcKKwkgKiAgLSBvbWFwM2lzcF9oM2FfYWZfY29uZmlnCisJICogIC0gb21hcDNpc3BfaGlzdF9jb25maWcKIAkgKi8KIAl1MzIgYnVmX3NpemU7CiAJdTE2IGNvbmZpZ19jb3VudGVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3B2aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3B2aWRlby5jCmluZGV4IDIwOGE3ZWMuLjljZDhmMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHZpZGVvLmMKQEAgLTQ3LDI5ICs0Nyw1OSBAQAogCiBzdGF0aWMgc3RydWN0IGlzcF9mb3JtYXRfaW5mbyBmb3JtYXRzW10gPSB7CiAJeyBWNEwyX01CVVNfRk1UX1k4XzFYOCwgVjRMMl9NQlVTX0ZNVF9ZOF8xWDgsCi0JICBWNEwyX01CVVNfRk1UX1k4XzFYOCwgVjRMMl9QSVhfRk1UX0dSRVksIDgsIH0sCisJICBWNEwyX01CVVNfRk1UX1k4XzFYOCwgVjRMMl9NQlVTX0ZNVF9ZOF8xWDgsCisJICBWNEwyX1BJWF9GTVRfR1JFWSwgOCwgfSwKKwl7IFY0TDJfTUJVU19GTVRfWTEwXzFYMTAsIFY0TDJfTUJVU19GTVRfWTEwXzFYMTAsCisJICBWNEwyX01CVVNfRk1UX1kxMF8xWDEwLCBWNEwyX01CVVNfRk1UX1k4XzFYOCwKKwkgIFY0TDJfUElYX0ZNVF9ZMTAsIDEwLCB9LAorCXsgVjRMMl9NQlVTX0ZNVF9ZMTJfMVgxMiwgVjRMMl9NQlVTX0ZNVF9ZMTBfMVgxMCwKKwkgIFY0TDJfTUJVU19GTVRfWTEyXzFYMTIsIFY0TDJfTUJVU19GTVRfWThfMVg4LAorCSAgVjRMMl9QSVhfRk1UX1kxMiwgMTIsIH0sCisJeyBWNEwyX01CVVNfRk1UX1NCR0dSOF8xWDgsIFY0TDJfTUJVU19GTVRfU0JHR1I4XzFYOCwKKwkgIFY0TDJfTUJVU19GTVRfU0JHR1I4XzFYOCwgVjRMMl9NQlVTX0ZNVF9TQkdHUjhfMVg4LAorCSAgVjRMMl9QSVhfRk1UX1NCR0dSOCwgOCwgfSwKKwl7IFY0TDJfTUJVU19GTVRfU0dCUkc4XzFYOCwgVjRMMl9NQlVTX0ZNVF9TR0JSRzhfMVg4LAorCSAgVjRMMl9NQlVTX0ZNVF9TR0JSRzhfMVg4LCBWNEwyX01CVVNfRk1UX1NHQlJHOF8xWDgsCisJICBWNEwyX1BJWF9GTVRfU0dCUkc4LCA4LCB9LAorCXsgVjRMMl9NQlVTX0ZNVF9TR1JCRzhfMVg4LCBWNEwyX01CVVNfRk1UX1NHUkJHOF8xWDgsCisJICBWNEwyX01CVVNfRk1UX1NHUkJHOF8xWDgsIFY0TDJfTUJVU19GTVRfU0dSQkc4XzFYOCwKKwkgIFY0TDJfUElYX0ZNVF9TR1JCRzgsIDgsIH0sCisJeyBWNEwyX01CVVNfRk1UX1NSR0dCOF8xWDgsIFY0TDJfTUJVU19GTVRfU1JHR0I4XzFYOCwKKwkgIFY0TDJfTUJVU19GTVRfU1JHR0I4XzFYOCwgVjRMMl9NQlVTX0ZNVF9TUkdHQjhfMVg4LAorCSAgVjRMMl9QSVhfRk1UX1NSR0dCOCwgOCwgfSwKIAl7IFY0TDJfTUJVU19GTVRfU0dSQkcxMF9EUENNOF8xWDgsIFY0TDJfTUJVU19GTVRfU0dSQkcxMF9EUENNOF8xWDgsCi0JICBWNEwyX01CVVNfRk1UX1NHUkJHMTBfMVgxMCwgVjRMMl9QSVhfRk1UX1NHUkJHMTBEUENNOCwgOCwgfSwKKwkgIFY0TDJfTUJVU19GTVRfU0dSQkcxMF8xWDEwLCAwLAorCSAgVjRMMl9QSVhfRk1UX1NHUkJHMTBEUENNOCwgOCwgfSwKIAl7IFY0TDJfTUJVU19GTVRfU0JHR1IxMF8xWDEwLCBWNEwyX01CVVNfRk1UX1NCR0dSMTBfMVgxMCwKLQkgIFY0TDJfTUJVU19GTVRfU0JHR1IxMF8xWDEwLCBWNEwyX1BJWF9GTVRfU0JHR1IxMCwgMTAsIH0sCisJICBWNEwyX01CVVNfRk1UX1NCR0dSMTBfMVgxMCwgVjRMMl9NQlVTX0ZNVF9TQkdHUjhfMVg4LAorCSAgVjRMMl9QSVhfRk1UX1NCR0dSMTAsIDEwLCB9LAogCXsgVjRMMl9NQlVTX0ZNVF9TR0JSRzEwXzFYMTAsIFY0TDJfTUJVU19GTVRfU0dCUkcxMF8xWDEwLAotCSAgVjRMMl9NQlVTX0ZNVF9TR0JSRzEwXzFYMTAsIFY0TDJfUElYX0ZNVF9TR0JSRzEwLCAxMCwgfSwKKwkgIFY0TDJfTUJVU19GTVRfU0dCUkcxMF8xWDEwLCBWNEwyX01CVVNfRk1UX1NHQlJHOF8xWDgsCisJICBWNEwyX1BJWF9GTVRfU0dCUkcxMCwgMTAsIH0sCiAJeyBWNEwyX01CVVNfRk1UX1NHUkJHMTBfMVgxMCwgVjRMMl9NQlVTX0ZNVF9TR1JCRzEwXzFYMTAsCi0JICBWNEwyX01CVVNfRk1UX1NHUkJHMTBfMVgxMCwgVjRMMl9QSVhfRk1UX1NHUkJHMTAsIDEwLCB9LAorCSAgVjRMMl9NQlVTX0ZNVF9TR1JCRzEwXzFYMTAsIFY0TDJfTUJVU19GTVRfU0dSQkc4XzFYOCwKKwkgIFY0TDJfUElYX0ZNVF9TR1JCRzEwLCAxMCwgfSwKIAl7IFY0TDJfTUJVU19GTVRfU1JHR0IxMF8xWDEwLCBWNEwyX01CVVNfRk1UX1NSR0dCMTBfMVgxMCwKLQkgIFY0TDJfTUJVU19GTVRfU1JHR0IxMF8xWDEwLCBWNEwyX1BJWF9GTVRfU1JHR0IxMCwgMTAsIH0sCisJICBWNEwyX01CVVNfRk1UX1NSR0dCMTBfMVgxMCwgVjRMMl9NQlVTX0ZNVF9TUkdHQjhfMVg4LAorCSAgVjRMMl9QSVhfRk1UX1NSR0dCMTAsIDEwLCB9LAogCXsgVjRMMl9NQlVTX0ZNVF9TQkdHUjEyXzFYMTIsIFY0TDJfTUJVU19GTVRfU0JHR1IxMF8xWDEwLAotCSAgVjRMMl9NQlVTX0ZNVF9TQkdHUjEyXzFYMTIsIFY0TDJfUElYX0ZNVF9TQkdHUjEyLCAxMiwgfSwKKwkgIFY0TDJfTUJVU19GTVRfU0JHR1IxMl8xWDEyLCBWNEwyX01CVVNfRk1UX1NCR0dSOF8xWDgsCisJICBWNEwyX1BJWF9GTVRfU0JHR1IxMiwgMTIsIH0sCiAJeyBWNEwyX01CVVNfRk1UX1NHQlJHMTJfMVgxMiwgVjRMMl9NQlVTX0ZNVF9TR0JSRzEwXzFYMTAsCi0JICBWNEwyX01CVVNfRk1UX1NHQlJHMTJfMVgxMiwgVjRMMl9QSVhfRk1UX1NHQlJHMTIsIDEyLCB9LAorCSAgVjRMMl9NQlVTX0ZNVF9TR0JSRzEyXzFYMTIsIFY0TDJfTUJVU19GTVRfU0dCUkc4XzFYOCwKKwkgIFY0TDJfUElYX0ZNVF9TR0JSRzEyLCAxMiwgfSwKIAl7IFY0TDJfTUJVU19GTVRfU0dSQkcxMl8xWDEyLCBWNEwyX01CVVNfRk1UX1NHUkJHMTBfMVgxMCwKLQkgIFY0TDJfTUJVU19GTVRfU0dSQkcxMl8xWDEyLCBWNEwyX1BJWF9GTVRfU0dSQkcxMiwgMTIsIH0sCisJICBWNEwyX01CVVNfRk1UX1NHUkJHMTJfMVgxMiwgVjRMMl9NQlVTX0ZNVF9TR1JCRzhfMVg4LAorCSAgVjRMMl9QSVhfRk1UX1NHUkJHMTIsIDEyLCB9LAogCXsgVjRMMl9NQlVTX0ZNVF9TUkdHQjEyXzFYMTIsIFY0TDJfTUJVU19GTVRfU1JHR0IxMF8xWDEwLAotCSAgVjRMMl9NQlVTX0ZNVF9TUkdHQjEyXzFYMTIsIFY0TDJfUElYX0ZNVF9TUkdHQjEyLCAxMiwgfSwKKwkgIFY0TDJfTUJVU19GTVRfU1JHR0IxMl8xWDEyLCBWNEwyX01CVVNfRk1UX1NSR0dCOF8xWDgsCisJICBWNEwyX1BJWF9GTVRfU1JHR0IxMiwgMTIsIH0sCiAJeyBWNEwyX01CVVNfRk1UX1VZVlk4XzFYMTYsIFY0TDJfTUJVU19GTVRfVVlWWThfMVgxNiwKLQkgIFY0TDJfTUJVU19GTVRfVVlWWThfMVgxNiwgVjRMMl9QSVhfRk1UX1VZVlksIDE2LCB9LAorCSAgVjRMMl9NQlVTX0ZNVF9VWVZZOF8xWDE2LCAwLAorCSAgVjRMMl9QSVhfRk1UX1VZVlksIDE2LCB9LAogCXsgVjRMMl9NQlVTX0ZNVF9ZVVlWOF8xWDE2LCBWNEwyX01CVVNfRk1UX1lVWVY4XzFYMTYsCi0JICBWNEwyX01CVVNfRk1UX1lVWVY4XzFYMTYsIFY0TDJfUElYX0ZNVF9ZVVlWLCAxNiwgfSwKKwkgIFY0TDJfTUJVU19GTVRfWVVZVjhfMVgxNiwgMCwKKwkgIFY0TDJfUElYX0ZNVF9ZVVlWLCAxNiwgfSwKIH07CiAKIGNvbnN0IHN0cnVjdCBpc3BfZm9ybWF0X2luZm8gKgpAQCAtODYsNiArMTE2LDM3IEBACiB9CiAKIC8qCisgKiBEZWNpZGUgd2hldGhlciBkZXNpcmVkIG91dHB1dCBwaXhlbCBjb2RlIGNhbiBiZSBvYnRhaW5lZCB3aXRoCisgKiB0aGUgbGFuZSBzaGlmdGVyIGJ5IHNoaWZ0aW5nIHRoZSBpbnB1dCBwaXhlbCBjb2RlLgorICogQGluOiBpbnB1dCBwaXhlbGNvZGUgdG8gc2hpZnRlcgorICogQG91dDogb3V0cHV0IHBpeGVsY29kZSBmcm9tIHNoaWZ0ZXIKKyAqIEBhZGRpdGlvbmFsX3NoaWZ0OiAjIG9mIGJpdHMgdGhlIHNlbnNvcidzIExTQiBpcyBvZmZzZXQgZnJvbSBDQU1FWFRbMF0KKyAqCisgKiByZXR1cm4gdHJ1ZSBpZiB0aGUgY29tYmluYXRpb24gaXMgcG9zc2libGUKKyAqIHJldHVybiBmYWxzZSBvdGhlcndpc2UKKyAqLworc3RhdGljIGJvb2wgaXNwX3ZpZGVvX2lzX3NoaWZ0YWJsZShlbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUgaW4sCisJCWVudW0gdjRsMl9tYnVzX3BpeGVsY29kZSBvdXQsCisJCXVuc2lnbmVkIGludCBhZGRpdGlvbmFsX3NoaWZ0KQoreworCWNvbnN0IHN0cnVjdCBpc3BfZm9ybWF0X2luZm8gKmluX2luZm8sICpvdXRfaW5mbzsKKworCWlmIChpbiA9PSBvdXQpCisJCXJldHVybiB0cnVlOworCisJaW5faW5mbyA9IG9tYXAzaXNwX3ZpZGVvX2Zvcm1hdF9pbmZvKGluKTsKKwlvdXRfaW5mbyA9IG9tYXAzaXNwX3ZpZGVvX2Zvcm1hdF9pbmZvKG91dCk7CisKKwlpZiAoKGluX2luZm8tPmZsYXZvciA9PSAwKSB8fCAob3V0X2luZm8tPmZsYXZvciA9PSAwKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGluX2luZm8tPmZsYXZvciAhPSBvdXRfaW5mby0+Zmxhdm9yKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gaW5faW5mby0+YnBwIC0gb3V0X2luZm8tPmJwcCArIGFkZGl0aW9uYWxfc2hpZnQgPD0gNjsKK30KKworLyoKICAqIGlzcF92aWRlb19tYnVzX3RvX3BpeCAtIENvbnZlcnQgdjRsMl9tYnVzX2ZyYW1lZm10IHRvIHY0bDJfcGl4X2Zvcm1hdAogICogQHZpZGVvOiBJU1AgdmlkZW8gaW5zdGFuY2UKICAqIEBtYnVzOiB2NGwyX21idXNfZnJhbWVmbXQgZm9ybWF0IChpbnB1dCkKQEAgLTIzNSw2ICsyOTYsNyBAQAogCQlyZXR1cm4gLUVQSVBFOwogCiAJd2hpbGUgKDEpIHsKKwkJdW5zaWduZWQgaW50IHNoaWZ0ZXJfbGluazsKIAkJLyogUmV0cmlldmUgdGhlIHNpbmsgZm9ybWF0ICovCiAJCXBhZCA9ICZzdWJkZXYtPmVudGl0eS5wYWRzWzBdOwogCQlpZiAoIShwYWQtPmZsYWdzICYgTUVESUFfUEFEX0ZMX1NJTkspKQpAQCAtMjYzLDYgKzMyNSwxMCBAQAogCQkJCXJldHVybiAtRU5PU1BDOwogCQl9CiAKKwkJLyogSWYgc2luayBwYWQgaXMgb24gQ0NEQywgdGhlIGxpbmsgaGFzIHRoZSBsYW5lIHNoaWZ0ZXIKKwkJICogaW4gdGhlIG1pZGRsZSBvZiBpdC4gKi8KKwkJc2hpZnRlcl9saW5rID0gc3ViZGV2ID09ICZpc3AtPmlzcF9jY2RjLnN1YmRldjsKKwogCQkvKiBSZXRyaWV2ZSB0aGUgc291cmNlIGZvcm1hdCAqLwogCQlwYWQgPSBtZWRpYV9lbnRpdHlfcmVtb3RlX3NvdXJjZShwYWQpOwogCQlpZiAocGFkID09IE5VTEwgfHwKQEAgLTI3OCwxMCArMzQ0LDI0IEBACiAJCQlyZXR1cm4gLUVQSVBFOwogCiAJCS8qIENoZWNrIGlmIHRoZSB0d28gZW5kcyBtYXRjaCAqLwotCQlpZiAoZm10X3NvdXJjZS5mb3JtYXQuY29kZSAhPSBmbXRfc2luay5mb3JtYXQuY29kZSB8fAotCQkgICAgZm10X3NvdXJjZS5mb3JtYXQud2lkdGggIT0gZm10X3NpbmsuZm9ybWF0LndpZHRoIHx8CisJCWlmIChmbXRfc291cmNlLmZvcm1hdC53aWR0aCAhPSBmbXRfc2luay5mb3JtYXQud2lkdGggfHwKIAkJICAgIGZtdF9zb3VyY2UuZm9ybWF0LmhlaWdodCAhPSBmbXRfc2luay5mb3JtYXQuaGVpZ2h0KQogCQkJcmV0dXJuIC1FUElQRTsKKworCQlpZiAoc2hpZnRlcl9saW5rKSB7CisJCQl1bnNpZ25lZCBpbnQgcGFyYWxsZWxfc2hpZnQgPSAwOworCQkJaWYgKGlzcC0+aXNwX2NjZGMuaW5wdXQgPT0gQ0NEQ19JTlBVVF9QQVJBTExFTCkgeworCQkJCXN0cnVjdCBpc3BfcGFyYWxsZWxfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPQorCQkJCQkmKChzdHJ1Y3QgaXNwX3Y0bDJfc3ViZGV2c19ncm91cCAqKQorCQkJCQkgICAgICBzdWJkZXYtPmhvc3RfcHJpdiktPmJ1cy5wYXJhbGxlbDsKKwkJCQlwYXJhbGxlbF9zaGlmdCA9IHBkYXRhLT5kYXRhX2xhbmVfc2hpZnQgKiAyOworCQkJfQorCQkJaWYgKCFpc3BfdmlkZW9faXNfc2hpZnRhYmxlKGZtdF9zb3VyY2UuZm9ybWF0LmNvZGUsCisJCQkJCQlmbXRfc2luay5mb3JtYXQuY29kZSwKKwkJCQkJCXBhcmFsbGVsX3NoaWZ0KSkKKwkJCQlyZXR1cm4gLUVQSVBFOworCQl9IGVsc2UgaWYgKGZtdF9zb3VyY2UuZm9ybWF0LmNvZGUgIT0gZm10X3NpbmsuZm9ybWF0LmNvZGUpCisJCQlyZXR1cm4gLUVQSVBFOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3B2aWRlby5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3B2aWRlby5oCmluZGV4IDUyNGExYWMuLjkxMWJlYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwdmlkZW8uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHZpZGVvLmgKQEAgLTQ5LDYgKzQ5LDggQEAKICAqCWJpdHMuIElkZW50aWNhbCB0byBAY29kZSBpZiB0aGUgZm9ybWF0IGlzIDEwIGJpdHMgd2lkZSBvciBsZXNzLgogICogQHVuY29tcHJlc3NlZDogVjRMMiBtZWRpYSBidXMgZm9ybWF0IGNvZGUgZm9yIHRoZSBjb3JyZXNwb25kaW5nIHVuY29tcHJlc3NlZAogICoJZm9ybWF0LiBJZGVudGljYWwgdG8gQGNvZGUgaWYgdGhlIGZvcm1hdCBpcyBub3QgRFBDTSBjb21wcmVzc2VkLgorICogQGZsYXZvcjogVjRMMiBtZWRpYSBidXMgZm9ybWF0IGNvZGUgZm9yIHRoZSBzYW1lIHBpeGVsIGxheW91dCBidXQKKyAqCXNoaWZ0ZWQgdG8gYmUgOCBiaXRzIHBlciBwaXhlbC4gPTAgaWYgZm9ybWF0IGlzIG5vdCBzaGlmdGFibGUuCiAgKiBAcGl4ZWxmb3JtYXQ6IFY0TDIgcGl4ZWwgZm9ybWF0IEZDQyBpZGVudGlmaWVyCiAgKiBAYnBwOiBCaXRzIHBlciBwaXhlbAogICovCkBAIC01Niw2ICs1OCw3IEBACiAJZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlIGNvZGU7CiAJZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlIHRydW5jYXRlZDsKIAllbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUgdW5jb21wcmVzc2VkOworCWVudW0gdjRsMl9tYnVzX3BpeGVsY29kZSBmbGF2b3I7CiAJdTMyIHBpeGVsZm9ybWF0OwogCXVuc2lnbmVkIGludCBicHA7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtZmltYy9maW1jLWNhcHR1cmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLWZpbWMvZmltYy1jYXB0dXJlLmMKaW5kZXggOTVmOGI0ZTEuLmQxNDJiNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLWZpbWMvZmltYy1jYXB0dXJlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtZmltYy9maW1jLWNhcHR1cmUuYwpAQCAtNTI3LDcgKzUyNyw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlmICh2YjJfaXNfc3RyZWFtaW5nKCZmaW1jLT52aWRfY2FwLnZicSkgfHwgZmltY19jYXB0dXJlX2FjdGl2ZShmaW1jKSkKKwlpZiAodmIyX2lzX2J1c3koJmZpbWMtPnZpZF9jYXAudmJxKSB8fCBmaW1jX2NhcHR1cmVfYWN0aXZlKGZpbWMpKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJZnJhbWUgPSAmY3R4LT5kX2ZyYW1lOwpAQCAtNTM5LDggKzUzOSwxMCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgZnJhbWUtPmZtdC0+Y29scGxhbmVzOyBpKyspCi0JCWZyYW1lLT5wYXlsb2FkW2ldID0gcGl4LT5wbGFuZV9mbXRbaV0uYnl0ZXNwZXJsaW5lICogcGl4LT5oZWlnaHQ7CisJZm9yIChpID0gMDsgaSA8IGZyYW1lLT5mbXQtPmNvbHBsYW5lczsgaSsrKSB7CisJCWZyYW1lLT5wYXlsb2FkW2ldID0KKwkJCShwaXgtPndpZHRoICogcGl4LT5oZWlnaHQgKiBmcmFtZS0+Zm10LT5kZXB0aFtpXSkgPj4gMzsKKwl9CiAKIAkvKiBPdXRwdXQgRE1BIGZyYW1lIHBpeGVsIHNpemUgYW5kIG9mZnNldHMuICovCiAJZnJhbWUtPmZfd2lkdGggPSBwaXgtPnBsYW5lX2ZtdFswXS5ieXRlc3BlcmxpbmUgKiA4CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1maW1jL2ZpbWMtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtZmltYy9maW1jLWNvcmUuYwppbmRleCA2YzkxOWIzLi5kYzkxYTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1maW1jL2ZpbWMtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLWZpbWMvZmltYy1jb3JlLmMKQEAgLTM2MSwxMCArMzYxLDIwIEBACiB7CiAJc3RydWN0IGZpbWNfdmlkX2NhcCAqY2FwID0gJmZpbWMtPnZpZF9jYXA7CiAJc3RydWN0IGZpbWNfdmlkX2J1ZmZlciAqdl9idWY7CisJc3RydWN0IHRpbWV2YWwgKnR2OworCXN0cnVjdCB0aW1lc3BlYyB0czsKIAogCWlmICghbGlzdF9lbXB0eSgmY2FwLT5hY3RpdmVfYnVmX3EpICYmCiAJICAgIHRlc3RfYml0KFNUX0NBUFRfUlVOLCAmZmltYy0+c3RhdGUpKSB7CisJCWt0aW1lX2dldF9yZWFsX3RzKCZ0cyk7CisKIAkJdl9idWYgPSBhY3RpdmVfcXVldWVfcG9wKGNhcCk7CisKKwkJdHYgPSAmdl9idWYtPnZiLnY0bDJfYnVmLnRpbWVzdGFtcDsKKwkJdHYtPnR2X3NlYyA9IHRzLnR2X3NlYzsKKwkJdHYtPnR2X3VzZWMgPSB0cy50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQzsKKwkJdl9idWYtPnZiLnY0bDJfYnVmLnNlcXVlbmNlID0gY2FwLT5mcmFtZV9jb3VudCsrOworCiAJCXZiMl9idWZmZXJfZG9uZSgmdl9idWYtPnZiLCBWQjJfQlVGX1NUQVRFX0RPTkUpOwogCX0KIApAQCAtNzU4LDcgKzc2OCw3IEBACiAJbXV0ZXhfdW5sb2NrKCZjdHgtPmZpbWNfZGV2LT5sb2NrKTsKIH0KIAotc3RydWN0IHZiMl9vcHMgZmltY19xb3BzID0geworc3RhdGljIHN0cnVjdCB2YjJfb3BzIGZpbWNfcW9wcyA9IHsKIAkucXVldWVfc2V0dXAJID0gZmltY19xdWV1ZV9zZXR1cCwKIAkuYnVmX3ByZXBhcmUJID0gZmltY19idWZfcHJlcGFyZSwKIAkuYnVmX3F1ZXVlCSA9IGZpbWNfYnVmX3F1ZXVlLApAQCAtOTI3LDIzICs5MzcsMjMgQEAKIAlwaXgtPm51bV9wbGFuZXMgPSBmbXQtPm1lbXBsYW5lczsKIAlwaXgtPmNvbG9yc3BhY2UJPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRzsKIAorCiAJZm9yIChpID0gMDsgaSA8IHBpeC0+bnVtX3BsYW5lczsgKytpKSB7Ci0JCWludCBicGwgPSBwaXgtPnBsYW5lX2ZtdFtpXS5ieXRlc3BlcmxpbmU7CisJCXUzMiBicGwgPSBwaXgtPnBsYW5lX2ZtdFtpXS5ieXRlc3BlcmxpbmU7CisJCXUzMiAqc2l6ZWltYWdlID0gJnBpeC0+cGxhbmVfZm10W2ldLnNpemVpbWFnZTsKIAotCQlkYmcoIlslZF0gYnBsOiAlZCwgZGVwdGg6ICVkLCB3OiAlZCwgaDogJWQiLAotCQkgICAgaSwgYnBsLCBmbXQtPmRlcHRoW2ldLCBwaXgtPndpZHRoLCBwaXgtPmhlaWdodCk7CisJCWlmIChmbXQtPmNvbHBsYW5lcyA+IDEgJiYgKGJwbCA9PSAwIHx8IGJwbCA8IHBpeC0+d2lkdGgpKQorCQkJYnBsID0gcGl4LT53aWR0aDsgLyogUGxhbmFyICovCiAKLQkJaWYgKCFicGwgfHwgKGJwbCAqIDggLyBmbXQtPmRlcHRoW2ldKSA+IHBpeC0+d2lkdGgpCi0JCQlicGwgPSAocGl4LT53aWR0aCAqIGZtdC0+ZGVwdGhbMF0pID4+IDM7CisJCWlmIChmbXQtPmNvbHBsYW5lcyA9PSAxICYmIC8qIFBhY2tlZCAqLworCQkgICAgKGJwbCA9PSAwIHx8ICgoYnBsICogOCkgLyBmbXQtPmRlcHRoW2ldKSA8IHBpeC0+d2lkdGgpKQorCQkJYnBsID0gKHBpeC0+d2lkdGggKiBmbXQtPmRlcHRoWzBdKSAvIDg7CiAKLQkJaWYgKCFwaXgtPnBsYW5lX2ZtdFtpXS5zaXplaW1hZ2UpCi0JCQlwaXgtPnBsYW5lX2ZtdFtpXS5zaXplaW1hZ2UgPSBwaXgtPmhlaWdodCAqIGJwbDsKKwkJaWYgKGkgPT0gMCkgLyogU2FtZSBieXRlc3BlcmxpbmUgZm9yIGVhY2ggcGxhbmUuICovCisJCQltb2RfeCA9IGJwbDsKIAotCQlwaXgtPnBsYW5lX2ZtdFtpXS5ieXRlc3BlcmxpbmUgPSBicGw7Ci0KLQkJZGJnKCJbJWRdOiBicGw6ICVkLCBzaXplaW1hZ2U6ICVkIiwKLQkJICAgIGksIHBpeC0+cGxhbmVfZm10W2ldLmJ5dGVzcGVybGluZSwKLQkJICAgIHBpeC0+cGxhbmVfZm10W2ldLnNpemVpbWFnZSk7CisJCXBpeC0+cGxhbmVfZm10W2ldLmJ5dGVzcGVybGluZSA9IG1vZF94OworCQkqc2l6ZWltYWdlID0gKHBpeC0+d2lkdGggKiBwaXgtPmhlaWdodCAqIGZtdC0+ZGVwdGhbaV0pIC8gODsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTk2NSw3ICs5NzUsNyBAQAogCiAJdnEgPSB2NGwyX20ybV9nZXRfdnEoY3R4LT5tMm1fY3R4LCBmLT50eXBlKTsKIAotCWlmICh2YjJfaXNfc3RyZWFtaW5nKHZxKSkgeworCWlmICh2YjJfaXNfYnVzeSh2cSkpIHsKIAkJdjRsMl9lcnIoJmZpbWMtPm0ybS52NGwyX2RldiwgInF1ZXVlICglZCkgYnVzeVxuIiwgZi0+dHlwZSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQpAQCAtOTg1LDggKzk5NSwxMCBAQAogCWlmICghZnJhbWUtPmZtdCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZnJhbWUtPmZtdC0+Y29scGxhbmVzOyBpKyspCi0JCWZyYW1lLT5wYXlsb2FkW2ldID0gcGl4LT5wbGFuZV9mbXRbaV0uYnl0ZXNwZXJsaW5lICogcGl4LT5oZWlnaHQ7CisJZm9yIChpID0gMDsgaSA8IGZyYW1lLT5mbXQtPmNvbHBsYW5lczsgaSsrKSB7CisJCWZyYW1lLT5wYXlsb2FkW2ldID0KKwkJCShwaXgtPndpZHRoICogcGl4LT5oZWlnaHQgKiBmcmFtZS0+Zm10LT5kZXB0aFtpXSkgLyA4OworCX0KIAogCWZyYW1lLT5mX3dpZHRoCT0gcGl4LT5wbGFuZV9mbXRbMF0uYnl0ZXNwZXJsaW5lICogOCAvCiAJCWZyYW1lLT5mbXQtPmRlcHRoWzBdOwpAQCAtMTc1MCw3ICsxNzYyLDcgQEAKIH0KIAogLyogSW1hZ2UgcGl4ZWwgbGltaXRzLCBzaW1pbGFyIGFjcm9zcyBzZXZlcmFsIEZJTUMgSFcgcmV2aXNpb25zLiAqLwotc3RhdGljIHN0cnVjdCBmaW1jX3BpeF9saW1pdCBzNXBfcGl4X2xpbWl0WzNdID0geworc3RhdGljIHN0cnVjdCBmaW1jX3BpeF9saW1pdCBzNXBfcGl4X2xpbWl0WzRdID0gewogCVswXSA9IHsKIAkJLnNjYWxlcl9lbl93CT0gMzI2NCwKIAkJLnNjYWxlcl9kaXNfdwk9IDgxOTIsCkBAIC0xNzc1LDYgKzE3ODcsMTQgQEAKIAkJLm91dF9yb3RfZW5fdwk9IDEyODAsCiAJCS5vdXRfcm90X2Rpc193CT0gMTkyMCwKIAl9LAorCVszXSA9IHsKKwkJLnNjYWxlcl9lbl93CT0gMTkyMCwKKwkJLnNjYWxlcl9kaXNfdwk9IDgxOTIsCisJCS5pbl9yb3RfZW5faAk9IDEzNjYsCisJCS5pbl9yb3RfZGlzX3cJPSA4MTkyLAorCQkub3V0X3JvdF9lbl93CT0gMTM2NiwKKwkJLm91dF9yb3RfZGlzX3cJPSAxOTIwLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHNhbXN1bmdfZmltY192YXJpYW50IGZpbWMwX3ZhcmlhbnRfczVwID0gewpAQCAtMTgyNyw3ICsxODQ3LDcgQEAKIAkucGl4X2xpbWl0CSA9ICZzNXBfcGl4X2xpbWl0WzJdLAogfTsKIAotc3RhdGljIHN0cnVjdCBzYW1zdW5nX2ZpbWNfdmFyaWFudCBmaW1jMF92YXJpYW50X3M1cHYzMTAgPSB7CitzdGF0aWMgc3RydWN0IHNhbXN1bmdfZmltY192YXJpYW50IGZpbWMwX3ZhcmlhbnRfZXh5bm9zNCA9IHsKIAkucGl4X2hvZmYJID0gMSwKIAkuaGFzX2lucF9yb3QJID0gMSwKIAkuaGFzX291dF9yb3QJID0gMSwKQEAgLTE4NDAsNyArMTg2MCw3IEBACiAJLnBpeF9saW1pdAkgPSAmczVwX3BpeF9saW1pdFsxXSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19maW1jX3ZhcmlhbnQgZmltYzJfdmFyaWFudF9zNXB2MzEwID0geworc3RhdGljIHN0cnVjdCBzYW1zdW5nX2ZpbWNfdmFyaWFudCBmaW1jMl92YXJpYW50X2V4eW5vczQgPSB7CiAJLnBpeF9ob2ZmCSA9IDEsCiAJLmhhc19jaXN0YXR1czIJID0gMSwKIAkuaGFzX21haW5zY2FsZXJfZXh0ID0gMSwKQEAgLTE4NDgsNyArMTg2OCw3IEBACiAJLm1pbl9vdXRfcGl4c2l6ZSA9IDE2LAogCS5ob3Jfb2Zmc19hbGlnbgkgPSAxLAogCS5vdXRfYnVmX2NvdW50CSA9IDMyLAotCS5waXhfbGltaXQJID0gJnM1cF9waXhfbGltaXRbMl0sCisJLnBpeF9saW1pdAkgPSAmczVwX3BpeF9saW1pdFszXSwKIH07CiAKIC8qIFM1UEMxMDAgKi8KQEAgLTE4NzQsMTIgKzE4OTQsMTIgQEAKIH07CiAKIC8qIFM1UFYzMTAsIFM1UEMyMTAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19maW1jX2RyaXZlcmRhdGEgZmltY19kcnZkYXRhX3M1cHYzMTAgPSB7CitzdGF0aWMgc3RydWN0IHNhbXN1bmdfZmltY19kcml2ZXJkYXRhIGZpbWNfZHJ2ZGF0YV9leHlub3M0ID0gewogCS52YXJpYW50ID0gewotCQlbMF0gPSAmZmltYzBfdmFyaWFudF9zNXB2MzEwLAotCQlbMV0gPSAmZmltYzBfdmFyaWFudF9zNXB2MzEwLAotCQlbMl0gPSAmZmltYzBfdmFyaWFudF9zNXB2MzEwLAotCQlbM10gPSAmZmltYzJfdmFyaWFudF9zNXB2MzEwLAorCQlbMF0gPSAmZmltYzBfdmFyaWFudF9leHlub3M0LAorCQlbMV0gPSAmZmltYzBfdmFyaWFudF9leHlub3M0LAorCQlbMl0gPSAmZmltYzBfdmFyaWFudF9leHlub3M0LAorCQlbM10gPSAmZmltYzJfdmFyaWFudF9leHlub3M0LAogCX0sCiAJLm51bV9lbnRpdGllcyA9IDQsCiAJLmxjbGtfZnJlcXVlbmN5ID0gMTY2MDAwMDAwVUwsCkBAIC0xODkzLDggKzE5MTMsOCBAQAogCQkubmFtZQkJPSAiczVwdjIxMC1maW1jIiwKIAkJLmRyaXZlcl9kYXRhCT0gKHVuc2lnbmVkIGxvbmcpJmZpbWNfZHJ2ZGF0YV9zNXB2MjEwLAogCX0sIHsKLQkJLm5hbWUJCT0gInM1cHYzMTAtZmltYyIsCi0JCS5kcml2ZXJfZGF0YQk9ICh1bnNpZ25lZCBsb25nKSZmaW1jX2RydmRhdGFfczVwdjMxMCwKKwkJLm5hbWUJCT0gImV4eW5vczQtZmltYyIsCisJCS5kcml2ZXJfZGF0YQk9ICh1bnNpZ25lZCBsb25nKSZmaW1jX2RydmRhdGFfZXh5bm9zNCwKIAl9LAogCXt9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYwppbmRleCAzZmU1NGJmLi4xMzRlODZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCkBAIC05MjIsNyArOTIyLDcgQEAKIAkJCS8qIFRyeSAyNTYweDE5MjAsIDEyODB4OTYwLCA2NDB4NDgwLCAzMjB4MjQwICovCiAJCQltZi53aWR0aAk9IDI1NjAgPj4gc2hpZnQ7CiAJCQltZi5oZWlnaHQJPSAxOTIwID4+IHNoaWZ0OwotCQkJcmV0ID0gdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIoc2QtPnY0bDJfZGV2LCAwLCB2aWRlbywKKwkJCXJldCA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKHNkLT52NGwyX2RldiwgKGxvbmcpaWNkLCB2aWRlbywKIAkJCQkJCQkgc19tYnVzX2ZtdCwgJm1mKTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCXJldHVybiByZXQ7CkBAIC0xMjI0LDcgKzEyMjQsNyBAQAogCXN0cnVjdCB2NGwyX2Nyb3BjYXAgY2FwOwogCWludCByZXQ7CiAKLQlyZXQgPSB2NGwyX2RldmljZV9jYWxsX3VudGlsX2VycihzZC0+djRsMl9kZXYsIDAsIHZpZGVvLAorCXJldCA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKHNkLT52NGwyX2RldiwgKGxvbmcpaWNkLCB2aWRlbywKIAkJCQkJIHNfbWJ1c19mbXQsIG1mKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKQEAgLTEyNTQsNyArMTI1NCw3IEBACiAJCXRtcF9oID0gbWluKDIgKiB0bXBfaCwgbWF4X2hlaWdodCk7CiAJCW1mLT53aWR0aCA9IHRtcF93OwogCQltZi0+aGVpZ2h0ID0gdG1wX2g7Ci0JCXJldCA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKHNkLT52NGwyX2RldiwgMCwgdmlkZW8sCisJCXJldCA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKHNkLT52NGwyX2RldiwgKGxvbmcpaWNkLCB2aWRlbywKIAkJCQkJCSBzX21idXNfZm10LCBtZik7CiAJCWRldl9nZW8oZGV2LCAiQ2FtZXJhIHNjYWxlZCB0byAldXgldVxuIiwKIAkJCW1mLT53aWR0aCwgbWYtPmhlaWdodCk7CkBAIC0xNjU4LDcgKzE2NTgsNyBAQAogCW1mLmNvZGUJCT0geGxhdGUtPmNvZGU7CiAJbWYuY29sb3JzcGFjZQk9IHBpeC0+Y29sb3JzcGFjZTsKIAotCXJldCA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKHNkLT52NGwyX2RldiwgMCwgdmlkZW8sIHRyeV9tYnVzX2ZtdCwgJm1mKTsKKwlyZXQgPSB2NGwyX2RldmljZV9jYWxsX3VudGlsX2VycihzZC0+djRsMl9kZXYsIChsb25nKWljZCwgdmlkZW8sIHRyeV9tYnVzX2ZtdCwgJm1mKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMTY4Miw3ICsxNjgyLDcgQEAKIAkJCSAqLwogCQkJbWYud2lkdGggPSAyNTYwOwogCQkJbWYuaGVpZ2h0ID0gMTkyMDsKLQkJCXJldCA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKHNkLT52NGwyX2RldiwgMCwgdmlkZW8sCisJCQlyZXQgPSB2NGwyX2RldmljZV9jYWxsX3VudGlsX2VycihzZC0+djRsMl9kZXYsIChsb25nKWljZCwgdmlkZW8sCiAJCQkJCQkJIHRyeV9tYnVzX2ZtdCwgJm1mKTsKIAkJCWlmIChyZXQgPCAwKSB7CiAJCQkJLyogU2hvdWxkbid0IGFjdHVhbGx5IGhhcHBlbi4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY3NpMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY3NpMi5jCmluZGV4IGRkMWI4MWIuLjk4Yjg3NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NzaTIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jc2kyLmMKQEAgLTM4LDYgKzM4LDggQEAKIAl2b2lkIF9faW9tZW0JCQkqYmFzZTsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkqcGRldjsKIAlzdHJ1Y3Qgc2hfY3NpMl9jbGllbnRfY29uZmlnCSpjbGllbnQ7CisJdW5zaWduZWQgbG9uZyAoKnF1ZXJ5X2J1c19wYXJhbSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOworCWludCAoKnNldF9idXNfcGFyYW0pKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCB1bnNpZ25lZCBsb25nKTsKIH07CiAKIHN0YXRpYyBpbnQgc2hfY3NpMl90cnlfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCkBAIC0yMDgsNiArMjEwLDcgQEAKIAljYXNlIEJVU19OT1RJRllfQk9VTkRfRFJJVkVSOgogCQlzbnByaW50Zihwcml2LT5zdWJkZXYubmFtZSwgVjRMMl9TVUJERVZfTkFNRV9TSVpFLCAiJXMlcyIsCiAJCQkgZGV2X25hbWUodjRsMl9kZXYtPmRldiksICIubWlwaS1jc2kiKTsKKwkJcHJpdi0+c3ViZGV2LmdycF9pZCA9IChsb25nKWljZDsKIAkJcmV0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2KHY0bDJfZGV2LCAmcHJpdi0+c3ViZGV2KTsKIAkJZGV2X2RiZyhkZXYsICIlcyglcCk6IHJldChyZWdpc3Rlcl9zdWJkZXYpID0gJWRcbiIsIF9fZnVuY19fLCBwcml2LCByZXQpOwogCQlpZiAocmV0IDwgMCkKQEAgLTIxNSw2ICsyMTgsOCBAQAogCiAJCXByaXYtPmNsaWVudCA9IHBkYXRhLT5jbGllbnRzICsgaTsKIAorCQlwcml2LT5zZXRfYnVzX3BhcmFtCQk9IGljZC0+b3BzLT5zZXRfYnVzX3BhcmFtOworCQlwcml2LT5xdWVyeV9idXNfcGFyYW0JCT0gaWNkLT5vcHMtPnF1ZXJ5X2J1c19wYXJhbTsKIAkJaWNkLT5vcHMtPnNldF9idXNfcGFyYW0JCT0gc2hfY3NpMl9zZXRfYnVzX3BhcmFtOwogCQlpY2QtPm9wcy0+cXVlcnlfYnVzX3BhcmFtCT0gc2hfY3NpMl9xdWVyeV9idXNfcGFyYW07CiAKQEAgLTIyNiw4ICsyMzEsMTAgQEAKIAkJcHJpdi0+Y2xpZW50ID0gTlVMTDsKIAogCQkvKiBEcml2ZXIgaXMgYWJvdXQgdG8gYmUgdW5ib3VuZCAqLwotCQlpY2QtPm9wcy0+c2V0X2J1c19wYXJhbQkJPSBOVUxMOwotCQlpY2QtPm9wcy0+cXVlcnlfYnVzX3BhcmFtCT0gTlVMTDsKKwkJaWNkLT5vcHMtPnNldF9idXNfcGFyYW0JCT0gcHJpdi0+c2V0X2J1c19wYXJhbTsKKwkJaWNkLT5vcHMtPnF1ZXJ5X2J1c19wYXJhbQk9IHByaXYtPnF1ZXJ5X2J1c19wYXJhbTsKKwkJcHJpdi0+c2V0X2J1c19wYXJhbQkJPSBOVUxMOworCQlwcml2LT5xdWVyeV9idXNfcGFyYW0JCT0gTlVMTDsKIAogCQl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldigmcHJpdi0+c3ViZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYwppbmRleCA0NjI4NDQ4Li5kZGI0YzA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYwpAQCAtMTM2LDExICsxMzYsNTAgQEAKIH0KIEVYUE9SVF9TWU1CT0woc29jX2NhbWVyYV9hcHBseV9zZW5zb3JfZmxhZ3MpOwogCisjZGVmaW5lIHBpeGZtdHN0cih4KSAoeCkgJiAweGZmLCAoKHgpID4+IDgpICYgMHhmZiwgKCh4KSA+PiAxNikgJiAweGZmLCBcCisJKCh4KSA+PiAyNCkgJiAweGZmCisKK3N0YXRpYyBpbnQgc29jX2NhbWVyYV90cnlfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OworCWludCByZXQ7CisKKwlkZXZfZGJnKCZpY2QtPmRldiwgIlRSWV9GTVQoJWMlYyVjJWMsICV1eCV1KVxuIiwKKwkJcGl4Zm10c3RyKHBpeC0+cGl4ZWxmb3JtYXQpLCBwaXgtPndpZHRoLCBwaXgtPmhlaWdodCk7CisKKwlwaXgtPmJ5dGVzcGVybGluZSA9IDA7CisJcGl4LT5zaXplaW1hZ2UgPSAwOworCisJcmV0ID0gaWNpLT5vcHMtPnRyeV9mbXQoaWNkLCBmKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmICghcGl4LT5zaXplaW1hZ2UpIHsKKwkJaWYgKCFwaXgtPmJ5dGVzcGVybGluZSkgeworCQkJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp4bGF0ZTsKKworCQkJeGxhdGUgPSBzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYyhpY2QsIHBpeC0+cGl4ZWxmb3JtYXQpOworCQkJaWYgKCF4bGF0ZSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJcmV0ID0gc29jX21idXNfYnl0ZXNfcGVyX2xpbmUocGl4LT53aWR0aCwKKwkJCQkJCSAgICAgIHhsYXRlLT5ob3N0X2ZtdCk7CisJCQlpZiAocmV0ID4gMCkKKwkJCQlwaXgtPmJ5dGVzcGVybGluZSA9IHJldDsKKwkJfQorCQlpZiAocGl4LT5ieXRlc3BlcmxpbmUpCisJCQlwaXgtPnNpemVpbWFnZSA9IHBpeC0+Ynl0ZXNwZXJsaW5lICogcGl4LT5oZWlnaHQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgc29jX2NhbWVyYV90cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwogCiAJV0FSTl9PTihwcml2ICE9IGZpbGUtPnByaXZhdGVfZGF0YSk7CiAKQEAgLTE0OSw3ICsxODgsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIGxpbWl0IGZvcm1hdCB0byBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgKi8KLQlyZXR1cm4gaWNpLT5vcHMtPnRyeV9mbXQoaWNkLCBmKTsKKwlyZXR1cm4gc29jX2NhbWVyYV90cnlfZm10KGljZCwgZik7CiB9CiAKIHN0YXRpYyBpbnQgc29jX2NhbWVyYV9lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LApAQCAtMzYyLDkgKzQwMSw2IEBACiAJaWNkLT51c2VyX2Zvcm1hdHMgPSBOVUxMOwogfQogCi0jZGVmaW5lIHBpeGZtdHN0cih4KSAoeCkgJiAweGZmLCAoKHgpID4+IDgpICYgMHhmZiwgKCh4KSA+PiAxNikgJiAweGZmLCBcCi0JKCh4KSA+PiAyNCkgJiAweGZmCi0KIC8qIENhbGxlZCB3aXRoIC52Yl9sb2NrIGhlbGQsIG9yIGZyb20gdGhlIGZpcnN0IG9wZW4oMiksIHNlZSBjb21tZW50IHRoZXJlICovCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKIAkJCSAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKQEAgLTM3Nyw3ICs0MTMsNyBAQAogCQlwaXhmbXRzdHIocGl4LT5waXhlbGZvcm1hdCksIHBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0KTsKIAogCS8qIFdlIGFsd2F5cyBjYWxsIHRyeV9mbXQoKSBiZWZvcmUgc2V0X2ZtdCgpIG9yIHNldF9jcm9wKCkgKi8KLQlyZXQgPSBpY2ktPm9wcy0+dHJ5X2ZtdChpY2QsIGYpOworCXJldCA9IHNvY19jYW1lcmFfdHJ5X2ZtdChpY2QsIGYpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC05OTYsMTAgKzEwMzIsMTEgQEAKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0KIAkJdG9faTJjX2NsaWVudCh0b19zb2NfY2FtZXJhX2NvbnRyb2woaWNkKSk7CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gY2xpZW50LT5hZGFwdGVyOwogCWRldl9zZXRfZHJ2ZGF0YSgmaWNkLT5kZXYsIE5VTEwpOwogCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKIAlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2xpZW50KTsKLQlpMmNfcHV0X2FkYXB0ZXIoY2xpZW50LT5hZGFwdGVyKTsKKwlpMmNfcHV0X2FkYXB0ZXIoYWRhcCk7CiB9CiAjZWxzZQogI2RlZmluZSBzb2NfY2FtZXJhX2luaXRfaTJjKGljZCwgaWNsKQkoLUVOT0RFVikKQEAgLTEwNzEsNiArMTEwOCw5IEBACiAJCX0KIAl9CiAKKwlzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7CisJc2QtPmdycF9pZCA9IChsb25nKWljZDsKKwogCS8qIEF0IHRoaXMgcG9pbnQgY2xpZW50IC5wcm9iZSgpIHNob3VsZCBoYXZlIHJ1biBhbHJlYWR5ICovCiAJcmV0ID0gc29jX2NhbWVyYV9pbml0X3VzZXJfZm9ybWF0cyhpY2QpOwogCWlmIChyZXQgPCAwKQpAQCAtMTA5Miw3ICsxMTMyLDYgQEAKIAkJZ290byBldmlkc3RhcnQ7CiAKIAkvKiBUcnkgdG8gaW1wcm92ZSBvdXIgZ3Vlc3Mgb2YgYSByZWFzb25hYmxlIHdpbmRvdyBmb3JtYXQgKi8KLQlzZCA9IHNvY19jYW1lcmFfdG9fc3ViZGV2KGljZCk7CiAJaWYgKCF2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgZ19tYnVzX2ZtdCwgJm1mKSkgewogCQlpY2QtPnVzZXJfd2lkdGgJCT0gbWYud2lkdGg7CiAJCWljZC0+dXNlcl9oZWlnaHQJPSBtZi5oZWlnaHQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NDAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg0MC5jCmluZGV4IDVkNGNmM2IuLjIyZmE4MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg0MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg0MC5jCkBAIC0xNzEsNyArMTcxLDcgQEAKIAl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAogCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKLQlzZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2NGwyX3N1YmRldiksIEdGUF9LRVJORUwpOworCXNkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHY0bDJfc3ViZGV2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNkID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZ0ZGE5ODQwX29wcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MTVjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MTVjLmMKaW5kZXggMTk2MjFlZC4uODI3NDI1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDE1Yy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQxNWMuYwpAQCAtMTUyLDcgKzE1Miw3IEBACiAKIAl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAogCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7Ci0Jc2QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdjRsMl9zdWJkZXYpLCBHRlBfS0VSTkVMKTsKKwlzZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2NGwyX3N1YmRldiksIEdGUF9LRVJORUwpOwogCWlmIChzZCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmdGVhNjQxNWNfb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQyMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDIwLmMKaW5kZXggNWVhODQwNC4uZjM1MGI2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDIwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDIwLmMKQEAgLTEyNSw3ICsxMjUsNyBAQAogCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCiAJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAotCXNkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHY0bDJfc3ViZGV2KSwgR0ZQX0tFUk5FTCk7CisJc2QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdjRsMl9zdWJkZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc2QgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJnRlYTY0MjBfb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXBkNjQwMzFhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VwZDY0MDMxYS5jCmluZGV4IGY4MTM4YzcuLjFhYWI5NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXBkNjQwMzFhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91cGQ2NDAzMWEuYwpAQCAtMjMwLDcgKzIzMCw3IEBACiAJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKIAkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCi0Jc3RhdGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXBkNjQwMzFhX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdXBkNjQwMzFhX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHN0YXRlID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCXNkID0gJnN0YXRlLT5zZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXBkNjQwODMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXBkNjQwODMuYwppbmRleCAyOGUwZTZiLi45YmJlNjE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VwZDY0MDgzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91cGQ2NDA4My5jCkBAIC0yMDIsNyArMjAyLDcgQEAKIAl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAogCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKLQlzdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1cGQ2NDA4M19zdGF0ZSksIEdGUF9LRVJORUwpOworCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVwZDY0MDgzX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHN0YXRlID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCXNkID0gJnN0YXRlLT5zZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXYuYwppbmRleCA0OThlNjc0Li42ZGM3MTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldi5jCkBAIC0zODksNyArMzg5LDggQEAKIAl2aWRlb19nZXQodmRldik7CiAJbXV0ZXhfdW5sb2NrKCZ2aWRlb2Rldl9sb2NrKTsKICNpZiBkZWZpbmVkKENPTkZJR19NRURJQV9DT05UUk9MTEVSKQotCWlmICh2ZGV2LT52NGwyX2RldiAmJiB2ZGV2LT52NGwyX2Rldi0+bWRldikgeworCWlmICh2ZGV2LT52NGwyX2RldiAmJiB2ZGV2LT52NGwyX2Rldi0+bWRldiAmJgorCSAgICB2ZGV2LT52ZmxfdHlwZSAhPSBWRkxfVFlQRV9TVUJERVYpIHsKIAkJZW50aXR5ID0gbWVkaWFfZW50aXR5X2dldCgmdmRldi0+ZW50aXR5KTsKIAkJaWYgKCFlbnRpdHkpIHsKIAkJCXJldCA9IC1FQlVTWTsKQEAgLTQxNSw3ICs0MTYsOCBAQAogCS8qIGRlY3JlYXNlIHRoZSByZWZjb3VudCBpbiBjYXNlIG9mIGFuIGVycm9yICovCiAJaWYgKHJldCkgewogI2lmIGRlZmluZWQoQ09ORklHX01FRElBX0NPTlRST0xMRVIpCi0JCWlmICh2ZGV2LT52NGwyX2RldiAmJiB2ZGV2LT52NGwyX2Rldi0+bWRldikKKwkJaWYgKHZkZXYtPnY0bDJfZGV2ICYmIHZkZXYtPnY0bDJfZGV2LT5tZGV2ICYmCisJCSAgICB2ZGV2LT52ZmxfdHlwZSAhPSBWRkxfVFlQRV9TVUJERVYpCiAJCQltZWRpYV9lbnRpdHlfcHV0KGVudGl0eSk7CiAjZW5kaWYKIAkJdmlkZW9fcHV0KHZkZXYpOwpAQCAtNDM3LDcgKzQzOSw4IEBACiAJCQltdXRleF91bmxvY2sodmRldi0+bG9jayk7CiAJfQogI2lmIGRlZmluZWQoQ09ORklHX01FRElBX0NPTlRST0xMRVIpCi0JaWYgKHZkZXYtPnY0bDJfZGV2ICYmIHZkZXYtPnY0bDJfZGV2LT5tZGV2KQorCWlmICh2ZGV2LT52NGwyX2RldiAmJiB2ZGV2LT52NGwyX2Rldi0+bWRldiAmJgorCSAgICB2ZGV2LT52ZmxfdHlwZSAhPSBWRkxfVFlQRV9TVUJERVYpCiAJCW1lZGlhX2VudGl0eV9wdXQoJnZkZXYtPmVudGl0eSk7CiAjZW5kaWYKIAkvKiBkZWNyZWFzZSB0aGUgcmVmY291bnQgdW5jb25kaXRpb25hbGx5IHNpbmNlIHRoZSByZWxlYXNlKCkKQEAgLTY4Niw3ICs2ODksOCBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfTUVESUFfQ09OVFJPTExFUikKIAkvKiBQYXJ0IDU6IFJlZ2lzdGVyIHRoZSBlbnRpdHkuICovCi0JaWYgKHZkZXYtPnY0bDJfZGV2ICYmIHZkZXYtPnY0bDJfZGV2LT5tZGV2KSB7CisJaWYgKHZkZXYtPnY0bDJfZGV2ICYmIHZkZXYtPnY0bDJfZGV2LT5tZGV2ICYmCisJICAgIHZkZXYtPnZmbF90eXBlICE9IFZGTF9UWVBFX1NVQkRFVikgewogCQl2ZGV2LT5lbnRpdHkudHlwZSA9IE1FRElBX0VOVF9UX0RFVk5PREVfVjRMOwogCQl2ZGV2LT5lbnRpdHkubmFtZSA9IHZkZXYtPm5hbWU7CiAJCXZkZXYtPmVudGl0eS52NGwubWFqb3IgPSBWSURFT19NQUpPUjsKQEAgLTczMyw3ICs3MzcsOCBAQAogCQlyZXR1cm47CiAKICNpZiBkZWZpbmVkKENPTkZJR19NRURJQV9DT05UUk9MTEVSKQotCWlmICh2ZGV2LT52NGwyX2RldiAmJiB2ZGV2LT52NGwyX2Rldi0+bWRldikKKwlpZiAodmRldi0+djRsMl9kZXYgJiYgdmRldi0+djRsMl9kZXYtPm1kZXYgJiYKKwkgICAgdmRldi0+dmZsX3R5cGUgIT0gVkZMX1RZUEVfU1VCREVWKQogCQltZWRpYV9kZXZpY2VfdW5yZWdpc3Rlcl9lbnRpdHkoJnZkZXYtPmVudGl0eSk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldmljZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldmljZS5jCmluZGV4IDVhZWFmODcuLjRhYWU1MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXZpY2UuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2aWNlLmMKQEAgLTE1NSw4ICsxNTUsMTAgQEAKIAlzZC0+djRsMl9kZXYgPSB2NGwyX2RldjsKIAlpZiAoc2QtPmludGVybmFsX29wcyAmJiBzZC0+aW50ZXJuYWxfb3BzLT5yZWdpc3RlcmVkKSB7CiAJCWVyciA9IHNkLT5pbnRlcm5hbF9vcHMtPnJlZ2lzdGVyZWQoc2QpOwotCQlpZiAoZXJyKQorCQlpZiAoZXJyKSB7CisJCQltb2R1bGVfcHV0KHNkLT5vd25lcik7CiAJCQlyZXR1cm4gZXJyOworCQl9CiAJfQogCiAJLyogVGhpcyBqdXN0IHJldHVybnMgMCBpZiBlaXRoZXIgb2YgdGhlIHR3byBhcmdzIGlzIE5VTEwgKi8KQEAgLTE2NCw2ICsxNjYsNyBAQAogCWlmIChlcnIpIHsKIAkJaWYgKHNkLT5pbnRlcm5hbF9vcHMgJiYgc2QtPmludGVybmFsX29wcy0+dW5yZWdpc3RlcmVkKQogCQkJc2QtPmludGVybmFsX29wcy0+dW5yZWdpc3RlcmVkKHNkKTsKKwkJbW9kdWxlX3B1dChzZC0+b3duZXIpOwogCQlyZXR1cm4gZXJyOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLXN1YmRldi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLXN1YmRldi5jCmluZGV4IDBiODA2NDQuLjgxMjcyOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1zdWJkZXYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItc3ViZGV2LmMKQEAgLTE1NSwyNSArMTU1LDI1IEBACiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKLQkJcmV0dXJuIHY0bDJfc3ViZGV2X3F1ZXJ5Y3RybChzZCwgYXJnKTsKKwkJcmV0dXJuIHY0bDJfcXVlcnljdHJsKHNkLT5jdHJsX2hhbmRsZXIsIGFyZyk7CiAKIAljYXNlIFZJRElPQ19RVUVSWU1FTlU6Ci0JCXJldHVybiB2NGwyX3N1YmRldl9xdWVyeW1lbnUoc2QsIGFyZyk7CisJCXJldHVybiB2NGwyX3F1ZXJ5bWVudShzZC0+Y3RybF9oYW5kbGVyLCBhcmcpOwogCiAJY2FzZSBWSURJT0NfR19DVFJMOgotCQlyZXR1cm4gdjRsMl9zdWJkZXZfZ19jdHJsKHNkLCBhcmcpOworCQlyZXR1cm4gdjRsMl9nX2N0cmwoc2QtPmN0cmxfaGFuZGxlciwgYXJnKTsKIAogCWNhc2UgVklESU9DX1NfQ1RSTDoKLQkJcmV0dXJuIHY0bDJfc3ViZGV2X3NfY3RybChzZCwgYXJnKTsKKwkJcmV0dXJuIHY0bDJfc19jdHJsKHNkLT5jdHJsX2hhbmRsZXIsIGFyZyk7CiAKIAljYXNlIFZJRElPQ19HX0VYVF9DVFJMUzoKLQkJcmV0dXJuIHY0bDJfc3ViZGV2X2dfZXh0X2N0cmxzKHNkLCBhcmcpOworCQlyZXR1cm4gdjRsMl9nX2V4dF9jdHJscyhzZC0+Y3RybF9oYW5kbGVyLCBhcmcpOwogCiAJY2FzZSBWSURJT0NfU19FWFRfQ1RSTFM6Ci0JCXJldHVybiB2NGwyX3N1YmRldl9zX2V4dF9jdHJscyhzZCwgYXJnKTsKKwkJcmV0dXJuIHY0bDJfc19leHRfY3RybHMoc2QtPmN0cmxfaGFuZGxlciwgYXJnKTsKIAogCWNhc2UgVklESU9DX1RSWV9FWFRfQ1RSTFM6Ci0JCXJldHVybiB2NGwyX3N1YmRldl90cnlfZXh0X2N0cmxzKHNkLCBhcmcpOworCQlyZXR1cm4gdjRsMl90cnlfZXh0X2N0cmxzKHNkLT5jdHJsX2hhbmRsZXIsIGFyZyk7CiAKIAljYXNlIFZJRElPQ19EUUVWRU5UOgogCQlpZiAoIShzZC0+ZmxhZ3MgJiBWNEwyX1NVQkRFVl9GTF9IQVNfRVZFTlRTKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYyLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYyLWNvcmUuYwppbmRleCA2Njk4Yzc3Li42YmExNDYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmMi1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1ZjItY29yZS5jCkBAIC0zNyw2ICszNyw5IEBACiAjZGVmaW5lIGNhbGxfcW9wKHEsIG9wLCBhcmdzLi4uKQkJCQkJXAogCSgoKHEpLT5vcHMtPm9wKSA/ICgocSktPm9wcy0+b3AoYXJncykpIDogMCkKIAorI2RlZmluZSBWNEwyX0JVRkZFUl9TVEFURV9GTEFHUwkoVjRMMl9CVUZfRkxBR19NQVBQRUQgfCBWNEwyX0JVRl9GTEFHX1FVRVVFRCB8IFwKKwkJCQkgVjRMMl9CVUZfRkxBR19ET05FIHwgVjRMMl9CVUZfRkxBR19FUlJPUikKKwogLyoqCiAgKiBfX3ZiMl9idWZfbWVtX2FsbG9jKCkgLSBhbGxvY2F0ZSB2aWRlbyBtZW1vcnkgZm9yIHRoZSBnaXZlbiBidWZmZXIKICAqLwpAQCAtNTEsNyArNTQsNyBAQAogCWZvciAocGxhbmUgPSAwOyBwbGFuZSA8IHZiLT5udW1fcGxhbmVzOyArK3BsYW5lKSB7CiAJCW1lbV9wcml2ID0gY2FsbF9tZW1vcChxLCBwbGFuZSwgYWxsb2MsIHEtPmFsbG9jX2N0eFtwbGFuZV0sCiAJCQkJCXBsYW5lX3NpemVzW3BsYW5lXSk7Ci0JCWlmICghbWVtX3ByaXYpCisJCWlmIChJU19FUlJfT1JfTlVMTChtZW1fcHJpdikpCiAJCQlnb3RvIGZyZWU7CiAKIAkJLyogQXNzb2NpYXRlIGFsbG9jYXRvciBwcml2YXRlIGRhdGEgd2l0aCB0aGlzIHBsYW5lICovCkBAIC0yODQsNyArMjg3LDcgQEAKIAlzdHJ1Y3QgdmIyX3F1ZXVlICpxID0gdmItPnZiMl9xdWV1ZTsKIAlpbnQgcmV0ID0gMDsKIAotCS8qIENvcHkgYmFjayBkYXRhIHN1Y2ggYXMgdGltZXN0YW1wLCBpbnB1dCwgZXRjLiAqLworCS8qIENvcHkgYmFjayBkYXRhIHN1Y2ggYXMgdGltZXN0YW1wLCBmbGFncywgaW5wdXQsIGV0Yy4gKi8KIAltZW1jcHkoYiwgJnZiLT52NGwyX2J1Ziwgb2Zmc2V0b2Yoc3RydWN0IHY0bDJfYnVmZmVyLCBtKSk7CiAJYi0+aW5wdXQgPSB2Yi0+djRsMl9idWYuaW5wdXQ7CiAJYi0+cmVzZXJ2ZWQgPSB2Yi0+djRsMl9idWYucmVzZXJ2ZWQ7CkBAIC0zMTMsNyArMzE2LDEwIEBACiAJCQliLT5tLnVzZXJwdHIgPSB2Yi0+djRsMl9wbGFuZXNbMF0ubS51c2VycHRyOwogCX0KIAotCWItPmZsYWdzID0gMDsKKwkvKgorCSAqIENsZWFyIGFueSBidWZmZXIgc3RhdGUgcmVsYXRlZCBmbGFncy4KKwkgKi8KKwliLT5mbGFncyAmPSB+VjRMMl9CVUZGRVJfU1RBVEVfRkxBR1M7CiAKIAlzd2l0Y2ggKHZiLT5zdGF0ZSkgewogCWNhc2UgVkIyX0JVRl9TVEFURV9RVUVVRUQ6CkBAIC01MTksNiArNTI1LDcgQEAKIAludW1fYnVmZmVycyA9IG1pbl90KHVuc2lnbmVkIGludCwgcmVxLT5jb3VudCwgVklERU9fTUFYX0ZSQU1FKTsKIAltZW1zZXQocGxhbmVfc2l6ZXMsIDAsIHNpemVvZihwbGFuZV9zaXplcykpOwogCW1lbXNldChxLT5hbGxvY19jdHgsIDAsIHNpemVvZihxLT5hbGxvY19jdHgpKTsKKwlxLT5tZW1vcnkgPSByZXEtPm1lbW9yeTsKIAogCS8qCiAJICogQXNrIHRoZSBkcml2ZXIgaG93IG1hbnkgYnVmZmVycyBhbmQgcGxhbmVzIHBlciBidWZmZXIgaXQgcmVxdWlyZXMuCkBAIC01NjAsOCArNTY3LDYgQEAKIAkJcmV0ID0gbnVtX2J1ZmZlcnM7CiAJfQogCi0JcS0+bWVtb3J5ID0gcmVxLT5tZW1vcnk7Ci0KIAkvKgogCSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQgYnVmZmVycwogCSAqIHRvIHRoZSB1c2Vyc3BhY2UuCkBAIC03MTUsNiArNzIwLDggQEAKIAogCXZiLT52NGwyX2J1Zi5maWVsZCA9IGItPmZpZWxkOwogCXZiLT52NGwyX2J1Zi50aW1lc3RhbXAgPSBiLT50aW1lc3RhbXA7CisJdmItPnY0bDJfYnVmLmlucHV0ID0gYi0+aW5wdXQ7CisJdmItPnY0bDJfYnVmLmZsYWdzID0gYi0+ZmxhZ3MgJiB+VjRMMl9CVUZGRVJfU1RBVEVfRkxBR1M7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYyLWRtYS1jb250aWcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYyLWRtYS1jb250aWcuYwppbmRleCA1ODIwNWQ1Li5hNzkwYTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmMi1kbWEtY29udGlnLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1ZjItZG1hLWNvbnRpZy5jCkBAIC00Niw3ICs0Niw3IEBACiAJCQkJCUdGUF9LRVJORUwpOwogCWlmICghYnVmLT52YWRkcikgewogCQlkZXZfZXJyKGNvbmYtPmRldiwgImRtYV9hbGxvY19jb2hlcmVudCBvZiBzaXplICVsZCBmYWlsZWRcbiIsCi0JCQlidWYtPnNpemUpOworCQkJc2l6ZSk7CiAJCWtmcmVlKGJ1Zik7CiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKaW5kZXggMTczNWM4NC4uZmU5MDIzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKQEAgLTc2LDggKzc2LDggQEAKICNkZWZpbmUgQ09QWVJJR0hUCSJDb3B5cmlnaHQgKGMpIDE5OTktMjAwOCAiIE1PRFVMRUFVVEhPUgogI2VuZGlmCiAKLSNkZWZpbmUgTVBUX0xJTlVYX1ZFUlNJT05fQ09NTU9OCSIzLjA0LjE4IgotI2RlZmluZSBNUFRfTElOVVhfUEFDS0FHRV9OQU1FCQkiQCgjKW1wdGxpbnV4LTMuMDQuMTgiCisjZGVmaW5lIE1QVF9MSU5VWF9WRVJTSU9OX0NPTU1PTgkiMy4wNC4xOSIKKyNkZWZpbmUgTVBUX0xJTlVYX1BBQ0tBR0VfTkFNRQkJIkAoIyltcHRsaW51eC0zLjA0LjE5IgogI2RlZmluZSBXSEFUX01BR0lDX1NUUklORwkJIkAiICIoIiAiIyIgIikiCiAKICNkZWZpbmUgc2hvd19tcHRtb2RfdmVyKHMsdmVyKSAgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMKaW5kZXggNjZmOTQxMi4uNzU5NmFlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jCkBAIC01MDEyLDcgKzUwMTIsNiBAQAogCQkJKGlvY19zdGF0ICYgTVBJX0lPQ1NUQVRVU19GTEFHX0xPR19JTkZPX0FWQUlMQUJMRSkpIHsKIAkJCVZpcnRUYXJnZXQgKnZ0YXJnZXQgPSBOVUxMOwogCQkJdTgJCWlkLCBjaGFubmVsOwotCQkJdTMyCSBsb2dfaW5mbyA9IGxlMzJfdG9fY3B1KHJlcGx5LT5JT0NMb2dJbmZvKTsKIAogCQkJaWQgPSBzYXNfZXZlbnRfZGF0YS0+VGFyZ2V0SUQ7CiAJCQljaGFubmVsID0gc2FzX2V2ZW50X2RhdGEtPkJ1czsKQEAgLTUwMjMsNyArNTAyMiw4IEBACiAJCQkJICAgICJMb2dJbmZvICgweCV4KSBhdmFpbGFibGUgZm9yICIKIAkJCQkgICAiSU5URVJOQUxfREVWSUNFX1JFU0VUIgogCQkJCSAgICJmd19pZCAlZCBmd19jaGFubmVsICVkXG4iLCBpb2MtPm5hbWUsCi0JCQkJICAgbG9nX2luZm8sIGlkLCBjaGFubmVsKSk7CisJCQkJICAgbGUzMl90b19jcHUocmVwbHktPklPQ0xvZ0luZm8pLAorCQkJCSAgIGlkLCBjaGFubmVsKSk7CiAJCQkJaWYgKHZ0YXJnZXQtPnJhaWRWb2x1bWUpIHsKIAkJCQkJZGV2dHByaW50ayhpb2MsIHByaW50ayhNWUlPQ19zX0RFQlVHX0ZNVAogCQkJCQkiU2tpcHBpbmcgUmFpZCBWb2x1bWUgZm9yIGluRE1EXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCmluZGV4IDBkOWI4MmEuLmExZDRlZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMKQEAgLTE0MTUsMTEgKzE0MTUsOCBAQAogCWRtZnByaW50ayhpb2MsIHByaW50ayhNWUlPQ19zX0RFQlVHX0ZNVCAicWNtZDogU0NwbnQ9JXAsIGRvbmUoKT0lcFxuIiwKIAkJaW9jLT5uYW1lLCBTQ3BudCwgZG9uZSkpOwogCi0JaWYgKGlvYy0+dGFza21nbXRfcXVpZXNjZV9pbykgewotCQlkdG1wcmludGsoaW9jLCBwcmludGsoTVlJT0Nfc19XQVJOX0ZNVCAicWNtZDogU0NwbnQ9JXAgdGltZW91dCArIDYwSFpcbiIsCi0JCQlpb2MtPm5hbWUsIFNDcG50KSk7CisJaWYgKGlvYy0+dGFza21nbXRfcXVpZXNjZV9pbykKIAkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7Ci0JfQogCiAJLyoKIAkgKiAgUHV0IHRvZ2V0aGVyIGEgTVBUIFNDU0kgcmVxdWVzdC4uLgpAQCAtMTc3Myw3ICsxNzcwLDYgQEAKIAlpbnQJCSBzY3BudF9pZHg7CiAJaW50CQkgcmV0dmFsOwogCVZpcnREZXZpY2UJICp2ZGV2aWNlOwotCXVsb25nCSAJIHNuID0gU0NwbnQtPnNlcmlhbF9udW1iZXI7CiAJTVBUX0FEQVBURVIJKmlvYzsKIAogCS8qIElmIHdlIGNhbid0IGxvY2F0ZSBvdXIgaG9zdCBhZGFwdGVyIHN0cnVjdHVyZSwgcmV0dXJuIEZBSUxFRCBzdGF0dXMuCkBAIC0xODU5LDggKzE4NTUsNyBAQAogCQkJIHZkZXZpY2UtPnZ0YXJnZXQtPmlkLCB2ZGV2aWNlLT5sdW4sCiAJCQkgY3R4MmFib3J0LCBtcHRzY3NpaF9nZXRfdG1fdGltZW91dChpb2MpKTsKIAotCWlmIChTQ1BOVF9UT19MT09LVVBfSURYKGlvYywgU0NwbnQpID09IHNjcG50X2lkeCAmJgotCSAgICBTQ3BudC0+c2VyaWFsX251bWJlciA9PSBzbikgeworCWlmIChTQ1BOVF9UT19MT09LVVBfSURYKGlvYywgU0NwbnQpID09IHNjcG50X2lkeCkgewogCQlkdG1wcmludGsoaW9jLCBwcmludGsoTVlJT0Nfc19ERUJVR19GTVQKIAkJICAgICJ0YXNrIGFib3J0OiBjb21tYW5kIHN0aWxsIGluIGFjdGl2ZSBsaXN0ISAoc2M9JXApXG4iLAogCQkgICAgaW9jLT5uYW1lLCBTQ3BudCkpOwpAQCAtMTg3Myw5ICsxODY4LDkgQEAKIAl9CiAKICBvdXQ6Ci0JcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQgInRhc2sgYWJvcnQ6ICVzIChydj0lMDR4KSAoc2M9JXApIChzbj0lbGQpXG4iLAorCXByaW50ayhNWUlPQ19zX0lORk9fRk1UICJ0YXNrIGFib3J0OiAlcyAocnY9JTA0eCkgKHNjPSVwKVxuIiwKIAkgICAgaW9jLT5uYW1lLCAoKHJldHZhbCA9PSBTVUNDRVNTKSA/ICJTVUNDRVNTIiA6ICJGQUlMRUQiKSwgcmV0dmFsLAotCSAgICBTQ3BudCwgU0NwbnQtPnNlcmlhbF9udW1iZXIpOworCSAgICBTQ3BudCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzcGkuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c3BpLmMKaW5kZXggNmQ5NTY4ZC4uOGY2MWJhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzcGkuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNwaS5jCkBAIC04NjcsNiArODY3LDEwIEBACiAJc3RydWN0IF94X2NvbmZpZ19wYXJtcyBjZmc7CiAJc3RydWN0IF9DT05GSUdfUEFHRV9IRUFERVIgaGRyOwogCWludCBlcnIgPSAtRUJVU1k7CisJdTMyIG5lZ29fcGFybXM7CisJdTMyIHBlcmlvZDsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CisJaW50IGk7CiAKIAkvKiBkb24ndCBhbGxvdyB1cGRhdGluZyBuZWdvIHBhcmFtZXRlcnMgb24gUkFJRCBkZXZpY2VzICovCiAJaWYgKHN0YXJnZXQtPmNoYW5uZWwgPT0gMCAmJgpAQCAtOTA0LDYgKzkwOCwyNCBAQAogCXBnMS0+SGVhZGVyLlBhZ2VOdW1iZXIgPSBoZHIuUGFnZU51bWJlcjsKIAlwZzEtPkhlYWRlci5QYWdlVHlwZSA9IGhkci5QYWdlVHlwZTsKIAorCW5lZ29fcGFybXMgPSBsZTMyX3RvX2NwdShwZzEtPlJlcXVlc3RlZFBhcmFtZXRlcnMpOworCXBlcmlvZCA9IChuZWdvX3Bhcm1zICYgTVBJX1NDU0lERVZQQUdFMV9SUF9NSU5fU1lOQ19QRVJJT0RfTUFTSykgPj4KKwkJTVBJX1NDU0lERVZQQUdFMV9SUF9TSElGVF9NSU5fU1lOQ19QRVJJT0Q7CisJaWYgKHBlcmlvZCA9PSA4KSB7CisJCS8qIFR1cm4gb24gaW5saW5lIGRhdGEgcGFkZGluZyBmb3IgVEFQRSB3aGVuIHJ1bm5pbmcgVTMyMCAqLworCQlmb3IgKGkgPSAwIDsgaSA8IDE2OyBpKyspIHsKKwkJCXNkZXYgPSBzY3NpX2RldmljZV9sb29rdXBfYnlfdGFyZ2V0KHN0YXJnZXQsIGkpOworCQkJaWYgKHNkZXYgJiYgc2Rldi0+dHlwZSA9PSBUWVBFX1RBUEUpIHsKKwkJCQlzZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBzZGV2LCBNWUlPQ19zX0ZNVAorCQkJCQkgICAgIklEUDpPTlxuIiwgaW9jLT5uYW1lKTsKKwkJCQluZWdvX3Bhcm1zIHw9IE1QSV9TQ1NJREVWUEFHRTFfUlBfSURQOworCQkJCXBnMS0+UmVxdWVzdGVkUGFyYW1ldGVycyA9CisJCQkJICAgIGNwdV90b19sZTMyKG5lZ29fcGFybXMpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCiAJbXB0c3BpX3ByaW50X3dyaXRlX25lZ28oaGQsIHN0YXJnZXQsIGxlMzJfdG9fY3B1KHBnMS0+UmVxdWVzdGVkUGFyYW1ldGVycykpOwogCiAJaWYgKG1wdF9jb25maWcoaW9jLCAmY2ZnKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fYmxvY2suYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2Jsb2NrLmMKaW5kZXggNjQzYWQ1Mi4uNDc5NmJiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fYmxvY2suYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19ibG9jay5jCkBAIC0xMDAwLDcgKzEwMDAsNiBAQAogCWdkLT5tYWpvciA9IEkyT19NQUpPUjsKIAlnZC0+cXVldWUgPSBxdWV1ZTsKIAlnZC0+Zm9wcyA9ICZpMm9fYmxvY2tfZm9wczsKLQlnZC0+ZXZlbnRzID0gRElTS19FVkVOVF9NRURJQV9DSEFOR0U7CiAJZ2QtPnByaXZhdGVfZGF0YSA9IGRldjsKIAogCWRldi0+Z2QgPSBnZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX3Njc2kuYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX3Njc2kuYwppbmRleCBmMDAzOTU3Li43NGZiZTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19zY3NpLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fc2NzaS5jCkBAIC0zNjEsNyArMzYxLDcgQEAKIAkgKi8KIAllcnJvciA9IGxlMzJfdG9fY3B1KG1zZy0+Ym9keVswXSk7CiAKLQlvc21fZGVidWcoIkNvbXBsZXRlZCAlbGRcbiIsIGNtZC0+c2VyaWFsX251bWJlcik7CisJb3NtX2RlYnVnKCJDb21wbGV0ZWQgJTB4JXBcbiIsIGNtZCk7CiAKIAljbWQtPnJlc3VsdCA9IGVycm9yICYgMHhmZjsKIAkvKgpAQCAtNjc4LDcgKzY3OCw3IEBACiAJLyogUXVldWUgdGhlIG1lc3NhZ2UgKi8KIAlpMm9fbXNnX3Bvc3QoYywgbXNnKTsKIAotCW9zbV9kZWJ1ZygiSXNzdWVkICVsZFxuIiwgU0NwbnQtPnNlcmlhbF9udW1iZXIpOworCW9zbV9kZWJ1ZygiSXNzdWVkICUweCVwXG4iLCBTQ3BudCk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvYXNpYzMuYyBiL2RyaXZlcnMvbWZkL2FzaWMzLmMKaW5kZXggZDRhODUxYy4uMGI0ZDViMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvYXNpYzMuYworKysgYi9kcml2ZXJzL21mZC9hc2ljMy5jCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAlpbnQgaXRlciwgaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZGF0YS0+Y2hpcC0+aXJxX2FjayhpcnFfZGF0YSk7CisJZGF0YS0+Y2hpcC0+aXJxX2FjayhkYXRhKTsKIAogCWZvciAoaXRlciA9IDAgOyBpdGVyIDwgTUFYX0FTSUNfSVNSX0xPT1BTOyBpdGVyKyspIHsKIAkJdTMyIHN0YXR1czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL29tYXAtdXNiLWhvc3QuYyBiL2RyaXZlcnMvbWZkL29tYXAtdXNiLWhvc3QuYwppbmRleCA1MzQ1MGY0Li4zYWI5ZmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9vbWFwLXVzYi1ob3N0LmMKKysrIGIvZHJpdmVycy9tZmQvb21hcC11c2ItaG9zdC5jCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KICNpbmNsdWRlIDxwbGF0L3VzYi5oPgogCiAjZGVmaW5lIFVTQkhTX0RSSVZFUl9OQU1FCSJ1c2Jocy1vbWFwIgpAQCAtNzAwLDggKzY5OSw3IEBACiAJZGV2X2RiZyhkZXYsICJzdGFydGluZyBUSSBIU1VTQiBDb250cm9sbGVyXG4iKTsKIAlpZiAoIXBkYXRhKSB7CiAJCWRldl9kYmcoZGV2LCAibWlzc2luZyBwbGF0Zm9ybV9kYXRhXG4iKTsKLQkJcmV0ID0gIC1FTk9ERVY7Ci0JCWdvdG8gZW5kX2VuYWJsZTsKKwkJcmV0dXJuICAtRU5PREVWOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZvbWFwLT5sb2NrLCBmbGFncyk7CkBAIC03MTksMTQgKzcxNywxNCBAQAogCQkJZ3Bpb19yZXF1ZXN0KHBkYXRhLT5laGNpX2RhdGEtPnJlc2V0X2dwaW9fcG9ydFswXSwKIAkJCQkJCSJVU0IxIFBIWSByZXNldCIpOwogCQkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0Ci0JCQkJKHBkYXRhLT5laGNpX2RhdGEtPnJlc2V0X2dwaW9fcG9ydFswXSwgMSk7CisJCQkJKHBkYXRhLT5laGNpX2RhdGEtPnJlc2V0X2dwaW9fcG9ydFswXSwgMCk7CiAJCX0KIAogCQlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+ZWhjaV9kYXRhLT5yZXNldF9ncGlvX3BvcnRbMV0pKSB7CiAJCQlncGlvX3JlcXVlc3QocGRhdGEtPmVoY2lfZGF0YS0+cmVzZXRfZ3Bpb19wb3J0WzFdLAogCQkJCQkJIlVTQjIgUEhZIHJlc2V0Iik7CiAJCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQKLQkJCQkocGRhdGEtPmVoY2lfZGF0YS0+cmVzZXRfZ3Bpb19wb3J0WzFdLCAxKTsKKwkJCQkocGRhdGEtPmVoY2lfZGF0YS0+cmVzZXRfZ3Bpb19wb3J0WzFdLCAwKTsKIAkJfQogCiAJCS8qIEhvbGQgdGhlIFBIWSBpbiBSRVNFVCBmb3IgZW5vdWdoIHRpbWUgdGlsbCBESVIgaXMgaGlnaCAqLwpAQCAtOTA2LDE2ICs5MDQsMTcgQEAKIAogCQlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+ZWhjaV9kYXRhLT5yZXNldF9ncGlvX3BvcnRbMF0pKQogCQkJZ3Bpb19zZXRfdmFsdWUKLQkJCQkocGRhdGEtPmVoY2lfZGF0YS0+cmVzZXRfZ3Bpb19wb3J0WzBdLCAwKTsKKwkJCQkocGRhdGEtPmVoY2lfZGF0YS0+cmVzZXRfZ3Bpb19wb3J0WzBdLCAxKTsKIAogCQlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+ZWhjaV9kYXRhLT5yZXNldF9ncGlvX3BvcnRbMV0pKQogCQkJZ3Bpb19zZXRfdmFsdWUKLQkJCQkocGRhdGEtPmVoY2lfZGF0YS0+cmVzZXRfZ3Bpb19wb3J0WzFdLCAwKTsKKwkJCQkocGRhdGEtPmVoY2lfZGF0YS0+cmVzZXRfZ3Bpb19wb3J0WzFdLCAxKTsKIAl9CiAKIGVuZF9jb3VudDoKIAlvbWFwLT5jb3VudCsrOwotCWdvdG8gZW5kX2VuYWJsZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvbWFwLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7CiAKIGVycl90bGw6CiAJaWYgKHBkYXRhLT5laGNpX2RhdGEtPnBoeV9yZXNldCkgewpAQCAtOTMxLDggKzkzMCw2IEBACiAJY2xrX2Rpc2FibGUob21hcC0+dXNiaG9zdF9mc19mY2spOwogCWNsa19kaXNhYmxlKG9tYXAtPnVzYmhvc3RfaHNfZmNrKTsKIAljbGtfZGlzYWJsZShvbWFwLT51c2Job3N0X2ljayk7Ci0KLWVuZF9lbmFibGU6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb21hcC0+bG9jaywgZmxhZ3MpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90d2w0MDMwLXBvd2VyLmMgYi9kcml2ZXJzL21mZC90d2w0MDMwLXBvd2VyLmMKaW5kZXggMTY0MjJkZTAuLjJjMGQ0ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3R3bDQwMzAtcG93ZXIuYworKysgYi9kcml2ZXJzL21mZC90d2w0MDMwLXBvd2VyLmMKQEAgLTQ0NywxMiArNDQ3LDEzIEBACiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKIAl9Ci0JaWYgKHRzY3JpcHQtPmZsYWdzICYgVFdMNDAzMF9TTEVFUF9TQ1JJUFQpCisJaWYgKHRzY3JpcHQtPmZsYWdzICYgVFdMNDAzMF9TTEVFUF9TQ1JJUFQpIHsKIAkJaWYgKG9yZGVyKQogCQkJcHJfd2FybmluZygiVFdMNDAzMDogQmFkIG9yZGVyIG9mIHNjcmlwdHMgKHNsZWVwICJcCiAJCQkJCSJzY3JpcHQgYmVmb3JlIHdha2V1cCkgTGVhZHMgdG8gYm9vdCJcCiAJCQkJCSJmYWlsdXJlIG9uIHNvbWUgYm9hcmRzXG4iKTsKIAkJZXJyID0gdHdsNDAzMF9jb25maWdfc2xlZXBfc2VxdWVuY2UoYWRkcmVzcyk7CisJfQogb3V0OgogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvS2NvbmZpZyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCmluZGV4IDRlMDA3YzYuLmQ4MGRjZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCkBAIC00ODEsNSArNDgxLDYgQEAKIHNvdXJjZSAiZHJpdmVycy9taXNjL2l3bWMzMjAwdG9wL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbWlzYy90aS1zdC9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL21pc2MvbGlzM2x2MDJkL0tjb25maWciCitzb3VyY2UgImRyaXZlcnMvbWlzYy9jYXJtYS9LY29uZmlnIgogCiBlbmRpZiAjIE1JU0NfREVWSUNFUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL01ha2VmaWxlIGIvZHJpdmVycy9taXNjL01ha2VmaWxlCmluZGV4IGY1NDY4NjAuLjg0OGU4NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21pc2MvTWFrZWZpbGUKQEAgLTQ0LDMgKzQ0LDQgQEAKIG9iai15CQkJCSs9IHRpLXN0Lwogb2JqLSQoQ09ORklHX0FCODUwMF9QV00pCSs9IGFiODUwMC1wd20ubwogb2JqLXkJCQkJKz0gbGlzM2x2MDJkLworb2JqLXkJCQkJKz0gY2FybWEvCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvY2FybWEvS2NvbmZpZyBiL2RyaXZlcnMvbWlzYy9jYXJtYS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MDM3MGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21pc2MvY2FybWEvS2NvbmZpZwpAQCAtMCwwICsxLDE3IEBACitjb25maWcgQ0FSTUFfRlBHQQorCXRyaXN0YXRlICJDQVJNQSBEQVRBLUZQR0EgQWNjZXNzIERyaXZlciIKKwlkZXBlbmRzIG9uIEZTTF9TT0MgJiYgUFBDXzgzeHggJiYgTUVESUFfU1VQUE9SVCAmJiBIQVNfRE1BICYmIEZTTF9ETUEKKwlzZWxlY3QgVklERU9CVUZfRE1BX1NHCisJZGVmYXVsdCBuCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgZGF0YQorCSAgcHJvY2Vzc2luZyBGUEdBcyBvbiB0aGUgT1ZSTyBDQVJNQSBib2FyZC4KKworY29uZmlnIENBUk1BX0ZQR0FfUFJPR1JBTQorCXRyaXN0YXRlICJDQVJNQSBEQVRBLUZQR0EgUHJvZ3JhbW1lciIKKwlkZXBlbmRzIG9uIEZTTF9TT0MgJiYgUFBDXzgzeHggJiYgTUVESUFfU1VQUE9SVCAmJiBIQVNfRE1BICYmIEZTTF9ETUEKKwlzZWxlY3QgVklERU9CVUZfRE1BX1NHCisJZGVmYXVsdCBuCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHByb2dyYW1taW5nIHRoZSBkYXRhIHByb2Nlc3NpbmcKKwkgIEZQR0FzIG9uIHRoZSBPVlJPIENBUk1BIGJvYXJkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2Nhcm1hL01ha2VmaWxlIGIvZHJpdmVycy9taXNjL2Nhcm1hL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMzZhYzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21pc2MvY2FybWEvTWFrZWZpbGUKQEAgLTAsMCArMSwyIEBACitvYmotJChDT05GSUdfQ0FSTUFfRlBHQSkJCSs9IGNhcm1hLWZwZ2Eubworb2JqLSQoQ09ORklHX0NBUk1BX0ZQR0FfUFJPR1JBTSkJKz0gY2FybWEtZnBnYS1wcm9ncmFtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9jYXJtYS9jYXJtYS1mcGdhLXByb2dyYW0uYyBiL2RyaXZlcnMvbWlzYy9jYXJtYS9jYXJtYS1mcGdhLXByb2dyYW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2U2MDY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9taXNjL2Nhcm1hL2Nhcm1hLWZwZ2EtcHJvZ3JhbS5jCkBAIC0wLDAgKzEsMTE0MSBAQAorLyoKKyAqIENBUk1BIEJvYXJkIERBVEEtRlBHQSBQcm9ncmFtbWVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTEgSXJhIFcuIFNueWRlciA8aXdzQG92cm8uY2FsdGVjaC5lZHU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtZG1hLXNnLmg+CisKKy8qIE1QQzgzNDlFTURTIHNwZWNpZmljIGdldF9pbW1yYmFzZSgpICovCisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9zb2MuaD4KKworc3RhdGljIGNvbnN0IGNoYXIgZHJ2X25hbWVbXSA9ICJjYXJtYS1mcGdhLXByb2dyYW0iOworCisvKgorICogRmlybXdhcmUgaW1hZ2VzIGFyZSBhbHdheXMgdGhpcyBleGFjdCBzaXplCisgKgorICogMTI4NDk1NTIgYnl0ZXMgZm9yIGEgQ0FSTUEgRGlnaXRpemVyIEJvYXJkIChFUDJTOTAgRlBHQXMpCisgKiAxODY2Mjg4MCBieXRlcyBmb3IgYSBDQVJNQSBDb3JyZWxhdG9yIEJvYXJkIChFUDJTMTMwIEZQR0FzKQorICovCisjZGVmaW5lIEZXX1NJWkVfRVAyUzkwCQkxMjg0OTU1MgorI2RlZmluZSBGV19TSVpFX0VQMlMxMzAJCTE4NjYyODgwCisKK3N0cnVjdCBmcGdhX2RldiB7CisJc3RydWN0IG1pc2NkZXZpY2UgbWlzY2RldjsKKworCS8qIFJlZmVyZW5jZSBjb3VudCAqLworCXN0cnVjdCBrcmVmIHJlZjsKKworCS8qIERldmljZSBSZWdpc3RlcnMgKi8KKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXZvaWQgX19pb21lbSAqaW1tcjsKKworCS8qIEZyZWVzY2FsZSBETUEgRGV2aWNlICovCisJc3RydWN0IGRtYV9jaGFuICpjaGFuOworCisJLyogSW50ZXJydXB0cyAqLworCWludCBpcnEsIHN0YXR1czsKKwlzdHJ1Y3QgY29tcGxldGlvbiBjb21wbGV0aW9uOworCisJLyogRlBHQSBCaXRmaWxlICovCisJc3RydWN0IG11dGV4IGxvY2s7CisKKwlzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmIHZiOworCWJvb2wgdmJfYWxsb2NhdGVkOworCisJLyogbWF4IHNpemUgYW5kIHdyaXR0ZW4gYnl0ZXMgKi8KKwlzaXplX3QgZndfc2l6ZTsKKwlzaXplX3QgYnl0ZXM7Cit9OworCisvKgorICogRlBHQSBCaXRmaWxlIEhlbHBlcnMKKyAqLworCisvKioKKyAqIGZwZ2FfZHJvcF9maXJtd2FyZV9kYXRhKCkgLSBkcm9wIHRoZSBiaXRmaWxlIGltYWdlIGZyb20gbWVtb3J5CisgKiBAcHJpdjogdGhlIGRyaXZlcidzIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUKKyAqCisgKiBMT0NLSU5HOiBtdXN0IGhvbGQgcHJpdi0+bG9jaworICovCitzdGF0aWMgdm9pZCBmcGdhX2Ryb3BfZmlybXdhcmVfZGF0YShzdHJ1Y3QgZnBnYV9kZXYgKnByaXYpCit7CisJdmlkZW9idWZfZG1hX2ZyZWUoJnByaXYtPnZiKTsKKwlwcml2LT52Yl9hbGxvY2F0ZWQgPSBmYWxzZTsKKwlwcml2LT5ieXRlcyA9IDA7Cit9CisKKy8qCisgKiBQcml2YXRlIERhdGEgUmVmZXJlbmNlIENvdW50CisgKi8KKworc3RhdGljIHZvaWQgZnBnYV9kZXZfcmVtb3ZlKHN0cnVjdCBrcmVmICpyZWYpCit7CisJc3RydWN0IGZwZ2FfZGV2ICpwcml2ID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGZwZ2FfZGV2LCByZWYpOworCisJLyogZnJlZSBhbnkgZmlybXdhcmUgaW1hZ2UgdGhhdCB3YXMgbm90IHByb2dyYW1tZWQgKi8KKwlmcGdhX2Ryb3BfZmlybXdhcmVfZGF0YShwcml2KTsKKworCW11dGV4X2Rlc3Ryb3koJnByaXYtPmxvY2spOworCWtmcmVlKHByaXYpOworfQorCisvKgorICogTEVEIFRyaWdnZXIgKGNvdWxkIGJlIGEgc2VwZXJhdGUgbW9kdWxlKQorICovCisKKy8qCisgKiBOT1RFOiB0aGlzIHdob2xlIHRoaW5nIGRvZXMgaGF2ZSB0aGUgcHJvYmxlbSB0aGF0IHdoZW5ldmVyIHRoZSBsZWQncyBhcmUKKyAqIE5PVEU6IGZpcnN0IHNldCB0byB1c2UgdGhlIGZwZ2EgdHJpZ2dlciwgdGhleSBjb3VsZCBiZSBpbiB0aGUgd3Jvbmcgc3RhdGUKKyAqLworCitERUZJTkVfTEVEX1RSSUdHRVIobGVkdHJpZ19mcGdhKTsKKworc3RhdGljIHZvaWQgbGVkdHJpZ19mcGdhX3Byb2dyYW1tZWQoYm9vbCBlbmFibGVkKQoreworCWlmIChlbmFibGVkKQorCQlsZWRfdHJpZ2dlcl9ldmVudChsZWR0cmlnX2ZwZ2EsIExFRF9GVUxMKTsKKwllbHNlCisJCWxlZF90cmlnZ2VyX2V2ZW50KGxlZHRyaWdfZnBnYSwgTEVEX09GRik7Cit9CisKKy8qCisgKiBGUEdBIFJlZ2lzdGVyIEhlbHBlcnMKKyAqLworCisvKiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBGUEdBX0NPTkZJR19DT05UUk9MCQkweDQwCisjZGVmaW5lIEZQR0FfQ09ORklHX1NUQVRVUwkJMHg0NAorI2RlZmluZSBGUEdBX0NPTkZJR19GSUZPX1NJWkUJCTB4NDgKKyNkZWZpbmUgRlBHQV9DT05GSUdfRklGT19VU0VECQkweDRDCisjZGVmaW5lIEZQR0FfQ09ORklHX1RPVEFMX0JZVEVfQ09VTlQJMHg1MAorI2RlZmluZSBGUEdBX0NPTkZJR19DVVJfQllURV9DT1VOVAkweDU0CisKKyNkZWZpbmUgRlBHQV9GSUZPX0FERFJFU1MJCTB4MzAwMAorCitzdGF0aWMgaW50IGZwZ2FfZmlmb19zaXplKHZvaWQgX19pb21lbSAqcmVncykKK3sKKwlyZXR1cm4gaW9yZWFkMzJiZShyZWdzICsgRlBHQV9DT05GSUdfRklGT19TSVpFKTsKK30KKworI2RlZmluZSBDRkdfU1RBVFVTX0VSUl9NQVNLCTB4ZmZmZQorCitzdGF0aWMgaW50IGZwZ2FfY29uZmlnX2Vycm9yKHZvaWQgX19pb21lbSAqcmVncykKK3sKKwlyZXR1cm4gaW9yZWFkMzJiZShyZWdzICsgRlBHQV9DT05GSUdfU1RBVFVTKSAmIENGR19TVEFUVVNfRVJSX01BU0s7Cit9CisKK3N0YXRpYyBpbnQgZnBnYV9maWZvX2VtcHR5KHZvaWQgX19pb21lbSAqcmVncykKK3sKKwlyZXR1cm4gaW9yZWFkMzJiZShyZWdzICsgRlBHQV9DT05GSUdfRklGT19VU0VEKSA9PSAwOworfQorCitzdGF0aWMgdm9pZCBmcGdhX2ZpZm9fd3JpdGUodm9pZCBfX2lvbWVtICpyZWdzLCB1MzIgdmFsKQoreworCWlvd3JpdGUzMmJlKHZhbCwgcmVncyArIEZQR0FfRklGT19BRERSRVNTKTsKK30KKworc3RhdGljIHZvaWQgZnBnYV9zZXRfYnl0ZV9jb3VudCh2b2lkIF9faW9tZW0gKnJlZ3MsIHUzMiBjb3VudCkKK3sKKwlpb3dyaXRlMzJiZShjb3VudCwgcmVncyArIEZQR0FfQ09ORklHX1RPVEFMX0JZVEVfQ09VTlQpOworfQorCisjZGVmaW5lIENGR19DVExfRU5BQkxFCSgxIDw8IDApCisjZGVmaW5lIENGR19DVExfUkVTRVQJKDEgPDwgMSkKKyNkZWZpbmUgQ0ZHX0NUTF9ETUEJKDEgPDwgMikKKworc3RhdGljIHZvaWQgZnBnYV9wcm9ncmFtbWVyX2VuYWJsZShzdHJ1Y3QgZnBnYV9kZXYgKnByaXYsIGJvb2wgZG1hKQoreworCXUzMiB2YWw7CisKKwl2YWwgPSAoZG1hKSA/IChDRkdfQ1RMX0VOQUJMRSB8IENGR19DVExfRE1BKSA6IENGR19DVExfRU5BQkxFOworCWlvd3JpdGUzMmJlKHZhbCwgcHJpdi0+cmVncyArIEZQR0FfQ09ORklHX0NPTlRST0wpOworfQorCitzdGF0aWMgdm9pZCBmcGdhX3Byb2dyYW1tZXJfZGlzYWJsZShzdHJ1Y3QgZnBnYV9kZXYgKnByaXYpCit7CisJaW93cml0ZTMyYmUoMHgwLCBwcml2LT5yZWdzICsgRlBHQV9DT05GSUdfQ09OVFJPTCk7Cit9CisKK3N0YXRpYyB2b2lkIGZwZ2FfZHVtcF9yZWdpc3RlcnMoc3RydWN0IGZwZ2FfZGV2ICpwcml2KQoreworCXUzMiBjb250cm9sLCBzdGF0dXMsIHNpemUsIHVzZWQsIHRvdGFsLCBjdXJyOworCisJLyogZ29vZCBzdGF0dXM6IGRvIG5vdGhpbmcgKi8KKwlpZiAocHJpdi0+c3RhdHVzID09IDApCisJCXJldHVybjsKKworCS8qIER1bXAgYWxsIHN0YXR1cyByZWdpc3RlcnMgKi8KKwljb250cm9sID0gaW9yZWFkMzJiZShwcml2LT5yZWdzICsgRlBHQV9DT05GSUdfQ09OVFJPTCk7CisJc3RhdHVzID0gaW9yZWFkMzJiZShwcml2LT5yZWdzICsgRlBHQV9DT05GSUdfU1RBVFVTKTsKKwlzaXplID0gaW9yZWFkMzJiZShwcml2LT5yZWdzICsgRlBHQV9DT05GSUdfRklGT19TSVpFKTsKKwl1c2VkID0gaW9yZWFkMzJiZShwcml2LT5yZWdzICsgRlBHQV9DT05GSUdfRklGT19VU0VEKTsKKwl0b3RhbCA9IGlvcmVhZDMyYmUocHJpdi0+cmVncyArIEZQR0FfQ09ORklHX1RPVEFMX0JZVEVfQ09VTlQpOworCWN1cnIgPSBpb3JlYWQzMmJlKHByaXYtPnJlZ3MgKyBGUEdBX0NPTkZJR19DVVJfQllURV9DT1VOVCk7CisKKwlkZXZfZXJyKHByaXYtPmRldiwgIkNvbmZpZ3VyYXRpb24gZmFpbGVkLCBkdW1waW5nIHN0YXR1cyByZWdpc3RlcnNcbiIpOworCWRldl9lcnIocHJpdi0+ZGV2LCAiQ29udHJvbDogICAgMHglLjh4XG4iLCBjb250cm9sKTsKKwlkZXZfZXJyKHByaXYtPmRldiwgIlN0YXR1czogICAgIDB4JS44eFxuIiwgc3RhdHVzKTsKKwlkZXZfZXJyKHByaXYtPmRldiwgIkZJRk8gU2l6ZTogIDB4JS44eFxuIiwgc2l6ZSk7CisJZGV2X2Vycihwcml2LT5kZXYsICJGSUZPIFVzZWQ6ICAweCUuOHhcbiIsIHVzZWQpOworCWRldl9lcnIocHJpdi0+ZGV2LCAiRklGTyBUb3RhbDogMHglLjh4XG4iLCB0b3RhbCk7CisJZGV2X2Vycihwcml2LT5kZXYsICJGSUZPIEN1cnI6ICAweCUuOHhcbiIsIGN1cnIpOworfQorCisvKgorICogRlBHQSBQb3dlciBTdXBwbHkgQ29kZQorICovCisKKyNkZWZpbmUgQ1RMX1BXUl9DT05UUk9MCQkweDIwMDYKKyNkZWZpbmUgQ1RMX1BXUl9TVEFUVVMJCTB4MjAwQQorI2RlZmluZSBDVExfUFdSX0ZBSUwJCTB4MjAwQgorCisjZGVmaW5lIFBXUl9DT05UUk9MX0VOQUJMRQkweDAxCisKKyNkZWZpbmUgUFdSX1NUQVRVU19FUlJPUl9NQVNLCTB4MTAKKyNkZWZpbmUgUFdSX1NUQVRVU19HT09ECQkweDBmCisKKy8qCisgKiBEZXRlcm1pbmUgaWYgdGhlIEZQR0EgcG93ZXIgaXMgZ29vZCBmb3IgYWxsIHN1cHBsaWVzCisgKi8KK3N0YXRpYyBib29sIGZwZ2FfcG93ZXJfZ29vZChzdHJ1Y3QgZnBnYV9kZXYgKnByaXYpCit7CisJdTggdmFsOworCisJdmFsID0gaW9yZWFkOChwcml2LT5yZWdzICsgQ1RMX1BXUl9TVEFUVVMpOworCWlmICh2YWwgJiBQV1JfU1RBVFVTX0VSUk9SX01BU0spCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB2YWwgPT0gUFdSX1NUQVRVU19HT09EOworfQorCisvKgorICogRGlzYWJsZSB0aGUgRlBHQSBwb3dlciBzdXBwbGllcworICovCitzdGF0aWMgdm9pZCBmcGdhX2Rpc2FibGVfcG93ZXJfc3VwcGxpZXMoc3RydWN0IGZwZ2FfZGV2ICpwcml2KQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJdTggdmFsOworCisJaW93cml0ZTgoMHgwLCBwcml2LT5yZWdzICsgQ1RMX1BXUl9DT05UUk9MKTsKKworCS8qCisJICogV2FpdCA1MDBtcyBmb3IgdGhlIHBvd2VyIHJhaWxzIHRvIGRpc2NoYXJnZQorCSAqCisJICogV2l0aG91dCB0aGlzIGRlbGF5LCB0aGUgQ1RMLUNQTEQgc3RhdGUgbWFjaGluZSBjYW4gZ2V0IGludG8gYQorCSAqIHN0YXRlIHdoZXJlIGl0IGlzIHdhaXRpbmcgZm9yIHRoZSBwb3dlci1nb29kcyB0byBhc3NlcnQsIGJ1dCB0aGV5CisJICogbmV2ZXIgZG8uIFRoaXMgb25seSBoYXBwZW5zIHdoZW4gZW5hYmxpbmcgYW5kIGRpc2FibGluZyB0aGUKKwkgKiBwb3dlciBzZXF1ZW5jZXIgdmVyeSByYXBpZGx5LgorCSAqCisJICogVGhlIGxvb3AgYmVsb3cgd2lsbCBhbHNvIHdhaXQgZm9yIHRoZSBwb3dlciBnb29kcyB0byBkZS1hc3NlcnQsCisJICogYnV0IHRlc3RpbmcgaGFzIHNob3duIHRoYXQgdGhleSBhcmUgYWx3YXlzIGRpc2FibGVkIGJ5IHRoZSB0aW1lCisJICogdGhlIHNsZWVwIGNvbXBsZXRlcy4gSG93ZXZlciwgb21pdHRpbmcgdGhlIHNsZWVwIGFuZCBvbmx5IHdhaXRpbmcKKwkgKiBmb3IgdGhlIHBvd2VyLWdvb2RzIHRvIGRlLWFzc2VydCB3YXMgbm90IHN1ZmZpY2llbnQgdG8gZW5zdXJlCisJICogdGhhdCB0aGUgcG93ZXIgc2VxdWVuY2VyIHdvdWxkIG5vdCB3ZWRnZSBpdHNlbGYuCisJICovCisJbXNsZWVwKDUwMCk7CisKKwlzdGFydCA9IGppZmZpZXM7CisJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHN0YXJ0ICsgSFopKSB7CisJCXZhbCA9IGlvcmVhZDgocHJpdi0+cmVncyArIENUTF9QV1JfU1RBVFVTKTsKKwkJaWYgKCEodmFsICYgUFdSX1NUQVRVU19HT09EKSkKKwkJCWJyZWFrOworCisJCXVzbGVlcF9yYW5nZSg1MDAwLCAxMDAwMCk7CisJfQorCisJdmFsID0gaW9yZWFkOChwcml2LT5yZWdzICsgQ1RMX1BXUl9TVEFUVVMpOworCWlmICh2YWwgJiBQV1JfU1RBVFVTX0dPT0QpIHsKKwkJZGV2X2Vycihwcml2LT5kZXYsICJwb3dlciBkaXNhYmxlIGZhaWxlZDogIgorCQkJCSAgICJwb3dlciBnb29kczogc3RhdHVzIDB4JS4yeFxuIiwgdmFsKTsKKwl9CisKKwlpZiAodmFsICYgUFdSX1NUQVRVU19FUlJPUl9NQVNLKSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAicG93ZXIgZGlzYWJsZSBmYWlsZWQ6ICIKKwkJCQkgICAiYWxhcm0gYml0IHNldDogc3RhdHVzIDB4JS4yeFxuIiwgdmFsKTsKKwl9Cit9CisKKy8qKgorICogZnBnYV9lbmFibGVfcG93ZXJfc3VwcGxpZXMoKSAtIGVuYWJsZSB0aGUgREFUQS1GUEdBIHBvd2VyIHN1cHBsaWVzCisgKiBAcHJpdjogdGhlIGRyaXZlcidzIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUKKyAqCisgKiBFbmFibGUgdGhlIERBVEEtRlBHQSBwb3dlciBzdXBwbGllcywgd2FpdGluZyB1cCB0byAxIHNlY29uZCBmb3IKKyAqIHRoZW0gdG8gZW5hYmxlIHN1Y2Nlc3NmdWxseS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVSUk5PIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IGZwZ2FfZW5hYmxlX3Bvd2VyX3N1cHBsaWVzKHN0cnVjdCBmcGdhX2RldiAqcHJpdikKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gamlmZmllczsKKworCWlmIChmcGdhX3Bvd2VyX2dvb2QocHJpdikpIHsKKwkJZGV2X2RiZyhwcml2LT5kZXYsICJwb3dlciB3YXMgYWxyZWFkeSBnb29kXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaW93cml0ZTgoUFdSX0NPTlRST0xfRU5BQkxFLCBwcml2LT5yZWdzICsgQ1RMX1BXUl9DT05UUk9MKTsKKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgc3RhcnQgKyBIWikpIHsKKwkJaWYgKGZwZ2FfcG93ZXJfZ29vZChwcml2KSkKKwkJCXJldHVybiAwOworCisJCXVzbGVlcF9yYW5nZSg1MDAwLCAxMDAwMCk7CisJfQorCisJcmV0dXJuIGZwZ2FfcG93ZXJfZ29vZChwcml2KSA/IDAgOiAtRVRJTUVET1VUOworfQorCisvKgorICogRGV0ZXJtaW5lIGlmIHRoZSBGUEdBIHBvd2VyIHN1cHBsaWVzIGFyZSBhbGwgZW5hYmxlZAorICovCitzdGF0aWMgYm9vbCBmcGdhX3Bvd2VyX2VuYWJsZWQoc3RydWN0IGZwZ2FfZGV2ICpwcml2KQoreworCXU4IHZhbDsKKworCXZhbCA9IGlvcmVhZDgocHJpdi0+cmVncyArIENUTF9QV1JfQ09OVFJPTCk7CisJaWYgKHZhbCAmIFBXUl9DT05UUk9MX0VOQUJMRSkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBEZXRlcm1pbmUgaWYgdGhlIEZQR0EncyBhcmUgcHJvZ3JhbW1lZCBhbmQgcnVubmluZyBjb3JyZWN0bHkKKyAqLworc3RhdGljIGJvb2wgZnBnYV9ydW5uaW5nKHN0cnVjdCBmcGdhX2RldiAqcHJpdikKK3sKKwlpZiAoIWZwZ2FfcG93ZXJfZ29vZChwcml2KSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogQ2hlY2sgdGhlIGNvbmZpZyBkb25lIGJpdCAqLworCXJldHVybiBpb3JlYWQzMmJlKHByaXYtPnJlZ3MgKyBGUEdBX0NPTkZJR19TVEFUVVMpICYgKDEgPDwgMTgpOworfQorCisvKgorICogRlBHQSBQcm9ncmFtbWluZyBDb2RlCisgKi8KKworLyoqCisgKiBmcGdhX3Byb2dyYW1fYmxvY2soKSAtIHB1dCBhIGJsb2NrIG9mIGRhdGEgaW50byB0aGUgcHJvZ3JhbW1lcidzIEZJRk8KKyAqIEBwcml2OiB0aGUgZHJpdmVyJ3MgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZQorICogQGJ1ZjogdGhlIGRhdGEgdG8gcHJvZ3JhbQorICogQGNvdW50OiB0aGUgbGVuZ3RoIG9mIGRhdGEgdG8gcHJvZ3JhbSAobXVzdCBiZSBhIG11bHRpcGxlIG9mIDQgYnl0ZXMpCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FUlJOTyBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCBmcGdhX3Byb2dyYW1fYmxvY2soc3RydWN0IGZwZ2FfZGV2ICpwcml2LCB2b2lkICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwl1MzIgKmRhdGEgPSBidWY7CisJaW50IHNpemUgPSBmcGdhX2ZpZm9fc2l6ZShwcml2LT5yZWdzKTsKKwlpbnQgaSwgbGVuOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKworCS8qIGVuZm9yY2UgY29ycmVjdCBkYXRhIGxlbmd0aCBmb3IgdGhlIEZJRk8gKi8KKwlCVUdfT04oY291bnQgJSA0ICE9IDApOworCisJd2hpbGUgKGNvdW50ID4gMCkgeworCisJCS8qIEdldCB0aGUgc2l6ZSBvZiB0aGUgYmxvY2sgdG8gd3JpdGUgKG1heGltdW0gaXMgRklGT19TSVpFKSAqLworCQlsZW4gPSBtaW5fdChzaXplX3QsIGNvdW50LCBzaXplKTsKKwkJdGltZW91dCA9IGppZmZpZXMgKyBIWiAvIDQ7CisKKwkJLyogV3JpdGUgdGhlIGJsb2NrICovCisJCWZvciAoaSA9IDA7IGkgPCBsZW4gLyA0OyBpKyspCisJCQlmcGdhX2ZpZm9fd3JpdGUocHJpdi0+cmVncywgZGF0YVtpXSk7CisKKwkJLyogVXBkYXRlIHRoZSBhbW91bnRzIGxlZnQgKi8KKwkJY291bnQgLT0gbGVuOworCQlkYXRhICs9IGxlbiAvIDQ7CisKKwkJLyogV2FpdCBmb3IgdGhlIGZpZm8gdG8gZW1wdHkgKi8KKwkJd2hpbGUgKHRydWUpIHsKKworCQkJaWYgKGZwZ2FfZmlmb19lbXB0eShwcml2LT5yZWdzKSkgeworCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQlkZXZfZGJnKHByaXYtPmRldiwgIkZpZm8gbm90IGVtcHR5XG4iKTsKKwkJCQljcHVfcmVsYXgoKTsKKwkJCX0KKworCQkJaWYgKGZwZ2FfY29uZmlnX2Vycm9yKHByaXYtPnJlZ3MpKSB7CisJCQkJZGV2X2Vycihwcml2LT5kZXYsICJFcnJvciBkZXRlY3RlZFxuIik7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisKKwkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQkJZGV2X2Vycihwcml2LT5kZXYsICJGaWZvIGRyYWluIHRpbWVvdXRcbiIpOworCQkJCXJldHVybiAtRVRJTUVET1VUOworCQkJfQorCisJCQl1c2xlZXBfcmFuZ2UoNTAwMCwgMTAwMDApOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZnBnYV9wcm9ncmFtX2NwdSgpIC0gcHJvZ3JhbSB0aGUgREFUQS1GUEdBJ3MgdXNpbmcgdGhlIENQVQorICogQHByaXY6IHRoZSBkcml2ZXIncyBwcml2YXRlIGRhdGEgc3RydWN0dXJlCisgKgorICogVGhpcyBpcyB1c2VmdWwgd2hlbiB0aGUgRE1BIHByb2dyYW1taW5nIG1ldGhvZCBmYWlscy4gSXQgaXMgcG9zc2libGUgdG8KKyAqIHdlZGdlIHRoZSBGcmVlc2NhbGUgRE1BIGNvbnRyb2xsZXIgc3VjaCB0aGF0IHRoZSBETUEgcHJvZ3JhbW1pbmcgbWV0aG9kCisgKiBhbHdheXMgZmFpbHMuIFRoaXMgbWV0aG9kIGhhcyBhbHdheXMgc3VjY2VlZGVkLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRVJSTk8gb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBub2lubGluZSBpbnQgZnBnYV9wcm9ncmFtX2NwdShzdHJ1Y3QgZnBnYV9kZXYgKnByaXYpCit7CisJaW50IHJldDsKKworCS8qIERpc2FibGUgdGhlIHByb2dyYW1tZXIgKi8KKwlmcGdhX3Byb2dyYW1tZXJfZGlzYWJsZShwcml2KTsKKworCS8qIFNldCB0aGUgdG90YWwgYnl0ZSBjb3VudCAqLworCWZwZ2Ffc2V0X2J5dGVfY291bnQocHJpdi0+cmVncywgcHJpdi0+Ynl0ZXMpOworCWRldl9kYmcocHJpdi0+ZGV2LCAidG90YWwgYnl0ZSBjb3VudCAldSBieXRlc1xuIiwgcHJpdi0+Ynl0ZXMpOworCisJLyogRW5hYmxlIHRoZSBjb250cm9sbGVyIGZvciBwcm9ncmFtbWluZyAqLworCWZwZ2FfcHJvZ3JhbW1lcl9lbmFibGUocHJpdiwgZmFsc2UpOworCWRldl9kYmcocHJpdi0+ZGV2LCAiZW5hYmxlZCB0aGUgY29udHJvbGxlclxuIik7CisKKwkvKiBXcml0ZSBlYWNoIGNodW5rIG9mIHRoZSBGUEdBIGJpdGZpbGUgdG8gRlBHQSBwcm9ncmFtbWVyICovCisJcmV0ID0gZnBnYV9wcm9ncmFtX2Jsb2NrKHByaXYsIHByaXYtPnZiLnZhZGRyLCBwcml2LT5ieXRlcyk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZGlzYWJsZV9jb250cm9sbGVyOworCisJLyogV2FpdCBmb3IgdGhlIGludGVycnVwdCBoYW5kbGVyIHRvIHNpZ25hbCB0aGF0IHByb2dyYW1taW5nIGZpbmlzaGVkICovCisJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZwcml2LT5jb21wbGV0aW9uLCAyICogSFopOworCWlmICghcmV0KSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIGNvbXBsZXRpb25cbiIpOworCQlyZXQgPSAtRVRJTUVET1VUOworCQlnb3RvIG91dF9kaXNhYmxlX2NvbnRyb2xsZXI7CisJfQorCisJLyogUmV0cmlldmUgdGhlIHN0YXR1cyBmcm9tIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciAqLworCXJldCA9IHByaXYtPnN0YXR1czsKKworb3V0X2Rpc2FibGVfY29udHJvbGxlcjoKKwlmcGdhX3Byb2dyYW1tZXJfZGlzYWJsZShwcml2KTsKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIEZJRk9fRE1BX0FERFJFU1MJMHhmMDAwMzAwMAorI2RlZmluZSBGSUZPX01BWF9MRU4JCTQwOTYKKworLyoqCisgKiBmcGdhX3Byb2dyYW1fZG1hKCkgLSBwcm9ncmFtIHRoZSBEQVRBLUZQR0EncyB1c2luZyB0aGUgRE1BIGVuZ2luZQorICogQHByaXY6IHRoZSBkcml2ZXIncyBwcml2YXRlIGRhdGEgc3RydWN0dXJlCisgKgorICogUHJvZ3JhbSB0aGUgREFUQS1GUEdBJ3MgdXNpbmcgdGhlIEZyZWVzY2FsZSBETUEgZW5naW5lLiBUaGlzIHJlcXVpcmVzIHRoYXQKKyAqIHRoZSBlbmdpbmUgaXMgcHJvZ3JhbW1lZCBzdWNoIHRoYXQgdGhlIGhhcmR3YXJlIERNQSByZXF1ZXN0IGxpbmVzIGNhbgorICogY29udHJvbCB0aGUgZW50aXJlIERNQSB0cmFuc2FjdGlvbi4gVGhlIHN5c3RlbSBjb250cm9sbGVyIEZQR0EgdGhlbgorICogY29tcGxldGVseSBvZmZsb2FkcyB0aGUgcHJvZ3JhbW1pbmcgZnJvbSB0aGUgQ1BVLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRVJSTk8gb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBub2lubGluZSBpbnQgZnBnYV9wcm9ncmFtX2RtYShzdHJ1Y3QgZnBnYV9kZXYgKnByaXYpCit7CisJc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqdmIgPSAmcHJpdi0+dmI7CisJc3RydWN0IGRtYV9jaGFuICpjaGFuID0gcHJpdi0+Y2hhbjsKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4OworCXNpemVfdCBudW1fcGFnZXMsIGxlbiwgYXZhaWwgPSAwOworCXN0cnVjdCBkbWFfc2xhdmVfY29uZmlnIGNvbmZpZzsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXN0cnVjdCBzZ190YWJsZSB0YWJsZTsKKwlkbWFfY29va2llX3QgY29va2llOworCWludCByZXQsIGk7CisKKwkvKiBEaXNhYmxlIHRoZSBwcm9ncmFtbWVyICovCisJZnBnYV9wcm9ncmFtbWVyX2Rpc2FibGUocHJpdik7CisKKwkvKiBBbGxvY2F0ZSBhIHNjYXR0ZXJsaXN0IGZvciB0aGUgRE1BIGRlc3RpbmF0aW9uICovCisJbnVtX3BhZ2VzID0gRElWX1JPVU5EX1VQKHByaXYtPmJ5dGVzLCBGSUZPX01BWF9MRU4pOworCXJldCA9IHNnX2FsbG9jX3RhYmxlKCZ0YWJsZSwgbnVtX3BhZ2VzLCBHRlBfS0VSTkVMKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAiVW5hYmxlIHRvIGFsbG9jYXRlIGRzdCBzY2F0dGVybGlzdFxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3JldHVybjsKKwl9CisKKwkvKgorCSAqIFRoaXMgaXMgYW4gdWdseSBoYWNrCisJICoKKwkgKiBXZSBmaWxsIGluIGEgc2NhdHRlcmxpc3QgYXMgaWYgaXQgd2VyZSBtYXBwZWQgZm9yIERNQS4gVGhpcyBpcworCSAqIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZXJlIGV4aXN0cyBubyBiZXR0ZXIgc3RydWN0dXJlIGZvciB0aGlzCisJICogaW5zaWRlIHRoZSBrZXJuZWwgY29kZS4KKwkgKgorCSAqIEFzIGFuIGFkZGVkIGJvbnVzLCB3ZSBjYW4gdXNlIHRoZSBETUFFbmdpbmUgQVBJIGZvciBhbGwgb2YgdGhpcywKKwkgKiByYXRoZXIgdGhhbiBpbnZlbnRpbmcgYW5vdGhlciBleHRyZW1lbHkgc2ltaWxhciBBUEkuCisJICovCisJYXZhaWwgPSBwcml2LT5ieXRlczsKKwlmb3JfZWFjaF9zZyh0YWJsZS5zZ2wsIHNnLCBudW1fcGFnZXMsIGkpIHsKKwkJbGVuID0gbWluX3Qoc2l6ZV90LCBhdmFpbCwgRklGT19NQVhfTEVOKTsKKwkJc2dfZG1hX2FkZHJlc3Moc2cpID0gRklGT19ETUFfQUREUkVTUzsKKwkJc2dfZG1hX2xlbihzZykgPSBsZW47CisKKwkJYXZhaWwgLT0gbGVuOworCX0KKworCS8qIE1hcCB0aGUgYnVmZmVyIGZvciBETUEgKi8KKwlyZXQgPSB2aWRlb2J1Zl9kbWFfbWFwKHByaXYtPmRldiwgJnByaXYtPnZiKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAiVW5hYmxlIHRvIG1hcCBidWZmZXIgZm9yIERNQVxuIik7CisJCWdvdG8gb3V0X2ZyZWVfdGFibGU7CisJfQorCisJLyoKKwkgKiBDb25maWd1cmUgdGhlIERNQSBjaGFubmVsIHRvIHRyYW5zZmVyIEZJRk9fU0laRSAvIDIgYnl0ZXMgcGVyCisJICogdHJhbnNhY3Rpb24sIGFuZCB0aGVuIHB1dCBpdCB1bmRlciBleHRlcm5hbCBjb250cm9sCisJICovCisJbWVtc2V0KCZjb25maWcsIDAsIHNpemVvZihjb25maWcpKTsKKwljb25maWcuZGlyZWN0aW9uID0gRE1BX1RPX0RFVklDRTsKKwljb25maWcuZHN0X2FkZHJfd2lkdGggPSBETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUzsKKwljb25maWcuZHN0X21heGJ1cnN0ID0gZnBnYV9maWZvX3NpemUocHJpdi0+cmVncykgLyAyIC8gNDsKKwlyZXQgPSBjaGFuLT5kZXZpY2UtPmRldmljZV9jb250cm9sKGNoYW4sIERNQV9TTEFWRV9DT05GSUcsCisJCQkJCSAgICh1bnNpZ25lZCBsb25nKSZjb25maWcpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihwcml2LT5kZXYsICJETUEgc2xhdmUgY29uZmlndXJhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIG91dF9kbWFfdW5tYXA7CisJfQorCisJcmV0ID0gY2hhbi0+ZGV2aWNlLT5kZXZpY2VfY29udHJvbChjaGFuLCBGU0xETUFfRVhURVJOQUxfU1RBUlQsIDEpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihwcml2LT5kZXYsICJETUEgZXh0ZXJuYWwgY29udHJvbCBzZXR1cCBmYWlsZWRcbiIpOworCQlnb3RvIG91dF9kbWFfdW5tYXA7CisJfQorCisJLyogc2V0dXAgYW5kIHN1Ym1pdCB0aGUgRE1BIHRyYW5zYWN0aW9uICovCisJdHggPSBjaGFuLT5kZXZpY2UtPmRldmljZV9wcmVwX2RtYV9zZyhjaGFuLAorCQkJCQkgICAgICB0YWJsZS5zZ2wsIG51bV9wYWdlcywKKwkJCQkJICAgICAgdmItPnNnbGlzdCwgdmItPnNnbGVuLCAwKTsKKwlpZiAoIXR4KSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAiVW5hYmxlIHRvIHByZXAgRE1BIHRyYW5zYWN0aW9uXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfZG1hX3VubWFwOworCX0KKworCWNvb2tpZSA9IHR4LT50eF9zdWJtaXQodHgpOworCWlmIChkbWFfc3VibWl0X2Vycm9yKGNvb2tpZSkpIHsKKwkJZGV2X2Vycihwcml2LT5kZXYsICJVbmFibGUgdG8gc3VibWl0IERNQSB0cmFuc2FjdGlvblxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2RtYV91bm1hcDsKKwl9CisKKwlkbWFfYXN5bmNfbWVtY3B5X2lzc3VlX3BlbmRpbmcoY2hhbik7CisKKwkvKiBTZXQgdGhlIHRvdGFsIGJ5dGUgY291bnQgKi8KKwlmcGdhX3NldF9ieXRlX2NvdW50KHByaXYtPnJlZ3MsIHByaXYtPmJ5dGVzKTsKKwlkZXZfZGJnKHByaXYtPmRldiwgInRvdGFsIGJ5dGUgY291bnQgJXUgYnl0ZXNcbiIsIHByaXYtPmJ5dGVzKTsKKworCS8qIEVuYWJsZSB0aGUgY29udHJvbGxlciBmb3IgRE1BIHByb2dyYW1taW5nICovCisJZnBnYV9wcm9ncmFtbWVyX2VuYWJsZShwcml2LCB0cnVlKTsKKwlkZXZfZGJnKHByaXYtPmRldiwgImVuYWJsZWQgdGhlIGNvbnRyb2xsZXJcbiIpOworCisJLyogV2FpdCBmb3IgdGhlIGludGVycnVwdCBoYW5kbGVyIHRvIHNpZ25hbCB0aGF0IHByb2dyYW1taW5nIGZpbmlzaGVkICovCisJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZwcml2LT5jb21wbGV0aW9uLCAyICogSFopOworCWlmICghcmV0KSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIGNvbXBsZXRpb25cbiIpOworCQlyZXQgPSAtRVRJTUVET1VUOworCQlnb3RvIG91dF9kaXNhYmxlX2NvbnRyb2xsZXI7CisJfQorCisJLyogUmV0cmlldmUgdGhlIHN0YXR1cyBmcm9tIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciAqLworCXJldCA9IHByaXYtPnN0YXR1czsKKworb3V0X2Rpc2FibGVfY29udHJvbGxlcjoKKwlmcGdhX3Byb2dyYW1tZXJfZGlzYWJsZShwcml2KTsKK291dF9kbWFfdW5tYXA6CisJdmlkZW9idWZfZG1hX3VubWFwKHByaXYtPmRldiwgdmIpOworb3V0X2ZyZWVfdGFibGU6CisJc2dfZnJlZV90YWJsZSgmdGFibGUpOworb3V0X3JldHVybjoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogSW50ZXJydXB0IEhhbmRsaW5nCisgKi8KKworc3RhdGljIGlycXJldHVybl90IGZwZ2FfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgZnBnYV9kZXYgKnByaXYgPSBkZXZfaWQ7CisKKwkvKiBTYXZlIHRoZSBzdGF0dXMgKi8KKwlwcml2LT5zdGF0dXMgPSBmcGdhX2NvbmZpZ19lcnJvcihwcml2LT5yZWdzKSA/IC1FSU8gOiAwOworCWRldl9kYmcocHJpdi0+ZGV2LCAiSU5URVJSVVBUIHN0YXR1cyAlZFxuIiwgcHJpdi0+c3RhdHVzKTsKKwlmcGdhX2R1bXBfcmVnaXN0ZXJzKHByaXYpOworCisJLyogRGlzYWJsaW5nIHRoZSBwcm9ncmFtbWVyIGNsZWFycyB0aGUgaW50ZXJydXB0ICovCisJZnBnYV9wcm9ncmFtbWVyX2Rpc2FibGUocHJpdik7CisKKwkvKiBOb3RpZnkgYW55IHdhaXRlcnMgKi8KKwljb21wbGV0ZSgmcHJpdi0+Y29tcGxldGlvbik7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCisgKiBTWVNGUyBIZWxwZXJzCisgKi8KKworLyoqCisgKiBmcGdhX2RvX3N0b3AoKSAtIGRlY29uZmlndXJlIChyZXNldCkgdGhlIERBVEEtRlBHQSdzCisgKiBAcHJpdjogdGhlIGRyaXZlcidzIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUKKyAqCisgKiBMT0NLSU5HOiBtdXN0IGhvbGQgcHJpdi0+bG9jaworICovCitzdGF0aWMgaW50IGZwZ2FfZG9fc3RvcChzdHJ1Y3QgZnBnYV9kZXYgKnByaXYpCit7CisJdTMyIHZhbDsKKworCS8qIFNldCB0aGUgbGVkIHRvIHVucHJvZ3JhbW1lZCAqLworCWxlZHRyaWdfZnBnYV9wcm9ncmFtbWVkKGZhbHNlKTsKKworCS8qIFB1bHNlIHRoZSBjb25maWcgbGluZSB0byByZXNldCB0aGUgRlBHQSdzICovCisJdmFsID0gQ0ZHX0NUTF9FTkFCTEUgfCBDRkdfQ1RMX1JFU0VUOworCWlvd3JpdGUzMmJlKHZhbCwgcHJpdi0+cmVncyArIEZQR0FfQ09ORklHX0NPTlRST0wpOworCWlvd3JpdGUzMmJlKDB4MCwgcHJpdi0+cmVncyArIEZQR0FfQ09ORklHX0NPTlRST0wpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBub2lubGluZSBpbnQgZnBnYV9kb19wcm9ncmFtKHN0cnVjdCBmcGdhX2RldiAqcHJpdikKK3sKKwlpbnQgcmV0OworCisJaWYgKHByaXYtPmJ5dGVzICE9IHByaXYtPmZ3X3NpemUpIHsKKwkJZGV2X2Vycihwcml2LT5kZXYsICJJbmNvcnJlY3QgYml0ZmlsZSBzaXplOiBnb3QgJXp1IGJ5dGVzLCAiCisJCQkJICAgInNob3VsZCBiZSAlenUgYnl0ZXNcbiIsCisJCQkJICAgcHJpdi0+Ynl0ZXMsIHByaXYtPmZ3X3NpemUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWZwZ2FfcG93ZXJfZW5hYmxlZChwcml2KSkgeworCQlkZXZfZXJyKHByaXYtPmRldiwgIlBvd2VyIG5vdCBlbmFibGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFmcGdhX3Bvd2VyX2dvb2QocHJpdikpIHsKKwkJZGV2X2Vycihwcml2LT5kZXYsICJQb3dlciBub3QgZ29vZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFNldCB0aGUgTEVEIHRvIHVucHJvZ3JhbW1lZCAqLworCWxlZHRyaWdfZnBnYV9wcm9ncmFtbWVkKGZhbHNlKTsKKworCS8qIFRyeSB0byBwcm9ncmFtIHRoZSBGUEdBJ3MgdXNpbmcgRE1BICovCisJcmV0ID0gZnBnYV9wcm9ncmFtX2RtYShwcml2KTsKKworCS8qIElmIERNQSBmYWlsZWQgb3IgZG9lc24ndCBleGlzdCwgdHJ5IHdpdGggQ1BVICovCisJaWYgKHJldCkgeworCQlkZXZfd2Fybihwcml2LT5kZXYsICJGYWxsaW5nIGJhY2sgdG8gQ1BVIHByb2dyYW1taW5nXG4iKTsKKwkJcmV0ID0gZnBnYV9wcm9ncmFtX2NwdShwcml2KTsKKwl9CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAiVW5hYmxlIHRvIHByb2dyYW0gRlBHQSdzXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBEcm9wIHRoZSBmaXJtd2FyZSBiaXRmaWxlIGZyb20gbWVtb3J5ICovCisJZnBnYV9kcm9wX2Zpcm13YXJlX2RhdGEocHJpdik7CisKKwlkZXZfZGJnKHByaXYtPmRldiwgIkZQR0EgcHJvZ3JhbW1pbmcgc3VjY2Vzc2Z1bFxuIik7CisJbGVkdHJpZ19mcGdhX3Byb2dyYW1tZWQodHJ1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZpbGUgT3BlcmF0aW9ucworICovCisKK3N0YXRpYyBpbnQgZnBnYV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCS8qCisJICogVGhlIG1pc2NkZXZpY2UgbGF5ZXIgcHV0cyBvdXIgc3RydWN0IG1pc2NkZXZpY2UgaW50byB0aGUKKwkgKiBmaWxwLT5wcml2YXRlX2RhdGEgZmllbGQuIFdlIHVzZSB0aGlzIHRvIGZpbmQgb3VyIHByaXZhdGUKKwkgKiBkYXRhIGFuZCB0aGVuIG92ZXJ3cml0ZSBpdCB3aXRoIG91ciBvd24gcHJpdmF0ZSBzdHJ1Y3R1cmUuCisJICovCisJc3RydWN0IGZwZ2FfZGV2ICpwcml2ID0gY29udGFpbmVyX29mKGZpbHAtPnByaXZhdGVfZGF0YSwKKwkJCQkJICAgICBzdHJ1Y3QgZnBnYV9kZXYsIG1pc2NkZXYpOworCXVuc2lnbmVkIGludCBucl9wYWdlczsKKwlpbnQgcmV0OworCisJLyogV2Ugb25seSBhbGxvdyBvbmUgcHJvY2VzcyBhdCBhIHRpbWUgKi8KKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnByaXYtPmxvY2spOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBwcml2OworCWtyZWZfZ2V0KCZwcml2LT5yZWYpOworCisJLyogVHJ1bmNhdGlvbjogZHJvcCBhbnkgZXhpc3RpbmcgZGF0YSAqLworCWlmIChmaWxwLT5mX2ZsYWdzICYgT19UUlVOQykKKwkJcHJpdi0+Ynl0ZXMgPSAwOworCisJLyogQ2hlY2sgaWYgd2UgaGF2ZSBhbHJlYWR5IGFsbG9jYXRlZCBhIGJ1ZmZlciAqLworCWlmIChwcml2LT52Yl9hbGxvY2F0ZWQpCisJCXJldHVybiAwOworCisJLyogQWxsb2NhdGUgYSBidWZmZXIgdG8gaG9sZCBlbm91Z2ggZGF0YSBmb3IgdGhlIGJpdGZpbGUgKi8KKwlucl9wYWdlcyA9IERJVl9ST1VORF9VUChwcml2LT5md19zaXplLCBQQUdFX1NJWkUpOworCXJldCA9IHZpZGVvYnVmX2RtYV9pbml0X2tlcm5lbCgmcHJpdi0+dmIsIERNQV9UT19ERVZJQ0UsIG5yX3BhZ2VzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAidW5hYmxlIHRvIGFsbG9jYXRlIGRhdGEgYnVmZmVyXG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKKwkJa3JlZl9wdXQoJnByaXYtPnJlZiwgZnBnYV9kZXZfcmVtb3ZlKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwcml2LT52Yl9hbGxvY2F0ZWQgPSB0cnVlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZwZ2FfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgZnBnYV9kZXYgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisKKwltdXRleF91bmxvY2soJnByaXYtPmxvY2spOworCWtyZWZfcHV0KCZwcml2LT5yZWYsIGZwZ2FfZGV2X3JlbW92ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGZwZ2Ffd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpmX3BvcykKK3sKKwlzdHJ1Y3QgZnBnYV9kZXYgKnByaXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisKKwkvKiBGUEdBIGJpdGZpbGVzIGhhdmUgYW4gZXhhY3Qgc2l6ZTogZGlzYWxsb3cgYW55dGhpbmcgZWxzZSAqLworCWlmIChwcml2LT5ieXRlcyA+PSBwcml2LT5md19zaXplKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWNvdW50ID0gbWluX3Qoc2l6ZV90LCBwcml2LT5md19zaXplIC0gcHJpdi0+Ynl0ZXMsIGNvdW50KTsKKwlpZiAoY29weV9mcm9tX3VzZXIocHJpdi0+dmIudmFkZHIgKyBwcml2LT5ieXRlcywgYnVmLCBjb3VudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJcHJpdi0+Ynl0ZXMgKz0gY291bnQ7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBmcGdhX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwKKwkJCSBsb2ZmX3QgKmZfcG9zKQoreworCXN0cnVjdCBmcGdhX2RldiAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKworCWNvdW50ID0gbWluX3Qoc2l6ZV90LCBwcml2LT5ieXRlcyAtICpmX3BvcywgY291bnQpOworCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBwcml2LT52Yi52YWRkciArICpmX3BvcywgY291bnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCSpmX3BvcyArPSBjb3VudDsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBsb2ZmX3QgZnBnYV9sbHNlZWsoc3RydWN0IGZpbGUgKmZpbHAsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnaW4pCit7CisJc3RydWN0IGZwZ2FfZGV2ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWxvZmZfdCBuZXdwb3M7CisKKwkvKiBvbmx5IHJlYWQtb25seSBvcGVucyBhcmUgYWxsb3dlZCB0byBzZWVrICovCisJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19BQ0NNT0RFKSAhPSBPX1JET05MWSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKG9yaWdpbikgeworCWNhc2UgU0VFS19TRVQ6IC8qIHNlZWsgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSAqLworCQluZXdwb3MgPSBvZmZzZXQ7CisJCWJyZWFrOworCWNhc2UgU0VFS19DVVI6IC8qIHNlZWsgcmVsYXRpdmUgdG8gY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgZmlsZSAqLworCQluZXdwb3MgPSBmaWxwLT5mX3BvcyArIG9mZnNldDsKKwkJYnJlYWs7CisJY2FzZSBTRUVLX0VORDogLyogc2VlayByZWxhdGl2ZSB0byB0aGUgZW5kIG9mIHRoZSBmaWxlICovCisJCW5ld3BvcyA9IHByaXYtPmZ3X3NpemUgLSBvZmZzZXQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGNoZWNrIGZvciBzYW5pdHkgKi8KKwlpZiAobmV3cG9zID4gcHJpdi0+Zndfc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmaWxwLT5mX3BvcyA9IG5ld3BvczsKKwlyZXR1cm4gbmV3cG9zOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmcGdhX2ZvcHMgPSB7CisJLm9wZW4JCT0gZnBnYV9vcGVuLAorCS5yZWxlYXNlCT0gZnBnYV9yZWxlYXNlLAorCS53cml0ZQkJPSBmcGdhX3dyaXRlLAorCS5yZWFkCQk9IGZwZ2FfcmVhZCwKKwkubGxzZWVrCQk9IGZwZ2FfbGxzZWVrLAorfTsKKworLyoKKyAqIERldmljZSBBdHRyaWJ1dGVzCisgKi8KKworc3RhdGljIHNzaXplX3QgcGZhaWxfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjaGFyICpidWYpCit7CisJc3RydWN0IGZwZ2FfZGV2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdTggdmFsOworCisJdmFsID0gaW9yZWFkOChwcml2LT5yZWdzICsgQ1RMX1BXUl9GQUlMKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCUuMnhcbiIsIHZhbCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBnb29kX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY2hhciAqYnVmKQoreworCXN0cnVjdCBmcGdhX2RldiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBmcGdhX3Bvd2VyX2dvb2QocHJpdikpOworfQorCitzdGF0aWMgc3NpemVfdCBwZW5hYmxlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICBjaGFyICpidWYpCit7CisJc3RydWN0IGZwZ2FfZGV2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGZwZ2FfcG93ZXJfZW5hYmxlZChwcml2KSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBlbmFibGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGZwZ2FfZGV2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IHJldDsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDAsICZ2YWwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh2YWwpIHsKKwkJcmV0ID0gZnBnYV9lbmFibGVfcG93ZXJfc3VwcGxpZXMocHJpdik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0gZWxzZSB7CisJCWZwZ2FfZG9fc3RvcChwcml2KTsKKwkJZnBnYV9kaXNhYmxlX3Bvd2VyX3N1cHBsaWVzKHByaXYpOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgcHJvZ3JhbV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBmcGdhX2RldiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBmcGdhX3J1bm5pbmcocHJpdikpOworfQorCitzdGF0aWMgc3NpemVfdCBwcm9ncmFtX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBmcGdhX2RldiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCByZXQ7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBXZSBjYW4ndCBoYXZlIGFuIGltYWdlIHdyaXRlciBhbmQgYmUgcHJvZ3JhbW1pbmcgc2ltdWx0YW5lb3VzbHkgKi8KKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZwcml2LT5sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCS8qIFByb2dyYW0gb3IgUmVzZXQgdGhlIEZQR0EncyAqLworCXJldCA9IHZhbCA/IGZwZ2FfZG9fcHJvZ3JhbShwcml2KSA6IGZwZ2FfZG9fc3RvcChwcml2KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF91bmxvY2s7CisKKwkvKiBTdWNjZXNzICovCisJcmV0ID0gY291bnQ7CisKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIocG93ZXJfZmFpbCwgU19JUlVHTywgcGZhaWxfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIocG93ZXJfZ29vZCwgU19JUlVHTywgcGdvb2Rfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIocG93ZXJfZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgcGVuYWJsZV9zaG93LCBwZW5hYmxlX3N0b3JlKTsKKworc3RhdGljIERFVklDRV9BVFRSKHByb2dyYW0sIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICBwcm9ncmFtX3Nob3csIHByb2dyYW1fc3RvcmUpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZnBnYV9hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRyX3Bvd2VyX2ZhaWwuYXR0ciwKKwkmZGV2X2F0dHJfcG93ZXJfZ29vZC5hdHRyLAorCSZkZXZfYXR0cl9wb3dlcl9lbmFibGUuYXR0ciwKKwkmZGV2X2F0dHJfcHJvZ3JhbS5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBmcGdhX2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gZnBnYV9hdHRyaWJ1dGVzLAorfTsKKworLyoKKyAqIE9wZW5GaXJtd2FyZSBEZXZpY2UgU3Vic3lzdGVtCisgKi8KKworI2RlZmluZSBTWVNfUkVHX1ZFUlNJT04JCTB4MDAKKyNkZWZpbmUgU1lTX1JFR19HRU9HUkFQSElDCTB4MTAKKworc3RhdGljIGJvb2wgZG1hX2ZpbHRlcihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHZvaWQgKmRhdGEpCit7CisJLyoKKwkgKiBETUEgQ2hhbm5lbCAjMCBpcyB0aGUgb25seSBhY2NlcHRhYmxlIGRldmljZQorCSAqCisJICogVGhpcyBwcm9iYWJseSB3b24ndCBzdXJ2aXZlIGFuIHVubG9hZC9sb2FkIGN5Y2xlIG9mIHRoZSBGcmVlc2NhbGUKKwkgKiBETUFFbmdpbmUgZHJpdmVyLCBidXQgdGhhdCB3b24ndCBiZSBhIHByb2JsZW0KKwkgKi8KKwlyZXR1cm4gY2hhbi0+Y2hhbl9pZCA9PSAwICYmIGNoYW4tPmRldmljZS0+ZGV2X2lkID09IDA7Cit9CisKK3N0YXRpYyBpbnQgZnBnYV9vZl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3ApCit7CisJc3RydWN0IGZwZ2FfZGV2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZvcC0+ZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlICp0aGlzX2RldmljZSA9IHByaXYtPm1pc2NkZXYudGhpc19kZXZpY2U7CisKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnRoaXNfZGV2aWNlLT5rb2JqLCAmZnBnYV9hdHRyX2dyb3VwKTsKKwltaXNjX2RlcmVnaXN0ZXIoJnByaXYtPm1pc2NkZXYpOworCisJZnJlZV9pcnEocHJpdi0+aXJxLCBwcml2KTsKKwlpcnFfZGlzcG9zZV9tYXBwaW5nKHByaXYtPmlycSk7CisKKwkvKiBtYWtlIHN1cmUgdGhlIHBvd2VyIHN1cHBsaWVzIGFyZSBvZmYgKi8KKwlmcGdhX2Rpc2FibGVfcG93ZXJfc3VwcGxpZXMocHJpdik7CisKKwkvKiB1bm1hcCByZWdpc3RlcnMgKi8KKwlpb3VubWFwKHByaXYtPmltbXIpOworCWlvdW5tYXAocHJpdi0+cmVncyk7CisKKwlkbWFfcmVsZWFzZV9jaGFubmVsKHByaXYtPmNoYW4pOworCisJLyogZHJvcCBvdXIgcmVmZXJlbmNlIHRvIHRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlICovCisJa3JlZl9wdXQoJnByaXYtPnJlZiwgZnBnYV9kZXZfcmVtb3ZlKTsKKwlyZXR1cm4gMDsKK30KKworLyogQ1RMLUNQTEQgVmVyc2lvbiBSZWdpc3RlciAqLworI2RlZmluZSBDVExfQ1BMRF9WRVJTSU9OCTB4MjAwMAorCitzdGF0aWMgaW50IGZwZ2Ffb2ZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3AsCisJCQkgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlID0gb3AtPmRldi5vZl9ub2RlOworCXN0cnVjdCBkZXZpY2UgKnRoaXNfZGV2aWNlOworCXN0cnVjdCBmcGdhX2RldiAqcHJpdjsKKwlkbWFfY2FwX21hc2tfdCBtYXNrOworCXUzMiB2ZXI7CisJaW50IHJldDsKKworCS8qIEFsbG9jYXRlIHByaXZhdGUgZGF0YSAqLworCXByaXYgPSBremFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikgeworCQlkZXZfZXJyKCZvcC0+ZGV2LCAiVW5hYmxlIHRvIGFsbG9jYXRlIHByaXZhdGUgZGF0YVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3JldHVybjsKKwl9CisKKwkvKiBTZXR1cCB0aGUgbWlzY2RldmljZSAqLworCXByaXYtPm1pc2NkZXYubWlub3IgPSBNSVNDX0RZTkFNSUNfTUlOT1I7CisJcHJpdi0+bWlzY2Rldi5uYW1lID0gZHJ2X25hbWU7CisJcHJpdi0+bWlzY2Rldi5mb3BzID0gJmZwZ2FfZm9wczsKKworCWtyZWZfaW5pdCgmcHJpdi0+cmVmKTsKKworCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgcHJpdik7CisJcHJpdi0+ZGV2ID0gJm9wLT5kZXY7CisJbXV0ZXhfaW5pdCgmcHJpdi0+bG9jayk7CisJaW5pdF9jb21wbGV0aW9uKCZwcml2LT5jb21wbGV0aW9uKTsKKwl2aWRlb2J1Zl9kbWFfaW5pdCgmcHJpdi0+dmIpOworCisJZGV2X3NldF9kcnZkYXRhKHByaXYtPmRldiwgcHJpdik7CisJZG1hX2NhcF96ZXJvKG1hc2spOworCWRtYV9jYXBfc2V0KERNQV9NRU1DUFksIG1hc2spOworCWRtYV9jYXBfc2V0KERNQV9JTlRFUlJVUFQsIG1hc2spOworCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgbWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX1NHLCBtYXNrKTsKKworCS8qIEdldCBjb250cm9sIG9mIERNQSBjaGFubmVsICMwICovCisJcHJpdi0+Y2hhbiA9IGRtYV9yZXF1ZXN0X2NoYW5uZWwobWFzaywgZG1hX2ZpbHRlciwgTlVMTCk7CisJaWYgKCFwcml2LT5jaGFuKSB7CisJCWRldl9lcnIoJm9wLT5kZXYsICJVbmFibGUgdG8gYWNxdWlyZSBETUEgY2hhbm5lbCAjMFxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2ZyZWVfcHJpdjsKKwl9CisKKwkvKiBSZW1hcCB0aGUgcmVnaXN0ZXJzIGZvciB1c2UgKi8KKwlwcml2LT5yZWdzID0gb2ZfaW9tYXAob2Zfbm9kZSwgMCk7CisJaWYgKCFwcml2LT5yZWdzKSB7CisJCWRldl9lcnIoJm9wLT5kZXYsICJVbmFibGUgdG8gaW9yZW1hcCByZWdpc3RlcnNcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9kbWFfcmVsZWFzZV9jaGFubmVsOworCX0KKworCS8qIFJlbWFwIHRoZSBJTU1SIGZvciB1c2UgKi8KKwlwcml2LT5pbW1yID0gaW9yZW1hcChnZXRfaW1tcmJhc2UoKSwgMHgxMDAwMDApOworCWlmICghcHJpdi0+aW1tcikgeworCQlkZXZfZXJyKCZvcC0+ZGV2LCAiVW5hYmxlIHRvIGlvcmVtYXAgSU1NUlxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3VubWFwX3JlZ3M7CisJfQorCisJLyoKKwkgKiBDaGVjayB0aGF0IGV4dGVybmFsIERNQSBpcyBjb25maWd1cmVkCisJICoKKwkgKiBVLUJvb3QgZG9lcyB0aGlzIGZvciB1cywgYnV0IHdlIHNob3VsZCBjaGVjayBpdCBhbmQgYmFpbCBvdXQgaWYKKwkgKiB0aGVyZSBpcyBhIHByb2JsZW0uIEZhaWxpbmcgdG8gaGF2ZSB0aGlzIHJlZ2lzdGVyIHNldHVwIGNvcnJlY3RseQorCSAqIHdpbGwgY2F1c2UgdGhlIERNQSBjb250cm9sbGVyIHRvIHRyYW5zZmVyIGEgc2luZ2xlIGNhY2hlbGluZQorCSAqIHdvcnRoIG9mIGRhdGEsIHRoZW4gd2VkZ2UgaXRzZWxmLgorCSAqLworCWlmICgoaW9yZWFkMzJiZShwcml2LT5pbW1yICsgMHgxMTQpICYgMHhFMDApICE9IDB4RTAwKSB7CisJCWRldl9lcnIoJm9wLT5kZXYsICJFeHRlcm5hbCBETUEgY29udHJvbCBub3QgY29uZmlndXJlZFxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X3VubWFwX2ltbXI7CisJfQorCisJLyoKKwkgKiBDaGVjayB0aGUgQ1RMLUNQTEQgdmVyc2lvbgorCSAqCisJICogVGhpcyBkcml2ZXIgdXNlcyB0aGUgQ1RMLUNQTEQgREFUQS1GUEdBIHBvd2VyIHNlcXVlbmNlciwgYW5kIHdlCisJICogZG9uJ3Qgd2FudCB0byBydW4gb24gYW55IHZlcnNpb24gb2YgdGhlIENUTC1DUExEIHRoYXQgZG9lcyBub3QgdXNlCisJICogYSBjb21wYXRpYmxlIHJlZ2lzdGVyIGxheW91dC4KKwkgKgorCSAqIHYyOiBjaGFuZ2VkIHJlZ2lzdGVyIGxheW91dCwgYWRkZWQgcG93ZXIgc2VxdWVuY2VyCisJICogdjM6IGFkZGVkIGdsaXRjaCBmaWx0ZXIgb24gdGhlIGkyYyBvdmVyY3VycmVudC9vdmVydGVtcCBvdXRwdXRzCisJICovCisJdmVyID0gaW9yZWFkOChwcml2LT5yZWdzICsgQ1RMX0NQTERfVkVSU0lPTik7CisJaWYgKHZlciAhPSAweDAyICYmIHZlciAhPSAweDAzKSB7CisJCWRldl9lcnIoJm9wLT5kZXYsICJDVEwtQ1BMRCBpcyBub3QgdmVyc2lvbiAweDAyIG9yIDB4MDMhXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfdW5tYXBfaW1tcjsKKwl9CisKKwkvKiBTZXQgdGhlIGV4YWN0IHNpemUgdGhhdCB0aGUgZmlybXdhcmUgaW1hZ2Ugc2hvdWxkIGJlICovCisJdmVyID0gaW9yZWFkMzJiZShwcml2LT5yZWdzICsgU1lTX1JFR19WRVJTSU9OKTsKKwlwcml2LT5md19zaXplID0gKHZlciAmICgxIDw8IDE4KSkgPyBGV19TSVpFX0VQMlMxMzAgOiBGV19TSVpFX0VQMlM5MDsKKworCS8qIEZpbmQgdGhlIGNvcnJlY3QgSVJRIG51bWJlciAqLworCXByaXYtPmlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG9mX25vZGUsIDApOworCWlmIChwcml2LT5pcnEgPT0gTk9fSVJRKSB7CisJCWRldl9lcnIoJm9wLT5kZXYsICJVbmFibGUgdG8gZmluZCBJUlEgbGluZVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X3VubWFwX2ltbXI7CisJfQorCisJLyogUmVxdWVzdCB0aGUgSVJRICovCisJcmV0ID0gcmVxdWVzdF9pcnEocHJpdi0+aXJxLCBmcGdhX2lycSwgSVJRRl9TSEFSRUQsIGRydl9uYW1lLCBwcml2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJm9wLT5kZXYsICJVbmFibGUgdG8gcmVxdWVzdCBJUlEgJWRcbiIsIHByaXYtPmlycSk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2lycV9kaXNwb3NlX21hcHBpbmc7CisJfQorCisJLyogUmVzZXQgYW5kIHN0b3AgdGhlIEZQR0EncywganVzdCBpbiBjYXNlICovCisJZnBnYV9kb19zdG9wKHByaXYpOworCisJLyogUmVnaXN0ZXIgdGhlIG1pc2NkZXZpY2UgKi8KKwlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZwcml2LT5taXNjZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJm9wLT5kZXYsICJVbmFibGUgdG8gcmVnaXN0ZXIgbWlzY2RldmljZVxuIik7CisJCWdvdG8gb3V0X2ZyZWVfaXJxOworCX0KKworCS8qIENyZWF0ZSB0aGUgc3lzZnMgZmlsZXMgKi8KKwl0aGlzX2RldmljZSA9IHByaXYtPm1pc2NkZXYudGhpc19kZXZpY2U7CisJZGV2X3NldF9kcnZkYXRhKHRoaXNfZGV2aWNlLCBwcml2KTsKKwlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnRoaXNfZGV2aWNlLT5rb2JqLCAmZnBnYV9hdHRyX2dyb3VwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJm9wLT5kZXYsICJVbmFibGUgdG8gY3JlYXRlIHN5c2ZzIGZpbGVzXG4iKTsKKwkJZ290byBvdXRfbWlzY19kZXJlZ2lzdGVyOworCX0KKworCWRldl9pbmZvKHByaXYtPmRldiwgIkNBUk1BIEZQR0EgUHJvZ3JhbW1lcjogJXMgcmV2JXMgd2l0aCAlcyBGUEdBc1xuIiwKKwkJCSh2ZXIgJiAoMSA8PCAxNykpID8gIkNvcnJlbGF0b3IiIDogIkRpZ2l0aXplciIsCisJCQkodmVyICYgKDEgPDwgMTYpKSA/ICJCIiA6ICJBIiwKKwkJCSh2ZXIgJiAoMSA8PCAxOCkpID8gIkVQMlMxMzAiIDogIkVQMlM5MCIpOworCisJcmV0dXJuIDA7CisKK291dF9taXNjX2RlcmVnaXN0ZXI6CisJbWlzY19kZXJlZ2lzdGVyKCZwcml2LT5taXNjZGV2KTsKK291dF9mcmVlX2lycToKKwlmcmVlX2lycShwcml2LT5pcnEsIHByaXYpOworb3V0X2lycV9kaXNwb3NlX21hcHBpbmc6CisJaXJxX2Rpc3Bvc2VfbWFwcGluZyhwcml2LT5pcnEpOworb3V0X3VubWFwX2ltbXI6CisJaW91bm1hcChwcml2LT5pbW1yKTsKK291dF91bm1hcF9yZWdzOgorCWlvdW5tYXAocHJpdi0+cmVncyk7CitvdXRfZG1hX3JlbGVhc2VfY2hhbm5lbDoKKwlkbWFfcmVsZWFzZV9jaGFubmVsKHByaXYtPmNoYW4pOworb3V0X2ZyZWVfcHJpdjoKKwlrcmVmX3B1dCgmcHJpdi0+cmVmLCBmcGdhX2Rldl9yZW1vdmUpOworb3V0X3JldHVybjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBmcGdhX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJjYXJtYSxmcGdhLXByb2dyYW1tZXIiLCB9LAorCXt9LAorfTsKKworc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgZnBnYV9vZl9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGZwZ2Ffb2ZfcHJvYmUsCisJLnJlbW92ZQkJPSBmcGdhX29mX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJCT0gZHJ2X25hbWUsCisJCS5vZl9tYXRjaF90YWJsZQk9IGZwZ2Ffb2ZfbWF0Y2gsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworLyoKKyAqIE1vZHVsZSBJbml0IC8gRXhpdAorICovCisKK3N0YXRpYyBpbnQgX19pbml0IGZwZ2FfaW5pdCh2b2lkKQoreworCWxlZF90cmlnZ2VyX3JlZ2lzdGVyX3NpbXBsZSgiZnBnYSIsICZsZWR0cmlnX2ZwZ2EpOworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmZwZ2Ffb2ZfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGZwZ2FfZXhpdCh2b2lkKQoreworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZmcGdhX29mX2RyaXZlcik7CisJbGVkX3RyaWdnZXJfdW5yZWdpc3Rlcl9zaW1wbGUobGVkdHJpZ19mcGdhKTsKK30KKworTU9EVUxFX0FVVEhPUigiSXJhIFcuIFNueWRlciA8aXdzQG92cm8uY2FsdGVjaC5lZHU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNBUk1BIEJvYXJkIERBVEEtRlBHQSBQcm9ncmFtbWVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KGZwZ2FfaW5pdCk7Cittb2R1bGVfZXhpdChmcGdhX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2Nhcm1hL2Nhcm1hLWZwZ2EuYyBiL2RyaXZlcnMvbWlzYy9jYXJtYS9jYXJtYS1mcGdhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk2NTgyMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWlzYy9jYXJtYS9jYXJtYS1mcGdhLmMKQEAgLTAsMCArMSwxNDMzIEBACisvKgorICogQ0FSTUEgREFUQS1GUEdBIEFjY2VzcyBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMSBJcmEgVy4gU255ZGVyIDxpd3NAb3Zyby5jYWx0ZWNoLmVkdT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qCisgKiBGUEdBIE1lbW9yeSBEdW1wIEZvcm1hdAorICoKKyAqIEZQR0EgIzAgY29udHJvbCByZWdpc3RlcnMgKDMyIHggMzItYml0IHdvcmRzKQorICogRlBHQSAjMSBjb250cm9sIHJlZ2lzdGVycyAoMzIgeCAzMi1iaXQgd29yZHMpCisgKiBGUEdBICMyIGNvbnRyb2wgcmVnaXN0ZXJzICgzMiB4IDMyLWJpdCB3b3JkcykKKyAqIEZQR0EgIzMgY29udHJvbCByZWdpc3RlcnMgKDMyIHggMzItYml0IHdvcmRzKQorICogU1lTRlBHQSBjb250cm9sIHJlZ2lzdGVycyAoMzIgeCAzMi1iaXQgd29yZHMpCisgKiBGUEdBICMwIGNvcnJlbGF0aW9uIGFycmF5IChOVU1fQ09STDAgY29ycmVsYXRpb24gYmxvY2tzKQorICogRlBHQSAjMSBjb3JyZWxhdGlvbiBhcnJheSAoTlVNX0NPUkwxIGNvcnJlbGF0aW9uIGJsb2NrcykKKyAqIEZQR0EgIzIgY29ycmVsYXRpb24gYXJyYXkgKE5VTV9DT1JMMiBjb3JyZWxhdGlvbiBibG9ja3MpCisgKiBGUEdBICMzIGNvcnJlbGF0aW9uIGFycmF5IChOVU1fQ09STDMgY29ycmVsYXRpb24gYmxvY2tzKQorICoKKyAqIEVhY2ggY29ycmVsYXRpb24gYXJyYXkgY29uc2lzdHMgb2Y6CisgKgorICogQ29ycmVsYXRpb24gRGF0YSAgICAgICgyIHggTlVNX0xBR1NuIHggMzItYml0IHdvcmRzKQorICogUGlwZWxpbmUgTWV0YWRhdGEgICAgICgyIHggTlVNX01FVEFuIHggMzItYml0IHdvcmRzKQorICogUXVhbnRpemF0aW9uIENvdW50ZXJzICgyIHggTlVNX1FDTlRuIHggMzItYml0IHdvcmRzKQorICoKKyAqIFRoZSBOVU1fQ09STG4sIE5VTV9MQUdTbiwgTlVNX01FVEFuLCBhbmQgTlVNX1FDTlRuIHZhbHVlcyBjb21lIGZyb20KKyAqIHRoZSBGUEdBIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzLiBUaGV5IGRvIG5vdCBjaGFuZ2Ugb25jZSB0aGUgRlBHQSdzCisgKiBoYXZlIGJlZW4gcHJvZ3JhbW1lZCwgdGhleSBvbmx5IGNoYW5nZSBvbiByZS1wcm9ncmFtbWluZy4KKyAqLworCisvKgorICogQmFzaWMgRGVzY3JpcHRpb246CisgKgorICogVGhpcyBkcml2ZXIgaXMgdXNlZCB0byBjYXB0dXJlIGNvcnJlbGF0aW9uIHNwZWN0cmEgb2ZmIG9mIHRoZSBmb3VyIGRhdGEKKyAqIHByb2Nlc3NpbmcgRlBHQXMuIFRoZSBGUEdBcyBhcmUgb2Z0ZW4gcmVwcm9ncmFtbWVkIGF0IHJ1bnRpbWUsIHRoZXJlZm9yZQorICogdGhpcyBkcml2ZXIgc3VwcG9ydHMgZHluYW1pYyBlbmFibGUvZGlzYWJsZSBvZiBjYXB0dXJlIHdoaWxlIHRoZSBkZXZpY2UKKyAqIHJlbWFpbnMgb3Blbi4KKyAqCisgKiBUaGUgbm9taW5hbCBjYXB0dXJlIHJhdGUgaXMgNjRIeiAoZXZlcnkgMTUuNjI1bXMpLiBUbyBmYWNpbGl0YXRlIHRoaXMgZmFzdAorICogY2FwdHVyZSByYXRlLCBhbGwgYnVmZmVycyBhcmUgcHJlLWFsbG9jYXRlZCB0byBhdm9pZCBhbnkgcG90ZW50aWFsbHkgbG9uZworICogcnVubmluZyBtZW1vcnkgYWxsb2NhdGlvbnMgd2hpbGUgY2FwdHVyaW5nLgorICoKKyAqIFRoZXJlIGFyZSB0d28gbGlzdHMgYW5kIG9uZSBwb2ludGVyIHdoaWNoIGFyZSB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlCisgKiBkaWZmZXJlbnQgc3RhdGVzIG9mIGRhdGEgYnVmZmVycy4KKyAqCisgKiAxKSBmcmVlIGxpc3QKKyAqIFRoaXMgbGlzdCBob2xkcyBhbGwgZW1wdHkgZGF0YSBidWZmZXJzIHdoaWNoIGFyZSByZWFkeSB0byByZWNlaXZlIGRhdGEuCisgKgorICogMikgaW5mbGlnaHQgcG9pbnRlcgorICogVGhpcyBwb2ludGVyIGhvbGRzIHRoZSBjdXJyZW50bHkgaW5mbGlnaHQgZGF0YSBidWZmZXIuIFRoaXMgYnVmZmVyIGlzIGhhdmluZworICogZGF0YSBjb3BpZWQgaW50byBpdCBieSB0aGUgRE1BIGVuZ2luZS4KKyAqCisgKiAzKSB1c2VkIGxpc3QKKyAqIFRoaXMgbGlzdCBob2xkcyBkYXRhIGJ1ZmZlcnMgd2hpY2ggaGF2ZSBiZWVuIGZpbGxlZCwgYW5kIGFyZSB3YWl0aW5nIHRvIGJlCisgKiByZWFkIGJ5IHVzZXJzcGFjZS4KKyAqCisgKiBBbGwgYnVmZmVycyBzdGFydCBsaWZlIG9uIHRoZSBmcmVlIGxpc3QsIHRoZW4gbW92ZSBzdWNjZXNzaXZlbHkgdG8gdGhlCisgKiBpbmZsaWdodCBwb2ludGVyLCBhbmQgdGhlbiB0byB0aGUgdXNlZCBsaXN0LiBBZnRlciB0aGV5IGhhdmUgYmVlbiByZWFkIGJ5CisgKiB1c2Vyc3BhY2UsIHRoZXkgYXJlIG1vdmVkIGJhY2sgdG8gdGhlIGZyZWUgbGlzdC4gVGhlIGN5Y2xlIHJlcGVhdHMgYXMgbG9uZworICogYXMgbmVjZXNzYXJ5LgorICoKKyAqIEl0IHNob3VsZCBiZSBub3RlZCB0aGF0IGFsbCBidWZmZXJzIGFyZSBtYXBwZWQgYW5kIHJlYWR5IGZvciBETUEgd2hlbiB0aGV5CisgKiBhcmUgb24gYW55IG9mIHRoZSB0aHJlZSBsaXN0cy4gVGhleSBhcmUgb25seSB1bm1hcHBlZCB3aGVuIHRoZXkgYXJlIGluIHRoZQorICogcHJvY2VzcyBvZiBiZWluZyByZWFkIGJ5IHVzZXJzcGFjZS4KKyAqLworCisvKgorICogTm90ZXMgb24gdGhlIElSUSBtYXNraW5nIHNjaGVtZToKKyAqCisgKiBUaGUgSVJRIG1hc2tpbmcgc2NoZW1lIGhlcmUgaXMgZGlmZmVyZW50IHRoYW4gbW9zdCBvdGhlciBoYXJkd2FyZS4gVGhlIG9ubHkKKyAqIHdheSBmb3IgdGhlIERBVEEtRlBHQXMgdG8gZGV0ZWN0IGlmIHRoZSBrZXJuZWwgaGFzIHRha2VuIHRvbyBsb25nIHRvIGNvcHkKKyAqIHRoZSBkYXRhIGlzIGlmIHRoZSBzdGF0dXMgcmVnaXN0ZXJzIGFyZSBub3QgY2xlYXJlZCBiZWZvcmUgdGhlIG5leHQKKyAqIGNvcnJlbGF0aW9uIGRhdGEgZHVtcCBpcyByZWFkeS4KKyAqCisgKiBUaGUgaW50ZXJydXB0IGxpbmUgaXMgY29ubmVjdGVkIHRvIHRoZSBzdGF0dXMgcmVnaXN0ZXJzLCBzdWNoIHRoYXQgd2hlbiB0aGV5CisgKiBhcmUgY2xlYXJlZCwgdGhlIGludGVycnVwdCBpcyBkZS1hc3NlcnRlZC4gVGhlcmVpbiBsaWVzIG91ciBwcm9ibGVtLiBXZSBuZWVkCisgKiB0byBzY2hlZHVsZSBhIGxvbmctcnVubmluZyBETUEgb3BlcmF0aW9uIGFuZCByZXR1cm4gZnJvbSB0aGUgaW50ZXJydXB0CisgKiBoYW5kbGVyIHF1aWNrbHksIGJ1dCB3ZSBjYW5ub3QgY2xlYXIgdGhlIHN0YXR1cyByZWdpc3RlcnMuCisgKgorICogVG8gaGFuZGxlIHRoaXMsIHRoZSBzeXN0ZW0gY29udHJvbGxlciBGUEdBIGhhcyB0aGUgY2FwYWJpbGl0eSB0byBjb25uZWN0IHRoZQorICogaW50ZXJydXB0IGxpbmUgdG8gYSB1c2VyLWNvbnRyb2xsZWQgR1BJTyBwaW4uIFRoaXMgcGluIGlzIGRyaXZlbiBoaWdoCisgKiAodW5hc3NlcnRlZCkgYW5kIGxlZnQgdGhhdCB3YXkuIFRvIG1hc2sgdGhlIGludGVycnVwdCwgd2UgY2hhbmdlIHRoZQorICogaW50ZXJydXB0IHNvdXJjZSB0byB0aGUgR1BJTyBwaW4uIFRhZGEsIHdlIGhpZCB0aGUgaW50ZXJydXB0LiA6KQorICovCisKKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWRtYS1zZy5oPgorCisvKiBzeXN0ZW0gY29udHJvbGxlciByZWdpc3RlcnMgKi8KKyNkZWZpbmUgU1lTX0lSUV9TT1VSQ0VfQ1RMCTB4MjQKKyNkZWZpbmUgU1lTX0lSUV9PVVRQVVRfRU4JMHgyOAorI2RlZmluZSBTWVNfSVJRX09VVFBVVF9EQVRBCTB4MkMKKyNkZWZpbmUgU1lTX0lSUV9JTlBVVF9EQVRBCTB4MzAKKyNkZWZpbmUgU1lTX0ZQR0FfQ09ORklHX1NUQVRVUwkweDQ0CisKKy8qIEdQSU8gSVJRIGxpbmUgYXNzaWdubWVudCAqLworI2RlZmluZSBJUlFfQ09STF9ET05FCQkweDEwCisKKy8qIEZQR0EgcmVnaXN0ZXJzICovCisjZGVmaW5lIE1NQVBfUkVHX1ZFUlNJT04JMHgwMAorI2RlZmluZSBNTUFQX1JFR19DT1JMX0NPTkYxCTB4MDgKKyNkZWZpbmUgTU1BUF9SRUdfQ09STF9DT05GMgkweDBDCisjZGVmaW5lIE1NQVBfUkVHX1NUQVRVUwkJMHg0OAorCisjZGVmaW5lIFNZU19GUEdBX0JMT0NLCQkweEYwMDAwMDAwCisKKyNkZWZpbmUgREFUQV9GUEdBX1NUQVJUCQkweDQwMDAwMAorI2RlZmluZSBEQVRBX0ZQR0FfU0laRQkJMHg4MDAwMAorCitzdGF0aWMgY29uc3QgY2hhciBkcnZfbmFtZVtdID0gImNhcm1hLWZwZ2EiOworCisjZGVmaW5lIE5VTV9GUEdBCTQKKworI2RlZmluZSBNSU5fREFUQV9CVUZTCTgKKyNkZWZpbmUgTUFYX0RBVEFfQlVGUwk2NAorCitzdHJ1Y3QgZnBnYV9pbmZvIHsKKwl1bnNpZ25lZCBpbnQgbnVtX2xhZ19yYW07CisJdW5zaWduZWQgaW50IGJsa19zaXplOworfTsKKworc3RydWN0IGRhdGFfYnVmIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5OworCXN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgdmI7CisJc2l6ZV90IHNpemU7Cit9OworCitzdHJ1Y3QgZnBnYV9kZXZpY2UgeworCS8qIGNoYXJhY3RlciBkZXZpY2UgKi8KKwlzdHJ1Y3QgbWlzY2RldmljZSBtaXNjZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisKKwkvKiByZWZlcmVuY2UgY291bnQgKi8KKwlzdHJ1Y3Qga3JlZiByZWY7CisKKwkvKiBGUEdBIHJlZ2lzdGVycyBhbmQgaW5mb3JtYXRpb24gKi8KKwlzdHJ1Y3QgZnBnYV9pbmZvIGluZm9bTlVNX0ZQR0FdOworCXZvaWQgX19pb21lbSAqcmVnczsKKwlpbnQgaXJxOworCisJLyogRlBHQSBQaHlzaWNhbCBBZGRyZXNzL1NpemUgSW5mb3JtYXRpb24gKi8KKwlyZXNvdXJjZV9zaXplX3QgcGh5c19hZGRyOworCXNpemVfdCBwaHlzX3NpemU7CisKKwkvKiBETUEgc3RydWN0dXJlcyAqLworCXN0cnVjdCBzZ190YWJsZSBjb3JsX3RhYmxlOworCXVuc2lnbmVkIGludCBjb3JsX25lbnRzOworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbjsKKworCS8qIFByb3RlY3Rpb24gZm9yIGFsbCBtZW1iZXJzIGJlbG93ICovCisJc3BpbmxvY2tfdCBsb2NrOworCisJLyogRGV2aWNlIGVuYWJsZS9kaXNhYmxlIGZsYWcgKi8KKwlib29sIGVuYWJsZWQ7CisKKwkvKiBDb3JyZWxhdGlvbiBkYXRhIGJ1ZmZlcnMgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworCXN0cnVjdCBsaXN0X2hlYWQgZnJlZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHVzZWQ7CisJc3RydWN0IGRhdGFfYnVmICppbmZsaWdodDsKKworCS8qIEluZm9ybWF0aW9uIGFib3V0IGRhdGEgYnVmZmVycyAqLworCXVuc2lnbmVkIGludCBudW1fZHJvcHBlZDsKKwl1bnNpZ25lZCBpbnQgbnVtX2J1ZmZlcnM7CisJc2l6ZV90IGJ1ZnNpemU7CisJc3RydWN0IGRlbnRyeSAqZGJnX2VudHJ5OworfTsKKworc3RydWN0IGZwZ2FfcmVhZGVyIHsKKwlzdHJ1Y3QgZnBnYV9kZXZpY2UgKnByaXY7CisJc3RydWN0IGRhdGFfYnVmICpidWY7CisJb2ZmX3QgYnVmX3N0YXJ0OworfTsKKworc3RhdGljIHZvaWQgZnBnYV9kZXZpY2VfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKQoreworCXN0cnVjdCBmcGdhX2RldmljZSAqcHJpdiA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBmcGdhX2RldmljZSwgcmVmKTsKKworCS8qIHRoZSBsYXN0IHJlYWRlciBoYXMgZXhpdGVkLCBjbGVhbnVwIHRoZSBsYXN0IGJpdHMgKi8KKwltdXRleF9kZXN0cm95KCZwcml2LT5tdXRleCk7CisJa2ZyZWUocHJpdik7Cit9CisKKy8qCisgKiBEYXRhIEJ1ZmZlciBBbGxvY2F0aW9uIEhlbHBlcnMKKyAqLworCisvKioKKyAqIGRhdGFfZnJlZV9idWZmZXIoKSAtIGZyZWUgYSBzaW5nbGUgZGF0YSBidWZmZXIgYW5kIGFsbCBhbGxvY2F0ZWQgbWVtb3J5CisgKiBAYnVmOiB0aGUgYnVmZmVyIHRvIGZyZWUKKyAqCisgKiBUaGlzIHdpbGwgZnJlZSBhbGwgb2YgdGhlIHBhZ2VzIGFsbG9jYXRlZCB0byB0aGUgZ2l2ZW4gZGF0YSBidWZmZXIsIGFuZAorICogdGhlbiBmcmVlIHRoZSBzdHJ1Y3R1cmUgaXRzZWxmCisgKi8KK3N0YXRpYyB2b2lkIGRhdGFfZnJlZV9idWZmZXIoc3RydWN0IGRhdGFfYnVmICpidWYpCit7CisJLyogSXQgaXMgb2sgdG8gZnJlZSBhIE5VTEwgYnVmZmVyICovCisJaWYgKCFidWYpCisJCXJldHVybjsKKworCS8qIGZyZWUgYWxsIG1lbW9yeSAqLworCXZpZGVvYnVmX2RtYV9mcmVlKCZidWYtPnZiKTsKKwlrZnJlZShidWYpOworfQorCisvKioKKyAqIGRhdGFfYWxsb2NfYnVmZmVyKCkgLSBhbGxvY2F0ZSBhbmQgZmlsbCBhIGRhdGEgYnVmZmVyIHdpdGggcGFnZXMKKyAqIEBieXRlczogdGhlIG51bWJlciBvZiBieXRlcyByZXF1aXJlZAorICoKKyAqIFRoaXMgYWxsb2NhdGVzIGFsbCBzcGFjZSBuZWVkZWQgZm9yIGEgZGF0YSBidWZmZXIuIEl0IG11c3QgYmUgbWFwcGVkIGJlZm9yZQorICogdXNlIGluIGEgRE1BIHRyYW5zYWN0aW9uIHVzaW5nIHZpZGVvYnVmX2RtYV9tYXAoKS4KKyAqCisgKiBSZXR1cm5zIE5VTEwgb24gZmFpbHVyZQorICovCitzdGF0aWMgc3RydWN0IGRhdGFfYnVmICpkYXRhX2FsbG9jX2J1ZmZlcihjb25zdCBzaXplX3QgYnl0ZXMpCit7CisJdW5zaWduZWQgaW50IG5yX3BhZ2VzOworCXN0cnVjdCBkYXRhX2J1ZiAqYnVmOworCWludCByZXQ7CisKKwkvKiBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBwYWdlcyBuZWNlc3NhcnkgKi8KKwlucl9wYWdlcyA9IERJVl9ST1VORF9VUChieXRlcywgUEFHRV9TSVpFKTsKKworCS8qIGFsbG9jYXRlIHRoZSBidWZmZXIgc3RydWN0dXJlICovCisJYnVmID0ga3phbGxvYyhzaXplb2YoKmJ1ZiksIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlnb3RvIG91dF9yZXR1cm47CisKKwkvKiBpbml0aWFsaXplIGludGVybmFsIGZpZWxkcyAqLworCUlOSVRfTElTVF9IRUFEKCZidWYtPmVudHJ5KTsKKwlidWYtPnNpemUgPSBieXRlczsKKworCS8qIGFsbG9jYXRlIHRoZSB2aWRlb2J1ZiAqLworCXZpZGVvYnVmX2RtYV9pbml0KCZidWYtPnZiKTsKKwlyZXQgPSB2aWRlb2J1Zl9kbWFfaW5pdF9rZXJuZWwoJmJ1Zi0+dmIsIERNQV9GUk9NX0RFVklDRSwgbnJfcGFnZXMpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2ZyZWVfYnVmOworCisJcmV0dXJuIGJ1ZjsKKworb3V0X2ZyZWVfYnVmOgorCWtmcmVlKGJ1Zik7CitvdXRfcmV0dXJuOgorCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIGRhdGFfZnJlZV9idWZmZXJzKCkgLSBmcmVlIGFsbCBhbGxvY2F0ZWQgYnVmZmVycworICogQHByaXY6IHRoZSBkcml2ZXIncyBwcml2YXRlIGRhdGEgc3RydWN0dXJlCisgKgorICogRnJlZSBhbGwgYnVmZmVycyBhbGxvY2F0ZWQgYnkgdGhlIGRyaXZlciAoZXhjZXB0IHRob3NlIGN1cnJlbnRseSBpbiB0aGUKKyAqIHByb2Nlc3Mgb2YgYmVpbmcgcmVhZCBieSB1c2Vyc3BhY2UpLgorICoKKyAqIExPQ0tJTkc6IG11c3QgaG9sZCBkZXYtPm11dGV4CisgKiBDT05URVhUOiB1c2VyCisgKi8KK3N0YXRpYyB2b2lkIGRhdGFfZnJlZV9idWZmZXJzKHN0cnVjdCBmcGdhX2RldmljZSAqcHJpdikKK3sKKwlzdHJ1Y3QgZGF0YV9idWYgKmJ1ZiwgKnRtcDsKKworCS8qIHRoZSBkZXZpY2Ugc2hvdWxkIGJlIHN0b3BwZWQsIG5vIERNQSBpbiBwcm9ncmVzcyAqLworCUJVR19PTihwcml2LT5pbmZsaWdodCAhPSBOVUxMKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShidWYsIHRtcCwgJnByaXYtPmZyZWUsIGVudHJ5KSB7CisJCWxpc3RfZGVsX2luaXQoJmJ1Zi0+ZW50cnkpOworCQl2aWRlb2J1Zl9kbWFfdW5tYXAocHJpdi0+ZGV2LCAmYnVmLT52Yik7CisJCWRhdGFfZnJlZV9idWZmZXIoYnVmKTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYnVmLCB0bXAsICZwcml2LT51c2VkLCBlbnRyeSkgeworCQlsaXN0X2RlbF9pbml0KCZidWYtPmVudHJ5KTsKKwkJdmlkZW9idWZfZG1hX3VubWFwKHByaXYtPmRldiwgJmJ1Zi0+dmIpOworCQlkYXRhX2ZyZWVfYnVmZmVyKGJ1Zik7CisJfQorCisJcHJpdi0+bnVtX2J1ZmZlcnMgPSAwOworCXByaXYtPmJ1ZnNpemUgPSAwOworfQorCisvKioKKyAqIGRhdGFfYWxsb2NfYnVmZmVycygpIC0gYWxsb2NhdGUgMSBzZWNvbmRzIHdvcnRoIG9mIGRhdGEgYnVmZmVycworICogQHByaXY6IHRoZSBkcml2ZXIncyBwcml2YXRlIGRhdGEgc3RydWN0dXJlCisgKgorICogQWxsb2NhdGUgZW5vdWdoIGJ1ZmZlcnMgZm9yIGEgd2hvbGUgc2Vjb25kIHdvcnRoIG9mIGRhdGEKKyAqCisgKiBUaGlzIHJvdXRpbmUgd2lsbCBhdHRlbXB0IHRvIGRlZ3JhZGUgbmljZWx5IGJ5IHN1Y2NlZWRpbmcgZXZlbiBpZiBhIGZ1bGwKKyAqIHNlY29uZCB3b3J0aCBvZiBkYXRhIGJ1ZmZlcnMgY291bGQgbm90IGJlIGFsbG9jYXRlZCwgYXMgbG9uZyBhcyBhIG1pbmltdW0KKyAqIG51bWJlciB3ZXJlIGFsbG9jYXRlZC4gSW4gdGhpcyBjYXNlLCBpdCB3aWxsIHByaW50IGEgbWVzc2FnZSB0byB0aGUga2VybmVsCisgKiBsb2cuCisgKgorICogVGhlIGRldmljZSBtdXN0IG5vdCBiZSBtb2RpZnlpbmcgYW55IGxpc3RzIHdoZW4gdGhpcyBpcyBjYWxsZWQuCisgKgorICogQ09OVEVYVDogdXNlcgorICogTE9DS0lORzogbXVzdCBob2xkIGRldi0+bXV0ZXgKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVSUk5PIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IGRhdGFfYWxsb2NfYnVmZmVycyhzdHJ1Y3QgZnBnYV9kZXZpY2UgKnByaXYpCit7CisJc3RydWN0IGRhdGFfYnVmICpidWY7CisJaW50IGksIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfREFUQV9CVUZTOyBpKyspIHsKKworCQkvKiBhbGxvY2F0ZSBhIGJ1ZmZlciAqLworCQlidWYgPSBkYXRhX2FsbG9jX2J1ZmZlcihwcml2LT5idWZzaXplKTsKKwkJaWYgKCFidWYpCisJCQlicmVhazsKKworCQkvKiBtYXAgaXQgZm9yIERNQSAqLworCQlyZXQgPSB2aWRlb2J1Zl9kbWFfbWFwKHByaXYtPmRldiwgJmJ1Zi0+dmIpOworCQlpZiAocmV0KSB7CisJCQlkYXRhX2ZyZWVfYnVmZmVyKGJ1Zik7CisJCQlicmVhazsKKwkJfQorCisJCS8qIGFkZCBpdCB0byB0aGUgbGlzdCBvZiBmcmVlIGJ1ZmZlcnMgKi8KKwkJbGlzdF9hZGRfdGFpbCgmYnVmLT5lbnRyeSwgJnByaXYtPmZyZWUpOworCQlwcml2LT5udW1fYnVmZmVycysrOworCX0KKworCS8qIE1ha2Ugc3VyZSB3ZSBhbGxvY2F0ZWQgdGhlIG1pbmltdW0gcmVxdWlyZWQgbnVtYmVyIG9mIGJ1ZmZlcnMgKi8KKwlpZiAocHJpdi0+bnVtX2J1ZmZlcnMgPCBNSU5fREFUQV9CVUZTKSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAiVW5hYmxlIHRvIGFsbG9jYXRlIGVub3VnaCBkYXRhIGJ1ZmZlcnNcbiIpOworCQlkYXRhX2ZyZWVfYnVmZmVycyhwcml2KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogV2FybiBpZiB3ZSBhcmUgcnVubmluZyBpbiBhIGRlZ3JhZGVkIHN0YXRlLCBidXQgZG8gbm90IGZhaWwgKi8KKwlpZiAocHJpdi0+bnVtX2J1ZmZlcnMgPCBNQVhfREFUQV9CVUZTKSB7CisJCWRldl93YXJuKHByaXYtPmRldiwKKwkJCSAiVW5hYmxlIHRvIGFsbG9jYXRlICVkIGJ1ZmZlcnMsIHVzaW5nICVkIGJ1ZmZlcnMgaW5zdGVhZFxuIiwKKwkJCSBNQVhfREFUQV9CVUZTLCBpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIERNQSBPcGVyYXRpb25zIEhlbHBlcnMKKyAqLworCisvKioKKyAqIGZwZ2Ffc3RhcnRfYWRkcigpIC0gZ2V0IHRoZSBwaHlzaWNhbCBhZGRyZXNzIGEgREFUQS1GUEdBCisgKiBAcHJpdjogdGhlIGRyaXZlcidzIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUKKyAqIEBmcGdhOiB0aGUgREFUQS1GUEdBIG51bWJlciAoemVybyBiYXNlZCkKKyAqLworc3RhdGljIGRtYV9hZGRyX3QgZnBnYV9zdGFydF9hZGRyKHN0cnVjdCBmcGdhX2RldmljZSAqcHJpdiwgdW5zaWduZWQgaW50IGZwZ2EpCit7CisJcmV0dXJuIHByaXYtPnBoeXNfYWRkciArIDB4NDAwMDAwICsgKDB4ODAwMDAgKiBmcGdhKTsKK30KKworLyoqCisgKiBmcGdhX2Jsb2NrX2FkZHIoKSAtIGdldCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiBhIGNvcnJlbGF0aW9uIGRhdGEgYmxvY2sKKyAqIEBwcml2OiB0aGUgZHJpdmVyJ3MgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZQorICogQGZwZ2E6IHRoZSBEQVRBLUZQR0EgbnVtYmVyICh6ZXJvIGJhc2VkKQorICogQGJsa251bTogdGhlIGNvcnJlbGF0aW9uIGJsb2NrIG51bWJlciAoemVybyBiYXNlZCkKKyAqLworc3RhdGljIGRtYV9hZGRyX3QgZnBnYV9ibG9ja19hZGRyKHN0cnVjdCBmcGdhX2RldmljZSAqcHJpdiwgdW5zaWduZWQgaW50IGZwZ2EsCisJCQkJICB1bnNpZ25lZCBpbnQgYmxrbnVtKQoreworCXJldHVybiBmcGdhX3N0YXJ0X2FkZHIocHJpdiwgZnBnYSkgKyAoMHgxMDAwMCAqICgxICsgYmxrbnVtKSk7Cit9CisKKyNkZWZpbmUgUkVHX0JMT0NLX1NJWkUJKDMyICogNCkKKworLyoqCisgKiBkYXRhX3NldHVwX2NvcmxfdGFibGUoKSAtIGNyZWF0ZSB0aGUgc2NhdHRlcmxpc3QgZm9yIGNvcnJlbGF0aW9uIGR1bXBzCisgKiBAcHJpdjogdGhlIGRyaXZlcidzIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUKKyAqCisgKiBDcmVhdGUgdGhlIHNjYXR0ZXJsaXN0IGZvciB0cmFuc2ZlcnJpbmcgYSBjb3JyZWxhdGlvbiBkdW1wIGZyb20gdGhlCisgKiBEQVRBIEZQR0FzLiBUaGlzIHN0cnVjdHVyZSB3aWxsIGJlIHJldXNlZCBmb3IgZWFjaCBidWZmZXIgdGhhbiBuZWVkcworICogdG8gYmUgZmlsbGVkIHdpdGggY29ycmVsYXRpb24gZGF0YS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVSUk5PIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IGRhdGFfc2V0dXBfY29ybF90YWJsZShzdHJ1Y3QgZnBnYV9kZXZpY2UgKnByaXYpCit7CisJc3RydWN0IHNnX3RhYmxlICp0YWJsZSA9ICZwcml2LT5jb3JsX3RhYmxlOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJc3RydWN0IGZwZ2FfaW5mbyAqaW5mbzsKKwlpbnQgaSwgaiwgcmV0OworCisJLyogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgZW50cmllcyBuZWVkZWQgKi8KKwlwcml2LT5jb3JsX25lbnRzID0gKDEgKyBOVU1fRlBHQSkgKiBSRUdfQkxPQ0tfU0laRTsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZQR0E7IGkrKykKKwkJcHJpdi0+Y29ybF9uZW50cyArPSBwcml2LT5pbmZvW2ldLm51bV9sYWdfcmFtOworCisJLyogQWxsb2NhdGUgdGhlIHNjYXR0ZXJsaXN0IHRhYmxlICovCisJcmV0ID0gc2dfYWxsb2NfdGFibGUodGFibGUsIHByaXYtPmNvcmxfbmVudHMsIEdGUF9LRVJORUwpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihwcml2LT5kZXYsICJ1bmFibGUgdG8gYWxsb2NhdGUgRE1BIHRhYmxlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBBZGQgdGhlIERBVEEgRlBHQSByZWdpc3RlcnMgdG8gdGhlIHNjYXR0ZXJsaXN0ICovCisJc2cgPSB0YWJsZS0+c2dsOworCWZvciAoaSA9IDA7IGkgPCBOVU1fRlBHQTsgaSsrKSB7CisJCXNnX2RtYV9hZGRyZXNzKHNnKSA9IGZwZ2Ffc3RhcnRfYWRkcihwcml2LCBpKTsKKwkJc2dfZG1hX2xlbihzZykgPSBSRUdfQkxPQ0tfU0laRTsKKwkJc2cgPSBzZ19uZXh0KHNnKTsKKwl9CisKKwkvKiBBZGQgdGhlIFNZUy1GUEdBIHJlZ2lzdGVycyB0byB0aGUgc2NhdHRlcmxpc3QgKi8KKwlzZ19kbWFfYWRkcmVzcyhzZykgPSBTWVNfRlBHQV9CTE9DSzsKKwlzZ19kbWFfbGVuKHNnKSA9IFJFR19CTE9DS19TSVpFOworCXNnID0gc2dfbmV4dChzZyk7CisKKwkvKiBBZGQgdGhlIEZQR0EgY29ycmVsYXRpb24gZGF0YSBibG9ja3MgdG8gdGhlIHNjYXR0ZXJsaXN0ICovCisJZm9yIChpID0gMDsgaSA8IE5VTV9GUEdBOyBpKyspIHsKKwkJaW5mbyA9ICZwcml2LT5pbmZvW2ldOworCQlmb3IgKGogPSAwOyBqIDwgaW5mby0+bnVtX2xhZ19yYW07IGorKykgeworCQkJc2dfZG1hX2FkZHJlc3Moc2cpID0gZnBnYV9ibG9ja19hZGRyKHByaXYsIGksIGopOworCQkJc2dfZG1hX2xlbihzZykgPSBpbmZvLT5ibGtfc2l6ZTsKKwkJCXNnID0gc2dfbmV4dChzZyk7CisJCX0KKwl9CisKKwkvKgorCSAqIEFsbCBwaHlzaWNhbCBhZGRyZXNzZXMgYW5kIGxlbmd0aHMgYXJlIHByZXNlbnQgaW4gdGhlIHN0cnVjdHVyZQorCSAqIG5vdy4gSXQgY2FuIGJlIHJldXNlZCBmb3IgZXZlcnkgRlBHQSBEQVRBIGludGVycnVwdAorCSAqLworCXJldHVybiAwOworfQorCisvKgorICogRlBHQSBSZWdpc3RlciBBY2Nlc3MgSGVscGVycworICovCisKK3N0YXRpYyB2b2lkIGZwZ2Ffd3JpdGVfcmVnKHN0cnVjdCBmcGdhX2RldmljZSAqcHJpdiwgdW5zaWduZWQgaW50IGZwZ2EsCisJCQkgICB1bnNpZ25lZCBpbnQgcmVnLCB1MzIgdmFsKQoreworCWNvbnN0IGludCBmcGdhX3N0YXJ0ID0gREFUQV9GUEdBX1NUQVJUICsgKGZwZ2EgKiBEQVRBX0ZQR0FfU0laRSk7CisJaW93cml0ZTMyYmUodmFsLCBwcml2LT5yZWdzICsgZnBnYV9zdGFydCArIHJlZyk7Cit9CisKK3N0YXRpYyB1MzIgZnBnYV9yZWFkX3JlZyhzdHJ1Y3QgZnBnYV9kZXZpY2UgKnByaXYsIHVuc2lnbmVkIGludCBmcGdhLAorCQkJIHVuc2lnbmVkIGludCByZWcpCit7CisJY29uc3QgaW50IGZwZ2Ffc3RhcnQgPSBEQVRBX0ZQR0FfU1RBUlQgKyAoZnBnYSAqIERBVEFfRlBHQV9TSVpFKTsKKwlyZXR1cm4gaW9yZWFkMzJiZShwcml2LT5yZWdzICsgZnBnYV9zdGFydCArIHJlZyk7Cit9CisKKy8qKgorICogZGF0YV9jYWxjdWxhdGVfYnVmc2l6ZSgpIC0gY2FsY3VsYXRlIHRoZSBkYXRhIGJ1ZmZlciBzaXplIHJlcXVpcmVkCisgKiBAcHJpdjogdGhlIGRyaXZlcidzIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUKKyAqCisgKiBDYWxjdWxhdGUgdGhlIHRvdGFsIGJ1ZmZlciBzaXplIG5lZWRlZCB0byBob2xkIGEgc2luZ2xlIGJsb2NrCisgKiBvZiBjb3JyZWxhdGlvbiBkYXRhCisgKgorICogQ09OVEVYVDogdXNlcgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRVJSTk8gb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgZGF0YV9jYWxjdWxhdGVfYnVmc2l6ZShzdHJ1Y3QgZnBnYV9kZXZpY2UgKnByaXYpCit7CisJdTMyIG51bV9jb3JsLCBudW1fbGFncywgbnVtX21ldGEsIG51bV9xY250LCBudW1fcGFjazsKKwl1MzIgY29uZjEsIGNvbmYyLCB2ZXJzaW9uOworCXUzMiBudW1fbGFnX3JhbSwgYmxrX3NpemU7CisJaW50IGk7CisKKwkvKiBFYWNoIGJ1ZmZlciBzdGFydHMgd2l0aCB0aGUgNSBGUEdBIHJlZ2lzdGVyIGFyZWFzICovCisJcHJpdi0+YnVmc2l6ZSA9ICgxICsgTlVNX0ZQR0EpICogUkVHX0JMT0NLX1NJWkU7CisKKwkvKiBSZWFkIGFuZCBzdG9yZSB0aGUgY29uZmlndXJhdGlvbiBkYXRhIGZvciBlYWNoIEZQR0EgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZQR0E7IGkrKykgeworCQl2ZXJzaW9uID0gZnBnYV9yZWFkX3JlZyhwcml2LCBpLCBNTUFQX1JFR19WRVJTSU9OKTsKKwkJY29uZjEgPSBmcGdhX3JlYWRfcmVnKHByaXYsIGksIE1NQVBfUkVHX0NPUkxfQ09ORjEpOworCQljb25mMiA9IGZwZ2FfcmVhZF9yZWcocHJpdiwgaSwgTU1BUF9SRUdfQ09STF9DT05GMik7CisKKwkJLyogbWlub3IgdmVyc2lvbiAyIGFuZCBsYXRlciAqLworCQlpZiAoKHZlcnNpb24gJiAweDAwMDAwMEZGKSA+PSAyKSB7CisJCQludW1fY29ybCA9IChjb25mMSAmIDB4MDAwMDAwRjApID4+IDQ7CisJCQludW1fcGFjayA9IChjb25mMSAmIDB4MDAwMDBGMDApID4+IDg7CisJCQludW1fbGFncyA9IChjb25mMSAmIDB4MDBGRkYwMDApID4+IDEyOworCQkJbnVtX21ldGEgPSAoY29uZjEgJiAweDdGMDAwMDAwKSA+PiAyNDsKKwkJCW51bV9xY250ID0gKGNvbmYyICYgMHgwMDAwMEZGRikgPj4gMDsKKwkJfSBlbHNlIHsKKwkJCW51bV9jb3JsID0gKGNvbmYxICYgMHgwMDAwMDBGMCkgPj4gNDsKKwkJCW51bV9wYWNrID0gMTsgLyogaW1wbGllZCAqLworCQkJbnVtX2xhZ3MgPSAoY29uZjEgJiAweDAwMEZGRjAwKSA+PiA4OworCQkJbnVtX21ldGEgPSAoY29uZjEgJiAweDdGRjAwMDAwKSA+PiAyMDsKKwkJCW51bV9xY250ID0gKGNvbmYyICYgMHgwMDAwMEZGRikgPj4gMDsKKwkJfQorCisJCW51bV9sYWdfcmFtID0gKG51bV9jb3JsICsgbnVtX3BhY2sgLSAxKSAvIG51bV9wYWNrOworCQlibGtfc2l6ZSA9ICgobnVtX3BhY2sgKiBudW1fbGFncykgKyBudW1fbWV0YSArIG51bV9xY250KSAqIDg7CisKKwkJcHJpdi0+aW5mb1tpXS5udW1fbGFnX3JhbSA9IG51bV9sYWdfcmFtOworCQlwcml2LT5pbmZvW2ldLmJsa19zaXplID0gYmxrX3NpemU7CisJCXByaXYtPmJ1ZnNpemUgKz0gbnVtX2xhZ19yYW0gKiBibGtfc2l6ZTsKKworCQlkZXZfZGJnKHByaXYtPmRldiwgIkZQR0EgJWQgTlVNX0NPUkw6ICVkXG4iLCBpLCBudW1fY29ybCk7CisJCWRldl9kYmcocHJpdi0+ZGV2LCAiRlBHQSAlZCBOVU1fUEFDSzogJWRcbiIsIGksIG51bV9wYWNrKTsKKwkJZGV2X2RiZyhwcml2LT5kZXYsICJGUEdBICVkIE5VTV9MQUdTOiAlZFxuIiwgaSwgbnVtX2xhZ3MpOworCQlkZXZfZGJnKHByaXYtPmRldiwgIkZQR0EgJWQgTlVNX01FVEE6ICVkXG4iLCBpLCBudW1fbWV0YSk7CisJCWRldl9kYmcocHJpdi0+ZGV2LCAiRlBHQSAlZCBOVU1fUUNOVDogJWRcbiIsIGksIG51bV9xY250KTsKKwkJZGV2X2RiZyhwcml2LT5kZXYsICJGUEdBICVkIEJMS19TSVpFOiAlZFxuIiwgaSwgYmxrX3NpemUpOworCX0KKworCWRldl9kYmcocHJpdi0+ZGV2LCAiVE9UQUwgQlVGRkVSIFNJWkU6ICV6dSBieXRlc1xuIiwgcHJpdi0+YnVmc2l6ZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbnRlcnJ1cHQgSGFuZGxpbmcKKyAqLworCisvKioKKyAqIGRhdGFfZGlzYWJsZV9pbnRlcnJ1cHRzKCkgLSBzdG9wIHRoZSBkZXZpY2UgZnJvbSBnZW5lcmF0aW5nIGludGVycnVwdHMKKyAqIEBwcml2OiB0aGUgZHJpdmVyJ3MgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZQorICoKKyAqIEhpZGUgaW50ZXJydXB0cyBieSBzd2l0Y2hpbmcgdG8gR1BJTyBpbnRlcnJ1cHQgc291cmNlCisgKgorICogTE9DS0lORzogbXVzdCBob2xkIGRldi0+bG9jaworICovCitzdGF0aWMgdm9pZCBkYXRhX2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgZnBnYV9kZXZpY2UgKnByaXYpCit7CisJLyogaGlkZSB0aGUgaW50ZXJydXB0IGJ5IHN3aXRjaGluZyB0aGUgSVJRIGRyaXZlciB0byBHUElPICovCisJaW93cml0ZTMyYmUoMHgyRiwgcHJpdi0+cmVncyArIFNZU19JUlFfU09VUkNFX0NUTCk7Cit9CisKKy8qKgorICogZGF0YV9lbmFibGVfaW50ZXJydXB0cygpIC0gYWxsb3cgdGhlIGRldmljZSB0byBnZW5lcmF0ZSBpbnRlcnJ1cHRzCisgKiBAcHJpdjogdGhlIGRyaXZlcidzIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUKKyAqCisgKiBVbmhpZGUgaW50ZXJydXB0cyBieSBzd2l0Y2hpbmcgdG8gdGhlIEZQR0EgaW50ZXJydXB0IHNvdXJjZS4gQXQgdGhlCisgKiBzYW1lIHRpbWUsIGNsZWFyIHRoZSBEQVRBLUZQR0Egc3RhdHVzIHJlZ2lzdGVycy4KKyAqCisgKiBMT0NLSU5HOiBtdXN0IGhvbGQgZGV2LT5sb2NrCisgKi8KK3N0YXRpYyB2b2lkIGRhdGFfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IGZwZ2FfZGV2aWNlICpwcml2KQoreworCS8qIGNsZWFyIHRoZSBhY3R1YWwgRlBHQSBjb3JsX2RvbmUgaW50ZXJydXB0ICovCisJZnBnYV93cml0ZV9yZWcocHJpdiwgMCwgTU1BUF9SRUdfU1RBVFVTLCAweDApOworCWZwZ2Ffd3JpdGVfcmVnKHByaXYsIDEsIE1NQVBfUkVHX1NUQVRVUywgMHgwKTsKKwlmcGdhX3dyaXRlX3JlZyhwcml2LCAyLCBNTUFQX1JFR19TVEFUVVMsIDB4MCk7CisJZnBnYV93cml0ZV9yZWcocHJpdiwgMywgTU1BUF9SRUdfU1RBVFVTLCAweDApOworCisJLyogZmx1c2ggdGhlIHdyaXRlcyAqLworCWZwZ2FfcmVhZF9yZWcocHJpdiwgMCwgTU1BUF9SRUdfU1RBVFVTKTsKKworCS8qIHN3aXRjaCBiYWNrIHRvIHRoZSBleHRlcm5hbCBpbnRlcnJ1cHQgc291cmNlICovCisJaW93cml0ZTMyYmUoMHgzRiwgcHJpdi0+cmVncyArIFNZU19JUlFfU09VUkNFX0NUTCk7Cit9CisKKy8qKgorICogZGF0YV9kbWFfY2IoKSAtIERNQUVuZ2luZSBjYWxsYmFjayBmb3IgRE1BIGNvbXBsZXRpb24KKyAqIEBkYXRhOiB0aGUgZHJpdmVyJ3MgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZQorICoKKyAqIENvbXBsZXRlIGEgRE1BIHRyYW5zZmVyIGZyb20gdGhlIERBVEEtRlBHQSdzCisgKgorICogVGhpcyBpcyBjYWxsZWQgdmlhIHRoZSBETUEgY2FsbGJhY2sgbWVjaGFuaXNtLCBhbmQgd2lsbCBoYW5kbGUgbW92aW5nIHRoZQorICogY29tcGxldGVkIERNQSB0cmFuc2FjdGlvbiB0byB0aGUgdXNlZCBsaXN0LCBhbmQgdGhlbiB3YWtlIGFueSBwcm9jZXNzZXMKKyAqIHdhaXRpbmcgZm9yIG5ldyBkYXRhCisgKgorICogQ09OVEVYVDogYW55LCBzb2Z0aXJxIGV4cGVjdGVkCisgKi8KK3N0YXRpYyB2b2lkIGRhdGFfZG1hX2NiKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGZwZ2FfZGV2aWNlICpwcml2ID0gZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCS8qIElmIHRoZXJlIGlzIG5vIGluZmxpZ2h0IGJ1ZmZlciwgd2UndmUgZ290IGEgYnVnICovCisJQlVHX09OKHByaXYtPmluZmxpZ2h0ID09IE5VTEwpOworCisJLyogTW92ZSB0aGUgaW5mbGlnaHQgYnVmZmVyIG9udG8gdGhlIHVzZWQgbGlzdCAqLworCWxpc3RfbW92ZV90YWlsKCZwcml2LT5pbmZsaWdodC0+ZW50cnksICZwcml2LT51c2VkKTsKKwlwcml2LT5pbmZsaWdodCA9IE5VTEw7CisKKwkvKiBjbGVhciB0aGUgRlBHQSBzdGF0dXMgYW5kIHJlLWVuYWJsZSBpbnRlcnJ1cHRzICovCisJZGF0YV9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCS8qCisJICogV2UndmUgY2hhbmdlZCBib3RoIHRoZSBpbmZsaWdodCBhbmQgdXNlZCBsaXN0cywgc28gd2UgbmVlZAorCSAqIHRvIHdha2UgdXAgYW55IHByb2Nlc3NlcyB0aGF0IGFyZSBibG9ja2luZyBmb3IgdGhvc2UgZXZlbnRzCisJICovCisJd2FrZV91cCgmcHJpdi0+d2FpdCk7Cit9CisKKy8qKgorICogZGF0YV9zdWJtaXRfZG1hKCkgLSBwcmVwYXJlIGFuZCBzdWJtaXQgdGhlIHJlcXVpcmVkIERNQSB0byBmaWxsIGEgYnVmZmVyCisgKiBAcHJpdjogdGhlIGRyaXZlcidzIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUKKyAqIEBidWY6IHRoZSBkYXRhIGJ1ZmZlcgorICoKKyAqIFByZXBhcmUgYW5kIHN1Ym1pdCB0aGUgbmVjZXNzYXJ5IERNQSB0cmFuc2FjdGlvbnMgdG8gZmlsbCBhIGNvcnJlbGF0aW9uCisgKiBkYXRhIGJ1ZmZlci4KKyAqCisgKiBMT0NLSU5HOiBtdXN0IGhvbGQgZGV2LT5sb2NrCisgKiBDT05URVhUOiBoYXJkaXJxIG9ubHkKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVSUk5PIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IGRhdGFfc3VibWl0X2RtYShzdHJ1Y3QgZnBnYV9kZXZpY2UgKnByaXYsIHN0cnVjdCBkYXRhX2J1ZiAqYnVmKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqZHN0X3NnLCAqc3JjX3NnOworCXVuc2lnbmVkIGludCBkc3RfbmVudHMsIHNyY19uZW50czsKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4gPSBwcml2LT5jaGFuOworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHg7CisJZG1hX2Nvb2tpZV90IGNvb2tpZTsKKwlkbWFfYWRkcl90IGRzdCwgc3JjOworCisJZHN0X3NnID0gYnVmLT52Yi5zZ2xpc3Q7CisJZHN0X25lbnRzID0gYnVmLT52Yi5zZ2xlbjsKKworCXNyY19zZyA9IHByaXYtPmNvcmxfdGFibGUuc2dsOworCXNyY19uZW50cyA9IHByaXYtPmNvcmxfbmVudHM7CisKKwkvKgorCSAqIEFsbCBidWZmZXJzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSByZWFkeSBhbmQgbWFwcGVkCisJICogZm9yIERNQSBhbHJlYWR5LiBUaGVyZWZvcmUsIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgZXhjZXB0CisJICogc3VibWl0IGl0IHRvIHRoZSBGcmVlc2NhbGUgRE1BIEVuZ2luZSBmb3IgcHJvY2Vzc2luZworCSAqLworCisJLyogc2V0dXAgdGhlIHNjYXR0ZXJsaXN0IHRvIHNjYXR0ZXJsaXN0IHRyYW5zZmVyICovCisJdHggPSBjaGFuLT5kZXZpY2UtPmRldmljZV9wcmVwX2RtYV9zZyhjaGFuLAorCQkJCQkgICAgICBkc3Rfc2csIGRzdF9uZW50cywKKwkJCQkJICAgICAgc3JjX3NnLCBzcmNfbmVudHMsCisJCQkJCSAgICAgIDApOworCWlmICghdHgpIHsKKwkJZGV2X2Vycihwcml2LT5kZXYsICJ1bmFibGUgdG8gcHJlcCBzY2F0dGVybGlzdCBETUFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBzdWJtaXQgdGhlIHRyYW5zYWN0aW9uIHRvIHRoZSBETUEgY29udHJvbGxlciAqLworCWNvb2tpZSA9IHR4LT50eF9zdWJtaXQodHgpOworCWlmIChkbWFfc3VibWl0X2Vycm9yKGNvb2tpZSkpIHsKKwkJZGV2X2Vycihwcml2LT5kZXYsICJ1bmFibGUgdG8gc3VibWl0IHNjYXR0ZXJsaXN0IERNQVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIFByZXBhcmUgdGhlIHJlLXJlYWQgb2YgdGhlIFNZUy1GUEdBIGJsb2NrICovCisJZHN0ID0gc2dfZG1hX2FkZHJlc3MoZHN0X3NnKSArIChOVU1fRlBHQSAqIFJFR19CTE9DS19TSVpFKTsKKwlzcmMgPSBTWVNfRlBHQV9CTE9DSzsKKwl0eCA9IGNoYW4tPmRldmljZS0+ZGV2aWNlX3ByZXBfZG1hX21lbWNweShjaGFuLCBkc3QsIHNyYywKKwkJCQkJCSAgUkVHX0JMT0NLX1NJWkUsCisJCQkJCQkgIERNQV9QUkVQX0lOVEVSUlVQVCk7CisJaWYgKCF0eCkgeworCQlkZXZfZXJyKHByaXYtPmRldiwgInVuYWJsZSB0byBwcmVwIFNZUy1GUEdBIERNQVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIFNldHVwIHRoZSBjYWxsYmFjayAqLworCXR4LT5jYWxsYmFjayA9IGRhdGFfZG1hX2NiOworCXR4LT5jYWxsYmFja19wYXJhbSA9IHByaXY7CisKKwkvKiBzdWJtaXQgdGhlIHRyYW5zYWN0aW9uIHRvIHRoZSBETUEgY29udHJvbGxlciAqLworCWNvb2tpZSA9IHR4LT50eF9zdWJtaXQodHgpOworCWlmIChkbWFfc3VibWl0X2Vycm9yKGNvb2tpZSkpIHsKKwkJZGV2X2Vycihwcml2LT5kZXYsICJ1bmFibGUgdG8gc3VibWl0IFNZUy1GUEdBIERNQVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHVybiAwOworfQorCisjZGVmaW5lIENPUkxfRE9ORQkweDEKKyNkZWZpbmUgQ09STF9FUlIJMHgyCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkYXRhX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGZwZ2FfZGV2aWNlICpwcml2ID0gZGV2X2lkOworCWJvb2wgc3VibWl0dGVkID0gZmFsc2U7CisJc3RydWN0IGRhdGFfYnVmICpidWY7CisJdTMyIHN0YXR1czsKKwlpbnQgaTsKKworCS8qIGRldGVjdCBzcHVyaW91cyBpbnRlcnJ1cHRzIHZpYSBGUEdBIHN0YXR1cyAqLworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJc3RhdHVzID0gZnBnYV9yZWFkX3JlZyhwcml2LCBpLCBNTUFQX1JFR19TVEFUVVMpOworCQlpZiAoIShzdGF0dXMgJiAoQ09STF9ET05FIHwgQ09STF9FUlIpKSkgeworCQkJZGV2X2Vycihwcml2LT5kZXYsICJzcHVyaW91cyBpcnEgZGV0ZWN0ZWQgKEZQR0EpXG4iKTsKKwkJCXJldHVybiBJUlFfTk9ORTsKKwkJfQorCX0KKworCS8qIGRldGVjdCBzcHVyaW91cyBpbnRlcnJ1cHRzIHZpYSByYXcgSVJRIHBpbiByZWFkYmFjayAqLworCXN0YXR1cyA9IGlvcmVhZDMyYmUocHJpdi0+cmVncyArIFNZU19JUlFfSU5QVVRfREFUQSk7CisJaWYgKHN0YXR1cyAmIElSUV9DT1JMX0RPTkUpIHsKKwkJZGV2X2Vycihwcml2LT5kZXYsICJzcHVyaW91cyBpcnEgZGV0ZWN0ZWQgKElSUSlcbiIpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKKworCS8qIGhpZGUgdGhlIGludGVycnVwdCBieSBzd2l0Y2hpbmcgdGhlIElSUSBkcml2ZXIgdG8gR1BJTyAqLworCWRhdGFfZGlzYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCisJLyogSWYgdGhlcmUgYXJlIG5vIGZyZWUgYnVmZmVycywgZHJvcCB0aGlzIGRhdGEgKi8KKwlpZiAobGlzdF9lbXB0eSgmcHJpdi0+ZnJlZSkpIHsKKwkJcHJpdi0+bnVtX2Ryb3BwZWQrKzsKKwkJZ290byBvdXQ7CisJfQorCisJYnVmID0gbGlzdF9maXJzdF9lbnRyeSgmcHJpdi0+ZnJlZSwgc3RydWN0IGRhdGFfYnVmLCBlbnRyeSk7CisJbGlzdF9kZWxfaW5pdCgmYnVmLT5lbnRyeSk7CisJQlVHX09OKGJ1Zi0+c2l6ZSAhPSBwcml2LT5idWZzaXplKTsKKworCS8qIFN1Ym1pdCBhIERNQSB0cmFuc2ZlciB0byBnZXQgdGhlIGNvcnJlbGF0aW9uIGRhdGEgKi8KKwlpZiAoZGF0YV9zdWJtaXRfZG1hKHByaXYsIGJ1ZikpIHsKKwkJZGV2X2Vycihwcml2LT5kZXYsICJVbmFibGUgdG8gc2V0dXAgRE1BIHRyYW5zZmVyXG4iKTsKKwkJbGlzdF9tb3ZlX3RhaWwoJmJ1Zi0+ZW50cnksICZwcml2LT5mcmVlKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogU2F2ZSB0aGUgYnVmZmVyIGZvciB0aGUgRE1BIGNhbGxiYWNrICovCisJcHJpdi0+aW5mbGlnaHQgPSBidWY7CisJc3VibWl0dGVkID0gdHJ1ZTsKKworCS8qIFN0YXJ0IHRoZSBETUEgRW5naW5lICovCisJZG1hX2FzeW5jX21lbWNweV9pc3N1ZV9wZW5kaW5nKHByaXYtPmNoYW4pOworCitvdXQ6CisJLyogSWYgbm8gRE1BIHdhcyBzdWJtaXR0ZWQsIHJlLWVuYWJsZSBpbnRlcnJ1cHRzICovCisJaWYgKCFzdWJtaXR0ZWQpCisJCWRhdGFfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CisKKwlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKgorICogUmVhbHRpbWUgRGV2aWNlIEVuYWJsZSBIZWxwZXJzCisgKi8KKworLyoqCisgKiBkYXRhX2RldmljZV9lbmFibGUoKSAtIGVuYWJsZSB0aGUgZGV2aWNlIGZvciBidWZmZXJlZCBkdW1waW5nCisgKiBAcHJpdjogdGhlIGRyaXZlcidzIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUKKyAqCisgKiBFbmFibGUgdGhlIGRldmljZSBmb3IgYnVmZmVyZWQgZHVtcGluZy4gQWxsb2NhdGVzIGJ1ZmZlcnMgYW5kIGhvb2tzIHVwCisgKiB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIFdoZW4gdGhpcyBmaW5pc2hlcywgZGF0YSB3aWxsIGNvbWUgcG91cmluZyBpbi4KKyAqCisgKiBMT0NLSU5HOiBtdXN0IGhvbGQgZGV2LT5tdXRleAorICogQ09OVEVYVDogdXNlciBjb250ZXh0IG9ubHkKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVSUk5PIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IGRhdGFfZGV2aWNlX2VuYWJsZShzdHJ1Y3QgZnBnYV9kZXZpY2UgKnByaXYpCit7CisJdTMyIHZhbDsKKwlpbnQgcmV0OworCisJLyogbXVsdGlwbGUgZW5hYmxlcyBhcmUgc2FmZTogdGhleSBkbyBub3RoaW5nICovCisJaWYgKHByaXYtPmVuYWJsZWQpCisJCXJldHVybiAwOworCisJLyogY2hlY2sgdGhhdCB0aGUgRlBHQXMgYXJlIHByb2dyYW1tZWQgKi8KKwl2YWwgPSBpb3JlYWQzMmJlKHByaXYtPnJlZ3MgKyBTWVNfRlBHQV9DT05GSUdfU1RBVFVTKTsKKwlpZiAoISh2YWwgJiAoMSA8PCAxOCkpKSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAiREFUQS1GUEdBcyBhcmUgbm90IGVuYWJsZWRcbiIpOworCQlyZXR1cm4gLUVOT0RBVEE7CisJfQorCisJLyogcmVhZCB0aGUgRlBHQXMgdG8gY2FsY3VsYXRlIHRoZSBidWZmZXIgc2l6ZSAqLworCXJldCA9IGRhdGFfY2FsY3VsYXRlX2J1ZnNpemUocHJpdik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHByaXYtPmRldiwgInVuYWJsZSB0byBjYWxjdWxhdGUgYnVmZmVyIHNpemVcbiIpOworCQlnb3RvIG91dF9lcnJvcjsKKwl9CisKKwkvKiBhbGxvY2F0ZSB0aGUgY29ycmVsYXRpb24gZGF0YSBidWZmZXJzICovCisJcmV0ID0gZGF0YV9hbGxvY19idWZmZXJzKHByaXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihwcml2LT5kZXYsICJ1bmFibGUgdG8gYWxsb2NhdGUgYnVmZmVyc1xuIik7CisJCWdvdG8gb3V0X2Vycm9yOworCX0KKworCS8qIHNldHVwIHRoZSBzb3VyY2Ugc2NhdHRlcmxpc3QgZm9yIGR1bXBpbmcgY29ycmVsYXRpb24gZGF0YSAqLworCXJldCA9IGRhdGFfc2V0dXBfY29ybF90YWJsZShwcml2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAidW5hYmxlIHRvIHNldHVwIGNvcnJlbGF0aW9uIERNQSB0YWJsZVxuIik7CisJCWdvdG8gb3V0X2Vycm9yOworCX0KKworCS8qIGhvb2t1cCB0aGUgaXJxIGhhbmRsZXIgKi8KKwlyZXQgPSByZXF1ZXN0X2lycShwcml2LT5pcnEsIGRhdGFfaXJxLCBJUlFGX1NIQVJFRCwgZHJ2X25hbWUsIHByaXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihwcml2LT5kZXYsICJ1bmFibGUgdG8gcmVxdWVzdCBJUlEgaGFuZGxlclxuIik7CisJCWdvdG8gb3V0X2Vycm9yOworCX0KKworCS8qIHN3aXRjaCB0byB0aGUgZXh0ZXJuYWwgRlBHQSBJUlEgbGluZSAqLworCWRhdGFfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CisKKwkvKiBzdWNjZXNzLCB3ZSdyZSBlbmFibGVkICovCisJcHJpdi0+ZW5hYmxlZCA9IHRydWU7CisJcmV0dXJuIDA7CisKK291dF9lcnJvcjoKKwlzZ19mcmVlX3RhYmxlKCZwcml2LT5jb3JsX3RhYmxlKTsKKwlwcml2LT5jb3JsX25lbnRzID0gMDsKKworCWRhdGFfZnJlZV9idWZmZXJzKHByaXYpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogZGF0YV9kZXZpY2VfZGlzYWJsZSgpIC0gZGlzYWJsZSB0aGUgZGV2aWNlIGZvciBidWZmZXJlZCBkdW1waW5nCisgKiBAcHJpdjogdGhlIGRyaXZlcidzIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUKKyAqCisgKiBEaXNhYmxlIHRoZSBkZXZpY2UgZm9yIGJ1ZmZlcmVkIGR1bXBpbmcuIFN0b3BzIG5ldyBETUEgdHJhbnNhY3Rpb25zIGZyb20KKyAqIGJlaW5nIGdlbmVyYXRlZCwgd2FpdHMgZm9yIGFsbCBvdXRzdGFuZGluZyBETUEgdG8gY29tcGxldGUsIGFuZCB0aGVuIGZyZWVzCisgKiBhbGwgYnVmZmVycy4KKyAqCisgKiBMT0NLSU5HOiBtdXN0IGhvbGQgZGV2LT5tdXRleAorICogQ09OVEVYVDogdXNlciBvbmx5CisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FUlJOTyBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCBkYXRhX2RldmljZV9kaXNhYmxlKHN0cnVjdCBmcGdhX2RldmljZSAqcHJpdikKK3sKKwlpbnQgcmV0OworCisJLyogYWxsb3cgbXVsdGlwbGUgZGlzYWJsZSAqLworCWlmICghcHJpdi0+ZW5hYmxlZCkKKwkJcmV0dXJuIDA7CisKKwkvKiBzd2l0Y2ggdG8gdGhlIGludGVybmFsIEdQSU8gSVJRIGxpbmUgKi8KKwlkYXRhX2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKKworCS8qIHVuaG9vayB0aGUgaXJxIGhhbmRsZXIgKi8KKwlmcmVlX2lycShwcml2LT5pcnEsIHByaXYpOworCisJLyoKKwkgKiB3YWl0IGZvciBhbGwgb3V0c3RhbmRpbmcgRE1BIHRvIGNvbXBsZXRlCisJICoKKwkgKiBEZXZpY2UgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQsIHRoZXJlZm9yZSBhbm90aGVyIGJ1ZmZlciBjYW5ub3QKKwkgKiBiZSBtYXJrZWQgaW5mbGlnaHQuCisJICovCisJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHByaXYtPndhaXQsIHByaXYtPmluZmxpZ2h0ID09IE5VTEwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBmcmVlIHRoZSBjb3JyZWxhdGlvbiB0YWJsZSAqLworCXNnX2ZyZWVfdGFibGUoJnByaXYtPmNvcmxfdGFibGUpOworCXByaXYtPmNvcmxfbmVudHMgPSAwOworCisJLyoKKwkgKiBXZSBhcmUgdGFraW5nIHRoZSBzcGlubG9jayBub3QgdG8gcHJvdGVjdCBwcml2LT5lbmFibGVkLCBidXQgaW5zdGVhZAorCSAqIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIGFyZSBubyByZWFkZXJzIGluIHRoZSBwcm9jZXNzIG9mIGFsdGVyaW5nCisJICogdGhlIGZyZWUgb3IgdXNlZCBsaXN0cyB3aGlsZSB3ZSBhcmUgc2V0dGluZyB0aGlzIGZsYWcuCisJICovCisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CisJcHJpdi0+ZW5hYmxlZCA9IGZhbHNlOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CisKKwkvKiBmcmVlIGFsbCBidWZmZXJzOiB0aGUgZnJlZSBhbmQgdXNlZCBsaXN0cyBhcmUgbm90IGJlaW5nIGNoYW5nZWQgKi8KKwlkYXRhX2ZyZWVfYnVmZmVycyhwcml2KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIERFQlVHRlMgSW50ZXJmYWNlCisgKi8KKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKworLyoKKyAqIENvdW50IHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgZ2l2ZW4gbGlzdAorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGxpc3RfbnVtX2VudHJpZXMoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKKwl1bnNpZ25lZCBpbnQgcmV0ID0gMDsKKworCWxpc3RfZm9yX2VhY2goZW50cnksIGxpc3QpCisJCXJldCsrOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkYXRhX2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICpvZmZzZXQpCit7CisJc3RydWN0IGZwZ2FfZGV2aWNlICpwcml2ID0gZi0+cHJpdmF0ZTsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBMb2NrIHRoZSBtdXRleCBmaXJzdCwgc28gdGhhdCB3ZSBnZXQgYW4gYWNjdXJhdGUgdmFsdWUgZm9yIGVuYWJsZQorCSAqIExvY2sgdGhlIHNwaW5sb2NrIG5leHQsIHRvIGdldCBhY2N1cmF0ZSBsaXN0IGNvdW50cworCSAqLworCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcHJpdi0+bXV0ZXgpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKKworCXNlcV9wcmludGYoZiwgImVuYWJsZWQ6ICVkXG4iLCBwcml2LT5lbmFibGVkKTsKKwlzZXFfcHJpbnRmKGYsICJidWZzaXplOiAlZFxuIiwgcHJpdi0+YnVmc2l6ZSk7CisJc2VxX3ByaW50ZihmLCAibnVtX2J1ZmZlcnM6ICVkXG4iLCBwcml2LT5udW1fYnVmZmVycyk7CisJc2VxX3ByaW50ZihmLCAibnVtX2ZyZWU6ICVkXG4iLCBsaXN0X251bV9lbnRyaWVzKCZwcml2LT5mcmVlKSk7CisJc2VxX3ByaW50ZihmLCAiaW5mbGlnaHQ6ICVkXG4iLCBwcml2LT5pbmZsaWdodCAhPSBOVUxMKTsKKwlzZXFfcHJpbnRmKGYsICJudW1fdXNlZDogJWRcbiIsIGxpc3RfbnVtX2VudHJpZXMoJnByaXYtPnVzZWQpKTsKKwlzZXFfcHJpbnRmKGYsICJudW1fZHJvcHBlZDogJWRcbiIsIHByaXYtPm51bV9kcm9wcGVkKTsKKworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGF0YV9kZWJ1Z19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBkYXRhX2RlYnVnX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkYXRhX2RlYnVnX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGRhdGFfZGVidWdfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBkYXRhX2RlYnVnZnNfaW5pdChzdHJ1Y3QgZnBnYV9kZXZpY2UgKnByaXYpCit7CisJcHJpdi0+ZGJnX2VudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZShkcnZfbmFtZSwgU19JUlVHTywgTlVMTCwgcHJpdiwKKwkJCQkJICAgICAgJmRhdGFfZGVidWdfZm9wcyk7CisJaWYgKElTX0VSUihwcml2LT5kYmdfZW50cnkpKQorCQlyZXR1cm4gUFRSX0VSUihwcml2LT5kYmdfZW50cnkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRhdGFfZGVidWdmc19leGl0KHN0cnVjdCBmcGdhX2RldmljZSAqcHJpdikKK3sKKwlkZWJ1Z2ZzX3JlbW92ZShwcml2LT5kYmdfZW50cnkpOworfQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIGludCBkYXRhX2RlYnVnZnNfaW5pdChzdHJ1Y3QgZnBnYV9kZXZpY2UgKnByaXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkYXRhX2RlYnVnZnNfZXhpdChzdHJ1Y3QgZnBnYV9kZXZpY2UgKnByaXYpCit7Cit9CisKKyNlbmRpZgkvKiBDT05GSUdfREVCVUdfRlMgKi8KKworLyoKKyAqIFNZU0ZTIEF0dHJpYnV0ZXMKKyAqLworCitzdGF0aWMgc3NpemVfdCBkYXRhX2VuX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICBjaGFyICpidWYpCit7CisJc3RydWN0IGZwZ2FfZGV2aWNlICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXVcbiIsIHByaXYtPmVuYWJsZWQpOworfQorCitzdGF0aWMgc3NpemVfdCBkYXRhX2VuX3NldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGZwZ2FfZGV2aWNlICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyBlbmFibGU7CisJaW50IHJldDsKKworCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJmVuYWJsZSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHByaXYtPmRldiwgInVuYWJsZSB0byBwYXJzZSBlbmFibGUgaW5wdXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnByaXYtPm11dGV4KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGVuYWJsZSkKKwkJcmV0ID0gZGF0YV9kZXZpY2VfZW5hYmxlKHByaXYpOworCWVsc2UKKwkJcmV0ID0gZGF0YV9kZXZpY2VfZGlzYWJsZShwcml2KTsKKworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihwcml2LT5kZXYsICJkZXZpY2UgJXMgZmFpbGVkXG4iLAorCQkJZW5hYmxlID8gImVuYWJsZSIgOiAiZGlzYWJsZSIpOworCQljb3VudCA9IHJldDsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihlbmFibGUsIFNfSVdVU1IgfCBTX0lSVUdPLCBkYXRhX2VuX3Nob3csIGRhdGFfZW5fc2V0KTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhdGFfc3lzZnNfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfZW5hYmxlLmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHJ0X3N5c2ZzX2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gZGF0YV9zeXNmc19hdHRycywKK307CisKKy8qCisgKiBGUEdBIFJlYWx0aW1lIERhdGEgQ2hhcmFjdGVyIERldmljZQorICovCisKK3N0YXRpYyBpbnQgZGF0YV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCS8qCisJICogVGhlIG1pc2NkZXZpY2UgbGF5ZXIgcHV0cyBvdXIgc3RydWN0IG1pc2NkZXZpY2UgaW50byB0aGUKKwkgKiBmaWxwLT5wcml2YXRlX2RhdGEgZmllbGQuIFdlIHVzZSB0aGlzIHRvIGZpbmQgb3VyIHByaXZhdGUKKwkgKiBkYXRhIGFuZCB0aGVuIG92ZXJ3cml0ZSBpdCB3aXRoIG91ciBvd24gcHJpdmF0ZSBzdHJ1Y3R1cmUuCisJICovCisJc3RydWN0IGZwZ2FfZGV2aWNlICpwcml2ID0gY29udGFpbmVyX29mKGZpbHAtPnByaXZhdGVfZGF0YSwKKwkJCQkJCXN0cnVjdCBmcGdhX2RldmljZSwgbWlzY2Rldik7CisJc3RydWN0IGZwZ2FfcmVhZGVyICpyZWFkZXI7CisJaW50IHJldDsKKworCS8qIGFsbG9jYXRlIHByaXZhdGUgZGF0YSAqLworCXJlYWRlciA9IGt6YWxsb2Moc2l6ZW9mKCpyZWFkZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlYWRlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZWFkZXItPnByaXYgPSBwcml2OworCXJlYWRlci0+YnVmID0gTlVMTDsKKworCWZpbHAtPnByaXZhdGVfZGF0YSA9IHJlYWRlcjsKKwlyZXQgPSBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAibm9uc2Vla2FibGUtb3BlbiBmYWlsZWRcbiIpOworCQlrZnJlZShyZWFkZXIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qCisJICogc3VjY2VzcywgaW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZQorCSAqIHNvIHRoYXQgaXQgZG9lc24ndCBkaXNhcHBlYXIgaWYgdGhlIGRldmljZSBpcyB1bmJvdW5kCisJICovCisJa3JlZl9nZXQoJnByaXYtPnJlZik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGF0YV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBmcGdhX3JlYWRlciAqcmVhZGVyID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBmcGdhX2RldmljZSAqcHJpdiA9IHJlYWRlci0+cHJpdjsKKworCS8qIGZyZWUgdGhlIHBlci1yZWFkZXIgc3RydWN0dXJlICovCisJZGF0YV9mcmVlX2J1ZmZlcihyZWFkZXItPmJ1Zik7CisJa2ZyZWUocmVhZGVyKTsKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCisJLyogZGVjcmVtZW50IG91ciByZWZlcmVuY2UgY291bnQgdG8gdGhlIHByaXZhdGUgZGF0YSAqLworCWtyZWZfcHV0KCZwcml2LT5yZWYsIGZwZ2FfZGV2aWNlX3JlbGVhc2UpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBkYXRhX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgY291bnQsCisJCQkgbG9mZl90ICpmX3BvcykKK3sKKwlzdHJ1Y3QgZnBnYV9yZWFkZXIgKnJlYWRlciA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZnBnYV9kZXZpY2UgKnByaXYgPSByZWFkZXItPnByaXY7CisJc3RydWN0IGxpc3RfaGVhZCAqdXNlZCA9ICZwcml2LT51c2VkOworCXN0cnVjdCBkYXRhX2J1ZiAqZGJ1ZjsKKwlzaXplX3QgYXZhaWw7CisJdm9pZCAqZGF0YTsKKwlpbnQgcmV0OworCisJLyogY2hlY2sgaWYgd2UgYWxyZWFkeSBoYXZlIGEgcGFydGlhbCBidWZmZXIgKi8KKwlpZiAocmVhZGVyLT5idWYpIHsKKwkJZGJ1ZiA9IHJlYWRlci0+YnVmOworCQlnb3RvIGhhdmVfYnVmZmVyOworCX0KKworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOworCisJLyogQmxvY2sgdW50aWwgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGJ1ZmZlciBvbiB0aGUgdXNlZCBsaXN0ICovCisJd2hpbGUgKGxpc3RfZW1wdHkodXNlZCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKKworCQlpZiAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCisJCQlyZXR1cm4gLUVBR0FJTjsKKworCQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocHJpdi0+d2FpdCwgIWxpc3RfZW1wdHkodXNlZCkpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKKwl9CisKKwkvKiBHcmFiIHRoZSBmaXJzdCBidWZmZXIgb2ZmIG9mIHRoZSB1c2VkIGxpc3QgKi8KKwlkYnVmID0gbGlzdF9maXJzdF9lbnRyeSh1c2VkLCBzdHJ1Y3QgZGF0YV9idWYsIGVudHJ5KTsKKwlsaXN0X2RlbF9pbml0KCZkYnVmLT5lbnRyeSk7CisKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOworCisJLyogQnVmZmVycyBhcmUgYWx3YXlzIG1hcHBlZDogdW5tYXAgaXQgKi8KKwl2aWRlb2J1Zl9kbWFfdW5tYXAocHJpdi0+ZGV2LCAmZGJ1Zi0+dmIpOworCisJLyogc2F2ZSB0aGUgYnVmZmVyIGZvciBsYXRlciAqLworCXJlYWRlci0+YnVmID0gZGJ1ZjsKKwlyZWFkZXItPmJ1Zl9zdGFydCA9IDA7CisKK2hhdmVfYnVmZmVyOgorCS8qIEdldCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSAqLworCWF2YWlsID0gZGJ1Zi0+c2l6ZSAtIHJlYWRlci0+YnVmX3N0YXJ0OworCWRhdGEgPSBkYnVmLT52Yi52YWRkciArIHJlYWRlci0+YnVmX3N0YXJ0OworCisJLyogR2V0IHRoZSBudW1iZXIgb2YgYnl0ZXMgd2UgY2FuIHRyYW5zZmVyICovCisJY291bnQgPSBtaW4oY291bnQsIGF2YWlsKTsKKworCS8qIENvcHkgdGhlIGRhdGEgdG8gdGhlIHVzZXJzcGFjZSBidWZmZXIgKi8KKwlpZiAoY29weV90b191c2VyKHVidWYsIGRhdGEsIGNvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiBVcGRhdGUgdGhlIGFtb3VudCBvZiBhdmFpbGFibGUgc3BhY2UgKi8KKwlhdmFpbCAtPSBjb3VudDsKKworCS8qCisJICogSWYgdGhlcmUgaXMgc3RpbGwgc29tZSBkYXRhIGF2YWlsYWJsZSwgc2F2ZSB0aGUgYnVmZmVyIGZvciB0aGUKKwkgKiBuZXh0IHVzZXJzcGFjZSBjYWxsIHRvIHJlYWQoKSBhbmQgcmV0dXJuCisJICovCisJaWYgKGF2YWlsID4gMCkgeworCQlyZWFkZXItPmJ1Zl9zdGFydCArPSBjb3VudDsKKwkJcmVhZGVyLT5idWYgPSBkYnVmOworCQlyZXR1cm4gY291bnQ7CisJfQorCisJLyoKKwkgKiBHZXQgdGhlIGJ1ZmZlciByZWFkeSB0byBiZSByZXVzZWQgZm9yIERNQQorCSAqCisJICogSWYgaXQgZmFpbHMsIHdlIHByZXRlbmQgdGhhdCB0aGUgcmVhZCBuZXZlciBoYXBwZWQgYW5kIHJldHVybgorCSAqIC1FRkFVTFQgdG8gdXNlcnNwYWNlLiBUaGUgcmVhZCB3aWxsIGJlIHJldHJpZWQuCisJICovCisJcmV0ID0gdmlkZW9idWZfZG1hX21hcChwcml2LT5kZXYsICZkYnVmLT52Yik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHByaXYtPmRldiwgInVuYWJsZSB0byByZW1hcCBidWZmZXIgZm9yIERNQVxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCS8qIExvY2sgYWdhaW5zdCBjb25jdXJyZW50IGVuYWJsZS9kaXNhYmxlICovCisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CisKKwkvKiB0aGUgcmVhZGVyIGlzIGZpbmlzaGVkIHdpdGggdGhpcyBidWZmZXIgKi8KKwlyZWFkZXItPmJ1ZiA9IE5VTEw7CisKKwkvKgorCSAqIE9uZSBvZiB0d28gdGhpbmdzIGhhcyBoYXBwZW5lZCwgdGhlIGRldmljZSBpcyBkaXNhYmxlZCwgb3IgdGhlCisJICogZGV2aWNlIGhhcyBiZWVuIHJlY29uZmlndXJlZCB1bmRlcm5lYXRoIHVzLiBJbiBlaXRoZXIgY2FzZSwgd2UKKwkgKiBzaG91bGQganVzdCB0aHJvdyBhd2F5IHRoZSBidWZmZXIuCisJICovCisJaWYgKCFwcml2LT5lbmFibGVkIHx8IGRidWYtPnNpemUgIT0gcHJpdi0+YnVmc2l6ZSkgeworCQl2aWRlb2J1Zl9kbWFfdW5tYXAocHJpdi0+ZGV2LCAmZGJ1Zi0+dmIpOworCQlkYXRhX2ZyZWVfYnVmZmVyKGRidWYpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJLyogVGhlIGJ1ZmZlciBpcyBzYWZlIHRvIHJldXNlLCBzbyBhZGQgaXQgYmFjayB0byB0aGUgZnJlZSBsaXN0ICovCisJbGlzdF9hZGRfdGFpbCgmZGJ1Zi0+ZW50cnksICZwcml2LT5mcmVlKTsKKworb3V0X3VubG9jazoKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBkYXRhX3BvbGwoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqdGJsKQoreworCXN0cnVjdCBmcGdhX3JlYWRlciAqcmVhZGVyID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBmcGdhX2RldmljZSAqcHJpdiA9IHJlYWRlci0+cHJpdjsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CisKKwlwb2xsX3dhaXQoZmlscCwgJnByaXYtPndhaXQsIHRibCk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnByaXYtPnVzZWQpKQorCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07CisKKwlyZXR1cm4gbWFzazsKK30KKworc3RhdGljIGludCBkYXRhX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBmcGdhX3JlYWRlciAqcmVhZGVyID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBmcGdhX2RldmljZSAqcHJpdiA9IHJlYWRlci0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCwgdnNpemUsIHBzaXplLCBhZGRyOworCisJLyogVk1BIHByb3BlcnRpZXMgKi8KKwlvZmZzZXQgPSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7CisJdnNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7CisJcHNpemUgPSBwcml2LT5waHlzX3NpemUgLSBvZmZzZXQ7CisJYWRkciA9IChwcml2LT5waHlzX2FkZHIgKyBvZmZzZXQpID4+IFBBR0VfU0hJRlQ7CisKKwkvKiBDaGVjayBhZ2FpbnN0IHRoZSBGUEdBIHJlZ2lvbidzIHBoeXNpY2FsIG1lbW9yeSBzaXplICovCisJaWYgKHZzaXplID4gcHNpemUpIHsKKwkJZGV2X2Vycihwcml2LT5kZXYsICJyZXF1ZXN0ZWQgbW1hcCBtYXBwaW5nIHRvbyBsYXJnZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIElPIG1lbW9yeSAoc3RvcCBjYWNoZWluZykgKi8KKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX0lPIHwgVk1fUkVTRVJWRUQ7CisJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYS0+dm1fcGFnZV9wcm90KTsKKworCXJldHVybiBpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCBhZGRyLCB2c2l6ZSwKKwkJCQkgIHZtYS0+dm1fcGFnZV9wcm90KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGF0YV9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBkYXRhX29wZW4sCisJLnJlbGVhc2UJPSBkYXRhX3JlbGVhc2UsCisJLnJlYWQJCT0gZGF0YV9yZWFkLAorCS5wb2xsCQk9IGRhdGFfcG9sbCwKKwkubW1hcAkJPSBkYXRhX21tYXAsCisJLmxsc2VlawkJPSBub19sbHNlZWssCit9OworCisvKgorICogT3BlbkZpcm13YXJlIERldmljZSBTdWJzeXN0ZW0KKyAqLworCitzdGF0aWMgYm9vbCBkbWFfZmlsdGVyKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgdm9pZCAqZGF0YSkKK3sKKwkvKgorCSAqIERNQSBDaGFubmVsICMwIGlzIHVzZWQgZm9yIHRoZSBGUEdBIFByb2dyYW1tZXIsIHNvIGlnbm9yZSBpdAorCSAqCisJICogVGhpcyBwcm9iYWJseSB3b24ndCBzdXJ2aXZlIGFuIHVubG9hZC9sb2FkIGN5Y2xlIG9mIHRoZSBGcmVlc2NhbGUKKwkgKiBETUFFbmdpbmUgZHJpdmVyLCBidXQgdGhhdCB3b24ndCBiZSBhIHByb2JsZW0KKwkgKi8KKwlpZiAoY2hhbi0+Y2hhbl9pZCA9PSAwICYmIGNoYW4tPmRldmljZS0+ZGV2X2lkID09IDApCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50IGRhdGFfb2ZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3AsCisJCQkgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlID0gb3AtPmRldi5vZl9ub2RlOworCXN0cnVjdCBkZXZpY2UgKnRoaXNfZGV2aWNlOworCXN0cnVjdCBmcGdhX2RldmljZSAqcHJpdjsKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzOworCWRtYV9jYXBfbWFza190IG1hc2s7CisJaW50IHJldDsKKworCS8qIEFsbG9jYXRlIHByaXZhdGUgZGF0YSAqLworCXByaXYgPSBremFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikgeworCQlkZXZfZXJyKCZvcC0+ZGV2LCAiVW5hYmxlIHRvIGFsbG9jYXRlIGRldmljZSBwcml2YXRlIGRhdGFcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9yZXR1cm47CisJfQorCisJZGV2X3NldF9kcnZkYXRhKCZvcC0+ZGV2LCBwcml2KTsKKwlwcml2LT5kZXYgPSAmb3AtPmRldjsKKwlrcmVmX2luaXQoJnByaXYtPnJlZik7CisJbXV0ZXhfaW5pdCgmcHJpdi0+bXV0ZXgpOworCisJZGV2X3NldF9kcnZkYXRhKHByaXYtPmRldiwgcHJpdik7CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZwcml2LT5mcmVlKTsKKwlJTklUX0xJU1RfSEVBRCgmcHJpdi0+dXNlZCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+d2FpdCk7CisKKwkvKiBTZXR1cCB0aGUgbWlzYyBkZXZpY2UgKi8KKwlwcml2LT5taXNjZGV2Lm1pbm9yID0gTUlTQ19EWU5BTUlDX01JTk9SOworCXByaXYtPm1pc2NkZXYubmFtZSA9IGRydl9uYW1lOworCXByaXYtPm1pc2NkZXYuZm9wcyA9ICZkYXRhX2ZvcHM7CisKKwkvKiBHZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIEZQR0EgcmVnaXN0ZXJzICovCisJcmV0ID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShvZl9ub2RlLCAwLCAmcmVzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJm9wLT5kZXYsICJVbmFibGUgdG8gZmluZCBGUEdBIHBoeXNpY2FsIGFkZHJlc3NcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9mcmVlX3ByaXY7CisJfQorCisJcHJpdi0+cGh5c19hZGRyID0gcmVzLnN0YXJ0OworCXByaXYtPnBoeXNfc2l6ZSA9IHJlc291cmNlX3NpemUoJnJlcyk7CisKKwkvKiBpb3JlbWFwIHRoZSByZWdpc3RlcnMgZm9yIHVzZSAqLworCXByaXYtPnJlZ3MgPSBvZl9pb21hcChvZl9ub2RlLCAwKTsKKwlpZiAoIXByaXYtPnJlZ3MpIHsKKwkJZGV2X2Vycigmb3AtPmRldiwgIlVuYWJsZSB0byBpb3JlbWFwIHJlZ2lzdGVyc1xuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2ZyZWVfcHJpdjsKKwl9CisKKwlkbWFfY2FwX3plcm8obWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX01FTUNQWSwgbWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX0lOVEVSUlVQVCwgbWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBtYXNrKTsKKwlkbWFfY2FwX3NldChETUFfU0csIG1hc2spOworCisJLyogUmVxdWVzdCBhIERNQSBjaGFubmVsICovCisJcHJpdi0+Y2hhbiA9IGRtYV9yZXF1ZXN0X2NoYW5uZWwobWFzaywgZG1hX2ZpbHRlciwgTlVMTCk7CisJaWYgKCFwcml2LT5jaGFuKSB7CisJCWRldl9lcnIoJm9wLT5kZXYsICJVbmFibGUgdG8gcmVxdWVzdCBETUEgY2hhbm5lbFxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X3VubWFwX3JlZ3M7CisJfQorCisJLyogRmluZCB0aGUgY29ycmVjdCBJUlEgbnVtYmVyICovCisJcHJpdi0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAob2Zfbm9kZSwgMCk7CisJaWYgKHByaXYtPmlycSA9PSBOT19JUlEpIHsKKwkJZGV2X2Vycigmb3AtPmRldiwgIlVuYWJsZSB0byBmaW5kIElSUSBsaW5lXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfcmVsZWFzZV9kbWE7CisJfQorCisJLyogRHJpdmUgdGhlIEdQSU8gZm9yIEZQR0EgSVJRIGhpZ2ggKG5vIGludGVycnVwdCkgKi8KKwlpb3dyaXRlMzJiZShJUlFfQ09STF9ET05FLCBwcml2LT5yZWdzICsgU1lTX0lSUV9PVVRQVVRfREFUQSk7CisKKwkvKiBSZWdpc3RlciB0aGUgbWlzY2RldmljZSAqLworCXJldCA9IG1pc2NfcmVnaXN0ZXIoJnByaXYtPm1pc2NkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycigmb3AtPmRldiwgIlVuYWJsZSB0byByZWdpc3RlciBtaXNjZGV2aWNlXG4iKTsKKwkJZ290byBvdXRfaXJxX2Rpc3Bvc2VfbWFwcGluZzsKKwl9CisKKwkvKiBDcmVhdGUgdGhlIGRlYnVnZnMgZmlsZXMgKi8KKwlyZXQgPSBkYXRhX2RlYnVnZnNfaW5pdChwcml2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJm9wLT5kZXYsICJVbmFibGUgdG8gY3JlYXRlIGRlYnVnZnMgZmlsZXNcbiIpOworCQlnb3RvIG91dF9taXNjX2RlcmVnaXN0ZXI7CisJfQorCisJLyogQ3JlYXRlIHRoZSBzeXNmcyBmaWxlcyAqLworCXRoaXNfZGV2aWNlID0gcHJpdi0+bWlzY2Rldi50aGlzX2RldmljZTsKKwlkZXZfc2V0X2RydmRhdGEodGhpc19kZXZpY2UsIHByaXYpOworCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmdGhpc19kZXZpY2UtPmtvYmosICZydF9zeXNmc19hdHRyX2dyb3VwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJm9wLT5kZXYsICJVbmFibGUgdG8gY3JlYXRlIHN5c2ZzIGZpbGVzXG4iKTsKKwkJZ290byBvdXRfZGF0YV9kZWJ1Z2ZzX2V4aXQ7CisJfQorCisJZGV2X2luZm8oJm9wLT5kZXYsICJDQVJNQSBGUEdBIFJlYWx0aW1lIERhdGEgRHJpdmVyIExvYWRlZFxuIik7CisJcmV0dXJuIDA7CisKK291dF9kYXRhX2RlYnVnZnNfZXhpdDoKKwlkYXRhX2RlYnVnZnNfZXhpdChwcml2KTsKK291dF9taXNjX2RlcmVnaXN0ZXI6CisJbWlzY19kZXJlZ2lzdGVyKCZwcml2LT5taXNjZGV2KTsKK291dF9pcnFfZGlzcG9zZV9tYXBwaW5nOgorCWlycV9kaXNwb3NlX21hcHBpbmcocHJpdi0+aXJxKTsKK291dF9yZWxlYXNlX2RtYToKKwlkbWFfcmVsZWFzZV9jaGFubmVsKHByaXYtPmNoYW4pOworb3V0X3VubWFwX3JlZ3M6CisJaW91bm1hcChwcml2LT5yZWdzKTsKK291dF9mcmVlX3ByaXY6CisJa3JlZl9wdXQoJnByaXYtPnJlZiwgZnBnYV9kZXZpY2VfcmVsZWFzZSk7CitvdXRfcmV0dXJuOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZGF0YV9vZl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3ApCit7CisJc3RydWN0IGZwZ2FfZGV2aWNlICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZvcC0+ZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlICp0aGlzX2RldmljZSA9IHByaXYtPm1pc2NkZXYudGhpc19kZXZpY2U7CisKKwkvKiByZW1vdmUgYWxsIHN5c2ZzIGZpbGVzLCBub3cgdGhlIGRldmljZSBjYW5ub3QgYmUgcmUtZW5hYmxlZCAqLworCXN5c2ZzX3JlbW92ZV9ncm91cCgmdGhpc19kZXZpY2UtPmtvYmosICZydF9zeXNmc19hdHRyX2dyb3VwKTsKKworCS8qIHJlbW92ZSBhbGwgZGVidWdmcyBmaWxlcyAqLworCWRhdGFfZGVidWdmc19leGl0KHByaXYpOworCisJLyogZGlzYWJsZSB0aGUgZGV2aWNlIGZyb20gZ2VuZXJhdGluZyBkYXRhICovCisJZGF0YV9kZXZpY2VfZGlzYWJsZShwcml2KTsKKworCS8qIHJlbW92ZSB0aGUgY2hhcmFjdGVyIGRldmljZSB0byBzdG9wIG5ldyByZWFkZXJzIGZyb20gYXBwZWFyaW5nICovCisJbWlzY19kZXJlZ2lzdGVyKCZwcml2LT5taXNjZGV2KTsKKworCS8qIGNsZWFudXAgZXZlcnl0aGluZyBub3QgbmVlZGVkIGJ5IHJlYWRlcnMgKi8KKwlpcnFfZGlzcG9zZV9tYXBwaW5nKHByaXYtPmlycSk7CisJZG1hX3JlbGVhc2VfY2hhbm5lbChwcml2LT5jaGFuKTsKKwlpb3VubWFwKHByaXYtPnJlZ3MpOworCisJLyogcmVsZWFzZSBvdXIgcmVmZXJlbmNlICovCisJa3JlZl9wdXQoJnByaXYtPnJlZiwgZnBnYV9kZXZpY2VfcmVsZWFzZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGRhdGFfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImNhcm1hLGNhcm1hLWZwZ2EiLCB9LAorCXt9LAorfTsKKworc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgZGF0YV9vZl9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGRhdGFfb2ZfcHJvYmUsCisJLnJlbW92ZQkJPSBkYXRhX29mX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJCT0gZHJ2X25hbWUsCisJCS5vZl9tYXRjaF90YWJsZQk9IGRhdGFfb2ZfbWF0Y2gsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworLyoKKyAqIE1vZHVsZSBJbml0IC8gRXhpdAorICovCisKK3N0YXRpYyBpbnQgX19pbml0IGRhdGFfaW5pdCh2b2lkKQoreworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmRhdGFfb2ZfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRhdGFfZXhpdCh2b2lkKQoreworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZkYXRhX29mX2RyaXZlcik7Cit9CisKK01PRFVMRV9BVVRIT1IoIklyYSBXLiBTbnlkZXIgPGl3c0BvdnJvLmNhbHRlY2guZWR1PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDQVJNQSBEQVRBLUZQR0EgQWNjZXNzIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfaW5pdChkYXRhX2luaXQpOworbW9kdWxlX2V4aXQoZGF0YV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZhdWx0LmMgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmYXVsdC5jCmluZGV4IDM4NjU3Y2QuLmM0YWNhYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZhdWx0LmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmF1bHQuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgImdydS5oIgogI2luY2x1ZGUgImdydXRhYmxlcy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1bWFpbi5jIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1bWFpbi5jCmluZGV4IGY4NTM4YmIuLmFlMTZjOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydW1haW4uYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVtYWluLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlIDxhc20vdXYvdXZfaHViLmg+CiAjaW5jbHVkZSAiZ3J1LmgiCiAjaW5jbHVkZSAiZ3J1dGFibGVzLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvdGktc3QvS2NvbmZpZyBiL2RyaXZlcnMvbWlzYy90aS1zdC9LY29uZmlnCmluZGV4IDJjOGMzZjMuLmFiYjVkZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy90aS1zdC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWlzYy90aS1zdC9LY29uZmlnCkBAIC01LDcgKzUsNyBAQAogbWVudSAiVGV4YXMgSW5zdHJ1bWVudHMgc2hhcmVkIHRyYW5zcG9ydCBsaW5lIGRpc2NpcGxpbmUiCiBjb25maWcgVElfU1QKIAl0cmlzdGF0ZSAiU2hhcmVkIHRyYW5zcG9ydCBjb3JlIGRyaXZlciIKLQlkZXBlbmRzIG9uIFJGS0lMTAorCWRlcGVuZHMgb24gTkVUICYmIEdQSU9MSUIKIAlzZWxlY3QgRldfTE9BREVSCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHRoZSBzaGFyZWQgdHJhbnNwb3J0IGNvcmUgZHJpdmVyIGZvciBUSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3RpLXN0L3N0X2NvcmUuYyBiL2RyaXZlcnMvbWlzYy90aS1zdC9zdF9jb3JlLmMKaW5kZXggNDg2MTE3Zi4uZjkxZjgyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3RpLXN0L3N0X2NvcmUuYworKysgYi9kcml2ZXJzL21pc2MvdGktc3Qvc3RfY29yZS5jCkBAIC00MywxMyArNDMsMTUgQEAKIAlwcl9pbmZvKCIlczogaWQgJWRcbiIsIF9fZnVuY19fLCBuZXdfcHJvdG8tPmNobmxfaWQpOwogCS8qIGxpc3Qgbm93IGhhcyB0aGUgY2hhbm5lbCBpZCBhcyBpbmRleCBpdHNlbGYgKi8KIAlzdF9nZGF0YS0+bGlzdFtuZXdfcHJvdG8tPmNobmxfaWRdID0gbmV3X3Byb3RvOworCXN0X2dkYXRhLT5pc19yZWdpc3RlcmVkW25ld19wcm90by0+Y2hubF9pZF0gPSB0cnVlOwogfQogCiBzdGF0aWMgdm9pZCByZW1vdmVfY2hhbm5lbF9mcm9tX3RhYmxlKHN0cnVjdCBzdF9kYXRhX3MgKnN0X2dkYXRhLAogCQlzdHJ1Y3Qgc3RfcHJvdG9fcyAqcHJvdG8pCiB7CiAJcHJfaW5mbygiJXM6IGlkICVkXG4iLCBfX2Z1bmNfXywgcHJvdG8tPmNobmxfaWQpOwotCXN0X2dkYXRhLT5saXN0W3Byb3RvLT5jaG5sX2lkXSA9IE5VTEw7CisvKglzdF9nZGF0YS0+bGlzdFtwcm90by0+Y2hubF9pZF0gPSBOVUxMOyAqLworCXN0X2dkYXRhLT5pc19yZWdpc3RlcmVkW3Byb3RvLT5jaG5sX2lkXSA9IGZhbHNlOwogfQogCiAvKgpAQCAtMTA0LDcgKzEwNiw3IEBACiAKIAlpZiAodW5saWtlbHkKIAkgICAgKHN0X2dkYXRhID09IE5VTEwgfHwgc3RfZ2RhdGEtPnJ4X3NrYiA9PSBOVUxMCi0JICAgICB8fCBzdF9nZGF0YS0+bGlzdFtjaG5sX2lkXSA9PSBOVUxMKSkgeworCSAgICAgfHwgc3RfZ2RhdGEtPmlzX3JlZ2lzdGVyZWRbY2hubF9pZF0gPT0gZmFsc2UpKSB7CiAJCXByX2VycigiY2hubF9pZCAlZCBub3QgcmVnaXN0ZXJlZCwgbm8gZGF0YSB0byBzZW5kPyIsCiAJCQkgICBjaG5sX2lkKTsKIAkJa2ZyZWVfc2tiKHN0X2dkYXRhLT5yeF9za2IpOwpAQCAtMTQxLDE0ICsxNDMsMTUgQEAKIAl1bnNpZ25lZCBjaGFyIGkgPSAwOwogCXByX2luZm8oIiAlcyAiLCBfX2Z1bmNfXyk7CiAJZm9yIChpID0gMDsgaSA8IFNUX01BWF9DSEFOTkVMUzsgaSsrKSB7Ci0JCWlmIChsaWtlbHkoc3RfZ2RhdGEgIT0gTlVMTCAmJiBzdF9nZGF0YS0+bGlzdFtpXSAhPSBOVUxMICYmCi0JCQkgICBzdF9nZGF0YS0+bGlzdFtpXS0+cmVnX2NvbXBsZXRlX2NiICE9IE5VTEwpKSB7CisJCWlmIChsaWtlbHkoc3RfZ2RhdGEgIT0gTlVMTCAmJgorCQkJc3RfZ2RhdGEtPmlzX3JlZ2lzdGVyZWRbaV0gPT0gdHJ1ZSAmJgorCQkJCXN0X2dkYXRhLT5saXN0W2ldLT5yZWdfY29tcGxldGVfY2IgIT0gTlVMTCkpIHsKIAkJCXN0X2dkYXRhLT5saXN0W2ldLT5yZWdfY29tcGxldGVfY2IKIAkJCQkoc3RfZ2RhdGEtPmxpc3RbaV0tPnByaXZfZGF0YSwgZXJyKTsKIAkJCXByX2luZm8oInByb3RvY29sICVkJ3MgY2Igc2VudCAlZFxuIiwgaSwgZXJyKTsKIAkJCWlmIChlcnIpIHsgLyogY2xlYW51cCByZWdpc3RlcmVkIHByb3RvY29sICovCiAJCQkJc3RfZ2RhdGEtPnByb3Rvc19yZWdpc3RlcmVkLS07Ci0JCQkJc3RfZ2RhdGEtPmxpc3RbaV0gPSBOVUxMOworCQkJCXN0X2dkYXRhLT5pc19yZWdpc3RlcmVkW2ldID0gZmFsc2U7CiAJCQl9CiAJCX0KIAl9CkBAIC00NzUsOSArNDc4LDkgQEAKIHsKIAlzZXFfcHJpbnRmKGJ1ZiwgIlslZF1cbkJUPSVjXG5GTT0lY1xuR1BTPSVjXG4iLAogCQkJc3RfZ2RhdGEtPnByb3Rvc19yZWdpc3RlcmVkLAotCQkJc3RfZ2RhdGEtPmxpc3RbMHgwNF0gIT0gTlVMTCA/ICdSJyA6ICdVJywKLQkJCXN0X2dkYXRhLT5saXN0WzB4MDhdICE9IE5VTEwgPyAnUicgOiAnVScsCi0JCQlzdF9nZGF0YS0+bGlzdFsweDA5XSAhPSBOVUxMID8gJ1InIDogJ1UnKTsKKwkJCXN0X2dkYXRhLT5pc19yZWdpc3RlcmVkWzB4MDRdID09IHRydWUgPyAnUicgOiAnVScsCisJCQlzdF9nZGF0YS0+aXNfcmVnaXN0ZXJlZFsweDA4XSA9PSB0cnVlID8gJ1InIDogJ1UnLAorCQkJc3RfZ2RhdGEtPmlzX3JlZ2lzdGVyZWRbMHgwOV0gPT0gdHJ1ZSA/ICdSJyA6ICdVJyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTUwNCw3ICs1MDcsNyBAQAogCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKIAl9CiAKLQlpZiAoc3RfZ2RhdGEtPmxpc3RbbmV3X3Byb3RvLT5jaG5sX2lkXSAhPSBOVUxMKSB7CisJaWYgKHN0X2dkYXRhLT5pc19yZWdpc3RlcmVkW25ld19wcm90by0+Y2hubF9pZF0gPT0gdHJ1ZSkgewogCQlwcl9lcnIoImNobmxfaWQgJWQgYWxyZWFkeSByZWdpc3RlcmVkIiwgbmV3X3Byb3RvLT5jaG5sX2lkKTsKIAkJcmV0dXJuIC1FQUxSRUFEWTsKIAl9CkBAIC01NjMsNyArNTY2LDcgQEAKIAkJLyogY2hlY2sgZm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBvbmNlIG1vcmUsCiAJCSAqIHNpbmNlIHRoZSBhYm92ZSBjaGVjayBpcyBvbGQKIAkJICovCi0JCWlmIChzdF9nZGF0YS0+bGlzdFtuZXdfcHJvdG8tPmNobmxfaWRdICE9IE5VTEwpIHsKKwkJaWYgKHN0X2dkYXRhLT5pc19yZWdpc3RlcmVkW25ld19wcm90by0+Y2hubF9pZF0gPT0gdHJ1ZSkgewogCQkJcHJfZXJyKCIgcHJvdG8gJWQgYWxyZWFkeSByZWdpc3RlcmVkICIsCiAJCQkJICAgbmV3X3Byb3RvLT5jaG5sX2lkKTsKIAkJCXJldHVybiAtRUFMUkVBRFk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvdGktc3Qvc3Rfa2ltLmMgYi9kcml2ZXJzL21pc2MvdGktc3Qvc3Rfa2ltLmMKaW5kZXggYjQ0ODhjOC4uNWRhOTNlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3RpLXN0L3N0X2tpbS5jCisrKyBiL2RyaXZlcnMvbWlzYy90aS1zdC9zdF9raW0uYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9idXMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvYnVzLmMKaW5kZXggNjM2NjdhOC4uZDZkNjJmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9idXMuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL2J1cy5jCkBAIC0yODQsNiArMjg0LDcgQEAKIAkJdHlwZSA9ICJTRC1jb21ibyI7CiAJCWlmIChtbWNfY2FyZF9ibG9ja2FkZHIoY2FyZCkpCiAJCQl0eXBlID0gIlNESEMtY29tYm8iOworCQlicmVhazsKIAlkZWZhdWx0OgogCQl0eXBlID0gIj8iOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwLmMKaW5kZXggMmUwMzJmMC4uYTZjMzI5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwLmMKQEAgLTgzMiw3ICs4MzIsNyBAQAogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCi0JaWYgKGVuZF9jb21tYW5kKQorCWlmIChlbmRfY29tbWFuZCAmJiBob3N0LT5jbWQpCiAJCW1tY19vbWFwX2NtZF9kb25lKGhvc3QsIGhvc3QtPmNtZCk7CiAJaWYgKGhvc3QtPmRhdGEgIT0gTlVMTCkgewogCQlpZiAodHJhbnNmZXJfZXJyb3IpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLWNvcmUuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YtY29yZS5jCmluZGV4IGY5YjYxMWYuLjYwZTQxODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YtY29yZS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YtY29yZS5jCkBAIC0xMjQsOCArMTI0LDEwIEBACiAjZW5kaWYKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc2RoY2lfb2ZfbWF0Y2hbXTsKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNkaGNpX29mX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KQogeworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvZmRldi0+ZGV2Lm9mX25vZGU7CiAJc3RydWN0IHNkaGNpX29mX2RhdGEgKnNkaGNpX29mX2RhdGE7CiAJc3RydWN0IHNkaGNpX2hvc3QgKmhvc3Q7CkBAIC0xMzQsOSArMTM2LDEwIEBACiAJaW50IHNpemU7CiAJaW50IHJldDsKIAotCWlmICghb2ZkZXYtPmRldi5vZl9tYXRjaCkKKwltYXRjaCA9IG9mX21hdGNoX2RldmljZShzZGhjaV9vZl9tYXRjaCwgJm9mZGV2LT5kZXYpOworCWlmICghbWF0Y2gpCiAJCXJldHVybiAtRUlOVkFMOwotCXNkaGNpX29mX2RhdGEgPSBvZmRldi0+ZGV2Lm9mX21hdGNoLT5kYXRhOworCXNkaGNpX29mX2RhdGEgPSBtYXRjaC0+ZGF0YTsKIAogCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShucCkpCiAJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMKaW5kZXggYTEzNmJlNy4uZjhiNWYzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5jCkBAIC05NTcsNiArOTU3LDcgQEAKIAlob3N0LT5pb2FkZHIgPSBwY2lfaW9yZW1hcF9iYXIocGRldiwgYmFyKTsKIAlpZiAoIWhvc3QtPmlvYWRkcikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVtYXAgcmVnaXN0ZXJzXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKIAkJZ290byByZWxlYXNlOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jCmluZGV4IDllMTVmNDEuLjVkMjA2NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMKQEAgLTEzMzQsNiArMTMzNCwxMyBAQAogCiAJaG9zdCA9IChzdHJ1Y3Qgc2RoY2lfaG9zdCopcGFyYW07CiAKKyAgICAgICAgLyoKKyAgICAgICAgICogSWYgdGhpcyB0YXNrbGV0IGdldHMgcmVzY2hlZHVsZWQgd2hpbGUgcnVubmluZywgaXQgd2lsbAorICAgICAgICAgKiBiZSBydW4gYWdhaW4gYWZ0ZXJ3YXJkcyBidXQgd2l0aG91dCBhbnkgYWN0aXZlIHJlcXVlc3QuCisgICAgICAgICAqLworCWlmICghaG9zdC0+bXJxKQorCQlyZXR1cm47CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogCiAJZGVsX3RpbWVyKCZob3N0LT50aW1lcik7CkBAIC0xMzQ1LDcgKzEzNTIsNyBAQAogCSAqIHVwb24gZXJyb3IgY29uZGl0aW9ucy4KIAkgKi8KIAlpZiAoIShob3N0LT5mbGFncyAmIFNESENJX0RFVklDRV9ERUFEKSAmJgotCQkobXJxLT5jbWQtPmVycm9yIHx8CisJICAgICgobXJxLT5jbWQgJiYgbXJxLT5jbWQtPmVycm9yKSB8fAogCQkgKG1ycS0+ZGF0YSAmJiAobXJxLT5kYXRhLT5lcnJvciB8fAogCQkgIChtcnEtPmRhdGEtPnN0b3AgJiYgbXJxLT5kYXRhLT5zdG9wLT5lcnJvcikpKSB8fAogCQkgICAoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfUkVTRVRfQUZURVJfUkVRVUVTVCkpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jX3Bpby5jIGIvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tY19waW8uYwppbmRleCA2MmQzN2RlLi43MTAzMzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jX3Bpby5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWNfcGlvLmMKQEAgLTcyOCwxNSArNzI4LDE1IEBACiAJCXRtaW9fbW1jX3NldF9jbG9jayhob3N0LCBpb3MtPmNsb2NrKTsKIAogCS8qIFBvd2VyIHNlcXVlbmNlIC0gT0ZGIC0+IFVQIC0+IE9OICovCi0JaWYgKGlvcy0+cG93ZXJfbW9kZSA9PSBNTUNfUE9XRVJfT0ZGIHx8ICFpb3MtPmNsb2NrKSB7CisJaWYgKGlvcy0+cG93ZXJfbW9kZSA9PSBNTUNfUE9XRVJfVVApIHsKKwkJLyogcG93ZXIgdXAgU0QgYnVzICovCisJCWlmIChob3N0LT5zZXRfcHdyKQorCQkJaG9zdC0+c2V0X3B3cihob3N0LT5wZGV2LCAxKTsKKwl9IGVsc2UgaWYgKGlvcy0+cG93ZXJfbW9kZSA9PSBNTUNfUE9XRVJfT0ZGIHx8ICFpb3MtPmNsb2NrKSB7CiAJCS8qIHBvd2VyIGRvd24gU0QgYnVzICovCiAJCWlmIChpb3MtPnBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX09GRiAmJiBob3N0LT5zZXRfcHdyKQogCQkJaG9zdC0+c2V0X3B3cihob3N0LT5wZGV2LCAwKTsKIAkJdG1pb19tbWNfY2xrX3N0b3AoaG9zdCk7Ci0JfSBlbHNlIGlmIChpb3MtPnBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX1VQKSB7Ci0JCS8qIHBvd2VyIHVwIFNEIGJ1cyAqLwotCQlpZiAoaG9zdC0+c2V0X3B3cikKLQkJCWhvc3QtPnNldF9wd3IoaG9zdC0+cGRldiwgMSk7CiAJfSBlbHNlIHsKIAkJLyogc3RhcnQgYnVzIGNsb2NrICovCiAJCXRtaW9fbW1jX2Nsa19zdGFydChob3N0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwppbmRleCA0NGIxZjQ2Li41MDY5MTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCkBAIC0yNjAsNiArMjYwLDEzIEBACiAJICBTdXBwb3J0IGZvciBwYXJzaW5nIENGRSBpbWFnZSB0YWcgYW5kIGNyZWF0aW5nIE1URCBwYXJ0aXRpb25zIG9uCiAJICBCcm9hZGNvbSBCQ002M3h4IGJvYXJkcy4KIAorY29uZmlnIE1URF9MQU5USVEKKwl0cmlzdGF0ZSAiTGFudGlxIFNvQyBOT1Igc3VwcG9ydCIKKwlkZXBlbmRzIG9uIExBTlRJUQorCXNlbGVjdCBNVERfUEFSVElUSU9OUworCWhlbHAKKwkgIFN1cHBvcnQgZm9yIE5PUiBmbGFzaCBhdHRhY2hlZCB0byB0aGUgTGFudGlxIFNvQydzIEV4dGVybmFsIEJ1cyBVbml0LgorCiBjb25maWcgTVREX0RJTE5FVFBDCiAJdHJpc3RhdGUgIkNGSSBGbGFzaCBkZXZpY2UgbWFwcGVkIG9uIERJTC9OZXQgUEMiCiAJZGVwZW5kcyBvbiBYODYgJiYgTVREX1BBUlRJVElPTlMgJiYgTVREX0NGSV9JTlRFTEVYVCAmJiBCUk9LRU4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCmluZGV4IDA4NTMzYmQuLjZhZGY0YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQpAQCAtNjAsMyArNjAsNCBAQAogb2JqLSQoQ09ORklHX01URF9HUElPX0FERFIpCSs9IGdwaW8tYWRkci1mbGFzaC5vCiBvYmotJChDT05GSUdfTVREX0JDTTk2M1hYKQkrPSBiY205NjN4eC1mbGFzaC5vCiBvYmotJChDT05GSUdfTVREX0xBVENIX0FERFIpCSs9IGxhdGNoLWFkZHItZmxhc2gubworb2JqLSQoQ09ORklHX01URF9MQU5USVEpCSs9IGxhbnRpcS1mbGFzaC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2xhbnRpcS1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9sYW50aXEtZmxhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTBjYWJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9sYW50aXEtZmxhc2guYwpAQCAtMCwwICsxLDI1MSBAQAorLyoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCBMaXUgUGVuZyBJbmZpbmVvbiBJRkFQIERDIENPTSBDUEUKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvY2ZpLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKworI2luY2x1ZGUgPGxhbnRpcV9zb2MuaD4KKyNpbmNsdWRlIDxsYW50aXFfcGxhdGZvcm0uaD4KKworLyoKKyAqIFRoZSBOT1IgZmxhc2ggaXMgY29ubmVjdGVkIHRvIHRoZSBzYW1lIGV4dGVybmFsIGJ1cyB1bml0IChFQlUpIGFzIFBDSS4KKyAqIFRvIG1ha2UgUENJIHdvcmsgd2UgbmVlZCB0byBlbmFibGUgdGhlIGVuZGlhbm5lc3Mgc3dhcHBpbmcgZm9yIHRoZSBhZGRyZXNzCisgKiB3cml0dGVuIHRvIHRoZSBFQlUuIFRoaXMgZW5kaWFubmVzcyBzd2FwcGluZyB3b3JrcyBmb3IgUENJIGNvcnJlY3RseSBidXQKKyAqIGZhaWxzIGZvciBhdHRhY2hlZCBOT1IgZGV2aWNlcy4gVG8gd29ya2Fyb3VuZCB0aGlzIHdlIG5lZWQgdG8gdXNlIGEgY29tcGxleAorICogbWFwLiBUaGUgd29ya2Fyb3VuZCBpbnZvbHZlcyBzd2FwcGluZyBhbGwgYWRkcmVzc2VzIHdoaWxzdCBwcm9iaW5nIHRoZSBjaGlwLgorICogT25jZSBwcm9iaW5nIGlzIGNvbXBsZXRlIHdlIHN0b3Agc3dhcHBpbmcgdGhlIGFkZHJlc3NlcyBidXQgc3dpenpsZSB0aGUKKyAqIHVubG9jayBhZGRyZXNzZXMgdG8gZW5zdXJlIHRoYXQgYWNjZXNzIHRvIHRoZSBOT1IgZGV2aWNlIHdvcmtzIGNvcnJlY3RseS4KKyAqLworCitlbnVtIHsKKwlMVFFfTk9SX1BST0JJTkcsCisJTFRRX05PUl9OT1JNQUwKK307CisKK3N0cnVjdCBsdHFfbXRkIHsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKKwlzdHJ1Y3QgbWFwX2luZm8gKm1hcDsKK307CisKK3N0YXRpYyBjaGFyIGx0cV9tYXBfbmFtZVtdID0gImx0cV9ub3IiOworCitzdGF0aWMgbWFwX3dvcmQKK2x0cV9yZWFkMTYoc3RydWN0IG1hcF9pbmZvICptYXAsIHVuc2lnbmVkIGxvbmcgYWRyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbWFwX3dvcmQgdGVtcDsKKworCWlmIChtYXAtPm1hcF9wcml2XzEgPT0gTFRRX05PUl9QUk9CSU5HKQorCQlhZHIgXj0gMjsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWJ1X2xvY2ssIGZsYWdzKTsKKwl0ZW1wLnhbMF0gPSAqKHUxNiAqKShtYXAtPnZpcnQgKyBhZHIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVidV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHRlbXA7Cit9CisKK3N0YXRpYyB2b2lkCitsdHFfd3JpdGUxNihzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgbWFwX3dvcmQgZCwgdW5zaWduZWQgbG9uZyBhZHIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChtYXAtPm1hcF9wcml2XzEgPT0gTFRRX05PUl9QUk9CSU5HKQorCQlhZHIgXj0gMjsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWJ1X2xvY2ssIGZsYWdzKTsKKwkqKHUxNiAqKShtYXAtPnZpcnQgKyBhZHIpID0gZC54WzBdOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVidV9sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIDIgZnVuY3Rpb25zIGNvcHkgZGF0YSBiZXR3ZWVuIGlvbWVtIGFuZCBhIGNhY2hlZCBtZW1vcnkKKyAqIHNlY3Rpb24uIEFzIG1lbWNweSgpIG1ha2VzIHVzZSBvZiBwcmUtZmV0Y2hpbmcgd2UgY2Fubm90IHVzZSBpdCBoZXJlLgorICogVGhlIG5vcm1hbCBhbHRlcm5hdGl2ZSBvZiB1c2luZyBtZW1jcHlfe3RvLGZyb219aW8gYWxzbyBtYWtlcyB1c2Ugb2YKKyAqIG1lbWNweSgpIG9uIE1JUFMgc28gaXQgaXMgbm90IGFwcGxpY2FibGUgZWl0aGVyLiBXZSBhcmUgdGhlcmVmb3JlIHN0dWNrCisgKiB3aXRoIGhhdmluZyB0byB1c2Ugb3VyIG93biBsb29wLgorICovCitzdGF0aWMgdm9pZAorbHRxX2NvcHlfZnJvbShzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgdm9pZCAqdG8sCisJdW5zaWduZWQgbG9uZyBmcm9tLCBzc2l6ZV90IGxlbikKK3sKKwl1bnNpZ25lZCBjaGFyICpmID0gKHVuc2lnbmVkIGNoYXIgKiltYXAtPnZpcnQgKyBmcm9tOworCXVuc2lnbmVkIGNoYXIgKnQgPSAodW5zaWduZWQgY2hhciAqKXRvOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWJ1X2xvY2ssIGZsYWdzKTsKKwl3aGlsZSAobGVuLS0pCisJCSp0KysgPSAqZisrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVidV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkCitsdHFfY29weV90byhzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgdW5zaWduZWQgbG9uZyB0bywKKwljb25zdCB2b2lkICpmcm9tLCBzc2l6ZV90IGxlbikKK3sKKwl1bnNpZ25lZCBjaGFyICpmID0gKHVuc2lnbmVkIGNoYXIgKilmcm9tOworCXVuc2lnbmVkIGNoYXIgKnQgPSAodW5zaWduZWQgY2hhciAqKW1hcC0+dmlydCArIHRvOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWJ1X2xvY2ssIGZsYWdzKTsKKwl3aGlsZSAobGVuLS0pCisJCSp0KysgPSAqZisrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVidV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIGNvbnN0ICpwYXJ0X3Byb2JlX3R5cGVzW10gPSB7ICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKKworc3RhdGljIGludCBfX2luaXQKK2x0cV9tdGRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhICpsdHFfbXRkX2RhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCBsdHFfbXRkICpsdHFfbXRkOworCXN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0czsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgbnJfcGFydHMgPSAwOworCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpOworCWludCBlcnI7CisKKwlsdHFfbXRkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGx0cV9tdGQpLCBHRlBfS0VSTkVMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBsdHFfbXRkKTsKKworCWx0cV9tdGQtPnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFsdHFfbXRkLT5yZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBtZW1vcnkgcmVzb3VyY2UiKTsKKwkJZXJyID0gLUVOT0VOVDsKKwkJZ290byBlcnJfb3V0OworCX0KKworCXJlcyA9IGRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZwZGV2LT5kZXYsIGx0cV9tdGQtPnJlcy0+c3RhcnQsCisJCXJlc291cmNlX3NpemUobHRxX210ZC0+cmVzKSwgZGV2X25hbWUoJnBkZXYtPmRldikpOworCWlmICghbHRxX210ZC0+cmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IG1lbSByZXNvdXJjZSIpOworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlsdHFfbXRkLT5tYXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWFwX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlsdHFfbXRkLT5tYXAtPnBoeXMgPSByZXMtPnN0YXJ0OworCWx0cV9tdGQtPm1hcC0+c2l6ZSA9IHJlc291cmNlX3NpemUocmVzKTsKKwlsdHFfbXRkLT5tYXAtPnZpcnQgPSBkZXZtX2lvcmVtYXBfbm9jYWNoZSgmcGRldi0+ZGV2LAorCQkJCWx0cV9tdGQtPm1hcC0+cGh5cywgbHRxX210ZC0+bWFwLT5zaXplKTsKKwlpZiAoIWx0cV9tdGQtPm1hcC0+dmlydCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW9yZW1hcCFcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCWx0cV9tdGQtPm1hcC0+bmFtZSA9IGx0cV9tYXBfbmFtZTsKKwlsdHFfbXRkLT5tYXAtPmJhbmt3aWR0aCA9IDI7CisJbHRxX210ZC0+bWFwLT5yZWFkID0gbHRxX3JlYWQxNjsKKwlsdHFfbXRkLT5tYXAtPndyaXRlID0gbHRxX3dyaXRlMTY7CisJbHRxX210ZC0+bWFwLT5jb3B5X2Zyb20gPSBsdHFfY29weV9mcm9tOworCWx0cV9tdGQtPm1hcC0+Y29weV90byA9IGx0cV9jb3B5X3RvOworCisJbHRxX210ZC0+bWFwLT5tYXBfcHJpdl8xID0gTFRRX05PUl9QUk9CSU5HOworCWx0cV9tdGQtPm10ZCA9IGRvX21hcF9wcm9iZSgiY2ZpX3Byb2JlIiwgbHRxX210ZC0+bWFwKTsKKwlsdHFfbXRkLT5tYXAtPm1hcF9wcml2XzEgPSBMVFFfTk9SX05PUk1BTDsKKworCWlmICghbHRxX210ZC0+bXRkKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInByb2JpbmcgZmFpbGVkXG4iKTsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIGVycl91bm1hcDsKKwl9CisKKwlsdHFfbXRkLT5tdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CisKKwljZmkgPSBsdHFfbXRkLT5tYXAtPmZsZHJ2X3ByaXY7CisJY2ZpLT5hZGRyX3VubG9jazEgXj0gMTsKKwljZmktPmFkZHJfdW5sb2NrMiBePSAxOworCisJbnJfcGFydHMgPSBwYXJzZV9tdGRfcGFydGl0aW9ucyhsdHFfbXRkLT5tdGQsCisJCQkJcGFydF9wcm9iZV90eXBlcywgJnBhcnRzLCAwKTsKKwlpZiAobnJfcGFydHMgPiAwKSB7CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsCisJCQkidXNpbmcgJWQgcGFydGl0aW9ucyBmcm9tIGNtZGxpbmUiLCBucl9wYXJ0cyk7CisJfSBlbHNlIHsKKwkJbnJfcGFydHMgPSBsdHFfbXRkX2RhdGEtPm5yX3BhcnRzOworCQlwYXJ0cyA9IGx0cV9tdGRfZGF0YS0+cGFydHM7CisJfQorCisJZXJyID0gYWRkX210ZF9wYXJ0aXRpb25zKGx0cV9tdGQtPm10ZCwgcGFydHMsIG5yX3BhcnRzKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhZGQgcGFydGl0aW9uc1xuIik7CisJCWdvdG8gZXJyX2Rlc3Ryb3k7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9kZXN0cm95OgorCW1hcF9kZXN0cm95KGx0cV9tdGQtPm10ZCk7CitlcnJfdW5tYXA6CisJaW91bm1hcChsdHFfbXRkLT5tYXAtPnZpcnQpOworZXJyX2ZyZWU6CisJa2ZyZWUobHRxX210ZC0+bWFwKTsKK2Vycl9vdXQ6CisJa2ZyZWUobHRxX210ZCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQKK2x0cV9tdGRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGx0cV9tdGQgKmx0cV9tdGQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChsdHFfbXRkKSB7CisJCWlmIChsdHFfbXRkLT5tdGQpIHsKKwkJCWRlbF9tdGRfcGFydGl0aW9ucyhsdHFfbXRkLT5tdGQpOworCQkJbWFwX2Rlc3Ryb3kobHRxX210ZC0+bXRkKTsKKwkJfQorCQlpZiAobHRxX210ZC0+bWFwLT52aXJ0KQorCQkJaW91bm1hcChsdHFfbXRkLT5tYXAtPnZpcnQpOworCQlrZnJlZShsdHFfbXRkLT5tYXApOworCQlrZnJlZShsdHFfbXRkKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGx0cV9tdGRfZHJpdmVyID0geworCS5yZW1vdmUgPSBfX2RldmV4aXRfcChsdHFfbXRkX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibHRxX25vciIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdAoraW5pdF9sdHFfbXRkKHZvaWQpCit7CisJaW50IHJldCA9IHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmbHRxX210ZF9kcml2ZXIsIGx0cV9tdGRfcHJvYmUpOworCisJaWYgKHJldCkKKwkJcHJfZXJyKCJsdHFfbm9yOiBlcnJvciByZWdpc3RlcmluZyBwbGF0Zm9ybSBkcml2ZXIiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQKK2V4aXRfbHRxX210ZCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZsdHFfbXRkX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGluaXRfbHRxX210ZCk7Cittb2R1bGVfZXhpdChleGl0X2x0cV9tdGQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTGFudGlxIFNvQyBOT1IiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcF9vZi5jIGIvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwX29mLmMKaW5kZXggYmQ0ODNmMC4uYzFkMzM0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwX29mLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwX29mLmMKQEAgLTIxNCwxMSArMjE0LDEzIEBACiB9CiAjZW5kaWYKIAorc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfZmxhc2hfbWF0Y2hbXTsKIHN0YXRpYyBpbnQgX19kZXZpbml0IG9mX2ZsYXNoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKICNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKIAljb25zdCBjaGFyICoqcGFydF9wcm9iZV90eXBlczsKICNlbmRpZgorCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBkZXYtPmRldi5vZl9ub2RlOwogCXN0cnVjdCByZXNvdXJjZSByZXM7CiAJc3RydWN0IG9mX2ZsYXNoICppbmZvOwpAQCAtMjMyLDkgKzIzNCwxMCBAQAogCXN0cnVjdCBtdGRfaW5mbyAqKm10ZF9saXN0ID0gTlVMTDsKIAlyZXNvdXJjZV9zaXplX3QgcmVzX3NpemU7CiAKLQlpZiAoIWRldi0+ZGV2Lm9mX21hdGNoKQorCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKG9mX2ZsYXNoX21hdGNoLCAmZGV2LT5kZXYpOworCWlmICghbWF0Y2gpCiAJCXJldHVybiAtRUlOVkFMOwotCXByb2JlX3R5cGUgPSBkZXYtPmRldi5vZl9tYXRjaC0+ZGF0YTsKKwlwcm9iZV90eXBlID0gbWF0Y2gtPmRhdGE7CiAKIAlyZWdfdHVwbGVfc2l6ZSA9IChvZl9uX2FkZHJfY2VsbHMoZHApICsgb2Zfbl9zaXplX2NlbGxzKGRwKSkgKiBzaXplb2YodTMyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9hdTE1NTBuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9hdTE1NTBuZC5jCmluZGV4IDNmZmUwNWQuLjVkNTEzYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvYXUxNTUwbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2F1MTU1MG5kLmMKQEAgLTEwLDYgKzEwLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC00NzAsNyArNDcxLDcgQEAKIAogI2lmZGVmIENPTkZJR19NSVBTX1BCMTU1MAogCS8qIHNldCBncGlvMjA2IGhpZ2ggKi8KLQlhdV93cml0ZWwoYXVfcmVhZGwoR1BJTzJfRElSKSAmIH4oMSA8PCA2KSwgR1BJTzJfRElSKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dCgyMDYpOwogCiAJYm9vdF9zd2FwYm9vdCA9IChhdV9yZWFkbChNRU1fU1RTVEFUKSAmICgweDcgPDwgMSkpIHwgKChiY3NyX3JlYWQoQkNTUl9TVEFUVVMpID4+IDYpICYgMHgxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9kaXNrb25jaGlwLmMgYi9kcml2ZXJzL210ZC9uYW5kL2Rpc2tvbmNoaXAuYwppbmRleCA5NmMwYjM0Li42NTdiOWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2Rpc2tvbmNoaXAuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2Rpc2tvbmNoaXAuYwpAQCAtNDAwLDcgKzQwMCw3IEBACiAJZG9jMjAweF9od2NvbnRyb2wobXRkLCAwLCBOQU5EX0NUUkxfQUxFIHwgTkFORF9DVFJMX0NIQU5HRSk7CiAJZG9jMjAweF9od2NvbnRyb2wobXRkLCBOQU5EX0NNRF9OT05FLCBOQU5EX05DRSB8IE5BTkRfQ1RSTF9DSEFOR0UpOwogCi0JLyogV2UgY2FuJ3QnIHVzZSBkZXZfcmVhZHkgaGVyZSwgYnV0IGF0IGxlYXN0IHdlIHdhaXQgZm9yIHRoZQorCS8qIFdlIGNhbid0IHVzZSBkZXZfcmVhZHkgaGVyZSwgYnV0IGF0IGxlYXN0IHdlIHdhaXQgZm9yIHRoZQogCSAqIGNvbW1hbmQgdG8gY29tcGxldGUKIAkgKi8KIAl1ZGVsYXkoNTApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDkuYyBiL2RyaXZlcnMvbmV0LzNjNTA5LmMKaW5kZXggOTFhYmI5Ni4uNWYyNTg4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDkuYworKysgYi9kcml2ZXJzL25ldC8zYzUwOS5jCkBAIC0xODUsNyArMTg1LDcgQEAKIHN0YXRpYyBpbnQgbm9wbnA7CiAjZW5kaWYKIAotc3RhdGljIGludCBfX2RldmluaXQgZWwzX2NvbW1vbl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBlbDNfY29tbW9uX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBlbDNfY29tbW9uX3JlbW92ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB1c2hvcnQgaWRfcmVhZF9lZXByb20oaW50IGluZGV4KTsKIHN0YXRpYyB1c2hvcnQgcmVhZF9lZXByb20oaW50IGlvYWRkciwgaW50IGluZGV4KTsKQEAgLTM5NSw3ICszOTUsNyBAQAogc3RhdGljIGludCBpc2FfcmVnaXN0ZXJlZDsKIAogI2lmZGVmIENPTkZJR19QTlAKLXN0YXRpYyBzdHJ1Y3QgcG5wX2RldmljZV9pZCBlbDNfcG5wX2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkIGVsM19wbnBfaWRzW10gX19kZXZpbml0Y29uc3QgPSB7CiAJeyAuaWQgPSAiVENNNTA5MCIgfSwgLyogM0NvbSBFdGhlcmxpbmsgSUlJIChUUCkgKi8KIAl7IC5pZCA9ICJUQ001MDkxIiB9LCAvKiAzQ29tIEV0aGVybGluayBJSUkgKi8KIAl7IC5pZCA9ICJUQ001MDk0IiB9LCAvKiAzQ29tIEV0aGVybGluayBJSUkgKGNvbWJvKSAqLwpAQCAtNDc4LDcgKzQ3OCw3IEBACiAjZW5kaWYgLyogQ09ORklHX1BOUCAqLwogCiAjaWZkZWYgQ09ORklHX0VJU0EKLXN0YXRpYyBzdHJ1Y3QgZWlzYV9kZXZpY2VfaWQgZWwzX2Vpc2FfaWRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGVpc2FfZGV2aWNlX2lkIGVsM19laXNhX2lkc1tdIF9fZGV2aW5pdGNvbnN0ID0gewogCQl7ICJUQ001MDkwIiB9LAogCQl7ICJUQ001MDkxIiB9LAogCQl7ICJUQ001MDkyIiB9LApAQCAtNTA4LDcgKzUwOCw3IEBACiAjaWZkZWYgQ09ORklHX01DQQogc3RhdGljIGludCBlbDNfbWNhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKLXN0YXRpYyBzaG9ydCBlbDNfbWNhX2FkYXB0ZXJfaWRzW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzaG9ydCBlbDNfbWNhX2FkYXB0ZXJfaWRzW10gX19kZXZpbml0Y29uc3QgPSB7CiAJCTB4NjI3YywKIAkJMHg2MjdkLAogCQkweDYyZGIsCkBAIC01MTcsNyArNTE3LDcgQEAKIAkJMHgwMDAwCiB9OwogCi1zdGF0aWMgY2hhciAqZWwzX21jYV9hZGFwdGVyX25hbWVzW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBlbDNfbWNhX2FkYXB0ZXJfbmFtZXNbXSBfX2RldmluaXRjb25zdCA9IHsKIAkJIjNDb20gM2M1MjkgRXRoZXJMaW5rIElJSSAoMTBiYXNlMikiLAogCQkiM0NvbSAzYzUyOSBFdGhlckxpbmsgSUlJICgxMGJhc2VUKSIsCiAJCSIzQ29tIDNjNTI5IEV0aGVyTGluayBJSUkgKHRlc3QgbW9kZSkiLApAQCAtNjAxLDcgKzYwMSw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfTUNBCi1zdGF0aWMgaW50IF9faW5pdCBlbDNfbWNhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGVsM19tY2FfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQogewogCS8qIEJhc2VkIG9uIEVyaWsgTnlncmVuJ3MgKG55Z3JlbkBtaXQuZWR1KSAzYzUyOSBwYXRjaCwKIAkgKiBoZWF2aWx5IG1vZGlmaWVkIGJ5IENocmlzIEJlYXVyZWdhcmQKQEAgLTY3MSw3ICs2NzEsNyBAQAogI2VuZGlmIC8qIENPTkZJR19NQ0EgKi8KIAogI2lmZGVmIENPTkZJR19FSVNBCi1zdGF0aWMgaW50IF9faW5pdCBlbDNfZWlzYV9wcm9iZSAoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2RldmluaXQgZWwzX2Vpc2FfcHJvYmUgKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKIAlzaG9ydCBpOwogCWludCBpb2FkZHIsIGlycSwgaWZfcG9ydDsKQEAgLTEyMDcsNyArMTIwNyw3IEBACiAJCQllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKIAl9CiAKLQllY21kLT5zcGVlZCA9IFNQRUVEXzEwOworCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBTUEVFRF8xMCk7CiAJRUwzV0lORE9XKDEpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1OXguYyBiL2RyaXZlcnMvbmV0LzNjNTl4LmMKaW5kZXggOGNjMjI1Ni4uOTlmNDNkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1OXguYworKysgYi9kcml2ZXJzL25ldC8zYzU5eC5jCkBAIC05MDEsMTQgKzkwMSwxNCBAQAogI2VuZGlmIC8qICFDT05GSUdfUE0gKi8KIAogI2lmZGVmIENPTkZJR19FSVNBCi1zdGF0aWMgc3RydWN0IGVpc2FfZGV2aWNlX2lkIHZvcnRleF9laXNhX2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBlaXNhX2RldmljZV9pZCB2b3J0ZXhfZWlzYV9pZHNbXSBfX2RldmluaXRjb25zdCA9IHsKIAl7ICJUQ001OTIwIiwgQ0hfM0M1OTIgfSwKIAl7ICJUQ001OTcwIiwgQ0hfM0M1OTcgfSwKIAl7ICIiIH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGVpc2EsIHZvcnRleF9laXNhX2lkcyk7CiAKLXN0YXRpYyBpbnQgX19pbml0IHZvcnRleF9laXNhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHZvcnRleF9laXNhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKIAl2b2lkIF9faW9tZW0gKmlvYWRkcjsKIAlzdHJ1Y3QgZWlzYV9kZXZpY2UgKmVkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC84MTM5Y3AuYyBiL2RyaXZlcnMvbmV0LzgxMzljcC5jCmluZGV4IGRkMTZlODMuLjEwYzQ1MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgxMzljcC5jCisrKyBiL2RyaXZlcnMvbmV0LzgxMzljcC5jCkBAIC03NTgsOCArNzU4LDcgQEAKIAogCWVudHJ5ID0gY3AtPnR4X2hlYWQ7CiAJZW9yID0gKGVudHJ5ID09IChDUF9UWF9SSU5HX1NJWkUgLSAxKSkgPyBSaW5nRW5kIDogMDsKLQlpZiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfVFNPKQotCQltc3MgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplOworCW1zcyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemU7CiAKIAlpZiAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9PSAwKSB7CiAJCXN0cnVjdCBjcF9kZXNjICp0eGQgPSAmY3AtPnR4X3JpbmdbZW50cnldOwpAQCAtMTQxNiwzMiArMTQxNSwyMyBAQAogCWNwLT5tc2dfZW5hYmxlID0gdmFsdWU7CiB9CiAKLXN0YXRpYyB1MzIgY3BfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgY3Bfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKIHsKIAlzdHJ1Y3QgY3BfcHJpdmF0ZSAqY3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCXJldHVybiAoY3ByMTYoQ3BDbWQpICYgUnhDaGtTdW0pID8gMSA6IDA7Ci19CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotc3RhdGljIGludCBjcF9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgY3BfcHJpdmF0ZSAqY3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCXUxNiBjbWQgPSBjcC0+Y3BjbWQsIG5ld2NtZDsKKwlpZiAoISgoZGV2LT5mZWF0dXJlcyBeIGZlYXR1cmVzKSAmIE5FVElGX0ZfUlhDU1VNKSkKKwkJcmV0dXJuIDA7CiAKLQluZXdjbWQgPSBjbWQ7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNwLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAoZGF0YSkKLQkJbmV3Y21kIHw9IFJ4Q2hrU3VtOworCWlmIChmZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKQorCQljcC0+Y3BjbWQgfD0gUnhDaGtTdW07CiAJZWxzZQotCQluZXdjbWQgJj0gflJ4Q2hrU3VtOworCQljcC0+Y3BjbWQgJj0gflJ4Q2hrU3VtOwogCi0JaWYgKG5ld2NtZCAhPSBjbWQpIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3AtPmxvY2ssIGZsYWdzKTsKLQkJY3AtPmNwY21kID0gbmV3Y21kOwotCQljcHcxNl9mKENwQ21kLCBuZXdjbWQpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcC0+bG9jaywgZmxhZ3MpOwotCX0KKwljcHcxNl9mKENwQ21kLCBjcC0+Y3BjbWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE1NTQsMTEgKzE1NDQsNiBAQAogCS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLAogCS5nZXRfbXNnbGV2ZWwJCT0gY3BfZ2V0X21zZ2xldmVsLAogCS5zZXRfbXNnbGV2ZWwJCT0gY3Bfc2V0X21zZ2xldmVsLAotCS5nZXRfcnhfY3N1bQkJPSBjcF9nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0JCT0gY3Bfc2V0X3J4X2NzdW0sCi0JLnNldF90eF9jc3VtCQk9IGV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0sIC8qIGxvY2FsISAqLwotCS5zZXRfc2cJCQk9IGV0aHRvb2xfb3Bfc2V0X3NnLAotCS5zZXRfdHNvCQk9IGV0aHRvb2xfb3Bfc2V0X3RzbywKIAkuZ2V0X3JlZ3MJCT0gY3BfZ2V0X3JlZ3MsCiAJLmdldF93b2wJCT0gY3BfZ2V0X3dvbCwKIAkuc2V0X3dvbAkJPSBjcF9zZXRfd29sLApAQCAtMTgzMSw2ICsxODE2LDcgQEAKIAkubmRvX2RvX2lvY3RsCQk9IGNwX2lvY3RsLAogCS5uZG9fc3RhcnRfeG1pdAkJPSBjcF9zdGFydF94bWl0LAogCS5uZG9fdHhfdGltZW91dAkJPSBjcF90eF90aW1lb3V0LAorCS5uZG9fc2V0X2ZlYXR1cmVzCT0gY3Bfc2V0X2ZlYXR1cmVzLAogI2lmIENQX1ZMQU5fVEFHX1VTRUQKIAkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIJPSBjcF92bGFuX3J4X3JlZ2lzdGVyLAogI2VuZGlmCkBAIC0xOTM0LDYgKzE5MjAsOSBAQAogCWNwLT5jcGNtZCA9IChwY2lfdXNpbmdfZGFjID8gUENJREFDIDogMCkgfAogCQkgICAgUENJTXVsUlcgfCBSeENoa1N1bSB8IENwUnhPbiB8IENwVHhPbjsKIAorCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9SWENTVU07CisJZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX1JYQ1NVTTsKKwogCXJlZ3MgPSBpb3JlbWFwKHBjaWFkZHIsIENQX1JFR1NfU0laRSk7CiAJaWYgKCFyZWdzKSB7CiAJCXJjID0gLUVJTzsKQEAgLTE5NjYsOSArMTk1NSw4IEBACiAJaWYgKHBjaV91c2luZ19kYWMpCiAJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogCi0jaWYgMCAvKiBkaXNhYmxlZCBieSBkZWZhdWx0IHVudGlsIHZlcmlmaWVkICovCi0JZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKLSNlbmRpZgorCS8qIGRpc2FibGVkIGJ5IGRlZmF1bHQgdW50aWwgdmVyaWZpZWQgKi8KKwlkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1RTTzsKIAogCWRldi0+aXJxID0gcGRldi0+aXJxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZwppbmRleCBkYzI4MGJjLi4xOWYwNGEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWcKQEAgLTIwMTcsNiArMjAxNywxMyBAQAogCSAgZnJvbSBGYXJhZGF5LiBJdCBpcyB1c2VkIG9uIEZhcmFkYXkgQTMyMCwgQW5kZXMgQUcxMDEgYW5kIHNvbWUKIAkgIG90aGVyIEFSTS9ORFMzMiBTb0Mncy4KIAorY29uZmlnIExBTlRJUV9FVE9QCisJdHJpc3RhdGUgIkxhbnRpcSBTb0MgRVRPUCBkcml2ZXIiCisJZGVwZW5kcyBvbiBTT0NfVFlQRV9YV0FZCisJaGVscAorCSAgU3VwcG9ydCBmb3IgdGhlIE1JSTAgaW5zaWRlIHRoZSBMYW50aXEgU29DCisKKwogc291cmNlICJkcml2ZXJzL25ldC9mc19lbmV0L0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9uZXQvb2N0ZW9uL0tjb25maWciCkBAIC0yNTM2LDcgKzI1NDMsNyBAQAogc291cmNlICJkcml2ZXJzL25ldC9zdG1tYWMvS2NvbmZpZyIKIAogY29uZmlnIFBDSF9HQkUKLQl0cmlzdGF0ZSAiUENIIEdpZ2FiaXQgRXRoZXJuZXQiCisJdHJpc3RhdGUgIkludGVsIEVHMjBUIFBDSCAvIE9LSSBTRU1JQ09ORFVDVE9SIE1MNzIyMyBJT0ggR2JFIgogCWRlcGVuZHMgb24gUENJCiAJc2VsZWN0IE1JSQogCS0tLWhlbHAtLS0KQEAgLTI1NDgsNiArMjU1NSwxMiBAQAogCSAgdG8gR2lnYWJpdCBFdGhlcm5ldC4KIAkgIFRoaXMgZHJpdmVyIGVuYWJsZXMgR2lnYWJpdCBFdGhlcm5ldCBmdW5jdGlvbi4KIAorCSAgVGhpcyBkcml2ZXIgYWxzbyBjYW4gYmUgdXNlZCBmb3IgT0tJIFNFTUlDT05EVUNUT1IgSU9IKElucHV0LworCSAgT3V0cHV0IEh1YiksIE1MNzIyMy4KKwkgIE1MNzIyMyBJT0ggaXMgZm9yIE1QKE1lZGlhIFBob25lKSB1c2UuCisJICBNTDcyMjMgaXMgY29tcGFuaW9uIGNoaXAgZm9yIEludGVsIEF0b20gRTZ4eCBzZXJpZXMuCisJICBNTDcyMjMgaXMgY29tcGxldGVseSBjb21wYXRpYmxlIGZvciBJbnRlbCBFRzIwVCBQQ0guCisKIGVuZGlmICMgTkVUREVWXzEwMDAKIAogIwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQppbmRleCAwMWI2MDRhLi4yMDlmYmI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQpAQCAtMTQ0LDcgKzE0NCw3IEBACiBvYmotJChDT05GSUdfU0IxMjUwX01BQykgKz0gc2IxMjUwLW1hYy5vCiBvYmotJChDT05GSUdfQjQ0KSArPSBiNDQubwogb2JqLSQoQ09ORklHX0ZPUkNFREVUSCkgKz0gZm9yY2VkZXRoLm8KLW9iai0kKENPTkZJR19ORV9IODMwMCkgKz0gbmUtaDgzMDAubyA4MzkwLm8KK29iai0kKENPTkZJR19ORV9IODMwMCkgKz0gbmUtaDgzMDAubwogb2JqLSQoQ09ORklHX0FYODg3OTYpICs9IGF4ODg3OTYubwogb2JqLSQoQ09ORklHX0JDTTYzWFhfRU5FVCkgKz0gYmNtNjN4eF9lbmV0Lm8KIG9iai0kKENPTkZJR19GVE1BQzEwMCkgKz0gZnRtYWMxMDAubwpAQCAtMjE5LDcgKzIxOSw3IEBACiBvYmotJChDT05GSUdfTFA0ODZFKSArPSBscDQ4NmUubwogCiBvYmotJChDT05GSUdfRVRIMTZJKSArPSBldGgxNmkubwotb2JqLSQoQ09ORklHX1pPUlJPODM5MCkgKz0gem9ycm84MzkwLm8gODM5MC5vCitvYmotJChDT05GSUdfWk9SUk84MzkwKSArPSB6b3JybzgzOTAubwogb2JqLSQoQ09ORklHX0hQTEFOQ0UpICs9IGhwbGFuY2UubyA3OTkwLm8KIG9iai0kKENPTkZJR19NVk1FMTQ3X05FVCkgKz0gbXZtZTE0Ny5vIDc5OTAubwogb2JqLSQoQ09ORklHX0VRVUFMSVpFUikgKz0gZXFsLm8KQEAgLTIzMSw3ICsyMzEsNyBAQAogb2JqLSQoQ09ORklHX0RFQ0xBTkNFKSArPSBkZWNsYW5jZS5vCiBvYmotJChDT05GSUdfQVRBUklMQU5DRSkgKz0gYXRhcmlsYW5jZS5vCiBvYmotJChDT05GSUdfQTIwNjUpICs9IGEyMDY1Lm8KLW9iai0kKENPTkZJR19IWURSQSkgKz0gaHlkcmEubyA4MzkwLm8KK29iai0kKENPTkZJR19IWURSQSkgKz0gaHlkcmEubwogb2JqLSQoQ09ORklHX0FSSUFETkUpICs9IGFyaWFkbmUubwogb2JqLSQoQ09ORklHX0NTODl4MCkgKz0gY3M4OXgwLm8KIG9iai0kKENPTkZJR19NQUNTT05JQykgKz0gbWFjc29uaWMubwpAQCAtMjU5LDYgKzI1OSw3IEBACiBvYmotJChDT05GSUdfRU5DMjhKNjApICs9IGVuYzI4ajYwLm8KIG9iai0kKENPTkZJR19FVEhPQykgKz0gZXRob2Mubwogb2JqLSQoQ09ORklHX0dSRVRIKSArPSBncmV0aC5vCitvYmotJChDT05GSUdfTEFOVElRX0VUT1ApICs9IGxhbnRpcV9ldG9wLm8KIAogb2JqLSQoQ09ORklHX1hURU5TQV9YVDIwMDBfU09OSUMpICs9IHh0c29uaWMubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hY2VuaWMuYyBiL2RyaXZlcnMvbmV0L2FjZW5pYy5jCmluZGV4IGVlNjQ4ZmUuLmQ3YzFiZmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hY2VuaWMuYworKysgYi9kcml2ZXJzL25ldC9hY2VuaWMuYwpAQCAtNjgsNiArNjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NvY2tpb3MuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUSkgfHwgZGVmaW5lZChDT05GSUdfVkxBTl84MDIxUV9NT0RVTEUpCiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgpAQCAtMjY1OCwxNSArMjY1OSwxNSBAQAogCiAJbGluayA9IHJlYWRsKCZyZWdzLT5HaWdMbmtTdGF0ZSk7CiAJaWYgKGxpbmsgJiBMTktfMTAwME1CKQotCQllY21kLT5zcGVlZCA9IFNQRUVEXzEwMDA7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBTUEVFRF8xMDAwKTsKIAllbHNlIHsKIAkJbGluayA9IHJlYWRsKCZyZWdzLT5GYXN0TG5rU3RhdGUpOwogCQlpZiAobGluayAmIExOS18xMDBNQikKLQkJCWVjbWQtPnNwZWVkID0gU1BFRURfMTAwOworCQkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIFNQRUVEXzEwMCk7CiAJCWVsc2UgaWYgKGxpbmsgJiBMTktfMTBNQikKLQkJCWVjbWQtPnNwZWVkID0gU1BFRURfMTA7CisJCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgU1BFRURfMTApOwogCQllbHNlCi0JCQllY21kLT5zcGVlZCA9IDA7CisJCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgMCk7CiAJfQogCWlmIChsaW5rICYgTE5LX0ZVTExfRFVQTEVYKQogCQllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKQEAgLTI3MTgsOSArMjcxOSw5IEBACiAJCWxpbmsgfD0gTE5LX1RYX0ZMT1dfQ1RMX1k7CiAJaWYgKGVjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpCiAJCWxpbmsgfD0gTE5LX05FR09USUFURTsKLQlpZiAoZWNtZC0+c3BlZWQgIT0gc3BlZWQpIHsKKwlpZiAoZXRodG9vbF9jbWRfc3BlZWQoZWNtZCkgIT0gc3BlZWQpIHsKIAkJbGluayAmPSB+KExOS18xMDAwTUIgfCBMTktfMTAwTUIgfCBMTktfMTBNQik7Ci0JCXN3aXRjaCAoc3BlZWQpIHsKKwkJc3dpdGNoIChldGh0b29sX2NtZF9zcGVlZChlY21kKSkgewogCQljYXNlIFNQRUVEXzEwMDA6CiAJCQlsaW5rIHw9IExOS18xMDAwTUI7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmMgYi9kcml2ZXJzL25ldC9hbWQ4MTExZS5jCmluZGV4IDg4NDk1YzQuLjI0MWIxODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmMKKysrIGIvZHJpdmVycy9uZXQvYW1kODExMWUuYwpAQCAtMTA2LDcgKzEwNiw3IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYW1kODExMWVfcGNpX3RibCk7CiBtb2R1bGVfcGFyYW1fYXJyYXkoc3BlZWRfZHVwbGV4LCBpbnQsIE5VTEwsIDApOwotTU9EVUxFX1BBUk1fREVTQyhzcGVlZF9kdXBsZXgsICJTZXQgZGV2aWNlIHNwZWVkIGFuZCBkdXBsZXggbW9kZXMsIDA6IEF1dG8gTmVnb3RpdGF0ZSwgMTogMTBNYnBzIEhhbGYgRHVwbGV4LCAyOiAxME1icHMgRnVsbCBEdXBsZXgsIDM6IDEwME1icHMgSGFsZiBEdXBsZXgsIDQ6IDEwME1icHMgRnVsbCBEdXBsZXgiKTsKK01PRFVMRV9QQVJNX0RFU0Moc3BlZWRfZHVwbGV4LCAiU2V0IGRldmljZSBzcGVlZCBhbmQgZHVwbGV4IG1vZGVzLCAwOiBBdXRvIE5lZ290aWF0ZSwgMTogMTBNYnBzIEhhbGYgRHVwbGV4LCAyOiAxME1icHMgRnVsbCBEdXBsZXgsIDM6IDEwME1icHMgSGFsZiBEdXBsZXgsIDQ6IDEwME1icHMgRnVsbCBEdXBsZXgiKTsKIG1vZHVsZV9wYXJhbV9hcnJheShjb2FsZXNjZSwgYm9vbCwgTlVMTCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGNvYWxlc2NlLCAiRW5hYmxlIG9yIERpc2FibGUgaW50ZXJydXB0IGNvYWxlc2NpbmcsIDE6IEVuYWJsZSwgMDogRGlzYWJsZSIpOwogbW9kdWxlX3BhcmFtX2FycmF5KGR5bmFtaWNfaXBnLCBib29sLCBOVUxMLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9ldGhlcmguYyBiL2RyaXZlcnMvbmV0L2FybS9ldGhlcmguYwppbmRleCA0YWYyMzVkLi4wM2UyMTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vZXRoZXJoLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2V0aGVyaC5jCkBAIC01MjcsNyArNTI3LDcgQEAKICAqIFJlYWQgdGhlIGV0aGVybmV0IGFkZHJlc3Mgc3RyaW5nIGZyb20gdGhlIG9uIGJvYXJkIHJvbS4KICAqIFRoaXMgaXMgYW4gYXNjaWkgc3RyaW5nLi4uCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IGV0aGVyaF9hZGRyKGNoYXIgKmFkZHIsIHN0cnVjdCBleHBhbnNpb25fY2FyZCAqZWMpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBldGhlcmhfYWRkcihjaGFyICphZGRyLCBzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjKQogewogCXN0cnVjdCBpbl9jaHVua19kaXIgY2Q7CiAJY2hhciAqczsKQEAgLTU5MSwxMCArNTkxLDExIEBACiBzdGF0aWMgaW50IGV0aGVyaF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7CiAJY21kLT5zdXBwb3J0ZWQJPSBldGhlcmhfcHJpdihkZXYpLT5zdXBwb3J0ZWQ7Ci0JY21kLT5zcGVlZAk9IFNQRUVEXzEwOworCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIFNQRUVEXzEwKTsKIAljbWQtPmR1cGxleAk9IERVUExFWF9IQUxGOwogCWNtZC0+cG9ydAk9IGRldi0+aWZfcG9ydCA9PSBJRl9QT1JUXzEwQkFTRVQgPyBQT1JUX1RQIDogUE9SVF9CTkM7Ci0JY21kLT5hdXRvbmVnCT0gZGV2LT5mbGFncyAmIElGRl9BVVRPTUVESUEgPyBBVVRPTkVHX0VOQUJMRSA6IEFVVE9ORUdfRElTQUJMRTsKKwljbWQtPmF1dG9uZWcJPSAoZGV2LT5mbGFncyAmIElGRl9BVVRPTUVESUEgPworCQkJICAgQVVUT05FR19FTkFCTEUgOiBBVVRPTkVHX0RJU0FCTEUpOwogCXJldHVybiAwOwogfQogCkBAIC02NTUsNyArNjU2LDcgQEAKIHN0YXRpYyB1MzIgZXRoZXJoX3JlZ29mZnNldHNbMTZdOwogc3RhdGljIHUzMiBldGhlcm1fcmVnb2Zmc2V0c1sxNl07CiAKLXN0YXRpYyBpbnQgX19pbml0CitzdGF0aWMgaW50IF9fZGV2aW5pdAogZXRoZXJoX3Byb2JlKHN0cnVjdCBleHBhbnNpb25fY2FyZCAqZWMsIGNvbnN0IHN0cnVjdCBlY2FyZF9pZCAqaWQpCiB7CiAJY29uc3Qgc3RydWN0IGV0aGVyaF9kYXRhICpkYXRhID0gaWQtPmRhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0va3M4Njk1bmV0LmMgYi9kcml2ZXJzL25ldC9hcm0va3M4Njk1bmV0LmMKaW5kZXggYWEwNzY1Ny4uYTdiMGNhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2tzODY5NW5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9rczg2OTVuZXQuYwpAQCAtODkxLDE1ICs4OTEsMTYgQEAKIAkJCWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9QYXVzZTsKIAkJY21kLT5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7CiAKLQkJY21kLT5zcGVlZCA9IChjdHJsICYgV01DX1dTUykgPyBTUEVFRF8xMDAgOiBTUEVFRF8xMDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwKKwkJCQkgICAgICAoY3RybCAmIFdNQ19XU1MpID8gU1BFRURfMTAwIDogU1BFRURfMTApOwogCQljbWQtPmR1cGxleCA9IChjdHJsICYgV01DX1dEUykgPwogCQkJRFVQTEVYX0ZVTEwgOiBEVVBMRVhfSEFMRjsKIAl9IGVsc2UgewogCQkvKiBhdXRvLW5lZ290aWF0aW9uIGlzIGRpc2FibGVkICovCiAJCWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKIAotCQljbWQtPnNwZWVkID0gKGN0cmwgJiBXTUNfV0FORjEwMCkgPwotCQkJU1BFRURfMTAwIDogU1BFRURfMTA7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsICgoY3RybCAmIFdNQ19XQU5GMTAwKSA/CisJCQkJCSAgICBTUEVFRF8xMDAgOiBTUEVFRF8xMCkpOwogCQljbWQtPmR1cGxleCA9IChjdHJsICYgV01DX1dBTkZGKSA/CiAJCQlEVVBMRVhfRlVMTCA6IERVUExFWF9IQUxGOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0YXJpbGFuY2UuYyBiL2RyaXZlcnMvbmV0L2F0YXJpbGFuY2UuYwppbmRleCBjZTAwOTFlLi4xMjY0ZDc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGFyaWxhbmNlLmMKKysrIGIvZHJpdmVycy9uZXQvYXRhcmlsYW5jZS5jCkBAIC01NTQsNyArNTU0LDcgQEAKIAkJbWVtYWRkciA9PSAodW5zaWduZWQgc2hvcnQgKikweGZmZTAwMDAwKSB7CiAJCS8qIFBBTXMgY2FyZCBhbmQgUmllYmwgb24gU1QgdXNlIGxldmVsIDUgYXV0b3ZlY3RvciAqLwogCQlpZiAocmVxdWVzdF9pcnEoSVJRX0FVVE9fNSwgbGFuY2VfaW50ZXJydXB0LCBJUlFfVFlQRV9QUklPLAotCQkgICAgICAgICAgICAiUEFNL1JpZWJsLVNUIEV0aGVybmV0IiwgZGV2KSkgeworCQkgICAgICAgICAgICAiUEFNLFJpZWJsLVNUIEV0aGVybmV0IiwgZGV2KSkgewogCQkJcHJpbnRrKCAiTGFuY2U6IHJlcXVlc3QgZm9yIGlycSAlZCBmYWlsZWRcbiIsIElSUV9BVVRPXzUgKTsKIAkJCXJldHVybiAwOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxYy5oIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWMuaAppbmRleCA3Y2IzNzVlLi45MjU5MjlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxYy5oCisrKyBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjLmgKQEAgLTU2Niw5ICs1NjYsOSBAQAogI2RlZmluZSBfX0FUX1RFU1RJTkcgICAgICAgIDB4MDAwMQogI2RlZmluZSBfX0FUX1JFU0VUVElORyAgICAgIDB4MDAwMgogI2RlZmluZSBfX0FUX0RPV04gICAgICAgICAgIDB4MDAwMwotCXU4IHdvcmtfZXZlbnQ7Ci0jZGVmaW5lIEFUTDFDX1dPUktfRVZFTlRfUkVTRVQgCQkweDAxCi0jZGVmaW5lIEFUTDFDX1dPUktfRVZFTlRfTElOS19DSEFOR0UJMHgwMgorCXVuc2lnbmVkIGxvbmcgd29ya19ldmVudDsKKyNkZWZpbmUJQVRMMUNfV09SS19FVkVOVF9SRVNFVAkJMAorI2RlZmluZQlBVEwxQ19XT1JLX0VWRU5UX0xJTktfQ0hBTkdFCTEKIAl1MzIgbXNnX2VuYWJsZTsKIAogCWJvb2wgaGF2ZV9tc2k7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19ldGh0b29sLmMKaW5kZXggN2M1MjE1MC4uN2JlODg0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX2V0aHRvb2wuYwpAQCAtNTAsMTMgKzUwLDEzIEBACiAJZWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOwogCiAJaWYgKGFkYXB0ZXItPmxpbmtfc3BlZWQgIT0gU1BFRURfMCkgewotCQllY21kLT5zcGVlZCA9IGFkYXB0ZXItPmxpbmtfc3BlZWQ7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBhZGFwdGVyLT5saW5rX3NwZWVkKTsKIAkJaWYgKGFkYXB0ZXItPmxpbmtfZHVwbGV4ID09IEZVTExfRFVQTEVYKQogCQkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJCWVsc2UKIAkJCWVjbWQtPmR1cGxleCA9IERVUExFWF9IQUxGOwogCX0gZWxzZSB7Ci0JCWVjbWQtPnNwZWVkID0gLTE7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCAtMSk7CiAJCWVjbWQtPmR1cGxleCA9IC0xOwogCX0KIApAQCAtNzcsNyArNzcsOCBAQAogCWlmIChlY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7CiAJCWF1dG9uZWdfYWR2ZXJ0aXNlZCA9IEFEVkVSVElTRURfQXV0b25lZzsKIAl9IGVsc2UgewotCQlpZiAoZWNtZC0+c3BlZWQgPT0gU1BFRURfMTAwMCkgeworCQl1MzIgc3BlZWQgPSBldGh0b29sX2NtZF9zcGVlZChlY21kKTsKKwkJaWYgKHNwZWVkID09IFNQRUVEXzEwMDApIHsKIAkJCWlmIChlY21kLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpIHsKIAkJCQlpZiAobmV0aWZfbXNnX2xpbmsoYWRhcHRlcikpCiAJCQkJCWRldl93YXJuKCZhZGFwdGVyLT5wZGV2LT5kZXYsCkBAIC04Niw3ICs4Nyw3IEBACiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQlhdXRvbmVnX2FkdmVydGlzZWQgPSBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsOwotCQl9IGVsc2UgaWYgKGVjbWQtPnNwZWVkID09IFNQRUVEXzEwMCkgeworCQl9IGVsc2UgaWYgKHNwZWVkID09IFNQRUVEXzEwMCkgewogCQkJaWYgKGVjbWQtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKIAkJCQlhdXRvbmVnX2FkdmVydGlzZWQgPSBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGw7CiAJCQllbHNlCkBAIC0xMTMsMTEgKzExNCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MzIgYXRsMWNfZ2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlyZXR1cm4gKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX0NTVU0pICE9IDA7Ci19Ci0KIHN0YXRpYyB1MzIgYXRsMWNfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGF0bDFjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwpAQCAtMzA3LDkgKzMwMyw2IEBACiAJLmdldF9saW5rICAgICAgICAgICAgICAgPSBldGh0b29sX29wX2dldF9saW5rLAogCS5nZXRfZWVwcm9tX2xlbiAgICAgICAgID0gYXRsMWNfZ2V0X2VlcHJvbV9sZW4sCiAJLmdldF9lZXByb20gICAgICAgICAgICAgPSBhdGwxY19nZXRfZWVwcm9tLAotCS5nZXRfdHhfY3N1bSAgICAgICAgICAgID0gYXRsMWNfZ2V0X3R4X2NzdW0sCi0JLmdldF9zZyAgICAgICAgICAgICAgICAgPSBldGh0b29sX29wX2dldF9zZywKLQkuc2V0X3NnICAgICAgICAgICAgICAgICA9IGV0aHRvb2xfb3Bfc2V0X3NnLAogfTsKIAogdm9pZCBhdGwxY19zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX21haW4uYwppbmRleCA3ZDlkNTA2Li4xMjY5YmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfbWFpbi5jCkBAIC0zMjUsNyArMzI1LDcgQEAKIAkJfQogCX0KIAotCWFkYXB0ZXItPndvcmtfZXZlbnQgfD0gQVRMMUNfV09SS19FVkVOVF9MSU5LX0NIQU5HRTsKKwlzZXRfYml0KEFUTDFDX1dPUktfRVZFTlRfTElOS19DSEFOR0UsICZhZGFwdGVyLT53b3JrX2V2ZW50KTsKIAlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5jb21tb25fdGFzayk7CiB9CiAKQEAgLTMzNywyMCArMzM3LDE2IEBACiAJYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRsMWNfYWRhcHRlciwgY29tbW9uX3Rhc2spOwogCW5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAotCWlmIChhZGFwdGVyLT53b3JrX2V2ZW50ICYgQVRMMUNfV09SS19FVkVOVF9SRVNFVCkgewotCQlhZGFwdGVyLT53b3JrX2V2ZW50ICY9IH5BVEwxQ19XT1JLX0VWRU5UX1JFU0VUOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQVRMMUNfV09SS19FVkVOVF9SRVNFVCwgJmFkYXB0ZXItPndvcmtfZXZlbnQpKSB7CiAJCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKIAkJYXRsMWNfZG93bihhZGFwdGVyKTsKIAkJYXRsMWNfdXAoYWRhcHRlcik7CiAJCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKLQkJcmV0dXJuOwogCX0KIAotCWlmIChhZGFwdGVyLT53b3JrX2V2ZW50ICYgQVRMMUNfV09SS19FVkVOVF9MSU5LX0NIQU5HRSkgewotCQlhZGFwdGVyLT53b3JrX2V2ZW50ICY9IH5BVEwxQ19XT1JLX0VWRU5UX0xJTktfQ0hBTkdFOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQVRMMUNfV09SS19FVkVOVF9MSU5LX0NIQU5HRSwKKwkJJmFkYXB0ZXItPndvcmtfZXZlbnQpKQogCQlhdGwxY19jaGVja19saW5rX3N0YXR1cyhhZGFwdGVyKTsKLQl9Ci0JcmV0dXJuOwogfQogCiAKQEAgLTM2OSw3ICszNjUsNyBAQAogCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAogCS8qIERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0ICovCi0JYWRhcHRlci0+d29ya19ldmVudCB8PSBBVEwxQ19XT1JLX0VWRU5UX1JFU0VUOworCXNldF9iaXQoQVRMMUNfV09SS19FVkVOVF9SRVNFVCwgJmFkYXB0ZXItPndvcmtfZXZlbnQpOwogCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPmNvbW1vbl90YXNrKTsKIH0KIApAQCAtNDg0LDYgKzQ4MCwxNSBAQAogCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBtdHUgPiBBVF9SWF9CVUZfU0laRSA/CiAJCXJvdW5kdXAobXR1ICsgRVRIX0hMRU4gKyBFVEhfRkNTX0xFTiArIFZMQU5fSExFTiwgOCkgOiBBVF9SWF9CVUZfU0laRTsKIH0KKworc3RhdGljIHUzMiBhdGwxY19maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGZlYXR1cmVzKQoreworCWlmIChuZXRkZXYtPm10dSA+IE1BWF9UU09fRlJBTUVfU0laRSkKKwkJZmVhdHVyZXMgJj0gfihORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNik7CisKKwlyZXR1cm4gZmVhdHVyZXM7Cit9CisKIC8qCiAgKiBhdGwxY19jaGFuZ2VfbXR1IC0gQ2hhbmdlIHRoZSBNYXhpbXVtIFRyYW5zZmVyIFVuaXQKICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTUxMCwxNCArNTE1LDggQEAKIAkJbmV0ZGV2LT5tdHUgPSBuZXdfbXR1OwogCQlhZGFwdGVyLT5ody5tYXhfZnJhbWVfc2l6ZSA9IG5ld19tdHU7CiAJCWF0bDFjX3NldF9yeGJ1ZnNpemUoYWRhcHRlciwgbmV0ZGV2KTsKLQkJaWYgKG5ld19tdHUgPiBNQVhfVFNPX0ZSQU1FX1NJWkUpIHsKLQkJCWFkYXB0ZXItPm5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPOwotCQkJYWRhcHRlci0+bmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9UU082OwotCQl9IGVsc2UgewotCQkJYWRhcHRlci0+bmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKLQkJCWFkYXB0ZXItPm5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwotCQl9CiAJCWF0bDFjX2Rvd24oYWRhcHRlcik7CisJCW5ldGRldl91cGRhdGVfZmVhdHVyZXMobmV0ZGV2KTsKIAkJYXRsMWNfdXAoYWRhcHRlcik7CiAJCWNsZWFyX2JpdChfX0FUX1JFU0VUVElORywgJmFkYXB0ZXItPmZsYWdzKTsKIAkJaWYgKGFkYXB0ZXItPmh3LmN0cmxfZmxhZ3MgJiBBVEwxQ19GUEdBX1ZFUlNJT04pIHsKQEAgLTEwOTIsMTAgKzEwOTEsOCBAQAogCXUzMiBtYXhfcGF5X2xvYWQ7CiAJdTE2IHR4X29mZmxvYWRfdGhyZXNoOwogCXUzMiB0eHFfY3RybF9kYXRhOwotCXUzMiBleHRyYV9zaXplID0gMDsgICAgIC8qIEp1bWJvIGZyYW1lIHRocmVzaG9sZCBpbiBRV09SRCB1bml0ICovCiAJdTMyIG1heF9wYXlfbG9hZF9kYXRhOwogCi0JZXh0cmFfc2l6ZSA9IEVUSF9ITEVOICsgVkxBTl9ITEVOICsgRVRIX0ZDU19MRU47CiAJdHhfb2ZmbG9hZF90aHJlc2ggPSBNQVhfVFhfT0ZGTE9BRF9USFJFU0g7CiAJQVRfV1JJVEVfUkVHKGh3LCBSRUdfVFhfVFNPX09GRkxPQURfVEhSRVNILAogCQkodHhfb2ZmbG9hZF90aHJlc2ggPj4gMykgJiBUWF9UU09fT0ZGTE9BRF9USFJFU0hfTUFTSyk7CkBAIC0yNTQwLDYgKzI1MzcsNyBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiBzdGF0aWMgaW50IGF0bDFjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CkBAIC0yNTY2LDYgKzI1NjQsNyBAQAogCiAJcmV0dXJuIDA7CiB9CisjZW5kaWYKIAogc3RhdGljIHZvaWQgYXRsMWNfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CkBAIC0yNTg1LDYgKzI1ODQsNyBAQAogCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGF0bDFjX3NldF9tYWNfYWRkciwKIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGF0bDFjX3NldF9tdWx0aSwKIAkubmRvX2NoYW5nZV9tdHUJCT0gYXRsMWNfY2hhbmdlX210dSwKKwkubmRvX2ZpeF9mZWF0dXJlcwk9IGF0bDFjX2ZpeF9mZWF0dXJlcywKIAkubmRvX2RvX2lvY3RsCQk9IGF0bDFjX2lvY3RsLAogCS5uZG9fdHhfdGltZW91dAkJPSBhdGwxY190eF90aW1lb3V0LAogCS5uZG9fZ2V0X3N0YXRzCQk9IGF0bDFjX2dldF9zdGF0cywKQEAgLTI2MDUsMTIgKzI2MDUsMTMgQEAKIAlhdGwxY19zZXRfZXRodG9vbF9vcHMobmV0ZGV2KTsKIAogCS8qIFRPRE86IGFkZCB3aGVuIHJlYWR5ICovCi0JbmV0ZGV2LT5mZWF0dXJlcyA9CU5FVElGX0ZfU0cJICAgfAorCW5ldGRldi0+aHdfZmVhdHVyZXMgPQlORVRJRl9GX1NHCSAgIHwKIAkJCQlORVRJRl9GX0hXX0NTVU0JICAgfAogCQkJCU5FVElGX0ZfSFdfVkxBTl9UWCB8Ci0JCQkJTkVUSUZfRl9IV19WTEFOX1JYIHwKIAkJCQlORVRJRl9GX1RTTwkgICB8CiAJCQkJTkVUSUZfRl9UU082OworCW5ldGRldi0+ZmVhdHVyZXMgPQluZXRkZXYtPmh3X2ZlYXR1cmVzIHwKKwkJCQlORVRJRl9GX0hXX1ZMQU5fUlg7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX2V0aHRvb2wuYwppbmRleCAxMjA5Mjk3Li42MjY5NDM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfZXRodG9vbC5jCkBAIC01MSwxMyArNTEsMTMgQEAKIAllY21kLT50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CiAKIAlpZiAoYWRhcHRlci0+bGlua19zcGVlZCAhPSBTUEVFRF8wKSB7Ci0JCWVjbWQtPnNwZWVkID0gYWRhcHRlci0+bGlua19zcGVlZDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIGFkYXB0ZXItPmxpbmtfc3BlZWQpOwogCQlpZiAoYWRhcHRlci0+bGlua19kdXBsZXggPT0gRlVMTF9EVVBMRVgpCiAJCQllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKIAkJZWxzZQogCQkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7CiAJfSBlbHNlIHsKLQkJZWNtZC0+c3BlZWQgPSAtMTsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIC0xKTsKIAkJZWNtZC0+ZHVwbGV4ID0gLTE7CiAJfQogCkBAIC0zODIsOSArMzgyLDYgQEAKIAkuZ2V0X2VlcHJvbV9sZW4gICAgICAgICA9IGF0bDFlX2dldF9lZXByb21fbGVuLAogCS5nZXRfZWVwcm9tICAgICAgICAgICAgID0gYXRsMWVfZ2V0X2VlcHJvbSwKIAkuc2V0X2VlcHJvbSAgICAgICAgICAgICA9IGF0bDFlX3NldF9lZXByb20sCi0JLnNldF90eF9jc3VtICAgICAgICAgICAgPSBldGh0b29sX29wX3NldF90eF9od19jc3VtLAotCS5zZXRfc2cgICAgICAgICAgICAgICAgID0gZXRodG9vbF9vcF9zZXRfc2csCi0JLnNldF90c28gICAgICAgICAgICAgICAgPSBldGh0b29sX29wX3NldF90c28sCiB9OwogCiB2b2lkIGF0bDFlX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfbWFpbi5jIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfbWFpbi5jCmluZGV4IGIwYTcxZTIuLjg2YTkxMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9tYWluLmMKQEAgLTY5MSwxMCArNjkxLDggQEAKIAogc3RhdGljIHZvaWQgYXRsMWVfaW5pdF9yaW5nX3Jlc291cmNlcyhzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzdHJ1Y3QgYXRsMWVfdHhfcmluZyAqdHhfcmluZyA9IE5VTEw7CiAJc3RydWN0IGF0bDFlX3J4X3JpbmcgKnJ4X3JpbmcgPSBOVUxMOwogCi0JdHhfcmluZyA9ICZhZGFwdGVyLT50eF9yaW5nOwogCXJ4X3JpbmcgPSAmYWRhcHRlci0+cnhfcmluZzsKIAogCXJ4X3JpbmctPnJlYWxfcGFnZV9zaXplID0gYWRhcHRlci0+cnhfcmluZy5wYWdlX3NpemUKQEAgLTE5MjcsMTEgKzE5MjUsNyBAQAogCSAqIHJlc2NoZWR1bGUgb3VyIHdhdGNoZG9nIHRpbWVyICovCiAJc2V0X2JpdChfX0FUX0RPV04sICZhZGFwdGVyLT5mbGFncyk7CiAKLSNpZmRlZiBORVRJRl9GX0xMVFgKIAluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7Ci0jZWxzZQotCW5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTsKLSNlbmRpZgogCiAJLyogcmVzZXQgTUFDIHRvIGRpc2FibGUgYWxsIFJYL1RYICovCiAJYXRsMWVfcmVzZXRfaHcoJmFkYXB0ZXItPmh3KTsKQEAgLTIyMjMsMTAgKzIyMTcsMTAgQEAKIAluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gQVRfVFhfV0FUQ0hET0c7CiAJYXRsMWVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7CiAKLQluZXRkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSFdfQ1NVTSB8Ci0JCU5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKLQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTExUWDsKLQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOworCW5ldGRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9IV19DU1VNIHwgTkVUSUZfRl9UU08gfAorCQlORVRJRl9GX0hXX1ZMQU5fVFg7CisJbmV0ZGV2LT5mZWF0dXJlcyA9IG5ldGRldi0+aHdfZmVhdHVyZXMgfAorCQlORVRJRl9GX0hXX1ZMQU5fUlggfCBORVRJRl9GX0xMVFg7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bHgvYXRsMS5jIGIvZHJpdmVycy9uZXQvYXRseC9hdGwxLmMKaW5kZXggNjdmNDBiOS4uYzUyOThkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRseC9hdGwxLmMKKysrIGIvZHJpdmVycy9uZXQvYXRseC9hdGwxLmMKQEAgLTIwNzQsOSArMjA3NCw2IEBACiAJY21iX3RwZF9uZXh0X3RvX2NsZWFuID0gbGUxNl90b19jcHUoYWRhcHRlci0+Y21iLmNtYi0+dHBkX2NvbnNfaWR4KTsKIAogCXdoaWxlIChjbWJfdHBkX25leHRfdG9fY2xlYW4gIT0gc3dfdHBkX25leHRfdG9fY2xlYW4pIHsKLQkJc3RydWN0IHR4X3BhY2tldF9kZXNjICp0cGQ7Ci0KLQkJdHBkID0gQVRMMV9UUERfREVTQyh0cGRfcmluZywgc3dfdHBkX25leHRfdG9fY2xlYW4pOwogCQlidWZmZXJfaW5mbyA9ICZ0cGRfcmluZy0+YnVmZmVyX2luZm9bc3dfdHBkX25leHRfdG9fY2xlYW5dOwogCQlpZiAoYnVmZmVyX2luZm8tPmRtYSkgewogCQkJcGNpX3VubWFwX3BhZ2UoYWRhcHRlci0+cGRldiwgYnVmZmVyX2luZm8tPmRtYSwKQEAgLTI1NzIsNyArMjU2OSw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAlpbnQgZXJyOwotCWludCBpcnFfZmxhZ3MgPSBJUlFGX1NBTVBMRV9SQU5ET007CisJaW50IGlycV9mbGFncyA9IDA7CiAKIAkvKiBoYXJkd2FyZSBoYXMgYmVlbiByZXNldCwgd2UgbmVlZCB0byByZWxvYWQgc29tZSB0aGluZ3MgKi8KIAlhdGx4X3NldF9tdWx0aShuZXRkZXYpOwpAQCAtMjk4Niw2ICsyOTgzLDExIEBACiAJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHOwogCW5ldGRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWCk7CiAKKwluZXRkZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9IV19DU1VNIHwgTkVUSUZfRl9TRyB8IE5FVElGX0ZfVFNPOworCisJLyogaXMgdGhpcyB2YWxpZD8gc2VlIGF0bDFfc2V0dXBfbWFjX2N0cmwoKSAqLworCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9SWENTVU07CisKIAkvKgogCSAqIHBhdGNoIGZvciBzb21lIEwxIG9mIG9sZCB2ZXJzaW9uLAogCSAqIHRoZSBmaW5hbCB2ZXJzaW9uIG9mIEwxIG1heSBub3QgbmVlZCB0aGVzZQpAQCAtMzIyOSwxMyArMzIzMSwxMyBAQAogCWlmIChuZXRpZl9jYXJyaWVyX29rKGFkYXB0ZXItPm5ldGRldikpIHsKIAkJdTE2IGxpbmtfc3BlZWQsIGxpbmtfZHVwbGV4OwogCQlhdGwxX2dldF9zcGVlZF9hbmRfZHVwbGV4KGh3LCAmbGlua19zcGVlZCwgJmxpbmtfZHVwbGV4KTsKLQkJZWNtZC0+c3BlZWQgPSBsaW5rX3NwZWVkOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgbGlua19zcGVlZCk7CiAJCWlmIChsaW5rX2R1cGxleCA9PSBGVUxMX0RVUExFWCkKIAkJCWVjbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOwogCQllbHNlCiAJCQllY21kLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKIAl9IGVsc2UgewotCQllY21kLT5zcGVlZCA9IC0xOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgLTEpOwogCQllY21kLT5kdXBsZXggPSAtMTsKIAl9CiAJaWYgKGh3LT5tZWRpYV90eXBlID09IE1FRElBX1RZUEVfQVVUT19TRU5TT1IgfHwKQEAgLTMyNjYsNyArMzI2OCw4IEBACiAJaWYgKGVjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpCiAJCWh3LT5tZWRpYV90eXBlID0gTUVESUFfVFlQRV9BVVRPX1NFTlNPUjsKIAllbHNlIHsKLQkJaWYgKGVjbWQtPnNwZWVkID09IFNQRUVEXzEwMDApIHsKKwkJdTMyIHNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoZWNtZCk7CisJCWlmIChzcGVlZCA9PSBTUEVFRF8xMDAwKSB7CiAJCQlpZiAoZWNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKSB7CiAJCQkJaWYgKG5ldGlmX21zZ19saW5rKGFkYXB0ZXIpKQogCQkJCQlkZXZfd2FybigmYWRhcHRlci0+cGRldi0+ZGV2LApAQCAtMzI3NSw3ICszMjc4LDcgQEAKIAkJCQlnb3RvIGV4aXRfc3NldDsKIAkJCX0KIAkJCWh3LT5tZWRpYV90eXBlID0gTUVESUFfVFlQRV8xMDAwTV9GVUxMOwotCQl9IGVsc2UgaWYgKGVjbWQtPnNwZWVkID09IFNQRUVEXzEwMCkgeworCQl9IGVsc2UgaWYgKHNwZWVkID09IFNQRUVEXzEwMCkgewogCQkJaWYgKGVjbWQtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKIAkJCQlody0+bWVkaWFfdHlwZSA9IE1FRElBX1RZUEVfMTAwTV9GVUxMOwogCQkJZWxzZQpAQCAtMzU5NSwxMiArMzU5OCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIEZJWE1FOiBpcyB0aGlzIHJpZ2h0PyAtLSBDSFMgKi8KLXN0YXRpYyB1MzIgYXRsMV9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXJldHVybiAxOwotfQotCiBzdGF0aWMgdm9pZCBhdGwxX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBzdHJpbmdzZXQsCiAJdTggKmRhdGEpCiB7CkBAIC0zNjY4LDEzICszNjY1LDkgQEAKIAkuc2V0X3JpbmdwYXJhbQkJPSBhdGwxX3NldF9yaW5ncGFyYW0sCiAJLmdldF9wYXVzZXBhcmFtCQk9IGF0bDFfZ2V0X3BhdXNlcGFyYW0sCiAJLnNldF9wYXVzZXBhcmFtCQk9IGF0bDFfc2V0X3BhdXNlcGFyYW0sCi0JLmdldF9yeF9jc3VtCQk9IGF0bDFfZ2V0X3J4X2NzdW0sCi0JLnNldF90eF9jc3VtCQk9IGV0aHRvb2xfb3Bfc2V0X3R4X2h3X2NzdW0sCiAJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCi0JLnNldF9zZwkJCT0gZXRodG9vbF9vcF9zZXRfc2csCiAJLmdldF9zdHJpbmdzCQk9IGF0bDFfZ2V0X3N0cmluZ3MsCiAJLm53YXlfcmVzZXQJCT0gYXRsMV9ud2F5X3Jlc2V0LAogCS5nZXRfZXRodG9vbF9zdGF0cwk9IGF0bDFfZ2V0X2V0aHRvb2xfc3RhdHMsCiAJLmdldF9zc2V0X2NvdW50CQk9IGF0bDFfZ2V0X3NzZXRfY291bnQsCi0JLnNldF90c28JCT0gZXRodG9vbF9vcF9zZXRfdHNvLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bHgvYXRsMi5jIGIvZHJpdmVycy9uZXQvYXRseC9hdGwyLmMKaW5kZXggZTNjYmY0NS4uMTYyNDllOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRseC9hdGwyLmMKKysrIGIvZHJpdmVycy9uZXQvYXRseC9hdGwyLmMKQEAgLTE0MTEsOSArMTQxMSw4IEBACiAKIAllcnIgPSAtRUlPOwogCi0jaWZkZWYgTkVUSUZfRl9IV19WTEFOX1RYCisJbmV0ZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfU0c7CiAJbmV0ZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYKTsKLSNlbmRpZgogCiAJLyogSW5pdCBQSFkgYXMgZWFybHkgYXMgcG9zc2libGUgZHVlIHRvIHBvd2VyIHNhdmluZyBpc3N1ZSAgKi8KIAlhdGwyX3BoeV9pbml0KCZhZGFwdGVyLT5odyk7CkBAIC0xNzcwLDEzICsxNzY5LDEzIEBACiAJZWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOwogCiAJaWYgKGFkYXB0ZXItPmxpbmtfc3BlZWQgIT0gU1BFRURfMCkgewotCQllY21kLT5zcGVlZCA9IGFkYXB0ZXItPmxpbmtfc3BlZWQ7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBhZGFwdGVyLT5saW5rX3NwZWVkKTsKIAkJaWYgKGFkYXB0ZXItPmxpbmtfZHVwbGV4ID09IEZVTExfRFVQTEVYKQogCQkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJCWVsc2UKIAkJCWVjbWQtPmR1cGxleCA9IERVUExFWF9IQUxGOwogCX0gZWxzZSB7Ci0JCWVjbWQtPnNwZWVkID0gLTE7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCAtMSk7CiAJCWVjbWQtPmR1cGxleCA9IC0xOwogCX0KIApAQCAtMTg0MCwxMSArMTgzOSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MzIgYXRsMl9nZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXJldHVybiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSFdfQ1NVTSkgIT0gMDsKLX0KLQogc3RhdGljIHUzMiBhdGwyX2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXJldHVybiAwOwpAQCAtMjExMiwxMiArMjEwNiw2IEBACiAJLmdldF9lZXByb21fbGVuCQk9IGF0bDJfZ2V0X2VlcHJvbV9sZW4sCiAJLmdldF9lZXByb20JCT0gYXRsMl9nZXRfZWVwcm9tLAogCS5zZXRfZWVwcm9tCQk9IGF0bDJfc2V0X2VlcHJvbSwKLQkuZ2V0X3R4X2NzdW0JCT0gYXRsMl9nZXRfdHhfY3N1bSwKLQkuZ2V0X3NnCQkJPSBldGh0b29sX29wX2dldF9zZywKLQkuc2V0X3NnCQkJPSBldGh0b29sX29wX3NldF9zZywKLSNpZmRlZiBORVRJRl9GX1RTTwotCS5nZXRfdHNvCQk9IGV0aHRvb2xfb3BfZ2V0X3RzbywKLSNlbmRpZgogfTsKIAogc3RhdGljIHZvaWQgYXRsMl9zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2I0NC5jIGIvZHJpdmVycy9uZXQvYjQ0LmMKaW5kZXggMmUyYjc2Mi4uYTY5MzMxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYjQ0LmMKKysrIGIvZHJpdmVycy9uZXQvYjQ0LmMKQEAgLTE4MDcsOCArMTgwNyw4IEBACiAJaWYgKGJwLT5mbGFncyAmIEI0NF9GTEFHX0FEVl8xMDBGVUxMKQogCQljbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbDsKIAljbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfUGF1c2UgfCBBRFZFUlRJU0VEX0FzeW1fUGF1c2U7Ci0JY21kLT5zcGVlZCA9IChicC0+ZmxhZ3MgJiBCNDRfRkxBR18xMDBfQkFTRV9UKSA/Ci0JCVNQRUVEXzEwMCA6IFNQRUVEXzEwOworCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsICgoYnAtPmZsYWdzICYgQjQ0X0ZMQUdfMTAwX0JBU0VfVCkgPworCQkJCSAgICBTUEVFRF8xMDAgOiBTUEVFRF8xMCkpOwogCWNtZC0+ZHVwbGV4ID0gKGJwLT5mbGFncyAmIEI0NF9GTEFHX0ZVTExfRFVQTEVYKSA/CiAJCURVUExFWF9GVUxMIDogRFVQTEVYX0hBTEY7CiAJY21kLT5wb3J0ID0gMDsKQEAgLTE4MjAsNyArMTgyMCw3IEBACiAJaWYgKGNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkKIAkJY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX0F1dG9uZWc7CiAJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpewotCQljbWQtPnNwZWVkID0gMDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgMCk7CiAJCWNtZC0+ZHVwbGV4ID0gMHhmZjsKIAl9CiAJY21kLT5tYXh0eHBrdCA9IDA7CkBAIC0xODMxLDYgKzE4MzEsNyBAQAogc3RhdGljIGludCBiNDRfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewogCXN0cnVjdCBiNDQgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgc3BlZWQgPSBldGh0b29sX2NtZF9zcGVlZChjbWQpOwogCiAJLyogV2UgZG8gbm90IHN1cHBvcnQgZ2lnYWJpdC4gKi8KIAlpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7CkBAIC0xODM4LDggKzE4MzksOCBAQAogCQkgICAgKEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYgfAogCQkgICAgIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwpKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlIGlmICgoY21kLT5zcGVlZCAhPSBTUEVFRF8xMDAgJiYKLQkJICAgIGNtZC0+c3BlZWQgIT0gU1BFRURfMTApIHx8CisJfSBlbHNlIGlmICgoc3BlZWQgIT0gU1BFRURfMTAwICYmCisJCSAgICBzcGVlZCAhPSBTUEVFRF8xMCkgfHwKIAkJICAgKGNtZC0+ZHVwbGV4ICE9IERVUExFWF9IQUxGICYmCiAJCSAgICBjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkpIHsKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTg3Myw3ICsxODc0LDcgQEAKIAl9IGVsc2UgewogCQlicC0+ZmxhZ3MgfD0gQjQ0X0ZMQUdfRk9SQ0VfTElOSzsKIAkJYnAtPmZsYWdzICY9IH4oQjQ0X0ZMQUdfMTAwX0JBU0VfVCB8IEI0NF9GTEFHX0ZVTExfRFVQTEVYKTsKLQkJaWYgKGNtZC0+c3BlZWQgPT0gU1BFRURfMTAwKQorCQlpZiAoc3BlZWQgPT0gU1BFRURfMTAwKQogCQkJYnAtPmZsYWdzIHw9IEI0NF9GTEFHXzEwMF9CQVNFX1Q7CiAJCWlmIChjbWQtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKIAkJCWJwLT5mbGFncyB8PSBCNDRfRkxBR19GVUxMX0RVUExFWDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JjbTYzeHhfZW5ldC5jIGIvZHJpdmVycy9uZXQvYmNtNjN4eF9lbmV0LmMKaW5kZXggYzQ4MTA0Yi4uZjE1NzNkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmNtNjN4eF9lbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvYmNtNjN4eF9lbmV0LmMKQEAgLTgzOSw4ICs4MzksOCBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3BoeV9kaXNjb25uZWN0OwogCi0JcmV0ID0gcmVxdWVzdF9pcnEocHJpdi0+aXJxX3J4LCBiY21fZW5ldF9pc3JfZG1hLAotCQkJICBJUlFGX1NBTVBMRV9SQU5ET00gfCBJUlFGX0RJU0FCTEVELCBkZXYtPm5hbWUsIGRldik7CisJcmV0ID0gcmVxdWVzdF9pcnEocHJpdi0+aXJxX3J4LCBiY21fZW5ldF9pc3JfZG1hLCBJUlFGX0RJU0FCTEVELAorCQkJICBkZXYtPm5hbWUsIGRldik7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfZnJlZWlycTsKIApAQCAtMTM0Niw3ICsxMzQ2LDggQEAKIAkJcmV0dXJuIHBoeV9ldGh0b29sX2dzZXQocHJpdi0+cGh5ZGV2LCBjbWQpOwogCX0gZWxzZSB7CiAJCWNtZC0+YXV0b25lZyA9IDA7Ci0JCWNtZC0+c3BlZWQgPSAocHJpdi0+Zm9yY2Vfc3BlZWRfMTAwKSA/IFNQRUVEXzEwMCA6IFNQRUVEXzEwOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCAoKHByaXYtPmZvcmNlX3NwZWVkXzEwMCkKKwkJCQkJICAgID8gU1BFRURfMTAwIDogU1BFRURfMTApKTsKIAkJY21kLT5kdXBsZXggPSAocHJpdi0+Zm9yY2VfZHVwbGV4X2Z1bGwpID8KIAkJCURVUExFWF9GVUxMIDogRFVQTEVYX0hBTEY7CiAJCWNtZC0+c3VwcG9ydGVkID0gQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYgIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmggYi9kcml2ZXJzL25ldC9iZW5ldC9iZS5oCmluZGV4IDY2ODIzZWQuLmE3ZGI4NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmgKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmUuaApAQCAtNDksNiArNDksNyBAQAogI2RlZmluZSBPQ19ERVZJQ0VfSUQxCQkweDcwMAkvKiBEZXZpY2UgSWQgZm9yIEJFMiBjYXJkcyAqLwogI2RlZmluZSBPQ19ERVZJQ0VfSUQyCQkweDcxMAkvKiBEZXZpY2UgSWQgZm9yIEJFMyBjYXJkcyAqLwogI2RlZmluZSBPQ19ERVZJQ0VfSUQzCQkweGUyMjAJLyogRGV2aWNlIGlkIGZvciBMYW5jZXIgY2FyZHMgKi8KKyNkZWZpbmUgT0NfREVWSUNFX0lENCAgICAgICAgICAgMHhlMjI4ICAgLyogRGV2aWNlIGlkIGZvciBWRiBpbiBMYW5jZXIgKi8KIAogc3RhdGljIGlubGluZSBjaGFyICpuaWNfbmFtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKQEAgLTU4LDYgKzU5LDcgQEAKIAljYXNlIE9DX0RFVklDRV9JRDI6CiAJCXJldHVybiBPQ19OQU1FX0JFOwogCWNhc2UgT0NfREVWSUNFX0lEMzoKKwljYXNlIE9DX0RFVklDRV9JRDQ6CiAJCXJldHVybiBPQ19OQU1FX0xBTkNFUjsKIAljYXNlIEJFX0RFVklDRV9JRDI6CiAJCXJldHVybiBCRTNfTkFNRTsKQEAgLTg0LDE1ICs4NiwxNCBAQAogI2RlZmluZSBNQ0NfQ1FfTEVOCQkyNTYKIAogI2RlZmluZSBNQVhfUlNTX1FTCQk0CS8qIEJFIGxpbWl0IGlzIDQgcXVldWVzL3BvcnQgKi8KLSNkZWZpbmUgQkVfTUFYX01TSVhfVkVDVE9SUwkoTUFYX1JTU19RUyArIDEgKyAxKS8qIFJTUyBxcyArIDEgZGVmIFJ4ICsgVHggKi8KKyNkZWZpbmUgTUFYX1JYX1FTCQkoTUFYX1JTU19RUyArIDEpIC8qIFJTUyBxcyArIDEgZGVmIFJ4ICovCisjZGVmaW5lIEJFX01BWF9NU0lYX1ZFQ1RPUlMJKE1BWF9SWF9RUyArIDEpLyogUlggKyBUWCAqLwogI2RlZmluZSBCRV9OQVBJX1dFSUdIVAkJNjQKICNkZWZpbmUgTUFYX1JYX1BPU1QgCQlCRV9OQVBJX1dFSUdIVCAvKiBGcmFncyBwb3N0ZWQgYXQgYSB0aW1lICovCiAjZGVmaW5lIFJYX0ZSQUdTX1JFRklMTF9XTQkoUlhfUV9MRU4gLSBNQVhfUlhfUE9TVCkKIAogI2RlZmluZSBGV19WRVJfTEVOCQkzMgogCi0jZGVmaW5lIEJFX01BWF9WRgkJMzIKLQogc3RydWN0IGJlX2RtYV9tZW0gewogCXZvaWQgKnZhOwogCWRtYV9hZGRyX3QgZG1hOwpAQCAtMjEzLDcgKzIxNCw3IEBACiAKIHN0cnVjdCBiZV9yeF9jb21wbF9pbmZvIHsKIAl1MzIgcnNzX2hhc2g7Ci0JdTE2IHZpZDsKKwl1MTYgdmxhbl90YWc7CiAJdTE2IHBrdF9zaXplOwogCXUxNiByeHFfaWR4OwogCXUxNiBtYWNfaWQ7CkBAIC0yNDUsNiArMjQ2LDQzIEBACiAKIHN0cnVjdCBiZV9kcnZfc3RhdHMgewogCXU4IGJlX29uX2RpZV90ZW1wZXJhdHVyZTsKKwl1NjQgYmVfdHhfZXZlbnRzOworCXU2NCBldGhfcmVkX2Ryb3BzOworCXU2NCByeF9kcm9wc19ub19wYnVmOworCXU2NCByeF9kcm9wc19ub190eHBiOworCXU2NCByeF9kcm9wc19ub19lcnhfZGVzY3I7CisJdTY0IHJ4X2Ryb3BzX25vX3RwcmVfZGVzY3I7CisJdTY0IHJ4X2Ryb3BzX3Rvb19tYW55X2ZyYWdzOworCXU2NCByeF9kcm9wc19pbnZhbGlkX3Jpbmc7CisJdTY0IGZvcndhcmRlZF9wYWNrZXRzOworCXU2NCByeF9kcm9wc19tdHU7CisJdTY0IHJ4X2NyY19lcnJvcnM7CisJdTY0IHJ4X2FsaWdubWVudF9zeW1ib2xfZXJyb3JzOworCXU2NCByeF9wYXVzZV9mcmFtZXM7CisJdTY0IHJ4X3ByaW9yaXR5X3BhdXNlX2ZyYW1lczsKKwl1NjQgcnhfY29udHJvbF9mcmFtZXM7CisJdTY0IHJ4X2luX3JhbmdlX2Vycm9yczsKKwl1NjQgcnhfb3V0X3JhbmdlX2Vycm9yczsKKwl1NjQgcnhfZnJhbWVfdG9vX2xvbmc7CisJdTY0IHJ4X2FkZHJlc3NfbWF0Y2hfZXJyb3JzOworCXU2NCByeF9kcm9wcGVkX3Rvb19zbWFsbDsKKwl1NjQgcnhfZHJvcHBlZF90b29fc2hvcnQ7CisJdTY0IHJ4X2Ryb3BwZWRfaGVhZGVyX3Rvb19zbWFsbDsKKwl1NjQgcnhfZHJvcHBlZF90Y3BfbGVuZ3RoOworCXU2NCByeF9kcm9wcGVkX3J1bnQ7CisJdTY0IHJ4X2lwX2NoZWNrc3VtX2VycnM7CisJdTY0IHJ4X3RjcF9jaGVja3N1bV9lcnJzOworCXU2NCByeF91ZHBfY2hlY2tzdW1fZXJyczsKKwl1NjQgcnhfc3dpdGNoZWRfdW5pY2FzdF9wYWNrZXRzOworCXU2NCByeF9zd2l0Y2hlZF9tdWx0aWNhc3RfcGFja2V0czsKKwl1NjQgcnhfc3dpdGNoZWRfYnJvYWRjYXN0X3BhY2tldHM7CisJdTY0IHR4X3BhdXNlZnJhbWVzOworCXU2NCB0eF9wcmlvcml0eV9wYXVzZWZyYW1lczsKKwl1NjQgdHhfY29udHJvbGZyYW1lczsKKwl1NjQgcnhwcF9maWZvX292ZXJmbG93X2Ryb3A7CisJdTY0IHJ4X2lucHV0X2ZpZm9fb3ZlcmZsb3dfZHJvcDsKKwl1NjQgcG1lbV9maWZvX292ZXJmbG93X2Ryb3A7CisJdTY0IGphYmJlcl9ldmVudHM7CiB9OwogCiBzdHJ1Y3QgYmVfdmZfY2ZnIHsKQEAgLTI3Niw3ICszMTQsNyBAQAogCXNwaW5sb2NrX3QgbWNjX2NxX2xvY2s7CiAKIAlzdHJ1Y3QgbXNpeF9lbnRyeSBtc2l4X2VudHJpZXNbQkVfTUFYX01TSVhfVkVDVE9SU107Ci0JYm9vbCBtc2l4X2VuYWJsZWQ7CisJdTMyIG51bV9tc2l4X3ZlYzsKIAlib29sIGlzcl9yZWdpc3RlcmVkOwogCiAJLyogVFggUmluZ3MgKi8KQEAgLTI4Nyw3ICszMjUsNyBAQAogCXUzMiBjYWNoZV9saW5lX2JyZWFrWzhdOwogCiAJLyogUnggcmluZ3MgKi8KLQlzdHJ1Y3QgYmVfcnhfb2JqIHJ4X29ialtNQVhfUlNTX1FTICsgMV07IC8qIG9uZSBkZWZhdWx0IG5vbi1yc3MgUSAqLworCXN0cnVjdCBiZV9yeF9vYmogcnhfb2JqW01BWF9SWF9RU107CiAJdTMyIG51bV9yeF9xczsKIAl1MzIgYmlnX3BhZ2Vfc2l6ZTsJLyogQ29tcG91bmRlZCBwYWdlIHNpemUgc2hhcmVkIGJ5IHJ4IHdyYnMgKi8KIApAQCAtMzA4LDEwICszNDYsMTAgQEAKIAl1MTYgd29ya19jb3VudGVyOwogCiAJLyogRXRodG9vbCBrbm9icyBhbmQgaW5mbyAqLwotCWJvb2wgcnhfY3N1bTsgCQkvKiBCRSBjYXJkIG11c3QgcGVyZm9ybSByeC1jaGVja3N1bW1pbmcgKi8KIAljaGFyIGZ3X3ZlcltGV19WRVJfTEVOXTsKIAl1MzIgaWZfaGFuZGxlOwkJLyogVXNlZCB0byBjb25maWd1cmUgZmlsdGVyaW5nICovCiAJdTMyIHBtYWNfaWQ7CQkvKiBNQUMgYWRkciBoYW5kbGUgdXNlZCBieSBCRSBjYXJkICovCisJdTMyIGJlYWNvbl9zdGF0ZTsJLyogZm9yIHNldF9waHlzX2lkICovCiAKIAlib29sIGVlaF9lcnI7CiAJYm9vbCBsaW5rX3VwOwpAQCAtMzM0LDcgKzM3Miw3IEBACiAKIAlib29sIGJlM19uYXRpdmU7CiAJYm9vbCBzcmlvdl9lbmFibGVkOwotCXN0cnVjdCBiZV92Zl9jZmcgdmZfY2ZnW0JFX01BWF9WRl07CisJc3RydWN0IGJlX3ZmX2NmZyAqdmZfY2ZnOwogCXU4IGlzX3ZpcnRmbjsKIAl1MzIgc2xpX2ZhbWlseTsKIAl1OCBoYmFfcG9ydF9udW07CkBAIC0zNDcsMTAgKzM4NSwxMiBAQAogI2RlZmluZSBCRV9HRU4yIDIKICNkZWZpbmUgQkVfR0VOMyAzCiAKLSNkZWZpbmUgbGFuY2VyX2NoaXAoYWRhcHRlcikJCShhZGFwdGVyLT5wZGV2LT5kZXZpY2UgPT0gT0NfREVWSUNFX0lEMykKKyNkZWZpbmUgbGFuY2VyX2NoaXAoYWRhcHRlcikJKChhZGFwdGVyLT5wZGV2LT5kZXZpY2UgPT0gT0NfREVWSUNFX0lEMykgfHwgXAorCQkJCSAoYWRhcHRlci0+cGRldi0+ZGV2aWNlID09IE9DX0RFVklDRV9JRDQpKQogCiBleHRlcm4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJlX2V0aHRvb2xfb3BzOwogCisjZGVmaW5lIG1zaXhfZW5hYmxlZChhZGFwdGVyKQkJKGFkYXB0ZXItPm51bV9tc2l4X3ZlYyA+IDApCiAjZGVmaW5lIHR4X3N0YXRzKGFkYXB0ZXIpCQkoJmFkYXB0ZXItPnR4X3N0YXRzKQogI2RlZmluZSByeF9zdGF0cyhyeG8pCQkJKCZyeG8tPnN0YXRzKQogCkBAIC00NTUsMTggKzQ5NSwxMCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgYmVfY2hlY2tfc3Jpb3ZfZm5fdHlwZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQl1OCBkYXRhOwogCXUzMiBzbGlfaW50ZjsKIAotCWlmIChsYW5jZXJfY2hpcChhZGFwdGVyKSkgewotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoYWRhcHRlci0+cGRldiwgU0xJX0lOVEZfUkVHX09GRlNFVCwKLQkJCQkJCQkJJnNsaV9pbnRmKTsKLQkJYWRhcHRlci0+aXNfdmlydGZuID0gKHNsaV9pbnRmICYgU0xJX0lOVEZfRlRfTUFTSykgPyAxIDogMDsKLQl9IGVsc2UgewotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoYWRhcHRlci0+cGRldiwgMHhGRSwgMHhBQSk7Ci0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGFkYXB0ZXItPnBkZXYsIDB4RkUsICZkYXRhKTsKLQkJYWRhcHRlci0+aXNfdmlydGZuID0gKGRhdGEgIT0gMHhBQSk7Ci0JfQorCXBjaV9yZWFkX2NvbmZpZ19kd29yZChhZGFwdGVyLT5wZGV2LCBTTElfSU5URl9SRUdfT0ZGU0VULCAmc2xpX2ludGYpOworCWFkYXB0ZXItPmlzX3ZpcnRmbiA9IChzbGlfaW50ZiAmIFNMSV9JTlRGX0ZUX01BU0spID8gMSA6IDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBiZV92Zl9ldGhfYWRkcl9nZW5lcmF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTggKm1hYykKQEAgLTQ4Miw5ICs1MTQsMTUgQEAKIAltZW1jcHkobWFjLCBhZGFwdGVyLT5uZXRkZXYtPmRldl9hZGRyLCAzKTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGJlX211bHRpX3J4cShjb25zdCBzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gYWRhcHRlci0+bnVtX3J4X3FzID4gMTsKK30KKwogZXh0ZXJuIHZvaWQgYmVfY3Ffbm90aWZ5KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MTYgcWlkLCBib29sIGFybSwKIAkJdTE2IG51bV9wb3BwZWQpOwogZXh0ZXJuIHZvaWQgYmVfbGlua19zdGF0dXNfdXBkYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCBib29sIGxpbmtfdXApOwogZXh0ZXJuIHZvaWQgbmV0ZGV2X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gdm9pZCBiZV9wYXJzZV9zdGF0cyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gaW50IGJlX2xvYWRfZncoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICpmdW5jKTsKICNlbmRpZgkJCQkvKiBCRV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMKaW5kZXggMWUyZDgyNS4uMjQ2M2IxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYwpAQCAtNzEsMTggKzcxLDM4IEBACiAJY29tcGxfc3RhdHVzID0gKGNvbXBsLT5zdGF0dXMgPj4gQ1FFX1NUQVRVU19DT01QTF9TSElGVCkgJgogCQkJCUNRRV9TVEFUVVNfQ09NUExfTUFTSzsKIAotCWlmICgoY29tcGwtPnRhZzAgPT0gT1BDT0RFX0NPTU1PTl9XUklURV9GTEFTSFJPTSkgJiYKKwlpZiAoKChjb21wbC0+dGFnMCA9PSBPUENPREVfQ09NTU9OX1dSSVRFX0ZMQVNIUk9NKSB8fAorCQkoY29tcGwtPnRhZzAgPT0gT1BDT0RFX0NPTU1PTl9XUklURV9PQkpFQ1QpKSAmJgogCQkoY29tcGwtPnRhZzEgPT0gQ01EX1NVQlNZU1RFTV9DT01NT04pKSB7CiAJCWFkYXB0ZXItPmZsYXNoX3N0YXR1cyA9IGNvbXBsX3N0YXR1czsKIAkJY29tcGxldGUoJmFkYXB0ZXItPmZsYXNoX2NvbXBsKTsKIAl9CiAKIAlpZiAoY29tcGxfc3RhdHVzID09IE1DQ19TVEFUVVNfU1VDQ0VTUykgewotCQlpZiAoY29tcGwtPnRhZzAgPT0gT1BDT0RFX0VUSF9HRVRfU1RBVElTVElDUykgewotCQkJc3RydWN0IGJlX2NtZF9yZXNwX2dldF9zdGF0cyAqcmVzcCA9Ci0JCQkJCQlhZGFwdGVyLT5zdGF0c19jbWQudmE7Ci0JCQliZV9kd3NfbGVfdG9fY3B1KCZyZXNwLT5od19zdGF0cywKLQkJCQkJCXNpemVvZihyZXNwLT5od19zdGF0cykpOworCQlpZiAoKChjb21wbC0+dGFnMCA9PSBPUENPREVfRVRIX0dFVF9TVEFUSVNUSUNTKSB8fAorCQkJIChjb21wbC0+dGFnMCA9PSBPUENPREVfRVRIX0dFVF9QUE9SVF9TVEFUUykpICYmCisJCQkoY29tcGwtPnRhZzEgPT0gQ01EX1NVQlNZU1RFTV9FVEgpKSB7CisJCQlpZiAoYWRhcHRlci0+Z2VuZXJhdGlvbiA9PSBCRV9HRU4zKSB7CisJCQkJaWYgKGxhbmNlcl9jaGlwKGFkYXB0ZXIpKSB7CisJCQkJCXN0cnVjdCBsYW5jZXJfY21kX3Jlc3BfcHBvcnRfc3RhdHMKKwkJCQkJCSpyZXNwID0gYWRhcHRlci0+c3RhdHNfY21kLnZhOworCQkJCQliZV9kd3NfbGVfdG9fY3B1KCZyZXNwLT5wcG9ydF9zdGF0cywKKwkJCQkJCXNpemVvZihyZXNwLT5wcG9ydF9zdGF0cykpOworCQkJCX0gZWxzZSB7CisJCQkJCXN0cnVjdCBiZV9jbWRfcmVzcF9nZXRfc3RhdHNfdjEgKnJlc3AgPQorCQkJCQkJCWFkYXB0ZXItPnN0YXRzX2NtZC52YTsKKworCQkJCWJlX2R3c19sZV90b19jcHUoJnJlc3AtPmh3X3N0YXRzLAorCQkJCQkJCXNpemVvZihyZXNwLT5od19zdGF0cykpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJc3RydWN0IGJlX2NtZF9yZXNwX2dldF9zdGF0c192MCAqcmVzcCA9CisJCQkJCQkJYWRhcHRlci0+c3RhdHNfY21kLnZhOworCisJCQkJYmVfZHdzX2xlX3RvX2NwdSgmcmVzcC0+aHdfc3RhdHMsCisJCQkJCQkJc2l6ZW9mKHJlc3AtPmh3X3N0YXRzKSk7CisJCQl9CisJCQliZV9wYXJzZV9zdGF0cyhhZGFwdGVyKTsKIAkJCW5ldGRldl9zdGF0c191cGRhdGUoYWRhcHRlcik7CiAJCQlhZGFwdGVyLT5zdGF0c19jbWRfc2VudCA9IGZhbHNlOwogCQl9CkBAIC0xMzIsNyArMTUyLDcgQEAKIAkJc3RydWN0IGJlX2FzeW5jX2V2ZW50X2dycDVfcHZpZF9zdGF0ZSAqZXZ0KQogewogCWlmIChldnQtPmVuYWJsZWQpCi0JCWFkYXB0ZXItPnB2aWQgPSBldnQtPnRhZzsKKwkJYWRhcHRlci0+cHZpZCA9IGxlMTZfdG9fY3B1KGV2dC0+dGFnKTsKIAllbHNlCiAJCWFkYXB0ZXItPnB2aWQgPSAwOwogfQpAQCAtMjkyLDEyICszMTIsMTIgQEAKIAogCQlpZiAobXNlY3MgPiA0MDAwKSB7CiAJCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJtYm94IHBvbGwgdGltZWQgb3V0XG4iKTsKLQkJCWJlX2RldGVjdF9kdW1wX3VlKGFkYXB0ZXIpOworCQkJaWYgKCFsYW5jZXJfY2hpcChhZGFwdGVyKSkKKwkJCQliZV9kZXRlY3RfZHVtcF91ZShhZGFwdGVyKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCi0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXNjaGVkdWxlX3RpbWVvdXQobXNlY3NfdG9famlmZmllcygxKSk7CisJCW1zbGVlcCgxKTsKIAkJbXNlY3MrKzsKIAl9IHdoaWxlICh0cnVlKTsKIApAQCAtMzc0LDIzICszOTQsMjUgQEAKIHsKIAl1MTYgc3RhZ2U7CiAJaW50IHN0YXR1cywgdGltZW91dCA9IDA7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFkYXB0ZXItPnBkZXYtPmRldjsKIAogCWRvIHsKIAkJc3RhdHVzID0gYmVfUE9TVF9zdGFnZV9nZXQoYWRhcHRlciwgJnN0YWdlKTsKIAkJaWYgKHN0YXR1cykgewotCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiUE9TVCBlcnJvcjsgc3RhZ2U9MHgleFxuIiwKLQkJCQlzdGFnZSk7CisJCQlkZXZfZXJyKGRldiwgIlBPU1QgZXJyb3I7IHN0YWdlPTB4JXhcbiIsIHN0YWdlKTsKIAkJCXJldHVybiAtMTsKIAkJfSBlbHNlIGlmIChzdGFnZSAhPSBQT1NUX1NUQUdFX0FSTUZXX1JEWSkgewotCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJCXNjaGVkdWxlX3RpbWVvdXQoMiAqIEhaKTsKKwkJCWlmIChtc2xlZXBfaW50ZXJydXB0aWJsZSgyMDAwKSkgeworCQkJCWRldl9lcnIoZGV2LCAiV2FpdGluZyBmb3IgUE9TVCBhYm9ydGVkXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlRSOworCQkJfQogCQkJdGltZW91dCArPSAyOwogCQl9IGVsc2UgewogCQkJcmV0dXJuIDA7CiAJCX0KIAl9IHdoaWxlICh0aW1lb3V0IDwgNDApOwogCi0JZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiUE9TVCB0aW1lb3V0OyBzdGFnZT0weCV4XG4iLCBzdGFnZSk7CisJZGV2X2VycihkZXYsICJQT1NUIHRpbWVvdXQ7IHN0YWdlPTB4JXhcbiIsIHN0YWdlKTsKIAlyZXR1cm4gLTE7CiB9CiAKQEAgLTcyOCw4ICs3NTAsNiBAQAogCWlmIChsYW5jZXJfY2hpcChhZGFwdGVyKSkgewogCQlyZXEtPmhkci52ZXJzaW9uID0gMjsKIAkJcmVxLT5wYWdlX3NpemUgPSAxOyAvKiAxIGZvciA0SyAqLwotCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHRfbGFuY2VyLCBjb2FsZXNjd20sIGN0eHQsCi0JCQkJCQkJCWNvYWxlc2NlX3dtKTsKIAkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0X2xhbmNlciwgbm9kZWxheSwgY3R4dCwKIAkJCQkJCQkJbm9fZGVsYXkpOwogCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHRfbGFuY2VyLCBjb3VudCwgY3R4dCwKQEAgLTEwNzQsNyArMTA5NCw3IEBACiBpbnQgYmVfY21kX2dldF9zdGF0cyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IGJlX2RtYV9tZW0gKm5vbmVtYl9jbWQpCiB7CiAJc3RydWN0IGJlX21jY193cmIgKndyYjsKLQlzdHJ1Y3QgYmVfY21kX3JlcV9nZXRfc3RhdHMgKnJlcTsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgKmhkcjsKIAlzdHJ1Y3QgYmVfc2dlICpzZ2U7CiAJaW50IHN0YXR1cyA9IDA7CiAKQEAgLTEwODgsMTQgKzExMDgsNjIgQEAKIAkJc3RhdHVzID0gLUVCVVNZOwogCQlnb3RvIGVycjsKIAl9CisJaGRyID0gbm9uZW1iX2NtZC0+dmE7CisJc2dlID0gbm9uZW1iZWRkZWRfc2dsKHdyYik7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBub25lbWJfY21kLT5zaXplLCBmYWxzZSwgMSwKKwkJCU9QQ09ERV9FVEhfR0VUX1NUQVRJU1RJQ1MpOworCisJYmVfY21kX2hkcl9wcmVwYXJlKGhkciwgQ01EX1NVQlNZU1RFTV9FVEgsCisJCU9QQ09ERV9FVEhfR0VUX1NUQVRJU1RJQ1MsIG5vbmVtYl9jbWQtPnNpemUpOworCisJaWYgKGFkYXB0ZXItPmdlbmVyYXRpb24gPT0gQkVfR0VOMykKKwkJaGRyLT52ZXJzaW9uID0gMTsKKworCXdyYi0+dGFnMSA9IENNRF9TVUJTWVNURU1fRVRIOworCXNnZS0+cGFfaGkgPSBjcHVfdG9fbGUzMih1cHBlcl8zMl9iaXRzKG5vbmVtYl9jbWQtPmRtYSkpOworCXNnZS0+cGFfbG8gPSBjcHVfdG9fbGUzMihub25lbWJfY21kLT5kbWEgJiAweEZGRkZGRkZGKTsKKwlzZ2UtPmxlbiA9IGNwdV90b19sZTMyKG5vbmVtYl9jbWQtPnNpemUpOworCisJYmVfbWNjX25vdGlmeShhZGFwdGVyKTsKKwlhZGFwdGVyLT5zdGF0c19jbWRfc2VudCA9IHRydWU7CisKK2VycjoKKwlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+bWNjX2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIExhbmNlciBTdGF0cyAqLworaW50IGxhbmNlcl9jbWRfZ2V0X3Bwb3J0X3N0YXRzKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAorCQkJCXN0cnVjdCBiZV9kbWFfbWVtICpub25lbWJfY21kKQoreworCisJc3RydWN0IGJlX21jY193cmIgKndyYjsKKwlzdHJ1Y3QgbGFuY2VyX2NtZF9yZXFfcHBvcnRfc3RhdHMgKnJlcTsKKwlzdHJ1Y3QgYmVfc2dlICpzZ2U7CisJaW50IHN0YXR1cyA9IDA7CisKKwlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPm1jY19sb2NrKTsKKworCXdyYiA9IHdyYl9mcm9tX21jY3EoYWRhcHRlcik7CisJaWYgKCF3cmIpIHsKKwkJc3RhdHVzID0gLUVCVVNZOworCQlnb3RvIGVycjsKKwl9CiAJcmVxID0gbm9uZW1iX2NtZC0+dmE7CiAJc2dlID0gbm9uZW1iZWRkZWRfc2dsKHdyYik7CiAKLQliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIGZhbHNlLCAxLAotCQkJT1BDT0RFX0VUSF9HRVRfU1RBVElTVElDUyk7CisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgbm9uZW1iX2NtZC0+c2l6ZSwgZmFsc2UsIDEsCisJCQlPUENPREVfRVRIX0dFVF9QUE9SVF9TVEFUUyk7CiAKIAliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0VUSCwKLQkJT1BDT0RFX0VUSF9HRVRfU1RBVElTVElDUywgc2l6ZW9mKCpyZXEpKTsKKwkJCU9QQ09ERV9FVEhfR0VUX1BQT1JUX1NUQVRTLCBub25lbWJfY21kLT5zaXplKTsKKworCisJcmVxLT5jbWRfcGFyYW1zLnBhcmFtcy5wcG9ydF9udW0gPSBjcHVfdG9fbGUxNihhZGFwdGVyLT5wb3J0X251bSk7CisJcmVxLT5jbWRfcGFyYW1zLnBhcmFtcy5yZXNldF9zdGF0cyA9IDA7CisKKwl3cmItPnRhZzEgPSBDTURfU1VCU1lTVEVNX0VUSDsKIAlzZ2UtPnBhX2hpID0gY3B1X3RvX2xlMzIodXBwZXJfMzJfYml0cyhub25lbWJfY21kLT5kbWEpKTsKIAlzZ2UtPnBhX2xvID0gY3B1X3RvX2xlMzIobm9uZW1iX2NtZC0+ZG1hICYgMHhGRkZGRkZGRik7CiAJc2dlLT5sZW4gPSBjcHVfdG9fbGUzMihub25lbWJfY21kLT5zaXplKTsKQEAgLTExMTAsNyArMTE3OCw3IEBACiAKIC8qIFVzZXMgc3luY2hyb25vdXMgbWNjICovCiBpbnQgYmVfY21kX2xpbmtfc3RhdHVzX3F1ZXJ5KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAotCQkJYm9vbCAqbGlua191cCwgdTggKm1hY19zcGVlZCwgdTE2ICpsaW5rX3NwZWVkKQorCQkJYm9vbCAqbGlua191cCwgdTggKm1hY19zcGVlZCwgdTE2ICpsaW5rX3NwZWVkLCB1MzIgZG9tKQogewogCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7CiAJc3RydWN0IGJlX2NtZF9yZXFfbGlua19zdGF0dXMgKnJlcTsKQEAgLTExODYsNiArMTI1NCwxMTYgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCisvKiBVc2VzIHN5bmNocm9ub3VzIG1jYyAqLworaW50IGJlX2NtZF9nZXRfcmVnX2xlbihzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyICpsb2dfc2l6ZSkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiOworCXN0cnVjdCBiZV9jbWRfcmVxX2dldF9mYXQgKnJlcTsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5tY2NfbG9jayk7CisKKwl3cmIgPSB3cmJfZnJvbV9tY2NxKGFkYXB0ZXIpOworCWlmICghd3JiKSB7CisJCXN0YXR1cyA9IC1FQlVTWTsKKwkJZ290byBlcnI7CisJfQorCXJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCwKKwkJCU9QQ09ERV9DT01NT05fTUFOQUdFX0ZBVCk7CisKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKKwkJT1BDT0RFX0NPTU1PTl9NQU5BR0VfRkFULCBzaXplb2YoKnJlcSkpOworCXJlcS0+ZmF0X29wZXJhdGlvbiA9IGNwdV90b19sZTMyKFFVRVJZX0ZBVCk7CisJc3RhdHVzID0gYmVfbWNjX25vdGlmeV93YWl0KGFkYXB0ZXIpOworCWlmICghc3RhdHVzKSB7CisJCXN0cnVjdCBiZV9jbWRfcmVzcF9nZXRfZmF0ICpyZXNwID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCQlpZiAobG9nX3NpemUgJiYgcmVzcC0+bG9nX3NpemUpCisJCQkqbG9nX3NpemUgPSBsZTMyX3RvX2NwdShyZXNwLT5sb2dfc2l6ZSkgLQorCQkJCQlzaXplb2YodTMyKTsKKwl9CitlcnI6CisJc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPm1jY19sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCit2b2lkIGJlX2NtZF9nZXRfcmVncyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGJ1Zl9sZW4sIHZvaWQgKmJ1ZikKK3sKKwlzdHJ1Y3QgYmVfZG1hX21lbSBnZXRfZmF0X2NtZDsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiOworCXN0cnVjdCBiZV9jbWRfcmVxX2dldF9mYXQgKnJlcTsKKwlzdHJ1Y3QgYmVfc2dlICpzZ2U7CisJdTMyIG9mZnNldCA9IDAsIHRvdGFsX3NpemUsIGJ1Zl9zaXplLAorCQkJCWxvZ19vZmZzZXQgPSBzaXplb2YodTMyKSwgcGF5bG9hZF9sZW47CisJaW50IHN0YXR1czsKKworCWlmIChidWZfbGVuID09IDApCisJCXJldHVybjsKKworCXRvdGFsX3NpemUgPSBidWZfbGVuOworCisJZ2V0X2ZhdF9jbWQuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYmVfY21kX3JlcV9nZXRfZmF0KSArIDYwKjEwMjQ7CisJZ2V0X2ZhdF9jbWQudmEgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJZ2V0X2ZhdF9jbWQuc2l6ZSwKKwkJCSZnZXRfZmF0X2NtZC5kbWEpOworCWlmICghZ2V0X2ZhdF9jbWQudmEpIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkiTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSB3aGlsZSByZXRyaWV2aW5nIEZBVCBkYXRhXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+bWNjX2xvY2spOworCisJd2hpbGUgKHRvdGFsX3NpemUpIHsKKwkJYnVmX3NpemUgPSBtaW4odG90YWxfc2l6ZSwgKHUzMik2MCoxMDI0KTsKKwkJdG90YWxfc2l6ZSAtPSBidWZfc2l6ZTsKKworCQl3cmIgPSB3cmJfZnJvbV9tY2NxKGFkYXB0ZXIpOworCQlpZiAoIXdyYikgeworCQkJc3RhdHVzID0gLUVCVVNZOworCQkJZ290byBlcnI7CisJCX0KKwkJcmVxID0gZ2V0X2ZhdF9jbWQudmE7CisJCXNnZSA9IG5vbmVtYmVkZGVkX3NnbCh3cmIpOworCisJCXBheWxvYWRfbGVuID0gc2l6ZW9mKHN0cnVjdCBiZV9jbWRfcmVxX2dldF9mYXQpICsgYnVmX3NpemU7CisJCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHBheWxvYWRfbGVuLCBmYWxzZSwgMSwKKwkJCQlPUENPREVfQ09NTU9OX01BTkFHRV9GQVQpOworCisJCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fQ09NTU9OLAorCQkJCU9QQ09ERV9DT01NT05fTUFOQUdFX0ZBVCwgcGF5bG9hZF9sZW4pOworCisJCXNnZS0+cGFfaGkgPSBjcHVfdG9fbGUzMih1cHBlcl8zMl9iaXRzKGdldF9mYXRfY21kLmRtYSkpOworCQlzZ2UtPnBhX2xvID0gY3B1X3RvX2xlMzIoZ2V0X2ZhdF9jbWQuZG1hICYgMHhGRkZGRkZGRik7CisJCXNnZS0+bGVuID0gY3B1X3RvX2xlMzIoZ2V0X2ZhdF9jbWQuc2l6ZSk7CisKKwkJcmVxLT5mYXRfb3BlcmF0aW9uID0gY3B1X3RvX2xlMzIoUkVUUklFVkVfRkFUKTsKKwkJcmVxLT5yZWFkX2xvZ19vZmZzZXQgPSBjcHVfdG9fbGUzMihsb2dfb2Zmc2V0KTsKKwkJcmVxLT5yZWFkX2xvZ19sZW5ndGggPSBjcHVfdG9fbGUzMihidWZfc2l6ZSk7CisJCXJlcS0+ZGF0YV9idWZmZXJfc2l6ZSA9IGNwdV90b19sZTMyKGJ1Zl9zaXplKTsKKworCQlzdGF0dXMgPSBiZV9tY2Nfbm90aWZ5X3dhaXQoYWRhcHRlcik7CisJCWlmICghc3RhdHVzKSB7CisJCQlzdHJ1Y3QgYmVfY21kX3Jlc3BfZ2V0X2ZhdCAqcmVzcCA9IGdldF9mYXRfY21kLnZhOworCQkJbWVtY3B5KGJ1ZiArIG9mZnNldCwKKwkJCQlyZXNwLT5kYXRhX2J1ZmZlciwKKwkJCQlyZXNwLT5yZWFkX2xvZ19sZW5ndGgpOworCQl9IGVsc2UgeworCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiRkFUIFRhYmxlIFJldHJpZXZlIGVycm9yXG4iKTsKKwkJCWdvdG8gZXJyOworCQl9CisJCW9mZnNldCArPSBidWZfc2l6ZTsKKwkJbG9nX29mZnNldCArPSBidWZfc2l6ZTsKKwl9CitlcnI6CisJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBnZXRfZmF0X2NtZC5zaXplLAorCQkJZ2V0X2ZhdF9jbWQudmEsCisJCQlnZXRfZmF0X2NtZC5kbWEpOworCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5tY2NfbG9jayk7Cit9CisKIC8qIFVzZXMgTWJveCAqLwogaW50IGJlX2NtZF9nZXRfZndfdmVyKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCBjaGFyICpmd192ZXIpCiB7CkBAIC0xMjkzLDEyICsxNDcxLDI0IEBACiAvKiBVc2VzIE1DQyBmb3IgdGhpcyBjb21tYW5kIGFzIGl0IG1heSBiZSBjYWxsZWQgaW4gQkggY29udGV4dAogICogVXNlcyBzeW5jaHJvbm91cyBtY2MKICAqLwotaW50IGJlX2NtZF9wcm9taXNjdW91c19jb25maWcoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IHBvcnRfbnVtLCBib29sIGVuKQoraW50IGJlX2NtZF9wcm9taXNjdW91c19jb25maWcoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wgZW4pCiB7CiAJc3RydWN0IGJlX21jY193cmIgKndyYjsKLQlzdHJ1Y3QgYmVfY21kX3JlcV9wcm9taXNjdW91c19jb25maWcgKnJlcTsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9yeF9maWx0ZXIgKnJlcTsKKwlzdHJ1Y3QgYmVfZG1hX21lbSBwcm9taXNjb3VzX2NtZDsKKwlzdHJ1Y3QgYmVfc2dlICpzZ2U7CiAJaW50IHN0YXR1czsKIAorCW1lbXNldCgmcHJvbWlzY291c19jbWQsIDAsIHNpemVvZihzdHJ1Y3QgYmVfZG1hX21lbSkpOworCXByb21pc2NvdXNfY21kLnNpemUgPSBzaXplb2Yoc3RydWN0IGJlX2NtZF9yZXFfcnhfZmlsdGVyKTsKKwlwcm9taXNjb3VzX2NtZC52YSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJcHJvbWlzY291c19jbWQuc2l6ZSwgJnByb21pc2NvdXNfY21kLmRtYSk7CisJaWYgKCFwcm9taXNjb3VzX2NtZC52YSkgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKIAlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPm1jY19sb2NrKTsKIAogCXdyYiA9IHdyYl9mcm9tX21jY3EoYWRhcHRlcik7CkBAIC0xMzA2LDI2ICsxNDk2LDMwIEBACiAJCXN0YXR1cyA9IC1FQlVTWTsKIAkJZ290byBlcnI7CiAJfQotCXJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKIAotCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCwgT1BDT0RFX0VUSF9QUk9NSVNDVU9VUyk7CisJcmVxID0gcHJvbWlzY291c19jbWQudmE7CisJc2dlID0gbm9uZW1iZWRkZWRfc2dsKHdyYik7CiAKLQliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0VUSCwKLQkJT1BDT0RFX0VUSF9QUk9NSVNDVU9VUywgc2l6ZW9mKCpyZXEpKTsKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIGZhbHNlLCAxLAorCQkJCQlPUENPREVfQ09NTU9OX05UV0tfUlhfRklMVEVSKTsKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKKwkJCU9QQ09ERV9DT01NT05fTlRXS19SWF9GSUxURVIsIHNpemVvZigqcmVxKSk7CiAKLQkvKiBJbiBGVyB2ZXJzaW9ucyBYLjEwMi4xNDkvWC4xMDEuNDg3IGFuZCBsYXRlciwKLQkgKiB0aGUgcG9ydCBzZXR0aW5nIGFzc29jaWF0ZWQgb25seSB3aXRoIHRoZQotCSAqIGlzc3VpbmcgcGNpIGZ1bmN0aW9uIHdpbGwgdGFrZSBlZmZlY3QKLQkgKi8KLQlpZiAocG9ydF9udW0pCi0JCXJlcS0+cG9ydDFfcHJvbWlzY3VvdXMgPSBlbjsKLQllbHNlCi0JCXJlcS0+cG9ydDBfcHJvbWlzY3VvdXMgPSBlbjsKKwlyZXEtPmlmX2lkID0gY3B1X3RvX2xlMzIoYWRhcHRlci0+aWZfaGFuZGxlKTsKKwlyZXEtPmlmX2ZsYWdzX21hc2sgPSBjcHVfdG9fbGUzMihCRV9JRl9GTEFHU19QUk9NSVNDVU9VUyk7CisJaWYgKGVuKQorCQlyZXEtPmlmX2ZsYWdzID0gY3B1X3RvX2xlMzIoQkVfSUZfRkxBR1NfUFJPTUlTQ1VPVVMpOworCisJc2dlLT5wYV9oaSA9IGNwdV90b19sZTMyKHVwcGVyXzMyX2JpdHMocHJvbWlzY291c19jbWQuZG1hKSk7CisJc2dlLT5wYV9sbyA9IGNwdV90b19sZTMyKHByb21pc2NvdXNfY21kLmRtYSAmIDB4RkZGRkZGRkYpOworCXNnZS0+bGVuID0gY3B1X3RvX2xlMzIocHJvbWlzY291c19jbWQuc2l6ZSk7CiAKIAlzdGF0dXMgPSBiZV9tY2Nfbm90aWZ5X3dhaXQoYWRhcHRlcik7CiAKIGVycjoKIAlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+bWNjX2xvY2spOworCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgcHJvbWlzY291c19jbWQuc2l6ZSwKKwkJCXByb21pc2NvdXNfY21kLnZhLCBwcm9taXNjb3VzX2NtZC5kbWEpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTE2MDgsNiArMTgwMiw4MSBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKK2ludCBsYW5jZXJfY21kX3dyaXRlX29iamVjdChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IGJlX2RtYV9tZW0gKmNtZCwKKwkJCXUzMiBkYXRhX3NpemUsIHUzMiBkYXRhX29mZnNldCwgY29uc3QgY2hhciAqb2JqX25hbWUsCisJCQl1MzIgKmRhdGFfd3JpdHRlbiwgdTggKmFkZG5fc3RhdHVzKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7CisJc3RydWN0IGxhbmNlcl9jbWRfcmVxX3dyaXRlX29iamVjdCAqcmVxOworCXN0cnVjdCBsYW5jZXJfY21kX3Jlc3Bfd3JpdGVfb2JqZWN0ICpyZXNwOworCXZvaWQgKmN0eHQgPSBOVUxMOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPm1jY19sb2NrKTsKKwlhZGFwdGVyLT5mbGFzaF9zdGF0dXMgPSAwOworCisJd3JiID0gd3JiX2Zyb21fbWNjcShhZGFwdGVyKTsKKwlpZiAoIXdyYikgeworCQlzdGF0dXMgPSAtRUJVU1k7CisJCWdvdG8gZXJyX3VubG9jazsKKwl9CisKKwlyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2Yoc3RydWN0IGxhbmNlcl9jbWRfcmVxX3dyaXRlX29iamVjdCksCisJCQl0cnVlLCAxLCBPUENPREVfQ09NTU9OX1dSSVRFX09CSkVDVCk7CisJd3JiLT50YWcxID0gQ01EX1NVQlNZU1RFTV9DT01NT047CisKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKKwkJCQlPUENPREVfQ09NTU9OX1dSSVRFX09CSkVDVCwKKwkJCQlzaXplb2Yoc3RydWN0IGxhbmNlcl9jbWRfcmVxX3dyaXRlX29iamVjdCkpOworCisJY3R4dCA9ICZyZXEtPmNvbnRleHQ7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9sYW5jZXJfd3JpdGVfb2JqX2NvbnRleHQsCisJCQl3cml0ZV9sZW5ndGgsIGN0eHQsIGRhdGFfc2l6ZSk7CisKKwlpZiAoZGF0YV9zaXplID09IDApCisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfbGFuY2VyX3dyaXRlX29ial9jb250ZXh0LAorCQkJCWVvZiwgY3R4dCwgMSk7CisJZWxzZQorCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2xhbmNlcl93cml0ZV9vYmpfY29udGV4dCwKKwkJCQllb2YsIGN0eHQsIDApOworCisJYmVfZHdzX2NwdV90b19sZShjdHh0LCBzaXplb2YocmVxLT5jb250ZXh0KSk7CisJcmVxLT53cml0ZV9vZmZzZXQgPSBjcHVfdG9fbGUzMihkYXRhX29mZnNldCk7CisJc3RyY3B5KHJlcS0+b2JqZWN0X25hbWUsIG9ial9uYW1lKTsKKwlyZXEtPmRlc2NyaXB0b3JfY291bnQgPSBjcHVfdG9fbGUzMigxKTsKKwlyZXEtPmJ1Zl9sZW4gPSBjcHVfdG9fbGUzMihkYXRhX3NpemUpOworCXJlcS0+YWRkcl9sb3cgPSBjcHVfdG9fbGUzMigoY21kLT5kbWEgKworCQkJCXNpemVvZihzdHJ1Y3QgbGFuY2VyX2NtZF9yZXFfd3JpdGVfb2JqZWN0KSkKKwkJCQkmIDB4RkZGRkZGRkYpOworCXJlcS0+YWRkcl9oaWdoID0gY3B1X3RvX2xlMzIodXBwZXJfMzJfYml0cyhjbWQtPmRtYSArCisJCQkJc2l6ZW9mKHN0cnVjdCBsYW5jZXJfY21kX3JlcV93cml0ZV9vYmplY3QpKSk7CisKKwliZV9tY2Nfbm90aWZ5KGFkYXB0ZXIpOworCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5tY2NfbG9jayk7CisKKwlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmYWRhcHRlci0+Zmxhc2hfY29tcGwsCisJCQltc2Vjc190b19qaWZmaWVzKDEyMDAwKSkpCisJCXN0YXR1cyA9IC0xOworCWVsc2UKKwkJc3RhdHVzID0gYWRhcHRlci0+Zmxhc2hfc3RhdHVzOworCisJcmVzcCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlpZiAoIXN0YXR1cykgeworCQkqZGF0YV93cml0dGVuID0gbGUzMl90b19jcHUocmVzcC0+YWN0dWFsX3dyaXRlX2xlbik7CisJfSBlbHNlIHsKKwkJKmFkZG5fc3RhdHVzID0gcmVzcC0+YWRkaXRpb25hbF9zdGF0dXM7CisJCXN0YXR1cyA9IHJlc3AtPnN0YXR1czsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworCitlcnJfdW5sb2NrOgorCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5tY2NfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKwogaW50IGJlX2NtZF93cml0ZV9mbGFzaHJvbShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IGJlX2RtYV9tZW0gKmNtZCwKIAkJCXUzMiBmbGFzaF90eXBlLCB1MzIgZmxhc2hfb3Bjb2RlLCB1MzIgYnVmX3NpemUpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmggYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmgKaW5kZXggNGYyNTRjZi4uODE0OGNjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5oCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuaApAQCAtMTg2LDEyICsxODYsMTQgQEAKICNkZWZpbmUgT1BDT0RFX0NPTU1PTl9OVFdLX1BNQUNfQURECQkJNTkKICNkZWZpbmUgT1BDT0RFX0NPTU1PTl9OVFdLX1BNQUNfREVMCQkJNjAKICNkZWZpbmUgT1BDT0RFX0NPTU1PTl9GVU5DVElPTl9SRVNFVAkJCTYxCisjZGVmaW5lIE9QQ09ERV9DT01NT05fTUFOQUdFX0ZBVAkJCTY4CiAjZGVmaW5lIE9QQ09ERV9DT01NT05fRU5BQkxFX0RJU0FCTEVfQkVBQ09OCQk2OQogI2RlZmluZSBPUENPREVfQ09NTU9OX0dFVF9CRUFDT05fU1RBVEUJCQk3MAogI2RlZmluZSBPUENPREVfQ09NTU9OX1JFQURfVFJBTlNSRUNWX0RBVEEJCTczCiAjZGVmaW5lIE9QQ09ERV9DT01NT05fR0VUX1BIWV9ERVRBSUxTCQkJMTAyCiAjZGVmaW5lIE9QQ09ERV9DT01NT05fU0VUX0RSSVZFUl9GVU5DVElPTl9DQVAJCTEwMwogI2RlZmluZSBPUENPREVfQ09NTU9OX0dFVF9DTlRMX0FERElUSU9OQUxfQVRUUklCVVRFUwkxMjEKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9XUklURV9PQkpFQ1QJCQkxNzIKIAogI2RlZmluZSBPUENPREVfRVRIX1JTU19DT05GSUcJCQkJMQogI2RlZmluZSBPUENPREVfRVRIX0FDUElfQ09ORklHCQkJCTIKQEAgLTIwMiw2ICsyMDQsNyBAQAogI2RlZmluZSBPUENPREVfRVRIX1RYX0RFU1RST1kgICAgICAgICAgIAkJOQogI2RlZmluZSBPUENPREVfRVRIX1JYX0RFU1RST1kgICAgICAgICAgIAkJMTAKICNkZWZpbmUgT1BDT0RFX0VUSF9BQ1BJX1dPTF9NQUdJQ19DT05GSUcJCTEyCisjZGVmaW5lIE9QQ09ERV9FVEhfR0VUX1BQT1JUX1NUQVRTCQkJMTgKIAogI2RlZmluZSBPUENPREVfTE9XTEVWRUxfSE9TVF9ERFJfRE1BICAgICAgICAgICAgICAgICAgICAxNwogI2RlZmluZSBPUENPREVfTE9XTEVWRUxfTE9PUEJBQ0tfVEVTVCAgICAgICAgICAgICAgICAgICAxOApAQCAtMzgwLDYgKzM4MywyNCBAQAogCXUxNiByc3ZkMDsKIH0gX19wYWNrZWQ7CiAKK3N0cnVjdCBiZV9jbWRfcmVxX2dldF9mYXQgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTMyIGZhdF9vcGVyYXRpb247CisJdTMyIHJlYWRfbG9nX29mZnNldDsKKwl1MzIgcmVhZF9sb2dfbGVuZ3RoOworCXUzMiBkYXRhX2J1ZmZlcl9zaXplOworCXUzMiBkYXRhX2J1ZmZlclsxXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9jbWRfcmVzcF9nZXRfZmF0IHsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIGhkcjsKKwl1MzIgbG9nX3NpemU7CisJdTMyIHJlYWRfbG9nX2xlbmd0aDsKKwl1MzIgcnN2ZFsyXTsKKwl1MzIgZGF0YV9idWZmZXJbMV07Cit9IF9fcGFja2VkOworCisKIC8qKioqKioqKioqKioqKioqKioqKiBDcmVhdGUgTUNDUSAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKICAqIGFzIGEgYnl0ZTogdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZCAqLwpAQCAtNTQ5LDcgKzU3MCw3IEBACiB9OwogCiAvKioqKioqKioqKioqKioqIEhXIFN0YXRzIEdldCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RydWN0IGJlX3BvcnRfcnhmX3N0YXRzIHsKK3N0cnVjdCBiZV9wb3J0X3J4Zl9zdGF0c192MCB7CiAJdTMyIHJ4X2J5dGVzX2xzZDsJLyogZHdvcmQgMCovCiAJdTMyIHJ4X2J5dGVzX21zZDsJLyogZHdvcmQgMSovCiAJdTMyIHJ4X3RvdGFsX2ZyYW1lczsJLyogZHdvcmQgMiovCkBAIC02MTgsOCArNjM5LDggQEAKIAl1MzIgcnhfaW5wdXRfZmlmb19vdmVyZmxvdzsJLyogZHdvcmQgNjUqLwogfTsKIAotc3RydWN0IGJlX3J4Zl9zdGF0cyB7Ci0Jc3RydWN0IGJlX3BvcnRfcnhmX3N0YXRzIHBvcnRbMl07CitzdHJ1Y3QgYmVfcnhmX3N0YXRzX3YwIHsKKwlzdHJ1Y3QgYmVfcG9ydF9yeGZfc3RhdHNfdjAgcG9ydFsyXTsKIAl1MzIgcnhfZHJvcHNfbm9fcGJ1ZjsJLyogZHdvcmQgMTMyKi8KIAl1MzIgcnhfZHJvcHNfbm9fdHhwYjsJLyogZHdvcmQgMTMzKi8KIAl1MzIgcnhfZHJvcHNfbm9fZXJ4X2Rlc2NyOwkvKiBkd29yZCAxMzQqLwpAQCAtNjQyLDM2ICs2NjMsMjI3IEBACiAJdTMyIHJzdmQxWzZdOwogfTsKIAotc3RydWN0IGJlX2VyeF9zdGF0cyB7CitzdHJ1Y3QgYmVfZXJ4X3N0YXRzX3YwIHsKIAl1MzIgcnhfZHJvcHNfbm9fZnJhZ21lbnRzWzQ0XTsgICAgIC8qIGR3b3JkUyAwIHRvIDQzKi8KLQl1MzIgZGVidWdfd2RtYV9zZW50X2hvbGQ7ICAgICAgICAgIC8qIGR3b3JkIDQ0Ki8KLQl1MzIgZGVidWdfd2RtYV9wYmZyZWVfc2VudF9ob2xkOyAgIC8qIGR3b3JkIDQ1Ki8KLQl1MzIgZGVidWdfd2RtYV96ZXJvYnl0ZV9wYmZyZWVfc2VudF9ob2xkOyAvKiBkd29yZCA0NiovCi0JdTMyIGRlYnVnX3BtZW1fcGJ1Zl9kZWFsbG9jOyAgICAgICAvKiBkd29yZCA0NyovCisJdTMyIHJzdmRbNF07CiB9OwogCiBzdHJ1Y3QgYmVfcG1lbV9zdGF0cyB7CiAJdTMyIGV0aF9yZWRfZHJvcHM7Ci0JdTMyIHJzdmRbNF07CisJdTMyIHJzdmRbNV07CiB9OwogCi1zdHJ1Y3QgYmVfaHdfc3RhdHMgewotCXN0cnVjdCBiZV9yeGZfc3RhdHMgcnhmOworc3RydWN0IGJlX2h3X3N0YXRzX3YwIHsKKwlzdHJ1Y3QgYmVfcnhmX3N0YXRzX3YwIHJ4ZjsKIAl1MzIgcnN2ZFs0OF07Ci0Jc3RydWN0IGJlX2VyeF9zdGF0cyBlcng7CisJc3RydWN0IGJlX2VyeF9zdGF0c192MCBlcng7CiAJc3RydWN0IGJlX3BtZW1fc3RhdHMgcG1lbTsKIH07CiAKLXN0cnVjdCBiZV9jbWRfcmVxX2dldF9zdGF0cyB7CitzdHJ1Y3QgYmVfY21kX3JlcV9nZXRfc3RhdHNfdjAgewogCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7Ci0JdTggcnN2ZFtzaXplb2Yoc3RydWN0IGJlX2h3X3N0YXRzKV07CisJdTggcnN2ZFtzaXplb2Yoc3RydWN0IGJlX2h3X3N0YXRzX3YwKV07CiB9OwogCi1zdHJ1Y3QgYmVfY21kX3Jlc3BfZ2V0X3N0YXRzIHsKK3N0cnVjdCBiZV9jbWRfcmVzcF9nZXRfc3RhdHNfdjAgewogCXN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgaGRyOwotCXN0cnVjdCBiZV9od19zdGF0cyBod19zdGF0czsKKwlzdHJ1Y3QgYmVfaHdfc3RhdHNfdjAgaHdfc3RhdHM7CiB9OwogCisjZGVmaW5lIG1ha2VfNjRiaXRfdmFsKGhpXzMyLCBsb18zMikJKCgodTY0KWhpXzMyPDwzMikgfCBsb18zMikKK3N0cnVjdCBsYW5jZXJfY21kX3Bwb3J0X3N0YXRzIHsKKwl1MzIgdHhfcGFja2V0c19sbzsKKwl1MzIgdHhfcGFja2V0c19oaTsKKwl1MzIgdHhfdW5pY2FzdF9wYWNrZXRzX2xvOworCXUzMiB0eF91bmljYXN0X3BhY2tldHNfaGk7CisJdTMyIHR4X211bHRpY2FzdF9wYWNrZXRzX2xvOworCXUzMiB0eF9tdWx0aWNhc3RfcGFja2V0c19oaTsKKwl1MzIgdHhfYnJvYWRjYXN0X3BhY2tldHNfbG87CisJdTMyIHR4X2Jyb2FkY2FzdF9wYWNrZXRzX2hpOworCXUzMiB0eF9ieXRlc19sbzsKKwl1MzIgdHhfYnl0ZXNfaGk7CisJdTMyIHR4X3VuaWNhc3RfYnl0ZXNfbG87CisJdTMyIHR4X3VuaWNhc3RfYnl0ZXNfaGk7CisJdTMyIHR4X211bHRpY2FzdF9ieXRlc19sbzsKKwl1MzIgdHhfbXVsdGljYXN0X2J5dGVzX2hpOworCXUzMiB0eF9icm9hZGNhc3RfYnl0ZXNfbG87CisJdTMyIHR4X2Jyb2FkY2FzdF9ieXRlc19oaTsKKwl1MzIgdHhfZGlzY2FyZHNfbG87CisJdTMyIHR4X2Rpc2NhcmRzX2hpOworCXUzMiB0eF9lcnJvcnNfbG87CisJdTMyIHR4X2Vycm9yc19oaTsKKwl1MzIgdHhfcGF1c2VfZnJhbWVzX2xvOworCXUzMiB0eF9wYXVzZV9mcmFtZXNfaGk7CisJdTMyIHR4X3BhdXNlX29uX2ZyYW1lc19sbzsKKwl1MzIgdHhfcGF1c2Vfb25fZnJhbWVzX2hpOworCXUzMiB0eF9wYXVzZV9vZmZfZnJhbWVzX2xvOworCXUzMiB0eF9wYXVzZV9vZmZfZnJhbWVzX2hpOworCXUzMiB0eF9pbnRlcm5hbF9tYWNfZXJyb3JzX2xvOworCXUzMiB0eF9pbnRlcm5hbF9tYWNfZXJyb3JzX2hpOworCXUzMiB0eF9jb250cm9sX2ZyYW1lc19sbzsKKwl1MzIgdHhfY29udHJvbF9mcmFtZXNfaGk7CisJdTMyIHR4X3BhY2tldHNfNjRfYnl0ZXNfbG87CisJdTMyIHR4X3BhY2tldHNfNjRfYnl0ZXNfaGk7CisJdTMyIHR4X3BhY2tldHNfNjVfdG9fMTI3X2J5dGVzX2xvOworCXUzMiB0eF9wYWNrZXRzXzY1X3RvXzEyN19ieXRlc19oaTsKKwl1MzIgdHhfcGFja2V0c18xMjhfdG9fMjU1X2J5dGVzX2xvOworCXUzMiB0eF9wYWNrZXRzXzEyOF90b18yNTVfYnl0ZXNfaGk7CisJdTMyIHR4X3BhY2tldHNfMjU2X3RvXzUxMV9ieXRlc19sbzsKKwl1MzIgdHhfcGFja2V0c18yNTZfdG9fNTExX2J5dGVzX2hpOworCXUzMiB0eF9wYWNrZXRzXzUxMl90b18xMDIzX2J5dGVzX2xvOworCXUzMiB0eF9wYWNrZXRzXzUxMl90b18xMDIzX2J5dGVzX2hpOworCXUzMiB0eF9wYWNrZXRzXzEwMjRfdG9fMTUxOF9ieXRlc19sbzsKKwl1MzIgdHhfcGFja2V0c18xMDI0X3RvXzE1MThfYnl0ZXNfaGk7CisJdTMyIHR4X3BhY2tldHNfMTUxOV90b18yMDQ3X2J5dGVzX2xvOworCXUzMiB0eF9wYWNrZXRzXzE1MTlfdG9fMjA0N19ieXRlc19oaTsKKwl1MzIgdHhfcGFja2V0c18yMDQ4X3RvXzQwOTVfYnl0ZXNfbG87CisJdTMyIHR4X3BhY2tldHNfMjA0OF90b180MDk1X2J5dGVzX2hpOworCXUzMiB0eF9wYWNrZXRzXzQwOTZfdG9fODE5MV9ieXRlc19sbzsKKwl1MzIgdHhfcGFja2V0c180MDk2X3RvXzgxOTFfYnl0ZXNfaGk7CisJdTMyIHR4X3BhY2tldHNfODE5Ml90b185MjE2X2J5dGVzX2xvOworCXUzMiB0eF9wYWNrZXRzXzgxOTJfdG9fOTIxNl9ieXRlc19oaTsKKwl1MzIgdHhfbHNvX3BhY2tldHNfbG87CisJdTMyIHR4X2xzb19wYWNrZXRzX2hpOworCXUzMiByeF9wYWNrZXRzX2xvOworCXUzMiByeF9wYWNrZXRzX2hpOworCXUzMiByeF91bmljYXN0X3BhY2tldHNfbG87CisJdTMyIHJ4X3VuaWNhc3RfcGFja2V0c19oaTsKKwl1MzIgcnhfbXVsdGljYXN0X3BhY2tldHNfbG87CisJdTMyIHJ4X211bHRpY2FzdF9wYWNrZXRzX2hpOworCXUzMiByeF9icm9hZGNhc3RfcGFja2V0c19sbzsKKwl1MzIgcnhfYnJvYWRjYXN0X3BhY2tldHNfaGk7CisJdTMyIHJ4X2J5dGVzX2xvOworCXUzMiByeF9ieXRlc19oaTsKKwl1MzIgcnhfdW5pY2FzdF9ieXRlc19sbzsKKwl1MzIgcnhfdW5pY2FzdF9ieXRlc19oaTsKKwl1MzIgcnhfbXVsdGljYXN0X2J5dGVzX2xvOworCXUzMiByeF9tdWx0aWNhc3RfYnl0ZXNfaGk7CisJdTMyIHJ4X2Jyb2FkY2FzdF9ieXRlc19sbzsKKwl1MzIgcnhfYnJvYWRjYXN0X2J5dGVzX2hpOworCXUzMiByeF91bmtub3duX3Byb3RvczsKKwl1MzIgcnN2ZF82OTsgLyogV29yZCA2OSBpcyByZXNlcnZlZCAqLworCXUzMiByeF9kaXNjYXJkc19sbzsKKwl1MzIgcnhfZGlzY2FyZHNfaGk7CisJdTMyIHJ4X2Vycm9yc19sbzsKKwl1MzIgcnhfZXJyb3JzX2hpOworCXUzMiByeF9jcmNfZXJyb3JzX2xvOworCXUzMiByeF9jcmNfZXJyb3JzX2hpOworCXUzMiByeF9hbGlnbm1lbnRfZXJyb3JzX2xvOworCXUzMiByeF9hbGlnbm1lbnRfZXJyb3JzX2hpOworCXUzMiByeF9zeW1ib2xfZXJyb3JzX2xvOworCXUzMiByeF9zeW1ib2xfZXJyb3JzX2hpOworCXUzMiByeF9wYXVzZV9mcmFtZXNfbG87CisJdTMyIHJ4X3BhdXNlX2ZyYW1lc19oaTsKKwl1MzIgcnhfcGF1c2Vfb25fZnJhbWVzX2xvOworCXUzMiByeF9wYXVzZV9vbl9mcmFtZXNfaGk7CisJdTMyIHJ4X3BhdXNlX29mZl9mcmFtZXNfbG87CisJdTMyIHJ4X3BhdXNlX29mZl9mcmFtZXNfaGk7CisJdTMyIHJ4X2ZyYW1lc190b29fbG9uZ19sbzsKKwl1MzIgcnhfZnJhbWVzX3Rvb19sb25nX2hpOworCXUzMiByeF9pbnRlcm5hbF9tYWNfZXJyb3JzX2xvOworCXUzMiByeF9pbnRlcm5hbF9tYWNfZXJyb3JzX2hpOworCXUzMiByeF91bmRlcnNpemVfcGFja2V0czsKKwl1MzIgcnhfb3ZlcnNpemVfcGFja2V0czsKKwl1MzIgcnhfZnJhZ21lbnRfcGFja2V0czsKKwl1MzIgcnhfamFiYmVyczsKKwl1MzIgcnhfY29udHJvbF9mcmFtZXNfbG87CisJdTMyIHJ4X2NvbnRyb2xfZnJhbWVzX2hpOworCXUzMiByeF9jb250cm9sX2ZyYW1lc191bmtub3duX29wY29kZV9sbzsKKwl1MzIgcnhfY29udHJvbF9mcmFtZXNfdW5rbm93bl9vcGNvZGVfaGk7CisJdTMyIHJ4X2luX3JhbmdlX2Vycm9yczsKKwl1MzIgcnhfb3V0X29mX3JhbmdlX2Vycm9yczsKKwl1MzIgcnhfYWRkcmVzc19tYXRjaF9lcnJvcnM7CisJdTMyIHJ4X3ZsYW5fbWlzbWF0Y2hfZXJyb3JzOworCXUzMiByeF9kcm9wcGVkX3Rvb19zbWFsbDsKKwl1MzIgcnhfZHJvcHBlZF90b29fc2hvcnQ7CisJdTMyIHJ4X2Ryb3BwZWRfaGVhZGVyX3Rvb19zbWFsbDsKKwl1MzIgcnhfZHJvcHBlZF9pbnZhbGlkX3RjcF9sZW5ndGg7CisJdTMyIHJ4X2Ryb3BwZWRfcnVudDsKKwl1MzIgcnhfaXBfY2hlY2tzdW1fZXJyb3JzOworCXUzMiByeF90Y3BfY2hlY2tzdW1fZXJyb3JzOworCXUzMiByeF91ZHBfY2hlY2tzdW1fZXJyb3JzOworCXUzMiByeF9ub25fcnNzX3BhY2tldHM7CisJdTMyIHJzdmRfMTExOworCXUzMiByeF9pcHY0X3BhY2tldHNfbG87CisJdTMyIHJ4X2lwdjRfcGFja2V0c19oaTsKKwl1MzIgcnhfaXB2Nl9wYWNrZXRzX2xvOworCXUzMiByeF9pcHY2X3BhY2tldHNfaGk7CisJdTMyIHJ4X2lwdjRfYnl0ZXNfbG87CisJdTMyIHJ4X2lwdjRfYnl0ZXNfaGk7CisJdTMyIHJ4X2lwdjZfYnl0ZXNfbG87CisJdTMyIHJ4X2lwdjZfYnl0ZXNfaGk7CisJdTMyIHJ4X25pY19wYWNrZXRzX2xvOworCXUzMiByeF9uaWNfcGFja2V0c19oaTsKKwl1MzIgcnhfdGNwX3BhY2tldHNfbG87CisJdTMyIHJ4X3RjcF9wYWNrZXRzX2hpOworCXUzMiByeF9pc2NzaV9wYWNrZXRzX2xvOworCXUzMiByeF9pc2NzaV9wYWNrZXRzX2hpOworCXUzMiByeF9tYW5hZ2VtZW50X3BhY2tldHNfbG87CisJdTMyIHJ4X21hbmFnZW1lbnRfcGFja2V0c19oaTsKKwl1MzIgcnhfc3dpdGNoZWRfdW5pY2FzdF9wYWNrZXRzX2xvOworCXUzMiByeF9zd2l0Y2hlZF91bmljYXN0X3BhY2tldHNfaGk7CisJdTMyIHJ4X3N3aXRjaGVkX211bHRpY2FzdF9wYWNrZXRzX2xvOworCXUzMiByeF9zd2l0Y2hlZF9tdWx0aWNhc3RfcGFja2V0c19oaTsKKwl1MzIgcnhfc3dpdGNoZWRfYnJvYWRjYXN0X3BhY2tldHNfbG87CisJdTMyIHJ4X3N3aXRjaGVkX2Jyb2FkY2FzdF9wYWNrZXRzX2hpOworCXUzMiBudW1fZm9yd2FyZHNfbG87CisJdTMyIG51bV9mb3J3YXJkc19oaTsKKwl1MzIgcnhfZmlmb19vdmVyZmxvdzsKKwl1MzIgcnhfaW5wdXRfZmlmb19vdmVyZmxvdzsKKwl1MzIgcnhfZHJvcHNfdG9vX21hbnlfZnJhZ3NfbG87CisJdTMyIHJ4X2Ryb3BzX3Rvb19tYW55X2ZyYWdzX2hpOworCXUzMiByeF9kcm9wc19pbnZhbGlkX3F1ZXVlOworCXUzMiByc3ZkXzE0MTsKKwl1MzIgcnhfZHJvcHNfbXR1X2xvOworCXUzMiByeF9kcm9wc19tdHVfaGk7CisJdTMyIHJ4X3BhY2tldHNfNjRfYnl0ZXNfbG87CisJdTMyIHJ4X3BhY2tldHNfNjRfYnl0ZXNfaGk7CisJdTMyIHJ4X3BhY2tldHNfNjVfdG9fMTI3X2J5dGVzX2xvOworCXUzMiByeF9wYWNrZXRzXzY1X3RvXzEyN19ieXRlc19oaTsKKwl1MzIgcnhfcGFja2V0c18xMjhfdG9fMjU1X2J5dGVzX2xvOworCXUzMiByeF9wYWNrZXRzXzEyOF90b18yNTVfYnl0ZXNfaGk7CisJdTMyIHJ4X3BhY2tldHNfMjU2X3RvXzUxMV9ieXRlc19sbzsKKwl1MzIgcnhfcGFja2V0c18yNTZfdG9fNTExX2J5dGVzX2hpOworCXUzMiByeF9wYWNrZXRzXzUxMl90b18xMDIzX2J5dGVzX2xvOworCXUzMiByeF9wYWNrZXRzXzUxMl90b18xMDIzX2J5dGVzX2hpOworCXUzMiByeF9wYWNrZXRzXzEwMjRfdG9fMTUxOF9ieXRlc19sbzsKKwl1MzIgcnhfcGFja2V0c18xMDI0X3RvXzE1MThfYnl0ZXNfaGk7CisJdTMyIHJ4X3BhY2tldHNfMTUxOV90b18yMDQ3X2J5dGVzX2xvOworCXUzMiByeF9wYWNrZXRzXzE1MTlfdG9fMjA0N19ieXRlc19oaTsKKwl1MzIgcnhfcGFja2V0c18yMDQ4X3RvXzQwOTVfYnl0ZXNfbG87CisJdTMyIHJ4X3BhY2tldHNfMjA0OF90b180MDk1X2J5dGVzX2hpOworCXUzMiByeF9wYWNrZXRzXzQwOTZfdG9fODE5MV9ieXRlc19sbzsKKwl1MzIgcnhfcGFja2V0c180MDk2X3RvXzgxOTFfYnl0ZXNfaGk7CisJdTMyIHJ4X3BhY2tldHNfODE5Ml90b185MjE2X2J5dGVzX2xvOworCXUzMiByeF9wYWNrZXRzXzgxOTJfdG9fOTIxNl9ieXRlc19oaTsKK307CisKK3N0cnVjdCBwcG9ydF9zdGF0c19wYXJhbXMgeworCXUxNiBwcG9ydF9udW07CisJdTggcnN2ZDsKKwl1OCByZXNldF9zdGF0czsKK307CisKK3N0cnVjdCBsYW5jZXJfY21kX3JlcV9wcG9ydF9zdGF0cyB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1bmlvbiB7CisJCXN0cnVjdCBwcG9ydF9zdGF0c19wYXJhbXMgcGFyYW1zOworCQl1OCByc3ZkW3NpemVvZihzdHJ1Y3QgbGFuY2VyX2NtZF9wcG9ydF9zdGF0cyldOworCX0gY21kX3BhcmFtczsKK307CisKK3N0cnVjdCBsYW5jZXJfY21kX3Jlc3BfcHBvcnRfc3RhdHMgeworCXN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgaGRyOworCXN0cnVjdCBsYW5jZXJfY21kX3Bwb3J0X3N0YXRzIHBwb3J0X3N0YXRzOworfTsKKworc3RhdGljIGlubGluZSAgc3RydWN0IGxhbmNlcl9jbWRfcHBvcnRfc3RhdHMqCisJcHBvcnRfc3RhdHNfZnJvbV9jbWQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGxhbmNlcl9jbWRfcmVzcF9wcG9ydF9zdGF0cyAqY21kID0gYWRhcHRlci0+c3RhdHNfY21kLnZhOworCXJldHVybiAmY21kLT5wcG9ydF9zdGF0czsKK30KKwogc3RydWN0IGJlX2NtZF9yZXFfZ2V0X2NudGxfYWRkbmxfYXR0cmlicyB7CiAJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKIAl1OCByc3ZkWzhdOwpAQCAtNjk1LDEzICs5MDcsNiBAQAogCXUxNiBub3JtYWxfdmxhbls2NF07CiB9IF9fcGFja2VkOwogCi1zdHJ1Y3QgYmVfY21kX3JlcV9wcm9taXNjdW91c19jb25maWcgewotCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7Ci0JdTggcG9ydDBfcHJvbWlzY3VvdXM7Ci0JdTggcG9ydDFfcHJvbWlzY3VvdXM7Ci0JdTE2IHJzdmQwOwotfSBfX3BhY2tlZDsKLQogLyoqKioqKioqKioqKioqKioqKioqIE11bHRpY2FzdCBNQUMgQ29uZmlnICoqKioqKioqKioqKioqKioqKiovCiAjZGVmaW5lIEJFX01BWF9NQwkJNjQgLyogc2V0IG1jYXN0IHByb21pc2MgaWYgPiA2NCAqLwogc3RydWN0IG1hY2FkZHIgewpAQCAtNzE2LDExICs5MjEsMTggQEAKIAlzdHJ1Y3QgbWFjYWRkciBtYWNbQkVfTUFYX01DXTsKIH0gX19wYWNrZWQ7CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGJlX2h3X3N0YXRzICoKLWh3X3N0YXRzX2Zyb21fY21kKHN0cnVjdCBiZV9jbWRfcmVzcF9nZXRfc3RhdHMgKmNtZCkKLXsKLQlyZXR1cm4gJmNtZC0+aHdfc3RhdHM7Ci19CisvKioqKioqKioqKioqKioqKioqKiBSWCBGSUxURVIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGJlX2NtZF9yZXFfcnhfZmlsdGVyIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUzMiBnbG9iYWxfZmxhZ3NfbWFzazsKKwl1MzIgZ2xvYmFsX2ZsYWdzOworCXUzMiBpZl9mbGFnc19tYXNrOworCXUzMiBpZl9mbGFnczsKKwl1MzIgaWZfaWQ7CisJdTMyIG11bHRpY2FzdF9udW07CisJc3RydWN0IG1hY2FkZHIgbWFjW0JFX01BWF9NQ107Cit9OworCiAKIC8qKioqKioqKioqKioqKioqKioqKiBMaW5rIFN0YXR1cyBRdWVyeSAqKioqKioqKioqKioqKioqKioqLwogc3RydWN0IGJlX2NtZF9yZXFfbGlua19zdGF0dXMgewpAQCAtOTIwLDYgKzExMzIsMzYgQEAKIAlzdHJ1Y3QgZmxhc2hyb21fcGFyYW1zIHBhcmFtczsKIH07CiAKKy8qKioqKioqKioqKioqKioqIExhbmNlciBGaXJtd2FyZSBGbGFzaCAqKioqKioqKioqKiovCitzdHJ1Y3QgYW1hcF9sYW5jZXJfd3JpdGVfb2JqX2NvbnRleHQgeworCXU4IHdyaXRlX2xlbmd0aFsyNF07CisJdTggcmVzZXJ2ZWQxWzddOworCXU4IGVvZjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBsYW5jZXJfY21kX3JlcV93cml0ZV9vYmplY3QgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTggY29udGV4dFtzaXplb2Yoc3RydWN0IGFtYXBfbGFuY2VyX3dyaXRlX29ial9jb250ZXh0KSAvIDhdOworCXUzMiB3cml0ZV9vZmZzZXQ7CisJdTggb2JqZWN0X25hbWVbMTA0XTsKKwl1MzIgZGVzY3JpcHRvcl9jb3VudDsKKwl1MzIgYnVmX2xlbjsKKwl1MzIgYWRkcl9sb3c7CisJdTMyIGFkZHJfaGlnaDsKK307CisKK3N0cnVjdCBsYW5jZXJfY21kX3Jlc3Bfd3JpdGVfb2JqZWN0IHsKKwl1OCBvcGNvZGU7CisJdTggc3Vic3lzdGVtOworCXU4IHJzdmQxWzJdOworCXU4IHN0YXR1czsKKwl1OCBhZGRpdGlvbmFsX3N0YXR1czsKKwl1OCByc3ZkMlsyXTsKKwl1MzIgcmVzcF9sZW47CisJdTMyIGFjdHVhbF9yZXNwX2xlbjsKKwl1MzIgYWN0dWFsX3dyaXRlX2xlbjsKK307CisKIC8qKioqKioqKioqKioqKioqKioqKioqKiogV09MICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdHJ1Y3QgYmVfY21kX3JlcV9hY3BpX3dvbF9tYWdpY19jb25maWd7CiAJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKQEAgLTEwNjEsNiArMTMwMywxNTEgQEAKIAl1OCByc3ZkWzIxMl07CiB9OwogCisvKioqKioqKioqKioqKioqIEhXIFN0YXRzIEdldCB2MSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBCRV9UWFBfU1dfU1oJCQk0OAorc3RydWN0IGJlX3BvcnRfcnhmX3N0YXRzX3YxIHsKKwl1MzIgcnN2ZDBbMTJdOworCXUzMiByeF9jcmNfZXJyb3JzOworCXUzMiByeF9hbGlnbm1lbnRfc3ltYm9sX2Vycm9yczsKKwl1MzIgcnhfcGF1c2VfZnJhbWVzOworCXUzMiByeF9wcmlvcml0eV9wYXVzZV9mcmFtZXM7CisJdTMyIHJ4X2NvbnRyb2xfZnJhbWVzOworCXUzMiByeF9pbl9yYW5nZV9lcnJvcnM7CisJdTMyIHJ4X291dF9yYW5nZV9lcnJvcnM7CisJdTMyIHJ4X2ZyYW1lX3Rvb19sb25nOworCXUzMiByeF9hZGRyZXNzX21hdGNoX2Vycm9yczsKKwl1MzIgcnhfZHJvcHBlZF90b29fc21hbGw7CisJdTMyIHJ4X2Ryb3BwZWRfdG9vX3Nob3J0OworCXUzMiByeF9kcm9wcGVkX2hlYWRlcl90b29fc21hbGw7CisJdTMyIHJ4X2Ryb3BwZWRfdGNwX2xlbmd0aDsKKwl1MzIgcnhfZHJvcHBlZF9ydW50OworCXUzMiByc3ZkMVsxMF07CisJdTMyIHJ4X2lwX2NoZWNrc3VtX2VycnM7CisJdTMyIHJ4X3RjcF9jaGVja3N1bV9lcnJzOworCXUzMiByeF91ZHBfY2hlY2tzdW1fZXJyczsKKwl1MzIgcnN2ZDJbN107CisJdTMyIHJ4X3N3aXRjaGVkX3VuaWNhc3RfcGFja2V0czsKKwl1MzIgcnhfc3dpdGNoZWRfbXVsdGljYXN0X3BhY2tldHM7CisJdTMyIHJ4X3N3aXRjaGVkX2Jyb2FkY2FzdF9wYWNrZXRzOworCXUzMiByc3ZkM1szXTsKKwl1MzIgdHhfcGF1c2VmcmFtZXM7CisJdTMyIHR4X3ByaW9yaXR5X3BhdXNlZnJhbWVzOworCXUzMiB0eF9jb250cm9sZnJhbWVzOworCXUzMiByc3ZkNFsxMF07CisJdTMyIHJ4cHBfZmlmb19vdmVyZmxvd19kcm9wOworCXUzMiByeF9pbnB1dF9maWZvX292ZXJmbG93X2Ryb3A7CisJdTMyIHBtZW1fZmlmb19vdmVyZmxvd19kcm9wOworCXUzMiBqYWJiZXJfZXZlbnRzOworCXUzMiByc3ZkNVszXTsKK307CisKKworc3RydWN0IGJlX3J4Zl9zdGF0c192MSB7CisJc3RydWN0IGJlX3BvcnRfcnhmX3N0YXRzX3YxIHBvcnRbNF07CisJdTMyIHJzdmQwWzJdOworCXUzMiByeF9kcm9wc19ub19wYnVmOworCXUzMiByeF9kcm9wc19ub190eHBiOworCXUzMiByeF9kcm9wc19ub19lcnhfZGVzY3I7CisJdTMyIHJ4X2Ryb3BzX25vX3RwcmVfZGVzY3I7CisJdTMyIHJzdmQxWzZdOworCXUzMiByeF9kcm9wc190b29fbWFueV9mcmFnczsKKwl1MzIgcnhfZHJvcHNfaW52YWxpZF9yaW5nOworCXUzMiBmb3J3YXJkZWRfcGFja2V0czsKKwl1MzIgcnhfZHJvcHNfbXR1OworCXUzMiByc3ZkMlsxNF07Cit9OworCitzdHJ1Y3QgYmVfZXJ4X3N0YXRzX3YxIHsKKwl1MzIgcnhfZHJvcHNfbm9fZnJhZ21lbnRzWzY4XTsgICAgIC8qIGR3b3JkUyAwIHRvIDY3Ki8KKwl1MzIgcnN2ZFs0XTsKK307CisKK3N0cnVjdCBiZV9od19zdGF0c192MSB7CisJc3RydWN0IGJlX3J4Zl9zdGF0c192MSByeGY7CisJdTMyIHJzdmQwW0JFX1RYUF9TV19TWl07CisJc3RydWN0IGJlX2VyeF9zdGF0c192MSBlcng7CisJc3RydWN0IGJlX3BtZW1fc3RhdHMgcG1lbTsKKwl1MzIgcnN2ZDFbM107Cit9OworCitzdHJ1Y3QgYmVfY21kX3JlcV9nZXRfc3RhdHNfdjEgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTggcnN2ZFtzaXplb2Yoc3RydWN0IGJlX2h3X3N0YXRzX3YxKV07Cit9OworCitzdHJ1Y3QgYmVfY21kX3Jlc3BfZ2V0X3N0YXRzX3YxIHsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIGhkcjsKKwlzdHJ1Y3QgYmVfaHdfc3RhdHNfdjEgaHdfc3RhdHM7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgKgoraHdfc3RhdHNfZnJvbV9jbWQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKGFkYXB0ZXItPmdlbmVyYXRpb24gPT0gQkVfR0VOMykgeworCQlzdHJ1Y3QgYmVfY21kX3Jlc3BfZ2V0X3N0YXRzX3YxICpjbWQgPSBhZGFwdGVyLT5zdGF0c19jbWQudmE7CisKKwkJcmV0dXJuICZjbWQtPmh3X3N0YXRzOworCX0gZWxzZSB7CisJCXN0cnVjdCBiZV9jbWRfcmVzcF9nZXRfc3RhdHNfdjAgKmNtZCA9IGFkYXB0ZXItPnN0YXRzX2NtZC52YTsKKworCQlyZXR1cm4gJmNtZC0+aHdfc3RhdHM7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmJlX3BvcnRfcnhmX3N0YXRzX2Zyb21fY21kKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT5nZW5lcmF0aW9uID09IEJFX0dFTjMpIHsKKwkJc3RydWN0IGJlX2h3X3N0YXRzX3YxICpod19zdGF0cyA9IGh3X3N0YXRzX2Zyb21fY21kKGFkYXB0ZXIpOworCQlzdHJ1Y3QgYmVfcnhmX3N0YXRzX3YxICpyeGZfc3RhdHMgPSAmaHdfc3RhdHMtPnJ4ZjsKKworCQlyZXR1cm4gJnJ4Zl9zdGF0cy0+cG9ydFthZGFwdGVyLT5wb3J0X251bV07CisJfSBlbHNlIHsKKwkJc3RydWN0IGJlX2h3X3N0YXRzX3YwICpod19zdGF0cyA9IGh3X3N0YXRzX2Zyb21fY21kKGFkYXB0ZXIpOworCQlzdHJ1Y3QgYmVfcnhmX3N0YXRzX3YwICpyeGZfc3RhdHMgPSAmaHdfc3RhdHMtPnJ4ZjsKKworCQlyZXR1cm4gJnJ4Zl9zdGF0cy0+cG9ydFthZGFwdGVyLT5wb3J0X251bV07CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmJlX3J4Zl9zdGF0c19mcm9tX2NtZChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoYWRhcHRlci0+Z2VuZXJhdGlvbiA9PSBCRV9HRU4zKSB7CisJCXN0cnVjdCBiZV9od19zdGF0c192MSAqaHdfc3RhdHMgPSBod19zdGF0c19mcm9tX2NtZChhZGFwdGVyKTsKKworCQlyZXR1cm4gJmh3X3N0YXRzLT5yeGY7CisJfSBlbHNlIHsKKwkJc3RydWN0IGJlX2h3X3N0YXRzX3YwICpod19zdGF0cyA9IGh3X3N0YXRzX2Zyb21fY21kKGFkYXB0ZXIpOworCisJCXJldHVybiAmaHdfc3RhdHMtPnJ4ZjsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqYmVfZXJ4X3N0YXRzX2Zyb21fY21kKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT5nZW5lcmF0aW9uID09IEJFX0dFTjMpIHsKKwkJc3RydWN0IGJlX2h3X3N0YXRzX3YxICpod19zdGF0cyA9IGh3X3N0YXRzX2Zyb21fY21kKGFkYXB0ZXIpOworCisJCXJldHVybiAmaHdfc3RhdHMtPmVyeDsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgYmVfaHdfc3RhdHNfdjAgKmh3X3N0YXRzID0gaHdfc3RhdHNfZnJvbV9jbWQoYWRhcHRlcik7CisKKwkJcmV0dXJuICZod19zdGF0cy0+ZXJ4OworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkICpiZV9wbWVtX3N0YXRzX2Zyb21fY21kKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT5nZW5lcmF0aW9uID09IEJFX0dFTjMpIHsKKwkJc3RydWN0IGJlX2h3X3N0YXRzX3YxICpod19zdGF0cyA9IGh3X3N0YXRzX2Zyb21fY21kKGFkYXB0ZXIpOworCisJCXJldHVybiAmaHdfc3RhdHMtPnBtZW07CisJfSBlbHNlIHsKKwkJc3RydWN0IGJlX2h3X3N0YXRzX3YwICpod19zdGF0cyA9IGh3X3N0YXRzX2Zyb21fY21kKGFkYXB0ZXIpOworCisJCXJldHVybiAmaHdfc3RhdHMtPnBtZW07CisJfQorfQorCiBleHRlcm4gaW50IGJlX3BjaV9mbnVtX2dldChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gaW50IGJlX2NtZF9QT1NUKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiBpbnQgYmVfY21kX21hY19hZGRyX3F1ZXJ5KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCAqbWFjX2FkZHIsCkBAIC0xMDkzLDE4ICsxNDgwLDE5IEBACiBleHRlcm4gaW50IGJlX2NtZF9xX2Rlc3Ryb3koc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpxLAogCQkJaW50IHR5cGUpOwogZXh0ZXJuIGludCBiZV9jbWRfbGlua19zdGF0dXNfcXVlcnkoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQlib29sICpsaW5rX3VwLCB1OCAqbWFjX3NwZWVkLCB1MTYgKmxpbmtfc3BlZWQpOworCQkJYm9vbCAqbGlua191cCwgdTggKm1hY19zcGVlZCwgdTE2ICpsaW5rX3NwZWVkLCB1MzIgZG9tKTsKIGV4dGVybiBpbnQgYmVfY21kX3Jlc2V0KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiBpbnQgYmVfY21kX2dldF9zdGF0cyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKIAkJCXN0cnVjdCBiZV9kbWFfbWVtICpub25lbWJfY21kKTsKK2V4dGVybiBpbnQgbGFuY2VyX2NtZF9nZXRfcHBvcnRfc3RhdHMoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQlzdHJ1Y3QgYmVfZG1hX21lbSAqbm9uZW1iX2NtZCk7CiBleHRlcm4gaW50IGJlX2NtZF9nZXRfZndfdmVyKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCBjaGFyICpmd192ZXIpOwogCiBleHRlcm4gaW50IGJlX2NtZF9tb2RpZnlfZXFkKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgZXFfaWQsIHUzMiBlcWQpOwogZXh0ZXJuIGludCBiZV9jbWRfdmxhbl9jb25maWcoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBpZl9pZCwKIAkJCXUxNiAqdnRhZ19hcnJheSwgdTMyIG51bSwgYm9vbCB1bnRhZ2dlZCwKIAkJCWJvb2wgcHJvbWlzY3VvdXMpOwotZXh0ZXJuIGludCBiZV9jbWRfcHJvbWlzY3VvdXNfY29uZmlnKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAotCQkJdTggcG9ydF9udW0sIGJvb2wgZW4pOworZXh0ZXJuIGludCBiZV9jbWRfcHJvbWlzY3VvdXNfY29uZmlnKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCBib29sIGVuKTsKIGV4dGVybiBpbnQgYmVfY21kX211bHRpY2FzdF9zZXQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBpZl9pZCwKIAkJCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBiZV9kbWFfbWVtICptZW0pOwogZXh0ZXJuIGludCBiZV9jbWRfc2V0X2Zsb3dfY29udHJvbChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKQEAgLTExMjQsNiArMTUxMiwxMSBAQAogZXh0ZXJuIGludCBiZV9jbWRfd3JpdGVfZmxhc2hyb20oc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQlzdHJ1Y3QgYmVfZG1hX21lbSAqY21kLCB1MzIgZmxhc2hfb3BlciwKIAkJCXUzMiBmbGFzaF9vcGNvZGUsIHUzMiBidWZfc2l6ZSk7CitleHRlcm4gaW50IGxhbmNlcl9jbWRfd3JpdGVfb2JqZWN0KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAorCQkJCXN0cnVjdCBiZV9kbWFfbWVtICpjbWQsCisJCQkJdTMyIGRhdGFfc2l6ZSwgdTMyIGRhdGFfb2Zmc2V0LAorCQkJCWNvbnN0IGNoYXIgKm9ial9uYW1lLAorCQkJCXUzMiAqZGF0YV93cml0dGVuLCB1OCAqYWRkbl9zdGF0dXMpOwogaW50IGJlX2NtZF9nZXRfZmxhc2hfY3JjKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCAqZmxhc2hlZF9jcmMsCiAJCQkJaW50IG9mZnNldCk7CiBleHRlcm4gaW50IGJlX2NtZF9lbmFibGVfbWFnaWNfd29sKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCAqbWFjLApAQCAtMTE0OCw0ICsxNTQxLDYgQEAKIGV4dGVybiBpbnQgYmVfY21kX2dldF9kaWVfdGVtcGVyYXR1cmUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIGludCBiZV9jbWRfZ2V0X2NudGxfYXR0cmlidXRlcyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gaW50IGJlX2NtZF9jaGVja19uYXRpdmVfbW9kZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gaW50IGJlX2NtZF9nZXRfcmVnX2xlbihzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyICpsb2dfc2l6ZSk7CitleHRlcm4gdm9pZCBiZV9jbWRfZ2V0X3JlZ3Moc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBidWZfbGVuLCB2b2lkICpidWYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9ldGh0b29sLmMKaW5kZXggYWFjMjQ4Zi4uZmFjZmUzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2V0aHRvb2wuYwpAQCAtMjYsOCArMjYsOCBAQAogCWludCBvZmZzZXQ7CiB9OwogCi1lbnVtIHtORVRTVEFULCBQT1JUU1RBVCwgTUlTQ1NUQVQsIERSVlNUQVRfVFgsIERSVlNUQVRfUlgsIEVSWFNUQVQsCi0JCQlQTUVNU1RBVCwgRFJWU1RBVH07CitlbnVtIHtORVRTVEFULCBEUlZTVEFUX1RYLCBEUlZTVEFUX1JYLCBFUlhTVEFULAorCQkJRFJWU1RBVH07CiAjZGVmaW5lIEZJRUxESU5GTyhfc3RydWN0LCBmaWVsZCkgRklFTERfU0laRU9GKF9zdHJ1Y3QsIGZpZWxkKSwgXAogCQkJCQlvZmZzZXRvZihfc3RydWN0LCBmaWVsZCkKICNkZWZpbmUgTkVUU1RBVF9JTkZPKGZpZWxkKSAJI2ZpZWxkLCBORVRTVEFULFwKQEAgLTM3LDE1ICszNyw4IEBACiAJCQkJCUZJRUxESU5GTyhzdHJ1Y3QgYmVfdHhfc3RhdHMsIGZpZWxkKQogI2RlZmluZSBEUlZTVEFUX1JYX0lORk8oZmllbGQpCSNmaWVsZCwgRFJWU1RBVF9SWCxcCiAJCQkJCUZJRUxESU5GTyhzdHJ1Y3QgYmVfcnhfc3RhdHMsIGZpZWxkKQotI2RlZmluZSBNSVNDU1RBVF9JTkZPKGZpZWxkKSAJI2ZpZWxkLCBNSVNDU1RBVCxcCi0JCQkJCUZJRUxESU5GTyhzdHJ1Y3QgYmVfcnhmX3N0YXRzLCBmaWVsZCkKLSNkZWZpbmUgUE9SVFNUQVRfSU5GTyhmaWVsZCkgCSNmaWVsZCwgUE9SVFNUQVQsXAotCQkJCQlGSUVMRElORk8oc3RydWN0IGJlX3BvcnRfcnhmX3N0YXRzLCBcCi0JCQkJCQlmaWVsZCkKLSNkZWZpbmUgRVJYU1RBVF9JTkZPKGZpZWxkKSAJI2ZpZWxkLCBFUlhTVEFULFwKLQkJCQkJRklFTERJTkZPKHN0cnVjdCBiZV9lcnhfc3RhdHMsIGZpZWxkKQotI2RlZmluZSBQTUVNU1RBVF9JTkZPKGZpZWxkKSAJI2ZpZWxkLCBQTUVNU1RBVCxcCi0JCQkJCUZJRUxESU5GTyhzdHJ1Y3QgYmVfcG1lbV9zdGF0cywgZmllbGQpCisjZGVmaW5lIEVSWFNUQVRfSU5GTyhmaWVsZCkJI2ZpZWxkLCBFUlhTVEFULFwKKwkJCQkJRklFTERJTkZPKHN0cnVjdCBiZV9lcnhfc3RhdHNfdjEsIGZpZWxkKQogI2RlZmluZQlEUlZTVEFUX0lORk8oZmllbGQpCSNmaWVsZCwgRFJWU1RBVCxcCiAJCQkJCUZJRUxESU5GTyhzdHJ1Y3QgYmVfZHJ2X3N0YXRzLCBcCiAJCQkJCQlmaWVsZCkKQEAgLTY1LDUwICs1OCw0MSBAQAogCXtEUlZTVEFUX1RYX0lORk8oYmVfdHhfc3RvcHMpfSwKIAl7RFJWU1RBVF9UWF9JTkZPKGJlX3R4X2V2ZW50cyl9LAogCXtEUlZTVEFUX1RYX0lORk8oYmVfdHhfY29tcGwpfSwKLQl7UE9SVFNUQVRfSU5GTyhyeF91bmljYXN0X2ZyYW1lcyl9LAotCXtQT1JUU1RBVF9JTkZPKHJ4X211bHRpY2FzdF9mcmFtZXMpfSwKLQl7UE9SVFNUQVRfSU5GTyhyeF9icm9hZGNhc3RfZnJhbWVzKX0sCi0Je1BPUlRTVEFUX0lORk8ocnhfY3JjX2Vycm9ycyl9LAotCXtQT1JUU1RBVF9JTkZPKHJ4X2FsaWdubWVudF9zeW1ib2xfZXJyb3JzKX0sCi0Je1BPUlRTVEFUX0lORk8ocnhfcGF1c2VfZnJhbWVzKX0sCi0Je1BPUlRTVEFUX0lORk8ocnhfY29udHJvbF9mcmFtZXMpfSwKLQl7UE9SVFNUQVRfSU5GTyhyeF9pbl9yYW5nZV9lcnJvcnMpfSwKLQl7UE9SVFNUQVRfSU5GTyhyeF9vdXRfcmFuZ2VfZXJyb3JzKX0sCi0Je1BPUlRTVEFUX0lORk8ocnhfZnJhbWVfdG9vX2xvbmcpfSwKLQl7UE9SVFNUQVRfSU5GTyhyeF9hZGRyZXNzX21hdGNoX2Vycm9ycyl9LAotCXtQT1JUU1RBVF9JTkZPKHJ4X3ZsYW5fbWlzbWF0Y2gpfSwKLQl7UE9SVFNUQVRfSU5GTyhyeF9kcm9wcGVkX3Rvb19zbWFsbCl9LAotCXtQT1JUU1RBVF9JTkZPKHJ4X2Ryb3BwZWRfdG9vX3Nob3J0KX0sCi0Je1BPUlRTVEFUX0lORk8ocnhfZHJvcHBlZF9oZWFkZXJfdG9vX3NtYWxsKX0sCi0Je1BPUlRTVEFUX0lORk8ocnhfZHJvcHBlZF90Y3BfbGVuZ3RoKX0sCi0Je1BPUlRTVEFUX0lORk8ocnhfZHJvcHBlZF9ydW50KX0sCi0Je1BPUlRTVEFUX0lORk8ocnhfZmlmb19vdmVyZmxvdyl9LAotCXtQT1JUU1RBVF9JTkZPKHJ4X2lucHV0X2ZpZm9fb3ZlcmZsb3cpfSwKLQl7UE9SVFNUQVRfSU5GTyhyeF9pcF9jaGVja3N1bV9lcnJzKX0sCi0Je1BPUlRTVEFUX0lORk8ocnhfdGNwX2NoZWNrc3VtX2VycnMpfSwKLQl7UE9SVFNUQVRfSU5GTyhyeF91ZHBfY2hlY2tzdW1fZXJycyl9LAotCXtQT1JUU1RBVF9JTkZPKHJ4X25vbl9yc3NfcGFja2V0cyl9LAotCXtQT1JUU1RBVF9JTkZPKHJ4X2lwdjRfcGFja2V0cyl9LAotCXtQT1JUU1RBVF9JTkZPKHJ4X2lwdjZfcGFja2V0cyl9LAotCXtQT1JUU1RBVF9JTkZPKHJ4X3N3aXRjaGVkX3VuaWNhc3RfcGFja2V0cyl9LAotCXtQT1JUU1RBVF9JTkZPKHJ4X3N3aXRjaGVkX211bHRpY2FzdF9wYWNrZXRzKX0sCi0Je1BPUlRTVEFUX0lORk8ocnhfc3dpdGNoZWRfYnJvYWRjYXN0X3BhY2tldHMpfSwKLQl7UE9SVFNUQVRfSU5GTyh0eF91bmljYXN0ZnJhbWVzKX0sCi0Je1BPUlRTVEFUX0lORk8odHhfbXVsdGljYXN0ZnJhbWVzKX0sCi0Je1BPUlRTVEFUX0lORk8odHhfYnJvYWRjYXN0ZnJhbWVzKX0sCi0Je1BPUlRTVEFUX0lORk8odHhfcGF1c2VmcmFtZXMpfSwKLQl7UE9SVFNUQVRfSU5GTyh0eF9jb250cm9sZnJhbWVzKX0sCi0Je01JU0NTVEFUX0lORk8ocnhfZHJvcHNfbm9fcGJ1Zil9LAotCXtNSVNDU1RBVF9JTkZPKHJ4X2Ryb3BzX25vX3R4cGIpfSwKLQl7TUlTQ1NUQVRfSU5GTyhyeF9kcm9wc19ub19lcnhfZGVzY3IpfSwKLQl7TUlTQ1NUQVRfSU5GTyhyeF9kcm9wc19ub190cHJlX2Rlc2NyKX0sCi0Je01JU0NTVEFUX0lORk8ocnhfZHJvcHNfdG9vX21hbnlfZnJhZ3MpfSwKLQl7TUlTQ1NUQVRfSU5GTyhyeF9kcm9wc19pbnZhbGlkX3JpbmcpfSwKLQl7TUlTQ1NUQVRfSU5GTyhmb3J3YXJkZWRfcGFja2V0cyl9LAotCXtNSVNDU1RBVF9JTkZPKHJ4X2Ryb3BzX210dSl9LAotCXtNSVNDU1RBVF9JTkZPKHBvcnQwX2phYmJlcl9ldmVudHMpfSwKLQl7TUlTQ1NUQVRfSU5GTyhwb3J0MV9qYWJiZXJfZXZlbnRzKX0sCi0Je1BNRU1TVEFUX0lORk8oZXRoX3JlZF9kcm9wcyl9LAorCXtEUlZTVEFUX0lORk8ocnhfY3JjX2Vycm9ycyl9LAorCXtEUlZTVEFUX0lORk8ocnhfYWxpZ25tZW50X3N5bWJvbF9lcnJvcnMpfSwKKwl7RFJWU1RBVF9JTkZPKHJ4X3BhdXNlX2ZyYW1lcyl9LAorCXtEUlZTVEFUX0lORk8ocnhfY29udHJvbF9mcmFtZXMpfSwKKwl7RFJWU1RBVF9JTkZPKHJ4X2luX3JhbmdlX2Vycm9ycyl9LAorCXtEUlZTVEFUX0lORk8ocnhfb3V0X3JhbmdlX2Vycm9ycyl9LAorCXtEUlZTVEFUX0lORk8ocnhfZnJhbWVfdG9vX2xvbmcpfSwKKwl7RFJWU1RBVF9JTkZPKHJ4X2FkZHJlc3NfbWF0Y2hfZXJyb3JzKX0sCisJe0RSVlNUQVRfSU5GTyhyeF9kcm9wcGVkX3Rvb19zbWFsbCl9LAorCXtEUlZTVEFUX0lORk8ocnhfZHJvcHBlZF90b29fc2hvcnQpfSwKKwl7RFJWU1RBVF9JTkZPKHJ4X2Ryb3BwZWRfaGVhZGVyX3Rvb19zbWFsbCl9LAorCXtEUlZTVEFUX0lORk8ocnhfZHJvcHBlZF90Y3BfbGVuZ3RoKX0sCisJe0RSVlNUQVRfSU5GTyhyeF9kcm9wcGVkX3J1bnQpfSwKKwl7RFJWU1RBVF9JTkZPKHJ4cHBfZmlmb19vdmVyZmxvd19kcm9wKX0sCisJe0RSVlNUQVRfSU5GTyhyeF9pbnB1dF9maWZvX292ZXJmbG93X2Ryb3ApfSwKKwl7RFJWU1RBVF9JTkZPKHJ4X2lwX2NoZWNrc3VtX2VycnMpfSwKKwl7RFJWU1RBVF9JTkZPKHJ4X3RjcF9jaGVja3N1bV9lcnJzKX0sCisJe0RSVlNUQVRfSU5GTyhyeF91ZHBfY2hlY2tzdW1fZXJycyl9LAorCXtEUlZTVEFUX0lORk8ocnhfc3dpdGNoZWRfdW5pY2FzdF9wYWNrZXRzKX0sCisJe0RSVlNUQVRfSU5GTyhyeF9zd2l0Y2hlZF9tdWx0aWNhc3RfcGFja2V0cyl9LAorCXtEUlZTVEFUX0lORk8ocnhfc3dpdGNoZWRfYnJvYWRjYXN0X3BhY2tldHMpfSwKKwl7RFJWU1RBVF9JTkZPKHR4X3BhdXNlZnJhbWVzKX0sCisJe0RSVlNUQVRfSU5GTyh0eF9jb250cm9sZnJhbWVzKX0sCisJe0RSVlNUQVRfSU5GTyhyeF9wcmlvcml0eV9wYXVzZV9mcmFtZXMpfSwKKwl7RFJWU1RBVF9JTkZPKHBtZW1fZmlmb19vdmVyZmxvd19kcm9wKX0sCisJe0RSVlNUQVRfSU5GTyhqYWJiZXJfZXZlbnRzKX0sCisJe0RSVlNUQVRfSU5GTyhyeF9kcm9wc19ub19wYnVmKX0sCisJe0RSVlNUQVRfSU5GTyhyeF9kcm9wc19ub190eHBiKX0sCisJe0RSVlNUQVRfSU5GTyhyeF9kcm9wc19ub19lcnhfZGVzY3IpfSwKKwl7RFJWU1RBVF9JTkZPKHJ4X2Ryb3BzX25vX3RwcmVfZGVzY3IpfSwKKwl7RFJWU1RBVF9JTkZPKHJ4X2Ryb3BzX3Rvb19tYW55X2ZyYWdzKX0sCisJe0RSVlNUQVRfSU5GTyhyeF9kcm9wc19pbnZhbGlkX3JpbmcpfSwKKwl7RFJWU1RBVF9JTkZPKGZvcndhcmRlZF9wYWNrZXRzKX0sCisJe0RSVlNUQVRfSU5GTyhyeF9kcm9wc19tdHUpfSwKKwl7RFJWU1RBVF9JTkZPKGV0aF9yZWRfZHJvcHMpfSwKIAl7RFJWU1RBVF9JTkZPKGJlX29uX2RpZV90ZW1wZXJhdHVyZSl9CiB9OwogI2RlZmluZSBFVEhUT09MX1NUQVRTX05VTSBBUlJBWV9TSVpFKGV0X3N0YXRzKQpAQCAtMTU2LDYgKzE0MCwyOSBAQAogfQogCiBzdGF0aWMgaW50CitiZV9nZXRfcmVnX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwl1MzIgbG9nX3NpemUgPSAwOworCisJaWYgKGJlX3BoeXNmbihhZGFwdGVyKSkKKwkJYmVfY21kX2dldF9yZWdfbGVuKGFkYXB0ZXIsICZsb2dfc2l6ZSk7CisKKwlyZXR1cm4gbG9nX3NpemU7Cit9CisKK3N0YXRpYyB2b2lkCitiZV9nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLCB2b2lkICpidWYpCit7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKGJlX3BoeXNmbihhZGFwdGVyKSkgeworCQltZW1zZXQoYnVmLCAwLCByZWdzLT5sZW4pOworCQliZV9jbWRfZ2V0X3JlZ3MoYWRhcHRlciwgcmVncy0+bGVuLCBidWYpOworCX0KK30KKworc3RhdGljIGludAogYmVfZ2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICpjb2FsZXNjZSkKIHsKIAlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CkBAIC0xODYsOSArMTkzLDkgQEAKIAlzdHJ1Y3QgYmVfcnhfb2JqICpyeG87CiAJc3RydWN0IGJlX2VxX29iaiAqcnhfZXE7CiAJc3RydWN0IGJlX2VxX29iaiAqdHhfZXEgPSAmYWRhcHRlci0+dHhfZXE7Ci0JdTMyIHR4X21heCwgdHhfbWluLCB0eF9jdXI7CiAJdTMyIHJ4X21heCwgcnhfbWluLCByeF9jdXI7CiAJaW50IHN0YXR1cyA9IDAsIGk7CisJdTMyIHR4X2N1cjsKIAogCWlmIChjb2FsZXNjZS0+dXNlX2FkYXB0aXZlX3R4X2NvYWxlc2NlID09IDEpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjI3LDggKzIzNCw2IEBACiAJCX0KIAl9CiAKLQl0eF9tYXggPSBjb2FsZXNjZS0+dHhfY29hbGVzY2VfdXNlY3NfaGlnaDsKLQl0eF9taW4gPSBjb2FsZXNjZS0+dHhfY29hbGVzY2VfdXNlY3NfbG93OwogCXR4X2N1ciA9IGNvYWxlc2NlLT50eF9jb2FsZXNjZV91c2VjczsKIAogCWlmICh0eF9jdXIgPiBCRV9NQVhfRVFEKQpAQCAtMjQyLDMyICsyNDcsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHUzMiBiZV9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCXJldHVybiBhZGFwdGVyLT5yeF9jc3VtOwotfQotCi1zdGF0aWMgaW50IGJlX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVpbnQzMl90IGRhdGEpCi17Ci0Jc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0JaWYgKGRhdGEpCi0JCWFkYXB0ZXItPnJ4X2NzdW0gPSB0cnVlOwotCWVsc2UKLQkJYWRhcHRlci0+cnhfY3N1bSA9IGZhbHNlOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkCiBiZV9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQlzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHVpbnQ2NF90ICpkYXRhKQogewogCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgYmVfaHdfc3RhdHMgKmh3X3N0YXRzID0gaHdfc3RhdHNfZnJvbV9jbWQoYWRhcHRlci0+c3RhdHNfY21kLnZhKTsKLQlzdHJ1Y3QgYmVfZXJ4X3N0YXRzICplcnhfc3RhdHMgPSAmaHdfc3RhdHMtPmVyeDsKIAlzdHJ1Y3QgYmVfcnhfb2JqICpyeG87CiAJdm9pZCAqcCA9IE5VTEw7CiAJaW50IGksIGo7CkBAIC0yODAsMTUgKzI2NCw2IEBACiAJCWNhc2UgRFJWU1RBVF9UWDoKIAkJCXAgPSAmYWRhcHRlci0+dHhfc3RhdHM7CiAJCQlicmVhazsKLQkJY2FzZSBQT1JUU1RBVDoKLQkJCXAgPSAmaHdfc3RhdHMtPnJ4Zi5wb3J0W2FkYXB0ZXItPnBvcnRfbnVtXTsKLQkJCWJyZWFrOwotCQljYXNlIE1JU0NTVEFUOgotCQkJcCA9ICZod19zdGF0cy0+cnhmOwotCQkJYnJlYWs7Ci0JCWNhc2UgUE1FTVNUQVQ6Ci0JCQlwID0gJmh3X3N0YXRzLT5wbWVtOwotCQkJYnJlYWs7CiAJCWNhc2UgRFJWU1RBVDoKIAkJCXAgPSAmYWRhcHRlci0+ZHJ2X3N0YXRzOwogCQkJYnJlYWs7CkBAIC0zMDYsNyArMjgxLDggQEAKIAkJCQlwID0gKHU4ICopJnJ4by0+c3RhdHMgKyBldF9yeF9zdGF0c1tpXS5vZmZzZXQ7CiAJCQkJYnJlYWs7CiAJCQljYXNlIEVSWFNUQVQ6Ci0JCQkJcCA9ICh1MzIgKillcnhfc3RhdHMgKyByeG8tPnEuaWQ7CisJCQkJcCA9ICh1MzIgKiliZV9lcnhfc3RhdHNfZnJvbV9jbWQoYWRhcHRlcikgKworCQkJCQkJCQlyeG8tPnEuaWQ7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlkYXRhW0VUSFRPT0xfU1RBVFNfTlVNICsgaiAqIEVUSFRPT0xfUlhTVEFUU19OVU0gKyBpXSA9CkBAIC0zNzQsMTkgKzM1MCwyOCBAQAogCiAJaWYgKChhZGFwdGVyLT5saW5rX3NwZWVkIDwgMCkgfHwgKCEobmV0ZGV2LT5mbGFncyAmIElGRl9VUCkpKSB7CiAJCXN0YXR1cyA9IGJlX2NtZF9saW5rX3N0YXR1c19xdWVyeShhZGFwdGVyLCAmbGlua191cCwKLQkJCQkJCSZtYWNfc3BlZWQsICZsaW5rX3NwZWVkKTsKKwkJCQkJCSZtYWNfc3BlZWQsICZsaW5rX3NwZWVkLCAwKTsKIAogCQliZV9saW5rX3N0YXR1c191cGRhdGUoYWRhcHRlciwgbGlua191cCk7CiAJCS8qIGxpbmtfc3BlZWQgaXMgaW4gdW5pdHMgb2YgMTAgTWJwcyAqLwogCQlpZiAobGlua19zcGVlZCkgewotCQkJZWNtZC0+c3BlZWQgPSBsaW5rX3NwZWVkKjEwOworCQkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIGxpbmtfc3BlZWQqMTApOwogCQl9IGVsc2UgewogCQkJc3dpdGNoIChtYWNfc3BlZWQpIHsKKwkJCWNhc2UgUEhZX0xJTktfU1BFRURfMTBNQlBTOgorCQkJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBTUEVFRF8xMCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFBIWV9MSU5LX1NQRUVEXzEwME1CUFM6CisJCQkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIFNQRUVEXzEwMCk7CisJCQkJYnJlYWs7CiAJCQljYXNlIFBIWV9MSU5LX1NQRUVEXzFHQlBTOgotCQkJCWVjbWQtPnNwZWVkID0gU1BFRURfMTAwMDsKKwkJCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgU1BFRURfMTAwMCk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFBIWV9MSU5LX1NQRUVEXzEwR0JQUzoKLQkJCQllY21kLT5zcGVlZCA9IFNQRUVEXzEwMDAwOworCQkJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBTUEVFRF8xMDAwMCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFBIWV9MSU5LX1NQRUVEX1pFUk86CisJCQkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIDApOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC00MjksMTQgKzQxNCwxNCBAQAogCQl9CiAKIAkJLyogU2F2ZSBmb3IgZnV0dXJlIHVzZSAqLwotCQlhZGFwdGVyLT5saW5rX3NwZWVkID0gZWNtZC0+c3BlZWQ7CisJCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSBldGh0b29sX2NtZF9zcGVlZChlY21kKTsKIAkJYWRhcHRlci0+cG9ydF90eXBlID0gZWNtZC0+cG9ydDsKIAkJYWRhcHRlci0+dHJhbnNjZWl2ZXIgPSBlY21kLT50cmFuc2NlaXZlcjsKIAkJYWRhcHRlci0+YXV0b25lZyA9IGVjbWQtPmF1dG9uZWc7CiAJCWRtYV9mcmVlX2NvaGVyZW50KCZhZGFwdGVyLT5wZGV2LT5kZXYsIHBoeV9jbWQuc2l6ZSwgcGh5X2NtZC52YSwKIAkJCQkgIHBoeV9jbWQuZG1hKTsKIAl9IGVsc2UgewotCQllY21kLT5zcGVlZCA9IGFkYXB0ZXItPmxpbmtfc3BlZWQ7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBhZGFwdGVyLT5saW5rX3NwZWVkKTsKIAkJZWNtZC0+cG9ydCA9IGFkYXB0ZXItPnBvcnRfdHlwZTsKIAkJZWNtZC0+dHJhbnNjZWl2ZXIgPSBhZGFwdGVyLT50cmFuc2NlaXZlcjsKIAkJZWNtZC0+YXV0b25lZyA9IGFkYXB0ZXItPmF1dG9uZWc7CkBAIC01MDcsMjkgKzQ5MiwzMyBAQAogfQogCiBzdGF0aWMgaW50Ci1iZV9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQorYmVfc2V0X3BoeXNfaWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkgICAgICAgZW51bSBldGh0b29sX3BoeXNfaWRfc3RhdGUgc3RhdGUpCiB7CiAJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCWludCBzdGF0dXM7Ci0JdTMyIGN1cjsKIAotCWJlX2NtZF9nZXRfYmVhY29uX3N0YXRlKGFkYXB0ZXIsIGFkYXB0ZXItPmhiYV9wb3J0X251bSwgJmN1cik7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgRVRIVE9PTF9JRF9BQ1RJVkU6CisJCWJlX2NtZF9nZXRfYmVhY29uX3N0YXRlKGFkYXB0ZXIsIGFkYXB0ZXItPmhiYV9wb3J0X251bSwKKwkJCQkJJmFkYXB0ZXItPmJlYWNvbl9zdGF0ZSk7CisJCXJldHVybiAxOwkvKiBjeWNsZSBvbi9vZmYgb25jZSBwZXIgc2Vjb25kICovCiAKLQlpZiAoY3VyID09IEJFQUNPTl9TVEFURV9FTkFCTEVEKQotCQlyZXR1cm4gMDsKKwljYXNlIEVUSFRPT0xfSURfT046CisJCWJlX2NtZF9zZXRfYmVhY29uX3N0YXRlKGFkYXB0ZXIsIGFkYXB0ZXItPmhiYV9wb3J0X251bSwgMCwgMCwKKwkJCQkJQkVBQ09OX1NUQVRFX0VOQUJMRUQpOworCQlicmVhazsKIAotCWlmIChkYXRhIDwgMikKLQkJZGF0YSA9IDI7CisJY2FzZSBFVEhUT09MX0lEX09GRjoKKwkJYmVfY21kX3NldF9iZWFjb25fc3RhdGUoYWRhcHRlciwgYWRhcHRlci0+aGJhX3BvcnRfbnVtLCAwLCAwLAorCQkJCQlCRUFDT05fU1RBVEVfRElTQUJMRUQpOworCQlicmVhazsKIAotCXN0YXR1cyA9IGJlX2NtZF9zZXRfYmVhY29uX3N0YXRlKGFkYXB0ZXIsIGFkYXB0ZXItPmhiYV9wb3J0X251bSwgMCwgMCwKLQkJCUJFQUNPTl9TVEFURV9FTkFCTEVEKTsKLQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCXNjaGVkdWxlX3RpbWVvdXQoZGF0YSpIWik7CisJY2FzZSBFVEhUT09MX0lEX0lOQUNUSVZFOgorCQliZV9jbWRfc2V0X2JlYWNvbl9zdGF0ZShhZGFwdGVyLCBhZGFwdGVyLT5oYmFfcG9ydF9udW0sIDAsIDAsCisJCQkJCWFkYXB0ZXItPmJlYWNvbl9zdGF0ZSk7CisJfQogCi0Jc3RhdHVzID0gYmVfY21kX3NldF9iZWFjb25fc3RhdGUoYWRhcHRlciwgYWRhcHRlci0+aGJhX3BvcnRfbnVtLCAwLCAwLAotCQkJQkVBQ09OX1NUQVRFX0RJU0FCTEVEKTsKLQotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBib29sCkBAIC02NDYsNyArNjM1LDcgQEAKIAl9CiAKIAlpZiAoYmVfY21kX2xpbmtfc3RhdHVzX3F1ZXJ5KGFkYXB0ZXIsICZsaW5rX3VwLCAmbWFjX3NwZWVkLAotCQkJCSZxb3NfbGlua19zcGVlZCkgIT0gMCkgeworCQkJCSZxb3NfbGlua19zcGVlZCwgMCkgIT0gMCkgewogCQl0ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CiAJCWRhdGFbNF0gPSAtMTsKIAl9IGVsc2UgaWYgKCFtYWNfc3BlZWQpIHsKQEAgLTY2MCwxMSArNjQ5LDkgQEAKIHsKIAlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJY2hhciBmaWxlX25hbWVbRVRIVE9PTF9GTEFTSF9NQVhfRklMRU5BTUVdOwotCXUzMiByZWdpb247CiAKIAlmaWxlX25hbWVbRVRIVE9PTF9GTEFTSF9NQVhfRklMRU5BTUUgLSAxXSA9IDA7CiAJc3RyY3B5KGZpbGVfbmFtZSwgZWZsLT5kYXRhKTsKLQlyZWdpb24gPSBlZmwtPnJlZ2lvbjsKIAogCXJldHVybiBiZV9sb2FkX2Z3KGFkYXB0ZXIsIGZpbGVfbmFtZSk7CiB9CkBAIC03MjUsMTggKzcxMiwxMiBAQAogCS5nZXRfcmluZ3BhcmFtID0gYmVfZ2V0X3JpbmdwYXJhbSwKIAkuZ2V0X3BhdXNlcGFyYW0gPSBiZV9nZXRfcGF1c2VwYXJhbSwKIAkuc2V0X3BhdXNlcGFyYW0gPSBiZV9zZXRfcGF1c2VwYXJhbSwKLQkuZ2V0X3J4X2NzdW0gPSBiZV9nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0gPSBiZV9zZXRfcnhfY3N1bSwKLQkuZ2V0X3R4X2NzdW0gPSBldGh0b29sX29wX2dldF90eF9jc3VtLAotCS5zZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3Bfc2V0X3R4X2h3X2NzdW0sCi0JLmdldF9zZyA9IGV0aHRvb2xfb3BfZ2V0X3NnLAotCS5zZXRfc2cgPSBldGh0b29sX29wX3NldF9zZywKLQkuZ2V0X3RzbyA9IGV0aHRvb2xfb3BfZ2V0X3RzbywKLQkuc2V0X3RzbyA9IGV0aHRvb2xfb3Bfc2V0X3RzbywKIAkuZ2V0X3N0cmluZ3MgPSBiZV9nZXRfc3RhdF9zdHJpbmdzLAotCS5waHlzX2lkID0gYmVfcGh5c19pZCwKKwkuc2V0X3BoeXNfaWQgPSBiZV9zZXRfcGh5c19pZCwKIAkuZ2V0X3NzZXRfY291bnQgPSBiZV9nZXRfc3NldF9jb3VudCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBiZV9nZXRfZXRodG9vbF9zdGF0cywKKwkuZ2V0X3JlZ3NfbGVuID0gYmVfZ2V0X3JlZ19sZW4sCisJLmdldF9yZWdzID0gYmVfZ2V0X3JlZ3MsCiAJLmZsYXNoX2RldmljZSA9IGJlX2RvX2ZsYXNoLAogCS5zZWxmX3Rlc3QgPSBiZV9zZWxmX3Rlc3QsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfaHcuaCBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2h3LmgKaW5kZXggZDQzNDRhMC4uNTNkNjU4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfaHcuaAorKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9ody5oCkBAIC0xNTUsNiArMTU1LDEwIEBACiAvKioqKioqKioqKiBTUklPViBWRiBQQ0lDRkcgT0ZGU0VUICoqKioqKioqLwogI2RlZmluZSBTUklPVl9WRl9QQ0lDRkdfT0ZGU0VUCQkoNDA5NikKIAorLyoqKioqKioqKiogRkFUIFRBQkxFICAqKioqKioqKi8KKyNkZWZpbmUgUkVUUklFVkVfRkFUCTAKKyNkZWZpbmUgUVVFUllfRkFUCTEKKwogLyogRmxhc2hyb20gcmVsYXRlZCBkZXNjcmlwdG9ycyAqLwogI2RlZmluZSBJTUFHRV9UWVBFX0ZJUk1XQVJFCQkxNjAKICNkZWZpbmUgSU1BR0VfVFlQRV9CT09UQ09ERQkJMjI0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMKaW5kZXggN2NiNWExMS4uYTQ4NWY3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYwpAQCAtMTUsNiArMTUsNyBAQAogICogQ29zdGEgTWVzYSwgQ0EgOTI2MjYKICAqLwogCisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlICJiZS5oIgogI2luY2x1ZGUgImJlX2NtZHMuaCIKICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KQEAgLTQyLDYgKzQzLDcgQEAKIAl7IFBDSV9ERVZJQ0UoQkVfVkVORE9SX0lELCBPQ19ERVZJQ0VfSUQxKSB9LAogCXsgUENJX0RFVklDRShCRV9WRU5ET1JfSUQsIE9DX0RFVklDRV9JRDIpIH0sCiAJeyBQQ0lfREVWSUNFKEVNVUxFWF9WRU5ET1JfSUQsIE9DX0RFVklDRV9JRDMpfSwKKwl7IFBDSV9ERVZJQ0UoRU1VTEVYX1ZFTkRPUl9JRCwgT0NfREVWSUNFX0lENCl9LAogCXsgMCB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGJlX2Rldl9pZHMpOwpAQCAtMTE2LDExICsxMTgsNiBAQAogCSJVbmtub3duIgogfTsKIAotc3RhdGljIGlubGluZSBib29sIGJlX211bHRpX3J4cShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlyZXR1cm4gKGFkYXB0ZXItPm51bV9yeF9xcyA+IDEpOwotfQotCiBzdGF0aWMgdm9pZCBiZV9xdWV1ZV9mcmVlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcSkKIHsKIAlzdHJ1Y3QgYmVfZG1hX21lbSAqbWVtID0gJnEtPmRtYV9tZW07CkBAIC0yNTAsMTQgKzI0NywxODUgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCitzdGF0aWMgdm9pZCBwb3B1bGF0ZV9iZTJfc3RhdHMoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisKKwlzdHJ1Y3QgYmVfZHJ2X3N0YXRzICpkcnZzID0gJmFkYXB0ZXItPmRydl9zdGF0czsKKwlzdHJ1Y3QgYmVfcG1lbV9zdGF0cyAqcG1lbV9zdHMgPSBiZV9wbWVtX3N0YXRzX2Zyb21fY21kKGFkYXB0ZXIpOworCXN0cnVjdCBiZV9wb3J0X3J4Zl9zdGF0c192MCAqcG9ydF9zdGF0cyA9CisJCWJlX3BvcnRfcnhmX3N0YXRzX2Zyb21fY21kKGFkYXB0ZXIpOworCXN0cnVjdCBiZV9yeGZfc3RhdHNfdjAgKnJ4Zl9zdGF0cyA9CisJCWJlX3J4Zl9zdGF0c19mcm9tX2NtZChhZGFwdGVyKTsKKworCWRydnMtPnJ4X3BhdXNlX2ZyYW1lcyA9IHBvcnRfc3RhdHMtPnJ4X3BhdXNlX2ZyYW1lczsKKwlkcnZzLT5yeF9jcmNfZXJyb3JzID0gcG9ydF9zdGF0cy0+cnhfY3JjX2Vycm9yczsKKwlkcnZzLT5yeF9jb250cm9sX2ZyYW1lcyA9IHBvcnRfc3RhdHMtPnJ4X2NvbnRyb2xfZnJhbWVzOworCWRydnMtPnJ4X2luX3JhbmdlX2Vycm9ycyA9IHBvcnRfc3RhdHMtPnJ4X2luX3JhbmdlX2Vycm9yczsKKwlkcnZzLT5yeF9mcmFtZV90b29fbG9uZyA9IHBvcnRfc3RhdHMtPnJ4X2ZyYW1lX3Rvb19sb25nOworCWRydnMtPnJ4X2Ryb3BwZWRfcnVudCA9IHBvcnRfc3RhdHMtPnJ4X2Ryb3BwZWRfcnVudDsKKwlkcnZzLT5yeF9pcF9jaGVja3N1bV9lcnJzID0gcG9ydF9zdGF0cy0+cnhfaXBfY2hlY2tzdW1fZXJyczsKKwlkcnZzLT5yeF90Y3BfY2hlY2tzdW1fZXJycyA9IHBvcnRfc3RhdHMtPnJ4X3RjcF9jaGVja3N1bV9lcnJzOworCWRydnMtPnJ4X3VkcF9jaGVja3N1bV9lcnJzID0gcG9ydF9zdGF0cy0+cnhfdWRwX2NoZWNrc3VtX2VycnM7CisJZHJ2cy0+cnhwcF9maWZvX292ZXJmbG93X2Ryb3AgPSBwb3J0X3N0YXRzLT5yeF9maWZvX292ZXJmbG93OworCWRydnMtPnJ4X2Ryb3BwZWRfdGNwX2xlbmd0aCA9IHBvcnRfc3RhdHMtPnJ4X2Ryb3BwZWRfdGNwX2xlbmd0aDsKKwlkcnZzLT5yeF9kcm9wcGVkX3Rvb19zbWFsbCA9IHBvcnRfc3RhdHMtPnJ4X2Ryb3BwZWRfdG9vX3NtYWxsOworCWRydnMtPnJ4X2Ryb3BwZWRfdG9vX3Nob3J0ID0gcG9ydF9zdGF0cy0+cnhfZHJvcHBlZF90b29fc2hvcnQ7CisJZHJ2cy0+cnhfb3V0X3JhbmdlX2Vycm9ycyA9IHBvcnRfc3RhdHMtPnJ4X291dF9yYW5nZV9lcnJvcnM7CisJZHJ2cy0+cnhfaW5wdXRfZmlmb19vdmVyZmxvd19kcm9wID0KKwkJcG9ydF9zdGF0cy0+cnhfaW5wdXRfZmlmb19vdmVyZmxvdzsKKwlkcnZzLT5yeF9kcm9wcGVkX2hlYWRlcl90b29fc21hbGwgPQorCQlwb3J0X3N0YXRzLT5yeF9kcm9wcGVkX2hlYWRlcl90b29fc21hbGw7CisJZHJ2cy0+cnhfYWRkcmVzc19tYXRjaF9lcnJvcnMgPQorCQlwb3J0X3N0YXRzLT5yeF9hZGRyZXNzX21hdGNoX2Vycm9yczsKKwlkcnZzLT5yeF9hbGlnbm1lbnRfc3ltYm9sX2Vycm9ycyA9CisJCXBvcnRfc3RhdHMtPnJ4X2FsaWdubWVudF9zeW1ib2xfZXJyb3JzOworCisJZHJ2cy0+dHhfcGF1c2VmcmFtZXMgPSBwb3J0X3N0YXRzLT50eF9wYXVzZWZyYW1lczsKKwlkcnZzLT50eF9jb250cm9sZnJhbWVzID0gcG9ydF9zdGF0cy0+dHhfY29udHJvbGZyYW1lczsKKworCWlmIChhZGFwdGVyLT5wb3J0X251bSkKKwkJZHJ2cy0+amFiYmVyX2V2ZW50cyA9CisJCQlyeGZfc3RhdHMtPnBvcnQxX2phYmJlcl9ldmVudHM7CisJZWxzZQorCQlkcnZzLT5qYWJiZXJfZXZlbnRzID0KKwkJCXJ4Zl9zdGF0cy0+cG9ydDBfamFiYmVyX2V2ZW50czsKKwlkcnZzLT5yeF9kcm9wc19ub19wYnVmID0gcnhmX3N0YXRzLT5yeF9kcm9wc19ub19wYnVmOworCWRydnMtPnJ4X2Ryb3BzX25vX3R4cGIgPSByeGZfc3RhdHMtPnJ4X2Ryb3BzX25vX3R4cGI7CisJZHJ2cy0+cnhfZHJvcHNfbm9fZXJ4X2Rlc2NyID0gcnhmX3N0YXRzLT5yeF9kcm9wc19ub19lcnhfZGVzY3I7CisJZHJ2cy0+cnhfZHJvcHNfaW52YWxpZF9yaW5nID0gcnhmX3N0YXRzLT5yeF9kcm9wc19pbnZhbGlkX3Jpbmc7CisJZHJ2cy0+Zm9yd2FyZGVkX3BhY2tldHMgPSByeGZfc3RhdHMtPmZvcndhcmRlZF9wYWNrZXRzOworCWRydnMtPnJ4X2Ryb3BzX210dSA9IHJ4Zl9zdGF0cy0+cnhfZHJvcHNfbXR1OworCWRydnMtPnJ4X2Ryb3BzX25vX3RwcmVfZGVzY3IgPQorCQlyeGZfc3RhdHMtPnJ4X2Ryb3BzX25vX3RwcmVfZGVzY3I7CisJZHJ2cy0+cnhfZHJvcHNfdG9vX21hbnlfZnJhZ3MgPQorCQlyeGZfc3RhdHMtPnJ4X2Ryb3BzX3Rvb19tYW55X2ZyYWdzOworCWFkYXB0ZXItPmRydl9zdGF0cy5ldGhfcmVkX2Ryb3BzID0gcG1lbV9zdHMtPmV0aF9yZWRfZHJvcHM7Cit9CisKK3N0YXRpYyB2b2lkIHBvcHVsYXRlX2JlM19zdGF0cyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYmVfZHJ2X3N0YXRzICpkcnZzID0gJmFkYXB0ZXItPmRydl9zdGF0czsKKwlzdHJ1Y3QgYmVfcG1lbV9zdGF0cyAqcG1lbV9zdHMgPSBiZV9wbWVtX3N0YXRzX2Zyb21fY21kKGFkYXB0ZXIpOworCisJc3RydWN0IGJlX3J4Zl9zdGF0c192MSAqcnhmX3N0YXRzID0KKwkJYmVfcnhmX3N0YXRzX2Zyb21fY21kKGFkYXB0ZXIpOworCXN0cnVjdCBiZV9wb3J0X3J4Zl9zdGF0c192MSAqcG9ydF9zdGF0cyA9CisJCWJlX3BvcnRfcnhmX3N0YXRzX2Zyb21fY21kKGFkYXB0ZXIpOworCisJZHJ2cy0+cnhfcHJpb3JpdHlfcGF1c2VfZnJhbWVzID0gMDsKKwlkcnZzLT5wbWVtX2ZpZm9fb3ZlcmZsb3dfZHJvcCA9IDA7CisJZHJ2cy0+cnhfcGF1c2VfZnJhbWVzID0gcG9ydF9zdGF0cy0+cnhfcGF1c2VfZnJhbWVzOworCWRydnMtPnJ4X2NyY19lcnJvcnMgPSBwb3J0X3N0YXRzLT5yeF9jcmNfZXJyb3JzOworCWRydnMtPnJ4X2NvbnRyb2xfZnJhbWVzID0gcG9ydF9zdGF0cy0+cnhfY29udHJvbF9mcmFtZXM7CisJZHJ2cy0+cnhfaW5fcmFuZ2VfZXJyb3JzID0gcG9ydF9zdGF0cy0+cnhfaW5fcmFuZ2VfZXJyb3JzOworCWRydnMtPnJ4X2ZyYW1lX3Rvb19sb25nID0gcG9ydF9zdGF0cy0+cnhfZnJhbWVfdG9vX2xvbmc7CisJZHJ2cy0+cnhfZHJvcHBlZF9ydW50ID0gcG9ydF9zdGF0cy0+cnhfZHJvcHBlZF9ydW50OworCWRydnMtPnJ4X2lwX2NoZWNrc3VtX2VycnMgPSBwb3J0X3N0YXRzLT5yeF9pcF9jaGVja3N1bV9lcnJzOworCWRydnMtPnJ4X3RjcF9jaGVja3N1bV9lcnJzID0gcG9ydF9zdGF0cy0+cnhfdGNwX2NoZWNrc3VtX2VycnM7CisJZHJ2cy0+cnhfdWRwX2NoZWNrc3VtX2VycnMgPSBwb3J0X3N0YXRzLT5yeF91ZHBfY2hlY2tzdW1fZXJyczsKKwlkcnZzLT5yeF9kcm9wcGVkX3RjcF9sZW5ndGggPSBwb3J0X3N0YXRzLT5yeF9kcm9wcGVkX3RjcF9sZW5ndGg7CisJZHJ2cy0+cnhfZHJvcHBlZF90b29fc21hbGwgPSBwb3J0X3N0YXRzLT5yeF9kcm9wcGVkX3Rvb19zbWFsbDsKKwlkcnZzLT5yeF9kcm9wcGVkX3Rvb19zaG9ydCA9IHBvcnRfc3RhdHMtPnJ4X2Ryb3BwZWRfdG9vX3Nob3J0OworCWRydnMtPnJ4X291dF9yYW5nZV9lcnJvcnMgPSBwb3J0X3N0YXRzLT5yeF9vdXRfcmFuZ2VfZXJyb3JzOworCWRydnMtPnJ4X2Ryb3BwZWRfaGVhZGVyX3Rvb19zbWFsbCA9CisJCXBvcnRfc3RhdHMtPnJ4X2Ryb3BwZWRfaGVhZGVyX3Rvb19zbWFsbDsKKwlkcnZzLT5yeF9pbnB1dF9maWZvX292ZXJmbG93X2Ryb3AgPQorCQlwb3J0X3N0YXRzLT5yeF9pbnB1dF9maWZvX292ZXJmbG93X2Ryb3A7CisJZHJ2cy0+cnhfYWRkcmVzc19tYXRjaF9lcnJvcnMgPQorCQlwb3J0X3N0YXRzLT5yeF9hZGRyZXNzX21hdGNoX2Vycm9yczsKKwlkcnZzLT5yeF9hbGlnbm1lbnRfc3ltYm9sX2Vycm9ycyA9CisJCXBvcnRfc3RhdHMtPnJ4X2FsaWdubWVudF9zeW1ib2xfZXJyb3JzOworCWRydnMtPnJ4cHBfZmlmb19vdmVyZmxvd19kcm9wID0KKwkJcG9ydF9zdGF0cy0+cnhwcF9maWZvX292ZXJmbG93X2Ryb3A7CisJZHJ2cy0+dHhfcGF1c2VmcmFtZXMgPSBwb3J0X3N0YXRzLT50eF9wYXVzZWZyYW1lczsKKwlkcnZzLT50eF9jb250cm9sZnJhbWVzID0gcG9ydF9zdGF0cy0+dHhfY29udHJvbGZyYW1lczsKKwlkcnZzLT5qYWJiZXJfZXZlbnRzID0gcG9ydF9zdGF0cy0+amFiYmVyX2V2ZW50czsKKwlkcnZzLT5yeF9kcm9wc19ub19wYnVmID0gcnhmX3N0YXRzLT5yeF9kcm9wc19ub19wYnVmOworCWRydnMtPnJ4X2Ryb3BzX25vX3R4cGIgPSByeGZfc3RhdHMtPnJ4X2Ryb3BzX25vX3R4cGI7CisJZHJ2cy0+cnhfZHJvcHNfbm9fZXJ4X2Rlc2NyID0gcnhmX3N0YXRzLT5yeF9kcm9wc19ub19lcnhfZGVzY3I7CisJZHJ2cy0+cnhfZHJvcHNfaW52YWxpZF9yaW5nID0gcnhmX3N0YXRzLT5yeF9kcm9wc19pbnZhbGlkX3Jpbmc7CisJZHJ2cy0+Zm9yd2FyZGVkX3BhY2tldHMgPSByeGZfc3RhdHMtPmZvcndhcmRlZF9wYWNrZXRzOworCWRydnMtPnJ4X2Ryb3BzX210dSA9IHJ4Zl9zdGF0cy0+cnhfZHJvcHNfbXR1OworCWRydnMtPnJ4X2Ryb3BzX25vX3RwcmVfZGVzY3IgPQorCQlyeGZfc3RhdHMtPnJ4X2Ryb3BzX25vX3RwcmVfZGVzY3I7CisJZHJ2cy0+cnhfZHJvcHNfdG9vX21hbnlfZnJhZ3MgPQorCQlyeGZfc3RhdHMtPnJ4X2Ryb3BzX3Rvb19tYW55X2ZyYWdzOworCWFkYXB0ZXItPmRydl9zdGF0cy5ldGhfcmVkX2Ryb3BzID0gcG1lbV9zdHMtPmV0aF9yZWRfZHJvcHM7Cit9CisKK3N0YXRpYyB2b2lkIHBvcHVsYXRlX2xhbmNlcl9zdGF0cyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKworCXN0cnVjdCBiZV9kcnZfc3RhdHMgKmRydnMgPSAmYWRhcHRlci0+ZHJ2X3N0YXRzOworCXN0cnVjdCBsYW5jZXJfY21kX3Bwb3J0X3N0YXRzICpwcG9ydF9zdGF0cyA9IHBwb3J0X3N0YXRzX2Zyb21fY21kCisJCQkJCQkoYWRhcHRlcik7CisJZHJ2cy0+cnhfcHJpb3JpdHlfcGF1c2VfZnJhbWVzID0gMDsKKwlkcnZzLT5wbWVtX2ZpZm9fb3ZlcmZsb3dfZHJvcCA9IDA7CisJZHJ2cy0+cnhfcGF1c2VfZnJhbWVzID0KKwkJbWFrZV82NGJpdF92YWwocHBvcnRfc3RhdHMtPnJ4X3BhdXNlX2ZyYW1lc19sbywKKwkJCQkgcHBvcnRfc3RhdHMtPnJ4X3BhdXNlX2ZyYW1lc19oaSk7CisJZHJ2cy0+cnhfY3JjX2Vycm9ycyA9IG1ha2VfNjRiaXRfdmFsKHBwb3J0X3N0YXRzLT5yeF9jcmNfZXJyb3JzX2hpLAorCQkJCQkJcHBvcnRfc3RhdHMtPnJ4X2NyY19lcnJvcnNfbG8pOworCWRydnMtPnJ4X2NvbnRyb2xfZnJhbWVzID0KKwkJCW1ha2VfNjRiaXRfdmFsKHBwb3J0X3N0YXRzLT5yeF9jb250cm9sX2ZyYW1lc19oaSwKKwkJCXBwb3J0X3N0YXRzLT5yeF9jb250cm9sX2ZyYW1lc19sbyk7CisJZHJ2cy0+cnhfaW5fcmFuZ2VfZXJyb3JzID0gcHBvcnRfc3RhdHMtPnJ4X2luX3JhbmdlX2Vycm9yczsKKwlkcnZzLT5yeF9mcmFtZV90b29fbG9uZyA9CisJCW1ha2VfNjRiaXRfdmFsKHBwb3J0X3N0YXRzLT5yeF9pbnRlcm5hbF9tYWNfZXJyb3JzX2hpLAorCQkJCQlwcG9ydF9zdGF0cy0+cnhfZnJhbWVzX3Rvb19sb25nX2xvKTsKKwlkcnZzLT5yeF9kcm9wcGVkX3J1bnQgPSBwcG9ydF9zdGF0cy0+cnhfZHJvcHBlZF9ydW50OworCWRydnMtPnJ4X2lwX2NoZWNrc3VtX2VycnMgPSBwcG9ydF9zdGF0cy0+cnhfaXBfY2hlY2tzdW1fZXJyb3JzOworCWRydnMtPnJ4X3RjcF9jaGVja3N1bV9lcnJzID0gcHBvcnRfc3RhdHMtPnJ4X3RjcF9jaGVja3N1bV9lcnJvcnM7CisJZHJ2cy0+cnhfdWRwX2NoZWNrc3VtX2VycnMgPSBwcG9ydF9zdGF0cy0+cnhfdWRwX2NoZWNrc3VtX2Vycm9yczsKKwlkcnZzLT5yeF9kcm9wcGVkX3RjcF9sZW5ndGggPQorCQkJCXBwb3J0X3N0YXRzLT5yeF9kcm9wcGVkX2ludmFsaWRfdGNwX2xlbmd0aDsKKwlkcnZzLT5yeF9kcm9wcGVkX3Rvb19zbWFsbCA9IHBwb3J0X3N0YXRzLT5yeF9kcm9wcGVkX3Rvb19zbWFsbDsKKwlkcnZzLT5yeF9kcm9wcGVkX3Rvb19zaG9ydCA9IHBwb3J0X3N0YXRzLT5yeF9kcm9wcGVkX3Rvb19zaG9ydDsKKwlkcnZzLT5yeF9vdXRfcmFuZ2VfZXJyb3JzID0gcHBvcnRfc3RhdHMtPnJ4X291dF9vZl9yYW5nZV9lcnJvcnM7CisJZHJ2cy0+cnhfZHJvcHBlZF9oZWFkZXJfdG9vX3NtYWxsID0KKwkJCQlwcG9ydF9zdGF0cy0+cnhfZHJvcHBlZF9oZWFkZXJfdG9vX3NtYWxsOworCWRydnMtPnJ4X2lucHV0X2ZpZm9fb3ZlcmZsb3dfZHJvcCA9IHBwb3J0X3N0YXRzLT5yeF9maWZvX292ZXJmbG93OworCWRydnMtPnJ4X2FkZHJlc3NfbWF0Y2hfZXJyb3JzID0gcHBvcnRfc3RhdHMtPnJ4X2FkZHJlc3NfbWF0Y2hfZXJyb3JzOworCWRydnMtPnJ4X2FsaWdubWVudF9zeW1ib2xfZXJyb3JzID0KKwkJbWFrZV82NGJpdF92YWwocHBvcnRfc3RhdHMtPnJ4X3N5bWJvbF9lcnJvcnNfaGksCisJCQkJcHBvcnRfc3RhdHMtPnJ4X3N5bWJvbF9lcnJvcnNfbG8pOworCWRydnMtPnJ4cHBfZmlmb19vdmVyZmxvd19kcm9wID0gcHBvcnRfc3RhdHMtPnJ4X2ZpZm9fb3ZlcmZsb3c7CisJZHJ2cy0+dHhfcGF1c2VmcmFtZXMgPSBtYWtlXzY0Yml0X3ZhbChwcG9ydF9zdGF0cy0+dHhfcGF1c2VfZnJhbWVzX2hpLAorCQkJCQlwcG9ydF9zdGF0cy0+dHhfcGF1c2VfZnJhbWVzX2xvKTsKKwlkcnZzLT50eF9jb250cm9sZnJhbWVzID0KKwkJbWFrZV82NGJpdF92YWwocHBvcnRfc3RhdHMtPnR4X2NvbnRyb2xfZnJhbWVzX2hpLAorCQkJCXBwb3J0X3N0YXRzLT50eF9jb250cm9sX2ZyYW1lc19sbyk7CisJZHJ2cy0+amFiYmVyX2V2ZW50cyA9IHBwb3J0X3N0YXRzLT5yeF9qYWJiZXJzOworCWRydnMtPnJ4X2Ryb3BzX25vX3BidWYgPSAwOworCWRydnMtPnJ4X2Ryb3BzX25vX3R4cGIgPSAwOworCWRydnMtPnJ4X2Ryb3BzX25vX2VyeF9kZXNjciA9IDA7CisJZHJ2cy0+cnhfZHJvcHNfaW52YWxpZF9yaW5nID0gcHBvcnRfc3RhdHMtPnJ4X2Ryb3BzX2ludmFsaWRfcXVldWU7CisJZHJ2cy0+Zm9yd2FyZGVkX3BhY2tldHMgPSBtYWtlXzY0Yml0X3ZhbChwcG9ydF9zdGF0cy0+bnVtX2ZvcndhcmRzX2hpLAorCQkJCQkJcHBvcnRfc3RhdHMtPm51bV9mb3J3YXJkc19sbyk7CisJZHJ2cy0+cnhfZHJvcHNfbXR1ID0gbWFrZV82NGJpdF92YWwocHBvcnRfc3RhdHMtPnJ4X2Ryb3BzX210dV9oaSwKKwkJCQkJCXBwb3J0X3N0YXRzLT5yeF9kcm9wc19tdHVfbG8pOworCWRydnMtPnJ4X2Ryb3BzX25vX3RwcmVfZGVzY3IgPSAwOworCWRydnMtPnJ4X2Ryb3BzX3Rvb19tYW55X2ZyYWdzID0KKwkJbWFrZV82NGJpdF92YWwocHBvcnRfc3RhdHMtPnJ4X2Ryb3BzX3Rvb19tYW55X2ZyYWdzX2hpLAorCQkJCXBwb3J0X3N0YXRzLT5yeF9kcm9wc190b29fbWFueV9mcmFnc19sbyk7Cit9CisKK3ZvaWQgYmVfcGFyc2Vfc3RhdHMoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKGFkYXB0ZXItPmdlbmVyYXRpb24gPT0gQkVfR0VOMykgeworCQlpZiAobGFuY2VyX2NoaXAoYWRhcHRlcikpCisJCQlwb3B1bGF0ZV9sYW5jZXJfc3RhdHMoYWRhcHRlcik7CisJCSBlbHNlCisJCQlwb3B1bGF0ZV9iZTNfc3RhdHMoYWRhcHRlcik7CisJfSBlbHNlIHsKKwkJcG9wdWxhdGVfYmUyX3N0YXRzKGFkYXB0ZXIpOworCX0KK30KKwogdm9pZCBuZXRkZXZfc3RhdHNfdXBkYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewotCXN0cnVjdCBiZV9od19zdGF0cyAqaHdfc3RhdHMgPSBod19zdGF0c19mcm9tX2NtZChhZGFwdGVyLT5zdGF0c19jbWQudmEpOwotCXN0cnVjdCBiZV9yeGZfc3RhdHMgKnJ4Zl9zdGF0cyA9ICZod19zdGF0cy0+cnhmOwotCXN0cnVjdCBiZV9wb3J0X3J4Zl9zdGF0cyAqcG9ydF9zdGF0cyA9Ci0JCQkmcnhmX3N0YXRzLT5wb3J0W2FkYXB0ZXItPnBvcnRfbnVtXTsKKwlzdHJ1Y3QgYmVfZHJ2X3N0YXRzICpkcnZzID0gJmFkYXB0ZXItPmRydl9zdGF0czsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZGV2X3N0YXRzID0gJmFkYXB0ZXItPm5ldGRldi0+c3RhdHM7Ci0Jc3RydWN0IGJlX2VyeF9zdGF0cyAqZXJ4X3N0YXRzID0gJmh3X3N0YXRzLT5lcng7CiAJc3RydWN0IGJlX3J4X29iaiAqcnhvOwogCWludCBpOwogCkBAIC0yNjcsNDMgKzQzNSw1NCBAQAogCQlkZXZfc3RhdHMtPnJ4X2J5dGVzICs9IHJ4X3N0YXRzKHJ4byktPnJ4X2J5dGVzOwogCQlkZXZfc3RhdHMtPm11bHRpY2FzdCArPSByeF9zdGF0cyhyeG8pLT5yeF9tY2FzdF9wa3RzOwogCQkvKiAgbm8gc3BhY2UgaW4gbGludXggYnVmZmVyczogYmVzdCBwb3NzaWJsZSBhcHByb3hpbWF0aW9uICovCi0JCWRldl9zdGF0cy0+cnhfZHJvcHBlZCArPQotCQkJZXJ4X3N0YXRzLT5yeF9kcm9wc19ub19mcmFnbWVudHNbcnhvLT5xLmlkXTsKKwkJaWYgKGFkYXB0ZXItPmdlbmVyYXRpb24gPT0gQkVfR0VOMykgeworCQkJaWYgKCEobGFuY2VyX2NoaXAoYWRhcHRlcikpKSB7CisJCQkJc3RydWN0IGJlX2VyeF9zdGF0c192MSAqZXJ4X3N0YXRzID0KKwkJCQkJYmVfZXJ4X3N0YXRzX2Zyb21fY21kKGFkYXB0ZXIpOworCQkJCWRldl9zdGF0cy0+cnhfZHJvcHBlZCArPQorCQkJCWVyeF9zdGF0cy0+cnhfZHJvcHNfbm9fZnJhZ21lbnRzW3J4by0+cS5pZF07CisJCQl9CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgYmVfZXJ4X3N0YXRzX3YwICplcnhfc3RhdHMgPQorCQkJCQliZV9lcnhfc3RhdHNfZnJvbV9jbWQoYWRhcHRlcik7CisJCQlkZXZfc3RhdHMtPnJ4X2Ryb3BwZWQgKz0KKwkJCQllcnhfc3RhdHMtPnJ4X2Ryb3BzX25vX2ZyYWdtZW50c1tyeG8tPnEuaWRdOworCQl9CiAJfQogCiAJZGV2X3N0YXRzLT50eF9wYWNrZXRzID0gdHhfc3RhdHMoYWRhcHRlciktPmJlX3R4X3BrdHM7CiAJZGV2X3N0YXRzLT50eF9ieXRlcyA9IHR4X3N0YXRzKGFkYXB0ZXIpLT5iZV90eF9ieXRlczsKIAogCS8qIGJhZCBwa3RzIHJlY2VpdmVkICovCi0JZGV2X3N0YXRzLT5yeF9lcnJvcnMgPSBwb3J0X3N0YXRzLT5yeF9jcmNfZXJyb3JzICsKLQkJcG9ydF9zdGF0cy0+cnhfYWxpZ25tZW50X3N5bWJvbF9lcnJvcnMgKwotCQlwb3J0X3N0YXRzLT5yeF9pbl9yYW5nZV9lcnJvcnMgKwotCQlwb3J0X3N0YXRzLT5yeF9vdXRfcmFuZ2VfZXJyb3JzICsKLQkJcG9ydF9zdGF0cy0+cnhfZnJhbWVfdG9vX2xvbmcgKwotCQlwb3J0X3N0YXRzLT5yeF9kcm9wcGVkX3Rvb19zbWFsbCArCi0JCXBvcnRfc3RhdHMtPnJ4X2Ryb3BwZWRfdG9vX3Nob3J0ICsKLQkJcG9ydF9zdGF0cy0+cnhfZHJvcHBlZF9oZWFkZXJfdG9vX3NtYWxsICsKLQkJcG9ydF9zdGF0cy0+cnhfZHJvcHBlZF90Y3BfbGVuZ3RoICsKLQkJcG9ydF9zdGF0cy0+cnhfZHJvcHBlZF9ydW50ICsKLQkJcG9ydF9zdGF0cy0+cnhfdGNwX2NoZWNrc3VtX2VycnMgKwotCQlwb3J0X3N0YXRzLT5yeF9pcF9jaGVja3N1bV9lcnJzICsKLQkJcG9ydF9zdGF0cy0+cnhfdWRwX2NoZWNrc3VtX2VycnM7CisJZGV2X3N0YXRzLT5yeF9lcnJvcnMgPSBkcnZzLT5yeF9jcmNfZXJyb3JzICsKKwkJZHJ2cy0+cnhfYWxpZ25tZW50X3N5bWJvbF9lcnJvcnMgKworCQlkcnZzLT5yeF9pbl9yYW5nZV9lcnJvcnMgKworCQlkcnZzLT5yeF9vdXRfcmFuZ2VfZXJyb3JzICsKKwkJZHJ2cy0+cnhfZnJhbWVfdG9vX2xvbmcgKworCQlkcnZzLT5yeF9kcm9wcGVkX3Rvb19zbWFsbCArCisJCWRydnMtPnJ4X2Ryb3BwZWRfdG9vX3Nob3J0ICsKKwkJZHJ2cy0+cnhfZHJvcHBlZF9oZWFkZXJfdG9vX3NtYWxsICsKKwkJZHJ2cy0+cnhfZHJvcHBlZF90Y3BfbGVuZ3RoICsKKwkJZHJ2cy0+cnhfZHJvcHBlZF9ydW50ICsKKwkJZHJ2cy0+cnhfdGNwX2NoZWNrc3VtX2VycnMgKworCQlkcnZzLT5yeF9pcF9jaGVja3N1bV9lcnJzICsKKwkJZHJ2cy0+cnhfdWRwX2NoZWNrc3VtX2VycnM7CiAKIAkvKiBkZXRhaWxlZCByeCBlcnJvcnMgKi8KLQlkZXZfc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMgPSBwb3J0X3N0YXRzLT5yeF9pbl9yYW5nZV9lcnJvcnMgKwotCQlwb3J0X3N0YXRzLT5yeF9vdXRfcmFuZ2VfZXJyb3JzICsKLQkJcG9ydF9zdGF0cy0+cnhfZnJhbWVfdG9vX2xvbmc7CisJZGV2X3N0YXRzLT5yeF9sZW5ndGhfZXJyb3JzID0gZHJ2cy0+cnhfaW5fcmFuZ2VfZXJyb3JzICsKKwkJZHJ2cy0+cnhfb3V0X3JhbmdlX2Vycm9ycyArCisJCWRydnMtPnJ4X2ZyYW1lX3Rvb19sb25nOwogCi0JZGV2X3N0YXRzLT5yeF9jcmNfZXJyb3JzID0gcG9ydF9zdGF0cy0+cnhfY3JjX2Vycm9yczsKKwlkZXZfc3RhdHMtPnJ4X2NyY19lcnJvcnMgPSBkcnZzLT5yeF9jcmNfZXJyb3JzOwogCiAJLyogZnJhbWUgYWxpZ25tZW50IGVycm9ycyAqLwotCWRldl9zdGF0cy0+cnhfZnJhbWVfZXJyb3JzID0gcG9ydF9zdGF0cy0+cnhfYWxpZ25tZW50X3N5bWJvbF9lcnJvcnM7CisJZGV2X3N0YXRzLT5yeF9mcmFtZV9lcnJvcnMgPSBkcnZzLT5yeF9hbGlnbm1lbnRfc3ltYm9sX2Vycm9yczsKIAogCS8qIHJlY2VpdmVyIGZpZm8gb3ZlcnJ1biAqLwogCS8qIGRyb3BzX25vX3BidWYgaXMgbm8gcGVyIGkvZiwgaXQncyBwZXIgQkUgY2FyZCAqLwotCWRldl9zdGF0cy0+cnhfZmlmb19lcnJvcnMgPSBwb3J0X3N0YXRzLT5yeF9maWZvX292ZXJmbG93ICsKLQkJCQkJcG9ydF9zdGF0cy0+cnhfaW5wdXRfZmlmb19vdmVyZmxvdyArCi0JCQkJCXJ4Zl9zdGF0cy0+cnhfZHJvcHNfbm9fcGJ1ZjsKKwlkZXZfc3RhdHMtPnJ4X2ZpZm9fZXJyb3JzID0gZHJ2cy0+cnhwcF9maWZvX292ZXJmbG93X2Ryb3AgKworCQkJCWRydnMtPnJ4X2lucHV0X2ZpZm9fb3ZlcmZsb3dfZHJvcCArCisJCQkJZHJ2cy0+cnhfZHJvcHNfbm9fcGJ1ZjsKIH0KIAogdm9pZCBiZV9saW5rX3N0YXR1c191cGRhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wgbGlua191cCkKQEAgLTcwMyw3ICs4ODIsNyBAQAogCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAogCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKLQkJYmVfY21kX3Byb21pc2N1b3VzX2NvbmZpZyhhZGFwdGVyLCBhZGFwdGVyLT5wb3J0X251bSwgMSk7CisJCWJlX2NtZF9wcm9taXNjdW91c19jb25maWcoYWRhcHRlciwgdHJ1ZSk7CiAJCWFkYXB0ZXItPnByb21pc2N1b3VzID0gdHJ1ZTsKIAkJZ290byBkb25lOwogCX0KQEAgLTcxMSw3ICs4OTAsNyBAQAogCS8qIEJFIHdhcyBwcmV2aW91c2x5IGluIHByb21pc2N1b3VzIG1vZGU7IGRpc2FibGUgaXQgKi8KIAlpZiAoYWRhcHRlci0+cHJvbWlzY3VvdXMpIHsKIAkJYWRhcHRlci0+cHJvbWlzY3VvdXMgPSBmYWxzZTsKLQkJYmVfY21kX3Byb21pc2N1b3VzX2NvbmZpZyhhZGFwdGVyLCBhZGFwdGVyLT5wb3J0X251bSwgMCk7CisJCWJlX2NtZF9wcm9taXNjdW91c19jb25maWcoYWRhcHRlciwgZmFsc2UpOwogCX0KIAogCS8qIEVuYWJsZSBtdWx0aWNhc3QgcHJvbWlzYyBpZiBudW0gY29uZmlndXJlZCBleGNlZWRzIHdoYXQgd2Ugc3VwcG9ydCAqLwpAQCAtOTkzLDkgKzExNzIsMTAgQEAKIAkJCXN0cnVjdCBiZV9yeF9vYmogKnJ4bywKIAkJCXN0cnVjdCBiZV9yeF9jb21wbF9pbmZvICpyeGNwKQogeworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCXNrYiA9IG5ldGRldl9hbGxvY19za2JfaXBfYWxpZ24oYWRhcHRlci0+bmV0ZGV2LCBCRV9IRFJfTEVOKTsKKwlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiX2lwX2FsaWduKG5ldGRldiwgQkVfSERSX0xFTik7CiAJaWYgKHVubGlrZWx5KCFza2IpKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQlkZXZfd2FybigmYWRhcHRlci0+cGRldi0+ZGV2LCAic2tiIGFsbG9jIGZhaWxlZFxuIik7CkBAIC0xMDA1LDIwICsxMTg1LDI0IEBACiAKIAlza2JfZmlsbF9yeF9kYXRhKGFkYXB0ZXIsIHJ4bywgc2tiLCByeGNwKTsKIAotCWlmIChsaWtlbHkoYWRhcHRlci0+cnhfY3N1bSAmJiBjc3VtX3Bhc3NlZChyeGNwKSkpCisJaWYgKGxpa2VseSgobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSAmJiBjc3VtX3Bhc3NlZChyeGNwKSkpCiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJZWxzZQogCQlza2JfY2hlY2tzdW1fbm9uZV9hc3NlcnQoc2tiKTsKIAogCXNrYi0+dHJ1ZXNpemUgPSBza2ItPmxlbiArIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZik7Ci0Jc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgYWRhcHRlci0+bmV0ZGV2KTsKKwlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZXRkZXYpOworCWlmIChhZGFwdGVyLT5uZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWEhBU0gpCisJCXNrYi0+cnhoYXNoID0gcnhjcC0+cnNzX2hhc2g7CisKIAogCWlmICh1bmxpa2VseShyeGNwLT52bGFuZikpIHsKIAkJaWYgKCFhZGFwdGVyLT52bGFuX2dycCB8fCBhZGFwdGVyLT52bGFuc19hZGRlZCA9PSAwKSB7CiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCXJldHVybjsKIAkJfQotCQl2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBhZGFwdGVyLT52bGFuX2dycCwgcnhjcC0+dmlkKTsKKwkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgYWRhcHRlci0+dmxhbl9ncnAsCisJCQkJCXJ4Y3AtPnZsYW5fdGFnKTsKIAl9IGVsc2UgewogCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCX0KQEAgLTEwNzIsMTEgKzEyNTYsMTQgQEAKIAlza2ItPmRhdGFfbGVuID0gcnhjcC0+cGt0X3NpemU7CiAJc2tiLT50cnVlc2l6ZSArPSByeGNwLT5wa3Rfc2l6ZTsKIAlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCWlmIChhZGFwdGVyLT5uZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWEhBU0gpCisJCXNrYi0+cnhoYXNoID0gcnhjcC0+cnNzX2hhc2g7CiAKIAlpZiAobGlrZWx5KCFyeGNwLT52bGFuZikpCiAJCW5hcGlfZ3JvX2ZyYWdzKCZlcV9vYmotPm5hcGkpOwogCWVsc2UKLQkJdmxhbl9ncm9fZnJhZ3MoJmVxX29iai0+bmFwaSwgYWRhcHRlci0+dmxhbl9ncnAsIHJ4Y3AtPnZpZCk7CisJCXZsYW5fZ3JvX2ZyYWdzKCZlcV9vYmotPm5hcGksIGFkYXB0ZXItPnZsYW5fZ3JwLAorCQkJCXJ4Y3AtPnZsYW5fdGFnKTsKIH0KIAogc3RhdGljIHZvaWQgYmVfcGFyc2VfcnhfY29tcGxfdjEoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCkBAIC0xMTAxLDggKzEyODgsMTQgQEAKIAkJQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGxfdjEsIG51bWZyYWdzLCBjb21wbCk7CiAJcnhjcC0+cGt0X3R5cGUgPQogCQlBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbF92MSwgY2FzdF9lbmMsIGNvbXBsKTsKLQlyeGNwLT52dG0gPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbF92MSwgdnRtLCBjb21wbCk7Ci0JcnhjcC0+dmlkID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGxfdjEsIHZsYW5fdGFnLCBjb21wbCk7CisJcnhjcC0+cnNzX2hhc2ggPQorCQlBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbF92MSwgcnNzaGFzaCwgcnhjcCk7CisJaWYgKHJ4Y3AtPnZsYW5mKSB7CisJCXJ4Y3AtPnZ0bSA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsX3YxLCB2dG0sCisJCQkJCSAgY29tcGwpOworCQlyeGNwLT52bGFuX3RhZyA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsX3YxLCB2bGFuX3RhZywKKwkJCQkJICAgICAgIGNvbXBsKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGJlX3BhcnNlX3J4X2NvbXBsX3YwKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLApAQCAtMTEyNyw4ICsxMzIwLDE0IEBACiAJCUFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsX3YwLCBudW1mcmFncywgY29tcGwpOwogCXJ4Y3AtPnBrdF90eXBlID0KIAkJQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGxfdjAsIGNhc3RfZW5jLCBjb21wbCk7Ci0JcnhjcC0+dnRtID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGxfdjAsIHZ0bSwgY29tcGwpOwotCXJ4Y3AtPnZpZCA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsX3YwLCB2bGFuX3RhZywgY29tcGwpOworCXJ4Y3AtPnJzc19oYXNoID0KKwkJQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGxfdjAsIHJzc2hhc2gsIHJ4Y3ApOworCWlmIChyeGNwLT52bGFuZikgeworCQlyeGNwLT52dG0gPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbF92MCwgdnRtLAorCQkJCQkgIGNvbXBsKTsKKwkJcnhjcC0+dmxhbl90YWcgPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbF92MCwgdmxhbl90YWcsCisJCQkJCSAgICAgICBjb21wbCk7CisJfQogfQogCiBzdGF0aWMgc3RydWN0IGJlX3J4X2NvbXBsX2luZm8gKmJlX3J4X2NvbXBsX2dldChzdHJ1Y3QgYmVfcnhfb2JqICpyeG8pCkBAIC0xMTUwLDE1ICsxMzQ5LDIwIEBACiAJZWxzZQogCQliZV9wYXJzZV9yeF9jb21wbF92MChhZGFwdGVyLCBjb21wbCwgcnhjcCk7CiAKLQkvKiB2bGFuZiBjb3VsZCBiZSB3cm9uZ2x5IHNldCBpbiBzb21lIGNhcmRzLiBpZ25vcmUgaWYgdnRtIGlzIG5vdCBzZXQgKi8KLQlpZiAoKGFkYXB0ZXItPmZ1bmN0aW9uX21vZGUgJiAweDQwMCkgJiYgIXJ4Y3AtPnZ0bSkKLQkJcnhjcC0+dmxhbmYgPSAwOworCWlmIChyeGNwLT52bGFuZikgeworCQkvKiB2bGFuZiBjb3VsZCBiZSB3cm9uZ2x5IHNldCBpbiBzb21lIGNhcmRzLgorCQkgKiBpZ25vcmUgaWYgdnRtIGlzIG5vdCBzZXQgKi8KKwkJaWYgKChhZGFwdGVyLT5mdW5jdGlvbl9tb2RlICYgMHg0MDApICYmICFyeGNwLT52dG0pCisJCQlyeGNwLT52bGFuZiA9IDA7CiAKLQlpZiAoIWxhbmNlcl9jaGlwKGFkYXB0ZXIpKQotCQlyeGNwLT52aWQgPSBzd2FiMTYocnhjcC0+dmlkKTsKKwkJaWYgKCFsYW5jZXJfY2hpcChhZGFwdGVyKSkKKwkJCXJ4Y3AtPnZsYW5fdGFnID0gc3dhYjE2KHJ4Y3AtPnZsYW5fdGFnKTsKIAotCWlmICgoYWRhcHRlci0+cHZpZCA9PSByeGNwLT52aWQpICYmICFhZGFwdGVyLT52bGFuX3RhZ1tyeGNwLT52aWRdKQotCQlyeGNwLT52bGFuZiA9IDA7CisJCWlmICgoKGFkYXB0ZXItPnB2aWQgJiBWTEFOX1ZJRF9NQVNLKSA9PQorCQkgICAgIChyeGNwLT52bGFuX3RhZyAmIFZMQU5fVklEX01BU0spKSAmJgorCQkgICAgIWFkYXB0ZXItPnZsYW5fdGFnW3J4Y3AtPnZsYW5fdGFnXSkKKwkJCXJ4Y3AtPnZsYW5mID0gMDsKKwl9CiAKIAkvKiBBcyB0aGUgY29tcGwgaGFzIGJlZW4gcGFyc2VkLCByZXNldCBpdDsgd2Ugd29udCB0b3VjaCBpdCBhZ2FpbiAqLwogCWNvbXBsLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGxfdjEsIHZhbGlkKSAvIDMyXSA9IDA7CkBAIC0xMjU1LDcgKzE0NTksNyBAQAogCXJldHVybiB0eGNwOwogfQogCi1zdGF0aWMgdm9pZCBiZV90eF9jb21wbF9wcm9jZXNzKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MTYgbGFzdF9pbmRleCkKK3N0YXRpYyB1MTYgYmVfdHhfY29tcGxfcHJvY2VzcyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTE2IGxhc3RfaW5kZXgpCiB7CiAJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnR4cSA9ICZhZGFwdGVyLT50eF9vYmoucTsKIAlzdHJ1Y3QgYmVfZXRoX3dyYiAqd3JiOwpAQCAtMTI4Miw5ICsxNDg2LDggQEAKIAkJcXVldWVfdGFpbF9pbmModHhxKTsKIAl9IHdoaWxlIChjdXJfaW5kZXggIT0gbGFzdF9pbmRleCk7CiAKLQlhdG9taWNfc3ViKG51bV93cmJzLCAmdHhxLT51c2VkKTsKLQogCWtmcmVlX3NrYihzZW50X3NrYik7CisJcmV0dXJuIG51bV93cmJzOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBiZV9lcV9lbnRyeSAqZXZlbnRfZ2V0KHN0cnVjdCBiZV9lcV9vYmogKmVxX29iaikKQEAgLTEzNjcsNyArMTU3MCw3IEBACiAJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnR4X2NxID0gJmFkYXB0ZXItPnR4X29iai5jcTsKIAlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqdHhxID0gJmFkYXB0ZXItPnR4X29iai5xOwogCXN0cnVjdCBiZV9ldGhfdHhfY29tcGwgKnR4Y3A7Ci0JdTE2IGVuZF9pZHgsIGNtcGwgPSAwLCB0aW1lbyA9IDA7CisJdTE2IGVuZF9pZHgsIGNtcGwgPSAwLCB0aW1lbyA9IDAsIG51bV93cmJzID0gMDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqKnNlbnRfc2ticyA9IGFkYXB0ZXItPnR4X29iai5zZW50X3NrYl9saXN0OwogCXN0cnVjdCBza19idWZmICpzZW50X3NrYjsKIAlib29sIGR1bW15X3dyYjsKQEAgLTEzNzcsMTIgKzE1ODAsMTQgQEAKIAkJd2hpbGUgKCh0eGNwID0gYmVfdHhfY29tcGxfZ2V0KHR4X2NxKSkpIHsKIAkJCWVuZF9pZHggPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF90eF9jb21wbCwKIAkJCQkJd3JiX2luZGV4LCB0eGNwKTsKLQkJCWJlX3R4X2NvbXBsX3Byb2Nlc3MoYWRhcHRlciwgZW5kX2lkeCk7CisJCQludW1fd3JicyArPSBiZV90eF9jb21wbF9wcm9jZXNzKGFkYXB0ZXIsIGVuZF9pZHgpOwogCQkJY21wbCsrOwogCQl9CiAJCWlmIChjbXBsKSB7CiAJCQliZV9jcV9ub3RpZnkoYWRhcHRlciwgdHhfY3EtPmlkLCBmYWxzZSwgY21wbCk7CisJCQlhdG9taWNfc3ViKG51bV93cmJzLCAmdHhxLT51c2VkKTsKIAkJCWNtcGwgPSAwOworCQkJbnVtX3dyYnMgPSAwOwogCQl9CiAKIAkJaWYgKGF0b21pY19yZWFkKCZ0eHEtPnVzZWQpID09IDAgfHwgKyt0aW1lbyA+IDIwMCkKQEAgLTE0MDIsNyArMTYwNyw4IEBACiAJCWluZGV4X2FkdigmZW5kX2lkeCwKIAkJCXdyYl9jbnRfZm9yX3NrYihhZGFwdGVyLCBzZW50X3NrYiwgJmR1bW15X3dyYikgLSAxLAogCQkJdHhxLT5sZW4pOwotCQliZV90eF9jb21wbF9wcm9jZXNzKGFkYXB0ZXIsIGVuZF9pZHgpOworCQludW1fd3JicyA9IGJlX3R4X2NvbXBsX3Byb2Nlc3MoYWRhcHRlciwgZW5kX2lkeCk7CisJCWF0b21pY19zdWIobnVtX3dyYnMsICZ0eHEtPnVzZWQpOwogCX0KIH0KIApAQCAtMTU2NywxMiArMTc3MywzMSBAQAogCX0KIH0KIAorc3RhdGljIHUzMiBiZV9udW1fcnhxc193YW50KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChtdWx0aV9yeHEgJiYgKGFkYXB0ZXItPmZ1bmN0aW9uX2NhcHMgJiBCRV9GVU5DVElPTl9DQVBTX1JTUykgJiYKKwkJIWFkYXB0ZXItPnNyaW92X2VuYWJsZWQgJiYgIShhZGFwdGVyLT5mdW5jdGlvbl9tb2RlICYgMHg0MDApKSB7CisJCXJldHVybiAxICsgTUFYX1JTU19RUzsgLyogb25lIGRlZmF1bHQgbm9uLVJTUyBxdWV1ZSAqLworCX0gZWxzZSB7CisJCWRldl93YXJuKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkiTm8gc3VwcG9ydCBmb3IgbXVsdGlwbGUgUlggcXVldWVzXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorfQorCiBzdGF0aWMgaW50IGJlX3J4X3F1ZXVlc19jcmVhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxLCAqcSwgKmNxOwogCXN0cnVjdCBiZV9yeF9vYmogKnJ4bzsKIAlpbnQgcmMsIGk7CiAKKwlhZGFwdGVyLT5udW1fcnhfcXMgPSBtaW4oYmVfbnVtX3J4cXNfd2FudChhZGFwdGVyKSwKKwkJCQltc2l4X2VuYWJsZWQoYWRhcHRlcikgPworCQkJCQlhZGFwdGVyLT5udW1fbXNpeF92ZWMgLSAxIDogMSk7CisJaWYgKGFkYXB0ZXItPm51bV9yeF9xcyAhPSBNQVhfUlhfUVMpCisJCWRldl93YXJuKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkiQ2FuIGNyZWF0ZSBvbmx5ICVkIFJYIHF1ZXVlcyIsIGFkYXB0ZXItPm51bV9yeF9xcyk7CisKIAlhZGFwdGVyLT5iaWdfcGFnZV9zaXplID0gKDEgPDwgZ2V0X29yZGVyKHJ4X2ZyYWdfc2l6ZSkpICogUEFHRV9TSVpFOwogCWZvcl9hbGxfcnhfcXVldWVzKGFkYXB0ZXIsIHJ4bywgaSkgewogCQlyeG8tPmFkYXB0ZXIgPSBhZGFwdGVyOwpAQCAtMTcxOCwxMiArMTk0MywxNSBAQAogCQkJYnJlYWs7CiAKIAkJLyogSWdub3JlIGZsdXNoIGNvbXBsZXRpb25zICovCi0JCWlmIChyeGNwLT5udW1fcmN2ZCkgeworCQlpZiAocnhjcC0+bnVtX3JjdmQgJiYgcnhjcC0+cGt0X3NpemUpIHsKIAkJCWlmIChkb19ncm8ocnhjcCkpCiAJCQkJYmVfcnhfY29tcGxfcHJvY2Vzc19ncm8oYWRhcHRlciwgcnhvLCByeGNwKTsKIAkJCWVsc2UKIAkJCQliZV9yeF9jb21wbF9wcm9jZXNzKGFkYXB0ZXIsIHJ4bywgcnhjcCk7CisJCX0gZWxzZSBpZiAocnhjcC0+cGt0X3NpemUgPT0gMCkgeworCQkJYmVfcnhfY29tcGxfZGlzY2FyZChhZGFwdGVyLCByeG8sIHJ4Y3ApOwogCQl9CisKIAkJYmVfcnhfc3RhdHNfdXBkYXRlKHJ4bywgcnhjcCk7CiAJfQogCkBAIC0xNzU0LDEyICsxOTgyLDEyIEBACiAJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnR4X2NxID0gJmFkYXB0ZXItPnR4X29iai5jcTsKIAlzdHJ1Y3QgYmVfZXRoX3R4X2NvbXBsICp0eGNwOwogCWludCB0eF9jb21wbCA9IDAsIG1jY19jb21wbCwgc3RhdHVzID0gMDsKLQl1MTYgZW5kX2lkeDsKKwl1MTYgZW5kX2lkeCwgbnVtX3dyYnMgPSAwOwogCiAJd2hpbGUgKCh0eGNwID0gYmVfdHhfY29tcGxfZ2V0KHR4X2NxKSkpIHsKIAkJZW5kX2lkeCA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3R4X2NvbXBsLAogCQkJCXdyYl9pbmRleCwgdHhjcCk7Ci0JCWJlX3R4X2NvbXBsX3Byb2Nlc3MoYWRhcHRlciwgZW5kX2lkeCk7CisJCW51bV93cmJzICs9IGJlX3R4X2NvbXBsX3Byb2Nlc3MoYWRhcHRlciwgZW5kX2lkeCk7CiAJCXR4X2NvbXBsKys7CiAJfQogCkBAIC0xNzc1LDYgKzIwMDMsOCBAQAogCWlmICh0eF9jb21wbCkgewogCQliZV9jcV9ub3RpZnkoYWRhcHRlciwgYWRhcHRlci0+dHhfb2JqLmNxLmlkLCB0cnVlLCB0eF9jb21wbCk7CiAKKwkJYXRvbWljX3N1YihudW1fd3JicywgJnR4cS0+dXNlZCk7CisKIAkJLyogQXMgVHggd3JicyBoYXZlIGJlZW4gZnJlZWQgdXAsIHdha2UgdXAgbmV0ZGV2IHF1ZXVlIGlmCiAJCSAqIGl0IHdhcyBzdG9wcGVkIGR1ZSB0byBsYWNrIG9mIHR4IHdyYnMuCiAJCSAqLwpAQCAtMTgzNyw2ICsyMDY3LDkgQEAKIAlzdHJ1Y3QgYmVfcnhfb2JqICpyeG87CiAJaW50IGk7CiAKKwlpZiAoIWFkYXB0ZXItPnVlX2RldGVjdGVkICYmICFsYW5jZXJfY2hpcChhZGFwdGVyKSkKKwkJYmVfZGV0ZWN0X2R1bXBfdWUoYWRhcHRlcik7CisKIAkvKiB3aGVuIGludGVycnVwdHMgYXJlIG5vdCB5ZXQgZW5hYmxlZCwganVzdCByZWFwIGFueSBwZW5kaW5nCiAJKiBtY2MgY29tcGxldGlvbnMgKi8KIAlpZiAoIW5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkgewpAQCAtMTg0OSwxNSArMjA4MiwxNiBAQAogCQkJYmVfY3Ffbm90aWZ5KGFkYXB0ZXIsIG1jY19vYmotPmNxLmlkLCBmYWxzZSwgbWNjX2NvbXBsKTsKIAkJfQogCi0JCWlmICghYWRhcHRlci0+dWVfZGV0ZWN0ZWQgJiYgIWxhbmNlcl9jaGlwKGFkYXB0ZXIpKQotCQkJYmVfZGV0ZWN0X2R1bXBfdWUoYWRhcHRlcik7Ci0KIAkJZ290byByZXNjaGVkdWxlOwogCX0KIAotCWlmICghYWRhcHRlci0+c3RhdHNfY21kX3NlbnQpCi0JCWJlX2NtZF9nZXRfc3RhdHMoYWRhcHRlciwgJmFkYXB0ZXItPnN0YXRzX2NtZCk7Ci0KKwlpZiAoIWFkYXB0ZXItPnN0YXRzX2NtZF9zZW50KSB7CisJCWlmIChsYW5jZXJfY2hpcChhZGFwdGVyKSkKKwkJCWxhbmNlcl9jbWRfZ2V0X3Bwb3J0X3N0YXRzKGFkYXB0ZXIsCisJCQkJCQkmYWRhcHRlci0+c3RhdHNfY21kKTsKKwkJZWxzZQorCQkJYmVfY21kX2dldF9zdGF0cyhhZGFwdGVyLCAmYWRhcHRlci0+c3RhdHNfY21kKTsKKwl9CiAJYmVfdHhfcmF0ZV91cGRhdGUoYWRhcHRlcik7CiAKIAlmb3JfYWxsX3J4X3F1ZXVlcyhhZGFwdGVyLCByeG8sIGkpIHsKQEAgLTE4NjksNjAgKzIxMDMsNDMgQEAKIAkJCWJlX3Bvc3RfcnhfZnJhZ3MocnhvLCBHRlBfS0VSTkVMKTsKIAkJfQogCX0KLQlpZiAoIWFkYXB0ZXItPnVlX2RldGVjdGVkICYmICFsYW5jZXJfY2hpcChhZGFwdGVyKSkKLQkJYmVfZGV0ZWN0X2R1bXBfdWUoYWRhcHRlcik7CiAKIHJlc2NoZWR1bGU6CisJYWRhcHRlci0+d29ya19jb3VudGVyKys7CiAJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhZGFwdGVyLT53b3JrLCBtc2Vjc190b19qaWZmaWVzKDEwMDApKTsKIH0KIAogc3RhdGljIHZvaWQgYmVfbXNpeF9kaXNhYmxlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewotCWlmIChhZGFwdGVyLT5tc2l4X2VuYWJsZWQpIHsKKwlpZiAobXNpeF9lbmFibGVkKGFkYXB0ZXIpKSB7CiAJCXBjaV9kaXNhYmxlX21zaXgoYWRhcHRlci0+cGRldik7Ci0JCWFkYXB0ZXItPm1zaXhfZW5hYmxlZCA9IGZhbHNlOwotCX0KLX0KLQotc3RhdGljIGludCBiZV9udW1fcnhxc19nZXQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaWYgKG11bHRpX3J4cSAmJiAoYWRhcHRlci0+ZnVuY3Rpb25fY2FwcyAmIEJFX0ZVTkNUSU9OX0NBUFNfUlNTKSAmJgotCQkhYWRhcHRlci0+c3Jpb3ZfZW5hYmxlZCAmJiAhKGFkYXB0ZXItPmZ1bmN0aW9uX21vZGUgJiAweDQwMCkpIHsKLQkJcmV0dXJuIDEgKyBNQVhfUlNTX1FTOyAvKiBvbmUgZGVmYXVsdCBub24tUlNTIHF1ZXVlICovCi0JfSBlbHNlIHsKLQkJZGV2X3dhcm4oJmFkYXB0ZXItPnBkZXYtPmRldiwKLQkJCSJObyBzdXBwb3J0IGZvciBtdWx0aXBsZSBSWCBxdWV1ZXNcbiIpOwotCQlyZXR1cm4gMTsKKwkJYWRhcHRlci0+bnVtX21zaXhfdmVjID0gMDsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIGJlX21zaXhfZW5hYmxlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewogI2RlZmluZSBCRV9NSU5fTVNJWF9WRUNUT1JTCSgxICsgMSkgLyogUnggKyBUeCAqLwotCWludCBpLCBzdGF0dXM7CisJaW50IGksIHN0YXR1cywgbnVtX3ZlYzsKIAotCWFkYXB0ZXItPm51bV9yeF9xcyA9IGJlX251bV9yeHFzX2dldChhZGFwdGVyKTsKKwludW1fdmVjID0gYmVfbnVtX3J4cXNfd2FudChhZGFwdGVyKSArIDE7CiAKLQlmb3IgKGkgPSAwOyBpIDwgKGFkYXB0ZXItPm51bV9yeF9xcyArIDEpOyBpKyspCisJZm9yIChpID0gMDsgaSA8IG51bV92ZWM7IGkrKykKIAkJYWRhcHRlci0+bXNpeF9lbnRyaWVzW2ldLmVudHJ5ID0gaTsKIAotCXN0YXR1cyA9IHBjaV9lbmFibGVfbXNpeChhZGFwdGVyLT5wZGV2LCBhZGFwdGVyLT5tc2l4X2VudHJpZXMsCi0JCQlhZGFwdGVyLT5udW1fcnhfcXMgKyAxKTsKKwlzdGF0dXMgPSBwY2lfZW5hYmxlX21zaXgoYWRhcHRlci0+cGRldiwgYWRhcHRlci0+bXNpeF9lbnRyaWVzLCBudW1fdmVjKTsKIAlpZiAoc3RhdHVzID09IDApIHsKIAkJZ290byBkb25lOwogCX0gZWxzZSBpZiAoc3RhdHVzID49IEJFX01JTl9NU0lYX1ZFQ1RPUlMpIHsKKwkJbnVtX3ZlYyA9IHN0YXR1czsKIAkJaWYgKHBjaV9lbmFibGVfbXNpeChhZGFwdGVyLT5wZGV2LCBhZGFwdGVyLT5tc2l4X2VudHJpZXMsCi0JCQkJc3RhdHVzKSA9PSAwKSB7Ci0JCQlhZGFwdGVyLT5udW1fcnhfcXMgPSBzdGF0dXMgLSAxOwotCQkJZGV2X3dhcm4oJmFkYXB0ZXItPnBkZXYtPmRldiwKLQkJCQkiQ291bGQgYWxsb2Mgb25seSAlZCBNU0l4IHZlY3RvcnMuICIKLQkJCQkiVXNpbmcgJWQgUlggUXNcbiIsIHN0YXR1cywgYWRhcHRlci0+bnVtX3J4X3FzKTsKKwkJCQludW1fdmVjKSA9PSAwKQogCQkJZ290byBkb25lOwotCQl9CiAJfQogCXJldHVybjsKIGRvbmU6Ci0JYWRhcHRlci0+bXNpeF9lbmFibGVkID0gdHJ1ZTsKKwlhZGFwdGVyLT5udW1fbXNpeF92ZWMgPSBudW1fdmVjOworCXJldHVybjsKIH0KIAogc3RhdGljIHZvaWQgYmVfc3Jpb3ZfZW5hYmxlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQpAQCAtMTkzMCw3ICsyMTQ3LDIwIEBACiAJYmVfY2hlY2tfc3Jpb3ZfZm5fdHlwZShhZGFwdGVyKTsKICNpZmRlZiBDT05GSUdfUENJX0lPVgogCWlmIChiZV9waHlzZm4oYWRhcHRlcikgJiYgbnVtX3ZmcykgewotCQlpbnQgc3RhdHVzOworCQlpbnQgc3RhdHVzLCBwb3M7CisJCXUxNiBudmZzOworCisJCXBvcyA9IHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KGFkYXB0ZXItPnBkZXYsCisJCQkJCQlQQ0lfRVhUX0NBUF9JRF9TUklPVik7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGFkYXB0ZXItPnBkZXYsCisJCQkJCXBvcyArIFBDSV9TUklPVl9UT1RBTF9WRiwgJm52ZnMpOworCisJCWlmIChudW1fdmZzID4gbnZmcykgeworCQkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkJIkRldmljZSBzdXBwb3J0cyAlZCBWRnMgYW5kIG5vdCAlZFxuIiwKKwkJCQkJbnZmcywgbnVtX3Zmcyk7CisJCQludW1fdmZzID0gbnZmczsKKwkJfQogCiAJCXN0YXR1cyA9IHBjaV9lbmFibGVfc3Jpb3YoYWRhcHRlci0+cGRldiwgbnVtX3Zmcyk7CiAJCWFkYXB0ZXItPnNyaW92X2VuYWJsZWQgPSBzdGF0dXMgPyBmYWxzZSA6IHRydWU7CkBAIC0yMDAzLDggKzIyMzMsNyBAQAogZXJyOgogCWRldl93YXJuKCZhZGFwdGVyLT5wZGV2LT5kZXYsCiAJCSJNU0lYIFJlcXVlc3QgSVJRIGZhaWxlZCAtIGVyciAlZFxuIiwgc3RhdHVzKTsKLQlwY2lfZGlzYWJsZV9tc2l4KGFkYXB0ZXItPnBkZXYpOwotCWFkYXB0ZXItPm1zaXhfZW5hYmxlZCA9IGZhbHNlOworCWJlX21zaXhfZGlzYWJsZShhZGFwdGVyKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0yMDEzLDcgKzIyNDIsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJaW50IHN0YXR1czsKIAotCWlmIChhZGFwdGVyLT5tc2l4X2VuYWJsZWQpIHsKKwlpZiAobXNpeF9lbmFibGVkKGFkYXB0ZXIpKSB7CiAJCXN0YXR1cyA9IGJlX21zaXhfcmVnaXN0ZXIoYWRhcHRlcik7CiAJCWlmIChzdGF0dXMgPT0gMCkKIAkJCWdvdG8gZG9uZTsKQEAgLTIwNDYsNyArMjI3NSw3IEBACiAJCXJldHVybjsKIAogCS8qIElOVHggKi8KLQlpZiAoIWFkYXB0ZXItPm1zaXhfZW5hYmxlZCkgeworCWlmICghbXNpeF9lbmFibGVkKGFkYXB0ZXIpKSB7CiAJCWZyZWVfaXJxKG5ldGRldi0+aXJxLCBhZGFwdGVyKTsKIAkJZ290byBkb25lOwogCX0KQEAgLTIwODgsNyArMjMxNyw3IEBACiAJCQkgYmVfY3Ffbm90aWZ5KGFkYXB0ZXIsIHJ4by0+Y3EuaWQsIGZhbHNlLCAwKTsKIAl9CiAKLQlpZiAoYWRhcHRlci0+bXNpeF9lbmFibGVkKSB7CisJaWYgKG1zaXhfZW5hYmxlZChhZGFwdGVyKSkgewogCQl2ZWMgPSBiZV9tc2l4X3ZlY19nZXQoYWRhcHRlciwgdHhfZXEpOwogCQlzeW5jaHJvbml6ZV9pcnEodmVjKTsKIApAQCAtMjE0MSw3ICsyMzcwLDcgQEAKIAliZV9hc3luY19tY2NfZW5hYmxlKGFkYXB0ZXIpOwogCiAJc3RhdHVzID0gYmVfY21kX2xpbmtfc3RhdHVzX3F1ZXJ5KGFkYXB0ZXIsICZsaW5rX3VwLCAmbWFjX3NwZWVkLAotCQkJJmxpbmtfc3BlZWQpOworCQkJJmxpbmtfc3BlZWQsIDApOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gZXJyOwogCWJlX2xpbmtfc3RhdHVzX3VwZGF0ZShhZGFwdGVyLCBsaW5rX3VwKTsKQEAgLTIyNjEsNyArMjQ5MCw3IEBACiAJCQkJQkVfSUZfRkxBR1NfUEFTU19MM0w0X0VSUk9SUzsKIAkJZW5fZmxhZ3MgfD0gQkVfSUZfRkxBR1NfUEFTU19MM0w0X0VSUk9SUzsKIAotCQlpZiAoYmVfbXVsdGlfcnhxKGFkYXB0ZXIpKSB7CisJCWlmIChhZGFwdGVyLT5mdW5jdGlvbl9jYXBzICYgQkVfRlVOQ1RJT05fQ0FQU19SU1MpIHsKIAkJCWNhcF9mbGFncyB8PSBCRV9JRl9GTEFHU19SU1M7CiAJCQllbl9mbGFncyB8PSBCRV9JRl9GTEFHU19SU1M7CiAJCX0KQEAgLTIzMTgsNyArMjU0Nyw2IEBACiAKIAlyZXR1cm4gMDsKIAotCWJlX21jY19xdWV1ZXNfZGVzdHJveShhZGFwdGVyKTsKIHJ4X3FzX2Rlc3Ryb3k6CiAJYmVfcnhfcXVldWVzX2Rlc3Ryb3koYWRhcHRlcik7CiB0eF9xc19kZXN0cm95OgpAQCAtMjQ4Niw3ICsyNzE0LDYgQEAKIAkJCQkJImNtZCB0byB3cml0ZSB0byBmbGFzaCByb20gZmFpbGVkLlxuIik7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQotCQkJeWllbGQoKTsKIAkJfQogCX0KIAlyZXR1cm4gMDsKQEAgLTI1MDQsMzIgKzI3MzEsOTYgQEAKIAkJcmV0dXJuIDA7CiB9CiAKLWludCBiZV9sb2FkX2Z3KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCAqZnVuYykKK3N0YXRpYyBpbnQgbGFuY2VyX2Z3X2Rvd25sb2FkKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAorCQkJCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCiB7Ci0JY2hhciBmd19maWxlW0VUSFRPT0xfRkxBU0hfTUFYX0ZJTEVOQU1FXTsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworI2RlZmluZSBMQU5DRVJfRldfRE9XTkxPQURfQ0hVTksgICAgICAoMzIgKiAxMDI0KQorI2RlZmluZSBMQU5DRVJfRldfRE9XTkxPQURfTE9DQVRJT04gICAiL3ByZyIKKwlzdHJ1Y3QgYmVfZG1hX21lbSBmbGFzaF9jbWQ7CisJY29uc3QgdTggKmRhdGFfcHRyID0gTlVMTDsKKwl1OCAqZGVzdF9pbWFnZV9wdHIgPSBOVUxMOworCXNpemVfdCBpbWFnZV9zaXplID0gMDsKKwl1MzIgY2h1bmtfc2l6ZSA9IDA7CisJdTMyIGRhdGFfd3JpdHRlbiA9IDA7CisJdTMyIG9mZnNldCA9IDA7CisJaW50IHN0YXR1cyA9IDA7CisJdTggYWRkX3N0YXR1cyA9IDA7CisKKwlpZiAoIUlTX0FMSUdORUQoZnctPnNpemUsIHNpemVvZih1MzIpKSkgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkiRlcgSW1hZ2Ugbm90IHByb3Blcmx5IGFsaWduZWQuICIKKwkJCSJMZW5ndGggbXVzdCBiZSA0IGJ5dGUgYWxpZ25lZC5cbiIpOworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGxhbmNlcl9md19leGl0OworCX0KKworCWZsYXNoX2NtZC5zaXplID0gc2l6ZW9mKHN0cnVjdCBsYW5jZXJfY21kX3JlcV93cml0ZV9vYmplY3QpCisJCQkJKyBMQU5DRVJfRldfRE9XTkxPQURfQ0hVTks7CisJZmxhc2hfY21kLnZhID0gZG1hX2FsbG9jX2NvaGVyZW50KCZhZGFwdGVyLT5wZGV2LT5kZXYsIGZsYXNoX2NtZC5zaXplLAorCQkJCQkJJmZsYXNoX2NtZC5kbWEsIEdGUF9LRVJORUwpOworCWlmICghZmxhc2hfY21kLnZhKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIHdoaWxlIGZsYXNoaW5nXG4iKTsKKwkJZ290byBsYW5jZXJfZndfZXhpdDsKKwl9CisKKwlkZXN0X2ltYWdlX3B0ciA9IGZsYXNoX2NtZC52YSArCisJCQkJc2l6ZW9mKHN0cnVjdCBsYW5jZXJfY21kX3JlcV93cml0ZV9vYmplY3QpOworCWltYWdlX3NpemUgPSBmdy0+c2l6ZTsKKwlkYXRhX3B0ciA9IGZ3LT5kYXRhOworCisJd2hpbGUgKGltYWdlX3NpemUpIHsKKwkJY2h1bmtfc2l6ZSA9IG1pbl90KHUzMiwgaW1hZ2Vfc2l6ZSwgTEFOQ0VSX0ZXX0RPV05MT0FEX0NIVU5LKTsKKworCQkvKiBDb3B5IHRoZSBpbWFnZSBjaHVuayBjb250ZW50LiAqLworCQltZW1jcHkoZGVzdF9pbWFnZV9wdHIsIGRhdGFfcHRyLCBjaHVua19zaXplKTsKKworCQlzdGF0dXMgPSBsYW5jZXJfY21kX3dyaXRlX29iamVjdChhZGFwdGVyLCAmZmxhc2hfY21kLAorCQkJCWNodW5rX3NpemUsIG9mZnNldCwgTEFOQ0VSX0ZXX0RPV05MT0FEX0xPQ0FUSU9OLAorCQkJCSZkYXRhX3dyaXR0ZW4sICZhZGRfc3RhdHVzKTsKKworCQlpZiAoc3RhdHVzKQorCQkJYnJlYWs7CisKKwkJb2Zmc2V0ICs9IGRhdGFfd3JpdHRlbjsKKwkJZGF0YV9wdHIgKz0gZGF0YV93cml0dGVuOworCQlpbWFnZV9zaXplIC09IGRhdGFfd3JpdHRlbjsKKwl9CisKKwlpZiAoIXN0YXR1cykgeworCQkvKiBDb21taXQgdGhlIEZXIHdyaXR0ZW4gKi8KKwkJc3RhdHVzID0gbGFuY2VyX2NtZF93cml0ZV9vYmplY3QoYWRhcHRlciwgJmZsYXNoX2NtZCwKKwkJCQkJMCwgb2Zmc2V0LCBMQU5DRVJfRldfRE9XTkxPQURfTE9DQVRJT04sCisJCQkJCSZkYXRhX3dyaXR0ZW4sICZhZGRfc3RhdHVzKTsKKwl9CisKKwlkbWFfZnJlZV9jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LCBmbGFzaF9jbWQuc2l6ZSwgZmxhc2hfY21kLnZhLAorCQkJCWZsYXNoX2NtZC5kbWEpOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIkZpcm13YXJlIGxvYWQgZXJyb3IuICIKKwkJCSJTdGF0dXMgY29kZTogMHgleCBBZGRpdGlvbmFsIFN0YXR1czogMHgleFxuIiwKKwkJCXN0YXR1cywgYWRkX3N0YXR1cyk7CisJCWdvdG8gbGFuY2VyX2Z3X2V4aXQ7CisJfQorCisJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIkZpcm13YXJlIGZsYXNoZWQgc3VjY2Vzc2Z1bGx5XG4iKTsKK2xhbmNlcl9md19leGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgYmVfZndfZG93bmxvYWQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSogZncpCit7CiAJc3RydWN0IGZsYXNoX2ZpbGVfaGRyX2cyICpmaGRyOwogCXN0cnVjdCBmbGFzaF9maWxlX2hkcl9nMyAqZmhkcjM7CiAJc3RydWN0IGltYWdlX2hkciAqaW1nX2hkcl9wdHIgPSBOVUxMOwogCXN0cnVjdCBiZV9kbWFfbWVtIGZsYXNoX2NtZDsKLQlpbnQgc3RhdHVzLCBpID0gMCwgbnVtX2ltZ3MgPSAwOwogCWNvbnN0IHU4ICpwOwotCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpIHsKLQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAotCQkJIkZpcm13YXJlIGxvYWQgbm90IGFsbG93ZWQgKGludGVyZmFjZSBpcyBkb3duKVxuIik7Ci0JCXJldHVybiAtRVBFUk07Ci0JfQotCi0Jc3RyY3B5KGZ3X2ZpbGUsIGZ1bmMpOwotCi0Jc3RhdHVzID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZ3X2ZpbGUsICZhZGFwdGVyLT5wZGV2LT5kZXYpOwotCWlmIChzdGF0dXMpCi0JCWdvdG8gZndfZXhpdDsKKwlpbnQgc3RhdHVzID0gMCwgaSA9IDAsIG51bV9pbWdzID0gMDsKIAogCXAgPSBmdy0+ZGF0YTsKIAlmaGRyID0gKHN0cnVjdCBmbGFzaF9maWxlX2hkcl9nMiAqKSBwOwotCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJGbGFzaGluZyBmaXJtd2FyZSBmaWxlICVzXG4iLCBmd19maWxlKTsKIAogCWZsYXNoX2NtZC5zaXplID0gc2l6ZW9mKHN0cnVjdCBiZV9jbWRfd3JpdGVfZmxhc2hyb20pICsgMzIqMTAyNDsKIAlmbGFzaF9jbWQudmEgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmFkYXB0ZXItPnBkZXYtPmRldiwgZmxhc2hfY21kLnNpemUsCkBAIC0yNTM4LDcgKzI4MjksNyBAQAogCQlzdGF0dXMgPSAtRU5PTUVNOwogCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCiAJCQkiTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSB3aGlsZSBmbGFzaGluZ1xuIik7Ci0JCWdvdG8gZndfZXhpdDsKKwkJZ290byBiZV9md19leGl0OwogCX0KIAogCWlmICgoYWRhcHRlci0+Z2VuZXJhdGlvbiA9PSBCRV9HRU4zKSAmJgpAQCAtMjU2NiwxMSArMjg1NywzNyBAQAogCQkJICBmbGFzaF9jbWQuZG1hKTsKIAlpZiAoc3RhdHVzKSB7CiAJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIkZpcm13YXJlIGxvYWQgZXJyb3JcbiIpOwotCQlnb3RvIGZ3X2V4aXQ7CisJCWdvdG8gYmVfZndfZXhpdDsKIAl9CiAKIAlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAiRmlybXdhcmUgZmxhc2hlZCBzdWNjZXNzZnVsbHlcbiIpOwogCitiZV9md19leGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBiZV9sb2FkX2Z3KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCAqZndfZmlsZSkKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWludCBzdGF0dXM7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkiRmlybXdhcmUgbG9hZCBub3QgYWxsb3dlZCAoaW50ZXJmYWNlIGlzIGRvd24pXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXN0YXR1cyA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmd19maWxlLCAmYWRhcHRlci0+cGRldi0+ZGV2KTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ3X2V4aXQ7CisKKwlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAiRmxhc2hpbmcgZmlybXdhcmUgZmlsZSAlc1xuIiwgZndfZmlsZSk7CisKKwlpZiAobGFuY2VyX2NoaXAoYWRhcHRlcikpCisJCXN0YXR1cyA9IGxhbmNlcl9md19kb3dubG9hZChhZGFwdGVyLCBmdyk7CisJZWxzZQorCQlzdGF0dXMgPSBiZV9md19kb3dubG9hZChhZGFwdGVyLCBmdyk7CisKIGZ3X2V4aXQ6CiAJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTI1OTksMTAgKzI5MTYsMTQgQEAKIAlzdHJ1Y3QgYmVfcnhfb2JqICpyeG87CiAJaW50IGk7CiAKLQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0hXX1ZMQU5fUlggfCBORVRJRl9GX1RTTyB8Ci0JCU5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9GSUxURVIgfAotCQlORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSB8Ci0JCU5FVElGX0ZfR1JPIHwgTkVUSUZfRl9UU082OworCW5ldGRldi0+aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082IHwKKwkJTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU0gfCBORVRJRl9GX1JYQ1NVTSB8CisJCU5FVElGX0ZfSFdfVkxBTl9UWDsKKwlpZiAoYmVfbXVsdGlfcnhxKGFkYXB0ZXIpKQorCQluZXRkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfUlhIQVNIOworCisJbmV0ZGV2LT5mZWF0dXJlcyB8PSBuZXRkZXYtPmh3X2ZlYXR1cmVzIHwKKwkJTkVUSUZfRl9IV19WTEFOX1JYIHwgTkVUSUZfRl9IV19WTEFOX0ZJTFRFUjsKIAogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9UU08gfAogCQlORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTTsKQEAgLTI2MTIsOCArMjkzMyw2IEBACiAKIAluZXRkZXYtPmZsYWdzIHw9IElGRl9NVUxUSUNBU1Q7CiAKLQlhZGFwdGVyLT5yeF9jc3VtID0gdHJ1ZTsKLQogCS8qIERlZmF1bHQgc2V0dGluZ3MgZm9yIFJ4IGFuZCBUeCBmbG93IGNvbnRyb2wgKi8KIAlhZGFwdGVyLT5yeF9mYyA9IHRydWU7CiAJYWRhcHRlci0+dHhfZmMgPSB0cnVlOwpAQCAtMjc4MSw3ICszMTAwLDE0IEBACiB7CiAJc3RydWN0IGJlX2RtYV9tZW0gKmNtZCA9ICZhZGFwdGVyLT5zdGF0c19jbWQ7CiAKLQljbWQtPnNpemUgPSBzaXplb2Yoc3RydWN0IGJlX2NtZF9yZXFfZ2V0X3N0YXRzKTsKKwlpZiAoYWRhcHRlci0+Z2VuZXJhdGlvbiA9PSBCRV9HRU4yKSB7CisJCWNtZC0+c2l6ZSA9IHNpemVvZihzdHJ1Y3QgYmVfY21kX3JlcV9nZXRfc3RhdHNfdjApOworCX0gZWxzZSB7CisJCWlmIChsYW5jZXJfY2hpcChhZGFwdGVyKSkKKwkJCWNtZC0+c2l6ZSA9IHNpemVvZihzdHJ1Y3QgbGFuY2VyX2NtZF9yZXFfcHBvcnRfc3RhdHMpOworCQllbHNlCisJCQljbWQtPnNpemUgPSBzaXplb2Yoc3RydWN0IGJlX2NtZF9yZXFfZ2V0X3N0YXRzX3YxKTsKKwl9CiAJY21kLT52YSA9IGRtYV9hbGxvY19jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LCBjbWQtPnNpemUsICZjbWQtPmRtYSwKIAkJCQkgICAgIEdGUF9LRVJORUwpOwogCWlmIChjbWQtPnZhID09IE5VTEwpCkBAIC0yODA3LDYgKzMxMzMsNyBAQAogCiAJYmVfY3RybF9jbGVhbnVwKGFkYXB0ZXIpOwogCisJa2ZyZWUoYWRhcHRlci0+dmZfY2ZnKTsKIAliZV9zcmlvdl9kaXNhYmxlKGFkYXB0ZXIpOwogCiAJYmVfbXNpeF9kaXNhYmxlKGFkYXB0ZXIpOwpAQCAtMjgzNCw3ICszMTYxLDggQEAKIAogCW1lbXNldChtYWMsIDAsIEVUSF9BTEVOKTsKIAotCWlmIChiZV9waHlzZm4oYWRhcHRlcikpIHsKKwkvKiBBIGRlZmF1bHQgcGVybWFuZW50IGFkZHJlc3MgaXMgZ2l2ZW4gdG8gZWFjaCBWRiBmb3IgTGFuY2VyKi8KKwlpZiAoYmVfcGh5c2ZuKGFkYXB0ZXIpIHx8IGxhbmNlcl9jaGlwKGFkYXB0ZXIpKSB7CiAJCXN0YXR1cyA9IGJlX2NtZF9tYWNfYWRkcl9xdWVyeShhZGFwdGVyLCBtYWMsCiAJCQlNQUNfQUREUkVTU19UWVBFX05FVFdPUkssIHRydWUgLypwZXJtYW5lbnQgKi8sIDApOwogCkBAIC0yODc2LDYgKzMyMDQsNyBAQAogCQlhZGFwdGVyLT5nZW5lcmF0aW9uID0gQkVfR0VOMzsKIAkJYnJlYWs7CiAJY2FzZSBPQ19ERVZJQ0VfSUQzOgorCWNhc2UgT0NfREVWSUNFX0lENDoKIAkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIFNMSV9JTlRGX1JFR19PRkZTRVQsICZzbGlfaW50Zik7CiAJCWlmX3R5cGUgPSAoc2xpX2ludGYgJiBTTElfSU5URl9JRl9UWVBFX01BU0spID4+CiAJCQkJCQlTTElfSU5URl9JRl9UWVBFX1NISUZUOwpAQCAtMjg4NSwxMCArMzIxNCw2IEBACiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJTTElfSU5URiByZWcgdmFsIGlzIG5vdCB2YWxpZFxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlpZiAobnVtX3ZmcyA+IDApIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgIlZGcyBub3Qgc3VwcG9ydGVkXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9CiAJCWFkYXB0ZXItPnNsaV9mYW1pbHkgPSAoKHNsaV9pbnRmICYgU0xJX0lOVEZfRkFNSUxZX01BU0spID4+CiAJCQkJCSBTTElfSU5URl9GQU1JTFlfU0hJRlQpOwogCQlhZGFwdGVyLT5nZW5lcmF0aW9uID0gQkVfR0VOMzsKQEAgLTI5OTEsMTYgKzMzMTYsMjMgQEAKIAl9CiAKIAliZV9zcmlvdl9lbmFibGUoYWRhcHRlcik7CisJaWYgKGFkYXB0ZXItPnNyaW92X2VuYWJsZWQpIHsKKwkJYWRhcHRlci0+dmZfY2ZnID0ga2NhbGxvYyhudW1fdmZzLAorCQkJc2l6ZW9mKHN0cnVjdCBiZV92Zl9jZmcpLCBHRlBfS0VSTkVMKTsKKworCQlpZiAoIWFkYXB0ZXItPnZmX2NmZykKKwkJCWdvdG8gZnJlZV9uZXRkZXY7CisJfQogCiAJc3RhdHVzID0gYmVfY3RybF9pbml0KGFkYXB0ZXIpOwogCWlmIChzdGF0dXMpCi0JCWdvdG8gZnJlZV9uZXRkZXY7CisJCWdvdG8gZnJlZV92Zl9jZmc7CiAKIAlpZiAobGFuY2VyX2NoaXAoYWRhcHRlcikpIHsKIAkJc3RhdHVzID0gbGFuY2VyX3Rlc3RfYW5kX3NldF9yZHlfc3RhdGUoYWRhcHRlcik7CiAJCWlmIChzdGF0dXMpIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkFkYXB0ZXIgaW4gbm9uIHJlY292ZXJhYmxlIGVycm9yXG4iKTsKLQkJCWdvdG8gZnJlZV9uZXRkZXY7CisJCQlnb3RvIGN0cmxfY2xlYW47CiAJCX0KIAl9CiAKQEAgLTMwNDMsOSArMzM3NSwyNCBAQAogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAKIAlpZiAoYmVfcGh5c2ZuKGFkYXB0ZXIpICYmIGFkYXB0ZXItPnNyaW92X2VuYWJsZWQpIHsKLQkJc3RhdHVzID0gYmVfdmZfZXRoX2FkZHJfY29uZmlnKGFkYXB0ZXIpOwotCQlpZiAoc3RhdHVzKQotCQkJZ290byB1bnJlZ19uZXRkZXY7CisJCXU4IG1hY19zcGVlZDsKKwkJYm9vbCBsaW5rX3VwOworCQl1MTYgdmYsIGxua19zcGVlZDsKKworCQlpZiAoIWxhbmNlcl9jaGlwKGFkYXB0ZXIpKSB7CisJCQlzdGF0dXMgPSBiZV92Zl9ldGhfYWRkcl9jb25maWcoYWRhcHRlcik7CisJCQlpZiAoc3RhdHVzKQorCQkJCWdvdG8gdW5yZWdfbmV0ZGV2OworCQl9CisKKwkJZm9yICh2ZiA9IDA7IHZmIDwgbnVtX3ZmczsgdmYrKykgeworCQkJc3RhdHVzID0gYmVfY21kX2xpbmtfc3RhdHVzX3F1ZXJ5KGFkYXB0ZXIsICZsaW5rX3VwLAorCQkJCQkmbWFjX3NwZWVkLCAmbG5rX3NwZWVkLCB2ZiArIDEpOworCQkJaWYgKCFzdGF0dXMpCisJCQkJYWRhcHRlci0+dmZfY2ZnW3ZmXS52Zl90eF9yYXRlID0gbG5rX3NwZWVkICogMTA7CisJCQllbHNlCisJCQkJZ290byB1bnJlZ19uZXRkZXY7CisJCX0KIAl9CiAKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXMgcG9ydCAlZFxuIiwgbmljX25hbWUocGRldiksIGFkYXB0ZXItPnBvcnRfbnVtKTsKQEAgLTMwNjIsNiArMzQwOSw4IEBACiAJYmVfc3RhdHNfY2xlYW51cChhZGFwdGVyKTsKIGN0cmxfY2xlYW46CiAJYmVfY3RybF9jbGVhbnVwKGFkYXB0ZXIpOworZnJlZV92Zl9jZmc6CisJa2ZyZWUoYWRhcHRlci0+dmZfY2ZnKTsKIGZyZWVfbmV0ZGV2OgogCWJlX3NyaW92X2Rpc2FibGUoYWRhcHRlcik7CiAJZnJlZV9uZXRkZXYobmV0ZGV2KTsKQEAgLTMxNDYsMTYgKzM0OTUsMTUgQEAKIAlpZiAoIWFkYXB0ZXIpCiAJCXJldHVybjsKIAotCWlmIChuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpCi0JCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYWRhcHRlci0+d29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhZGFwdGVyLT53b3JrKTsKIAogCW5ldGlmX2RldmljZV9kZXRhY2goYWRhcHRlci0+bmV0ZGV2KTsKIAotCWJlX2NtZF9yZXNldF9mdW5jdGlvbihhZGFwdGVyKTsKLQogCWlmIChhZGFwdGVyLT53b2wpCiAJCWJlX3NldHVwX3dvbChhZGFwdGVyLCB0cnVlKTsKIAorCWJlX2NtZF9yZXNldF9mdW5jdGlvbihhZGFwdGVyKTsKKwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIH0KIApAQCAtMzI2NywxMyArMzYxNSw2IEBACiAJCXJ4X2ZyYWdfc2l6ZSA9IDIwNDg7CiAJfQogCi0JaWYgKG51bV92ZnMgPiAzMikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCi0JCQkiIDogTW9kdWxlIHBhcmFtIG51bV92ZnMgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIDMyLiIKLQkJCSJVc2luZyAzMlxuIik7Ci0JCW51bV92ZnMgPSAzMjsKLQl9Ci0KIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYmVfZHJpdmVyKTsKIH0KIG1vZHVsZV9pbml0KGJlX2luaXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JuYS9iZmFfaW9jLmMgYi9kcml2ZXJzL25ldC9ibmEvYmZhX2lvYy5jCmluZGV4IDc1ODE1MTguLmZjYjliYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JuYS9iZmFfaW9jLmMKKysrIGIvZHJpdmVycy9uZXQvYm5hL2JmYV9pb2MuYwpAQCAtODIsNyArODIsNiBAQAogc3RhdGljIHZvaWQgYmZhX2lvY19ib290KHN0cnVjdCBiZmFfaW9jICppb2MsIHUzMiBib290X3R5cGUsCiAJCQkgdTMyIGJvb3RfcGFyYW0pOwogc3RhdGljIHUzMiBiZmFfaW9jX3NtZW1fcGdudW0oc3RydWN0IGJmYV9pb2MgKmlvYywgdTMyIGZtYWRkcik7Ci1zdGF0aWMgdTMyIGJmYV9pb2Nfc21lbV9wZ29mZihzdHJ1Y3QgYmZhX2lvYyAqaW9jLCB1MzIgZm1hZGRyKTsKIHN0YXRpYyB2b2lkIGJmYV9pb2NfZ2V0X2FkYXB0ZXJfc2VyaWFsX251bShzdHJ1Y3QgYmZhX2lvYyAqaW9jLAogCQkJCQkJY2hhciAqc2VyaWFsX251bSk7CiBzdGF0aWMgdm9pZCBiZmFfaW9jX2dldF9hZGFwdGVyX2Z3X3ZlcihzdHJ1Y3QgYmZhX2lvYyAqaW9jLApAQCAtMTI3NCwxMyArMTI3MywxMiBAQAogdm9pZAogYmZhX253X2lvY19md3Zlcl9nZXQoc3RydWN0IGJmYV9pb2MgKmlvYywgc3RydWN0IGJmaV9pb2NfaW1hZ2VfaGRyICpmd2hkcikKIHsKLQl1MzIJcGdudW0sIHBnb2ZmOworCXUzMglwZ251bTsKIAl1MzIJbG9mZiA9IDA7CiAJaW50CQlpOwogCXUzMgkqZndzaWcgPSAodTMyICopIGZ3aGRyOwogCiAJcGdudW0gPSBiZmFfaW9jX3NtZW1fcGdudW0oaW9jLCBsb2ZmKTsKLQlwZ29mZiA9IGJmYV9pb2Nfc21lbV9wZ29mZihpb2MsIGxvZmYpOwogCXdyaXRlbChwZ251bSwgaW9jLT5pb2NfcmVncy5ob3N0X3BhZ2VfbnVtX2ZuKTsKIAogCWZvciAoaSA9IDA7IGkgPCAoc2l6ZW9mKHN0cnVjdCBiZmlfaW9jX2ltYWdlX2hkcikgLyBzaXplb2YodTMyKSk7CkBAIC0xNTE0LDcgKzE1MTIsNyBAQAogCQkgICAgdTMyIGJvb3RfZW52KQogewogCXUzMiAqZndpbWc7Ci0JdTMyIHBnbnVtLCBwZ29mZjsKKwl1MzIgcGdudW07CiAJdTMyIGxvZmYgPSAwOwogCXUzMiBjaHVua25vID0gMDsKIAl1MzIgaTsKQEAgLTE1MjcsNyArMTUyNSw2IEBACiAJZndpbWcgPSBiZmFfY2JfaW1hZ2VfZ2V0X2NodW5rKEJGQV9JT0NfRldJTUdfVFlQRShpb2MpLCBjaHVua25vKTsKIAogCXBnbnVtID0gYmZhX2lvY19zbWVtX3BnbnVtKGlvYywgbG9mZik7Ci0JcGdvZmYgPSBiZmFfaW9jX3NtZW1fcGdvZmYoaW9jLCBsb2ZmKTsKIAogCXdyaXRlbChwZ251bSwgaW9jLT5pb2NfcmVncy5ob3N0X3BhZ2VfbnVtX2ZuKTsKIApAQCAtMTkyNSwxMiArMTkyMiw2IEBACiAJcmV0dXJuIFBTU19TTUVNX1BHTlVNKGlvYy0+aW9jX3JlZ3Muc21lbV9wZzAsIGZtYWRkcik7CiB9CiAKLXN0YXRpYyB1MzIKLWJmYV9pb2Nfc21lbV9wZ29mZihzdHJ1Y3QgYmZhX2lvYyAqaW9jLCB1MzIgZm1hZGRyKQotewotCXJldHVybiBQU1NfU01FTV9QR09GRihmbWFkZHIpOwotfQotCiAvKioKICAqIFJlZ2lzdGVyIG1haWxib3ggbWVzc2FnZSBoYW5kbGVyIGZ1bmN0aW9uLCB0byBiZSBjYWxsZWQgYnkgY29tbW9uIG1vZHVsZXMKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm5hL2JuYV9jdHJsLmMgYi9kcml2ZXJzL25ldC9ibmEvYm5hX2N0cmwuYwppbmRleCBlMTUyNzQ3Li41M2IxNDE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibmEvYm5hX2N0cmwuYworKysgYi9kcml2ZXJzL25ldC9ibmEvYm5hX2N0cmwuYwpAQCAtMjQ2LDcgKzI0Niw2IEBACiBibmFfbWJveF9mbHVzaF9xKHN0cnVjdCBibmEgKmJuYSwgc3RydWN0IGxpc3RfaGVhZCAqcSkKIHsKIAlzdHJ1Y3QgYm5hX21ib3hfcWUgKm1iX3FlID0gTlVMTDsKLQlzdHJ1Y3QgYmZpX21oZHIgKmNtZF9oOwogCXN0cnVjdCBsaXN0X2hlYWQJCQkqbWJfcTsKIAl2b2lkIAkJCSgqY2Jmbikodm9pZCAqYXJnLCBpbnQgc3RhdHVzKTsKIAl2b2lkIAkJCSpjYmFyZzsKQEAgLTI2MCw3ICsyNTksNiBAQAogCQliZmFfcV9xZV9pbml0KG1iX3FlKTsKIAkJYm5hLT5tYm94X21vZC5tc2dfcGVuZGluZy0tOwogCi0JCWNtZF9oID0gKHN0cnVjdCBiZmlfbWhkciAqKSgmbWJfcWUtPmNtZC5tc2dbMF0pOwogCQlpZiAoY2JmbikKIAkJCWNiZm4oY2JhcmcsIEJOQV9DQl9OT1RfRVhFQyk7CiAJfQpAQCAtMjc3NCwyMyArMjc3Miw2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZAotYm5hX3JpdF9tb2RfdW5pbml0KHN0cnVjdCBibmFfcml0X21vZCAqcml0X21vZCkKLXsKLQlzdHJ1Y3QgYm5hX3JpdF9zZWdtZW50ICpyaXRfc2VnbWVudDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpxZTsKLQlpbnQgaTsKLQlpbnQgajsKLQotCWZvciAoaSA9IDA7IGkgPCBCRklfUklUX1NFR19UT1RBTF9QT09MUzsgaSsrKSB7Ci0JCWogPSAwOwotCQlsaXN0X2Zvcl9lYWNoKHFlLCAmcml0X21vZC0+cml0X3NlZ19wb29sW2ldKSB7Ci0JCQlyaXRfc2VnbWVudCA9IChzdHJ1Y3QgYm5hX3JpdF9zZWdtZW50ICopcWU7Ci0JCQlqKys7Ci0JCX0KLQl9Ci19Ci0KIC8qCiAgKiBQdWJsaWMgZnVuY3Rpb25zCiAgKi8KQEAgLTI5NzcsOCArMjk1OCw2IEBACiAKIAlibmFfdWNhbV9tb2RfdW5pbml0KCZibmEtPnVjYW1fbW9kKTsKIAotCWJuYV9yaXRfbW9kX3VuaW5pdCgmYm5hLT5yaXRfbW9kKTsKLQogCWJuYV9pYl9tb2RfdW5pbml0KCZibmEtPmliX21vZCk7CiAKIAlibmFfcnhfbW9kX3VuaW5pdCgmYm5hLT5yeF9tb2QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm5hL2JuYV90eHJ4LmMgYi9kcml2ZXJzL25ldC9ibmEvYm5hX3R4cnguYwppbmRleCA1OGM3NjY0Li4zODAwODVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibmEvYm5hX3R4cnguYworKysgYi9kcml2ZXJzL25ldC9ibmEvYm5hX3R4cnguYwpAQCAtMjIyOSwxNCArMjIyOSwxMSBAQAogYm5hX3JpdF9jcmVhdGUoc3RydWN0IGJuYV9yeCAqcngpCiB7CiAJc3RydWN0IGxpc3RfaGVhZAkqcWVfcnhwOwotCXN0cnVjdCBibmEgKmJuYTsKIAlzdHJ1Y3QgYm5hX3J4cCAqcnhwOwogCXN0cnVjdCBibmFfcnhxICpxMCA9IE5VTEw7CiAJc3RydWN0IGJuYV9yeHEgKnExID0gTlVMTDsKIAlpbnQgb2Zmc2V0OwogCi0JYm5hID0gcngtPmJuYTsKLQogCW9mZnNldCA9IDA7CiAJbGlzdF9mb3JfZWFjaChxZV9yeHAsICZyeC0+cnhwX3EpIHsKIAkJcnhwID0gKHN0cnVjdCBibmFfcnhwICopcWVfcnhwOwpAQCAtMjgzMCw3ICsyODI3LDcgQEAKIAlzdHJ1Y3QgYm5hX21lbV9kZXNjciAqZHNxcHRfbWVtOwkvKiBzL3cgcXB0IGZvciBkYXRhICovCiAJc3RydWN0IGJuYV9tZW1fZGVzY3IgKmhwYWdlX21lbTsJLyogaGRyIHBhZ2UgbWVtICovCiAJc3RydWN0IGJuYV9tZW1fZGVzY3IgKmRwYWdlX21lbTsJLyogZGF0YSBwYWdlIG1lbSAqLwotCWludCBpLCBjcGFnZV9pZHggPSAwLCBkcGFnZV9pZHggPSAwLCBocGFnZV9pZHggPSAwLCByZXQ7CisJaW50IGksIGNwYWdlX2lkeCA9IDAsIGRwYWdlX2lkeCA9IDAsIGhwYWdlX2lkeCA9IDA7CiAJaW50IGRwYWdlX2NvdW50LCBocGFnZV9jb3VudCwgcmNiX2lkeDsKIAlzdHJ1Y3QgYm5hX2liX2NvbmZpZyBpYmNmZzsKIAkvKiBGYWlsIGlmIHdlIGRvbid0IGhhdmUgZW5vdWdoIFJYUHMsIFJYUXMgKi8KQEAgLTI5MjQsNyArMjkyMSw3IEBACiAJCWliY2ZnLmludGVycGt0X3RpbWVvID0gQkZJX1JYX0lOVEVSUEtUX1RJTUVPOwogCQlpYmNmZy5jdHJsX2ZsYWdzID0gQkZJX0lCX0NGX0lOVF9FTkFCTEU7CiAKLQkJcmV0ID0gYm5hX2liX2NvbmZpZyhyeHAtPmNxLmliLCAmaWJjZmcpOworCQlibmFfaWJfY29uZmlnKHJ4cC0+Y3EuaWIsICZpYmNmZyk7CiAKIAkJLyogTGluayByeHFzIHRvIHJ4cCAqLwogCQlfcnhwX2FkZF9yeHFzKHJ4cCwgcTAsIHExKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JuYS9ibmFkLmMgYi9kcml2ZXJzL25ldC9ibmEvYm5hZC5jCmluZGV4IDhlNmNlYWIuLjdkMjVhOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JuYS9ibmFkLmMKKysrIGIvZHJpdmVycy9uZXQvYm5hL2JuYWQuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgImJuYWQuaCIKICNpbmNsdWRlICJibmEuaCIKQEAgLTUwMSw3ICs1MDIsNyBAQAogCiAJCXNrYl9wdXQoc2tiLCBudG9ocyhjbXBsLT5sZW5ndGgpKTsKIAkJaWYgKGxpa2VseQotCQkgICAgKGJuYWQtPnJ4X2NzdW0gJiYKKwkJICAgICgoYm5hZC0+bmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSAmJgogCQkgICAgICgoKGZsYWdzICYgQk5BX0NRX0VGX0lQVjQpICYmCiAJCSAgICAgIChmbGFncyAmIEJOQV9DUV9FRl9MM19DS1NVTV9PSykpIHx8CiAJCSAgICAgIChmbGFncyAmIEJOQV9DUV9FRl9JUFY2KSkgJiYKQEAgLTI5MDIsMjMgKzI5MDMsMjAgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYm5hZC0+bmV0ZGV2OwogCi0JbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQVjZfQ1NVTTsKLQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwotCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OworCW5ldGRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9SWENTVU0gfAorCQlORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSB8CisJCU5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082IHwgTkVUSUZfRl9IV19WTEFOX1RYOwogCi0JbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0dSTzsKLQlwcl93YXJuKCJibmE6IEdSTyBlbmFibGVkLCB1c2luZyBrZXJuZWwgc3RhY2sgR1JPXG4iKTsKKwluZXRkZXYtPnZsYW5fZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9ISUdIRE1BIHwKKwkJTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU0gfAorCQlORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNjsKIAotCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTTsKKwluZXRkZXYtPmZlYXR1cmVzIHw9IG5ldGRldi0+aHdfZmVhdHVyZXMgfAorCQlORVRJRl9GX0hXX1ZMQU5fUlggfCBORVRJRl9GX0hXX1ZMQU5fRklMVEVSOwogCiAJaWYgKHVzaW5nX2RhYykKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAKLQluZXRkZXYtPmZlYXR1cmVzIHw9Ci0JCU5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWCB8Ci0JCU5FVElGX0ZfSFdfVkxBTl9GSUxURVI7Ci0KLQluZXRkZXYtPnZsYW5fZmVhdHVyZXMgPSBuZXRkZXYtPmZlYXR1cmVzOwogCW5ldGRldi0+bWVtX3N0YXJ0ID0gYm5hZC0+bW1pb19zdGFydDsKIAluZXRkZXYtPm1lbV9lbmQgPSBibmFkLT5tbWlvX3N0YXJ0ICsgYm5hZC0+bW1pb19sZW4gLSAxOwogCkBAIC0yOTY5LDcgKzI5NjcsNiBAQAogCiAJYm5hZC0+dHhxX2RlcHRoID0gQk5BRF9UWFFfREVQVEg7CiAJYm5hZC0+cnhxX2RlcHRoID0gQk5BRF9SWFFfREVQVEg7Ci0JYm5hZC0+cnhfY3N1bSA9IHRydWU7CiAKIAlibmFkLT50eF9jb2FsZXNjaW5nX3RpbWVvID0gQkZJX1RYX0NPQUxFU0NJTkdfVElNRU87CiAJYm5hZC0+cnhfY29hbGVzY2luZ190aW1lbyA9IEJGSV9SWF9DT0FMRVNDSU5HX1RJTUVPOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm5hL2JuYWQuaCBiL2RyaXZlcnMvbmV0L2JuYS9ibmFkLmgKaW5kZXggYTg5MTE3Zi4uY2NkYWJhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm5hL2JuYWQuaAorKysgYi9kcml2ZXJzL25ldC9ibmEvYm5hZC5oCkBAIC0yMzcsOCArMjM3LDYgQEAKIAlzdHJ1Y3QgYm5hX3J4X2NvbmZpZyByeF9jb25maWdbQk5BRF9NQVhfUlhTXTsKIAlzdHJ1Y3QgYm5hX3R4X2NvbmZpZyB0eF9jb25maWdbQk5BRF9NQVhfVFhTXTsKIAotCXUzMgkJcnhfY3N1bTsKLQogCXZvaWQgX19pb21lbQkJKmJhcjA7CS8qIEJBUjAgYWRkcmVzcyAqLwogCiAJc3RydWN0IGJuYSBibmE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibmEvYm5hZF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ibmEvYm5hZF9ldGh0b29sLmMKaW5kZXggMTQyZDYwNC4uMzMzMGNkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm5hL2JuYWRfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2JuYS9ibmFkX2V0aHRvb2wuYwpAQCAtMjM3LDEwICsyMzcsMTAgQEAKIAljbWQtPnBoeV9hZGRyZXNzID0gMDsKIAogCWlmIChuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKLQkJY21kLT5zcGVlZCA9IFNQRUVEXzEwMDAwOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBTUEVFRF8xMDAwMCk7CiAJCWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJfSBlbHNlIHsKLQkJY21kLT5zcGVlZCA9IC0xOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCAtMSk7CiAJCWNtZC0+ZHVwbGV4ID0gLTE7CiAJfQogCWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0VYVEVSTkFMOwpAQCAtMjU2LDcgKzI1Niw4IEBACiAJLyogMTBHIGZ1bGwgZHVwbGV4IHNldHRpbmcgc3VwcG9ydGVkIG9ubHkgKi8KIAlpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7IGVsc2UgewotCQlpZiAoKGNtZC0+c3BlZWQgPT0gU1BFRURfMTAwMDApICYmIChjbWQtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkpCisJCWlmICgoZXRodG9vbF9jbWRfc3BlZWQoY21kKSA9PSBTUEVFRF8xMDAwMCkKKwkJICAgICYmIChjbWQtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkpCiAJCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTgwNiw2MSArODA3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHUzMgotYm5hZF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXUzMiByeF9jc3VtOwotCXN0cnVjdCBibmFkICpibmFkID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCXJ4X2NzdW0gPSBibmFkLT5yeF9jc3VtOwotCXJldHVybiByeF9jc3VtOwotfQotCi1zdGF0aWMgaW50Ci1ibmFkX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiByeF9jc3VtKQotewotCXN0cnVjdCBibmFkICpibmFkID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCW11dGV4X2xvY2soJmJuYWQtPmNvbmZfbXV0ZXgpOwotCWJuYWQtPnJ4X2NzdW0gPSByeF9jc3VtOwotCW11dGV4X3VubG9jaygmYm5hZC0+Y29uZl9tdXRleCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWJuYWRfc2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIHR4X2NzdW0pCi17Ci0Jc3RydWN0IGJuYWQgKmJuYWQgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0JbXV0ZXhfbG9jaygmYm5hZC0+Y29uZl9tdXRleCk7Ci0JaWYgKHR4X2NzdW0pIHsKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU07Ci0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUFY2X0NTVU07Ci0JfSBlbHNlIHsKLQkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9JUF9DU1VNOwotCQluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0lQVjZfQ1NVTTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZibmFkLT5jb25mX211dGV4KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotYm5hZF9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiB0c28pCi17Ci0Jc3RydWN0IGJuYWQgKmJuYWQgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0JbXV0ZXhfbG9jaygmYm5hZC0+Y29uZl9tdXRleCk7Ci0JaWYgKHRzbykgewotCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwotCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKLQl9IGVsc2UgewotCQluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzsKLQkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9UU082OwotCX0KLQltdXRleF91bmxvY2soJmJuYWQtPmNvbmZfbXV0ZXgpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZAogYm5hZF9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqIHN0cmluZykKIHsKQEAgLTEyNTYsMTQgKzEyMDIsNiBAQAogCS5zZXRfcmluZ3BhcmFtID0gYm5hZF9zZXRfcmluZ3BhcmFtLAogCS5nZXRfcGF1c2VwYXJhbSA9IGJuYWRfZ2V0X3BhdXNlcGFyYW0sCiAJLnNldF9wYXVzZXBhcmFtID0gYm5hZF9zZXRfcGF1c2VwYXJhbSwKLQkuZ2V0X3J4X2NzdW0gPSBibmFkX2dldF9yeF9jc3VtLAotCS5zZXRfcnhfY3N1bSA9IGJuYWRfc2V0X3J4X2NzdW0sCi0JLmdldF90eF9jc3VtID0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKLQkuc2V0X3R4X2NzdW0gPSBibmFkX3NldF90eF9jc3VtLAotCS5nZXRfc2cgPSBldGh0b29sX29wX2dldF9zZywKLQkuc2V0X3NnID0gZXRodG9vbF9vcF9zZXRfc2csCi0JLmdldF90c28gPSBldGh0b29sX29wX2dldF90c28sCi0JLnNldF90c28gPSBibmFkX3NldF90c28sCiAJLmdldF9zdHJpbmdzID0gYm5hZF9nZXRfc3RyaW5ncywKIAkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBibmFkX2dldF9ldGh0b29sX3N0YXRzLAogCS5nZXRfc3NldF9jb3VudCA9IGJuYWRfZ2V0X3NzZXRfY291bnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDIuYyBiL2RyaXZlcnMvbmV0L2JueDIuYwppbmRleCA4ZTZkNjE4Li41N2QzMjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyLmMKKysrIGIvZHJpdmVycy9uZXQvYm54Mi5jCkBAIC0zMTc0LDcgKzMxNzQsNyBAQAogCQl9CiAKIAkJc2tiX2NoZWNrc3VtX25vbmVfYXNzZXJ0KHNrYik7Ci0JCWlmIChicC0+cnhfY3N1bSAmJgorCQlpZiAoKGJwLT5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pICYmCiAJCQkoc3RhdHVzICYgKEwyX0ZIRFJfU1RBVFVTX1RDUF9TRUdNRU5UIHwKIAkJCUwyX0ZIRFJfU1RBVFVTX1VEUF9EQVRBR1JBTSkpKSB7CiAKQEAgLTY2OTYsMTcgKzY2OTYsMTYgQEAKIAogCWlmIChicC0+YXV0b25lZyAmIEFVVE9ORUdfU1BFRUQpIHsKIAkJY21kLT5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7Ci0JfQotCWVsc2UgeworCX0gZWxzZSB7CiAJCWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKIAl9CiAKIAlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKSB7Ci0JCWNtZC0+c3BlZWQgPSBicC0+bGluZV9zcGVlZDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgYnAtPmxpbmVfc3BlZWQpOwogCQljbWQtPmR1cGxleCA9IGJwLT5kdXBsZXg7CiAJfQogCWVsc2UgewotCQljbWQtPnNwZWVkID0gLTE7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIC0xKTsKIAkJY21kLT5kdXBsZXggPSAtMTsKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJmJwLT5waHlfbG9jayk7CkBAIC02NzU4LDIxICs2NzU3LDIxIEBACiAJCWFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfQXV0b25lZzsKIAl9CiAJZWxzZSB7CisJCXUzMiBzcGVlZCA9IGV0aHRvb2xfY21kX3NwZWVkKGNtZCk7CiAJCWlmIChjbWQtPnBvcnQgPT0gUE9SVF9GSUJSRSkgewotCQkJaWYgKChjbWQtPnNwZWVkICE9IFNQRUVEXzEwMDAgJiYKLQkJCSAgICAgY21kLT5zcGVlZCAhPSBTUEVFRF8yNTAwKSB8fAorCQkJaWYgKChzcGVlZCAhPSBTUEVFRF8xMDAwICYmCisJCQkgICAgIHNwZWVkICE9IFNQRUVEXzI1MDApIHx8CiAJCQkgICAgKGNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKSkKIAkJCQlnb3RvIGVycl9vdXRfdW5sb2NrOwogCi0JCQlpZiAoY21kLT5zcGVlZCA9PSBTUEVFRF8yNTAwICYmCisJCQlpZiAoc3BlZWQgPT0gU1BFRURfMjUwMCAmJgogCQkJICAgICEoYnAtPnBoeV9mbGFncyAmIEJOWDJfUEhZX0ZMQUdfMl81R19DQVBBQkxFKSkKIAkJCQlnb3RvIGVycl9vdXRfdW5sb2NrOwotCQl9Ci0JCWVsc2UgaWYgKGNtZC0+c3BlZWQgPT0gU1BFRURfMTAwMCB8fCBjbWQtPnNwZWVkID09IFNQRUVEXzI1MDApCisJCX0gZWxzZSBpZiAoc3BlZWQgPT0gU1BFRURfMTAwMCB8fCBzcGVlZCA9PSBTUEVFRF8yNTAwKQogCQkJZ290byBlcnJfb3V0X3VubG9jazsKIAogCQlhdXRvbmVnICY9IH5BVVRPTkVHX1NQRUVEOwotCQlyZXFfbGluZV9zcGVlZCA9IGNtZC0+c3BlZWQ7CisJCXJlcV9saW5lX3NwZWVkID0gc3BlZWQ7CiAJCXJlcV9kdXBsZXggPSBjbWQtPmR1cGxleDsKIAkJYWR2ZXJ0aXNpbmcgPSAwOwogCX0KQEAgLTcxODksMzggKzcxODgsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTMyCi1ibngyX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGJueDIgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybiBicC0+cnhfY3N1bTsKLX0KLQotc3RhdGljIGludAotYm54Ml9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgYm54MiAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JYnAtPnJ4X2NzdW0gPSBkYXRhOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1ibngyX3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IGJueDIgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmIChkYXRhKSB7Ci0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTT19FQ047Ci0JCWlmIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwOSkKLQkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwotCX0gZWxzZQotCQlkZXYtPmZlYXR1cmVzICY9IH4oTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfAotCQkJCSAgIE5FVElGX0ZfVFNPX0VDTik7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgewogCWNoYXIgc3RyaW5nW0VUSF9HU1RSSU5HX0xFTl07CiB9IGJueDJfc3RhdHNfc3RyX2FycltdID0gewpAQCAtNzQ5NSw4MiArNzQ2Miw3NCBAQAogfQogCiBzdGF0aWMgaW50Ci1ibngyX3BoeXNfaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCitibngyX3NldF9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gZXRodG9vbF9waHlzX2lkX3N0YXRlIHN0YXRlKQogewogCXN0cnVjdCBibngyICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGk7Ci0JdTMyIHNhdmU7CiAKLQlibngyX3NldF9wb3dlcl9zdGF0ZShicCwgUENJX0QwKTsKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBFVEhUT09MX0lEX0FDVElWRToKKwkJYm54Ml9zZXRfcG93ZXJfc3RhdGUoYnAsIFBDSV9EMCk7CiAKLQlpZiAoZGF0YSA9PSAwKQotCQlkYXRhID0gMjsKKwkJYnAtPmxlZHNfc2F2ZSA9IFJFR19SRChicCwgQk5YMl9NSVNDX0NGRyk7CisJCVJFR19XUihicCwgQk5YMl9NSVNDX0NGRywgQk5YMl9NSVNDX0NGR19MRURNT0RFX01BQyk7CisJCXJldHVybiAxOwkvKiBjeWNsZSBvbi9vZmYgb25jZSBwZXIgc2Vjb25kICovCiAKLQlzYXZlID0gUkVHX1JEKGJwLCBCTlgyX01JU0NfQ0ZHKTsKLQlSRUdfV1IoYnAsIEJOWDJfTUlTQ19DRkcsIEJOWDJfTUlTQ19DRkdfTEVETU9ERV9NQUMpOworCWNhc2UgRVRIVE9PTF9JRF9PTjoKKwkJUkVHX1dSKGJwLCBCTlgyX0VNQUNfTEVELCBCTlgyX0VNQUNfTEVEX09WRVJSSURFIHwKKwkJICAgICAgIEJOWDJfRU1BQ19MRURfMTAwME1CX09WRVJSSURFIHwKKwkJICAgICAgIEJOWDJfRU1BQ19MRURfMTAwTUJfT1ZFUlJJREUgfAorCQkgICAgICAgQk5YMl9FTUFDX0xFRF8xME1CX09WRVJSSURFIHwKKwkJICAgICAgIEJOWDJfRU1BQ19MRURfVFJBRkZJQ19PVkVSUklERSB8CisJCSAgICAgICBCTlgyX0VNQUNfTEVEX1RSQUZGSUMpOworCQlicmVhazsKIAotCWZvciAoaSA9IDA7IGkgPCAoZGF0YSAqIDIpOyBpKyspIHsKLQkJaWYgKChpICUgMikgPT0gMCkgewotCQkJUkVHX1dSKGJwLCBCTlgyX0VNQUNfTEVELCBCTlgyX0VNQUNfTEVEX09WRVJSSURFKTsKLQkJfQotCQllbHNlIHsKLQkJCVJFR19XUihicCwgQk5YMl9FTUFDX0xFRCwgQk5YMl9FTUFDX0xFRF9PVkVSUklERSB8Ci0JCQkJQk5YMl9FTUFDX0xFRF8xMDAwTUJfT1ZFUlJJREUgfAotCQkJCUJOWDJfRU1BQ19MRURfMTAwTUJfT1ZFUlJJREUgfAotCQkJCUJOWDJfRU1BQ19MRURfMTBNQl9PVkVSUklERSB8Ci0JCQkJQk5YMl9FTUFDX0xFRF9UUkFGRklDX09WRVJSSURFIHwKLQkJCQlCTlgyX0VNQUNfTEVEX1RSQUZGSUMpOwotCQl9Ci0JCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDUwMCk7Ci0JCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9JRF9PRkY6CisJCVJFR19XUihicCwgQk5YMl9FTUFDX0xFRCwgQk5YMl9FTUFDX0xFRF9PVkVSUklERSk7CisJCWJyZWFrOworCisJY2FzZSBFVEhUT09MX0lEX0lOQUNUSVZFOgorCQlSRUdfV1IoYnAsIEJOWDJfRU1BQ19MRUQsIDApOworCQlSRUdfV1IoYnAsIEJOWDJfTUlTQ19DRkcsIGJwLT5sZWRzX3NhdmUpOworCisJCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQkJYm54Ml9zZXRfcG93ZXJfc3RhdGUoYnAsIFBDSV9EM2hvdCk7CisJCWJyZWFrOwogCX0KLQlSRUdfV1IoYnAsIEJOWDJfRU1BQ19MRUQsIDApOwotCVJFR19XUihicCwgQk5YMl9NSVNDX0NGRywgc2F2ZSk7Ci0KLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJYm54Ml9zZXRfcG93ZXJfc3RhdGUoYnAsIFBDSV9EM2hvdCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotYm54Ml9zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3N0YXRpYyB1MzIKK2JueDJfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKIHsKIAlzdHJ1Y3QgYm54MiAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA5KQotCQlyZXR1cm4gZXRodG9vbF9vcF9zZXRfdHhfaXB2Nl9jc3VtKGRldiwgZGF0YSk7Ci0JZWxzZQotCQlyZXR1cm4gZXRodG9vbF9vcF9zZXRfdHhfY3N1bShkZXYsIGRhdGEpOworCWlmICghKGJwLT5mbGFncyAmIEJOWDJfRkxBR19DQU5fS0VFUF9WTEFOKSkKKwkJZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1JYOworCisJcmV0dXJuIGZlYXR1cmVzOwogfQogCiBzdGF0aWMgaW50Ci1ibngyX3NldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK2JueDJfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKIHsKIAlzdHJ1Y3QgYm54MiAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCByYzsKLQotCWlmICghKGJwLT5mbGFncyAmIEJOWDJfRkxBR19DQU5fS0VFUF9WTEFOKSAmJgotCSAgICAhKGRhdGEgJiBFVEhfRkxBR19SWFZMQU4pKQotCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIFRTTyB3aXRoIFZMQU4gdGFnIHdvbid0IHdvcmsgd2l0aCBjdXJyZW50IGZpcm13YXJlICovCi0JaWYgKCEoZGF0YSAmIEVUSF9GTEFHX1RYVkxBTikpCi0JCXJldHVybiAtRUlOVkFMOworCWlmIChmZWF0dXJlcyAmIE5FVElGX0ZfSFdfVkxBTl9UWCkKKwkJZGV2LT52bGFuX2ZlYXR1cmVzIHw9IChkZXYtPmh3X2ZlYXR1cmVzICYgTkVUSUZfRl9BTExfVFNPKTsKKwllbHNlCisJCWRldi0+dmxhbl9mZWF0dXJlcyAmPSB+TkVUSUZfRl9BTExfVFNPOwogCi0JcmMgPSBldGh0b29sX29wX3NldF9mbGFncyhkZXYsIGRhdGEsIEVUSF9GTEFHX1JYSEFTSCB8IEVUSF9GTEFHX1JYVkxBTiB8Ci0JCQkJICBFVEhfRkxBR19UWFZMQU4pOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JaWYgKCghIShkYXRhICYgRVRIX0ZMQUdfUlhWTEFOKSAhPQorCWlmICgoISEoZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fUlgpICE9CiAJICAgICEhKGJwLT5yeF9tb2RlICYgQk5YMl9FTUFDX1JYX01PREVfS0VFUF9WTEFOX1RBRykpICYmCiAJICAgIG5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQlibngyX25ldGlmX3N0b3AoYnAsIGZhbHNlKTsKKwkJZGV2LT5mZWF0dXJlcyA9IGZlYXR1cmVzOwogCQlibngyX3NldF9yeF9tb2RlKGRldik7CiAJCWJueDJfZndfc3luYyhicCwgQk5YMl9EUlZfTVNHX0NPREVfS0VFUF9WTEFOX1VQREFURSwgMCwgMSk7CiAJCWJueDJfbmV0aWZfc3RhcnQoYnAsIGZhbHNlKTsKKwkJcmV0dXJuIDE7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC03NTk1LDE4ICs3NTU0LDExIEBACiAJLnNldF9yaW5ncGFyYW0JCT0gYm54Ml9zZXRfcmluZ3BhcmFtLAogCS5nZXRfcGF1c2VwYXJhbQkJPSBibngyX2dldF9wYXVzZXBhcmFtLAogCS5zZXRfcGF1c2VwYXJhbQkJPSBibngyX3NldF9wYXVzZXBhcmFtLAotCS5nZXRfcnhfY3N1bQkJPSBibngyX2dldF9yeF9jc3VtLAotCS5zZXRfcnhfY3N1bQkJPSBibngyX3NldF9yeF9jc3VtLAotCS5zZXRfdHhfY3N1bQkJPSBibngyX3NldF90eF9jc3VtLAotCS5zZXRfc2cJCQk9IGV0aHRvb2xfb3Bfc2V0X3NnLAotCS5zZXRfdHNvCQk9IGJueDJfc2V0X3RzbywKIAkuc2VsZl90ZXN0CQk9IGJueDJfc2VsZl90ZXN0LAogCS5nZXRfc3RyaW5ncwkJPSBibngyX2dldF9zdHJpbmdzLAotCS5waHlzX2lkCQk9IGJueDJfcGh5c19pZCwKKwkuc2V0X3BoeXNfaWQJCT0gYm54Ml9zZXRfcGh5c19pZCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMJPSBibngyX2dldF9ldGh0b29sX3N0YXRzLAogCS5nZXRfc3NldF9jb3VudAkJPSBibngyX2dldF9zc2V0X2NvdW50LAotCS5zZXRfZmxhZ3MJCT0gYm54Ml9zZXRfZmxhZ3MsCi0JLmdldF9mbGFncwkJPSBldGh0b29sX29wX2dldF9mbGFncywKIH07CiAKIC8qIENhbGxlZCB3aXRoIHJ0bmxfbG9jayAqLwpAQCAtODExOCw4ICs4MDcwLDYgQEAKIAlicC0+dHhfcmluZ19zaXplID0gTUFYX1RYX0RFU0NfQ05UOwogCWJueDJfc2V0X3J4X3Jpbmdfc2l6ZShicCwgMjU1KTsKIAotCWJwLT5yeF9jc3VtID0gMTsKLQogCWJwLT50eF9xdWlja19jb25zX3RyaXBfaW50ID0gMjsKIAlicC0+dHhfcXVpY2tfY29uc190cmlwID0gMjA7CiAJYnAtPnR4X3RpY2tzX2ludCA9IDE4OwpAQCAtODMxMSwxNyArODI2MSwxNCBAQAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gYm54Ml9jaGFuZ2VfbWFjX2FkZHIsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IGJueDJfY2hhbmdlX210dSwKKwkubmRvX2ZpeF9mZWF0dXJlcwk9IGJueDJfZml4X2ZlYXR1cmVzLAorCS5uZG9fc2V0X2ZlYXR1cmVzCT0gYm54Ml9zZXRfZmVhdHVyZXMsCiAJLm5kb190eF90aW1lb3V0CQk9IGJueDJfdHhfdGltZW91dCwKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gcG9sbF9ibngyLAogI2VuZGlmCiB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgdmxhbl9mZWF0dXJlc19hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZsYWdzKQotewotCWRldi0+dmxhbl9mZWF0dXJlcyB8PSBmbGFnczsKLX0KLQogc3RhdGljIGludCBfX2RldmluaXQKIGJueDJfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CkBAIC04MzYxLDIwICs4MzA4LDE3IEBACiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGJwLT5tYWNfYWRkciwgNik7CiAJbWVtY3B5KGRldi0+cGVybV9hZGRyLCBicC0+bWFjX2FkZHIsIDYpOwogCi0JZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHIHwgTkVUSUZfRl9HUk8gfAotCQkJIE5FVElGX0ZfUlhIQVNIOwotCXZsYW5fZmVhdHVyZXNfYWRkKGRldiwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9TRyk7Ci0JaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA5KSB7Ci0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUFY2X0NTVU07Ci0JCXZsYW5fZmVhdHVyZXNfYWRkKGRldiwgTkVUSUZfRl9JUFY2X0NTVU0pOwotCX0KLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU09fRUNOOwotCXZsYW5fZmVhdHVyZXNfYWRkKGRldiwgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTT19FQ04pOwotCWlmIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwOSkgewotCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKLQkJdmxhbl9mZWF0dXJlc19hZGQoZGV2LCBORVRJRl9GX1RTTzYpOwotCX0KKwlkZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9TRyB8CisJCU5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU09fRUNOIHwKKwkJTkVUSUZfRl9SWEhBU0ggfCBORVRJRl9GX1JYQ1NVTTsKKworCWlmIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwOSkKKwkJZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfVFNPNjsKKworCWRldi0+dmxhbl9mZWF0dXJlcyA9IGRldi0+aHdfZmVhdHVyZXM7CisJZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlg7CisJZGV2LT5mZWF0dXJlcyB8PSBkZXYtPmh3X2ZlYXR1cmVzOworCiAJaWYgKChyYyA9IHJlZ2lzdGVyX25ldGRldihkZXYpKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZVxuIik7CiAJCWdvdG8gZXJyb3I7CkBAIC04NDEzLDYgKzgzNTcsOCBAQAogCiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAorCWRlbF90aW1lcl9zeW5jKCZicC0+dGltZXIpOworCiAJaWYgKGJwLT5taXBzX2Zpcm13YXJlKQogCQlyZWxlYXNlX2Zpcm13YXJlKGJwLT5taXBzX2Zpcm13YXJlKTsKIAlpZiAoYnAtPnJ2MnBfZmlybXdhcmUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmggYi9kcml2ZXJzL25ldC9ibngyLmgKaW5kZXggNjgwMjA0NS4uYmYzNzFmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuaApAQCAtNjc1NCw4ICs2NzU0LDYgQEAKIAl1MzIJCQlyeF9tYXhfcmluZ19pZHg7CiAJdTMyCQkJcnhfbWF4X3BnX3JpbmdfaWR4OwogCi0JdTMyCQkJcnhfY3N1bTsKLQogCS8qIFRYIGNvbnN0YW50cyAqLwogCWludAkJdHhfcmluZ19zaXplOwogCXUzMgkJdHhfd2FrZV90aHJlc2g7CkBAIC02OTIyLDYgKzY5MjAsNyBAQAogCXU4CQkJbnVtX3R4X3JpbmdzOwogCXU4CQkJbnVtX3J4X3JpbmdzOwogCisJdTMyIAkJCWxlZHNfc2F2ZTsKIAl1MzIJCQlpZGxlX2Noa19zdGF0dXNfaWR4OwogCiAjaWZkZWYgQkNNX0NOSUMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4LmggYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeC5oCmluZGV4IGUwZmNhNzAuLjY2OGE1NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4LmgKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnguaApAQCAtMSw2ICsxLDYgQEAKIC8qIGJueDJ4Lmg6IEJyb2FkY29tIEV2ZXJlc3QgbmV0d29yayBkcml2ZXIuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDExIEJyb2FkY29tIENvcnBvcmF0aW9uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yMiw4ICsyMiw4IEBACiAgKiAoeW91IHdpbGwgbmVlZCB0byByZWJvb3QgYWZ0ZXJ3YXJkcykgKi8KIC8qICNkZWZpbmUgQk5YMlhfU1RPUF9PTl9FUlJPUiAqLwogCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTiAgICAgICIxLjYyLjExLTAiCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURSAgICAgICIyMDExLzAxLzMxIgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04gICAgICAiMS42Mi4xMi0wIgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUgICAgICAiMjAxMS8wMy8yMCIKICNkZWZpbmUgQk5YMlhfQkNfVkVSICAgICAgICAgICAgMHgwNDAyMDAKIAogI2RlZmluZSBCTlgyWF9NVUxUSV9RVUVVRQpAQCAtNDczLDcgKzQ3Myw4IEBACiAjZGVmaW5lIE5VTV9SWF9CRAkJCShSWF9ERVNDX0NOVCAqIE5VTV9SWF9SSU5HUykKICNkZWZpbmUgTUFYX1JYX0JECQkJKE5VTV9SWF9CRCAtIDEpCiAjZGVmaW5lIE1BWF9SWF9BVkFJTAkJCShNQVhfUlhfREVTQ19DTlQgKiBOVU1fUlhfUklOR1MgLSAyKQotI2RlZmluZSBNSU5fUlhfQVZBSUwJCQkxMjgKKyNkZWZpbmUgTUlOX1JYX1NJWkVfVFBBCQkJNzIKKyNkZWZpbmUgTUlOX1JYX1NJWkVfTk9OVFBBCQkxMAogI2RlZmluZSBJTklUX0pVTUJPX1JYX1JJTkdfU0laRQkJTUFYX1JYX0FWQUlMCiAjZGVmaW5lIElOSVRfUlhfUklOR19TSVpFCQlNQVhfUlhfQVZBSUwKICNkZWZpbmUgTkVYVF9SWF9JRFgoeCkJCSgoKCh4KSAmIFJYX0RFU0NfTUFTSykgPT0gXApAQCAtODkzLDYgKzg5NCwyMiBAQAogCSgmYnAtPmRlZl9zdGF0dXNfYmxrLT5zcF9zYi5cCiAJaW5kZXhfdmFsdWVzW0hDX1NQX0lOREVYX0VRX0NPTlNdKQogCisvKiBUaGlzIGlzIGEgZGF0YSB0aGF0IHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgYSBsaW5rIHJlcG9ydCBtZXNzYWdlLgorICogV2Ugd2lsbCBrZWVwIHRoZSBkYXRhIHVzZWQgZm9yIHRoZSBsYXN0IGxpbmsgcmVwb3J0IGluIG9yZGVyCisgKiB0byBwcmV2ZW50IHJlcG9ydGluZyB0aGUgc2FtZSBsaW5rIHBhcmFtZXRlcnMgdHdpY2UuCisgKi8KK3N0cnVjdCBibngyeF9saW5rX3JlcG9ydF9kYXRhIHsKKwl1MTYgbGluZV9zcGVlZDsJCQkvKiBFZmZlY3RpdmUgbGluZSBzcGVlZCAqLworCXVuc2lnbmVkIGxvbmcgbGlua19yZXBvcnRfZmxhZ3M7LyogQk5YMlhfTElOS19SRVBPUlRfWFhYIGZsYWdzICovCit9OworCitlbnVtIHsKKwlCTlgyWF9MSU5LX1JFUE9SVF9GRCwJCS8qIEZ1bGwgRFVQTEVYICovCisJQk5YMlhfTElOS19SRVBPUlRfTElOS19ET1dOLAorCUJOWDJYX0xJTktfUkVQT1JUX1JYX0ZDX09OLAorCUJOWDJYX0xJTktfUkVQT1JUX1RYX0ZDX09OLAorfTsKKwogc3RydWN0IGJueDJ4IHsKIAkvKiBGaWVsZHMgdXNlZCBpbiB0aGUgdHggYW5kIGludHIvbmFwaSBwZXJmb3JtYW5jZSBwYXRocwogCSAqIGFyZSBncm91cGVkIHRvZ2V0aGVyIGluIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cnVjdHVyZQpAQCAtOTE4LDcgKzkzNSw2IEBACiAKIAlpbnQJCQl0eF9yaW5nX3NpemU7CiAKLQl1MzIJCQlyeF9jc3VtOwogLyogTDIgaGVhZGVyIHNpemUgKyAyKlZMQU5zICg4IGJ5dGVzKSArIExMQyBTTkFQICg4IGJ5dGVzKSAqLwogI2RlZmluZSBFVEhfT1ZSRUhFQUQJCShFVEhfSExFTiArIDggKyA4KQogI2RlZmluZSBFVEhfTUlOX1BBQ0tFVF9TSVpFCQk2MApAQCAtMTAyNiw2ICsxMDQyLDkgQEAKIAogCXN0cnVjdCBsaW5rX3BhcmFtcwlsaW5rX3BhcmFtczsKIAlzdHJ1Y3QgbGlua192YXJzCWxpbmtfdmFyczsKKwl1MzIJCQlsaW5rX2NudDsKKwlzdHJ1Y3QgYm54MnhfbGlua19yZXBvcnRfZGF0YSBsYXN0X3JlcG9ydGVkX2xpbms7CisKIAlzdHJ1Y3QgbWRpb19pZl9pbmZvCW1kaW87CiAKIAlzdHJ1Y3QgYm54MnhfY29tbW9uCWNvbW1vbjsKQEAgLTEyMjMsNiArMTI0MiwxMCBAQAogCS8qIERDQlggTmVnb3RpYXRpb24gcmVzdWx0cyAqLwogCXN0cnVjdCBkY2J4X2ZlYXR1cmVzCQkJZGNieF9sb2NhbF9mZWF0OwogCXUzMgkJCQkJZGNieF9lcnJvcjsKKyNpZmRlZiBCQ01fRENCTkwKKwlzdHJ1Y3QgZGNieF9mZWF0dXJlcwkJCWRjYnhfcmVtb3RlX2ZlYXQ7CisJdTMyCQkJCQlkY2J4X3JlbW90ZV9mbGFnczsKKyNlbmRpZgogCXUzMgkJCQkJcGVuZGluZ19tYXg7CiB9OwogCkBAIC0xNDQyLDYgKzE0NjUsOCBAQAogI2RlZmluZSBXQUlUX1JBTVJPRF9QT0xMCTB4MDEKICNkZWZpbmUgV0FJVF9SQU1ST0RfQ09NTU9OCTB4MDIKIAordm9pZCBibngyeF9yZWFkX21mX2NmZyhzdHJ1Y3QgYm54MnggKmJwKTsKKwogLyogZG1hZSAqLwogdm9pZCBibngyeF9yZWFkX2RtYWUoc3RydWN0IGJueDJ4ICpicCwgdTMyIHNyY19hZGRyLCB1MzIgbGVuMzIpOwogdm9pZCBibngyeF93cml0ZV9kbWFlKHN0cnVjdCBibngyeCAqYnAsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHUzMiBkc3RfYWRkciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2Ntbi5jIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmMKaW5kZXggZTgzYWM2ZC4uNjRkMDFlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmMKQEAgLTEsNiArMSw2IEBACiAvKiBibngyeF9jbW4uYzogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTEgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIxLDEyICsyMSw1NiBAQAogI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CiAjaW5jbHVkZSA8bmV0L2lwNl9jaGVja3N1bS5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlICJibngyeF9jbW4uaCIKIAogI2luY2x1ZGUgImJueDJ4X2luaXQuaCIKIAogc3RhdGljIGludCBibngyeF9zZXR1cF9pcnFzKHN0cnVjdCBibngyeCAqYnApOwogCisvKioKKyAqIGJueDJ4X2J6X2ZwIC0gemVybyBjb250ZW50IG9mIHRoZSBmYXN0cGF0aCBzdHJ1Y3R1cmUuCisgKgorICogQGJwOgkJZHJpdmVyIGhhbmRsZQorICogQGluZGV4OglmYXN0cGF0aCBpbmRleCB0byBiZSB6ZXJvZWQKKyAqCisgKiBNYWtlcyBzdXJlIHRoZSBjb250ZW50cyBvZiB0aGUgYnAtPmZwW2luZGV4XS5uYXBpIGlzIGtlcHQKKyAqIGludGFjdC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X2J6X2ZwKHN0cnVjdCBibngyeCAqYnAsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpbmRleF07CisJc3RydWN0IG5hcGlfc3RydWN0IG9yaWdfbmFwaSA9IGZwLT5uYXBpOworCS8qIGJ6ZXJvIGJueDJ4X2Zhc3RwYXRoIGNvbnRlbnRzICovCisJbWVtc2V0KGZwLCAwLCBzaXplb2YoKmZwKSk7CisKKwkvKiBSZXN0b3JlIHRoZSBOQVBJIG9iamVjdCBhcyBpdCBoYXMgYmVlbiBhbHJlYWR5IGluaXRpYWxpemVkICovCisJZnAtPm5hcGkgPSBvcmlnX25hcGk7Cit9CisKKy8qKgorICogYm54MnhfbW92ZV9mcCAtIG1vdmUgY29udGVudCBvZiB0aGUgZmFzdHBhdGggc3RydWN0dXJlLgorICoKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKKyAqIEBmcm9tOglzb3VyY2UgRlAgaW5kZXgKKyAqIEB0bzoJCWRlc3RpbmF0aW9uIEZQIGluZGV4CisgKgorICogTWFrZXMgc3VyZSB0aGUgY29udGVudHMgb2YgdGhlIGJwLT5mcFt0b10ubmFwaSBpcyBrZXB0CisgKiBpbnRhY3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9tb3ZlX2ZwKHN0cnVjdCBibngyeCAqYnAsIGludCBmcm9tLCBpbnQgdG8pCit7CisJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcm9tX2ZwID0gJmJwLT5mcFtmcm9tXTsKKwlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKnRvX2ZwID0gJmJwLT5mcFt0b107CisJc3RydWN0IG5hcGlfc3RydWN0IG9yaWdfbmFwaSA9IHRvX2ZwLT5uYXBpOworCS8qIE1vdmUgYm54MnhfZmFzdHBhdGggY29udGVudHMgKi8KKwltZW1jcHkodG9fZnAsIGZyb21fZnAsIHNpemVvZigqdG9fZnApKTsKKwl0b19mcC0+aW5kZXggPSB0bzsKKworCS8qIFJlc3RvcmUgdGhlIE5BUEkgb2JqZWN0IGFzIGl0IGhhcyBiZWVuIGFscmVhZHkgaW5pdGlhbGl6ZWQgKi8KKwl0b19mcC0+bmFwaSA9IG9yaWdfbmFwaTsKK30KKwogLyogZnJlZSBza2IgaW4gdGhlIHBhY2tldCByaW5nIGF0IHBvcyBpZHgKICAqIHJldHVybiBpZHggb2YgbGFzdCBiZCBmcmVlZAogICovCkBAIC0yNjUsMTMgKzMwOSwxNSBAQAogICovCiAjZGVmaW5lIFRQQV9UU1RBTVBfT1BUX0xFTgkxMgogLyoqCi0gKiBDYWxjdWxhdGUgdGhlIGFwcHJveGltYXRlIHZhbHVlIG9mIHRoZSBNU1MgZm9yIHRoaXMKLSAqIGFnZ3JlZ2F0aW9uIHVzaW5nIHRoZSBmaXJzdCBwYWNrZXQgb2YgaXQuCisgKiBibngyeF9zZXRfbHJvX21zcyAtIGNhbGN1bGF0ZSB0aGUgYXBwcm94aW1hdGUgdmFsdWUgb2YgdGhlIE1TUwogICoKLSAqIEBwYXJhbSBicAotICogQHBhcmFtIHBhcnNpbmdfZmxhZ3MgUGFyc2luZyBmbGFncyBmcm9tIHRoZSBTVEFSVCBDUUUKLSAqIEBwYXJhbSBsZW5fb25fYmQgVG90YWwgbGVuZ3RoIG9mIHRoZSBmaXJzdCBwYWNrZXQgZm9yIHRoZQotICoJCSAgICAgYWdncmVnYXRpb24uCisgKiBAYnA6CQkJZHJpdmVyIGhhbmRsZQorICogQHBhcnNpbmdfZmxhZ3M6CXBhcnNpbmcgZmxhZ3MgZnJvbSB0aGUgU1RBUlQgQ1FFCisgKiBAbGVuX29uX2JkOgkJdG90YWwgbGVuZ3RoIG9mIHRoZSBmaXJzdCBwYWNrZXQgZm9yIHRoZQorICoJCQlhZ2dyZWdhdGlvbi4KKyAqCisgKiBBcHByb3hpbWF0ZSB2YWx1ZSBvZiB0aGUgTVNTIGZvciB0aGlzIGFnZ3JlZ2F0aW9uIGNhbGN1bGF0ZWQgdXNpbmcKKyAqIHRoZSBmaXJzdCBwYWNrZXQgb2YgaXQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdTE2IGJueDJ4X3NldF9scm9fbXNzKHN0cnVjdCBibngyeCAqYnAsIHUxNiBwYXJzaW5nX2ZsYWdzLAogCQkJCSAgICB1MTYgbGVuX29uX2JkKQpAQCAtNjQwLDcgKzY4Niw3IEBACiAKIAkJCXNrYl9jaGVja3N1bV9ub25lX2Fzc2VydChza2IpOwogCi0JCQlpZiAoYnAtPnJ4X2NzdW0pIHsKKwkJCWlmIChicC0+ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSB7CiAJCQkJaWYgKGxpa2VseShCTlgyWF9SWF9DU1VNX09LKGNxZSkpKQogCQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQkJCWVsc2UKQEAgLTc1OCwzNSArODA0LDExOSBAQAogCXJldHVybiBsaW5lX3NwZWVkOwogfQogCisvKioKKyAqIGJueDJ4X2ZpbGxfcmVwb3J0X2RhdGEgLSBmaWxsIGxpbmsgcmVwb3J0IGRhdGEgdG8gcmVwb3J0CisgKgorICogQGJwOgkJZHJpdmVyIGhhbmRsZQorICogQGRhdGE6CWxpbmsgc3RhdGUgdG8gdXBkYXRlCisgKgorICogSXQgdXNlcyBhIG5vbmUtYXRvbWljIGJpdCBvcGVyYXRpb25zIGJlY2F1c2UgaXMgY2FsbGVkIHVuZGVyIHRoZSBtdXRleC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X2ZpbGxfcmVwb3J0X2RhdGEoc3RydWN0IGJueDJ4ICpicCwKKwkJCQkJICBzdHJ1Y3QgYm54MnhfbGlua19yZXBvcnRfZGF0YSAqZGF0YSkKK3sKKwl1MTYgbGluZV9zcGVlZCA9IGJueDJ4X2dldF9tZl9zcGVlZChicCk7CisKKwltZW1zZXQoZGF0YSwgMCwgc2l6ZW9mKCpkYXRhKSk7CisKKwkvKiBGaWxsIHRoZSByZXBvcnQgZGF0YTogZWZlY3RpdmUgbGluZSBzcGVlZCAqLworCWRhdGEtPmxpbmVfc3BlZWQgPSBsaW5lX3NwZWVkOworCisJLyogTGluayBpcyBkb3duICovCisJaWYgKCFicC0+bGlua192YXJzLmxpbmtfdXAgfHwgKGJwLT5mbGFncyAmIE1GX0ZVTkNfRElTKSkKKwkJX19zZXRfYml0KEJOWDJYX0xJTktfUkVQT1JUX0xJTktfRE9XTiwKKwkJCSAgJmRhdGEtPmxpbmtfcmVwb3J0X2ZsYWdzKTsKKworCS8qIEZ1bGwgRFVQTEVYICovCisJaWYgKGJwLT5saW5rX3ZhcnMuZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQlfX3NldF9iaXQoQk5YMlhfTElOS19SRVBPUlRfRkQsICZkYXRhLT5saW5rX3JlcG9ydF9mbGFncyk7CisKKwkvKiBSeCBGbG93IENvbnRyb2wgaXMgT04gKi8KKwlpZiAoYnAtPmxpbmtfdmFycy5mbG93X2N0cmwgJiBCTlgyWF9GTE9XX0NUUkxfUlgpCisJCV9fc2V0X2JpdChCTlgyWF9MSU5LX1JFUE9SVF9SWF9GQ19PTiwgJmRhdGEtPmxpbmtfcmVwb3J0X2ZsYWdzKTsKKworCS8qIFR4IEZsb3cgQ29udHJvbCBpcyBPTiAqLworCWlmIChicC0+bGlua192YXJzLmZsb3dfY3RybCAmIEJOWDJYX0ZMT1dfQ1RSTF9UWCkKKwkJX19zZXRfYml0KEJOWDJYX0xJTktfUkVQT1JUX1RYX0ZDX09OLCAmZGF0YS0+bGlua19yZXBvcnRfZmxhZ3MpOworfQorCisvKioKKyAqIGJueDJ4X2xpbmtfcmVwb3J0IC0gcmVwb3J0IGxpbmsgc3RhdHVzIHRvIE9TLgorICoKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKKyAqCisgKiBDYWxscyB0aGUgX19ibngyeF9saW5rX3JlcG9ydCgpIHVuZGVyIHRoZSBzYW1lIGxvY2tpbmcgc2NoZW1lCisgKiBhcyBhIGxpbmsvUEhZIHN0YXRlIG1hbmFnaW5nIGNvZGUgdG8gZW5zdXJlIGEgY29uc2lzdGVudCBsaW5rCisgKiByZXBvcnRpbmcuCisgKi8KKwogdm9pZCBibngyeF9saW5rX3JlcG9ydChzdHJ1Y3QgYm54MnggKmJwKQogewotCWlmIChicC0+ZmxhZ3MgJiBNRl9GVU5DX0RJUykgeworCWJueDJ4X2FjcXVpcmVfcGh5X2xvY2soYnApOworCV9fYm54MnhfbGlua19yZXBvcnQoYnApOworCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOworfQorCisvKioKKyAqIF9fYm54MnhfbGlua19yZXBvcnQgLSByZXBvcnQgbGluayBzdGF0dXMgdG8gT1MuCisgKgorICogQGJwOgkJZHJpdmVyIGhhbmRsZQorICoKKyAqIE5vbmUgYXRvbWljIGlubWxlbWVudGF0aW9uLgorICogU2hvdWxkIGJlIGNhbGxlZCB1bmRlciB0aGUgcGh5X2xvY2suCisgKi8KK3ZvaWQgX19ibngyeF9saW5rX3JlcG9ydChzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0cnVjdCBibngyeF9saW5rX3JlcG9ydF9kYXRhIGN1cl9kYXRhOworCisJLyogcmVyZWFkIG1mX2NmZyAqLworCWlmICghQ0hJUF9JU19FMShicCkpCisJCWJueDJ4X3JlYWRfbWZfY2ZnKGJwKTsKKworCS8qIFJlYWQgdGhlIGN1cnJlbnQgbGluayByZXBvcnQgaW5mbyAqLworCWJueDJ4X2ZpbGxfcmVwb3J0X2RhdGEoYnAsICZjdXJfZGF0YSk7CisKKwkvKiBEb24ndCByZXBvcnQgbGluayBkb3duIG9yIGV4YWN0bHkgdGhlIHNhbWUgbGluayBzdGF0dXMgdHdpY2UgKi8KKwlpZiAoIW1lbWNtcCgmY3VyX2RhdGEsICZicC0+bGFzdF9yZXBvcnRlZF9saW5rLCBzaXplb2YoY3VyX2RhdGEpKSB8fAorCSAgICAodGVzdF9iaXQoQk5YMlhfTElOS19SRVBPUlRfTElOS19ET1dOLAorCQkgICAgICAmYnAtPmxhc3RfcmVwb3J0ZWRfbGluay5saW5rX3JlcG9ydF9mbGFncykgJiYKKwkgICAgIHRlc3RfYml0KEJOWDJYX0xJTktfUkVQT1JUX0xJTktfRE9XTiwKKwkJICAgICAgJmN1cl9kYXRhLmxpbmtfcmVwb3J0X2ZsYWdzKSkpCisJCXJldHVybjsKKworCWJwLT5saW5rX2NudCsrOworCisJLyogV2UgYXJlIGdvaW5nIHRvIHJlcG9ydCBhIG5ldyBsaW5rIHBhcmFtZXRlcnMgbm93IC0KKwkgKiByZW1lbWJlciB0aGUgY3VycmVudCBkYXRhIGZvciB0aGUgbmV4dCB0aW1lLgorCSAqLworCW1lbWNweSgmYnAtPmxhc3RfcmVwb3J0ZWRfbGluaywgJmN1cl9kYXRhLCBzaXplb2YoY3VyX2RhdGEpKTsKKworCWlmICh0ZXN0X2JpdChCTlgyWF9MSU5LX1JFUE9SVF9MSU5LX0RPV04sCisJCSAgICAgJmN1cl9kYXRhLmxpbmtfcmVwb3J0X2ZsYWdzKSkgewogCQluZXRpZl9jYXJyaWVyX29mZihicC0+ZGV2KTsKIAkJbmV0ZGV2X2VycihicC0+ZGV2LCAiTklDIExpbmsgaXMgRG93blxuIik7CiAJCXJldHVybjsKLQl9Ci0KLQlpZiAoYnAtPmxpbmtfdmFycy5saW5rX3VwKSB7Ci0JCXUxNiBsaW5lX3NwZWVkOwotCi0JCWlmIChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfT1BFTikKLQkJCW5ldGlmX2NhcnJpZXJfb24oYnAtPmRldik7CisJfSBlbHNlIHsKKwkJbmV0aWZfY2Fycmllcl9vbihicC0+ZGV2KTsKIAkJbmV0ZGV2X2luZm8oYnAtPmRldiwgIk5JQyBMaW5rIGlzIFVwLCAiKTsKKwkJcHJfY29udCgiJWQgTWJwcyAiLCBjdXJfZGF0YS5saW5lX3NwZWVkKTsKIAotCQlsaW5lX3NwZWVkID0gYm54MnhfZ2V0X21mX3NwZWVkKGJwKTsKLQotCQlwcl9jb250KCIlZCBNYnBzICIsIGxpbmVfc3BlZWQpOwotCi0JCWlmIChicC0+bGlua192YXJzLmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChCTlgyWF9MSU5LX1JFUE9SVF9GRCwKKwkJCQkgICAgICAgJmN1cl9kYXRhLmxpbmtfcmVwb3J0X2ZsYWdzKSkKIAkJCXByX2NvbnQoImZ1bGwgZHVwbGV4Iik7CiAJCWVsc2UKIAkJCXByX2NvbnQoImhhbGYgZHVwbGV4Iik7CiAKLQkJaWYgKGJwLT5saW5rX3ZhcnMuZmxvd19jdHJsICE9IEJOWDJYX0ZMT1dfQ1RSTF9OT05FKSB7Ci0JCQlpZiAoYnAtPmxpbmtfdmFycy5mbG93X2N0cmwgJiBCTlgyWF9GTE9XX0NUUkxfUlgpIHsKKwkJLyogSGFuZGxlIHRoZSBGQyBhdCB0aGUgZW5kIHNvIHRoYXQgb25seSB0aGVzZSBmbGFncyB3b3VsZCBiZQorCQkgKiBwb3NzaWJseSBzZXQuIFRoaXMgd2F5IHdlIG1heSBlYXNpbHkgY2hlY2sgaWYgdGhlcmUgaXMgbm8gRkMKKwkJICogZW5hYmxlZC4KKwkJICovCisJCWlmIChjdXJfZGF0YS5saW5rX3JlcG9ydF9mbGFncykgeworCQkJaWYgKHRlc3RfYml0KEJOWDJYX0xJTktfUkVQT1JUX1JYX0ZDX09OLAorCQkJCSAgICAgJmN1cl9kYXRhLmxpbmtfcmVwb3J0X2ZsYWdzKSkgewogCQkJCXByX2NvbnQoIiwgcmVjZWl2ZSAiKTsKLQkJCQlpZiAoYnAtPmxpbmtfdmFycy5mbG93X2N0cmwgJgotCQkJCSAgICBCTlgyWF9GTE9XX0NUUkxfVFgpCisJCQkJaWYgKHRlc3RfYml0KEJOWDJYX0xJTktfUkVQT1JUX1RYX0ZDX09OLAorCQkJCSAgICAgJmN1cl9kYXRhLmxpbmtfcmVwb3J0X2ZsYWdzKSkKIAkJCQkJcHJfY29udCgiJiB0cmFuc21pdCAiKTsKIAkJCX0gZWxzZSB7CiAJCQkJcHJfY29udCgiLCB0cmFuc21pdCAiKTsKQEAgLTc5NCw2MiArOTI0LDkgQEAKIAkJCXByX2NvbnQoImZsb3cgY29udHJvbCBPTiIpOwogCQl9CiAJCXByX2NvbnQoIlxuIik7Ci0KLQl9IGVsc2UgeyAvKiBsaW5rX2Rvd24gKi8KLQkJbmV0aWZfY2Fycmllcl9vZmYoYnAtPmRldik7Ci0JCW5ldGRldl9lcnIoYnAtPmRldiwgIk5JQyBMaW5rIGlzIERvd25cbiIpOwogCX0KIH0KIAotLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGFjdHVhbGx5IGFsbG9jYXRlZCBCRHMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGJueDJ4X2FsbG9jX3J4X2JkcyhzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwLAotCQkJCSAgICAgIGludCByeF9yaW5nX3NpemUpCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IGZwLT5icDsKLQl1MTYgcmluZ19wcm9kLCBjcWVfcmluZ19wcm9kOwotCWludCBpOwotCi0JZnAtPnJ4X2NvbXBfY29ucyA9IDA7Ci0JY3FlX3JpbmdfcHJvZCA9IHJpbmdfcHJvZCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IHJ4X3Jpbmdfc2l6ZTsgaSsrKSB7Ci0JCWlmIChibngyeF9hbGxvY19yeF9za2IoYnAsIGZwLCByaW5nX3Byb2QpIDwgMCkgewotCQkJQk5YMlhfRVJSKCJ3YXMgb25seSBhYmxlIHRvIGFsbG9jYXRlICIKLQkJCQkgICIlZCByeCBza2JzIG9uIHF1ZXVlWyVkXVxuIiwgaSwgZnAtPmluZGV4KTsKLQkJCWZwLT5ldGhfcV9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7Ci0JCQlicmVhazsKLQkJfQotCQlyaW5nX3Byb2QgPSBORVhUX1JYX0lEWChyaW5nX3Byb2QpOwotCQljcWVfcmluZ19wcm9kID0gTkVYVF9SQ1FfSURYKGNxZV9yaW5nX3Byb2QpOwotCQlXQVJOX09OKHJpbmdfcHJvZCA8PSBpKTsKLQl9Ci0KLQlmcC0+cnhfYmRfcHJvZCA9IHJpbmdfcHJvZDsKLQkvKiBMaW1pdCB0aGUgQ1FFIHByb2R1Y2VyIGJ5IHRoZSBDUUUgcmluZyBzaXplICovCi0JZnAtPnJ4X2NvbXBfcHJvZCA9IG1pbl90KHUxNiwgTlVNX1JDUV9SSU5HUypSQ1FfREVTQ19DTlQsCi0JCQkgICAgICAgY3FlX3JpbmdfcHJvZCk7Ci0JZnAtPnJ4X3BrdCA9IGZwLT5yeF9jYWxscyA9IDA7Ci0KLQlyZXR1cm4gaTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X2FsbG9jX3J4X2JkX3Jpbmcoc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCkKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gZnAtPmJwOwotCWludCByeF9yaW5nX3NpemUgPSBicC0+cnhfcmluZ19zaXplID8gYnAtPnJ4X3Jpbmdfc2l6ZSA6Ci0JCQkJCSAgICAgIE1BWF9SWF9BVkFJTC9icC0+bnVtX3F1ZXVlczsKLQotCXJ4X3Jpbmdfc2l6ZSA9IG1heF90KGludCwgTUlOX1JYX0FWQUlMLCByeF9yaW5nX3NpemUpOwotCi0JYm54MnhfYWxsb2NfcnhfYmRzKGZwLCByeF9yaW5nX3NpemUpOwotCi0JLyogV2FybmluZyEKLQkgKiB0aGlzIHdpbGwgZ2VuZXJhdGUgYW4gaW50ZXJydXB0ICh0byB0aGUgVFNUT1JNKQotCSAqIG11c3Qgb25seSBiZSBkb25lIGFmdGVyIGNoaXAgaXMgaW5pdGlhbGl6ZWQKLQkgKi8KLQlibngyeF91cGRhdGVfcnhfcHJvZChicCwgZnAsIGZwLT5yeF9iZF9wcm9kLCBmcC0+cnhfY29tcF9wcm9kLAotCQkJICAgICBmcC0+cnhfc2dlX3Byb2QpOwotfQotCiB2b2lkIGJueDJ4X2luaXRfcnhfcmluZ3Moc3RydWN0IGJueDJ4ICpicCkKIHsKIAlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOwpAQCAtODU4LDYgKzkzNSw3IEBACiAJdTE2IHJpbmdfcHJvZDsKIAlpbnQgaSwgajsKIAorCS8qIEFsbG9jYXRlIFRQQSByZXNvdXJjZXMgKi8KIAlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaikgewogCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtqXTsKIApAQCAtODY1LDYgKzk0Myw3IEBACiAJCSAgICJtdHUgJWQgIHJ4X2J1Zl9zaXplICVkXG4iLCBicC0+ZGV2LT5tdHUsIGZwLT5yeF9idWZfc2l6ZSk7CiAKIAkJaWYgKCFmcC0+ZGlzYWJsZV90cGEpIHsKKwkJCS8qIEZpbGwgdGhlIHBlci1hZ2dyZWdhdGlvbiBwb29sICovCiAJCQlmb3IgKGkgPSAwOyBpIDwgbWF4X2FnZ19xdWV1ZXM7IGkrKykgewogCQkJCWZwLT50cGFfcG9vbFtpXS5za2IgPQogCQkJCSAgIG5ldGRldl9hbGxvY19za2IoYnAtPmRldiwgZnAtPnJ4X2J1Zl9zaXplKTsKQEAgLTkxOSwxMyArOTk4LDEzIEBACiAKIAkJZnAtPnJ4X2JkX2NvbnMgPSAwOwogCi0JCWJueDJ4X3NldF9uZXh0X3BhZ2VfcnhfYmQoZnApOwotCi0JCS8qIENRIHJpbmcgKi8KLQkJYm54Mnhfc2V0X25leHRfcGFnZV9yeF9jcShmcCk7Ci0KLQkJLyogQWxsb2NhdGUgQkRzIGFuZCBpbml0aWFsaXplIEJEIHJpbmcgKi8KLQkJYm54MnhfYWxsb2NfcnhfYmRfcmluZyhmcCk7CisJCS8qIEFjdGl2YXRlIEJEIHJpbmcgKi8KKwkJLyogV2FybmluZyEKKwkJICogdGhpcyB3aWxsIGdlbmVyYXRlIGFuIGludGVycnVwdCAodG8gdGhlIFRTVE9STSkKKwkJICogbXVzdCBvbmx5IGJlIGRvbmUgYWZ0ZXIgY2hpcCBpcyBpbml0aWFsaXplZAorCQkgKi8KKwkJYm54MnhfdXBkYXRlX3J4X3Byb2QoYnAsIGZwLCBmcC0+cnhfYmRfcHJvZCwgZnAtPnJ4X2NvbXBfcHJvZCwKKwkJCQkgICAgIGZwLT5yeF9zZ2VfcHJvZCk7CiAKIAkJaWYgKGogIT0gMCkKIAkJCWNvbnRpbnVlOwpAQCAtOTU5LDI3ICsxMDM4LDQwIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBibngyeF9mcmVlX3J4X2JkcyhzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBmcC0+YnA7CisJaW50IGk7CisKKwkvKiByaW5nIHdhc24ndCBhbGxvY2F0ZWQgKi8KKwlpZiAoZnAtPnJ4X2J1Zl9yaW5nID09IE5VTEwpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfQkQ7IGkrKykgeworCQlzdHJ1Y3Qgc3dfcnhfYmQgKnJ4X2J1ZiA9ICZmcC0+cnhfYnVmX3JpbmdbaV07CisJCXN0cnVjdCBza19idWZmICpza2IgPSByeF9idWYtPnNrYjsKKworCQlpZiAoc2tiID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlkbWFfdW5tYXBfc2luZ2xlKCZicC0+cGRldi0+ZGV2LAorCQkJCSBkbWFfdW5tYXBfYWRkcihyeF9idWYsIG1hcHBpbmcpLAorCQkJCSBmcC0+cnhfYnVmX3NpemUsIERNQV9GUk9NX0RFVklDRSk7CisKKwkJcnhfYnVmLT5za2IgPSBOVUxMOworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJfQorfQorCiBzdGF0aWMgdm9pZCBibngyeF9mcmVlX3J4X3NrYnMoc3RydWN0IGJueDJ4ICpicCkKIHsKLQlpbnQgaSwgajsKKwlpbnQgajsKIAogCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBqKSB7CiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2pdOwogCi0JCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfQkQ7IGkrKykgewotCQkJc3RydWN0IHN3X3J4X2JkICpyeF9idWYgPSAmZnAtPnJ4X2J1Zl9yaW5nW2ldOwotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4X2J1Zi0+c2tiOworCQlibngyeF9mcmVlX3J4X2JkcyhmcCk7CiAKLQkJCWlmIChza2IgPT0gTlVMTCkKLQkJCQljb250aW51ZTsKLQotCQkJZG1hX3VubWFwX3NpbmdsZSgmYnAtPnBkZXYtPmRldiwKLQkJCQkJIGRtYV91bm1hcF9hZGRyKHJ4X2J1ZiwgbWFwcGluZyksCi0JCQkJCSBmcC0+cnhfYnVmX3NpemUsIERNQV9GUk9NX0RFVklDRSk7Ci0KLQkJCXJ4X2J1Zi0+c2tiID0gTlVMTDsKLQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJfQogCQlpZiAoIWZwLT5kaXNhYmxlX3RwYSkKIAkJCWJueDJ4X2ZyZWVfdHBhX3Bvb2woYnAsIGZwLCBDSElQX0lTX0UxKGJwKSA/CiAJCQkJCSAgICBFVEhfTUFYX0FHR1JFR0FUSU9OX1FVRVVFU19FMSA6CkBAIC0xMzQ1LDIxICsxNDM3LDI1IEBACiAKIAlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9PUEVOSU5HX1dBSVQ0X0xPQUQ7CiAKKwkvKiBTZXQgdGhlIGluaXRpYWwgbGluayByZXBvcnRlZCBzdGF0ZSB0byBsaW5rIGRvd24gKi8KKwlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKKwltZW1zZXQoJmJwLT5sYXN0X3JlcG9ydGVkX2xpbmssIDAsIHNpemVvZihicC0+bGFzdF9yZXBvcnRlZF9saW5rKSk7CisJX19zZXRfYml0KEJOWDJYX0xJTktfUkVQT1JUX0xJTktfRE9XTiwKKwkJJmJwLT5sYXN0X3JlcG9ydGVkX2xpbmsubGlua19yZXBvcnRfZmxhZ3MpOworCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOworCiAJLyogbXVzdCBiZSBjYWxsZWQgYmVmb3JlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBIVyBpbml0ICovCiAJYm54MnhfaWx0X3NldF9pbmZvKGJwKTsKIAorCS8qIHplcm8gZmFzdHBhdGggc3RydWN0dXJlcyBwcmVzZXJ2aW5nIGludmFyaWFudHMgbGlrZSBuYXBpIHdoaWNoIGFyZQorCSAqIGFsbG9jYXRlZCBvbmx5IG9uY2UKKwkgKi8KKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkKKwkJYm54MnhfYnpfZnAoYnAsIGkpOworCiAJLyogU2V0IHRoZSByZWNlaXZlIHF1ZXVlcyBidWZmZXIgc2l6ZSAqLwogCWJueDJ4X3NldF9yeF9idWZfc2l6ZShicCk7CiAKLQlpZiAoYm54MnhfYWxsb2NfbWVtKGJwKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyYyA9IGJueDJ4X3NldF9yZWFsX251bV9xdWV1ZXMoYnApOwotCWlmIChyYykgewotCQlCTlgyWF9FUlIoIlVuYWJsZSB0byBzZXQgcmVhbF9udW1fcXVldWVzXG4iKTsKLQkJZ290byBsb2FkX2Vycm9yMDsKLQl9Ci0KIAlmb3JfZWFjaF9xdWV1ZShicCwgaSkKIAkJYm54MnhfZnAoYnAsIGksIGRpc2FibGVfdHBhKSA9CiAJCQkJCSgoYnAtPmZsYWdzICYgVFBBX0VOQUJMRV9GTEFHKSA9PSAwKTsKQEAgLTEzNjgsNiArMTQ2NCwyMCBAQAogCS8qIFdlIGRvbid0IHdhbnQgVFBBIG9uIEZDb0UgTDIgcmluZyAqLwogCWJueDJ4X2Zjb2UoYnAsIGRpc2FibGVfdHBhKSA9IDE7CiAjZW5kaWYKKworCWlmIChibngyeF9hbGxvY19tZW0oYnApKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIEFzIGxvbmcgYXMgYm54MnhfYWxsb2NfbWVtKCkgbWF5IHBvc3NpYmx5IHVwZGF0ZQorCSAqIGJwLT5udW1fcXVldWVzLCBibngyeF9zZXRfcmVhbF9udW1fcXVldWVzKCkgc2hvdWxkIGFsd2F5cworCSAqIGNvbWUgYWZ0ZXIgaXQuCisJICovCisJcmMgPSBibngyeF9zZXRfcmVhbF9udW1fcXVldWVzKGJwKTsKKwlpZiAocmMpIHsKKwkJQk5YMlhfRVJSKCJVbmFibGUgdG8gc2V0IHJlYWxfbnVtX3F1ZXVlc1xuIik7CisJCWdvdG8gbG9hZF9lcnJvcjA7CisJfQorCiAJYm54MnhfbmFwaV9lbmFibGUoYnApOwogCiAJLyogU2VuZCBMT0FEX1JFUVVFU1QgY29tbWFuZCB0byBNQ1AKQEAgLTE5NzYsMTIgKzIwODYsMTEgQEAKIH0KIAogLyoqCi0gKiBVcGRhdGUgUEJEIGluIEdTTyBjYXNlLgorICogYm54Mnhfc2V0X3BiZF9nc28gLSB1cGRhdGUgUEJEIGluIEdTTyBjYXNlLgogICoKLSAqIEBwYXJhbSBza2IKLSAqIEBwYXJhbSB0eF9zdGFydF9iZAotICogQHBhcmFtIHBiZAotICogQHBhcmFtIHhtaXRfdHlwZQorICogQHNrYjoJcGFja2V0IHNrYgorICogQHBiZDoJcGFyc2UgQkQKKyAqIEB4bWl0X3R5cGU6CXhtaXQgZmxhZ3MKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X3NldF9wYmRfZ3NvKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgICBzdHJ1Y3QgZXRoX3R4X3BhcnNlX2JkX2UxeCAqcGJkLApAQCAtMjAwOCw0MiArMjExNyw1MCBAQAogfQogCiAvKioKKyAqIGJueDJ4X3NldF9wYmRfY3N1bV9lMiAtIHVwZGF0ZSBQQkQgd2l0aCBjaGVja3N1bSBhbmQgcmV0dXJuIGhlYWRlciBsZW5ndGgKICAqCi0gKiBAcGFyYW0gc2tiCi0gKiBAcGFyYW0gdHhfc3RhcnRfYmQKLSAqIEBwYXJhbSBwYmRfZTIKLSAqIEBwYXJhbSB4bWl0X3R5cGUKKyAqIEBicDoJCQlkcml2ZXIgaGFuZGxlCisgKiBAc2tiOgkJcGFja2V0IHNrYgorICogQHBhcnNpbmdfZGF0YToJZGF0YSB0byBiZSB1cGRhdGVkCisgKiBAeG1pdF90eXBlOgkJeG1pdCBmbGFncwogICoKLSAqIEByZXR1cm4gaGVhZGVyIGxlbgorICogNTc3MTIgcmVsYXRlZAogICovCiBzdGF0aWMgaW5saW5lICB1OCBibngyeF9zZXRfcGJkX2NzdW1fZTIoc3RydWN0IGJueDJ4ICpicCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAl1MzIgKnBhcnNpbmdfZGF0YSwgdTMyIHhtaXRfdHlwZSkKIHsKLQkqcGFyc2luZ19kYXRhIHw9ICgodGNwX2hkcmxlbihza2IpLzQpIDw8Ci0JCUVUSF9UWF9QQVJTRV9CRF9FMl9UQ1BfSERSX0xFTkdUSF9EV19TSElGVCkgJgotCQlFVEhfVFhfUEFSU0VfQkRfRTJfVENQX0hEUl9MRU5HVEhfRFc7CisJKnBhcnNpbmdfZGF0YSB8PQorCQkJKCgoKHU4ICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSAtIHNrYi0+ZGF0YSkgPj4gMSkgPDwKKwkJCUVUSF9UWF9QQVJTRV9CRF9FMl9UQ1BfSERSX1NUQVJUX09GRlNFVF9XX1NISUZUKSAmCisJCQlFVEhfVFhfUEFSU0VfQkRfRTJfVENQX0hEUl9TVEFSVF9PRkZTRVRfVzsKIAotCSpwYXJzaW5nX2RhdGEgfD0gKCgoKHU4ICopdGNwX2hkcihza2IpIC0gc2tiLT5kYXRhKSAvIDIpIDw8Ci0JCUVUSF9UWF9QQVJTRV9CRF9FMl9UQ1BfSERSX1NUQVJUX09GRlNFVF9XX1NISUZUKSAmCi0JCUVUSF9UWF9QQVJTRV9CRF9FMl9UQ1BfSERSX1NUQVJUX09GRlNFVF9XOworCWlmICh4bWl0X3R5cGUgJiBYTUlUX0NTVU1fVENQKSB7CisJCSpwYXJzaW5nX2RhdGEgfD0gKCh0Y3BfaGRybGVuKHNrYikgLyA0KSA8PAorCQkJRVRIX1RYX1BBUlNFX0JEX0UyX1RDUF9IRFJfTEVOR1RIX0RXX1NISUZUKSAmCisJCQlFVEhfVFhfUEFSU0VfQkRfRTJfVENQX0hEUl9MRU5HVEhfRFc7CiAKLQlyZXR1cm4gc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSArIHRjcF9oZHJsZW4oc2tiKSAtIHNrYi0+ZGF0YTsKKwkJcmV0dXJuIHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYikgKyB0Y3BfaGRybGVuKHNrYikgLSBza2ItPmRhdGE7CisJfSBlbHNlCisJCS8qIFdlIHN1cHBvcnQgY2hlY2tzdW0gb2ZmbG9hZCBmb3IgVENQIGFuZCBVRFAgb25seS4KKwkJICogTm8gbmVlZCB0byBwYXNzIHRoZSBVRFAgaGVhZGVyIGxlbmd0aCAtIGl0J3MgYSBjb25zdGFudC4KKwkJICovCisJCXJldHVybiBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpICsKKwkJCQlzaXplb2Yoc3RydWN0IHVkcGhkcikgLSBza2ItPmRhdGE7CiB9CiAKIC8qKgorICogYm54Mnhfc2V0X3BiZF9jc3VtIC0gdXBkYXRlIFBCRCB3aXRoIGNoZWNrc3VtIGFuZCByZXR1cm4gaGVhZGVyIGxlbmd0aAogICoKLSAqIEBwYXJhbSBza2IKLSAqIEBwYXJhbSB0eF9zdGFydF9iZAotICogQHBhcmFtIHBiZAotICogQHBhcmFtIHhtaXRfdHlwZQotICoKLSAqIEByZXR1cm4gSGVhZGVyIGxlbmd0aAorICogQGJwOgkJZHJpdmVyIGhhbmRsZQorICogQHNrYjoJcGFja2V0IHNrYgorICogQHBiZDoJcGFyc2UgQkQgdG8gYmUgdXBkYXRlZAorICogQHhtaXRfdHlwZToJeG1pdCBmbGFncwogICovCiBzdGF0aWMgaW5saW5lIHU4IGJueDJ4X3NldF9wYmRfY3N1bShzdHJ1Y3QgYm54MnggKmJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXN0cnVjdCBldGhfdHhfcGFyc2VfYmRfZTF4ICpwYmQsCiAJdTMyIHhtaXRfdHlwZSkKIHsKLQl1OCBobGVuID0gKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpIC0gc2tiLT5kYXRhKSAvIDI7CisJdTggaGxlbiA9IChza2JfbmV0d29ya19oZWFkZXIoc2tiKSAtIHNrYi0+ZGF0YSkgPj4gMTsKIAogCS8qIGZvciBub3cgTlMgZmxhZyBpcyBub3QgdXNlZCBpbiBMaW51eCAqLwogCXBiZC0+Z2xvYmFsX2RhdGEgPQpAQCAtMjA1MSw5ICsyMTY4LDE1IEBACiAJCQkgRVRIX1RYX1BBUlNFX0JEX0UxWF9MTENfU05BUF9FTl9TSElGVCkpOwogCiAJcGJkLT5pcF9obGVuX3cgPSAoc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSAtCi0JCQlza2JfbmV0d29ya19oZWFkZXIoc2tiKSkgLyAyOworCQkJc2tiX25ldHdvcmtfaGVhZGVyKHNrYikpID4+IDE7CiAKLQlobGVuICs9IHBiZC0+aXBfaGxlbl93ICsgdGNwX2hkcmxlbihza2IpIC8gMjsKKwlobGVuICs9IHBiZC0+aXBfaGxlbl93OworCisJLyogV2Ugc3VwcG9ydCBjaGVja3N1bSBvZmZsb2FkIGZvciBUQ1AgYW5kIFVEUCBvbmx5ICovCisJaWYgKHhtaXRfdHlwZSAmIFhNSVRfQ1NVTV9UQ1ApCisJCWhsZW4gKz0gdGNwX2hkcmxlbihza2IpIC8gMjsKKwllbHNlCisJCWhsZW4gKz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpIC8gMjsKIAogCXBiZC0+dG90YWxfaGxlbl93ID0gY3B1X3RvX2xlMTYoaGxlbik7CiAJaGxlbiA9IGhsZW4qMjsKQEAgLTIzNzksNiArMjUwMiwyMzIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgYm54MnhfZnJlZV9mcF9tZW1fYXQoc3RydWN0IGJueDJ4ICpicCwgaW50IGZwX2luZGV4KQoreworCXVuaW9uIGhvc3RfaGNfc3RhdHVzX2Jsb2NrICpzYiA9ICZibngyeF9mcChicCwgZnBfaW5kZXgsIHN0YXR1c19ibGspOworCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ZwX2luZGV4XTsKKworCS8qIENvbW1vbiAqLworI2lmZGVmIEJDTV9DTklDCisJaWYgKElTX0ZDT0VfSURYKGZwX2luZGV4KSkgeworCQltZW1zZXQoc2IsIDAsIHNpemVvZih1bmlvbiBob3N0X2hjX3N0YXR1c19ibG9jaykpOworCQlmcC0+c3RhdHVzX2Jsa19tYXBwaW5nID0gMDsKKworCX0gZWxzZSB7CisjZW5kaWYKKwkJLyogc3RhdHVzIGJsb2NrcyAqLworCQlpZiAoQ0hJUF9JU19FMihicCkpCisJCQlCTlgyWF9QQ0lfRlJFRShzYi0+ZTJfc2IsCisJCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBmcF9pbmRleCwKKwkJCQkJCXN0YXR1c19ibGtfbWFwcGluZyksCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaG9zdF9oY19zdGF0dXNfYmxvY2tfZTIpKTsKKwkJZWxzZQorCQkJQk5YMlhfUENJX0ZSRUUoc2ItPmUxeF9zYiwKKwkJCQkgICAgICAgYm54MnhfZnAoYnAsIGZwX2luZGV4LAorCQkJCQkJc3RhdHVzX2Jsa19tYXBwaW5nKSwKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBob3N0X2hjX3N0YXR1c19ibG9ja19lMXgpKTsKKyNpZmRlZiBCQ01fQ05JQworCX0KKyNlbmRpZgorCS8qIFJ4ICovCisJaWYgKCFza2lwX3J4X3F1ZXVlKGJwLCBmcF9pbmRleCkpIHsKKwkJYm54MnhfZnJlZV9yeF9iZHMoZnApOworCisJCS8qIGZhc3RwYXRoIHJ4IHJpbmdzOiByeF9idWYgcnhfZGVzYyByeF9jb21wICovCisJCUJOWDJYX0ZSRUUoYm54MnhfZnAoYnAsIGZwX2luZGV4LCByeF9idWZfcmluZykpOworCQlCTlgyWF9QQ0lfRlJFRShibngyeF9mcChicCwgZnBfaW5kZXgsIHJ4X2Rlc2NfcmluZyksCisJCQkgICAgICAgYm54MnhfZnAoYnAsIGZwX2luZGV4LCByeF9kZXNjX21hcHBpbmcpLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZXRoX3J4X2JkKSAqIE5VTV9SWF9CRCk7CisKKwkJQk5YMlhfUENJX0ZSRUUoYm54MnhfZnAoYnAsIGZwX2luZGV4LCByeF9jb21wX3JpbmcpLAorCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBmcF9pbmRleCwgcnhfY29tcF9tYXBwaW5nKSwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGV0aF9mYXN0X3BhdGhfcnhfY3FlKSAqCisJCQkgICAgICAgTlVNX1JDUV9CRCk7CisKKwkJLyogU0dFIHJpbmcgKi8KKwkJQk5YMlhfRlJFRShibngyeF9mcChicCwgZnBfaW5kZXgsIHJ4X3BhZ2VfcmluZykpOworCQlCTlgyWF9QQ0lfRlJFRShibngyeF9mcChicCwgZnBfaW5kZXgsIHJ4X3NnZV9yaW5nKSwKKwkJCSAgICAgICBibngyeF9mcChicCwgZnBfaW5kZXgsIHJ4X3NnZV9tYXBwaW5nKSwKKwkJCSAgICAgICBCQ01fUEFHRV9TSVpFICogTlVNX1JYX1NHRV9QQUdFUyk7CisJfQorCisJLyogVHggKi8KKwlpZiAoIXNraXBfdHhfcXVldWUoYnAsIGZwX2luZGV4KSkgeworCQkvKiBmYXN0cGF0aCB0eCByaW5nczogdHhfYnVmIHR4X2Rlc2MgKi8KKwkJQk5YMlhfRlJFRShibngyeF9mcChicCwgZnBfaW5kZXgsIHR4X2J1Zl9yaW5nKSk7CisJCUJOWDJYX1BDSV9GUkVFKGJueDJ4X2ZwKGJwLCBmcF9pbmRleCwgdHhfZGVzY19yaW5nKSwKKwkJCSAgICAgICBibngyeF9mcChicCwgZnBfaW5kZXgsIHR4X2Rlc2NfbWFwcGluZyksCisJCQkgICAgICAgc2l6ZW9mKHVuaW9uIGV0aF90eF9iZF90eXBlcykgKiBOVU1fVFhfQkQpOworCX0KKwkvKiBlbmQgb2YgZmFzdHBhdGggKi8KK30KKwordm9pZCBibngyeF9mcmVlX2ZwX21lbShzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBpOworCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKQorCQlibngyeF9mcmVlX2ZwX21lbV9hdChicCwgaSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc2Jfc2hvcnRjdXRzKHN0cnVjdCBibngyeCAqYnAsIGludCBpbmRleCkKK3sKKwl1bmlvbiBob3N0X2hjX3N0YXR1c19ibG9jayBzdGF0dXNfYmxrID0gYm54MnhfZnAoYnAsIGluZGV4LCBzdGF0dXNfYmxrKTsKKwlpZiAoQ0hJUF9JU19FMihicCkpIHsKKwkJYm54MnhfZnAoYnAsIGluZGV4LCBzYl9pbmRleF92YWx1ZXMpID0KKwkJCShfX2xlMTYgKilzdGF0dXNfYmxrLmUyX3NiLT5zYi5pbmRleF92YWx1ZXM7CisJCWJueDJ4X2ZwKGJwLCBpbmRleCwgc2JfcnVubmluZ19pbmRleCkgPQorCQkJKF9fbGUxNiAqKXN0YXR1c19ibGsuZTJfc2ItPnNiLnJ1bm5pbmdfaW5kZXg7CisJfSBlbHNlIHsKKwkJYm54MnhfZnAoYnAsIGluZGV4LCBzYl9pbmRleF92YWx1ZXMpID0KKwkJCShfX2xlMTYgKilzdGF0dXNfYmxrLmUxeF9zYi0+c2IuaW5kZXhfdmFsdWVzOworCQlibngyeF9mcChicCwgaW5kZXgsIHNiX3J1bm5pbmdfaW5kZXgpID0KKwkJCShfX2xlMTYgKilzdGF0dXNfYmxrLmUxeF9zYi0+c2IucnVubmluZ19pbmRleDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYm54MnhfYWxsb2NfZnBfbWVtX2F0KHN0cnVjdCBibngyeCAqYnAsIGludCBpbmRleCkKK3sKKwl1bmlvbiBob3N0X2hjX3N0YXR1c19ibG9jayAqc2I7CisJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaW5kZXhdOworCWludCByaW5nX3NpemUgPSAwOworCisJLyogaWYgcnhfcmluZ19zaXplIHNwZWNpZmllZCAtIHVzZSBpdCAqLworCWludCByeF9yaW5nX3NpemUgPSBicC0+cnhfcmluZ19zaXplID8gYnAtPnJ4X3Jpbmdfc2l6ZSA6CisJCQkgICBNQVhfUlhfQVZBSUwvYnAtPm51bV9xdWV1ZXM7CisKKwkvKiBhbGxvY2F0ZSBhdCBsZWFzdCBudW1iZXIgb2YgYnVmZmVycyByZXF1aXJlZCBieSBGVyAqLworCXJ4X3Jpbmdfc2l6ZSA9IG1heF90KGludCwgZnAtPmRpc2FibGVfdHBhID8gTUlOX1JYX1NJWkVfTk9OVFBBIDoKKwkJCQkJCSAgICBNSU5fUlhfU0laRV9UUEEsCisJCQkJICByeF9yaW5nX3NpemUpOworCisJYm54MnhfZnAoYnAsIGluZGV4LCBicCkgPSBicDsKKwlibngyeF9mcChicCwgaW5kZXgsIGluZGV4KSA9IGluZGV4OworCisJLyogQ29tbW9uICovCisJc2IgPSAmYm54MnhfZnAoYnAsIGluZGV4LCBzdGF0dXNfYmxrKTsKKyNpZmRlZiBCQ01fQ05JQworCWlmICghSVNfRkNPRV9JRFgoaW5kZXgpKSB7CisjZW5kaWYKKwkJLyogc3RhdHVzIGJsb2NrcyAqLworCQlpZiAoQ0hJUF9JU19FMihicCkpCisJCQlCTlgyWF9QQ0lfQUxMT0Moc2ItPmUyX3NiLAorCQkJCSZibngyeF9mcChicCwgaW5kZXgsIHN0YXR1c19ibGtfbWFwcGluZyksCisJCQkJc2l6ZW9mKHN0cnVjdCBob3N0X2hjX3N0YXR1c19ibG9ja19lMikpOworCQllbHNlCisJCQlCTlgyWF9QQ0lfQUxMT0Moc2ItPmUxeF9zYiwKKwkJCQkmYm54MnhfZnAoYnAsIGluZGV4LCBzdGF0dXNfYmxrX21hcHBpbmcpLAorCQkJICAgIHNpemVvZihzdHJ1Y3QgaG9zdF9oY19zdGF0dXNfYmxvY2tfZTF4KSk7CisjaWZkZWYgQkNNX0NOSUMKKwl9CisjZW5kaWYKKwlzZXRfc2Jfc2hvcnRjdXRzKGJwLCBpbmRleCk7CisKKwkvKiBUeCAqLworCWlmICghc2tpcF90eF9xdWV1ZShicCwgaW5kZXgpKSB7CisJCS8qIGZhc3RwYXRoIHR4IHJpbmdzOiB0eF9idWYgdHhfZGVzYyAqLworCQlCTlgyWF9BTExPQyhibngyeF9mcChicCwgaW5kZXgsIHR4X2J1Zl9yaW5nKSwKKwkJCQlzaXplb2Yoc3RydWN0IHN3X3R4X2JkKSAqIE5VTV9UWF9CRCk7CisJCUJOWDJYX1BDSV9BTExPQyhibngyeF9mcChicCwgaW5kZXgsIHR4X2Rlc2NfcmluZyksCisJCQkJJmJueDJ4X2ZwKGJwLCBpbmRleCwgdHhfZGVzY19tYXBwaW5nKSwKKwkJCQlzaXplb2YodW5pb24gZXRoX3R4X2JkX3R5cGVzKSAqIE5VTV9UWF9CRCk7CisJfQorCisJLyogUnggKi8KKwlpZiAoIXNraXBfcnhfcXVldWUoYnAsIGluZGV4KSkgeworCQkvKiBmYXN0cGF0aCByeCByaW5nczogcnhfYnVmIHJ4X2Rlc2MgcnhfY29tcCAqLworCQlCTlgyWF9BTExPQyhibngyeF9mcChicCwgaW5kZXgsIHJ4X2J1Zl9yaW5nKSwKKwkJCQlzaXplb2Yoc3RydWN0IHN3X3J4X2JkKSAqIE5VTV9SWF9CRCk7CisJCUJOWDJYX1BDSV9BTExPQyhibngyeF9mcChicCwgaW5kZXgsIHJ4X2Rlc2NfcmluZyksCisJCQkJJmJueDJ4X2ZwKGJwLCBpbmRleCwgcnhfZGVzY19tYXBwaW5nKSwKKwkJCQlzaXplb2Yoc3RydWN0IGV0aF9yeF9iZCkgKiBOVU1fUlhfQkQpOworCisJCUJOWDJYX1BDSV9BTExPQyhibngyeF9mcChicCwgaW5kZXgsIHJ4X2NvbXBfcmluZyksCisJCQkJJmJueDJ4X2ZwKGJwLCBpbmRleCwgcnhfY29tcF9tYXBwaW5nKSwKKwkJCQlzaXplb2Yoc3RydWN0IGV0aF9mYXN0X3BhdGhfcnhfY3FlKSAqCisJCQkJTlVNX1JDUV9CRCk7CisKKwkJLyogU0dFIHJpbmcgKi8KKwkJQk5YMlhfQUxMT0MoYm54MnhfZnAoYnAsIGluZGV4LCByeF9wYWdlX3JpbmcpLAorCQkJCXNpemVvZihzdHJ1Y3Qgc3dfcnhfcGFnZSkgKiBOVU1fUlhfU0dFKTsKKwkJQk5YMlhfUENJX0FMTE9DKGJueDJ4X2ZwKGJwLCBpbmRleCwgcnhfc2dlX3JpbmcpLAorCQkJCSZibngyeF9mcChicCwgaW5kZXgsIHJ4X3NnZV9tYXBwaW5nKSwKKwkJCQlCQ01fUEFHRV9TSVpFICogTlVNX1JYX1NHRV9QQUdFUyk7CisJCS8qIFJYIEJEIHJpbmcgKi8KKwkJYm54Mnhfc2V0X25leHRfcGFnZV9yeF9iZChmcCk7CisKKwkJLyogQ1EgcmluZyAqLworCQlibngyeF9zZXRfbmV4dF9wYWdlX3J4X2NxKGZwKTsKKworCQkvKiBCRHMgKi8KKwkJcmluZ19zaXplID0gYm54MnhfYWxsb2NfcnhfYmRzKGZwLCByeF9yaW5nX3NpemUpOworCQlpZiAocmluZ19zaXplIDwgcnhfcmluZ19zaXplKQorCQkJZ290byBhbGxvY19tZW1fZXJyOworCX0KKworCXJldHVybiAwOworCisvKiBoYW5kbGVzIGxvdyBtZW1vcnkgY2FzZXMgKi8KK2FsbG9jX21lbV9lcnI6CisJQk5YMlhfRVJSKCJVbmFibGUgdG8gYWxsb2NhdGUgZnVsbCBtZW1vcnkgZm9yIHF1ZXVlICVkIChzaXplICVkKVxuIiwKKwkJCQkJCWluZGV4LCByaW5nX3NpemUpOworCS8qIEZXIHdpbGwgZHJvcCBhbGwgcGFja2V0cyBpZiBxdWV1ZSBpcyBub3QgYmlnIGVub3VnaCwKKwkgKiBJbiB0aGVzZSBjYXNlcyB3ZSBkaXNhYmxlIHRoZSBxdWV1ZQorCSAqIE1pbiBzaXplIGRpZmVyZW50IGZvciBUUEEgYW5kIG5vbi1UUEEgcXVldWVzCisJICovCisJaWYgKHJpbmdfc2l6ZSA8IChmcC0+ZGlzYWJsZV90cGEgPworCQkJCU1JTl9SWF9TSVpFX1RQQSA6IE1JTl9SWF9TSVpFX05PTlRQQSkpIHsKKwkJCS8qIHJlbGVhc2UgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhpcyBxdWV1ZSAqLworCQkJYm54MnhfZnJlZV9mcF9tZW1fYXQoYnAsIGluZGV4KTsKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGJueDJ4X2FsbG9jX2ZwX21lbShzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBpOworCisJLyoqCisJICogMS4gQWxsb2NhdGUgRlAgZm9yIGxlYWRpbmcgLSBmYXRhbCBpZiBlcnJvcgorCSAqIDIuIHtDTklDfSBBbGxvY2F0ZSBGQ29FIEZQIC0gZmF0YWwgaWYgZXJyb3IKKwkgKiAzLiBBbGxvY2F0ZSBSU1MgLSBmaXggbnVtYmVyIG9mIHF1ZXVlcyBpZiBlcnJvcgorCSAqLworCisJLyogbGVhZGluZyAqLworCWlmIChibngyeF9hbGxvY19mcF9tZW1fYXQoYnAsIDApKQorCQlyZXR1cm4gLUVOT01FTTsKKyNpZmRlZiBCQ01fQ05JQworCS8qIEZDb0UgKi8KKwlpZiAoYm54MnhfYWxsb2NfZnBfbWVtX2F0KGJwLCBGQ09FX0lEWCkpCisJCXJldHVybiAtRU5PTUVNOworI2VuZGlmCisJLyogUlNTICovCisJZm9yX2VhY2hfbm9uZGVmYXVsdF9ldGhfcXVldWUoYnAsIGkpCisJCWlmIChibngyeF9hbGxvY19mcF9tZW1fYXQoYnAsIGkpKQorCQkJYnJlYWs7CisKKwkvKiBoYW5kbGUgbWVtb3J5IGZhaWx1cmVzICovCisJaWYgKGkgIT0gQk5YMlhfTlVNX0VUSF9RVUVVRVMoYnApKSB7CisJCWludCBkZWx0YSA9IEJOWDJYX05VTV9FVEhfUVVFVUVTKGJwKSAtIGk7CisKKwkJV0FSTl9PTihkZWx0YSA8IDApOworI2lmZGVmIEJDTV9DTklDCisJCS8qKgorCQkgKiBtb3ZlIG5vbiBldGggRlBzIG5leHQgdG8gbGFzdCBldGggRlAKKwkJICogbXVzdCBiZSBkb25lIGluIHRoYXQgb3JkZXIKKwkJICogRkNPRV9JRFggPCBGV0RfSURYIDwgT09PX0lEWAorCQkgKi8KKworCQkvKiBtb3ZlIEZDb0UgZnAgKi8KKwkJYm54MnhfbW92ZV9mcChicCwgRkNPRV9JRFgsIEZDT0VfSURYIC0gZGVsdGEpOworI2VuZGlmCisJCWJwLT5udW1fcXVldWVzIC09IGRlbHRhOworCQlCTlgyWF9FUlIoIkFkanVzdGVkIG51bSBvZiBxdWV1ZXMgZnJvbSAlZCB0byAlZFxuIiwKKwkJCSAgYnAtPm51bV9xdWV1ZXMgKyBkZWx0YSwgYnAtPm51bV9xdWV1ZXMpOworCX0KKworCXJldHVybiAwOworfQogCiBzdGF0aWMgaW50IGJueDJ4X3NldHVwX2lycXMoc3RydWN0IGJueDJ4ICpicCkKIHsKQEAgLTI0NDMsMTEgKzI3OTIsMjEgQEAKIAogfQogCitzdGF0aWMgaW50IGJueDJ4X3JlbG9hZF9pZl9ydW5uaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAodW5saWtlbHkoIW5ldGlmX3J1bm5pbmcoZGV2KSkpCisJCXJldHVybiAwOworCisJYm54MnhfbmljX3VubG9hZChicCwgVU5MT0FEX05PUk1BTCk7CisJcmV0dXJuIGJueDJ4X25pY19sb2FkKGJwLCBMT0FEX05PUk1BTCk7Cit9CisKIC8qIGNhbGxlZCB3aXRoIHJ0bmxfbG9jayAqLwogaW50IGJueDJ4X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IHJjID0gMDsKIAogCWlmIChicC0+cmVjb3Zlcnlfc3RhdGUgIT0gQk5YMlhfUkVDT1ZFUllfRE9ORSkgewogCQlwcmludGsoS0VSTl9FUlIgIkhhbmRsaW5nIHBhcml0eSBlcnJvciByZWNvdmVyeS4gVHJ5IGFnYWluIGxhdGVyXG4iKTsKQEAgLTI0NjQsMTIgKzI4MjMsNTUgQEAKIAkgKi8KIAlkZXYtPm10dSA9IG5ld19tdHU7CiAKLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7Ci0JCWJueDJ4X25pY191bmxvYWQoYnAsIFVOTE9BRF9OT1JNQUwpOwotCQlyYyA9IGJueDJ4X25pY19sb2FkKGJwLCBMT0FEX05PUk1BTCk7CisJcmV0dXJuIGJueDJ4X3JlbG9hZF9pZl9ydW5uaW5nKGRldik7Cit9CisKK3UzMiBibngyeF9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZlYXR1cmVzKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJLyogVFBBIHJlcXVpcmVzIFJ4IENTVU0gb2ZmbG9hZGluZyAqLworCWlmICghKGZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pIHx8IGJwLT5kaXNhYmxlX3RwYSkKKwkJZmVhdHVyZXMgJj0gfk5FVElGX0ZfTFJPOworCisJcmV0dXJuIGZlYXR1cmVzOworfQorCitpbnQgYm54Mnhfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgZmxhZ3MgPSBicC0+ZmxhZ3M7CisJYm9vbCBibngyeF9yZWxvYWQgPSBmYWxzZTsKKworCWlmIChmZWF0dXJlcyAmIE5FVElGX0ZfTFJPKQorCQlmbGFncyB8PSBUUEFfRU5BQkxFX0ZMQUc7CisJZWxzZQorCQlmbGFncyAmPSB+VFBBX0VOQUJMRV9GTEFHOworCisJaWYgKGZlYXR1cmVzICYgTkVUSUZfRl9MT09QQkFDSykgeworCQlpZiAoYnAtPmxpbmtfcGFyYW1zLmxvb3BiYWNrX21vZGUgIT0gTE9PUEJBQ0tfQk1BQykgeworCQkJYnAtPmxpbmtfcGFyYW1zLmxvb3BiYWNrX21vZGUgPSBMT09QQkFDS19CTUFDOworCQkJYm54MnhfcmVsb2FkID0gdHJ1ZTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChicC0+bGlua19wYXJhbXMubG9vcGJhY2tfbW9kZSAhPSBMT09QQkFDS19OT05FKSB7CisJCQlicC0+bGlua19wYXJhbXMubG9vcGJhY2tfbW9kZSA9IExPT1BCQUNLX05PTkU7CisJCQlibngyeF9yZWxvYWQgPSB0cnVlOworCQl9CiAJfQogCi0JcmV0dXJuIHJjOworCWlmIChmbGFncyBeIGJwLT5mbGFncykgeworCQlicC0+ZmxhZ3MgPSBmbGFnczsKKwkJYm54MnhfcmVsb2FkID0gdHJ1ZTsKKwl9CisKKwlpZiAoYm54MnhfcmVsb2FkKSB7CisJCWlmIChicC0+cmVjb3Zlcnlfc3RhdGUgPT0gQk5YMlhfUkVDT1ZFUllfRE9ORSkKKwkJCXJldHVybiBibngyeF9yZWxvYWRfaWZfcnVubmluZyhkZXYpOworCQkvKiBlbHNlOiBibngyeF9uaWNfbG9hZCgpIHdpbGwgYmUgY2FsbGVkIGF0IGVuZCBvZiByZWNvdmVyeSAqLworCX0KKworCXJldHVybiAwOwogfQogCiB2b2lkIGJueDJ4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2Ntbi5oIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmgKaW5kZXggZWYzN2I5OC4uZmFiMTYxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmgKQEAgLTEsNiArMSw2IEBACiAvKiBibngyeF9jbW4uaDogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTEgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTI1LDI2MCArMjUsMjc3IEBACiAKIGV4dGVybiBpbnQgbnVtX3F1ZXVlczsKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKiBNYWNyb3MgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEJOWDJYX1BDSV9GUkVFKHgsIHksIHNpemUpIFwKKwlkbyB7IFwKKwkJaWYgKHgpIHsgXAorCQkJZG1hX2ZyZWVfY29oZXJlbnQoJmJwLT5wZGV2LT5kZXYsIHNpemUsICh2b2lkICopeCwgeSk7IFwKKwkJCXggPSBOVUxMOyBcCisJCQl5ID0gMDsgXAorCQl9IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIEJOWDJYX0ZSRUUoeCkgXAorCWRvIHsgXAorCQlpZiAoeCkgeyBcCisJCQlrZnJlZSgodm9pZCAqKXgpOyBcCisJCQl4ID0gTlVMTDsgXAorCQl9IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIEJOWDJYX1BDSV9BTExPQyh4LCB5LCBzaXplKSBcCisJZG8geyBcCisJCXggPSBkbWFfYWxsb2NfY29oZXJlbnQoJmJwLT5wZGV2LT5kZXYsIHNpemUsIHksIEdGUF9LRVJORUwpOyBcCisJCWlmICh4ID09IE5VTEwpIFwKKwkJCWdvdG8gYWxsb2NfbWVtX2VycjsgXAorCQltZW1zZXQoKHZvaWQgKil4LCAwLCBzaXplKTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgQk5YMlhfQUxMT0MoeCwgc2l6ZSkgXAorCWRvIHsgXAorCQl4ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsgXAorCQlpZiAoeCA9PSBOVUxMKSBcCisJCQlnb3RvIGFsbG9jX21lbV9lcnI7IFwKKwl9IHdoaWxlICgwKQorCiAvKioqKioqKioqKioqKioqKioqKioqKiogSW50ZXJmYWNlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgRnVuY3Rpb25zIHRoYXQgbmVlZCB0byBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIGRyaXZlciB2ZXJzaW9uCiAgKi8KIAogLyoqCi0gKiBJbml0aWFsaXplIGxpbmsgcGFyYW1ldGVycyBzdHJ1Y3R1cmUgdmFyaWFibGVzLgorICogYm54MnhfaW5pdGlhbF9waHlfaW5pdCAtIGluaXRpYWxpemUgbGluayBwYXJhbWV0ZXJzIHN0cnVjdHVyZSB2YXJpYWJsZXMuCiAgKgotICogQHBhcmFtIGJwCi0gKiBAcGFyYW0gbG9hZF9tb2RlCi0gKgotICogQHJldHVybiB1OAorICogQGJwOgkJZHJpdmVyIGhhbmRsZQorICogQGxvYWRfbW9kZToJY3VycmVudCBtb2RlCiAgKi8KIHU4IGJueDJ4X2luaXRpYWxfcGh5X2luaXQoc3RydWN0IGJueDJ4ICpicCwgaW50IGxvYWRfbW9kZSk7CiAKIC8qKgotICogQ29uZmlndXJlIGh3IGFjY29yZGluZyB0byBsaW5rIHBhcmFtZXRlcnMgc3RydWN0dXJlLgorICogYm54MnhfbGlua19zZXQgLSBjb25maWd1cmUgaHcgYWNjb3JkaW5nIHRvIGxpbmsgcGFyYW1ldGVycyBzdHJ1Y3R1cmUuCiAgKgotICogQHBhcmFtIGJwCisgKiBAYnA6CQlkcml2ZXIgaGFuZGxlCiAgKi8KIHZvaWQgYm54MnhfbGlua19zZXQoc3RydWN0IGJueDJ4ICpicCk7CiAKIC8qKgotICogUXVlcnkgbGluayBzdGF0dXMKKyAqIGJueDJ4X2xpbmtfdGVzdCAtIHF1ZXJ5IGxpbmsgc3RhdHVzLgogICoKLSAqIEBwYXJhbSBicAotICogQHBhcmFtIGlzX3NlcmRlcworICogQGJwOgkJZHJpdmVyIGhhbmRsZQorICogQGlzX3NlcmRlczoJYm9vbAogICoKLSAqIEByZXR1cm4gMCAtIGxpbmsgaXMgVVAKKyAqIFJldHVybnMgMCBpZiBsaW5rIGlzIFVQLgogICovCiB1OCBibngyeF9saW5rX3Rlc3Qoc3RydWN0IGJueDJ4ICpicCwgdTggaXNfc2VyZGVzKTsKIAogLyoqCi0gKiBIYW5kbGVzIGxpbmsgc3RhdHVzIGNoYW5nZQorICogYm54MnhfX2xpbmtfc3RhdHVzX3VwZGF0ZSAtIGhhbmRsZXMgbGluayBzdGF0dXMgY2hhbmdlLgogICoKLSAqIEBwYXJhbSBicAorICogQGJwOgkJZHJpdmVyIGhhbmRsZQogICovCiB2b2lkIGJueDJ4X19saW5rX3N0YXR1c191cGRhdGUoc3RydWN0IGJueDJ4ICpicCk7CiAKIC8qKgotICogUmVwb3J0IGxpbmsgc3RhdHVzIHRvIHVwcGVyIGxheWVyCisgKiBibngyeF9saW5rX3JlcG9ydCAtIHJlcG9ydCBsaW5rIHN0YXR1cyB0byB1cHBlciBsYXllci4KICAqCi0gKiBAcGFyYW0gYnAKLSAqCi0gKiBAcmV0dXJuIGludAorICogQGJwOgkJZHJpdmVyIGhhbmRsZQogICovCiB2b2lkIGJueDJ4X2xpbmtfcmVwb3J0KHN0cnVjdCBibngyeCAqYnApOwogCisvKiBOb25lLWF0b21pYyB2ZXJzaW9uIG9mIGJueDJ4X2xpbmtfcmVwb3J0KCkgKi8KK3ZvaWQgX19ibngyeF9saW5rX3JlcG9ydChzdHJ1Y3QgYm54MnggKmJwKTsKKwogLyoqCi0gKiBjYWxjdWxhdGVzIE1GIHNwZWVkIGFjY29yZGluZyB0byBjdXJyZW50IGxpbmVzcGVlZCBhbmQgTUYKLSAqIGNvbmZpZ3VyYXRpb24KKyAqIGJueDJ4X2dldF9tZl9zcGVlZCAtIGNhbGN1bGF0ZSBNRiBzcGVlZC4KICAqCi0gKiBAcGFyYW0gYnAKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKICAqCi0gKiBAcmV0dXJuIHUxNgorICogVGFrZXMgaW50byBhY2NvdW50IGN1cnJlbnQgbGluZXNwZWVkIGFuZCBNRiBjb25maWd1cmF0aW9uLgogICovCiB1MTYgYm54MnhfZ2V0X21mX3NwZWVkKHN0cnVjdCBibngyeCAqYnApOwogCiAvKioKLSAqIE1TSS1YIHNsb3dwYXRoIGludGVycnVwdCBoYW5kbGVyCisgKiBibngyeF9tc2l4X3NwX2ludCAtIE1TSS1YIHNsb3dwYXRoIGludGVycnVwdCBoYW5kbGVyCiAgKgotICogQHBhcmFtIGlycQotICogQHBhcmFtIGRldl9pbnN0YW5jZQotICoKLSAqIEByZXR1cm4gaXJxcmV0dXJuX3QKKyAqIEBpcnE6CQlpcnEgbnVtYmVyCisgKiBAZGV2X2luc3RhbmNlOglwcml2YXRlIGluc3RhbmNlCiAgKi8KIGlycXJldHVybl90IGJueDJ4X21zaXhfc3BfaW50KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSk7CiAKIC8qKgotICogbm9uIE1TSS1YIGludGVycnVwdCBoYW5kbGVyCisgKiBibngyeF9pbnRlcnJ1cHQgLSBub24gTVNJLVggaW50ZXJydXB0IGhhbmRsZXIKICAqCi0gKiBAcGFyYW0gaXJxCi0gKiBAcGFyYW0gZGV2X2luc3RhbmNlCi0gKgotICogQHJldHVybiBpcnFyZXR1cm5fdAorICogQGlycToJCWlycSBudW1iZXIKKyAqIEBkZXZfaW5zdGFuY2U6CXByaXZhdGUgaW5zdGFuY2UKICAqLwogaXJxcmV0dXJuX3QgYm54MnhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSk7CiAjaWZkZWYgQkNNX0NOSUMKIAogLyoqCi0gKiBTZW5kIGNvbW1hbmQgdG8gY25pYyBkcml2ZXIKKyAqIGJueDJ4X2NuaWNfbm90aWZ5IC0gc2VuZCBjb21tYW5kIHRvIGNuaWMgZHJpdmVyCiAgKgotICogQHBhcmFtIGJwCi0gKiBAcGFyYW0gY21kCisgKiBAYnA6CQlkcml2ZXIgaGFuZGxlCisgKiBAY21kOgljb21tYW5kCiAgKi8KIGludCBibngyeF9jbmljX25vdGlmeShzdHJ1Y3QgYm54MnggKmJwLCBpbnQgY21kKTsKIAogLyoqCi0gKiBQcm92aWRlcyBjbmljIGluZm9ybWF0aW9uIGZvciBwcm9wZXIgaW50ZXJydXB0IGhhbmRsaW5nCisgKiBibngyeF9zZXR1cF9jbmljX2lycV9pbmZvIC0gcHJvdmlkZXMgY25pYyB3aXRoIElSUSBpbmZvcm1hdGlvbgogICoKLSAqIEBwYXJhbSBicAorICogQGJwOgkJZHJpdmVyIGhhbmRsZQogICovCiB2b2lkIGJueDJ4X3NldHVwX2NuaWNfaXJxX2luZm8oc3RydWN0IGJueDJ4ICpicCk7CiAjZW5kaWYKIAogLyoqCi0gKiBFbmFibGUgSFcgaW50ZXJydXB0cy4KKyAqIGJueDJ4X2ludF9lbmFibGUgLSBlbmFibGUgSFcgaW50ZXJydXB0cy4KICAqCi0gKiBAcGFyYW0gYnAKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKICAqLwogdm9pZCBibngyeF9pbnRfZW5hYmxlKHN0cnVjdCBibngyeCAqYnApOwogCiAvKioKLSAqIERpc2FibGUgaW50ZXJydXB0cy4gVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlcmUgYXJlIG5vCi0gKiBJU1JzIG9yIFNQIERQQ3MgKHNwX3Rhc2spIGFyZSBydW5uaW5nIGFmdGVyIGl0IHJldHVybnMuCisgKiBibngyeF9pbnRfZGlzYWJsZV9zeW5jIC0gZGlzYWJsZSBpbnRlcnJ1cHRzLgogICoKLSAqIEBwYXJhbSBicAotICogQHBhcmFtIGRpc2FibGVfaHcgaWYgdHJ1ZSwgZGlzYWJsZSBIVyBpbnRlcnJ1cHRzLgorICogQGJwOgkJZHJpdmVyIGhhbmRsZQorICogQGRpc2FibGVfaHc6CXRydWUsIGRpc2FibGUgSFcgaW50ZXJydXB0cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCB0aGVyZSBhcmUgbm8KKyAqIElTUnMgb3IgU1AgRFBDcyAoc3BfdGFzaykgYXJlIHJ1bm5pbmcgYWZ0ZXIgaXQgcmV0dXJucy4KICAqLwogdm9pZCBibngyeF9pbnRfZGlzYWJsZV9zeW5jKHN0cnVjdCBibngyeCAqYnAsIGludCBkaXNhYmxlX2h3KTsKIAogLyoqCi0gKiBMb2FkcyBkZXZpY2UgZmlybXdhcmUKKyAqIGJueDJ4X2luaXRfZmlybXdhcmUgLSBsb2FkcyBkZXZpY2UgZmlybXdhcmUKICAqCi0gKiBAcGFyYW0gYnAKLSAqCi0gKiBAcmV0dXJuIGludAorICogQGJwOgkJZHJpdmVyIGhhbmRsZQogICovCiBpbnQgYm54MnhfaW5pdF9maXJtd2FyZShzdHJ1Y3QgYm54MnggKmJwKTsKIAogLyoqCi0gKiBJbml0IEhXIGJsb2NrcyBhY2NvcmRpbmcgdG8gY3VycmVudCBpbml0aWFsaXphdGlvbiBzdGFnZToKLSAqIENPTU1PTiwgUE9SVCBvciBGVU5DVElPTi4KKyAqIGJueDJ4X2luaXRfaHcgLSBpbml0IEhXIGJsb2NrcyBhY2NvcmRpbmcgdG8gY3VycmVudCBpbml0aWFsaXphdGlvbiBzdGFnZS4KICAqCi0gKiBAcGFyYW0gYnAKLSAqIEBwYXJhbSBsb2FkX2NvZGU6IENPTU1PTiwgUE9SVCBvciBGVU5DVElPTgotICoKLSAqIEByZXR1cm4gaW50CisgKiBAYnA6CQlkcml2ZXIgaGFuZGxlCisgKiBAbG9hZF9jb2RlOglDT01NT04sIFBPUlQgb3IgRlVOQ1RJT04KICAqLwogaW50IGJueDJ4X2luaXRfaHcoc3RydWN0IGJueDJ4ICpicCwgdTMyIGxvYWRfY29kZSk7CiAKIC8qKgotICogSW5pdCBkcml2ZXIgaW50ZXJuYWxzOgorICogYm54MnhfbmljX2luaXQgLSBpbml0IGRyaXZlciBpbnRlcm5hbHMuCisgKgorICogQGJwOgkJZHJpdmVyIGhhbmRsZQorICogQGxvYWRfY29kZToJQ09NTU9OLCBQT1JUIG9yIEZVTkNUSU9OCisgKgorICogSW5pdGlhbGl6ZXM6CiAgKiAgLSByaW5ncwogICogIC0gc3RhdHVzIGJsb2NrcwogICogIC0gZXRjLgotICoKLSAqIEBwYXJhbSBicAotICogQHBhcmFtIGxvYWRfY29kZSBDT01NT04sIFBPUlQgb3IgRlVOQ1RJT04KICAqLwogdm9pZCBibngyeF9uaWNfaW5pdChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgbG9hZF9jb2RlKTsKIAogLyoqCi0gKiBBbGxvY2F0ZSBkcml2ZXIncyBtZW1vcnkuCisgKiBibngyeF9hbGxvY19tZW0gLSBhbGxvY2F0ZSBkcml2ZXIncyBtZW1vcnkuCiAgKgotICogQHBhcmFtIGJwCi0gKgotICogQHJldHVybiBpbnQKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKICAqLwogaW50IGJueDJ4X2FsbG9jX21lbShzdHJ1Y3QgYm54MnggKmJwKTsKIAogLyoqCi0gKiBSZWxlYXNlIGRyaXZlcidzIG1lbW9yeS4KKyAqIGJueDJ4X2ZyZWVfbWVtIC0gcmVsZWFzZSBkcml2ZXIncyBtZW1vcnkuCiAgKgotICogQHBhcmFtIGJwCisgKiBAYnA6CQlkcml2ZXIgaGFuZGxlCiAgKi8KIHZvaWQgYm54MnhfZnJlZV9tZW0oc3RydWN0IGJueDJ4ICpicCk7CiAKIC8qKgotICogU2V0dXAgZXRoIENsaWVudC4KKyAqIGJueDJ4X3NldHVwX2NsaWVudCAtIHNldHVwIGV0aCBjbGllbnQuCiAgKgotICogQHBhcmFtIGJwCi0gKiBAcGFyYW0gZnAKLSAqIEBwYXJhbSBpc19sZWFkaW5nCi0gKgotICogQHJldHVybiBpbnQKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKKyAqIEBmcDoJCXBvaW50ZXIgdG8gZmFzdHBhdGggc3RydWN0dXJlCisgKiBAaXNfbGVhZGluZzoJYm9vbGVhbgogICovCiBpbnQgYm54Mnhfc2V0dXBfY2xpZW50KHN0cnVjdCBibngyeCAqYnAsIHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsCiAJCSAgICAgICBpbnQgaXNfbGVhZGluZyk7CiAKIC8qKgotICogU2V0IG51bWJlciBvZiBxdWV1ZXMgYWNjb3JkaW5nIHRvIG1vZGUKKyAqIGJueDJ4X3NldF9udW1fcXVldWVzIC0gc2V0IG51bWJlciBvZiBxdWV1ZXMgYWNjb3JkaW5nIHRvIG1vZGUuCiAgKgotICogQHBhcmFtIGJwCi0gKgorICogQGJwOgkJZHJpdmVyIGhhbmRsZQogICovCiB2b2lkIGJueDJ4X3NldF9udW1fcXVldWVzKHN0cnVjdCBibngyeCAqYnApOwogCiAvKioKLSAqIENsZWFudXAgY2hpcCBpbnRlcm5hbHM6Ci0gKiAtIENsZWFudXAgTUFDIGNvbmZpZ3VyYXRpb24uCi0gKiAtIENsb3NlIGNsaWVudHMuCi0gKiAtIGV0Yy4KKyAqIGJueDJ4X2NoaXBfY2xlYW51cCAtIGNsZWFudXAgY2hpcCBpbnRlcm5hbHMuCiAgKgotICogQHBhcmFtIGJwCi0gKiBAcGFyYW0gdW5sb2FkX21vZGUKKyAqIEBicDoJCQlkcml2ZXIgaGFuZGxlCisgKiBAdW5sb2FkX21vZGU6CUNPTU1PTiwgUE9SVCwgRlVOQ1RJT04KKyAqCisgKiAtIENsZWFudXAgTUFDIGNvbmZpZ3VyYXRpb24uCisgKiAtIENsb3NlcyBjbGllbnRzLgorICogLSBldGMuCiAgKi8KIHZvaWQgYm54MnhfY2hpcF9jbGVhbnVwKHN0cnVjdCBibngyeCAqYnAsIGludCB1bmxvYWRfbW9kZSk7CiAKIC8qKgotICogQWNxdWlyZSBIVyBsb2NrLgorICogYm54MnhfYWNxdWlyZV9od19sb2NrIC0gYWNxdWlyZSBIVyBsb2NrLgogICoKLSAqIEBwYXJhbSBicAotICogQHBhcmFtIHJlc291cmNlIFJlc291cmNlIGJpdCB3aGljaCB3YXMgbG9ja2VkCi0gKgotICogQHJldHVybiBpbnQKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKKyAqIEByZXNvdXJjZToJcmVzb3VyY2UgYml0IHdoaWNoIHdhcyBsb2NrZWQKICAqLwogaW50IGJueDJ4X2FjcXVpcmVfaHdfbG9jayhzdHJ1Y3QgYm54MnggKmJwLCB1MzIgcmVzb3VyY2UpOwogCiAvKioKLSAqIFJlbGVhc2UgSFcgbG9jay4KKyAqIGJueDJ4X3JlbGVhc2VfaHdfbG9jayAtIHJlbGVhc2UgSFcgbG9jay4KICAqCi0gKiBAcGFyYW0gYnAgZHJpdmVyIGhhbmRsZQotICogQHBhcmFtIHJlc291cmNlIFJlc291cmNlIGJpdCB3aGljaCB3YXMgbG9ja2VkCi0gKgotICogQHJldHVybiBpbnQKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKKyAqIEByZXNvdXJjZToJcmVzb3VyY2UgYml0IHdoaWNoIHdhcyBsb2NrZWQKICAqLwogaW50IGJueDJ4X3JlbGVhc2VfaHdfbG9jayhzdHJ1Y3QgYm54MnggKmJwLCB1MzIgcmVzb3VyY2UpOwogCiAvKioKLSAqIENvbmZpZ3VyZSBldGggTUFDIGFkZHJlc3MgaW4gdGhlIEhXIGFjY29yZGluZyB0byB0aGUgdmFsdWUgaW4KLSAqIG5ldGRldi0+ZGV2X2FkZHIuCisgKiBibngyeF9zZXRfZXRoX21hYyAtIGNvbmZpZ3VyZSBldGggTUFDIGFkZHJlc3MgaW4gdGhlIEhXCiAgKgotICogQHBhcmFtIGJwIGRyaXZlciBoYW5kbGUKLSAqIEBwYXJhbSBzZXQKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKKyAqIEBzZXQ6CXNldCBvciBjbGVhcgorICoKKyAqIENvbmZpZ3VyZXMgYWNjb3JkaW5nIHRvIHRoZSB2YWx1ZSBpbiBuZXRkZXYtPmRldl9hZGRyLgogICovCiB2b2lkIGJueDJ4X3NldF9ldGhfbWFjKHN0cnVjdCBibngyeCAqYnAsIGludCBzZXQpOwogCiAjaWZkZWYgQkNNX0NOSUMKIC8qKgotICogU2V0L0NsZWFyIEZJUCBNQUMocykgYXQgdGhlIG5leHQgZW50aWVzIGluIHRoZSBDQU0gYWZ0ZXIgdGhlIEVUSAotICogTUFDKHMpLiBUaGlzIGZ1bmN0aW9uIHdpbGwgd2FpdCB1bnRpbCB0aGUgcmFtZG9yZCBjb21wbGV0aW9uCi0gKiByZXR1cm5zLgorICogYm54Mnhfc2V0X2ZpcF9ldGhfbWFjX2FkZHIgLSBTZXQvQ2xlYXIgRklQIE1BQyhzKQogICoKLSAqIEBwYXJhbSBicCBkcml2ZXIgaGFuZGxlCi0gKiBAcGFyYW0gc2V0IHNldCBvciBjbGVhciB0aGUgQ0FNIGVudHJ5CisgKiBAYnA6CQlkcml2ZXIgaGFuZGxlCisgKiBAc2V0OglzZXQgb3IgY2xlYXIgdGhlIENBTSBlbnRyeQogICoKLSAqIEByZXR1cm4gMCBpZiBjdXNzZXNzLCAtRU5PREVWIGlmIHJhbXJvZCBkb2Vzbid0IHJldHVybi4KKyAqIFVzZWQgbmV4dCBlbnRpZXMgaW4gdGhlIENBTSBhZnRlciB0aGUgRVRIIE1BQyhzKS4KKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCB3YWl0IHVudGlsIHRoZSByYW1kb3JkIGNvbXBsZXRpb24gcmV0dXJucy4KKyAqIFJldHVybiAwIGlmIGN1c3Nlc3MsIC1FTk9ERVYgaWYgcmFtcm9kIGRvZXNuJ3QgcmV0dXJuLgogICovCiBpbnQgYm54Mnhfc2V0X2ZpcF9ldGhfbWFjX2FkZHIoc3RydWN0IGJueDJ4ICpicCwgaW50IHNldCk7CiAKIC8qKgotICogU2V0L0NsZWFyIEFMTF9FTk9ERSBtY2FzdCBNQUMuCisgKiBibngyeF9zZXRfYWxsX2Vub2RlX21hY3MgLSBTZXQvQ2xlYXIgQUxMX0VOT0RFIG1jYXN0IE1BQy4KICAqCi0gKiBAcGFyYW0gYnAKLSAqIEBwYXJhbSBzZXQKLSAqCi0gKiBAcmV0dXJuIGludAorICogQGJwOgkJZHJpdmVyIGhhbmRsZQorICogQHNldDoJc2V0IG9yIGNsZWFyCiAgKi8KIGludCBibngyeF9zZXRfYWxsX2Vub2RlX21hY3Moc3RydWN0IGJueDJ4ICpicCwgaW50IHNldCk7CiAjZW5kaWYKIAogLyoqCi0gKiBTZXQgTUFDIGZpbHRlcmluZyBjb25maWd1cmF0aW9ucy4KKyAqIGJueDJ4X3NldF9yeF9tb2RlIC0gc2V0IE1BQyBmaWx0ZXJpbmcgY29uZmlndXJhdGlvbnMuCiAgKgotICogQHJlbWFya3MgY2FsbGVkIHdpdGggbmV0aWZfdHhfbG9jayBmcm9tIGRldl9tY2FzdC5jCisgKiBAZGV2OgluZXRkZXZpY2UKICAqCi0gKiBAcGFyYW0gZGV2IG5ldF9kZXZpY2UKKyAqIGNhbGxlZCB3aXRoIG5ldGlmX3R4X2xvY2sgZnJvbSBkZXZfbWNhc3QuYwogICovCiB2b2lkIGJueDJ4X3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiAvKioKLSAqIENvbmZpZ3VyZSBNQUMgZmlsdGVyaW5nIHJ1bGVzIGluIGEgRlcuCisgKiBibngyeF9zZXRfc3Rvcm1fcnhfbW9kZSAtIGNvbmZpZ3VyZSBNQUMgZmlsdGVyaW5nIHJ1bGVzIGluIGEgRlcuCiAgKgotICogQHBhcmFtIGJwIGRyaXZlciBoYW5kbGUKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKICAqLwogdm9pZCBibngyeF9zZXRfc3Rvcm1fcnhfbW9kZShzdHJ1Y3QgYm54MnggKmJwKTsKIApAQCAtMjkwLDYzICszMDcsNTkgQEAKIHZvaWQgYm54MnhfZGlzYWJsZV9jbG9zZV90aGVfZ2F0ZShzdHJ1Y3QgYm54MnggKmJwKTsKIAogLyoqCi0gKiBQZXJmb3JtIHN0YXRpc3RpY3MgaGFuZGxpbmcgYWNjb3JkaW5nIHRvIGV2ZW50CisgKiBibngyeF9zdGF0c19oYW5kbGUgLSBwZXJmb3JtIHN0YXRpc3RpY3MgaGFuZGxpbmcgYWNjb3JkaW5nIHRvIGV2ZW50LgogICoKLSAqIEBwYXJhbSBicCBkcml2ZXIgaGFuZGxlCi0gKiBAcGFyYW0gZXZlbnQgYm54Mnhfc3RhdHNfZXZlbnQKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKKyAqIEBldmVudDoJYm54Mnhfc3RhdHNfZXZlbnQKICAqLwogdm9pZCBibngyeF9zdGF0c19oYW5kbGUoc3RydWN0IGJueDJ4ICpicCwgZW51bSBibngyeF9zdGF0c19ldmVudCBldmVudCk7CiAKIC8qKgotICogSGFuZGxlIHJhbXJvZHMgY29tcGxldGlvbgorICogYm54Mnhfc3BfZXZlbnQgLSBoYW5kbGUgcmFtcm9kcyBjb21wbGV0aW9uLgogICoKLSAqIEBwYXJhbSBmcCBmYXN0cGF0aCBoYW5kbGUgZm9yIHRoZSBldmVudAotICogQHBhcmFtIHJyX2NxZSBldGhfcnhfY3FlCisgKiBAZnA6CQlmYXN0cGF0aCBoYW5kbGUgZm9yIHRoZSBldmVudAorICogQHJyX2NxZToJZXRoX3J4X2NxZQogICovCiB2b2lkIGJueDJ4X3NwX2V2ZW50KHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsIHVuaW9uIGV0aF9yeF9jcWUgKnJyX2NxZSk7CiAKIC8qKgotICogSW5pdC9oYWx0IGZ1bmN0aW9uIGJlZm9yZS9hZnRlciBzZW5kaW5nCi0gKiBDTElFTlRfU0VUVVAvQ0ZDX0RFTCBmb3IgdGhlIGZpcnN0L2xhc3QgY2xpZW50LgorICogYm54MnhfZnVuY19zdGFydCAtIGluaXQgZnVuY3Rpb24KICAqCi0gKiBAcGFyYW0gYnAKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKICAqCi0gKiBAcmV0dXJuIGludAorICogTXVzdCBiZSBjYWxsZWQgYmVmb3JlIHNlbmRpbmcgQ0xJRU5UX1NFVFVQIGZvciB0aGUgZmlyc3QgY2xpZW50LgogICovCiBpbnQgYm54MnhfZnVuY19zdGFydChzdHJ1Y3QgYm54MnggKmJwKTsKIAogLyoqCi0gKiBQcmVwYXJlIElMVCBjb25maWd1cmF0aW9ucyBhY2NvcmRpbmcgdG8gY3VycmVudCBkcml2ZXIKLSAqIHBhcmFtZXRlcnMuCisgKiBibngyeF9pbHRfc2V0X2luZm8gLSBwcmVwYXJlIElMVCBjb25maWd1cmF0aW9ucy4KICAqCi0gKiBAcGFyYW0gYnAKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKICAqLwogdm9pZCBibngyeF9pbHRfc2V0X2luZm8oc3RydWN0IGJueDJ4ICpicCk7CiAKIC8qKgotICogSW5pbnRpYWxpemUgZGNieCBwcm90b2NvbAorICogYm54MnhfZGNieF9pbml0IC0gaW5pdGlhbGl6ZSBkY2J4IHByb3RvY29sLgogICoKLSAqIEBwYXJhbSBicAorICogQGJwOgkJZHJpdmVyIGhhbmRsZQogICovCiB2b2lkIGJueDJ4X2RjYnhfaW5pdChzdHJ1Y3QgYm54MnggKmJwKTsKIAogLyoqCi0gKiBTZXQgcG93ZXIgc3RhdGUgdG8gdGhlIHJlcXVlc3RlZCB2YWx1ZS4gQ3VycmVudGx5IG9ubHkgRDAgYW5kCi0gKiBEM2hvdCBhcmUgc3VwcG9ydGVkLgorICogYm54Mnhfc2V0X3Bvd2VyX3N0YXRlIC0gc2V0IHBvd2VyIHN0YXRlIHRvIHRoZSByZXF1ZXN0ZWQgdmFsdWUuCiAgKgotICogQHBhcmFtIGJwCi0gKiBAcGFyYW0gc3RhdGUgRDAgb3IgRDNob3QKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKKyAqIEBzdGF0ZToJcmVxdWlyZWQgc3RhdGUgRDAgb3IgRDNob3QKICAqCi0gKiBAcmV0dXJuIGludAorICogQ3VycmVudGx5IG9ubHkgRDAgYW5kIEQzaG90IGFyZSBzdXBwb3J0ZWQuCiAgKi8KIGludCBibngyeF9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IGJueDJ4ICpicCwgcGNpX3Bvd2VyX3Qgc3RhdGUpOwogCiAvKioKLSAqIFVwZGF0ZXMgTUFYIHBhcnQgb2YgTUYgY29uZmlndXJhdGlvbiBpbiBIVwotICogKGlmIHJlcXVpcmVkKQorICogYm54MnhfdXBkYXRlX21heF9tZl9jb25maWcgLSB1cGRhdGUgTUFYIHBhcnQgb2YgTUYgY29uZmlndXJhdGlvbiBpbiBIVy4KICAqCi0gKiBAcGFyYW0gYnAKLSAqIEBwYXJhbSB2YWx1ZQorICogQGJwOgkJZHJpdmVyIGhhbmRsZQorICogQHZhbHVlOgluZXcgdmFsdWUKICAqLwogdm9pZCBibngyeF91cGRhdGVfbWF4X21mX2NvbmZpZyhzdHJ1Y3QgYm54MnggKmJwLCB1MzIgdmFsdWUpOwogCkBAIC0zNzcsODQgKzM5MCw3MyBAQAogLyogUmVsZWFzZSBJUlEgdmVjdG9ycyAqLwogdm9pZCBibngyeF9mcmVlX2lycShzdHJ1Y3QgYm54MnggKmJwKTsKIAordm9pZCBibngyeF9mcmVlX2ZwX21lbShzdHJ1Y3QgYm54MnggKmJwKTsKK2ludCBibngyeF9hbGxvY19mcF9tZW0oc3RydWN0IGJueDJ4ICpicCk7CisKIHZvaWQgYm54MnhfaW5pdF9yeF9yaW5ncyhzdHJ1Y3QgYm54MnggKmJwKTsKIHZvaWQgYm54MnhfZnJlZV9za2JzKHN0cnVjdCBibngyeCAqYnApOwogdm9pZCBibngyeF9uZXRpZl9zdG9wKHN0cnVjdCBibngyeCAqYnAsIGludCBkaXNhYmxlX2h3KTsKIHZvaWQgYm54MnhfbmV0aWZfc3RhcnQoc3RydWN0IGJueDJ4ICpicCk7CiAKIC8qKgotICogRmlsbCBtc2l4X3RhYmxlLCByZXF1ZXN0IHZlY3RvcnMsIHVwZGF0ZSBudW1fcXVldWVzIGFjY29yZGluZwotICogdG8gbnVtYmVyIG9mIGF2YWlsYWJsZSB2ZWN0b3JzCisgKiBibngyeF9lbmFibGVfbXNpeCAtIHNldCBtc2l4IGNvbmZpZ3VyYXRpb24uCiAgKgotICogQHBhcmFtIGJwCisgKiBAYnA6CQlkcml2ZXIgaGFuZGxlCiAgKgotICogQHJldHVybiBpbnQKKyAqIGZpbGxzIG1zaXhfdGFibGUsIHJlcXVlc3RzIHZlY3RvcnMsIHVwZGF0ZXMgbnVtX3F1ZXVlcworICogYWNjb3JkaW5nIHRvIG51bWJlciBvZiBhdmFpbGFibGUgdmVjdG9ycy4KICAqLwogaW50IGJueDJ4X2VuYWJsZV9tc2l4KHN0cnVjdCBibngyeCAqYnApOwogCiAvKioKLSAqIFJlcXVlc3QgbXNpIG1vZGUgZnJvbSBPUywgdXBkYXRlZCBpbnRlcm5hbHMgYWNjb3JkaW5nbHkKKyAqIGJueDJ4X2VuYWJsZV9tc2kgLSByZXF1ZXN0IG1zaSBtb2RlIGZyb20gT1MsIHVwZGF0ZWQgaW50ZXJuYWxzIGFjY29yZGluZ2x5CiAgKgotICogQHBhcmFtIGJwCi0gKgotICogQHJldHVybiBpbnQKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKICAqLwogaW50IGJueDJ4X2VuYWJsZV9tc2koc3RydWN0IGJueDJ4ICpicCk7CiAKIC8qKgotICogTkFQSSBjYWxsYmFjaworICogYm54MnhfcG9sbCAtIE5BUEkgY2FsbGJhY2sKICAqCi0gKiBAcGFyYW0gbmFwaQotICogQHBhcmFtIGJ1ZGdldAorICogQG5hcGk6CW5hcGkgc3RydWN0dXJlCisgKiBAYnVkZ2V0OgogICoKLSAqIEByZXR1cm4gaW50CiAgKi8KIGludCBibngyeF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCk7CiAKIC8qKgotICogQWxsb2NhdGUvcmVsZWFzZSBtZW1vcmllcyBvdXRzaXplIG1haW4gZHJpdmVyIHN0cnVjdHVyZQorICogYm54MnhfYWxsb2NfbWVtX2JwIC0gYWxsb2NhdGUgbWVtb3JpZXMgb3V0c2l6ZSBtYWluIGRyaXZlciBzdHJ1Y3R1cmUKICAqCi0gKiBAcGFyYW0gYnAKLSAqCi0gKiBAcmV0dXJuIGludAorICogQGJwOgkJZHJpdmVyIGhhbmRsZQogICovCiBpbnQgX19kZXZpbml0IGJueDJ4X2FsbG9jX21lbV9icChzdHJ1Y3QgYm54MnggKmJwKTsKKworLyoqCisgKiBibngyeF9mcmVlX21lbV9icCAtIHJlbGVhc2UgbWVtb3JpZXMgb3V0c2l6ZSBtYWluIGRyaXZlciBzdHJ1Y3R1cmUKKyAqCisgKiBAYnA6CQlkcml2ZXIgaGFuZGxlCisgKi8KIHZvaWQgYm54MnhfZnJlZV9tZW1fYnAoc3RydWN0IGJueDJ4ICpicCk7CiAKIC8qKgotICogQ2hhbmdlIG10dSBuZXRkZXYgY2FsbGJhY2sKKyAqIGJueDJ4X2NoYW5nZV9tdHUgLSBjaGFuZ2UgbXR1IG5ldGRldiBjYWxsYmFjawogICoKLSAqIEBwYXJhbSBkZXYKLSAqIEBwYXJhbSBuZXdfbXR1CisgKiBAZGV2OgluZXQgZGV2aWNlCisgKiBAbmV3X210dToJcmVxdWVzdGVkIG10dQogICoKLSAqIEByZXR1cm4gaW50CiAgKi8KIGludCBibngyeF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KTsKIAordTMyIGJueDJ4X2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpOworaW50IGJueDJ4X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpOworCiAvKioKLSAqIHR4IHRpbWVvdXQgbmV0ZGV2IGNhbGxiYWNrCisgKiBibngyeF90eF90aW1lb3V0IC0gdHggdGltZW91dCBuZXRkZXYgY2FsbGJhY2sKICAqCi0gKiBAcGFyYW0gZGV2Ci0gKiBAcGFyYW0gbmV3X210dQotICoKLSAqIEByZXR1cm4gaW50CisgKiBAZGV2OgluZXQgZGV2aWNlCiAgKi8KIHZvaWQgYm54MnhfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAotI2lmZGVmIEJDTV9WTEFOCi0vKioKLSAqIHZsYW4gcnggcmVnaXN0ZXIgbmV0ZGV2IGNhbGxiYWNrCi0gKgotICogQHBhcmFtIGRldgotICogQHBhcmFtIG5ld19tdHUKLSAqCi0gKiBAcmV0dXJuIGludAotICovCi12b2lkIGJueDJ4X3ZsYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3Qgdmxhbl9ncm91cCAqdmxncnApOwotCi0jZW5kaWYKLQogc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X3VwZGF0ZV9mcHNiX2lkeChzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwKQogewogCWJhcnJpZXIoKTsgLyogc3RhdHVzIGJsb2NrIGlzIHdyaXR0ZW4gdG8gYnkgdGhlIGNoaXAgKi8KQEAgLTcwNSw3ICs3MDcsNyBAQAogLyoqCiAgKiBkaXNhYmxlcyB0eCBmcm9tIHN0YWNrIHBvaW50IG9mIHZpZXcKICAqCi0gKiBAcGFyYW0gYnAKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X3R4X2Rpc2FibGUoc3RydWN0IGJueDJ4ICpicCkKIHsKQEAgLTg4MCw2ICs4ODIsOSBAQAogewogCWludCBpOwogCisJaWYgKGZwLT5kaXNhYmxlX3RwYSkKKwkJcmV0dXJuOworCiAJZm9yIChpID0gMDsgaSA8IGxhc3Q7IGkrKykKIAkJYm54MnhfZnJlZV9yeF9zZ2UoYnAsIGZwLCBpKTsKIH0KQEAgLTkwOCwzNiArOTEzLDM5IEBACiAJfQogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfaW5pdF90eF9yaW5nX29uZShzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwKQoreworCWludCBpOworCisJZm9yIChpID0gMTsgaSA8PSBOVU1fVFhfUklOR1M7IGkrKykgeworCQlzdHJ1Y3QgZXRoX3R4X25leHRfYmQgKnR4X25leHRfYmQgPQorCQkJJmZwLT50eF9kZXNjX3JpbmdbVFhfREVTQ19DTlQgKiBpIC0gMV0ubmV4dF9iZDsKKworCQl0eF9uZXh0X2JkLT5hZGRyX2hpID0KKwkJCWNwdV90b19sZTMyKFU2NF9ISShmcC0+dHhfZGVzY19tYXBwaW5nICsKKwkJCQkgICAgQkNNX1BBR0VfU0laRSooaSAlIE5VTV9UWF9SSU5HUykpKTsKKwkJdHhfbmV4dF9iZC0+YWRkcl9sbyA9CisJCQljcHVfdG9fbGUzMihVNjRfTE8oZnAtPnR4X2Rlc2NfbWFwcGluZyArCisJCQkJICAgIEJDTV9QQUdFX1NJWkUqKGkgJSBOVU1fVFhfUklOR1MpKSk7CisJfQorCisJU0VUX0ZMQUcoZnAtPnR4X2RiLmRhdGEuaGVhZGVyLmhlYWRlciwgRE9PUkJFTExfSERSX0RCX1RZUEUsIDEpOworCWZwLT50eF9kYi5kYXRhLnplcm9fZmlsbDEgPSAwOworCWZwLT50eF9kYi5kYXRhLnByb2QgPSAwOworCisJZnAtPnR4X3BrdF9wcm9kID0gMDsKKwlmcC0+dHhfcGt0X2NvbnMgPSAwOworCWZwLT50eF9iZF9wcm9kID0gMDsKKwlmcC0+dHhfYmRfY29ucyA9IDA7CisJZnAtPnR4X3BrdCA9IDA7Cit9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9pbml0X3R4X3JpbmdzKHN0cnVjdCBibngyeCAqYnApCiB7Ci0JaW50IGksIGo7CisJaW50IGk7CiAKLQlmb3JfZWFjaF90eF9xdWV1ZShicCwgaikgewotCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtqXTsKLQotCQlmb3IgKGkgPSAxOyBpIDw9IE5VTV9UWF9SSU5HUzsgaSsrKSB7Ci0JCQlzdHJ1Y3QgZXRoX3R4X25leHRfYmQgKnR4X25leHRfYmQgPQotCQkJCSZmcC0+dHhfZGVzY19yaW5nW1RYX0RFU0NfQ05UICogaSAtIDFdLm5leHRfYmQ7Ci0KLQkJCXR4X25leHRfYmQtPmFkZHJfaGkgPQotCQkJCWNwdV90b19sZTMyKFU2NF9ISShmcC0+dHhfZGVzY19tYXBwaW5nICsKLQkJCQkJICAgIEJDTV9QQUdFX1NJWkUqKGkgJSBOVU1fVFhfUklOR1MpKSk7Ci0JCQl0eF9uZXh0X2JkLT5hZGRyX2xvID0KLQkJCQljcHVfdG9fbGUzMihVNjRfTE8oZnAtPnR4X2Rlc2NfbWFwcGluZyArCi0JCQkJCSAgICBCQ01fUEFHRV9TSVpFKihpICUgTlVNX1RYX1JJTkdTKSkpOwotCQl9Ci0KLQkJU0VUX0ZMQUcoZnAtPnR4X2RiLmRhdGEuaGVhZGVyLmhlYWRlciwgRE9PUkJFTExfSERSX0RCX1RZUEUsIDEpOwotCQlmcC0+dHhfZGIuZGF0YS56ZXJvX2ZpbGwxID0gMDsKLQkJZnAtPnR4X2RiLmRhdGEucHJvZCA9IDA7Ci0KLQkJZnAtPnR4X3BrdF9wcm9kID0gMDsKLQkJZnAtPnR4X3BrdF9jb25zID0gMDsKLQkJZnAtPnR4X2JkX3Byb2QgPSAwOwotCQlmcC0+dHhfYmRfY29ucyA9IDA7Ci0JCWZwLT50eF9wa3QgPSAwOwotCX0KKwlmb3JfZWFjaF90eF9xdWV1ZShicCwgaSkKKwkJYm54MnhfaW5pdF90eF9yaW5nX29uZSgmYnAtPmZwW2ldKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X3NldF9uZXh0X3BhZ2VfcnhfYmQoc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCkKQEAgLTk5Miw2ICsxMDAwLDQ0IEBACiAJfQogfQogCisvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYWN0dWFsbHkgYWxsb2NhdGVkIEJEcyAqLworc3RhdGljIGlubGluZSBpbnQgYm54MnhfYWxsb2NfcnhfYmRzKHN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsCisJCQkJICAgICAgaW50IHJ4X3Jpbmdfc2l6ZSkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gZnAtPmJwOworCXUxNiByaW5nX3Byb2QsIGNxZV9yaW5nX3Byb2Q7CisJaW50IGk7CisKKwlmcC0+cnhfY29tcF9jb25zID0gMDsKKwljcWVfcmluZ19wcm9kID0gcmluZ19wcm9kID0gMDsKKworCS8qIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgb25seSBkdXJpbmcgZm8gaW5pdCBzbworCSAqIGZwLT5ldGhfcV9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkID0gMAorCSAqLworCWZvciAoaSA9IDA7IGkgPCByeF9yaW5nX3NpemU7IGkrKykgeworCQlpZiAoYm54MnhfYWxsb2Nfcnhfc2tiKGJwLCBmcCwgcmluZ19wcm9kKSA8IDApIHsKKwkJCWZwLT5ldGhfcV9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7CisJCQljb250aW51ZTsKKwkJfQorCQlyaW5nX3Byb2QgPSBORVhUX1JYX0lEWChyaW5nX3Byb2QpOworCQljcWVfcmluZ19wcm9kID0gTkVYVF9SQ1FfSURYKGNxZV9yaW5nX3Byb2QpOworCQlXQVJOX09OKHJpbmdfcHJvZCA8PSAoaSAtIGZwLT5ldGhfcV9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKSk7CisJfQorCisJaWYgKGZwLT5ldGhfcV9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKQorCQlCTlgyWF9FUlIoIndhcyBvbmx5IGFibGUgdG8gYWxsb2NhdGUgIgorCQkJICAiJWQgcnggc2ticyBvbiBxdWV1ZVslZF1cbiIsCisJCQkgIChpIC0gZnAtPmV0aF9xX3N0YXRzLnJ4X3NrYl9hbGxvY19mYWlsZWQpLCBmcC0+aW5kZXgpOworCisJZnAtPnJ4X2JkX3Byb2QgPSByaW5nX3Byb2Q7CisJLyogTGltaXQgdGhlIENRRSBwcm9kdWNlciBieSB0aGUgQ1FFIHJpbmcgc2l6ZSAqLworCWZwLT5yeF9jb21wX3Byb2QgPSBtaW5fdCh1MTYsIE5VTV9SQ1FfUklOR1MqUkNRX0RFU0NfQ05ULAorCQkJICAgICAgIGNxZV9yaW5nX3Byb2QpOworCWZwLT5yeF9wa3QgPSBmcC0+cnhfY2FsbHMgPSAwOworCisJcmV0dXJuIGkgLSBmcC0+ZXRoX3Ffc3RhdHMucnhfc2tiX2FsbG9jX2ZhaWxlZDsKK30KKwogI2lmZGVmIEJDTV9DTklDCiBzdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfaW5pdF9mY29lX2ZwKHN0cnVjdCBibngyeCAqYnApCiB7CkBAIC0xMDQxLDEyICsxMDg3LDIzIEBACiAJCQkJc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0ICpjbW5nLAogCQkJCXU4IHBvcnQpCiB7Ci0Jc2l6ZV90IHNpemUgPSBzaXplb2Yoc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0KTsKKwlzaXplX3Qgc2l6ZSA9CisJCXNpemVvZihzdHJ1Y3QgcmF0ZV9zaGFwaW5nX3ZhcnNfcGVyX3BvcnQpICsKKwkJc2l6ZW9mKHN0cnVjdCBmYWlybmVzc192YXJzX3Blcl9wb3J0KSArCisJCXNpemVvZihzdHJ1Y3Qgc2FmY19zdHJ1Y3RfcGVyX3BvcnQpICsKKwkJc2l6ZW9mKHN0cnVjdCBwZmNfc3RydWN0X3Blcl9wb3J0KTsKIAogCXUzMiBhZGRyID0gQkFSX1hTVFJPUk1fSU5UTUVNICsKIAkJCVhTVE9STV9DTU5HX1BFUl9QT1JUX1ZBUlNfT0ZGU0VUKHBvcnQpOwogCiAJX19zdG9ybV9tZW1zZXRfc3RydWN0KGJwLCBhZGRyLCBzaXplLCAodTMyICopY21uZyk7CisKKwlhZGRyICs9IHNpemUgKyA0IC8qIFNLSVAgRENCK0xMRkMgKi87CisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQpIC0KKwkJc2l6ZSAvKiB3cml0dGVuICovIC0gNCAvKnNraXBwZWQqLzsKKworCV9fc3Rvcm1fbWVtc2V0X3N0cnVjdChicCwgYWRkciwgc2l6ZSwKKwkJCSAgICAgICh1MzIgKikoY21uZy0+dHJhZmZpY190eXBlX3RvX3ByaW9yaXR5X2NvcykpOwogfQogCiAvKiBIVyBMb2NrIGZvciBzaGFyZWQgZHVhbCBwb3J0IFBIWXMgKi8KQEAgLTEwNTQsMTIgKzExMTEsMTEgQEAKIHZvaWQgYm54MnhfcmVsZWFzZV9waHlfbG9jayhzdHJ1Y3QgYm54MnggKmJwKTsKIAogLyoqCi0gKiBFeHRyYWN0cyBNQVggQlcgcGFydCBmcm9tIE1GIGNvbmZpZ3VyYXRpb24uCisgKiBibngyeF9leHRyYWN0X21heF9jZmcgLSBleHRyYWN0IE1BWCBCVyBwYXJ0IGZyb20gTUYgY29uZmlndXJhdGlvbi4KICAqCi0gKiBAcGFyYW0gYnAKLSAqIEBwYXJhbSBtZl9jZmcKKyAqIEBicDoJCWRyaXZlciBoYW5kbGUKKyAqIEBtZl9jZmc6CU1GIGNvbmZpZ3VyYXRpb24KICAqCi0gKiBAcmV0dXJuIHUxNgogICovCiBzdGF0aWMgaW5saW5lIHUxNiBibngyeF9leHRyYWN0X21heF9jZmcoc3RydWN0IGJueDJ4ICpicCwgdTMyIG1mX2NmZykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2RjYi5jIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZGNiLmMKaW5kZXggOWEyNGQ3OS4uNDEwYTQ5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZGNiLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZGNiLmMKQEAgLTEsNiArMSw2IEBACiAvKiBibngyeF9kY2IuYzogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgMjAwOS0yMDEwIEJyb2FkY29tIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgMjAwOS0yMDExIEJyb2FkY29tIENvcnBvcmF0aW9uCiAgKgogICogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQogICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKQEAgLTQ4NSw2ICs0ODUsMzYgQEAKIAl9CiB9CiAKKyNpZmRlZiBCQ01fRENCTkwKK3N0YXRpYyBpbnQgYm54MnhfZGNieF9yZWFkX3NobWVtX3JlbW90ZV9taWIoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlzdHJ1Y3QgbGxkcF9yZW1vdGVfbWliIHJlbW90ZV9taWIgPSB7MH07CisJdTMyIGRjYnhfcmVtb3RlX21pYl9vZmZzZXQgPSBTSE1FTTJfUkQoYnAsIGRjYnhfcmVtb3RlX21pYl9vZmZzZXQpOworCWludCByYzsKKworCURQKE5FVElGX01TR19MSU5LLCAiZGNieF9yZW1vdGVfbWliX29mZnNldCAweCV4XG4iLAorCSAgIGRjYnhfcmVtb3RlX21pYl9vZmZzZXQpOworCisJaWYgKFNITUVNX0RDQlhfUkVNT1RFX01JQl9OT05FID09IGRjYnhfcmVtb3RlX21pYl9vZmZzZXQpIHsKKwkJQk5YMlhfRVJSKCJGVyBkb2Vzbid0IHN1cHBvcnQgZGNieF9yZW1vdGVfbWliX29mZnNldFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJjID0gYm54MnhfZGNieF9yZWFkX21pYihicCwgKHUzMiAqKSZyZW1vdGVfbWliLCBkY2J4X3JlbW90ZV9taWJfb2Zmc2V0LAorCQkJCSBEQ0JYX1JFQURfUkVNT1RFX01JQik7CisKKwlpZiAocmMpIHsKKwkJQk5YMlhfRVJSKCJGYWlsZCB0byByZWFkIHJlbW90ZSBtaWIgZnJvbSBGV1xuIik7CisJCXJldHVybiByYzsKKwl9CisKKwkvKiBzYXZlIGZlYXR1cmVzIGFuZCBmbGFncyAqLworCWJwLT5kY2J4X3JlbW90ZV9mZWF0ID0gcmVtb3RlX21pYi5mZWF0dXJlczsKKwlicC0+ZGNieF9yZW1vdGVfZmxhZ3MgPSByZW1vdGVfbWliLmZsYWdzOworCXJldHVybiAwOworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgYm54MnhfZGNieF9yZWFkX3NobWVtX25lZ19yZXN1bHRzKHN0cnVjdCBibngyeCAqYnApCiB7CiAJc3RydWN0IGxsZHBfbG9jYWxfbWliIGxvY2FsX21pYiA9IHswfTsKQEAgLTU3MSw2ICs2MDEsMjggQEAKIHsKIAlzd2l0Y2ggKHN0YXRlKSB7CiAJY2FzZSBCTlgyWF9EQ0JYX1NUQVRFX05FR19SRUNFSVZFRDoKKyNpZmRlZiBCQ01fQ05JQworCQlpZiAoYnAtPnN0YXRlICE9IEJOWDJYX1NUQVRFX09QRU5JTkdfV0FJVDRfTE9BRCkgeworCQkJc3RydWN0IGNuaWNfb3BzICpjX29wczsKKwkJCXN0cnVjdCBjbmljX2V0aF9kZXYgKmNwID0gJmJwLT5jbmljX2V0aF9kZXY7CisJCQlicC0+ZmxhZ3MgfD0gTk9fSVNDU0lfT09PX0ZMQUcgfCBOT19JU0NTSV9GTEFHOworCQkJY3AtPmRydl9zdGF0ZSB8PSBDTklDX0RSVl9TVEFURV9OT19JU0NTSV9PT087CisJCQljcC0+ZHJ2X3N0YXRlIHw9IENOSUNfRFJWX1NUQVRFX05PX0lTQ1NJOworCisJCQlyY3VfcmVhZF9sb2NrKCk7CisJCQljX29wcyA9IHJjdV9kZXJlZmVyZW5jZShicC0+Y25pY19vcHMpOworCQkJaWYgKGNfb3BzKSB7CisJCQkJYm54MnhfY25pY19ub3RpZnkoYnAsIENOSUNfQ1RMX1NUT1BfSVNDU0lfQ01EKTsKKwkJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJfQorCisJCS8qIGZhbGwgdGhyb3VnaCBpZiBubyBDTklDIGluaXRpYWxpemVkICAqLworCWNhc2UgQk5YMlhfRENCWF9TVEFURV9JU0NTSV9TVE9QUEVEOgorI2VuZGlmCisKIAkJewogCQkJRFAoTkVUSUZfTVNHX0xJTkssICJCTlgyWF9EQ0JYX1NUQVRFX05FR19SRUNFSVZFRFxuIik7CiAjaWZkZWYgQkNNX0RDQk5MCkBAIC01NzksNiArNjMxLDEwIEBACiAJCQkgKiBuZWdvdGlhdGlvbiByZXN1bHRzCiAJCQkgKi8KIAkJCWJueDJ4X2RjYm5sX3VwZGF0ZV9hcHBsaXN0KGJwLCB0cnVlKTsKKworCQkJLyogUmVhZCBybWVvdGUgbWliIGlmIGRjYnggaXMgaW4gdGhlIEZXICovCisJCQlpZiAoYm54MnhfZGNieF9yZWFkX3NobWVtX3JlbW90ZV9taWIoYnApKQorCQkJCXJldHVybjsKICNlbmRpZgogCQkJLyogUmVhZCBuZWcgcmVzdWx0cyBpZiBkY2J4IGlzIGluIHRoZSBGVyAqLwogCQkJaWYgKGJueDJ4X2RjYnhfcmVhZF9zaG1lbV9uZWdfcmVzdWx0cyhicCkpCkBAIC0xMDU3LDEyICsxMTEzLDYgQEAKIAl9CiB9CiAKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIERlc2NyaXB0aW9uOiBzaW5nbGUgcHJpb3JpdHkgZ3JvdXAKLSAqCi0gKiBSZXR1cm46Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQgYm54MnhfZGNieF9ldHNfZGlzYWJsZWRfZW50cnlfZGF0YShzdHJ1Y3QgYm54MnggKmJwLAogCQkJCQkgICAgICAgc3RydWN0IGNvc19oZWxwX2RhdGEgKmNvc19kYXRhLAogCQkJCQkgICAgICAgdTMyIHByaV9qb2luX21hc2spCkBAIC0xMDc1LDExICsxMTI1LDYgQEAKIAljb3NfZGF0YS0+bnVtX29mX2NvcyA9IDE7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBEZXNjcmlwdGlvbjogdXBkYXRpbmcgdGhlIGNvcyBidwotICoKLSAqIFJldHVybjoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfZGNieF9hZGRfdG9fY29zX2J3KHN0cnVjdCBibngyeCAqYnAsCiAJCQkJCSAgICBzdHJ1Y3QgY29zX2VudHJ5X2hlbHBfZGF0YSAqZGF0YSwKIAkJCQkJICAgIHU4IHBnX2J3KQpAQCAtMTA5MCwxMSArMTEzNSw2IEBACiAJCWRhdGEtPmNvc19idyArPSBwZ19idzsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIERlc2NyaXB0aW9uOiBzaW5nbGUgcHJpb3JpdHkgZ3JvdXAKLSAqCi0gKiBSZXR1cm46Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQgYm54MnhfZGNieF9zZXBhcmF0ZV9wYXVzZWFibGVfZnJvbV9ub24oc3RydWN0IGJueDJ4ICpicCwKIAkJCXN0cnVjdCBjb3NfaGVscF9kYXRhICpjb3NfZGF0YSwKIAkJCXUzMiAqcGdfcHJpX29yZ2luYWxfc3ByZWFkLApAQCAtMTM0NywxMSArMTM4Nyw2IEBACiAJfQogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRGVzY3JpcHRpb246IFN0aWxsCi0gKgotICogUmV0dXJuOgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB2b2lkIGJueDJ4X2RjYnhfdGhyZWVfcGdfdG9fY29zX3BhcmFtcygKIAkJCSAgICAgIHN0cnVjdCBibngyeAkJKmJwLAogCQkJICAgICAgc3RydWN0IHBnX2hlbHBfZGF0YQkqcGdfaGVscF9kYXRhLApAQCAtMTUzOSwxMSArMTU3NCw2IEBACiAJfQogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRGVzY3JpcHRpb246IEZpbGwgcGZjX2NvbmZpZyBzdHJ1Y3QgdGhhdCB3aWxsIGJlIHNlbnQgaW4gRENCWCBzdGFydCByYW1yb2QKLSAqCi0gKiBSZXR1cm46Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQgYm54MnhfcGZjX2Z3X3N0cnVjdF9lMihzdHJ1Y3QgYm54MnggKmJwKQogewogCXN0cnVjdCBmbG93X2NvbnRyb2xfY29uZmlndXJhdGlvbiAgICpwZmNfZndfY2ZnID0gTlVMTDsKQEAgLTIwMzUsNyArMjA2NSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIHU4IGJueDJ4X2RjYm5sX2dldF9mZWF0Y2ZnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBmZWF0aWQsCiAJCQkJICB1OCAqZmxhZ3MpCiB7CkBAIC0yMTE1LDMxICsyMTQ0LDEwMCBAQAogCXJldHVybiBydmFsOwogfQogCitzdGF0aWMgaW50IGJueDJ4X3BlZXJfYXBwaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICAgc3RydWN0IGRjYl9wZWVyX2FwcF9pbmZvICppbmZvLCB1MTYqIGFwcF9jb3VudCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCURQKE5FVElGX01TR19MSU5LLCAiQVBQLUlORk9cbiIpOworCisJaW5mby0+d2lsbGluZyA9IChicC0+ZGNieF9yZW1vdGVfZmxhZ3MgJiBEQ0JYX0FQUF9SRU1fV0lMTElORykgPzogMDsKKwlpbmZvLT5lcnJvciA9IChicC0+ZGNieF9yZW1vdGVfZmxhZ3MgJiBEQ0JYX0FQUF9SWF9FUlJPUikgPzogMDsKKwkqYXBwX2NvdW50ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBEQ0JYX01BWF9BUFBfUFJPVE9DT0w7IGkrKykKKwkJaWYgKGJwLT5kY2J4X3JlbW90ZV9mZWF0LmFwcC5hcHBfcHJpX3RibFtpXS5hcHBCaXRmaWVsZCAmCisJCSAgICBEQ0JYX0FQUF9FTlRSWV9WQUxJRCkKKwkJCSgqYXBwX2NvdW50KSsrOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJueDJ4X3BlZXJfYXBwdGFibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGNiX2FwcCAqdGFibGUpCit7CisJaW50IGksIGo7CisJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlEUChORVRJRl9NU0dfTElOSywgIkFQUC1UQUJMRVxuIik7CisKKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IERDQlhfTUFYX0FQUF9QUk9UT0NPTDsgaSsrKSB7CisJCXN0cnVjdCBkY2J4X2FwcF9wcmlvcml0eV9lbnRyeSAqZW50ID0KKwkJCSZicC0+ZGNieF9yZW1vdGVfZmVhdC5hcHAuYXBwX3ByaV90YmxbaV07CisKKwkJaWYgKGVudC0+YXBwQml0ZmllbGQgJiBEQ0JYX0FQUF9FTlRSWV9WQUxJRCkgeworCQkJdGFibGVbal0uc2VsZWN0b3IgPSBibngyeF9kY2J4X2RjYm5sX2FwcF9pZHR5cGUoZW50KTsKKwkJCXRhYmxlW2pdLnByaW9yaXR5ID0gYm54MnhfZGNieF9kY2JubF9hcHBfdXAoZW50KTsKKwkJCXRhYmxlW2orK10ucHJvdG9jb2wgPSBlbnQtPmFwcF9pZDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBibngyeF9jZWVfcGVlcl9nZXRwZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgY2VlX3BnICpwZykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXBnLT53aWxsaW5nID0gKGJwLT5kY2J4X3JlbW90ZV9mbGFncyAmIERDQlhfRVRTX1JFTV9XSUxMSU5HKSA/OiAwOworCisJZm9yIChpID0gMDsgaSA8IENFRV9EQ0JYX01BWF9QR1M7IGkrKykgeworCQlwZy0+cGdfYndbaV0gPQorCQkJRENCWF9QR19CV19HRVQoYnAtPmRjYnhfcmVtb3RlX2ZlYXQuZXRzLnBnX2J3X3RibCwgaSk7CisJCXBnLT5wcmlvX3BnW2ldID0KKwkJCURDQlhfUFJJX1BHX0dFVChicC0+ZGNieF9yZW1vdGVfZmVhdC5ldHMucHJpX3BnX3RibCwgaSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJueDJ4X2NlZV9wZWVyX2dldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSBzdHJ1Y3QgY2VlX3BmYyAqcGZjKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXBmYy0+dGNzX3N1cHBvcnRlZCA9IGJwLT5kY2J4X3JlbW90ZV9mZWF0LnBmYy5wZmNfY2FwczsKKwlwZmMtPnBmY19lbiA9IGJwLT5kY2J4X3JlbW90ZV9mZWF0LnBmYy5wcmlfZW5fYml0bWFwOworCXJldHVybiAwOworfQorCiBjb25zdCBzdHJ1Y3QgZGNibmxfcnRubF9vcHMgYm54MnhfZGNibmxfb3BzID0gewotCS5nZXRzdGF0ZSAgICAgICA9IGJueDJ4X2RjYm5sX2dldF9zdGF0ZSwKLQkuc2V0c3RhdGUgICAgICAgPSBibngyeF9kY2JubF9zZXRfc3RhdGUsCi0JLmdldHBlcm1od2FkZHIgID0gYm54MnhfZGNibmxfZ2V0X3Blcm1faHdfYWRkciwKLQkuc2V0cGd0Y2NmZ3R4ICAgPSBibngyeF9kY2JubF9zZXRfcGdfdGNjZmdfdHgsCi0JLnNldHBnYndnY2ZndHggID0gYm54MnhfZGNibmxfc2V0X3BnX2J3Z2NmZ190eCwKLQkuc2V0cGd0Y2NmZ3J4ICAgPSBibngyeF9kY2JubF9zZXRfcGdfdGNjZmdfcngsCi0JLnNldHBnYndnY2ZncnggID0gYm54MnhfZGNibmxfc2V0X3BnX2J3Z2NmZ19yeCwKLQkuZ2V0cGd0Y2NmZ3R4ICAgPSBibngyeF9kY2JubF9nZXRfcGdfdGNjZmdfdHgsCi0JLmdldHBnYndnY2ZndHggID0gYm54MnhfZGNibmxfZ2V0X3BnX2J3Z2NmZ190eCwKLQkuZ2V0cGd0Y2NmZ3J4ICAgPSBibngyeF9kY2JubF9nZXRfcGdfdGNjZmdfcngsCi0JLmdldHBnYndnY2ZncnggID0gYm54MnhfZGNibmxfZ2V0X3BnX2J3Z2NmZ19yeCwKLQkuc2V0cGZjY2ZnICAgICAgPSBibngyeF9kY2JubF9zZXRfcGZjX2NmZywKLQkuZ2V0cGZjY2ZnICAgICAgPSBibngyeF9kY2JubF9nZXRfcGZjX2NmZywKLQkuc2V0YWxsICAgICAgICAgPSBibngyeF9kY2JubF9zZXRfYWxsLAotCS5nZXRjYXAgICAgICAgICA9IGJueDJ4X2RjYm5sX2dldF9jYXAsCi0JLmdldG51bXRjcyAgICAgID0gYm54MnhfZGNibmxfZ2V0X251bXRjcywKLQkuc2V0bnVtdGNzICAgICAgPSBibngyeF9kY2JubF9zZXRfbnVtdGNzLAotCS5nZXRwZmNzdGF0ZSAgICA9IGJueDJ4X2RjYm5sX2dldF9wZmNfc3RhdGUsCi0JLnNldHBmY3N0YXRlICAgID0gYm54MnhfZGNibmxfc2V0X3BmY19zdGF0ZSwKLQkuc2V0YXBwICAgICAgICAgPSBibngyeF9kY2JubF9zZXRfYXBwX3VwLAotCS5nZXRkY2J4ICAgICAgICA9IGJueDJ4X2RjYm5sX2dldF9kY2J4LAotCS5zZXRkY2J4ICAgICAgICA9IGJueDJ4X2RjYm5sX3NldF9kY2J4LAotCS5nZXRmZWF0Y2ZnICAgICA9IGJueDJ4X2RjYm5sX2dldF9mZWF0Y2ZnLAotCS5zZXRmZWF0Y2ZnICAgICA9IGJueDJ4X2RjYm5sX3NldF9mZWF0Y2ZnLAorCS5nZXRzdGF0ZQkJPSBibngyeF9kY2JubF9nZXRfc3RhdGUsCisJLnNldHN0YXRlCQk9IGJueDJ4X2RjYm5sX3NldF9zdGF0ZSwKKwkuZ2V0cGVybWh3YWRkcgkJPSBibngyeF9kY2JubF9nZXRfcGVybV9od19hZGRyLAorCS5zZXRwZ3RjY2ZndHgJCT0gYm54MnhfZGNibmxfc2V0X3BnX3RjY2ZnX3R4LAorCS5zZXRwZ2J3Z2NmZ3R4CQk9IGJueDJ4X2RjYm5sX3NldF9wZ19id2djZmdfdHgsCisJLnNldHBndGNjZmdyeAkJPSBibngyeF9kY2JubF9zZXRfcGdfdGNjZmdfcngsCisJLnNldHBnYndnY2ZncngJCT0gYm54MnhfZGNibmxfc2V0X3BnX2J3Z2NmZ19yeCwKKwkuZ2V0cGd0Y2NmZ3R4CQk9IGJueDJ4X2RjYm5sX2dldF9wZ190Y2NmZ190eCwKKwkuZ2V0cGdid2djZmd0eAkJPSBibngyeF9kY2JubF9nZXRfcGdfYndnY2ZnX3R4LAorCS5nZXRwZ3RjY2ZncngJCT0gYm54MnhfZGNibmxfZ2V0X3BnX3RjY2ZnX3J4LAorCS5nZXRwZ2J3Z2NmZ3J4CQk9IGJueDJ4X2RjYm5sX2dldF9wZ19id2djZmdfcngsCisJLnNldHBmY2NmZwkJPSBibngyeF9kY2JubF9zZXRfcGZjX2NmZywKKwkuZ2V0cGZjY2ZnCQk9IGJueDJ4X2RjYm5sX2dldF9wZmNfY2ZnLAorCS5zZXRhbGwJCQk9IGJueDJ4X2RjYm5sX3NldF9hbGwsCisJLmdldGNhcAkJCT0gYm54MnhfZGNibmxfZ2V0X2NhcCwKKwkuZ2V0bnVtdGNzCQk9IGJueDJ4X2RjYm5sX2dldF9udW10Y3MsCisJLnNldG51bXRjcwkJPSBibngyeF9kY2JubF9zZXRfbnVtdGNzLAorCS5nZXRwZmNzdGF0ZQkJPSBibngyeF9kY2JubF9nZXRfcGZjX3N0YXRlLAorCS5zZXRwZmNzdGF0ZQkJPSBibngyeF9kY2JubF9zZXRfcGZjX3N0YXRlLAorCS5zZXRhcHAJCQk9IGJueDJ4X2RjYm5sX3NldF9hcHBfdXAsCisJLmdldGRjYngJCT0gYm54MnhfZGNibmxfZ2V0X2RjYngsCisJLnNldGRjYngJCT0gYm54MnhfZGNibmxfc2V0X2RjYngsCisJLmdldGZlYXRjZmcJCT0gYm54MnhfZGNibmxfZ2V0X2ZlYXRjZmcsCisJLnNldGZlYXRjZmcJCT0gYm54MnhfZGNibmxfc2V0X2ZlYXRjZmcsCisJLnBlZXJfZ2V0YXBwaW5mbwk9IGJueDJ4X3BlZXJfYXBwaW5mbywKKwkucGVlcl9nZXRhcHB0YWJsZQk9IGJueDJ4X3BlZXJfYXBwdGFibGUsCisJLmNlZV9wZWVyX2dldHBnCQk9IGJueDJ4X2NlZV9wZWVyX2dldHBnLAorCS5jZWVfcGVlcl9nZXRwZmMJPSBibngyeF9jZWVfcGVlcl9nZXRwZmMsCiB9OwogCiAjZW5kaWYgLyogQkNNX0RDQk5MICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9kY2IuaCBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2RjYi5oCmluZGV4IDcxYjhlZGEuLmJlZDM2OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2RjYi5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2RjYi5oCkBAIC0xLDYgKzEsNiBAQAogLyogYm54MnhfZGNiLmg6IEJyb2FkY29tIEV2ZXJlc3QgbmV0d29yayBkcml2ZXIuCiAgKgotICogQ29weXJpZ2h0IDIwMDktMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IDIwMDktMjAxMSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICoKICAqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKICAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CkBAIC02MSw5ICs2MSw2IEBACiAjZGVmaW5lIEJOWDJYX0RDQlhfT1ZFUldSSVRFX1NFVFRJTkdTX0VOQUJMRQkJMQogI2RlZmluZSBCTlgyWF9EQ0JYX09WRVJXUklURV9TRVRUSU5HU19JTlZBTElECShCTlgyWF9EQ0JYX0NPTkZJR19JTlZfVkFMVUUpCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBMTERQIHByb3RvY29sIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdHJ1Y3QgYm54MnhfY29uZmlnX2xsZHBfcGFyYW1zIHsKIAl1MzIgb3ZlcndyaXRlX3NldHRpbmdzOwogCXUzMiBtc2dfdHhfaG9sZDsKQEAgLTgzLDkgKzgwLDYgQEAKIAkJdTMyIGFwcF9pZDsKIH07CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBEQ0JYIHByb3RvY29sIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdHJ1Y3QgYm54MnhfY29uZmlnX2RjYnhfcGFyYW1zIHsKIAl1MzIgb3ZlcndyaXRlX3NldHRpbmdzOwogCXUzMiBhZG1pbl9kY2J4X3ZlcnNpb247CkBAIC0xODMsOSArMTc3LDEzIEBACiAKIGVudW0gewogCUJOWDJYX0RDQlhfU1RBVEVfTkVHX1JFQ0VJVkVEID0gMHgxLAotCUJOWDJYX0RDQlhfU1RBVEVfVFhfUEFVU0VEID0gMHgyLAotCUJOWDJYX0RDQlhfU1RBVEVfVFhfUkVMRUFTRUQgPSAweDQKKyNpZmRlZiBCQ01fQ05JQworCUJOWDJYX0RDQlhfU1RBVEVfSVNDU0lfU1RPUFBFRCwKKyNlbmRpZgorCUJOWDJYX0RDQlhfU1RBVEVfVFhfUEFVU0VELAorCUJOWDJYX0RDQlhfU1RBVEVfVFhfUkVMRUFTRUQKIH07CisKIHZvaWQgYm54MnhfZGNieF9zZXRfcGFyYW1zKHN0cnVjdCBibngyeCAqYnAsIHUzMiBzdGF0ZSk7CiAKIC8qIERDQiBuZXRsaW5rICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9ldGh0b29sLmMKaW5kZXggODljYjk3Ny4uNzI3ZmU4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2V0aHRvb2wuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGJueDJ4X2V0aHRvb2wuYzogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTEgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE2Nyw2ICsxNjcsNyBAQAogewogCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBjZmdfaWR4ID0gYm54MnhfZ2V0X2xpbmtfY2ZnX2lkeChicCk7CisKIAkvKiBEdWFsIE1lZGlhIGJvYXJkcyBwcmVzZW50IGFsbCBhdmFpbGFibGUgcG9ydCB0eXBlcyAqLwogCWNtZC0+c3VwcG9ydGVkID0gYnAtPnBvcnQuc3VwcG9ydGVkW2NmZ19pZHhdIHwKIAkJKGJwLT5wb3J0LnN1cHBvcnRlZFtjZmdfaWR4IF4gMV0gJgpAQCAtMTc2LDE2ICsxNzcsMTYgQEAKIAlpZiAoKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9PUEVOKSAmJgogCSAgICAhKGJwLT5mbGFncyAmIE1GX0ZVTkNfRElTKSAmJgogCSAgICAoYnAtPmxpbmtfdmFycy5saW5rX3VwKSkgewotCQljbWQtPnNwZWVkID0gYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBicC0+bGlua192YXJzLmxpbmVfc3BlZWQpOwogCQljbWQtPmR1cGxleCA9IGJwLT5saW5rX3ZhcnMuZHVwbGV4OwogCX0gZWxzZSB7Ci0KLQkJY21kLT5zcGVlZCA9IGJwLT5saW5rX3BhcmFtcy5yZXFfbGluZV9zcGVlZFtjZmdfaWR4XTsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KAorCQkJY21kLCBicC0+bGlua19wYXJhbXMucmVxX2xpbmVfc3BlZWRbY2ZnX2lkeF0pOwogCQljbWQtPmR1cGxleCA9IGJwLT5saW5rX3BhcmFtcy5yZXFfZHVwbGV4W2NmZ19pZHhdOwogCX0KIAogCWlmIChJU19NRihicCkpCi0JCWNtZC0+c3BlZWQgPSBibngyeF9nZXRfbWZfc3BlZWQoYnApOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBibngyeF9nZXRfbWZfc3BlZWQoYnApKTsKIAogCWlmIChicC0+cG9ydC5zdXBwb3J0ZWRbY2ZnX2lkeF0gJiBTVVBQT1JURURfVFApCiAJCWNtZC0+cG9ydCA9IFBPUlRfVFA7CkBAIC0yMDYsMTAgKzIwNywxMSBAQAogCWNtZC0+bWF4cnhwa3QgPSAwOwogCiAJRFAoTkVUSUZfTVNHX0xJTkssICJldGh0b29sX2NtZDogY21kICVkXG4iCi0JICAgRFBfTEVWRUwgIiAgc3VwcG9ydGVkIDB4JXggIGFkdmVydGlzaW5nIDB4JXggIHNwZWVkICVkXG4iCisJICAgRFBfTEVWRUwgIiAgc3VwcG9ydGVkIDB4JXggIGFkdmVydGlzaW5nIDB4JXggIHNwZWVkICV1XG4iCiAJICAgRFBfTEVWRUwgIiAgZHVwbGV4ICVkICBwb3J0ICVkICBwaHlfYWRkcmVzcyAlZCAgdHJhbnNjZWl2ZXIgJWRcbiIKIAkgICBEUF9MRVZFTCAiICBhdXRvbmVnICVkICBtYXh0eHBrdCAlZCAgbWF4cnhwa3QgJWRcbiIsCi0JICAgY21kLT5jbWQsIGNtZC0+c3VwcG9ydGVkLCBjbWQtPmFkdmVydGlzaW5nLCBjbWQtPnNwZWVkLAorCSAgIGNtZC0+Y21kLCBjbWQtPnN1cHBvcnRlZCwgY21kLT5hZHZlcnRpc2luZywKKwkgICBldGh0b29sX2NtZF9zcGVlZChjbWQpLAogCSAgIGNtZC0+ZHVwbGV4LCBjbWQtPnBvcnQsIGNtZC0+cGh5X2FkZHJlc3MsIGNtZC0+dHJhbnNjZWl2ZXIsCiAJICAgY21kLT5hdXRvbmVnLCBjbWQtPm1heHR4cGt0LCBjbWQtPm1heHJ4cGt0KTsKIApAQCAtMjI2LDE2ICsyMjgsMTUgQEAKIAkJcmV0dXJuIDA7CiAKIAlEUChORVRJRl9NU0dfTElOSywgImV0aHRvb2xfY21kOiBjbWQgJWRcbiIKLQkgICAiICBzdXBwb3J0ZWQgMHgleCAgYWR2ZXJ0aXNpbmcgMHgleCAgc3BlZWQgJWQgc3BlZWRfaGkgJWRcbiIKKwkgICAiICBzdXBwb3J0ZWQgMHgleCAgYWR2ZXJ0aXNpbmcgMHgleCAgc3BlZWQgJXVcbiIKIAkgICAiICBkdXBsZXggJWQgIHBvcnQgJWQgIHBoeV9hZGRyZXNzICVkICB0cmFuc2NlaXZlciAlZFxuIgogCSAgICIgIGF1dG9uZWcgJWQgIG1heHR4cGt0ICVkICBtYXhyeHBrdCAlZFxuIiwKLQkgICBjbWQtPmNtZCwgY21kLT5zdXBwb3J0ZWQsIGNtZC0+YWR2ZXJ0aXNpbmcsIGNtZC0+c3BlZWQsCi0JICAgY21kLT5zcGVlZF9oaSwKKwkgICBjbWQtPmNtZCwgY21kLT5zdXBwb3J0ZWQsIGNtZC0+YWR2ZXJ0aXNpbmcsCisJICAgZXRodG9vbF9jbWRfc3BlZWQoY21kKSwKIAkgICBjbWQtPmR1cGxleCwgY21kLT5wb3J0LCBjbWQtPnBoeV9hZGRyZXNzLCBjbWQtPnRyYW5zY2VpdmVyLAogCSAgIGNtZC0+YXV0b25lZywgY21kLT5tYXh0eHBrdCwgY21kLT5tYXhyeHBrdCk7CiAKLQlzcGVlZCA9IGNtZC0+c3BlZWQ7Ci0Jc3BlZWQgfD0gKGNtZC0+c3BlZWRfaGkgPDwgMTYpOworCXNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoY21kKTsKIAogCWlmIChJU19NRl9TSShicCkpIHsKIAkJdTMyIHBhcnQ7CkBAIC00MzksNyArNDQwLDcgQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIlVuc3VwcG9ydGVkIHNwZWVkICVkXG4iLCBzcGVlZCk7CisJCQlEUChORVRJRl9NU0dfTElOSywgIlVuc3VwcG9ydGVkIHNwZWVkICV1XG4iLCBzcGVlZCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC0xMjE5LDcgKzEyMjAsOCBAQAogCX0KIAogCWlmICgoZXJpbmctPnJ4X3BlbmRpbmcgPiBNQVhfUlhfQVZBSUwpIHx8Ci0JICAgIChlcmluZy0+cnhfcGVuZGluZyA8IE1JTl9SWF9BVkFJTCkgfHwKKwkgICAgKGVyaW5nLT5yeF9wZW5kaW5nIDwgKGJwLT5kaXNhYmxlX3RwYSA/IE1JTl9SWF9TSVpFX05PTlRQQSA6CisJCQkJCQkgICAgTUlOX1JYX1NJWkVfVFBBKSkgfHwKIAkgICAgKGVyaW5nLT50eF9wZW5kaW5nID4gTUFYX1RYX0FWQUlMKSB8fAogCSAgICAoZXJpbmctPnR4X3BlbmRpbmcgPD0gTUFYX1NLQl9GUkFHUyArIDQpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEyOTksOTEgKzEzMDEsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGJueDJ4X3NldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgY2hhbmdlZCA9IDA7Ci0JaW50IHJjID0gMDsKLQotCWlmIChicC0+cmVjb3Zlcnlfc3RhdGUgIT0gQk5YMlhfUkVDT1ZFUllfRE9ORSkgewotCQlwcmludGsoS0VSTl9FUlIgIkhhbmRsaW5nIHBhcml0eSBlcnJvciByZWNvdmVyeS4gVHJ5IGFnYWluIGxhdGVyXG4iKTsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCi0JaWYgKCEoZGF0YSAmIEVUSF9GTEFHX1JYVkxBTikpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKChkYXRhICYgRVRIX0ZMQUdfTFJPKSAmJiBicC0+cnhfY3N1bSAmJiBicC0+ZGlzYWJsZV90cGEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmMgPSBldGh0b29sX29wX3NldF9mbGFncyhkZXYsIGRhdGEsIEVUSF9GTEFHX0xSTyB8IEVUSF9GTEFHX1JYVkxBTiB8Ci0JCQkJCUVUSF9GTEFHX1RYVkxBTiB8IEVUSF9GTEFHX1JYSEFTSCk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQkvKiBUUEEgcmVxdWlyZXMgUnggQ1NVTSBvZmZsb2FkaW5nICovCi0JaWYgKChkYXRhICYgRVRIX0ZMQUdfTFJPKSAmJiBicC0+cnhfY3N1bSkgewotCQlpZiAoIShicC0+ZmxhZ3MgJiBUUEFfRU5BQkxFX0ZMQUcpKSB7Ci0JCQlicC0+ZmxhZ3MgfD0gVFBBX0VOQUJMRV9GTEFHOwotCQkJY2hhbmdlZCA9IDE7Ci0JCX0KLQl9IGVsc2UgaWYgKGJwLT5mbGFncyAmIFRQQV9FTkFCTEVfRkxBRykgewotCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0xSTzsKLQkJYnAtPmZsYWdzICY9IH5UUEFfRU5BQkxFX0ZMQUc7Ci0JCWNoYW5nZWQgPSAxOwotCX0KLQotCWlmIChjaGFuZ2VkICYmIG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQlibngyeF9uaWNfdW5sb2FkKGJwLCBVTkxPQURfTk9STUFMKTsKLQkJcmMgPSBibngyeF9uaWNfbG9hZChicCwgTE9BRF9OT1JNQUwpOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHUzMiBibngyeF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcmV0dXJuIGJwLT5yeF9jc3VtOwotfQotCi1zdGF0aWMgaW50IGJueDJ4X3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCByYyA9IDA7Ci0KLQlpZiAoYnAtPnJlY292ZXJ5X3N0YXRlICE9IEJOWDJYX1JFQ09WRVJZX0RPTkUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJIYW5kbGluZyBwYXJpdHkgZXJyb3IgcmVjb3ZlcnkuIFRyeSBhZ2FpbiBsYXRlclxuIik7Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQotCWJwLT5yeF9jc3VtID0gZGF0YTsKLQotCS8qIERpc2FibGUgVFBBLCB3aGVuIFJ4IENTVU0gaXMgZGlzYWJsZWQuIE90aGVyd2lzZSBhbGwKLQkgICBUUEEnZWQgcGFja2V0cyB3aWxsIGJlIGRpc2NhcmRlZCBkdWUgdG8gd3JvbmcgVENQIENTVU0gKi8KLQlpZiAoIWRhdGEpIHsKLQkJdTMyIGZsYWdzID0gZXRodG9vbF9vcF9nZXRfZmxhZ3MoZGV2KTsKLQotCQlyYyA9IGJueDJ4X3NldF9mbGFncyhkZXYsIChmbGFncyAmIH5FVEhfRkxBR19MUk8pKTsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgYm54Mnhfc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlpZiAoZGF0YSkgewotCQlkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPX0VDTik7Ci0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwotCX0gZWxzZSB7Ci0JCWRldi0+ZmVhdHVyZXMgJj0gfihORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPX0VDTik7Ci0JCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPNjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJY2hhciBzdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKIH0gYm54MnhfdGVzdHNfc3RyX2FycltCTlgyWF9OVU1fVEVTVFNdID0gewpAQCAtMjA5NywzNiArMjAxNCwzOCBAQAogCX0KIH0KIAotc3RhdGljIGludCBibngyeF9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQorc3RhdGljIGludCBibngyeF9zZXRfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICBlbnVtIGV0aHRvb2xfcGh5c19pZF9zdGF0ZSBzdGF0ZSkKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgaTsKIAogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FQUdBSU47CiAKIAlpZiAoIWJwLT5wb3J0LnBtZikKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCWlmIChkYXRhID09IDApCi0JCWRhdGEgPSAyOworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIEVUSFRPT0xfSURfQUNUSVZFOgorCQlyZXR1cm4gMTsJLyogY3ljbGUgb24vb2ZmIG9uY2UgcGVyIHNlY29uZCAqLwogCi0JZm9yIChpID0gMDsgaSA8IChkYXRhICogMik7IGkrKykgewotCQlpZiAoKGkgJSAyKSA9PSAwKQotCQkJYm54Mnhfc2V0X2xlZCgmYnAtPmxpbmtfcGFyYW1zLCAmYnAtPmxpbmtfdmFycywKLQkJCQkgICAgICBMRURfTU9ERV9PTiwgU1BFRURfMTAwMCk7Ci0JCWVsc2UKLQkJCWJueDJ4X3NldF9sZWQoJmJwLT5saW5rX3BhcmFtcywgJmJwLT5saW5rX3ZhcnMsCi0JCQkJICAgICAgTEVEX01PREVfRlJPTlRfUEFORUxfT0ZGLCAwKTsKKwljYXNlIEVUSFRPT0xfSURfT046CisJCWJueDJ4X3NldF9sZWQoJmJwLT5saW5rX3BhcmFtcywgJmJwLT5saW5rX3ZhcnMsCisJCQkgICAgICBMRURfTU9ERV9PTiwgU1BFRURfMTAwMCk7CisJCWJyZWFrOwogCi0JCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDUwMCk7Ci0JCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9JRF9PRkY6CisJCWJueDJ4X3NldF9sZWQoJmJwLT5saW5rX3BhcmFtcywgJmJwLT5saW5rX3ZhcnMsCisJCQkgICAgICBMRURfTU9ERV9GUk9OVF9QQU5FTF9PRkYsIDApOworCisJCWJyZWFrOworCisJY2FzZSBFVEhUT09MX0lEX0lOQUNUSVZFOgorCQlibngyeF9zZXRfbGVkKCZicC0+bGlua19wYXJhbXMsICZicC0+bGlua192YXJzLAorCQkJICAgICAgTEVEX01PREVfT1BFUiwKKwkJCSAgICAgIGJwLT5saW5rX3ZhcnMubGluZV9zcGVlZCk7CiAJfQogCi0JYm54Mnhfc2V0X2xlZCgmYnAtPmxpbmtfcGFyYW1zLCAmYnAtPmxpbmtfdmFycywKLQkJICAgICAgTEVEX01PREVfT1BFUiwgYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkKTsKLQogCXJldHVybiAwOwogfQogCkBAIC0yMjA0LDIwICsyMTIzLDEwIEBACiAJLnNldF9yaW5ncGFyYW0JCT0gYm54Mnhfc2V0X3JpbmdwYXJhbSwKIAkuZ2V0X3BhdXNlcGFyYW0JCT0gYm54MnhfZ2V0X3BhdXNlcGFyYW0sCiAJLnNldF9wYXVzZXBhcmFtCQk9IGJueDJ4X3NldF9wYXVzZXBhcmFtLAotCS5nZXRfcnhfY3N1bQkJPSBibngyeF9nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0JCT0gYm54Mnhfc2V0X3J4X2NzdW0sCi0JLmdldF90eF9jc3VtCQk9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCi0JLnNldF90eF9jc3VtCQk9IGV0aHRvb2xfb3Bfc2V0X3R4X2h3X2NzdW0sCi0JLnNldF9mbGFncwkJPSBibngyeF9zZXRfZmxhZ3MsCi0JLmdldF9mbGFncwkJPSBldGh0b29sX29wX2dldF9mbGFncywKLQkuZ2V0X3NnCQkJPSBldGh0b29sX29wX2dldF9zZywKLQkuc2V0X3NnCQkJPSBldGh0b29sX29wX3NldF9zZywKLQkuZ2V0X3RzbwkJPSBldGh0b29sX29wX2dldF90c28sCi0JLnNldF90c28JCT0gYm54Mnhfc2V0X3RzbywKIAkuc2VsZl90ZXN0CQk9IGJueDJ4X3NlbGZfdGVzdCwKIAkuZ2V0X3NzZXRfY291bnQJCT0gYm54MnhfZ2V0X3NzZXRfY291bnQsCiAJLmdldF9zdHJpbmdzCQk9IGJueDJ4X2dldF9zdHJpbmdzLAotCS5waHlzX2lkCQk9IGJueDJ4X3BoeXNfaWQsCisJLnNldF9waHlzX2lkCQk9IGJueDJ4X3NldF9waHlzX2lkLAogCS5nZXRfZXRodG9vbF9zdGF0cwk9IGJueDJ4X2dldF9ldGh0b29sX3N0YXRzLAogCS5nZXRfcnhuZmMJCT0gYm54MnhfZ2V0X3J4bmZjLAogCS5nZXRfcnhmaF9pbmRpcgkJPSBibngyeF9nZXRfcnhmaF9pbmRpciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2Z3X2RlZnMuaCBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2Z3X2RlZnMuaAppbmRleCBmNGU1YjFjLi45ZmUzNjc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9md19kZWZzLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZndfZGVmcy5oCkBAIC0xLDYgKzEsNiBAQAogLyogYm54MnhfZndfZGVmcy5oOiBCcm9hZGNvbSBFdmVyZXN0IG5ldHdvcmsgZHJpdmVyLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNy0yMDEwIEJyb2FkY29tIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZndfZmlsZV9oZHIuaCBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2Z3X2ZpbGVfaGRyLmgKaW5kZXggZjgwNzI2Mi4uZjRhMDdmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZndfZmlsZV9oZHIuaAorKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9md19maWxlX2hkci5oCkBAIC0xLDYgKzEsNiBAQAogLyogYm54MnhfZndfZmlsZV9oZHIuaDogRlcgYmluYXJ5IGZpbGUgaGVhZGVyIHN0cnVjdHVyZS4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTEgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2hzaS5oIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaHNpLmgKaW5kZXggZGFjMWJmOS4uY2RmMTlmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaHNpLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaHNpLmgKQEAgLTEsNiArMSw2IEBACiAvKiBibngyeF9oc2kuaDogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTEgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE5MjksNyArMTkyOSw3IEBACiAKICNkZWZpbmUgQkNNXzU3MTBfRldfTUFKT1JfVkVSU0lPTgkJCTYKICNkZWZpbmUgQkNNXzU3MTBfRldfTUlOT1JfVkVSU0lPTgkJCTIKLSNkZWZpbmUgQkNNXzU3MTBfRldfUkVWSVNJT05fVkVSU0lPTgkJCTUKKyNkZWZpbmUgQkNNXzU3MTBfRldfUkVWSVNJT05fVkVSU0lPTgkJCTkKICNkZWZpbmUgQkNNXzU3MTBfRldfRU5HSU5FRVJJTkdfVkVSU0lPTgkJCTAKICNkZWZpbmUgQkNNXzU3MTBfRldfQ09NUElMRV9GTEFHUwkJCTEKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaW5pdC5oIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaW5pdC5oCmluZGV4IGZhNmRiZTMuLmQ1Mzk5MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2luaXQuaAorKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9pbml0LmgKQEAgLTEsNyArMSw3IEBACiAvKiBibngyeF9pbml0Lmg6IEJyb2FkY29tIEV2ZXJlc3QgbmV0d29yayBkcml2ZXIuCiAgKiAgICAgICAgICAgICAgIFN0cnVjdHVyZXMgYW5kIG1hY3JvZXMgbmVlZGVkIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24uCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDExIEJyb2FkY29tIENvcnBvcmF0aW9uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9pbml0X29wcy5oIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaW5pdF9vcHMuaAppbmRleCA2NmRmMjlmLi5hYWZkMDIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9pbml0X29wcy5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2luaXRfb3BzLmgKQEAgLTIsNyArMiw3IEBACiAgKiAgICAgICAgICAgICAgIFN0YXRpYyBmdW5jdGlvbnMgbmVlZGVkIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24uCiAgKiAgICAgICAgICAgICAgIFRoaXMgZmlsZSBpcyAiaW5jbHVkZWQiIGluIGJueDJ4X21haW4uYy4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTEgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2xpbmsuYyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2xpbmsuYwppbmRleCA5NzRlZjJiLi4wNzZlMTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9saW5rLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbGluay5jCkBAIC0zODUsNyArMzg1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgkJCUVUUyBzZWN0aW9uCQkJCSAgKi8KKy8qCQkJUEZDIHNlY3Rpb24JCQkJICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIHZvaWQgYm54MnhfYm1hYzJfZ2V0X3BmY19zdGF0KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLApAQCAtMTMwMSwxNCArMTMwMSwxMiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogZ2V0X2VtYWNfYmFzZQorLyoqCisgKiBibngyeF9nZXRfZW1hY19iYXNlIC0gcmV0cml2ZSBlbWFjIGJhc2UgYWRkcmVzcwogICoKLSAqIEBwYXJhbSBjYgotICogQHBhcmFtIG1kY19tZGlvX2FjY2VzcwotICogQHBhcmFtIHBvcnQKLSAqCi0gKiBAcmV0dXJuIHUzMgorICogQGJwOgkJCWRyaXZlciBoYW5kbGUKKyAqIEBtZGNfbWRpb19hY2Nlc3M6CWFjY2VzcyB0eXBlCisgKiBAcG9ydDoJCXBvcnQgaWQKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHNlbGVjdHMgdGhlIE1EQy9NRElPIGFjY2VzcyAodGhyb3VnaCBlbWFjMCBvcgogICogZW1hYzEpIGRlcGVuZCBvbiB0aGUgbWRjX21kaW9fYWNjZXNzLCBwb3J0LCBwb3J0IHN3YXBwZWQuIEVhY2gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X21haW4uYyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X21haW4uYwppbmRleCBhOTdhNGExLi5mNDVjMGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbWFpbi5jCkBAIC0xLDYgKzEsNiBAQAogLyogYm54MnhfbWFpbi5jOiBCcm9hZGNvbSBFdmVyZXN0IG5ldHdvcmsgZHJpdmVyLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNy0yMDEwIEJyb2FkY29tIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjAzNiw3ICsyMDM2LDcgQEAKIAlyZXR1cm4gQ01OR19GTlNfTk9ORTsKIH0KIAotc3RhdGljIHZvaWQgYm54MnhfcmVhZF9tZl9jZmcoc3RydWN0IGJueDJ4ICpicCkKK3ZvaWQgYm54MnhfcmVhZF9tZl9jZmcoc3RydWN0IGJueDJ4ICpicCkKIHsKIAlpbnQgdm4sIG4gPSAoQ0hJUF9NT0RFX0lTXzRfUE9SVChicCkgPyAyIDogMSk7CiAKQEAgLTIxMjMsNyArMjEyMyw2IEBACiAvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB1cG9uIGxpbmsgaW50ZXJydXB0ICovCiBzdGF0aWMgdm9pZCBibngyeF9saW5rX2F0dG4oc3RydWN0IGJueDJ4ICpicCkKIHsKLQl1MzIgcHJldl9saW5rX3N0YXR1cyA9IGJwLT5saW5rX3ZhcnMubGlua19zdGF0dXM7CiAJLyogTWFrZSBzdXJlIHRoYXQgd2UgYXJlIHN5bmNlZCB3aXRoIHRoZSBjdXJyZW50IHN0YXRpc3RpY3MgKi8KIAlibngyeF9zdGF0c19oYW5kbGUoYnAsIFNUQVRTX0VWRU5UX1NUT1ApOwogCkBAIC0yMTY4LDE3ICsyMTY3LDE1IEBACiAJCQkgICAic2luZ2xlIGZ1bmN0aW9uIG1vZGUgd2l0aG91dCBmYWlybmVzc1xuIik7CiAJfQogCisJX19ibngyeF9saW5rX3JlcG9ydChicCk7CisKIAlpZiAoSVNfTUYoYnApKQogCQlibngyeF9saW5rX3N5bmNfbm90aWZ5KGJwKTsKLQotCS8qIGluZGljYXRlIGxpbmsgc3RhdHVzIG9ubHkgaWYgbGluayBzdGF0dXMgYWN0dWFsbHkgY2hhbmdlZCAqLwotCWlmIChwcmV2X2xpbmtfc3RhdHVzICE9IGJwLT5saW5rX3ZhcnMubGlua19zdGF0dXMpCi0JCWJueDJ4X2xpbmtfcmVwb3J0KGJwKTsKIH0KIAogdm9pZCBibngyeF9fbGlua19zdGF0dXNfdXBkYXRlKHN0cnVjdCBibngyeCAqYnApCiB7Ci0JaWYgKChicC0+c3RhdGUgIT0gQk5YMlhfU1RBVEVfT1BFTikgfHwgKGJwLT5mbGFncyAmIE1GX0ZVTkNfRElTKSkKKwlpZiAoYnAtPnN0YXRlICE9IEJOWDJYX1NUQVRFX09QRU4pCiAJCXJldHVybjsKIAogCWJueDJ4X2xpbmtfc3RhdHVzX3VwZGF0ZSgmYnAtPmxpbmtfcGFyYW1zLCAmYnAtPmxpbmtfdmFycyk7CkBAIC0yMTg4LDEwICsyMTg1LDYgQEAKIAllbHNlCiAJCWJueDJ4X3N0YXRzX2hhbmRsZShicCwgU1RBVFNfRVZFTlRfU1RPUCk7CiAKLQkvKiB0aGUgbGluayBzdGF0dXMgdXBkYXRlIGNvdWxkIGJlIHRoZSByZXN1bHQgb2YgYSBEQ0MgZXZlbnQKLQkgICBoZW5jZSByZS1yZWFkIHRoZSBzaG1lbSBtZiBjb25maWd1cmF0aW9uICovCi0JYm54MnhfcmVhZF9tZl9jZmcoYnApOwotCiAJLyogaW5kaWNhdGUgbGluayBzdGF0dXMgKi8KIAlibngyeF9saW5rX3JlcG9ydChicCk7CiB9CkBAIC0zMTIwLDEwICszMTEzLDE0IEBACiAJCQlpZiAodmFsICYgRFJWX1NUQVRVU19TRVRfTUZfQlcpCiAJCQkJYm54Mnhfc2V0X21mX2J3KGJwKTsKIAotCQkJYm54MnhfX2xpbmtfc3RhdHVzX3VwZGF0ZShicCk7CiAJCQlpZiAoKGJwLT5wb3J0LnBtZiA9PSAwKSAmJiAodmFsICYgRFJWX1NUQVRVU19QTUYpKQogCQkJCWJueDJ4X3BtZl91cGRhdGUoYnApOwogCisJCQkvKiBBbHdheXMgY2FsbCBpdCBoZXJlOiBibngyeF9saW5rX3JlcG9ydCgpIHdpbGwKKwkJCSAqIHByZXZlbnQgdGhlIGxpbmsgaW5kaWNhdGlvbiBkdXBsaWNhdGlvbi4KKwkJCSAqLworCQkJYm54MnhfX2xpbmtfc3RhdHVzX3VwZGF0ZShicCk7CisKIAkJCWlmIChicC0+cG9ydC5wbWYgJiYKIAkJCSAgICAodmFsICYgRFJWX1NUQVRVU19EQ0JYX05FR09USUFUSU9OX1JFU1VMVFMpICYmCiAJCQkJYnAtPmRjYnhfZW5hYmxlZCA+IDApCkBAIC0zOTA0LDEwICszOTAxLDkgQEAKIAogCWlmIChwb2xsKSB7CiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwWzBdOwotCQlpbnQgcmM7CiAKIAkJYm54MnhfdHhfaW50KGZwKTsKLQkJcmMgPSBibngyeF9yeF9pbnQoZnAsIDEwMDApOworCQlibngyeF9yeF9pbnQoZnAsIDEwMDApOwogCX0KIAogCWlmICghQlBfTk9NQ1AoYnApKSB7CkBAIC00MDYyLDcgKzQwNTgsNiBAQAogCXN0cnVjdCBoY19zdGF0dXNfYmxvY2tfZGF0YV9lMiBzYl9kYXRhX2UyOwogCXN0cnVjdCBoY19zdGF0dXNfYmxvY2tfZGF0YV9lMXggc2JfZGF0YV9lMXg7CiAJc3RydWN0IGhjX3N0YXR1c19ibG9ja19zbSAgKmhjX3NtX3A7Ci0Jc3RydWN0IGhjX2luZGV4X2RhdGEgKmhjX2luZGV4X3A7CiAJaW50IGRhdGFfc2l6ZTsKIAl1MzIgKnNiX2RhdGFfcDsKIApAQCAtNDA4Myw3ICs0MDc4LDYgQEAKIAkJc2JfZGF0YV9lMi5jb21tb24uaG9zdF9zYl9hZGRyLmhpID0gVTY0X0hJKG1hcHBpbmcpOwogCQlzYl9kYXRhX2UyLmNvbW1vbi5ob3N0X3NiX2FkZHIubG8gPSBVNjRfTE8obWFwcGluZyk7CiAJCWhjX3NtX3AgPSBzYl9kYXRhX2UyLmNvbW1vbi5zdGF0ZV9tYWNoaW5lOwotCQloY19pbmRleF9wID0gc2JfZGF0YV9lMi5pbmRleF9kYXRhOwogCQlzYl9kYXRhX3AgPSAodTMyICopJnNiX2RhdGFfZTI7CiAJCWRhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaGNfc3RhdHVzX2Jsb2NrX2RhdGFfZTIpL3NpemVvZih1MzIpOwogCX0gZWxzZSB7CkBAIC00MDk3LDcgKzQwOTEsNiBAQAogCQlzYl9kYXRhX2UxeC5jb21tb24uaG9zdF9zYl9hZGRyLmhpID0gVTY0X0hJKG1hcHBpbmcpOwogCQlzYl9kYXRhX2UxeC5jb21tb24uaG9zdF9zYl9hZGRyLmxvID0gVTY0X0xPKG1hcHBpbmcpOwogCQloY19zbV9wID0gc2JfZGF0YV9lMXguY29tbW9uLnN0YXRlX21hY2hpbmU7Ci0JCWhjX2luZGV4X3AgPSBzYl9kYXRhX2UxeC5pbmRleF9kYXRhOwogCQlzYl9kYXRhX3AgPSAodTMyICopJnNiX2RhdGFfZTF4OwogCQlkYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGhjX3N0YXR1c19ibG9ja19kYXRhX2UxeCkvc2l6ZW9mKHUzMik7CiAJfQpAQCAtNDQ1NCw3ICs0NDQ3LDcgQEAKIAogCWZwLT5zdGF0ZSA9IEJOWDJYX0ZQX1NUQVRFX0NMT1NFRDsKIAotCWZwLT5pbmRleCA9IGZwLT5jaWQgPSBmcF9pZHg7CisJZnAtPmNpZCA9IGZwX2lkeDsKIAlmcC0+Y2xfaWQgPSBCUF9MX0lEKGJwKSArIGZwX2lkeDsKIAlmcC0+Zndfc2JfaWQgPSBicC0+YmFzZV9md19uZHNiICsgZnAtPmNsX2lkICsgQ05JQ19DT05URVhUX1VTRTsKIAlmcC0+aWd1X3NiX2lkID0gYnAtPmlndV9iYXNlX3NiICsgZnBfaWR4ICsgQ05JQ19DT05URVhUX1VTRTsKQEAgLTQ1NjYsOSArNDU1OSwxMSBAQAogCiBzdGF0aWMgdm9pZCBibngyeF9ndW56aXBfZW5kKHN0cnVjdCBibngyeCAqYnApCiB7Ci0Ja2ZyZWUoYnAtPnN0cm0tPndvcmtzcGFjZSk7Ci0Ja2ZyZWUoYnAtPnN0cm0pOwotCWJwLT5zdHJtID0gTlVMTDsKKwlpZiAoYnAtPnN0cm0pIHsKKwkJa2ZyZWUoYnAtPnN0cm0tPndvcmtzcGFjZSk7CisJCWtmcmVlKGJwLT5zdHJtKTsKKwkJYnAtPnN0cm0gPSBOVUxMOworCX0KIAogCWlmIChicC0+Z3VuemlwX2J1ZikgewogCQlkbWFfZnJlZV9jb2hlcmVudCgmYnAtPnBkZXYtPmRldiwgRldfQlVGX1NJWkUsIGJwLT5ndW56aXBfYnVmLApAQCAtNTg3Niw5ICs1ODcxLDYgQEAKIAogCWJwLT5kbWFlX3JlYWR5ID0gMDsKIAlzcGluX2xvY2tfaW5pdCgmYnAtPmRtYWVfbG9jayk7Ci0JcmMgPSBibngyeF9ndW56aXBfaW5pdChicCk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CiAKIAlzd2l0Y2ggKGxvYWRfY29kZSkgewogCWNhc2UgRldfTVNHX0NPREVfRFJWX0xPQURfQ09NTU9OOgpAQCAtNTkyMiw4MCArNTkxNCwxMCBAQAogCiB2b2lkIGJueDJ4X2ZyZWVfbWVtKHN0cnVjdCBibngyeCAqYnApCiB7Ci0KLSNkZWZpbmUgQk5YMlhfUENJX0ZSRUUoeCwgeSwgc2l6ZSkgXAotCWRvIHsgXAotCQlpZiAoeCkgeyBcCi0JCQlkbWFfZnJlZV9jb2hlcmVudCgmYnAtPnBkZXYtPmRldiwgc2l6ZSwgKHZvaWQgKil4LCB5KTsgXAotCQkJeCA9IE5VTEw7IFwKLQkJCXkgPSAwOyBcCi0JCX0gXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgQk5YMlhfRlJFRSh4KSBcCi0JZG8geyBcCi0JCWlmICh4KSB7IFwKLQkJCWtmcmVlKCh2b2lkICopeCk7IFwKLQkJCXggPSBOVUxMOyBcCi0JCX0gXAotCX0gd2hpbGUgKDApCi0KLQlpbnQgaTsKKwlibngyeF9ndW56aXBfZW5kKGJwKTsKIAogCS8qIGZhc3RwYXRoICovCi0JLyogQ29tbW9uICovCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKLSNpZmRlZiBCQ01fQ05JQwotCQkvKiBGQ29FIGNsaWVudCB1c2VzIGRlZmF1bHQgc3RhdHVzIGJsb2NrICovCi0JCWlmIChJU19GQ09FX0lEWChpKSkgewotCQkJdW5pb24gaG9zdF9oY19zdGF0dXNfYmxvY2sgKnNiID0KLQkJCQkmYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGspOwotCQkJbWVtc2V0KHNiLCAwLCBzaXplb2YodW5pb24gaG9zdF9oY19zdGF0dXNfYmxvY2spKTsKLQkJCWJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrX21hcHBpbmcpID0gMDsKLQkJfSBlbHNlIHsKLSNlbmRpZgotCQkvKiBzdGF0dXMgYmxvY2tzICovCi0JCWlmIChDSElQX0lTX0UyKGJwKSkKLQkJCUJOWDJYX1BDSV9GUkVFKGJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrLmUyX3NiKSwKLQkJCQkgICAgICAgYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGtfbWFwcGluZyksCi0JCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaG9zdF9oY19zdGF0dXNfYmxvY2tfZTIpKTsKLQkJZWxzZQotCQkJQk5YMlhfUENJX0ZSRUUoYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGsuZTF4X3NiKSwKLQkJCQkgICAgICAgYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGtfbWFwcGluZyksCi0JCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaG9zdF9oY19zdGF0dXNfYmxvY2tfZTF4KSk7Ci0jaWZkZWYgQkNNX0NOSUMKLQkJfQotI2VuZGlmCi0JfQotCS8qIFJ4ICovCi0JZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpIHsKLQotCQkvKiBmYXN0cGF0aCByeCByaW5nczogcnhfYnVmIHJ4X2Rlc2MgcnhfY29tcCAqLwotCQlCTlgyWF9GUkVFKGJueDJ4X2ZwKGJwLCBpLCByeF9idWZfcmluZykpOwotCQlCTlgyWF9QQ0lfRlJFRShibngyeF9mcChicCwgaSwgcnhfZGVzY19yaW5nKSwKLQkJCSAgICAgICBibngyeF9mcChicCwgaSwgcnhfZGVzY19tYXBwaW5nKSwKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGV0aF9yeF9iZCkgKiBOVU1fUlhfQkQpOwotCi0JCUJOWDJYX1BDSV9GUkVFKGJueDJ4X2ZwKGJwLCBpLCByeF9jb21wX3JpbmcpLAotCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBpLCByeF9jb21wX21hcHBpbmcpLAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZXRoX2Zhc3RfcGF0aF9yeF9jcWUpICoKLQkJCSAgICAgICBOVU1fUkNRX0JEKTsKLQotCQkvKiBTR0UgcmluZyAqLwotCQlCTlgyWF9GUkVFKGJueDJ4X2ZwKGJwLCBpLCByeF9wYWdlX3JpbmcpKTsKLQkJQk5YMlhfUENJX0ZSRUUoYm54MnhfZnAoYnAsIGksIHJ4X3NnZV9yaW5nKSwKLQkJCSAgICAgICBibngyeF9mcChicCwgaSwgcnhfc2dlX21hcHBpbmcpLAotCQkJICAgICAgIEJDTV9QQUdFX1NJWkUgKiBOVU1fUlhfU0dFX1BBR0VTKTsKLQl9Ci0JLyogVHggKi8KLQlmb3JfZWFjaF90eF9xdWV1ZShicCwgaSkgewotCi0JCS8qIGZhc3RwYXRoIHR4IHJpbmdzOiB0eF9idWYgdHhfZGVzYyAqLwotCQlCTlgyWF9GUkVFKGJueDJ4X2ZwKGJwLCBpLCB0eF9idWZfcmluZykpOwotCQlCTlgyWF9QQ0lfRlJFRShibngyeF9mcChicCwgaSwgdHhfZGVzY19yaW5nKSwKLQkJCSAgICAgICBibngyeF9mcChicCwgaSwgdHhfZGVzY19tYXBwaW5nKSwKLQkJCSAgICAgICBzaXplb2YodW5pb24gZXRoX3R4X2JkX3R5cGVzKSAqIE5VTV9UWF9CRCk7Ci0JfQorCWJueDJ4X2ZyZWVfZnBfbWVtKGJwKTsKIAkvKiBlbmQgb2YgZmFzdHBhdGggKi8KIAogCUJOWDJYX1BDSV9GUkVFKGJwLT5kZWZfc3RhdHVzX2JsaywgYnAtPmRlZl9zdGF0dXNfYmxrX21hcHBpbmcsCkBAIC02MDI4LDEwMSArNTk1MCwxMyBAQAogCQkgICAgICAgQkNNX1BBR0VfU0laRSAqIE5VTV9FUV9QQUdFUyk7CiAKIAlCTlgyWF9GUkVFKGJwLT5yeF9pbmRpcl90YWJsZSk7Ci0KLSN1bmRlZiBCTlgyWF9QQ0lfRlJFRQotI3VuZGVmIEJOWDJYX0tGUkVFCiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc2Jfc2hvcnRjdXRzKHN0cnVjdCBibngyeCAqYnAsIGludCBpbmRleCkKLXsKLQl1bmlvbiBob3N0X2hjX3N0YXR1c19ibG9jayBzdGF0dXNfYmxrID0gYm54MnhfZnAoYnAsIGluZGV4LCBzdGF0dXNfYmxrKTsKLQlpZiAoQ0hJUF9JU19FMihicCkpIHsKLQkJYm54MnhfZnAoYnAsIGluZGV4LCBzYl9pbmRleF92YWx1ZXMpID0KLQkJCShfX2xlMTYgKilzdGF0dXNfYmxrLmUyX3NiLT5zYi5pbmRleF92YWx1ZXM7Ci0JCWJueDJ4X2ZwKGJwLCBpbmRleCwgc2JfcnVubmluZ19pbmRleCkgPQotCQkJKF9fbGUxNiAqKXN0YXR1c19ibGsuZTJfc2ItPnNiLnJ1bm5pbmdfaW5kZXg7Ci0JfSBlbHNlIHsKLQkJYm54MnhfZnAoYnAsIGluZGV4LCBzYl9pbmRleF92YWx1ZXMpID0KLQkJCShfX2xlMTYgKilzdGF0dXNfYmxrLmUxeF9zYi0+c2IuaW5kZXhfdmFsdWVzOwotCQlibngyeF9mcChicCwgaW5kZXgsIHNiX3J1bm5pbmdfaW5kZXgpID0KLQkJCShfX2xlMTYgKilzdGF0dXNfYmxrLmUxeF9zYi0+c2IucnVubmluZ19pbmRleDsKLQl9Ci19CiAKIGludCBibngyeF9hbGxvY19tZW0oc3RydWN0IGJueDJ4ICpicCkKIHsKLSNkZWZpbmUgQk5YMlhfUENJX0FMTE9DKHgsIHksIHNpemUpIFwKLQlkbyB7IFwKLQkJeCA9IGRtYV9hbGxvY19jb2hlcmVudCgmYnAtPnBkZXYtPmRldiwgc2l6ZSwgeSwgR0ZQX0tFUk5FTCk7IFwKLQkJaWYgKHggPT0gTlVMTCkgXAotCQkJZ290byBhbGxvY19tZW1fZXJyOyBcCi0JCW1lbXNldCh4LCAwLCBzaXplKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgQk5YMlhfQUxMT0MoeCwgc2l6ZSkgXAotCWRvIHsgXAotCQl4ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsgXAotCQlpZiAoeCA9PSBOVUxMKSBcCi0JCQlnb3RvIGFsbG9jX21lbV9lcnI7IFwKLQl9IHdoaWxlICgwKQotCi0JaW50IGk7Ci0KLQkvKiBmYXN0cGF0aCAqLwotCS8qIENvbW1vbiAqLwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7Ci0JCXVuaW9uIGhvc3RfaGNfc3RhdHVzX2Jsb2NrICpzYiA9ICZibngyeF9mcChicCwgaSwgc3RhdHVzX2Jsayk7Ci0JCWJueDJ4X2ZwKGJwLCBpLCBicCkgPSBicDsKLQkJLyogc3RhdHVzIGJsb2NrcyAqLwotI2lmZGVmIEJDTV9DTklDCi0JCWlmICghSVNfRkNPRV9JRFgoaSkpIHsKLSNlbmRpZgotCQkJaWYgKENISVBfSVNfRTIoYnApKQotCQkJCUJOWDJYX1BDSV9BTExPQyhzYi0+ZTJfc2IsCi0JCQkJICAgICZibngyeF9mcChicCwgaSwgc3RhdHVzX2Jsa19tYXBwaW5nKSwKLQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBob3N0X2hjX3N0YXR1c19ibG9ja19lMikpOwotCQkJZWxzZQotCQkJCUJOWDJYX1BDSV9BTExPQyhzYi0+ZTF4X3NiLAotCQkJCSAgICAmYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGtfbWFwcGluZyksCi0JCQkJICAgIHNpemVvZihzdHJ1Y3QgaG9zdF9oY19zdGF0dXNfYmxvY2tfZTF4KSk7Ci0jaWZkZWYgQkNNX0NOSUMKLQkJfQotI2VuZGlmCi0JCXNldF9zYl9zaG9ydGN1dHMoYnAsIGkpOwotCX0KLQkvKiBSeCAqLwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7Ci0KLQkJLyogZmFzdHBhdGggcnggcmluZ3M6IHJ4X2J1ZiByeF9kZXNjIHJ4X2NvbXAgKi8KLQkJQk5YMlhfQUxMT0MoYm54MnhfZnAoYnAsIGksIHJ4X2J1Zl9yaW5nKSwKLQkJCQlzaXplb2Yoc3RydWN0IHN3X3J4X2JkKSAqIE5VTV9SWF9CRCk7Ci0JCUJOWDJYX1BDSV9BTExPQyhibngyeF9mcChicCwgaSwgcnhfZGVzY19yaW5nKSwKLQkJCQkmYm54MnhfZnAoYnAsIGksIHJ4X2Rlc2NfbWFwcGluZyksCi0JCQkJc2l6ZW9mKHN0cnVjdCBldGhfcnhfYmQpICogTlVNX1JYX0JEKTsKLQotCQlCTlgyWF9QQ0lfQUxMT0MoYm54MnhfZnAoYnAsIGksIHJ4X2NvbXBfcmluZyksCi0JCQkJJmJueDJ4X2ZwKGJwLCBpLCByeF9jb21wX21hcHBpbmcpLAotCQkJCXNpemVvZihzdHJ1Y3QgZXRoX2Zhc3RfcGF0aF9yeF9jcWUpICoKLQkJCQlOVU1fUkNRX0JEKTsKLQotCQkvKiBTR0UgcmluZyAqLwotCQlCTlgyWF9BTExPQyhibngyeF9mcChicCwgaSwgcnhfcGFnZV9yaW5nKSwKLQkJCQlzaXplb2Yoc3RydWN0IHN3X3J4X3BhZ2UpICogTlVNX1JYX1NHRSk7Ci0JCUJOWDJYX1BDSV9BTExPQyhibngyeF9mcChicCwgaSwgcnhfc2dlX3JpbmcpLAotCQkJCSZibngyeF9mcChicCwgaSwgcnhfc2dlX21hcHBpbmcpLAotCQkJCUJDTV9QQUdFX1NJWkUgKiBOVU1fUlhfU0dFX1BBR0VTKTsKLQl9Ci0JLyogVHggKi8KLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgewotCi0JCS8qIGZhc3RwYXRoIHR4IHJpbmdzOiB0eF9idWYgdHhfZGVzYyAqLwotCQlCTlgyWF9BTExPQyhibngyeF9mcChicCwgaSwgdHhfYnVmX3JpbmcpLAotCQkJCXNpemVvZihzdHJ1Y3Qgc3dfdHhfYmQpICogTlVNX1RYX0JEKTsKLQkJQk5YMlhfUENJX0FMTE9DKGJueDJ4X2ZwKGJwLCBpLCB0eF9kZXNjX3JpbmcpLAotCQkJCSZibngyeF9mcChicCwgaSwgdHhfZGVzY19tYXBwaW5nKSwKLQkJCQlzaXplb2YodW5pb24gZXRoX3R4X2JkX3R5cGVzKSAqIE5VTV9UWF9CRCk7Ci0JfQotCS8qIGVuZCBvZiBmYXN0cGF0aCAqLworCWlmIChibngyeF9ndW56aXBfaW5pdChicCkpCisJCXJldHVybiAtRU5PTUVNOwogCiAjaWZkZWYgQkNNX0NOSUMKIAlpZiAoQ0hJUF9JU19FMihicCkpCkBAIC02MTYyLDE0ICs1OTk2LDE4IEBACiAKIAlCTlgyWF9BTExPQyhicC0+cnhfaW5kaXJfdGFibGUsIHNpemVvZihicC0+cnhfaW5kaXJfdGFibGVbMF0pICoKIAkJICAgIFRTVE9STV9JTkRJUkVDVElPTl9UQUJMRV9TSVpFKTsKKworCS8qIGZhc3RwYXRoICovCisJLyogbmVlZCB0byBiZSBkb25lIGF0IHRoZSBlbmQsIHNpbmNlIGl0J3Mgc2VsZiBhZGp1c3RpbmcgdG8gYW1vdW50CisJICogb2YgbWVtb3J5IGF2YWlsYWJsZSBmb3IgUlNTIHF1ZXVlcworCSAqLworCWlmIChibngyeF9hbGxvY19mcF9tZW0oYnApKQorCQlnb3RvIGFsbG9jX21lbV9lcnI7CiAJcmV0dXJuIDA7CiAKIGFsbG9jX21lbV9lcnI6CiAJYm54MnhfZnJlZV9tZW0oYnApOwogCXJldHVybiAtRU5PTUVNOwotCi0jdW5kZWYgQk5YMlhfUENJX0FMTE9DCi0jdW5kZWYgQk5YMlhfQUxMT0MKIH0KIAogLyoKQEAgLTYxOTcsMTQgKzYwMzUsMTQgQEAKIH0KIAogLyoqCi0gKiBTZXRzIGEgTUFDIGluIGEgQ0FNIGZvciBhIGZldyBMMiBDbGllbnRzIGZvciBFMXggY2hpcHMKKyAqIGJueDJ4X3NldF9tYWNfYWRkcl9nZW4gLSBzZXQgYSBNQUMgaW4gYSBDQU0gZm9yIGEgZmV3IEwyIENsaWVudHMgZm9yIEUxeCBjaGlwcwogICoKLSAqIEBwYXJhbSBicCBkcml2ZXIgZGVzY3JpcHRvcgotICogQHBhcmFtIHNldCBzZXQgb3IgY2xlYXIgYW4gZW50cnkgKDEgb3IgMCkKLSAqIEBwYXJhbSBtYWMgcG9pbnRlciB0byBhIGJ1ZmZlciBjb250YWluaW5nIGEgTUFDCi0gKiBAcGFyYW0gY2xfYml0X3ZlYyBiaXQgdmVjdG9yIG9mIGNsaWVudHMgdG8gcmVnaXN0ZXIgYSBNQUMgZm9yCi0gKiBAcGFyYW0gY2FtX29mZnNldCBvZmZzZXQgaW4gYSBDQU0gdG8gdXNlCi0gKiBAcGFyYW0gaXNfYmNhc3QgaXMgdGhlIHNldCBNQUMgYSBicm9hZGNhc3QgYWRkcmVzcyAoZm9yIEUxIG9ubHkpCisgKiBAYnA6CQlkcml2ZXIgaGFuZGxlCisgKiBAc2V0OglzZXQgb3IgY2xlYXIgYW4gZW50cnkgKDEgb3IgMCkKKyAqIEBtYWM6CXBvaW50ZXIgdG8gYSBidWZmZXIgY29udGFpbmluZyBhIE1BQworICogQGNsX2JpdF92ZWM6CWJpdCB2ZWN0b3Igb2YgY2xpZW50cyB0byByZWdpc3RlciBhIE1BQyBmb3IKKyAqIEBjYW1fb2Zmc2V0OglvZmZzZXQgaW4gYSBDQU0gdG8gdXNlCisgKiBAaXNfYmNhc3Q6CWlzIHRoZSBzZXQgTUFDIGEgYnJvYWRjYXN0IGFkZHJlc3MgKGZvciBFMSBvbmx5KQogICovCiBzdGF0aWMgdm9pZCBibngyeF9zZXRfbWFjX2FkZHJfZ2VuKHN0cnVjdCBibngyeCAqYnAsIGludCBzZXQsIGNvbnN0IHU4ICptYWMsCiAJCQkJICAgdTMyIGNsX2JpdF92ZWMsIHU4IGNhbV9vZmZzZXQsCkBAIC02NTY0LDE0ICs2NDAyLDEzIEBACiAKICNpZmRlZiBCQ01fQ05JQwogLyoqCi0gKiBTZXQgaVNDU0kgTUFDKHMpIGF0IHRoZSBuZXh0IGVudGllcyBpbiB0aGUgQ0FNIGFmdGVyIHRoZSBFVEgKLSAqIE1BQyhzKS4gVGhpcyBmdW5jdGlvbiB3aWxsIHdhaXQgdW50aWwgdGhlIHJhbWRvcmQgY29tcGxldGlvbgotICogcmV0dXJucy4KKyAqIGJueDJ4X3NldF9pc2NzaV9ldGhfbWFjX2FkZHIgLSBzZXQgaVNDU0kgTUFDKHMpLgogICoKLSAqIEBwYXJhbSBicCBkcml2ZXIgaGFuZGxlCi0gKiBAcGFyYW0gc2V0IHNldCBvciBjbGVhciB0aGUgQ0FNIGVudHJ5CisgKiBAYnA6CQlkcml2ZXIgaGFuZGxlCisgKiBAc2V0OglzZXQgb3IgY2xlYXIgdGhlIENBTSBlbnRyeQogICoKLSAqIEByZXR1cm4gMCBpZiBjdXNzZXNzLCAtRU5PREVWIGlmIHJhbXJvZCBkb2Vzbid0IHJldHVybi4KKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCB3YWl0IHVudGlsIHRoZSByYW1kb3JkIGNvbXBsZXRpb24gcmV0dXJucy4KKyAqIFJldHVybiAwIGlmIHN1Y2Nlc3MsIC1FTk9ERVYgaWYgcmFtcm9kIGRvZXNuJ3QgcmV0dXJuLgogICovCiBzdGF0aWMgaW50IGJueDJ4X3NldF9pc2NzaV9ldGhfbWFjX2FkZHIoc3RydWN0IGJueDJ4ICpicCwgaW50IHNldCkKIHsKQEAgLTY1OTIsMTQgKzY0MjksMTMgQEAKIH0KIAogLyoqCi0gKiBTZXQgRkNvRSBMMiBNQUMocykgYXQgdGhlIG5leHQgZW50aWVzIGluIHRoZSBDQU0gYWZ0ZXIgdGhlCi0gKiBFVEggTUFDKHMpLiBUaGlzIGZ1bmN0aW9uIHdpbGwgd2FpdCB1bnRpbCB0aGUgcmFtZG9yZAotICogY29tcGxldGlvbiByZXR1cm5zLgorICogYm54Mnhfc2V0X2ZpcF9ldGhfbWFjX2FkZHIgLSBzZXQgRkNvRSBMMiBNQUMocykKICAqCi0gKiBAcGFyYW0gYnAgZHJpdmVyIGhhbmRsZQotICogQHBhcmFtIHNldCBzZXQgb3IgY2xlYXIgdGhlIENBTSBlbnRyeQorICogQGJwOgkJZHJpdmVyIGhhbmRsZQorICogQHNldDoJc2V0IG9yIGNsZWFyIHRoZSBDQU0gZW50cnkKICAqCi0gKiBAcmV0dXJuIDAgaWYgY3Vzc2VzcywgLUVOT0RFViBpZiByYW1yb2QgZG9lc24ndCByZXR1cm4uCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgd2FpdCB1bnRpbCB0aGUgcmFtcm9kIGNvbXBsZXRpb24gcmV0dXJucy4KKyAqIFJldHVybnMgMCBpZiBzdWNjZXNzLCAtRU5PREVWIGlmIHJhbXJvZCBkb2Vzbid0IHJldHVybi4KICAqLwogaW50IGJueDJ4X3NldF9maXBfZXRoX21hY19hZGRyKHN0cnVjdCBibngyeCAqYnAsIGludCBzZXQpCiB7CkBAIC02ODAzLDEyICs2NjM5LDExIEBACiB9CiAKIC8qKgotICogQ29uZmlndXJlIGludGVycnVwdCBtb2RlIGFjY29yZGluZyB0byBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisgKiBibngyeF9zZXRfaW50X21vZGUgLSBjb25maWd1cmUgaW50ZXJydXB0IG1vZGUKKyAqCisgKiBAYnA6CQlkcml2ZXIgaGFuZGxlCisgKgogICogSW4gY2FzZSBvZiBNU0ktWCBpdCB3aWxsIGFsc28gdHJ5IHRvIGVuYWJsZSBNU0ktWC4KLSAqCi0gKiBAcGFyYW0gYnAKLSAqCi0gKiBAcmV0dXJuIGludAogICovCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBibngyeF9zZXRfaW50X21vZGUoc3RydWN0IGJueDJ4ICpicCkKIHsKQEAgLTczOTIsMTAgKzcyMjcsMTEgQEAKIAlNRl9DRkdfV1IoYnAsIHNoYXJlZF9tZl9jb25maWcuY2xwX21iLCB2YWwgfCBTSEFSRURfTUZfQ0xQX01BR0lDKTsKIH0KIAotLyogUmVzdG9yZSB0aGUgdmFsdWUgb2YgdGhlIGBtYWdpYycgYml0LgorLyoqCisgKiBibngyeF9jbHBfcmVzZXRfZG9uZSAtIHJlc3RvcmUgdGhlIHZhbHVlIG9mIHRoZSBgbWFnaWMnIGJpdC4KICAqCi0gKiBAcGFyYW0gcGRldiBEZXZpY2UgaGFuZGxlLgotICogQHBhcmFtIG1hZ2ljX3ZhbCBPbGQgdmFsdWUgb2YgdGhlIGBtYWdpYycgYml0LgorICogQGJwOgkJZHJpdmVyIGhhbmRsZQorICogQG1hZ2ljX3ZhbDoJb2xkIHZhbHVlIG9mIHRoZSBgbWFnaWMnIGJpdC4KICAqLwogc3RhdGljIHZvaWQgYm54MnhfY2xwX3Jlc2V0X2RvbmUoc3RydWN0IGJueDJ4ICpicCwgdTMyIG1hZ2ljX3ZhbCkKIHsKQEAgLTc0MDYsMTAgKzcyNDIsMTIgQEAKIH0KIAogLyoqCi0gKiBQcmVwYXJlcyBmb3IgTUNQIHJlc2V0OiB0YWtlcyBjYXJlIG9mIENMUCBjb25maWd1cmF0aW9ucy4KKyAqIGJueDJ4X3Jlc2V0X21jcF9wcmVwIC0gcHJlcGFyZSBmb3IgTUNQIHJlc2V0LgogICoKLSAqIEBwYXJhbSBicAotICogQHBhcmFtIG1hZ2ljX3ZhbCBPbGQgdmFsdWUgb2YgJ21hZ2ljJyBiaXQuCisgKiBAYnA6CQlkcml2ZXIgaGFuZGxlCisgKiBAbWFnaWNfdmFsOglvbGQgdmFsdWUgb2YgJ21hZ2ljJyBiaXQuCisgKgorICogVGFrZXMgY2FyZSBvZiBDTFAgY29uZmlndXJhdGlvbnMuCiAgKi8KIHN0YXRpYyB2b2lkIGJueDJ4X3Jlc2V0X21jcF9wcmVwKHN0cnVjdCBibngyeCAqYnAsIHUzMiAqbWFnaWNfdmFsKQogewpAQCAtNzQzNCwxMCArNzI3MiwxMCBAQAogI2RlZmluZSBNQ1BfVElNRU9VVCAgICAgIDUwMDAgICAvKiA1IHNlY29uZHMgKGluIG1zKSAqLwogI2RlZmluZSBNQ1BfT05FX1RJTUVPVVQgIDEwMCAgICAvKiAxMDAgbXMgKi8KIAotLyogV2FpdHMgZm9yIE1DUF9PTkVfVElNRU9VVCBvciBNQ1BfT05FX1RJTUVPVVQqMTAsCi0gKiBkZXBlbmRpbmcgb24gdGhlIEhXIHR5cGUuCisvKioKKyAqIGJueDJ4X21jcF93YWl0X29uZSAtIHdhaXQgZm9yIE1DUF9PTkVfVElNRU9VVAogICoKLSAqIEBwYXJhbSBicAorICogQGJwOglkcml2ZXIgaGFuZGxlCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9tY3Bfd2FpdF9vbmUoc3RydWN0IGJueDJ4ICpicCkKIHsKQEAgLTgwNTksMTMgKzc4OTcsOSBAQAogCQkodmFsID49IFJFUV9CQ19WRVJfNF9WUkZZX1NQRUNJRklDX1BIWV9PUFRfTURMKSA/CiAJCUZFQVRVUkVfQ09ORklHX0JDX1NVUFBPUlRTX0RVQUxfUEhZX09QVF9NRExfVlJGWSA6IDA7CiAKLQlpZiAoQlBfRTFIVk4oYnApID09IDApIHsKLQkJcGNpX3JlYWRfY29uZmlnX3dvcmQoYnAtPnBkZXYsIGJwLT5wbV9jYXAgKyBQQ0lfUE1fUE1DLCAmcG1jKTsKLQkJYnAtPmZsYWdzIHw9IChwbWMgJiBQQ0lfUE1fQ0FQX1BNRV9EM2NvbGQpID8gMCA6IE5PX1dPTF9GTEFHOwotCX0gZWxzZSB7Ci0JCS8qIG5vIFdPTCBjYXBhYmlsaXR5IGZvciBFMUhWTiAhPSAwICovCi0JCWJwLT5mbGFncyB8PSBOT19XT0xfRkxBRzsKLQl9CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoYnAtPnBkZXYsIGJwLT5wbV9jYXAgKyBQQ0lfUE1fUE1DLCAmcG1jKTsKKwlicC0+ZmxhZ3MgfD0gKHBtYyAmIFBDSV9QTV9DQVBfUE1FX0QzY29sZCkgPyAwIDogTk9fV09MX0ZMQUc7CisKIAlCTlgyWF9ERVZfSU5GTygiJXNXb0wgY2FwYWJsZVxuIiwKIAkJICAgICAgIChicC0+ZmxhZ3MgJiBOT19XT0xfRkxBRykgPyAibm90ICIgOiAiIik7CiAKQEAgLTg1NzEsMTUgKzg0MDUsNiBAQAogCQkJCUJOWDJYX0RFVl9JTkZPKCJSZWFkIGlTQ1NJIE1BQzogIgogCQkJCQkgICAgICAgIjB4JXg6MHglMDR4XG4iLCB2YWwyLCB2YWwpOwogCQkJCWJueDJ4X3NldF9tYWNfYnVmKGlzY3NpX21hYywgdmFsLCB2YWwyKTsKLQotCQkJCS8qIERpc2FibGUgaVNDU0kgT09PIGlmIE1BQyBjb25maWd1cmF0aW9uIGlzCi0JCQkJICogaW52YWxpZC4KLQkJCQkgKi8KLQkJCQlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoaXNjc2lfbWFjKSkgewotCQkJCQlicC0+ZmxhZ3MgfD0gTk9fSVNDU0lfT09PX0ZMQUcgfAotCQkJCQkJICAgICBOT19JU0NTSV9GTEFHOwotCQkJCQltZW1zZXQoaXNjc2lfbWFjLCAwLCBFVEhfQUxFTik7Ci0JCQkJfQogCQkJfSBlbHNlCiAJCQkJYnAtPmZsYWdzIHw9IE5PX0lTQ1NJX09PT19GTEFHIHwgTk9fSVNDU0lfRkxBRzsKIApAQCAtODU5MiwxMyArODQxNyw2IEBACiAJCQkJCSAgICAgICAiMHgleDoweCUwNHhcbiIsIHZhbDIsIHZhbCk7CiAJCQkJYm54Mnhfc2V0X21hY19idWYoZmlwX21hYywgdmFsLCB2YWwyKTsKIAotCQkJCS8qIERpc2FibGUgRkNvRSBpZiBNQUMgY29uZmlndXJhdGlvbiBpcwotCQkJCSAqIGludmFsaWQuCi0JCQkJICovCi0JCQkJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGZpcF9tYWMpKSB7Ci0JCQkJCWJwLT5mbGFncyB8PSBOT19GQ09FX0ZMQUc7Ci0JCQkJCW1lbXNldChicC0+ZmlwX21hYywgMCwgRVRIX0FMRU4pOwotCQkJCX0KIAkJCX0gZWxzZQogCQkJCWJwLT5mbGFncyB8PSBOT19GQ09FX0ZMQUc7CiAJCX0KQEAgLTg2MjksMTMgKzg0NDcsMjkgQEAKIAkJZWxzZSBpZiAoIUlTX01GKGJwKSkKIAkJCW1lbWNweShmaXBfbWFjLCBpc2NzaV9tYWMsIEVUSF9BTEVOKTsKIAl9CisKKwkvKiBEaXNhYmxlIGlTQ1NJIGlmIE1BQyBjb25maWd1cmF0aW9uIGlzCisJICogaW52YWxpZC4KKwkgKi8KKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoaXNjc2lfbWFjKSkgeworCQlicC0+ZmxhZ3MgfD0gTk9fSVNDU0lfRkxBRzsKKwkJbWVtc2V0KGlzY3NpX21hYywgMCwgRVRIX0FMRU4pOworCX0KKworCS8qIERpc2FibGUgRkNvRSBpZiBNQUMgY29uZmlndXJhdGlvbiBpcworCSAqIGludmFsaWQuCisJICovCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGZpcF9tYWMpKSB7CisJCWJwLT5mbGFncyB8PSBOT19GQ09FX0ZMQUc7CisJCW1lbXNldChicC0+ZmlwX21hYywgMCwgRVRIX0FMRU4pOworCX0KICNlbmRpZgogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBibngyeF9nZXRfaHdpbmZvKHN0cnVjdCBibngyeCAqYnApCiB7CiAJaW50IC8qYWJzKi9mdW5jID0gQlBfQUJTX0ZVTkMoYnApOwotCWludCB2biwgcG9ydDsKKwlpbnQgdm47CiAJdTMyIHZhbCA9IDA7CiAJaW50IHJjID0gMDsKIApAQCAtODY3MCw3ICs4NTA0LDYgQEAKIAlicC0+bWZfb3YgPSAwOwogCWJwLT5tZl9tb2RlID0gMDsKIAl2biA9IEJQX0UxSFZOKGJwKTsKLQlwb3J0ID0gQlBfUE9SVChicCk7CiAKIAlpZiAoIUNISVBfSVNfRTEoYnApICYmICFCUF9OT01DUChicCkpIHsKIAkJRFAoTkVUSUZfTVNHX1BST0JFLApAQCAtODkwNCw4ICs4NzM3LDYgQEAKIAlicC0+bXVsdGlfbW9kZSA9IG11bHRpX21vZGU7CiAJYnAtPmludF9tb2RlID0gaW50X21vZGU7CiAKLQlicC0+ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0dSTzsKLQogCS8qIFNldCBUUEEgZmxhZ3MgKi8KIAlpZiAoZGlzYWJsZV90cGEpIHsKIAkJYnAtPmZsYWdzICY9IH5UUEFfRU5BQkxFX0ZMQUc7CkBAIC04OTI1LDggKzg3NTYsNiBAQAogCiAJYnAtPnR4X3Jpbmdfc2l6ZSA9IE1BWF9UWF9BVkFJTDsKIAotCWJwLT5yeF9jc3VtID0gMTsKLQogCS8qIG1ha2Ugc3VyZSB0aGF0IHRoZSBudW1iZXJzIGFyZSBpbiB0aGUgcmlnaHQgZ3JhbnVsYXJpdHkgKi8KIAlicC0+dHhfdGlja3MgPSAoNTAgLyBCTlgyWF9CVFIpICogQk5YMlhfQlRSOwogCWJwLT5yeF90aWNrcyA9ICgyNSAvIEJOWDJYX0JUUikgKiBCTlgyWF9CVFI7CkBAIC05MzA0LDYgKzkxMzMsOCBAQAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAogCS5uZG9fZG9faW9jdGwJCT0gYm54MnhfaW9jdGwsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IGJueDJ4X2NoYW5nZV9tdHUsCisJLm5kb19maXhfZmVhdHVyZXMJPSBibngyeF9maXhfZmVhdHVyZXMsCisJLm5kb19zZXRfZmVhdHVyZXMJPSBibngyeF9zZXRfZmVhdHVyZXMsCiAJLm5kb190eF90aW1lb3V0CQk9IGJueDJ4X3R4X3RpbWVvdXQsCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAkubmRvX3BvbGxfY29udHJvbGxlcgk9IHBvbGxfYm54MngsCkBAIC05NDMwLDIwICs5MjYxLDIwIEBACiAKIAlkZXYtPm5ldGRldl9vcHMgPSAmYm54MnhfbmV0ZGV2X29wczsKIAlibngyeF9zZXRfZXRodG9vbF9vcHMoZGV2KTsKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0c7Ci0JZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTTsKKworCWRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU0gfAorCQlORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPX0VDTiB8IE5FVElGX0ZfVFNPNiB8CisJCU5FVElGX0ZfUlhDU1VNIHwgTkVUSUZfRl9MUk8gfCBORVRJRl9GX0hXX1ZMQU5fVFg7CisKKwlkZXYtPnZsYW5fZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU0gfAorCQlORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPX0VDTiB8IE5FVElGX0ZfVFNPNiB8IE5FVElGX0ZfSElHSERNQTsKKworCWRldi0+ZmVhdHVyZXMgfD0gZGV2LT5od19mZWF0dXJlcyB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKIAlpZiAoYnAtPmZsYWdzICYgVVNJTkdfREFDX0ZMQUcpCiAJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwotCWRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU09fRUNOKTsKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKLQlkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlgpOwogCi0JZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfU0c7Ci0JZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNOwotCWlmIChicC0+ZmxhZ3MgJiBVU0lOR19EQUNfRkxBRykKLQkJZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKLQlkZXYtPnZsYW5fZmVhdHVyZXMgfD0gKE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU09fRUNOKTsKLQlkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OworCS8qIEFkZCBMb29wYmFjayBjYXBhYmlsaXR5IHRvIHRoZSBkZXZpY2UgKi8KKwlkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfTE9PUEJBQ0s7CiAKICNpZmRlZiBCQ01fRENCTkwKIAlkZXYtPmRjYm5sX29wcyA9ICZibngyeF9kY2JubF9vcHM7CkBAIC0xMDM0Miw2ICsxMDE3MywxMSBAQAogCQlicmVhazsKIAl9CiAKKwljYXNlIERSVl9DVExfSVNDU0lfU1RPUFBFRF9DTUQ6IHsKKwkJYm54MnhfZGNieF9zZXRfcGFyYW1zKGJwLCBCTlgyWF9EQ0JYX1NUQVRFX0lTQ1NJX1NUT1BQRUQpOworCQlicmVhazsKKwl9CisKIAlkZWZhdWx0OgogCQlCTlgyWF9FUlIoInVua25vd24gY29tbWFuZCAleFxuIiwgY3RsLT5jbWQpOwogCQlyYyA9IC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9yZWcuaCBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X3JlZy5oCmluZGV4IDE1MDlhMjMuLjg2YmJhMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X3JlZy5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X3JlZy5oCkBAIC0xLDYgKzEsNiBAQAogLyogYm54MnhfcmVnLmg6IEJyb2FkY29tIEV2ZXJlc3QgbmV0d29yayBkcml2ZXIuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDExIEJyb2FkY29tIENvcnBvcmF0aW9uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9zdGF0cy5jIGIvZHJpdmVycy9uZXQvYm54MngvYm54Mnhfc3RhdHMuYwppbmRleCAzNDQ1ZGVkLi5lNTM1YmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9zdGF0cy5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X3N0YXRzLmMKQEAgLTEsNiArMSw2IEBACiAvKiBibngyeF9zdGF0cy5jOiBCcm9hZGNvbSBFdmVyZXN0IG5ldHdvcmsgZHJpdmVyLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNy0yMDEwIEJyb2FkY29tIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54Mnhfc3RhdHMuaCBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X3N0YXRzLmgKaW5kZXggNTk2Nzk4Yy4uNDVkMTRkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54Mnhfc3RhdHMuaAorKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9zdGF0cy5oCkBAIC0xLDYgKzEsNiBAQAogLyogYm54Mnhfc3RhdHMuaDogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTEgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlCmluZGV4IDNjNWMwMTQuLjRjMjFiZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZQpAQCAtOSw2ICs5LDMgQEAKIHByb2MtJChDT05GSUdfUFJPQ19GUykgKz0gYm9uZF9wcm9jZnMubwogYm9uZGluZy1vYmpzICs9ICQocHJvYy15KQogCi1pcHY2LSQoc3Vic3QgbSx5LCQoQ09ORklHX0lQVjYpKSArPSBib25kX2lwdjYubwotYm9uZGluZy1vYmpzICs9ICQoaXB2Ni15KQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMKaW5kZXggNDk0YmY5Ni4uYzc1MzdhYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMKQEAgLTcxNiwxMSArNzE2LDkgQEAKIHN0YXRpYyB1MzIgX19nZXRfYWdnX2JhbmR3aWR0aChzdHJ1Y3QgYWdncmVnYXRvciAqYWdncmVnYXRvcikKIHsKIAl1MzIgYmFuZHdpZHRoID0gMDsKLQl1MzIgYmFzaWNfc3BlZWQ7CiAKIAlpZiAoYWdncmVnYXRvci0+bnVtX29mX3BvcnRzKSB7Ci0JCWJhc2ljX3NwZWVkID0gX19nZXRfbGlua19zcGVlZChhZ2dyZWdhdG9yLT5sYWdfcG9ydHMpOwotCQlzd2l0Y2ggKGJhc2ljX3NwZWVkKSB7CisJCXN3aXRjaCAoX19nZXRfbGlua19zcGVlZChhZ2dyZWdhdG9yLT5sYWdfcG9ydHMpKSB7CiAJCWNhc2UgQURfTElOS19TUEVFRF9CSVRNQVNLXzFNQlBTOgogCQkJYmFuZHdpZHRoID0gYWdncmVnYXRvci0+bnVtX29mX3BvcnRzOwogCQkJYnJlYWs7CkBAIC0xNDgyLDggKzE0ODAsMTEgQEAKIAogc3RhdGljIGludCBhZ2dfZGV2aWNlX3VwKGNvbnN0IHN0cnVjdCBhZ2dyZWdhdG9yICphZ2cpCiB7Ci0JcmV0dXJuIChuZXRpZl9ydW5uaW5nKGFnZy0+c2xhdmUtPmRldikgJiYKLQkJbmV0aWZfY2Fycmllcl9vayhhZ2ctPnNsYXZlLT5kZXYpKTsKKwlzdHJ1Y3QgcG9ydCAqcG9ydCA9IGFnZy0+bGFnX3BvcnRzOworCWlmICghcG9ydCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIChuZXRpZl9ydW5uaW5nKHBvcnQtPnNsYXZlLT5kZXYpICYmCisJCW5ldGlmX2NhcnJpZXJfb2socG9ydC0+c2xhdmUtPmRldikpOwogfQogCiAvKioKQEAgLTI0MDIsMTQgKzI0MDMsNiBAQAogCXN0cnVjdCBhZF9pbmZvIGFkX2luZm87CiAJaW50IHJlcyA9IDE7CiAKLQkvKiBtYWtlIHN1cmUgdGhhdCB0aGUgc2xhdmVzIGxpc3Qgd2lsbAotCSAqIG5vdCBjaGFuZ2UgZHVyaW5nIHR4Ci0JICovCi0JcmVhZF9sb2NrKCZib25kLT5sb2NrKTsKLQotCWlmICghQk9ORF9JU19PSyhib25kKSkKLQkJZ290byBvdXQ7Ci0KIAlpZiAoYm9uZF8zYWRfZ2V0X2FjdGl2ZV9hZ2dfaW5mbyhib25kLCAmYWRfaW5mbykpIHsKIAkJcHJfZGVidWcoIiVzOiBFcnJvcjogYm9uZF8zYWRfZ2V0X2FjdGl2ZV9hZ2dfaW5mbyBmYWlsZWRcbiIsCiAJCQkgZGV2LT5uYW1lKTsKQEAgLTI0NjMsMzkgKzI0NTYsMjAgQEAKIAkJLyogbm8gc3VpdGFibGUgaW50ZXJmYWNlLCBmcmFtZSBub3Qgc2VudCAqLwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJfQotCXJlYWRfdW5sb2NrKCZib25kLT5sb2NrKTsKKwogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKLWludCBib25kXzNhZF9sYWNwZHVfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGFja2V0X3R5cGUqIHB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCit2b2lkIGJvbmRfM2FkX2xhY3BkdV9yZWN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLAorCQkJICBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKQogewotCXN0cnVjdCBib25kaW5nICpib25kID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgc2xhdmUgKnNsYXZlID0gTlVMTDsKLQlpbnQgcmV0ID0gTkVUX1JYX0RST1A7Ci0KLQlpZiAoIShkZXYtPmZsYWdzICYgSUZGX01BU1RFUikpCi0JCWdvdG8gb3V0OwotCi0Jc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFza2IpCi0JCWdvdG8gb3V0OworCWlmIChza2ItPnByb3RvY29sICE9IFBLVF9UWVBFX0xBQ1BEVSkKKwkJcmV0dXJuOwogCiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBsYWNwZHUpKSkKLQkJZ290byBvdXQ7CisJCXJldHVybjsKIAogCXJlYWRfbG9jaygmYm9uZC0+bG9jayk7Ci0Jc2xhdmUgPSBib25kX2dldF9zbGF2ZV9ieV9kZXYobmV0ZGV2X3ByaXYoZGV2KSwgb3JpZ19kZXYpOwotCWlmICghc2xhdmUpCi0JCWdvdG8gb3V0X3VubG9jazsKLQogCWJvbmRfM2FkX3J4X2luZGljYXRpb24oKHN0cnVjdCBsYWNwZHUgKikgc2tiLT5kYXRhLCBzbGF2ZSwgc2tiLT5sZW4pOwotCi0JcmV0ID0gTkVUX1JYX1NVQ0NFU1M7Ci0KLW91dF91bmxvY2s6CiAJcmVhZF91bmxvY2soJmJvbmQtPmxvY2spOwotb3V0OgotCWRldl9rZnJlZV9za2Ioc2tiKTsKLQotCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmggYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmgKaW5kZXggYjI4YmFmZi4uMGVlM2YxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5oCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuaApAQCAtMzksNyArMzksNyBAQAogCiB0eXBlZGVmIHN0cnVjdCBtYWNfYWRkciB7CiAJdTggbWFjX2FkZHJfdmFsdWVbRVRIX0FMRU5dOwotfSBtYWNfYWRkcl90OworfSBfX3BhY2tlZCBtYWNfYWRkcl90OwogCiBlbnVtIHsKIAlCT05EX0FEX1NUQUJMRSA9IDAsCkBAIC0xMzQsMTIgKzEzNCwxMiBAQAogCXU4IHRsdl90eXBlX3Rlcm1pbmF0b3I7CSAgICAgLy8gPSB0ZXJtaW5hdG9yCiAJdTggdGVybWluYXRvcl9sZW5ndGg7CSAgICAgLy8gPSAwCiAJdTggcmVzZXJ2ZWRfNTBbNTBdOwkgICAgIC8vID0gMAotfSBsYWNwZHVfdDsKK30gX19wYWNrZWQgbGFjcGR1X3Q7CiAKIHR5cGVkZWYgc3RydWN0IGxhY3BkdV9oZWFkZXIgewogCXN0cnVjdCBldGhoZHIgaGRyOwogCXN0cnVjdCBsYWNwZHUgbGFjcGR1OwotfSBsYWNwZHVfaGVhZGVyX3Q7Cit9IF9fcGFja2VkIGxhY3BkdV9oZWFkZXJfdDsKIAogLy8gTWFya2VyIFByb3RvY29sIERhdGEgVW5pdChQRFUpIHN0cnVjdHVyZSg0My41LjMuMiBpbiB0aGUgODAyLjNhZCBzdGFuZGFyZCkKIHR5cGVkZWYgc3RydWN0IGJvbmRfbWFya2VyIHsKQEAgLTE1NSwxMiArMTU1LDEyIEBACiAJdTggdGx2X3R5cGVfdGVybWluYXRvcjsJICAgICAvLyAgPSAweDAwCiAJdTggdGVybWluYXRvcl9sZW5ndGg7CSAgICAgLy8gID0gMHgwMAogCXU4IHJlc2VydmVkXzkwWzkwXTsJICAgICAvLyAgPSAwCi19IGJvbmRfbWFya2VyX3Q7Cit9IF9fcGFja2VkIGJvbmRfbWFya2VyX3Q7CiAKIHR5cGVkZWYgc3RydWN0IGJvbmRfbWFya2VyX2hlYWRlciB7CiAJc3RydWN0IGV0aGhkciBoZHI7CiAJc3RydWN0IGJvbmRfbWFya2VyIG1hcmtlcjsKLX0gYm9uZF9tYXJrZXJfaGVhZGVyX3Q7Cit9IF9fcGFja2VkIGJvbmRfbWFya2VyX2hlYWRlcl90OwogCiAjcHJhZ21hIHBhY2soKQogCkBAIC0yNTgsNyArMjU4LDYgQEAKIAkJCQkgKiByZXF1ZXN0ZWQKIAkJCQkgKi8KIAlzdHJ1Y3QgdGltZXJfbGlzdCBhZF90aW1lcjsKLQlzdHJ1Y3QgcGFja2V0X3R5cGUgYWRfcGt0X3R5cGU7CiB9OwogCiBzdHJ1Y3QgYWRfc2xhdmVfaW5mbyB7CkBAIC0yODAsNyArMjc5LDggQEAKIHZvaWQgYm9uZF8zYWRfaGFuZGxlX2xpbmtfY2hhbmdlKHN0cnVjdCBzbGF2ZSAqc2xhdmUsIGNoYXIgbGluayk7CiBpbnQgIGJvbmRfM2FkX2dldF9hY3RpdmVfYWdnX2luZm8oc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBhZF9pbmZvICphZF9pbmZvKTsKIGludCBib25kXzNhZF94bWl0X3hvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLWludCBib25kXzNhZF9sYWNwZHVfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGFja2V0X3R5cGUqIHB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpOwordm9pZCBib25kXzNhZF9sYWNwZHVfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCwKKwkJCSAgc3RydWN0IHNsYXZlICpzbGF2ZSk7CiBpbnQgYm9uZF8zYWRfc2V0X2NhcnJpZXIoc3RydWN0IGJvbmRpbmcgKmJvbmQpOwogI2VuZGlmIC8vX19CT05EXzNBRF9IX18KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCmluZGV4IGJhNzE1ODIuLjhmMmQyZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKQEAgLTMwOCw0OSArMzA4LDMzIEBACiAJX3VubG9ja19yeF9oYXNodGJsKGJvbmQpOwogfQogCi1zdGF0aWMgaW50IHJsYl9hcnBfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKK3N0YXRpYyB2b2lkIHJsYl9hcnBfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCwKKwkJCSBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKQogewotCXN0cnVjdCBib25kaW5nICpib25kOwotCXN0cnVjdCBhcnBfcGt0ICphcnAgPSAoc3RydWN0IGFycF9wa3QgKilza2ItPmRhdGE7Ci0JaW50IHJlcyA9IE5FVF9SWF9EUk9QOworCXN0cnVjdCBhcnBfcGt0ICphcnA7CiAKLQl3aGlsZSAoYm9uZF9kZXYtPnByaXZfZmxhZ3MgJiBJRkZfODAyXzFRX1ZMQU4pCi0JCWJvbmRfZGV2ID0gdmxhbl9kZXZfcmVhbF9kZXYoYm9uZF9kZXYpOworCWlmIChza2ItPnByb3RvY29sICE9IGNwdV90b19iZTE2KEVUSF9QX0FSUCkpCisJCXJldHVybjsKIAotCWlmICghKGJvbmRfZGV2LT5wcml2X2ZsYWdzICYgSUZGX0JPTkRJTkcpIHx8Ci0JICAgICEoYm9uZF9kZXYtPmZsYWdzICYgSUZGX01BU1RFUikpCi0JCWdvdG8gb3V0OwotCisJYXJwID0gKHN0cnVjdCBhcnBfcGt0ICopIHNrYi0+ZGF0YTsKIAlpZiAoIWFycCkgewogCQlwcl9kZWJ1ZygiUGFja2V0IGhhcyBubyBBUlAgZGF0YVxuIik7Ci0JCWdvdG8gb3V0OworCQlyZXR1cm47CiAJfQogCi0Jc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFza2IpCi0JCWdvdG8gb3V0OwotCi0JaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgYXJwX2hkcl9sZW4oYm9uZF9kZXYpKSkKLQkJZ290byBvdXQ7CisJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgYXJwX2hkcl9sZW4oYm9uZC0+ZGV2KSkpCisJCXJldHVybjsKIAogCWlmIChza2ItPmxlbiA8IHNpemVvZihzdHJ1Y3QgYXJwX3BrdCkpIHsKIAkJcHJfZGVidWcoIlBhY2tldCBpcyB0b28gc21hbGwgdG8gYmUgYW4gQVJQXG4iKTsKLQkJZ290byBvdXQ7CisJCXJldHVybjsKIAl9CiAKIAlpZiAoYXJwLT5vcF9jb2RlID09IGh0b25zKEFSUE9QX1JFUExZKSkgewogCQkvKiB1cGRhdGUgcnggaGFzaCB0YWJsZSBmb3IgdGhpcyBBUlAgKi8KLQkJYm9uZCA9IG5ldGRldl9wcml2KGJvbmRfZGV2KTsKIAkJcmxiX3VwZGF0ZV9lbnRyeV9mcm9tX2FycChib25kLCBhcnApOwogCQlwcl9kZWJ1ZygiU2VydmVyIHJlY2VpdmVkIGFuIEFSUCBSZXBseSBmcm9tIGNsaWVudFxuIik7CiAJfQotCi0JcmVzID0gTkVUX1JYX1NVQ0NFU1M7Ci0KLW91dDoKLQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0KLQlyZXR1cm4gcmVzOwogfQogCiAvKiBDYWxsZXIgbXVzdCBob2xkIGJvbmQgbG9jayBmb3IgcmVhZCAqLwpAQCAtNzU5LDcgKzc0Myw2IEBACiBzdGF0aWMgaW50IHJsYl9pbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKQogewogCXN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSAmKEJPTkRfQUxCX0lORk8oYm9uZCkpOwotCXN0cnVjdCBwYWNrZXRfdHlwZSAqcGtfdHlwZSA9ICYoQk9ORF9BTEJfSU5GTyhib25kKS5ybGJfcGt0X3R5cGUpOwogCXN0cnVjdCBybGJfY2xpZW50X2luZm8JKm5ld19oYXNodGJsOwogCWludCBzaXplID0gUkxCX0hBU0hfVEFCTEVfU0laRSAqIHNpemVvZihzdHJ1Y3QgcmxiX2NsaWVudF9pbmZvKTsKIAlpbnQgaTsKQEAgLTc4NCwxMyArNzY3LDggQEAKIAogCV91bmxvY2tfcnhfaGFzaHRibChib25kKTsKIAotCS8qaW5pdGlhbGl6ZSBwYWNrZXQgdHlwZSovCi0JcGtfdHlwZS0+dHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX0FSUCk7Ci0JcGtfdHlwZS0+ZGV2ID0gYm9uZC0+ZGV2OwotCXBrX3R5cGUtPmZ1bmMgPSBybGJfYXJwX3JlY3Y7Ci0KIAkvKiByZWdpc3RlciB0byByZWNlaXZlIEFSUHMgKi8KLQlkZXZfYWRkX3BhY2socGtfdHlwZSk7CisJYm9uZC0+cmVjdl9wcm9iZSA9IHJsYl9hcnBfcmVjdjsKIAogCXJldHVybiAwOwogfQpAQCAtNzk5LDggKzc3Nyw2IEBACiB7CiAJc3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbyA9ICYoQk9ORF9BTEJfSU5GTyhib25kKSk7CiAKLQlkZXZfcmVtb3ZlX3BhY2soJihib25kX2luZm8tPnJsYl9wa3RfdHlwZSkpOwotCiAJX2xvY2tfcnhfaGFzaHRibChib25kKTsKIAogCWtmcmVlKGJvbmRfaW5mby0+cnhfaGFzaHRibCk7CkBAIC0xMjQ5LDE2ICsxMjI1LDEwIEBACiAJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKIAlldGhfZGF0YSA9IGV0aF9oZHIoc2tiKTsKIAotCS8qIG1ha2Ugc3VyZSB0aGF0IHRoZSBjdXJyX2FjdGl2ZV9zbGF2ZSBhbmQgdGhlIHNsYXZlcyBsaXN0IGRvCi0JICogbm90IGNoYW5nZSBkdXJpbmcgdHgKKwkvKiBtYWtlIHN1cmUgdGhhdCB0aGUgY3Vycl9hY3RpdmVfc2xhdmUgZG8gbm90IGNoYW5nZSBkdXJpbmcgdHgKIAkgKi8KLQlyZWFkX2xvY2soJmJvbmQtPmxvY2spOwogCXJlYWRfbG9jaygmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKTsKIAotCWlmICghQk9ORF9JU19PSyhib25kKSkgewotCQlnb3RvIG91dDsKLQl9Ci0KIAlzd2l0Y2ggKG50b2hzKHNrYi0+cHJvdG9jb2wpKSB7CiAJY2FzZSBFVEhfUF9JUDogewogCQljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpOwpAQCAtMTM1OCwxMyArMTMyOCwxMiBAQAogCQl9CiAJfQogCi1vdXQ6CiAJaWYgKHJlcykgewogCQkvKiBubyBzdWl0YWJsZSBpbnRlcmZhY2UsIGZyYW1lIG5vdCBzZW50ICovCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAl9CiAJcmVhZF91bmxvY2soJmJvbmQtPmN1cnJfc2xhdmVfbG9jayk7Ci0JcmVhZF91bmxvY2soJmJvbmQtPmxvY2spOworCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5oIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5oCmluZGV4IDhjYTcxNTguLjkwZjE0MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuaAorKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmgKQEAgLTEyOSw3ICsxMjksNiBAQAogCWludAkJCWxwX2NvdW50ZXI7CiAJLyogLS0tLS0tLS0gcmxiIHBhcmFtZXRlcnMgLS0tLS0tLS0gKi8KIAlpbnQgcmxiX2VuYWJsZWQ7Ci0Jc3RydWN0IHBhY2tldF90eXBlCXJsYl9wa3RfdHlwZTsKIAlzdHJ1Y3QgcmxiX2NsaWVudF9pbmZvCSpyeF9oYXNodGJsOwkvKiBSZWNlaXZlIGhhc2ggdGFibGUgKi8KIAlzcGlubG9ja190CQlyeF9oYXNodGJsX2xvY2s7CiAJdTMyCQkJcnhfaGFzaHRibF9oZWFkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKaW5kZXggMTZkNmZlOS4uMDg4ZmQ4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCkBAIC04OSw4ICs4OSw3IEBACiAKIHN0YXRpYyBpbnQgbWF4X2JvbmRzCT0gQk9ORF9ERUZBVUxUX01BWF9CT05EUzsKIHN0YXRpYyBpbnQgdHhfcXVldWVzCT0gQk9ORF9ERUZBVUxUX1RYX1FVRVVFUzsKLXN0YXRpYyBpbnQgbnVtX2dyYXRfYXJwID0gMTsKLXN0YXRpYyBpbnQgbnVtX3Vuc29sX25hID0gMTsKK3N0YXRpYyBpbnQgbnVtX3BlZXJfbm90aWYgPSAxOwogc3RhdGljIGludCBtaWltb24JPSBCT05EX0xJTktfTU9OX0lOVEVSVjsKIHN0YXRpYyBpbnQgdXBkZWxheTsKIHN0YXRpYyBpbnQgZG93bmRlbGF5OwpAQCAtMTEzLDEwICsxMTIsMTAgQEAKIE1PRFVMRV9QQVJNX0RFU0MobWF4X2JvbmRzLCAiTWF4IG51bWJlciBvZiBib25kZWQgZGV2aWNlcyIpOwogbW9kdWxlX3BhcmFtKHR4X3F1ZXVlcywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0ModHhfcXVldWVzLCAiTWF4IG51bWJlciBvZiB0cmFuc21pdCBxdWV1ZXMgKGRlZmF1bHQgPSAxNikiKTsKLW1vZHVsZV9wYXJhbShudW1fZ3JhdF9hcnAsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG51bV9ncmF0X2FycCwgIk51bWJlciBvZiBncmF0dWl0b3VzIEFSUCBwYWNrZXRzIHRvIHNlbmQgb24gZmFpbG92ZXIgZXZlbnQiKTsKLW1vZHVsZV9wYXJhbShudW1fdW5zb2xfbmEsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG51bV91bnNvbF9uYSwgIk51bWJlciBvZiB1bnNvbGljaXRlZCBJUHY2IE5laWdoYm9yIEFkdmVydGlzZW1lbnRzIHBhY2tldHMgdG8gc2VuZCBvbiBmYWlsb3ZlciBldmVudCIpOworbW9kdWxlX3BhcmFtX25hbWVkKG51bV9ncmF0X2FycCwgbnVtX3BlZXJfbm90aWYsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG51bV9ncmF0X2FycCwgIk51bWJlciBvZiBwZWVyIG5vdGlmaWNhdGlvbnMgdG8gc2VuZCBvbiBmYWlsb3ZlciBldmVudCAoYWxpYXMgb2YgbnVtX3Vuc29sX25hKSIpOworbW9kdWxlX3BhcmFtX25hbWVkKG51bV91bnNvbF9uYSwgbnVtX3BlZXJfbm90aWYsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG51bV91bnNvbF9uYSwgIk51bWJlciBvZiBwZWVyIG5vdGlmaWNhdGlvbnMgdG8gc2VuZCBvbiBmYWlsb3ZlciBldmVudCAoYWxpYXMgb2YgbnVtX2dyYXRfYXJwKSIpOwogbW9kdWxlX3BhcmFtKG1paW1vbiwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobWlpbW9uLCAiTGluayBjaGVjayBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMiKTsKIG1vZHVsZV9wYXJhbSh1cGRlbGF5LCBpbnQsIDApOwpAQCAtMjM0LDcgKzIzMyw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRm9yd2FyZCBkZWNsYXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgYm9uZF9zZW5kX2dyYXR1aXRvdXNfYXJwKHN0cnVjdCBib25kaW5nICpib25kKTsKIHN0YXRpYyBpbnQgYm9uZF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldik7CiBzdGF0aWMgdm9pZCBib25kX3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpOwogCkBAIC0zNDYsMzIgKzM0NCw2IEBACiB9CiAKIC8qKgotICogYm9uZF9oYXNfY2hhbGxlbmdlZF9zbGF2ZXMKLSAqIEBib25kOiB0aGUgYm9uZCB3ZSdyZSB3b3JraW5nIG9uCi0gKgotICogU2VhcmNoZXMgdGhlIHNsYXZlIGxpc3QuIFJldHVybnMgMSBpZiBhIHZsYW4gY2hhbGxlbmdlZCBzbGF2ZQotICogd2FzIGZvdW5kLCAwIG90aGVyd2lzZS4KLSAqCi0gKiBBc3N1bWVzIGJvbmQtPmxvY2sgaXMgaGVsZC4KLSAqLwotc3RhdGljIGludCBib25kX2hhc19jaGFsbGVuZ2VkX3NsYXZlcyhzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKLXsKLQlzdHJ1Y3Qgc2xhdmUgKnNsYXZlOwotCWludCBpOwotCi0JYm9uZF9mb3JfZWFjaF9zbGF2ZShib25kLCBzbGF2ZSwgaSkgewotCQlpZiAoc2xhdmUtPmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRCkgewotCQkJcHJfZGVidWcoImZvdW5kIFZMQU4gY2hhbGxlbmdlZCBzbGF2ZSAtICVzXG4iLAotCQkJCSBzbGF2ZS0+ZGV2LT5uYW1lKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JfQotCi0JcHJfZGVidWcoIm5vIFZMQU4gY2hhbGxlbmdlZCBzbGF2ZXMgZm91bmRcbiIpOwotCXJldHVybiAwOwotfQotCi0vKioKICAqIGJvbmRfbmV4dF92bGFuIC0gc2FmZWx5IHNraXAgdG8gdGhlIG5leHQgaXRlbSBpbiB0aGUgdmxhbnMgbGlzdC4KICAqIEBib25kOiB0aGUgYm9uZCB3ZSdyZSB3b3JraW5nIG9uCiAgKiBAY3VycjogaXRlbSB3ZSdyZSBhZHZhbmNpbmcgZnJvbQpAQCAtNjMxLDcgKzYwMyw4IEBACiBzdGF0aWMgaW50IGJvbmRfdXBkYXRlX3NwZWVkX2R1cGxleChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYgPSBzbGF2ZS0+ZGV2OwotCXN0cnVjdCBldGh0b29sX2NtZCBldG9vbDsKKwlzdHJ1Y3QgZXRodG9vbF9jbWQgZXRvb2wgPSB7IC5jbWQgPSBFVEhUT09MX0dTRVQgfTsKKwl1MzIgc2xhdmVfc3BlZWQ7CiAJaW50IHJlczsKIAogCS8qIEZha2Ugc3BlZWQgYW5kIGR1cGxleCAqLwpAQCAtNjQ1LDcgKzYxOCw4IEBACiAJaWYgKHJlcyA8IDApCiAJCXJldHVybiAtMTsKIAotCXN3aXRjaCAoZXRvb2wuc3BlZWQpIHsKKwlzbGF2ZV9zcGVlZCA9IGV0aHRvb2xfY21kX3NwZWVkKCZldG9vbCk7CisJc3dpdGNoIChzbGF2ZV9zcGVlZCkgewogCWNhc2UgU1BFRURfMTA6CiAJY2FzZSBTUEVFRF8xMDA6CiAJY2FzZSBTUEVFRF8xMDAwOgpAQCAtNjYzLDcgKzYzNyw3IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlzbGF2ZS0+c3BlZWQgPSBldG9vbC5zcGVlZDsKKwlzbGF2ZS0+c3BlZWQgPSBzbGF2ZV9zcGVlZDsKIAlzbGF2ZS0+ZHVwbGV4ID0gZXRvb2wuZHVwbGV4OwogCiAJcmV0dXJuIDA7CkBAIC0xMDg3LDYgKzEwNjEsMjEgQEAKIAlyZXR1cm4gYmVzdHNsYXZlOwogfQogCitzdGF0aWMgYm9vbCBib25kX3Nob3VsZF9ub3RpZnlfcGVlcnMoc3RydWN0IGJvbmRpbmcgKmJvbmQpCit7CisJc3RydWN0IHNsYXZlICpzbGF2ZSA9IGJvbmQtPmN1cnJfYWN0aXZlX3NsYXZlOworCisJcHJfZGVidWcoImJvbmRfc2hvdWxkX25vdGlmeV9wZWVyczogYm9uZCAlcyBzbGF2ZSAlc1xuIiwKKwkJIGJvbmQtPmRldi0+bmFtZSwgc2xhdmUgPyBzbGF2ZS0+ZGV2LT5uYW1lIDogIk5VTEwiKTsKKworCWlmICghc2xhdmUgfHwgIWJvbmQtPnNlbmRfcGVlcl9ub3RpZiB8fAorCSAgICB0ZXN0X2JpdChfX0xJTktfU1RBVEVfTElOS1dBVENIX1BFTkRJTkcsICZzbGF2ZS0+ZGV2LT5zdGF0ZSkpCisJCXJldHVybiBmYWxzZTsKKworCWJvbmQtPnNlbmRfcGVlcl9ub3RpZi0tOworCXJldHVybiB0cnVlOworfQorCiAvKioKICAqIGNoYW5nZV9hY3RpdmVfaW50ZXJmYWNlIC0gY2hhbmdlIHRoZSBhY3RpdmUgc2xhdmUgaW50byB0aGUgc3BlY2lmaWVkIG9uZQogICogQGJvbmQ6IG91ciBib25kaW5nIHN0cnVjdApAQCAtMTE1NCw2ICsxMTQzLDggQEAKIAkJCWJvbmRfc2V0X3NsYXZlX2luYWN0aXZlX2ZsYWdzKG9sZF9hY3RpdmUpOwogCiAJCWlmIChuZXdfYWN0aXZlKSB7CisJCQlib29sIHNob3VsZF9ub3RpZnlfcGVlcnMgPSBmYWxzZTsKKwogCQkJYm9uZF9zZXRfc2xhdmVfYWN0aXZlX2ZsYWdzKG5ld19hY3RpdmUpOwogCiAJCQlpZiAoYm9uZC0+cGFyYW1zLmZhaWxfb3Zlcl9tYWMpCkBAIC0xMTYxLDE3ICsxMTUyLDE5IEBACiAJCQkJCQkgICAgICBvbGRfYWN0aXZlKTsKIAogCQkJaWYgKG5ldGlmX3J1bm5pbmcoYm9uZC0+ZGV2KSkgewotCQkJCWJvbmQtPnNlbmRfZ3JhdF9hcnAgPSBib25kLT5wYXJhbXMubnVtX2dyYXRfYXJwOwotCQkJCWJvbmRfc2VuZF9ncmF0dWl0b3VzX2FycChib25kKTsKLQotCQkJCWJvbmQtPnNlbmRfdW5zb2xfbmEgPSBib25kLT5wYXJhbXMubnVtX3Vuc29sX25hOwotCQkJCWJvbmRfc2VuZF91bnNvbGljaXRlZF9uYShib25kKTsKKwkJCQlib25kLT5zZW5kX3BlZXJfbm90aWYgPQorCQkJCQlib25kLT5wYXJhbXMubnVtX3BlZXJfbm90aWY7CisJCQkJc2hvdWxkX25vdGlmeV9wZWVycyA9CisJCQkJCWJvbmRfc2hvdWxkX25vdGlmeV9wZWVycyhib25kKTsKIAkJCX0KIAogCQkJd3JpdGVfdW5sb2NrX2JoKCZib25kLT5jdXJyX3NsYXZlX2xvY2spOwogCQkJcmVhZF91bmxvY2soJmJvbmQtPmxvY2spOwogCiAJCQluZXRkZXZfYm9uZGluZ19jaGFuZ2UoYm9uZC0+ZGV2LCBORVRERVZfQk9ORElOR19GQUlMT1ZFUik7CisJCQlpZiAoc2hvdWxkX25vdGlmeV9wZWVycykKKwkJCQluZXRkZXZfYm9uZGluZ19jaGFuZ2UoYm9uZC0+ZGV2LAorCQkJCQkJICAgICAgTkVUREVWX05PVElGWV9QRUVSUyk7CiAKIAkJCXJlYWRfbG9jaygmYm9uZC0+bG9jayk7CiAJCQl3cml0ZV9sb2NrX2JoKCZib25kLT5jdXJyX3NsYXZlX2xvY2spOwpAQCAtMTM4Nyw1MiArMTM4MCw2OCBAQAogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIEJPTkRfVkxBTl9GRUFUVVJFUyBcCi0JKE5FVElGX0ZfVkxBTl9DSEFMTEVOR0VEIHwgTkVUSUZfRl9IV19WTEFOX1JYIHwgTkVUSUZfRl9IV19WTEFOX1RYIHwgXAotCSBORVRJRl9GX0hXX1ZMQU5fRklMVEVSKQorc3RhdGljIHUzMiBib25kX2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpCit7CisJc3RydWN0IHNsYXZlICpzbGF2ZTsKKwlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIG1hc2s7CisJaW50IGk7CiAKLS8qCi0gKiBDb21wdXRlIHRoZSBjb21tb24gZGV2LT5mZWF0dXJlIHNldCBhdmFpbGFibGUgdG8gYWxsIHNsYXZlcy4gIFNvbWUKLSAqIGZlYXR1cmUgYml0cyBhcmUgbWFuYWdlZCBlbHNld2hlcmUsIHNvIHByZXNlcnZlIHRob3NlIGZlYXR1cmUgYml0cwotICogb24gdGhlIG1hc3RlciBkZXZpY2UuCi0gKi8KLXN0YXRpYyBpbnQgYm9uZF9jb21wdXRlX2ZlYXR1cmVzKHN0cnVjdCBib25kaW5nICpib25kKQorCXJlYWRfbG9jaygmYm9uZC0+bG9jayk7CisKKwlpZiAoIWJvbmQtPmZpcnN0X3NsYXZlKSB7CisJCS8qIERpc2FibGUgYWRkaW5nIFZMQU5zIHRvIGVtcHR5IGJvbmQuIEJ1dCB3aHk/IC0tbXEgKi8KKwkJZmVhdHVyZXMgfD0gTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQ7CisJCWdvdG8gb3V0OworCX0KKworCW1hc2sgPSBmZWF0dXJlczsKKwlmZWF0dXJlcyAmPSB+TkVUSUZfRl9PTkVfRk9SX0FMTDsKKwlmZWF0dXJlcyB8PSBORVRJRl9GX0FMTF9GT1JfQUxMOworCisJYm9uZF9mb3JfZWFjaF9zbGF2ZShib25kLCBzbGF2ZSwgaSkgeworCQlmZWF0dXJlcyA9IG5ldGRldl9pbmNyZW1lbnRfZmVhdHVyZXMoZmVhdHVyZXMsCisJCQkJCQkgICAgIHNsYXZlLT5kZXYtPmZlYXR1cmVzLAorCQkJCQkJICAgICBtYXNrKTsKKwl9CisKK291dDoKKwlyZWFkX3VubG9jaygmYm9uZC0+bG9jayk7CisJcmV0dXJuIGZlYXR1cmVzOworfQorCisjZGVmaW5lIEJPTkRfVkxBTl9GRUFUVVJFUwkoTkVUSUZfRl9BTExfVFhfT0ZGTE9BRFMgfCBcCisJCQkJIE5FVElGX0ZfU09GVF9GRUFUVVJFUyB8IFwKKwkJCQkgTkVUSUZfRl9MUk8pCisKK3N0YXRpYyB2b2lkIGJvbmRfY29tcHV0ZV9mZWF0dXJlcyhzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKIHsKIAlzdHJ1Y3Qgc2xhdmUgKnNsYXZlOwogCXN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldiA9IGJvbmQtPmRldjsKLQl1MzIgZmVhdHVyZXMgPSBib25kX2Rldi0+ZmVhdHVyZXM7Ci0JdTMyIHZsYW5fZmVhdHVyZXMgPSAwOwotCXVuc2lnbmVkIHNob3J0IG1heF9oYXJkX2hlYWRlcl9sZW4gPSBtYXgoKHUxNilFVEhfSExFTiwKLQkJCQkJCWJvbmRfZGV2LT5oYXJkX2hlYWRlcl9sZW4pOworCXUzMiB2bGFuX2ZlYXR1cmVzID0gQk9ORF9WTEFOX0ZFQVRVUkVTOworCXVuc2lnbmVkIHNob3J0IG1heF9oYXJkX2hlYWRlcl9sZW4gPSBFVEhfSExFTjsKIAlpbnQgaTsKIAotCWZlYXR1cmVzICY9IH4oTkVUSUZfRl9BTExfQ1NVTSB8IEJPTkRfVkxBTl9GRUFUVVJFUyk7Ci0JZmVhdHVyZXMgfD0gIE5FVElGX0ZfR1NPX01BU0sgfCBORVRJRl9GX05PX0NTVU07CisJcmVhZF9sb2NrKCZib25kLT5sb2NrKTsKIAogCWlmICghYm9uZC0+Zmlyc3Rfc2xhdmUpCiAJCWdvdG8gZG9uZTsKIAotCWZlYXR1cmVzICY9IH5ORVRJRl9GX09ORV9GT1JfQUxMOwotCi0Jdmxhbl9mZWF0dXJlcyA9IGJvbmQtPmZpcnN0X3NsYXZlLT5kZXYtPnZsYW5fZmVhdHVyZXM7CiAJYm9uZF9mb3JfZWFjaF9zbGF2ZShib25kLCBzbGF2ZSwgaSkgewotCQlmZWF0dXJlcyA9IG5ldGRldl9pbmNyZW1lbnRfZmVhdHVyZXMoZmVhdHVyZXMsCi0JCQkJCQkgICAgIHNsYXZlLT5kZXYtPmZlYXR1cmVzLAotCQkJCQkJICAgICBORVRJRl9GX09ORV9GT1JfQUxMKTsKIAkJdmxhbl9mZWF0dXJlcyA9IG5ldGRldl9pbmNyZW1lbnRfZmVhdHVyZXModmxhbl9mZWF0dXJlcywKLQkJCQkJCQlzbGF2ZS0+ZGV2LT52bGFuX2ZlYXR1cmVzLAotCQkJCQkJCU5FVElGX0ZfT05FX0ZPUl9BTEwpOworCQkJc2xhdmUtPmRldi0+dmxhbl9mZWF0dXJlcywgQk9ORF9WTEFOX0ZFQVRVUkVTKTsKKwogCQlpZiAoc2xhdmUtPmRldi0+aGFyZF9oZWFkZXJfbGVuID4gbWF4X2hhcmRfaGVhZGVyX2xlbikKIAkJCW1heF9oYXJkX2hlYWRlcl9sZW4gPSBzbGF2ZS0+ZGV2LT5oYXJkX2hlYWRlcl9sZW47CiAJfQogCiBkb25lOgotCWZlYXR1cmVzIHw9IChib25kX2Rldi0+ZmVhdHVyZXMgJiBCT05EX1ZMQU5fRkVBVFVSRVMpOwotCWJvbmRfZGV2LT5mZWF0dXJlcyA9IG5ldGRldl9maXhfZmVhdHVyZXMoYm9uZF9kZXYsIGZlYXR1cmVzKTsKLQlib25kX2Rldi0+dmxhbl9mZWF0dXJlcyA9IG5ldGRldl9maXhfZmVhdHVyZXMoYm9uZF9kZXYsIHZsYW5fZmVhdHVyZXMpOworCWJvbmRfZGV2LT52bGFuX2ZlYXR1cmVzID0gdmxhbl9mZWF0dXJlczsKIAlib25kX2Rldi0+aGFyZF9oZWFkZXJfbGVuID0gbWF4X2hhcmRfaGVhZGVyX2xlbjsKIAotCXJldHVybiAwOworCXJlYWRfdW5sb2NrKCZib25kLT5sb2NrKTsKKworCW5ldGRldl9jaGFuZ2VfZmVhdHVyZXMoYm9uZF9kZXYpOwogfQogCiBzdGF0aWMgdm9pZCBib25kX3NldHVwX2J5X3NsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldiwKQEAgLTE0NTIsMjcgKzE0NjEsMTcgQEAKIH0KIAogLyogT24gYm9uZGluZyBzbGF2ZXMgb3RoZXIgdGhhbiB0aGUgY3VycmVudGx5IGFjdGl2ZSBzbGF2ZSwgc3VwcHJlc3MKLSAqIGR1cGxpY2F0ZXMgZXhjZXB0IGZvciA4MDIuM2FkIEVUSF9QX1NMT1csIGFsYiBub24tbWNhc3QvYmNhc3QsIGFuZAotICogQVJQIG9uIGFjdGl2ZS1iYWNrdXAgc2xhdmVzIHdpdGggYXJwX3ZhbGlkYXRlIGVuYWJsZWQuCisgKiBkdXBsaWNhdGVzIGV4Y2VwdCBmb3IgYWxiIG5vbi1tY2FzdC9iY2FzdC4KICAqLwogc3RhdGljIGJvb2wgYm9uZF9zaG91bGRfZGVsaXZlcl9leGFjdF9tYXRjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgICAgc3RydWN0IHNsYXZlICpzbGF2ZSwKIAkJCQkJICAgIHN0cnVjdCBib25kaW5nICpib25kKQogewogCWlmIChib25kX2lzX3NsYXZlX2luYWN0aXZlKHNsYXZlKSkgewotCQlpZiAoc2xhdmVfZG9fYXJwX3ZhbGlkYXRlKGJvbmQsIHNsYXZlKSAmJgotCQkgICAgc2tiLT5wcm90b2NvbCA9PSBfX2NwdV90b19iZTE2KEVUSF9QX0FSUCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KIAkJaWYgKGJvbmQtPnBhcmFtcy5tb2RlID09IEJPTkRfTU9ERV9BTEIgJiYKIAkJICAgIHNrYi0+cGt0X3R5cGUgIT0gUEFDS0VUX0JST0FEQ0FTVCAmJgogCQkgICAgc2tiLT5wa3RfdHlwZSAhPSBQQUNLRVRfTVVMVElDQVNUKQotCQkJCXJldHVybiBmYWxzZTsKLQotCQlpZiAoYm9uZC0+cGFyYW1zLm1vZGUgPT0gQk9ORF9NT0RFXzgwMjNBRCAmJgotCQkgICAgc2tiLT5wcm90b2NvbCA9PSBfX2NwdV90b19iZTE2KEVUSF9QX1NMT1cpKQogCQkJcmV0dXJuIGZhbHNlOwotCiAJCXJldHVybiB0cnVlOwogCX0KIAlyZXR1cm4gZmFsc2U7CkBAIC0xNDk2LDYgKzE0OTUsMTUgQEAKIAlpZiAoYm9uZC0+cGFyYW1zLmFycF9pbnRlcnZhbCkKIAkJc2xhdmUtPmRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAKKwlpZiAoYm9uZC0+cmVjdl9wcm9iZSkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOworCisJCWlmIChsaWtlbHkobnNrYikpIHsKKwkJCWJvbmQtPnJlY3ZfcHJvYmUobnNrYiwgYm9uZCwgc2xhdmUpOworCQkJZGV2X2tmcmVlX3NrYihuc2tiKTsKKwkJfQorCX0KKwogCWlmIChib25kX3Nob3VsZF9kZWxpdmVyX2V4YWN0X21hdGNoKHNrYiwgc2xhdmUsIGJvbmQpKSB7CiAJCXJldHVybiBSWF9IQU5ETEVSX0VYQUNUOwogCX0KQEAgLTE1MjYsNyArMTUzNCw2IEBACiAJc3RydWN0IG5ldGRldl9od19hZGRyICpoYTsKIAlzdHJ1Y3Qgc29ja2FkZHIgYWRkcjsKIAlpbnQgbGlua19yZXBvcnRpbmc7Ci0JaW50IG9sZF9mZWF0dXJlcyA9IGJvbmRfZGV2LT5mZWF0dXJlczsKIAlpbnQgcmVzID0gMDsKIAogCWlmICghYm9uZC0+cGFyYW1zLnVzZV9jYXJyaWVyICYmIHNsYXZlX2Rldi0+ZXRodG9vbF9vcHMgPT0gTlVMTCAmJgpAQCAtMTU1OSwxNiArMTU2Niw5IEBACiAJCQlwcl93YXJuaW5nKCIlczogV2FybmluZzogZW5zbGF2ZWQgVkxBTiBjaGFsbGVuZ2VkIHNsYXZlICVzLiBBZGRpbmcgVkxBTnMgd2lsbCBiZSBibG9ja2VkIGFzIGxvbmcgYXMgJXMgaXMgcGFydCBvZiBib25kICVzXG4iLAogCQkJCSAgIGJvbmRfZGV2LT5uYW1lLCBzbGF2ZV9kZXYtPm5hbWUsCiAJCQkJICAgc2xhdmVfZGV2LT5uYW1lLCBib25kX2Rldi0+bmFtZSk7Ci0JCQlib25kX2Rldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQ7CiAJCX0KIAl9IGVsc2UgewogCQlwcl9kZWJ1ZygiJXM6ICEgTkVUSUZfRl9WTEFOX0NIQUxMRU5HRURcbiIsIHNsYXZlX2Rldi0+bmFtZSk7Ci0JCWlmIChib25kLT5zbGF2ZV9jbnQgPT0gMCkgewotCQkJLyogRmlyc3Qgc2xhdmUsIGFuZCBpdCBpcyBub3QgVkxBTiBjaGFsbGVuZ2VkLAotCQkJICogc28gcmVtb3ZlIHRoZSBibG9jayBvZiBhZGRpbmcgVkxBTnMgb3ZlciB0aGUgYm9uZC4KLQkJCSAqLwotCQkJYm9uZF9kZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRDsKLQkJfQogCX0KIAogCS8qCkBAIC0xNzU3LDEwICsxNzU3LDEwIEBACiAJbmV3X3NsYXZlLT5kZWxheSA9IDA7CiAJbmV3X3NsYXZlLT5saW5rX2ZhaWx1cmVfY291bnQgPSAwOwogCi0JYm9uZF9jb21wdXRlX2ZlYXR1cmVzKGJvbmQpOwotCiAJd3JpdGVfdW5sb2NrX2JoKCZib25kLT5sb2NrKTsKIAorCWJvbmRfY29tcHV0ZV9mZWF0dXJlcyhib25kKTsKKwogCXJlYWRfbG9jaygmYm9uZC0+bG9jayk7CiAKIAluZXdfc2xhdmUtPmxhc3RfYXJwX3J4ID0gamlmZmllczsKQEAgLTE5NDAsNyArMTk0MCw3IEBACiAJa2ZyZWUobmV3X3NsYXZlKTsKIAogZXJyX3VuZG9fZmxhZ3M6Ci0JYm9uZF9kZXYtPmZlYXR1cmVzID0gb2xkX2ZlYXR1cmVzOworCWJvbmRfY29tcHV0ZV9mZWF0dXJlcyhib25kKTsKIAogCXJldHVybiByZXM7CiB9CkBAIC0xOTYxLDYgKzE5NjEsNyBAQAogCXN0cnVjdCBib25kaW5nICpib25kID0gbmV0ZGV2X3ByaXYoYm9uZF9kZXYpOwogCXN0cnVjdCBzbGF2ZSAqc2xhdmUsICpvbGRjdXJyZW50OwogCXN0cnVjdCBzb2NrYWRkciBhZGRyOworCXUzMiBvbGRfZmVhdHVyZXMgPSBib25kX2Rldi0+ZmVhdHVyZXM7CiAKIAkvKiBzbGF2ZSBpcyBub3QgYSBzbGF2ZSBvciBtYXN0ZXIgaXMgbm90IG1hc3RlciBvZiB0aGlzIHNsYXZlICovCiAJaWYgKCEoc2xhdmVfZGV2LT5mbGFncyAmIElGRl9TTEFWRSkgfHwKQEAgLTIwMjEsOCArMjAyMiw2IEBACiAJLyogcmVsZWFzZSB0aGUgc2xhdmUgZnJvbSBpdHMgYm9uZCAqLwogCWJvbmRfZGV0YWNoX3NsYXZlKGJvbmQsIHNsYXZlKTsKIAotCWJvbmRfY29tcHV0ZV9mZWF0dXJlcyhib25kKTsKLQogCWlmIChib25kLT5wcmltYXJ5X3NsYXZlID09IHNsYXZlKQogCQlib25kLT5wcmltYXJ5X3NsYXZlID0gTlVMTDsKIApAQCAtMjA2NiwyNCArMjA2NSwyMyBAQAogCQkgKi8KIAkJbWVtc2V0KGJvbmRfZGV2LT5kZXZfYWRkciwgMCwgYm9uZF9kZXYtPmFkZHJfbGVuKTsKIAotCQlpZiAoIWJvbmQtPnZsZ3JwKSB7Ci0JCQlib25kX2Rldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQ7Ci0JCX0gZWxzZSB7CisJCWlmIChib25kLT52bGdycCkgewogCQkJcHJfd2FybmluZygiJXM6IFdhcm5pbmc6IGNsZWFyaW5nIEhXIGFkZHJlc3Mgb2YgJXMgd2hpbGUgaXQgc3RpbGwgaGFzIFZMQU5zLlxuIiwKIAkJCQkgICBib25kX2Rldi0+bmFtZSwgYm9uZF9kZXYtPm5hbWUpOwogCQkJcHJfd2FybmluZygiJXM6IFdoZW4gcmUtYWRkaW5nIHNsYXZlcywgbWFrZSBzdXJlIHRoZSBib25kJ3MgSFcgYWRkcmVzcyBtYXRjaGVzIGl0cyBWTEFOcycuXG4iLAogCQkJCSAgIGJvbmRfZGV2LT5uYW1lKTsKIAkJfQotCX0gZWxzZSBpZiAoKGJvbmRfZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfVkxBTl9DSEFMTEVOR0VEKSAmJgotCQkgICAhYm9uZF9oYXNfY2hhbGxlbmdlZF9zbGF2ZXMoYm9uZCkpIHsKLQkJcHJfaW5mbygiJXM6IGxhc3QgVkxBTiBjaGFsbGVuZ2VkIHNsYXZlICVzIGxlZnQgYm9uZCAlcy4gVkxBTiBibG9ja2luZyBpcyByZW1vdmVkXG4iLAotCQkJYm9uZF9kZXYtPm5hbWUsIHNsYXZlX2Rldi0+bmFtZSwgYm9uZF9kZXYtPm5hbWUpOwotCQlib25kX2Rldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfVkxBTl9DSEFMTEVOR0VEOwogCX0KIAogCXdyaXRlX3VubG9ja19iaCgmYm9uZC0+bG9jayk7CiAJdW5ibG9ja19uZXRwb2xsX3R4KCk7CiAKKwlib25kX2NvbXB1dGVfZmVhdHVyZXMoYm9uZCk7CisJaWYgKCEoYm9uZF9kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQpICYmCisJICAgIChvbGRfZmVhdHVyZXMgJiBORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRCkpCisJCXByX2luZm8oIiVzOiBsYXN0IFZMQU4gY2hhbGxlbmdlZCBzbGF2ZSAlcyBsZWZ0IGJvbmQgJXMuIFZMQU4gYmxvY2tpbmcgaXMgcmVtb3ZlZFxuIiwKKwkJCWJvbmRfZGV2LT5uYW1lLCBzbGF2ZV9kZXYtPm5hbWUsIGJvbmRfZGV2LT5uYW1lKTsKKwogCS8qIG11c3QgZG8gdGhpcyBmcm9tIG91dHNpZGUgYW55IHNwaW5sb2NrcyAqLwogCWJvbmRfZGVzdHJveV9zbGF2ZV9zeW1saW5rcyhib25kX2Rldiwgc2xhdmVfZGV2KTsKIApAQCAtMjIwMSw4ICsyMTk5LDYgQEAKIAkJCWJvbmRfYWxiX2RlaW5pdF9zbGF2ZShib25kLCBzbGF2ZSk7CiAJCX0KIAotCQlib25kX2NvbXB1dGVfZmVhdHVyZXMoYm9uZCk7Ci0KIAkJYm9uZF9kZXN0cm95X3NsYXZlX3N5bWxpbmtzKGJvbmRfZGV2LCBzbGF2ZV9kZXYpOwogCQlib25kX2RlbF92bGFuc19mcm9tX3NsYXZlKGJvbmQsIHNsYXZlX2Rldik7CiAKQEAgLTIyNTEsOSArMjI0Nyw3IEBACiAJICovCiAJbWVtc2V0KGJvbmRfZGV2LT5kZXZfYWRkciwgMCwgYm9uZF9kZXYtPmFkZHJfbGVuKTsKIAotCWlmICghYm9uZC0+dmxncnApIHsKLQkJYm9uZF9kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVkxBTl9DSEFMTEVOR0VEOwotCX0gZWxzZSB7CisJaWYgKGJvbmQtPnZsZ3JwKSB7CiAJCXByX3dhcm5pbmcoIiVzOiBXYXJuaW5nOiBjbGVhcmluZyBIVyBhZGRyZXNzIG9mICVzIHdoaWxlIGl0IHN0aWxsIGhhcyBWTEFOcy5cbiIsCiAJCQkgICBib25kX2Rldi0+bmFtZSwgYm9uZF9kZXYtPm5hbWUpOwogCQlwcl93YXJuaW5nKCIlczogV2hlbiByZS1hZGRpbmcgc2xhdmVzLCBtYWtlIHN1cmUgdGhlIGJvbmQncyBIVyBhZGRyZXNzIG1hdGNoZXMgaXRzIFZMQU5zJy5cbiIsCkBAIC0yMjY0LDYgKzIyNTgsOSBAQAogCiBvdXQ6CiAJd3JpdGVfdW5sb2NrX2JoKCZib25kLT5sb2NrKTsKKworCWJvbmRfY29tcHV0ZV9mZWF0dXJlcyhib25kKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yNDkzLDcgKzI0OTAsNyBAQAogCiAJCQlib25kX3VwZGF0ZV9zcGVlZF9kdXBsZXgoc2xhdmUpOwogCi0JCQlwcl9pbmZvKCIlczogbGluayBzdGF0dXMgZGVmaW5pdGVseSB1cCBmb3IgaW50ZXJmYWNlICVzLCAlZCBNYnBzICVzIGR1cGxleC5cbiIsCisJCQlwcl9pbmZvKCIlczogbGluayBzdGF0dXMgZGVmaW5pdGVseSB1cCBmb3IgaW50ZXJmYWNlICVzLCAldSBNYnBzICVzIGR1cGxleC5cbiIsCiAJCQkJYm9uZC0+ZGV2LT5uYW1lLCBzbGF2ZS0+ZGV2LT5uYW1lLAogCQkJCXNsYXZlLT5zcGVlZCwgc2xhdmUtPmR1cGxleCA/ICJmdWxsIiA6ICJoYWxmIik7CiAKQEAgLTI1NzAsNiArMjU2Nyw3IEBACiB7CiAJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJvbmRpbmcsCiAJCQkJCSAgICBtaWlfd29yay53b3JrKTsKKwlib29sIHNob3VsZF9ub3RpZnlfcGVlcnMgPSBmYWxzZTsKIAogCXJlYWRfbG9jaygmYm9uZC0+bG9jayk7CiAJaWYgKGJvbmQtPmtpbGxfdGltZXJzKQpAQCAtMjU3OCwxNyArMjU3Niw3IEBACiAJaWYgKGJvbmQtPnNsYXZlX2NudCA9PSAwKQogCQlnb3RvIHJlX2FybTsKIAotCWlmIChib25kLT5zZW5kX2dyYXRfYXJwKSB7Ci0JCXJlYWRfbG9jaygmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKTsKLQkJYm9uZF9zZW5kX2dyYXR1aXRvdXNfYXJwKGJvbmQpOwotCQlyZWFkX3VubG9jaygmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKTsKLQl9Ci0KLQlpZiAoYm9uZC0+c2VuZF91bnNvbF9uYSkgewotCQlyZWFkX2xvY2soJmJvbmQtPmN1cnJfc2xhdmVfbG9jayk7Ci0JCWJvbmRfc2VuZF91bnNvbGljaXRlZF9uYShib25kKTsKLQkJcmVhZF91bmxvY2soJmJvbmQtPmN1cnJfc2xhdmVfbG9jayk7Ci0JfQorCXNob3VsZF9ub3RpZnlfcGVlcnMgPSBib25kX3Nob3VsZF9ub3RpZnlfcGVlcnMoYm9uZCk7CiAKIAlpZiAoYm9uZF9taWltb25faW5zcGVjdChib25kKSkgewogCQlyZWFkX3VubG9jaygmYm9uZC0+bG9jayk7CkBAIC0yNjA4LDYgKzI1OTYsMTIgQEAKIAkJCQkgICBtc2Vjc190b19qaWZmaWVzKGJvbmQtPnBhcmFtcy5taWltb24pKTsKIG91dDoKIAlyZWFkX3VubG9jaygmYm9uZC0+bG9jayk7CisKKwlpZiAoc2hvdWxkX25vdGlmeV9wZWVycykgeworCQlydG5sX2xvY2soKTsKKwkJbmV0ZGV2X2JvbmRpbmdfY2hhbmdlKGJvbmQtPmRldiwgTkVUREVWX05PVElGWV9QRUVSUyk7CisJCXJ0bmxfdW5sb2NrKCk7CisJfQogfQogCiBzdGF0aWMgX19iZTMyIGJvbmRfZ2xlYW5fZGV2X2lwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0yNzUxLDQ0ICsyNzQ1LDYgQEAKIAl9CiB9CiAKLS8qCi0gKiBLaWNrIG91dCBhIGdyYXR1aXRvdXMgQVJQIGZvciBhbiBJUCBvbiB0aGUgYm9uZGluZyBtYXN0ZXIgcGx1cyBvbmUKLSAqIGZvciBlYWNoIFZMQU4gYWJvdmUgdXMuCi0gKgotICogQ2FsbGVyIG11c3QgaG9sZCBjdXJyX3NsYXZlX2xvY2sgZm9yIHJlYWQgb3IgYmV0dGVyCi0gKi8KLXN0YXRpYyB2b2lkIGJvbmRfc2VuZF9ncmF0dWl0b3VzX2FycChzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKLXsKLQlzdHJ1Y3Qgc2xhdmUgKnNsYXZlID0gYm9uZC0+Y3Vycl9hY3RpdmVfc2xhdmU7Ci0Jc3RydWN0IHZsYW5fZW50cnkgKnZsYW47Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKnZsYW5fZGV2OwotCi0JcHJfZGVidWcoImJvbmRfc2VuZF9ncmF0X2FycDogYm9uZCAlcyBzbGF2ZSAlc1xuIiwKLQkJIGJvbmQtPmRldi0+bmFtZSwgc2xhdmUgPyBzbGF2ZS0+ZGV2LT5uYW1lIDogIk5VTEwiKTsKLQotCWlmICghc2xhdmUgfHwgIWJvbmQtPnNlbmRfZ3JhdF9hcnAgfHwKLQkgICAgdGVzdF9iaXQoX19MSU5LX1NUQVRFX0xJTktXQVRDSF9QRU5ESU5HLCAmc2xhdmUtPmRldi0+c3RhdGUpKQotCQlyZXR1cm47Ci0KLQlib25kLT5zZW5kX2dyYXRfYXJwLS07Ci0KLQlpZiAoYm9uZC0+bWFzdGVyX2lwKSB7Ci0JCWJvbmRfYXJwX3NlbmQoc2xhdmUtPmRldiwgQVJQT1BfUkVQTFksIGJvbmQtPm1hc3Rlcl9pcCwKLQkJCQlib25kLT5tYXN0ZXJfaXAsIDApOwotCX0KLQotCWlmICghYm9uZC0+dmxncnApCi0JCXJldHVybjsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkodmxhbiwgJmJvbmQtPnZsYW5fbGlzdCwgdmxhbl9saXN0KSB7Ci0JCXZsYW5fZGV2ID0gdmxhbl9ncm91cF9nZXRfZGV2aWNlKGJvbmQtPnZsZ3JwLCB2bGFuLT52bGFuX2lkKTsKLQkJaWYgKHZsYW4tPnZsYW5faXApIHsKLQkJCWJvbmRfYXJwX3NlbmQoc2xhdmUtPmRldiwgQVJQT1BfUkVQTFksIHZsYW4tPnZsYW5faXAsCi0JCQkJICAgICAgdmxhbi0+dmxhbl9pcCwgdmxhbi0+dmxhbl9pZCk7Ci0JCX0KLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIGJvbmRfdmFsaWRhdGVfYXJwKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlLCBfX2JlMzIgc2lwLCBfX2JlMzIgdGlwKQogewogCWludCBpOwpAQCAtMjgwNiw0OCArMjc2MiwyNiBAQAogCX0KIH0KIAotc3RhdGljIGludCBib25kX2FycF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQorc3RhdGljIHZvaWQgYm9uZF9hcnBfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLAorCQkJIHN0cnVjdCBzbGF2ZSAqc2xhdmUpCiB7CiAJc3RydWN0IGFycGhkciAqYXJwOwotCXN0cnVjdCBzbGF2ZSAqc2xhdmU7Ci0Jc3RydWN0IGJvbmRpbmcgKmJvbmQ7CiAJdW5zaWduZWQgY2hhciAqYXJwX3B0cjsKIAlfX2JlMzIgc2lwLCB0aXA7CiAKLQlpZiAoZGV2LT5wcml2X2ZsYWdzICYgSUZGXzgwMl8xUV9WTEFOKSB7Ci0JCS8qCi0JCSAqIFdoZW4gdXNpbmcgVkxBTlMgYW5kIGJvbmRpbmcsIGRldiBhbmQgb3Jpdl9kZXYgbWF5IGJlCi0JCSAqIGluY29ycmVjdCBpZiB0aGUgcGh5c2ljYWwgaW50ZXJmYWNlIHN1cHBvcnRzIFZMQU4KLQkJICogYWNjZWxlcmF0aW9uLiAgV2l0aCB0aGlzIGNoYW5nZSBBUlAgdmFsaWRhdGlvbiBub3cKLQkJICogd29ya3MgZm9yIGhvc3RzIG9ubHkgcmVhY2hhYmxlIG9uIHRoZSBWTEFOIGludGVyZmFjZS4KLQkJICovCi0JCWRldiA9IHZsYW5fZGV2X3JlYWxfZGV2KGRldik7Ci0JCW9yaWdfZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UoZGV2X25ldChza2ItPmRldiksc2tiLT5za2JfaWlmKTsKLQl9CisJaWYgKHNrYi0+cHJvdG9jb2wgIT0gX19jcHVfdG9fYmUxNihFVEhfUF9BUlApKQorCQlyZXR1cm47CiAKLQlpZiAoIShkZXYtPnByaXZfZmxhZ3MgJiBJRkZfQk9ORElORykgfHwgIShkZXYtPmZsYWdzICYgSUZGX01BU1RFUikpCi0JCWdvdG8gb3V0OwotCi0JYm9uZCA9IG5ldGRldl9wcml2KGRldik7CiAJcmVhZF9sb2NrKCZib25kLT5sb2NrKTsKIAotCXByX2RlYnVnKCJib25kX2FycF9yY3Y6IGJvbmQgJXMgc2tiLT5kZXYgJXMgb3JpZ19kZXYgJXNcbiIsCi0JCSBib25kLT5kZXYtPm5hbWUsIHNrYi0+ZGV2ID8gc2tiLT5kZXYtPm5hbWUgOiAiTlVMTCIsCi0JCSBvcmlnX2RldiA/IG9yaWdfZGV2LT5uYW1lIDogIk5VTEwiKTsKKwlwcl9kZWJ1ZygiYm9uZF9hcnBfcmN2OiBib25kICVzIHNrYi0+ZGV2ICVzXG4iLAorCQkgYm9uZC0+ZGV2LT5uYW1lLCBza2ItPmRldi0+bmFtZSk7CiAKLQlzbGF2ZSA9IGJvbmRfZ2V0X3NsYXZlX2J5X2Rldihib25kLCBvcmlnX2Rldik7Ci0JaWYgKCFzbGF2ZSB8fCAhc2xhdmVfZG9fYXJwX3ZhbGlkYXRlKGJvbmQsIHNsYXZlKSkKLQkJZ290byBvdXRfdW5sb2NrOwotCi0Jc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFza2IpCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCWlmICghcHNrYl9tYXlfcHVsbChza2IsIGFycF9oZHJfbGVuKGRldikpKQorCWlmICghcHNrYl9tYXlfcHVsbChza2IsIGFycF9oZHJfbGVuKGJvbmQtPmRldikpKQogCQlnb3RvIG91dF91bmxvY2s7CiAKIAlhcnAgPSBhcnBfaGRyKHNrYik7Ci0JaWYgKGFycC0+YXJfaGxuICE9IGRldi0+YWRkcl9sZW4gfHwKKwlpZiAoYXJwLT5hcl9obG4gIT0gYm9uZC0+ZGV2LT5hZGRyX2xlbiB8fAogCSAgICBza2ItPnBrdF90eXBlID09IFBBQ0tFVF9PVEhFUkhPU1QgfHwKIAkgICAgc2tiLT5wa3RfdHlwZSA9PSBQQUNLRVRfTE9PUEJBQ0sgfHwKIAkgICAgYXJwLT5hcl9ocmQgIT0gaHRvbnMoQVJQSFJEX0VUSEVSKSB8fApAQCAtMjg1Niw5ICsyNzkwLDkgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJYXJwX3B0ciA9ICh1bnNpZ25lZCBjaGFyICopKGFycCArIDEpOwotCWFycF9wdHIgKz0gZGV2LT5hZGRyX2xlbjsKKwlhcnBfcHRyICs9IGJvbmQtPmRldi0+YWRkcl9sZW47CiAJbWVtY3B5KCZzaXAsIGFycF9wdHIsIDQpOwotCWFycF9wdHIgKz0gNCArIGRldi0+YWRkcl9sZW47CisJYXJwX3B0ciArPSA0ICsgYm9uZC0+ZGV2LT5hZGRyX2xlbjsKIAltZW1jcHkoJnRpcCwgYXJwX3B0ciwgNCk7CiAKIAlwcl9kZWJ1ZygiYm9uZF9hcnBfcmN2OiAlcyAlcy8lZCBhdiAlZCBzdiAlZCBzaXAgJXBJNCB0aXAgJXBJNFxuIiwKQEAgLTI4ODEsOSArMjgxNSw2IEBACiAKIG91dF91bmxvY2s6CiAJcmVhZF91bmxvY2soJmJvbmQtPmxvY2spOwotb3V0OgotCWRldl9rZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7CiB9CiAKIC8qCkBAIC0zMjQzLDYgKzMxNzQsNyBAQAogewogCXN0cnVjdCBib25kaW5nICpib25kID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBib25kaW5nLAogCQkJCQkgICAgYXJwX3dvcmsud29yayk7CisJYm9vbCBzaG91bGRfbm90aWZ5X3BlZXJzID0gZmFsc2U7CiAJaW50IGRlbHRhX2luX3RpY2tzOwogCiAJcmVhZF9sb2NrKCZib25kLT5sb2NrKTsKQEAgLTMyNTUsMTcgKzMxODcsNyBAQAogCWlmIChib25kLT5zbGF2ZV9jbnQgPT0gMCkKIAkJZ290byByZV9hcm07CiAKLQlpZiAoYm9uZC0+c2VuZF9ncmF0X2FycCkgewotCQlyZWFkX2xvY2soJmJvbmQtPmN1cnJfc2xhdmVfbG9jayk7Ci0JCWJvbmRfc2VuZF9ncmF0dWl0b3VzX2FycChib25kKTsKLQkJcmVhZF91bmxvY2soJmJvbmQtPmN1cnJfc2xhdmVfbG9jayk7Ci0JfQotCi0JaWYgKGJvbmQtPnNlbmRfdW5zb2xfbmEpIHsKLQkJcmVhZF9sb2NrKCZib25kLT5jdXJyX3NsYXZlX2xvY2spOwotCQlib25kX3NlbmRfdW5zb2xpY2l0ZWRfbmEoYm9uZCk7Ci0JCXJlYWRfdW5sb2NrKCZib25kLT5jdXJyX3NsYXZlX2xvY2spOwotCX0KKwlzaG91bGRfbm90aWZ5X3BlZXJzID0gYm9uZF9zaG91bGRfbm90aWZ5X3BlZXJzKGJvbmQpOwogCiAJaWYgKGJvbmRfYWJfYXJwX2luc3BlY3QoYm9uZCwgZGVsdGFfaW5fdGlja3MpKSB7CiAJCXJlYWRfdW5sb2NrKCZib25kLT5sb2NrKTsKQEAgLTMyODYsNiArMzIwOCwxMiBAQAogCQlxdWV1ZV9kZWxheWVkX3dvcmsoYm9uZC0+d3EsICZib25kLT5hcnBfd29yaywgZGVsdGFfaW5fdGlja3MpOwogb3V0OgogCXJlYWRfdW5sb2NrKCZib25kLT5sb2NrKTsKKworCWlmIChzaG91bGRfbm90aWZ5X3BlZXJzKSB7CisJCXJ0bmxfbG9jaygpOworCQluZXRkZXZfYm9uZGluZ19jaGFuZ2UoYm9uZC0+ZGV2LCBORVRERVZfTk9USUZZX1BFRVJTKTsKKwkJcnRubF91bmxvY2soKTsKKwl9CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbmV0ZGV2IGV2ZW50IGhhbmRsaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTMzMzksOCArMzI2Nyw4IEBACiAKIAkJCXNsYXZlID0gYm9uZF9nZXRfc2xhdmVfYnlfZGV2KGJvbmQsIHNsYXZlX2Rldik7CiAJCQlpZiAoc2xhdmUpIHsKLQkJCQl1MTYgb2xkX3NwZWVkID0gc2xhdmUtPnNwZWVkOwotCQkJCXUxNiBvbGRfZHVwbGV4ID0gc2xhdmUtPmR1cGxleDsKKwkJCQl1MzIgb2xkX3NwZWVkID0gc2xhdmUtPnNwZWVkOworCQkJCXU4ICBvbGRfZHVwbGV4ID0gc2xhdmUtPmR1cGxleDsKIAogCQkJCWJvbmRfdXBkYXRlX3NwZWVkX2R1cGxleChzbGF2ZSk7CiAKQEAgLTM0ODIsNDggKzM0MTAsNiBAQAogCS5ub3RpZmllcl9jYWxsID0gYm9uZF9pbmV0YWRkcl9ldmVudCwKIH07CiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGFja2V0IHR5cGUgaGFuZGxpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogcmVnaXN0ZXIgdG8gcmVjZWl2ZSBsYWNwZHVzIG9uIGEgYm9uZCAqLwotc3RhdGljIHZvaWQgYm9uZF9yZWdpc3Rlcl9sYWNwZHUoc3RydWN0IGJvbmRpbmcgKmJvbmQpCi17Ci0Jc3RydWN0IHBhY2tldF90eXBlICpwa190eXBlID0gJihCT05EX0FEX0lORk8oYm9uZCkuYWRfcGt0X3R5cGUpOwotCi0JLyogaW5pdGlhbGl6ZSBwYWNrZXQgdHlwZSAqLwotCXBrX3R5cGUtPnR5cGUgPSBQS1RfVFlQRV9MQUNQRFU7Ci0JcGtfdHlwZS0+ZGV2ID0gYm9uZC0+ZGV2OwotCXBrX3R5cGUtPmZ1bmMgPSBib25kXzNhZF9sYWNwZHVfcmVjdjsKLQotCWRldl9hZGRfcGFjayhwa190eXBlKTsKLX0KLQotLyogdW5yZWdpc3RlciB0byByZWNlaXZlIGxhY3BkdXMgb24gYSBib25kICovCi1zdGF0aWMgdm9pZCBib25kX3VucmVnaXN0ZXJfbGFjcGR1KHN0cnVjdCBib25kaW5nICpib25kKQotewotCWRldl9yZW1vdmVfcGFjaygmKEJPTkRfQURfSU5GTyhib25kKS5hZF9wa3RfdHlwZSkpOwotfQotCi12b2lkIGJvbmRfcmVnaXN0ZXJfYXJwKHN0cnVjdCBib25kaW5nICpib25kKQotewotCXN0cnVjdCBwYWNrZXRfdHlwZSAqcHQgPSAmYm9uZC0+YXJwX21vbl9wdDsKLQotCWlmIChwdC0+dHlwZSkKLQkJcmV0dXJuOwotCi0JcHQtPnR5cGUgPSBodG9ucyhFVEhfUF9BUlApOwotCXB0LT5kZXYgPSBib25kLT5kZXY7Ci0JcHQtPmZ1bmMgPSBib25kX2FycF9yY3Y7Ci0JZGV2X2FkZF9wYWNrKHB0KTsKLX0KLQotdm9pZCBib25kX3VucmVnaXN0ZXJfYXJwKHN0cnVjdCBib25kaW5nICpib25kKQotewotCXN0cnVjdCBwYWNrZXRfdHlwZSAqcHQgPSAmYm9uZC0+YXJwX21vbl9wdDsKLQotCWRldl9yZW1vdmVfcGFjayhwdCk7Ci0JcHQtPnR5cGUgPSAwOwotfQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSGFzaGluZyBQb2xpY2llcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qCkBAIC0zNjE3LDE0ICszNTAzLDE0IEBACiAKIAkJcXVldWVfZGVsYXllZF93b3JrKGJvbmQtPndxLCAmYm9uZC0+YXJwX3dvcmssIDApOwogCQlpZiAoYm9uZC0+cGFyYW1zLmFycF92YWxpZGF0ZSkKLQkJCWJvbmRfcmVnaXN0ZXJfYXJwKGJvbmQpOworCQkJYm9uZC0+cmVjdl9wcm9iZSA9IGJvbmRfYXJwX3JjdjsKIAl9CiAKIAlpZiAoYm9uZC0+cGFyYW1zLm1vZGUgPT0gQk9ORF9NT0RFXzgwMjNBRCkgewogCQlJTklUX0RFTEFZRURfV09SSygmYm9uZC0+YWRfd29yaywgYm9uZF8zYWRfc3RhdGVfbWFjaGluZV9oYW5kbGVyKTsKIAkJcXVldWVfZGVsYXllZF93b3JrKGJvbmQtPndxLCAmYm9uZC0+YWRfd29yaywgMCk7CiAJCS8qIHJlZ2lzdGVyIHRvIHJlY2VpdmUgTEFDUERVcyAqLwotCQlib25kX3JlZ2lzdGVyX2xhY3BkdShib25kKTsKKwkJYm9uZC0+cmVjdl9wcm9iZSA9IGJvbmRfM2FkX2xhY3BkdV9yZWN2OwogCQlib25kXzNhZF9pbml0aWF0ZV9hZ2dfc2VsZWN0aW9uKGJvbmQsIDEpOwogCX0KIApAQCAtMzYzNSwxOCArMzUyMSw5IEBACiB7CiAJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSBuZXRkZXZfcHJpdihib25kX2Rldik7CiAKLQlpZiAoYm9uZC0+cGFyYW1zLm1vZGUgPT0gQk9ORF9NT0RFXzgwMjNBRCkgewotCQkvKiBVbnJlZ2lzdGVyIHRoZSByZWNlaXZlIG9mIExBQ1BEVXMgKi8KLQkJYm9uZF91bnJlZ2lzdGVyX2xhY3BkdShib25kKTsKLQl9Ci0KLQlpZiAoYm9uZC0+cGFyYW1zLmFycF92YWxpZGF0ZSkKLQkJYm9uZF91bnJlZ2lzdGVyX2FycChib25kKTsKLQogCXdyaXRlX2xvY2tfYmgoJmJvbmQtPmxvY2spOwogCi0JYm9uZC0+c2VuZF9ncmF0X2FycCA9IDA7Ci0JYm9uZC0+c2VuZF91bnNvbF9uYSA9IDA7CisJYm9uZC0+c2VuZF9wZWVyX25vdGlmID0gMDsKIAogCS8qIHNpZ25hbCB0aW1lcnMgbm90IHRvIHJlLWFybSAqLwogCWJvbmQtPmtpbGxfdGltZXJzID0gMTsKQEAgLTM2ODIsNiArMzU1OSw3IEBACiAJCSAqLwogCQlib25kX2FsYl9kZWluaXRpYWxpemUoYm9uZCk7CiAJfQorCWJvbmQtPnJlY3ZfcHJvYmUgPSBOVUxMOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00MTA1LDEwICszOTgzLDYgQEAKIAlpbnQgaSwgc2xhdmVfbm8sIHJlcyA9IDE7CiAJc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTsKIAotCXJlYWRfbG9jaygmYm9uZC0+bG9jayk7Ci0KLQlpZiAoIUJPTkRfSVNfT0soYm9uZCkpCi0JCWdvdG8gb3V0OwogCS8qCiAJICogU3RhcnQgd2l0aCB0aGUgY3Vycl9hY3RpdmVfc2xhdmUgdGhhdCBqb2luZWQgdGhlIGJvbmQgYXMgdGhlCiAJICogZGVmYXVsdCBmb3Igc2VuZGluZyBJR01QIHRyYWZmaWMuICBGb3IgZmFpbG92ZXIgcHVycG9zZXMgb25lCkBAIC00MTU1LDcgKzQwMjksNyBAQAogCQkvKiBubyBzdWl0YWJsZSBpbnRlcmZhY2UsIGZyYW1lIG5vdCBzZW50ICovCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAl9Ci0JcmVhZF91bmxvY2soJmJvbmQtPmxvY2spOworCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIApAQCAtNDE2OSwyNCArNDA0MywxOCBAQAogCXN0cnVjdCBib25kaW5nICpib25kID0gbmV0ZGV2X3ByaXYoYm9uZF9kZXYpOwogCWludCByZXMgPSAxOwogCi0JcmVhZF9sb2NrKCZib25kLT5sb2NrKTsKIAlyZWFkX2xvY2soJmJvbmQtPmN1cnJfc2xhdmVfbG9jayk7CiAKLQlpZiAoIUJPTkRfSVNfT0soYm9uZCkpCi0JCWdvdG8gb3V0OworCWlmIChib25kLT5jdXJyX2FjdGl2ZV9zbGF2ZSkKKwkJcmVzID0gYm9uZF9kZXZfcXVldWVfeG1pdChib25kLCBza2IsCisJCQlib25kLT5jdXJyX2FjdGl2ZV9zbGF2ZS0+ZGV2KTsKIAotCWlmICghYm9uZC0+Y3Vycl9hY3RpdmVfc2xhdmUpCi0JCWdvdG8gb3V0OwotCi0JcmVzID0gYm9uZF9kZXZfcXVldWVfeG1pdChib25kLCBza2IsIGJvbmQtPmN1cnJfYWN0aXZlX3NsYXZlLT5kZXYpOwotCi1vdXQ6CiAJaWYgKHJlcykKIAkJLyogbm8gc3VpdGFibGUgaW50ZXJmYWNlLCBmcmFtZSBub3Qgc2VudCAqLwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKIAlyZWFkX3VubG9jaygmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKTsKLQlyZWFkX3VubG9jaygmYm9uZC0+bG9jayk7CisKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCkBAIC00MjAzLDExICs0MDcxLDYgQEAKIAlpbnQgaTsKIAlpbnQgcmVzID0gMTsKIAotCXJlYWRfbG9jaygmYm9uZC0+bG9jayk7Ci0KLQlpZiAoIUJPTkRfSVNfT0soYm9uZCkpCi0JCWdvdG8gb3V0OwotCiAJc2xhdmVfbm8gPSBib25kLT54bWl0X2hhc2hfcG9saWN5KHNrYiwgYm9uZC0+c2xhdmVfY250KTsKIAogCWJvbmRfZm9yX2VhY2hfc2xhdmUoYm9uZCwgc2xhdmUsIGkpIHsKQEAgLTQyMjcsMTIgKzQwOTAsMTEgQEAKIAkJfQogCX0KIAotb3V0OgogCWlmIChyZXMpIHsKIAkJLyogbm8gc3VpdGFibGUgaW50ZXJmYWNlLCBmcmFtZSBub3Qgc2VudCAqLwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJfQotCXJlYWRfdW5sb2NrKCZib25kLT5sb2NrKTsKKwogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKQEAgLTQyNDcsMTEgKzQxMDksNiBAQAogCWludCBpOwogCWludCByZXMgPSAxOwogCi0JcmVhZF9sb2NrKCZib25kLT5sb2NrKTsKLQotCWlmICghQk9ORF9JU19PSyhib25kKSkKLQkJZ290byBvdXQ7Ci0KIAlyZWFkX2xvY2soJmJvbmQtPmN1cnJfc2xhdmVfbG9jayk7CiAJc3RhcnRfYXQgPSBib25kLT5jdXJyX2FjdGl2ZV9zbGF2ZTsKIAlyZWFkX3VubG9jaygmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKTsKQEAgLTQyOTAsNyArNDE0Nyw2IEBACiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAogCS8qIGZyYW1lIHNlbnQgdG8gYWxsIHN1aXRhYmxlIGludGVyZmFjZXMgKi8KLQlyZWFkX3VubG9jaygmYm9uZC0+bG9jayk7CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIApAQCAtNDMyMiwxMCArNDE3OCw4IEBACiAJc3RydWN0IHNsYXZlICpzbGF2ZSA9IE5VTEw7CiAJc3RydWN0IHNsYXZlICpjaGVja19zbGF2ZTsKIAotCXJlYWRfbG9jaygmYm9uZC0+bG9jayk7Ci0KLQlpZiAoIUJPTkRfSVNfT0soYm9uZCkgfHwgIXNrYi0+cXVldWVfbWFwcGluZykKLQkJZ290byBvdXQ7CisJaWYgKCFza2ItPnF1ZXVlX21hcHBpbmcpCisJCXJldHVybiAxOwogCiAJLyogRmluZCBvdXQgaWYgYW55IHNsYXZlcyBoYXZlIHRoZSBzYW1lIG1hcHBpbmcgYXMgdGhpcyBza2IuICovCiAJYm9uZF9mb3JfZWFjaF9zbGF2ZShib25kLCBjaGVja19zbGF2ZSwgaSkgewpAQCAtNDM0MSw4ICs0MTk1LDYgQEAKIAkJcmVzID0gYm9uZF9kZXZfcXVldWVfeG1pdChib25kLCBza2IsIHNsYXZlLT5kZXYpOwogCX0KIAotb3V0OgotCXJlYWRfdW5sb2NrKCZib25kLT5sb2NrKTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC00MzU3LDI0ICs0MjA5LDE3IEBACiAJdTE2IHR4cSA9IHNrYl9yeF9xdWV1ZV9yZWNvcmRlZChza2IpID8gc2tiX2dldF9yeF9xdWV1ZShza2IpIDogMDsKIAogCWlmICh1bmxpa2VseSh0eHEgPj0gZGV2LT5yZWFsX251bV90eF9xdWV1ZXMpKSB7Ci0JCWRvCisJCWRvIHsKIAkJCXR4cSAtPSBkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlczsKLQkJd2hpbGUgKHR4cSA+PSBkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlcyk7CisJCX0gd2hpbGUgKHR4cSA+PSBkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlcyk7CiAJfQogCXJldHVybiB0eHE7CiB9CiAKLXN0YXRpYyBuZXRkZXZfdHhfdCBib25kX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBfX2JvbmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBib25kaW5nICpib25kID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCS8qCi0JICogSWYgd2UgcmlzayBkZWFkbG9jayBmcm9tIHRyYW5zbWl0dGluZyB0aGlzIGluIHRoZQotCSAqIG5ldHBvbGwgcGF0aCwgdGVsbCBuZXRwb2xsIHRvIHF1ZXVlIHRoZSBmcmFtZSBmb3IgbGF0ZXIgdHgKLQkgKi8KLQlpZiAoaXNfbmV0cG9sbF90eF9ibG9ja2VkKGRldikpCi0JCXJldHVybiBORVRERVZfVFhfQlVTWTsKLQogCWlmIChUWF9RVUVVRV9PVkVSUklERShib25kLT5wYXJhbXMubW9kZSkpIHsKIAkJaWYgKCFib25kX3NsYXZlX292ZXJyaWRlKGJvbmQsIHNrYikpCiAJCQlyZXR1cm4gTkVUREVWX1RYX09LOwpAQCAtNDQwNCw2ICs0MjQ5LDI5IEBACiAJfQogfQogCitzdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSBuZXRkZXZfcHJpdihkZXYpOworCW5ldGRldl90eF90IHJldCA9IE5FVERFVl9UWF9PSzsKKworCS8qCisJICogSWYgd2UgcmlzayBkZWFkbG9jayBmcm9tIHRyYW5zbWl0dGluZyB0aGlzIGluIHRoZQorCSAqIG5ldHBvbGwgcGF0aCwgdGVsbCBuZXRwb2xsIHRvIHF1ZXVlIHRoZSBmcmFtZSBmb3IgbGF0ZXIgdHgKKwkgKi8KKwlpZiAoaXNfbmV0cG9sbF90eF9ibG9ja2VkKGRldikpCisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKworCXJlYWRfbG9jaygmYm9uZC0+bG9jayk7CisKKwlpZiAoYm9uZC0+c2xhdmVfY250KQorCQlyZXQgPSBfX2JvbmRfc3RhcnRfeG1pdChza2IsIGRldik7CisJZWxzZQorCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisKKwlyZWFkX3VubG9jaygmYm9uZC0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQogCiAvKgogICogc2V0IGJvbmQgbW9kZSBzcGVjaWZpYyBuZXQgZGV2aWNlIG9wZXJhdGlvbnMKQEAgLTQ0NDgsMTEgKzQzMTYsNiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBib25kX2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwkJPSBib25kX2V0aHRvb2xfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCi0JLmdldF90eF9jc3VtCQk9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCi0JLmdldF9zZwkJCT0gZXRodG9vbF9vcF9nZXRfc2csCi0JLmdldF90c28JCT0gZXRodG9vbF9vcF9nZXRfdHNvLAotCS5nZXRfdWZvCQk9IGV0aHRvb2xfb3BfZ2V0X3VmbywKLQkuZ2V0X2ZsYWdzCQk9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBib25kX25ldGRldl9vcHMgPSB7CkBAIC00NDc4LDYgKzQzNDEsNyBAQAogI2VuZGlmCiAJLm5kb19hZGRfc2xhdmUJCT0gYm9uZF9lbnNsYXZlLAogCS5uZG9fZGVsX3NsYXZlCQk9IGJvbmRfcmVsZWFzZSwKKwkubmRvX2ZpeF9mZWF0dXJlcwk9IGJvbmRfZml4X2ZlYXR1cmVzLAogfTsKIAogc3RhdGljIHZvaWQgYm9uZF9kZXN0cnVjdG9yKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldikKQEAgLTQ1MzMsMTQgKzQzOTcsMTQgQEAKIAkgKiB3aGVuIHRoZXJlIGFyZSBzbGF2ZXMgdGhhdCBhcmUgbm90IGh3IGFjY2VsCiAJICogY2FwYWJsZQogCSAqLwotCWJvbmRfZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9IV19WTEFOX1RYIHwKLQkJCSAgICAgICBORVRJRl9GX0hXX1ZMQU5fUlggfAotCQkJICAgICAgIE5FVElGX0ZfSFdfVkxBTl9GSUxURVIpOwogCi0JLyogQnkgZGVmYXVsdCwgd2UgZW5hYmxlIEdSTyBvbiBib25kaW5nIGRldmljZXMuCi0JICogQWN0dWFsIHN1cHBvcnQgcmVxdWlyZXMgbG93bGV2ZWwgZHJpdmVycyBhcmUgR1JPIHJlYWR5LgotCSAqLwotCWJvbmRfZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0dSTzsKKwlib25kX2Rldi0+aHdfZmVhdHVyZXMgPSBCT05EX1ZMQU5fRkVBVFVSRVMgfAorCQkJCU5FVElGX0ZfSFdfVkxBTl9UWCB8CisJCQkJTkVUSUZfRl9IV19WTEFOX1JYIHwKKwkJCQlORVRJRl9GX0hXX1ZMQU5fRklMVEVSOworCisJYm9uZF9kZXYtPmh3X2ZlYXR1cmVzICY9IH4oTkVUSUZfRl9BTExfQ1NVTSAmIH5ORVRJRl9GX05PX0NTVU0pOworCWJvbmRfZGV2LT5mZWF0dXJlcyB8PSBib25kX2Rldi0+aHdfZmVhdHVyZXM7CiB9CiAKIHN0YXRpYyB2b2lkIGJvbmRfd29ya19jYW5jZWxfYWxsKHN0cnVjdCBib25kaW5nICpib25kKQpAQCAtNDcyNCwxNiArNDU4OCwxMCBAQAogCQl1c2VfY2FycmllciA9IDE7CiAJfQogCi0JaWYgKG51bV9ncmF0X2FycCA8IDAgfHwgbnVtX2dyYXRfYXJwID4gMjU1KSB7Ci0JCXByX3dhcm5pbmcoIldhcm5pbmc6IG51bV9ncmF0X2FycCAoJWQpIG5vdCBpbiByYW5nZSAwLTI1NSBzbyBpdCB3YXMgcmVzZXQgdG8gMVxuIiwKLQkJCSAgIG51bV9ncmF0X2FycCk7Ci0JCW51bV9ncmF0X2FycCA9IDE7Ci0JfQotCi0JaWYgKG51bV91bnNvbF9uYSA8IDAgfHwgbnVtX3Vuc29sX25hID4gMjU1KSB7Ci0JCXByX3dhcm5pbmcoIldhcm5pbmc6IG51bV91bnNvbF9uYSAoJWQpIG5vdCBpbiByYW5nZSAwLTI1NSBzbyBpdCB3YXMgcmVzZXQgdG8gMVxuIiwKLQkJCSAgIG51bV91bnNvbF9uYSk7Ci0JCW51bV91bnNvbF9uYSA9IDE7CisJaWYgKG51bV9wZWVyX25vdGlmIDwgMCB8fCBudW1fcGVlcl9ub3RpZiA+IDI1NSkgeworCQlwcl93YXJuaW5nKCJXYXJuaW5nOiBudW1fZ3JhdF9hcnAvbnVtX3Vuc29sX25hICglZCkgbm90IGluIHJhbmdlIDAtMjU1IHNvIGl0IHdhcyByZXNldCB0byAxXG4iLAorCQkJICAgbnVtX3BlZXJfbm90aWYpOworCQludW1fcGVlcl9ub3RpZiA9IDE7CiAJfQogCiAJLyogcmVzZXQgdmFsdWVzIGZvciA4MDIuM2FkICovCkBAIC00OTI1LDggKzQ3ODMsNyBAQAogCXBhcmFtcy0+bW9kZSA9IGJvbmRfbW9kZTsKIAlwYXJhbXMtPnhtaXRfcG9saWN5ID0geG1pdF9oYXNodHlwZTsKIAlwYXJhbXMtPm1paW1vbiA9IG1paW1vbjsKLQlwYXJhbXMtPm51bV9ncmF0X2FycCA9IG51bV9ncmF0X2FycDsKLQlwYXJhbXMtPm51bV91bnNvbF9uYSA9IG51bV91bnNvbF9uYTsKKwlwYXJhbXMtPm51bV9wZWVyX25vdGlmID0gbnVtX3BlZXJfbm90aWY7CiAJcGFyYW1zLT5hcnBfaW50ZXJ2YWwgPSBhcnBfaW50ZXJ2YWw7CiAJcGFyYW1zLT5hcnBfdmFsaWRhdGUgPSBhcnBfdmFsaWRhdGVfdmFsdWU7CiAJcGFyYW1zLT51cGRlbGF5ID0gdXBkZWxheTsKQEAgLTUwMjUsOCArNDg4Miw5IEBACiAKIAlydG5sX2xvY2soKTsKIAotCWJvbmRfZGV2ID0gYWxsb2NfbmV0ZGV2X21xKHNpemVvZihzdHJ1Y3QgYm9uZGluZyksIG5hbWUgPyBuYW1lIDogIiIsCi0JCQkJYm9uZF9zZXR1cCwgdHhfcXVldWVzKTsKKwlib25kX2RldiA9IGFsbG9jX25ldGRldl9tcShzaXplb2Yoc3RydWN0IGJvbmRpbmcpLAorCQkJCSAgIG5hbWUgPyBuYW1lIDogImJvbmQlZCIsCisJCQkJICAgYm9uZF9zZXR1cCwgdHhfcXVldWVzKTsKIAlpZiAoIWJvbmRfZGV2KSB7CiAJCXByX2VycigiJXM6IGVlayEgY2FuJ3QgYWxsb2MgbmV0ZGV2IVxuIiwgbmFtZSk7CiAJCXJ0bmxfdW5sb2NrKCk7CkBAIC01MDM2LDI2ICs0ODk0LDEwIEBACiAJZGV2X25ldF9zZXQoYm9uZF9kZXYsIG5ldCk7CiAJYm9uZF9kZXYtPnJ0bmxfbGlua19vcHMgPSAmYm9uZF9saW5rX29wczsKIAotCWlmICghbmFtZSkgewotCQlyZXMgPSBkZXZfYWxsb2NfbmFtZShib25kX2RldiwgImJvbmQlZCIpOwotCQlpZiAocmVzIDwgMCkKLQkJCWdvdG8gb3V0OwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIElmIHdlJ3JlIGdpdmVuIGEgbmFtZSB0byByZWdpc3RlcgotCQkgKiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGl0cyBub3QgYWxyZWFkeQotCQkgKiByZWdpc3RlcmVkCi0JCSAqLwotCQlyZXMgPSAtRUVYSVNUOwotCQlpZiAoX19kZXZfZ2V0X2J5X25hbWUobmV0LCBuYW1lKSAhPSBOVUxMKQotCQkJZ290byBvdXQ7Ci0JfQotCiAJcmVzID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKGJvbmRfZGV2KTsKIAogCW5ldGlmX2NhcnJpZXJfb2ZmKGJvbmRfZGV2KTsKIAotb3V0OgogCXJ0bmxfdW5sb2NrKCk7CiAJaWYgKHJlcyA8IDApCiAJCWJvbmRfZGVzdHJ1Y3Rvcihib25kX2Rldik7CkBAIC01MTIxLDcgKzQ5NjMsNiBAQAogCiAJcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZib25kX25ldGRldl9ub3RpZmllcik7CiAJcmVnaXN0ZXJfaW5ldGFkZHJfbm90aWZpZXIoJmJvbmRfaW5ldGFkZHJfbm90aWZpZXIpOwotCWJvbmRfcmVnaXN0ZXJfaXB2Nl9ub3RpZmllcigpOwogb3V0OgogCXJldHVybiByZXM7CiBlcnI6CkBAIC01MTM2LDcgKzQ5NzcsNiBAQAogewogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZib25kX25ldGRldl9ub3RpZmllcik7CiAJdW5yZWdpc3Rlcl9pbmV0YWRkcl9ub3RpZmllcigmYm9uZF9pbmV0YWRkcl9ub3RpZmllcik7Ci0JYm9uZF91bnJlZ2lzdGVyX2lwdjZfbm90aWZpZXIoKTsKIAogCWJvbmRfZGVzdHJveV9zeXNmcygpOwogCWJvbmRfZGVzdHJveV9kZWJ1Z2ZzKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfcHJvY2ZzLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfcHJvY2ZzLmMKaW5kZXggYzMyZmY1NS4uYzk3MzA3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3Byb2Nmcy5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9wcm9jZnMuYwpAQCAtNCw4ICs0LDYgQEAKICNpbmNsdWRlICJib25kaW5nLmgiCiAKIAotZXh0ZXJuIGNvbnN0IGNoYXIgKmJvbmRfbW9kZV9uYW1lKGludCBtb2RlKTsKLQogc3RhdGljIHZvaWQgKmJvbmRfaW5mb19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogCV9fYWNxdWlyZXMoUkNVKQogCV9fYWNxdWlyZXMoJmJvbmQtPmxvY2spCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnMuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jCmluZGV4IGRlODdhZWEuLjQwNTliZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jCkBAIC00MjIsMTEgKzQyMiw2IEBACiAJCWJvbmQtPmRldi0+bmFtZSwgYXJwX3ZhbGlkYXRlX3RibFtuZXdfdmFsdWVdLm1vZGVuYW1lLAogCQluZXdfdmFsdWUpOwogCi0JaWYgKCFib25kLT5wYXJhbXMuYXJwX3ZhbGlkYXRlICYmIG5ld192YWx1ZSkKLQkJYm9uZF9yZWdpc3Rlcl9hcnAoYm9uZCk7Ci0JZWxzZSBpZiAoYm9uZC0+cGFyYW1zLmFycF92YWxpZGF0ZSAmJiAhbmV3X3ZhbHVlKQotCQlib25kX3VucmVnaXN0ZXJfYXJwKGJvbmQpOwotCiAJYm9uZC0+cGFyYW1zLmFycF92YWxpZGF0ZSA9IG5ld192YWx1ZTsKIAogCXJldHVybiBjb3VudDsKQEAgLTg3NCw4MiArODY5LDI4IEBACiAJCSAgIGJvbmRpbmdfc2hvd19hZF9zZWxlY3QsIGJvbmRpbmdfc3RvcmVfYWRfc2VsZWN0KTsKIAogLyoKLSAqIFNob3cgYW5kIHNldCB0aGUgbnVtYmVyIG9mIGdyYXQgQVJQIHRvIHNlbmQgYWZ0ZXIgYSBmYWlsb3ZlciBldmVudC4KKyAqIFNob3cgYW5kIHNldCB0aGUgbnVtYmVyIG9mIHBlZXIgbm90aWZpY2F0aW9ucyB0byBzZW5kIGFmdGVyIGEgZmFpbG92ZXIgZXZlbnQuCiAgKi8KLXN0YXRpYyBzc2l6ZV90IGJvbmRpbmdfc2hvd19uX2dyYXRfYXJwKHN0cnVjdCBkZXZpY2UgKmQsCi0JCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgYm9uZGluZ19zaG93X251bV9wZWVyX25vdGlmKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgICBjaGFyICpidWYpCiB7CiAJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSB0b19ib25kKGQpOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGJvbmQtPnBhcmFtcy5udW1fZ3JhdF9hcnApOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBib25kLT5wYXJhbXMubnVtX3BlZXJfbm90aWYpOwogfQogCi1zdGF0aWMgc3NpemVfdCBib25kaW5nX3N0b3JlX25fZ3JhdF9hcnAoc3RydWN0IGRldmljZSAqZCwKLQkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3QgYm9uZGluZ19zdG9yZV9udW1fcGVlcl9ub3RpZihzdHJ1Y3QgZGV2aWNlICpkLAorCQkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlpbnQgbmV3X3ZhbHVlLCByZXQgPSBjb3VudDsKIAlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IHRvX2JvbmQoZCk7Ci0KLQlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJm5ld192YWx1ZSkgIT0gMSkgewotCQlwcl9lcnIoIiVzOiBubyBudW1fZ3JhdF9hcnAgdmFsdWUgc3BlY2lmaWVkLlxuIiwKLQkJICAgICAgIGJvbmQtPmRldi0+bmFtZSk7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQlpZiAobmV3X3ZhbHVlIDwgMCB8fCBuZXdfdmFsdWUgPiAyNTUpIHsKLQkJcHJfZXJyKCIlczogSW52YWxpZCBudW1fZ3JhdF9hcnAgdmFsdWUgJWQgbm90IGluIHJhbmdlIDAtMjU1OyByZWplY3RlZC5cbiIsCi0JCSAgICAgICBib25kLT5kZXYtPm5hbWUsIG5ld192YWx1ZSk7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0gZWxzZSB7Ci0JCWJvbmQtPnBhcmFtcy5udW1fZ3JhdF9hcnAgPSBuZXdfdmFsdWU7Ci0JfQotb3V0OgotCXJldHVybiByZXQ7CisJaW50IGVyciA9IGtzdHJ0b3U4KGJ1ZiwgMTAsICZib25kLT5wYXJhbXMubnVtX3BlZXJfbm90aWYpOworCXJldHVybiBlcnIgPyBlcnIgOiBjb3VudDsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihudW1fZ3JhdF9hcnAsIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICBib25kaW5nX3Nob3dfbl9ncmF0X2FycCwgYm9uZGluZ19zdG9yZV9uX2dyYXRfYXJwKTsKLQotLyoKLSAqIFNob3cgYW5kIHNldCB0aGUgbnVtYmVyIG9mIHVuc29saWNpdGVkIE5BJ3MgdG8gc2VuZCBhZnRlciBhIGZhaWxvdmVyIGV2ZW50LgotICovCi1zdGF0aWMgc3NpemVfdCBib25kaW5nX3Nob3dfbl91bnNvbF9uYShzdHJ1Y3QgZGV2aWNlICpkLAotCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkgICAgICAgY2hhciAqYnVmKQotewotCXN0cnVjdCBib25kaW5nICpib25kID0gdG9fYm9uZChkKTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBib25kLT5wYXJhbXMubnVtX3Vuc29sX25hKTsKLX0KLQotc3RhdGljIHNzaXplX3QgYm9uZGluZ19zdG9yZV9uX3Vuc29sX25hKHN0cnVjdCBkZXZpY2UgKmQsCi0JCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlpbnQgbmV3X3ZhbHVlLCByZXQgPSBjb3VudDsKLQlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IHRvX2JvbmQoZCk7Ci0KLQlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJm5ld192YWx1ZSkgIT0gMSkgewotCQlwcl9lcnIoIiVzOiBubyBudW1fdW5zb2xfbmEgdmFsdWUgc3BlY2lmaWVkLlxuIiwKLQkJICAgICAgIGJvbmQtPmRldi0+bmFtZSk7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChuZXdfdmFsdWUgPCAwIHx8IG5ld192YWx1ZSA+IDI1NSkgewotCQlwcl9lcnIoIiVzOiBJbnZhbGlkIG51bV91bnNvbF9uYSB2YWx1ZSAlZCBub3QgaW4gcmFuZ2UgMC0yNTU7IHJlamVjdGVkLlxuIiwKLQkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwgbmV3X3ZhbHVlKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfSBlbHNlCi0JCWJvbmQtPnBhcmFtcy5udW1fdW5zb2xfbmEgPSBuZXdfdmFsdWU7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KKwkJICAgYm9uZGluZ19zaG93X251bV9wZWVyX25vdGlmLCBib25kaW5nX3N0b3JlX251bV9wZWVyX25vdGlmKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihudW1fdW5zb2xfbmEsIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICBib25kaW5nX3Nob3dfbl91bnNvbF9uYSwgYm9uZGluZ19zdG9yZV9uX3Vuc29sX25hKTsKKwkJICAgYm9uZGluZ19zaG93X251bV9wZWVyX25vdGlmLCBib25kaW5nX3N0b3JlX251bV9wZWVyX25vdGlmKTsKIAogLyoKICAqIFNob3cgYW5kIHNldCB0aGUgTUlJIG1vbml0b3IgaW50ZXJ2YWwuICBUaGVyZSBhcmUgdHdvIHRyaWNreSBiaXRzCkBAIC0xMDAxLDcgKzk0Miw2IEBACiAJCQkJYm9uZC0+ZGV2LT5uYW1lKTsKIAkJCWJvbmQtPnBhcmFtcy5hcnBfaW50ZXJ2YWwgPSAwOwogCQkJaWYgKGJvbmQtPnBhcmFtcy5hcnBfdmFsaWRhdGUpIHsKLQkJCQlib25kX3VucmVnaXN0ZXJfYXJwKGJvbmQpOwogCQkJCWJvbmQtPnBhcmFtcy5hcnBfdmFsaWRhdGUgPQogCQkJCQlCT05EX0FSUF9WQUxJREFURV9OT05FOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmggYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRpbmcuaAppbmRleCA5MDczNmNiLi5lYTFkMDA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRpbmcuaAorKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRpbmcuaApAQCAtMjQsOCArMjQsOCBAQAogI2luY2x1ZGUgImJvbmRfM2FkLmgiCiAjaW5jbHVkZSAiYm9uZF9hbGIuaCIKIAotI2RlZmluZSBEUlZfVkVSU0lPTgkiMy43LjAiCi0jZGVmaW5lIERSVl9SRUxEQVRFCSJKdW5lIDIsIDIwMTAiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIzLjcuMSIKKyNkZWZpbmUgRFJWX1JFTERBVEUJIkFwcmlsIDI3LCAyMDExIgogI2RlZmluZSBEUlZfTkFNRQkiYm9uZGluZyIKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCSJFdGhlcm5ldCBDaGFubmVsIEJvbmRpbmcgRHJpdmVyIgogCkBAIC0zOSwxNiArMzksNiBAQAogCSAgICAgICBuZXRpZl9jYXJyaWVyX29rKGRldikpCiAKIC8qCi0gKiBDaGVja3Mgd2hldGhlciBib25kIGlzIHJlYWR5IGZvciB0cmFuc21pdC4KLSAqCi0gKiBDYWxsZXIgbXVzdCBob2xkIGJvbmQtPmxvY2sKLSAqLwotI2RlZmluZSBCT05EX0lTX09LKGJvbmQpCQkJICAgICBcCi0JCSAgICgoKGJvbmQpLT5kZXYtPmZsYWdzICYgSUZGX1VQKSAmJiBcCi0JCSAgICBuZXRpZl9ydW5uaW5nKChib25kKS0+ZGV2KQkgICYmIFwKLQkJICAgICgoYm9uZCktPnNsYXZlX2NudCA+IDApKQotCi0vKgogICogQ2hlY2tzIHdoZXRoZXIgc2xhdmUgaXMgcmVhZHkgZm9yIHRyYW5zbWl0LgogICovCiAjZGVmaW5lIFNMQVZFX0lTX09LKHNsYXZlKQkJCSAgICAgICAgXApAQCAtMTQ5LDggKzEzOSw3IEBACiAJaW50IG1vZGU7CiAJaW50IHhtaXRfcG9saWN5OwogCWludCBtaWltb247Ci0JaW50IG51bV9ncmF0X2FycDsKLQlpbnQgbnVtX3Vuc29sX25hOworCXU4IG51bV9wZWVyX25vdGlmOwogCWludCBhcnBfaW50ZXJ2YWw7CiAJaW50IGFycF92YWxpZGF0ZTsKIAlpbnQgdXNlX2NhcnJpZXI7CkBAIC0xNzgsOSArMTY3LDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHZsYW5fbGlzdDsKIAlfX2JlMzIgdmxhbl9pcDsKIAl1bnNpZ25lZCBzaG9ydCB2bGFuX2lkOwotI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQotCXN0cnVjdCBpbjZfYWRkciB2bGFuX2lwdjY7Ci0jZW5kaWYKIH07CiAKIHN0cnVjdCBzbGF2ZSB7CkBAIC0xOTYsMTIgKzE4MiwxMiBAQAogCXU4ICAgICBiYWNrdXA6MSwgICAvKiBpbmRpY2F0ZXMgYmFja3VwIHNsYXZlLiBWYWx1ZSBjb3JyZXNwb25kcyB3aXRoCiAJCQkgICAgICBCT05EX1NUQVRFX0FDVElWRSBhbmQgQk9ORF9TVEFURV9CQUNLVVAgKi8KIAkgICAgICAgaW5hY3RpdmU6MTsgLyogaW5kaWNhdGVzIGluYWN0aXZlIHNsYXZlICovCisJdTggICAgIGR1cGxleDsKIAl1MzIgICAgb3JpZ2luYWxfbXR1OwogCXUzMiAgICBsaW5rX2ZhaWx1cmVfY291bnQ7Ci0JdTggICAgIHBlcm1faHdhZGRyW0VUSF9BTEVOXTsKLQl1MTYgICAgc3BlZWQ7Ci0JdTggICAgIGR1cGxleDsKKwl1MzIgICAgc3BlZWQ7CiAJdTE2ICAgIHF1ZXVlX2lkOworCXU4ICAgICBwZXJtX2h3YWRkcltFVEhfQUxFTl07CiAJc3RydWN0IGFkX3NsYXZlX2luZm8gYWRfaW5mbzsgLyogSFVHRSAtIGJldHRlciB0byBkeW5hbWljYWxseSBhbGxvYyAqLwogCXN0cnVjdCB0bGJfc2xhdmVfaW5mbyB0bGJfaW5mbzsKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgpAQCAtMjMxLDExICsyMTcsMTIgQEAKIAlzdHJ1Y3QgICBzbGF2ZSAqcHJpbWFyeV9zbGF2ZTsKIAlib29sICAgICBmb3JjZV9wcmltYXJ5OwogCXMzMiAgICAgIHNsYXZlX2NudDsgLyogbmV2ZXIgY2hhbmdlIHRoaXMgdmFsdWUgb3V0c2lkZSB0aGUgYXR0YWNoL2RldGFjaCB3cmFwcGVycyAqLworCXZvaWQgICAgICgqcmVjdl9wcm9iZSkoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IGJvbmRpbmcgKiwKKwkJCSAgICAgICBzdHJ1Y3Qgc2xhdmUgKik7CiAJcndsb2NrX3QgbG9jazsKIAlyd2xvY2tfdCBjdXJyX3NsYXZlX2xvY2s7CiAJczggICAgICAga2lsbF90aW1lcnM7Ci0JczgJIHNlbmRfZ3JhdF9hcnA7Ci0JczgJIHNlbmRfdW5zb2xfbmE7CisJdTgJIHNlbmRfcGVlcl9ub3RpZjsKIAlzOAkgc2V0dXBfYnlfc2xhdmU7CiAJczggICAgICAgaWdtcF9yZXRyYW5zOwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCkBAIC0yNjAsOSArMjQ3LDYgQEAKIAlzdHJ1Y3QgICBkZWxheWVkX3dvcmsgYWxiX3dvcms7CiAJc3RydWN0ICAgZGVsYXllZF93b3JrIGFkX3dvcms7CiAJc3RydWN0ICAgZGVsYXllZF93b3JrIG1jYXN0X3dvcms7Ci0jaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCi0Jc3RydWN0ICAgaW42X2FkZHIgbWFzdGVyX2lwdjY7Ci0jZW5kaWYKICNpZmRlZiBDT05GSUdfREVCVUdfRlMKIAkvKiBkZWJ1Z2dpbmcgc3Vwb3J0IHZpYSBkZWJ1Z2ZzICovCiAJc3RydWN0CSBkZW50cnkgKmRlYnVnX2RpcjsKQEAgLTQwOSwxMyArMzkzLDEyIEBACiBpbnQgYm9uZF9wYXJzZV9wYXJtKGNvbnN0IGNoYXIgKm1vZGVfYXJnLCBjb25zdCBzdHJ1Y3QgYm9uZF9wYXJtX3RibCAqdGJsKTsKIHZvaWQgYm9uZF9zZWxlY3RfYWN0aXZlX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKTsKIHZvaWQgYm9uZF9jaGFuZ2VfYWN0aXZlX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKm5ld19hY3RpdmUpOwotdm9pZCBib25kX3JlZ2lzdGVyX2FycChzdHJ1Y3QgYm9uZGluZyAqKTsKLXZvaWQgYm9uZF91bnJlZ2lzdGVyX2FycChzdHJ1Y3QgYm9uZGluZyAqKTsKIHZvaWQgYm9uZF9jcmVhdGVfZGVidWdmcyh2b2lkKTsKIHZvaWQgYm9uZF9kZXN0cm95X2RlYnVnZnModm9pZCk7CiB2b2lkIGJvbmRfZGVidWdfcmVnaXN0ZXIoc3RydWN0IGJvbmRpbmcgKmJvbmQpOwogdm9pZCBib25kX2RlYnVnX3VucmVnaXN0ZXIoc3RydWN0IGJvbmRpbmcgKmJvbmQpOwogdm9pZCBib25kX2RlYnVnX3JlcmVnaXN0ZXIoc3RydWN0IGJvbmRpbmcgKmJvbmQpOworY29uc3QgY2hhciAqYm9uZF9tb2RlX25hbWUoaW50IG1vZGUpOwogCiBzdHJ1Y3QgYm9uZF9uZXQgewogCXN0cnVjdCBuZXQgKgkJbmV0OwkvKiBBc3NvY2lhdGVkIG5ldHdvcmsgbmFtZXNwYWNlICovCkBAIC00NTksMjMgKzQ0Miw0IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGJvbmRfcGFybV90YmwgcHJpX3Jlc2VsZWN0X3RibFtdOwogZXh0ZXJuIHN0cnVjdCBib25kX3Bhcm1fdGJsIGFkX3NlbGVjdF90YmxbXTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQotdm9pZCBib25kX3NlbmRfdW5zb2xpY2l0ZWRfbmEoc3RydWN0IGJvbmRpbmcgKmJvbmQpOwotdm9pZCBib25kX3JlZ2lzdGVyX2lwdjZfbm90aWZpZXIodm9pZCk7Ci12b2lkIGJvbmRfdW5yZWdpc3Rlcl9pcHY2X25vdGlmaWVyKHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBib25kX3NlbmRfdW5zb2xpY2l0ZWRfbmEoc3RydWN0IGJvbmRpbmcgKmJvbmQpCi17Ci0JcmV0dXJuOwotfQotc3RhdGljIGlubGluZSB2b2lkIGJvbmRfcmVnaXN0ZXJfaXB2Nl9ub3RpZmllcih2b2lkKQotewotCXJldHVybjsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBib25kX3VucmVnaXN0ZXJfaXB2Nl9ub3RpZmllcih2b2lkKQotewotCXJldHVybjsKLX0KLSNlbmRpZgotCiAjZW5kaWYgLyogX0xJTlVYX0JPTkRJTkdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL21zY2FuL21wYzV4eHhfY2FuLmMgYi9kcml2ZXJzL25ldC9jYW4vbXNjYW4vbXBjNXh4eF9jYW4uYwppbmRleCBiZDFkODExLi41ZmVkYzMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vbXNjYW4vbXBjNXh4eF9jYW4uYworKysgYi9kcml2ZXJzL25ldC9jYW4vbXNjYW4vbXBjNXh4eF9jYW4uYwpAQCAtMjQ3LDggKzI0NywxMCBAQAogfQogI2VuZGlmIC8qIENPTkZJR19QUENfTVBDNTEyeCAqLwogCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBtcGM1eHh4X2Nhbl90YWJsZVtdOwogc3RhdGljIGludCBfX2RldmluaXQgbXBjNXh4eF9jYW5fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpCiB7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CiAJc3RydWN0IG1wYzV4eHhfY2FuX2RhdGEgKmRhdGE7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mZGV2LT5kZXYub2Zfbm9kZTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpAQCAtMjU4LDkgKzI2MCwxMCBAQAogCWludCBpcnEsIG1zY2FuX2Nsa3NyYyA9IDA7CiAJaW50IGVyciA9IC1FTk9NRU07CiAKLQlpZiAoIW9mZGV2LT5kZXYub2ZfbWF0Y2gpCisJbWF0Y2ggPSBvZl9tYXRjaF9kZXZpY2UobXBjNXh4eF9jYW5fdGFibGUsICZvZmRldi0+ZGV2KTsKKwlpZiAoIW1hdGNoKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlkYXRhID0gKHN0cnVjdCBtcGM1eHh4X2Nhbl9kYXRhICopb2ZkZXYtPmRldi5vZl9tYXRjaC0+ZGF0YTsKKwlkYXRhID0gbWF0Y2gtPmRhdGE7CiAKIAliYXNlID0gb2ZfaW9tYXAobnAsIDApOwogCWlmICghYmFzZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvc2phMTAwMC5jIGIvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvc2phMTAwMC5jCmluZGV4IGEzNThlYTkuLmY1MDFiYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL3NqYTEwMDAuYworKysgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9zamExMDAwLmMKQEAgLTM0NiwxMCArMzQ2LDEwIEBACiAJCSAgICB8IChwcml2LT5yZWFkX3JlZyhwcml2LCBSRUdfSUQyKSA+PiA1KTsKIAl9CiAKKwljZi0+Y2FuX2RsYyA9IGdldF9jYW5fZGxjKGZpICYgMHgwRik7CiAJaWYgKGZpICYgRklfUlRSKSB7CiAJCWlkIHw9IENBTl9SVFJfRkxBRzsKIAl9IGVsc2UgewotCQljZi0+Y2FuX2RsYyA9IGdldF9jYW5fZGxjKGZpICYgMHgwRik7CiAJCWZvciAoaSA9IDA7IGkgPCBjZi0+Y2FuX2RsYzsgaSsrKQogCQkJY2YtPmRhdGFbaV0gPSBwcml2LT5yZWFkX3JlZyhwcml2LCBkcmVnKyspOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zbGNhbi5jIGIvZHJpdmVycy9uZXQvY2FuL3NsY2FuLmMKaW5kZXggYjQyMzk2NS4uMWI0OWRmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3NsY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NsY2FuLmMKQEAgLTU4Myw3ICs1ODMsOSBAQAogCS8qIERvbmUuICBXZSBoYXZlIGxpbmtlZCB0aGUgVFRZIGxpbmUgdG8gYSBjaGFubmVsLiAqLwogCXJ0bmxfdW5sb2NrKCk7CiAJdHR5LT5yZWNlaXZlX3Jvb20gPSA2NTUzNjsJLyogV2UgZG9uJ3QgZmxvdyBjb250cm9sICovCi0JcmV0dXJuIHNsLT5kZXYtPmJhc2VfYWRkcjsKKworCS8qIFRUWSBsYXllciBleHBlY3RzIDAgb24gc3VjY2VzcyAqLworCXJldHVybiAwOwogCiBlcnJfZnJlZV9jaGFuOgogCXNsLT50dHkgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2Fzc2luaS5jIGIvZHJpdmVycy9uZXQvY2Fzc2luaS5jCmluZGV4IDE0M2EyOGMuLjIyY2UwM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYworKysgYi9kcml2ZXJzL25ldC9jYXNzaW5pLmMKQEAgLTcwOSwxMCArNzA5LDExIEBACiAJaWYgKGVwLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKQogCQljcC0+bGlua19jbnRsID0gQk1DUl9BTkVOQUJMRTsKIAllbHNlIHsKKwkJdTMyIHNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoZXApOwogCQljcC0+bGlua19jbnRsID0gMDsKLQkJaWYgKGVwLT5zcGVlZCA9PSBTUEVFRF8xMDApCisJCWlmIChzcGVlZCA9PSBTUEVFRF8xMDApCiAJCQljcC0+bGlua19jbnRsIHw9IEJNQ1JfU1BFRUQxMDA7Ci0JCWVsc2UgaWYgKGVwLT5zcGVlZCA9PSBTUEVFRF8xMDAwKQorCQllbHNlIGlmIChzcGVlZCA9PSBTUEVFRF8xMDAwKQogCQkJY3AtPmxpbmtfY250bCB8PSBDQVNfQk1DUl9TUEVFRDEwMDA7CiAJCWlmIChlcC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQogCQkJY3AtPmxpbmtfY250bCB8PSBCTUNSX0ZVTExEUExYOwpAQCAtNDYwNSwxOCArNDYwNiwxNyBAQAogCWlmIChibWNyICYgQk1DUl9BTkVOQUJMRSkgewogCQljbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfQXV0b25lZzsKIAkJY21kLT5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7Ci0JCWNtZC0+c3BlZWQgPSAoKHNwZWVkID09IDEwKSA/Ci0JCQkgICAgICBTUEVFRF8xMCA6Ci0JCQkgICAgICAoKHNwZWVkID09IDEwMDApID8KLQkJCSAgICAgICBTUEVFRF8xMDAwIDogU1BFRURfMTAwKSk7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsICgoc3BlZWQgPT0gMTApID8KKwkJCQkJICAgIFNQRUVEXzEwIDoKKwkJCQkJICAgICgoc3BlZWQgPT0gMTAwMCkgPworCQkJCQkgICAgIFNQRUVEXzEwMDAgOiBTUEVFRF8xMDApKSk7CiAJCWNtZC0+ZHVwbGV4ID0gZnVsbF9kdXBsZXggPyBEVVBMRVhfRlVMTCA6IERVUExFWF9IQUxGOwogCX0gZWxzZSB7CiAJCWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKLQkJY21kLT5zcGVlZCA9Ci0JCQkoYm1jciAmIENBU19CTUNSX1NQRUVEMTAwMCkgPwotCQkJU1BFRURfMTAwMCA6Ci0JCQkoKGJtY3IgJiBCTUNSX1NQRUVEMTAwKSA/IFNQRUVEXzEwMDoKLQkJCSBTUEVFRF8xMCk7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsICgoYm1jciAmIENBU19CTUNSX1NQRUVEMTAwMCkgPworCQkJCQkgICAgU1BFRURfMTAwMCA6CisJCQkJCSAgICAoKGJtY3IgJiBCTUNSX1NQRUVEMTAwKSA/CisJCQkJCSAgICAgU1BFRURfMTAwIDogU1BFRURfMTApKSk7CiAJCWNtZC0+ZHVwbGV4ID0KIAkJCShibWNyICYgQk1DUl9GVUxMRFBMWCkgPwogCQkJRFVQTEVYX0ZVTEwgOiBEVVBMRVhfSEFMRjsKQEAgLTQ2MzMsMTQgKzQ2MzMsMTQgQEAKIAkJICogc2V0dGluZ3MgdGhhdCB3ZSBjb25maWd1cmVkLgogCQkgKi8KIAkJaWYgKGNwLT5saW5rX2NudGwgJiBCTUNSX0FORU5BQkxFKSB7Ci0JCQljbWQtPnNwZWVkID0gMDsKKwkJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIDApOwogCQkJY21kLT5kdXBsZXggPSAweGZmOwogCQl9IGVsc2UgewotCQkJY21kLT5zcGVlZCA9IFNQRUVEXzEwOworCQkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgU1BFRURfMTApOwogCQkJaWYgKGNwLT5saW5rX2NudGwgJiBCTUNSX1NQRUVEMTAwKSB7Ci0JCQkJY21kLT5zcGVlZCA9IFNQRUVEXzEwMDsKKwkJCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBTUEVFRF8xMDApOwogCQkJfSBlbHNlIGlmIChjcC0+bGlua19jbnRsICYgQ0FTX0JNQ1JfU1BFRUQxMDAwKSB7Ci0JCQkJY21kLT5zcGVlZCA9IFNQRUVEXzEwMDA7CisJCQkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgU1BFRURfMTAwMCk7CiAJCQl9CiAJCQljbWQtPmR1cGxleCA9IChjcC0+bGlua19jbnRsICYgQk1DUl9GVUxMRFBMWCk/CiAJCQkJRFVQTEVYX0ZVTEwgOiBEVVBMRVhfSEFMRjsKQEAgLTQ2NTMsNiArNDY1Myw3IEBACiB7CiAJc3RydWN0IGNhcyAqY3AgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoY21kKTsKIAogCS8qIFZlcmlmeSB0aGUgc2V0dGluZ3Mgd2UgY2FyZSBhYm91dC4gKi8KIAlpZiAoY21kLT5hdXRvbmVnICE9IEFVVE9ORUdfRU5BQkxFICYmCkBAIC00NjYwLDkgKzQ2NjEsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19ESVNBQkxFICYmCi0JICAgICgoY21kLT5zcGVlZCAhPSBTUEVFRF8xMDAwICYmCi0JICAgICAgY21kLT5zcGVlZCAhPSBTUEVFRF8xMDAgJiYKLQkgICAgICBjbWQtPnNwZWVkICE9IFNQRUVEXzEwKSB8fAorCSAgICAoKHNwZWVkICE9IFNQRUVEXzEwMDAgJiYKKwkgICAgICBzcGVlZCAhPSBTUEVFRF8xMDAgJiYKKwkgICAgICBzcGVlZCAhPSBTUEVFRF8xMCkgfHwKIAkgICAgIChjbWQtPmR1cGxleCAhPSBEVVBMRVhfSEFMRiAmJgogCSAgICAgIGNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKSkpCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vY29tbW9uLmgKaW5kZXggMDkyZjMxYS4uYzI2ZDg2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby9jb21tb24uaAorKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL2NvbW1vbi5oCkBAIC0yNjQsMTEgKzI2NCw2IEBACiAKIGVudW0geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGFwdGVyIGZsYWdzICovCiAJRlVMTF9JTklUX0RPTkUgICAgICAgID0gMSA8PCAwLAotCVRTT19DQVBBQkxFICAgICAgICAgICA9IDEgPDwgMiwKLQlUQ1BfQ1NVTV9DQVBBQkxFICAgICAgPSAxIDw8IDMsCi0JVURQX0NTVU1fQ0FQQUJMRSAgICAgID0gMSA8PCA0LAotCVZMQU5fQUNDRUxfQ0FQQUJMRSAgICA9IDEgPDwgNSwKLQlSWF9DU1VNX0VOQUJMRUQgICAgICAgPSAxIDw8IDYsCiB9OwogCiBzdHJ1Y3QgbWRpb19vcHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL2N4Z2IyLmMgYi9kcml2ZXJzL25ldC9jaGVsc2lvL2N4Z2IyLmMKaW5kZXggMGY3MTMwNC4uYjQyMmQ4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby9jeGdiMi5jCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vY3hnYjIuYwpAQCAtMTkyLDEwICsxOTIsOCBAQAogCiBzdGF0aWMgdm9pZCBlbmFibGVfaHdfY3N1bShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKIHsKLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBUU09fQ0FQQUJMRSkKKwlpZiAoYWRhcHRlci0+cG9ydFswXS5kZXYtPmh3X2ZlYXR1cmVzICYgTkVUSUZfRl9UU08pCiAJCXQxX3RwX3NldF9pcF9jaGVja3N1bV9vZmZsb2FkKGFkYXB0ZXItPnRwLCAxKTsJLyogZm9yIFRTTyBvbmx5ICovCi0JaWYgKGFkYXB0ZXItPmZsYWdzICYgVURQX0NTVU1fQ0FQQUJMRSkKLQkJdDFfdHBfc2V0X3VkcF9jaGVja3N1bV9vZmZsb2FkKGFkYXB0ZXItPnRwLCAxKTsKIAl0MV90cF9zZXRfdGNwX2NoZWNrc3VtX29mZmxvYWQoYWRhcHRlci0+dHAsIDEpOwogfQogCkBAIC01NzksMTAgKzU3NywxMCBAQAogCWNtZC0+YWR2ZXJ0aXNpbmcgPSBwLT5saW5rX2NvbmZpZy5hZHZlcnRpc2luZzsKIAogCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKLQkJY21kLT5zcGVlZCA9IHAtPmxpbmtfY29uZmlnLnNwZWVkOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBwLT5saW5rX2NvbmZpZy5zcGVlZCk7CiAJCWNtZC0+ZHVwbGV4ID0gcC0+bGlua19jb25maWcuZHVwbGV4OwogCX0gZWxzZSB7Ci0JCWNtZC0+c3BlZWQgPSAtMTsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgLTEpOwogCQljbWQtPmR1cGxleCA9IC0xOwogCX0KIApAQCAtNjQwLDExICs2MzgsMTIgQEAKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOyAgICAgICAgICAgICAvKiBjYW4ndCBjaGFuZ2Ugc3BlZWQvZHVwbGV4ICovCiAKIAlpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSkgewotCQlpbnQgY2FwID0gc3BlZWRfZHVwbGV4X3RvX2NhcHMoY21kLT5zcGVlZCwgY21kLT5kdXBsZXgpOworCQl1MzIgc3BlZWQgPSBldGh0b29sX2NtZF9zcGVlZChjbWQpOworCQlpbnQgY2FwID0gc3BlZWRfZHVwbGV4X3RvX2NhcHMoc3BlZWQsIGNtZC0+ZHVwbGV4KTsKIAotCQlpZiAoIShsYy0+c3VwcG9ydGVkICYgY2FwKSB8fCBjbWQtPnNwZWVkID09IFNQRUVEXzEwMDApCisJCWlmICghKGxjLT5zdXBwb3J0ZWQgJiBjYXApIHx8IChzcGVlZCA9PSBTUEVFRF8xMDAwKSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQlsYy0+cmVxdWVzdGVkX3NwZWVkID0gY21kLT5zcGVlZDsKKwkJbGMtPnJlcXVlc3RlZF9zcGVlZCA9IHNwZWVkOwogCQlsYy0+cmVxdWVzdGVkX2R1cGxleCA9IGNtZC0+ZHVwbGV4OwogCQlsYy0+YWR2ZXJ0aXNpbmcgPSAwOwogCX0gZWxzZSB7CkBAIC03MDUsMzMgKzcwNCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MzIgZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGRldi0+bWxfcHJpdjsKLQotCXJldHVybiAoYWRhcHRlci0+ZmxhZ3MgJiBSWF9DU1VNX0VOQUJMRUQpICE9IDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7Ci0KLQlpZiAoZGF0YSkKLQkJYWRhcHRlci0+ZmxhZ3MgfD0gUlhfQ1NVTV9FTkFCTEVEOwotCWVsc2UKLQkJYWRhcHRlci0+ZmxhZ3MgJj0gflJYX0NTVU1fRU5BQkxFRDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiB2YWx1ZSkKLXsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGRldi0+bWxfcHJpdjsKLQotCWlmICghKGFkYXB0ZXItPmZsYWdzICYgVFNPX0NBUEFCTEUpKQotCQlyZXR1cm4gdmFsdWUgPyAtRU9QTk9UU1VQUCA6IDA7Ci0JcmV0dXJuIGV0aHRvb2xfb3Bfc2V0X3RzbyhkZXYsIHZhbHVlKTsKLX0KLQogc3RhdGljIHZvaWQgZ2V0X3NnZV9wYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKmUpCiB7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CkBAIC04MzEsMTcgKzgwMywxMiBAQAogCS5nZXRfZWVwcm9tICAgICAgICA9IGdldF9lZXByb20sCiAJLmdldF9wYXVzZXBhcmFtICAgID0gZ2V0X3BhdXNlcGFyYW0sCiAJLnNldF9wYXVzZXBhcmFtICAgID0gc2V0X3BhdXNlcGFyYW0sCi0JLmdldF9yeF9jc3VtICAgICAgID0gZ2V0X3J4X2NzdW0sCi0JLnNldF9yeF9jc3VtICAgICAgID0gc2V0X3J4X2NzdW0sCi0JLnNldF90eF9jc3VtICAgICAgID0gZXRodG9vbF9vcF9zZXRfdHhfY3N1bSwKLQkuc2V0X3NnICAgICAgICAgICAgPSBldGh0b29sX29wX3NldF9zZywKIAkuZ2V0X2xpbmsgICAgICAgICAgPSBldGh0b29sX29wX2dldF9saW5rLAogCS5nZXRfc3RyaW5ncyAgICAgICA9IGdldF9zdHJpbmdzLAogCS5nZXRfc3NldF9jb3VudAkgICA9IGdldF9zc2V0X2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IGdldF9zdGF0cywKIAkuZ2V0X3JlZ3NfbGVuICAgICAgPSBnZXRfcmVnc19sZW4sCiAJLmdldF9yZWdzICAgICAgICAgID0gZ2V0X3JlZ3MsCi0JLnNldF90c28gICAgICAgICAgID0gc2V0X3RzbywKIH07CiAKIHN0YXRpYyBpbnQgdDFfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpyZXEsIGludCBjbWQpCkBAIC0xMTA1LDI4ICsxMDcyLDI4IEBACiAJCW5ldGRldi0+bWVtX3N0YXJ0ID0gbW1pb19zdGFydDsKIAkJbmV0ZGV2LT5tZW1fZW5kID0gbW1pb19zdGFydCArIG1taW9fbGVuIC0gMTsKIAkJbmV0ZGV2LT5tbF9wcml2ID0gYWRhcHRlcjsKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNOwotCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTExUWDsKKwkJbmV0ZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwKKwkJCU5FVElGX0ZfUlhDU1VNOworCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfAorCQkJTkVUSUZfRl9SWENTVU0gfCBORVRJRl9GX0xMVFg7CiAKLQkJYWRhcHRlci0+ZmxhZ3MgfD0gUlhfQ1NVTV9FTkFCTEVEIHwgVENQX0NTVU1fQ0FQQUJMRTsKIAkJaWYgKHBjaV91c2luZ19kYWMpCiAJCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKIAkJaWYgKHZsYW5fdHNvX2NhcGFibGUoYWRhcHRlcikpIHsKICNpZiBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRKSB8fCBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRX01PRFVMRSkKLQkJCWFkYXB0ZXItPmZsYWdzIHw9IFZMQU5fQUNDRUxfQ0FQQUJMRTsKIAkJCW5ldGRldi0+ZmVhdHVyZXMgfD0KIAkJCQlORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlg7CiAjZW5kaWYKIAogCQkJLyogVDIwNDogZGlzYWJsZSBUU08gKi8KIAkJCWlmICghKGlzX1QyKGFkYXB0ZXIpKSB8fCBiaS0+cG9ydF9udW1iZXIgIT0gNCkgewotCQkJCWFkYXB0ZXItPmZsYWdzIHw9IFRTT19DQVBBQkxFOworCQkJCW5ldGRldi0+aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CiAJCQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKIAkJCX0KIAkJfQogCiAJCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZjeGdiX25ldGRldl9vcHM7Ci0JCW5ldGRldi0+aGFyZF9oZWFkZXJfbGVuICs9IChhZGFwdGVyLT5mbGFncyAmIFRTT19DQVBBQkxFKSA/CisJCW5ldGRldi0+aGFyZF9oZWFkZXJfbGVuICs9IChuZXRkZXYtPmh3X2ZlYXR1cmVzICYgTkVUSUZfRl9UU08pID8KIAkJCXNpemVvZihzdHJ1Y3QgY3BsX3R4X3BrdF9sc28pIDogc2l6ZW9mKHN0cnVjdCBjcGxfdHhfcGt0KTsKIAogCQluZXRpZl9uYXBpX2FkZChuZXRkZXYsICZhZGFwdGVyLT5uYXBpLCB0MV9wb2xsLCA2NCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jIGIvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYwppbmRleCA4NzU0ZDQ0Li41ODM4MGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjaW5jbHVkZSAiY3BsNV9jbWQuaCIKICNpbmNsdWRlICJzZ2UuaCIKQEAgLTkyOSw3ICs5MzAsNyBAQAogCXUzMiBlbiA9IFNHRV9JTlRfRU5BQkxFOwogCXUzMiB2YWwgPSByZWFkbChzZ2UtPmFkYXB0ZXItPnJlZ3MgKyBBX1BMX0VOQUJMRSk7CiAKLQlpZiAoc2dlLT5hZGFwdGVyLT5mbGFncyAmIFRTT19DQVBBQkxFKQorCWlmIChzZ2UtPmFkYXB0ZXItPnBvcnRbMF0uZGV2LT5od19mZWF0dXJlcyAmIE5FVElGX0ZfVFNPKQogCQllbiAmPSB+Rl9QQUNLRVRfVE9PX0JJRzsKIAl3cml0ZWwoZW4sIHNnZS0+YWRhcHRlci0+cmVncyArIEFfU0dfSU5UX0VOQUJMRSk7CiAJd3JpdGVsKHZhbCB8IFNHRV9QTF9JTlRSX01BU0ssIHNnZS0+YWRhcHRlci0+cmVncyArIEFfUExfRU5BQkxFKTsKQEAgLTk1Miw3ICs5NTMsNyBAQAogCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gc2dlLT5hZGFwdGVyOwogCXUzMiBjYXVzZSA9IHJlYWRsKGFkYXB0ZXItPnJlZ3MgKyBBX1NHX0lOVF9DQVVTRSk7CiAKLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBUU09fQ0FQQUJMRSkKKwlpZiAoYWRhcHRlci0+cG9ydFswXS5kZXYtPmh3X2ZlYXR1cmVzICYgTkVUSUZfRl9UU08pCiAJCWNhdXNlICY9IH5GX1BBQ0tFVF9UT09fQklHOwogCWlmIChjYXVzZSAmIEZfUkVTUFFfRVhIQVVTVEVEKQogCQlzZ2UtPnN0YXRzLnJlc3BRX2VtcHR5Kys7CkBAIC0xMzY5LDYgKzEzNzAsNyBAQAogCWNvbnN0IHN0cnVjdCBjcGxfcnhfcGt0ICpwOwogCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gc2dlLT5hZGFwdGVyOwogCXN0cnVjdCBzZ2VfcG9ydF9zdGF0cyAqc3Q7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAogCXNrYiA9IGdldF9wYWNrZXQoYWRhcHRlci0+cGRldiwgZmwsIGxlbiAtIHNnZS0+cnhfcGt0X3BhZCk7CiAJaWYgKHVubGlrZWx5KCFza2IpKSB7CkBAIC0xMzg0LDkgKzEzODYsMTAgQEAKIAlfX3NrYl9wdWxsKHNrYiwgc2l6ZW9mKCpwKSk7CiAKIAlzdCA9IHRoaXNfY3B1X3B0cihzZ2UtPnBvcnRfc3RhdHNbcC0+aWZmXSk7CisJZGV2ID0gYWRhcHRlci0+cG9ydFtwLT5pZmZdLmRldjsKIAotCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGFkYXB0ZXItPnBvcnRbcC0+aWZmXS5kZXYpOwotCWlmICgoYWRhcHRlci0+ZmxhZ3MgJiBSWF9DU1VNX0VOQUJMRUQpICYmIHAtPmNzdW0gPT0gMHhmZmZmICYmCisJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKKwlpZiAoKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkgJiYgcC0+Y3N1bSA9PSAweGZmZmYgJiYKIAkgICAgc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkgJiYKIAkgICAgKHNrYi0+ZGF0YVs5XSA9PSBJUFBST1RPX1RDUCB8fCBza2ItPmRhdGFbOV0gPT0gSVBQUk9UT19VRFApKSB7CiAJCSsrc3QtPnJ4X2Nzb19nb29kOwpAQCAtMTgzOCw4ICsxODQxLDcgQEAKIAkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCX0KIAotCQlpZiAoIShhZGFwdGVyLT5mbGFncyAmIFVEUF9DU1VNX0NBUEFCTEUpICYmCi0JCSAgICBza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMICYmCisJCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMICYmCiAJCSAgICBpcF9oZHIoc2tiKS0+cHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHsKIAkJCWlmICh1bmxpa2VseShza2JfY2hlY2tzdW1faGVscChza2IpKSkgewogCQkJCXByX2RlYnVnKCIlczogdW5hYmxlIHRvIGRvIHVkcCBjaGVja3N1bVxuIiwgZGV2LT5uYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vdHAuYyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vdHAuYwppbmRleCA2MjIyZDU4Li44YmVkNGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL3RwLmMKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby90cC5jCkBAIC0xNTIsMTEgKzE1Miw2IEBACiAJc2V0X2NzdW1fb2ZmbG9hZCh0cCwgRl9JUF9DU1VNLCBlbmFibGUpOwogfQogCi12b2lkIHQxX3RwX3NldF91ZHBfY2hlY2tzdW1fb2ZmbG9hZChzdHJ1Y3QgcGV0cCAqdHAsIGludCBlbmFibGUpCi17Ci0Jc2V0X2NzdW1fb2ZmbG9hZCh0cCwgRl9VRFBfQ1NVTSwgZW5hYmxlKTsKLX0KLQogdm9pZCB0MV90cF9zZXRfdGNwX2NoZWNrc3VtX29mZmxvYWQoc3RydWN0IHBldHAgKnRwLCBpbnQgZW5hYmxlKQogewogCXNldF9jc3VtX29mZmxvYWQodHAsIEZfVENQX0NTVU0sIGVuYWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL3RwLmggYi9kcml2ZXJzL25ldC9jaGVsc2lvL3RwLmgKaW5kZXggMzJmYzcxZS4uZGZkOGNlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby90cC5oCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vdHAuaApAQCAtNjUsNyArNjUsNiBAQAogaW50IHQxX3RwX2ludHJfaGFuZGxlcihzdHJ1Y3QgcGV0cCAqdHApOwogCiB2b2lkIHQxX3RwX2dldF9taWJfc3RhdGlzdGljcyhhZGFwdGVyX3QgKmFkYXAsIHN0cnVjdCB0cF9taWJfc3RhdGlzdGljcyAqdHBzKTsKLXZvaWQgdDFfdHBfc2V0X3VkcF9jaGVja3N1bV9vZmZsb2FkKHN0cnVjdCBwZXRwICp0cCwgaW50IGVuYWJsZSk7CiB2b2lkIHQxX3RwX3NldF90Y3BfY2hlY2tzdW1fb2ZmbG9hZChzdHJ1Y3QgcGV0cCAqdHAsIGludCBlbmFibGUpOwogdm9pZCB0MV90cF9zZXRfaXBfY2hlY2tzdW1fb2ZmbG9hZChzdHJ1Y3QgcGV0cCAqdHAsIGludCBlbmFibGUpOwogaW50IHQxX3RwX3NldF9jb2FsZXNjaW5nX3NpemUoc3RydWN0IHBldHAgKnRwLCB1bnNpZ25lZCBpbnQgc2l6ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jbmljLmMgYi9kcml2ZXJzL25ldC9jbmljLmMKaW5kZXggOGNjYTYwZS4uMTFhOTJhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L2NuaWMuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2lmIGRlZmluZWQoQ09ORklHX1ZMQU5fODAyMVEpIHx8IGRlZmluZWQoQ09ORklHX1ZMQU5fODAyMVFfTU9EVUxFKQogI2RlZmluZSBCQ01fVkxBTiAxCiAjZW5kaWYKQEAgLTI5NjYsMzEgKzI5NjcsMzYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgY25pY191bHBfc3RvcF9vbmUoc3RydWN0IGNuaWNfbG9jYWwgKmNwLCBpbnQgaWZfdHlwZSkKK3sKKwlzdHJ1Y3QgY25pY191bHBfb3BzICp1bHBfb3BzOworCisJaWYgKGlmX3R5cGUgPT0gQ05JQ19VTFBfSVNDU0kpCisJCWNuaWNfc2VuZF9ubG1zZyhjcCwgSVNDU0lfS0VWRU5UX0lGX0RPV04sIE5VTEwpOworCisJbXV0ZXhfbG9jaygmY25pY19sb2NrKTsKKwl1bHBfb3BzID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChjcC0+dWxwX29wc1tpZl90eXBlXSwKKwkJCQkJICAgIGxvY2tkZXBfaXNfaGVsZCgmY25pY19sb2NrKSk7CisJaWYgKCF1bHBfb3BzKSB7CisJCW11dGV4X3VubG9jaygmY25pY19sb2NrKTsKKwkJcmV0dXJuOworCX0KKwlzZXRfYml0KFVMUF9GX0NBTExfUEVORElORywgJmNwLT51bHBfZmxhZ3NbaWZfdHlwZV0pOworCW11dGV4X3VubG9jaygmY25pY19sb2NrKTsKKworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoVUxQX0ZfU1RBUlQsICZjcC0+dWxwX2ZsYWdzW2lmX3R5cGVdKSkKKwkJdWxwX29wcy0+Y25pY19zdG9wKGNwLT51bHBfaGFuZGxlW2lmX3R5cGVdKTsKKworCWNsZWFyX2JpdChVTFBfRl9DQUxMX1BFTkRJTkcsICZjcC0+dWxwX2ZsYWdzW2lmX3R5cGVdKTsKK30KKwogc3RhdGljIHZvaWQgY25pY191bHBfc3RvcChzdHJ1Y3QgY25pY19kZXYgKmRldikKIHsKIAlzdHJ1Y3QgY25pY19sb2NhbCAqY3AgPSBkZXYtPmNuaWNfcHJpdjsKIAlpbnQgaWZfdHlwZTsKIAotCWNuaWNfc2VuZF9ubG1zZyhjcCwgSVNDU0lfS0VWRU5UX0lGX0RPV04sIE5VTEwpOwotCi0JZm9yIChpZl90eXBlID0gMDsgaWZfdHlwZSA8IE1BWF9DTklDX1VMUF9UWVBFOyBpZl90eXBlKyspIHsKLQkJc3RydWN0IGNuaWNfdWxwX29wcyAqdWxwX29wczsKLQotCQltdXRleF9sb2NrKCZjbmljX2xvY2spOwotCQl1bHBfb3BzID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChjcC0+dWxwX29wc1tpZl90eXBlXSwKLQkJCQkJCSAgICBsb2NrZGVwX2lzX2hlbGQoJmNuaWNfbG9jaykpOwotCQlpZiAoIXVscF9vcHMpIHsKLQkJCW11dGV4X3VubG9jaygmY25pY19sb2NrKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXNldF9iaXQoVUxQX0ZfQ0FMTF9QRU5ESU5HLCAmY3AtPnVscF9mbGFnc1tpZl90eXBlXSk7Ci0JCW11dGV4X3VubG9jaygmY25pY19sb2NrKTsKLQotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFVMUF9GX1NUQVJULCAmY3AtPnVscF9mbGFnc1tpZl90eXBlXSkpCi0JCQl1bHBfb3BzLT5jbmljX3N0b3AoY3AtPnVscF9oYW5kbGVbaWZfdHlwZV0pOwotCi0JCWNsZWFyX2JpdChVTFBfRl9DQUxMX1BFTkRJTkcsICZjcC0+dWxwX2ZsYWdzW2lmX3R5cGVdKTsKLQl9CisJZm9yIChpZl90eXBlID0gMDsgaWZfdHlwZSA8IE1BWF9DTklDX1VMUF9UWVBFOyBpZl90eXBlKyspCisJCWNuaWNfdWxwX3N0b3Bfb25lKGNwLCBpZl90eXBlKTsKIH0KIAogc3RhdGljIHZvaWQgY25pY191bHBfc3RhcnQoc3RydWN0IGNuaWNfZGV2ICpkZXYpCkBAIC0zMDM5LDYgKzMwNDUsMTIgQEAKIAogCQljbmljX3B1dChkZXYpOwogCQlicmVhazsKKwljYXNlIENOSUNfQ1RMX1NUT1BfSVNDU0lfQ01EOiB7CisJCXN0cnVjdCBjbmljX2xvY2FsICpjcCA9IGRldi0+Y25pY19wcml2OworCQlzZXRfYml0KENOSUNfTENMX0ZMX1NUT1BfSVNDU0ksICZjcC0+Y25pY19sb2NhbF9mbGFncyk7CisJCXF1ZXVlX2RlbGF5ZWRfd29yayhjbmljX3dxLCAmY3AtPmRlbGV0ZV90YXNrLCAwKTsKKwkJYnJlYWs7CisJfQogCWNhc2UgQ05JQ19DVExfQ09NUExFVElPTl9DTUQ6IHsKIAkJdTMyIGNpZCA9IEJOWDJYX1NXX0NJRChpbmZvLT5kYXRhLmNvbXAuY2lkKTsKIAkJdTMyIGw1X2NpZDsKQEAgLTM1NjIsOCArMzU3NCwxMiBAQAogCiBzdGF0aWMgaW50IGNuaWNfY21fY29ubmVjdChzdHJ1Y3QgY25pY19zb2NrICpjc2ssIHN0cnVjdCBjbmljX3NvY2thZGRyICpzYWRkcikKIHsKKwlzdHJ1Y3QgY25pY19sb2NhbCAqY3AgPSBjc2stPmRldi0+Y25pY19wcml2OwogCWludCBlcnIgPSAwOwogCisJaWYgKGNwLT5ldGhkZXYtPmRydl9zdGF0ZSAmIENOSUNfRFJWX1NUQVRFX05PX0lTQ1NJKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKIAlpZiAoIWNuaWNfaW5fdXNlKGNzaykpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0zOTY1LDYgKzM5ODEsMTUgQEAKIAljcCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY25pY19sb2NhbCwgZGVsZXRlX3Rhc2sud29yayk7CiAJZGV2ID0gY3AtPmRldjsKIAorCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQ05JQ19MQ0xfRkxfU1RPUF9JU0NTSSwgJmNwLT5jbmljX2xvY2FsX2ZsYWdzKSkgeworCQlzdHJ1Y3QgZHJ2X2N0bF9pbmZvIGluZm87CisKKwkJY25pY191bHBfc3RvcF9vbmUoY3AsIENOSUNfVUxQX0lTQ1NJKTsKKworCQlpbmZvLmNtZCA9IERSVl9DVExfSVNDU0lfU1RPUFBFRF9DTUQ7CisJCWNwLT5ldGhkZXYtPmRydl9jdGwoZGV2LT5uZXRkZXYsICZpbmZvKTsKKwl9CisKIAlmb3IgKGkgPSAwOyBpIDwgY3AtPm1heF9jaWRfc3BhY2U7IGkrKykgewogCQlzdHJ1Y3QgY25pY19jb250ZXh0ICpjdHggPSAmY3AtPmN0eF90YmxbaV07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NuaWMuaCBiL2RyaXZlcnMvbmV0L2NuaWMuaAppbmRleCA0NDU2MjYwLi4zMzY3YTZkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY25pYy5oCisrKyBiL2RyaXZlcnMvbmV0L2NuaWMuaApAQCAtMjI2LDYgKzIyNiw3IEBACiAjZGVmaW5lCUNOSUNfTENMX0ZMX0tXUV9JTklUCQkweDAKICNkZWZpbmUJQ05JQ19MQ0xfRkxfTDJfV0FJVAkJMHgxCiAjZGVmaW5lCUNOSUNfTENMX0ZMX1JJTkdTX0lOSVRFRAkweDIKKyNkZWZpbmUJQ05JQ19MQ0xfRkxfU1RPUF9JU0NTSQkJMHg0CiAKIAlzdHJ1Y3QgY25pY19kZXYgKmRldjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY25pY19pZi5oIGIvZHJpdmVycy9uZXQvY25pY19pZi5oCmluZGV4IGUwMWI0OWUuLmZkZDhlNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NuaWNfaWYuaAorKysgYi9kcml2ZXJzL25ldC9jbmljX2lmLmgKQEAgLTEyLDggKzEyLDggQEAKICNpZm5kZWYgQ05JQ19JRl9ICiAjZGVmaW5lIENOSUNfSUZfSAogCi0jZGVmaW5lIENOSUNfTU9EVUxFX1ZFUlNJT04JIjIuMi4xMyIKLSNkZWZpbmUgQ05JQ19NT0RVTEVfUkVMREFURQkiSmFuIDMxLCAyMDExIgorI2RlZmluZSBDTklDX01PRFVMRV9WRVJTSU9OCSIyLjIuMTQiCisjZGVmaW5lIENOSUNfTU9EVUxFX1JFTERBVEUJIk1hciAzMCwgMjAxMSIKIAogI2RlZmluZSBDTklDX1VMUF9SRE1BCQkwCiAjZGVmaW5lIENOSUNfVUxQX0lTQ1NJCQkxCkBAIC04NSw2ICs4NSw3IEBACiAjZGVmaW5lIENOSUNfQ1RMX1NUT1BfQ01ECQkxCiAjZGVmaW5lIENOSUNfQ1RMX1NUQVJUX0NNRAkJMgogI2RlZmluZSBDTklDX0NUTF9DT01QTEVUSU9OX0NNRAkJMworI2RlZmluZSBDTklDX0NUTF9TVE9QX0lTQ1NJX0NNRAkJNAogCiAjZGVmaW5lIERSVl9DVExfSU9fV1JfQ01ECQkweDEwMQogI2RlZmluZSBEUlZfQ1RMX0lPX1JEX0NNRAkJMHgxMDIKQEAgLTk0LDYgKzk1LDcgQEAKICNkZWZpbmUgRFJWX0NUTF9TVEFSVF9MMl9DTUQJCTB4MTA2CiAjZGVmaW5lIERSVl9DVExfU1RPUF9MMl9DTUQJCTB4MTA3CiAjZGVmaW5lIERSVl9DVExfUkVUX0wyX1NQUV9DUkVESVRfQ01ECTB4MTBjCisjZGVmaW5lIERSVl9DVExfSVNDU0lfU1RPUFBFRF9DTUQJMHgxMGQKIAogc3RydWN0IGNuaWNfY3RsX2NvbXBsZXRpb24gewogCXUzMgljaWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jcmlzL2V0aF92MTAuYyBiL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCmluZGV4IDlkMjY3ZDMuLmU2NmFjZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCisrKyBiL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCkBAIC00OTEsOCArNDkxLDggQEAKIAogCS8qIGFsbG9jYXRlIHRoZSBpcnEgY29ycmVzcG9uZGluZyB0byB0aGUgcmVjZWl2aW5nIERNQSAqLwogCi0JaWYgKHJlcXVlc3RfaXJxKE5FVFdPUktfRE1BX1JYX0lSUV9OQlIsIGUxMDByeHR4X2ludGVycnVwdCwKLQkJCUlSUUZfU0FNUExFX1JBTkRPTSwgY2FyZG5hbWUsICh2b2lkICopZGV2KSkgeworCWlmIChyZXF1ZXN0X2lycShORVRXT1JLX0RNQV9SWF9JUlFfTkJSLCBlMTAwcnh0eF9pbnRlcnJ1cHQsIDAsIGNhcmRuYW1lLAorCQkJKHZvaWQgKilkZXYpKSB7CiAJCWdvdG8gZ3JhY2VfZXhpdDA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9hZGFwdGVyLmggYi9kcml2ZXJzL25ldC9jeGdiMy9hZGFwdGVyLmgKaW5kZXggZWY2N2JlNS4uNzMwMGRlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvYWRhcHRlci5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2FkYXB0ZXIuaApAQCAtNTAsMTEgKzUwLDYgQEAKIHN0cnVjdCBzZ2VfcXNldDsKIHN0cnVjdCBwb3J0X2luZm87CiAKLWVudW0gewkJCS8qIHJ4X29mZmxvYWQgZmxhZ3MgKi8KLQlUM19SWF9DU1VNCT0gMSA8PCAwLAotCVQzX0xSTwkJPSAxIDw8IDEsCi19OwotCiBlbnVtIG1hY19pZHhfdHlwZXMgewogCUxBTl9NQUNfSURYCT0gMCwKIAlTQU5fTUFDX0lEWCwKQEAgLTc0LDcgKzY5LDYgQEAKIAlzdHJ1Y3Qgdmxhbl9ncm91cCAqdmxhbl9ncnA7CiAJc3RydWN0IHNnZV9xc2V0ICpxczsKIAl1OCBwb3J0X2lkOwotCXU4IHJ4X29mZmxvYWQ7CiAJdTggbnFzZXRzOwogCXU4IGZpcnN0X3FzZXQ7CiAJc3RydWN0IGNwaHkgcGh5OwpAQCAtMjEyLDcgKzIwNiw2IEBACiAJc3RydWN0IHNnZV9mbCBmbFtTR0VfUlhRX1BFUl9TRVRdOwogCXN0cnVjdCBzZ2VfdHhxIHR4cVtTR0VfVFhRX1BFUl9TRVRdOwogCWludCBub21lbTsKLQlpbnQgbHJvX2VuYWJsZWQ7CiAJdm9pZCAqbHJvX3ZhOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhfcTsJLyogYXNzb2NpYXRlZCBuZXRkZXYgVFggcXVldWUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvY3hnYjMvY29tbW9uLmgKaW5kZXggNWNjYjc3ZC4uMDU2ZWU4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvY29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY29tbW9uLmgKQEAgLTMxNyw3ICszMTcsNiBAQAogCiBzdHJ1Y3QgcXNldF9wYXJhbXMgewkJLyogU0dFIHF1ZXVlIHNldCBwYXJhbWV0ZXJzICovCiAJdW5zaWduZWQgaW50IHBvbGxpbmc7CS8qIHBvbGxpbmcvaW50ZXJydXB0IHNlcnZpY2UgZm9yIHJzcHEgKi8KLQl1bnNpZ25lZCBpbnQgbHJvOwkvKiBsYXJnZSByZWNlaXZlIG9mZmxvYWQgKi8KIAl1bnNpZ25lZCBpbnQgY29hbGVzY2VfdXNlY3M7CS8qIGlycSBjb2FsZXNjaW5nIHRpbWVyICovCiAJdW5zaWduZWQgaW50IHJzcHFfc2l6ZTsJLyogIyBvZiBlbnRyaWVzIGluIHJlc3BvbnNlIHF1ZXVlICovCiAJdW5zaWduZWQgaW50IGZsX3NpemU7CS8qICMgb2YgZW50cmllcyBpbiByZWd1bGFyIGZyZWUgbGlzdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfbWFpbi5jIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfbWFpbi5jCmluZGV4IDkxMDg5MzEuLjkwODFjZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19tYWluLmMKQEAgLTY0NCwyNiArNjQ0LDYgQEAKIH0KIAogLyoqCi0gKglzZXRfcXNldF9scm8gLSBUdXJuIGEgcXVldWUgc2V0J3MgTFJPIGNhcGFiaWxpdHkgb24gYW5kIG9mZgotICoJQGRldjogdGhlIGRldmljZSB0aGUgcXNldCBpcyBhdHRhY2hlZCB0bwotICoJQHFzZXRfaWR4OiB0aGUgcXVldWUgc2V0IGluZGV4Ci0gKglAdmFsOiB0aGUgTFJPIHN3aXRjaAotICoKLSAqCVNldHMgTFJPIG9uIG9yIG9mZiBmb3IgYSBwYXJ0aWN1bGFyIHF1ZXVlIHNldC4KLSAqCXRoZSBkZXZpY2UncyBmZWF0dXJlcyBmbGFnIGlzIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgTFJPCi0gKgljYXBhYmlsaXR5IHdoZW4gYWxsIHF1ZXVlcyBiZWxvbmdpbmcgdG8gdGhlIGRldmljZSBhcmUKLSAqCWluIHRoZSBzYW1lIHN0YXRlLgotICovCi1zdGF0aWMgdm9pZCBzZXRfcXNldF9scm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHFzZXRfaWR4LCBpbnQgdmFsKQotewotCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IHBpLT5hZGFwdGVyOwotCi0JYWRhcHRlci0+cGFyYW1zLnNnZS5xc2V0W3FzZXRfaWR4XS5scm8gPSAhIXZhbDsKLQlhZGFwdGVyLT5zZ2UucXNbcXNldF9pZHhdLmxyb19lbmFibGVkID0gISF2YWw7Ci19Ci0KLS8qKgogICoJc2V0dXBfc2dlX3FzZXRzIC0gY29uZmlndXJlIFNHRSBUeC9SeC9yZXNwb25zZSBxdWV1ZXMKICAqCUBhZGFwOiB0aGUgYWRhcHRlcgogICoKQEAgLTY4NSw3ICs2NjUsNiBAQAogCiAJCXBpLT5xcyA9ICZhZGFwLT5zZ2UucXNbcGktPmZpcnN0X3FzZXRdOwogCQlmb3IgKGogPSAwOyBqIDwgcGktPm5xc2V0czsgKytqLCArK3FzZXRfaWR4KSB7Ci0JCQlzZXRfcXNldF9scm8oZGV2LCBxc2V0X2lkeCwgcGktPnJ4X29mZmxvYWQgJiBUM19MUk8pOwogCQkJZXJyID0gdDNfc2dlX2FsbG9jX3FzZXQoYWRhcCwgcXNldF9pZHgsIDEsCiAJCQkJKGFkYXAtPmZsYWdzICYgVVNJTkdfTVNJWCkgPyBxc2V0X2lkeCArIDEgOgogCQkJCQkJCSAgICAgaXJxX2lkeCwKQEAgLTE3NDksMjMgKzE3MjgsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeGdiM19waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQorc3RhdGljIGludCBzZXRfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICAgICAgZW51bSBldGh0b29sX3BoeXNfaWRfc3RhdGUgc3RhdGUpCiB7CiAJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gcGktPmFkYXB0ZXI7Ci0JaW50IGk7CiAKLQlpZiAoZGF0YSA9PSAwKQotCQlkYXRhID0gMjsKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBFVEhUT09MX0lEX0FDVElWRToKKwkJcmV0dXJuIDE7CS8qIGN5Y2xlIG9uL29mZiBvbmNlIHBlciBzZWNvbmQgKi8KIAotCWZvciAoaSA9IDA7IGkgPCBkYXRhICogMjsgaSsrKSB7CisJY2FzZSBFVEhUT09MX0lEX09GRjoKKwkJdDNfc2V0X3JlZ19maWVsZChhZGFwdGVyLCBBX1QzREJHX0dQSU9fRU4sIEZfR1BJTzBfT1VUX1ZBTCwgMCk7CisJCWJyZWFrOworCisJY2FzZSBFVEhUT09MX0lEX09OOgorCWNhc2UgRVRIVE9PTF9JRF9JTkFDVElWRToKIAkJdDNfc2V0X3JlZ19maWVsZChhZGFwdGVyLCBBX1QzREJHX0dQSU9fRU4sIEZfR1BJTzBfT1VUX1ZBTCwKLQkJCQkgKGkgJiAxKSA/IEZfR1BJTzBfT1VUX1ZBTCA6IDApOwotCQlpZiAobXNsZWVwX2ludGVycnVwdGlibGUoNTAwKSkKLQkJCWJyZWFrOwotCX0KLQl0M19zZXRfcmVnX2ZpZWxkKGFkYXB0ZXIsIEFfVDNEQkdfR1BJT19FTiwgRl9HUElPMF9PVVRfVkFMLAogCQkJIEZfR1BJTzBfT1VUX1ZBTCk7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE3NzcsMTAgKzE3NTksMTAgQEAKIAljbWQtPmFkdmVydGlzaW5nID0gcC0+bGlua19jb25maWcuYWR2ZXJ0aXNpbmc7CiAKIAlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKSB7Ci0JCWNtZC0+c3BlZWQgPSBwLT5saW5rX2NvbmZpZy5zcGVlZDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgcC0+bGlua19jb25maWcuc3BlZWQpOwogCQljbWQtPmR1cGxleCA9IHAtPmxpbmtfY29uZmlnLmR1cGxleDsKIAl9IGVsc2UgewotCQljbWQtPnNwZWVkID0gLTE7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIC0xKTsKIAkJY21kLT5kdXBsZXggPSAtMTsKIAl9CiAKQEAgLTE4MzksNyArMTgyMSw4IEBACiAJCSAqIGJlaW5nIHJlcXVlc3RlZC4KIAkJICovCiAJCWlmIChjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19ESVNBQkxFKSB7Ci0JCQlpbnQgY2FwID0gc3BlZWRfZHVwbGV4X3RvX2NhcHMoY21kLT5zcGVlZCwgY21kLT5kdXBsZXgpOworCQkJdTMyIHNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoY21kKTsKKwkJCWludCBjYXAgPSBzcGVlZF9kdXBsZXhfdG9fY2FwcyhzcGVlZCwgY21kLT5kdXBsZXgpOwogCQkJaWYgKGxjLT5zdXBwb3J0ZWQgJiBjYXApCiAJCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTE4NDcsMTEgKzE4MzAsMTIgQEAKIAl9CiAKIAlpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSkgewotCQlpbnQgY2FwID0gc3BlZWRfZHVwbGV4X3RvX2NhcHMoY21kLT5zcGVlZCwgY21kLT5kdXBsZXgpOworCQl1MzIgc3BlZWQgPSBldGh0b29sX2NtZF9zcGVlZChjbWQpOworCQlpbnQgY2FwID0gc3BlZWRfZHVwbGV4X3RvX2NhcHMoc3BlZWQsIGNtZC0+ZHVwbGV4KTsKIAotCQlpZiAoIShsYy0+c3VwcG9ydGVkICYgY2FwKSB8fCBjbWQtPnNwZWVkID09IFNQRUVEXzEwMDApCisJCWlmICghKGxjLT5zdXBwb3J0ZWQgJiBjYXApIHx8IChzcGVlZCA9PSBTUEVFRF8xMDAwKSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQlsYy0+cmVxdWVzdGVkX3NwZWVkID0gY21kLT5zcGVlZDsKKwkJbGMtPnJlcXVlc3RlZF9zcGVlZCA9IHNwZWVkOwogCQlsYy0+cmVxdWVzdGVkX2R1cGxleCA9IGNtZC0+ZHVwbGV4OwogCQlsYy0+YWR2ZXJ0aXNpbmcgPSAwOwogCX0gZWxzZSB7CkBAIC0xOTA3LDI5ICsxODkxLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHUzMiBnZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBwb3J0X2luZm8gKnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcmV0dXJuIHAtPnJ4X29mZmxvYWQgJiBUM19SWF9DU1VNOwotfQotCi1zdGF0aWMgaW50IHNldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBwb3J0X2luZm8gKnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKGRhdGEpIHsKLQkJcC0+cnhfb2ZmbG9hZCB8PSBUM19SWF9DU1VNOwotCX0gZWxzZSB7Ci0JCWludCBpOwotCi0JCXAtPnJ4X29mZmxvYWQgJj0gfihUM19SWF9DU1VNIHwgVDNfTFJPKTsKLQkJZm9yIChpID0gcC0+Zmlyc3RfcXNldDsgaSA8IHAtPmZpcnN0X3FzZXQgKyBwLT5ucXNldHM7IGkrKykKLQkJCXNldF9xc2V0X2xybyhkZXYsIGksIDApOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgZ2V0X3NnZV9wYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKmUpCiB7CiAJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMjEwMSwyMCArMjA2MiwxNSBAQAogCS5zZXRfZWVwcm9tID0gc2V0X2VlcHJvbSwKIAkuZ2V0X3BhdXNlcGFyYW0gPSBnZXRfcGF1c2VwYXJhbSwKIAkuc2V0X3BhdXNlcGFyYW0gPSBzZXRfcGF1c2VwYXJhbSwKLQkuZ2V0X3J4X2NzdW0gPSBnZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0gPSBzZXRfcnhfY3N1bSwKLQkuc2V0X3R4X2NzdW0gPSBldGh0b29sX29wX3NldF90eF9jc3VtLAotCS5zZXRfc2cgPSBldGh0b29sX29wX3NldF9zZywKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAogCS5nZXRfc3RyaW5ncyA9IGdldF9zdHJpbmdzLAotCS5waHlzX2lkID0gY3hnYjNfcGh5c19pZCwKKwkuc2V0X3BoeXNfaWQgPSBzZXRfcGh5c19pZCwKIAkubndheV9yZXNldCA9IHJlc3RhcnRfYXV0b25lZywKIAkuZ2V0X3NzZXRfY291bnQgPSBnZXRfc3NldF9jb3VudCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBnZXRfc3RhdHMsCiAJLmdldF9yZWdzX2xlbiA9IGdldF9yZWdzX2xlbiwKIAkuZ2V0X3JlZ3MgPSBnZXRfcmVncywKIAkuZ2V0X3dvbCA9IGdldF93b2wsCi0JLnNldF90c28gPSBldGh0b29sX29wX3NldF90c28sCiB9OwogCiBzdGF0aWMgaW50IGluX3JhbmdlKGludCB2YWwsIGludCBsbywgaW50IGhpKQpAQCAtMjE2MiwxNSArMjExOCw2IEBACiAJCQkgICAgICBNQVhfUlNQUV9FTlRSSUVTKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCWlmICgoYWRhcHRlci0+ZmxhZ3MgJiBGVUxMX0lOSVRfRE9ORSkgJiYgdC5scm8gPiAwKQotCQkJZm9yX2VhY2hfcG9ydChhZGFwdGVyLCBpKSB7Ci0JCQkJcGkgPSBhZGFwMnBpbmZvKGFkYXB0ZXIsIGkpOwotCQkJCWlmICh0LnFzZXRfaWR4ID49IHBpLT5maXJzdF9xc2V0ICYmCi0JCQkJICAgIHQucXNldF9pZHggPCBwaS0+Zmlyc3RfcXNldCArIHBpLT5ucXNldHMgJiYKLQkJCQkgICAgIShwaS0+cnhfb2ZmbG9hZCAmIFQzX1JYX0NTVU0pKQotCQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQogCQlpZiAoKGFkYXB0ZXItPmZsYWdzICYgRlVMTF9JTklUX0RPTkUpICYmCiAJCQkodC5yc3BxX3NpemUgPj0gMCB8fCB0LmZsX3NpemVbMF0gPj0gMCB8fAogCQkJdC5mbF9zaXplWzFdID49IDAgfHwgdC50eHFfc2l6ZVswXSA+PSAwIHx8CkBAIC0yMjMxLDggKzIxNzgsMTQgQEAKIAkJCQl9CiAJCQl9CiAJCX0KLQkJaWYgKHQubHJvID49IDApCi0JCQlzZXRfcXNldF9scm8oZGV2LCB0LnFzZXRfaWR4LCB0Lmxybyk7CisKKwkJaWYgKHQubHJvID49IDApIHsKKwkJCWlmICh0LmxybykKKwkJCQlkZXYtPndhbnRlZF9mZWF0dXJlcyB8PSBORVRJRl9GX0dSTzsKKwkJCWVsc2UKKwkJCQlkZXYtPndhbnRlZF9mZWF0dXJlcyAmPSB+TkVUSUZfRl9HUk87CisJCQluZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7CisJCX0KIAogCQlicmVhazsKIAl9CkBAIC0yMjY2LDcgKzIyMTksNyBAQAogCQl0LmZsX3NpemVbMF0gPSBxLT5mbF9zaXplOwogCQl0LmZsX3NpemVbMV0gPSBxLT5qdW1ib19zaXplOwogCQl0LnBvbGxpbmcgPSBxLT5wb2xsaW5nOwotCQl0LmxybyA9IHEtPmxybzsKKwkJdC5scm8gPSAhIShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9HUk8pOwogCQl0LmludHJfbGF0ID0gcS0+Y29hbGVzY2VfdXNlY3M7CiAJCXQuY29uZ190aHJlcyA9IHEtPmNvbmdfdGhyZXM7CiAJCXQucW51bSA9IHExOwpAQCAtMzMwNCwxOCArMzI1NywxOCBAQAogCQlhZGFwdGVyLT5wb3J0W2ldID0gbmV0ZGV2OwogCQlwaSA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJCXBpLT5hZGFwdGVyID0gYWRhcHRlcjsKLQkJcGktPnJ4X29mZmxvYWQgPSBUM19SWF9DU1VNIHwgVDNfTFJPOwogCQlwaS0+cG9ydF9pZCA9IGk7CiAJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAJCW5ldGRldi0+aXJxID0gcGRldi0+aXJxOwogCQluZXRkZXYtPm1lbV9zdGFydCA9IG1taW9fc3RhcnQ7CiAJCW5ldGRldi0+bWVtX2VuZCA9IG1taW9fc3RhcnQgKyBtbWlvX2xlbiAtIDE7Ci0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfVFNPOwotCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfR1JPOworCQluZXRkZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8CisJCQlORVRJRl9GX1RTTyB8IE5FVElGX0ZfUlhDU1VNOworCQluZXRkZXYtPmZlYXR1cmVzIHw9IG5ldGRldi0+aHdfZmVhdHVyZXMgfAorCQkJTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYOwogCQlpZiAocGNpX3VzaW5nX2RhYykKIAkJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogCi0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYOwogCQluZXRkZXYtPm5ldGRldl9vcHMgPSAmY3hnYl9uZXRkZXZfb3BzOwogCQlTRVRfRVRIVE9PTF9PUFMobmV0ZGV2LCAmY3hnYl9ldGh0b29sX29wcyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMgYi9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYwppbmRleCBiZmEyZDU2Li4zZjU2MmJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8bmV0L2FycC5oPgogI2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgInJlZ3MuaCIKQEAgLTIwMTksNyArMjAyMCw3IEBACiAJc2tiX3B1bGwoc2tiLCBzaXplb2YoKnApICsgcGFkKTsKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBhZGFwLT5wb3J0W3AtPmlmZl0pOwogCXBpID0gbmV0ZGV2X3ByaXYoc2tiLT5kZXYpOwotCWlmICgocGktPnJ4X29mZmxvYWQgJiBUM19SWF9DU1VNKSAmJiBwLT5jc3VtX3ZhbGlkICYmCisJaWYgKChza2ItPmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkgJiYgcC0+Y3N1bV92YWxpZCAmJgogCSAgICBwLT5jc3VtID09IGh0b25zKDB4ZmZmZikgJiYgIXAtPmZyYWdtZW50KSB7CiAJCXFzLT5wb3J0X3N0YXRzW1NHRV9QU1RBVF9SWF9DU1VNX0dPT0RdKys7CiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CkBAIC0yMTIwLDcgKzIxMjEsNyBAQAogCQlvZmZzZXQgPSAyICsgc2l6ZW9mKHN0cnVjdCBjcGxfcnhfcGt0KTsKIAkJY3BsID0gcXMtPmxyb192YSA9IHNkLT5wZ19jaHVuay52YSArIDI7CiAKLQkJaWYgKChwaS0+cnhfb2ZmbG9hZCAmIFQzX1JYX0NTVU0pICYmCisJCWlmICgocXMtPm5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkgJiYKIAkJICAgICBjcGwtPmNzdW1fdmFsaWQgJiYgY3BsLT5jc3VtID09IGh0b25zKDB4ZmZmZikpIHsKIAkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJCQlxcy0+cG9ydF9zdGF0c1tTR0VfUFNUQVRfUlhfQ1NVTV9HT09EXSsrOwpAQCAtMjI4NSw3ICsyMjg2LDggQEAKIAlxLT5uZXh0X2hvbGRvZmYgPSBxLT5ob2xkb2ZmX3RtcjsKIAogCXdoaWxlIChsaWtlbHkoYnVkZ2V0X2xlZnQgJiYgaXNfbmV3X3Jlc3BvbnNlKHIsIHEpKSkgewotCQlpbnQgcGFja2V0X2NvbXBsZXRlLCBldGgsIGV0aHBhZCA9IDIsIGxybyA9IHFzLT5scm9fZW5hYmxlZDsKKwkJaW50IHBhY2tldF9jb21wbGV0ZSwgZXRoLCBldGhwYWQgPSAyOworCQlpbnQgbHJvID0gISEocXMtPm5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0dSTyk7CiAJCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogCQl1MzIgbGVuLCBmbGFnczsKIAkJX19iZTMyIHJzc19oaSwgcnNzX2xvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjQvY3hnYjQuaCBiL2RyaXZlcnMvbmV0L2N4Z2I0L2N4Z2I0LmgKaW5kZXggMDFkNDllYS4uYmM5OTgyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjQvY3hnYjQuaAorKysgYi9kcml2ZXJzL25ldC9jeGdiNC9jeGdiNC5oCkBAIC0yOTAsNyArMjkwLDYgQEAKIAl1OCAgICAgcG9ydF9pZDsKIAl1OCAgICAgdHhfY2hhbjsKIAl1OCAgICAgbHBvcnQ7ICAgICAgICAgICAgICAgICAvKiBhc3NvY2lhdGVkIG9mZmxvYWQgbG9naWNhbCBwb3J0ICovCi0JdTggICAgIHJ4X29mZmxvYWQ7ICAgICAgICAgICAgLyogQ1NPLCBldGMgKi8KIAl1OCAgICAgbnFzZXRzOyAgICAgICAgICAgICAgICAvKiAjIG9mIHFzZXRzICovCiAJdTggICAgIGZpcnN0X3FzZXQ7ICAgICAgICAgICAgLyogaW5kZXggb2YgZmlyc3QgcXNldCAqLwogCXU4ICAgICByc3NfbW9kZTsKQEAgLTI5OCwxMSArMjk3LDYgQEAKIAl1MTYgICAqcnNzOwogfTsKIAotLyogcG9ydF9pbmZvLnJ4X29mZmxvYWQgZmxhZ3MgKi8KLWVudW0gewotCVJYX0NTTyA9IDEgPDwgMCwKLX07Ci0KIHN0cnVjdCBkZW50cnk7CiBzdHJ1Y3Qgd29ya19zdHJ1Y3Q7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2I0L2N4Z2I0X21haW4uYyBiL2RyaXZlcnMvbmV0L2N4Z2I0L2N4Z2I0X21haW4uYwppbmRleCA1MzUyYzhhLi43ZTNjZmJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiNC9jeGdiNF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjQvY3hnYjRfbWFpbi5jCkBAIC0xMzM2LDE1ICsxMzM2LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaWRlbnRpZnlfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3N0YXRpYyBpbnQgaWRlbnRpZnlfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJIGVudW0gZXRodG9vbF9waHlzX2lkX3N0YXRlIHN0YXRlKQogeworCXVuc2lnbmVkIGludCB2YWw7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXAgPSBuZXRkZXYyYWRhcChkZXYpOwogCi0JaWYgKGRhdGEgPT0gMCkKLQkJZGF0YSA9IDI7ICAgICAvKiBkZWZhdWx0IHRvIDIgc2Vjb25kcyAqLworCWlmIChzdGF0ZSA9PSBFVEhUT09MX0lEX0FDVElWRSkKKwkJdmFsID0gMHhmZmZmOworCWVsc2UgaWYgKHN0YXRlID09IEVUSFRPT0xfSURfSU5BQ1RJVkUpCisJCXZhbCA9IDA7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiB0NF9pZGVudGlmeV9wb3J0KGFkYXAsIGFkYXAtPmZuLCBuZXRkZXYycGluZm8oZGV2KS0+dmlpZCwKLQkJCQlkYXRhICogNSk7CisJcmV0dXJuIHQ0X2lkZW50aWZ5X3BvcnQoYWRhcCwgYWRhcC0+Zm4sIG5ldGRldjJwaW5mbyhkZXYpLT52aWlkLCB2YWwpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGZyb21fZndfbGlua2NhcHModW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjYXBzKQpAQCAtMTQzMSw3ICsxNDM2LDggQEAKIAljbWQtPnN1cHBvcnRlZCA9IGZyb21fZndfbGlua2NhcHMocC0+cG9ydF90eXBlLCBwLT5saW5rX2NmZy5zdXBwb3J0ZWQpOwogCWNtZC0+YWR2ZXJ0aXNpbmcgPSBmcm9tX2Z3X2xpbmtjYXBzKHAtPnBvcnRfdHlwZSwKIAkJCQkJICAgIHAtPmxpbmtfY2ZnLmFkdmVydGlzaW5nKTsKLQljbWQtPnNwZWVkID0gbmV0aWZfY2Fycmllcl9vayhkZXYpID8gcC0+bGlua19jZmcuc3BlZWQgOiAwOworCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsCisJCQkgICAgICBuZXRpZl9jYXJyaWVyX29rKGRldikgPyBwLT5saW5rX2NmZy5zcGVlZCA6IDApOwogCWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJY21kLT5hdXRvbmVnID0gcC0+bGlua19jZmcuYXV0b25lZzsKIAljbWQtPm1heHR4cGt0ID0gMDsKQEAgLTE0NTUsNiArMTQ2MSw3IEBACiAJdW5zaWduZWQgaW50IGNhcDsKIAlzdHJ1Y3QgcG9ydF9pbmZvICpwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbGlua19jb25maWcgKmxjID0gJnAtPmxpbmtfY2ZnOworCXUzMiBzcGVlZCA9IGV0aHRvb2xfY21kX3NwZWVkKGNtZCk7CiAKIAlpZiAoY21kLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpICAgICAvKiBvbmx5IGZ1bGwtZHVwbGV4IHN1cHBvcnRlZCAqLwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE0NjUsMTYgKzE0NzIsMTYgQEAKIAkJICogYmVpbmcgcmVxdWVzdGVkLgogCQkgKi8KIAkJaWYgKGNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUgJiYKLQkJICAgIChsYy0+c3VwcG9ydGVkICYgc3BlZWRfdG9fY2FwcyhjbWQtPnNwZWVkKSkpCi0JCQkJcmV0dXJuIDA7CisJCSAgICAobGMtPnN1cHBvcnRlZCAmIHNwZWVkX3RvX2NhcHMoc3BlZWQpKSkKKwkJCXJldHVybiAwOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSkgewotCQljYXAgPSBzcGVlZF90b19jYXBzKGNtZC0+c3BlZWQpOworCQljYXAgPSBzcGVlZF90b19jYXBzKHNwZWVkKTsKIAotCQlpZiAoIShsYy0+c3VwcG9ydGVkICYgY2FwKSB8fCBjbWQtPnNwZWVkID09IFNQRUVEXzEwMDAgfHwKLQkJICAgIGNtZC0+c3BlZWQgPT0gU1BFRURfMTAwMDApCisJCWlmICghKGxjLT5zdXBwb3J0ZWQgJiBjYXApIHx8IChzcGVlZCA9PSBTUEVFRF8xMDAwKSB8fAorCQkgICAgKHNwZWVkID09IFNQRUVEXzEwMDAwKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlsYy0+cmVxdWVzdGVkX3NwZWVkID0gY2FwOwogCQlsYy0+YWR2ZXJ0aXNpbmcgPSAwOwpAQCAtMTUyNiwyNCArMTUzMyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MzIgZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcG9ydF9pbmZvICpwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybiBwLT5yeF9vZmZsb2FkICYgUlhfQ1NPOwotfQotCi1zdGF0aWMgaW50IHNldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBwb3J0X2luZm8gKnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKGRhdGEpCi0JCXAtPnJ4X29mZmxvYWQgfD0gUlhfQ1NPOwotCWVsc2UKLQkJcC0+cnhfb2ZmbG9hZCAmPSB+UlhfQ1NPOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBnZXRfc2dlX3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqZSkKIHsKIAljb25zdCBzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xODY1LDM2ICsxODU0LDIwIEBACiAJcmV0dXJuIGVycjsKIH0KIAotI2RlZmluZSBUU09fRkxBR1MgKE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082IHwgTkVUSUZfRl9UU09fRUNOKQotCi1zdGF0aWMgaW50IHNldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHZhbHVlKQorc3RhdGljIGludCBjeGdiX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpCiB7Ci0JaWYgKHZhbHVlKQotCQlkZXYtPmZlYXR1cmVzIHw9IFRTT19GTEFHUzsKLQllbHNlCi0JCWRldi0+ZmVhdHVyZXMgJj0gflRTT19GTEFHUzsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZsYWdzKQoteworCWNvbnN0IHN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgY2hhbmdlZCA9IGRldi0+ZmVhdHVyZXMgXiBmZWF0dXJlczsKIAlpbnQgZXJyOwotCXVuc2lnbmVkIGxvbmcgb2xkX2ZlYXQgPSBkZXYtPmZlYXR1cmVzOwogCi0JZXJyID0gZXRodG9vbF9vcF9zZXRfZmxhZ3MoZGV2LCBmbGFncywgRVRIX0ZMQUdfUlhIQVNIIHwKLQkJCQkgICBFVEhfRkxBR19SWFZMQU4gfCBFVEhfRkxBR19UWFZMQU4pOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJaWYgKCEoY2hhbmdlZCAmIE5FVElGX0ZfSFdfVkxBTl9SWCkpCisJCXJldHVybiAwOwogCi0JaWYgKChvbGRfZmVhdCBeIGRldi0+ZmVhdHVyZXMpICYgTkVUSUZfRl9IV19WTEFOX1JYKSB7Ci0JCWNvbnN0IHN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCQllcnIgPSB0NF9zZXRfcnhtb2RlKHBpLT5hZGFwdGVyLCBwaS0+YWRhcHRlci0+Zm4sIHBpLT52aWlkLCAtMSwKLQkJCQkgICAgLTEsIC0xLCAtMSwgISEoZmxhZ3MgJiBFVEhfRkxBR19SWFZMQU4pLAotCQkJCSAgICB0cnVlKTsKLQkJaWYgKGVycikKLQkJCWRldi0+ZmVhdHVyZXMgPSBvbGRfZmVhdDsKLQl9CisJZXJyID0gdDRfc2V0X3J4bW9kZShwaS0+YWRhcHRlciwgcGktPmFkYXB0ZXItPmZuLCBwaS0+dmlpZCwgLTEsCisJCQkgICAgLTEsIC0xLCAtMSwKKwkJCSAgICAhIShmZWF0dXJlcyAmIE5FVElGX0ZfSFdfVkxBTl9SWCksIHRydWUpOworCWlmICh1bmxpa2VseShlcnIpKQorCQlkZXYtPmZlYXR1cmVzID0gZmVhdHVyZXMgXiBORVRJRl9GX0hXX1ZMQU5fUlg7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjAwNSwxMyArMTk3OCw5IEBACiAJLnNldF9lZXByb20gICAgICAgID0gc2V0X2VlcHJvbSwKIAkuZ2V0X3BhdXNlcGFyYW0gICAgPSBnZXRfcGF1c2VwYXJhbSwKIAkuc2V0X3BhdXNlcGFyYW0gICAgPSBzZXRfcGF1c2VwYXJhbSwKLQkuZ2V0X3J4X2NzdW0gICAgICAgPSBnZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0gICAgICAgPSBzZXRfcnhfY3N1bSwKLQkuc2V0X3R4X2NzdW0gICAgICAgPSBldGh0b29sX29wX3NldF90eF9pcHY2X2NzdW0sCi0JLnNldF9zZyAgICAgICAgICAgID0gZXRodG9vbF9vcF9zZXRfc2csCiAJLmdldF9saW5rICAgICAgICAgID0gZXRodG9vbF9vcF9nZXRfbGluaywKIAkuZ2V0X3N0cmluZ3MgICAgICAgPSBnZXRfc3RyaW5ncywKLQkucGh5c19pZCAgICAgICAgICAgPSBpZGVudGlmeV9wb3J0LAorCS5zZXRfcGh5c19pZCAgICAgICA9IGlkZW50aWZ5X3BvcnQsCiAJLm53YXlfcmVzZXQgICAgICAgID0gcmVzdGFydF9hdXRvbmVnLAogCS5nZXRfc3NldF9jb3VudCAgICA9IGdldF9zc2V0X2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IGdldF9zdGF0cywKQEAgLTIwMTksOCArMTk4OCw2IEBACiAJLmdldF9yZWdzICAgICAgICAgID0gZ2V0X3JlZ3MsCiAJLmdldF93b2wgICAgICAgICAgID0gZ2V0X3dvbCwKIAkuc2V0X3dvbCAgICAgICAgICAgPSBzZXRfd29sLAotCS5zZXRfdHNvICAgICAgICAgICA9IHNldF90c28sCi0JLnNldF9mbGFncyAgICAgICAgID0gc2V0X2ZsYWdzLAogCS5nZXRfcnhuZmMgICAgICAgICA9IGdldF9yeG5mYywKIAkuZ2V0X3J4ZmhfaW5kaXIgICAgPSBnZXRfcnNzX3RhYmxlLAogCS5zZXRfcnhmaF9pbmRpciAgICA9IHNldF9yc3NfdGFibGUsCkBAIC0yODc3LDYgKzI4NDQsNyBAQAogCS5uZG9fZ2V0X3N0YXRzNjQgICAgICA9IGN4Z2JfZ2V0X3N0YXRzLAogCS5uZG9fc2V0X3J4X21vZGUgICAgICA9IGN4Z2Jfc2V0X3J4bW9kZSwKIAkubmRvX3NldF9tYWNfYWRkcmVzcyAgPSBjeGdiX3NldF9tYWNfYWRkciwKKwkubmRvX3NldF9mZWF0dXJlcyAgICAgPSBjeGdiX3NldF9mZWF0dXJlcywKIAkubmRvX3ZhbGlkYXRlX2FkZHIgICAgPSBldGhfdmFsaWRhdGVfYWRkciwKIAkubmRvX2RvX2lvY3RsICAgICAgICAgPSBjeGdiX2lvY3RsLAogCS5uZG9fY2hhbmdlX210dSAgICAgICA9IGN4Z2JfY2hhbmdlX210dSwKQEAgLTM1NTksNiArMzUyNyw3IEBACiAJCXQ0X2Z3X2J5ZShhZGFwdGVyLCBhZGFwdGVyLT5mbik7CiB9CiAKKyNkZWZpbmUgVFNPX0ZMQUdTIChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNiB8IE5FVElGX0ZfVFNPX0VDTikKICNkZWZpbmUgVkxBTl9GRUFUIChORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgVFNPX0ZMQUdTIHwgXAogCQkgICBORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfSElHSERNQSkKIApAQCAtMzY2MCwxNCArMzYyOSwxNCBAQAogCQlwaSA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJCXBpLT5hZGFwdGVyID0gYWRhcHRlcjsKIAkJcGktPnhhY3RfYWRkcl9maWx0ID0gLTE7Ci0JCXBpLT5yeF9vZmZsb2FkID0gUlhfQ1NPOwogCQlwaS0+cG9ydF9pZCA9IGk7CiAJCW5ldGRldi0+aXJxID0gcGRldi0+aXJxOwogCi0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IFRTT19GTEFHUzsKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTTsKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0dSTyB8IE5FVElGX0ZfUlhIQVNIIHwgaGlnaGRtYTsKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlg7CisJCW5ldGRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgVFNPX0ZMQUdTIHwKKwkJCU5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNIHwKKwkJCU5FVElGX0ZfUlhDU1VNIHwgTkVUSUZfRl9SWEhBU0ggfAorCQkJTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYOworCQluZXRkZXYtPmZlYXR1cmVzIHw9IG5ldGRldi0+aHdfZmVhdHVyZXMgfCBoaWdoZG1hOwogCQluZXRkZXYtPnZsYW5fZmVhdHVyZXMgPSBuZXRkZXYtPmZlYXR1cmVzICYgVkxBTl9GRUFUOwogCiAJCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZjeGdiNF9uZXRkZXZfb3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjQvc2dlLmMgYi9kcml2ZXJzL25ldC9jeGdiNC9zZ2UuYwppbmRleCAzMTE0NzFiLi41NmFkZjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiNC9zZ2UuYworKysgYi9kcml2ZXJzL25ldC9jeGdiNC9zZ2UuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlIDxuZXQvaXB2Ni5oPgogI2luY2x1ZGUgPG5ldC90Y3AuaD4KICNpbmNsdWRlICJjeGdiNC5oIgpAQCAtMTU1Niw3ICsxNTU3LDYgQEAKIHsKIAlib29sIGNzdW1fb2s7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgcG9ydF9pbmZvICpwaTsKIAljb25zdCBzdHJ1Y3QgY3BsX3J4X3BrdCAqcGt0OwogCXN0cnVjdCBzZ2VfZXRoX3J4cSAqcnhxID0gY29udGFpbmVyX29mKHEsIHN0cnVjdCBzZ2VfZXRoX3J4cSwgcnNwcSk7CiAKQEAgLTE1ODQsMTAgKzE1ODQsOSBAQAogCWlmIChza2ItPmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYSEFTSCkKIAkJc2tiLT5yeGhhc2ggPSAoX19mb3JjZSB1MzIpcGt0LT5yc3NoZHIuaGFzaF92YWw7CiAKLQlwaSA9IG5ldGRldl9wcml2KHNrYi0+ZGV2KTsKIAlyeHEtPnN0YXRzLnBrdHMrKzsKIAotCWlmIChjc3VtX29rICYmIChwaS0+cnhfb2ZmbG9hZCAmIFJYX0NTTykgJiYKKwlpZiAoY3N1bV9vayAmJiAocS0+bmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSAmJgogCSAgICAocGt0LT5sMmluZm8gJiBodG9ubChSWEZfVURQIHwgUlhGX1RDUCkpKSB7CiAJCWlmICghcGt0LT5pcF9mcmFnKSB7CiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjR2Zi9hZGFwdGVyLmggYi9kcml2ZXJzL25ldC9jeGdiNHZmL2FkYXB0ZXIuaAppbmRleCA0NzY2YjQxLi40ZmQ4MjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiNHZmL2FkYXB0ZXIuaAorKysgYi9kcml2ZXJzL25ldC9jeGdiNHZmL2FkYXB0ZXIuaApAQCAtOTcsMTcgKzk3LDExIEBACiAJdTE2IHJzc19zaXplOwkJCS8qIHNpemUgb2YgVkkncyBSU1MgdGFibGUgc2xpY2UgKi8KIAl1OCBwaWR4OwkJCS8qIGluZGV4IGludG8gYWRhcHRlciBwb3J0W10gKi8KIAl1OCBwb3J0X2lkOwkJCS8qIHBoeXNpY2FsIHBvcnQgSUQgKi8KLQl1OCByeF9vZmZsb2FkOwkJCS8qIENTTywgZXRjLiAqLwogCXU4IG5xc2V0czsJCQkvKiAjIG9mICJRdWV1ZSBTZXRzIiAqLwogCXU4IGZpcnN0X3FzZXQ7CQkJLyogaW5kZXggb2YgZmlyc3QgIlF1ZXVlIFNldCIgKi8KIAlzdHJ1Y3QgbGlua19jb25maWcgbGlua19jZmc7CS8qIHBoeXNpY2FsIHBvcnQgY29uZmlndXJhdGlvbiAqLwogfTsKIAotLyogcG9ydF9pbmZvLnJ4X29mZmxvYWQgZmxhZ3MgKi8KLWVudW0gewotCVJYX0NTTyA9IDEgPDwgMCwKLX07Ci0KIC8qCiAgKiBTY2F0dGVyIEdhdGhlciBFbmdpbmUgcmVzb3VyY2VzIGZvciB0aGUgImFkYXB0ZXIiLiAgT3VyIGluZ3Jlc3MgYW5kIGVncmVzcwogICogcXVldWVzIGFyZSBvcmdhbml6ZWQgaW50byAiUXVldWUgU2V0cyIgd2l0aCBvbmUgaW5ncmVzcyBhbmQgb25lIGVncmVzcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjR2Zi9jeGdiNHZmX21haW4uYyBiL2RyaXZlcnMvbmV0L2N4Z2I0dmYvY3hnYjR2Zl9tYWluLmMKaW5kZXggNDY2MWNiYi4uZTcxYzA4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjR2Zi9jeGdiNHZmX21haW4uYworKysgYi9kcml2ZXJzL25ldC9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jCkBAIC0xMTY3LDcgKzExNjcsOCBAQAogCiAJY21kLT5zdXBwb3J0ZWQgPSBwaS0+bGlua19jZmcuc3VwcG9ydGVkOwogCWNtZC0+YWR2ZXJ0aXNpbmcgPSBwaS0+bGlua19jZmcuYWR2ZXJ0aXNpbmc7Ci0JY21kLT5zcGVlZCA9IG5ldGlmX2NhcnJpZXJfb2soZGV2KSA/IHBpLT5saW5rX2NmZy5zcGVlZCA6IC0xOworCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsCisJCQkgICAgICBuZXRpZl9jYXJyaWVyX29rKGRldikgPyBwaS0+bGlua19jZmcuc3BlZWQgOiAtMSk7CiAJY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKIAogCWNtZC0+cG9ydCA9IChjbWQtPnN1cHBvcnRlZCAmIFNVUFBPUlRFRF9UUCkgPyBQT1JUX1RQIDogUE9SVF9GSUJSRTsKQEAgLTEzMjYsMzcgKzEzMjcsMjIgQEAKIH0KIAogLyoKLSAqIFJldHVybiB3aGV0aGVyIFJYIENoZWNrc3VtIE9mZmxvYWRpbmcgaXMgY3VycmVudGx5IGVuYWJsZWQgZm9yIHRoZSBkZXZpY2UuCi0gKi8KLXN0YXRpYyB1MzIgY3hnYjR2Zl9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybiAocGktPnJ4X29mZmxvYWQgJiBSWF9DU08pICE9IDA7Ci19Ci0KLS8qCi0gKiBUdXJuIFJYIENoZWNrc3VtIE9mZmxvYWRpbmcgb24gb3Igb2ZmIGZvciB0aGUgZGV2aWNlLgotICovCi1zdGF0aWMgaW50IGN4Z2I0dmZfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGNzdW0pCi17Ci0Jc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKGNzdW0pCi0JCXBpLT5yeF9vZmZsb2FkIHw9IFJYX0NTTzsKLQllbHNlCi0JCXBpLT5yeF9vZmZsb2FkICY9IH5SWF9DU087Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCiAgKiBJZGVudGlmeSB0aGUgcG9ydCBieSBibGlua2luZyB0aGUgcG9ydCdzIExFRC4KICAqLwotc3RhdGljIGludCBjeGdiNHZmX3BoeXNfaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGlkKQorc3RhdGljIGludCBjeGdiNHZmX3BoeXNfaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIGVudW0gZXRodG9vbF9waHlzX2lkX3N0YXRlIHN0YXRlKQogeworCXVuc2lnbmVkIGludCB2YWw7CiAJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JcmV0dXJuIHQ0dmZfaWRlbnRpZnlfcG9ydChwaS0+YWRhcHRlciwgcGktPnZpaWQsIDUpOworCWlmIChzdGF0ZSA9PSBFVEhUT09MX0lEX0FDVElWRSkKKwkJdmFsID0gMHhmZmZmOworCWVsc2UgaWYgKHN0YXRlID09IEVUSFRPT0xfSURfSU5BQ1RJVkUpCisJCXZhbCA9IDA7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiB0NHZmX2lkZW50aWZ5X3BvcnQocGktPmFkYXB0ZXIsIHBpLT52aWlkLCB2YWwpOwogfQogCiAvKgpAQCAtMTU2MCwxOCArMTU0Niw2IEBACiAgKi8KICNkZWZpbmUgVFNPX0ZMQUdTIChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNiB8IE5FVElGX0ZfVFNPX0VDTikKIAotLyoKLSAqIFNldCBUQ1AgU2VnbWVudGF0aW9uIE9mZmxvYWRpbmcgZmVhdHVyZSBjYXBhYmlsaXRpZXMuCi0gKi8KLXN0YXRpYyBpbnQgY3hnYjR2Zl9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiB0c28pCi17Ci0JaWYgKHRzbykKLQkJZGV2LT5mZWF0dXJlcyB8PSBUU09fRkxBR1M7Ci0JZWxzZQotCQlkZXYtPmZlYXR1cmVzICY9IH5UU09fRkxBR1M7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgY3hnYjR2Zl9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzCQk9IGN4Z2I0dmZfZ2V0X3NldHRpbmdzLAogCS5nZXRfZHJ2aW5mbwkJPSBjeGdiNHZmX2dldF9kcnZpbmZvLApAQCAtMTU4MiwxOSArMTU1NiwxNCBAQAogCS5nZXRfY29hbGVzY2UJCT0gY3hnYjR2Zl9nZXRfY29hbGVzY2UsCiAJLnNldF9jb2FsZXNjZQkJPSBjeGdiNHZmX3NldF9jb2FsZXNjZSwKIAkuZ2V0X3BhdXNlcGFyYW0JCT0gY3hnYjR2Zl9nZXRfcGF1c2VwYXJhbSwKLQkuZ2V0X3J4X2NzdW0JCT0gY3hnYjR2Zl9nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0JCT0gY3hnYjR2Zl9zZXRfcnhfY3N1bSwKLQkuc2V0X3R4X2NzdW0JCT0gZXRodG9vbF9vcF9zZXRfdHhfaXB2Nl9jc3VtLAotCS5zZXRfc2cJCQk9IGV0aHRvb2xfb3Bfc2V0X3NnLAogCS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLAogCS5nZXRfc3RyaW5ncwkJPSBjeGdiNHZmX2dldF9zdHJpbmdzLAotCS5waHlzX2lkCQk9IGN4Z2I0dmZfcGh5c19pZCwKKwkuc2V0X3BoeXNfaWQJCT0gY3hnYjR2Zl9waHlzX2lkLAogCS5nZXRfc3NldF9jb3VudAkJPSBjeGdiNHZmX2dldF9zc2V0X2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cwk9IGN4Z2I0dmZfZ2V0X2V0aHRvb2xfc3RhdHMsCiAJLmdldF9yZWdzX2xlbgkJPSBjeGdiNHZmX2dldF9yZWdzX2xlbiwKIAkuZ2V0X3JlZ3MJCT0gY3hnYjR2Zl9nZXRfcmVncywKIAkuZ2V0X3dvbAkJPSBjeGdiNHZmX2dldF93b2wsCi0JLnNldF90c28JCT0gY3hnYjR2Zl9zZXRfdHNvLAogfTsKIAogLyoKQEAgLTI2MjksMTkgKzI1OTgsMTkgQEAKIAkJICogaXQuCiAJCSAqLwogCQlwaS0+eGFjdF9hZGRyX2ZpbHQgPSAtMTsKLQkJcGktPnJ4X29mZmxvYWQgPSBSWF9DU087CiAJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAJCW5ldGRldi0+aXJxID0gcGRldi0+aXJxOwogCi0JCW5ldGRldi0+ZmVhdHVyZXMgPSAoTkVUSUZfRl9TRyB8IFRTT19GTEFHUyB8Ci0JCQkJICAgIE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNIHwKLQkJCQkgICAgTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYIHwKLQkJCQkgICAgTkVUSUZfRl9HUk8pOworCQluZXRkZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IFRTT19GTEFHUyB8CisJCQlORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSB8CisJCQlORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX1JYQ1NVTTsKKwkJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IFRTT19GTEFHUyB8CisJCQlORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSB8CisJCQlORVRJRl9GX0hJR0hETUE7CisJCW5ldGRldi0+ZmVhdHVyZXMgPSBuZXRkZXYtPmh3X2ZlYXR1cmVzIHwKKwkJCU5FVElGX0ZfSFdfVkxBTl9SWDsKIAkJaWYgKHBjaV91c2luZ19kYWMpCiAJCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKLQkJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzID0KLQkJCShuZXRkZXYtPmZlYXR1cmVzICYKLQkJCSB+KE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWCkpOwogCiAjaWZkZWYgSEFWRV9ORVRfREVWSUNFX09QUwogCQluZXRkZXYtPm5ldGRldl9vcHMgPSAmY3hnYjR2Zl9uZXRkZXZfb3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjR2Zi9zZ2UuYyBiL2RyaXZlcnMvbmV0L2N4Z2I0dmYvc2dlLmMKaW5kZXggYmI2NTEyMS4uNWZkNzVmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjR2Zi9zZ2UuYworKysgYi9kcml2ZXJzL25ldC9jeGdiNHZmL3NnZS5jCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8bmV0L2lwdjYuaD4KICNpbmNsdWRlIDxuZXQvdGNwLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjaW5jbHVkZSAidDR2Zl9jb21tb24uaCIKICNpbmNsdWRlICJ0NHZmX2RlZnMuaCIKQEAgLTE1NTUsOCArMTU1Niw4IEBACiAJcGkgPSBuZXRkZXZfcHJpdihza2ItPmRldik7CiAJcnhxLT5zdGF0cy5wa3RzKys7CiAKLQlpZiAoY3N1bV9vayAmJiAocGktPnJ4X29mZmxvYWQgJiBSWF9DU08pICYmICFwa3QtPmVycl92ZWMgJiYKLQkgICAgKGJlMzJfdG9fY3B1KHBrdC0+bDJpbmZvKSAmIChSWEZfVURQfFJYRl9UQ1ApKSkgeworCWlmIChjc3VtX29rICYmIChyc3BxLT5uZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pICYmCisJICAgICFwa3QtPmVycl92ZWMgJiYgKGJlMzJfdG9fY3B1KHBrdC0+bDJpbmZvKSAmIChSWEZfVURQfFJYRl9UQ1ApKSkgewogCQlpZiAoIXBrdC0+aXBfZnJhZykKIAkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJCWVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGVwY2EuYyBiL2RyaXZlcnMvbmV0L2RlcGNhLmMKaW5kZXggOGIwMDg0ZC4uMTc2NTQwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVwY2EuYworKysgYi9kcml2ZXJzL25ldC9kZXBjYS5jCkBAIC0zMzEsMTggKzMzMSwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICJERTQyMiIsXAogICAgICAgICAgICAgICAgICAgICAgICAgICIifQogCi1zdGF0aWMgY2hhciogX19pbml0ZGF0YSBkZXBjYV9zaWduYXR1cmVbXSA9IERFUENBX1NJR05BVFVSRTsKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkZXBjYV9zaWduYXR1cmVbXSBfX2RldmluaXRjb25zdCA9IERFUENBX1NJR05BVFVSRTsKIAogZW51bSBkZXBjYV90eXBlIHsKIAlERVBDQSwgZGUxMDAsIGRlMTAxLCBkZTIwMCwgZGUyMDEsIGRlMjAyLCBkZTIxMCwgZGUyMTIsIGRlNDIyLCB1bmtub3duCiB9OwogCi1zdGF0aWMgY2hhciBkZXBjYV9zdHJpbmdbXSA9ICJkZXBjYSI7CitzdGF0aWMgY29uc3QgY2hhciBkZXBjYV9zdHJpbmdbXSA9ICJkZXBjYSI7CiAKIHN0YXRpYyBpbnQgZGVwY2FfZGV2aWNlX3JlbW92ZSAoc3RydWN0IGRldmljZSAqZGV2aWNlKTsKIAogI2lmZGVmIENPTkZJR19FSVNBCi1zdGF0aWMgc3RydWN0IGVpc2FfZGV2aWNlX2lkIGRlcGNhX2Vpc2FfaWRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGVpc2FfZGV2aWNlX2lkIGRlcGNhX2Vpc2FfaWRzW10gX19kZXZpbml0Y29uc3QgPSB7CiAJeyAiREVDNDIyMCIsIGRlNDIyIH0sCiAJeyAiIiB9CiB9OwpAQCAtMzY3LDE5ICszNjcsMTkgQEAKICNkZWZpbmUgREUyMTBfSUQgMHg2MjhkCiAjZGVmaW5lIERFMjEyX0lEIDB4NmRlZgogCi1zdGF0aWMgc2hvcnQgZGVwY2FfbWNhX2FkYXB0ZXJfaWRzW10gPSB7CitzdGF0aWMgY29uc3Qgc2hvcnQgZGVwY2FfbWNhX2FkYXB0ZXJfaWRzW10gX19kZXZpbml0Y29uc3QgPSB7CiAJREUyMTBfSUQsCiAJREUyMTJfSUQsCiAJMHgwMDAwCiB9OwogCi1zdGF0aWMgY2hhciAqZGVwY2FfbWNhX2FkYXB0ZXJfbmFtZVtdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmRlcGNhX21jYV9hZGFwdGVyX25hbWVbXSA9IHsKIAkiREVDIEV0aGVyV09SS1MgTUMgQWRhcHRlciAoREUyMTApIiwKIAkiREVDIEV0aGVyV09SS1MgTUMgQWRhcHRlciAoREUyMTIpIiwKIAlOVUxMCiB9OwogCi1zdGF0aWMgZW51bSBkZXBjYV90eXBlIGRlcGNhX21jYV9hZGFwdGVyX3R5cGVbXSA9IHsKK3N0YXRpYyBjb25zdCBlbnVtIGRlcGNhX3R5cGUgZGVwY2FfbWNhX2FkYXB0ZXJfdHlwZVtdID0gewogCWRlMjEwLAogCWRlMjEyLAogCTAKQEAgLTU0MSwxMCArNTQxLDkgQEAKIHN0YXRpYyBpbnQgbG9hZF9wYWNrZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBzdGF0aWMgdm9pZCBkZXBjYV9kYmdfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAotc3RhdGljIHVfY2hhciBkZTF4eF9pcnFbXSBfX2luaXRkYXRhID0geyAyLCAzLCA0LCA1LCA3LCA5LCAwIH07Ci1zdGF0aWMgdV9jaGFyIGRlMnh4X2lycVtdIF9faW5pdGRhdGEgPSB7IDUsIDksIDEwLCAxMSwgMTUsIDAgfTsKLXN0YXRpYyB1X2NoYXIgZGU0MjJfaXJxW10gX19pbml0ZGF0YSA9IHsgNSwgOSwgMTAsIDExLCAwIH07Ci1zdGF0aWMgdV9jaGFyICpkZXBjYV9pcnE7CitzdGF0aWMgY29uc3QgdV9jaGFyIGRlMXh4X2lycVtdIF9fZGV2aW5pdGNvbnN0ID0geyAyLCAzLCA0LCA1LCA3LCA5LCAwIH07CitzdGF0aWMgY29uc3QgdV9jaGFyIGRlMnh4X2lycVtdIF9fZGV2aW5pdGNvbnN0ID0geyA1LCA5LCAxMCwgMTEsIDE1LCAwIH07CitzdGF0aWMgY29uc3QgdV9jaGFyIGRlNDIyX2lycVtdIF9fZGV2aW5pdGNvbnN0ID0geyA1LCA5LCAxMCwgMTEsIDAgfTsKIAogc3RhdGljIGludCBpcnE7CiBzdGF0aWMgaW50IGlvOwpAQCAtNTgwLDcgKzU3OSw3IEBACiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBkZXBjYV9od19pbml0IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkZXBjYV9od19pbml0IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IGRlcGNhX3ByaXZhdGUgKmxwOwogCWludCBpLCBqLCBvZmZzZXQsIG5ldFJBTSwgbWVtX2xlbiwgc3RhdHVzID0gMDsKQEAgLTc0OCw2ICs3NDcsNyBAQAogCWlmIChkZXYtPmlycSA8IDIpIHsKIAkJdW5zaWduZWQgY2hhciBpcnFudW07CiAJCXVuc2lnbmVkIGxvbmcgaXJxX21hc2ssIGRlbGF5OworCQljb25zdCB1X2NoYXIgKmRlcGNhX2lycTsKIAogCQlpcnFfbWFzayA9IHByb2JlX2lycV9vbigpOwogCkBAIC03NzAsNiArNzcwLDcgQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CisJCQlkZXBjYV9pcnEgPSBOVUxMOwogCQkJYnJlYWs7CS8qIE5vdCByZWFjaGVkICovCiAJCX0KIApAQCAtMTMwMiw3ICsxMzAzLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGRlcGNhX2NvbW1vbl9pbml0ICh1X2xvbmcgaW9hZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqKmRldnApCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkZXBjYV9jb21tb25faW5pdCAodV9sb25nIGlvYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKipkZXZwKQogewogCWludCBzdGF0dXMgPSAwOwogCkBAIC0xMzMzLDcgKzEzMzQsNyBAQAogLyoKICoqIE1pY3JvY2hhbm5lbCBidXMgSS9PIGRldmljZSBwcm9iZQogKi8KLXN0YXRpYyBpbnQgX19pbml0IGRlcGNhX21jYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkZXBjYV9tY2FfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQogewogCXVuc2lnbmVkIGNoYXIgcG9zWzJdOwogCXVuc2lnbmVkIGNoYXIgd2hlcmU7CkBAIC0xNDU3LDcgKzE0NTgsNyBAQAogKiogSVNBIGJ1cyBJL08gZGV2aWNlIHByb2JlCiAqLwogCi1zdGF0aWMgdm9pZCBfX2luaXQgZGVwY2FfcGxhdGZvcm1fcHJvYmUgKHZvaWQpCitzdGF0aWMgdm9pZCBfX2RldmluaXQgZGVwY2FfcGxhdGZvcm1fcHJvYmUgKHZvaWQpCiB7CiAJaW50IGk7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxkZXY7CkBAIC0xNDk3LDcgKzE0OTgsNyBAQAogCX0KIH0KIAotc3RhdGljIGVudW0gZGVwY2FfdHlwZSBfX2luaXQgZGVwY2Ffc2htZW1fcHJvYmUgKHVsb25nICptZW1fc3RhcnQpCitzdGF0aWMgZW51bSBkZXBjYV90eXBlIF9fZGV2aW5pdCBkZXBjYV9zaG1lbV9wcm9iZSAodWxvbmcgKm1lbV9zdGFydCkKIHsKIAl1X2xvbmcgbWVtX2Jhc2VbXSA9IERFUENBX1JBTV9CQVNFX0FERFJFU1NFUzsKIAllbnVtIGRlcGNhX3R5cGUgYWRhcHRlciA9IHVua25vd247CkBAIC0xNTU4LDcgKzE1NTksNyBAQAogKi8KIAogI2lmZGVmIENPTkZJR19FSVNBCi1zdGF0aWMgaW50IF9faW5pdCBkZXBjYV9laXNhX3Byb2JlIChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkZXBjYV9laXNhX3Byb2JlIChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiB7CiAJZW51bSBkZXBjYV90eXBlIGFkYXB0ZXIgPSB1bmtub3duOwogCXN0cnVjdCBlaXNhX2RldmljZSAqZWRldjsKQEAgLTE2MjksNyArMTYzMCw3IEBACiAqKiBhbmQgQm9vdCAocmVhZGIpIFJPTS4gVGhpcyB3aWxsIGFsc28gZ2l2ZSB1cyBhIGNsdWUgdG8gdGhlIG5ldHdvcmsgUkFNCiAqKiBiYXNlIGFkZHJlc3MuCiAqLwotc3RhdGljIGludCBfX2luaXQgRGVwY2FTaWduYXR1cmUoY2hhciAqbmFtZSwgdV9sb25nIGJhc2VfYWRkcikKK3N0YXRpYyBpbnQgX19kZXZpbml0IERlcGNhU2lnbmF0dXJlKGNoYXIgKm5hbWUsIHVfbG9uZyBiYXNlX2FkZHIpCiB7CiAJdV9pbnQgaSwgaiwgazsKIAl2b2lkIF9faW9tZW0gKnB0cjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RsMmsuYyBiL2RyaXZlcnMvbmV0L2RsMmsuYwppbmRleCBjMDVkYjYwLi5jNDQ1NDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbDJrLmMKKysrIGIvZHJpdmVycy9uZXQvZGwyay5jCkBAIC0xMTg5LDEwICsxMTg5LDEwIEBACiAJCWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOwogCX0KIAlpZiAoIG5wLT5saW5rX3N0YXR1cyApIHsKLQkJY21kLT5zcGVlZCA9IG5wLT5zcGVlZDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgbnAtPnNwZWVkKTsKIAkJY21kLT5kdXBsZXggPSBucC0+ZnVsbF9kdXBsZXggPyBEVVBMRVhfRlVMTCA6IERVUExFWF9IQUxGOwogCX0gZWxzZSB7Ci0JCWNtZC0+c3BlZWQgPSAtMTsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgLTEpOwogCQljbWQtPmR1cGxleCA9IC0xOwogCX0KIAlpZiAoIG5wLT5hbl9lbmFibGUpCkBAIC0xMjE5LDMxICsxMjE5LDIwIEBACiAJfSBlbHNlIHsKIAkJbnAtPmFuX2VuYWJsZSA9IDA7CiAJCWlmIChucC0+c3BlZWQgPT0gMTAwMCkgewotCQkJY21kLT5zcGVlZCA9IFNQRUVEXzEwMDsKKwkJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIFNQRUVEXzEwMCk7CiAJCQljbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOwogCQkJcHJpbnRrKCJXYXJuaW5nISEgQ2FuJ3QgZGlzYWJsZSBBdXRvIG5lZ290aWF0aW9uIGluIDEwMDBNYnBzLCBjaGFuZ2UgdG8gTWFudWFsIDEwME1icHMsIEZ1bGwgZHVwbGV4LlxuIik7CiAJCX0KLQkJc3dpdGNoKGNtZC0+c3BlZWQgKyBjbWQtPmR1cGxleCkgewotCi0JCWNhc2UgU1BFRURfMTAgKyBEVVBMRVhfSEFMRjoKKwkJc3dpdGNoIChldGh0b29sX2NtZF9zcGVlZChjbWQpKSB7CisJCWNhc2UgU1BFRURfMTA6CiAJCQlucC0+c3BlZWQgPSAxMDsKLQkJCW5wLT5mdWxsX2R1cGxleCA9IDA7CisJCQlucC0+ZnVsbF9kdXBsZXggPSAoY21kLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpOwogCQkJYnJlYWs7Ci0KLQkJY2FzZSBTUEVFRF8xMCArIERVUExFWF9GVUxMOgotCQkJbnAtPnNwZWVkID0gMTA7Ci0JCQlucC0+ZnVsbF9kdXBsZXggPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1BFRURfMTAwICsgRFVQTEVYX0hBTEY6CisJCWNhc2UgU1BFRURfMTAwOgogCQkJbnAtPnNwZWVkID0gMTAwOwotCQkJbnAtPmZ1bGxfZHVwbGV4ID0gMDsKKwkJCW5wLT5mdWxsX2R1cGxleCA9IChjbWQtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCk7CiAJCQlicmVhazsKLQkJY2FzZSBTUEVFRF8xMDAgKyBEVVBMRVhfRlVMTDoKLQkJCW5wLT5zcGVlZCA9IDEwMDsKLQkJCW5wLT5mdWxsX2R1cGxleCA9IDE7Ci0JCQlicmVhazsKLQkJY2FzZSBTUEVFRF8xMDAwICsgRFVQTEVYX0hBTEY6Lyogbm90IHN1cHBvcnRlZCAqLwotCQljYXNlIFNQRUVEXzEwMDAgKyBEVVBMRVhfRlVMTDovKiBub3Qgc3VwcG9ydGVkICovCisJCWNhc2UgU1BFRURfMTAwMDogLyogbm90IHN1cHBvcnRlZCAqLwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RtOTAwMC5jIGIvZHJpdmVycy9uZXQvZG05MDAwLmMKaW5kZXggYjdhZjViYS4uZmJhZmYzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZG05MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvZG05MDAwLmMKQEAgLTEzMSw4ICsxMzEsNiBAQAogCXUzMgkJbXNnX2VuYWJsZTsKIAl1MzIJCXdha2Vfc3RhdGU7CiAKLQlpbnQJCXJ4X2NzdW07Ci0JaW50CQljYW5fY3N1bTsKIAlpbnQJCWlwX3N1bW1lZDsKIH0gYm9hcmRfaW5mb190OwogCkBAIC00NzAsNDcgKzQ2OCwyMCBAQAogCXJldHVybiBtaWlfbndheV9yZXN0YXJ0KCZkbS0+bWlpKTsKIH0KIAotc3RhdGljIHVpbnQzMl90IGRtOTAwMF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBkbTkwMDBfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKIHsKIAlib2FyZF9pbmZvX3QgKmRtID0gdG9fZG05MDAwX2JvYXJkKGRldik7Ci0JcmV0dXJuIGRtLT5yeF9jc3VtOwotfQotCi1zdGF0aWMgaW50IGRtOTAwMF9zZXRfcnhfY3N1bV91bmxvY2tlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1aW50MzJfdCBkYXRhKQotewotCWJvYXJkX2luZm9fdCAqZG0gPSB0b19kbTkwMDBfYm9hcmQoZGV2KTsKLQotCWlmIChkbS0+Y2FuX2NzdW0pIHsKLQkJZG0tPnJ4X2NzdW0gPSBkYXRhOwotCQlpb3coZG0sIERNOTAwMF9SQ1NSLCBkbS0+cnhfY3N1bSA/IFJDU1JfQ1NVTSA6IDApOwotCi0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAtRU9QTk9UU1VQUDsKLX0KLQotc3RhdGljIGludCBkbTkwMDBfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdWludDMyX3QgZGF0YSkKLXsKLQlib2FyZF9pbmZvX3QgKmRtID0gdG9fZG05MDAwX2JvYXJkKGRldik7CisJdTMyIGNoYW5nZWQgPSBkZXYtPmZlYXR1cmVzIF4gZmVhdHVyZXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0OworCisJaWYgKCEoY2hhbmdlZCAmIE5FVElGX0ZfUlhDU1VNKSkKKwkJcmV0dXJuIDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZG0tPmxvY2ssIGZsYWdzKTsKLQlyZXQgPSBkbTkwMDBfc2V0X3J4X2NzdW1fdW5sb2NrZWQoZGV2LCBkYXRhKTsKKwlpb3coZG0sIERNOTAwMF9SQ1NSLCAoZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkgPyBSQ1NSX0NTVU0gOiAwKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbS0+bG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBkbTkwMDBfc2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdWludDMyX3QgZGF0YSkKLXsKLQlib2FyZF9pbmZvX3QgKmRtID0gdG9fZG05MDAwX2JvYXJkKGRldik7Ci0JaW50IHJldCA9IC1FT1BOT1RTVVBQOwotCi0JaWYgKGRtLT5jYW5fY3N1bSkKLQkJcmV0ID0gZXRodG9vbF9vcF9zZXRfdHhfY3N1bShkZXYsIGRhdGEpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB1MzIgZG05MDAwX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC02NDMsMTAgKzYxNCw2IEBACiAgCS5nZXRfZWVwcm9tX2xlbgkJPSBkbTkwMDBfZ2V0X2VlcHJvbV9sZW4sCiAgCS5nZXRfZWVwcm9tCQk9IGRtOTAwMF9nZXRfZWVwcm9tLAogIAkuc2V0X2VlcHJvbQkJPSBkbTkwMDBfc2V0X2VlcHJvbSwKLQkuZ2V0X3J4X2NzdW0JCT0gZG05MDAwX2dldF9yeF9jc3VtLAotCS5zZXRfcnhfY3N1bQkJPSBkbTkwMDBfc2V0X3J4X2NzdW0sCi0JLmdldF90eF9jc3VtCQk9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCi0JLnNldF90eF9jc3VtCQk9IGRtOTAwMF9zZXRfdHhfY3N1bSwKIH07CiAKIHN0YXRpYyB2b2lkIGRtOTAwMF9zaG93X2NhcnJpZXIoYm9hcmRfaW5mb190ICpkYiwKQEAgLTgwMCw3ICs3NjcsOSBAQAogCWRiLT5pb19tb2RlID0gaW9yKGRiLCBETTkwMDBfSVNSKSA+PiA2OwkvKiBJU1IgYml0Nzo2IGtlZXBzIEkvTyBtb2RlICovCiAKIAkvKiBDaGVja3N1bSBtb2RlICovCi0JZG05MDAwX3NldF9yeF9jc3VtX3VubG9ja2VkKGRldiwgZGItPnJ4X2NzdW0pOworCWlmIChkZXYtPmh3X2ZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pCisJCWlvdyhkYiwgRE05MDAwX1JDU1IsCisJCQkoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSA/IFJDU1JfQ1NVTSA6IDApOwogCiAJaW93KGRiLCBETTkwMDBfR1BDUiwgR1BDUl9HRVBfQ05UTCk7CS8qIExldCBHUElPMCBvdXRwdXQgKi8KIApAQCAtMTA0OSw3ICsxMDE4LDcgQEAKIAogCQkJLyogUGFzcyB0byB1cHBlciBsYXllciAqLwogCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKLQkJCWlmIChkYi0+cnhfY3N1bSkgeworCQkJaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkgewogCQkJCWlmICgoKChyeGJ5dGUgJiAweDFjKSA8PCAzKSAmIHJ4Ynl0ZSkgPT0gMCkKIAkJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAkJCQllbHNlCkBAIC0xMzU4LDYgKzEzMjcsNyBAQAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gZG05MDAwX2hhc2hfdGFibGUsCiAJLm5kb19kb19pb2N0bAkJPSBkbTkwMDBfaW9jdGwsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X2ZlYXR1cmVzCT0gZG05MDAwX3NldF9mZWF0dXJlcywKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGV0aF9tYWNfYWRkciwKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgpAQCAtMTU1MSw5ICsxNTIxLDggQEAKIAogCS8qIGRtOTAwMGEvYiBhcmUgY2FwYWJsZSBvZiBoYXJkd2FyZSBjaGVja3N1bSBvZmZsb2FkICovCiAJaWYgKGRiLT50eXBlID09IFRZUEVfRE05MDAwQSB8fCBkYi0+dHlwZSA9PSBUWVBFX0RNOTAwMEIpIHsKLQkJZGItPmNhbl9jc3VtID0gMTsKLQkJZGItPnJ4X2NzdW0gPSAxOwotCQluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU07CisJCW5kZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9SWENTVU0gfCBORVRJRl9GX0lQX0NTVU07CisJCW5kZXYtPmZlYXR1cmVzIHw9IG5kZXYtPmh3X2ZlYXR1cmVzOwogCX0KIAogCS8qIGZyb20gdGhpcyBwb2ludCB3ZSBhc3N1bWUgdGhhdCB3ZSBoYXZlIGZvdW5kIGEgRE05MDAwICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kdW1teS5jIGIvZHJpdmVycy9uZXQvZHVtbXkuYwppbmRleCBmZjJkMjliLi4zOWNmOWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kdW1teS5jCisrKyBiL2RyaXZlcnMvbmV0L2R1bW15LmMKQEAgLTE2OCwxMCArMTY4LDYgQEAKIAlpZiAoIWRldl9kdW1teSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQllcnIgPSBkZXZfYWxsb2NfbmFtZShkZXZfZHVtbXksIGRldl9kdW1teS0+bmFtZSk7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gZXJyOwotCiAJZGV2X2R1bW15LT5ydG5sX2xpbmtfb3BzID0gJmR1bW15X2xpbmtfb3BzOwogCWVyciA9IHJlZ2lzdGVyX25ldGRldmljZShkZXZfZHVtbXkpOwogCWlmIChlcnIgPCAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMC5jIGIvZHJpdmVycy9uZXQvZTEwMC5jCmluZGV4IGIwYWE5ZTYuLmUzMzZjNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAuYworKysgYi9kcml2ZXJzL25ldC9lMTAwLmMKQEAgLTU5Myw3ICs1OTMsNiBAQAogCWVudW0gcGh5IHBoeTsKIAlzdHJ1Y3QgcGFyYW1zIHBhcmFtczsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB3YXRjaGRvZzsKLQlzdHJ1Y3QgdGltZXJfbGlzdCBibGlua190aW1lcjsKIAlzdHJ1Y3QgbWlpX2lmX2luZm8gbWlpOwogCXN0cnVjdCB3b3JrX3N0cnVjdCB0eF90aW1lb3V0X3Rhc2s7CiAJZW51bSBsb29wYmFjayBsb29wYmFjazsKQEAgLTYxOCw3ICs2MTcsNiBAQAogCXUzMiByeF90Y29fZnJhbWVzOwogCXUzMiByeF9vdmVyX2xlbmd0aF9lcnJvcnM7CiAKLQl1MTYgbGVkczsKIAl1MTYgZWVwcm9tX3djOwogCV9fbGUxNiBlZXByb21bMjU2XTsKIAlzcGlubG9ja190IG1kaW9fbG9jazsKQEAgLTE1MTIsNyArMTUxMCw3IEBACiAKIHN0YXRpYyBpbnQgZTEwMF9od19pbml0KHN0cnVjdCBuaWMgKm5pYykKIHsKLQlpbnQgZXJyOworCWludCBlcnIgPSAwOwogCiAJZTEwMF9od19yZXNldChuaWMpOwogCkBAIC0xNjY4LDcgKzE2NjYsOCBAQAogc3RhdGljIHZvaWQgZTEwMF93YXRjaGRvZyh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IG5pYyAqbmljID0gKHN0cnVjdCBuaWMgKilkYXRhOwotCXN0cnVjdCBldGh0b29sX2NtZCBjbWQ7CisJc3RydWN0IGV0aHRvb2xfY21kIGNtZCA9IHsgLmNtZCA9IEVUSFRPT0xfR1NFVCB9OworCXUzMiBzcGVlZDsKIAogCW5ldGlmX3ByaW50ayhuaWMsIHRpbWVyLCBLRVJOX0RFQlVHLCBuaWMtPm5ldGRldiwKIAkJICAgICAicmlnaHQgbm93ID0gJWxkXG4iLCBqaWZmaWVzKTsKQEAgLTE2NzYsMTAgKzE2NzUsMTEgQEAKIAkvKiBtaWkgbGlicmFyeSBoYW5kbGVzIGxpbmsgbWFpbnRlbmFuY2UgdGFza3MgKi8KIAogCW1paV9ldGh0b29sX2dzZXQoJm5pYy0+bWlpLCAmY21kKTsKKwlzcGVlZCA9IGV0aHRvb2xfY21kX3NwZWVkKCZjbWQpOwogCiAJaWYgKG1paV9saW5rX29rKCZuaWMtPm1paSkgJiYgIW5ldGlmX2NhcnJpZXJfb2sobmljLT5uZXRkZXYpKSB7CiAJCW5ldGRldl9pbmZvKG5pYy0+bmV0ZGV2LCAiTklDIExpbmsgaXMgVXAgJXUgTWJwcyAlcyBEdXBsZXhcbiIsCi0JCQkgICAgY21kLnNwZWVkID09IFNQRUVEXzEwMCA/IDEwMCA6IDEwLAorCQkJICAgIHNwZWVkID09IFNQRUVEXzEwMCA/IDEwMCA6IDEwLAogCQkJICAgIGNtZC5kdXBsZXggPT0gRFVQTEVYX0ZVTEwgPyAiRnVsbCIgOiAiSGFsZiIpOwogCX0gZWxzZSBpZiAoIW1paV9saW5rX29rKCZuaWMtPm1paSkgJiYgbmV0aWZfY2Fycmllcl9vayhuaWMtPm5ldGRldikpIHsKIAkJbmV0ZGV2X2luZm8obmljLT5uZXRkZXYsICJOSUMgTGluayBpcyBEb3duXG4iKTsKQEAgLTE2OTgsMTMgKzE2OTgsMTMgQEAKIAlzcGluX3VubG9ja19pcnEoJm5pYy0+Y21kX2xvY2spOwogCiAJZTEwMF91cGRhdGVfc3RhdHMobmljKTsKLQllMTAwX2FkanVzdF9hZGFwdGl2ZV9pZnMobmljLCBjbWQuc3BlZWQsIGNtZC5kdXBsZXgpOworCWUxMDBfYWRqdXN0X2FkYXB0aXZlX2lmcyhuaWMsIHNwZWVkLCBjbWQuZHVwbGV4KTsKIAogCWlmIChuaWMtPm1hYyA8PSBtYWNfODI1NTdfRDEwMF9DKQogCQkvKiBJc3N1ZSBhIG11bHRpY2FzdCBjb21tYW5kIHRvIHdvcmthcm91bmQgYSA1NTcgbG9jayB1cCAqLwogCQllMTAwX3NldF9tdWx0aWNhc3RfbGlzdChuaWMtPm5ldGRldik7CiAKLQlpZiAobmljLT5mbGFncyAmIGljaCAmJiBjbWQuc3BlZWQ9PVNQRUVEXzEwICYmIGNtZC5kdXBsZXg9PURVUExFWF9IQUxGKQorCWlmIChuaWMtPmZsYWdzICYgaWNoICYmIHNwZWVkID09IFNQRUVEXzEwICYmIGNtZC5kdXBsZXggPT0gRFVQTEVYX0hBTEYpCiAJCS8qIE5lZWQgU1cgd29ya2Fyb3VuZCBmb3IgSUNIW3hdIDEwTWJwcy9oYWxmIGR1cGxleCBUeCBoYW5nLiAqLwogCQluaWMtPmZsYWdzIHw9IGljaF8xMGhfd29ya2Fyb3VuZDsKIAllbHNlCkBAIC0yMzUxLDMwICsyMzUxLDYgQEAKICNkZWZpbmUgRTEwMF84MjU1Ml9MRURfT1ZFUlJJREUgMHgxOQogI2RlZmluZSBFMTAwXzgyNTUyX0xFRF9PTiAgICAgICAweDAwMEYgLyogTEVEVFggYW5kIExFRF9SWCBib3RoIG9uICovCiAjZGVmaW5lIEUxMDBfODI1NTJfTEVEX09GRiAgICAgIDB4MDAwQSAvKiBMRURUWCBhbmQgTEVEX1JYIGJvdGggb2ZmICovCi1zdGF0aWMgdm9pZCBlMTAwX2JsaW5rX2xlZCh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IG5pYyAqbmljID0gKHN0cnVjdCBuaWMgKilkYXRhOwotCWVudW0gbGVkX3N0YXRlIHsKLQkJbGVkX29uICAgICA9IDB4MDEsCi0JCWxlZF9vZmYgICAgPSAweDA0LAotCQlsZWRfb25fNTU5ID0gMHgwNSwKLQkJbGVkX29uXzU1NyA9IDB4MDcsCi0JfTsKLQl1MTYgbGVkX3JlZyA9IE1JSV9MRURfQ09OVFJPTDsKLQotCWlmIChuaWMtPnBoeSA9PSBwaHlfODI1NTJfdikgewotCQlsZWRfcmVnID0gRTEwMF84MjU1Ml9MRURfT1ZFUlJJREU7Ci0KLQkJbmljLT5sZWRzID0gKG5pYy0+bGVkcyA9PSBFMTAwXzgyNTUyX0xFRF9PTikgPwotCQkgICAgICAgICAgICBFMTAwXzgyNTUyX0xFRF9PRkYgOiBFMTAwXzgyNTUyX0xFRF9PTjsKLQl9IGVsc2UgewotCQluaWMtPmxlZHMgPSAobmljLT5sZWRzICYgbGVkX29uKSA/IGxlZF9vZmYgOgotCQkgICAgICAgICAgICAobmljLT5tYWMgPCBtYWNfODI1NTlfRDEwMU0pID8gbGVkX29uXzU1NyA6Ci0JCSAgICAgICAgICAgIGxlZF9vbl81NTk7Ci0JfQotCW1kaW9fd3JpdGUobmljLT5uZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgbGVkX3JlZywgbmljLT5sZWRzKTsKLQltb2RfdGltZXIoJm5pYy0+YmxpbmtfdGltZXIsIGppZmZpZXMgKyBIWiAvIDQpOwotfQogCiBzdGF0aWMgaW50IGUxMDBfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewpAQCAtMjU5OCwxOSArMjU3NCwzOCBAQAogCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDQgKiAxMDAwKTsKIH0KIAotc3RhdGljIGludCBlMTAwX3BoeXNfaWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGRhdGEpCitzdGF0aWMgaW50IGUxMDBfc2V0X3BoeXNfaWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgICBlbnVtIGV0aHRvb2xfcGh5c19pZF9zdGF0ZSBzdGF0ZSkKIHsKIAlzdHJ1Y3QgbmljICpuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWVudW0gbGVkX3N0YXRlIHsKKwkJbGVkX29uICAgICA9IDB4MDEsCisJCWxlZF9vZmYgICAgPSAweDA0LAorCQlsZWRfb25fNTU5ID0gMHgwNSwKKwkJbGVkX29uXzU1NyA9IDB4MDcsCisJfTsKIAl1MTYgbGVkX3JlZyA9IChuaWMtPnBoeSA9PSBwaHlfODI1NTJfdikgPyBFMTAwXzgyNTUyX0xFRF9PVkVSUklERSA6Ci0JICAgICAgICAgICAgICBNSUlfTEVEX0NPTlRST0w7CisJCU1JSV9MRURfQ09OVFJPTDsKKwl1MTYgbGVkcyA9IDA7CiAKLQlpZiAoIWRhdGEgfHwgZGF0YSA+ICh1MzIpKE1BWF9TQ0hFRFVMRV9USU1FT1VUIC8gSFopKQotCQlkYXRhID0gKHUzMikoTUFYX1NDSEVEVUxFX1RJTUVPVVQgLyBIWik7Ci0JbW9kX3RpbWVyKCZuaWMtPmJsaW5rX3RpbWVyLCBqaWZmaWVzKTsKLQltc2xlZXBfaW50ZXJydXB0aWJsZShkYXRhICogMTAwMCk7Ci0JZGVsX3RpbWVyX3N5bmMoJm5pYy0+YmxpbmtfdGltZXIpOwotCW1kaW9fd3JpdGUobmV0ZGV2LCBuaWMtPm1paS5waHlfaWQsIGxlZF9yZWcsIDApOworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIEVUSFRPT0xfSURfQUNUSVZFOgorCQlyZXR1cm4gMjsKIAorCWNhc2UgRVRIVE9PTF9JRF9PTjoKKwkJbGVkcyA9IChuaWMtPnBoeSA9PSBwaHlfODI1NTJfdikgPyBFMTAwXzgyNTUyX0xFRF9PTiA6CisJCSAgICAgICAobmljLT5tYWMgPCBtYWNfODI1NTlfRDEwMU0pID8gbGVkX29uXzU1NyA6IGxlZF9vbl81NTk7CisJCWJyZWFrOworCisJY2FzZSBFVEhUT09MX0lEX09GRjoKKwkJbGVkcyA9IChuaWMtPnBoeSA9PSBwaHlfODI1NTJfdikgPyBFMTAwXzgyNTUyX0xFRF9PRkYgOiBsZWRfb2ZmOworCQlicmVhazsKKworCWNhc2UgRVRIVE9PTF9JRF9JTkFDVElWRToKKwkJYnJlYWs7CisJfQorCisJbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgbGVkX3JlZywgbGVkcyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI2OTEsNyArMjY4Niw3IEBACiAJLnNldF9yaW5ncGFyYW0JCT0gZTEwMF9zZXRfcmluZ3BhcmFtLAogCS5zZWxmX3Rlc3QJCT0gZTEwMF9kaWFnX3Rlc3QsCiAJLmdldF9zdHJpbmdzCQk9IGUxMDBfZ2V0X3N0cmluZ3MsCi0JLnBoeXNfaWQJCT0gZTEwMF9waHlzX2lkLAorCS5zZXRfcGh5c19pZAkJPSBlMTAwX3NldF9waHlzX2lkLAogCS5nZXRfZXRodG9vbF9zdGF0cwk9IGUxMDBfZ2V0X2V0aHRvb2xfc3RhdHMsCiAJLmdldF9zc2V0X2NvdW50CQk9IGUxMDBfZ2V0X3NzZXRfY291bnQsCiB9OwpAQCAtMjgzMiw5ICsyODI3LDYgQEAKIAlpbml0X3RpbWVyKCZuaWMtPndhdGNoZG9nKTsKIAluaWMtPndhdGNoZG9nLmZ1bmN0aW9uID0gZTEwMF93YXRjaGRvZzsKIAluaWMtPndhdGNoZG9nLmRhdGEgPSAodW5zaWduZWQgbG9uZyluaWM7Ci0JaW5pdF90aW1lcigmbmljLT5ibGlua190aW1lcik7Ci0JbmljLT5ibGlua190aW1lci5mdW5jdGlvbiA9IGUxMDBfYmxpbmtfbGVkOwotCW5pYy0+YmxpbmtfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKW5pYzsKIAogCUlOSVRfV09SSygmbmljLT50eF90aW1lb3V0X3Rhc2ssIGUxMDBfdHhfdGltZW91dF90YXNrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaCBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwLmgKaW5kZXggYTg4MWRkMC4uODY3Njg5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oCkBAIC0yMzgsOSArMjM4LDYgQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzazsKIAl1OCBmY19hdXRvbmVnOwogCi0Jc3RydWN0IHRpbWVyX2xpc3QgYmxpbmtfdGltZXI7Ci0JdW5zaWduZWQgbG9uZyBsZWRfc3RhdHVzOwotCiAJLyogVFggKi8KIAlzdHJ1Y3QgZTEwMDBfdHhfcmluZyAqdHhfcmluZzsgICAgICAvKiBPbmUgcGVyIGFjdGl2ZSBxdWV1ZSAqLwogCXVuc2lnbmVkIGludCByZXN0YXJ0X3F1ZXVlOwpAQCAtMzQ5LDcgKzM0Niw3IEBACiBleHRlcm4gdm9pZCBlMTAwMF9kb3duKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiB2b2lkIGUxMDAwX3JlaW5pdF9sb2NrZWQoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIHZvaWQgZTEwMDBfcmVzZXQoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwotZXh0ZXJuIGludCBlMTAwMF9zZXRfc3BkX2RwbHgoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBzcGRkcGx4KTsKK2V4dGVybiBpbnQgZTEwMDBfc2V0X3NwZF9kcGx4KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1MzIgc3BkLCB1OCBkcGx4KTsKIGV4dGVybiBpbnQgZTEwMDBfc2V0dXBfYWxsX3J4X3Jlc291cmNlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gaW50IGUxMDAwX3NldHVwX2FsbF90eF9yZXNvdXJjZXMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIHZvaWQgZTEwMDBfZnJlZV9hbGxfcnhfcmVzb3VyY2VzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYwppbmRleCBkZDcwNzM4Li5lYzBmYTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jCkBAIC0xNTgsNyArMTU4LDcgQEAKIAogCQllMTAwMF9nZXRfc3BlZWRfYW5kX2R1cGxleChodywgJmFkYXB0ZXItPmxpbmtfc3BlZWQsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkYXB0ZXItPmxpbmtfZHVwbGV4KTsKLQkJZWNtZC0+c3BlZWQgPSBhZGFwdGVyLT5saW5rX3NwZWVkOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgYWRhcHRlci0+bGlua19zcGVlZCk7CiAKIAkJLyogdW5mb3J0dW5hdGVseSBGVUxMX0RVUExFWCAhPSBEVVBMRVhfRlVMTAogCQkgKiAgICAgICAgICBhbmQgSEFMRl9EVVBMRVggIT0gRFVQTEVYX0hBTEYgKi8KQEAgLTE2OCw3ICsxNjgsNyBAQAogCQllbHNlCiAJCQllY21kLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKIAl9IGVsc2UgewotCQllY21kLT5zcGVlZCA9IC0xOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgLTEpOwogCQllY21kLT5kdXBsZXggPSAtMTsKIAl9CiAKQEAgLTE5NywxMSArMTk3LDEzIEBACiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgQURWRVJUSVNFRF9UUCB8CiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgQURWRVJUSVNFRF9BdXRvbmVnOwogCQllY21kLT5hZHZlcnRpc2luZyA9IGh3LT5hdXRvbmVnX2FkdmVydGlzZWQ7Ci0JfSBlbHNlCi0JCWlmIChlMTAwMF9zZXRfc3BkX2RwbHgoYWRhcHRlciwgZWNtZC0+c3BlZWQgKyBlY21kLT5kdXBsZXgpKSB7CisJfSBlbHNlIHsKKwkJdTMyIHNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoZWNtZCk7CisJCWlmIChlMTAwMF9zZXRfc3BkX2RwbHgoYWRhcHRlciwgc3BlZWQsIGVjbWQtPmR1cGxleCkpIHsKIAkJCWNsZWFyX2JpdChfX0UxMDAwX1JFU0VUVElORywgJmFkYXB0ZXItPmZsYWdzKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CisJfQogCiAJLyogcmVzZXQgdGhlIGxpbmsgKi8KIApAQCAtMTc1Myw0NiArMTc1NSwyOCBAQAogCXJldHVybiAwOwogfQogCi0vKiB0b2dnbGUgTEVEIDQgdGltZXMgcGVyIHNlY29uZCA9IDIgImJsaW5rcyIgcGVyIHNlY29uZCAqLwotI2RlZmluZSBFMTAwMF9JRF9JTlRFUlZBTAkoSFovNCkKLQotLyogYml0IGRlZmluZXMgZm9yIGFkYXB0ZXItPmxlZF9zdGF0dXMgKi8KLSNkZWZpbmUgRTEwMDBfTEVEX09OCQkwCi0KLXN0YXRpYyB2b2lkIGUxMDAwX2xlZF9ibGlua19jYWxsYmFjayh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKikgZGF0YTsKLQlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCi0JaWYgKHRlc3RfYW5kX2NoYW5nZV9iaXQoRTEwMDBfTEVEX09OLCAmYWRhcHRlci0+bGVkX3N0YXR1cykpCi0JCWUxMDAwX2xlZF9vZmYoaHcpOwotCWVsc2UKLQkJZTEwMDBfbGVkX29uKGh3KTsKLQotCW1vZF90aW1lcigmYWRhcHRlci0+YmxpbmtfdGltZXIsIGppZmZpZXMgKyBFMTAwMF9JRF9JTlRFUlZBTCk7Ci19Ci0KLXN0YXRpYyBpbnQgZTEwMDBfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKK3N0YXRpYyBpbnQgZTEwMDBfc2V0X3BoeXNfaWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgICAgZW51bSBldGh0b29sX3BoeXNfaWRfc3RhdGUgc3RhdGUpCiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAKLQlpZiAoIWRhdGEpCi0JCWRhdGEgPSBJTlRfTUFYOworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIEVUSFRPT0xfSURfQUNUSVZFOgorCQllMTAwMF9zZXR1cF9sZWQoaHcpOworCQlyZXR1cm4gMjsKIAotCWlmICghYWRhcHRlci0+YmxpbmtfdGltZXIuZnVuY3Rpb24pIHsKLQkJaW5pdF90aW1lcigmYWRhcHRlci0+YmxpbmtfdGltZXIpOwotCQlhZGFwdGVyLT5ibGlua190aW1lci5mdW5jdGlvbiA9IGUxMDAwX2xlZF9ibGlua19jYWxsYmFjazsKLQkJYWRhcHRlci0+YmxpbmtfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWFkYXB0ZXI7CisJY2FzZSBFVEhUT09MX0lEX09OOgorCQllMTAwMF9sZWRfb24oaHcpOworCQlicmVhazsKKworCWNhc2UgRVRIVE9PTF9JRF9PRkY6CisJCWUxMDAwX2xlZF9vZmYoaHcpOworCQlicmVhazsKKworCWNhc2UgRVRIVE9PTF9JRF9JTkFDVElWRToKKwkJZTEwMDBfY2xlYW51cF9sZWQoaHcpOwogCX0KLQllMTAwMF9zZXR1cF9sZWQoaHcpOwotCW1vZF90aW1lcigmYWRhcHRlci0+YmxpbmtfdGltZXIsIGppZmZpZXMpOwotCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKGRhdGEgKiAxMDAwKTsKLQlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+YmxpbmtfdGltZXIpOwotCi0JZTEwMDBfbGVkX29mZihodyk7Ci0JY2xlYXJfYml0KEUxMDAwX0xFRF9PTiwgJmFkYXB0ZXItPmxlZF9zdGF0dXMpOwotCWUxMDAwX2NsZWFudXBfbGVkKGh3KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTkyOSw3ICsxOTEzLDcgQEAKIAkuc2V0X3RzbyAgICAgICAgICAgICAgICA9IGUxMDAwX3NldF90c28sCiAJLnNlbGZfdGVzdCAgICAgICAgICAgICAgPSBlMTAwMF9kaWFnX3Rlc3QsCiAJLmdldF9zdHJpbmdzICAgICAgICAgICAgPSBlMTAwMF9nZXRfc3RyaW5ncywKLQkucGh5c19pZCAgICAgICAgICAgICAgICA9IGUxMDAwX3BoeXNfaWQsCisJLnNldF9waHlzX2lkICAgICAgICAgICAgPSBlMTAwMF9zZXRfcGh5c19pZCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMgICAgICA9IGUxMDAwX2dldF9ldGh0b29sX3N0YXRzLAogCS5nZXRfc3NldF9jb3VudCAgICAgICAgID0gZTEwMDBfZ2V0X3NzZXRfY291bnQsCiAJLmdldF9jb2FsZXNjZSAgICAgICAgICAgPSBlMTAwMF9nZXRfY29hbGVzY2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKaW5kZXggNDc3ZTA2Ni4uNzZlOGFmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgImUxMDAwLmgiCiAjaW5jbHVkZSA8bmV0L2lwNl9jaGVja3N1bS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogLyogSW50ZWwgTWVkaWEgU09DIEdiRSBNRElPIHBoeXNpY2FsIGJhc2UgYWRkcmVzcyAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgY2U0MTAwX2diZV9tZGlvX2Jhc2VfcGh5OwpAQCAtOTYsNyArOTcsNiBAQAogdm9pZCBlMTAwMF9kb3duKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgZTEwMDBfcmVpbml0X2xvY2tlZChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIGUxMDAwX3Jlc2V0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKLWludCBlMTAwMF9zZXRfc3BkX2RwbHgoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBzcGRkcGx4KTsKIGludCBlMTAwMF9zZXR1cF9hbGxfdHhfcmVzb3VyY2VzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKIGludCBlMTAwMF9zZXR1cF9hbGxfcnhfcmVzb3VyY2VzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgZTEwMDBfZnJlZV9hbGxfdHhfcmVzb3VyY2VzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKQEAgLTQzODUsNyArNDM4NSw2IEBACiAJc3RydWN0IG1paV9pb2N0bF9kYXRhICpkYXRhID0gaWZfbWlpKGlmcik7CiAJaW50IHJldHZhbDsKIAl1MTYgbWlpX3JlZzsKLQl1MTYgc3BkZHBseDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGh3LT5tZWRpYV90eXBlICE9IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKQpAQCAtNDQyNCwxNyArNDQyMywxOCBAQAogCQkJCQlody0+YXV0b25lZyA9IDE7CiAJCQkJCWh3LT5hdXRvbmVnX2FkdmVydGlzZWQgPSAweDJGOwogCQkJCX0gZWxzZSB7CisJCQkJCXUzMiBzcGVlZDsKIAkJCQkJaWYgKG1paV9yZWcgJiAweDQwKQotCQkJCQkJc3BkZHBseCA9IFNQRUVEXzEwMDA7CisJCQkJCQlzcGVlZCA9IFNQRUVEXzEwMDA7CiAJCQkJCWVsc2UgaWYgKG1paV9yZWcgJiAweDIwMDApCi0JCQkJCQlzcGRkcGx4ID0gU1BFRURfMTAwOworCQkJCQkJc3BlZWQgPSBTUEVFRF8xMDA7CiAJCQkJCWVsc2UKLQkJCQkJCXNwZGRwbHggPSBTUEVFRF8xMDsKLQkJCQkJc3BkZHBseCArPSAobWlpX3JlZyAmIDB4MTAwKQotCQkJCQkJICAgPyBEVVBMRVhfRlVMTCA6Ci0JCQkJCQkgICBEVVBMRVhfSEFMRjsKLQkJCQkJcmV0dmFsID0gZTEwMDBfc2V0X3NwZF9kcGx4KGFkYXB0ZXIsCi0JCQkJCQkJCSAgICBzcGRkcGx4KTsKKwkJCQkJCXNwZWVkID0gU1BFRURfMTA7CisJCQkJCXJldHZhbCA9IGUxMDAwX3NldF9zcGRfZHBseCgKKwkJCQkJCWFkYXB0ZXIsIHNwZWVkLAorCQkJCQkJKChtaWlfcmVnICYgMHgxMDApCisJCQkJCQkgPyBEVVBMRVhfRlVMTCA6CisJCQkJCQkgRFVQTEVYX0hBTEYpKTsKIAkJCQkJaWYgKHJldHZhbCkKIAkJCQkJCXJldHVybiByZXR2YWw7CiAJCQkJfQpAQCAtNDU5NiwyMCArNDU5NiwyNCBAQAogCX0KIH0KIAotaW50IGUxMDAwX3NldF9zcGRfZHBseChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgdTE2IHNwZGRwbHgpCitpbnQgZTEwMDBfc2V0X3NwZF9kcGx4KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1MzIgc3BkLCB1OCBkcGx4KQogewogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAKIAlody0+YXV0b25lZyA9IDA7CiAKKwkvKiBNYWtlIHN1cmUgZHBseCBpcyBhdCBtb3N0IDEgYml0IGFuZCBsc2Igb2Ygc3BlZWQgaXMgbm90IHNldAorCSAqIGZvciB0aGUgc3dpdGNoKCkgYmVsb3cgdG8gd29yayAqLworCWlmICgoc3BkICYgMSkgfHwgKGRwbHggJiB+MSkpCisJCWdvdG8gZXJyX2ludmFsOworCiAJLyogRmliZXIgTklDcyBvbmx5IGFsbG93IDEwMDAgZ2JwcyBGdWxsIGR1cGxleCAqLwogCWlmICgoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikgJiYKLQkJc3BkZHBseCAhPSAoU1BFRURfMTAwMCArIERVUExFWF9GVUxMKSkgewotCQllX2Vycihwcm9iZSwgIlVuc3VwcG9ydGVkIFNwZWVkL0R1cGxleCBjb25maWd1cmF0aW9uXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCSAgICBzcGQgIT0gU1BFRURfMTAwMCAmJgorCSAgICBkcGx4ICE9IERVUExFWF9GVUxMKQorCQlnb3RvIGVycl9pbnZhbDsKIAotCXN3aXRjaCAoc3BkZHBseCkgeworCXN3aXRjaCAoc3BkICsgZHBseCkgewogCWNhc2UgU1BFRURfMTAgKyBEVVBMRVhfSEFMRjoKIAkJaHctPmZvcmNlZF9zcGVlZF9kdXBsZXggPSBlMTAwMF8xMF9oYWxmOwogCQlicmVhazsKQEAgLTQ2MjgsMTAgKzQ2MzIsMTMgQEAKIAkJYnJlYWs7CiAJY2FzZSBTUEVFRF8xMDAwICsgRFVQTEVYX0hBTEY6IC8qIG5vdCBzdXBwb3J0ZWQgKi8KIAlkZWZhdWx0OgotCQllX2Vycihwcm9iZSwgIlVuc3VwcG9ydGVkIFNwZWVkL0R1cGxleCBjb25maWd1cmF0aW9uXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gZXJyX2ludmFsOwogCX0KIAlyZXR1cm4gMDsKKworZXJyX2ludmFsOgorCWVfZXJyKHByb2JlLCAiVW5zdXBwb3J0ZWQgU3BlZWQvRHVwbGV4IGNvbmZpZ3VyYXRpb25cbiIpOworCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgaW50IF9fZTEwMDBfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgKmVuYWJsZV93YWtlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlLzgyNTcxLmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvODI1NzEuYwppbmRleCA4OWE2OTAzLi44Mjk1ZjIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvODI1NzEuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvODI1NzEuYwpAQCAtMzAwLDYgKzMwMCw3IEBACiAJCWZ1bmMtPnNldF9sYW5faWQgPSBlMTAwMF9zZXRfbGFuX2lkX3NpbmdsZV9wb3J0OwogCQlmdW5jLT5jaGVja19tbmdfbW9kZSA9IGUxMDAwZV9jaGVja19tbmdfbW9kZV9nZW5lcmljOwogCQlmdW5jLT5sZWRfb24gPSBlMTAwMGVfbGVkX29uX2dlbmVyaWM7CisJCWZ1bmMtPmJsaW5rX2xlZCA9IGUxMDAwZV9ibGlua19sZWRfZ2VuZXJpYzsKIAogCQkvKiBGV1NNIHJlZ2lzdGVyICovCiAJCW1hYy0+aGFzX2Z3c20gPSB0cnVlOwpAQCAtMzIwLDYgKzMyMSw3IEBACiAJZGVmYXVsdDoKIAkJZnVuYy0+Y2hlY2tfbW5nX21vZGUgPSBlMTAwMGVfY2hlY2tfbW5nX21vZGVfZ2VuZXJpYzsKIAkJZnVuYy0+bGVkX29uID0gZTEwMDBlX2xlZF9vbl9nZW5lcmljOworCQlmdW5jLT5ibGlua19sZWQgPSBlMTAwMGVfYmxpbmtfbGVkX2dlbmVyaWM7CiAKIAkJLyogRldTTSByZWdpc3RlciAqLwogCQltYWMtPmhhc19md3NtID0gdHJ1ZTsKQEAgLTQzMSw5ICs0MzMsNiBAQAogCWNhc2UgZTEwMDBfODI1NzM6CiAJY2FzZSBlMTAwMF84MjU3NDoKIAljYXNlIGUxMDAwXzgyNTgzOgotCQkvKiBEaXNhYmxlIEFTUE0gTDBzIGR1ZSB0byBoYXJkd2FyZSBlcnJhdGEgKi8KLQkJZTEwMDBlX2Rpc2FibGVfYXNwbShhZGFwdGVyLT5wZGV2LCBQQ0lFX0xJTktfU1RBVEVfTDBTKTsKLQogCQlpZiAocGRldi0+ZGV2aWNlID09IEUxMDAwX0RFVl9JRF84MjU3M0wpIHsKIAkJCWFkYXB0ZXItPmZsYWdzIHw9IEZMQUdfSEFTX0pVTUJPX0ZSQU1FUzsKIAkJCWFkYXB0ZXItPm1heF9od19mcmFtZV9zaXplID0gREVGQVVMVF9KVU1CTzsKQEAgLTU5NCw3ICs1OTMsNyBAQAogCiAJCWV4dGNuZl9jdHJsIHw9IEUxMDAwX0VYVENORl9DVFJMX01ESU9fU1dfT1dORVJTSElQOwogCi0JCW1zbGVlcCgyKTsKKwkJdXNsZWVwX3JhbmdlKDIwMDAsIDQwMDApOwogCQlpKys7CiAJfSB3aGlsZSAoaSA8IE1ESU9fT1dORVJTSElQX1RJTUVPVVQpOwogCkBAIC04MTYsNyArODE1LDcgQEAKIAogCS8qIENoZWNrIGZvciBwZW5kaW5nIG9wZXJhdGlvbnMuICovCiAJZm9yIChpID0gMDsgaSA8IEUxMDAwX0ZMQVNIX1VQREFURVM7IGkrKykgewotCQltc2xlZXAoMSk7CisJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKIAkJaWYgKChlcjMyKEVFQ0QpICYgRTEwMDBfRUVDRF9GTFVQRCkgPT0gMCkKIAkJCWJyZWFrOwogCX0KQEAgLTg0MCw3ICs4MzksNyBAQAogCWV3MzIoRUVDRCwgZWVjZCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgRTEwMDBfRkxBU0hfVVBEQVRFUzsgaSsrKSB7Ci0JCW1zbGVlcCgxKTsKKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwogCQlpZiAoKGVyMzIoRUVDRCkgJiBFMTAwMF9FRUNEX0ZMVVBEKSA9PSAwKQogCQkJYnJlYWs7CiAJfQpAQCAtOTMwLDcgKzkyOSw3IEBACiAJCWlmIChlcjMyKEVFTU5HQ1RMKSAmCiAJCSAgICBFMTAwMF9OVk1fQ0ZHX0RPTkVfUE9SVF8wKQogCQkJYnJlYWs7Ci0JCW1zbGVlcCgxKTsKKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwogCQl0aW1lb3V0LS07CiAJfQogCWlmICghdGltZW91dCkgewpAQCAtMTAzNyw3ICsxMDM2LDcgQEAKIAlldzMyKFRDVEwsIEUxMDAwX1RDVExfUFNQKTsKIAllMWVfZmx1c2goKTsKIAotCW1zbGVlcCgxMCk7CisJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAKIAkvKgogCSAqIE11c3QgYWNxdWlyZSB0aGUgTURJTyBvd25lcnNoaXAgYmVmb3JlIE1BQyByZXNldC4KQEAgLTIwNjYsNyArMjA2NSw4IEBACiAJCQkJICB8IEZMQUdfSEFTX1NNQVJUX1BPV0VSX0RPV04KIAkJCQkgIHwgRkxBR19IQVNfQU1UCiAJCQkJICB8IEZMQUdfSEFTX1NXU01fT05fTE9BRCwKLQkuZmxhZ3MyCQkJPSBGTEFHMl9ESVNBQkxFX0FTUE1fTDEsCisJLmZsYWdzMgkJCT0gRkxBRzJfRElTQUJMRV9BU1BNX0wxCisJCQkJICB8IEZMQUcyX0RJU0FCTEVfQVNQTV9MMFMsCiAJLnBiYQkJCT0gMjAsCiAJLm1heF9od19mcmFtZV9zaXplCT0gRVRIX0ZSQU1FX0xFTiArIEVUSF9GQ1NfTEVOLAogCS5nZXRfdmFyaWFudHMJCT0gZTEwMDBfZ2V0X3ZhcmlhbnRzXzgyNTcxLApAQCAtMjA4Niw3ICsyMDg2LDggQEAKIAkJCQkgIHwgRkxBR19IQVNfU01BUlRfUE9XRVJfRE9XTgogCQkJCSAgfCBGTEFHX0hBU19BTVQKIAkJCQkgIHwgRkxBR19IQVNfQ1RSTEVYVF9PTl9MT0FELAotCS5mbGFnczIJCQkgID0gRkxBRzJfQ0hFQ0tfUEhZX0hBTkcsCisJLmZsYWdzMgkJCSAgPSBGTEFHMl9DSEVDS19QSFlfSEFORworCQkJCSAgfCBGTEFHMl9ESVNBQkxFX0FTUE1fTDBTLAogCS5wYmEJCQk9IDMyLAogCS5tYXhfaHdfZnJhbWVfc2l6ZQk9IERFRkFVTFRfSlVNQk8sCiAJLmdldF92YXJpYW50cwkJPSBlMTAwMF9nZXRfdmFyaWFudHNfODI1NzEsCkBAIC0yMTA0LDYgKzIxMDUsNyBAQAogCQkJCSAgfCBGTEFHX0hBU19TTUFSVF9QT1dFUl9ET1dOCiAJCQkJICB8IEZMQUdfSEFTX0FNVAogCQkJCSAgfCBGTEFHX0hBU19DVFJMRVhUX09OX0xPQUQsCisJLmZsYWdzMgkJCT0gRkxBRzJfRElTQUJMRV9BU1BNX0wwUywKIAkucGJhCQkJPSAzMiwKIAkubWF4X2h3X2ZyYW1lX3NpemUJPSBFVEhfRlJBTUVfTEVOICsgRVRIX0ZDU19MRU4sCiAJLmdldF92YXJpYW50cwkJPSBlMTAwMF9nZXRfdmFyaWFudHNfODI1NzEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvZTEwMDAuaCBiL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCmluZGV4IDAwYmY1OTUuLjk1NDk4NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCkBAIC0zMSw2ICszMSw3IEBACiAjaWZuZGVmIF9FMTAwMF9IXwogI2RlZmluZSBfRTEwMDBfSF8KIAorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KQEAgLTM5LDYgKzQwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9wY2ktYXNwbS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgogCiAjaW5jbHVkZSAiaHcuaCIKIApAQCAtMjgwLDcgKzI4Miw3IEBACiAKIAljb25zdCBzdHJ1Y3QgZTEwMDBfaW5mbyAqZWk7CiAKLQlzdHJ1Y3Qgdmxhbl9ncm91cCAqdmxncnA7CisJdW5zaWduZWQgbG9uZyBhY3RpdmVfdmxhbnNbQklUU19UT19MT05HUyhWTEFOX05fVklEKV07CiAJdTMyIGJkX251bWJlcjsKIAl1MzIgcnhfYnVmZmVyX2xlbjsKIAl1MTYgbW5nX3ZsYW5faWQ7CkBAIC0zODksMTMgKzM5MSwxMCBAQAogCiAJYm9vbCBmY19hdXRvbmVnOwogCi0JdW5zaWduZWQgbG9uZyBsZWRfc3RhdHVzOwotCiAJdW5zaWduZWQgaW50IGZsYWdzOwogCXVuc2lnbmVkIGludCBmbGFnczI7CiAJc3RydWN0IHdvcmtfc3RydWN0IGRvd25zaGlmdF90YXNrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCB1cGRhdGVfcGh5X3Rhc2s7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IGxlZF9ibGlua190YXNrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBwcmludF9oYW5nX3Rhc2s7CiAKIAlib29sIGlkbGVfY2hlY2s7CkBAIC00NTYsNiArNDU1LDcgQEAKICNkZWZpbmUgRkxBRzJfSEFTX1BIWV9TVEFUUyAgICAgICAgICAgICAgICgxIDw8IDQpCiAjZGVmaW5lIEZMQUcyX0hBU19FRUUgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQogI2RlZmluZSBGTEFHMl9ETUFfQlVSU1QgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKKyNkZWZpbmUgRkxBRzJfRElTQUJMRV9BU1BNX0wwUyAgICAgICAgICAgICgxIDw8IDcpCiAjZGVmaW5lIEZMQUcyX0RJU0FCTEVfQUlNICAgICAgICAgICAgICAgICAoMSA8PCA4KQogI2RlZmluZSBGTEFHMl9DSEVDS19QSFlfSEFORyAgICAgICAgICAgICAgKDEgPDwgOSkKIApAQCAtNDg0LDcgKzQ4NCw2IEBACiAKIGV4dGVybiB2b2lkIGUxMDAwZV9jaGVja19vcHRpb25zKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiB2b2lkIGUxMDAwZV9zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7Ci1leHRlcm4gdm9pZCBlMTAwMGVfbGVkX2JsaW5rX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAogZXh0ZXJuIGludCBlMTAwMGVfdXAoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIHZvaWQgZTEwMDBlX2Rvd24oc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwpAQCAtNTAyLDcgKzUwMSw2IEBACiBleHRlcm4gdm9pZCBlMTAwMGVfcmVzZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIHZvaWQgZTEwMDBlX2dldF9od19jb250cm9sKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiB2b2lkIGUxMDAwZV9yZWxlYXNlX2h3X2NvbnRyb2woc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwotZXh0ZXJuIHZvaWQgZTEwMDBlX2Rpc2FibGVfYXNwbShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTE2IHN0YXRlKTsKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBjb3B5YnJlYWs7CiAKQEAgLTU3Myw3ICs1NzEsNyBAQAogZXh0ZXJuIHZvaWQgZTEwMDBlX2NvbmZpZ19jb2xsaXNpb25fZGlzdChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIGV4dGVybiBzMzIgZTEwMDBlX2NvbmZpZ19mY19hZnRlcl9saW5rX3VwKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogZXh0ZXJuIHMzMiBlMTAwMGVfZm9yY2VfbWFjX2ZjKHN0cnVjdCBlMTAwMF9odyAqaHcpOwotZXh0ZXJuIHMzMiBlMTAwMGVfYmxpbmtfbGVkKHN0cnVjdCBlMTAwMF9odyAqaHcpOworZXh0ZXJuIHMzMiBlMTAwMGVfYmxpbmtfbGVkX2dlbmVyaWMoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBleHRlcm4gdm9pZCBlMTAwMF93cml0ZV92ZnRhX2dlbmVyaWMoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTMyIHZhbHVlKTsKIGV4dGVybiBzMzIgZTEwMDBfY2hlY2tfYWx0X21hY19hZGRyX2dlbmVyaWMoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBleHRlcm4gdm9pZCBlMTAwMGVfcmVzZXRfYWRhcHRpdmUoc3RydWN0IGUxMDAwX2h3ICpodyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvZXMybGFuLmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvZXMybGFuLmMKaW5kZXggMmZlZmE4Mi4uZjRiYmViMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2VzMmxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9lczJsYW4uYwpAQCAtNjEyLDcgKzYxMiw3IEBACiAJd2hpbGUgKHRpbWVvdXQpIHsKIAkJaWYgKGVyMzIoRUVNTkdDVEwpICYgbWFzaykKIAkJCWJyZWFrOwotCQltc2xlZXAoMSk7CisJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKIAkJdGltZW91dC0tOwogCX0KIAlpZiAoIXRpbWVvdXQpIHsKQEAgLTgwMiw3ICs4MDIsNyBAQAogCWV3MzIoVENUTCwgRTEwMDBfVENUTF9QU1ApOwogCWUxZV9mbHVzaCgpOwogCi0JbXNsZWVwKDEwKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsKIAogCWN0cmwgPSBlcjMyKENUUkwpOwogCkBAIC0xNDM0LDYgKzE0MzQsNyBAQAogc3RhdGljIHN0cnVjdCBlMTAwMF9tYWNfb3BlcmF0aW9ucyBlczJfbWFjX29wcyA9IHsKIAkucmVhZF9tYWNfYWRkcgkJPSBlMTAwMF9yZWFkX21hY19hZGRyXzgwMDAzZXMybGFuLAogCS5pZF9sZWRfaW5pdAkJPSBlMTAwMGVfaWRfbGVkX2luaXQsCisJLmJsaW5rX2xlZAkJPSBlMTAwMGVfYmxpbmtfbGVkX2dlbmVyaWMsCiAJLmNoZWNrX21uZ19tb2RlCQk9IGUxMDAwZV9jaGVja19tbmdfbW9kZV9nZW5lcmljLAogCS8qIGNoZWNrX2Zvcl9saW5rIGRlcGVuZGVudCBvbiBtZWRpYSB0eXBlICovCiAJLmNsZWFudXBfbGVkCQk9IGUxMDAwZV9jbGVhbnVwX2xlZF9nZW5lcmljLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9ldGh0b29sLmMKaW5kZXggMDdmMDllOS4uODU5ZDBkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jCkBAIC0xMjIsNiArMTIyLDcgQEAKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgc3BlZWQ7CiAKIAlpZiAoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSB7CiAKQEAgLTE1OSwyMyArMTYwLDIzIEBACiAJCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKIAl9CiAKLQllY21kLT5zcGVlZCA9IC0xOworCXNwZWVkID0gLTE7CiAJZWNtZC0+ZHVwbGV4ID0gLTE7CiAKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiAJCWlmIChuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKLQkJCWVjbWQtPnNwZWVkID0gYWRhcHRlci0+bGlua19zcGVlZDsKKwkJCXNwZWVkID0gYWRhcHRlci0+bGlua19zcGVlZDsKIAkJCWVjbWQtPmR1cGxleCA9IGFkYXB0ZXItPmxpbmtfZHVwbGV4IC0gMTsKIAkJfQogCX0gZWxzZSB7CiAJCXUzMiBzdGF0dXMgPSBlcjMyKFNUQVRVUyk7CiAJCWlmIChzdGF0dXMgJiBFMTAwMF9TVEFUVVNfTFUpIHsKIAkJCWlmIChzdGF0dXMgJiBFMTAwMF9TVEFUVVNfU1BFRURfMTAwMCkKLQkJCQllY21kLT5zcGVlZCA9IDEwMDA7CisJCQkJc3BlZWQgPSBTUEVFRF8xMDAwOwogCQkJZWxzZSBpZiAoc3RhdHVzICYgRTEwMDBfU1RBVFVTX1NQRUVEXzEwMCkKLQkJCQllY21kLT5zcGVlZCA9IDEwMDsKKwkJCQlzcGVlZCA9IFNQRUVEXzEwMDsKIAkJCWVsc2UKLQkJCQllY21kLT5zcGVlZCA9IDEwOworCQkJCXNwZWVkID0gU1BFRURfMTA7CiAKIAkJCWlmIChzdGF0dXMgJiBFMTAwMF9TVEFUVVNfRkQpCiAJCQkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CkBAIC0xODQsNiArMTg1LDcgQEAKIAkJfQogCX0KIAorCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBzcGVlZCk7CiAJZWNtZC0+YXV0b25lZyA9ICgoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIpIHx8CiAJCQkgaHctPm1hYy5hdXRvbmVnKSA/IEFVVE9ORUdfRU5BQkxFIDogQVVUT05FR19ESVNBQkxFOwogCkBAIC0xOTgsMjAgKzIwMCwyNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGUxMDAwX3NldF9zcGRfZHBseChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgdTE2IHNwZGRwbHgpCitzdGF0aWMgaW50IGUxMDAwX3NldF9zcGRfZHBseChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgdTMyIHNwZCwgdTggZHBseCkKIHsKIAlzdHJ1Y3QgZTEwMDBfbWFjX2luZm8gKm1hYyA9ICZhZGFwdGVyLT5ody5tYWM7CiAKIAltYWMtPmF1dG9uZWcgPSAwOwogCisJLyogTWFrZSBzdXJlIGRwbHggaXMgYXQgbW9zdCAxIGJpdCBhbmQgbHNiIG9mIHNwZWVkIGlzIG5vdCBzZXQKKwkgKiBmb3IgdGhlIHN3aXRjaCgpIGJlbG93IHRvIHdvcmsgKi8KKwlpZiAoKHNwZCAmIDEpIHx8IChkcGx4ICYgfjEpKQorCQlnb3RvIGVycl9pbnZhbDsKKwogCS8qIEZpYmVyIE5JQ3Mgb25seSBhbGxvdyAxMDAwIGdicHMgRnVsbCBkdXBsZXggKi8KIAlpZiAoKGFkYXB0ZXItPmh3LnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIpICYmCi0JCXNwZGRwbHggIT0gKFNQRUVEXzEwMDAgKyBEVVBMRVhfRlVMTCkpIHsKLQkJZV9lcnIoIlVuc3VwcG9ydGVkIFNwZWVkL0R1cGxleCBjb25maWd1cmF0aW9uXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJICAgIHNwZCAhPSBTUEVFRF8xMDAwICYmCisJICAgIGRwbHggIT0gRFVQTEVYX0ZVTEwpIHsKKwkJZ290byBlcnJfaW52YWw7CiAJfQogCi0Jc3dpdGNoIChzcGRkcGx4KSB7CisJc3dpdGNoIChzcGQgKyBkcGx4KSB7CiAJY2FzZSBTUEVFRF8xMCArIERVUExFWF9IQUxGOgogCQltYWMtPmZvcmNlZF9zcGVlZF9kdXBsZXggPSBBRFZFUlRJU0VfMTBfSEFMRjsKIAkJYnJlYWs7CkBAIC0yMzAsMTAgKzIzNywxMyBAQAogCQlicmVhazsKIAljYXNlIFNQRUVEXzEwMDAgKyBEVVBMRVhfSEFMRjogLyogbm90IHN1cHBvcnRlZCAqLwogCWRlZmF1bHQ6Ci0JCWVfZXJyKCJVbnN1cHBvcnRlZCBTcGVlZC9EdXBsZXggY29uZmlndXJhdGlvblxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIGVycl9pbnZhbDsKIAl9CiAJcmV0dXJuIDA7CisKK2Vycl9pbnZhbDoKKwllX2VycigiVW5zdXBwb3J0ZWQgU3BlZWQvRHVwbGV4IGNvbmZpZ3VyYXRpb25cbiIpOworCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgaW50IGUxMDAwX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LApAQCAtMjUzLDcgKzI2Myw3IEBACiAJfQogCiAJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19FMTAwMF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCi0JCW1zbGVlcCgxKTsKKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwogCiAJaWYgKGVjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHsKIAkJaHctPm1hYy5hdXRvbmVnID0gMTsKQEAgLTI2OSw3ICsyNzksOCBAQAogCQlpZiAoYWRhcHRlci0+ZmNfYXV0b25lZykKIAkJCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGUxMDAwX2ZjX2RlZmF1bHQ7CiAJfSBlbHNlIHsKLQkJaWYgKGUxMDAwX3NldF9zcGRfZHBseChhZGFwdGVyLCBlY21kLT5zcGVlZCArIGVjbWQtPmR1cGxleCkpIHsKKwkJdTMyIHNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoZWNtZCk7CisJCWlmIChlMTAwMF9zZXRfc3BkX2RwbHgoYWRhcHRlciwgc3BlZWQsIGVjbWQtPmR1cGxleCkpIHsKIAkJCWNsZWFyX2JpdChfX0UxMDAwX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC0zMTcsNyArMzI4LDcgQEAKIAlhZGFwdGVyLT5mY19hdXRvbmVnID0gcGF1c2UtPmF1dG9uZWc7CiAKIAl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChfX0UxMDAwX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKLQkJbXNsZWVwKDEpOworCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CiAKIAlpZiAoYWRhcHRlci0+ZmNfYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgewogCQlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBlMTAwMF9mY19kZWZhdWx0OwpAQCAtNjczLDcgKzY4NCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19FMTAwMF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCi0JCW1zbGVlcCgxKTsKKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkKIAkJZTEwMDBlX2Rvd24oYWRhcHRlcik7CkBAIC05NTIsNyArOTYzLDcgQEAKIAogCS8qIERpc2FibGUgYWxsIHRoZSBpbnRlcnJ1cHRzICovCiAJZXczMihJTUMsIDB4RkZGRkZGRkYpOwotCW1zbGVlcCgxMCk7CisJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAKIAkvKiBUZXN0IGVhY2ggaW50ZXJydXB0ICovCiAJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKQEAgLTk4NCw3ICs5OTUsNyBAQAogCQkJYWRhcHRlci0+dGVzdF9pY3IgPSAwOwogCQkJZXczMihJTUMsIG1hc2spOwogCQkJZXczMihJQ1MsIG1hc2spOwotCQkJbXNsZWVwKDEwKTsKKwkJCXVzbGVlcF9yYW5nZSgxMDAwMCwgMjAwMDApOwogCiAJCQlpZiAoYWRhcHRlci0+dGVzdF9pY3IgJiBtYXNrKSB7CiAJCQkJKmRhdGEgPSAzOwpAQCAtMTAwMiw3ICsxMDEzLDcgQEAKIAkJYWRhcHRlci0+dGVzdF9pY3IgPSAwOwogCQlldzMyKElNUywgbWFzayk7CiAJCWV3MzIoSUNTLCBtYXNrKTsKLQkJbXNsZWVwKDEwKTsKKwkJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAKIAkJaWYgKCEoYWRhcHRlci0+dGVzdF9pY3IgJiBtYXNrKSkgewogCQkJKmRhdGEgPSA0OwpAQCAtMTAyMCw3ICsxMDMxLDcgQEAKIAkJCWFkYXB0ZXItPnRlc3RfaWNyID0gMDsKIAkJCWV3MzIoSU1DLCB+bWFzayAmIDB4MDAwMDdGRkYpOwogCQkJZXczMihJQ1MsIH5tYXNrICYgMHgwMDAwN0ZGRik7Ci0JCQltc2xlZXAoMTApOworCQkJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAKIAkJCWlmIChhZGFwdGVyLT50ZXN0X2ljcikgewogCQkJCSpkYXRhID0gNTsKQEAgLTEwMzEsNyArMTA0Miw3IEBACiAKIAkvKiBEaXNhYmxlIGFsbCB0aGUgaW50ZXJydXB0cyAqLwogCWV3MzIoSU1DLCAweEZGRkZGRkZGKTsKLQltc2xlZXAoMTApOworCXVzbGVlcF9yYW5nZSgxMDAwMCwgMjAwMDApOwogCiAJLyogVW5ob29rIHRlc3QgaW50ZXJydXB0IGhhbmRsZXIgKi8KIAlmcmVlX2lycShpcnEsIG5ldGRldik7CkBAIC0xNDA2LDcgKzE0MTcsNyBAQAogCSAqLwogI2RlZmluZSBFMTAwMF9TRVJERVNfTEJfT04gMHg0MTAKIAlldzMyKFNDVEwsIEUxMDAwX1NFUkRFU19MQl9PTik7Ci0JbXNsZWVwKDEwKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTUwMSw3ICsxNTEyLDcgQEAKIAkJICAgIGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykgewogI2RlZmluZSBFMTAwMF9TRVJERVNfTEJfT0ZGIDB4NDAwCiAJCQlldzMyKFNDVEwsIEUxMDAwX1NFUkRFU19MQl9PRkYpOwotCQkJbXNsZWVwKDEwKTsKKwkJCXVzbGVlcF9yYW5nZSgxMDAwMCwgMjAwMDApOwogCQkJYnJlYWs7CiAJCX0KIAkJLyogRmFsbCBUaHJvdWdoICovCkBAIC0xODUxLDY0ICsxODYyLDM1IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIHRvZ2dsZSBMRUQgNCB0aW1lcyBwZXIgc2Vjb25kID0gMiAiYmxpbmtzIiBwZXIgc2Vjb25kICovCi0jZGVmaW5lIEUxMDAwX0lEX0lOVEVSVkFMCShIWi80KQotCi0vKiBiaXQgZGVmaW5lcyBmb3IgYWRhcHRlci0+bGVkX3N0YXR1cyAqLwotI2RlZmluZSBFMTAwMF9MRURfT04JCTAKLQotdm9pZCBlMTAwMGVfbGVkX2JsaW5rX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZTEwMDBfYWRhcHRlciwgbGVkX2JsaW5rX3Rhc2spOwotCi0JaWYgKHRlc3RfYW5kX2NoYW5nZV9iaXQoRTEwMDBfTEVEX09OLCAmYWRhcHRlci0+bGVkX3N0YXR1cykpCi0JCWFkYXB0ZXItPmh3Lm1hYy5vcHMubGVkX29mZigmYWRhcHRlci0+aHcpOwotCWVsc2UKLQkJYWRhcHRlci0+aHcubWFjLm9wcy5sZWRfb24oJmFkYXB0ZXItPmh3KTsKLX0KLQotc3RhdGljIHZvaWQgZTEwMDBfbGVkX2JsaW5rX2NhbGxiYWNrKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqKSBkYXRhOwotCi0Jc2NoZWR1bGVfd29yaygmYWRhcHRlci0+bGVkX2JsaW5rX3Rhc2spOwotCW1vZF90aW1lcigmYWRhcHRlci0+YmxpbmtfdGltZXIsIGppZmZpZXMgKyBFMTAwMF9JRF9JTlRFUlZBTCk7Ci19Ci0KLXN0YXRpYyBpbnQgZTEwMDBfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKK3N0YXRpYyBpbnQgZTEwMDBfc2V0X3BoeXNfaWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgICAgZW51bSBldGh0b29sX3BoeXNfaWRfc3RhdGUgc3RhdGUpCiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAKLQlpZiAoIWRhdGEpCi0JCWRhdGEgPSBJTlRfTUFYOworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIEVUSFRPT0xfSURfQUNUSVZFOgorCQlpZiAoIWh3LT5tYWMub3BzLmJsaW5rX2xlZCkKKwkJCXJldHVybiAyOwkvKiBjeWNsZSBvbi9vZmYgdHdpY2UgcGVyIHNlY29uZCAqLwogCi0JaWYgKChody0+cGh5LnR5cGUgPT0gZTEwMDBfcGh5X2lmZSkgfHwKLQkgICAgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9wY2hsYW4pIHx8Ci0JICAgIChody0+bWFjLnR5cGUgPT0gZTEwMDBfcGNoMmxhbikgfHwKLQkgICAgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU4MykgfHwKLQkgICAgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NCkpIHsKLQkJaWYgKCFhZGFwdGVyLT5ibGlua190aW1lci5mdW5jdGlvbikgewotCQkJaW5pdF90aW1lcigmYWRhcHRlci0+YmxpbmtfdGltZXIpOwotCQkJYWRhcHRlci0+YmxpbmtfdGltZXIuZnVuY3Rpb24gPQotCQkJCWUxMDAwX2xlZF9ibGlua19jYWxsYmFjazsKLQkJCWFkYXB0ZXItPmJsaW5rX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWRhcHRlcjsKLQkJfQotCQltb2RfdGltZXIoJmFkYXB0ZXItPmJsaW5rX3RpbWVyLCBqaWZmaWVzKTsKLQkJbXNsZWVwX2ludGVycnVwdGlibGUoZGF0YSAqIDEwMDApOwotCQlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+YmxpbmtfdGltZXIpOworCQlody0+bWFjLm9wcy5ibGlua19sZWQoaHcpOworCQlicmVhazsKKworCWNhc2UgRVRIVE9PTF9JRF9JTkFDVElWRToKIAkJaWYgKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfaWZlKQogCQkJZTFlX3dwaHkoaHcsIElGRV9QSFlfU1BFQ0lBTF9DT05UUk9MX0xFRCwgMCk7Ci0JfSBlbHNlIHsKLQkJZTEwMDBlX2JsaW5rX2xlZChodyk7Ci0JCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKGRhdGEgKiAxMDAwKTsKKwkJaHctPm1hYy5vcHMubGVkX29mZihodyk7CisJCWh3LT5tYWMub3BzLmNsZWFudXBfbGVkKGh3KTsKKwkJYnJlYWs7CisKKwljYXNlIEVUSFRPT0xfSURfT046CisJCWFkYXB0ZXItPmh3Lm1hYy5vcHMubGVkX29uKCZhZGFwdGVyLT5odyk7CisJCWJyZWFrOworCisJY2FzZSBFVEhUT09MX0lEX09GRjoKKwkJYWRhcHRlci0+aHcubWFjLm9wcy5sZWRfb2ZmKCZhZGFwdGVyLT5odyk7CisJCWJyZWFrOwogCX0KLQotCWh3LT5tYWMub3BzLmxlZF9vZmYoaHcpOwotCWNsZWFyX2JpdChFMTAwMF9MRURfT04sICZhZGFwdGVyLT5sZWRfc3RhdHVzKTsKLQlody0+bWFjLm9wcy5jbGVhbnVwX2xlZChodyk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjAyMCw2ICsyMDAyLDMxIEBACiAJfQogfQogCitzdGF0aWMgaW50IGUxMDAwZV9zZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGRhdGEpCit7CisJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWJvb2wgbmVlZF9yZXNldCA9IGZhbHNlOworCWludCByYzsKKworCW5lZWRfcmVzZXQgPSAoZGF0YSAmIEVUSF9GTEFHX1JYVkxBTikgIT0KKwkJICAgICAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSFdfVkxBTl9SWCk7CisKKwlyYyA9IGV0aHRvb2xfb3Bfc2V0X2ZsYWdzKG5ldGRldiwgZGF0YSwgRVRIX0ZMQUdfUlhWTEFOIHwKKwkJCQkgIEVUSF9GTEFHX1RYVkxBTik7CisKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCWlmIChuZWVkX3Jlc2V0KSB7CisJCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCQllMTAwMGVfcmVpbml0X2xvY2tlZChhZGFwdGVyKTsKKwkJZWxzZQorCQkJZTEwMDBlX3Jlc2V0KGFkYXB0ZXIpOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGUxMDAwX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MJCT0gZTEwMDBfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MJCT0gZTEwMDBfc2V0X3NldHRpbmdzLApAQCAtMjA0OSwxMiArMjA1NiwxMyBAQAogCS5zZXRfdHNvCQk9IGUxMDAwX3NldF90c28sCiAJLnNlbGZfdGVzdAkJPSBlMTAwMF9kaWFnX3Rlc3QsCiAJLmdldF9zdHJpbmdzCQk9IGUxMDAwX2dldF9zdHJpbmdzLAotCS5waHlzX2lkCQk9IGUxMDAwX3BoeXNfaWQsCisJLnNldF9waHlzX2lkCQk9IGUxMDAwX3NldF9waHlzX2lkLAogCS5nZXRfZXRodG9vbF9zdGF0cwk9IGUxMDAwX2dldF9ldGh0b29sX3N0YXRzLAogCS5nZXRfc3NldF9jb3VudAkJPSBlMTAwMGVfZ2V0X3NzZXRfY291bnQsCiAJLmdldF9jb2FsZXNjZQkJPSBlMTAwMF9nZXRfY29hbGVzY2UsCiAJLnNldF9jb2FsZXNjZQkJPSBlMTAwMF9zZXRfY29hbGVzY2UsCiAJLmdldF9mbGFncwkJPSBldGh0b29sX29wX2dldF9mbGFncywKKwkuc2V0X2ZsYWdzCQk9IGUxMDAwZV9zZXRfZmxhZ3MsCiB9OwogCiB2b2lkIGUxMDAwZV9zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9ody5oIGIvZHJpdmVycy9uZXQvZTEwMDBlL2h3LmgKaW5kZXggMzA3ZTFlYy4uNmMyZmE4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2h3LmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2h3LmgKQEAgLTc1Niw2ICs3NTYsNyBAQAogLyogRnVuY3Rpb24gcG9pbnRlcnMgYW5kIHN0YXRpYyBkYXRhIGZvciB0aGUgTUFDLiAqLwogc3RydWN0IGUxMDAwX21hY19vcGVyYXRpb25zIHsKIAlzMzIgICgqaWRfbGVkX2luaXQpKHN0cnVjdCBlMTAwMF9odyAqKTsKKwlzMzIgICgqYmxpbmtfbGVkKShzdHJ1Y3QgZTEwMDBfaHcgKik7CiAJYm9vbCAoKmNoZWNrX21uZ19tb2RlKShzdHJ1Y3QgZTEwMDBfaHcgKik7CiAJczMyICAoKmNoZWNrX2Zvcl9saW5rKShzdHJ1Y3QgZTEwMDBfaHcgKik7CiAJczMyICAoKmNsZWFudXBfbGVkKShzdHJ1Y3QgZTEwMDBfaHcgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYwppbmRleCBjZTFkYmZkLi4zMzY5ZDFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9pY2g4bGFuLmMKQEAgLTMzOCw3ICszMzgsNyBAQAogCS8qIFVuZ2F0ZSBhdXRvbWF0aWMgUEhZIGNvbmZpZ3VyYXRpb24gb24gbm9uLW1hbmFnZWQgODI1NzkgKi8KIAlpZiAoKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9wY2gybGFuKSAmJgogCSAgICAhKGZ3c20gJiBFMTAwMF9JQ0hfRldTTV9GV19WQUxJRCkpIHsKLQkJbXNsZWVwKDEwKTsKKwkJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAJCWUxMDAwX2dhdGVfaHdfcGh5X2NvbmZpZ19pY2g4bGFuKGh3LCBmYWxzZSk7CiAJfQogCkBAIC00MjcsNyArNDI3LDcgQEAKIAlwaHktPmlkID0gMDsKIAl3aGlsZSAoKGUxMDAwX3BoeV91bmtub3duID09IGUxMDAwZV9nZXRfcGh5X3R5cGVfZnJvbV9pZChwaHktPmlkKSkgJiYKIAkgICAgICAgKGkrKyA8IDEwMCkpIHsKLQkJbXNsZWVwKDEpOworCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CiAJCXJldF92YWwgPSBlMTAwMGVfZ2V0X3BoeV9pZChodyk7CiAJCWlmIChyZXRfdmFsKQogCQkJcmV0dXJuIHJldF92YWw7CkBAIC01NjQsNiArNTY0LDggQEAKIAkJbWFjLT5vcHMuY2hlY2tfbW5nX21vZGUgPSBlMTAwMF9jaGVja19tbmdfbW9kZV9pY2g4bGFuOwogCQkvKiBJRCBMRUQgaW5pdCAqLwogCQltYWMtPm9wcy5pZF9sZWRfaW5pdCA9IGUxMDAwZV9pZF9sZWRfaW5pdDsKKwkJLyogYmxpbmsgTEVEICovCisJCW1hYy0+b3BzLmJsaW5rX2xlZCA9IGUxMDAwZV9ibGlua19sZWRfZ2VuZXJpYzsKIAkJLyogc2V0dXAgTEVEICovCiAJCW1hYy0+b3BzLnNldHVwX2xlZCA9IGUxMDAwZV9zZXR1cF9sZWRfZ2VuZXJpYzsKIAkJLyogY2xlYW51cCBMRUQgKi8KQEAgLTc2Nyw2ICs3NjksOCBAQAogCSAgICAgKCEoZXIzMihDVFJMX0VYVCkgJiBFMTAwMF9DVFJMX0VYVF9MU0VDQ0spKSkpIHsKIAkJYWRhcHRlci0+ZmxhZ3MgJj0gfkZMQUdfSEFTX0pVTUJPX0ZSQU1FUzsKIAkJYWRhcHRlci0+bWF4X2h3X2ZyYW1lX3NpemUgPSBFVEhfRlJBTUVfTEVOICsgRVRIX0ZDU19MRU47CisKKwkJaHctPm1hYy5vcHMuYmxpbmtfbGVkID0gTlVMTDsKIAl9CiAKIAlpZiAoKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGUxMDAwX2ljaDhsYW4pICYmCkBAIC0xNzA0LDcgKzE3MDgsNyBAQAogCQlnb3RvIG91dDsKIAogCS8qIEFsbG93IHRpbWUgZm9yIGgvdyB0byBnZXQgdG8gcXVpZXNjZW50IHN0YXRlIGFmdGVyIHJlc2V0ICovCi0JbXNsZWVwKDEwKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsKIAogCS8qIFBlcmZvcm0gYW55IG5lY2Vzc2FyeSBwb3N0LXJlc2V0IHdvcmthcm91bmRzICovCiAJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKQEAgLTE3MzcsNyArMTc0MSw3IEBACiAJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9wY2gybGFuKSB7CiAJCS8qIFVuZ2F0ZSBhdXRvbWF0aWMgUEhZIGNvbmZpZ3VyYXRpb24gb24gbm9uLW1hbmFnZWQgODI1NzkgKi8KIAkJaWYgKCEoZXIzMihGV1NNKSAmIEUxMDAwX0lDSF9GV1NNX0ZXX1ZBTElEKSkgewotCQkJbXNsZWVwKDEwKTsKKwkJCXVzbGVlcF9yYW5nZSgxMDAwMCwgMjAwMDApOwogCQkJZTEwMDBfZ2F0ZV9od19waHlfY29uZmlnX2ljaDhsYW4oaHcsIGZhbHNlKTsKIAkJfQogCkBAIC0yNTMyLDcgKzI1MzYsNyBAQAogCSAqLwogCWlmICghcmV0X3ZhbCkgewogCQllMTAwMGVfcmVsb2FkX252bShodyk7Ci0JCW1zbGVlcCgxMCk7CisJCXVzbGVlcF9yYW5nZSgxMDAwMCwgMjAwMDApOwogCX0KIAogb3V0OgpAQCAtMzAwOSw3ICszMDEzLDcgQEAKIAlldzMyKFRDVEwsIEUxMDAwX1RDVExfUFNQKTsKIAllMWVfZmx1c2goKTsKIAotCW1zbGVlcCgxMCk7CisJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAKIAkvKiBXb3JrYXJvdW5kIGZvciBJQ0g4IGJpdCBjb3JydXB0aW9uIGlzc3VlIGluIEZJRk8gbWVtb3J5ICovCiAJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9pY2g4bGFuKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvbGliLmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvbGliLmMKaW5kZXggOTY5MjFkZS4uZGQ4YWIwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2xpYi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9saWIuYwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqICBAcmFyX2NvdW50OiByZWNlaXZlIGFkZHJlc3MgcmVnaXN0ZXJzCiAgKgotICogIFNldHVwcyB0aGUgcmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVycyBieSBzZXR0aW5nIHRoZSBiYXNlIHJlY2VpdmUgYWRkcmVzcworICogIFNldHVwIHRoZSByZWNlaXZlIGFkZHJlc3MgcmVnaXN0ZXJzIGJ5IHNldHRpbmcgdGhlIGJhc2UgcmVjZWl2ZSBhZGRyZXNzCiAgKiAgcmVnaXN0ZXIgdG8gdGhlIGRldmljZXMgTUFDIGFkZHJlc3MgYW5kIGNsZWFyaW5nIGFsbCB0aGUgb3RoZXIgcmVjZWl2ZQogICogIGFkZHJlc3MgcmVnaXN0ZXJzIHRvIDAuCiAgKiovCkBAIC04NjgsNyArODY4LDcgQEAKIAkgKiBtaWxsaXNlY29uZHMgZXZlbiBpZiB0aGUgb3RoZXIgZW5kIGlzIGRvaW5nIGl0IGluIFNXKS4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgRklCRVJfTElOS19VUF9MSU1JVDsgaSsrKSB7Ci0JCW1zbGVlcCgxMCk7CisJCXVzbGVlcF9yYW5nZSgxMDAwMCwgMjAwMDApOwogCQlzdGF0dXMgPSBlcjMyKFNUQVRVUyk7CiAJCWlmIChzdGF0dXMgJiBFMTAwMF9TVEFUVVNfTFUpCiAJCQlicmVhazsKQEAgLTkzMCw3ICs5MzAsNyBAQAogCiAJZXczMihDVFJMLCBjdHJsKTsKIAllMWVfZmx1c2goKTsKLQltc2xlZXAoMSk7CisJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwogCiAJLyoKIAkgKiBGb3IgdGhlc2UgYWRhcHRlcnMsIHRoZSBTVyBkZWZpbmFibGUgcGluIDEgaXMgc2V0IHdoZW4gdGhlIG9wdGljcwpAQCAtMTE4MSw3ICsxMTgxLDcgQEAKIAkJCSAqIG9mIHBhdXNlIGZyYW1lcy4gIEluIHRoaXMgY2FzZSwgd2UgaGFkIHRvIGFkdmVydGlzZQogCQkJICogRlVMTCBmbG93IGNvbnRyb2wgYmVjYXVzZSB3ZSBjb3VsZCBub3QgYWR2ZXJ0aXNlIFJ4CiAJCQkgKiBPTkxZLiBIZW5jZSwgd2UgbXVzdCBub3cgY2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8KLQkJCSAqIHR1cm4gT0ZGICB0aGUgVFJBTlNNSVNTSU9OIG9mIFBBVVNFIGZyYW1lcy4KKwkJCSAqIHR1cm4gT0ZGIHRoZSBUUkFOU01JU1NJT04gb2YgUEFVU0UgZnJhbWVzLgogCQkJICovCiAJCQlpZiAoaHctPmZjLnJlcXVlc3RlZF9tb2RlID09IGUxMDAwX2ZjX2Z1bGwpIHsKIAkJCQlody0+ZmMuY3VycmVudF9tb2RlID0gZTEwMDBfZmNfZnVsbDsKQEAgLTEzODUsNyArMTM4NSw3IEBACiAJd2hpbGUgKGkgPCBBVVRPX1JFQURfRE9ORV9USU1FT1VUKSB7CiAJCWlmIChlcjMyKEVFQ0QpICYgRTEwMDBfRUVDRF9BVVRPX1JEKQogCQkJYnJlYWs7Ci0JCW1zbGVlcCgxKTsKKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwogCQlpKys7CiAJfQogCkBAIC0xNTMwLDEyICsxNTMwLDEyIEBACiB9CiAKIC8qKgotICogIGUxMDAwZV9ibGlua19sZWQgLSBCbGluayBMRUQKKyAqICBlMTAwMGVfYmxpbmtfbGVkX2dlbmVyaWMgLSBCbGluayBMRUQKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKICAqICBCbGluayB0aGUgTEVEcyB3aGljaCBhcmUgc2V0IHRvIGJlIG9uLgogICoqLwotczMyIGUxMDAwZV9ibGlua19sZWQoc3RydWN0IGUxMDAwX2h3ICpodykKK3MzMiBlMTAwMGVfYmxpbmtfbGVkX2dlbmVyaWMoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKIAl1MzIgbGVkY3RsX2JsaW5rID0gMDsKIAl1MzIgaTsKQEAgLTIwODcsOCArMjA4Nyw2IEBACiAJaWYgKHJldF92YWwpCiAJCXJldHVybiByZXRfdmFsOwogCi0JbXNsZWVwKDEwKTsKLQogCXdoaWxlICh3aWR4IDwgd29yZHMpIHsKIAkJdTggd3JpdGVfb3Bjb2RlID0gTlZNX1dSSVRFX09QQ09ERV9TUEk7CiAKQEAgLTIxMzIsNyArMjEzMCw3IEBACiAJCX0KIAl9CiAKLQltc2xlZXAoMTApOworCXVzbGVlcF9yYW5nZSgxMDAwMCwgMjAwMDApOwogCW52bS0+b3BzLnJlbGVhc2UoaHcpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCmluZGV4IDUwNmEwYTAuLmQ5NjAwNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbV9xb3NfcGFyYW1zLmg+CiAjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Flci5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKICNpbmNsdWRlICJlMTAwMC5oIgogCkBAIC01OCw2ICs1OSw4IEBACiBjaGFyIGUxMDAwZV9kcml2ZXJfbmFtZVtdID0gImUxMDAwZSI7CiBjb25zdCBjaGFyIGUxMDAwZV9kcml2ZXJfdmVyc2lvbltdID0gRFJWX1ZFUlNJT047CiAKK3N0YXRpYyB2b2lkIGUxMDAwZV9kaXNhYmxlX2FzcG0oc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUxNiBzdGF0ZSk7CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZTEwMDBfaW5mbyAqZTEwMDBfaW5mb190YmxbXSA9IHsKIAlbYm9hcmRfODI1NzFdCQk9ICZlMTAwMF84MjU3MV9pbmZvLAogCVtib2FyZF84MjU3Ml0JCT0gJmUxMDAwXzgyNTcyX2luZm8sCkBAIC00NTksMTMgKzQ2MiwxMyBAQAogCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgIHU4IHN0YXR1cywgX19sZTE2IHZsYW4pCiB7CisJdTE2IHRhZyA9IGxlMTZfdG9fY3B1KHZsYW4pOwogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldGRldik7CiAKLQlpZiAoYWRhcHRlci0+dmxncnAgJiYgKHN0YXR1cyAmIEUxMDAwX1JYRF9TVEFUX1ZQKSkKLQkJdmxhbl9ncm9fcmVjZWl2ZSgmYWRhcHRlci0+bmFwaSwgYWRhcHRlci0+dmxncnAsCi0JCQkJIGxlMTZfdG9fY3B1KHZsYW4pLCBza2IpOwotCWVsc2UKLQkJbmFwaV9ncm9fcmVjZWl2ZSgmYWRhcHRlci0+bmFwaSwgc2tiKTsKKwlpZiAoc3RhdHVzICYgRTEwMDBfUlhEX1NUQVRfVlApCisJCV9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCB0YWcpOworCisJbmFwaV9ncm9fcmVjZWl2ZSgmYWRhcHRlci0+bmFwaSwgc2tiKTsKIH0KIAogLyoqCkBAIC0yNDMzLDYgKzI0MzYsOCBAQAogCQl2ZnRhIHw9ICgxIDw8ICh2aWQgJiAweDFGKSk7CiAJCWh3LT5tYWMub3BzLndyaXRlX3ZmdGEoaHcsIGluZGV4LCB2ZnRhKTsKIAl9CisKKwlzZXRfYml0KHZpZCwgYWRhcHRlci0+YWN0aXZlX3ZsYW5zKTsKIH0KIAogc3RhdGljIHZvaWQgZTEwMDBfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgdmlkKQpAQCAtMjQ0MSwxMyArMjQ0Niw2IEBACiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgdmZ0YSwgaW5kZXg7CiAKLQlpZiAoIXRlc3RfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKLQkJZTEwMDBfaXJxX2Rpc2FibGUoYWRhcHRlcik7Ci0Jdmxhbl9ncm91cF9zZXRfZGV2aWNlKGFkYXB0ZXItPnZsZ3JwLCB2aWQsIE5VTEwpOwotCi0JaWYgKCF0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCi0JCWUxMDAwX2lycV9lbmFibGUoYWRhcHRlcik7Ci0KIAlpZiAoKGFkYXB0ZXItPmh3Lm1uZ19jb29raWUuc3RhdHVzICYKIAkgICAgIEUxMDAwX01OR19ESENQX0NPT0tJRV9TVEFUVVNfVkxBTikgJiYKIAkgICAgKHZpZCA9PSBhZGFwdGVyLT5tbmdfdmxhbl9pZCkpIHsKQEAgLTI0NjMsNiArMjQ2MSw3OSBAQAogCQl2ZnRhICY9IH4oMSA8PCAodmlkICYgMHgxRikpOwogCQlody0+bWFjLm9wcy53cml0ZV92ZnRhKGh3LCBpbmRleCwgdmZ0YSk7CiAJfQorCisJY2xlYXJfYml0KHZpZCwgYWRhcHRlci0+YWN0aXZlX3ZsYW5zKTsKK30KKworLyoqCisgKiBlMTAwMGVfdmxhbl9maWx0ZXJfZGlzYWJsZSAtIGhlbHBlciB0byBkaXNhYmxlIGh3IFZMQU4gZmlsdGVyaW5nCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoqLworc3RhdGljIHZvaWQgZTEwMDBlX3ZsYW5fZmlsdGVyX2Rpc2FibGUoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiByY3RsOworCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgRkxBR19IQVNfSFdfVkxBTl9GSUxURVIpIHsKKwkJLyogZGlzYWJsZSBWTEFOIHJlY2VpdmUgZmlsdGVyaW5nICovCisJCXJjdGwgPSBlcjMyKFJDVEwpOworCQlyY3RsICY9IH4oRTEwMDBfUkNUTF9WRkUgfCBFMTAwMF9SQ1RMX0NGSUVOKTsKKwkJZXczMihSQ1RMLCByY3RsKTsKKworCQlpZiAoYWRhcHRlci0+bW5nX3ZsYW5faWQgIT0gKHUxNilFMTAwMF9NTkdfVkxBTl9OT05FKSB7CisJCQllMTAwMF92bGFuX3J4X2tpbGxfdmlkKG5ldGRldiwgYWRhcHRlci0+bW5nX3ZsYW5faWQpOworCQkJYWRhcHRlci0+bW5nX3ZsYW5faWQgPSBFMTAwMF9NTkdfVkxBTl9OT05FOworCQl9CisJfQorfQorCisvKioKKyAqIGUxMDAwZV92bGFuX2ZpbHRlcl9lbmFibGUgLSBoZWxwZXIgdG8gZW5hYmxlIEhXIFZMQU4gZmlsdGVyaW5nCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoqLworc3RhdGljIHZvaWQgZTEwMDBlX3ZsYW5fZmlsdGVyX2VuYWJsZShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiByY3RsOworCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgRkxBR19IQVNfSFdfVkxBTl9GSUxURVIpIHsKKwkJLyogZW5hYmxlIFZMQU4gcmVjZWl2ZSBmaWx0ZXJpbmcgKi8KKwkJcmN0bCA9IGVyMzIoUkNUTCk7CisJCXJjdGwgfD0gRTEwMDBfUkNUTF9WRkU7CisJCXJjdGwgJj0gfkUxMDAwX1JDVExfQ0ZJRU47CisJCWV3MzIoUkNUTCwgcmN0bCk7CisJfQorfQorCisvKioKKyAqIGUxMDAwZV92bGFuX3N0cmlwX2VuYWJsZSAtIGhlbHBlciB0byBkaXNhYmxlIEhXIFZMQU4gc3RyaXBwaW5nCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoqLworc3RhdGljIHZvaWQgZTEwMDBlX3ZsYW5fc3RyaXBfZGlzYWJsZShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiBjdHJsOworCisJLyogZGlzYWJsZSBWTEFOIHRhZyBpbnNlcnQvc3RyaXAgKi8KKwljdHJsID0gZXIzMihDVFJMKTsKKwljdHJsICY9IH5FMTAwMF9DVFJMX1ZNRTsKKwlldzMyKENUUkwsIGN0cmwpOworfQorCisvKioKKyAqIGUxMDAwZV92bGFuX3N0cmlwX2VuYWJsZSAtIGhlbHBlciB0byBlbmFibGUgSFcgVkxBTiBzdHJpcHBpbmcKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZSB0byBpbml0aWFsaXplCisgKiovCitzdGF0aWMgdm9pZCBlMTAwMGVfdmxhbl9zdHJpcF9lbmFibGUoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgY3RybDsKKworCS8qIGVuYWJsZSBWTEFOIHRhZyBpbnNlcnQvc3RyaXAgKi8KKwljdHJsID0gZXIzMihDVFJMKTsKKwljdHJsIHw9IEUxMDAwX0NUUkxfVk1FOworCWV3MzIoQ1RSTCwgY3RybCk7CiB9CiAKIHN0YXRpYyB2b2lkIGUxMDAwX3VwZGF0ZV9tbmdfdmxhbihzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKQEAgLTI0NzEsODUgKzI1NDIsMjQgQEAKIAl1MTYgdmlkID0gYWRhcHRlci0+aHcubW5nX2Nvb2tpZS52bGFuX2lkOwogCXUxNiBvbGRfdmlkID0gYWRhcHRlci0+bW5nX3ZsYW5faWQ7CiAKLQlpZiAoIWFkYXB0ZXItPnZsZ3JwKQotCQlyZXR1cm47Ci0KLQlpZiAoIXZsYW5fZ3JvdXBfZ2V0X2RldmljZShhZGFwdGVyLT52bGdycCwgdmlkKSkgewotCQlhZGFwdGVyLT5tbmdfdmxhbl9pZCA9IEUxMDAwX01OR19WTEFOX05PTkU7Ci0JCWlmIChhZGFwdGVyLT5ody5tbmdfY29va2llLnN0YXR1cyAmCi0JCQlFMTAwMF9NTkdfREhDUF9DT09LSUVfU1RBVFVTX1ZMQU4pIHsKLQkJCWUxMDAwX3ZsYW5fcnhfYWRkX3ZpZChuZXRkZXYsIHZpZCk7Ci0JCQlhZGFwdGVyLT5tbmdfdmxhbl9pZCA9IHZpZDsKLQkJfQotCi0JCWlmICgob2xkX3ZpZCAhPSAodTE2KUUxMDAwX01OR19WTEFOX05PTkUpICYmCi0JCQkJKHZpZCAhPSBvbGRfdmlkKSAmJgotCQkgICAgIXZsYW5fZ3JvdXBfZ2V0X2RldmljZShhZGFwdGVyLT52bGdycCwgb2xkX3ZpZCkpCi0JCQllMTAwMF92bGFuX3J4X2tpbGxfdmlkKG5ldGRldiwgb2xkX3ZpZCk7Ci0JfSBlbHNlIHsKKwlpZiAoYWRhcHRlci0+aHcubW5nX2Nvb2tpZS5zdGF0dXMgJgorCSAgICBFMTAwMF9NTkdfREhDUF9DT09LSUVfU1RBVFVTX1ZMQU4pIHsKKwkJZTEwMDBfdmxhbl9yeF9hZGRfdmlkKG5ldGRldiwgdmlkKTsKIAkJYWRhcHRlci0+bW5nX3ZsYW5faWQgPSB2aWQ7CiAJfQotfQogCi0KLXN0YXRpYyB2b2lkIGUxMDAwX3ZsYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKLQkJCQkgICBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwKQotewotCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCXUzMiBjdHJsLCByY3RsOwotCi0JaWYgKCF0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCi0JCWUxMDAwX2lycV9kaXNhYmxlKGFkYXB0ZXIpOwotCWFkYXB0ZXItPnZsZ3JwID0gZ3JwOwotCi0JaWYgKGdycCkgewotCQkvKiBlbmFibGUgVkxBTiB0YWcgaW5zZXJ0L3N0cmlwICovCi0JCWN0cmwgPSBlcjMyKENUUkwpOwotCQljdHJsIHw9IEUxMDAwX0NUUkxfVk1FOwotCQlldzMyKENUUkwsIGN0cmwpOwotCi0JCWlmIChhZGFwdGVyLT5mbGFncyAmIEZMQUdfSEFTX0hXX1ZMQU5fRklMVEVSKSB7Ci0JCQkvKiBlbmFibGUgVkxBTiByZWNlaXZlIGZpbHRlcmluZyAqLwotCQkJcmN0bCA9IGVyMzIoUkNUTCk7Ci0JCQlyY3RsICY9IH5FMTAwMF9SQ1RMX0NGSUVOOwotCQkJZXczMihSQ1RMLCByY3RsKTsKLQkJCWUxMDAwX3VwZGF0ZV9tbmdfdmxhbihhZGFwdGVyKTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIGRpc2FibGUgVkxBTiB0YWcgaW5zZXJ0L3N0cmlwICovCi0JCWN0cmwgPSBlcjMyKENUUkwpOwotCQljdHJsICY9IH5FMTAwMF9DVFJMX1ZNRTsKLQkJZXczMihDVFJMLCBjdHJsKTsKLQotCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX0hBU19IV19WTEFOX0ZJTFRFUikgewotCQkJaWYgKGFkYXB0ZXItPm1uZ192bGFuX2lkICE9Ci0JCQkgICAgKHUxNilFMTAwMF9NTkdfVkxBTl9OT05FKSB7Ci0JCQkJZTEwMDBfdmxhbl9yeF9raWxsX3ZpZChuZXRkZXYsCi0JCQkJCQkgICAgICAgYWRhcHRlci0+bW5nX3ZsYW5faWQpOwotCQkJCWFkYXB0ZXItPm1uZ192bGFuX2lkID0gRTEwMDBfTU5HX1ZMQU5fTk9ORTsKLQkJCX0KLQkJfQotCX0KLQotCWlmICghdGVzdF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQotCQllMTAwMF9pcnFfZW5hYmxlKGFkYXB0ZXIpOworCWlmICgob2xkX3ZpZCAhPSAodTE2KUUxMDAwX01OR19WTEFOX05PTkUpICYmICh2aWQgIT0gb2xkX3ZpZCkpCisJCWUxMDAwX3ZsYW5fcnhfa2lsbF92aWQobmV0ZGV2LCBvbGRfdmlkKTsKIH0KIAogc3RhdGljIHZvaWQgZTEwMDBfcmVzdG9yZV92bGFuKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewogCXUxNiB2aWQ7CiAKLQllMTAwMF92bGFuX3J4X3JlZ2lzdGVyKGFkYXB0ZXItPm5ldGRldiwgYWRhcHRlci0+dmxncnApOworCWUxMDAwX3ZsYW5fcnhfYWRkX3ZpZChhZGFwdGVyLT5uZXRkZXYsIDApOwogCi0JaWYgKCFhZGFwdGVyLT52bGdycCkKLQkJcmV0dXJuOwotCi0JZm9yICh2aWQgPSAwOyB2aWQgPCBWTEFOX05fVklEOyB2aWQrKykgewotCQlpZiAoIXZsYW5fZ3JvdXBfZ2V0X2RldmljZShhZGFwdGVyLT52bGdycCwgdmlkKSkKLQkJCWNvbnRpbnVlOworCWZvcl9lYWNoX3NldF9iaXQodmlkLCBhZGFwdGVyLT5hY3RpdmVfdmxhbnMsIFZMQU5fTl9WSUQpCiAJCWUxMDAwX3ZsYW5fcnhfYWRkX3ZpZChhZGFwdGVyLT5uZXRkZXYsIHZpZCk7Ci0JfQogfQogCiBzdGF0aWMgdm9pZCBlMTAwMF9pbml0X21hbmFnZWFiaWxpdHlfcHQoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC0yOTAyLDcgKzI5MTIsNyBAQAogCXJjdGwgPSBlcjMyKFJDVEwpOwogCWV3MzIoUkNUTCwgcmN0bCAmIH5FMTAwMF9SQ1RMX0VOKTsKIAllMWVfZmx1c2goKTsKLQltc2xlZXAoMTApOworCXVzbGVlcF9yYW5nZSgxMDAwMCwgMjAwMDApOwogCiAJaWYgKGFkYXB0ZXItPmZsYWdzMiAmIEZMQUcyX0RNQV9CVVJTVCkgewogCQkvKgpAQCAtMzAzOSw2ICszMDQ5LDggQEAKIAlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJCXJjdGwgfD0gKEUxMDAwX1JDVExfVVBFIHwgRTEwMDBfUkNUTF9NUEUpOwogCQlyY3RsICY9IH5FMTAwMF9SQ1RMX1ZGRTsKKwkJLyogRG8gbm90IGhhcmR3YXJlIGZpbHRlciBWTEFOcyBpbiBwcm9taXNjIG1vZGUgKi8KKwkJZTEwMDBlX3ZsYW5fZmlsdGVyX2Rpc2FibGUoYWRhcHRlcik7CiAJfSBlbHNlIHsKIAkJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKIAkJCXJjdGwgfD0gRTEwMDBfUkNUTF9NUEU7CkBAIC0zMDQ2LDggKzMwNTgsNyBAQAogCQl9IGVsc2UgewogCQkJcmN0bCAmPSB+KEUxMDAwX1JDVExfVVBFIHwgRTEwMDBfUkNUTF9NUEUpOwogCQl9Ci0JCWlmIChhZGFwdGVyLT5mbGFncyAmIEZMQUdfSEFTX0hXX1ZMQU5fRklMVEVSKQotCQkJcmN0bCB8PSBFMTAwMF9SQ1RMX1ZGRTsKKwkJZTEwMDBlX3ZsYW5fZmlsdGVyX2VuYWJsZShhZGFwdGVyKTsKIAl9CiAKIAlldzMyKFJDVEwsIHJjdGwpOwpAQCAtMzA3Miw2ICszMDgzLDExIEBACiAJCSAqLwogCQllMTAwMF91cGRhdGVfbWNfYWRkcl9saXN0KGh3LCBOVUxMLCAwKTsKIAl9CisKKwlpZiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSFdfVkxBTl9SWCkKKwkJZTEwMDBlX3ZsYW5fc3RyaXBfZW5hYmxlKGFkYXB0ZXIpOworCWVsc2UKKwkJZTEwMDBlX3ZsYW5fc3RyaXBfZGlzYWJsZShhZGFwdGVyKTsKIH0KIAogLyoqCkBAIC0zMzgzLDcgKzMzOTksNyBAQAogCWV3MzIoVENUTCwgdGN0bCk7CiAJLyogZmx1c2ggYm90aCBkaXNhYmxlcyBhbmQgd2FpdCBmb3IgdGhlbSB0byBmaW5pc2ggKi8KIAllMWVfZmx1c2goKTsKLQltc2xlZXAoMTApOworCXVzbGVlcF9yYW5nZSgxMDAwMCwgMjAwMDApOwogCiAJbmFwaV9kaXNhYmxlKCZhZGFwdGVyLT5uYXBpKTsKIAllMTAwMF9pcnFfZGlzYWJsZShhZGFwdGVyKTsKQEAgLTM0MTgsNyArMzQzNCw3IEBACiB7CiAJbWlnaHRfc2xlZXAoKTsKIAl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChfX0UxMDAwX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKLQkJbXNsZWVwKDEpOworCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CiAJZTEwMDBlX2Rvd24oYWRhcHRlcik7CiAJZTEwMDBlX3VwKGFkYXB0ZXIpOwogCWNsZWFyX2JpdChfX0UxMDAwX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKQEAgLTM3MjEsMTAgKzM3MzcsOCBAQAogCSAqIGtpbGwgbWFuYWdlYWJpbGl0eSB2bGFuIElEIGlmIHN1cHBvcnRlZCwgYnV0IG5vdCBpZiBhIHZsYW4gd2l0aAogCSAqIHRoZSBzYW1lIElEIGlzIHJlZ2lzdGVyZWQgb24gdGhlIGhvc3QgT1MgKGxldCA4MDIxcSBraWxsIGl0KQogCSAqLwotCWlmICgoYWRhcHRlci0+aHcubW5nX2Nvb2tpZS5zdGF0dXMgJgotCQkJICBFMTAwMF9NTkdfREhDUF9DT09LSUVfU1RBVFVTX1ZMQU4pICYmCi0JICAgICAhKGFkYXB0ZXItPnZsZ3JwICYmCi0JICAgICAgIHZsYW5fZ3JvdXBfZ2V0X2RldmljZShhZGFwdGVyLT52bGdycCwgYWRhcHRlci0+bW5nX3ZsYW5faWQpKSkKKwlpZiAoYWRhcHRlci0+aHcubW5nX2Nvb2tpZS5zdGF0dXMgJgorCSAgICBFMTAwMF9NTkdfREhDUF9DT09LSUVfU1RBVFVTX1ZMQU4pCiAJCWUxMDAwX3ZsYW5fcnhfa2lsbF92aWQobmV0ZGV2LCBhZGFwdGVyLT5tbmdfdmxhbl9pZCk7CiAKIAkvKgpAQCAtNDMyOCw3ICs0MzQyLDYgQEAKIGxpbmtfdXA6CiAJc3Bpbl9sb2NrKCZhZGFwdGVyLT5zdGF0czY0X2xvY2spOwogCWUxMDAwZV91cGRhdGVfc3RhdHMoYWRhcHRlcik7Ci0Jc3Bpbl91bmxvY2soJmFkYXB0ZXItPnN0YXRzNjRfbG9jayk7CiAKIAltYWMtPnR4X3BhY2tldF9kZWx0YSA9IGFkYXB0ZXItPnN0YXRzLnRwdCAtIGFkYXB0ZXItPnRwdF9vbGQ7CiAJYWRhcHRlci0+dHB0X29sZCA9IGFkYXB0ZXItPnN0YXRzLnRwdDsKQEAgLTQzMzksNiArNDM1Miw3IEBACiAJYWRhcHRlci0+Z29yY19vbGQgPSBhZGFwdGVyLT5zdGF0cy5nb3JjOwogCWFkYXB0ZXItPmdvdGMgPSBhZGFwdGVyLT5zdGF0cy5nb3RjIC0gYWRhcHRlci0+Z290Y19vbGQ7CiAJYWRhcHRlci0+Z290Y19vbGQgPSBhZGFwdGVyLT5zdGF0cy5nb3RjOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5zdGF0czY0X2xvY2spOwogCiAJZTEwMDBlX3VwZGF0ZV9hZGFwdGl2ZSgmYWRhcHRlci0+aHcpOwogCkBAIC01MDI4LDcgKzUwNDIsNyBAQAogCX0KIAogCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fRTEwMDBfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQotCQltc2xlZXAoMSk7CisJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKIAkvKiBlMTAwMGVfZG93biAtPiBlMTAwMGVfcmVzZXQgZGVwZW5kZW50IG9uIG1heF9mcmFtZV9zaXplICYgbXR1ICovCiAJYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUgPSBtYXhfZnJhbWU7CiAJZV9pbmZvKCJjaGFuZ2luZyBNVFUgZnJvbSAlZCB0byAlZFxuIiwgbmV0ZGV2LT5tdHUsIG5ld19tdHUpOwpAQCAtNTM3Myw3ICs1Mzg3LDcgQEAKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldi0+YnVzLT5zZWxmLCBwb3MgKyBQQ0lfRVhQX0xOS0NUTCwgcmVnMTYpOwogfQogI2VuZGlmCi12b2lkIGUxMDAwZV9kaXNhYmxlX2FzcG0oc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUxNiBzdGF0ZSkKK3N0YXRpYyB2b2lkIGUxMDAwZV9kaXNhYmxlX2FzcG0oc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUxNiBzdGF0ZSkKIHsKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiRGlzYWJsaW5nIEFTUE0gJXMgJXNcbiIsCiAJCSAoc3RhdGUgJiBQQ0lFX0xJTktfU1RBVEVfTDBTKSA/ICJMMHMiIDogIiIsCkBAIC01MzkzLDEzICs1NDA3LDE5IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MTYgYXNwbV9kaXNhYmxlX2ZsYWcgPSAwOwogCXUzMiBlcnI7CiAKKwlpZiAoYWRhcHRlci0+ZmxhZ3MyICYgRkxBRzJfRElTQUJMRV9BU1BNX0wwUykKKwkJYXNwbV9kaXNhYmxlX2ZsYWcgPSBQQ0lFX0xJTktfU1RBVEVfTDBTOworCWlmIChhZGFwdGVyLT5mbGFnczIgJiBGTEFHMl9ESVNBQkxFX0FTUE1fTDEpCisJCWFzcG1fZGlzYWJsZV9mbGFnIHw9IFBDSUVfTElOS19TVEFURV9MMTsKKwlpZiAoYXNwbV9kaXNhYmxlX2ZsYWcpCisJCWUxMDAwZV9kaXNhYmxlX2FzcG0ocGRldiwgYXNwbV9kaXNhYmxlX2ZsYWcpOworCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOwogCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwotCWlmIChhZGFwdGVyLT5mbGFnczIgJiBGTEFHMl9ESVNBQkxFX0FTUE1fTDEpCi0JCWUxMDAwZV9kaXNhYmxlX2FzcG0ocGRldiwgUENJRV9MSU5LX1NUQVRFX0wxKTsKIAogCWUxMDAwZV9zZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7CiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewpAQCAtNTY0MywxMSArNTY2MywxNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTE2IGFzcG1fZGlzYWJsZV9mbGFnID0gMDsKIAlpbnQgZXJyOwogCXBjaV9lcnNfcmVzdWx0X3QgcmVzdWx0OwogCisJaWYgKGFkYXB0ZXItPmZsYWdzMiAmIEZMQUcyX0RJU0FCTEVfQVNQTV9MMFMpCisJCWFzcG1fZGlzYWJsZV9mbGFnID0gUENJRV9MSU5LX1NUQVRFX0wwUzsKIAlpZiAoYWRhcHRlci0+ZmxhZ3MyICYgRkxBRzJfRElTQUJMRV9BU1BNX0wxKQotCQllMTAwMGVfZGlzYWJsZV9hc3BtKHBkZXYsIFBDSUVfTElOS19TVEFURV9MMSk7CisJCWFzcG1fZGlzYWJsZV9mbGFnIHw9IFBDSUVfTElOS19TVEFURV9MMTsKKwlpZiAoYXNwbV9kaXNhYmxlX2ZsYWcpCisJCWUxMDAwZV9kaXNhYmxlX2FzcG0ocGRldiwgYXNwbV9kaXNhYmxlX2ZsYWcpOworCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LApAQCAtNTcxNCw3ICs1NzQwLDcgQEAKIAl1OCBwYmFfc3RyW0UxMDAwX1BCQU5VTV9MRU5HVEhdOwogCiAJLyogcHJpbnQgYnVzIHR5cGUvc3BlZWQvd2lkdGggaW5mbyAqLwotCWVfaW5mbygiKFBDSSBFeHByZXNzOjIuNUdCL3M6JXMpICVwTVxuIiwKKwllX2luZm8oIihQQ0kgRXhwcmVzczoyLjVHVC9zOiVzKSAlcE1cbiIsCiAJICAgICAgIC8qIGJ1cyB3aWR0aCAqLwogCSAgICAgICAoKGh3LT5idXMud2lkdGggPT0gZTEwMDBfYnVzX3dpZHRoX3BjaWVfeDQpID8gIldpZHRoIHg0IiA6CiAJICAgICAgICAiV2lkdGggeDEiKSwKQEAgLTU3NTksNyArNTc4NSw2IEBACiAJLm5kb190eF90aW1lb3V0CQk9IGUxMDAwX3R4X3RpbWVvdXQsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiAKLQkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIJPSBlMTAwMF92bGFuX3J4X3JlZ2lzdGVyLAogCS5uZG9fdmxhbl9yeF9hZGRfdmlkCT0gZTEwMDBfdmxhbl9yeF9hZGRfdmlkLAogCS5uZG9fdmxhbl9yeF9raWxsX3ZpZAk9IGUxMDAwX3ZsYW5fcnhfa2lsbF92aWQsCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKQEAgLTU3ODksMTIgKzU4MTQsMTcgQEAKIAlyZXNvdXJjZV9zaXplX3QgZmxhc2hfc3RhcnQsIGZsYXNoX2xlbjsKIAogCXN0YXRpYyBpbnQgY2FyZHNfZm91bmQ7CisJdTE2IGFzcG1fZGlzYWJsZV9mbGFnID0gMDsKIAlpbnQgaSwgZXJyLCBwY2lfdXNpbmdfZGFjOwogCXUxNiBlZXByb21fZGF0YSA9IDA7CiAJdTE2IGVlcHJvbV9hcG1lX21hc2sgPSBFMTAwMF9FRVBST01fQVBNRTsKIAorCWlmIChlaS0+ZmxhZ3MyICYgRkxBRzJfRElTQUJMRV9BU1BNX0wwUykKKwkJYXNwbV9kaXNhYmxlX2ZsYWcgPSBQQ0lFX0xJTktfU1RBVEVfTDBTOwogCWlmIChlaS0+ZmxhZ3MyICYgRkxBRzJfRElTQUJMRV9BU1BNX0wxKQotCQllMTAwMGVfZGlzYWJsZV9hc3BtKHBkZXYsIFBDSUVfTElOS19TVEFURV9MMSk7CisJCWFzcG1fZGlzYWJsZV9mbGFnIHw9IFBDSUVfTElOS19TVEFURV9MMTsKKwlpZiAoYXNwbV9kaXNhYmxlX2ZsYWcpCisJCWUxMDAwZV9kaXNhYmxlX2FzcG0ocGRldiwgYXNwbV9kaXNhYmxlX2ZsYWcpOwogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOwogCWlmIChlcnIpCkBAIC01OTkxLDcgKzYwMjEsNiBAQAogCUlOSVRfV09SSygmYWRhcHRlci0+ZG93bnNoaWZ0X3Rhc2ssIGUxMDAwZV9kb3duc2hpZnRfd29ya2Fyb3VuZCk7CiAJSU5JVF9XT1JLKCZhZGFwdGVyLT51cGRhdGVfcGh5X3Rhc2ssIGUxMDAwZV91cGRhdGVfcGh5X3Rhc2spOwogCUlOSVRfV09SSygmYWRhcHRlci0+cHJpbnRfaGFuZ190YXNrLCBlMTAwMF9wcmludF9od19oYW5nKTsKLQlJTklUX1dPUksoJmFkYXB0ZXItPmxlZF9ibGlua190YXNrLCBlMTAwMGVfbGVkX2JsaW5rX3Rhc2spOwogCiAJLyogSW5pdGlhbGl6ZSBsaW5rIHBhcmFtZXRlcnMuIFVzZXIgY2FuIGNoYW5nZSB0aGVtIHdpdGggZXRodG9vbCAqLwogCWFkYXB0ZXItPmh3Lm1hYy5hdXRvbmVnID0gMTsKQEAgLTYxMjQsNyArNjE1Myw2IEBACiAJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+d2F0Y2hkb2dfdGFzayk7CiAJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+ZG93bnNoaWZ0X3Rhc2spOwogCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnVwZGF0ZV9waHlfdGFzayk7Ci0JY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+bGVkX2JsaW5rX3Rhc2spOwogCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnByaW50X2hhbmdfdGFzayk7CiAKIAlpZiAoIShuZXRkZXYtPmZsYWdzICYgSUZGX1VQKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9waHkuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9waHkuYwppbmRleCA2YWUzMWZjLi40ODQ3NzRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL3BoeS5jCkBAIC0yMzcyLDcgKzIzNzIsNyBAQAogCQkJCXJldF92YWwgPSAwOwogCQkJCWdvdG8gb3V0OwogCQkJfQotCQkJbXNsZWVwKDEpOworCQkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwogCQkJaSsrOwogCQl9IHdoaWxlIChpIDwgMTApOwogCX0KQEAgLTI3NDAsNyArMjc0MCw3IEBACiAJZTFlX3JwaHkoaHcsIFBIWV9DT05UUk9MLCAmbWlpX3JlZyk7CiAJbWlpX3JlZyB8PSBNSUlfQ1JfUE9XRVJfRE9XTjsKIAllMWVfd3BoeShodywgUEhZX0NPTlRST0wsIG1paV9yZWcpOwotCW1zbGVlcCgxKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWVwcm8uYyBiL2RyaXZlcnMvbmV0L2VlcHJvLmMKaW5kZXggZWIzNTk1MS4uZGZlYjAwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWVwcm8uYworKysgYi9kcml2ZXJzL25ldC9lZXByby5jCkBAIC0xNzAzLDcgKzE3MDMsNyBAQAogCQljbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfQVVJOwogCX0KIAotCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDsKKwlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBTUEVFRF8xMCk7CiAKIAlpZiAoZGV2LT5pZl9wb3J0ID09IFRQRSAmJiBscC0+d29yZFsxXSAmIGVlX0R1cGxleCkgewogCQljbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9ldGh0b29sLmMKaW5kZXggM2UyZTczNC4uN2Y2NDJhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfZXRodG9vbC5jCkBAIC0zNCw2ICszNCw3IEBACiBzdGF0aWMgaW50IGVoZWFfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewogCXN0cnVjdCBlaGVhX3BvcnQgKnBvcnQgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiBzcGVlZDsKIAlpbnQgcmV0OwogCiAJcmV0ID0gZWhlYV9zZW5zZV9wb3J0X2F0dHIocG9ydCk7CkBAIC00MywyNyArNDQsNDQgQEAKIAogCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKIAkJc3dpdGNoIChwb3J0LT5wb3J0X3NwZWVkKSB7Ci0JCWNhc2UgRUhFQV9TUEVFRF8xME06IGNtZC0+c3BlZWQgPSBTUEVFRF8xMDsgYnJlYWs7Ci0JCWNhc2UgRUhFQV9TUEVFRF8xMDBNOiBjbWQtPnNwZWVkID0gU1BFRURfMTAwOyBicmVhazsKLQkJY2FzZSBFSEVBX1NQRUVEXzFHOiBjbWQtPnNwZWVkID0gU1BFRURfMTAwMDsgYnJlYWs7Ci0JCWNhc2UgRUhFQV9TUEVFRF8xMEc6IGNtZC0+c3BlZWQgPSBTUEVFRF8xMDAwMDsgYnJlYWs7CisJCWNhc2UgRUhFQV9TUEVFRF8xME06CisJCQlzcGVlZCA9IFNQRUVEXzEwOworCQkJYnJlYWs7CisJCWNhc2UgRUhFQV9TUEVFRF8xMDBNOgorCQkJc3BlZWQgPSBTUEVFRF8xMDA7CisJCQlicmVhazsKKwkJY2FzZSBFSEVBX1NQRUVEXzFHOgorCQkJc3BlZWQgPSBTUEVFRF8xMDAwOworCQkJYnJlYWs7CisJCWNhc2UgRUhFQV9TUEVFRF8xMEc6CisJCQlzcGVlZCA9IFNQRUVEXzEwMDAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzcGVlZCA9IC0xOworCQkJYnJlYWs7IC8qIEJVRyAqLwogCQl9CiAJCWNtZC0+ZHVwbGV4ID0gcG9ydC0+ZnVsbF9kdXBsZXggPT0gMSA/CiAJCQkJCQkgICAgIERVUExFWF9GVUxMIDogRFVQTEVYX0hBTEY7CiAJfSBlbHNlIHsKLQkJY21kLT5zcGVlZCA9IC0xOworCQlzcGVlZCA9IH4wOwogCQljbWQtPmR1cGxleCA9IC0xOwogCX0KKwlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBzcGVlZCk7CiAKLQljbWQtPnN1cHBvcnRlZCA9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsCi0JCSAgICAgICB8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIHwgIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmCi0JCSAgICAgICB8IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfCBTVVBQT1JURURfMTBiYXNlVF9IYWxmCi0JCSAgICAgICB8IFNVUFBPUlRFRF9BdXRvbmVnIHwgU1VQUE9SVEVEX0ZJQlJFKTsKKwlpZiAoY21kLT5zcGVlZCA9PSBTUEVFRF8xMDAwMCkgeworCQljbWQtPnN1cHBvcnRlZCA9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwgU1VQUE9SVEVEX0ZJQlJFKTsKKwkJY21kLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCB8IEFEVkVSVElTRURfRklCUkUpOworCQljbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOworCX0gZWxzZSB7CisJCWNtZC0+c3VwcG9ydGVkID0gKFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsCisJCQkgICAgICAgfCBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwKKwkJCSAgICAgICB8IFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfCBTVVBQT1JURURfQXV0b25lZworCQkJICAgICAgIHwgU1VQUE9SVEVEX1RQKTsKKwkJY21kLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsIHwgQURWRVJUSVNFRF9BdXRvbmVnCisJCQkJIHwgQURWRVJUSVNFRF9UUCk7CisJCWNtZC0+cG9ydCA9IFBPUlRfVFA7CisJfQogCi0JY21kLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCB8IEFEVkVSVElTRURfQXV0b25lZwotCQkJIHwgQURWRVJUSVNFRF9GSUJSRSk7Ci0KLQljbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOwogCWNtZC0+YXV0b25lZyA9IHBvcnQtPmF1dG9uZWcgPT0gMSA/IEFVVE9ORUdfRU5BQkxFIDogQVVUT05FR19ESVNBQkxFOwogCiAJcmV0dXJuIDA7CkBAIC0xNjIsMTEgKzE4MCw2IEBACiAJcG9ydC0+bXNnX2VuYWJsZSA9IHZhbHVlOwogfQogCi1zdGF0aWMgdTMyIGVoZWFfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gMTsKLX0KLQogc3RhdGljIGNoYXIgZWhlYV9ldGh0b29sX3N0YXRzX2tleXNbXVtFVEhfR1NUUklOR19MRU5dID0gewogCXsic2lnX2NvbXBfaXYifSwKIAl7InN3cWVfcmVmaWxsX3RoIn0sCkBAIC0yNjMsMzQgKzI3NiwxNiBAQAogCiB9CiAKLXN0YXRpYyBpbnQgZWhlYV9zZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0JLyogQXZvaWQgY2hhbmdpbmcgdGhlIFZMQU4gZmxhZ3MgKi8KLQlpZiAoKGRhdGEgJiAoRVRIX0ZMQUdfUlhWTEFOIHwgRVRIX0ZMQUdfVFhWTEFOKSkgIT0KLQkgICAgKGV0aHRvb2xfb3BfZ2V0X2ZsYWdzKGRldikgJiAoRVRIX0ZMQUdfUlhWTEFOIHwKLQkJCQkJICBFVEhfRkxBR19UWFZMQU4pKSl7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiBldGh0b29sX29wX3NldF9mbGFncyhkZXYsIGRhdGEsIEVUSF9GTEFHX0xSTwotCQkJCQl8IEVUSF9GTEFHX1RYVkxBTgotCQkJCQl8IEVUSF9GTEFHX1JYVkxBTik7Ci19Ci0KIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBlaGVhX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MgPSBlaGVhX2dldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8gPSBlaGVhX2dldF9kcnZpbmZvLAogCS5nZXRfbXNnbGV2ZWwgPSBlaGVhX2dldF9tc2dsZXZlbCwKIAkuc2V0X21zZ2xldmVsID0gZWhlYV9zZXRfbXNnbGV2ZWwsCiAJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKLQkuc2V0X3RzbyA9IGV0aHRvb2xfb3Bfc2V0X3RzbywKIAkuZ2V0X3N0cmluZ3MgPSBlaGVhX2dldF9zdHJpbmdzLAogCS5nZXRfc3NldF9jb3VudCA9IGVoZWFfZ2V0X3NzZXRfY291bnQsCiAJLmdldF9ldGh0b29sX3N0YXRzID0gZWhlYV9nZXRfZXRodG9vbF9zdGF0cywKLQkuZ2V0X3J4X2NzdW0gPSBlaGVhX2dldF9yeF9jc3VtLAogCS5zZXRfc2V0dGluZ3MgPSBlaGVhX3NldF9zZXR0aW5ncywKLQkuZ2V0X2ZsYWdzID0gZXRodG9vbF9vcF9nZXRfZmxhZ3MsCi0JLnNldF9mbGFncyA9IGVoZWFfc2V0X2ZsYWdzLAogCS5ud2F5X3Jlc2V0ID0gZWhlYV9ud2F5X3Jlc2V0LAkJLyogUmVzdGFydCBhdXRvbmVnb3RpYXRpb24gKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jCmluZGV4IGY3NWQzMTQuLjZhMGE4ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYwpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21lbW9yeS5oPgogI2luY2x1ZGUgPGFzbS9rZXhlYy5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgPG5ldC9pcC5oPgogCkBAIC0yNjg4LDkgKzI2ODksNiBAQAogCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCX0KIAotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBvcnQtPnN3cWVfYXZhaWxfd3EpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBvcnQtPnJlc3RhcnRfd3EpOwotCiAJbXV0ZXhfdW5sb2NrKCZwb3J0LT5wb3J0X2xvY2spOwogCiAJcmV0dXJuIHJldDsKQEAgLTMwNDAsMTEgKzMwMzgsMTQgQEAKIAogCQkJCQlpZiAoZGV2LT5mbGFncyAmIElGRl9VUCkgewogCQkJCQkJbXV0ZXhfbG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKLQkJCQkJCXBvcnRfbmFwaV9lbmFibGUocG9ydCk7CiAJCQkJCQlyZXQgPSBlaGVhX3Jlc3RhcnRfcXBzKGRldik7Ci0JCQkJCQljaGVja19zcXMocG9ydCk7Ci0JCQkJCQlpZiAoIXJldCkKKwkJCQkJCWlmICghcmV0KSB7CisJCQkJCQkJY2hlY2tfc3FzKHBvcnQpOworCQkJCQkJCXBvcnRfbmFwaV9lbmFibGUocG9ydCk7CiAJCQkJCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQluZXRkZXZfZXJyKGRldiwgIlVuYWJsZSB0byByZXN0YXJ0IFFQU1xuIik7CisJCQkJCQl9CiAJCQkJCQltdXRleF91bmxvY2soJnBvcnQtPnBvcnRfbG9jayk7CiAJCQkJCX0KIAkJCQl9CkBAIC0zMjYyLDEwICszMjYzLDEyIEBACiAJZGV2LT5uZXRkZXZfb3BzID0gJmVoZWFfbmV0ZGV2X29wczsKIAllaGVhX3NldF9ldGh0b29sX29wcyhkZXYpOwogCisJZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0ZSQUdMSVNUIHwgTkVUSUZfRl9UU08KKwkJICAgICAgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0xSTzsKIAlkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1QgfCBORVRJRl9GX1RTTwogCQkgICAgICB8IE5FVElGX0ZfSElHSERNQSB8IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSFdfVkxBTl9UWAogCQkgICAgICB8IE5FVElGX0ZfSFdfVkxBTl9SWCB8IE5FVElGX0ZfSFdfVkxBTl9GSUxURVIKLQkJICAgICAgfCBORVRJRl9GX0xMVFg7CisJCSAgICAgIHwgTkVUSUZfRl9MTFRYIHwgTkVUSUZfRl9SWENTVU07CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IEVIRUFfV0FUQ0hfRE9HX1RJTUVPVVQ7CiAKIAlpZiAodXNlX2xybykKQEAgLTMyNzMsNiArMzI3Niw5IEBACiAKIAlJTklUX1dPUksoJnBvcnQtPnJlc2V0X3Rhc2ssIGVoZWFfcmVzZXRfcG9ydCk7CiAKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0LT5zd3FlX2F2YWlsX3dxKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0LT5yZXN0YXJ0X3dxKTsKKwogCXJldCA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCJyZWdpc3Rlcl9uZXRkZXYgZmFpbGVkLiByZXQ9JWRcbiIsIHJldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfcW1yLmggYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfcW1yLmgKaW5kZXggMzgxMDQ3My4uZmRkZmY4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX3Ftci5oCisrKyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9xbXIuaApAQCAtMjksNiArMjksNyBAQAogI2lmbmRlZiBfX0VIRUFfUU1SX0hfXwogI2RlZmluZSBfX0VIRUFfUU1SX0hfXwogCisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlICJlaGVhLmgiCiAjaW5jbHVkZSAiZWhlYV9ody5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmMyOGo2MC5jIGIvZHJpdmVycy9uZXQvZW5jMjhqNjAuYwppbmRleCA5MDdiMDVhLi4yODM3Y2UyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmMyOGo2MC5jCisrKyBiL2RyaXZlcnMvbmV0L2VuYzI4ajYwLmMKQEAgLTE0ODgsNyArMTQ4OCw3IEBACiAJY21kLT5zdXBwb3J0ZWQJPSBTVVBQT1JURURfMTBiYXNlVF9IYWxmCiAJCQl8IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwKIAkJCXwgU1VQUE9SVEVEX1RQOwotCWNtZC0+c3BlZWQJPSBTUEVFRF8xMDsKKwlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCAgU1BFRURfMTApOwogCWNtZC0+ZHVwbGV4CT0gcHJpdi0+ZnVsbF9kdXBsZXggPyBEVVBMRVhfRlVMTCA6IERVUExFWF9IQUxGOwogCWNtZC0+cG9ydAk9IFBPUlRfVFA7CiAJY21kLT5hdXRvbmVnCT0gQVVUT05FR19ESVNBQkxFOwpAQCAtMTQ5OSw3ICsxNDk5LDggQEAKIHN0YXRpYyBpbnQKIGVuYzI4ajYwX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKLQlyZXR1cm4gZW5jMjhqNjBfc2V0bGluayhkZXYsIGNtZC0+YXV0b25lZywgY21kLT5zcGVlZCwgY21kLT5kdXBsZXgpOworCXJldHVybiBlbmMyOGo2MF9zZXRsaW5rKGRldiwgY21kLT5hdXRvbmVnLAorCQkJCWV0aHRvb2xfY21kX3NwZWVkKGNtZCksIGNtZC0+ZHVwbGV4KTsKIH0KIAogc3RhdGljIHUzMiBlbmMyOGo2MF9nZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9lbmljL01ha2VmaWxlCmluZGV4IDJlNTczYmUuLjlkNDk3NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvZW5pYy9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKIG9iai0kKENPTkZJR19FTklDKSA6PSBlbmljLm8KIAogZW5pYy15IDo9IGVuaWNfbWFpbi5vIHZuaWNfY3EubyB2bmljX2ludHIubyB2bmljX3dxLm8gXAotCWVuaWNfcmVzLm8gZW5pY19kZXYubyB2bmljX2Rldi5vIHZuaWNfcnEubyB2bmljX3ZpYy5vCisJZW5pY19yZXMubyBlbmljX2Rldi5vIGVuaWNfcHAubyB2bmljX2Rldi5vIHZuaWNfcnEubyB2bmljX3ZpYy5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pYy5oIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljLmgKaW5kZXggM2EzYzNjOC4uMzhiMzUxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy9lbmljLmgKKysrIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljLmgKQEAgLTMyLDcgKzMyLDcgQEAKIAogI2RlZmluZSBEUlZfTkFNRQkJImVuaWMiCiAjZGVmaW5lIERSVl9ERVNDUklQVElPTgkJIkNpc2NvIFZJQyBFdGhlcm5ldCBOSUMgRHJpdmVyIgotI2RlZmluZSBEUlZfVkVSU0lPTgkJIjIuMS4xLjEyIgorI2RlZmluZSBEUlZfVkVSU0lPTgkJIjIuMS4xLjEzIgogI2RlZmluZSBEUlZfQ09QWVJJR0hUCQkiQ29weXJpZ2h0IDIwMDgtMjAxMSBDaXNjbyBTeXN0ZW1zLCBJbmMiCiAKICNkZWZpbmUgRU5JQ19CQVJTX01BWAkJNgpAQCAtODQsNyArODQsNiBAQAogCXVuc2lnbmVkIGludCBmbGFnczsKIAl1bnNpZ25lZCBpbnQgbWNfY291bnQ7CiAJdW5zaWduZWQgaW50IHVjX2NvdW50OwotCWludCBjc3VtX3J4X2VuYWJsZWQ7CiAJdTMyIHBvcnRfbXR1OwogCXUzMiByeF9jb2FsZXNjZV91c2VjczsKIAl1MzIgdHhfY29hbGVzY2VfdXNlY3M7CkBAIC0xMjAsNCArMTE5LDYgQEAKIAlyZXR1cm4gJihlbmljLT5wZGV2LT5kZXYpOwogfQogCit2b2lkIGVuaWNfcmVzZXRfYWRkcl9saXN0cyhzdHJ1Y3QgZW5pYyAqZW5pYyk7CisKICNlbmRpZiAvKiBfRU5JQ19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy9lbmljX2Rldi5jIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljX2Rldi5jCmluZGV4IDM3YWQzYTEuLjkwNjg3YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19kZXYuYworKysgYi9kcml2ZXJzL25ldC9lbmljL2VuaWNfZGV2LmMKQEAgLTE3NywyNCArMTc3LDI0IEBACiAJcmV0dXJuIGVycjsKIH0KIAotaW50IGVuaWNfZGV2X2luaXRfcHJvdihzdHJ1Y3QgZW5pYyAqZW5pYywgc3RydWN0IHZpY19wcm92aW5mbyAqdnApCitpbnQgZW5pY19kZXZfaW5pdF9wcm92MihzdHJ1Y3QgZW5pYyAqZW5pYywgc3RydWN0IHZpY19wcm92aW5mbyAqdnApCiB7CiAJaW50IGVycjsKIAogCXNwaW5fbG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOwotCWVyciA9IHZuaWNfZGV2X2luaXRfcHJvdihlbmljLT52ZGV2LAorCWVyciA9IHZuaWNfZGV2X2luaXRfcHJvdjIoZW5pYy0+dmRldiwKIAkJKHU4ICopdnAsIHZpY19wcm92aW5mb19zaXplKHZwKSk7CiAJc3Bpbl91bmxvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKIAogCXJldHVybiBlcnI7CiB9CiAKLWludCBlbmljX2Rldl9pbml0X2RvbmUoc3RydWN0IGVuaWMgKmVuaWMsIGludCAqZG9uZSwgaW50ICplcnJvcikKK2ludCBlbmljX2Rldl9kZWluaXRfZG9uZShzdHJ1Y3QgZW5pYyAqZW5pYywgaW50ICpzdGF0dXMpCiB7CiAJaW50IGVycjsKIAogCXNwaW5fbG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOwotCWVyciA9IHZuaWNfZGV2X2luaXRfZG9uZShlbmljLT52ZGV2LCBkb25lLCBlcnJvcik7CisJZXJyID0gdm5pY19kZXZfZGVpbml0X2RvbmUoZW5pYy0+dmRldiwgc3RhdHVzKTsKIAlzcGluX3VubG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOwogCiAJcmV0dXJuIGVycjsKQEAgLTIxOSwzICsyMTksNTcgQEAKIAllbmljX2RlbF92bGFuKGVuaWMsIHZpZCk7CiAJc3Bpbl91bmxvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKIH0KKworaW50IGVuaWNfZGV2X2VuYWJsZTIoc3RydWN0IGVuaWMgKmVuaWMsIGludCBhY3RpdmUpCit7CisJaW50IGVycjsKKworCXNwaW5fbG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOworCWVyciA9IHZuaWNfZGV2X2VuYWJsZTIoZW5pYy0+dmRldiwgYWN0aXZlKTsKKwlzcGluX3VubG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOworCisJcmV0dXJuIGVycjsKK30KKworaW50IGVuaWNfZGV2X2VuYWJsZTJfZG9uZShzdHJ1Y3QgZW5pYyAqZW5pYywgaW50ICpzdGF0dXMpCit7CisJaW50IGVycjsKKworCXNwaW5fbG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOworCWVyciA9IHZuaWNfZGV2X2VuYWJsZTJfZG9uZShlbmljLT52ZGV2LCBzdGF0dXMpOworCXNwaW5fdW5sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgZW5pY19kZXZfc3RhdHVzX3RvX2Vycm5vKGludCBkZXZjbWRfc3RhdHVzKQoreworCXN3aXRjaCAoZGV2Y21kX3N0YXR1cykgeworCWNhc2UgRVJSX1NVQ0NFU1M6CisJCXJldHVybiAwOworCWNhc2UgRVJSX0VJTlZBTDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSBFUlJfRUZBVUxUOgorCQlyZXR1cm4gLUVGQVVMVDsKKwljYXNlIEVSUl9FUEVSTToKKwkJcmV0dXJuIC1FUEVSTTsKKwljYXNlIEVSUl9FQlVTWToKKwkJcmV0dXJuIC1FQlVTWTsKKwljYXNlIEVSUl9FQ01EVU5LTk9XTjoKKwljYXNlIEVSUl9FTk9UU1VQUE9SVEVEOgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJY2FzZSBFUlJfRUJBRFNUQVRFOgorCQlyZXR1cm4gLUVJTlZBTDsKKwljYXNlIEVSUl9FTk9NRU06CisJCXJldHVybiAtRU5PTUVNOworCWNhc2UgRVJSX0VUSU1FRE9VVDoKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJY2FzZSBFUlJfRUxJTktET1dOOgorCQlyZXR1cm4gLUVORVRET1dOOworCWNhc2UgRVJSX0VJTlBST0dSRVNTOgorCQlyZXR1cm4gLUVJTlBST0dSRVNTOworCWNhc2UgRVJSX0VNQVhSRVM6CisJZGVmYXVsdDoKKwkJcmV0dXJuIChkZXZjbWRfc3RhdHVzIDwgMCkgPyBkZXZjbWRfc3RhdHVzIDogLTE7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy9lbmljX2Rldi5oIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljX2Rldi5oCmluZGV4IDQ5NWY1N2YuLmQ1ZjY4MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19kZXYuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL2VuaWNfZGV2LmgKQEAgLTM1LDcgKzM1LDEwIEBACiBpbnQgZW5pY19kZXZfZW5hYmxlKHN0cnVjdCBlbmljICplbmljKTsKIGludCBlbmljX2Rldl9kaXNhYmxlKHN0cnVjdCBlbmljICplbmljKTsKIGludCBlbmljX3ZuaWNfZGV2X2RlaW5pdChzdHJ1Y3QgZW5pYyAqZW5pYyk7Ci1pbnQgZW5pY19kZXZfaW5pdF9wcm92KHN0cnVjdCBlbmljICplbmljLCBzdHJ1Y3QgdmljX3Byb3ZpbmZvICp2cCk7Ci1pbnQgZW5pY19kZXZfaW5pdF9kb25lKHN0cnVjdCBlbmljICplbmljLCBpbnQgKmRvbmUsIGludCAqZXJyb3IpOworaW50IGVuaWNfZGV2X2luaXRfcHJvdjIoc3RydWN0IGVuaWMgKmVuaWMsIHN0cnVjdCB2aWNfcHJvdmluZm8gKnZwKTsKK2ludCBlbmljX2Rldl9kZWluaXRfZG9uZShzdHJ1Y3QgZW5pYyAqZW5pYywgaW50ICpzdGF0dXMpOworaW50IGVuaWNfZGV2X2VuYWJsZTIoc3RydWN0IGVuaWMgKmVuaWMsIGludCBhcmcpOworaW50IGVuaWNfZGV2X2VuYWJsZTJfZG9uZShzdHJ1Y3QgZW5pYyAqZW5pYywgaW50ICpzdGF0dXMpOworaW50IGVuaWNfZGV2X3N0YXR1c190b19lcnJubyhpbnQgZGV2Y21kX3N0YXR1cyk7CiAKICNlbmRpZiAvKiBfRU5JQ19ERVZfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19tYWluLmMgYi9kcml2ZXJzL25ldC9lbmljL2VuaWNfbWFpbi5jCmluZGV4IDhiOWNhZDUuLjJmNDMzZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljX21haW4uYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KICNpbmNsdWRlIDxsaW51eC90Y3AuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgPG5ldC9pcDZfY2hlY2tzdW0uaD4KIAogI2luY2x1ZGUgImNxX2VuZXRfZGVzYy5oIgpAQCAtNDUsNiArNDYsNyBAQAogI2luY2x1ZGUgImVuaWNfcmVzLmgiCiAjaW5jbHVkZSAiZW5pYy5oIgogI2luY2x1ZGUgImVuaWNfZGV2LmgiCisjaW5jbHVkZSAiZW5pY19wcC5oIgogCiAjZGVmaW5lIEVOSUNfTk9USUZZX1RJTUVSX1BFUklPRAkoMiAqIEhaKQogI2RlZmluZSBXUV9FTkVUX01BWF9ERVNDX0xFTgkJKDEgPDwgV1FfRU5FVF9MRU5fQklUUykKQEAgLTE3OSwxMCArMTgxLDEwIEBACiAJZWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0VYVEVSTkFMOwogCiAJaWYgKG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewotCQllY21kLT5zcGVlZCA9IHZuaWNfZGV2X3BvcnRfc3BlZWQoZW5pYy0+dmRldik7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCB2bmljX2Rldl9wb3J0X3NwZWVkKGVuaWMtPnZkZXYpKTsKIAkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJfSBlbHNlIHsKLQkJZWNtZC0+c3BlZWQgPSAtMTsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIC0xKTsKIAkJZWNtZC0+ZHVwbGV4ID0gLTE7CiAJfQogCkBAIC0yNTAsNTYgKzI1Miw2IEBACiAJCSooZGF0YSsrKSA9ICgodTY0ICopJnZzdGF0cy0+cngpW2VuaWNfcnhfc3RhdHNbaV0ub2Zmc2V0XTsKIH0KIAotc3RhdGljIHUzMiBlbmljX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0Jc3RydWN0IGVuaWMgKmVuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXJldHVybiBlbmljLT5jc3VtX3J4X2VuYWJsZWQ7Ci19Ci0KLXN0YXRpYyBpbnQgZW5pY19zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgZW5pYyAqZW5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0KLQlpZiAoZGF0YSAmJiAhRU5JQ19TRVRUSU5HKGVuaWMsIFJYQ1NVTSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZW5pYy0+Y3N1bV9yeF9lbmFibGVkID0gISFkYXRhOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZW5pY19zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgZW5pYyAqZW5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0KLQlpZiAoZGF0YSAmJiAhRU5JQ19TRVRUSU5HKGVuaWMsIFRYQ1NVTSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGRhdGEpCi0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOwotCWVsc2UKLQkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9IV19DU1VNOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZW5pY19zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBlbmljICplbmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCWlmIChkYXRhICYmICFFTklDX1NFVFRJTkcoZW5pYywgVFNPKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoZGF0YSkKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PQotCQkJTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfCBORVRJRl9GX1RTT19FQ047Ci0JZWxzZQotCQluZXRkZXYtPmZlYXR1cmVzICY9Ci0JCQl+KE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082IHwgTkVUSUZfRl9UU09fRUNOKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdTMyIGVuaWNfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGVuaWMgKmVuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwpAQCAtMzg3LDE3ICszMzksOCBAQAogCS5nZXRfc3RyaW5ncyA9IGVuaWNfZ2V0X3N0cmluZ3MsCiAJLmdldF9zc2V0X2NvdW50ID0gZW5pY19nZXRfc3NldF9jb3VudCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBlbmljX2dldF9ldGh0b29sX3N0YXRzLAotCS5nZXRfcnhfY3N1bSA9IGVuaWNfZ2V0X3J4X2NzdW0sCi0JLnNldF9yeF9jc3VtID0gZW5pY19zZXRfcnhfY3N1bSwKLQkuZ2V0X3R4X2NzdW0gPSBldGh0b29sX29wX2dldF90eF9jc3VtLAotCS5zZXRfdHhfY3N1bSA9IGVuaWNfc2V0X3R4X2NzdW0sCi0JLmdldF9zZyA9IGV0aHRvb2xfb3BfZ2V0X3NnLAotCS5zZXRfc2cgPSBldGh0b29sX29wX3NldF9zZywKLQkuZ2V0X3RzbyA9IGV0aHRvb2xfb3BfZ2V0X3RzbywKLQkuc2V0X3RzbyA9IGVuaWNfc2V0X3RzbywKIAkuZ2V0X2NvYWxlc2NlID0gZW5pY19nZXRfY29hbGVzY2UsCiAJLnNldF9jb2FsZXNjZSA9IGVuaWNfc2V0X2NvYWxlc2NlLAotCS5nZXRfZmxhZ3MgPSBldGh0b29sX29wX2dldF9mbGFncywKIH07CiAKIHN0YXRpYyB2b2lkIGVuaWNfZnJlZV93cV9idWYoc3RydWN0IHZuaWNfd3EgKndxLCBzdHJ1Y3Qgdm5pY193cV9idWYgKmJ1ZikKQEAgLTg3NCw3ICs4MTcsNyBAQAogCXJldHVybiBuZXRfc3RhdHM7CiB9CiAKLXN0YXRpYyB2b2lkIGVuaWNfcmVzZXRfYWRkcl9saXN0cyhzdHJ1Y3QgZW5pYyAqZW5pYykKK3ZvaWQgZW5pY19yZXNldF9hZGRyX2xpc3RzKHN0cnVjdCBlbmljICplbmljKQogewogCWVuaWMtPm1jX2NvdW50ID0gMDsKIAllbmljLT51Y19jb3VudCA9IDA7CkBAIC0xMTEyLDE1NyArMTA1NSw3NyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCBlbmljX3NldF9wb3J0X3Byb2ZpbGUoc3RydWN0IGVuaWMgKmVuaWMsIHU4ICptYWMpCi17Ci0Jc3RydWN0IHZpY19wcm92aW5mbyAqdnA7Ci0JdTggb3VpWzNdID0gVklDX1BST1ZJTkZPX0NJU0NPX09VSTsKLQl1MTYgb3NfdHlwZSA9IFZJQ19HRU5FUklDX1BST1ZfT1NfVFlQRV9MSU5VWDsKLQljaGFyIHV1aWRfc3RyWzM4XTsKLQljaGFyIGNsaWVudF9tYWNfc3RyWzE4XTsKLQl1OCAqY2xpZW50X21hYzsKLQlpbnQgZXJyOwotCi0JZXJyID0gZW5pY192bmljX2Rldl9kZWluaXQoZW5pYyk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWVuaWNfcmVzZXRfYWRkcl9saXN0cyhlbmljKTsKLQotCXN3aXRjaCAoZW5pYy0+cHAucmVxdWVzdCkgewotCi0JY2FzZSBQT1JUX1JFUVVFU1RfQVNTT0NJQVRFOgotCi0JCWlmICghKGVuaWMtPnBwLnNldCAmIEVOSUNfU0VUX05BTUUpIHx8ICFzdHJsZW4oZW5pYy0+cHAubmFtZSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobWFjKSkKLQkJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKLQotCQl2cCA9IHZpY19wcm92aW5mb19hbGxvYyhHRlBfS0VSTkVMLCBvdWksCi0JCQlWSUNfUFJPVklORk9fR0VORVJJQ19UWVBFKTsKLQkJaWYgKCF2cCkKLQkJCXJldHVybiAtRU5PTUVNOwotCi0JCXZpY19wcm92aW5mb19hZGRfdGx2KHZwLAotCQkJVklDX0dFTkVSSUNfUFJPVl9UTFZfUE9SVF9QUk9GSUxFX05BTUVfU1RSLAotCQkJc3RybGVuKGVuaWMtPnBwLm5hbWUpICsgMSwgZW5pYy0+cHAubmFtZSk7Ci0KLQkJaWYgKCFpc196ZXJvX2V0aGVyX2FkZHIoZW5pYy0+cHAubWFjX2FkZHIpKQotCQkJY2xpZW50X21hYyA9IGVuaWMtPnBwLm1hY19hZGRyOwotCQllbHNlCi0JCQljbGllbnRfbWFjID0gbWFjOwotCi0JCXZpY19wcm92aW5mb19hZGRfdGx2KHZwLAotCQkJVklDX0dFTkVSSUNfUFJPVl9UTFZfQ0xJRU5UX01BQ19BRERSLAotCQkJRVRIX0FMRU4sIGNsaWVudF9tYWMpOwotCi0JCXNwcmludGYoY2xpZW50X21hY19zdHIsICIlcE0iLCBjbGllbnRfbWFjKTsKLQkJdmljX3Byb3ZpbmZvX2FkZF90bHYodnAsCi0JCQlWSUNfR0VORVJJQ19QUk9WX1RMVl9DTFVTVEVSX1BPUlRfVVVJRF9TVFIsCi0JCQlzaXplb2YoY2xpZW50X21hY19zdHIpLCBjbGllbnRfbWFjX3N0cik7Ci0KLQkJaWYgKGVuaWMtPnBwLnNldCAmIEVOSUNfU0VUX0lOU1RBTkNFKSB7Ci0JCQlzcHJpbnRmKHV1aWRfc3RyLCAiJXBVQiIsIGVuaWMtPnBwLmluc3RhbmNlX3V1aWQpOwotCQkJdmljX3Byb3ZpbmZvX2FkZF90bHYodnAsCi0JCQkJVklDX0dFTkVSSUNfUFJPVl9UTFZfQ0xJRU5UX1VVSURfU1RSLAotCQkJCXNpemVvZih1dWlkX3N0ciksIHV1aWRfc3RyKTsKLQkJfQotCi0JCWlmIChlbmljLT5wcC5zZXQgJiBFTklDX1NFVF9IT1NUKSB7Ci0JCQlzcHJpbnRmKHV1aWRfc3RyLCAiJXBVQiIsIGVuaWMtPnBwLmhvc3RfdXVpZCk7Ci0JCQl2aWNfcHJvdmluZm9fYWRkX3Rsdih2cCwKLQkJCQlWSUNfR0VORVJJQ19QUk9WX1RMVl9IT1NUX1VVSURfU1RSLAotCQkJCXNpemVvZih1dWlkX3N0ciksIHV1aWRfc3RyKTsKLQkJfQotCi0JCW9zX3R5cGUgPSBodG9ucyhvc190eXBlKTsKLQkJdmljX3Byb3ZpbmZvX2FkZF90bHYodnAsCi0JCQlWSUNfR0VORVJJQ19QUk9WX1RMVl9PU19UWVBFLAotCQkJc2l6ZW9mKG9zX3R5cGUpLCAmb3NfdHlwZSk7Ci0KLQkJZXJyID0gZW5pY19kZXZfaW5pdF9wcm92KGVuaWMsIHZwKTsKLQkJdmljX3Byb3ZpbmZvX2ZyZWUodnApOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQkJYnJlYWs7Ci0KLQljYXNlIFBPUlRfUkVRVUVTVF9ESVNBU1NPQ0lBVEU6Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogU2V0IGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcG9ydCBhc3NvYy9kaXNhc3NvYwotCSAqIHJlcXVlc3QgaGFzIGJlZW4gc2VudCBvdXQgdG8gZncKLQkgKi8KLQllbmljLT5wcC5zZXQgfD0gRU5JQ19QT1JUX1JFUVVFU1RfQVBQTElFRDsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGVuaWNfc2V0X3ZmX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmLAogCXN0cnVjdCBubGF0dHIgKnBvcnRbXSkKIHsKIAlzdHJ1Y3QgZW5pYyAqZW5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGVuaWNfcG9ydF9wcm9maWxlIG5ld19wcDsKLQlpbnQgZXJyID0gMDsKLQotCW1lbXNldCgmbmV3X3BwLCAwLCBzaXplb2YobmV3X3BwKSk7Ci0KLQlpZiAocG9ydFtJRkxBX1BPUlRfUkVRVUVTVF0pIHsKLQkJbmV3X3BwLnNldCB8PSBFTklDX1NFVF9SRVFVRVNUOwotCQluZXdfcHAucmVxdWVzdCA9IG5sYV9nZXRfdTgocG9ydFtJRkxBX1BPUlRfUkVRVUVTVF0pOwotCX0KLQotCWlmIChwb3J0W0lGTEFfUE9SVF9QUk9GSUxFXSkgewotCQluZXdfcHAuc2V0IHw9IEVOSUNfU0VUX05BTUU7Ci0JCW1lbWNweShuZXdfcHAubmFtZSwgbmxhX2RhdGEocG9ydFtJRkxBX1BPUlRfUFJPRklMRV0pLAotCQkJUE9SVF9QUk9GSUxFX01BWCk7Ci0JfQotCi0JaWYgKHBvcnRbSUZMQV9QT1JUX0lOU1RBTkNFX1VVSURdKSB7Ci0JCW5ld19wcC5zZXQgfD0gRU5JQ19TRVRfSU5TVEFOQ0U7Ci0JCW1lbWNweShuZXdfcHAuaW5zdGFuY2VfdXVpZCwKLQkJCW5sYV9kYXRhKHBvcnRbSUZMQV9QT1JUX0lOU1RBTkNFX1VVSURdKSwgUE9SVF9VVUlEX01BWCk7Ci0JfQotCi0JaWYgKHBvcnRbSUZMQV9QT1JUX0hPU1RfVVVJRF0pIHsKLQkJbmV3X3BwLnNldCB8PSBFTklDX1NFVF9IT1NUOwotCQltZW1jcHkobmV3X3BwLmhvc3RfdXVpZCwKLQkJCW5sYV9kYXRhKHBvcnRbSUZMQV9QT1JUX0hPU1RfVVVJRF0pLCBQT1JUX1VVSURfTUFYKTsKLQl9CisJc3RydWN0IGVuaWNfcG9ydF9wcm9maWxlIHByZXZfcHA7CisJaW50IGVyciA9IDAsIHJlc3RvcmVfcHAgPSAxOwogCiAJLyogZG9uJ3Qgc3VwcG9ydCBWRnMsIHlldCAqLwogCWlmICh2ZiAhPSBQT1JUX1NFTEZfVkYpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCWlmICghKG5ld19wcC5zZXQgJiBFTklDX1NFVF9SRVFVRVNUKSkKKwlpZiAoIXBvcnRbSUZMQV9QT1JUX1JFUVVFU1RdKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlpZiAobmV3X3BwLnJlcXVlc3QgPT0gUE9SVF9SRVFVRVNUX0FTU09DSUFURSkgewotCQkvKiBTcGVjaWFsIGNhc2UgaGFuZGxpbmcgKi8KLQkJaWYgKCFpc196ZXJvX2V0aGVyX2FkZHIoZW5pYy0+cHAudmZfbWFjKSkKLQkJCW1lbWNweShuZXdfcHAubWFjX2FkZHIsIGVuaWMtPnBwLnZmX21hYywgRVRIX0FMRU4pOworCW1lbWNweSgmcHJldl9wcCwgJmVuaWMtPnBwLCBzaXplb2YoZW5pYy0+cHApKTsKKwltZW1zZXQoJmVuaWMtPnBwLCAwLCBzaXplb2YoZW5pYy0+cHApKTsKKworCWVuaWMtPnBwLnNldCB8PSBFTklDX1NFVF9SRVFVRVNUOworCWVuaWMtPnBwLnJlcXVlc3QgPSBubGFfZ2V0X3U4KHBvcnRbSUZMQV9QT1JUX1JFUVVFU1RdKTsKKworCWlmIChwb3J0W0lGTEFfUE9SVF9QUk9GSUxFXSkgeworCQllbmljLT5wcC5zZXQgfD0gRU5JQ19TRVRfTkFNRTsKKwkJbWVtY3B5KGVuaWMtPnBwLm5hbWUsIG5sYV9kYXRhKHBvcnRbSUZMQV9QT1JUX1BST0ZJTEVdKSwKKwkJCVBPUlRfUFJPRklMRV9NQVgpOworCX0KKworCWlmIChwb3J0W0lGTEFfUE9SVF9JTlNUQU5DRV9VVUlEXSkgeworCQllbmljLT5wcC5zZXQgfD0gRU5JQ19TRVRfSU5TVEFOQ0U7CisJCW1lbWNweShlbmljLT5wcC5pbnN0YW5jZV91dWlkLAorCQkJbmxhX2RhdGEocG9ydFtJRkxBX1BPUlRfSU5TVEFOQ0VfVVVJRF0pLCBQT1JUX1VVSURfTUFYKTsKKwl9CisKKwlpZiAocG9ydFtJRkxBX1BPUlRfSE9TVF9VVUlEXSkgeworCQllbmljLT5wcC5zZXQgfD0gRU5JQ19TRVRfSE9TVDsKKwkJbWVtY3B5KGVuaWMtPnBwLmhvc3RfdXVpZCwKKwkJCW5sYV9kYXRhKHBvcnRbSUZMQV9QT1JUX0hPU1RfVVVJRF0pLCBQT1JUX1VVSURfTUFYKTsKKwl9CisKKwkvKiBTcGVjaWFsIGNhc2UgaGFuZGxpbmc6IG1hYyBjYW1lIGZyb20gSUZMQV9WRl9NQUMgKi8KKwlpZiAoIWlzX3plcm9fZXRoZXJfYWRkcihwcmV2X3BwLnZmX21hYykpCisJCW1lbWNweShlbmljLT5wcC5tYWNfYWRkciwgcHJldl9wcC52Zl9tYWMsIEVUSF9BTEVOKTsKIAogCQlpZiAoaXNfemVyb19ldGhlcl9hZGRyKG5ldGRldi0+ZGV2X2FkZHIpKQogCQkJcmFuZG9tX2V0aGVyX2FkZHIobmV0ZGV2LT5kZXZfYWRkcik7CisKKwllcnIgPSBlbmljX3Byb2Nlc3Nfc2V0X3BwX3JlcXVlc3QoZW5pYywgJnByZXZfcHAsICZyZXN0b3JlX3BwKTsKKwlpZiAoZXJyKSB7CisJCWlmIChyZXN0b3JlX3BwKSB7CisJCQkvKiBUaGluZ3MgYXJlIHN0aWxsIHRoZSB3YXkgdGhleSB3ZXJlOiBJbXBsaWNpdAorCQkJICogRElTQVNTT0NJQVRFIGZhaWxlZAorCQkJICovCisJCQltZW1jcHkoJmVuaWMtPnBwLCAmcHJldl9wcCwgc2l6ZW9mKGVuaWMtPnBwKSk7CisJCX0gZWxzZSB7CisJCQltZW1zZXQoJmVuaWMtPnBwLCAwLCBzaXplb2YoZW5pYy0+cHApKTsKKwkJCW1lbXNldChuZXRkZXYtPmRldl9hZGRyLCAwLCBFVEhfQUxFTik7CisJCX0KKwl9IGVsc2UgeworCQkvKiBTZXQgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwb3J0IGFzc29jL2Rpc2Fzc29jCisJCSAqIHJlcXVlc3QgaGFzIGJlZW4gc2VudCBvdXQgdG8gZncKKwkJICovCisJCWVuaWMtPnBwLnNldCB8PSBFTklDX1BPUlRfUkVRVUVTVF9BUFBMSUVEOworCisJCS8qIElmIERJU0FTU09DSUFURSwgY2xlYW4gdXAgYWxsIGFzc2lnbmVkL3NhdmVkIG1hY2FkZHJlc3NlcyAqLworCQlpZiAoZW5pYy0+cHAucmVxdWVzdCA9PSBQT1JUX1JFUVVFU1RfRElTQVNTT0NJQVRFKSB7CisJCQltZW1zZXQoZW5pYy0+cHAubWFjX2FkZHIsIDAsIEVUSF9BTEVOKTsKKwkJCW1lbXNldChuZXRkZXYtPmRldl9hZGRyLCAwLCBFVEhfQUxFTik7CisJCX0KIAl9CiAKLQltZW1jcHkoJmVuaWMtPnBwLCAmbmV3X3BwLCBzaXplb2Yoc3RydWN0IGVuaWNfcG9ydF9wcm9maWxlKSk7Ci0KLQllcnIgPSBlbmljX3NldF9wb3J0X3Byb2ZpbGUoZW5pYywgbmV0ZGV2LT5kZXZfYWRkcik7Ci0JaWYgKGVycikKLQkJZ290byBzZXRfcG9ydF9wcm9maWxlX2NsZWFudXA7Ci0KLXNldF9wb3J0X3Byb2ZpbGVfY2xlYW51cDoKIAltZW1zZXQoZW5pYy0+cHAudmZfbWFjLCAwLCBFVEhfQUxFTik7CiAKLQlpZiAoZXJyIHx8IGVuaWMtPnBwLnJlcXVlc3QgPT0gUE9SVF9SRVFVRVNUX0RJU0FTU09DSUFURSkgewotCQltZW1zZXQobmV0ZGV2LT5kZXZfYWRkciwgMCwgRVRIX0FMRU4pOwotCQltZW1zZXQoZW5pYy0+cHAubWFjX2FkZHIsIDAsIEVUSF9BTEVOKTsKLQl9Ci0KIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMjcwLDM0ICsxMTMzLDE1IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgZW5pYyAqZW5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JaW50IGVyciwgZXJyb3IsIGRvbmU7CiAJdTE2IHJlc3BvbnNlID0gUE9SVF9QUk9GSUxFX1JFU1BPTlNFX1NVQ0NFU1M7CisJaW50IGVycjsKIAogCWlmICghKGVuaWMtPnBwLnNldCAmIEVOSUNfUE9SVF9SRVFVRVNUX0FQUExJRUQpKQogCQlyZXR1cm4gLUVOT0RBVEE7CiAKLQllcnIgPSBlbmljX2Rldl9pbml0X2RvbmUoZW5pYywgJmRvbmUsICZlcnJvcik7CisJZXJyID0gZW5pY19wcm9jZXNzX2dldF9wcF9yZXF1ZXN0KGVuaWMsIGVuaWMtPnBwLnJlcXVlc3QsICZyZXNwb25zZSk7CiAJaWYgKGVycikKLQkJZXJyb3IgPSBlcnI7Ci0KLQlzd2l0Y2ggKGVycm9yKSB7Ci0JY2FzZSBFUlJfU1VDQ0VTUzoKLQkJaWYgKCFkb25lKQotCQkJcmVzcG9uc2UgPSBQT1JUX1BST0ZJTEVfUkVTUE9OU0VfSU5QUk9HUkVTUzsKLQkJYnJlYWs7Ci0JY2FzZSBFUlJfRUlOVkFMOgotCQlyZXNwb25zZSA9IFBPUlRfUFJPRklMRV9SRVNQT05TRV9JTlZBTElEOwotCQlicmVhazsKLQljYXNlIEVSUl9FQkFEU1RBVEU6Ci0JCXJlc3BvbnNlID0gUE9SVF9QUk9GSUxFX1JFU1BPTlNFX0JBRFNUQVRFOwotCQlicmVhazsKLQljYXNlIEVSUl9FTk9NRU06Ci0JCXJlc3BvbnNlID0gUE9SVF9QUk9GSUxFX1JFU1BPTlNFX0lOU1VGRklDSUVOVF9SRVNPVVJDRVM7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJlc3BvbnNlID0gUE9SVF9QUk9GSUxFX1JFU1BPTlNFX0VSUk9SOwotCQlicmVhazsKLQl9CisJCXJldHVybiBlcnI7CiAKIAlOTEFfUFVUX1UxNihza2IsIElGTEFfUE9SVF9SRVFVRVNULCBlbmljLT5wcC5yZXF1ZXN0KTsKIAlOTEFfUFVUX1UxNihza2IsIElGTEFfUE9SVF9SRVNQT05TRSwgcmVzcG9uc2UpOwpAQCAtMTQwNyw3ICsxMjUxLDcgQEAKIAkJc2tiX3B1dChza2IsIGJ5dGVzX3dyaXR0ZW4pOwogCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZXRkZXYpOwogCi0JCWlmIChlbmljLT5jc3VtX3J4X2VuYWJsZWQgJiYgIWNzdW1fbm90X2NhbGMpIHsKKwkJaWYgKChuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pICYmICFjc3VtX25vdF9jYWxjKSB7CiAJCQlza2ItPmNzdW0gPSBodG9ucyhjaGVja3N1bSk7CiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX0NPTVBMRVRFOwogCQl9CkBAIC0yNTM2LDE3ICsyMzgwLDE4IEBACiAJCWRldl9pbmZvKGRldiwgImxvb3BiYWNrIHRhZz0weCUwNHhcbiIsIGVuaWMtPmxvb3BfdGFnKTsKIAl9CiAJaWYgKEVOSUNfU0VUVElORyhlbmljLCBUWENTVU0pKQotCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0hXX0NTVU07CisJCW5ldGRldi0+aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSFdfQ1NVTTsKIAlpZiAoRU5JQ19TRVRUSU5HKGVuaWMsIFRTTykpCi0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU08gfAorCQluZXRkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPIHwKIAkJCU5FVElGX0ZfVFNPNiB8IE5FVElGX0ZfVFNPX0VDTjsKLQlpZiAoRU5JQ19TRVRUSU5HKGVuaWMsIExSTykpCi0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9HUk87CisJaWYgKEVOSUNfU0VUVElORyhlbmljLCBSWENTVU0pKQorCQluZXRkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfUlhDU1VNOworCisJbmV0ZGV2LT5mZWF0dXJlcyB8PSBuZXRkZXYtPmh3X2ZlYXR1cmVzOworCiAJaWYgKHVzaW5nX2RhYykKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAKLQllbmljLT5jc3VtX3J4X2VuYWJsZWQgPSBFTklDX1NFVFRJTkcoZW5pYywgUlhDU1VNKTsKLQogCWVyciA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycihkZXYsICJDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSwgYWJvcnRpbmdcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy9lbmljX3BwLmMgYi9kcml2ZXJzL25ldC9lbmljL2VuaWNfcHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmFhNzVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljX3BwLmMKQEAgLTAsMCArMSwyNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMSBDaXNjbyBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgbWF5IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxuZXQvaXAuaD4KKworI2luY2x1ZGUgInZuaWNfdmljLmgiCisjaW5jbHVkZSAiZW5pY19yZXMuaCIKKyNpbmNsdWRlICJlbmljLmgiCisjaW5jbHVkZSAiZW5pY19kZXYuaCIKKworc3RhdGljIGludCBlbmljX3NldF9wb3J0X3Byb2ZpbGUoc3RydWN0IGVuaWMgKmVuaWMpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGVuaWMtPm5ldGRldjsKKwlzdHJ1Y3QgdmljX3Byb3ZpbmZvICp2cDsKKwljb25zdCB1OCBvdWlbM10gPSBWSUNfUFJPVklORk9fQ0lTQ09fT1VJOworCWNvbnN0IHUxNiBvc190eXBlID0gaHRvbnMoVklDX0dFTkVSSUNfUFJPVl9PU19UWVBFX0xJTlVYKTsKKwljaGFyIHV1aWRfc3RyWzM4XTsKKwljaGFyIGNsaWVudF9tYWNfc3RyWzE4XTsKKwl1OCAqY2xpZW50X21hYzsKKwlpbnQgZXJyOworCisJaWYgKCEoZW5pYy0+cHAuc2V0ICYgRU5JQ19TRVRfTkFNRSkgfHwgIXN0cmxlbihlbmljLT5wcC5uYW1lKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2cCA9IHZpY19wcm92aW5mb19hbGxvYyhHRlBfS0VSTkVMLCBvdWksCisJCVZJQ19QUk9WSU5GT19HRU5FUklDX1RZUEUpOworCWlmICghdnApCisJCXJldHVybiAtRU5PTUVNOworCisJVklDX1BST1ZJTkZPX0FERF9UTFYodnAsCisJCVZJQ19HRU5FUklDX1BST1ZfVExWX1BPUlRfUFJPRklMRV9OQU1FX1NUUiwKKwkJc3RybGVuKGVuaWMtPnBwLm5hbWUpICsgMSwgZW5pYy0+cHAubmFtZSk7CisKKwlpZiAoIWlzX3plcm9fZXRoZXJfYWRkcihlbmljLT5wcC5tYWNfYWRkcikpCisJCWNsaWVudF9tYWMgPSBlbmljLT5wcC5tYWNfYWRkcjsKKwllbHNlCisJCWNsaWVudF9tYWMgPSBuZXRkZXYtPmRldl9hZGRyOworCisJVklDX1BST1ZJTkZPX0FERF9UTFYodnAsCisJCVZJQ19HRU5FUklDX1BST1ZfVExWX0NMSUVOVF9NQUNfQUREUiwKKwkJRVRIX0FMRU4sIGNsaWVudF9tYWMpOworCisJc25wcmludGYoY2xpZW50X21hY19zdHIsIHNpemVvZihjbGllbnRfbWFjX3N0ciksICIlcE0iLCBjbGllbnRfbWFjKTsKKwlWSUNfUFJPVklORk9fQUREX1RMVih2cCwKKwkJVklDX0dFTkVSSUNfUFJPVl9UTFZfQ0xVU1RFUl9QT1JUX1VVSURfU1RSLAorCQlzaXplb2YoY2xpZW50X21hY19zdHIpLCBjbGllbnRfbWFjX3N0cik7CisKKwlpZiAoZW5pYy0+cHAuc2V0ICYgRU5JQ19TRVRfSU5TVEFOQ0UpIHsKKwkJc3ByaW50Zih1dWlkX3N0ciwgIiVwVUIiLCBlbmljLT5wcC5pbnN0YW5jZV91dWlkKTsKKwkJVklDX1BST1ZJTkZPX0FERF9UTFYodnAsCisJCQlWSUNfR0VORVJJQ19QUk9WX1RMVl9DTElFTlRfVVVJRF9TVFIsCisJCQlzaXplb2YodXVpZF9zdHIpLCB1dWlkX3N0cik7CisJfQorCisJaWYgKGVuaWMtPnBwLnNldCAmIEVOSUNfU0VUX0hPU1QpIHsKKwkJc3ByaW50Zih1dWlkX3N0ciwgIiVwVUIiLCBlbmljLT5wcC5ob3N0X3V1aWQpOworCQlWSUNfUFJPVklORk9fQUREX1RMVih2cCwKKwkJCVZJQ19HRU5FUklDX1BST1ZfVExWX0hPU1RfVVVJRF9TVFIsCisJCQlzaXplb2YodXVpZF9zdHIpLCB1dWlkX3N0cik7CisJfQorCisJVklDX1BST1ZJTkZPX0FERF9UTFYodnAsCisJCVZJQ19HRU5FUklDX1BST1ZfVExWX09TX1RZUEUsCisJCXNpemVvZihvc190eXBlKSwgJm9zX3R5cGUpOworCisJZXJyID0gZW5pY19kZXZfc3RhdHVzX3RvX2Vycm5vKGVuaWNfZGV2X2luaXRfcHJvdjIoZW5pYywgdnApKTsKKworYWRkX3Rsdl9mYWlsdXJlOgorCXZpY19wcm92aW5mb19mcmVlKHZwKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZW5pY191bnNldF9wb3J0X3Byb2ZpbGUoc3RydWN0IGVuaWMgKmVuaWMpCit7CisJaW50IGVycjsKKworCWVyciA9IGVuaWNfdm5pY19kZXZfZGVpbml0KGVuaWMpOworCWlmIChlcnIpCisJCXJldHVybiBlbmljX2Rldl9zdGF0dXNfdG9fZXJybm8oZXJyKTsKKworCWVuaWNfcmVzZXRfYWRkcl9saXN0cyhlbmljKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVuaWNfYXJlX3BwX2RpZmZlcmVudChzdHJ1Y3QgZW5pY19wb3J0X3Byb2ZpbGUgKnBwMSwKKwkJc3RydWN0IGVuaWNfcG9ydF9wcm9maWxlICpwcDIpCit7CisJcmV0dXJuIHN0cmNtcChwcDEtPm5hbWUsIHBwMi0+bmFtZSkgfCAhIW1lbWNtcChwcDEtPmluc3RhbmNlX3V1aWQsCisJCXBwMi0+aW5zdGFuY2VfdXVpZCwgUE9SVF9VVUlEX01BWCkgfAorCQkhIW1lbWNtcChwcDEtPmhvc3RfdXVpZCwgcHAyLT5ob3N0X3V1aWQsIFBPUlRfVVVJRF9NQVgpIHwKKwkJISFtZW1jbXAocHAxLT5tYWNfYWRkciwgcHAyLT5tYWNfYWRkciwgRVRIX0FMRU4pOworfQorCitzdGF0aWMgaW50IGVuaWNfcHBfcHJlYXNzb2NpYXRlKHN0cnVjdCBlbmljICplbmljLAorCXN0cnVjdCBlbmljX3BvcnRfcHJvZmlsZSAqcHJldl9wcCwgaW50ICpyZXN0b3JlX3BwKTsKK3N0YXRpYyBpbnQgZW5pY19wcF9kaXNhc3NvY2lhdGUoc3RydWN0IGVuaWMgKmVuaWMsCisJc3RydWN0IGVuaWNfcG9ydF9wcm9maWxlICpwcmV2X3BwLCBpbnQgKnJlc3RvcmVfcHApOworc3RhdGljIGludCBlbmljX3BwX3ByZWFzc29jaWF0ZV9ycihzdHJ1Y3QgZW5pYyAqZW5pYywKKwlzdHJ1Y3QgZW5pY19wb3J0X3Byb2ZpbGUgKnByZXZfcHAsIGludCAqcmVzdG9yZV9wcCk7CitzdGF0aWMgaW50IGVuaWNfcHBfYXNzb2NpYXRlKHN0cnVjdCBlbmljICplbmljLAorCXN0cnVjdCBlbmljX3BvcnRfcHJvZmlsZSAqcHJldl9wcCwgaW50ICpyZXN0b3JlX3BwKTsKKworc3RhdGljIGludCAoKmVuaWNfcHBfaGFuZGxlcnNbXSkoc3RydWN0IGVuaWMgKmVuaWMsCisJCXN0cnVjdCBlbmljX3BvcnRfcHJvZmlsZSAqcHJldl9zdGF0ZSwgaW50ICpyZXN0b3JlX3BwKSA9IHsKKwlbUE9SVF9SRVFVRVNUX1BSRUFTU09DSUFURV0JPSBlbmljX3BwX3ByZWFzc29jaWF0ZSwKKwlbUE9SVF9SRVFVRVNUX1BSRUFTU09DSUFURV9SUl0JPSBlbmljX3BwX3ByZWFzc29jaWF0ZV9yciwKKwlbUE9SVF9SRVFVRVNUX0FTU09DSUFURV0JPSBlbmljX3BwX2Fzc29jaWF0ZSwKKwlbUE9SVF9SRVFVRVNUX0RJU0FTU09DSUFURV0JPSBlbmljX3BwX2Rpc2Fzc29jaWF0ZSwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgZW5pY19wcF9oYW5kbGVyc19jb3VudCA9CisJCQlzaXplb2YoZW5pY19wcF9oYW5kbGVycykvc2l6ZW9mKCplbmljX3BwX2hhbmRsZXJzKTsKKworc3RhdGljIGludCBlbmljX3BwX3ByZWFzc29jaWF0ZShzdHJ1Y3QgZW5pYyAqZW5pYywKKwlzdHJ1Y3QgZW5pY19wb3J0X3Byb2ZpbGUgKnByZXZfcHAsIGludCAqcmVzdG9yZV9wcCkKK3sKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbnQgZW5pY19wcF9kaXNhc3NvY2lhdGUoc3RydWN0IGVuaWMgKmVuaWMsCisJc3RydWN0IGVuaWNfcG9ydF9wcm9maWxlICpwcmV2X3BwLCBpbnQgKnJlc3RvcmVfcHApCit7CisJcmV0dXJuIGVuaWNfdW5zZXRfcG9ydF9wcm9maWxlKGVuaWMpOworfQorCitzdGF0aWMgaW50IGVuaWNfcHBfcHJlYXNzb2NpYXRlX3JyKHN0cnVjdCBlbmljICplbmljLAorCXN0cnVjdCBlbmljX3BvcnRfcHJvZmlsZSAqcHJldl9wcCwgaW50ICpyZXN0b3JlX3BwKQoreworCWludCBlcnI7CisJaW50IGFjdGl2ZSA9IDA7CisKKwlpZiAoZW5pYy0+cHAucmVxdWVzdCAhPSBQT1JUX1JFUVVFU1RfQVNTT0NJQVRFKSB7CisJCS8qIElmIHByZS1hc3NvY2lhdGUgaXMgbm90IHBhcnQgb2YgYW4gYXNzb2NpYXRlLgorCQlXZSBhbHdheXMgZGlzYXNzb2NpYXRlIGZpcnN0ICovCisJCWVyciA9IGVuaWNfcHBfaGFuZGxlcnNbUE9SVF9SRVFVRVNUX0RJU0FTU09DSUFURV0oZW5pYywKKwkJCXByZXZfcHAsIHJlc3RvcmVfcHApOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQkqcmVzdG9yZV9wcCA9IDA7CisJfQorCisJKnJlc3RvcmVfcHAgPSAwOworCisJZXJyID0gZW5pY19zZXRfcG9ydF9wcm9maWxlKGVuaWMpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBJZiBwcmUtYXNzb2NpYXRlIGlzIG5vdCBwYXJ0IG9mIGFuIGFzc29jaWF0ZS4gKi8KKwlpZiAoZW5pYy0+cHAucmVxdWVzdCAhPSBQT1JUX1JFUVVFU1RfQVNTT0NJQVRFKQorCQllcnIgPSBlbmljX2Rldl9zdGF0dXNfdG9fZXJybm8oZW5pY19kZXZfZW5hYmxlMihlbmljLCBhY3RpdmUpKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZW5pY19wcF9hc3NvY2lhdGUoc3RydWN0IGVuaWMgKmVuaWMsCisJc3RydWN0IGVuaWNfcG9ydF9wcm9maWxlICpwcmV2X3BwLCBpbnQgKnJlc3RvcmVfcHApCit7CisJaW50IGVycjsKKwlpbnQgYWN0aXZlID0gMTsKKworCS8qIENoZWNrIGlmIGEgcHJlLWFzc29jaWF0ZSB3YXMgY2FsbGVkIGJlZm9yZSAqLworCWlmIChwcmV2X3BwLT5yZXF1ZXN0ICE9IFBPUlRfUkVRVUVTVF9QUkVBU1NPQ0lBVEVfUlIgfHwKKwkJKHByZXZfcHAtPnJlcXVlc3QgPT0gUE9SVF9SRVFVRVNUX1BSRUFTU09DSUFURV9SUiAmJgorCQkJZW5pY19hcmVfcHBfZGlmZmVyZW50KHByZXZfcHAsICZlbmljLT5wcCkpKSB7CisJCWVyciA9IGVuaWNfcHBfaGFuZGxlcnNbUE9SVF9SRVFVRVNUX0RJU0FTU09DSUFURV0oCisJCQllbmljLCBwcmV2X3BwLCByZXN0b3JlX3BwKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJKnJlc3RvcmVfcHAgPSAwOworCX0KKworCWVyciA9IGVuaWNfcHBfaGFuZGxlcnNbUE9SVF9SRVFVRVNUX1BSRUFTU09DSUFURV9SUl0oCisJCQllbmljLCBwcmV2X3BwLCByZXN0b3JlX3BwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJKnJlc3RvcmVfcHAgPSAwOworCisJcmV0dXJuIGVuaWNfZGV2X3N0YXR1c190b19lcnJubyhlbmljX2Rldl9lbmFibGUyKGVuaWMsIGFjdGl2ZSkpOworfQorCitpbnQgZW5pY19wcm9jZXNzX3NldF9wcF9yZXF1ZXN0KHN0cnVjdCBlbmljICplbmljLAorCXN0cnVjdCBlbmljX3BvcnRfcHJvZmlsZSAqcHJldl9wcCwgaW50ICpyZXN0b3JlX3BwKQoreworCWlmIChlbmljLT5wcC5yZXF1ZXN0IDwgZW5pY19wcF9oYW5kbGVyc19jb3VudAorCQkmJiBlbmljX3BwX2hhbmRsZXJzW2VuaWMtPnBwLnJlcXVlc3RdKQorCQlyZXR1cm4gZW5pY19wcF9oYW5kbGVyc1tlbmljLT5wcC5yZXF1ZXN0XShlbmljLAorCQkJcHJldl9wcCwgcmVzdG9yZV9wcCk7CisJZWxzZQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK2ludCBlbmljX3Byb2Nlc3NfZ2V0X3BwX3JlcXVlc3Qoc3RydWN0IGVuaWMgKmVuaWMsIGludCByZXF1ZXN0LAorCXUxNiAqcmVzcG9uc2UpCit7CisJaW50IGVyciwgc3RhdHVzID0gRVJSX1NVQ0NFU1M7CisKKwlzd2l0Y2ggKHJlcXVlc3QpIHsKKworCWNhc2UgUE9SVF9SRVFVRVNUX1BSRUFTU09DSUFURV9SUjoKKwljYXNlIFBPUlRfUkVRVUVTVF9BU1NPQ0lBVEU6CisJCWVyciA9IGVuaWNfZGV2X2VuYWJsZTJfZG9uZShlbmljLCAmc3RhdHVzKTsKKwkJYnJlYWs7CisKKwljYXNlIFBPUlRfUkVRVUVTVF9ESVNBU1NPQ0lBVEU6CisJCWVyciA9IGVuaWNfZGV2X2RlaW5pdF9kb25lKGVuaWMsICZzdGF0dXMpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChlcnIpCisJCXN0YXR1cyA9IGVycjsKKworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSBFUlJfU1VDQ0VTUzoKKwkJKnJlc3BvbnNlID0gUE9SVF9QUk9GSUxFX1JFU1BPTlNFX1NVQ0NFU1M7CisJCWJyZWFrOworCWNhc2UgRVJSX0VJTlZBTDoKKwkJKnJlc3BvbnNlID0gUE9SVF9QUk9GSUxFX1JFU1BPTlNFX0lOVkFMSUQ7CisJCWJyZWFrOworCWNhc2UgRVJSX0VCQURTVEFURToKKwkJKnJlc3BvbnNlID0gUE9SVF9QUk9GSUxFX1JFU1BPTlNFX0JBRFNUQVRFOworCQlicmVhazsKKwljYXNlIEVSUl9FTk9NRU06CisJCSpyZXNwb25zZSA9IFBPUlRfUFJPRklMRV9SRVNQT05TRV9JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTOworCQlicmVhazsKKwljYXNlIEVSUl9FSU5QUk9HUkVTUzoKKwkJKnJlc3BvbnNlID0gUE9SVF9QUk9GSUxFX1JFU1BPTlNFX0lOUFJPR1JFU1M7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCSpyZXNwb25zZSA9IFBPUlRfUFJPRklMRV9SRVNQT05TRV9FUlJPUjsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL2VuaWNfcHAuaCBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19wcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5OWUzNjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9lbmljL2VuaWNfcHAuaApAQCAtMCwwICsxLDI3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTEgQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IG1heSByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworCisjaWZuZGVmIF9FTklDX1BQX0hfCisjZGVmaW5lIF9FTklDX1BQX0hfCisKK2ludCBlbmljX3Byb2Nlc3Nfc2V0X3BwX3JlcXVlc3Qoc3RydWN0IGVuaWMgKmVuaWMsCisJc3RydWN0IGVuaWNfcG9ydF9wcm9maWxlICpwcmV2X3BwLCBpbnQgKnJlc3RvcmVfcHApOworaW50IGVuaWNfcHJvY2Vzc19nZXRfcHBfcmVxdWVzdChzdHJ1Y3QgZW5pYyAqZW5pYywgaW50IHJlcXVlc3QsCisJdTE2ICpyZXNwb25zZSk7CisKKyNlbmRpZiAvKiBfRU5JQ19QUF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy9lbmljX3Jlcy5jIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljX3Jlcy5jCmluZGV4IGYxMTFhMzcuLjZlNWM2MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19yZXMuYworKysgYi9kcml2ZXJzL25ldC9lbmljL2VuaWNfcmVzLmMKQEAgLTk4LDkgKzk4LDkgQEAKIAkJInZOSUMgTUFDIGFkZHIgJXBNIHdxL3JxICVkLyVkIG10dSAlZFxuIiwKIAkJZW5pYy0+bWFjX2FkZHIsIGMtPndxX2Rlc2NfY291bnQsIGMtPnJxX2Rlc2NfY291bnQsIGMtPm10dSk7CiAJZGV2X2luZm8oZW5pY19nZXRfZGV2KGVuaWMpLCAidk5JQyBjc3VtIHR4L3J4ICVkLyVkICIKLQkJInRzby9scm8gJWQvJWQgaW50ciB0aW1lciAlZCB1c2VjIHJzcyAlZFxuIiwKKwkJInRzbyAlZCBpbnRyIHRpbWVyICVkIHVzZWMgcnNzICVkXG4iLAogCQlFTklDX1NFVFRJTkcoZW5pYywgVFhDU1VNKSwgRU5JQ19TRVRUSU5HKGVuaWMsIFJYQ1NVTSksCi0JCUVOSUNfU0VUVElORyhlbmljLCBUU08pLCBFTklDX1NFVFRJTkcoZW5pYywgTFJPKSwKKwkJRU5JQ19TRVRUSU5HKGVuaWMsIFRTTyksCiAJCWMtPmludHJfdGltZXJfdXNlYywgRU5JQ19TRVRUSU5HKGVuaWMsIFJTUykpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2LmMgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2LmMKaW5kZXggYzA4OWIzNi4uNjhmMjRhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuYwpAQCAtNzg2LDQ4ICs3ODYsNiBAQAogCXJldHVybiByOwogfQogCi1pbnQgdm5pY19kZXZfaW5pdF9kb25lKHN0cnVjdCB2bmljX2RldiAqdmRldiwgaW50ICpkb25lLCBpbnQgKmVycikKLXsKLQl1NjQgYTAgPSAwLCBhMSA9IDA7Ci0JaW50IHdhaXQgPSAxMDAwOwotCWludCByZXQ7Ci0KLQkqZG9uZSA9IDA7Ci0KLQlyZXQgPSB2bmljX2Rldl9jbWQodmRldiwgQ01EX0lOSVRfU1RBVFVTLCAmYTAsICZhMSwgd2FpdCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCSpkb25lID0gKGEwID09IDApOwotCi0JKmVyciA9IChhMCA9PSAwKSA/IChpbnQpYTE6MDsKLQotCXJldHVybiAwOwotfQotCi1pbnQgdm5pY19kZXZfaW5pdF9wcm92KHN0cnVjdCB2bmljX2RldiAqdmRldiwgdTggKmJ1ZiwgdTMyIGxlbikKLXsKLQl1NjQgYTAsIGExID0gbGVuOwotCWludCB3YWl0ID0gMTAwMDsKLQlkbWFfYWRkcl90IHByb3ZfcGE7Ci0Jdm9pZCAqcHJvdl9idWY7Ci0JaW50IHJldDsKLQotCXByb3ZfYnVmID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQodmRldi0+cGRldiwgbGVuLCAmcHJvdl9wYSk7Ci0JaWYgKCFwcm92X2J1ZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1jcHkocHJvdl9idWYsIGJ1ZiwgbGVuKTsKLQotCWEwID0gcHJvdl9wYTsKLQotCXJldCA9IHZuaWNfZGV2X2NtZCh2ZGV2LCBDTURfSU5JVF9QUk9WX0lORk8sICZhMCwgJmExLCB3YWl0KTsKLQotCXBjaV9mcmVlX2NvbnNpc3RlbnQodmRldi0+cGRldiwgbGVuLCBwcm92X2J1ZiwgcHJvdl9wYSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBpbnQgdm5pY19kZXZfZGVpbml0KHN0cnVjdCB2bmljX2RldiAqdmRldikKIHsKIAl1NjQgYTAgPSAwLCBhMSA9IDA7CkBAIC05MjcsNCArODg1LDU5IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK2ludCB2bmljX2Rldl9pbml0X3Byb3YyKHN0cnVjdCB2bmljX2RldiAqdmRldiwgdTggKmJ1ZiwgdTMyIGxlbikKK3sKKwl1NjQgYTAsIGExID0gbGVuOworCWludCB3YWl0ID0gMTAwMDsKKwlkbWFfYWRkcl90IHByb3ZfcGE7CisJdm9pZCAqcHJvdl9idWY7CisJaW50IHJldDsKIAorCXByb3ZfYnVmID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQodmRldi0+cGRldiwgbGVuLCAmcHJvdl9wYSk7CisJaWYgKCFwcm92X2J1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1jcHkocHJvdl9idWYsIGJ1ZiwgbGVuKTsKKworCWEwID0gcHJvdl9wYTsKKworCXJldCA9IHZuaWNfZGV2X2NtZCh2ZGV2LCBDTURfSU5JVF9QUk9WX0lORk8yLCAmYTAsICZhMSwgd2FpdCk7CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHZkZXYtPnBkZXYsIGxlbiwgcHJvdl9idWYsIHByb3ZfcGEpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHZuaWNfZGV2X2VuYWJsZTIoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCBpbnQgYWN0aXZlKQoreworCXU2NCBhMCwgYTEgPSAwOworCWludCB3YWl0ID0gMTAwMDsKKworCWEwID0gKGFjdGl2ZSA/IENNRF9FTkFCTEUyX0FDVElWRSA6IDApOworCisJcmV0dXJuIHZuaWNfZGV2X2NtZCh2ZGV2LCBDTURfRU5BQkxFMiwgJmEwLCAmYTEsIHdhaXQpOworfQorCitzdGF0aWMgaW50IHZuaWNfZGV2X2NtZF9zdGF0dXMoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCBlbnVtIHZuaWNfZGV2Y21kX2NtZCBjbWQsCisJaW50ICpzdGF0dXMpCit7CisJdTY0IGEwID0gY21kLCBhMSA9IDA7CisJaW50IHdhaXQgPSAxMDAwOworCWludCByZXQ7CisKKwlyZXQgPSB2bmljX2Rldl9jbWQodmRldiwgQ01EX1NUQVRVUywgJmEwLCAmYTEsIHdhaXQpOworCWlmICghcmV0KQorCQkqc3RhdHVzID0gKGludClhMDsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCB2bmljX2Rldl9lbmFibGUyX2RvbmUoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCBpbnQgKnN0YXR1cykKK3sKKwlyZXR1cm4gdm5pY19kZXZfY21kX3N0YXR1cyh2ZGV2LCBDTURfRU5BQkxFMiwgc3RhdHVzKTsKK30KKworaW50IHZuaWNfZGV2X2RlaW5pdF9kb25lKHN0cnVjdCB2bmljX2RldiAqdmRldiwgaW50ICpzdGF0dXMpCit7CisJcmV0dXJuIHZuaWNfZGV2X2NtZF9zdGF0dXModmRldiwgQ01EX0RFSU5JVCwgc3RhdHVzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuaCBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuaAppbmRleCBlODM3NTQ2Li5jZjQ4MmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2LmgKKysrIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5oCkBAIC0xMDgsOCArMTA4LDYgQEAKIGludCB2bmljX2Rldl9vcGVuKHN0cnVjdCB2bmljX2RldiAqdmRldiwgaW50IGFyZyk7CiBpbnQgdm5pY19kZXZfb3Blbl9kb25lKHN0cnVjdCB2bmljX2RldiAqdmRldiwgaW50ICpkb25lKTsKIGludCB2bmljX2Rldl9pbml0KHN0cnVjdCB2bmljX2RldiAqdmRldiwgaW50IGFyZyk7Ci1pbnQgdm5pY19kZXZfaW5pdF9kb25lKHN0cnVjdCB2bmljX2RldiAqdmRldiwgaW50ICpkb25lLCBpbnQgKmVycik7Ci1pbnQgdm5pY19kZXZfaW5pdF9wcm92KHN0cnVjdCB2bmljX2RldiAqdmRldiwgdTggKmJ1ZiwgdTMyIGxlbik7CiBpbnQgdm5pY19kZXZfZGVpbml0KHN0cnVjdCB2bmljX2RldiAqdmRldik7CiBpbnQgdm5pY19kZXZfaGFuZ19yZXNldChzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIGludCBhcmcpOwogaW50IHZuaWNfZGV2X2hhbmdfcmVzZXRfZG9uZShzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIGludCAqZG9uZSk7CkBAIC0xMjIsNSArMTIwLDkgQEAKIHN0cnVjdCB2bmljX2RldiAqdm5pY19kZXZfcmVnaXN0ZXIoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LAogCXZvaWQgKnByaXYsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3Qgdm5pY19kZXZfYmFyICpiYXIsCiAJdW5zaWduZWQgaW50IG51bV9iYXJzKTsKK2ludCB2bmljX2Rldl9pbml0X3Byb3YyKHN0cnVjdCB2bmljX2RldiAqdmRldiwgdTggKmJ1ZiwgdTMyIGxlbik7CitpbnQgdm5pY19kZXZfZW5hYmxlMihzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIGludCBhY3RpdmUpOworaW50IHZuaWNfZGV2X2VuYWJsZTJfZG9uZShzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIGludCAqc3RhdHVzKTsKK2ludCB2bmljX2Rldl9kZWluaXRfZG9uZShzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIGludCAqc3RhdHVzKTsKIAogI2VuZGlmIC8qIF9WTklDX0RFVl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2RldmNtZC5oIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2RldmNtZC5oCmluZGV4IGQ4MzNhMDcuLmM1NTY5YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXZjbWQuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2Y21kLmgKQEAgLTI2NywxNyArMjY3LDYyIEBACiAKIAkvKgogCSAqIEFzIGZvciBCWV9CREYgZXhjZXB0IGEwIGlzIGluZGV4IG9mIGh2bmxpbmsgc3Vib3JkaW5hdGUgdm5pYwotCSAqIG9yIFNSLUlPViB2aXJ0dWFsIHZuaWMgKi8KKwkgKiBvciBTUi1JT1YgdmlydHVhbCB2bmljCisJICovCiAJQ01EX1BST1hZX0JZX0lOREVYID0gICAgX0NNREMoX0NNRF9ESVJfUlcsIF9DTURfVlRZUEVfQUxMLCA0MyksCiAKIAkvKgotCSAqIGluOiAgKHU2NClhMD1wYWRkciBvZiBidWZmZXIgdG8gcHV0IGxhdGVzdCBWSUMgVklGLUNPTkZJRy1JTkZPIFRMViBpbgotCSAqICAgICAgKHUzMilhMT1sZW5ndGggb2YgYnVmZmVyIGluIGEwCi0JICogb3V0OiAodTY0KWEwPXBhZGRyIG9mIGJ1ZmZlciB3aXRoIGxhdGVzdCBWSUMgVklGLUNPTkZJRy1JTkZPIFRMVgotCSAqICAgICAgKHUzMilhMT1hY3R1YWwgbGVuZ3RoIG9mIGxhdGVzdCBWSUMgVklGLUNPTkZJRy1JTkZPIFRMViAqLworCSAqIEZvciBIUFAgdG9nZ2xlOgorCSAqIGFkYXB0ZXItaW5mby1nZXQKKwkgKiBpbjogICh1NjQpYTA9cGhzaWNhbCBhZGRyZXNzIG9mIGJ1ZmZlciBwYXNzZWQgaW4gZnJvbSBjYWxsZXIuCisJICogICAgICAodTE2KWExPXNpemUgb2YgYnVmZmVyIHNwZWNpZmllZCBpbiBhMC4KKwkgKiBvdXQ6ICh1NjQpYTA9cGhzaWNhbCBhZGRyZXNzIG9mIGJ1ZmZlciBwYXNzZWQgaW4gZnJvbSBjYWxsZXIuCisJICogICAgICAodTE2KWExPWFjdHVhbCBieXRlcyBmcm9tIFZJRi1DT05GSUctSU5GTyBUTFYsIG9yCisJICogICAgICAgICAgICAgIDAgaWYgbm8gVklGLUNPTkZJRy1JTkZPIFRMViB3YXMgZXZlciByZWNlaXZlZC4gKi8KIAlDTURfQ09ORklHX0lORk9fR0VUICAgICA9IF9DTURDKF9DTURfRElSX1JXLCBfQ01EX1ZUWVBFX0FMTCwgNDQpLAorCisJLyogaW5pdF9wcm92X2luZm8yOgorCSAqIFZhcmlhbnQgb2YgQ01EX0lOSVRfUFJPVl9JTkZPLCB3aGVyZSBpdCB3aWxsIG5vdCB0cnkgdG8gZW5hYmxlCisJICogdGhlIHZuaWMgdW50aWwgQ01EX0VOQUJMRTIgaXMgaXNzdWVkLgorCSAqICAgICAodTY0KWEwPXBhZGRyIG9mIHZuaWNfZGV2Y21kX3Byb3ZpbmZvCisJICogICAgICh1MzIpYTE9c2l6ZW9mIHByb3Zpc2lvbiBpbmZvICovCisJQ01EX0lOSVRfUFJPVl9JTkZPMiAgPSBfQ01EQyhfQ01EX0RJUl9XUklURSwgX0NNRF9WVFlQRV9FTkVULCA0NyksCisKKwkvKiBlbmFibGUyOgorCSAqICAgICAgKHUzMilhMD0wICAgICAgICAgICAgICAgICAgPT0+IHN0YW5kYnkKKwkgKiAgICAgICAgICAgICA9Q01EX0VOQUJMRTJfQUNUSVZFID09PiBhY3RpdmUKKwkgKi8KKwlDTURfRU5BQkxFMiA9IF9DTURDKF9DTURfRElSX1dSSVRFLCBfQ01EX1ZUWVBFX0VORVQsIDQ4KSwKKworCS8qCisJICogY21kX3N0YXR1czoKKwkgKiAgICAgUmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBzcGVjaWZpZWQgY29tbWFuZAorCSAqIElucHV0OgorCSAqICAgICBhMCA9IGNvbW1hbmQgZm9yIHdoaWNoIHN0YXR1cyBpcyBiZWluZyBxdWVyaWVkLgorCSAqICAgICAgICAgIFBvc3NpYmxlIHZhbHVlcyBhcmU6CisJICogICAgICAgICAgICAgIENNRF9TT0ZUX1JFU0VUCisJICogICAgICAgICAgICAgIENNRF9IQU5HX1JFU0VUCisJICogICAgICAgICAgICAgIENNRF9PUEVOCisJICogICAgICAgICAgICAgIENNRF9JTklUCisJICogICAgICAgICAgICAgIENNRF9JTklUX1BST1ZfSU5GTworCSAqICAgICAgICAgICAgICBDTURfREVJTklUCisJICogICAgICAgICAgICAgIENNRF9JTklUX1BST1ZfSU5GTzIKKwkgKiAgICAgICAgICAgICAgQ01EX0VOQUJMRTIKKwkgKiBPdXRwdXQ6CisJICogICAgIGlmIHN0YXR1cyA9PSBTVEFUX0VSUk9SCisJICogICAgICAgIGEwID0gRVJSX0VOT1RTVVBQT1JURUQgLSBzdGF0dXMgZm9yIGNvbW1hbmQgaW4gYTAgaXMKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBzdXBwb3J0ZWQKKwkgKiAgICAgaWYgc3RhdHVzID09IFNUQVRfTk9ORQorCSAqICAgICAgICBhMCA9IHN0YXR1cyBvZiB0aGUgZGV2Y21kIHNwZWNpZmllZCBpbiBhMCBhcyBmb2xsb3dzLgorCSAqICAgICAgICAgICAgIEVSUl9TVUNDRVNTICAgLSBjb21tYW5kIGluIGEwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkKKwkgKiAgICAgICAgICAgICBFUlJfRUlOUFJPR1JFU1MgLSBjb21tYW5kIGluIGEwIGlzIHN0aWxsIGluIHByb2dyZXNzCisJICovCisJQ01EX1NUQVRVUyA9IF9DTURDKF9DTURfRElSX1JXLCBfQ01EX1ZUWVBFX0FMTCwgNDkpLAogfTsKIAorLyogQ01EX0VOQUJMRTIgZmxhZ3MgKi8KKyNkZWZpbmUgQ01EX0VOQUJMRTJfQUNUSVZFICAweDEKKwogLyogZmxhZ3MgZm9yIENNRF9PUEVOICovCiAjZGVmaW5lIENNRF9PUEVORl9PUFJPTQkJMHgxCS8qIG9wZW4gY29taW5nIGZyb20gb3B0aW9uIHJvbSAqLwogCkBAIC0zMTUsNiArMzYwLDggQEAKIAlFUlJfRVRJTUVET1VUID0gOCwKIAlFUlJfRUxJTktET1dOID0gOSwKIAlFUlJfRU1BWFJFUyA9IDEwLAorCUVSUl9FTk9UU1VQUE9SVEVEID0gMTEsCisJRVJSX0VJTlBST0dSRVNTID0gMTIsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX3ZpYy5jIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX3ZpYy5jCmluZGV4IDQ3MjViNzkuLjI0ZWY4Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY192aWMuYworKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfdmljLmMKQEAgLTIzLDcgKzIzLDggQEAKIAogI2luY2x1ZGUgInZuaWNfdmljLmgiCiAKLXN0cnVjdCB2aWNfcHJvdmluZm8gKnZpY19wcm92aW5mb19hbGxvYyhnZnBfdCBmbGFncywgdTggKm91aSwgdTggdHlwZSkKK3N0cnVjdCB2aWNfcHJvdmluZm8gKnZpY19wcm92aW5mb19hbGxvYyhnZnBfdCBmbGFncywgY29uc3QgdTggKm91aSwKKwljb25zdCB1OCB0eXBlKQogewogCXN0cnVjdCB2aWNfcHJvdmluZm8gKnZwOwogCkBAIC00Nyw3ICs0OCw3IEBACiB9CiAKIGludCB2aWNfcHJvdmluZm9fYWRkX3RsdihzdHJ1Y3QgdmljX3Byb3ZpbmZvICp2cCwgdTE2IHR5cGUsIHUxNiBsZW5ndGgsCi0Jdm9pZCAqdmFsdWUpCisJY29uc3Qgdm9pZCAqdmFsdWUpCiB7CiAJc3RydWN0IHZpY19wcm92aW5mb190bHYgKnRsdjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX3ZpYy5oIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX3ZpYy5oCmluZGV4IGY3MDBmNWQuLjllZjgxZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY192aWMuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfdmljLmgKQEAgLTQ3LDYgKzQ3LDcgQEAKIAlWSUNfR0VORVJJQ19QUk9WX09TX1RZUEVfRVNYID0gMSwKIAlWSUNfR0VORVJJQ19QUk9WX09TX1RZUEVfTElOVVggPSAyLAogCVZJQ19HRU5FUklDX1BST1ZfT1NfVFlQRV9XSU5ET1dTID0gMywKKwlWSUNfR0VORVJJQ19QUk9WX09TX1RZUEVfU09MQVJJUyA9IDQsCiB9OwogCiBzdHJ1Y3QgdmljX3Byb3ZpbmZvIHsKQEAgLTYxLDE0ICs2MiwyMiBAQAogCX0gdGx2WzBdOwogfSBfX3BhY2tlZDsKIAorI2RlZmluZSBWSUNfUFJPVklORk9fQUREX1RMVih2cCwgdGx2dHlwZSwgdGx2bGVuLCBkYXRhKSBcCisJZG8geyBcCisJCWVyciA9IHZpY19wcm92aW5mb19hZGRfdGx2KHZwLCB0bHZ0eXBlLCB0bHZsZW4sIGRhdGEpOyBcCisJCWlmIChlcnIpIFwKKwkJCWdvdG8gYWRkX3Rsdl9mYWlsdXJlOyBcCisJfSB3aGlsZSAoMCkKKwogI2RlZmluZSBWSUNfUFJPVklORk9fTUFYX0RBVEEJCTEzODUKICNkZWZpbmUgVklDX1BST1ZJTkZPX01BWF9UTFZfREFUQSAoVklDX1BST1ZJTkZPX01BWF9EQVRBIC0gXAogCXNpemVvZihzdHJ1Y3QgdmljX3Byb3ZpbmZvKSkKIAotc3RydWN0IHZpY19wcm92aW5mbyAqdmljX3Byb3ZpbmZvX2FsbG9jKGdmcF90IGZsYWdzLCB1OCAqb3VpLCB1OCB0eXBlKTsKK3N0cnVjdCB2aWNfcHJvdmluZm8gKnZpY19wcm92aW5mb19hbGxvYyhnZnBfdCBmbGFncywgY29uc3QgdTggKm91aSwKKwljb25zdCB1OCB0eXBlKTsKIHZvaWQgdmljX3Byb3ZpbmZvX2ZyZWUoc3RydWN0IHZpY19wcm92aW5mbyAqdnApOwogaW50IHZpY19wcm92aW5mb19hZGRfdGx2KHN0cnVjdCB2aWNfcHJvdmluZm8gKnZwLCB1MTYgdHlwZSwgdTE2IGxlbmd0aCwKLQl2b2lkICp2YWx1ZSk7CisJY29uc3Qgdm9pZCAqdmFsdWUpOwogc2l6ZV90IHZpY19wcm92aW5mb19zaXplKHN0cnVjdCB2aWNfcHJvdmluZm8gKnZwKTsKIAogI2VuZGlmCS8qIF9WTklDX1ZJQ19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXdyazMuYyBiL2RyaXZlcnMvbmV0L2V3cmszLmMKaW5kZXggMzgwZDA2MS4uYjVmNjE3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXdyazMuYworKysgYi9kcml2ZXJzL25ldC9ld3JrMy5jCkBAIC0xNTQ1LDcgKzE1NDUsNyBAQAogCX0KIAogCWVjbWQtPnN1cHBvcnRlZCB8PSBTVVBQT1JURURfMTBiYXNlVF9IYWxmOwotCWVjbWQtPnNwZWVkID0gU1BFRURfMTA7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIFNQRUVEXzEwKTsKIAllY21kLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKIAlyZXR1cm4gMDsKIH0KQEAgLTE2MDQsNTUgKzE2MDQsNDcgQEAKIAlyZXR1cm4gIShjbXIgJiBDTVJfTElOSyk7CiB9CiAKLXN0YXRpYyBpbnQgZXdyazNfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3N0YXRpYyBpbnQgZXdyazNfc2V0X3BoeXNfaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgZW51bSBldGh0b29sX3BoeXNfaWRfc3RhdGUgc3RhdGUpCiB7CiAJc3RydWN0IGV3cmszX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGlvYmFzZSA9IGRldi0+YmFzZV9hZGRyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTggY3I7Ci0JaW50IGNvdW50OwogCi0JLyogVG9nZ2xlIExFRCA0eCBwZXIgc2Vjb25kICovCi0JY291bnQgPSBkYXRhIDw8IDI7CisJc3Bpbl9sb2NrX2lycSgmbHAtPmh3X2xvY2spOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5od19sb2NrLCBmbGFncyk7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgRVRIVE9PTF9JRF9BQ1RJVkU6CisJCS8qIFByZXZlbnQgSVNSIGZyb20gdHdpZGRsaW5nIHRoZSBMRUQgKi8KKwkJbHAtPmxlZF9tYXNrID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxKCZscC0+aHdfbG9jayk7CisJCXJldHVybiAyOwkvKiBjeWNsZSBvbi9vZmYgdHdpY2UgcGVyIHNlY29uZCAqLwogCi0JLyogQmFpbCBpZiBhIFBIWVNfSUQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyAqLwotCWlmIChscC0+bGVkX21hc2sgPT0gMCkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+aHdfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCS8qIFByZXZlbnQgSVNSIGZyb20gdHdpZGRsaW5nIHRoZSBMRUQgKi8KLQlscC0+bGVkX21hc2sgPSAwOwotCi0Jd2hpbGUgKGNvdW50LS0pIHsKLQkJLyogVG9nZ2xlIHRoZSBMRUQgKi8KKwljYXNlIEVUSFRPT0xfSURfT046CiAJCWNyID0gaW5iKEVXUkszX0NSKTsKLQkJb3V0YihjciBeIENSX0xFRCwgRVdSSzNfQ1IpOworCQlvdXRiKGNyIHwgQ1JfTEVELCBFV1JLM19DUik7CisJCWJyZWFrOwogCi0JCS8qIFdhaXQgYSBsaXR0bGUgd2hpbGUgKi8KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmh3X2xvY2ssIGZsYWdzKTsKLQkJbXNsZWVwKDI1MCk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+aHdfbG9jaywgZmxhZ3MpOworCWNhc2UgRVRIVE9PTF9JRF9PRkY6CisJCWNyID0gaW5iKEVXUkszX0NSKTsKKwkJb3V0YihjciAmIH5DUl9MRUQsIEVXUkszX0NSKTsKKwkJYnJlYWs7CiAKLQkJLyogRXhpdCBpZiB3ZSBnb3QgYSBzaWduYWwgKi8KLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCQkJYnJlYWs7CisJY2FzZSBFVEhUT09MX0lEX0lOQUNUSVZFOgorCQlscC0+bGVkX21hc2sgPSBDUl9MRUQ7CisJCWNyID0gaW5iKEVXUkszX0NSKTsKKwkJb3V0YihjciAmIH5DUl9MRUQsIEVXUkszX0NSKTsKIAl9CisJc3Bpbl91bmxvY2tfaXJxKCZscC0+aHdfbG9jayk7CiAKLQlscC0+bGVkX21hc2sgPSBDUl9MRUQ7Ci0JY3IgPSBpbmIoRVdSSzNfQ1IpOwotCW91dGIoY3IgJiB+Q1JfTEVELCBFV1JLM19DUik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmh3X2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgPyAtRVJFU1RBUlRTWVMgOiAwOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzXzIwMyA9IHsKIAkuZ2V0X2RydmluZm8gPSBld3JrM19nZXRfZHJ2aW5mbywKIAkuZ2V0X3NldHRpbmdzID0gZXdyazNfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MgPSBld3JrM19zZXRfc2V0dGluZ3MsCi0JLnBoeXNfaWQgPSBld3JrM19waHlzX2lkLAorCS5zZXRfcGh5c19pZCA9IGV3cmszX3NldF9waHlzX2lkLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBldGh0b29sX29wcyA9IHsKQEAgLTE2NjAsNyArMTY1Miw3IEBACiAJLmdldF9zZXR0aW5ncyA9IGV3cmszX2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzID0gZXdyazNfc2V0X3NldHRpbmdzLAogCS5nZXRfbGluayA9IGV3cmszX2dldF9saW5rLAotCS5waHlzX2lkID0gZXdyazNfcGh5c19pZCwKKwkuc2V0X3BoeXNfaWQgPSBld3JrM19zZXRfcGh5c19pZCwKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCmluZGV4IGQ1YWI0ZGEuLjUzN2I2OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCkBAIC02NCw2ICs2NCw3IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSAgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CkBAIC03NzQsNyArNzc1LDYgQEAKIAl1MzIgZHJpdmVyX2RhdGE7CiAJdTMyIGRldmljZV9pZDsKIAl1MzIgcmVnaXN0ZXJfc2l6ZTsKLQlpbnQgcnhfY3N1bTsKIAl1MzIgbWFjX2luX3VzZTsKIAlpbnQgbWdtdF92ZXJzaW9uOwogCWludCBtZ210X3NlbWE7CkBAIC0zOTU2LDYgKzM5NTYsNyBAQAogc3RhdGljIGludCBudl9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQogewogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIHNwZWVkOwogCWludCBhZHY7CiAKIAlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CkBAIC0zOTc1LDIzICszOTc2LDI2IEBACiAJaWYgKG5ldGlmX2NhcnJpZXJfb2soZGV2KSkgewogCQlzd2l0Y2ggKG5wLT5saW5rc3BlZWQgJiAoTlZSRUdfTElOS1NQRUVEX01BU0spKSB7CiAJCWNhc2UgTlZSRUdfTElOS1NQRUVEXzEwOgotCQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDsKKwkJCXNwZWVkID0gU1BFRURfMTA7CiAJCQlicmVhazsKIAkJY2FzZSBOVlJFR19MSU5LU1BFRURfMTAwOgotCQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDA7CisJCQlzcGVlZCA9IFNQRUVEXzEwMDsKIAkJCWJyZWFrOwogCQljYXNlIE5WUkVHX0xJTktTUEVFRF8xMDAwOgotCQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDAwOworCQkJc3BlZWQgPSBTUEVFRF8xMDAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzcGVlZCA9IC0xOwogCQkJYnJlYWs7CiAJCX0KIAkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7CiAJCWlmIChucC0+ZHVwbGV4KQogCQkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJfSBlbHNlIHsKLQkJZWNtZC0+c3BlZWQgPSAtMTsKKwkJc3BlZWQgPSAtMTsKIAkJZWNtZC0+ZHVwbGV4ID0gLTE7CiAJfQotCisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIHNwZWVkKTsKIAllY21kLT5hdXRvbmVnID0gbnAtPmF1dG9uZWc7CiAKIAllY21kLT5hZHZlcnRpc2luZyA9IEFEVkVSVElTRURfTUlJOwpAQCAtNDAzMCw2ICs0MDM0LDcgQEAKIHN0YXRpYyBpbnQgbnZfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKIHsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiBzcGVlZCA9IGV0aHRvb2xfY21kX3NwZWVkKGVjbWQpOwogCiAJaWYgKGVjbWQtPnBvcnQgIT0gUE9SVF9NSUkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNDA1NSw3ICs0MDYwLDcgQEAKIAkJLyogTm90ZTogYXV0b25lZ290aWF0aW9uIGRpc2FibGUsIHNwZWVkIDEwMDAgaW50ZW50aW9uYWxseQogCQkgKiBmb3JiaWRkZW4gLSBubyBvbmUgc2hvdWxkIG5lZWQgdGhhdC4gKi8KIAotCQlpZiAoZWNtZC0+c3BlZWQgIT0gU1BFRURfMTAgJiYgZWNtZC0+c3BlZWQgIT0gU1BFRURfMTAwKQorCQlpZiAoc3BlZWQgIT0gU1BFRURfMTAgJiYgc3BlZWQgIT0gU1BFRURfMTAwKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChlY21kLT5kdXBsZXggIT0gRFVQTEVYX0hBTEYgJiYgZWNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKQogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC00MTM5LDEzICs0MTQ0LDEzIEBACiAKIAkJYWR2ID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9BRFZFUlRJU0UsIE1JSV9SRUFEKTsKIAkJYWR2ICY9IH4oQURWRVJUSVNFX0FMTCB8IEFEVkVSVElTRV8xMDBCQVNFNCB8IEFEVkVSVElTRV9QQVVTRV9DQVAgfCBBRFZFUlRJU0VfUEFVU0VfQVNZTSk7Ci0JCWlmIChlY21kLT5zcGVlZCA9PSBTUEVFRF8xMCAmJiBlY21kLT5kdXBsZXggPT0gRFVQTEVYX0hBTEYpCisJCWlmIChzcGVlZCA9PSBTUEVFRF8xMCAmJiBlY21kLT5kdXBsZXggPT0gRFVQTEVYX0hBTEYpCiAJCQlhZHYgfD0gQURWRVJUSVNFXzEwSEFMRjsKLQkJaWYgKGVjbWQtPnNwZWVkID09IFNQRUVEXzEwICYmIGVjbWQtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKKwkJaWYgKHNwZWVkID09IFNQRUVEXzEwICYmIGVjbWQtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKIAkJCWFkdiB8PSBBRFZFUlRJU0VfMTBGVUxMOwotCQlpZiAoZWNtZC0+c3BlZWQgPT0gU1BFRURfMTAwICYmIGVjbWQtPmR1cGxleCA9PSBEVVBMRVhfSEFMRikKKwkJaWYgKHNwZWVkID09IFNQRUVEXzEwMCAmJiBlY21kLT5kdXBsZXggPT0gRFVQTEVYX0hBTEYpCiAJCQlhZHYgfD0gQURWRVJUSVNFXzEwMEhBTEY7Ci0JCWlmIChlY21kLT5zcGVlZCA9PSBTUEVFRF8xMDAgJiYgZWNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQlpZiAoc3BlZWQgPT0gU1BFRURfMTAwICYmIGVjbWQtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKIAkJCWFkdiB8PSBBRFZFUlRJU0VfMTAwRlVMTDsKIAkJbnAtPnBhdXNlX2ZsYWdzICY9IH4oTlZfUEFVU0VGUkFNRV9BVVRPTkVHfE5WX1BBVVNFRlJBTUVfUlhfRU5BQkxFfE5WX1BBVVNFRlJBTUVfVFhfRU5BQkxFKTsKIAkJaWYgKG5wLT5wYXVzZV9mbGFncyAmIE5WX1BBVVNFRlJBTUVfUlhfUkVRKSB7LyogZm9yIHJ4IHdlIHNldCBib3RoIGFkdmVydGlzZW1lbnRzIGJ1dCBkaXNhYmxlIHR4IHBhdXNlICovCkBAIC00MjY0LDE2ICs0MjY5LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG52X3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHZhbHVlKQotewotCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfQ0hFQ0tTVU0pKQotCQlyZXR1cm4gZXRodG9vbF9vcF9zZXRfdHNvKGRldiwgdmFsdWUpOwotCWVsc2UKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotfQotCiBzdGF0aWMgdm9pZCBudl9nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSogcmluZykKIHsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNDQ4MCw1OCArNDQ3NSwzNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTMyIG52X2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdTMyIG52X2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpCiB7Ci0Jc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gbnAtPnJ4X2NzdW0gIT0gMDsKKwkvKiB2bGFuIGlzIGRlcGVuZGVudCBvbiByeCBjaGVja3N1bSBvZmZsb2FkICovCisJaWYgKGZlYXR1cmVzICYgKE5FVElGX0ZfSFdfVkxBTl9UWHxORVRJRl9GX0hXX1ZMQU5fUlgpKQorCQlmZWF0dXJlcyB8PSBORVRJRl9GX1JYQ1NVTTsKKworCXJldHVybiBmZWF0dXJlczsKIH0KIAotc3RhdGljIGludCBudl9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3N0YXRpYyBpbnQgbnZfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKIHsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7Ci0JaW50IHJldGNvZGUgPSAwOworCXUzMiBjaGFuZ2VkID0gZGV2LT5mZWF0dXJlcyBeIGZlYXR1cmVzOwogCi0JaWYgKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfQ0hFQ0tTVU0pIHsKLQkJaWYgKGRhdGEpIHsKLQkJCW5wLT5yeF9jc3VtID0gMTsKKwlpZiAoY2hhbmdlZCAmIE5FVElGX0ZfUlhDU1VNKSB7CisJCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKKworCQlpZiAoZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkKIAkJCW5wLT50eHJ4Y3RsX2JpdHMgfD0gTlZSRUdfVFhSWENUTF9SWENIRUNLOwotCQl9IGVsc2UgewotCQkJbnAtPnJ4X2NzdW0gPSAwOwotCQkJLyogdmxhbiBpcyBkZXBlbmRlbnQgb24gcnggY2hlY2tzdW0gb2ZmbG9hZCAqLwotCQkJaWYgKCEobnAtPnZsYW5jdGxfYml0cyAmIE5WUkVHX1ZMQU5DT05UUk9MX0VOQUJMRSkpCi0JCQkJbnAtPnR4cnhjdGxfYml0cyAmPSB+TlZSRUdfVFhSWENUTF9SWENIRUNLOwotCQl9Ci0JCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKLQkJCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKKwkJZWxzZQorCQkJbnAtPnR4cnhjdGxfYml0cyAmPSB+TlZSRUdfVFhSWENUTF9SWENIRUNLOworCisJCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCiAJCQl3cml0ZWwobnAtPnR4cnhjdGxfYml0cywgYmFzZSArIE52UmVnVHhSeENvbnRyb2wpOwotCQkJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7Ci0JCX0KLQl9IGVsc2UgewotCQlyZXR1cm4gLUVJTlZBTDsKKworCQlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKIAl9CiAKLQlyZXR1cm4gcmV0Y29kZTsKLX0KLQotc3RhdGljIGludCBudl9zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfQ0hFQ0tTVU0pCi0JCXJldHVybiBldGh0b29sX29wX3NldF90eF9jc3VtKGRldiwgZGF0YSk7Ci0JZWxzZQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci19Ci0KLXN0YXRpYyBpbnQgbnZfc2V0X3NnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAobnAtPmRyaXZlcl9kYXRhICYgREVWX0hBU19DSEVDS1NVTSkKLQkJcmV0dXJuIGV0aHRvb2xfb3Bfc2V0X3NnKGRldiwgZGF0YSk7Ci0JZWxzZQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgbnZfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNzZXQpCkBAIC00ODk2LDE1ICs0ODY5LDEwIEBACiAJLmdldF9yZWdzX2xlbiA9IG52X2dldF9yZWdzX2xlbiwKIAkuZ2V0X3JlZ3MgPSBudl9nZXRfcmVncywKIAkubndheV9yZXNldCA9IG52X253YXlfcmVzZXQsCi0JLnNldF90c28gPSBudl9zZXRfdHNvLAogCS5nZXRfcmluZ3BhcmFtID0gbnZfZ2V0X3JpbmdwYXJhbSwKIAkuc2V0X3JpbmdwYXJhbSA9IG52X3NldF9yaW5ncGFyYW0sCiAJLmdldF9wYXVzZXBhcmFtID0gbnZfZ2V0X3BhdXNlcGFyYW0sCiAJLnNldF9wYXVzZXBhcmFtID0gbnZfc2V0X3BhdXNlcGFyYW0sCi0JLmdldF9yeF9jc3VtID0gbnZfZ2V0X3J4X2NzdW0sCi0JLnNldF9yeF9jc3VtID0gbnZfc2V0X3J4X2NzdW0sCi0JLnNldF90eF9jc3VtID0gbnZfc2V0X3R4X2NzdW0sCi0JLnNldF9zZyA9IG52X3NldF9zZywKIAkuZ2V0X3N0cmluZ3MgPSBudl9nZXRfc3RyaW5ncywKIAkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBudl9nZXRfZXRodG9vbF9zdGF0cywKIAkuZ2V0X3NzZXRfY291bnQgPSBudl9nZXRfc3NldF9jb3VudCwKQEAgLTUyMzUsNiArNTIwMyw4IEBACiAJLm5kb19zdGFydF94bWl0CQk9IG52X3N0YXJ0X3htaXQsCiAJLm5kb190eF90aW1lb3V0CQk9IG52X3R4X3RpbWVvdXQsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IG52X2NoYW5nZV9tdHUsCisJLm5kb19maXhfZmVhdHVyZXMJPSBudl9maXhfZmVhdHVyZXMsCisJLm5kb19zZXRfZmVhdHVyZXMJPSBudl9zZXRfZmVhdHVyZXMsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBudl9zZXRfbWFjX2FkZHJlc3MsCiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBudl9zZXRfbXVsdGljYXN0LApAQCAtNTI1MSw2ICs1MjIxLDggQEAKIAkubmRvX3N0YXJ0X3htaXQJCT0gbnZfc3RhcnRfeG1pdF9vcHRpbWl6ZWQsCiAJLm5kb190eF90aW1lb3V0CQk9IG52X3R4X3RpbWVvdXQsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IG52X2NoYW5nZV9tdHUsCisJLm5kb19maXhfZmVhdHVyZXMJPSBudl9maXhfZmVhdHVyZXMsCisJLm5kb19zZXRfZmVhdHVyZXMJPSBudl9zZXRfZmVhdHVyZXMsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBudl9zZXRfbWFjX2FkZHJlc3MsCiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBudl9zZXRfbXVsdGljYXN0LApAQCAtNTM2NCwxMSArNTMzNiwxMCBAQAogCQlucC0+cGt0X2xpbWl0ID0gTlZfUEtUTElNSVRfMjsKIAogCWlmIChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX0NIRUNLU1VNKSB7Ci0JCW5wLT5yeF9jc3VtID0gMTsKIAkJbnAtPnR4cnhjdGxfYml0cyB8PSBOVlJFR19UWFJYQ1RMX1JYQ0hFQ0s7Ci0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9TRzsKLQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKLQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0dSTzsKKwkJZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHIHwKKwkJCU5FVElGX0ZfVFNPIHwgTkVUSUZfRl9SWENTVU07CisJCWRldi0+ZmVhdHVyZXMgfD0gZGV2LT5od19mZWF0dXJlczsKIAl9CiAKIAlucC0+dmxhbmN0bF9iaXRzID0gMDsKQEAgLTUzODQsNyArNTM1NSw2IEBACiAJCW5wLT5wYXVzZV9mbGFncyB8PSBOVl9QQVVTRUZSQU1FX1RYX0NBUEFCTEUgfCBOVl9QQVVTRUZSQU1FX1RYX1JFUTsKIAl9CiAKLQogCWVyciA9IC1FTk9NRU07CiAJbnAtPmJhc2UgPSBpb3JlbWFwKGFkZHIsIG5wLT5yZWdpc3Rlcl9zaXplKTsKIAlpZiAoIW5wLT5iYXNlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKaW5kZXggMjRjYjk1My4uMjFhYmI1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jCkBAIC05NTYsOCArOTU2LDYgQEAKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAogCS5nZXRfbXNnbGV2ZWwgPSBmc19nZXRfbXNnbGV2ZWwsCiAJLnNldF9tc2dsZXZlbCA9IGZzX3NldF9tc2dsZXZlbCwKLQkuc2V0X3R4X2NzdW0gPSBldGh0b29sX29wX3NldF90eF9jc3VtLAkvKiBsb2NhbCEgKi8KLQkuc2V0X3NnID0gZXRodG9vbF9vcF9zZXRfc2csCiAJLmdldF9yZWdzID0gZnNfZ2V0X3JlZ3MsCiB9OwogCkBAIC05OTgsOCArOTk2LDEwIEBACiAjZW5kaWYKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZzX2VuZXRfbWF0Y2hbXTsKIHN0YXRpYyBpbnQgX19kZXZpbml0IGZzX2VuZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpCiB7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CiAJc3RydWN0IGZzX2VuZXRfcHJpdmF0ZSAqZmVwOwogCXN0cnVjdCBmc19wbGF0Zm9ybV9pbmZvICpmcGk7CkBAIC0xMDA3LDE0ICsxMDA3LDE1IEBACiAJY29uc3QgdTggKm1hY19hZGRyOwogCWludCBwcml2c2l6ZSwgbGVuLCByZXQgPSAtRU5PREVWOwogCi0JaWYgKCFvZmRldi0+ZGV2Lm9mX21hdGNoKQorCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKGZzX2VuZXRfbWF0Y2gsICZvZmRldi0+ZGV2KTsKKwlpZiAoIW1hdGNoKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWZwaSA9IGt6YWxsb2Moc2l6ZW9mKCpmcGkpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWZwaSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoIUlTX0ZFQyhvZmRldi0+ZGV2Lm9mX21hdGNoKSkgeworCWlmICghSVNfRkVDKG1hdGNoKSkgewogCQlkYXRhID0gb2ZfZ2V0X3Byb3BlcnR5KG9mZGV2LT5kZXYub2Zfbm9kZSwgImZzbCxjcG0tY29tbWFuZCIsICZsZW4pOwogCQlpZiAoIWRhdGEgfHwgbGVuICE9IDQpCiAJCQlnb3RvIG91dF9mcmVlX2ZwaTsKQEAgLTEwNDksNyArMTA1MCw3IEBACiAJZmVwLT5kZXYgPSAmb2ZkZXYtPmRldjsKIAlmZXAtPm5kZXYgPSBuZGV2OwogCWZlcC0+ZnBpID0gZnBpOwotCWZlcC0+b3BzID0gb2ZkZXYtPmRldi5vZl9tYXRjaC0+ZGF0YTsKKwlmZXAtPm9wcyA9IG1hdGNoLT5kYXRhOwogCiAJcmV0ID0gZmVwLT5vcHMtPnNldHVwX2RhdGEobmRldik7CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZlYy5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmVjLmMKaW5kZXggNjEwMzVmYy4uYjlmYmM4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmVjLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmVjLmMKQEAgLTIyNiw4ICsyMjYsOCBAQAogCX0KIAogCUZDKGZlY3AsIHJfY250cmwsIEZFQ19SQ05UUkxfUFJPTSk7Ci0JRlcoZmVjcCwgaGFzaF90YWJsZV9oaWdoLCBmZXAtPmZlYy5odGhpKTsKLQlGVyhmZWNwLCBoYXNoX3RhYmxlX2xvdywgZmVwLT5mZWMuaHRsbyk7CisJRlcoZmVjcCwgZ3JwX2hhc2hfdGFibGVfaGlnaCwgZmVwLT5mZWMuaHRoaSk7CisJRlcoZmVjcCwgZ3JwX2hhc2hfdGFibGVfbG93LCBmZXAtPmZlYy5odGxvKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0yNzMsOCArMjczLDggQEAKIAkvKgogCSAqIFJlc2V0IGFsbCBtdWx0aWNhc3QuCiAJICovCi0JRlcoZmVjcCwgaGFzaF90YWJsZV9oaWdoLCBmZXAtPmZlYy5odGhpKTsKLQlGVyhmZWNwLCBoYXNoX3RhYmxlX2xvdywgZmVwLT5mZWMuaHRsbyk7CisJRlcoZmVjcCwgZ3JwX2hhc2hfdGFibGVfaGlnaCwgZmVwLT5mZWMuaHRoaSk7CisJRlcoZmVjcCwgZ3JwX2hhc2hfdGFibGVfbG93LCBmZXAtPmZlYy5odGxvKTsKIAogCS8qCiAJICogU2V0IG1heGltdW0gcmVjZWl2ZSBidWZmZXIgc2l6ZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWlpLWZlYy5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktZmVjLmMKaW5kZXggN2U4NDBkMy4uNmEyZTE1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktZmVjLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktZmVjLmMKQEAgLTEwMSwxNyArMTAxLDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZzX2VuZXRfbWRpb19mZWNfbWF0Y2hbXTsKIHN0YXRpYyBpbnQgX19kZXZpbml0IGZzX2VuZXRfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldikKIHsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKIAlzdHJ1Y3QgcmVzb3VyY2UgcmVzOwogCXN0cnVjdCBtaWlfYnVzICpuZXdfYnVzOwogCXN0cnVjdCBmZWNfaW5mbyAqZmVjOwogCWludCAoKmdldF9idXNfZnJlcSkoc3RydWN0IGRldmljZV9ub2RlICopOwogCWludCByZXQgPSAtRU5PTUVNLCBjbG9jaywgc3BlZWQ7CiAKLQlpZiAoIW9mZGV2LT5kZXYub2ZfbWF0Y2gpCisJbWF0Y2ggPSBvZl9tYXRjaF9kZXZpY2UoZnNfZW5ldF9tZGlvX2ZlY19tYXRjaCwgJm9mZGV2LT5kZXYpOworCWlmICghbWF0Y2gpCiAJCXJldHVybiAtRUlOVkFMOwotCWdldF9idXNfZnJlcSA9IG9mZGV2LT5kZXYub2ZfbWF0Y2gtPmRhdGE7CisJZ2V0X2J1c19mcmVxID0gbWF0Y2gtPmRhdGE7CiAKIAluZXdfYnVzID0gbWRpb2J1c19hbGxvYygpOwogCWlmICghbmV3X2J1cykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Z0bWFjMTAwLmMgYi9kcml2ZXJzL25ldC9mdG1hYzEwMC5jCmluZGV4IGEzMTY2MTkuLjliZDc3NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Z0bWFjMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvZnRtYWMxMDAuYwpAQCAtMTM5LDExICsxMzksMTEgQEAKIAkJCSAqIHRoYXQgaGFyZHdhcmUgcmVzZXQgY29tcGxldGVkICh3aGF0IHRoZSBmKmNrKS4KIAkJCSAqIFdlIHN0aWxsIG5lZWQgdG8gd2FpdCBmb3IgYSB3aGlsZS4KIAkJCSAqLwotCQkJdXNsZWVwX3JhbmdlKDUwMCwgMTAwMCk7CisJCQl1ZGVsYXkoNTAwKTsKIAkJCXJldHVybiAwOwogCQl9CiAKLQkJdXNsZWVwX3JhbmdlKDEwMDAsIDEwMDAwKTsKKwkJdWRlbGF5KDEwMDApOwogCX0KIAogCW5ldGRldl9lcnIobmV0ZGV2LCAic29mdHdhcmUgcmVzZXQgZmFpbGVkXG4iKTsKQEAgLTc3Miw3ICs3NzIsNyBAQAogCQlpZiAoKHBoeWNyICYgRlRNQUMxMDBfUEhZQ1JfTUlJUkQpID09IDApCiAJCQlyZXR1cm4gcGh5Y3IgJiBGVE1BQzEwMF9QSFlDUl9NSUlSREFUQTsKIAotCQl1c2xlZXBfcmFuZ2UoMTAwLCAxMDAwKTsKKwkJdWRlbGF5KDEwMCk7CiAJfQogCiAJbmV0ZGV2X2VycihuZXRkZXYsICJtZGlvIHJlYWQgdGltZWQgb3V0XG4iKTsKQEAgLTgwMSw3ICs4MDEsNyBAQAogCQlpZiAoKHBoeWNyICYgRlRNQUMxMDBfUEhZQ1JfTUlJV1IpID09IDApCiAJCQlyZXR1cm47CiAKLQkJdXNsZWVwX3JhbmdlKDEwMCwgMTAwMCk7CisJCXVkZWxheSgxMDApOwogCX0KIAogCW5ldGRldl9lcnIobmV0ZGV2LCAibWRpbyB3cml0ZSB0aW1lZCBvdXRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCmluZGV4IDJhMGFkOWEuLmZmNjBiMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKQEAgLTM2NSw3ICszNjUsNyBAQAogCQlnZmFyX3dyaXRlKCZyZWdzLT5yaXIwLCBERUZBVUxUX1JJUjApOwogCX0KIAotCWlmIChwcml2LT5yeF9jc3VtX2VuYWJsZSkKKwlpZiAobmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkKIAkJcmN0cmwgfD0gUkNUUkxfQ0hFQ0tTVU1NSU5HOwogCiAJaWYgKHByaXYtPmV4dGVuZGVkX2hhc2gpIHsKQEAgLTQ2Myw2ICs0NjMsNyBAQAogCS5uZG9fc3RhcnRfeG1pdCA9IGdmYXJfc3RhcnRfeG1pdCwKIAkubmRvX3N0b3AgPSBnZmFyX2Nsb3NlLAogCS5uZG9fY2hhbmdlX210dSA9IGdmYXJfY2hhbmdlX210dSwKKwkubmRvX3NldF9mZWF0dXJlcyA9IGdmYXJfc2V0X2ZlYXR1cmVzLAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZ2Zhcl9zZXRfbXVsdGksCiAJLm5kb190eF90aW1lb3V0ID0gZ2Zhcl90aW1lb3V0LAogCS5uZG9fZG9faW9jdGwgPSBnZmFyX2lvY3RsLApAQCAtNTEzLDcgKzUxNCw3IEBACiAvKiBSZXR1cm5zIDEgaWYgaW5jb21pbmcgZnJhbWVzIHVzZSBhbiBGQ0IgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGdmYXJfdXNlc19mY2Ioc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdikKIHsKLQlyZXR1cm4gcHJpdi0+dmxncnAgfHwgcHJpdi0+cnhfY3N1bV9lbmFibGUgfHwKKwlyZXR1cm4gcHJpdi0+dmxncnAgfHwgKHByaXYtPm5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pIHx8CiAJCShwcml2LT5kZXZpY2VfZmxhZ3MgJiBGU0xfR0lBTkZBUl9ERVZfSEFTX1RJTUVSKTsKIH0KIApAQCAtMTAzMCwxMCArMTAzMSwxMSBAQAogCQluZXRpZl9uYXBpX2FkZChkZXYsICZwcml2LT5nZmFyZ3JwW2ldLm5hcGksIGdmYXJfcG9sbCwgR0ZBUl9ERVZfV0VJR0hUKTsKIAogCWlmIChwcml2LT5kZXZpY2VfZmxhZ3MgJiBGU0xfR0lBTkZBUl9ERVZfSEFTX0NTVU0pIHsKLQkJcHJpdi0+cnhfY3N1bV9lbmFibGUgPSAxOwotCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfU0cgfCBORVRJRl9GX0hJR0hETUE7Ci0JfSBlbHNlCi0JCXByaXYtPnJ4X2NzdW1fZW5hYmxlID0gMDsKKwkJZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfU0cgfAorCQkJTkVUSUZfRl9SWENTVU07CisJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9TRyB8CisJCQlORVRJRl9GX1JYQ1NVTSB8IE5FVElGX0ZfSElHSERNQTsKKwl9CiAKIAlwcml2LT52bGdycCA9IE5VTEw7CiAKQEAgLTI2OTcsNyArMjY5OSw3IEBACiAJaWYgKHByaXYtPnBhZGRpbmcpCiAJCXNrYl9wdWxsKHNrYiwgcHJpdi0+cGFkZGluZyk7CiAKLQlpZiAocHJpdi0+cnhfY3N1bV9lbmFibGUpCisJaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkKIAkJZ2Zhcl9yeF9jaGVja3N1bShza2IsIGZjYik7CiAKIAkvKiBUZWxsIHRoZSBza2Igd2hhdCBraW5kIG9mIHBhY2tldCB0aGlzIGlzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmggYi9kcml2ZXJzL25ldC9naWFuZmFyLmgKaW5kZXggYjJmZTdlZC4uZmM4NmY1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5oCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuaApAQCAtMzgyLDIzICszODIsNiBAQAogI2RlZmluZSBCRF9MRkxBRyhmbGFncykgKChmbGFncykgPDwgMTYpCiAjZGVmaW5lIEJEX0xFTkdUSF9NQVNLCQkweDAwMDBmZmZmCiAKLSNkZWZpbmUgQ0xBU1NfQ09ERV9VTlJFQ09HCQkweDAwCi0jZGVmaW5lIENMQVNTX0NPREVfRFVNTVkxCQkweDAxCi0jZGVmaW5lIENMQVNTX0NPREVfRVRIRVJUWVBFMQkJMHgwMgotI2RlZmluZSBDTEFTU19DT0RFX0VUSEVSVFlQRTIJCTB4MDMKLSNkZWZpbmUgQ0xBU1NfQ09ERV9VU0VSX1BST0cxCQkweDA0Ci0jZGVmaW5lIENMQVNTX0NPREVfVVNFUl9QUk9HMgkJMHgwNQotI2RlZmluZSBDTEFTU19DT0RFX1VTRVJfUFJPRzMJCTB4MDYKLSNkZWZpbmUgQ0xBU1NfQ09ERV9VU0VSX1BST0c0CQkweDA3Ci0jZGVmaW5lIENMQVNTX0NPREVfVENQX0lQVjQJCTB4MDgKLSNkZWZpbmUgQ0xBU1NfQ09ERV9VRFBfSVBWNAkJMHgwOQotI2RlZmluZSBDTEFTU19DT0RFX0FIX0VTUF9JUFY0CQkweDBhCi0jZGVmaW5lIENMQVNTX0NPREVfU0NUUF9JUFY0CQkweDBiCi0jZGVmaW5lIENMQVNTX0NPREVfVENQX0lQVjYJCTB4MGMKLSNkZWZpbmUgQ0xBU1NfQ09ERV9VRFBfSVBWNgkJMHgwZAotI2RlZmluZSBDTEFTU19DT0RFX0FIX0VTUF9JUFY2CQkweDBlCi0jZGVmaW5lIENMQVNTX0NPREVfU0NUUF9JUFY2CQkweDBmCi0KICNkZWZpbmUgRlBSX0ZJTEVSX01BU0sJMHhGRkZGRkZGRgogI2RlZmluZSBNQVhfRklMRVJfSURYCTB4RkYKIApAQCAtMTEwMCw3ICsxMDgzLDcgQEAKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBoeV9ub2RlOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqdGJpX25vZGU7CiAJdTMyIGRldmljZV9mbGFnczsKLQl1bnNpZ25lZCBjaGFyIHJ4X2NzdW1fZW5hYmxlOjEsCisJdW5zaWduZWQgY2hhcgogCQlleHRlbmRlZF9oYXNoOjEsCiAJCWJkX3N0YXNoX2VuOjEsCiAJCXJ4X2ZpbGVyX2VuYWJsZToxLApAQCAtMTE3MCw2ICsxMTUzLDcgQEAKIGV4dGVybiB2b2lkIGdmYXJfY29uZmlndXJlX2NvYWxlc2Npbmcoc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiwKIAkJdW5zaWduZWQgbG9uZyB0eF9tYXNrLCB1bnNpZ25lZCBsb25nIHJ4X21hc2spOwogdm9pZCBnZmFyX2luaXRfc3lzZnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitpbnQgZ2Zhcl9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZlYXR1cmVzKTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBnZmFyX2V0aHRvb2xfb3BzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2dpYW5mYXJfZXRodG9vbC5jCmluZGV4IDNiYzhlMjcuLjQ5M2Q3NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXJfZXRodG9vbC5jCkBAIC01MTcsMTUgKzUxNywxNSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgZ2Zhcl9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1aW50MzJfdCBkYXRhKQoraW50IGdmYXJfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKIHsKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnIgPSAwLCBpID0gMDsKKwl1MzIgY2hhbmdlZCA9IGRldi0+ZmVhdHVyZXMgXiBmZWF0dXJlczsKIAotCWlmICghKHByaXYtPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfQ1NVTSkpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQorCWlmICghKGNoYW5nZWQgJiBORVRJRl9GX1JYQ1NVTSkpCisJCXJldHVybiAwOwogCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfVVApIHsKIAkJLyogSGFsdCBUWCBhbmQgUlgsIGFuZCBwcm9jZXNzIHRoZSBmcmFtZXMgd2hpY2gKQEAgLTU0Niw1OCArNTQ2LDE1IEBACiAKIAkJLyogTm93IHdlIHRha2UgZG93biB0aGUgcmluZ3MgdG8gcmVidWlsZCB0aGVtICovCiAJCXN0b3BfZ2ZhcihkZXYpOwotCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5iZmxvY2ssIGZsYWdzKTsKLQlwcml2LT5yeF9jc3VtX2VuYWJsZSA9IGRhdGE7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+YmZsb2NrLCBmbGFncyk7CisJCWRldi0+ZmVhdHVyZXMgPSBmZWF0dXJlczsKIAotCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKSB7CiAJCWVyciA9IHN0YXJ0dXBfZ2ZhcihkZXYpOwogCQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMoZGV2KTsKIAl9CiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHVpbnQzMl90IGdmYXJfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmICghKHByaXYtPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfQ1NVTSkpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHByaXYtPnJ4X2NzdW1fZW5hYmxlOwotfQotCi1zdGF0aWMgaW50IGdmYXJfc2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdWludDMyX3QgZGF0YSkKLXsKLQlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmICghKHByaXYtPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfQ1NVTSkpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKLQotCWlmIChkYXRhKQotCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTTsKLQllbHNlCi0JCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfSVBfQ1NVTTsKLQotCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdCBnZmFyX2dldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoIShwcml2LT5kZXZpY2VfZmxhZ3MgJiBGU0xfR0lBTkZBUl9ERVZfSEFTX0NTVU0pKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSVBfQ1NVTSkgIT0gMDsKLX0KLQogc3RhdGljIHVpbnQzMl90IGdmYXJfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CkBAIC02NDUsNDIgKzYwMiw2IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBnZmFyX2V0aGZsb3dfdG9fY2xhc3MoaW50IGZsb3dfdHlwZSwgdTY0ICpjbGFzcykKLXsKLQlzd2l0Y2ggKGZsb3dfdHlwZSkgewotCWNhc2UgVENQX1Y0X0ZMT1c6Ci0JCSpjbGFzcyA9IENMQVNTX0NPREVfVENQX0lQVjQ7Ci0JCWJyZWFrOwotCWNhc2UgVURQX1Y0X0ZMT1c6Ci0JCSpjbGFzcyA9IENMQVNTX0NPREVfVURQX0lQVjQ7Ci0JCWJyZWFrOwotCWNhc2UgQUhfVjRfRkxPVzoKLQljYXNlIEVTUF9WNF9GTE9XOgotCQkqY2xhc3MgPSBDTEFTU19DT0RFX0FIX0VTUF9JUFY0OwotCQlicmVhazsKLQljYXNlIFNDVFBfVjRfRkxPVzoKLQkJKmNsYXNzID0gQ0xBU1NfQ09ERV9TQ1RQX0lQVjQ7Ci0JCWJyZWFrOwotCWNhc2UgVENQX1Y2X0ZMT1c6Ci0JCSpjbGFzcyA9IENMQVNTX0NPREVfVENQX0lQVjY7Ci0JCWJyZWFrOwotCWNhc2UgVURQX1Y2X0ZMT1c6Ci0JCSpjbGFzcyA9IENMQVNTX0NPREVfVURQX0lQVjY7Ci0JCWJyZWFrOwotCWNhc2UgQUhfVjZfRkxPVzoKLQljYXNlIEVTUF9WNl9GTE9XOgotCQkqY2xhc3MgPSBDTEFTU19DT0RFX0FIX0VTUF9JUFY2OwotCQlicmVhazsKLQljYXNlIFNDVFBfVjZfRkxPVzoKLQkJKmNsYXNzID0gQ0xBU1NfQ09ERV9TQ1RQX0lQVjY7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwotfQotCiBzdGF0aWMgdm9pZCBldGhmbG93X3RvX2ZpbGVyX3J1bGVzIChzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2LCB1NjQgZXRoZmxvdykKIHsKIAl1MzIgZmNyID0gMHgwLCBmcHIgPSBGUFJfRklMRVJfTUFTSzsKQEAgLTc3OCwxMSArNjk5LDYgQEAKIAljYXNlIFVEUF9WNl9GTE9XOgogCQljbXBfcnFmcHIgPSBSUUZQUl9JUFY2IHxSUUZQUl9VRFA7CiAJCWJyZWFrOwotCWNhc2UgSVBWNF9GTE9XOgotCQljbXBfcnFmcHIgPSBSUUZQUl9JUFY0OwotCWNhc2UgSVBWNl9GTE9XOgotCQljbXBfcnFmcHIgPSBSUUZQUl9JUFY2OwotCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIgIlJpZ2h0IG5vdyB0aGlzIGNsYXNzIGlzIG5vdCBzdXBwb3J0ZWRcbiIpOwogCQlyZXR1cm4gMDsKQEAgLTg0OCwxOCArNzY0LDkgQEAKIAogc3RhdGljIGludCBnZmFyX3NldF9oYXNoX29wdHMoc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZCkKIHsKLQl1NjQgY2xhc3M7Ci0KLQlpZiAoIWdmYXJfZXRoZmxvd190b19jbGFzcyhjbWQtPmZsb3dfdHlwZSwgJmNsYXNzKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoY2xhc3MgPCBDTEFTU19DT0RFX1VTRVJfUFJPRzEgfHwKLQkJCWNsYXNzID4gQ0xBU1NfQ09ERV9TQ1RQX0lQVjYpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJLyogd3JpdGUgdGhlIGZpbGVyIHJ1bGVzIGhlcmUgKi8KIAlpZiAoIWdmYXJfZXRoZmxvd190b19maWxlcl90YWJsZShwcml2LCBjbWQtPmRhdGEsIGNtZC0+Zmxvd190eXBlKSkKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiAwOwogfQpAQCAtODk0LDExICs4MDEsNiBAQAogCS5nZXRfc3RyaW5ncyA9IGdmYXJfZ3N0cmluZ3MsCiAJLmdldF9zc2V0X2NvdW50ID0gZ2Zhcl9zc2V0X2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IGdmYXJfZmlsbF9zdGF0cywKLQkuZ2V0X3J4X2NzdW0gPSBnZmFyX2dldF9yeF9jc3VtLAotCS5nZXRfdHhfY3N1bSA9IGdmYXJfZ2V0X3R4X2NzdW0sCi0JLnNldF9yeF9jc3VtID0gZ2Zhcl9zZXRfcnhfY3N1bSwKLQkuc2V0X3R4X2NzdW0gPSBnZmFyX3NldF90eF9jc3VtLAotCS5zZXRfc2cgPSBldGh0b29sX29wX3NldF9zZywKIAkuZ2V0X21zZ2xldmVsID0gZ2Zhcl9nZXRfbXNnbGV2ZWwsCiAJLnNldF9tc2dsZXZlbCA9IGdmYXJfc2V0X21zZ2xldmVsLAogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ3JldGguYyBiL2RyaXZlcnMvbmV0L2dyZXRoLmMKaW5kZXggMzk2ZmY3ZC4uZjE4MTMwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ3JldGguYworKysgYi9kcml2ZXJzL25ldC9ncmV0aC5jCkBAIC05MDEsNyArOTAxLDcgQEAKIAogCQkJCXNrYl9wdXQoc2tiLCBwa3RfbGVuKTsKIAotCQkJCWlmIChncmV0aC0+ZmxhZ3MgJiBHUkVUSF9GTEFHX1JYX0NTVU0gJiYgaHdfY2hlY2tzdW1tZWQoc3RhdHVzKSkKKwkJCQlpZiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNICYmIGh3X2NoZWNrc3VtbWVkKHN0YXR1cykpCiAJCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJCQkJZWxzZQogCQkJCQlza2JfY2hlY2tzdW1fbm9uZV9hc3NlcnQoc2tiKTsKQEAgLTExNDIsNDEgKzExNDIsNiBAQAogCQlidWZmW2ldID0gZ3JldGhfcmVhZF9iZCgmZ3JldGhfcmVnc1tpXSk7CiB9CiAKLXN0YXRpYyB1MzIgZ3JldGhfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGggPSBuZXRkZXZfcHJpdihkZXYpOwotCXJldHVybiAoZ3JldGgtPmZsYWdzICYgR1JFVEhfRkxBR19SWF9DU1VNKSAhPSAwOwotfQotCi1zdGF0aWMgaW50IGdyZXRoX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlzcGluX2xvY2tfYmgoJmdyZXRoLT5kZXZsb2NrKTsKLQotCWlmIChkYXRhKQotCQlncmV0aC0+ZmxhZ3MgfD0gR1JFVEhfRkxBR19SWF9DU1VNOwotCWVsc2UKLQkJZ3JldGgtPmZsYWdzICY9IH5HUkVUSF9GTEFHX1JYX0NTVU07Ci0KLQlzcGluX3VubG9ja19iaCgmZ3JldGgtPmRldmxvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1MzIgZ3JldGhfZ2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0lQX0NTVU0pICE9IDA7Ci19Ci0KLXN0YXRpYyBpbnQgZ3JldGhfc2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0JbmV0aWZfdHhfbG9ja19iaChkZXYpOwotCWV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0oZGV2LCBkYXRhKTsKLQluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBncmV0aF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X21zZ2xldmVsCQk9IGdyZXRoX2dldF9tc2dsZXZlbCwKIAkuc2V0X21zZ2xldmVsCQk9IGdyZXRoX3NldF9tc2dsZXZlbCwKQEAgLTExODUsMTAgKzExNTAsNiBAQAogCS5nZXRfZHJ2aW5mbwkJPSBncmV0aF9nZXRfZHJ2aW5mbywKIAkuZ2V0X3JlZ3NfbGVuICAgICAgICAgICA9IGdyZXRoX2dldF9yZWdzX2xlbiwKIAkuZ2V0X3JlZ3MgICAgICAgICAgICAgICA9IGdyZXRoX2dldF9yZWdzLAotCS5nZXRfcnhfY3N1bQkJPSBncmV0aF9nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0JCT0gZ3JldGhfc2V0X3J4X2NzdW0sCi0JLmdldF90eF9jc3VtCQk9IGdyZXRoX2dldF90eF9jc3VtLAotCS5zZXRfdHhfY3N1bQkJPSBncmV0aF9zZXRfdHhfY3N1bSwKIAkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKIH07CiAKQEAgLTE1NzAsOSArMTUzMSwxMCBAQAogCUdSRVRIX1JFR1NBVkUocmVncy0+c3RhdHVzLCAweEZGKTsKIAogCWlmIChncmV0aC0+Z2JpdF9tYWMpIHsKLQkJZGV2LT5mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0hJR0hETUE7CisJCWRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwKKwkJCU5FVElGX0ZfUlhDU1VNOworCQlkZXYtPmZlYXR1cmVzID0gZGV2LT5od19mZWF0dXJlcyB8IE5FVElGX0ZfSElHSERNQTsKIAkJZ3JldGhfbmV0ZGV2X29wcy5uZG9fc3RhcnRfeG1pdCA9IGdyZXRoX3N0YXJ0X3htaXRfZ2JpdDsKLQkJZ3JldGgtPmZsYWdzID0gR1JFVEhfRkxBR19SWF9DU1VNOwogCX0KIAogCWlmIChncmV0aC0+bXVsdGljYXN0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ncmV0aC5oIGIvZHJpdmVycy9uZXQvZ3JldGguaAppbmRleCBiZTBmMjA2Li45YTAwNDBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ncmV0aC5oCisrKyBiL2RyaXZlcnMvbmV0L2dyZXRoLmgKQEAgLTc3LDkgKzc3LDYgQEAKICAqLwogI2RlZmluZSBNQVhfRlJBTUVfU0laRQkJMTUyMAogCi0vKiBGbGFncyAqLwotI2RlZmluZSBHUkVUSF9GTEFHX1JYX0NTVU0gMHgxCi0KIC8qIEdSRVRIIEFQQiByZWdpc3RlcnMgKi8KIHN0cnVjdCBncmV0aF9yZWdzIHsKIAl1MzIgY29udHJvbDsKQEAgLTEzMyw3ICsxMzAsNiBAQAogCXVuc2lnbmVkIGludCBkdXBsZXg7CiAKIAl1MzIgbXNnX2VuYWJsZTsKLQl1MzIgZmxhZ3M7CiAKIAl1OCBwaHlhZGRyOwogCXU4IG11bHRpY2FzdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbWFjaGkuYyBiL2RyaXZlcnMvbmV0L2hhbWFjaGkuYwppbmRleCA4MGQyNWVkLi5hMDkwNDFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1hY2hpLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtYWNoaS5jCkBAIC0xMzIsMTMgKzEzMiw4IEBACiAvKgogICogUlhfQ0hFQ0tTVU0gdHVybnMgb24gY2FyZC1nZW5lcmF0ZWQgcmVjZWl2ZSBjaGVja3N1bSBnZW5lcmF0aW9uIGZvcgogICogICBUQ1AgYW5kIFVEUCBwYWNrZXRzLiAgT3RoZXJ3aXNlIHRoZSB1cHBlciBsYXllcnMgZG8gdGhlIGNhbGN1bGF0aW9uLgotICogVFhfQ0hFQ0tTVU0gd29uJ3QgZG8gYW55dGhpbmcgdG9vIHVzZWZ1bCwgZXZlbiBpZiBpdCB3b3Jrcy4gIFRoZXJlJ3Mgbm8KLSAqICAgZWFzeSBtZWNoYW5pc20gYnkgd2hpY2ggdG8gdGVsbCB0aGUgVENQL1VEUCBzdGFjayB0aGF0IGl0IG5lZWQgbm90Ci0gKiAgIGdlbmVyYXRlIGNoZWNrc3VtcyBmb3IgdGhpcyBkZXZpY2UuICBCdXQgaWYgc29tZWJvZHkgY2FuIGZpbmQgYSB3YXkKLSAqICAgdG8gZ2V0IHRoYXQgdG8gd29yaywgbW9zdCBvZiB0aGUgY2FyZCB3b3JrIGlzIGluIGhlcmUgYWxyZWFkeS4KICAqIDMvMTAvMTk5OSBQZXRlIFd5Y2tvZmYgPHd5Y2tvZmZAY2Euc2FuZGlhLmdvdj4KICAqLwotI3VuZGVmICBUWF9DSEVDS1NVTQogI2RlZmluZSBSWF9DSEVDS1NVTQogCiAvKiBPcGVyYXRpb25hbCBwYXJhbWV0ZXJzIHRoYXQgdXN1YWxseSBhcmUgbm90IGNoYW5nZWQuICovCkBAIC02MzAsMTEgKzYyNSw2IEBACiAKIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCi0jaWZkZWYgVFhfQ0hFQ0tTVU0KLQlwcmludGsoImNoZWNrIHRoYXQgc2tiY29weSBpbiBpcF9xdWV1ZV94bWl0IGlzbid0IGhhcHBlbmluZ1xuIik7Ci0JZGV2LT5oYXJkX2hlYWRlcl9sZW4gKz0gODsgIC8qIGZvciBja3N1bSB0YWcgKi8KLSNlbmRpZgotCiAJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKIAkJZGV2LT5kZXZfYWRkcltpXSA9IDEgPyByZWFkX2VlcHJvbShpb2FkZHIsIDQgKyBpKQogCQkJOiByZWFkYihpb2FkZHIgKyBTdGF0aW9uQWRkciArIGkpOwpAQCAtOTM3LDExICs5MjcsNyBAQAogCiAJLyogYWx3YXlzIDEsIHRha2VzIG5vIG1vcmUgdGltZSB0byBkbyBpdCAqLwogCXdyaXRldygweDAwMDEsIGlvYWRkciArIFJ4Q2hlY2tzdW0pOwotI2lmZGVmIFRYX0NIRUNLU1VNCi0Jd3JpdGV3KDB4MDAwMSwgaW9hZGRyICsgVHhDaGVja3N1bSk7Ci0jZWxzZQogCXdyaXRldygweDAwMDAsIGlvYWRkciArIFR4Q2hlY2tzdW0pOwotI2VuZGlmCiAJd3JpdGV3KDB4ODAwMCwgaW9hZGRyICsgTUFDQ25mZyk7IC8qIFNvZnQgcmVzZXQgdGhlIE1BQyAqLwogCXdyaXRldygweDIxNUYsIGlvYWRkciArIE1BQ0NuZmcpOwogCXdyaXRldygweDAwMEMsIGlvYWRkciArIEZyYW1lR2FwMCk7CkBAIC0xMjI2LDQwICsxMjEyLDYgQEAKIH0KIAogCi0jaWZkZWYgVFhfQ0hFQ0tTVU0KLSNkZWZpbmUgY3N1bV9hZGQoaXQsIHZhbCkgXAotZG8geyBcCi0gICAgaXQgKz0gKHUxNikgKHZhbCk7IFwKLSAgICBpZiAoaXQgJiAweGZmZmYwMDAwKSB7IFwKLQlpdCAmPSAweGZmZmY7IFwKLQkrK2l0OyBcCi0gICAgfSBcCi19IHdoaWxlICgwKQotICAgIC8qIHByaW50aygiYWRkICUwNHggLS0+ICUwNHhcbiIsIHZhbCwgaXQpOyBcICovCi0KLS8qIHVoLT5sZW4gYWxyZWFkeSBuZXR3b3JrIGZvcm1hdCwgZG8gbm90IHN3YXAgKi8KLSNkZWZpbmUgcHNldWRvX2NzdW1fdWRwKHN1bSxpaCx1aCkgZG8geyBcCi0gICAgc3VtID0gMDsgXAotICAgIGNzdW1fYWRkKHN1bSwgKGloKS0+c2FkZHIgPj4gMTYpOyBcCi0gICAgY3N1bV9hZGQoc3VtLCAoaWgpLT5zYWRkciAmIDB4ZmZmZik7IFwKLSAgICBjc3VtX2FkZChzdW0sIChpaCktPmRhZGRyID4+IDE2KTsgXAotICAgIGNzdW1fYWRkKHN1bSwgKGloKS0+ZGFkZHIgJiAweGZmZmYpOyBcCi0gICAgY3N1bV9hZGQoc3VtLCBjcHVfdG9fYmUxNihJUFBST1RPX1VEUCkpOyBcCi0gICAgY3N1bV9hZGQoc3VtLCAodWgpLT5sZW4pOyBcCi19IHdoaWxlICgwKQotCi0vKiBzd2FwIGxlbiAqLwotI2RlZmluZSBwc2V1ZG9fY3N1bV90Y3Aoc3VtLGloLGxlbikgZG8geyBcCi0gICAgc3VtID0gMDsgXAotICAgIGNzdW1fYWRkKHN1bSwgKGloKS0+c2FkZHIgPj4gMTYpOyBcCi0gICAgY3N1bV9hZGQoc3VtLCAoaWgpLT5zYWRkciAmIDB4ZmZmZik7IFwKLSAgICBjc3VtX2FkZChzdW0sIChpaCktPmRhZGRyID4+IDE2KTsgXAotICAgIGNzdW1fYWRkKHN1bSwgKGloKS0+ZGFkZHIgJiAweGZmZmYpOyBcCi0gICAgY3N1bV9hZGQoc3VtLCBjcHVfdG9fYmUxNihJUFBST1RPX1RDUCkpOyBcCi0gICAgY3N1bV9hZGQoc3VtLCBodG9ucyhsZW4pKTsgXAotfSB3aGlsZSAoMCkKLSNlbmRpZgotCiBzdGF0aWMgbmV0ZGV2X3R4X3QgaGFtYWNoaV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTEyOTIsMzYgKzEyNDQsNiBAQAogCiAJaG1wLT50eF9za2J1ZmZbZW50cnldID0gc2tiOwogCi0jaWZkZWYgVFhfQ0hFQ0tTVU0KLQl7Ci0JICAgIC8qIHRhY2sgb24gY2hlY2tzdW0gdGFnICovCi0JICAgIHUzMiB0YWd2YWwgPSAwOwotCSAgICBzdHJ1Y3QgZXRoaGRyICplaCA9IChzdHJ1Y3QgZXRoaGRyICopc2tiLT5kYXRhOwotCSAgICBpZiAoZWgtPmhfcHJvdG8gPT0gY3B1X3RvX2JlMTYoRVRIX1BfSVApKSB7Ci0JCXN0cnVjdCBpcGhkciAqaWggPSAoc3RydWN0IGlwaGRyICopKChjaGFyICopZWggKyBFVEhfSExFTik7Ci0JCWlmIChpaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHsKLQkJICAgIHN0cnVjdCB1ZHBoZHIgKnVoCi0JCSAgICAgID0gKHN0cnVjdCB1ZHBoZHIgKikoKGNoYXIgKilpaCArIGloLT5paGwqNCk7Ci0JCSAgICB1MzIgb2Zmc2V0ID0gKCh1bnNpZ25lZCBjaGFyICopdWggKyA2KSAtIHNrYi0+ZGF0YTsKLQkJICAgIHUzMiBwc2V1ZG87Ci0JCSAgICBwc2V1ZG9fY3N1bV91ZHAocHNldWRvLCBpaCwgdWgpOwotCQkgICAgcHNldWRvID0gaHRvbnMocHNldWRvKTsKLQkJICAgIHByaW50aygidWRwIGNrc3VtIHdhcyAlMDR4LCBzZW5kaW5nIHBzZXVkbyAlMDR4XG4iLAotCQkgICAgICB1aC0+Y2hlY2ssIHBzZXVkbyk7Ci0JCSAgICB1aC0+Y2hlY2sgPSAwOyAgLyogemVybyBvdXQgdWgtPmNoZWNrIGJlZm9yZSBjYXJkIGNhbGMgKi8KLQkJICAgIC8qCi0JCSAgICAgKiBzdGFydCBhdCAxNCAoc2tpcCBldGhoZHIpLCBzdG9yZSBhdCBvZmZzZXQgKHVoLT5jaGVjayksCi0JCSAgICAgKiB1c2UgcHNldWRvIHZhbHVlIGdpdmVuLgotCQkgICAgICovCi0JCSAgICB0YWd2YWwgPSAoMTQgPDwgMjQpIHwgKG9mZnNldCA8PCAxNikgfCBwc2V1ZG87Ci0JCX0gZWxzZSBpZiAoaWgtPnByb3RvY29sID09IElQUFJPVE9fVENQKSB7Ci0JCSAgICBwcmludGsoInRjcCwgbm8gYXV0byBja3N1bVxuIik7Ci0JCX0KLQkgICAgfQotCSAgICAqKHUzMiAqKXNrYl9wdXNoKHNrYiwgOCkgPSB0YWd2YWw7Ci0JfQotI2VuZGlmCi0KICAgICAgICAgaG1wLT50eF9yaW5nW2VudHJ5XS5hZGRyID0gY3B1X3RvX2xlWFgocGNpX21hcF9zaW5nbGUoaG1wLT5wY2lfZGV2LAogCQlza2ItPmRhdGEsIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JwcWV0aGVyLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9icHFldGhlci5jCmluZGV4IDg5MzExNjguLjE4ZDhhZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JwcWV0aGVyLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYnBxZXRoZXIuYwpAQCAtNTE2LDEwICs1MTYsNiBAQAogCW1lbWNweShicHEtPmRlc3RfYWRkciwgYmNhc3RfYWRkciwgc2l6ZW9mKGJwcV9ldGhfYWRkcikpOwogCW1lbWNweShicHEtPmFjcHRfYWRkciwgYmNhc3RfYWRkciwgc2l6ZW9mKGJwcV9ldGhfYWRkcikpOwogCi0JZXJyID0gZGV2X2FsbG9jX25hbWUobmRldiwgbmRldi0+bmFtZSk7Ci0JaWYgKGVyciA8IDApIAotCQlnb3RvIGVycm9yOwotCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKG5kZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyb3I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ocDEwMC5jIGIvZHJpdmVycy9uZXQvaHAxMDAuYwppbmRleCA4ZTEwZDJmLi5jNTJhMWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ocDEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2hwMTAwLmMKQEAgLTE4OCwxNCArMTg4LDE0IEBACiAgKiAgdmFyaWFibGVzCiAgKi8KICNpZmRlZiBDT05GSUdfSVNBCi1zdGF0aWMgY29uc3QgY2hhciAqaHAxMDBfaXNhX3RibFtdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGhwMTAwX2lzYV90YmxbXSBfX2RldmluaXRjb25zdCA9IHsKIAkiSFdQRjE1MCIsIC8qIEhQIEoyNTczIHJldiBBICovCiAJIkhXUDE5NTAiLCAvKiBIUCBKMjU3MyAqLwogfTsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0VJU0EKLXN0YXRpYyBzdHJ1Y3QgZWlzYV9kZXZpY2VfaWQgaHAxMDBfZWlzYV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWlzYV9kZXZpY2VfaWQgaHAxMDBfZWlzYV90YmxbXSBfX2RldmluaXRjb25zdCA9IHsKIAl7ICJIV1BGMTgwIiB9LCAvKiBIUCBKMjU3NyByZXYgQSAqLwogCXsgIkhXUDE5MjAiIH0sIC8qIEhQIDI3MjQ4QiAqLwogCXsgIkhXUDE5NDAiIH0sIC8qIEhQIEoyNTc3ICovCkBAIC0zMzYsNyArMzM2LDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19JU0EKLXN0YXRpYyBfX2luaXQgaW50IGhwMTAwX2lzYV9wcm9iZTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlvYWRkcikKK3N0YXRpYyBfX2RldmluaXQgaW50IGhwMTAwX2lzYV9wcm9iZTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlvYWRkcikKIHsKIAljb25zdCBjaGFyICpzaWc7CiAJaW50IGk7CkBAIC0zNzIsNyArMzcyLDcgQEAKICAqIEVJU0EgYW5kIFBDSSBhcmUgaGFuZGxlZCBieSBkZXZpY2UgaW5mcmFzdHJ1Y3R1cmUuCiAgKi8KIAotc3RhdGljIGludCAgX19pbml0IGhwMTAwX2lzYV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgYWRkcikKK3N0YXRpYyBpbnQgIF9fZGV2aW5pdCBocDEwMF9pc2FfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGFkZHIpCiB7CiAJaW50IGVyciA9IC1FTk9ERVY7CiAKQEAgLTM5Niw3ICszOTYsNyBAQAogI2VuZGlmIC8qIENPTkZJR19JU0EgKi8KIAogI2lmICFkZWZpbmVkKE1PRFVMRSkgJiYgZGVmaW5lZChDT05GSUdfSVNBKQotc3RydWN0IG5ldF9kZXZpY2UgKiBfX2luaXQgaHAxMDBfcHJvYmUoaW50IHVuaXQpCitzdHJ1Y3QgbmV0X2RldmljZSAqIF9fZGV2aW5pdCBocDEwMF9wcm9iZShpbnQgdW5pdCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBocDEwMF9wcml2YXRlKSk7CiAJaW50IGVycjsKQEAgLTI4NDMsNyArMjg0Myw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfRUlTQQotc3RhdGljIGludCBfX2luaXQgaHAxMDBfZWlzYV9wcm9iZSAoc3RydWN0IGRldmljZSAqZ2VuZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgaHAxMDBfZWlzYV9wcm9iZSAoc3RydWN0IGRldmljZSAqZ2VuZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGhwMTAwX3ByaXZhdGUpKTsKIAlzdHJ1Y3QgZWlzYV9kZXZpY2UgKmVkZXYgPSB0b19laXNhX2RldmljZShnZW5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHlkcmEuYyBiL2RyaXZlcnMvbmV0L2h5ZHJhLmMKaW5kZXggYzVlZjYyYy4uMWNkNDgxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaHlkcmEuYworKysgYi9kcml2ZXJzL25ldC9oeWRyYS5jCkBAIC05OCwxNSArOTgsMTUgQEAKIAkubmRvX29wZW4JCT0gaHlkcmFfb3BlbiwKIAkubmRvX3N0b3AJCT0gaHlkcmFfY2xvc2UsCiAKLQkubmRvX3N0YXJ0X3htaXQJCT0gZWlfc3RhcnRfeG1pdCwKLQkubmRvX3R4X3RpbWVvdXQJCT0gZWlfdHhfdGltZW91dCwKLQkubmRvX2dldF9zdGF0cwkJPSBlaV9nZXRfc3RhdHMsCi0JLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBlaV9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19zdGFydF94bWl0CQk9IF9fZWlfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gX19laV90eF90aW1lb3V0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IF9fZWlfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gX19laV9zZXRfbXVsdGljYXN0X2xpc3QsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCi0JLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZXRoX21hY19hZGRyLAogCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gZWlfcG9sbCwKKwkubmRvX3BvbGxfY29udHJvbGxlcgk9IF9fZWlfcG9sbCwKICNlbmRpZgogfTsKIApAQCAtMTI1LDcgKzEyNSw3IEBACiAJMHgxMCwgMHgxMiwgMHgxNCwgMHgxNiwgMHgxOCwgMHgxYSwgMHgxYywgMHgxZSwKICAgICB9OwogCi0gICAgZGV2ID0gYWxsb2NfZWlfbmV0ZGV2KCk7CisgICAgZGV2ID0gX19fX2FsbG9jX2VpX25ldGRldigwKTsKICAgICBpZiAoIWRldikKIAlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jCmluZGV4IDNiYjk5MGIuLjA3OTQ1MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYworKysgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMKQEAgLTIwNTMsMTMgKzIwNTMsNiBAQAogCW11dGV4X3VubG9jaygmZGV2LT5saW5rX2xvY2spOwogfQogCi1zdGF0aWMgdTMyIGVtYWNfZXRodG9vbF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKLXsKLQlzdHJ1Y3QgZW1hY19pbnN0YW5jZSAqZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7Ci0KLQlyZXR1cm4gZGV2LT50YWhfZGV2ICE9IE5VTEw7Ci19Ci0KIHN0YXRpYyBpbnQgZW1hY19nZXRfcmVnc19sZW4oc3RydWN0IGVtYWNfaW5zdGFuY2UgKmRldikKIHsKIAlpZiAoZW1hY19oYXNfZmVhdHVyZShkZXYsIEVNQUNfRlRSX0VNQUM0KSkKQEAgLTIyMDMsMTUgKzIxOTYsMTEgQEAKIAkuZ2V0X3JpbmdwYXJhbSA9IGVtYWNfZXRodG9vbF9nZXRfcmluZ3BhcmFtLAogCS5nZXRfcGF1c2VwYXJhbSA9IGVtYWNfZXRodG9vbF9nZXRfcGF1c2VwYXJhbSwKIAotCS5nZXRfcnhfY3N1bSA9IGVtYWNfZXRodG9vbF9nZXRfcnhfY3N1bSwKLQogCS5nZXRfc3RyaW5ncyA9IGVtYWNfZXRodG9vbF9nZXRfc3RyaW5ncywKIAkuZ2V0X3NzZXRfY291bnQgPSBlbWFjX2V0aHRvb2xfZ2V0X3NzZXRfY291bnQsCiAJLmdldF9ldGh0b29sX3N0YXRzID0gZW1hY19ldGh0b29sX2dldF9ldGh0b29sX3N0YXRzLAogCiAJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKLQkuZ2V0X3R4X2NzdW0gPSBldGh0b29sX29wX2dldF90eF9jc3VtLAotCS5nZXRfc2cgPSBldGh0b29sX29wX2dldF9zZywKIH07CiAKIHN0YXRpYyBpbnQgZW1hY19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKQEAgLTI4NTksOCArMjg0OCwxMCBAQAogCWlmIChlcnIgIT0gMCkKIAkJZ290byBlcnJfZGV0YWNoX3RhaDsKIAotCWlmIChkZXYtPnRhaF9kZXYpCi0JCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfU0c7CisJaWYgKGRldi0+dGFoX2RldikgeworCQluZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfU0c7CisJCW5kZXYtPmZlYXR1cmVzIHw9IG5kZXYtPmh3X2ZlYXR1cmVzIHwgTkVUSUZfRl9SWENTVU07CisJfQogCW5kZXYtPndhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwogCWlmIChlbWFjX3BoeV9zdXBwb3J0c19naWdlKGRldi0+cGh5X21vZGUpKSB7CiAJCW5kZXYtPm5ldGRldl9vcHMgPSAmZW1hY19naWdlX25ldGRldl9vcHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1sYW5hLmMgYi9kcml2ZXJzL25ldC9pYm1sYW5hLmMKaW5kZXggOGZmNjhhZS4uMTM2ZDc1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtbGFuYS5jCisrKyBiL2RyaXZlcnMvbmV0L2libWxhbmEuYwpAQCAtNzgyLDcgKzc4Miw4IEBACiAKIAkvKiByZWdpc3RlciByZXNvdXJjZXMgLSBvbmx5IG5lY2Vzc2FyeSBmb3IgSVJRICovCiAKLQlyZXN1bHQgPSByZXF1ZXN0X2lycShwcml2LT5yZWFsaXJxLCBpcnFfaGFuZGxlciwgSVJRRl9TSEFSRUQgfCBJUlFGX1NBTVBMRV9SQU5ET00sIGRldi0+bmFtZSwgZGV2KTsKKwlyZXN1bHQgPSByZXF1ZXN0X2lycShwcml2LT5yZWFsaXJxLCBpcnFfaGFuZGxlciwgSVJRRl9TSEFSRUQsCisJCQkgICAgIGRldi0+bmFtZSwgZGV2KTsKIAlpZiAocmVzdWx0ICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlZ2lzdGVyIGlycSAlZFxuIiwgZGV2LT5uYW1lLCBkZXYtPmlycSk7CiAJCXJldHVybiByZXN1bHQ7CkBAIC04OTQsMTIgKzg5NSwxMiBAQAogc3RhdGljIGludCBpYm1sYW5hX2lvOwogc3RhdGljIGludCBzdGFydHNsb3Q7CQkvKiBjb3VudHMgdGhyb3VnaCBzbG90cyB3aGVuIHByb2JpbmcgbXVsdGlwbGUgZGV2aWNlcyAqLwogCi1zdGF0aWMgc2hvcnQgaWJtbGFuYV9hZGFwdGVyX2lkc1tdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc2hvcnQgaWJtbGFuYV9hZGFwdGVyX2lkc1tdIF9fZGV2aW5pdGNvbnN0ID0gewogCUlCTV9MQU5BX0lELAogCTB4MDAwMAogfTsKIAotc3RhdGljIGNoYXIgKmlibWxhbmFfYWRhcHRlcl9uYW1lc1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgaWJtbGFuYV9hZGFwdGVyX25hbWVzW10gX19kZXZpbml0Y29uc3QgPSB7CiAJIklCTSBMQU4gQWRhcHRlci9BIiwKIAlOVUxMCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtdmV0aC5jIGIvZHJpdmVycy9uZXQvaWJtdmV0aC5jCmluZGV4IDU1MjJkNDUuLmIzODhkNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libXZldGguYworKysgYi9kcml2ZXJzL25ldC9pYm12ZXRoLmMKQEAgLTcxMCw3ICs3MTAsNyBAQAogCQkJCVNVUFBPUlRFRF9GSUJSRSk7CiAJY21kLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsIHwgQURWRVJUSVNFRF9BdXRvbmVnIHwKIAkJCQlBRFZFUlRJU0VEX0ZJQlJFKTsKLQljbWQtPnNwZWVkID0gU1BFRURfMTAwMDsKKwlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBTUEVFRF8xMDAwKTsKIAljbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOwogCWNtZC0+cG9ydCA9IFBPUlRfRklCUkU7CiAJY21kLT5waHlfYWRkcmVzcyA9IDA7CkBAIC03MjksNDUgKzcyOSwyNCBAQAogCQlzaXplb2YoaW5mby0+dmVyc2lvbikgLSAxKTsKIH0KIAotc3RhdGljIHZvaWQgaWJtdmV0aF9zZXRfcnhfY3N1bV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3N0YXRpYyB1MzIgaWJtdmV0aF9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZlYXR1cmVzKQogewotCXN0cnVjdCBpYm12ZXRoX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCS8qCisJICogU2luY2UgdGhlIGlibXZldGggZmlybXdhcmUgaW50ZXJmYWNlIGRvZXMgbm90IGhhdmUgdGhlCisJICogY29uY2VwdCBvZiBzZXBhcmF0ZSB0eC9yeCBjaGVja3N1bSBvZmZsb2FkIGVuYWJsZSwgaWYgcngKKwkgKiBjaGVja3N1bSBpcyBkaXNhYmxlZCB3ZSBhbHNvIGhhdmUgdG8gZGlzYWJsZSB0eCBjaGVja3N1bQorCSAqIG9mZmxvYWQuIE9uY2Ugd2UgZGlzYWJsZSByeCBjaGVja3N1bSBvZmZsb2FkLCB3ZSBhcmUgbm8KKwkgKiBsb25nZXIgYWxsb3dlZCB0byBzZW5kIHR4IGJ1ZmZlcnMgdGhhdCBhcmUgbm90IHByb3Blcmx5CisJICogY2hlY2tzdW1tZWQuCisJICovCiAKLQlpZiAoZGF0YSkgewotCQlhZGFwdGVyLT5yeF9jc3VtID0gMTsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBTaW5jZSB0aGUgaWJtdmV0aCBmaXJtd2FyZSBpbnRlcmZhY2UgZG9lcyBub3QgaGF2ZSB0aGUKLQkJICogY29uY2VwdCBvZiBzZXBhcmF0ZSB0eC9yeCBjaGVja3N1bSBvZmZsb2FkIGVuYWJsZSwgaWYgcngKLQkJICogY2hlY2tzdW0gaXMgZGlzYWJsZWQgd2UgYWxzbyBoYXZlIHRvIGRpc2FibGUgdHggY2hlY2tzdW0KLQkJICogb2ZmbG9hZC4gT25jZSB3ZSBkaXNhYmxlIHJ4IGNoZWNrc3VtIG9mZmxvYWQsIHdlIGFyZSBubwotCQkgKiBsb25nZXIgYWxsb3dlZCB0byBzZW5kIHR4IGJ1ZmZlcnMgdGhhdCBhcmUgbm90IHByb3Blcmx5Ci0JCSAqIGNoZWNrc3VtbWVkLgotCQkgKi8KLQkJYWRhcHRlci0+cnhfY3N1bSA9IDA7Ci0JCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfSVBfQ1NVTTsKLQkJZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9JUFY2X0NTVU07Ci0JfQorCWlmICghKGZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pKQorCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9BTExfQ1NVTTsKKworCXJldHVybiBmZWF0dXJlczsKIH0KIAotc3RhdGljIHZvaWQgaWJtdmV0aF9zZXRfdHhfY3N1bV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgaWJtdmV0aF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmIChkYXRhKSB7Ci0JCWlmIChhZGFwdGVyLT5md19pcHY0X2NzdW1fc3VwcG9ydCkKLQkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNOwotCQlpZiAoYWRhcHRlci0+ZndfaXB2Nl9jc3VtX3N1cHBvcnQpCi0JCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBWNl9DU1VNOwotCQlhZGFwdGVyLT5yeF9jc3VtID0gMTsKLQl9IGVsc2UgewotCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0lQX0NTVU07Ci0JCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfSVBWNl9DU1VNOwotCX0KLX0KLQotc3RhdGljIGludCBpYm12ZXRoX3NldF9jc3VtX29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEsCi0JCQkJICAgIHZvaWQgKCpkb25lKSAoc3RydWN0IG5ldF9kZXZpY2UgKiwgdTMyKSkKK3N0YXRpYyBpbnQgaWJtdmV0aF9zZXRfY3N1bV9vZmZsb2FkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQogewogCXN0cnVjdCBpYm12ZXRoX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgc2V0X2F0dHIsIGNscl9hdHRyLCByZXRfYXR0cjsKQEAgLTgyNyw4ICs4MDYsOCBAQAogCQl9IGVsc2UKIAkJCWFkYXB0ZXItPmZ3X2lwdjZfY3N1bV9zdXBwb3J0ID0gZGF0YTsKIAotCQlpZiAocmV0ID09IEhfU1VDQ0VTUyB8fCByZXQ2ID09IEhfU1VDQ0VTUykKLQkJCWRvbmUoZGV2LCBkYXRhKTsKKwkJaWYgKHJldCAhPSBIX1NVQ0NFU1MgfHwgcmV0NiAhPSBIX1NVQ0NFU1MpCisJCQlhZGFwdGVyLT5yeF9jc3VtID0gZGF0YTsKIAkJZWxzZQogCQkJcmMxID0gLUVJTzsKIAl9IGVsc2UgewpAQCAtODQ0LDQxICs4MjMsMjIgQEAKIAlyZXR1cm4gcmMxID8gcmMxIDogcmMyOwogfQogCi1zdGF0aWMgaW50IGlibXZldGhfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCitzdGF0aWMgaW50IGlibXZldGhfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKIHsKIAlzdHJ1Y3QgaWJtdmV0aF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgcnhfY3N1bSA9ICEhKGZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pOworCWludCByYzsKIAotCWlmICgoZGF0YSAmJiBhZGFwdGVyLT5yeF9jc3VtKSB8fCAoIWRhdGEgJiYgIWFkYXB0ZXItPnJ4X2NzdW0pKQorCWlmIChyeF9jc3VtID09IGFkYXB0ZXItPnJ4X2NzdW0pCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIGlibXZldGhfc2V0X2NzdW1fb2ZmbG9hZChkZXYsIGRhdGEsIGlibXZldGhfc2V0X3J4X2NzdW1fZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IGlibXZldGhfc2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IGlibXZldGhfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IHJjID0gMDsKLQotCWlmIChkYXRhICYmIChkZXYtPmZlYXR1cmVzICYgKE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNKSkpCi0JCXJldHVybiAwOwotCWlmICghZGF0YSAmJiAhKGRldi0+ZmVhdHVyZXMgJiAoTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU0pKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoZGF0YSAmJiAhYWRhcHRlci0+cnhfY3N1bSkKLQkJcmMgPSBpYm12ZXRoX3NldF9jc3VtX29mZmxvYWQoZGV2LCBkYXRhLAotCQkJCQkgICAgICBpYm12ZXRoX3NldF90eF9jc3VtX2ZsYWdzKTsKLQllbHNlCi0JCWlibXZldGhfc2V0X3R4X2NzdW1fZmxhZ3MoZGV2LCBkYXRhKTsKKwlyYyA9IGlibXZldGhfc2V0X2NzdW1fb2ZmbG9hZChkZXYsIHJ4X2NzdW0pOworCWlmIChyYyAmJiAhYWRhcHRlci0+cnhfY3N1bSkKKwkJZGV2LT5mZWF0dXJlcyA9IGZlYXR1cmVzICYgfihORVRJRl9GX0FMTF9DU1VNIHwgTkVUSUZfRl9SWENTVU0pOwogCiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgdTMyIGlibXZldGhfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaWJtdmV0aF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gYWRhcHRlci0+cnhfY3N1bTsKLX0KLQogc3RhdGljIHZvaWQgaWJtdmV0aF9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSkKIHsKIAlpbnQgaTsKQEAgLTkxNCwxMyArODc0LDkgQEAKIAkuZ2V0X2RydmluZm8JCT0gbmV0ZGV2X2dldF9kcnZpbmZvLAogCS5nZXRfc2V0dGluZ3MJCT0gbmV0ZGV2X2dldF9zZXR0aW5ncywKIAkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKLQkuc2V0X3R4X2NzdW0JCT0gaWJtdmV0aF9zZXRfdHhfY3N1bSwKLQkuZ2V0X3J4X2NzdW0JCT0gaWJtdmV0aF9nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0JCT0gaWJtdmV0aF9zZXRfcnhfY3N1bSwKIAkuZ2V0X3N0cmluZ3MJCT0gaWJtdmV0aF9nZXRfc3RyaW5ncywKIAkuZ2V0X3NzZXRfY291bnQJCT0gaWJtdmV0aF9nZXRfc3NldF9jb3VudCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMJPSBpYm12ZXRoX2dldF9ldGh0b29sX3N0YXRzLAotCS5zZXRfc2cJCQk9IGV0aHRvb2xfb3Bfc2V0X3NnLAogfTsKIAogc3RhdGljIGludCBpYm12ZXRoX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQpAQCAtMTM0NSw2ICsxMzAxLDggQEAKIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IGlibXZldGhfc2V0X211bHRpY2FzdF9saXN0LAogCS5uZG9fZG9faW9jdGwJCT0gaWJtdmV0aF9pb2N0bCwKIAkubmRvX2NoYW5nZV9tdHUJCT0gaWJtdmV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fZml4X2ZlYXR1cmVzCT0gaWJtdmV0aF9maXhfZmVhdHVyZXMsCisJLm5kb19zZXRfZmVhdHVyZXMJPSBpYm12ZXRoX3NldF9mZWF0dXJlcywKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGV0aF9tYWNfYWRkciwKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgpAQCAtMTQxMiw3ICsxMzcwLDkgQEAKIAluZXRkZXYtPm5ldGRldl9vcHMgPSAmaWJtdmV0aF9uZXRkZXZfb3BzOwogCW5ldGRldi0+ZXRodG9vbF9vcHMgPSAmbmV0ZGV2X2V0aHRvb2xfb3BzOwogCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJmRldi0+ZGV2KTsKLQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0c7CisJbmV0ZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX1JYQ1NVTSB8CisJCU5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNOworCW5ldGRldi0+ZmVhdHVyZXMgfD0gbmV0ZGV2LT5od19mZWF0dXJlczsKIAogCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCAmYWRhcHRlci0+bWFjX2FkZHIsIG5ldGRldi0+YWRkcl9sZW4pOwogCkBAIC0xNDM3LDcgKzEzOTcsNyBAQAogCiAJbmV0ZGV2X2RiZyhuZXRkZXYsICJyZWdpc3RlcmluZyBuZXRkZXYuLi5cbiIpOwogCi0JaWJtdmV0aF9zZXRfY3N1bV9vZmZsb2FkKG5ldGRldiwgMSwgaWJtdmV0aF9zZXRfdHhfY3N1bV9mbGFncyk7CisJaWJtdmV0aF9zZXRfZmVhdHVyZXMobmV0ZGV2LCBuZXRkZXYtPmZlYXR1cmVzKTsKIAogCXJjID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lmYi5jIGIvZHJpdmVycy9uZXQvaWZiLmMKaW5kZXggZTA3ZDQ4Ny4uNGZlY2FlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWZiLmMKKysrIGIvZHJpdmVycy9uZXQvaWZiLmMKQEAgLTIzMywxMCArMjMzLDYgQEAKIAlpZiAoIWRldl9pZmIpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZXJyID0gZGV2X2FsbG9jX25hbWUoZGV2X2lmYiwgZGV2X2lmYi0+bmFtZSk7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gZXJyOwotCiAJZGV2X2lmYi0+cnRubF9saW5rX29wcyA9ICZpZmJfbGlua19vcHM7CiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldl9pZmIpOwogCWlmIChlcnIgPCAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmMgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYwppbmRleCA2YjI1NmMyLi4wZjU2M2M4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYwpAQCAtMjQ0LDYgKzI0NCwxNCBAQAogCSAqLwogCXNpemUgKz0gTlZNX1dPUkRfU0laRV9CQVNFX1NISUZUOwogCisJLyoKKwkgKiBDaGVjayBmb3IgaW52YWxpZCBzaXplCisJICovCisJaWYgKChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzYpICYmIChzaXplID4gMTUpKSB7CisJCXByaW50aygiaWdiOiBUaGUgTlZNIHNpemUgaXMgbm90IHZhbGlkLCAiCisJCQkiZGVmYXVsdGluZyB0byAzMksuXG4iKTsKKwkJc2l6ZSA9IDE1OworCX0KIAludm0tPndvcmRfc2l6ZSA9IDEgPDwgc2l6ZTsKIAlpZiAobnZtLT53b3JkX3NpemUgPT0gKDEgPDwgMTUpKQogCQludm0tPnBhZ2Vfc2l6ZSA9IDEyODsKQEAgLTE4NzcsNyArMTg4NSw3IEBACiAJfQogCiAJaWYgKG52bV9kYXRhICYgTlZNX0NPTVBBVElCSUxJVFlfQklUX01BU0spIHsKLQkJLyogaWYgY2hla2NzdW1zIGNvbXBhdGliaWxpdHkgYml0IGlzIHNldCB2YWxpZGF0ZSBjaGVja3N1bXMKKwkJLyogaWYgY2hlY2tzdW1zIGNvbXBhdGliaWxpdHkgYml0IGlzIHNldCB2YWxpZGF0ZSBjaGVja3N1bXMKIAkJICogZm9yIGFsbCA0IHBvcnRzLiAqLwogCQllZXByb21fcmVnaW9uc19jb3VudCA9IDQ7CiAJfQpAQCAtMTk4OCw2ICsxOTk2LDcgQEAKIG91dDoKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KKwogLyoqCiAgKiAgaWdiX3NldF9lZWVfaTM1MCAtIEVuYWJsZS9kaXNhYmxlIEVFRSBzdXBwb3J0CiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9pZ2IuaCBiL2RyaXZlcnMvbmV0L2lnYi9pZ2IuaAppbmRleCAxYzY4N2UyLi5mNGZhNGIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiLmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2lnYi5oCkBAIC0zNjAsNyArMzYwLDcgQEAKIGV4dGVybiB2b2lkIGlnYl9kb3duKHN0cnVjdCBpZ2JfYWRhcHRlciAqKTsKIGV4dGVybiB2b2lkIGlnYl9yZWluaXRfbG9ja2VkKHN0cnVjdCBpZ2JfYWRhcHRlciAqKTsKIGV4dGVybiB2b2lkIGlnYl9yZXNldChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKik7Ci1leHRlcm4gaW50IGlnYl9zZXRfc3BkX2RwbHgoc3RydWN0IGlnYl9hZGFwdGVyICosIHUxNik7CitleHRlcm4gaW50IGlnYl9zZXRfc3BkX2RwbHgoc3RydWN0IGlnYl9hZGFwdGVyICosIHUzMiwgdTgpOwogZXh0ZXJuIGludCBpZ2Jfc2V0dXBfdHhfcmVzb3VyY2VzKHN0cnVjdCBpZ2JfcmluZyAqKTsKIGV4dGVybiBpbnQgaWdiX3NldHVwX3J4X3Jlc291cmNlcyhzdHJ1Y3QgaWdiX3JpbmcgKik7CiBleHRlcm4gdm9pZCBpZ2JfZnJlZV90eF9yZXNvdXJjZXMoc3RydWN0IGlnYl9yaW5nICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYwppbmRleCBkOTc2NzMzLi5mZGM4OTVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYwpAQCAtMTc4LDExICsxNzgsMTEgQEAKIAogCQlpZiAoKHN0YXR1cyAmIEUxMDAwX1NUQVRVU19TUEVFRF8xMDAwKSB8fAogCQkgICAgaHctPnBoeS5tZWRpYV90eXBlICE9IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKQotCQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDAwOworCQkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIFNQRUVEXzEwMDApOwogCQllbHNlIGlmIChzdGF0dXMgJiBFMTAwMF9TVEFUVVNfU1BFRURfMTAwKQotCQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDA7CisJCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgU1BFRURfMTAwKTsKIAkJZWxzZQotCQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDsKKwkJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBTUEVFRF8xMCk7CiAKIAkJaWYgKChzdGF0dXMgJiBFMTAwMF9TVEFUVVNfRkQpIHx8CiAJCSAgICBody0+cGh5Lm1lZGlhX3R5cGUgIT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpCkBAIC0xOTAsNyArMTkwLDcgQEAKIAkJZWxzZQogCQkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7CiAJfSBlbHNlIHsKLQkJZWNtZC0+c3BlZWQgPSAtMTsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIC0xKTsKIAkJZWNtZC0+ZHVwbGV4ID0gLTE7CiAJfQogCkBAIC0yMjMsNyArMjIzLDggQEAKIAkJaWYgKGFkYXB0ZXItPmZjX2F1dG9uZWcpCiAJCQlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBlMTAwMF9mY19kZWZhdWx0OwogCX0gZWxzZSB7Ci0JCWlmIChpZ2Jfc2V0X3NwZF9kcGx4KGFkYXB0ZXIsIGVjbWQtPnNwZWVkICsgZWNtZC0+ZHVwbGV4KSkgeworCQl1MzIgc3BlZWQgPSBldGh0b29sX2NtZF9zcGVlZChlY21kKTsKKwkJaWYgKGlnYl9zZXRfc3BkX2RwbHgoYWRhcHRlciwgc3BlZWQsIGVjbWQtPmR1cGxleCkpIHsKIAkJCWNsZWFyX2JpdChfX0lHQl9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtMTk2MywyNyArMTk2NCwyOCBAQAogLyogYml0IGRlZmluZXMgZm9yIGFkYXB0ZXItPmxlZF9zdGF0dXMgKi8KICNkZWZpbmUgSUdCX0xFRF9PTgkJMAogCi1zdGF0aWMgaW50IGlnYl9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQorc3RhdGljIGludCBpZ2Jfc2V0X3BoeXNfaWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgIGVudW0gZXRodG9vbF9waHlzX2lkX3N0YXRlIHN0YXRlKQogewogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAKLQl0aW1lb3V0ID0gZGF0YSAqIDEwMDA7Ci0KLQkvKgotCSAqICBtc2xlZXBfaW50ZXJydXB0YWJsZSBvbmx5IGFjY2VwdHMgdW5zaWduZWQgaW50IHNvIHdlIGFyZSBsaW1pdGVkCi0JICogaW4gaG93IGxvbmcgYSBkdXJhdGlvbiB3ZSBjYW4gd2FpdAotCSAqLwotCWlmICghdGltZW91dCB8fCB0aW1lb3V0ID4gVUlOVF9NQVgpCi0JCXRpbWVvdXQgPSBVSU5UX01BWDsKLQotCWlnYl9ibGlua19sZWQoaHcpOwotCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKHRpbWVvdXQpOwotCi0JaWdiX2xlZF9vZmYoaHcpOwotCWNsZWFyX2JpdChJR0JfTEVEX09OLCAmYWRhcHRlci0+bGVkX3N0YXR1cyk7Ci0JaWdiX2NsZWFudXBfbGVkKGh3KTsKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBFVEhUT09MX0lEX0FDVElWRToKKwkJaWdiX2JsaW5rX2xlZChodyk7CisJCXJldHVybiAyOworCWNhc2UgRVRIVE9PTF9JRF9PTjoKKwkJaWdiX2JsaW5rX2xlZChodyk7CisJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9JRF9PRkY6CisJCWlnYl9sZWRfb2ZmKGh3KTsKKwkJYnJlYWs7CisJY2FzZSBFVEhUT09MX0lEX0lOQUNUSVZFOgorCQlpZ2JfbGVkX29mZihodyk7CisJCWNsZWFyX2JpdChJR0JfTEVEX09OLCAmYWRhcHRlci0+bGVkX3N0YXR1cyk7CisJCWlnYl9jbGVhbnVwX2xlZChodyk7CisJCWJyZWFrOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMjIxNSw3ICsyMjE3LDcgQEAKIAkuc2V0X3RzbyAgICAgICAgICAgICAgICA9IGlnYl9zZXRfdHNvLAogCS5zZWxmX3Rlc3QgICAgICAgICAgICAgID0gaWdiX2RpYWdfdGVzdCwKIAkuZ2V0X3N0cmluZ3MgICAgICAgICAgICA9IGlnYl9nZXRfc3RyaW5ncywKLQkucGh5c19pZCAgICAgICAgICAgICAgICA9IGlnYl9waHlzX2lkLAorCS5zZXRfcGh5c19pZCAgICAgICAgICAgID0gaWdiX3NldF9waHlzX2lkLAogCS5nZXRfc3NldF9jb3VudCAgICAgICAgID0gaWdiX2dldF9zc2V0X2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cyAgICAgID0gaWdiX2dldF9ldGh0b29sX3N0YXRzLAogCS5nZXRfY29hbGVzY2UgICAgICAgICAgID0gaWdiX2dldF9jb2FsZXNjZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKaW5kZXggMGRmZDFiOS4uMThmY2NmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogI2luY2x1ZGUgPGxpbnV4L2Flci5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaWZkZWYgQ09ORklHX0lHQl9EQ0EKICNpbmNsdWRlIDxsaW51eC9kY2EuaD4KICNlbmRpZgpAQCAtMzUzMiw2ICszNTMzLDI1IEBACiAJcmV0dXJuIGxpbmtfYWN0aXZlOwogfQogCitzdGF0aWMgYm9vbCBpZ2JfdGhlcm1hbF9zZW5zb3JfZXZlbnQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIGV2ZW50KQoreworCWJvb2wgcmV0ID0gZmFsc2U7CisJdTMyIGN0cmxfZXh0LCB0aHN0YXQ7CisKKwkvKiBjaGVjayBmb3IgdGhlcm1hbCBzZW5zb3IgZXZlbnQgb24gaTM1MCwgY29wcGVyIG9ubHkgKi8KKwlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwX2kzNTApIHsKKwkJdGhzdGF0ID0gcmQzMihFMTAwMF9USFNUQVQpOworCQljdHJsX2V4dCA9IHJkMzIoRTEwMDBfQ1RSTF9FWFQpOworCisJCWlmICgoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSAmJgorCQkgICAgIShjdHJsX2V4dCAmIEUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9TR01JSSkpIHsKKwkJCXJldCA9ICEhKHRoc3RhdCAmIGV2ZW50KTsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKIC8qKgogICogaWdiX3dhdGNoZG9nIC0gVGltZXIgQ2FsbC1iYWNrCiAgKiBAZGF0YTogcG9pbnRlciB0byBhZGFwdGVyIGNhc3QgaW50byBhbiB1bnNpZ25lZCBsb25nCkBAIC0zNTUwLDcgKzM1NzAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2F0Y2hkb2dfdGFzayk7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwotCXUzMiBsaW5rLCBjdHJsX2V4dCwgdGhzdGF0OworCXUzMiBsaW5rOwogCWludCBpOwogCiAJbGluayA9IGlnYl9oYXNfbGluayhhZGFwdGVyKTsKQEAgLTM1NzQsMjUgKzM1OTQsMTQgQEAKIAkJCSAgICAgICAoKGN0cmwgJiBFMTAwMF9DVFJMX1JGQ0UpID8gICJSWCIgOgogCQkJICAgICAgICgoY3RybCAmIEUxMDAwX0NUUkxfVEZDRSkgPyAgIlRYIiA6ICJOb25lIikpKTsKIAotCQkJLyogY2hlY2sgZm9yIHRoZXJtYWwgc2Vuc29yIGV2ZW50IG9uIGkzNTAsCi0JCQkgKiBjb3BwZXIgb25seSAqLwotCQkJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9pMzUwKSB7Ci0JCQkJdGhzdGF0ID0gcmQzMihFMTAwMF9USFNUQVQpOwotCQkJCWN0cmxfZXh0ID0gcmQzMihFMTAwMF9DVFJMX0VYVCk7Ci0JCQkJaWYgKChody0+cGh5Lm1lZGlhX3R5cGUgPT0KLQkJCQkgICAgIGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSAmJiAhKGN0cmxfZXh0ICYKLQkJCQkgICAgIEUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9TR01JSSkpIHsKLQkJCQkJaWYgKHRoc3RhdCAmCi0JCQkJCSAgICBFMTAwMF9USFNUQVRfTElOS19USFJPVFRMRSkgewotCQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiaWdiOiAlcyBUaGUgIgotCQkJCQkJICAgICAgICJuZXR3b3JrIGFkYXB0ZXIgbGluayAiCi0JCQkJCQkgICAgICAgInNwZWVkIHdhcyBkb3duc2hpZnRlZCAiCi0JCQkJCQkgICAgICAgImJlY2F1c2UgaXQgIgotCQkJCQkJICAgICAgICJvdmVyaGVhdGVkLlxuIiwKLQkJCQkJCSAgICAgICBuZXRkZXYtPm5hbWUpOwotCQkJCQl9Ci0JCQkJfQorCQkJLyogY2hlY2sgZm9yIHRoZXJtYWwgc2Vuc29yIGV2ZW50ICovCisJCQlpZiAoaWdiX3RoZXJtYWxfc2Vuc29yX2V2ZW50KGh3LCBFMTAwMF9USFNUQVRfTElOS19USFJPVFRMRSkpIHsKKwkJCQlwcmludGsoS0VSTl9JTkZPICJpZ2I6ICVzIFRoZSBuZXR3b3JrIGFkYXB0ZXIgIgorCQkJCQkJICJsaW5rIHNwZWVkIHdhcyBkb3duc2hpZnRlZCAiCisJCQkJCQkgImJlY2F1c2UgaXQgb3ZlcmhlYXRlZC5cbiIsCisJCQkJCQkgbmV0ZGV2LT5uYW1lKTsKIAkJCX0KKwogCQkJLyogYWRqdXN0IHRpbWVvdXQgZmFjdG9yIGFjY29yZGluZyB0byBzcGVlZC9kdXBsZXggKi8KIAkJCWFkYXB0ZXItPnR4X3RpbWVvdXRfZmFjdG9yID0gMTsKIAkJCXN3aXRjaCAoYWRhcHRlci0+bGlua19zcGVlZCkgewpAQCAtMzYxOCwyMiArMzYyNywxNSBAQAogCQlpZiAobmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CiAJCQlhZGFwdGVyLT5saW5rX3NwZWVkID0gMDsKIAkJCWFkYXB0ZXItPmxpbmtfZHVwbGV4ID0gMDsKLQkJCS8qIGNoZWNrIGZvciB0aGVybWFsIHNlbnNvciBldmVudCBvbiBpMzUwCi0JCQkgKiBjb3BwZXIgb25seSovCi0JCQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwX2kzNTApIHsKLQkJCQl0aHN0YXQgPSByZDMyKEUxMDAwX1RIU1RBVCk7Ci0JCQkJY3RybF9leHQgPSByZDMyKEUxMDAwX0NUUkxfRVhUKTsKLQkJCQlpZiAoKGh3LT5waHkubWVkaWFfdHlwZSA9PQotCQkJCSAgICAgZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpICYmICEoY3RybF9leHQgJgotCQkJCSAgICAgRTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX1NHTUlJKSkgewotCQkJCQlpZiAodGhzdGF0ICYgRTEwMDBfVEhTVEFUX1BXUl9ET1dOKSB7Ci0JCQkJCQlwcmludGsoS0VSTl9FUlIgImlnYjogJXMgVGhlICIKLQkJCQkJCSJuZXR3b3JrIGFkYXB0ZXIgd2FzIHN0b3BwZWQgIgotCQkJCQkJImJlY2F1c2UgaXQgb3ZlcmhlYXRlZC5cbiIsCisKKwkJCS8qIGNoZWNrIGZvciB0aGVybWFsIHNlbnNvciBldmVudCAqLworCQkJaWYgKGlnYl90aGVybWFsX3NlbnNvcl9ldmVudChodywgRTEwMDBfVEhTVEFUX1BXUl9ET1dOKSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiaWdiOiAlcyBUaGUgbmV0d29yayBhZGFwdGVyICIKKwkJCQkJCSJ3YXMgc3RvcHBlZCBiZWNhdXNlIGl0ICIKKwkJCQkJCSJvdmVyaGVhdGVkLlxuIiwKIAkJCQkJCW5ldGRldi0+bmFtZSk7Ci0JCQkJCX0KLQkJCQl9CiAJCQl9CisKIAkJCS8qIExpbmtzIHN0YXR1cyBtZXNzYWdlIG11c3QgZm9sbG93IHRoaXMgZm9ybWF0ICovCiAJCQlwcmludGsoS0VSTl9JTkZPICJpZ2I6ICVzIE5JQyBMaW5rIGlzIERvd25cbiIsCiAJCQkgICAgICAgbmV0ZGV2LT5uYW1lKTsKQEAgLTYzNDgsMjEgKzYzNTAsMjUgQEAKIAl9CiB9CiAKLWludCBpZ2Jfc2V0X3NwZF9kcGx4KHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgdTE2IHNwZGRwbHgpCitpbnQgaWdiX3NldF9zcGRfZHBseChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBzcGQsIHU4IGRwbHgpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCXN0cnVjdCBlMTAwMF9tYWNfaW5mbyAqbWFjID0gJmFkYXB0ZXItPmh3Lm1hYzsKIAogCW1hYy0+YXV0b25lZyA9IDA7CiAKKwkvKiBNYWtlIHN1cmUgZHBseCBpcyBhdCBtb3N0IDEgYml0IGFuZCBsc2Igb2Ygc3BlZWQgaXMgbm90IHNldAorCSAqIGZvciB0aGUgc3dpdGNoKCkgYmVsb3cgdG8gd29yayAqLworCWlmICgoc3BkICYgMSkgfHwgKGRwbHggJiB+MSkpCisJCWdvdG8gZXJyX2ludmFsOworCiAJLyogRmliZXIgTklDJ3Mgb25seSBhbGxvdyAxMDAwIEdicHMgRnVsbCBkdXBsZXggKi8KIAlpZiAoKGFkYXB0ZXItPmh3LnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSAmJgotCQlzcGRkcGx4ICE9IChTUEVFRF8xMDAwICsgRFVQTEVYX0ZVTEwpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuc3VwcG9ydGVkIFNwZWVkL0R1cGxleCBjb25maWd1cmF0aW9uXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCSAgICBzcGQgIT0gU1BFRURfMTAwMCAmJgorCSAgICBkcGx4ICE9IERVUExFWF9GVUxMKQorCQlnb3RvIGVycl9pbnZhbDsKIAotCXN3aXRjaCAoc3BkZHBseCkgeworCXN3aXRjaCAoc3BkICsgZHBseCkgewogCWNhc2UgU1BFRURfMTAgKyBEVVBMRVhfSEFMRjoKIAkJbWFjLT5mb3JjZWRfc3BlZWRfZHVwbGV4ID0gQURWRVJUSVNFXzEwX0hBTEY7CiAJCWJyZWFrOwpAQCAtNjM4MSwxMCArNjM4NywxMyBAQAogCQlicmVhazsKIAljYXNlIFNQRUVEXzEwMDAgKyBEVVBMRVhfSEFMRjogLyogbm90IHN1cHBvcnRlZCAqLwogCWRlZmF1bHQ6Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuc3VwcG9ydGVkIFNwZWVkL0R1cGxleCBjb25maWd1cmF0aW9uXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gZXJyX2ludmFsOwogCX0KIAlyZXR1cm4gMDsKKworZXJyX2ludmFsOgorCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuc3VwcG9ydGVkIFNwZWVkL0R1cGxleCBjb25maWd1cmF0aW9uXG4iKTsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIGludCBfX2lnYl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCAqZW5hYmxlX3dha2UpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2J2Zi9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9pZ2J2Zi9ldGh0b29sLmMKaW5kZXggMWQ5NDNhYS4uYjBiMTRkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdidmYvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYnZmL2V0aHRvb2wuYwpAQCAtOTAsMTggKzkwLDE4IEBACiAJc3RhdHVzID0gZXIzMihTVEFUVVMpOwogCWlmIChzdGF0dXMgJiBFMTAwMF9TVEFUVVNfTFUpIHsKIAkJaWYgKHN0YXR1cyAmIEUxMDAwX1NUQVRVU19TUEVFRF8xMDAwKQotCQkJZWNtZC0+c3BlZWQgPSAxMDAwOworCQkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIFNQRUVEXzEwMDApOwogCQllbHNlIGlmIChzdGF0dXMgJiBFMTAwMF9TVEFUVVNfU1BFRURfMTAwKQotCQkJZWNtZC0+c3BlZWQgPSAxMDA7CisJCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgU1BFRURfMTAwKTsKIAkJZWxzZQotCQkJZWNtZC0+c3BlZWQgPSAxMDsKKwkJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBTUEVFRF8xMCk7CiAKIAkJaWYgKHN0YXR1cyAmIEUxMDAwX1NUQVRVU19GRCkKIAkJCWVjbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOwogCQllbHNlCiAJCQllY21kLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKIAl9IGVsc2UgewotCQllY21kLT5zcGVlZCA9IC0xOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgLTEpOwogCQllY21kLT5kdXBsZXggPSAtMTsKIAl9CiAKQEAgLTM5MSwxMSArMzkxLDYgQEAKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CiAKLXN0YXRpYyBpbnQgaWdidmZfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBpZ2J2Zl9nZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICplYykKIHsKQEAgLTUyNyw3ICs1MjIsNiBAQAogCS5zZWxmX3Rlc3QJCT0gaWdidmZfZGlhZ190ZXN0LAogCS5nZXRfc3NldF9jb3VudAkJPSBpZ2J2Zl9nZXRfc3NldF9jb3VudCwKIAkuZ2V0X3N0cmluZ3MJCT0gaWdidmZfZ2V0X3N0cmluZ3MsCi0JLnBoeXNfaWQJCT0gaWdidmZfcGh5c19pZCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMJPSBpZ2J2Zl9nZXRfZXRodG9vbF9zdGF0cywKIAkuZ2V0X2NvYWxlc2NlCQk9IGlnYnZmX2dldF9jb2FsZXNjZSwKIAkuc2V0X2NvYWxlc2NlCQk9IGlnYnZmX3NldF9jb2FsZXNjZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYnZmL25ldGRldi5jIGIvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMKaW5kZXggMWQwNGNhNi4uMWM3N2ZiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9taWkuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKICNpbmNsdWRlICJpZ2J2Zi5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pb2MzLWV0aC5jIGIvZHJpdmVycy9uZXQvaW9jMy1ldGguYwppbmRleCBjOGVlOGQyLi45NmM5NTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pb2MzLWV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2lvYzMtZXRoLmMKQEAgLTkwLDggKzkwLDYgQEAKIAl1MzIgZW1jciwgZWhhcl9oLCBlaGFyX2w7CiAJc3BpbmxvY2tfdCBpb2MzX2xvY2s7CiAJc3RydWN0IG1paV9pZl9pbmZvIG1paTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotI2RlZmluZSBJT0MzX0ZMQUdfUlhfQ0hFQ0tTVU1TCTEKIAogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCkBAIC02MDksNyArNjA3LDcgQEAKIAkJCQlnb3RvIG5leHQ7CiAJCQl9CiAKLQkJCWlmIChsaWtlbHkoaXAtPmZsYWdzICYgSU9DM19GTEFHX1JYX0NIRUNLU1VNUykpCisJCQlpZiAobGlrZWx5KGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkpCiAJCQkJaW9jM190Y3B1ZHBfY2hlY2tzdW0oc2tiLAogCQkJCQl3MCAmIEVSWEJVRl9JUENLU1VNX01BU0ssIGxlbik7CiAKQEAgLTEzMjgsNiArMTMyNiw3IEBACiAJZGV2LT53YXRjaGRvZ190aW1lbwk9IDUgKiBIWjsKIAlkZXYtPm5ldGRldl9vcHMJCT0gJmlvYzNfbmV0ZGV2X29wczsKIAlkZXYtPmV0aHRvb2xfb3BzCT0gJmlvYzNfZXRodG9vbF9vcHM7CisJZGV2LT5od19mZWF0dXJlcwk9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNOwogCWRldi0+ZmVhdHVyZXMJCT0gTkVUSUZfRl9JUF9DU1VNOwogCiAJc3dfcGh5c2lkMSA9IGlvYzNfbWRpb19yZWFkKGRldiwgaXAtPm1paS5waHlfaWQsIE1JSV9QSFlTSUQxKTsKQEAgLTE2MTgsMzcgKzE2MTcsMTIgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyB1MzIgaW9jM19nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpb2MzX3ByaXZhdGUgKmlwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybiBpcC0+ZmxhZ3MgJiBJT0MzX0ZMQUdfUlhfQ0hFQ0tTVU1TOwotfQotCi1zdGF0aWMgaW50IGlvYzNfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IGlvYzNfcHJpdmF0ZSAqaXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0Jc3Bpbl9sb2NrX2JoKCZpcC0+aW9jM19sb2NrKTsKLQlpZiAoZGF0YSkKLQkJaXAtPmZsYWdzIHw9IElPQzNfRkxBR19SWF9DSEVDS1NVTVM7Ci0JZWxzZQotCQlpcC0+ZmxhZ3MgJj0gfklPQzNfRkxBR19SWF9DSEVDS1NVTVM7Ci0Jc3Bpbl91bmxvY2tfYmgoJmlwLT5pb2MzX2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaW9jM19ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JCT0gaW9jM19nZXRfZHJ2aW5mbywKIAkuZ2V0X3NldHRpbmdzCQk9IGlvYzNfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MJCT0gaW9jM19zZXRfc2V0dGluZ3MsCiAJLm53YXlfcmVzZXQJCT0gaW9jM19ud2F5X3Jlc2V0LAogCS5nZXRfbGluawkJPSBpb2MzX2dldF9saW5rLAotCS5nZXRfcnhfY3N1bQkJPSBpb2MzX2dldF9yeF9jc3VtLAotCS5zZXRfcnhfY3N1bQkJPSBpb2MzX3NldF9yeF9jc3VtLAotCS5nZXRfdHhfY3N1bQkJPSBldGh0b29sX29wX2dldF90eF9jc3VtLAotCS5zZXRfdHhfY3N1bQkJPSBldGh0b29sX29wX3NldF90eF9jc3VtCiB9OwogCiBzdGF0aWMgaW50IGlvYzNfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jIGIvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMKaW5kZXggODgwMGUxZi4uNjliNTcwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMKQEAgLTIyMiwxOSArMjIyLDE5IEBACiBzdGF0aWMgdm9pZCBzbXNjX2lyY2Nfc2lyX3dhaXRfaHdfdHJhbnNtaXR0ZXJfZmluaXNoKHN0cnVjdCBzbXNjX2lyY2NfY2IgKnNlbGYpOwogCiAvKiBQcm9iaW5nICovCi1zdGF0aWMgaW50IF9faW5pdCBzbXNjX2lyY2NfbG9va19mb3JfY2hpcHModm9pZCk7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHNtc2NfY2hpcCAqIF9faW5pdCBzbXNjX2lyY2NfcHJvYmUodW5zaWduZWQgc2hvcnQgY2ZnX2Jhc2UsIHU4IHJlZywgY29uc3Qgc3RydWN0IHNtc2NfY2hpcCAqY2hpcCwgY2hhciAqdHlwZSk7Ci1zdGF0aWMgaW50IF9faW5pdCBzbXNjX3N1cGVyaW9fZmxhdChjb25zdCBzdHJ1Y3Qgc21zY19jaGlwICpjaGlwcywgdW5zaWduZWQgc2hvcnQgY2ZnX2Jhc2UsIGNoYXIgKnR5cGUpOwotc3RhdGljIGludCBfX2luaXQgc21zY19zdXBlcmlvX3BhZ2VkKGNvbnN0IHN0cnVjdCBzbXNjX2NoaXAgKmNoaXBzLCB1bnNpZ25lZCBzaG9ydCBjZmdfYmFzZSwgY2hhciAqdHlwZSk7Ci1zdGF0aWMgaW50IF9faW5pdCBzbXNjX3N1cGVyaW9fZmRjKHVuc2lnbmVkIHNob3J0IGNmZ19iYXNlKTsKLXN0YXRpYyBpbnQgX19pbml0IHNtc2Nfc3VwZXJpb19scGModW5zaWduZWQgc2hvcnQgY2ZnX2Jhc2UpOworc3RhdGljIGludCBzbXNjX2lyY2NfbG9va19mb3JfY2hpcHModm9pZCk7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNtc2NfY2hpcCAqIHNtc2NfaXJjY19wcm9iZSh1bnNpZ25lZCBzaG9ydCBjZmdfYmFzZSwgdTggcmVnLCBjb25zdCBzdHJ1Y3Qgc21zY19jaGlwICpjaGlwLCBjaGFyICp0eXBlKTsKK3N0YXRpYyBpbnQgc21zY19zdXBlcmlvX2ZsYXQoY29uc3Qgc3RydWN0IHNtc2NfY2hpcCAqY2hpcHMsIHVuc2lnbmVkIHNob3J0IGNmZ19iYXNlLCBjaGFyICp0eXBlKTsKK3N0YXRpYyBpbnQgc21zY19zdXBlcmlvX3BhZ2VkKGNvbnN0IHN0cnVjdCBzbXNjX2NoaXAgKmNoaXBzLCB1bnNpZ25lZCBzaG9ydCBjZmdfYmFzZSwgY2hhciAqdHlwZSk7CitzdGF0aWMgaW50IHNtc2Nfc3VwZXJpb19mZGModW5zaWduZWQgc2hvcnQgY2ZnX2Jhc2UpOworc3RhdGljIGludCBzbXNjX3N1cGVyaW9fbHBjKHVuc2lnbmVkIHNob3J0IGNmZ19iYXNlKTsKICNpZmRlZiBDT05GSUdfUENJCi1zdGF0aWMgaW50IF9faW5pdCBwcmVjb25maWd1cmVfc21zY19jaGlwKHN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24gKmNvbmYpOwotc3RhdGljIGludCBfX2luaXQgcHJlY29uZmlndXJlX3Rocm91Z2hfODI4MDEoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiAqY29uZik7Ci1zdGF0aWMgdm9pZCBfX2luaXQgcHJlY29uZmlndXJlX2FsaV9wb3J0KHN0cnVjdCBwY2lfZGV2ICpkZXYsCitzdGF0aWMgaW50IHByZWNvbmZpZ3VyZV9zbXNjX2NoaXAoc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiAqY29uZik7CitzdGF0aWMgaW50IHByZWNvbmZpZ3VyZV90aHJvdWdoXzgyODAxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24gKmNvbmYpOworc3RhdGljIHZvaWQgcHJlY29uZmlndXJlX2FsaV9wb3J0KHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCQkJCSB1bnNpZ25lZCBzaG9ydCBwb3J0KTsKLXN0YXRpYyBpbnQgX19pbml0IHByZWNvbmZpZ3VyZV90aHJvdWdoX2FsaShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3Qgc21zY19pcmNjX3N1YnN5c3RlbV9jb25maWd1cmF0aW9uICpjb25mKTsKLXN0YXRpYyBpbnQgX19pbml0IHNtc2NfaXJjY19wcmVjb25maWd1cmVfc3Vic3lzdGVtcyh1bnNpZ25lZCBzaG9ydCBpcmNjX2NmZywKK3N0YXRpYyBpbnQgcHJlY29uZmlndXJlX3Rocm91Z2hfYWxpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24gKmNvbmYpOworc3RhdGljIGludCBzbXNjX2lyY2NfcHJlY29uZmlndXJlX3N1YnN5c3RlbXModW5zaWduZWQgc2hvcnQgaXJjY19jZmcsCiAJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgaXJjY19maXIsCiAJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgaXJjY19zaXIsCiAJCQkJCQkgICAgdW5zaWduZWQgY2hhciBpcmNjX2RtYSwKQEAgLTM2Niw3ICszNjYsNyBAQAogfQogCiAvKiBQTlAgaG90cGx1ZyBzdXBwb3J0ICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgc21zY19pcmNjX3BucF90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkIHNtc2NfaXJjY19wbnBfdGFibGVbXSBfX2RldmluaXRjb25zdCA9IHsKIAl7IC5pZCA9ICJTTUNmMDEwIiwgLmRyaXZlcl9kYXRhID0gMCB9LAogCS8qIGFuZCBwcmVzdW1hYmx5IG90aGVycyAqLwogCXsgfQpAQCAtNTE1LDcgKzUxNSw3IEBACiAgKiAgICBUcnkgdG8gb3BlbiBkcml2ZXIgaW5zdGFuY2UKICAqCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IHNtc2NfaXJjY19vcGVuKHVuc2lnbmVkIGludCBmaXJfYmFzZSwgdW5zaWduZWQgaW50IHNpcl9iYXNlLCB1OCBkbWEsIHU4IGlycSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNtc2NfaXJjY19vcGVuKHVuc2lnbmVkIGludCBmaXJfYmFzZSwgdW5zaWduZWQgaW50IHNpcl9iYXNlLCB1OCBkbWEsIHU4IGlycSkKIHsKIAlzdHJ1Y3Qgc21zY19pcmNjX2NiICpzZWxmOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC0yMjczLDcgKzIyNzMsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgX19pbml0IHNtc2NfYWNjZXNzKHVuc2lnbmVkIHNob3J0IGNmZ19iYXNlLCB1bnNpZ25lZCBjaGFyIHJlZykKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNtc2NfYWNjZXNzKHVuc2lnbmVkIHNob3J0IGNmZ19iYXNlLCB1bnNpZ25lZCBjaGFyIHJlZykKIHsKIAlJUkRBX0RFQlVHKDEsICIlc1xuIiwgX19mdW5jX18pOwogCkBAIC0yMjgxLDcgKzIyODEsNyBAQAogCXJldHVybiBpbmIoY2ZnX2Jhc2UpICE9IHJlZyA/IC0xIDogMDsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbXNjX2NoaXAgKiBfX2luaXQgc21zY19pcmNjX3Byb2JlKHVuc2lnbmVkIHNob3J0IGNmZ19iYXNlLCB1OCByZWcsIGNvbnN0IHN0cnVjdCBzbXNjX2NoaXAgKmNoaXAsIGNoYXIgKnR5cGUpCitzdGF0aWMgY29uc3Qgc3RydWN0IHNtc2NfY2hpcCAqIF9fZGV2aW5pdCBzbXNjX2lyY2NfcHJvYmUodW5zaWduZWQgc2hvcnQgY2ZnX2Jhc2UsIHU4IHJlZywgY29uc3Qgc3RydWN0IHNtc2NfY2hpcCAqY2hpcCwgY2hhciAqdHlwZSkKIHsKIAl1OCBkZXZpZCwgeGRldmlkLCByZXY7CiAKQEAgLTI0MDYsNyArMjQwNiw3IEBACiAjaWZkZWYgQ09ORklHX1BDSQogI2RlZmluZSBQQ0lJRF9WRU5ET1JfSU5URUwgMHg4MDg2CiAjZGVmaW5lIFBDSUlEX1ZFTkRPUl9BTEkgMHgxMGI5Ci1zdGF0aWMgc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiBzdWJzeXN0ZW1fY29uZmlndXJhdGlvbnNbXSBfX2luaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24gc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb25zW10gX19kZXZpbml0Y29uc3QgPSB7CiAJLyoKIAkgKiBTdWJzeXN0ZW1zIG5lZWRpbmcgZW50cmllczoKIAkgKiAweDEwYjk6MHgxNTMzIDB4MTAzYzoweDA4NTAgSFAgbng5MDEwIGZhbWlseQpAQCAtMjUzMiw3ICsyNTMyLDcgQEAKICAqIChGSVIgcG9ydCwgU0lSIHBvcnQsIEZJUiBETUEsIEZJUiBJUlEpCiAgKiB0aHJvdWdoIHRoZSBjaGlwIGNvbmZpZ3VyYXRpb24gcG9ydC4KICAqLwotc3RhdGljIGludCBfX2luaXQgcHJlY29uZmlndXJlX3Ntc2NfY2hpcChzdHJ1Y3QKK3N0YXRpYyBpbnQgX19kZXZpbml0IHByZWNvbmZpZ3VyZV9zbXNjX2NoaXAoc3RydWN0CiAJCQkJCSBzbXNjX2lyY2Nfc3Vic3lzdGVtX2NvbmZpZ3VyYXRpb24KIAkJCQkJICpjb25mKQogewpAQCAtMjYzMyw3ICsyNjMzLDcgQEAKICAqIG9yIEludGVsIDgyODAxREIvREJMIChJQ0g0L0lDSDQtTCkgTFBDIEludGVyZmFjZSBCcmlkZ2UuCiAgKiBUaGV5IGFsbCB3b3JrIHRoZSBzYW1lIHdheSEKICAqLwotc3RhdGljIGludCBfX2luaXQgcHJlY29uZmlndXJlX3Rocm91Z2hfODI4MDEoc3RydWN0IHBjaV9kZXYgKmRldiwKK3N0YXRpYyBpbnQgX19kZXZpbml0IHByZWNvbmZpZ3VyZV90aHJvdWdoXzgyODAxKHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCQkJCSAgICAgc3RydWN0CiAJCQkJCSAgICAgc21zY19pcmNjX3N1YnN5c3RlbV9jb25maWd1cmF0aW9uCiAJCQkJCSAgICAgKmNvbmYpCkBAIC0yNzg2LDcgKzI3ODYsNyBAQAogICogVGhpcyBpcyBiYXNlZCBvbiByZXZlcnNlLWVuZ2luZWVyaW5nIHNpbmNlIEFMaSBkb2VzIG5vdAogICogcHJvdmlkZSBhbnkgZGF0YSBzaGVldCBmb3IgdGhlIDE1MzMgY2hpcC4KICAqLwotc3RhdGljIHZvaWQgX19pbml0IHByZWNvbmZpZ3VyZV9hbGlfcG9ydChzdHJ1Y3QgcGNpX2RldiAqZGV2LAorc3RhdGljIHZvaWQgX19kZXZpbml0IHByZWNvbmZpZ3VyZV9hbGlfcG9ydChzdHJ1Y3QgcGNpX2RldiAqZGV2LAogCQkJCQkgdW5zaWduZWQgc2hvcnQgcG9ydCkKIHsKIAl1bnNpZ25lZCBjaGFyIHJlZzsKQEAgLTI4MjQsNyArMjgyNCw3IEBACiAJSVJEQV9NRVNTQUdFKCJBY3RpdmF0ZWQgQUxpIDE1MzMgSVNBIGJyaWRnZSBwb3J0IDB4JTA0eC5cbiIsIHBvcnQpOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBwcmVjb25maWd1cmVfdGhyb3VnaF9hbGkoc3RydWN0IHBjaV9kZXYgKmRldiwKK3N0YXRpYyBpbnQgX19kZXZpbml0IHByZWNvbmZpZ3VyZV90aHJvdWdoX2FsaShzdHJ1Y3QgcGNpX2RldiAqZGV2LAogCQkJCQkgICBzdHJ1Y3QKIAkJCQkJICAgc21zY19pcmNjX3N1YnN5c3RlbV9jb25maWd1cmF0aW9uCiAJCQkJCSAgICpjb25mKQpAQCAtMjgzNyw3ICsyODM3LDcgQEAKIAlyZXR1cm4gcHJlY29uZmlndXJlX3Ntc2NfY2hpcChjb25mKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgc21zY19pcmNjX3ByZWNvbmZpZ3VyZV9zdWJzeXN0ZW1zKHVuc2lnbmVkIHNob3J0IGlyY2NfY2ZnLAorc3RhdGljIGludCBfX2RldmluaXQgc21zY19pcmNjX3ByZWNvbmZpZ3VyZV9zdWJzeXN0ZW1zKHVuc2lnbmVkIHNob3J0IGlyY2NfY2ZnLAogCQkJCQkJICAgIHVuc2lnbmVkIHNob3J0IGlyY2NfZmlyLAogCQkJCQkJICAgIHVuc2lnbmVkIHNob3J0IGlyY2Nfc2lyLAogCQkJCQkJICAgIHVuc2lnbmVkIGNoYXIgaXJjY19kbWEsCkBAIC0yODQ5LDcgKzI4NDksNyBAQAogCWludCByZXQgPSAwOwogCiAJZm9yX2VhY2hfcGNpX2RldihkZXYpIHsKLQkJc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiAqY29uZjsKKwkJY29uc3Qgc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiAqY29uZjsKIAogCQkvKgogCQkgKiBDYWNoZSB0aGUgc3Vic3lzdGVtIHZlbmRvci9kZXZpY2U6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiL2l4Z2IuaCBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYi5oCmluZGV4IDhmM2RmMDQuLjQ5ZTg0MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYi5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYi5oCkBAIC0xNTcsOSArMTU3LDYgQEAKIAl1MTYgbGlua19kdXBsZXg7CiAJc3RydWN0IHdvcmtfc3RydWN0IHR4X3RpbWVvdXRfdGFzazsKIAotCXN0cnVjdCB0aW1lcl9saXN0IGJsaW5rX3RpbWVyOwotCXVuc2lnbmVkIGxvbmcgbGVkX3N0YXR1czsKLQogCS8qIFRYICovCiAJc3RydWN0IGl4Z2JfZGVzY19yaW5nIHR4X3JpbmcgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAl1bnNpZ25lZCBpbnQgcmVzdGFydF9xdWV1ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfZXRodG9vbC5jCmluZGV4IGNjNTNhYTEuLjZkYTg5MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX2V0aHRvb2wuYwpAQCAtMTA0LDEwICsxMDQsMTAgQEAKIAllY21kLT50cmFuc2NlaXZlciA9IFhDVlJfRVhURVJOQUw7CiAKIAlpZiAobmV0aWZfY2Fycmllcl9vayhhZGFwdGVyLT5uZXRkZXYpKSB7Ci0JCWVjbWQtPnNwZWVkID0gU1BFRURfMTAwMDA7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBTUEVFRF8xMDAwMCk7CiAJCWVjbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOwogCX0gZWxzZSB7Ci0JCWVjbWQtPnNwZWVkID0gLTE7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCAtMSk7CiAJCWVjbWQtPmR1cGxleCA9IC0xOwogCX0KIApAQCAtMTI5LDkgKzEyOSwxMCBAQAogaXhnYl9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQogewogCXN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXUzMiBzcGVlZCA9IGV0aHRvb2xfY21kX3NwZWVkKGVjbWQpOwogCiAJaWYgKGVjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUgfHwKLQkgICBlY21kLT5zcGVlZCArIGVjbWQtPmR1cGxleCAhPSBTUEVFRF8xMDAwMCArIERVUExFWF9GVUxMKQorCSAgICAoc3BlZWQgKyBlY21kLT5kdXBsZXggIT0gU1BFRURfMTAwMDAgKyBEVVBMRVhfRlVMTCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkgewpAQCAtNjEwLDQ2ICs2MTEsMjQgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0vKiB0b2dnbGUgTEVEIDQgdGltZXMgcGVyIHNlY29uZCA9IDIgImJsaW5rcyIgcGVyIHNlY29uZCAqLwotI2RlZmluZSBJWEdCX0lEX0lOVEVSVkFMCShIWi80KQotCi0vKiBiaXQgZGVmaW5lcyBmb3IgYWRhcHRlci0+bGVkX3N0YXR1cyAqLwotI2RlZmluZSBJWEdCX0xFRF9PTgkJMAotCi1zdGF0aWMgdm9pZAotaXhnYl9sZWRfYmxpbmtfY2FsbGJhY2sodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGl4Z2JfYWRhcHRlciAqKWRhdGE7Ci0KLQlpZiAodGVzdF9hbmRfY2hhbmdlX2JpdChJWEdCX0xFRF9PTiwgJmFkYXB0ZXItPmxlZF9zdGF0dXMpKQotCQlpeGdiX2xlZF9vZmYoJmFkYXB0ZXItPmh3KTsKLQllbHNlCi0JCWl4Z2JfbGVkX29uKCZhZGFwdGVyLT5odyk7Ci0KLQltb2RfdGltZXIoJmFkYXB0ZXItPmJsaW5rX3RpbWVyLCBqaWZmaWVzICsgSVhHQl9JRF9JTlRFUlZBTCk7Ci19Ci0KIHN0YXRpYyBpbnQKLWl4Z2JfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKK2l4Z2Jfc2V0X3BoeXNfaWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSBldGh0b29sX3BoeXNfaWRfc3RhdGUgc3RhdGUpCiB7CiAJc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKLQlpZiAoIWRhdGEpCi0JCWRhdGEgPSBJTlRfTUFYOworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIEVUSFRPT0xfSURfQUNUSVZFOgorCQlyZXR1cm4gMjsKIAotCWlmICghYWRhcHRlci0+YmxpbmtfdGltZXIuZnVuY3Rpb24pIHsKLQkJaW5pdF90aW1lcigmYWRhcHRlci0+YmxpbmtfdGltZXIpOwotCQlhZGFwdGVyLT5ibGlua190aW1lci5mdW5jdGlvbiA9IGl4Z2JfbGVkX2JsaW5rX2NhbGxiYWNrOwotCQlhZGFwdGVyLT5ibGlua190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpYWRhcHRlcjsKKwljYXNlIEVUSFRPT0xfSURfT046CisJCWl4Z2JfbGVkX29uKCZhZGFwdGVyLT5odyk7CisJCWJyZWFrOworCisJY2FzZSBFVEhUT09MX0lEX09GRjoKKwljYXNlIEVUSFRPT0xfSURfSU5BQ1RJVkU6CisJCWl4Z2JfbGVkX29mZigmYWRhcHRlci0+aHcpOwogCX0KIAotCW1vZF90aW1lcigmYWRhcHRlci0+YmxpbmtfdGltZXIsIGppZmZpZXMpOwotCi0JbXNsZWVwX2ludGVycnVwdGlibGUoZGF0YSAqIDEwMDApOwotCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT5ibGlua190aW1lcik7Ci0JaXhnYl9sZWRfb2ZmKCZhZGFwdGVyLT5odyk7Ci0JY2xlYXJfYml0KElYR0JfTEVEX09OLCAmYWRhcHRlci0+bGVkX3N0YXR1cyk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNzY2LDcgKzc0NSw3IEBACiAJLnNldF9tc2dsZXZlbCA9IGl4Z2Jfc2V0X21zZ2xldmVsLAogCS5zZXRfdHNvID0gaXhnYl9zZXRfdHNvLAogCS5nZXRfc3RyaW5ncyA9IGl4Z2JfZ2V0X3N0cmluZ3MsCi0JLnBoeXNfaWQgPSBpeGdiX3BoeXNfaWQsCisJLnNldF9waHlzX2lkID0gaXhnYl9zZXRfcGh5c19pZCwKIAkuZ2V0X3NzZXRfY291bnQgPSBpeGdiX2dldF9zc2V0X2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IGl4Z2JfZ2V0X2V0aHRvb2xfc3RhdHMsCiAJLmdldF9mbGFncyA9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKaW5kZXggMGY2ODFhYy4uNmExMzBlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jCkBAIC0yOCw2ICsyOCw3IEBACiAKICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKIAorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSAiaXhnYi5oIgogCiBjaGFyIGl4Z2JfZHJpdmVyX25hbWVbXSA9ICJpeGdiIjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oCmluZGV4IDhkNDY4MDIuLmU0NjdiMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaApAQCAtMTA2LDYgKzEwNiw3IEBACiAjZGVmaW5lIElYR0JFX01BWF9WRl9GVU5DVElPTlMgICAgICAgICAgNjQKICNkZWZpbmUgSVhHQkVfTUFYX1ZGVEFfRU5UUklFUyAgICAgICAgICAxMjgKICNkZWZpbmUgTUFYX0VNVUxBVElPTl9NQUNfQUREUlMgICAgICAgICAxNgorI2RlZmluZSBJWEdCRV9NQVhfUEZfTUFDVkxBTlMgICAgICAgICAgIDE1CiAjZGVmaW5lIFZNRFFfUChwKSAgICgocCkgKyBhZGFwdGVyLT5udW1fdmZzKQogCiBzdHJ1Y3QgdmZfZGF0YV9zdG9yYWdlIHsKQEAgLTEyMSw2ICsxMjIsMTUgQEAKIAl1MTYgdHhfcmF0ZTsKIH07CiAKK3N0cnVjdCB2Zl9tYWN2bGFucyB7CisJc3RydWN0IGxpc3RfaGVhZCBsOworCWludCB2ZjsKKwlpbnQgcmFyX2VudHJ5OworCWJvb2wgZnJlZTsKKwlib29sIGlzX21hY3ZsYW47CisJdTggdmZfbWFjdmxhbltFVEhfQUxFTl07Cit9OworCiAvKiB3cmFwcGVyIGFyb3VuZCBhIHBvaW50ZXIgdG8gYSBzb2NrZXQgYnVmZmVyLAogICogc28gYSBETUEgaGFuZGxlIGNhbiBiZSBzdG9yZWQgYWxvbmcgd2l0aCB0aGUgYnVmZmVyICovCiBzdHJ1Y3QgaXhnYmVfdHhfYnVmZmVyIHsKQEAgLTMzMSwxMCArMzQxLDUyIEBACiAKIC8qIGJvYXJkIHNwZWNpZmljIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgKi8KIHN0cnVjdCBpeGdiZV9hZGFwdGVyIHsKLQlzdHJ1Y3QgdGltZXJfbGlzdCB3YXRjaGRvZ190aW1lcjsKKwl1bnNpZ25lZCBsb25nIHN0YXRlOworCisJLyogU29tZSBmZWF0dXJlcyBuZWVkIHRyaS1zdGF0ZSBjYXBhYmlsaXR5LAorCSAqIHRodXMgdGhlIGFkZGl0aW9uYWwgKl9DQVBBQkxFIGZsYWdzLgorCSAqLworCXUzMiBmbGFnczsKKyNkZWZpbmUgSVhHQkVfRkxBR19SWF9DU1VNX0VOQUJMRUQgICAgICAgICAgICAgICh1MzIpKDEpCisjZGVmaW5lIElYR0JFX0ZMQUdfTVNJX0NBUEFCTEUgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDEpCisjZGVmaW5lIElYR0JFX0ZMQUdfTVNJX0VOQUJMRUQgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDIpCisjZGVmaW5lIElYR0JFX0ZMQUdfTVNJWF9DQVBBQkxFICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDMpCisjZGVmaW5lIElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDQpCisjZGVmaW5lIElYR0JFX0ZMQUdfUlhfMUJVRl9DQVBBQkxFICAgICAgICAgICAgICAodTMyKSgxIDw8IDYpCisjZGVmaW5lIElYR0JFX0ZMQUdfUlhfUFNfQ0FQQUJMRSAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDcpCisjZGVmaW5lIElYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRCAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDgpCisjZGVmaW5lIElYR0JFX0ZMQUdfSU5fTkVUUE9MTCAgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDkpCisjZGVmaW5lIElYR0JFX0ZMQUdfRENBX0VOQUJMRUQgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDEwKQorI2RlZmluZSBJWEdCRV9GTEFHX0RDQV9DQVBBQkxFICAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAxMSkKKyNkZWZpbmUgSVhHQkVfRkxBR19JTUlSX0VOQUJMRUQgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTIpCisjZGVmaW5lIElYR0JFX0ZMQUdfTVFfQ0FQQUJMRSAgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDEzKQorI2RlZmluZSBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEICAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAxNCkKKyNkZWZpbmUgSVhHQkVfRkxBR19SU1NfRU5BQkxFRCAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTYpCisjZGVmaW5lIElYR0JFX0ZMQUdfUlNTX0NBUEFCTEUgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDE3KQorI2RlZmluZSBJWEdCRV9GTEFHX1ZNRFFfQ0FQQUJMRSAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAxOCkKKyNkZWZpbmUgSVhHQkVfRkxBR19WTURRX0VOQUJMRUQgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTkpCisjZGVmaW5lIElYR0JFX0ZMQUdfRkFOX0ZBSUxfQ0FQQUJMRSAgICAgICAgICAgICAodTMyKSgxIDw8IDIwKQorI2RlZmluZSBJWEdCRV9GTEFHX05FRURfTElOS19VUERBVEUgICAgICAgICAgICAgKHUzMikoMSA8PCAyMikKKyNkZWZpbmUgSVhHQkVfRkxBR19ORUVEX0xJTktfQ09ORklHICAgICAgICAgICAgICh1MzIpKDEgPDwgMjMpCisjZGVmaW5lIElYR0JFX0ZMQUdfRkRJUl9IQVNIX0NBUEFCTEUgICAgICAgICAgICAodTMyKSgxIDw8IDI0KQorI2RlZmluZSBJWEdCRV9GTEFHX0ZESVJfUEVSRkVDVF9DQVBBQkxFICAgICAgICAgKHUzMikoMSA8PCAyNSkKKyNkZWZpbmUgSVhHQkVfRkxBR19GQ09FX0NBUEFCTEUgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMjYpCisjZGVmaW5lIElYR0JFX0ZMQUdfRkNPRV9FTkFCTEVEICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDI3KQorI2RlZmluZSBJWEdCRV9GTEFHX1NSSU9WX0NBUEFCTEUgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAyOCkKKyNkZWZpbmUgSVhHQkVfRkxBR19TUklPVl9FTkFCTEVEICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMjkpCisKKwl1MzIgZmxhZ3MyOworI2RlZmluZSBJWEdCRV9GTEFHMl9SU0NfQ0FQQUJMRSAgICAgICAgICAgICAgICAgKHUzMikoMSkKKyNkZWZpbmUgSVhHQkVfRkxBRzJfUlNDX0VOQUJMRUQgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMSkKKyNkZWZpbmUgSVhHQkVfRkxBRzJfVEVNUF9TRU5TT1JfQ0FQQUJMRSAgICAgICAgICh1MzIpKDEgPDwgMikKKyNkZWZpbmUgSVhHQkVfRkxBRzJfVEVNUF9TRU5TT1JfRVZFTlQgICAgICAgICAgICh1MzIpKDEgPDwgMykKKyNkZWZpbmUgSVhHQkVfRkxBRzJfU0VBUkNIX0ZPUl9TRlAgICAgICAgICAgICAgICh1MzIpKDEgPDwgNCkKKyNkZWZpbmUgSVhHQkVfRkxBRzJfU0ZQX05FRURTX1JFU0VUICAgICAgICAgICAgICh1MzIpKDEgPDwgNSkKKyNkZWZpbmUgSVhHQkVfRkxBRzJfUkVTRVRfUkVRVUVTVEVEICAgICAgICAgICAgICh1MzIpKDEgPDwgNikKKyNkZWZpbmUgSVhHQkVfRkxBRzJfRkRJUl9SRVFVSVJFU19SRUlOSVQgICAgICAgICh1MzIpKDEgPDwgNykKKwogCXVuc2lnbmVkIGxvbmcgYWN0aXZlX3ZsYW5zW0JJVFNfVE9fTE9OR1MoVkxBTl9OX1ZJRCldOwogCXUxNiBiZF9udW1iZXI7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3Rhc2s7CiAJc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvcltNQVhfTVNJWF9RX1ZFQ1RPUlNdOwogCiAJLyogRENCIHBhcmFtZXRlcnMgKi8KQEAgLTM3Nyw0MyArNDI5LDYgQEAKIAl1MzIgYWxsb2NfcnhfcGFnZV9mYWlsZWQ7CiAJdTMyIGFsbG9jX3J4X2J1ZmZfZmFpbGVkOwogCi0JLyogU29tZSBmZWF0dXJlcyBuZWVkIHRyaS1zdGF0ZSBjYXBhYmlsaXR5LAotCSAqIHRodXMgdGhlIGFkZGl0aW9uYWwgKl9DQVBBQkxFIGZsYWdzLgotCSAqLwotCXUzMiBmbGFnczsKLSNkZWZpbmUgSVhHQkVfRkxBR19SWF9DU1VNX0VOQUJMRUQgICAgICAgICAgICAgICh1MzIpKDEpCi0jZGVmaW5lIElYR0JFX0ZMQUdfTVNJX0NBUEFCTEUgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDEpCi0jZGVmaW5lIElYR0JFX0ZMQUdfTVNJX0VOQUJMRUQgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDIpCi0jZGVmaW5lIElYR0JFX0ZMQUdfTVNJWF9DQVBBQkxFICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDMpCi0jZGVmaW5lIElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDQpCi0jZGVmaW5lIElYR0JFX0ZMQUdfUlhfMUJVRl9DQVBBQkxFICAgICAgICAgICAgICAodTMyKSgxIDw8IDYpCi0jZGVmaW5lIElYR0JFX0ZMQUdfUlhfUFNfQ0FQQUJMRSAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDcpCi0jZGVmaW5lIElYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRCAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDgpCi0jZGVmaW5lIElYR0JFX0ZMQUdfSU5fTkVUUE9MTCAgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDkpCi0jZGVmaW5lIElYR0JFX0ZMQUdfRENBX0VOQUJMRUQgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDEwKQotI2RlZmluZSBJWEdCRV9GTEFHX0RDQV9DQVBBQkxFICAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAxMSkKLSNkZWZpbmUgSVhHQkVfRkxBR19JTUlSX0VOQUJMRUQgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTIpCi0jZGVmaW5lIElYR0JFX0ZMQUdfTVFfQ0FQQUJMRSAgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDEzKQotI2RlZmluZSBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEICAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAxNCkKLSNkZWZpbmUgSVhHQkVfRkxBR19SU1NfRU5BQkxFRCAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTYpCi0jZGVmaW5lIElYR0JFX0ZMQUdfUlNTX0NBUEFCTEUgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDE3KQotI2RlZmluZSBJWEdCRV9GTEFHX1ZNRFFfQ0FQQUJMRSAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAxOCkKLSNkZWZpbmUgSVhHQkVfRkxBR19WTURRX0VOQUJMRUQgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTkpCi0jZGVmaW5lIElYR0JFX0ZMQUdfRkFOX0ZBSUxfQ0FQQUJMRSAgICAgICAgICAgICAodTMyKSgxIDw8IDIwKQotI2RlZmluZSBJWEdCRV9GTEFHX05FRURfTElOS19VUERBVEUgICAgICAgICAgICAgKHUzMikoMSA8PCAyMikKLSNkZWZpbmUgSVhHQkVfRkxBR19JTl9TRlBfTElOS19UQVNLICAgICAgICAgICAgICh1MzIpKDEgPDwgMjMpCi0jZGVmaW5lIElYR0JFX0ZMQUdfSU5fU0ZQX01PRF9UQVNLICAgICAgICAgICAgICAodTMyKSgxIDw8IDI0KQotI2RlZmluZSBJWEdCRV9GTEFHX0ZESVJfSEFTSF9DQVBBQkxFICAgICAgICAgICAgKHUzMikoMSA8PCAyNSkKLSNkZWZpbmUgSVhHQkVfRkxBR19GRElSX1BFUkZFQ1RfQ0FQQUJMRSAgICAgICAgICh1MzIpKDEgPDwgMjYpCi0jZGVmaW5lIElYR0JFX0ZMQUdfRkNPRV9DQVBBQkxFICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDI3KQotI2RlZmluZSBJWEdCRV9GTEFHX0ZDT0VfRU5BQkxFRCAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAyOCkKLSNkZWZpbmUgSVhHQkVfRkxBR19TUklPVl9DQVBBQkxFICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMjkpCi0jZGVmaW5lIElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRCAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDMwKQotCi0JdTMyIGZsYWdzMjsKLSNkZWZpbmUgSVhHQkVfRkxBRzJfUlNDX0NBUEFCTEUgICAgICAgICAgICAgICAgICh1MzIpKDEpCi0jZGVmaW5lIElYR0JFX0ZMQUcyX1JTQ19FTkFCTEVEICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDEpCi0jZGVmaW5lIElYR0JFX0ZMQUcyX1RFTVBfU0VOU09SX0NBUEFCTEUgICAgICAgICAodTMyKSgxIDw8IDIpCiAvKiBkZWZhdWx0IHRvIHRyeWluZyBmb3IgZm91ciBzZWNvbmRzICovCiAjZGVmaW5lIElYR0JFX1RSWV9MSU5LX1RJTUVPVVQgKDQgKiBIWikKIApAQCAtNDM0LDcgKzQ0OSw2IEBACiAJdTMyIHJ4X2VpdHJfcGFyYW07CiAJdTMyIHR4X2VpdHJfcGFyYW07CiAKLQl1bnNpZ25lZCBsb25nIHN0YXRlOwogCXU2NCB0eF9idXN5OwogCXVuc2lnbmVkIGludCB0eF9yaW5nX2NvdW50OwogCXVuc2lnbmVkIGludCByeF9yaW5nX2NvdW50OwpAQCAtNDQzLDE1ICs0NTcsMTIgQEAKIAlib29sIGxpbmtfdXA7CiAJdW5zaWduZWQgbG9uZyBsaW5rX2NoZWNrX3RpbWVvdXQ7CiAKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd2F0Y2hkb2dfdGFzazsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2ZwX3Rhc2s7Ci0Jc3RydWN0IHRpbWVyX2xpc3Qgc2ZwX3RpbWVyOwotCXN0cnVjdCB3b3JrX3N0cnVjdCBtdWx0aXNwZWVkX2ZpYmVyX3Rhc2s7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHNmcF9jb25maWdfbW9kdWxlX3Rhc2s7CisJc3RydWN0IHdvcmtfc3RydWN0IHNlcnZpY2VfdGFzazsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBzZXJ2aWNlX3RpbWVyOwogCXUzMiBmZGlyX3BiYWxsb2M7CiAJdTMyIGF0cl9zYW1wbGVfcmF0ZTsKKwl1bnNpZ25lZCBsb25nIGZkaXJfb3ZlcmZsb3c7IC8qIG51bWJlciBvZiB0aW1lcyBBVFIgd2FzIGJhY2tlZCBvZmYgKi8KIAlzcGlubG9ja190IGZkaXJfcGVyZmVjdF9sb2NrOwotCXN0cnVjdCB3b3JrX3N0cnVjdCBmZGlyX3JlaW5pdF90YXNrOwogI2lmZGVmIElYR0JFX0ZDT0UKIAlzdHJ1Y3QgaXhnYmVfZmNvZSBmY29lOwogI2VuZGlmIC8qIElYR0JFX0ZDT0UgKi8KQEAgLTQ2MSw3ICs0NzIsNyBAQAogCXUxNiBlZXByb21fdmVyc2lvbjsKIAogCWludCBub2RlOwotCXN0cnVjdCB3b3JrX3N0cnVjdCBjaGVja19vdmVydGVtcF90YXNrOworCXUzMiBsZWRfcmVnOwogCXUzMiBpbnRlcnJ1cHRfZXZlbnQ7CiAJY2hhciBsc2NfaW50X25hbWVbSUZOQU1TSVogKyA5XTsKIApAQCAtNDcwLDEzICs0ODEsMTcgQEAKIAl1bnNpZ25lZCBpbnQgbnVtX3ZmczsKIAlzdHJ1Y3QgdmZfZGF0YV9zdG9yYWdlICp2ZmluZm87CiAJaW50IHZmX3JhdGVfbGlua19zcGVlZDsKKwlzdHJ1Y3QgdmZfbWFjdmxhbnMgdmZfbXZzOworCXN0cnVjdCB2Zl9tYWN2bGFucyAqbXZfbGlzdDsKKwlib29sIGFudGlzcG9vZmluZ19lbmFibGVkOwogfTsKIAogZW51bSBpeGJnZV9zdGF0ZV90IHsKIAlfX0lYR0JFX1RFU1RJTkcsCiAJX19JWEdCRV9SRVNFVFRJTkcsCiAJX19JWEdCRV9ET1dOLAotCV9fSVhHQkVfU0ZQX01PRFVMRV9OT1RfRk9VTkQKKwlfX0lYR0JFX1NFUlZJQ0VfU0NIRUQsCisJX19JWEdCRV9JTl9TRlBfSU5JVCwKIH07CiAKIHN0cnVjdCBpeGdiZV9yc2NfY2IgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTguYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk4LmMKaW5kZXggODQ1YzY3OS4uODE3OWU1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTguYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OC5jCkBAIC0zNyw2ICszNyw3IEBACiAjZGVmaW5lIElYR0JFXzgyNTk4X1JBUl9FTlRSSUVTICAgMTYKICNkZWZpbmUgSVhHQkVfODI1OThfTUNfVEJMX1NJWkUgIDEyOAogI2RlZmluZSBJWEdCRV84MjU5OF9WRlRfVEJMX1NJWkUgMTI4CisjZGVmaW5lIElYR0JFXzgyNTk4X1JYX1BCX1NJWkUJIDUxMgogCiBzdGF0aWMgczMyIGl4Z2JlX3NldHVwX2NvcHBlcl9saW5rXzgyNTk4KHN0cnVjdCBpeGdiZV9odyAqaHcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgc3BlZWQsCkBAIC0xOTcsMTQgKzE5OCwzNSBAQAogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqCiAgKiAgU3RhcnRzIHRoZSBoYXJkd2FyZSB1c2luZyB0aGUgZ2VuZXJpYyBzdGFydF9odyBmdW5jdGlvbi4KLSAqICBUaGVuIHNldCBwY2llIGNvbXBsZXRpb24gdGltZW91dAorICogIERpc2FibGVzIHJlbGF4ZWQgb3JkZXJpbmcgVGhlbiBzZXQgcGNpZSBjb21wbGV0aW9uIHRpbWVvdXQKKyAqCiAgKiovCiBzdGF0aWMgczMyIGl4Z2JlX3N0YXJ0X2h3XzgyNTk4KHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7CisJdTMyIHJlZ3ZhbDsKKwl1MzIgaTsKIAlzMzIgcmV0X3ZhbCA9IDA7CiAKIAlyZXRfdmFsID0gaXhnYmVfc3RhcnRfaHdfZ2VuZXJpYyhodyk7CiAKKwkvKiBEaXNhYmxlIHJlbGF4ZWQgb3JkZXJpbmcgKi8KKwlmb3IgKGkgPSAwOyAoKGkgPCBody0+bWFjLm1heF90eF9xdWV1ZXMpICYmCisJICAgICAoaSA8IElYR0JFX0RDQV9NQVhfUVVFVUVTXzgyNTk4KSk7IGkrKykgeworCQlyZWd2YWwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRENBX1RYQ1RSTChpKSk7CisJCXJlZ3ZhbCAmPSB+SVhHQkVfRENBX1RYQ1RSTF9UWF9XQl9ST19FTjsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9EQ0FfVFhDVFJMKGkpLCByZWd2YWwpOworCX0KKworCWZvciAoaSA9IDA7ICgoaSA8IGh3LT5tYWMubWF4X3J4X3F1ZXVlcykgJiYKKwkgICAgIChpIDwgSVhHQkVfRENBX01BWF9RVUVVRVNfODI1OTgpKTsgaSsrKSB7CisJCXJlZ3ZhbCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9EQ0FfUlhDVFJMKGkpKTsKKwkJcmVndmFsICY9IH4oSVhHQkVfRENBX1JYQ1RSTF9ERVNDX1dST19FTiB8CisJCQkgICAgSVhHQkVfRENBX1JYQ1RSTF9ERVNDX0hTUk9fRU4pOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0RDQV9SWENUUkwoaSksIHJlZ3ZhbCk7CisJfQorCisJaHctPm1hYy5yeF9wYl9zaXplID0gSVhHQkVfODI1OThfUlhfUEJfU0laRTsKKwogCS8qIHNldCB0aGUgY29tcGxldGlvbiB0aW1lb3V0IGZvciBpbnRlcmZhY2UgKi8KIAlpZiAocmV0X3ZhbCA9PSAwKQogCQlpeGdiZV9zZXRfcGNpZV9jb21wbGV0aW9uX3RpbWVvdXQoaHcpOwpAQCAtMTA2NCw3ICsxMDg2LDcgQEAKIAkJCXNmcF9zdGF0ID0gc2ZwX3N0YXQgJiBJWEdCRV9JMkNfRUVQUk9NX1NUQVRVU19NQVNLOwogCQkJaWYgKHNmcF9zdGF0ICE9IElYR0JFX0kyQ19FRVBST01fU1RBVFVTX0lOX1BST0dSRVNTKQogCQkJCWJyZWFrOwotCQkJbXNsZWVwKDEwKTsKKwkJCXVzbGVlcF9yYW5nZSgxMDAwMCwgMjAwMDApOwogCQl9CiAKIAkJaWYgKHNmcF9zdGF0ICE9IElYR0JFX0kyQ19FRVBST01fU1RBVFVTX1BBU1MpIHsKQEAgLTExODgsNiArMTIxMCwzOCBAQAogCXJldHVybiBwaHlzaWNhbF9sYXllcjsKIH0KIAorLyoqCisgKiAgaXhnYmVfc2V0X2xhbl9pZF9tdWx0aV9wb3J0X3BjaWVfODI1OTggLSBTZXQgTEFOIGlkIGZvciBQQ0llIG11bHRpcGxlCisgKiAgcG9ydCBkZXZpY2VzLgorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIENhbGxzIGNvbW1vbiBmdW5jdGlvbiBhbmQgY29ycmVjdHMgaXNzdWUgd2l0aCBzb21lIHNpbmdsZSBwb3J0IGRldmljZXMKKyAqICB0aGF0IGVuYWJsZSBMQU4xIGJ1dCBub3QgTEFOMC4KKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JlX3NldF9sYW5faWRfbXVsdGlfcG9ydF9wY2llXzgyNTk4KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJc3RydWN0IGl4Z2JlX2J1c19pbmZvICpidXMgPSAmaHctPmJ1czsKKwl1MTYgcGNpX2dlbiA9IDA7CisJdTE2IHBjaV9jdHJsMiA9IDA7CisKKwlpeGdiZV9zZXRfbGFuX2lkX211bHRpX3BvcnRfcGNpZShodyk7CisKKwkvKiBjaGVjayBpZiBMQU4wIGlzIGRpc2FibGVkICovCisJaHctPmVlcHJvbS5vcHMucmVhZChodywgSVhHQkVfUENJRV9HRU5FUkFMX1BUUiwgJnBjaV9nZW4pOworCWlmICgocGNpX2dlbiAhPSAwKSAmJiAocGNpX2dlbiAhPSAweEZGRkYpKSB7CisKKwkJaHctPmVlcHJvbS5vcHMucmVhZChodywgcGNpX2dlbiArIElYR0JFX1BDSUVfQ1RSTDIsICZwY2lfY3RybDIpOworCisJCS8qIGlmIExBTjAgaXMgY29tcGxldGVseSBkaXNhYmxlZCBmb3JjZSBmdW5jdGlvbiB0byAwICovCisJCWlmICgocGNpX2N0cmwyICYgSVhHQkVfUENJRV9DVFJMMl9MQU5fRElTQUJMRSkgJiYKKwkJICAgICEocGNpX2N0cmwyICYgSVhHQkVfUENJRV9DVFJMMl9ESVNBQkxFX1NFTEVDVCkgJiYKKwkJICAgICEocGNpX2N0cmwyICYgSVhHQkVfUENJRV9DVFJMMl9EVU1NWV9FTkFCTEUpKSB7CisKKwkJCWJ1cy0+ZnVuYyA9IDA7CisJCX0KKwl9Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaXhnYmVfbWFjX29wZXJhdGlvbnMgbWFjX29wc184MjU5OCA9IHsKIAkuaW5pdF9odwkJPSAmaXhnYmVfaW5pdF9od19nZW5lcmljLAogCS5yZXNldF9odwkJPSAmaXhnYmVfcmVzZXRfaHdfODI1OTgsCkBAIC0xMTk5LDcgKzEyNTMsNyBAQAogCS5nZXRfbWFjX2FkZHIJCT0gJml4Z2JlX2dldF9tYWNfYWRkcl9nZW5lcmljLAogCS5zdG9wX2FkYXB0ZXIJCT0gJml4Z2JlX3N0b3BfYWRhcHRlcl9nZW5lcmljLAogCS5nZXRfYnVzX2luZm8gICAgICAgICAgID0gJml4Z2JlX2dldF9idXNfaW5mb19nZW5lcmljLAotCS5zZXRfbGFuX2lkICAgICAgICAgICAgID0gJml4Z2JlX3NldF9sYW5faWRfbXVsdGlfcG9ydF9wY2llLAorCS5zZXRfbGFuX2lkICAgICAgICAgICAgID0gJml4Z2JlX3NldF9sYW5faWRfbXVsdGlfcG9ydF9wY2llXzgyNTk4LAogCS5yZWFkX2FuYWxvZ19yZWc4CT0gJml4Z2JlX3JlYWRfYW5hbG9nX3JlZzhfODI1OTgsCiAJLndyaXRlX2FuYWxvZ19yZWc4CT0gJml4Z2JlX3dyaXRlX2FuYWxvZ19yZWc4XzgyNTk4LAogCS5zZXR1cF9saW5rCQk9ICZpeGdiZV9zZXR1cF9tYWNfbGlua184MjU5OCwKQEAgLTEyMjcsNiArMTI4MSw3IEBACiBzdGF0aWMgc3RydWN0IGl4Z2JlX2VlcHJvbV9vcGVyYXRpb25zIGVlcHJvbV9vcHNfODI1OTggPSB7CiAJLmluaXRfcGFyYW1zCQk9ICZpeGdiZV9pbml0X2VlcHJvbV9wYXJhbXNfZ2VuZXJpYywKIAkucmVhZAkJCT0gJml4Z2JlX3JlYWRfZWVyZF9nZW5lcmljLAorCS5yZWFkX2J1ZmZlcgkJPSAmaXhnYmVfcmVhZF9lZXJkX2J1ZmZlcl9nZW5lcmljLAogCS5jYWxjX2NoZWNrc3VtICAgICAgICAgID0gJml4Z2JlX2NhbGNfZWVwcm9tX2NoZWNrc3VtX2dlbmVyaWMsCiAJLnZhbGlkYXRlX2NoZWNrc3VtCT0gJml4Z2JlX3ZhbGlkYXRlX2VlcHJvbV9jaGVja3N1bV9nZW5lcmljLAogCS51cGRhdGVfY2hlY2tzdW0JPSAmaXhnYmVfdXBkYXRlX2VlcHJvbV9jaGVja3N1bV9nZW5lcmljLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTkuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk5LmMKaW5kZXggMDBhZWJhMy4uOGVlNjYxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTkuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OS5jCkBAIC0zOCw2ICszOCw3IEBACiAjZGVmaW5lIElYR0JFXzgyNTk5X1JBUl9FTlRSSUVTICAgMTI4CiAjZGVmaW5lIElYR0JFXzgyNTk5X01DX1RCTF9TSVpFICAgMTI4CiAjZGVmaW5lIElYR0JFXzgyNTk5X1ZGVF9UQkxfU0laRSAgMTI4CisjZGVmaW5lIElYR0JFXzgyNTk5X1JYX1BCX1NJWkUJICA1MTIKIAogc3RhdGljIHZvaWQgaXhnYmVfZGlzYWJsZV90eF9sYXNlcl9tdWx0aXNwZWVkX2ZpYmVyKHN0cnVjdCBpeGdiZV9odyAqaHcpOwogc3RhdGljIHZvaWQgaXhnYmVfZW5hYmxlX3R4X2xhc2VyX211bHRpc3BlZWRfZmliZXIoc3RydWN0IGl4Z2JlX2h3ICpodyk7CkBAIC02MSw2ICs2Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOwogc3RhdGljIHMzMiBpeGdiZV92ZXJpZnlfZndfdmVyc2lvbl84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3N0YXRpYyBib29sIGl4Z2JlX3ZlcmlmeV9sZXNtX2Z3X2VuYWJsZWRfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7CiAKIHN0YXRpYyB2b2lkIGl4Z2JlX2luaXRfbWFjX2xpbmtfb3BzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7CkBAIC04Niw3ICs4OCw4IEBACiAJCWlmICgobWFjLT5vcHMuZ2V0X21lZGlhX3R5cGUoaHcpID09CiAJCSAgICAgaXhnYmVfbWVkaWFfdHlwZV9iYWNrcGxhbmUpICYmCiAJCSAgICAoaHctPnBoeS5zbWFydF9zcGVlZCA9PSBpeGdiZV9zbWFydF9zcGVlZF9hdXRvIHx8Ci0JCSAgICAgaHctPnBoeS5zbWFydF9zcGVlZCA9PSBpeGdiZV9zbWFydF9zcGVlZF9vbikpCisJCSAgICAgaHctPnBoeS5zbWFydF9zcGVlZCA9PSBpeGdiZV9zbWFydF9zcGVlZF9vbikgJiYKKwkJICAgICAhaXhnYmVfdmVyaWZ5X2xlc21fZndfZW5hYmxlZF84MjU5OShodykpCiAJCQltYWMtPm9wcy5zZXR1cF9saW5rID0gJml4Z2JlX3NldHVwX21hY19saW5rX3NtYXJ0c3BlZWQ7CiAJCWVsc2UKIAkJCW1hYy0+b3BzLnNldHVwX2xpbmsgPSAmaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTk7CkBAIC0xMDcsNyArMTEwLDYgQEAKIAogCQlyZXRfdmFsID0gaXhnYmVfZ2V0X3NmcF9pbml0X3NlcXVlbmNlX29mZnNldHMoaHcsICZsaXN0X29mZnNldCwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhX29mZnNldCk7Ci0KIAkJaWYgKHJldF92YWwgIT0gMCkKIAkJCWdvdG8gc2V0dXBfc2ZwX291dDsKIApAQCAtMTI3LDkgKzEyOSwxMyBAQAogCQl9CiAKIAkJLyogUmVsZWFzZSB0aGUgc2VtYXBob3JlICovCi0JCWl4Z2JlX3JlbGVhc2Vfc3dmd19zeW5jKGh3LCBJWEdCRV9HU1NSX01BQ19DU1JfU00pOwotCQkvKiBEZWxheSBvYnRhaW5pbmcgc2VtYXBob3JlIGFnYWluIHRvIGFsbG93IEZXIGFjY2VzcyAqLwotCQltc2xlZXAoaHctPmVlcHJvbS5zZW1hcGhvcmVfZGVsYXkpOworCQlody0+bWFjLm9wcy5yZWxlYXNlX3N3Zndfc3luYyhodywgSVhHQkVfR1NTUl9NQUNfQ1NSX1NNKTsKKwkJLyoKKwkJICogRGVsYXkgb2J0YWluaW5nIHNlbWFwaG9yZSBhZ2FpbiB0byBhbGxvdyBGVyBhY2Nlc3MsCisJCSAqIHNlbWFwaG9yZV9kZWxheSBpcyBpbiBtcyB1c2xlZXBfcmFuZ2UgbmVlZHMgdXMuCisJCSAqLworCQl1c2xlZXBfcmFuZ2UoaHctPmVlcHJvbS5zZW1hcGhvcmVfZGVsYXkgKiAxMDAwLAorCQkJICAgICBody0+ZWVwcm9tLnNlbWFwaG9yZV9kZWxheSAqIDIwMDApOwogCiAJCS8qIE5vdyByZXN0YXJ0IERTUCBieSBzZXR0aW5nIFJlc3RhcnRfQU4gYW5kIGNsZWFyaW5nIExNUyAqLwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0FVVE9DLCAoKElYR0JFX1JFQURfUkVHKGh3LApAQCAtMTM4LDcgKzE0NCw3IEBACiAKIAkJLyogV2FpdCBmb3IgQU4gdG8gbGVhdmUgc3RhdGUgMCAqLwogCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewotCQkJbXNsZWVwKDQpOworCQkJdXNsZWVwX3JhbmdlKDQwMDAsIDgwMDApOwogCQkJcmVnX2FubHAxID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0FOTFAxKTsKIAkJCWlmIChyZWdfYW5scDEgJiBJWEdCRV9BTkxQMV9BTl9TVEFURV9NQVNLKQogCQkJCWJyZWFrOwpAQCAtMzUzLDYgKzM1OSw3IEBACiAJY2FzZSBJWEdCRV9ERVZfSURfODI1OTlfU0ZQOgogCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk5X1NGUF9GQ09FOgogCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk5X1NGUF9FTToKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5OV9TRlBfU0YyOgogCQltZWRpYV90eXBlID0gaXhnYmVfbWVkaWFfdHlwZV9maWJlcjsKIAkJYnJlYWs7CiAJY2FzZSBJWEdCRV9ERVZfSURfODI1OTlfQ1g0OgpAQCAtMzYxLDYgKzM2OCw5IEBACiAJY2FzZSBJWEdCRV9ERVZfSURfODI1OTlfVDNfTE9NOgogCQltZWRpYV90eXBlID0gaXhnYmVfbWVkaWFfdHlwZV9jb3BwZXI7CiAJCWJyZWFrOworCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk5X0xTOgorCQltZWRpYV90eXBlID0gaXhnYmVfbWVkaWFfdHlwZV9maWJlcl9sY287CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCW1lZGlhX3R5cGUgPSBpeGdiZV9tZWRpYV90eXBlX3Vua25vd247CiAJCWJyZWFrOwpAQCAtNDg2LDcgKzQ5Niw3IEBACiAgKgogICogIFNldCB0aGUgbGluayBzcGVlZCBpbiB0aGUgQVVUT0MgcmVnaXN0ZXIgYW5kIHJlc3RhcnRzIGxpbmsuCiAgKiovCi1zMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfbXVsdGlzcGVlZF9maWJlcihzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9tYWNfbGlua19tdWx0aXNwZWVkX2ZpYmVyKHN0cnVjdCBpeGdiZV9odyAqaHcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpCkBAIC0xMTc2LDcgKzExODYsNyBAQAogCQlpZiAoSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZESVJDVFJMKSAmCiAJCSAgICAgICAgICAgICAgICAgICBJWEdCRV9GRElSQ1RSTF9JTklUX0RPTkUpCiAJCQlicmVhazsKLQkJbXNsZWVwKDEpOworCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CiAJfQogCWlmIChpID49IElYR0JFX0ZESVJfSU5JVF9ET05FX1BPTEwpCiAJCWh3X2RiZyhodywgIkZsb3cgRGlyZWN0b3IgU2lnbmF0dXJlIHBvbGwgdGltZSBleGNlZWRlZCFcbiIpOwpAQCAtMTI3MSw3ICsxMjgxLDcgQEAKIAkJaWYgKElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GRElSQ1RSTCkgJgogCQkgICAgICAgICAgICAgICAgICAgSVhHQkVfRkRJUkNUUkxfSU5JVF9ET05FKQogCQkJYnJlYWs7Ci0JCW1zbGVlcCgxKTsKKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwogCX0KIAlpZiAoaSA+PSBJWEdCRV9GRElSX0lOSVRfRE9ORV9QT0xMKQogCQlod19kYmcoaHcsICJGbG93IERpcmVjdG9yIFBlcmZlY3QgcG9sbCB0aW1lIGV4Y2VlZGVkIVxuIik7CkBAIC0xNzQwLDMwICsxNzUwLDI5IEBACiAgKiAgaXhnYmVfc3RhcnRfaHdfODI1OTkgLSBQcmVwYXJlIGhhcmR3YXJlIGZvciBUeC9SeAogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqCi0gKiAgU3RhcnRzIHRoZSBoYXJkd2FyZSB1c2luZyB0aGUgZ2VuZXJpYyBzdGFydF9odyBmdW5jdGlvbi4KLSAqICBUaGVuIHBlcmZvcm1zIGRldmljZS1zcGVjaWZpYzoKLSAqICBDbGVhcnMgdGhlIHJhdGUgbGltaXRlciByZWdpc3RlcnMuCisgKiAgU3RhcnRzIHRoZSBoYXJkd2FyZSB1c2luZyB0aGUgZ2VuZXJpYyBzdGFydF9odyBmdW5jdGlvbgorICogIGFuZCB0aGUgZ2VuZXJhdGlvbiBzdGFydF9odyBmdW5jdGlvbi4KKyAqICBUaGVuIHBlcmZvcm1zIHJldmlzaW9uLXNwZWNpZmljIG9wZXJhdGlvbnMsIGlmIGFueS4KICAqKi8KIHN0YXRpYyBzMzIgaXhnYmVfc3RhcnRfaHdfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKIHsKLQl1MzIgcV9udW07Ci0JczMyIHJldF92YWw7CisJczMyIHJldF92YWwgPSAwOwogCiAJcmV0X3ZhbCA9IGl4Z2JlX3N0YXJ0X2h3X2dlbmVyaWMoaHcpOworCWlmIChyZXRfdmFsICE9IDApCisJCWdvdG8gb3V0OwogCi0JLyogQ2xlYXIgdGhlIHJhdGUgbGltaXRlcnMgKi8KLQlmb3IgKHFfbnVtID0gMDsgcV9udW0gPCBody0+bWFjLm1heF90eF9xdWV1ZXM7IHFfbnVtKyspIHsKLQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFREUVNFTCwgcV9udW0pOwotCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVEJDTlJDLCAwKTsKLQl9Ci0JSVhHQkVfV1JJVEVfRkxVU0goaHcpOworCXJldF92YWwgPSBpeGdiZV9zdGFydF9od19nZW4yKGh3KTsKKwlpZiAocmV0X3ZhbCAhPSAwKQorCQlnb3RvIG91dDsKIAogCS8qIFdlIG5lZWQgdG8gcnVuIGxpbmsgYXV0b3RyeSBhZnRlciB0aGUgZHJpdmVyIGxvYWRzICovCiAJaHctPm1hYy5hdXRvdHJ5X3Jlc3RhcnQgPSB0cnVlOworCWh3LT5tYWMucnhfcGJfc2l6ZSA9IElYR0JFXzgyNTk5X1JYX1BCX1NJWkU7CiAKIAlpZiAocmV0X3ZhbCA9PSAwKQogCQlyZXRfdmFsID0gaXhnYmVfdmVyaWZ5X2Z3X3ZlcnNpb25fODI1OTkoaHcpOwotCitvdXQ6CiAJcmV0dXJuIHJldF92YWw7CiB9CiAKQEAgLTE3NzUsNyArMTc4NCw3IEBACiAgKiAgSWYgUEhZIGFscmVhZHkgZGV0ZWN0ZWQsIG1haW50YWlucyBjdXJyZW50IFBIWSB0eXBlIGluIGh3IHN0cnVjdCwKICAqICBvdGhlcndpc2UgZXhlY3V0ZXMgdGhlIFBIWSBkZXRlY3Rpb24gcm91dGluZS4KICAqKi8KLXMzMiBpeGdiZV9pZGVudGlmeV9waHlfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3N0YXRpYyBzMzIgaXhnYmVfaWRlbnRpZnlfcGh5XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7CiAJczMyIHN0YXR1cyA9IElYR0JFX0VSUl9QSFlfQUREUl9JTlZBTElEOwogCkBAIC0xOTY4LDIxICsxOTc3LDYgQEAKIH0KIAogLyoqCi0gKiAgaXhnYmVfZ2V0X2RldmljZV9jYXBzXzgyNTk5IC0gR2V0IGFkZGl0aW9uYWwgZGV2aWNlIGNhcGFiaWxpdGllcwotICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKLSAqICBAZGV2aWNlX2NhcHM6IHRoZSBFRVBST00gd29yZCB3aXRoIHRoZSBleHRyYSBkZXZpY2UgY2FwYWJpbGl0aWVzCi0gKgotICogIFRoaXMgZnVuY3Rpb24gd2lsbCByZWFkIHRoZSBFRVBST00gbG9jYXRpb24gZm9yIHRoZSBkZXZpY2UgY2FwYWJpbGl0aWVzLAotICogIGFuZCByZXR1cm4gdGhlIHdvcmQgdGhyb3VnaCBkZXZpY2VfY2Fwcy4KLSAqKi8KLXN0YXRpYyBzMzIgaXhnYmVfZ2V0X2RldmljZV9jYXBzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiAqZGV2aWNlX2NhcHMpCi17Ci0JaHctPmVlcHJvbS5vcHMucmVhZChodywgSVhHQkVfREVWSUNFX0NBUFMsIGRldmljZV9jYXBzKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKICAqICBpeGdiZV92ZXJpZnlfZndfdmVyc2lvbl84MjU5OSAtIHZlcmlmeSBmdyB2ZXJzaW9uIGZvciA4MjU5OQogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqCkBAIC0yMDMwLDYgKzIwMjQsMTEwIEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAorLyoqCisgKiAgaXhnYmVfdmVyaWZ5X2xlc21fZndfZW5hYmxlZF84MjU5OSAtIENoZWNrcyBMRVNNIEZXIG1vZHVsZSBzdGF0ZS4KKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIFJldHVybnMgdHJ1ZSBpZiB0aGUgTEVTTSBGVyBtb2R1bGUgaXMgcHJlc2VudCBhbmQgZW5hYmxlZC4gT3RoZXJ3aXNlCisgKiAgcmV0dXJucyBmYWxzZS4gU21hcnQgU3BlZWQgbXVzdCBiZSBkaXNhYmxlZCBpZiBMRVNNIEZXIG1vZHVsZSBpcyBlbmFibGVkLgorICoqLworc3RhdGljIGJvb2wgaXhnYmVfdmVyaWZ5X2xlc21fZndfZW5hYmxlZF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCWJvb2wgbGVzbV9lbmFibGVkID0gZmFsc2U7CisJdTE2IGZ3X29mZnNldCwgZndfbGVzbV9wYXJhbV9vZmZzZXQsIGZ3X2xlc21fc3RhdGU7CisJczMyIHN0YXR1czsKKworCS8qIGdldCB0aGUgb2Zmc2V0IHRvIHRoZSBGaXJtd2FyZSBNb2R1bGUgYmxvY2sgKi8KKwlzdGF0dXMgPSBody0+ZWVwcm9tLm9wcy5yZWFkKGh3LCBJWEdCRV9GV19QVFIsICZmd19vZmZzZXQpOworCisJaWYgKChzdGF0dXMgIT0gMCkgfHwKKwkgICAgKGZ3X29mZnNldCA9PSAwKSB8fCAoZndfb2Zmc2V0ID09IDB4RkZGRikpCisJCWdvdG8gb3V0OworCisJLyogZ2V0IHRoZSBvZmZzZXQgdG8gdGhlIExFU00gUGFyYW1ldGVycyBibG9jayAqLworCXN0YXR1cyA9IGh3LT5lZXByb20ub3BzLnJlYWQoaHcsIChmd19vZmZzZXQgKworCQkJCSAgICAgSVhHQkVfRldfTEVTTV9QQVJBTUVURVJTX1BUUiksCisJCQkJICAgICAmZndfbGVzbV9wYXJhbV9vZmZzZXQpOworCisJaWYgKChzdGF0dXMgIT0gMCkgfHwKKwkgICAgKGZ3X2xlc21fcGFyYW1fb2Zmc2V0ID09IDApIHx8IChmd19sZXNtX3BhcmFtX29mZnNldCA9PSAweEZGRkYpKQorCQlnb3RvIG91dDsKKworCS8qIGdldCB0aGUgbGVzbSBzdGF0ZSB3b3JkICovCisJc3RhdHVzID0gaHctPmVlcHJvbS5vcHMucmVhZChodywgKGZ3X2xlc21fcGFyYW1fb2Zmc2V0ICsKKwkJCQkgICAgIElYR0JFX0ZXX0xFU01fU1RBVEVfMSksCisJCQkJICAgICAmZndfbGVzbV9zdGF0ZSk7CisKKwlpZiAoKHN0YXR1cyA9PSAwKSAmJgorCSAgICAoZndfbGVzbV9zdGF0ZSAmIElYR0JFX0ZXX0xFU01fU1RBVEVfRU5BQkxFRCkpCisJCWxlc21fZW5hYmxlZCA9IHRydWU7CisKK291dDoKKwlyZXR1cm4gbGVzbV9lbmFibGVkOworfQorCisvKioKKyAqICBpeGdiZV9yZWFkX2VlcHJvbV9idWZmZXJfODI1OTkgLSBSZWFkIEVFUFJPTSB3b3JkKHMpIHVzaW5nCisgKiAgZmFzdGVzdCBhdmFpbGFibGUgbWV0aG9kCisgKgorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAb2Zmc2V0OiBvZmZzZXQgb2YgIHdvcmQgaW4gRUVQUk9NIHRvIHJlYWQKKyAqICBAd29yZHM6IG51bWJlciBvZiB3b3JkcworICogIEBkYXRhOiB3b3JkKHMpIHJlYWQgZnJvbSB0aGUgRUVQUk9NCisgKgorICogIFJldHJpZXZlcyAxNiBiaXQgd29yZChzKSByZWFkIGZyb20gRUVQUk9NCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX3JlYWRfZWVwcm9tX2J1ZmZlcl84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgb2Zmc2V0LAorCQkJCQkgIHUxNiB3b3JkcywgdTE2ICpkYXRhKQoreworCXN0cnVjdCBpeGdiZV9lZXByb21faW5mbyAqZWVwcm9tID0gJmh3LT5lZXByb207CisJczMyIHJldF92YWwgPSBJWEdCRV9FUlJfQ09ORklHOworCisJLyoKKwkgKiBJZiBFRVBST00gaXMgZGV0ZWN0ZWQgYW5kIGNhbiBiZSBhZGRyZXNzZWQgdXNpbmcgMTQgYml0cywKKwkgKiB1c2UgRUVSRCBvdGhlcndpc2UgdXNlIGJpdCBiYW5nCisJICovCisJaWYgKChlZXByb20tPnR5cGUgPT0gaXhnYmVfZWVwcm9tX3NwaSkgJiYKKwkgICAgKG9mZnNldCArICh3b3JkcyAtIDEpIDw9IElYR0JFX0VFUkRfTUFYX0FERFIpKQorCQlyZXRfdmFsID0gaXhnYmVfcmVhZF9lZXJkX2J1ZmZlcl9nZW5lcmljKGh3LCBvZmZzZXQsIHdvcmRzLAorCQkJCQkJCSBkYXRhKTsKKwllbHNlCisJCXJldF92YWwgPSBpeGdiZV9yZWFkX2VlcHJvbV9idWZmZXJfYml0X2JhbmdfZ2VuZXJpYyhodywgb2Zmc2V0LAorCQkJCQkJCQkgICAgd29yZHMsCisJCQkJCQkJCSAgICBkYXRhKTsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZV9yZWFkX2VlcHJvbV84MjU5OSAtIFJlYWQgRUVQUk9NIHdvcmQgdXNpbmcKKyAqICBmYXN0ZXN0IGF2YWlsYWJsZSBtZXRob2QKKyAqCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBvZmZzZXQ6IG9mZnNldCBvZiAgd29yZCBpbiB0aGUgRUVQUk9NIHRvIHJlYWQKKyAqICBAZGF0YTogd29yZCByZWFkIGZyb20gdGhlIEVFUFJPTQorICoKKyAqICBSZWFkcyBhIDE2IGJpdCB3b3JkIGZyb20gdGhlIEVFUFJPTQorICoqLworc3RhdGljIHMzMiBpeGdiZV9yZWFkX2VlcHJvbV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorCQkJCSAgIHUxNiBvZmZzZXQsIHUxNiAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXhnYmVfZWVwcm9tX2luZm8gKmVlcHJvbSA9ICZody0+ZWVwcm9tOworCXMzMiByZXRfdmFsID0gSVhHQkVfRVJSX0NPTkZJRzsKKworCS8qCisJICogSWYgRUVQUk9NIGlzIGRldGVjdGVkIGFuZCBjYW4gYmUgYWRkcmVzc2VkIHVzaW5nIDE0IGJpdHMsCisJICogdXNlIEVFUkQgb3RoZXJ3aXNlIHVzZSBiaXQgYmFuZworCSAqLworCWlmICgoZWVwcm9tLT50eXBlID09IGl4Z2JlX2VlcHJvbV9zcGkpICYmCisJICAgIChvZmZzZXQgPD0gSVhHQkVfRUVSRF9NQVhfQUREUikpCisJCXJldF92YWwgPSBpeGdiZV9yZWFkX2VlcmRfZ2VuZXJpYyhodywgb2Zmc2V0LCBkYXRhKTsKKwllbHNlCisJCXJldF92YWwgPSBpeGdiZV9yZWFkX2VlcHJvbV9iaXRfYmFuZ19nZW5lcmljKGh3LCBvZmZzZXQsIGRhdGEpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaXhnYmVfbWFjX29wZXJhdGlvbnMgbWFjX29wc184MjU5OSA9IHsKIAkuaW5pdF9odyAgICAgICAgICAgICAgICA9ICZpeGdiZV9pbml0X2h3X2dlbmVyaWMsCiAJLnJlc2V0X2h3ICAgICAgICAgICAgICAgPSAmaXhnYmVfcmVzZXRfaHdfODI1OTksCkBAIC0yMDQwLDcgKzIxMzgsNyBAQAogCS5lbmFibGVfcnhfZG1hICAgICAgICAgID0gJml4Z2JlX2VuYWJsZV9yeF9kbWFfODI1OTksCiAJLmdldF9tYWNfYWRkciAgICAgICAgICAgPSAmaXhnYmVfZ2V0X21hY19hZGRyX2dlbmVyaWMsCiAJLmdldF9zYW5fbWFjX2FkZHIgICAgICAgPSAmaXhnYmVfZ2V0X3Nhbl9tYWNfYWRkcl9nZW5lcmljLAotCS5nZXRfZGV2aWNlX2NhcHMgICAgICAgID0gJml4Z2JlX2dldF9kZXZpY2VfY2Fwc184MjU5OSwKKwkuZ2V0X2RldmljZV9jYXBzICAgICAgICA9ICZpeGdiZV9nZXRfZGV2aWNlX2NhcHNfZ2VuZXJpYywKIAkuZ2V0X3d3bl9wcmVmaXggICAgICAgICA9ICZpeGdiZV9nZXRfd3duX3ByZWZpeF9nZW5lcmljLAogCS5zdG9wX2FkYXB0ZXIgICAgICAgICAgID0gJml4Z2JlX3N0b3BfYWRhcHRlcl9nZW5lcmljLAogCS5nZXRfYnVzX2luZm8gICAgICAgICAgID0gJml4Z2JlX2dldF9idXNfaW5mb19nZW5lcmljLApAQCAtMjA3Niw4ICsyMTc0LDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXhnYmVfZWVwcm9tX29wZXJhdGlvbnMgZWVwcm9tX29wc184MjU5OSA9IHsKIAkuaW5pdF9wYXJhbXMJCT0gJml4Z2JlX2luaXRfZWVwcm9tX3BhcmFtc19nZW5lcmljLAotCS5yZWFkCQkJPSAmaXhnYmVfcmVhZF9lZXJkX2dlbmVyaWMsCisJLnJlYWQJCQk9ICZpeGdiZV9yZWFkX2VlcHJvbV84MjU5OSwKKwkucmVhZF9idWZmZXIJCT0gJml4Z2JlX3JlYWRfZWVwcm9tX2J1ZmZlcl84MjU5OSwKIAkud3JpdGUJCQk9ICZpeGdiZV93cml0ZV9lZXByb21fZ2VuZXJpYywKKwkud3JpdGVfYnVmZmVyCQk9ICZpeGdiZV93cml0ZV9lZXByb21fYnVmZmVyX2JpdF9iYW5nX2dlbmVyaWMsCiAJLmNhbGNfY2hlY2tzdW0JCT0gJml4Z2JlX2NhbGNfZWVwcm9tX2NoZWNrc3VtX2dlbmVyaWMsCiAJLnZhbGlkYXRlX2NoZWNrc3VtCT0gJml4Z2JlX3ZhbGlkYXRlX2VlcHJvbV9jaGVja3N1bV9nZW5lcmljLAogCS51cGRhdGVfY2hlY2tzdW0JPSAmaXhnYmVfdXBkYXRlX2VlcHJvbV9jaGVja3N1bV9nZW5lcmljLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYwppbmRleCBiY2Q5NTI5Li5iODk0YjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYwpAQCAtNTQsNiArNTQsMTMgQEAKIHN0YXRpYyBzMzIgaXhnYmVfbmVnb3RpYXRlX2ZjKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBhZHZfcmVnLCB1MzIgbHBfcmVnLAogCQkJICAgICAgdTMyIGFkdl9zeW0sIHUzMiBhZHZfYXNtLCB1MzIgbHBfc3ltLCB1MzIgbHBfYXNtKTsKIHN0YXRpYyBzMzIgaXhnYmVfc2V0dXBfZmMoc3RydWN0IGl4Z2JlX2h3ICpodywgczMyIHBhY2tldGJ1Zl9udW0pOworc3RhdGljIHMzMiBpeGdiZV9wb2xsX2VlcmRfZWV3cl9kb25lKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBlZV9yZWcpOworc3RhdGljIHMzMiBpeGdiZV9yZWFkX2VlcHJvbV9idWZmZXJfYml0X2Jhbmcoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwKKwkJCQkJICAgICB1MTYgd29yZHMsIHUxNiAqZGF0YSk7CitzdGF0aWMgczMyIGl4Z2JlX3dyaXRlX2VlcHJvbV9idWZmZXJfYml0X2Jhbmcoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwKKwkJCQkJICAgICB1MTYgd29yZHMsIHUxNiAqZGF0YSk7CitzdGF0aWMgczMyIGl4Z2JlX2RldGVjdF9lZXByb21fcGFnZV9zaXplX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywKKwkJCQkJCSB1MTYgb2Zmc2V0KTsKIAogLyoqCiAgKiAgaXhnYmVfc3RhcnRfaHdfZ2VuZXJpYyAtIFByZXBhcmUgaGFyZHdhcmUgZm9yIFR4L1J4CkBAIC05Niw2ICsxMDMsNDUgQEAKIH0KIAogLyoqCisgKiAgaXhnYmVfc3RhcnRfaHdfZ2VuMiAtIEluaXQgc2VxdWVuY2UgZm9yIGNvbW1vbiBkZXZpY2UgZmFtaWx5CisgKiAgQGh3OiBwb2ludGVyIHRvIGh3IHN0cnVjdHVyZQorICoKKyAqIFBlcmZvcm1zIHRoZSBpbml0IHNlcXVlbmNlIGNvbW1vbiB0byB0aGUgc2Vjb25kIGdlbmVyYXRpb24KKyAqIG9mIDEwIEdiRSBkZXZpY2VzLgorICogRGV2aWNlcyBpbiB0aGUgc2Vjb25kIGdlbmVyYXRpb246CisgKiAgICAgODI1OTkKKyAqICAgICBYNTQwCisgKiovCitzMzIgaXhnYmVfc3RhcnRfaHdfZ2VuMihzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXUzMiBpOworCXUzMiByZWd2YWw7CisKKwkvKiBDbGVhciB0aGUgcmF0ZSBsaW1pdGVycyAqLworCWZvciAoaSA9IDA7IGkgPCBody0+bWFjLm1heF90eF9xdWV1ZXM7IGkrKykgeworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVERRU0VMLCBpKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFRCQ05SQywgMCk7CisJfQorCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKKworCS8qIERpc2FibGUgcmVsYXhlZCBvcmRlcmluZyAqLworCWZvciAoaSA9IDA7IGkgPCBody0+bWFjLm1heF90eF9xdWV1ZXM7IGkrKykgeworCQlyZWd2YWwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRENBX1RYQ1RSTF84MjU5OShpKSk7CisJCXJlZ3ZhbCAmPSB+SVhHQkVfRENBX1RYQ1RSTF9UWF9XQl9ST19FTjsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9EQ0FfVFhDVFJMXzgyNTk5KGkpLCByZWd2YWwpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBody0+bWFjLm1heF9yeF9xdWV1ZXM7IGkrKykgeworCQlyZWd2YWwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRENBX1JYQ1RSTChpKSk7CisJCXJlZ3ZhbCAmPSB+KElYR0JFX0RDQV9SWENUUkxfREVTQ19XUk9fRU4gfAorCQkJCQlJWEdCRV9EQ0FfUlhDVFJMX0RFU0NfSFNST19FTik7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRENBX1JYQ1RSTChpKSwgcmVndmFsKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiAgaXhnYmVfaW5pdF9od19nZW5lcmljIC0gR2VuZXJpYyBoYXJkd2FyZSBpbml0aWFsaXphdGlvbgogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqCkBAIC00NjQsNyArNTEwLDcgQEAKIAlyZWdfdmFsICY9IH4oSVhHQkVfUlhDVFJMX1JYRU4pOwogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhDVFJMLCByZWdfdmFsKTsKIAlJWEdCRV9XUklURV9GTFVTSChodyk7Ci0JbXNsZWVwKDIpOworCXVzbGVlcF9yYW5nZSgyMDAwLCA0MDAwKTsKIAogCS8qIENsZWFyIGludGVycnVwdCBtYXNrIHRvIHN0b3AgZnJvbSBpbnRlcnJ1cHRzIGJlaW5nIGdlbmVyYXRlZCAqLwogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlNQywgSVhHQkVfSVJRX0NMRUFSX01BU0spOwpAQCAtNTQ1LDYgKzU5MSw4IEBACiAJCS8qIFNldCBkZWZhdWx0IHNlbWFwaG9yZSBkZWxheSB0byAxMG1zIHdoaWNoIGlzIGEgd2VsbAogCQkgKiB0ZXN0ZWQgdmFsdWUgKi8KIAkJZWVwcm9tLT5zZW1hcGhvcmVfZGVsYXkgPSAxMDsKKwkJLyogQ2xlYXIgRUVQUk9NIHBhZ2Ugc2l6ZSwgaXQgd2lsbCBiZSBpbml0aWFsaXplZCBhcyBuZWVkZWQgKi8KKwkJZWVwcm9tLT53b3JkX3BhZ2Vfc2l6ZSA9IDA7CiAKIAkJLyoKIAkJICogQ2hlY2sgZm9yIEVFUFJPTSBwcmVzZW50IGZpcnN0LgpAQCAtNTc3LDI2ICs2MjUsNzggQEAKIH0KIAogLyoqCi0gKiAgaXhnYmVfd3JpdGVfZWVwcm9tX2dlbmVyaWMgLSBXcml0ZXMgMTYgYml0IHZhbHVlIHRvIEVFUFJPTQorICogIGl4Z2JlX3dyaXRlX2VlcHJvbV9idWZmZXJfYml0X2JhbmdfZ2VuZXJpYyAtIFdyaXRlIEVFUFJPTSB1c2luZyBiaXQtYmFuZworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAb2Zmc2V0OiBvZmZzZXQgd2l0aGluIHRoZSBFRVBST00gdG8gd3JpdGUKKyAqICBAd29yZHM6IG51bWJlciBvZiB3b3JkcworICogIEBkYXRhOiAxNiBiaXQgd29yZChzKSB0byB3cml0ZSB0byBFRVBST00KKyAqCisgKiAgUmVhZHMgMTYgYml0IHdvcmQocykgZnJvbSBFRVBST00gdGhyb3VnaCBiaXQtYmFuZyBtZXRob2QKKyAqKi8KK3MzMiBpeGdiZV93cml0ZV9lZXByb21fYnVmZmVyX2JpdF9iYW5nX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwKKwkJCQkJICAgICAgIHUxNiB3b3JkcywgdTE2ICpkYXRhKQoreworCXMzMiBzdGF0dXMgPSAwOworCXUxNiBpLCBjb3VudDsKKworCWh3LT5lZXByb20ub3BzLmluaXRfcGFyYW1zKGh3KTsKKworCWlmICh3b3JkcyA9PSAwKSB7CisJCXN0YXR1cyA9IElYR0JFX0VSUl9JTlZBTElEX0FSR1VNRU5UOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAob2Zmc2V0ICsgd29yZHMgPiBody0+ZWVwcm9tLndvcmRfc2l6ZSkgeworCQlzdGF0dXMgPSBJWEdCRV9FUlJfRUVQUk9NOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFRoZSBFRVBST00gcGFnZSBzaXplIGNhbm5vdCBiZSBxdWVyaWVkIGZyb20gdGhlIGNoaXAuIFdlIGRvIGxhenkKKwkgKiBpbml0aWFsaXphdGlvbi4gSXQgaXMgd29ydGggdG8gZG8gdGhhdCB3aGVuIHdlIHdyaXRlIGxhcmdlIGJ1ZmZlci4KKwkgKi8KKwlpZiAoKGh3LT5lZXByb20ud29yZF9wYWdlX3NpemUgPT0gMCkgJiYKKwkgICAgKHdvcmRzID4gSVhHQkVfRUVQUk9NX1BBR0VfU0laRV9NQVgpKQorCQlpeGdiZV9kZXRlY3RfZWVwcm9tX3BhZ2Vfc2l6ZV9nZW5lcmljKGh3LCBvZmZzZXQpOworCisJLyoKKwkgKiBXZSBjYW5ub3QgaG9sZCBzeW5jaHJvbml6YXRpb24gc2VtYXBob3JlcyBmb3IgdG9vIGxvbmcKKwkgKiB0byBhdm9pZCBvdGhlciBlbnRpdHkgc3RhcnZhdGlvbi4gSG93ZXZlciBpdCBpcyBtb3JlIGVmZmljaWVudAorCSAqIHRvIHJlYWQgaW4gYnVyc3RzIHRoYW4gc3luY2hyb25pemluZyBhY2Nlc3MgZm9yIGVhY2ggd29yZC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgd29yZHM7IGkgKz0gSVhHQkVfRUVQUk9NX1JEX0JVRkZFUl9NQVhfQ09VTlQpIHsKKwkJY291bnQgPSAod29yZHMgLSBpKSAvIElYR0JFX0VFUFJPTV9SRF9CVUZGRVJfTUFYX0NPVU5UID4gMCA/CisJCQkgSVhHQkVfRUVQUk9NX1JEX0JVRkZFUl9NQVhfQ09VTlQgOiAod29yZHMgLSBpKTsKKwkJc3RhdHVzID0gaXhnYmVfd3JpdGVfZWVwcm9tX2J1ZmZlcl9iaXRfYmFuZyhodywgb2Zmc2V0ICsgaSwKKwkJCQkJCQkgICAgY291bnQsICZkYXRhW2ldKTsKKworCQlpZiAoc3RhdHVzICE9IDApCisJCQlicmVhazsKKwl9CisKK291dDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV93cml0ZV9lZXByb21fYnVmZmVyX2JpdF9iYW5nIC0gV3JpdGVzIDE2IGJpdCB3b3JkKHMpIHRvIEVFUFJPTQogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqICBAb2Zmc2V0OiBvZmZzZXQgd2l0aGluIHRoZSBFRVBST00gdG8gYmUgd3JpdHRlbiB0bwotICogIEBkYXRhOiAxNiBiaXQgd29yZCB0byBiZSB3cml0dGVuIHRvIHRoZSBFRVBST00KKyAqICBAd29yZHM6IG51bWJlciBvZiB3b3JkKHMpCisgKiAgQGRhdGE6IDE2IGJpdCB3b3JkKHMpIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIEVFUFJPTQogICoKICAqICBJZiBpeGdiZV9lZXByb21fdXBkYXRlX2NoZWNrc3VtIGlzIG5vdCBjYWxsZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiwgdGhlCiAgKiAgRUVQUk9NIHdpbGwgbW9zdCBsaWtlbHkgY29udGFpbiBhbiBpbnZhbGlkIGNoZWNrc3VtLgogICoqLwotczMyIGl4Z2JlX3dyaXRlX2VlcHJvbV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiBkYXRhKQorc3RhdGljIHMzMiBpeGdiZV93cml0ZV9lZXByb21fYnVmZmVyX2JpdF9iYW5nKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiBvZmZzZXQsCisJCQkJCSAgICAgIHUxNiB3b3JkcywgdTE2ICpkYXRhKQogewogCXMzMiBzdGF0dXM7CisJdTE2IHdvcmQ7CisJdTE2IHBhZ2Vfc2l6ZTsKKwl1MTYgaTsKIAl1OCB3cml0ZV9vcGNvZGUgPSBJWEdCRV9FRVBST01fV1JJVEVfT1BDT0RFX1NQSTsKIAotCWh3LT5lZXByb20ub3BzLmluaXRfcGFyYW1zKGh3KTsKLQotCWlmIChvZmZzZXQgPj0gaHctPmVlcHJvbS53b3JkX3NpemUpIHsKLQkJc3RhdHVzID0gSVhHQkVfRVJSX0VFUFJPTTsKLQkJZ290byBvdXQ7Ci0JfQotCiAJLyogUHJlcGFyZSB0aGUgRUVQUk9NIGZvciB3cml0aW5nICAqLwogCXN0YXR1cyA9IGl4Z2JlX2FjcXVpcmVfZWVwcm9tKGh3KTsKIApAQCAtNjA4LDU0ICs3MDgsNjkgQEAKIAl9CiAKIAlpZiAoc3RhdHVzID09IDApIHsKLQkJaXhnYmVfc3RhbmRieV9lZXByb20oaHcpOworCQlmb3IgKGkgPSAwOyBpIDwgd29yZHM7IGkrKykgeworCQkJaXhnYmVfc3RhbmRieV9lZXByb20oaHcpOwogCi0JCS8qICBTZW5kIHRoZSBXUklURSBFTkFCTEUgY29tbWFuZCAoOCBiaXQgb3Bjb2RlICkgICovCi0JCWl4Z2JlX3NoaWZ0X291dF9lZXByb21fYml0cyhodywgSVhHQkVfRUVQUk9NX1dSRU5fT1BDT0RFX1NQSSwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX0VFUFJPTV9PUENPREVfQklUUyk7CisJCQkvKiAgU2VuZCB0aGUgV1JJVEUgRU5BQkxFIGNvbW1hbmQgKDggYml0IG9wY29kZSApICAqLworCQkJaXhnYmVfc2hpZnRfb3V0X2VlcHJvbV9iaXRzKGh3LAorCQkJCQkJICBJWEdCRV9FRVBST01fV1JFTl9PUENPREVfU1BJLAorCQkJCQkJICBJWEdCRV9FRVBST01fT1BDT0RFX0JJVFMpOwogCi0JCWl4Z2JlX3N0YW5kYnlfZWVwcm9tKGh3KTsKKwkJCWl4Z2JlX3N0YW5kYnlfZWVwcm9tKGh3KTsKIAotCQkvKgotCQkgKiBTb21lIFNQSSBlZXByb21zIHVzZSB0aGUgOHRoIGFkZHJlc3MgYml0IGVtYmVkZGVkIGluIHRoZQotCQkgKiBvcGNvZGUKLQkJICovCi0JCWlmICgoaHctPmVlcHJvbS5hZGRyZXNzX2JpdHMgPT0gOCkgJiYgKG9mZnNldCA+PSAxMjgpKQotCQkJd3JpdGVfb3Bjb2RlIHw9IElYR0JFX0VFUFJPTV9BOF9PUENPREVfU1BJOworCQkJLyoKKwkJCSAqIFNvbWUgU1BJIGVlcHJvbXMgdXNlIHRoZSA4dGggYWRkcmVzcyBiaXQgZW1iZWRkZWQKKwkJCSAqIGluIHRoZSBvcGNvZGUKKwkJCSAqLworCQkJaWYgKChody0+ZWVwcm9tLmFkZHJlc3NfYml0cyA9PSA4KSAmJgorCQkJICAgICgob2Zmc2V0ICsgaSkgPj0gMTI4KSkKKwkJCQl3cml0ZV9vcGNvZGUgfD0gSVhHQkVfRUVQUk9NX0E4X09QQ09ERV9TUEk7CiAKLQkJLyogU2VuZCB0aGUgV3JpdGUgY29tbWFuZCAoOC1iaXQgb3Bjb2RlICsgYWRkcikgKi8KLQkJaXhnYmVfc2hpZnRfb3V0X2VlcHJvbV9iaXRzKGh3LCB3cml0ZV9vcGNvZGUsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9FRVBST01fT1BDT0RFX0JJVFMpOwotCQlpeGdiZV9zaGlmdF9vdXRfZWVwcm9tX2JpdHMoaHcsICh1MTYpKG9mZnNldCoyKSwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3LT5lZXByb20uYWRkcmVzc19iaXRzKTsKKwkJCS8qIFNlbmQgdGhlIFdyaXRlIGNvbW1hbmQgKDgtYml0IG9wY29kZSArIGFkZHIpICovCisJCQlpeGdiZV9zaGlmdF9vdXRfZWVwcm9tX2JpdHMoaHcsIHdyaXRlX29wY29kZSwKKwkJCQkJCSAgICBJWEdCRV9FRVBST01fT1BDT0RFX0JJVFMpOworCQkJaXhnYmVfc2hpZnRfb3V0X2VlcHJvbV9iaXRzKGh3LCAodTE2KSgob2Zmc2V0ICsgaSkgKiAyKSwKKwkJCQkJCSAgICBody0+ZWVwcm9tLmFkZHJlc3NfYml0cyk7CiAKLQkJLyogU2VuZCB0aGUgZGF0YSAqLwotCQlkYXRhID0gKGRhdGEgPj4gOCkgfCAoZGF0YSA8PCA4KTsKLQkJaXhnYmVfc2hpZnRfb3V0X2VlcHJvbV9iaXRzKGh3LCBkYXRhLCAxNik7Ci0JCWl4Z2JlX3N0YW5kYnlfZWVwcm9tKGh3KTsKKwkJCXBhZ2Vfc2l6ZSA9IGh3LT5lZXByb20ud29yZF9wYWdlX3NpemU7CiAKKwkJCS8qIFNlbmQgdGhlIGRhdGEgaW4gYnVyc3QgdmlhIFNQSSovCisJCQlkbyB7CisJCQkJd29yZCA9IGRhdGFbaV07CisJCQkJd29yZCA9ICh3b3JkID4+IDgpIHwgKHdvcmQgPDwgOCk7CisJCQkJaXhnYmVfc2hpZnRfb3V0X2VlcHJvbV9iaXRzKGh3LCB3b3JkLCAxNik7CisKKwkJCQlpZiAocGFnZV9zaXplID09IDApCisJCQkJCWJyZWFrOworCisJCQkJLyogZG8gbm90IHdyYXAgYXJvdW5kIHBhZ2UgKi8KKwkJCQlpZiAoKChvZmZzZXQgKyBpKSAmIChwYWdlX3NpemUgLSAxKSkgPT0KKwkJCQkgICAgKHBhZ2Vfc2l6ZSAtIDEpKQorCQkJCQlicmVhazsKKwkJCX0gd2hpbGUgKCsraSA8IHdvcmRzKTsKKworCQkJaXhnYmVfc3RhbmRieV9lZXByb20oaHcpOworCQkJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CisJCX0KIAkJLyogRG9uZSB3aXRoIHdyaXRpbmcgLSByZWxlYXNlIHRoZSBFRVBST00gKi8KIAkJaXhnYmVfcmVsZWFzZV9lZXByb20oaHcpOwogCX0KIAotb3V0OgogCXJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgotICogIGl4Z2JlX3JlYWRfZWVwcm9tX2JpdF9iYW5nX2dlbmVyaWMgLSBSZWFkIEVFUFJPTSB3b3JkIHVzaW5nIGJpdC1iYW5nCisgKiAgaXhnYmVfd3JpdGVfZWVwcm9tX2dlbmVyaWMgLSBXcml0ZXMgMTYgYml0IHZhbHVlIHRvIEVFUFJPTQogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKLSAqICBAb2Zmc2V0OiBvZmZzZXQgd2l0aGluIHRoZSBFRVBST00gdG8gYmUgcmVhZAotICogIEBkYXRhOiByZWFkIDE2IGJpdCB2YWx1ZSBmcm9tIEVFUFJPTQorICogIEBvZmZzZXQ6IG9mZnNldCB3aXRoaW4gdGhlIEVFUFJPTSB0byBiZSB3cml0dGVuIHRvCisgKiAgQGRhdGE6IDE2IGJpdCB3b3JkIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIEVFUFJPTQogICoKLSAqICBSZWFkcyAxNiBiaXQgdmFsdWUgZnJvbSBFRVBST00gdGhyb3VnaCBiaXQtYmFuZyBtZXRob2QKKyAqICBJZiBpeGdiZV9lZXByb21fdXBkYXRlX2NoZWNrc3VtIGlzIG5vdCBjYWxsZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiwgdGhlCisgKiAgRUVQUk9NIHdpbGwgbW9zdCBsaWtlbHkgY29udGFpbiBhbiBpbnZhbGlkIGNoZWNrc3VtLgogICoqLwotczMyIGl4Z2JlX3JlYWRfZWVwcm9tX2JpdF9iYW5nX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqZGF0YSkKK3MzMiBpeGdiZV93cml0ZV9lZXByb21fZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgZGF0YSkKIHsKIAlzMzIgc3RhdHVzOwotCXUxNiB3b3JkX2luOwotCXU4IHJlYWRfb3Bjb2RlID0gSVhHQkVfRUVQUk9NX1JFQURfT1BDT0RFX1NQSTsKIAogCWh3LT5lZXByb20ub3BzLmluaXRfcGFyYW1zKGh3KTsKIApAQCAtNjY0LDYgKzc3OSw3NiBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlzdGF0dXMgPSBpeGdiZV93cml0ZV9lZXByb21fYnVmZmVyX2JpdF9iYW5nKGh3LCBvZmZzZXQsIDEsICZkYXRhKTsKKworb3V0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX3JlYWRfZWVwcm9tX2J1ZmZlcl9iaXRfYmFuZ19nZW5lcmljIC0gUmVhZCBFRVBST00gdXNpbmcgYml0LWJhbmcKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQG9mZnNldDogb2Zmc2V0IHdpdGhpbiB0aGUgRUVQUk9NIHRvIGJlIHJlYWQKKyAqICBAd29yZHM6IG51bWJlciBvZiB3b3JkKHMpCisgKiAgQGRhdGE6IHJlYWQgMTYgYml0IHdvcmRzKHMpIGZyb20gRUVQUk9NCisgKgorICogIFJlYWRzIDE2IGJpdCB3b3JkKHMpIGZyb20gRUVQUk9NIHRocm91Z2ggYml0LWJhbmcgbWV0aG9kCisgKiovCitzMzIgaXhnYmVfcmVhZF9lZXByb21fYnVmZmVyX2JpdF9iYW5nX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwKKwkJCQkJICAgICAgdTE2IHdvcmRzLCB1MTYgKmRhdGEpCit7CisJczMyIHN0YXR1cyA9IDA7CisJdTE2IGksIGNvdW50OworCisJaHctPmVlcHJvbS5vcHMuaW5pdF9wYXJhbXMoaHcpOworCisJaWYgKHdvcmRzID09IDApIHsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChvZmZzZXQgKyB3b3JkcyA+IGh3LT5lZXByb20ud29yZF9zaXplKSB7CisJCXN0YXR1cyA9IElYR0JFX0VSUl9FRVBST007CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogV2UgY2Fubm90IGhvbGQgc3luY2hyb25pemF0aW9uIHNlbWFwaG9yZXMgZm9yIHRvbyBsb25nCisJICogdG8gYXZvaWQgb3RoZXIgZW50aXR5IHN0YXJ2YXRpb24uIEhvd2V2ZXIgaXQgaXMgbW9yZSBlZmZpY2llbnQKKwkgKiB0byByZWFkIGluIGJ1cnN0cyB0aGFuIHN5bmNocm9uaXppbmcgYWNjZXNzIGZvciBlYWNoIHdvcmQuCisJICovCisJZm9yIChpID0gMDsgaSA8IHdvcmRzOyBpICs9IElYR0JFX0VFUFJPTV9SRF9CVUZGRVJfTUFYX0NPVU5UKSB7CisJCWNvdW50ID0gKHdvcmRzIC0gaSkgLyBJWEdCRV9FRVBST01fUkRfQlVGRkVSX01BWF9DT1VOVCA+IDAgPworCQkJIElYR0JFX0VFUFJPTV9SRF9CVUZGRVJfTUFYX0NPVU5UIDogKHdvcmRzIC0gaSk7CisKKwkJc3RhdHVzID0gaXhnYmVfcmVhZF9lZXByb21fYnVmZmVyX2JpdF9iYW5nKGh3LCBvZmZzZXQgKyBpLAorCQkJCQkJCSAgIGNvdW50LCAmZGF0YVtpXSk7CisKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJYnJlYWs7CisJfQorCitvdXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfcmVhZF9lZXByb21fYnVmZmVyX2JpdF9iYW5nIC0gUmVhZCBFRVBST00gdXNpbmcgYml0LWJhbmcKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQG9mZnNldDogb2Zmc2V0IHdpdGhpbiB0aGUgRUVQUk9NIHRvIGJlIHJlYWQKKyAqICBAd29yZHM6IG51bWJlciBvZiB3b3JkKHMpCisgKiAgQGRhdGE6IHJlYWQgMTYgYml0IHdvcmQocykgZnJvbSBFRVBST00KKyAqCisgKiAgUmVhZHMgMTYgYml0IHdvcmQocykgZnJvbSBFRVBST00gdGhyb3VnaCBiaXQtYmFuZyBtZXRob2QKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfcmVhZF9lZXByb21fYnVmZmVyX2JpdF9iYW5nKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiBvZmZzZXQsCisJCQkJCSAgICAgdTE2IHdvcmRzLCB1MTYgKmRhdGEpCit7CisJczMyIHN0YXR1czsKKwl1MTYgd29yZF9pbjsKKwl1OCByZWFkX29wY29kZSA9IElYR0JFX0VFUFJPTV9SRUFEX09QQ09ERV9TUEk7CisJdTE2IGk7CisKIAkvKiBQcmVwYXJlIHRoZSBFRVBST00gZm9yIHJlYWRpbmcgICovCiAJc3RhdHVzID0gaXhnYmVfYWNxdWlyZV9lZXByb20oaHcpOwogCkBAIC02NzUsMjkgKzg2MCwxNDUgQEAKIAl9CiAKIAlpZiAoc3RhdHVzID09IDApIHsKLQkJaXhnYmVfc3RhbmRieV9lZXByb20oaHcpOworCQlmb3IgKGkgPSAwOyBpIDwgd29yZHM7IGkrKykgeworCQkJaXhnYmVfc3RhbmRieV9lZXByb20oaHcpOworCQkJLyoKKwkJCSAqIFNvbWUgU1BJIGVlcHJvbXMgdXNlIHRoZSA4dGggYWRkcmVzcyBiaXQgZW1iZWRkZWQKKwkJCSAqIGluIHRoZSBvcGNvZGUKKwkJCSAqLworCQkJaWYgKChody0+ZWVwcm9tLmFkZHJlc3NfYml0cyA9PSA4KSAmJgorCQkJICAgICgob2Zmc2V0ICsgaSkgPj0gMTI4KSkKKwkJCQlyZWFkX29wY29kZSB8PSBJWEdCRV9FRVBST01fQThfT1BDT0RFX1NQSTsKIAotCQkvKgotCQkgKiBTb21lIFNQSSBlZXByb21zIHVzZSB0aGUgOHRoIGFkZHJlc3MgYml0IGVtYmVkZGVkIGluIHRoZQotCQkgKiBvcGNvZGUKLQkJICovCi0JCWlmICgoaHctPmVlcHJvbS5hZGRyZXNzX2JpdHMgPT0gOCkgJiYgKG9mZnNldCA+PSAxMjgpKQotCQkJcmVhZF9vcGNvZGUgfD0gSVhHQkVfRUVQUk9NX0E4X09QQ09ERV9TUEk7CisJCQkvKiBTZW5kIHRoZSBSRUFEIGNvbW1hbmQgKG9wY29kZSArIGFkZHIpICovCisJCQlpeGdiZV9zaGlmdF9vdXRfZWVwcm9tX2JpdHMoaHcsIHJlYWRfb3Bjb2RlLAorCQkJCQkJICAgIElYR0JFX0VFUFJPTV9PUENPREVfQklUUyk7CisJCQlpeGdiZV9zaGlmdF9vdXRfZWVwcm9tX2JpdHMoaHcsICh1MTYpKChvZmZzZXQgKyBpKSAqIDIpLAorCQkJCQkJICAgIGh3LT5lZXByb20uYWRkcmVzc19iaXRzKTsKIAotCQkvKiBTZW5kIHRoZSBSRUFEIGNvbW1hbmQgKG9wY29kZSArIGFkZHIpICovCi0JCWl4Z2JlX3NoaWZ0X291dF9lZXByb21fYml0cyhodywgcmVhZF9vcGNvZGUsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9FRVBST01fT1BDT0RFX0JJVFMpOwotCQlpeGdiZV9zaGlmdF9vdXRfZWVwcm9tX2JpdHMoaHcsICh1MTYpKG9mZnNldCoyKSwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3LT5lZXByb20uYWRkcmVzc19iaXRzKTsKLQotCQkvKiBSZWFkIHRoZSBkYXRhLiAqLwotCQl3b3JkX2luID0gaXhnYmVfc2hpZnRfaW5fZWVwcm9tX2JpdHMoaHcsIDE2KTsKLQkJKmRhdGEgPSAod29yZF9pbiA+PiA4KSB8ICh3b3JkX2luIDw8IDgpOworCQkJLyogUmVhZCB0aGUgZGF0YS4gKi8KKwkJCXdvcmRfaW4gPSBpeGdiZV9zaGlmdF9pbl9lZXByb21fYml0cyhodywgMTYpOworCQkJZGF0YVtpXSA9ICh3b3JkX2luID4+IDgpIHwgKHdvcmRfaW4gPDwgOCk7CisJCX0KIAogCQkvKiBFbmQgdGhpcyByZWFkIG9wZXJhdGlvbiAqLwogCQlpeGdiZV9yZWxlYXNlX2VlcHJvbShodyk7CiAJfQogCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfcmVhZF9lZXByb21fYml0X2JhbmdfZ2VuZXJpYyAtIFJlYWQgRUVQUk9NIHdvcmQgdXNpbmcgYml0LWJhbmcKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQG9mZnNldDogb2Zmc2V0IHdpdGhpbiB0aGUgRUVQUk9NIHRvIGJlIHJlYWQKKyAqICBAZGF0YTogcmVhZCAxNiBiaXQgdmFsdWUgZnJvbSBFRVBST00KKyAqCisgKiAgUmVhZHMgMTYgYml0IHZhbHVlIGZyb20gRUVQUk9NIHRocm91Z2ggYml0LWJhbmcgbWV0aG9kCisgKiovCitzMzIgaXhnYmVfcmVhZF9lZXByb21fYml0X2JhbmdfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgb2Zmc2V0LAorCQkJCSAgICAgICB1MTYgKmRhdGEpCit7CisJczMyIHN0YXR1czsKKworCWh3LT5lZXByb20ub3BzLmluaXRfcGFyYW1zKGh3KTsKKworCWlmIChvZmZzZXQgPj0gaHctPmVlcHJvbS53b3JkX3NpemUpIHsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX0VFUFJPTTsKKwkJZ290byBvdXQ7CisJfQorCisJc3RhdHVzID0gaXhnYmVfcmVhZF9lZXByb21fYnVmZmVyX2JpdF9iYW5nKGh3LCBvZmZzZXQsIDEsIGRhdGEpOworCitvdXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfcmVhZF9lZXJkX2J1ZmZlcl9nZW5lcmljIC0gUmVhZCBFRVBST00gd29yZChzKSB1c2luZyBFRVJECisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBvZmZzZXQ6IG9mZnNldCBvZiB3b3JkIGluIHRoZSBFRVBST00gdG8gcmVhZAorICogIEB3b3JkczogbnVtYmVyIG9mIHdvcmQocykKKyAqICBAZGF0YTogMTYgYml0IHdvcmQocykgZnJvbSB0aGUgRUVQUk9NCisgKgorICogIFJlYWRzIGEgMTYgYml0IHdvcmQocykgZnJvbSB0aGUgRUVQUk9NIHVzaW5nIHRoZSBFRVJEIHJlZ2lzdGVyLgorICoqLworczMyIGl4Z2JlX3JlYWRfZWVyZF9idWZmZXJfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgb2Zmc2V0LAorCQkJCSAgIHUxNiB3b3JkcywgdTE2ICpkYXRhKQoreworCXUzMiBlZXJkOworCXMzMiBzdGF0dXMgPSAwOworCXUzMiBpOworCisJaHctPmVlcHJvbS5vcHMuaW5pdF9wYXJhbXMoaHcpOworCisJaWYgKHdvcmRzID09IDApIHsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChvZmZzZXQgPj0gaHctPmVlcHJvbS53b3JkX3NpemUpIHsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX0VFUFJPTTsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHdvcmRzOyBpKyspIHsKKwkJZWVyZCA9ICgob2Zmc2V0ICsgaSkgPDwgSVhHQkVfRUVQUk9NX1JXX0FERFJfU0hJRlQpICsKKwkJICAgICAgIElYR0JFX0VFUFJPTV9SV19SRUdfU1RBUlQ7CisKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FRVJELCBlZXJkKTsKKwkJc3RhdHVzID0gaXhnYmVfcG9sbF9lZXJkX2Vld3JfZG9uZShodywgSVhHQkVfTlZNX1BPTExfUkVBRCk7CisKKwkJaWYgKHN0YXR1cyA9PSAwKSB7CisJCQlkYXRhW2ldID0gKElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9FRVJEKSA+PgorCQkJCSAgIElYR0JFX0VFUFJPTV9SV19SRUdfREFUQSk7CisJCX0gZWxzZSB7CisJCQlod19kYmcoaHcsICJFZXByb20gcmVhZCB0aW1lZCBvdXRcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CitvdXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfZGV0ZWN0X2VlcHJvbV9wYWdlX3NpemVfZ2VuZXJpYyAtIERldGVjdCBFRVBST00gcGFnZSBzaXplCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBvZmZzZXQ6IG9mZnNldCB3aXRoaW4gdGhlIEVFUFJPTSB0byBiZSB1c2VkIGFzIGEgc2NyYXRjaCBwYWQKKyAqCisgKiAgRGlzY292ZXIgRUVQUk9NIHBhZ2Ugc2l6ZSBieSB3cml0aW5nIG1hcmNoaW5nIGRhdGEgYXQgZ2l2ZW4gb2Zmc2V0LgorICogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgd2hlbiB3ZSBhcmUgd3JpdGluZyBhIG5ldyBsYXJnZSBidWZmZXIKKyAqICBhdCBnaXZlbiBvZmZzZXQgc28gdGhlIGRhdGEgd291bGQgYmUgb3ZlcndyaXR0ZW4gYW55d2F5LgorICoqLworc3RhdGljIHMzMiBpeGdiZV9kZXRlY3RfZWVwcm9tX3BhZ2Vfc2l6ZV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsCisJCQkJCQkgdTE2IG9mZnNldCkKK3sKKwl1MTYgZGF0YVtJWEdCRV9FRVBST01fUEFHRV9TSVpFX01BWF07CisJczMyIHN0YXR1cyA9IDA7CisJdTE2IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSVhHQkVfRUVQUk9NX1BBR0VfU0laRV9NQVg7IGkrKykKKwkJZGF0YVtpXSA9IGk7CisKKwlody0+ZWVwcm9tLndvcmRfcGFnZV9zaXplID0gSVhHQkVfRUVQUk9NX1BBR0VfU0laRV9NQVg7CisJc3RhdHVzID0gaXhnYmVfd3JpdGVfZWVwcm9tX2J1ZmZlcl9iaXRfYmFuZyhodywgb2Zmc2V0LAorCQkJCQkgICAgIElYR0JFX0VFUFJPTV9QQUdFX1NJWkVfTUFYLCBkYXRhKTsKKwlody0+ZWVwcm9tLndvcmRfcGFnZV9zaXplID0gMDsKKwlpZiAoc3RhdHVzICE9IDApCisJCWdvdG8gb3V0OworCisJc3RhdHVzID0gaXhnYmVfcmVhZF9lZXByb21fYnVmZmVyX2JpdF9iYW5nKGh3LCBvZmZzZXQsIDEsIGRhdGEpOworCWlmIChzdGF0dXMgIT0gMCkKKwkJZ290byBvdXQ7CisKKwkvKgorCSAqIFdoZW4gd3JpdGluZyBpbiBidXJzdCBtb3JlIHRoYW4gdGhlIGFjdHVhbCBwYWdlIHNpemUKKwkgKiBFRVBST00gYWRkcmVzcyB3cmFwcyBhcm91bmQgY3VycmVudCBwYWdlLgorCSAqLworCWh3LT5lZXByb20ud29yZF9wYWdlX3NpemUgPSBJWEdCRV9FRVBST01fUEFHRV9TSVpFX01BWCAtIGRhdGFbMF07CisKKwlod19kYmcoaHcsICJEZXRlY3RlZCBFRVBST00gcGFnZSBzaXplID0gJWQgd29yZHMuIiwKKwkgICAgICAgaHctPmVlcHJvbS53b3JkX3BhZ2Vfc2l6ZSk7CiBvdXQ6CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTcxMiwzMyArMTAxMyw3NSBAQAogICoqLwogczMyIGl4Z2JlX3JlYWRfZWVyZF9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiAqZGF0YSkKIHsKLQl1MzIgZWVyZDsKLQlzMzIgc3RhdHVzOworCXJldHVybiBpeGdiZV9yZWFkX2VlcmRfYnVmZmVyX2dlbmVyaWMoaHcsIG9mZnNldCwgMSwgZGF0YSk7Cit9CisKKy8qKgorICogIGl4Z2JlX3dyaXRlX2Vld3JfYnVmZmVyX2dlbmVyaWMgLSBXcml0ZSBFRVBST00gd29yZChzKSB1c2luZyBFRVdSCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBvZmZzZXQ6IG9mZnNldCBvZiAgd29yZCBpbiB0aGUgRUVQUk9NIHRvIHdyaXRlCisgKiAgQHdvcmRzOiBudW1iZXIgb2Ygd29yZHMKKyAqICBAZGF0YTogd29yZChzKSB3cml0ZSB0byB0aGUgRUVQUk9NCisgKgorICogIFdyaXRlIGEgMTYgYml0IHdvcmQocykgdG8gdGhlIEVFUFJPTSB1c2luZyB0aGUgRUVXUiByZWdpc3Rlci4KKyAqKi8KK3MzMiBpeGdiZV93cml0ZV9lZXdyX2J1ZmZlcl9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiBvZmZzZXQsCisJCQkJICAgIHUxNiB3b3JkcywgdTE2ICpkYXRhKQoreworCXUzMiBlZXdyOworCXMzMiBzdGF0dXMgPSAwOworCXUxNiBpOwogCiAJaHctPmVlcHJvbS5vcHMuaW5pdF9wYXJhbXMoaHcpOwogCisJaWYgKHdvcmRzID09IDApIHsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX0lOVkFMSURfQVJHVU1FTlQ7CisJCWdvdG8gb3V0OworCX0KKwogCWlmIChvZmZzZXQgPj0gaHctPmVlcHJvbS53b3JkX3NpemUpIHsKIAkJc3RhdHVzID0gSVhHQkVfRVJSX0VFUFJPTTsKIAkJZ290byBvdXQ7CiAJfQogCi0JZWVyZCA9IChvZmZzZXQgPDwgSVhHQkVfRUVQUk9NX1JXX0FERFJfU0hJRlQpICsKLQkgICAgICAgSVhHQkVfRUVQUk9NX1JXX1JFR19TVEFSVDsKKwlmb3IgKGkgPSAwOyBpIDwgd29yZHM7IGkrKykgeworCQllZXdyID0gKChvZmZzZXQgKyBpKSA8PCBJWEdCRV9FRVBST01fUldfQUREUl9TSElGVCkgfAorCQkgICAgICAgKGRhdGFbaV0gPDwgSVhHQkVfRUVQUk9NX1JXX1JFR19EQVRBKSB8CisJCSAgICAgICBJWEdCRV9FRVBST01fUldfUkVHX1NUQVJUOwogCi0JSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FRVJELCBlZXJkKTsKLQlzdGF0dXMgPSBpeGdiZV9wb2xsX2VlcmRfZWV3cl9kb25lKGh3LCBJWEdCRV9OVk1fUE9MTF9SRUFEKTsKKwkJc3RhdHVzID0gaXhnYmVfcG9sbF9lZXJkX2Vld3JfZG9uZShodywgSVhHQkVfTlZNX1BPTExfV1JJVEUpOworCQlpZiAoc3RhdHVzICE9IDApIHsKKwkJCWh3X2RiZyhodywgIkVlcHJvbSB3cml0ZSBFRVdSIHRpbWVkIG91dFxuIik7CisJCQlnb3RvIG91dDsKKwkJfQogCi0JaWYgKHN0YXR1cyA9PSAwKQotCQkqZGF0YSA9IChJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRUVSRCkgPj4KLQkJICAgICAgICAgSVhHQkVfRUVQUk9NX1JXX1JFR19EQVRBKTsKLQllbHNlCi0JCWh3X2RiZyhodywgIkVlcHJvbSByZWFkIHRpbWVkIG91dFxuIik7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUVXUiwgZWV3cik7CisKKwkJc3RhdHVzID0gaXhnYmVfcG9sbF9lZXJkX2Vld3JfZG9uZShodywgSVhHQkVfTlZNX1BPTExfV1JJVEUpOworCQlpZiAoc3RhdHVzICE9IDApIHsKKwkJCWh3X2RiZyhodywgIkVlcHJvbSB3cml0ZSBFRVdSIHRpbWVkIG91dFxuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KIAogb3V0OgogCXJldHVybiBzdGF0dXM7CiB9CiAKIC8qKgorICogIGl4Z2JlX3dyaXRlX2Vld3JfZ2VuZXJpYyAtIFdyaXRlIEVFUFJPTSB3b3JkIHVzaW5nIEVFV1IKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQG9mZnNldDogb2Zmc2V0IG9mICB3b3JkIGluIHRoZSBFRVBST00gdG8gd3JpdGUKKyAqICBAZGF0YTogd29yZCB3cml0ZSB0byB0aGUgRUVQUk9NCisgKgorICogIFdyaXRlIGEgMTYgYml0IHdvcmQgdG8gdGhlIEVFUFJPTSB1c2luZyB0aGUgRUVXUiByZWdpc3Rlci4KKyAqKi8KK3MzMiBpeGdiZV93cml0ZV9lZXdyX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2IGRhdGEpCit7CisJcmV0dXJuIGl4Z2JlX3dyaXRlX2Vld3JfYnVmZmVyX2dlbmVyaWMoaHcsIG9mZnNldCwgMSwgJmRhdGEpOworfQorCisvKioKICAqICBpeGdiZV9wb2xsX2VlcmRfZWV3cl9kb25lIC0gUG9sbCBFRVJEIHJlYWQgb3IgRUVXUiB3cml0ZSBzdGF0dXMKICAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKiAgQGVlX3JlZzogRUVQUk9NIGZsYWcgZm9yIHBvbGxpbmcKQEAgLTc0Niw3ICsxMDg5LDcgQEAKICAqICBQb2xscyB0aGUgc3RhdHVzIGJpdCAoYml0IDEpIG9mIHRoZSBFRVJEIG9yIEVFV1IgdG8gZGV0ZXJtaW5lIHdoZW4gdGhlCiAgKiAgcmVhZCBvciB3cml0ZSBpcyBkb25lIHJlc3BlY3RpdmVseS4KICAqKi8KLXMzMiBpeGdiZV9wb2xsX2VlcmRfZWV3cl9kb25lKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBlZV9yZWcpCitzdGF0aWMgczMyIGl4Z2JlX3BvbGxfZWVyZF9lZXdyX2RvbmUoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIGVlX3JlZykKIHsKIAl1MzIgaTsKIAl1MzIgcmVnOwpAQCAtODQ2LDYgKzExODksMjggQEAKIAkJdWRlbGF5KDUwKTsKIAl9CiAKKwlpZiAoaSA9PSB0aW1lb3V0KSB7CisJCWh3X2RiZyhodywgIkRyaXZlciBjYW4ndCBhY2Nlc3MgdGhlIEVlcHJvbSAtIFNNQkkgU2VtYXBob3JlICIKKwkJICAgICAgICJub3QgZ3JhbnRlZC5cbiIpOworCQkvKgorCQkgKiB0aGlzIHJlbGVhc2UgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCBiZWNhdXNlIG91ciBhdHRlbXB0cworCQkgKiBhYm92ZSB0byBnZXQgdGhlIHNlbWFwaG9yZSBtYXkgaGF2ZSBzdWNjZWVkZWQsIGFuZCBpZiB0aGVyZQorCQkgKiB3YXMgYSB0aW1lb3V0LCB3ZSBzaG91bGQgdW5jb25kaXRpb25hbGx5IGNsZWFyIHRoZSBzZW1hcGhvcmUKKwkJICogYml0cyB0byBmcmVlIHRoZSBkcml2ZXIgdG8gbWFrZSBwcm9ncmVzcworCQkgKi8KKwkJaXhnYmVfcmVsZWFzZV9lZXByb21fc2VtYXBob3JlKGh3KTsKKworCQl1ZGVsYXkoNTApOworCQkvKgorCQkgKiBvbmUgbGFzdCB0cnkKKwkJICogSWYgdGhlIFNNQkkgYml0IGlzIDAgd2hlbiB3ZSByZWFkIGl0LCB0aGVuIHRoZSBiaXQgd2lsbCBiZQorCQkgKiBzZXQgYW5kIHdlIGhhdmUgdGhlIHNlbWFwaG9yZQorCQkgKi8KKwkJc3dzbSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9TV1NNKTsKKwkJaWYgKCEoc3dzbSAmIElYR0JFX1NXU01fU01CSSkpCisJCQlzdGF0dXMgPSAwOworCX0KKwogCS8qIE5vdyBnZXQgdGhlIHNlbWFwaG9yZSBiZXR3ZWVuIFNXL0ZXIHRocm91Z2ggdGhlIFNXRVNNQkkgYml0ICovCiAJaWYgKHN0YXR1cyA9PSAwKSB7CiAJCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKQEAgLTExMTIsOCArMTQ3NywxMiBAQAogCiAJaHctPm1hYy5vcHMucmVsZWFzZV9zd2Z3X3N5bmMoaHcsIElYR0JFX0dTU1JfRUVQX1NNKTsKIAotCS8qIERlbGF5IGJlZm9yZSBhdHRlbXB0IHRvIG9idGFpbiBzZW1hcGhvcmUgYWdhaW4gdG8gYWxsb3cgRlcgYWNjZXNzICovCi0JbXNsZWVwKGh3LT5lZXByb20uc2VtYXBob3JlX2RlbGF5KTsKKwkvKgorCSAqIERlbGF5IGJlZm9yZSBhdHRlbXB0IHRvIG9idGFpbiBzZW1hcGhvcmUgYWdhaW4gdG8gYWxsb3cgRlcKKwkgKiBhY2Nlc3MuIHNlbWFwaG9yZV9kZWxheSBpcyBpbiBtcyB3ZSBuZWVkIHVzIGZvciB1c2xlZXBfcmFuZ2UKKwkgKi8KKwl1c2xlZXBfcmFuZ2UoaHctPmVlcHJvbS5zZW1hcGhvcmVfZGVsYXkgKiAxMDAwLAorCQkgICAgIGh3LT5lZXByb20uc2VtYXBob3JlX2RlbGF5ICogMjAwMCk7CiB9CiAKIC8qKgpAQCAtMjE4OSw3ICsyNTU4LDcgQEAKIAkJICogdGhyZWFkIGN1cnJlbnRseSB1c2luZyByZXNvdXJjZSAoc3dtYXNrKQogCQkgKi8KIAkJaXhnYmVfcmVsZWFzZV9lZXByb21fc2VtYXBob3JlKGh3KTsKLQkJbXNsZWVwKDUpOworCQl1c2xlZXBfcmFuZ2UoNTAwMCwgMTAwMDApOwogCQl0aW1lb3V0LS07CiAJfQogCkBAIC0yMjYzLDcgKzI2MzIsNyBAQAogCQlhdXRvY19yZWcgfD0gSVhHQkVfQVVUT0NfQU5fUkVTVEFSVDsKIAkJYXV0b2NfcmVnIHw9IElYR0JFX0FVVE9DX0ZMVTsKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9BVVRPQywgYXV0b2NfcmVnKTsKLQkJbXNsZWVwKDEwKTsKKwkJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAJfQogCiAJbGVkX3JlZyAmPSB+SVhHQkVfTEVEX01PREVfTUFTSyhpbmRleCk7CkBAIC0yODgzLDMgKzMyNTIsMTggQEAKIAkJcGZ2ZnNwb29mICY9IH4oMSA8PCB2Zl90YXJnZXRfc2hpZnQpOwogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUEZWRlNQT09GKHZmX3RhcmdldF9yZWcpLCBwZnZmc3Bvb2YpOwogfQorCisvKioKKyAqICBpeGdiZV9nZXRfZGV2aWNlX2NhcHNfZ2VuZXJpYyAtIEdldCBhZGRpdGlvbmFsIGRldmljZSBjYXBhYmlsaXRpZXMKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGRldmljZV9jYXBzOiB0aGUgRUVQUk9NIHdvcmQgd2l0aCB0aGUgZXh0cmEgZGV2aWNlIGNhcGFiaWxpdGllcworICoKKyAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCB0aGUgRUVQUk9NIGxvY2F0aW9uIGZvciB0aGUgZGV2aWNlIGNhcGFiaWxpdGllcywKKyAqICBhbmQgcmV0dXJuIHRoZSB3b3JkIHRocm91Z2ggZGV2aWNlX2NhcHMuCisgKiovCitzMzIgaXhnYmVfZ2V0X2RldmljZV9jYXBzX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2ICpkZXZpY2VfY2FwcykKK3sKKwlody0+ZWVwcm9tLm9wcy5yZWFkKGh3LCBJWEdCRV9ERVZJQ0VfQ0FQUywgZGV2aWNlX2NhcHMpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5oCmluZGV4IDUwOGY2MzUuLjQ2YmU4M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5oCkBAIC0zNSw2ICszNSw3IEBACiBzMzIgaXhnYmVfaW5pdF9vcHNfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKIHMzMiBpeGdiZV9pbml0X2h3X2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodyk7CiBzMzIgaXhnYmVfc3RhcnRfaHdfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3MzMiBpeGdiZV9zdGFydF9od19nZW4yKHN0cnVjdCBpeGdiZV9odyAqaHcpOwogczMyIGl4Z2JlX2NsZWFyX2h3X2NudHJzX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodyk7CiBzMzIgaXhnYmVfcmVhZF9wYmFfc3RyaW5nX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggKnBiYV9udW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHBiYV9udW1fc2l6ZSk7CkBAIC00OCwxNCArNDksMjIgQEAKIAogczMyIGl4Z2JlX2luaXRfZWVwcm9tX3BhcmFtc19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcpOwogczMyIGl4Z2JlX3dyaXRlX2VlcHJvbV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiBkYXRhKTsKK3MzMiBpeGdiZV93cml0ZV9lZXByb21fYnVmZmVyX2JpdF9iYW5nX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwKKwkJCQkJICAgICAgIHUxNiB3b3JkcywgdTE2ICpkYXRhKTsKIHMzMiBpeGdiZV9yZWFkX2VlcmRfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpOworczMyIGl4Z2JlX3JlYWRfZWVyZF9idWZmZXJfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgb2Zmc2V0LAorCQkJCSAgIHUxNiB3b3JkcywgdTE2ICpkYXRhKTsKK3MzMiBpeGdiZV93cml0ZV9lZXdyX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2IGRhdGEpOworczMyIGl4Z2JlX3dyaXRlX2Vld3JfYnVmZmVyX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwKKwkJCQkgICAgdTE2IHdvcmRzLCB1MTYgKmRhdGEpOwogczMyIGl4Z2JlX3JlYWRfZWVwcm9tX2JpdF9iYW5nX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqZGF0YSk7CitzMzIgaXhnYmVfcmVhZF9lZXByb21fYnVmZmVyX2JpdF9iYW5nX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwKKwkJCQkJICAgICAgdTE2IHdvcmRzLCB1MTYgKmRhdGEpOwogdTE2IGl4Z2JlX2NhbGNfZWVwcm9tX2NoZWNrc3VtX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodyk7CiBzMzIgaXhnYmVfdmFsaWRhdGVfZWVwcm9tX2NoZWNrc3VtX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKmNoZWNrc3VtX3ZhbCk7CiBzMzIgaXhnYmVfdXBkYXRlX2VlcHJvbV9jaGVja3N1bV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcpOwotczMyIGl4Z2JlX3BvbGxfZWVyZF9lZXdyX2RvbmUoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIGVlX3JlZyk7CiAKIHMzMiBpeGdiZV9zZXRfcmFyX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIGluZGV4LCB1OCAqYWRkciwgdTMyIHZtZHEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBlbmFibGVfYWRkcik7CkBAIC04OSw2ICs5OCw3IEBACiBzMzIgaXhnYmVfYmxpbmtfbGVkX3N0b3BfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgaW5kZXgpOwogdm9pZCBpeGdiZV9zZXRfbWFjX2FudGlfc3Bvb2Zpbmcoc3RydWN0IGl4Z2JlX2h3ICpodywgYm9vbCBlbmFibGUsIGludCBwZik7CiB2b2lkIGl4Z2JlX3NldF92bGFuX2FudGlfc3Bvb2Zpbmcoc3RydWN0IGl4Z2JlX2h3ICpodywgYm9vbCBlbmFibGUsIGludCB2Zik7CitzMzIgaXhnYmVfZ2V0X2RldmljZV9jYXBzX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2ICpkZXZpY2VfY2Fwcyk7CiAKICNkZWZpbmUgSVhHQkVfV1JJVEVfUkVHKGEsIHJlZywgdmFsdWUpIHdyaXRlbCgodmFsdWUpLCAoKGEpLT5od19hZGRyICsgKHJlZykpKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTguYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OC5jCmluZGV4IDFiYzU3ZTUuLjc3MWQwMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OC5jCkBAIC0yODksNyArMjg5LDcgQEAKICAqIENvbmZpZ3VyZSBxdWV1ZSBzdGF0aXN0aWNzIHJlZ2lzdGVycywgYWxsIHF1ZXVlcyBiZWxvbmdpbmcgdG8gc2FtZSB0cmFmZmljCiAgKiBjbGFzcyB1c2VzIGEgc2luZ2xlIHNldCBvZiBxdWV1ZSBzdGF0aXN0aWNzIGNvdW50ZXJzLgogICovCi1zMzIgaXhnYmVfZGNiX2NvbmZpZ190Y19zdGF0c184MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQorc3RhdGljIHMzMiBpeGdiZV9kY2JfY29uZmlnX3RjX3N0YXRzXzgyNTk4KHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7CiAJdTMyIHJlZyA9IDA7CiAJdTggIGkgICA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTkuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OS5jCmluZGV4IDAyNWFmOGMuLmQ1MGNmNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OS5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OS5jCkBAIC0zOSwzNiArMzksNTIgQEAKICAqLwogc3RhdGljIHMzMiBpeGdiZV9kY2JfY29uZmlnX3BhY2tldF9idWZmZXJzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IHJ4X3BiYSkKIHsKLQlzMzIgcmV0X3ZhbCA9IDA7Ci0JdTMyIHZhbHVlID0gSVhHQkVfUlhQQlNJWkVfNjRLQjsKKwlpbnQgbnVtX3RjcyA9IElYR0JFX01BWF9QQUNLRVRfQlVGRkVSUzsKKwl1MzIgcnhfcGJfc2l6ZSA9IGh3LT5tYWMucnhfcGJfc2l6ZSA8PCBJWEdCRV9SWFBCU0laRV9TSElGVDsKKwl1MzIgcnhwa3RzaXplOworCXUzMiB0eHBrdHNpemU7CisJdTMyIHR4cGJ0aHJlc2g7CiAJdTggIGkgPSAwOwogCi0JLyogU2V0dXAgUnggcGFja2V0IGJ1ZmZlciBzaXplcyAqLwotCXN3aXRjaCAocnhfcGJhKSB7Ci0JY2FzZSBwYmFfODBfNDg6Ci0JCS8qIFNldHVwIHRoZSBmaXJzdCBmb3VyIGF0IDgwS0IgKi8KLQkJdmFsdWUgPSBJWEdCRV9SWFBCU0laRV84MEtCOwotCQlmb3IgKDsgaSA8IDQ7IGkrKykKLQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhQQlNJWkUoaSksIHZhbHVlKTsKLQkJLyogU2V0dXAgdGhlIGxhc3QgZm91ciBhdCA0OEtCLi4uZG9uJ3QgcmUtaW5pdCBpICovCi0JCXZhbHVlID0gSVhHQkVfUlhQQlNJWkVfNDhLQjsKLQkJLyogRmFsbCBUaHJvdWdoICovCi0JY2FzZSBwYmFfZXF1YWw6Ci0JZGVmYXVsdDoKLQkJZm9yICg7IGkgPCBJWEdCRV9NQVhfUEFDS0VUX0JVRkZFUlM7IGkrKykKLQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhQQlNJWkUoaSksIHZhbHVlKTsKLQotCQkvKiBTZXR1cCBUeCBwYWNrZXQgYnVmZmVyIHNpemVzICovCi0JCWZvciAoaSA9IDA7IGkgPCBJWEdCRV9NQVhfUEFDS0VUX0JVRkZFUlM7IGkrKykgewotCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9UWFBCU0laRShpKSwKLQkJCSAgICAgICAgICAgICAgICBJWEdCRV9UWFBCU0laRV8yMEtCKTsKLQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVFhQQlRIUkVTSChpKSwKLQkJCSAgICAgICAgICAgICAgICBJWEdCRV9UWFBCVEhSRVNIX0RDQik7Ci0JCX0KLQkJYnJlYWs7CisJLyoKKwkgKiBUaGlzIHJlYWxseSBtZWFucyBjb25maWd1cmUgdGhlIGZpcnN0IGhhbGYgb2YgdGhlIFRDcworCSAqIChUcmFmZmljIENsYXNzZXMpIHRvIHVzZSA1Lzggb2YgdGhlIFJ4IHBhY2tldCBidWZmZXIKKwkgKiBzcGFjZS4gIFRvIGRldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGZvciBlYWNoIFRDLAorCSAqIHdlIGFyZSBtdWx0aXBseWluZyB0aGUgYXZlcmFnZSBzaXplIGJ5IDUvNCBhbmQgYXBwbHlpbmcKKwkgKiBpdCB0byBoYWxmIG9mIHRoZSB0cmFmZmljIGNsYXNzZXMuCisJICovCisJaWYgKHJ4X3BiYSA9PSBwYmFfODBfNDgpIHsKKwkJcnhwa3RzaXplID0gKHJ4X3BiX3NpemUgKiA1KSAvIChudW1fdGNzICogNCk7CisJCXJ4X3BiX3NpemUgLT0gcnhwa3RzaXplICogKG51bV90Y3MgLyAyKTsKKwkJZm9yICg7IGkgPCAobnVtX3RjcyAvIDIpOyBpKyspCisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JYUEJTSVpFKGkpLCByeHBrdHNpemUpOwogCX0KIAotCXJldHVybiByZXRfdmFsOworCS8qIERpdmlkZSB0aGUgcmVtYWluaW5nIFJ4IHBhY2tldCBidWZmZXIgZXZlbmx5IGFtb25nIHRoZSBUQ3MgKi8KKwlyeHBrdHNpemUgPSByeF9wYl9zaXplIC8gKG51bV90Y3MgLSBpKTsKKwlmb3IgKDsgaSA8IG51bV90Y3M7IGkrKykKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SWFBCU0laRShpKSwgcnhwa3RzaXplKTsKKworCS8qCisJICogU2V0dXAgVHggcGFja2V0IGJ1ZmZlciBhbmQgdGhyZXNob2xkIGVxdWFsbHkgZm9yIGFsbCBUQ3MKKwkgKiBUWFBCVEhSRVNIIHJlZ2lzdGVyIGlzIHNldCBpbiBLIHNvIGRpdmlkZSBieSAxMDI0IGFuZCBzdWJ0cmFjdAorCSAqIDEwIHNpbmNlIHRoZSBsYXJnZXN0IHBhY2tldCB3ZSBzdXBwb3J0IGlzIGp1c3Qgb3ZlciA5Sy4KKwkgKi8KKwl0eHBrdHNpemUgPSBJWEdCRV9UWFBCU0laRV9NQVggLyBudW1fdGNzOworCXR4cGJ0aHJlc2ggPSAodHhwa3RzaXplIC8gMTAyNCkgLSBJWEdCRV9UWFBLVF9TSVpFX01BWDsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3RjczsgaSsrKSB7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVFhQQlNJWkUoaSksIHR4cGt0c2l6ZSk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVFhQQlRIUkVTSChpKSwgdHhwYnRocmVzaCk7CisJfQorCisJLyogQ2xlYXIgdW51c2VkIFRDcywgaWYgYW55LCB0byB6ZXJvIGJ1ZmZlciBzaXplKi8KKwlmb3IgKDsgaSA8IE1BWF9UUkFGRklDX0NMQVNTOyBpKyspIHsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SWFBCU0laRShpKSwgMCk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVFhQQlNJWkUoaSksIDApOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1RYUEJUSFJFU0goaSksIDApOworCX0KKworCXJldHVybiAwOwogfQogCiAvKioKQEAgLTI4NSwxMiArMzAxLDE3IEBACiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNDRkcsIHJlZyk7CiAJCS8qCiAJCSAqIEVuYWJsZSBSZWNlaXZlIFBGQwotCQkgKiBXZSB3aWxsIGFsd2F5cyBob25vciBYT0ZGIGZyYW1lcyB3ZSByZWNlaXZlIHdoZW4KLQkJICogd2UgYXJlIGluIFBGQyBtb2RlLgorCQkgKiA4MjU5OSB3aWxsIGFsd2F5cyBob25vciBYT0ZGIGZyYW1lcyB3ZSByZWNlaXZlIHdoZW4KKwkJICogd2UgYXJlIGluIFBGQyBtb2RlIGhvd2V2ZXIgWDU0MCBvbmx5IGhvbm9ycyBlbmFibGVkCisJCSAqIHRyYWZmaWMgY2xhc3Nlcy4KIAkJICovCiAJCXJlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9NRkxDTik7CiAJCXJlZyAmPSB+SVhHQkVfTUZMQ05fUkZDRTsKIAkJcmVnIHw9IElYR0JFX01GTENOX1JQRkNFIHwgSVhHQkVfTUZMQ05fRFBGOworCisJCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjX1g1NDApCisJCQlyZWcgfD0gcGZjX2VuIDw8IElYR0JFX01GTENOX1JQRkNFX1NISUZUOworCiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTUZMQ04sIHJlZyk7CiAKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk5LmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTkuaAppbmRleCAxNDhmZDhiLi4yZGU3MWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTkuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTkuaApAQCAtOTIsOCArOTIsMTAgQEAKICNkZWZpbmUgSVhHQkVfUlhQQlNJWkVfNjRLQiAgICAgMHgwMDAxMDAwMCAvKiA2NEtCIFBhY2tldCBCdWZmZXIgKi8KICNkZWZpbmUgSVhHQkVfUlhQQlNJWkVfODBLQiAgICAgMHgwMDAxNDAwMCAvKiA4MEtCIFBhY2tldCBCdWZmZXIgKi8KICNkZWZpbmUgSVhHQkVfUlhQQlNJWkVfMTI4S0IgICAgMHgwMDAyMDAwMCAvKiAxMjhLQiBQYWNrZXQgQnVmZmVyICovCisjZGVmaW5lIElYR0JFX1RYUEJTSVpFX01BWAkweDAwMDI4MDAwIC8qIDE2MEtCIFBhY2tldCBCdWZmZXIqLwogCiAjZGVmaW5lIElYR0JFX1RYUEJUSFJFU0hfRENCICAgIDB4QSAgICAgICAgLyogVEhSRVNIIHZhbHVlIGZvciBEQ0IgbW9kZSAqLworI2RlZmluZSBJWEdCRV9UWFBLVF9TSVpFX01BWCAgICAweEEgICAgICAgIC8qIE1heCBUeCBQYWNrZXQgc2l6ZSAgKi8KIAogLyogU0VDVFhNSU5JRkcgRENCICovCiAjZGVmaW5lIElYR0JFX1NFQ1RYX0RDQgkJMHgwMDAwMUYwMCAvKiBEQ0IgVFggQnVmZmVyIElGRyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiX25sLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYwppbmRleCAzMjdjODYxLi41ZTdlZDIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYwpAQCAtMzQ3LDE4ICszNDcsMjggQEAKIHN0YXRpYyB1OCBpeGdiZV9kY2JubF9zZXRfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBkY2JfYXBwIGFwcCA9IHsKKwkJCSAgICAgIC5zZWxlY3RvciA9IERDQl9BUFBfSURUWVBFX0VUSFRZUEUsCisJCQkgICAgICAucHJvdG9jb2wgPSBFVEhfUF9GQ09FLAorCQkJICAgICB9OworCXU4IHVwID0gZGNiX2dldGFwcChuZXRkZXYsICZhcHApOwogCWludCByZXQ7CiAKLQlpZiAoIWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHx8Ci0JICAgICEoYWRhcHRlci0+ZGNieF9jYXAgJiBEQ0JfQ0FQX0RDQlhfVkVSX0NFRSkpCi0JCXJldHVybiBEQ0JfTk9fSFdfQ0hHOwotCiAJcmV0ID0gaXhnYmVfY29weV9kY2JfY2ZnKCZhZGFwdGVyLT50ZW1wX2RjYl9jZmcsICZhZGFwdGVyLT5kY2JfY2ZnLAogCQkJCSBNQVhfVFJBRkZJQ19DTEFTUyk7Ci0KIAlpZiAocmV0KQogCQlyZXR1cm4gRENCX05PX0hXX0NIRzsKIAorCS8qIEluIElFRUUgbW9kZSBhcHAgZGF0YSBtdXN0IGJlIHBhcnNlZCBpbnRvIERDQlggZm9ybWF0IGZvcgorCSAqIGhhcmR3YXJlIHJvdXRpbmVzLgorCSAqLworCWlmIChhZGFwdGVyLT5kY2J4X2NhcCAmIERDQl9DQVBfRENCWF9WRVJfSUVFRSkKKwkJdXAgPSAoMSA8PCB1cCk7CisKKyNpZmRlZiBJWEdCRV9GQ09FCisJaWYgKHVwICYmICh1cCAhPSAoMSA8PCBhZGFwdGVyLT5mY29lLnVwKSkpCisJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9BUFBfVVBDSEc7CisKIAkvKgogCSAqIE9ubHkgdGFrZSBkb3duIHRoZSBhZGFwdGVyIGlmIGFuIGFwcCBjaGFuZ2Ugb2NjdXJyZWQuIEZDb0UKIAkgKiBtYXkgc2h1ZmZsZSB0eCByaW5ncyBpbiB0aGlzIGNhc2UgYW5kIHRoaXMgY2FuIG5vdCBiZSBkb25lCkBAIC0zNjYsMTIgKzM3NiwxNSBAQAogCSAqLwogCWlmIChhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCAmIEJJVF9BUFBfVVBDSEcpIHsKIAkJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19JWEdCRV9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCi0JCQltc2xlZXAoMSk7CisJCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CisKKwkJaXhnYmVfZmNvZV9zZXRhcHAoYWRhcHRlciwgdXApOwogCiAJCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCQluZXRkZXYtPm5ldGRldl9vcHMtPm5kb19zdG9wKG5ldGRldik7CiAJCWl4Z2JlX2NsZWFyX2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7CiAJfQorI2VuZGlmCiAKIAlpZiAoYWRhcHRlci0+ZGNiX2NmZy5wZmNfbW9kZV9lbmFibGUpIHsKIAkJc3dpdGNoIChhZGFwdGVyLT5ody5tYWMudHlwZSkgewpAQCAtMzk5LDEyICs0MTIsMTQgQEAKIAkJfQogCX0KIAorI2lmZGVmIElYR0JFX0ZDT0UKIAlpZiAoYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgJiBCSVRfQVBQX1VQQ0hHKSB7CiAJCWl4Z2JlX2luaXRfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTsKIAkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKIAkJCW5ldGRldi0+bmV0ZGV2X29wcy0+bmRvX29wZW4obmV0ZGV2KTsKIAkJcmV0ID0gRENCX0hXX0NIR19SU1Q7CiAJfQorI2VuZGlmCiAKIAlpZiAoYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgJiBCSVRfUEZDKSB7CiAJCXU4IHBmY19lbjsKQEAgLTU1OCw2OCArNTczLDYgQEAKIAlyZXR1cm4gZGNiX2dldGFwcChuZXRkZXYsICZhcHApOwogfQogCi0vKioKLSAqIGl4Z2JlX2RjYm5sX3NldGFwcCAtIHNldCB0aGUgRENCWCBhcHBsaWNhdGlvbiB1c2VyIHByaW9yaXR5Ci0gKiBAbmV0ZGV2IDogdGhlIGNvcnJlc3BvbmRpbmcgbmV0ZGV2Ci0gKiBAaWR0eXBlIDogaWRlbnRpZmllcyB0aGUgaWQgYXMgZXRoZXIgdHlwZSBvciBUQ1AvVURQIHBvcnQgbnVtYmVyCi0gKiBAaWQ6IGlkIGlzIGVpdGhlciBldGhlciB0eXBlIG9yIFRDUC9VRFAgcG9ydCBudW1iZXIKLSAqIEB1cDogdGhlIDgwMi4xcCB1c2VyIHByaW9yaXR5IGJpdG1hcAotICoKLSAqIFJldHVybnMgOiAwIG9uIHN1Y2Nlc3Mgb3IgMSBvbiBlcnJvcgotICovCi1zdGF0aWMgdTggaXhnYmVfZGNibmxfc2V0YXBwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGlkdHlwZSwgdTE2IGlkLCB1OCB1cCkKLXsKLQlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JdTggcnZhbCA9IDE7Ci0Jc3RydWN0IGRjYl9hcHAgYXBwID0gewotCQkJICAgICAgLnNlbGVjdG9yID0gaWR0eXBlLAotCQkJICAgICAgLnByb3RvY29sID0gaWQsCi0JCQkgICAgICAucHJpb3JpdHkgPSB1cAotCQkJICAgICB9OwotCi0JaWYgKCEoYWRhcHRlci0+ZGNieF9jYXAgJiBEQ0JfQ0FQX0RDQlhfVkVSX0NFRSkpCi0JCXJldHVybiBydmFsOwotCi0JcnZhbCA9IGRjYl9zZXRhcHAobmV0ZGV2LCAmYXBwKTsKLQotCXN3aXRjaCAoaWR0eXBlKSB7Ci0JY2FzZSBEQ0JfQVBQX0lEVFlQRV9FVEhUWVBFOgotI2lmZGVmIElYR0JFX0ZDT0UKLQkJaWYgKGlkID09IEVUSF9QX0ZDT0UpIHsKLQkJCXU4IG9sZF90YzsKLQotCQkJLyogR2V0IGN1cnJlbnQgcHJvZ3JhbW1lZCB0YyAqLwotCQkJb2xkX3RjID0gYWRhcHRlci0+ZmNvZS50YzsKLQkJCXJ2YWwgPSBpeGdiZV9mY29lX3NldGFwcChhZGFwdGVyLCB1cCk7Ci0KLQkJCWlmIChydmFsIHx8Ci0JCQkgICAhKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkgfHwKLQkJCSAgICEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZDT0VfRU5BQkxFRCkpCi0JCQkJYnJlYWs7Ci0KLQkJCS8qIFRoZSBGQ29FIGFwcGxpY2F0aW9uIHByaW9yaXR5IG1heSBiZSBjaGFuZ2VkIG11bHRpcGxlCi0JCQkgKiB0aW1lcyBpbiBxdWljayBzdWNjZXNzaW9uIHdpdGggc3dpdGNoZXMgdGhhdCBidWlsZCB1cAotCQkJICogVExWcy4gVG8gYXZvaWQgY3JlYXRpbmcgdW5lZWRlZCBkZXZpY2UgcmVzZXRzIHRoaXMKLQkJCSAqIGNoZWNrcyB0aGUgYWN0dWFsIEhXIGNvbmZpZ3VyYXRpb24gYW5kIGNsZWFycwotCQkJICogQklUX0FQUF9VUENIRyBpZiBhIEhXIGNvbmZpZ3VyYXRpb24gY2hhbmdlIGlzIG5vdAotCQkJICogbmVlZAotCQkJICovCi0JCQlpZiAob2xkX3RjID09IGFkYXB0ZXItPmZjb2UudGMpCi0JCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgJj0gfkJJVF9BUFBfVVBDSEc7Ci0JCQllbHNlCi0JCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0FQUF9VUENIRzsKLQkJfQotI2VuZGlmCi0JCWJyZWFrOwotCWNhc2UgRENCX0FQUF9JRFRZUEVfUE9SVE5VTToKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCXJldHVybiBydmFsOwotfQotCiBzdGF0aWMgaW50IGl4Z2JlX2RjYm5sX2llZWVfZ2V0ZXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgc3RydWN0IGllZWVfZXRzICpldHMpCiB7CkBAIC03NDUsMjUgKzY5OCwxNCBAQAogCiAJaWYgKCEoYWRhcHRlci0+ZGNieF9jYXAgJiBEQ0JfQ0FQX0RDQlhfVkVSX0lFRUUpKQogCQlyZXR1cm4gLUVJTlZBTDsKLSNpZmRlZiBJWEdCRV9GQ09FCi0JaWYgKGFwcC0+c2VsZWN0b3IgPT0gMSAmJiBhcHAtPnByb3RvY29sID09IEVUSF9QX0ZDT0UpIHsKLQkJaWYgKGFkYXB0ZXItPmZjb2UudGMgPT0gYXBwLT5wcmlvcml0eSkKLQkJCWdvdG8gc2V0YXBwOwogCi0JCS8qIEluIElFRUUgbW9kZSBtYXAgdXAgdG8gdGMgMToxICovCi0JCWFkYXB0ZXItPmZjb2UudGMgPSBhcHAtPnByaW9yaXR5OwotCQlhZGFwdGVyLT5mY29lLnVwID0gYXBwLT5wcmlvcml0eTsKLQotCQkvKiBGb3JjZSBoYXJkd2FyZSByZXNldCByZXF1aXJlZCB0byBwdXNoIEZDb0UKLQkJICogc2V0dXAgb24ge3R4fHJ4fV9yaW5ncwotCQkgKi8KLQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0FQUF9VUENIRzsKLQkJaXhnYmVfZGNibmxfc2V0X2FsbChkZXYpOwotCX0KLQotc2V0YXBwOgotI2VuZGlmCiAJZGNiX3NldGFwcChkZXYsIGFwcCk7CisKKyNpZmRlZiBJWEdCRV9GQ09FCisJaWYgKGFwcC0+c2VsZWN0b3IgPT0gMSAmJiBhcHAtPnByb3RvY29sID09IEVUSF9QX0ZDT0UgJiYKKwkgICAgYWRhcHRlci0+ZmNvZS50YyA9PSBhcHAtPnByaW9yaXR5KQorCQlpeGdiZV9kY2JubF9zZXRfYWxsKGRldik7CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApAQCAtODM4LDcgKzc4MCw2IEBACiAJLmdldHBmY3N0YXRlCT0gaXhnYmVfZGNibmxfZ2V0cGZjc3RhdGUsCiAJLnNldHBmY3N0YXRlCT0gaXhnYmVfZGNibmxfc2V0cGZjc3RhdGUsCiAJLmdldGFwcAkJPSBpeGdiZV9kY2JubF9nZXRhcHAsCi0JLnNldGFwcAkJPSBpeGdiZV9kY2JubF9zZXRhcHAsCiAJLmdldGRjYngJPSBpeGdiZV9kY2JubF9nZXRkY2J4LAogCS5zZXRkY2J4CT0gaXhnYmVfZGNibmxfc2V0ZGNieCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMKaW5kZXggNzYzODBhMi4uY2IxNTU1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYwpAQCAtODQsNiArODQsNyBAQAogCXsiaHdfcnNjX2ZsdXNoZWQiLCBJWEdCRV9TVEFUKHJzY190b3RhbF9mbHVzaCl9LAogCXsiZmRpcl9tYXRjaCIsIElYR0JFX1NUQVQoc3RhdHMuZmRpcm1hdGNoKX0sCiAJeyJmZGlyX21pc3MiLCBJWEdCRV9TVEFUKHN0YXRzLmZkaXJtaXNzKX0sCisJeyJmZGlyX292ZXJmbG93IiwgSVhHQkVfU1RBVChmZGlyX292ZXJmbG93KX0sCiAJeyJyeF9maWZvX2Vycm9ycyIsIElYR0JFX05FVERFVl9TVEFUKHJ4X2ZpZm9fZXJyb3JzKX0sCiAJeyJyeF9taXNzZWRfZXJyb3JzIiwgSVhHQkVfTkVUREVWX1NUQVQocnhfbWlzc2VkX2Vycm9ycyl9LAogCXsidHhfYWJvcnRlZF9lcnJvcnMiLCBJWEdCRV9ORVRERVZfU1RBVCh0eF9hYm9ydGVkX2Vycm9ycyl9LApAQCAtMTAyLDYgKzEwMywxMCBAQAogCXsiYWxsb2NfcnhfcGFnZV9mYWlsZWQiLCBJWEdCRV9TVEFUKGFsbG9jX3J4X3BhZ2VfZmFpbGVkKX0sCiAJeyJhbGxvY19yeF9idWZmX2ZhaWxlZCIsIElYR0JFX1NUQVQoYWxsb2NfcnhfYnVmZl9mYWlsZWQpfSwKIAl7InJ4X25vX2RtYV9yZXNvdXJjZXMiLCBJWEdCRV9TVEFUKGh3X3J4X25vX2RtYV9yZXNvdXJjZXMpfSwKKwl7Im9zMmJtY19yeF9ieV9ibWMiLCBJWEdCRV9TVEFUKHN0YXRzLm8yYmdwdGMpfSwKKwl7Im9zMmJtY190eF9ieV9ibWMiLCBJWEdCRV9TVEFUKHN0YXRzLmIyb3NwYyl9LAorCXsib3MyYm1jX3R4X2J5X2hvc3QiLCBJWEdCRV9TVEFUKHN0YXRzLm8yYnNwYyl9LAorCXsib3MyYm1jX3J4X2J5X2hvc3QiLCBJWEdCRV9TVEFUKHN0YXRzLmIyb2dwcmMpfSwKICNpZmRlZiBJWEdCRV9GQ09FCiAJeyJmY29lX2JhZF9mY2NyYyIsIElYR0JFX1NUQVQoc3RhdHMuZmNjcmMpfSwKIAl7InJ4X2Zjb2VfZHJvcHBlZCIsIElYR0JFX1NUQVQoc3RhdHMuZmNvZXJwZGMpfSwKQEAgLTI4OCwyMCArMjkzLDIwIEBACiAJaWYgKGxpbmtfdXApIHsKIAkJc3dpdGNoIChsaW5rX3NwZWVkKSB7CiAJCWNhc2UgSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw6Ci0JCQllY21kLT5zcGVlZCA9IFNQRUVEXzEwMDAwOworCQkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIFNQRUVEXzEwMDAwKTsKIAkJCWJyZWFrOwogCQljYXNlIElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEw6Ci0JCQllY21kLT5zcGVlZCA9IFNQRUVEXzEwMDA7CisJCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgU1BFRURfMTAwMCk7CiAJCQlicmVhazsKIAkJY2FzZSBJWEdCRV9MSU5LX1NQRUVEXzEwMF9GVUxMOgotCQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDA7CisJCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgU1BFRURfMTAwKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJCX0KIAkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJfSBlbHNlIHsKLQkJZWNtZC0+c3BlZWQgPSAtMTsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIC0xKTsKIAkJZWNtZC0+ZHVwbGV4ID0gLTE7CiAJfQogCkBAIC0zNDYsOSArMzUxLDEwIEBACiAJCX0KIAl9IGVsc2UgewogCQkvKiBpbiB0aGlzIGNhc2Ugd2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydCAxMEdiL0ZVTEwgKi8KKwkJdTMyIHNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoZWNtZCk7CiAJCWlmICgoZWNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgfHwKIAkJICAgIChlY21kLT5hZHZlcnRpc2luZyAhPSBBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCkgfHwKLQkJICAgIChlY21kLT5zcGVlZCArIGVjbWQtPmR1cGxleCAhPSBTUEVFRF8xMDAwMCArIERVUExFWF9GVUxMKSkKKwkJICAgIChzcGVlZCArIGVjbWQtPmR1cGxleCAhPSBTUEVFRF8xMDAwMCArIERVUExFWF9GVUxMKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtODQ2LDExICs4NTIsOCBAQAogCWlmICghZWVwcm9tX2J1ZmYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZm9yIChpID0gMDsgaSA8IGVlcHJvbV9sZW47IGkrKykgewotCQlpZiAoKHJldF92YWwgPSBody0+ZWVwcm9tLm9wcy5yZWFkKGh3LCBmaXJzdF93b3JkICsgaSwKLQkJICAgICZlZXByb21fYnVmZltpXSkpKQotCQkJYnJlYWs7Ci0JfQorCXJldF92YWwgPSBody0+ZWVwcm9tLm9wcy5yZWFkX2J1ZmZlcihodywgZmlyc3Rfd29yZCwgZWVwcm9tX2xlbiwKKwkJCQkJICAgICBlZXByb21fYnVmZik7CiAKIAkvKiBEZXZpY2UncyBlZXByb20gaXMgYWx3YXlzIGxpdHRsZS1lbmRpYW4sIHdvcmQgYWRkcmVzc2FibGUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZWVwcm9tX2xlbjsgaSsrKQpAQCAtOTMxLDcgKzkzNCw3IEBACiAJfQogCiAJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19JWEdCRV9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCi0JCW1zbGVlcCgxKTsKKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwogCiAJaWYgKCFuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpIHsKIAkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKQEAgLTEwMzAsOSArMTAzMyw2IEBACiAJCXJldHVybiBJWEdCRV9URVNUX0xFTjsKIAljYXNlIEVUSF9TU19TVEFUUzoKIAkJcmV0dXJuIElYR0JFX1NUQVRTX0xFTjsKLQljYXNlIEVUSF9TU19OVFVQTEVfRklMVEVSUzoKLQkJcmV0dXJuIEVUSFRPT0xfTUFYX05UVVBMRV9MSVNUX0VOVFJZICoKLQkJICAgICAgIEVUSFRPT0xfTUFYX05UVVBMRV9TVFJJTkdfUEVSX0VOVFJZOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CkBAIC0xMjM4LDQ2ICsxMjM4LDYyIEBACiAJeyAwLCAwLCAwLCAwIH0KIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgcmVnaXN0ZXJfdGVzdF9wYXR0ZXJuc1tdID0gewotCTB4NUE1QTVBNUEsIDB4QTVBNUE1QTUsIDB4MDAwMDAwMDAsIDB4RkZGRkZGRkYKLX07CitzdGF0aWMgYm9vbCByZWdfcGF0dGVybl90ZXN0KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1NjQgKmRhdGEsIGludCByZWcsCisJCQkgICAgIHUzMiBtYXNrLCB1MzIgd3JpdGUpCit7CisJdTMyIHBhdCwgdmFsLCBiZWZvcmU7CisJc3RhdGljIGNvbnN0IHUzMiB0ZXN0X3BhdHRlcm5bXSA9IHsKKwkJMHg1QTVBNUE1QSwgMHhBNUE1QTVBNSwgMHgwMDAwMDAwMCwgMHhGRkZGRkZGRn07CiAKLSNkZWZpbmUgUkVHX1BBVFRFUk5fVEVTVChSLCBNLCBXKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl1MzIgcGF0LCB2YWwsIGJlZm9yZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWZvciAocGF0ID0gMDsgcGF0IDwgQVJSQVlfU0laRShyZWdpc3Rlcl90ZXN0X3BhdHRlcm5zKTsgcGF0KyspIHsgICAgICBcCi0JCWJlZm9yZSA9IHJlYWRsKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSKTsgICAgICAgICAgICAgICAgICAgICAgXAotCQl3cml0ZWwoKHJlZ2lzdGVyX3Rlc3RfcGF0dGVybnNbcGF0XSAmIFcpLCAgICAgICAgICAgICAgICAgICAgIFwKLQkJICAgICAgIChhZGFwdGVyLT5ody5od19hZGRyICsgUikpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCXZhbCA9IHJlYWRsKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQlpZiAodmFsICE9IChyZWdpc3Rlcl90ZXN0X3BhdHRlcm5zW3BhdF0gJiBXICYgTSkpIHsgICAgICAgICAgIFwKLQkJCWVfZXJyKGRydiwgInBhdHRlcm4gdGVzdCByZWcgJTA0WCBmYWlsZWQ6IGdvdCAiICAgICAgIFwKLQkJCSAgICAgICIweCUwOFggZXhwZWN0ZWQgMHglMDhYXG4iLCAgICAgICAgICAgICAgICAgICAgIFwKLQkJCSAgICAgIFIsIHZhbCwgKHJlZ2lzdGVyX3Rlc3RfcGF0dGVybnNbcGF0XSAmIFcgJiBNKSk7IFwKLQkJCSpkYXRhID0gUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCXdyaXRlbChiZWZvcmUsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSKTsgICAgICAgICAgICAgIFwKLQkJCXJldHVybiAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCXdyaXRlbChiZWZvcmUsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSKTsgICAgICAgICAgICAgICAgICAgICAgXAotCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZm9yIChwYXQgPSAwOyBwYXQgPCBBUlJBWV9TSVpFKHRlc3RfcGF0dGVybik7IHBhdCsrKSB7CisJCWJlZm9yZSA9IHJlYWRsKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByZWcpOworCQl3cml0ZWwoKHRlc3RfcGF0dGVybltwYXRdICYgd3JpdGUpLAorCQkgICAgICAgKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByZWcpKTsKKwkJdmFsID0gcmVhZGwoYWRhcHRlci0+aHcuaHdfYWRkciArIHJlZyk7CisJCWlmICh2YWwgIT0gKHRlc3RfcGF0dGVybltwYXRdICYgd3JpdGUgJiBtYXNrKSkgeworCQkJZV9lcnIoZHJ2LCAicGF0dGVybiB0ZXN0IHJlZyAlMDRYIGZhaWxlZDogZ290ICIKKwkJCSAgICAgICIweCUwOFggZXhwZWN0ZWQgMHglMDhYXG4iLAorCQkJICAgICAgcmVnLCB2YWwsICh0ZXN0X3BhdHRlcm5bcGF0XSAmIHdyaXRlICYgbWFzaykpOworCQkJKmRhdGEgPSByZWc7CisJCQl3cml0ZWwoYmVmb3JlLCBhZGFwdGVyLT5ody5od19hZGRyICsgcmVnKTsKKwkJCXJldHVybiAxOworCQl9CisJCXdyaXRlbChiZWZvcmUsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByZWcpOworCX0KKwlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBSRUdfU0VUX0FORF9DSEVDSyhSLCBNLCBXKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCXUzMiB2YWwsIGJlZm9yZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JYmVmb3JlID0gcmVhZGwoYWRhcHRlci0+aHcuaHdfYWRkciArIFIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl3cml0ZWwoKFcgJiBNKSwgKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCXZhbCA9IHJlYWRsKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JaWYgKChXICYgTSkgIT0gKHZhbCAmIE0pKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJZV9lcnIoZHJ2LCAic2V0L2NoZWNrIHJlZyAlMDRYIHRlc3QgZmFpbGVkOiBnb3QgMHglMDhYICIgIFwKLQkJICAgICAgImV4cGVjdGVkIDB4JTA4WFxuIiwgUiwgKHZhbCAmIE0pLCAoVyAmIE0pKTsgICAgICAgIFwKLQkJKmRhdGEgPSBSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCXdyaXRlbChiZWZvcmUsIChhZGFwdGVyLT5ody5od19hZGRyICsgUikpOyAgICAgICAgICAgICAgICAgICAgXAotCQlyZXR1cm4gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCXdyaXRlbChiZWZvcmUsIChhZGFwdGVyLT5ody5od19hZGRyICsgUikpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitzdGF0aWMgYm9vbCByZWdfc2V0X2FuZF9jaGVjayhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgdTY0ICpkYXRhLCBpbnQgcmVnLAorCQkJICAgICAgdTMyIG1hc2ssIHUzMiB3cml0ZSkKK3sKKwl1MzIgdmFsLCBiZWZvcmU7CisJYmVmb3JlID0gcmVhZGwoYWRhcHRlci0+aHcuaHdfYWRkciArIHJlZyk7CisJd3JpdGVsKCh3cml0ZSAmIG1hc2spLCAoYWRhcHRlci0+aHcuaHdfYWRkciArIHJlZykpOworCXZhbCA9IHJlYWRsKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByZWcpOworCWlmICgod3JpdGUgJiBtYXNrKSAhPSAodmFsICYgbWFzaykpIHsKKwkJZV9lcnIoZHJ2LCAic2V0L2NoZWNrIHJlZyAlMDRYIHRlc3QgZmFpbGVkOiBnb3QgMHglMDhYICIKKwkJICAgICAgImV4cGVjdGVkIDB4JTA4WFxuIiwgcmVnLCAodmFsICYgbWFzayksICh3cml0ZSAmIG1hc2spKTsKKwkJKmRhdGEgPSByZWc7CisJCXdyaXRlbChiZWZvcmUsIChhZGFwdGVyLT5ody5od19hZGRyICsgcmVnKSk7CisJCXJldHVybiAxOworCX0KKwl3cml0ZWwoYmVmb3JlLCAoYWRhcHRlci0+aHcuaHdfYWRkciArIHJlZykpOworCXJldHVybiAwOwogfQogCisjZGVmaW5lIFJFR19QQVRURVJOX1RFU1QocmVnLCBtYXNrLCB3cml0ZSkJCQkJICAgICAgXAorCWRvIHsJCQkJCQkJCSAgICAgIFwKKwkJaWYgKHJlZ19wYXR0ZXJuX3Rlc3QoYWRhcHRlciwgZGF0YSwgcmVnLCBtYXNrLCB3cml0ZSkpCSAgICAgIFwKKwkJCXJldHVybiAxOwkJCQkJICAgICAgXAorCX0gd2hpbGUgKDApCQkJCQkJCSAgICAgIFwKKworCisjZGVmaW5lIFJFR19TRVRfQU5EX0NIRUNLKHJlZywgbWFzaywgd3JpdGUpCQkJCSAgICAgIFwKKwlkbyB7CQkJCQkJCQkgICAgICBcCisJCWlmIChyZWdfc2V0X2FuZF9jaGVjayhhZGFwdGVyLCBkYXRhLCByZWcsIG1hc2ssIHdyaXRlKSkJICAgICAgXAorCQkJcmV0dXJuIDE7CQkJCQkgICAgICBcCisJfSB3aGlsZSAoMCkJCQkJCQkJICAgICAgXAorCiBzdGF0aWMgaW50IGl4Z2JlX3JlZ190ZXN0KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1NjQgKmRhdGEpCiB7CiAJY29uc3Qgc3RydWN0IGl4Z2JlX3JlZ190ZXN0ICp0ZXN0OwpAQCAtMTMyOCwxMyArMTM0NCwxMyBAQAogCQkJc3dpdGNoICh0ZXN0LT50ZXN0X3R5cGUpIHsKIAkJCWNhc2UgUEFUVEVSTl9URVNUOgogCQkJCVJFR19QQVRURVJOX1RFU1QodGVzdC0+cmVnICsgKGkgKiAweDQwKSwKLQkJCQkJCXRlc3QtPm1hc2ssCi0JCQkJCQl0ZXN0LT53cml0ZSk7CisJCQkJCQkgdGVzdC0+bWFzaywKKwkJCQkJCSB0ZXN0LT53cml0ZSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFNFVF9SRUFEX1RFU1Q6CiAJCQkJUkVHX1NFVF9BTkRfQ0hFQ0sodGVzdC0+cmVnICsgKGkgKiAweDQwKSwKLQkJCQkJCXRlc3QtPm1hc2ssCi0JCQkJCQl0ZXN0LT53cml0ZSk7CisJCQkJCQkgIHRlc3QtPm1hc2ssCisJCQkJCQkgIHRlc3QtPndyaXRlKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgV1JJVEVfTk9fVEVTVDoKIAkJCQl3cml0ZWwodGVzdC0+d3JpdGUsCkBAIC0xMzQzLDE4ICsxMzU5LDE4IEBACiAJCQkJYnJlYWs7CiAJCQljYXNlIFRBQkxFMzJfVEVTVDoKIAkJCQlSRUdfUEFUVEVSTl9URVNUKHRlc3QtPnJlZyArIChpICogNCksCi0JCQkJCQl0ZXN0LT5tYXNrLAotCQkJCQkJdGVzdC0+d3JpdGUpOworCQkJCQkJIHRlc3QtPm1hc2ssCisJCQkJCQkgdGVzdC0+d3JpdGUpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBUQUJMRTY0X1RFU1RfTE86CiAJCQkJUkVHX1BBVFRFUk5fVEVTVCh0ZXN0LT5yZWcgKyAoaSAqIDgpLAotCQkJCQkJdGVzdC0+bWFzaywKLQkJCQkJCXRlc3QtPndyaXRlKTsKKwkJCQkJCSB0ZXN0LT5tYXNrLAorCQkJCQkJIHRlc3QtPndyaXRlKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgVEFCTEU2NF9URVNUX0hJOgogCQkJCVJFR19QQVRURVJOX1RFU1QoKHRlc3QtPnJlZyArIDQpICsgKGkgKiA4KSwKLQkJCQkJCXRlc3QtPm1hc2ssCi0JCQkJCQl0ZXN0LT53cml0ZSk7CisJCQkJCQkgdGVzdC0+bWFzaywKKwkJCQkJCSB0ZXN0LT53cml0ZSk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTE0MTcsNyArMTQzMyw3IEBACiAKIAkvKiBEaXNhYmxlIGFsbCB0aGUgaW50ZXJydXB0cyAqLwogCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTUMsIDB4RkZGRkZGRkYpOwotCW1zbGVlcCgxMCk7CisJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAKIAkvKiBUZXN0IGVhY2ggaW50ZXJydXB0ICovCiAJZm9yICg7IGkgPCAxMDsgaSsrKSB7CkBAIC0xNDM3LDcgKzE0NTMsNyBAQAogCQkJICAgICAgICAgICAgICAgIH5tYXNrICYgMHgwMDAwN0ZGRik7CiAJCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSUNTLAogCQkJICAgICAgICAgICAgICAgIH5tYXNrICYgMHgwMDAwN0ZGRik7Ci0JCQltc2xlZXAoMTApOworCQkJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAKIAkJCWlmIChhZGFwdGVyLT50ZXN0X2ljciAmIG1hc2spIHsKIAkJCQkqZGF0YSA9IDM7CkBAIC0xNDU0LDcgKzE0NzAsNyBAQAogCQlhZGFwdGVyLT50ZXN0X2ljciA9IDA7CiAJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTVMsIG1hc2spOwogCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSUNTLCBtYXNrKTsKLQkJbXNsZWVwKDEwKTsKKwkJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAKIAkJaWYgKCEoYWRhcHRlci0+dGVzdF9pY3IgJm1hc2spKSB7CiAJCQkqZGF0YSA9IDQ7CkBAIC0xNDc0LDcgKzE0OTAsNyBAQAogCQkJICAgICAgICAgICAgICAgIH5tYXNrICYgMHgwMDAwN0ZGRik7CiAJCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSUNTLAogCQkJICAgICAgICAgICAgICAgIH5tYXNrICYgMHgwMDAwN0ZGRik7Ci0JCQltc2xlZXAoMTApOworCQkJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAKIAkJCWlmIChhZGFwdGVyLT50ZXN0X2ljcikgewogCQkJCSpkYXRhID0gNTsKQEAgLTE0ODUsNyArMTUwMSw3IEBACiAKIAkvKiBEaXNhYmxlIGFsbCB0aGUgaW50ZXJydXB0cyAqLwogCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTUMsIDB4RkZGRkZGRkYpOwotCW1zbGVlcCgxMCk7CisJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAKIAkvKiBVbmhvb2sgdGVzdCBpbnRlcnJ1cHQgaGFuZGxlciAqLwogCWZyZWVfaXJxKGlycSwgbmV0ZGV2KTsKQEAgLTE1OTgsNiArMTYxNCwxMyBAQAogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIHJlZ19kYXRhOwogCisJLyogWDU0MCBuZWVkcyB0byBzZXQgdGhlIE1BQ0MuRkxVIGJpdCB0byBmb3JjZSBsaW5rIHVwICovCisJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY19YNTQwKSB7CisJCXJlZ19kYXRhID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9NQUNDKTsKKwkJcmVnX2RhdGEgfD0gSVhHQkVfTUFDQ19GTFU7CisJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX01BQ0MsIHJlZ19kYXRhKTsKKwl9CisKIAkvKiByaWdodCBub3cgd2Ugb25seSBzdXBwb3J0IE1BQyBsb29wYmFjayBpbiB0aGUgZHJpdmVyICovCiAJcmVnX2RhdGEgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0hMUkVHMCk7CiAJLyogU2V0dXAgTUFDIGxvb3BiYWNrICovCkBAIC0xNjEzLDcgKzE2MzYsNyBAQAogCXJlZ19kYXRhIHw9IElYR0JFX0FVVE9DX0xNU18xMEdfTElOS19OT19BTiB8IElYR0JFX0FVVE9DX0ZMVTsKIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9BVVRPQywgcmVnX2RhdGEpOwogCUlYR0JFX1dSSVRFX0ZMVVNIKCZhZGFwdGVyLT5odyk7Ci0JbXNsZWVwKDEwKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsKIAogCS8qIERpc2FibGUgQXRsYXMgVHggbGFuZXM7IHJlLWVuYWJsZWQgaW4gcmVzZXQgcGF0aCAqLwogCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpIHsKQEAgLTE5OTksMjUgKzIwMjIsMzAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpeGdiZV9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQorc3RhdGljIGludCBpeGdiZV9zZXRfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICBlbnVtIGV0aHRvb2xfcGh5c19pZF9zdGF0ZSBzdGF0ZSkKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1MzIgbGVkX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MRURDVEwpOwotCXUzMiBpOwogCi0JaWYgKCFkYXRhIHx8IGRhdGEgPiAzMDApCi0JCWRhdGEgPSAzMDA7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgRVRIVE9PTF9JRF9BQ1RJVkU6CisJCWFkYXB0ZXItPmxlZF9yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTEVEQ1RMKTsKKwkJcmV0dXJuIDI7CiAKLQlmb3IgKGkgPSAwOyBpIDwgKGRhdGEgKiAxMDAwKTsgaSArPSA0MDApIHsKKwljYXNlIEVUSFRPT0xfSURfT046CiAJCWh3LT5tYWMub3BzLmxlZF9vbihodywgSVhHQkVfTEVEX09OKTsKLQkJbXNsZWVwX2ludGVycnVwdGlibGUoMjAwKTsKLQkJaHctPm1hYy5vcHMubGVkX29mZihodywgSVhHQkVfTEVEX09OKTsKLQkJbXNsZWVwX2ludGVycnVwdGlibGUoMjAwKTsKLQl9CisJCWJyZWFrOwogCi0JLyogUmVzdG9yZSBMRUQgc2V0dGluZ3MgKi8KLQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9MRURDVEwsIGxlZF9yZWcpOworCWNhc2UgRVRIVE9PTF9JRF9PRkY6CisJCWh3LT5tYWMub3BzLmxlZF9vZmYoaHcsIElYR0JFX0xFRF9PTik7CisJCWJyZWFrOworCisJY2FzZSBFVEhUT09MX0lEX0lOQUNUSVZFOgorCQkvKiBSZXN0b3JlIExFRCBzZXR0aW5ncyAqLworCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9MRURDVEwsIGFkYXB0ZXItPmxlZF9yZWcpOworCQlicmVhazsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIyMzAsOCArMjI1OCwxMyBAQAogCW5lZWRfcmVzZXQgPSAoZGF0YSAmIEVUSF9GTEFHX1JYVkxBTikgIT0KIAkJICAgICAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSFdfVkxBTl9SWCk7CiAKKwlpZiAoKGRhdGEgJiBFVEhfRkxBR19SWEhBU0gpICYmCisJICAgICEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1JTU19FTkFCTEVEKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCiAJcmMgPSBldGh0b29sX29wX3NldF9mbGFncyhuZXRkZXYsIGRhdGEsIEVUSF9GTEFHX0xSTyB8IEVUSF9GTEFHX05UVVBMRSB8Ci0JCQkJCUVUSF9GTEFHX1JYVkxBTiB8IEVUSF9GTEFHX1RYVkxBTik7CisJCQkJICBFVEhfRkxBR19SWFZMQU4gfCBFVEhfRkxBR19UWFZMQU4gfAorCQkJCSAgRVRIX0ZMQUdfUlhIQVNIKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtMjQ2NSw3ICsyNDk4LDcgQEAKIAkuc2V0X3RzbyAgICAgICAgICAgICAgICA9IGl4Z2JlX3NldF90c28sCiAJLnNlbGZfdGVzdCAgICAgICAgICAgICAgPSBpeGdiZV9kaWFnX3Rlc3QsCiAJLmdldF9zdHJpbmdzICAgICAgICAgICAgPSBpeGdiZV9nZXRfc3RyaW5ncywKLQkucGh5c19pZCAgICAgICAgICAgICAgICA9IGl4Z2JlX3BoeXNfaWQsCisJLnNldF9waHlzX2lkICAgICAgICAgICAgPSBpeGdiZV9zZXRfcGh5c19pZCwKIAkuZ2V0X3NzZXRfY291bnQgICAgICAgICA9IGl4Z2JlX2dldF9zc2V0X2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cyAgICAgID0gaXhnYmVfZ2V0X2V0aHRvb2xfc3RhdHMsCiAJLmdldF9jb2FsZXNjZSAgICAgICAgICAgPSBpeGdiZV9nZXRfY29hbGVzY2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmMKaW5kZXggZGJhN2Q3Ny4uMDU5MjA3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZmNvZS5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2Zjb2UuYwpAQCAtNDE2LDggKzQxNiw3IEBACiAJaWYgKCFkZHAtPnVkbCkKIAkJZ290byBkZHBfb3V0OwogCi0JZGRwLT5lcnIgPSAoZmNlcnIgfCBmY2VvZmUpOwotCWlmIChkZHAtPmVycikKKwlpZiAoZmNlcnIgfCBmY2VvZmUpCiAJCWdvdG8gZGRwX291dDsKIAogCWZjc3RhdCA9IChzdGVyciAmIElYR0JFX1JYREFEVl9TVEFUX0ZDU1RBVCk7CkBAIC00MjgsNiArNDI3LDcgQEAKIAkJaWYgKGZjc3RhdCA9PSBJWEdCRV9SWERBRFZfU1RBVF9GQ1NUQVRfRkNQUlNQKSB7CiAJCQlwY2lfdW5tYXBfc2coYWRhcHRlci0+cGRldiwgZGRwLT5zZ2wsCiAJCQkJICAgICBkZHAtPnNnYywgRE1BX0ZST01fREVWSUNFKTsKKwkJCWRkcC0+ZXJyID0gKGZjZXJyIHwgZmNlb2ZlKTsKIAkJCWRkcC0+c2dsID0gTlVMTDsKIAkJCWRkcC0+c2djID0gMDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCmluZGV4IDZmOGFkYzcuLjA4ZThlMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxuZXQvaXA2X2NoZWNrc3VtLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgPHNjc2kvZmMvZmNfZmNvZS5oPgogCiAjaW5jbHVkZSAiaXhnYmUuaCIKQEAgLTUxLDggKzUyLDEyIEBACiBjaGFyIGl4Z2JlX2RyaXZlcl9uYW1lW10gPSAiaXhnYmUiOwogc3RhdGljIGNvbnN0IGNoYXIgaXhnYmVfZHJpdmVyX3N0cmluZ1tdID0KIAkJCSAgICAgICJJbnRlbChSKSAxMCBHaWdhYml0IFBDSSBFeHByZXNzIE5ldHdvcmsgRHJpdmVyIjsKLQotI2RlZmluZSBEUlZfVkVSU0lPTiAiMy4yLjktazIiCisjZGVmaW5lIE1BSiAzCisjZGVmaW5lIE1JTiAzCisjZGVmaW5lIEJVSUxEIDgKKyNkZWZpbmUgS0ZJWCAyCisjZGVmaW5lIERSVl9WRVJTSU9OIF9fc3RyaW5naWZ5KE1BSikgIi4iIF9fc3RyaW5naWZ5KE1JTikgIi4iIFwKKwlfX3N0cmluZ2lmeShCVUlMRCkgIi1rIiBfX3N0cmluZ2lmeShLRklYKQogY29uc3QgY2hhciBpeGdiZV9kcml2ZXJfdmVyc2lvbltdID0gRFJWX1ZFUlNJT047CiBzdGF0aWMgY29uc3QgY2hhciBpeGdiZV9jb3B5cmlnaHRbXSA9CiAJCQkJIkNvcHlyaWdodCAoYykgMTk5OS0yMDExIEludGVsIENvcnBvcmF0aW9uLiI7CkBAIC0xMjAsNiArMTI1LDEwIEBACiAJIGJvYXJkXzgyNTk5IH0sCiAJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfWDU0MFQpLAogCSBib2FyZF9YNTQwIH0sCisJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OTlfU0ZQX1NGMiksCisJIGJvYXJkXzgyNTk5IH0sCisJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OTlfTFMpLAorCSBib2FyZF84MjU5OSB9LAogCiAJLyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqLwogCXswLCB9CkBAIC0xODUsNiArMTk0LDIyIEBACiAJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRDsKIH0KIAorc3RhdGljIHZvaWQgaXhnYmVfc2VydmljZV9ldmVudF9zY2hlZHVsZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoIXRlc3RfYml0KF9fSVhHQkVfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSAmJgorCSAgICAhdGVzdF9hbmRfc2V0X2JpdChfX0lYR0JFX1NFUlZJQ0VfU0NIRUQsICZhZGFwdGVyLT5zdGF0ZSkpCisJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnNlcnZpY2VfdGFzayk7Cit9CisKK3N0YXRpYyB2b2lkIGl4Z2JlX3NlcnZpY2VfZXZlbnRfY29tcGxldGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJQlVHX09OKCF0ZXN0X2JpdChfX0lYR0JFX1NFUlZJQ0VfU0NIRUQsICZhZGFwdGVyLT5zdGF0ZSkpOworCisJLyogZmx1c2ggbWVtb3J5IHRvIG1ha2Ugc3VyZSBzdGF0ZSBpcyBjb3JyZWN0IGJlZm9yZSBuZXh0IHdhdGNob2cgKi8KKwlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwljbGVhcl9iaXQoX19JWEdCRV9TRVJWSUNFX1NDSEVELCAmYWRhcHRlci0+c3RhdGUpOworfQorCiBzdHJ1Y3QgaXhnYmVfcmVnX2luZm8gewogCXUzMiBvZnM7CiAJY2hhciAqbmFtZTsKQEAgLTgxMSw3ICs4MzYsMTkgQEAKICNkZWZpbmUgREVTQ19ORUVERUQgKFRYRF9VU0VfQ09VTlQoSVhHQkVfTUFYX0RBVEFfUEVSX1RYRCkgLyogc2tiLT5kYXRhICovICsgXAogCU1BWF9TS0JfRlJBR1MgKiBUWERfVVNFX0NPVU5UKFBBR0VfU0laRSkgKyAxKSAvKiBmb3IgY29udGV4dCAqLwogCi1zdGF0aWMgdm9pZCBpeGdiZV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworLyoqCisgKiBpeGdiZV90eF90aW1lb3V0X3Jlc2V0IC0gaW5pdGlhdGUgcmVzZXQgZHVlIHRvIFR4IHRpbWVvdXQKKyAqIEBhZGFwdGVyOiBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3QKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JlX3R4X3RpbWVvdXRfcmVzZXQoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisKKwkvKiBEbyB0aGUgcmVzZXQgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCAqLworCWlmICghdGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKSB7CisJCWFkYXB0ZXItPmZsYWdzMiB8PSBJWEdCRV9GTEFHMl9SRVNFVF9SRVFVRVNURUQ7CisJCWl4Z2JlX3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUoYWRhcHRlcik7CisJfQorfQogCiAvKioKICAqIGl4Z2JlX2NsZWFuX3R4X2lycSAtIFJlY2xhaW0gcmVzb3VyY2VzIGFmdGVyIHRyYW5zbWl0IGNvbXBsZXRlcwpAQCAtODkzLDcgKzkzMCw3IEBACiAJCQlhZGFwdGVyLT50eF90aW1lb3V0X2NvdW50ICsgMSwgdHhfcmluZy0+cXVldWVfaW5kZXgpOwogCiAJCS8qIHNjaGVkdWxlIGltbWVkaWF0ZSByZXNldCBpZiB3ZSBiZWxpZXZlIHdlIGh1bmcgKi8KLQkJaXhnYmVfdHhfdGltZW91dChhZGFwdGVyLT5uZXRkZXYpOworCQlpeGdiZV90eF90aW1lb3V0X3Jlc2V0KGFkYXB0ZXIpOwogCiAJCS8qIHRoZSBhZGFwdGVyIGlzIGFib3V0IHRvIHJlc2V0LCBubyBwb2ludCBpbiBlbmFibGluZyBzdHVmZiAqLwogCQlyZXR1cm4gdHJ1ZTsKQEAgLTk0Myw4ICs5ODAsNiBAQAogCXJ4Y3RybCB8PSBJWEdCRV9EQ0FfUlhDVFJMX0RFU0NfRENBX0VOOwogCXJ4Y3RybCB8PSBJWEdCRV9EQ0FfUlhDVFJMX0hFQURfRENBX0VOOwogCXJ4Y3RybCAmPSB+KElYR0JFX0RDQV9SWENUUkxfREVTQ19SUk9fRU4pOwotCXJ4Y3RybCAmPSB+KElYR0JFX0RDQV9SWENUUkxfREVTQ19XUk9fRU4gfAotCQkgICAgSVhHQkVfRENBX1JYQ1RSTF9ERVNDX0hTUk9fRU4pOwogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRENBX1JYQ1RSTChyZWdfaWR4KSwgcnhjdHJsKTsKIH0KIApAQCAtOTYyLDcgKzk5Nyw2IEBACiAJCXR4Y3RybCAmPSB+SVhHQkVfRENBX1RYQ1RSTF9DUFVJRF9NQVNLOwogCQl0eGN0cmwgfD0gZGNhM19nZXRfdGFnKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGNwdSk7CiAJCXR4Y3RybCB8PSBJWEdCRV9EQ0FfVFhDVFJMX0RFU0NfRENBX0VOOwotCQl0eGN0cmwgJj0gfklYR0JFX0RDQV9UWENUUkxfVFhfV0JfUk9fRU47CiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRENBX1RYQ1RSTChyZWdfaWR4KSwgdHhjdHJsKTsKIAkJYnJlYWs7CiAJY2FzZSBpeGdiZV9tYWNfODI1OTlFQjoKQEAgLTk3Miw3ICsxMDA2LDYgQEAKIAkJdHhjdHJsIHw9IChkY2EzX2dldF90YWcoJmFkYXB0ZXItPnBkZXYtPmRldiwgY3B1KSA8PAogCQkJICAgSVhHQkVfRENBX1RYQ1RSTF9DUFVJRF9TSElGVF84MjU5OSk7CiAJCXR4Y3RybCB8PSBJWEdCRV9EQ0FfVFhDVFJMX0RFU0NfRENBX0VOOwotCQl0eGN0cmwgJj0gfklYR0JFX0RDQV9UWENUUkxfVFhfV0JfUk9fRU47CiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRENBX1RYQ1RSTF84MjU5OShyZWdfaWR4KSwgdHhjdHJsKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTEwNjEsOCArMTA5NCwxNCBAQAogCiAJcmV0dXJuIDA7CiB9Ci0KICNlbmRpZiAvKiBDT05GSUdfSVhHQkVfRENBICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpeGdiZV9yeF9oYXNoKHVuaW9uIGl4Z2JlX2Fkdl9yeF9kZXNjICpyeF9kZXNjLAorCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXNrYi0+cnhoYXNoID0gbGUzMl90b19jcHUocnhfZGVzYy0+d2IubG93ZXIuaGlfZHdvcmQucnNzKTsKK30KKwogLyoqCiAgKiBpeGdiZV9yZWNlaXZlX3NrYiAtIFNlbmQgYSBjb21wbGV0ZWQgcGFja2V0IHVwIHRoZSBzdGFjawogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCkBAIC0xNDU0LDYgKzE0OTMsOCBAQAogCQl9CiAKIAkJaXhnYmVfcnhfY2hlY2tzdW0oYWRhcHRlciwgcnhfZGVzYywgc2tiKTsKKwkJaWYgKGFkYXB0ZXItPm5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYSEFTSCkKKwkJCWl4Z2JlX3J4X2hhc2gocnhfZGVzYywgc2tiKTsKIAogCQkvKiBwcm9iYWJseSBhIGxpdHRsZSBza2V3ZWQgZHVlIHRvIHJlbW92aW5nIENSQyAqLwogCQl0b3RhbF9yeF9ieXRlcyArPSBza2ItPmxlbjsKQEAgLTE3ODcsMzUgKzE4MjgsNTEgQEAKIH0KIAogLyoqCi0gKiBpeGdiZV9jaGVja19vdmVydGVtcF90YXNrIC0gd29ya2VyIHRocmVhZCB0byBjaGVjayBvdmVyIHRlbXB1cmF0dXJlCi0gKiBAd29yazogcG9pbnRlciB0byB3b3JrX3N0cnVjdCBjb250YWluaW5nIG91ciBkYXRhCisgKiBpeGdiZV9jaGVja19vdmVydGVtcF9zdWJ0YXNrIC0gY2hlY2sgZm9yIG92ZXIgdGVtcHVyYXR1cmUKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIGFkYXB0ZXIKICAqKi8KLXN0YXRpYyB2b2lkIGl4Z2JlX2NoZWNrX292ZXJ0ZW1wX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIHZvaWQgaXhnYmVfY2hlY2tfb3ZlcnRlbXBfc3VidGFzayhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLAotCQkJCQkJICAgICBzdHJ1Y3QgaXhnYmVfYWRhcHRlciwKLQkJCQkJCSAgICAgY2hlY2tfb3ZlcnRlbXBfdGFzayk7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgZWljciA9IGFkYXB0ZXItPmludGVycnVwdF9ldmVudDsKIAotCWlmICghKGFkYXB0ZXItPmZsYWdzMiAmIElYR0JFX0ZMQUcyX1RFTVBfU0VOU09SX0NBUEFCTEUpKQorCWlmICh0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCiAJCXJldHVybjsKIAorCWlmICghKGFkYXB0ZXItPmZsYWdzMiAmIElYR0JFX0ZMQUcyX1RFTVBfU0VOU09SX0NBUEFCTEUpICYmCisJICAgICEoYWRhcHRlci0+ZmxhZ3MyICYgSVhHQkVfRkxBRzJfVEVNUF9TRU5TT1JfRVZFTlQpKQorCQlyZXR1cm47CisKKwlhZGFwdGVyLT5mbGFnczIgJj0gfklYR0JFX0ZMQUcyX1RFTVBfU0VOU09SX0VWRU5UOworCiAJc3dpdGNoIChody0+ZGV2aWNlX2lkKSB7Ci0JY2FzZSBJWEdCRV9ERVZfSURfODI1OTlfVDNfTE9NOiB7Ci0JCXUzMiBhdXRvbmVnOwotCQlib29sIGxpbmtfdXAgPSBmYWxzZTsKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5OV9UM19MT006CisJCS8qCisJCSAqIFNpbmNlIHRoZSB3YXJuaW5nIGludGVycnVwdCBpcyBmb3IgYm90aCBwb3J0cworCQkgKiB3ZSBkb24ndCBoYXZlIHRvIGNoZWNrIGlmOgorCQkgKiAgLSBUaGlzIGludGVycnVwdCB3YXNuJ3QgZm9yIG91ciBwb3J0LgorCQkgKiAgLSBXZSBtYXkgaGF2ZSBtaXNzZWQgdGhlIGludGVycnVwdCBzbyBhbHdheXMgaGF2ZSB0bworCQkgKiAgICBjaGVjayBpZiB3ZSAgZ290IGEgTFNDCisJCSAqLworCQlpZiAoIShlaWNyICYgSVhHQkVfRUlDUl9HUElfU0RQMCkgJiYKKwkJICAgICEoZWljciAmIElYR0JFX0VJQ1JfTFNDKSkKKwkJCXJldHVybjsKIAotCQlpZiAoaHctPm1hYy5vcHMuY2hlY2tfbGluaykKKwkJaWYgKCEoZWljciAmIElYR0JFX0VJQ1JfTFNDKSAmJiBody0+bWFjLm9wcy5jaGVja19saW5rKSB7CisJCQl1MzIgYXV0b25lZzsKKwkJCWJvb2wgbGlua191cCA9IGZhbHNlOworCiAJCQlody0+bWFjLm9wcy5jaGVja19saW5rKGh3LCAmYXV0b25lZywgJmxpbmtfdXAsIGZhbHNlKTsKIAotCQlpZiAoKChlaWNyICYgSVhHQkVfRUlDUl9HUElfU0RQMCkgJiYgKCFsaW5rX3VwKSkgfHwKLQkJICAgIChlaWNyICYgSVhHQkVfRUlDUl9MU0MpKQotCQkJLyogQ2hlY2sgaWYgdGhpcyBpcyBkdWUgdG8gb3ZlcnRlbXAgKi8KLQkJCWlmIChody0+cGh5Lm9wcy5jaGVja19vdmVydGVtcChodykgPT0gSVhHQkVfRVJSX09WRVJURU1QKQotCQkJCWJyZWFrOwotCQlyZXR1cm47Ci0JfQorCQkJaWYgKGxpbmtfdXApCisJCQkJcmV0dXJuOworCQl9CisKKwkJLyogQ2hlY2sgaWYgdGhpcyBpcyBub3QgZHVlIHRvIG92ZXJ0ZW1wICovCisJCWlmIChody0+cGh5Lm9wcy5jaGVja19vdmVydGVtcChodykgIT0gSVhHQkVfRVJSX09WRVJURU1QKQorCQkJcmV0dXJuOworCisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlmICghKGVpY3IgJiBJWEdCRV9FSUNSX0dQSV9TRFAwKSkKIAkJCXJldHVybjsKQEAgLTE4MjUsOCArMTg4Miw4IEBACiAJICAgICAgICJOZXR3b3JrIGFkYXB0ZXIgaGFzIGJlZW4gc3RvcHBlZCBiZWNhdXNlIGl0IGhhcyBvdmVyIGhlYXRlZC4gIgogCSAgICAgICAiUmVzdGFydCB0aGUgY29tcHV0ZXIuIElmIHRoZSBwcm9ibGVtIHBlcnNpc3RzLCAiCiAJICAgICAgICJwb3dlciBvZmYgdGhlIHN5c3RlbSBhbmQgcmVwbGFjZSB0aGUgYWRhcHRlclxuIik7Ci0JLyogd3JpdGUgdG8gY2xlYXIgdGhlIGludGVycnVwdCAqLwotCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDUiwgSVhHQkVfRUlDUl9HUElfU0RQMCk7CisKKwlhZGFwdGVyLT5pbnRlcnJ1cHRfZXZlbnQgPSAwOwogfQogCiBzdGF0aWMgdm9pZCBpeGdiZV9jaGVja19mYW5fZmFpbHVyZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGVpY3IpCkBAIC0xODQ4LDE1ICsxOTA1LDE5IEBACiAJaWYgKGVpY3IgJiBJWEdCRV9FSUNSX0dQSV9TRFAyKSB7CiAJCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgKi8KIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSUNSLCBJWEdCRV9FSUNSX0dQSV9TRFAyKTsKLQkJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCi0JCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5zZnBfY29uZmlnX21vZHVsZV90YXNrKTsKKwkJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpIHsKKwkJCWFkYXB0ZXItPmZsYWdzMiB8PSBJWEdCRV9GTEFHMl9TRlBfTkVFRFNfUkVTRVQ7CisJCQlpeGdiZV9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKGFkYXB0ZXIpOworCQl9CiAJfQogCiAJaWYgKGVpY3IgJiBJWEdCRV9FSUNSX0dQSV9TRFAxKSB7CiAJCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgKi8KIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSUNSLCBJWEdCRV9FSUNSX0dQSV9TRFAxKTsKLQkJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCi0JCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5tdWx0aXNwZWVkX2ZpYmVyX3Rhc2spOworCQlpZiAoIXRlc3RfYml0KF9fSVhHQkVfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkgeworCQkJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19ORUVEX0xJTktfQ09ORklHOworCQkJaXhnYmVfc2VydmljZV9ldmVudF9zY2hlZHVsZShhZGFwdGVyKTsKKwkJfQogCX0KIH0KIApAQCAtMTg3MCw3ICsxOTMxLDcgQEAKIAlpZiAoIXRlc3RfYml0KF9fSVhHQkVfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkgewogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJTUMsIElYR0JFX0VJTUNfTFNDKTsKIAkJSVhHQkVfV1JJVEVfRkxVU0goaHcpOwotCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT53YXRjaGRvZ190YXNrKTsKKwkJaXhnYmVfc2VydmljZV9ldmVudF9zY2hlZHVsZShhZGFwdGVyKTsKIAl9CiB9CiAKQEAgLTE4OTgsMjYgKzE5NTksMzIgQEAKIAogCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CiAJY2FzZSBpeGdiZV9tYWNfODI1OTlFQjoKLQkJaXhnYmVfY2hlY2tfc2ZwX2V2ZW50KGFkYXB0ZXIsIGVpY3IpOwotCQlpZiAoKGFkYXB0ZXItPmZsYWdzMiAmIElYR0JFX0ZMQUcyX1RFTVBfU0VOU09SX0NBUEFCTEUpICYmCi0JCSAgICAoKGVpY3IgJiBJWEdCRV9FSUNSX0dQSV9TRFAwKSB8fCAoZWljciAmIElYR0JFX0VJQ1JfTFNDKSkpIHsKLQkJCWFkYXB0ZXItPmludGVycnVwdF9ldmVudCA9IGVpY3I7Ci0JCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5jaGVja19vdmVydGVtcF90YXNrKTsKLQkJfQotCQkvKiBub3cgZmFsbHRocm91Z2ggdG8gaGFuZGxlIEZsb3cgRGlyZWN0b3IgKi8KIAljYXNlIGl4Z2JlX21hY19YNTQwOgogCQkvKiBIYW5kbGUgRmxvdyBEaXJlY3RvciBGdWxsIHRocmVzaG9sZCBpbnRlcnJ1cHQgKi8KIAkJaWYgKGVpY3IgJiBJWEdCRV9FSUNSX0ZMT1dfRElSKSB7CisJCQlpbnQgcmVpbml0X2NvdW50ID0gMDsKIAkJCWludCBpOwotCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSUNSLCBJWEdCRV9FSUNSX0ZMT1dfRElSKTsKLQkJCS8qIERpc2FibGUgdHJhbnNtaXRzIGJlZm9yZSBGRElSIFJlLWluaXRpYWxpemF0aW9uICovCi0JCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIAkJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKLQkJCQlzdHJ1Y3QgaXhnYmVfcmluZyAqdHhfcmluZyA9Ci0JCQkJCQkJICAgIGFkYXB0ZXItPnR4X3JpbmdbaV07CisJCQkJc3RydWN0IGl4Z2JlX3JpbmcgKnJpbmcgPSBhZGFwdGVyLT50eF9yaW5nW2ldOwogCQkJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoX19JWEdCRV9UWF9GRElSX0lOSVRfRE9ORSwKLQkJCQkJCSAgICAgICAmdHhfcmluZy0+c3RhdGUpKQotCQkJCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5mZGlyX3JlaW5pdF90YXNrKTsKKwkJCQkJCSAgICAgICAmcmluZy0+c3RhdGUpKQorCQkJCQlyZWluaXRfY291bnQrKzsKKwkJCX0KKwkJCWlmIChyZWluaXRfY291bnQpIHsKKwkJCQkvKiBubyBtb3JlIGZsb3cgZGlyZWN0b3IgaW50ZXJydXB0cyB1bnRpbCBhZnRlciBpbml0ICovCisJCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSU1DLCBJWEdCRV9FSU1DX0ZMT1dfRElSKTsKKwkJCQllaWNyICY9IH5JWEdCRV9FSUNSX0ZMT1dfRElSOworCQkJCWFkYXB0ZXItPmZsYWdzMiB8PSBJWEdCRV9GTEFHMl9GRElSX1JFUVVJUkVTX1JFSU5JVDsKKwkJCQlpeGdiZV9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKGFkYXB0ZXIpOworCQkJfQorCQl9CisJCWl4Z2JlX2NoZWNrX3NmcF9ldmVudChhZGFwdGVyLCBlaWNyKTsKKwkJaWYgKChhZGFwdGVyLT5mbGFnczIgJiBJWEdCRV9GTEFHMl9URU1QX1NFTlNPUl9DQVBBQkxFKSAmJgorCQkgICAgKChlaWNyICYgSVhHQkVfRUlDUl9HUElfU0RQMCkgfHwgKGVpY3IgJiBJWEdCRV9FSUNSX0xTQykpKSB7CisJCQlpZiAoIXRlc3RfYml0KF9fSVhHQkVfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkgeworCQkJCWFkYXB0ZXItPmludGVycnVwdF9ldmVudCA9IGVpY3I7CisJCQkJYWRhcHRlci0+ZmxhZ3MyIHw9IElYR0JFX0ZMQUcyX1RFTVBfU0VOU09SX0VWRU5UOworCQkJCWl4Z2JlX3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUoYWRhcHRlcik7CiAJCQl9CiAJCX0KIAkJYnJlYWs7CkBAIC0xOTI3LDggKzE5OTQsMTAgQEAKIAogCWl4Z2JlX2NoZWNrX2Zhbl9mYWlsdXJlKGFkYXB0ZXIsIGVpY3IpOwogCisJLyogcmUtZW5hYmxlIHRoZSBvcmlnaW5hbCBpbnRlcnJ1cHQgc3RhdGUsIG5vIGxzYywgbm8gcXVldWVzICovCiAJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCi0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlNUywgSVhHQkVfRUlNU19PVEhFUik7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlNUywgZWljciAmCisJCSAgICAgICAgICAgICAgICB+KElYR0JFX0VJTVNfTFNDIHwgSVhHQkVfRUlNU19SVFhfUVVFVUUpKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTI1MTMsOCArMjU4MiwxMSBAQAogCQlpeGdiZV9jaGVja19zZnBfZXZlbnQoYWRhcHRlciwgZWljcik7CiAJCWlmICgoYWRhcHRlci0+ZmxhZ3MyICYgSVhHQkVfRkxBRzJfVEVNUF9TRU5TT1JfQ0FQQUJMRSkgJiYKIAkJICAgICgoZWljciAmIElYR0JFX0VJQ1JfR1BJX1NEUDApIHx8IChlaWNyICYgSVhHQkVfRUlDUl9MU0MpKSkgewotCQkJYWRhcHRlci0+aW50ZXJydXB0X2V2ZW50ID0gZWljcjsKLQkJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPmNoZWNrX292ZXJ0ZW1wX3Rhc2spOworCQkJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpIHsKKwkJCQlhZGFwdGVyLT5pbnRlcnJ1cHRfZXZlbnQgPSBlaWNyOworCQkJCWFkYXB0ZXItPmZsYWdzMiB8PSBJWEdCRV9GTEFHMl9URU1QX1NFTlNPUl9FVkVOVDsKKwkJCQlpeGdiZV9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKGFkYXB0ZXIpOworCQkJfQogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0yNzMxLDcgKzI4MDMsNyBAQAogCiAJLyogcG9sbCB0byB2ZXJpZnkgcXVldWUgaXMgZW5hYmxlZCAqLwogCWRvIHsKLQkJbXNsZWVwKDEpOworCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CiAJCXR4ZGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9UWERDVEwocmVnX2lkeCkpOwogCX0gd2hpbGUgKC0td2FpdF9sb29wICYmICEodHhkY3RsICYgSVhHQkVfVFhEQ1RMX0VOQUJMRSkpOwogCWlmICghd2FpdF9sb29wKQpAQCAtMzAyMyw3ICszMDk1LDcgQEAKIAkJcmV0dXJuOwogCiAJZG8gewotCQltc2xlZXAoMSk7CisJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKIAkJcnhkY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JYRENUTChyZWdfaWR4KSk7CiAJfSB3aGlsZSAoLS13YWl0X2xvb3AgJiYgIShyeGRjdGwgJiBJWEdCRV9SWERDVExfRU5BQkxFKSk7CiAKQEAgLTMxNzgsNyArMzI1MCw5IEBACiAJLyogZW5hYmxlIFR4IGxvb3BiYWNrIGZvciBWRi9QRiBjb21tdW5pY2F0aW9uICovCiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9QRkRUWEdTV0MsIElYR0JFX1BGRFRYR1NXQ19WVF9MQkVOKTsKIAkvKiBFbmFibGUgTUFDIEFudGktU3Bvb2ZpbmcgKi8KLQlody0+bWFjLm9wcy5zZXRfbWFjX2FudGlfc3Bvb2ZpbmcoaHcsIChhZGFwdGVyLT5udW1fdmZzICE9IDApLAorCWh3LT5tYWMub3BzLnNldF9tYWNfYW50aV9zcG9vZmluZyhodywKKwkJCQkJICAoYWRhcHRlci0+YW50aXNwb29maW5nX2VuYWJsZWQgPQorCQkJCQkgICAoYWRhcHRlci0+bnVtX3ZmcyAhPSAwKSksCiAJCQkJCSAgYWRhcHRlci0+bnVtX3Zmcyk7CiB9CiAKQEAgLTM0ODcsNyArMzU2MSw3IEBACiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdW5zaWduZWQgaW50IHZmbiA9IGFkYXB0ZXItPm51bV92ZnM7Ci0JdW5zaWduZWQgaW50IHJhcl9lbnRyaWVzID0gaHctPm1hYy5udW1fcmFyX2VudHJpZXMgLSAodmZuICsgMSk7CisJdW5zaWduZWQgaW50IHJhcl9lbnRyaWVzID0gSVhHQkVfTUFYX1BGX01BQ1ZMQU5TOwogCWludCBjb3VudCA9IDA7CiAKIAkvKiByZXR1cm4gRU5PTUVNIGluZGljYXRpbmcgaW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgYWRkcmVzc2VzICovCkBAIC0zNzYwLDMxICszODM0LDE2IEBACiAgKiovCiBzdGF0aWMgdm9pZCBpeGdiZV9zZnBfbGlua19jb25maWcoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwkvKgorCSAqIFdlIGFyZSBhc3N1bWluZyB0aGUgd29yc3QgY2FzZSBzY2VuZXJpbyBoZXJlLCBhbmQgdGhhdAorCSAqIGlzIHRoYXQgYW4gU0ZQIHdhcyBpbnNlcnRlZC9yZW1vdmVkIGFmdGVyIHRoZSByZXNldAorCSAqIGJ1dCBiZWZvcmUgU0ZQIGRldGVjdGlvbiB3YXMgZW5hYmxlZC4gIEFzIHN1Y2ggdGhlIGJlc3QKKwkgKiBzb2x1dGlvbiBpcyB0byBqdXN0IHN0YXJ0IHNlYXJjaGluZyBhcyBzb29uIGFzIHdlIHN0YXJ0CisJICovCisJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQorCQlhZGFwdGVyLT5mbGFnczIgfD0gSVhHQkVfRkxBRzJfU0VBUkNIX0ZPUl9TRlA7CiAKLQkJaWYgKGh3LT5waHkubXVsdGlzcGVlZF9maWJlcikgewotCQkJLyoKLQkJCSAqIEluIG11bHRpc3BlZWQgZmliZXIgc2V0dXBzLCB0aGUgZGV2aWNlIG1heSBub3QgaGF2ZQotCQkJICogaGFkIGEgcGh5c2ljYWwgY29ubmVjdGlvbiB3aGVuIHRoZSBkcml2ZXIgbG9hZGVkLgotCQkJICogSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgaW5pdGlhbCBsaW5rIGNvbmZpZ3VyYXRpb24KLQkJCSAqIGNvdWxkbid0IGdldCB0aGUgTUFDIGludG8gMTBHIG9yIDFHIG1vZGUsIHNvIHdlJ2xsCi0JCQkgKiBuZXZlciBoYXZlIGEgbGluayBzdGF0dXMgY2hhbmdlIGludGVycnVwdCBmaXJlLgotCQkJICogV2UgbmVlZCB0byB0cnkgYW5kIGZvcmNlIGFuIGF1dG9uZWdvdGlhdGlvbgotCQkJICogc2Vzc2lvbiwgdGhlbiBicmluZyB1cCBsaW5rLgotCQkJICovCi0JCQlpZiAoaHctPm1hYy5vcHMuc2V0dXBfc2ZwKQotCQkJCWh3LT5tYWMub3BzLnNldHVwX3NmcChodyk7Ci0JCQlpZiAoIShhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfSU5fU0ZQX0xJTktfVEFTSykpCi0JCQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+bXVsdGlzcGVlZF9maWJlcl90YXNrKTsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBEaXJlY3QgQXR0YWNoIEN1IGFuZCBub24tbXVsdGlzcGVlZCBmaWJlciBtb2R1bGVzCi0JCQkgKiBzdGlsbCBuZWVkIHRvIGJlIGNvbmZpZ3VyZWQgcHJvcGVybHkgcHJpb3IgdG8KLQkJCSAqIGF0dGVtcHRpbmcgbGluay4KLQkJCSAqLwotCQkJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0lOX1NGUF9NT0RfVEFTSykpCi0JCQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+c2ZwX2NvbmZpZ19tb2R1bGVfdGFzayk7Ci0JCX0KKwlhZGFwdGVyLT5mbGFnczIgfD0gSVhHQkVfRkxBRzJfU0ZQX05FRURTX1JFU0VUOwogfQogCiAvKioKQEAgLTM4NjAsOSArMzkxOSwxMCBAQAogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkFOX0ZBSUxfQ0FQQUJMRSkKIAkJZ3BpZSB8PSBJWEdCRV9TRFAxX0dQSUVOOwogCi0JaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CiAJCWdwaWUgfD0gSVhHQkVfU0RQMV9HUElFTjsKIAkJZ3BpZSB8PSBJWEdCRV9TRFAyX0dQSUVOOworCX0KIAogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfR1BJRSwgZ3BpZSk7CiB9CkBAIC0zOTEzLDE3ICszOTczLDYgQEAKIAkJCWVfY3JpdChkcnYsICJGYW4gaGFzIHN0b3BwZWQsIHJlcGxhY2UgdGhlIGFkYXB0ZXJcbiIpOwogCX0KIAotCS8qCi0JICogRm9yIGhvdC1wbHVnZ2FibGUgU0ZQKyBkZXZpY2VzLCBhIG5ldyBTRlArIG1vZHVsZSBtYXkgaGF2ZQotCSAqIGFycml2ZWQgYmVmb3JlIGludGVycnVwdHMgd2VyZSBlbmFibGVkIGJ1dCBhZnRlciBwcm9iZS4gIFN1Y2gKLQkgKiBkZXZpY2VzIHdvdWxkbid0IGhhdmUgdGhlaXIgdHlwZSBpZGVudGlmaWVkIHlldC4gV2UgbmVlZCB0bwotCSAqIGtpY2sgb2ZmIHRoZSBTRlArIG1vZHVsZSBzZXR1cCBmaXJzdCwgdGhlbiB0cnkgdG8gYnJpbmcgdXAgbGluay4KLQkgKiBJZiB3ZSdyZSBub3QgaG90LXBsdWdnYWJsZSBTRlArLCB3ZSBqdXN0IG5lZWQgdG8gY29uZmlndXJlIGxpbmsKLQkgKiBhbmQgYnJpbmcgaXQgdXAuCi0JICovCi0JaWYgKGh3LT5waHkudHlwZSA9PSBpeGdiZV9waHlfbm9uZSkKLQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+c2ZwX2NvbmZpZ19tb2R1bGVfdGFzayk7Ci0KIAkvKiBlbmFibGUgdHJhbnNtaXRzICovCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhhZGFwdGVyLT5uZXRkZXYpOwogCkBAIC0zOTMxLDcgKzM5ODAsNyBAQAogCSAqIGxpbmsgdXAgaW50ZXJydXB0IGJ1dCBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtICovCiAJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19ORUVEX0xJTktfVVBEQVRFOwogCWFkYXB0ZXItPmxpbmtfY2hlY2tfdGltZW91dCA9IGppZmZpZXM7Ci0JbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyk7CisJbW9kX3RpbWVyKCZhZGFwdGVyLT5zZXJ2aWNlX3RpbWVyLCBqaWZmaWVzKTsKIAogCS8qIFNldCBQRiBSZXNldCBEb25lIGJpdCBzbyBQRi9WRiBNYWlsIE9wcyBjYW4gd29yayAqLwogCWN0cmxfZXh0ID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0NUUkxfRVhUKTsKQEAgLTM5NDQsOCArMzk5MywxMSBAQAogdm9pZCBpeGdiZV9yZWluaXRfbG9ja2VkKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewogCVdBUk5fT04oaW5faW50ZXJydXB0KCkpOworCS8qIHB1dCBvZmYgYW55IGltcGVuZGluZyBOZXRXYXRjaERvZ1RpbWVvdXQgKi8KKwlhZGFwdGVyLT5uZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwogCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSVhHQkVfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQotCQltc2xlZXAoMSk7CisJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKIAlpeGdiZV9kb3duKGFkYXB0ZXIpOwogCS8qCiAJICogSWYgU1ItSU9WIGVuYWJsZWQgdGhlbiB3YWl0IGEgYml0IGJlZm9yZSBicmluZ2luZyB0aGUgYWRhcHRlcgpAQCAtMzk3MiwxMCArNDAyNCwyMCBAQAogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJaW50IGVycjsKIAorCS8qIGxvY2sgU0ZQIGluaXQgYml0IHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIHdpdGggdGhlIHdhdGNoZG9nICovCisJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19JWEdCRV9JTl9TRlBfSU5JVCwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOworCisJLyogY2xlYXIgYWxsIFNGUCBhbmQgbGluayBjb25maWcgcmVsYXRlZCBmbGFncyB3aGlsZSBob2xkaW5nIFNGUF9JTklUICovCisJYWRhcHRlci0+ZmxhZ3MyICY9IH4oSVhHQkVfRkxBRzJfU0VBUkNIX0ZPUl9TRlAgfAorCQkJICAgICBJWEdCRV9GTEFHMl9TRlBfTkVFRFNfUkVTRVQpOworCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX05FRURfTElOS19DT05GSUc7CisKIAllcnIgPSBody0+bWFjLm9wcy5pbml0X2h3KGh3KTsKIAlzd2l0Y2ggKGVycikgewogCWNhc2UgMDoKIAljYXNlIElYR0JFX0VSUl9TRlBfTk9UX1BSRVNFTlQ6CisJY2FzZSBJWEdCRV9FUlJfU0ZQX05PVF9TVVBQT1JURUQ6CiAJCWJyZWFrOwogCWNhc2UgSVhHQkVfRVJSX01BU1RFUl9SRVFVRVNUU19QRU5ESU5HOgogCQllX2Rldl9lcnIoIm1hc3RlciBkaXNhYmxlIHRpbWVkIG91dFxuIik7CkBAIC0zOTkzLDYgKzQwNTUsOCBAQAogCQllX2Rldl9lcnIoIkhhcmR3YXJlIEVycm9yOiAlZFxuIiwgZXJyKTsKIAl9CiAKKwljbGVhcl9iaXQoX19JWEdCRV9JTl9TRlBfSU5JVCwgJmFkYXB0ZXItPnN0YXRlKTsKKwogCS8qIHJlcHJvZ3JhbSB0aGUgUkFSWzBdIGluIGNhc2UgdXNlciBjaGFuZ2VkIGl0LiAqLwogCWh3LT5tYWMub3BzLnNldF9yYXIoaHcsIDAsIGh3LT5tYWMuYWRkciwgYWRhcHRlci0+bnVtX3ZmcywKIAkJCSAgICBJWEdCRV9SQUhfQVYpOwpAQCAtNDEyMSwxMyArNDE4NSwzOSBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgcnhjdHJsOwotCXUzMiB0eGRjdGw7CiAJaW50IGk7CiAJaW50IG51bV9xX3ZlY3RvcnMgPSBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsKIAogCS8qIHNpZ25hbCB0aGF0IHdlIGFyZSBkb3duIHRvIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciAqLwogCXNldF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpOwogCisJLyogZGlzYWJsZSByZWNlaXZlcyAqLworCXJ4Y3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SWENUUkwpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhDVFJMLCByeGN0cmwgJiB+SVhHQkVfUlhDVFJMX1JYRU4pOworCisJLyogZGlzYWJsZSBhbGwgZW5hYmxlZCByeCBxdWV1ZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQorCQkvKiB0aGlzIGNhbGwgYWxzbyBmbHVzaGVzIHRoZSBwcmV2aW91cyB3cml0ZSAqLworCQlpeGdiZV9kaXNhYmxlX3J4X3F1ZXVlKGFkYXB0ZXIsIGFkYXB0ZXItPnJ4X3JpbmdbaV0pOworCisJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CisKKwluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKKworCS8qIGNhbGwgY2FycmllciBvZmYgZmlyc3QgdG8gYXZvaWQgZmFsc2UgZGV2X3dhdGNoZG9nIHRpbWVvdXRzICovCisJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKwluZXRpZl90eF9kaXNhYmxlKG5ldGRldik7CisKKwlpeGdiZV9pcnFfZGlzYWJsZShhZGFwdGVyKTsKKworCWl4Z2JlX25hcGlfZGlzYWJsZV9hbGwoYWRhcHRlcik7CisKKwlhZGFwdGVyLT5mbGFnczIgJj0gfihJWEdCRV9GTEFHMl9GRElSX1JFUVVJUkVTX1JFSU5JVCB8CisJCQkgICAgIElYR0JFX0ZMQUcyX1JFU0VUX1JFUVVFU1RFRCk7CisJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfTkVFRF9MSU5LX1VQREFURTsKKworCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT5zZXJ2aWNlX3RpbWVyKTsKKwogCS8qIGRpc2FibGUgcmVjZWl2ZSBmb3IgYWxsIFZGcyBhbmQgd2FpdCBvbmUgc2Vjb25kICovCiAJaWYgKGFkYXB0ZXItPm51bV92ZnMpIHsKIAkJLyogcGluZyBhbGwgdGhlIGFjdGl2ZSB2ZnMgdG8gbGV0IHRoZW0ga25vdyB3ZSBhcmUgZ29pbmcgZG93biAqLwpAQCAtNDE0MSwzMSArNDIzMSw2IEBACiAJCQlhZGFwdGVyLT52ZmluZm9baV0uY2xlYXJfdG9fc2VuZCA9IDA7CiAJfQogCi0JLyogZGlzYWJsZSByZWNlaXZlcyAqLwotCXJ4Y3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SWENUUkwpOwotCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhDVFJMLCByeGN0cmwgJiB+SVhHQkVfUlhDVFJMX1JYRU4pOwotCi0JLyogZGlzYWJsZSBhbGwgZW5hYmxlZCByeCBxdWV1ZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQotCQkvKiB0aGlzIGNhbGwgYWxzbyBmbHVzaGVzIHRoZSBwcmV2aW91cyB3cml0ZSAqLwotCQlpeGdiZV9kaXNhYmxlX3J4X3F1ZXVlKGFkYXB0ZXIsIGFkYXB0ZXItPnJ4X3JpbmdbaV0pOwotCi0JbXNsZWVwKDEwKTsKLQotCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOwotCi0JY2xlYXJfYml0KF9fSVhHQkVfU0ZQX01PRFVMRV9OT1RfRk9VTkQsICZhZGFwdGVyLT5zdGF0ZSk7Ci0JZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPnNmcF90aW1lcik7Ci0JZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyKTsKLQljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT53YXRjaGRvZ190YXNrKTsKLQotCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7Ci0JbmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpOwotCi0JaXhnYmVfaXJxX2Rpc2FibGUoYWRhcHRlcik7Ci0KLQlpeGdiZV9uYXBpX2Rpc2FibGVfYWxsKGFkYXB0ZXIpOwotCiAJLyogQ2xlYW51cCB0aGUgYWZmaW5pdHlfaGludCBDUFUgbWFzayBtZW1vcnkgYW5kIGNhbGxiYWNrICovCiAJZm9yIChpID0gMDsgaSA8IG51bV9xX3ZlY3RvcnM7IGkrKykgewogCQlzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IgKnFfdmVjdG9yID0gYWRhcHRlci0+cV92ZWN0b3JbaV07CkBAIC00MTc1LDIxICs0MjQwLDEzIEBACiAJCWZyZWVfY3B1bWFza192YXIocV92ZWN0b3ItPmFmZmluaXR5X21hc2spOwogCX0KIAotCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkRJUl9IQVNIX0NBUEFCTEUgfHwKLQkgICAgYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZESVJfUEVSRkVDVF9DQVBBQkxFKQotCQljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5mZGlyX3JlaW5pdF90YXNrKTsKLQotCWlmIChhZGFwdGVyLT5mbGFnczIgJiBJWEdCRV9GTEFHMl9URU1QX1NFTlNPUl9DQVBBQkxFKQotCQljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5jaGVja19vdmVydGVtcF90YXNrKTsKLQogCS8qIGRpc2FibGUgdHJhbnNtaXRzIGluIHRoZSBoYXJkd2FyZSBub3cgdGhhdCBpbnRlcnJ1cHRzIGFyZSBvZmYgKi8KIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CiAJCXU4IHJlZ19pZHggPSBhZGFwdGVyLT50eF9yaW5nW2ldLT5yZWdfaWR4OwotCQl0eGRjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVFhEQ1RMKHJlZ19pZHgpKTsKLQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9UWERDVEwocmVnX2lkeCksCi0JCQkJKHR4ZGN0bCAmIH5JWEdCRV9UWERDVExfRU5BQkxFKSk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVFhEQ1RMKHJlZ19pZHgpLCBJWEdCRV9UWERDVExfU1dGTFNIKTsKIAl9Ci0JLyogRGlzYWJsZSB0aGUgVHggRE1BIGVuZ2luZSBvbiA4MjU5OSAqLworCisJLyogRGlzYWJsZSB0aGUgVHggRE1BIGVuZ2luZSBvbiA4MjU5OSBhbmQgWDU0MCAqLwogCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CiAJY2FzZSBpeGdiZV9tYWNfODI1OTlFQjoKIAljYXNlIGl4Z2JlX21hY19YNTQwOgpAQCAtNDIwMSw5ICs0MjU4LDYgQEAKIAkJYnJlYWs7CiAJfQogCi0JLyogY2xlYXIgbi10dXBsZSBmaWx0ZXJzIHRoYXQgYXJlIGNhY2hlZCAqLwotCWV0aHRvb2xfbnR1cGxlX2ZsdXNoKG5ldGRldik7Ci0KIAlpZiAoIXBjaV9jaGFubmVsX29mZmxpbmUoYWRhcHRlci0+cGRldikpCiAJCWl4Z2JlX3Jlc2V0KGFkYXB0ZXIpOwogCkBAIC00MjY3LDI1ICs0MzIxLDggQEAKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKLQlhZGFwdGVyLT50eF90aW1lb3V0X2NvdW50Kys7Ci0KIAkvKiBEbyB0aGUgcmVzZXQgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCAqLwotCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnJlc2V0X3Rhc2spOwotfQotCi1zdGF0aWMgdm9pZCBpeGdiZV9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcjsKLQlhZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpeGdiZV9hZGFwdGVyLCByZXNldF90YXNrKTsKLQotCS8qIElmIHdlJ3JlIGFscmVhZHkgZG93biBvciByZXNldHRpbmcsIGp1c3QgYmFpbCAqLwotCWlmICh0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkgfHwKLQkgICAgdGVzdF9iaXQoX19JWEdCRV9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCi0JCXJldHVybjsKLQotCWl4Z2JlX2R1bXAoYWRhcHRlcik7Ci0JbmV0ZGV2X2VycihhZGFwdGVyLT5uZXRkZXYsICJSZXNldCBhZGFwdGVyXG4iKTsKLQlpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOworCWl4Z2JlX3R4X3RpbWVvdXRfcmVzZXQoYWRhcHRlcik7CiB9CiAKIC8qKgpAQCAtNDU2Nyw4ICs0NjA0LDggQEAKICNpZmRlZiBDT05GSUdfSVhHQkVfRENCCiAKIC8qIGl4Z2JlX2dldF9maXJzdF9yZWdfaWR4IC0gUmV0dXJuIGZpcnN0IHJlZ2lzdGVyIGluZGV4IGFzc29jaWF0ZWQgd2l0aCByaW5nICovCi12b2lkIGl4Z2JlX2dldF9maXJzdF9yZWdfaWR4KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1OCB0YywKLQkJCSAgICAgdW5zaWduZWQgaW50ICp0eCwgdW5zaWduZWQgaW50ICpyeCkKK3N0YXRpYyB2b2lkIGl4Z2JlX2dldF9maXJzdF9yZWdfaWR4KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1OCB0YywKKwkJCQkgICAgdW5zaWduZWQgaW50ICp0eCwgdW5zaWduZWQgaW50ICpyeCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CkBAIC01MTAwLDExICs1MTM3LDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCByaW5nX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKLXsKLQlrZnJlZShjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGl4Z2JlX3JpbmcsIHJjdSkpOwotfQotCiAvKioKICAqIGl4Z2JlX2NsZWFyX2ludGVycnVwdF9zY2hlbWUgLSBDbGVhciB0aGUgY3VycmVudCBpbnRlcnJ1cHQgc2NoZW1lIHNldHRpbmdzCiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gY2xlYXIgaW50ZXJydXB0IHNjaGVtZSBvbgpAQCAtNTEyNiw3ICs1MTU4LDcgQEAKIAkJLyogaXhnYmVfZ2V0X3N0YXRzNjQoKSBtaWdodCBhY2Nlc3MgdGhpcyByaW5nLCB3ZSBtdXN0IHdhaXQKIAkJICogYSBncmFjZSBwZXJpb2QgYmVmb3JlIGZyZWVpbmcgaXQuCiAJCSAqLwotCQljYWxsX3JjdSgmcmluZy0+cmN1LCByaW5nX2ZyZWVfcmN1KTsKKwkJa2ZyZWVfcmN1KHJpbmcsIHJjdSk7CiAJCWFkYXB0ZXItPnJ4X3JpbmdbaV0gPSBOVUxMOwogCX0KIApAQCAtNTEzOCw1NyArNTE3MCw2IEBACiB9CiAKIC8qKgotICogaXhnYmVfc2ZwX3RpbWVyIC0gd29ya2VyIHRocmVhZCB0byBmaW5kIGEgbWlzc2luZyBtb2R1bGUKLSAqIEBkYXRhOiBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdAotICoqLwotc3RhdGljIHZvaWQgaXhnYmVfc2ZwX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqKWRhdGE7Ci0KLQkvKgotCSAqIERvIHRoZSBzZnBfdGltZXIgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCBkdWUgdG8gdGhlCi0JICogZGVsYXlzIHRoYXQgc2ZwKyBkZXRlY3Rpb24gcmVxdWlyZXMKLQkgKi8KLQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5zZnBfdGFzayk7Ci19Ci0KLS8qKgotICogaXhnYmVfc2ZwX3Rhc2sgLSB3b3JrZXIgdGhyZWFkIHRvIGZpbmQgYSBtaXNzaW5nIG1vZHVsZQotICogQHdvcms6IHBvaW50ZXIgdG8gd29ya19zdHJ1Y3QgY29udGFpbmluZyBvdXIgZGF0YQotICoqLwotc3RhdGljIHZvaWQgaXhnYmVfc2ZwX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCi0JCQkJCQkgICAgIHN0cnVjdCBpeGdiZV9hZGFwdGVyLAotCQkJCQkJICAgICBzZnBfdGFzayk7Ci0Jc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQotCWlmICgoaHctPnBoeS50eXBlID09IGl4Z2JlX3BoeV9ubCkgJiYKLQkgICAgKGh3LT5waHkuc2ZwX3R5cGUgPT0gaXhnYmVfc2ZwX3R5cGVfbm90X3ByZXNlbnQpKSB7Ci0JCXMzMiByZXQgPSBody0+cGh5Lm9wcy5pZGVudGlmeV9zZnAoaHcpOwotCQlpZiAocmV0ID09IElYR0JFX0VSUl9TRlBfTk9UX1BSRVNFTlQpCi0JCQlnb3RvIHJlc2NoZWR1bGU7Ci0JCXJldCA9IGh3LT5waHkub3BzLnJlc2V0KGh3KTsKLQkJaWYgKHJldCA9PSBJWEdCRV9FUlJfU0ZQX05PVF9TVVBQT1JURUQpIHsKLQkJCWVfZGV2X2VycigiZmFpbGVkIHRvIGluaXRpYWxpemUgYmVjYXVzZSBhbiB1bnN1cHBvcnRlZCAiCi0JCQkJICAiU0ZQKyBtb2R1bGUgdHlwZSB3YXMgZGV0ZWN0ZWQuXG4iKTsKLQkJCWVfZGV2X2VycigiUmVsb2FkIHRoZSBkcml2ZXIgYWZ0ZXIgaW5zdGFsbGluZyBhICIKLQkJCQkgICJzdXBwb3J0ZWQgbW9kdWxlLlxuIik7Ci0JCQl1bnJlZ2lzdGVyX25ldGRldihhZGFwdGVyLT5uZXRkZXYpOwotCQl9IGVsc2UgewotCQkJZV9pbmZvKHByb2JlLCAiZGV0ZWN0ZWQgU0ZQKzogJWRcbiIsIGh3LT5waHkuc2ZwX3R5cGUpOwotCQl9Ci0JCS8qIGRvbid0IG5lZWQgdGhpcyByb3V0aW5lIGFueSBtb3JlICovCi0JCWNsZWFyX2JpdChfX0lYR0JFX1NGUF9NT0RVTEVfTk9UX0ZPVU5ELCAmYWRhcHRlci0+c3RhdGUpOwotCX0KLQlyZXR1cm47Ci1yZXNjaGVkdWxlOgotCWlmICh0ZXN0X2JpdChfX0lYR0JFX1NGUF9NT0RVTEVfTk9UX0ZPVU5ELCAmYWRhcHRlci0+c3RhdGUpKQotCQltb2RfdGltZXIoJmFkYXB0ZXItPnNmcF90aW1lciwKLQkJCSAgcm91bmRfamlmZmllcyhqaWZmaWVzICsgKDIgKiBIWikpKTsKLX0KLQotLyoqCiAgKiBpeGdiZV9zd19pbml0IC0gSW5pdGlhbGl6ZSBnZW5lcmFsIHNvZnR3YXJlIHN0cnVjdHVyZXMgKHN0cnVjdCBpeGdiZV9hZGFwdGVyKQogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKICAqCkBAIC01OTA0LDggKzU4ODUsMTMgQEAKIAkJaHdzdGF0cy0+Z290YyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfR09UQ0gpOwogCQlod3N0YXRzLT50b3IgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1RPUkgpOwogCQlicmVhazsKLQljYXNlIGl4Z2JlX21hY184MjU5OUVCOgogCWNhc2UgaXhnYmVfbWFjX1g1NDA6CisJCS8qIE9TMkJNQyBzdGF0cyBhcmUgWDU0MCBvbmx5Ki8KKwkJaHdzdGF0cy0+bzJiZ3B0YyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTzJCR1BUQyk7CisJCWh3c3RhdHMtPm8yYnNwYyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTzJCU1BDKTsKKwkJaHdzdGF0cy0+YjJvc3BjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9CMk9TUEMpOworCQlod3N0YXRzLT5iMm9ncHJjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9CMk9HUFJDKTsKKwljYXNlIGl4Z2JlX21hY184MjU5OUVCOgogCQlod3N0YXRzLT5nb3JjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HT1JDTCk7CiAJCUlYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HT1JDSCk7IC8qIHRvIGNsZWFyICovCiAJCWh3c3RhdHMtPmdvdGMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dPVENMKTsKQEAgLTU5NzksMjMgKzU5NjUsNjYgQEAKIH0KIAogLyoqCi0gKiBpeGdiZV93YXRjaGRvZyAtIFRpbWVyIENhbGwtYmFjawotICogQGRhdGE6IHBvaW50ZXIgdG8gYWRhcHRlciBjYXN0IGludG8gYW4gdW5zaWduZWQgbG9uZworICogaXhnYmVfZmRpcl9yZWluaXRfc3VidGFzayAtIHdvcmtlciB0aHJlYWQgdG8gcmVpbml0IEZESVIgZmlsdGVyIHRhYmxlCisgKiBAYWRhcHRlciAtIHBvaW50ZXIgdG8gdGhlIGRldmljZSBhZGFwdGVyIHN0cnVjdHVyZQogICoqLwotc3RhdGljIHZvaWQgaXhnYmVfd2F0Y2hkb2codW5zaWduZWQgbG9uZyBkYXRhKQorc3RhdGljIHZvaWQgaXhnYmVfZmRpcl9yZWluaXRfc3VidGFzayhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqKWRhdGE7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlpbnQgaTsKKworCWlmICghKGFkYXB0ZXItPmZsYWdzMiAmIElYR0JFX0ZMQUcyX0ZESVJfUkVRVUlSRVNfUkVJTklUKSkKKwkJcmV0dXJuOworCisJYWRhcHRlci0+ZmxhZ3MyICY9IH5JWEdCRV9GTEFHMl9GRElSX1JFUVVJUkVTX1JFSU5JVDsKKworCS8qIGlmIGludGVyZmFjZSBpcyBkb3duIGRvIG5vdGhpbmcgKi8KKwlpZiAodGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQorCQlyZXR1cm47CisKKwkvKiBkbyBub3RoaW5nIGlmIHdlIGFyZSBub3QgdXNpbmcgc2lnbmF0dXJlIGZpbHRlcnMgKi8KKwlpZiAoIShhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkRJUl9IQVNIX0NBUEFCTEUpKQorCQlyZXR1cm47CisKKwlhZGFwdGVyLT5mZGlyX292ZXJmbG93Kys7CisKKwlpZiAoaXhnYmVfcmVpbml0X2ZkaXJfdGFibGVzXzgyNTk5KGh3KSA9PSAwKSB7CisJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCisJCQlzZXRfYml0KF9fSVhHQkVfVFhfRkRJUl9JTklUX0RPTkUsCisJCQkgICAgICAgICYoYWRhcHRlci0+dHhfcmluZ1tpXS0+c3RhdGUpKTsKKwkJLyogcmUtZW5hYmxlIGZsb3cgZGlyZWN0b3IgaW50ZXJydXB0cyAqLworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJTVMsIElYR0JFX0VJTVNfRkxPV19ESVIpOworCX0gZWxzZSB7CisJCWVfZXJyKHByb2JlLCAiZmFpbGVkIHRvIGZpbmlzaCBGRElSIHJlLWluaXRpYWxpemF0aW9uLCAiCisJCSAgICAgICJpZ25vcmVkIGFkZGluZyBGRElSIEFUUiBmaWx0ZXJzXG4iKTsKKwl9Cit9CisKKy8qKgorICogaXhnYmVfY2hlY2tfaGFuZ19zdWJ0YXNrIC0gY2hlY2sgZm9yIGh1bmcgcXVldWVzIGFuZCBkcm9wcGVkIGludGVycnVwdHMKKyAqIEBhZGFwdGVyIC0gcG9pbnRlciB0byB0aGUgZGV2aWNlIGFkYXB0ZXIgc3RydWN0dXJlCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXJ2ZXMgdHdvIHB1cnBvc2VzLiAgRmlyc3QgaXQgc3Ryb2JlcyB0aGUgaW50ZXJydXB0IGxpbmVzCisgKiBpbiBvcmRlciB0byBtYWtlIGNlcnRhaW4gaW50ZXJydXB0cyBhcmUgb2NjdXJpbmcuICBTZWNvbmRseSBpdCBzZXRzIHRoZQorICogYml0cyBuZWVkZWQgdG8gY2hlY2sgZm9yIFRYIGhhbmdzLiAgQXMgYSByZXN1bHQgd2Ugc2hvdWxkIGltbWVkaWF0ZWx5CisgKiBkZXRlcm1pbmUgaWYgYSBoYW5nIGhhcyBvY2N1cmVkLgorICovCitzdGF0aWMgdm9pZCBpeGdiZV9jaGVja19oYW5nX3N1YnRhc2soc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1NjQgZWljcyA9IDA7CiAJaW50IGk7CiAKLQkvKgotCSAqICBEbyB0aGUgd2F0Y2hkb2cgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCBkdWUgdG8gdGhlIGxvdmVseQotCSAqIGRlbGF5cyB0aGF0IHNvbWUgb2YgdGhlIG5ld2VyIGhhcmR3YXJlIHJlcXVpcmVzCi0JICovCisJLyogSWYgd2UncmUgZG93biBvciByZXNldHRpbmcsIGp1c3QgYmFpbCAqLworCWlmICh0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkgfHwKKwkgICAgdGVzdF9iaXQoX19JWEdCRV9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybjsKIAotCWlmICh0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCi0JCWdvdG8gd2F0Y2hkb2dfc2hvcnRfY2lyY3VpdDsKKwkvKiBGb3JjZSBkZXRlY3Rpb24gb2YgaHVuZyBjb250cm9sbGVyICovCisJaWYgKG5ldGlmX2NhcnJpZXJfb2soYWRhcHRlci0+bmV0ZGV2KSkgeworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQorCQkJc2V0X2NoZWNrX2Zvcl90eF9oYW5nKGFkYXB0ZXItPnR4X3JpbmdbaV0pOworCX0KIAogCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQpKSB7CiAJCS8qCkBAIC02MDA1LDEwOCArNjAzNCwxNzIgQEAKIAkJICovCiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDUywKIAkJCShJWEdCRV9FSUNTX1RDUF9USU1FUiB8IElYR0JFX0VJQ1NfT1RIRVIpKTsKLQkJZ290byB3YXRjaGRvZ19yZXNjaGVkdWxlOworCX0gZWxzZSB7CisJCS8qIGdldCBvbmUgYml0IGZvciBldmVyeSBhY3RpdmUgdHgvcnggaW50ZXJydXB0IHZlY3RvciAqLworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX21zaXhfdmVjdG9ycyAtIE5PTl9RX1ZFQ1RPUlM7IGkrKykgeworCQkJc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxdiA9IGFkYXB0ZXItPnFfdmVjdG9yW2ldOworCQkJaWYgKHF2LT5yeHJfY291bnQgfHwgcXYtPnR4cl9jb3VudCkKKwkJCQllaWNzIHw9ICgodTY0KTEgPDwgaSk7CisJCX0KIAl9CiAKLQkvKiBnZXQgb25lIGJpdCBmb3IgZXZlcnkgYWN0aXZlIHR4L3J4IGludGVycnVwdCB2ZWN0b3IgKi8KLQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX21zaXhfdmVjdG9ycyAtIE5PTl9RX1ZFQ1RPUlM7IGkrKykgewotCQlzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IgKnF2ID0gYWRhcHRlci0+cV92ZWN0b3JbaV07Ci0JCWlmIChxdi0+cnhyX2NvdW50IHx8IHF2LT50eHJfY291bnQpCi0JCQllaWNzIHw9ICgodTY0KTEgPDwgaSk7Ci0JfQotCi0JLyogQ2F1c2Ugc29mdHdhcmUgaW50ZXJydXB0IHRvIGVuc3VyZSByeCByaW5ncyBhcmUgY2xlYW5lZCAqLworCS8qIENhdXNlIHNvZnR3YXJlIGludGVycnVwdCB0byBlbnN1cmUgcmluZ3MgYXJlIGNsZWFuZWQgKi8KIAlpeGdiZV9pcnFfcmVhcm1fcXVldWVzKGFkYXB0ZXIsIGVpY3MpOwogCi13YXRjaGRvZ19yZXNjaGVkdWxlOgotCS8qIFJlc2V0IHRoZSB0aW1lciAqLwotCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIDIgKiBIWikpOwotCi13YXRjaGRvZ19zaG9ydF9jaXJjdWl0OgotCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPndhdGNoZG9nX3Rhc2spOwogfQogCiAvKioKLSAqIGl4Z2JlX211bHRpc3BlZWRfZmliZXJfdGFzayAtIHdvcmtlciB0aHJlYWQgdG8gY29uZmlndXJlIG11bHRpc3BlZWQgZmliZXIKLSAqIEB3b3JrOiBwb2ludGVyIHRvIHdvcmtfc3RydWN0IGNvbnRhaW5pbmcgb3VyIGRhdGEKKyAqIGl4Z2JlX3dhdGNoZG9nX3VwZGF0ZV9saW5rIC0gdXBkYXRlIHRoZSBsaW5rIHN0YXR1cworICogQGFkYXB0ZXIgLSBwb2ludGVyIHRvIHRoZSBkZXZpY2UgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqIEBsaW5rX3NwZWVkIC0gcG9pbnRlciB0byBhIHUzMiB0byBzdG9yZSB0aGUgbGlua19zcGVlZAogICoqLwotc3RhdGljIHZvaWQgaXhnYmVfbXVsdGlzcGVlZF9maWJlcl90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyB2b2lkIGl4Z2JlX3dhdGNoZG9nX3VwZGF0ZV9saW5rKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewotCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCi0JCQkJCQkgICAgIHN0cnVjdCBpeGdiZV9hZGFwdGVyLAotCQkJCQkJICAgICBtdWx0aXNwZWVkX2ZpYmVyX3Rhc2spOwogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0JdTMyIGF1dG9uZWc7Ci0JYm9vbCBuZWdvdGlhdGlvbjsKLQotCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfSU5fU0ZQX0xJTktfVEFTSzsKLQlhdXRvbmVnID0gaHctPnBoeS5hdXRvbmVnX2FkdmVydGlzZWQ7Ci0JaWYgKCghYXV0b25lZykgJiYgKGh3LT5tYWMub3BzLmdldF9saW5rX2NhcGFiaWxpdGllcykpCi0JCWh3LT5tYWMub3BzLmdldF9saW5rX2NhcGFiaWxpdGllcyhodywgJmF1dG9uZWcsICZuZWdvdGlhdGlvbik7Ci0JaHctPm1hYy5hdXRvdHJ5X3Jlc3RhcnQgPSBmYWxzZTsKLQlpZiAoaHctPm1hYy5vcHMuc2V0dXBfbGluaykKLQkJaHctPm1hYy5vcHMuc2V0dXBfbGluayhodywgYXV0b25lZywgbmVnb3RpYXRpb24sIHRydWUpOwotCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfTkVFRF9MSU5LX1VQREFURTsKLQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19JTl9TRlBfTElOS19UQVNLOwotfQotCi0vKioKLSAqIGl4Z2JlX3NmcF9jb25maWdfbW9kdWxlX3Rhc2sgLSB3b3JrZXIgdGhyZWFkIHRvIGNvbmZpZ3VyZSBhIG5ldyBTRlArIG1vZHVsZQotICogQHdvcms6IHBvaW50ZXIgdG8gd29ya19zdHJ1Y3QgY29udGFpbmluZyBvdXIgZGF0YQotICoqLwotc3RhdGljIHZvaWQgaXhnYmVfc2ZwX2NvbmZpZ19tb2R1bGVfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywKLQkJCQkJCSAgICAgc3RydWN0IGl4Z2JlX2FkYXB0ZXIsCi0JCQkJCQkgICAgIHNmcF9jb25maWdfbW9kdWxlX3Rhc2spOwotCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0JdTMyIGVycjsKLQotCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfSU5fU0ZQX01PRF9UQVNLOwotCi0JLyogVGltZSBmb3IgZWxlY3RyaWNhbCBvc2NpbGxhdGlvbnMgdG8gc2V0dGxlIGRvd24gKi8KLQltc2xlZXAoMTAwKTsKLQllcnIgPSBody0+cGh5Lm9wcy5pZGVudGlmeV9zZnAoaHcpOwotCi0JaWYgKGVyciA9PSBJWEdCRV9FUlJfU0ZQX05PVF9TVVBQT1JURUQpIHsKLQkJZV9kZXZfZXJyKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBiZWNhdXNlIGFuIHVuc3VwcG9ydGVkIFNGUCsgIgotCQkJICAibW9kdWxlIHR5cGUgd2FzIGRldGVjdGVkLlxuIik7Ci0JCWVfZGV2X2VycigiUmVsb2FkIHRoZSBkcml2ZXIgYWZ0ZXIgaW5zdGFsbGluZyBhIHN1cHBvcnRlZCAiCi0JCQkgICJtb2R1bGUuXG4iKTsKLQkJdW5yZWdpc3Rlcl9uZXRkZXYoYWRhcHRlci0+bmV0ZGV2KTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoaHctPm1hYy5vcHMuc2V0dXBfc2ZwKQotCQlody0+bWFjLm9wcy5zZXR1cF9zZnAoaHcpOwotCi0JaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0lOX1NGUF9MSU5LX1RBU0spKQotCQkvKiBUaGlzIHdpbGwgYWxzbyB3b3JrIGZvciBEQSBUd2luYXggY29ubmVjdGlvbnMgKi8KLQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+bXVsdGlzcGVlZF9maWJlcl90YXNrKTsKLQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19JTl9TRlBfTU9EX1RBU0s7Ci19Ci0KLS8qKgotICogaXhnYmVfZmRpcl9yZWluaXRfdGFzayAtIHdvcmtlciB0aHJlYWQgdG8gcmVpbml0IEZESVIgZmlsdGVyIHRhYmxlCi0gKiBAd29yazogcG9pbnRlciB0byB3b3JrX3N0cnVjdCBjb250YWluaW5nIG91ciBkYXRhCi0gKiovCi1zdGF0aWMgdm9pZCBpeGdiZV9mZGlyX3JlaW5pdF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLAotCQkJCQkJICAgICBzdHJ1Y3QgaXhnYmVfYWRhcHRlciwKLQkJCQkJCSAgICAgZmRpcl9yZWluaXRfdGFzayk7Ci0Jc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgbGlua19zcGVlZCA9IGFkYXB0ZXItPmxpbmtfc3BlZWQ7CisJYm9vbCBsaW5rX3VwID0gYWRhcHRlci0+bGlua191cDsKIAlpbnQgaTsKIAotCWlmIChpeGdiZV9yZWluaXRfZmRpcl90YWJsZXNfODI1OTkoaHcpID09IDApIHsKLQkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKLQkJCXNldF9iaXQoX19JWEdCRV9UWF9GRElSX0lOSVRfRE9ORSwKLQkJCQkmKGFkYXB0ZXItPnR4X3JpbmdbaV0tPnN0YXRlKSk7CisJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX05FRURfTElOS19VUERBVEUpKQorCQlyZXR1cm47CisKKwlpZiAoaHctPm1hYy5vcHMuY2hlY2tfbGluaykgeworCQlody0+bWFjLm9wcy5jaGVja19saW5rKGh3LCAmbGlua19zcGVlZCwgJmxpbmtfdXAsIGZhbHNlKTsKIAl9IGVsc2UgewotCQllX2Vycihwcm9iZSwgImZhaWxlZCB0byBmaW5pc2ggRkRJUiByZS1pbml0aWFsaXphdGlvbiwgIgotCQkgICAgICAiaWdub3JlZCBhZGRpbmcgRkRJUiBBVFIgZmlsdGVyc1xuIik7CisJCS8qIGFsd2F5cyBhc3N1bWUgbGluayBpcyB1cCwgaWYgbm8gY2hlY2sgbGluayBmdW5jdGlvbiAqLworCQlsaW5rX3NwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw7CisJCWxpbmtfdXAgPSB0cnVlOwogCX0KLQkvKiBEb25lIEZESVIgUmUtaW5pdGlhbGl6YXRpb24sIGVuYWJsZSB0cmFuc21pdHMgKi8KLQluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKGFkYXB0ZXItPm5ldGRldik7CisJaWYgKGxpbmtfdXApIHsKKwkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkgeworCQkJZm9yIChpID0gMDsgaSA8IE1BWF9UUkFGRklDX0NMQVNTOyBpKyspCisJCQkJaHctPm1hYy5vcHMuZmNfZW5hYmxlKGh3LCBpKTsKKwkJfSBlbHNlIHsKKwkJCWh3LT5tYWMub3BzLmZjX2VuYWJsZShodywgMCk7CisJCX0KKwl9CisKKwlpZiAobGlua191cCB8fAorCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIChhZGFwdGVyLT5saW5rX2NoZWNrX3RpbWVvdXQgKworCQkJCSBJWEdCRV9UUllfTElOS19USU1FT1VUKSkpIHsKKwkJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfTkVFRF9MSU5LX1VQREFURTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSU1TLCBJWEdCRV9FSU1DX0xTQyk7CisJCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKKwl9CisKKwlhZGFwdGVyLT5saW5rX3VwID0gbGlua191cDsKKwlhZGFwdGVyLT5saW5rX3NwZWVkID0gbGlua19zcGVlZDsKK30KKworLyoqCisgKiBpeGdiZV93YXRjaGRvZ19saW5rX2lzX3VwIC0gdXBkYXRlIG5ldGlmX2NhcnJpZXIgc3RhdHVzIGFuZAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50IGxpbmsgdXAgbWVzc2FnZQorICogQGFkYXB0ZXIgLSBwb2ludGVyIHRvIHRoZSBkZXZpY2UgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JlX3dhdGNoZG9nX2xpbmtfaXNfdXAoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiBsaW5rX3NwZWVkID0gYWRhcHRlci0+bGlua19zcGVlZDsKKwlib29sIGZsb3dfcngsIGZsb3dfdHg7CisKKwkvKiBvbmx5IGNvbnRpbnVlIGlmIGxpbmsgd2FzIHByZXZpb3VzbHkgZG93biAqLworCWlmIChuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpCisJCXJldHVybjsKKworCWFkYXB0ZXItPmZsYWdzMiAmPSB+SVhHQkVfRkxBRzJfU0VBUkNIX0ZPUl9TRlA7CisKKwlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWNhc2UgaXhnYmVfbWFjXzgyNTk4RUI6IHsKKwkJdTMyIGZyY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDVFJMKTsKKwkJdTMyIHJtY3MgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUk1DUyk7CisJCWZsb3dfcnggPSAhIShmcmN0bCAmIElYR0JFX0ZDVFJMX1JGQ0UpOworCQlmbG93X3R4ID0gISEocm1jcyAmIElYR0JFX1JNQ1NfVEZDRV84MDJfM1gpOworCX0KKwkJYnJlYWs7CisJY2FzZSBpeGdiZV9tYWNfWDU0MDoKKwljYXNlIGl4Z2JlX21hY184MjU5OUVCOiB7CisJCXUzMiBtZmxjbiA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9NRkxDTik7CisJCXUzMiBmY2NmZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ0NGRyk7CisJCWZsb3dfcnggPSAhIShtZmxjbiAmIElYR0JFX01GTENOX1JGQ0UpOworCQlmbG93X3R4ID0gISEoZmNjZmcgJiBJWEdCRV9GQ0NGR19URkNFXzgwMl8zWCk7CisJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlmbG93X3R4ID0gZmFsc2U7CisJCWZsb3dfcnggPSBmYWxzZTsKKwkJYnJlYWs7CisJfQorCWVfaW5mbyhkcnYsICJOSUMgTGluayBpcyBVcCAlcywgRmxvdyBDb250cm9sOiAlc1xuIiwKKwkgICAgICAgKGxpbmtfc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwgPworCSAgICAgICAiMTAgR2JwcyIgOgorCSAgICAgICAobGlua19zcGVlZCA9PSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMID8KKwkgICAgICAgIjEgR2JwcyIgOgorCSAgICAgICAobGlua19zcGVlZCA9PSBJWEdCRV9MSU5LX1NQRUVEXzEwMF9GVUxMID8KKwkgICAgICAgIjEwMCBNYnBzIiA6CisJICAgICAgICJ1bmtub3duIHNwZWVkIikpKSwKKwkgICAgICAgKChmbG93X3J4ICYmIGZsb3dfdHgpID8gIlJYL1RYIiA6CisJICAgICAgIChmbG93X3J4ID8gIlJYIiA6CisJICAgICAgIChmbG93X3R4ID8gIlRYIiA6ICJOb25lIikpKSk7CisKKwluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7CisjaWZkZWYgSEFWRV9JUExJTktfVkZfQ09ORklHCisJaXhnYmVfY2hlY2tfdmZfcmF0ZV9saW1pdChhZGFwdGVyKTsKKyNlbmRpZiAvKiBIQVZFX0lQTElOS19WRl9DT05GSUcgKi8KK30KKworLyoqCisgKiBpeGdiZV93YXRjaGRvZ19saW5rX2lzX2Rvd24gLSB1cGRhdGUgbmV0aWZfY2FycmllciBzdGF0dXMgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCBsaW5rIGRvd24gbWVzc2FnZQorICogQGFkYXB0ZXIgLSBwb2ludGVyIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZQorICoqLworc3RhdGljIHZvaWQgaXhnYmVfd2F0Y2hkb2dfbGlua19pc19kb3duKHN0cnVjdCBpeGdiZV9hZGFwdGVyKiBhZGFwdGVyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCWFkYXB0ZXItPmxpbmtfdXAgPSBmYWxzZTsKKwlhZGFwdGVyLT5saW5rX3NwZWVkID0gMDsKKworCS8qIG9ubHkgY29udGludWUgaWYgbGluayB3YXMgdXAgcHJldmlvdXNseSAqLworCWlmICghbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKQorCQlyZXR1cm47CisKKwkvKiBwb2xsIGZvciBTRlArIGNhYmxlIHdoZW4gbGluayBpcyBkb3duICovCisJaWYgKGl4Z2JlX2lzX3NmcChodykgJiYgaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQorCQlhZGFwdGVyLT5mbGFnczIgfD0gSVhHQkVfRkxBRzJfU0VBUkNIX0ZPUl9TRlA7CisKKwllX2luZm8oZHJ2LCAiTklDIExpbmsgaXMgRG93blxuIik7CisJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKK30KKworLyoqCisgKiBpeGdiZV93YXRjaGRvZ19mbHVzaF90eCAtIGZsdXNoIHF1ZXVlcyBvbiBsaW5rIGRvd24KKyAqIEBhZGFwdGVyIC0gcG9pbnRlciB0byB0aGUgZGV2aWNlIGFkYXB0ZXIgc3RydWN0dXJlCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZV93YXRjaGRvZ19mbHVzaF90eChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaTsKKwlpbnQgc29tZV90eF9wZW5kaW5nID0gMDsKKworCWlmICghbmV0aWZfY2Fycmllcl9vayhhZGFwdGVyLT5uZXRkZXYpKSB7CisJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKKwkJCXN0cnVjdCBpeGdiZV9yaW5nICp0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZ1tpXTsKKwkJCWlmICh0eF9yaW5nLT5uZXh0X3RvX3VzZSAhPSB0eF9yaW5nLT5uZXh0X3RvX2NsZWFuKSB7CisJCQkJc29tZV90eF9wZW5kaW5nID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChzb21lX3R4X3BlbmRpbmcpIHsKKwkJCS8qIFdlJ3ZlIGxvc3QgbGluaywgc28gdGhlIGNvbnRyb2xsZXIgc3RvcHMgRE1BLAorCQkJICogYnV0IHdlJ3ZlIGdvdCBxdWV1ZWQgVHggd29yayB0aGF0J3MgbmV2ZXIgZ29pbmcKKwkJCSAqIHRvIGdldCBkb25lLCBzbyByZXNldCBjb250cm9sbGVyIHRvIGZsdXNoIFR4LgorCQkJICogKERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0KS4KKwkJCSAqLworCQkJYWRhcHRlci0+ZmxhZ3MyIHw9IElYR0JFX0ZMQUcyX1JFU0VUX1JFUVVFU1RFRDsKKwkJfQorCX0KIH0KIAogc3RhdGljIHZvaWQgaXhnYmVfc3Bvb2ZfY2hlY2soc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC02MTI5LDEzMyArNjIyMiwxODYgQEAKIAllX3dhcm4oZHJ2LCAiJWQgU3Bvb2ZlZCBwYWNrZXRzIGRldGVjdGVkXG4iLCBzc3ZwYyk7CiB9CiAKLXN0YXRpYyBERUZJTkVfTVVURVgoaXhnYmVfd2F0Y2hkb2dfbG9jayk7Ci0KIC8qKgotICogaXhnYmVfd2F0Y2hkb2dfdGFzayAtIHdvcmtlciB0aHJlYWQgdG8gYnJpbmcgbGluayB1cAotICogQHdvcms6IHBvaW50ZXIgdG8gd29ya19zdHJ1Y3QgY29udGFpbmluZyBvdXIgZGF0YQorICogaXhnYmVfd2F0Y2hkb2dfc3VidGFzayAtIGNoZWNrIGFuZCBicmluZyBsaW5rIHVwCisgKiBAYWRhcHRlciAtIHBvaW50ZXIgdG8gdGhlIGRldmljZSBhZGFwdGVyIHN0cnVjdHVyZQogICoqLwotc3RhdGljIHZvaWQgaXhnYmVfd2F0Y2hkb2dfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgdm9pZCBpeGdiZV93YXRjaGRvZ19zdWJ0YXNrKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewotCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCi0JCQkJCQkgICAgIHN0cnVjdCBpeGdiZV9hZGFwdGVyLAotCQkJCQkJICAgICB3YXRjaGRvZ190YXNrKTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwotCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0JdTMyIGxpbmtfc3BlZWQ7Ci0JYm9vbCBsaW5rX3VwOwotCWludCBpOwotCXN0cnVjdCBpeGdiZV9yaW5nICp0eF9yaW5nOwotCWludCBzb21lX3R4X3BlbmRpbmcgPSAwOworCS8qIGlmIGludGVyZmFjZSBpcyBkb3duIGRvIG5vdGhpbmcgKi8KKwlpZiAodGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQorCQlyZXR1cm47CiAKLQltdXRleF9sb2NrKCZpeGdiZV93YXRjaGRvZ19sb2NrKTsKKwlpeGdiZV93YXRjaGRvZ191cGRhdGVfbGluayhhZGFwdGVyKTsKIAotCWxpbmtfdXAgPSBhZGFwdGVyLT5saW5rX3VwOwotCWxpbmtfc3BlZWQgPSBhZGFwdGVyLT5saW5rX3NwZWVkOwotCi0JaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19ORUVEX0xJTktfVVBEQVRFKSB7Ci0JCWh3LT5tYWMub3BzLmNoZWNrX2xpbmsoaHcsICZsaW5rX3NwZWVkLCAmbGlua191cCwgZmFsc2UpOwotCQlpZiAobGlua191cCkgewotI2lmZGVmIENPTkZJR19EQ0IKLQkJCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpIHsKLQkJCQlmb3IgKGkgPSAwOyBpIDwgTUFYX1RSQUZGSUNfQ0xBU1M7IGkrKykKLQkJCQkJaHctPm1hYy5vcHMuZmNfZW5hYmxlKGh3LCBpKTsKLQkJCX0gZWxzZSB7Ci0JCQkJaHctPm1hYy5vcHMuZmNfZW5hYmxlKGh3LCAwKTsKLQkJCX0KLSNlbHNlCi0JCQlody0+bWFjLm9wcy5mY19lbmFibGUoaHcsIDApOwotI2VuZGlmCi0JCX0KLQotCQlpZiAobGlua191cCB8fAotCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCAoYWRhcHRlci0+bGlua19jaGVja190aW1lb3V0ICsKLQkJCQkJIElYR0JFX1RSWV9MSU5LX1RJTUVPVVQpKSkgewotCQkJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfTkVFRF9MSU5LX1VQREFURTsKLQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlNUywgSVhHQkVfRUlNQ19MU0MpOwotCQl9Ci0JCWFkYXB0ZXItPmxpbmtfdXAgPSBsaW5rX3VwOwotCQlhZGFwdGVyLT5saW5rX3NwZWVkID0gbGlua19zcGVlZDsKLQl9Ci0KLQlpZiAobGlua191cCkgewotCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewotCQkJYm9vbCBmbG93X3J4LCBmbG93X3R4OwotCi0JCQlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgewotCQkJY2FzZSBpeGdiZV9tYWNfODI1OThFQjogewotCQkJCXUzMiBmcmN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ1RSTCk7Ci0JCQkJdTMyIHJtY3MgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUk1DUyk7Ci0JCQkJZmxvd19yeCA9ICEhKGZyY3RsICYgSVhHQkVfRkNUUkxfUkZDRSk7Ci0JCQkJZmxvd190eCA9ICEhKHJtY3MgJiBJWEdCRV9STUNTX1RGQ0VfODAyXzNYKTsKLQkJCX0KLQkJCQlicmVhazsKLQkJCWNhc2UgaXhnYmVfbWFjXzgyNTk5RUI6Ci0JCQljYXNlIGl4Z2JlX21hY19YNTQwOiB7Ci0JCQkJdTMyIG1mbGNuID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX01GTENOKTsKLQkJCQl1MzIgZmNjZmcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkNDRkcpOwotCQkJCWZsb3dfcnggPSAhIShtZmxjbiAmIElYR0JFX01GTENOX1JGQ0UpOwotCQkJCWZsb3dfdHggPSAhIShmY2NmZyAmIElYR0JFX0ZDQ0ZHX1RGQ0VfODAyXzNYKTsKLQkJCX0KLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJZmxvd190eCA9IGZhbHNlOwotCQkJCWZsb3dfcnggPSBmYWxzZTsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJZV9pbmZvKGRydiwgIk5JQyBMaW5rIGlzIFVwICVzLCBGbG93IENvbnRyb2w6ICVzXG4iLAotCQkJICAgICAgIChsaW5rX3NwZWVkID09IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMID8KLQkJCSAgICAgICAiMTAgR2JwcyIgOgotCQkJICAgICAgIChsaW5rX3NwZWVkID09IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwgPwotCQkJICAgICAgICIxIEdicHMiIDoKLQkJCSAgICAgICAobGlua19zcGVlZCA9PSBJWEdCRV9MSU5LX1NQRUVEXzEwMF9GVUxMID8KLQkJCSAgICAgICAiMTAwIE1icHMiIDoKLQkJCSAgICAgICAidW5rbm93biBzcGVlZCIpKSksCi0JCQkgICAgICAgKChmbG93X3J4ICYmIGZsb3dfdHgpID8gIlJYL1RYIiA6Ci0JCQkgICAgICAgKGZsb3dfcnggPyAiUlgiIDoKLQkJCSAgICAgICAoZmxvd190eCA/ICJUWCIgOiAiTm9uZSIpKSkpOwotCi0JCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7Ci0JCQlpeGdiZV9jaGVja192Zl9yYXRlX2xpbWl0KGFkYXB0ZXIpOwotCQl9IGVsc2UgewotCQkJLyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqLwotCQkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgewotCQkJCXR4X3JpbmcgPSBhZGFwdGVyLT50eF9yaW5nW2ldOwotCQkJCXNldF9jaGVja19mb3JfdHhfaGFuZyh0eF9yaW5nKTsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCWFkYXB0ZXItPmxpbmtfdXAgPSBmYWxzZTsKLQkJYWRhcHRlci0+bGlua19zcGVlZCA9IDA7Ci0JCWlmIChuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKLQkJCWVfaW5mbyhkcnYsICJOSUMgTGluayBpcyBEb3duXG4iKTsKLQkJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7Ci0JCX0KLQl9Ci0KLQlpZiAoIW5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewotCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7Ci0JCQl0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZ1tpXTsKLQkJCWlmICh0eF9yaW5nLT5uZXh0X3RvX3VzZSAhPSB0eF9yaW5nLT5uZXh0X3RvX2NsZWFuKSB7Ci0JCQkJc29tZV90eF9wZW5kaW5nID0gMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCWlmIChzb21lX3R4X3BlbmRpbmcpIHsKLQkJCS8qIFdlJ3ZlIGxvc3QgbGluaywgc28gdGhlIGNvbnRyb2xsZXIgc3RvcHMgRE1BLAotCQkJICogYnV0IHdlJ3ZlIGdvdCBxdWV1ZWQgVHggd29yayB0aGF0J3MgbmV2ZXIgZ29pbmcKLQkJCSAqIHRvIGdldCBkb25lLCBzbyByZXNldCBjb250cm9sbGVyIHRvIGZsdXNoIFR4LgotCQkJICogKERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0KS4KLQkJCSAqLwotCQkJIHNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnJlc2V0X3Rhc2spOwotCQl9Ci0JfQorCWlmIChhZGFwdGVyLT5saW5rX3VwKQorCQlpeGdiZV93YXRjaGRvZ19saW5rX2lzX3VwKGFkYXB0ZXIpOworCWVsc2UKKwkJaXhnYmVfd2F0Y2hkb2dfbGlua19pc19kb3duKGFkYXB0ZXIpOwogCiAJaXhnYmVfc3Bvb2ZfY2hlY2soYWRhcHRlcik7CiAJaXhnYmVfdXBkYXRlX3N0YXRzKGFkYXB0ZXIpOwotCW11dGV4X3VubG9jaygmaXhnYmVfd2F0Y2hkb2dfbG9jayk7CisKKwlpeGdiZV93YXRjaGRvZ19mbHVzaF90eChhZGFwdGVyKTsKK30KKworLyoqCisgKiBpeGdiZV9zZnBfZGV0ZWN0aW9uX3N1YnRhc2sgLSBwb2xsIGZvciBTRlArIGNhYmxlCisgKiBAYWRhcHRlciAtIHRoZSBpeGdiZSBhZGFwdGVyIHN0cnVjdHVyZQorICoqLworc3RhdGljIHZvaWQgaXhnYmVfc2ZwX2RldGVjdGlvbl9zdWJ0YXNrKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJczMyIGVycjsKKworCS8qIG5vdCBzZWFyY2hpbmcgZm9yIFNGUCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIGRvIGhlcmUgKi8KKwlpZiAoIShhZGFwdGVyLT5mbGFnczIgJiBJWEdCRV9GTEFHMl9TRUFSQ0hfRk9SX1NGUCkgJiYKKwkgICAgIShhZGFwdGVyLT5mbGFnczIgJiBJWEdCRV9GTEFHMl9TRlBfTkVFRFNfUkVTRVQpKQorCQlyZXR1cm47CisKKwkvKiBzb21lb25lIGVsc2UgaXMgaW4gaW5pdCwgd2FpdCB1bnRpbCBuZXh0IHNlcnZpY2UgZXZlbnQgKi8KKwlpZiAodGVzdF9hbmRfc2V0X2JpdChfX0lYR0JFX0lOX1NGUF9JTklULCAmYWRhcHRlci0+c3RhdGUpKQorCQlyZXR1cm47CisKKwllcnIgPSBody0+cGh5Lm9wcy5pZGVudGlmeV9zZnAoaHcpOworCWlmIChlcnIgPT0gSVhHQkVfRVJSX1NGUF9OT1RfU1VQUE9SVEVEKQorCQlnb3RvIHNmcF9vdXQ7CisKKwlpZiAoZXJyID09IElYR0JFX0VSUl9TRlBfTk9UX1BSRVNFTlQpIHsKKwkJLyogSWYgbm8gY2FibGUgaXMgcHJlc2VudCwgdGhlbiB3ZSBuZWVkIHRvIHJlc2V0CisJCSAqIHRoZSBuZXh0IHRpbWUgd2UgZmluZCBhIGdvb2QgY2FibGUuICovCisJCWFkYXB0ZXItPmZsYWdzMiB8PSBJWEdCRV9GTEFHMl9TRlBfTkVFRFNfUkVTRVQ7CisJfQorCisJLyogZXhpdCBvbiBlcnJvciAqLworCWlmIChlcnIpCisJCWdvdG8gc2ZwX291dDsKKworCS8qIGV4aXQgaWYgcmVzZXQgbm90IG5lZWRlZCAqLworCWlmICghKGFkYXB0ZXItPmZsYWdzMiAmIElYR0JFX0ZMQUcyX1NGUF9ORUVEU19SRVNFVCkpCisJCWdvdG8gc2ZwX291dDsKKworCWFkYXB0ZXItPmZsYWdzMiAmPSB+SVhHQkVfRkxBRzJfU0ZQX05FRURTX1JFU0VUOworCisJLyoKKwkgKiBBIG1vZHVsZSBtYXkgYmUgaWRlbnRpZmllZCBjb3JyZWN0bHksIGJ1dCB0aGUgRUVQUk9NIG1heSBub3QgaGF2ZQorCSAqIHN1cHBvcnQgZm9yIHRoYXQgbW9kdWxlLiAgc2V0dXBfc2ZwKCkgd2lsbCBmYWlsIGluIHRoYXQgY2FzZSwgc28KKwkgKiB3ZSBzaG91bGQgbm90IGFsbG93IHRoYXQgbW9kdWxlIHRvIGxvYWQuCisJICovCisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKKwkJZXJyID0gaHctPnBoeS5vcHMucmVzZXQoaHcpOworCWVsc2UKKwkJZXJyID0gaHctPm1hYy5vcHMuc2V0dXBfc2ZwKGh3KTsKKworCWlmIChlcnIgPT0gSVhHQkVfRVJSX1NGUF9OT1RfU1VQUE9SVEVEKQorCQlnb3RvIHNmcF9vdXQ7CisKKwlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX05FRURfTElOS19DT05GSUc7CisJZV9pbmZvKHByb2JlLCAiZGV0ZWN0ZWQgU0ZQKzogJWRcbiIsIGh3LT5waHkuc2ZwX3R5cGUpOworCitzZnBfb3V0OgorCWNsZWFyX2JpdChfX0lYR0JFX0lOX1NGUF9JTklULCAmYWRhcHRlci0+c3RhdGUpOworCisJaWYgKChlcnIgPT0gSVhHQkVfRVJSX1NGUF9OT1RfU1VQUE9SVEVEKSAmJgorCSAgICAoYWRhcHRlci0+bmV0ZGV2LT5yZWdfc3RhdGUgPT0gTkVUUkVHX1JFR0lTVEVSRUQpKSB7CisJCWVfZGV2X2VycigiZmFpbGVkIHRvIGluaXRpYWxpemUgYmVjYXVzZSBhbiB1bnN1cHBvcnRlZCAiCisJCQkgICJTRlArIG1vZHVsZSB0eXBlIHdhcyBkZXRlY3RlZC5cbiIpOworCQllX2Rldl9lcnIoIlJlbG9hZCB0aGUgZHJpdmVyIGFmdGVyIGluc3RhbGxpbmcgYSAiCisJCQkgICJzdXBwb3J0ZWQgbW9kdWxlLlxuIik7CisJCXVucmVnaXN0ZXJfbmV0ZGV2KGFkYXB0ZXItPm5ldGRldik7CisJfQorfQorCisvKioKKyAqIGl4Z2JlX3NmcF9saW5rX2NvbmZpZ19zdWJ0YXNrIC0gc2V0IHVwIGxpbmsgU0ZQIGFmdGVyIG1vZHVsZSBpbnN0YWxsCisgKiBAYWRhcHRlciAtIHRoZSBpeGdiZSBhZGFwdGVyIHN0cnVjdHVyZQorICoqLworc3RhdGljIHZvaWQgaXhnYmVfc2ZwX2xpbmtfY29uZmlnX3N1YnRhc2soc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgYXV0b25lZzsKKwlib29sIG5lZ290aWF0aW9uOworCisJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX05FRURfTElOS19DT05GSUcpKQorCQlyZXR1cm47CisKKwkvKiBzb21lb25lIGVsc2UgaXMgaW4gaW5pdCwgd2FpdCB1bnRpbCBuZXh0IHNlcnZpY2UgZXZlbnQgKi8KKwlpZiAodGVzdF9hbmRfc2V0X2JpdChfX0lYR0JFX0lOX1NGUF9JTklULCAmYWRhcHRlci0+c3RhdGUpKQorCQlyZXR1cm47CisKKwlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19ORUVEX0xJTktfQ09ORklHOworCisJYXV0b25lZyA9IGh3LT5waHkuYXV0b25lZ19hZHZlcnRpc2VkOworCWlmICgoIWF1dG9uZWcpICYmIChody0+bWFjLm9wcy5nZXRfbGlua19jYXBhYmlsaXRpZXMpKQorCQlody0+bWFjLm9wcy5nZXRfbGlua19jYXBhYmlsaXRpZXMoaHcsICZhdXRvbmVnLCAmbmVnb3RpYXRpb24pOworCWh3LT5tYWMuYXV0b3RyeV9yZXN0YXJ0ID0gZmFsc2U7CisJaWYgKGh3LT5tYWMub3BzLnNldHVwX2xpbmspCisJCWh3LT5tYWMub3BzLnNldHVwX2xpbmsoaHcsIGF1dG9uZWcsIG5lZ290aWF0aW9uLCB0cnVlKTsKKworCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfTkVFRF9MSU5LX1VQREFURTsKKwlhZGFwdGVyLT5saW5rX2NoZWNrX3RpbWVvdXQgPSBqaWZmaWVzOworCWNsZWFyX2JpdChfX0lYR0JFX0lOX1NGUF9JTklULCAmYWRhcHRlci0+c3RhdGUpOworfQorCisvKioKKyAqIGl4Z2JlX3NlcnZpY2VfdGltZXIgLSBUaW1lciBDYWxsLWJhY2sKKyAqIEBkYXRhOiBwb2ludGVyIHRvIGFkYXB0ZXIgY2FzdCBpbnRvIGFuIHVuc2lnbmVkIGxvbmcKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JlX3NlcnZpY2VfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBpeGdiZV9hZGFwdGVyICopZGF0YTsKKwl1bnNpZ25lZCBsb25nIG5leHRfZXZlbnRfb2Zmc2V0OworCisJLyogcG9sbCBmYXN0ZXIgd2hlbiB3YWl0aW5nIGZvciBsaW5rICovCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19ORUVEX0xJTktfVVBEQVRFKQorCQluZXh0X2V2ZW50X29mZnNldCA9IEhaIC8gMTA7CisJZWxzZQorCQluZXh0X2V2ZW50X29mZnNldCA9IEhaICogMjsKKworCS8qIFJlc2V0IHRoZSB0aW1lciAqLworCW1vZF90aW1lcigmYWRhcHRlci0+c2VydmljZV90aW1lciwgbmV4dF9ldmVudF9vZmZzZXQgKyBqaWZmaWVzKTsKKworCWl4Z2JlX3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUoYWRhcHRlcik7Cit9CisKK3N0YXRpYyB2b2lkIGl4Z2JlX3Jlc2V0X3N1YnRhc2soc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKCEoYWRhcHRlci0+ZmxhZ3MyICYgSVhHQkVfRkxBRzJfUkVTRVRfUkVRVUVTVEVEKSkKKwkJcmV0dXJuOworCisJYWRhcHRlci0+ZmxhZ3MyICY9IH5JWEdCRV9GTEFHMl9SRVNFVF9SRVFVRVNURUQ7CisKKwkvKiBJZiB3ZSdyZSBhbHJlYWR5IGRvd24gb3IgcmVzZXR0aW5nLCBqdXN0IGJhaWwgKi8KKwlpZiAodGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpIHx8CisJICAgIHRlc3RfYml0KF9fSVhHQkVfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQorCQlyZXR1cm47CisKKwlpeGdiZV9kdW1wKGFkYXB0ZXIpOworCW5ldGRldl9lcnIoYWRhcHRlci0+bmV0ZGV2LCAiUmVzZXQgYWRhcHRlclxuIik7CisJYWRhcHRlci0+dHhfdGltZW91dF9jb3VudCsrOworCisJaXhnYmVfcmVpbml0X2xvY2tlZChhZGFwdGVyKTsKK30KKworLyoqCisgKiBpeGdiZV9zZXJ2aWNlX3Rhc2sgLSBtYW5hZ2VzIGFuZCBydW5zIHN1YnRhc2tzCisgKiBAd29yazogcG9pbnRlciB0byB3b3JrX3N0cnVjdCBjb250YWluaW5nIG91ciBkYXRhCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZV9zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCisJCQkJCQkgICAgIHN0cnVjdCBpeGdiZV9hZGFwdGVyLAorCQkJCQkJICAgICBzZXJ2aWNlX3Rhc2spOworCisJaXhnYmVfcmVzZXRfc3VidGFzayhhZGFwdGVyKTsKKwlpeGdiZV9zZnBfZGV0ZWN0aW9uX3N1YnRhc2soYWRhcHRlcik7CisJaXhnYmVfc2ZwX2xpbmtfY29uZmlnX3N1YnRhc2soYWRhcHRlcik7CisJaXhnYmVfY2hlY2tfb3ZlcnRlbXBfc3VidGFzayhhZGFwdGVyKTsKKwlpeGdiZV93YXRjaGRvZ19zdWJ0YXNrKGFkYXB0ZXIpOworCWl4Z2JlX2ZkaXJfcmVpbml0X3N1YnRhc2soYWRhcHRlcik7CisJaXhnYmVfY2hlY2tfaGFuZ19zdWJ0YXNrKGFkYXB0ZXIpOworCisJaXhnYmVfc2VydmljZV9ldmVudF9jb21wbGV0ZShhZGFwdGVyKTsKIH0KIAogc3RhdGljIGludCBpeGdiZV90c28oc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCkBAIC03MDk0LDYgKzcyNDAsOCBAQAogI2lmZGVmIENPTkZJR19QQ0lfSU9WCiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlpbnQgZXJyOworCWludCBudW1fdmZfbWFjdmxhbnMsIGk7CisJc3RydWN0IHZmX21hY3ZsYW5zICptdl9saXN0OwogCiAJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQiB8fCAhbWF4X3ZmcykKIAkJcmV0dXJuOwpAQCAtNzExMCw2ICs3MjU4LDI2IEBACiAJCWVfZXJyKHByb2JlLCAiRmFpbGVkIHRvIGVuYWJsZSBQQ0kgc3Jpb3Y6ICVkXG4iLCBlcnIpOwogCQlnb3RvIGVycl9ub3ZmczsKIAl9CisKKwludW1fdmZfbWFjdmxhbnMgPSBody0+bWFjLm51bV9yYXJfZW50cmllcyAtCisJCShJWEdCRV9NQVhfUEZfTUFDVkxBTlMgKyAxICsgYWRhcHRlci0+bnVtX3Zmcyk7CisKKwlhZGFwdGVyLT5tdl9saXN0ID0gbXZfbGlzdCA9IGtjYWxsb2MobnVtX3ZmX21hY3ZsYW5zLAorCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgdmZfbWFjdmxhbnMpLAorCQkJCQkgICAgIEdGUF9LRVJORUwpOworCWlmIChtdl9saXN0KSB7CisJCS8qIEluaXRpYWxpemUgbGlzdCBvZiBWRiBtYWN2bGFucyAqLworCQlJTklUX0xJU1RfSEVBRCgmYWRhcHRlci0+dmZfbXZzLmwpOworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3ZmX21hY3ZsYW5zOyBpKyspIHsKKwkJCW12X2xpc3QtPnZmID0gLTE7CisJCQltdl9saXN0LT5mcmVlID0gdHJ1ZTsKKwkJCW12X2xpc3QtPnJhcl9lbnRyeSA9IGh3LT5tYWMubnVtX3Jhcl9lbnRyaWVzIC0KKwkJCQkoaSArIGFkYXB0ZXItPm51bV92ZnMgKyAxKTsKKwkJCWxpc3RfYWRkKCZtdl9saXN0LT5sLCAmYWRhcHRlci0+dmZfbXZzLmwpOworCQkJbXZfbGlzdCsrOworCQl9CisJfQorCiAJLyogSWYgY2FsbCB0byBlbmFibGUgVkZzIHN1Y2NlZWRlZCB0aGVuIGFsbG9jYXRlIG1lbW9yeQogCSAqIGZvciBwZXIgVkYgY29udHJvbCBzdHJ1Y3R1cmVzLgogCSAqLwpAQCAtNzI4MCwyMiArNzQ0OCw2IEBACiAJaHctPnBoeS5tZGlvLm1kaW9fcmVhZCA9IGl4Z2JlX21kaW9fcmVhZDsKIAlody0+cGh5Lm1kaW8ubWRpb193cml0ZSA9IGl4Z2JlX21kaW9fd3JpdGU7CiAKLQkvKiBzZXQgdXAgdGhpcyB0aW1lciBhbmQgd29yayBzdHJ1Y3QgYmVmb3JlIGNhbGxpbmcgZ2V0X2ludmFyaWFudHMKLQkgKiB3aGljaCBtaWdodCBzdGFydCB0aGUgdGltZXIKLQkgKi8KLQlpbml0X3RpbWVyKCZhZGFwdGVyLT5zZnBfdGltZXIpOwotCWFkYXB0ZXItPnNmcF90aW1lci5mdW5jdGlvbiA9IGl4Z2JlX3NmcF90aW1lcjsKLQlhZGFwdGVyLT5zZnBfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBhZGFwdGVyOwotCi0JSU5JVF9XT1JLKCZhZGFwdGVyLT5zZnBfdGFzaywgaXhnYmVfc2ZwX3Rhc2spOwotCi0JLyogbXVsdGlzcGVlZCBmaWJlciBoYXMgaXRzIG93biB0YXNrbGV0LCBjYWxsZWQgZnJvbSBHUEkgU0RQMSBjb250ZXh0ICovCi0JSU5JVF9XT1JLKCZhZGFwdGVyLT5tdWx0aXNwZWVkX2ZpYmVyX3Rhc2ssIGl4Z2JlX211bHRpc3BlZWRfZmliZXJfdGFzayk7Ci0KLQkvKiBhIG5ldyBTRlArIG1vZHVsZSBhcnJpdmFsLCBjYWxsZWQgZnJvbSBHUEkgU0RQMiBjb250ZXh0ICovCi0JSU5JVF9XT1JLKCZhZGFwdGVyLT5zZnBfY29uZmlnX21vZHVsZV90YXNrLAotCQkgIGl4Z2JlX3NmcF9jb25maWdfbW9kdWxlX3Rhc2spOwotCiAJaWktPmdldF9pbnZhcmlhbnRzKGh3KTsKIAogCS8qIHNldHVwIHRoZSBwcml2YXRlIHN0cnVjdHVyZSAqLwpAQCAtNzMyOSwxNyArNzQ4MSw5IEBACiAJaHctPnBoeS5yZXNldF9pZl9vdmVydGVtcCA9IGZhbHNlOwogCWlmIChlcnIgPT0gSVhHQkVfRVJSX1NGUF9OT1RfUFJFU0VOVCAmJgogCSAgICBody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpIHsKLQkJLyoKLQkJICogU3RhcnQgYSBrZXJuZWwgdGhyZWFkIHRvIHdhdGNoIGZvciBhIG1vZHVsZSB0byBhcnJpdmUuCi0JCSAqIE9ubHkgZG8gdGhpcyBmb3IgODI1OTgsIHNpbmNlIDgyNTk5IHdpbGwgZ2VuZXJhdGUKLQkJICogaW50ZXJydXB0cyBvbiBtb2R1bGUgYXJyaXZhbC4KLQkJICovCi0JCXNldF9iaXQoX19JWEdCRV9TRlBfTU9EVUxFX05PVF9GT1VORCwgJmFkYXB0ZXItPnN0YXRlKTsKLQkJbW9kX3RpbWVyKCZhZGFwdGVyLT5zZnBfdGltZXIsCi0JCQkgIHJvdW5kX2ppZmZpZXMoamlmZmllcyArICgyICogSFopKSk7CiAJCWVyciA9IDA7CiAJfSBlbHNlIGlmIChlcnIgPT0gSVhHQkVfRVJSX1NGUF9OT1RfU1VQUE9SVEVEKSB7Ci0JCWVfZGV2X2VycigiZmFpbGVkIHRvIGluaXRpYWxpemUgYmVjYXVzZSBhbiB1bnN1cHBvcnRlZCBTRlArICIKKwkJZV9kZXZfZXJyKCJmYWlsZWQgdG8gbG9hZCBiZWNhdXNlIGFuIHVuc3VwcG9ydGVkIFNGUCsgIgogCQkJICAibW9kdWxlIHR5cGUgd2FzIGRldGVjdGVkLlxuIik7CiAJCWVfZGV2X2VycigiUmVsb2FkIHRoZSBkcml2ZXIgYWZ0ZXIgaW5zdGFsbGluZyBhIHN1cHBvcnRlZCAiCiAJCQkgICJtb2R1bGUuXG4iKTsKQEAgLTczNjEsOSArNzUwNSwxNiBAQAogCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CiAJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7CiAJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0dSTzsKKwluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfUlhIQVNIOwogCi0JaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCXN3aXRjaCAoYWRhcHRlci0+aHcubWFjLnR5cGUpIHsKKwljYXNlIGl4Z2JlX21hY184MjU5OUVCOgorCWNhc2UgaXhnYmVfbWFjX1g1NDA6CiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TQ1RQX0NTVU07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KIAogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKIAluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwpAQCAtNzQyNCwxNyArNzU3NSwxOSBAQAogCSAgICAgIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpKSkpCiAJCWh3LT5tYWMub3BzLmRpc2FibGVfdHhfbGFzZXIoaHcpOwogCi0JaW5pdF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIpOwotCWFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLmZ1bmN0aW9uID0gaXhnYmVfd2F0Y2hkb2c7Ci0JYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWFkYXB0ZXI7CisJc2V0dXBfdGltZXIoJmFkYXB0ZXItPnNlcnZpY2VfdGltZXIsICZpeGdiZV9zZXJ2aWNlX3RpbWVyLAorCSAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSBhZGFwdGVyKTsKIAotCUlOSVRfV09SSygmYWRhcHRlci0+cmVzZXRfdGFzaywgaXhnYmVfcmVzZXRfdGFzayk7Ci0JSU5JVF9XT1JLKCZhZGFwdGVyLT53YXRjaGRvZ190YXNrLCBpeGdiZV93YXRjaGRvZ190YXNrKTsKKwlJTklUX1dPUksoJmFkYXB0ZXItPnNlcnZpY2VfdGFzaywgaXhnYmVfc2VydmljZV90YXNrKTsKKwljbGVhcl9iaXQoX19JWEdCRV9TRVJWSUNFX1NDSEVELCAmYWRhcHRlci0+c3RhdGUpOwogCiAJZXJyID0gaXhnYmVfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3N3X2luaXQ7CiAKKwlpZiAoIShhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQpKQorCQluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1JYSEFTSDsKKwogCXN3aXRjaCAocGRldi0+ZGV2aWNlKSB7CiAJY2FzZSBJWEdCRV9ERVZfSURfODI1OTlfU0ZQOgogCQkvKiBPbmx5IHRoaXMgc3ViZGV2aWNlIHN1cHBvcnRzIFdPTCAqLwpAQCAtNzQ2Myw4ICs3NjE2LDggQEAKIAogCS8qIHByaW50IGJ1cyB0eXBlL3NwZWVkL3dpZHRoIGluZm8gKi8KIAllX2Rldl9pbmZvKCIoUENJIEV4cHJlc3M6JXM6JXMpICVwTVxuIiwKLQkJICAgKGh3LT5idXMuc3BlZWQgPT0gaXhnYmVfYnVzX3NwZWVkXzUwMDAgPyAiNS4wR2IvcyIgOgotCQkgICAgaHctPmJ1cy5zcGVlZCA9PSBpeGdiZV9idXNfc3BlZWRfMjUwMCA/ICIyLjVHYi9zIiA6CisJCSAgIChody0+YnVzLnNwZWVkID09IGl4Z2JlX2J1c19zcGVlZF81MDAwID8gIjUuMEdUL3MiIDoKKwkJICAgIGh3LT5idXMuc3BlZWQgPT0gaXhnYmVfYnVzX3NwZWVkXzI1MDAgPyAiMi41R1QvcyIgOgogCQkgICAgIlVua25vd24iKSwKIAkJICAgKGh3LT5idXMud2lkdGggPT0gaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDggPyAiV2lkdGggeDgiIDoKIAkJICAgIGh3LT5idXMud2lkdGggPT0gaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDQgPyAiV2lkdGggeDQiIDoKQEAgLTc1MTMsMTMgKzc2NjYsNiBAQAogCS8qIGNhcnJpZXIgb2ZmIHJlcG9ydGluZyBpcyBpbXBvcnRhbnQgdG8gZXRodG9vbCBldmVuIEJFRk9SRSBvcGVuICovCiAJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKIAotCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkRJUl9IQVNIX0NBUEFCTEUgfHwKLQkgICAgYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZESVJfUEVSRkVDVF9DQVBBQkxFKQotCQlJTklUX1dPUksoJmFkYXB0ZXItPmZkaXJfcmVpbml0X3Rhc2ssIGl4Z2JlX2ZkaXJfcmVpbml0X3Rhc2spOwotCi0JaWYgKGFkYXB0ZXItPmZsYWdzMiAmIElYR0JFX0ZMQUcyX1RFTVBfU0VOU09SX0NBUEFCTEUpCi0JCUlOSVRfV09SSygmYWRhcHRlci0+Y2hlY2tfb3ZlcnRlbXBfdGFzaywKLQkJCSAgaXhnYmVfY2hlY2tfb3ZlcnRlbXBfdGFzayk7CiAjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCWlmIChkY2FfYWRkX3JlcXVlc3RlcigmcGRldi0+ZGV2KSA9PSAwKSB7CiAJCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfRENBX0VOQUJMRUQ7CkBAIC03NTQ2LDExICs3NjkyLDcgQEAKIGVycl9lZXByb206CiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19TUklPVl9FTkFCTEVEKQogCQlpeGdiZV9kaXNhYmxlX3NyaW92KGFkYXB0ZXIpOwotCWNsZWFyX2JpdChfX0lYR0JFX1NGUF9NT0RVTEVfTk9UX0ZPVU5ELCAmYWRhcHRlci0+c3RhdGUpOwotCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT5zZnBfdGltZXIpOwotCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnNmcF90YXNrKTsKLQljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5tdWx0aXNwZWVkX2ZpYmVyX3Rhc2spOwotCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnNmcF9jb25maWdfbW9kdWxlX3Rhc2spOworCWFkYXB0ZXItPmZsYWdzMiAmPSB+SVhHQkVfRkxBRzJfU0VBUkNIX0ZPUl9TRlA7CiAJaW91bm1hcChody0+aHdfYWRkcik7CiBlcnJfaW9yZW1hcDoKIAlmcmVlX25ldGRldihuZXRkZXYpOwpAQCAtNzU3OCwyNCArNzcyMCw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAogCXNldF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpOwotCi0JLyoKLQkgKiBUaGUgdGltZXJzIG1heSBiZSByZXNjaGVkdWxlZCwgc28gZXhwbGljaXRseSBkaXNhYmxlIHRoZW0KLQkgKiBmcm9tIGJlaW5nIHJlc2NoZWR1bGVkLgotCSAqLwotCWNsZWFyX2JpdChfX0lYR0JFX1NGUF9NT0RVTEVfTk9UX0ZPVU5ELCAmYWRhcHRlci0+c3RhdGUpOwotCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lcik7Ci0JZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPnNmcF90aW1lcik7Ci0KLQljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT53YXRjaGRvZ190YXNrKTsKLQljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5zZnBfdGFzayk7Ci0JY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+bXVsdGlzcGVlZF9maWJlcl90YXNrKTsKLQljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5zZnBfY29uZmlnX21vZHVsZV90YXNrKTsKLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZESVJfSEFTSF9DQVBBQkxFIHx8Ci0JICAgIGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GRElSX1BFUkZFQ1RfQ0FQQUJMRSkKLQkJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+ZmRpcl9yZWluaXRfdGFzayk7Ci0JaWYgKGFkYXB0ZXItPmZsYWdzMiAmIElYR0JFX0ZMQUcyX1RFTVBfU0VOU09SX0NBUEFCTEUpCi0JCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPmNoZWNrX292ZXJ0ZW1wX3Rhc2spOworCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnNlcnZpY2VfdGFzayk7CiAKICNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0FfRU5BQkxFRCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWJ4LmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYnguaAppbmRleCBmZTZlYTgxLi5iMjM5YmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYnguaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYnguaApAQCAtMzYsOSArMzYsNiBAQAogI2RlZmluZSBJWEdCRV9WRk1BSUxCT1ggICAgICAgICAgICAgMHgwMDJGQwogI2RlZmluZSBJWEdCRV9WRk1CTUVNICAgICAgICAgICAgICAgMHgwMDIwMAogCi0jZGVmaW5lIElYR0JFX1BGTUFJTEJPWCh4KSAgICAgICAgICAoMHgwNEIwMCArICg0ICogeCkpCi0jZGVmaW5lIElYR0JFX1BGTUJNRU0odmZuKSAgICAgICAgICAoMHgxMzAwMCArICg2NCAqIHZmbikpCi0KICNkZWZpbmUgSVhHQkVfUEZNQUlMQk9YX1NUUyAgIDB4MDAwMDAwMDEgLyogSW5pdGlhdGUgbWVzc2FnZSBzZW5kIHRvIFZGICovCiAjZGVmaW5lIElYR0JFX1BGTUFJTEJPWF9BQ0sgICAweDAwMDAwMDAyIC8qIEFjayBtZXNzYWdlIHJlY3YnZCBmcm9tIFZGICovCiAjZGVmaW5lIElYR0JFX1BGTUFJTEJPWF9WRlUgICAweDAwMDAwMDA0IC8qIFZGIG93bnMgdGhlIG1haWxib3ggYnVmZmVyICovCkBAIC03MCw2ICs2Nyw3IEBACiAjZGVmaW5lIElYR0JFX1ZGX1NFVF9NVUxUSUNBU1QgICAgMHgwMyAvKiBWRiByZXF1ZXN0cyBQRiB0byBzZXQgTUMgYWRkciAqLwogI2RlZmluZSBJWEdCRV9WRl9TRVRfVkxBTiAgICAgICAgIDB4MDQgLyogVkYgcmVxdWVzdHMgUEYgdG8gc2V0IFZMQU4gKi8KICNkZWZpbmUgSVhHQkVfVkZfU0VUX0xQRSAgICAgICAgICAweDA1IC8qIFZGIHJlcXVlc3RzIFBGIHRvIHNldCBWTU9MUi5MUEUgKi8KKyNkZWZpbmUgSVhHQkVfVkZfU0VUX01BQ1ZMQU4gICAgICAweDA2IC8qIFZGIHJlcXVlc3RzIFBGIGZvciB1bmljYXN0IGZpbHRlciAqLwogCiAvKiBsZW5ndGggb2YgcGVybWFuZW50IGFkZHJlc3MgbWVzc2FnZSByZXR1cm5lZCBmcm9tIFBGICovCiAjZGVmaW5lIElYR0JFX1ZGX1BFUk1BRERSX01TR19MRU4gNApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfcGh5LmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuYwppbmRleCBkZjViOGFhLi43MzVmNjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuYwpAQCAtNDQ5LDcgKzQ0OSw4IEBACiAJCQkJICAgICBNRElPX01NRF9BTiwKIAkJCQkgICAgICZhdXRvbmVnX3JlZyk7CiAKLQkJYXV0b25lZ19yZWcgJj0gfkFEVkVSVElTRV8xMDBGVUxMOworCQlhdXRvbmVnX3JlZyAmPSB+KEFEVkVSVElTRV8xMDBGVUxMIHwKKwkJCQkgQURWRVJUSVNFXzEwMEhBTEYpOwogCQlpZiAoaHctPnBoeS5hdXRvbmVnX2FkdmVydGlzZWQgJiBJWEdCRV9MSU5LX1NQRUVEXzEwMF9GVUxMKQogCQkJYXV0b25lZ19yZWcgfD0gQURWRVJUSVNFXzEwMEZVTEw7CiAKQEAgLTY1Niw3ICs2NTcsOCBAQAogCQkJCSAgICAgTURJT19NTURfQU4sCiAJCQkJICAgICAmYXV0b25lZ19yZWcpOwogCi0JCWF1dG9uZWdfcmVnICY9IH5BRFZFUlRJU0VfMTAwRlVMTDsKKwkJYXV0b25lZ19yZWcgJj0gfihBRFZFUlRJU0VfMTAwRlVMTCB8CisJCQkJIEFEVkVSVElTRV8xMDBIQUxGKTsKIAkJaWYgKGh3LT5waHkuYXV0b25lZ19hZHZlcnRpc2VkICYgSVhHQkVfTElOS19TUEVFRF8xMDBfRlVMTCkKIAkJCWF1dG9uZWdfcmVnIHw9IEFEVkVSVElTRV8xMDBGVUxMOwogCkBAIC03NTMsNyArNzU1LDcgQEAKIAkJICAgICAgICAgICAgICAgICAgICAgJnBoeV9kYXRhKTsKIAkJaWYgKChwaHlfZGF0YSAmIE1ESU9fQ1RSTDFfUkVTRVQpID09IDApCiAJCQlicmVhazsKLQkJbXNsZWVwKDEwKTsKKwkJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CiAJfQogCiAJaWYgKChwaHlfZGF0YSAmIE1ESU9fQ1RSTDFfUkVTRVQpICE9IDApIHsKQEAgLTc4Miw3ICs3ODQsNyBAQAogCQljYXNlIElYR0JFX0RFTEFZX05MOgogCQkJZGF0YV9vZmZzZXQrKzsKIAkJCWh3X2RiZyhodywgIkRFTEFZOiAlZCBNU1xuIiwgZWRhdGEpOwotCQkJbXNsZWVwKGVkYXRhKTsKKwkJCXVzbGVlcF9yYW5nZShlZGF0YSAqIDEwMDAsIGVkYXRhICogMjAwMCk7CiAJCQlicmVhazsKIAkJY2FzZSBJWEdCRV9EQVRBX05MOgogCQkJaHdfZGJnKGh3LCAiREFUQTpcbiIpOwpAQCAtMTIyMCw3ICsxMjIyLDcgQEAKIAkJc3dmd19tYXNrID0gSVhHQkVfR1NTUl9QSFkwX1NNOwogCiAJZG8gewotCQlpZiAoaXhnYmVfYWNxdWlyZV9zd2Z3X3N5bmMoaHcsIHN3ZndfbWFzaykgIT0gMCkgeworCQlpZiAoaHctPm1hYy5vcHMuYWNxdWlyZV9zd2Z3X3N5bmMoaHcsIHN3ZndfbWFzaykgIT0gMCkgewogCQkJc3RhdHVzID0gSVhHQkVfRVJSX1NXRldfU1lOQzsKIAkJCWdvdG8gcmVhZF9ieXRlX291dDsKIAkJfQpAQCAtMTI2Nyw3ICsxMjY5LDcgQEAKIAkJYnJlYWs7CiAKIGZhaWw6Ci0JCWl4Z2JlX3JlbGVhc2Vfc3dmd19zeW5jKGh3LCBzd2Z3X21hc2spOworCQlody0+bWFjLm9wcy5yZWxlYXNlX3N3Zndfc3luYyhodywgc3dmd19tYXNrKTsKIAkJbXNsZWVwKDEwMCk7CiAJCWl4Z2JlX2kyY19idXNfY2xlYXIoaHcpOwogCQlyZXRyeSsrOwpAQCAtMTI3OCw3ICsxMjgwLDcgQEAKIAogCX0gd2hpbGUgKHJldHJ5IDwgbWF4X3JldHJ5KTsKIAotCWl4Z2JlX3JlbGVhc2Vfc3dmd19zeW5jKGh3LCBzd2Z3X21hc2spOworCWh3LT5tYWMub3BzLnJlbGVhc2Vfc3dmd19zeW5jKGh3LCBzd2Z3X21hc2spOwogCiByZWFkX2J5dGVfb3V0OgogCXJldHVybiBzdGF0dXM7CkBAIC0xMzA2LDcgKzEzMDgsNyBAQAogCWVsc2UKIAkJc3dmd19tYXNrID0gSVhHQkVfR1NTUl9QSFkwX1NNOwogCi0JaWYgKGl4Z2JlX2FjcXVpcmVfc3dmd19zeW5jKGh3LCBzd2Z3X21hc2spICE9IDApIHsKKwlpZiAoaHctPm1hYy5vcHMuYWNxdWlyZV9zd2Z3X3N5bmMoaHcsIHN3ZndfbWFzaykgIT0gMCkgewogCQlzdGF0dXMgPSBJWEdCRV9FUlJfU1dGV19TWU5DOwogCQlnb3RvIHdyaXRlX2J5dGVfb3V0OwogCX0KQEAgLTEzNTAsNyArMTM1Miw3IEBACiAJCQlod19kYmcoaHcsICJJMkMgYnl0ZSB3cml0ZSBlcnJvci5cbiIpOwogCX0gd2hpbGUgKHJldHJ5IDwgbWF4X3JldHJ5KTsKIAotCWl4Z2JlX3JlbGVhc2Vfc3dmd19zeW5jKGh3LCBzd2Z3X21hc2spOworCWh3LT5tYWMub3BzLnJlbGVhc2Vfc3dmd19zeW5jKGh3LCBzd2Z3X21hc2spOwogCiB3cml0ZV9ieXRlX291dDoKIAlyZXR1cm4gc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfc3Jpb3YuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3NyaW92LmMKaW5kZXggNmU1MGQ4My4uYWM5OWIwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfc3Jpb3YuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9zcmlvdi5jCkBAIC04Miw2ICs4MiwyMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBpeGdiZV9yZXN0b3JlX3ZmX21hY3ZsYW5zKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCXN0cnVjdCB2Zl9tYWN2bGFucyAqZW50cnk7CisKKwlsaXN0X2Zvcl9lYWNoKHBvcywgJmFkYXB0ZXItPnZmX212cy5sKSB7CisJCWVudHJ5ID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCB2Zl9tYWN2bGFucywgbCk7CisJCWlmIChlbnRyeS0+ZnJlZSA9PSBmYWxzZSkKKwkJCWh3LT5tYWMub3BzLnNldF9yYXIoaHcsIGVudHJ5LT5yYXJfZW50cnksCisJCQkJCSAgICBlbnRyeS0+dmZfbWFjdmxhbiwKKwkJCQkJICAgIGVudHJ5LT52ZiwgSVhHQkVfUkFIX0FWKTsKKwl9Cit9CisKIHZvaWQgaXhnYmVfcmVzdG9yZV92Zl9tdWx0aWNhc3RzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CkBAIC0xMDIsNiArMTE3LDkgQEAKIAkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTVRBKHZlY3Rvcl9yZWcpLCBtdGFfcmVnKTsKIAkJfQogCX0KKworCS8qIFJlc3RvcmUgYW55IFZGIG1hY3ZsYW5zICovCisJaXhnYmVfcmVzdG9yZV92Zl9tYWN2bGFucyhhZGFwdGVyKTsKIH0KIAogc3RhdGljIGludCBpeGdiZV9zZXRfdmZfdmxhbihzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZCwgaW50IHZpZCwKQEAgLTExMCw3ICsxMjgsNyBAQAogCXJldHVybiBhZGFwdGVyLT5ody5tYWMub3BzLnNldF92ZnRhKCZhZGFwdGVyLT5odywgdmlkLCB2ZiwgKGJvb2wpYWRkKTsKIH0KIAotdm9pZCBpeGdiZV9zZXRfdmZfbHBlKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgKm1zZ2J1ZikKK3N0YXRpYyB2b2lkIGl4Z2JlX3NldF92Zl9scGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiAqbXNnYnVmKQogewogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJaW50IG5ld19tdHUgPSBtc2didWZbMV07CkBAIC0yMDAsNiArMjE4LDYxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaXhnYmVfc2V0X3ZmX21hY3ZsYW4oc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJaW50IHZmLCBpbnQgaW5kZXgsIHVuc2lnbmVkIGNoYXIgKm1hY19hZGRyKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCXN0cnVjdCB2Zl9tYWN2bGFucyAqZW50cnk7CisKKwlpZiAoaW5kZXggPD0gMSkgeworCQlsaXN0X2Zvcl9lYWNoKHBvcywgJmFkYXB0ZXItPnZmX212cy5sKSB7CisJCQllbnRyeSA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgdmZfbWFjdmxhbnMsIGwpOworCQkJaWYgKGVudHJ5LT52ZiA9PSB2ZikgeworCQkJCWVudHJ5LT52ZiA9IC0xOworCQkJCWVudHJ5LT5mcmVlID0gdHJ1ZTsKKwkJCQllbnRyeS0+aXNfbWFjdmxhbiA9IGZhbHNlOworCQkJCWh3LT5tYWMub3BzLmNsZWFyX3JhcihodywgZW50cnktPnJhcl9lbnRyeSk7CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIElmIGluZGV4IHdhcyB6ZXJvIHRoZW4gd2Ugd2VyZSBhc2tlZCB0byBjbGVhciB0aGUgdWMgbGlzdAorCSAqIGZvciB0aGUgVkYuICBXZSdyZSBkb25lLgorCSAqLworCWlmICghaW5kZXgpCisJCXJldHVybiAwOworCisJZW50cnkgPSBOVUxMOworCisJbGlzdF9mb3JfZWFjaChwb3MsICZhZGFwdGVyLT52Zl9tdnMubCkgeworCQllbnRyeSA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgdmZfbWFjdmxhbnMsIGwpOworCQlpZiAoZW50cnktPmZyZWUpCisJCQlicmVhazsKKwl9CisKKwkvKgorCSAqIElmIHdlIHRyYXZlcnNlZCB0aGUgZW50aXJlIGxpc3QgYW5kIGRpZG4ndCBmaW5kIGEgZnJlZSBlbnRyeQorCSAqIHRoZW4gd2UncmUgb3V0IG9mIHNwYWNlIG9uIHRoZSBSQVIgdGFibGUuICBBbHNvIGVudHJ5IG1heQorCSAqIGJlIE5VTEwgYmVjYXVzZSB0aGUgb3JpZ2luYWwgbWVtb3J5IGFsbG9jYXRpb24gZm9yIHRoZSBsaXN0CisJICogZmFpbGVkLCB3aGljaCBpcyBub3QgZmF0YWwgYnV0IGRvZXMgbWVhbiB3ZSBjYW4ndCBzdXBwb3J0CisJICogVkYgcmVxdWVzdHMgZm9yIE1BQ1ZMQU4gYmVjYXVzZSB3ZSBjb3VsZG4ndCBhbGxvY2F0ZQorCSAqIG1lbW9yeSBmb3IgdGhlIGxpc3QgbWFuYWdlbWVudCByZXF1aXJlZC4KKwkgKi8KKwlpZiAoIWVudHJ5IHx8ICFlbnRyeS0+ZnJlZSkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwllbnRyeS0+ZnJlZSA9IGZhbHNlOworCWVudHJ5LT5pc19tYWN2bGFuID0gdHJ1ZTsKKwllbnRyeS0+dmYgPSB2ZjsKKwltZW1jcHkoZW50cnktPnZmX21hY3ZsYW4sIG1hY19hZGRyLCBFVEhfQUxFTik7CisKKwlody0+bWFjLm9wcy5zZXRfcmFyKGh3LCBlbnRyeS0+cmFyX2VudHJ5LCBtYWNfYWRkciwgdmYsIElYR0JFX1JBSF9BVik7CisKKwlyZXR1cm4gMDsKK30KKwogaW50IGl4Z2JlX3ZmX2NvbmZpZ3VyYXRpb24oc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBldmVudF9tYXNrKQogewogCXVuc2lnbmVkIGNoYXIgdmZfbWFjX2FkZHJbNl07CkBAIC0yNTEsMTIgKzMyNCwxMiBAQAogc3RhdGljIGludCBpeGdiZV9yY3ZfbXNnX2Zyb21fdmYoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB2ZikKIHsKIAl1MzIgbWJ4X3NpemUgPSBJWEdCRV9WRk1BSUxCT1hfU0laRTsKLQl1MzIgbXNnYnVmW21ieF9zaXplXTsKKwl1MzIgbXNnYnVmW0lYR0JFX1ZGTUFJTEJPWF9TSVpFXTsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXMzMiByZXR2YWw7CiAJaW50IGVudHJpZXM7CiAJdTE2ICpoYXNoX2xpc3Q7Ci0JaW50IGFkZCwgdmlkOworCWludCBhZGQsIHZpZCwgaW5kZXg7CiAJdTggKm5ld19tYWM7CiAKIAlyZXR2YWwgPSBpeGdiZV9yZWFkX21ieChodywgbXNnYnVmLCBtYnhfc2l6ZSwgdmYpOwpAQCAtMzQ1LDYgKzQxOCwyNCBAQAogCQkJcmV0dmFsID0gaXhnYmVfc2V0X3ZmX3ZsYW4oYWRhcHRlciwgYWRkLCB2aWQsIHZmKTsKIAkJfQogCQlicmVhazsKKwljYXNlIElYR0JFX1ZGX1NFVF9NQUNWTEFOOgorCQlpbmRleCA9IChtc2didWZbMF0gJiBJWEdCRV9WVF9NU0dJTkZPX01BU0spID4+CisJCQlJWEdCRV9WVF9NU0dJTkZPX1NISUZUOworCQkvKgorCQkgKiBJZiB0aGUgVkYgaXMgYWxsb3dlZCB0byBzZXQgTUFDIGZpbHRlcnMgdGhlbiB0dXJuIG9mZgorCQkgKiBhbnRpLXNwb29maW5nIHRvIGF2b2lkIGZhbHNlIHBvc2l0aXZlcy4gIEFuIGluZGV4CisJCSAqIGdyZWF0ZXIgdGhhbiAwIHdpbGwgaW5kaWNhdGUgdGhlIFZGIGlzIHNldHRpbmcgYQorCQkgKiBtYWN2bGFuIE1BQyBmaWx0ZXIuCisJCSAqLworCQlpZiAoaW5kZXggPiAwICYmIGFkYXB0ZXItPmFudGlzcG9vZmluZ19lbmFibGVkKSB7CisJCQlody0+bWFjLm9wcy5zZXRfbWFjX2FudGlfc3Bvb2ZpbmcoaHcsIGZhbHNlLAorCQkJCQkJCSAgYWRhcHRlci0+bnVtX3Zmcyk7CisJCQlody0+bWFjLm9wcy5zZXRfdmxhbl9hbnRpX3Nwb29maW5nKGh3LCBmYWxzZSwgdmYpOworCQkJYWRhcHRlci0+YW50aXNwb29maW5nX2VuYWJsZWQgPSBmYWxzZTsKKwkJfQorCQlyZXR2YWwgPSBpeGdiZV9zZXRfdmZfbWFjdmxhbihhZGFwdGVyLCB2ZiwgaW5kZXgsCisJCQkJCSAgICAgICh1bnNpZ25lZCBjaGFyICopKCZtc2didWZbMV0pKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZV9lcnIoZHJ2LCAiVW5oYW5kbGVkIE1zZyAlOC44eFxuIiwgbXNnYnVmWzBdKTsKIAkJcmV0dmFsID0gSVhHQkVfRVJSX01CWDsKQEAgLTQ1Miw3ICs1NDMsOCBAQAogCQkJZ290byBvdXQ7CiAJCWl4Z2JlX3NldF92bXZpcihhZGFwdGVyLCB2bGFuIHwgKHFvcyA8PCBWTEFOX1BSSU9fU0hJRlQpLCB2Zik7CiAJCWl4Z2JlX3NldF92bW9scihodywgdmYsIGZhbHNlKTsKLQkJaHctPm1hYy5vcHMuc2V0X3ZsYW5fYW50aV9zcG9vZmluZyhodywgdHJ1ZSwgdmYpOworCQlpZiAoYWRhcHRlci0+YW50aXNwb29maW5nX2VuYWJsZWQpCisJCQlody0+bWFjLm9wcy5zZXRfdmxhbl9hbnRpX3Nwb29maW5nKGh3LCB0cnVlLCB2Zik7CiAJCWFkYXB0ZXItPnZmaW5mb1t2Zl0ucGZfdmxhbiA9IHZsYW47CiAJCWFkYXB0ZXItPnZmaW5mb1t2Zl0ucGZfcW9zID0gcW9zOwogCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfdHlwZS5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfdHlwZS5oCmluZGV4IDI1YzFmYjcuLmZhNDNmMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3R5cGUuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV90eXBlLmgKQEAgLTU4LDkgKzU4LDExIEBACiAjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OV9TRlBfRkNPRSAgICAgIDB4MTUyOQogI2RlZmluZSBJWEdCRV9TVUJERVZfSURfODI1OTlfU0ZQICAgICAgICAweDExQTkKICNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk5X1NGUF9FTSAgICAgICAgMHgxNTA3CisjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OV9TRlBfU0YyICAgICAgIDB4MTU0RAogI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OTlfWEFVSV9MT00gICAgICAweDEwRkMKICNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk5X0NPTUJPX0JBQ0tQTEFORSAweDEwRjgKICNkZWZpbmUgSVhHQkVfU1VCREVWX0lEXzgyNTk5X0tYNF9LUl9NRVpaICAweDAwMEMKKyNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk5X0xTICAgICAgICAgICAgMHgxNTRGCiAjZGVmaW5lIElYR0JFX0RFVl9JRF9YNTQwVCAgICAgICAgICAgICAgIDB4MTUyOAogCiAvKiBHZW5lcmFsIFJlZ2lzdGVycyAqLwpAQCAtMTYzLDYgKzE2NSw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEQwMTggKyAoKF9pIC0gNjQpICogMHg0MCkpKQogI2RlZmluZSBJWEdCRV9SWERDVEwoX2kpICgoKF9pKSA8IDY0KSA/ICgweDAxMDI4ICsgKChfaSkgKiAweDQwKSkgOiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDBEMDI4ICsgKChfaSAtIDY0KSAqIDB4NDApKSkKKyNkZWZpbmUgSVhHQkVfUlNDQ1RMKF9pKSAoKChfaSkgPCA2NCkgPyAoMHgwMTAyQyArICgoX2kpICogMHg0MCkpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwRDAyQyArICgoX2kgLSA2NCkgKiAweDQwKSkpCisjZGVmaW5lIElYR0JFX1JTQ0RCVSAgICAgMHgwMzAyOAogI2RlZmluZSBJWEdCRV9SRERDQyAgICAgIDB4MDJGMjAKICNkZWZpbmUgSVhHQkVfUlhNRU1XUkFQICAweDAzMTkwCiAjZGVmaW5lIElYR0JFX1NUQVJDVFJMICAgMHgwMzAyNApAQCAtMjI3LDE3ICsyMzIsMjMgQEAKICNkZWZpbmUgSVhHQkVfVkxWRihfaSkgICgweDBGMTAwICsgKChfaSkgKiA0KSkgIC8qIDY0IG9mIHRoZXNlICgwLTYzKSAqLwogI2RlZmluZSBJWEdCRV9WTFZGQihfaSkgKDB4MEYyMDAgKyAoKF9pKSAqIDQpKSAgLyogMTI4IG9mIHRoZXNlICgwLTEyNykgKi8KICNkZWZpbmUgSVhHQkVfVk1WSVIoX2kpICgweDA4MDAwICsgKChfaSkgKiA0KSkgIC8qIDY0IG9mIHRoZXNlICgwLTYzKSAqLwotI2RlZmluZSBJWEdCRV9WVF9DVEwgICAgMHgwNTFCMAotI2RlZmluZSBJWEdCRV9WRlJFKF9pKSAgKDB4MDUxRTAgKyAoKF9pKSAqIDQpKQotI2RlZmluZSBJWEdCRV9WRlRFKF9pKSAgKDB4MDgxMTAgKyAoKF9pKSAqIDQpKQotI2RlZmluZSBJWEdCRV9WTUVDTShfaSkgKDB4MDg3OTAgKyAoKF9pKSAqIDQpKQotI2RlZmluZSBJWEdCRV9RREUgICAgICAgMHgyRjA0Ci0jZGVmaW5lIElYR0JFX1ZNT0xSKF9pKSAoMHgwRjAwMCArICgoX2kpICogNCkpIC8qIDY0IHRvdGFsICovCi0jZGVmaW5lIElYR0JFX1VUQShfaSkgICAoMHgwRjQwMCArICgoX2kpICogNCkpCi0jZGVmaW5lIElYR0JFX1ZNUkNUTChfaSkgICAgICAgICgweDBGNjAwICsgKChfaSkgKiA0KSkKLSNkZWZpbmUgSVhHQkVfVk1SVkxBTihfaSkgICAgICAgKDB4MEY2MTAgKyAoKF9pKSAqIDQpKQotI2RlZmluZSBJWEdCRV9WTVJWTShfaSkgICAgICAgICAoMHgwRjYzMCArICgoX2kpICogNCkpCi0jZGVmaW5lIElYR0JFX0wzNFRfSU1JUihfaSkgICAgICAoMHgwRTgwMCArICgoX2kpICogNCkpIC8qMTI4IG9mIHRoZXNlICgwLTEyNykqLworI2RlZmluZSBJWEdCRV9WVF9DVEwgICAgICAgICAweDA1MUIwCisjZGVmaW5lIElYR0JFX1BGTUFJTEJPWChfaSkgICgweDA0QjAwICsgKDQgKiAoX2kpKSkgLyogNjQgdG90YWwgKi8KKyNkZWZpbmUgSVhHQkVfUEZNQk1FTShfaSkgICAgKDB4MTMwMDAgKyAoNjQgKiAoX2kpKSkgLyogNjQgTWFpbGJveGVzLCAxNiBEVyBlYWNoICovCisjZGVmaW5lIElYR0JFX1BGTUJJQ1IoX2kpICAgICgweDAwNzEwICsgKDQgKiAoX2kpKSkgLyogNCB0b3RhbCAqLworI2RlZmluZSBJWEdCRV9QRk1CSU1SKF9pKSAgICAoMHgwMDcyMCArICg0ICogKF9pKSkpIC8qIDQgdG90YWwgKi8KKyNkZWZpbmUgSVhHQkVfVkZSRShfaSkgICAgICAgKDB4MDUxRTAgKyAoKF9pKSAqIDQpKQorI2RlZmluZSBJWEdCRV9WRlRFKF9pKSAgICAgICAoMHgwODExMCArICgoX2kpICogNCkpCisjZGVmaW5lIElYR0JFX1ZNRUNNKF9pKSAgICAgICgweDA4NzkwICsgKChfaSkgKiA0KSkKKyNkZWZpbmUgSVhHQkVfUURFICAgICAgICAgICAgMHgyRjA0CisjZGVmaW5lIElYR0JFX1ZNVFhTVyhfaSkgICAgICgweDA1MTgwICsgKChfaSkgKiA0KSkgLyogMiB0b3RhbCAqLworI2RlZmluZSBJWEdCRV9WTU9MUihfaSkgICAgICAoMHgwRjAwMCArICgoX2kpICogNCkpIC8qIDY0IHRvdGFsICovCisjZGVmaW5lIElYR0JFX1VUQShfaSkgICAgICAgICgweDBGNDAwICsgKChfaSkgKiA0KSkKKyNkZWZpbmUgSVhHQkVfTVJDVEwoX2kpICAgICAgKDB4MEY2MDAgKyAoKF9pKSAqIDQpKQorI2RlZmluZSBJWEdCRV9WTVJWTEFOKF9pKSAgICAoMHgwRjYxMCArICgoX2kpICogNCkpCisjZGVmaW5lIElYR0JFX1ZNUlZNKF9pKSAgICAgICgweDBGNjMwICsgKChfaSkgKiA0KSkKKyNkZWZpbmUgSVhHQkVfTDM0VF9JTUlSKF9pKSAgKDB4MEU4MDAgKyAoKF9pKSAqIDQpKSAvKjEyOCBvZiB0aGVzZSAoMC0xMjcpKi8KKyNkZWZpbmUgSVhHQkVfUlhGRUNDRVJSMCAgICAgICAgIDB4MDUxQjgKICNkZWZpbmUgSVhHQkVfTExJVEhSRVNIIDB4MEVDOTAKICNkZWZpbmUgSVhHQkVfSU1JUihfaSkgICgweDA1QTgwICsgKChfaSkgKiA0KSkgIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KICNkZWZpbmUgSVhHQkVfSU1JUkVYVChfaSkgICAgICAgKDB4MDVBQTAgKyAoKF9pKSAqIDQpKSAgLyogOCBvZiB0aGVzZSAoMC03KSAqLwpAQCAtMzY0LDcgKzM3NSw3IEBACiAjZGVmaW5lIElYR0JFX1dVRkNfRkxYNSAweDAwMjAwMDAwIC8qIEZsZXhpYmxlIEZpbHRlciA1IEVuYWJsZSAqLwogI2RlZmluZSBJWEdCRV9XVUZDX0ZMWF9GSUxURVJTICAgICAweDAwMEYwMDAwIC8qIE1hc2sgZm9yIDQgZmxleCBmaWx0ZXJzICovCiAjZGVmaW5lIElYR0JFX1dVRkNfRVhUX0ZMWF9GSUxURVJTIDB4MDAzMDAwMDAgLyogTWFzayBmb3IgRXh0LiBmbGV4IGZpbHRlcnMgKi8KLSNkZWZpbmUgSVhHQkVfV1VGQ19BTExfRklMVEVSUyAgICAgMHgwMDNGMDBGRiAvKiBNYXNrIGZvciBhbGwgNiB3YWtldXAgZmlsdGVycyovCisjZGVmaW5lIElYR0JFX1dVRkNfQUxMX0ZJTFRFUlMgICAgIDB4MDAzRjAwRkYgLyogTWFzayBmb3IgYWxsIHdha2V1cCBmaWx0ZXJzICovCiAjZGVmaW5lIElYR0JFX1dVRkNfRkxYX09GRlNFVCAgICAgIDE2IC8qIE9mZnNldCB0byB0aGUgRmxleGlibGUgRmlsdGVycyBiaXRzICovCiAKIC8qIFdha2UgVXAgU3RhdHVzICovCkBAIC00MDYsNyArNDE3LDYgQEAKICNkZWZpbmUgSVhHQkVfU0VDVFhTVEFUICAgICAgICAgMHgwODgwNAogI2RlZmluZSBJWEdCRV9TRUNUWEJVRkZBRiAgICAgICAweDA4ODA4CiAjZGVmaW5lIElYR0JFX1NFQ1RYTUlOSUZHICAgICAgIDB4MDg4MTAKLSNkZWZpbmUgSVhHQkVfU0VDVFhTVEFUICAgICAgICAgMHgwODgwNAogI2RlZmluZSBJWEdCRV9TRUNSWENUUkwgICAgICAgICAweDA4RDAwCiAjZGVmaW5lIElYR0JFX1NFQ1JYU1RBVCAgICAgICAgIDB4MDhEMDQKIApAQCAtNDk5LDIxICs1MDksNiBAQAogCiAjZGVmaW5lIElYR0JFX1NFQ1RYQ1RSTF9TVE9SRV9GT1JXQVJEX0VOQUJMRSAgICAweDQKIAotLyogSFcgUlNDIHJlZ2lzdGVycyAqLwotI2RlZmluZSBJWEdCRV9SU0NDVEwoX2kpICgoKF9pKSA8IDY0KSA/ICgweDAxMDJDICsgKChfaSkgKiAweDQwKSkgOiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICgweDBEMDJDICsgKChfaSAtIDY0KSAqIDB4NDApKSkKLSNkZWZpbmUgSVhHQkVfUlNDREJVICAgICAgMHgwMzAyOAotI2RlZmluZSBJWEdCRV9SU0NDVExfUlNDRU4gICAgICAgICAgMHgwMQotI2RlZmluZSBJWEdCRV9SU0NDVExfTUFYREVTQ18xICAgICAgMHgwMAotI2RlZmluZSBJWEdCRV9SU0NDVExfTUFYREVTQ180ICAgICAgMHgwNAotI2RlZmluZSBJWEdCRV9SU0NDVExfTUFYREVTQ184ICAgICAgMHgwOAotI2RlZmluZSBJWEdCRV9SU0NDVExfTUFYREVTQ18xNiAgICAgMHgwQwotI2RlZmluZSBJWEdCRV9SWERBRFZfUlNDQ05UX1NISUZUICAgICAxNwotI2RlZmluZSBJWEdCRV9HUElFX1JTQ19ERUxBWV9TSElGVCAgICAxMQotI2RlZmluZSBJWEdCRV9SWERBRFZfUlNDQ05UX01BU0sgICAgMHgwMDFFMDAwMAotI2RlZmluZSBJWEdCRV9SU0NEQlVfUlNDQUNLRElTICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBJWEdCRV9SRFJYQ1RMX1JTQ0ZSU1RTSVpFICAgMHgwMDNFMDAwMAotCiAvKiBEQ0IgcmVnaXN0ZXJzICovCiAjZGVmaW5lIElYR0JFX1JUUlBDUyAgICAgIDB4MDI0MzAKICNkZWZpbmUgSVhHQkVfUlRURENTICAgICAgMHgwNDkwMApAQCAtNTIyLDYgKzUxNyw3IEBACiAjZGVmaW5lIElYR0JFX1JUUlVQMlRDICAgIDB4MDMwMjAKICNkZWZpbmUgSVhHQkVfUlRUVVAyVEMgICAgMHgwQzgwMAogI2RlZmluZSBJWEdCRV9SVFJQVDRDKF9pKSAoMHgwMjE0MCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KKyNkZWZpbmUgSVhHQkVfVFhMTFEoX2kpICAgKDB4MDgyRTAgKyAoKF9pKSAqIDQpKSAvKiA0IG9mIHRoZXNlICgwLTMpICovCiAjZGVmaW5lIElYR0JFX1JUUlBUNFMoX2kpICgweDAyMTYwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLwogI2RlZmluZSBJWEdCRV9SVFREVDJDKF9pKSAoMHgwNDkxMCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KICNkZWZpbmUgSVhHQkVfUlRURFQyUyhfaSkgKDB4MDQ5MzAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCkBAIC01NDAsNyArNTM2LDcgQEAKIAkoSVhHQkVfUlRUQkNOUkNfUkZfREVDX01BU0sgPDwgSVhHQkVfUlRUQkNOUkNfUkZfSU5UX1NISUZUKQogCiAKLS8qIEZDb0UgcmVnaXN0ZXJzICovCisvKiBGQ29FIERNQSBDb250ZXh0IFJlZ2lzdGVycyAqLwogI2RlZmluZSBJWEdCRV9GQ1BUUkwgICAgMHgwMjQxMCAvKiBGQyBVc2VyIERlc2MuIFBUUiBMb3cgKi8KICNkZWZpbmUgSVhHQkVfRkNQVFJIICAgIDB4MDI0MTQgLyogRkMgVVNlciBEZXNjLiBQVFIgSGlnaCAqLwogI2RlZmluZSBJWEdCRV9GQ0JVRkYgICAgMHgwMjQxOCAvKiBGQyBCdWZmZXIgQ29udHJvbCAqLwpAQCAtNjc3LDYgKzY3MywxMCBAQAogI2RlZmluZSBJWEdCRV9GQ09FRFdSQyAgMHgwMjQyQyAvKiBOdW1iZXIgb2YgRkNvRSBEV29yZHMgUmVjZWl2ZWQgKi8KICNkZWZpbmUgSVhHQkVfRkNPRVBUQyAgIDB4MDg3ODQgLyogTnVtYmVyIG9mIEZDb0UgUGFja2V0cyBUcmFuc21pdHRlZCAqLwogI2RlZmluZSBJWEdCRV9GQ09FRFdUQyAgMHgwODc4OCAvKiBOdW1iZXIgb2YgRkNvRSBEV29yZHMgVHJhbnNtaXR0ZWQgKi8KKyNkZWZpbmUgSVhHQkVfTzJCR1BUQyAgIDB4MDQxQzQKKyNkZWZpbmUgSVhHQkVfTzJCU1BDICAgIDB4MDg3QjAKKyNkZWZpbmUgSVhHQkVfQjJPU1BDICAgIDB4MDQxQzAKKyNkZWZpbmUgSVhHQkVfQjJPR1BSQyAgIDB4MDJGOTAKICNkZWZpbmUgSVhHQkVfUENSQzhFQ0wgIDB4MEU4MTAKICNkZWZpbmUgSVhHQkVfUENSQzhFQ0ggIDB4MEU4MTEKICNkZWZpbmUgSVhHQkVfUENSQzhFQ0hfTUFTSyAgICAgMHgxRgpAQCAtNzQyLDE3ICs3NDIsMTAgQEAKICNkZWZpbmUgSVhHQkVfUEJBQ0xSXzgyNTk5ICAgICAgMHgxMTA2OAogI2RlZmluZSBJWEdCRV9DSUFBXzgyNTk5ICAgICAgICAweDExMDg4CiAjZGVmaW5lIElYR0JFX0NJQURfODI1OTkgICAgICAgIDB4MTEwOEMKLSNkZWZpbmUgSVhHQkVfUENJRV9ESUFHXzBfODI1OTkgMHgxMTA5MAotI2RlZmluZSBJWEdCRV9QQ0lFX0RJQUdfMV84MjU5OSAweDExMDk0Ci0jZGVmaW5lIElYR0JFX1BDSUVfRElBR18yXzgyNTk5IDB4MTEwOTgKLSNkZWZpbmUgSVhHQkVfUENJRV9ESUFHXzNfODI1OTkgMHgxMTA5QwotI2RlZmluZSBJWEdCRV9QQ0lFX0RJQUdfNF84MjU5OSAweDExMEEwCi0jZGVmaW5lIElYR0JFX1BDSUVfRElBR181XzgyNTk5IDB4MTEwQTQKLSNkZWZpbmUgSVhHQkVfUENJRV9ESUFHXzZfODI1OTkgMHgxMTBBOAotI2RlZmluZSBJWEdCRV9QQ0lFX0RJQUdfN184MjU5OSAweDExMEMwCi0jZGVmaW5lIElYR0JFX0lOVFJQVF9DU1JfODI1OTkgIDB4MTEwQjAKLSNkZWZpbmUgSVhHQkVfSU5UUlBUX01BU0tfODI1OTkgMHgxMTBCOAorI2RlZmluZSBJWEdCRV9QSUNBVVNFICAgICAgICAgICAweDExMEIwCisjZGVmaW5lIElYR0JFX1BJRU5BICAgICAgICAgICAgIDB4MTEwQjgKICNkZWZpbmUgSVhHQkVfQ0RRX01CUl84MjU5OSAgICAgMHgxMTBCNAorI2RlZmluZSBJWEdCRV9QQ0lFU1BBUkUgICAgICAgICAweDExMEJDCiAjZGVmaW5lIElYR0JFX01JU0NfUkVHXzgyNTk5ICAgIDB4MTEwRjAKICNkZWZpbmUgSVhHQkVfRUNDX0NUUkxfMF84MjU5OSAgMHgxMTEwMAogI2RlZmluZSBJWEdCRV9FQ0NfQ1RSTF8xXzgyNTk5ICAweDExMTA0CkBAIC03ODUsNyArNzc4LDE5IEBACiAjZGVmaW5lIElYR0JFX1NZU1RJTUwgICAgMHgwOEMwQyAvKiBTeXN0ZW0gdGltZSByZWdpc3RlciBMb3cgLSBSTyAqLwogI2RlZmluZSBJWEdCRV9TWVNUSU1IICAgIDB4MDhDMTAgLyogU3lzdGVtIHRpbWUgcmVnaXN0ZXIgSGlnaCAtIFJPICovCiAjZGVmaW5lIElYR0JFX1RJTUlOQ0EgICAgMHgwOEMxNCAvKiBJbmNyZW1lbnQgYXR0cmlidXRlcyByZWdpc3RlciAtIFJXICovCi0jZGVmaW5lIElYR0JFX1JYVURQICAgICAgMHgwOEMxQyAvKiBUaW1lIFN5bmMgUnggVURQIFBvcnQgLSBSVyAqLworI2RlZmluZSBJWEdCRV9USU1BREpMICAgIDB4MDhDMTggLyogVGltZSBBZGp1c3RtZW50IE9mZnNldCByZWdpc3RlciBMb3cgLSBSVyAqLworI2RlZmluZSBJWEdCRV9USU1BREpIICAgIDB4MDhDMUMgLyogVGltZSBBZGp1c3RtZW50IE9mZnNldCByZWdpc3RlciBIaWdoIC0gUlcgKi8KKyNkZWZpbmUgSVhHQkVfVFNBVVhDICAgICAweDA4QzIwIC8qIFRpbWVTeW5jIEF1eGlsaWFyeSBDb250cm9sIHJlZ2lzdGVyIC0gUlcgKi8KKyNkZWZpbmUgSVhHQkVfVFJHVFRJTUwwICAweDA4QzI0IC8qIFRhcmdldCBUaW1lIFJlZ2lzdGVyIDAgTG93IC0gUlcgKi8KKyNkZWZpbmUgSVhHQkVfVFJHVFRJTUgwICAweDA4QzI4IC8qIFRhcmdldCBUaW1lIFJlZ2lzdGVyIDAgSGlnaCAtIFJXICovCisjZGVmaW5lIElYR0JFX1RSR1RUSU1MMSAgMHgwOEMyQyAvKiBUYXJnZXQgVGltZSBSZWdpc3RlciAxIExvdyAtIFJXICovCisjZGVmaW5lIElYR0JFX1RSR1RUSU1IMSAgMHgwOEMzMCAvKiBUYXJnZXQgVGltZSBSZWdpc3RlciAxIEhpZ2ggLSBSVyAqLworI2RlZmluZSBJWEdCRV9GUkVRT1VUMCAgIDB4MDhDMzQgLyogRnJlcXVlbmN5IE91dCAwIENvbnRyb2wgcmVnaXN0ZXIgLSBSVyAqLworI2RlZmluZSBJWEdCRV9GUkVRT1VUMSAgIDB4MDhDMzggLyogRnJlcXVlbmN5IE91dCAxIENvbnRyb2wgcmVnaXN0ZXIgLSBSVyAqLworI2RlZmluZSBJWEdCRV9BVVhTVE1QTDAgIDB4MDhDM0MgLyogQXV4aWxpYXJ5IFRpbWUgU3RhbXAgMCByZWdpc3RlciBMb3cgLSBSTyAqLworI2RlZmluZSBJWEdCRV9BVVhTVE1QSDAgIDB4MDhDNDAgLyogQXV4aWxpYXJ5IFRpbWUgU3RhbXAgMCByZWdpc3RlciBIaWdoIC0gUk8gKi8KKyNkZWZpbmUgSVhHQkVfQVVYU1RNUEwxICAweDA4QzQ0IC8qIEF1eGlsaWFyeSBUaW1lIFN0YW1wIDEgcmVnaXN0ZXIgTG93IC0gUk8gKi8KKyNkZWZpbmUgSVhHQkVfQVVYU1RNUEgxICAweDA4QzQ4IC8qIEF1eGlsaWFyeSBUaW1lIFN0YW1wIDEgcmVnaXN0ZXIgSGlnaCAtIFJPICovCiAKIC8qIERpYWdub3N0aWMgUmVnaXN0ZXJzICovCiAjZGVmaW5lIElYR0JFX1JEU1RBVENUTCAgIDB4MDJDMjAKQEAgLTgyOSw4ICs4MzQsMjAgQEAKICNkZWZpbmUgSVhHQkVfVFhEQVRBUkRQVFIoX2kpICAgKDB4MEM3MjAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlIEM3MjAtQzcyQyovCiAjZGVmaW5lIElYR0JFX1RYREVTQ1JEUFRSKF9pKSAgICgweDBDNzMwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSBDNzMwLUM3M0MqLwogI2RlZmluZSBJWEdCRV9QQ0lFRUNDQ1RMIDB4MTEwNkMKKyNkZWZpbmUgSVhHQkVfUlhXUlBUUihfaSkgICAgICAgKDB4MDMxMDAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlIDMxMDAtMzEwQyovCisjZGVmaW5lIElYR0JFX1JYVVNFRChfaSkgICAgICAgICgweDAzMTIwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAzMTIwLTMxMkMqLworI2RlZmluZSBJWEdCRV9SWFJEUFRSKF9pKSAgICAgICAoMHgwMzE0MCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgMzE0MC0zMTRDKi8KKyNkZWZpbmUgSVhHQkVfUlhSRFdSUFRSKF9pKSAgICAgKDB4MDMxNjAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlIDMxNjAtMzEwQyovCisjZGVmaW5lIElYR0JFX1RYV1JQVFIoX2kpICAgICAgICgweDBDMTAwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSBDMTAwLUMxMEMqLworI2RlZmluZSBJWEdCRV9UWFVTRUQoX2kpICAgICAgICAoMHgwQzEyMCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgQzEyMC1DMTJDKi8KKyNkZWZpbmUgSVhHQkVfVFhSRFBUUihfaSkgICAgICAgKDB4MEMxNDAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlIEMxNDAtQzE0QyovCisjZGVmaW5lIElYR0JFX1RYUkRXUlBUUihfaSkgICAgICgweDBDMTYwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSBDMTYwLUMxMEMqLwogI2RlZmluZSBJWEdCRV9QQ0lFRUNDQ1RMMCAweDExMTAwCiAjZGVmaW5lIElYR0JFX1BDSUVFQ0NDVEwxIDB4MTExMDQKKyNkZWZpbmUgSVhHQkVfUlhEQlVFQ0MgIDB4MDNGNzAKKyNkZWZpbmUgSVhHQkVfVFhEQlVFQ0MgIDB4MENGNzAKKyNkZWZpbmUgSVhHQkVfUlhEQlVFU1QgMHgwM0Y3NAorI2RlZmluZSBJWEdCRV9UWERCVUVTVCAweDBDRjc0CiAjZGVmaW5lIElYR0JFX1BCVFhFQ0MgICAweDBDMzAwCiAjZGVmaW5lIElYR0JFX1BCUlhFQ0MgICAweDAzMzAwCiAjZGVmaW5lIElYR0JFX0dIRUNDUiAgICAweDExMEIwCkBAIC04NzEsNiArODg4LDcgQEAKICNkZWZpbmUgSVhHQkVfQVVUT0MzICAgIDB4MDQyQUMKICNkZWZpbmUgSVhHQkVfQU5MUDEgICAgIDB4MDQyQjAKICNkZWZpbmUgSVhHQkVfQU5MUDIgICAgIDB4MDQyQjQKKyNkZWZpbmUgSVhHQkVfTUFDQyAgICAgIDB4MDQzMzAKICNkZWZpbmUgSVhHQkVfQVRMQVNDVEwgIDB4MDQ4MDAKICNkZWZpbmUgSVhHQkVfTU1OR0MgICAgIDB4MDQyRDAKICNkZWZpbmUgSVhHQkVfQU5MUE5QMSAgIDB4MDQyRDQKQEAgLTg4MywxNCArOTAxLDQ5IEBACiAjZGVmaW5lIElYR0JFX01QVkMgICAgICAweDA0MzE4CiAjZGVmaW5lIElYR0JFX1NHTUlJQyAgICAweDA0MzE0CiAKKy8qIFN0YXRpc3RpY3MgUmVnaXN0ZXJzICovCisjZGVmaW5lIElYR0JFX1JYTkZHUEMgICAgICAweDA0MUIwCisjZGVmaW5lIElYR0JFX1JYTkZHQkNMICAgICAweDA0MUI0CisjZGVmaW5lIElYR0JFX1JYTkZHQkNIICAgICAweDA0MUI4CisjZGVmaW5lIElYR0JFX1JYREdQQyAgICAgICAweDAyRjUwCisjZGVmaW5lIElYR0JFX1JYREdCQ0wgICAgICAweDAyRjU0CisjZGVmaW5lIElYR0JFX1JYREdCQ0ggICAgICAweDAyRjU4CisjZGVmaW5lIElYR0JFX1JYRERHUEMgICAgICAweDAyRjVDCisjZGVmaW5lIElYR0JFX1JYRERHQkNMICAgICAweDAyRjYwCisjZGVmaW5lIElYR0JFX1JYRERHQkNIICAgICAweDAyRjY0CisjZGVmaW5lIElYR0JFX1JYTFBCS0dQQyAgICAweDAyRjY4CisjZGVmaW5lIElYR0JFX1JYTFBCS0dCQ0wgICAweDAyRjZDCisjZGVmaW5lIElYR0JFX1JYTFBCS0dCQ0ggICAweDAyRjcwCisjZGVmaW5lIElYR0JFX1JYRExQQktHUEMgICAweDAyRjc0CisjZGVmaW5lIElYR0JFX1JYRExQQktHQkNMICAweDAyRjc4CisjZGVmaW5lIElYR0JFX1JYRExQQktHQkNIICAweDAyRjdDCisjZGVmaW5lIElYR0JFX1RYREdQQyAgICAgICAweDA4N0EwCisjZGVmaW5lIElYR0JFX1RYREdCQ0wgICAgICAweDA4N0E0CisjZGVmaW5lIElYR0JFX1RYREdCQ0ggICAgICAweDA4N0E4CisKKyNkZWZpbmUgSVhHQkVfUlhEU1RBVENUUkwgMHgwMkY0MAorCisvKiBDb3BwZXIgUG9uZCAyIGxpbmsgdGltZW91dCAqLwogI2RlZmluZSBJWEdCRV9WQUxJREFURV9MSU5LX1JFQURZX1RJTUVPVVQgNTAKIAogLyogT21lciBDT1JFQ1RMICovCiAjZGVmaW5lIElYR0JFX0NPUkVDVEwgICAgICAgICAgIDB4MDE0RjAwCiAvKiBCQVJDVFJMICovCi0jZGVmaW5lIElYR0JFX0JBUkNUUkwgICAgICAgICAgIDB4MTEwRjQKLSNkZWZpbmUgSVhHQkVfQkFSQ1RSTF9GTFNJWkUgICAgMHgwNzAwCi0jZGVmaW5lIElYR0JFX0JBUkNUUkxfQ1NSU0laRSAgIDB4MjAwMAorI2RlZmluZSBJWEdCRV9CQVJDVFJMICAgICAgICAgICAgICAgMHgxMTBGNAorI2RlZmluZSBJWEdCRV9CQVJDVFJMX0ZMU0laRSAgICAgICAgMHgwNzAwCisjZGVmaW5lIElYR0JFX0JBUkNUUkxfRkxTSVpFX1NISUZUICA4CisjZGVmaW5lIElYR0JFX0JBUkNUUkxfQ1NSU0laRSAgICAgICAweDIwMDAKKworLyogUlNDQ1RMIEJpdCBNYXNrcyAqLworI2RlZmluZSBJWEdCRV9SU0NDVExfUlNDRU4gICAgICAgICAgMHgwMQorI2RlZmluZSBJWEdCRV9SU0NDVExfTUFYREVTQ18xICAgICAgMHgwMAorI2RlZmluZSBJWEdCRV9SU0NDVExfTUFYREVTQ180ICAgICAgMHgwNAorI2RlZmluZSBJWEdCRV9SU0NDVExfTUFYREVTQ184ICAgICAgMHgwOAorI2RlZmluZSBJWEdCRV9SU0NDVExfTUFYREVTQ18xNiAgICAgMHgwQworCisvKiBSU0NEQlUgQml0IE1hc2tzICovCisjZGVmaW5lIElYR0JFX1JTQ0RCVV9SU0NTTUFMRElTX01BU0sgICAgMHgwMDAwMDA3RgorI2RlZmluZSBJWEdCRV9SU0NEQlVfUlNDQUNLRElTICAgICAgICAgIDB4MDAwMDAwODAKIAogLyogUkRSWENUTCBCaXQgTWFza3MgKi8KICNkZWZpbmUgSVhHQkVfUkRSWENUTF9SRE1UU18xXzIgICAgIDB4MDAwMDAwMDAgLyogUnggRGVzYyBNaW4gVGhyZXNob2xkIFNpemUgKi8KQEAgLTg5OCw2ICs5NTEsOCBAQAogI2RlZmluZSBJWEdCRV9SRFJYQ1RMX01WTUVOICAgICAgICAgMHgwMDAwMDAyMAogI2RlZmluZSBJWEdCRV9SRFJYQ1RMX0RNQUlET05FICAgICAgMHgwMDAwMDAwOCAvKiBETUEgaW5pdCBjeWNsZSBkb25lICovCiAjZGVmaW5lIElYR0JFX1JEUlhDVExfQUdHRElTICAgICAgICAweDAwMDEwMDAwIC8qIEFnZ3JlZ2F0aW9uIGRpc2FibGUgKi8KKyNkZWZpbmUgSVhHQkVfUkRSWENUTF9SU0NGUlNUU0laRSAgIDB4MDAzRTAwMDAgLyogUlNDIEZpcnN0IHBhY2tldCBzaXplICovCisjZGVmaW5lIElYR0JFX1JEUlhDVExfUlNDTExJRElTICAgICAweDAwODAwMDAwIC8qIERpc2FibGUgUlNDIGNvbXBsIG9uIExMSSAqLwogI2RlZmluZSBJWEdCRV9SRFJYQ1RMX1JTQ0FDS0MgICAgICAgMHgwMjAwMDAwMCAvKiBtdXN0IHNldCAxIHdoZW4gUlNDIGVuYWJsZWQgKi8KICNkZWZpbmUgSVhHQkVfUkRSWENUTF9GQ09FX1dSRklYICAgIDB4MDQwMDAwMDAgLyogbXVzdCBzZXQgMSB3aGVuIFJTQyBlbmFibGVkICovCiAKQEAgLTk2OSw4ICsxMDI0LDggQEAKICNkZWZpbmUgSVhHQkVfTVNDQV9PUF9DT0RFX1NISUZUICAgICAyNiAvKiBPUCBDT0RFIHNoaWZ0ICovCiAjZGVmaW5lIElYR0JFX01TQ0FfQUREUl9DWUNMRSAgICAgICAgMHgwMDAwMDAwMCAvKiBPUCBDT0RFIDAwIChhZGRyIGN5Y2xlKSAqLwogI2RlZmluZSBJWEdCRV9NU0NBX1dSSVRFICAgICAgICAgICAgIDB4MDQwMDAwMDAgLyogT1AgQ09ERSAwMSAod3JpdGUpICovCi0jZGVmaW5lIElYR0JFX01TQ0FfUkVBRCAgICAgICAgICAgICAgMHgwODAwMDAwMCAvKiBPUCBDT0RFIDEwIChyZWFkKSAqLwotI2RlZmluZSBJWEdCRV9NU0NBX1JFQURfQVVUT0lOQyAgICAgIDB4MEMwMDAwMDAgLyogT1AgQ09ERSAxMSAocmVhZCwgYXV0byBpbmMpKi8KKyNkZWZpbmUgSVhHQkVfTVNDQV9SRUFEICAgICAgICAgICAgICAweDBDMDAwMDAwIC8qIE9QIENPREUgMTEgKHJlYWQpICovCisjZGVmaW5lIElYR0JFX01TQ0FfUkVBRF9BVVRPSU5DICAgICAgMHgwODAwMDAwMCAvKiBPUCBDT0RFIDEwIChyZWFkLCBhdXRvIGluYykqLwogI2RlZmluZSBJWEdCRV9NU0NBX1NUX0NPREVfTUFTSyAgICAgIDB4MzAwMDAwMDAgLyogU1QgQ29kZSBtYXNrICovCiAjZGVmaW5lIElYR0JFX01TQ0FfU1RfQ09ERV9TSElGVCAgICAgMjggLyogU1QgQ29kZSBzaGlmdCAqLwogI2RlZmluZSBJWEdCRV9NU0NBX05FV19QUk9UT0NPTCAgICAgIDB4MDAwMDAwMDAgLyogU1QgQ09ERSAwMCAobmV3IHByb3RvY29sKSAqLwpAQCAtMTA1Nyw2ICsxMTEyLDcgQEAKICNkZWZpbmUgSVhHQkVfR1BJRV9FSU1FTiAgICAgICAgIDB4MDAwMDAwNDAgLyogSW1tZWRpYXRlIEludGVycnVwdCBFbmFibGUgKi8KICNkZWZpbmUgSVhHQkVfR1BJRV9FSUFNRSAgICAgICAgIDB4NDAwMDAwMDAKICNkZWZpbmUgSVhHQkVfR1BJRV9QQkFfU1VQUE9SVCAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgSVhHQkVfR1BJRV9SU0NfREVMQVlfU0hJRlQgMTEKICNkZWZpbmUgSVhHQkVfR1BJRV9WVE1PREVfTUFTSyAgIDB4MDAwMEMwMDAgLyogVlQgTW9kZSBNYXNrICovCiAjZGVmaW5lIElYR0JFX0dQSUVfVlRNT0RFXzE2ICAgICAweDAwMDA0MDAwIC8qIDE2IFZGcyA4IHF1ZXVlcyBwZXIgVkYgKi8KICNkZWZpbmUgSVhHQkVfR1BJRV9WVE1PREVfMzIgICAgIDB4MDAwMDgwMDAgLyogMzIgVkZzIDQgcXVldWVzIHBlciBWRiAqLwpAQCAtMTI5MSw2ICsxMzQ3LDExIEBACiAjZGVmaW5lIElYR0JFX0ZUUUZfUE9PTF9TSElGVCAgICAgICAgICAgOAogI2RlZmluZSBJWEdCRV9GVFFGXzVUVVBMRV9NQVNLX01BU0sgICAgIDB4MDAwMDAwMUYKICNkZWZpbmUgSVhHQkVfRlRRRl81VFVQTEVfTUFTS19TSElGVCAgICAyNQorI2RlZmluZSBJWEdCRV9GVFFGX1NPVVJDRV9BRERSX01BU0sgICAgIDB4MUUKKyNkZWZpbmUgSVhHQkVfRlRRRl9ERVNUX0FERFJfTUFTSyAgICAgICAweDFECisjZGVmaW5lIElYR0JFX0ZUUUZfU09VUkNFX1BPUlRfTUFTSyAgICAgMHgxQgorI2RlZmluZSBJWEdCRV9GVFFGX0RFU1RfUE9SVF9NQVNLICAgICAgIDB4MTcKKyNkZWZpbmUgSVhHQkVfRlRRRl9QUk9UT0NPTF9DT01QX01BU0sgICAweDBGCiAjZGVmaW5lIElYR0JFX0ZUUUZfUE9PTF9NQVNLX0VOICAgICAgICAgMHg0MDAwMDAwMAogI2RlZmluZSBJWEdCRV9GVFFGX1FVRVVFX0VOQUJMRSAgICAgICAgIDB4ODAwMDAwMDAKIApAQCAtMTMzMywxMSArMTM5NCwxMSBAQAogICoKICAqIEN1cnJlbnQgZmlsdGVyczoKICAqICAgIEVBUE9MIDgwMi4xeCAoMHg4ODhlKTogRmlsdGVyIDAKLSAqICAgIEJDTiAoMHg4OTA0KTogICAgICAgICAgRmlsdGVyIDEKKyAqICAgIEZDb0UgKDB4ODkwNik6ICAgICAgICAgRmlsdGVyIDIKICAqICAgIDE1ODggKDB4ODhmNyk6ICAgICAgICAgRmlsdGVyIDMKKyAqICAgIEZJUCAgKDB4ODkxNCk6ICAgICAgICAgRmlsdGVyIDQKICAqLwogI2RlZmluZSBJWEdCRV9FVFFGX0ZJTFRFUl9FQVBPTCAgICAgICAgICAwCi0jZGVmaW5lIElYR0JFX0VUUUZfRklMVEVSX0JDTiAgICAgICAgICAgIDEKICNkZWZpbmUgSVhHQkVfRVRRRl9GSUxURVJfRkNPRSAgICAgICAgICAgMgogI2RlZmluZSBJWEdCRV9FVFFGX0ZJTFRFUl8xNTg4ICAgICAgICAgICAzCiAjZGVmaW5lIElYR0JFX0VUUUZfRklMVEVSX0ZJUCAgICAgICAgICAgIDQKQEAgLTE0NDgsNiArMTUwOSwxMSBAQAogI2RlZmluZSBJWEdCRV9BVVRPQzJfMTBHX1hGSSAoMHgxIDw8IElYR0JFX0FVVE9DMl8xMEdfU0VSSUFMX1BNQV9QTURfU0hJRlQpCiAjZGVmaW5lIElYR0JFX0FVVE9DMl8xMEdfU0ZJICgweDIgPDwgSVhHQkVfQVVUT0MyXzEwR19TRVJJQUxfUE1BX1BNRF9TSElGVCkKIAorI2RlZmluZSBJWEdCRV9NQUNDX0ZMVSAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIElYR0JFX01BQ0NfRlNWXzEwRyAgIDB4MDAwMzAwMDAKKyNkZWZpbmUgSVhHQkVfTUFDQ19GUyAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBJWEdCRV9NQUNfUlgyVFhfTFBCSyAweDAwMDAwMDAyCisKIC8qIExJTktTIEJpdCBNYXNrcyAqLwogI2RlZmluZSBJWEdCRV9MSU5LU19LWF9BTl9DT01QICAweDgwMDAwMDAwCiAjZGVmaW5lIElYR0JFX0xJTktTX1VQICAgICAgICAgIDB4NDAwMDAwMDAKQEAgLTE1MDEsNyArMTU2Nyw2IEBACiAjZGVmaW5lIElYR0JFX0FOTFAxX0FTTV9QQVVTRSAgICAgICAgICAgMHgwODAwCiAjZGVmaW5lIElYR0JFX0FOTFAxX0FOX1NUQVRFX01BU0sgICAgICAgMHgwMDBmMDAwMAogCi0KIC8qIFNXIFNlbWFwaG9yZSBSZWdpc3RlciBiaXRtYXNrcyAqLwogI2RlZmluZSBJWEdCRV9TV1NNX1NNQkkgMHgwMDAwMDAwMSAvKiBEcml2ZXIgU2VtYXBob3JlIGJpdCAqLwogI2RlZmluZSBJWEdCRV9TV1NNX1NXRVNNQkkgMHgwMDAwMDAwMiAvKiBGVyBTZW1hcGhvcmUgYml0ICovCkBAIC0xNTE0LDYgKzE1NzksMTAgQEAKICNkZWZpbmUgSVhHQkVfR1NTUl9QSFkxX1NNICAgIDB4MDAwNAogI2RlZmluZSBJWEdCRV9HU1NSX01BQ19DU1JfU00gMHgwMDA4CiAjZGVmaW5lIElYR0JFX0dTU1JfRkxBU0hfU00gICAweDAwMTAKKyNkZWZpbmUgSVhHQkVfR1NTUl9TV19NTkdfU00gIDB4MDQwMAorCisvKiBGVyBTdGF0dXMgcmVnaXN0ZXIgYml0bWFzayAqLworI2RlZmluZSBJWEdCRV9GV1NUU19GV1JJICAgIDB4MDAwMDAyMDAgLyogRmlybXdhcmUgUmVzZXQgSW5kaWNhdGlvbiAqLwogCiAvKiBFRUMgUmVnaXN0ZXIgKi8KICNkZWZpbmUgSVhHQkVfRUVDX1NLICAgICAgICAweDAwMDAwMDAxIC8qIEVFUFJPTSBDbG9jayAqLwpAQCAtMTUzNCw2ICsxNjAzLDcgQEAKIC8qIEVFUFJPTSBBZGRyZXNzaW5nIGJpdHMgYmFzZWQgb24gdHlwZSAoMC1zbWFsbCwgMS1sYXJnZSkgKi8KICNkZWZpbmUgSVhHQkVfRUVDX0FERFJfU0laRSAweDAwMDAwNDAwCiAjZGVmaW5lIElYR0JFX0VFQ19TSVpFICAgICAgMHgwMDAwNzgwMCAvKiBFRVBST00gU2l6ZSAqLworI2RlZmluZSBJWEdCRV9FRVJEX01BWF9BRERSIDB4MDAwMDNGRkYgLyogRUVSRCBhbG93cyAxNCBiaXRzIGZvciBhZGRyLiAqLwogCiAjZGVmaW5lIElYR0JFX0VFQ19TSVpFX1NISUZUICAgICAgICAgIDExCiAjZGVmaW5lIElYR0JFX0VFUFJPTV9XT1JEX1NJWkVfU0hJRlQgIDYKQEAgLTE1NjMsOCArMTYzMywxMCBAQAogI2RlZmluZSBJWEdCRV9GV19QVFIgICAgICAgICAgICAweDBGCiAjZGVmaW5lIElYR0JFX1BCQU5VTTBfUFRSICAgICAgIDB4MTUKICNkZWZpbmUgSVhHQkVfUEJBTlVNMV9QVFIgICAgICAgMHgxNgotI2RlZmluZSBJWEdCRV9ERVZJQ0VfQ0FQUyAgICAgICAweDJDCisjZGVmaW5lIElYR0JFX0ZSRUVfU1BBQ0VfUFRSICAgIDBYM0UKICNkZWZpbmUgSVhHQkVfU0FOX01BQ19BRERSX1BUUiAgMHgyOAorI2RlZmluZSBJWEdCRV9ERVZJQ0VfQ0FQUyAgICAgICAweDJDCisjZGVmaW5lIElYR0JFX1NFUklBTF9OVU1CRVJfTUFDX0FERFIgMHgxMQogI2RlZmluZSBJWEdCRV9QQ0lFX01TSVhfODI1OTlfQ0FQUyAgMHg3MgogI2RlZmluZSBJWEdCRV9QQ0lFX01TSVhfODI1OThfQ0FQUyAgMHg2MgogCkBAIC0xNjAxLDYgKzE2NzMsMTAgQEAKIAogI2RlZmluZSBJWEdCRV9FVEhfTEVOR1RIX09GX0FERFJFU1MgICA2CiAKKyNkZWZpbmUgSVhHQkVfRUVQUk9NX1BBR0VfU0laRV9NQVggICAgICAgMTI4CisjZGVmaW5lIElYR0JFX0VFUFJPTV9SRF9CVUZGRVJfTUFYX0NPVU5UIDUxMiAvKiBFRVBST00gd29yZHMgIyByZWFkIGluIGJ1cnN0ICovCisjZGVmaW5lIElYR0JFX0VFUFJPTV9XUl9CVUZGRVJfTUFYX0NPVU5UIDI1NiAvKiBFRVBST00gd29yZHMgIyB3ciBpbiBidXJzdCAqLworCiAjaWZuZGVmIElYR0JFX0VFUFJPTV9HUkFOVF9BVFRFTVBUUwogI2RlZmluZSBJWEdCRV9FRVBST01fR1JBTlRfQVRURU1QVFMgMTAwMCAvKiBFRVBST00gIyBhdHRlbXB0cyB0byBnYWluIGdyYW50ICovCiAjZW5kaWYKQEAgLTE2MTYsMTQgKzE2OTIsMjUgQEAKICNkZWZpbmUgSVhHQkVfRkxVRE9ORV9BVFRFTVBUUyAyMDAwMAogI2VuZGlmCiAKKyNkZWZpbmUgSVhHQkVfUENJRV9DVFJMMiAgICAgICAgICAgICAgICAgMHg1ICAgLyogUENJZSBDb250cm9sIDIgT2Zmc2V0ICovCisjZGVmaW5lIElYR0JFX1BDSUVfQ1RSTDJfRFVNTVlfRU5BQkxFICAgIDB4OCAgIC8qIER1bW15IEZ1bmN0aW9uIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9QQ0lFX0NUUkwyX0xBTl9ESVNBQkxFICAgICAweDIgICAvKiBMQU4gUENJIERpc2FibGUgKi8KKyNkZWZpbmUgSVhHQkVfUENJRV9DVFJMMl9ESVNBQkxFX1NFTEVDVCAgMHgxICAgLyogTEFOIERpc2FibGUgU2VsZWN0ICovCisKICNkZWZpbmUgSVhHQkVfU0FOX01BQ19BRERSX1BPUlQwX09GRlNFVCAgMHgwCiAjZGVmaW5lIElYR0JFX1NBTl9NQUNfQUREUl9QT1JUMV9PRkZTRVQgIDB4MwogI2RlZmluZSBJWEdCRV9ERVZJQ0VfQ0FQU19BTExPV19BTllfU0ZQICAweDEKICNkZWZpbmUgSVhHQkVfREVWSUNFX0NBUFNfRkNPRV9PRkZMT0FEUyAgMHgyCisjZGVmaW5lIElYR0JFX0ZXX0xFU01fUEFSQU1FVEVSU19QVFIgICAgIDB4MgorI2RlZmluZSBJWEdCRV9GV19MRVNNX1NUQVRFXzEgICAgICAgICAgICAweDEKKyNkZWZpbmUgSVhHQkVfRldfTEVTTV9TVEFURV9FTkFCTEVEICAgICAgMHg4MDAwIC8qIExFU00gRW5hYmxlIGJpdCAqLwogI2RlZmluZSBJWEdCRV9GV19QQVNTVEhST1VHSF9QQVRDSF9DT05GSUdfUFRSICAgMHg0Ci0jZGVmaW5lIElYR0JFX0ZXX1BBVENIX1ZFUlNJT05fNCAgIDB4NwotCi0vKiBBbHRlcm5hdGl2ZSBTQU4gTUFDIEFkZHJlc3MgQmxvY2sgKi8KKyNkZWZpbmUgSVhHQkVfRldfUEFUQ0hfVkVSU0lPTl80ICAgICAgICAgMHg3CisjZGVmaW5lIElYR0JFX0ZDT0VfSUJBX0NBUFNfQkxLX1BUUiAgICAgICAgIDB4MzMgLyogaVNDU0kvRkNPRSBibG9jayAqLworI2RlZmluZSBJWEdCRV9GQ09FX0lCQV9DQVBTX0ZDT0UgICAgICAgICAgICAweDIwIC8qIEZDT0UgZmxhZ3MgKi8KKyNkZWZpbmUgSVhHQkVfSVNDU0lfRkNPRV9CTEtfUFRSICAgICAgICAgICAgMHgxNyAvKiBpU0NTSS9GQ09FIGJsb2NrICovCisjZGVmaW5lIElYR0JFX0lTQ1NJX0ZDT0VfRkxBR1NfT0ZGU0VUICAgICAgIDB4MCAgLyogRkNPRSBmbGFncyAqLworI2RlZmluZSBJWEdCRV9JU0NTSV9GQ09FX0ZMQUdTX0VOQUJMRSAgICAgICAweDEgIC8qIEZDT0UgZmxhZ3MgZW5hYmxlIGJpdCAqLwogI2RlZmluZSBJWEdCRV9BTFRfU0FOX01BQ19BRERSX0JMS19QVFIgICAgICAweDI3IC8qIEFsdC4gU0FOIE1BQyBibG9jayAqLwogI2RlZmluZSBJWEdCRV9BTFRfU0FOX01BQ19BRERSX0NBUFNfT0ZGU0VUICAweDAgLyogQWx0LiBTQU4gTUFDIGNhcGFiaWxpdHkgKi8KICNkZWZpbmUgSVhHQkVfQUxUX1NBTl9NQUNfQUREUl9QT1JUMF9PRkZTRVQgMHgxIC8qIEFsdC4gU0FOIE1BQyAwIG9mZnNldCAqLwpAQCAtMTY4OCw2ICsxNzc1LDcgQEAKIC8qIFRyYW5zbWl0IENvbmZpZyBtYXNrcyAqLwogI2RlZmluZSBJWEdCRV9UWERDVExfRU5BQkxFICAgICAweDAyMDAwMDAwIC8qIEVuYWJsZSBzcGVjaWZpYyBUeCBRdWV1ZSAqLwogI2RlZmluZSBJWEdCRV9UWERDVExfU1dGTFNIICAgICAweDA0MDAwMDAwIC8qIFR4IERlc2MuIHdyaXRlLWJhY2sgZmx1c2hpbmcgKi8KKyNkZWZpbmUgSVhHQkVfVFhEQ1RMX1dUSFJFU0hfU0hJRlQgICAgICAxNiAvKiBzaGlmdCB0byBXVEhSRVNIIGJpdHMgKi8KIC8qIEVuYWJsZSBzaG9ydCBwYWNrZXQgcGFkZGluZyB0byA2NCBieXRlcyAqLwogI2RlZmluZSBJWEdCRV9UWF9QQURfRU5BQkxFICAgICAweDAwMDAwNDAwCiAjZGVmaW5lIElYR0JFX0pVTUJPX0ZSQU1FX0VOQUJMRSAweDAwMDAwMDA0ICAvKiBBbGxvdyBqdW1ibyBmcmFtZXMgKi8KQEAgLTE3MDEsOSArMTc4OSw5IEBACiAjZGVmaW5lIElYR0JFX1JYQ1RSTF9SWEVOICAgICAgIDB4MDAwMDAwMDEgIC8qIEVuYWJsZSBSZWNlaXZlciAqLwogI2RlZmluZSBJWEdCRV9SWENUUkxfRE1CWVBTICAgICAweDAwMDAwMDAyICAvKiBEZXNjcmlwdG9yIE1vbml0b3IgQnlwYXNzICovCiAjZGVmaW5lIElYR0JFX1JYRENUTF9FTkFCTEUgICAgIDB4MDIwMDAwMDAgIC8qIEVuYWJsZSBzcGVjaWZpYyBSeCBRdWV1ZSAqLwotI2RlZmluZSBJWEdCRV9SWERDVExfVk1FICAgICAgICAweDQwMDAwMDAwICAvKiBWTEFOIG1vZGUgZW5hYmxlICovCiAjZGVmaW5lIElYR0JFX1JYRENUTF9STFBNTE1BU0sgIDB4MDAwMDNGRkYgIC8qIE9ubHkgc3VwcG9ydGVkIG9uIHRoZSBYNTQwICovCiAjZGVmaW5lIElYR0JFX1JYRENUTF9STFBNTF9FTiAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgSVhHQkVfUlhEQ1RMX1ZNRSAgICAgICAgMHg0MDAwMDAwMCAgLyogVkxBTiBtb2RlIGVuYWJsZSAqLwogCiAjZGVmaW5lIElYR0JFX0ZDVFJMX1NCUCAweDAwMDAwMDAyIC8qIFN0b3JlIEJhZCBQYWNrZXQgKi8KICNkZWZpbmUgSVhHQkVfRkNUUkxfTVBFIDB4MDAwMDAxMDAgLyogTXVsdGljYXN0IFByb21pc2N1b3VzIEVuYSovCkBAIC0xNzE5LDYgKzE4MDcsOCBAQAogI2RlZmluZSBJWEdCRV9NRkxDTl9SUEZDRSAgICAgICAweDAwMDAwMDA0IC8qIFJlY2VpdmUgUHJpb3JpdHkgRkMgRW5hYmxlICovCiAjZGVmaW5lIElYR0JFX01GTENOX1JGQ0UgICAgICAgIDB4MDAwMDAwMDggLyogUmVjZWl2ZSBGQyBFbmFibGUgKi8KIAorI2RlZmluZSBJWEdCRV9NRkxDTl9SUEZDRV9TSElGVAkJIDQKKwogLyogTXVsdGlwbGUgUmVjZWl2ZSBRdWV1ZSBDb250cm9sICovCiAjZGVmaW5lIElYR0JFX01SUUNfUlNTRU4gICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgIC8qIFJTUyBFbmFibGUgKi8KICNkZWZpbmUgSVhHQkVfTVJRQ19NUlFFX01BU0sgICAgICAgICAgICAgICAgICAgIDB4RiAvKiBCaXRzIDM6MCAqLwpAQCAtMTg1OSw2ICsxOTQ5LDggQEAKICNkZWZpbmUgSVhHQkVfUlhEQURWX1BLVFRZUEVfTUFTSyAgICAgICAweDAwMDBGRkYwCiAjZGVmaW5lIElYR0JFX1JYREFEVl9QS1RUWVBFX01BU0tfRVggICAgMHgwMDAxRkZGMAogI2RlZmluZSBJWEdCRV9SWERBRFZfSERSQlVGTEVOX01BU0sgICAgIDB4MDAwMDdGRTAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX1JTQ0NOVF9NQVNLICAgICAgICAweDAwMUUwMDAwCisjZGVmaW5lIElYR0JFX1JYREFEVl9SU0NDTlRfU0hJRlQgICAgICAgMTcKICNkZWZpbmUgSVhHQkVfUlhEQURWX0hEUkJVRkxFTl9TSElGVCAgICA1CiAjZGVmaW5lIElYR0JFX1JYREFEVl9TUExJVEhFQURFUl9FTiAgICAgMHgwMDAwMTAwMAogI2RlZmluZSBJWEdCRV9SWERBRFZfU1BIICAgICAgICAgICAgICAgIDB4ODAwMApAQCAtMTkzNCwxNSArMjAyNiw2IEBACiAjZGVmaW5lIElYR0JFX1ZGTFJFKF9pKSAgICAgICAgICAgICAgICAgICgoKF9pICYgMSkgPyAweDAwMUMwIDogMHgwMDYwMCkpCiAjZGVmaW5lIElYR0JFX1ZGTFJFQyhfaSkgICAgICAgICAgICAgICAgICgweDAwNzAwICsgKF9pICogNCkpCiAKLS8qIExpdHRsZSBFbmRpYW4gZGVmaW5lcyAqLwotI2lmbmRlZiBfX2xlMzIKLSNkZWZpbmUgX19sZTMyICB1MzIKLSNlbmRpZgotI2lmbmRlZiBfX2xlNjQKLSNkZWZpbmUgX19sZTY0ICB1NjQKLQotI2VuZGlmCi0KIGVudW0gaXhnYmVfZmRpcl9wYmFsbG9jX3R5cGUgewogCUlYR0JFX0ZESVJfUEJBTExPQ182NEsgPSAwLAogCUlYR0JFX0ZESVJfUEJBTExPQ18xMjhLLApAQCAtMjE0MSw4ICsyMjI0LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMKQogCi0jZGVmaW5lIElYR0JFX1BDSUVfREVWX0NUUkxfMiAweEM4Ci0jZGVmaW5lIFBDSUVfQ09NUExfVE9fVkFMVUUgMHgwNQogCiAvKiBQaHlzaWNhbCBsYXllciB0eXBlICovCiB0eXBlZGVmIHUzMiBpeGdiZV9waHlzaWNhbF9sYXllcjsKQEAgLTIzMTUsNiArMjM5Niw3IEBACiBlbnVtIGl4Z2JlX21lZGlhX3R5cGUgewogCWl4Z2JlX21lZGlhX3R5cGVfdW5rbm93biA9IDAsCiAJaXhnYmVfbWVkaWFfdHlwZV9maWJlciwKKwlpeGdiZV9tZWRpYV90eXBlX2ZpYmVyX2xjbywKIAlpeGdiZV9tZWRpYV90eXBlX2NvcHBlciwKIAlpeGdiZV9tZWRpYV90eXBlX2JhY2twbGFuZSwKIAlpeGdiZV9tZWRpYV90eXBlX2N4NCwKQEAgLTI0NzgsNiArMjU2MCwxMCBAQAogCXU2NCBmY29lcHRjOwogCXU2NCBmY29lZHdyYzsKIAl1NjQgZmNvZWR3dGM7CisJdTY0IGIyb3NwYzsKKwl1NjQgYjJvZ3ByYzsKKwl1NjQgbzJiZ3B0YzsKKwl1NjQgbzJic3BjOwogfTsKIAogLyogZm9yd2FyZCBkZWNsYXJhdGlvbiAqLwpAQCAtMjQ5MSw3ICsyNTc3LDkgQEAKIHN0cnVjdCBpeGdiZV9lZXByb21fb3BlcmF0aW9ucyB7CiAJczMyICgqaW5pdF9wYXJhbXMpKHN0cnVjdCBpeGdiZV9odyAqKTsKIAlzMzIgKCpyZWFkKShzdHJ1Y3QgaXhnYmVfaHcgKiwgdTE2LCB1MTYgKik7CisJczMyICgqcmVhZF9idWZmZXIpKHN0cnVjdCBpeGdiZV9odyAqLCB1MTYsIHUxNiwgdTE2ICopOwogCXMzMiAoKndyaXRlKShzdHJ1Y3QgaXhnYmVfaHcgKiwgdTE2LCB1MTYpOworCXMzMiAoKndyaXRlX2J1ZmZlcikoc3RydWN0IGl4Z2JlX2h3ICosIHUxNiwgdTE2LCB1MTYgKik7CiAJczMyICgqdmFsaWRhdGVfY2hlY2tzdW0pKHN0cnVjdCBpeGdiZV9odyAqLCB1MTYgKik7CiAJczMyICgqdXBkYXRlX2NoZWNrc3VtKShzdHJ1Y3QgaXhnYmVfaHcgKik7CiAJdTE2ICgqY2FsY19jaGVja3N1bSkoc3RydWN0IGl4Z2JlX2h3ICopOwpAQCAtMjU3Nyw2ICsyNjY1LDcgQEAKIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFwaG9yZV9kZWxheTsKIAl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRfc2l6ZTsKIAl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NfYml0czsKKwl1MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRfcGFnZV9zaXplOwogfTsKIAogI2RlZmluZSBJWEdCRV9GTEFHU19ET1VCTEVfUkVTRVRfUkVRVUlSRUQJMHgwMQpAQCAtMjU5Nyw2ICsyNjg2LDcgQEAKIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZmdF9zaXplOwogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3Jhcl9lbnRyaWVzOwogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFyX2hpZ2h3YXRlcjsKKwl1MzIJCQkJcnhfcGJfc2l6ZTsKIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF90eF9xdWV1ZXM7CiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcnhfcXVldWVzOwogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X21zaXhfdmVjdG9yczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3g1NDAuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3g1NDAuYwppbmRleCBkOTMyM2MwLi40ZWQ2ODdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV94NTQwLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfeDU0MC5jCkBAIC0zNyw2ICszNyw3IEBACiAjZGVmaW5lIElYR0JFX1g1NDBfUkFSX0VOVFJJRVMgICAxMjgKICNkZWZpbmUgSVhHQkVfWDU0MF9NQ19UQkxfU0laRSAgIDEyOAogI2RlZmluZSBJWEdCRV9YNTQwX1ZGVF9UQkxfU0laRSAgMTI4CisjZGVmaW5lIElYR0JFX1g1NDBfUlhfUEJfU0laRQkgMzg0CiAKIHN0YXRpYyBzMzIgaXhnYmVfdXBkYXRlX2ZsYXNoX1g1NDAoc3RydWN0IGl4Z2JlX2h3ICpodyk7CiBzdGF0aWMgczMyIGl4Z2JlX3BvbGxfZmxhc2hfdXBkYXRlX2RvbmVfWDU0MChzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKQEAgLTIyNiw2ICsyMjcsMjggQEAKIH0KIAogLyoqCisgKiAgaXhnYmVfc3RhcnRfaHdfWDU0MCAtIFByZXBhcmUgaGFyZHdhcmUgZm9yIFR4L1J4CisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBTdGFydHMgdGhlIGhhcmR3YXJlIHVzaW5nIHRoZSBnZW5lcmljIHN0YXJ0X2h3IGZ1bmN0aW9uCisgKiAgYW5kIHRoZSBnZW5lcmF0aW9uIHN0YXJ0X2h3IGZ1bmN0aW9uLgorICogIFRoZW4gcGVyZm9ybXMgcmV2aXNpb24tc3BlY2lmaWMgb3BlcmF0aW9ucywgaWYgYW55LgorICoqLworc3RhdGljIHMzMiBpeGdiZV9zdGFydF9od19YNTQwKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJczMyIHJldF92YWwgPSAwOworCisJcmV0X3ZhbCA9IGl4Z2JlX3N0YXJ0X2h3X2dlbmVyaWMoaHcpOworCWlmIChyZXRfdmFsICE9IDApCisJCWdvdG8gb3V0OworCisJcmV0X3ZhbCA9IGl4Z2JlX3N0YXJ0X2h3X2dlbjIoaHcpOworCWh3LT5tYWMucnhfcGJfc2l6ZSA9IElYR0JFX1g1NDBfUlhfUEJfU0laRTsKK291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCiAgKiAgaXhnYmVfZ2V0X3N1cHBvcnRlZF9waHlzaWNhbF9sYXllcl9YNTQwIC0gUmV0dXJucyBwaHlzaWNhbCBsYXllciB0eXBlCiAgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQogICoKQEAgLTI4MSw3NCArMzA0LDEwNSBAQAogfQogCiAvKioKLSAqIGl4Z2JlX3JlYWRfZWVyZF9YNTQwIC0gUmVhZCBFRVBST00gd29yZCB1c2luZyBFRVJECi0gKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCi0gKiBAb2Zmc2V0OiBvZmZzZXQgb2Ygd29yZCBpbiB0aGUgRUVQUk9NIHRvIHJlYWQKLSAqIEBkYXRhOiB3b3JkIHJlYWQgZnJvbSB0aGUgRUVSUE9NCisgKiAgaXhnYmVfcmVhZF9lZXJkX1g1NDAtIFJlYWQgRUVQUk9NIHdvcmQgdXNpbmcgRUVSRAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAb2Zmc2V0OiBvZmZzZXQgb2YgIHdvcmQgaW4gdGhlIEVFUFJPTSB0byByZWFkCisgKiAgQGRhdGE6IHdvcmQgcmVhZCBmcm9tIHRoZSBFRVBST00KKyAqCisgKiAgUmVhZHMgYSAxNiBiaXQgd29yZCBmcm9tIHRoZSBFRVBST00gdXNpbmcgdGhlIEVFUkQgcmVnaXN0ZXIuCiAgKiovCiBzdGF0aWMgczMyIGl4Z2JlX3JlYWRfZWVyZF9YNTQwKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiAqZGF0YSkKIHsKLQlzMzIgc3RhdHVzOworCXMzMiBzdGF0dXMgPSAwOwogCi0JaWYgKGh3LT5tYWMub3BzLmFjcXVpcmVfc3dmd19zeW5jKGh3LCBJWEdCRV9HU1NSX0VFUF9TTSkgPT0gMCkKKwlpZiAoaHctPm1hYy5vcHMuYWNxdWlyZV9zd2Z3X3N5bmMoaHcsIElYR0JFX0dTU1JfRUVQX1NNKSA9PQorCSAgICAwKQogCQlzdGF0dXMgPSBpeGdiZV9yZWFkX2VlcmRfZ2VuZXJpYyhodywgb2Zmc2V0LCBkYXRhKTsKIAllbHNlCiAJCXN0YXR1cyA9IElYR0JFX0VSUl9TV0ZXX1NZTkM7CiAKLQlpeGdiZV9yZWxlYXNlX3N3Zndfc3luY19YNTQwKGh3LCBJWEdCRV9HU1NSX0VFUF9TTSk7CisJaHctPm1hYy5vcHMucmVsZWFzZV9zd2Z3X3N5bmMoaHcsIElYR0JFX0dTU1JfRUVQX1NNKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCiAvKioKLSAqIGl4Z2JlX3dyaXRlX2Vld3JfWDU0MCAtIFdyaXRlIEVFUFJPTSB3b3JkIHVzaW5nIEVFV1IKLSAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKLSAqIEBvZmZzZXQ6IG9mZnNldCBvZiAgd29yZCBpbiB0aGUgRUVQUk9NIHRvIHdyaXRlCi0gKiBAZGF0YTogd29yZCB3cml0ZSB0byB0aGUgRUVQUk9NCisgKiAgaXhnYmVfcmVhZF9lZXJkX2J1ZmZlcl9YNTQwIC0gUmVhZCBFRVBST00gd29yZChzKSB1c2luZyBFRVJECisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBvZmZzZXQ6IG9mZnNldCBvZiAgd29yZCBpbiB0aGUgRUVQUk9NIHRvIHJlYWQKKyAqICBAd29yZHM6IG51bWJlciBvZiB3b3JkcworICogIEBkYXRhOiB3b3JkKHMpIHJlYWQgZnJvbSB0aGUgRUVQUk9NCiAgKgotICogV3JpdGUgYSAxNiBiaXQgd29yZCB0byB0aGUgRUVQUk9NIHVzaW5nIHRoZSBFRVdSIHJlZ2lzdGVyLgorICogIFJlYWRzIGEgMTYgYml0IHdvcmQocykgZnJvbSB0aGUgRUVQUk9NIHVzaW5nIHRoZSBFRVJEIHJlZ2lzdGVyLgorICoqLworc3RhdGljIHMzMiBpeGdiZV9yZWFkX2VlcmRfYnVmZmVyX1g1NDAoc3RydWN0IGl4Z2JlX2h3ICpodywKKwkJCQkgICAgICAgdTE2IG9mZnNldCwgdTE2IHdvcmRzLCB1MTYgKmRhdGEpCit7CisJczMyIHN0YXR1cyA9IDA7CisKKwlpZiAoaHctPm1hYy5vcHMuYWNxdWlyZV9zd2Z3X3N5bmMoaHcsIElYR0JFX0dTU1JfRUVQX1NNKSA9PQorCSAgICAwKQorCQlzdGF0dXMgPSBpeGdiZV9yZWFkX2VlcmRfYnVmZmVyX2dlbmVyaWMoaHcsIG9mZnNldCwKKwkJCQkJCQl3b3JkcywgZGF0YSk7CisJZWxzZQorCQlzdGF0dXMgPSBJWEdCRV9FUlJfU1dGV19TWU5DOworCisJaHctPm1hYy5vcHMucmVsZWFzZV9zd2Z3X3N5bmMoaHcsIElYR0JFX0dTU1JfRUVQX1NNKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV93cml0ZV9lZXdyX1g1NDAgLSBXcml0ZSBFRVBST00gd29yZCB1c2luZyBFRVdSCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBvZmZzZXQ6IG9mZnNldCBvZiAgd29yZCBpbiB0aGUgRUVQUk9NIHRvIHdyaXRlCisgKiAgQGRhdGE6IHdvcmQgd3JpdGUgdG8gdGhlIEVFUFJPTQorICoKKyAqICBXcml0ZSBhIDE2IGJpdCB3b3JkIHRvIHRoZSBFRVBST00gdXNpbmcgdGhlIEVFV1IgcmVnaXN0ZXIuCiAgKiovCiBzdGF0aWMgczMyIGl4Z2JlX3dyaXRlX2Vld3JfWDU0MChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgZGF0YSkKIHsKLQl1MzIgZWV3cjsKLQlzMzIgc3RhdHVzOworCXMzMiBzdGF0dXMgPSAwOwogCi0JaHctPmVlcHJvbS5vcHMuaW5pdF9wYXJhbXMoaHcpOwotCi0JaWYgKG9mZnNldCA+PSBody0+ZWVwcm9tLndvcmRfc2l6ZSkgewotCQlzdGF0dXMgPSBJWEdCRV9FUlJfRUVQUk9NOwotCQlnb3RvIG91dDsKLQl9Ci0KLQllZXdyID0gKG9mZnNldCA8PCBJWEdCRV9FRVBST01fUldfQUREUl9TSElGVCkgfAotCSAgICAgICAoZGF0YSA8PCBJWEdCRV9FRVBST01fUldfUkVHX0RBVEEpIHwKLQkgICAgICAgSVhHQkVfRUVQUk9NX1JXX1JFR19TVEFSVDsKLQotCWlmIChody0+bWFjLm9wcy5hY3F1aXJlX3N3Zndfc3luYyhodywgSVhHQkVfR1NTUl9FRVBfU00pID09IDApIHsKLQkJc3RhdHVzID0gaXhnYmVfcG9sbF9lZXJkX2Vld3JfZG9uZShodywgSVhHQkVfTlZNX1BPTExfV1JJVEUpOwotCQlpZiAoc3RhdHVzICE9IDApIHsKLQkJCWh3X2RiZyhodywgIkVlcHJvbSB3cml0ZSBFRVdSIHRpbWVkIG91dFxuIik7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUVXUiwgZWV3cik7Ci0KLQkJc3RhdHVzID0gaXhnYmVfcG9sbF9lZXJkX2Vld3JfZG9uZShodywgSVhHQkVfTlZNX1BPTExfV1JJVEUpOwotCQlpZiAoc3RhdHVzICE9IDApIHsKLQkJCWh3X2RiZyhodywgIkVlcHJvbSB3cml0ZSBFRVdSIHRpbWVkIG91dFxuIik7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0gZWxzZSB7CisJaWYgKGh3LT5tYWMub3BzLmFjcXVpcmVfc3dmd19zeW5jKGh3LCBJWEdCRV9HU1NSX0VFUF9TTSkgPT0gMCkKKwkJc3RhdHVzID0gaXhnYmVfd3JpdGVfZWV3cl9nZW5lcmljKGh3LCBvZmZzZXQsIGRhdGEpOworCWVsc2UKIAkJc3RhdHVzID0gSVhHQkVfRVJSX1NXRldfU1lOQzsKLQl9CiAKLW91dDoKLQlpeGdiZV9yZWxlYXNlX3N3Zndfc3luY19YNTQwKGh3LCBJWEdCRV9HU1NSX0VFUF9TTSk7CisJaHctPm1hYy5vcHMucmVsZWFzZV9zd2Z3X3N5bmMoaHcsIElYR0JFX0dTU1JfRUVQX1NNKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCiAvKioKLSAqIGl4Z2JlX2NhbGNfZWVwcm9tX2NoZWNrc3VtX1g1NDAgLSBDYWxjdWxhdGVzIGFuZCByZXR1cm5zIHRoZSBjaGVja3N1bQotICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIGl4Z2JlX3dyaXRlX2Vld3JfYnVmZmVyX1g1NDAgLSBXcml0ZSBFRVBST00gd29yZChzKSB1c2luZyBFRVdSCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBvZmZzZXQ6IG9mZnNldCBvZiAgd29yZCBpbiB0aGUgRUVQUk9NIHRvIHdyaXRlCisgKiAgQHdvcmRzOiBudW1iZXIgb2Ygd29yZHMKKyAqICBAZGF0YTogd29yZChzKSB3cml0ZSB0byB0aGUgRUVQUk9NCisgKgorICogIFdyaXRlIGEgMTYgYml0IHdvcmQocykgdG8gdGhlIEVFUFJPTSB1c2luZyB0aGUgRUVXUiByZWdpc3Rlci4KKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfd3JpdGVfZWV3cl9idWZmZXJfWDU0MChzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorCQkJCQl1MTYgb2Zmc2V0LCB1MTYgd29yZHMsIHUxNiAqZGF0YSkKK3sKKwlzMzIgc3RhdHVzID0gMDsKKworCWlmIChody0+bWFjLm9wcy5hY3F1aXJlX3N3Zndfc3luYyhodywgSVhHQkVfR1NTUl9FRVBfU00pID09CisJICAgIDApCisJCXN0YXR1cyA9IGl4Z2JlX3dyaXRlX2Vld3JfYnVmZmVyX2dlbmVyaWMoaHcsIG9mZnNldCwKKwkJCQkJCQkgd29yZHMsIGRhdGEpOworCWVsc2UKKwkJc3RhdHVzID0gSVhHQkVfRVJSX1NXRldfU1lOQzsKKworCWh3LT5tYWMub3BzLnJlbGVhc2Vfc3dmd19zeW5jKGh3LCBJWEdCRV9HU1NSX0VFUF9TTSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfY2FsY19lZXByb21fY2hlY2tzdW1fWDU0MCAtIENhbGN1bGF0ZXMgYW5kIHJldHVybnMgdGhlIGNoZWNrc3VtCisgKgorICogIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdXNlIHN5bmNocm9uaXphdGlvbiBmb3IgRUVSRCBhbmQgRUVXUi4gSXQgY2FuCisgKiAgYmUgdXNlZCBpbnRlcm5hbGx5IGJ5IGZ1bmN0aW9uIHdoaWNoIHV0aWxpemUgaXhnYmVfYWNxdWlyZV9zd2Z3X3N5bmNfWDU0MC4KKyAqCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQogICoqLwogc3RhdGljIHUxNiBpeGdiZV9jYWxjX2VlcHJvbV9jaGVja3N1bV9YNTQwKHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7CkBAIC0zNTksOSArNDEzLDE1IEBACiAJdTE2IHBvaW50ZXIgPSAwOwogCXUxNiB3b3JkID0gMDsKIAorCS8qCisJICogRG8gbm90IHVzZSBody0+ZWVwcm9tLm9wcy5yZWFkIGJlY2F1c2Ugd2UgZG8gbm90IHdhbnQgdG8gdGFrZQorCSAqIHRoZSBzeW5jaHJvbml6YXRpb24gc2VtYXBob3JlcyBoZXJlLiBJbnN0ZWFkIHVzZQorCSAqIGl4Z2JlX3JlYWRfZWVyZF9nZW5lcmljCisJICovCisKIAkvKiBJbmNsdWRlIDB4MC0weDNGIGluIHRoZSBjaGVja3N1bSAqLwogCWZvciAoaSA9IDA7IGkgPCBJWEdCRV9FRVBST01fQ0hFQ0tTVU07IGkrKykgewotCQlpZiAoaHctPmVlcHJvbS5vcHMucmVhZChodywgaSwgJndvcmQpICE9IDApIHsKKwkJaWYgKGl4Z2JlX3JlYWRfZWVyZF9nZW5lcmljKGh3LCBpLCAmd29yZCkgIT0gMCkgewogCQkJaHdfZGJnKGh3LCAiRUVQUk9NIHJlYWQgZmFpbGVkXG4iKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0zNzYsNyArNDM2LDcgQEAKIAkJaWYgKGkgPT0gSVhHQkVfUEhZX1BUUiB8fCBpID09IElYR0JFX09QVElPTl9ST01fUFRSKQogCQkJY29udGludWU7CiAKLQkJaWYgKGh3LT5lZXByb20ub3BzLnJlYWQoaHcsIGksICZwb2ludGVyKSAhPSAwKSB7CisJCWlmIChpeGdiZV9yZWFkX2VlcmRfZ2VuZXJpYyhodywgaSwgJnBvaW50ZXIpICE9IDApIHsKIAkJCWh3X2RiZyhodywgIkVFUFJPTSByZWFkIGZhaWxlZFxuIik7CiAJCQlicmVhazsKIAkJfQpAQCAtMzg2LDcgKzQ0Niw3IEBACiAJCSAgICBwb2ludGVyID49IGh3LT5lZXByb20ud29yZF9zaXplKQogCQkJY29udGludWU7CiAKLQkJaWYgKGh3LT5lZXByb20ub3BzLnJlYWQoaHcsIHBvaW50ZXIsICZsZW5ndGgpICE9IDApIHsKKwkJaWYgKGl4Z2JlX3JlYWRfZWVyZF9nZW5lcmljKGh3LCBwb2ludGVyLCAmbGVuZ3RoKSAhPSAwKSB7CiAJCQlod19kYmcoaHcsICJFRVBST00gcmVhZCBmYWlsZWRcbiIpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTM5Nyw3ICs0NTcsNyBAQAogCQkJY29udGludWU7CiAKIAkJZm9yIChqID0gcG9pbnRlcisxOyBqIDw9IHBvaW50ZXIrbGVuZ3RoOyBqKyspIHsKLQkJCWlmIChody0+ZWVwcm9tLm9wcy5yZWFkKGh3LCBqLCAmd29yZCkgIT0gMCkgeworCQkJaWYgKGl4Z2JlX3JlYWRfZWVyZF9nZW5lcmljKGh3LCBqLCAmd29yZCkgIT0gMCkgewogCQkJCWh3X2RiZyhodywgIkVFUFJPTSByZWFkIGZhaWxlZFxuIik7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC00MTEsNiArNDcxLDYyIEBACiB9CiAKIC8qKgorICogIGl4Z2JlX3ZhbGlkYXRlX2VlcHJvbV9jaGVja3N1bV9YNTQwIC0gVmFsaWRhdGUgRUVQUk9NIGNoZWNrc3VtCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBjaGVja3N1bV92YWw6IGNhbGN1bGF0ZWQgY2hlY2tzdW0KKyAqCisgKiAgUGVyZm9ybXMgY2hlY2tzdW0gY2FsY3VsYXRpb24gYW5kIHZhbGlkYXRlcyB0aGUgRUVQUk9NIGNoZWNrc3VtLiAgSWYgdGhlCisgKiAgY2FsbGVyIGRvZXMgbm90IG5lZWQgY2hlY2tzdW1fdmFsLCB0aGUgdmFsdWUgY2FuIGJlIE5VTEwuCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX3ZhbGlkYXRlX2VlcHJvbV9jaGVja3N1bV9YNTQwKHN0cnVjdCBpeGdiZV9odyAqaHcsCisJCQkJCSAgICAgICB1MTYgKmNoZWNrc3VtX3ZhbCkKK3sKKwlzMzIgc3RhdHVzOworCXUxNiBjaGVja3N1bTsKKwl1MTYgcmVhZF9jaGVja3N1bSA9IDA7CisKKwkvKgorCSAqIFJlYWQgdGhlIGZpcnN0IHdvcmQgZnJvbSB0aGUgRUVQUk9NLiBJZiB0aGlzIHRpbWVzIG91dCBvciBmYWlscywgZG8KKwkgKiBub3QgY29udGludWUgb3Igd2UgY291bGQgYmUgaW4gZm9yIGEgdmVyeSBsb25nIHdhaXQgd2hpbGUgZXZlcnkKKwkgKiBFRVBST00gcmVhZCBmYWlscworCSAqLworCXN0YXR1cyA9IGh3LT5lZXByb20ub3BzLnJlYWQoaHcsIDAsICZjaGVja3N1bSk7CisKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJaHdfZGJnKGh3LCAiRUVQUk9NIHJlYWQgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGh3LT5tYWMub3BzLmFjcXVpcmVfc3dmd19zeW5jKGh3LCBJWEdCRV9HU1NSX0VFUF9TTSkgPT0gMCkgeworCQljaGVja3N1bSA9IGh3LT5lZXByb20ub3BzLmNhbGNfY2hlY2tzdW0oaHcpOworCisJCS8qCisJCSAqIERvIG5vdCB1c2UgaHctPmVlcHJvbS5vcHMucmVhZCBiZWNhdXNlIHdlIGRvIG5vdCB3YW50IHRvIHRha2UKKwkJICogdGhlIHN5bmNocm9uaXphdGlvbiBzZW1hcGhvcmVzIHR3aWNlIGhlcmUuCisJCSAqLworCQlpeGdiZV9yZWFkX2VlcmRfZ2VuZXJpYyhodywgSVhHQkVfRUVQUk9NX0NIRUNLU1VNLAorCQkJCQkmcmVhZF9jaGVja3N1bSk7CisKKwkJLyoKKwkJICogVmVyaWZ5IHJlYWQgY2hlY2tzdW0gZnJvbSBFRVBST00gaXMgdGhlIHNhbWUgYXMKKwkJICogY2FsY3VsYXRlZCBjaGVja3N1bQorCQkgKi8KKwkJaWYgKHJlYWRfY2hlY2tzdW0gIT0gY2hlY2tzdW0pCisJCQlzdGF0dXMgPSBJWEdCRV9FUlJfRUVQUk9NX0NIRUNLU1VNOworCisJCS8qIElmIHRoZSB1c2VyIGNhcmVzLCByZXR1cm4gdGhlIGNhbGN1bGF0ZWQgY2hlY2tzdW0gKi8KKwkJaWYgKGNoZWNrc3VtX3ZhbCkKKwkJCSpjaGVja3N1bV92YWwgPSBjaGVja3N1bTsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSBJWEdCRV9FUlJfU1dGV19TWU5DOworCX0KKworCWh3LT5tYWMub3BzLnJlbGVhc2Vfc3dmd19zeW5jKGh3LCBJWEdCRV9HU1NSX0VFUF9TTSk7CitvdXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCiAgKiBpeGdiZV91cGRhdGVfZWVwcm9tX2NoZWNrc3VtX1g1NDAgLSBVcGRhdGVzIHRoZSBFRVBST00gY2hlY2tzdW0gYW5kIGZsYXNoCiAgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKgpAQCAtNDIxLDExICs1MzcsMzUgQEAKIHN0YXRpYyBzMzIgaXhnYmVfdXBkYXRlX2VlcHJvbV9jaGVja3N1bV9YNTQwKHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7CiAJczMyIHN0YXR1czsKKwl1MTYgY2hlY2tzdW07CiAKLQlzdGF0dXMgPSBpeGdiZV91cGRhdGVfZWVwcm9tX2NoZWNrc3VtX2dlbmVyaWMoaHcpOworCS8qCisJICogUmVhZCB0aGUgZmlyc3Qgd29yZCBmcm9tIHRoZSBFRVBST00uIElmIHRoaXMgdGltZXMgb3V0IG9yIGZhaWxzLCBkbworCSAqIG5vdCBjb250aW51ZSBvciB3ZSBjb3VsZCBiZSBpbiBmb3IgYSB2ZXJ5IGxvbmcgd2FpdCB3aGlsZSBldmVyeQorCSAqIEVFUFJPTSByZWFkIGZhaWxzCisJICovCisJc3RhdHVzID0gaHctPmVlcHJvbS5vcHMucmVhZChodywgMCwgJmNoZWNrc3VtKTsKIAotCWlmIChzdGF0dXMpCisJaWYgKHN0YXR1cyAhPSAwKQorCQlod19kYmcoaHcsICJFRVBST00gcmVhZCBmYWlsZWRcbiIpOworCisJaWYgKGh3LT5tYWMub3BzLmFjcXVpcmVfc3dmd19zeW5jKGh3LCBJWEdCRV9HU1NSX0VFUF9TTSkgPT0gMCkgeworCQljaGVja3N1bSA9IGh3LT5lZXByb20ub3BzLmNhbGNfY2hlY2tzdW0oaHcpOworCisJCS8qCisJCSAqIERvIG5vdCB1c2UgaHctPmVlcHJvbS5vcHMud3JpdGUgYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0bworCQkgKiB0YWtlIHRoZSBzeW5jaHJvbml6YXRpb24gc2VtYXBob3JlcyB0d2ljZSBoZXJlLgorCQkgKi8KKwkJc3RhdHVzID0gaXhnYmVfd3JpdGVfZWV3cl9nZW5lcmljKGh3LCBJWEdCRV9FRVBST01fQ0hFQ0tTVU0sCisJCQkJCQkgIGNoZWNrc3VtKTsKKworCWlmIChzdGF0dXMgPT0gMCkKIAkJc3RhdHVzID0gaXhnYmVfdXBkYXRlX2ZsYXNoX1g1NDAoaHcpOworCWVsc2UKKwkJc3RhdHVzID0gSVhHQkVfRVJSX1NXRldfU1lOQzsKKwl9CisKKwlody0+bWFjLm9wcy5yZWxlYXNlX3N3Zndfc3luYyhodywgSVhHQkVfR1NTUl9FRVBfU00pOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTQ1Miw3ICs1OTIsNyBAQAogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUVDLCBmbHVwKTsKIAogCXN0YXR1cyA9IGl4Z2JlX3BvbGxfZmxhc2hfdXBkYXRlX2RvbmVfWDU0MChodyk7Ci0JaWYgKHN0YXR1cykKKwlpZiAoc3RhdHVzID09IDApCiAJCWh3X2RiZyhodywgIkZsYXNoIHVwZGF0ZSBjb21wbGV0ZVxuIik7CiAJZWxzZQogCQlod19kYmcoaHcsICJGbGFzaCB1cGRhdGUgdGltZSBvdXRcbiIpOwpAQCAtNDY2LDExICs2MDYsMTAgQEAKIAkJfQogCiAJCXN0YXR1cyA9IGl4Z2JlX3BvbGxfZmxhc2hfdXBkYXRlX2RvbmVfWDU0MChodyk7Ci0JCWlmIChzdGF0dXMpCisJCWlmIChzdGF0dXMgPT0gMCkKIAkJCWh3X2RiZyhodywgIkZsYXNoIHVwZGF0ZSBjb21wbGV0ZVxuIik7CiAJCWVsc2UKIAkJCWh3X2RiZyhodywgIkZsYXNoIHVwZGF0ZSB0aW1lIG91dFxuIik7Ci0KIAl9CiBvdXQ6CiAJcmV0dXJuIHN0YXR1czsKQEAgLTU0Miw3ICs2ODEsNyBAQAogCQkJICogcmVzb3VyY2UgKHN3bWFzaykKIAkJCSAqLwogCQkJaXhnYmVfcmVsZWFzZV9zd2Z3X3N5bmNfc2VtYXBob3JlKGh3KTsKLQkJCW1zbGVlcCg1KTsKKwkJCXVzbGVlcF9yYW5nZSg1MDAwLCAxMDAwMCk7CiAJCX0KIAl9CiAKQEAgLTU2NCw3ICs3MDMsNyBAQAogCQl9CiAJfQogCi0JbXNsZWVwKDUpOworCXVzbGVlcF9yYW5nZSg1MDAwLCAxMDAwMCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU4OCw3ICs3MjcsNyBAQAogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfU1dGV19TWU5DLCBzd2Z3X3N5bmMpOwogCiAJaXhnYmVfcmVsZWFzZV9zd2Z3X3N5bmNfc2VtYXBob3JlKGh3KTsKLQltc2xlZXAoNSk7CisJdXNsZWVwX3JhbmdlKDUwMDAsIDEwMDAwKTsKIH0KIAogLyoqCkBAIC02NTgsMTAgKzc5Nyw3MCBAQAogCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKIH0KIAorLyoqCisgKiBpeGdiZV9ibGlua19sZWRfc3RhcnRfWDU0MCAtIEJsaW5rIExFRCBiYXNlZCBvbiBpbmRleC4KKyAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqIEBpbmRleDogbGVkIG51bWJlciB0byBibGluaworICoKKyAqIERldmljZXMgdGhhdCBpbXBsZW1lbnQgdGhlIHZlcnNpb24gMiBpbnRlcmZhY2U6CisgKiAgIFg1NDAKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfYmxpbmtfbGVkX3N0YXJ0X1g1NDAoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIGluZGV4KQoreworCXUzMiBtYWNjX3JlZzsKKwl1MzIgbGVkY3RsX3JlZzsKKworCS8qCisJICogSW4gb3JkZXIgZm9yIHRoZSBibGluayBiaXQgaW4gdGhlIExFRCBjb250cm9sIHJlZ2lzdGVyCisJICogdG8gd29yaywgbGluayBhbmQgc3BlZWQgbXVzdCBiZSBmb3JjZWQgaW4gdGhlIE1BQy4gV2UKKwkgKiB3aWxsIHJldmVyc2UgdGhpcyB3aGVuIHdlIHN0b3AgdGhlIGJsaW5raW5nLgorCSAqLworCW1hY2NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX01BQ0MpOworCW1hY2NfcmVnIHw9IElYR0JFX01BQ0NfRkxVIHwgSVhHQkVfTUFDQ19GU1ZfMTBHIHwgSVhHQkVfTUFDQ19GUzsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01BQ0MsIG1hY2NfcmVnKTsKKworCS8qIFNldCB0aGUgTEVEIHRvIExJTktfVVAgKyBCTElOSy4gKi8KKwlsZWRjdGxfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xFRENUTCk7CisJbGVkY3RsX3JlZyAmPSB+SVhHQkVfTEVEX01PREVfTUFTSyhpbmRleCk7CisJbGVkY3RsX3JlZyB8PSBJWEdCRV9MRURfQkxJTksoaW5kZXgpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTEVEQ1RMLCBsZWRjdGxfcmVnKTsKKwlJWEdCRV9XUklURV9GTFVTSChodyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpeGdiZV9ibGlua19sZWRfc3RvcF9YNTQwIC0gU3RvcCBibGlua2luZyBMRUQgYmFzZWQgb24gaW5kZXguCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiBAaW5kZXg6IGxlZCBudW1iZXIgdG8gc3RvcCBibGlua2luZworICoKKyAqIERldmljZXMgdGhhdCBpbXBsZW1lbnQgdGhlIHZlcnNpb24gMiBpbnRlcmZhY2U6CisgKiAgIFg1NDAKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfYmxpbmtfbGVkX3N0b3BfWDU0MChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgaW5kZXgpCit7CisJdTMyIG1hY2NfcmVnOworCXUzMiBsZWRjdGxfcmVnOworCisJLyogUmVzdG9yZSB0aGUgTEVEIHRvIGl0cyBkZWZhdWx0IHZhbHVlLiAqLworCWxlZGN0bF9yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTEVEQ1RMKTsKKwlsZWRjdGxfcmVnICY9IH5JWEdCRV9MRURfTU9ERV9NQVNLKGluZGV4KTsKKwlsZWRjdGxfcmVnIHw9IElYR0JFX0xFRF9MSU5LX0FDVElWRSA8PCBJWEdCRV9MRURfTU9ERV9TSElGVChpbmRleCk7CisJbGVkY3RsX3JlZyAmPSB+SVhHQkVfTEVEX0JMSU5LKGluZGV4KTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0xFRENUTCwgbGVkY3RsX3JlZyk7CisKKwkvKiBVbmZvcmNlIGxpbmsgYW5kIHNwZWVkIGluIHRoZSBNQUMuICovCisJbWFjY19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTUFDQyk7CisJbWFjY19yZWcgJj0gfihJWEdCRV9NQUNDX0ZMVSB8IElYR0JFX01BQ0NfRlNWXzEwRyB8IElYR0JFX01BQ0NfRlMpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTUFDQywgbWFjY19yZWcpOworCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKKworCXJldHVybiAwOworfQogc3RhdGljIHN0cnVjdCBpeGdiZV9tYWNfb3BlcmF0aW9ucyBtYWNfb3BzX1g1NDAgPSB7CiAJLmluaXRfaHcgICAgICAgICAgICAgICAgPSAmaXhnYmVfaW5pdF9od19nZW5lcmljLAogCS5yZXNldF9odyAgICAgICAgICAgICAgID0gJml4Z2JlX3Jlc2V0X2h3X1g1NDAsCi0JLnN0YXJ0X2h3ICAgICAgICAgICAgICAgPSAmaXhnYmVfc3RhcnRfaHdfZ2VuZXJpYywKKwkuc3RhcnRfaHcgICAgICAgICAgICAgICA9ICZpeGdiZV9zdGFydF9od19YNTQwLAogCS5jbGVhcl9od19jbnRycyAgICAgICAgID0gJml4Z2JlX2NsZWFyX2h3X2NudHJzX2dlbmVyaWMsCiAJLmdldF9tZWRpYV90eXBlICAgICAgICAgPSAmaXhnYmVfZ2V0X21lZGlhX3R5cGVfWDU0MCwKIAkuZ2V0X3N1cHBvcnRlZF9waHlzaWNhbF9sYXllciA9CkBAIC02NjksNyArODY4LDcgQEAKIAkuZW5hYmxlX3J4X2RtYSAgICAgICAgICA9ICZpeGdiZV9lbmFibGVfcnhfZG1hX2dlbmVyaWMsCiAJLmdldF9tYWNfYWRkciAgICAgICAgICAgPSAmaXhnYmVfZ2V0X21hY19hZGRyX2dlbmVyaWMsCiAJLmdldF9zYW5fbWFjX2FkZHIgICAgICAgPSAmaXhnYmVfZ2V0X3Nhbl9tYWNfYWRkcl9nZW5lcmljLAotCS5nZXRfZGV2aWNlX2NhcHMgICAgICAgID0gTlVMTCwKKwkuZ2V0X2RldmljZV9jYXBzICAgICAgICA9ICZpeGdiZV9nZXRfZGV2aWNlX2NhcHNfZ2VuZXJpYywKIAkuZ2V0X3d3bl9wcmVmaXggICAgICAgICA9ICZpeGdiZV9nZXRfd3duX3ByZWZpeF9nZW5lcmljLAogCS5zdG9wX2FkYXB0ZXIgICAgICAgICAgID0gJml4Z2JlX3N0b3BfYWRhcHRlcl9nZW5lcmljLAogCS5nZXRfYnVzX2luZm8gICAgICAgICAgID0gJml4Z2JlX2dldF9idXNfaW5mb19nZW5lcmljLApAQCAtNjgxLDggKzg4MCw4IEBACiAJLmdldF9saW5rX2NhcGFiaWxpdGllcyAgPSAmaXhnYmVfZ2V0X2NvcHBlcl9saW5rX2NhcGFiaWxpdGllc19nZW5lcmljLAogCS5sZWRfb24gICAgICAgICAgICAgICAgID0gJml4Z2JlX2xlZF9vbl9nZW5lcmljLAogCS5sZWRfb2ZmICAgICAgICAgICAgICAgID0gJml4Z2JlX2xlZF9vZmZfZ2VuZXJpYywKLQkuYmxpbmtfbGVkX3N0YXJ0ICAgICAgICA9ICZpeGdiZV9ibGlua19sZWRfc3RhcnRfZ2VuZXJpYywKLQkuYmxpbmtfbGVkX3N0b3AgICAgICAgICA9ICZpeGdiZV9ibGlua19sZWRfc3RvcF9nZW5lcmljLAorCS5ibGlua19sZWRfc3RhcnQgICAgICAgID0gJml4Z2JlX2JsaW5rX2xlZF9zdGFydF9YNTQwLAorCS5ibGlua19sZWRfc3RvcCAgICAgICAgID0gJml4Z2JlX2JsaW5rX2xlZF9zdG9wX1g1NDAsCiAJLnNldF9yYXIgICAgICAgICAgICAgICAgPSAmaXhnYmVfc2V0X3Jhcl9nZW5lcmljLAogCS5jbGVhcl9yYXIgICAgICAgICAgICAgID0gJml4Z2JlX2NsZWFyX3Jhcl9nZW5lcmljLAogCS5zZXRfdm1kcSAgICAgICAgICAgICAgID0gJml4Z2JlX3NldF92bWRxX2dlbmVyaWMsCkBAIC03MDUsOSArOTA0LDExIEBACiBzdGF0aWMgc3RydWN0IGl4Z2JlX2VlcHJvbV9vcGVyYXRpb25zIGVlcHJvbV9vcHNfWDU0MCA9IHsKIAkuaW5pdF9wYXJhbXMgICAgICAgICAgICA9ICZpeGdiZV9pbml0X2VlcHJvbV9wYXJhbXNfWDU0MCwKIAkucmVhZCAgICAgICAgICAgICAgICAgICA9ICZpeGdiZV9yZWFkX2VlcmRfWDU0MCwKKwkucmVhZF9idWZmZXIJCT0gJml4Z2JlX3JlYWRfZWVyZF9idWZmZXJfWDU0MCwKIAkud3JpdGUgICAgICAgICAgICAgICAgICA9ICZpeGdiZV93cml0ZV9lZXdyX1g1NDAsCisJLndyaXRlX2J1ZmZlcgkJPSAmaXhnYmVfd3JpdGVfZWV3cl9idWZmZXJfWDU0MCwKIAkuY2FsY19jaGVja3N1bQkJPSAmaXhnYmVfY2FsY19lZXByb21fY2hlY2tzdW1fWDU0MCwKLQkudmFsaWRhdGVfY2hlY2tzdW0gICAgICA9ICZpeGdiZV92YWxpZGF0ZV9lZXByb21fY2hlY2tzdW1fZ2VuZXJpYywKKwkudmFsaWRhdGVfY2hlY2tzdW0gICAgICA9ICZpeGdiZV92YWxpZGF0ZV9lZXByb21fY2hlY2tzdW1fWDU0MCwKIAkudXBkYXRlX2NoZWNrc3VtICAgICAgICA9ICZpeGdiZV91cGRhdGVfZWVwcm9tX2NoZWNrc3VtX1g1NDAsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZXZmL2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvZXRodG9vbC5jCmluZGV4IDA1NjNhYjIuLmRlZWUzNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JldmYvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvZXRodG9vbC5jCkBAIC0xMDQsMTEgKzEwNCwxMyBAQAogCWh3LT5tYWMub3BzLmNoZWNrX2xpbmsoaHcsICZsaW5rX3NwZWVkLCAmbGlua191cCwgZmFsc2UpOwogCiAJaWYgKGxpbmtfdXApIHsKLQkJZWNtZC0+c3BlZWQgPSAobGlua19zcGVlZCA9PSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTCkgPwotCQkJICAgICAgIFNQRUVEXzEwMDAwIDogU1BFRURfMTAwMDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KAorCQkJZWNtZCwKKwkJCShsaW5rX3NwZWVkID09IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMKSA/CisJCQlTUEVFRF8xMDAwMCA6IFNQRUVEXzEwMDApOwogCQllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKIAl9IGVsc2UgewotCQllY21kLT5zcGVlZCA9IC0xOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgLTEpOwogCQllY21kLT5kdXBsZXggPSAtMTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMgYi9kcml2ZXJzL25ldC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jCmluZGV4IDA1ZmE3YzguLjI4ZDNjYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi9peGdiZXZmX21haW4uYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPG5ldC9pcDZfY2hlY2tzdW0uaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKICNpbmNsdWRlICJpeGdiZXZmLmgiCiAKQEAgLTE0NjAsNiArMTQ2MSwzNCBAQAogCX0KIH0KIAorc3RhdGljIGludCBpeGdiZXZmX3dyaXRlX3VjX2FkZHJfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJaW50IGNvdW50ID0gMDsKKworCWlmICgobmV0ZGV2X3VjX2NvdW50KG5ldGRldikpID4gMTApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJUb28gbWFueSB1bmljYXN0IGZpbHRlcnMgLSBObyBTcGFjZVxuIik7CisJCXJldHVybiAtRU5PU1BDOworCX0KKworCWlmICghbmV0ZGV2X3VjX2VtcHR5KG5ldGRldikpIHsKKwkJc3RydWN0IG5ldGRldl9od19hZGRyICpoYTsKKwkJbmV0ZGV2X2Zvcl9lYWNoX3VjX2FkZHIoaGEsIG5ldGRldikgeworCQkJaHctPm1hYy5vcHMuc2V0X3VjX2FkZHIoaHcsICsrY291bnQsIGhhLT5hZGRyKTsKKwkJCXVkZWxheSgyMDApOworCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICogSWYgdGhlIGxpc3QgaXMgZW1wdHkgdGhlbiBzZW5kIG1lc3NhZ2UgdG8gUEYgZHJpdmVyIHRvCisJCSAqIGNsZWFyIGFsbCBtYWN2bGFucyBvbiB0aGlzIFZGLgorCQkgKi8KKwkJaHctPm1hYy5vcHMuc2V0X3VjX2FkZHIoaHcsIDAsIE5VTEwpOworCX0KKworCXJldHVybiBjb3VudDsKK30KKwogLyoqCiAgKiBpeGdiZXZmX3NldF9yeF9tb2RlIC0gTXVsdGljYXN0IHNldAogICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQpAQCAtMTQ3Niw2ICsxNTA1LDggQEAKIAkvKiByZXByb2dyYW0gbXVsdGljYXN0IGxpc3QgKi8KIAlpZiAoaHctPm1hYy5vcHMudXBkYXRlX21jX2FkZHJfbGlzdCkKIAkJaHctPm1hYy5vcHMudXBkYXRlX21jX2FkZHJfbGlzdChodywgbmV0ZGV2KTsKKworCWl4Z2JldmZfd3JpdGVfdWNfYWRkcl9saXN0KG5ldGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIGl4Z2JldmZfbmFwaV9lbmFibGVfYWxsKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZXZmL21ieC5oIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi9tYnguaAppbmRleCBiMmI1YmY1Li5lYTM5M2ViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZXZmL21ieC5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvbWJ4LmgKQEAgLTgxLDYgKzgxLDcgQEAKICNkZWZpbmUgSVhHQkVfVkZfU0VUX01VTFRJQ0FTVCAgICAweDAzIC8qIFZGIHJlcXVlc3RzIFBGIHRvIHNldCBNQyBhZGRyICovCiAjZGVmaW5lIElYR0JFX1ZGX1NFVF9WTEFOICAgICAgICAgMHgwNCAvKiBWRiByZXF1ZXN0cyBQRiB0byBzZXQgVkxBTiAqLwogI2RlZmluZSBJWEdCRV9WRl9TRVRfTFBFICAgICAgICAgIDB4MDUgLyogVkYgcmVxdWVzdHMgUEYgdG8gc2V0IFZNT0xSLkxQRSAqLworI2RlZmluZSBJWEdCRV9WRl9TRVRfTUFDVkxBTiAgICAgIDB4MDYgLyogVkYgcmVxdWVzdHMgUEYgZm9yIHVuaWNhc3QgZmlsdGVyICovCiAKIC8qIGxlbmd0aCBvZiBwZXJtYW5lbnQgYWRkcmVzcyBtZXNzYWdlIHJldHVybmVkIGZyb20gUEYgKi8KICNkZWZpbmUgSVhHQkVfVkZfUEVSTUFERFJfTVNHX0xFTiA0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZXZmL3ZmLmMgYi9kcml2ZXJzL25ldC9peGdiZXZmL3ZmLmMKaW5kZXggZWVjZDNiZi4uYWEzNjgyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmV2Zi92Zi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvdmYuYwpAQCAtMjE2LDYgKzIxNiwzOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgczMyIGl4Z2JldmZfc2V0X3VjX2FkZHJfdmYoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIGluZGV4LCB1OCAqYWRkcikKK3sKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCXUzMiBtc2didWZbM107CisJdTggKm1zZ19hZGRyID0gKHU4ICopKCZtc2didWZbMV0pOworCXMzMiByZXRfdmFsOworCisJbWVtc2V0KG1zZ2J1ZiwgMCwgc2l6ZW9mKG1zZ2J1ZikpOworCS8qCisJICogSWYgaW5kZXggaXMgb25lIHRoZW4gdGhpcyBpcyB0aGUgc3RhcnQgb2YgYSBuZXcgbGlzdCBhbmQgbmVlZHMKKwkgKiBpbmRpY2F0aW9uIHRvIHRoZSBQRiBzbyBpdCBjYW4gZG8gaXQncyBvd24gbGlzdCBtYW5hZ2VtZW50LgorCSAqIElmIGl0IGlzIHplcm8gdGhlbiB0aGF0IHRlbGxzIHRoZSBQRiB0byBqdXN0IGNsZWFyIGFsbCBvZgorCSAqIHRoaXMgVkYncyBtYWN2bGFucyBhbmQgdGhlcmUgaXMgbm8gbmV3IGxpc3QuCisJICovCisJbXNnYnVmWzBdIHw9IGluZGV4IDw8IElYR0JFX1ZUX01TR0lORk9fU0hJRlQ7CisJbXNnYnVmWzBdIHw9IElYR0JFX1ZGX1NFVF9NQUNWTEFOOworCWlmIChhZGRyKQorCQltZW1jcHkobXNnX2FkZHIsIGFkZHIsIDYpOworCXJldF92YWwgPSBtYngtPm9wcy53cml0ZV9wb3N0ZWQoaHcsIG1zZ2J1ZiwgMyk7CisKKwlpZiAoIXJldF92YWwpCisJCXJldF92YWwgPSBtYngtPm9wcy5yZWFkX3Bvc3RlZChodywgbXNnYnVmLCAzKTsKKworCW1zZ2J1ZlswXSAmPSB+SVhHQkVfVlRfTVNHVFlQRV9DVFM7CisKKwlpZiAoIXJldF92YWwpCisJCWlmIChtc2didWZbMF0gPT0KKwkJICAgIChJWEdCRV9WRl9TRVRfTUFDVkxBTiB8IElYR0JFX1ZUX01TR1RZUEVfTkFDSykpCisJCQlyZXRfdmFsID0gLUVOT01FTTsKKworCXJldHVybiByZXRfdmFsOworfQorCiAvKioKICAqICBpeGdiZXZmX3NldF9yYXJfdmYgLSBzZXQgZGV2aWNlIE1BQyBhZGRyZXNzCiAgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQpAQCAtMzc4LDYgKzQxMSw3IEBACiAJLmNoZWNrX2xpbmsgICAgICAgICAgPSBpeGdiZXZmX2NoZWNrX21hY19saW5rX3ZmLAogCS5zZXRfcmFyICAgICAgICAgICAgID0gaXhnYmV2Zl9zZXRfcmFyX3ZmLAogCS51cGRhdGVfbWNfYWRkcl9saXN0ID0gaXhnYmV2Zl91cGRhdGVfbWNfYWRkcl9saXN0X3ZmLAorCS5zZXRfdWNfYWRkciAgICAgICAgID0gaXhnYmV2Zl9zZXRfdWNfYWRkcl92ZiwKIAkuc2V0X3ZmdGEgICAgICAgICAgICA9IGl4Z2JldmZfc2V0X3ZmdGFfdmYsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZXZmL3ZmLmggYi9kcml2ZXJzL25ldC9peGdiZXZmL3ZmLmgKaW5kZXggMjNlYjExNC4uMTAzMDZiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmV2Zi92Zi5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvdmYuaApAQCAtNjIsNiArNjIsNyBAQAogCiAJLyogUkFSLCBNdWx0aWNhc3QsIFZMQU4gKi8KIAlzMzIgKCpzZXRfcmFyKShzdHJ1Y3QgaXhnYmVfaHcgKiwgdTMyLCB1OCAqLCB1MzIpOworCXMzMiAoKnNldF91Y19hZGRyKShzdHJ1Y3QgaXhnYmVfaHcgKiwgdTMyLCB1OCAqKTsKIAlzMzIgKCppbml0X3J4X2FkZHJzKShzdHJ1Y3QgaXhnYmVfaHcgKik7CiAJczMyICgqdXBkYXRlX21jX2FkZHJfbGlzdCkoc3RydWN0IGl4Z2JlX2h3ICosIHN0cnVjdCBuZXRfZGV2aWNlICopOwogCXMzMiAoKmVuYWJsZV9tYykoc3RydWN0IGl4Z2JlX2h3ICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvam1lLmMgYi9kcml2ZXJzL25ldC9qbWUuYwppbmRleCA5OTRjODA5Li5iNWIxNzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9qbWUuYworKysgYi9kcml2ZXJzL25ldC9qbWUuYwpAQCAtMjIzMCwxNyArMjIzMCw5IEBACiAJCWptZV9yZXN0YXJ0X3J4X2VuZ2luZShqbWUpOwogCX0KIAotCWlmIChuZXdfbXR1ID4gMTkwMCkgewotCQluZXRkZXYtPmZlYXR1cmVzICY9IH4oTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU0gfAotCQkJCU5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082KTsKLQl9IGVsc2UgewotCQlpZiAodGVzdF9iaXQoSk1FX0ZMQUdfVFhDU1VNLCAmam1lLT5mbGFncykpCi0JCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNOwotCQlpZiAodGVzdF9iaXQoSk1FX0ZMQUdfVFNPLCAmam1lLT5mbGFncykpCi0JCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082OwotCX0KLQogCW5ldGRldi0+bXR1ID0gbmV3X210dTsKKwluZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKG5ldGRldik7CisKIAlqbWVfcmVzZXRfbGluayhqbWUpOwogCiAJcmV0dXJuIDA7CkBAIC0yNTYzLDcgKzI1NTUsOCBAQAogCXN0cnVjdCBqbWVfYWRhcHRlciAqam1lID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlpbnQgcmMsIGZkYyA9IDA7CiAKLQlpZiAoZWNtZC0+c3BlZWQgPT0gU1BFRURfMTAwMCAmJiBlY21kLT5hdXRvbmVnICE9IEFVVE9ORUdfRU5BQkxFKQorCWlmIChldGh0b29sX2NtZF9zcGVlZChlY21kKSA9PSBTUEVFRF8xMDAwCisJICAgICYmIGVjbWQtPmF1dG9uZWcgIT0gQVVUT05FR19FTkFCTEUpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyoKQEAgLTI2NDAsMTkgKzI2MzMsMjAgQEAKIH0KIAogc3RhdGljIHUzMgotam1lX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitqbWVfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBmZWF0dXJlcykKIHsKLQlzdHJ1Y3Qgam1lX2FkYXB0ZXIgKmptZSA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JcmV0dXJuIGptZS0+cmVnX3J4bWNzICYgUlhNQ1NfQ0hFQ0tTVU07CisJaWYgKG5ldGRldi0+bXR1ID4gMTkwMCkKKwkJZmVhdHVyZXMgJj0gfihORVRJRl9GX0FMTF9UU08gfCBORVRJRl9GX0FMTF9DU1VNKTsKKwlyZXR1cm4gZmVhdHVyZXM7CiB9CiAKIHN0YXRpYyBpbnQKLWptZV9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgb24pCitqbWVfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBmZWF0dXJlcykKIHsKIAlzdHJ1Y3Qgam1lX2FkYXB0ZXIgKmptZSA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKIAlzcGluX2xvY2tfYmgoJmptZS0+cnhtY3NfbG9jayk7Ci0JaWYgKG9uKQorCWlmIChmZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKQogCQlqbWUtPnJlZ19yeG1jcyB8PSBSWE1DU19DSEVDS1NVTTsKIAllbHNlCiAJCWptZS0+cmVnX3J4bWNzICY9IH5SWE1DU19DSEVDS1NVTTsKQEAgLTI2NjMsNDIgKzI2NTcsNiBAQAogfQogCiBzdGF0aWMgaW50Ci1qbWVfc2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIG9uKQotewotCXN0cnVjdCBqbWVfYWRhcHRlciAqam1lID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCWlmIChvbikgewotCQlzZXRfYml0KEpNRV9GTEFHX1RYQ1NVTSwgJmptZS0+ZmxhZ3MpOwotCQlpZiAobmV0ZGV2LT5tdHUgPD0gMTkwMCkKLQkJCW5ldGRldi0+ZmVhdHVyZXMgfD0KLQkJCQlORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTTsKLQl9IGVsc2UgewotCQljbGVhcl9iaXQoSk1FX0ZMQUdfVFhDU1VNLCAmam1lLT5mbGFncyk7Ci0JCW5ldGRldi0+ZmVhdHVyZXMgJj0KLQkJCQl+KE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotam1lX3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIG9uKQotewotCXN0cnVjdCBqbWVfYWRhcHRlciAqam1lID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCWlmIChvbikgewotCQlzZXRfYml0KEpNRV9GTEFHX1RTTywgJmptZS0+ZmxhZ3MpOwotCQlpZiAobmV0ZGV2LT5tdHUgPD0gMTkwMCkKLQkJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzY7Ci0JfSBlbHNlIHsKLQkJY2xlYXJfYml0KEpNRV9GTEFHX1RTTywgJmptZS0+ZmxhZ3MpOwotCQluZXRkZXYtPmZlYXR1cmVzICY9IH4oTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50CiBqbWVfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBqbWVfYWRhcHRlciAqam1lID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTI4MzksMTEgKzI3OTcsNiBAQAogCS5nZXRfbGluawkJPSBqbWVfZ2V0X2xpbmssCiAJLmdldF9tc2dsZXZlbCAgICAgICAgICAgPSBqbWVfZ2V0X21zZ2xldmVsLAogCS5zZXRfbXNnbGV2ZWwgICAgICAgICAgID0gam1lX3NldF9tc2dsZXZlbCwKLQkuZ2V0X3J4X2NzdW0JCT0gam1lX2dldF9yeF9jc3VtLAotCS5zZXRfcnhfY3N1bQkJPSBqbWVfc2V0X3J4X2NzdW0sCi0JLnNldF90eF9jc3VtCQk9IGptZV9zZXRfdHhfY3N1bSwKLQkuc2V0X3RzbwkJPSBqbWVfc2V0X3RzbywKLQkuc2V0X3NnCQkJPSBldGh0b29sX29wX3NldF9zZywKIAkubndheV9yZXNldCAgICAgICAgICAgICA9IGptZV9ud2F5X3Jlc2V0LAogCS5nZXRfZWVwcm9tX2xlbgkJPSBqbWVfZ2V0X2VlcHJvbV9sZW4sCiAJLmdldF9lZXByb20JCT0gam1lX2dldF9lZXByb20sCkBAIC0yOTAzLDYgKzI4NTYsOCBAQAogCS5uZG9fY2hhbmdlX210dQkJPSBqbWVfY2hhbmdlX210dSwKIAkubmRvX3R4X3RpbWVvdXQJCT0gam1lX3R4X3RpbWVvdXQsCiAJLm5kb192bGFuX3J4X3JlZ2lzdGVyCT0gam1lX3ZsYW5fcnhfcmVnaXN0ZXIsCisJLm5kb19maXhfZmVhdHVyZXMgICAgICAgPSBqbWVfZml4X2ZlYXR1cmVzLAorCS5uZG9fc2V0X2ZlYXR1cmVzICAgICAgID0gam1lX3NldF9mZWF0dXJlcywKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0CkBAIC0yOTU3LDYgKzI5MTIsMTIgQEAKIAluZXRkZXYtPm5ldGRldl9vcHMgPSAmam1lX25ldGRldl9vcHM7CiAJbmV0ZGV2LT5ldGh0b29sX29wcwkJPSAmam1lX2V0aHRvb2xfb3BzOwogCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8JCT0gVFhfVElNRU9VVDsKKwluZXRkZXYtPmh3X2ZlYXR1cmVzCQk9CU5FVElGX0ZfSVBfQ1NVTSB8CisJCQkJCQlORVRJRl9GX0lQVjZfQ1NVTSB8CisJCQkJCQlORVRJRl9GX1NHIHwKKwkJCQkJCU5FVElGX0ZfVFNPIHwKKwkJCQkJCU5FVElGX0ZfVFNPNiB8CisJCQkJCQlORVRJRl9GX1JYQ1NVTTsKIAluZXRkZXYtPmZlYXR1cmVzCQk9CU5FVElGX0ZfSVBfQ1NVTSB8CiAJCQkJCQlORVRJRl9GX0lQVjZfQ1NVTSB8CiAJCQkJCQlORVRJRl9GX1NHIHwKQEAgLTMwNDAsOCArMzAwMSw5IEBACiAJam1lLT5yZWdfdHhwZmMgPSAwOwogCWptZS0+cmVnX3BtY3MgPSBQTUNTX01GRU47CiAJam1lLT5yZWdfZ3ByZWcxID0gR1BSRUcxX0RFRkFVTFQ7Ci0Jc2V0X2JpdChKTUVfRkxBR19UWENTVU0sICZqbWUtPmZsYWdzKTsKLQlzZXRfYml0KEpNRV9GTEFHX1RTTywgJmptZS0+ZmxhZ3MpOworCisJaWYgKGptZS0+cmVnX3J4bWNzICYgUlhNQ1NfQ0hFQ0tTVU0pCisJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9SWENTVU07CiAKIAkvKgogCSAqIEdldCBNYXggUmVhZCBSZXEgU2l6ZSBmcm9tIFBDSSBDb25maWcgU3BhY2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ptZS5oIGIvZHJpdmVycy9uZXQvam1lLmgKaW5kZXggOGJmMzA0NS4uZTlhYWVjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvam1lLmgKKysrIGIvZHJpdmVycy9uZXQvam1lLmgKQEAgLTQ2OCw4ICs0NjgsNiBAQAogZW51bSBqbWVfZmxhZ3NfYml0cyB7CiAJSk1FX0ZMQUdfTVNJCQk9IDEsCiAJSk1FX0ZMQUdfU1NFVAkJPSAyLAotCUpNRV9GTEFHX1RYQ1NVTQkJPSAzLAotCUpNRV9GTEFHX1RTTwkJPSA0LAogCUpNRV9GTEFHX1BPTEwJCT0gNSwKIAlKTUVfRkxBR19TSFVURE9XTgk9IDYsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQva3N6ODg0eC5jIGIvZHJpdmVycy9uZXQva3N6ODg0eC5jCmluZGV4IDdmN2Q1NzAuLjQxZWE1OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2tzejg4NHguYworKysgYi9kcml2ZXJzL25ldC9rc3o4ODR4LmMKQEAgLTEyMjEsNyArMTIyMSw2IEBACiAjZGVmaW5lIExJTktfSU5UX1dPUktJTkcJCSgxIDw8IDApCiAjZGVmaW5lIFNNQUxMX1BBQ0tFVF9UWF9CVUcJCSgxIDw8IDEpCiAjZGVmaW5lIEhBTEZfRFVQTEVYX1NJR05BTF9CVUcJCSgxIDw8IDIpCi0jZGVmaW5lIElQVjZfQ1NVTV9HRU5fSEFDSwkJKDEgPDwgMykKICNkZWZpbmUgUlhfSFVHRV9GUkFNRQkJCSgxIDw8IDQpCiAjZGVmaW5lIFNUUF9TVVBQT1JUCQkJKDEgPDwgOCkKIApAQCAtMzc0OCw3ICszNzQ3LDYgQEAKIAkJaWYgKDEgPT0gcmMpCiAJCQlody0+ZmVhdHVyZXMgfD0gSEFMRl9EVVBMRVhfU0lHTkFMX0JVRzsKIAl9Ci0JaHctPmZlYXR1cmVzIHw9IElQVjZfQ1NVTV9HRU5fSEFDSzsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTQ4ODcsOCArNDg4NSw3IEBACiAJbGVmdCA9IGh3X2FsbG9jX3BrdChodywgc2tiLT5sZW4sIG51bSk7CiAJaWYgKGxlZnQpIHsKIAkJaWYgKGxlZnQgPCBudW0gfHwKLQkJCQkoKGh3LT5mZWF0dXJlcyAmIElQVjZfQ1NVTV9HRU5fSEFDSykgJiYKLQkJCQkoQ0hFQ0tTVU1fUEFSVElBTCA9PSBza2ItPmlwX3N1bW1lZCkgJiYKKwkJCQkoKENIRUNLU1VNX1BBUlRJQUwgPT0gc2tiLT5pcF9zdW1tZWQpICYmCiAJCQkJKEVUSF9QX0lQVjYgPT0gaHRvbnMoc2tiLT5wcm90b2NvbCkpKSkgewogCQkJc3RydWN0IHNrX2J1ZmYgKm9yZ19za2IgPSBza2I7CiAKQEAgLTYwMDEsNiArNTk5OCw3IEBACiAJc3RydWN0IGRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSBwcml2LT5hZGFwdGVyOwogCXN0cnVjdCBrc3pfcG9ydCAqcG9ydCA9ICZwcml2LT5wb3J0OworCXUzMiBzcGVlZCA9IGV0aHRvb2xfY21kX3NwZWVkKGNtZCk7CiAJaW50IHJjOwogCiAJLyoKQEAgLTYwMDksMTEgKzYwMDcsMTEgQEAKIAkgKi8KIAlpZiAoY21kLT5hdXRvbmVnICYmIHByaXYtPmFkdmVydGlzaW5nID09IGNtZC0+YWR2ZXJ0aXNpbmcpIHsKIAkJY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX0FMTDsKLQkJaWYgKDEwID09IGNtZC0+c3BlZWQpCisJCWlmICgxMCA9PSBzcGVlZCkKIAkJCWNtZC0+YWR2ZXJ0aXNpbmcgJj0KIAkJCQl+KEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCB8CiAJCQkJQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmKTsKLQkJZWxzZSBpZiAoMTAwID09IGNtZC0+c3BlZWQpCisJCWVsc2UgaWYgKDEwMCA9PSBzcGVlZCkKIAkJCWNtZC0+YWR2ZXJ0aXNpbmcgJj0KIAkJCQl+KEFEVkVSVElTRURfMTBiYXNlVF9GdWxsIHwKIAkJCQlBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZik7CkBAIC02MDM1LDggKzYwMzMsOCBAQAogCQlwb3J0LT5mb3JjZV9saW5rID0gMDsKIAl9IGVsc2UgewogCQlwb3J0LT5kdXBsZXggPSBjbWQtPmR1cGxleCArIDE7Ci0JCWlmIChjbWQtPnNwZWVkICE9IDEwMDApCi0JCQlwb3J0LT5zcGVlZCA9IGNtZC0+c3BlZWQ7CisJCWlmICgxMDAwICE9IHNwZWVkKQorCQkJcG9ydC0+c3BlZWQgPSBzcGVlZDsKIAkJaWYgKGNtZC0+YXV0b25lZykKIAkJCXBvcnQtPmZvcmNlX2xpbmsgPSAwOwogCQllbHNlCkBAIC02NTgzLDU3ICs2NTgxLDMzIEBACiB9CiAKIC8qKgotICogbmV0ZGV2X2dldF9yeF9jc3VtIC0gZ2V0IHJlY2VpdmUgY2hlY2tzdW0gc3VwcG9ydAorICogbmV0ZGV2X3NldF9mZWF0dXJlcyAtIHNldCByZWNlaXZlIGNoZWNrc3VtIHN1cHBvcnQKICAqIEBkZXY6CU5ldHdvcmsgZGV2aWNlLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gZ2V0cyByZWNlaXZlIGNoZWNrc3VtIHN1cHBvcnQgc2V0dGluZy4KLSAqCi0gKiBSZXR1cm4gdHJ1ZSBpZiByZWNlaXZlIGNoZWNrc3VtIGlzIGVuYWJsZWQ7IGZhbHNlIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIHUzMiBuZXRkZXZfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7Ci0Jc3RydWN0IGtzel9odyAqaHcgPSAmaHdfcHJpdi0+aHc7Ci0KLQlyZXR1cm4gaHctPnJ4X2NmZyAmCi0JCShETUFfUlhfQ1NVTV9VRFAgfAotCQlETUFfUlhfQ1NVTV9UQ1AgfAotCQlETUFfUlhfQ1NVTV9JUCk7Ci19Ci0KLS8qKgotICogbmV0ZGV2X3NldF9yeF9jc3VtIC0gc2V0IHJlY2VpdmUgY2hlY2tzdW0gc3VwcG9ydAotICogQGRldjoJTmV0d29yayBkZXZpY2UuCi0gKiBAZGF0YToJWmVybyB0byBkaXNhYmxlIHJlY2VpdmUgY2hlY2tzdW0gc3VwcG9ydC4KKyAqIEBmZWF0dXJlczoJTmV3IGRldmljZSBmZWF0dXJlcyAob2ZmbG9hZHMpLgogICoKICAqIFRoaXMgZnVuY3Rpb24gc2V0cyByZWNlaXZlIGNoZWNrc3VtIHN1cHBvcnQgc2V0dGluZy4KICAqCiAgKiBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsOyBvdGhlcndpc2UgYW4gZXJyb3IgY29kZS4KICAqLwotc3RhdGljIGludCBuZXRkZXZfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCitzdGF0aWMgaW50IG5ldGRldl9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZlYXR1cmVzKQogewogCXN0cnVjdCBkZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGRldl9pbmZvICpod19wcml2ID0gcHJpdi0+YWRhcHRlcjsKIAlzdHJ1Y3Qga3N6X2h3ICpodyA9ICZod19wcml2LT5odzsKLQl1MzIgbmV3X3NldHRpbmcgPSBody0+cnhfY2ZnOwogCi0JaWYgKGRhdGEpCi0JCW5ld19zZXR0aW5nIHw9Ci0JCQkoRE1BX1JYX0NTVU1fVURQIHwgRE1BX1JYX0NTVU1fVENQIHwKLQkJCURNQV9SWF9DU1VNX0lQKTsKLQllbHNlCi0JCW5ld19zZXR0aW5nICY9Ci0JCQl+KERNQV9SWF9DU1VNX1VEUCB8IERNQV9SWF9DU1VNX1RDUCB8Ci0JCQlETUFfUlhfQ1NVTV9JUCk7Ci0JbmV3X3NldHRpbmcgJj0gfkRNQV9SWF9DU1VNX1VEUDsKIAltdXRleF9sb2NrKCZod19wcml2LT5sb2NrKTsKLQlpZiAobmV3X3NldHRpbmcgIT0gaHctPnJ4X2NmZykgewotCQlody0+cnhfY2ZnID0gbmV3X3NldHRpbmc7Ci0JCWlmIChody0+ZW5hYmxlZCkKLQkJCXdyaXRlbChody0+cnhfY2ZnLCBody0+aW8gKyBLU19ETUFfUlhfQ1RSTCk7Ci0JfQorCisJLyogc2VlIG5vdGUgaW4gaHdfc2V0dXAoKSAqLworCWlmIChmZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKQorCQlody0+cnhfY2ZnIHw9IERNQV9SWF9DU1VNX1RDUCB8IERNQV9SWF9DU1VNX0lQOworCWVsc2UKKwkJaHctPnJ4X2NmZyAmPSB+KERNQV9SWF9DU1VNX1RDUCB8IERNQV9SWF9DU1VNX0lQKTsKKworCWlmIChody0+ZW5hYmxlZCkKKwkJd3JpdGVsKGh3LT5yeF9jZmcsIGh3LT5pbyArIEtTX0RNQV9SWF9DVFJMKTsKKwogCW11dGV4X3VubG9jaygmaHdfcHJpdi0+bG9jayk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjY1OCwxMiArNjYzMiw2IEBACiAJLmdldF9zdHJpbmdzCQk9IG5ldGRldl9nZXRfc3RyaW5ncywKIAkuZ2V0X3NzZXRfY291bnQJCT0gbmV0ZGV2X2dldF9zc2V0X2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cwk9IG5ldGRldl9nZXRfZXRodG9vbF9zdGF0cywKLQkuZ2V0X3J4X2NzdW0JCT0gbmV0ZGV2X2dldF9yeF9jc3VtLAotCS5zZXRfcnhfY3N1bQkJPSBuZXRkZXZfc2V0X3J4X2NzdW0sCi0JLmdldF90eF9jc3VtCQk9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCi0JLnNldF90eF9jc3VtCQk9IGV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0sCi0JLmdldF9zZwkJCT0gZXRodG9vbF9vcF9nZXRfc2csCi0JLnNldF9zZwkJCT0gZXRodG9vbF9vcF9zZXRfc2csCiB9OwogCiAvKgpAQCAtNjgyOCwxNCArNjc5NiwxNSBAQAogCS8qIDUwMCBtcyB0aW1lb3V0ICovCiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IEhaIC8gMjsKIAotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNOworCWRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHIHwgTkVUSUZfRl9SWENTVU07CiAKIAkvKgogCSAqIEhhcmR3YXJlIGRvZXMgbm90IHJlYWxseSBzdXBwb3J0IElQdjYgY2hlY2tzdW0gZ2VuZXJhdGlvbiwgYnV0Ci0JICogZHJpdmVyIGFjdHVhbGx5IHJ1bnMgZmFzdGVyIHdpdGggdGhpcyBvbi4gIFJlZmVyIElQVjZfQ1NVTV9HRU5fSEFDSy4KKwkgKiBkcml2ZXIgYWN0dWFsbHkgcnVucyBmYXN0ZXIgd2l0aCB0aGlzIG9uLgogCSAqLwotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUFY2X0NTVU07Ci0JZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHOworCWRldi0+aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9JUFY2X0NTVU07CisKKwlkZXYtPmZlYXR1cmVzIHw9IGRldi0+aHdfZmVhdHVyZXM7CiAKIAlzZW1hX2luaXQoJnByaXYtPnByb2Nfc2VtLCAxKTsKIApAQCAtNjg2MCw2ICs2ODI5LDcgQEAKIAkubmRvX3N0YXJ0X3htaXQJCT0gbmV0ZGV2X3R4LAogCS5uZG9fdHhfdGltZW91dAkJPSBuZXRkZXZfdHhfdGltZW91dCwKIAkubmRvX2NoYW5nZV9tdHUJCT0gbmV0ZGV2X2NoYW5nZV9tdHUsCisJLm5kb19zZXRfZmVhdHVyZXMJPSBuZXRkZXZfc2V0X2ZlYXR1cmVzLAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gbmV0ZGV2X3NldF9tYWNfYWRkcmVzcywKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIAkubmRvX2RvX2lvY3RsCQk9IG5ldGRldl9pb2N0bCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xhbnRpcV9ldG9wLmMgYi9kcml2ZXJzL25ldC9sYW50aXFfZXRvcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZjI1MmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9sYW50aXFfZXRvcC5jCkBAIC0wLDAgKzEsODA1IEBACisvKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogICBDb3B5cmlnaHQgKEMpIDIwMTEgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vY2hlY2tzdW0uaD4KKworI2luY2x1ZGUgPGxhbnRpcV9zb2MuaD4KKyNpbmNsdWRlIDx4d2F5X2RtYS5oPgorI2luY2x1ZGUgPGxhbnRpcV9wbGF0Zm9ybS5oPgorCisjZGVmaW5lIExUUV9FVE9QX01ESU8JCTB4MTE4MDQKKyNkZWZpbmUgTURJT19SRVFVRVNUCQkweDgwMDAwMDAwCisjZGVmaW5lIE1ESU9fUkVBRAkJMHg0MDAwMDAwMAorI2RlZmluZSBNRElPX0FERFJfTUFTSwkJMHgxZgorI2RlZmluZSBNRElPX0FERFJfT0ZGU0VUCTB4MTUKKyNkZWZpbmUgTURJT19SRUdfTUFTSwkJMHgxZgorI2RlZmluZSBNRElPX1JFR19PRkZTRVQJCTB4MTAKKyNkZWZpbmUgTURJT19WQUxfTUFTSwkJMHhmZmZmCisKKyNkZWZpbmUgUFBFMzJfQ0dFTgkJMHg4MDAKKyNkZWZpbmUgTFFfUFBFMzJfRU5FVF9NQUNfQ0ZHCTB4MTg0MAorCisjZGVmaW5lIExUUV9FVE9QX0VORVRTMAkJMHgxMTg1MAorI2RlZmluZSBMVFFfRVRPUF9NQUNfREEwCTB4MTE4NkMKKyNkZWZpbmUgTFRRX0VUT1BfTUFDX0RBMQkweDExODcwCisjZGVmaW5lIExUUV9FVE9QX0NGRwkJMHgxNjAyMAorI2RlZmluZSBMVFFfRVRPUF9JR1BMRU4JCTB4MTYwODAKKworI2RlZmluZSBNQVhfRE1BX0NIQU4JCTB4OAorI2RlZmluZSBNQVhfRE1BX0NSQ19MRU4JCTB4NAorI2RlZmluZSBNQVhfRE1BX0RBVEFfTEVOCTB4NjAwCisKKyNkZWZpbmUgRVRPUF9GVENVCQlCSVQoMjgpCisjZGVmaW5lIEVUT1BfTUlJX01BU0sJCTB4ZgorI2RlZmluZSBFVE9QX01JSV9OT1JNQUwJCTB4ZAorI2RlZmluZSBFVE9QX01JSV9SRVZFUlNFCTB4ZQorI2RlZmluZSBFVE9QX1BMRU5fVU5ERVIJCTB4NDAKKyNkZWZpbmUgRVRPUF9DR0VOCQkweDgwMAorCisvKiB1c2UgMiBzdGF0aWMgY2hhbm5lbHMgZm9yIFRYL1JYICovCisjZGVmaW5lIExUUV9FVE9QX1RYX0NIQU5ORUwJMQorI2RlZmluZSBMVFFfRVRPUF9SWF9DSEFOTkVMCTYKKyNkZWZpbmUgSVNfVFgoeCkJCSh4ID09IExUUV9FVE9QX1RYX0NIQU5ORUwpCisjZGVmaW5lIElTX1JYKHgpCQkoeCA9PSBMVFFfRVRPUF9SWF9DSEFOTkVMKQorCisjZGVmaW5lIGx0cV9ldG9wX3IzMih4KQkJbHRxX3IzMihsdHFfZXRvcF9tZW1iYXNlICsgKHgpKQorI2RlZmluZSBsdHFfZXRvcF93MzIoeCwgeSkJbHRxX3czMih4LCBsdHFfZXRvcF9tZW1iYXNlICsgKHkpKQorI2RlZmluZSBsdHFfZXRvcF93MzJfbWFzayh4LCB5LCB6KQlcCisJCWx0cV93MzJfbWFzayh4LCB5LCBsdHFfZXRvcF9tZW1iYXNlICsgKHopKQorCisjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjAiCisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmx0cV9ldG9wX21lbWJhc2U7CisKK3N0cnVjdCBsdHFfZXRvcF9jaGFuIHsKKwlpbnQgaWR4OworCWludCB0eF9mcmVlOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CisJc3RydWN0IGx0cV9kbWFfY2hhbm5lbCBkbWE7CisJc3RydWN0IHNrX2J1ZmYgKnNrYltMVFFfREVTQ19OVU1dOworfTsKKworc3RydWN0IGx0cV9ldG9wX3ByaXYgeworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IGx0cV9ldGhfZGF0YSAqcGxkYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJc3RydWN0IG1paV9idXMgKm1paV9idXM7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKKworCXN0cnVjdCBsdHFfZXRvcF9jaGFuIGNoW01BWF9ETUFfQ0hBTl07CisJaW50IHR4X2ZyZWVbTUFYX0RNQV9DSEFOID4+IDFdOworCisJc3BpbmxvY2tfdCBsb2NrOworfTsKKworc3RhdGljIGludAorbHRxX2V0b3BfYWxsb2Nfc2tiKHN0cnVjdCBsdHFfZXRvcF9jaGFuICpjaCkKK3sKKwljaC0+c2tiW2NoLT5kbWEuZGVzY10gPSBkZXZfYWxsb2Nfc2tiKE1BWF9ETUFfREFUQV9MRU4pOworCWlmICghY2gtPnNrYltjaC0+ZG1hLmRlc2NdKQorCQlyZXR1cm4gLUVOT01FTTsKKwljaC0+ZG1hLmRlc2NfYmFzZVtjaC0+ZG1hLmRlc2NdLmFkZHIgPSBkbWFfbWFwX3NpbmdsZShOVUxMLAorCQljaC0+c2tiW2NoLT5kbWEuZGVzY10tPmRhdGEsIE1BWF9ETUFfREFUQV9MRU4sCisJCURNQV9GUk9NX0RFVklDRSk7CisJY2gtPmRtYS5kZXNjX2Jhc2VbY2gtPmRtYS5kZXNjXS5hZGRyID0KKwkJQ1BIWVNBRERSKGNoLT5za2JbY2gtPmRtYS5kZXNjXS0+ZGF0YSk7CisJY2gtPmRtYS5kZXNjX2Jhc2VbY2gtPmRtYS5kZXNjXS5jdGwgPQorCQlMVFFfRE1BX09XTiB8IExUUV9ETUFfUlhfT0ZGU0VUKE5FVF9JUF9BTElHTikgfAorCQlNQVhfRE1BX0RBVEFfTEVOOworCXNrYl9yZXNlcnZlKGNoLT5za2JbY2gtPmRtYS5kZXNjXSwgTkVUX0lQX0FMSUdOKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2x0cV9ldG9wX2h3X3JlY2VpdmUoc3RydWN0IGx0cV9ldG9wX2NoYW4gKmNoKQoreworCXN0cnVjdCBsdHFfZXRvcF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoY2gtPm5ldGRldik7CisJc3RydWN0IGx0cV9kbWFfZGVzYyAqZGVzYyA9ICZjaC0+ZG1hLmRlc2NfYmFzZVtjaC0+ZG1hLmRlc2NdOworCXN0cnVjdCBza19idWZmICpza2IgPSBjaC0+c2tiW2NoLT5kbWEuZGVzY107CisJaW50IGxlbiA9IChkZXNjLT5jdGwgJiBMVFFfRE1BX1NJWkVfTUFTSykgLSBNQVhfRE1BX0NSQ19MRU47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJaWYgKGx0cV9ldG9wX2FsbG9jX3NrYihjaCkpIHsKKwkJbmV0ZGV2X2VycihjaC0+bmV0ZGV2LAorCQkJImZhaWxlZCB0byBhbGxvY2F0ZSBuZXcgcnggYnVmZmVyLCBzdG9wcGluZyBETUFcbiIpOworCQlsdHFfZG1hX2Nsb3NlKCZjaC0+ZG1hKTsKKwl9CisJY2gtPmRtYS5kZXNjKys7CisJY2gtPmRtYS5kZXNjICU9IExUUV9ERVNDX05VTTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlza2JfcHV0KHNrYiwgbGVuKTsKKwlza2ItPmRldiA9IGNoLT5uZXRkZXY7CisJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgY2gtPm5ldGRldik7CisJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKK30KKworc3RhdGljIGludAorbHRxX2V0b3BfcG9sbF9yeChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCit7CisJc3RydWN0IGx0cV9ldG9wX2NoYW4gKmNoID0gY29udGFpbmVyX29mKG5hcGksCisJCQkJc3RydWN0IGx0cV9ldG9wX2NoYW4sIG5hcGkpOworCWludCByeCA9IDA7CisJaW50IGNvbXBsZXRlID0gMDsKKworCXdoaWxlICgocnggPCBidWRnZXQpICYmICFjb21wbGV0ZSkgeworCQlzdHJ1Y3QgbHRxX2RtYV9kZXNjICpkZXNjID0gJmNoLT5kbWEuZGVzY19iYXNlW2NoLT5kbWEuZGVzY107CisKKwkJaWYgKChkZXNjLT5jdGwgJiAoTFRRX0RNQV9PV04gfCBMVFFfRE1BX0MpKSA9PSBMVFFfRE1BX0MpIHsKKwkJCWx0cV9ldG9wX2h3X3JlY2VpdmUoY2gpOworCQkJcngrKzsKKwkJfSBlbHNlIHsKKwkJCWNvbXBsZXRlID0gMTsKKwkJfQorCX0KKwlpZiAoY29tcGxldGUgfHwgIXJ4KSB7CisJCW5hcGlfY29tcGxldGUoJmNoLT5uYXBpKTsKKwkJbHRxX2RtYV9hY2tfaXJxKCZjaC0+ZG1hKTsKKwl9CisJcmV0dXJuIHJ4OworfQorCitzdGF0aWMgaW50CitsdHFfZXRvcF9wb2xsX3R4KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKK3sKKwlzdHJ1Y3QgbHRxX2V0b3BfY2hhbiAqY2ggPQorCQljb250YWluZXJfb2YobmFwaSwgc3RydWN0IGx0cV9ldG9wX2NoYW4sIG5hcGkpOworCXN0cnVjdCBsdHFfZXRvcF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoY2gtPm5ldGRldik7CisJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0KKwkJbmV0ZGV2X2dldF90eF9xdWV1ZShjaC0+bmV0ZGV2LCBjaC0+aWR4ID4+IDEpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXdoaWxlICgoY2gtPmRtYS5kZXNjX2Jhc2VbY2gtPnR4X2ZyZWVdLmN0bCAmCisJCQkoTFRRX0RNQV9PV04gfCBMVFFfRE1BX0MpKSA9PSBMVFFfRE1BX0MpIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoY2gtPnNrYltjaC0+dHhfZnJlZV0pOworCQljaC0+c2tiW2NoLT50eF9mcmVlXSA9IE5VTEw7CisJCW1lbXNldCgmY2gtPmRtYS5kZXNjX2Jhc2VbY2gtPnR4X2ZyZWVdLCAwLAorCQkJc2l6ZW9mKHN0cnVjdCBsdHFfZG1hX2Rlc2MpKTsKKwkJY2gtPnR4X2ZyZWUrKzsKKwkJY2gtPnR4X2ZyZWUgJT0gTFRRX0RFU0NfTlVNOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlpZiAobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpKQorCQluZXRpZl90eF9zdGFydF9xdWV1ZSh0eHEpOworCW5hcGlfY29tcGxldGUoJmNoLT5uYXBpKTsKKwlsdHFfZG1hX2Fja19pcnEoJmNoLT5kbWEpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QKK2x0cV9ldG9wX2RtYV9pcnEoaW50IGlycSwgdm9pZCAqX3ByaXYpCit7CisJc3RydWN0IGx0cV9ldG9wX3ByaXYgKnByaXYgPSBfcHJpdjsKKwlpbnQgY2ggPSBpcnEgLSBMVFFfRE1BX0NIMF9JTlQ7CisKKwluYXBpX3NjaGVkdWxlKCZwcml2LT5jaFtjaF0ubmFwaSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZAorbHRxX2V0b3BfZnJlZV9jaGFubmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsdHFfZXRvcF9jaGFuICpjaCkKK3sKKwlzdHJ1Y3QgbHRxX2V0b3BfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlsdHFfZG1hX2ZyZWUoJmNoLT5kbWEpOworCWlmIChjaC0+ZG1hLmlycSkKKwkJZnJlZV9pcnEoY2gtPmRtYS5pcnEsIHByaXYpOworCWlmIChJU19SWChjaC0+aWR4KSkgeworCQlpbnQgZGVzYzsKKwkJZm9yIChkZXNjID0gMDsgZGVzYyA8IExUUV9ERVNDX05VTTsgZGVzYysrKQorCQkJZGV2X2tmcmVlX3NrYl9hbnkoY2gtPnNrYltjaC0+ZG1hLmRlc2NdKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitsdHFfZXRvcF9od19leGl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGx0cV9ldG9wX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBpOworCisJbHRxX3BtdV9kaXNhYmxlKFBNVV9QUEUpOworCWZvciAoaSA9IDA7IGkgPCBNQVhfRE1BX0NIQU47IGkrKykKKwkJaWYgKElTX1RYKGkpIHx8IElTX1JYKGkpKQorCQkJbHRxX2V0b3BfZnJlZV9jaGFubmVsKGRldiwgJnByaXYtPmNoW2ldKTsKK30KKworc3RhdGljIGludAorbHRxX2V0b3BfaHdfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBsdHFfZXRvcF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaTsKKworCWx0cV9wbXVfZW5hYmxlKFBNVV9QUEUpOworCisJc3dpdGNoIChwcml2LT5wbGRhdGEtPm1paV9tb2RlKSB7CisJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfUk1JSToKKwkJbHRxX2V0b3BfdzMyX21hc2soRVRPUF9NSUlfTUFTSywKKwkJCUVUT1BfTUlJX1JFVkVSU0UsIExUUV9FVE9QX0NGRyk7CisJCWJyZWFrOworCisJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfTUlJOgorCQlsdHFfZXRvcF93MzJfbWFzayhFVE9QX01JSV9NQVNLLAorCQkJRVRPUF9NSUlfTk9STUFMLCBMVFFfRVRPUF9DRkcpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCW5ldGRldl9lcnIoZGV2LCAidW5rbm93biBtaWkgbW9kZSAlZFxuIiwKKwkJCXByaXYtPnBsZGF0YS0+bWlpX21vZGUpOworCQlyZXR1cm4gLUVOT1RTVVBQOworCX0KKworCS8qIGVuYWJsZSBjcmMgZ2VuZXJhdGlvbiAqLworCWx0cV9ldG9wX3czMihQUEUzMl9DR0VOLCBMUV9QUEUzMl9FTkVUX01BQ19DRkcpOworCisJbHRxX2RtYV9pbml0X3BvcnQoRE1BX1BPUlRfRVRPUCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0RNQV9DSEFOOyBpKyspIHsKKwkJaW50IGlycSA9IExUUV9ETUFfQ0gwX0lOVCArIGk7CisJCXN0cnVjdCBsdHFfZXRvcF9jaGFuICpjaCA9ICZwcml2LT5jaFtpXTsKKworCQljaC0+aWR4ID0gY2gtPmRtYS5uciA9IGk7CisKKwkJaWYgKElTX1RYKGkpKSB7CisJCQlsdHFfZG1hX2FsbG9jX3R4KCZjaC0+ZG1hKTsKKwkJCXJlcXVlc3RfaXJxKGlycSwgbHRxX2V0b3BfZG1hX2lycSwgSVJRRl9ESVNBQkxFRCwKKwkJCQkiZXRvcF90eCIsIHByaXYpOworCQl9IGVsc2UgaWYgKElTX1JYKGkpKSB7CisJCQlsdHFfZG1hX2FsbG9jX3J4KCZjaC0+ZG1hKTsKKwkJCWZvciAoY2gtPmRtYS5kZXNjID0gMDsgY2gtPmRtYS5kZXNjIDwgTFRRX0RFU0NfTlVNOworCQkJCQljaC0+ZG1hLmRlc2MrKykKKwkJCQlpZiAobHRxX2V0b3BfYWxsb2Nfc2tiKGNoKSkKKwkJCQkJcmV0dXJuIC1FTk9NRU07CisJCQljaC0+ZG1hLmRlc2MgPSAwOworCQkJcmVxdWVzdF9pcnEoaXJxLCBsdHFfZXRvcF9kbWFfaXJxLCBJUlFGX0RJU0FCTEVELAorCQkJCSJldG9wX3J4IiwgcHJpdik7CisJCX0KKwkJY2gtPmRtYS5pcnEgPSBpcnE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorbHRxX2V0b3BfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKK3sKKwlzdHJjcHkoaW5mby0+ZHJpdmVyLCAiTGFudGlxIEVUT1AiKTsKKwlzdHJjcHkoaW5mby0+YnVzX2luZm8sICJpbnRlcm5hbCIpOworCXN0cmNweShpbmZvLT52ZXJzaW9uLCBEUlZfVkVSU0lPTik7Cit9CisKK3N0YXRpYyBpbnQKK2x0cV9ldG9wX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgbHRxX2V0b3BfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlyZXR1cm4gcGh5X2V0aHRvb2xfZ3NldChwcml2LT5waHlkZXYsIGNtZCk7Cit9CisKK3N0YXRpYyBpbnQKK2x0cV9ldG9wX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgbHRxX2V0b3BfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlyZXR1cm4gcGh5X2V0aHRvb2xfc3NldChwcml2LT5waHlkZXYsIGNtZCk7Cit9CisKK3N0YXRpYyBpbnQKK2x0cV9ldG9wX253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbHRxX2V0b3BfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlyZXR1cm4gcGh5X3N0YXJ0X2FuZWcocHJpdi0+cGh5ZGV2KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBsdHFfZXRvcF9ldGh0b29sX29wcyA9IHsKKwkuZ2V0X2RydmluZm8gPSBsdHFfZXRvcF9nZXRfZHJ2aW5mbywKKwkuZ2V0X3NldHRpbmdzID0gbHRxX2V0b3BfZ2V0X3NldHRpbmdzLAorCS5zZXRfc2V0dGluZ3MgPSBsdHFfZXRvcF9zZXRfc2V0dGluZ3MsCisJLm53YXlfcmVzZXQgPSBsdHFfZXRvcF9ud2F5X3Jlc2V0LAorfTsKKworc3RhdGljIGludAorbHRxX2V0b3BfbWRpb193cihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCBwaHlfcmVnLCB1MTYgcGh5X2RhdGEpCit7CisJdTMyIHZhbCA9IE1ESU9fUkVRVUVTVCB8CisJCSgocGh5X2FkZHIgJiBNRElPX0FERFJfTUFTSykgPDwgTURJT19BRERSX09GRlNFVCkgfAorCQkoKHBoeV9yZWcgJiBNRElPX1JFR19NQVNLKSA8PCBNRElPX1JFR19PRkZTRVQpIHwKKwkJcGh5X2RhdGE7CisKKwl3aGlsZSAobHRxX2V0b3BfcjMyKExUUV9FVE9QX01ESU8pICYgTURJT19SRVFVRVNUKQorCQk7CisJbHRxX2V0b3BfdzMyKHZhbCwgTFRRX0VUT1BfTURJTyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2x0cV9ldG9wX21kaW9fcmQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcGh5X3JlZykKK3sKKwl1MzIgdmFsID0gTURJT19SRVFVRVNUIHwgTURJT19SRUFEIHwKKwkJKChwaHlfYWRkciAmIE1ESU9fQUREUl9NQVNLKSA8PCBNRElPX0FERFJfT0ZGU0VUKSB8CisJCSgocGh5X3JlZyAmIE1ESU9fUkVHX01BU0spIDw8IE1ESU9fUkVHX09GRlNFVCk7CisKKwl3aGlsZSAobHRxX2V0b3BfcjMyKExUUV9FVE9QX01ESU8pICYgTURJT19SRVFVRVNUKQorCQk7CisJbHRxX2V0b3BfdzMyKHZhbCwgTFRRX0VUT1BfTURJTyk7CisJd2hpbGUgKGx0cV9ldG9wX3IzMihMVFFfRVRPUF9NRElPKSAmIE1ESU9fUkVRVUVTVCkKKwkJOworCXZhbCA9IGx0cV9ldG9wX3IzMihMVFFfRVRPUF9NRElPKSAmIE1ESU9fVkFMX01BU0s7CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIHZvaWQKK2x0cV9ldG9wX21kaW9fbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCS8qIG5vdGhpbmcgdG8gZG8gICovCit9CisKK3N0YXRpYyBpbnQKK2x0cV9ldG9wX21kaW9fcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbHRxX2V0b3BfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IE5VTEw7CisJaW50IHBoeV9hZGRyOworCisJZm9yIChwaHlfYWRkciA9IDA7IHBoeV9hZGRyIDwgUEhZX01BWF9BRERSOyBwaHlfYWRkcisrKSB7CisJCWlmIChwcml2LT5taWlfYnVzLT5waHlfbWFwW3BoeV9hZGRyXSkgeworCQkJcGh5ZGV2ID0gcHJpdi0+bWlpX2J1cy0+cGh5X21hcFtwaHlfYWRkcl07CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghcGh5ZGV2KSB7CisJCW5ldGRldl9lcnIoZGV2LCAibm8gUEhZIGZvdW5kXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLCAmbHRxX2V0b3BfbWRpb19saW5rLAorCQkJMCwgcHJpdi0+cGxkYXRhLT5taWlfbW9kZSk7CisKKwlpZiAoSVNfRVJSKHBoeWRldikpIHsKKwkJbmV0ZGV2X2VycihkZXYsICJDb3VsZCBub3QgYXR0YWNoIHRvIFBIWVxuIik7CisJCXJldHVybiBQVFJfRVJSKHBoeWRldik7CisJfQorCisJcGh5ZGV2LT5zdXBwb3J0ZWQgJj0gKFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYKKwkJCSAgICAgIHwgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbAorCQkJICAgICAgfCBTVVBQT1JURURfMTAwYmFzZVRfSGFsZgorCQkJICAgICAgfCBTVVBQT1JURURfMTAwYmFzZVRfRnVsbAorCQkJICAgICAgfCBTVVBQT1JURURfQXV0b25lZworCQkJICAgICAgfCBTVVBQT1JURURfTUlJCisJCQkgICAgICB8IFNVUFBPUlRFRF9UUCk7CisKKwlwaHlkZXYtPmFkdmVydGlzaW5nID0gcGh5ZGV2LT5zdXBwb3J0ZWQ7CisJcHJpdi0+cGh5ZGV2ID0gcGh5ZGV2OworCXByX2luZm8oIiVzOiBhdHRhY2hlZCBQSFkgWyVzXSAocGh5X2FkZHI9JXMsIGlycT0lZClcbiIsCisJICAgICAgIGRldi0+bmFtZSwgcGh5ZGV2LT5kcnYtPm5hbWUsCisJICAgICAgIGRldl9uYW1lKCZwaHlkZXYtPmRldiksIHBoeWRldi0+aXJxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitsdHFfZXRvcF9tZGlvX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbHRxX2V0b3BfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGk7CisJaW50IGVycjsKKworCXByaXYtPm1paV9idXMgPSBtZGlvYnVzX2FsbG9jKCk7CisJaWYgKCFwcml2LT5taWlfYnVzKSB7CisJCW5ldGRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1paSBidXNcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJcHJpdi0+bWlpX2J1cy0+cHJpdiA9IGRldjsKKwlwcml2LT5taWlfYnVzLT5yZWFkID0gbHRxX2V0b3BfbWRpb19yZDsKKwlwcml2LT5taWlfYnVzLT53cml0ZSA9IGx0cV9ldG9wX21kaW9fd3I7CisJcHJpdi0+bWlpX2J1cy0+bmFtZSA9ICJsdHFfbWlpIjsKKwlzbnByaW50Zihwcml2LT5taWlfYnVzLT5pZCwgTUlJX0JVU19JRF9TSVpFLCAiJXgiLCAwKTsKKwlwcml2LT5taWlfYnVzLT5pcnEgPSBrbWFsbG9jKHNpemVvZihpbnQpICogUEhZX01BWF9BRERSLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYtPm1paV9idXMtPmlycSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXRfZnJlZV9tZGlvYnVzOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBQSFlfTUFYX0FERFI7ICsraSkKKwkJcHJpdi0+bWlpX2J1cy0+aXJxW2ldID0gUEhZX1BPTEw7CisKKwlpZiAobWRpb2J1c19yZWdpc3Rlcihwcml2LT5taWlfYnVzKSkgeworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gZXJyX291dF9mcmVlX21kaW9faXJxOworCX0KKworCWlmIChsdHFfZXRvcF9tZGlvX3Byb2JlKGRldikpIHsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIGVycl9vdXRfdW5yZWdpc3Rlcl9idXM7CisJfQorCXJldHVybiAwOworCitlcnJfb3V0X3VucmVnaXN0ZXJfYnVzOgorCW1kaW9idXNfdW5yZWdpc3Rlcihwcml2LT5taWlfYnVzKTsKK2Vycl9vdXRfZnJlZV9tZGlvX2lycToKKwlrZnJlZShwcml2LT5taWlfYnVzLT5pcnEpOworZXJyX291dF9mcmVlX21kaW9idXM6CisJbWRpb2J1c19mcmVlKHByaXYtPm1paV9idXMpOworZXJyX291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZAorbHRxX2V0b3BfbWRpb19jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGx0cV9ldG9wX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcGh5X2Rpc2Nvbm5lY3QocHJpdi0+cGh5ZGV2KTsKKwltZGlvYnVzX3VucmVnaXN0ZXIocHJpdi0+bWlpX2J1cyk7CisJa2ZyZWUocHJpdi0+bWlpX2J1cy0+aXJxKTsKKwltZGlvYnVzX2ZyZWUocHJpdi0+bWlpX2J1cyk7Cit9CisKK3N0YXRpYyBpbnQKK2x0cV9ldG9wX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbHRxX2V0b3BfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0RNQV9DSEFOOyBpKyspIHsKKwkJc3RydWN0IGx0cV9ldG9wX2NoYW4gKmNoID0gJnByaXYtPmNoW2ldOworCisJCWlmICghSVNfVFgoaSkgJiYgKCFJU19SWChpKSkpCisJCQljb250aW51ZTsKKwkJbHRxX2RtYV9vcGVuKCZjaC0+ZG1hKTsKKwkJbmFwaV9lbmFibGUoJmNoLT5uYXBpKTsKKwl9CisJcGh5X3N0YXJ0KHByaXYtPnBoeWRldik7CisJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitsdHFfZXRvcF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGx0cV9ldG9wX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBpOworCisJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKGRldik7CisJcGh5X3N0b3AocHJpdi0+cGh5ZGV2KTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0RNQV9DSEFOOyBpKyspIHsKKwkJc3RydWN0IGx0cV9ldG9wX2NoYW4gKmNoID0gJnByaXYtPmNoW2ldOworCisJCWlmICghSVNfUlgoaSkgJiYgIUlTX1RYKGkpKQorCQkJY29udGludWU7CisJCW5hcGlfZGlzYWJsZSgmY2gtPm5hcGkpOworCQlsdHFfZG1hX2Nsb3NlKCZjaC0+ZG1hKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2x0cV9ldG9wX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaW50IHF1ZXVlID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CisJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHF1ZXVlKTsKKwlzdHJ1Y3QgbHRxX2V0b3BfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGx0cV9ldG9wX2NoYW4gKmNoID0gJnByaXYtPmNoWyhxdWV1ZSA8PCAxKSB8IDFdOworCXN0cnVjdCBsdHFfZG1hX2Rlc2MgKmRlc2MgPSAmY2gtPmRtYS5kZXNjX2Jhc2VbY2gtPmRtYS5kZXNjXTsKKwlpbnQgbGVuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGJ5dGVfb2Zmc2V0OworCisJbGVuID0gc2tiLT5sZW4gPCBFVEhfWkxFTiA/IEVUSF9aTEVOIDogc2tiLT5sZW47CisKKwlpZiAoKGRlc2MtPmN0bCAmIChMVFFfRE1BX09XTiB8IExUUV9ETUFfQykpIHx8IGNoLT5za2JbY2gtPmRtYS5kZXNjXSkgeworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQluZXRkZXZfZXJyKGRldiwgInR4IHJpbmcgZnVsbFxuIik7CisJCW5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCX0KKworCS8qIGRtYSBuZWVkcyB0byBzdGFydCBvbiBhIDE2IGJ5dGUgYWxpZ25lZCBhZGRyZXNzICovCisJYnl0ZV9vZmZzZXQgPSBDUEhZU0FERFIoc2tiLT5kYXRhKSAlIDE2OworCWNoLT5za2JbY2gtPmRtYS5kZXNjXSA9IHNrYjsKKworCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlkZXNjLT5hZGRyID0gKCh1bnNpZ25lZCBpbnQpIGRtYV9tYXBfc2luZ2xlKE5VTEwsIHNrYi0+ZGF0YSwgbGVuLAorCQkJCQkJRE1BX1RPX0RFVklDRSkpIC0gYnl0ZV9vZmZzZXQ7CisJd21iKCk7CisJZGVzYy0+Y3RsID0gTFRRX0RNQV9PV04gfCBMVFFfRE1BX1NPUCB8IExUUV9ETUFfRU9QIHwKKwkJTFRRX0RNQV9UWF9PRkZTRVQoYnl0ZV9vZmZzZXQpIHwgKGxlbiAmIExUUV9ETUFfU0laRV9NQVNLKTsKKwljaC0+ZG1hLmRlc2MrKzsKKwljaC0+ZG1hLmRlc2MgJT0gTFRRX0RFU0NfTlVNOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWlmIChjaC0+ZG1hLmRlc2NfYmFzZVtjaC0+ZG1hLmRlc2NdLmN0bCAmIExUUV9ETUFfT1dOKQorCQluZXRpZl90eF9zdG9wX3F1ZXVlKHR4cSk7CisKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorCitzdGF0aWMgaW50CitsdHFfZXRvcF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQoreworCWludCByZXQgPSBldGhfY2hhbmdlX210dShkZXYsIG5ld19tdHUpOworCisJaWYgKCFyZXQpIHsKKwkJc3RydWN0IGx0cV9ldG9wX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCWx0cV9ldG9wX3czMigoRVRPUF9QTEVOX1VOREVSIDw8IDE2KSB8IG5ld19tdHUsCisJCQlMVFFfRVRPUF9JR1BMRU4pOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2x0cV9ldG9wX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCit7CisJc3RydWN0IGx0cV9ldG9wX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJLyogVE9ETzogbWlpLXRvbGwgcmVwb3J0cyAiTm8gTUlJIHRyYW5zY2VpdmVyIHByZXNlbnQhLiIgPyEqLworCXJldHVybiBwaHlfbWlpX2lvY3RsKHByaXYtPnBoeWRldiwgcnEsIGNtZCk7Cit9CisKK3N0YXRpYyBpbnQKK2x0cV9ldG9wX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKQoreworCWludCByZXQgPSBldGhfbWFjX2FkZHIoZGV2LCBwKTsKKworCWlmICghcmV0KSB7CisJCXN0cnVjdCBsdHFfZXRvcF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQkvKiBzdG9yZSB0aGUgbWFjIGZvciB0aGUgdW5pY2FzdCBmaWx0ZXIgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJbHRxX2V0b3BfdzMyKCooKHUzMiAqKWRldi0+ZGV2X2FkZHIpLCBMVFFfRVRPUF9NQUNfREEwKTsKKwkJbHRxX2V0b3BfdzMyKCooKHUxNiAqKSZkZXYtPmRldl9hZGRyWzRdKSA8PCAxNiwKKwkJCUxUUV9FVE9QX01BQ19EQTEpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCitsdHFfZXRvcF9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbHRxX2V0b3BfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIGVuc3VyZSB0aGF0IHRoZSB1bmljYXN0IGZpbHRlciBpcyBub3QgZW5hYmxlZCBpbiBwcm9taXNjaW91cyBtb2RlICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgfHwgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKQorCQlsdHFfZXRvcF93MzJfbWFzayhFVE9QX0ZUQ1UsIDAsIExUUV9FVE9QX0VORVRTMCk7CisJZWxzZQorCQlsdHFfZXRvcF93MzJfbWFzaygwLCBFVE9QX0ZUQ1UsIExUUV9FVE9QX0VORVRTMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdTE2CitsdHFfZXRvcF9zZWxlY3RfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwkvKiB3ZSBhcmUgY3VycmVudGx5IG9ubHkgdXNpbmcgdGhlIGZpcnN0IHF1ZXVlICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2x0cV9ldG9wX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbHRxX2V0b3BfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNvY2thZGRyIG1hYzsKKwlpbnQgZXJyOworCisJZXRoZXJfc2V0dXAoZGV2KTsKKwlkZXYtPndhdGNoZG9nX3RpbWVvID0gMTAgKiBIWjsKKwllcnIgPSBsdHFfZXRvcF9od19pbml0KGRldik7CisJaWYgKGVycikKKwkJZ290byBlcnJfaHc7CisJbHRxX2V0b3BfY2hhbmdlX210dShkZXYsIDE1MDApOworCisJbWVtY3B5KCZtYWMsICZwcml2LT5wbGRhdGEtPm1hYywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihtYWMuc2FfZGF0YSkpIHsKKwkJcHJfd2FybigiZXRvcDogaW52YWxpZCBNQUMsIHVzaW5nIHJhbmRvbVxuIik7CisJCXJhbmRvbV9ldGhlcl9hZGRyKG1hYy5zYV9kYXRhKTsKKwl9CisKKwllcnIgPSBsdHFfZXRvcF9zZXRfbWFjX2FkZHJlc3MoZGV2LCAmbWFjKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9uZXRkZXY7CisJbHRxX2V0b3Bfc2V0X211bHRpY2FzdF9saXN0KGRldik7CisJZXJyID0gbHRxX2V0b3BfbWRpb19pbml0KGRldik7CisJaWYgKGVycikKKwkJZ290byBlcnJfbmV0ZGV2OworCXJldHVybiAwOworCitlcnJfbmV0ZGV2OgorCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJZnJlZV9uZXRkZXYoZGV2KTsKK2Vycl9odzoKKwlsdHFfZXRvcF9od19leGl0KGRldik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQKK2x0cV9ldG9wX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpbnQgZXJyOworCisJbHRxX2V0b3BfaHdfZXhpdChkZXYpOworCWVyciA9IGx0cV9ldG9wX2h3X2luaXQoZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9odzsKKwlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJcmV0dXJuOworCitlcnJfaHc6CisJbHRxX2V0b3BfaHdfZXhpdChkZXYpOworCW5ldGRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlc3RhcnQgZXRvcCBhZnRlciBUWCB0aW1lb3V0XG4iKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBsdHFfZXRoX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuID0gbHRxX2V0b3Bfb3BlbiwKKwkubmRvX3N0b3AgPSBsdHFfZXRvcF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdCA9IGx0cV9ldG9wX3R4LAorCS5uZG9fY2hhbmdlX210dSA9IGx0cV9ldG9wX2NoYW5nZV9tdHUsCisJLm5kb19kb19pb2N0bCA9IGx0cV9ldG9wX2lvY3RsLAorCS5uZG9fc2V0X21hY19hZGRyZXNzID0gbHRxX2V0b3Bfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fdmFsaWRhdGVfYWRkciA9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gbHRxX2V0b3Bfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fc2VsZWN0X3F1ZXVlID0gbHRxX2V0b3Bfc2VsZWN0X3F1ZXVlLAorCS5uZG9faW5pdCA9IGx0cV9ldG9wX2luaXQsCisJLm5kb190eF90aW1lb3V0ID0gbHRxX2V0b3BfdHhfdGltZW91dCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0CitsdHFfZXRvcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IGx0cV9ldG9wX3ByaXYgKnByaXY7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGVycjsKKwlpbnQgaTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBldG9wIHJlc291cmNlXG4iKTsKKwkJZXJyID0gLUVOT0VOVDsKKwkJZ290byBlcnJfb3V0OworCX0KKworCXJlcyA9IGRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCisJCXJlc291cmNlX3NpemUocmVzKSwgZGV2X25hbWUoJnBkZXYtPmRldikpOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IGV0b3AgcmVzb3VyY2VcbiIpOworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlsdHFfZXRvcF9tZW1iYXNlID0gZGV2bV9pb3JlbWFwX25vY2FjaGUoJnBkZXYtPmRldiwKKwkJcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIWx0cV9ldG9wX21lbWJhc2UpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlbWFwIGV0b3AgZW5naW5lICVkXG4iLAorCQkJcGRldi0+aWQpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXEoc2l6ZW9mKHN0cnVjdCBsdHFfZXRvcF9wcml2KSwgNCk7CisJc3RyY3B5KGRldi0+bmFtZSwgImV0aCVkIik7CisJZGV2LT5uZXRkZXZfb3BzID0gJmx0cV9ldGhfbmV0ZGV2X29wczsKKwlkZXYtPmV0aHRvb2xfb3BzID0gJmx0cV9ldG9wX2V0aHRvb2xfb3BzOworCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXByaXYtPnJlcyA9IHJlczsKKwlwcml2LT5wbGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZwZGV2LT5kZXYpOworCXByaXYtPm5ldGRldiA9IGRldjsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0RNQV9DSEFOOyBpKyspIHsKKwkJaWYgKElTX1RYKGkpKQorCQkJbmV0aWZfbmFwaV9hZGQoZGV2LCAmcHJpdi0+Y2hbaV0ubmFwaSwKKwkJCQlsdHFfZXRvcF9wb2xsX3R4LCA4KTsKKwkJZWxzZSBpZiAoSVNfUlgoaSkpCisJCQluZXRpZl9uYXBpX2FkZChkZXYsICZwcml2LT5jaFtpXS5uYXBpLAorCQkJCWx0cV9ldG9wX3BvbGxfcngsIDMyKTsKKwkJcHJpdi0+Y2hbaV0ubmV0ZGV2ID0gZGV2OworCX0KKworCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOworCXJldHVybiAwOworCitlcnJfZnJlZToKKwlrZnJlZShkZXYpOworZXJyX291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdAorbHRxX2V0b3BfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKGRldikgeworCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoZGV2KTsKKwkJbHRxX2V0b3BfaHdfZXhpdChkZXYpOworCQlsdHFfZXRvcF9tZGlvX2NsZWFudXAoZGV2KTsKKwkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGx0cV9taWlfZHJpdmVyID0geworCS5yZW1vdmUgPSBfX2RldmV4aXRfcChsdHFfZXRvcF9yZW1vdmUpLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImx0cV9ldG9wIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK2ludCBfX2luaXQKK2luaXRfbHRxX2V0b3Aodm9pZCkKK3sKKwlpbnQgcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZsdHFfbWlpX2RyaXZlciwgbHRxX2V0b3BfcHJvYmUpOworCisJaWYgKHJldCkKKwkJcHJfZXJyKCJsdHFfZXRvcDogRXJyb3IgcmVnaXN0ZXJpbmcgcGxhdGZvbSBkcml2ZXIhIik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0CitleGl0X2x0cV9ldG9wKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmx0cV9taWlfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9sdHFfZXRvcCk7Cittb2R1bGVfZXhpdChleGl0X2x0cV9ldG9wKTsKKworTU9EVUxFX0FVVEhPUigiSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxhbnRpcSBTb0MgRVRPUCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbG9vcGJhY2suYyBiL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMKaW5kZXggZDcwZmI3Ni4uNGNlOWU1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbG9vcGJhY2suYworKysgYi9kcml2ZXJzL25ldC9sb29wYmFjay5jCkBAIC0xNzQsNyArMTc0LDggQEAKIAkJfCBORVRJRl9GX0hJR0hETUEKIAkJfCBORVRJRl9GX0xMVFgKIAkJfCBORVRJRl9GX05FVE5TX0xPQ0FMCi0JCXwgTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQ7CisJCXwgTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQKKwkJfCBORVRJRl9GX0xPT1BCQUNLOwogCWRldi0+ZXRodG9vbF9vcHMJPSAmbG9vcGJhY2tfZXRodG9vbF9vcHM7CiAJZGV2LT5oZWFkZXJfb3BzCQk9ICZldGhfaGVhZGVyX29wczsKIAlkZXYtPm5ldGRldl9vcHMJCT0gJmxvb3BiYWNrX29wczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY2IuYyBiL2RyaXZlcnMvbmV0L21hY2IuYwppbmRleCA3OWNjYjU0Li42MjliZDI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNiLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjYi5jCkBAIC01NzYsNiArNTc2LDExIEBACiAJCSAqIGFkZCB0aGF0IGlmL3doZW4gd2UgZ2V0IG91ciBoYW5kcyBvbiBhIGZ1bGwtYmxvd24gTUlJIFBIWS4KIAkJICovCiAKKwkJaWYgKHN0YXR1cyAmIE1BQ0JfQklUKElTUl9ST1ZSKSkgeworCQkJLyogV2UgbWlzc2VkIGF0IGxlYXN0IG9uZSBwYWNrZXQgKi8KKwkJCWJwLT5od19zdGF0cy5yeF9vdmVycnVucysrOworCQl9CisKIAkJaWYgKHN0YXR1cyAmIE1BQ0JfQklUKEhSRVNQKSkgewogCQkJLyoKIAkJCSAqIFRPRE86IFJlc2V0IHRoZSBoYXJkd2FyZSwgYW5kIG1heWJlIG1vdmUgdGhlIHByaW50awpAQCAtMTAyNCw3ICsxMDI5LDggQEAKIAkJCQkgICBod3N0YXQtPnJ4X2phYmJlcnMgKwogCQkJCSAgIGh3c3RhdC0+cnhfdW5kZXJzaXplX3BrdHMgKwogCQkJCSAgIGh3c3RhdC0+cnhfbGVuZ3RoX21pc21hdGNoKTsKLQluc3RhdC0+cnhfb3Zlcl9lcnJvcnMgPSBod3N0YXQtPnJ4X3Jlc291cmNlX2Vycm9yczsKKwluc3RhdC0+cnhfb3Zlcl9lcnJvcnMgPSBod3N0YXQtPnJ4X3Jlc291cmNlX2Vycm9ycyArCisJCQkJICAgaHdzdGF0LT5yeF9vdmVycnVuczsKIAluc3RhdC0+cnhfY3JjX2Vycm9ycyA9IGh3c3RhdC0+cnhfZmNzX2Vycm9yczsKIAluc3RhdC0+cnhfZnJhbWVfZXJyb3JzID0gaHdzdGF0LT5yeF9hbGlnbl9lcnJvcnM7CiAJbnN0YXQtPnJ4X2ZpZm9fZXJyb3JzID0gaHdzdGF0LT5yeF9vdmVycnVuczsKQEAgLTExNzEsOCArMTE3Nyw3IEBACiAJfQogCiAJZGV2LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWVyciA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBtYWNiX2ludGVycnVwdCwgSVJRRl9TQU1QTEVfUkFORE9NLAotCQkJICBkZXYtPm5hbWUsIGRldik7CisJZXJyID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIG1hY2JfaW50ZXJydXB0LCAwLCBkZXYtPm5hbWUsIGRldik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICIlczogVW5hYmxlIHRvIHJlcXVlc3QgSVJRICVkIChlcnJvciAlZClcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWN2bGFuLmMgYi9kcml2ZXJzL25ldC9tYWN2bGFuLmMKaW5kZXggNzhlMzRlOS4uZDcyYTcwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjdmxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L21hY3ZsYW4uYwpAQCAtNzAsMTYgKzcwLDE3IEBACiAJaGxpc3RfYWRkX2hlYWRfcmN1KCZ2bGFuLT5obGlzdCwgJnBvcnQtPnZsYW5faGFzaFthZGRyWzVdXSk7CiB9CiAKLXN0YXRpYyB2b2lkIG1hY3ZsYW5faGFzaF9kZWwoc3RydWN0IG1hY3ZsYW5fZGV2ICp2bGFuKQorc3RhdGljIHZvaWQgbWFjdmxhbl9oYXNoX2RlbChzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4sIGJvb2wgc3luYykKIHsKIAlobGlzdF9kZWxfcmN1KCZ2bGFuLT5obGlzdCk7Ci0Jc3luY2hyb25pemVfcmN1KCk7CisJaWYgKHN5bmMpCisJCXN5bmNocm9uaXplX3JjdSgpOwogfQogCiBzdGF0aWMgdm9pZCBtYWN2bGFuX2hhc2hfY2hhbmdlX2FkZHIoc3RydWN0IG1hY3ZsYW5fZGV2ICp2bGFuLAogCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKQogewotCW1hY3ZsYW5faGFzaF9kZWwodmxhbik7CisJbWFjdmxhbl9oYXNoX2RlbCh2bGFuLCB0cnVlKTsKIAkvKiBOb3cgdGhhdCB3ZSBhcmUgdW5oYXNoZWQgaXQgaXMgc2FmZSB0byBjaGFuZ2UgdGhlIGRldmljZQogCSAqIGFkZHJlc3Mgd2l0aG91dCBjb25mdXNpbmcgcGFja2V0IGRlbGl2ZXJ5LgogCSAqLwpAQCAtMzQ1LDcgKzM0Niw3IEBACiAJZGV2X3VjX2RlbChsb3dlcmRldiwgZGV2LT5kZXZfYWRkcik7CiAKIGhhc2hfZGVsOgotCW1hY3ZsYW5faGFzaF9kZWwodmxhbik7CisJbWFjdmxhbl9oYXNoX2RlbCh2bGFuLCAhZGV2LT5kaXNtYW50bGUpOwogCXJldHVybiAwOwogfQogCkBAIC00MTUsNyArNDE2LDcgQEAKICNkZWZpbmUgTUFDVkxBTl9GRUFUVVJFUyBcCiAJKE5FVElGX0ZfU0cgfCBORVRJRl9GX0FMTF9DU1VNIHwgTkVUSUZfRl9ISUdIRE1BIHwgTkVUSUZfRl9GUkFHTElTVCB8IFwKIAkgTkVUSUZfRl9HU08gfCBORVRJRl9GX1RTTyB8IE5FVElGX0ZfVUZPIHwgTkVUSUZfRl9HU09fUk9CVVNUIHwgXAotCSBORVRJRl9GX1RTT19FQ04gfCBORVRJRl9GX1RTTzYgfCBORVRJRl9GX0dSTykKKwkgTkVUSUZfRl9UU09fRUNOIHwgTkVUSUZfRl9UU082IHwgTkVUSUZfRl9HUk8gfCBORVRJRl9GX1JYQ1NVTSkKIAogI2RlZmluZSBNQUNWTEFOX1NUQVRFX01BU0sgXAogCSgoMTw8X19MSU5LX1NUQVRFX05PQ0FSUklFUikgfCAoMTw8X19MSU5LX1NUQVRFX0RPUk1BTlQpKQpAQCAtNTE3LDEyICs1MTgsNiBAQAogCXNucHJpbnRmKGRydmluZm8tPnZlcnNpb24sIDMyLCAiMC4xIik7CiB9CiAKLXN0YXRpYyB1MzIgbWFjdmxhbl9ldGh0b29sX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JY29uc3Qgc3RydWN0IG1hY3ZsYW5fZGV2ICp2bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gZGV2X2V0aHRvb2xfZ2V0X3J4X2NzdW0odmxhbi0+bG93ZXJkZXYpOwotfQotCiBzdGF0aWMgaW50IG1hY3ZsYW5fZXRodG9vbF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7CkBAIC01MzAsMTggKzUyNSwxMCBAQAogCXJldHVybiBkZXZfZXRodG9vbF9nZXRfc2V0dGluZ3Modmxhbi0+bG93ZXJkZXYsIGNtZCk7CiB9CiAKLXN0YXRpYyB1MzIgbWFjdmxhbl9ldGh0b29sX2dldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWNvbnN0IHN0cnVjdCBtYWN2bGFuX2RldiAqdmxhbiA9IG5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuIGRldl9ldGh0b29sX2dldF9mbGFncyh2bGFuLT5sb3dlcmRldik7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbWFjdmxhbl9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKIAkuZ2V0X3NldHRpbmdzCQk9IG1hY3ZsYW5fZXRodG9vbF9nZXRfc2V0dGluZ3MsCi0JLmdldF9yeF9jc3VtCQk9IG1hY3ZsYW5fZXRodG9vbF9nZXRfcnhfY3N1bSwKIAkuZ2V0X2RydmluZm8JCT0gbWFjdmxhbl9ldGh0b29sX2dldF9kcnZpbmZvLAotCS5nZXRfZmxhZ3MJCT0gbWFjdmxhbl9ldGh0b29sX2dldF9mbGFncywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWFjdmxhbl9uZXRkZXZfb3BzID0gewpAQCAtNTk4LDI2ICs1ODUsMTggQEAKIAllcnIgPSBuZXRkZXZfcnhfaGFuZGxlcl9yZWdpc3RlcihkZXYsIG1hY3ZsYW5faGFuZGxlX2ZyYW1lLCBwb3J0KTsKIAlpZiAoZXJyKQogCQlrZnJlZShwb3J0KTsKLQotCWRldi0+cHJpdl9mbGFncyB8PSBJRkZfTUFDVkxBTl9QT1JUOworCWVsc2UKKwkJZGV2LT5wcml2X2ZsYWdzIHw9IElGRl9NQUNWTEFOX1BPUlQ7CiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgbWFjdmxhbl9wb3J0X3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKLXsKLQlzdHJ1Y3QgbWFjdmxhbl9wb3J0ICpwb3J0OwotCi0JcG9ydCA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgbWFjdmxhbl9wb3J0LCByY3UpOwotCWtmcmVlKHBvcnQpOwotfQotCiBzdGF0aWMgdm9pZCBtYWN2bGFuX3BvcnRfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBtYWN2bGFuX3BvcnQgKnBvcnQgPSBtYWN2bGFuX3BvcnRfZ2V0KGRldik7CiAKIAlkZXYtPnByaXZfZmxhZ3MgJj0gfklGRl9NQUNWTEFOX1BPUlQ7CiAJbmV0ZGV2X3J4X2hhbmRsZXJfdW5yZWdpc3RlcihkZXYpOwotCWNhbGxfcmN1KCZwb3J0LT5yY3UsIG1hY3ZsYW5fcG9ydF9yY3VfZnJlZSk7CisJa2ZyZWVfcmN1KHBvcnQsIHJjdSk7CiB9CiAKIHN0YXRpYyBpbnQgbWFjdmxhbl92YWxpZGF0ZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10pCkBAIC03OTksNiArNzc4LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHRyOwogCXN0cnVjdCBtYWN2bGFuX2RldiAqdmxhbiwgKm5leHQ7CiAJc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydDsKKwlMSVNUX0hFQUQobGlzdF9raWxsKTsKIAogCWlmICghbWFjdmxhbl9wb3J0X2V4aXN0cyhkZXYpKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CkBAIC04MjQsNyArODA0LDkgQEAKIAkJCWJyZWFrOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2bGFuLCBuZXh0LCAmcG9ydC0+dmxhbnMsIGxpc3QpCi0JCQl2bGFuLT5kZXYtPnJ0bmxfbGlua19vcHMtPmRlbGxpbmsodmxhbi0+ZGV2LCBOVUxMKTsKKwkJCXZsYW4tPmRldi0+cnRubF9saW5rX29wcy0+ZGVsbGluayh2bGFuLT5kZXYsICZsaXN0X2tpbGwpOworCQl1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KCZsaXN0X2tpbGwpOworCQlsaXN0X2RlbCgmbGlzdF9raWxsKTsKIAkJYnJlYWs7CiAJY2FzZSBORVRERVZfUFJFX1RZUEVfQ0hBTkdFOgogCQkvKiBGb3JiaWQgdW5kZXJsYXlpbmcgZGV2aWNlIHRvIGNoYW5nZSBpdHMgdHlwZS4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8uYyBiL2RyaXZlcnMvbmV0L21kaW8uYwppbmRleCBlODViZjA0Li4xNmZiYjExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tZGlvLmMKKysrIGIvZHJpdmVycy9uZXQvbWRpby5jCkBAIC0xNzYsNiArMTc2LDkgQEAKICAqIEBucGFnZV9hZHY6IE1vZGVzIGN1cnJlbnRseSBhZHZlcnRpc2VkIG9uIG5leHQgcGFnZXMKICAqIEBucGFnZV9scGE6IE1vZGVzIGFkdmVydGlzZWQgYnkgbGluayBwYXJ0bmVyIG9uIG5leHQgcGFnZXMKICAqCisgKiBUaGUgQGVjbWQgcGFyYW1ldGVyIGlzIGV4cGVjdGVkIHRvIGhhdmUgYmVlbiBjbGVhcmVkIGJlZm9yZSBjYWxsaW5nCisgKiBtZGlvNDVfZXRodG9vbF9nc2V0X25wYWdlKCkuCisgKgogICogU2luY2UgdGhlIENTUnMgZm9yIGF1dG8tbmVnb3RpYXRpb24gdXNpbmcgbmV4dCBwYWdlcyBhcmUgbm90IGZ1bGx5CiAgKiBzdGFuZGFyZGlzZWQsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBkZWNvZGUgdGhlbS4gIFRoZQogICogY2FsbGVyIG11c3QgcGFzcyB0aGVtIGluLgpAQCAtMTg1LDYgKzE4OCw3IEBACiAJCQkgICAgICAgdTMyIG5wYWdlX2FkdiwgdTMyIG5wYWdlX2xwYSkKIHsKIAlpbnQgcmVnOworCXUzMiBzcGVlZDsKIAogCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKIAllY21kLT5waHlfYWRkcmVzcyA9IG1kaW8tPnBydGFkOwpAQCAtMjg3LDMzICsyOTEsMzYgQEAKIAkJaWYgKG1vZGVzICYgKEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsIHwKIAkJCSAgICAgQURWRVJUSVNFRF8xMDAwMGJhc2VLWDRfRnVsbCB8CiAJCQkgICAgIEFEVkVSVElTRURfMTAwMDBiYXNlS1JfRnVsbCkpIHsKLQkJCWVjbWQtPnNwZWVkID0gU1BFRURfMTAwMDA7CisJCQlzcGVlZCA9IFNQRUVEXzEwMDAwOwogCQkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJCX0gZWxzZSBpZiAobW9kZXMgJiAoQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCB8CiAJCQkJICAgIEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYgfAogCQkJCSAgICBBRFZFUlRJU0VEXzEwMDBiYXNlS1hfRnVsbCkpIHsKLQkJCWVjbWQtPnNwZWVkID0gU1BFRURfMTAwMDsKKwkJCXNwZWVkID0gU1BFRURfMTAwMDsKIAkJCWVjbWQtPmR1cGxleCA9ICEobW9kZXMgJiBBRFZFUlRJU0VEXzEwMDBiYXNlVF9IYWxmKTsKIAkJfSBlbHNlIGlmIChtb2RlcyAmIChBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwgfAogCQkJCSAgICBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYpKSB7Ci0JCQllY21kLT5zcGVlZCA9IFNQRUVEXzEwMDsKKwkJCXNwZWVkID0gU1BFRURfMTAwOwogCQkJZWNtZC0+ZHVwbGV4ID0gISEobW9kZXMgJiBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwpOwogCQl9IGVsc2UgewotCQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDsKKwkJCXNwZWVkID0gU1BFRURfMTA7CiAJCQllY21kLT5kdXBsZXggPSAhIShtb2RlcyAmIEFEVkVSVElTRURfMTBiYXNlVF9GdWxsKTsKIAkJfQogCX0gZWxzZSB7CiAJCS8qIFJlcG9ydCBmb3JjZWQgc2V0dGluZ3MgKi8KIAkJcmVnID0gbWRpby0+bWRpb19yZWFkKG1kaW8tPmRldiwgbWRpby0+cHJ0YWQsIE1ESU9fTU1EX1BNQVBNRCwKIAkJCQkgICAgICBNRElPX0NUUkwxKTsKLQkJZWNtZC0+c3BlZWQgPSAoKChyZWcgJiBNRElPX1BNQV9DVFJMMV9TUEVFRDEwMDApID8gMTAwIDogMSkgKgotCQkJICAgICAgICgocmVnICYgTURJT19QTUFfQ1RSTDFfU1BFRUQxMDApID8gMTAwIDogMTApKTsKKwkJc3BlZWQgPSAoKChyZWcgJiBNRElPX1BNQV9DVFJMMV9TUEVFRDEwMDApID8gMTAwIDogMSkKKwkJCSAqICgocmVnICYgTURJT19QTUFfQ1RSTDFfU1BFRUQxMDApID8gMTAwIDogMTApKTsKIAkJZWNtZC0+ZHVwbGV4ID0gKHJlZyAmIE1ESU9fQ1RSTDFfRlVMTERQTFggfHwKLQkJCQllY21kLT5zcGVlZCA9PSBTUEVFRF8xMDAwMCk7CisJCQkJc3BlZWQgPT0gU1BFRURfMTAwMDApOwogCX0KIAorCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBzcGVlZCk7CisKIAkvKiAxMEdCQVNFLVQgTURJL01ESS1YICovCi0JaWYgKGVjbWQtPnBvcnQgPT0gUE9SVF9UUCAmJiBlY21kLT5zcGVlZCA9PSBTUEVFRF8xMDAwMCkgeworCWlmIChlY21kLT5wb3J0ID09IFBPUlRfVFAKKwkgICAgJiYgKGV0aHRvb2xfY21kX3NwZWVkKGVjbWQpID09IFNQRUVEXzEwMDAwKSkgewogCQlzd2l0Y2ggKG1kaW8tPm1kaW9fcmVhZChtZGlvLT5kZXYsIG1kaW8tPnBydGFkLCBNRElPX01NRF9QTUFQTUQsCiAJCQkJCU1ESU9fUE1BXzEwR0JUX1NXQVBQT0wpKSB7CiAJCWNhc2UgTURJT19QTUFfMTBHQlRfU1dBUFBPTF9BQk5YIHwgTURJT19QTUFfMTBHQlRfU1dBUFBPTF9DRE5YOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWlpLmMgYi9kcml2ZXJzL25ldC9taWkuYwppbmRleCAwYTZjNmEyLi5jNjJlNzgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9taWkuYworKysgYi9kcml2ZXJzL25ldC9taWkuYwpAQCAtNDksNiArNDksMTAgQEAKIAkJcmVzdWx0IHw9IEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZjsKIAlpZiAoYWR2ZXJ0ICYgQURWRVJUSVNFXzEwMEZVTEwpCiAJCXJlc3VsdCB8PSBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGw7CisJaWYgKGFkdmVydCAmIEFEVkVSVElTRV9QQVVTRV9DQVApCisJCXJlc3VsdCB8PSBBRFZFUlRJU0VEX1BhdXNlOworCWlmIChhZHZlcnQgJiBBRFZFUlRJU0VfUEFVU0VfQVNZTSkKKwkJcmVzdWx0IHw9IEFEVkVSVElTRURfQXN5bV9QYXVzZTsKIAogCXJldHVybiByZXN1bHQ7CiB9CkBAIC01OCw2ICs2Miw5IEBACiAgKiBAbWlpOiBNSUkgaW50ZXJmYWNlCiAgKiBAZWNtZDogcmVxdWVzdGVkIGV0aHRvb2xfY21kCiAgKgorICogVGhlIEBlY21kIHBhcmFtZXRlciBpcyBleHBlY3RlZCB0byBoYXZlIGJlZW4gY2xlYXJlZCBiZWZvcmUgY2FsbGluZworICogbWlpX2V0aHRvb2xfZ3NldCgpLgorICoKICAqIFJldHVybnMgMCBmb3Igc3VjY2VzcywgbmVnYXRpdmUgb24gZXJyb3IuCiAgKi8KIGludCBtaWlfZXRodG9vbF9nc2V0KHN0cnVjdCBtaWlfaWZfaW5mbyAqbWlpLCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpCkBAIC0xMTgsMjIgKzEyNSwyNSBAQAogCiAJCWlmIChuZWdvICYgKEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwgfAogCQkJICAgIEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYpKSB7Ci0JCQllY21kLT5zcGVlZCA9IFNQRUVEXzEwMDA7CisJCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgU1BFRURfMTAwMCk7CiAJCQllY21kLT5kdXBsZXggPSAhIShuZWdvICYgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCk7CiAJCX0gZWxzZSBpZiAobmVnbyAmIChBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwgfAogCQkJCSAgIEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZikpIHsKLQkJCWVjbWQtPnNwZWVkID0gU1BFRURfMTAwOworCQkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIFNQRUVEXzEwMCk7CiAJCQllY21kLT5kdXBsZXggPSAhIShuZWdvICYgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsKTsKIAkJfSBlbHNlIHsKLQkJCWVjbWQtPnNwZWVkID0gU1BFRURfMTA7CisJCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgU1BFRURfMTApOwogCQkJZWNtZC0+ZHVwbGV4ID0gISEobmVnbyAmIEFEVkVSVElTRURfMTBiYXNlVF9GdWxsKTsKIAkJfQogCX0gZWxzZSB7CiAJCWVjbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CiAKLQkJZWNtZC0+c3BlZWQgPSAoKGJtY3IgJiBCTUNSX1NQRUVEMTAwMCAmJgotCQkJCShibWNyICYgQk1DUl9TUEVFRDEwMCkgPT0gMCkgPyBTUEVFRF8xMDAwIDoKLQkJCSAgICAgICAoYm1jciAmIEJNQ1JfU1BFRUQxMDApID8gU1BFRURfMTAwIDogU1BFRURfMTApOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwKKwkJCQkgICAgICAoKGJtY3IgJiBCTUNSX1NQRUVEMTAwMCAmJgorCQkJCQkoYm1jciAmIEJNQ1JfU1BFRUQxMDApID09IDApID8KKwkJCQkgICAgICAgU1BFRURfMTAwMCA6CisJCQkJICAgICAgICgoYm1jciAmIEJNQ1JfU1BFRUQxMDApID8KKwkJCQkJU1BFRURfMTAwIDogU1BFRURfMTApKSk7CiAJCWVjbWQtPmR1cGxleCA9IChibWNyICYgQk1DUl9GVUxMRFBMWCkgPyBEVVBMRVhfRlVMTCA6IERVUExFWF9IQUxGOwogCX0KIApAQCAtMTU0LDEwICsxNjQsMTEgQEAKIGludCBtaWlfZXRodG9vbF9zc2V0KHN0cnVjdCBtaWlfaWZfaW5mbyAqbWlpLCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG1paS0+ZGV2OworCXUzMiBzcGVlZCA9IGV0aHRvb2xfY21kX3NwZWVkKGVjbWQpOwogCi0JaWYgKGVjbWQtPnNwZWVkICE9IFNQRUVEXzEwICYmCi0JICAgIGVjbWQtPnNwZWVkICE9IFNQRUVEXzEwMCAmJgotCSAgICBlY21kLT5zcGVlZCAhPSBTUEVFRF8xMDAwKQorCWlmIChzcGVlZCAhPSBTUEVFRF8xMCAmJgorCSAgICBzcGVlZCAhPSBTUEVFRF8xMDAgJiYKKwkgICAgc3BlZWQgIT0gU1BFRURfMTAwMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGVjbWQtPmR1cGxleCAhPSBEVVBMRVhfSEFMRiAmJiBlY21kLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTY5LDcgKzE4MCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChlY21kLT5hdXRvbmVnICE9IEFVVE9ORUdfRElTQUJMRSAmJiBlY21kLT5hdXRvbmVnICE9IEFVVE9ORUdfRU5BQkxFKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoKGVjbWQtPnNwZWVkID09IFNQRUVEXzEwMDApICYmICghbWlpLT5zdXBwb3J0c19nbWlpKSkKKwlpZiAoKHNwZWVkID09IFNQRUVEXzEwMDApICYmICghbWlpLT5zdXBwb3J0c19nbWlpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBpZ25vcmUgc3VwcG9ydGVkLCBtYXh0eHBrdCwgbWF4cnhwa3QgKi8KQEAgLTIyNyw5ICsyMzgsOSBAQAogCQlibWNyID0gbWlpLT5tZGlvX3JlYWQoZGV2LCBtaWktPnBoeV9pZCwgTUlJX0JNQ1IpOwogCQl0bXAgPSBibWNyICYgfihCTUNSX0FORU5BQkxFIHwgQk1DUl9TUEVFRDEwMCB8CiAJCQkgICAgICAgQk1DUl9TUEVFRDEwMDAgfCBCTUNSX0ZVTExEUExYKTsKLQkJaWYgKGVjbWQtPnNwZWVkID09IFNQRUVEXzEwMDApCisJCWlmIChzcGVlZCA9PSBTUEVFRF8xMDAwKQogCQkJdG1wIHw9IEJNQ1JfU1BFRUQxMDAwOwotCQllbHNlIGlmIChlY21kLT5zcGVlZCA9PSBTUEVFRF8xMDApCisJCWVsc2UgaWYgKHNwZWVkID09IFNQRUVEXzEwMCkKIAkJCXRtcCB8PSBCTUNSX1NQRUVEMTAwOwogCQlpZiAoZWNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKSB7CiAJCQl0bXAgfD0gQk1DUl9GVUxMRFBMWDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvZW5fZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9ldGh0b29sLmMKaW5kZXggZDU0YjdhYi4uMmU4NThlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9lbl9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9ldGh0b29sLmMKQEAgLTU3LDM3ICs1Nyw2IEBACiAJZHJ2aW5mby0+ZWVkdW1wX2xlbiA9IDA7CiB9CiAKLXN0YXRpYyB1MzIgbWx4NF9lbl9nZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9UU08pICE9IDA7Ci19Ci0KLXN0YXRpYyBpbnQgbWx4NF9lbl9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKGRhdGEpIHsKLQkJaWYgKCFwcml2LT5tZGV2LT5MU09fc3VwcG9ydCkKLQkJCXJldHVybiAtRVBFUk07Ci0JCWRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082KTsKLQl9IGVsc2UKLQkJZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHUzMiBtbHg0X2VuX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuIHByaXYtPnJ4X2NzdW07Ci19Ci0KLXN0YXRpYyBpbnQgbWx4NF9lbl9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlwcml2LT5yeF9jc3VtID0gKGRhdGEgIT0gMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBjb25zdCBjaGFyIG1haW5fc3RyaW5nc1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7CiAJInJ4X3BhY2tldHMiLCAidHhfcGFja2V0cyIsICJyeF9ieXRlcyIsICJ0eF9ieXRlcyIsICJyeF9lcnJvcnMiLAogCSJ0eF9lcnJvcnMiLCAicnhfZHJvcHBlZCIsICJ0eF9kcm9wcGVkIiwgIm11bHRpY2FzdCIsICJjb2xsaXNpb25zIiwKQEAgLTI5NiwxMCArMjY1LDEwIEBACiAKIAl0cmFuc190eXBlID0gcHJpdi0+cG9ydF9zdGF0ZS50cmFuc2NpdmVyOwogCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKLQkJY21kLT5zcGVlZCA9IHByaXYtPnBvcnRfc3RhdGUubGlua19zcGVlZDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgcHJpdi0+cG9ydF9zdGF0ZS5saW5rX3NwZWVkKTsKIAkJY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKIAl9IGVsc2UgewotCQljbWQtPnNwZWVkID0gLTE7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIC0xKTsKIAkJY21kLT5kdXBsZXggPSAtMTsKIAl9CiAKQEAgLTMyMyw3ICsyOTIsOCBAQAogc3RhdGljIGludCBtbHg0X2VuX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKIAlpZiAoKGNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgfHwKLQkgICAgKGNtZC0+c3BlZWQgIT0gU1BFRURfMTAwMDApIHx8IChjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkpCisJICAgIChldGh0b29sX2NtZF9zcGVlZChjbWQpICE9IFNQRUVEXzEwMDAwKSB8fAorCSAgICAoY21kLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIE5vdGhpbmcgdG8gY2hhbmdlICovCkBAIC00ODMsMTcgKzQ1Myw3IEBACiAJLmdldF9kcnZpbmZvID0gbWx4NF9lbl9nZXRfZHJ2aW5mbywKIAkuZ2V0X3NldHRpbmdzID0gbWx4NF9lbl9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncyA9IG1seDRfZW5fc2V0X3NldHRpbmdzLAotI2lmZGVmIE5FVElGX0ZfVFNPCi0JLmdldF90c28gPSBtbHg0X2VuX2dldF90c28sCi0JLnNldF90c28gPSBtbHg0X2VuX3NldF90c28sCi0jZW5kaWYKLQkuZ2V0X3NnID0gZXRodG9vbF9vcF9nZXRfc2csCi0JLnNldF9zZyA9IGV0aHRvb2xfb3Bfc2V0X3NnLAogCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCi0JLmdldF9yeF9jc3VtID0gbWx4NF9lbl9nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0gPSBtbHg0X2VuX3NldF9yeF9jc3VtLAotCS5nZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCi0JLnNldF90eF9jc3VtID0gZXRodG9vbF9vcF9zZXRfdHhfaXB2Nl9jc3VtLAogCS5nZXRfc3RyaW5ncyA9IG1seDRfZW5fZ2V0X3N0cmluZ3MsCiAJLmdldF9zc2V0X2NvdW50ID0gbWx4NF9lbl9nZXRfc3NldF9jb3VudCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBtbHg0X2VuX2dldF9ldGh0b29sX3N0YXRzLApAQCAtNTA4LDcgKzQ2OCw2IEBACiAJLnNldF9wYXVzZXBhcmFtID0gbWx4NF9lbl9zZXRfcGF1c2VwYXJhbSwKIAkuZ2V0X3JpbmdwYXJhbSA9IG1seDRfZW5fZ2V0X3JpbmdwYXJhbSwKIAkuc2V0X3JpbmdwYXJhbSA9IG1seDRfZW5fc2V0X3JpbmdwYXJhbSwKLQkuZ2V0X2ZsYWdzID0gZXRodG9vbF9vcF9nZXRfZmxhZ3MsCiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvZW5fbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9tbHg0L2VuX25ldGRldi5jCmluZGV4IDc3MDYzZjkuLjYxODUwYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvZW5fbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9uZXRkZXYuYwpAQCAtMTA4Myw3ICsxMDgzLDYgQEAKIAlwcml2LT5wcm9mID0gcHJvZjsKIAlwcml2LT5wb3J0ID0gcG9ydDsKIAlwcml2LT5wb3J0X3VwID0gZmFsc2U7Ci0JcHJpdi0+cnhfY3N1bSA9IDE7CiAJcHJpdi0+ZmxhZ3MgPSBwcm9mLT5mbGFnczsKIAlwcml2LT50eF9yaW5nX251bSA9IHByb2YtPnR4X3JpbmdfbnVtOwogCXByaXYtPnJ4X3JpbmdfbnVtID0gcHJvZi0+cnhfcmluZ19udW07CkBAIC0xMTQxLDIxICsxMTQwLDE2IEBACiAJLyoKIAkgKiBTZXQgZHJpdmVyIGZlYXR1cmVzCiAJICovCi0JZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHOwotCWRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1NHOwotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU07Ci0JZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNOwotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1RYIHwKLQkJCSBORVRJRl9GX0hXX1ZMQU5fUlggfAotCQkJIE5FVElGX0ZfSFdfVkxBTl9GSUxURVI7Ci0JZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0dSTzsKLQlpZiAobWRldi0+TFNPX3N1cHBvcnQpIHsKLQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKLQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7Ci0JCWRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKLQkJZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKLQl9CisJZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTTsKKwlpZiAobWRldi0+TFNPX3N1cHBvcnQpCisJCWRldi0+aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzY7CisKKwlkZXYtPnZsYW5fZmVhdHVyZXMgPSBkZXYtPmh3X2ZlYXR1cmVzOworCisJZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX1JYQ1NVTTsKKwlkZXYtPmZlYXR1cmVzID0gZGV2LT5od19mZWF0dXJlcyB8IE5FVElGX0ZfSElHSERNQSB8CisJCQlORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlggfAorCQkJTkVUSUZfRl9IV19WTEFOX0ZJTFRFUjsKIAogCW1kZXYtPnBuZGV2W3BvcnRdID0gZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2VuX3J4LmMgYi9kcml2ZXJzL25ldC9tbHg0L2VuX3J4LmMKaW5kZXggNjJkZDIxYi4uMjc3MjE1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9lbl9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvZW5fcnguYwpAQCAtNTg0LDcgKzU4NCw3IEBACiAJCXJpbmctPmJ5dGVzICs9IGxlbmd0aDsKIAkJcmluZy0+cGFja2V0cysrOwogCi0JCWlmIChsaWtlbHkocHJpdi0+cnhfY3N1bSkpIHsKKwkJaWYgKGxpa2VseShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pKSB7CiAJCQlpZiAoKGNxZS0+c3RhdHVzICYgY3B1X3RvX2JlMTYoTUxYNF9DUUVfU1RBVFVTX0lQT0spKSAmJgogCQkJICAgIChjcWUtPmNoZWNrc3VtID09IGNwdV90b19iZTE2KDB4ZmZmZikpKSB7CiAJCQkJcHJpdi0+cG9ydF9zdGF0cy5yeF9jaGtzdW1fZ29vZCsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9tbHg0X2VuLmggYi9kcml2ZXJzL25ldC9tbHg0L21seDRfZW4uaAppbmRleCBlMzBmNjA5Li4wYjUxNTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L21seDRfZW4uaAorKysgYi9kcml2ZXJzL25ldC9tbHg0L21seDRfZW4uaApAQCAtNDUxLDcgKzQ1MSw2IEBACiAJaW50IHJlZ2lzdGVyZWQ7CiAJaW50IGFsbG9jYXRlZDsKIAlpbnQgc3RyaWRlOwotCWludCByeF9jc3VtOwogCXU2NCBtYWM7CiAJaW50IG1hY19pbmRleDsKIAl1bnNpZ25lZCBtYXhfbXR1OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYyBiL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKaW5kZXggMzQ0MjViOS4uYTVkOWIxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYworKysgYi9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCkBAIC0xNDQ0LDEzICsxNDQ0LDEzIEBACiAJY21kLT5hZHZlcnRpc2luZyA9IEFEVkVSVElTRURfTUlJOwogCXN3aXRjaCAocG9ydF9zdGF0dXMgJiBQT1JUX1NQRUVEX01BU0spIHsKIAljYXNlIFBPUlRfU1BFRURfMTA6Ci0JCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgU1BFRURfMTApOwogCQlicmVhazsKIAljYXNlIFBPUlRfU1BFRURfMTAwOgotCQljbWQtPnNwZWVkID0gU1BFRURfMTAwOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBTUEVFRF8xMDApOwogCQlicmVhazsKIAljYXNlIFBPUlRfU1BFRURfMTAwMDoKLQkJY21kLT5zcGVlZCA9IFNQRUVEXzEwMDA7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIFNQRUVEXzEwMDApOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQljbWQtPnNwZWVkID0gLTE7CkBAIC0xNTc1LDE4ICsxNTc1LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MzIKLW12NjQzeHhfZXRoX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybiAhIShyZGxwKG1wLCBQT1JUX0NPTkZJRykgJiAweDAyMDAwMDAwKTsKLX0KIAogc3RhdGljIGludAotbXY2NDN4eF9ldGhfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4X2NzdW0pCittdjY0M3h4X2V0aF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZlYXR1cmVzKQogewogCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIHJ4X2NzdW0gPSBmZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNOwogCiAJd3JscChtcCwgUE9SVF9DT05GSUcsIHJ4X2NzdW0gPyAweDAyMDAwMDAwIDogMHgwMDAwMDAwMCk7CiAKQEAgLTE2MzQsMTEgKzE2MjgsNiBAQAogCX0KIH0KIAotc3RhdGljIGludCBtdjY0M3h4X2V0aF9zZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0JcmV0dXJuIGV0aHRvb2xfb3Bfc2V0X2ZsYWdzKGRldiwgZGF0YSwgRVRIX0ZMQUdfTFJPKTsKLX0KLQogc3RhdGljIGludCBtdjY0M3h4X2V0aF9nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3NldCkKIHsKIAlpZiAoc3NldCA9PSBFVEhfU1NfU1RBVFMpCkBAIC0xNjU3LDE0ICsxNjQ2LDggQEAKIAkuc2V0X2NvYWxlc2NlCQk9IG12NjQzeHhfZXRoX3NldF9jb2FsZXNjZSwKIAkuZ2V0X3JpbmdwYXJhbQkJPSBtdjY0M3h4X2V0aF9nZXRfcmluZ3BhcmFtLAogCS5zZXRfcmluZ3BhcmFtCQk9IG12NjQzeHhfZXRoX3NldF9yaW5ncGFyYW0sCi0JLmdldF9yeF9jc3VtCQk9IG12NjQzeHhfZXRoX2dldF9yeF9jc3VtLAotCS5zZXRfcnhfY3N1bQkJPSBtdjY0M3h4X2V0aF9zZXRfcnhfY3N1bSwKLQkuc2V0X3R4X2NzdW0JCT0gZXRodG9vbF9vcF9zZXRfdHhfY3N1bSwKLQkuc2V0X3NnCQkJPSBldGh0b29sX29wX3NldF9zZywKIAkuZ2V0X3N0cmluZ3MJCT0gbXY2NDN4eF9ldGhfZ2V0X3N0cmluZ3MsCiAJLmdldF9ldGh0b29sX3N0YXRzCT0gbXY2NDN4eF9ldGhfZ2V0X2V0aHRvb2xfc3RhdHMsCi0JLmdldF9mbGFncwkJPSBldGh0b29sX29wX2dldF9mbGFncywKLQkuc2V0X2ZsYWdzCQk9IG12NjQzeHhfZXRoX3NldF9mbGFncywKIAkuZ2V0X3NzZXRfY291bnQJCT0gbXY2NDN4eF9ldGhfZ2V0X3NzZXRfY291bnQsCiB9OwogCkBAIC0yMjY0LDcgKzIyNDcsNyBAQAogCSAqIGZyYW1lcyB0byBSWCBxdWV1ZSAjMCwgYW5kIGluY2x1ZGUgdGhlIHBzZXVkby1oZWFkZXIgd2hlbgogCSAqIGNhbGN1bGF0aW5nIHJlY2VpdmUgY2hlY2tzdW1zLgogCSAqLwotCXdybHAobXAsIFBPUlRfQ09ORklHLCAweDAyMDAwMDAwKTsKKwltdjY0M3h4X2V0aF9zZXRfZmVhdHVyZXMobXAtPmRldiwgbXAtPmRldi0+ZmVhdHVyZXMpOwogCiAJLyoKIAkgKiBUcmVhdCBCUERVcyBhcyBub3JtYWwgbXVsdGljYXN0cywgYW5kIGRpc2FibGUgcGFydGl0aW9uIG1vZGUuCkBAIC0yODQ4LDYgKzI4MzEsNyBAQAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAogCS5uZG9fZG9faW9jdGwJCT0gbXY2NDN4eF9ldGhfaW9jdGwsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IG12NjQzeHhfZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfZmVhdHVyZXMJPSBtdjY0M3h4X2V0aF9zZXRfZmVhdHVyZXMsCiAJLm5kb190eF90aW1lb3V0CQk9IG12NjQzeHhfZXRoX3R4X3RpbWVvdXQsCiAJLm5kb19nZXRfc3RhdHMJCT0gbXY2NDN4eF9ldGhfZ2V0X3N0YXRzLAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCkBAIC0yOTMwLDcgKzI5MTQsOSBAQAogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAyICogSFo7CiAJZGV2LT5iYXNlX2FkZHIgPSAwOwogCi0JZGV2LT5mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU07CisJZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfAorCQlORVRJRl9GX1JYQ1NVTSB8IE5FVElGX0ZfTFJPOworCWRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU07CiAJZGV2LT52bGFuX2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTTsKIAogCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jIGIvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYwppbmRleCAxNDQ2ZGU1Li5iZjg0ODQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCisrKyBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKQEAgLTY1LDYgKzY1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxuZXQvdGNwLmg+CkBAIC0yMDUsNyArMjA2LDYgQEAKIAlpbnQgdHhfYm91bmRhcnk7CS8qIGJvdW5kYXJ5IHRyYW5zbWl0cyBjYW5ub3QgY3Jvc3MgKi8KIAlpbnQgbnVtX3NsaWNlczsKIAlpbnQgcnVubmluZzsJCS8qIHJ1bm5pbmc/ICAgICAgICAgICAgICovCi0JaW50IGNzdW1fZmxhZzsJCS8qIHJ4X2NzdW1zPyAgICAgICAgICAgICovCiAJaW50IHNtYWxsX2J5dGVzOwogCWludCBiaWdfYnl0ZXM7CiAJaW50IG1heF9pbnRyX3Nsb3RzOwpAQCAtMTM4Niw3ICsxMzg2LDcgQEAKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwogCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCBzcyAtICZtZ3AtPnNzWzBdKTsKIAotCWlmIChtZ3AtPmNzdW1fZmxhZykgeworCWlmIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pIHsKIAkJaWYgKChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkgfHwKIAkJICAgIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSkgewogCQkJc2tiLT5jc3VtID0gY3N1bTsKQEAgLTE2NDUsNyArMTY0NSw3IEBACiAJaW50IGk7CiAKIAljbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7Ci0JY21kLT5zcGVlZCA9IFNQRUVEXzEwMDAwOworCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIFNQRUVEXzEwMDAwKTsKIAljbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOwogCiAJLyoKQEAgLTE3NTcsNDMgKzE3NTcsNiBAQAogCXJpbmctPnR4X3BlbmRpbmcgPSByaW5nLT50eF9tYXhfcGVuZGluZzsKIH0KIAotc3RhdGljIHUzMiBteXJpMTBnZV9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3AgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0JaWYgKG1ncC0+Y3N1bV9mbGFnKQotCQlyZXR1cm4gMTsKLQllbHNlCi0JCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG15cmkxMGdlX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBjc3VtX2VuYWJsZWQpCi17Ci0Jc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAoY3N1bV9lbmFibGVkKQotCQltZ3AtPmNzdW1fZmxhZyA9IE1YR0VGV19GTEFHU19DS1NVTTsKLQllbHNlIHsKLQkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9MUk87Ci0JCW1ncC0+Y3N1bV9mbGFnID0gMDsKLQotCX0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG15cmkxMGdlX3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIHRzb19lbmFibGVkKQotewotCXN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3AgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXUzMiBmbGFncyA9IG1ncC0+ZmVhdHVyZXMgJiAoTkVUSUZfRl9UU082IHwgTkVUSUZfRl9UU08pOwotCi0JaWYgKHRzb19lbmFibGVkKQotCQluZXRkZXYtPmZlYXR1cmVzIHw9IGZsYWdzOwotCWVsc2UKLQkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+ZmxhZ3M7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBjb25zdCBjaGFyIG15cmkxMGdlX2dzdHJpbmdzX21haW5fc3RhdHNbXVtFVEhfR1NUUklOR19MRU5dID0gewogCSJyeF9wYWNrZXRzIiwgInR4X3BhY2tldHMiLCAicnhfYnl0ZXMiLCAidHhfYnl0ZXMiLCAicnhfZXJyb3JzIiwKIAkidHhfZXJyb3JzIiwgInJ4X2Ryb3BwZWQiLCAidHhfZHJvcHBlZCIsICJtdWx0aWNhc3QiLCAiY29sbGlzaW9ucyIsCkBAIC0xOTQ0LDExICsxOTA3LDYgQEAKIAlyZXR1cm4gbWdwLT5tc2dfZW5hYmxlOwogfQogCi1zdGF0aWMgaW50IG15cmkxMGdlX3NldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgdmFsdWUpCi17Ci0JcmV0dXJuIGV0aHRvb2xfb3Bfc2V0X2ZsYWdzKG5ldGRldiwgdmFsdWUsIEVUSF9GTEFHX0xSTyk7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbXlyaTEwZ2VfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncyA9IG15cmkxMGdlX2dldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8gPSBteXJpMTBnZV9nZXRfZHJ2aW5mbywKQEAgLTE5NTcsMTkgKzE5MTUsMTIgQEAKIAkuZ2V0X3BhdXNlcGFyYW0gPSBteXJpMTBnZV9nZXRfcGF1c2VwYXJhbSwKIAkuc2V0X3BhdXNlcGFyYW0gPSBteXJpMTBnZV9zZXRfcGF1c2VwYXJhbSwKIAkuZ2V0X3JpbmdwYXJhbSA9IG15cmkxMGdlX2dldF9yaW5ncGFyYW0sCi0JLmdldF9yeF9jc3VtID0gbXlyaTEwZ2VfZ2V0X3J4X2NzdW0sCi0JLnNldF9yeF9jc3VtID0gbXlyaTEwZ2Vfc2V0X3J4X2NzdW0sCi0JLnNldF90eF9jc3VtID0gZXRodG9vbF9vcF9zZXRfdHhfaHdfY3N1bSwKLQkuc2V0X3NnID0gZXRodG9vbF9vcF9zZXRfc2csCi0JLnNldF90c28gPSBteXJpMTBnZV9zZXRfdHNvLAogCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiAJLmdldF9zdHJpbmdzID0gbXlyaTEwZ2VfZ2V0X3N0cmluZ3MsCiAJLmdldF9zc2V0X2NvdW50ID0gbXlyaTEwZ2VfZ2V0X3NzZXRfY291bnQsCiAJLmdldF9ldGh0b29sX3N0YXRzID0gbXlyaTEwZ2VfZ2V0X2V0aHRvb2xfc3RhdHMsCiAJLnNldF9tc2dsZXZlbCA9IG15cmkxMGdlX3NldF9tc2dsZXZlbCwKIAkuZ2V0X21zZ2xldmVsID0gbXlyaTEwZ2VfZ2V0X21zZ2xldmVsLAotCS5nZXRfZmxhZ3MgPSBldGh0b29sX29wX2dldF9mbGFncywKLQkuc2V0X2ZsYWdzID0gbXlyaTEwZ2Vfc2V0X2ZsYWdzCiB9OwogCiBzdGF0aWMgaW50IG15cmkxMGdlX2FsbG9jYXRlX3JpbmdzKHN0cnVjdCBteXJpMTBnZV9zbGljZV9zdGF0ZSAqc3MpCkBAIC0zMTM2LDYgKzMwODcsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHUzMiBteXJpMTBnZV9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZlYXR1cmVzKQoreworCWlmICghKGZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pKQorCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9MUk87CisKKwlyZXR1cm4gZmVhdHVyZXM7Cit9CisKIHN0YXRpYyBpbnQgbXlyaTEwZ2VfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKIAlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTM4MzQsNiArMzc5Myw3IEBACiAJLm5kb19nZXRfc3RhdHMJCT0gbXlyaTEwZ2VfZ2V0X3N0YXRzLAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAogCS5uZG9fY2hhbmdlX210dQkJPSBteXJpMTBnZV9jaGFuZ2VfbXR1LAorCS5uZG9fZml4X2ZlYXR1cmVzCT0gbXlyaTEwZ2VfZml4X2ZlYXR1cmVzLAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gbXlyaTEwZ2Vfc2V0X211bHRpY2FzdF9saXN0LAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gbXlyaTEwZ2Vfc2V0X21hY19hZGRyZXNzLAogfTsKQEAgLTM4NjAsNyArMzgyMCw2IEBACiAJbWdwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAltZ3AtPmRldiA9IG5ldGRldjsKIAltZ3AtPnBkZXYgPSBwZGV2OwotCW1ncC0+Y3N1bV9mbGFnID0gTVhHRUZXX0ZMQUdTX0NLU1VNOwogCW1ncC0+cGF1c2UgPSBteXJpMTBnZV9mbG93X2NvbnRyb2w7CiAJbWdwLT5pbnRyX2NvYWxfZGVsYXkgPSBteXJpMTBnZV9pbnRyX2NvYWxfZGVsYXk7CiAJbWdwLT5tc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQobXlyaTEwZ2VfZGVidWcsIE1ZUkkxMEdFX01TR19ERUZBVUxUKTsKQEAgLTM5NzYsMTEgKzM5MzUsMTEgQEAKIAluZXRkZXYtPm5ldGRldl9vcHMgPSAmbXlyaTEwZ2VfbmV0ZGV2X29wczsKIAluZXRkZXYtPm10dSA9IG15cmkxMGdlX2luaXRpYWxfbXR1OwogCW5ldGRldi0+YmFzZV9hZGRyID0gbWdwLT5pb21lbV9iYXNlOwotCW5ldGRldi0+ZmVhdHVyZXMgPSBtZ3AtPmZlYXR1cmVzOworCW5ldGRldi0+aHdfZmVhdHVyZXMgPSBtZ3AtPmZlYXR1cmVzIHwgTkVUSUZfRl9MUk8gfCBORVRJRl9GX1JYQ1NVTTsKKwluZXRkZXYtPmZlYXR1cmVzID0gbmV0ZGV2LT5od19mZWF0dXJlczsKIAogCWlmIChkYWNfZW5hYmxlZCkKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7Ci0JbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xSTzsKIAogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBtZ3AtPmZlYXR1cmVzOwogCWlmIChtZ3AtPmZ3X3Zlcl90aW55IDwgMzcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uYXRzZW1pLmMgYi9kcml2ZXJzL25ldC9uYXRzZW1pLmMKaW5kZXggMTA3NDIzMS4uYjc4YmUwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmF0c2VtaS5jCisrKyBiL2RyaXZlcnMvbmV0L25hdHNlbWkuYwpAQCAtMjgyMCw3ICsyODIwLDcgQEAKIAl1MzIgdG1wOwogCiAJZWNtZC0+cG9ydCAgICAgICAgPSBkZXYtPmlmX3BvcnQ7Ci0JZWNtZC0+c3BlZWQgICAgICAgPSBucC0+c3BlZWQ7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIG5wLT5zcGVlZCk7CiAJZWNtZC0+ZHVwbGV4ICAgICAgPSBucC0+ZHVwbGV4OwogCWVjbWQtPmF1dG9uZWcgICAgID0gbnAtPmF1dG9uZWc7CiAJZWNtZC0+YWR2ZXJ0aXNpbmcgPSAwOwpAQCAtMjg3OCw5ICsyODc4LDkgQEAKIAkJdG1wID0gbWlpX253YXlfcmVzdWx0KAogCQkJbnAtPmFkdmVydGlzaW5nICYgbWRpb19yZWFkKGRldiwgTUlJX0xQQSkpOwogCQlpZiAodG1wID09IExQQV8xMDBGVUxMIHx8IHRtcCA9PSBMUEFfMTAwSEFMRikKLQkJCWVjbWQtPnNwZWVkICA9IFNQRUVEXzEwMDsKKwkJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBTUEVFRF8xMDApOwogCQllbHNlCi0JCQllY21kLT5zcGVlZCAgPSBTUEVFRF8xMDsKKwkJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBTUEVFRF8xMCk7CiAJCWlmICh0bXAgPT0gTFBBXzEwMEZVTEwgfHwgdG1wID09IExQQV8xMEZVTEwpCiAJCQllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKIAkJZWxzZQpAQCAtMjkwOCw3ICsyOTA4LDggQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfSBlbHNlIGlmIChlY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSkgewotCQlpZiAoZWNtZC0+c3BlZWQgIT0gU1BFRURfMTAgJiYgZWNtZC0+c3BlZWQgIT0gU1BFRURfMTAwKQorCQl1MzIgc3BlZWQgPSBldGh0b29sX2NtZF9zcGVlZChlY21kKTsKKwkJaWYgKHNwZWVkICE9IFNQRUVEXzEwICYmIHNwZWVkICE9IFNQRUVEXzEwMCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAoZWNtZC0+ZHVwbGV4ICE9IERVUExFWF9IQUxGICYmIGVjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMjk1Niw3ICsyOTU3LDcgQEAKIAkJaWYgKGVjbWQtPmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsKQogCQkJbnAtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRV8xMDBGVUxMOwogCX0gZWxzZSB7Ci0JCW5wLT5zcGVlZCAgPSBlY21kLT5zcGVlZDsKKwkJbnAtPnNwZWVkICA9IGV0aHRvb2xfY21kX3NwZWVkKGVjbWQpOwogCQlucC0+ZHVwbGV4ID0gZWNtZC0+ZHVwbGV4OwogCQkvKiB1c2VyIG92ZXJyaWRpbmcgdGhlIGluaXRpYWwgZnVsbCBkdXBsZXggcGFybT8gKi8KIAkJaWYgKG5wLT5kdXBsZXggPT0gRFVQTEVYX0hBTEYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZS1oODMwMC5jIGIvZHJpdmVycy9uZXQvbmUtaDgzMDAuYwppbmRleCAzMGJlOGM2Li43Mjk4YTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZS1oODMwMC5jCisrKyBiL2RyaXZlcnMvbmV0L25lLWg4MzAwLmMKQEAgLTE2Nyw3ICsxNjcsNyBAQAogI2lmbmRlZiBNT0RVTEUKIHN0cnVjdCBuZXRfZGV2aWNlICogX19pbml0IG5lX3Byb2JlKGludCB1bml0KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhbGxvY19laV9uZXRkZXYoKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gX19fX2FsbG9jX2VpX25ldGRldigwKTsKIAlpbnQgZXJyOwogCiAJaWYgKCFkZXYpCkBAIC0xOTcsMTUgKzE5NywxNSBAQAogCS5uZG9fb3BlbgkJPSBuZV9vcGVuLAogCS5uZG9fc3RvcAkJPSBuZV9jbG9zZSwKIAotCS5uZG9fc3RhcnRfeG1pdAkJPSBlaV9zdGFydF94bWl0LAotCS5uZG9fdHhfdGltZW91dAkJPSBlaV90eF90aW1lb3V0LAotCS5uZG9fZ2V0X3N0YXRzCQk9IGVpX2dldF9zdGF0cywKLQkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGVpX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gX19laV9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSBfX2VpX3R4X3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMJCT0gX19laV9nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBfX2VpX3NldF9tdWx0aWNhc3RfbGlzdCwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKLQkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBldGhfbWFjX2FkZHIsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBlaV9wb2xsLAorCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gX19laV9wb2xsLAogI2VuZGlmCiB9OwogCkBAIC02MzcsNyArNjM3LDcgQEAKIAlpbnQgZXJyOwogCiAJZm9yICh0aGlzX2RldiA9IDA7IHRoaXNfZGV2IDwgTUFYX05FX0NBUkRTOyB0aGlzX2RldisrKSB7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhbGxvY19laV9uZXRkZXYoKTsKKwkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IF9fX19hbGxvY19laV9uZXRkZXYoMCk7CiAJCWlmICghZGV2KQogCQkJYnJlYWs7CiAJCWlmIChpb1t0aGlzX2Rldl0pIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25lMzIxMC5jIGIvZHJpdmVycy9uZXQvbmUzMjEwLmMKaW5kZXggMjQzZWQyYS4uZTg5ODRiMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25lMzIxMC5jCisrKyBiL2RyaXZlcnMvbmV0L25lMzIxMC5jCkBAIC04MCwxNyArODAsMjAgQEAKIAogI2RlZmluZSBORTMyMTBfREVCVUcJMHgwCiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGlycV9tYXBbXSBfX2luaXRkYXRhID0gezE1LCAxMiwgMTEsIDEwLCA5LCA3LCA1LCAzfTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgc2htZW1fbWFwW10gX19pbml0ZGF0YSA9IHsweGZmMCwgMHhmZTAsIDB4ZmZmMCwgMHhkOCwgMHhmZmUwLCAweGZmYzAsIDB4ZDAsIDB4MH07Ci1zdGF0aWMgY29uc3QgY2hhciAqaWZtYXBbXSBfX2luaXRkYXRhID0geyJVVFAiLCAiPyIsICJCTkMiLCAiQVVJIn07Ci1zdGF0aWMgaW50IGlmbWFwX3ZhbFtdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBpcnFfbWFwW10gX19kZXZpbml0Y29uc3QgPQorCXsgMTUsIDEyLCAxMSwgMTAsIDksIDcsIDUsIDMgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2htZW1fbWFwW10gX19kZXZpbml0Y29uc3QgPQorCXsgMHhmZjAsIDB4ZmUwLCAweGZmZjAsIDB4ZDgsIDB4ZmZlMCwgMHhmZmMwLCAweGQwLCAweDAgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBpZm1hcFtdIF9fZGV2aW5pdGNvbnN0ID0KKwl7ICJVVFAiLCAiPyIsICJCTkMiLCAiQVVJIiB9Oworc3RhdGljIGNvbnN0IGludCBpZm1hcF92YWxbXSBfX2RldmluaXRjb25zdCA9IHsKIAkJSUZfUE9SVF8xMEJBU0VULAogCQlJRl9QT1JUX1VOS05PV04sCiAJCUlGX1BPUlRfMTBCQVNFMiwKIAkJSUZfUE9SVF9BVUksCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBuZTMyMTBfZWlzYV9wcm9iZSAoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2RldmluaXQgbmUzMjEwX2Vpc2FfcHJvYmUgKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKIAl1bnNpZ25lZCBsb25nIGlvYWRkciwgcGh5c19tZW07CiAJaW50IGksIHJldHZhbCwgcG9ydF9pbmRleDsKQEAgLTMxMyw3ICszMTYsNyBAQAogCW1lbWNweV90b2lvKHNobWVtLCBidWYsIGNvdW50KTsKIH0KIAotc3RhdGljIHN0cnVjdCBlaXNhX2RldmljZV9pZCBuZTMyMTBfaWRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGVpc2FfZGV2aWNlX2lkIG5lMzIxMF9pZHNbXSBfX2RldmluaXRjb25zdCA9IHsKIAl7ICJFR0wwMTAxIiB9LAogCXsgIk5WTDE4MDEiIH0sCiAJeyAiIiB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCmluZGV4IGRmYjY3ZWIuLmE4M2UxMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYworKysgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKQEAgLTI0MiwzNCArMjQyLDYgQEAKIH0KIAogLyoKLSAqIFdyYXBwZXIgb3ZlciBzaW1wbGVfc3RydG9sIChiYXNlIDEwKSB3aXRoIHNhbml0eSBhbmQgcmFuZ2UgY2hlY2tpbmcuCi0gKiBXZSByZXR1cm4gKHNpZ25lZCkgbG9uZyBvbmx5IGJlY2F1c2Ugd2UgbWF5IHdhbnQgdG8gcmV0dXJuIGVycm9ycy4KLSAqIERvIG5vdCB1c2UgdGhpcyB0byBjb252ZXJ0IG51bWJlcnMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSBuZWdhdGl2ZS4KLSAqLwotc3RhdGljIGxvbmcgc3RydG9sMTBfY2hlY2tfcmFuZ2UoY29uc3QgY2hhciAqY3AsIGxvbmcgbWluLCBsb25nIG1heCkKLXsKLQlsb25nIHJldDsKLQljaGFyICpwID0gKGNoYXIgKikgY3A7Ci0KLQlXQVJOX09OKG1pbiA8IDApOwotCVdBUk5fT04obWF4IDwgbWluKTsKLQotCXJldCA9IHNpbXBsZV9zdHJ0b2wocCwgJnAsIDEwKTsKLQotCWlmICgqcCAmJiAoKnAgIT0gJ1xuJykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJuZXRjb25zb2xlOiBpbnZhbGlkIGlucHV0XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlmICgocmV0IDwgbWluKSB8fCAocmV0ID4gbWF4KSkgewotCQlwcmludGsoS0VSTl9FUlIgIm5ldGNvbnNvbGU6IGlucHV0ICVsZCBtdXN0IGJlIGJldHdlZW4gIgotCQkJCSIlbGQgYW5kICVsZFxuIiwgcmV0LCBtaW4sIG1heCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qCiAgKiBBdHRyaWJ1dGUgb3BlcmF0aW9ucyBmb3IgbmV0Y29uc29sZV90YXJnZXQuCiAgKi8KIApAQCAtMzI3LDEyICsyOTksMTQgQEAKIAkJCSAgICAgY29uc3QgY2hhciAqYnVmLAogCQkJICAgICBzaXplX3QgY291bnQpCiB7CisJaW50IGVuYWJsZWQ7CiAJaW50IGVycjsKLQlsb25nIGVuYWJsZWQ7CiAKLQllbmFibGVkID0gc3RydG9sMTBfY2hlY2tfcmFuZ2UoYnVmLCAwLCAxKTsKLQlpZiAoZW5hYmxlZCA8IDApCi0JCXJldHVybiBlbmFibGVkOworCWVyciA9IGtzdHJ0b2ludChidWYsIDEwLCAmZW5hYmxlZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJaWYgKGVuYWJsZWQgPCAwIHx8IGVuYWJsZWQgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChlbmFibGVkKSB7CS8qIDEgKi8KIApAQCAtMzg0LDggKzM1OCw3IEBACiAJCQkJY29uc3QgY2hhciAqYnVmLAogCQkJCXNpemVfdCBjb3VudCkKIHsKLQlsb25nIGxvY2FsX3BvcnQ7Ci0jZGVmaW5lIF9fVTE2X01BWAkoKF9fdTE2KSB+MFUpCisJaW50IHJ2OwogCiAJaWYgKG50LT5lbmFibGVkKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibmV0Y29uc29sZTogdGFyZ2V0ICglcykgaXMgZW5hYmxlZCwgIgpAQCAtMzk0LDEyICszNjcsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlsb2NhbF9wb3J0ID0gc3RydG9sMTBfY2hlY2tfcmFuZ2UoYnVmLCAwLCBfX1UxNl9NQVgpOwotCWlmIChsb2NhbF9wb3J0IDwgMCkKLQkJcmV0dXJuIGxvY2FsX3BvcnQ7Ci0KLQludC0+bnAubG9jYWxfcG9ydCA9IGxvY2FsX3BvcnQ7Ci0KKwlydiA9IGtzdHJ0b3UxNihidWYsIDEwLCAmbnQtPm5wLmxvY2FsX3BvcnQpOworCWlmIChydiA8IDApCisJCXJldHVybiBydjsKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KIApAQCAtNDA3LDggKzM3Nyw3IEBACiAJCQkJIGNvbnN0IGNoYXIgKmJ1ZiwKIAkJCQkgc2l6ZV90IGNvdW50KQogewotCWxvbmcgcmVtb3RlX3BvcnQ7Ci0jZGVmaW5lIF9fVTE2X01BWAkoKF9fdTE2KSB+MFUpCisJaW50IHJ2OwogCiAJaWYgKG50LT5lbmFibGVkKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibmV0Y29uc29sZTogdGFyZ2V0ICglcykgaXMgZW5hYmxlZCwgIgpAQCAtNDE3LDEyICszODYsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlyZW1vdGVfcG9ydCA9IHN0cnRvbDEwX2NoZWNrX3JhbmdlKGJ1ZiwgMCwgX19VMTZfTUFYKTsKLQlpZiAocmVtb3RlX3BvcnQgPCAwKQotCQlyZXR1cm4gcmVtb3RlX3BvcnQ7Ci0KLQludC0+bnAucmVtb3RlX3BvcnQgPSByZW1vdGVfcG9ydDsKLQorCXJ2ID0ga3N0cnRvdTE2KGJ1ZiwgMTAsICZudC0+bnAucmVtb3RlX3BvcnQpOworCWlmIChydiA8IDApCisJCXJldHVybiBydjsKIAlyZXR1cm4gc3RybmxlbihidWYsIGNvdW50KTsKIH0KIApAQCAtNDYzLDggKzQyOSw2IEBACiAJCQkJc2l6ZV90IGNvdW50KQogewogCXU4IHJlbW90ZV9tYWNbRVRIX0FMRU5dOwotCWNoYXIgKnAgPSAoY2hhciAqKSBidWY7Ci0JaW50IGk7CiAKIAlpZiAobnQtPmVuYWJsZWQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJuZXRjb25zb2xlOiB0YXJnZXQgKCVzKSBpcyBlbmFibGVkLCAiCkBAIC00NzMsMjMgKzQzNywxMyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU4gLSAxOyBpKyspIHsKLQkJcmVtb3RlX21hY1tpXSA9IHNpbXBsZV9zdHJ0b3VsKHAsICZwLCAxNik7Ci0JCWlmICgqcCAhPSAnOicpCi0JCQlnb3RvIGludmFsaWQ7Ci0JCXArKzsKLQl9Ci0JcmVtb3RlX21hY1tFVEhfQUxFTiAtIDFdID0gc2ltcGxlX3N0cnRvdWwocCwgJnAsIDE2KTsKLQlpZiAoKnAgJiYgKCpwICE9ICdcbicpKQotCQlnb3RvIGludmFsaWQ7Ci0KKwlpZiAoIW1hY19wdG9uKGJ1ZiwgcmVtb3RlX21hYykpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChidWZbMyAqIEVUSF9BTEVOIC0gMV0gJiYgYnVmWzMgKiBFVEhfQUxFTiAtIDFdICE9ICdcbicpCisJCXJldHVybiAtRUlOVkFMOwogCW1lbWNweShudC0+bnAucmVtb3RlX21hYywgcmVtb3RlX21hYywgRVRIX0FMRU4pOwogCiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7Ci0KLWludmFsaWQ6Ci0JcHJpbnRrKEtFUk5fRVJSICJuZXRjb25zb2xlOiBpbnZhbGlkIGlucHV0XG4iKTsKLQlyZXR1cm4gLUVJTlZBTDsKIH0KIAogLyoKQEAgLTY3MSw2ICs2MjUsNyBAQAogCQlnb3RvIGRvbmU7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdGFyZ2V0X2xpc3RfbG9jaywgZmxhZ3MpOworcmVzdGFydDoKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG50LCAmdGFyZ2V0X2xpc3QsIGxpc3QpIHsKIAkJbmV0Y29uc29sZV90YXJnZXRfZ2V0KG50KTsKIAkJaWYgKG50LT5ucC5kZXYgPT0gZGV2KSB7CkBAIC02ODMsOSArNjM4LDE2IEBACiAJCQkJICogcnRubF9sb2NrIGFscmVhZHkgaGVsZAogCQkJCSAqLwogCQkJCWlmIChudC0+bnAuZGV2KSB7CisJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoCisJCQkJCQkJICAgICAgJnRhcmdldF9saXN0X2xvY2ssCisJCQkJCQkJICAgICAgZmxhZ3MpOwogCQkJCQlfX25ldHBvbGxfY2xlYW51cCgmbnQtPm5wKTsKKwkJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnRhcmdldF9saXN0X2xvY2ssCisJCQkJCQkJICBmbGFncyk7CiAJCQkJCWRldl9wdXQobnQtPm5wLmRldik7CiAJCQkJCW50LT5ucC5kZXYgPSBOVUxMOworCQkJCQluZXRjb25zb2xlX3RhcmdldF9wdXQobnQpOworCQkJCQlnb3RvIHJlc3RhcnQ7CiAJCQkJfQogCQkJCS8qIEZhbGwgdGhyb3VnaCAqLwogCQkJY2FzZSBORVRERVZfR09JTkdfRE9XTjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmggYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oCmluZGV4IDY3OWRjODUuLjc3MjIwNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaApAQCAtMTE3Nyw3ICsxMTc3LDcgQEAKIAl1OCBtYXhfc2RzX3JpbmdzOwogCXU4IGRyaXZlcl9taXNtYXRjaDsKIAl1OCBtc2l4X3N1cHBvcnRlZDsKLQl1OCByeF9jc3VtOworCXU4IF9fcGFkOwogCXU4IHBjaV91c2luZ19kYWM7CiAJdTggcG9ydG51bTsKIAl1OCBwaHlzaWNhbF9wb3J0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfZXRodG9vbC5jCmluZGV4IDNiZGNjODAuLmIzNGZiNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogCiAJCWVjbWQtPnBvcnQgPSBQT1JUX1RQOwogCi0JCWVjbWQtPnNwZWVkID0gYWRhcHRlci0+bGlua19zcGVlZDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIGFkYXB0ZXItPmxpbmtfc3BlZWQpOwogCQllY21kLT5kdXBsZXggPSBhZGFwdGVyLT5saW5rX2R1cGxleDsKIAkJZWNtZC0+YXV0b25lZyA9IGFkYXB0ZXItPmxpbmtfYXV0b25lZzsKIApAQCAtMTM0LDcgKzEzNCw3IEBACiAJCX0KIAogCQlpZiAobmV0aWZfcnVubmluZyhkZXYpICYmIGFkYXB0ZXItPmhhc19saW5rX2V2ZW50cykgewotCQkJZWNtZC0+c3BlZWQgPSBhZGFwdGVyLT5saW5rX3NwZWVkOworCQkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIGFkYXB0ZXItPmxpbmtfc3BlZWQpOwogCQkJZWNtZC0+YXV0b25lZyA9IGFkYXB0ZXItPmxpbmtfYXV0b25lZzsKIAkJCWVjbWQtPmR1cGxleCA9IGFkYXB0ZXItPmxpbmtfZHVwbGV4OwogCQkJZ290byBza2lwOwpAQCAtMTQ2LDEwICsxNDYsMTAgQEAKIAkJCXUxNiBwY2lmbiA9IGFkYXB0ZXItPmFody5wY2lfZnVuYzsKIAogCQkJdmFsID0gTlhSRDMyKGFkYXB0ZXIsIFAzX0xJTktfU1BFRURfUkVHKHBjaWZuKSk7Ci0JCQllY21kLT5zcGVlZCA9IFAzX0xJTktfU1BFRURfTUhaICoKLQkJCQkJUDNfTElOS19TUEVFRF9WQUwocGNpZm4sIHZhbCk7CisJCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgUDNfTElOS19TUEVFRF9NSFogKgorCQkJCQkgICAgICBQM19MSU5LX1NQRUVEX1ZBTChwY2lmbiwgdmFsKSk7CiAJCX0gZWxzZQotCQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDAwMDsKKwkJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBTUEVFRF8xMDAwMCk7CiAKIAkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJCWVjbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CkBAIC0yNTEsNiArMjUxLDcgQEAKIG5ldHhlbl9uaWNfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKIHsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiBzcGVlZCA9IGV0aHRvb2xfY21kX3NwZWVkKGVjbWQpOwogCWludCByZXQ7CiAKIAlpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSAhPSBORVRYRU5fTklDX0dCRSkKQEAgLTI1OSwxNCArMjYwLDE0IEBACiAJaWYgKCEoYWRhcHRlci0+Y2FwYWJpbGl0aWVzICYgTlhfRldfQ0FQQUJJTElUWV9HQkVfTElOS19DRkcpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlyZXQgPSBueF9md19jbWRfc2V0X2diZV9wb3J0KGFkYXB0ZXIsIGVjbWQtPnNwZWVkLCBlY21kLT5kdXBsZXgsCisJcmV0ID0gbnhfZndfY21kX3NldF9nYmVfcG9ydChhZGFwdGVyLCBzcGVlZCwgZWNtZC0+ZHVwbGV4LAogCQkJCSAgICAgZWNtZC0+YXV0b25lZyk7CiAJaWYgKHJldCA9PSBOWF9SQ09ERV9OT1RfU1VQUE9SVEVEKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJZWxzZSBpZiAocmV0KQogCQlyZXR1cm4gLUVJTzsKIAotCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSBlY21kLT5zcGVlZDsKKwlhZGFwdGVyLT5saW5rX3NwZWVkID0gc3BlZWQ7CiAJYWRhcHRlci0+bGlua19kdXBsZXggPSBlY21kLT5kdXBsZXg7CiAJYWRhcHRlci0+bGlua19hdXRvbmVnID0gZWNtZC0+YXV0b25lZzsKIApAQCAtNjc2LDYyICs2NzcsNiBAQAogCX0KIH0KIAotc3RhdGljIHUzMiBuZXR4ZW5fbmljX2dldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0lQX0NTVU07Ci19Ci0KLXN0YXRpYyB1MzIgbmV0eGVuX25pY19nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuIGFkYXB0ZXItPnJ4X2NzdW07Ci19Ci0KLXN0YXRpYyBpbnQgbmV0eGVuX25pY19zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKGRhdGEpIHsKLQkJYWRhcHRlci0+cnhfY3N1bSA9IGRhdGE7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8pIHsKLQkJaWYgKG5ldHhlbl9jb25maWdfaHdfbHJvKGFkYXB0ZXIsIE5FVFhFTl9OSUNfTFJPX0RJU0FCTEVEKSkKLQkJCXJldHVybiAtRUlPOwotCi0JCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfTFJPOwotCQluZXR4ZW5fc2VuZF9scm9fY2xlYW51cChhZGFwdGVyKTsKLQkJbmV0ZGV2X2luZm8oZGV2LCAiZGlzYWJsaW5nIExSTyBhcyByeF9jc3VtIGlzIG9mZlxuIik7Ci0JfQotCWFkYXB0ZXItPnJ4X2NzdW0gPSBkYXRhOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTMyIG5ldHhlbl9uaWNfZ2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKLQkJcmV0dXJuIChkZXYtPmZlYXR1cmVzICYgKE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082KSkgIT0gMDsKLQotCXJldHVybiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfVFNPKSAhPSAwOwotfQotCi1zdGF0aWMgaW50IG5ldHhlbl9uaWNfc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlpZiAoZGF0YSkgewotCQlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087Ci0JCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQotCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7Ci0JfSBlbHNlCi0JCWRldi0+ZmVhdHVyZXMgJj0gfihORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNik7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQKIG5ldHhlbl9uaWNfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCiB7CkBAIC04NjYsNDMgKzgxMSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbmV0eGVuX25pY19zZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlpbnQgaHdfbHJvOwotCi0JaWYgKGV0aHRvb2xfaW52YWxpZF9mbGFncyhuZXRkZXYsIGRhdGEsIEVUSF9GTEFHX0xSTykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCEoYWRhcHRlci0+Y2FwYWJpbGl0aWVzICYgTlhfRldfQ0FQQUJJTElUWV9IV19MUk8pKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghYWRhcHRlci0+cnhfY3N1bSkgewotCQluZXRkZXZfaW5mbyhuZXRkZXYsICJyeCBjc3VtIGlzIG9mZiwgY2Fubm90IHRvZ2dsZSBMUk9cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoISEoZGF0YSAmIEVUSF9GTEFHX0xSTykgPT0gISEobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoZGF0YSAmIEVUSF9GTEFHX0xSTykgewotCQlod19scm8gPSBORVRYRU5fTklDX0xST19FTkFCTEVEOwotCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOwotCX0gZWxzZSB7Ci0JCWh3X2xybyA9IE5FVFhFTl9OSUNfTFJPX0RJU0FCTEVEOwotCQluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0xSTzsKLQl9Ci0KLQlpZiAobmV0eGVuX2NvbmZpZ19od19scm8oYWRhcHRlciwgaHdfbHJvKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlpZiAoKGh3X2xybyA9PSAwKSAmJiBuZXR4ZW5fc2VuZF9scm9fY2xlYW51cChhZGFwdGVyKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQotCXJldHVybiAwOwotfQotCiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0eGVuX25pY19ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzID0gbmV0eGVuX25pY19nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncyA9IG5ldHhlbl9uaWNfc2V0X3NldHRpbmdzLApAQCAtOTE2LDIxICs4MjQsMTIgQEAKIAkuc2V0X3JpbmdwYXJhbSA9IG5ldHhlbl9uaWNfc2V0X3JpbmdwYXJhbSwKIAkuZ2V0X3BhdXNlcGFyYW0gPSBuZXR4ZW5fbmljX2dldF9wYXVzZXBhcmFtLAogCS5zZXRfcGF1c2VwYXJhbSA9IG5ldHhlbl9uaWNfc2V0X3BhdXNlcGFyYW0sCi0JLmdldF90eF9jc3VtID0gbmV0eGVuX25pY19nZXRfdHhfY3N1bSwKLQkuc2V0X3R4X2NzdW0gPSBldGh0b29sX29wX3NldF90eF9jc3VtLAotCS5zZXRfc2cgPSBldGh0b29sX29wX3NldF9zZywKLQkuZ2V0X3RzbyA9IG5ldHhlbl9uaWNfZ2V0X3RzbywKLQkuc2V0X3RzbyA9IG5ldHhlbl9uaWNfc2V0X3RzbywKIAkuZ2V0X3dvbCA9IG5ldHhlbl9uaWNfZ2V0X3dvbCwKIAkuc2V0X3dvbCA9IG5ldHhlbl9uaWNfc2V0X3dvbCwKIAkuc2VsZl90ZXN0ID0gbmV0eGVuX25pY19kaWFnX3Rlc3QsCiAJLmdldF9zdHJpbmdzID0gbmV0eGVuX25pY19nZXRfc3RyaW5ncywKIAkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBuZXR4ZW5fbmljX2dldF9ldGh0b29sX3N0YXRzLAogCS5nZXRfc3NldF9jb3VudCA9IG5ldHhlbl9nZXRfc3NldF9jb3VudCwKLQkuZ2V0X3J4X2NzdW0gPSBuZXR4ZW5fbmljX2dldF9yeF9jc3VtLAotCS5zZXRfcnhfY3N1bSA9IG5ldHhlbl9uaWNfc2V0X3J4X2NzdW0sCiAJLmdldF9jb2FsZXNjZSA9IG5ldHhlbl9nZXRfaW50cl9jb2FsZXNjZSwKIAkuc2V0X2NvYWxlc2NlID0gbmV0eGVuX3NldF9pbnRyX2NvYWxlc2NlLAotCS5nZXRfZmxhZ3MgPSBldGh0b29sX29wX2dldF9mbGFncywKLQkuc2V0X2ZsYWdzID0gbmV0eGVuX25pY19zZXRfZmxhZ3MsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCmluZGV4IDczMTA3N2QuLjdmOTk5NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMKQEAgLTE0ODMsNyArMTQ4Myw4IEBACiAJaWYgKCFza2IpCiAJCWdvdG8gbm9fc2tiOwogCi0JaWYgKGxpa2VseShhZGFwdGVyLT5yeF9jc3VtICYmIGNrc3VtID09IFNUQVRVU19DS1NVTV9PSykpIHsKKwlpZiAobGlrZWx5KChhZGFwdGVyLT5uZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pCisJICAgICYmIGNrc3VtID09IFNUQVRVU19DS1NVTV9PSykpIHsKIAkJYWRhcHRlci0+c3RhdHMuY3N1bW1lZCsrOwogCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCX0gZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCmluZGV4IGU4YTRiNjYuLmI2NDQzODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKQEAgLTQ4NSw2ICs0ODUsMzcgQEAKIAlhZGFwdGVyLT5zZXRfbXVsdGkoZGV2KTsKIH0KIAorc3RhdGljIHUzMiBuZXR4ZW5fZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKK3sKKwlpZiAoIShmZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSkgeworCQluZXRkZXZfaW5mbyhkZXYsICJkaXNhYmxpbmcgTFJPIGFzIFJYQ1NVTSBpcyBvZmZcbiIpOworCisJCWZlYXR1cmVzICY9IH5ORVRJRl9GX0xSTzsKKwl9CisKKwlyZXR1cm4gZmVhdHVyZXM7Cit9CisKK3N0YXRpYyBpbnQgbmV0eGVuX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpCit7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaHdfbHJvOworCisJaWYgKCEoKGRldi0+ZmVhdHVyZXMgXiBmZWF0dXJlcykgJiBORVRJRl9GX0xSTykpCisJCXJldHVybiAwOworCisJaHdfbHJvID0gKGZlYXR1cmVzICYgTkVUSUZfRl9MUk8pID8gTkVUWEVOX05JQ19MUk9fRU5BQkxFRAorCSAgICAgICAgIDogTkVUWEVOX05JQ19MUk9fRElTQUJMRUQ7CisKKwlpZiAobmV0eGVuX2NvbmZpZ19od19scm8oYWRhcHRlciwgaHdfbHJvKSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoIShmZWF0dXJlcyAmIE5FVElGX0ZfTFJPKSAmJiBuZXR4ZW5fc2VuZF9scm9fY2xlYW51cChhZGFwdGVyKSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZXR4ZW5fbmV0ZGV2X29wcyA9IHsKIAkubmRvX29wZW4JICAgPSBuZXR4ZW5fbmljX29wZW4sCiAJLm5kb19zdG9wCSAgID0gbmV0eGVuX25pY19jbG9zZSwKQEAgLTQ5NSw2ICs1MjYsOCBAQAogCS5uZG9fc2V0X21hY19hZGRyZXNzICAgID0gbmV0eGVuX25pY19zZXRfbWFjLAogCS5uZG9fY2hhbmdlX210dQkgICA9IG5ldHhlbl9uaWNfY2hhbmdlX210dSwKIAkubmRvX3R4X3RpbWVvdXQJICAgPSBuZXR4ZW5fdHhfdGltZW91dCwKKwkubmRvX2ZpeF9mZWF0dXJlcyA9IG5ldHhlbl9maXhfZmVhdHVyZXMsCisJLm5kb19zZXRfZmVhdHVyZXMgPSBuZXR4ZW5fc2V0X2ZlYXR1cmVzLAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIgPSBuZXR4ZW5fbmljX3BvbGxfY29udHJvbGxlciwKICNlbmRpZgpAQCAtOTA1LDcgKzkzOCw3IEBACiAJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOwogCWludCBlcnIsIHJpbmc7CiAKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gSVJRRl9TQU1QTEVfUkFORE9NOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OwogCkBAIC0xMTk2LDcgKzEyMjksNiBAQAogCWludCBlcnIgPSAwOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAotCWFkYXB0ZXItPnJ4X2NzdW0gPSAxOwogCWFkYXB0ZXItPm1jX2VuYWJsZWQgPSAwOwogCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQogCQlhZGFwdGVyLT5tYXhfbWNfY291bnQgPSAzODsKQEAgLTEyMTAsMTQgKzEyNDIsMTMgQEAKIAogCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZuZXR4ZW5fbmljX2V0aHRvb2xfb3BzKTsKIAotCW5ldGRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1RTTyk7Ci0JbmV0ZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9HUk8pOwotCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSAoTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfVFNPKTsKKwluZXRkZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfVFNPIHwKKwkgICAgICAgICAgICAgICAgICAgICAgTkVUSUZfRl9SWENTVU07CiAKLQlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgewotCQluZXRkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfVFNPNik7Ci0JCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSAoTkVUSUZfRl9JUFY2X0NTVU0gfCBORVRJRl9GX1RTTzYpOwotCX0KKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKKwkJbmV0ZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfVFNPNjsKKworCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBuZXRkZXYtPmh3X2ZlYXR1cmVzOwogCiAJaWYgKGFkYXB0ZXItPnBjaV91c2luZ19kYWMpIHsKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CkBAIC0xMjI1LDEwICsxMjU2LDEyIEBACiAJfQogCiAJaWYgKGFkYXB0ZXItPmNhcGFiaWxpdGllcyAmIE5YX0ZXX0NBUEFCSUxJVFlfRlZMQU5UWCkKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9IV19WTEFOX1RYKTsKKwkJbmV0ZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFg7CiAKIAlpZiAoYWRhcHRlci0+Y2FwYWJpbGl0aWVzICYgTlhfRldfQ0FQQUJJTElUWV9IV19MUk8pCi0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87CisJCW5ldGRldi0+aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87CisKKwluZXRkZXYtPmZlYXR1cmVzIHw9IG5ldGRldi0+aHdfZmVhdHVyZXM7CiAKIAluZXRkZXYtPmlycSA9IGFkYXB0ZXItPm1zaXhfZW50cmllc1swXS52ZWN0b3I7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25pdS5jIGIvZHJpdmVycy9uZXQvbml1LmMKaW5kZXggMzI2NzhiNi4uY2MyNWJmZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25pdS5jCisrKyBiL2RyaXZlcnMvbmV0L25pdS5jCkBAIC0xMjMzLDcgKzEyMzMsNyBAQAogCiAJYm1zciA9IGVycjsKIAlpZiAoYm1zciAmIEJNU1JfTFNUQVRVUykgewotCQl1MTYgYWR2LCBscGEsIGNvbW1vbiwgZXN0YXQ7CisJCXUxNiBhZHYsIGxwYTsKIAogCQllcnIgPSBtaWlfcmVhZChucCwgbnAtPnBoeV9hZGRyLCBNSUlfQURWRVJUSVNFKTsKIAkJaWYgKGVyciA8IDApCkBAIC0xMjQ1LDEyICsxMjQ1LDkgQEAKIAkJCWdvdG8gb3V0OwogCQlscGEgPSBlcnI7CiAKLQkJY29tbW9uID0gYWR2ICYgbHBhOwotCiAJCWVyciA9IG1paV9yZWFkKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9FU1RBVFVTKTsKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIG91dDsKLQkJZXN0YXQgPSBlcnI7CiAJCWxpbmtfdXAgPSAxOwogCQljdXJyZW50X3NwZWVkID0gU1BFRURfMTAwMDsKIAkJY3VycmVudF9kdXBsZXggPSBEVVBMRVhfRlVMTDsKQEAgLTE2NTAsNyArMTY0Nyw3IEBACiAJCWJyZWFrOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgbWlpX3Jlc2V0KHN0cnVjdCBuaXUgKm5wKQpAQCAtMjM4MSwxNyArMjM3OCwxNCBAQAogCXN0cnVjdCBuaXVfbGlua19jb25maWcgKmxwID0gJm5wLT5saW5rX2NvbmZpZzsKIAl1bnNpZ25lZCBsb25nIGN0cmxfcmVnLCB0ZXN0X2NmZ19yZWcsIHBsbF9jZmcsIGk7CiAJdTY0IGN0cmxfdmFsLCB0ZXN0X2NmZ192YWwsIHNpZywgbWFzaywgdmFsOwotCXU2NCByZXNldF92YWw7CiAKIAlzd2l0Y2ggKG5wLT5wb3J0KSB7CiAJY2FzZSAwOgotCQlyZXNldF92YWwgPSAgRU5FVF9TRVJERVNfUkVTRVRfMDsKIAkJY3RybF9yZWcgPSBFTkVUX1NFUkRFU18wX0NUUkxfQ0ZHOwogCQl0ZXN0X2NmZ19yZWcgPSBFTkVUX1NFUkRFU18wX1RFU1RfQ0ZHOwogCQlwbGxfY2ZnID0gRU5FVF9TRVJERVNfMF9QTExfQ0ZHOwogCQlicmVhazsKIAljYXNlIDE6Ci0JCXJlc2V0X3ZhbCA9ICBFTkVUX1NFUkRFU19SRVNFVF8xOwogCQljdHJsX3JlZyA9IEVORVRfU0VSREVTXzFfQ1RSTF9DRkc7CiAJCXRlc3RfY2ZnX3JlZyA9IEVORVRfU0VSREVTXzFfVEVTVF9DRkc7CiAJCXBsbF9jZmcgPSBFTkVUX1NFUkRFU18xX1BMTF9DRkc7CkBAIC02MDcxLDggKzYwNjUsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBucC0+bnVtX2xkZzsgaSsrKSB7CiAJCXN0cnVjdCBuaXVfbGRnICpscCA9ICZucC0+bGRnW2ldOwogCi0JCWVyciA9IHJlcXVlc3RfaXJxKGxwLT5pcnEsIG5pdV9pbnRlcnJ1cHQsCi0JCQkJICBJUlFGX1NIQVJFRCB8IElSUUZfU0FNUExFX1JBTkRPTSwKKwkJZXJyID0gcmVxdWVzdF9pcnEobHAtPmlycSwgbml1X2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCiAJCQkJICBucC0+aXJxX25hbWVbaV0sIGxwKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0X2ZyZWVfaXJxczsKQEAgLTY4NTEsNyArNjg0NCw3IEBACiAJY21kLT5zdXBwb3J0ZWQgPSBscC0+c3VwcG9ydGVkOwogCWNtZC0+YWR2ZXJ0aXNpbmcgPSBscC0+YWN0aXZlX2FkdmVydGlzaW5nOwogCWNtZC0+YXV0b25lZyA9IGxwLT5hY3RpdmVfYXV0b25lZzsKLQljbWQtPnNwZWVkID0gbHAtPmFjdGl2ZV9zcGVlZDsKKwlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBscC0+YWN0aXZlX3NwZWVkKTsKIAljbWQtPmR1cGxleCA9IGxwLT5hY3RpdmVfZHVwbGV4OwogCWNtZC0+cG9ydCA9IChucC0+ZmxhZ3MgJiBOSVVfRkxBR1NfRklCRVIpID8gUE9SVF9GSUJSRSA6IFBPUlRfVFA7CiAJY21kLT50cmFuc2NlaXZlciA9IChucC0+ZmxhZ3MgJiBOSVVfRkxBR1NfWENWUl9TRVJERVMpID8KQEAgLTY4NjYsNyArNjg1OSw3IEBACiAJc3RydWN0IG5pdV9saW5rX2NvbmZpZyAqbHAgPSAmbnAtPmxpbmtfY29uZmlnOwogCiAJbHAtPmFkdmVydGlzaW5nID0gY21kLT5hZHZlcnRpc2luZzsKLQlscC0+c3BlZWQgPSBjbWQtPnNwZWVkOworCWxwLT5zcGVlZCA9IGV0aHRvb2xfY21kX3NwZWVkKGNtZCk7CiAJbHAtPmR1cGxleCA9IGNtZC0+ZHVwbGV4OwogCWxwLT5hdXRvbmVnID0gY21kLT5hdXRvbmVnOwogCXJldHVybiBuaXVfaW5pdF9saW5rKG5wKTsKQEAgLTcwMjMsNiArNzAxNiw3IEBACiAJY2FzZSBVRFBfVjRfRkxPVzoKIAkJKmNsYXNzID0gQ0xBU1NfQ09ERV9VRFBfSVBWNDsKIAkJYnJlYWs7CisJY2FzZSBBSF9FU1BfVjRfRkxPVzoKIAljYXNlIEFIX1Y0X0ZMT1c6CiAJY2FzZSBFU1BfVjRfRkxPVzoKIAkJKmNsYXNzID0gQ0xBU1NfQ09ERV9BSF9FU1BfSVBWNDsKQEAgLTcwMzYsNiArNzAzMCw3IEBACiAJY2FzZSBVRFBfVjZfRkxPVzoKIAkJKmNsYXNzID0gQ0xBU1NfQ09ERV9VRFBfSVBWNjsKIAkJYnJlYWs7CisJY2FzZSBBSF9FU1BfVjZfRkxPVzoKIAljYXNlIEFIX1Y2X0ZMT1c6CiAJY2FzZSBFU1BfVjZfRkxPVzoKIAkJKmNsYXNzID0gQ0xBU1NfQ09ERV9BSF9FU1BfSVBWNjsKQEAgLTc4ODksMzcgKzc4ODQsMzUgQEAKIAludzY0X21hYyhyZWcsIHZhbCk7CiB9CiAKLXN0YXRpYyBpbnQgbml1X3BoeXNfaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCitzdGF0aWMgaW50IG5pdV9zZXRfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgZW51bSBldGh0b29sX3BoeXNfaWRfc3RhdGUgc3RhdGUpCisKIHsKIAlzdHJ1Y3Qgbml1ICpucCA9IG5ldGRldl9wcml2KGRldik7Ci0JdTY0IG9yaWdfbGVkX3N0YXRlOwotCWludCBpOwogCiAJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCiAJCXJldHVybiAtRUFHQUlOOwogCi0JaWYgKGRhdGEgPT0gMCkKLQkJZGF0YSA9IDI7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgRVRIVE9PTF9JRF9BQ1RJVkU6CisJCW5wLT5vcmlnX2xlZF9zdGF0ZSA9IG5pdV9sZWRfc3RhdGVfc2F2ZShucCk7CisJCXJldHVybiAxOwkvKiBjeWNsZSBvbi9vZmYgb25jZSBwZXIgc2Vjb25kICovCiAKLQlvcmlnX2xlZF9zdGF0ZSA9IG5pdV9sZWRfc3RhdGVfc2F2ZShucCk7Ci0JZm9yIChpID0gMDsgaSA8IChkYXRhICogMik7IGkrKykgewotCQlpbnQgb24gPSAoKGkgJSAyKSA9PSAwKTsKKwljYXNlIEVUSFRPT0xfSURfT046CisJCW5pdV9mb3JjZV9sZWQobnAsIDEpOworCQlicmVhazsKIAotCQluaXVfZm9yY2VfbGVkKG5wLCBvbik7CisJY2FzZSBFVEhUT09MX0lEX09GRjoKKwkJbml1X2ZvcmNlX2xlZChucCwgMCk7CisJCWJyZWFrOwogCi0JCWlmIChtc2xlZXBfaW50ZXJydXB0aWJsZSg1MDApKQotCQkJYnJlYWs7CisJY2FzZSBFVEhUT09MX0lEX0lOQUNUSVZFOgorCQluaXVfbGVkX3N0YXRlX3Jlc3RvcmUobnAsIG5wLT5vcmlnX2xlZF9zdGF0ZSk7CiAJfQotCW5pdV9sZWRfc3RhdGVfcmVzdG9yZShucCwgb3JpZ19sZWRfc3RhdGUpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbml1X3NldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlyZXR1cm4gZXRodG9vbF9vcF9zZXRfZmxhZ3MoZGV2LCBkYXRhLCBFVEhfRkxBR19SWEhBU0gpOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5pdV9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JCT0gbml1X2dldF9kcnZpbmZvLAogCS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLApAQCAtNzkzMywxMSArNzkyNiw5IEBACiAJLmdldF9zdHJpbmdzCQk9IG5pdV9nZXRfc3RyaW5ncywKIAkuZ2V0X3NzZXRfY291bnQJCT0gbml1X2dldF9zc2V0X2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cwk9IG5pdV9nZXRfZXRodG9vbF9zdGF0cywKLQkucGh5c19pZAkJPSBuaXVfcGh5c19pZCwKKwkuc2V0X3BoeXNfaWQJCT0gbml1X3NldF9waHlzX2lkLAogCS5nZXRfcnhuZmMJCT0gbml1X2dldF9uZmMsCiAJLnNldF9yeG5mYwkJPSBuaXVfc2V0X25mYywKLQkuc2V0X2ZsYWdzCQk9IG5pdV9zZXRfZmxhZ3MsCi0JLmdldF9mbGFncwkJPSBldGh0b29sX29wX2dldF9mbGFncywKIH07CiAKIHN0YXRpYyBpbnQgbml1X2xkZ19hc3NpZ25fbGRuKHN0cnVjdCBuaXUgKm5wLCBzdHJ1Y3Qgbml1X3BhcmVudCAqcGFyZW50LApAQCAtODEzMSw3ICs4MTIyLDcgQEAKIAluZXRpZl9wcmludGsobnAsIHByb2JlLCBLRVJOX0RFQlVHLCBucC0+ZGV2LAogCQkgICAgICJWUERfU0NBTjogc3RhcnRbJXhdIGVuZFsleF1cbiIsIHN0YXJ0LCBlbmQpOwogCXdoaWxlIChzdGFydCA8IGVuZCkgewotCQlpbnQgbGVuLCBlcnIsIGluc3RhbmNlLCB0eXBlLCBwcm9wX2xlbjsKKwkJaW50IGxlbiwgZXJyLCBwcm9wX2xlbjsKIAkJY2hhciBuYW1lYnVmWzY0XTsKIAkJdTggKnByb3BfYnVmOwogCQlpbnQgbWF4X2xlbjsKQEAgLTgxNDcsOCArODEzOCw2IEBACiAJCWxlbiA9IGVycjsKIAkJc3RhcnQgKz0gMzsKIAotCQlpbnN0YW5jZSA9IG5pdV9wY2lfZWVwcm9tX3JlYWQobnAsIHN0YXJ0KTsKLQkJdHlwZSA9IG5pdV9wY2lfZWVwcm9tX3JlYWQobnAsIHN0YXJ0ICsgMyk7CiAJCXByb3BfbGVuID0gbml1X3BjaV9lZXByb21fcmVhZChucCwgc3RhcnQgKyA0KTsKIAkJZXJyID0gbml1X3BjaV92cGRfZ2V0X3Byb3BuYW1lKG5wLCBzdGFydCArIDUsIG5hbWVidWYsIDY0KTsKIAkJaWYgKGVyciA8IDApCkBAIC05NzY4LDggKzk3NTcsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgbml1X3NldF9iYXNpY19mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfU0cgfCBORVRJRl9GX0hXX0NTVU0gfAotCQkJICBORVRJRl9GX0dSTyB8IE5FVElGX0ZfUlhIQVNIKTsKKwlkZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfUlhIQVNIOworCWRldi0+ZmVhdHVyZXMgfD0gZGV2LT5od19mZWF0dXJlcyB8IE5FVElGX0ZfUlhDU1VNOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBuaXVfcGNpX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbml1LmggYi9kcml2ZXJzL25ldC9uaXUuaAppbmRleCBhNDFmYThlLi41MWUxNzdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaXUuaAorKysgYi9kcml2ZXJzL25ldC9uaXUuaApAQCAtMzI3OSw2ICszMjc5LDcgQEAKIAl1bnNpZ25lZCBsb25nCQkJeHBjc19vZmY7CiAKIAlzdHJ1Y3QgdGltZXJfbGlzdAkJdGltZXI7CisJdTY0CQkJCW9yaWdfbGVkX3N0YXRlOwogCWNvbnN0IHN0cnVjdCBuaXVfcGh5X29wcwkqcGh5X29wczsKIAlpbnQJCQkJcGh5X2FkZHI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25zODM4MjAuYyBiL2RyaXZlcnMvbmV0L25zODM4MjAuYwppbmRleCA2NjY3ZTA2Li4zZTQwNDBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uczgzODIwLmMKKysrIGIvZHJpdmVycy9uZXQvbnM4MzgyMC5jCkBAIC0xMjUxLDcgKzEyNTEsNyBAQAogCS8qCiAJICogSGVyZSdzIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBldGh0b29sIGNvbW1hbmRzIGZyb20gb3RoZXIgZHJpdmVyczoKIAkgKgljbWQtPmFkdmVydGlzaW5nID0KLQkgKgljbWQtPnNwZWVkID0KKwkgKglldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCAuLi4pCiAJICoJY21kLT5kdXBsZXggPQogCSAqCWNtZC0+cG9ydCA9IDA7CiAJICoJY21kLT5waHlfYWRkcmVzcyA9CkBAIC0xMjg5LDEzICsxMjg5LDEzIEBACiAJY21kLT5kdXBsZXggPSBmdWxsZHVwbGV4ID8gRFVQTEVYX0ZVTEwgOiBEVVBMRVhfSEFMRjsKIAlzd2l0Y2ggKGNmZyAvIENGR19TUERTVFMwICYgMykgewogCWNhc2UgMjoKLQkJY21kLT5zcGVlZCA9IFNQRUVEXzEwMDA7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIFNQRUVEXzEwMDApOwogCQlicmVhazsKIAljYXNlIDE6Ci0JCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDA7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIFNQRUVEXzEwMCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgU1BFRURfMTApOwogCQlicmVhazsKIAl9CiAJY21kLT5hdXRvbmVnID0gKHRiaWNyICYgVEJJQ1JfTVJfQU5fRU5BQkxFKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGFzZW1pX21hYy5jIGIvZHJpdmVycy9uZXQvcGFzZW1pX21hYy5jCmluZGV4IDgyOGU5N2MuLjllYzExMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Bhc2VtaV9tYWMuYworKysgYi9kcml2ZXJzL25ldC9wYXNlbWlfbWFjLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC90Y3AuaD4KICNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbmV0X2xyby5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmUuaCBiL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZS5oCmluZGV4IGJmMTI2ZTcuLjU5ZmFjNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZS5oCisrKyBiL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZS5oCkBAIC01OTcsOCArNTk3LDYgQEAKICAqIEByeF9yaW5nOgkJUG9pbnRlciBvZiBSeCBkZXNjcmlwdG9yIHJpbmcgc3RydWN0dXJlCiAgKiBAcnhfYnVmZmVyX2xlbjoJUmVjZWl2ZSBidWZmZXIgbGVuZ3RoCiAgKiBAdHhfcXVldWVfbGVuOglUcmFuc21pdCBxdWV1ZSBsZW5ndGgKLSAqIEByeF9jc3VtOgkJUmVjZWl2ZSBUQ1AvSVAgY2hlY2tzdW0gZW5hYmxlL2Rpc2FibGUKLSAqIEB0eF9jc3VtOgkJVHJhbnNtaXQgVENQL0lQIGNoZWNrc3VtIGVuYWJsZS9kaXNhYmxlCiAgKiBAaGF2ZV9tc2k6CQlQQ0kgTVNJIG1vZGUgZmxhZwogICovCiAKQEAgLTYyMyw4ICs2MjEsNiBAQAogCXN0cnVjdCBwY2hfZ2JlX3J4X3JpbmcgKnJ4X3Jpbmc7CiAJdW5zaWduZWQgbG9uZyByeF9idWZmZXJfbGVuOwogCXVuc2lnbmVkIGxvbmcgdHhfcXVldWVfbGVuOwotCWJvb2wgcnhfY3N1bTsKLQlib29sIHR4X2NzdW07CiAJYm9vbCBoYXZlX21zaTsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmVfZXRodG9vbC5jCmluZGV4IGQyMTc0YTQuLmVhMmQ4ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlX2V0aHRvb2wuYwpAQCAtOTIsNyArOTIsNyBAQAogCWVjbWQtPmFkdmVydGlzaW5nICY9IH4oQURWRVJUSVNFRF9UUCB8IEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYpOwogCiAJaWYgKCFuZXRpZl9jYXJyaWVyX29rKGFkYXB0ZXItPm5ldGRldikpCi0JCWVjbWQtPnNwZWVkID0gLTE7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCAtMSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTA5LDEyICsxMDksMTUgQEAKIHsKIAlzdHJ1Y3QgcGNoX2diZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgcGNoX2diZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIHNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoZWNtZCk7CiAJaW50IHJldDsKIAogCXBjaF9nYmVfaGFsX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9CTUNSLCBCTUNSX1JFU0VUKTsKIAotCWlmIChlY21kLT5zcGVlZCA9PSBVU0hSVF9NQVgpIHsKLQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDAwOworCS8qIHdoZW4gc2V0X3NldHRpbmdzKCkgaXMgY2FsbGVkIHdpdGggYSBldGh0b29sX2NtZCBwcmV2aW91c2x5CisJICogZmlsbGVkIGJ5IGdldF9zZXR0aW5ncygpIG9uIGEgZG93biBsaW5rLCBzcGVlZCBpcyAtMTogKi8KKwlpZiAoc3BlZWQgPT0gVUlOVF9NQVgpIHsKKwkJc3BlZWQgPSBTUEVFRF8xMDAwOwogCQllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKIAl9CiAJcmV0ID0gbWlpX2V0aHRvb2xfc3NldCgmYWRhcHRlci0+bWlpLCBlY21kKTsKQEAgLTEyMiw3ICsxMjUsNyBAQAogCQlwcl9lcnIoIkVycm9yOiBtaWlfZXRodG9vbF9zc2V0XG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JaHctPm1hYy5saW5rX3NwZWVkID0gZWNtZC0+c3BlZWQ7CisJaHctPm1hYy5saW5rX3NwZWVkID0gc3BlZWQ7CiAJaHctPm1hYy5saW5rX2R1cGxleCA9IGVjbWQtPmR1cGxleDsKIAlody0+cGh5LmF1dG9uZWdfYWR2ZXJ0aXNlZCA9IGVjbWQtPmFkdmVydGlzaW5nOwogCWh3LT5tYWMuYXV0b25lZyA9IGVjbWQtPmF1dG9uZWc7CkBAIC00MzQsNTcgKzQzNyw2IEBACiB9CiAKIC8qKgotICogcGNoX2diZV9nZXRfcnhfY3N1bSAtIFJlcG9ydCB3aGV0aGVyIHJlY2VpdmUgY2hlY2tzdW1zIGFyZSB0dXJuZWQgb24gb3Igb2ZmCi0gKiBAbmV0ZGV2OiAgTmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQotICogUmV0dXJucwotICoJdHJ1ZSgxKTogIENoZWNrc3VtIE9uCi0gKglmYWxzZSgwKTogQ2hlY2tzdW0gT2ZmCi0gKi8KLXN0YXRpYyB1MzIgcGNoX2diZV9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXN0cnVjdCBwY2hfZ2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0JcmV0dXJuIGFkYXB0ZXItPnJ4X2NzdW07Ci19Ci0KLS8qKgotICogcGNoX2diZV9zZXRfcnhfY3N1bSAtIFR1cm4gcmVjZWl2ZSBjaGVja3N1bSBvbiBvciBvZmYKLSAqIEBuZXRkZXY6ICBOZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAZGF0YTogICAgQ2hlY2tzdW0gT25bdHJ1ZV0gb3IgT2ZmW2ZhbHNlXQotICogUmV0dXJucwotICoJMDoJCQlTdWNjZXNzZnVsLgotICoJTmVnYXRpdmUgdmFsdWU6CQlGYWlsZWQuCi0gKi8KLXN0YXRpYyBpbnQgcGNoX2diZV9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgcGNoX2diZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCWFkYXB0ZXItPnJ4X2NzdW0gPSBkYXRhOwotCWlmICgobmV0aWZfcnVubmluZyhuZXRkZXYpKSkKLQkJcGNoX2diZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOwotCWVsc2UKLQkJcGNoX2diZV9yZXNldChhZGFwdGVyKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIHBjaF9nYmVfc2V0X3R4X2NzdW0gLSBUdXJuIHRyYW5zbWl0IGNoZWNrc3VtcyBvbiBvciBvZmYKLSAqIEBuZXRkZXY6IE5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEBkYXRhOiAgIENoZWNrc3VtIG9uW3RydWVdIG9yIG9mZltmYWxzZV0KLSAqIFJldHVybnMKLSAqCTA6CQkJU3VjY2Vzc2Z1bC4KLSAqCU5lZ2F0aXZlIHZhbHVlOgkJRmFpbGVkLgotICovCi1zdGF0aWMgaW50IHBjaF9nYmVfc2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHBjaF9nYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0KLQlhZGFwdGVyLT50eF9jc3VtID0gZGF0YTsKLQlyZXR1cm4gZXRodG9vbF9vcF9zZXRfdHhfaXB2Nl9jc3VtKG5ldGRldiwgZGF0YSk7Ci19Ci0KLS8qKgogICogcGNoX2diZV9nZXRfc3RyaW5ncyAtIFJldHVybiBhIHNldCBvZiBzdHJpbmdzIHRoYXQgZGVzY3JpYmUgdGhlIHJlcXVlc3RlZAogICoJCQkgb2JqZWN0cwogICogQG5ldGRldjogICAgTmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQpAQCAtNTU0LDkgKzUwNiw2IEBACiAJLnNldF9yaW5ncGFyYW0gPSBwY2hfZ2JlX3NldF9yaW5ncGFyYW0sCiAJLmdldF9wYXVzZXBhcmFtID0gcGNoX2diZV9nZXRfcGF1c2VwYXJhbSwKIAkuc2V0X3BhdXNlcGFyYW0gPSBwY2hfZ2JlX3NldF9wYXVzZXBhcmFtLAotCS5nZXRfcnhfY3N1bSA9IHBjaF9nYmVfZ2V0X3J4X2NzdW0sCi0JLnNldF9yeF9jc3VtID0gcGNoX2diZV9zZXRfcnhfY3N1bSwKLQkuc2V0X3R4X2NzdW0gPSBwY2hfZ2JlX3NldF90eF9jc3VtLAogCS5nZXRfc3RyaW5ncyA9IHBjaF9nYmVfZ2V0X3N0cmluZ3MsCiAJLmdldF9ldGh0b29sX3N0YXRzID0gcGNoX2diZV9nZXRfZXRodG9vbF9zdGF0cywKIAkuZ2V0X3NzZXRfY291bnQgPSBwY2hfZ2JlX2dldF9zc2V0X2NvdW50LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9tYWluLmMKaW5kZXggMmVmMmY5Yy4uZWFjM2M1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmVfbWFpbi5jCkBAIC0yMCw2ICsyMCw3IEBACiAKICNpbmNsdWRlICJwY2hfZ2JlLmgiCiAjaW5jbHVkZSAicGNoX2diZV9hcGkuaCIKKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjZGVmaW5lIERSVl9WRVJTSU9OICAgICAiMS4wMCIKIGNvbnN0IGNoYXIgcGNoX2RyaXZlcl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjsKQEAgLTM0LDYgKzM1LDEwIEBACiAjZGVmaW5lIFBDSF9HQkVfQ09QWUJSRUFLX0RFRkFVTFQJMjU2CiAjZGVmaW5lIFBDSF9HQkVfUENJX0JBUgkJCTEKIAorLyogTWFjcm9zIGZvciBNTDcyMjMgKi8KKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ST0hNCQkJMHgxMGRiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUk9ITV9NTDcyMjNfR0JFCQkweDgwMTMKKwogI2RlZmluZSBQQ0hfR0JFX1RYX1dFSUdIVCAgICAgICAgIDY0CiAjZGVmaW5lIFBDSF9HQkVfUlhfV0VJR0hUICAgICAgICAgNjQKICNkZWZpbmUgUENIX0dCRV9SWF9CVUZGRVJfV1JJVEUgICAxNgpAQCAtNDMsOCArNDgsNyBAQAogCiAjZGVmaW5lIFBDSF9HQkVfTUFDX1JHTUlJX0NUUkxfU0VUVElORyAoIFwKIAlQQ0hfR0JFX0NISVBfVFlQRV9JTlRFUk5BTCB8IFwKLQlQQ0hfR0JFX1JHTUlJX01PREVfUkdNSUkgICB8IFwKLQlQQ0hfR0JFX0NSU19TRUwgICAgICAgICAgICAgIFwKKwlQQ0hfR0JFX1JHTUlJX01PREVfUkdNSUkgICAgIFwKIAkpCiAKIC8qIEV0aGVydHlwZSBmaWVsZCB2YWx1ZXMgKi8KQEAgLTY1Niw2ICs2NjAsNyBAQAogICovCiBzdGF0aWMgdm9pZCBwY2hfZ2JlX3NldHVwX3JjdGwoc3RydWN0IHBjaF9nYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCXN0cnVjdCBwY2hfZ2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgcnhfbW9kZSwgdGNwaXA7CiAKQEAgLTY2Niw3ICs2NzEsNyBAQAogCiAJdGNwaXAgPSBpb3JlYWQzMigmaHctPnJlZy0+VENQSVBfQUNDKTsKIAotCWlmIChhZGFwdGVyLT5yeF9jc3VtKSB7CisJaWYgKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkgewogCQl0Y3BpcCAmPSB+UENIX0dCRV9SWF9UQ1BJUEFDQ19PRkY7CiAJCXRjcGlwIHw9IFBDSF9HQkVfUlhfVENQSVBBQ0NfRU47CiAJfSBlbHNlIHsKQEAgLTg4NywxMiArODkyLDEyIEBACiAJc3RydWN0IHBjaF9nYmVfYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgcGNoX2diZV9hZGFwdGVyICopZGF0YTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCXN0cnVjdCBwY2hfZ2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQlzdHJ1Y3QgZXRodG9vbF9jbWQgY21kOwogCiAJcHJfZGVidWcoInJpZ2h0IG5vdyA9ICVsZFxuIiwgamlmZmllcyk7CiAKIAlwY2hfZ2JlX3VwZGF0ZV9zdGF0cyhhZGFwdGVyKTsKIAlpZiAoKG1paV9saW5rX29rKCZhZGFwdGVyLT5taWkpKSAmJiAoIW5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkpIHsKKwkJc3RydWN0IGV0aHRvb2xfY21kIGNtZCA9IHsgLmNtZCA9IEVUSFRPT0xfR1NFVCB9OwogCQluZXRkZXYtPnR4X3F1ZXVlX2xlbiA9IGFkYXB0ZXItPnR4X3F1ZXVlX2xlbjsKIAkJLyogbWlpIGxpYnJhcnkgaGFuZGxlcyBsaW5rIG1haW50ZW5hbmNlIHRhc2tzICovCiAJCWlmIChtaWlfZXRodG9vbF9nc2V0KCZhZGFwdGVyLT5taWksICZjbWQpKSB7CkBAIC05MDIsNyArOTA3LDcgQEAKIAkJCQkJCVBDSF9HQkVfV0FUQ0hET0dfUEVSSU9EKSk7CiAJCQlyZXR1cm47CiAJCX0KLQkJaHctPm1hYy5saW5rX3NwZWVkID0gY21kLnNwZWVkOworCQlody0+bWFjLmxpbmtfc3BlZWQgPSBldGh0b29sX2NtZF9zcGVlZCgmY21kKTsKIAkJaHctPm1hYy5saW5rX2R1cGxleCA9IGNtZC5kdXBsZXg7CiAJCS8qIFNldCB0aGUgUkdNSUkgY29udHJvbC4gKi8KIAkJcGNoX2diZV9zZXRfcmdtaWlfY3RybChhZGFwdGVyLCBody0+bWFjLmxpbmtfc3BlZWQsCkBAIC05MTIsNyArOTE3LDcgQEAKIAkJCQkgaHctPm1hYy5saW5rX2R1cGxleCk7CiAJCW5ldGRldl9kYmcobmV0ZGV2LAogCQkJICAgIkxpbmsgaXMgVXAgJWQgTWJwcyAlcy1EdXBsZXhcbiIsCi0JCQkgICBjbWQuc3BlZWQsCisJCQkgICBody0+bWFjLmxpbmtfc3BlZWQsCiAJCQkgICBjbWQuZHVwbGV4ID09IERVUExFWF9GVUxMID8gIkZ1bGwiIDogIkhhbGYiKTsKIAkJbmV0aWZfY2Fycmllcl9vbihuZXRkZXYpOwogCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7CkBAIC05NTAsNyArOTU1LDcgQEAKIAlmcmFtZV9jdHJsID0gMDsKIAlpZiAodW5saWtlbHkoc2tiLT5sZW4gPCBQQ0hfR0JFX1NIT1JUX1BLVCkpCiAJCWZyYW1lX2N0cmwgfD0gUENIX0dCRV9UWERfQ1RSTF9BUEFEOwotCWlmICh1bmxpa2VseSghYWRhcHRlci0+dHhfY3N1bSkpCisJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX05PTkUpCiAJCWZyYW1lX2N0cmwgfD0gUENIX0dCRV9UWERfQ1RSTF9UQ1BJUF9BQ0NfT0ZGOwogCiAJLyogUGVyZm9ybXMgY2hlY2tzdW0gcHJvY2Vzc2luZyAqLwpAQCAtOTU4LDcgKzk2Myw3IEBACiAJICogSXQgaXMgYmVjYXVzZSB0aGUgaGFyZHdhcmUgYWNjZWxlcmF0b3IgZG9lcyBub3Qgc3VwcG9ydCBhIGNoZWNrc3VtLAogCSAqIHdoZW4gdGhlIHJlY2VpdmVkIGRhdGEgc2l6ZSBpcyBsZXNzIHRoYW4gNjQgYnl0ZXMuCiAJICovCi0JaWYgKChza2ItPmxlbiA8IFBDSF9HQkVfU0hPUlRfUEtUKSAmJiAoYWRhcHRlci0+dHhfY3N1bSkpIHsKKwlpZiAoc2tiLT5sZW4gPCBQQ0hfR0JFX1NIT1JUX1BLVCAmJiBza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9OT05FKSB7CiAJCWZyYW1lX2N0cmwgfD0gUENIX0dCRV9UWERfQ1RSTF9BUEFEIHwKIAkJCSAgICAgIFBDSF9HQkVfVFhEX0NUUkxfVENQSVBfQUNDX09GRjsKIAkJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKSB7CkBAIC0xNDI2LDcgKzE0MzEsNyBAQAogCQkJbGVuZ3RoID0gKHJ4X2Rlc2MtPnJ4X3dvcmRzX2VvYikgLSAzOwogCiAJCQkvKiBEZWNpZGUgdGhlIGRhdGEgY29udmVyc2lvbiBtZXRob2QgKi8KLQkJCWlmICghYWRhcHRlci0+cnhfY3N1bSkgeworCQkJaWYgKCEobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSkgewogCQkJCS8qIFtIZWFkZXI6MTRdW3BheWxvYWRdICovCiAJCQkJaWYgKE5FVF9JUF9BTElHTikgewogCQkJCQkvKiBCZWNhdXNlIGFsaWdubWVudCBkaWZmZXJzLApAQCAtMTQ5NCwxMiArMTQ5OSwxMSBAQAogCQkJLyogV3JpdGUgbWV0YSBkYXRlIG9mIHNrYiAqLwogCQkJc2tiX3B1dChza2IsIGxlbmd0aCk7CiAJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZXRkZXYpOwotCQkJaWYgKCh0Y3BfaXBfc3RhdHVzICYgUENIX0dCRV9SWERfQUNDX1NUQVRfVENQSVBPSykgPT0KLQkJCSAgICBQQ0hfR0JFX1JYRF9BQ0NfU1RBVF9UQ1BJUE9LKSB7Ci0JCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQkJCX0gZWxzZSB7CisJCQlpZiAodGNwX2lwX3N0YXR1cyAmIFBDSF9HQkVfUlhEX0FDQ19TVEFUX1RDUElQT0spCiAJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCQkJfQorCQkJZWxzZQorCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisKIAkJCW5hcGlfZ3JvX3JlY2VpdmUoJmFkYXB0ZXItPm5hcGksIHNrYik7CiAJCQkoKndvcmtfZG9uZSkrKzsKIAkJCXByX2RlYnVnKCJSZWNlaXZlIHNrYi0+aXBfc3VtbWVkOiAlZCBsZW5ndGg6ICVkXG4iLApAQCAtMjAzMCw2ICsyMDM0LDI5IEBACiB9CiAKIC8qKgorICogcGNoX2diZV9zZXRfZmVhdHVyZXMgLSBSZXNldCBkZXZpY2UgYWZ0ZXIgZmVhdHVyZXMgY2hhbmdlZAorICogQG5ldGRldjogICBOZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAZmVhdHVyZXM6ICBOZXcgZmVhdHVyZXMKKyAqIFJldHVybnMKKyAqCTA6CQlIVyBzdGF0ZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseQorICovCitzdGF0aWMgaW50IHBjaF9nYmVfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBmZWF0dXJlcykKK3sKKwlzdHJ1Y3QgcGNoX2diZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwl1MzIgY2hhbmdlZCA9IGZlYXR1cmVzIF4gbmV0ZGV2LT5mZWF0dXJlczsKKworCWlmICghKGNoYW5nZWQgJiBORVRJRl9GX1JYQ1NVTSkpCisJCXJldHVybiAwOworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJcGNoX2diZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOworCWVsc2UKKwkJcGNoX2diZV9yZXNldChhZGFwdGVyKTsKKworCXJldHVybiAwOworfQorCisvKioKICAqIHBjaF9nYmVfaW9jdGwgLSBDb250cm9scyByZWdpc3RlciB0aHJvdWdoIGEgTUlJIGludGVyZmFjZQogICogQG5ldGRldjogICBOZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAaWZyOiAgICAgIFBvaW50ZXIgdG8gaWZyIHN0cnVjdHVyZQpAQCAtMjEyOSw2ICsyMTU2LDcgQEAKIAkubmRvX3NldF9tYWNfYWRkcmVzcyA9IHBjaF9nYmVfc2V0X21hYywKIAkubmRvX3R4X3RpbWVvdXQgPSBwY2hfZ2JlX3R4X3RpbWVvdXQsCiAJLm5kb19jaGFuZ2VfbXR1ID0gcGNoX2diZV9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X2ZlYXR1cmVzID0gcGNoX2diZV9zZXRfZmVhdHVyZXMsCiAJLm5kb19kb19pb2N0bCA9IHBjaF9nYmVfaW9jdGwsCiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSAmcGNoX2diZV9zZXRfbXVsdGksCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKQEAgLTIzMzQsNyArMjM2Miw5IEBACiAJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IFBDSF9HQkVfV0FUQ0hET0dfUEVSSU9EOwogCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJmFkYXB0ZXItPm5hcGksCiAJCSAgICAgICBwY2hfZ2JlX25hcGlfcG9sbCwgUENIX0dCRV9SWF9XRUlHSFQpOwotCW5ldGRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfR1JPOworCW5ldGRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX1JYQ1NVTSB8CisJCU5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNOworCW5ldGRldi0+ZmVhdHVyZXMgPSBuZXRkZXYtPmh3X2ZlYXR1cmVzOwogCXBjaF9nYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7CiAKIAlwY2hfZ2JlX21hY19sb2FkX21hY19hZGRyKCZhZGFwdGVyLT5odyk7CkBAIC0yMzczLDExICsyNDAzLDYgQEAKIAogCXBjaF9nYmVfY2hlY2tfb3B0aW9ucyhhZGFwdGVyKTsKIAotCWlmIChhZGFwdGVyLT50eF9jc3VtKQotCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNOwotCWVsc2UKLQkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNKTsKLQogCS8qIGluaXRpYWxpemUgdGhlIHdvbCBzZXR0aW5ncyBiYXNlZCBvbiB0aGUgZWVwcm9tIHNldHRpbmdzICovCiAJYWRhcHRlci0+d2FrZV91cF9ldnQgPSBQQ0hfR0JFX1dMX0lOSVRfU0VUVElORzsKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiTUFDIGFkZHJlc3MgOiAlcE1cbiIsIG5ldGRldi0+ZGV2X2FkZHIpOwpAQCAtMjQyMCw2ICsyNDQ1LDEzIEBACiAJIC5jbGFzcyA9IChQQ0lfQ0xBU1NfTkVUV09SS19FVEhFUk5FVCA8PCA4KSwKIAkgLmNsYXNzX21hc2sgPSAoMHhGRkZGMDApCiAJIH0sCisJey52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX1JPSE0sCisJIC5kZXZpY2UgPSBQQ0lfREVWSUNFX0lEX1JPSE1fTUw3MjIzX0dCRSwKKwkgLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsCisJIC5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELAorCSAuY2xhc3MgPSAoUENJX0NMQVNTX05FVFdPUktfRVRIRVJORVQgPDwgOCksCisJIC5jbGFzc19tYXNrID0gKDB4RkZGRjAwKQorCSB9LAogCS8qIHJlcXVpcmVkIGxhc3QgZW50cnkgKi8KIAl7MH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmVfcGFyYW0uYyBiL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9wYXJhbS5jCmluZGV4IGVmMDk5NmEuLjViNWQ5MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9wYXJhbS5jCisrKyBiL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9wYXJhbS5jCkBAIC00MjYsNiArNDI2LDggQEAKIHZvaWQgcGNoX2diZV9jaGVja19vcHRpb25zKHN0cnVjdCBwY2hfZ2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IHBjaF9nYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJaW50IHZhbDsKIAogCXsgLyogVHJhbnNtaXQgRGVzY3JpcHRvciBDb3VudCAqLwogCQlzdGF0aWMgY29uc3Qgc3RydWN0IHBjaF9nYmVfb3B0aW9uIG9wdCA9IHsKQEAgLTQ2Niw5ICs0NjgsMTAgQEAKIAkJCS5lcnIgID0gImRlZmF1bHRpbmcgdG8gRW5hYmxlZCIsCiAJCQkuZGVmICA9IFBDSF9HQkVfREVGQVVMVF9SWF9DU1VNCiAJCX07Ci0JCWFkYXB0ZXItPnJ4X2NzdW0gPSBYc3VtUlg7Ci0JCXBjaF9nYmVfdmFsaWRhdGVfb3B0aW9uKChpbnQgKikoJmFkYXB0ZXItPnJ4X2NzdW0pLAotCQkJCQkmb3B0LCBhZGFwdGVyKTsKKwkJdmFsID0gWHN1bVJYOworCQlwY2hfZ2JlX3ZhbGlkYXRlX29wdGlvbigmdmFsLCAmb3B0LCBhZGFwdGVyKTsKKwkJaWYgKCF2YWwpCisJCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1JYQ1NVTTsKIAl9CiAJeyAvKiBDaGVja3N1bSBPZmZsb2FkIEVuYWJsZS9EaXNhYmxlICovCiAJCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNoX2diZV9vcHRpb24gb3B0ID0gewpAQCAtNDc3LDkgKzQ4MCwxMCBAQAogCQkJLmVyciAgPSAiZGVmYXVsdGluZyB0byBFbmFibGVkIiwKIAkJCS5kZWYgID0gUENIX0dCRV9ERUZBVUxUX1RYX0NTVU0KIAkJfTsKLQkJYWRhcHRlci0+dHhfY3N1bSA9IFhzdW1UWDsKLQkJcGNoX2diZV92YWxpZGF0ZV9vcHRpb24oKGludCAqKSgmYWRhcHRlci0+dHhfY3N1bSksCi0JCQkJCQkmb3B0LCBhZGFwdGVyKTsKKwkJdmFsID0gWHN1bVRYOworCQlwY2hfZ2JlX3ZhbGlkYXRlX29wdGlvbigmdmFsLCAmb3B0LCBhZGFwdGVyKTsKKwkJaWYgKCF2YWwpCisJCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0FMTF9DU1VNOwogCX0KIAl7IC8qIEZsb3cgQ29udHJvbCAqLwogCQlzdGF0aWMgY29uc3Qgc3RydWN0IHBjaF9nYmVfb3B0aW9uIG9wdCA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9waHkuYyBiL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9waHkuYwppbmRleCA5MjNhNjg3Li4yOGJiOTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmVfcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlX3BoeS5jCkBAIC0yNDcsNyArMjQ3LDcgQEAKIHZvaWQgcGNoX2diZV9waHlfaW5pdF9zZXR0aW5nKHN0cnVjdCBwY2hfZ2JlX2h3ICpodykKIHsKIAlzdHJ1Y3QgcGNoX2diZV9hZGFwdGVyICphZGFwdGVyOwotCXN0cnVjdCBldGh0b29sX2NtZCAgICAgY21kOworCXN0cnVjdCBldGh0b29sX2NtZCAgICAgY21kID0geyAuY21kID0gRVRIVE9PTF9HU0VUIH07CiAJaW50IHJldDsKIAl1MTYgbWlpX3JlZzsKIApAQCAtMjU2LDcgKzI1Niw3IEBACiAJaWYgKHJldCkKIAkJcHJfZXJyKCJFcnJvcjogbWlpX2V0aHRvb2xfZ3NldFxuIik7CiAKLQljbWQuc3BlZWQgPSBody0+bWFjLmxpbmtfc3BlZWQ7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KCZjbWQsIGh3LT5tYWMubGlua19zcGVlZCk7CiAJY21kLmR1cGxleCA9IGh3LT5tYWMubGlua19kdXBsZXg7CiAJY21kLmFkdmVydGlzaW5nID0gaHctPnBoeS5hdXRvbmVnX2FkdmVydGlzZWQ7CiAJY21kLmF1dG9uZWcgPSBody0+bWFjLmF1dG9uZWc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCmluZGV4IDEwODU5MTcuLjI4OGU0ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCkBAIC0xODYwLDcgKzE4NjAsNyBAQAogICAgIHRtcCA9IGludyhpb2FkZHIgKyBDT05GSUcpOwogICAgIGVjbWQtPnBvcnQgPSAodG1wICYgQ0ZHX0FVSV9TRUxFQ1QpID8gUE9SVF9BVUkgOiBQT1JUX1RQOwogICAgIGVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKLSAgICBlY21kLT5zcGVlZCA9IFNQRUVEXzEwOworICAgIGV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBTUEVFRF8xMCk7CiAgICAgZWNtZC0+cGh5X2FkZHJlc3MgPSBpb2FkZHIgKyBNR01UOwogCiAgICAgU01DX1NFTEVDVF9CQU5LKDApOwpAQCAtMTg3NSw4ICsxODc1LDggQEAKICAgICB1MTYgdG1wOwogICAgIHVuc2lnbmVkIGludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAotICAgIGlmIChlY21kLT5zcGVlZCAhPSBTUEVFRF8xMCkKLSAgICAJcmV0dXJuIC1FSU5WQUw7CisgICAgaWYgKGV0aHRvb2xfY21kX3NwZWVkKGVjbWQpICE9IFNQRUVEXzEwKQorCXJldHVybiAtRUlOVkFMOwogICAgIGlmIChlY21kLT5kdXBsZXggIT0gRFVQTEVYX0hBTEYgJiYgZWNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKQogICAgIAlyZXR1cm4gLUVJTlZBTDsKICAgICBpZiAoZWNtZC0+cG9ydCAhPSBQT1JUX1RQICYmIGVjbWQtPnBvcnQgIT0gUE9SVF9BVUkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY25ldDMyLmMgYi9kcml2ZXJzL25ldC9wY25ldDMyLmMKaW5kZXggNzY4MDM3Ni4uYjQ4YWJhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNuZXQzMi5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbmV0MzIuYwpAQCAtMjk1LDEyICsyOTUsMTQgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZQkqbmV4dDsKIAlzdHJ1Y3QgbWlpX2lmX2luZm8JbWlpX2lmOwogCXN0cnVjdCB0aW1lcl9saXN0CXdhdGNoZG9nX3RpbWVyOwotCXN0cnVjdCB0aW1lcl9saXN0CWJsaW5rX3RpbWVyOwogCXUzMgkJCW1zZ19lbmFibGU7CS8qIGRlYnVnIG1lc3NhZ2UgbGV2ZWwgKi8KIAogCS8qIGVhY2ggYml0IGluZGljYXRlcyBhbiBhdmFpbGFibGUgUEhZICovCiAJdTMyCQkJcGh5bWFzazsKIAl1bnNpZ25lZCBzaG9ydAkJY2hpcF92ZXJzaW9uOwkvKiB3aGljaCB2YXJpYW50IHRoaXMgaXMgKi8KKworCS8qIHNhdmVkIHJlZ2lzdGVycyBkdXJpbmcgZXRodG9vbCBibGluayAqLworCXUxNiAJCQlzYXZlX3JlZ3NbNF07CiB9OwogCiBzdGF0aWMgaW50IHBjbmV0MzJfcHJvYmVfcGNpKHN0cnVjdCBwY2lfZGV2ICosIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICopOwpAQCAtMzI0LDggKzMyNiw2IEBACiBzdGF0aWMgdm9pZCBwY25ldDMyX2V0aHRvb2xfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSBzdHJ1Y3QgZXRodG9vbF90ZXN0ICpldGhfdGVzdCwgdTY0ICogZGF0YSk7CiBzdGF0aWMgaW50IHBjbmV0MzJfbG9vcGJhY2tfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1aW50NjRfdCAqIGRhdGExKTsKLXN0YXRpYyBpbnQgcGNuZXQzMl9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKTsKLXN0YXRpYyB2b2lkIHBjbmV0MzJfbGVkX2JsaW5rX2NhbGxiYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBwY25ldDMyX2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHBjbmV0MzJfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncywKIAkJCSAgICAgdm9pZCAqcHRyKTsKQEAgLTEwMjIsNyArMTAyMiw4IEBACiAJcmV0dXJuIHJjOwogfQkJCQkvKiBlbmQgcGNuZXQzMl9sb29wYmFja190ZXN0ICAqLwogCi1zdGF0aWMgdm9pZCBwY25ldDMyX2xlZF9ibGlua19jYWxsYmFjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBwY25ldDMyX3NldF9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICAgZW51bSBldGh0b29sX3BoeXNfaWRfc3RhdGUgc3RhdGUpCiB7CiAJc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBwY25ldDMyX2FjY2VzcyAqYSA9ICZscC0+YTsKQEAgLTEwMzAsNTAgKzEwMzEsMzEgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JZm9yIChpID0gNDsgaSA8IDg7IGkrKykKLQkJYS0+d3JpdGVfYmNyKGlvYWRkciwgaSwgYS0+cmVhZF9iY3IoaW9hZGRyLCBpKSBeIDB4NDAwMCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBFVEhUT09MX0lEX0FDVElWRToKKwkJLyogU2F2ZSB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgYmNycyAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwkJZm9yIChpID0gNDsgaSA8IDg7IGkrKykKKwkJCWxwLT5zYXZlX3JlZ3NbaSAtIDRdID0gYS0+cmVhZF9iY3IoaW9hZGRyLCBpKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDI7CS8qIGN5Y2xlIG9uL29mZiB0d2ljZSBwZXIgc2Vjb25kICovCiAKLQltb2RfdGltZXIoJmxwLT5ibGlua190aW1lciwgUENORVQzMl9CTElOS19USU1FT1VUKTsKLX0KKwljYXNlIEVUSFRPT0xfSURfT046CisJY2FzZSBFVEhUT09MX0lEX09GRjoKKwkJLyogQmxpbmsgdGhlIGxlZCAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwkJZm9yIChpID0gNDsgaSA8IDg7IGkrKykKKwkJCWEtPndyaXRlX2Jjcihpb2FkZHIsIGksIGEtPnJlYWRfYmNyKGlvYWRkciwgaSkgXiAweDQwMDApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOworCQlicmVhazsKIAotc3RhdGljIGludCBwY25ldDMyX3BoeXNfaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBwY25ldDMyX2FjY2VzcyAqYSA9ICZscC0+YTsKLQl1bG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpLCByZWdzWzRdOwotCi0JaWYgKCFscC0+YmxpbmtfdGltZXIuZnVuY3Rpb24pIHsKLQkJaW5pdF90aW1lcigmbHAtPmJsaW5rX3RpbWVyKTsKLQkJbHAtPmJsaW5rX3RpbWVyLmZ1bmN0aW9uID0gKHZvaWQgKilwY25ldDMyX2xlZF9ibGlua19jYWxsYmFjazsKLQkJbHAtPmJsaW5rX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkZXY7CisJY2FzZSBFVEhUT09MX0lEX0lOQUNUSVZFOgorCQkvKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiB0aGUgYmNycyAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwkJZm9yIChpID0gNDsgaSA8IDg7IGkrKykKKwkJCWEtPndyaXRlX2Jjcihpb2FkZHIsIGksIGxwLT5zYXZlX3JlZ3NbaSAtIDRdKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAl9Ci0KLQkvKiBTYXZlIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBiY3JzICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JZm9yIChpID0gNDsgaSA8IDg7IGkrKykKLQkJcmVnc1tpIC0gNF0gPSBhLT5yZWFkX2Jjcihpb2FkZHIsIGkpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0KLQltb2RfdGltZXIoJmxwLT5ibGlua190aW1lciwgamlmZmllcyk7Ci0Jc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQotCS8qIEFWOiB0aGUgbGltaXQgaGVyZSBtYWtlcyBubyBzZW5zZSB3aGF0c29ldmVyICovCi0JaWYgKCghZGF0YSkgfHwgKGRhdGEgPiAodTMyKSAoTUFYX1NDSEVEVUxFX1RJTUVPVVQgLyBIWikpKQotCQlkYXRhID0gKHUzMikgKE1BWF9TQ0hFRFVMRV9USU1FT1VUIC8gSFopOwotCi0JbXNsZWVwX2ludGVycnVwdGlibGUoZGF0YSAqIDEwMDApOwotCWRlbF90aW1lcl9zeW5jKCZscC0+YmxpbmtfdGltZXIpOwotCi0JLyogUmVzdG9yZSB0aGUgb3JpZ2luYWwgdmFsdWUgb2YgdGhlIGJjcnMgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKLQlmb3IgKGkgPSA0OyBpIDwgODsgaSsrKQotCQlhLT53cml0ZV9iY3IoaW9hZGRyLCBpLCByZWdzW2kgLSA0XSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKLQogCXJldHVybiAwOwogfQogCkBAIC0xNDUwLDcgKzE0MzIsNyBAQAogCS5zZXRfcmluZ3BhcmFtCQk9IHBjbmV0MzJfc2V0X3JpbmdwYXJhbSwKIAkuZ2V0X3N0cmluZ3MJCT0gcGNuZXQzMl9nZXRfc3RyaW5ncywKIAkuc2VsZl90ZXN0CQk9IHBjbmV0MzJfZXRodG9vbF90ZXN0LAotCS5waHlzX2lkCQk9IHBjbmV0MzJfcGh5c19pZCwKKwkuc2V0X3BoeXNfaWQJCT0gcGNuZXQzMl9zZXRfcGh5c19pZCwKIAkuZ2V0X3JlZ3NfbGVuCQk9IHBjbmV0MzJfZ2V0X3JlZ3NfbGVuLAogCS5nZXRfcmVncwkJPSBwY25ldDMyX2dldF9yZWdzLAogCS5nZXRfc3NldF9jb3VudAkJPSBwY25ldDMyX2dldF9zc2V0X2NvdW50LApAQCAtMjExNyw3ICsyMDk5LDcgQEAKIAkJaW50IGZpcnN0X3BoeSA9IC0xOwogCQl1MTYgYm1jcjsKIAkJdTMyIGJjcjk7Ci0JCXN0cnVjdCBldGh0b29sX2NtZCBlY21kOworCQlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZCA9IHsgLmNtZCA9IEVUSFRPT0xfR1NFVCB9OwogCiAJCS8qCiAJCSAqIFRoZXJlIGlzIHJlYWxseSBubyBnb29kIG90aGVyIHdheSB0byBoYW5kbGUgbXVsdGlwbGUgUEhZcwpAQCAtMjEzMyw5ICsyMTE1LDkgQEAKIAkJCWVjbWQucG9ydCA9IFBPUlRfTUlJOwogCQkJZWNtZC50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CiAJCQllY21kLmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7Ci0JCQllY21kLnNwZWVkID0KLQkJCSAgICBscC0+Ci0JCQkgICAgb3B0aW9ucyAmIFBDTkVUMzJfUE9SVF8xMDAgPyBTUEVFRF8xMDAgOiBTUEVFRF8xMDsKKwkJCWV0aHRvb2xfY21kX3NwZWVkX3NldCgmZWNtZCwKKwkJCQkJICAgICAgKGxwLT5vcHRpb25zICYgUENORVQzMl9QT1JUXzEwMCkgPworCQkJCQkgICAgICBTUEVFRF8xMDAgOiBTUEVFRF8xMCk7CiAJCQliY3I5ID0gbHAtPmEucmVhZF9iY3IoaW9hZGRyLCA5KTsKIAogCQkJaWYgKGxwLT5vcHRpb25zICYgUENORVQzMl9QT1JUX0ZEKSB7CkBAIC0yNzgxLDExICsyNzYzLDExIEBACiAJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKIAkJaWYgKGxwLT5taWkpIHsKIAkJCWlmIChuZXRpZl9tc2dfbGluayhscCkpIHsKLQkJCQlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZDsKKwkJCQlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZCA9IHsKKwkJCQkJLmNtZCA9IEVUSFRPT0xfR1NFVCB9OwogCQkJCW1paV9ldGh0b29sX2dzZXQoJmxwLT5taWlfaWYsICZlY21kKTsKLQkJCQluZXRkZXZfaW5mbyhkZXYsICJsaW5rIHVwLCAlc01icHMsICVzLWR1cGxleFxuIiwKLQkJCQkJICAgIChlY21kLnNwZWVkID09IFNQRUVEXzEwMCkKLQkJCQkJICAgID8gIjEwMCIgOiAiMTAiLAorCQkJCW5ldGRldl9pbmZvKGRldiwgImxpbmsgdXAsICV1TWJwcywgJXMtZHVwbGV4XG4iLAorCQkJCQkgICAgZXRodG9vbF9jbWRfc3BlZWQoJmVjbWQpLAogCQkJCQkgICAgKGVjbWQuZHVwbGV4ID09IERVUExFWF9GVUxMKQogCQkJCQkgICAgPyAiZnVsbCIgOiAiaGFsZiIpOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS5jCmluZGV4IGY3NjcwMzMuLmE0NzU5NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHkuYworKysgYi9kcml2ZXJzL25ldC9waHkvcGh5LmMKQEAgLTIzOCw2ICsyMzgsOCBAQAogICovCiBpbnQgcGh5X2V0aHRvb2xfc3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKKwl1MzIgc3BlZWQgPSBldGh0b29sX2NtZF9zcGVlZChjbWQpOworCiAJaWYgKGNtZC0+cGh5X2FkZHJlc3MgIT0gcGh5ZGV2LT5hZGRyKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMjUzLDE2ICsyNTUsMTYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSAmJgotCSAgICAoKGNtZC0+c3BlZWQgIT0gU1BFRURfMTAwMCAmJgotCSAgICAgIGNtZC0+c3BlZWQgIT0gU1BFRURfMTAwICYmCi0JICAgICAgY21kLT5zcGVlZCAhPSBTUEVFRF8xMCkgfHwKKwkgICAgKChzcGVlZCAhPSBTUEVFRF8xMDAwICYmCisJICAgICAgc3BlZWQgIT0gU1BFRURfMTAwICYmCisJICAgICAgc3BlZWQgIT0gU1BFRURfMTApIHx8CiAJICAgICAoY21kLT5kdXBsZXggIT0gRFVQTEVYX0hBTEYgJiYKIAkgICAgICBjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXBoeWRldi0+YXV0b25lZyA9IGNtZC0+YXV0b25lZzsKIAotCXBoeWRldi0+c3BlZWQgPSBjbWQtPnNwZWVkOworCXBoeWRldi0+c3BlZWQgPSBzcGVlZDsKIAogCXBoeWRldi0+YWR2ZXJ0aXNpbmcgPSBjbWQtPmFkdmVydGlzaW5nOwogCkBAIC0yODYsNyArMjg4LDcgQEAKIAogCWNtZC0+YWR2ZXJ0aXNpbmcgPSBwaHlkZXYtPmFkdmVydGlzaW5nOwogCi0JY21kLT5zcGVlZCA9IHBoeWRldi0+c3BlZWQ7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgcGh5ZGV2LT5zcGVlZCk7CiAJY21kLT5kdXBsZXggPSBwaHlkZXYtPmR1cGxleDsKIAljbWQtPnBvcnQgPSBQT1JUX01JSTsKIAljbWQtPnBoeV9hZGRyZXNzID0gcGh5ZGV2LT5hZGRyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHB0cC5jIGIvZHJpdmVycy9uZXQvcHB0cC5jCmluZGV4IDUxZGZjZjguLjEyODZmZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwdHAuYworKysgYi9kcml2ZXJzL25ldC9wcHRwLmMKQEAgLTE3NSw2ICsxNzUsNyBAQAogCXN0cnVjdCBwcHRwX29wdCAqb3B0ID0gJnBvLT5wcm90by5wcHRwOwogCXN0cnVjdCBwcHRwX2dyZV9oZWFkZXIgKmhkcjsKIAl1bnNpZ25lZCBpbnQgaGVhZGVyX2xlbiA9IHNpemVvZigqaGRyKTsKKwlzdHJ1Y3QgZmxvd2k0IGZsNDsKIAlpbnQgaXNsY3A7CiAJaW50IGxlbjsKIAl1bnNpZ25lZCBjaGFyICpkYXRhOwpAQCAtMTg5LDcgKzE5MCw3IEBACiAJaWYgKHNrX3BwcG94KHBvKS0+c2tfc3RhdGUgJiBQUFBPWF9ERUFEKQogCQlnb3RvIHR4X2Vycm9yOwogCi0JcnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMoJmluaXRfbmV0LCBOVUxMLAorCXJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKCZpbml0X25ldCwgJmZsNCwgTlVMTCwKIAkJCQkgICBvcHQtPmRzdF9hZGRyLnNpbl9hZGRyLnNfYWRkciwKIAkJCQkgICBvcHQtPnNyY19hZGRyLnNpbl9hZGRyLnNfYWRkciwKIAkJCQkgICAwLCAwLCBJUFBST1RPX0dSRSwKQEAgLTI3MCw4ICsyNzEsOCBAQAogCQlpcGgtPmZyYWdfb2ZmCT0JMDsKIAlpcGgtPnByb3RvY29sID0gSVBQUk9UT19HUkU7CiAJaXBoLT50b3MgICAgICA9IDA7Ci0JaXBoLT5kYWRkciAgICA9IHJ0LT5ydF9kc3Q7Ci0JaXBoLT5zYWRkciAgICA9IHJ0LT5ydF9zcmM7CisJaXBoLT5kYWRkciAgICA9IGZsNC5kYWRkcjsKKwlpcGgtPnNhZGRyICAgID0gZmw0LnNhZGRyOwogCWlwaC0+dHRsICAgICAgPSBpcDRfZHN0X2hvcGxpbWl0KCZydC0+ZHN0KTsKIAlpcGgtPnRvdF9sZW4gID0gaHRvbnMoc2tiLT5sZW4pOwogCkBAIC00MzQsNiArNDM1LDcgQEAKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG8gPSBwcHBveF9zayhzayk7CiAJc3RydWN0IHBwdHBfb3B0ICpvcHQgPSAmcG8tPnByb3RvLnBwdHA7CiAJc3RydWN0IHJ0YWJsZSAqcnQ7CisJc3RydWN0IGZsb3dpNCBmbDQ7CiAJaW50IGVycm9yID0gMDsKIAogCWlmIChzcC0+c2FfcHJvdG9jb2wgIT0gUFhfUFJPVE9fUFBUUCkKQEAgLTQ2Myw3ICs0NjUsNyBAQAogCXBvLT5jaGFuLnByaXZhdGUgPSBzazsKIAlwby0+Y2hhbi5vcHMgPSAmcHB0cF9jaGFuX29wczsKIAotCXJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKCZpbml0X25ldCwgc2ssCisJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMoJmluaXRfbmV0LCAmZmw0LCBzaywKIAkJCQkgICBvcHQtPmRzdF9hZGRyLnNpbl9hZGRyLnNfYWRkciwKIAkJCQkgICBvcHQtPnNyY19hZGRyLnNpbl9hZGRyLnNfYWRkciwKIAkJCQkgICAwLCAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX25ldC5jIGIvZHJpdmVycy9uZXQvcHMzX2dlbGljX25ldC5jCmluZGV4IGZmZGY3MzQuLmIxZjI1MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BzM19nZWxpY19uZXQuYworKysgYi9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmMKQEAgLTk1MSw3ICs5NTEsNyBAQAogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldGRldik7CiAKIAkvKiBjaGVja3N1bSBvZmZsb2FkICovCi0JaWYgKGNhcmQtPnJ4X2NzdW0pIHsKKwlpZiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSB7CiAJCWlmICgoZGF0YV9zdGF0dXMgJiBHRUxJQ19ERVNDUl9EQVRBX1NUQVRVU19DSEtfTUFTSykgJiYKIAkJICAgICghKGRhdGFfZXJyb3IgJiBHRUxJQ19ERVNDUl9EQVRBX0VSUk9SX0NIS19NQVNLKSkpCiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwpAQCAtMTI0MywxNyArMTI0MywxNyBAQAogCiAJc3dpdGNoIChjYXJkLT5ldGhlcl9wb3J0X3N0YXR1cyAmIEdFTElDX0xWMV9FVEhFUl9TUEVFRF9NQVNLKSB7CiAJY2FzZSBHRUxJQ19MVjFfRVRIRVJfU1BFRURfMTA6Ci0JCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgU1BFRURfMTApOwogCQlicmVhazsKIAljYXNlIEdFTElDX0xWMV9FVEhFUl9TUEVFRF8xMDA6Ci0JCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDA7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIFNQRUVEXzEwMCk7CiAJCWJyZWFrOwogCWNhc2UgR0VMSUNfTFYxX0VUSEVSX1NQRUVEXzEwMDA6Ci0JCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDAwOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBTUEVFRF8xMDAwKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJfaW5mbygiJXM6IHNwZWVkIHVua25vd25cbiIsIF9fZnVuY19fKTsKLQkJY21kLT5zcGVlZCA9IFNQRUVEXzEwOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBTUEVFRF8xMCk7CiAJCWJyZWFrOwogCX0KIApAQCAtMTMxMiwyMSArMTMxMiw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXUzMiBnZWxpY19uZXRfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlzdHJ1Y3QgZ2VsaWNfY2FyZCAqY2FyZCA9IG5ldGRldl9jYXJkKG5ldGRldik7Ci0KLQlyZXR1cm4gY2FyZC0+cnhfY3N1bTsKLX0KLQotaW50IGdlbGljX25ldF9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgZ2VsaWNfY2FyZCAqY2FyZCA9IG5ldGRldl9jYXJkKG5ldGRldik7Ci0KLQljYXJkLT5yeF9jc3VtID0gZGF0YTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgZ2VsaWNfbmV0X2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCSAgICAgIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKIHsKQEAgLTE0MTEsMTAgKzEzOTYsNiBAQAogCS5nZXRfc2V0dGluZ3MJPSBnZWxpY19ldGhlcl9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncwk9IGdlbGljX2V0aGVyX3NldF9zZXR0aW5ncywKIAkuZ2V0X2xpbmsJPSBldGh0b29sX29wX2dldF9saW5rLAotCS5nZXRfdHhfY3N1bQk9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCi0JLnNldF90eF9jc3VtCT0gZXRodG9vbF9vcF9zZXRfdHhfY3N1bSwKLQkuZ2V0X3J4X2NzdW0JPSBnZWxpY19uZXRfZ2V0X3J4X2NzdW0sCi0JLnNldF9yeF9jc3VtCT0gZ2VsaWNfbmV0X3NldF9yeF9jc3VtLAogCS5nZXRfd29sCT0gZ2VsaWNfbmV0X2dldF93b2wsCiAJLnNldF93b2wJPSBnZWxpY19uZXRfc2V0X3dvbCwKIH07CkBAIC0xNTEyLDcgKzE0OTMsMTEgQEAKIAlpbnQgc3RhdHVzOwogCXU2NCB2MSwgdjI7CiAKKwluZXRkZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU07CisKIAluZXRkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNOworCWlmIChHRUxJQ19DQVJEX1JYX0NTVU1fREVGQVVMVCkKKwkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1JYQ1NVTTsKIAogCXN0YXR1cyA9IGx2MV9uZXRfY29udHJvbChidXNfaWQoY2FyZCksIGRldl9pZChjYXJkKSwKIAkJCQkgR0VMSUNfTFYxX0dFVF9NQUNfQUREUkVTUywKQEAgLTE3NTYsNyArMTc0MSw2IEBACiAJLyogc2V0dXAgY2FyZCBzdHJ1Y3R1cmUgKi8KIAljYXJkLT5pcnFfbWFzayA9IEdFTElDX0NBUkRfUlhJTlQgfCBHRUxJQ19DQVJEX1RYSU5UIHwKIAkJR0VMSUNfQ0FSRF9QT1JUX1NUQVRVU19DSEFOR0VEOwotCWNhcmQtPnJ4X2NzdW0gPSBHRUxJQ19DQVJEX1JYX0NTVU1fREVGQVVMVDsKIAogCiAJaWYgKGdlbGljX2NhcmRfaW5pdF9jaGFpbihjYXJkLCAmY2FyZC0+dHhfY2hhaW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmggYi9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmgKaW5kZXggZmFkYWRmOS4uZDlhNTViOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX25ldC5oCisrKyBiL2RyaXZlcnMvbmV0L3BzM19nZWxpY19uZXQuaApAQCAtMjkwLDcgKzI5MCw2IEBACiAJc3RydWN0IGdlbGljX2Rlc2NyX2NoYWluIHR4X2NoYWluOwogCXN0cnVjdCBnZWxpY19kZXNjcl9jaGFpbiByeF9jaGFpbjsKIAlpbnQgcnhfZG1hX3Jlc3RhcnRfcmVxdWlyZWQ7Ci0JaW50IHJ4X2NzdW07CiAJLyoKIAkgKiB0eF9sb2NrIGd1YXJkcyB0eCBkZXNjcmlwdG9yIGxpc3QgYW5kCiAJICogdHhfZG1hX3Byb2dyZXNzLgpAQCAtMzc3LDggKzM3Niw2IEBACiAvKiBzaGFyZWQgZXRodG9vbCBvcHMgKi8KIGV4dGVybiB2b2lkIGdlbGljX25ldF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCSAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbyk7Ci1leHRlcm4gdTMyIGdlbGljX25ldF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKLWV4dGVybiBpbnQgZ2VsaWNfbmV0X3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKTsKIGV4dGVybiB2b2lkIGdlbGljX25ldF9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiAKICNlbmRpZiAvKiBfR0VMSUNfTkVUX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzM19nZWxpY193aXJlbGVzcy5jIGIvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmMKaW5kZXggYjVhZTI5ZC4uMmU2MjkzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmMKKysrIGIvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmMKQEAgLTI1ODEsMTAgKzI1ODEsNiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBnZWxpY193bF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JPSBnZWxpY19uZXRfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rCT0gZ2VsaWNfd2xfZ2V0X2xpbmssCi0JLmdldF90eF9jc3VtCT0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKLQkuc2V0X3R4X2NzdW0JPSBldGh0b29sX29wX3NldF90eF9jc3VtLAotCS5nZXRfcnhfY3N1bQk9IGdlbGljX25ldF9nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0JPSBnZWxpY19uZXRfc2V0X3J4X2NzdW0sCiB9OwogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgZ2VsaWNfd2xfc2V0dXBfbmV0ZGV2X29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxhM3h4eC5jIGIvZHJpdmVycy9uZXQvcWxhM3h4eC5jCmluZGV4IDM0OGI0ZjEuLjc3MWJiNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsYTN4eHguYworKysgYi9kcml2ZXJzL25ldC9xbGEzeHh4LmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKICNpbmNsdWRlICJxbGEzeHh4LmgiCiAKQEAgLTE3MjUsNyArMTcyNiw3IEBACiAJfQogCWVjbWQtPmFkdmVydGlzaW5nID0gcWxfc3VwcG9ydGVkX21vZGVzKHFkZXYpOwogCWVjbWQtPmF1dG9uZWcgPSBxbF9nZXRfYXV0b19jZmdfc3RhdHVzKHFkZXYpOwotCWVjbWQtPnNwZWVkID0gcWxfZ2V0X3NwZWVkKHFkZXYpOworCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBxbF9nZXRfc3BlZWQocWRldikpOwogCWVjbWQtPmR1cGxleCA9IHFsX2dldF9mdWxsX2R1cChxZGV2KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTM0NjgsNyArMzQ2OSw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBxZGV2LT5uZGV2OwogCWludCBlcnI7Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3MgPSBJUlFGX1NBTVBMRV9SQU5ET00gfCBJUlFGX1NIQVJFRDsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFncyA9IElSUUZfU0hBUkVEOwogCXVuc2lnbmVkIGxvbmcgaHdfZmxhZ3M7CiAKIAlpZiAocWxfYWxsb2NfbWVtX3Jlc291cmNlcyhxZGV2KSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pYy5oIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pYy5oCmluZGV4IGIwZGVhZDAuLjQ4MGVmNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWMuaAorKysgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljLmgKQEAgLTI5LDEzICsyOSwxNSBAQAogCiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgogCiAjaW5jbHVkZSAicWxjbmljX2hkci5oIgogCiAjZGVmaW5lIF9RTENOSUNfTElOVVhfTUFKT1IgNQogI2RlZmluZSBfUUxDTklDX0xJTlVYX01JTk9SIDAKLSNkZWZpbmUgX1FMQ05JQ19MSU5VWF9TVUJWRVJTSU9OIDE1Ci0jZGVmaW5lIFFMQ05JQ19MSU5VWF9WRVJTSU9OSUQgICI1LjAuMTUiCisjZGVmaW5lIF9RTENOSUNfTElOVVhfU1VCVkVSU0lPTiAxOAorI2RlZmluZSBRTENOSUNfTElOVVhfVkVSU0lPTklEICAiNS4wLjE4IgogI2RlZmluZSBRTENOSUNfRFJWX0lEQ19WRVIgIDB4MDEKICNkZWZpbmUgUUxDTklDX0RSSVZFUl9WRVJTSU9OICAoKF9RTENOSUNfTElOVVhfTUFKT1IgPDwgMTYpIHxcCiAJCSAoX1FMQ05JQ19MSU5VWF9NSU5PUiA8PCA4KSB8IChfUUxDTklDX0xJTlVYX1NVQlZFUlNJT04pKQpAQCAtOTMsOCArOTUsNiBAQAogI2RlZmluZSBUWF9JUF9QS1QJMHgwNAogI2RlZmluZSBUWF9UQ1BfTFNPCTB4MDUKICNkZWZpbmUgVFhfVENQX0xTTzYJMHgwNgotI2RlZmluZSBUWF9JUFNFQwkweDA3Ci0jZGVmaW5lIFRYX0lQU0VDX0NNRAkweDBhCiAjZGVmaW5lIFRYX1RDUFY2X1BLVAkweDBiCiAjZGVmaW5lIFRYX1VEUFY2X1BLVAkweDBjCiAKQEAgLTExOCw3ICsxMTgsNiBAQAogI2RlZmluZSBQSEFOX1BFR19SQ1ZfSU5JVElBTElaRUQJMHhmZjAxCiAKICNkZWZpbmUgTlVNX1JDVl9ERVNDX1JJTkdTCTMKLSNkZWZpbmUgTlVNX1NUU19ERVNDX1JJTkdTCTQKIAogI2RlZmluZSBSQ1ZfUklOR19OT1JNQUwgMAogI2RlZmluZSBSQ1ZfUklOR19KVU1CTwkxCkBAIC0yMDEsNyArMjAwLDcgQEAKIAlfX2xlMTYgcmVzZXJ2ZWQ7CiAJX19sZTMyIGJ1ZmZlcl9sZW5ndGg7CS8qIGFsbG9jYXRlZCBidWZmZXIgbGVuZ3RoICh1c3VhbGx5IDJLKSAqLwogCV9fbGU2NCBhZGRyX2J1ZmZlcjsKLX07Cit9IF9fcGFja2VkOwogCiAvKiBvcGNvZGUgZmllbGQgaW4gc3RhdHVzX2Rlc2MgKi8KICNkZWZpbmUgUUxDTklDX1NZTl9PRkZMT0FECTB4MDMKQEAgLTI5Myw2ICsyOTIsNyBAQAogLyogRmxhc2ggRGVmaW5lcyBhbmQgU3RydWN0dXJlcyAqLwogI2RlZmluZSBRTENOSUNfRkxUX0xPQ0FUSU9OCTB4M0YxMDAwCiAjZGVmaW5lIFFMQ05JQ19GV19JTUFHRV9SRUdJT04JMHg3NAorI2RlZmluZSBRTENOSUNfQk9PVExEX1JFR0lPTiAgICAwWDcyCiBzdHJ1Y3QgcWxjbmljX2ZsdF9oZWFkZXIgewogCXUxNiB2ZXJzaW9uOwogCXUxNiBsZW47CkBAIC0zMDcsNyArMzA3LDcgQEAKIAl1OCByZXNlcnZlZDE7CiAJdTMyIHNpemU7CiAJdTMyIHN0YXJ0X2FkZHI7Ci0JdTMyIGVuZF9hZGQ7CisJdTMyIGVuZF9hZGRyOwogfTsKIAogLyogTWFnaWMgbnVtYmVyIHRvIGxldCB1c2VyIGtub3cgZmxhc2ggaXMgcHJvZ3JhbW1lZCAqLwpAQCAtMzY2LDEyICszNjYsNiBAQAogCXU2NCBsZW5ndGg7CiB9OwogCi1zdHJ1Y3QgcWxjbmljX3JlY3ZfY3JiIHsKLQl1MzIgY3JiX3Jjdl9wcm9kdWNlcltOVU1fUkNWX0RFU0NfUklOR1NdOwotCXUzMiBjcmJfc3RzX2NvbnN1bWVyW05VTV9TVFNfREVTQ19SSU5HU107Ci0JdTMyIHN3X2ludF9tYXNrW05VTV9TVFNfREVTQ19SSU5HU107Ci19OwotCiAvKiAgICBGb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBzdGF0ZSBvZiB0aGUgYnVmZmVycyAgICAqLwogI2RlZmluZQlRTENOSUNfQlVGRkVSX0ZSRUUJMAogI2RlZmluZQlRTENOSUNfQlVGRkVSX0JVU1kJMQpAQCAtMzg4LDEwICszODIsMTAgQEAKIAogLyogSW4gcnhfYnVmZmVyLCB3ZSBkbyBub3QgbmVlZCBtdWx0aXBsZSBmcmFnbWVudHMgYXMgaXMgYSBzaW5nbGUgYnVmZmVyICovCiBzdHJ1Y3QgcWxjbmljX3J4X2J1ZmZlciB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JdTY0IGRtYTsKIAl1MTYgcmVmX2hhbmRsZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl1NjQgZG1hOwogfTsKIAogLyogQm9hcmQgdHlwZXMgKi8KQEAgLTM5OSw2ICszOTMsNDggQEAKICNkZWZpbmUJUUxDTklDX1hHQkUJMHgwMgogCiAvKgorICogSW50ZXJydXB0IGNvYWxlc2NpbmcgZGVmYXVsdHMuIFRoZSBkZWZhdWx0cyBhcmUgZm9yIDE1MDAgTVRVLiBJdCBpcworICogYWRqdXN0ZWQgYmFzZWQgb24gY29uZmlndXJlZCBNVFUuCisgKi8KKyNkZWZpbmUgUUxDTklDX0RFRkFVTFRfSU5UUl9DT0FMRVNDRV9SWF9USU1FX1VTCTMKKyNkZWZpbmUgUUxDTklDX0RFRkFVTFRfSU5UUl9DT0FMRVNDRV9SWF9QQUNLRVRTCTI1NgorCisjZGVmaW5lIFFMQ05JQ19JTlRSX0RFRkFVTFQJCQkweDA0CisjZGVmaW5lIFFMQ05JQ19DT05GSUdfSU5UUl9DT0FMRVNDRQkJMworCitzdHJ1Y3QgcWxjbmljX25pY19pbnRyX2NvYWxlc2NlIHsKKwl1OAl0eXBlOworCXU4CXN0c19yaW5nX21hc2s7CisJdTE2CXJ4X3BhY2tldHM7CisJdTE2CXJ4X3RpbWVfdXM7CisJdTE2CWZsYWc7CisJdTMyCXRpbWVyX291dDsKK307CisKK3N0cnVjdCBxbGNuaWNfZHVtcF90ZW1wbGF0ZV9oZHIgeworCV9fbGUzMgl0eXBlOworCV9fbGUzMglvZmZzZXQ7CisJX19sZTMyCXNpemU7CisJX19sZTMyCWNhcF9tYXNrOworCV9fbGUzMgludW1fZW50cmllczsKKwlfX2xlMzIJdmVyc2lvbjsKKwlfX2xlMzIJdGltZXN0YW1wOworCV9fbGUzMgljaGVja3N1bTsKKwlfX2xlMzIJZHJ2X2NhcF9tYXNrOworCV9fbGUzMglzeXNfaW5mb1szXTsKKwlfX2xlMzIJc2F2ZWRfc3RhdGVbMTZdOworCV9fbGUzMgljYXBfc2l6ZXNbOF07CisJX19sZTMyCXJzdmRbMF07Cit9OworCitzdHJ1Y3QgcWxjbmljX2Z3X2R1bXAgeworCXU4CWNscjsJLyogZmxhZyB0byBpbmRpY2F0ZSBpZiBkdW1wIGlzIGNsZWFyZWQgKi8KKwl1MzIJc2l6ZTsJLyogdG90YWwgc2l6ZSBvZiB0aGUgZHVtcCAqLworCXZvaWQJKmRhdGE7CS8qIGR1bXAgZGF0YSBhcmVhICovCisJc3RydWN0CXFsY25pY19kdW1wX3RlbXBsYXRlX2hkciAqdG1wbF9oZHI7Cit9OworCisvKgogICogT25lIGhhcmR3YXJlX2NvbnRleHR7fSBwZXIgYWRhcHRlcgogICogY29udGFpbnMgaW50ZXJydXB0IGluZm8gYXMgd2VsbCBzaGFyZWQgaGFyZHdhcmUgaW5mby4KICAqLwpAQCAtNDE2LDYgKzQ1Miw5IEBACiAJdTggbGlua3VwOwogCXUxNiBwb3J0X3R5cGU7CiAJdTE2IGJvYXJkX3R5cGU7CisKKwlzdHJ1Y3QgcWxjbmljX25pY19pbnRyX2NvYWxlc2NlIGNvYWw7CisJc3RydWN0IHFsY25pY19md19kdW1wIGZ3X2R1bXA7CiB9OwogCiBzdHJ1Y3QgcWxjbmljX2FkYXB0ZXJfc3RhdHMgewpAQCAtNDQzLDUwICs0ODIsNDkgQEAKICAqIGJlIG9uZSBSY3YgRGVzY3JpcHRvciBmb3Igbm9ybWFsIHBhY2tldHMsIG9uZSBmb3IganVtYm8gYW5kIG1heSBiZSBvdGhlcnMuCiAgKi8KIHN0cnVjdCBxbGNuaWNfaG9zdF9yZHNfcmluZyB7Ci0JdTMyIHByb2R1Y2VyOwotCXUzMiBudW1fZGVzYzsKLQl1MzIgZG1hX3NpemU7Ci0JdTMyIHNrYl9zaXplOwotCXUzMiBmbGFnczsKIAl2b2lkIF9faW9tZW0gKmNyYl9yY3ZfcHJvZHVjZXI7CiAJc3RydWN0IHJjdl9kZXNjICpkZXNjX2hlYWQ7CiAJc3RydWN0IHFsY25pY19yeF9idWZmZXIgKnJ4X2J1Zl9hcnI7CisJdTMyIG51bV9kZXNjOworCXUzMiBwcm9kdWNlcjsKKwl1MzIgZG1hX3NpemU7CisJdTMyIHNrYl9zaXplOworCXUzMiBmbGFnczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfbGlzdDsKIAlzcGlubG9ja190IGxvY2s7CiAJZG1hX2FkZHJfdCBwaHlzX2FkZHI7Ci19OworfSBfX19fY2FjaGVsaW5lX2ludGVybm9kZWFsaWduZWRfaW5fc21wOwogCiBzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgewogCXUzMiBjb25zdW1lcjsKIAl1MzIgbnVtX2Rlc2M7CiAJdm9pZCBfX2lvbWVtICpjcmJfc3RzX2NvbnN1bWVyOwotCXZvaWQgX19pb21lbSAqY3JiX2ludHJfbWFzazsKIAogCXN0cnVjdCBzdGF0dXNfZGVzYyAqZGVzY19oZWFkOwogCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcjsKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfbGlzdFtOVU1fUkNWX0RFU0NfUklOR1NdOwogCisJdm9pZCBfX2lvbWVtICpjcmJfaW50cl9tYXNrOwogCWludCBpcnE7CiAKIAlkbWFfYWRkcl90IHBoeXNfYWRkcjsKIAljaGFyIG5hbWVbSUZOQU1TSVorNF07Ci19OworfSBfX19fY2FjaGVsaW5lX2ludGVybm9kZWFsaWduZWRfaW5fc21wOwogCiBzdHJ1Y3QgcWxjbmljX2hvc3RfdHhfcmluZyB7CiAJdTMyIHByb2R1Y2VyOwotCV9fbGUzMiAqaHdfY29uc3VtZXI7CiAJdTMyIHN3X2NvbnN1bWVyOwotCXZvaWQgX19pb21lbSAqY3JiX2NtZF9wcm9kdWNlcjsKIAl1MzIgbnVtX2Rlc2M7Ci0KLQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7Ci0KLQlzdHJ1Y3QgcWxjbmljX2NtZF9idWZmZXIgKmNtZF9idWZfYXJyOworCXZvaWQgX19pb21lbSAqY3JiX2NtZF9wcm9kdWNlcjsKIAlzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKmRlc2NfaGVhZDsKKwlzdHJ1Y3QgcWxjbmljX2NtZF9idWZmZXIgKmNtZF9idWZfYXJyOworCV9fbGUzMiAqaHdfY29uc3VtZXI7CisKIAlkbWFfYWRkcl90IHBoeXNfYWRkcjsKIAlkbWFfYWRkcl90IGh3X2NvbnNfcGh5c19hZGRyOwotfTsKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7Cit9IF9fX19jYWNoZWxpbmVfaW50ZXJub2RlYWxpZ25lZF9pbl9zbXA7CiAKIC8qCiAgKiBSZWNlaXZlIGNvbnRleHQuIFRoZXJlIGlzIG9uZSBzdWNoIHN0cnVjdHVyZSBwZXIgaW5zdGFuY2Ugb2YgdGhlCkBAIC00OTUsMTIgKzUzMywxMiBAQAogICogcHJlc2VudCBlbHNld2hlcmUuCiAgKi8KIHN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0IHsKKwlzdHJ1Y3QgcWxjbmljX2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nczsKKwlzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nczsKIAl1MzIgc3RhdGU7CiAJdTE2IGNvbnRleHRfaWQ7CiAJdTE2IHZpcnRfcG9ydDsKIAotCXN0cnVjdCBxbGNuaWNfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmdzOwotCXN0cnVjdCBxbGNuaWNfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmdzOwogfTsKIAogLyogSFcgY29udGV4dCBjcmVhdGlvbiAqLwpAQCAtNTM5LDkgKzU3Nyw2IEBACiAjZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9ERVNUUk9ZX1JYX0NUWCAgICAgICAgICAweDAwMDAwMDA4CiAjZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9DUkVBVEVfVFhfQ1RYICAgICAgICAgICAweDAwMDAwMDA5CiAjZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9ERVNUUk9ZX1RYX0NUWCAgICAgICAgICAweDAwMDAwMDBhCi0jZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9TRVRVUF9TVEFUSVNUSUNTICAgICAgICAweDAwMDAwMDBlCi0jZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9HRVRfU1RBVElTVElDUyAgICAgICAgICAweDAwMDAwMDBmCi0jZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9ERUxFVEVfU1RBVElTVElDUyAgICAgICAweDAwMDAwMDEwCiAjZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9TRVRfTVRVICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCiAjZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9SRUFEX1BIWQkJMHgwMDAwMDAxMwogI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfV1JJVEVfUEhZCQkweDAwMDAwMDE0CkBAIC01NTAsMTcgKzU4NSwxMSBAQAogI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfU0VUX0ZMT1dfQ1RMCQkweDAwMDAwMDE3CiAjZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9SRUFEX01BWF9NVFUJCTB4MDAwMDAwMTgKICNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX1JFQURfTUFYX0xSTwkJMHgwMDAwMDAxOQotI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfQ09ORklHVVJFX1RPRQkJMHgwMDAwMDAxYQotI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfRlVOQ19BVFRSSUIJCTB4MDAwMDAwMWIKLSNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX1JFQURfUEVYUV9QQVJBTUVURVJTCTB4MDAwMDAwMWMKLSNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX0dFVF9MSUNfQ0FQQUJJTElUSUVTCTB4MDAwMDAwMWQKLSNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX1JFQURfTUFYX0xST19QRVJfQk9BUkQJMHgwMDAwMDAxZQogI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfTUFDX0FERFJFU1MJCTB4MDAwMDAwMWYKIAogI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfR0VUX1BDSV9JTkZPCQkweDAwMDAwMDIwCiAjZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9HRVRfTklDX0lORk8JCTB4MDAwMDAwMjEKICNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX1NFVF9OSUNfSU5GTwkJMHgwMDAwMDAyMgotI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfUkVTRVRfTlBBUgkJMHgwMDAwMDAyMwogI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfR0VUX0VTV0lUQ0hfQ0FQQUJJTElUWQkweDAwMDAwMDI0CiAjZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9UT0dHTEVfRVNXSVRDSAkJMHgwMDAwMDAyNQogI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfR0VUX0VTV0lUQ0hfU1RBVFVTCTB4MDAwMDAwMjYKQEAgLTU2OCw4ICs1OTcsMTIgQEAKICNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX0NPTkZJR1VSRV9FU1dJVENICTB4MDAwMDAwMjgKICNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX0dFVF9FU1dJVENIX1BPUlRfQ09ORklHCTB4MDAwMDAwMjkKICNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX0dFVF9FU1dJVENIX1NUQVRTCTB4MDAwMDAwMmEKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX0NPTkZJR19QT1JUCQkweDAwMDAwMDJFCisjZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9URU1QX1NJWkUJCTB4MDAwMDAwMmYKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX0dFVF9URU1QX0hEUgkJMHgwMDAwMDAzMAogCiAjZGVmaW5lIFFMQ05JQ19SQ09ERV9TVUNDRVNTCQkwCisjZGVmaW5lIFFMQ05JQ19SQ09ERV9OT1RfU1VQUE9SVEVECTkKICNkZWZpbmUgUUxDTklDX1JDT0RFX1RJTUVPVVQJCTE3CiAjZGVmaW5lIFFMQ05JQ19ERVNUUk9ZX0NUWF9SRVNFVAkwCiAKQEAgLTU5OCwxNCArNjMxLDE0IEBACiAJX19sZTMyIHJpbmdfc2l6ZTsJCS8qIFJpbmcgZW50cmllcyAqLwogCV9fbGUxNiBtc2lfaW5kZXg7CiAJX19sZTE2IHJzdmQ7CQkvKiBQYWRkaW5nICovCi19OworfSBfX3BhY2tlZDsKIAogc3RydWN0IHFsY25pY19ob3N0cnFfcmRzX3JpbmcgewogCV9fbGU2NCBob3N0X3BoeXNfYWRkcjsJLyogUmluZyBiYXNlIGFkZHIgKi8KIAlfX2xlNjQgYnVmZl9zaXplOwkJLyogUGFja2V0IGJ1ZmZlciBzaXplICovCiAJX19sZTMyIHJpbmdfc2l6ZTsJCS8qIFJpbmcgZW50cmllcyAqLwogCV9fbGUzMiByaW5nX2tpbmQ7CQkvKiBDbGFzcyBvZiByaW5nICovCi19OworfSBfX3BhY2tlZDsKIAogc3RydWN0IHFsY25pY19ob3N0cnFfcnhfY3R4IHsKIAlfX2xlNjQgaG9zdF9yc3BfZG1hX2FkZHI7CS8qIFJlc3BvbnNlIGRtYSdkIGhlcmUgKi8KQEAgLTYyNiwxNyArNjU5LDE3IEBACiAJICAgLSBOIGhvc3RycV9yZHNfcmluZ3MKIAkgICAtIE4gaG9zdHJxX3Nkc19yaW5ncyAqLwogCWNoYXIgZGF0YVswXTsKLX07Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgcWxjbmljX2NhcmRyc3BfcmRzX3Jpbmd7CiAJX19sZTMyIGhvc3RfcHJvZHVjZXJfY3JiOwkvKiBDcmIgdG8gdXNlICovCiAJX19sZTMyIHJzdmQxOwkJLyogUGFkZGluZyAqLwotfTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBxbGNuaWNfY2FyZHJzcF9zZHNfcmluZyB7CiAJX19sZTMyIGhvc3RfY29uc3VtZXJfY3JiOwkvKiBDcmIgdG8gdXNlICovCiAJX19sZTMyIGludGVycnVwdF9jcmI7CS8qIENyYiB0byB1c2UgKi8KLX07Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgcWxjbmljX2NhcmRyc3BfcnhfY3R4IHsKIAkvKiBUaGVzZSByaW5nIG9mZnNldHMgYXJlIHJlbGF0aXZlIHRvIGRhdGFbMF0gYmVsb3cgKi8KQEAgLTY1NSw3ICs2ODgsNyBAQAogCSAgIC0gTiBjYXJkcnNwX3Jkc19yaW5ncwogCSAgIC0gTiBjYXJkcnNfc2RzX3JpbmdzICovCiAJY2hhciBkYXRhWzBdOwotfTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgU0laRU9GX0hPU1RSUV9SWChIT1NUUlFfUlgsIHJkc19yaW5ncywgc2RzX3JpbmdzKQlcCiAJKHNpemVvZihIT1NUUlFfUlgpICsgCQkJCQlcCkBAIC02NzUsNyArNzA4LDcgQEAKIAlfX2xlNjQgaG9zdF9waHlzX2FkZHI7CS8qIFJpbmcgYmFzZSBhZGRyICovCiAJX19sZTMyIHJpbmdfc2l6ZTsJCS8qIFJpbmcgZW50cmllcyAqLwogCV9fbGUzMiByc3ZkOwkJLyogUGFkZGluZyAqLwotfTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBxbGNuaWNfaG9zdHJxX3R4X2N0eCB7CiAJX19sZTY0IGhvc3RfcnNwX2RtYV9hZGRyOwkvKiBSZXNwb25zZSBkbWEnZCBoZXJlICovCkBAIC02OTAsMTIgKzcyMywxMiBAQAogCV9fbGUxNiByc3ZkMzsJCS8qIFBhZGRpbmcgKi8KIAlzdHJ1Y3QgcWxjbmljX2hvc3RycV9jZHNfcmluZyBjZHNfcmluZzsJLyogRGVzYyBvZiBjZHMgcmluZyAqLwogCXU4ICByZXNlcnZlZFsxMjhdOwkvKiBmdXR1cmUgZXhwYW5zaW9uICovCi19OworfSBfX3BhY2tlZDsKIAogc3RydWN0IHFsY25pY19jYXJkcnNwX2Nkc19yaW5nIHsKIAlfX2xlMzIgaG9zdF9wcm9kdWNlcl9jcmI7CS8qIENyYiB0byB1c2UgKi8KIAlfX2xlMzIgaW50ZXJydXB0X2NyYjsJLyogQ3JiIHRvIHVzZSAqLwotfTsKK30gX19wYWNrZWQ7CiAKIHN0cnVjdCBxbGNuaWNfY2FyZHJzcF90eF9jdHggewogCV9fbGUzMiBob3N0X2N0eF9zdGF0ZTsJLyogU3RhcnRpbmcgc3RhdGUgKi8KQEAgLTcwNCw3ICs3MzcsNyBAQAogCXU4ICB2aXJ0X3BvcnQ7CQkvKiBWaXJ0dWFsL0xvZ2ljYWwgaWQgb2YgcG9ydCAqLwogCXN0cnVjdCBxbGNuaWNfY2FyZHJzcF9jZHNfcmluZyBjZHNfcmluZzsJLyogQ2FyZCBjZHMgc2V0dGluZ3MgKi8KIAl1OCAgcmVzZXJ2ZWRbMTI4XTsJLyogZnV0dXJlIGV4cGFuc2lvbiAqLwotfTsKK30gX19wYWNrZWQ7CiAKICNkZWZpbmUgU0laRU9GX0hPU1RSUV9UWChIT1NUUlFfVFgpCShzaXplb2YoSE9TVFJRX1RYKSkKICNkZWZpbmUgU0laRU9GX0NBUkRSU1BfVFgoQ0FSRFJTUF9UWCkJKHNpemVvZihDQVJEUlNQX1RYKSkKQEAgLTczOCw0MCArNzcxLDYgQEAKIAl1aW50OF90IG1hY19hZGRyW0VUSF9BTEVOKzJdOwogfTsKIAotLyoKLSAqIEludGVycnVwdCBjb2FsZXNjaW5nIGRlZmF1bHRzLiBUaGUgZGVmYXVsdHMgYXJlIGZvciAxNTAwIE1UVS4gSXQgaXMKLSAqIGFkanVzdGVkIGJhc2VkIG9uIGNvbmZpZ3VyZWQgTVRVLgotICovCi0jZGVmaW5lIFFMQ05JQ19ERUZBVUxUX0lOVFJfQ09BTEVTQ0VfUlhfVElNRV9VUwkzCi0jZGVmaW5lIFFMQ05JQ19ERUZBVUxUX0lOVFJfQ09BTEVTQ0VfUlhfUEFDS0VUUwkyNTYKLSNkZWZpbmUgUUxDTklDX0RFRkFVTFRfSU5UUl9DT0FMRVNDRV9UWF9QQUNLRVRTCTY0Ci0jZGVmaW5lIFFMQ05JQ19ERUZBVUxUX0lOVFJfQ09BTEVTQ0VfVFhfVElNRV9VUwk0Ci0KLSNkZWZpbmUgUUxDTklDX0lOVFJfREVGQVVMVAkJCTB4MDQKLQotdW5pb24gcWxjbmljX25pY19pbnRyX2NvYWxlc2NlX2RhdGEgewotCXN0cnVjdCB7Ci0JCXUxNglyeF9wYWNrZXRzOwotCQl1MTYJcnhfdGltZV91czsKLQkJdTE2CXR4X3BhY2tldHM7Ci0JCXUxNgl0eF90aW1lX3VzOwotCX0gZGF0YTsKLQl1NjQJCXdvcmQ7Ci19OwotCi1zdHJ1Y3QgcWxjbmljX25pY19pbnRyX2NvYWxlc2NlIHsKLQl1MTYJCXN0YXRzX3RpbWVfdXM7Ci0JdTE2CQlyYXRlX3NhbXBsZV90aW1lOwotCXUxNgkJZmxhZ3M7Ci0JdTE2CQlyc3ZkXzE7Ci0JdTMyCQlsb3dfdGhyZXNob2xkOwotCXUzMgkJaGlnaF90aHJlc2hvbGQ7Ci0JdW5pb24gcWxjbmljX25pY19pbnRyX2NvYWxlc2NlX2RhdGEJbm9ybWFsOwotCXVuaW9uIHFsY25pY19uaWNfaW50cl9jb2FsZXNjZV9kYXRhCWxvdzsKLQl1bmlvbiBxbGNuaWNfbmljX2ludHJfY29hbGVzY2VfZGF0YQloaWdoOwotCXVuaW9uIHFsY25pY19uaWNfaW50cl9jb2FsZXNjZV9kYXRhCWlycTsKLX07Ci0KICNkZWZpbmUgUUxDTklDX0hPU1RfUkVRVUVTVAkweDEzCiAjZGVmaW5lIFFMQ05JQ19SRVFVRVNUCQkweDE0CiAKQEAgLTc4Myw1MCArNzgyLDIwIEBACiAvKgogICogRHJpdmVyIC0tPiBGaXJtd2FyZQogICovCi0jZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX1NUQVJUIAkJCTAKLSNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfQ09ORklHX1JTUwkJCTEKLSNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfQ09ORklHX1JTU19UQkwJCTIKLSNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfQ09ORklHX0lOVFJfQ09BTEVTQ0UJCTMKLSNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfQ09ORklHX0xFRAkJCTQKLSNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfQ09ORklHX1BST01JU0NVT1VTCQk1Ci0jZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0NPTkZJR19MMl9NQUMgCQk2Ci0jZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0xST19SRVFVRVNUCQkJNwotI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9HRVRfU05NUF9TVEFUUwkJOAotI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9QUk9YWV9TVEFSVF9SRVFVRVNUCQk5Ci0jZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX1BST1hZX1NUT1BfUkVRVUVTVAkJMTAKLSNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfUFJPWFlfU0VUX01UVSAJCTExCi0jZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX1BST1hZX1NFVF9WUE9SVF9NSVNTX01PREUJMTIKLSNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfR0VUX0ZJTkdFUl9QUklOVF9SRVFVRVNUCTEzCi0jZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0lOU1RBTExfTElDRU5TRV9SRVFVRVNUCTE0Ci0jZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0dFVF9MSUNFTlNFX0NBUEFCSUxJVFlfUkVRVUVTVAkxNQotI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9HRVRfTkVUX1NUQVRTIAkJMTYKLSNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfUFJPWFlfVVBEQVRFX1AyVgkJMTcKLSNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfQ09ORklHX0lQQUREUiAJCTE4Ci0jZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX1BST1hZX1NUT1BfRE9ORQkJMjAKLSNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfR0VUX0xJTktFVkVOVCAJCTIxCi0jZGVmaW5lIFFMQ05JQ19DMkNfT1BDT0RFCQkJCTIyCi0jZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0NPTkZJR19CUklER0lORwkJMjMKLSNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfQ09ORklHX0hXX0xSTyAJCTI0Ci0jZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0xBU1QJCQkJMjUKKyNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfQ09ORklHX1JTUwkJCTB4MQorI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9DT05GSUdfSU5UUl9DT0FMRVNDRQkJMHgzCisjZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0NPTkZJR19MRUQJCQkweDQKKyNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfTFJPX1JFUVVFU1QJCQkweDcKKyNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfU0VUX01BQ19SRUNFSVZFX01PREUJCTB4YworI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9DT05GSUdfSVBBRERSCQkweDEyCisjZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0dFVF9MSU5LRVZFTlQJCTB4MTUKKyNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfQ09ORklHX0JSSURHSU5HCQkweDE3CisjZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0NPTkZJR19IV19MUk8JCTB4MTgKIC8qCiAgKiBGaXJtd2FyZSAtLT4gRHJpdmVyCiAgKi8KIAotI2RlZmluZSBRTENOSUNfQzJIX09QQ09ERV9TVEFSVCAJCQkxMjgKLSNkZWZpbmUgUUxDTklDX0MySF9PUENPREVfQ09ORklHX1JTU19SRVNQT05TRQkJMTI5Ci0jZGVmaW5lIFFMQ05JQ19DMkhfT1BDT0RFX0NPTkZJR19SU1NfVEJMX1JFU1BPTlNFCTEzMAotI2RlZmluZSBRTENOSUNfQzJIX09QQ09ERV9DT05GSUdfTUFDX1JFU1BPTlNFCQkxMzEKLSNkZWZpbmUgUUxDTklDX0MySF9PUENPREVfQ09ORklHX1BST01JU0NVT1VTX1JFU1BPTlNFCTEzMgotI2RlZmluZSBRTENOSUNfQzJIX09QQ09ERV9DT05GSUdfTDJfTUFDX1JFU1BPTlNFCTEzMwotI2RlZmluZSBRTENOSUNfQzJIX09QQ09ERV9MUk9fREVMRVRFX1JFU1BPTlNFCQkxMzQKLSNkZWZpbmUgUUxDTklDX0MySF9PUENPREVfTFJPX0FERF9GQUlMVVJFX1JFU1BPTlNFCTEzNQotI2RlZmluZSBRTENOSUNfQzJIX09QQ09ERV9HRVRfU05NUF9TVEFUUwkJMTM2Ci0jZGVmaW5lIFFMQ05JQ19DMkhfT1BDT0RFX0dFVF9GSU5HRVJfUFJJTlRfUkVQTFkJMTM3Ci0jZGVmaW5lIFFMQ05JQ19DMkhfT1BDT0RFX0lOU1RBTExfTElDRU5TRV9SRVBMWSAJMTM4Ci0jZGVmaW5lIFFMQ05JQ19DMkhfT1BDT0RFX0dFVF9MSUNFTlNFX0NBUEFCSUxJVElFU19SRVBMWSAxMzkKLSNkZWZpbmUgUUxDTklDX0MySF9PUENPREVfR0VUX05FVF9TVEFUU19SRVNQT05TRQkxNDAKICNkZWZpbmUgUUxDTklDX0MySF9PUENPREVfR0VUX0xJTktFVkVOVF9SRVNQT05TRQkxNDEKLSNkZWZpbmUgUUxDTklDX0MySF9PUENPREVfTEFTVAkJCQkxNDIKIAogI2RlZmluZSBWUE9SVF9NSVNTX01PREVfRFJPUAkJMCAvKiBkcm9wIGFsbCB1bm1hdGNoZWQgKi8KICNkZWZpbmUgVlBPUlRfTUlTU19NT0RFX0FDQ0VQVF9BTEwJMSAvKiBhY2NlcHQgYWxsIHBhY2tldHMgKi8KQEAgLTg5NSw3ICs4NjQsNyBAQAogCV9fbGU2NCBxaGRyOwogCV9fbGU2NCByZXFfaGRyOwogCV9fbGU2NCB3b3Jkc1s2XTsKLX07Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgcWxjbmljX21hY19yZXEgewogCXU4IG9wOwpAQCAtOTA2LDcgKzg3NSw3IEBACiBzdHJ1Y3QgcWxjbmljX3ZsYW5fcmVxIHsKIAlfX2xlMTYgdmxhbl9pZDsKIAlfX2xlMTYgcnN2ZFszXTsKLX07Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgcWxjbmljX2lwYWRkciB7CiAJX19iZTMyIGlwdjQ7CkBAIC05MjksNyArODk4LDggQEAKICNkZWZpbmUgUUxDTklDX0lTX01TSV9GQU1JTFkoYWRhcHRlcikgXAogCSgoYWRhcHRlciktPmZsYWdzICYgKFFMQ05JQ19NU0lfRU5BQkxFRCB8IFFMQ05JQ19NU0lYX0VOQUJMRUQpKQogCi0jZGVmaW5lIE1TSVhfRU5UUklFU19QRVJfQURBUFRFUglOVU1fU1RTX0RFU0NfUklOR1MKKyNkZWZpbmUgUUxDTklDX0RFRl9OVU1fU1RTX0RFU0NfUklOR1MJNAorI2RlZmluZSBRTENOSUNfTUlOX05VTV9SU1NfUklOR1MJMgogI2RlZmluZSBRTENOSUNfTVNJWF9UQkxfU1BBQ0UJCTgxOTIKICNkZWZpbmUgUUxDTklDX1BDSV9SRUdfTVNJWF9UQkwgCTB4NDQKICNkZWZpbmUgUUxDTklDX01TSVhfVEJMX1BHU0laRQkJNDA5NgpAQCAtOTQyLDYgKzkxMiw3IEBACiAjZGVmaW5lIF9fUUxDTklDX1JFU0VUVElORwkJMgogI2RlZmluZSBfX1FMQ05JQ19TVEFSVF9GVyAJCTQKICNkZWZpbmUgX19RTENOSUNfQUVSCQkJNQorI2RlZmluZSBfX1FMQ05JQ19ESUFHX1JFU19BTExPQwkJNgogCiAjZGVmaW5lIFFMQ05JQ19JTlRFUlJVUFRfVEVTVAkJMQogI2RlZmluZSBRTENOSUNfTE9PUEJBQ0tfVEVTVAkJMgpAQCAtOTY1LDE0ICs5MzYsMTQgQEAKIH07CiAKIHN0cnVjdCBxbGNuaWNfYWRhcHRlciB7Ci0Jc3RydWN0IHFsY25pY19oYXJkd2FyZV9jb250ZXh0IGFodzsKLQorCXN0cnVjdCBxbGNuaWNfaGFyZHdhcmVfY29udGV4dCAqYWh3OworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eDsKKwlzdHJ1Y3QgcWxjbmljX2hvc3RfdHhfcmluZyAqdHhfcmluZzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwotCXN0cnVjdCBsaXN0X2hlYWQgbWFjX2xpc3Q7CiAKLQlzcGlubG9ja190IHR4X2NsZWFuX2xvY2s7Ci0Jc3BpbmxvY2tfdCBtYWNfbGVhcm5fbG9jazsKKwl1bnNpZ25lZCBsb25nIHN0YXRlOworCXUzMiBmbGFnczsKIAogCXUxNiBudW1fdHhkOwogCXUxNiBudW1fcnhkOwpAQCAtOTgzLDE0ICs5NTQsMTIgQEAKIAl1OCBtYXhfcmRzX3JpbmdzOwogCXU4IG1heF9zZHNfcmluZ3M7CiAJdTggbXNpeF9zdXBwb3J0ZWQ7Ci0JdTggcnhfY3N1bTsKIAl1OCBwb3J0bnVtOwogCXU4IHBoeXNpY2FsX3BvcnQ7CiAJdTggcmVzZXRfY29udGV4dDsKIAogCXU4IG1jX2VuYWJsZWQ7CiAJdTggbWF4X21jX2NvdW50OwotCXU4IHJzc19zdXBwb3J0ZWQ7CiAJdTggZndfd2FpdF9jbnQ7CiAJdTggZndfZmFpbF9jbnQ7CiAJdTggdHhfdGltZW9fY250OwpAQCAtMTAxNSw3ICs5ODQsNiBAQAogCiAJdTMyIGZ3X2hhbF92ZXJzaW9uOwogCXUzMiBjYXBhYmlsaXRpZXM7Ci0JdTMyIGZsYWdzOwogCXUzMiBpcnE7CiAJdTMyIHRlbXA7CiAKQEAgLTEwMzMsMzEgKzEwMDEsMjkgQEAKIAl1OCBtYWNfYWRkcltFVEhfQUxFTl07CiAKIAl1NjQgZGV2X3JzdF90aW1lOworCXVuc2lnbmVkIGxvbmcgdmxhbnNbQklUU19UT19MT05HUyhWTEFOX05fVklEKV07CiAKLQlzdHJ1Y3Qgdmxhbl9ncm91cCAqdmxncnA7CiAJc3RydWN0IHFsY25pY19ucGFyX2luZm8gKm5wYXJzOwogCXN0cnVjdCBxbGNuaWNfZXN3aXRjaCAqZXN3aXRjaDsKIAlzdHJ1Y3QgcWxjbmljX25pY190ZW1wbGF0ZSAqbmljX29wczsKIAogCXN0cnVjdCBxbGNuaWNfYWRhcHRlcl9zdGF0cyBzdGF0czsKLQotCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0IHJlY3ZfY3R4OwotCXN0cnVjdCBxbGNuaWNfaG9zdF90eF9yaW5nICp0eF9yaW5nOworCXN0cnVjdCBsaXN0X2hlYWQgbWFjX2xpc3Q7CiAKIAl2b2lkIF9faW9tZW0JKnRndF9tYXNrX3JlZzsKIAl2b2lkIF9faW9tZW0JKnRndF9zdGF0dXNfcmVnOwogCXZvaWQgX19pb21lbQkqY3JiX2ludF9zdGF0ZV9yZWc7CiAJdm9pZCBfX2lvbWVtCSppc3JfaW50X3ZlYzsKIAotCXN0cnVjdCBtc2l4X2VudHJ5IG1zaXhfZW50cmllc1tNU0lYX0VOVFJJRVNfUEVSX0FEQVBURVJdOworCXN0cnVjdCBtc2l4X2VudHJ5ICptc2l4X2VudHJpZXM7CiAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGZ3X3dvcms7CiAKLQlzdHJ1Y3QgcWxjbmljX25pY19pbnRyX2NvYWxlc2NlIGNvYWw7CiAKIAlzdHJ1Y3QgcWxjbmljX2ZpbHRlcl9oYXNoIGZoYXNoOwogCi0JdW5zaWduZWQgbG9uZyBzdGF0ZTsKKwlzcGlubG9ja190IHR4X2NsZWFuX2xvY2s7CisJc3BpbmxvY2tfdCBtYWNfbGVhcm5fbG9jazsKIAlfX2xlMzIgZmlsZV9wcmRfb2ZmOwkvKkZpbGUgZncgcHJvZHVjdCBvZmZzZXQqLwogCXUzMiBmd192ZXJzaW9uOwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CkBAIC0xMDc5LDcgKzEwNDUsNyBAQAogCV9fbGUxNgltaW5fdHhfYnc7CiAJX19sZTE2CW1heF90eF9idzsKIAl1OAlyZXNlcnZlZDJbMTA0XTsKLX07Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgcWxjbmljX3BjaV9pbmZvIHsKIAlfX2xlMTYJaWQ7IC8qIHBjaSBmdW5jdGlvbiBpZCAqLwpAQCAtMTA5Myw3ICsxMDU5LDcgQEAKIAogCXU4CW1hY1tFVEhfQUxFTl07CiAJdTgJcmVzZXJ2ZWQyWzEwNl07Ci19OworfSBfX3BhY2tlZDsKIAogc3RydWN0IHFsY25pY19ucGFyX2luZm8gewogCXUxNglwdmlkOwpAQCAtMTIxMCwxNSArMTE3NiwxNjAgQEAKIAlfX2xlNjQgbG9jYWxfZnJhbWVzOwogCV9fbGU2NCBudW1ieXRlczsKIAlfX2xlNjQgcnN2ZFszXTsKLX07Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgcWxjbmljX2Vzd19zdGF0aXN0aWNzIHsKIAlzdHJ1Y3QgX19xbGNuaWNfZXN3X3N0YXRpc3RpY3Mgcng7CiAJc3RydWN0IF9fcWxjbmljX2Vzd19zdGF0aXN0aWNzIHR4OwogfTsKIAotaW50IHFsY25pY19md19jbWRfcXVlcnlfcGh5KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdTMyIHJlZywgdTMyICp2YWwpOwotaW50IHFsY25pY19md19jbWRfc2V0X3BoeShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiByZWcsIHUzMiB2YWwpOworc3RydWN0IHFsY25pY19jb21tb25fZW50cnlfaGRyIHsKKwlfX2xlMzIJdHlwZTsKKwlfX2xlMzIJb2Zmc2V0OworCV9fbGUzMgljYXBfc2l6ZTsKKwl1OAltYXNrOworCXU4CXJzdmRbMl07CisJdTgJZmxhZ3M7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgX19jcmIgeworCV9fbGUzMglhZGRyOworCXU4CXN0cmlkZTsKKwl1OAlyc3ZkMVszXTsKKwlfX2xlMzIJZGF0YV9zaXplOworCV9fbGUzMglub19vcHM7CisJX19sZTMyCXJzdmQyWzRdOworfSBfX3BhY2tlZDsKKworc3RydWN0IF9fY3RybCB7CisJX19sZTMyCWFkZHI7CisJdTgJc3RyaWRlOworCXU4CWluZGV4X2E7CisJX19sZTE2CXRpbWVvdXQ7CisJX19sZTMyCWRhdGFfc2l6ZTsKKwlfX2xlMzIJbm9fb3BzOworCXU4CW9wY29kZTsKKwl1OAlpbmRleF92OworCXU4CXNobF92YWw7CisJdTgJc2hyX3ZhbDsKKwlfX2xlMzIJdmFsMTsKKwlfX2xlMzIJdmFsMjsKKwlfX2xlMzIJdmFsMzsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBfX2NhY2hlIHsKKwlfX2xlMzIJYWRkcjsKKwl1OAlzdHJpZGU7CisJdTgJcnN2ZDsKKwlfX2xlMTYJaW5pdF90YWdfdmFsOworCV9fbGUzMglzaXplOworCV9fbGUzMglub19vcHM7CisJX19sZTMyCWN0cmxfYWRkcjsKKwlfX2xlMzIJY3RybF92YWw7CisJX19sZTMyCXJlYWRfYWRkcjsKKwl1OAlyZWFkX2FkZHJfc3RyaWRlOworCXU4CXJlYWRfYWRkcl9udW07CisJdTgJcnN2ZDFbMl07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgX19vY20geworCXU4CXJzdmRbOF07CisJX19sZTMyCXNpemU7CisJX19sZTMyCW5vX29wczsKKwl1OAlyc3ZkMVs4XTsKKwlfX2xlMzIJcmVhZF9hZGRyOworCV9fbGUzMglyZWFkX2FkZHJfc3RyaWRlOworfSBfX3BhY2tlZDsKKworc3RydWN0IF9fbWVtIHsKKwl1OAlyc3ZkWzI0XTsKKwlfX2xlMzIJYWRkcjsKKwlfX2xlMzIJc2l6ZTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBfX211eCB7CisJX19sZTMyCWFkZHI7CisJdTgJcnN2ZFs0XTsKKwlfX2xlMzIJc2l6ZTsKKwlfX2xlMzIJbm9fb3BzOworCV9fbGUzMgl2YWw7CisJX19sZTMyCXZhbF9zdHJpZGU7CisJX19sZTMyCXJlYWRfYWRkcjsKKwl1OAlyc3ZkMls0XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBfX3F1ZXVlIHsKKwlfX2xlMzIJc2VsX2FkZHI7CisJX19sZTE2CXN0cmlkZTsKKwl1OAlyc3ZkWzJdOworCV9fbGUzMglzaXplOworCV9fbGUzMglub19vcHM7CisJdTgJcnN2ZDJbOF07CisJX19sZTMyCXJlYWRfYWRkcjsKKwl1OAlyZWFkX2FkZHJfc3RyaWRlOworCXU4CXJlYWRfYWRkcl9jbnQ7CisJdTgJcnN2ZDNbMl07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgcWxjbmljX2R1bXBfZW50cnkgeworCXN0cnVjdCBxbGNuaWNfY29tbW9uX2VudHJ5X2hkciBoZHI7CisJdW5pb24geworCQlzdHJ1Y3QgX19jcmIJY3JiOworCQlzdHJ1Y3QgX19jYWNoZQljYWNoZTsKKwkJc3RydWN0IF9fb2NtCW9jbTsKKwkJc3RydWN0IF9fbWVtCW1lbTsKKwkJc3RydWN0IF9fbXV4CW11eDsKKwkJc3RydWN0IF9fcXVldWUJcXVlOworCQlzdHJ1Y3QgX19jdHJsCWN0cmw7CisJfSByZWdpb247Cit9IF9fcGFja2VkOworCitlbnVtIG9wX2NvZGVzIHsKKwlRTENOSUNfRFVNUF9OT1AJCT0gMCwKKwlRTENOSUNfRFVNUF9SRUFEX0NSQgk9IDEsCisJUUxDTklDX0RVTVBfUkVBRF9NVVgJPSAyLAorCVFMQ05JQ19EVU1QX1FVRVVFCT0gMywKKwlRTENOSUNfRFVNUF9CUkRfQ09ORklHCT0gNCwKKwlRTENOSUNfRFVNUF9SRUFEX09DTQk9IDYsCisJUUxDTklDX0RVTVBfUEVHX1JFRwk9IDcsCisJUUxDTklDX0RVTVBfTDFfRFRBRwk9IDgsCisJUUxDTklDX0RVTVBfTDFfSVRBRwk9IDksCisJUUxDTklDX0RVTVBfTDFfREFUQQk9IDExLAorCVFMQ05JQ19EVU1QX0wxX0lOU1QJPSAxMiwKKwlRTENOSUNfRFVNUF9MMl9EVEFHCT0gMjEsCisJUUxDTklDX0RVTVBfTDJfSVRBRwk9IDIyLAorCVFMQ05JQ19EVU1QX0wyX0RBVEEJPSAyMywKKwlRTENOSUNfRFVNUF9MMl9JTlNUCT0gMjQsCisJUUxDTklDX0RVTVBfUkVBRF9ST00JPSA3MSwKKwlRTENOSUNfRFVNUF9SRUFEX01FTQk9IDcyLAorCVFMQ05JQ19EVU1QX1JFQURfQ1RSTAk9IDk4LAorCVFMQ05JQ19EVU1QX1RMSERSCT0gOTksCisJUUxDTklDX0RVTVBfUkRFTkQJPSAyNTUKK307CisKKyNkZWZpbmUgUUxDTklDX0RVTVBfV0NSQglCSVRfMAorI2RlZmluZSBRTENOSUNfRFVNUF9SV0NSQglCSVRfMQorI2RlZmluZSBRTENOSUNfRFVNUF9BTkRDUkIJQklUXzIKKyNkZWZpbmUgUUxDTklDX0RVTVBfT1JDUkIJQklUXzMKKyNkZWZpbmUgUUxDTklDX0RVTVBfUE9MTENSQglCSVRfNAorI2RlZmluZSBRTENOSUNfRFVNUF9SRF9TQVZFCUJJVF81CisjZGVmaW5lIFFMQ05JQ19EVU1QX1dSVF9TQVZFRAlCSVRfNgorI2RlZmluZSBRTENOSUNfRFVNUF9NT0RfU0FWRV9TVAlCSVRfNworI2RlZmluZSBRTENOSUNfRFVNUF9TS0lQCUJJVF83CisKKyNkZWZpbmUgUUxDTklDX0RVTVBfTUFTS19NSU4JCTMKKyNkZWZpbmUgUUxDTklDX0RVTVBfTUFTS19ERUYJCTB4MGYKKyNkZWZpbmUgUUxDTklDX0RVTVBfTUFTS19NQVgJCTB4ZmYKKyNkZWZpbmUgUUxDTklDX0ZPUkNFX0ZXX0RVTVBfS0VZCTB4ZGVhZGZlZWQKKworc3RydWN0IHFsY25pY19kdW1wX29wZXJhdGlvbnMgeworCWVudW0gb3BfY29kZXMgb3Bjb2RlOworCXUzMiAoKmhhbmRsZXIpKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqLAorCQkJc3RydWN0IHFsY25pY19kdW1wX2VudHJ5ICosIHUzMiAqKTsKK307CisKK2ludCBxbGNuaWNfZndfY21kX2dldF9taW5pZHVtcF90ZW1wKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CitpbnQgcWxjbmljX2Z3X2NtZF9zZXRfcG9ydChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBjb25maWcpOwogCiB1MzIgcWxjbmljX2h3X3JlYWRfd3hfMk0oc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1bG9uZyBvZmYpOwogaW50IHFsY25pY19od193cml0ZV93eF8yTShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKiwgdWxvbmcgb2ZmLCB1MzIgZGF0YSk7CkBAIC0xMjY0LDYgKzEzNzUsNyBAQAogaW50IHFsY25pY19jb25maWdfbGVkKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdTMyIHN0YXRlLCB1MzIgcmF0ZSk7CiB2b2lkIHFsY25pY19wcnVuZV9sYl9maWx0ZXJzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIHFsY25pY19kZWxldGVfbGJfZmlsdGVycyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IHFsY25pY19kdW1wX2Z3KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqKTsKIAogLyogRnVuY3Rpb25zIGZyb20gcWxjbmljX2luaXQuYyAqLwogaW50IHFsY25pY19sb2FkX2Zpcm13YXJlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CkBAIC0xMjc0LDcgKzEzODYsNyBAQAogaW50IHFsY25pY19zZXR1cF9pZGNfcGFyYW0oc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKTsKIGludCBxbGNuaWNfY2hlY2tfZmxhc2hfZndfdmVyKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CiAKLWludCBxbGNuaWNfcm9tX2Zhc3RfcmVhZChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLCBpbnQgKnZhbHApOworaW50IHFsY25pY19yb21fZmFzdF9yZWFkKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdTMyIGFkZHIsIHUzMiAqdmFscCk7CiBpbnQgcWxjbmljX3JvbV9mYXN0X3JlYWRfd29yZHMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwKIAkJCQl1OCAqYnl0ZXMsIHNpemVfdCBzaXplKTsKIGludCBxbGNuaWNfYWxsb2Nfc3dfcmVzb3VyY2VzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CkBAIC0xMjk0LDcgKzE0MDYsNyBAQAogCiBpbnQgcWxjbmljX2NoZWNrX2Z3X3N0YXR1cyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBxbGNuaWNfd2F0Y2hkb2dfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotdm9pZCBxbGNuaWNfcG9zdF9yeF9idWZmZXJzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdTMyIHJpbmdpZCwKK3ZvaWQgcWxjbmljX3Bvc3RfcnhfYnVmZmVycyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXN0cnVjdCBxbGNuaWNfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmcpOwogaW50IHFsY25pY19wcm9jZXNzX3Jjdl9yaW5nKHN0cnVjdCBxbGNuaWNfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcsIGludCBtYXgpOwogdm9pZCBxbGNuaWNfc2V0X211bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwpAQCAtMTMwOCw2ICsxNDIwLDggQEAKIAogaW50IHFsY25pY19md19jbWRfc2V0X210dShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBtdHUpOwogaW50IHFsY25pY19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBuZXdfbXR1KTsKK3UzMiBxbGNuaWNfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBmZWF0dXJlcyk7CitpbnQgcWxjbmljX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZmVhdHVyZXMpOwogaW50IHFsY25pY19jb25maWdfaHdfbHJvKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgaW50IGVuYWJsZSk7CiBpbnQgcWxjbmljX2NvbmZpZ19icmlkZ2VkX21vZGUoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1MzIgZW5hYmxlKTsKIGludCBxbGNuaWNfc2VuZF9scm9fY2xlYW51cChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOwpAQCAtMTMyMiw2ICsxNDM2LDkgQEAKIHZvaWQgcWxjbmljX2RpYWdfZnJlZV9yZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG1heF9zZHNfcmluZ3MpOwogaW50IHFsY25pY19kaWFnX2FsbG9jX3JlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdGVzdCk7CiBuZXRkZXZfdHhfdCBxbGNuaWNfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK2ludCBxbGNuaWNfdmFsaWRhdGVfbWF4X3JzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1OCBtYXhfaHcsIHU4IHZhbCk7CitpbnQgcWxjbmljX3NldF9tYXhfcnNzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdTggZGF0YSk7Cit2b2lkIHFsY25pY19kZXZfcmVxdWVzdF9yZXNldChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKik7CiAKIC8qIE1hbmFnZW1lbnQgZnVuY3Rpb25zICovCiBpbnQgcWxjbmljX2dldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKiwgdTgqKTsKQEAgLTEzNzksOCArMTQ5Niw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdTMyIHFsY25pY190eF9hdmFpbChzdHJ1Y3QgcWxjbmljX2hvc3RfdHhfcmluZyAqdHhfcmluZykKIHsKLQlzbXBfbWIoKTsKLQlpZiAodHhfcmluZy0+cHJvZHVjZXIgPCB0eF9yaW5nLT5zd19jb25zdW1lcikKKwlpZiAobGlrZWx5KHR4X3JpbmctPnByb2R1Y2VyIDwgdHhfcmluZy0+c3dfY29uc3VtZXIpKQogCQlyZXR1cm4gdHhfcmluZy0+c3dfY29uc3VtZXIgLSB0eF9yaW5nLT5wcm9kdWNlcjsKIAllbHNlCiAJCXJldHVybiB0eF9yaW5nLT5zd19jb25zdW1lciArIHR4X3JpbmctPm51bV9kZXNjIC0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfY3R4LmMgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2N0eC5jCmluZGV4IDI3NjMxZjIuLmJhYjA0MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfY3R4LmMKKysrIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19jdHguYwpAQCAtNjQsMTQgKzY0LDEwNSBAQAogCXJldHVybiByY29kZTsKIH0KIAorc3RhdGljIHVpbnQzMl90IHFsY25pY190ZW1wX2NoZWNrc3VtKHVpbnQzMl90ICp0ZW1wX2J1ZmZlciwgdTE2IHRlbXBfc2l6ZSkKK3sKKwl1aW50NjRfdCBzdW0gPSAwOworCWludCBjb3VudCA9IHRlbXBfc2l6ZSAvIHNpemVvZih1aW50MzJfdCk7CisJd2hpbGUgKGNvdW50LS0gPiAwKQorCQlzdW0gKz0gKnRlbXBfYnVmZmVyKys7CisJd2hpbGUgKHN1bSA+PiAzMikKKwkJc3VtID0gKHN1bSAmIDB4RkZGRkZGRkYpICsgKHN1bSA+PiAzMik7CisJcmV0dXJuIH5zdW07Cit9CisKK2ludCBxbGNuaWNfZndfY21kX2dldF9taW5pZHVtcF90ZW1wKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgZXJyLCBpOworCXUxNiB0ZW1wX3NpemU7CisJdm9pZCAqdG1wX2FkZHI7CisJdTMyIHZlcnNpb24sIGNzdW0sICp0ZW1wbGF0ZSwgKnRtcF9idWY7CisJc3RydWN0IHFsY25pY19oYXJkd2FyZV9jb250ZXh0ICphaHc7CisJc3RydWN0IHFsY25pY19kdW1wX3RlbXBsYXRlX2hkciAqdG1wbF9oZHIsICp0bXBfdG1wbDsKKwlkbWFfYWRkcl90IHRtcF9hZGRyX3QgPSAwOworCisJYWh3ID0gYWRhcHRlci0+YWh3OworCWVyciA9IHFsY25pY19pc3N1ZV9jbWQoYWRhcHRlciwKKwkJCWFkYXB0ZXItPmFody0+cGNpX2Z1bmMsCisJCQlhZGFwdGVyLT5md19oYWxfdmVyc2lvbiwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCVFMQ05JQ19DRFJQX0NNRF9URU1QX1NJWkUpOworCWlmIChlcnIgIT0gUUxDTklDX1JDT0RFX1NVQ0NFU1MpIHsKKwkJZXJyID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfQVJHMV9DUkJfT0ZGU0VUKTsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIkZhaWxlZCB0byBnZXQgdGVtcGxhdGUgc2l6ZSAlZFxuIiwgZXJyKTsKKwkJZXJyID0gLUVJTzsKKwkJcmV0dXJuIGVycjsKKwl9CisJdmVyc2lvbiA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX0FSRzNfQ1JCX09GRlNFVCk7CisJdGVtcF9zaXplID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfQVJHMl9DUkJfT0ZGU0VUKTsKKwlpZiAoIXRlbXBfc2l6ZSkKKwkJcmV0dXJuIC1FSU87CisKKwl0bXBfYWRkciA9IGRtYV9hbGxvY19jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LCB0ZW1wX3NpemUsCisJCQkmdG1wX2FkZHJfdCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0bXBfYWRkcikgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkiQ2FuJ3QgZ2V0IG1lbW9yeSBmb3IgRlcgZHVtcCB0ZW1wbGF0ZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwllcnIgPSBxbGNuaWNfaXNzdWVfY21kKGFkYXB0ZXIsCisJCWFkYXB0ZXItPmFody0+cGNpX2Z1bmMsCisJCWFkYXB0ZXItPmZ3X2hhbF92ZXJzaW9uLAorCQlMU0QodG1wX2FkZHJfdCksCisJCU1TRCh0bXBfYWRkcl90KSwKKwkJdGVtcF9zaXplLAorCQlRTENOSUNfQ0RSUF9DTURfR0VUX1RFTVBfSERSKTsKKworCWlmIChlcnIgIT0gUUxDTklDX1JDT0RFX1NVQ0NFU1MpIHsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIkZhaWxlZCB0byBnZXQgbWluaSBkdW1wIHRlbXBsYXRlIGhlYWRlciAlZFxuIiwgZXJyKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBlcnJvcjsKKwl9CisJdG1wX3RtcGwgPSAoc3RydWN0IHFsY25pY19kdW1wX3RlbXBsYXRlX2hkciAqKSB0bXBfYWRkcjsKKwljc3VtID0gcWxjbmljX3RlbXBfY2hlY2tzdW0oKHVpbnQzMl90ICopIHRtcF9hZGRyLCB0ZW1wX3NpemUpOworCWlmIChjc3VtKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJUZW1wbGF0ZSBoZWFkZXIgY2hlY2tzdW0gdmFsaWRhdGlvbiBmYWlsZWRcbiIpOworCQllcnIgPSAtRUlPOworCQlnb3RvIGVycm9yOworCX0KKwlhaHctPmZ3X2R1bXAudG1wbF9oZHIgPSB2emFsbG9jKHRlbXBfc2l6ZSk7CisJaWYgKCFhaHctPmZ3X2R1bXAudG1wbF9oZHIpIHsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBlcnJvcjsKKwl9CisJdG1wX2J1ZiA9ICh1MzIgKikgdG1wX2FkZHI7CisJdGVtcGxhdGUgPSAodTMyICopIGFody0+ZndfZHVtcC50bXBsX2hkcjsKKwlmb3IgKGkgPSAwOyBpIDwgdGVtcF9zaXplL3NpemVvZih1MzIpOyBpKyspCisJCSp0ZW1wbGF0ZSsrID0gX19sZTMyX3RvX2NwdSgqdG1wX2J1ZisrKTsKKworCXRtcGxfaGRyID0gYWh3LT5md19kdW1wLnRtcGxfaGRyOworCWlmICh0bXBsX2hkci0+Y2FwX21hc2sgPiBRTENOSUNfRFVNUF9NQVNLX0RFRiAmJgorCQl0bXBsX2hkci0+Y2FwX21hc2sgPD0gUUxDTklDX0RVTVBfTUFTS19NQVgpCisJCXRtcGxfaGRyLT5kcnZfY2FwX21hc2sgPSB0bXBsX2hkci0+Y2FwX21hc2s7CisJZWxzZQorCQl0bXBsX2hkci0+ZHJ2X2NhcF9tYXNrID0gUUxDTklDX0RVTVBfTUFTS19ERUY7CitlcnJvcjoKKwlkbWFfZnJlZV9jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LCB0ZW1wX3NpemUsIHRtcF9hZGRyLCB0bXBfYWRkcl90KTsKKwlyZXR1cm4gZXJyOworfQorCiBpbnQKIHFsY25pY19md19jbWRfc2V0X210dShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBtdHUpCiB7Ci0Jc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9IGFkYXB0ZXItPnJlY3ZfY3R4OwogCiAJaWYgKHJlY3ZfY3R4LT5zdGF0ZSA9PSBRTENOSUNfSE9TVF9DVFhfU1RBVEVfQUNUSVZFKSB7CiAJCWlmIChxbGNuaWNfaXNzdWVfY21kKGFkYXB0ZXIsCi0JCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsCisJCQlhZGFwdGVyLT5haHctPnBjaV9mdW5jLAogCQkJYWRhcHRlci0+ZndfaGFsX3ZlcnNpb24sCiAJCQlyZWN2X2N0eC0+Y29udGV4dF9pZCwKIAkJCW10dSwKQEAgLTEwMiwxMiArMTkzLDEyIEBACiAJZG1hX2FkZHJfdCBob3N0cnFfcGh5c19hZGRyLCBjYXJkcnNwX3BoeXNfYWRkcjsKIAl1NjQgcGh5c19hZGRyOwogCi0JaW50IGksIG5yZHNfcmluZ3MsIG5zZHNfcmluZ3M7CisJdTggaSwgbnJkc19yaW5ncywgbnNkc19yaW5nczsKIAlzaXplX3QgcnFfc2l6ZSwgcnNwX3NpemU7CiAJdTMyIGNhcCwgcmVnLCB2YWwsIHJlZzI7CiAJaW50IGVycjsKIAotCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKwlzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSBhZGFwdGVyLT5yZWN2X2N0eDsKIAogCW5yZHNfcmluZ3MgPSBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOwogCW5zZHNfcmluZ3MgPSBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOwpAQCAtMTE5LDE0ICsyMTAsMTQgQEAKIAkJU0laRU9GX0NBUkRSU1BfUlgoc3RydWN0IHFsY25pY19jYXJkcnNwX3J4X2N0eCwgbnJkc19yaW5ncywKIAkJCQkJCW5zZHNfcmluZ3MpOwogCi0JYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCi0JCQkJcnFfc2l6ZSwgJmhvc3RycV9waHlzX2FkZHIpOworCWFkZHIgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmFkYXB0ZXItPnBkZXYtPmRldiwgcnFfc2l6ZSwKKwkJCSZob3N0cnFfcGh5c19hZGRyLCBHRlBfS0VSTkVMKTsKIAlpZiAoYWRkciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlwcnEgPSAoc3RydWN0IHFsY25pY19ob3N0cnFfcnhfY3R4ICopYWRkcjsKIAotCWFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAotCQkJcnNwX3NpemUsICZjYXJkcnNwX3BoeXNfYWRkcik7CisJYWRkciA9IGRtYV9hbGxvY19jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LCByc3Bfc2l6ZSwKKwkJCSZjYXJkcnNwX3BoeXNfYWRkciwgR0ZQX0tFUk5FTCk7CiAJaWYgKGFkZHIgPT0gTlVMTCkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9mcmVlX3JxOwpAQCAtMTUxLDcgKzI0Miw3IEBACiAKIAlwcnEtPm51bV9yZHNfcmluZ3MgPSBjcHVfdG9fbGUxNihucmRzX3JpbmdzKTsKIAlwcnEtPm51bV9zZHNfcmluZ3MgPSBjcHVfdG9fbGUxNihuc2RzX3JpbmdzKTsKLQlwcnEtPnJkc19yaW5nX29mZnNldCA9IGNwdV90b19sZTMyKDApOworCXBycS0+cmRzX3Jpbmdfb2Zmc2V0ID0gMDsKIAogCXZhbCA9IGxlMzJfdG9fY3B1KHBycS0+cmRzX3Jpbmdfb2Zmc2V0KSArCiAJCShzaXplb2Yoc3RydWN0IHFsY25pY19ob3N0cnFfcmRzX3JpbmcpICogbnJkc19yaW5ncyk7CkBAIC0xODcsNyArMjc4LDcgQEAKIAogCXBoeXNfYWRkciA9IGhvc3RycV9waHlzX2FkZHI7CiAJZXJyID0gcWxjbmljX2lzc3VlX2NtZChhZGFwdGVyLAotCQkJYWRhcHRlci0+YWh3LnBjaV9mdW5jLAorCQkJYWRhcHRlci0+YWh3LT5wY2lfZnVuYywKIAkJCWFkYXB0ZXItPmZ3X2hhbF92ZXJzaW9uLAogCQkJKHUzMikocGh5c19hZGRyID4+IDMyKSwKIAkJCSh1MzIpKHBoeXNfYWRkciAmIDB4ZmZmZmZmZmYpLApAQCAtMjA3LDcgKzI5OCw3IEBACiAJCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbaV07CiAKIAkJcmVnID0gbGUzMl90b19jcHUocHJzcF9yZHNbaV0uaG9zdF9wcm9kdWNlcl9jcmIpOwotCQlyZHNfcmluZy0+Y3JiX3Jjdl9wcm9kdWNlciA9IGFkYXB0ZXItPmFody5wY2lfYmFzZTAgKyByZWc7CisJCXJkc19yaW5nLT5jcmJfcmN2X3Byb2R1Y2VyID0gYWRhcHRlci0+YWh3LT5wY2lfYmFzZTAgKyByZWc7CiAJfQogCiAJcHJzcF9zZHMgPSAoKHN0cnVjdCBxbGNuaWNfY2FyZHJzcF9zZHNfcmluZyAqKQpAQCAtMjE5LDggKzMxMCw4IEBACiAJCXJlZyA9IGxlMzJfdG9fY3B1KHByc3Bfc2RzW2ldLmhvc3RfY29uc3VtZXJfY3JiKTsKIAkJcmVnMiA9IGxlMzJfdG9fY3B1KHByc3Bfc2RzW2ldLmludGVycnVwdF9jcmIpOwogCi0JCXNkc19yaW5nLT5jcmJfc3RzX2NvbnN1bWVyID0gYWRhcHRlci0+YWh3LnBjaV9iYXNlMCArIHJlZzsKLQkJc2RzX3JpbmctPmNyYl9pbnRyX21hc2sgPSBhZGFwdGVyLT5haHcucGNpX2Jhc2UwICsgcmVnMjsKKwkJc2RzX3JpbmctPmNyYl9zdHNfY29uc3VtZXIgPSBhZGFwdGVyLT5haHctPnBjaV9iYXNlMCArIHJlZzsKKwkJc2RzX3JpbmctPmNyYl9pbnRyX21hc2sgPSBhZGFwdGVyLT5haHctPnBjaV9iYXNlMCArIHJlZzI7CiAJfQogCiAJcmVjdl9jdHgtPnN0YXRlID0gbGUzMl90b19jcHUocHJzcC0+aG9zdF9jdHhfc3RhdGUpOwpAQCAtMjI4LDE5ICszMTksMjAgQEAKIAlyZWN2X2N0eC0+dmlydF9wb3J0ID0gcHJzcC0+dmlydF9wb3J0OwogCiBvdXRfZnJlZV9yc3A6Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCByc3Bfc2l6ZSwgcHJzcCwgY2FyZHJzcF9waHlzX2FkZHIpOworCWRtYV9mcmVlX2NvaGVyZW50KCZhZGFwdGVyLT5wZGV2LT5kZXYsIHJzcF9zaXplLCBwcnNwLAorCQljYXJkcnNwX3BoeXNfYWRkcik7CiBvdXRfZnJlZV9ycToKLQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHJxX3NpemUsIHBycSwgaG9zdHJxX3BoeXNfYWRkcik7CisJZG1hX2ZyZWVfY29oZXJlbnQoJmFkYXB0ZXItPnBkZXYtPmRldiwgcnFfc2l6ZSwgcHJxLCBob3N0cnFfcGh5c19hZGRyKTsKIAlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZAogcWxjbmljX2Z3X2NtZF9kZXN0cm95X3J4X2N0eChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9IGFkYXB0ZXItPnJlY3ZfY3R4OwogCiAJaWYgKHFsY25pY19pc3N1ZV9jbWQoYWRhcHRlciwKLQkJCWFkYXB0ZXItPmFody5wY2lfZnVuYywKKwkJCWFkYXB0ZXItPmFody0+cGNpX2Z1bmMsCiAJCQlhZGFwdGVyLT5md19oYWxfdmVyc2lvbiwKIAkJCXJlY3ZfY3R4LT5jb250ZXh0X2lkLAogCQkJUUxDTklDX0RFU1RST1lfQ1RYX1JFU0VULApAQCAtMjc0LDE0ICszNjYsMTQgQEAKIAkqKHR4X3JpbmctPmh3X2NvbnN1bWVyKSA9IDA7CiAKIAlycV9zaXplID0gU0laRU9GX0hPU1RSUV9UWChzdHJ1Y3QgcWxjbmljX2hvc3RycV90eF9jdHgpOwotCXJxX2FkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAotCQlycV9zaXplLCAmcnFfcGh5c19hZGRyKTsKKwlycV9hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KCZhZGFwdGVyLT5wZGV2LT5kZXYsIHJxX3NpemUsCisJCQkmcnFfcGh5c19hZGRyLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJxX2FkZHIpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJcnNwX3NpemUgPSBTSVpFT0ZfQ0FSRFJTUF9UWChzdHJ1Y3QgcWxjbmljX2NhcmRyc3BfdHhfY3R4KTsKLQlyc3BfYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCi0JCXJzcF9zaXplLCAmcnNwX3BoeXNfYWRkcik7CisJcnNwX2FkZHIgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmFkYXB0ZXItPnBkZXYtPmRldiwgcnNwX3NpemUsCisJCQkmcnNwX3BoeXNfYWRkciwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyc3BfYWRkcikgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9mcmVlX3JxOwpAQCAtMzEzLDcgKzQwNSw3IEBACiAKIAlwaHlzX2FkZHIgPSBycV9waHlzX2FkZHI7CiAJZXJyID0gcWxjbmljX2lzc3VlX2NtZChhZGFwdGVyLAotCQkJYWRhcHRlci0+YWh3LnBjaV9mdW5jLAorCQkJYWRhcHRlci0+YWh3LT5wY2lfZnVuYywKIAkJCWFkYXB0ZXItPmZ3X2hhbF92ZXJzaW9uLAogCQkJKHUzMikocGh5c19hZGRyID4+IDMyKSwKIAkJCSgodTMyKXBoeXNfYWRkciAmIDB4ZmZmZmZmZmYpLApAQCAtMzIyLDcgKzQxNCw3IEBACiAKIAlpZiAoZXJyID09IFFMQ05JQ19SQ09ERV9TVUNDRVNTKSB7CiAJCXRlbXAgPSBsZTMyX3RvX2NwdShwcnNwLT5jZHNfcmluZy5ob3N0X3Byb2R1Y2VyX2NyYik7Ci0JCXR4X3JpbmctPmNyYl9jbWRfcHJvZHVjZXIgPSBhZGFwdGVyLT5haHcucGNpX2Jhc2UwICsgdGVtcDsKKwkJdHhfcmluZy0+Y3JiX2NtZF9wcm9kdWNlciA9IGFkYXB0ZXItPmFody0+cGNpX2Jhc2UwICsgdGVtcDsKIAogCQlhZGFwdGVyLT50eF9jb250ZXh0X2lkID0KIAkJCWxlMTZfdG9fY3B1KHByc3AtPmNvbnRleHRfaWQpOwpAQCAtMzMyLDEwICs0MjQsMTEgQEAKIAkJZXJyID0gLUVJTzsKIAl9CiAKLQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHJzcF9zaXplLCByc3BfYWRkciwgcnNwX3BoeXNfYWRkcik7CisJZG1hX2ZyZWVfY29oZXJlbnQoJmFkYXB0ZXItPnBkZXYtPmRldiwgcnNwX3NpemUsIHJzcF9hZGRyLAorCQlyc3BfcGh5c19hZGRyKTsKIAogb3V0X2ZyZWVfcnE6Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBycV9zaXplLCBycV9hZGRyLCBycV9waHlzX2FkZHIpOworCWRtYV9mcmVlX2NvaGVyZW50KCZhZGFwdGVyLT5wZGV2LT5kZXYsIHJxX3NpemUsIHJxX2FkZHIsIHJxX3BoeXNfYWRkcik7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMzQ0LDcgKzQzNyw3IEBACiBxbGNuaWNfZndfY21kX2Rlc3Ryb3lfdHhfY3R4KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpZiAocWxjbmljX2lzc3VlX2NtZChhZGFwdGVyLAotCQkJYWRhcHRlci0+YWh3LnBjaV9mdW5jLAorCQkJYWRhcHRlci0+YWh3LT5wY2lfZnVuYywKIAkJCWFkYXB0ZXItPmZ3X2hhbF92ZXJzaW9uLAogCQkJYWRhcHRlci0+dHhfY29udGV4dF9pZCwKIAkJCVFMQ05JQ19ERVNUUk9ZX0NUWF9SRVNFVCwKQEAgLTM1NywzMyArNDUwLDE1IEBACiB9CiAKIGludAotcWxjbmljX2Z3X2NtZF9xdWVyeV9waHkoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1MzIgcmVnLCB1MzIgKnZhbCkKLXsKLQotCWlmIChxbGNuaWNfaXNzdWVfY21kKGFkYXB0ZXIsCi0JCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsCi0JCQlhZGFwdGVyLT5md19oYWxfdmVyc2lvbiwKLQkJCXJlZywKLQkJCTAsCi0JCQkwLAotCQkJUUxDTklDX0NEUlBfQ01EX1JFQURfUEhZKSkgewotCi0JCXJldHVybiAtRUlPOwotCX0KLQotCXJldHVybiBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19BUkcxX0NSQl9PRkZTRVQpOwotfQotCi1pbnQKLXFsY25pY19md19jbWRfc2V0X3BoeShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiByZWcsIHUzMiB2YWwpCitxbGNuaWNfZndfY21kX3NldF9wb3J0KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdTMyIGNvbmZpZykKIHsKIAlyZXR1cm4gcWxjbmljX2lzc3VlX2NtZChhZGFwdGVyLAotCQkJYWRhcHRlci0+YWh3LnBjaV9mdW5jLAorCQkJYWRhcHRlci0+YWh3LT5wY2lfZnVuYywKIAkJCWFkYXB0ZXItPmZ3X2hhbF92ZXJzaW9uLAotCQkJcmVnLAotCQkJdmFsLAorCQkJY29uZmlnLAogCQkJMCwKLQkJCVFMQ05JQ19DRFJQX0NNRF9XUklURV9QSFkpOworCQkJMCwKKwkJCVFMQ05JQ19DRFJQX0NNRF9DT05GSUdfUE9SVCk7CiB9CiAKIGludCBxbGNuaWNfYWxsb2NfaHdfcmVzb3VyY2VzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKQEAgLTM5OCwyMCArNDczLDE5IEBACiAKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAKLQlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKwlyZWN2X2N0eCA9IGFkYXB0ZXItPnJlY3ZfY3R4OwogCXR4X3JpbmcgPSBhZGFwdGVyLT50eF9yaW5nOwogCi0JdHhfcmluZy0+aHdfY29uc3VtZXIgPSAoX19sZTMyICopcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgc2l6ZW9mKHUzMiksCi0JCQkJCQkmdHhfcmluZy0+aHdfY29uc19waHlzX2FkZHIpOworCXR4X3JpbmctPmh3X2NvbnN1bWVyID0gKF9fbGUzMiAqKSBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwKKwkJc2l6ZW9mKHUzMiksICZ0eF9yaW5nLT5od19jb25zX3BoeXNfYWRkciwgR0ZQX0tFUk5FTCk7CiAJaWYgKHR4X3JpbmctPmh3X2NvbnN1bWVyID09IE5VTEwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIHR4IGNvbnN1bWVyXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCSoodHhfcmluZy0+aHdfY29uc3VtZXIpID0gMDsKIAogCS8qIGNtZCBkZXNjIHJpbmcgKi8KLQlhZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgVFhfREVTQ19SSU5HU0laRSh0eF9yaW5nKSwKLQkJCSZ0eF9yaW5nLT5waHlzX2FkZHIpOworCWFkZHIgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwgVFhfREVTQ19SSU5HU0laRSh0eF9yaW5nKSwKKwkJCSZ0eF9yaW5nLT5waHlzX2FkZHIsIEdGUF9LRVJORUwpOwogCiAJaWYgKGFkZHIgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgdHggZGVzYyByaW5nXG4iKTsKQEAgLTQyMyw5ICs0OTcsOSBAQAogCiAJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgewogCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOwotCQlhZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJYWRkciA9IGRtYV9hbGxvY19jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LAogCQkJCVJDVl9ERVNDX1JJTkdTSVpFKHJkc19yaW5nKSwKLQkJCQkmcmRzX3JpbmctPnBoeXNfYWRkcik7CisJCQkJJnJkc19yaW5nLT5waHlzX2FkZHIsIEdGUF9LRVJORUwpOwogCQlpZiAoYWRkciA9PSBOVUxMKSB7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCiAJCQkJImZhaWxlZCB0byBhbGxvY2F0ZSByZHMgcmluZyBbJWRdXG4iLCByaW5nKTsKQEAgLTQzOSw5ICs1MTMsOSBAQAogCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOyByaW5nKyspIHsKIAkJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1tyaW5nXTsKIAotCQlhZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJYWRkciA9IGRtYV9hbGxvY19jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LAogCQkJCVNUQVRVU19ERVNDX1JJTkdTSVpFKHNkc19yaW5nKSwKLQkJCQkmc2RzX3JpbmctPnBoeXNfYWRkcik7CisJCQkJJnNkc19yaW5nLT5waHlzX2FkZHIsIEdGUF9LRVJORUwpOwogCQlpZiAoYWRkciA9PSBOVUxMKSB7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCiAJCQkJImZhaWxlZCB0byBhbGxvY2F0ZSBzZHMgcmluZyBbJWRdXG4iLCByaW5nKTsKQEAgLTUwMSwxMSArNTc1LDExIEBACiAJc3RydWN0IHFsY25pY19ob3N0X3R4X3JpbmcgKnR4X3Jpbmc7CiAJaW50IHJpbmc7CiAKLQlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKwlyZWN2X2N0eCA9IGFkYXB0ZXItPnJlY3ZfY3R4OwogCiAJdHhfcmluZyA9IGFkYXB0ZXItPnR4X3Jpbmc7CiAJaWYgKHR4X3JpbmctPmh3X2NvbnN1bWVyICE9IE5VTEwpIHsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQlkbWFfZnJlZV9jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LAogCQkJCXNpemVvZih1MzIpLAogCQkJCXR4X3JpbmctPmh3X2NvbnN1bWVyLAogCQkJCXR4X3JpbmctPmh3X2NvbnNfcGh5c19hZGRyKTsKQEAgLTUxMyw3ICs1ODcsNyBAQAogCX0KIAogCWlmICh0eF9yaW5nLT5kZXNjX2hlYWQgIT0gTlVMTCkgewotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCWRtYV9mcmVlX2NvaGVyZW50KCZhZGFwdGVyLT5wZGV2LT5kZXYsCiAJCQkJVFhfREVTQ19SSU5HU0laRSh0eF9yaW5nKSwKIAkJCQl0eF9yaW5nLT5kZXNjX2hlYWQsIHR4X3JpbmctPnBoeXNfYWRkcik7CiAJCXR4X3JpbmctPmRlc2NfaGVhZCA9IE5VTEw7CkBAIC01MjMsNyArNTk3LDcgQEAKIAkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKIAogCQlpZiAocmRzX3JpbmctPmRlc2NfaGVhZCAhPSBOVUxMKSB7Ci0JCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQlkbWFfZnJlZV9jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LAogCQkJCQlSQ1ZfREVTQ19SSU5HU0laRShyZHNfcmluZyksCiAJCQkJCXJkc19yaW5nLT5kZXNjX2hlYWQsCiAJCQkJCXJkc19yaW5nLT5waHlzX2FkZHIpOwpAQCAtNTM1LDcgKzYwOSw3IEBACiAJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbcmluZ107CiAKIAkJaWYgKHNkc19yaW5nLT5kZXNjX2hlYWQgIT0gTlVMTCkgewotCQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJZG1hX2ZyZWVfY29oZXJlbnQoJmFkYXB0ZXItPnBkZXYtPmRldiwKIAkJCQlTVEFUVVNfREVTQ19SSU5HU0laRShzZHNfcmluZyksCiAJCQkJc2RzX3JpbmctPmRlc2NfaGVhZCwKIAkJCQlzZHNfcmluZy0+cGh5c19hZGRyKTsKQEAgLTU1MSw5ICs2MjUsOSBAQAogCWludCBlcnI7CiAJdTMyIGFyZzE7CiAKLQlhcmcxID0gYWRhcHRlci0+YWh3LnBjaV9mdW5jIHwgQklUXzg7CisJYXJnMSA9IGFkYXB0ZXItPmFody0+cGNpX2Z1bmMgfCBCSVRfODsKIAllcnIgPSBxbGNuaWNfaXNzdWVfY21kKGFkYXB0ZXIsCi0JCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsCisJCQlhZGFwdGVyLT5haHctPnBjaV9mdW5jLAogCQkJYWRhcHRlci0+ZndfaGFsX3ZlcnNpb24sCiAJCQlhcmcxLAogCQkJMCwKQEAgLTU4MiwxNSArNjU2LDE1IEBACiAJdm9pZCAqbmljX2luZm9fYWRkcjsKIAlzaXplX3QJbmljX3NpemUgPSBzaXplb2Yoc3RydWN0IHFsY25pY19pbmZvKTsKIAotCW5pY19pbmZvX2FkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAotCQluaWNfc2l6ZSwgJm5pY19kbWFfdCk7CisJbmljX2luZm9fYWRkciA9IGRtYV9hbGxvY19jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LCBuaWNfc2l6ZSwKKwkJCQkmbmljX2RtYV90LCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5pY19pbmZvX2FkZHIpCiAJCXJldHVybiAtRU5PTUVNOwogCW1lbXNldChuaWNfaW5mb19hZGRyLCAwLCBuaWNfc2l6ZSk7CiAKIAluaWNfaW5mbyA9IChzdHJ1Y3QgcWxjbmljX2luZm8gKikgbmljX2luZm9fYWRkcjsKIAllcnIgPSBxbGNuaWNfaXNzdWVfY21kKGFkYXB0ZXIsCi0JCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsCisJCQlhZGFwdGVyLT5haHctPnBjaV9mdW5jLAogCQkJYWRhcHRlci0+ZndfaGFsX3ZlcnNpb24sCiAJCQlNU0QobmljX2RtYV90KSwKIAkJCUxTRChuaWNfZG1hX3QpLApAQCAtNjIzLDcgKzY5Nyw4IEBACiAJCWVyciA9IC1FSU87CiAJfQogCi0JcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBuaWNfc2l6ZSwgbmljX2luZm9fYWRkciwgbmljX2RtYV90KTsKKwlkbWFfZnJlZV9jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LCBuaWNfc2l6ZSwgbmljX2luZm9fYWRkciwKKwkJbmljX2RtYV90KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC02MzksOCArNzE0LDggQEAKIAlpZiAoYWRhcHRlci0+b3BfbW9kZSAhPSBRTENOSUNfTUdNVF9GVU5DKQogCQlyZXR1cm4gZXJyOwogCi0JbmljX2luZm9fYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIG5pY19zaXplLAotCQkJJm5pY19kbWFfdCk7CisJbmljX2luZm9fYWRkciA9IGRtYV9hbGxvY19jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LCBuaWNfc2l6ZSwKKwkJCSZuaWNfZG1hX3QsIEdGUF9LRVJORUwpOwogCWlmICghbmljX2luZm9fYWRkcikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTY1OSw3ICs3MzQsNyBAQAogCW5pY19pbmZvLT5tYXhfdHhfYncgPSBjcHVfdG9fbGUxNihuaWMtPm1heF90eF9idyk7CiAKIAllcnIgPSBxbGNuaWNfaXNzdWVfY21kKGFkYXB0ZXIsCi0JCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsCisJCQlhZGFwdGVyLT5haHctPnBjaV9mdW5jLAogCQkJYWRhcHRlci0+ZndfaGFsX3ZlcnNpb24sCiAJCQlNU0QobmljX2RtYV90KSwKIAkJCUxTRChuaWNfZG1hX3QpLApAQCAtNjcyLDcgKzc0Nyw4IEBACiAJCWVyciA9IC1FSU87CiAJfQogCi0JcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBuaWNfc2l6ZSwgbmljX2luZm9fYWRkciwgbmljX2RtYV90KTsKKwlkbWFfZnJlZV9jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LCBuaWNfc2l6ZSwgbmljX2luZm9fYWRkciwKKwkJbmljX2RtYV90KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC02ODcsMTUgKzc2MywxNSBAQAogCXNpemVfdCBucGFyX3NpemUgPSBzaXplb2Yoc3RydWN0IHFsY25pY19wY2lfaW5mbyk7CiAJc2l6ZV90IHBjaV9zaXplID0gbnBhcl9zaXplICogUUxDTklDX01BWF9QQ0lfRlVOQzsKIAotCXBjaV9pbmZvX2FkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBwY2lfc2l6ZSwKLQkJCSZwY2lfaW5mb19kbWFfdCk7CisJcGNpX2luZm9fYWRkciA9IGRtYV9hbGxvY19jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LCBwY2lfc2l6ZSwKKwkJCSZwY2lfaW5mb19kbWFfdCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwY2lfaW5mb19hZGRyKQogCQlyZXR1cm4gLUVOT01FTTsKIAltZW1zZXQocGNpX2luZm9fYWRkciwgMCwgcGNpX3NpemUpOwogCiAJbnBhciA9IChzdHJ1Y3QgcWxjbmljX3BjaV9pbmZvICopIHBjaV9pbmZvX2FkZHI7CiAJZXJyID0gcWxjbmljX2lzc3VlX2NtZChhZGFwdGVyLAotCQkJYWRhcHRlci0+YWh3LnBjaV9mdW5jLAorCQkJYWRhcHRlci0+YWh3LT5wY2lfZnVuYywKIAkJCWFkYXB0ZXItPmZ3X2hhbF92ZXJzaW9uLAogCQkJTVNEKHBjaV9pbmZvX2RtYV90KSwKIAkJCUxTRChwY2lfaW5mb19kbWFfdCksCkBAIC03MjEsNyArNzk3LDcgQEAKIAkJZXJyID0gLUVJTzsKIAl9CiAKLQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHBjaV9zaXplLCBwY2lfaW5mb19hZGRyLAorCWRtYV9mcmVlX2NvaGVyZW50KCZhZGFwdGVyLT5wZGV2LT5kZXYsIHBjaV9zaXplLCBwY2lfaW5mb19hZGRyLAogCQlwY2lfaW5mb19kbWFfdCk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTc0MSw3ICs4MTcsNyBAQAogCWFyZzEgfD0gcGNpX2Z1bmMgPDwgODsKIAogCWVyciA9IHFsY25pY19pc3N1ZV9jbWQoYWRhcHRlciwKLQkJCWFkYXB0ZXItPmFody5wY2lfZnVuYywKKwkJCWFkYXB0ZXItPmFody0+cGNpX2Z1bmMsCiAJCQlhZGFwdGVyLT5md19oYWxfdmVyc2lvbiwKIAkJCWFyZzEsCiAJCQkwLApAQCAtNzc1LDE0ICs4NTEsMTQgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAoYWRhcHRlci0+b3BfbW9kZSAhPSBRTENOSUNfTUdNVF9GVU5DICYmCi0JICAgIGZ1bmMgIT0gYWRhcHRlci0+YWh3LnBjaV9mdW5jKSB7CisJICAgIGZ1bmMgIT0gYWRhcHRlci0+YWh3LT5wY2lfZnVuYykgewogCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCiAJCQkiTm90IHByaXZpbGVnZSB0byBxdWVyeSBzdGF0cyBmb3IgZnVuYz0lZCIsIGZ1bmMpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlzdGF0c19hZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgc3RhdHNfc2l6ZSwKLQkJCSZzdGF0c19kbWFfdCk7CisJc3RhdHNfYWRkciA9IGRtYV9hbGxvY19jb2hlcmVudCgmYWRhcHRlci0+cGRldi0+ZGV2LCBzdGF0c19zaXplLAorCQkJJnN0YXRzX2RtYV90LCBHRlBfS0VSTkVMKTsKIAlpZiAoIXN0YXRzX2FkZHIpIHsKIAkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNzkzLDcgKzg2OSw3IEBACiAJYXJnMSB8PSByeF90eCA8PCAxNSB8IHN0YXRzX3NpemUgPDwgMTY7CiAKIAllcnIgPSBxbGNuaWNfaXNzdWVfY21kKGFkYXB0ZXIsCi0JCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsCisJCQlhZGFwdGVyLT5haHctPnBjaV9mdW5jLAogCQkJYWRhcHRlci0+ZndfaGFsX3ZlcnNpb24sCiAJCQlhcmcxLAogCQkJTVNEKHN0YXRzX2RtYV90KSwKQEAgLTgxNiw3ICs4OTIsNyBAQAogCQllc3dfc3RhdHMtPm51bWJ5dGVzID0gbGU2NF90b19jcHUoc3RhdHMtPm51bWJ5dGVzKTsKIAl9CiAKLQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHN0YXRzX3NpemUsIHN0YXRzX2FkZHIsCisJZG1hX2ZyZWVfY29oZXJlbnQoJmFkYXB0ZXItPnBkZXYtPmRldiwgc3RhdHNfc2l6ZSwgc3RhdHNfYWRkciwKIAkJc3RhdHNfZG1hX3QpOwogCXJldHVybiBlcnI7CiB9CkBAIC05MDAsNyArOTc2LDcgQEAKIAlhcmcxIHw9IEJJVF8xNCB8IHJ4X3R4IDw8IDE1OwogCiAJcmV0dXJuIHFsY25pY19pc3N1ZV9jbWQoYWRhcHRlciwKLQkJCWFkYXB0ZXItPmFody5wY2lfZnVuYywKKwkJCWFkYXB0ZXItPmFody0+cGNpX2Z1bmMsCiAJCQlhZGFwdGVyLT5md19oYWxfdmVyc2lvbiwKIAkJCWFyZzEsCiAJCQkwLApAQCAtOTIxLDcgKzk5Nyw3IEBACiAJdTggcGNpX2Z1bmM7CiAJcGNpX2Z1bmMgPSAoKmFyZzEgPj4gOCk7CiAJZXJyID0gcWxjbmljX2lzc3VlX2NtZChhZGFwdGVyLAotCQkJYWRhcHRlci0+YWh3LnBjaV9mdW5jLAorCQkJYWRhcHRlci0+YWh3LT5wY2lfZnVuYywKIAkJCWFkYXB0ZXItPmZ3X2hhbF92ZXJzaW9uLAogCQkJKmFyZzEsCiAJCQkwLApAQCAtOTk5LDcgKzEwNzUsNyBAQAogCX0KIAogCWVyciA9IHFsY25pY19pc3N1ZV9jbWQoYWRhcHRlciwKLQkJCWFkYXB0ZXItPmFody5wY2lfZnVuYywKKwkJCWFkYXB0ZXItPmFody0+cGNpX2Z1bmMsCiAJCQlhZGFwdGVyLT5md19oYWxfdmVyc2lvbiwKIAkJCWFyZzEsCiAJCQlhcmcyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2V0aHRvb2wuYwppbmRleCA0NWIyNzU1Li45ZWZjNjkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2V0aHRvb2wuYwpAQCAtMTUwLDEwICsxNTAsMTAgQEAKIHsKIAlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBjaGVja19zZnBfbW9kdWxlID0gMDsKLQl1MTYgcGNpZm4gPSBhZGFwdGVyLT5haHcucGNpX2Z1bmM7CisJdTE2IHBjaWZuID0gYWRhcHRlci0+YWh3LT5wY2lfZnVuYzsKIAogCS8qIHJlYWQgd2hpY2ggbW9kZSAqLwotCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IFFMQ05JQ19HQkUpIHsKKwlpZiAoYWRhcHRlci0+YWh3LT5wb3J0X3R5cGUgPT0gUUxDTklDX0dCRSkgewogCQllY21kLT5zdXBwb3J0ZWQgPSAoU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8CiAJCQkJICAgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8CiAJCQkJICAgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfApAQCAtMTY2LDExICsxNjYsMTEgQEAKIAkJCQkgICAgIEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYgfAogCQkJCSAgICAgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCk7CiAKLQkJZWNtZC0+c3BlZWQgPSBhZGFwdGVyLT5saW5rX3NwZWVkOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgYWRhcHRlci0+bGlua19zcGVlZCk7CiAJCWVjbWQtPmR1cGxleCA9IGFkYXB0ZXItPmxpbmtfZHVwbGV4OwogCQllY21kLT5hdXRvbmVnID0gYWRhcHRlci0+bGlua19hdXRvbmVnOwogCi0JfSBlbHNlIGlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IFFMQ05JQ19YR0JFKSB7CisJfSBlbHNlIGlmIChhZGFwdGVyLT5haHctPnBvcnRfdHlwZSA9PSBRTENOSUNfWEdCRSkgewogCQl1MzIgdmFsOwogCiAJCXZhbCA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX1BPUlRfTU9ERV9BRERSKTsKQEAgLTE4MywxNSArMTgzLDE1IEBACiAJCX0KIAogCQlpZiAobmV0aWZfcnVubmluZyhkZXYpICYmIGFkYXB0ZXItPmhhc19saW5rX2V2ZW50cykgewotCQkJZWNtZC0+c3BlZWQgPSBhZGFwdGVyLT5saW5rX3NwZWVkOworCQkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIGFkYXB0ZXItPmxpbmtfc3BlZWQpOwogCQkJZWNtZC0+YXV0b25lZyA9IGFkYXB0ZXItPmxpbmtfYXV0b25lZzsKIAkJCWVjbWQtPmR1cGxleCA9IGFkYXB0ZXItPmxpbmtfZHVwbGV4OwogCQkJZ290byBza2lwOwogCQl9CiAKIAkJdmFsID0gUUxDUkQzMihhZGFwdGVyLCBQM1BfTElOS19TUEVFRF9SRUcocGNpZm4pKTsKLQkJZWNtZC0+c3BlZWQgPSBQM1BfTElOS19TUEVFRF9NSFogKgotCQkJUDNQX0xJTktfU1BFRURfVkFMKHBjaWZuLCB2YWwpOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgUDNQX0xJTktfU1BFRURfTUhaICoKKwkJCQkgICAgICBQM1BfTElOS19TUEVFRF9WQUwocGNpZm4sIHZhbCkpOwogCQllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKIAkJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKIAl9IGVsc2UKQEAgLTIwMSw3ICsyMDEsNyBAQAogCWVjbWQtPnBoeV9hZGRyZXNzID0gYWRhcHRlci0+cGh5c2ljYWxfcG9ydDsKIAllY21kLT50cmFuc2NlaXZlciA9IFhDVlJfRVhURVJOQUw7CiAKLQlzd2l0Y2ggKGFkYXB0ZXItPmFody5ib2FyZF90eXBlKSB7CisJc3dpdGNoIChhZGFwdGVyLT5haHctPmJvYXJkX3R5cGUpIHsKIAljYXNlIFFMQ05JQ19CUkRUWVBFX1AzUF9SRUZfUUc6CiAJY2FzZSBRTENOSUNfQlJEVFlQRV9QM1BfNF9HQjoKIAljYXNlIFFMQ05JQ19CUkRUWVBFX1AzUF80X0dCX01NOgpAQCAtMjM4LDcgKzIzOCw3IEBACiAJCWVjbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CiAJCWJyZWFrOwogCWNhc2UgUUxDTklDX0JSRFRZUEVfUDNQXzEwR19UUDoKLQkJaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gUUxDTklDX1hHQkUpIHsKKwkJaWYgKGFkYXB0ZXItPmFody0+cG9ydF90eXBlID09IFFMQ05JQ19YR0JFKSB7CiAJCQllY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOwogCQkJZWNtZC0+c3VwcG9ydGVkIHw9IChTVVBQT1JURURfRklCUkUgfCBTVVBQT1JURURfVFApOwogCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0KQEAgLTI1Niw3ICsyNTYsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJVbnN1cHBvcnRlZCBib2FyZCBtb2RlbCAlZFxuIiwKLQkJCWFkYXB0ZXItPmFody5ib2FyZF90eXBlKTsKKwkJCWFkYXB0ZXItPmFody0+Ym9hcmRfdHlwZSk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMjg0LDUwICsyODQsNDQgQEAKIHN0YXRpYyBpbnQKIHFsY25pY19zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQogeworCXUzMiBjb25maWcgPSAwOworCXUzMiByZXQgPSAwOwogCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7Ci0JX191MzIgc3RhdHVzOworCisJaWYgKGFkYXB0ZXItPmFody0+cG9ydF90eXBlICE9IFFMQ05JQ19HQkUpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCS8qIHJlYWQgd2hpY2ggbW9kZSAqLwotCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IFFMQ05JQ19HQkUpIHsKLQkJLyogYXV0b25lZ290aWF0aW9uICovCi0JCWlmIChxbGNuaWNfZndfY21kX3NldF9waHkoYWRhcHRlciwKLQkJCSAgICAgICBRTENOSUNfTklVX0dCX01JSV9NR01UX0FERFJfQVVUT05FRywKLQkJCSAgICAgICBlY21kLT5hdXRvbmVnKSAhPSAwKQotCQkJcmV0dXJuIC1FSU87Ci0JCWVsc2UKLQkJCWFkYXB0ZXItPmxpbmtfYXV0b25lZyA9IGVjbWQtPmF1dG9uZWc7CisJaWYgKGVjbWQtPmR1cGxleCkKKwkJY29uZmlnIHw9IDB4MTsKIAotCQlpZiAocWxjbmljX2Z3X2NtZF9xdWVyeV9waHkoYWRhcHRlciwKLQkJCSAgICAgIFFMQ05JQ19OSVVfR0JfTUlJX01HTVRfQUREUl9QSFlfU1RBVFVTLAotCQkJICAgICAgJnN0YXR1cykgIT0gMCkKLQkJCXJldHVybiAtRUlPOworCWlmIChlY21kLT5hdXRvbmVnKQorCQljb25maWcgfD0gMHgyOwogCi0JCXN3aXRjaCAoZWNtZC0+c3BlZWQpIHsKLQkJY2FzZSBTUEVFRF8xMDoKLQkJCXFsY25pY19zZXRfcGh5X3NwZWVkKHN0YXR1cywgMCk7Ci0JCQlicmVhazsKLQkJY2FzZSBTUEVFRF8xMDA6Ci0JCQlxbGNuaWNfc2V0X3BoeV9zcGVlZChzdGF0dXMsIDEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1BFRURfMTAwMDoKLQkJCXFsY25pY19zZXRfcGh5X3NwZWVkKHN0YXR1cywgMik7Ci0JCQlicmVhazsKLQkJfQorCXN3aXRjaCAoZXRodG9vbF9jbWRfc3BlZWQoZWNtZCkpIHsKKwljYXNlIFNQRUVEXzEwOgorCQljb25maWcgfD0gKDAgPDwgOCk7CisJCWJyZWFrOworCWNhc2UgU1BFRURfMTAwOgorCQljb25maWcgfD0gKDEgPDwgOCk7CisJCWJyZWFrOworCWNhc2UgU1BFRURfMTAwMDoKKwkJY29uZmlnIHw9ICgxMCA8PCA4KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU87CisJfQogCi0JCWlmIChlY21kLT5kdXBsZXggPT0gRFVQTEVYX0hBTEYpCi0JCQlxbGNuaWNfY2xlYXJfcGh5X2R1cGxleChzdGF0dXMpOwotCQlpZiAoZWNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQotCQkJcWxjbmljX3NldF9waHlfZHVwbGV4KHN0YXR1cyk7Ci0JCWlmIChxbGNuaWNfZndfY21kX3NldF9waHkoYWRhcHRlciwKLQkJCSAgICAgICBRTENOSUNfTklVX0dCX01JSV9NR01UX0FERFJfUEhZX1NUQVRVUywKLQkJCSAgICAgICAqKChpbnQgKikmc3RhdHVzKSkgIT0gMCkKLQkJCXJldHVybiAtRUlPOwotCQllbHNlIHsKLQkJCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSBlY21kLT5zcGVlZDsKLQkJCWFkYXB0ZXItPmxpbmtfZHVwbGV4ID0gZWNtZC0+ZHVwbGV4OwotCQl9Ci0JfSBlbHNlCisJcmV0ID0gcWxjbmljX2Z3X2NtZF9zZXRfcG9ydChhZGFwdGVyLCBjb25maWcpOworCisJaWYgKHJldCA9PSBRTENOSUNfUkNPREVfTk9UX1NVUFBPUlRFRCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOworCWVsc2UgaWYgKHJldCkKKwkJcmV0dXJuIC1FSU87CisKKwlhZGFwdGVyLT5saW5rX3NwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoZWNtZCk7CisJYWRhcHRlci0+bGlua19kdXBsZXggPSBlY21kLT5kdXBsZXg7CisJYWRhcHRlci0+bGlua19hdXRvbmVnID0gZWNtZC0+YXV0b25lZzsKIAogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQogCQlyZXR1cm4gMDsKQEAgLTM0MCwxNCArMzM0LDE0IEBACiBxbGNuaWNfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncywgdm9pZCAqcCkKIHsKIAlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKwlzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSBhZGFwdGVyLT5yZWN2X2N0eDsKIAlzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOwogCXUzMiAqcmVnc19idWZmID0gcDsKIAlpbnQgcmluZywgaSA9IDAsIGogPSAwOwogCiAJbWVtc2V0KHAsIDAsIHFsY25pY19nZXRfcmVnc19sZW4oZGV2KSk7CiAJcmVncy0+dmVyc2lvbiA9IChRTENOSUNfRVRIVE9PTF9SRUdTX1ZFUiA8PCAyNCkgfAotCQkoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkIDw8IDE2KSB8IChhZGFwdGVyLT5wZGV2KS0+ZGV2aWNlOworCQkoYWRhcHRlci0+YWh3LT5yZXZpc2lvbl9pZCA8PCAxNikgfCAoYWRhcHRlci0+cGRldiktPmRldmljZTsKIAogCXJlZ3NfYnVmZlswXSA9ICgweGNhZmUwMDAwIHwgKFFMQ05JQ19ERVZfSU5GT19TSVpFICYgMHhmZmZmKSk7CiAJcmVnc19idWZmWzFdID0gUUxDTklDX01HTVRfQVBJX1ZFUlNJT047CkBAIC0zODIsNyArMzc2LDcgQEAKIAl1MzIgdmFsOwogCiAJdmFsID0gUUxDUkQzMihhZGFwdGVyLCBDUkJfWEdfU1RBVEVfUDNQKTsKLQl2YWwgPSBYR19MSU5LX1NUQVRFX1AzUChhZGFwdGVyLT5haHcucGNpX2Z1bmMsIHZhbCk7CisJdmFsID0gWEdfTElOS19TVEFURV9QM1AoYWRhcHRlci0+YWh3LT5wY2lfZnVuYywgdmFsKTsKIAlyZXR1cm4gKHZhbCA9PSBYR19MSU5LX1VQX1AzUCkgPyAwIDogMTsKIH0KIApAQCAtNDc0LDYgKzQ2OCwzOSBAQAogCXJldHVybiBxbGNuaWNfcmVzZXRfY29udGV4dChhZGFwdGVyKTsKIH0KIAorc3RhdGljIHZvaWQgcWxjbmljX2dldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgZXRodG9vbF9jaGFubmVscyAqY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCisJY2hhbm5lbC0+bWF4X3J4ID0gcm91bmRkb3duX3Bvd19vZl90d28obWluX3QoaW50LAorCQkJYWRhcHRlci0+bWF4X3J4X3F1ZXMsIG51bV9vbmxpbmVfY3B1cygpKSk7CisJY2hhbm5lbC0+bWF4X3R4ID0gYWRhcHRlci0+bWF4X3R4X3F1ZXM7CisKKwljaGFubmVsLT5yeF9jb3VudCA9IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7CisJY2hhbm5lbC0+dHhfY291bnQgPSBhZGFwdGVyLT5tYXhfdHhfcXVlczsKK30KKworc3RhdGljIGludCBxbGNuaWNfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBldGh0b29sX2NoYW5uZWxzICpjaGFubmVsKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVycjsKKworCWlmIChjaGFubmVsLT5vdGhlcl9jb3VudCB8fCBjaGFubmVsLT5jb21iaW5lZF9jb3VudCB8fAorCSAgICBjaGFubmVsLT50eF9jb3VudCAhPSBjaGFubmVsLT5tYXhfdHgpCisJCXJldHVybiAtRUlOVkFMOworCisJZXJyID0gcWxjbmljX3ZhbGlkYXRlX21heF9yc3MoZGV2LCBjaGFubmVsLT5tYXhfcngsIGNoYW5uZWwtPnJ4X2NvdW50KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gcWxjbmljX3NldF9tYXhfcnNzKGFkYXB0ZXIsIGNoYW5uZWwtPnJ4X2NvdW50KTsKKwluZXRkZXZfaW5mbyhkZXYsICJhbGxvY2F0ZWQgMHgleCBzZHMgcmluZ3NcbiIsCisJCQkJIGFkYXB0ZXItPm1heF9zZHNfcmluZ3MpOworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyB2b2lkCiBxbGNuaWNfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCSAgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqcGF1c2UpCkBAIC00ODIsNyArNTA5LDcgQEAKIAlpbnQgcG9ydCA9IGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQ7CiAJX191MzIgdmFsOwogCi0JaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gUUxDTklDX0dCRSkgeworCWlmIChhZGFwdGVyLT5haHctPnBvcnRfdHlwZSA9PSBRTENOSUNfR0JFKSB7CiAJCWlmICgocG9ydCA8IDApIHx8IChwb3J0ID4gUUxDTklDX05JVV9NQVhfR0JFX1BPUlRTKSkKIAkJCXJldHVybjsKIAkJLyogZ2V0IGZsb3cgY29udHJvbCBzZXR0aW5ncyAqLwpAQCAtNTA0LDcgKzUzMSw3IEBACiAJCQlwYXVzZS0+dHhfcGF1c2UgPSAhKHFsY25pY19nYl9nZXRfZ2IzX21hc2sodmFsKSk7CiAJCQlicmVhazsKIAkJfQotCX0gZWxzZSBpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBRTENOSUNfWEdCRSkgeworCX0gZWxzZSBpZiAoYWRhcHRlci0+YWh3LT5wb3J0X3R5cGUgPT0gUUxDTklDX1hHQkUpIHsKIAkJaWYgKChwb3J0IDwgMCkgfHwgKHBvcnQgPiBRTENOSUNfTklVX01BWF9YR19QT1JUUykpCiAJCQlyZXR1cm47CiAJCXBhdXNlLT5yeF9wYXVzZSA9IDE7CkBAIC01MTUsNyArNTQyLDcgQEAKIAkJCXBhdXNlLT50eF9wYXVzZSA9ICEocWxjbmljX3hnX2dldF94ZzFfbWFzayh2YWwpKTsKIAl9IGVsc2UgewogCQlkZXZfZXJyKCZuZXRkZXYtPmRldiwgIlVua25vd24gYm9hcmQgdHlwZTogJXhcbiIsCi0JCQkJCWFkYXB0ZXItPmFody5wb3J0X3R5cGUpOworCQkJCQlhZGFwdGVyLT5haHctPnBvcnRfdHlwZSk7CiAJfQogfQogCkBAIC01MjgsNyArNTU1LDcgQEAKIAlfX3UzMiB2YWw7CiAKIAkvKiByZWFkIG1vZGUgKi8KLQlpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBRTENOSUNfR0JFKSB7CisJaWYgKGFkYXB0ZXItPmFody0+cG9ydF90eXBlID09IFFMQ05JQ19HQkUpIHsKIAkJaWYgKChwb3J0IDwgMCkgfHwgKHBvcnQgPiBRTENOSUNfTklVX01BWF9HQkVfUE9SVFMpKQogCQkJcmV0dXJuIC1FSU87CiAJCS8qIHNldCBmbG93IGNvbnRyb2wgKi8KQEAgLTU3MSw3ICs1OTgsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAkJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfTklVX0dCX1BBVVNFX0NUTCwgdmFsKTsKLQl9IGVsc2UgaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gUUxDTklDX1hHQkUpIHsKKwl9IGVsc2UgaWYgKGFkYXB0ZXItPmFody0+cG9ydF90eXBlID09IFFMQ05JQ19YR0JFKSB7CiAJCWlmICghcGF1c2UtPnJ4X3BhdXNlIHx8IHBhdXNlLT5hdXRvbmVnKQogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCkBAIC01OTMsNyArNjIwLDcgQEAKIAkJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfTklVX1hHX1BBVVNFX0NUTCwgdmFsKTsKIAl9IGVsc2UgewogCQlkZXZfZXJyKCZuZXRkZXYtPmRldiwgIlVua25vd24gYm9hcmQgdHlwZTogJXhcbiIsCi0JCQkJYWRhcHRlci0+YWh3LnBvcnRfdHlwZSk7CisJCQkJYWRhcHRlci0+YWh3LT5wb3J0X3R5cGUpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTYzOSw4ICs2NjYsOCBAQAogCQlnb3RvIGNsZWFyX2l0OwogCiAJYWRhcHRlci0+ZGlhZ19jbnQgPSAwOwotCXJldCA9IHFsY25pY19pc3N1ZV9jbWQoYWRhcHRlciwgYWRhcHRlci0+YWh3LnBjaV9mdW5jLAotCQkJYWRhcHRlci0+ZndfaGFsX3ZlcnNpb24sIGFkYXB0ZXItPnBvcnRudW0sCisJcmV0ID0gcWxjbmljX2lzc3VlX2NtZChhZGFwdGVyLCBhZGFwdGVyLT5haHctPnBjaV9mdW5jLAorCQkJYWRhcHRlci0+ZndfaGFsX3ZlcnNpb24sIGFkYXB0ZXItPmFody0+cGNpX2Z1bmMsCiAJCQkwLCAwLCAweDAwMDAwMDExKTsKIAlpZiAocmV0KQogCQlnb3RvIGRvbmU7CkBAIC03NDksMTQgKzc3NiwxNCBAQAogCQlyZXR1cm47CiAKIAltZW1zZXQoJnBvcnRfc3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgcWxjbmljX2Vzd19zdGF0aXN0aWNzKSk7Ci0JcmV0ID0gcWxjbmljX2dldF9wb3J0X3N0YXRzKGFkYXB0ZXIsIGFkYXB0ZXItPmFody5wY2lfZnVuYywKKwlyZXQgPSBxbGNuaWNfZ2V0X3BvcnRfc3RhdHMoYWRhcHRlciwgYWRhcHRlci0+YWh3LT5wY2lfZnVuYywKIAkJCVFMQ05JQ19RVUVSWV9SWF9DT1VOVEVSLCAmcG9ydF9zdGF0cy5yeCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuOwogCiAJcWxjbmljX2ZpbGxfZGV2aWNlX3N0YXRzKCZpbmRleCwgZGF0YSwgJnBvcnRfc3RhdHMucngpOwogCi0JcmV0ID0gcWxjbmljX2dldF9wb3J0X3N0YXRzKGFkYXB0ZXIsIGFkYXB0ZXItPmFody5wY2lfZnVuYywKKwlyZXQgPSBxbGNuaWNfZ2V0X3BvcnRfc3RhdHMoYWRhcHRlciwgYWRhcHRlci0+YWh3LT5wY2lfZnVuYywKIAkJCVFMQ05JQ19RVUVSWV9UWF9DT1VOVEVSLCAmcG9ydF9zdGF0cy50eCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuOwpAQCAtNzY0LDExNSArNzkxLDQ5IEBACiAJcWxjbmljX2ZpbGxfZGV2aWNlX3N0YXRzKCZpbmRleCwgZGF0YSwgJnBvcnRfc3RhdHMudHgpOwogfQogCi1zdGF0aWMgaW50IHFsY25pY19zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKChhZGFwdGVyLT5mbGFncyAmIFFMQ05JQ19FU1dJVENIX0VOQUJMRUQpKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JaWYgKGRhdGEpCi0JCWRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNKTsKLQllbHNlCi0JCWRldi0+ZmVhdHVyZXMgJj0gfihORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSk7Ci0KLQlyZXR1cm4gMDsKLQotfQotc3RhdGljIHUzMiBxbGNuaWNfZ2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSVBfQ1NVTTsKLX0KLQotc3RhdGljIHUzMiBxbGNuaWNfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCXJldHVybiBhZGFwdGVyLT5yeF9jc3VtOwotfQotCi1zdGF0aWMgaW50IHFsY25pY19zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKChhZGFwdGVyLT5mbGFncyAmIFFMQ05JQ19FU1dJVENIX0VOQUJMRUQpKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JaWYgKCEhZGF0YSkgewotCQlhZGFwdGVyLT5yeF9jc3VtID0gISFkYXRhOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKSB7Ci0JCWlmIChxbGNuaWNfY29uZmlnX2h3X2xybyhhZGFwdGVyLCBRTENOSUNfTFJPX0RJU0FCTEVEKSkKLQkJCXJldHVybiAtRUlPOwotCi0JCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfTFJPOwotCQlxbGNuaWNfc2VuZF9scm9fY2xlYW51cChhZGFwdGVyKTsKLQkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwKLQkJCQkJImRpc2FibGluZyBMUk8gYXMgcnhfY3N1bSBpcyBvZmZcbiIpOwotCX0KLQlhZGFwdGVyLT5yeF9jc3VtID0gISFkYXRhOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTMyIHFsY25pY19nZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIChkZXYtPmZlYXR1cmVzICYgKE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082KSkgIT0gMDsKLX0KLQotc3RhdGljIGludCBxbGNuaWNfc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCWlmICghKGFkYXB0ZXItPmNhcGFiaWxpdGllcyAmIFFMQ05JQ19GV19DQVBBQklMSVRZX1RTTykpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQlpZiAoZGF0YSkKLQkJZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYpOwotCWVsc2UKLQkJZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHFsY25pY19ibGlua19sZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHZhbCkKK3N0YXRpYyBpbnQgcWxjbmljX3NldF9sZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgZW51bSBldGh0b29sX3BoeXNfaWRfc3RhdGUgc3RhdGUpCiB7CiAJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgbWF4X3Nkc19yaW5ncyA9IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7Ci0JaW50IGRldl9kb3duID0gMDsKLQlpbnQgcmV0OwogCi0JaWYgKCF0ZXN0X2JpdChfX1FMQ05JQ19ERVZfVVAsICZhZGFwdGVyLT5zdGF0ZSkpIHsKLQkJZGV2X2Rvd24gPSAxOwotCQlpZiAodGVzdF9hbmRfc2V0X2JpdChfX1FMQ05JQ19SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCi0JCQlyZXR1cm4gLUVJTzsKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBFVEhUT09MX0lEX0FDVElWRToKKwkJaWYgKCF0ZXN0X2JpdChfX1FMQ05JQ19ERVZfVVAsICZhZGFwdGVyLT5zdGF0ZSkpIHsKKwkJCWlmICh0ZXN0X2FuZF9zZXRfYml0KF9fUUxDTklDX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJCQlyZXR1cm4gLUVJTzsKIAotCQlyZXQgPSBxbGNuaWNfZGlhZ19hbGxvY19yZXMoZGV2LCBRTENOSUNfTEVEX1RFU1QpOwotCQlpZiAocmV0KSB7Ci0JCQljbGVhcl9iaXQoX19RTENOSUNfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpOwotCQkJcmV0dXJuIHJldDsKKwkJCWlmIChxbGNuaWNfZGlhZ19hbGxvY19yZXMoZGV2LCBRTENOSUNfTEVEX1RFU1QpKSB7CisJCQkJY2xlYXJfYml0KF9fUUxDTklDX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJCXNldF9iaXQoX19RTENOSUNfRElBR19SRVNfQUxMT0MsICZhZGFwdGVyLT5zdGF0ZSk7CiAJCX0KLQl9CiAKLQlyZXQgPSBhZGFwdGVyLT5uaWNfb3BzLT5jb25maWdfbGVkKGFkYXB0ZXIsIDEsIDB4Zik7Ci0JaWYgKHJldCkgeworCQlpZiAoYWRhcHRlci0+bmljX29wcy0+Y29uZmlnX2xlZChhZGFwdGVyLCAxLCAweGYpID09IDApCisJCQlyZXR1cm4gMDsKKwogCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCiAJCQkiRmFpbGVkIHRvIHNldCBMRUQgYmxpbmsgc3RhdGUuXG4iKTsKLQkJZ290byBkb25lOworCQlicmVhazsKKworCWNhc2UgRVRIVE9PTF9JRF9JTkFDVElWRToKKwkJaWYgKGFkYXB0ZXItPm5pY19vcHMtPmNvbmZpZ19sZWQoYWRhcHRlciwgMCwgMHhmKSkKKwkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkiRmFpbGVkIHRvIHJlc2V0IExFRCBibGluayBzdGF0ZS5cbiIpOworCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JbXNsZWVwX2ludGVycnVwdGlibGUodmFsICogMTAwMCk7Ci0KLQlyZXQgPSBhZGFwdGVyLT5uaWNfb3BzLT5jb25maWdfbGVkKGFkYXB0ZXIsIDAsIDB4Zik7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCi0JCQkiRmFpbGVkIHRvIHJlc2V0IExFRCBibGluayBzdGF0ZS5cbiIpOwotCQlnb3RvIGRvbmU7Ci0JfQotCi1kb25lOgotCWlmIChkZXZfZG93bikgeworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoX19RTENOSUNfRElBR19SRVNfQUxMT0MsICZhZGFwdGVyLT5zdGF0ZSkpIHsKIAkJcWxjbmljX2RpYWdfZnJlZV9yZXMoZGV2LCBtYXhfc2RzX3JpbmdzKTsKIAkJY2xlYXJfYml0KF9fUUxDTklDX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKIAl9Ci0JcmV0dXJuIHJldDsKIAorCXJldHVybiAtRUlPOwogfQogCiBzdGF0aWMgdm9pZApAQCAtOTM2LDggKzg5Nyw4IEBACiAJKi8KIAlpZiAoZXRoY29hbC0+cnhfY29hbGVzY2VfdXNlY3MgPiAweGZmZmYgfHwKIAkJZXRoY29hbC0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPiAweGZmZmYgfHwKLQkJZXRoY29hbC0+dHhfY29hbGVzY2VfdXNlY3MgPiAweGZmZmYgfHwKLQkJZXRoY29hbC0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPiAweGZmZmYgfHwKKwkJZXRoY29hbC0+dHhfY29hbGVzY2VfdXNlY3MgfHwKKwkJZXRoY29hbC0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgfHwKIAkJZXRoY29hbC0+cnhfY29hbGVzY2VfdXNlY3NfaXJxIHx8CiAJCWV0aGNvYWwtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycSB8fAogCQlldGhjb2FsLT50eF9jb2FsZXNjZV91c2Vjc19pcnEgfHwKQEAgLTk1OSwyMSArOTIwLDE3IEBACiAKIAlpZiAoIWV0aGNvYWwtPnJ4X2NvYWxlc2NlX3VzZWNzIHx8CiAJCSFldGhjb2FsLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lcykgewotCQlhZGFwdGVyLT5jb2FsLmZsYWdzID0gUUxDTklDX0lOVFJfREVGQVVMVDsKLQkJYWRhcHRlci0+Y29hbC5ub3JtYWwuZGF0YS5yeF90aW1lX3VzID0KKwkJYWRhcHRlci0+YWh3LT5jb2FsLmZsYWcgPSBRTENOSUNfSU5UUl9ERUZBVUxUOworCQlhZGFwdGVyLT5haHctPmNvYWwucnhfdGltZV91cyA9CiAJCQlRTENOSUNfREVGQVVMVF9JTlRSX0NPQUxFU0NFX1JYX1RJTUVfVVM7Ci0JCWFkYXB0ZXItPmNvYWwubm9ybWFsLmRhdGEucnhfcGFja2V0cyA9CisJCWFkYXB0ZXItPmFody0+Y29hbC5yeF9wYWNrZXRzID0KIAkJCVFMQ05JQ19ERUZBVUxUX0lOVFJfQ09BTEVTQ0VfUlhfUEFDS0VUUzsKIAl9IGVsc2UgewotCQlhZGFwdGVyLT5jb2FsLmZsYWdzID0gMDsKLQkJYWRhcHRlci0+Y29hbC5ub3JtYWwuZGF0YS5yeF90aW1lX3VzID0KLQkJZXRoY29hbC0+cnhfY29hbGVzY2VfdXNlY3M7Ci0JCWFkYXB0ZXItPmNvYWwubm9ybWFsLmRhdGEucnhfcGFja2V0cyA9Ci0JCWV0aGNvYWwtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzOworCQlhZGFwdGVyLT5haHctPmNvYWwuZmxhZyA9IDA7CisJCWFkYXB0ZXItPmFody0+Y29hbC5yeF90aW1lX3VzID0gZXRoY29hbC0+cnhfY29hbGVzY2VfdXNlY3M7CisJCWFkYXB0ZXItPmFody0+Y29hbC5yeF9wYWNrZXRzID0KKwkJCWV0aGNvYWwtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzOwogCX0KLQlhZGFwdGVyLT5jb2FsLm5vcm1hbC5kYXRhLnR4X3RpbWVfdXMgPSBldGhjb2FsLT50eF9jb2FsZXNjZV91c2VjczsKLQlhZGFwdGVyLT5jb2FsLm5vcm1hbC5kYXRhLnR4X3BhY2tldHMgPQotCWV0aGNvYWwtPnR4X21heF9jb2FsZXNjZWRfZnJhbWVzOwogCiAJcWxjbmljX2NvbmZpZ19pbnRyX2NvYWxlc2NlKGFkYXB0ZXIpOwogCkBAIC05ODgsNTAgKzk0NSw4IEBACiAJaWYgKGFkYXB0ZXItPmlzX3VwICE9IFFMQ05JQ19BREFQVEVSX1VQX01BR0lDKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWV0aGNvYWwtPnJ4X2NvYWxlc2NlX3VzZWNzID0gYWRhcHRlci0+Y29hbC5ub3JtYWwuZGF0YS5yeF90aW1lX3VzOwotCWV0aGNvYWwtPnR4X2NvYWxlc2NlX3VzZWNzID0gYWRhcHRlci0+Y29hbC5ub3JtYWwuZGF0YS50eF90aW1lX3VzOwotCWV0aGNvYWwtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzID0KLQkJYWRhcHRlci0+Y29hbC5ub3JtYWwuZGF0YS5yeF9wYWNrZXRzOwotCWV0aGNvYWwtPnR4X21heF9jb2FsZXNjZWRfZnJhbWVzID0KLQkJYWRhcHRlci0+Y29hbC5ub3JtYWwuZGF0YS50eF9wYWNrZXRzOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcWxjbmljX3NldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCWludCBod19scm87Ci0KLQlpZiAoZXRodG9vbF9pbnZhbGlkX2ZsYWdzKG5ldGRldiwgZGF0YSwgRVRIX0ZMQUdfTFJPKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIShhZGFwdGVyLT5jYXBhYmlsaXRpZXMgJiBRTENOSUNfRldfQ0FQQUJJTElUWV9IV19MUk8pKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghYWRhcHRlci0+cnhfY3N1bSkgewotCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAicnggY3N1bSBpcyBvZmYsICIKLQkJCSJjYW5ub3QgdG9nZ2xlIGxyb1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICgoZGF0YSAmIEVUSF9GTEFHX0xSTykgJiYgKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykpCi0JCXJldHVybiAwOwotCi0JaWYgKGRhdGEgJiBFVEhfRkxBR19MUk8pIHsKLQkJaHdfbHJvID0gUUxDTklDX0xST19FTkFCTEVEOwotCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOwotCX0gZWxzZSB7Ci0JCWh3X2xybyA9IDA7Ci0JCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfTFJPOwotCX0KLQotCWlmIChxbGNuaWNfY29uZmlnX2h3X2xybyhhZGFwdGVyLCBod19scm8pKQotCQlyZXR1cm4gLUVJTzsKLQotCWlmICgoaHdfbHJvID09IDApICYmIHFsY25pY19zZW5kX2xyb19jbGVhbnVwKGFkYXB0ZXIpKQotCQlyZXR1cm4gLUVJTzsKLQorCWV0aGNvYWwtPnJ4X2NvYWxlc2NlX3VzZWNzID0gYWRhcHRlci0+YWh3LT5jb2FsLnJ4X3RpbWVfdXM7CisJZXRoY29hbC0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPSBhZGFwdGVyLT5haHctPmNvYWwucnhfcGFja2V0czsKIAogCXJldHVybiAwOwogfQpAQCAtMTA1MCw2ICs5NjUsODQgQEAKIAlhZGFwdGVyLT5tc2dfZW5hYmxlID0gbXNnbHZsOwogfQogCitzdGF0aWMgaW50CitxbGNuaWNfZ2V0X2R1bXBfZmxhZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9kdW1wICpkdW1wKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IHFsY25pY19md19kdW1wICpmd19kdW1wID0gJmFkYXB0ZXItPmFody0+ZndfZHVtcDsKKworCWR1bXAtPmxlbiA9IGZ3X2R1bXAtPnRtcGxfaGRyLT5zaXplICsgZndfZHVtcC0+c2l6ZTsKKwlkdW1wLT5mbGFnID0gZndfZHVtcC0+dG1wbF9oZHItPmRydl9jYXBfbWFzazsKKwlkdW1wLT52ZXJzaW9uID0gYWRhcHRlci0+ZndfdmVyc2lvbjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcWxjbmljX2dldF9kdW1wX2RhdGEoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfZHVtcCAqZHVtcCwKKwkJCXZvaWQgKmJ1ZmZlcikKK3sKKwlpbnQgaSwgY29weV9zejsKKwl1MzIgKmhkcl9wdHIsICpkYXRhOworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IHFsY25pY19md19kdW1wICpmd19kdW1wID0gJmFkYXB0ZXItPmFody0+ZndfZHVtcDsKKworCWlmIChxbGNuaWNfYXBpX2xvY2soYWRhcHRlcikpCisJCXJldHVybiAtRUlPOworCWlmICghZndfZHVtcC0+Y2xyKSB7CisJCW5ldGRldl9pbmZvKG5ldGRldiwgIkR1bXAgbm90IGF2YWlsYWJsZVxuIik7CisJCXFsY25pY19hcGlfdW5sb2NrKGFkYXB0ZXIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogQ29weSB0ZW1wbGF0ZSBoZWFkZXIgZmlyc3QgKi8KKwljb3B5X3N6ID0gZndfZHVtcC0+dG1wbF9oZHItPnNpemU7CisJaGRyX3B0ciA9ICh1MzIgKikgZndfZHVtcC0+dG1wbF9oZHI7CisJZGF0YSA9ICh1MzIgKikgYnVmZmVyOworCWZvciAoaSA9IDA7IGkgPCBjb3B5X3N6L3NpemVvZih1MzIpOyBpKyspCisJCSpkYXRhKysgPSBjcHVfdG9fbGUzMigqaGRyX3B0cisrKTsKKworCS8qIENvcHkgY2FwdHVyZWQgZHVtcCBkYXRhICovCisJbWVtY3B5KGJ1ZmZlciArIGNvcHlfc3osIGZ3X2R1bXAtPmRhdGEsIGZ3X2R1bXAtPnNpemUpOworCWR1bXAtPmxlbiA9IGNvcHlfc3ogKyBmd19kdW1wLT5zaXplOworCWR1bXAtPmZsYWcgPSBmd19kdW1wLT50bXBsX2hkci0+ZHJ2X2NhcF9tYXNrOworCisJLyogRnJlZSBkdW1wIGFyZWEgb25jZSBkYXRhIGhhcyBiZWVuIGNhcHR1cmVkICovCisJdmZyZWUoZndfZHVtcC0+ZGF0YSk7CisJZndfZHVtcC0+ZGF0YSA9IE5VTEw7CisJZndfZHVtcC0+Y2xyID0gMDsKKwlxbGNuaWNfYXBpX3VubG9jayhhZGFwdGVyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitxbGNuaWNfc2V0X2R1bXAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfZHVtcCAqdmFsKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IHFsY25pY19md19kdW1wICpmd19kdW1wID0gJmFkYXB0ZXItPmFody0+ZndfZHVtcDsKKworCWlmICh2YWwtPmZsYWcgPT0gUUxDTklDX0ZPUkNFX0ZXX0RVTVBfS0VZKSB7CisJCW5ldGRldl9pbmZvKG5ldGRldiwgIkZvcmNpbmcgYSBGVyBkdW1wXG4iKTsKKwkJcWxjbmljX2Rldl9yZXF1ZXN0X3Jlc2V0KGFkYXB0ZXIpOworCX0gZWxzZSB7CisJCWlmICh2YWwtPmZsYWcgPiBRTENOSUNfRFVNUF9NQVNLX01BWCB8fAorCQkJdmFsLT5mbGFnIDwgUUxDTklDX0RVTVBfTUFTS19NSU4pIHsKKwkJCQluZXRkZXZfaW5mbyhuZXRkZXYsCisJCQkJIkludmFsaWQgZHVtcCBsZXZlbDogMHgleFxuIiwgdmFsLT5mbGFnKTsKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJCWdvdG8gb3V0OworCQl9CisJCWlmIChxbGNuaWNfYXBpX2xvY2soYWRhcHRlcikpCisJCQlyZXR1cm4gLUVJTzsKKwkJZndfZHVtcC0+dG1wbF9oZHItPmRydl9jYXBfbWFzayA9IHZhbC0+ZmxhZyAmIDB4ZmY7CisJCXFsY25pY19hcGlfdW5sb2NrKGFkYXB0ZXIpOworCQluZXRkZXZfaW5mbyhuZXRkZXYsICJEcml2ZXIgbWFzayBjaGFuZ2VkIHRvOiAweCV4XG4iLAorCQkJZndfZHVtcC0+dG1wbF9oZHItPmRydl9jYXBfbWFzayk7CisJfQorb3V0OgorCXJldHVybiByZXQ7Cit9CisKIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBxbGNuaWNfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncyA9IHFsY25pY19nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncyA9IHFsY25pY19zZXRfc2V0dGluZ3MsCkBAIC0xMDYxLDI2ICsxMDU0LDIyIEBACiAJLmdldF9lZXByb20gPSBxbGNuaWNfZ2V0X2VlcHJvbSwKIAkuZ2V0X3JpbmdwYXJhbSA9IHFsY25pY19nZXRfcmluZ3BhcmFtLAogCS5zZXRfcmluZ3BhcmFtID0gcWxjbmljX3NldF9yaW5ncGFyYW0sCisJLmdldF9jaGFubmVscyA9IHFsY25pY19nZXRfY2hhbm5lbHMsCisJLnNldF9jaGFubmVscyA9IHFsY25pY19zZXRfY2hhbm5lbHMsCiAJLmdldF9wYXVzZXBhcmFtID0gcWxjbmljX2dldF9wYXVzZXBhcmFtLAogCS5zZXRfcGF1c2VwYXJhbSA9IHFsY25pY19zZXRfcGF1c2VwYXJhbSwKLQkuZ2V0X3R4X2NzdW0gPSBxbGNuaWNfZ2V0X3R4X2NzdW0sCi0JLnNldF90eF9jc3VtID0gcWxjbmljX3NldF90eF9jc3VtLAotCS5zZXRfc2cgPSBldGh0b29sX29wX3NldF9zZywKLQkuZ2V0X3RzbyA9IHFsY25pY19nZXRfdHNvLAotCS5zZXRfdHNvID0gcWxjbmljX3NldF90c28sCiAJLmdldF93b2wgPSBxbGNuaWNfZ2V0X3dvbCwKIAkuc2V0X3dvbCA9IHFsY25pY19zZXRfd29sLAogCS5zZWxmX3Rlc3QgPSBxbGNuaWNfZGlhZ190ZXN0LAogCS5nZXRfc3RyaW5ncyA9IHFsY25pY19nZXRfc3RyaW5ncywKIAkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBxbGNuaWNfZ2V0X2V0aHRvb2xfc3RhdHMsCiAJLmdldF9zc2V0X2NvdW50ID0gcWxjbmljX2dldF9zc2V0X2NvdW50LAotCS5nZXRfcnhfY3N1bSA9IHFsY25pY19nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0gPSBxbGNuaWNfc2V0X3J4X2NzdW0sCiAJLmdldF9jb2FsZXNjZSA9IHFsY25pY19nZXRfaW50cl9jb2FsZXNjZSwKIAkuc2V0X2NvYWxlc2NlID0gcWxjbmljX3NldF9pbnRyX2NvYWxlc2NlLAotCS5nZXRfZmxhZ3MgPSBldGh0b29sX29wX2dldF9mbGFncywKLQkuc2V0X2ZsYWdzID0gcWxjbmljX3NldF9mbGFncywKLQkucGh5c19pZCA9IHFsY25pY19ibGlua19sZWQsCisJLnNldF9waHlzX2lkID0gcWxjbmljX3NldF9sZWQsCiAJLnNldF9tc2dsZXZlbCA9IHFsY25pY19zZXRfbXNnbGV2ZWwsCiAJLmdldF9tc2dsZXZlbCA9IHFsY25pY19nZXRfbXNnbGV2ZWwsCisJLmdldF9kdW1wX2ZsYWcgPSBxbGNuaWNfZ2V0X2R1bXBfZmxhZywKKwkuZ2V0X2R1bXBfZGF0YSA9IHFsY25pY19nZXRfZHVtcF9kYXRhLAorCS5zZXRfZHVtcCA9IHFsY25pY19zZXRfZHVtcCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2hkci5oIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19oZHIuaAppbmRleCA3MjZlZjU1Li5kMTQ1MDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2hkci5oCisrKyBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfaGRyLmgKQEAgLTQ5MiwxMCArNDkyLDEwIEBACiAKICNkZWZpbmUgVEVTVF9BR1RfQ1RSTAkoMHgwMCkKIAotI2RlZmluZSBUQV9DVExfU1RBUlQJMQotI2RlZmluZSBUQV9DVExfRU5BQkxFCTIKLSNkZWZpbmUgVEFfQ1RMX1dSSVRFCTQKLSNkZWZpbmUgVEFfQ1RMX0JVU1kJOAorI2RlZmluZSBUQV9DVExfU1RBUlQJQklUXzAKKyNkZWZpbmUgVEFfQ1RMX0VOQUJMRQlCSVRfMQorI2RlZmluZSBUQV9DVExfV1JJVEUJQklUXzIKKyNkZWZpbmUgVEFfQ1RMX0JVU1kJQklUXzMKIAogLyoKICAqICAgUmVnaXN0ZXIgb2Zmc2V0cyBmb3IgTU4KQEAgLTc2NSw2ICs3NjUsMzggQEAKICNkZWZpbmUgUUxDTklDX01BWF9QQ0lfRlVOQwk4CiAjZGVmaW5lIFFMQ05JQ19NQVhfVkxBTl9GSUxURVJTCTY0CiAKKy8qIEZXIGR1bXAgZGVmaW5lcyAqLworI2RlZmluZSBNSVVfVEVTVF9DVFIJCTB4NDEwMDAwOTAKKyNkZWZpbmUgTUlVX1RFU1RfQUREUl9MTwkweDQxMDAwMDk0CisjZGVmaW5lIE1JVV9URVNUX0FERFJfSEkJMHg0MTAwMDA5OAorI2RlZmluZSBGTEFTSF9ST01fV0lORE9XCTB4NDIxMTAwMzAKKyNkZWZpbmUgRkxBU0hfUk9NX0RBVEEJCTB4NDIxNTAwMDAKKworc3RhdGljIGNvbnN0IHUzMiBNSVVfVEVTVF9SRUFEX0RBVEFbXSA9IHsKKwkweDQxMDAwMEE4LCAweDQxMDAwMEFDLCAweDQxMDAwMEI4LCAweDQxMDAwMEJDLCB9OworCisjZGVmaW5lIFFMQ05JQ19GV19EVU1QX1JFRzEJMHgwMDEzMDA2MAorI2RlZmluZSBRTENOSUNfRldfRFVNUF9SRUcyCTB4MDAxZTAwMDAKKyNkZWZpbmUgUUxDTklDX0ZMQVNIX1NFTTJfTEsJMHgwMDEzQzAxMAorI2RlZmluZSBRTENOSUNfRkxBU0hfU0VNMl9VTEsJMHgwMDEzQzAxNAorI2RlZmluZSBRTENOSUNfRkxBU0hfTE9DS19JRAkweDAwMUIyMTAwCisKKyNkZWZpbmUgUUxDTklDX1JEX0RVTVBfUkVHKGFkZHIsIGJhcjAsIGRhdGEpIGRvIHsJCQlcCisJd3JpdGVsKChhZGRyICYgMHhGRkZGMDAwMCksICh2b2lkICopIChiYXIwICsJCQlcCisJCVFMQ05JQ19GV19EVU1QX1JFRzEpKTsJCQkJCVwKKwlyZWFkbCgodm9pZCAqKSAoYmFyMCArIFFMQ05JQ19GV19EVU1QX1JFRzEpKTsJCQlcCisJKmRhdGEgPSByZWFkbCgodm9pZCAqKSAoYmFyMCArIFFMQ05JQ19GV19EVU1QX1JFRzIgKwkJXAorCQlMU1coYWRkcikpKTsJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIFFMQ05JQ19XUl9EVU1QX1JFRyhhZGRyLCBiYXIwLCBkYXRhKSBkbyB7CQkJXAorCXdyaXRlbCgoYWRkciAmIDB4RkZGRjAwMDApLCAodm9pZCAqKSAoYmFyMCArCQkJXAorCQlRTENOSUNfRldfRFVNUF9SRUcxKSk7CQkJCQlcCisJcmVhZGwoKHZvaWQgKikgKGJhcjAgKyBRTENOSUNfRldfRFVNUF9SRUcxKSk7CQkJXAorCXdyaXRlbChkYXRhLCAodm9pZCAqKSAoYmFyMCArIFFMQ05JQ19GV19EVU1QX1JFRzIgKyBMU1coYWRkcikpKTtcCisJcmVhZGwoKHZvaWQgKikgKGJhcjAgKyBRTENOSUNfRldfRFVNUF9SRUcyICsgTFNXKGFkZHIpKSk7CVwKK30gd2hpbGUgKDApCisKIC8qIFBDSSBmdW5jdGlvbiBvcGVyYXRpb25hbCBtb2RlICovCiBlbnVtIHsKIAlRTENOSUNfTUdNVF9GVU5DCT0gMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfaHcuYyBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfaHcuYwppbmRleCA2MTY5NDBmLi5lOTY1NjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19ody5jCkBAIC05LDYgKzksNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAjZGVmaW5lIE1BU0sobikgKCgxVUxMPDwobikpLTEpCiAjZGVmaW5lIE9DTV9XSU5fUDNQKGFkZHIpIChhZGRyICYgMHhmZmMwMDAwKQpAQCAtNDU3LDcgKzQ1OCw3IEBACiAKIAlyZXEucWhkciA9IGNwdV90b19sZTY0KFFMQ05JQ19IT1NUX1JFUVVFU1QgPDwgMjMpOwogCi0Jd29yZCA9IFFMQ05JQ19IMkNfT1BDT0RFX1BST1hZX1NFVF9WUE9SVF9NSVNTX01PREUgfAorCXdvcmQgPSBRTENOSUNfSDJDX09QQ09ERV9TRVRfTUFDX1JFQ0VJVkVfTU9ERSB8CiAJCQkoKHU2NClhZGFwdGVyLT5wb3J0bnVtIDw8IDE2KTsKIAlyZXEucmVxX2hkciA9IGNwdV90b19sZTY0KHdvcmQpOwogCkBAIC01MzIsMzMgKzUzMywzMSBAQAogCX0KIH0KIAotI2RlZmluZQlRTENOSUNfQ09ORklHX0lOVFJfQ09BTEVTQ0UJMwotCiAvKgogICogU2VuZCB0aGUgaW50ZXJydXB0IGNvYWxlc2NpbmcgcGFyYW1ldGVyIHNldCBieSBldGh0b29sIHRvIHRoZSBjYXJkLgogICovCiBpbnQgcWxjbmljX2NvbmZpZ19pbnRyX2NvYWxlc2NlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgcWxjbmljX25pY19yZXEgcmVxOwotCXU2NCB3b3JkWzZdOwotCWludCBydiwgaTsKKwlpbnQgcnY7CiAKIAltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHN0cnVjdCBxbGNuaWNfbmljX3JlcSkpOwogCiAJcmVxLnFoZHIgPSBjcHVfdG9fbGU2NChRTENOSUNfSE9TVF9SRVFVRVNUIDw8IDIzKTsKIAotCXdvcmRbMF0gPSBRTENOSUNfQ09ORklHX0lOVFJfQ09BTEVTQ0UgfCAoKHU2NClhZGFwdGVyLT5wb3J0bnVtIDw8IDE2KTsKLQlyZXEucmVxX2hkciA9IGNwdV90b19sZTY0KHdvcmRbMF0pOworCXJlcS5yZXFfaGRyID0gY3B1X3RvX2xlNjQoUUxDTklDX0NPTkZJR19JTlRSX0NPQUxFU0NFIHwKKwkJKCh1NjQpIGFkYXB0ZXItPnBvcnRudW0gPDwgMTYpKTsKIAotCW1lbWNweSgmd29yZFswXSwgJmFkYXB0ZXItPmNvYWwsIHNpemVvZihhZGFwdGVyLT5jb2FsKSk7Ci0JZm9yIChpID0gMDsgaSA8IDY7IGkrKykKLQkJcmVxLndvcmRzW2ldID0gY3B1X3RvX2xlNjQod29yZFtpXSk7Ci0KKwlyZXEud29yZHNbMF0gPSBjcHVfdG9fbGU2NCgoKHU2NCkgYWRhcHRlci0+YWh3LT5jb2FsLmZsYWcpIDw8IDMyKTsKKwlyZXEud29yZHNbMl0gPSBjcHVfdG9fbGU2NChhZGFwdGVyLT5haHctPmNvYWwucnhfcGFja2V0cyB8CisJCQkoKHU2NCkgYWRhcHRlci0+YWh3LT5jb2FsLnJ4X3RpbWVfdXMpIDw8IDE2KTsKKwlyZXEud29yZHNbNV0gPSBjcHVfdG9fbGU2NChhZGFwdGVyLT5haHctPmNvYWwudGltZXJfb3V0IHwKKwkJCSgodTY0KSBhZGFwdGVyLT5haHctPmNvYWwudHlwZSkgPDwgMzIgfAorCQkJKCh1NjQpIGFkYXB0ZXItPmFody0+Y29hbC5zdHNfcmluZ19tYXNrKSA8PCA0MCk7CiAJcnYgPSBxbGNuaWNfc2VuZF9jbWRfZGVzY3MoYWRhcHRlciwgKHN0cnVjdCBjbWRfZGVzY190eXBlMCAqKSZyZXEsIDEpOwogCWlmIChydiAhPSAwKQogCQlkZXZfZXJyKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKIAkJCSJDb3VsZCBub3Qgc2VuZCBpbnRlcnJ1cHQgY29hbGVzY2luZyBwYXJhbWV0ZXJzXG4iKTsKLQogCXJldHVybiBydjsKIH0KIApAQCAtNTY4LDYgKzU2Nyw5IEBACiAJdTY0IHdvcmQ7CiAJaW50IHJ2OwogCisJaWYgKCF0ZXN0X2JpdChfX1FMQ05JQ19GV19BVFRBQ0hFRCwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJcmV0dXJuIDA7CisKIAltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHN0cnVjdCBxbGNuaWNfbmljX3JlcSkpOwogCiAJcmVxLnFoZHIgPSBjcHVfdG9fbGU2NChRTENOSUNfSE9TVF9SRVFVRVNUIDw8IDIzKTsKQEAgLTcxMyw2ICs3MTUsOSBAQAogCXU2NCB3b3JkOwogCWludCBydjsKIAorCWlmICghdGVzdF9iaXQoX19RTENOSUNfRldfQVRUQUNIRUQsICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybiAwOworCiAJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihzdHJ1Y3QgcWxjbmljX25pY19yZXEpKTsKIAlyZXEucWhkciA9IGNwdV90b19sZTY0KFFMQ05JQ19IT1NUX1JFUVVFU1QgPDwgMjMpOwogCkBAIC03NTQsNiArNzU5LDQzIEBACiAJcmV0dXJuIHJjOwogfQogCisKK3UzMiBxbGNuaWNfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBmZWF0dXJlcykKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKChhZGFwdGVyLT5mbGFncyAmIFFMQ05JQ19FU1dJVENIX0VOQUJMRUQpKSB7CisJCXUzMiBjaGFuZ2VkID0gZmVhdHVyZXMgXiBuZXRkZXYtPmZlYXR1cmVzOworCQlmZWF0dXJlcyBePSBjaGFuZ2VkICYgKE5FVElGX0ZfQUxMX0NTVU0gfCBORVRJRl9GX1JYQ1NVTSk7CisJfQorCisJaWYgKCEoZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkpCisJCWZlYXR1cmVzICY9IH5ORVRJRl9GX0xSTzsKKworCXJldHVybiBmZWF0dXJlczsKK30KKworCitpbnQgcWxjbmljX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZmVhdHVyZXMpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwl1MzIgY2hhbmdlZCA9IG5ldGRldi0+ZmVhdHVyZXMgXiBmZWF0dXJlczsKKwlpbnQgaHdfbHJvID0gKGZlYXR1cmVzICYgTkVUSUZfRl9MUk8pID8gUUxDTklDX0xST19FTkFCTEVEIDogMDsKKworCWlmICghKGNoYW5nZWQgJiBORVRJRl9GX0xSTykpCisJCXJldHVybiAwOworCisJbmV0ZGV2LT5mZWF0dXJlcyA9IGZlYXR1cmVzIF4gTkVUSUZfRl9MUk87CisKKwlpZiAocWxjbmljX2NvbmZpZ19od19scm8oYWRhcHRlciwgaHdfbHJvKSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoKGh3X2xybyA9PSAwKSAmJiBxbGNuaWNfc2VuZF9scm9fY2xlYW51cChhZGFwdGVyKSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIENoYW5nZXMgdGhlIENSQiB3aW5kb3cgdG8gdGhlIHNwZWNpZmllZCB3aW5kb3cuCiAgKi8KQEAgLTc4MCw3ICs4MjIsNyBAQAogCW0gPSAmY3JiXzEyOE1fMk1fbWFwW0NSQl9CTEsob2ZmKV0uc3ViX2Jsb2NrW0NSQl9TVUJCTEsob2ZmKV07CiAKIAlpZiAobS0+dmFsaWQgJiYgKG0tPnN0YXJ0XzEyOE0gPD0gb2ZmKSAmJiAobS0+ZW5kXzEyOE0gPiBvZmYpKSB7Ci0JCSphZGRyID0gYWRhcHRlci0+YWh3LnBjaV9iYXNlMCArIG0tPnN0YXJ0XzJNICsKKwkJKmFkZHIgPSBhZGFwdGVyLT5haHctPnBjaV9iYXNlMCArIG0tPnN0YXJ0XzJNICsKIAkJCShvZmYgLSBtLT5zdGFydF8xMjhNKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNzg4LDcgKzgzMCw3IEBACiAJLyoKIAkgKiBOb3QgaW4gZGlyZWN0IG1hcCwgdXNlIGNyYiB3aW5kb3cKIAkgKi8KLQkqYWRkciA9IGFkYXB0ZXItPmFody5wY2lfYmFzZTAgKyBDUkJfSU5ESVJFQ1RfMk0gKyAob2ZmICYgTUFTSygxNikpOworCSphZGRyID0gYWRhcHRlci0+YWh3LT5wY2lfYmFzZTAgKyBDUkJfSU5ESVJFQ1RfMk0gKyAob2ZmICYgTUFTSygxNikpOwogCXJldHVybiAxOwogfQogCkBAIC04MDEsNyArODQzLDcgQEAKIHFsY25pY19wY2lfc2V0X2NyYndpbmRvd18yTShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHVsb25nIG9mZikKIHsKIAl1MzIgd2luZG93OwotCXZvaWQgX19pb21lbSAqYWRkciA9IGFkYXB0ZXItPmFody5wY2lfYmFzZTAgKyBDUkJfV0lORE9XXzJNOworCXZvaWQgX19pb21lbSAqYWRkciA9IGFkYXB0ZXItPmFody0+cGNpX2Jhc2UwICsgQ1JCX1dJTkRPV18yTTsKIAogCW9mZiAtPSBRTENOSUNfUENJX0NSQlNQQUNFOwogCkBAIC04MzgsMTMgKzg4MCwxMyBAQAogCiAJaWYgKHJ2ID4gMCkgewogCQkvKiBpbmRpcmVjdCBhY2Nlc3MgKi8KLQkJd3JpdGVfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5haHcuY3JiX2xvY2ssIGZsYWdzKTsKKwkJd3JpdGVfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5haHctPmNyYl9sb2NrLCBmbGFncyk7CiAJCWNyYl93aW5fbG9jayhhZGFwdGVyKTsKIAkJcnYgPSBxbGNuaWNfcGNpX3NldF9jcmJ3aW5kb3dfMk0oYWRhcHRlciwgb2ZmKTsKIAkJaWYgKCFydikKIAkJCXdyaXRlbChkYXRhLCBhZGRyKTsKIAkJY3JiX3dpbl91bmxvY2soYWRhcHRlcik7Ci0JCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5haHcuY3JiX2xvY2ssIGZsYWdzKTsKKwkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFody0+Y3JiX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIHJ2OwogCX0KIApAQCAtODY5LDEyICs5MTEsMTIgQEAKIAogCWlmIChydiA+IDApIHsKIAkJLyogaW5kaXJlY3QgYWNjZXNzICovCi0JCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+YWh3LmNyYl9sb2NrLCBmbGFncyk7CisJCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+YWh3LT5jcmJfbG9jaywgZmxhZ3MpOwogCQljcmJfd2luX2xvY2soYWRhcHRlcik7CiAJCWlmICghcWxjbmljX3BjaV9zZXRfY3Jid2luZG93XzJNKGFkYXB0ZXIsIG9mZikpCiAJCQlkYXRhID0gcmVhZGwoYWRkcik7CiAJCWNyYl93aW5fdW5sb2NrKGFkYXB0ZXIpOwotCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWh3LmNyYl9sb2NrLCBmbGFncyk7CisJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5haHctPmNyYl9sb2NrLCBmbGFncyk7CiAJCXJldHVybiBkYXRhOwogCX0KIApAQCAtOTA0LDkgKzk0Niw5IEBACiAKIAl3aW5kb3cgPSBPQ01fV0lOX1AzUChhZGRyKTsKIAotCXdyaXRlbCh3aW5kb3csIGFkYXB0ZXItPmFody5vY21fd2luX2NyYik7CisJd3JpdGVsKHdpbmRvdywgYWRhcHRlci0+YWh3LT5vY21fd2luX2NyYik7CiAJLyogcmVhZCBiYWNrIHRvIGZsdXNoICovCi0JcmVhZGwoYWRhcHRlci0+YWh3Lm9jbV93aW5fY3JiKTsKKwlyZWFkbChhZGFwdGVyLT5haHctPm9jbV93aW5fY3JiKTsKIAogCSpzdGFydCA9IFFMQ05JQ19QQ0lfT0NNMF8yTSArIEdFVF9NRU1fT0ZGU18yTShhZGRyKTsKIAlyZXR1cm4gMDsKQEAgLTkyMCwxMyArOTYyLDEzIEBACiAJaW50IHJldDsKIAl1MzIgc3RhcnQ7CiAKLQltdXRleF9sb2NrKCZhZGFwdGVyLT5haHcubWVtX2xvY2spOworCW11dGV4X2xvY2soJmFkYXB0ZXItPmFody0+bWVtX2xvY2spOwogCiAJcmV0ID0gcWxjbmljX3BjaV9zZXRfd2luZG93XzJNKGFkYXB0ZXIsIG9mZiwgJnN0YXJ0KTsKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gdW5sb2NrOwogCi0JYWRkciA9IGFkYXB0ZXItPmFody5wY2lfYmFzZTAgKyBzdGFydDsKKwlhZGRyID0gYWRhcHRlci0+YWh3LT5wY2lfYmFzZTAgKyBzdGFydDsKIAogCWlmIChvcCA9PSAwKQkvKiByZWFkICovCiAJCSpkYXRhID0gcmVhZHEoYWRkcik7CkBAIC05MzQsNyArOTc2LDcgQEAKIAkJd3JpdGVxKCpkYXRhLCBhZGRyKTsKIAogdW5sb2NrOgotCW11dGV4X3VubG9jaygmYWRhcHRlci0+YWh3Lm1lbV9sb2NrKTsKKwltdXRleF91bmxvY2soJmFkYXB0ZXItPmFody0+bWVtX2xvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTk0MiwyMyArOTg0LDIzIEBACiB2b2lkCiBxbGNuaWNfcGNpX2NhbXFtX3JlYWRfMk0oc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1NjQgb2ZmLCB1NjQgKmRhdGEpCiB7Ci0Jdm9pZCBfX2lvbWVtICphZGRyID0gYWRhcHRlci0+YWh3LnBjaV9iYXNlMCArCisJdm9pZCBfX2lvbWVtICphZGRyID0gYWRhcHRlci0+YWh3LT5wY2lfYmFzZTAgKwogCQlRTENOSUNfUENJX0NBTVFNXzJNX0JBU0UgKyAob2ZmIC0gUUxDTklDX1BDSV9DQU1RTSk7CiAKLQltdXRleF9sb2NrKCZhZGFwdGVyLT5haHcubWVtX2xvY2spOworCW11dGV4X2xvY2soJmFkYXB0ZXItPmFody0+bWVtX2xvY2spOwogCSpkYXRhID0gcmVhZHEoYWRkcik7Ci0JbXV0ZXhfdW5sb2NrKCZhZGFwdGVyLT5haHcubWVtX2xvY2spOworCW11dGV4X3VubG9jaygmYWRhcHRlci0+YWh3LT5tZW1fbG9jayk7CiB9CiAKIHZvaWQKIHFsY25pY19wY2lfY2FtcW1fd3JpdGVfMk0oc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1NjQgb2ZmLCB1NjQgZGF0YSkKIHsKLQl2b2lkIF9faW9tZW0gKmFkZHIgPSBhZGFwdGVyLT5haHcucGNpX2Jhc2UwICsKKwl2b2lkIF9faW9tZW0gKmFkZHIgPSBhZGFwdGVyLT5haHctPnBjaV9iYXNlMCArCiAJCVFMQ05JQ19QQ0lfQ0FNUU1fMk1fQkFTRSArIChvZmYgLSBRTENOSUNfUENJX0NBTVFNKTsKIAotCW11dGV4X2xvY2soJmFkYXB0ZXItPmFody5tZW1fbG9jayk7CisJbXV0ZXhfbG9jaygmYWRhcHRlci0+YWh3LT5tZW1fbG9jayk7CiAJd3JpdGVxKGRhdGEsIGFkZHIpOwotCW11dGV4X3VubG9jaygmYWRhcHRlci0+YWh3Lm1lbV9sb2NrKTsKKwltdXRleF91bmxvY2soJmFkYXB0ZXItPmFody0+bWVtX2xvY2spOwogfQogCiAjZGVmaW5lIE1BWF9DVExfQ0hFQ0sgICAxMDAwCkBAIC05OTcsNyArMTAzOSw3IEBACiBjb3JyZWN0OgogCW9mZjggPSBvZmYgJiB+MHhmOwogCi0JbXV0ZXhfbG9jaygmYWRhcHRlci0+YWh3Lm1lbV9sb2NrKTsKKwltdXRleF9sb2NrKCZhZGFwdGVyLT5haHctPm1lbV9sb2NrKTsKIAogCXdyaXRlbChvZmY4LCAobWVtX2NyYiArIE1JVV9URVNUX0FHVF9BRERSX0xPKSk7CiAJd3JpdGVsKDAsIChtZW1fY3JiICsgTUlVX1RFU1RfQUdUX0FERFJfSEkpKTsKQEAgLTEwNDksNyArMTA5MSw3IEBACiAJCXJldCA9IDA7CiAKIGRvbmU6Ci0JbXV0ZXhfdW5sb2NrKCZhZGFwdGVyLT5haHcubWVtX2xvY2spOworCW11dGV4X3VubG9jaygmYWRhcHRlci0+YWh3LT5tZW1fbG9jayk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTA5MSw3ICsxMTMzLDcgQEAKIGNvcnJlY3Q6CiAJb2ZmOCA9IG9mZiAmIH4weGY7CiAKLQltdXRleF9sb2NrKCZhZGFwdGVyLT5haHcubWVtX2xvY2spOworCW11dGV4X2xvY2soJmFkYXB0ZXItPmFody0+bWVtX2xvY2spOwogCiAJd3JpdGVsKG9mZjgsIChtZW1fY3JiICsgTUlVX1RFU1RfQUdUX0FERFJfTE8pKTsKIAl3cml0ZWwoMCwgKG1lbV9jcmIgKyBNSVVfVEVTVF9BR1RfQUREUl9ISSkpOwpAQCAtMTEyMSw3ICsxMTYzLDcgQEAKIAkJcmV0ID0gMDsKIAl9CiAKLQltdXRleF91bmxvY2soJmFkYXB0ZXItPmFody5tZW1fbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZhZGFwdGVyLT5haHctPm1lbV9sb2NrKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMTQ1LDcgKzExODcsNyBAQAogCWlmIChxbGNuaWNfcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBvZmZzZXQsICZib2FyZF90eXBlKSkKIAkJcmV0dXJuIC1FSU87CiAKLQlhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9IGJvYXJkX3R5cGU7CisJYWRhcHRlci0+YWh3LT5ib2FyZF90eXBlID0gYm9hcmRfdHlwZTsKIAogCWlmIChib2FyZF90eXBlID09IFFMQ05JQ19CUkRUWVBFX1AzUF80X0dCX01NKSB7CiAJCXUzMiBncGlvID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfUk9NVVNCX0dMQl9QQURfR1BJT19JKTsKQEAgLTExNjQsMjAgKzEyMDYsMjAgQEAKIAljYXNlIFFMQ05JQ19CUkRUWVBFX1AzUF8xMEdfU0ZQX1FUOgogCWNhc2UgUUxDTklDX0JSRFRZUEVfUDNQXzEwR19YRlA6CiAJY2FzZSBRTENOSUNfQlJEVFlQRV9QM1BfMTAwMDBfQkFTRV9UOgotCQlhZGFwdGVyLT5haHcucG9ydF90eXBlID0gUUxDTklDX1hHQkU7CisJCWFkYXB0ZXItPmFody0+cG9ydF90eXBlID0gUUxDTklDX1hHQkU7CiAJCWJyZWFrOwogCWNhc2UgUUxDTklDX0JSRFRZUEVfUDNQX1JFRl9RRzoKIAljYXNlIFFMQ05JQ19CUkRUWVBFX1AzUF80X0dCOgogCWNhc2UgUUxDTklDX0JSRFRZUEVfUDNQXzRfR0JfTU06Ci0JCWFkYXB0ZXItPmFody5wb3J0X3R5cGUgPSBRTENOSUNfR0JFOworCQlhZGFwdGVyLT5haHctPnBvcnRfdHlwZSA9IFFMQ05JQ19HQkU7CiAJCWJyZWFrOwogCWNhc2UgUUxDTklDX0JSRFRZUEVfUDNQXzEwR19UUDoKLQkJYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9IChhZGFwdGVyLT5wb3J0bnVtIDwgMikgPworCQlhZGFwdGVyLT5haHctPnBvcnRfdHlwZSA9IChhZGFwdGVyLT5wb3J0bnVtIDwgMikgPwogCQkJUUxDTklDX1hHQkUgOiBRTENOSUNfR0JFOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmtub3duIGJvYXJkIHR5cGUgJXhcbiIsIGJvYXJkX3R5cGUpOwotCQlhZGFwdGVyLT5haHcucG9ydF90eXBlID0gUUxDTklDX1hHQkU7CisJCWFkYXB0ZXItPmFody0+cG9ydF90eXBlID0gUUxDTklDX1hHQkU7CiAJCWJyZWFrOwogCX0KIApAQCAtMTIyMCwzICsxMjYyLDQ2MSBAQAogCiAJcmV0dXJuIHJ2OwogfQorCisvKiBGVyBkdW1wIHJlbGF0ZWQgZnVuY3Rpb25zICovCitzdGF0aWMgdTMyCitxbGNuaWNfZHVtcF9jcmIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgcWxjbmljX2R1bXBfZW50cnkgKmVudHJ5LAorCQl1MzIgKmJ1ZmZlcikKK3sKKwlpbnQgaTsKKwl1MzIgYWRkciwgZGF0YTsKKwlzdHJ1Y3QgX19jcmIgKmNyYiA9ICZlbnRyeS0+cmVnaW9uLmNyYjsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBhZGFwdGVyLT5haHctPnBjaV9iYXNlMDsKKworCWFkZHIgPSBjcmItPmFkZHI7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3JiLT5ub19vcHM7IGkrKykgeworCQlRTENOSUNfUkRfRFVNUF9SRUcoYWRkciwgYmFzZSwgJmRhdGEpOworCQkqYnVmZmVyKysgPSBjcHVfdG9fbGUzMihhZGRyKTsKKwkJKmJ1ZmZlcisrID0gY3B1X3RvX2xlMzIoZGF0YSk7CisJCWFkZHIgKz0gY3JiLT5zdHJpZGU7CisJfQorCXJldHVybiBjcmItPm5vX29wcyAqIDIgKiBzaXplb2YodTMyKTsKK30KKworc3RhdGljIHUzMgorcWxjbmljX2R1bXBfY3RybChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCisJc3RydWN0IHFsY25pY19kdW1wX2VudHJ5ICplbnRyeSwgdTMyICpidWZmZXIpCit7CisJaW50IGksIGssIHRpbWVvdXQgPSAwOworCXZvaWQgX19pb21lbSAqYmFzZSA9IGFkYXB0ZXItPmFody0+cGNpX2Jhc2UwOworCXUzMiBhZGRyLCBkYXRhOworCXU4IG9wY29kZSwgbm9fb3BzOworCXN0cnVjdCBfX2N0cmwgKmN0ciA9ICZlbnRyeS0+cmVnaW9uLmN0cmw7CisJc3RydWN0IHFsY25pY19kdW1wX3RlbXBsYXRlX2hkciAqdF9oZHIgPSBhZGFwdGVyLT5haHctPmZ3X2R1bXAudG1wbF9oZHI7CisKKwlhZGRyID0gY3RyLT5hZGRyOworCW5vX29wcyA9IGN0ci0+bm9fb3BzOworCisJZm9yIChpID0gMDsgaSA8IG5vX29wczsgaSsrKSB7CisJCWsgPSAwOworCQlvcGNvZGUgPSAwOworCQlmb3IgKGsgPSAwOyBrIDwgODsgaysrKSB7CisJCQlpZiAoIShjdHItPm9wY29kZSAmICgxIDw8IGspKSkKKwkJCQljb250aW51ZTsKKwkJCXN3aXRjaCAoMSA8PCBrKSB7CisJCQljYXNlIFFMQ05JQ19EVU1QX1dDUkI6CisJCQkJUUxDTklDX1dSX0RVTVBfUkVHKGFkZHIsIGJhc2UsIGN0ci0+dmFsMSk7CisJCQkJYnJlYWs7CisJCQljYXNlIFFMQ05JQ19EVU1QX1JXQ1JCOgorCQkJCVFMQ05JQ19SRF9EVU1QX1JFRyhhZGRyLCBiYXNlLCAmZGF0YSk7CisJCQkJUUxDTklDX1dSX0RVTVBfUkVHKGFkZHIsIGJhc2UsIGRhdGEpOworCQkJCWJyZWFrOworCQkJY2FzZSBRTENOSUNfRFVNUF9BTkRDUkI6CisJCQkJUUxDTklDX1JEX0RVTVBfUkVHKGFkZHIsIGJhc2UsICZkYXRhKTsKKwkJCQlRTENOSUNfV1JfRFVNUF9SRUcoYWRkciwgYmFzZSwKKwkJCQkJKGRhdGEgJiBjdHItPnZhbDIpKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUUxDTklDX0RVTVBfT1JDUkI6CisJCQkJUUxDTklDX1JEX0RVTVBfUkVHKGFkZHIsIGJhc2UsICZkYXRhKTsKKwkJCQlRTENOSUNfV1JfRFVNUF9SRUcoYWRkciwgYmFzZSwKKwkJCQkJKGRhdGEgfCBjdHItPnZhbDMpKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUUxDTklDX0RVTVBfUE9MTENSQjoKKwkJCQl3aGlsZSAodGltZW91dCA8PSBjdHItPnRpbWVvdXQpIHsKKwkJCQkJUUxDTklDX1JEX0RVTVBfUkVHKGFkZHIsIGJhc2UsICZkYXRhKTsKKwkJCQkJaWYgKChkYXRhICYgY3RyLT52YWwyKSA9PSBjdHItPnZhbDEpCisJCQkJCQlicmVhazsKKwkJCQkJbXNsZWVwKDEpOworCQkJCQl0aW1lb3V0Kys7CisJCQkJfQorCQkJCWlmICh0aW1lb3V0ID4gY3RyLT50aW1lb3V0KSB7CisJCQkJCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJCSJUaW1lZCBvdXQsIGFib3J0aW5nIHBvbGwgQ1JCXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBRTENOSUNfRFVNUF9SRF9TQVZFOgorCQkJCWlmIChjdHItPmluZGV4X2EpCisJCQkJCWFkZHIgPSB0X2hkci0+c2F2ZWRfc3RhdGVbY3RyLT5pbmRleF9hXTsKKwkJCQlRTENOSUNfUkRfRFVNUF9SRUcoYWRkciwgYmFzZSwgJmRhdGEpOworCQkJCXRfaGRyLT5zYXZlZF9zdGF0ZVtjdHItPmluZGV4X3ZdID0gZGF0YTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUUxDTklDX0RVTVBfV1JUX1NBVkVEOgorCQkJCWlmIChjdHItPmluZGV4X3YpCisJCQkJCWRhdGEgPSB0X2hkci0+c2F2ZWRfc3RhdGVbY3RyLT5pbmRleF92XTsKKwkJCQllbHNlCisJCQkJCWRhdGEgPSBjdHItPnZhbDE7CisJCQkJaWYgKGN0ci0+aW5kZXhfYSkKKwkJCQkJYWRkciA9IHRfaGRyLT5zYXZlZF9zdGF0ZVtjdHItPmluZGV4X2FdOworCQkJCVFMQ05JQ19XUl9EVU1QX1JFRyhhZGRyLCBiYXNlLCBkYXRhKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUUxDTklDX0RVTVBfTU9EX1NBVkVfU1Q6CisJCQkJZGF0YSA9IHRfaGRyLT5zYXZlZF9zdGF0ZVtjdHItPmluZGV4X3ZdOworCQkJCWRhdGEgPDw9IGN0ci0+c2hsX3ZhbDsKKwkJCQlkYXRhID4+PSBjdHItPnNocl92YWw7CisJCQkJaWYgKGN0ci0+dmFsMikKKwkJCQkJZGF0YSAmPSBjdHItPnZhbDI7CisJCQkJZGF0YSB8PSBjdHItPnZhbDM7CisJCQkJZGF0YSArPSBjdHItPnZhbDE7CisJCQkJdF9oZHItPnNhdmVkX3N0YXRlW2N0ci0+aW5kZXhfdl0gPSBkYXRhOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCQkiVW5rbm93biBvcGNvZGVcbiIpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWFkZHIgKz0gY3RyLT5zdHJpZGU7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyCitxbGNuaWNfZHVtcF9tdXgoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgcWxjbmljX2R1bXBfZW50cnkgKmVudHJ5LAorCXUzMiAqYnVmZmVyKQoreworCWludCBsb29wOworCXUzMiB2YWwsIGRhdGEgPSAwOworCXN0cnVjdCBfX211eCAqbXV4ID0gJmVudHJ5LT5yZWdpb24ubXV4OworCXZvaWQgX19pb21lbSAqYmFzZSA9IGFkYXB0ZXItPmFody0+cGNpX2Jhc2UwOworCisJdmFsID0gbXV4LT52YWw7CisJZm9yIChsb29wID0gMDsgbG9vcCA8IG11eC0+bm9fb3BzOyBsb29wKyspIHsKKwkJUUxDTklDX1dSX0RVTVBfUkVHKG11eC0+YWRkciwgYmFzZSwgdmFsKTsKKwkJUUxDTklDX1JEX0RVTVBfUkVHKG11eC0+cmVhZF9hZGRyLCBiYXNlLCAmZGF0YSk7CisJCSpidWZmZXIrKyA9IGNwdV90b19sZTMyKHZhbCk7CisJCSpidWZmZXIrKyA9IGNwdV90b19sZTMyKGRhdGEpOworCQl2YWwgKz0gbXV4LT52YWxfc3RyaWRlOworCX0KKwlyZXR1cm4gMiAqIG11eC0+bm9fb3BzICogc2l6ZW9mKHUzMik7Cit9CisKK3N0YXRpYyB1MzIKK3FsY25pY19kdW1wX3F1ZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBxbGNuaWNfZHVtcF9lbnRyeSAqZW50cnksCisJdTMyICpidWZmZXIpCit7CisJaW50IGksIGxvb3A7CisJdTMyIGNudCwgYWRkciwgZGF0YSwgcXVlX2lkID0gMDsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBhZGFwdGVyLT5haHctPnBjaV9iYXNlMDsKKwlzdHJ1Y3QgX19xdWV1ZSAqcXVlID0gJmVudHJ5LT5yZWdpb24ucXVlOworCisJYWRkciA9IHF1ZS0+cmVhZF9hZGRyOworCWNudCA9IHF1ZS0+cmVhZF9hZGRyX2NudDsKKworCWZvciAobG9vcCA9IDA7IGxvb3AgPCBxdWUtPm5vX29wczsgbG9vcCsrKSB7CisJCVFMQ05JQ19XUl9EVU1QX1JFRyhxdWUtPnNlbF9hZGRyLCBiYXNlLCBxdWVfaWQpOworCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspIHsKKwkJCVFMQ05JQ19SRF9EVU1QX1JFRyhhZGRyLCBiYXNlLCAmZGF0YSk7CisJCQkqYnVmZmVyKysgPSBjcHVfdG9fbGUzMihkYXRhKTsKKwkJCWFkZHIgKz0gcXVlLT5yZWFkX2FkZHJfc3RyaWRlOworCQl9CisJCXF1ZV9pZCArPSBxdWUtPnN0cmlkZTsKKwl9CisJcmV0dXJuIHF1ZS0+bm9fb3BzICogY250ICogc2l6ZW9mKHUzMik7Cit9CisKK3N0YXRpYyB1MzIKK3FsY25pY19kdW1wX29jbShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBxbGNuaWNfZHVtcF9lbnRyeSAqZW50cnksCisJdTMyICpidWZmZXIpCit7CisJaW50IGk7CisJdTMyIGRhdGE7CisJdm9pZCBfX2lvbWVtICphZGRyOworCXN0cnVjdCBfX29jbSAqb2NtID0gJmVudHJ5LT5yZWdpb24ub2NtOworCisJYWRkciA9IGFkYXB0ZXItPmFody0+cGNpX2Jhc2UwICsgb2NtLT5yZWFkX2FkZHI7CisJZm9yIChpID0gMDsgaSA8IG9jbS0+bm9fb3BzOyBpKyspIHsKKwkJZGF0YSA9IHJlYWRsKGFkZHIpOworCQkqYnVmZmVyKysgPSBjcHVfdG9fbGUzMihkYXRhKTsKKwkJYWRkciArPSBvY20tPnJlYWRfYWRkcl9zdHJpZGU7CisJfQorCXJldHVybiBvY20tPm5vX29wcyAqIHNpemVvZih1MzIpOworfQorCitzdGF0aWMgdTMyCitxbGNuaWNfcmVhZF9yb20oc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgcWxjbmljX2R1bXBfZW50cnkgKmVudHJ5LAorCXUzMiAqYnVmZmVyKQoreworCWludCBpLCBjb3VudCA9IDA7CisJdTMyIGZsX2FkZHIsIHNpemUsIHZhbCwgbGNrX3ZhbCwgYWRkcjsKKwlzdHJ1Y3QgX19tZW0gKnJvbSA9ICZlbnRyeS0+cmVnaW9uLm1lbTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBhZGFwdGVyLT5haHctPnBjaV9iYXNlMDsKKworCWZsX2FkZHIgPSByb20tPmFkZHI7CisJc2l6ZSA9IHJvbS0+c2l6ZS80OworbG9ja190cnk6CisJbGNrX3ZhbCA9IHJlYWRsKGJhc2UgKyBRTENOSUNfRkxBU0hfU0VNMl9MSyk7CisJaWYgKCFsY2tfdmFsICYmIGNvdW50IDwgTUFYX0NUTF9DSEVDSykgeworCQltc2xlZXAoMTApOworCQljb3VudCsrOworCQlnb3RvIGxvY2tfdHJ5OworCX0KKwl3cml0ZWwoYWRhcHRlci0+YWh3LT5wY2lfZnVuYywgKGJhc2UgKyBRTENOSUNfRkxBU0hfTE9DS19JRCkpOworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJYWRkciA9IGZsX2FkZHIgJiAweEZGRkYwMDAwOworCQlRTENOSUNfV1JfRFVNUF9SRUcoRkxBU0hfUk9NX1dJTkRPVywgYmFzZSwgYWRkcik7CisJCWFkZHIgPSBMU1coZmxfYWRkcikgKyBGTEFTSF9ST01fREFUQTsKKwkJUUxDTklDX1JEX0RVTVBfUkVHKGFkZHIsIGJhc2UsICZ2YWwpOworCQlmbF9hZGRyICs9IDQ7CisJCSpidWZmZXIrKyA9IGNwdV90b19sZTMyKHZhbCk7CisJfQorCXJlYWRsKGJhc2UgKyBRTENOSUNfRkxBU0hfU0VNMl9VTEspOworCXJldHVybiByb20tPnNpemU7Cit9CisKK3N0YXRpYyB1MzIKK3FsY25pY19kdW1wX2wxX2NhY2hlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKKwlzdHJ1Y3QgcWxjbmljX2R1bXBfZW50cnkgKmVudHJ5LCB1MzIgKmJ1ZmZlcikKK3sKKwlpbnQgaTsKKwl1MzIgY250LCB2YWwsIGRhdGEsIGFkZHI7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gYWRhcHRlci0+YWh3LT5wY2lfYmFzZTA7CisJc3RydWN0IF9fY2FjaGUgKmwxID0gJmVudHJ5LT5yZWdpb24uY2FjaGU7CisKKwl2YWwgPSBsMS0+aW5pdF90YWdfdmFsOworCisJZm9yIChpID0gMDsgaSA8IGwxLT5ub19vcHM7IGkrKykgeworCQlRTENOSUNfV1JfRFVNUF9SRUcobDEtPmFkZHIsIGJhc2UsIHZhbCk7CisJCVFMQ05JQ19XUl9EVU1QX1JFRyhsMS0+Y3RybF9hZGRyLCBiYXNlLCBMU1cobDEtPmN0cmxfdmFsKSk7CisJCWFkZHIgPSBsMS0+cmVhZF9hZGRyOworCQljbnQgPSBsMS0+cmVhZF9hZGRyX251bTsKKwkJd2hpbGUgKGNudCkgeworCQkJUUxDTklDX1JEX0RVTVBfUkVHKGFkZHIsIGJhc2UsICZkYXRhKTsKKwkJCSpidWZmZXIrKyA9IGNwdV90b19sZTMyKGRhdGEpOworCQkJYWRkciArPSBsMS0+cmVhZF9hZGRyX3N0cmlkZTsKKwkJCWNudC0tOworCQl9CisJCXZhbCArPSBsMS0+c3RyaWRlOworCX0KKwlyZXR1cm4gbDEtPm5vX29wcyAqIGwxLT5yZWFkX2FkZHJfbnVtICogc2l6ZW9mKHUzMik7Cit9CisKK3N0YXRpYyB1MzIKK3FsY25pY19kdW1wX2wyX2NhY2hlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKKwlzdHJ1Y3QgcWxjbmljX2R1bXBfZW50cnkgKmVudHJ5LCB1MzIgKmJ1ZmZlcikKK3sKKwlpbnQgaTsKKwl1MzIgY250LCB2YWwsIGRhdGEsIGFkZHI7CisJdTggcG9sbF9tYXNrLCBwb2xsX3RvLCB0aW1lX291dCA9IDA7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gYWRhcHRlci0+YWh3LT5wY2lfYmFzZTA7CisJc3RydWN0IF9fY2FjaGUgKmwyID0gJmVudHJ5LT5yZWdpb24uY2FjaGU7CisKKwl2YWwgPSBsMi0+aW5pdF90YWdfdmFsOworCXBvbGxfbWFzayA9IExTQihNU1cobDItPmN0cmxfdmFsKSk7CisJcG9sbF90byA9IE1TQihNU1cobDItPmN0cmxfdmFsKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbDItPm5vX29wczsgaSsrKSB7CisJCVFMQ05JQ19XUl9EVU1QX1JFRyhsMi0+YWRkciwgYmFzZSwgdmFsKTsKKwkJZG8geworCQkJUUxDTklDX1dSX0RVTVBfUkVHKGwyLT5jdHJsX2FkZHIsIGJhc2UsCisJCQkJTFNXKGwyLT5jdHJsX3ZhbCkpOworCQkJUUxDTklDX1JEX0RVTVBfUkVHKGwyLT5jdHJsX2FkZHIsIGJhc2UsICZkYXRhKTsKKwkJCWlmICghKGRhdGEgJiBwb2xsX21hc2spKQorCQkJCWJyZWFrOworCQkJbXNsZWVwKDEpOworCQkJdGltZV9vdXQrKzsKKwkJfSB3aGlsZSAodGltZV9vdXQgPD0gcG9sbF90byk7CisJCWlmICh0aW1lX291dCA+IHBvbGxfdG8pCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlhZGRyID0gbDItPnJlYWRfYWRkcjsKKwkJY250ID0gbDItPnJlYWRfYWRkcl9udW07CisJCXdoaWxlIChjbnQpIHsKKwkJCVFMQ05JQ19SRF9EVU1QX1JFRyhhZGRyLCBiYXNlLCAmZGF0YSk7CisJCQkqYnVmZmVyKysgPSBjcHVfdG9fbGUzMihkYXRhKTsKKwkJCWFkZHIgKz0gbDItPnJlYWRfYWRkcl9zdHJpZGU7CisJCQljbnQtLTsKKwkJfQorCQl2YWwgKz0gbDItPnN0cmlkZTsKKwl9CisJcmV0dXJuIGwyLT5ub19vcHMgKiBsMi0+cmVhZF9hZGRyX251bSAqIHNpemVvZih1MzIpOworfQorCitzdGF0aWMgdTMyCitxbGNuaWNfcmVhZF9tZW1vcnkoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLAorCXN0cnVjdCBxbGNuaWNfZHVtcF9lbnRyeSAqZW50cnksIHUzMiAqYnVmZmVyKQoreworCXUzMiBhZGRyLCBkYXRhLCB0ZXN0LCByZXQgPSAwOworCWludCBpLCByZWdfcmVhZDsKKwlzdHJ1Y3QgX19tZW0gKm1lbSA9ICZlbnRyeS0+cmVnaW9uLm1lbTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBhZGFwdGVyLT5haHctPnBjaV9iYXNlMDsKKworCXJlZ19yZWFkID0gbWVtLT5zaXplOworCWFkZHIgPSBtZW0tPmFkZHI7CisJLyogY2hlY2sgZm9yIGRhdGEgc2l6ZSBvZiBtdWx0aXBsZSBvZiAxNiBhbmQgMTYgYnl0ZSBhbGlnbm1lbnQgKi8KKwlpZiAoKGFkZHIgJiAweGYpIHx8IChyZWdfcmVhZCUxNikpIHsKKwkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJVbmFsaWduZWQgbWVtb3J5IGFkZHI6MHgleCBzaXplOjB4JXhcbiIsCisJCQlhZGRyLCByZWdfcmVhZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2xvY2soJmFkYXB0ZXItPmFody0+bWVtX2xvY2spOworCisJd2hpbGUgKHJlZ19yZWFkICE9IDApIHsKKwkJUUxDTklDX1dSX0RVTVBfUkVHKE1JVV9URVNUX0FERFJfTE8sIGJhc2UsIGFkZHIpOworCQlRTENOSUNfV1JfRFVNUF9SRUcoTUlVX1RFU1RfQUREUl9ISSwgYmFzZSwgMCk7CisJCVFMQ05JQ19XUl9EVU1QX1JFRyhNSVVfVEVTVF9DVFIsIGJhc2UsCisJCQlUQV9DVExfRU5BQkxFIHwgVEFfQ1RMX1NUQVJUKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0NUTF9DSEVDSzsgaSsrKSB7CisJCQlRTENOSUNfUkRfRFVNUF9SRUcoTUlVX1RFU1RfQ1RSLCBiYXNlLCAmdGVzdCk7CisJCQlpZiAoISh0ZXN0ICYgVEFfQ1RMX0JVU1kpKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChpID09IE1BWF9DVExfQ0hFQ0spIHsKKwkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpIHsKKwkJCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJCSJmYWlsZWQgdG8gcmVhZCB0aHJvdWdoIGFnZW50XG4iKTsKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCVFMQ05JQ19SRF9EVU1QX1JFRyhNSVVfVEVTVF9SRUFEX0RBVEFbaV0sIGJhc2UsICZkYXRhKTsKKwkJCSpidWZmZXIrKyA9IGNwdV90b19sZTMyKGRhdGEpOworCQl9CisJCWFkZHIgKz0gMTY7CisJCXJlZ19yZWFkIC09IDE2OworCQlyZXQgKz0gMTY7CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmYWRhcHRlci0+YWh3LT5tZW1fbG9jayk7CisJcmV0dXJuIG1lbS0+c2l6ZTsKK30KKworc3RhdGljIHUzMgorcWxjbmljX2R1bXBfbm9wKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKKwlzdHJ1Y3QgcWxjbmljX2R1bXBfZW50cnkgKmVudHJ5LCB1MzIgKmJ1ZmZlcikKK3sKKwllbnRyeS0+aGRyLmZsYWdzIHw9IFFMQ05JQ19EVU1QX1NLSVA7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBxbGNuaWNfZHVtcF9vcGVyYXRpb25zIGZ3X2R1bXBfb3BzW10gPSB7CisJeyBRTENOSUNfRFVNUF9OT1AsIHFsY25pY19kdW1wX25vcCB9LAorCXsgUUxDTklDX0RVTVBfUkVBRF9DUkIsIHFsY25pY19kdW1wX2NyYiB9LAorCXsgUUxDTklDX0RVTVBfUkVBRF9NVVgsIHFsY25pY19kdW1wX211eCB9LAorCXsgUUxDTklDX0RVTVBfUVVFVUUsIHFsY25pY19kdW1wX3F1ZSB9LAorCXsgUUxDTklDX0RVTVBfQlJEX0NPTkZJRywgcWxjbmljX3JlYWRfcm9tIH0sCisJeyBRTENOSUNfRFVNUF9SRUFEX09DTSwgcWxjbmljX2R1bXBfb2NtIH0sCisJeyBRTENOSUNfRFVNUF9QRUdfUkVHLCBxbGNuaWNfZHVtcF9jdHJsIH0sCisJeyBRTENOSUNfRFVNUF9MMV9EVEFHLCBxbGNuaWNfZHVtcF9sMV9jYWNoZSB9LAorCXsgUUxDTklDX0RVTVBfTDFfSVRBRywgcWxjbmljX2R1bXBfbDFfY2FjaGUgfSwKKwl7IFFMQ05JQ19EVU1QX0wxX0RBVEEsIHFsY25pY19kdW1wX2wxX2NhY2hlIH0sCisJeyBRTENOSUNfRFVNUF9MMV9JTlNULCBxbGNuaWNfZHVtcF9sMV9jYWNoZSB9LAorCXsgUUxDTklDX0RVTVBfTDJfRFRBRywgcWxjbmljX2R1bXBfbDJfY2FjaGUgfSwKKwl7IFFMQ05JQ19EVU1QX0wyX0lUQUcsIHFsY25pY19kdW1wX2wyX2NhY2hlIH0sCisJeyBRTENOSUNfRFVNUF9MMl9EQVRBLCBxbGNuaWNfZHVtcF9sMl9jYWNoZSB9LAorCXsgUUxDTklDX0RVTVBfTDJfSU5TVCwgcWxjbmljX2R1bXBfbDJfY2FjaGUgfSwKKwl7IFFMQ05JQ19EVU1QX1JFQURfUk9NLCBxbGNuaWNfcmVhZF9yb20gfSwKKwl7IFFMQ05JQ19EVU1QX1JFQURfTUVNLCBxbGNuaWNfcmVhZF9tZW1vcnkgfSwKKwl7IFFMQ05JQ19EVU1QX1JFQURfQ1RSTCwgcWxjbmljX2R1bXBfY3RybCB9LAorCXsgUUxDTklDX0RVTVBfVExIRFIsIHFsY25pY19kdW1wX25vcCB9LAorCXsgUUxDTklDX0RVTVBfUkRFTkQsIHFsY25pY19kdW1wX25vcCB9LAorfTsKKworLyogV2FsayB0aGUgdGVtcGxhdGUgYW5kIGNvbGxlY3QgZHVtcCBmb3IgZWFjaCBlbnRyeSBpbiB0aGUgZHVtcCB0ZW1wbGF0ZSAqLworc3RhdGljIGludAorcWxjbmljX3ZhbGlkX2R1bXBfZW50cnkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcWxjbmljX2R1bXBfZW50cnkgKmVudHJ5LAorCXUzMiBzaXplKQoreworCWludCByZXQgPSAxOworCWlmIChzaXplICE9IGVudHJ5LT5oZHIuY2FwX3NpemUpIHsKKwkJZGV2X2luZm8oZGV2LAorCQkiSW52YWxpZGF0ZSBkdW1wLCBUeXBlOiVkXHRNYXNrOiVkXHRTaXplOiVkQ2FwX3NpemU6JWRcbiIsCisJCWVudHJ5LT5oZHIudHlwZSwgZW50cnktPmhkci5tYXNrLCBzaXplLCBlbnRyeS0+aGRyLmNhcF9zaXplKTsKKwkJZGV2X2luZm8oZGV2LCAiQWJvcnRpbmcgZnVydGhlciBkdW1wIGNhcHR1cmVcbiIpOworCQlyZXQgPSAwOworCX0KKwlyZXR1cm4gcmV0OworfQorCitpbnQgcWxjbmljX2R1bXBfZncoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiAqYnVmZmVyOworCWNoYXIgbWVzZ1s2NF07CisJY2hhciAqbXNnW10gPSB7bWVzZywgTlVMTH07CisJaW50IGksIGssIG9wc19jbnQsIG9wc19pbmRleCwgZHVtcF9zaXplID0gMDsKKwl1MzIgZW50cnlfb2Zmc2V0LCBkdW1wLCBub19lbnRyaWVzLCBidWZfb2Zmc2V0ID0gMDsKKwlzdHJ1Y3QgcWxjbmljX2R1bXBfZW50cnkgKmVudHJ5OworCXN0cnVjdCBxbGNuaWNfZndfZHVtcCAqZndfZHVtcCA9ICZhZGFwdGVyLT5haHctPmZ3X2R1bXA7CisJc3RydWN0IHFsY25pY19kdW1wX3RlbXBsYXRlX2hkciAqdG1wbF9oZHIgPSBmd19kdW1wLT50bXBsX2hkcjsKKworCWlmIChmd19kdW1wLT5jbHIpIHsKKwkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJQcmV2aW91cyBkdW1wIG5vdCBjbGVhcmVkLCBub3QgY2FwdHVyaW5nIGR1bXBcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJLyogQ2FsY3VsYXRlIHRoZSBzaXplIGZvciBkdW1wIGRhdGEgYXJlYSBvbmx5ICovCisJZm9yIChpID0gMiwgayA9IDE7IChpICYgUUxDTklDX0RVTVBfTUFTS19NQVgpOyBpIDw8PSAxLCBrKyspCisJCWlmIChpICYgdG1wbF9oZHItPmRydl9jYXBfbWFzaykKKwkJCWR1bXBfc2l6ZSArPSB0bXBsX2hkci0+Y2FwX3NpemVzW2tdOworCWlmICghZHVtcF9zaXplKQorCQlyZXR1cm4gLUVJTzsKKworCWZ3X2R1bXAtPmRhdGEgPSB2emFsbG9jKGR1bXBfc2l6ZSk7CisJaWYgKCFmd19kdW1wLT5kYXRhKSB7CisJCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkiVW5hYmxlIHRvIGFsbG9jYXRlICglZCBLQikgZm9yIGZ3IGR1bXBcbiIsCisJCQlkdW1wX3NpemUvMTAyNCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlidWZmZXIgPSBmd19kdW1wLT5kYXRhOworCWZ3X2R1bXAtPnNpemUgPSBkdW1wX3NpemU7CisJbm9fZW50cmllcyA9IHRtcGxfaGRyLT5udW1fZW50cmllczsKKwlvcHNfY250ID0gQVJSQVlfU0laRShmd19kdW1wX29wcyk7CisJZW50cnlfb2Zmc2V0ID0gdG1wbF9oZHItPm9mZnNldDsKKwl0bXBsX2hkci0+c3lzX2luZm9bMF0gPSBRTENOSUNfRFJJVkVSX1ZFUlNJT047CisJdG1wbF9oZHItPnN5c19pbmZvWzFdID0gYWRhcHRlci0+ZndfdmVyc2lvbjsKKworCWZvciAoaSA9IDA7IGkgPCBub19lbnRyaWVzOyBpKyspIHsKKwkJZW50cnkgPSAoc3RydWN0IHFsY25pY19kdW1wX2VudHJ5ICopICgodm9pZCAqKSB0bXBsX2hkciArCisJCQllbnRyeV9vZmZzZXQpOworCQlpZiAoIShlbnRyeS0+aGRyLm1hc2sgJiB0bXBsX2hkci0+ZHJ2X2NhcF9tYXNrKSkgeworCQkJZW50cnktPmhkci5mbGFncyB8PSBRTENOSUNfRFVNUF9TS0lQOworCQkJZW50cnlfb2Zmc2V0ICs9IGVudHJ5LT5oZHIub2Zmc2V0OworCQkJY29udGludWU7CisJCX0KKwkJLyogRmluZCB0aGUgaGFuZGxlciBmb3IgdGhpcyBlbnRyeSAqLworCQlvcHNfaW5kZXggPSAwOworCQl3aGlsZSAob3BzX2luZGV4IDwgb3BzX2NudCkgeworCQkJaWYgKGVudHJ5LT5oZHIudHlwZSA9PSBmd19kdW1wX29wc1tvcHNfaW5kZXhdLm9wY29kZSkKKwkJCQlicmVhazsKKwkJCW9wc19pbmRleCsrOworCQl9CisJCWlmIChvcHNfaW5kZXggPT0gb3BzX2NudCkgeworCQkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkiSW52YWxpZCBlbnRyeSB0eXBlICVkLCBleGl0aW5nIGR1bXBcbiIsCisJCQkJZW50cnktPmhkci50eXBlKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJLyogQ29sbGVjdCBkdW1wIGZvciB0aGlzIGVudHJ5ICovCisJCWR1bXAgPSBmd19kdW1wX29wc1tvcHNfaW5kZXhdLmhhbmRsZXIoYWRhcHRlciwgZW50cnksIGJ1ZmZlcik7CisJCWlmIChkdW1wICYmICFxbGNuaWNfdmFsaWRfZHVtcF9lbnRyeSgmYWRhcHRlci0+cGRldi0+ZGV2LCBlbnRyeSwKKwkJCWR1bXApKQorCQkJZW50cnktPmhkci5mbGFncyB8PSBRTENOSUNfRFVNUF9TS0lQOworCQlidWZfb2Zmc2V0ICs9IGVudHJ5LT5oZHIuY2FwX3NpemU7CisJCWVudHJ5X29mZnNldCArPSBlbnRyeS0+aGRyLm9mZnNldDsKKwkJYnVmZmVyID0gZndfZHVtcC0+ZGF0YSArIGJ1Zl9vZmZzZXQ7CisJfQorCWlmIChkdW1wX3NpemUgIT0gYnVmX29mZnNldCkgeworCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIkNhcHR1cmVkKCVkKSBhbmQgZXhwZWN0ZWQgc2l6ZSglZCkgZG8gbm90IG1hdGNoXG4iLAorCQkJYnVmX29mZnNldCwgZHVtcF9zaXplKTsKKwkJZ290byBlcnJvcjsKKwl9IGVsc2UgeworCQlmd19kdW1wLT5jbHIgPSAxOworCQlzbnByaW50ZihtZXNnLCBzaXplb2YobWVzZyksICJGVyBkdW1wIGZvciBkZXZpY2U6ICVkXG4iLAorCQkJYWRhcHRlci0+cGRldi0+ZGV2Zm4pOworCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAiRHVtcCBkYXRhLCAlZCBieXRlcyBjYXB0dXJlZFxuIiwKKwkJCWZ3X2R1bXAtPnNpemUpOworCQkvKiBTZW5kIGEgdWRldiBldmVudCB0byBub3RpZnkgYXZhaWxhYmlsaXR5IG9mIEZXIGR1bXAgKi8KKwkJa29iamVjdF91ZXZlbnRfZW52KCZhZGFwdGVyLT5wZGV2LT5kZXYua29iaiwgS09CSl9DSEFOR0UsIG1zZyk7CisJCXJldHVybiAwOworCX0KK2Vycm9yOgorCXZmcmVlKGZ3X2R1bXAtPmRhdGEpOworCXJldHVybiAtRUlOVkFMOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19pbml0LmMgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2luaXQuYwppbmRleCBhN2YxZDViLi41YjhiYmNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2luaXQuYworKysgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2luaXQuYwpAQCAtOTQsNyArOTQsNyBAQAogCXN0cnVjdCBxbGNuaWNfcnhfYnVmZmVyICpyeF9idWY7CiAJaW50IGksIHJpbmc7CiAKLQlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKwlyZWN2X2N0eCA9IGFkYXB0ZXItPnJlY3ZfY3R4OwogCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspIHsKIAkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKIAkJZm9yIChpID0gMDsgaSA8IHJkc19yaW5nLT5udW1fZGVzYzsgKytpKSB7CkBAIC0xMTksNyArMTE5LDcgQEAKIAlzdHJ1Y3QgcWxjbmljX3J4X2J1ZmZlciAqcnhfYnVmOwogCWludCBpLCByaW5nOwogCi0JcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisJcmVjdl9jdHggPSBhZGFwdGVyLT5yZWN2X2N0eDsKIAlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKSB7CiAJCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107CiAKQEAgLTE3Myw3ICsxNzMsNyBAQAogCXN0cnVjdCBxbGNuaWNfaG9zdF90eF9yaW5nICp0eF9yaW5nOwogCWludCByaW5nOwogCi0JcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisJcmVjdl9jdHggPSBhZGFwdGVyLT5yZWN2X2N0eDsKIAogCWlmIChyZWN2X2N0eC0+cmRzX3JpbmdzID09IE5VTEwpCiAJCWdvdG8gc2tpcF9yZHM7CkBAIC0yMjYsNyArMjI2LDcgQEAKIAl9CiAJdHhfcmluZy0+Y21kX2J1Zl9hcnIgPSBjbWRfYnVmX2FycjsKIAotCXJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCXJlY3ZfY3R4ID0gYWRhcHRlci0+cmVjdl9jdHg7CiAKIAlzaXplID0gYWRhcHRlci0+bWF4X3Jkc19yaW5ncyAqIHNpemVvZihzdHJ1Y3QgcWxjbmljX2hvc3RfcmRzX3JpbmcpOwogCXJkc19yaW5nID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKQEAgLTM0NSw3ICszNDUsNyBAQAogfQogCiBzdGF0aWMgaW50IGRvX3JvbV9mYXN0X3JlYWQoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLAotCQkJICAgIGludCBhZGRyLCBpbnQgKnZhbHApCisJCQkgICAgdTMyIGFkZHIsIHUzMiAqdmFscCkKIHsKIAlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19ST01VU0JfUk9NX0FERFJFU1MsIGFkZHIpOwogCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX1JPTVVTQl9ST01fRFVNTVlfQllURV9DTlQsIDApOwpAQCAtMzk4LDcgKzM5OCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IHFsY25pY19yb21fZmFzdF9yZWFkKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHIsIGludCAqdmFscCkKK2ludCBxbGNuaWNfcm9tX2Zhc3RfcmVhZChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBhZGRyLCB1MzIgKnZhbHApCiB7CiAJaW50IHJldDsKIApAQCAtODY0LDcgKzg2NCw3IEBACiAJZm9yIChpID0gMDsgaSA8IGVudHJpZXM7IGkrKykgewogCiAJCV9fbGUzMiBmbGFncywgZmlsZV9jaGlwcmV2LCBvZmZzOwotCQl1OCBjaGlwcmV2ID0gYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkOworCQl1OCBjaGlwcmV2ID0gYWRhcHRlci0+YWh3LT5yZXZpc2lvbl9pZDsKIAkJdTMyIGZsYWdiaXQ7CiAKIAkJb2ZmcyA9IGNwdV90b19sZTMyKHB0YWJfZGVzY3ItPmZpbmRleCkgKwpAQCAtMTEzMCw5ICsxMTMwLDIwIEBACiAJfSBlbHNlIHsKIAkJdTY0IGRhdGE7CiAJCXUzMiBoaSwgbG87CisJCWludCByZXQ7CisJCXN0cnVjdCBxbGNuaWNfZmx0X2VudHJ5IGJvb3RsZF9lbnRyeTsKIAotCQlzaXplID0gKFFMQ05JQ19JTUFHRV9TVEFSVCAtIFFMQ05JQ19CT09UTERfU1RBUlQpIC8gODsKLQkJZmxhc2hhZGRyID0gUUxDTklDX0JPT1RMRF9TVEFSVDsKKwkJcmV0ID0gcWxjbmljX2dldF9mbHRfZW50cnkoYWRhcHRlciwgUUxDTklDX0JPT1RMRF9SRUdJT04sCisJCQkJCSZib290bGRfZW50cnkpOworCQlpZiAoIXJldCkgeworCQkJc2l6ZSA9IGJvb3RsZF9lbnRyeS5zaXplIC8gODsKKwkJCWZsYXNoYWRkciA9IGJvb3RsZF9lbnRyeS5zdGFydF9hZGRyOworCQl9IGVsc2UgeworCQkJc2l6ZSA9IChRTENOSUNfSU1BR0VfU1RBUlQgLSBRTENOSUNfQk9PVExEX1NUQVJUKSAvIDg7CisJCQlmbGFzaGFkZHIgPSBRTENOSUNfQk9PVExEX1NUQVJUOworCQkJZGV2X2luZm8oJnBkZXYtPmRldiwKKwkJCQkidXNpbmcgbGVnYWN5IG1ldGhvZCB0byBnZXQgZmxhc2ggZncgcmVnaW9uIik7CisJCX0KIAogCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAJCQlpZiAocWxjbmljX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwKQEAgLTEzNzksOCArMTM5MCw4IEBACiAKIAlza2IgPSBidWZmZXItPnNrYjsKIAotCWlmIChsaWtlbHkoYWRhcHRlci0+cnhfY3N1bSAmJiAoY2tzdW0gPT0gU1RBVFVTX0NLU1VNX09LIHx8Ci0JCQkJCQlja3N1bSA9PSBTVEFUVVNfQ0tTVU1fTE9PUCkpKSB7CisJaWYgKGxpa2VseSgoYWRhcHRlci0+bmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSAmJgorCSAgICAoY2tzdW0gPT0gU1RBVFVTX0NLU1VNX09LIHx8IGNrc3VtID09IFNUQVRVU19DS1NVTV9MT09QKSkpIHsKIAkJYWRhcHRlci0+c3RhdHMuY3N1bW1lZCsrOwogCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCX0gZWxzZSB7CkBAIC0xMzk0LDcgKzE0MDUsNyBAQAogCXJldHVybiBza2I7CiB9CiAKLXN0YXRpYyBpbnQKK3N0YXRpYyBpbmxpbmUgaW50CiBxbGNuaWNfY2hlY2tfcnhfdGFnZ2luZyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQl1MTYgKnZsYW5fdGFnKQogewpAQCAtMTQyNSw3ICsxNDM2LDcgQEAKIAkJaW50IHJpbmcsIHU2NCBzdHNfZGF0YTApCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQlzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisJc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gYWRhcHRlci0+cmVjdl9jdHg7CiAJc3RydWN0IHFsY25pY19yeF9idWZmZXIgKmJ1ZmZlcjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBxbGNuaWNfaG9zdF9yZHNfcmluZyAqcmRzX3Jpbmc7CkBAIC0xNDY3LDEwICsxNDc4LDEwIEBACiAKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZXRkZXYpOwogCi0JaWYgKCh2aWQgIT0gMHhmZmZmKSAmJiBhZGFwdGVyLT52bGdycCkKLQkJdmxhbl9ncm9fcmVjZWl2ZSgmc2RzX3JpbmctPm5hcGksIGFkYXB0ZXItPnZsZ3JwLCB2aWQsIHNrYik7Ci0JZWxzZQotCQluYXBpX2dyb19yZWNlaXZlKCZzZHNfcmluZy0+bmFwaSwgc2tiKTsKKwlpZiAodmlkICE9IDB4ZmZmZikKKwkJX192bGFuX2h3YWNjZWxfcHV0X3RhZyhza2IsIHZpZCk7CisKKwluYXBpX2dyb19yZWNlaXZlKCZzZHNfcmluZy0+bmFwaSwgc2tiKTsKIAogCWFkYXB0ZXItPnN0YXRzLnJ4X3BrdHMrKzsKIAlhZGFwdGVyLT5zdGF0cy5yeGJ5dGVzICs9IGxlbmd0aDsKQEAgLTE0ODgsNyArMTQ5OSw3IEBACiAJCWludCByaW5nLCB1NjQgc3RzX2RhdGEwLCB1NjQgc3RzX2RhdGExKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0Jc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9IGFkYXB0ZXItPnJlY3ZfY3R4OwogCXN0cnVjdCBxbGNuaWNfcnhfYnVmZmVyICpidWZmZXI7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgcWxjbmljX2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nOwpAQCAtMTU1MiwxMCArMTU2Myw5IEBACiAKIAlsZW5ndGggPSBza2ItPmxlbjsKIAotCWlmICgodmlkICE9IDB4ZmZmZikgJiYgYWRhcHRlci0+dmxncnApCi0JCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIGFkYXB0ZXItPnZsZ3JwLCB2aWQpOwotCWVsc2UKLQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKwlpZiAodmlkICE9IDB4ZmZmZikKKwkJX192bGFuX2h3YWNjZWxfcHV0X3RhZyhza2IsIHZpZCk7CisJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKIAogCWFkYXB0ZXItPnN0YXRzLmxyb19wa3RzKys7CiAJYWRhcHRlci0+c3RhdHMubHJvYnl0ZXMgKz0gbGVuZ3RoOwpAQCAtMTYyNSw3ICsxNjM1LDcgQEAKIAogCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspIHsKIAkJc3RydWN0IHFsY25pY19ob3N0X3Jkc19yaW5nICpyZHNfcmluZyA9Ci0JCQkmYWRhcHRlci0+cmVjdl9jdHgucmRzX3JpbmdzW3JpbmddOworCQkJJmFkYXB0ZXItPnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107CiAKIAkJaWYgKCFsaXN0X2VtcHR5KCZzZHNfcmluZy0+ZnJlZV9saXN0W3JpbmddKSkgewogCQkJbGlzdF9mb3JfZWFjaChjdXIsICZzZHNfcmluZy0+ZnJlZV9saXN0W3JpbmddKSB7CkBAIC0xNjUxLDEyICsxNjYxLDEzIEBACiB9CiAKIHZvaWQKLXFsY25pY19wb3N0X3J4X2J1ZmZlcnMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1MzIgcmluZ2lkLAorcWxjbmljX3Bvc3RfcnhfYnVmZmVycyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJc3RydWN0IHFsY25pY19ob3N0X3Jkc19yaW5nICpyZHNfcmluZykKIHsKIAlzdHJ1Y3QgcmN2X2Rlc2MgKnBkZXNjOwogCXN0cnVjdCBxbGNuaWNfcnhfYnVmZmVyICpidWZmZXI7Ci0JaW50IHByb2R1Y2VyLCBjb3VudCA9IDA7CisJaW50IGNvdW50ID0gMDsKKwl1MzIgcHJvZHVjZXI7CiAJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKIAogCXByb2R1Y2VyID0gcmRzX3JpbmctPnByb2R1Y2VyOwpAQCAtMTY5Niw3ICsxNzA3LDggQEAKIHsKIAlzdHJ1Y3QgcmN2X2Rlc2MgKnBkZXNjOwogCXN0cnVjdCBxbGNuaWNfcnhfYnVmZmVyICpidWZmZXI7Ci0JaW50IHByb2R1Y2VyLCBjb3VudCA9IDA7CisJaW50ICBjb3VudCA9IDA7CisJdWludDMyX3QgcHJvZHVjZXI7CiAJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKIAogCWlmICghc3Bpbl90cnlsb2NrKCZyZHNfcmluZy0+bG9jaykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfbWFpbi5jCmluZGV4IGNiMWExZWYuLjNhYjdkMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfbWFpbi5jCkBAIC0xMywxMiArMTMsMTIgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3N3YWIuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvYWVyLmg+CisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlFMb2dpYyAxLzEwIEdiRSBDb252ZXJnZWQvSW50ZWxsaWdlbnQgRXRoZXJuZXQgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC05OCw2ICs5OCw5IEBACiBzdGF0aWMgaW50IHFsY25pY3ZmX3N0YXJ0X2Zpcm13YXJlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqKTsKIHN0YXRpYyB2b2lkIHFsY25pY19zZXRfbmV0ZGV2X2ZlYXR1cmVzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqLAogCQkJCXN0cnVjdCBxbGNuaWNfZXN3X2Z1bmNfY2ZnICopOworc3RhdGljIHZvaWQgcWxjbmljX3ZsYW5fcnhfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICosIHUxNik7CitzdGF0aWMgdm9pZCBxbGNuaWNfdmxhbl9yeF9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKiwgdTE2KTsKKwogLyogIFBDSSBEZXZpY2UgSUQgVGFibGUgICovCiAjZGVmaW5lIEVOVFJZKGRldmljZSkgXAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUUxPR0lDLCAoZGV2aWNlKSksIFwKQEAgLTExMyw3ICsxMTYsNyBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHFsY25pY19wY2lfdGJsKTsKIAogCi12b2lkCitpbmxpbmUgdm9pZAogcWxjbmljX3VwZGF0ZV9jbWRfcHJvZHVjZXIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLAogCQlzdHJ1Y3QgcWxjbmljX2hvc3RfdHhfcmluZyAqdHhfcmluZykKIHsKQEAgLTE2OSw3ICsxNzIsNyBAQAogewogCWludCByaW5nOwogCXN0cnVjdCBxbGNuaWNfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7Ci0Jc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9IGFkYXB0ZXItPnJlY3ZfY3R4OwogCiAJaWYgKHFsY25pY19hbGxvY19zZHNfcmluZ3MocmVjdl9jdHgsIGFkYXB0ZXItPm1heF9zZHNfcmluZ3MpKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE5MywxNCArMTk2LDE0IEBACiB7CiAJaW50IHJpbmc7CiAJc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZzsKLQlzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisJc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gYWRhcHRlci0+cmVjdl9jdHg7CiAKIAlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Nkc19yaW5nczsgcmluZysrKSB7CiAJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbcmluZ107CiAJCW5ldGlmX25hcGlfZGVsKCZzZHNfcmluZy0+bmFwaSk7CiAJfQogCi0JcWxjbmljX2ZyZWVfc2RzX3JpbmdzKCZhZGFwdGVyLT5yZWN2X2N0eCk7CisJcWxjbmljX2ZyZWVfc2RzX3JpbmdzKGFkYXB0ZXItPnJlY3ZfY3R4KTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTIwOCw3ICsyMTEsNyBAQAogewogCWludCByaW5nOwogCXN0cnVjdCBxbGNuaWNfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7Ci0Jc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9IGFkYXB0ZXItPnJlY3ZfY3R4OwogCiAJaWYgKGFkYXB0ZXItPmlzX3VwICE9IFFMQ05JQ19BREFQVEVSX1VQX01BR0lDKQogCQlyZXR1cm47CkBAIC0yMjUsNyArMjI4LDcgQEAKIHsKIAlpbnQgcmluZzsKIAlzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOwotCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKwlzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSBhZGFwdGVyLT5yZWN2X2N0eDsKIAogCWlmIChhZGFwdGVyLT5pc191cCAhPSBRTENOSUNfQURBUFRFUl9VUF9NQUdJQykKIAkJcmV0dXJuOwpAQCAtMzE3LDEzICszMjAsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBxbGNuaWNfdmxhbl9yeF9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAotCQlzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwKQotewotCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JYWRhcHRlci0+dmxncnAgPSBncnA7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcWxjbmljX25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuCSAgID0gcWxjbmljX29wZW4sCiAJLm5kb19zdG9wCSAgID0gcWxjbmljX2Nsb3NlLApAQCAtMzMzLDggKzMyOSwxMSBAQAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gcWxjbmljX3NldF9tdWx0aSwKIAkubmRvX3NldF9tYWNfYWRkcmVzcyAgICA9IHFsY25pY19zZXRfbWFjLAogCS5uZG9fY2hhbmdlX210dQkgICA9IHFsY25pY19jaGFuZ2VfbXR1LAorCS5uZG9fZml4X2ZlYXR1cmVzICA9IHFsY25pY19maXhfZmVhdHVyZXMsCisJLm5kb19zZXRfZmVhdHVyZXMgID0gcWxjbmljX3NldF9mZWF0dXJlcywKIAkubmRvX3R4X3RpbWVvdXQJICAgPSBxbGNuaWNfdHhfdGltZW91dCwKLQkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIgPSBxbGNuaWNfdmxhbl9yeF9yZWdpc3RlciwKKwkubmRvX3ZsYW5fcnhfYWRkX3ZpZAk9IHFsY25pY192bGFuX3J4X2FkZCwKKwkubmRvX3ZsYW5fcnhfa2lsbF92aWQJPSBxbGNuaWNfdmxhbl9yeF9kZWwsCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAkubmRvX3BvbGxfY29udHJvbGxlciA9IHFsY25pY19wb2xsX2NvbnRyb2xsZXIsCiAjZW5kaWYKQEAgLTM1MiwyNCArMzUxLDUzIEBACiAJLnN0YXJ0X2Zpcm13YXJlID0gcWxjbmljdmZfc3RhcnRfZmlybXdhcmUKIH07CiAKLXN0YXRpYyB2b2lkCi1xbGNuaWNfc2V0dXBfaW50cihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IHFsY25pY19lbmFibGVfbXNpeChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBudW1fbXNpeCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJaW50IGVyciA9IC0xOworCisJYWRhcHRlci0+bWF4X3Nkc19yaW5ncyA9IDE7CisJYWRhcHRlci0+ZmxhZ3MgJj0gfihRTENOSUNfTVNJX0VOQUJMRUQgfCBRTENOSUNfTVNJWF9FTkFCTEVEKTsKKwlxbGNuaWNfc2V0X21zaXhfYml0KHBkZXYsIDApOworCisJaWYgKGFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkKSB7CisgZW5hYmxlX21zaXg6CisJCXFsY25pY19pbml0X21zaXhfZW50cmllcyhhZGFwdGVyLCBudW1fbXNpeCk7CisJCWVyciA9IHBjaV9lbmFibGVfbXNpeChwZGV2LCBhZGFwdGVyLT5tc2l4X2VudHJpZXMsIG51bV9tc2l4KTsKKwkJaWYgKGVyciA9PSAwKSB7CisJCQlhZGFwdGVyLT5mbGFncyB8PSBRTENOSUNfTVNJWF9FTkFCTEVEOworCQkJcWxjbmljX3NldF9tc2l4X2JpdChwZGV2LCAxKTsKKworCQkJYWRhcHRlci0+bWF4X3Nkc19yaW5ncyA9IG51bV9tc2l4OworCisJCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAidXNpbmcgbXNpLXggaW50ZXJydXB0c1xuIik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCWlmIChlcnIgPiAwKSB7CisJCQludW1fbXNpeCA9IHJvdW5kZG93bl9wb3dfb2ZfdHdvKGVycik7CisJCQlpZiAobnVtX21zaXgpCisJCQkJZ290byBlbmFibGVfbXNpeDsKKwkJfQorCX0KKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyB2b2lkIHFsY25pY19lbmFibGVfbXNpX2xlZ2FjeShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJY29uc3Qgc3RydWN0IHFsY25pY19sZWdhY3lfaW50cl9zZXQgKmxlZ2FjeV9pbnRycDsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7Ci0JaW50IGVyciwgbnVtX21zaXg7CiAKLQlpZiAoYWRhcHRlci0+cnNzX3N1cHBvcnRlZCkgewotCQludW1fbXNpeCA9IChudW1fb25saW5lX2NwdXMoKSA+PSBNU0lYX0VOVFJJRVNfUEVSX0FEQVBURVIpID8KLQkJCU1TSVhfRU5UUklFU19QRVJfQURBUFRFUiA6IDI7Ci0JfSBlbHNlCi0JCW51bV9tc2l4ID0gMTsKKwlpZiAodXNlX21zaSAmJiAhcGNpX2VuYWJsZV9tc2kocGRldikpIHsKKwkJYWRhcHRlci0+ZmxhZ3MgfD0gUUxDTklDX01TSV9FTkFCTEVEOworCQlhZGFwdGVyLT50Z3Rfc3RhdHVzX3JlZyA9IHFsY25pY19nZXRfaW9hZGRyKGFkYXB0ZXIsCisJCQkJbXNpX3RndF9zdGF0dXNbYWRhcHRlci0+YWh3LT5wY2lfZnVuY10pOworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAidXNpbmcgbXNpIGludGVycnVwdHNcbiIpOworCQlhZGFwdGVyLT5tc2l4X2VudHJpZXNbMF0udmVjdG9yID0gcGRldi0+aXJxOworCQlyZXR1cm47CisJfQogCi0JYWRhcHRlci0+bWF4X3Nkc19yaW5ncyA9IDE7Ci0KLQlhZGFwdGVyLT5mbGFncyAmPSB+KFFMQ05JQ19NU0lfRU5BQkxFRCB8IFFMQ05JQ19NU0lYX0VOQUJMRUQpOwotCi0JbGVnYWN5X2ludHJwID0gJmxlZ2FjeV9pbnRyW2FkYXB0ZXItPmFody5wY2lfZnVuY107CisJbGVnYWN5X2ludHJwID0gJmxlZ2FjeV9pbnRyW2FkYXB0ZXItPmFody0+cGNpX2Z1bmNdOwogCiAJYWRhcHRlci0+aW50X3ZlY19iaXQgPSBsZWdhY3lfaW50cnAtPmludF92ZWNfYml0OwogCWFkYXB0ZXItPnRndF9zdGF0dXNfcmVnID0gcWxjbmljX2dldF9pb2FkZHIoYWRhcHRlciwKQEAgLTM4MCw0NCArNDA4LDMwIEBACiAKIAlhZGFwdGVyLT5jcmJfaW50X3N0YXRlX3JlZyA9IHFsY25pY19nZXRfaW9hZGRyKGFkYXB0ZXIsCiAJCQlJU1JfSU5UX1NUQVRFX1JFRyk7Ci0KLQlxbGNuaWNfc2V0X21zaXhfYml0KHBkZXYsIDApOwotCi0JaWYgKGFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkKSB7Ci0KLQkJcWxjbmljX2luaXRfbXNpeF9lbnRyaWVzKGFkYXB0ZXIsIG51bV9tc2l4KTsKLQkJZXJyID0gcGNpX2VuYWJsZV9tc2l4KHBkZXYsIGFkYXB0ZXItPm1zaXhfZW50cmllcywgbnVtX21zaXgpOwotCQlpZiAoZXJyID09IDApIHsKLQkJCWFkYXB0ZXItPmZsYWdzIHw9IFFMQ05JQ19NU0lYX0VOQUJMRUQ7Ci0JCQlxbGNuaWNfc2V0X21zaXhfYml0KHBkZXYsIDEpOwotCi0JCQlpZiAoYWRhcHRlci0+cnNzX3N1cHBvcnRlZCkKLQkJCQlhZGFwdGVyLT5tYXhfc2RzX3JpbmdzID0gbnVtX21zaXg7Ci0KLQkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJ1c2luZyBtc2kteCBpbnRlcnJ1cHRzXG4iKTsKLQkJCXJldHVybjsKLQkJfQotCi0JCWlmIChlcnIgPiAwKQotCQkJcGNpX2Rpc2FibGVfbXNpeChwZGV2KTsKLQotCQkvKiBmYWxsIHRocm91Z2ggZm9yIG1zaSAqLwotCX0KLQotCWlmICh1c2VfbXNpICYmICFwY2lfZW5hYmxlX21zaShwZGV2KSkgewotCQlhZGFwdGVyLT5mbGFncyB8PSBRTENOSUNfTVNJX0VOQUJMRUQ7Ci0JCWFkYXB0ZXItPnRndF9zdGF0dXNfcmVnID0gcWxjbmljX2dldF9pb2FkZHIoYWRhcHRlciwKLQkJCQltc2lfdGd0X3N0YXR1c1thZGFwdGVyLT5haHcucGNpX2Z1bmNdKTsKLQkJZGV2X2luZm8oJnBkZXYtPmRldiwgInVzaW5nIG1zaSBpbnRlcnJ1cHRzXG4iKTsKLQkJYWRhcHRlci0+bXNpeF9lbnRyaWVzWzBdLnZlY3RvciA9IHBkZXYtPmlycTsKLQkJcmV0dXJuOwotCX0KLQogCWRldl9pbmZvKCZwZGV2LT5kZXYsICJ1c2luZyBsZWdhY3kgaW50ZXJydXB0c1xuIik7CiAJYWRhcHRlci0+bXNpeF9lbnRyaWVzWzBdLnZlY3RvciA9IHBkZXYtPmlycTsKIH0KIAogc3RhdGljIHZvaWQKK3FsY25pY19zZXR1cF9pbnRyKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgbnVtX21zaXg7CisKKwlpZiAoYWRhcHRlci0+bXNpeF9zdXBwb3J0ZWQpIHsKKwkJbnVtX21zaXggPSAobnVtX29ubGluZV9jcHVzKCkgPj0KKwkJCVFMQ05JQ19ERUZfTlVNX1NUU19ERVNDX1JJTkdTKSA/CisJCQlRTENOSUNfREVGX05VTV9TVFNfREVTQ19SSU5HUyA6CisJCQlRTENOSUNfTUlOX05VTV9SU1NfUklOR1M7CisJfSBlbHNlCisJCW51bV9tc2l4ID0gMTsKKworCWlmICghcWxjbmljX2VuYWJsZV9tc2l4KGFkYXB0ZXIsIG51bV9tc2l4KSkKKwkJcmV0dXJuOworCisJcWxjbmljX2VuYWJsZV9tc2lfbGVnYWN5KGFkYXB0ZXIpOworfQorCitzdGF0aWMgdm9pZAogcWxjbmljX3RlYXJkb3duX2ludHIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQogewogCWlmIChhZGFwdGVyLT5mbGFncyAmIFFMQ05JQ19NU0lYX0VOQUJMRUQpCkBAIC00MjksOCArNDQzLDggQEAKIHN0YXRpYyB2b2lkCiBxbGNuaWNfY2xlYW51cF9wY2lfbWFwKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlpZiAoYWRhcHRlci0+YWh3LnBjaV9iYXNlMCAhPSBOVUxMKQotCQlpb3VubWFwKGFkYXB0ZXItPmFody5wY2lfYmFzZTApOworCWlmIChhZGFwdGVyLT5haHctPnBjaV9iYXNlMCAhPSBOVUxMKQorCQlpb3VubWFwKGFkYXB0ZXItPmFody0+cGNpX2Jhc2UwKTsKIH0KIAogc3RhdGljIGludApAQCAtNDY0LDggKzQ3OCwxMCBAQAogCiAJZm9yIChpID0gMDsgaSA8IFFMQ05JQ19NQVhfUENJX0ZVTkM7IGkrKykgewogCQlwZm4gPSBwY2lfaW5mb1tpXS5pZDsKLQkJaWYgKHBmbiA+IFFMQ05JQ19NQVhfUENJX0ZVTkMpCi0JCQlyZXR1cm4gUUxfU1RBVFVTX0lOVkFMSURfUEFSQU07CisJCWlmIChwZm4gPiBRTENOSUNfTUFYX1BDSV9GVU5DKSB7CisJCQlyZXQgPSBRTF9TVEFUVVNfSU5WQUxJRF9QQVJBTTsKKwkJCWdvdG8gZXJyX2Vzd2l0Y2g7CisJCX0KIAkJYWRhcHRlci0+bnBhcnNbcGZuXS5hY3RpdmUgPSAodTgpcGNpX2luZm9baV0uYWN0aXZlOwogCQlhZGFwdGVyLT5ucGFyc1twZm5dLnR5cGUgPSAodTgpcGNpX2luZm9baV0udHlwZTsKIAkJYWRhcHRlci0+bnBhcnNbcGZuXS5waHlfcG9ydCA9ICh1OClwY2lfaW5mb1tpXS5kZWZhdWx0X3BvcnQ7CkBAIC00OTgsNyArNTE0LDcgQEAKIAl1MzIgcmVmX2NvdW50OwogCWludCBpLCByZXQgPSAxOwogCXUzMiBkYXRhID0gUUxDTklDX01HTVRfRlVOQzsKLQl2b2lkIF9faW9tZW0gKnByaXZfb3AgPSBhZGFwdGVyLT5haHcucGNpX2Jhc2UwICsgUUxDTklDX0RSVl9PUF9NT0RFOworCXZvaWQgX19pb21lbSAqcHJpdl9vcCA9IGFkYXB0ZXItPmFody0+cGNpX2Jhc2UwICsgUUxDTklDX0RSVl9PUF9NT0RFOwogCiAJLyogSWYgb3RoZXIgZHJpdmVycyBhcmUgbm90IGluIHVzZSBzZXQgdGhlaXIgcHJpdmlsZWdlIGxldmVsICovCiAJcmVmX2NvdW50ID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfQ1JCX0RSVl9BQ1RJVkUpOwpAQCAtNTEwLDE2ICs1MjYsMTYgQEAKIAkJZm9yIChpID0gMDsgaSA8IFFMQ05JQ19NQVhfUENJX0ZVTkM7IGkrKykgewogCQkJaWQgPSBpOwogCQkJaWYgKGFkYXB0ZXItPm5wYXJzW2ldLnR5cGUgIT0gUUxDTklDX1RZUEVfTklDIHx8Ci0JCQkJaWQgPT0gYWRhcHRlci0+YWh3LnBjaV9mdW5jKQorCQkJCWlkID09IGFkYXB0ZXItPmFody0+cGNpX2Z1bmMpCiAJCQkJY29udGludWU7CiAJCQlkYXRhIHw9IChxbGNuaWNfY29uZmlnX25wYXJzICYKIAkJCQkJUUxDX0RFVl9TRVRfRFJWKDB4ZiwgaWQpKTsKIAkJfQogCX0gZWxzZSB7CiAJCWRhdGEgPSByZWFkbChwcml2X29wKTsKLQkJZGF0YSA9IChkYXRhICYgflFMQ19ERVZfU0VUX0RSVigweGYsIGFkYXB0ZXItPmFody5wY2lfZnVuYykpIHwKKwkJZGF0YSA9IChkYXRhICYgflFMQ19ERVZfU0VUX0RSVigweGYsIGFkYXB0ZXItPmFody0+cGNpX2Z1bmMpKSB8CiAJCQkoUUxDX0RFVl9TRVRfRFJWKFFMQ05JQ19NR01UX0ZVTkMsCi0JCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMpKTsKKwkJCWFkYXB0ZXItPmFody0+cGNpX2Z1bmMpKTsKIAl9CiAJd3JpdGVsKGRhdGEsIHByaXZfb3ApOwogCXFsY25pY19hcGlfdW5sb2NrKGFkYXB0ZXIpOwpAQCAtNTM3LDIyICs1NTMsMjMgQEAKIAl1MzIgb3BfbW9kZSwgcHJpdl9sZXZlbDsKIAogCS8qIERldGVybWluZSBGVyBBUEkgdmVyc2lvbiAqLwotCWFkYXB0ZXItPmZ3X2hhbF92ZXJzaW9uID0gcmVhZGwoYWRhcHRlci0+YWh3LnBjaV9iYXNlMCArIFFMQ05JQ19GV19BUEkpOworCWFkYXB0ZXItPmZ3X2hhbF92ZXJzaW9uID0gcmVhZGwoYWRhcHRlci0+YWh3LT5wY2lfYmFzZTAgKworCQkJCQlRTENOSUNfRldfQVBJKTsKIAogCS8qIEZpbmQgUENJIGZ1bmN0aW9uIG51bWJlciAqLwogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChhZGFwdGVyLT5wZGV2LCBRTENOSUNfTVNJWF9UQUJMRV9PRkZTRVQsICZmdW5jKTsKLQltc2l4X2Jhc2VfYWRkciA9IGFkYXB0ZXItPmFody5wY2lfYmFzZTAgKyBRTENOSUNfTVNJWF9CQVNFOworCW1zaXhfYmFzZV9hZGRyID0gYWRhcHRlci0+YWh3LT5wY2lfYmFzZTAgKyBRTENOSUNfTVNJWF9CQVNFOwogCW1zaXhfYmFzZSA9IHJlYWRsKG1zaXhfYmFzZV9hZGRyKTsKIAlmdW5jID0gKGZ1bmMgLSBtc2l4X2Jhc2UpL1FMQ05JQ19NU0lYX1RCTF9QR1NJWkU7Ci0JYWRhcHRlci0+YWh3LnBjaV9mdW5jID0gZnVuYzsKKwlhZGFwdGVyLT5haHctPnBjaV9mdW5jID0gZnVuYzsKIAogCS8qIERldGVybWluZSBmdW5jdGlvbiBwcml2aWxlZ2UgbGV2ZWwgKi8KLQlwcml2X29wID0gYWRhcHRlci0+YWh3LnBjaV9iYXNlMCArIFFMQ05JQ19EUlZfT1BfTU9ERTsKKwlwcml2X29wID0gYWRhcHRlci0+YWh3LT5wY2lfYmFzZTAgKyBRTENOSUNfRFJWX09QX01PREU7CiAJb3BfbW9kZSA9IHJlYWRsKHByaXZfb3ApOwogCWlmIChvcF9tb2RlID09IFFMQ19ERVZfRFJWX0RFRkFVTFQpCiAJCXByaXZfbGV2ZWwgPSBRTENOSUNfTUdNVF9GVU5DOwogCWVsc2UKLQkJcHJpdl9sZXZlbCA9IFFMQ19ERVZfR0VUX0RSVihvcF9tb2RlLCBhZGFwdGVyLT5haHcucGNpX2Z1bmMpOworCQlwcml2X2xldmVsID0gUUxDX0RFVl9HRVRfRFJWKG9wX21vZGUsIGFkYXB0ZXItPmFody0+cGNpX2Z1bmMpOwogCiAJaWYgKHByaXZfbGV2ZWwgPT0gUUxDTklDX05PTl9QUklWX0ZVTkMpIHsKIAkJYWRhcHRlci0+b3BfbW9kZSA9IFFMQ05JQ19OT05fUFJJVl9GVU5DOwpAQCAtNTkxLDEzICs2MDgsMTQgQEAKIAogCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlZE1CIG1lbW9yeSBtYXBcbiIsIChpbnQpKG1lbV9sZW4+PjIwKSk7CiAKLQlhZGFwdGVyLT5haHcucGNpX2Jhc2UwID0gbWVtX3B0cjA7Ci0JYWRhcHRlci0+YWh3LnBjaV9sZW4wID0gcGNpX2xlbjA7CisJYWRhcHRlci0+YWh3LT5wY2lfYmFzZTAgPSBtZW1fcHRyMDsKKwlhZGFwdGVyLT5haHctPnBjaV9sZW4wID0gcGNpX2xlbjA7CiAKIAlxbGNuaWNfY2hlY2tfdmYoYWRhcHRlcik7CiAKLQlhZGFwdGVyLT5haHcub2NtX3dpbl9jcmIgPSBxbGNuaWNfZ2V0X2lvYWRkcihhZGFwdGVyLAotCQlRTENOSUNfUENJWF9QU19SRUcoUENJWF9PQ01fV0lORE9XX1JFRyhhZGFwdGVyLT5haHcucGNpX2Z1bmMpKSk7CisJYWRhcHRlci0+YWh3LT5vY21fd2luX2NyYiA9IHFsY25pY19nZXRfaW9hZGRyKGFkYXB0ZXIsCisJCVFMQ05JQ19QQ0lYX1BTX1JFRyhQQ0lYX09DTV9XSU5ET1dfUkVHKAorCQkJYWRhcHRlci0+YWh3LT5wY2lfZnVuYykpKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjM5LDcgKzY1Nyw3IEBACiAKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiZmlybXdhcmUgdiVkLiVkLiVkXG4iLAogCQkJZndfbWFqb3IsIGZ3X21pbm9yLCBmd19idWlsZCk7Ci0JaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gUUxDTklDX1hHQkUpIHsKKwlpZiAoYWRhcHRlci0+YWh3LT5wb3J0X3R5cGUgPT0gUUxDTklDX1hHQkUpIHsKIAkJaWYgKGFkYXB0ZXItPmZsYWdzICYgUUxDTklDX0VTV0lUQ0hfRU5BQkxFRCkgewogCQkJYWRhcHRlci0+bnVtX3J4ZCA9IERFRkFVTFRfUkNWX0RFU0NSSVBUT1JTX1ZGOwogCQkJYWRhcHRlci0+bWF4X3J4ZCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfVkY7CkBAIC02NTEsNyArNjY5LDcgQEAKIAkJYWRhcHRlci0+bnVtX2p1bWJvX3J4ZCA9IE1BWF9KVU1CT19SQ1ZfREVTQ1JJUFRPUlNfMTBHOwogCQlhZGFwdGVyLT5tYXhfanVtYm9fcnhkID0gTUFYX0pVTUJPX1JDVl9ERVNDUklQVE9SU18xMEc7CiAKLQl9IGVsc2UgaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gUUxDTklDX0dCRSkgeworCX0gZWxzZSBpZiAoYWRhcHRlci0+YWh3LT5wb3J0X3R5cGUgPT0gUUxDTklDX0dCRSkgewogCQlhZGFwdGVyLT5udW1fcnhkID0gREVGQVVMVF9SQ1ZfREVTQ1JJUFRPUlNfMUc7CiAJCWFkYXB0ZXItPm51bV9qdW1ib19yeGQgPSBNQVhfSlVNQk9fUkNWX0RFU0NSSVBUT1JTXzFHOwogCQlhZGFwdGVyLT5tYXhfanVtYm9fcnhkID0gTUFYX0pVTUJPX1JDVl9ERVNDUklQVE9SU18xRzsKQEAgLTY1OSw3ICs2NzcsNiBAQAogCX0KIAogCWFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkID0gISF1c2VfbXNpX3g7Ci0JYWRhcHRlci0+cnNzX3N1cHBvcnRlZCA9ICEhdXNlX21zaV94OwogCiAJYWRhcHRlci0+bnVtX3R4ZCA9IE1BWF9DTURfREVTQ1JJUFRPUlM7CiAKQEAgLTY3Miw3ICs2ODksNyBAQAogCWludCBlcnI7CiAJc3RydWN0IHFsY25pY19pbmZvIG5pY19pbmZvOwogCi0JZXJyID0gcWxjbmljX2dldF9uaWNfaW5mbyhhZGFwdGVyLCAmbmljX2luZm8sIGFkYXB0ZXItPmFody5wY2lfZnVuYyk7CisJZXJyID0gcWxjbmljX2dldF9uaWNfaW5mbyhhZGFwdGVyLCAmbmljX2luZm8sIGFkYXB0ZXItPmFody0+cGNpX2Z1bmMpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTcwOCw2ICs3MjUsMjIgQEAKIH0KIAogc3RhdGljIHZvaWQKK3FsY25pY192bGFuX3J4X2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgdmlkKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc2V0X2JpdCh2aWQsIGFkYXB0ZXItPnZsYW5zKTsKK30KKworc3RhdGljIHZvaWQKK3FsY25pY192bGFuX3J4X2RlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgdmlkKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlxbGNuaWNfcmVzdG9yZV9pbmRldl9hZGRyKG5ldGRldiwgTkVUREVWX0RPV04pOworCWNsZWFyX2JpdCh2aWQsIGFkYXB0ZXItPnZsYW5zKTsKK30KKworc3RhdGljIHZvaWQKIHFsY25pY19zZXRfZXN3aXRjaF9wb3J0X2ZlYXR1cmVzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKIAkJc3RydWN0IHFsY25pY19lc3dfZnVuY19jZmcgKmVzd19jZmcpCiB7CkBAIC03MzQsNyArNzY3LDcgQEAKIAlpZiAoIShhZGFwdGVyLT5mbGFncyAmIFFMQ05JQ19FU1dJVENIX0VOQUJMRUQpKQogCQlyZXR1cm4gMDsKIAotCWVzd19jZmcucGNpX2Z1bmMgPSBhZGFwdGVyLT5haHcucGNpX2Z1bmM7CisJZXN3X2NmZy5wY2lfZnVuYyA9IGFkYXB0ZXItPmFody0+cGNpX2Z1bmM7CiAJaWYgKHFsY25pY19nZXRfZXN3aXRjaF9wb3J0X2NvbmZpZyhhZGFwdGVyLCAmZXN3X2NmZykpCiAJCQlyZXR1cm4gLUVJTzsKIAlxbGNuaWNfc2V0X3ZsYW5fY29uZmlnKGFkYXB0ZXIsICZlc3dfY2ZnKTsKQEAgLTc1MCwyOCArNzgzLDI3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAl1bnNpZ25lZCBsb25nIGZlYXR1cmVzLCB2bGFuX2ZlYXR1cmVzOwogCi0JZmVhdHVyZXMgPSAoTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8CisJZmVhdHVyZXMgPSAoTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHwKIAkJCU5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9HUk8pOwogCXZsYW5fZmVhdHVyZXMgPSAoTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8Ci0JCQlORVRJRl9GX0lQVjZfQ1NVTSk7CisJCQlORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfSFdfVkxBTl9GSUxURVIpOwogCiAJaWYgKGFkYXB0ZXItPmNhcGFiaWxpdGllcyAmIFFMQ05JQ19GV19DQVBBQklMSVRZX1RTTykgewogCQlmZWF0dXJlcyB8PSAoTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYpOwogCQl2bGFuX2ZlYXR1cmVzIHw9IChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNik7CiAJfQotCWlmIChhZGFwdGVyLT5jYXBhYmlsaXRpZXMgJiBRTENOSUNfRldfQ0FQQUJJTElUWV9IV19MUk8pCisKKwlpZiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKQogCQlmZWF0dXJlcyB8PSBORVRJRl9GX0xSTzsKIAogCWlmIChlc3dfY2ZnLT5vZmZsb2FkX2ZsYWdzICYgQklUXzApIHsKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBmZWF0dXJlczsKLQkJYWRhcHRlci0+cnhfY3N1bSA9IDE7CiAJCWlmICghKGVzd19jZmctPm9mZmxvYWRfZmxhZ3MgJiBCSVRfMSkpCiAJCQluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzsKIAkJaWYgKCEoZXN3X2NmZy0+b2ZmbG9hZF9mbGFncyAmIEJJVF8yKSkKIAkJCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPNjsKIAl9IGVsc2UgewogCQluZXRkZXYtPmZlYXR1cmVzICY9IH5mZWF0dXJlczsKLQkJYWRhcHRlci0+cnhfY3N1bSA9IDA7CiAJfQogCiAJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzID0gKGZlYXR1cmVzICYgdmxhbl9mZWF0dXJlcyk7CkBAIC03OTEsMTQgKzgyMywxNCBAQAogCWlmIChhZGFwdGVyLT5mbGFncyAmIFFMQ05JQ19BREFQVEVSX0lOSVRJQUxJWkVEKQogCQlyZXR1cm4gMDsKIAotCXByaXZfb3AgPSBhZGFwdGVyLT5haHcucGNpX2Jhc2UwICsgUUxDTklDX0RSVl9PUF9NT0RFOworCXByaXZfb3AgPSBhZGFwdGVyLT5haHctPnBjaV9iYXNlMCArIFFMQ05JQ19EUlZfT1BfTU9ERTsKIAlvcF9tb2RlID0gcmVhZGwocHJpdl9vcCk7Ci0JcHJpdl9sZXZlbCA9IFFMQ19ERVZfR0VUX0RSVihvcF9tb2RlLCBhZGFwdGVyLT5haHcucGNpX2Z1bmMpOworCXByaXZfbGV2ZWwgPSBRTENfREVWX0dFVF9EUlYob3BfbW9kZSwgYWRhcHRlci0+YWh3LT5wY2lfZnVuYyk7CiAKIAlpZiAob3BfbW9kZSA9PSBRTENfREVWX0RSVl9ERUZBVUxUKQogCQlwcml2X2xldmVsID0gUUxDTklDX01HTVRfRlVOQzsKIAllbHNlCi0JCXByaXZfbGV2ZWwgPSBRTENfREVWX0dFVF9EUlYob3BfbW9kZSwgYWRhcHRlci0+YWh3LnBjaV9mdW5jKTsKKwkJcHJpdl9sZXZlbCA9IFFMQ19ERVZfR0VUX0RSVihvcF9tb2RlLCBhZGFwdGVyLT5haHctPnBjaV9mdW5jKTsKIAogCWlmIChhZGFwdGVyLT5mbGFncyAmIFFMQ05JQ19FU1dJVENIX0VOQUJMRUQpIHsKIAkJaWYgKHByaXZfbGV2ZWwgPT0gUUxDTklDX01HTVRfRlVOQykgewpAQCAtMTAzOCw3ICsxMDcwLDcgQEAKIAogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0Jc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9IGFkYXB0ZXItPnJlY3ZfY3R4OwogCiAJaWYgKGFkYXB0ZXItPmRpYWdfdGVzdCA9PSBRTENOSUNfSU5URVJSVVBUX1RFU1QpIHsKIAkJaGFuZGxlciA9IHFsY25pY190bXBfaW50cjsKQEAgLTEwNzUsNyArMTEwNyw3IEBACiAJaW50IHJpbmc7CiAJc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZzsKIAotCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKwlzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSBhZGFwdGVyLT5yZWN2X2N0eDsKIAogCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOyByaW5nKyspIHsKIAkJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1tyaW5nXTsKQEAgLTEwODMsMjAgKzExMTUsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQKLXFsY25pY19pbml0X2NvYWxlc2NlX2RlZmF1bHRzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlhZGFwdGVyLT5jb2FsLmZsYWdzID0gUUxDTklDX0lOVFJfREVGQVVMVDsKLQlhZGFwdGVyLT5jb2FsLm5vcm1hbC5kYXRhLnJ4X3RpbWVfdXMgPQotCQlRTENOSUNfREVGQVVMVF9JTlRSX0NPQUxFU0NFX1JYX1RJTUVfVVM7Ci0JYWRhcHRlci0+Y29hbC5ub3JtYWwuZGF0YS5yeF9wYWNrZXRzID0KLQkJUUxDTklDX0RFRkFVTFRfSU5UUl9DT0FMRVNDRV9SWF9QQUNLRVRTOwotCWFkYXB0ZXItPmNvYWwubm9ybWFsLmRhdGEudHhfdGltZV91cyA9Ci0JCVFMQ05JQ19ERUZBVUxUX0lOVFJfQ09BTEVTQ0VfVFhfVElNRV9VUzsKLQlhZGFwdGVyLT5jb2FsLm5vcm1hbC5kYXRhLnR4X3BhY2tldHMgPQotCQlRTENOSUNfREVGQVVMVF9JTlRSX0NPQUxFU0NFX1RYX1BBQ0tFVFM7Ci19Ci0KIHN0YXRpYyBpbnQKIF9fcWxjbmljX3VwKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKQEAgLTExMTUsMTQgKzExMzMsMTQgQEAKIAkJcmV0dXJuIC1FSU87CiAKIAlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKSB7Ci0JCXJkc19yaW5nID0gJmFkYXB0ZXItPnJlY3ZfY3R4LnJkc19yaW5nc1tyaW5nXTsKLQkJcWxjbmljX3Bvc3RfcnhfYnVmZmVycyhhZGFwdGVyLCByaW5nLCByZHNfcmluZyk7CisJCXJkc19yaW5nID0gJmFkYXB0ZXItPnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107CisJCXFsY25pY19wb3N0X3J4X2J1ZmZlcnMoYWRhcHRlciwgcmRzX3JpbmcpOwogCX0KIAogCXFsY25pY19zZXRfbXVsdGkobmV0ZGV2KTsKIAlxbGNuaWNfZndfY21kX3NldF9tdHUoYWRhcHRlciwgbmV0ZGV2LT5tdHUpOwogCi0JYWRhcHRlci0+YWh3Lmxpbmt1cCA9IDA7CisJYWRhcHRlci0+YWh3LT5saW5rdXAgPSAwOwogCiAJaWYgKGFkYXB0ZXItPm1heF9zZHNfcmluZ3MgPiAxKQogCQlxbGNuaWNfY29uZmlnX3JzcyhhZGFwdGVyLCAxKTsKQEAgLTEyMzAsOCArMTI0OCw2IEBACiAJCWdvdG8gZXJyX291dF9mcmVlX2h3OwogCX0KIAotCXFsY25pY19pbml0X2NvYWxlc2NlX2RlZmF1bHRzKGFkYXB0ZXIpOwotCiAJcWxjbmljX2NyZWF0ZV9zeXNmc19lbnRyaWVzKGFkYXB0ZXIpOwogCiAJYWRhcHRlci0+aXNfdXAgPSBRTENOSUNfQURBUFRFUl9VUF9NQUdJQzsKQEAgLTEyNzIsNyArMTI4OCw3IEBACiAJY2xlYXJfYml0KF9fUUxDTklDX0RFVl9VUCwgJmFkYXB0ZXItPnN0YXRlKTsKIAlpZiAoYWRhcHRlci0+ZGlhZ190ZXN0ID09IFFMQ05JQ19JTlRFUlJVUFRfVEVTVCkgewogCQlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Nkc19yaW5nczsgcmluZysrKSB7Ci0JCQlzZHNfcmluZyA9ICZhZGFwdGVyLT5yZWN2X2N0eC5zZHNfcmluZ3NbcmluZ107CisJCQlzZHNfcmluZyA9ICZhZGFwdGVyLT5yZWN2X2N0eC0+c2RzX3JpbmdzW3JpbmddOwogCQkJcWxjbmljX2Rpc2FibGVfaW50KHNkc19yaW5nKTsKIAkJfQogCX0KQEAgLTEyOTMsNiArMTMwOSw0OCBAQAogCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKIH0KIAorc3RhdGljIGludCBxbGNuaWNfYWxsb2NfYWRhcHRlcl9yZXNvdXJjZXMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCWludCBlcnIgPSAwOworCWFkYXB0ZXItPmFodyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBxbGNuaWNfaGFyZHdhcmVfY29udGV4dCksCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFhZGFwdGVyLT5haHcpIHsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIkZhaWxlZCB0byBhbGxvY2F0ZSByZWN2IGN0eCByZXNvdXJjZXMgZm9yIGFkYXB0ZXJcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CisJfQorCWFkYXB0ZXItPnJlY3ZfY3R4ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQpLAorCQkJCUdGUF9LRVJORUwpOworCWlmICghYWRhcHRlci0+cmVjdl9jdHgpIHsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIkZhaWxlZCB0byBhbGxvY2F0ZSByZWN2IGN0eCByZXNvdXJjZXMgZm9yIGFkYXB0ZXJcbiIpOworCQlrZnJlZShhZGFwdGVyLT5haHcpOworCQlhZGFwdGVyLT5haHcgPSBOVUxMOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CisJfQorCS8qIEluaXRpYWxpemUgaW50ZXJydXB0IGNvYWxlc2NlIHBhcmFtZXRlcnMgKi8KKwlhZGFwdGVyLT5haHctPmNvYWwuZmxhZyA9IFFMQ05JQ19JTlRSX0RFRkFVTFQ7CisJYWRhcHRlci0+YWh3LT5jb2FsLnJ4X3RpbWVfdXMgPSBRTENOSUNfREVGQVVMVF9JTlRSX0NPQUxFU0NFX1JYX1RJTUVfVVM7CisJYWRhcHRlci0+YWh3LT5jb2FsLnJ4X3BhY2tldHMgPSBRTENOSUNfREVGQVVMVF9JTlRSX0NPQUxFU0NFX1JYX1BBQ0tFVFM7CitlcnJfb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHFsY25pY19mcmVlX2FkYXB0ZXJfcmVzb3VyY2VzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlrZnJlZShhZGFwdGVyLT5yZWN2X2N0eCk7CisJYWRhcHRlci0+cmVjdl9jdHggPSBOVUxMOworCisJaWYgKGFkYXB0ZXItPmFody0+ZndfZHVtcC50bXBsX2hkcikgeworCQl2ZnJlZShhZGFwdGVyLT5haHctPmZ3X2R1bXAudG1wbF9oZHIpOworCQlhZGFwdGVyLT5haHctPmZ3X2R1bXAudG1wbF9oZHIgPSBOVUxMOworCX0KKwlrZnJlZShhZGFwdGVyLT5haHcpOworCWFkYXB0ZXItPmFodyA9IE5VTEw7Cit9CisKIGludCBxbGNuaWNfZGlhZ19hbGxvY19yZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHRlc3QpCiB7CiAJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTEzMjUsMTMgKzEzODMsMTMgQEAKIAl9CiAKIAlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKSB7Ci0JCXJkc19yaW5nID0gJmFkYXB0ZXItPnJlY3ZfY3R4LnJkc19yaW5nc1tyaW5nXTsKLQkJcWxjbmljX3Bvc3RfcnhfYnVmZmVycyhhZGFwdGVyLCByaW5nLCByZHNfcmluZyk7CisJCXJkc19yaW5nID0gJmFkYXB0ZXItPnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107CisJCXFsY25pY19wb3N0X3J4X2J1ZmZlcnMoYWRhcHRlciwgcmRzX3JpbmcpOwogCX0KIAogCWlmIChhZGFwdGVyLT5kaWFnX3Rlc3QgPT0gUUxDTklDX0lOVEVSUlVQVF9URVNUKSB7CiAJCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOyByaW5nKyspIHsKLQkJCXNkc19yaW5nID0gJmFkYXB0ZXItPnJlY3ZfY3R4LnNkc19yaW5nc1tyaW5nXTsKKwkJCXNkc19yaW5nID0gJmFkYXB0ZXItPnJlY3ZfY3R4LT5zZHNfcmluZ3NbcmluZ107CiAJCQlxbGNuaWNfZW5hYmxlX2ludChzZHNfcmluZyk7CiAJCX0KIAl9CkBAIC0xMzk5LDcgKzE0NTcsNiBAQAogCWludCBlcnI7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCi0JYWRhcHRlci0+cnhfY3N1bSA9IDE7CiAJYWRhcHRlci0+bWNfZW5hYmxlZCA9IDA7CiAJYWRhcHRlci0+bWF4X21jX2NvdW50ID0gMzg7CiAKQEAgLTE0MTAsMjYgKzE0NjcsMjQgQEAKIAogCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZxbGNuaWNfZXRodG9vbF9vcHMpOwogCi0JbmV0ZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8Ci0JCU5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9HUk8gfCBORVRJRl9GX0hXX1ZMQU5fUlgpOwotCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSAoTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8Ci0JCU5FVElGX0ZfSVBWNl9DU1VNKTsKKwluZXRkZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8CisJCU5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9SWENTVU07CiAKLQlpZiAoYWRhcHRlci0+Y2FwYWJpbGl0aWVzICYgUUxDTklDX0ZXX0NBUEFCSUxJVFlfVFNPKSB7Ci0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082KTsKLQkJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNik7Ci0JfQorCWlmIChhZGFwdGVyLT5jYXBhYmlsaXRpZXMgJiBRTENOSUNfRldfQ0FQQUJJTElUWV9UU08pCisJCW5ldGRldi0+aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzY7CisJaWYgKHBjaV91c2luZ19kYWMpCisJCW5ldGRldi0+aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogCi0JaWYgKHBjaV91c2luZ19kYWMpIHsKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7Ci0JCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7Ci0JfQorCW5ldGRldi0+dmxhbl9mZWF0dXJlcyA9IG5ldGRldi0+aHdfZmVhdHVyZXM7CiAKIAlpZiAoYWRhcHRlci0+Y2FwYWJpbGl0aWVzICYgUUxDTklDX0ZXX0NBUEFCSUxJVFlfRlZMQU5UWCkKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9IV19WTEFOX1RYKTsKLQorCQluZXRkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWDsKIAlpZiAoYWRhcHRlci0+Y2FwYWJpbGl0aWVzICYgUUxDTklDX0ZXX0NBUEFCSUxJVFlfSFdfTFJPKQotCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOworCQluZXRkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOworCisJbmV0ZGV2LT5mZWF0dXJlcyB8PSBuZXRkZXYtPmh3X2ZlYXR1cmVzIHwKKwkJTkVUSUZfRl9IV19WTEFOX1JYIHwgTkVUSUZfRl9IV19WTEFOX0ZJTFRFUjsKKwogCW5ldGRldi0+aXJxID0gYWRhcHRlci0+bXNpeF9lbnRyaWVzWzBdLnZlY3RvcjsKIAogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CkBAIC0xNDU5LDYgKzE1MTQsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAorcWxjbmljX2FsbG9jX21zaXhfZW50cmllcyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBjb3VudCkKK3sKKwlhZGFwdGVyLT5tc2l4X2VudHJpZXMgPSBrY2FsbG9jKGNvdW50LCBzaXplb2Yoc3RydWN0IG1zaXhfZW50cnkpLAorCQkJCQlHRlBfS0VSTkVMKTsKKworCWlmIChhZGFwdGVyLT5tc2l4X2VudHJpZXMpCisJCXJldHVybiAwOworCisJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiZmFpbGVkIGFsbG9jYXRpbmcgbXNpeF9lbnRyaWVzXG4iKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKwogc3RhdGljIGludCBfX2RldmluaXQKIHFsY25pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKQEAgLTE1MDEsMjMgKzE1NjksMzAgQEAKIAlhZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlhZGFwdGVyLT5uZXRkZXYgID0gbmV0ZGV2OwogCWFkYXB0ZXItPnBkZXYgICAgPSBwZGV2OworCisJaWYgKHFsY25pY19hbGxvY19hZGFwdGVyX3Jlc291cmNlcyhhZGFwdGVyKSkKKwkJZ290byBlcnJfb3V0X2ZyZWVfbmV0ZGV2OworCiAJYWRhcHRlci0+ZGV2X3JzdF90aW1lID0gamlmZmllczsKLQogCXJldmlzaW9uX2lkID0gcGRldi0+cmV2aXNpb247Ci0JYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkID0gcmV2aXNpb25faWQ7CisJYWRhcHRlci0+YWh3LT5yZXZpc2lvbl9pZCA9IHJldmlzaW9uX2lkOwogCi0Jcndsb2NrX2luaXQoJmFkYXB0ZXItPmFody5jcmJfbG9jayk7Ci0JbXV0ZXhfaW5pdCgmYWRhcHRlci0+YWh3Lm1lbV9sb2NrKTsKKwlyd2xvY2tfaW5pdCgmYWRhcHRlci0+YWh3LT5jcmJfbG9jayk7CisJbXV0ZXhfaW5pdCgmYWRhcHRlci0+YWh3LT5tZW1fbG9jayk7CiAKIAlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+dHhfY2xlYW5fbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmFkYXB0ZXItPm1hY19saXN0KTsKIAogCWVyciA9IHFsY25pY19zZXR1cF9wY2lfbWFwKGFkYXB0ZXIpOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9mcmVlX25ldGRldjsKKwkJZ290byBlcnJfb3V0X2ZyZWVfaHc7CiAKIAkvKiBUaGlzIHdpbGwgYmUgcmVzZXQgZm9yIG1lenogY2FyZHMgICovCi0JYWRhcHRlci0+cG9ydG51bSA9IGFkYXB0ZXItPmFody5wY2lfZnVuYzsKKwlhZGFwdGVyLT5wb3J0bnVtID0gYWRhcHRlci0+YWh3LT5wY2lfZnVuYzsKKworCS8qIEdldCBGVyBkdW1wIHRlbXBsYXRlIGFuZCBzdG9yZSBpdCAqLworCWlmIChhZGFwdGVyLT5vcF9tb2RlICE9IFFMQ05JQ19OT05fUFJJVl9GVU5DKQorCQlxbGNuaWNfZndfY21kX2dldF9taW5pZHVtcF90ZW1wKGFkYXB0ZXIpOwogCiAJZXJyID0gcWxjbmljX2dldF9ib2FyZF9pbmZvKGFkYXB0ZXIpOwogCWlmIChlcnIpIHsKQEAgLTE1NDUsMTEgKzE2MjAsMTUgQEAKIAogCQlwcl9pbmZvKCIlczogJXMgQm9hcmQgQ2hpcCByZXYgMHgleFxuIiwKIAkJCQltb2R1bGVfbmFtZShUSElTX01PRFVMRSksCi0JCQkJYnJkX25hbWUsIGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCk7CisJCQkJYnJkX25hbWUsIGFkYXB0ZXItPmFody0+cmV2aXNpb25faWQpOwogCX0KIAogCXFsY25pY19jbGVhcl9zdGF0cyhhZGFwdGVyKTsKIAorCWVyciA9IHFsY25pY19hbGxvY19tc2l4X2VudHJpZXMoYWRhcHRlciwgYWRhcHRlci0+bWF4X3J4X3F1ZXMpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9kZWNyX3JlZjsKKwogCXFsY25pY19zZXR1cF9pbnRyKGFkYXB0ZXIpOwogCiAJZXJyID0gcWxjbmljX3NldHVwX25ldGRldihhZGFwdGVyLCBuZXRkZXYsIHBjaV91c2luZ19kYWMpOwpAQCAtMTU2MCw3ICsxNjM5LDcgQEAKIAogCXFsY25pY19zY2hlZHVsZV93b3JrKGFkYXB0ZXIsIHFsY25pY19md19wb2xsX3dvcmssIEZXX1BPTExfREVMQVkpOwogCi0Jc3dpdGNoIChhZGFwdGVyLT5haHcucG9ydF90eXBlKSB7CisJc3dpdGNoIChhZGFwdGVyLT5haHctPnBvcnRfdHlwZSkgewogCWNhc2UgUUxDTklDX0dCRToKIAkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIiVzOiBHYkUgcG9ydCBpbml0aWFsaXplZFxuIiwKIAkJCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOwpAQCAtMTU3OCw2ICsxNjU3LDcgQEAKIAogZXJyX291dF9kaXNhYmxlX21zaToKIAlxbGNuaWNfdGVhcmRvd25faW50cihhZGFwdGVyKTsKKwlrZnJlZShhZGFwdGVyLT5tc2l4X2VudHJpZXMpOwogCiBlcnJfb3V0X2RlY3JfcmVmOgogCXFsY25pY19jbHJfYWxsX2Rydl9zdGF0ZShhZGFwdGVyLCAwKTsKQEAgLTE1ODUsNiArMTY2NSw5IEBACiBlcnJfb3V0X2lvdW5tYXA6CiAJcWxjbmljX2NsZWFudXBfcGNpX21hcChhZGFwdGVyKTsKIAorZXJyX291dF9mcmVlX2h3OgorCXFsY25pY19mcmVlX2FkYXB0ZXJfcmVzb3VyY2VzKGFkYXB0ZXIpOworCiBlcnJfb3V0X2ZyZWVfbmV0ZGV2OgogCWZyZWVfbmV0ZGV2KG5ldGRldik7CiAKQEAgLTE2MjYsNiArMTcwOSw3IEBACiAJcWxjbmljX2ZyZWVfbGJfZmlsdGVyc19tZW0oYWRhcHRlcik7CiAKIAlxbGNuaWNfdGVhcmRvd25faW50cihhZGFwdGVyKTsKKwlrZnJlZShhZGFwdGVyLT5tc2l4X2VudHJpZXMpOwogCiAJcWxjbmljX3JlbW92ZV9kaWFnX2VudHJpZXMoYWRhcHRlcik7CiAKQEAgLTE2MzgsNiArMTcyMiw3IEBACiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAorCXFsY25pY19mcmVlX2FkYXB0ZXJfcmVzb3VyY2VzKGFkYXB0ZXIpOwogCWZyZWVfbmV0ZGV2KG5ldGRldik7CiB9CiBzdGF0aWMgaW50IF9fcWxjbmljX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQpAQCAtMTgxOSw2ICsxOTA0LDcgQEAKIAl2bGFuX3JlcS0+dmxhbl9pZCA9IHZsYW5faWQ7CiAKIAl0eF9yaW5nLT5wcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCB0eF9yaW5nLT5udW1fZGVzYyk7CisJc21wX21iKCk7CiB9CiAKICNkZWZpbmUgUUxDTklDX01BQ19IQVNIKE1BQylcCkBAIC0xODc5LDU4ICsxOTY1LDEyMiBAQAogCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5tYWNfbGVhcm5fbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkCi1xbGNuaWNfdHNvX2NoZWNrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0JCXN0cnVjdCBxbGNuaWNfaG9zdF90eF9yaW5nICp0eF9yaW5nLAorc3RhdGljIGludAorcWxjbmljX3R4X3BrdChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXN0cnVjdCBjbWRfZGVzY190eXBlMCAqZmlyc3RfZGVzYywKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQl1OCBvcGNvZGUgPSBUWF9FVEhFUl9QS1Q7Ci0JX19iZTE2IHByb3RvY29sID0gc2tiLT5wcm90b2NvbDsKLQl1MTYgZmxhZ3MgPSAwOwotCWludCBjb3BpZWQsIG9mZnNldCwgY29weV9sZW4sIGhkcl9sZW4gPSAwLCB0c28gPSAwOworCXU4IG9wY29kZSA9IDAsIGhkcl9sZW4gPSAwOworCXUxNiBmbGFncyA9IDAsIHZsYW5fdGNpID0gMDsKKwlpbnQgY29waWVkLCBvZmZzZXQsIGNvcHlfbGVuOwogCXN0cnVjdCBjbWRfZGVzY190eXBlMCAqaHdkZXNjOwogCXN0cnVjdCB2bGFuX2V0aGhkciAqdmg7Ci0Jc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgcWxjbmljX2hvc3RfdHhfcmluZyAqdHhfcmluZyA9IGFkYXB0ZXItPnR4X3Jpbmc7CisJdTE2IHByb3RvY29sID0gbnRvaHMoc2tiLT5wcm90b2NvbCk7CiAJdTMyIHByb2R1Y2VyID0gdHhfcmluZy0+cHJvZHVjZXI7Ci0JX19sZTE2IHZsYW5fb29iID0gZmlyc3RfZGVzYy0+ZmxhZ3Nfb3Bjb2RlICYKLQkJCQljcHVfdG9fbGUxNihGTEFHU19WTEFOX09PQik7CisKKwlpZiAocHJvdG9jb2wgPT0gRVRIX1BfODAyMVEpIHsKKwkJdmggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopc2tiLT5kYXRhOworCQlmbGFncyA9IEZMQUdTX1ZMQU5fVEFHR0VEOworCQl2bGFuX3RjaSA9IHZoLT5oX3ZsYW5fVENJOworCX0gZWxzZSBpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7CisJCWZsYWdzID0gRkxBR1NfVkxBTl9PT0I7CisJCXZsYW5fdGNpID0gdmxhbl90eF90YWdfZ2V0KHNrYik7CisJfQorCWlmICh1bmxpa2VseShhZGFwdGVyLT5wdmlkKSkgeworCQlpZiAodmxhbl90Y2kgJiYgIShhZGFwdGVyLT5mbGFncyAmIFFMQ05JQ19UQUdHSU5HX0VOQUJMRUQpKQorCQkJcmV0dXJuIC1FSU87CisJCWlmICh2bGFuX3RjaSAmJiAoYWRhcHRlci0+ZmxhZ3MgJiBRTENOSUNfVEFHR0lOR19FTkFCTEVEKSkKKwkJCWdvdG8gc2V0X2ZsYWdzOworCisJCWZsYWdzID0gRkxBR1NfVkxBTl9PT0I7CisJCXZsYW5fdGNpID0gYWRhcHRlci0+cHZpZDsKKwl9CitzZXRfZmxhZ3M6CisJcWxjbmljX3NldF90eF92bGFuX3RjaShmaXJzdF9kZXNjLCB2bGFuX3RjaSk7CisJcWxjbmljX3NldF90eF9mbGFnc19vcGNvZGUoZmlyc3RfZGVzYywgZmxhZ3MsIG9wY29kZSk7CiAKIAlpZiAoKihza2ItPmRhdGEpICYgQklUXzApIHsKIAkJZmxhZ3MgfD0gQklUXzA7CiAJCW1lbWNweSgmZmlyc3RfZGVzYy0+ZXRoX2FkZHIsIHNrYi0+ZGF0YSwgRVRIX0FMRU4pOwogCX0KLQotCWlmICgobmV0ZGV2LT5mZWF0dXJlcyAmIChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNikpICYmCisJb3Bjb2RlID0gVFhfRVRIRVJfUEtUOworCWlmICgoYWRhcHRlci0+bmV0ZGV2LT5mZWF0dXJlcyAmIChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNikpICYmCiAJCQlza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplID4gMCkgewogCiAJCWhkcl9sZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgdGNwX2hkcmxlbihza2IpOwogCiAJCWZpcnN0X2Rlc2MtPm1zcyA9IGNwdV90b19sZTE2KHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUpOwogCQlmaXJzdF9kZXNjLT50b3RhbF9oZHJfbGVuZ3RoID0gaGRyX2xlbjsKLQkJaWYgKHZsYW5fb29iKSB7CisKKwkJb3Bjb2RlID0gKHByb3RvY29sID09IEVUSF9QX0lQVjYpID8gVFhfVENQX0xTTzYgOiBUWF9UQ1BfTFNPOworCisJCS8qIEZvciBMU08sIHdlIG5lZWQgdG8gY29weSB0aGUgTUFDL0lQL1RDUCBoZWFkZXJzIGludG8KKwkJKiB0aGUgZGVzY3JpcHRvciByaW5nICovCisJCWNvcGllZCA9IDA7CisJCW9mZnNldCA9IDI7CisKKwkJaWYgKGZsYWdzICYgRkxBR1NfVkxBTl9PT0IpIHsKIAkJCWZpcnN0X2Rlc2MtPnRvdGFsX2hkcl9sZW5ndGggKz0gVkxBTl9ITEVOOwogCQkJZmlyc3RfZGVzYy0+dGNwX2hkcl9vZmZzZXQgPSBWTEFOX0hMRU47CiAJCQlmaXJzdF9kZXNjLT5pcF9oZHJfb2Zmc2V0ID0gVkxBTl9ITEVOOwogCQkJLyogT25seSBpbiBjYXNlIG9mIFRTTyBvbiB2bGFuIGRldmljZSAqLwogCQkJZmxhZ3MgfD0gRkxBR1NfVkxBTl9UQUdHRUQ7CisKKwkJCS8qIENyZWF0ZSBhIFRTTyB2bGFuIGhlYWRlciB0ZW1wbGF0ZSBmb3IgZmlybXdhcmUgKi8KKworCQkJaHdkZXNjID0gJnR4X3JpbmctPmRlc2NfaGVhZFtwcm9kdWNlcl07CisJCQl0eF9yaW5nLT5jbWRfYnVmX2Fycltwcm9kdWNlcl0uc2tiID0gTlVMTDsKKworCQkJY29weV9sZW4gPSBtaW4oKGludClzaXplb2Yoc3RydWN0IGNtZF9kZXNjX3R5cGUwKSAtCisJCQkJb2Zmc2V0LCBoZHJfbGVuICsgVkxBTl9ITEVOKTsKKworCQkJdmggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopKChjaGFyICopIGh3ZGVzYyArIDIpOworCQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIHZoLCAxMik7CisJCQl2aC0+aF92bGFuX3Byb3RvID0gaHRvbnMoRVRIX1BfODAyMVEpOworCQkJdmgtPmhfdmxhbl9UQ0kgPSBodG9ucyh2bGFuX3RjaSk7CisKKwkJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KHNrYiwgMTIsCisJCQkJKGNoYXIgKil2aCArIDE2LCBjb3B5X2xlbiAtIDE2KTsKKworCQkJY29waWVkID0gY29weV9sZW4gLSBWTEFOX0hMRU47CisJCQlvZmZzZXQgPSAwOworCisJCQlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCB0eF9yaW5nLT5udW1fZGVzYyk7CiAJCX0KIAotCQlvcGNvZGUgPSAocHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfSVBWNikpID8KLQkJCQlUWF9UQ1BfTFNPNiA6IFRYX1RDUF9MU087Ci0JCXRzbyA9IDE7CisJCXdoaWxlIChjb3BpZWQgPCBoZHJfbGVuKSB7CisKKwkJCWNvcHlfbGVuID0gbWluKChpbnQpc2l6ZW9mKHN0cnVjdCBjbWRfZGVzY190eXBlMCkgLQorCQkJCW9mZnNldCwgKGhkcl9sZW4gLSBjb3BpZWQpKTsKKworCQkJaHdkZXNjID0gJnR4X3JpbmctPmRlc2NfaGVhZFtwcm9kdWNlcl07CisJCQl0eF9yaW5nLT5jbWRfYnVmX2Fycltwcm9kdWNlcl0uc2tiID0gTlVMTDsKKworCQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoc2tiLCBjb3BpZWQsCisJCQkJIChjaGFyICopIGh3ZGVzYyArIG9mZnNldCwgY29weV9sZW4pOworCisJCQljb3BpZWQgKz0gY29weV9sZW47CisJCQlvZmZzZXQgPSAwOworCisJCQlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCB0eF9yaW5nLT5udW1fZGVzYyk7CisJCX0KKworCQl0eF9yaW5nLT5wcm9kdWNlciA9IHByb2R1Y2VyOworCQlzbXBfbWIoKTsKKwkJYWRhcHRlci0+c3RhdHMubHNvX2ZyYW1lcysrOwogCiAJfSBlbHNlIGlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CiAJCXU4IGw0cHJvdG87CiAKLQkJaWYgKHByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX0lQKSkgeworCQlpZiAocHJvdG9jb2wgPT0gRVRIX1BfSVApIHsKIAkJCWw0cHJvdG8gPSBpcF9oZHIoc2tiKS0+cHJvdG9jb2w7CiAKIAkJCWlmIChsNHByb3RvID09IElQUFJPVE9fVENQKQogCQkJCW9wY29kZSA9IFRYX1RDUF9QS1Q7CiAJCQllbHNlIGlmIChsNHByb3RvID09IElQUFJPVE9fVURQKQogCQkJCW9wY29kZSA9IFRYX1VEUF9QS1Q7Ci0JCX0gZWxzZSBpZiAocHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfSVBWNikpIHsKKwkJfSBlbHNlIGlmIChwcm90b2NvbCA9PSBFVEhfUF9JUFY2KSB7CiAJCQlsNHByb3RvID0gaXB2Nl9oZHIoc2tiKS0+bmV4dGhkcjsKIAogCQkJaWYgKGw0cHJvdG8gPT0gSVBQUk9UT19UQ1ApCkBAIC0xOTM5LDYzICsyMDg5LDExIEBACiAJCQkJb3Bjb2RlID0gVFhfVURQVjZfUEtUOwogCQl9CiAJfQotCiAJZmlyc3RfZGVzYy0+dGNwX2hkcl9vZmZzZXQgKz0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTsKIAlmaXJzdF9kZXNjLT5pcF9oZHJfb2Zmc2V0ICs9IHNrYl9uZXR3b3JrX29mZnNldChza2IpOwogCXFsY25pY19zZXRfdHhfZmxhZ3Nfb3Bjb2RlKGZpcnN0X2Rlc2MsIGZsYWdzLCBvcGNvZGUpOwogCi0JaWYgKCF0c28pCi0JCXJldHVybjsKLQotCS8qIEZvciBMU08sIHdlIG5lZWQgdG8gY29weSB0aGUgTUFDL0lQL1RDUCBoZWFkZXJzIGludG8KLQkgKiB0aGUgZGVzY3JpcHRvciByaW5nCi0JICovCi0JY29waWVkID0gMDsKLQlvZmZzZXQgPSAyOwotCi0JaWYgKHZsYW5fb29iKSB7Ci0JCS8qIENyZWF0ZSBhIFRTTyB2bGFuIGhlYWRlciB0ZW1wbGF0ZSBmb3IgZmlybXdhcmUgKi8KLQotCQlod2Rlc2MgPSAmdHhfcmluZy0+ZGVzY19oZWFkW3Byb2R1Y2VyXTsKLQkJdHhfcmluZy0+Y21kX2J1Zl9hcnJbcHJvZHVjZXJdLnNrYiA9IE5VTEw7Ci0KLQkJY29weV9sZW4gPSBtaW4oKGludClzaXplb2Yoc3RydWN0IGNtZF9kZXNjX3R5cGUwKSAtIG9mZnNldCwKLQkJCQloZHJfbGVuICsgVkxBTl9ITEVOKTsKLQotCQl2aCA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKikoKGNoYXIgKilod2Rlc2MgKyAyKTsKLQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIHZoLCAxMik7Ci0JCXZoLT5oX3ZsYW5fcHJvdG8gPSBodG9ucyhFVEhfUF84MDIxUSk7Ci0JCXZoLT5oX3ZsYW5fVENJID0gKF9fYmUxNilzd2FiMTYoKHUxNilmaXJzdF9kZXNjLT52bGFuX1RDSSk7Ci0KLQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoc2tiLCAxMiwKLQkJCQkoY2hhciAqKXZoICsgMTYsIGNvcHlfbGVuIC0gMTYpOwotCi0JCWNvcGllZCA9IGNvcHlfbGVuIC0gVkxBTl9ITEVOOwotCQlvZmZzZXQgPSAwOwotCi0JCXByb2R1Y2VyID0gZ2V0X25leHRfaW5kZXgocHJvZHVjZXIsIHR4X3JpbmctPm51bV9kZXNjKTsKLQl9Ci0KLQl3aGlsZSAoY29waWVkIDwgaGRyX2xlbikgewotCi0JCWNvcHlfbGVuID0gbWluKChpbnQpc2l6ZW9mKHN0cnVjdCBjbWRfZGVzY190eXBlMCkgLSBvZmZzZXQsCi0JCQkJKGhkcl9sZW4gLSBjb3BpZWQpKTsKLQotCQlod2Rlc2MgPSAmdHhfcmluZy0+ZGVzY19oZWFkW3Byb2R1Y2VyXTsKLQkJdHhfcmluZy0+Y21kX2J1Zl9hcnJbcHJvZHVjZXJdLnNrYiA9IE5VTEw7Ci0KLQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoc2tiLCBjb3BpZWQsCi0JCQkJIChjaGFyICopaHdkZXNjICsgb2Zmc2V0LCBjb3B5X2xlbik7Ci0KLQkJY29waWVkICs9IGNvcHlfbGVuOwotCQlvZmZzZXQgPSAwOwotCi0JCXByb2R1Y2VyID0gZ2V0X25leHRfaW5kZXgocHJvZHVjZXIsIHR4X3JpbmctPm51bV9kZXNjKTsKLQl9Ci0KLQl0eF9yaW5nLT5wcm9kdWNlciA9IHByb2R1Y2VyOwotCWJhcnJpZXIoKTsKLQlhZGFwdGVyLT5zdGF0cy5sc29fZnJhbWVzKys7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTIwNDYsMzkgKzIxNDQsMjEgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotc3RhdGljIGludAotcWxjbmljX2NoZWNrX3R4X3RhZ2dpbmcoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLAotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCXN0cnVjdCBjbWRfZGVzY190eXBlMCAqZmlyc3RfZGVzYykKK3N0YXRpYyB2b2lkCitxbGNuaWNfdW5tYXBfYnVmZmVycyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCXN0cnVjdCBxbGNuaWNfY21kX2J1ZmZlciAqcGJ1ZikKIHsKLQl1OCBvcGNvZGUgPSAwOwotCXUxNiBmbGFncyA9IDA7Ci0JX19iZTE2IHByb3RvY29sID0gc2tiLT5wcm90b2NvbDsKLQlzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZoOworCXN0cnVjdCBxbGNuaWNfc2tiX2ZyYWcgKm5mID0gJnBidWYtPmZyYWdfYXJyYXlbMF07CisJaW50IG5yX2ZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKwlpbnQgaTsKIAotCWlmIChwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF84MDIxUSkpIHsKLQkJdmggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopc2tiLT5kYXRhOwotCQlwcm90b2NvbCA9IHZoLT5oX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvOwotCQlmbGFncyA9IEZMQUdTX1ZMQU5fVEFHR0VEOwotCQlxbGNuaWNfc2V0X3R4X3ZsYW5fdGNpKGZpcnN0X2Rlc2MsIG50b2hzKHZoLT5oX3ZsYW5fVENJKSk7Ci0JfSBlbHNlIGlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKLQkJZmxhZ3MgPSBGTEFHU19WTEFOX09PQjsKLQkJcWxjbmljX3NldF90eF92bGFuX3RjaShmaXJzdF9kZXNjLCB2bGFuX3R4X3RhZ19nZXQoc2tiKSk7CisJZm9yIChpID0gMDsgaSA8IG5yX2ZyYWdzOyBpKyspIHsKKwkJbmYgPSAmcGJ1Zi0+ZnJhZ19hcnJheVtpKzFdOworCQlwY2lfdW5tYXBfcGFnZShwZGV2LCBuZi0+ZG1hLCBuZi0+bGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAl9Ci0JaWYgKHVubGlrZWx5KGFkYXB0ZXItPnB2aWQpKSB7Ci0JCWlmIChmaXJzdF9kZXNjLT52bGFuX1RDSSAmJgotCQkJCSEoYWRhcHRlci0+ZmxhZ3MgJiBRTENOSUNfVEFHR0lOR19FTkFCTEVEKSkKLQkJCXJldHVybiAtRUlPOwotCQlpZiAoZmlyc3RfZGVzYy0+dmxhbl9UQ0kgJiYKLQkJCQkoYWRhcHRlci0+ZmxhZ3MgJiBRTENOSUNfVEFHR0lOR19FTkFCTEVEKSkKLQkJCWdvdG8gc2V0X2ZsYWdzOwogCi0JCWZsYWdzID0gRkxBR1NfVkxBTl9PT0I7Ci0JCXFsY25pY19zZXRfdHhfdmxhbl90Y2koZmlyc3RfZGVzYywgYWRhcHRlci0+cHZpZCk7Ci0JfQotc2V0X2ZsYWdzOgotCXFsY25pY19zZXRfdHhfZmxhZ3Nfb3Bjb2RlKGZpcnN0X2Rlc2MsIGZsYWdzLCBvcGNvZGUpOwotCXJldHVybiAwOworCW5mID0gJnBidWYtPmZyYWdfYXJyYXlbMF07CisJcGNpX3VubWFwX3NpbmdsZShwZGV2LCBuZi0+ZG1hLCBza2JfaGVhZGxlbihza2IpLCBQQ0lfRE1BX1RPREVWSUNFKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCkBAIC0yMTAzLDcgKzIxODMsNyBAQAogCWludCBpLCBrOwogCiAJdTMyIHByb2R1Y2VyOwotCWludCBmcmFnX2NvdW50LCBub19vZl9kZXNjOworCWludCBmcmFnX2NvdW50OwogCXUzMiBudW1fdHhkID0gdHhfcmluZy0+bnVtX2Rlc2M7CiAKIAlpZiAoIXRlc3RfYml0KF9fUUxDTklDX0RFVl9VUCwgJmFkYXB0ZXItPnN0YXRlKSkgewpAQCAtMjEzMywxMiArMjIxMyw4IEBACiAJCWZyYWdfY291bnQgPSAxICsgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKIAl9CiAKLQkvKiA0IGZyYWdtZW50cyBwZXIgY21kIGRlcyAqLwotCW5vX29mX2Rlc2MgPSAoZnJhZ19jb3VudCArIDMpID4+IDI7Ci0KIAlpZiAodW5saWtlbHkocWxjbmljX3R4X2F2YWlsKHR4X3JpbmcpIDw9IFRYX1NUT1BfVEhSRVNIKSkgewogCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7Ci0JCXNtcF9tYigpOwogCQlpZiAocWxjbmljX3R4X2F2YWlsKHR4X3JpbmcpID4gVFhfU1RPUF9USFJFU0gpCiAJCQluZXRpZl9zdGFydF9xdWV1ZShuZXRkZXYpOwogCQllbHNlIHsKQEAgLTIxNTUsOSArMjIzMSw2IEBACiAJZmlyc3RfZGVzYyA9IGh3ZGVzYyA9ICZ0eF9yaW5nLT5kZXNjX2hlYWRbcHJvZHVjZXJdOwogCXFsY25pY19jbGVhcl9jbWRkZXNjKCh1NjQgKilod2Rlc2MpOwogCi0JaWYgKHFsY25pY19jaGVja190eF90YWdnaW5nKGFkYXB0ZXIsIHNrYiwgZmlyc3RfZGVzYykpCi0JCWdvdG8gZHJvcF9wYWNrZXQ7Ci0KIAlpZiAocWxjbmljX21hcF90eF9za2IocGRldiwgc2tiLCBwYnVmKSkgewogCQlhZGFwdGVyLT5zdGF0cy50eF9kbWFfbWFwX2Vycm9yKys7CiAJCWdvdG8gZHJvcF9wYWNrZXQ7CkBAIC0yMjAxLDggKzIyNzQsMTAgQEAKIAl9CiAKIAl0eF9yaW5nLT5wcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCBudW1fdHhkKTsKKwlzbXBfbWIoKTsKIAotCXFsY25pY190c29fY2hlY2sobmV0ZGV2LCB0eF9yaW5nLCBmaXJzdF9kZXNjLCBza2IpOworCWlmICh1bmxpa2VseShxbGNuaWNfdHhfcGt0KGFkYXB0ZXIsIGZpcnN0X2Rlc2MsIHNrYikpKQorCQlnb3RvIHVud2luZF9idWZmOwogCiAJaWYgKHFsY25pY19tYWNfbGVhcm4pCiAJCXFsY25pY19zZW5kX2ZpbHRlcihhZGFwdGVyLCB0eF9yaW5nLCBmaXJzdF9kZXNjLCBza2IpOwpAQCAtMjIxNCw2ICsyMjg5LDggQEAKIAogCXJldHVybiBORVRERVZfVFhfT0s7CiAKK3Vud2luZF9idWZmOgorCXFsY25pY191bm1hcF9idWZmZXJzKHBkZXYsIHNrYiwgcGJ1Zik7CiBkcm9wX3BhY2tldDoKIAlhZGFwdGVyLT5zdGF0cy50eGRyb3BwZWQrKzsKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwpAQCAtMjI2MCwxNiArMjMzNywxNiBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAKLQlpZiAoYWRhcHRlci0+YWh3Lmxpbmt1cCAmJiAhbGlua3VwKSB7CisJaWYgKGFkYXB0ZXItPmFody0+bGlua3VwICYmICFsaW5rdXApIHsKIAkJbmV0ZGV2X2luZm8obmV0ZGV2LCAiTklDIExpbmsgaXMgZG93blxuIik7Ci0JCWFkYXB0ZXItPmFody5saW5rdXAgPSAwOworCQlhZGFwdGVyLT5haHctPmxpbmt1cCA9IDA7CiAJCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAJCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiAJCX0KLQl9IGVsc2UgaWYgKCFhZGFwdGVyLT5haHcubGlua3VwICYmIGxpbmt1cCkgeworCX0gZWxzZSBpZiAoIWFkYXB0ZXItPmFody0+bGlua3VwICYmIGxpbmt1cCkgewogCQluZXRkZXZfaW5mbyhuZXRkZXYsICJOSUMgTGluayBpcyB1cFxuIik7Ci0JCWFkYXB0ZXItPmFody5saW5rdXAgPSAxOworCQlhZGFwdGVyLT5haHctPmxpbmt1cCA9IDE7CiAJCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKIAkJCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKIAkJCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKQEAgLTI1MDUsNyArMjU4Miw3IEBACiAJaW50IHJpbmc7CiAJc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZzsKIAlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKwlzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSBhZGFwdGVyLT5yZWN2X2N0eDsKIAogCWRpc2FibGVfaXJxKGFkYXB0ZXItPmlycSk7CiAJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7IHJpbmcrKykgewpAQCAtMjc1Niw2ICsyODMzLDggQEAKIAkJCXNldF9iaXQoX19RTENOSUNfU1RBUlRfRlcsICZhZGFwdGVyLT5zdGF0ZSk7CiAJCQlRTENEQihhZGFwdGVyLCBEUlYsICJSZXN0YXJ0aW5nIGZ3XG4iKTsKIAkJCXFsY25pY19pZGNfZGVidWdfaW5mbyhhZGFwdGVyLCAwKTsKKwkJCVFMQ0RCKGFkYXB0ZXIsIERSViwgIlRha2UgRlcgZHVtcFxuIik7CisJCQlxbGNuaWNfZHVtcF9mdyhhZGFwdGVyKTsKIAkJfQogCiAJCXFsY25pY19hcGlfdW5sb2NrKGFkYXB0ZXIpOwpAQCAtMjg1NCw3ICsyOTMzLDcgQEAKIH0KIAogLypUcmFuc2l0IHRvIFJFU0VUIHN0YXRlIGZyb20gUkVBRFkgc3RhdGUgb25seSAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIHFsY25pY19kZXZfcmVxdWVzdF9yZXNldChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJdTMyIHN0YXRlOwpAQCAtMzI2Niw2ICszMzQ1LDU2IEBACiAJLnN0b3JlID0gcWxjbmljX3N0b3JlX2RpYWdfbW9kZSwKIH07CiAKK2ludCBxbGNuaWNfdmFsaWRhdGVfbWF4X3JzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1OCBtYXhfaHcsIHU4IHZhbCkKK3sKKwlpZiAoIXVzZV9tc2lfeCAmJiAhdXNlX21zaSkgeworCQluZXRkZXZfaW5mbyhuZXRkZXYsICJubyBtc2l4IG9yIG1zaSBzdXBwb3J0LCBoZW5jZSBubyByc3NcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoKHZhbCA+IG1heF9odykgfHwgKHZhbCA8ICAyKSB8fCAhaXNfcG93ZXJfb2ZfMih2YWwpKSB7CisJCW5ldGRldl9pbmZvKG5ldGRldiwgInJzc19yaW5nIHZhbGlkIHJhbmdlIFsyIC0gJXhdIGluICIKKwkJCSIgcG93ZXJzIG9mIDJcbiIsIG1heF9odyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKKworfQorCitpbnQgcWxjbmljX3NldF9tYXhfcnNzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdTggZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCWludCBlcnIgPSAwOworCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoX19RTENOSUNfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQorCQlyZXR1cm4gLUVCVVNZOworCisJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCV9fcWxjbmljX2Rvd24oYWRhcHRlciwgbmV0ZGV2KTsKKwlxbGNuaWNfZGV0YWNoKGFkYXB0ZXIpOworCXFsY25pY190ZWFyZG93bl9pbnRyKGFkYXB0ZXIpOworCisJaWYgKHFsY25pY19lbmFibGVfbXNpeChhZGFwdGVyLCBkYXRhKSkgeworCQluZXRkZXZfaW5mbyhuZXRkZXYsICJmYWlsZWQgc2V0dGluZyBtYXhfcnNzOyByc3MgZGlzYWJsZWRcbiIpOworCQlxbGNuaWNfZW5hYmxlX21zaV9sZWdhY3koYWRhcHRlcik7CisJfQorCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQllcnIgPSBxbGNuaWNfYXR0YWNoKGFkYXB0ZXIpOworCQlpZiAoZXJyKQorCQkJZ290byBkb25lOworCQllcnIgPSBfX3FsY25pY191cChhZGFwdGVyLCBuZXRkZXYpOworCQlpZiAoZXJyKQorCQkJZ290byBkb25lOworCQlxbGNuaWNfcmVzdG9yZV9pbmRldl9hZGRyKG5ldGRldiwgTkVUREVWX1VQKTsKKwl9CisgZG9uZToKKwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CisJY2xlYXJfYml0KF9fUUxDTklDX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50CiBxbGNuaWNfc3lzZnNfdmFsaWRhdGVfY3JiKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKIAkJbG9mZl90IG9mZnNldCwgc2l6ZV90IHNpemUpCkBAIC0zMzk2LDcgKzM1MjUsNiBAQAogCXJldHVybiBzaXplOwogfQogCi0KIHN0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBiaW5fYXR0cl9jcmIgPSB7CiAJLmF0dHIgPSB7Lm5hbWUgPSAiY3JiIiwgLm1vZGUgPSAoU19JUlVHTyB8IFNfSVdVU1IpfSwKIAkuc2l6ZSA9IDAsCkBAIC0zNTE1LDcgKzM2NDMsNyBAQAogCXU4IHBjaV9mdW5jOwogCWludCBpOwogCi0Jb3BfbW9kZSA9IHJlYWRsKGFkYXB0ZXItPmFody5wY2lfYmFzZTAgKyBRTENOSUNfRFJWX09QX01PREUpOworCW9wX21vZGUgPSByZWFkbChhZGFwdGVyLT5haHctPnBjaV9iYXNlMCArIFFMQ05JQ19EUlZfT1BfTU9ERSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogCQlwY2lfZnVuYyA9IGVzd19jZmdbaV0ucGNpX2Z1bmM7CkBAIC0zNTgxLDEzICszNzA5LDEzIEBACiAJCQlpZiAocWxjbmljX2NvbmZpZ19zd2l0Y2hfcG9ydChhZGFwdGVyLCAmZXN3X2NmZ1tpXSkpCiAJCQkJcmV0dXJuIFFMX1NUQVRVU19JTlZBTElEX1BBUkFNOwogCi0JCWlmIChhZGFwdGVyLT5haHcucGNpX2Z1bmMgIT0gZXN3X2NmZ1tpXS5wY2lfZnVuYykKKwkJaWYgKGFkYXB0ZXItPmFody0+cGNpX2Z1bmMgIT0gZXN3X2NmZ1tpXS5wY2lfZnVuYykKIAkJCWNvbnRpbnVlOwogCiAJCW9wX21vZGUgPSBlc3dfY2ZnW2ldLm9wX21vZGU7CiAJCXFsY25pY19nZXRfZXN3aXRjaF9wb3J0X2NvbmZpZyhhZGFwdGVyLCAmZXN3X2NmZ1tpXSk7CiAJCWVzd19jZmdbaV0ub3BfbW9kZSA9IG9wX21vZGU7Ci0JCWVzd19jZmdbaV0ucGNpX2Z1bmMgPSBhZGFwdGVyLT5haHcucGNpX2Z1bmM7CisJCWVzd19jZmdbaV0ucGNpX2Z1bmMgPSBhZGFwdGVyLT5haHctPnBjaV9mdW5jOwogCiAJCXN3aXRjaCAoZXN3X2NmZ1tpXS5vcF9tb2RlKSB7CiAJCWNhc2UgUUxDTklDX1BPUlRfREVGQVVMVFM6CkBAIC0zOTY4LDE0ICs0MDk2LDE0IEBACiAJCWRldl9pbmZvKGRldiwgImZhaWxlZCB0byBjcmVhdGUgY3JiIHN5c2ZzIGVudHJ5XG4iKTsKIAlpZiAoZGV2aWNlX2NyZWF0ZV9iaW5fZmlsZShkZXYsICZiaW5fYXR0cl9tZW0pKQogCQlkZXZfaW5mbyhkZXYsICJmYWlsZWQgdG8gY3JlYXRlIG1lbSBzeXNmcyBlbnRyeVxuIik7CisJaWYgKGRldmljZV9jcmVhdGVfYmluX2ZpbGUoZGV2LCAmYmluX2F0dHJfcGNpX2NvbmZpZykpCisJCWRldl9pbmZvKGRldiwgImZhaWxlZCB0byBjcmVhdGUgcGNpIGNvbmZpZyBzeXNmcyBlbnRyeSIpOwogCWlmICghKGFkYXB0ZXItPmZsYWdzICYgUUxDTklDX0VTV0lUQ0hfRU5BQkxFRCkpCiAJCXJldHVybjsKIAlpZiAoZGV2aWNlX2NyZWF0ZV9iaW5fZmlsZShkZXYsICZiaW5fYXR0cl9lc3dfY29uZmlnKSkKIAkJZGV2X2luZm8oZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBlc3cgY29uZmlnIHN5c2ZzIGVudHJ5Iik7CiAJaWYgKGFkYXB0ZXItPm9wX21vZGUgIT0gUUxDTklDX01HTVRfRlVOQykKIAkJcmV0dXJuOwotCWlmIChkZXZpY2VfY3JlYXRlX2Jpbl9maWxlKGRldiwgJmJpbl9hdHRyX3BjaV9jb25maWcpKQotCQlkZXZfaW5mbyhkZXYsICJmYWlsZWQgdG8gY3JlYXRlIHBjaSBjb25maWcgc3lzZnMgZW50cnkiKTsKIAlpZiAoZGV2aWNlX2NyZWF0ZV9iaW5fZmlsZShkZXYsICZiaW5fYXR0cl9ucGFyX2NvbmZpZykpCiAJCWRldl9pbmZvKGRldiwgImZhaWxlZCB0byBjcmVhdGUgbnBhciBjb25maWcgc3lzZnMgZW50cnkiKTsKIAlpZiAoZGV2aWNlX2NyZWF0ZV9iaW5fZmlsZShkZXYsICZiaW5fYXR0cl9wbV9jb25maWcpKQpAQCAtMzk5NiwxMiArNDEyNCwxMiBAQAogCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kaWFnX21vZGUpOwogCWRldmljZV9yZW1vdmVfYmluX2ZpbGUoZGV2LCAmYmluX2F0dHJfY3JiKTsKIAlkZXZpY2VfcmVtb3ZlX2Jpbl9maWxlKGRldiwgJmJpbl9hdHRyX21lbSk7CisJZGV2aWNlX3JlbW92ZV9iaW5fZmlsZShkZXYsICZiaW5fYXR0cl9wY2lfY29uZmlnKTsKIAlpZiAoIShhZGFwdGVyLT5mbGFncyAmIFFMQ05JQ19FU1dJVENIX0VOQUJMRUQpKQogCQlyZXR1cm47CiAJZGV2aWNlX3JlbW92ZV9iaW5fZmlsZShkZXYsICZiaW5fYXR0cl9lc3dfY29uZmlnKTsKIAlpZiAoYWRhcHRlci0+b3BfbW9kZSAhPSBRTENOSUNfTUdNVF9GVU5DKQogCQlyZXR1cm47Ci0JZGV2aWNlX3JlbW92ZV9iaW5fZmlsZShkZXYsICZiaW5fYXR0cl9wY2lfY29uZmlnKTsKIAlkZXZpY2VfcmVtb3ZlX2Jpbl9maWxlKGRldiwgJmJpbl9hdHRyX25wYXJfY29uZmlnKTsKIAlkZXZpY2VfcmVtb3ZlX2Jpbl9maWxlKGRldiwgJmJpbl9hdHRyX3BtX2NvbmZpZyk7CiAJZGV2aWNlX3JlbW92ZV9iaW5fZmlsZShkZXYsICZiaW5fYXR0cl9lc3dfc3RhdHMpOwpAQCAtNDA0OCwxNCArNDE3NiwxMCBAQAogCiAJcWxjbmljX2NvbmZpZ19pbmRldl9hZGRyKGFkYXB0ZXIsIG5ldGRldiwgZXZlbnQpOwogCi0JaWYgKCFhZGFwdGVyLT52bGdycCkKLQkJcmV0dXJuOwotCi0JZm9yICh2aWQgPSAwOyB2aWQgPCBWTEFOX05fVklEOyB2aWQrKykgewotCQlkZXYgPSB2bGFuX2dyb3VwX2dldF9kZXZpY2UoYWRhcHRlci0+dmxncnAsIHZpZCk7CisJZm9yX2VhY2hfc2V0X2JpdCh2aWQsIGFkYXB0ZXItPnZsYW5zLCBWTEFOX05fVklEKSB7CisJCWRldiA9IHZsYW5fZmluZF9kZXYobmV0ZGV2LCB2aWQpOwogCQlpZiAoIWRldikKIAkJCWNvbnRpbnVlOwotCiAJCXFsY25pY19jb25maWdfaW5kZXZfYWRkcihhZGFwdGVyLCBkZXYsIGV2ZW50KTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaCBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oCmluZGV4IDQ3NTdjNTkuLmQzMjg1MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oCkBAIC0yMTM0LDcgKzIxMzQsNyBAQAogCXN0cnVjdCBkZWxheWVkX3dvcmsgbXBpX2lkY193b3JrOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgbXBpX2NvcmVfdG9fbG9nOwogCXN0cnVjdCBjb21wbGV0aW9uIGlkZV9jb21wbGV0aW9uOwotCXN0cnVjdCBuaWNfb3BlcmF0aW9ucyAqbmljX29wczsKKwljb25zdCBzdHJ1Y3QgbmljX29wZXJhdGlvbnMgKm5pY19vcHM7CiAJdTE2IGRldmljZV9pZDsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIAlhdG9taWNfdCBsYl9jb3VudDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZXRodG9vbC5jCmluZGV4IDgxNDljYzkuLjE5YjAwZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2V0aHRvb2wuYwpAQCAtMzU2LDcgKzM1Niw3IEBACiAJCWVjbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOwogCX0KIAotCWVjbWQtPnNwZWVkID0gU1BFRURfMTAwMDA7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIFNQRUVEXzEwMDAwKTsKIAllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKIAogCXJldHVybiAwOwpAQCAtNDEyLDMxICs0MTIsMzEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBxbF9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgZGF0YSkKK3N0YXRpYyBpbnQgcWxfc2V0X3BoeXNfaWQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCisJCQkgIGVudW0gZXRodG9vbF9waHlzX2lkX3N0YXRlIHN0YXRlKQorCiB7CiAJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKLQl1MzIgbGVkX3JlZywgaTsKLQlpbnQgc3RhdHVzOwogCi0JLyogU2F2ZSB0aGUgY3VycmVudCBMRUQgc2V0dGluZ3MgKi8KLQlzdGF0dXMgPSBxbF9tYl9nZXRfbGVkX2NmZyhxZGV2KTsKLQlpZiAoc3RhdHVzKQotCQlyZXR1cm4gc3RhdHVzOwotCWxlZF9yZWcgPSBxZGV2LT5sZWRfY29uZmlnOworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIEVUSFRPT0xfSURfQUNUSVZFOgorCQkvKiBTYXZlIHRoZSBjdXJyZW50IExFRCBzZXR0aW5ncyAqLworCQlpZiAocWxfbWJfZ2V0X2xlZF9jZmcocWRldikpCisJCQlyZXR1cm4gLUVJTzsKIAotCS8qIFN0YXJ0IGJsaW5raW5nIHRoZSBsZWQgKi8KLQlpZiAoIWRhdGEgfHwgZGF0YSA+IDMwMCkKLQkJZGF0YSA9IDMwMDsKLQotCWZvciAoaSA9IDA7IGkgPCAoZGF0YSAqIDEwKTsgaSsrKQorCQkvKiBTdGFydCBibGlua2luZyAqLwogCQlxbF9tYl9zZXRfbGVkX2NmZyhxZGV2LCBRTF9MRURfQkxJTkspOworCQlyZXR1cm4gMDsKIAotCS8qIFJlc3RvcmUgTEVEIHNldHRpbmdzICovCi0Jc3RhdHVzID0gcWxfbWJfc2V0X2xlZF9jZmcocWRldiwgbGVkX3JlZyk7Ci0JaWYgKHN0YXR1cykKLQkJcmV0dXJuIHN0YXR1czsKKwljYXNlIEVUSFRPT0xfSURfSU5BQ1RJVkU6CisJCS8qIFJlc3RvcmUgTEVEIHNldHRpbmdzICovCisJCWlmIChxbF9tYl9zZXRfbGVkX2NmZyhxZGV2LCBxZGV2LT5sZWRfY29uZmlnKSkKKwkJCXJldHVybiAtRUlPOworCQlyZXR1cm4gMDsKIAotCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KIH0KIAogc3RhdGljIGludCBxbF9zdGFydF9sb29wYmFjayhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKQEAgLTY1NSwzMiArNjU1LDYgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgdTMyIHFsX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0Jc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXJldHVybiBxZGV2LT5yeF9jc3VtOwotfQotCi1zdGF0aWMgaW50IHFsX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHVpbnQzMl90IGRhdGEpCi17Ci0Jc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXFkZXYtPnJ4X2NzdW0gPSBkYXRhOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHFsX3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHVpbnQzMl90IGRhdGEpCi17Ci0KLQlpZiAoZGF0YSkgewotCQluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKLQkJbmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwotCX0gZWxzZSB7Ci0JCW5kZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzsKLQkJbmRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPNjsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB1MzIgcWxfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXN0cnVjdCBxbF9hZGFwdGVyICpxZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CkBAIC03MDMsMTggKzY3NywxMCBAQAogCS5nZXRfbXNnbGV2ZWwgPSBxbF9nZXRfbXNnbGV2ZWwsCiAJLnNldF9tc2dsZXZlbCA9IHFsX3NldF9tc2dsZXZlbCwKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAotCS5waHlzX2lkCQkgPSBxbF9waHlzX2lkLAorCS5zZXRfcGh5c19pZAkJID0gcWxfc2V0X3BoeXNfaWQsCiAJLnNlbGZfdGVzdAkJID0gcWxfc2VsZl90ZXN0LAogCS5nZXRfcGF1c2VwYXJhbQkJID0gcWxfZ2V0X3BhdXNlcGFyYW0sCiAJLnNldF9wYXVzZXBhcmFtCQkgPSBxbF9zZXRfcGF1c2VwYXJhbSwKLQkuZ2V0X3J4X2NzdW0gPSBxbF9nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0gPSBxbF9zZXRfcnhfY3N1bSwKLQkuZ2V0X3R4X2NzdW0gPSBldGh0b29sX29wX2dldF90eF9jc3VtLAotCS5zZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0sCi0JLmdldF9zZyA9IGV0aHRvb2xfb3BfZ2V0X3NnLAotCS5zZXRfc2cgPSBldGh0b29sX29wX3NldF9zZywKLQkuZ2V0X3RzbyA9IGV0aHRvb2xfb3BfZ2V0X3RzbywKLQkuc2V0X3RzbyA9IHFsX3NldF90c28sCiAJLmdldF9jb2FsZXNjZSA9IHFsX2dldF9jb2FsZXNjZSwKIAkuc2V0X2NvYWxlc2NlID0gcWxfc2V0X2NvYWxlc2NlLAogCS5nZXRfc3NldF9jb3VudCA9IHFsX2dldF9zc2V0X2NvdW50LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMKaW5kZXggNWJiMzExOS4uOTMwYWU0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgPG5ldC9pcDZfY2hlY2tzdW0uaD4KIAogI2luY2x1ZGUgInFsZ2UuaCIKQEAgLTE1NzEsNyArMTU3Miw3IEBACiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmRldik7CiAJc2tiX2NoZWNrc3VtX25vbmVfYXNzZXJ0KHNrYik7CiAKLQlpZiAocWRldi0+cnhfY3N1bSAmJgorCWlmICgobmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkgJiYKIAkJIShpYl9tYWNfcnNwLT5mbGFnczEgJiBJQl9NQUNfQ1NVTV9FUlJfTUFTSykpIHsKIAkJLyogVENQIGZyYW1lLiAqLwogCQlpZiAoaWJfbWFjX3JzcC0+ZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX1QpIHsKQEAgLTE2ODQsNyArMTY4NSw3IEBACiAJLyogSWYgcnggY2hlY2tzdW0gaXMgb24sIGFuZCB0aGVyZSBhcmUgbm8KIAkgKiBjc3VtIG9yIGZyYW1lIGVycm9ycy4KIAkgKi8KLQlpZiAocWRldi0+cnhfY3N1bSAmJgorCWlmICgobmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkgJiYKIAkJIShpYl9tYWNfcnNwLT5mbGFnczEgJiBJQl9NQUNfQ1NVTV9FUlJfTUFTSykpIHsKIAkJLyogVENQIGZyYW1lLiAqLwogCQlpZiAoaWJfbWFjX3JzcC0+ZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX1QpIHsKQEAgLTIwMDQsNyArMjAwNSw3IEBACiAJLyogSWYgcnggY2hlY2tzdW0gaXMgb24sIGFuZCB0aGVyZSBhcmUgbm8KIAkgKiBjc3VtIG9yIGZyYW1lIGVycm9ycy4KIAkgKi8KLQlpZiAocWRldi0+cnhfY3N1bSAmJgorCWlmICgobmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkgJiYKIAkJIShpYl9tYWNfcnNwLT5mbGFnczEgJiBJQl9NQUNfQ1NVTV9FUlJfTUFTSykpIHsKIAkJLyogVENQIGZyYW1lLiAqLwogCQlpZiAoaWJfbWFjX3JzcC0+ZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX1QpIHsKQEAgLTQ0MTIsMTIgKzQ0MTMsMTIgQEAKIAlydG5sX3VubG9jaygpOwogfQogCi1zdGF0aWMgc3RydWN0IG5pY19vcGVyYXRpb25zIHFsYTgwMTJfbmljX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmljX29wZXJhdGlvbnMgcWxhODAxMl9uaWNfb3BzID0gewogCS5nZXRfZmxhc2gJCT0gcWxfZ2V0XzgwMTJfZmxhc2hfcGFyYW1zLAogCS5wb3J0X2luaXRpYWxpemUJPSBxbF84MDEyX3BvcnRfaW5pdGlhbGl6ZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbmljX29wZXJhdGlvbnMgcWxhODAwMF9uaWNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBuaWNfb3BlcmF0aW9ucyBxbGE4MDAwX25pY19vcHMgPSB7CiAJLmdldF9mbGFzaAkJPSBxbF9nZXRfODAwMF9mbGFzaF9wYXJhbXMsCiAJLnBvcnRfaW5pdGlhbGl6ZQk9IHFsXzgwMDBfcG9ydF9pbml0aWFsaXplLAogfTsKQEAgLTQ2MjEsNyArNDYyMiw2IEBACiAJLyoKIAkgKiBTZXQgdXAgdGhlIG9wZXJhdGluZyBwYXJhbWV0ZXJzLgogCSAqLwotCXFkZXYtPnJ4X2NzdW0gPSAxOwogCXFkZXYtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKG5kZXYtPm5hbWUpOwogCUlOSVRfREVMQVlFRF9XT1JLKCZxZGV2LT5hc2ljX3Jlc2V0X3dvcmssIHFsX2FzaWNfcmVzZXRfd29yayk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnFkZXYtPm1waV9yZXNldF93b3JrLCBxbF9tcGlfcmVzZXRfd29yayk7CkBAIC00Njk1LDE1ICs0Njk1LDExIEBACiAKIAlxZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAJU0VUX05FVERFVl9ERVYobmRldiwgJnBkZXYtPmRldik7Ci0JbmRldi0+ZmVhdHVyZXMgPSAoMAotCQkJICB8IE5FVElGX0ZfSVBfQ1NVTQotCQkJICB8IE5FVElGX0ZfU0cKLQkJCSAgfCBORVRJRl9GX1RTTwotCQkJICB8IE5FVElGX0ZfVFNPNgotCQkJICB8IE5FVElGX0ZfVFNPX0VDTgotCQkJICB8IE5FVElGX0ZfSFdfVkxBTl9UWAotCQkJICB8IE5FVElGX0ZfSFdfVkxBTl9SWCB8IE5FVElGX0ZfSFdfVkxBTl9GSUxURVIpOwotCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfR1JPOworCW5kZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8CisJCU5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082IHwgTkVUSUZfRl9UU09fRUNOIHwKKwkJTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9SWENTVU07CisJbmRldi0+ZmVhdHVyZXMgPSBuZGV2LT5od19mZWF0dXJlcyB8CisJCU5FVElGX0ZfSFdfVkxBTl9SWCB8IE5FVElGX0ZfSFdfVkxBTl9GSUxURVI7CiAKIAlpZiAodGVzdF9iaXQoUUxfRE1BNjQsICZxZGV2LT5mbGFncykpCiAJCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3I4MTY5LmMgYi9kcml2ZXJzL25ldC9yODE2OS5jCmluZGV4IDQ5M2IwZGUuLmVmMWNlMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3I4MTY5LmMKKysrIGIvZHJpdmVycy9uZXQvcjgxNjkuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS1hc3BtLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTM3LDYgKzM4LDggQEAKIAogI2RlZmluZSBGSVJNV0FSRV84MTY4RF8xCSJydGxfbmljL3J0bDgxNjhkLTEuZnciCiAjZGVmaW5lIEZJUk1XQVJFXzgxNjhEXzIJInJ0bF9uaWMvcnRsODE2OGQtMi5mdyIKKyNkZWZpbmUgRklSTVdBUkVfODE2OEVfMQkicnRsX25pYy9ydGw4MTY4ZS0xLmZ3IgorI2RlZmluZSBGSVJNV0FSRV84MTY4RV8yCSJydGxfbmljL3J0bDgxNjhlLTIuZnciCiAjZGVmaW5lIEZJUk1XQVJFXzgxMDVFXzEJInJ0bF9uaWMvcnRsODEwNWUtMS5mdyIKIAogI2lmZGVmIFJUTDgxNjlfREVCVUcKQEAgLTk2LDc3ICs5OSwxMjMgQEAKICNkZWZpbmUgUlRMX1IzMihyZWcpCQlyZWFkbCAoaW9hZGRyICsgKHJlZykpCiAKIGVudW0gbWFjX3ZlcnNpb24gewotCVJUTF9HSUdBX01BQ19OT05FICAgPSAweDAwLAotCVJUTF9HSUdBX01BQ19WRVJfMDEgPSAweDAxLCAvLyA4MTY5Ci0JUlRMX0dJR0FfTUFDX1ZFUl8wMiA9IDB4MDIsIC8vIDgxNjlTCi0JUlRMX0dJR0FfTUFDX1ZFUl8wMyA9IDB4MDMsIC8vIDgxMTBTCi0JUlRMX0dJR0FfTUFDX1ZFUl8wNCA9IDB4MDQsIC8vIDgxNjlTQgotCVJUTF9HSUdBX01BQ19WRVJfMDUgPSAweDA1LCAvLyA4MTEwU0NkCi0JUlRMX0dJR0FfTUFDX1ZFUl8wNiA9IDB4MDYsIC8vIDgxMTBTQ2UKLQlSVExfR0lHQV9NQUNfVkVSXzA3ID0gMHgwNywgLy8gODEwMmUKLQlSVExfR0lHQV9NQUNfVkVSXzA4ID0gMHgwOCwgLy8gODEwMmUKLQlSVExfR0lHQV9NQUNfVkVSXzA5ID0gMHgwOSwgLy8gODEwMmUKLQlSVExfR0lHQV9NQUNfVkVSXzEwID0gMHgwYSwgLy8gODEwMWUKLQlSVExfR0lHQV9NQUNfVkVSXzExID0gMHgwYiwgLy8gODE2OEJiCi0JUlRMX0dJR0FfTUFDX1ZFUl8xMiA9IDB4MGMsIC8vIDgxNjhCZQotCVJUTF9HSUdBX01BQ19WRVJfMTMgPSAweDBkLCAvLyA4MTAxRWIKLQlSVExfR0lHQV9NQUNfVkVSXzE0ID0gMHgwZSwgLy8gODEwMSA/Ci0JUlRMX0dJR0FfTUFDX1ZFUl8xNSA9IDB4MGYsIC8vIDgxMDEgPwotCVJUTF9HSUdBX01BQ19WRVJfMTYgPSAweDExLCAvLyA4MTAxRWMKLQlSVExfR0lHQV9NQUNfVkVSXzE3ID0gMHgxMCwgLy8gODE2OEJmCi0JUlRMX0dJR0FfTUFDX1ZFUl8xOCA9IDB4MTIsIC8vIDgxNjhDUAotCVJUTF9HSUdBX01BQ19WRVJfMTkgPSAweDEzLCAvLyA4MTY4QwotCVJUTF9HSUdBX01BQ19WRVJfMjAgPSAweDE0LCAvLyA4MTY4QwotCVJUTF9HSUdBX01BQ19WRVJfMjEgPSAweDE1LCAvLyA4MTY4QwotCVJUTF9HSUdBX01BQ19WRVJfMjIgPSAweDE2LCAvLyA4MTY4QwotCVJUTF9HSUdBX01BQ19WRVJfMjMgPSAweDE3LCAvLyA4MTY4Q1AKLQlSVExfR0lHQV9NQUNfVkVSXzI0ID0gMHgxOCwgLy8gODE2OENQCi0JUlRMX0dJR0FfTUFDX1ZFUl8yNSA9IDB4MTksIC8vIDgxNjhECi0JUlRMX0dJR0FfTUFDX1ZFUl8yNiA9IDB4MWEsIC8vIDgxNjhECi0JUlRMX0dJR0FfTUFDX1ZFUl8yNyA9IDB4MWIsIC8vIDgxNjhEUAotCVJUTF9HSUdBX01BQ19WRVJfMjggPSAweDFjLCAvLyA4MTY4RFAKLQlSVExfR0lHQV9NQUNfVkVSXzI5ID0gMHgxZCwgLy8gODEwNUUKLQlSVExfR0lHQV9NQUNfVkVSXzMwID0gMHgxZSwgLy8gODEwNUUKKwlSVExfR0lHQV9NQUNfVkVSXzAxID0gMCwKKwlSVExfR0lHQV9NQUNfVkVSXzAyLAorCVJUTF9HSUdBX01BQ19WRVJfMDMsCisJUlRMX0dJR0FfTUFDX1ZFUl8wNCwKKwlSVExfR0lHQV9NQUNfVkVSXzA1LAorCVJUTF9HSUdBX01BQ19WRVJfMDYsCisJUlRMX0dJR0FfTUFDX1ZFUl8wNywKKwlSVExfR0lHQV9NQUNfVkVSXzA4LAorCVJUTF9HSUdBX01BQ19WRVJfMDksCisJUlRMX0dJR0FfTUFDX1ZFUl8xMCwKKwlSVExfR0lHQV9NQUNfVkVSXzExLAorCVJUTF9HSUdBX01BQ19WRVJfMTIsCisJUlRMX0dJR0FfTUFDX1ZFUl8xMywKKwlSVExfR0lHQV9NQUNfVkVSXzE0LAorCVJUTF9HSUdBX01BQ19WRVJfMTUsCisJUlRMX0dJR0FfTUFDX1ZFUl8xNiwKKwlSVExfR0lHQV9NQUNfVkVSXzE3LAorCVJUTF9HSUdBX01BQ19WRVJfMTgsCisJUlRMX0dJR0FfTUFDX1ZFUl8xOSwKKwlSVExfR0lHQV9NQUNfVkVSXzIwLAorCVJUTF9HSUdBX01BQ19WRVJfMjEsCisJUlRMX0dJR0FfTUFDX1ZFUl8yMiwKKwlSVExfR0lHQV9NQUNfVkVSXzIzLAorCVJUTF9HSUdBX01BQ19WRVJfMjQsCisJUlRMX0dJR0FfTUFDX1ZFUl8yNSwKKwlSVExfR0lHQV9NQUNfVkVSXzI2LAorCVJUTF9HSUdBX01BQ19WRVJfMjcsCisJUlRMX0dJR0FfTUFDX1ZFUl8yOCwKKwlSVExfR0lHQV9NQUNfVkVSXzI5LAorCVJUTF9HSUdBX01BQ19WRVJfMzAsCisJUlRMX0dJR0FfTUFDX1ZFUl8zMSwKKwlSVExfR0lHQV9NQUNfVkVSXzMyLAorCVJUTF9HSUdBX01BQ19WRVJfMzMsCisJUlRMX0dJR0FfTUFDX05PTkUgICA9IDB4ZmYsCiB9OwogCi0jZGVmaW5lIF9SKE5BTUUsTUFDLE1BU0spIFwKLQl7IC5uYW1lID0gTkFNRSwgLm1hY192ZXJzaW9uID0gTUFDLCAuUnhDb25maWdNYXNrID0gTUFTSyB9CitlbnVtIHJ0bF90eF9kZXNjX3ZlcnNpb24geworCVJUTF9URF8wCT0gMCwKKwlSVExfVERfMQk9IDEsCit9OworCisjZGVmaW5lIF9SKE5BTUUsVEQsRlcpIFwKKwl7IC5uYW1lID0gTkFNRSwgLnR4ZF92ZXJzaW9uID0gVEQsIC5md19uYW1lID0gRlcgfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHsKIAljb25zdCBjaGFyICpuYW1lOwotCXU4IG1hY192ZXJzaW9uOwotCXUzMiBSeENvbmZpZ01hc2s7CS8qIENsZWFycyB0aGUgYml0cyBzdXBwb3J0ZWQgYnkgdGhpcyBjaGlwICovCi19IHJ0bF9jaGlwX2luZm9bXSA9IHsKLQlfUigiUlRMODE2OSIsCQlSVExfR0lHQV9NQUNfVkVSXzAxLCAweGZmN2UxODgwKSwgLy8gODE2OQotCV9SKCJSVEw4MTY5cyIsCQlSVExfR0lHQV9NQUNfVkVSXzAyLCAweGZmN2UxODgwKSwgLy8gODE2OVMKLQlfUigiUlRMODExMHMiLAkJUlRMX0dJR0FfTUFDX1ZFUl8wMywgMHhmZjdlMTg4MCksIC8vIDgxMTBTCi0JX1IoIlJUTDgxNjlzYi84MTEwc2IiLAlSVExfR0lHQV9NQUNfVkVSXzA0LCAweGZmN2UxODgwKSwgLy8gODE2OVNCCi0JX1IoIlJUTDgxNjlzYy84MTEwc2MiLAlSVExfR0lHQV9NQUNfVkVSXzA1LCAweGZmN2UxODgwKSwgLy8gODExMFNDZAotCV9SKCJSVEw4MTY5c2MvODExMHNjIiwJUlRMX0dJR0FfTUFDX1ZFUl8wNiwgMHhmZjdlMTg4MCksIC8vIDgxMTBTQ2UKLQlfUigiUlRMODEwMmUiLAkJUlRMX0dJR0FfTUFDX1ZFUl8wNywgMHhmZjdlMTg4MCksIC8vIFBDSS1FCi0JX1IoIlJUTDgxMDJlIiwJCVJUTF9HSUdBX01BQ19WRVJfMDgsIDB4ZmY3ZTE4ODApLCAvLyBQQ0ktRQotCV9SKCJSVEw4MTAyZSIsCQlSVExfR0lHQV9NQUNfVkVSXzA5LCAweGZmN2UxODgwKSwgLy8gUENJLUUKLQlfUigiUlRMODEwMWUiLAkJUlRMX0dJR0FfTUFDX1ZFUl8xMCwgMHhmZjdlMTg4MCksIC8vIFBDSS1FCi0JX1IoIlJUTDgxNjhiLzgxMTFiIiwJUlRMX0dJR0FfTUFDX1ZFUl8xMSwgMHhmZjdlMTg4MCksIC8vIFBDSS1FCi0JX1IoIlJUTDgxNjhiLzgxMTFiIiwJUlRMX0dJR0FfTUFDX1ZFUl8xMiwgMHhmZjdlMTg4MCksIC8vIFBDSS1FCi0JX1IoIlJUTDgxMDFlIiwJCVJUTF9HSUdBX01BQ19WRVJfMTMsIDB4ZmY3ZTE4ODApLCAvLyBQQ0ktRSA4MTM5Ci0JX1IoIlJUTDgxMDBlIiwJCVJUTF9HSUdBX01BQ19WRVJfMTQsIDB4ZmY3ZTE4ODApLCAvLyBQQ0ktRSA4MTM5Ci0JX1IoIlJUTDgxMDBlIiwJCVJUTF9HSUdBX01BQ19WRVJfMTUsIDB4ZmY3ZTE4ODApLCAvLyBQQ0ktRSA4MTM5Ci0JX1IoIlJUTDgxNjhiLzgxMTFiIiwJUlRMX0dJR0FfTUFDX1ZFUl8xNywgMHhmZjdlMTg4MCksIC8vIFBDSS1FCi0JX1IoIlJUTDgxMDFlIiwJCVJUTF9HSUdBX01BQ19WRVJfMTYsIDB4ZmY3ZTE4ODApLCAvLyBQQ0ktRQotCV9SKCJSVEw4MTY4Y3AvODExMWNwIiwJUlRMX0dJR0FfTUFDX1ZFUl8xOCwgMHhmZjdlMTg4MCksIC8vIFBDSS1FCi0JX1IoIlJUTDgxNjhjLzgxMTFjIiwJUlRMX0dJR0FfTUFDX1ZFUl8xOSwgMHhmZjdlMTg4MCksIC8vIFBDSS1FCi0JX1IoIlJUTDgxNjhjLzgxMTFjIiwJUlRMX0dJR0FfTUFDX1ZFUl8yMCwgMHhmZjdlMTg4MCksIC8vIFBDSS1FCi0JX1IoIlJUTDgxNjhjLzgxMTFjIiwJUlRMX0dJR0FfTUFDX1ZFUl8yMSwgMHhmZjdlMTg4MCksIC8vIFBDSS1FCi0JX1IoIlJUTDgxNjhjLzgxMTFjIiwJUlRMX0dJR0FfTUFDX1ZFUl8yMiwgMHhmZjdlMTg4MCksIC8vIFBDSS1FCi0JX1IoIlJUTDgxNjhjcC84MTExY3AiLAlSVExfR0lHQV9NQUNfVkVSXzIzLCAweGZmN2UxODgwKSwgLy8gUENJLUUKLQlfUigiUlRMODE2OGNwLzgxMTFjcCIsCVJUTF9HSUdBX01BQ19WRVJfMjQsIDB4ZmY3ZTE4ODApLCAvLyBQQ0ktRQotCV9SKCJSVEw4MTY4ZC84MTExZCIsCVJUTF9HSUdBX01BQ19WRVJfMjUsIDB4ZmY3ZTE4ODApLCAvLyBQQ0ktRQotCV9SKCJSVEw4MTY4ZC84MTExZCIsCVJUTF9HSUdBX01BQ19WRVJfMjYsIDB4ZmY3ZTE4ODApLCAvLyBQQ0ktRQotCV9SKCJSVEw4MTY4ZHAvODExMWRwIiwJUlRMX0dJR0FfTUFDX1ZFUl8yNywgMHhmZjdlMTg4MCksIC8vIFBDSS1FCi0JX1IoIlJUTDgxNjhkcC84MTExZHAiLAlSVExfR0lHQV9NQUNfVkVSXzI4LCAweGZmN2UxODgwKSwgLy8gUENJLUUKLQlfUigiUlRMODEwNWUiLAkJUlRMX0dJR0FfTUFDX1ZFUl8yOSwgMHhmZjdlMTg4MCksIC8vIFBDSS1FCi0JX1IoIlJUTDgxMDVlIiwJCVJUTF9HSUdBX01BQ19WRVJfMzAsIDB4ZmY3ZTE4ODApICAvLyBQQ0ktRQorCWVudW0gcnRsX3R4X2Rlc2NfdmVyc2lvbiB0eGRfdmVyc2lvbjsKKwljb25zdCBjaGFyICpmd19uYW1lOworfSBydGxfY2hpcF9pbmZvc1tdID0geworCS8qIFBDSSBkZXZpY2VzLiAqLworCVtSVExfR0lHQV9NQUNfVkVSXzAxXSA9CisJCV9SKCJSVEw4MTY5IiwJCVJUTF9URF8wLCBOVUxMKSwKKwlbUlRMX0dJR0FfTUFDX1ZFUl8wMl0gPQorCQlfUigiUlRMODE2OXMiLAkJUlRMX1REXzAsIE5VTEwpLAorCVtSVExfR0lHQV9NQUNfVkVSXzAzXSA9CisJCV9SKCJSVEw4MTEwcyIsCQlSVExfVERfMCwgTlVMTCksCisJW1JUTF9HSUdBX01BQ19WRVJfMDRdID0KKwkJX1IoIlJUTDgxNjlzYi84MTEwc2IiLAlSVExfVERfMCwgTlVMTCksCisJW1JUTF9HSUdBX01BQ19WRVJfMDVdID0KKwkJX1IoIlJUTDgxNjlzYy84MTEwc2MiLAlSVExfVERfMCwgTlVMTCksCisJW1JUTF9HSUdBX01BQ19WRVJfMDZdID0KKwkJX1IoIlJUTDgxNjlzYy84MTEwc2MiLAlSVExfVERfMCwgTlVMTCksCisJLyogUENJLUUgZGV2aWNlcy4gKi8KKwlbUlRMX0dJR0FfTUFDX1ZFUl8wN10gPQorCQlfUigiUlRMODEwMmUiLAkJUlRMX1REXzEsIE5VTEwpLAorCVtSVExfR0lHQV9NQUNfVkVSXzA4XSA9CisJCV9SKCJSVEw4MTAyZSIsCQlSVExfVERfMSwgTlVMTCksCisJW1JUTF9HSUdBX01BQ19WRVJfMDldID0KKwkJX1IoIlJUTDgxMDJlIiwJCVJUTF9URF8xLCBOVUxMKSwKKwlbUlRMX0dJR0FfTUFDX1ZFUl8xMF0gPQorCQlfUigiUlRMODEwMWUiLAkJUlRMX1REXzAsIE5VTEwpLAorCVtSVExfR0lHQV9NQUNfVkVSXzExXSA9CisJCV9SKCJSVEw4MTY4Yi84MTExYiIsCVJUTF9URF8wLCBOVUxMKSwKKwlbUlRMX0dJR0FfTUFDX1ZFUl8xMl0gPQorCQlfUigiUlRMODE2OGIvODExMWIiLAlSVExfVERfMCwgTlVMTCksCisJW1JUTF9HSUdBX01BQ19WRVJfMTNdID0KKwkJX1IoIlJUTDgxMDFlIiwJCVJUTF9URF8wLCBOVUxMKSwKKwlbUlRMX0dJR0FfTUFDX1ZFUl8xNF0gPQorCQlfUigiUlRMODEwMGUiLAkJUlRMX1REXzAsIE5VTEwpLAorCVtSVExfR0lHQV9NQUNfVkVSXzE1XSA9CisJCV9SKCJSVEw4MTAwZSIsCQlSVExfVERfMCwgTlVMTCksCisJW1JUTF9HSUdBX01BQ19WRVJfMTZdID0KKwkJX1IoIlJUTDgxMDFlIiwJCVJUTF9URF8wLCBOVUxMKSwKKwlbUlRMX0dJR0FfTUFDX1ZFUl8xN10gPQorCQlfUigiUlRMODE2OGIvODExMWIiLAlSVExfVERfMCwgTlVMTCksCisJW1JUTF9HSUdBX01BQ19WRVJfMThdID0KKwkJX1IoIlJUTDgxNjhjcC84MTExY3AiLAlSVExfVERfMSwgTlVMTCksCisJW1JUTF9HSUdBX01BQ19WRVJfMTldID0KKwkJX1IoIlJUTDgxNjhjLzgxMTFjIiwJUlRMX1REXzEsIE5VTEwpLAorCVtSVExfR0lHQV9NQUNfVkVSXzIwXSA9CisJCV9SKCJSVEw4MTY4Yy84MTExYyIsCVJUTF9URF8xLCBOVUxMKSwKKwlbUlRMX0dJR0FfTUFDX1ZFUl8yMV0gPQorCQlfUigiUlRMODE2OGMvODExMWMiLAlSVExfVERfMSwgTlVMTCksCisJW1JUTF9HSUdBX01BQ19WRVJfMjJdID0KKwkJX1IoIlJUTDgxNjhjLzgxMTFjIiwJUlRMX1REXzEsIE5VTEwpLAorCVtSVExfR0lHQV9NQUNfVkVSXzIzXSA9CisJCV9SKCJSVEw4MTY4Y3AvODExMWNwIiwJUlRMX1REXzEsIE5VTEwpLAorCVtSVExfR0lHQV9NQUNfVkVSXzI0XSA9CisJCV9SKCJSVEw4MTY4Y3AvODExMWNwIiwJUlRMX1REXzEsIE5VTEwpLAorCVtSVExfR0lHQV9NQUNfVkVSXzI1XSA9CisJCV9SKCJSVEw4MTY4ZC84MTExZCIsCVJUTF9URF8xLCBGSVJNV0FSRV84MTY4RF8xKSwKKwlbUlRMX0dJR0FfTUFDX1ZFUl8yNl0gPQorCQlfUigiUlRMODE2OGQvODExMWQiLAlSVExfVERfMSwgRklSTVdBUkVfODE2OERfMiksCisJW1JUTF9HSUdBX01BQ19WRVJfMjddID0KKwkJX1IoIlJUTDgxNjhkcC84MTExZHAiLAlSVExfVERfMSwgTlVMTCksCisJW1JUTF9HSUdBX01BQ19WRVJfMjhdID0KKwkJX1IoIlJUTDgxNjhkcC84MTExZHAiLAlSVExfVERfMSwgTlVMTCksCisJW1JUTF9HSUdBX01BQ19WRVJfMjldID0KKwkJX1IoIlJUTDgxMDVlIiwJCVJUTF9URF8xLCBGSVJNV0FSRV84MTA1RV8xKSwKKwlbUlRMX0dJR0FfTUFDX1ZFUl8zMF0gPQorCQlfUigiUlRMODEwNWUiLAkJUlRMX1REXzEsIEZJUk1XQVJFXzgxMDVFXzEpLAorCVtSVExfR0lHQV9NQUNfVkVSXzMxXSA9CisJCV9SKCJSVEw4MTY4ZHAvODExMWRwIiwJUlRMX1REXzEsIE5VTEwpLAorCVtSVExfR0lHQV9NQUNfVkVSXzMyXSA9CisJCV9SKCJSVEw4MTY4ZS84MTExZSIsCVJUTF9URF8xLCBGSVJNV0FSRV84MTY4RV8xKSwKKwlbUlRMX0dJR0FfTUFDX1ZFUl8zM10gPQorCQlfUigiUlRMODE2OGUvODExMWUiLAlSVExfVERfMSwgRklSTVdBUkVfODE2OEVfMikKIH07CiAjdW5kZWYgX1IKIApAQCAtMjIyLDYgKzI3MSw5IEBACiAJSW50clN0YXR1cwk9IDB4M2UsCiAJVHhDb25maWcJPSAweDQwLAogCVJ4Q29uZmlnCT0gMHg0NCwKKworI2RlZmluZSBSVExfUlhfQ09ORklHX01BU0sJCTB4ZmY3ZTE4ODB1CisKIAlSeE1pc3NlZAk9IDB4NGMsCiAJQ2ZnOTM0NgkJPSAweDUwLAogCUNvbmZpZzAJCT0gMHg1MSwKQEAgLTMxNSw3ICszNjcsOSBAQAogI2RlZmluZSBPQ1BBUl9GTEFHCQkJMHg4MDAwMDAwMAogI2RlZmluZSBPQ1BBUl9HUEhZX1dSSVRFX0NNRAkJMHg4MDAwZjA2MAogI2RlZmluZSBPQ1BBUl9HUEhZX1JFQURfQ01ECQkweDAwMDBmMDYwCi0JUkRTQVIxCQkJPSAweGQwCS8qIDgxNjhjIG9ubHkuIFVuZG9jdW1lbnRlZCBvbiA4MTY4ZHAgKi8KKwlSRFNBUjEJCQk9IDB4ZDAsCS8qIDgxNjhjIG9ubHkuIFVuZG9jdW1lbnRlZCBvbiA4MTY4ZHAgKi8KKwlNSVNDCQkJPSAweGYwLAkvKiA4MTY4ZSBvbmx5LiAqLworI2RlZmluZSBUWFBMQV9SU1QJCQkoMSA8PCAyOSkKIH07CiAKIGVudW0gcnRsX3JlZ2lzdGVyX2NvbnRlbnQgewpAQCAtMzkzLDYgKzQ0Nyw3IEBACiAJQldGCQk9ICgxIDw8IDYpLAkvKiBBY2NlcHQgQnJvYWRjYXN0IHdha2V1cCBmcmFtZSAqLwogCU1XRgkJPSAoMSA8PCA1KSwJLyogQWNjZXB0IE11bHRpY2FzdCB3YWtldXAgZnJhbWUgKi8KIAlVV0YJCT0gKDEgPDwgNCksCS8qIEFjY2VwdCBVbmljYXN0IHdha2V1cCBmcmFtZSAqLworCVNwaV9lbgkJPSAoMSA8PCAzKSwKIAlMYW5XYWtlCQk9ICgxIDw8IDEpLAkvKiBMYW5XYWtlIGVuYWJsZS9kaXNhYmxlICovCiAJUE1FU3RhdHVzCT0gKDEgPDwgMCksCS8qIFBNRSBzdGF0dXMgY2FuIGJlIHJlc2V0IGJ5IFBDSSBSU1QjICovCiAKQEAgLTQ0MSwyMSArNDk2LDY5IEBACiAJQ291bnRlckR1bXAJPSAweDgsCiB9OwogCi1lbnVtIGRlc2Nfc3RhdHVzX2JpdCB7CitlbnVtIHJ0bF9kZXNjX2JpdCB7CisJLyogRmlyc3QgZG91Ymxld29yZC4gKi8KIAlEZXNjT3duCQk9ICgxIDw8IDMxKSwgLyogRGVzY3JpcHRvciBpcyBvd25lZCBieSBOSUMgKi8KIAlSaW5nRW5kCQk9ICgxIDw8IDMwKSwgLyogRW5kIG9mIGRlc2NyaXB0b3IgcmluZyAqLwogCUZpcnN0RnJhZwk9ICgxIDw8IDI5KSwgLyogRmlyc3Qgc2VnbWVudCBvZiBhIHBhY2tldCAqLwogCUxhc3RGcmFnCT0gKDEgPDwgMjgpLCAvKiBGaW5hbCBzZWdtZW50IG9mIGEgcGFja2V0ICovCit9OwogCi0JLyogVHggcHJpdmF0ZSAqLwotCUxhcmdlU2VuZAk9ICgxIDw8IDI3KSwgLyogVENQIExhcmdlIFNlbmQgT2ZmbG9hZCAoVFNPKSAqLwotCU1TU1NoaWZ0CT0gMTYsICAgICAgICAvKiBNU1MgdmFsdWUgcG9zaXRpb24gKi8KLQlNU1NNYXNrCQk9IDB4ZmZmLCAgICAgLyogTVNTIHZhbHVlICsgTGFyZ2VTZW5kIGJpdDogMTIgYml0cyAqLwotCUlQQ1MJCT0gKDEgPDwgMTgpLCAvKiBDYWxjdWxhdGUgSVAgY2hlY2tzdW0gKi8KLQlVRFBDUwkJPSAoMSA8PCAxNyksIC8qIENhbGN1bGF0ZSBVRFAvSVAgY2hlY2tzdW0gKi8KLQlUQ1BDUwkJPSAoMSA8PCAxNiksIC8qIENhbGN1bGF0ZSBUQ1AvSVAgY2hlY2tzdW0gKi8KLQlUeFZsYW5UYWcJPSAoMSA8PCAxNyksIC8qIEFkZCBWTEFOIHRhZyAqLworLyogR2VuZXJpYyBjYXNlLiAqLworZW51bSBydGxfdHhfZGVzY19iaXQgeworCS8qIEZpcnN0IGRvdWJsZXdvcmQuICovCisJVERfTFNPCQk9ICgxIDw8IDI3KSwJCS8qIExhcmdlIFNlbmQgT2ZmbG9hZCAqLworI2RlZmluZSBURF9NU1NfTUFYCQkJMHgwN2ZmdQkvKiBNU1MgdmFsdWUgKi8KIAorCS8qIFNlY29uZCBkb3VibGV3b3JkLiAqLworCVR4VmxhblRhZwk9ICgxIDw8IDE3KSwJCS8qIEFkZCBWTEFOIHRhZyAqLworfTsKKworLyogODE2OSwgODE2OGIgYW5kIDgxMHggZXhjZXB0IDgxMDJlLiAqLworZW51bSBydGxfdHhfZGVzY19iaXRfMCB7CisJLyogRmlyc3QgZG91Ymxld29yZC4gKi8KKyNkZWZpbmUgVEQwX01TU19TSElGVAkJCTE2CS8qIE1TUyBwb3NpdGlvbiAoMTEgYml0cykgKi8KKwlURDBfVENQX0NTCT0gKDEgPDwgMTYpLAkJLyogQ2FsY3VsYXRlIFRDUC9JUCBjaGVja3N1bSAqLworCVREMF9VRFBfQ1MJPSAoMSA8PCAxNyksCQkvKiBDYWxjdWxhdGUgVURQL0lQIGNoZWNrc3VtICovCisJVEQwX0lQX0NTCT0gKDEgPDwgMTgpLAkJLyogQ2FsY3VsYXRlIElQIGNoZWNrc3VtICovCit9OworCisvKiA4MTAyZSwgODE2OGMgYW5kIGJleW9uZC4gKi8KK2VudW0gcnRsX3R4X2Rlc2NfYml0XzEgeworCS8qIFNlY29uZCBkb3VibGV3b3JkLiAqLworI2RlZmluZSBURDFfTVNTX1NISUZUCQkJMTgJLyogTVNTIHBvc2l0aW9uICgxMSBiaXRzKSAqLworCVREMV9JUF9DUwk9ICgxIDw8IDI5KSwJCS8qIENhbGN1bGF0ZSBJUCBjaGVja3N1bSAqLworCVREMV9UQ1BfQ1MJPSAoMSA8PCAzMCksCQkvKiBDYWxjdWxhdGUgVENQL0lQIGNoZWNrc3VtICovCisJVEQxX1VEUF9DUwk9ICgxIDw8IDMxKSwJCS8qIENhbGN1bGF0ZSBVRFAvSVAgY2hlY2tzdW0gKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsX3R4X2Rlc2NfaW5mbyB7CisJc3RydWN0IHsKKwkJdTMyIHVkcDsKKwkJdTMyIHRjcDsKKwl9IGNoZWNrc3VtOworCXUxNiBtc3Nfc2hpZnQ7CisJdTE2IG9wdHNfb2Zmc2V0OworfSB0eF9kZXNjX2luZm8gW10gPSB7CisJW1JUTF9URF8wXSA9IHsKKwkJLmNoZWNrc3VtID0geworCQkJLnVkcAk9IFREMF9JUF9DUyB8IFREMF9VRFBfQ1MsCisJCQkudGNwCT0gVEQwX0lQX0NTIHwgVEQwX1RDUF9DUworCQl9LAorCQkubXNzX3NoaWZ0CT0gVEQwX01TU19TSElGVCwKKwkJLm9wdHNfb2Zmc2V0CT0gMAorCX0sCisJW1JUTF9URF8xXSA9IHsKKwkJLmNoZWNrc3VtID0geworCQkJLnVkcAk9IFREMV9JUF9DUyB8IFREMV9VRFBfQ1MsCisJCQkudGNwCT0gVEQxX0lQX0NTIHwgVEQxX1RDUF9DUworCQl9LAorCQkubXNzX3NoaWZ0CT0gVEQxX01TU19TSElGVCwKKwkJLm9wdHNfb2Zmc2V0CT0gMQorCX0KK307CisKK2VudW0gcnRsX3J4X2Rlc2NfYml0IHsKIAkvKiBSeCBwcml2YXRlICovCiAJUElEMQkJPSAoMSA8PCAxOCksIC8qIFByb3RvY29sIElEIGJpdCAxLzIgKi8KIAlQSUQwCQk9ICgxIDw8IDE3KSwgLyogUHJvdG9jb2wgSUQgYml0IDIvMiAqLwpAQCAtNTE1LDEzICs2MTgsMTMgQEAKIAogc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7CiAJdm9pZCBfX2lvbWVtICptbWlvX2FkZHI7CS8qIG1lbW9yeSBtYXAgcGh5c2ljYWwgYWRkcmVzcyAqLwotCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwkvKiBJbmRleCBvZiBQQ0kgZGV2aWNlICovCisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKLQlzcGlubG9ja190IGxvY2s7CQkvKiBzcGluIGxvY2sgZmxhZyAqLworCXNwaW5sb2NrX3QgbG9jazsKIAl1MzIgbXNnX2VuYWJsZTsKLQlpbnQgY2hpcHNldDsKLQlpbnQgbWFjX3ZlcnNpb247CisJdTE2IHR4ZF92ZXJzaW9uOworCXUxNiBtYWNfdmVyc2lvbjsKIAl1MzIgY3VyX3J4OyAvKiBJbmRleCBpbnRvIHRoZSBSeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi8KIAl1MzIgY3VyX3R4OyAvKiBJbmRleCBpbnRvIHRoZSBUeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi8KIAl1MzIgZGlydHlfcng7CkBAIC01MzcsNyArNjQwLDYgQEAKIAl1MTYgaW50cl9ldmVudDsKIAl1MTYgbmFwaV9ldmVudDsKIAl1MTYgaW50cl9tYXNrOwotCWludCBwaHlfMTAwMF9jdHJsX3JlZzsKIAogCXN0cnVjdCBtZGlvX29wcyB7CiAJCXZvaWQgKCp3cml0ZSkodm9pZCBfX2lvbWVtICosIGludCwgaW50KTsKQEAgLTU2NSw2ICs2NjcsNyBAQAogCXUzMiBzYXZlZF93b2xvcHRzOwogCiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKyNkZWZpbmUgUlRMX0ZJUk1XQVJFX1VOS05PV04JRVJSX1BUUigtRUFHQUlOKTsKIH07CiAKIE1PRFVMRV9BVVRIT1IoIlJlYWx0ZWsgYW5kIHRoZSBMaW51eCByODE2OSBjcmV3IDxuZXRkZXZAdmdlci5rZXJuZWwub3JnPiIpOwpAQCAtNTc3LDYgKzY4MCw4IEBACiBNT0RVTEVfVkVSU0lPTihSVEw4MTY5X1ZFUlNJT04pOwogTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFXzgxNjhEXzEpOwogTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFXzgxNjhEXzIpOworTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFXzgxNjhFXzEpOworTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFXzgxNjhFXzIpOwogTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFXzgxMDVFXzEpOwogCiBzdGF0aWMgaW50IHJ0bDgxNjlfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTY0OCwzMiArNzUzLDQ5IEBACiAjZGVmaW5lIE9PQl9DTURfRFJJVkVSX1NUQVJUCTB4MDUKICNkZWZpbmUgT09CX0NNRF9EUklWRVJfU1RPUAkweDA2CiAKK3N0YXRpYyB1MTYgcnRsODE2OF9nZXRfb2NwX3JlZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKK3sKKwlyZXR1cm4gKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzMxKSA/IDB4YjggOiAweDEwOworfQorCiBzdGF0aWMgdm9pZCBydGw4MTY4X2RyaXZlcl9zdGFydChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKKwl1MTYgcmVnOwogCWludCBpOwogCiAJcnRsODE2OF9vb2Jfbm90aWZ5KHRwLCBPT0JfQ01EX0RSSVZFUl9TVEFSVCk7CiAKKwlyZWcgPSBydGw4MTY4X2dldF9vY3BfcmVnKHRwKTsKKwogCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CiAJCW1zbGVlcCgxMCk7Ci0JCWlmIChvY3BfcmVhZCh0cCwgMHgwZiwgMHgwMDEwKSAmIDB4MDAwMDA4MDApCisJCWlmIChvY3BfcmVhZCh0cCwgMHgwZiwgcmVnKSAmIDB4MDAwMDA4MDApCiAJCQlicmVhazsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bDgxNjhfZHJpdmVyX3N0b3Aoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CisJdTE2IHJlZzsKIAlpbnQgaTsKIAogCXJ0bDgxNjhfb29iX25vdGlmeSh0cCwgT09CX0NNRF9EUklWRVJfU1RPUCk7CiAKKwlyZWcgPSBydGw4MTY4X2dldF9vY3BfcmVnKHRwKTsKKwogCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CiAJCW1zbGVlcCgxMCk7Ci0JCWlmICgob2NwX3JlYWQodHAsIDB4MGYsIDB4MDAxMCkgJiAweDAwMDAwODAwKSA9PSAwKQorCQlpZiAoKG9jcF9yZWFkKHRwLCAweDBmLCByZWcpICYgMHgwMDAwMDgwMCkgPT0gMCkKIAkJCWJyZWFrOwogCX0KIH0KIAorc3RhdGljIGludCByODE2OGRwX2NoZWNrX2Rhc2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCit7CisJdTE2IHJlZyA9IHJ0bDgxNjhfZ2V0X29jcF9yZWcodHApOworCisJcmV0dXJuIChvY3BfcmVhZCh0cCwgMHgwZiwgcmVnKSAmIDB4MDAwMDgwMDApID8gMSA6IDA7Cit9CiAKIHN0YXRpYyB2b2lkIHI4MTY5X21kaW9fd3JpdGUodm9pZCBfX2lvbWVtICppb2FkZHIsIGludCByZWdfYWRkciwgaW50IHZhbHVlKQogewpAQCAtOTcyLDkgKzEwOTQsOCBAQAogfQogCiBzdGF0aWMgdm9pZCBfX3J0bDgxNjlfY2hlY2tfbGlua19zdGF0dXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgICBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKLQkJCQkgICAgICB2b2lkIF9faW9tZW0gKmlvYWRkciwKLQkJCQkgICAgICBib29sIHBtKQorCQkJCQlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKKwkJCQkJdm9pZCBfX2lvbWVtICppb2FkZHIsIGJvb2wgcG0pCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTA5MSw2ICsxMjEyLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBjaGFyICpydGxfbG9va3VwX2Zpcm13YXJlX25hbWUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCit7CisJcmV0dXJuIHJ0bF9jaGlwX2luZm9zW3RwLT5tYWNfdmVyc2lvbl0uZndfbmFtZTsKK30KKwogc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCXN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCiB7CkBAIC0xMDk5LDYgKzEyMjUsOCBAQAogCXN0cmNweShpbmZvLT5kcml2ZXIsIE1PRFVMRU5BTUUpOwogCXN0cmNweShpbmZvLT52ZXJzaW9uLCBSVEw4MTY5X1ZFUlNJT04pOwogCXN0cmNweShpbmZvLT5idXNfaW5mbywgcGNpX25hbWUodHAtPnBjaV9kZXYpKTsKKwlzdHJuY3B5KGluZm8tPmZ3X3ZlcnNpb24sIElTX0VSUl9PUl9OVUxMKHRwLT5mdykgPyAiTi9BIiA6CisJCXJ0bF9sb29rdXBfZmlybXdhcmVfbmFtZSh0cCksIHNpemVvZihpbmZvLT5md192ZXJzaW9uKSAtIDEpOwogfQogCiBzdGF0aWMgaW50IHJ0bDgxNjlfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0xMTYwLDE2ICsxMjg4LDcgQEAKIAkJZ2lnYV9jdHJsICY9IH4oQURWRVJUSVNFXzEwMDBGVUxMIHwgQURWRVJUSVNFXzEwMDBIQUxGKTsKIAogCQkvKiBUaGUgODEwMGUvODEwMWUvODEwMmUgZG8gRmFzdCBFdGhlcm5ldCBvbmx5LiAqLwotCQlpZiAoKHRwLT5tYWNfdmVyc2lvbiAhPSBSVExfR0lHQV9NQUNfVkVSXzA3KSAmJgotCQkgICAgKHRwLT5tYWNfdmVyc2lvbiAhPSBSVExfR0lHQV9NQUNfVkVSXzA4KSAmJgotCQkgICAgKHRwLT5tYWNfdmVyc2lvbiAhPSBSVExfR0lHQV9NQUNfVkVSXzA5KSAmJgotCQkgICAgKHRwLT5tYWNfdmVyc2lvbiAhPSBSVExfR0lHQV9NQUNfVkVSXzEwKSAmJgotCQkgICAgKHRwLT5tYWNfdmVyc2lvbiAhPSBSVExfR0lHQV9NQUNfVkVSXzEzKSAmJgotCQkgICAgKHRwLT5tYWNfdmVyc2lvbiAhPSBSVExfR0lHQV9NQUNfVkVSXzE0KSAmJgotCQkgICAgKHRwLT5tYWNfdmVyc2lvbiAhPSBSVExfR0lHQV9NQUNfVkVSXzE1KSAmJgotCQkgICAgKHRwLT5tYWNfdmVyc2lvbiAhPSBSVExfR0lHQV9NQUNfVkVSXzE2KSAmJgotCQkgICAgKHRwLT5tYWNfdmVyc2lvbiAhPSBSVExfR0lHQV9NQUNfVkVSXzI5KSAmJgotCQkgICAgKHRwLT5tYWNfdmVyc2lvbiAhPSBSVExfR0lHQV9NQUNfVkVSXzMwKSkgeworCQlpZiAodHAtPm1paS5zdXBwb3J0c19nbWlpKSB7CiAJCQlpZiAoYWR2ICYgQURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZikKIAkJCQlnaWdhX2N0cmwgfD0gQURWRVJUSVNFXzEwMDBIQUxGOwogCQkJaWYgKGFkdiAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwpCkBAIC0xMTk5LDEyICsxMzE4LDEwIEBACiAJCQlibWNyIHw9IEJNQ1JfRlVMTERQTFg7CiAJfQogCi0JdHAtPnBoeV8xMDAwX2N0cmxfcmVnID0gZ2lnYV9jdHJsOwotCiAJcnRsX3dyaXRlcGh5KHRwLCBNSUlfQk1DUiwgYm1jcik7CiAKLQlpZiAoKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzAyKSB8fAotCSAgICAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMDMpKSB7CisJaWYgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzAyIHx8CisJICAgIHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzAzKSB7CiAJCWlmICgoc3BlZWQgPT0gU1BFRURfMTAwKSAmJiAoYXV0b25lZyAhPSBBVVRPTkVHX0VOQUJMRSkpIHsKIAkJCXJ0bF93cml0ZXBoeSh0cCwgMHgxNywgMHgyMTM4KTsKIAkJCXJ0bF93cml0ZXBoeSh0cCwgMHgwZSwgMHgwMjYwKTsKQEAgLTEyMjYsMTAgKzEzNDMsMTQgQEAKIAlpbnQgcmV0OwogCiAJcmV0ID0gdHAtPnNldF9zcGVlZChkZXYsIGF1dG9uZWcsIHNwZWVkLCBkdXBsZXgsIGFkdmVydGlzaW5nKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CiAKLQlpZiAobmV0aWZfcnVubmluZyhkZXYpICYmICh0cC0+cGh5XzEwMDBfY3RybF9yZWcgJiBBRFZFUlRJU0VfMTAwMEZVTEwpKQorCWlmIChuZXRpZl9ydW5uaW5nKGRldikgJiYgKGF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpICYmCisJICAgIChhZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwpKSB7CiAJCW1vZF90aW1lcigmdHAtPnRpbWVyLCBqaWZmaWVzICsgUlRMODE2OV9QSFlfVElNRU9VVCk7Ci0KKwl9CitvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTIzOSwyMiArMTM2MCwyNSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAorCWRlbF90aW1lcl9zeW5jKCZ0cC0+dGltZXIpOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5sb2NrLCBmbGFncyk7Ci0JcmV0ID0gcnRsODE2OV9zZXRfc3BlZWQoZGV2LAotCQljbWQtPmF1dG9uZWcsIGNtZC0+c3BlZWQsIGNtZC0+ZHVwbGV4LCBjbWQtPmFkdmVydGlzaW5nKTsKKwlyZXQgPSBydGw4MTY5X3NldF9zcGVlZChkZXYsIGNtZC0+YXV0b25lZywgZXRodG9vbF9jbWRfc3BlZWQoY21kKSwKKwkJCQljbWQtPmR1cGxleCwgY21kLT5hZHZlcnRpc2luZyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHAtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB1MzIgcnRsODE2OV9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHUzMiBydGw4MTY5X2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpCiB7Ci0Jc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOworCWlmIChkZXYtPm10dSA+IFREX01TU19NQVgpCisJCWZlYXR1cmVzICY9IH5ORVRJRl9GX0FMTF9UU087CiAKLQlyZXR1cm4gdHAtPmNwX2NtZCAmIFJ4Q2hrU3VtOworCXJldHVybiBmZWF0dXJlczsKIH0KIAotc3RhdGljIGludCBydGw4MTY5X3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQorc3RhdGljIGludCBydGw4MTY5X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpCiB7CiAJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKQEAgLTEyNjIsMTEgKzEzODYsMTYgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+bG9jaywgZmxhZ3MpOwogCi0JaWYgKGRhdGEpCisJaWYgKGZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pCiAJCXRwLT5jcF9jbWQgfD0gUnhDaGtTdW07CiAJZWxzZQogCQl0cC0+Y3BfY21kICY9IH5SeENoa1N1bTsKIAorCWlmIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19WTEFOX1JYKQorCQl0cC0+Y3BfY21kIHw9IFJ4VmxhbjsKKwllbHNlCisJCXRwLT5jcF9jbWQgJj0gflJ4VmxhbjsKKwogCVJUTF9XMTYoQ1BsdXNDbWQsIHRwLT5jcF9jbWQpOwogCVJUTF9SMTYoQ1BsdXNDbWQpOwogCkBAIC0xMjgyLDI3ICsxNDExLDYgQEAKIAkJVHhWbGFuVGFnIHwgc3dhYjE2KHZsYW5fdHhfdGFnX2dldChza2IpKSA6IDB4MDA7CiB9CiAKLSNkZWZpbmUgTkVUSUZfRl9IV19WTEFOX1RYX1JYCShORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlgpCi0KLXN0YXRpYyB2b2lkIHJ0bDgxNjlfdmxhbl9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5sb2NrLCBmbGFncyk7Ci0JaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fUlgpCi0JCXRwLT5jcF9jbWQgfD0gUnhWbGFuOwotCWVsc2UKLQkJdHAtPmNwX2NtZCAmPSB+UnhWbGFuOwotCVJUTF9XMTYoQ1BsdXNDbWQsIHRwLT5jcF9jbWQpOwotCS8qIFBDSSBjb21taXQgKi8KLQlSVExfUjE2KENQbHVzQ21kKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cC0+bG9jaywgZmxhZ3MpOwotCi0JZGV2LT52bGFuX2ZlYXR1cmVzID0gZGV2LT5mZWF0dXJlcyAmfiBORVRJRl9GX0hXX1ZMQU5fVFhfUlg7Ci19Ci0KIHN0YXRpYyB2b2lkIHJ0bDgxNjlfcnhfdmxhbl90YWcoc3RydWN0IFJ4RGVzYyAqZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAl1MzIgb3B0czIgPSBsZTMyX3RvX2NwdShkZXNjLT5vcHRzMik7CkBAIC0xMzI4LDcgKzE0MzYsNyBAQAogCWNtZC0+YWR2ZXJ0aXNpbmcgPSAoc3RhdHVzICYgVEJJTndFbmFibGUpID8gIEFEVkVSVElTRURfQXV0b25lZyA6IDA7CiAJY21kLT5hdXRvbmVnID0gISEoc3RhdHVzICYgVEJJTndFbmFibGUpOwogCi0JY21kLT5zcGVlZCA9IFNQRUVEXzEwMDA7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgU1BFRURfMTAwMCk7CiAJY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsgLyogQWx3YXlzIHNldCAqLwogCiAJcmV0dXJuIDA7CkBAIC0xNDEzLDExICsxNTIxLDExIEBACiB7CiAJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKKwlzdHJ1Y3QgZGV2aWNlICpkID0gJnRwLT5wY2lfZGV2LT5kZXY7CiAJc3RydWN0IHJ0bDgxNjlfY291bnRlcnMgKmNvdW50ZXJzOwogCWRtYV9hZGRyX3QgcGFkZHI7CiAJdTMyIGNtZDsKIAlpbnQgd2FpdCA9IDEwMDA7Ci0Jc3RydWN0IGRldmljZSAqZCA9ICZ0cC0+cGNpX2Rldi0+ZGV2OwogCiAJLyoKIAkgKiBTb21lIGNoaXBzIGFyZSB1bmFibGUgdG8gZHVtcCB0YWxseSBjb3VudGVycyB3aGVuIHRoZSByZWNlaXZlcgpAQCAtMTQzNyw3ICsxNTQ1LDYgQEAKIAogCXdoaWxlICh3YWl0LS0pIHsKIAkJaWYgKChSVExfUjMyKENvdW50ZXJBZGRyTG93KSAmIENvdW50ZXJEdW1wKSA9PSAwKSB7Ci0JCQkvKiBjb3B5IHVwZGF0ZWQgY291bnRlcnMgKi8KIAkJCW1lbWNweSgmdHAtPmNvdW50ZXJzLCBjb3VudGVycywgc2l6ZW9mKCpjb3VudGVycykpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTE0ODMsMjggKzE1OTAsNiBAQAogCX0KIH0KIAotc3RhdGljIGludCBydGw4MTY5X3NldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBvbGRfZmVhdCA9IGRldi0+ZmVhdHVyZXM7Ci0JaW50IHJjOwotCi0JaWYgKCh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wNSkgJiYKLQkgICAgIShkYXRhICYgRVRIX0ZMQUdfUlhWTEFOKSkgewotCQluZXRpZl9pbmZvKHRwLCBkcnYsIGRldiwgIjgxMTBTQ2QgcmVxdWlyZXMgaGFyZHdhcmUgUnggVkxBTlxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJjID0gZXRodG9vbF9vcF9zZXRfZmxhZ3MoZGV2LCBkYXRhLCBFVEhfRkxBR19UWFZMQU4gfCBFVEhfRkxBR19SWFZMQU4pOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JaWYgKChvbGRfZmVhdCBeIGRldi0+ZmVhdHVyZXMpICYgTkVUSUZfRl9IV19WTEFOX1JYKQotCQlydGw4MTY5X3ZsYW5fbW9kZShkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JCT0gcnRsODE2OV9nZXRfZHJ2aW5mbywKIAkuZ2V0X3JlZ3NfbGVuCQk9IHJ0bDgxNjlfZ2V0X3JlZ3NfbGVuLApAQCAtMTUxMywyNCArMTU5OCwxOCBAQAogCS5zZXRfc2V0dGluZ3MJCT0gcnRsODE2OV9zZXRfc2V0dGluZ3MsCiAJLmdldF9tc2dsZXZlbAkJPSBydGw4MTY5X2dldF9tc2dsZXZlbCwKIAkuc2V0X21zZ2xldmVsCQk9IHJ0bDgxNjlfc2V0X21zZ2xldmVsLAotCS5nZXRfcnhfY3N1bQkJPSBydGw4MTY5X2dldF9yeF9jc3VtLAotCS5zZXRfcnhfY3N1bQkJPSBydGw4MTY5X3NldF9yeF9jc3VtLAotCS5zZXRfdHhfY3N1bQkJPSBldGh0b29sX29wX3NldF90eF9jc3VtLAotCS5zZXRfc2cJCQk9IGV0aHRvb2xfb3Bfc2V0X3NnLAotCS5zZXRfdHNvCQk9IGV0aHRvb2xfb3Bfc2V0X3RzbywKIAkuZ2V0X3JlZ3MJCT0gcnRsODE2OV9nZXRfcmVncywKIAkuZ2V0X3dvbAkJPSBydGw4MTY5X2dldF93b2wsCiAJLnNldF93b2wJCT0gcnRsODE2OV9zZXRfd29sLAogCS5nZXRfc3RyaW5ncwkJPSBydGw4MTY5X2dldF9zdHJpbmdzLAogCS5nZXRfc3NldF9jb3VudAkJPSBydGw4MTY5X2dldF9zc2V0X2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cwk9IHJ0bDgxNjlfZ2V0X2V0aHRvb2xfc3RhdHMsCi0JLnNldF9mbGFncwkJPSBydGw4MTY5X3NldF9mbGFncywKLQkuZ2V0X2ZsYWdzCQk9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLAogfTsKIAogc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfbWFjX3ZlcnNpb24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsCi0JCQkJICAgIHZvaWQgX19pb21lbSAqaW9hZGRyKQorCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBkZWZhdWx0X3ZlcnNpb24pCiB7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOwogCS8qCiAJICogVGhlIGRyaXZlciBjdXJyZW50bHkgaGFuZGxlcyB0aGUgODE2OEJmIGFuZCB0aGUgODE2OEJlIGlkZW50aWNhbGx5CiAJICogYnV0IHRoZXkgY2FuIGJlIGlkZW50aWZpZWQgbW9yZSBzcGVjaWZpY2FsbHkgdGhyb3VnaCB0aGUgdGVzdCBiZWxvdwpAQCAtMTU0Nyw2ICsxNjI2LDExIEBACiAJCXUzMiB2YWw7CiAJCWludCBtYWNfdmVyc2lvbjsKIAl9IG1hY19pbmZvW10gPSB7CisJCS8qIDgxNjhFIGZhbWlseS4gKi8KKwkJeyAweDdjZjAwMDAwLCAweDJjMjAwMDAwLAlSVExfR0lHQV9NQUNfVkVSXzMzIH0sCisJCXsgMHg3Y2YwMDAwMCwgMHgyYzEwMDAwMCwJUlRMX0dJR0FfTUFDX1ZFUl8zMiB9LAorCQl7IDB4N2M4MDAwMDAsIDB4MmMwMDAwMDAsCVJUTF9HSUdBX01BQ19WRVJfMzMgfSwKKwogCQkvKiA4MTY4RCBmYW1pbHkuICovCiAJCXsgMHg3Y2YwMDAwMCwgMHgyODMwMDAwMCwJUlRMX0dJR0FfTUFDX1ZFUl8yNiB9LAogCQl7IDB4N2NmMDAwMDAsIDB4MjgxMDAwMDAsCVJUTF9HSUdBX01BQ19WRVJfMjUgfSwKQEAgLTE1NTUsNiArMTYzOSw3IEBACiAJCS8qIDgxNjhEUCBmYW1pbHkuICovCiAJCXsgMHg3Y2YwMDAwMCwgMHgyODgwMDAwMCwJUlRMX0dJR0FfTUFDX1ZFUl8yNyB9LAogCQl7IDB4N2NmMDAwMDAsIDB4MjhhMDAwMDAsCVJUTF9HSUdBX01BQ19WRVJfMjggfSwKKwkJeyAweDdjZjAwMDAwLCAweDI4YjAwMDAwLAlSVExfR0lHQV9NQUNfVkVSXzMxIH0sCiAKIAkJLyogODE2OEMgZmFtaWx5LiAqLwogCQl7IDB4N2NmMDAwMDAsIDB4M2NiMDAwMDAsCVJUTF9HSUdBX01BQ19WRVJfMjQgfSwKQEAgLTE1NzQsNiArMTY1OSw3IEBACiAJCXsgMHg3YzgwMDAwMCwgMHgzMDAwMDAwMCwJUlRMX0dJR0FfTUFDX1ZFUl8xMSB9LAogCiAJCS8qIDgxMDEgZmFtaWx5LiAqLworCQl7IDB4N2NmMDAwMDAsIDB4NDBiMDAwMDAsCVJUTF9HSUdBX01BQ19WRVJfMzAgfSwKIAkJeyAweDdjZjAwMDAwLCAweDQwYTAwMDAwLAlSVExfR0lHQV9NQUNfVkVSXzMwIH0sCiAJCXsgMHg3Y2YwMDAwMCwgMHg0MDkwMDAwMCwJUlRMX0dJR0FfTUFDX1ZFUl8yOSB9LAogCQl7IDB4N2M4MDAwMDAsIDB4NDA4MDAwMDAsCVJUTF9HSUdBX01BQ19WRVJfMzAgfSwKQEAgLTE2MTAsNiArMTY5NiwxMiBAQAogCXdoaWxlICgocmVnICYgcC0+bWFzaykgIT0gcC0+dmFsKQogCQlwKys7CiAJdHAtPm1hY192ZXJzaW9uID0gcC0+bWFjX3ZlcnNpb247CisKKwlpZiAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19OT05FKSB7CisJCW5ldGlmX25vdGljZSh0cCwgcHJvYmUsIGRldiwKKwkJCSAgICAgInVua25vd24gTUFDLCB1c2luZyBmYW1pbHkgZGVmYXVsdFxuIik7CisJCXRwLT5tYWNfdmVyc2lvbiA9IGRlZmF1bHRfdmVyc2lvbjsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bDgxNjlfcHJpbnRfbWFjX3ZlcnNpb24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCkBAIC0xNjc5LDE0ICsxNzcxLDE0IEBACiAJCWNhc2UgUEhZX0JKTVBOOgogCQkJaWYgKHJlZ25vID4gaW5kZXgpIHsKIAkJCQluZXRpZl9lcnIodHAsIHByb2JlLCB0cC0+ZGV2LAotCQkJCQkiT3V0IG9mIHJhbmdlIG9mIGZpcm13YXJlXG4iKTsKKwkJCQkJICAiT3V0IG9mIHJhbmdlIG9mIGZpcm13YXJlXG4iKTsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBQSFlfUkVBRENPVU5UX0VRX1NLSVA6CiAJCQlpZiAoaW5kZXggKyAyID49IGZ3X3NpemUpIHsKIAkJCQluZXRpZl9lcnIodHAsIHByb2JlLCB0cC0+ZGV2LAotCQkJCQkiT3V0IG9mIHJhbmdlIG9mIGZpcm13YXJlXG4iKTsKKwkJCQkJICAiT3V0IG9mIHJhbmdlIG9mIGZpcm13YXJlXG4iKTsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCQlicmVhazsKQEAgLTE2OTUsNyArMTc4Nyw3IEBACiAJCWNhc2UgUEhZX1NLSVBOOgogCQkJaWYgKGluZGV4ICsgMSArIHJlZ25vID49IGZ3X3NpemUpIHsKIAkJCQluZXRpZl9lcnIodHAsIHByb2JlLCB0cC0+ZGV2LAotCQkJCQkiT3V0IG9mIHJhbmdlIG9mIGZpcm13YXJlXG4iKTsKKwkJCQkJICAiT3V0IG9mIHJhbmdlIG9mIGZpcm13YXJlXG4iKTsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCQlicmVhazsKQEAgLTE3NTEsMTAgKzE4NDMsNyBAQAogCQkJaW5kZXgrKzsKIAkJCWJyZWFrOwogCQljYXNlIFBIWV9SRUFEQ09VTlRfRVFfU0tJUDoKLQkJCWlmIChjb3VudCA9PSBkYXRhKQotCQkJCWluZGV4ICs9IDI7Ci0JCQllbHNlCi0JCQkJaW5kZXggKz0gMTsKKwkJCWluZGV4ICs9IChjb3VudCA9PSBkYXRhKSA/IDIgOiAxOwogCQkJYnJlYWs7CiAJCWNhc2UgUEhZX0NPTVBfRVFfU0tJUE46CiAJCQlpZiAocHJlZGF0YSA9PSBkYXRhKQpAQCAtMTc4OSwyNSArMTg3OCwyNiBAQAogCiBzdGF0aWMgdm9pZCBydGxfcmVsZWFzZV9maXJtd2FyZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKLQlyZWxlYXNlX2Zpcm13YXJlKHRwLT5mdyk7Ci0JdHAtPmZ3ID0gTlVMTDsKKwlpZiAoIUlTX0VSUl9PUl9OVUxMKHRwLT5mdykpCisJCXJlbGVhc2VfZmlybXdhcmUodHAtPmZ3KTsKKwl0cC0+ZncgPSBSVExfRklSTVdBUkVfVU5LTk9XTjsKIH0KIAotc3RhdGljIGludCBydGxfYXBwbHlfZmlybXdhcmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGNvbnN0IGNoYXIgKmZ3X25hbWUpCitzdGF0aWMgdm9pZCBydGxfYXBwbHlfZmlybXdhcmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICoqZncgPSAmdHAtPmZ3OwotCWludCByYyA9ICEqZnc7Ci0KLQlpZiAocmMpIHsKLQkJcmMgPSByZXF1ZXN0X2Zpcm13YXJlKGZ3LCBmd19uYW1lLCAmdHAtPnBjaV9kZXYtPmRldik7Ci0JCWlmIChyYyA8IDApCi0JCQlnb3RvIG91dDsKLQl9CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IHRwLT5mdzsKIAogCS8qIFRPRE86IHJlbGVhc2UgZmlybXdhcmUgb25jZSBydGxfcGh5X3dyaXRlX2Z3IHNpZ25hbHMgZmFpbHVyZXMuICovCi0JcnRsX3BoeV93cml0ZV9mdyh0cCwgKmZ3KTsKLW91dDoKLQlyZXR1cm4gcmM7CisJaWYgKCFJU19FUlJfT1JfTlVMTChmdykpCisJCXJ0bF9waHlfd3JpdGVfZncodHAsIGZ3KTsKK30KKworc3RhdGljIHZvaWQgcnRsX2FwcGx5X2Zpcm13YXJlX2NvbmQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHU4IHJlZywgdTE2IHZhbCkKK3sKKwlpZiAocnRsX3JlYWRwaHkodHAsIHJlZykgIT0gdmFsKQorCQluZXRpZl93YXJuKHRwLCBodywgdHAtPmRldiwgImNoaXBzZXQgbm90IHJlYWR5IGZvciBmaXJtd2FyZVxuIik7CisJZWxzZQorCQlydGxfYXBwbHlfZmlybXdhcmUodHApOwogfQogCiBzdGF0aWMgdm9pZCBydGw4MTY5c19od19waHlfY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQpAQCAtMjE2NCw3ICsyMjU0LDcgQEAKIAogCQkvKgogCQkgKiBUeCBFcnJvciBJc3N1ZQotCQkgKiBlbmhhbmNlIGxpbmUgZHJpdmVyIHBvd2VyCisJCSAqIEVuaGFuY2UgbGluZSBkcml2ZXIgcG93ZXIKIAkJICovCiAJCXsgMHgxZiwgMHgwMDAyIH0sCiAJCXsgMHgwNiwgMHg1NTYxIH0sCkBAIC0yMjQ2LDEwICsyMzM2LDggQEAKIAogCXJ0bF93cml0ZXBoeSh0cCwgMHgxZiwgMHgwMDA1KTsKIAlydGxfd3JpdGVwaHkodHAsIDB4MDUsIDB4MDAxYik7Ci0JaWYgKChydGxfcmVhZHBoeSh0cCwgMHgwNikgIT0gMHhiZjAwKSB8fAotCSAgICAocnRsX2FwcGx5X2Zpcm13YXJlKHRwLCBGSVJNV0FSRV84MTY4RF8xKSA8IDApKSB7Ci0JCW5ldGlmX3dhcm4odHAsIHByb2JlLCB0cC0+ZGV2LCAidW5hYmxlIHRvIGFwcGx5IGZpcm13YXJlIHBhdGNoXG4iKTsKLQl9CisKKwlydGxfYXBwbHlfZmlybXdhcmVfY29uZCh0cCwgTUlJX0VYUEFOU0lPTiwgMHhiZjAwKTsKIAogCXJ0bF93cml0ZXBoeSh0cCwgMHgxZiwgMHgwMDAwKTsKIH0KQEAgLTIyNzgsNyArMjM2Niw3IEBACiAKIAkJLyoKIAkJICogVHggRXJyb3IgSXNzdWUKLQkJICogZW5oYW5jZSBsaW5lIGRyaXZlciBwb3dlcgorCQkgKiBFbmhhbmNlIGxpbmUgZHJpdmVyIHBvd2VyCiAJCSAqLwogCQl7IDB4MWYsIDB4MDAwMiB9LAogCQl7IDB4MDYsIDB4NTU2MSB9LApAQCAtMjM1MSwxMCArMjQzOSw4IEBACiAKIAlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwNSk7CiAJcnRsX3dyaXRlcGh5KHRwLCAweDA1LCAweDAwMWIpOwotCWlmICgocnRsX3JlYWRwaHkodHAsIDB4MDYpICE9IDB4YjMwMCkgfHwKLQkgICAgKHJ0bF9hcHBseV9maXJtd2FyZSh0cCwgRklSTVdBUkVfODE2OERfMikgPCAwKSkgewotCQluZXRpZl93YXJuKHRwLCBwcm9iZSwgdHAtPmRldiwgInVuYWJsZSB0byBhcHBseSBmaXJtd2FyZSBwYXRjaFxuIik7Ci0JfQorCisJcnRsX2FwcGx5X2Zpcm13YXJlX2NvbmQodHAsIE1JSV9FWFBBTlNJT04sIDB4YjMwMCk7CiAKIAlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwMCk7CiB9CkBAIC0yNDM2LDYgKzI1MjIsNzkgQEAKIAlydGxfcGF0Y2hwaHkodHAsIDB4MGQsIDEgPDwgNSk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0bDgxNjhlX2h3X3BoeV9jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdFtdID0geworCQkvKiBFbmFibGUgRGVsYXkgY2FwICovCisJCXsgMHgxZiwgMHgwMDA1IH0sCisJCXsgMHgwNSwgMHg4YjgwIH0sCisJCXsgMHgwNiwgMHhjODk2IH0sCisJCXsgMHgxZiwgMHgwMDAwIH0sCisKKwkJLyogQ2hhbm5lbCBlc3RpbWF0aW9uIGZpbmUgdHVuZSAqLworCQl7IDB4MWYsIDB4MDAwMSB9LAorCQl7IDB4MGIsIDB4NmMyMCB9LAorCQl7IDB4MDcsIDB4Mjg3MiB9LAorCQl7IDB4MWMsIDB4ZWZmZiB9LAorCQl7IDB4MWYsIDB4MDAwMyB9LAorCQl7IDB4MTQsIDB4NjQyMCB9LAorCQl7IDB4MWYsIDB4MDAwMCB9LAorCisJCS8qIFVwZGF0ZSBQRk0gJiAxME0gVFggaWRsZSB0aW1lciAqLworCQl7IDB4MWYsIDB4MDAwNyB9LAorCQl7IDB4MWUsIDB4MDAyZiB9LAorCQl7IDB4MTUsIDB4MTkxOSB9LAorCQl7IDB4MWYsIDB4MDAwMCB9LAorCisJCXsgMHgxZiwgMHgwMDA3IH0sCisJCXsgMHgxZSwgMHgwMGFjIH0sCisJCXsgMHgxOCwgMHgwMDA2IH0sCisJCXsgMHgxZiwgMHgwMDAwIH0KKwl9OworCisJcnRsX2FwcGx5X2Zpcm13YXJlKHRwKTsKKworCXJ0bF93cml0ZXBoeV9iYXRjaCh0cCwgcGh5X3JlZ19pbml0LCBBUlJBWV9TSVpFKHBoeV9yZWdfaW5pdCkpOworCisJLyogRENPIGVuYWJsZSBmb3IgMTBNIElETEUgUG93ZXIgKi8KKwlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwNyk7CisJcnRsX3dyaXRlcGh5KHRwLCAweDFlLCAweDAwMjMpOworCXJ0bF93MXcwX3BoeSh0cCwgMHgxNywgMHgwMDA2LCAweDAwMDApOworCXJ0bF93cml0ZXBoeSh0cCwgMHgxZiwgMHgwMDAwKTsKKworCS8qIEZvciBpbXBlZGFuY2UgbWF0Y2hpbmcgKi8KKwlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwMik7CisJcnRsX3cxdzBfcGh5KHRwLCAweDA4LCAweDgwMDAsIDB4N2YwMCk7CisJcnRsX3dyaXRlcGh5KHRwLCAweDFmLCAweDAwMDApOworCisJLyogUEhZIGF1dG8gc3BlZWQgZG93biAqLworCXJ0bF93cml0ZXBoeSh0cCwgMHgxZiwgMHgwMDA3KTsKKwlydGxfd3JpdGVwaHkodHAsIDB4MWUsIDB4MDAyZCk7CisJcnRsX3cxdzBfcGh5KHRwLCAweDE4LCAweDAwNTAsIDB4MDAwMCk7CisJcnRsX3dyaXRlcGh5KHRwLCAweDFmLCAweDAwMDApOworCXJ0bF93MXcwX3BoeSh0cCwgMHgxNCwgMHg4MDAwLCAweDAwMDApOworCisJcnRsX3dyaXRlcGh5KHRwLCAweDFmLCAweDAwMDUpOworCXJ0bF93cml0ZXBoeSh0cCwgMHgwNSwgMHg4Yjg2KTsKKwlydGxfdzF3MF9waHkodHAsIDB4MDYsIDB4MDAwMSwgMHgwMDAwKTsKKwlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwMCk7CisKKwlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwNSk7CisJcnRsX3dyaXRlcGh5KHRwLCAweDA1LCAweDhiODUpOworCXJ0bF93MXcwX3BoeSh0cCwgMHgwNiwgMHgwMDAwLCAweDIwMDApOworCXJ0bF93cml0ZXBoeSh0cCwgMHgxZiwgMHgwMDA3KTsKKwlydGxfd3JpdGVwaHkodHAsIDB4MWUsIDB4MDAyMCk7CisJcnRsX3cxdzBfcGh5KHRwLCAweDE1LCAweDAwMDAsIDB4MTEwMCk7CisJcnRsX3dyaXRlcGh5KHRwLCAweDFmLCAweDAwMDYpOworCXJ0bF93cml0ZXBoeSh0cCwgMHgwMCwgMHg1YTAwKTsKKwlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwMCk7CisJcnRsX3dyaXRlcGh5KHRwLCAweDBkLCAweDAwMDcpOworCXJ0bF93cml0ZXBoeSh0cCwgMHgwZSwgMHgwMDNjKTsKKwlydGxfd3JpdGVwaHkodHAsIDB4MGQsIDB4NDAwNyk7CisJcnRsX3dyaXRlcGh5KHRwLCAweDBlLCAweDAwMDApOworCXJ0bF93cml0ZXBoeSh0cCwgMHgwZCwgMHgwMDAwKTsKK30KKwogc3RhdGljIHZvaWQgcnRsODEwMmVfaHdfcGh5X2NvbmZpZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHBoeV9yZWcgcGh5X3JlZ19pbml0W10gPSB7CkBAIC0yNDc0LDggKzI2MzMsNyBAQAogCXJ0bF93cml0ZXBoeSh0cCwgMHgxOCwgMHgwMzEwKTsKIAltc2xlZXAoMTAwKTsKIAotCWlmIChydGxfYXBwbHlfZmlybXdhcmUodHAsIEZJUk1XQVJFXzgxMDVFXzEpIDwgMCkKLQkJbmV0aWZfd2Fybih0cCwgcHJvYmUsIHRwLT5kZXYsICJ1bmFibGUgdG8gYXBwbHkgZmlybXdhcmUgcGF0Y2hcbiIpOworCXJ0bF9hcHBseV9maXJtd2FyZSh0cCk7CiAKIAlydGxfd3JpdGVwaHlfYmF0Y2godHAsIHBoeV9yZWdfaW5pdCwgQVJSQVlfU0laRShwaHlfcmVnX2luaXQpKTsKIH0KQEAgLTI1NTEsNiArMjcwOSwxMyBAQAogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zMDoKIAkJcnRsODEwNWVfaHdfcGh5X2NvbmZpZyh0cCk7CiAJCWJyZWFrOworCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zMToKKwkJLyogTm9uZS4gKi8KKwkJYnJlYWs7CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzMyOgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zMzoKKwkJcnRsODE2OGVfaHdfcGh5X2NvbmZpZyh0cCk7CisJCWJyZWFrOwogCiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0yNTY3LDkgKzI3MzIsNiBAQAogCiAJYXNzZXJ0KHRwLT5tYWNfdmVyc2lvbiA+IFJUTF9HSUdBX01BQ19WRVJfMDEpOwogCi0JaWYgKCEodHAtPnBoeV8xMDAwX2N0cmxfcmVnICYgQURWRVJUSVNFXzEwMDBGVUxMKSkKLQkJcmV0dXJuOwotCiAJc3Bpbl9sb2NrX2lycSgmdHAtPmxvY2spOwogCiAJaWYgKHRwLT5waHlfcmVzZXRfcGVuZGluZyh0cCkpIHsKQEAgLTI1OTQsMjggKzI3NTYsNiBAQAogCXNwaW5fdW5sb2NrX2lycSgmdHAtPmxvY2spOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcnRsODE2OV9kZWxldGVfdGltZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyID0gJnRwLT50aW1lcjsKLQotCWlmICh0cC0+bWFjX3ZlcnNpb24gPD0gUlRMX0dJR0FfTUFDX1ZFUl8wMSkKLQkJcmV0dXJuOwotCi0JZGVsX3RpbWVyX3N5bmModGltZXIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcnRsODE2OV9yZXF1ZXN0X3RpbWVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciA9ICZ0cC0+dGltZXI7Ci0KLQlpZiAodHAtPm1hY192ZXJzaW9uIDw9IFJUTF9HSUdBX01BQ19WRVJfMDEpCi0JCXJldHVybjsKLQotCW1vZF90aW1lcih0aW1lciwgamlmZmllcyArIFJUTDgxNjlfUEhZX1RJTUVPVVQpOwotfQotCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIC8qCiAgKiBQb2xsaW5nICdpbnRlcnJ1cHQnIC0gdXNlZCBieSB0aGluZ3MgbGlrZSBuZXRjb25zb2xlIHRvIHNlbmQgc2ticwpAQCAtMjY4MywxMSArMjgyMywxMSBAQAogCXJ0bDgxNjlfcGh5X3Jlc2V0KGRldiwgdHApOwogCiAJcnRsODE2OV9zZXRfc3BlZWQoZGV2LCBBVVRPTkVHX0VOQUJMRSwgU1BFRURfMTAwMCwgRFVQTEVYX0ZVTEwsCi0JCUFEVkVSVElTRURfMTBiYXNlVF9IYWxmIHwgQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwgfAotCQlBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYgfCBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwgfAotCQkodHAtPm1paS5zdXBwb3J0c19nbWlpID8KLQkJCUFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYgfAotCQkJQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCA6IDApKTsKKwkJCSAgQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYgfCBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCB8CisJCQkgIEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZiB8IEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCB8CisJCQkgICh0cC0+bWlpLnN1cHBvcnRzX2dtaWkgPworCQkJICAgQURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZiB8CisJCQkgICBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsIDogMCkpOwogCiAJaWYgKFJUTF9SOChQSFlzdGF0dXMpICYgVEJJX0VuYWJsZSkKIAkJbmV0aWZfaW5mbyh0cCwgbGluaywgZGV2LCAiVEJJIGF1dG8tbmVnb3RpYXRpbmdcbiIpOwpAQCAtMjc0MCw3ICsyODgwLDggQEAKIAlyZXR1cm4gbmV0aWZfcnVubmluZyhkZXYpID8gdHAtPmRvX2lvY3RsKHRwLCBkYXRhLCBjbWQpIDogLUVOT0RFVjsKIH0KIAotc3RhdGljIGludCBydGxfeG1paV9pb2N0bChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IG1paV9pb2N0bF9kYXRhICpkYXRhLCBpbnQgY21kKQorc3RhdGljIGludCBydGxfeG1paV9pb2N0bChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKKwkJCSAgc3RydWN0IG1paV9pb2N0bF9kYXRhICpkYXRhLCBpbnQgY21kKQogewogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTSU9DR01JSVBIWToKQEAgLTI4NDAsNiArMjk4MSw4IEBACiAJLm5kb190eF90aW1lb3V0CQk9IHJ0bDgxNjlfdHhfdGltZW91dCwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIAkubmRvX2NoYW5nZV9tdHUJCT0gcnRsODE2OV9jaGFuZ2VfbXR1LAorCS5uZG9fZml4X2ZlYXR1cmVzCT0gcnRsODE2OV9maXhfZmVhdHVyZXMsCisJLm5kb19zZXRfZmVhdHVyZXMJPSBydGw4MTY5X3NldF9mZWF0dXJlcywKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHJ0bF9zZXRfbWFjX2FkZHJlc3MsCiAJLm5kb19kb19pb2N0bAkJPSBydGw4MTY5X2lvY3RsLAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gcnRsX3NldF9yeF9tb2RlLApAQCAtMjg1OSw2ICszMDAyLDcgQEAKIAkJb3BzLT5yZWFkCT0gcjgxNjhkcF8xX21kaW9fcmVhZDsKIAkJYnJlYWs7CiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI4OgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zMToKIAkJb3BzLT53cml0ZQk9IHI4MTY4ZHBfMl9tZGlvX3dyaXRlOwogCQlvcHMtPnJlYWQJPSByODE2OGRwXzJfbWRpb19yZWFkOwogCQlicmVhazsKQEAgLTI5MDAsMzMgKzMwNDQsODIgQEAKIHN0YXRpYyB2b2lkIHI4MTY4X3BoeV9wb3dlcl91cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKIAlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwMCk7Ci0JcnRsX3dyaXRlcGh5KHRwLCAweDBlLCAweDAwMDApOworCXN3aXRjaCAodHAtPm1hY192ZXJzaW9uKSB7CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzExOgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8xMjoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMTc6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzE4OgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8xOToKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjA6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzIxOgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yMjoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjM6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI0OgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNToKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjY6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI3OgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yODoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMzE6CisJCXJ0bF93cml0ZXBoeSh0cCwgMHgwZSwgMHgwMDAwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQogCXJ0bF93cml0ZXBoeSh0cCwgTUlJX0JNQ1IsIEJNQ1JfQU5FTkFCTEUpOwogfQogCiBzdGF0aWMgdm9pZCByODE2OF9waHlfcG93ZXJfZG93bihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKIAlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwMCk7Ci0JcnRsX3dyaXRlcGh5KHRwLCAweDBlLCAweDAyMDApOwotCXJ0bF93cml0ZXBoeSh0cCwgTUlJX0JNQ1IsIEJNQ1JfUERPV04pOworCXN3aXRjaCAodHAtPm1hY192ZXJzaW9uKSB7CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzMyOgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zMzoKKwkJcnRsX3dyaXRlcGh5KHRwLCBNSUlfQk1DUiwgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfUERPV04pOworCQlicmVhazsKKworCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8xMToKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMTI6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzE3OgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8xODoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMTk6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzIwOgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yMToKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjI6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzIzOgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNDoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjU6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI2OgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNzoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjg6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzMxOgorCQlydGxfd3JpdGVwaHkodHAsIDB4MGUsIDB4MDIwMCk7CisJZGVmYXVsdDoKKwkJcnRsX3dyaXRlcGh5KHRwLCBNSUlfQk1DUiwgQk1DUl9QRE9XTik7CisJCWJyZWFrOworCX0KIH0KIAogc3RhdGljIHZvaWQgcjgxNjhfcGxsX3Bvd2VyX2Rvd24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOwogCi0JaWYgKCgodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjcpIHx8Ci0JICAgICAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjgpKSAmJgotCSAgICAob2NwX3JlYWQodHAsIDB4MGYsIDB4MDAxMCkgJiAweDAwMDA4MDAwKSkgeworCWlmICgodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjcgfHwKKwkgICAgIHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzI4IHx8CisJICAgICB0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zMSkgJiYKKwkgICAgcjgxNjhkcF9jaGVja19kYXNoKHRwKSkgewogCQlyZXR1cm47CiAJfQogCi0JaWYgKCgodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjMpIHx8Ci0JICAgICAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjQpKSAmJgorCWlmICgodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjMgfHwKKwkgICAgIHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzI0KSAmJgogCSAgICAoUlRMX1IxNihDUGx1c0NtZCkgJiBBU0YpKSB7CiAJCXJldHVybjsKIAl9CiAKKwlpZiAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzIgfHwKKwkgICAgdHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzMpCisJCXJ0bF9lcGh5X3dyaXRlKGlvYWRkciwgMHgxOSwgMHhmZjY0KTsKKwogCWlmIChfX3J0bDgxNjlfZ2V0X3dvbCh0cCkgJiBXQUtFX0FOWSkgewogCQlydGxfd3JpdGVwaHkodHAsIDB4MWYsIDB4MDAwMCk7CiAJCXJ0bF93cml0ZXBoeSh0cCwgTUlJX0JNQ1IsIDB4MDAwMCk7CkBAIC0yOTQzLDYgKzMxMzYsOSBAQAogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNjoKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjc6CiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI4OgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zMToKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMzI6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzMzOgogCQlSVExfVzgoUE1DSCwgUlRMX1I4KFBNQ0gpICYgfjB4ODApOwogCQlicmVhazsKIAl9CkBAIC0yOTUyLDkgKzMxNDgsMTAgQEAKIHsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CiAKLQlpZiAoKCh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yNykgfHwKLQkgICAgICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yOCkpICYmCi0JICAgIChvY3BfcmVhZCh0cCwgMHgwZiwgMHgwMDEwKSAmIDB4MDAwMDgwMDApKSB7CisJaWYgKCh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yNyB8fAorCSAgICAgdHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjggfHwKKwkgICAgIHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzMxKSAmJgorCSAgICByODE2OGRwX2NoZWNrX2Rhc2godHApKSB7CiAJCXJldHVybjsKIAl9CiAKQEAgLTI5NjMsNiArMzE2MCw5IEBACiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI2OgogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNzoKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjg6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzMxOgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zMjoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMzM6CiAJCVJUTF9XOChQTUNILCBSVExfUjgoUE1DSCkgfCAweDgwKTsKIAkJYnJlYWs7CiAJfQpAQCAtMzAxNyw2ICszMjE3LDkgQEAKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjY6CiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI3OgogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yODoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMzE6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzMyOgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zMzoKIAkJb3BzLT5kb3duCT0gcjgxNjhfcGxsX3Bvd2VyX2Rvd247CiAJCW9wcy0+dXAJCT0gcjgxNjhfcGxsX3Bvd2VyX3VwOwogCQlicmVhazsKQEAgLTMwMjgsNiArMzIzMSwyMiBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgcnRsX2h3X3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQoreworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKKwlpbnQgaTsKKworCS8qIFNvZnQgcmVzZXQgdGhlIGNoaXAuICovCisJUlRMX1c4KENoaXBDbWQsIENtZFJlc2V0KTsKKworCS8qIENoZWNrIHRoYXQgdGhlIGNoaXAgaGFzIGZpbmlzaGVkIHRoZSByZXNldC4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKwkJaWYgKChSVExfUjgoQ2hpcENtZCkgJiBDbWRSZXNldCkgPT0gMCkKKwkJCWJyZWFrOworCQltc2xlZXBfaW50ZXJydXB0aWJsZSgxKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgX19kZXZpbml0CiBydGw4MTY5X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewpAQCAtMzAzNyw3ICszMjU2LDcgQEAKIAlzdHJ1Y3QgbWlpX2lmX2luZm8gKm1paTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXZvaWQgX19pb21lbSAqaW9hZGRyOwotCXVuc2lnbmVkIGludCBpOworCWludCBjaGlwc2V0LCBpOwogCWludCByYzsKIAogCWlmIChuZXRpZl9tc2dfZHJ2KCZkZWJ1ZykpIHsKQEAgLTMxMjcsNiArMzM0Niw3IEBACiAJCXJjID0gLUVJTzsKIAkJZ290byBlcnJfb3V0X2ZyZWVfcmVzXzM7CiAJfQorCXRwLT5tbWlvX2FkZHIgPSBpb2FkZHI7CiAKIAl0cC0+cGNpZV9jYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfRVhQKTsKIAlpZiAoIXRwLT5wY2llX2NhcCkKQEAgLTMxMzQsMjIgKzMzNTQsMTQgQEAKIAogCVJUTF9XMTYoSW50ck1hc2ssIDB4MDAwMCk7CiAKLQkvKiBTb2Z0IHJlc2V0IHRoZSBjaGlwLiAqLwotCVJUTF9XOChDaGlwQ21kLCBDbWRSZXNldCk7Ci0KLQkvKiBDaGVjayB0aGF0IHRoZSBjaGlwIGhhcyBmaW5pc2hlZCB0aGUgcmVzZXQuICovCi0JZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7Ci0JCWlmICgoUlRMX1I4KENoaXBDbWQpICYgQ21kUmVzZXQpID09IDApCi0JCQlicmVhazsKLQkJbXNsZWVwX2ludGVycnVwdGlibGUoMSk7Ci0JfQorCXJ0bF9od19yZXNldCh0cCk7CiAKIAlSVExfVzE2KEludHJTdGF0dXMsIDB4ZmZmZik7CiAKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAogCS8qIElkZW50aWZ5IGNoaXAgYXR0YWNoZWQgdG8gYm9hcmQgKi8KLQlydGw4MTY5X2dldF9tYWNfdmVyc2lvbih0cCwgaW9hZGRyKTsKKwlydGw4MTY5X2dldF9tYWNfdmVyc2lvbih0cCwgZGV2LCBjZmctPmRlZmF1bHRfdmVyKTsKIAogCS8qCiAJICogUHJldGVuZCB3ZSBhcmUgdXNpbmcgVkxBTnM7IFRoaXMgYnlwYXNzZXMgYSBuYXN0eSBidWcgd2hlcmUKQEAgLTMxNjEsMjUgKzMzNzMsMTAgQEAKIAlydGxfaW5pdF9tZGlvX29wcyh0cCk7CiAJcnRsX2luaXRfcGxsX3Bvd2VyX29wcyh0cCk7CiAKLQkvKiBVc2UgYXBwcm9wcmlhdGUgZGVmYXVsdCBpZiB1bmtub3duICovCi0JaWYgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfTk9ORSkgewotCQluZXRpZl9ub3RpY2UodHAsIHByb2JlLCBkZXYsCi0JCQkgICAgICJ1bmtub3duIE1BQywgdXNpbmcgZmFtaWx5IGRlZmF1bHRcbiIpOwotCQl0cC0+bWFjX3ZlcnNpb24gPSBjZmctPmRlZmF1bHRfdmVyOwotCX0KLQogCXJ0bDgxNjlfcHJpbnRfbWFjX3ZlcnNpb24odHApOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocnRsX2NoaXBfaW5mbyk7IGkrKykgewotCQlpZiAodHAtPm1hY192ZXJzaW9uID09IHJ0bF9jaGlwX2luZm9baV0ubWFjX3ZlcnNpb24pCi0JCQlicmVhazsKLQl9Ci0JaWYgKGkgPT0gQVJSQVlfU0laRShydGxfY2hpcF9pbmZvKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkiZHJpdmVyIGJ1ZywgTUFDIHZlcnNpb24gbm90IGZvdW5kIGluIHJ0bF9jaGlwX2luZm9cbiIpOwotCQlnb3RvIGVycl9vdXRfbXNpXzQ7Ci0JfQotCXRwLT5jaGlwc2V0ID0gaTsKKwljaGlwc2V0ID0gdHAtPm1hY192ZXJzaW9uOworCXRwLT50eGRfdmVyc2lvbiA9IHJ0bF9jaGlwX2luZm9zW2NoaXBzZXRdLnR4ZF92ZXJzaW9uOwogCiAJUlRMX1c4KENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTsKIAlSVExfVzgoQ29uZmlnMSwgUlRMX1I4KENvbmZpZzEpIHwgUE1FbmFibGUpOwpAQCAtMzE5OSw4ICszMzk2LDYgQEAKIAkJdHAtPnBoeV9yZXNldF9wZW5kaW5nID0gcnRsODE2OV90YmlfcmVzZXRfcGVuZGluZzsKIAkJdHAtPmxpbmtfb2sgPSBydGw4MTY5X3RiaV9saW5rX29rOwogCQl0cC0+ZG9faW9jdGwgPSBydGxfdGJpX2lvY3RsOwotCi0JCXRwLT5waHlfMTAwMF9jdHJsX3JlZyA9IEFEVkVSVElTRV8xMDAwRlVMTDsgLyogSW1wbGllZCBieSBUQkkgKi8KIAl9IGVsc2UgewogCQl0cC0+c2V0X3NwZWVkID0gcnRsODE2OV9zZXRfc3BlZWRfeG1paTsKIAkJdHAtPmdldF9zZXR0aW5ncyA9IHJ0bDgxNjlfZ3NldF94bWlpOwpAQCAtMzIxMiw4ICszNDA3LDYgQEAKIAogCXNwaW5fbG9ja19pbml0KCZ0cC0+bG9jayk7CiAKLQl0cC0+bW1pb19hZGRyID0gaW9hZGRyOwotCiAJLyogR2V0IE1BQyBhZGRyZXNzICovCiAJZm9yIChpID0gMDsgaSA8IE1BQ19BRERSX0xFTjsgaSsrKQogCQlkZXYtPmRldl9hZGRyW2ldID0gUlRMX1I4KE1BQzAgKyBpKTsKQEAgLTMyMjYsNyArMzQxOSwxOSBAQAogCiAJbmV0aWZfbmFwaV9hZGQoZGV2LCAmdHAtPm5hcGksIHJ0bDgxNjlfcG9sbCwgUjgxNjlfTkFQSV9XRUlHSFQpOwogCi0JZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFhfUlggfCBORVRJRl9GX0dSTzsKKwkvKiBkb24ndCBlbmFibGUgU0csIElQX0NTVU0gYW5kIFRTTyBieSBkZWZhdWx0IC0gaXQgbWlnaHQgbm90IHdvcmsKKwkgKiBwcm9wZXJseSBmb3IgYWxsIGRldmljZXMgKi8KKwlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfUlhDU1VNIHwKKwkJTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYOworCisJZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1RTTyB8CisJCU5FVElGX0ZfUlhDU1VNIHwgTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYOworCWRldi0+dmxhbl9mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1RTTyB8CisJCU5FVElGX0ZfSElHSERNQTsKKworCWlmICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wNSkKKwkJLyogODExMFNDZCByZXF1aXJlcyBoYXJkd2FyZSBSeCBWTEFOIC0gZGlzYWxsb3cgdG9nZ2xpbmcgKi8KKwkJZGV2LT5od19mZWF0dXJlcyAmPSB+TkVUSUZfRl9IV19WTEFOX1JYOwogCiAJdHAtPmludHJfbWFzayA9IDB4ZmZmZjsKIAl0cC0+aHdfc3RhcnQgPSBjZmctPmh3X3N0YXJ0OwpAQCAtMzIzNyw2ICszNDQyLDggQEAKIAl0cC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBkZXY7CiAJdHAtPnRpbWVyLmZ1bmN0aW9uID0gcnRsODE2OV9waHlfdGltZXI7CiAKKwl0cC0+ZncgPSBSVExfRklSTVdBUkVfVU5LTk9XTjsKKwogCXJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKHJjIDwgMCkKIAkJZ290byBlcnJfb3V0X21zaV80OwpAQCAtMzI0NCwxMiArMzQ1MSwxMiBAQAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCiAJbmV0aWZfaW5mbyh0cCwgcHJvYmUsIGRldiwgIiVzIGF0IDB4JWx4LCAlcE0sIFhJRCAlMDh4IElSUSAlZFxuIiwKLQkJICAgcnRsX2NoaXBfaW5mb1t0cC0+Y2hpcHNldF0ubmFtZSwKLQkJICAgZGV2LT5iYXNlX2FkZHIsIGRldi0+ZGV2X2FkZHIsCisJCSAgIHJ0bF9jaGlwX2luZm9zW2NoaXBzZXRdLm5hbWUsIGRldi0+YmFzZV9hZGRyLCBkZXYtPmRldl9hZGRyLAogCQkgICAodTMyKShSVExfUjMyKFR4Q29uZmlnKSAmIDB4OWNmMGY4ZmYpLCBkZXYtPmlycSk7CiAKLQlpZiAoKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzI3KSB8fAotCSAgICAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjgpKSB7CisJaWYgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzI3IHx8CisJICAgIHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzI4IHx8CisJICAgIHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzMxKSB7CiAJCXJ0bDgxNjhfZHJpdmVyX3N0YXJ0KHRwKTsKIAl9CiAKQEAgLTMyODEsMTcgKzM0ODgsMTggQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWlmICgodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjcpIHx8Ci0JICAgICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yOCkpIHsKKwlpZiAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjcgfHwKKwkgICAgdHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjggfHwKKwkgICAgdHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzEpIHsKIAkJcnRsODE2OF9kcml2ZXJfc3RvcCh0cCk7CiAJfQogCiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ0cC0+dGFzayk7CiAKLQlydGxfcmVsZWFzZV9maXJtd2FyZSh0cCk7Ci0KIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCisJcnRsX3JlbGVhc2VfZmlybXdhcmUodHApOworCiAJaWYgKHBjaV9kZXZfcnVuX3dha2UocGRldikpCiAJCXBtX3J1bnRpbWVfZ2V0X25vcmVzdW1lKCZwZGV2LT5kZXYpOwogCkBAIC0zMzAzLDYgKzM1MTEsMjcgQEAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0bF9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQoreworCS8qIFJldHVybiBlYXJseSBpZiB0aGUgZmlybXdhcmUgaXMgYWxyZWFkeSBsb2FkZWQgLyBjYWNoZWQuICovCisJaWYgKElTX0VSUih0cC0+ZncpKSB7CisJCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkJbmFtZSA9IHJ0bF9sb29rdXBfZmlybXdhcmVfbmFtZSh0cCk7CisJCWlmIChuYW1lKSB7CisJCQlpbnQgcmM7CisKKwkJCXJjID0gcmVxdWVzdF9maXJtd2FyZSgmdHAtPmZ3LCBuYW1lLCAmdHAtPnBjaV9kZXYtPmRldik7CisJCQlpZiAocmMgPj0gMCkKKwkJCQlyZXR1cm47CisKKwkJCW5ldGlmX3dhcm4odHAsIGlmdXAsIHRwLT5kZXYsICJ1bmFibGUgdG8gbG9hZCAiCisJCQkJImZpcm13YXJlIHBhdGNoICVzICglZClcbiIsIG5hbWUsIHJjKTsKKwkJfQorCQl0cC0+ZncgPSBOVUxMOworCX0KK30KKwogc3RhdGljIGludCBydGw4MTY5X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0zMzM0LDI0ICszNTYzLDI0IEBACiAKIAlzbXBfbWIoKTsKIAorCXJ0bF9yZXF1ZXN0X2Zpcm13YXJlKHRwKTsKKwogCXJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBydGw4MTY5X2ludGVycnVwdCwKIAkJCSAgICAgKHRwLT5mZWF0dXJlcyAmIFJUTF9GRUFUVVJFX01TSSkgPyAwIDogSVJRRl9TSEFSRUQsCiAJCQkgICAgIGRldi0+bmFtZSwgZGV2KTsKIAlpZiAocmV0dmFsIDwgMCkKLQkJZ290byBlcnJfcmVsZWFzZV9yaW5nXzI7CisJCWdvdG8gZXJyX3JlbGVhc2VfZndfMjsKIAogCW5hcGlfZW5hYmxlKCZ0cC0+bmFwaSk7CiAKIAlydGw4MTY5X2luaXRfcGh5KGRldiwgdHApOwogCi0JcnRsODE2OV92bGFuX21vZGUoZGV2KTsKKwlydGw4MTY5X3NldF9mZWF0dXJlcyhkZXYsIGRldi0+ZmVhdHVyZXMpOwogCiAJcnRsX3BsbF9wb3dlcl91cCh0cCk7CiAKIAlydGxfaHdfc3RhcnQoZGV2KTsKIAotCXJ0bDgxNjlfcmVxdWVzdF90aW1lcihkZXYpOwotCiAJdHAtPnNhdmVkX3dvbG9wdHMgPSAwOwogCXBtX3J1bnRpbWVfcHV0X25vaWRsZSgmcGRldi0+ZGV2KTsKIApAQCAtMzM1OSw3ICszNTg4LDggQEAKIG91dDoKIAlyZXR1cm4gcmV0dmFsOwogCi1lcnJfcmVsZWFzZV9yaW5nXzI6CitlcnJfcmVsZWFzZV9md18yOgorCXJ0bF9yZWxlYXNlX2Zpcm13YXJlKHRwKTsKIAlydGw4MTY5X3J4X2NsZWFyKHRwKTsKIGVycl9mcmVlX3J4XzE6CiAJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgUjgxNjlfUlhfUklOR19CWVRFUywgdHAtPlJ4RGVzY0FycmF5LApAQCAtMzM4Miw3ICszNjEyLDggQEAKIAlydGw4MTY5X2lycV9tYXNrX2FuZF9hY2soaW9hZGRyKTsKIAogCWlmICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yNyB8fAotCSAgICB0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yOCkgeworCSAgICB0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yOCB8fAorCSAgICB0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zMSkgewogCQl3aGlsZSAoUlRMX1I4KFR4UG9sbCkgJiBOUFEpCiAJCQl1ZGVsYXkoMjApOwogCkBAIC0zNDAwLDcgKzM2MzEsNyBAQAogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKIAl1MzIgY2ZnID0gcnRsODE2OV9yeF9jb25maWc7CiAKLQljZmcgfD0gKFJUTF9SMzIoUnhDb25maWcpICYgcnRsX2NoaXBfaW5mb1t0cC0+Y2hpcHNldF0uUnhDb25maWdNYXNrKTsKKwljZmcgfD0gKFJUTF9SMzIoUnhDb25maWcpICYgUlRMX1JYX0NPTkZJR19NQVNLKTsKIAlSVExfVzMyKFJ4Q29uZmlnLCBjZmcpOwogCiAJLyogU2V0IERNQSBidXJzdCBzaXplIGFuZCBJbnRlcmZyYW1lIEdhcCBUaW1lICovCkBAIC0zNDExLDI1ICszNjQyLDE0IEBACiBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOwotCXVuc2lnbmVkIGludCBpOwogCi0JLyogU29mdCByZXNldCB0aGUgY2hpcC4gKi8KLQlSVExfVzgoQ2hpcENtZCwgQ21kUmVzZXQpOwotCi0JLyogQ2hlY2sgdGhhdCB0aGUgY2hpcCBoYXMgZmluaXNoZWQgdGhlIHJlc2V0LiAqLwotCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgewotCQlpZiAoKFJUTF9SOChDaGlwQ21kKSAmIENtZFJlc2V0KSA9PSAwKQotCQkJYnJlYWs7Ci0JCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEpOwotCX0KKwlydGxfaHdfcmVzZXQodHApOwogCiAJdHAtPmh3X3N0YXJ0KGRldik7CiAKIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogfQogCi0KIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfdHhfZGVzY19yZWdpc3RlcnMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsCiAJCQkJCSB2b2lkIF9faW9tZW0gKmlvYWRkcikKIHsKQEAgLTM0OTUsMjYgKzM3MTUsMjYgQEAKIAl9CiAKIAlSVExfVzgoQ2ZnOTM0NiwgQ2ZnOTM0Nl9VbmxvY2spOwotCWlmICgodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMDEpIHx8Ci0JICAgICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wMikgfHwKLQkgICAgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzAzKSB8fAotCSAgICAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMDQpKQorCWlmICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wMSB8fAorCSAgICB0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wMiB8fAorCSAgICB0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wMyB8fAorCSAgICB0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wNCkKIAkJUlRMX1c4KENoaXBDbWQsIENtZFR4RW5iIHwgQ21kUnhFbmIpOwogCiAJUlRMX1c4KEVhcmx5VHhUaHJlcywgTm9FYXJseVR4KTsKIAogCXJ0bF9zZXRfcnhfbWF4X3NpemUoaW9hZGRyLCByeF9idWZfc3opOwogCi0JaWYgKCh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wMSkgfHwKLQkgICAgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzAyKSB8fAotCSAgICAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMDMpIHx8Ci0JICAgICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wNCkpCisJaWYgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzAxIHx8CisJICAgIHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzAyIHx8CisJICAgIHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzAzIHx8CisJICAgIHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzA0KQogCQlydGxfc2V0X3J4X3R4X2NvbmZpZ19yZWdpc3RlcnModHApOwogCiAJdHAtPmNwX2NtZCB8PSBydGxfcndfY3BsdXNjbWQoaW9hZGRyKSB8IFBDSU11bFJXOwogCi0JaWYgKCh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wMikgfHwKLQkgICAgKHRwLT5tYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzAzKSkgeworCWlmICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wMiB8fAorCSAgICB0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8wMykgewogCQlkcHJpbnRrKCJTZXQgTUFDIFJlZyBDK0NSIE9mZnNldCAweEUwLiAiCiAJCQkiQml0LTMgYW5kIGJpdC0xNCBNVVNUIGJlIDFcbiIpOwogCQl0cC0+Y3BfY21kIHw9ICgxIDw8IDE0KTsKQEAgLTM1MzIsMTAgKzM3NTIsMTAgQEAKIAogCXJ0bF9zZXRfcnhfdHhfZGVzY19yZWdpc3RlcnModHAsIGlvYWRkcik7CiAKLQlpZiAoKHRwLT5tYWNfdmVyc2lvbiAhPSBSVExfR0lHQV9NQUNfVkVSXzAxKSAmJgotCSAgICAodHAtPm1hY192ZXJzaW9uICE9IFJUTF9HSUdBX01BQ19WRVJfMDIpICYmCi0JICAgICh0cC0+bWFjX3ZlcnNpb24gIT0gUlRMX0dJR0FfTUFDX1ZFUl8wMykgJiYKLQkgICAgKHRwLT5tYWNfdmVyc2lvbiAhPSBSVExfR0lHQV9NQUNfVkVSXzA0KSkgeworCWlmICh0cC0+bWFjX3ZlcnNpb24gIT0gUlRMX0dJR0FfTUFDX1ZFUl8wMSAmJgorCSAgICB0cC0+bWFjX3ZlcnNpb24gIT0gUlRMX0dJR0FfTUFDX1ZFUl8wMiAmJgorCSAgICB0cC0+bWFjX3ZlcnNpb24gIT0gUlRMX0dJR0FfTUFDX1ZFUl8wMyAmJgorCSAgICB0cC0+bWFjX3ZlcnNpb24gIT0gUlRMX0dJR0FfTUFDX1ZFUl8wNCkgewogCQlSVExfVzgoQ2hpcENtZCwgQ21kVHhFbmIgfCBDbWRSeEVuYik7CiAJCXJ0bF9zZXRfcnhfdHhfY29uZmlnX3JlZ2lzdGVycyh0cCk7CiAJfQpAQCAtMzc3OSw2ICszOTk5LDE3IEBACiAJUlRMX1cxNihDUGx1c0NtZCwgUlRMX1IxNihDUGx1c0NtZCkgJiB+UjgxNjhfQ1BDTURfUVVJUktfTUFTSyk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTY4ZHAodm9pZCBfX2lvbWVtICppb2FkZHIsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXJ0bF9jc2lfYWNjZXNzX2VuYWJsZV8xKGlvYWRkcik7CisKKwlydGxfdHhfcGVyZm9ybWFuY2VfdHdlYWsocGRldiwgMHg1IDw8IE1BWF9SRUFEX1JFUVVFU1RfU0hJRlQpOworCisJUlRMX1c4KE1heFR4UGFja2V0U2l6ZSwgVHhQYWNrZXRNYXgpOworCisJcnRsX2Rpc2FibGVfY2xvY2tfcmVxdWVzdChwZGV2KTsKK30KKwogc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxNjhkXzQodm9pZCBfX2lvbWVtICppb2FkZHIsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXBoeV9pbmZvIGVfaW5mb184MTY4ZF80W10gPSB7CkBAIC0zODA1LDYgKzQwMzYsNDEgQEAKIAlydGxfZW5hYmxlX2Nsb2NrX3JlcXVlc3QocGRldik7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTY4ZSh2b2lkIF9faW9tZW0gKmlvYWRkciwgc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBlcGh5X2luZm8gZV9pbmZvXzgxNjhlW10gPSB7CisJCXsgMHgwMCwgMHgwMjAwLAkweDAxMDAgfSwKKwkJeyAweDAwLCAweDAwMDAsCTB4MDAwNCB9LAorCQl7IDB4MDYsIDB4MDAwMiwJMHgwMDAxIH0sCisJCXsgMHgwNiwgMHgwMDAwLAkweDAwMzAgfSwKKwkJeyAweDA3LCAweDAwMDAsCTB4MjAwMCB9LAorCQl7IDB4MDAsIDB4MDAwMCwJMHgwMDIwIH0sCisJCXsgMHgwMywgMHg1ODAwLAkweDIwMDAgfSwKKwkJeyAweDAzLCAweDAwMDAsCTB4MDAwMSB9LAorCQl7IDB4MDEsIDB4MDgwMCwJMHgxMDAwIH0sCisJCXsgMHgwNywgMHgwMDAwLAkweDQwMDAgfSwKKwkJeyAweDFlLCAweDAwMDAsCTB4MjAwMCB9LAorCQl7IDB4MTksIDB4ZmZmZiwJMHhmZTZjIH0sCisJCXsgMHgwYSwgMHgwMDAwLAkweDAwNDAgfQorCX07CisKKwlydGxfY3NpX2FjY2Vzc19lbmFibGVfMihpb2FkZHIpOworCisJcnRsX2VwaHlfaW5pdChpb2FkZHIsIGVfaW5mb184MTY4ZSwgQVJSQVlfU0laRShlX2luZm9fODE2OGUpKTsKKworCXJ0bF90eF9wZXJmb3JtYW5jZV90d2VhayhwZGV2LCAweDUgPDwgTUFYX1JFQURfUkVRVUVTVF9TSElGVCk7CisKKwlSVExfVzgoTWF4VHhQYWNrZXRTaXplLCBUeFBhY2tldE1heCk7CisKKwlydGxfZGlzYWJsZV9jbG9ja19yZXF1ZXN0KHBkZXYpOworCisJLyogUmVzZXQgdHggRklGTyBwb2ludGVyICovCisJUlRMX1czMihNSVNDLCBSVExfUjMyKE1JU0MpIHwgVFhQTEFfUlNUKTsKKwlSVExfVzMyKE1JU0MsIFJUTF9SMzIoTUlTQykgJiB+VFhQTEFfUlNUKTsKKworCVJUTF9XOChDb25maWc1LCBSVExfUjgoQ29uZmlnNSkgJiB+U3BpX2VuKTsKK30KKwogc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxNjgoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0zODQyLDU1ICs0MTA4LDY0IEBACiAJc3dpdGNoICh0cC0+bWFjX3ZlcnNpb24pIHsKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMTE6CiAJCXJ0bF9od19zdGFydF84MTY4YmIoaW9hZGRyLCBwZGV2KTsKLQlicmVhazsKKwkJYnJlYWs7CiAKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMTI6CiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzE3OgogCQlydGxfaHdfc3RhcnRfODE2OGJlZihpb2FkZHIsIHBkZXYpOwotCWJyZWFrOworCQlicmVhazsKIAogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8xODoKIAkJcnRsX2h3X3N0YXJ0XzgxNjhjcF8xKGlvYWRkciwgcGRldik7Ci0JYnJlYWs7CisJCWJyZWFrOwogCiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzE5OgogCQlydGxfaHdfc3RhcnRfODE2OGNfMShpb2FkZHIsIHBkZXYpOwotCWJyZWFrOworCQlicmVhazsKIAogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yMDoKIAkJcnRsX2h3X3N0YXJ0XzgxNjhjXzIoaW9hZGRyLCBwZGV2KTsKLQlicmVhazsKKwkJYnJlYWs7CiAKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjE6CiAJCXJ0bF9od19zdGFydF84MTY4Y18zKGlvYWRkciwgcGRldik7Ci0JYnJlYWs7CisJCWJyZWFrOwogCiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzIyOgogCQlydGxfaHdfc3RhcnRfODE2OGNfNChpb2FkZHIsIHBkZXYpOwotCWJyZWFrOworCQlicmVhazsKIAogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yMzoKIAkJcnRsX2h3X3N0YXJ0XzgxNjhjcF8yKGlvYWRkciwgcGRldik7Ci0JYnJlYWs7CisJCWJyZWFrOwogCiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI0OgogCQlydGxfaHdfc3RhcnRfODE2OGNwXzMoaW9hZGRyLCBwZGV2KTsKLQlicmVhazsKKwkJYnJlYWs7CiAKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjU6CiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI2OgogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNzoKIAkJcnRsX2h3X3N0YXJ0XzgxNjhkKGlvYWRkciwgcGRldik7Ci0JYnJlYWs7CisJCWJyZWFrOwogCiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI4OgogCQlydGxfaHdfc3RhcnRfODE2OGRfNChpb2FkZHIsIHBkZXYpOwotCWJyZWFrOworCQlicmVhazsKKworCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zMToKKwkJcnRsX2h3X3N0YXJ0XzgxNjhkcChpb2FkZHIsIHBkZXYpOworCQlicmVhazsKKworCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zMjoKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMzM6CisJCXJ0bF9od19zdGFydF84MTY4ZShpb2FkZHIsIHBkZXYpOworCQlicmVhazsKIAogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiB1bmtub3duIGNoaXBzZXQgKG1hY192ZXJzaW9uID0gJWQpLlxuIiwKIAkJCWRldi0+bmFtZSwgdHAtPm1hY192ZXJzaW9uKTsKLQlicmVhazsKKwkJYnJlYWs7CiAJfQogCiAJUlRMX1c4KENoaXBDbWQsIENtZFR4RW5iIHwgQ21kUnhFbmIpOwpAQCAtMzk3NCwxMCArNDI0OSwxMCBAQAogCQl7IDB4MGEsCTAsIDB4MDAyMCB9CiAJfTsKIAotCS8qIEZvcmNlIExBTiBleGl0IGZyb20gQVNQTSBpZiBSeC9UeCBhcmUgbm90IGlkZWwgKi8KKwkvKiBGb3JjZSBMQU4gZXhpdCBmcm9tIEFTUE0gaWYgUngvVHggYXJlIG5vdCBpZGxlICovCiAJUlRMX1czMihGdW5jRXZlbnQsIFJUTF9SMzIoRnVuY0V2ZW50KSB8IDB4MDAyODAwKTsKIAotCS8qIGRpc2FibGUgRWFybHkgVGFsbHkgQ291bnRlciAqLworCS8qIERpc2FibGUgRWFybHkgVGFsbHkgQ291bnRlciAqLwogCVJUTF9XMzIoRnVuY0V2ZW50LCBSVExfUjMyKEZ1bmNFdmVudCkgJiB+MHgwMTAwMDApOwogCiAJUlRMX1c4KE1DVSwgUlRMX1I4KE1DVSkgfCBFTl9ORFAgfCBFTl9PT0JfUkVTRVQpOwpAQCAtMzk5OCw4ICs0MjczLDggQEAKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC0+cGNpX2RldjsKIAotCWlmICgodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMTMpIHx8Ci0JICAgICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8xNikpIHsKKwlpZiAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMTMgfHwKKwkgICAgdHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMTYpIHsKIAkJaW50IGNhcCA9IHRwLT5wY2llX2NhcDsKIAogCQlpZiAoY2FwKSB7CkBAIC00MDYyLDYgKzQzMzcsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWRldi0+bXR1ID0gbmV3X210dTsKKwluZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDI5OSw2ICs0NTc2LDcgQEAKIAlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCB0YXNrLndvcmspOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0cC0+ZGV2OworCWludCBpOwogCiAJcnRubF9sb2NrKCk7CiAKQEAgLTQzMDcsMTkgKzQ1ODUsMTUgQEAKIAogCXJ0bDgxNjlfd2FpdF9mb3JfcXVpZXNjZW5jZShkZXYpOwogCi0JcnRsODE2OV9yeF9pbnRlcnJ1cHQoZGV2LCB0cCwgdHAtPm1taW9fYWRkciwgfih1MzIpMCk7CisJZm9yIChpID0gMDsgaSA8IE5VTV9SWF9ERVNDOyBpKyspCisJCXJ0bDgxNjlfbWFya190b19hc2ljKHRwLT5SeERlc2NBcnJheSArIGksIHJ4X2J1Zl9zeik7CisKIAlydGw4MTY5X3R4X2NsZWFyKHRwKTsKIAotCWlmICh0cC0+ZGlydHlfcnggPT0gdHAtPmN1cl9yeCkgewotCQlydGw4MTY5X2luaXRfcmluZ19pbmRleGVzKHRwKTsKLQkJcnRsX2h3X3N0YXJ0KGRldik7Ci0JCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQkJcnRsODE2OV9jaGVja19saW5rX3N0YXR1cyhkZXYsIHRwLCB0cC0+bW1pb19hZGRyKTsKLQl9IGVsc2UgewotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJbmV0aWZfZW1lcmcodHAsIGludHIsIGRldiwgIlJ4IGJ1ZmZlcnMgc2hvcnRhZ2VcbiIpOwotCQlydGw4MTY5X3NjaGVkdWxlX3dvcmsoZGV2LCBydGw4MTY5X3Jlc2V0X3Rhc2spOwotCX0KKwlydGw4MTY5X2luaXRfcmluZ19pbmRleGVzKHRwKTsKKwlydGxfaHdfc3RhcnQoZGV2KTsKKwluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJcnRsODE2OV9jaGVja19saW5rX3N0YXR1cyhkZXYsIHRwLCB0cC0+bW1pb19hZGRyKTsKIAogb3V0X3VubG9jazoKIAlydG5sX3VubG9jaygpOwpAQCAtNDMzNiw3ICs0NjEwLDcgQEAKIH0KIAogc3RhdGljIGludCBydGw4MTY5X3htaXRfZnJhZ3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgICB1MzIgb3B0czEpCisJCQkgICAgICB1MzIgKm9wdHMpCiB7CiAJc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqaW5mbyA9IHNrYl9zaGluZm8oc2tiKTsKIAl1bnNpZ25lZCBpbnQgY3VyX2ZyYWcsIGVudHJ5OwpAQCAtNDM2MywxMCArNDYzNywxMiBAQAogCQkJZ290byBlcnJfb3V0OwogCQl9CiAKLQkJLyogYW50aSBnY2MgMi45NS4zIGJ1Z3dhcmUgKHNpYykgKi8KLQkJc3RhdHVzID0gb3B0czEgfCBsZW4gfCAoUmluZ0VuZCAqICEoKGVudHJ5ICsgMSkgJSBOVU1fVFhfREVTQykpOworCQkvKiBBbnRpIGdjYyAyLjk1LjMgYnVnd2FyZSAoc2ljKSAqLworCQlzdGF0dXMgPSBvcHRzWzBdIHwgbGVuIHwKKwkJCShSaW5nRW5kICogISgoZW50cnkgKyAxKSAlIE5VTV9UWF9ERVNDKSk7CiAKIAkJdHhkLT5vcHRzMSA9IGNwdV90b19sZTMyKHN0YXR1cyk7CisJCXR4ZC0+b3B0czIgPSBjcHVfdG9fbGUzMihvcHRzWzFdKTsKIAkJdHhkLT5hZGRyID0gY3B1X3RvX2xlNjQobWFwcGluZyk7CiAKIAkJdHAtPnR4X3NrYltlbnRyeV0ubGVuID0gbGVuOwpAQCAtNDM4NCwyNCArNDY2MCwyNiBAQAogCXJldHVybiAtRUlPOwogfQogCi1zdGF0aWMgaW5saW5lIHUzMiBydGw4MTY5X3Rzb19jc3VtKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgcnRsODE2OV90c29fY3N1bShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKKwkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyICpvcHRzKQogewotCWlmIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9UU08pIHsKLQkJdTMyIG1zcyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemU7CisJY29uc3Qgc3RydWN0IHJ0bF90eF9kZXNjX2luZm8gKmluZm8gPSB0eF9kZXNjX2luZm8gKyB0cC0+dHhkX3ZlcnNpb247CisJdTMyIG1zcyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemU7CisJaW50IG9mZnNldCA9IGluZm8tPm9wdHNfb2Zmc2V0OwogCi0JCWlmIChtc3MpCi0JCQlyZXR1cm4gTGFyZ2VTZW5kIHwgKChtc3MgJiBNU1NNYXNrKSA8PCBNU1NTaGlmdCk7Ci0JfQotCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CisJaWYgKG1zcykgeworCQlvcHRzWzBdIHw9IFREX0xTTzsKKwkJb3B0c1tvZmZzZXRdIHw9IG1pbihtc3MsIFREX01TU19NQVgpIDw8IGluZm8tPm1zc19zaGlmdDsKKwl9IGVsc2UgaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKIAkJY29uc3Qgc3RydWN0IGlwaGRyICppcCA9IGlwX2hkcihza2IpOwogCiAJCWlmIChpcC0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApCi0JCQlyZXR1cm4gSVBDUyB8IFRDUENTOworCQkJb3B0c1tvZmZzZXRdIHw9IGluZm8tPmNoZWNrc3VtLnRjcDsKIAkJZWxzZSBpZiAoaXAtPnByb3RvY29sID09IElQUFJPVE9fVURQKQotCQkJcmV0dXJuIElQQ1MgfCBVRFBDUzsKLQkJV0FSTl9PTigxKTsJLyogd2UgbmVlZCBhIFdBUk4oKSAqLworCQkJb3B0c1tvZmZzZXRdIHw9IGluZm8tPmNoZWNrc3VtLnVkcDsKKwkJZWxzZQorCQkJV0FSTl9PTl9PTkNFKDEpOwogCX0KLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIG5ldGRldl90eF90IHJ0bDgxNjlfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtNDQxNCw3ICs0NjkyLDcgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkID0gJnRwLT5wY2lfZGV2LT5kZXY7CiAJZG1hX2FkZHJfdCBtYXBwaW5nOwogCXUzMiBzdGF0dXMsIGxlbjsKLQl1MzIgb3B0czE7CisJdTMyIG9wdHNbMl07CiAJaW50IGZyYWdzOwogCiAJaWYgKHVubGlrZWx5KFRYX0JVRkZTX0FWQUlMKHRwKSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MpKSB7CkBAIC00NDM1LDMxICs0NzEzLDM1IEBACiAKIAl0cC0+dHhfc2tiW2VudHJ5XS5sZW4gPSBsZW47CiAJdHhkLT5hZGRyID0gY3B1X3RvX2xlNjQobWFwcGluZyk7Ci0JdHhkLT5vcHRzMiA9IGNwdV90b19sZTMyKHJ0bDgxNjlfdHhfdmxhbl90YWcodHAsIHNrYikpOwogCi0Jb3B0czEgPSBEZXNjT3duIHwgcnRsODE2OV90c29fY3N1bShza2IsIGRldik7CisJb3B0c1sxXSA9IGNwdV90b19sZTMyKHJ0bDgxNjlfdHhfdmxhbl90YWcodHAsIHNrYikpOworCW9wdHNbMF0gPSBEZXNjT3duOwogCi0JZnJhZ3MgPSBydGw4MTY5X3htaXRfZnJhZ3ModHAsIHNrYiwgb3B0czEpOworCXJ0bDgxNjlfdHNvX2NzdW0odHAsIHNrYiwgb3B0cyk7CisKKwlmcmFncyA9IHJ0bDgxNjlfeG1pdF9mcmFncyh0cCwgc2tiLCBvcHRzKTsKIAlpZiAoZnJhZ3MgPCAwKQogCQlnb3RvIGVycl9kbWFfMTsKIAllbHNlIGlmIChmcmFncykKLQkJb3B0czEgfD0gRmlyc3RGcmFnOworCQlvcHRzWzBdIHw9IEZpcnN0RnJhZzsKIAllbHNlIHsKLQkJb3B0czEgfD0gRmlyc3RGcmFnIHwgTGFzdEZyYWc7CisJCW9wdHNbMF0gfD0gRmlyc3RGcmFnIHwgTGFzdEZyYWc7CiAJCXRwLT50eF9za2JbZW50cnldLnNrYiA9IHNrYjsKIAl9CiAKKwl0eGQtPm9wdHMyID0gY3B1X3RvX2xlMzIob3B0c1sxXSk7CisKIAl3bWIoKTsKIAotCS8qIGFudGkgZ2NjIDIuOTUuMyBidWd3YXJlIChzaWMpICovCi0Jc3RhdHVzID0gb3B0czEgfCBsZW4gfCAoUmluZ0VuZCAqICEoKGVudHJ5ICsgMSkgJSBOVU1fVFhfREVTQykpOworCS8qIEFudGkgZ2NjIDIuOTUuMyBidWd3YXJlIChzaWMpICovCisJc3RhdHVzID0gb3B0c1swXSB8IGxlbiB8IChSaW5nRW5kICogISgoZW50cnkgKyAxKSAlIE5VTV9UWF9ERVNDKSk7CiAJdHhkLT5vcHRzMSA9IGNwdV90b19sZTMyKHN0YXR1cyk7CiAKIAl0cC0+Y3VyX3R4ICs9IGZyYWdzICsgMTsKIAogCXdtYigpOwogCi0JUlRMX1c4KFR4UG9sbCwgTlBRKTsJLyogc2V0IHBvbGxpbmcgYml0ICovCisJUlRMX1c4KFR4UG9sbCwgTlBRKTsKIAogCWlmIChUWF9CVUZGU19BVkFJTCh0cCkgPCBNQVhfU0tCX0ZSQUdTKSB7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKQEAgLTQ2MTYsMjAgKzQ4OTgsMTIgQEAKIAlyZXR1cm4gc2tiOwogfQogCi0vKgotICogV2FybmluZyA6IHJ0bDgxNjlfcnhfaW50ZXJydXB0KCkgbWlnaHQgYmUgY2FsbGVkIDoKLSAqIDEpIGZyb20gTkFQSSAoc29mdGlycSkgY29udGV4dAotICoJKHBvbGxpbmcgPSAxIDogd2Ugc2hvdWxkIGNhbGwgbmV0aWZfcmVjZWl2ZV9za2IoKSkKLSAqIDIpIGZyb20gcHJvY2VzcyBjb250ZXh0IChydGw4MTY5X3Jlc2V0X3Rhc2soKSkKLSAqCShwb2xsaW5nID0gMCA6IHdlIG11c3QgY2FsbCBuZXRpZl9yeCgpIGluc3RlYWQpCi0gKi8KIHN0YXRpYyBpbnQgcnRsODE2OV9yeF9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKIAkJCQl2b2lkIF9faW9tZW0gKmlvYWRkciwgdTMyIGJ1ZGdldCkKIHsKIAl1bnNpZ25lZCBpbnQgY3VyX3J4LCByeF9sZWZ0OwogCXVuc2lnbmVkIGludCBjb3VudDsKLQlpbnQgcG9sbGluZyA9IChidWRnZXQgIT0gfih1MzIpMCkgPyAxIDogMDsKIAogCWN1cl9yeCA9IHRwLT5jdXJfcng7CiAJcnhfbGVmdCA9IE5VTV9SWF9ERVNDICsgdHAtPmRpcnR5X3J4IC0gY3VyX3J4OwpAQCAtNDY4OSwxMCArNDk2Myw3IEBACiAKIAkJCXJ0bDgxNjlfcnhfdmxhbl90YWcoZGVzYywgc2tiKTsKIAotCQkJaWYgKGxpa2VseShwb2xsaW5nKSkKLQkJCQluYXBpX2dyb19yZWNlaXZlKCZ0cC0+bmFwaSwgc2tiKTsKLQkJCWVsc2UKLQkJCQluZXRpZl9yeChza2IpOworCQkJbmFwaV9ncm9fcmVjZWl2ZSgmdHAtPm5hcGksIHNrYik7CiAKIAkJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X3NpemU7CiAJCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKQEAgLTQ3NTUsNiArNTAyNiw3IEBACiAJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjQ6CiAJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjc6CiAJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjg6CisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMzE6CiAJCQkvKiBFeHBlcmltZW50YWwgc2NpZW5jZS4gUGt0Z2VuIHByb29mLiAqLwogCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzEyOgogCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI1OgpAQCAtNDg0Nyw3ICs1MTE5LDcgQEAKIAlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOwogCi0JcnRsODE2OV9kZWxldGVfdGltZXIoZGV2KTsKKwlkZWxfdGltZXJfc3luYygmdHAtPnRpbWVyKTsKIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIApAQCAtNDg4NCw3ICs1MTU2LDcgQEAKIAogCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJnBkZXYtPmRldik7CiAKLQkvKiB1cGRhdGUgY291bnRlcnMgYmVmb3JlIGdvaW5nIGRvd24gKi8KKwkvKiBVcGRhdGUgY291bnRlcnMgYmVmb3JlIGdvaW5nIGRvd24gKi8KIAlydGw4MTY5X3VwZGF0ZV9jb3VudGVycyhkZXYpOwogCiAJcnRsODE2OV9kb3duKGRldik7CkBAIC00OTM5LDcgKzUyMTEsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+bG9jaywgZmxhZ3MpOwogCiAJdG1wID0gcnRsODE2OV9yeF9jb25maWcgfCByeF9tb2RlIHwKLQkgICAgICAoUlRMX1IzMihSeENvbmZpZykgJiBydGxfY2hpcF9pbmZvW3RwLT5jaGlwc2V0XS5SeENvbmZpZ01hc2spOworCSAgICAgIChSVExfUjMyKFJ4Q29uZmlnKSAmIFJUTF9SWF9DT05GSUdfTUFTSyk7CiAKIAlpZiAodHAtPm1hY192ZXJzaW9uID4gUlRMX0dJR0FfTUFDX1ZFUl8wNikgewogCQl1MzIgZGF0YSA9IG1jX2ZpbHRlclswXTsKQEAgLTUwNzcsMTUgKzUzNDksMTUgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHJ0bDgxNjlfcG1fb3BzID0gewotCS5zdXNwZW5kID0gcnRsODE2OV9zdXNwZW5kLAotCS5yZXN1bWUgPSBydGw4MTY5X3Jlc3VtZSwKLQkuZnJlZXplID0gcnRsODE2OV9zdXNwZW5kLAotCS50aGF3ID0gcnRsODE2OV9yZXN1bWUsCi0JLnBvd2Vyb2ZmID0gcnRsODE2OV9zdXNwZW5kLAotCS5yZXN0b3JlID0gcnRsODE2OV9yZXN1bWUsCi0JLnJ1bnRpbWVfc3VzcGVuZCA9IHJ0bDgxNjlfcnVudGltZV9zdXNwZW5kLAotCS5ydW50aW1lX3Jlc3VtZSA9IHJ0bDgxNjlfcnVudGltZV9yZXN1bWUsCi0JLnJ1bnRpbWVfaWRsZSA9IHJ0bDgxNjlfcnVudGltZV9pZGxlLAorCS5zdXNwZW5kCQk9IHJ0bDgxNjlfc3VzcGVuZCwKKwkucmVzdW1lCQkJPSBydGw4MTY5X3Jlc3VtZSwKKwkuZnJlZXplCQkJPSBydGw4MTY5X3N1c3BlbmQsCisJLnRoYXcJCQk9IHJ0bDgxNjlfcmVzdW1lLAorCS5wb3dlcm9mZgkJPSBydGw4MTY5X3N1c3BlbmQsCisJLnJlc3RvcmUJCT0gcnRsODE2OV9yZXN1bWUsCisJLnJ1bnRpbWVfc3VzcGVuZAk9IHJ0bDgxNjlfcnVudGltZV9zdXNwZW5kLAorCS5ydW50aW1lX3Jlc3VtZQkJPSBydGw4MTY5X3J1bnRpbWVfcmVzdW1lLAorCS5ydW50aW1lX2lkbGUJCT0gcnRsODE2OV9ydW50aW1lX2lkbGUsCiB9OwogCiAjZGVmaW5lIFJUTDgxNjlfUE1fT1BTCSgmcnRsODE2OV9wbV9vcHMpCkBAIC01MTA0LDcgKzUzNzYsNyBAQAogCiAJcnRsODE2OV9uZXRfc3VzcGVuZChkZXYpOwogCi0JLyogcmVzdG9yZSBvcmlnaW5hbCBNQUMgYWRkcmVzcyAqLworCS8qIFJlc3RvcmUgb3JpZ2luYWwgTUFDIGFkZHJlc3MgKi8KIAlydGxfcmFyX3NldCh0cCwgZGV2LT5wZXJtX2FkZHIpOwogCiAJc3Bpbl9sb2NrX2lycSgmdHAtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvczJpby5jIGIvZHJpdmVycy9uZXQvczJpby5jCmluZGV4IDMzN2JkY2QuLmE5YTVmNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3MyaW8uYworKysgYi9kcml2ZXJzL25ldC9zMmlvLmMKQEAgLTc4LDYgKzc4LDcgQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlIDxuZXQvdGNwLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC0yMjQ0LDEzICsyMjQ1LDEyIEBACiBzdGF0aWMgdm9pZCBmaXhfbWFjX2FkZHJlc3Moc3RydWN0IHMyaW9fbmljICpzcCkKIHsKIAlzdHJ1Y3QgWEVOQV9kZXZfY29uZmlnIF9faW9tZW0gKmJhcjAgPSBzcC0+YmFyMDsKLQl1NjQgdmFsNjQ7CiAJaW50IGkgPSAwOwogCiAJd2hpbGUgKGZpeF9tYWNbaV0gIT0gRU5EX1NJR04pIHsKIAkJd3JpdGVxKGZpeF9tYWNbaSsrXSwgJmJhcjAtPmdwaW9fY29udHJvbCk7CiAJCXVkZWxheSgxMCk7Ci0JCXZhbDY0ID0gcmVhZHEoJmJhcjAtPmdwaW9fY29udHJvbCk7CisJCSh2b2lkKSByZWFkcSgmYmFyMC0+Z3Bpb19jb250cm9sKTsKIAl9CiB9CiAKQEAgLTI3MjcsNyArMjcyNyw2IEBACiAJaW50IGo7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgUnhEX3QgKnJ4ZHA7Ci0Jc3RydWN0IGJ1ZmZBZGQgKmJhOwogCXN0cnVjdCBSeEQxICpyeGRwMTsKIAlzdHJ1Y3QgUnhEMyAqcnhkcDM7CiAJc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbCA9ICZzcC0+bWFjX2NvbnRyb2w7CkBAIC0yNzUxLDcgKzI3NTAsNiBAQAogCQkJbWVtc2V0KHJ4ZHAsIDAsIHNpemVvZihzdHJ1Y3QgUnhEMSkpOwogCQl9IGVsc2UgaWYgKHNwLT5yeGRfbW9kZSA9PSBSWERfTU9ERV8zQikgewogCQkJcnhkcDMgPSAoc3RydWN0IFJ4RDMgKilyeGRwOwotCQkJYmEgPSAmbWFjX2NvbnRyb2wtPnJpbmdzW3Jpbmdfbm9dLmJhW2Jsa11bal07CiAJCQlwY2lfdW5tYXBfc2luZ2xlKHNwLT5wZGV2LAogCQkJCQkgKGRtYV9hZGRyX3QpcnhkcDMtPkJ1ZmZlcjBfcHRyLAogCQkJCQkgQlVGMF9MRU4sCkBAIC01MzgzLDcgKzUzODEsNyBAQAogewogCXN0cnVjdCBzMmlvX25pYyAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwogCWlmICgoaW5mby0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgfHwKLQkgICAgKGluZm8tPnNwZWVkICE9IFNQRUVEXzEwMDAwKSB8fAorCSAgICAoZXRodG9vbF9jbWRfc3BlZWQoaW5mbykgIT0gU1BFRURfMTAwMDApIHx8CiAJICAgIChpbmZvLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAllbHNlIHsKQEAgLTU0MTcsMTAgKzU0MTUsMTAgQEAKIAlpbmZvLT50cmFuc2NlaXZlciA9IFhDVlJfRVhURVJOQUw7CiAKIAlpZiAobmV0aWZfY2Fycmllcl9vayhzcC0+ZGV2KSkgewotCQlpbmZvLT5zcGVlZCA9IDEwMDAwOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoaW5mbywgU1BFRURfMTAwMDApOwogCQlpbmZvLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKIAl9IGVsc2UgewotCQlpbmZvLT5zcGVlZCA9IC0xOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoaW5mbywgLTEpOwogCQlpbmZvLT5kdXBsZXggPSAtMTsKIAl9CiAKQEAgLTU0ODQsODMgKzU0ODIsNzkgQEAKIAl9CiB9CiAKLS8qKgotICogIHMyaW9fcGh5X2lkICAtIHRpbWVyIGZ1bmN0aW9uIHRoYXQgYWx0ZXJuYXRlcyBhZGFwdGVyIExFRC4KLSAqICBAZGF0YSA6IGFkZHJlc3Mgb2YgdGhlIHByaXZhdGUgbWVtYmVyIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlLCB3aGljaAotICogIGlzIGEgcG9pbnRlciB0byB0aGUgczJpb19uaWMgc3RydWN0dXJlLCBwcm92aWRlZCBhcyBhbiB1MzIuCi0gKiBEZXNjcmlwdGlvbjogVGhpcyBpcyBhY3R1YWxseSB0aGUgdGltZXIgZnVuY3Rpb24gdGhhdCBhbHRlcm5hdGVzIHRoZQotICogYWRhcHRlciBMRUQgYml0IG9mIHRoZSBhZGFwdGVyIGNvbnRyb2wgYml0IHRvIHNldC9yZXNldCBldmVyeSB0aW1lIG9uCi0gKiBpbnZvY2F0aW9uLiBUaGUgdGltZXIgaXMgc2V0IGZvciAxLzIgYSBzZWNvbmQsIGhlbmNlIHRoYSBOSUMgYmxpbmtzCi0gKiAgb25jZSBldmVyeSBzZWNvbmQuCisvKgorICogIHMyaW9fc2V0X2xlZCAtIGNvbnRyb2wgTklDIGxlZAogICovCi1zdGF0aWMgdm9pZCBzMmlvX3BoeV9pZCh1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdm9pZCBzMmlvX3NldF9sZWQoc3RydWN0IHMyaW9fbmljICpzcCwgYm9vbCBvbikKIHsKLQlzdHJ1Y3QgczJpb19uaWMgKnNwID0gKHN0cnVjdCBzMmlvX25pYyAqKWRhdGE7CiAJc3RydWN0IFhFTkFfZGV2X2NvbmZpZyBfX2lvbWVtICpiYXIwID0gc3AtPmJhcjA7Ci0JdTY0IHZhbDY0ID0gMDsKLQl1MTYgc3ViaWQ7CisJdTE2IHN1YmlkID0gc3AtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2U7CisJdTY0IHZhbDY0OwogCi0Jc3ViaWQgPSBzcC0+cGRldi0+c3Vic3lzdGVtX2RldmljZTsKIAlpZiAoKHNwLT5kZXZpY2VfdHlwZSA9PSBYRlJBTUVfSUlfREVWSUNFKSB8fAogCSAgICAoKHN1YmlkICYgMHhGRikgPj0gMHgwNykpIHsKIAkJdmFsNjQgPSByZWFkcSgmYmFyMC0+Z3Bpb19jb250cm9sKTsKLQkJdmFsNjQgXj0gR1BJT19DVFJMX0dQSU9fMDsKKwkJaWYgKG9uKQorCQkJdmFsNjQgfD0gR1BJT19DVFJMX0dQSU9fMDsKKwkJZWxzZQorCQkJdmFsNjQgJj0gfkdQSU9fQ1RSTF9HUElPXzA7CisKIAkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+Z3Bpb19jb250cm9sKTsKIAl9IGVsc2UgewogCQl2YWw2NCA9IHJlYWRxKCZiYXIwLT5hZGFwdGVyX2NvbnRyb2wpOwotCQl2YWw2NCBePSBBREFQVEVSX0xFRF9PTjsKKwkJaWYgKG9uKQorCQkJdmFsNjQgfD0gQURBUFRFUl9MRURfT047CisJCWVsc2UKKwkJCXZhbDY0ICY9IH5BREFQVEVSX0xFRF9PTjsKKwogCQl3cml0ZXEodmFsNjQsICZiYXIwLT5hZGFwdGVyX2NvbnRyb2wpOwogCX0KIAotCW1vZF90aW1lcigmc3AtPmlkX3RpbWVyLCBqaWZmaWVzICsgSFogLyAyKTsKIH0KIAogLyoqCi0gKiBzMmlvX2V0aHRvb2xfaWRuaWMgLSBUbyBwaHlzaWNhbGx5IGlkZW50aWZ5IHRoZSBuaWMgb24gdGhlIHN5c3RlbS4KLSAqIEBzcCA6IHByaXZhdGUgbWVtYmVyIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlLCB3aGljaCBpcyBhIHBvaW50ZXIgdG8gdGhlCi0gKiBzMmlvX25pYyBzdHJ1Y3R1cmUuCi0gKiBAaWQgOiBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgd2l0aCBpZGVudGlmaWNhdGlvbiBwYXJhbWV0ZXJzIGdpdmVuIGJ5Ci0gKiBldGh0b29sLgorICogczJpb19ldGh0b29sX3NldF9sZWQgLSBUbyBwaHlzaWNhbGx5IGlkZW50aWZ5IHRoZSBuaWMgb24gdGhlIHN5c3RlbS4KKyAqIEBkZXYgOiBuZXR3b3JrIGRldmljZQorICogQHN0YXRlOiBsZWQgc2V0dGluZworICoKICAqIERlc2NyaXB0aW9uOiBVc2VkIHRvIHBoeXNpY2FsbHkgaWRlbnRpZnkgdGhlIE5JQyBvbiB0aGUgc3lzdGVtLgogICogVGhlIExpbmsgTEVEIHdpbGwgYmxpbmsgZm9yIGEgdGltZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIgZm9yCiAgKiBpZGVudGlmaWNhdGlvbi4KICAqIE5PVEU6IFRoZSBMaW5rIGhhcyB0byBiZSBVcCB0byBiZSBhYmxlIHRvIGJsaW5rIHRoZSBMRUQuIEhlbmNlCiAgKiBpZGVudGlmaWNhdGlvbiBpcyBwb3NzaWJsZSBvbmx5IGlmIGl0J3MgbGluayBpcyB1cC4KLSAqIFJldHVybiB2YWx1ZToKLSAqIGludCAsIHJldHVybnMgMCBvbiBzdWNjZXNzCiAgKi8KIAotc3RhdGljIGludCBzMmlvX2V0aHRvb2xfaWRuaWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCitzdGF0aWMgaW50IHMyaW9fZXRodG9vbF9zZXRfbGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJZW51bSBldGh0b29sX3BoeXNfaWRfc3RhdGUgc3RhdGUpCiB7Ci0JdTY0IHZhbDY0ID0gMCwgbGFzdF9ncGlvX2N0cmxfdmFsOwogCXN0cnVjdCBzMmlvX25pYyAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBYRU5BX2Rldl9jb25maWcgX19pb21lbSAqYmFyMCA9IHNwLT5iYXIwOwotCXUxNiBzdWJpZDsKKwl1MTYgc3ViaWQgPSBzcC0+cGRldi0+c3Vic3lzdGVtX2RldmljZTsKIAotCXN1YmlkID0gc3AtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2U7Ci0JbGFzdF9ncGlvX2N0cmxfdmFsID0gcmVhZHEoJmJhcjAtPmdwaW9fY29udHJvbCk7CiAJaWYgKChzcC0+ZGV2aWNlX3R5cGUgPT0gWEZSQU1FX0lfREVWSUNFKSAmJiAoKHN1YmlkICYgMHhGRikgPCAweDA3KSkgewotCQl2YWw2NCA9IHJlYWRxKCZiYXIwLT5hZGFwdGVyX2NvbnRyb2wpOworCQl1NjQgdmFsNjQgPSByZWFkcSgmYmFyMC0+YWRhcHRlcl9jb250cm9sKTsKIAkJaWYgKCEodmFsNjQgJiBBREFQVEVSX0NOVExfRU4pKSB7CiAJCQlwcl9lcnIoIkFkYXB0ZXIgTGluayBkb3duLCBjYW5ub3QgYmxpbmsgTEVEXG4iKTsKLQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIC1FQUdBSU47CiAJCX0KIAl9Ci0JaWYgKHNwLT5pZF90aW1lci5mdW5jdGlvbiA9PSBOVUxMKSB7Ci0JCWluaXRfdGltZXIoJnNwLT5pZF90aW1lcik7Ci0JCXNwLT5pZF90aW1lci5mdW5jdGlvbiA9IHMyaW9fcGh5X2lkOwotCQlzcC0+aWRfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXNwOwotCX0KLQltb2RfdGltZXIoJnNwLT5pZF90aW1lciwgamlmZmllcyk7Ci0JaWYgKGRhdGEpCi0JCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKGRhdGEgKiBIWik7Ci0JZWxzZQotCQltc2xlZXBfaW50ZXJydXB0aWJsZShNQVhfRkxJQ0tFUl9USU1FKTsKLQlkZWxfdGltZXJfc3luYygmc3AtPmlkX3RpbWVyKTsKIAotCWlmIChDQVJEU19XSVRIX0ZBVUxUWV9MSU5LX0lORElDQVRPUlMoc3AtPmRldmljZV90eXBlLCBzdWJpZCkpIHsKLQkJd3JpdGVxKGxhc3RfZ3Bpb19jdHJsX3ZhbCwgJmJhcjAtPmdwaW9fY29udHJvbCk7Ci0JCWxhc3RfZ3Bpb19jdHJsX3ZhbCA9IHJlYWRxKCZiYXIwLT5ncGlvX2NvbnRyb2wpOworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIEVUSFRPT0xfSURfQUNUSVZFOgorCQlzcC0+YWRhcHRfY3RybF9vcmcgPSByZWFkcSgmYmFyMC0+Z3Bpb19jb250cm9sKTsKKwkJcmV0dXJuIDE7CS8qIGN5Y2xlIG9uL29mZiBvbmNlIHBlciBzZWNvbmQgKi8KKworCWNhc2UgRVRIVE9PTF9JRF9PTjoKKwkJczJpb19zZXRfbGVkKHNwLCB0cnVlKTsKKwkJYnJlYWs7CisKKwljYXNlIEVUSFRPT0xfSURfT0ZGOgorCQlzMmlvX3NldF9sZWQoc3AsIGZhbHNlKTsKKwkJYnJlYWs7CisKKwljYXNlIEVUSFRPT0xfSURfSU5BQ1RJVkU6CisJCWlmIChDQVJEU19XSVRIX0ZBVUxUWV9MSU5LX0lORElDQVRPUlMoc3AtPmRldmljZV90eXBlLCBzdWJpZCkpCisJCQl3cml0ZXEoc3AtPmFkYXB0X2N0cmxfb3JnLCAmYmFyMC0+Z3Bpb19jb250cm9sKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTY2MjUsMjUgKzY2MTksNiBAQAogfQogCiAKLXN0YXRpYyB1MzIgczJpb19ldGh0b29sX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHMyaW9fbmljICpzcCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlyZXR1cm4gc3AtPnJ4X2NzdW07Ci19Ci0KLXN0YXRpYyBpbnQgczJpb19ldGh0b29sX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBzMmlvX25pYyAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKGRhdGEpCi0JCXNwLT5yeF9jc3VtID0gMTsKLQllbHNlCi0JCXNwLT5yeF9jc3VtID0gMDsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHMyaW9fZ2V0X2VlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gWEVOQV9FRVBST01fU1BBQ0U7CkBAIC02Njk1LDYxICs2NjcwLDI3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHMyaW9fZXRodG9vbF9vcF9zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlpZiAoZGF0YSkKLQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU07Ci0JZWxzZQotCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0lQX0NTVU07Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHUzMiBzMmlvX2V0aHRvb2xfb3BfZ2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJldHVybiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfVFNPKSAhPSAwOwotfQotCi1zdGF0aWMgaW50IHMyaW9fZXRodG9vbF9vcF9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCWlmIChkYXRhKQotCQlkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNik7Ci0JZWxzZQotCQlkZXYtPmZlYXR1cmVzICY9IH4oTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgczJpb19ldGh0b29sX3NldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3N0YXRpYyBpbnQgczJpb19zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZlYXR1cmVzKQogewogCXN0cnVjdCBzMmlvX25pYyAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCByYyA9IDA7Ci0JaW50IGNoYW5nZWQgPSAwOwotCi0JaWYgKGV0aHRvb2xfaW52YWxpZF9mbGFncyhkZXYsIGRhdGEsIEVUSF9GTEFHX0xSTykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGRhdGEgJiBFVEhfRkxBR19MUk8pIHsKLQkJaWYgKCEoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKSkgewotCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xSTzsKLQkJCWNoYW5nZWQgPSAxOwotCQl9Ci0JfSBlbHNlIGlmIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8pIHsKLQkJZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9MUk87Ci0JCWNoYW5nZWQgPSAxOwotCX0KKwl1MzIgY2hhbmdlZCA9IChmZWF0dXJlcyBeIGRldi0+ZmVhdHVyZXMpICYgTkVUSUZfRl9MUk87CiAKIAlpZiAoY2hhbmdlZCAmJiBuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJaW50IHJjOworCiAJCXMyaW9fc3RvcF9hbGxfdHhfcXVldWUoc3ApOwogCQlzMmlvX2NhcmRfZG93bihzcCk7CisJCWRldi0+ZmVhdHVyZXMgPSBmZWF0dXJlczsKIAkJcmMgPSBzMmlvX2NhcmRfdXAoc3ApOwogCQlpZiAocmMpCiAJCQlzMmlvX3Jlc2V0KHNwKTsKIAkJZWxzZQogCQkJczJpb19zdGFydF9hbGxfdHhfcXVldWUoc3ApOworCisJCXJldHVybiByYyA/IHJjIDogMTsKIAl9CiAKLQlyZXR1cm4gcmM7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzID0gewpAQCAtNjc2NSwxOCArNjcwNiw5IEBACiAJLmdldF9yaW5ncGFyYW0gPSBzMmlvX2V0aHRvb2xfZ3JpbmdwYXJhbSwKIAkuZ2V0X3BhdXNlcGFyYW0gPSBzMmlvX2V0aHRvb2xfZ2V0cGF1c2VfZGF0YSwKIAkuc2V0X3BhdXNlcGFyYW0gPSBzMmlvX2V0aHRvb2xfc2V0cGF1c2VfZGF0YSwKLQkuZ2V0X3J4X2NzdW0gPSBzMmlvX2V0aHRvb2xfZ2V0X3J4X2NzdW0sCi0JLnNldF9yeF9jc3VtID0gczJpb19ldGh0b29sX3NldF9yeF9jc3VtLAotCS5zZXRfdHhfY3N1bSA9IHMyaW9fZXRodG9vbF9vcF9zZXRfdHhfY3N1bSwKLQkuc2V0X2ZsYWdzID0gczJpb19ldGh0b29sX3NldF9mbGFncywKLQkuZ2V0X2ZsYWdzID0gZXRodG9vbF9vcF9nZXRfZmxhZ3MsCi0JLnNldF9zZyA9IGV0aHRvb2xfb3Bfc2V0X3NnLAotCS5nZXRfdHNvID0gczJpb19ldGh0b29sX29wX2dldF90c28sCi0JLnNldF90c28gPSBzMmlvX2V0aHRvb2xfb3Bfc2V0X3RzbywKLQkuc2V0X3VmbyA9IGV0aHRvb2xfb3Bfc2V0X3VmbywKIAkuc2VsZl90ZXN0ID0gczJpb19ldGh0b29sX3Rlc3QsCiAJLmdldF9zdHJpbmdzID0gczJpb19ldGh0b29sX2dldF9zdHJpbmdzLAotCS5waHlzX2lkID0gczJpb19ldGh0b29sX2lkbmljLAorCS5zZXRfcGh5c19pZCA9IHMyaW9fZXRodG9vbF9zZXRfbGVkLAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IHMyaW9fZ2V0X2V0aHRvb2xfc3RhdHMsCiAJLmdldF9zc2V0X2NvdW50ID0gczJpb19nZXRfc3NldF9jb3VudCwKIH07CkBAIC03NTQ1LDcgKzc0NzcsNyBAQAogCWlmICgocnhkcC0+Q29udHJvbF8xICYgVENQX09SX1VEUF9GUkFNRSkgJiYKIAkgICAgKCghcmluZ19kYXRhLT5scm8pIHx8CiAJICAgICAocmluZ19kYXRhLT5scm8gJiYgKCEocnhkcC0+Q29udHJvbF8xICYgUlhEX0ZSQU1FX0lQX0ZSQUcpKSkpICYmCi0JICAgIChzcC0+cnhfY3N1bSkpIHsKKwkgICAgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkpIHsKIAkJbDNfY3N1bSA9IFJYRF9HRVRfTDNfQ0tTVU0ocnhkcC0+Q29udHJvbF8xKTsKIAkJbDRfY3N1bSA9IFJYRF9HRVRfTDRfQ0tTVU0ocnhkcC0+Q29udHJvbF8xKTsKIAkJaWYgKChsM19jc3VtID09IEwzX0NLU1VNX09LKSAmJiAobDRfY3N1bSA9PSBMNF9DS1NVTV9PSykpIHsKQEAgLTc4MDYsNiArNzczOCw3IEBACiAJLm5kb19kb19pb2N0bAkgICAJPSBzMmlvX2lvY3RsLAogCS5uZG9fc2V0X21hY19hZGRyZXNzICAgID0gczJpb19zZXRfbWFjX2FkZHIsCiAJLm5kb19jaGFuZ2VfbXR1CSAgIAk9IHMyaW9fY2hhbmdlX210dSwKKwkubmRvX3NldF9mZWF0dXJlcwk9IHMyaW9fc2V0X2ZlYXR1cmVzLAogCS5uZG9fdmxhbl9yeF9yZWdpc3RlciAgID0gczJpb192bGFuX3J4X3JlZ2lzdGVyLAogCS5uZG9fdmxhbl9yeF9raWxsX3ZpZCAgID0gczJpb192bGFuX3J4X2tpbGxfdmlkLAogCS5uZG9fdHhfdGltZW91dAkgICAJPSBzMmlvX3R4X3dhdGNoZG9nLApAQCAtODA0NywxNyArNzk4MCwxOCBAQAogCS8qICBEcml2ZXIgZW50cnkgcG9pbnRzICovCiAJZGV2LT5uZXRkZXZfb3BzID0gJnMyaW9fbmV0ZGV2X29wczsKIAlTRVRfRVRIVE9PTF9PUFMoZGV2LCAmbmV0ZGV2X2V0aHRvb2xfb3BzKTsKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOwotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTTsKKwlkZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8CisJCU5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082IHwKKwkJTkVUSUZfRl9SWENTVU0gfCBORVRJRl9GX0xSTzsKKwlkZXYtPmZlYXR1cmVzIHw9IGRldi0+aHdfZmVhdHVyZXMgfAorCQlORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlg7CisJaWYgKHNwLT5kZXZpY2VfdHlwZSAmIFhGUkFNRV9JSV9ERVZJQ0UpIHsKKwkJZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX1VGTzsKKwkJaWYgKHVmbykKKwkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9VRk87CisJfQogCWlmIChzcC0+aGlnaF9kbWFfZmxhZyA9PSB0cnVlKQogCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwotCWlmICgoc3AtPmRldmljZV90eXBlICYgWEZSQU1FX0lJX0RFVklDRSkgJiYgKHVmbykpICB7Ci0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9VRk87Ci0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOwotCX0KIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gV0FUQ0hfRE9HX1RJTUVPVVQ7CiAJSU5JVF9XT1JLKCZzcC0+cnN0X3RpbWVyX3Rhc2ssIHMyaW9fcmVzdGFydF9uaWMpOwogCUlOSVRfV09SSygmc3AtPnNldF9saW5rX3Rhc2ssIHMyaW9fc2V0X2xpbmspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvczJpby5oIGIvZHJpdmVycy9uZXQvczJpby5oCmluZGV4IDJkMTQ0OTcuLjgwMGIzYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3MyaW8uaAorKysgYi9kcml2ZXJzL25ldC9zMmlvLmgKQEAgLTg5Myw5ICs4OTMsNiBAQAogCXUxNiBhbGxfbXVsdGlfcG9zOwogCXUxNiBwcm9taXNjX2ZsZzsKIAotCS8qICBJZCB0aW1lciwgdXNlZCB0byBibGluayBOSUMgdG8gcGh5c2ljYWxseSBpZGVudGlmeSBOSUMuICovCi0Jc3RydWN0IHRpbWVyX2xpc3QgaWRfdGltZXI7Ci0KIAkvKiAgUmVzdGFydCB0aW1lciwgdXNlZCB0byByZXN0YXJ0IE5JQyBpZiB0aGUgZGV2aWNlIGlzIHN0dWNrIGFuZAogCSAqICBhIHNjaGVkdWxlIHRhc2sgdGhhdCB3aWxsIHNldCB0aGUgY29ycmVjdCBMaW5rIHN0YXRlIG9uY2UgdGhlCiAJICogIE5JQydzIFBIWSBoYXMgc3RhYmlsaXplZCBhZnRlciBhIHN0YXRlIGNoYW5nZS4KQEAgLTEwMDUsMTggKzEwMDIsMTYgQEAKICNkZWZpbmUgTEYJMgogc3RhdGljIGlubGluZSB2b2lkIFNQRUNJQUxfUkVHX1dSSVRFKHU2NCB2YWwsIHZvaWQgX19pb21lbSAqYWRkciwgaW50IG9yZGVyKQogewotCXUzMiByZXQ7Ci0KIAlpZiAob3JkZXIgPT0gTEYpIHsKIAkJd3JpdGVsKCh1MzIpICh2YWwpLCBhZGRyKTsKLQkJcmV0ID0gcmVhZGwoYWRkcik7CisJCSh2b2lkKSByZWFkbChhZGRyKTsKIAkJd3JpdGVsKCh1MzIpICh2YWwgPj4gMzIpLCAoYWRkciArIDQpKTsKLQkJcmV0ID0gcmVhZGwoYWRkciArIDQpOworCQkodm9pZCkgcmVhZGwoYWRkciArIDQpOwogCX0gZWxzZSB7CiAJCXdyaXRlbCgodTMyKSAodmFsID4+IDMyKSwgKGFkZHIgKyA0KSk7Ci0JCXJldCA9IHJlYWRsKGFkZHIgKyA0KTsKKwkJKHZvaWQpIHJlYWRsKGFkZHIgKyA0KTsKIAkJd3JpdGVsKCh1MzIpICh2YWwpLCBhZGRyKTsKLQkJcmV0ID0gcmVhZGwoYWRkcik7CisJCSh2b2lkKSByZWFkbChhZGRyKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NiMTI1MC1tYWMuYyBiL2RyaXZlcnMvbmV0L3NiMTI1MC1tYWMuYwppbmRleCBkOTZkMmY3Li42OGQ1MDQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zYjEyNTAtbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvc2IxMjUwLW1hYy5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bGludXgvcGh5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2M5MjAzMS5jIGIvZHJpdmVycy9uZXQvc2M5MjAzMS5jCmluZGV4IDc2MjkwYTguLmZhNzQzMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NjOTIwMzEuYworKysgYi9kcml2ZXJzL25ldC9zYzkyMDMxLmMKQEAgLTExNzMsNyArMTE3Myw4IEBACiAJaWYgKHBoeV9jdHJsICYgUGh5Q3RybEFuZSkKIAkJY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX0F1dG9uZWc7CiAKLQljbWQtPnNwZWVkID0gKG91dHB1dF9zdGF0dXMgJiAweDIpID8gU1BFRURfMTAwIDogU1BFRURfMTA7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwKKwkJCSAgICAgIChvdXRwdXRfc3RhdHVzICYgMHgyKSA/IFNQRUVEXzEwMCA6IFNQRUVEXzEwKTsKIAljbWQtPmR1cGxleCA9IChvdXRwdXRfc3RhdHVzICYgMHg0KSA/IERVUExFWF9GVUxMIDogRFVQTEVYX0hBTEY7CiAJY21kLT5wb3J0ID0gUE9SVF9NSUk7CiAJY21kLT5waHlfYWRkcmVzcyA9IHBoeV9hZGRyZXNzOwpAQCAtMTE4OCwxMCArMTE4OSwxMSBAQAogewogCXN0cnVjdCBzYzkyMDMxX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgX19pb21lbSAqcG9ydF9iYXNlID0gcHJpdi0+cG9ydF9iYXNlOworCXUzMiBzcGVlZCA9IGV0aHRvb2xfY21kX3NwZWVkKGNtZCk7CiAJdTMyIHBoeV9jdHJsOwogCXUzMiBvbGRfcGh5X2N0cmw7CiAKLQlpZiAoIShjbWQtPnNwZWVkID09IFNQRUVEXzEwIHx8IGNtZC0+c3BlZWQgPT0gU1BFRURfMTAwKSkKKwlpZiAoIShzcGVlZCA9PSBTUEVFRF8xMCB8fCBzcGVlZCA9PSBTUEVFRF8xMDApKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoIShjbWQtPmR1cGxleCA9PSBEVVBMRVhfSEFMRiB8fCBjbWQtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTIyOSw3ICsxMjMxLDcgQEAKIAkJLy8gRklYTUU6IFdob2xlIGJyYW5jaCBndWVzc2VkCiAJCXBoeV9jdHJsID0gMDsKIAotCQlpZiAoY21kLT5zcGVlZCA9PSBTUEVFRF8xMCkKKwkJaWYgKHNwZWVkID09IFNQRUVEXzEwKQogCQkJcGh5X2N0cmwgfD0gUGh5Q3RybFNwZDEwOwogCQllbHNlIC8qIGNtZC0+c3BlZWQgPT0gU1BFRURfMTAwICovCiAJCQlwaHlfY3RybCB8PSBQaHlDdHJsU3BkMTAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2VmeC5jIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5jCmluZGV4IGEzYzJhYWIuLmM5MTQ3MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9lZnguYworKysgYi9kcml2ZXJzL25ldC9zZmMvZWZ4LmMKQEAgLTc5OCwxMSArNzk4LDYgQEAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZWZ4LT5uZXRfZGV2KSkKIAkJcmV0dXJuOwogCi0JaWYgKGVmeC0+cG9ydF9pbmhpYml0ZWQpIHsKLQkJbmV0aWZfY2Fycmllcl9vZmYoZWZ4LT5uZXRfZGV2KTsKLQkJcmV0dXJuOwotCX0KLQogCWlmIChsaW5rX3N0YXRlLT51cCAhPSBuZXRpZl9jYXJyaWVyX29rKGVmeC0+bmV0X2RldikpIHsKIAkJZWZ4LT5uX2xpbmtfc3RhdGVfY2hhbmdlcysrOwogCkBAIC04MzgsNyArODMzLDcgQEAKIAl9CiB9CiAKLXZvaWQgZWZ4X2xpbmtfc2V0X3dhbnRlZF9mYyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBlbnVtIGVmeF9mY190eXBlIHdhbnRlZF9mYykKK3ZvaWQgZWZ4X2xpbmtfc2V0X3dhbnRlZF9mYyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCB1OCB3YW50ZWRfZmMpCiB7CiAJZWZ4LT53YW50ZWRfZmMgPSB3YW50ZWRfZmM7CiAJaWYgKGVmeC0+bGlua19hZHZlcnRpc2luZykgewpAQCAtMTMxOSw4ICsxMzE0LDIwIEBACiAKIHN0YXRpYyB2b2lkIGVmeF9zZXRfY2hhbm5lbHMoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKKwlzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWw7CisJc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWU7CisKIAllZngtPnR4X2NoYW5uZWxfb2Zmc2V0ID0KIAkJc2VwYXJhdGVfdHhfY2hhbm5lbHMgPyBlZngtPm5fY2hhbm5lbHMgLSBlZngtPm5fdHhfY2hhbm5lbHMgOiAwOworCisJLyogV2UgbmVlZCB0byBhZGp1c3QgdGhlIFRYIHF1ZXVlIG51bWJlcnMgaWYgd2UgaGF2ZSBzZXBhcmF0ZQorCSAqIFJYLW9ubHkgYW5kIFRYLW9ubHkgY2hhbm5lbHMuCisJICovCisJZWZ4X2Zvcl9lYWNoX2NoYW5uZWwoY2hhbm5lbCwgZWZ4KSB7CisJCWVmeF9mb3JfZWFjaF9jaGFubmVsX3R4X3F1ZXVlKHR4X3F1ZXVlLCBjaGFubmVsKQorCQkJdHhfcXVldWUtPnF1ZXVlIC09IChlZngtPnR4X2NoYW5uZWxfb2Zmc2V0ICoKKwkJCQkJICAgIEVGWF9UWFFfVFlQRVMpOworCX0KIH0KIAogc3RhdGljIGludCBlZnhfcHJvYmVfbmljKHN0cnVjdCBlZnhfbmljICplZngpCkBAIC0xNDM4LDcgKzE0NDUsNyBAQAogCSAqIHJlc3RhcnQgdGhlIHRyYW5zbWl0IGludGVyZmFjZSBlYXJseSBzbyB0aGUgd2F0Y2hkb2cgdGltZXIgc3RvcHMgKi8KIAllZnhfc3RhcnRfcG9ydChlZngpOwogCi0JaWYgKGVmeF9kZXZfcmVnaXN0ZXJlZChlZngpICYmICFlZngtPnBvcnRfaW5oaWJpdGVkKQorCWlmIChlZnhfZGV2X3JlZ2lzdGVyZWQoZWZ4KSAmJiBuZXRpZl9kZXZpY2VfcHJlc2VudChlZngtPm5ldF9kZXYpKQogCQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMoZWZ4LT5uZXRfZGV2KTsKIAogCWVmeF9mb3JfZWFjaF9jaGFubmVsKGNoYW5uZWwsIGVmeCkKQEAgLTE4NzYsNiArMTg4MywxNyBAQAogCS8qIE90aGVyd2lzZSBlZnhfc3RhcnRfcG9ydCgpIHdpbGwgZG8gdGhpcyAqLwogfQogCitzdGF0aWMgaW50IGVmeF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsIHUzMiBkYXRhKQoreworCXN0cnVjdCBlZnhfbmljICplZnggPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKKworCS8qIElmIGRpc2FibGluZyBSWCBuLXR1cGxlIGZpbHRlcmluZywgY2xlYXIgZXhpc3RpbmcgZmlsdGVycyAqLworCWlmIChuZXRfZGV2LT5mZWF0dXJlcyAmIH5kYXRhICYgTkVUSUZfRl9OVFVQTEUpCisJCWVmeF9maWx0ZXJfY2xlYXJfcngoZWZ4LCBFRlhfRklMVEVSX1BSSV9NQU5VQUwpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZWZ4X25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuCQk9IGVmeF9uZXRfb3BlbiwKIAkubmRvX3N0b3AJCT0gZWZ4X25ldF9zdG9wLApAQCAtMTg4Nyw2ICsxOTA1LDcgQEAKIAkubmRvX2NoYW5nZV9tdHUJCT0gZWZ4X2NoYW5nZV9tdHUsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBlZnhfc2V0X21hY19hZGRyZXNzLAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZWZ4X3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3NldF9mZWF0dXJlcwk9IGVmeF9zZXRfZmVhdHVyZXMsCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAkubmRvX3BvbGxfY29udHJvbGxlciA9IGVmeF9uZXRwb2xsLAogI2VuZGlmCkBAIC0yMDkwLDYgKzIxMDksNyBAQAogCW5ldGlmX2luZm8oZWZ4LCBkcnYsIGVmeC0+bmV0X2RldiwgInJlc2V0dGluZyAoJXMpXG4iLAogCQkgICBSRVNFVF9UWVBFKG1ldGhvZCkpOwogCisJbmV0aWZfZGV2aWNlX2RldGFjaChlZngtPm5ldF9kZXYpOwogCWVmeF9yZXNldF9kb3duKGVmeCwgbWV0aG9kKTsKIAogCXJjID0gZWZ4LT50eXBlLT5yZXNldChlZngsIG1ldGhvZCk7CkBAIC0yMTIzLDYgKzIxNDMsNyBAQAogCQllZngtPnN0YXRlID0gU1RBVEVfRElTQUJMRUQ7CiAJfSBlbHNlIHsKIAkJbmV0aWZfZGJnKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsICJyZXNldCBjb21wbGV0ZVxuIik7CisJCW5ldGlmX2RldmljZV9hdHRhY2goZWZ4LT5uZXRfZGV2KTsKIAl9CiAJcmV0dXJuIHJjOwogfQpAQCAtMjIzNSw3ICsyMjU2LDcgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZWZ4X3BoeV9vcGVyYXRpb25zIGVmeF9kdW1teV9waHlfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWZ4X3BoeV9vcGVyYXRpb25zIGVmeF9kdW1teV9waHlfb3BlcmF0aW9ucyA9IHsKIAkuaW5pdAkJID0gZWZ4X3BvcnRfZHVtbXlfb3BfaW50LAogCS5yZWNvbmZpZ3VyZQkgPSBlZnhfcG9ydF9kdW1teV9vcF9pbnQsCiAJLnBvbGwJCSA9IGVmeF9wb3J0X2R1bW15X29wX3BvbGwsCkBAIC0yMjUxLDcgKzIyNzIsNyBAQAogLyogVGhpcyB6ZXJvZXMgb3V0IGFuZCB0aGVuIGZpbGxzIGluIHRoZSBpbnZhcmlhbnRzIGluIGEgc3RydWN0CiAgKiBlZnhfbmljIChpbmNsdWRpbmcgYWxsIHN1Yi1zdHJ1Y3R1cmVzKS4KICAqLwotc3RhdGljIGludCBlZnhfaW5pdF9zdHJ1Y3Qoc3RydWN0IGVmeF9uaWMgKmVmeCwgc3RydWN0IGVmeF9uaWNfdHlwZSAqdHlwZSwKK3N0YXRpYyBpbnQgZWZ4X2luaXRfc3RydWN0KHN0cnVjdCBlZnhfbmljICplZngsIGNvbnN0IHN0cnVjdCBlZnhfbmljX3R5cGUgKnR5cGUsCiAJCQkgICBzdHJ1Y3QgcGNpX2RldiAqcGNpX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCiB7CiAJaW50IGk7CkBAIC0yMjcxLDcgKzIyOTIsNiBAQAogCXN0cmxjcHkoZWZ4LT5uYW1lLCBwY2lfbmFtZShwY2lfZGV2KSwgc2l6ZW9mKGVmeC0+bmFtZSkpOwogCiAJZWZ4LT5uZXRfZGV2ID0gbmV0X2RldjsKLQllZngtPnJ4X2NoZWNrc3VtX2VuYWJsZWQgPSB0cnVlOwogCXNwaW5fbG9ja19pbml0KCZlZngtPnN0YXRzX2xvY2spOwogCW11dGV4X2luaXQoJmVmeC0+bWFjX2xvY2spOwogCWVmeC0+bWFjX29wID0gdHlwZS0+ZGVmYXVsdF9tYWNfb3BzOwpAQCAtMjQ0Miw3ICsyNDYyLDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGVmeF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsCiAJCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudHJ5KQogewotCXN0cnVjdCBlZnhfbmljX3R5cGUgKnR5cGUgPSAoc3RydWN0IGVmeF9uaWNfdHlwZSAqKSBlbnRyeS0+ZHJpdmVyX2RhdGE7CisJY29uc3Qgc3RydWN0IGVmeF9uaWNfdHlwZSAqdHlwZSA9IChjb25zdCBzdHJ1Y3QgZWZ4X25pY190eXBlICopIGVudHJ5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldjsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4OwogCWludCBpLCByYzsKQEAgLTI0NTQsMTIgKzI0NzQsMTUgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJbmV0X2Rldi0+ZmVhdHVyZXMgfD0gKHR5cGUtPm9mZmxvYWRfZmVhdHVyZXMgfCBORVRJRl9GX1NHIHwKIAkJCSAgICAgIE5FVElGX0ZfSElHSERNQSB8IE5FVElGX0ZfVFNPIHwKLQkJCSAgICAgIE5FVElGX0ZfR1JPKTsKKwkJCSAgICAgIE5FVElGX0ZfUlhDU1VNKTsKIAlpZiAodHlwZS0+b2ZmbG9hZF9mZWF0dXJlcyAmIE5FVElGX0ZfVjZfQ1NVTSkKIAkJbmV0X2Rldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwogCS8qIE1hc2sgZm9yIGZlYXR1cmVzIHRoYXQgYWxzbyBhcHBseSB0byBWTEFOIGRldmljZXMgKi8KIAluZXRfZGV2LT52bGFuX2ZlYXR1cmVzIHw9IChORVRJRl9GX0FMTF9DU1VNIHwgTkVUSUZfRl9TRyB8Ci0JCQkJICAgTkVUSUZfRl9ISUdIRE1BIHwgTkVUSUZfRl9UU08pOworCQkJCSAgIE5FVElGX0ZfSElHSERNQSB8IE5FVElGX0ZfQUxMX1RTTyB8CisJCQkJICAgTkVUSUZfRl9SWENTVU0pOworCS8qIEFsbCBvZmZsb2FkcyBjYW4gYmUgdG9nZ2xlZCAqLworCW5ldF9kZXYtPmh3X2ZlYXR1cmVzID0gbmV0X2Rldi0+ZmVhdHVyZXMgJiB+TkVUSUZfRl9ISUdIRE1BOwogCWVmeCA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwY2lfZGV2LCBlZngpOwogCVNFVF9ORVRERVZfREVWKG5ldF9kZXYsICZwY2lfZGV2LT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2VmeC5oIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5oCmluZGV4IDNkODNhMWYuLmIwZDEyMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9lZnguaAorKysgYi9kcml2ZXJzL25ldC9zZmMvZWZ4LmgKQEAgLTE0Miw2ICsxNDIsNiBAQAogCiBleHRlcm4gdm9pZCBlZnhfbGlua19zdGF0dXNfY2hhbmdlZChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIGV4dGVybiB2b2lkIGVmeF9saW5rX3NldF9hZHZlcnRpc2luZyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCB1MzIpOwotZXh0ZXJuIHZvaWQgZWZ4X2xpbmtfc2V0X3dhbnRlZF9mYyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBlbnVtIGVmeF9mY190eXBlKTsKK2V4dGVybiB2b2lkIGVmeF9saW5rX3NldF93YW50ZWRfZmMoc3RydWN0IGVmeF9uaWMgKmVmeCwgdTgpOwogCiAjZW5kaWYgLyogRUZYX0VGWF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvc2ZjL2V0aHRvb2wuYwppbmRleCA4MDcxNzhlLi5kMjI5MDI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9ldGh0b29sLmMKQEAgLTE3OCwxOSArMTc4LDI3IEBACiAgKi8KIAogLyogSWRlbnRpZnkgZGV2aWNlIGJ5IGZsYXNoaW5nIExFRHMgKi8KLXN0YXRpYyBpbnQgZWZ4X2V0aHRvb2xfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwgdTMyIGNvdW50KQorc3RhdGljIGludCBlZnhfZXRodG9vbF9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAorCQkJICAgICAgIGVudW0gZXRodG9vbF9waHlzX2lkX3N0YXRlIHN0YXRlKQogewogCXN0cnVjdCBlZnhfbmljICplZnggPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKKwllbnVtIGVmeF9sZWRfbW9kZSBtb2RlID0gRUZYX0xFRF9ERUZBVUxUOwogCi0JZG8gewotCQllZngtPnR5cGUtPnNldF9pZF9sZWQoZWZ4LCBFRlhfTEVEX09OKTsKLQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKEhaIC8gMik7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgRVRIVE9PTF9JRF9PTjoKKwkJbW9kZSA9IEVGWF9MRURfT047CisJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9JRF9PRkY6CisJCW1vZGUgPSBFRlhfTEVEX09GRjsKKwkJYnJlYWs7CisJY2FzZSBFVEhUT09MX0lEX0lOQUNUSVZFOgorCQltb2RlID0gRUZYX0xFRF9ERUZBVUxUOworCQlicmVhazsKKwljYXNlIEVUSFRPT0xfSURfQUNUSVZFOgorCQlyZXR1cm4gMTsJLyogY3ljbGUgb24vb2ZmIG9uY2UgcGVyIHNlY29uZCAqLworCX0KIAotCQllZngtPnR5cGUtPnNldF9pZF9sZWQoZWZ4LCBFRlhfTEVEX09GRik7Ci0JCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShIWiAvIDIpOwotCX0gd2hpbGUgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSAmJiAtLWNvdW50ICE9IDApOwotCi0JZWZ4LT50eXBlLT5zZXRfaWRfbGVkKGVmeCwgRUZYX0xFRF9ERUZBVUxUKTsKKwllZngtPnR5cGUtPnNldF9pZF9sZWQoZWZ4LCBtb2RlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjExLDcgKzIxOSw3IEBACiAJZWNtZC0+c3VwcG9ydGVkIHw9IFNVUFBPUlRFRF9QYXVzZSB8IFNVUFBPUlRFRF9Bc3ltX1BhdXNlOwogCiAJaWYgKExPT1BCQUNLX0lOVEVSTkFMKGVmeCkpIHsKLQkJZWNtZC0+c3BlZWQgPSBsaW5rX3N0YXRlLT5zcGVlZDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIGxpbmtfc3RhdGUtPnNwZWVkKTsKIAkJZWNtZC0+ZHVwbGV4ID0gbGlua19zdGF0ZS0+ZmQgPyBEVVBMRVhfRlVMTCA6IERVUExFWF9IQUxGOwogCX0KIApAQCAtMjI2LDcgKzIzNCw4IEBACiAJaW50IHJjOwogCiAJLyogR01BQyBkb2VzIG5vdCBzdXBwb3J0IDEwMDBNYnBzIEhEICovCi0JaWYgKGVjbWQtPnNwZWVkID09IFNQRUVEXzEwMDAgJiYgZWNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKSB7CisJaWYgKChldGh0b29sX2NtZF9zcGVlZChlY21kKSA9PSBTUEVFRF8xMDAwKSAmJgorCSAgICAoZWNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKSkgewogCQluZXRpZl9kYmcoZWZ4LCBkcnYsIGVmeC0+bmV0X2RldiwKIAkJCSAgInJlamVjdGluZyB1bnN1cHBvcnRlZCAxMDAwTWJwcyBIRCBzZXR0aW5nXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01MTgsNzIgKzUyNyw2IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGVmeF9ldGh0b29sX3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsIHUzMiBlbmFibGUpCi17Ci0Jc3RydWN0IGVmeF9uaWMgKmVmeCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkgPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKLQl1MzIgZmVhdHVyZXM7Ci0KLQlmZWF0dXJlcyA9IE5FVElGX0ZfVFNPOwotCWlmIChlZngtPnR5cGUtPm9mZmxvYWRfZmVhdHVyZXMgJiBORVRJRl9GX1Y2X0NTVU0pCi0JCWZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKLQotCWlmIChlbmFibGUpCi0JCW5ldF9kZXYtPmZlYXR1cmVzIHw9IGZlYXR1cmVzOwotCWVsc2UKLQkJbmV0X2Rldi0+ZmVhdHVyZXMgJj0gfmZlYXR1cmVzOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZWZ4X2V0aHRvb2xfc2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsIHUzMiBlbmFibGUpCi17Ci0Jc3RydWN0IGVmeF9uaWMgKmVmeCA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwotCXUzMiBmZWF0dXJlcyA9IGVmeC0+dHlwZS0+b2ZmbG9hZF9mZWF0dXJlcyAmIE5FVElGX0ZfQUxMX0NTVU07Ci0KLQlpZiAoZW5hYmxlKQotCQluZXRfZGV2LT5mZWF0dXJlcyB8PSBmZWF0dXJlczsKLQllbHNlCi0JCW5ldF9kZXYtPmZlYXR1cmVzICY9IH5mZWF0dXJlczsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGVmeF9ldGh0b29sX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LCB1MzIgZW5hYmxlKQotewotCXN0cnVjdCBlZnhfbmljICplZnggPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKLQotCS8qIE5vIHdheSB0byBzdG9wIHRoZSBoYXJkd2FyZSBkb2luZyB0aGUgY2hlY2tzOyB3ZSBqdXN0Ci0JICogaWdub3JlIHRoZSByZXN1bHQuCi0JICovCi0JZWZ4LT5yeF9jaGVja3N1bV9lbmFibGVkID0gISFlbmFibGU7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHUzMiBlZnhfZXRodG9vbF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldikKLXsKLQlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7Ci0KLQlyZXR1cm4gZWZ4LT5yeF9jaGVja3N1bV9lbmFibGVkOwotfQotCi1zdGF0aWMgaW50IGVmeF9ldGh0b29sX3NldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IGVmeF9uaWMgKmVmeCA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwotCXUzMiBzdXBwb3J0ZWQgPSAoZWZ4LT50eXBlLT5vZmZsb2FkX2ZlYXR1cmVzICYKLQkJCSAoRVRIX0ZMQUdfUlhIQVNIIHwgRVRIX0ZMQUdfTlRVUExFKSk7Ci0JaW50IHJjOwotCi0JcmMgPSBldGh0b29sX29wX3NldF9mbGFncyhuZXRfZGV2LCBkYXRhLCBzdXBwb3J0ZWQpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JaWYgKCEoZGF0YSAmIEVUSF9GTEFHX05UVVBMRSkpCi0JCWVmeF9maWx0ZXJfY2xlYXJfcngoZWZ4LCBFRlhfRklMVEVSX1BSSV9NQU5VQUwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIGVmeF9ldGh0b29sX3NlbGZfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwKIAkJCQkgIHN0cnVjdCBldGh0b29sX3Rlc3QgKnRlc3QsIHU2NCAqZGF0YSkKIHsKQEAgLTc1NSw3ICs2OTgsNyBAQAogCQkJCSAgICAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBhdXNlKQogewogCXN0cnVjdCBlZnhfbmljICplZnggPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKLQllbnVtIGVmeF9mY190eXBlIHdhbnRlZF9mYywgb2xkX2ZjOworCXU4IHdhbnRlZF9mYywgb2xkX2ZjOwogCXUzMiBvbGRfYWR2OwogCWJvb2wgcmVzZXQ7CiAJaW50IHJjID0gMDsKQEAgLTEwMTIsOCArOTU1LDkgQEAKIAogCWlmIChudHVwbGUtPmZzLmFjdGlvbiA9PSBFVEhUT09MX1JYTlRVUExFX0FDVElPTl9DTEVBUikKIAkJcmV0dXJuIGVmeF9maWx0ZXJfcmVtb3ZlX2ZpbHRlcihlZngsICZmaWx0ZXIpOwotCWVsc2UKLQkJcmV0dXJuIGVmeF9maWx0ZXJfaW5zZXJ0X2ZpbHRlcihlZngsICZmaWx0ZXIsIHRydWUpOworCisJcmMgPSBlZnhfZmlsdGVyX2luc2VydF9maWx0ZXIoZWZ4LCAmZmlsdGVyLCB0cnVlKTsKKwlyZXR1cm4gcmMgPCAwID8gcmMgOiAwOwogfQogCiBzdGF0aWMgaW50IGVmeF9ldGh0b29sX2dldF9yeGZoX2luZGlyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LApAQCAtMTA3MCwyMiArMTAxNCwxMCBAQAogCS5zZXRfcmluZ3BhcmFtCQk9IGVmeF9ldGh0b29sX3NldF9yaW5ncGFyYW0sCiAJLmdldF9wYXVzZXBhcmFtICAgICAgICAgPSBlZnhfZXRodG9vbF9nZXRfcGF1c2VwYXJhbSwKIAkuc2V0X3BhdXNlcGFyYW0gICAgICAgICA9IGVmeF9ldGh0b29sX3NldF9wYXVzZXBhcmFtLAotCS5nZXRfcnhfY3N1bQkJPSBlZnhfZXRodG9vbF9nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0JCT0gZWZ4X2V0aHRvb2xfc2V0X3J4X2NzdW0sCi0JLmdldF90eF9jc3VtCQk9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCi0JLyogTmVlZCB0byBlbmFibGUvZGlzYWJsZSBJUHY2IHRvbyAqLwotCS5zZXRfdHhfY3N1bQkJPSBlZnhfZXRodG9vbF9zZXRfdHhfY3N1bSwKLQkuZ2V0X3NnCQkJPSBldGh0b29sX29wX2dldF9zZywKLQkuc2V0X3NnCQkJPSBldGh0b29sX29wX3NldF9zZywKLQkuZ2V0X3RzbwkJPSBldGh0b29sX29wX2dldF90c28sCi0JLyogTmVlZCB0byBlbmFibGUvZGlzYWJsZSBUU08tSVB2NiB0b28gKi8KLQkuc2V0X3RzbwkJPSBlZnhfZXRodG9vbF9zZXRfdHNvLAotCS5nZXRfZmxhZ3MJCT0gZXRodG9vbF9vcF9nZXRfZmxhZ3MsCi0JLnNldF9mbGFncwkJPSBlZnhfZXRodG9vbF9zZXRfZmxhZ3MsCiAJLmdldF9zc2V0X2NvdW50CQk9IGVmeF9ldGh0b29sX2dldF9zc2V0X2NvdW50LAogCS5zZWxmX3Rlc3QJCT0gZWZ4X2V0aHRvb2xfc2VsZl90ZXN0LAogCS5nZXRfc3RyaW5ncwkJPSBlZnhfZXRodG9vbF9nZXRfc3RyaW5ncywKLQkucGh5c19pZAkJPSBlZnhfZXRodG9vbF9waHlzX2lkLAorCS5zZXRfcGh5c19pZAkJPSBlZnhfZXRodG9vbF9waHlzX2lkLAogCS5nZXRfZXRodG9vbF9zdGF0cwk9IGVmeF9ldGh0b29sX2dldF9zdGF0cywKIAkuZ2V0X3dvbCAgICAgICAgICAgICAgICA9IGVmeF9ldGh0b29sX2dldF93b2wsCiAJLnNldF93b2wgICAgICAgICAgICAgICAgPSBlZnhfZXRodG9vbF9zZXRfd29sLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5jIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5jCmluZGV4IGQ5NmIyMzcuLjYwMTc2ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uYworKysgYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uLmMKQEAgLTE3MDMsNyArMTcwMyw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwogCi1zdHJ1Y3QgZWZ4X25pY190eXBlIGZhbGNvbl9hMV9uaWNfdHlwZSA9IHsKK2NvbnN0IHN0cnVjdCBlZnhfbmljX3R5cGUgZmFsY29uX2ExX25pY190eXBlID0gewogCS5wcm9iZSA9IGZhbGNvbl9wcm9iZV9uaWMsCiAJLnJlbW92ZSA9IGZhbGNvbl9yZW1vdmVfbmljLAogCS5pbml0ID0gZmFsY29uX2luaXRfbmljLApAQCAtMTc0NCw3ICsxNzQ0LDcgQEAKIAkucmVzZXRfd29ybGRfZmxhZ3MgPSBFVEhfUkVTRVRfSVJRLAogfTsKIAotc3RydWN0IGVmeF9uaWNfdHlwZSBmYWxjb25fYjBfbmljX3R5cGUgPSB7Citjb25zdCBzdHJ1Y3QgZWZ4X25pY190eXBlIGZhbGNvbl9iMF9uaWNfdHlwZSA9IHsKIAkucHJvYmUgPSBmYWxjb25fcHJvYmVfbmljLAogCS5yZW1vdmUgPSBmYWxjb25fcmVtb3ZlX25pYywKIAkuaW5pdCA9IGZhbGNvbl9pbml0X25pYywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25feG1hYy5jIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbl94bWFjLmMKaW5kZXggMmM5ZWU1ZC4uOTUxNjQ1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbl94bWFjLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbl94bWFjLmMKQEAgLTM2Miw3ICszNjIsNyBAQAogCWZhbGNvbl9hY2tfc3RhdHVzX2ludHIoZWZ4KTsKIH0KIAotc3RydWN0IGVmeF9tYWNfb3BlcmF0aW9ucyBmYWxjb25feG1hY19vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGVmeF9tYWNfb3BlcmF0aW9ucyBmYWxjb25feG1hY19vcGVyYXRpb25zID0gewogCS5yZWNvbmZpZ3VyZQk9IGZhbGNvbl9yZWNvbmZpZ3VyZV94bWFjLAogCS51cGRhdGVfc3RhdHMJPSBmYWxjb25fdXBkYXRlX3N0YXRzX3htYWMsCiAJLmNoZWNrX2ZhdWx0CT0gZmFsY29uX3htYWNfY2hlY2tfZmF1bHQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbWFjLmggYi9kcml2ZXJzL25ldC9zZmMvbWFjLmgKaW5kZXggNjg4NmNkZi4uZDZhMjU1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL21hYy5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9tYWMuaApAQCAtMTMsOCArMTMsOCBAQAogCiAjaW5jbHVkZSAibmV0X2RyaXZlci5oIgogCi1leHRlcm4gc3RydWN0IGVmeF9tYWNfb3BlcmF0aW9ucyBmYWxjb25feG1hY19vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCBlZnhfbWFjX29wZXJhdGlvbnMgZWZ4X21jZGlfbWFjX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGVmeF9tYWNfb3BlcmF0aW9ucyBmYWxjb25feG1hY19vcGVyYXRpb25zOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBlZnhfbWFjX29wZXJhdGlvbnMgZWZ4X21jZGlfbWFjX29wZXJhdGlvbnM7CiBleHRlcm4gaW50IGVmeF9tY2RpX21hY19zdGF0cyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBkbWFfYWRkcl90IGRtYV9hZGRyLAogCQkJICAgICAgdTMyIGRtYV9sZW4sIGludCBlbmFibGUsIGludCBjbGVhcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9tY2RpLmMgYi9kcml2ZXJzL25ldC9zZmMvbWNkaS5jCmluZGV4IGQ5ODQ3OTAuLjNkZDQ1ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9tY2RpLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL21jZGkuYwpAQCAtNTAsNiArNTAsMjAgQEAKIAlyZXR1cm4gJm5pY19kYXRhLT5tY2RpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQKK2VmeF9tY2RpX3JlYWRkKHN0cnVjdCBlZnhfbmljICplZngsIGVmeF9kd29yZF90ICp2YWx1ZSwgdW5zaWduZWQgcmVnKQoreworCXN0cnVjdCBzaWVuYV9uaWNfZGF0YSAqbmljX2RhdGEgPSBlZngtPm5pY19kYXRhOworCXZhbHVlLT51MzJbMF0gPSAoX19mb3JjZSBfX2xlMzIpX19yYXdfcmVhZGwobmljX2RhdGEtPm1jZGlfc21lbSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZWZ4X21jZGlfd3JpdGVkKHN0cnVjdCBlZnhfbmljICplZngsIGNvbnN0IGVmeF9kd29yZF90ICp2YWx1ZSwgdW5zaWduZWQgcmVnKQoreworCXN0cnVjdCBzaWVuYV9uaWNfZGF0YSAqbmljX2RhdGEgPSBlZngtPm5pY19kYXRhOworCV9fcmF3X3dyaXRlbCgoX19mb3JjZSB1MzIpdmFsdWUtPnUzMlswXSwgbmljX2RhdGEtPm1jZGlfc21lbSArIHJlZyk7Cit9CisKIHZvaWQgZWZ4X21jZGlfaW5pdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewogCXN0cnVjdCBlZnhfbWNkaV9pZmFjZSAqbWNkaTsKQEAgLTcwLDggKzg0LDggQEAKIAkJCSAgICBjb25zdCB1OCAqaW5idWYsIHNpemVfdCBpbmxlbikKIHsKIAlzdHJ1Y3QgZWZ4X21jZGlfaWZhY2UgKm1jZGkgPSBlZnhfbWNkaShlZngpOwotCXVuc2lnbmVkIHBkdSA9IEZSX0NaX01DX1RSRUdfU01FTSArIE1DRElfUERVKGVmeCk7Ci0JdW5zaWduZWQgZG9vcmJlbGwgPSBGUl9DWl9NQ19UUkVHX1NNRU0gKyBNQ0RJX0RPT1JCRUxMKGVmeCk7CisJdW5zaWduZWQgcGR1ID0gTUNESV9QRFUoZWZ4KTsKKwl1bnNpZ25lZCBkb29yYmVsbCA9IE1DRElfRE9PUkJFTEwoZWZ4KTsKIAl1bnNpZ25lZCBpbnQgaTsKIAllZnhfZHdvcmRfdCBoZHI7CiAJdTMyIHhmbGFncywgc2Vxbm87CkBAIC05MiwzMCArMTA2LDI4IEBACiAJCQkgICAgIE1DRElfSEVBREVSX1NFUSwgc2Vxbm8sCiAJCQkgICAgIE1DRElfSEVBREVSX1hGTEFHUywgeGZsYWdzKTsKIAotCWVmeF93cml0ZWQoZWZ4LCAmaGRyLCBwZHUpOworCWVmeF9tY2RpX3dyaXRlZChlZngsICZoZHIsIHBkdSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaW5sZW47IGkgKz0gNCkgewotCQlfZWZ4X3dyaXRlZChlZngsICooKF9fbGUzMiAqKShpbmJ1ZiArIGkpKSwgcGR1ICsgNCArIGkpOwotCQkvKiB1c2Ugd21iKCkgd2l0aGluIGxvb3AgdG8gaW5oaWJpdCB3cml0ZSBjb21iaW5pbmcgKi8KLQkJd21iKCk7Ci0JfQorCWZvciAoaSA9IDA7IGkgPCBpbmxlbjsgaSArPSA0KQorCQllZnhfbWNkaV93cml0ZWQoZWZ4LCAoY29uc3QgZWZ4X2R3b3JkX3QgKikoaW5idWYgKyBpKSwKKwkJCQlwZHUgKyA0ICsgaSk7CiAKIAkvKiByaW5nIHRoZSBkb29yYmVsbCB3aXRoIGEgZGlzdGluY3RpdmUgdmFsdWUgKi8KLQlfZWZ4X3dyaXRlZChlZngsIChfX2ZvcmNlIF9fbGUzMikgMHg0NTc4OWFiYywgZG9vcmJlbGwpOwotCXdtYigpOworCUVGWF9QT1BVTEFURV9EV09SRF8xKGhkciwgRUZYX0RXT1JEXzAsIDB4NDU3ODlhYmMpOworCWVmeF9tY2RpX3dyaXRlZChlZngsICZoZHIsIGRvb3JiZWxsKTsKIH0KIAogc3RhdGljIHZvaWQgZWZ4X21jZGlfY29weW91dChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCB1OCAqb3V0YnVmLCBzaXplX3Qgb3V0bGVuKQogewogCXN0cnVjdCBlZnhfbWNkaV9pZmFjZSAqbWNkaSA9IGVmeF9tY2RpKGVmeCk7Ci0JdW5zaWduZWQgaW50IHBkdSA9IEZSX0NaX01DX1RSRUdfU01FTSArIE1DRElfUERVKGVmeCk7CisJdW5zaWduZWQgaW50IHBkdSA9IE1DRElfUERVKGVmeCk7CiAJaW50IGk7CiAKIAlCVUdfT04oYXRvbWljX3JlYWQoJm1jZGktPnN0YXRlKSA9PSBNQ0RJX1NUQVRFX1FVSUVTQ0VOVCk7CiAJQlVHX09OKG91dGxlbiAmIDMgfHwgb3V0bGVuID49IDB4MTAwKTsKIAogCWZvciAoaSA9IDA7IGkgPCBvdXRsZW47IGkgKz0gNCkKLQkJKigoX19sZTMyICopKG91dGJ1ZiArIGkpKSA9IF9lZnhfcmVhZGQoZWZ4LCBwZHUgKyA0ICsgaSk7CisJCWVmeF9tY2RpX3JlYWRkKGVmeCwgKGVmeF9kd29yZF90ICopKG91dGJ1ZiArIGkpLCBwZHUgKyA0ICsgaSk7CiB9CiAKIHN0YXRpYyBpbnQgZWZ4X21jZGlfcG9sbChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQpAQCAtMTIzLDcgKzEzNSw3IEBACiAJc3RydWN0IGVmeF9tY2RpX2lmYWNlICptY2RpID0gZWZ4X21jZGkoZWZ4KTsKIAl1bnNpZ25lZCBpbnQgdGltZSwgZmluaXNoOwogCXVuc2lnbmVkIGludCByZXNwc2VxLCByZXNwY21kLCBlcnJvcjsKLQl1bnNpZ25lZCBpbnQgcGR1ID0gRlJfQ1pfTUNfVFJFR19TTUVNICsgTUNESV9QRFUoZWZ4KTsKKwl1bnNpZ25lZCBpbnQgcGR1ID0gTUNESV9QRFUoZWZ4KTsKIAl1bnNpZ25lZCBpbnQgcmMsIHNwaW5zOwogCWVmeF9kd29yZF90IHJlZzsKIApAQCAtMTQ5LDggKzE2MSw3IEBACiAKIAkJdGltZSA9IGdldF9zZWNvbmRzKCk7CiAKLQkJcm1iKCk7Ci0JCWVmeF9yZWFkZChlZngsICZyZWcsIHBkdSk7CisJCWVmeF9tY2RpX3JlYWRkKGVmeCwgJnJlZywgcGR1KTsKIAogCQkvKiBBbGwgMSdzIGluZGljYXRlcyB0aGF0IHNoYXJlZCBtZW1vcnkgaXMgaW4gcmVzZXQgKGFuZCBpcwogCQkgKiBub3QgYSB2YWxpZCBoZWFkZXIpLiBXYWl0IGZvciBpdCB0byBjb21lIG91dCByZXNldCBiZWZvcmUKQEAgLTE3Nyw3ICsxODgsNyBAQAogCQkJICByZXNwc2VxLCBtY2RpLT5zZXFubyk7CiAJCXJjID0gRUlPOwogCX0gZWxzZSBpZiAoZXJyb3IpIHsKLQkJZWZ4X3JlYWRkKGVmeCwgJnJlZywgcGR1ICsgNCk7CisJCWVmeF9tY2RpX3JlYWRkKGVmeCwgJnJlZywgcGR1ICsgNCk7CiAJCXN3aXRjaCAoRUZYX0RXT1JEX0ZJRUxEKHJlZywgRUZYX0RXT1JEXzApKSB7CiAjZGVmaW5lIFRSQU5TTEFURV9FUlJPUihuYW1lKQkJCQkJXAogCQljYXNlIE1DX0NNRF9FUlJfICMjIG5hbWU6CQkJXApAQCAtMjExLDIxICsyMjIsMjEgQEAKIC8qIFRlc3QgYW5kIGNsZWFyIE1DLXJlYm9vdGVkIGZsYWcgZm9yIHRoaXMgcG9ydC9mdW5jdGlvbiAqLwogaW50IGVmeF9tY2RpX3BvbGxfcmVib290KHN0cnVjdCBlZnhfbmljICplZngpCiB7Ci0JdW5zaWduZWQgaW50IGFkZHIgPSBGUl9DWl9NQ19UUkVHX1NNRU0gKyBNQ0RJX1JFQk9PVF9GTEFHKGVmeCk7CisJdW5zaWduZWQgaW50IGFkZHIgPSBNQ0RJX1JFQk9PVF9GTEFHKGVmeCk7CiAJZWZ4X2R3b3JkX3QgcmVnOwogCXVpbnQzMl90IHZhbHVlOwogCiAJaWYgKGVmeF9uaWNfcmV2KGVmeCkgPCBFRlhfUkVWX1NJRU5BX0EwKQogCQlyZXR1cm4gZmFsc2U7CiAKLQllZnhfcmVhZGQoZWZ4LCAmcmVnLCBhZGRyKTsKKwllZnhfbWNkaV9yZWFkZChlZngsICZyZWcsIGFkZHIpOwogCXZhbHVlID0gRUZYX0RXT1JEX0ZJRUxEKHJlZywgRUZYX0RXT1JEXzApOwogCiAJaWYgKHZhbHVlID09IDApCiAJCXJldHVybiAwOwogCiAJRUZYX1pFUk9fRFdPUkQocmVnKTsKLQllZnhfd3JpdGVkKGVmeCwgJnJlZywgYWRkcik7CisJZWZ4X21jZGlfd3JpdGVkKGVmeCwgJnJlZywgYWRkcik7CiAKIAlpZiAodmFsdWUgPT0gTUNfU1RBVFVTX0RXT1JEX0FTU0VSVCkKIAkJcmV0dXJuIC1FSU5UUjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9tY2RpX21hYy5jIGIvZHJpdmVycy9uZXQvc2ZjL21jZGlfbWFjLmMKaW5kZXggMzNmNzI5NC4uNTBjMjA3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL21jZGlfbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL21jZGlfbWFjLmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogfQogCiAKLXN0cnVjdCBlZnhfbWFjX29wZXJhdGlvbnMgZWZ4X21jZGlfbWFjX29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgZWZ4X21hY19vcGVyYXRpb25zIGVmeF9tY2RpX21hY19vcGVyYXRpb25zID0gewogCS5yZWNvbmZpZ3VyZQk9IGVmeF9tY2RpX21hY19yZWNvbmZpZ3VyZSwKIAkudXBkYXRlX3N0YXRzCT0gZWZ4X3BvcnRfZHVtbXlfb3Bfdm9pZCwKIAkuY2hlY2tfZmF1bHQgCT0gZWZ4X21jZGlfbWFjX2NoZWNrX2ZhdWx0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL21jZGlfcGh5LmMgYi9kcml2ZXJzL25ldC9zZmMvbWNkaV9waHkuYwppbmRleCA3ZTNjNjViLi42YzYzYWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbWNkaV9waHkuYworKysgYi9kcml2ZXJzL25ldC9zZmMvbWNkaV9waHkuYwpAQCAtNTEzLDcgKzUxMyw3IEBACiAJZWNtZC0+c3VwcG9ydGVkID0KIAkJbWNkaV90b19ldGh0b29sX2NhcChwaHlfY2ZnLT5tZWRpYSwgcGh5X2NmZy0+c3VwcG9ydGVkX2NhcCk7CiAJZWNtZC0+YWR2ZXJ0aXNpbmcgPSBlZngtPmxpbmtfYWR2ZXJ0aXNpbmc7Ci0JZWNtZC0+c3BlZWQgPSBlZngtPmxpbmtfc3RhdGUuc3BlZWQ7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIGVmeC0+bGlua19zdGF0ZS5zcGVlZCk7CiAJZWNtZC0+ZHVwbGV4ID0gZWZ4LT5saW5rX3N0YXRlLmZkOwogCWVjbWQtPnBvcnQgPSBtY2RpX3RvX2V0aHRvb2xfbWVkaWEocGh5X2NmZy0+bWVkaWEpOwogCWVjbWQtPnBoeV9hZGRyZXNzID0gcGh5X2NmZy0+cG9ydDsKQEAgLTU0NSw3ICs1NDUsNyBAQAogCQljYXBzID0gKGV0aHRvb2xfdG9fbWNkaV9jYXAoZWNtZC0+YWR2ZXJ0aXNpbmcpIHwKIAkJCSAxIDw8IE1DX0NNRF9QSFlfQ0FQX0FOX0xCTik7CiAJfSBlbHNlIGlmIChlY21kLT5kdXBsZXgpIHsKLQkJc3dpdGNoIChlY21kLT5zcGVlZCkgeworCQlzd2l0Y2ggKGV0aHRvb2xfY21kX3NwZWVkKGVjbWQpKSB7CiAJCWNhc2UgMTA6ICAgIGNhcHMgPSAxIDw8IE1DX0NNRF9QSFlfQ0FQXzEwRkRYX0xCTjsgICAgYnJlYWs7CiAJCWNhc2UgMTAwOiAgIGNhcHMgPSAxIDw8IE1DX0NNRF9QSFlfQ0FQXzEwMEZEWF9MQk47ICAgYnJlYWs7CiAJCWNhc2UgMTAwMDogIGNhcHMgPSAxIDw8IE1DX0NNRF9QSFlfQ0FQXzEwMDBGRFhfTEJOOyAgYnJlYWs7CkBAIC01NTMsNyArNTUzLDcgQEAKIAkJZGVmYXVsdDogICAgcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9IGVsc2UgewotCQlzd2l0Y2ggKGVjbWQtPnNwZWVkKSB7CisJCXN3aXRjaCAoZXRodG9vbF9jbWRfc3BlZWQoZWNtZCkpIHsKIAkJY2FzZSAxMDogICAgY2FwcyA9IDEgPDwgTUNfQ01EX1BIWV9DQVBfMTBIRFhfTEJOOyAgICBicmVhazsKIAkJY2FzZSAxMDA6ICAgY2FwcyA9IDEgPDwgTUNfQ01EX1BIWV9DQVBfMTAwSERYX0xCTjsgICBicmVhazsKIAkJY2FzZSAxMDAwOiAgY2FwcyA9IDEgPDwgTUNfQ01EX1BIWV9DQVBfMTAwMEhEWF9MQk47ICBicmVhazsKQEAgLTczOSw3ICs3MzksNyBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdHJ1Y3QgZWZ4X3BoeV9vcGVyYXRpb25zIGVmeF9tY2RpX3BoeV9vcHMgPSB7Citjb25zdCBzdHJ1Y3QgZWZ4X3BoeV9vcGVyYXRpb25zIGVmeF9tY2RpX3BoeV9vcHMgPSB7CiAJLnByb2JlCQk9IGVmeF9tY2RpX3BoeV9wcm9iZSwKIAkuaW5pdCAJIAk9IGVmeF9wb3J0X2R1bW15X29wX2ludCwKIAkucmVjb25maWd1cmUJPSBlZnhfbWNkaV9waHlfcmVjb25maWd1cmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbWRpb18xMGcuYyBiL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5jCmluZGV4IDE5ZTY4YzIuLjdhYjM4NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5jCkBAIC0yMzIsMTIgKzIzMiwxMiBAQAogICovCiBpbnQgZWZ4X21kaW9fc2V0X3NldHRpbmdzKHN0cnVjdCBlZnhfbmljICplZngsIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKIHsKLQlzdHJ1Y3QgZXRodG9vbF9jbWQgcHJldjsKKwlzdHJ1Y3QgZXRodG9vbF9jbWQgcHJldiA9IHsgLmNtZCA9IEVUSFRPT0xfR1NFVCB9OwogCiAJZWZ4LT5waHlfb3AtPmdldF9zZXR0aW5ncyhlZngsICZwcmV2KTsKIAogCWlmIChlY21kLT5hZHZlcnRpc2luZyA9PSBwcmV2LmFkdmVydGlzaW5nICYmCi0JICAgIGVjbWQtPnNwZWVkID09IHByZXYuc3BlZWQgJiYKKwkgICAgZXRodG9vbF9jbWRfc3BlZWQoZWNtZCkgPT0gZXRodG9vbF9jbWRfc3BlZWQoJnByZXYpICYmCiAJICAgIGVjbWQtPmR1cGxleCA9PSBwcmV2LmR1cGxleCAmJgogCSAgICBlY21kLT5wb3J0ID09IHByZXYucG9ydCAmJgogCSAgICBlY21kLT5hdXRvbmVnID09IHByZXYuYXV0b25lZykKQEAgLTI4NCw3ICsyODQsNyBAQAogCWVmeF9tZGlvX3dyaXRlKGVmeCwgTURJT19NTURfQU4sIE1ESU9fQ1RSTDEsIHJlZyk7CiB9CiAKLWVudW0gZWZ4X2ZjX3R5cGUgZWZ4X21kaW9fZ2V0X3BhdXNlKHN0cnVjdCBlZnhfbmljICplZngpCit1OCBlZnhfbWRpb19nZXRfcGF1c2Uoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKIAlCVUlMRF9CVUdfT04oRUZYX0ZDX0FVVE8gJiAoRUZYX0ZDX1JYIHwgRUZYX0ZDX1RYKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5oIGIvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmgKaW5kZXggZGYwNzAzOS4uYTk3ZGJiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmgKQEAgLTkyLDcgKzkyLDcgQEAKIC8qIEdldCBwYXVzZSBwYXJhbWV0ZXJzIGZyb20gQU4gaWYgYXZhaWxhYmxlIChvdGhlcndpc2UgcmV0dXJuCiAgKiByZXF1ZXN0ZWQgcGF1c2UgcGFyYW1ldGVycykKICAqLwotZW51bSBlZnhfZmNfdHlwZSBlZnhfbWRpb19nZXRfcGF1c2Uoc3RydWN0IGVmeF9uaWMgKmVmeCk7Cit1OCBlZnhfbWRpb19nZXRfcGF1c2Uoc3RydWN0IGVmeF9uaWMgKmVmeCk7CiAKIC8qIFdhaXQgZm9yIHNwZWNpZmllZCBNTURzIHRvIGV4aXQgcmVzZXQgd2l0aGluIGEgdGltZW91dCAqLwogZXh0ZXJuIGludCBlZnhfbWRpb193YWl0X3Jlc2V0X21tZHMoc3RydWN0IGVmeF9uaWMgKmVmeCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9uZXRfZHJpdmVyLmggYi9kcml2ZXJzL25ldC9zZmMvbmV0X2RyaXZlci5oCmluZGV4IDE5MWEzMTEuLmU4ZDVmMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9uZXRfZHJpdmVyLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL25ldF9kcml2ZXIuaApAQCAtNDQ5LDExICs0NDksOSBAQAogc3RydWN0IGVmeF9uaWM7CiAKIC8qIFBzZXVkbyBiaXQtbWFzayBmbG93IGNvbnRyb2wgZmllbGQgKi8KLWVudW0gZWZ4X2ZjX3R5cGUgewotCUVGWF9GQ19SWCA9IEZMT1dfQ1RSTF9SWCwKLQlFRlhfRkNfVFggPSBGTE9XX0NUUkxfVFgsCi0JRUZYX0ZDX0FVVE8gPSA0LAotfTsKKyNkZWZpbmUgRUZYX0ZDX1JYCUZMT1dfQ1RSTF9SWAorI2RlZmluZSBFRlhfRkNfVFgJRkxPV19DVFJMX1RYCisjZGVmaW5lIEVGWF9GQ19BVVRPCTQKIAogLyoqCiAgKiBzdHJ1Y3QgZWZ4X2xpbmtfc3RhdGUgLSBDdXJyZW50IHN0YXRlIG9mIHRoZSBsaW5rCkBAIC00NjUsNyArNDYzLDcgQEAKIHN0cnVjdCBlZnhfbGlua19zdGF0ZSB7CiAJYm9vbCB1cDsKIAlib29sIGZkOwotCWVudW0gZWZ4X2ZjX3R5cGUgZmM7CisJdTggZmM7CiAJdW5zaWduZWQgaW50IHNwZWVkOwogfTsKIApAQCAtNjcwLDE2ICs2NjgsMTQgQEAKICAqIEBtdGRfbGlzdDogTGlzdCBvZiBNVERzIGF0dGFjaGVkIHRvIHRoZSBOSUMKICAqIEBuaWNfZGF0YTogSGFyZHdhcmUgZGVwZW5kZW50IHN0YXRlCiAgKiBAbWFjX2xvY2s6IE1BQyBhY2Nlc3MgbG9jay4gUHJvdGVjdHMgQHBvcnRfZW5hYmxlZCwgQHBoeV9tb2RlLAotICoJQHBvcnRfaW5oaWJpdGVkLCBlZnhfbW9uaXRvcigpIGFuZCBlZnhfcmVjb25maWd1cmVfcG9ydCgpCisgKgllZnhfbW9uaXRvcigpIGFuZCBlZnhfcmVjb25maWd1cmVfcG9ydCgpCiAgKiBAcG9ydF9lbmFibGVkOiBQb3J0IGVuYWJsZWQgaW5kaWNhdG9yLgogICoJU2VyaWFsaXNlcyBlZnhfc3RvcF9hbGwoKSwgZWZ4X3N0YXJ0X2FsbCgpLCBlZnhfbW9uaXRvcigpIGFuZAogICoJZWZ4X21hY193b3JrKCkgd2l0aCBrZXJuZWwgaW50ZXJmYWNlcy4gU2FmZSB0byByZWFkIHVuZGVyIGFueQogICoJb25lIG9mIHRoZSBydG5sX2xvY2ssIG1hY19sb2NrLCBvciBuZXRpZl90eF9sb2NrLCBidXQgYWxsIHRocmVlIG11c3QKICAqCWJlIGhlbGQgdG8gbW9kaWZ5IGl0LgotICogQHBvcnRfaW5oaWJpdGVkOiBJZiBzZXQsIHRoZSBuZXRpZl9jYXJyaWVyIGlzIGFsd2F5cyBvZmYuIEhvbGQgdGhlIG1hY19sb2NrCiAgKiBAcG9ydF9pbml0aWFsaXplZDogUG9ydCBpbml0aWFsaXplZD8KICAqIEBuZXRfZGV2OiBPcGVyYXRpbmcgc3lzdGVtIG5ldHdvcmsgZGV2aWNlLiBDb25zaWRlciBob2xkaW5nIHRoZSBydG5sIGxvY2sKLSAqIEByeF9jaGVja3N1bV9lbmFibGVkOiBSWCBjaGVja3N1bW1pbmcgZW5hYmxlZAogICogQHN0YXRzX2J1ZmZlcjogRE1BIGJ1ZmZlciBmb3Igc3RhdGlzdGljcwogICogQG1hY19vcDogTUFDIGludGVyZmFjZQogICogQHBoeV90eXBlOiBQSFkgdHlwZQpAQCAtNzY1LDE4ICs3NjEsMTYgQEAKIAlzdHJ1Y3QgbXV0ZXggbWFjX2xvY2s7CiAJc3RydWN0IHdvcmtfc3RydWN0IG1hY193b3JrOwogCWJvb2wgcG9ydF9lbmFibGVkOwotCWJvb2wgcG9ydF9pbmhpYml0ZWQ7CiAKIAlib29sIHBvcnRfaW5pdGlhbGl6ZWQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXY7Ci0JYm9vbCByeF9jaGVja3N1bV9lbmFibGVkOwogCiAJc3RydWN0IGVmeF9idWZmZXIgc3RhdHNfYnVmZmVyOwogCi0Jc3RydWN0IGVmeF9tYWNfb3BlcmF0aW9ucyAqbWFjX29wOworCWNvbnN0IHN0cnVjdCBlZnhfbWFjX29wZXJhdGlvbnMgKm1hY19vcDsKIAogCXVuc2lnbmVkIGludCBwaHlfdHlwZTsKLQlzdHJ1Y3QgZWZ4X3BoeV9vcGVyYXRpb25zICpwaHlfb3A7CisJY29uc3Qgc3RydWN0IGVmeF9waHlfb3BlcmF0aW9ucyAqcGh5X29wOwogCXZvaWQgKnBoeV9kYXRhOwogCXN0cnVjdCBtZGlvX2lmX2luZm8gbWRpbzsKIAl1bnNpZ25lZCBpbnQgbWRpb19idXM7CkBAIC03ODgsNyArNzgyLDcgQEAKIAogCWJvb2wgcHJvbWlzY3VvdXM7CiAJdW5pb24gZWZ4X211bHRpY2FzdF9oYXNoIG11bHRpY2FzdF9oYXNoOwotCWVudW0gZWZ4X2ZjX3R5cGUgd2FudGVkX2ZjOworCXU4IHdhbnRlZF9mYzsKIAogCWF0b21pY190IHJ4X3Jlc2V0OwogCWVudW0gZWZ4X2xvb3BiYWNrX21vZGUgbG9vcGJhY2tfbW9kZTsKQEAgLTg5Nyw3ICs4OTEsNyBAQAogCXZvaWQgKCpyZXN1bWVfd29sKShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIAlpbnQgKCp0ZXN0X3JlZ2lzdGVycykoc3RydWN0IGVmeF9uaWMgKmVmeCk7CiAJaW50ICgqdGVzdF9udnJhbSkoc3RydWN0IGVmeF9uaWMgKmVmeCk7Ci0Jc3RydWN0IGVmeF9tYWNfb3BlcmF0aW9ucyAqZGVmYXVsdF9tYWNfb3BzOworCWNvbnN0IHN0cnVjdCBlZnhfbWFjX29wZXJhdGlvbnMgKmRlZmF1bHRfbWFjX29wczsKIAogCWludCByZXZpc2lvbjsKIAl1bnNpZ25lZCBpbnQgbWVtX21hcF9zaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL25pYy5jIGIvZHJpdmVycy9uZXQvc2ZjL25pYy5jCmluZGV4IDEwZjFjYjcuLmYyYTJiOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9uaWMuYworKysgYi9kcml2ZXJzL25ldC9zZmMvbmljLmMKQEAgLTg1Miw3ICs4NTIsNiBAQAogCXVuc2lnbmVkIGV4cGVjdGVkX3B0cjsKIAlib29sIHJ4X2V2X3BrdF9vaywgZGlzY2FyZCA9IGZhbHNlLCBjaGVja3N1bW1lZDsKIAlzdHJ1Y3QgZWZ4X3J4X3F1ZXVlICpyeF9xdWV1ZTsKLQlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gY2hhbm5lbC0+ZWZ4OwogCiAJLyogQmFzaWMgcGFja2V0IGluZm9ybWF0aW9uICovCiAJcnhfZXZfYnl0ZV9jbnQgPSBFRlhfUVdPUkRfRklFTEQoKmV2ZW50LCBGU0ZfQVpfUlhfRVZfQllURV9DTlQpOwpAQCAtODc1LDkgKzg3NCw4IEBACiAJCSAqIFVEUC9JUCwgdGhlbiB3ZSBjYW4gcmVseSBvbiB0aGUgaGFyZHdhcmUgY2hlY2tzdW0uCiAJCSAqLwogCQljaGVja3N1bW1lZCA9Ci0JCQlsaWtlbHkoZWZ4LT5yeF9jaGVja3N1bV9lbmFibGVkKSAmJgotCQkJKHJ4X2V2X2hkcl90eXBlID09IEZTRV9DWl9SWF9FVl9IRFJfVFlQRV9JUFY0VjZfVENQIHx8Ci0JCQkgcnhfZXZfaGRyX3R5cGUgPT0gRlNFX0NaX1JYX0VWX0hEUl9UWVBFX0lQVjRWNl9VRFApOworCQkJcnhfZXZfaGRyX3R5cGUgPT0gRlNFX0NaX1JYX0VWX0hEUl9UWVBFX0lQVjRWNl9UQ1AgfHwKKwkJCXJ4X2V2X2hkcl90eXBlID09IEZTRV9DWl9SWF9FVl9IRFJfVFlQRV9JUFY0VjZfVURQOwogCX0gZWxzZSB7CiAJCWVmeF9oYW5kbGVfcnhfbm90X29rKHJ4X3F1ZXVlLCBldmVudCwgJnJ4X2V2X3BrdF9vaywgJmRpc2NhcmQpOwogCQljaGVja3N1bW1lZCA9IGZhbHNlOwpAQCAtMTkzNyw2ICsxOTM1LDEzIEBACiAKIAkJc2l6ZSA9IG1pbl90KHNpemVfdCwgdGFibGUtPnN0ZXAsIDE2KTsKIAorCQlpZiAodGFibGUtPm9mZnNldCA+PSBlZngtPnR5cGUtPm1lbV9tYXBfc2l6ZSkgeworCQkJLyogTm8gbG9uZ2VyIG1hcHBlZDsgcmV0dXJuIGR1bW15IGRhdGEgKi8KKwkJCW1lbWNweShidWYsICJceGRlXHhjMFx4YWRceGRlIiwgNCk7CisJCQlidWYgKz0gdGFibGUtPnJvd3MgKiBzaXplOworCQkJY29udGludWU7CisJCX0KKwogCQlmb3IgKGkgPSAwOyBpIDwgdGFibGUtPnJvd3M7IGkrKykgewogCQkJc3dpdGNoICh0YWJsZS0+c3RlcCkgewogCQkJY2FzZSA0OiAvKiAzMi1iaXQgcmVnaXN0ZXIgb3IgU1JBTSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL25pYy5oIGIvZHJpdmVycy9uZXQvc2ZjL25pYy5oCmluZGV4IGE0MmRiNmUuLjRiZDFmMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9uaWMuaAorKysgYi9kcml2ZXJzL25ldC9zZmMvbmljLmgKQEAgLTE0MywxNiArMTQzLDE4IEBACiAvKioKICAqIHN0cnVjdCBzaWVuYV9uaWNfZGF0YSAtIFNpZW5hIE5JQyBzdGF0ZQogICogQG1jZGk6IE1hbmFnZW1lbnQtQ29udHJvbGxlci10by1Ecml2ZXIgSW50ZXJmYWNlCisgKiBAbWNkaV9zbWVtOiBNQ0RJIHNoYXJlZCBtZW1vcnkgbWFwcGluZy4gVGhlIG1hcHBpbmcgaXMgYWx3YXlzIHVuY2FjaGVhYmxlLgogICogQHdvbF9maWx0ZXJfaWQ6IFdha2Utb24tTEFOIHBhY2tldCBmaWx0ZXIgaWQKICAqLwogc3RydWN0IHNpZW5hX25pY19kYXRhIHsKIAlzdHJ1Y3QgZWZ4X21jZGlfaWZhY2UgbWNkaTsKKwl2b2lkIF9faW9tZW0gKm1jZGlfc21lbTsKIAlpbnQgd29sX2ZpbHRlcl9pZDsKIH07CiAKLWV4dGVybiBzdHJ1Y3QgZWZ4X25pY190eXBlIGZhbGNvbl9hMV9uaWNfdHlwZTsKLWV4dGVybiBzdHJ1Y3QgZWZ4X25pY190eXBlIGZhbGNvbl9iMF9uaWNfdHlwZTsKLWV4dGVybiBzdHJ1Y3QgZWZ4X25pY190eXBlIHNpZW5hX2EwX25pY190eXBlOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBlZnhfbmljX3R5cGUgZmFsY29uX2ExX25pY190eXBlOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBlZnhfbmljX3R5cGUgZmFsY29uX2IwX25pY190eXBlOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBlZnhfbmljX3R5cGUgc2llbmFfYTBfbmljX3R5cGU7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9waHkuaCBiL2RyaXZlcnMvbmV0L3NmYy9waHkuaAppbmRleCBiM2I3OTQ3Li4xMWQxNDhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvcGh5LmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3BoeS5oCkBAIC0xMywxNCArMTMsMTQgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAxMFhwcmVzcyAoU0ZYNzEwMSkgUEhZCiAgKi8KLWV4dGVybiBzdHJ1Y3QgZWZ4X3BoeV9vcGVyYXRpb25zIGZhbGNvbl9zZng3MTAxX3BoeV9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGVmeF9waHlfb3BlcmF0aW9ucyBmYWxjb25fc2Z4NzEwMV9waHlfb3BzOwogCiBleHRlcm4gdm9pZCB0ZW54cHJlc3Nfc2V0X2lkX2xlZChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBlbnVtIGVmeF9sZWRfbW9kZSBtb2RlKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEFNQ0MvUXVha2UgUVQyMDJ4IFBIWXMKICAqLwotZXh0ZXJuIHN0cnVjdCBlZnhfcGh5X29wZXJhdGlvbnMgZmFsY29uX3F0MjAyeF9waHlfb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBlZnhfcGh5X29wZXJhdGlvbnMgZmFsY29uX3F0MjAyeF9waHlfb3BzOwogCiAvKiBUaGVzZSBQSFlzIHByb3ZpZGUgdmFyaW91cyBIL1cgY29udHJvbCBzdGF0ZXMgZm9yIExFRHMgKi8KICNkZWZpbmUgUVVBS0VfTEVEX0xJTktfSU5WQUwJKDApCkBAIC0zOSw3ICszOSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBUcmFuc3dpdGNoIENYNCByZXRpbWVyCiAqLwotZXh0ZXJuIHN0cnVjdCBlZnhfcGh5X29wZXJhdGlvbnMgZmFsY29uX3R4Y19waHlfb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBlZnhfcGh5X29wZXJhdGlvbnMgZmFsY29uX3R4Y19waHlfb3BzOwogCiAjZGVmaW5lIFRYQ19HUElPX0RJUl9JTlBVVAkwCiAjZGVmaW5lIFRYQ19HUElPX0RJUl9PVVRQVVQJMQpAQCAtNTAsNyArNTAsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNpZW5hIG1hbmFnZWQgUEhZcwogICovCi1leHRlcm4gc3RydWN0IGVmeF9waHlfb3BlcmF0aW9ucyBlZnhfbWNkaV9waHlfb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBlZnhfcGh5X29wZXJhdGlvbnMgZWZ4X21jZGlfcGh5X29wczsKIAogZXh0ZXJuIGludCBlZnhfbWNkaV9tZGlvX3JlYWQoc3RydWN0IGVmeF9uaWMgKmVmeCwgdW5zaWduZWQgaW50IGJ1cywKIAkJCSAgICAgIHVuc2lnbmVkIGludCBwcnRhZCwgdW5zaWduZWQgaW50IGRldmFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3F0MjAyeF9waHkuYyBiL2RyaXZlcnMvbmV0L3NmYy9xdDIwMnhfcGh5LmMKaW5kZXggNTVmOTA5Mi4uN2FkOTdlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3F0MjAyeF9waHkuYworKysgYi9kcml2ZXJzL25ldC9zZmMvcXQyMDJ4X3BoeS5jCkBAIC00NDksNyArNDQ5LDcgQEAKIAllZngtPnBoeV9kYXRhID0gTlVMTDsKIH0KIAotc3RydWN0IGVmeF9waHlfb3BlcmF0aW9ucyBmYWxjb25fcXQyMDJ4X3BoeV9vcHMgPSB7Citjb25zdCBzdHJ1Y3QgZWZ4X3BoeV9vcGVyYXRpb25zIGZhbGNvbl9xdDIwMnhfcGh5X29wcyA9IHsKIAkucHJvYmUJCSA9IHF0MjAyeF9waHlfcHJvYmUsCiAJLmluaXQJCSA9IHF0MjAyeF9waHlfaW5pdCwKIAkucmVjb25maWd1cmUJID0gcXQyMDJ4X3BoeV9yZWNvbmZpZ3VyZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9yeC5jIGIvZHJpdmVycy9uZXQvc2ZjL3J4LmMKaW5kZXggYzBmZGI1OS4uNjJlNDM2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3J4LmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3J4LmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgogI2luY2x1ZGUgPGxpbnV4L3VkcC5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CiAjaW5jbHVkZSAibmV0X2RyaXZlci5oIgpAQCAtNjA1LDYgKzYwNiw5IEBACiAJCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCBjaGFubmVsLT5jaGFubmVsKTsKIAl9CiAKKwlpZiAodW5saWtlbHkoIShlZngtPm5ldF9kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pKSkKKwkJY2hlY2tzdW1tZWQgPSBmYWxzZTsKKwogCWlmIChsaWtlbHkoY2hlY2tzdW1tZWQgfHwgcnhfYnVmLT5pc19wYWdlKSkgewogCQllZnhfcnhfcGFja2V0X2dybyhjaGFubmVsLCByeF9idWYsIGVoLCBjaGVja3N1bW1lZCk7CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9zZWxmdGVzdC5jIGIvZHJpdmVycy9uZXQvc2ZjL3NlbGZ0ZXN0LmMKaW5kZXggNTBhZDNiYy4uODIyZjZjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3NlbGZ0ZXN0LmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3NlbGZ0ZXN0LmMKQEAgLTY5NSwxMiArNjk1LDEyIEBACiAJLyogT2ZmbGluZSAoaS5lLiBkaXNydXB0aXZlKSB0ZXN0aW5nCiAJICogVGhpcyBjaGVja3MgTUFDIGFuZCBQSFkgbG9vcGJhY2sgb24gdGhlIHNwZWNpZmllZCBwb3J0LiAqLwogCi0JLyogZm9yY2UgdGhlIGNhcnJpZXIgc3RhdGUgb2ZmIHNvIHRoZSBrZXJuZWwgZG9lc24ndCB0cmFuc21pdCBkdXJpbmcKLQkgKiB0aGUgbG9vcGJhY2sgdGVzdCwgYW5kIHRoZSB3YXRjaGRvZyB0aW1lb3V0IGRvZXNuJ3QgZmlyZS4gQWxzbyBwdXQKLQkgKiBmYWxjb24gaW50byBsb29wYmFjayBmb3IgdGhlIHJlZ2lzdGVyIHRlc3QuCisJLyogRGV0YWNoIHRoZSBkZXZpY2Ugc28gdGhlIGtlcm5lbCBkb2Vzbid0IHRyYW5zbWl0IGR1cmluZyB0aGUKKwkgKiBsb29wYmFjayB0ZXN0IGFuZCB0aGUgd2F0Y2hkb2cgdGltZW91dCBkb2Vzbid0IGZpcmUuCiAJICovCisJbmV0aWZfZGV2aWNlX2RldGFjaChlZngtPm5ldF9kZXYpOworCiAJbXV0ZXhfbG9jaygmZWZ4LT5tYWNfbG9jayk7Ci0JZWZ4LT5wb3J0X2luaGliaXRlZCA9IHRydWU7CiAJaWYgKGVmeC0+bG9vcGJhY2tfbW9kZXMpIHsKIAkJLyogV2UgbmVlZCB0aGUgMzEyIGNsb2NrIGZyb20gdGhlIFBIWSB0byB0ZXN0IHRoZSBYTUFDCiAJCSAqIHJlZ2lzdGVycywgc28gbW92ZSBpbnRvIFhHTUlJIGxvb3BiYWNrIGlmIGF2YWlsYWJsZSAqLwpAQCAtNzUwLDEyICs3NTAsMTEgQEAKIAkvKiByZXN0b3JlIHRoZSBQSFkgdG8gdGhlIHByZXZpb3VzIHN0YXRlICovCiAJbXV0ZXhfbG9jaygmZWZ4LT5tYWNfbG9jayk7CiAJZWZ4LT5waHlfbW9kZSA9IHBoeV9tb2RlOwotCWVmeC0+cG9ydF9pbmhpYml0ZWQgPSBmYWxzZTsKIAllZngtPmxvb3BiYWNrX21vZGUgPSBsb29wYmFja19tb2RlOwogCV9fZWZ4X3JlY29uZmlndXJlX3BvcnQoZWZ4KTsKIAltdXRleF91bmxvY2soJmVmeC0+bWFjX2xvY2spOwogCi0JbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKGVmeC0+bmV0X2Rldik7CisJbmV0aWZfZGV2aWNlX2F0dGFjaChlZngtPm5ldF9kZXYpOwogCiAJcmV0dXJuIHJjX3Rlc3Q7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvc2llbmEuYyBiL2RyaXZlcnMvbmV0L3NmYy9zaWVuYS5jCmluZGV4IGU0ZGQ4OTguLmZiNDcyMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9zaWVuYS5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9zaWVuYS5jCkBAIC0yMjAsMTIgKzIyMCwyNiBAQAogCWVmeF9yZWFkbyhlZngsICZyZWcsIEZSX0FaX0NTX0RFQlVHKTsKIAllZngtPm5ldF9kZXYtPmRldl9pZCA9IEVGWF9PV09SRF9GSUVMRChyZWcsIEZSRl9DWl9DU19QT1JUX05VTSkgLSAxOwogCisJLyogSW5pdGlhbGlzZSBNQ0RJICovCisJbmljX2RhdGEtPm1jZGlfc21lbSA9IGlvcmVtYXBfbm9jYWNoZShlZngtPm1lbWJhc2VfcGh5cyArCisJCQkJCSAgICAgIEZSX0NaX01DX1RSRUdfU01FTSwKKwkJCQkJICAgICAgRlJfQ1pfTUNfVFJFR19TTUVNX1NURVAgKgorCQkJCQkgICAgICBGUl9DWl9NQ19UUkVHX1NNRU1fUk9XUyk7CisJaWYgKCFuaWNfZGF0YS0+bWNkaV9zbWVtKSB7CisJCW5ldGlmX2VycihlZngsIHByb2JlLCBlZngtPm5ldF9kZXYsCisJCQkgICJjb3VsZCBub3QgbWFwIE1DREkgYXQgJWxseCsleFxuIiwKKwkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZyllZngtPm1lbWJhc2VfcGh5cyArCisJCQkgIEZSX0NaX01DX1RSRUdfU01FTSwKKwkJCSAgRlJfQ1pfTUNfVFJFR19TTUVNX1NURVAgKiBGUl9DWl9NQ19UUkVHX1NNRU1fUk9XUyk7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBmYWlsMTsKKwl9CiAJZWZ4X21jZGlfaW5pdChlZngpOwogCiAJLyogUmVjb3ZlciBmcm9tIGEgZmFpbGVkIGFzc2VydGlvbiBiZWZvcmUgcHJvYmluZyAqLwogCXJjID0gZWZ4X21jZGlfaGFuZGxlX2Fzc2VydGlvbihlZngpOwogCWlmIChyYykKLQkJZ290byBmYWlsMTsKKwkJZ290byBmYWlsMjsKIAogCS8qIExldCB0aGUgQk1DIGtub3cgdGhhdCB0aGUgZHJpdmVyIGlzIG5vdyBpbiBjaGFyZ2Ugb2YgbGluayBhbmQKIAkgKiBmaWx0ZXIgc2V0dGluZ3MuIFdlIG11c3QgZG8gdGhpcyBiZWZvcmUgd2UgcmVzZXQgdGhlIE5JQyAqLwpAQCAtMjgwLDYgKzI5NCw3IEBACiBmYWlsMzoKIAllZnhfbWNkaV9kcnZfYXR0YWNoKGVmeCwgZmFsc2UsIE5VTEwpOwogZmFpbDI6CisJaW91bm1hcChuaWNfZGF0YS0+bWNkaV9zbWVtKTsKIGZhaWwxOgogCWtmcmVlKGVmeC0+bmljX2RhdGEpOwogCXJldHVybiByYzsKQEAgLTM1OSw2ICszNzQsOCBAQAogCiBzdGF0aWMgdm9pZCBzaWVuYV9yZW1vdmVfbmljKHN0cnVjdCBlZnhfbmljICplZngpCiB7CisJc3RydWN0IHNpZW5hX25pY19kYXRhICpuaWNfZGF0YSA9IGVmeC0+bmljX2RhdGE7CisKIAllZnhfbmljX2ZyZWVfYnVmZmVyKGVmeCwgJmVmeC0+aXJxX3N0YXR1cyk7CiAKIAlzaWVuYV9yZXNldF9odyhlZngsIFJFU0VUX1RZUEVfQUxMKTsKQEAgLTM2OCw3ICszODUsOCBAQAogCQllZnhfbWNkaV9kcnZfYXR0YWNoKGVmeCwgZmFsc2UsIE5VTEwpOwogCiAJLyogVGVhciBkb3duIHRoZSBwcml2YXRlIG5pYyBzdGF0ZSAqLwotCWtmcmVlKGVmeC0+bmljX2RhdGEpOworCWlvdW5tYXAobmljX2RhdGEtPm1jZGlfc21lbSk7CisJa2ZyZWUobmljX2RhdGEpOwogCWVmeC0+bmljX2RhdGEgPSBOVUxMOwogfQogCkBAIC01ODEsNyArNTk5LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCiAKLXN0cnVjdCBlZnhfbmljX3R5cGUgc2llbmFfYTBfbmljX3R5cGUgPSB7Citjb25zdCBzdHJ1Y3QgZWZ4X25pY190eXBlIHNpZW5hX2EwX25pY190eXBlID0gewogCS5wcm9iZSA9IHNpZW5hX3Byb2JlX25pYywKIAkucmVtb3ZlID0gc2llbmFfcmVtb3ZlX25pYywKIAkuaW5pdCA9IHNpZW5hX2luaXRfbmljLApAQCAtNjA2LDggKzYyNCw3IEBACiAJLmRlZmF1bHRfbWFjX29wcyA9ICZlZnhfbWNkaV9tYWNfb3BlcmF0aW9ucywKIAogCS5yZXZpc2lvbiA9IEVGWF9SRVZfU0lFTkFfQTAsCi0JLm1lbV9tYXBfc2l6ZSA9IChGUl9DWl9NQ19UUkVHX1NNRU0gKwotCQkJIEZSX0NaX01DX1RSRUdfU01FTV9TVEVQICogRlJfQ1pfTUNfVFJFR19TTUVNX1JPV1MpLAorCS5tZW1fbWFwX3NpemUgPSBGUl9DWl9NQ19UUkVHX1NNRU0sIC8qIE1DX1RSRUdfU01FTSBtYXBwZWQgc2VwYXJhdGVseSAqLwogCS50eGRfcHRyX3RibF9iYXNlID0gRlJfQlpfVFhfREVTQ19QVFJfVEJMLAogCS5yeGRfcHRyX3RibF9iYXNlID0gRlJfQlpfUlhfREVTQ19QVFJfVEJMLAogCS5idWZfdGJsX2Jhc2UgPSBGUl9CWl9CVUZfRlVMTF9UQkwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvdGVueHByZXNzLmMgYi9kcml2ZXJzL25ldC9zZmMvdGVueHByZXNzLmMKaW5kZXggZWZkY2ViMy4uN2IwZmQ4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3RlbnhwcmVzcy5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy90ZW54cHJlc3MuYwpAQCAtNDYwLDcgKzQ2MCw3IEBACiAJLyogSW4gbG9vcGJhY2ssIHRoZSBQSFkgYXV0b21hdGljYWxseSBicmluZ3MgdXAgdGhlIGNvcnJlY3QgaW50ZXJmYWNlLAogCSAqIGJ1dCBkb2Vzbid0IGFkdmVydGlzZSB0aGUgY29ycmVjdCBzcGVlZC4gU28gb3ZlcnJpZGUgaXQgKi8KIAlpZiAoTE9PUEJBQ0tfRVhURVJOQUwoZWZ4KSkKLQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDAwMDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIFNQRUVEXzEwMDAwKTsKIH0KIAogc3RhdGljIGludCB0ZW54cHJlc3Nfc2V0X3NldHRpbmdzKHN0cnVjdCBlZnhfbmljICplZngsIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKQEAgLTQ3OCw3ICs0NzgsNyBAQAogCQkJICBhZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsKTsKIH0KIAotc3RydWN0IGVmeF9waHlfb3BlcmF0aW9ucyBmYWxjb25fc2Z4NzEwMV9waHlfb3BzID0geworY29uc3Qgc3RydWN0IGVmeF9waHlfb3BlcmF0aW9ucyBmYWxjb25fc2Z4NzEwMV9waHlfb3BzID0gewogCS5wcm9iZQkJICA9IHRlbnhwcmVzc19waHlfcHJvYmUsCiAJLmluaXQgICAgICAgICAgICAgPSB0ZW54cHJlc3NfcGh5X2luaXQsCiAJLnJlY29uZmlndXJlICAgICAgPSB0ZW54cHJlc3NfcGh5X3JlY29uZmlndXJlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3R4LmMgYi9kcml2ZXJzL25ldC9zZmMvdHguYwppbmRleCBkMmM4NWRmLi44NGViOTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvdHguYworKysgYi9kcml2ZXJzL25ldC9zZmMvdHguYwpAQCAtMjA1LDcgKzIwNSw5IEBACiAJCQkJCWdvdG8gdW53aW5kOwogCQkJCX0KIAkJCQlzbXBfbWIoKTsKLQkJCQluZXRpZl90eF9zdGFydF9xdWV1ZSh0eF9xdWV1ZS0+Y29yZV90eHEpOworCQkJCWlmIChsaWtlbHkoIWVmeC0+bG9vcGJhY2tfc2VsZnRlc3QpKQorCQkJCQluZXRpZl90eF9zdGFydF9xdWV1ZSgKKwkJCQkJCXR4X3F1ZXVlLT5jb3JlX3R4cSk7CiAJCQl9CiAKIAkJCWluc2VydF9wdHIgPSB0eF9xdWV1ZS0+aW5zZXJ0X2NvdW50ICYgdHhfcXVldWUtPnB0cl9tYXNrOwpAQCAtMzM4LDggKzM0MCw3IEBACiAJc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWU7CiAJdW5zaWduZWQgaW5kZXgsIHR5cGU7CiAKLQlpZiAodW5saWtlbHkoZWZ4LT5wb3J0X2luaGliaXRlZCkpCi0JCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwlFRlhfV0FSTl9PTl9QQVJBTk9JRCghbmV0aWZfZGV2aWNlX3ByZXNlbnQobmV0X2RldikpOwogCiAJaW5kZXggPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKIAl0eXBlID0gc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCA/IEVGWF9UWFFfVFlQRV9PRkZMT0FEIDogMDsKQEAgLTQzNiw3ICs0MzcsNyBAQAogCXNtcF9tYigpOwogCWlmICh1bmxpa2VseShuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4X3F1ZXVlLT5jb3JlX3R4cSkpICYmCiAJICAgIGxpa2VseShlZngtPnBvcnRfZW5hYmxlZCkgJiYKLQkgICAgbGlrZWx5KCFlZngtPnBvcnRfaW5oaWJpdGVkKSkgeworCSAgICBsaWtlbHkobmV0aWZfZGV2aWNlX3ByZXNlbnQoZWZ4LT5uZXRfZGV2KSkpIHsKIAkJZmlsbF9sZXZlbCA9IHR4X3F1ZXVlLT5pbnNlcnRfY291bnQgLSB0eF9xdWV1ZS0+cmVhZF9jb3VudDsKIAkJaWYgKGZpbGxfbGV2ZWwgPCBFRlhfVFhRX1RIUkVTSE9MRChlZngpKSB7CiAJCQlFRlhfQlVHX09OX1BBUkFOT0lEKCFlZnhfZGV2X3JlZ2lzdGVyZWQoZWZ4KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvdHhjNDMxMjhfcGh5LmMgYi9kcml2ZXJzL25ldC9zZmMvdHhjNDMxMjhfcGh5LmMKaW5kZXggZDk4ODZhZC4uN2MyMWIzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3R4YzQzMTI4X3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy90eGM0MzEyOF9waHkuYwpAQCAtNTQ1LDcgKzU0NSw3IEBACiAJbWRpbzQ1X2V0aHRvb2xfZ3NldCgmZWZ4LT5tZGlvLCBlY21kKTsKIH0KIAotc3RydWN0IGVmeF9waHlfb3BlcmF0aW9ucyBmYWxjb25fdHhjX3BoeV9vcHMgPSB7Citjb25zdCBzdHJ1Y3QgZWZ4X3BoeV9vcGVyYXRpb25zIGZhbGNvbl90eGNfcGh5X29wcyA9IHsKIAkucHJvYmUJCT0gdHhjNDMxMjhfcGh5X3Byb2JlLAogCS5pbml0CQk9IHR4YzQzMTI4X3BoeV9pbml0LAogCS5yZWNvbmZpZ3VyZQk9IHR4YzQzMTI4X3BoeV9yZWNvbmZpZ3VyZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZ2UuYyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwppbmRleCAzNWIyOGY0Li5mNGJlNWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2dlLmMKKysrIGIvZHJpdmVycy9uZXQvc2tnZS5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCiAjaW5jbHVkZSAic2tnZS5oIgpAQCAtMzAzLDcgKzMwNCw3IEBACiAKIAllY21kLT5hZHZlcnRpc2luZyA9IHNrZ2UtPmFkdmVydGlzaW5nOwogCWVjbWQtPmF1dG9uZWcgPSBza2dlLT5hdXRvbmVnOwotCWVjbWQtPnNwZWVkID0gc2tnZS0+c3BlZWQ7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIHNrZ2UtPnNwZWVkKTsKIAllY21kLT5kdXBsZXggPSBza2dlLT5kdXBsZXg7CiAJcmV0dXJuIDA7CiB9CkBAIC0zMjEsOCArMzIyLDkgQEAKIAkJc2tnZS0+c3BlZWQgPSAtMTsKIAl9IGVsc2UgewogCQl1MzIgc2V0dGluZzsKKwkJdTMyIHNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoZWNtZCk7CiAKLQkJc3dpdGNoIChlY21kLT5zcGVlZCkgeworCQlzd2l0Y2ggKHNwZWVkKSB7CiAJCWNhc2UgU1BFRURfMTAwMDoKIAkJCWlmIChlY21kLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCiAJCQkJc2V0dGluZyA9IFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbDsKQEAgLTM1NSw3ICszNTcsNyBAQAogCQlpZiAoKHNldHRpbmcgJiBzdXBwb3J0ZWQpID09IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlza2dlLT5zcGVlZCA9IGVjbWQtPnNwZWVkOworCQlza2dlLT5zcGVlZCA9IHNwZWVkOwogCQlza2dlLT5kdXBsZXggPSBlY21kLT5kdXBsZXg7CiAJfQogCkBAIC01MzcsNDYgKzUzOSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2tnZV9zZXRfc2coc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHNrZ2VfaHcgKmh3ID0gc2tnZS0+aHc7Ci0KLQlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9HRU5FU0lTICYmIGRhdGEpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQlyZXR1cm4gZXRodG9vbF9vcF9zZXRfc2coZGV2LCBkYXRhKTsKLX0KLQotc3RhdGljIGludCBza2dlX3NldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBza2dlX2h3ICpodyA9IHNrZ2UtPmh3OwotCi0JaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfR0VORVNJUyAmJiBkYXRhKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlyZXR1cm4gZXRodG9vbF9vcF9zZXRfdHhfY3N1bShkZXYsIGRhdGEpOwotfQotCi1zdGF0aWMgdTMyIHNrZ2VfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybiBza2dlLT5yeF9jc3VtOwotfQotCi0vKiBPbmx5IFl1a29uIHN1cHBvcnRzIGNoZWNrc3VtIG9mZmxvYWQuICovCi1zdGF0aWMgaW50IHNrZ2Vfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoc2tnZS0+aHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9HRU5FU0lTICYmIGRhdGEpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCXNrZ2UtPnJ4X2NzdW0gPSBkYXRhOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBza2dlX2dldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqZWNtZCkKIHsKQEAgLTc4NiwyOSArNzQ4LDI4IEBACiB9CiAKIC8qIGJsaW5rIExFRCdzIGZvciBmaW5kaW5nIGJvYXJkICovCi1zdGF0aWMgaW50IHNrZ2VfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3N0YXRpYyBpbnQgc2tnZV9zZXRfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgIGVudW0gZXRodG9vbF9waHlzX2lkX3N0YXRlIHN0YXRlKQogewogCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgbXM7Ci0JZW51bSBsZWRfbW9kZSBtb2RlID0gTEVEX01PREVfVFNUOwogCi0JaWYgKCFkYXRhIHx8IGRhdGEgPiAodTMyKShNQVhfU0NIRURVTEVfVElNRU9VVCAvIEhaKSkKLQkJbXMgPSBqaWZmaWVzX3RvX21zZWNzKE1BWF9TQ0hFRFVMRV9USU1FT1VUIC8gSFopICogMTAwMDsKLQllbHNlCi0JCW1zID0gZGF0YSAqIDEwMDA7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgRVRIVE9PTF9JRF9BQ1RJVkU6CisJCXJldHVybiAyOwkvKiBjeWNsZSBvbi9vZmYgdHdpY2UgcGVyIHNlY29uZCAqLwogCi0Jd2hpbGUgKG1zID4gMCkgewotCQlza2dlX2xlZChza2dlLCBtb2RlKTsKLQkJbW9kZSBePSBMRURfTU9ERV9UU1Q7CisJY2FzZSBFVEhUT09MX0lEX09OOgorCQlza2dlX2xlZChza2dlLCBMRURfTU9ERV9UU1QpOworCQlicmVhazsKIAotCQlpZiAobXNsZWVwX2ludGVycnVwdGlibGUoQkxJTktfTVMpKQotCQkJYnJlYWs7Ci0JCW1zIC09IEJMSU5LX01TOworCWNhc2UgRVRIVE9PTF9JRF9PRkY6CisJCXNrZ2VfbGVkKHNrZ2UsIExFRF9NT0RFX09GRik7CisJCWJyZWFrOworCisJY2FzZSBFVEhUT09MX0lEX0lOQUNUSVZFOgorCQkvKiBiYWNrIHRvIHJlZ3VsYXIgTEVEIHN0YXRlICovCisJCXNrZ2VfbGVkKHNrZ2UsIG5ldGlmX3J1bm5pbmcoZGV2KSA/IExFRF9NT0RFX09OIDogTEVEX01PREVfT0ZGKTsKIAl9CiAKLQkvKiBiYWNrIHRvIHJlZ3VsYXIgTEVEIHN0YXRlICovCi0Jc2tnZV9sZWQoc2tnZSwgbmV0aWZfcnVubmluZyhkZXYpID8gTEVEX01PREVfT04gOiBMRURfTU9ERV9PRkYpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkyNSwxMiArODg2LDggQEAKIAkuc2V0X3BhdXNlcGFyYW0gPSBza2dlX3NldF9wYXVzZXBhcmFtLAogCS5nZXRfY29hbGVzY2UJPSBza2dlX2dldF9jb2FsZXNjZSwKIAkuc2V0X2NvYWxlc2NlCT0gc2tnZV9zZXRfY29hbGVzY2UsCi0JLnNldF9zZwkJPSBza2dlX3NldF9zZywKLQkuc2V0X3R4X2NzdW0JPSBza2dlX3NldF90eF9jc3VtLAotCS5nZXRfcnhfY3N1bQk9IHNrZ2VfZ2V0X3J4X2NzdW0sCi0JLnNldF9yeF9jc3VtCT0gc2tnZV9zZXRfcnhfY3N1bSwKIAkuZ2V0X3N0cmluZ3MJPSBza2dlX2dldF9zdHJpbmdzLAotCS5waHlzX2lkCT0gc2tnZV9waHlzX2lkLAorCS5zZXRfcGh5c19pZAk9IHNrZ2Vfc2V0X3BoeXNfaWQsCiAJLmdldF9zc2V0X2NvdW50ID0gc2tnZV9nZXRfc3NldF9jb3VudCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBza2dlX2dldF9ldGh0b29sX3N0YXRzLAogfTsKQEAgLTMwODUsNyArMzA0Miw4IEBACiAJfQogCiAJc2tiX3B1dChza2IsIGxlbik7Ci0JaWYgKHNrZ2UtPnJ4X2NzdW0pIHsKKworCWlmIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pIHsKIAkJc2tiLT5jc3VtID0gY3N1bTsKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9DT01QTEVURTsKIAl9CkBAIC0zODQ3LDEwICszODA1LDEwIEBACiAJc2V0dXBfdGltZXIoJnNrZ2UtPmxpbmtfdGltZXIsIHhtX2xpbmtfdGltZXIsICh1bnNpZ25lZCBsb25nKSBza2dlKTsKIAogCWlmIChody0+Y2hpcF9pZCAhPSBDSElQX0lEX0dFTkVTSVMpIHsKLQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHOwotCQlza2dlLT5yeF9jc3VtID0gMTsKKwkJZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfU0cgfAorCQkgICAgICAgICAgICAgICAgICAgTkVUSUZfRl9SWENTVU07CisJCWRldi0+ZmVhdHVyZXMgfD0gZGV2LT5od19mZWF0dXJlczsKIAl9Ci0JZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0dSTzsKIAogCS8qIHJlYWQgdGhlIG1hYyBhZGRyZXNzICovCiAJbWVtY3B5X2Zyb21pbyhkZXYtPmRldl9hZGRyLCBody0+cmVncyArIEIyX01BQ18xICsgcG9ydCo4LCBFVEhfQUxFTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2dlLmggYi9kcml2ZXJzL25ldC9za2dlLmgKaW5kZXggNTFjMDIxNC4uNTk4YmY3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tnZS5oCisrKyBiL2RyaXZlcnMvbmV0L3NrZ2UuaApAQCAtMjQ2MCw3ICsyNDYwLDYgQEAKIAlzdHJ1Y3QgdGltZXJfbGlzdCAgICBsaW5rX3RpbWVyOwogCWVudW0gcGF1c2VfY29udHJvbCAgIGZsb3dfY29udHJvbDsKIAllbnVtIHBhdXNlX3N0YXR1cyAgICBmbG93X3N0YXR1czsKLQl1OAkJICAgICByeF9jc3VtOwogCXU4CQkgICAgIGJsaW5rX29uOwogCXU4CQkgICAgIHdvbDsKIAl1OAkJICAgICBhdXRvbmVnOwkvKiBBVVRPTkVHX0VOQUJMRSwgQVVUT05FR19ESVNBQkxFICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za3kyLmMgYi9kcml2ZXJzL25ldC9za3kyLmMKaW5kZXggZmY4ZDI2Mi4uM2VlNDFkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2t5Mi5jCisrKyBiL2RyaXZlcnMvbmV0L3NreTIuYwpAQCAtMTE5OCwxMiArMTE5OCwxMiBAQAogCiAJc2t5Ml93cml0ZTMyKHNreTItPmh3LAogCQkgICAgIFFfQUREUihyeHFhZGRyW3NreTItPnBvcnRdLCBRX0NTUiksCi0JCSAgICAgKHNreTItPmZsYWdzICYgU0tZMl9GTEFHX1JYX0NIRUNLU1VNKQorCQkgICAgIChza3kyLT5uZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pCiAJCSAgICAgPyBCTVVfRU5BX1JYX0NIS1NVTSA6IEJNVV9ESVNfUlhfQ0hLU1VNKTsKIH0KIAogLyogRW5hYmxlL2Rpc2FibGUgcmVjZWl2ZSBoYXNoIGNhbGN1bGF0aW9uIChSU1MpICovCi1zdGF0aWMgdm9pZCByeF9zZXRfcnNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCByeF9zZXRfcnNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKIHsKIAlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBza3kyLT5odzsKQEAgLTEyMTYsNyArMTIxNiw3IEBACiAJfQogCiAJLyogUHJvZ3JhbSBSU1MgaW5pdGlhbCB2YWx1ZXMgKi8KLQlpZiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhIQVNIKSB7CisJaWYgKGZlYXR1cmVzICYgTkVUSUZfRl9SWEhBU0gpIHsKIAkJdTMyIGtleVtua2V5c107CiAKIAkJZ2V0X3JhbmRvbV9ieXRlcyhrZXksIG5rZXlzICogc2l6ZW9mKHUzMikpOwpAQCAtMTMyMiwzMiArMTMyMiwzMiBAQAogCXJldHVybiBlcnI7CiB9CiAKLSNkZWZpbmUgTkVUSUZfRl9BTExfVkxBTiAoTkVUSUZfRl9IV19WTEFOX1RYfE5FVElGX0ZfSFdfVkxBTl9SWCkKKyNkZWZpbmUgU0tZMl9WTEFOX09GRkxPQURTIChORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHIHwgTkVUSUZfRl9UU08pCiAKLXN0YXRpYyB2b2lkIHNreTJfdmxhbl9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBza3kyX3ZsYW5fbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpCiB7CiAJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNreTJfaHcgKmh3ID0gc2t5Mi0+aHc7CiAJdTE2IHBvcnQgPSBza3kyLT5wb3J0OwogCi0JaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fUlgpCisJaWYgKGZlYXR1cmVzICYgTkVUSUZfRl9IV19WTEFOX1JYKQogCQlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBSWF9HTUZfQ1RSTF9UKSwKIAkJCSAgICAgUlhfVkxBTl9TVFJJUF9PTik7CiAJZWxzZQogCQlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBSWF9HTUZfQ1RSTF9UKSwKIAkJCSAgICAgUlhfVkxBTl9TVFJJUF9PRkYpOwogCi0JZGV2LT52bGFuX2ZlYXR1cmVzID0gZGV2LT5mZWF0dXJlcyAmfiBORVRJRl9GX0FMTF9WTEFOOwotCWlmIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19WTEFOX1RYKQorCWlmIChmZWF0dXJlcyAmIE5FVElGX0ZfSFdfVkxBTl9UWCkgewogCQlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBUWF9HTUZfQ1RSTF9UKSwKIAkJCSAgICAgVFhfVkxBTl9UQUdfT04pOwotCWVsc2UgeworCisJCWRldi0+dmxhbl9mZWF0dXJlcyB8PSBTS1kyX1ZMQU5fT0ZGTE9BRFM7CisJfSBlbHNlIHsKIAkJc2t5Ml93cml0ZTMyKGh3LCBTS19SRUcocG9ydCwgVFhfR01GX0NUUkxfVCksCiAJCQkgICAgIFRYX1ZMQU5fVEFHX09GRik7CiAKIAkJLyogQ2FuJ3QgZG8gdHJhbnNtaXQgb2ZmbG9hZCBvZiB2bGFuIHdpdGhvdXQgaHcgdmxhbiAqLwotCQlkZXYtPnZsYW5fZmVhdHVyZXMgJj0gfihORVRJRl9GX1RTTyB8IE5FVElGX0ZfU0cKLQkJCQkJfCBORVRJRl9GX0FMTF9DU1VNKTsKKwkJZGV2LT52bGFuX2ZlYXR1cmVzICY9IH5TS1kyX1ZMQU5fT0ZGTE9BRFM7CiAJfQogfQogCkBAIC0xNDYzLDcgKzE0NjMsNyBAQAogCQlyeF9zZXRfY2hlY2tzdW0oc2t5Mik7CiAKIAlpZiAoIShody0+ZmxhZ3MgJiBTS1kyX0hXX1JTU19CUk9LRU4pKQotCQlyeF9zZXRfcnNzKHNreTItPm5ldGRldik7CisJCXJ4X3NldF9yc3Moc2t5Mi0+bmV0ZGV2LCBza3kyLT5uZXRkZXYtPmZlYXR1cmVzKTsKIAogCS8qIHN1Ym1pdCBSeCByaW5nICovCiAJZm9yIChpID0gMDsgaSA8IHNreTItPnJ4X3BlbmRpbmc7IGkrKykgewpAQCAtMTYyNiw3ICsxNjI2LDggQEAKIAlza3kyX3ByZWZldGNoX2luaXQoaHcsIHR4cWFkZHJbcG9ydF0sIHNreTItPnR4X2xlX21hcCwKIAkJCSAgIHNreTItPnR4X3Jpbmdfc2l6ZSAtIDEpOwogCi0Jc2t5Ml92bGFuX21vZGUoc2t5Mi0+bmV0ZGV2KTsKKwlza3kyX3ZsYW5fbW9kZShza3kyLT5uZXRkZXYsIHNreTItPm5ldGRldi0+ZmVhdHVyZXMpOworCW5ldGRldl91cGRhdGVfZmVhdHVyZXMoc2t5Mi0+bmV0ZGV2KTsKIAogCXNreTJfcnhfc3RhcnQoc2t5Mik7CiB9CkBAIC0yMjYxLDEyICsyMjYyLDkgQEAKIAkgICAgIGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRkVfUCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyogVFNPLCBldGMgb24gWXVrb24gVWx0cmEgYW5kIE1UVSA+IDE1MDAgbm90IHN1cHBvcnRlZCAqLwotCWlmIChuZXdfbXR1ID4gRVRIX0RBVEFfTEVOICYmIGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRUNfVSkKLQkJZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfVFNPfE5FVElGX0ZfU0d8TkVUSUZfRl9BTExfQ1NVTSk7Ci0KIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQlkZXYtPm10dSA9IG5ld19tdHU7CisJCW5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yMjg4LDYgKzIyODYsNyBAQAogCXNreTJfcnhfY2xlYW4oc2t5Mik7CiAKIAlkZXYtPm10dSA9IG5ld19tdHU7CisJbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpOwogCiAJbW9kZSA9IERBVEFfQkxJTkRfVkFMKERBVEFfQkxJTkRfREVGKSB8CiAJCUdNX1NNT0RfVkxBTl9FTkEgfCBJUEdfREFUQV9WQUwoSVBHX0RBVEFfREVGKTsKQEAgLTI1MzUsOCArMjUzNCwxMSBAQAogCQkJICAgIiVzOiByZWNlaXZlIGNoZWNrc3VtIHByb2JsZW0gKHN0YXR1cyA9ICUjeClcbiIsCiAJCQkgICBza3kyLT5uZXRkZXYtPm5hbWUsIHN0YXR1cyk7CiAKLQkJLyogRGlzYWJsZSBjaGVja3N1bSBvZmZsb2FkICovCi0JCXNreTItPmZsYWdzICY9IH5TS1kyX0ZMQUdfUlhfQ0hFQ0tTVU07CisJCS8qIERpc2FibGUgY2hlY2tzdW0gb2ZmbG9hZAorCQkgKiBJdCB3aWxsIGJlIHJlZW5hYmxlZCBvbiBuZXh0IG5kb19zZXRfZmVhdHVyZXMsIGJ1dCBpZiBpdCdzCisJCSAqIHJlYWxseSBicm9rZW4sIHdpbGwgZ2V0IGRpc2FibGVkIGFnYWluCisJCSAqLworCQlza3kyLT5uZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1JYQ1NVTTsKIAkJc2t5Ml93cml0ZTMyKHNreTItPmh3LCBRX0FERFIocnhxYWRkcltza3kyLT5wb3J0XSwgUV9DU1IpLAogCQkJICAgICBCTVVfRElTX1JYX0NIS1NVTSk7CiAJfQpAQCAtMjU5MSw3ICsyNTkzLDcgQEAKIAogCQkJLyogVGhpcyBjaGlwIHJlcG9ydHMgY2hlY2tzdW0gc3RhdHVzIGRpZmZlcmVudGx5ICovCiAJCQlpZiAoaHctPmZsYWdzICYgU0tZMl9IV19ORVdfTEUpIHsKLQkJCQlpZiAoKHNreTItPmZsYWdzICYgU0tZMl9GTEFHX1JYX0NIRUNLU1VNKSAmJgorCQkJCWlmICgoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSAmJgogCQkJCSAgICAobGUtPmNzcyAmIChDU1NfSVNJUFY0IHwgQ1NTX0lTSVBWNikpICYmCiAJCQkJICAgIChsZS0+Y3NzICYgQ1NTX1RDUFVEUENTT0spKQogCQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwpAQCAtMjYxNiw3ICsyNjE4LDcgQEAKIAkJCXNreTItPnJ4X3RhZyA9IGxlbmd0aDsKIAkJCS8qIGZhbGwgdGhyb3VnaCAqLwogCQljYXNlIE9QX1JYQ0hLUzoKLQkJCWlmIChsaWtlbHkoc2t5Mi0+ZmxhZ3MgJiBTS1kyX0ZMQUdfUlhfQ0hFQ0tTVU0pKQorCQkJaWYgKGxpa2VseShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pKQogCQkJCXNreTJfcnhfY2hlY2tzdW0oc2t5Miwgc3RhdHVzKTsKIAkJCWJyZWFrOwogCkBAIC0zNDExLDEwICszNDEzLDEwIEBACiAJZWNtZC0+cGh5X2FkZHJlc3MgPSBQSFlfQUREUl9NQVJWOwogCWlmIChza3kyX2lzX2NvcHBlcihodykpIHsKIAkJZWNtZC0+cG9ydCA9IFBPUlRfVFA7Ci0JCWVjbWQtPnNwZWVkID0gc2t5Mi0+c3BlZWQ7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCBza3kyLT5zcGVlZCk7CiAJCWVjbWQtPnN1cHBvcnRlZCB8PSAgU1VQUE9SVEVEX0F1dG9uZWcgfCBTVVBQT1JURURfVFA7CiAJfSBlbHNlIHsKLQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDAwOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgU1BFRURfMTAwMCk7CiAJCWVjbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOwogCQllY21kLT5zdXBwb3J0ZWQgfD0gIFNVUFBPUlRFRF9BdXRvbmVnIHwgU1VQUE9SVEVEX0ZJQlJFOwogCX0KQEAgLTM0NTAsOCArMzQ1Miw5IEBACiAJCXNreTItPnNwZWVkID0gLTE7CiAJfSBlbHNlIHsKIAkJdTMyIHNldHRpbmc7CisJCXUzMiBzcGVlZCA9IGV0aHRvb2xfY21kX3NwZWVkKGVjbWQpOwogCi0JCXN3aXRjaCAoZWNtZC0+c3BlZWQpIHsKKwkJc3dpdGNoIChzcGVlZCkgewogCQljYXNlIFNQRUVEXzEwMDA6CiAJCQlpZiAoZWNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQogCQkJCXNldHRpbmcgPSBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGw7CkBAIC0zNDg0LDcgKzM0ODcsNyBAQAogCQlpZiAoKHNldHRpbmcgJiBzdXBwb3J0ZWQpID09IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlza3kyLT5zcGVlZCA9IGVjbWQtPnNwZWVkOworCQlza3kyLT5zcGVlZCA9IHNwZWVkOwogCQlza3kyLT5kdXBsZXggPSBlY21kLT5kdXBsZXg7CiAJCXNreTItPmZsYWdzICY9IH5TS1kyX0ZMQUdfQVVUT19TUEVFRDsKIAl9CkBAIC0zNTUyLDI4ICszNTU1LDYgQEAKIAl7ICJ0eF9maWZvX3VuZGVycnVuIiwgR01fVFhFX0ZJRk9fVVIgfSwKIH07CiAKLXN0YXRpYyB1MzIgc2t5Ml9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcmV0dXJuICEhKHNreTItPmZsYWdzICYgU0tZMl9GTEFHX1JYX0NIRUNLU1VNKTsKLX0KLQotc3RhdGljIGludCBza3kyX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKGRhdGEpCi0JCXNreTItPmZsYWdzIHw9IFNLWTJfRkxBR19SWF9DSEVDS1NVTTsKLQllbHNlCi0JCXNreTItPmZsYWdzICY9IH5TS1kyX0ZMQUdfUlhfQ0hFQ0tTVU07Ci0KLQlza3kyX3dyaXRlMzIoc2t5Mi0+aHcsIFFfQUREUihyeHFhZGRyW3NreTItPnBvcnRdLCBRX0NTUiksCi0JCSAgICAgZGF0YSA/IEJNVV9FTkFfUlhfQ0hLU1VNIDogQk1VX0RJU19SWF9DSEtTVU0pOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB1MzIgc2t5Ml9nZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTM4MjYsMjMgKzM4MDcsMjQgQEAKIH0KIAogLyogYmxpbmsgTEVEJ3MgZm9yIGZpbmRpbmcgYm9hcmQgKi8KLXN0YXRpYyBpbnQgc2t5Ml9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQorc3RhdGljIGludCBza3kyX3NldF9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgZW51bSBldGh0b29sX3BoeXNfaWRfc3RhdGUgc3RhdGUpCiB7CiAJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgaW50IGk7CiAKLQlpZiAoZGF0YSA9PSAwKQotCQlkYXRhID0gVUlOVF9NQVg7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGF0YTsgaSsrKSB7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgRVRIVE9PTF9JRF9BQ1RJVkU6CisJCXJldHVybiAxOwkvKiBjeWNsZSBvbi9vZmYgb25jZSBwZXIgc2Vjb25kICovCisJY2FzZSBFVEhUT09MX0lEX0lOQUNUSVZFOgorCQlza3kyX2xlZChza3kyLCBNT19MRURfTk9STSk7CisJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9JRF9PTjoKIAkJc2t5Ml9sZWQoc2t5MiwgTU9fTEVEX09OKTsKLQkJaWYgKG1zbGVlcF9pbnRlcnJ1cHRpYmxlKDUwMCkpCi0JCQlicmVhazsKKwkJYnJlYWs7CisJY2FzZSBFVEhUT09MX0lEX09GRjoKIAkJc2t5Ml9sZWQoc2t5MiwgTU9fTEVEX09GRik7Ci0JCWlmIChtc2xlZXBfaW50ZXJydXB0aWJsZSg1MDApKQotCQkJYnJlYWs7CisJCWJyZWFrOwogCX0KLQlza3kyX2xlZChza3kyLCBNT19MRURfTk9STSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQwODMsMzQgKzQwNjUsNiBAQAogCX0KIH0KIAotLyogSW4gb3JkZXIgdG8gZG8gSnVtYm8gcGFja2V0cyBvbiB0aGVzZSBjaGlwcywgbmVlZCB0byB0dXJuIG9mZiB0aGUKLSAqIHRyYW5zbWl0IHN0b3JlL2ZvcndhcmQuIFRoZXJlZm9yZSBjaGVja3N1bSBvZmZsb2FkIHdvbid0IHdvcmsuCi0gKi8KLXN0YXRpYyBpbnQgbm9fdHhfb2ZmbG9hZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWNvbnN0IHN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwotCWNvbnN0IHN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OwotCi0JcmV0dXJuIGRldi0+bXR1ID4gRVRIX0RBVEFfTEVOICYmIGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRUNfVTsKLX0KLQotc3RhdGljIGludCBza3kyX3NldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCWlmIChkYXRhICYmIG5vX3R4X29mZmxvYWQoZGV2KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gZXRodG9vbF9vcF9zZXRfdHhfY3N1bShkZXYsIGRhdGEpOwotfQotCi0KLXN0YXRpYyBpbnQgc2t5Ml9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCWlmIChkYXRhICYmIG5vX3R4X29mZmxvYWQoZGV2KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gZXRodG9vbF9vcF9zZXRfdHNvKGRldiwgZGF0YSk7Ci19Ci0KIHN0YXRpYyBpbnQgc2t5Ml9nZXRfZWVwcm9tX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNDIxMywzMSArNDE2NywzNiBAQAogCXJldHVybiBza3kyX3ZwZF93cml0ZShza3kyLT5odywgY2FwLCBkYXRhLCBlZXByb20tPm9mZnNldCwgZWVwcm9tLT5sZW4pOwogfQogCi1zdGF0aWMgaW50IHNreTJfc2V0X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQorc3RhdGljIHUzMiBza3kyX2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpCit7CisJY29uc3Qgc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CisJY29uc3Qgc3RydWN0IHNreTJfaHcgKmh3ID0gc2t5Mi0+aHc7CisKKwkvKiBJbiBvcmRlciB0byBkbyBKdW1ibyBwYWNrZXRzIG9uIHRoZXNlIGNoaXBzLCBuZWVkIHRvIHR1cm4gb2ZmIHRoZQorCSAqIHRyYW5zbWl0IHN0b3JlL2ZvcndhcmQuIFRoZXJlZm9yZSBjaGVja3N1bSBvZmZsb2FkIHdvbid0IHdvcmsuCisJICovCisJaWYgKGRldi0+bXR1ID4gRVRIX0RBVEFfTEVOICYmIGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRUNfVSkKKwkJZmVhdHVyZXMgJj0gfihORVRJRl9GX1RTT3xORVRJRl9GX1NHfE5FVElGX0ZfQUxMX0NTVU0pOworCisJcmV0dXJuIGZlYXR1cmVzOworfQorCitzdGF0aWMgaW50IHNreTJfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKIHsKIAlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIG9sZF9mZWF0ID0gZGV2LT5mZWF0dXJlczsKLQl1MzIgc3VwcG9ydGVkID0gMDsKLQlpbnQgcmM7CisJdTMyIGNoYW5nZWQgPSBkZXYtPmZlYXR1cmVzIF4gZmVhdHVyZXM7CiAKLQlpZiAoIShza3kyLT5ody0+ZmxhZ3MgJiBTS1kyX0hXX1JTU19CUk9LRU4pKQotCQlzdXBwb3J0ZWQgfD0gRVRIX0ZMQUdfUlhIQVNIOworCWlmIChjaGFuZ2VkICYgTkVUSUZfRl9SWENTVU0pIHsKKwkJdTMyIG9uID0gZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTTsKKwkJc2t5Ml93cml0ZTMyKHNreTItPmh3LCBRX0FERFIocnhxYWRkcltza3kyLT5wb3J0XSwgUV9DU1IpLAorCQkJICAgICBvbiA/IEJNVV9FTkFfUlhfQ0hLU1VNIDogQk1VX0RJU19SWF9DSEtTVU0pOworCX0KIAotCWlmICghKHNreTItPmh3LT5mbGFncyAmIFNLWTJfSFdfVkxBTl9CUk9LRU4pKQotCQlzdXBwb3J0ZWQgfD0gRVRIX0ZMQUdfUlhWTEFOIHwgRVRIX0ZMQUdfVFhWTEFOOworCWlmIChjaGFuZ2VkICYgTkVUSUZfRl9SWEhBU0gpCisJCXJ4X3NldF9yc3MoZGV2LCBmZWF0dXJlcyk7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAic2t5MiBzZXRfZmxhZ3M6IHN1cHBvcnRlZCAleCBkYXRhICV4XG4iLAotCSAgICAgICBzdXBwb3J0ZWQsIGRhdGEpOwotCi0JcmMgPSBldGh0b29sX29wX3NldF9mbGFncyhkZXYsIGRhdGEsIHN1cHBvcnRlZCk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQlpZiAoKG9sZF9mZWF0IF4gZGV2LT5mZWF0dXJlcykgJiBORVRJRl9GX1JYSEFTSCkKLQkJcnhfc2V0X3JzcyhkZXYpOwotCi0JaWYgKChvbGRfZmVhdCBeIGRldi0+ZmVhdHVyZXMpICYgTkVUSUZfRl9BTExfVkxBTikKLQkJc2t5Ml92bGFuX21vZGUoZGV2KTsKKwlpZiAoY2hhbmdlZCAmIChORVRJRl9GX0hXX1ZMQU5fVFh8TkVUSUZfRl9IV19WTEFOX1JYKSkKKwkJc2t5Ml92bGFuX21vZGUoZGV2LCBmZWF0dXJlcyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQyNTcsMTEgKzQyMTYsNiBAQAogCS5nZXRfZWVwcm9tX2xlbgk9IHNreTJfZ2V0X2VlcHJvbV9sZW4sCiAJLmdldF9lZXByb20JPSBza3kyX2dldF9lZXByb20sCiAJLnNldF9lZXByb20JPSBza3kyX3NldF9lZXByb20sCi0JLnNldF9zZyAJPSBldGh0b29sX29wX3NldF9zZywKLQkuc2V0X3R4X2NzdW0JPSBza3kyX3NldF90eF9jc3VtLAotCS5zZXRfdHNvCT0gc2t5Ml9zZXRfdHNvLAotCS5nZXRfcnhfY3N1bQk9IHNreTJfZ2V0X3J4X2NzdW0sCi0JLnNldF9yeF9jc3VtCT0gc2t5Ml9zZXRfcnhfY3N1bSwKIAkuZ2V0X3N0cmluZ3MJPSBza3kyX2dldF9zdHJpbmdzLAogCS5nZXRfY29hbGVzY2UJPSBza3kyX2dldF9jb2FsZXNjZSwKIAkuc2V0X2NvYWxlc2NlCT0gc2t5Ml9zZXRfY29hbGVzY2UsCkBAIC00MjY5LDExICs0MjIzLDkgQEAKIAkuc2V0X3JpbmdwYXJhbQk9IHNreTJfc2V0X3JpbmdwYXJhbSwKIAkuZ2V0X3BhdXNlcGFyYW0gPSBza3kyX2dldF9wYXVzZXBhcmFtLAogCS5zZXRfcGF1c2VwYXJhbSA9IHNreTJfc2V0X3BhdXNlcGFyYW0sCi0JLnBoeXNfaWQJPSBza3kyX3BoeXNfaWQsCisJLnNldF9waHlzX2lkCT0gc2t5Ml9zZXRfcGh5c19pZCwKIAkuZ2V0X3NzZXRfY291bnQgPSBza3kyX2dldF9zc2V0X2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IHNreTJfZ2V0X2V0aHRvb2xfc3RhdHMsCi0JLnNldF9mbGFncwk9IHNreTJfc2V0X2ZsYWdzLAotCS5nZXRfZmxhZ3MJPSBldGh0b29sX29wX2dldF9mbGFncywKIH07CiAKICNpZmRlZiBDT05GSUdfU0tZMl9ERUJVRwpAQCAtNDU1Myw2ICs0NTA1LDggQEAKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHNreTJfc2V0X21hY19hZGRyZXNzLAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gc2t5Ml9zZXRfbXVsdGljYXN0LAogCS5uZG9fY2hhbmdlX210dQkJPSBza3kyX2NoYW5nZV9tdHUsCisJLm5kb19maXhfZmVhdHVyZXMJPSBza3kyX2ZpeF9mZWF0dXJlcywKKwkubmRvX3NldF9mZWF0dXJlcwk9IHNreTJfc2V0X2ZlYXR1cmVzLAogCS5uZG9fdHhfdGltZW91dAkJPSBza3kyX3R4X3RpbWVvdXQsCiAJLm5kb19nZXRfc3RhdHM2NAk9IHNreTJfZ2V0X3N0YXRzLAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCkBAIC00NTY4LDYgKzQ1MjIsOCBAQAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gc2t5Ml9zZXRfbWFjX2FkZHJlc3MsCiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBza3kyX3NldF9tdWx0aWNhc3QsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IHNreTJfY2hhbmdlX210dSwKKwkubmRvX2ZpeF9mZWF0dXJlcwk9IHNreTJfZml4X2ZlYXR1cmVzLAorCS5uZG9fc2V0X2ZlYXR1cmVzCT0gc2t5Ml9zZXRfZmVhdHVyZXMsCiAJLm5kb190eF90aW1lb3V0CQk9IHNreTJfdHhfdGltZW91dCwKIAkubmRvX2dldF9zdGF0czY0CT0gc2t5Ml9nZXRfc3RhdHMsCiAgIH0sCkBAIC00NjAwLDcgKzQ1NTYsNyBAQAogCS8qIEF1dG8gc3BlZWQgYW5kIGZsb3cgY29udHJvbCAqLwogCXNreTItPmZsYWdzID0gU0tZMl9GTEFHX0FVVE9fU1BFRUQgfCBTS1kyX0ZMQUdfQVVUT19QQVVTRTsKIAlpZiAoaHctPmNoaXBfaWQgIT0gQ0hJUF9JRF9ZVUtPTl9YTCkKLQkJc2t5Mi0+ZmxhZ3MgfD0gU0tZMl9GTEFHX1JYX0NIRUNLU1VNOworCQlkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfUlhDU1VNOwogCiAJc2t5Mi0+Zmxvd19tb2RlID0gRkNfQk9USDsKIApAQCAtNDYxOSwxOCArNDU3NSwyMSBAQAogCiAJc2t5Mi0+cG9ydCA9IHBvcnQ7CiAKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfU0cKLQkJfCBORVRJRl9GX1RTTyB8IE5FVElGX0ZfR1JPOworCWRldi0+aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9TRyB8IE5FVElGX0ZfVFNPOwogCiAJaWYgKGhpZ2htZW0pCiAJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogCiAJLyogRW5hYmxlIHJlY2VpdmUgaGFzaGluZyB1bmxlc3MgaGFyZHdhcmUgaXMga25vd24gYnJva2VuICovCiAJaWYgKCEoaHctPmZsYWdzICYgU0tZMl9IV19SU1NfQlJPS0VOKSkKLQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1JYSEFTSDsKKwkJZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX1JYSEFTSDsKIAotCWlmICghKGh3LT5mbGFncyAmIFNLWTJfSFdfVkxBTl9CUk9LRU4pKQotCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKKwlpZiAoIShody0+ZmxhZ3MgJiBTS1kyX0hXX1ZMQU5fQlJPS0VOKSkgeworCQlkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKKwkJZGV2LT52bGFuX2ZlYXR1cmVzIHw9IFNLWTJfVkxBTl9PRkZMT0FEUzsKKwl9CisKKwlkZXYtPmZlYXR1cmVzIHw9IGRldi0+aHdfZmVhdHVyZXM7CiAKIAkvKiByZWFkIHRoZSBtYWMgYWRkcmVzcyAqLwogCW1lbWNweV9mcm9taW8oZGV2LT5kZXZfYWRkciwgaHctPnJlZ3MgKyBCMl9NQUNfMSArIHBvcnQgKiA4LCBFVEhfQUxFTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za3kyLmggYi9kcml2ZXJzL25ldC9za3kyLmgKaW5kZXggMGM2ZDEwYy4uMzE4YzlhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2t5Mi5oCisrKyBiL2RyaXZlcnMvbmV0L3NreTIuaApAQCAtMjI1NCw3ICsyMjU0LDYgQEAKIAl1OAkJICAgICB3b2w7CQkvKiBXQUtFXyBiaXRzICovCiAJdTgJCSAgICAgZHVwbGV4OwkJLyogRFVQTEVYX0hBTEYsIERVUExFWF9GVUxMICovCiAJdTE2CQkgICAgIGZsYWdzOwotI2RlZmluZSBTS1kyX0ZMQUdfUlhfQ0hFQ0tTVU0JCTB4MDAwMQogI2RlZmluZSBTS1kyX0ZMQUdfQVVUT19TUEVFRAkJMHgwMDAyCiAjZGVmaW5lIFNLWTJfRkxBR19BVVRPX1BBVVNFCQkweDAwMDQKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2xpcC5jIGIvZHJpdmVycy9uZXQvc2xpcC5jCmluZGV4IDg2Y2JiOWUuLjhlYzFhOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NsaXAuYworKysgYi9kcml2ZXJzL25ldC9zbGlwLmMKQEAgLTg1Myw3ICs4NTMsOSBAQAogCS8qIERvbmUuICBXZSBoYXZlIGxpbmtlZCB0aGUgVFRZIGxpbmUgdG8gYSBjaGFubmVsLiAqLwogCXJ0bmxfdW5sb2NrKCk7CiAJdHR5LT5yZWNlaXZlX3Jvb20gPSA2NTUzNjsJLyogV2UgZG9uJ3QgZmxvdyBjb250cm9sICovCi0JcmV0dXJuIHNsLT5kZXYtPmJhc2VfYWRkcjsKKworCS8qIFRUWSBsYXllciBleHBlY3RzIDAgb24gc3VjY2VzcyAqLworCXJldHVybiAwOwogCiBlcnJfZnJlZV9idWZzOgogCXNsX2ZyZWVfYnVmcyhzbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWMtbWNhLmMgYi9kcml2ZXJzL25ldC9zbWMtbWNhLmMKaW5kZXggZDA3YzM5Yy4uMGYyOWYyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jLW1jYS5jCisrKyBiL2RyaXZlcnMvbmV0L3NtYy1tY2EuYwpAQCAtMTU2LDcgKzE1Niw3IEBACiAgICB7IDE0LCAxNSB9CiB9OwogCi1zdGF0aWMgc2hvcnQgc21jX21jYV9hZGFwdGVyX2lkc1tdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc2hvcnQgc21jX21jYV9hZGFwdGVyX2lkc1tdIF9fZGV2aW5pdGNvbnN0ID0gewogCTB4NjFjOCwKIAkweDYxYzksCiAJMHg2ZmMwLApAQCAtMTY4LDcgKzE2OCw3IEBACiAJMHgwMDAwCiB9OwogCi1zdGF0aWMgY2hhciAqc21jX21jYV9hZGFwdGVyX25hbWVzW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzbWNfbWNhX2FkYXB0ZXJfbmFtZXNbXSBfX2RldmluaXRjb25zdCA9IHsKIAkiU01DIEV0aGVyY2FyZCBQTFVTIEVsaXRlL0EgQk5DL0FVSSAoV0Q4MDEzRVAvQSkiLAogCSJTTUMgRXRoZXJjYXJkIFBMVVMgRWxpdGUvQSBVVFAvQVVJIChXRDgwMTNXUC9BKSIsCiAJIldEIEV0aGVyY2FyZCBQTFVTL0EgKFdEODAwM0UvQSBvciBXRDgwMDNFVC9BKSIsCkBAIC0xOTksNyArMTk5LDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIGludCBfX2luaXQgdWx0cmFtY2FfcHJvYmUoc3RydWN0IGRldmljZSAqZ2VuX2RldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHVsdHJhbWNhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmdlbl9kZXYpCiB7CiAJdW5zaWduZWQgc2hvcnQgaW9hZGRyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MTF4LmMgYi9kcml2ZXJzL25ldC9zbWM5MTF4LmMKaW5kZXggNjY4MzFmMy4uMDUzODYzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTExeC5jCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxMXguYwpAQCAtMTQ4OCw5ICsxNDg4LDkgQEAKIAkJCQlTVVBQT1JURURfVFAgfCBTVVBQT1JURURfQVVJOwogCiAJCWlmIChscC0+Y3RsX3JzcGVlZCA9PSAxMCkKLQkJCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDsKKwkJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIFNQRUVEXzEwKTsKIAkJZWxzZSBpZiAobHAtPmN0bF9yc3BlZWQgPT0gMTAwKQotCQkJY21kLT5zcGVlZCA9IFNQRUVEXzEwMDsKKwkJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIFNQRUVEXzEwMCk7CiAKIAkJY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOwogCQlpZiAobHAtPm1paS5waHlfaWQ9PTEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MXguYyBiL2RyaXZlcnMvbmV0L3NtYzkxeC5jCmluZGV4IDQzNjU0YTMuLmRjNDgwNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxeC5jCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxeC5jCkBAIC0xNTY1LDkgKzE1NjUsOSBAQAogCQkJCSBTVVBQT1JURURfVFAgfCBTVVBQT1JURURfQVVJOwogCiAJCWlmIChscC0+Y3RsX3JzcGVlZCA9PSAxMCkKLQkJCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDsKKwkJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIFNQRUVEXzEwKTsKIAkJZWxzZSBpZiAobHAtPmN0bF9yc3BlZWQgPT0gMTAwKQotCQkJY21kLT5zcGVlZCA9IFNQRUVEXzEwMDsKKwkJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIFNQRUVEXzEwMCk7CiAKIAkJY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOwogCQljbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmMgYi9kcml2ZXJzL25ldC9zbXNjOTExeC5jCmluZGV4IDRiNDJlY2MuLmM2ZDQ3ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmMKKysrIGIvZHJpdmVycy9uZXQvc21zYzkxMXguYwpAQCAtMjksNiArMjksOCBAQAogICoKICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KQEAgLTY5LDYgKzcxLDE3IEBACiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDA9bm9uZSwuLi4sMTY9YWxsKSIpOwogCitzdHJ1Y3Qgc21zYzkxMXhfZGF0YTsKKworc3RydWN0IHNtc2M5MTF4X29wcyB7CisJdTMyICgqcmVnX3JlYWQpKHN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSwgdTMyIHJlZyk7CisJdm9pZCAoKnJlZ193cml0ZSkoc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhLCB1MzIgcmVnLCB1MzIgdmFsKTsKKwl2b2lkICgqcnhfcmVhZGZpZm8pKHN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSwKKwkJCQl1bnNpZ25lZCBpbnQgKmJ1ZiwgdW5zaWduZWQgaW50IHdvcmRjb3VudCk7CisJdm9pZCAoKnR4X3dyaXRlZmlmbykoc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhLAorCQkJCXVuc2lnbmVkIGludCAqYnVmLCB1bnNpZ25lZCBpbnQgd29yZGNvdW50KTsKK307CisKIHN0cnVjdCBzbXNjOTExeF9kYXRhIHsKIAl2b2lkIF9faW9tZW0gKmlvYWRkcjsKIApAQCAtMTE2LDggKzEyOSwxNCBAQAogCXVuc2lnbmVkIGludCBjbGVhcl9iaXRzX21hc2s7CiAJdW5zaWduZWQgaW50IGhhc2hoaTsKIAl1bnNpZ25lZCBpbnQgaGFzaGxvOworCisJLyogcmVnaXN0ZXIgYWNjZXNzIGZ1bmN0aW9ucyAqLworCWNvbnN0IHN0cnVjdCBzbXNjOTExeF9vcHMgKm9wczsKIH07CiAKKy8qIEVhc3kgYWNjZXNzIHRvIGluZm9ybWF0aW9uICovCisjZGVmaW5lIF9fc21zY19zaGlmdChwZGF0YSwgcmVnKSAoKHJlZykgPDwgKChwZGF0YSktPmNvbmZpZy5zaGlmdCkpCisKIHN0YXRpYyBpbmxpbmUgdTMyIF9fc21zYzkxMXhfcmVnX3JlYWQoc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhLCB1MzIgcmVnKQogewogCWlmIChwZGF0YS0+Y29uZmlnLmZsYWdzICYgU01TQzkxMVhfVVNFXzMyQklUKQpAQCAtMTMxLDEzICsxNTAsMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSB1MzIKK19fc21zYzkxMXhfcmVnX3JlYWRfc2hpZnQoc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhLCB1MzIgcmVnKQoreworCWlmIChwZGF0YS0+Y29uZmlnLmZsYWdzICYgU01TQzkxMVhfVVNFXzMyQklUKQorCQlyZXR1cm4gcmVhZGwocGRhdGEtPmlvYWRkciArIF9fc21zY19zaGlmdChwZGF0YSwgcmVnKSk7CisKKwlpZiAocGRhdGEtPmNvbmZpZy5mbGFncyAmIFNNU0M5MTFYX1VTRV8xNkJJVCkKKwkJcmV0dXJuIChyZWFkdyhwZGF0YS0+aW9hZGRyICsKKwkJCQlfX3Ntc2Nfc2hpZnQocGRhdGEsIHJlZykpICYgMHhGRkZGKSB8CisJCQkoKHJlYWR3KHBkYXRhLT5pb2FkZHIgKworCQkJX19zbXNjX3NoaWZ0KHBkYXRhLCByZWcgKyAyKSkgJiAweEZGRkYpIDw8IDE2KTsKKworCUJVRygpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW5saW5lIHUzMiBzbXNjOTExeF9yZWdfcmVhZChzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEsIHUzMiByZWcpCiB7CiAJdTMyIGRhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwZGF0YS0+ZGV2X2xvY2ssIGZsYWdzKTsKLQlkYXRhID0gX19zbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgcmVnKTsKKwlkYXRhID0gcGRhdGEtPm9wcy0+cmVnX3JlYWQocGRhdGEsIHJlZyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRhdGEtPmRldl9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gZGF0YTsKQEAgLTE2MCwxMyArMTk1LDMyIEBACiAJQlVHKCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZAorX19zbXNjOTExeF9yZWdfd3JpdGVfc2hpZnQoc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhLCB1MzIgcmVnLCB1MzIgdmFsKQoreworCWlmIChwZGF0YS0+Y29uZmlnLmZsYWdzICYgU01TQzkxMVhfVVNFXzMyQklUKSB7CisJCXdyaXRlbCh2YWwsIHBkYXRhLT5pb2FkZHIgKyBfX3Ntc2Nfc2hpZnQocGRhdGEsIHJlZykpOworCQlyZXR1cm47CisJfQorCisJaWYgKHBkYXRhLT5jb25maWcuZmxhZ3MgJiBTTVNDOTExWF9VU0VfMTZCSVQpIHsKKwkJd3JpdGV3KHZhbCAmIDB4RkZGRiwKKwkJCXBkYXRhLT5pb2FkZHIgKyBfX3Ntc2Nfc2hpZnQocGRhdGEsIHJlZykpOworCQl3cml0ZXcoKHZhbCA+PiAxNikgJiAweEZGRkYsCisJCQlwZGF0YS0+aW9hZGRyICsgX19zbXNjX3NoaWZ0KHBkYXRhLCByZWcgKyAyKSk7CisJCXJldHVybjsKKwl9CisKKwlCVUcoKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIHNtc2M5MTF4X3JlZ193cml0ZShzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEsIHUzMiByZWcsCiAJCQkJICAgICAgdTMyIHZhbCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBkYXRhLT5kZXZfbG9jaywgZmxhZ3MpOwotCV9fc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCByZWcsIHZhbCk7CisJcGRhdGEtPm9wcy0+cmVnX3dyaXRlKHBkYXRhLCByZWcsIHZhbCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRhdGEtPmRldl9sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTIwMiw2ICsyNTYsNDAgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZGF0YS0+ZGV2X2xvY2ssIGZsYWdzKTsKIH0KIAorLyogV3JpdGVzIGEgcGFja2V0IHRvIHRoZSBUWF9EQVRBX0ZJRk8gLSBzaGlmdGVkIHZlcnNpb24gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorc21zYzkxMXhfdHhfd3JpdGVmaWZvX3NoaWZ0KHN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSwgdW5zaWduZWQgaW50ICpidWYsCisJCSAgICAgIHVuc2lnbmVkIGludCB3b3JkY291bnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwZGF0YS0+ZGV2X2xvY2ssIGZsYWdzKTsKKworCWlmIChwZGF0YS0+Y29uZmlnLmZsYWdzICYgU01TQzkxMVhfU1dBUF9GSUZPKSB7CisJCXdoaWxlICh3b3JkY291bnQtLSkKKwkJCV9fc21zYzkxMXhfcmVnX3dyaXRlX3NoaWZ0KHBkYXRhLCBUWF9EQVRBX0ZJRk8sCisJCQkJCSAgICAgc3dhYjMyKCpidWYrKykpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocGRhdGEtPmNvbmZpZy5mbGFncyAmIFNNU0M5MTFYX1VTRV8zMkJJVCkgeworCQl3cml0ZXNsKHBkYXRhLT5pb2FkZHIgKyBfX3Ntc2Nfc2hpZnQocGRhdGEsCisJCQkJCQlUWF9EQVRBX0ZJRk8pLCBidWYsIHdvcmRjb3VudCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChwZGF0YS0+Y29uZmlnLmZsYWdzICYgU01TQzkxMVhfVVNFXzE2QklUKSB7CisJCXdoaWxlICh3b3JkY291bnQtLSkKKwkJCV9fc21zYzkxMXhfcmVnX3dyaXRlX3NoaWZ0KHBkYXRhLAorCQkJCQkJIFRYX0RBVEFfRklGTywgKmJ1ZisrKTsKKwkJZ290byBvdXQ7CisJfQorCisJQlVHKCk7CitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRhdGEtPmRldl9sb2NrLCBmbGFncyk7Cit9CisKIC8qIFJlYWRzIGEgcGFja2V0IG91dCBvZiB0aGUgUlhfREFUQV9GSUZPICovCiBzdGF0aWMgaW5saW5lIHZvaWQKIHNtc2M5MTF4X3J4X3JlYWRmaWZvKHN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSwgdW5zaWduZWQgaW50ICpidWYsCkBAIC0yMzQsNiArMzIyLDQwIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRhdGEtPmRldl9sb2NrLCBmbGFncyk7CiB9CiAKKy8qIFJlYWRzIGEgcGFja2V0IG91dCBvZiB0aGUgUlhfREFUQV9GSUZPIC0gc2hpZnRlZCB2ZXJzaW9uICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3Ntc2M5MTF4X3J4X3JlYWRmaWZvX3NoaWZ0KHN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSwgdW5zaWduZWQgaW50ICpidWYsCisJCSAgICAgdW5zaWduZWQgaW50IHdvcmRjb3VudCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBkYXRhLT5kZXZfbG9jaywgZmxhZ3MpOworCisJaWYgKHBkYXRhLT5jb25maWcuZmxhZ3MgJiBTTVNDOTExWF9TV0FQX0ZJRk8pIHsKKwkJd2hpbGUgKHdvcmRjb3VudC0tKQorCQkJKmJ1ZisrID0gc3dhYjMyKF9fc21zYzkxMXhfcmVnX3JlYWRfc2hpZnQocGRhdGEsCisJCQkJCQkJICAgIFJYX0RBVEFfRklGTykpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocGRhdGEtPmNvbmZpZy5mbGFncyAmIFNNU0M5MTFYX1VTRV8zMkJJVCkgeworCQlyZWFkc2wocGRhdGEtPmlvYWRkciArIF9fc21zY19zaGlmdChwZGF0YSwKKwkJCQkJCVJYX0RBVEFfRklGTyksIGJ1Ziwgd29yZGNvdW50KTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHBkYXRhLT5jb25maWcuZmxhZ3MgJiBTTVNDOTExWF9VU0VfMTZCSVQpIHsKKwkJd2hpbGUgKHdvcmRjb3VudC0tKQorCQkJKmJ1ZisrID0gX19zbXNjOTExeF9yZWdfcmVhZF9zaGlmdChwZGF0YSwKKwkJCQkJCQkJUlhfREFUQV9GSUZPKTsKKwkJZ290byBvdXQ7CisJfQorCisJQlVHKCk7CitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRhdGEtPmRldl9sb2NrLCBmbGFncyk7Cit9CisKIC8qIHdhaXRzIGZvciBNQUMgbm90IGJ1c3ksIHdpdGggdGltZW91dC4gIE9ubHkgY2FsbGVkIGJ5IHNtc2M5MTF4X21hY19yZWFkCiAgKiBhbmQgc21zYzkxMXhfbWFjX3dyaXRlLCBzbyBhc3N1bWVzIG1hY19sb2NrIGlzIGhlbGQgKi8KIHN0YXRpYyBpbnQgc21zYzkxMXhfbWFjX2NvbXBsZXRlKHN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSkKQEAgLTI0OCw4ICszNzAsOCBAQAogCQlpZiAoISh2YWwgJiBNQUNfQ1NSX0NNRF9DU1JfQlVTWV8pKQogCQkJcmV0dXJuIDA7CiAJfQotCVNNU0NfV0FSTklORyhIVywgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBNQUMgbm90IEJVU1kuICIKLQkJIk1BQ19DU1JfQ01EOiAweCUwOFgiLCB2YWwpOworCVNNU0NfV0FSTihwZGF0YSwgaHcsICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgTUFDIG5vdCBCVVNZLiAiCisJCSAgIk1BQ19DU1JfQ01EOiAweCUwOFgiLCB2YWwpOwogCXJldHVybiAtRUlPOwogfQogCkBAIC0yNjIsNyArMzg0LDcgQEAKIAogCXRlbXAgPSBzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgTUFDX0NTUl9DTUQpOwogCWlmICh1bmxpa2VseSh0ZW1wICYgTUFDX0NTUl9DTURfQ1NSX0JVU1lfKSkgewotCQlTTVNDX1dBUk5JTkcoSFcsICJNQUMgYnVzeSBhdCBlbnRyeSIpOworCQlTTVNDX1dBUk4ocGRhdGEsIGh3LCAiTUFDIGJ1c3kgYXQgZW50cnkiKTsKIAkJcmV0dXJuIDB4RkZGRkZGRkY7CiAJfQogCkBAIC0yNzcsNyArMzk5LDcgQEAKIAlpZiAobGlrZWx5KHNtc2M5MTF4X21hY19jb21wbGV0ZShwZGF0YSkgPT0gMCkpCiAJCXJldHVybiBzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgTUFDX0NTUl9EQVRBKTsKIAotCVNNU0NfV0FSTklORyhIVywgIk1BQyBidXN5IGFmdGVyIHJlYWQiKTsKKwlTTVNDX1dBUk4ocGRhdGEsIGh3LCAiTUFDIGJ1c3kgYWZ0ZXIgcmVhZCIpOwogCXJldHVybiAweEZGRkZGRkZGOwogfQogCkBAIC0yOTEsOCArNDEzLDggQEAKIAogCXRlbXAgPSBzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgTUFDX0NTUl9DTUQpOwogCWlmICh1bmxpa2VseSh0ZW1wICYgTUFDX0NTUl9DTURfQ1NSX0JVU1lfKSkgewotCQlTTVNDX1dBUk5JTkcoSFcsCi0JCQkic21zYzkxMXhfbWFjX3dyaXRlIGZhaWxlZCwgTUFDIGJ1c3kgYXQgZW50cnkiKTsKKwkJU01TQ19XQVJOKHBkYXRhLCBodywKKwkJCSAgInNtc2M5MTF4X21hY193cml0ZSBmYWlsZWQsIE1BQyBidXN5IGF0IGVudHJ5Iik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTMxMCw4ICs0MzIsNyBAQAogCWlmIChsaWtlbHkoc21zYzkxMXhfbWFjX2NvbXBsZXRlKHBkYXRhKSA9PSAwKSkKIAkJcmV0dXJuOwogCi0JU01TQ19XQVJOSU5HKEhXLAotCQkic21zYzkxMXhfbWFjX3dyaXRlIGZhaWxlZCwgTUFDIGJ1c3kgYWZ0ZXIgd3JpdGUiKTsKKwlTTVNDX1dBUk4ocGRhdGEsIGh3LCAic21zYzkxMXhfbWFjX3dyaXRlIGZhaWxlZCwgTUFDIGJ1c3kgYWZ0ZXIgd3JpdGUiKTsKIH0KIAogLyogR2V0IGEgcGh5IHJlZ2lzdGVyICovCkBAIC0zMjYsOCArNDQ3LDcgQEAKIAogCS8qIENvbmZpcm0gTUlJIG5vdCBidXN5ICovCiAJaWYgKHVubGlrZWx5KHNtc2M5MTF4X21hY19yZWFkKHBkYXRhLCBNSUlfQUNDKSAmIE1JSV9BQ0NfTUlJX0JVU1lfKSkgewotCQlTTVNDX1dBUk5JTkcoSFcsCi0JCQkiTUlJIGlzIGJ1c3kgaW4gc21zYzkxMXhfbWlpX3JlYWQ/Pz8iKTsKKwkJU01TQ19XQVJOKHBkYXRhLCBodywgIk1JSSBpcyBidXN5IGluIHNtc2M5MTF4X21paV9yZWFkPz8/Iik7CiAJCXJlZyA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KQEAgLTM0Myw3ICs0NjMsNyBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAotCVNNU0NfV0FSTklORyhIVywgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBNSUkgcmVhZCB0byBmaW5pc2giKTsKKwlTTVNDX1dBUk4ocGRhdGEsIGh3LCAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIE1JSSByZWFkIHRvIGZpbmlzaCIpOwogCXJlZyA9IC1FSU87CiAKIG91dDoKQEAgLTM2NCw4ICs0ODQsNyBAQAogCiAJLyogQ29uZmlybSBNSUkgbm90IGJ1c3kgKi8KIAlpZiAodW5saWtlbHkoc21zYzkxMXhfbWFjX3JlYWQocGRhdGEsIE1JSV9BQ0MpICYgTUlJX0FDQ19NSUlfQlVTWV8pKSB7Ci0JCVNNU0NfV0FSTklORyhIVywKLQkJCSJNSUkgaXMgYnVzeSBpbiBzbXNjOTExeF9taWlfd3JpdGU/Pz8iKTsKKwkJU01TQ19XQVJOKHBkYXRhLCBodywgIk1JSSBpcyBidXN5IGluIHNtc2M5MTF4X21paV93cml0ZT8/PyIpOwogCQlyZWcgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9CkBAIC0zODUsNyArNTA0LDcgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQlTTVNDX1dBUk5JTkcoSFcsICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgTUlJIHdyaXRlIHRvIGZpbmlzaCIpOworCVNNU0NfV0FSTihwZGF0YSwgaHcsICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgTUlJIHdyaXRlIHRvIGZpbmlzaCIpOwogCXJlZyA9IC1FSU87CiAKIG91dDoKQEAgLTQyNiwxOCArNTQ1LDIwIEBACiAJdW5zaWduZWQgaW50IGh3Y2ZnID0gc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIEhXX0NGRyk7CiAKIAlpZiAocGRhdGEtPmNvbmZpZy5mbGFncyAmIFNNU0M5MTFYX0ZPUkNFX0lOVEVSTkFMX1BIWSkgewotCQlTTVNDX1RSQUNFKEhXLCAiRm9yY2luZyBpbnRlcm5hbCBQSFkiKTsKKwkJU01TQ19UUkFDRShwZGF0YSwgaHcsICJGb3JjaW5nIGludGVybmFsIFBIWSIpOwogCQlwZGF0YS0+dXNpbmdfZXh0cGh5ID0gMDsKIAl9IGVsc2UgaWYgKHBkYXRhLT5jb25maWcuZmxhZ3MgJiBTTVNDOTExWF9GT1JDRV9FWFRFUk5BTF9QSFkpIHsKLQkJU01TQ19UUkFDRShIVywgIkZvcmNpbmcgZXh0ZXJuYWwgUEhZIik7CisJCVNNU0NfVFJBQ0UocGRhdGEsIGh3LCAiRm9yY2luZyBleHRlcm5hbCBQSFkiKTsKIAkJc21zYzkxMXhfcGh5X2VuYWJsZV9leHRlcm5hbChwZGF0YSk7CiAJCXBkYXRhLT51c2luZ19leHRwaHkgPSAxOwogCX0gZWxzZSBpZiAoaHdjZmcgJiBIV19DRkdfRVhUX1BIWV9ERVRfKSB7Ci0JCVNNU0NfVFJBQ0UoSFcsICJIV19DRkcgRVhUX1BIWV9ERVQgc2V0LCB1c2luZyBleHRlcm5hbCBQSFkiKTsKKwkJU01TQ19UUkFDRShwZGF0YSwgaHcsCisJCQkgICAiSFdfQ0ZHIEVYVF9QSFlfREVUIHNldCwgdXNpbmcgZXh0ZXJuYWwgUEhZIik7CiAJCXNtc2M5MTF4X3BoeV9lbmFibGVfZXh0ZXJuYWwocGRhdGEpOwogCQlwZGF0YS0+dXNpbmdfZXh0cGh5ID0gMTsKIAl9IGVsc2UgewotCQlTTVNDX1RSQUNFKEhXLCAiSFdfQ0ZHIEVYVF9QSFlfREVUIGNsZWFyLCB1c2luZyBpbnRlcm5hbCBQSFkiKTsKKwkJU01TQ19UUkFDRShwZGF0YSwgaHcsCisJCQkgICAiSFdfQ0ZHIEVYVF9QSFlfREVUIGNsZWFyLCB1c2luZyBpbnRlcm5hbCBQSFkiKTsKIAkJcGRhdGEtPnVzaW5nX2V4dHBoeSA9IDA7CiAJfQogfQpAQCAtNDk5LDcgKzYyMCw3IEBACiAJCXdyc3ogKz0gKHUzMikoKHVsb25nKXBkYXRhLT5sb29wYmFja190eF9wa3QgJiAweDMpOwogCQl3cnN6ID4+PSAyOwogCi0JCXNtc2M5MTF4X3R4X3dyaXRlZmlmbyhwZGF0YSwgKHVuc2lnbmVkIGludCAqKWJ1ZnAsIHdyc3opOworCQlwZGF0YS0+b3BzLT50eF93cml0ZWZpZm8ocGRhdGEsICh1bnNpZ25lZCBpbnQgKilidWZwLCB3cnN6KTsKIAogCQkvKiBXYWl0IHRpbGwgdHJhbnNtaXQgaXMgZG9uZSAqLwogCQlpID0gNjA7CkBAIC01MDksMTMgKzYzMCwxMyBAQAogCQl9IHdoaWxlICgoaS0tKSAmJiAoIXN0YXR1cykpOwogCiAJCWlmICghc3RhdHVzKSB7Ci0JCQlTTVNDX1dBUk5JTkcoSFcsICJGYWlsZWQgdG8gdHJhbnNtaXQgIgotCQkJCSJkdXJpbmcgbG9vcGJhY2sgdGVzdCIpOworCQkJU01TQ19XQVJOKHBkYXRhLCBodywKKwkJCQkgICJGYWlsZWQgdG8gdHJhbnNtaXQgZHVyaW5nIGxvb3BiYWNrIHRlc3QiKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmIChzdGF0dXMgJiBUWF9TVFNfRVNfKSB7Ci0JCQlTTVNDX1dBUk5JTkcoSFcsICJUcmFuc21pdCBlbmNvdW50ZXJlZCAiCi0JCQkJImVycm9ycyBkdXJpbmcgbG9vcGJhY2sgdGVzdCIpOworCQkJU01TQ19XQVJOKHBkYXRhLCBodywKKwkJCQkgICJUcmFuc21pdCBlbmNvdW50ZXJlZCBlcnJvcnMgZHVyaW5nIGxvb3BiYWNrIHRlc3QiKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTUyNywxMyArNjQ4LDEzIEBACiAJCX0gd2hpbGUgKChpLS0pICYmICghc3RhdHVzKSk7CiAKIAkJaWYgKCFzdGF0dXMpIHsKLQkJCVNNU0NfV0FSTklORyhIVywKLQkJCQkiRmFpbGVkIHRvIHJlY2VpdmUgZHVyaW5nIGxvb3BiYWNrIHRlc3QiKTsKKwkJCVNNU0NfV0FSTihwZGF0YSwgaHcsCisJCQkJICAiRmFpbGVkIHRvIHJlY2VpdmUgZHVyaW5nIGxvb3BiYWNrIHRlc3QiKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmIChzdGF0dXMgJiBSWF9TVFNfRVNfKSB7Ci0JCQlTTVNDX1dBUk5JTkcoSFcsICJSZWNlaXZlIGVuY291bnRlcmVkICIKLQkJCQkiZXJyb3JzIGR1cmluZyBsb29wYmFjayB0ZXN0Iik7CisJCQlTTVNDX1dBUk4ocGRhdGEsIGh3LAorCQkJCSAgIlJlY2VpdmUgZW5jb3VudGVyZWQgZXJyb3JzIGR1cmluZyBsb29wYmFjayB0ZXN0Iik7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC01NDMsMTIgKzY2NCwxMiBAQAogCQlyZHN6ICs9ICh1MzIpKCh1bG9uZylwZGF0YS0+bG9vcGJhY2tfcnhfcGt0ICYgMHgzKTsKIAkJcmRzeiA+Pj0gMjsKIAotCQlzbXNjOTExeF9yeF9yZWFkZmlmbyhwZGF0YSwgKHVuc2lnbmVkIGludCAqKWJ1ZnAsIHJkc3opOworCQlwZGF0YS0+b3BzLT5yeF9yZWFkZmlmbyhwZGF0YSwgKHVuc2lnbmVkIGludCAqKWJ1ZnAsIHJkc3opOwogCiAJCWlmIChwa3RsZW5ndGggIT0gKE1JTl9QQUNLRVRfU0laRSArIDQpKSB7Ci0JCQlTTVNDX1dBUk5JTkcoSFcsICJVbmV4cGVjdGVkIHBhY2tldCBzaXplICIKLQkJCQkiZHVyaW5nIGxvb3AgYmFjayB0ZXN0LCBzaXplPSVkLCB3aWxsIHJldHJ5IiwKLQkJCQlwa3RsZW5ndGgpOworCQkJU01TQ19XQVJOKHBkYXRhLCBodywgIlVuZXhwZWN0ZWQgcGFja2V0IHNpemUgIgorCQkJCSAgImR1cmluZyBsb29wIGJhY2sgdGVzdCwgc2l6ZT0lZCwgd2lsbCByZXRyeSIsCisJCQkJICBwa3RsZW5ndGgpOwogCQl9IGVsc2UgewogCQkJdW5zaWduZWQgaW50IGo7CiAJCQlpbnQgbWlzbWF0Y2ggPSAwOwpAQCAtNTYwLDEyICs2ODEsMTIgQEAKIAkJCQl9CiAJCQl9CiAJCQlpZiAoIW1pc21hdGNoKSB7Ci0JCQkJU01TQ19UUkFDRShIVywgIlN1Y2Nlc3NmdWxseSB2ZXJpZmllZCAiCisJCQkJU01TQ19UUkFDRShwZGF0YSwgaHcsICJTdWNjZXNzZnVsbHkgdmVyaWZpZWQgIgogCQkJCQkgICAibG9vcGJhY2sgcGFja2V0Iik7CiAJCQkJcmV0dXJuIDA7CiAJCQl9IGVsc2UgewotCQkJCVNNU0NfV0FSTklORyhIVywgIkRhdGEgbWlzbWF0Y2ggIgotCQkJCQkiZHVyaW5nIGxvb3AgYmFjayB0ZXN0LCB3aWxsIHJldHJ5Iik7CisJCQkJU01TQ19XQVJOKHBkYXRhLCBodywgIkRhdGEgbWlzbWF0Y2ggIgorCQkJCQkgICJkdXJpbmcgbG9vcCBiYWNrIHRlc3QsIHdpbGwgcmV0cnkiKTsKIAkJCX0KIAkJfQogCX0KQEAgLTU4Miw3ICs3MDMsNyBAQAogCUJVR19PTighcGh5X2Rldik7CiAJQlVHX09OKCFwaHlfZGV2LT5idXMpOwogCi0JU01TQ19UUkFDRShIVywgIlBlcmZvcm1pbmcgUEhZIEJDUiBSZXNldCIpOworCVNNU0NfVFJBQ0UocGRhdGEsIGh3LCAiUGVyZm9ybWluZyBQSFkgQkNSIFJlc2V0Iik7CiAJc21zYzkxMXhfbWlpX3dyaXRlKHBoeV9kZXYtPmJ1cywgcGh5X2Rldi0+YWRkciwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQpOwogCWRvIHsKIAkJbXNsZWVwKDEpOwpAQCAtNTkxLDcgKzcxMiw3IEBACiAJfSB3aGlsZSAoKGktLSkgJiYgKHRlbXAgJiBCTUNSX1JFU0VUKSk7CiAKIAlpZiAodGVtcCAmIEJNQ1JfUkVTRVQpIHsKLQkJU01TQ19XQVJOSU5HKEhXLCAiUEhZIHJlc2V0IGZhaWxlZCB0byBjb21wbGV0ZS4iKTsKKwkJU01TQ19XQVJOKHBkYXRhLCBodywgIlBIWSByZXNldCBmYWlsZWQgdG8gY29tcGxldGUiKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCS8qIEV4dHJhIGRlbGF5IHJlcXVpcmVkIGJlY2F1c2UgdGhlIHBoeSBtYXkgbm90IGJlIGNvbXBsZXRlZCB3aXRoCkBAIC02OTUsMTEgKzgxNiwxMSBAQAogCQllbHNlCiAJCQlhZmMgJj0gfjB4RjsKIAotCQlTTVNDX1RSQUNFKEhXLCAicnggcGF1c2UgJXMsIHR4IHBhdXNlICVzIiwKLQkJCShjYXAgJiBGTE9XX0NUUkxfUlggPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSwKLQkJCShjYXAgJiBGTE9XX0NUUkxfVFggPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSk7CisJCVNNU0NfVFJBQ0UocGRhdGEsIGh3LCAicnggcGF1c2UgJXMsIHR4IHBhdXNlICVzIiwKKwkJCSAgIChjYXAgJiBGTE9XX0NUUkxfUlggPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSwKKwkJCSAgIChjYXAgJiBGTE9XX0NUUkxfVFggPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSk7CiAJfSBlbHNlIHsKLQkJU01TQ19UUkFDRShIVywgImhhbGYgZHVwbGV4Iik7CisJCVNNU0NfVFJBQ0UocGRhdGEsIGh3LCAiaGFsZiBkdXBsZXgiKTsKIAkJZmxvdyA9IDA7CiAJCWFmYyB8PSAweEY7CiAJfQpAQCAtNzIyLDE3ICs4NDMsMTcgQEAKIAogCWlmIChwaHlfZGV2LT5kdXBsZXggIT0gcGRhdGEtPmxhc3RfZHVwbGV4KSB7CiAJCXVuc2lnbmVkIGludCBtYWNfY3I7Ci0JCVNNU0NfVFJBQ0UoSFcsICJkdXBsZXggc3RhdGUgaGFzIGNoYW5nZWQiKTsKKwkJU01TQ19UUkFDRShwZGF0YSwgaHcsICJkdXBsZXggc3RhdGUgaGFzIGNoYW5nZWQiKTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGRhdGEtPm1hY19sb2NrLCBmbGFncyk7CiAJCW1hY19jciA9IHNtc2M5MTF4X21hY19yZWFkKHBkYXRhLCBNQUNfQ1IpOwogCQlpZiAocGh5X2Rldi0+ZHVwbGV4KSB7Ci0JCQlTTVNDX1RSQUNFKEhXLAotCQkJCSJjb25maWd1cmluZyBmb3IgZnVsbCBkdXBsZXggbW9kZSIpOworCQkJU01TQ19UUkFDRShwZGF0YSwgaHcsCisJCQkJICAgImNvbmZpZ3VyaW5nIGZvciBmdWxsIGR1cGxleCBtb2RlIik7CiAJCQltYWNfY3IgfD0gTUFDX0NSX0ZEUFhfOwogCQl9IGVsc2UgewotCQkJU01TQ19UUkFDRShIVywKLQkJCQkiY29uZmlndXJpbmcgZm9yIGhhbGYgZHVwbGV4IG1vZGUiKTsKKwkJCVNNU0NfVFJBQ0UocGRhdGEsIGh3LAorCQkJCSAgICJjb25maWd1cmluZyBmb3IgaGFsZiBkdXBsZXggbW9kZSIpOwogCQkJbWFjX2NyICY9IH5NQUNfQ1JfRkRQWF87CiAJCX0KIAkJc21zYzkxMXhfbWFjX3dyaXRlKHBkYXRhLCBNQUNfQ1IsIG1hY19jcik7CkBAIC03NDQsOSArODY1LDkgQEAKIAogCWNhcnJpZXIgPSBuZXRpZl9jYXJyaWVyX29rKGRldik7CiAJaWYgKGNhcnJpZXIgIT0gcGRhdGEtPmxhc3RfY2FycmllcikgewotCQlTTVNDX1RSQUNFKEhXLCAiY2FycmllciBzdGF0ZSBoYXMgY2hhbmdlZCIpOworCQlTTVNDX1RSQUNFKHBkYXRhLCBodywgImNhcnJpZXIgc3RhdGUgaGFzIGNoYW5nZWQiKTsKIAkJaWYgKGNhcnJpZXIpIHsKLQkJCVNNU0NfVFJBQ0UoSFcsICJjb25maWd1cmluZyBmb3IgY2FycmllciBPSyIpOworCQkJU01TQ19UUkFDRShwZGF0YSwgaHcsICJjb25maWd1cmluZyBmb3IgY2FycmllciBPSyIpOwogCQkJaWYgKChwZGF0YS0+Z3Bpb19vcmlnX3NldHRpbmcgJiBHUElPX0NGR19MRUQxX0VOXykgJiYKIAkJCSAgICAoIXBkYXRhLT51c2luZ19leHRwaHkpKSB7CiAJCQkJLyogUmVzdG9yZSBvcmlnaW5hbCBHUElPIGNvbmZpZ3VyYXRpb24gKi8KQEAgLTc1NSw3ICs4NzYsNyBAQAogCQkJCQlwZGF0YS0+Z3Bpb19zZXR0aW5nKTsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCVNNU0NfVFJBQ0UoSFcsICJjb25maWd1cmluZyBmb3Igbm8gY2FycmllciIpOworCQkJU01TQ19UUkFDRShwZGF0YSwgaHcsICJjb25maWd1cmluZyBmb3Igbm8gY2FycmllciIpOwogCQkJLyogQ2hlY2sgZ2xvYmFsIHNldHRpbmcgdGhhdCBMRUQxCiAJCQkgKiB1c2FnZSBpcyAxMC8xMDAgaW5kaWNhdG9yICovCiAJCQlwZGF0YS0+Z3Bpb19zZXR0aW5nID0gc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsCkBAIC03ODcsMjUgKzkwOCwyNSBAQAogCS8qIGZpbmQgdGhlIGZpcnN0IHBoeSAqLwogCXBoeWRldiA9IHBoeV9maW5kX2ZpcnN0KHBkYXRhLT5taWlfYnVzKTsKIAlpZiAoIXBoeWRldikgewotCQlwcl9lcnIoIiVzOiBubyBQSFkgZm91bmRcbiIsIGRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LCAibm8gUEhZIGZvdW5kXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JU01TQ19UUkFDRShQUk9CRSwgIlBIWTogYWRkciAlZCwgcGh5X2lkIDB4JTA4WCIsCi0JCQlwaHlkZXYtPmFkZHIsIHBoeWRldi0+cGh5X2lkKTsKKwlTTVNDX1RSQUNFKHBkYXRhLCBwcm9iZSwgIlBIWTogYWRkciAlZCwgcGh5X2lkIDB4JTA4WCIsCisJCSAgIHBoeWRldi0+YWRkciwgcGh5ZGV2LT5waHlfaWQpOwogCiAJcmV0ID0gcGh5X2Nvbm5lY3RfZGlyZWN0KGRldiwgcGh5ZGV2LAogCQkJJnNtc2M5MTF4X3BoeV9hZGp1c3RfbGluaywgMCwKIAkJCXBkYXRhLT5jb25maWcucGh5X2ludGVyZmFjZSk7CiAKIAlpZiAocmV0KSB7Ci0JCXByX2VycigiJXM6IENvdWxkIG5vdCBhdHRhY2ggdG8gUEhZXG4iLCBkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgIkNvdWxkIG5vdCBhdHRhY2ggdG8gUEhZXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlwcl9pbmZvKCIlczogYXR0YWNoZWQgUEhZIGRyaXZlciBbJXNdIChtaWlfYnVzOnBoeV9hZGRyPSVzLCBpcnE9JWQpXG4iLAotCQlkZXYtPm5hbWUsIHBoeWRldi0+ZHJ2LT5uYW1lLAotCQlkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLCBwaHlkZXYtPmlycSk7CisJbmV0ZGV2X2luZm8oZGV2LAorCQkgICAgImF0dGFjaGVkIFBIWSBkcml2ZXIgWyVzXSAobWlpX2J1czpwaHlfYWRkcj0lcywgaXJxPSVkKVxuIiwKKwkJICAgIHBoeWRldi0+ZHJ2LT5uYW1lLCBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLCBwaHlkZXYtPmlycSk7CiAKIAkvKiBtYXNrIHdpdGggTUFDIHN1cHBvcnRlZCBmZWF0dXJlcyAqLwogCXBoeWRldi0+c3VwcG9ydGVkICY9IChQSFlfQkFTSUNfRkVBVFVSRVMgfCBTVVBQT1JURURfUGF1c2UgfApAQCAtODE4LDEzICs5MzksMTMgQEAKIAogI2lmZGVmIFVTRV9QSFlfV09SS19BUk9VTkQKIAlpZiAoc21zYzkxMXhfcGh5X2xvb3BiYWNrdGVzdChkZXYpIDwgMCkgewotCQlTTVNDX1dBUk5JTkcoSFcsICJGYWlsZWQgTG9vcCBCYWNrIFRlc3QiKTsKKwkJU01TQ19XQVJOKHBkYXRhLCBodywgIkZhaWxlZCBMb29wIEJhY2sgVGVzdCIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JU01TQ19UUkFDRShIVywgIlBhc3NlZCBMb29wIEJhY2sgVGVzdCIpOworCVNNU0NfVFJBQ0UocGRhdGEsIGh3LCAiUGFzc2VkIExvb3AgQmFjayBUZXN0Iik7CiAjZW5kaWYJCQkJLyogVVNFX1BIWV9XT1JLX0FST1VORCAqLwogCi0JU01TQ19UUkFDRShIVywgInBoeSBpbml0aWFsaXNlZCBzdWNjZXNzZnVsbHkiKTsKKwlTTVNDX1RSQUNFKHBkYXRhLCBodywgInBoeSBpbml0aWFsaXNlZCBzdWNjZXNzZnVsbHkiKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODYwLDggKzk4MSw4IEBACiAJCXNtc2M5MTF4X3BoeV9pbml0aWFsaXNlX2V4dGVybmFsKHBkYXRhKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJU01TQ19UUkFDRShIVywgIkV4dGVybmFsIFBIWSBpcyBub3Qgc3VwcG9ydGVkLCAiCi0JCQkidXNpbmcgaW50ZXJuYWwgUEhZIik7CisJCVNNU0NfVFJBQ0UocGRhdGEsIGh3LCAiRXh0ZXJuYWwgUEhZIGlzIG5vdCBzdXBwb3J0ZWQsICIKKwkJCSAgICJ1c2luZyBpbnRlcm5hbCBQSFkiKTsKIAkJcGRhdGEtPnVzaW5nX2V4dHBoeSA9IDA7CiAJCWJyZWFrOwogCX0KQEAgLTg3MiwxMiArOTkzLDEyIEBACiAJfQogCiAJaWYgKG1kaW9idXNfcmVnaXN0ZXIocGRhdGEtPm1paV9idXMpKSB7Ci0JCVNNU0NfV0FSTklORyhQUk9CRSwgIkVycm9yIHJlZ2lzdGVyaW5nIG1paSBidXMiKTsKKwkJU01TQ19XQVJOKHBkYXRhLCBwcm9iZSwgIkVycm9yIHJlZ2lzdGVyaW5nIG1paSBidXMiKTsKIAkJZ290byBlcnJfb3V0X2ZyZWVfYnVzXzI7CiAJfQogCiAJaWYgKHNtc2M5MTF4X21paV9wcm9iZShkZXYpIDwgMCkgewotCQlTTVNDX1dBUk5JTkcoUFJPQkUsICJFcnJvciByZWdpc3RlcmluZyBtaWkgYnVzIik7CisJCVNNU0NfV0FSTihwZGF0YSwgcHJvYmUsICJFcnJvciByZWdpc3RlcmluZyBtaWkgYnVzIik7CiAJCWdvdG8gZXJyX291dF91bnJlZ2lzdGVyX2J1c18zOwogCX0KIApAQCAtOTEzLDggKzEwMzQsNyBAQAogCQkJICogZG9lcyBub3QgcmVmZXJlbmNlIGEgaGFyZHdhcmUgZGVmaW5lZCByZXNlcnZlZCBiaXQKIAkJCSAqIGJ1dCByYXRoZXIgYSBkcml2ZXIgZGVmaW5lZCBvbmUuCiAJCQkgKi8KLQkJCVNNU0NfV0FSTklORyhIVywKLQkJCQkiUGFja2V0IHRhZyByZXNlcnZlZCBiaXQgaXMgaGlnaCIpOworCQkJU01TQ19XQVJOKHBkYXRhLCBodywgIlBhY2tldCB0YWcgcmVzZXJ2ZWQgYml0IGlzIGhpZ2giKTsKIAkJfSBlbHNlIHsKIAkJCWlmICh1bmxpa2VseSh0eF9zdGF0ICYgVFhfU1RTX0VTXykpIHsKIAkJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwpAQCAtOTc3LDggKzEwOTcsOCBAQAogCQl9IHdoaWxlICgodmFsICYgUlhfRFBfQ1RSTF9SWF9GRldEXykgJiYgLS10aW1lb3V0KTsKIAogCQlpZiAodW5saWtlbHkodGltZW91dCA9PSAwKSkKLQkJCVNNU0NfV0FSTklORyhIVywgIlRpbWVkIG91dCB3YWl0aW5nIGZvciAiCi0JCQkJIlJYIEZGV0QgdG8gZmluaXNoLCBSWF9EUF9DVFJMOiAweCUwOFgiLCB2YWwpOworCQkJU01TQ19XQVJOKHBkYXRhLCBodywgIlRpbWVkIG91dCB3YWl0aW5nIGZvciAiCisJCQkJICAiUlggRkZXRCB0byBmaW5pc2gsIFJYX0RQX0NUUkw6IDB4JTA4WCIsIHZhbCk7CiAJfSBlbHNlIHsKIAkJdW5zaWduZWQgaW50IHRlbXA7CiAJCXdoaWxlIChwa3R3b3Jkcy0tKQpAQCAtMTAyMSw4ICsxMTQxLDggQEAKIAkJc21zYzkxMXhfcnhfY291bnRlcnJvcnMoZGV2LCByeHN0YXQpOwogCiAJCWlmICh1bmxpa2VseShyeHN0YXQgJiBSWF9TVFNfRVNfKSkgewotCQkJU01TQ19XQVJOSU5HKFJYX0VSUiwKLQkJCQkiRGlzY2FyZGluZyBwYWNrZXQgd2l0aCBlcnJvciBiaXQgc2V0Iik7CisJCQlTTVNDX1dBUk4ocGRhdGEsIHJ4X2VyciwKKwkJCQkgICJEaXNjYXJkaW5nIHBhY2tldCB3aXRoIGVycm9yIGJpdCBzZXQiKTsKIAkJCS8qIFBhY2tldCBoYXMgYW4gZXJyb3IsIGRpc2NhcmQgaXQgYW5kIGNvbnRpbnVlIHdpdGgKIAkJCSAqIHRoZSBuZXh0ICovCiAJCQlzbXNjOTExeF9yeF9mYXN0Zm9yd2FyZChwZGF0YSwgcGt0d29yZHMpOwpAQCAtMTAzMiw4ICsxMTUyLDggQEAKIAogCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGRldiwgcGt0bGVuZ3RoICsgTkVUX0lQX0FMSUdOKTsKIAkJaWYgKHVubGlrZWx5KCFza2IpKSB7Ci0JCQlTTVNDX1dBUk5JTkcoUlhfRVJSLAotCQkJCSJVbmFibGUgdG8gYWxsb2NhdGUgc2tiIGZvciByeCBwYWNrZXQiKTsKKwkJCVNNU0NfV0FSTihwZGF0YSwgcnhfZXJyLAorCQkJCSAgIlVuYWJsZSB0byBhbGxvY2F0ZSBza2IgZm9yIHJ4IHBhY2tldCIpOwogCQkJLyogRHJvcCB0aGUgcGFja2V0IGFuZCBzdG9wIHRoaXMgcG9sbGluZyBpdGVyYXRpb24gKi8KIAkJCXNtc2M5MTF4X3J4X2Zhc3Rmb3J3YXJkKHBkYXRhLCBwa3R3b3Jkcyk7CiAJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKQEAgLTEwNDYsOCArMTE2Niw4IEBACiAJCS8qIEFsaWduIElQIG9uIDE2QiBib3VuZGFyeSAqLwogCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7CiAJCXNrYl9wdXQoc2tiLCBwa3RsZW5ndGggLSA0KTsKLQkJc21zYzkxMXhfcnhfcmVhZGZpZm8ocGRhdGEsICh1bnNpZ25lZCBpbnQgKilza2ItPmhlYWQsCi0JCQkJICAgICBwa3R3b3Jkcyk7CisJCXBkYXRhLT5vcHMtPnJ4X3JlYWRmaWZvKHBkYXRhLAorCQkJCSAodW5zaWduZWQgaW50ICopc2tiLT5oZWFkLCBwa3R3b3Jkcyk7CiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAJCXNrYl9jaGVja3N1bV9ub25lX2Fzc2VydChza2IpOwogCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwpAQCAtMTA4Myw4ICsxMjAzLDggQEAKIAlzbXNjOTExeF9tYWNfd3JpdGUocGRhdGEsIE1BQ19DUiwgbWFjX2NyKTsKIAlzbXNjOTExeF9tYWNfd3JpdGUocGRhdGEsIEhBU0hILCBwZGF0YS0+aGFzaGhpKTsKIAlzbXNjOTExeF9tYWNfd3JpdGUocGRhdGEsIEhBU0hMLCBwZGF0YS0+aGFzaGxvKTsKLQlTTVNDX1RSQUNFKEhXLCAibWFjY3IgMHglMDhYLCBIQVNISCAweCUwOFgsIEhBU0hMIDB4JTA4WCIsCi0JCW1hY19jciwgcGRhdGEtPmhhc2hoaSwgcGRhdGEtPmhhc2hsbyk7CisJU01TQ19UUkFDRShwZGF0YSwgaHcsICJtYWNjciAweCUwOFgsIEhBU0hIIDB4JTA4WCwgSEFTSEwgMHglMDhYIiwKKwkJICAgbWFjX2NyLCBwZGF0YS0+aGFzaGhpLCBwZGF0YS0+aGFzaGxvKTsKIH0KIAogc3RhdGljIHZvaWQgc21zYzkxMXhfcnhfbXVsdGljYXN0X3VwZGF0ZV93b3JrYXJvdW5kKHN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSkKQEAgLTExMDIsNyArMTIyMiw3IEBACiAKIAkvKiBDaGVjayBSeCBoYXMgc3RvcHBlZCAqLwogCWlmIChzbXNjOTExeF9tYWNfcmVhZChwZGF0YSwgTUFDX0NSKSAmIE1BQ19DUl9SWEVOXykKLQkJU01TQ19XQVJOSU5HKERSViwgIlJ4IG5vdCBzdG9wcGVkIik7CisJCVNNU0NfV0FSTihwZGF0YSwgZHJ2LCAiUnggbm90IHN0b3BwZWQiKTsKIAogCS8qIFBlcmZvcm0gdGhlIHVwZGF0ZSAtIHNhZmUgdG8gZG8gbm93IFJ4IGhhcyBzdG9wcGVkICovCiAJc21zYzkxMXhfcnhfbXVsdGljYXN0X3VwZGF0ZShwZGF0YSk7CkBAIC0xMTMxLDcgKzEyNTEsNyBAQAogCX0gd2hpbGUgKCgtLXRpbWVvdXQpICYmICh0ZW1wICYgSFdfQ0ZHX1NSU1RfKSk7CiAKIAlpZiAodW5saWtlbHkodGVtcCAmIEhXX0NGR19TUlNUXykpIHsKLQkJU01TQ19XQVJOSU5HKERSViwgIkZhaWxlZCB0byBjb21wbGV0ZSByZXNldCIpOworCQlTTVNDX1dBUk4ocGRhdGEsIGRydiwgIkZhaWxlZCB0byBjb21wbGV0ZSByZXNldCIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xMTYwLDE4ICsxMjgwLDE4IEBACiAKIAkvKiBpZiB0aGUgcGh5IGlzIG5vdCB5ZXQgcmVnaXN0ZXJlZCwgcmV0cnkgbGF0ZXIqLwogCWlmICghcGRhdGEtPnBoeV9kZXYpIHsKLQkJU01TQ19XQVJOSU5HKEhXLCAicGh5X2RldiBpcyBOVUxMIik7CisJCVNNU0NfV0FSTihwZGF0YSwgaHcsICJwaHlfZGV2IGlzIE5VTEwiKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpKSB7Ci0JCVNNU0NfV0FSTklORyhIVywgImRldl9hZGRyIGlzIG5vdCBhIHZhbGlkIE1BQyBhZGRyZXNzIik7CisJCVNNU0NfV0FSTihwZGF0YSwgaHcsICJkZXZfYWRkciBpcyBub3QgYSB2YWxpZCBNQUMgYWRkcmVzcyIpOwogCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiAJfQogCiAJLyogUmVzZXQgdGhlIExBTjkxMXggKi8KIAlpZiAoc21zYzkxMXhfc29mdF9yZXNldChwZGF0YSkpIHsKLQkJU01TQ19XQVJOSU5HKEhXLCAic29mdCByZXNldCBmYWlsZWQiKTsKKwkJU01TQ19XQVJOKHBkYXRhLCBodywgInNvZnQgcmVzZXQgZmFpbGVkIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMTE5MSw4ICsxMzExLDggQEAKIAl9CiAKIAlpZiAodW5saWtlbHkodGltZW91dCA9PSAwKSkKLQkJU01TQ19XQVJOSU5HKElGVVAsCi0JCQkiVGltZWQgb3V0IHdhaXRpbmcgZm9yIEVFUFJPTSBidXN5IGJpdCB0byBjbGVhciIpOworCQlTTVNDX1dBUk4ocGRhdGEsIGlmdXAsCisJCQkgICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgRUVQUk9NIGJ1c3kgYml0IHRvIGNsZWFyIik7CiAKIAlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIEdQSU9fQ0ZHLCAweDcwMDcwMDAwKTsKIApAQCAtMTIxMCwyMiArMTMzMCwyMiBAQAogCWludGNmZyA9ICgoMTAgPDwgMjQpIHwgSU5UX0NGR19JUlFfRU5fKTsKIAogCWlmIChwZGF0YS0+Y29uZmlnLmlycV9wb2xhcml0eSkgewotCQlTTVNDX1RSQUNFKElGVVAsICJpcnEgcG9sYXJpdHk6IGFjdGl2ZSBoaWdoIik7CisJCVNNU0NfVFJBQ0UocGRhdGEsIGlmdXAsICJpcnEgcG9sYXJpdHk6IGFjdGl2ZSBoaWdoIik7CiAJCWludGNmZyB8PSBJTlRfQ0ZHX0lSUV9QT0xfOwogCX0gZWxzZSB7Ci0JCVNNU0NfVFJBQ0UoSUZVUCwgImlycSBwb2xhcml0eTogYWN0aXZlIGxvdyIpOworCQlTTVNDX1RSQUNFKHBkYXRhLCBpZnVwLCAiaXJxIHBvbGFyaXR5OiBhY3RpdmUgbG93Iik7CiAJfQogCiAJaWYgKHBkYXRhLT5jb25maWcuaXJxX3R5cGUpIHsKLQkJU01TQ19UUkFDRShJRlVQLCAiaXJxIHR5cGU6IHB1c2gtcHVsbCIpOworCQlTTVNDX1RSQUNFKHBkYXRhLCBpZnVwLCAiaXJxIHR5cGU6IHB1c2gtcHVsbCIpOwogCQlpbnRjZmcgfD0gSU5UX0NGR19JUlFfVFlQRV87CiAJfSBlbHNlIHsKLQkJU01TQ19UUkFDRShJRlVQLCAiaXJxIHR5cGU6IG9wZW4gZHJhaW4iKTsKKwkJU01TQ19UUkFDRShwZGF0YSwgaWZ1cCwgImlycSB0eXBlOiBvcGVuIGRyYWluIik7CiAJfQogCiAJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBJTlRfQ0ZHLCBpbnRjZmcpOwogCi0JU01TQ19UUkFDRShJRlVQLCAiVGVzdGluZyBpcnEgaGFuZGxlciB1c2luZyBJUlEgJWQiLCBkZXYtPmlycSk7CisJU01TQ19UUkFDRShwZGF0YSwgaWZ1cCwgIlRlc3RpbmcgaXJxIGhhbmRsZXIgdXNpbmcgSVJRICVkIiwgZGV2LT5pcnEpOwogCXBkYXRhLT5zb2Z0d2FyZV9pcnFfc2lnbmFsID0gMDsKIAlzbXBfd21iKCk7CiAKQEAgLTEyNDEsMTQgKzEzNjEsMTUgQEAKIAl9CiAKIAlpZiAoIXBkYXRhLT5zb2Z0d2FyZV9pcnFfc2lnbmFsKSB7Ci0JCWRldl93YXJuKCZkZXYtPmRldiwgIklTUiBmYWlsZWQgc2lnbmFsaW5nIHRlc3QgKElSUSAlZClcbiIsCi0JCQkgZGV2LT5pcnEpOworCQluZXRkZXZfd2FybihkZXYsICJJU1IgZmFpbGVkIHNpZ25hbGluZyB0ZXN0IChJUlEgJWQpXG4iLAorCQkJICAgIGRldi0+aXJxKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCVNNU0NfVFJBQ0UoSUZVUCwgIklSUSBoYW5kbGVyIHBhc3NlZCB0ZXN0IHVzaW5nIElSUSAlZCIsIGRldi0+aXJxKTsKKwlTTVNDX1RSQUNFKHBkYXRhLCBpZnVwLCAiSVJRIGhhbmRsZXIgcGFzc2VkIHRlc3QgdXNpbmcgSVJRICVkIiwKKwkJICAgZGV2LT5pcnEpOwogCi0JZGV2X2luZm8oJmRldi0+ZGV2LCAiU01TQzkxMXgvOTIxeCBpZGVudGlmaWVkIGF0ICUjMDhseCwgSVJROiAlZFxuIiwKLQkJICh1bnNpZ25lZCBsb25nKXBkYXRhLT5pb2FkZHIsIGRldi0+aXJxKTsKKwluZXRkZXZfaW5mbyhkZXYsICJTTVNDOTExeC85MjF4IGlkZW50aWZpZWQgYXQgJSMwOGx4LCBJUlE6ICVkXG4iLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpcGRhdGEtPmlvYWRkciwgZGV2LT5pcnEpOwogCiAJLyogUmVzZXQgdGhlIGxhc3Qga25vd24gZHVwbGV4IGFuZCBjYXJyaWVyICovCiAJcGRhdGEtPmxhc3RfZHVwbGV4ID0gLTE7CkBAIC0xMzEzLDcgKzE0MzQsNyBAQAogCWlmIChwZGF0YS0+cGh5X2RldikKIAkJcGh5X3N0b3AocGRhdGEtPnBoeV9kZXYpOwogCi0JU01TQ19UUkFDRShJRkRPV04sICJJbnRlcmZhY2Ugc3RvcHBlZCIpOworCVNNU0NfVFJBQ0UocGRhdGEsIGlmZG93biwgIkludGVyZmFjZSBzdG9wcGVkIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzMzEsOCArMTQ1Miw4IEBACiAJZnJlZXNwYWNlID0gc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIFRYX0ZJRk9fSU5GKSAmIFRYX0ZJRk9fSU5GX1RERlJFRV87CiAKIAlpZiAodW5saWtlbHkoZnJlZXNwYWNlIDwgVFhfRklGT19MT1dfVEhSRVNIT0xEKSkKLQkJU01TQ19XQVJOSU5HKFRYX0VSUiwKLQkJCSJUeCBkYXRhIGZpZm8gbG93LCBzcGFjZSBhdmFpbGFibGU6ICVkIiwgZnJlZXNwYWNlKTsKKwkJU01TQ19XQVJOKHBkYXRhLCB0eF9lcnIsCisJCQkgICJUeCBkYXRhIGZpZm8gbG93LCBzcGFjZSBhdmFpbGFibGU6ICVkIiwgZnJlZXNwYWNlKTsKIAogCS8qIFdvcmQgYWxpZ25tZW50IGFkanVzdG1lbnQgKi8KIAl0eF9jbWRfYSA9ICh1MzIpKCh1bG9uZylza2ItPmRhdGEgJiAweDAzKSA8PCAxNjsKQEAgLTEzNTAsNyArMTQ3MSw3IEBACiAJd3JzeiArPSAodTMyKSgodWxvbmcpc2tiLT5kYXRhICYgMHgzKTsKIAl3cnN6ID4+PSAyOwogCi0Jc21zYzkxMXhfdHhfd3JpdGVmaWZvKHBkYXRhLCAodW5zaWduZWQgaW50ICopYnVmcCwgd3Jzeik7CisJcGRhdGEtPm9wcy0+dHhfd3JpdGVmaWZvKHBkYXRhLCAodW5zaWduZWQgaW50ICopYnVmcCwgd3Jzeik7CiAJZnJlZXNwYWNlIC09IChza2ItPmxlbiArIDMyKTsKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKQEAgLTE0MzIsNyArMTU1Myw3IEBACiAJCSAqIHJlY2VpdmluZyBkYXRhICovCiAJCWlmICghcGRhdGEtPm11bHRpY2FzdF91cGRhdGVfcGVuZGluZykgewogCQkJdW5zaWduZWQgaW50IHRlbXA7Ci0JCQlTTVNDX1RSQUNFKEhXLCAic2NoZWR1bGluZyBtY2FzdCB1cGRhdGUiKTsKKwkJCVNNU0NfVFJBQ0UocGRhdGEsIGh3LCAic2NoZWR1bGluZyBtY2FzdCB1cGRhdGUiKTsKIAkJCXBkYXRhLT5tdWx0aWNhc3RfdXBkYXRlX3BlbmRpbmcgPSAxOwogCiAJCQkvKiBSZXF1ZXN0IHRoZSBoYXJkd2FyZSB0byBzdG9wLCB0aGVuIHBlcmZvcm0gdGhlCkBAIC0xNDc0LDcgKzE1OTUsNyBAQAogCWlmICh1bmxpa2VseShpbnRzdHMgJiBpbnRlbiAmIElOVF9TVFNfUlhTVE9QX0lOVF8pKSB7CiAJCS8qIENhbGxlZCB3aGVuIHRoZXJlIGlzIGEgbXVsdGljYXN0IHVwZGF0ZSBzY2hlZHVsZWQgYW5kCiAJCSAqIGl0IGlzIG5vdyBzYWZlIHRvIGNvbXBsZXRlIHRoZSB1cGRhdGUgKi8KLQkJU01TQ19UUkFDRShJTlRSLCAiUlggU3RvcCBpbnRlcnJ1cHQiKTsKKwkJU01TQ19UUkFDRShwZGF0YSwgaW50ciwgIlJYIFN0b3AgaW50ZXJydXB0Iik7CiAJCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSU5UX1NUUywgSU5UX1NUU19SWFNUT1BfSU5UXyk7CiAJCWlmIChwZGF0YS0+bXVsdGljYXN0X3VwZGF0ZV9wZW5kaW5nKQogCQkJc21zYzkxMXhfcnhfbXVsdGljYXN0X3VwZGF0ZV93b3JrYXJvdW5kKHBkYXRhKTsKQEAgLTE0OTEsNyArMTYxMiw3IEBACiAJfQogCiAJaWYgKHVubGlrZWx5KGludHN0cyAmIGludGVuICYgSU5UX1NUU19SWEVfKSkgewotCQlTTVNDX1RSQUNFKElOVFIsICJSWCBFcnJvciBpbnRlcnJ1cHQiKTsKKwkJU01TQ19UUkFDRShwZGF0YSwgaW50ciwgIlJYIEVycm9yIGludGVycnVwdCIpOwogCQlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIElOVF9TVFMsIElOVF9TVFNfUlhFXyk7CiAJCXNlcnZpY2VkID0gSVJRX0hBTkRMRUQ7CiAJfQpAQCAtMTUwNSw4ICsxNjI2LDcgQEAKIAkJCS8qIFNjaGVkdWxlIGEgTkFQSSBwb2xsICovCiAJCQlfX25hcGlfc2NoZWR1bGUoJnBkYXRhLT5uYXBpKTsKIAkJfSBlbHNlIHsKLQkJCVNNU0NfV0FSTklORyhSWF9FUlIsCi0JCQkJIm5hcGlfc2NoZWR1bGVfcHJlcCBmYWlsZWQiKTsKKwkJCVNNU0NfV0FSTihwZGF0YSwgcnhfZXJyLCAibmFwaV9zY2hlZHVsZV9wcmVwIGZhaWxlZCIpOwogCQl9CiAJCXNlcnZpY2VkID0gSVJRX0hBTkRMRUQ7CiAJfQpAQCAtMTU0Myw3ICsxNjYzLDcgQEAKIAlzbXNjOTExeF9zZXRfaHdfbWFjX2FkZHJlc3MocGRhdGEsIGRldi0+ZGV2X2FkZHIpOwogCXNwaW5fdW5sb2NrX2lycSgmcGRhdGEtPm1hY19sb2NrKTsKIAotCWRldl9pbmZvKCZkZXYtPmRldiwgIk1BQyBBZGRyZXNzOiAlcE1cbiIsIGRldi0+ZGV2X2FkZHIpOworCW5ldGRldl9pbmZvKGRldiwgIk1BQyBBZGRyZXNzOiAlcE1cbiIsIGRldi0+ZGV2X2FkZHIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNjQ5LDkgKzE3NjksOSBAQAogCWludCB0aW1lb3V0ID0gMTAwOwogCXUzMiBlMmNtZDsKIAotCVNNU0NfVFJBQ0UoRFJWLCAib3AgMHglMDh4Iiwgb3ApOworCVNNU0NfVFJBQ0UocGRhdGEsIGRydiwgIm9wIDB4JTA4eCIsIG9wKTsKIAlpZiAoc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIEUyUF9DTUQpICYgRTJQX0NNRF9FUENfQlVTWV8pIHsKLQkJU01TQ19XQVJOSU5HKERSViwgIkJ1c3kgYXQgc3RhcnQiKTsKKwkJU01TQ19XQVJOKHBkYXRhLCBkcnYsICJCdXN5IGF0IHN0YXJ0Iik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC0xNjY0LDEyICsxNzg0LDEyIEBACiAJfSB3aGlsZSAoKGUyY21kICYgRTJQX0NNRF9FUENfQlVTWV8pICYmICgtLXRpbWVvdXQpKTsKIAogCWlmICghdGltZW91dCkgewotCQlTTVNDX1RSQUNFKERSViwgIlRJTUVEIE9VVCIpOworCQlTTVNDX1RSQUNFKHBkYXRhLCBkcnYsICJUSU1FRCBPVVQiKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCiAJaWYgKGUyY21kICYgRTJQX0NNRF9FUENfVElNRU9VVF8pIHsKLQkJU01TQ19UUkFDRShEUlYsICJFcnJvciBvY2N1cnJlZCBkdXJpbmcgZWVwcm9tIG9wZXJhdGlvbiIpOworCQlTTVNDX1RSQUNFKHBkYXRhLCBkcnYsICJFcnJvciBvY2N1cnJlZCBkdXJpbmcgZWVwcm9tIG9wZXJhdGlvbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE2ODIsNyArMTgwMiw3IEBACiAJdTMyIG9wID0gRTJQX0NNRF9FUENfQ01EX1JFQURfIHwgYWRkcmVzczsKIAlpbnQgcmV0OwogCi0JU01TQ19UUkFDRShEUlYsICJhZGRyZXNzIDB4JXgiLCBhZGRyZXNzKTsKKwlTTVNDX1RSQUNFKHBkYXRhLCBkcnYsICJhZGRyZXNzIDB4JXgiLCBhZGRyZXNzKTsKIAlyZXQgPSBzbXNjOTExeF9lZXByb21fc2VuZF9jbWQocGRhdGEsIG9wKTsKIAogCWlmICghcmV0KQpAQCAtMTY5OCw3ICsxODE4LDcgQEAKIAl1MzIgdGVtcDsKIAlpbnQgcmV0OwogCi0JU01TQ19UUkFDRShEUlYsICJhZGRyZXNzIDB4JXgsIGRhdGEgMHgleCIsIGFkZHJlc3MsIGRhdGEpOworCVNNU0NfVFJBQ0UocGRhdGEsIGRydiwgImFkZHJlc3MgMHgleCwgZGF0YSAweCV4IiwgYWRkcmVzcywgZGF0YSk7CiAJcmV0ID0gc21zYzkxMXhfZWVwcm9tX3NlbmRfY21kKHBkYXRhLCBvcCk7CiAKIAlpZiAoIXJldCkgewpAQCAtMTgxMSwyNiArMTkzMSwyNiBAQAogCXN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgaW50IGJ5dGVfdGVzdDsKIAotCVNNU0NfVFJBQ0UoUFJPQkUsICJEcml2ZXIgUGFyYW1ldGVyczoiKTsKLQlTTVNDX1RSQUNFKFBST0JFLCAiTEFOIGJhc2U6IDB4JTA4bFgiLAotCQkodW5zaWduZWQgbG9uZylwZGF0YS0+aW9hZGRyKTsKLQlTTVNDX1RSQUNFKFBST0JFLCAiSVJROiAlZCIsIGRldi0+aXJxKTsKLQlTTVNDX1RSQUNFKFBST0JFLCAiUEhZIHdpbGwgYmUgYXV0b2RldGVjdGVkLiIpOworCVNNU0NfVFJBQ0UocGRhdGEsIHByb2JlLCAiRHJpdmVyIFBhcmFtZXRlcnM6Iik7CisJU01TQ19UUkFDRShwZGF0YSwgcHJvYmUsICJMQU4gYmFzZTogMHglMDhsWCIsCisJCSAgICh1bnNpZ25lZCBsb25nKXBkYXRhLT5pb2FkZHIpOworCVNNU0NfVFJBQ0UocGRhdGEsIHByb2JlLCAiSVJROiAlZCIsIGRldi0+aXJxKTsKKwlTTVNDX1RSQUNFKHBkYXRhLCBwcm9iZSwgIlBIWSB3aWxsIGJlIGF1dG9kZXRlY3RlZC4iKTsKIAogCXNwaW5fbG9ja19pbml0KCZwZGF0YS0+ZGV2X2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZwZGF0YS0+bWFjX2xvY2spOwogCiAJaWYgKHBkYXRhLT5pb2FkZHIgPT0gMCkgewotCQlTTVNDX1dBUk5JTkcoUFJPQkUsICJwZGF0YS0+aW9hZGRyOiAweDAwMDAwMDAwIik7CisJCVNNU0NfV0FSTihwZGF0YSwgcHJvYmUsICJwZGF0YS0+aW9hZGRyOiAweDAwMDAwMDAwIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCS8qIENoZWNrIGJ5dGUgb3JkZXJpbmcgKi8KIAlieXRlX3Rlc3QgPSBzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgQllURV9URVNUKTsKLQlTTVNDX1RSQUNFKFBST0JFLCAiQllURV9URVNUOiAweCUwOFgiLCBieXRlX3Rlc3QpOworCVNNU0NfVFJBQ0UocGRhdGEsIHByb2JlLCAiQllURV9URVNUOiAweCUwOFgiLCBieXRlX3Rlc3QpOwogCWlmIChieXRlX3Rlc3QgPT0gMHg0MzIxODc2NSkgewotCQlTTVNDX1RSQUNFKFBST0JFLCAiQllURV9URVNUIGxvb2tzIHN3YXBwZWQsICIKLQkJCSJhcHBseWluZyBXT1JEX1NXQVAiKTsKKwkJU01TQ19UUkFDRShwZGF0YSwgcHJvYmUsICJCWVRFX1RFU1QgbG9va3Mgc3dhcHBlZCwgIgorCQkJICAgImFwcGx5aW5nIFdPUkRfU1dBUCIpOwogCQlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIFdPUkRfU1dBUCwgMHhmZmZmZmZmZik7CiAKIAkJLyogMSBkdW1teSByZWFkIG9mIEJZVEVfVEVTVCBpcyBuZWVkZWQgYWZ0ZXIgYSB3cml0ZSB0bwpAQCAtMTg0MSwxMiArMTk2MSwxMyBAQAogCX0KIAogCWlmIChieXRlX3Rlc3QgIT0gMHg4NzY1NDMyMSkgewotCQlTTVNDX1dBUk5JTkcoRFJWLCAiQllURV9URVNUOiAweCUwOFgiLCBieXRlX3Rlc3QpOworCQlTTVNDX1dBUk4ocGRhdGEsIGRydiwgIkJZVEVfVEVTVDogMHglMDhYIiwgYnl0ZV90ZXN0KTsKIAkJaWYgKCgoYnl0ZV90ZXN0ID4+IDE2KSAmIDB4RkZGRikgPT0gKGJ5dGVfdGVzdCAmIDB4RkZGRikpIHsKLQkJCVNNU0NfV0FSTklORyhQUk9CRSwKLQkJCQkidG9wIDE2IGJpdHMgZXF1YWwgdG8gYm90dG9tIDE2IGJpdHMiKTsKLQkJCVNNU0NfVFJBQ0UoUFJPQkUsICJUaGlzIG1heSBtZWFuIHRoZSBjaGlwIGlzIHNldCAiCi0JCQkJImZvciAzMiBiaXQgd2hpbGUgdGhlIGJ1cyBpcyByZWFkaW5nIDE2IGJpdCIpOworCQkJU01TQ19XQVJOKHBkYXRhLCBwcm9iZSwKKwkJCQkgICJ0b3AgMTYgYml0cyBlcXVhbCB0byBib3R0b20gMTYgYml0cyIpOworCQkJU01TQ19UUkFDRShwZGF0YSwgcHJvYmUsCisJCQkJICAgIlRoaXMgbWF5IG1lYW4gdGhlIGNoaXAgaXMgc2V0ICIKKwkJCQkgICAiZm9yIDMyIGJpdCB3aGlsZSB0aGUgYnVzIGlzIHJlYWRpbmcgMTYgYml0Iik7CiAJCX0KIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtMTg4MSwxNyArMjAwMiwxOCBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCVNNU0NfV0FSTklORyhQUk9CRSwgIkxBTjkxMXggbm90IGlkZW50aWZpZWQsIGlkcmV2OiAweCUwOFgiLAotCQkJcGRhdGEtPmlkcmV2KTsKKwkJU01TQ19XQVJOKHBkYXRhLCBwcm9iZSwgIkxBTjkxMXggbm90IGlkZW50aWZpZWQsIGlkcmV2OiAweCUwOFgiLAorCQkJICBwZGF0YS0+aWRyZXYpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlTTVNDX1RSQUNFKFBST0JFLCAiTEFOOTExeCBpZGVudGlmaWVkLCBpZHJldjogMHglMDhYLCBnZW5lcmF0aW9uOiAlZCIsCi0JCXBkYXRhLT5pZHJldiwgcGRhdGEtPmdlbmVyYXRpb24pOworCVNNU0NfVFJBQ0UocGRhdGEsIHByb2JlLAorCQkgICAiTEFOOTExeCBpZGVudGlmaWVkLCBpZHJldjogMHglMDhYLCBnZW5lcmF0aW9uOiAlZCIsCisJCSAgIHBkYXRhLT5pZHJldiwgcGRhdGEtPmdlbmVyYXRpb24pOwogCiAJaWYgKHBkYXRhLT5nZW5lcmF0aW9uID09IDApCi0JCVNNU0NfV0FSTklORyhQUk9CRSwKLQkJCSJUaGlzIGRyaXZlciBpcyBub3QgaW50ZW5kZWQgZm9yIHRoaXMgY2hpcCByZXZpc2lvbiIpOworCQlTTVNDX1dBUk4ocGRhdGEsIHByb2JlLAorCQkJICAiVGhpcyBkcml2ZXIgaXMgbm90IGludGVuZGVkIGZvciB0aGlzIGNoaXAgcmV2aXNpb24iKTsKIAogCS8qIHdvcmthcm91bmQgZm9yIHBsYXRmb3JtcyB3aXRob3V0IGFuIGVlcHJvbSwgd2hlcmUgdGhlIG1hYyBhZGRyZXNzCiAJICogaXMgc3RvcmVkIGVsc2V3aGVyZSBhbmQgc2V0IGJ5IHRoZSBib290bG9hZGVyLiAgVGhpcyBzYXZlcyB0aGUKQEAgLTE5MzEsNyArMjA1Myw3IEBACiAJQlVHX09OKCFwZGF0YS0+aW9hZGRyKTsKIAlCVUdfT04oIXBkYXRhLT5waHlfZGV2KTsKIAotCVNNU0NfVFJBQ0UoSUZET1dOLCAiU3RvcHBpbmcgZHJpdmVyLiIpOworCVNNU0NfVFJBQ0UocGRhdGEsIGlmZG93biwgIlN0b3BwaW5nIGRyaXZlciIpOwogCiAJcGh5X2Rpc2Nvbm5lY3QocGRhdGEtPnBoeV9kZXYpOwogCXBkYXRhLT5waHlfZGV2ID0gTlVMTDsKQEAgLTE5NTUsNiArMjA3NywyMiBAQAogCXJldHVybiAwOwogfQogCisvKiBzdGFuZGFyZCByZWdpc3RlciBhY2NlcyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbXNjOTExeF9vcHMgc3RhbmRhcmRfc21zYzkxMXhfb3BzID0geworCS5yZWdfcmVhZCA9IF9fc21zYzkxMXhfcmVnX3JlYWQsCisJLnJlZ193cml0ZSA9IF9fc21zYzkxMXhfcmVnX3dyaXRlLAorCS5yeF9yZWFkZmlmbyA9IHNtc2M5MTF4X3J4X3JlYWRmaWZvLAorCS50eF93cml0ZWZpZm8gPSBzbXNjOTExeF90eF93cml0ZWZpZm8sCit9OworCisvKiBzaGlmdGVkIHJlZ2lzdGVyIGFjY2VzcyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbXNjOTExeF9vcHMgc2hpZnRlZF9zbXNjOTExeF9vcHMgPSB7CisJLnJlZ19yZWFkID0gX19zbXNjOTExeF9yZWdfcmVhZF9zaGlmdCwKKwkucmVnX3dyaXRlID0gX19zbXNjOTExeF9yZWdfd3JpdGVfc2hpZnQsCisJLnJ4X3JlYWRmaWZvID0gc21zYzkxMXhfcnhfcmVhZGZpZm9fc2hpZnQsCisJLnR4X3dyaXRlZmlmbyA9IHNtc2M5MTF4X3R4X3dyaXRlZmlmb19zaGlmdCwKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNtc2M5MTF4X2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC0xOTY1LDExICsyMTAzLDExIEBACiAJaW50IHJlc19zaXplLCBpcnFfZmxhZ3M7CiAJaW50IHJldHZhbDsKIAotCXByX2luZm8oIiVzOiBEcml2ZXIgdmVyc2lvbiAlcy5cbiIsIFNNU0NfQ0hJUE5BTUUsIFNNU0NfRFJWX1ZFUlNJT04pOworCXByX2luZm8oIkRyaXZlciB2ZXJzaW9uICVzXG4iLCBTTVNDX0RSVl9WRVJTSU9OKTsKIAogCS8qIHBsYXRmb3JtIGRhdGEgc3BlY2lmaWVzIGlycSAmIGR5bmFtaWMgYnVzIGNvbmZpZ3VyYXRpb24gKi8KIAlpZiAoIXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKSB7Ci0JCXByX3dhcm5pbmcoIiVzOiBwbGF0Zm9ybV9kYXRhIG5vdCBwcm92aWRlZFxuIiwgU01TQ19DSElQTkFNRSk7CisJCXByX3dhcm4oInBsYXRmb3JtX2RhdGEgbm90IHByb3ZpZGVkXG4iKTsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZ290byBvdXRfMDsKIAl9CkBAIC0xOTc5LDggKzIxMTcsNyBAQAogCWlmICghcmVzKQogCQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghcmVzKSB7Ci0JCXByX3dhcm5pbmcoIiVzOiBDb3VsZCBub3QgYWxsb2NhdGUgcmVzb3VyY2UuXG4iLAotCQkJU01TQ19DSElQTkFNRSk7CisJCXByX3dhcm4oIkNvdWxkIG5vdCBhbGxvY2F0ZSByZXNvdXJjZVxuIik7CiAJCXJldHZhbCA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0XzA7CiAJfQpAQCAtMTk4OCw4ICsyMTI1LDcgQEAKIAogCWlycV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOwogCWlmICghaXJxX3JlcykgewotCQlwcl93YXJuaW5nKCIlczogQ291bGQgbm90IGFsbG9jYXRlIGlycSByZXNvdXJjZS5cbiIsCi0JCQlTTVNDX0NISVBOQU1FKTsKKwkJcHJfd2FybigiQ291bGQgbm90IGFsbG9jYXRlIGlycSByZXNvdXJjZVxuIik7CiAJCXJldHZhbCA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0XzA7CiAJfQpAQCAtMjAwMSw3ICsyMTM3LDcgQEAKIAogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3Qgc21zYzkxMXhfZGF0YSkpOwogCWlmICghZGV2KSB7Ci0JCXByX3dhcm5pbmcoIiVzOiBDb3VsZCBub3QgYWxsb2NhdGUgZGV2aWNlLlxuIiwgU01TQ19DSElQTkFNRSk7CisJCXByX3dhcm4oIkNvdWxkIG5vdCBhbGxvY2F0ZSBkZXZpY2VcbiIpOwogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9yZWxlYXNlX2lvXzE7CiAJfQpAQCAtMjAyMSwxMiArMjE1NywxNyBAQAogCXBkYXRhLT5tc2dfZW5hYmxlID0gKCgxIDw8IGRlYnVnKSAtIDEpOwogCiAJaWYgKHBkYXRhLT5pb2FkZHIgPT0gTlVMTCkgewotCQlTTVNDX1dBUk5JTkcoUFJPQkUsCi0JCQkiRXJyb3Igc21zYzkxMXggYmFzZSBhZGRyZXNzIGludmFsaWQiKTsKKwkJU01TQ19XQVJOKHBkYXRhLCBwcm9iZSwgIkVycm9yIHNtc2M5MTF4IGJhc2UgYWRkcmVzcyBpbnZhbGlkIik7CiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X2ZyZWVfbmV0ZGV2XzI7CiAJfQogCisJLyogYXNzdW1lIHN0YW5kYXJkLCBub24tc2hpZnRlZCwgYWNjZXNzIHRvIEhXIHJlZ2lzdGVycyAqLworCXBkYXRhLT5vcHMgPSAmc3RhbmRhcmRfc21zYzkxMXhfb3BzOworCS8qIGFwcGx5IHRoZSByaWdodCBhY2Nlc3MgaWYgc2hpZnRpbmcgaXMgbmVlZGVkICovCisJaWYgKGNvbmZpZy0+c2hpZnQpCisJCXBkYXRhLT5vcHMgPSAmc2hpZnRlZF9zbXNjOTExeF9vcHM7CisKIAlyZXR2YWwgPSBzbXNjOTExeF9pbml0KGRldik7CiAJaWYgKHJldHZhbCA8IDApCiAJCWdvdG8gb3V0X3VubWFwX2lvXzM7CkBAIC0yMDQ3LDggKzIxODgsOCBAQAogCXJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBzbXNjOTExeF9pcnFoYW5kbGVyLAogCQkJICAgICBpcnFfZmxhZ3MgfCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChyZXR2YWwpIHsKLQkJU01TQ19XQVJOSU5HKFBST0JFLAotCQkJIlVuYWJsZSB0byBjbGFpbSByZXF1ZXN0ZWQgaXJxOiAlZCIsIGRldi0+aXJxKTsKKwkJU01TQ19XQVJOKHBkYXRhLCBwcm9iZSwKKwkJCSAgIlVuYWJsZSB0byBjbGFpbSByZXF1ZXN0ZWQgaXJxOiAlZCIsIGRldi0+aXJxKTsKIAkJZ290byBvdXRfdW5tYXBfaW9fMzsKIAl9CiAKQEAgLTIwNTYsMTcgKzIxOTcsMTYgQEAKIAogCXJldHZhbCA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChyZXR2YWwpIHsKLQkJU01TQ19XQVJOSU5HKFBST0JFLAotCQkJIkVycm9yICVpIHJlZ2lzdGVyaW5nIGRldmljZSIsIHJldHZhbCk7CisJCVNNU0NfV0FSTihwZGF0YSwgcHJvYmUsICJFcnJvciAlaSByZWdpc3RlcmluZyBkZXZpY2UiLCByZXR2YWwpOwogCQlnb3RvIG91dF91bnNldF9kcnZkYXRhXzQ7CiAJfSBlbHNlIHsKLQkJU01TQ19UUkFDRShQUk9CRSwgIk5ldHdvcmsgaW50ZXJmYWNlOiBcIiVzXCIiLCBkZXYtPm5hbWUpOworCQlTTVNDX1RSQUNFKHBkYXRhLCBwcm9iZSwKKwkJCSAgICJOZXR3b3JrIGludGVyZmFjZTogXCIlc1wiIiwgZGV2LT5uYW1lKTsKIAl9CiAKIAlyZXR2YWwgPSBzbXNjOTExeF9taWlfaW5pdChwZGV2LCBkZXYpOwogCWlmIChyZXR2YWwpIHsKLQkJU01TQ19XQVJOSU5HKFBST0JFLAotCQkJIkVycm9yICVpIGluaXRpYWxpc2luZyBtaWkiLCByZXR2YWwpOworCQlTTVNDX1dBUk4ocGRhdGEsIHByb2JlLCAiRXJyb3IgJWkgaW5pdGlhbGlzaW5nIG1paSIsIHJldHZhbCk7CiAJCWdvdG8gb3V0X3VucmVnaXN0ZXJfbmV0ZGV2XzU7CiAJfQogCkBAIC0yMDc1LDEwICsyMjE1LDEyIEBACiAJLyogQ2hlY2sgaWYgbWFjIGFkZHJlc3MgaGFzIGJlZW4gc3BlY2lmaWVkIHdoZW4gYnJpbmdpbmcgaW50ZXJmYWNlIHVwICovCiAJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcikpIHsKIAkJc21zYzkxMXhfc2V0X2h3X21hY19hZGRyZXNzKHBkYXRhLCBkZXYtPmRldl9hZGRyKTsKLQkJU01TQ19UUkFDRShQUk9CRSwgIk1BQyBBZGRyZXNzIGlzIHNwZWNpZmllZCBieSBjb25maWd1cmF0aW9uIik7CisJCVNNU0NfVFJBQ0UocGRhdGEsIHByb2JlLAorCQkJICAgIk1BQyBBZGRyZXNzIGlzIHNwZWNpZmllZCBieSBjb25maWd1cmF0aW9uIik7CiAJfSBlbHNlIGlmIChpc192YWxpZF9ldGhlcl9hZGRyKHBkYXRhLT5jb25maWcubWFjKSkgewogCQltZW1jcHkoZGV2LT5kZXZfYWRkciwgcGRhdGEtPmNvbmZpZy5tYWMsIDYpOwotCQlTTVNDX1RSQUNFKFBST0JFLCAiTUFDIEFkZHJlc3Mgc3BlY2lmaWVkIGJ5IHBsYXRmb3JtIGRhdGEiKTsKKwkJU01TQ19UUkFDRShwZGF0YSwgcHJvYmUsCisJCQkgICAiTUFDIEFkZHJlc3Mgc3BlY2lmaWVkIGJ5IHBsYXRmb3JtIGRhdGEiKTsKIAl9IGVsc2UgewogCQkvKiBUcnkgcmVhZGluZyBtYWMgYWRkcmVzcyBmcm9tIGRldmljZS4gaWYgRUVQUk9NIGlzIHByZXNlbnQKIAkJICogaXQgd2lsbCBhbHJlYWR5IGhhdmUgYmVlbiBzZXQgKi8KQEAgLTIwODYsMjAgKzIyMjgsMjAgQEAKIAogCQlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKSkgewogCQkJLyogZWVwcm9tIHZhbHVlcyBhcmUgdmFsaWQgIHNvIHVzZSB0aGVtICovCi0JCQlTTVNDX1RSQUNFKFBST0JFLAotCQkJCSJNYWMgQWRkcmVzcyBpcyByZWFkIGZyb20gTEFOOTExeCBFRVBST00iKTsKKwkJCVNNU0NfVFJBQ0UocGRhdGEsIHByb2JlLAorCQkJCSAgICJNYWMgQWRkcmVzcyBpcyByZWFkIGZyb20gTEFOOTExeCBFRVBST00iKTsKIAkJfSBlbHNlIHsKIAkJCS8qIGVlcHJvbSB2YWx1ZXMgYXJlIGludmFsaWQsIGdlbmVyYXRlIHJhbmRvbSBNQUMgKi8KIAkJCXJhbmRvbV9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpOwogCQkJc21zYzkxMXhfc2V0X2h3X21hY19hZGRyZXNzKHBkYXRhLCBkZXYtPmRldl9hZGRyKTsKLQkJCVNNU0NfVFJBQ0UoUFJPQkUsCi0JCQkJIk1BQyBBZGRyZXNzIGlzIHNldCB0byByYW5kb21fZXRoZXJfYWRkciIpOworCQkJU01TQ19UUkFDRShwZGF0YSwgcHJvYmUsCisJCQkJICAgIk1BQyBBZGRyZXNzIGlzIHNldCB0byByYW5kb21fZXRoZXJfYWRkciIpOwogCQl9CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxKCZwZGF0YS0+bWFjX2xvY2spOwogCi0JZGV2X2luZm8oJmRldi0+ZGV2LCAiTUFDIEFkZHJlc3M6ICVwTVxuIiwgZGV2LT5kZXZfYWRkcik7CisJbmV0ZGV2X2luZm8oZGV2LCAiTUFDIEFkZHJlc3M6ICVwTVxuIiwgZGV2LT5kZXZfYWRkcik7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21zYzkxMXguaCBiL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmgKaW5kZXggNTBmNzEyZS4uOGQ2N2FhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21zYzkxMXguaAorKysgYi9kcml2ZXJzL25ldC9zbXNjOTExeC5oCkBAIC0zMywyNSArMzMsMjEgQEAKICAqIGNhbiBiZSBzdWNjZXNzZnVsbHkgbG9vcGVkIGJhY2sgKi8KICNkZWZpbmUgVVNFX1BIWV9XT1JLX0FST1VORAogCi0jZGVmaW5lIERQUklOVEsobmxldmVsLCBrbGV2ZWwsIGZtdCwgYXJncy4uLikgXAotCSgodm9pZCkoKE5FVElGX01TR18jI25sZXZlbCAmIHBkYXRhLT5tc2dfZW5hYmxlKSAmJiBcCi0JcHJpbnRrKEtFUk5fIyNrbGV2ZWwgIiVzOiAlczogIiBmbXQgIlxuIiwgXAotCXBkYXRhLT5kZXYtPm5hbWUsIF9fZnVuY19fLCAjIyBhcmdzKSkpCi0KICNpZiBVU0VfREVCVUcgPj0gMQotI2RlZmluZSBTTVNDX1dBUk5JTkcobmxldmVsLCBmbXQsIGFyZ3MuLi4pIFwKLQlEUFJJTlRLKG5sZXZlbCwgV0FSTklORywgZm10LCAjIyBhcmdzKQorI2RlZmluZSBTTVNDX1dBUk4ocGRhdGEsIG5sZXZlbCwgZm10LCBhcmdzLi4uKQkJCVwKKwluZXRpZl93YXJuKHBkYXRhLCBubGV2ZWwsIChwZGF0YSktPmRldiwJCQlcCisJCSAgICIlczogIiBmbXQgIlxuIiwgX19mdW5jX18sICMjYXJncykKICNlbHNlCi0jZGVmaW5lIFNNU0NfV0FSTklORyhubGV2ZWwsIGZtdCwgYXJncy4uLikgXAotCSh7IGRvIHt9IHdoaWxlICgwKTsgMDsgfSkKKyNkZWZpbmUgU01TQ19XQVJOKHBkYXRhLCBubGV2ZWwsIGZtdCwgYXJncy4uLikJCQlcCisJbm9fcHJpbnRrKGZtdCAiXG4iLCAjI2FyZ3MpCiAjZW5kaWYKIAogI2lmIFVTRV9ERUJVRyA+PSAyCi0jZGVmaW5lIFNNU0NfVFJBQ0UobmxldmVsLCBmbXQsIGFyZ3MuLi4pIFwKLQlEUFJJTlRLKG5sZXZlbCwgSU5GTywgZm10LCAjIyBhcmdzKQorI2RlZmluZSBTTVNDX1RSQUNFKHBkYXRhLCBubGV2ZWwsIGZtdCwgYXJncy4uLikJCQlcCisJbmV0aWZfaW5mbyhwZGF0YSwgbmxldmVsLCBwZGF0YS0+ZGV2LCBmbXQgIlxuIiwgIyNhcmdzKQogI2Vsc2UKLSNkZWZpbmUgU01TQ19UUkFDRShubGV2ZWwsIGZtdCwgYXJncy4uLikgXAotCSh7IGRvIHt9IHdoaWxlICgwKTsgMDsgfSkKKyNkZWZpbmUgU01TQ19UUkFDRShwZGF0YSwgbmxldmVsLCBmbXQsIGFyZ3MuLi4pCQkJXAorCW5vX3ByaW50ayhmbXQgIlxuIiwgIyNhcmdzKQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0sKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYyBiL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYwppbmRleCBjYjZiY2NhLi45NDlmMTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCkBAIC05OTQsMTUgKzk5NCwxMyBAQAogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldGRldik7CiAKIAkvKiBjaGVja3N1bSBvZmZsb2FkICovCi0JaWYgKGNhcmQtPm9wdGlvbnMucnhfY3N1bSkgeworCXNrYl9jaGVja3N1bV9ub25lX2Fzc2VydChza2IpOworCWlmIChuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pIHsKIAkJaWYgKCAoIChkYXRhX3N0YXR1cyAmIFNQSURFUl9ORVRfREFUQV9TVEFUVVNfQ0tTVU1fTUFTSykgPT0KIAkJICAgICAgIFNQSURFUl9ORVRfREFUQV9TVEFUVVNfQ0tTVU1fTUFTSykgJiYKIAkJICAgICAhKGRhdGFfZXJyb3IgJiBTUElERVJfTkVUX0RBVEFfRVJSX0NLU1VNX01BU0spKQogCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQkJZWxzZQotCQkJc2tiX2NoZWNrc3VtX25vbmVfYXNzZXJ0KHNrYik7Ci0JfSBlbHNlCi0JCXNrYl9jaGVja3N1bV9ub25lX2Fzc2VydChza2IpOworCX0KIAogCWlmIChkYXRhX3N0YXR1cyAmIFNQSURFUl9ORVRfVkxBTl9QQUNLRVQpIHsKIAkJLyogZnVydGhlciBlbmhhbmNlbWVudHM6IEhXLWFjY2VsIFZMQU4KQEAgLTIzMjIsMTQgKzIzMjAsMTUgQEAKIAljYXJkLT5hbmVnX3RpbWVyLmZ1bmN0aW9uID0gc3BpZGVyX25ldF9saW5rX3BoeTsKIAljYXJkLT5hbmVnX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgY2FyZDsKIAotCWNhcmQtPm9wdGlvbnMucnhfY3N1bSA9IFNQSURFUl9ORVRfUlhfQ1NVTV9ERUZBVUxUOwotCiAJbmV0aWZfbmFwaV9hZGQobmV0ZGV2LCAmY2FyZC0+bmFwaSwKIAkJICAgICAgIHNwaWRlcl9uZXRfcG9sbCwgU1BJREVSX05FVF9OQVBJX1dFSUdIVCk7CiAKIAlzcGlkZXJfbmV0X3NldHVwX25ldGRldl9vcHMobmV0ZGV2KTsKIAotCW5ldGRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0xMVFg7CisJbmV0ZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfUlhDU1VNIHwgTkVUSUZfRl9JUF9DU1VNOworCWlmIChTUElERVJfTkVUX1JYX0NTVU1fREVGQVVMVCkKKwkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1JYQ1NVTTsKKwluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfTExUWDsKIAkvKiBzb21lIHRpbWU6IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWCB8CiAJICoJCU5FVElGX0ZfSFdfVkxBTl9GSUxURVIgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5oIGIvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5oCmluZGV4IDA1Zjc0Y2IuLjAyMGY2NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuaAorKysgYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmgKQEAgLTQyOSwxMiArNDI5LDYgQEAKICAqIDcwMWI4MDAwIHdvdWxkIGJlIGNvcnJlY3QsIGJ1dCBldmVyeSBwYWNrZXRzIGdldHMgdGhhdCBmbGFnICovCiAjZGVmaW5lIFNQSURFUl9ORVRfREVTVFJPWV9SWF9GTEFHUwkweDcwMGI4MDAwCiAKLS8qIHRoaXMgd2lsbCBiZSBiaWdnZXIgc29tZSB0aW1lICovCi1zdHJ1Y3Qgc3BpZGVyX25ldF9vcHRpb25zIHsKLQlpbnQgcnhfY3N1bTsgLyogZm9yIHJ4OiBpZiAwIGlwX3N1bW1lZD1OT05FLAotCQkJaWYgMSBhbmQgaHcgaGFzIHZlcmlmaWVkLCBpcF9zdW1tZWQ9VU5ORUNFU1NBUlkgKi8KLX07Ci0KICNkZWZpbmUgU1BJREVSX05FVF9ERUZBVUxUX01TRwkJKCBORVRJRl9NU0dfRFJWIHwgXAogCQkJCQkgIE5FVElGX01TR19QUk9CRSB8IFwKIAkJCQkJICBORVRJRl9NU0dfTElOSyB8IFwKQEAgLTQ4Nyw3ICs0ODEsNiBAQAogCS8qIGZvciBldGh0b29sICovCiAJaW50IG1zZ19lbmFibGU7CiAJc3RydWN0IHNwaWRlcl9uZXRfZXh0cmFfc3RhdHMgc3BpZGVyX3N0YXRzOwotCXN0cnVjdCBzcGlkZXJfbmV0X29wdGlvbnMgb3B0aW9uczsKIAogCS8qIE11c3QgYmUgbGFzdCBpdGVtIGluIHN0cnVjdCAqLwogCXN0cnVjdCBzcGlkZXJfbmV0X2Rlc2NyIGRhcnJheVswXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXRfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvc3BpZGVyX25ldF9ldGh0b29sLmMKaW5kZXggNWJhZTcyOC4uOWMyODhjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldF9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvc3BpZGVyX25ldF9ldGh0b29sLmMKQEAgLTU4LDcgKzU4LDcgQEAKIAljbWQtPmFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwgfAogCQkJICAgICBBRFZFUlRJU0VEX0ZJQlJFKTsKIAljbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOwotCWNtZC0+c3BlZWQgPSBjYXJkLT5waHkuc3BlZWQ7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgY2FyZC0+cGh5LnNwZWVkKTsKIAljbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOwogCiAJcmV0dXJuIDA7CkBAIC0xMTUsMjQgKzExNSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MzIKLXNwaWRlcl9uZXRfZXRodG9vbF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXN0cnVjdCBzcGlkZXJfbmV0X2NhcmQgKmNhcmQgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0JcmV0dXJuIGNhcmQtPm9wdGlvbnMucnhfY3N1bTsKLX0KLQotc3RhdGljIGludAotc3BpZGVyX25ldF9ldGh0b29sX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBuKQotewotCXN0cnVjdCBzcGlkZXJfbmV0X2NhcmQgKmNhcmQgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0JY2FyZC0+b3B0aW9ucy5yeF9jc3VtID0gbjsKLQlyZXR1cm4gMDsKLX0KLQotCiBzdGF0aWMgdm9pZAogc3BpZGVyX25ldF9ldGh0b29sX2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCQkgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICplcmluZykKQEAgLTE4OSw5ICsxNzEsNiBAQAogCS5zZXRfbXNnbGV2ZWwJCT0gc3BpZGVyX25ldF9ldGh0b29sX3NldF9tc2dsZXZlbCwKIAkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKIAkubndheV9yZXNldAkJPSBzcGlkZXJfbmV0X2V0aHRvb2xfbndheV9yZXNldCwKLQkuZ2V0X3J4X2NzdW0JCT0gc3BpZGVyX25ldF9ldGh0b29sX2dldF9yeF9jc3VtLAotCS5zZXRfcnhfY3N1bQkJPSBzcGlkZXJfbmV0X2V0aHRvb2xfc2V0X3J4X2NzdW0sCi0JLnNldF90eF9jc3VtCQk9IGV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0sCiAJLmdldF9yaW5ncGFyYW0gICAgICAgICAgPSBzcGlkZXJfbmV0X2V0aHRvb2xfZ2V0X3JpbmdwYXJhbSwKIAkuZ2V0X3N0cmluZ3MJCT0gc3BpZGVyX25ldF9nZXRfc3RyaW5ncywKIAkuZ2V0X3NzZXRfY291bnQJCT0gc3BpZGVyX25ldF9nZXRfc3NldF9jb3VudCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9kd21hYzEwMDBfY29yZS5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjMTAwMF9jb3JlLmMKaW5kZXggNmFlNGMzZi4uZjIwNDU1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjMTAwMF9jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjMTAwMF9jb3JlLmMKQEAgLTE3OCwxMCArMTc4LDExIEBACiB7CiAJdW5zaWduZWQgaW50IHBtdCA9IDA7CiAKLQlpZiAobW9kZSA9PSBXQUtFX01BR0lDKSB7CisJaWYgKG1vZGUgJiBXQUtFX01BR0lDKSB7CiAJCUNISVBfREJHKEtFUk5fREVCVUcgIkdNQUM6IFdPTCBNYWdpYyBmcmFtZVxuIik7CiAJCXBtdCB8PSBwb3dlcl9kb3duIHwgbWFnaWNfcGt0X2VuOwotCX0gZWxzZSBpZiAobW9kZSA9PSBXQUtFX1VDQVNUKSB7CisJfQorCWlmIChtb2RlICYgV0FLRV9VQ0FTVCkgewogCQlDSElQX0RCRyhLRVJOX0RFQlVHICJHTUFDOiBXT0wgb24gZ2xvYmFsIHVuaWNhc3RcbiIpOwogCQlwbXQgfD0gZ2xvYmFsX3VuaWNhc3Q7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hYy5oIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hYy5oCmluZGV4IDVmMDZjNDcuLjJiMDc2YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWMuaAorKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjLmgKQEAgLTIxLDcgKzIxLDYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSJOb3ZfMjAxMCIKLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zdG1tYWMuaD4KIAogI2luY2x1ZGUgImNvbW1vbi5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYwppbmRleCBmZDcxOWVkLi5hZTUyMTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYwpAQCAtMTk3LDEzICsxOTcsNiBAQAogCX0KIH0KIAotc3RhdGljIHUzMiBzdG1tYWNfZXRodG9vbF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlyZXR1cm4gcHJpdi0+cnhfY29lOwotfQotCiBzdGF0aWMgdm9pZAogc3RtbWFjX2dldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCSAgICAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBhdXNlKQpAQCAtMjQxLDIwICsyMzQsMTEgQEAKIAkJbmV3X3BhdXNlIHw9IEZMT1dfVFg7CiAKIAlwcml2LT5mbG93X2N0cmwgPSBuZXdfcGF1c2U7CisJcGh5LT5hdXRvbmVnID0gcGF1c2UtPmF1dG9uZWc7CiAKIAlpZiAocGh5LT5hdXRvbmVnKSB7Ci0JCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKLQkJCXN0cnVjdCBldGh0b29sX2NtZCBjbWQ7Ci0JCQkvKiBhdXRvLW5lZ290aWF0aW9uIGF1dG9tYXRpY2FsbHkgcmVzdGFydGVkICovCi0JCQljbWQuY21kID0gRVRIVE9PTF9OV0FZX1JTVDsKLQkJCWNtZC5zdXBwb3J0ZWQgPSBwaHktPnN1cHBvcnRlZDsKLQkJCWNtZC5hZHZlcnRpc2luZyA9IHBoeS0+YWR2ZXJ0aXNpbmc7Ci0JCQljbWQuYXV0b25lZyA9IHBoeS0+YXV0b25lZzsKLQkJCWNtZC5zcGVlZCA9IHBoeS0+c3BlZWQ7Ci0JCQljbWQuZHVwbGV4ID0gcGh5LT5kdXBsZXg7Ci0JCQljbWQucGh5X2FkZHJlc3MgPSBwaHktPmFkZHI7Ci0JCQlyZXQgPSBwaHlfZXRodG9vbF9zc2V0KHBoeSwgJmNtZCk7Ci0JCX0KKwkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJCXJldCA9IHBoeV9zdGFydF9hbmVnKHBoeSk7CiAJfSBlbHNlCiAJCXByaXYtPmh3LT5tYWMtPmZsb3dfY3RybChwcml2LT5pb2FkZHIsIHBoeS0+ZHVwbGV4LAogCQkJCQkgcHJpdi0+Zmxvd19jdHJsLCBwcml2LT5wYXVzZSk7CkBAIC0zMTUsNyArMjk5LDcgQEAKIAogCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCWlmIChkZXZpY2VfY2FuX3dha2V1cChwcml2LT5kZXZpY2UpKSB7Ci0JCXdvbC0+c3VwcG9ydGVkID0gV0FLRV9NQUdJQzsKKwkJd29sLT5zdXBwb3J0ZWQgPSBXQUtFX01BR0lDIHwgV0FLRV9VQ0FTVDsKIAkJd29sLT53b2xvcHRzID0gcHJpdi0+d29sb3B0czsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKQEAgLTMyNCw3ICszMDgsNyBAQAogc3RhdGljIGludCBzdG1tYWNfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCiB7CiAJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1MzIgc3VwcG9ydCA9IFdBS0VfTUFHSUM7CisJdTMyIHN1cHBvcnQgPSBXQUtFX01BR0lDIHwgV0FLRV9VQ0FTVDsKIAogCWlmICghZGV2aWNlX2Nhbl93YWtldXAocHJpdi0+ZGV2aWNlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zNTgsMTEgKzM0Miw2IEBACiAJLmdldF9yZWdzID0gc3RtbWFjX2V0aHRvb2xfZ3JlZ3MsCiAJLmdldF9yZWdzX2xlbiA9IHN0bW1hY19ldGh0b29sX2dldF9yZWdzX2xlbiwKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAotCS5nZXRfcnhfY3N1bSA9IHN0bW1hY19ldGh0b29sX2dldF9yeF9jc3VtLAotCS5nZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCi0JLnNldF90eF9jc3VtID0gZXRodG9vbF9vcF9zZXRfdHhfaXB2Nl9jc3VtLAotCS5nZXRfc2cgPSBldGh0b29sX29wX2dldF9zZywKLQkuc2V0X3NnID0gZXRodG9vbF9vcF9zZXRfc2csCiAJLmdldF9wYXVzZXBhcmFtID0gc3RtbWFjX2dldF9wYXVzZXBhcmFtLAogCS5zZXRfcGF1c2VwYXJhbSA9IHN0bW1hY19zZXRfcGF1c2VwYXJhbSwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBzdG1tYWNfZ2V0X2V0aHRvb2xfc3RhdHMsCkBAIC0zNzAsOCArMzQ5LDYgQEAKIAkuZ2V0X3dvbCA9IHN0bW1hY19nZXRfd29sLAogCS5zZXRfd29sID0gc3RtbWFjX3NldF93b2wsCiAJLmdldF9zc2V0X2NvdW50CT0gc3RtbWFjX2dldF9zc2V0X2NvdW50LAotCS5nZXRfdHNvID0gZXRodG9vbF9vcF9nZXRfdHNvLAotCS5zZXRfdHNvID0gZXRodG9vbF9vcF9zZXRfdHNvLAogfTsKIAogdm9pZCBzdG1tYWNfc2V0X2V0aHRvb2xfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jCmluZGV4IGNjOTczZmMuLmUyNWU0NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSAic3RtbWFjLmgiCiAKICNkZWZpbmUgU1RNTUFDX1JFU09VUkNFX05BTUUJInN0bW1hY2V0aCIKQEAgLTExNiw5ICsxMTcsNiBAQAogbW9kdWxlX3BhcmFtKHRjLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0ModGMsICJETUEgdGhyZXNob2xkIGNvbnRyb2wgdmFsdWUiKTsKIAotI2RlZmluZSBSWF9OT19DT0FMRVNDRQkxCS8qIEFsd2F5cyBpbnRlcnJ1cHQgb24gY29tcGxldGlvbiAqLwotI2RlZmluZSBUWF9OT19DT0FMRVNDRQktMQkvKiBObyBtb2RlcmF0aW9uIGJ5IGRlZmF1bHQgKi8KLQogLyogUGF5IGF0dGVudGlvbiB0byB0dW5lIHRoaXMgcGFyYW1ldGVyOyB0YWtlIGNhcmUgb2YgYm90aAogICogaGFyZHdhcmUgY2FwYWJpbGl0eSBhbmQgbmV0d29yayBzdGFiaXRpbHkvcGVyZm9ybWFuY2UgaW1wYWN0LgogICogTWFueSB0ZXN0cyBzaG93ZWQgdGhhdCB+NG1zIGxhdGVuY3kgc2VlbXMgdG8gYmUgZ29vZCBlbm91Z2guICovCkBAIC0xMzksNyArMTM3LDYgQEAKIAkJCQkgICAgICBORVRJRl9NU0dfSUZET1dOIHwgTkVUSUZfTVNHX1RJTUVSKTsKIAogc3RhdGljIGlycXJldHVybl90IHN0bW1hY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKLXN0YXRpYyBuZXRkZXZfdHhfdCBzdG1tYWNfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogLyoqCiAgKiBzdG1tYWNfdmVyaWZ5X2FyZ3MgLSB2ZXJpZnkgdGhlIGRyaXZlciBwYXJhbWV0ZXJzLgpAQCAtODMxLDYgKzgyOCw3IEBACiAJCXByX2luZm8oInN0bW1hYzogUnggQ2hlY2tzdW0gT2ZmbG9hZCBFbmdpbmUgc3VwcG9ydGVkXG4iKTsKIAlpZiAocHJpdi0+cGxhdC0+dHhfY29lKQogCQlwcl9pbmZvKCJcdFRYIENoZWNrc3VtIGluc2VydGlvbiBzdXBwb3J0ZWRcbiIpOworCW5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTsKIAogCS8qIEluaXRpYWxpc2UgdGhlIE1NQyAoaWYgcHJlc2VudCkgdG8gZGlzYWJsZSBhbGwgaW50ZXJydXB0cy4gKi8KIAl3cml0ZWwoMHhmZmZmZmZmZiwgcHJpdi0+aW9hZGRyICsgTU1DX0hJR0hfSU5UUl9NQVNLKTsKQEAgLTkzNCw0NiArOTMyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFRvIHBlcmZvcm0gZW11bGF0ZWQgaGFyZHdhcmUgc2VnbWVudGF0aW9uIG9uIHNrYi4KLSAqLwotc3RhdGljIGludCBzdG1tYWNfc3dfdHNvKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2VncywgKmN1cnJfc2tiOwotCWludCBnc29fc2VncyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3M7Ci0KLQkvKiBFc3RpbWF0ZSB0aGUgbnVtYmVyIG9mIGZyYWdtZW50cyBpbiB0aGUgd29yc3QgY2FzZSAqLwotCWlmICh1bmxpa2VseShzdG1tYWNfdHhfYXZhaWwocHJpdikgPCBnc29fc2VncykpIHsKLQkJbmV0aWZfc3RvcF9xdWV1ZShwcml2LT5kZXYpOwotCQlUWF9EQkcoS0VSTl9FUlIgIiVzOiBUU08gQlVHISBUeCBSaW5nIGZ1bGwgd2hlbiBxdWV1ZSBhd2FrZVxuIiwKLQkJICAgICAgIF9fZnVuY19fKTsKLQkJaWYgKHN0bW1hY190eF9hdmFpbChwcml2KSA8IGdzb19zZWdzKQotCQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwotCi0JCW5ldGlmX3dha2VfcXVldWUocHJpdi0+ZGV2KTsKLQl9Ci0JVFhfREJHKCJcdHN0bW1hY19zd190c286IHNlZ21lbnRpbmc6IHNrYiAlcCAobGVuICVkKVxuIiwKLQkgICAgICAgc2tiLCBza2ItPmxlbik7Ci0KLQlzZWdzID0gc2tiX2dzb19zZWdtZW50KHNrYiwgcHJpdi0+ZGV2LT5mZWF0dXJlcyAmIH5ORVRJRl9GX1RTTyk7Ci0JaWYgKElTX0VSUihzZWdzKSkKLQkJZ290byBzd190c29fZW5kOwotCi0JZG8gewotCQljdXJyX3NrYiA9IHNlZ3M7Ci0JCXNlZ3MgPSBzZWdzLT5uZXh0OwotCQlUWF9EQkcoIlx0XHRjdXJyZW50IHNrYi0+bGVuOiAlZCwgKmN1cnIgJXAsIgotCQkgICAgICAgIipuZXh0ICVwXG4iLCBjdXJyX3NrYi0+bGVuLCBjdXJyX3NrYiwgc2Vncyk7Ci0JCWN1cnJfc2tiLT5uZXh0ID0gTlVMTDsKLQkJc3RtbWFjX3htaXQoY3Vycl9za2IsIHByaXYtPmRldik7Ci0JfSB3aGlsZSAoc2Vncyk7Ci0KLXN3X3Rzb19lbmQ6Ci0JZGV2X2tmcmVlX3NrYihza2IpOwotCi0JcmV0dXJuIE5FVERFVl9UWF9PSzsKLX0KLQogc3RhdGljIHVuc2lnbmVkIGludCBzdG1tYWNfaGFuZGxlX2p1bWJvX2ZyYW1lcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJICAgICAgIGludCBjc3VtX2luc2VydGlvbikKQEAgLTEwNTEsMTYgKzEwMDksNyBAQAogCQkgICAgICAgIXNrYl9pc19nc28oc2tiKSA/ICJpc24ndCIgOiAiaXMiKTsKICNlbmRpZgogCi0JaWYgKHVubGlrZWx5KHNrYl9pc19nc28oc2tiKSkpCi0JCXJldHVybiBzdG1tYWNfc3dfdHNvKHByaXYsIHNrYik7Ci0KLQlpZiAobGlrZWx5KChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSkpIHsKLQkJaWYgKHVubGlrZWx5KCghcHJpdi0+cGxhdC0+dHhfY29lKSB8fAotCQkJICAgICAocHJpdi0+bm9fY3N1bV9pbnNlcnRpb24pKSkKLQkJCXNrYl9jaGVja3N1bV9oZWxwKHNrYik7Ci0JCWVsc2UKLQkJCWNzdW1faW5zZXJ0aW9uID0gMTsKLQl9CisJY3N1bV9pbnNlcnRpb24gPSAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCk7CiAKIAlkZXNjID0gcHJpdi0+ZG1hX3R4ICsgZW50cnk7CiAJZmlyc3QgPSBkZXNjOwpAQCAtMTM4MCwxOCArMTMyOSwyOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlkZXYtPm10dSA9IG5ld19tdHU7CisJbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgc3RtbWFjX2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpCit7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmICghcHJpdi0+cnhfY29lKQorCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9SWENTVU07CisJaWYgKCFwcml2LT5wbGF0LT50eF9jb2UpCisJCWZlYXR1cmVzICY9IH5ORVRJRl9GX0FMTF9DU1VNOworCiAJLyogU29tZSBHTUFDIGRldmljZXMgaGF2ZSBhIGJ1Z2dlZCBKdW1ibyBmcmFtZSBzdXBwb3J0IHRoYXQKIAkgKiBuZWVkcyB0byBoYXZlIHRoZSBUeCBDT0UgZGlzYWJsZWQgZm9yIG92ZXJzaXplZCBmcmFtZXMKIAkgKiAoZHVlIHRvIGxpbWl0ZWQgYnVmZmVyIHNpemVzKS4gSW4gdGhpcyBjYXNlIHdlIGRpc2FibGUKIAkgKiB0aGUgVFggY3N1bSBpbnNlcnRpb25pbiB0aGUgVERFUyBhbmQgbm90IHVzZSBTRi4gKi8KLQlpZiAoKHByaXYtPnBsYXQtPmJ1Z2dlZF9qdW1ibykgJiYgKHByaXYtPmRldi0+bXR1ID4gRVRIX0RBVEFfTEVOKSkKLQkJcHJpdi0+bm9fY3N1bV9pbnNlcnRpb24gPSAxOwotCWVsc2UKLQkJcHJpdi0+bm9fY3N1bV9pbnNlcnRpb24gPSAwOworCWlmIChwcml2LT5wbGF0LT5idWdnZWRfanVtYm8gJiYgKGRldi0+bXR1ID4gRVRIX0RBVEFfTEVOKSkKKwkJZmVhdHVyZXMgJj0gfk5FVElGX0ZfQUxMX0NTVU07CiAKLQlkZXYtPm10dSA9IG5ld19tdHU7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gZmVhdHVyZXM7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBzdG1tYWNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKQEAgLTE0NzEsNiArMTQzMSw3IEBACiAJLm5kb19zdGFydF94bWl0ID0gc3RtbWFjX3htaXQsCiAJLm5kb19zdG9wID0gc3RtbWFjX3JlbGVhc2UsCiAJLm5kb19jaGFuZ2VfbXR1ID0gc3RtbWFjX2NoYW5nZV9tdHUsCisJLm5kb19maXhfZmVhdHVyZXMgPSBzdG1tYWNfZml4X2ZlYXR1cmVzLAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc3RtbWFjX211bHRpY2FzdF9saXN0LAogCS5uZG9fdHhfdGltZW91dCA9IHN0bW1hY190eF90aW1lb3V0LAogCS5uZG9fZG9faW9jdGwgPSBzdG1tYWNfaW9jdGwsCkBAIC0xNTAxLDggKzE0NjIsOCBAQAogCWRldi0+bmV0ZGV2X29wcyA9ICZzdG1tYWNfbmV0ZGV2X29wczsKIAlzdG1tYWNfc2V0X2V0aHRvb2xfb3BzKGRldik7CiAKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0hJR0hETUEgfAotCQlORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTTsKKwlkZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNOworCWRldi0+ZmVhdHVyZXMgfD0gZGV2LT5od19mZWF0dXJlcyB8IE5FVElGX0ZfSElHSERNQTsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gbXNlY3NfdG9famlmZmllcyh3YXRjaGRvZyk7CiAjaWZkZWYgU1RNTUFDX1ZMQU5fVEFHX1VTRUQKIAkvKiBCb3RoIG1hYzEwMCBhbmQgZ21hYyBzdXBwb3J0IHJlY2VpdmUgVkxBTiB0YWcgZGV0ZWN0aW9uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5nZW0uYyBiL2RyaXZlcnMvbmV0L3N1bmdlbS5jCmluZGV4IGQzYmU3MzUuLmFiNTkzMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmdlbS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmdlbS5jCkBAIC0xMjk0LDcgKzEyOTQsNyBAQAogCQlhdXRvbmVnID0gMTsKIAl9IGVsc2UgewogCQlhdXRvbmVnID0gMDsKLQkJc3BlZWQgPSBlcC0+c3BlZWQ7CisJCXNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoZXApOwogCQlkdXBsZXggPSBlcC0+ZHVwbGV4OwogCX0KIApAQCAtMjY0Miw3ICsyNjQyLDcgQEAKIAkJLyogUmV0dXJuIGN1cnJlbnQgUEhZIHNldHRpbmdzICovCiAJCXNwaW5fbG9ja19pcnEoJmdwLT5sb2NrKTsKIAkJY21kLT5hdXRvbmVnID0gZ3AtPndhbnRfYXV0b25lZzsKLQkJY21kLT5zcGVlZCA9IGdwLT5waHlfbWlpLnNwZWVkOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBncC0+cGh5X21paS5zcGVlZCk7CiAJCWNtZC0+ZHVwbGV4ID0gZ3AtPnBoeV9taWkuZHVwbGV4OwogCQljbWQtPmFkdmVydGlzaW5nID0gZ3AtPnBoeV9taWkuYWR2ZXJ0aXNpbmc7CiAKQEAgLTI2NTksNyArMjY1OSw3IEBACiAJCQkgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfCBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCB8CiAJCQkgU1VQUE9SVEVEX0F1dG9uZWcpOwogCQljbWQtPmFkdmVydGlzaW5nID0gY21kLT5zdXBwb3J0ZWQ7Ci0JCWNtZC0+c3BlZWQgPSAwOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCAwKTsKIAkJY21kLT5kdXBsZXggPSBjbWQtPnBvcnQgPSBjbWQtPnBoeV9hZGRyZXNzID0KIAkJCWNtZC0+dHJhbnNjZWl2ZXIgPSBjbWQtPmF1dG9uZWcgPSAwOwogCkBAIC0yNjczLDcgKzI2NzMsNyBAQAogCQkJY21kLT5hZHZlcnRpc2luZyA9IGNtZC0+c3VwcG9ydGVkOwogCQkJY21kLT50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CiAJCQlpZiAoZ3AtPmxzdGF0ZSA9PSBsaW5rX3VwKQotCQkJCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDAwOworCQkJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIFNQRUVEXzEwMDApOwogCQkJY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKIAkJCWNtZC0+YXV0b25lZyA9IDE7CiAJCX0KQEAgLTI2ODYsNiArMjY4Niw3IEBACiBzdGF0aWMgaW50IGdlbV9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7CiAJc3RydWN0IGdlbSAqZ3AgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiBzcGVlZCA9IGV0aHRvb2xfY21kX3NwZWVkKGNtZCk7CiAKIAkvKiBWZXJpZnkgdGhlIHNldHRpbmdzIHdlIGNhcmUgYWJvdXQuICovCiAJaWYgKGNtZC0+YXV0b25lZyAhPSBBVVRPTkVHX0VOQUJMRSAmJgpAQCAtMjY5Nyw5ICsyNjk4LDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSAmJgotCSAgICAoKGNtZC0+c3BlZWQgIT0gU1BFRURfMTAwMCAmJgotCSAgICAgIGNtZC0+c3BlZWQgIT0gU1BFRURfMTAwICYmCi0JICAgICAgY21kLT5zcGVlZCAhPSBTUEVFRF8xMCkgfHwKKwkgICAgKChzcGVlZCAhPSBTUEVFRF8xMDAwICYmCisJICAgICAgc3BlZWQgIT0gU1BFRURfMTAwICYmCisJICAgICAgc3BlZWQgIT0gU1BFRURfMTApIHx8CiAJICAgICAoY21kLT5kdXBsZXggIT0gRFVQTEVYX0hBTEYgJiYKIAkgICAgICBjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTMxNDYsNyArMzE0Nyw4IEBACiAJCQkgICAgZ3AtPnBoeV9taWkuZGVmID8gZ3AtPnBoeV9taWkuZGVmLT5uYW1lIDogIm5vIik7CiAKIAkvKiBHRU0gY2FuIGRvIGl0IGFsbC4uLiAqLwotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfTExUWDsKKwlkZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSFdfQ1NVTTsKKwlkZXYtPmZlYXR1cmVzIHw9IGRldi0+aHdfZmVhdHVyZXMgfCBORVRJRl9GX1JYQ1NVTSB8IE5FVElGX0ZfTExUWDsKIAlpZiAocGNpX3VzaW5nX2RhYykKIAkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmhtZS5jIGIvZHJpdmVycy9uZXQvc3VuaG1lLmMKaW5kZXggZWI0ZjU5Zi4uMzBhYWQ1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuaG1lLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuaG1lLmMKQEAgLTEzODMsNyArMTM4Myw3IEBACiAJCWlmIChlcCA9PSBOVUxMIHx8IGVwLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7CiAJCQlocC0+c3dfYm1jciA9IEJNQ1JfU1BFRUQxMDA7CiAJCX0gZWxzZSB7Ci0JCQlpZiAoZXAtPnNwZWVkID09IFNQRUVEXzEwMCkKKwkJCWlmIChldGh0b29sX2NtZF9zcGVlZChlcCkgPT0gU1BFRURfMTAwKQogCQkJCWhwLT5zd19ibWNyID0gQk1DUl9TUEVFRDEwMDsKIAkJCWVsc2UKIAkJCQlocC0+c3dfYm1jciA9IDA7CkBAIC0yNDAxLDYgKzI0MDEsNyBAQAogc3RhdGljIGludCBobWVfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewogCXN0cnVjdCBoYXBweV9tZWFsICpocCA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIHNwZWVkOwogCiAJY21kLT5zdXBwb3J0ZWQgPQogCQkoU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfApAQCAtMjQyMCwxMCArMjQyMSw5IEBACiAKIAlpZiAoaHAtPnN3X2JtY3IgJiBCTUNSX0FORU5BQkxFKSB7CiAJCWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOwotCQljbWQtPnNwZWVkID0KLQkJCShocC0+c3dfbHBhICYgKExQQV8xMDBIQUxGIHwgTFBBXzEwMEZVTEwpKSA/Ci0JCQlTUEVFRF8xMDAgOiBTUEVFRF8xMDsKLQkJaWYgKGNtZC0+c3BlZWQgPT0gU1BFRURfMTAwKQorCQlzcGVlZCA9ICgoaHAtPnN3X2xwYSAmIChMUEFfMTAwSEFMRiB8IExQQV8xMDBGVUxMKSkgPworCQkJIFNQRUVEXzEwMCA6IFNQRUVEXzEwKTsKKwkJaWYgKHNwZWVkID09IFNQRUVEXzEwMCkKIAkJCWNtZC0+ZHVwbGV4ID0KIAkJCQkoaHAtPnN3X2xwYSAmIChMUEFfMTAwRlVMTCkpID8KIAkJCQlEVVBMRVhfRlVMTCA6IERVUExFWF9IQUxGOwpAQCAtMjQzMywxMyArMjQzMywxMiBAQAogCQkJCURVUExFWF9GVUxMIDogRFVQTEVYX0hBTEY7CiAJfSBlbHNlIHsKIAkJY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOwotCQljbWQtPnNwZWVkID0KLQkJCShocC0+c3dfYm1jciAmIEJNQ1JfU1BFRUQxMDApID8KLQkJCVNQRUVEXzEwMCA6IFNQRUVEXzEwOworCQlzcGVlZCA9IChocC0+c3dfYm1jciAmIEJNQ1JfU1BFRUQxMDApID8gU1BFRURfMTAwIDogU1BFRURfMTA7CiAJCWNtZC0+ZHVwbGV4ID0KIAkJCShocC0+c3dfYm1jciAmIEJNQ1JfRlVMTERQTFgpID8KIAkJCURVUExFWF9GVUxMIDogRFVQTEVYX0hBTEY7CiAJfQorCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIHNwZWVkKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQ1Miw4ICsyNDUxLDggQEAKIAkgICAgY21kLT5hdXRvbmVnICE9IEFVVE9ORUdfRElTQUJMRSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUgJiYKLQkgICAgKChjbWQtPnNwZWVkICE9IFNQRUVEXzEwMCAmJgotCSAgICAgIGNtZC0+c3BlZWQgIT0gU1BFRURfMTApIHx8CisJICAgICgoZXRodG9vbF9jbWRfc3BlZWQoY21kKSAhPSBTUEVFRF8xMDAgJiYKKwkgICAgICBldGh0b29sX2NtZF9zcGVlZChjbWQpICE9IFNQRUVEXzEwKSB8fAogCSAgICAgKGNtZC0+ZHVwbGV4ICE9IERVUExFWF9IQUxGICYmCiAJICAgICAgY21kLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yNzg4LDcgKzI3ODcsOCBAQAogCWRldi0+ZXRodG9vbF9vcHMgPSAmaG1lX2V0aHRvb2xfb3BzOwogCiAJLyogSGFwcHkgTWVhbCBjYW4gZG8gaXQgYWxsLi4uICovCi0JZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9IV19DU1VNOworCWRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9IV19DU1VNOworCWRldi0+ZmVhdHVyZXMgfD0gZGV2LT5od19mZWF0dXJlcyB8IE5FVElGX0ZfUlhDU1VNOwogCiAJZGV2LT5pcnEgPSBvcC0+YXJjaGRhdGEuaXJxc1swXTsKIApAQCAtMzExMyw3ICszMTEzLDggQEAKIAlkZXYtPmRtYSA9IDA7CiAKIAkvKiBIYXBweSBNZWFsIGNhbiBkbyBpdCBhbGwuLi4gKi8KLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0hXX0NTVU07CisJZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0hXX0NTVU07CisJZGV2LT5mZWF0dXJlcyB8PSBkZXYtPmh3X2ZlYXR1cmVzIHwgTkVUSUZfRl9SWENTVU07CiAKICNpZiBkZWZpbmVkKENPTkZJR19TQlVTKSAmJiBkZWZpbmVkKENPTkZJR19QQ0kpCiAJLyogSG9vayB1cCBQQ0kgcmVnaXN0ZXIvZGVzY3JpcHRvciBhY2Nlc3NvcnMuICovCkBAIC0zMjM3LDE1ICszMjM4LDE4IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TQlVTCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBobWVfc2J1c19tYXRjaFtdOwogc3RhdGljIGludCBfX2RldmluaXQgaG1lX3NidXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3ApCiB7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CiAJc3RydWN0IGRldmljZV9ub2RlICpkcCA9IG9wLT5kZXYub2Zfbm9kZTsKIAljb25zdCBjaGFyICptb2RlbCA9IG9mX2dldF9wcm9wZXJ0eShkcCwgIm1vZGVsIiwgTlVMTCk7CiAJaW50IGlzX3FmZTsKIAotCWlmICghb3AtPmRldi5vZl9tYXRjaCkKKwltYXRjaCA9IG9mX21hdGNoX2RldmljZShobWVfc2J1c19tYXRjaCwgJm9wLT5kZXYpOworCWlmICghbWF0Y2gpCiAJCXJldHVybiAtRUlOVkFMOwotCWlzX3FmZSA9IChvcC0+ZGV2Lm9mX21hdGNoLT5kYXRhICE9IE5VTEwpOworCWlzX3FmZSA9IChtYXRjaC0+ZGF0YSAhPSBOVUxMKTsKIAogCWlmICghaXNfcWZlICYmIG1vZGVsICYmICFzdHJjbXAobW9kZWwsICJTVU5XLHNidXMtcWZlIikpCiAJCWlzX3FmZSA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90YzM1ODE1LmMgYi9kcml2ZXJzL25ldC90YzM1ODE1LmMKaW5kZXggN2NhNTFjZS4uNGE1NWExNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGMzNTgxNS5jCisrKyBiL2RyaXZlcnMvbmV0L3RjMzU4MTUuYwpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZWh1dGkuYyBiL2RyaXZlcnMvbmV0L3RlaHV0aS5jCmluZGV4IDg1NjRlYzUuLjgwZmJlZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RlaHV0aS5jCisrKyBiL2RyaXZlcnMvbmV0L3RlaHV0aS5jCkBAIC0yMDE3LDkgKzIwMTcsMTEgQEAKIAkJbmRldi0+aXJxID0gcGRldi0+aXJxOwogCQluZGV2LT5mZWF0dXJlcyA9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfU0cgfCBORVRJRl9GX1RTTwogCQkgICAgfCBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlggfAotCQkgICAgTkVUSUZfRl9IV19WTEFOX0ZJTFRFUgorCQkgICAgTkVUSUZfRl9IV19WTEFOX0ZJTFRFUiB8IE5FVElGX0ZfUlhDU1VNCiAJCSAgICAvKnwgTkVUSUZfRl9GUkFHTElTVCAqLwogCQkgICAgOworCQluZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfU0cgfAorCQkJTkVUSUZfRl9UU08gfCBORVRJRl9GX0hXX1ZMQU5fVFg7CiAKIAkJaWYgKHBjaV91c2luZ19kYWMpCiAJCQluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CkBAIC0yMTQ5LDcgKzIxNTEsNyBAQAogCiAJZWNtZC0+c3VwcG9ydGVkID0gKFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfCBTVVBQT1JURURfRklCUkUpOwogCWVjbWQtPmFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsIHwgQURWRVJUSVNFRF9GSUJSRSk7Ci0JZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDAwMDsKKwlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgU1BFRURfMTAwMDApOwogCWVjbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOwogCWVjbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOwogCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsJLyogd2hhdCBkb2VzIGl0IG1lYW4/ICovCkBAIC0yMTg4LDI0ICsyMTkwLDYgQEAKIH0KIAogLyoKLSAqIGJkeF9nZXRfcnhfY3N1bSAtIHJlcG9ydCB3aGV0aGVyIHJlY2VpdmUgY2hlY2tzdW1zIGFyZSB0dXJuZWQgb24gb3Igb2ZmCi0gKiBAbmV0ZGV2Ci0gKi8KLXN0YXRpYyB1MzIgYmR4X2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0JcmV0dXJuIDE7CQkvKiBhbHdheXMgb24gKi8KLX0KLQotLyoKLSAqIGJkeF9nZXRfdHhfY3N1bSAtIHJlcG9ydCB3aGV0aGVyIHRyYW5zbWl0IGNoZWNrc3VtcyBhcmUgdHVybmVkIG9uIG9yIG9mZgotICogQG5ldGRldgotICovCi1zdGF0aWMgdTMyIGJkeF9nZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXJldHVybiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSVBfQ1NVTSkgIT0gMDsKLX0KLQotLyoKICAqIGJkeF9nZXRfY29hbGVzY2UgLSBnZXQgaW50ZXJydXB0IGNvYWxlc2NpbmcgcGFyYW1ldGVycwogICogQG5ldGRldgogICogQGVjb2FsCkBAIC0yNDI0LDEwICsyNDA4LDYgQEAKIAkJLnNldF9jb2FsZXNjZSA9IGJkeF9zZXRfY29hbGVzY2UsCiAJCS5nZXRfcmluZ3BhcmFtID0gYmR4X2dldF9yaW5ncGFyYW0sCiAJCS5zZXRfcmluZ3BhcmFtID0gYmR4X3NldF9yaW5ncGFyYW0sCi0JCS5nZXRfcnhfY3N1bSA9IGJkeF9nZXRfcnhfY3N1bSwKLQkJLmdldF90eF9jc3VtID0gYmR4X2dldF90eF9jc3VtLAotCQkuZ2V0X3NnID0gZXRodG9vbF9vcF9nZXRfc2csCi0JCS5nZXRfdHNvID0gZXRodG9vbF9vcF9nZXRfdHNvLAogCQkuZ2V0X3N0cmluZ3MgPSBiZHhfZ2V0X3N0cmluZ3MsCiAJCS5nZXRfc3NldF9jb3VudCA9IGJkeF9nZXRfc3NldF9jb3VudCwKIAkJLmdldF9ldGh0b29sX3N0YXRzID0gYmR4X2dldF9ldGh0b29sX3N0YXRzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGczLmMgYi9kcml2ZXJzL25ldC90ZzMuYwppbmRleCBiOGM1ZjM1Li5kYjE5MzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZzMuYworKysgYi9kcml2ZXJzL25ldC90ZzMuYwpAQCAtNjIsMTIgKzYyLDM2IEBACiAKICNpbmNsdWRlICJ0ZzMuaCIKIAorLyogRnVuY3Rpb25zICYgbWFjcm9zIHRvIHZlcmlmeSBURzNfRkxBR1MgdHlwZXMgKi8KKworc3RhdGljIGlubGluZSBpbnQgX3RnM19mbGFnKGVudW0gVEczX0ZMQUdTIGZsYWcsIHVuc2lnbmVkIGxvbmcgKmJpdHMpCit7CisJcmV0dXJuIHRlc3RfYml0KGZsYWcsIGJpdHMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3RnM19mbGFnX3NldChlbnVtIFRHM19GTEFHUyBmbGFnLCB1bnNpZ25lZCBsb25nICpiaXRzKQoreworCXNldF9iaXQoZmxhZywgYml0cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfdGczX2ZsYWdfY2xlYXIoZW51bSBURzNfRkxBR1MgZmxhZywgdW5zaWduZWQgbG9uZyAqYml0cykKK3sKKwljbGVhcl9iaXQoZmxhZywgYml0cyk7Cit9CisKKyNkZWZpbmUgdGczX2ZsYWcodHAsIGZsYWcpCQkJCVwKKwlfdGczX2ZsYWcoVEczX0ZMQUdfIyNmbGFnLCAodHApLT50ZzNfZmxhZ3MpCisjZGVmaW5lIHRnM19mbGFnX3NldCh0cCwgZmxhZykJCQkJXAorCV90ZzNfZmxhZ19zZXQoVEczX0ZMQUdfIyNmbGFnLCAodHApLT50ZzNfZmxhZ3MpCisjZGVmaW5lIHRnM19mbGFnX2NsZWFyKHRwLCBmbGFnKQkJCVwKKwlfdGczX2ZsYWdfY2xlYXIoVEczX0ZMQUdfIyNmbGFnLCAodHApLT50ZzNfZmxhZ3MpCisKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkidGczIgogI2RlZmluZSBURzNfTUFKX05VTQkJCTMKLSNkZWZpbmUgVEczX01JTl9OVU0JCQkxMTcKKyNkZWZpbmUgVEczX01JTl9OVU0JCQkxMTkKICNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCVwKIAlfX3N0cmluZ2lmeShURzNfTUFKX05VTSkgIi4iIF9fc3RyaW5naWZ5KFRHM19NSU5fTlVNKQotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkphbnVhcnkgMjUsIDIwMTEiCisjZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiTWF5IDE4LCAyMDExIgogCiAjZGVmaW5lIFRHM19ERUZfTUFDX01PREUJMAogI2RlZmluZSBURzNfREVGX1JYX01PREUJCTAKQEAgLTg1LDI2ICsxMDksMjUgQEAKIC8qIGxlbmd0aCBvZiB0aW1lIGJlZm9yZSB3ZSBkZWNpZGUgdGhlIGhhcmR3YXJlIGlzIGJvcmtlZCwKICAqIGFuZCBkZXYtPnR4X3RpbWVvdXQoKSBzaG91bGQgYmUgY2FsbGVkIHRvIGZpeCB0aGUgcHJvYmxlbQogICovCisKICNkZWZpbmUgVEczX1RYX1RJTUVPVVQJCQkoNSAqIEhaKQogCiAvKiBoYXJkd2FyZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGZvciBhIHNpbmdsZSBmcmFtZSdzIGRhdGEgcGF5bG9hZCAqLwogI2RlZmluZSBURzNfTUlOX01UVQkJCTYwCiAjZGVmaW5lIFRHM19NQVhfTVRVKHRwKQlcCi0JKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfSlVNQk9fQ0FQQUJMRSkgPyA5MDAwIDogMTUwMCkKKwkodGczX2ZsYWcodHAsIEpVTUJPX0NBUEFCTEUpID8gOTAwMCA6IDE1MDApCiAKIC8qIFRoZXNlIG51bWJlcnMgc2VlbSB0byBiZSBoYXJkIGNvZGVkIGluIHRoZSBOSUMgZmlybXdhcmUgc29tZWhvdy4KICAqIFlvdSBjYW4ndCBjaGFuZ2UgdGhlIHJpbmcgc2l6ZXMsIGJ1dCB5b3UgY2FuIGNoYW5nZSB3aGVyZSB5b3UgcGxhY2UKICAqIHRoZW0gaW4gdGhlIE5JQyBvbmJvYXJkIG1lbW9yeS4KICAqLwogI2RlZmluZSBURzNfUlhfU1REX1JJTkdfU0laRSh0cCkgXAotCSgoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcgfHwgXAotCSAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTkpID8gXAotCSBSWF9TVERfTUFYX1NJWkVfNTcxNyA6IDUxMikKKwkodGczX2ZsYWcodHAsIExSR19QUk9EX1JJTkdfQ0FQKSA/IFwKKwkgVEczX1JYX1NURF9NQVhfU0laRV81NzE3IDogVEczX1JYX1NURF9NQVhfU0laRV81NzAwKQogI2RlZmluZSBURzNfREVGX1JYX1JJTkdfUEVORElORwkJMjAwCiAjZGVmaW5lIFRHM19SWF9KTUJfUklOR19TSVpFKHRwKSBcCi0JKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNyB8fCBcCi0JICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxOSkgPyBcCi0JIDEwMjQgOiAyNTYpCisJKHRnM19mbGFnKHRwLCBMUkdfUFJPRF9SSU5HX0NBUCkgPyBcCisJIFRHM19SWF9KTUJfTUFYX1NJWkVfNTcxNyA6IFRHM19SWF9KTUJfTUFYX1NJWkVfNTcwMCkKICNkZWZpbmUgVEczX0RFRl9SWF9KVU1CT19SSU5HX1BFTkRJTkcJMTAwCiAjZGVmaW5lIFRHM19SU1NfSU5ESVJfVEJMX1NJWkUJCTEyOAogCkBAIC0xNjcsMTEgKzE5MCw2IEBACiAKICNkZWZpbmUgVEczX1JBV19JUF9BTElHTiAyCiAKLS8qIG51bWJlciBvZiBFVEhUT09MX0dTVEFUUyB1NjQncyAqLwotI2RlZmluZSBURzNfTlVNX1NUQVRTCQkoc2l6ZW9mKHN0cnVjdCB0ZzNfZXRodG9vbF9zdGF0cykvc2l6ZW9mKHU2NCkpCi0KLSNkZWZpbmUgVEczX05VTV9URVNUCQk2Ci0KICNkZWZpbmUgVEczX0ZXX1VQREFURV9USU1FT1VUX1NFQwk1CiAKICNkZWZpbmUgRklSTVdBUkVfVEczCQkidGlnb24vdGczLmJpbiIKQEAgLTI2Niw2ICsyODQsNyBAQAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3NzkxKX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgVEczUENJX0RFVklDRV9USUdPTjNfNTc3OTUpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBURzNQQ0lfREVWSUNFX1RJR09OM181NzE5KX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgVEczUENJX0RFVklDRV9USUdPTjNfNTcyMCl9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU1lTS09OTkVDVCwgUENJX0RFVklDRV9JRF9TWVNLT05ORUNUXzlEWFgpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NZU0tPTk5FQ1QsIFBDSV9ERVZJQ0VfSURfU1lTS09OTkVDVF85TVhYKX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTFRJTUEsIFBDSV9ERVZJQ0VfSURfQUxUSU1BX0FDMTAwMCl9LApAQCAtMjgwLDcgKzI5OSw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCWNvbnN0IGNoYXIgc3RyaW5nW0VUSF9HU1RSSU5HX0xFTl07Ci19IGV0aHRvb2xfc3RhdHNfa2V5c1tURzNfTlVNX1NUQVRTXSA9IHsKK30gZXRodG9vbF9zdGF0c19rZXlzW10gPSB7CiAJeyAicnhfb2N0ZXRzIiB9LAogCXsgInJ4X2ZyYWdtZW50cyIgfSwKIAl7ICJyeF91Y2FzdF9wYWNrZXRzIiB9LApAQCAtMzU2LDEyICszNzUsMTcgQEAKIAl7ICJyaW5nX3N0YXR1c191cGRhdGUiIH0sCiAJeyAibmljX2lycXMiIH0sCiAJeyAibmljX2F2b2lkZWRfaXJxcyIgfSwKLQl7ICJuaWNfdHhfdGhyZXNob2xkX2hpdCIgfQorCXsgIm5pY190eF90aHJlc2hvbGRfaGl0IiB9LAorCisJeyAibWJ1Zl9sd21fdGhyZXNoX2hpdCIgfSwKIH07CiAKKyNkZWZpbmUgVEczX05VTV9TVEFUUwlBUlJBWV9TSVpFKGV0aHRvb2xfc3RhdHNfa2V5cykKKworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHsKIAljb25zdCBjaGFyIHN0cmluZ1tFVEhfR1NUUklOR19MRU5dOwotfSBldGh0b29sX3Rlc3Rfa2V5c1tURzNfTlVNX1RFU1RdID0geworfSBldGh0b29sX3Rlc3Rfa2V5c1tdID0gewogCXsgIm52cmFtIHRlc3QgICAgIChvbmxpbmUpICIgfSwKIAl7ICJsaW5rIHRlc3QgICAgICAob25saW5lKSAiIH0sCiAJeyAicmVnaXN0ZXIgdGVzdCAgKG9mZmxpbmUpIiB9LApAQCAtMzcwLDYgKzM5NCw5IEBACiAJeyAiaW50ZXJydXB0IHRlc3QgKG9mZmxpbmUpIiB9LAogfTsKIAorI2RlZmluZSBURzNfTlVNX1RFU1QJQVJSQVlfU0laRShldGh0b29sX3Rlc3Rfa2V5cykKKworCiBzdGF0aWMgdm9pZCB0ZzNfd3JpdGUzMihzdHJ1Y3QgdGczICp0cCwgdTMyIG9mZiwgdTMyIHZhbCkKIHsKIAl3cml0ZWwodmFsLCB0cC0+cmVncyArIG9mZik7CkBAIC00NjcsOCArNDk0LDcgQEAKICAqLwogc3RhdGljIHZvaWQgX3R3MzJfZmx1c2goc3RydWN0IHRnMyAqdHAsIHUzMiBvZmYsIHUzMiB2YWwsIHUzMiB1c2VjX3dhaXQpCiB7Ci0JaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUENJWF9UQVJHRVRfSFdCVUcpIHx8Ci0JICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0lDSF9XT1JLQVJPVU5EKSkKKwlpZiAodGczX2ZsYWcodHAsIFBDSVhfVEFSR0VUX0hXQlVHKSB8fCB0ZzNfZmxhZyh0cCwgSUNIX1dPUktBUk9VTkQpKQogCQkvKiBOb24tcG9zdGVkIG1ldGhvZHMgKi8KIAkJdHAtPndyaXRlMzIodHAsIG9mZiwgdmFsKTsKIAllbHNlIHsKQEAgLTQ4OCw4ICs1MTQsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIHR3MzJfbWFpbGJveF9mbHVzaChzdHJ1Y3QgdGczICp0cCwgdTMyIG9mZiwgdTMyIHZhbCkKIHsKIAl0cC0+d3JpdGUzMl9tYm94KHRwLCBvZmYsIHZhbCk7Ci0JaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX01CT1hfV1JJVEVfUkVPUkRFUikgJiYKLQkgICAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0lDSF9XT1JLQVJPVU5EKSkKKwlpZiAoIXRnM19mbGFnKHRwLCBNQk9YX1dSSVRFX1JFT1JERVIpICYmICF0ZzNfZmxhZyh0cCwgSUNIX1dPUktBUk9VTkQpKQogCQl0cC0+cmVhZDMyX21ib3godHAsIG9mZik7CiB9CiAKQEAgLTQ5Nyw5ICs1MjIsOSBAQAogewogCXZvaWQgX19pb21lbSAqbWJveCA9IHRwLT5yZWdzICsgb2ZmOwogCXdyaXRlbCh2YWwsIG1ib3gpOwotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVFhEX01CT1hfSFdCVUcpCisJaWYgKHRnM19mbGFnKHRwLCBUWERfTUJPWF9IV0JVRykpCiAJCXdyaXRlbCh2YWwsIG1ib3gpOwotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTUJPWF9XUklURV9SRU9SREVSKQorCWlmICh0ZzNfZmxhZyh0cCwgTUJPWF9XUklURV9SRU9SREVSKSkKIAkJcmVhZGwobWJveCk7CiB9CiAKQEAgLTUyOCwxMiArNTUzLDEyIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICgoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpICYmCisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2ICYmCiAJICAgIChvZmYgPj0gTklDX1NSQU1fU1RBVFNfQkxLKSAmJiAob2ZmIDwgTklDX1NSQU1fVFhfQlVGRkVSX0RFU0MpKQogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdHAtPmluZGlyZWN0X2xvY2ssIGZsYWdzKTsKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1NSQU1fVVNFX0NPTkZJRykgeworCWlmICh0ZzNfZmxhZyh0cCwgU1JBTV9VU0VfQ09ORklHKSkgewogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCBURzNQQ0lfTUVNX1dJTl9CQVNFX0FERFIsIG9mZik7CiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQodHAtPnBkZXYsIFRHM1BDSV9NRU1fV0lOX0RBVEEsIHZhbCk7CiAKQEAgLTU1MywxNCArNTc4LDE0IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICgoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpICYmCisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2ICYmCiAJICAgIChvZmYgPj0gTklDX1NSQU1fU1RBVFNfQkxLKSAmJiAob2ZmIDwgTklDX1NSQU1fVFhfQlVGRkVSX0RFU0MpKSB7CiAJCSp2YWwgPSAwOwogCQlyZXR1cm47CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5pbmRpcmVjdF9sb2NrLCBmbGFncyk7Ci0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19TUkFNX1VTRV9DT05GSUcpIHsKKwlpZiAodGczX2ZsYWcodHAsIFNSQU1fVVNFX0NPTkZJRykpIHsKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgVEczUENJX01FTV9XSU5fQkFTRV9BRERSLCBvZmYpOwogCQlwY2lfcmVhZF9jb25maWdfZHdvcmQodHAtPnBkZXYsIFRHM1BDSV9NRU1fV0lOX0RBVEEsIHZhbCk7CiAKQEAgLTU5Nyw3ICs2MjIsNyBAQAogCWludCByZXQgPSAwOwogCXUzMiBzdGF0dXMsIHJlcSwgZ250OwogCi0JaWYgKCEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfQVBFKSkKKwlpZiAoIXRnM19mbGFnKHRwLCBFTkFCTEVfQVBFKSkKIAkJcmV0dXJuIDA7CiAKIAlzd2l0Y2ggKGxvY2tudW0pIHsKQEAgLTY0Myw3ICs2NjgsNyBAQAogewogCXUzMiBnbnQ7CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpKQorCWlmICghdGczX2ZsYWcodHAsIEVOQUJMRV9BUEUpKQogCQlyZXR1cm47CiAKIAlzd2l0Y2ggKGxvY2tudW0pIHsKQEAgLTY4NywxNCArNzEyLDE0IEBACiAJCXN0cnVjdCB0ZzNfbmFwaSAqdG5hcGkgPSAmdHAtPm5hcGlbaV07CiAKIAkJdHczMl9tYWlsYm94X2YodG5hcGktPmludF9tYm94LCB0bmFwaS0+bGFzdF90YWcgPDwgMjQpOwotCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl8xU0hPVF9NU0kpCisJCWlmICh0ZzNfZmxhZyh0cCwgMVNIT1RfTVNJKSkKIAkJCXR3MzJfbWFpbGJveF9mKHRuYXBpLT5pbnRfbWJveCwgdG5hcGktPmxhc3RfdGFnIDw8IDI0KTsKIAogCQl0cC0+Y29hbF9ub3cgfD0gdG5hcGktPmNvYWxfbm93OwogCX0KIAogCS8qIEZvcmNlIGFuIGluaXRpYWwgaW50ZXJydXB0ICovCi0JaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1RBR0dFRF9TVEFUVVMpICYmCisJaWYgKCF0ZzNfZmxhZyh0cCwgVEFHR0VEX1NUQVRVUykgJiYKIAkgICAgKHRwLT5uYXBpWzBdLmh3X3N0YXR1cy0+c3RhdHVzICYgU0RfU1RBVFVTX1VQREFURUQpKQogCQl0dzMyKEdSQ19MT0NBTF9DVFJMLCB0cC0+Z3JjX2xvY2FsX2N0cmwgfCBHUkNfTENMQ1RSTF9TRVRJTlQpOwogCWVsc2UKQEAgLTcxMCw5ICs3MzUsNyBAQAogCXVuc2lnbmVkIGludCB3b3JrX2V4aXN0cyA9IDA7CiAKIAkvKiBjaGVjayBmb3IgcGh5IGV2ZW50cyAqLwotCWlmICghKHRwLT50ZzNfZmxhZ3MgJgotCSAgICAgIChURzNfRkxBR19VU0VfTElOS0NIR19SRUcgfAotCSAgICAgICBURzNfRkxBR19QT0xMX1NFUkRFUykpKSB7CisJaWYgKCEodGczX2ZsYWcodHAsIFVTRV9MSU5LQ0hHX1JFRykgfHwgdGczX2ZsYWcodHAsIFBPTExfU0VSREVTKSkpIHsKIAkJaWYgKHNibGstPnN0YXR1cyAmIFNEX1NUQVRVU19MSU5LX0NIRykKIAkJCXdvcmtfZXhpc3RzID0gMTsKIAl9CkBAIC03NDAsOCArNzYzLDcgQEAKIAkgKiBUaGUgbGFzdF90YWcgd2Ugd3JpdGUgYWJvdmUgdGVsbHMgdGhlIGNoaXAgd2hpY2ggcGllY2Ugb2YKIAkgKiB3b3JrIHdlJ3ZlIGNvbXBsZXRlZC4KIAkgKi8KLQlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVEFHR0VEX1NUQVRVUykgJiYKLQkgICAgdGczX2hhc193b3JrKHRuYXBpKSkKKwlpZiAoIXRnM19mbGFnKHRwLCBUQUdHRURfU1RBVFVTKSAmJiB0ZzNfaGFzX3dvcmsodG5hcGkpKQogCQl0dzMyKEhPU1RDQ19NT0RFLCB0cC0+Y29hbGVzY2VfbW9kZSB8CiAJCSAgICAgSE9TVENDX01PREVfRU5BQkxFIHwgdG5hcGktPmNvYWxfbm93KTsKIH0KQEAgLTc1MSw4ICs3NzMsNyBAQAogCXUzMiBjbG9ja19jdHJsOwogCXUzMiBvcmlnX2Nsb2NrX2N0cmw7CiAKLQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19DUE1VX1BSRVNFTlQpIHx8Ci0JICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3ODBfQ0xBU1MpKQorCWlmICh0ZzNfZmxhZyh0cCwgQ1BNVV9QUkVTRU5UKSB8fCB0ZzNfZmxhZyh0cCwgNTc4MF9DTEFTUykpCiAJCXJldHVybjsKIAogCWNsb2NrX2N0cmwgPSB0cjMyKFRHM1BDSV9DTE9DS19DVFJMKTsKQEAgLTc2Myw3ICs3ODQsNyBAQAogCQkgICAgICAgMHgxZik7CiAJdHAtPnBjaV9jbG9ja19jdHJsID0gY2xvY2tfY3RybDsKIAotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykgeworCWlmICh0ZzNfZmxhZyh0cCwgNTcwNV9QTFVTKSkgewogCQlpZiAob3JpZ19jbG9ja19jdHJsICYgQ0xPQ0tfQ1RSTF82MjVfQ09SRSkgewogCQkJdHczMl93YWl0X2YoVEczUENJX0NMT0NLX0NUUkwsCiAJCQkJICAgIGNsb2NrX2N0cmwgfCBDTE9DS19DVFJMXzYyNV9DT1JFLCA0MCk7CkBAIC04ODAsNiArOTAxLDEwNCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgdGczX3BoeV9jbDQ1X3dyaXRlKHN0cnVjdCB0ZzMgKnRwLCB1MzIgZGV2YWQsIHUzMiBhZGRyLCB1MzIgdmFsKQoreworCWludCBlcnI7CisKKwllcnIgPSB0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfTU1EX0NUUkwsIGRldmFkKTsKKwlpZiAoZXJyKQorCQlnb3RvIGRvbmU7CisKKwllcnIgPSB0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfTU1EX0FERFJFU1MsIGFkZHIpOworCWlmIChlcnIpCisJCWdvdG8gZG9uZTsKKworCWVyciA9IHRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19NTURfQ1RSTCwKKwkJCSAgIE1JSV9URzNfTU1EX0NUUkxfREFUQV9OT0lOQyB8IGRldmFkKTsKKwlpZiAoZXJyKQorCQlnb3RvIGRvbmU7CisKKwllcnIgPSB0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfTU1EX0FERFJFU1MsIHZhbCk7CisKK2RvbmU6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB0ZzNfcGh5X2NsNDVfcmVhZChzdHJ1Y3QgdGczICp0cCwgdTMyIGRldmFkLCB1MzIgYWRkciwgdTMyICp2YWwpCit7CisJaW50IGVycjsKKworCWVyciA9IHRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19NTURfQ1RSTCwgZGV2YWQpOworCWlmIChlcnIpCisJCWdvdG8gZG9uZTsKKworCWVyciA9IHRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19NTURfQUREUkVTUywgYWRkcik7CisJaWYgKGVycikKKwkJZ290byBkb25lOworCisJZXJyID0gdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX01NRF9DVFJMLAorCQkJICAgTUlJX1RHM19NTURfQ1RSTF9EQVRBX05PSU5DIHwgZGV2YWQpOworCWlmIChlcnIpCisJCWdvdG8gZG9uZTsKKworCWVyciA9IHRnM19yZWFkcGh5KHRwLCBNSUlfVEczX01NRF9BRERSRVNTLCB2YWwpOworCitkb25lOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgdGczX3BoeWRzcF9yZWFkKHN0cnVjdCB0ZzMgKnRwLCB1MzIgcmVnLCB1MzIgKnZhbCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9BRERSRVNTLCByZWcpOworCWlmICghZXJyKQorCQllcnIgPSB0ZzNfcmVhZHBoeSh0cCwgTUlJX1RHM19EU1BfUldfUE9SVCwgdmFsKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgdGczX3BoeWRzcF93cml0ZShzdHJ1Y3QgdGczICp0cCwgdTMyIHJlZywgdTMyIHZhbCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9BRERSRVNTLCByZWcpOworCWlmICghZXJyKQorCQllcnIgPSB0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRFNQX1JXX1BPUlQsIHZhbCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHRnM19waHlfYXV4Y3RsX3JlYWQoc3RydWN0IHRnMyAqdHAsIGludCByZWcsIHUzMiAqdmFsKQoreworCWludCBlcnI7CisKKwllcnIgPSB0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsCisJCQkgICAocmVnIDw8IE1JSV9URzNfQVVYQ1RMX01JU0NfUkRTRUxfU0hJRlQpIHwKKwkJCSAgIE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfTUlTQyk7CisJaWYgKCFlcnIpCisJCWVyciA9IHRnM19yZWFkcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCB2YWwpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB0ZzNfcGh5X2F1eGN0bF93cml0ZShzdHJ1Y3QgdGczICp0cCwgaW50IHJlZywgdTMyIHNldCkKK3sKKwlpZiAocmVnID09IE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfTUlTQykKKwkJc2V0IHw9IE1JSV9URzNfQVVYQ1RMX01JU0NfV1JFTjsKKworCXJldHVybiB0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIHNldCB8IHJlZyk7Cit9CisKKyNkZWZpbmUgVEczX1BIWV9BVVhDVExfU01EU1BfRU5BQkxFKHRwKSBcCisJdGczX3BoeV9hdXhjdGxfd3JpdGUoKHRwKSwgTUlJX1RHM19BVVhDVExfU0hEV1NFTF9BVVhDVEwsIFwKKwkJCSAgICAgTUlJX1RHM19BVVhDVExfQUNUTF9TTURTUF9FTkEgfCBcCisJCQkgICAgIE1JSV9URzNfQVVYQ1RMX0FDVExfVFhfNkRCKQorCisjZGVmaW5lIFRHM19QSFlfQVVYQ1RMX1NNRFNQX0RJU0FCTEUodHApIFwKKwl0ZzNfcGh5X2F1eGN0bF93cml0ZSgodHApLCBNSUlfVEczX0FVWENUTF9TSERXU0VMX0FVWENUTCwgXAorCQkJICAgICBNSUlfVEczX0FVWENUTF9BQ1RMX1RYXzZEQik7CisKIHN0YXRpYyBpbnQgdGczX2JtY3JfcmVzZXQoc3RydWN0IHRnMyAqdHApCiB7CiAJdTMyIHBoeV9jb250cm9sOwpAQCAtOTgyLDcgKzExMDEsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKCEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19SR01JSV9JTkJBTkRfRElTQUJMRSkpCisJaWYgKCF0ZzNfZmxhZyh0cCwgUkdNSUlfSU5CQU5EX0RJU0FCTEUpKQogCQl2YWwgfD0gTUFDX1BIWUNGRzJfRU1PREVfTUFTS19NQVNLIHwKIAkJICAgICAgIE1BQ19QSFlDRkcyX0ZNT0RFX01BU0tfTUFTSyB8CiAJCSAgICAgICBNQUNfUEhZQ0ZHMl9HTU9ERV9NQVNLX01BU0sgfApAQCAtOTk1LDEwICsxMTE0LDEwIEBACiAJdmFsID0gdHIzMihNQUNfUEhZQ0ZHMSk7CiAJdmFsICY9IH4oTUFDX1BIWUNGRzFfUlhDTEtfVE9fTUFTSyB8IE1BQ19QSFlDRkcxX1RYQ0xLX1RPX01BU0sgfAogCQkgTUFDX1BIWUNGRzFfUkdNSUlfRVhUX1JYX0RFQyB8IE1BQ19QSFlDRkcxX1JHTUlJX1NORF9TVEFUX0VOKTsKLQlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1JHTUlJX0lOQkFORF9ESVNBQkxFKSkgewotCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19SR01JSV9FWFRfSUJORF9SWF9FTikKKwlpZiAoIXRnM19mbGFnKHRwLCBSR01JSV9JTkJBTkRfRElTQUJMRSkpIHsKKwkJaWYgKHRnM19mbGFnKHRwLCBSR01JSV9FWFRfSUJORF9SWF9FTikpCiAJCQl2YWwgfD0gTUFDX1BIWUNGRzFfUkdNSUlfRVhUX1JYX0RFQzsKLQkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUkdNSUlfRVhUX0lCTkRfVFhfRU4pCisJCWlmICh0ZzNfZmxhZyh0cCwgUkdNSUlfRVhUX0lCTkRfVFhfRU4pKQogCQkJdmFsIHw9IE1BQ19QSFlDRkcxX1JHTUlJX1NORF9TVEFUX0VOOwogCX0KIAl2YWwgfD0gTUFDX1BIWUNGRzFfUlhDTEtfVElNRU9VVCB8IE1BQ19QSFlDRkcxX1RYQ0xLX1RJTUVPVVQgfApAQCAtMTAxMywxMyArMTEzMiwxMyBAQAogCQkgTUFDX1JHTUlJX01PREVfVFhfRU5BQkxFIHwKIAkJIE1BQ19SR01JSV9NT0RFX1RYX0xPV1BXUiB8CiAJCSBNQUNfUkdNSUlfTU9ERV9UWF9SRVNFVCk7Ci0JaWYgKCEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19SR01JSV9JTkJBTkRfRElTQUJMRSkpIHsKLQkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUkdNSUlfRVhUX0lCTkRfUlhfRU4pCisJaWYgKCF0ZzNfZmxhZyh0cCwgUkdNSUlfSU5CQU5EX0RJU0FCTEUpKSB7CisJCWlmICh0ZzNfZmxhZyh0cCwgUkdNSUlfRVhUX0lCTkRfUlhfRU4pKQogCQkJdmFsIHw9IE1BQ19SR01JSV9NT0RFX1JYX0lOVF9CIHwKIAkJCSAgICAgICBNQUNfUkdNSUlfTU9ERV9SWF9RVUFMSVRZIHwKIAkJCSAgICAgICBNQUNfUkdNSUlfTU9ERV9SWF9BQ1RJVklUWSB8CiAJCQkgICAgICAgTUFDX1JHTUlJX01PREVfUlhfRU5HX0RFVDsKLQkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUkdNSUlfRVhUX0lCTkRfVFhfRU4pCisJCWlmICh0ZzNfZmxhZyh0cCwgUkdNSUlfRVhUX0lCTkRfVFhfRU4pKQogCQkJdmFsIHw9IE1BQ19SR01JSV9NT0RFX1RYX0VOQUJMRSB8CiAJCQkgICAgICAgTUFDX1JHTUlJX01PREVfVFhfTE9XUFdSIHwKIAkJCSAgICAgICBNQUNfUkdNSUlfTU9ERV9UWF9SRVNFVDsKQEAgLTEwMzMsNyArMTE1Miw3IEBACiAJdHczMl9mKE1BQ19NSV9NT0RFLCB0cC0+bWlfbW9kZSk7CiAJdWRlbGF5KDgwKTsKIAotCWlmICgodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19NRElPQlVTX0lOSVRFRCkgJiYKKwlpZiAodGczX2ZsYWcodHAsIE1ESU9CVVNfSU5JVEVEKSAmJgogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NSkKIAkJdGczX21kaW9fY29uZmlnXzU3ODUodHApOwogfQpAQCAtMTA0NCw4ICsxMTYzLDcgQEAKIAl1MzIgcmVnOwogCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CiAKLQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcgfHwKLQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTkpIHsKKwlpZiAodGczX2ZsYWcodHAsIDU3MTdfUExVUykpIHsKIAkJdTMyIGlzX3NlcmRlczsKIAogCQl0cC0+cGh5X2FkZHIgPSBQQ0lfRlVOQyh0cC0+cGRldi0+ZGV2Zm4pICsgMTsKQEAgLTEwNjIsOCArMTE4MCw3IEBACiAKIAl0ZzNfbWRpb19zdGFydCh0cCk7CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1VTRV9QSFlMSUIpIHx8Ci0JICAgICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX01ESU9CVVNfSU5JVEVEKSkKKwlpZiAoIXRnM19mbGFnKHRwLCBVU0VfUEhZTElCKSB8fCB0ZzNfZmxhZyh0cCwgTURJT0JVU19JTklURUQpKQogCQlyZXR1cm4gMDsKIAogCXRwLT5tZGlvX2J1cyA9IG1kaW9idXNfYWxsb2MoKTsKQEAgLTExMTksMTEgKzEyMzYsMTEgQEAKIAkJCQkgICAgIFBIWV9CUkNNX1JYX1JFRkNMS19VTlVTRUQgfAogCQkJCSAgICAgUEhZX0JSQ01fRElTX1RYQ1JYQ19OT0VOUkdZIHwKIAkJCQkgICAgIFBIWV9CUkNNX0FVVE9fUFdSRFdOX0VOQUJMRTsKLQkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUkdNSUlfSU5CQU5EX0RJU0FCTEUpCisJCWlmICh0ZzNfZmxhZyh0cCwgUkdNSUlfSU5CQU5EX0RJU0FCTEUpKQogCQkJcGh5ZGV2LT5kZXZfZmxhZ3MgfD0gUEhZX0JSQ01fU1REX0lCTkRfRElTQUJMRTsKLQkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUkdNSUlfRVhUX0lCTkRfUlhfRU4pCisJCWlmICh0ZzNfZmxhZyh0cCwgUkdNSUlfRVhUX0lCTkRfUlhfRU4pKQogCQkJcGh5ZGV2LT5kZXZfZmxhZ3MgfD0gUEhZX0JSQ01fRVhUX0lCTkRfUlhfRU5BQkxFOwotCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19SR01JSV9FWFRfSUJORF9UWF9FTikKKwkJaWYgKHRnM19mbGFnKHRwLCBSR01JSV9FWFRfSUJORF9UWF9FTikpCiAJCQlwaHlkZXYtPmRldl9mbGFncyB8PSBQSFlfQlJDTV9FWFRfSUJORF9UWF9FTkFCTEU7CiAJCS8qIGZhbGx0aHJ1ICovCiAJY2FzZSBQSFlfSURfUlRMODIxMUM6CkBAIC0xMTM3LDcgKzEyNTQsNyBAQAogCQlicmVhazsKIAl9CiAKLQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19NRElPQlVTX0lOSVRFRDsKKwl0ZzNfZmxhZ19zZXQodHAsIE1ESU9CVVNfSU5JVEVEKTsKIAogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NSkKIAkJdGczX21kaW9fY29uZmlnXzU3ODUodHApOwpAQCAtMTE0Nyw1OSArMTI2NCwxMyBAQAogCiBzdGF0aWMgdm9pZCB0ZzNfbWRpb19maW5pKHN0cnVjdCB0ZzMgKnRwKQogewotCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX01ESU9CVVNfSU5JVEVEKSB7Ci0JCXRwLT50ZzNfZmxhZ3MzICY9IH5URzNfRkxHM19NRElPQlVTX0lOSVRFRDsKKwlpZiAodGczX2ZsYWcodHAsIE1ESU9CVVNfSU5JVEVEKSkgeworCQl0ZzNfZmxhZ19jbGVhcih0cCwgTURJT0JVU19JTklURUQpOwogCQltZGlvYnVzX3VucmVnaXN0ZXIodHAtPm1kaW9fYnVzKTsKIAkJbWRpb2J1c19mcmVlKHRwLT5tZGlvX2J1cyk7CiAJfQogfQogCi1zdGF0aWMgaW50IHRnM19waHlfY2w0NV93cml0ZShzdHJ1Y3QgdGczICp0cCwgdTMyIGRldmFkLCB1MzIgYWRkciwgdTMyIHZhbCkKLXsKLQlpbnQgZXJyOwotCi0JZXJyID0gdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX01NRF9DVFJMLCBkZXZhZCk7Ci0JaWYgKGVycikKLQkJZ290byBkb25lOwotCi0JZXJyID0gdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX01NRF9BRERSRVNTLCBhZGRyKTsKLQlpZiAoZXJyKQotCQlnb3RvIGRvbmU7Ci0KLQllcnIgPSB0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfTU1EX0NUUkwsCi0JCQkgICBNSUlfVEczX01NRF9DVFJMX0RBVEFfTk9JTkMgfCBkZXZhZCk7Ci0JaWYgKGVycikKLQkJZ290byBkb25lOwotCi0JZXJyID0gdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX01NRF9BRERSRVNTLCB2YWwpOwotCi1kb25lOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgdGczX3BoeV9jbDQ1X3JlYWQoc3RydWN0IHRnMyAqdHAsIHUzMiBkZXZhZCwgdTMyIGFkZHIsIHUzMiAqdmFsKQotewotCWludCBlcnI7Ci0KLQllcnIgPSB0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfTU1EX0NUUkwsIGRldmFkKTsKLQlpZiAoZXJyKQotCQlnb3RvIGRvbmU7Ci0KLQllcnIgPSB0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfTU1EX0FERFJFU1MsIGFkZHIpOwotCWlmIChlcnIpCi0JCWdvdG8gZG9uZTsKLQotCWVyciA9IHRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19NTURfQ1RSTCwKLQkJCSAgIE1JSV9URzNfTU1EX0NUUkxfREFUQV9OT0lOQyB8IGRldmFkKTsKLQlpZiAoZXJyKQotCQlnb3RvIGRvbmU7Ci0KLQllcnIgPSB0ZzNfcmVhZHBoeSh0cCwgTUlJX1RHM19NTURfQUREUkVTUywgdmFsKTsKLQotZG9uZToKLQlyZXR1cm4gZXJyOwotfQotCiAvKiB0cC0+bG9jayBpcyBoZWxkLiAqLwogc3RhdGljIGlubGluZSB2b2lkIHRnM19nZW5lcmF0ZV9md19ldmVudChzdHJ1Y3QgdGczICp0cCkKIHsKQEAgLTEyNDcsOCArMTMxOCw3IEBACiAJdTMyIHJlZzsKIAl1MzIgdmFsOwogCi0JaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzgwX0NMQVNTKSB8fAotCSAgICAhKHRwLT50ZzNfZmxhZ3MgICYgVEczX0ZMQUdfRU5BQkxFX0FTRikpCisJaWYgKCF0ZzNfZmxhZyh0cCwgNTc4MF9DTEFTUykgfHwgIXRnM19mbGFnKHRwLCBFTkFCTEVfQVNGKSkKIAkJcmV0dXJuOwogCiAJdGczX3dhaXRfZm9yX2V2ZW50X2Fjayh0cCk7CkBAIC0xMzA4LDYgKzEzNzgsMTEgQEAKIAkJCSAgICAib24iIDogIm9mZiIsCiAJCQkgICAgKHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfZmxvd2N0cmwgJiBGTE9XX0NUUkxfUlgpID8KIAkJCSAgICAib24iIDogIm9mZiIpOworCisJCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19FRUVfQ0FQKQorCQkJbmV0ZGV2X2luZm8odHAtPmRldiwgIkVFRSBpcyAlc1xuIiwKKwkJCQkgICAgdHAtPnNldGxwaWNudCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOworCiAJCXRnM191bXBfbGlua19yZXBvcnQodHApOwogCX0KIH0KQEAgLTEzNzMsMTMgKzE0NDgsMTIgQEAKIAl1MzIgb2xkX3J4X21vZGUgPSB0cC0+cnhfbW9kZTsKIAl1MzIgb2xkX3R4X21vZGUgPSB0cC0+dHhfbW9kZTsKIAotCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1VTRV9QSFlMSUIpCisJaWYgKHRnM19mbGFnKHRwLCBVU0VfUEhZTElCKSkKIAkJYXV0b25lZyA9IHRwLT5tZGlvX2J1cy0+cGh5X21hcFtURzNfUEhZX01JSV9BRERSXS0+YXV0b25lZzsKIAllbHNlCiAJCWF1dG9uZWcgPSB0cC0+bGlua19jb25maWcuYXV0b25lZzsKIAotCWlmIChhdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFICYmCi0JICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUEFVU0VfQVVUT05FRykpIHsKKwlpZiAoYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSAmJiB0ZzNfZmxhZyh0cCwgUEFVU0VfQVVUT05FRykpIHsKIAkJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0FOWV9TRVJERVMpCiAJCQlmbG93Y3RybCA9IHRnM19yZXNvbHZlX2Zsb3djdHJsXzEwMDBYKGxjbGFkdiwgcm10YWR2KTsKIAkJZWxzZQpAQCAtMTU3NiwyOCArMTY1MCw2IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHRnM19waHlkc3BfcmVhZChzdHJ1Y3QgdGczICp0cCwgdTMyIHJlZywgdTMyICp2YWwpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IHRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfQUREUkVTUywgcmVnKTsKLQlpZiAoIWVycikKLQkJZXJyID0gdGczX3JlYWRwaHkodHAsIE1JSV9URzNfRFNQX1JXX1BPUlQsIHZhbCk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHRnM19waHlkc3Bfd3JpdGUoc3RydWN0IHRnMyAqdHAsIHUzMiByZWcsIHUzMiB2YWwpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IHRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfQUREUkVTUywgcmVnKTsKLQlpZiAoIWVycikKLQkJZXJyID0gdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9SV19QT1JULCB2YWwpOwotCi0JcmV0dXJuIGVycjsKLX0KLQogc3RhdGljIHZvaWQgdGczX3BoeV9mZXRfdG9nZ2xlX2FwZChzdHJ1Y3QgdGczICp0cCwgYm9vbCBlbmFibGUpCiB7CiAJdTMyIHBoeXRlc3Q7CkBAIC0xNjIyLDkgKzE2NzQsOCBAQAogewogCXUzMiByZWc7CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykgfHwKLQkgICAgKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNyB8fAotCSAgICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE5KSAmJgorCWlmICghdGczX2ZsYWcodHAsIDU3MDVfUExVUykgfHwKKwkgICAgKHRnM19mbGFnKHRwLCA1NzE3X1BMVVMpICYmCiAJICAgICAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfTUlJX1NFUkRFUykpKQogCQlyZXR1cm47CiAKQEAgLTE2NTgsNyArMTcwOSw3IEBACiB7CiAJdTMyIHBoeTsKIAotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSB8fAorCWlmICghdGczX2ZsYWcodHAsIDU3MDVfUExVUykgfHwKIAkgICAgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0FOWV9TRVJERVMpKQogCQlyZXR1cm47CiAKQEAgLTE2ODAsMzEgKzE3MzEsMzMgQEAKIAkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19GRVRfVEVTVCwgZXBoeSk7CiAJCX0KIAl9IGVsc2UgewotCQlwaHkgPSBNSUlfVEczX0FVWENUTF9NSVNDX1JEU0VMX01JU0MgfAotCQkgICAgICBNSUlfVEczX0FVWENUTF9TSERXU0VMX01JU0M7Ci0JCWlmICghdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCBwaHkpICYmCi0JCSAgICAhdGczX3JlYWRwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsICZwaHkpKSB7CisJCWludCByZXQ7CisKKwkJcmV0ID0gdGczX3BoeV9hdXhjdGxfcmVhZCh0cCwKKwkJCQkJICBNSUlfVEczX0FVWENUTF9TSERXU0VMX01JU0MsICZwaHkpOworCQlpZiAoIXJldCkgewogCQkJaWYgKGVuYWJsZSkKIAkJCQlwaHkgfD0gTUlJX1RHM19BVVhDVExfTUlTQ19GT1JDRV9BTURJWDsKIAkJCWVsc2UKIAkJCQlwaHkgJj0gfk1JSV9URzNfQVVYQ1RMX01JU0NfRk9SQ0VfQU1ESVg7Ci0JCQlwaHkgfD0gTUlJX1RHM19BVVhDVExfTUlTQ19XUkVOOwotCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCBwaHkpOworCQkJdGczX3BoeV9hdXhjdGxfd3JpdGUodHAsCisJCQkJCSAgICAgTUlJX1RHM19BVVhDVExfU0hEV1NFTF9NSVNDLCBwaHkpOwogCQl9CiAJfQogfQogCiBzdGF0aWMgdm9pZCB0ZzNfcGh5X3NldF93aXJlc3BlZWQoc3RydWN0IHRnMyAqdHApCiB7CisJaW50IHJldDsKIAl1MzIgdmFsOwogCiAJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX05PX0VUSF9XSVJFX1NQRUVEKQogCQlyZXR1cm47CiAKLQlpZiAoIXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwgMHg3MDA3KSAmJgotCSAgICAhdGczX3JlYWRwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsICZ2YWwpKQotCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsCi0JCQkgICAgICh2YWwgfCAoMSA8PCAxNSkgfCAoMSA8PCA0KSkpOworCXJldCA9IHRnM19waHlfYXV4Y3RsX3JlYWQodHAsIE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfTUlTQywgJnZhbCk7CisJaWYgKCFyZXQpCisJCXRnM19waHlfYXV4Y3RsX3dyaXRlKHRwLCBNSUlfVEczX0FVWENUTF9TSERXU0VMX01JU0MsCisJCQkJICAgICB2YWwgfCBNSUlfVEczX0FVWENUTF9NSVNDX1dJUkVTUERfRU4pOwogfQogCiBzdGF0aWMgdm9pZCB0ZzNfcGh5X2FwcGx5X290cChzdHJ1Y3QgdGczICp0cCkKQEAgLTE3MTYsMTEgKzE3NjksOCBAQAogCiAJb3RwID0gdHAtPnBoeV9vdHA7CiAKLQkvKiBFbmFibGUgU01fRFNQIGNsb2NrIGFuZCB0eCA2ZEIgY29kaW5nLiAqLwotCXBoeSA9IE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfQVVYQ1RMIHwKLQkgICAgICBNSUlfVEczX0FVWENUTF9BQ1RMX1NNRFNQX0VOQSB8Ci0JICAgICAgTUlJX1RHM19BVVhDVExfQUNUTF9UWF82REI7Ci0JdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCBwaHkpOworCWlmIChURzNfUEhZX0FVWENUTF9TTURTUF9FTkFCTEUodHApKQorCQlyZXR1cm47CiAKIAlwaHkgPSAoKG90cCAmIFRHM19PVFBfQUdDVEdUX01BU0spID4+IFRHM19PVFBfQUdDVEdUX1NISUZUKTsKIAlwaHkgfD0gTUlJX1RHM19EU1BfVEFQMV9BR0NUR1RfREZMVDsKQEAgLTE3NDQsMTAgKzE3OTQsNyBAQAogCSAgICAgICgob3RwICYgVEczX09UUF9SQ09GRl9NQVNLKSA+PiBURzNfT1RQX1JDT0ZGX1NISUZUKTsKIAl0ZzNfcGh5ZHNwX3dyaXRlKHRwLCBNSUlfVEczX0RTUF9FWFA5NywgcGh5KTsKIAotCS8qIFR1cm4gb2ZmIFNNX0RTUCBjbG9jay4gKi8KLQlwaHkgPSBNSUlfVEczX0FVWENUTF9TSERXU0VMX0FVWENUTCB8Ci0JICAgICAgTUlJX1RHM19BVVhDVExfQUNUTF9UWF82REI7Ci0JdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCBwaHkpOworCVRHM19QSFlfQVVYQ1RMX1NNRFNQX0RJU0FCTEUodHApOwogfQogCiBzdGF0aWMgdm9pZCB0ZzNfcGh5X2VlZV9hZGp1c3Qoc3RydWN0IHRnMyAqdHAsIHUzMiBjdXJyZW50X2xpbmtfdXApCkBAIC0xNzc2LDI5ICsxODIzLDkgQEAKIAkJdGczX3BoeV9jbDQ1X3JlYWQodHAsIE1ESU9fTU1EX0FOLAogCQkJCSAgVEczX0NMNDVfRDdfRUVFUkVTX1NUQVQsICZ2YWwpOwogCi0JCXN3aXRjaCAodmFsKSB7Ci0JCWNhc2UgVEczX0NMNDVfRDdfRUVFUkVTX1NUQVRfTFBfMTAwMFQ6Ci0JCQlzd2l0Y2ggKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSkgewotCQkJY2FzZSBBU0lDX1JFVl81NzE3OgotCQkJY2FzZSBBU0lDX1JFVl81NzE5OgotCQkJY2FzZSBBU0lDX1JFVl81Nzc2NToKLQkJCQkvKiBFbmFibGUgU01fRFNQIGNsb2NrIGFuZCB0eCA2ZEIgY29kaW5nLiAqLwotCQkJCXZhbCA9IE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfQVVYQ1RMIHwKLQkJCQkgICAgICBNSUlfVEczX0FVWENUTF9BQ1RMX1NNRFNQX0VOQSB8Ci0JCQkJICAgICAgTUlJX1RHM19BVVhDVExfQUNUTF9UWF82REI7Ci0JCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCB2YWwpOwotCi0JCQkJdGczX3BoeWRzcF93cml0ZSh0cCwgTUlJX1RHM19EU1BfVEFQMjYsIDB4MDAwMCk7Ci0KLQkJCQkvKiBUdXJuIG9mZiBTTV9EU1AgY2xvY2suICovCi0JCQkJdmFsID0gTUlJX1RHM19BVVhDVExfU0hEV1NFTF9BVVhDVEwgfAotCQkJCSAgICAgIE1JSV9URzNfQVVYQ1RMX0FDVExfVFhfNkRCOwotCQkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwgdmFsKTsKLQkJCX0KLQkJCS8qIEZhbGx0aHJvdWdoICovCi0JCWNhc2UgVEczX0NMNDVfRDdfRUVFUkVTX1NUQVRfTFBfMTAwVFg6CisJCWlmICh2YWwgPT0gVEczX0NMNDVfRDdfRUVFUkVTX1NUQVRfTFBfMTAwMFQgfHwKKwkJICAgIHZhbCA9PSBURzNfQ0w0NV9EN19FRUVSRVNfU1RBVF9MUF8xMDBUWCkKIAkJCXRwLT5zZXRscGljbnQgPSAyOwotCQl9CiAJfQogCiAJaWYgKCF0cC0+c2V0bHBpY250KSB7CkBAIC0xODA3LDYgKzE4MzQsMjMgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHRnM19waHlfZWVlX2VuYWJsZShzdHJ1Y3QgdGczICp0cCkKK3sKKwl1MzIgdmFsOworCisJaWYgKHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfc3BlZWQgPT0gU1BFRURfMTAwMCAmJgorCSAgICAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcgfHwKKwkgICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE5IHx8CisJICAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3NjUpICYmCisJICAgICFURzNfUEhZX0FVWENUTF9TTURTUF9FTkFCTEUodHApKSB7CisJCXRnM19waHlkc3Bfd3JpdGUodHAsIE1JSV9URzNfRFNQX1RBUDI2LCAweDAwMDMpOworCQlURzNfUEhZX0FVWENUTF9TTURTUF9ESVNBQkxFKHRwKTsKKwl9CisKKwl2YWwgPSB0cjMyKFRHM19DUE1VX0VFRV9NT0RFKTsKKwl0dzMyKFRHM19DUE1VX0VFRV9NT0RFLCB2YWwgfCBURzNfQ1BNVV9FRUVNRF9MUElfRU5BQkxFKTsKK30KKwogc3RhdGljIGludCB0ZzNfd2FpdF9tYWNyb19kb25lKHN0cnVjdCB0ZzMgKnRwKQogewogCWludCBsaW1pdCA9IDEwMDsKQEAgLTE5NDUsOCArMTk4OSw5IEBACiAJCQkgICAgIChNSUlfVEczX0NUUkxfQVNfTUFTVEVSIHwKIAkJCSAgICAgIE1JSV9URzNfQ1RSTF9FTkFCTEVfQVNfTUFTVEVSKSk7CiAKLQkJLyogRW5hYmxlIFNNX0RTUF9DTE9DSyBhbmQgNmRCLiAgKi8KLQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCAweDBjMDApOworCQllcnIgPSBURzNfUEhZX0FVWENUTF9TTURTUF9FTkFCTEUodHApOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKIAogCQkvKiBCbG9jayB0aGUgUEhZIGNvbnRyb2wgYWNjZXNzLiAgKi8KIAkJdGczX3BoeWRzcF93cml0ZSh0cCwgMHg4MDA1LCAweDA4MDApOwpAQCAtMTk2NSwxMyArMjAxMCw3IEBACiAJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0RTUF9BRERSRVNTLCAweDgyMDApOwogCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfQ09OVFJPTCwgMHgwMDAwKTsKIAotCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMyB8fAotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwNCkgewotCQkvKiBTZXQgRXh0ZW5kZWQgcGFja2V0IGxlbmd0aCBiaXQgZm9yIGp1bWJvIGZyYW1lcyAqLwotCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIDB4NDQwMCk7Ci0JfSBlbHNlIHsKLQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCAweDA0MDApOwotCX0KKwlURzNfUEhZX0FVWENUTF9TTURTUF9ESVNBQkxFKHRwKTsKIAogCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19DVFJMLCBwaHk5X29yaWcpOwogCkBAIC0yMDQ3LDggKzIwODYsNyBAQAogCQl9CiAJfQogCi0JaWYgKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNyB8fAotCSAgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTkpICYmCisJaWYgKHRnM19mbGFnKHRwLCA1NzE3X1BMVVMpICYmCiAJICAgICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19NSUlfU0VSREVTKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTIwNjAsNDkgKzIwOTgsNTcgQEAKIAkJdGczX3BoeV90b2dnbGVfYXBkKHRwLCBmYWxzZSk7CiAKIG91dDoKLQlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfQURDX0JVRykgewotCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIDB4MGMwMCk7CisJaWYgKCh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19BRENfQlVHKSAmJgorCSAgICAhVEczX1BIWV9BVVhDVExfU01EU1BfRU5BQkxFKHRwKSkgewogCQl0ZzNfcGh5ZHNwX3dyaXRlKHRwLCAweDIwMWYsIDB4MmFhYSk7CiAJCXRnM19waHlkc3Bfd3JpdGUodHAsIDB4MDAwYSwgMHgwMzIzKTsKLQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCAweDA0MDApOworCQlURzNfUEhZX0FVWENUTF9TTURTUF9ESVNBQkxFKHRwKTsKIAl9CisKIAlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfNTcwNF9BMF9CVUcpIHsKIAkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX01JU0NfU0hEVywgMHg4ZDY4KTsKIAkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX01JU0NfU0hEVywgMHg4ZDY4KTsKIAl9CisKIAlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfQkVSX0JVRykgewotCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIDB4MGMwMCk7Ci0JCXRnM19waHlkc3Bfd3JpdGUodHAsIDB4MDAwYSwgMHgzMTBiKTsKLQkJdGczX3BoeWRzcF93cml0ZSh0cCwgMHgyMDFmLCAweDk1MDYpOwotCQl0ZzNfcGh5ZHNwX3dyaXRlKHRwLCAweDQwMWYsIDB4MTRlMik7Ci0JCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwgMHgwNDAwKTsKKwkJaWYgKCFURzNfUEhZX0FVWENUTF9TTURTUF9FTkFCTEUodHApKSB7CisJCQl0ZzNfcGh5ZHNwX3dyaXRlKHRwLCAweDAwMGEsIDB4MzEwYik7CisJCQl0ZzNfcGh5ZHNwX3dyaXRlKHRwLCAweDIwMWYsIDB4OTUwNik7CisJCQl0ZzNfcGh5ZHNwX3dyaXRlKHRwLCAweDQwMWYsIDB4MTRlMik7CisJCQlURzNfUEhZX0FVWENUTF9TTURTUF9ESVNBQkxFKHRwKTsKKwkJfQogCX0gZWxzZSBpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSklUVEVSX0JVRykgewotCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIDB4MGMwMCk7Ci0JCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfQUREUkVTUywgMHgwMDBhKTsKLQkJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0FESlVTVF9UUklNKSB7Ci0JCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRFNQX1JXX1BPUlQsIDB4MTEwYik7Ci0JCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfVEVTVDEsCi0JCQkJICAgICBNSUlfVEczX1RFU1QxX1RSSU1fRU4gfCAweDQpOwotCQl9IGVsc2UKLQkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfUldfUE9SVCwgMHgwMTBiKTsKLQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCAweDA0MDApOworCQlpZiAoIVRHM19QSFlfQVVYQ1RMX1NNRFNQX0VOQUJMRSh0cCkpIHsKKwkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfQUREUkVTUywgMHgwMDBhKTsKKwkJCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19BREpVU1RfVFJJTSkgeworCQkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfUldfUE9SVCwgMHgxMTBiKTsKKwkJCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfVEVTVDEsCisJCQkJCSAgICAgTUlJX1RHM19URVNUMV9UUklNX0VOIHwgMHg0KTsKKwkJCX0gZWxzZQorCQkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfUldfUE9SVCwgMHgwMTBiKTsKKworCQkJVEczX1BIWV9BVVhDVExfU01EU1BfRElTQUJMRSh0cCk7CisJCX0KIAl9CisKIAkvKiBTZXQgRXh0ZW5kZWQgcGFja2V0IGxlbmd0aCBiaXQgKGJpdCAxNCkgb24gYWxsIGNoaXBzIHRoYXQgKi8KIAkvKiBzdXBwb3J0IGp1bWJvIGZyYW1lcyAqLwogCWlmICgodHAtPnBoeV9pZCAmIFRHM19QSFlfSURfTUFTSykgPT0gVEczX1BIWV9JRF9CQ001NDAxKSB7CiAJCS8qIENhbm5vdCBkbyByZWFkLW1vZGlmeS13cml0ZSBvbiA1NDAxICovCi0JCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwgMHg0YzIwKTsKLQl9IGVsc2UgaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19KVU1CT19DQVBBQkxFKSB7CisJCXRnM19waHlfYXV4Y3RsX3dyaXRlKHRwLCBNSUlfVEczX0FVWENUTF9TSERXU0VMX0FVWENUTCwgMHg0YzIwKTsKKwl9IGVsc2UgaWYgKHRnM19mbGFnKHRwLCBKVU1CT19DQVBBQkxFKSkgewogCQkvKiBTZXQgYml0IDE0IHdpdGggcmVhZC1tb2RpZnktd3JpdGUgdG8gcHJlc2VydmUgb3RoZXIgYml0cyAqLwotCQlpZiAoIXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwgMHgwMDA3KSAmJgotCQkgICAgIXRnM19yZWFkcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCAmdmFsKSkKLQkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwgdmFsIHwgMHg0MDAwKTsKKwkJZXJyID0gdGczX3BoeV9hdXhjdGxfcmVhZCh0cCwKKwkJCQkJICBNSUlfVEczX0FVWENUTF9TSERXU0VMX0FVWENUTCwgJnZhbCk7CisJCWlmICghZXJyKQorCQkJdGczX3BoeV9hdXhjdGxfd3JpdGUodHAsIE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfQVVYQ1RMLAorCQkJCQkgICB2YWwgfCBNSUlfVEczX0FVWENUTF9BQ1RMX0VYVFBLVExFTik7CiAJfQogCiAJLyogU2V0IHBoeSByZWdpc3RlciAweDEwIGJpdCAwIHRvIGhpZ2ggZmlmbyBlbGFzdGljaXR5IHRvIHN1cHBvcnQKIAkgKiBqdW1ibyBmcmFtZXMgdHJhbnNtaXNzaW9uLgogCSAqLwotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfSlVNQk9fQ0FQQUJMRSkgeworCWlmICh0ZzNfZmxhZyh0cCwgSlVNQk9fQ0FQQUJMRSkpIHsKIAkJaWYgKCF0ZzNfcmVhZHBoeSh0cCwgTUlJX1RHM19FWFRfQ1RSTCwgJnZhbCkpCiAJCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRVhUX0NUUkwsCiAJCQkJICAgICB2YWwgfCBNSUlfVEczX0VYVF9DVFJMX0ZJRk9fRUxBU1RJQyk7CkBAIC0yMTIzLDE0ICsyMTY5LDE1IEBACiAJYm9vbCBuZWVkX3ZhdXggPSBmYWxzZTsKIAogCS8qIFRoZSBHUElPcyBkbyBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQgb24gNTc3NjUuICovCi0JaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0lTX05JQykgPT0gMCB8fAorCWlmICghdGczX2ZsYWcodHAsIElTX05JQykgfHwKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTkgfHwKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzY1KQogCQlyZXR1cm47CiAKIAlpZiAoKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzA0IHx8CiAJICAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNCB8fAotCSAgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcpICYmCisJICAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNyB8fAorCSAgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MjApICYmCiAJICAgIHRwLT5wZGV2X3BlZXIgIT0gdHAtPnBkZXYpIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldl9wZWVyOwogCkBAIC0yMTQwLDE3ICsyMTg3LDE2IEBACiAJCWlmIChkZXZfcGVlcikgewogCQkJc3RydWN0IHRnMyAqdHBfcGVlciA9IG5ldGRldl9wcml2KGRldl9wZWVyKTsKIAotCQkJaWYgKHRwX3BlZXItPnRnM19mbGFncyAmIFRHM19GTEFHX0lOSVRfQ09NUExFVEUpCisJCQlpZiAodGczX2ZsYWcodHBfcGVlciwgSU5JVF9DT01QTEVURSkpCiAJCQkJcmV0dXJuOwogCi0JCQlpZiAoKHRwX3BlZXItPnRnM19mbGFncyAmIFRHM19GTEFHX1dPTF9FTkFCTEUpIHx8Ci0JCQkgICAgKHRwX3BlZXItPnRnM19mbGFncyAmIFRHM19GTEFHX0VOQUJMRV9BU0YpKQorCQkJaWYgKHRnM19mbGFnKHRwX3BlZXIsIFdPTF9FTkFCTEUpIHx8CisJCQkgICAgdGczX2ZsYWcodHBfcGVlciwgRU5BQkxFX0FTRikpCiAJCQkJbmVlZF92YXV4ID0gdHJ1ZTsKIAkJfQogCX0KIAotCWlmICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1dPTF9FTkFCTEUpIHx8Ci0JICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikpCisJaWYgKHRnM19mbGFnKHRwLCBXT0xfRU5BQkxFKSB8fCB0ZzNfZmxhZyh0cCwgRU5BQkxFX0FTRikpCiAJCW5lZWRfdmF1eCA9IHRydWU7CiAKIAlpZiAobmVlZF92YXV4KSB7CkBAIC0yMzA0LDExICsyMzUwLDEwIEBACiAJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19FWFRfQ1RSTCwKIAkJCSAgICAgTUlJX1RHM19FWFRfQ1RSTF9GT1JDRV9MRURfT0ZGKTsKIAotCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsCi0JCQkgICAgIE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfUFdSQ1RMIHwKLQkJCSAgICAgTUlJX1RHM19BVVhDVExfUENUTF8xMDBUWF9MUFdSIHwKLQkJCSAgICAgTUlJX1RHM19BVVhDVExfUENUTF9TUFJfSVNPTEFURSB8Ci0JCQkgICAgIE1JSV9URzNfQVVYQ1RMX1BDVExfVlJFR18xMVYpOworCQl2YWwgPSBNSUlfVEczX0FVWENUTF9QQ1RMXzEwMFRYX0xQV1IgfAorCQkgICAgICBNSUlfVEczX0FVWENUTF9QQ1RMX1NQUl9JU09MQVRFIHwKKwkJICAgICAgTUlJX1RHM19BVVhDVExfUENUTF9WUkVHXzExVjsKKwkJdGczX3BoeV9hdXhjdGxfd3JpdGUodHAsIE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfUFdSQ1RMLCB2YWwpOwogCX0KIAogCS8qIFRoZSBQSFkgc2hvdWxkIG5vdCBiZSBwb3dlcmVkIGRvd24gb24gc29tZSBjaGlwcyBiZWNhdXNlCkBAIC0yMzM0LDcgKzIzNzksNyBAQAogLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KIHN0YXRpYyBpbnQgdGczX252cmFtX2xvY2soc3RydWN0IHRnMyAqdHApCiB7Ci0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkgeworCWlmICh0ZzNfZmxhZyh0cCwgTlZSQU0pKSB7CiAJCWludCBpOwogCiAJCWlmICh0cC0+bnZyYW1fbG9ja19jbnQgPT0gMCkgewpAQCAtMjM1Nyw3ICsyNDAyLDcgQEAKIC8qIHRwLT5sb2NrIGlzIGhlbGQuICovCiBzdGF0aWMgdm9pZCB0ZzNfbnZyYW1fdW5sb2NrKHN0cnVjdCB0ZzMgKnRwKQogewotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU0pIHsKKwlpZiAodGczX2ZsYWcodHAsIE5WUkFNKSkgewogCQlpZiAodHAtPm52cmFtX2xvY2tfY250ID4gMCkKIAkJCXRwLT5udnJhbV9sb2NrX2NudC0tOwogCQlpZiAodHAtPm52cmFtX2xvY2tfY250ID09IDApCkBAIC0yMzY4LDggKzI0MTMsNyBAQAogLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KIHN0YXRpYyB2b2lkIHRnM19lbmFibGVfbnZyYW1fYWNjZXNzKHN0cnVjdCB0ZzMgKnRwKQogewotCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpICYmCi0JICAgICEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QUk9URUNURURfTlZSQU0pKSB7CisJaWYgKHRnM19mbGFnKHRwLCA1NzUwX1BMVVMpICYmICF0ZzNfZmxhZyh0cCwgUFJPVEVDVEVEX05WUkFNKSkgewogCQl1MzIgbnZhY2Nlc3MgPSB0cjMyKE5WUkFNX0FDQ0VTUyk7CiAKIAkJdHczMihOVlJBTV9BQ0NFU1MsIG52YWNjZXNzIHwgQUNDRVNTX0VOQUJMRSk7CkBAIC0yMzc5LDggKzI0MjMsNyBAQAogLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KIHN0YXRpYyB2b2lkIHRnM19kaXNhYmxlX252cmFtX2FjY2VzcyhzdHJ1Y3QgdGczICp0cCkKIHsKLQlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKSAmJgotCSAgICAhKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUFJPVEVDVEVEX05WUkFNKSkgeworCWlmICh0ZzNfZmxhZyh0cCwgNTc1MF9QTFVTKSAmJiAhdGczX2ZsYWcodHAsIFBST1RFQ1RFRF9OVlJBTSkpIHsKIAkJdTMyIG52YWNjZXNzID0gdHIzMihOVlJBTV9BQ0NFU1MpOwogCiAJCXR3MzIoTlZSQU1fQUNDRVNTLCBudmFjY2VzcyAmIH5BQ0NFU1NfRU5BQkxFKTsKQEAgLTI0NTAsMTAgKzI0OTMsMTAgQEAKIAogc3RhdGljIHUzMiB0ZzNfbnZyYW1fcGh5c19hZGRyKHN0cnVjdCB0ZzMgKnRwLCB1MzIgYWRkcikKIHsKLQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkgJiYKLQkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTV9CVUZGRVJFRCkgJiYKLQkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfRkxBU0gpICYmCi0JICAgISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX05PX05WUkFNX0FERFJfVFJBTlMpICYmCisJaWYgKHRnM19mbGFnKHRwLCBOVlJBTSkgJiYKKwkgICAgdGczX2ZsYWcodHAsIE5WUkFNX0JVRkZFUkVEKSAmJgorCSAgICB0ZzNfZmxhZyh0cCwgRkxBU0gpICYmCisJICAgICF0ZzNfZmxhZyh0cCwgTk9fTlZSQU1fQUREUl9UUkFOUykgJiYKIAkgICAgKHRwLT5udnJhbV9qZWRlY251bSA9PSBKRURFQ19BVE1FTCkpCiAKIAkJYWRkciA9ICgoYWRkciAvIHRwLT5udnJhbV9wYWdlc2l6ZSkgPDwKQEAgLTI0NjUsMTAgKzI1MDgsMTAgQEAKIAogc3RhdGljIHUzMiB0ZzNfbnZyYW1fbG9naWNhbF9hZGRyKHN0cnVjdCB0ZzMgKnRwLCB1MzIgYWRkcikKIHsKLQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkgJiYKLQkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTV9CVUZGRVJFRCkgJiYKLQkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfRkxBU0gpICYmCi0JICAgISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX05PX05WUkFNX0FERFJfVFJBTlMpICYmCisJaWYgKHRnM19mbGFnKHRwLCBOVlJBTSkgJiYKKwkgICAgdGczX2ZsYWcodHAsIE5WUkFNX0JVRkZFUkVEKSAmJgorCSAgICB0ZzNfZmxhZyh0cCwgRkxBU0gpICYmCisJICAgICF0ZzNfZmxhZyh0cCwgTk9fTlZSQU1fQUREUl9UUkFOUykgJiYKIAkgICAgKHRwLT5udnJhbV9qZWRlY251bSA9PSBKRURFQ19BVE1FTCkpCiAKIAkJYWRkciA9ICgoYWRkciA+PiBBVE1FTF9BVDQ1REIwWDFCX1BBR0VfUE9TKSAqCkBAIC0yNDg4LDcgKzI1MzEsNyBAQAogewogCWludCByZXQ7CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU0pKQorCWlmICghdGczX2ZsYWcodHAsIE5WUkFNKSkKIAkJcmV0dXJuIHRnM19udnJhbV9yZWFkX3VzaW5nX2VlcHJvbSh0cCwgb2Zmc2V0LCB2YWwpOwogCiAJb2Zmc2V0ID0gdGczX252cmFtX3BoeXNfYWRkcih0cCwgb2Zmc2V0KTsKQEAgLTI1ODAsNyArMjYyMyw3IEBACiAJcGNpX3NldF9wb3dlcl9zdGF0ZSh0cC0+cGRldiwgUENJX0QwKTsKIAogCS8qIFN3aXRjaCBvdXQgb2YgVmF1eCBpZiBpdCBpcyBhIE5JQyAqLwotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0lTX05JQykKKwlpZiAodGczX2ZsYWcodHAsIElTX05JQykpCiAJCXR3MzJfd2FpdF9mKEdSQ19MT0NBTF9DVFJMLCB0cC0+Z3JjX2xvY2FsX2N0cmwsIDEwMCk7CiAKIAlyZXR1cm4gMDsKQEAgLTI1OTQsNyArMjYzNyw3IEBACiAJdGczX2VuYWJsZV9yZWdpc3Rlcl9hY2Nlc3ModHApOwogCiAJLyogUmVzdG9yZSB0aGUgQ0xLUkVRIHNldHRpbmcuICovCi0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfQ0xLUkVRX0JVRykgeworCWlmICh0ZzNfZmxhZyh0cCwgQ0xLUkVRX0JVRykpIHsKIAkJdTE2IGxua2N0bDsKIAogCQlwY2lfcmVhZF9jb25maWdfd29yZCh0cC0+cGRldiwKQEAgLTI2MTEsOSArMjY1NCw5IEBACiAJICAgICBtaXNjX2hvc3RfY3RybCB8IE1JU0NfSE9TVF9DVFJMX01BU0tfUENJX0lOVCk7CiAKIAlkZXZpY2Vfc2hvdWxkX3dha2UgPSBkZXZpY2VfbWF5X3dha2V1cCgmdHAtPnBkZXYtPmRldikgJiYKLQkJCSAgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19XT0xfRU5BQkxFKTsKKwkJCSAgICAgdGczX2ZsYWcodHAsIFdPTF9FTkFCTEUpOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfVVNFX1BIWUxJQikgeworCWlmICh0ZzNfZmxhZyh0cCwgVVNFX1BIWUxJQikpIHsKIAkJZG9fbG93X3Bvd2VyID0gZmFsc2U7CiAJCWlmICgodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfQ09OTkVDVEVEKSAmJgogCQkgICAgISh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19MT1dfUE9XRVIpKSB7CkBAIC0yNjM0LDkgKzI2NzcsOCBAQAogCQkJCSAgICAgIEFEVkVSVElTRURfQXV0b25lZyB8CiAJCQkJICAgICAgQURWRVJUSVNFRF8xMGJhc2VUX0hhbGY7CiAKLQkJCWlmICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VOQUJMRV9BU0YpIHx8Ci0JCQkgICAgZGV2aWNlX3Nob3VsZF93YWtlKSB7Ci0JCQkJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19XT0xfU1BFRURfMTAwTUIpCisJCQlpZiAodGczX2ZsYWcodHAsIEVOQUJMRV9BU0YpIHx8IGRldmljZV9zaG91bGRfd2FrZSkgeworCQkJCWlmICh0ZzNfZmxhZyh0cCwgV09MX1NQRUVEXzEwME1CKSkKIAkJCQkJYWR2ZXJ0aXNpbmcgfD0KIAkJCQkJCUFEVkVSVElTRURfMTAwYmFzZVRfSGFsZiB8CiAJCQkJCQlBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwgfApAQCAtMjY4MSw3ICsyNzIzLDcgQEAKIAogCQl2YWwgPSB0cjMyKEdSQ19WQ1BVX0VYVF9DVFJMKTsKIAkJdHczMihHUkNfVkNQVV9FWFRfQ1RSTCwgdmFsIHwgR1JDX1ZDUFVfRVhUX0NUUkxfRElTQUJMRV9XT0wpOwotCX0gZWxzZSBpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikpIHsKKwl9IGVsc2UgaWYgKCF0ZzNfZmxhZyh0cCwgRU5BQkxFX0FTRikpIHsKIAkJaW50IGk7CiAJCXUzMiB2YWw7CiAKQEAgLTI2OTIsNyArMjczNCw3IEBACiAJCQltc2xlZXAoMSk7CiAJCX0KIAl9Ci0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19XT0xfQ0FQKQorCWlmICh0ZzNfZmxhZyh0cCwgV09MX0NBUCkpCiAJCXRnM193cml0ZV9tZW0odHAsIE5JQ19TUkFNX1dPTF9NQk9YLCBXT0xfU0lHTkFUVVJFIHwKIAkJCQkJCSAgICAgV09MX0RSVl9TVEFURV9TSFVURE9XTiB8CiAJCQkJCQkgICAgIFdPTF9EUlZfV09MIHwKQEAgLTI3MDIsOCArMjc0NCwxMyBAQAogCQl1MzIgbWFjX21vZGU7CiAKIAkJaWYgKCEodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfUEhZX1NFUkRFUykpIHsKLQkJCWlmIChkb19sb3dfcG93ZXIpIHsKLQkJCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIDB4NWEpOworCQkJaWYgKGRvX2xvd19wb3dlciAmJgorCQkJICAgICEodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfRkVUKSkgeworCQkJCXRnM19waHlfYXV4Y3RsX3dyaXRlKHRwLAorCQkJCQkgICAgICAgTUlJX1RHM19BVVhDVExfU0hEV1NFTF9QV1JDVEwsCisJCQkJCSAgICAgICBNSUlfVEczX0FVWENUTF9QQ1RMX1dPTF9FTiB8CisJCQkJCSAgICAgICBNSUlfVEczX0FVWENUTF9QQ1RMXzEwMFRYX0xQV1IgfAorCQkJCQkgICAgICAgTUlJX1RHM19BVVhDVExfUENUTF9DTF9BQl9UWERBQyk7CiAJCQkJdWRlbGF5KDQwKTsKIAkJCX0KIApAQCAtMjcxNSw4ICsyNzYyLDcgQEAKIAkJCW1hY19tb2RlIHw9IHRwLT5tYWNfbW9kZSAmIE1BQ19NT0RFX0xJTktfUE9MQVJJVFk7CiAJCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09CiAJCQkgICAgQVNJQ19SRVZfNTcwMCkgewotCQkJCXUzMiBzcGVlZCA9ICh0cC0+dGczX2ZsYWdzICYKLQkJCQkJICAgICBURzNfRkxBR19XT0xfU1BFRURfMTAwTUIpID8KKwkJCQl1MzIgc3BlZWQgPSB0ZzNfZmxhZyh0cCwgV09MX1NQRUVEXzEwME1CKSA/CiAJCQkJCSAgICAgU1BFRURfMTAwIDogU1BFRURfMTA7CiAJCQkJaWYgKHRnM181NzAwX2xpbmtfcG9sYXJpdHkodHAsIHNwZWVkKSkKIAkJCQkJbWFjX21vZGUgfD0gTUFDX01PREVfTElOS19QT0xBUklUWTsKQEAgLTI3MjcsMTcgKzI3NzMsMTUgQEAKIAkJCW1hY19tb2RlID0gTUFDX01PREVfUE9SVF9NT0RFX1RCSTsKIAkJfQogCi0JCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKSkKKwkJaWYgKCF0ZzNfZmxhZyh0cCwgNTc1MF9QTFVTKSkKIAkJCXR3MzIoTUFDX0xFRF9DVFJMLCB0cC0+bGVkX2N0cmwpOwogCiAJCW1hY19tb2RlIHw9IE1BQ19NT0RFX01BR0lDX1BLVF9FTkFCTEU7Ci0JCWlmICgoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSAmJgotCQkgICAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3ODBfQ0xBU1MpKSAmJgotCQkgICAgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikgfHwKLQkJICAgICAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfQVBFKSkpCisJCWlmICgodGczX2ZsYWcodHAsIDU3MDVfUExVUykgJiYgIXRnM19mbGFnKHRwLCA1NzgwX0NMQVNTKSkgJiYKKwkJICAgICh0ZzNfZmxhZyh0cCwgRU5BQkxFX0FTRikgfHwgdGczX2ZsYWcodHAsIEVOQUJMRV9BUEUpKSkKIAkJCW1hY19tb2RlIHw9IE1BQ19NT0RFX0tFRVBfRlJBTUVfSU5fV09MOwogCi0JCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpCisJCWlmICh0ZzNfZmxhZyh0cCwgRU5BQkxFX0FQRSkpCiAJCQltYWNfbW9kZSB8PSBNQUNfTU9ERV9BUEVfVFhfRU4gfAogCQkJCSAgICBNQUNfTU9ERV9BUEVfUlhfRU4gfAogCQkJCSAgICBNQUNfTU9ERV9UREVfRU5BQkxFOwpAQCAtMjc0OSw3ICsyNzkzLDcgQEAKIAkJdWRlbGF5KDEwKTsKIAl9CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfV09MX1NQRUVEXzEwME1CKSAmJgorCWlmICghdGczX2ZsYWcodHAsIFdPTF9TUEVFRF8xMDBNQikgJiYKIAkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzAwIHx8CiAJICAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMSkpIHsKIAkJdTMyIGJhc2VfdmFsOwpAQCAtMjc2MCwxMiArMjgwNCwxMSBAQAogCiAJCXR3MzJfd2FpdF9mKFRHM1BDSV9DTE9DS19DVFJMLCBiYXNlX3ZhbCB8IENMT0NLX0NUUkxfQUxUQ0xLIHwKIAkJCSAgICBDTE9DS19DVFJMX1BXUkRPV05fUExMMTMzLCA0MCk7Ci0JfSBlbHNlIGlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzgwX0NMQVNTKSB8fAotCQkgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0NQTVVfUFJFU0VOVCkgfHwKLQkJICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KSkgeworCX0gZWxzZSBpZiAodGczX2ZsYWcodHAsIDU3ODBfQ0xBU1MpIHx8CisJCSAgIHRnM19mbGFnKHRwLCBDUE1VX1BSRVNFTlQpIHx8CisJCSAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KSB7CiAJCS8qIGRvIG5vdGhpbmcgKi8KLQl9IGVsc2UgaWYgKCEoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKSAmJgotCQkgICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikpKSB7CisJfSBlbHNlIGlmICghKHRnM19mbGFnKHRwLCA1NzUwX1BMVVMpICYmIHRnM19mbGFnKHRwLCBFTkFCTEVfQVNGKSkpIHsKIAkJdTMyIG5ld2JpdHMxLCBuZXdiaXRzMjsKIAogCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDAgfHwKQEAgLTI3NzQsNyArMjgxNyw3IEBACiAJCQkJICAgIENMT0NLX0NUUkxfVFhDTEtfRElTQUJMRSB8CiAJCQkJICAgIENMT0NLX0NUUkxfQUxUQ0xLKTsKIAkJCW5ld2JpdHMyID0gbmV3Yml0czEgfCBDTE9DS19DVFJMXzQ0TUhaX0NPUkU7Ci0JCX0gZWxzZSBpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpIHsKKwkJfSBlbHNlIGlmICh0ZzNfZmxhZyh0cCwgNTcwNV9QTFVTKSkgewogCQkJbmV3Yml0czEgPSBDTE9DS19DVFJMXzYyNV9DT1JFOwogCQkJbmV3Yml0czIgPSBuZXdiaXRzMSB8IENMT0NLX0NUUkxfQUxUQ0xLOwogCQl9IGVsc2UgewpAQCAtMjc4OCw3ICsyODMxLDcgQEAKIAkJdHczMl93YWl0X2YoVEczUENJX0NMT0NLX0NUUkwsIHRwLT5wY2lfY2xvY2tfY3RybCB8IG5ld2JpdHMyLAogCQkJICAgIDQwKTsKIAotCQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykpIHsKKwkJaWYgKCF0ZzNfZmxhZyh0cCwgNTcwNV9QTFVTKSkgewogCQkJdTMyIG5ld2JpdHMzOwogCiAJCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDAgfHwKQEAgLTI4MDUsOCArMjg0OCw3IEBACiAJCX0KIAl9CiAKLQlpZiAoIShkZXZpY2Vfc2hvdWxkX3dha2UpICYmCi0JICAgICEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VOQUJMRV9BU0YpKQorCWlmICghKGRldmljZV9zaG91bGRfd2FrZSkgJiYgIXRnM19mbGFnKHRwLCBFTkFCTEVfQVNGKSkKIAkJdGczX3Bvd2VyX2Rvd25fcGh5KHRwLCBkb19sb3dfcG93ZXIpOwogCiAJdGczX2Zyb2JfYXV4X3Bvd2VyKHRwKTsKQEAgLTI4MTgsNyArMjg2MCw3IEBACiAKIAkJdmFsICY9IH4oKDEgPDwgMTYpIHwgKDEgPDwgNCkgfCAoMSA8PCAyKSB8ICgxIDw8IDEpIHwgMSk7CiAJCXR3MzIoMHg3ZDAwLCB2YWwpOwotCQlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikpIHsKKwkJaWYgKCF0ZzNfZmxhZyh0cCwgRU5BQkxFX0FTRikpIHsKIAkJCWludCBlcnI7CiAKIAkJCWVyciA9IHRnM19udnJhbV9sb2NrKHRwKTsKQEAgLTI4MzcsNyArMjg3OSw3IEBACiB7CiAJdGczX3Bvd2VyX2Rvd25fcHJlcGFyZSh0cCk7CiAKLQlwY2lfd2FrZV9mcm9tX2QzKHRwLT5wZGV2LCB0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfV09MX0VOQUJMRSk7CisJcGNpX3dha2VfZnJvbV9kMyh0cC0+cGRldiwgdGczX2ZsYWcodHAsIFdPTF9FTkFCTEUpKTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHRwLT5wZGV2LCBQQ0lfRDNob3QpOwogfQogCkBAIC0yODg4LDEwNiArMjkzMCw1NCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgdGczX3BoeV9jb3BwZXJfYmVnaW4oc3RydWN0IHRnMyAqdHApCitzdGF0aWMgaW50IHRnM19waHlfYXV0b25lZ19jZmcoc3RydWN0IHRnMyAqdHAsIHUzMiBhZHZlcnRpc2UsIHUzMiBmbG93Y3RybCkKIHsKLQl1MzIgbmV3X2FkdjsKLQlpbnQgaTsKKwlpbnQgZXJyID0gMDsKKwl1MzIgdmFsLCBuZXdfYWR2OwogCi0JaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0xPV19QT1dFUikgewotCQkvKiBFbnRlcmluZyBsb3cgcG93ZXIgbW9kZS4gIERpc2FibGUgZ2lnYWJpdCBhbmQKLQkJICogMTAwYmFzZVQgYWR2ZXJ0aXNlbWVudHMuCi0JCSAqLwotCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQ1RSTCwgMCk7CisJbmV3X2FkdiA9IEFEVkVSVElTRV9DU01BOworCWlmIChhZHZlcnRpc2UgJiBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZikKKwkJbmV3X2FkdiB8PSBBRFZFUlRJU0VfMTBIQUxGOworCWlmIChhZHZlcnRpc2UgJiBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCkKKwkJbmV3X2FkdiB8PSBBRFZFUlRJU0VfMTBGVUxMOworCWlmIChhZHZlcnRpc2UgJiBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYpCisJCW5ld19hZHYgfD0gQURWRVJUSVNFXzEwMEhBTEY7CisJaWYgKGFkdmVydGlzZSAmIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCkKKwkJbmV3X2FkdiB8PSBBRFZFUlRJU0VfMTAwRlVMTDsKIAotCQluZXdfYWR2ID0gKEFEVkVSVElTRV8xMEhBTEYgfCBBRFZFUlRJU0VfMTBGVUxMIHwKLQkJCSAgIEFEVkVSVElTRV9DU01BIHwgQURWRVJUSVNFX1BBVVNFX0NBUCk7Ci0JCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfV09MX1NQRUVEXzEwME1CKQotCQkJbmV3X2FkdiB8PSAoQURWRVJUSVNFXzEwMEhBTEYgfCBBRFZFUlRJU0VfMTAwRlVMTCk7CisJbmV3X2FkdiB8PSB0ZzNfYWR2ZXJ0X2Zsb3djdHJsXzEwMDBUKGZsb3djdHJsKTsKIAotCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9BRFZFUlRJU0UsIG5ld19hZHYpOwotCX0gZWxzZSBpZiAodHAtPmxpbmtfY29uZmlnLnNwZWVkID09IFNQRUVEX0lOVkFMSUQpIHsKLQkJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHXzEwXzEwMF9PTkxZKQotCQkJdHAtPmxpbmtfY29uZmlnLmFkdmVydGlzaW5nICY9Ci0JCQkJfihBRFZFUlRJU0VEXzEwMDBiYXNlVF9IYWxmIHwKLQkJCQkgIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwpOworCWVyciA9IHRnM193cml0ZXBoeSh0cCwgTUlJX0FEVkVSVElTRSwgbmV3X2Fkdik7CisJaWYgKGVycikKKwkJZ290byBkb25lOwogCi0JCW5ld19hZHYgPSBBRFZFUlRJU0VfQ1NNQTsKLQkJaWYgKHRwLT5saW5rX2NvbmZpZy5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTBiYXNlVF9IYWxmKQotCQkJbmV3X2FkdiB8PSBBRFZFUlRJU0VfMTBIQUxGOwotCQlpZiAodHAtPmxpbmtfY29uZmlnLmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwpCi0JCQluZXdfYWR2IHw9IEFEVkVSVElTRV8xMEZVTEw7Ci0JCWlmICh0cC0+bGlua19jb25maWcuYWR2ZXJ0aXNpbmcgJiBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYpCi0JCQluZXdfYWR2IHw9IEFEVkVSVElTRV8xMDBIQUxGOwotCQlpZiAodHAtPmxpbmtfY29uZmlnLmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsKQotCQkJbmV3X2FkdiB8PSBBRFZFUlRJU0VfMTAwRlVMTDsKKwlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfMTBfMTAwX09OTFkpCisJCWdvdG8gZG9uZTsKIAotCQluZXdfYWR2IHw9IHRnM19hZHZlcnRfZmxvd2N0cmxfMTAwMFQodHAtPmxpbmtfY29uZmlnLmZsb3djdHJsKTsKKwluZXdfYWR2ID0gMDsKKwlpZiAoYWR2ZXJ0aXNlICYgQURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZikKKwkJbmV3X2FkdiB8PSBNSUlfVEczX0NUUkxfQURWXzEwMDBfSEFMRjsKKwlpZiAoYWR2ZXJ0aXNlICYgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCkKKwkJbmV3X2FkdiB8PSBNSUlfVEczX0NUUkxfQURWXzEwMDBfRlVMTDsKIAotCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9BRFZFUlRJU0UsIG5ld19hZHYpOworCWlmICh0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTcwMV9BMCB8fAorCSAgICB0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTcwMV9CMCkKKwkJbmV3X2FkdiB8PSAoTUlJX1RHM19DVFJMX0FTX01BU1RFUiB8CisJCQkgICAgTUlJX1RHM19DVFJMX0VOQUJMRV9BU19NQVNURVIpOwogCi0JCWlmICh0cC0+bGlua19jb25maWcuYWR2ZXJ0aXNpbmcgJgotCQkgICAgKEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYgfCBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsKSkgewotCQkJbmV3X2FkdiA9IDA7Ci0JCQlpZiAodHAtPmxpbmtfY29uZmlnLmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZikKLQkJCQluZXdfYWR2IHw9IE1JSV9URzNfQ1RSTF9BRFZfMTAwMF9IQUxGOwotCQkJaWYgKHRwLT5saW5rX2NvbmZpZy5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwpCi0JCQkJbmV3X2FkdiB8PSBNSUlfVEczX0NUUkxfQURWXzEwMDBfRlVMTDsKLQkJCWlmICghKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHXzEwXzEwMF9PTkxZKSAmJgotCQkJICAgICh0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTcwMV9BMCB8fAotCQkJICAgICB0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTcwMV9CMCkpCi0JCQkJbmV3X2FkdiB8PSAoTUlJX1RHM19DVFJMX0FTX01BU1RFUiB8Ci0JCQkJCSAgICBNSUlfVEczX0NUUkxfRU5BQkxFX0FTX01BU1RFUik7Ci0JCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQ1RSTCwgbmV3X2Fkdik7Ci0JCX0gZWxzZSB7Ci0JCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQ1RSTCwgMCk7Ci0JCX0KLQl9IGVsc2UgewotCQluZXdfYWR2ID0gdGczX2FkdmVydF9mbG93Y3RybF8xMDAwVCh0cC0+bGlua19jb25maWcuZmxvd2N0cmwpOwotCQluZXdfYWR2IHw9IEFEVkVSVElTRV9DU01BOworCWVyciA9IHRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19DVFJMLCBuZXdfYWR2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGRvbmU7CiAKLQkJLyogQXNraW5nIGZvciBhIHNwZWNpZmljIGxpbmsgbW9kZS4gKi8KLQkJaWYgKHRwLT5saW5rX2NvbmZpZy5zcGVlZCA9PSBTUEVFRF8xMDAwKSB7Ci0JCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9BRFZFUlRJU0UsIG5ld19hZHYpOworCWlmICghKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0VFRV9DQVApKQorCQlnb3RvIGRvbmU7CiAKLQkJCWlmICh0cC0+bGlua19jb25maWcuZHVwbGV4ID09IERVUExFWF9GVUxMKQotCQkJCW5ld19hZHYgPSBNSUlfVEczX0NUUkxfQURWXzEwMDBfRlVMTDsKLQkJCWVsc2UKLQkJCQluZXdfYWR2ID0gTUlJX1RHM19DVFJMX0FEVl8xMDAwX0hBTEY7Ci0JCQlpZiAodHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3MDFfQTAgfHwKLQkJCSAgICB0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTcwMV9CMCkKLQkJCQluZXdfYWR2IHw9IChNSUlfVEczX0NUUkxfQVNfTUFTVEVSIHwKLQkJCQkJICAgIE1JSV9URzNfQ1RSTF9FTkFCTEVfQVNfTUFTVEVSKTsKLQkJfSBlbHNlIHsKLQkJCWlmICh0cC0+bGlua19jb25maWcuc3BlZWQgPT0gU1BFRURfMTAwKSB7Ci0JCQkJaWYgKHRwLT5saW5rX2NvbmZpZy5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCi0JCQkJCW5ld19hZHYgfD0gQURWRVJUSVNFXzEwMEZVTEw7Ci0JCQkJZWxzZQotCQkJCQluZXdfYWR2IHw9IEFEVkVSVElTRV8xMDBIQUxGOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAodHAtPmxpbmtfY29uZmlnLmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKLQkJCQkJbmV3X2FkdiB8PSBBRFZFUlRJU0VfMTBGVUxMOwotCQkJCWVsc2UKLQkJCQkJbmV3X2FkdiB8PSBBRFZFUlRJU0VfMTBIQUxGOwotCQkJfQotCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfQURWRVJUSVNFLCBuZXdfYWR2KTsKKwl0dzMyKFRHM19DUE1VX0VFRV9NT0RFLAorCSAgICAgdHIzMihURzNfQ1BNVV9FRUVfTU9ERSkgJiB+VEczX0NQTVVfRUVFTURfTFBJX0VOQUJMRSk7CiAKLQkJCW5ld19hZHYgPSAwOwotCQl9Ci0KLQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0NUUkwsIG5ld19hZHYpOwotCX0KLQotCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19FRUVfQ0FQKSB7Ci0JCXUzMiB2YWw7Ci0KLQkJdHczMihURzNfQ1BNVV9FRUVfTU9ERSwKLQkJICAgICB0cjMyKFRHM19DUE1VX0VFRV9NT0RFKSAmIH5URzNfQ1BNVV9FRUVNRF9MUElfRU5BQkxFKTsKLQotCQkvKiBFbmFibGUgU01fRFNQIGNsb2NrIGFuZCB0eCA2ZEIgY29kaW5nLiAqLwotCQl2YWwgPSBNSUlfVEczX0FVWENUTF9TSERXU0VMX0FVWENUTCB8Ci0JCSAgICAgIE1JSV9URzNfQVVYQ1RMX0FDVExfU01EU1BfRU5BIHwKLQkJICAgICAgTUlJX1RHM19BVVhDVExfQUNUTF9UWF82REI7Ci0JCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwgdmFsKTsKKwllcnIgPSBURzNfUEhZX0FVWENUTF9TTURTUF9FTkFCTEUodHApOworCWlmICghZXJyKSB7CisJCXUzMiBlcnIyOwogCiAJCXN3aXRjaCAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpKSB7CiAJCWNhc2UgQVNJQ19SRVZfNTcxNzoKQEAgLTMwMDQsMjIgKzI5OTQsNjYgQEAKIAkJfQogCiAJCXZhbCA9IDA7Ci0JCWlmICh0cC0+bGlua19jb25maWcuYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgewotCQkJLyogQWR2ZXJ0aXNlIDEwMC1CYXNlVFggRUVFIGFiaWxpdHkgKi8KLQkJCWlmICh0cC0+bGlua19jb25maWcuYWR2ZXJ0aXNpbmcgJgotCQkJICAgIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCkKLQkJCQl2YWwgfD0gTURJT19BTl9FRUVfQURWXzEwMFRYOwotCQkJLyogQWR2ZXJ0aXNlIDEwMDAtQmFzZVQgRUVFIGFiaWxpdHkgKi8KLQkJCWlmICh0cC0+bGlua19jb25maWcuYWR2ZXJ0aXNpbmcgJgotCQkJICAgIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwpCi0JCQkJdmFsIHw9IE1ESU9fQU5fRUVFX0FEVl8xMDAwVDsKLQkJfQotCQl0ZzNfcGh5X2NsNDVfd3JpdGUodHAsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0VFRV9BRFYsIHZhbCk7CisJCS8qIEFkdmVydGlzZSAxMDAtQmFzZVRYIEVFRSBhYmlsaXR5ICovCisJCWlmIChhZHZlcnRpc2UgJiBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwpCisJCQl2YWwgfD0gTURJT19BTl9FRUVfQURWXzEwMFRYOworCQkvKiBBZHZlcnRpc2UgMTAwMC1CYXNlVCBFRUUgYWJpbGl0eSAqLworCQlpZiAoYWR2ZXJ0aXNlICYgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCkKKwkJCXZhbCB8PSBNRElPX0FOX0VFRV9BRFZfMTAwMFQ7CisJCWVyciA9IHRnM19waHlfY2w0NV93cml0ZSh0cCwgTURJT19NTURfQU4sIE1ESU9fQU5fRUVFX0FEViwgdmFsKTsKIAotCQkvKiBUdXJuIG9mZiBTTV9EU1AgY2xvY2suICovCi0JCXZhbCA9IE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfQVVYQ1RMIHwKLQkJICAgICAgTUlJX1RHM19BVVhDVExfQUNUTF9UWF82REI7Ci0JCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwgdmFsKTsKKwkJZXJyMiA9IFRHM19QSFlfQVVYQ1RMX1NNRFNQX0RJU0FCTEUodHApOworCQlpZiAoIWVycikKKwkJCWVyciA9IGVycjI7CisJfQorCitkb25lOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHRnM19waHlfY29wcGVyX2JlZ2luKHN0cnVjdCB0ZzMgKnRwKQoreworCXUzMiBuZXdfYWR2OworCWludCBpOworCisJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0xPV19QT1dFUikgeworCQluZXdfYWR2ID0gQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYgfAorCQkJICBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbDsKKwkJaWYgKHRnM19mbGFnKHRwLCBXT0xfU1BFRURfMTAwTUIpKQorCQkJbmV3X2FkdiB8PSBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYgfAorCQkJCSAgIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbDsKKworCQl0ZzNfcGh5X2F1dG9uZWdfY2ZnKHRwLCBuZXdfYWR2LAorCQkJCSAgICBGTE9XX0NUUkxfVFggfCBGTE9XX0NUUkxfUlgpOworCX0gZWxzZSBpZiAodHAtPmxpbmtfY29uZmlnLnNwZWVkID09IFNQRUVEX0lOVkFMSUQpIHsKKwkJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHXzEwXzEwMF9PTkxZKQorCQkJdHAtPmxpbmtfY29uZmlnLmFkdmVydGlzaW5nICY9CisJCQkJfihBRFZFUlRJU0VEXzEwMDBiYXNlVF9IYWxmIHwKKwkJCQkgIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwpOworCisJCXRnM19waHlfYXV0b25lZ19jZmcodHAsIHRwLT5saW5rX2NvbmZpZy5hZHZlcnRpc2luZywKKwkJCQkgICAgdHAtPmxpbmtfY29uZmlnLmZsb3djdHJsKTsKKwl9IGVsc2UgeworCQkvKiBBc2tpbmcgZm9yIGEgc3BlY2lmaWMgbGluayBtb2RlLiAqLworCQlpZiAodHAtPmxpbmtfY29uZmlnLnNwZWVkID09IFNQRUVEXzEwMDApIHsKKwkJCWlmICh0cC0+bGlua19jb25maWcuZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQkJCW5ld19hZHYgPSBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsOworCQkJZWxzZQorCQkJCW5ld19hZHYgPSBBRFZFUlRJU0VEXzEwMDBiYXNlVF9IYWxmOworCQl9IGVsc2UgaWYgKHRwLT5saW5rX2NvbmZpZy5zcGVlZCA9PSBTUEVFRF8xMDApIHsKKwkJCWlmICh0cC0+bGlua19jb25maWcuZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQkJCW5ld19hZHYgPSBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGw7CisJCQllbHNlCisJCQkJbmV3X2FkdiA9IEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZjsKKwkJfSBlbHNlIHsKKwkJCWlmICh0cC0+bGlua19jb25maWcuZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQkJCW5ld19hZHYgPSBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbDsKKwkJCWVsc2UKKwkJCQluZXdfYWR2ID0gQURWRVJUSVNFRF8xMGJhc2VUX0hhbGY7CisJCX0KKworCQl0ZzNfcGh5X2F1dG9uZWdfY2ZnKHRwLCBuZXdfYWR2LAorCQkJCSAgICB0cC0+bGlua19jb25maWcuZmxvd2N0cmwpOwogCX0KIAogCWlmICh0cC0+bGlua19jb25maWcuYXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUgJiYKQEAgLTMwNzcsNyArMzExMSw3IEBACiAKIAkvKiBUdXJuIG9mZiB0YXAgcG93ZXIgbWFuYWdlbWVudC4gKi8KIAkvKiBTZXQgRXh0ZW5kZWQgcGFja2V0IGxlbmd0aCBiaXQgKi8KLQllcnIgID0gdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCAweDRjMjApOworCWVyciA9IHRnM19waHlfYXV4Y3RsX3dyaXRlKHRwLCBNSUlfVEczX0FVWENUTF9TSERXU0VMX0FVWENUTCwgMHg0YzIwKTsKIAogCWVyciB8PSB0ZzNfcGh5ZHNwX3dyaXRlKHRwLCAweDAwMTIsIDB4MTgwNCk7CiAJZXJyIHw9IHRnM19waHlkc3Bfd3JpdGUodHAsIDB4MDAxMywgMHgxMjA0KTsKQEAgLTMxNDAsNyArMzE3NCw3IEBACiAJCWlmIChjdXJhZHYgIT0gcmVxYWR2KQogCQkJcmV0dXJuIDA7CiAKLQkJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19QQVVTRV9BVVRPTkVHKQorCQlpZiAodGczX2ZsYWcodHAsIFBBVVNFX0FVVE9ORUcpKQogCQkJdGczX3JlYWRwaHkodHAsIE1JSV9MUEEsIHJtdGFkdik7CiAJfSBlbHNlIHsKIAkJLyogUmVwcm9ncmFtIHRoZSBhZHZlcnRpc2VtZW50IHJlZ2lzdGVyLCBldmVuIGlmIGl0CkBAIC0zMTgzLDcgKzMyMTcsNyBAQAogCQl1ZGVsYXkoODApOwogCX0KIAotCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwgMHgwMik7CisJdGczX3BoeV9hdXhjdGxfd3JpdGUodHAsIE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfUFdSQ1RMLCAwKTsKIAogCS8qIFNvbWUgdGhpcmQtcGFydHkgUEhZcyBuZWVkIHRvIGJlIHJlc2V0IG9uIGxpbmsgZ29pbmcKIAkgKiBkb3duLgpAQCAtMzIwMyw3ICszMjM3LDcgQEAKIAlpZiAoKHRwLT5waHlfaWQgJiBURzNfUEhZX0lEX01BU0spID09IFRHM19QSFlfSURfQkNNNTQwMSkgewogCQl0ZzNfcmVhZHBoeSh0cCwgTUlJX0JNU1IsICZibXNyKTsKIAkJaWYgKHRnM19yZWFkcGh5KHRwLCBNSUlfQk1TUiwgJmJtc3IpIHx8Ci0JCSAgICAhKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19JTklUX0NPTVBMRVRFKSkKKwkJICAgICF0ZzNfZmxhZyh0cCwgSU5JVF9DT01QTEVURSkpCiAJCQlibXNyID0gMDsKIAogCQlpZiAoIShibXNyICYgQk1TUl9MU1RBVFVTKSkgewpAQCAtMzI2NCwxMSArMzI5OCwxMyBAQAogCWN1cnJlbnRfZHVwbGV4ID0gRFVQTEVYX0lOVkFMSUQ7CiAKIAlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfQ0FQQUNJVElWRV9DT1VQTElORykgewotCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIDB4NDAwNyk7Ci0JCXRnM19yZWFkcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCAmdmFsKTsKLQkJaWYgKCEodmFsICYgKDEgPDwgMTApKSkgewotCQkJdmFsIHw9ICgxIDw8IDEwKTsKLQkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwgdmFsKTsKKwkJZXJyID0gdGczX3BoeV9hdXhjdGxfcmVhZCh0cCwKKwkJCQkJICBNSUlfVEczX0FVWENUTF9TSERXU0VMX01JU0NURVNULAorCQkJCQkgICZ2YWwpOworCQlpZiAoIWVyciAmJiAhKHZhbCAmICgxIDw8IDEwKSkpIHsKKwkJCXRnM19waHlfYXV4Y3RsX3dyaXRlKHRwLAorCQkJCQkgICAgIE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfTUlTQ1RFU1QsCisJCQkJCSAgICAgdmFsIHwgKDEgPDwgMTApKTsKIAkJCWdvdG8gcmVsaW5rOwogCQl9CiAJfQpAQCAtMzM0MSw4ICszMzc3LDggQEAKIAkJdGczX3BoeV9jb3BwZXJfYmVnaW4odHApOwogCiAJCXRnM19yZWFkcGh5KHRwLCBNSUlfQk1TUiwgJmJtc3IpOwotCQlpZiAoIXRnM19yZWFkcGh5KHRwLCBNSUlfQk1TUiwgJmJtc3IpICYmCi0JCSAgICAoYm1zciAmIEJNU1JfTFNUQVRVUykpCisJCWlmICgoIXRnM19yZWFkcGh5KHRwLCBNSUlfQk1TUiwgJmJtc3IpICYmIChibXNyICYgQk1TUl9MU1RBVFVTKSkgfHwKKwkJICAgICh0cC0+bWFjX21vZGUgJiBNQUNfTU9ERV9QT1JUX0lOVF9MUEJBQ0spKQogCQkJY3VycmVudF9saW5rX3VwID0gMTsKIAl9CiAKQEAgLTMzODUsNyArMzQyMSw3IEBACiAKIAl0ZzNfcGh5X2VlZV9hZGp1c3QodHAsIGN1cnJlbnRfbGlua191cCk7CiAKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1VTRV9MSU5LQ0hHX1JFRykgeworCWlmICh0ZzNfZmxhZyh0cCwgVVNFX0xJTktDSEdfUkVHKSkgewogCQkvKiBQb2xsZWQgdmlhIHRpbWVyLiAqLwogCQl0dzMyX2YoTUFDX0VWRU5ULCAwKTsKIAl9IGVsc2UgewpAQCAtMzM5Niw4ICszNDMyLDcgQEAKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDAgJiYKIAkgICAgY3VycmVudF9saW5rX3VwID09IDEgJiYKIAkgICAgdHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9zcGVlZCA9PSBTUEVFRF8xMDAwICYmCi0JICAgICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1BDSVhfTU9ERSkgfHwKLQkgICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUENJX0hJR0hfU1BFRUQpKSkgeworCSAgICAodGczX2ZsYWcodHAsIFBDSVhfTU9ERSkgfHwgdGczX2ZsYWcodHAsIFBDSV9ISUdIX1NQRUVEKSkpIHsKIAkJdWRlbGF5KDEyMCk7CiAJCXR3MzJfZihNQUNfU1RBVFVTLAogCQkgICAgIChNQUNfU1RBVFVTX1NZTkNfQ0hBTkdFRCB8CkBAIC0zNDA5LDcgKzM0NDQsNyBAQAogCX0KIAogCS8qIFByZXZlbnQgc2VuZCBCRCBjb3JydXB0aW9uLiAqLwotCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0NMS1JFUV9CVUcpIHsKKwlpZiAodGczX2ZsYWcodHAsIENMS1JFUV9CVUcpKSB7CiAJCXUxNiBvbGRsbmtjdGwsIG5ld2xua2N0bDsKIAogCQlwY2lfcmVhZF9jb25maWdfd29yZCh0cC0+cGRldiwKQEAgLTM4MDQsNyArMzgzOSw3IEBACiAJaW50IGk7CiAKIAkvKiBSZXNldCB3aGVuIGluaXR0aW5nIGZpcnN0IHRpbWUgb3Igd2UgaGF2ZSBhIGxpbmsuICovCi0JaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfSU5JVF9DT01QTEVURSkgJiYKKwlpZiAodGczX2ZsYWcodHAsIElOSVRfQ09NUExFVEUpICYmCiAJICAgICEobWFjX3N0YXR1cyAmIE1BQ19TVEFUVVNfUENTX1NZTkNFRCkpCiAJCXJldHVybjsKIApAQCAtNDA2NSw5ICs0MTAwLDkgQEAKIAlvcmlnX2FjdGl2ZV9zcGVlZCA9IHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfc3BlZWQ7CiAJb3JpZ19hY3RpdmVfZHVwbGV4ID0gdHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9kdXBsZXg7CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX0FVVE9ORUcpICYmCisJaWYgKCF0ZzNfZmxhZyh0cCwgSFdfQVVUT05FRykgJiYKIAkgICAgbmV0aWZfY2Fycmllcl9vayh0cC0+ZGV2KSAmJgotCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0lOSVRfQ09NUExFVEUpKSB7CisJICAgIHRnM19mbGFnKHRwLCBJTklUX0NPTVBMRVRFKSkgewogCQltYWNfc3RhdHVzID0gdHIzMihNQUNfU1RBVFVTKTsKIAkJbWFjX3N0YXR1cyAmPSAoTUFDX1NUQVRVU19QQ1NfU1lOQ0VEIHwKIAkJCSAgICAgICBNQUNfU1RBVFVTX1NJR05BTF9ERVQgfApAQCAtNDA5OCw3ICs0MTMzLDcgQEAKIAljdXJyZW50X2xpbmtfdXAgPSAwOwogCW1hY19zdGF0dXMgPSB0cjMyKE1BQ19TVEFUVVMpOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSFdfQVVUT05FRykKKwlpZiAodGczX2ZsYWcodHAsIEhXX0FVVE9ORUcpKQogCQljdXJyZW50X2xpbmtfdXAgPSB0ZzNfc2V0dXBfZmliZXJfaHdfYXV0b25lZyh0cCwgbWFjX3N0YXR1cyk7CiAJZWxzZQogCQljdXJyZW50X2xpbmtfdXAgPSB0ZzNfc2V0dXBfZmliZXJfYnlfaGFuZCh0cCwgbWFjX3N0YXR1cyk7CkBAIC00Mjk3LDcgKzQzMzIsNyBAQAogCQkJCQljdXJyZW50X2R1cGxleCA9IERVUExFWF9GVUxMOwogCQkJCWVsc2UKIAkJCQkJY3VycmVudF9kdXBsZXggPSBEVVBMRVhfSEFMRjsKLQkJCX0gZWxzZSBpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3ODBfQ0xBU1MpKSB7CisJCQl9IGVsc2UgaWYgKCF0ZzNfZmxhZyh0cCwgNTc4MF9DTEFTUykpIHsKIAkJCQkvKiBMaW5rIGlzIHVwIHZpYSBwYXJhbGxlbCBkZXRlY3QgKi8KIAkJCX0gZWxzZSB7CiAJCQkJY3VycmVudF9saW5rX3VwID0gMDsKQEAgLTQzOTQsNiArNDQyOSw3IEBACiAKIHN0YXRpYyBpbnQgdGczX3NldHVwX3BoeShzdHJ1Y3QgdGczICp0cCwgaW50IGZvcmNlX3Jlc2V0KQogeworCXUzMiB2YWw7CiAJaW50IGVycjsKIAogCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19QSFlfU0VSREVTKQpAQCAtNDQwNCw3ICs0NDQwLDcgQEAKIAkJZXJyID0gdGczX3NldHVwX2NvcHBlcl9waHkodHAsIGZvcmNlX3Jlc2V0KTsKIAogCWlmIChHRVRfQ0hJUF9SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQ0hJUFJFVl81Nzg0X0FYKSB7Ci0JCXUzMiB2YWwsIHNjYWxlOworCQl1MzIgc2NhbGU7CiAKIAkJdmFsID0gdHIzMihURzNfQ1BNVV9DTENLX1NUQVQpICYgQ1BNVV9DTENLX1NUQVRfTUFDX0NMQ0tfTUFTSzsKIAkJaWYgKHZhbCA9PSBDUE1VX0NMQ0tfU1RBVF9NQUNfQ0xDS182Ml81KQpAQCAtNDQxOSwxOSArNDQ1NSwyMiBAQAogCQl0dzMyKEdSQ19NSVNDX0NGRywgdmFsKTsKIAl9CiAKKwl2YWwgPSAoMiA8PCBUWF9MRU5HVEhTX0lQR19DUlNfU0hJRlQpIHwKKwkgICAgICAoNiA8PCBUWF9MRU5HVEhTX0lQR19TSElGVCk7CisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzIwKQorCQl2YWwgfD0gdHIzMihNQUNfVFhfTEVOR1RIUykgJgorCQkgICAgICAgKFRYX0xFTkdUSFNfSk1CX0ZSTV9MRU5fTVNLIHwKKwkJCVRYX0xFTkdUSFNfQ05UX0RXTl9WQUxfTVNLKTsKKwogCWlmICh0cC0+bGlua19jb25maWcuYWN0aXZlX3NwZWVkID09IFNQRUVEXzEwMDAgJiYKIAkgICAgdHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9kdXBsZXggPT0gRFVQTEVYX0hBTEYpCi0JCXR3MzIoTUFDX1RYX0xFTkdUSFMsCi0JCSAgICAgKCgyIDw8IFRYX0xFTkdUSFNfSVBHX0NSU19TSElGVCkgfAotCQkgICAgICAoNiA8PCBUWF9MRU5HVEhTX0lQR19TSElGVCkgfAotCQkgICAgICAoMHhmZiA8PCBUWF9MRU5HVEhTX1NMT1RfVElNRV9TSElGVCkpKTsKKwkJdHczMihNQUNfVFhfTEVOR1RIUywgdmFsIHwKKwkJICAgICAoMHhmZiA8PCBUWF9MRU5HVEhTX1NMT1RfVElNRV9TSElGVCkpOwogCWVsc2UKLQkJdHczMihNQUNfVFhfTEVOR1RIUywKLQkJICAgICAoKDIgPDwgVFhfTEVOR1RIU19JUEdfQ1JTX1NISUZUKSB8Ci0JCSAgICAgICg2IDw8IFRYX0xFTkdUSFNfSVBHX1NISUZUKSB8Ci0JCSAgICAgICgzMiA8PCBUWF9MRU5HVEhTX1NMT1RfVElNRV9TSElGVCkpKTsKKwkJdHczMihNQUNfVFhfTEVOR1RIUywgdmFsIHwKKwkJICAgICAoMzIgPDwgVFhfTEVOR1RIU19TTE9UX1RJTUVfU0hJRlQpKTsKIAotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSkgeworCWlmICghdGczX2ZsYWcodHAsIDU3MDVfUExVUykpIHsKIAkJaWYgKG5ldGlmX2NhcnJpZXJfb2sodHAtPmRldikpIHsKIAkJCXR3MzIoSE9TVENDX1NUQVRfQ09BTF9USUNLUywKIAkJCSAgICAgdHAtPmNvYWwuc3RhdHNfYmxvY2tfY29hbGVzY2VfdXNlY3MpOwpAQCAtNDQ0MCw4ICs0NDc5LDggQEAKIAkJfQogCX0KIAotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfQVNQTV9XT1JLQVJPVU5EKSB7Ci0JCXUzMiB2YWwgPSB0cjMyKFBDSUVfUFdSX01HTVRfVEhSRVNIKTsKKwlpZiAodGczX2ZsYWcodHAsIEFTUE1fV09SS0FST1VORCkpIHsKKwkJdmFsID0gdHIzMihQQ0lFX1BXUl9NR01UX1RIUkVTSCk7CiAJCWlmICghbmV0aWZfY2Fycmllcl9vayh0cC0+ZGV2KSkKIAkJCXZhbCA9ICh2YWwgJiB+UENJRV9QV1JfTUdNVF9MMV9USFJFU0hfTVNLKSB8CiAJCQkgICAgICB0cC0+cHdybWdtdF90aHJlc2g7CkBAIC00NDU4LDYgKzQ0OTcsMTIzIEBACiAJcmV0dXJuIHRwLT5pcnFfc3luYzsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHRnM19yZDMyX2xvb3Aoc3RydWN0IHRnMyAqdHAsIHUzMiAqZHN0LCB1MzIgb2ZmLCB1MzIgbGVuKQoreworCWludCBpOworCisJZHN0ID0gKHUzMiAqKSgodTggKilkc3QgKyBvZmYpOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gc2l6ZW9mKHUzMikpCisJCSpkc3QrKyA9IHRyMzIob2ZmICsgaSk7Cit9CisKK3N0YXRpYyB2b2lkIHRnM19kdW1wX2xlZ2FjeV9yZWdzKHN0cnVjdCB0ZzMgKnRwLCB1MzIgKnJlZ3MpCit7CisJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgVEczUENJX1ZFTkRPUiwgMHhiMCk7CisJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgTUFJTEJPWF9JTlRFUlJVUFRfMCwgMHgyMDApOworCXRnM19yZDMyX2xvb3AodHAsIHJlZ3MsIE1BQ19NT0RFLCAweDRmMCk7CisJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgU05EREFUQUlfTU9ERSwgMHhlMCk7CisJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgU05EREFUQUNfTU9ERSwgMHgwNCk7CisJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgU05EQkRTX01PREUsIDB4ODApOworCXRnM19yZDMyX2xvb3AodHAsIHJlZ3MsIFNOREJESV9NT0RFLCAweDQ4KTsKKwl0ZzNfcmQzMl9sb29wKHRwLCByZWdzLCBTTkRCRENfTU9ERSwgMHgwNCk7CisJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgUkNWTFBDX01PREUsIDB4MjApOworCXRnM19yZDMyX2xvb3AodHAsIHJlZ3MsIFJDVkxQQ19TRUxMU1RfQkFTRSwgMHgxNWMpOworCXRnM19yZDMyX2xvb3AodHAsIHJlZ3MsIFJDVkRCRElfTU9ERSwgMHgwYyk7CisJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgUkNWREJESV9KVU1CT19CRCwgMHgzYyk7CisJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgUkNWREJESV9CRF9QUk9EX0lEWF8wLCAweDQ0KTsKKwl0ZzNfcmQzMl9sb29wKHRwLCByZWdzLCBSQ1ZEQ0NfTU9ERSwgMHgwNCk7CisJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgUkNWQkRJX01PREUsIDB4MjApOworCXRnM19yZDMyX2xvb3AodHAsIHJlZ3MsIFJDVkNDX01PREUsIDB4MTQpOworCXRnM19yZDMyX2xvb3AodHAsIHJlZ3MsIFJDVkxTQ19NT0RFLCAweDA4KTsKKwl0ZzNfcmQzMl9sb29wKHRwLCByZWdzLCBNQkZSRUVfTU9ERSwgMHgwOCk7CisJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgSE9TVENDX01PREUsIDB4MTAwKTsKKworCWlmICh0ZzNfZmxhZyh0cCwgU1VQUE9SVF9NU0lYKSkKKwkJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgSE9TVENDX1JYQ09MX1RJQ0tTX1ZFQzEsIDB4MTgwKTsKKworCXRnM19yZDMyX2xvb3AodHAsIHJlZ3MsIE1FTUFSQl9NT0RFLCAweDEwKTsKKwl0ZzNfcmQzMl9sb29wKHRwLCByZWdzLCBCVUZNR1JfTU9ERSwgMHg1OCk7CisJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgUkRNQUNfTU9ERSwgMHgwOCk7CisJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgV0RNQUNfTU9ERSwgMHgwOCk7CisJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgUlhfQ1BVX01PREUsIDB4MDQpOworCXRnM19yZDMyX2xvb3AodHAsIHJlZ3MsIFJYX0NQVV9TVEFURSwgMHgwNCk7CisJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgUlhfQ1BVX1BHTUNUUiwgMHgwNCk7CisJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgUlhfQ1BVX0hXQktQVCwgMHgwNCk7CisKKwlpZiAoIXRnM19mbGFnKHRwLCA1NzA1X1BMVVMpKSB7CisJCXRnM19yZDMyX2xvb3AodHAsIHJlZ3MsIFRYX0NQVV9NT0RFLCAweDA0KTsKKwkJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgVFhfQ1BVX1NUQVRFLCAweDA0KTsKKwkJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgVFhfQ1BVX1BHTUNUUiwgMHgwNCk7CisJfQorCisJdGczX3JkMzJfbG9vcCh0cCwgcmVncywgR1JDTUJPWF9JTlRFUlJVUFRfMCwgMHgxMTApOworCXRnM19yZDMyX2xvb3AodHAsIHJlZ3MsIEZUUV9SRVNFVCwgMHgxMjApOworCXRnM19yZDMyX2xvb3AodHAsIHJlZ3MsIE1TR0lOVF9NT0RFLCAweDBjKTsKKwl0ZzNfcmQzMl9sb29wKHRwLCByZWdzLCBETUFDX01PREUsIDB4MDQpOworCXRnM19yZDMyX2xvb3AodHAsIHJlZ3MsIEdSQ19NT0RFLCAweDRjKTsKKworCWlmICh0ZzNfZmxhZyh0cCwgTlZSQU0pKQorCQl0ZzNfcmQzMl9sb29wKHRwLCByZWdzLCBOVlJBTV9DTUQsIDB4MjQpOworfQorCitzdGF0aWMgdm9pZCB0ZzNfZHVtcF9zdGF0ZShzdHJ1Y3QgdGczICp0cCkKK3sKKwlpbnQgaTsKKwl1MzIgKnJlZ3M7CisKKwlyZWdzID0ga3phbGxvYyhURzNfUkVHX0JMS19TSVpFLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXJlZ3MpIHsKKwkJbmV0ZGV2X2Vycih0cC0+ZGV2LCAiRmFpbGVkIGFsbG9jYXRpbmcgcmVnaXN0ZXIgZHVtcCBidWZmZXJcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKHRnM19mbGFnKHRwLCBQQ0lfRVhQUkVTUykpIHsKKwkJLyogUmVhZCB1cCB0byBidXQgbm90IGluY2x1ZGluZyBwcml2YXRlIFBDSSByZWdpc3RlcnMgKi8KKwkJZm9yIChpID0gMDsgaSA8IFRHM19QQ0lFX1RMRExQTF9QT1JUOyBpICs9IHNpemVvZih1MzIpKQorCQkJcmVnc1tpIC8gc2l6ZW9mKHUzMildID0gdHIzMihpKTsKKwl9IGVsc2UKKwkJdGczX2R1bXBfbGVnYWN5X3JlZ3ModHAsIHJlZ3MpOworCisJZm9yIChpID0gMDsgaSA8IFRHM19SRUdfQkxLX1NJWkUgLyBzaXplb2YodTMyKTsgaSArPSA0KSB7CisJCWlmICghcmVnc1tpICsgMF0gJiYgIXJlZ3NbaSArIDFdICYmCisJCSAgICAhcmVnc1tpICsgMl0gJiYgIXJlZ3NbaSArIDNdKQorCQkJY29udGludWU7CisKKwkJbmV0ZGV2X2Vycih0cC0+ZGV2LCAiMHglMDh4OiAweCUwOHgsIDB4JTA4eCwgMHglMDh4LCAweCUwOHhcbiIsCisJCQkgICBpICogNCwKKwkJCSAgIHJlZ3NbaSArIDBdLCByZWdzW2kgKyAxXSwgcmVnc1tpICsgMl0sIHJlZ3NbaSArIDNdKTsKKwl9CisKKwlrZnJlZShyZWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCB0cC0+aXJxX2NudDsgaSsrKSB7CisJCXN0cnVjdCB0ZzNfbmFwaSAqdG5hcGkgPSAmdHAtPm5hcGlbaV07CisKKwkJLyogU1cgc3RhdHVzIGJsb2NrICovCisJCW5ldGRldl9lcnIodHAtPmRldiwKKwkJCSAiJWQ6IEhvc3Qgc3RhdHVzIGJsb2NrIFslMDh4OiUwOHg6KCUwNHg6JTA0eDolMDR4KTooJTA0eDolMDR4KV1cbiIsCisJCQkgICBpLAorCQkJICAgdG5hcGktPmh3X3N0YXR1cy0+c3RhdHVzLAorCQkJICAgdG5hcGktPmh3X3N0YXR1cy0+c3RhdHVzX3RhZywKKwkJCSAgIHRuYXBpLT5od19zdGF0dXMtPnJ4X2p1bWJvX2NvbnN1bWVyLAorCQkJICAgdG5hcGktPmh3X3N0YXR1cy0+cnhfY29uc3VtZXIsCisJCQkgICB0bmFwaS0+aHdfc3RhdHVzLT5yeF9taW5pX2NvbnN1bWVyLAorCQkJICAgdG5hcGktPmh3X3N0YXR1cy0+aWR4WzBdLnJ4X3Byb2R1Y2VyLAorCQkJICAgdG5hcGktPmh3X3N0YXR1cy0+aWR4WzBdLnR4X2NvbnN1bWVyKTsKKworCQluZXRkZXZfZXJyKHRwLT5kZXYsCisJCSIlZDogTkFQSSBpbmZvIFslMDh4OiUwOHg6KCUwNHg6JTA0eDolMDR4KTolMDR4OiglMDR4OiUwNHg6JTA0eDolMDR4KV1cbiIsCisJCQkgICBpLAorCQkJICAgdG5hcGktPmxhc3RfdGFnLCB0bmFwaS0+bGFzdF9pcnFfdGFnLAorCQkJICAgdG5hcGktPnR4X3Byb2QsIHRuYXBpLT50eF9jb25zLCB0bmFwaS0+dHhfcGVuZGluZywKKwkJCSAgIHRuYXBpLT5yeF9yY2JfcHRyLAorCQkJICAgdG5hcGktPnByb2RyaW5nLnJ4X3N0ZF9wcm9kX2lkeCwKKwkJCSAgIHRuYXBpLT5wcm9kcmluZy5yeF9zdGRfY29uc19pZHgsCisJCQkgICB0bmFwaS0+cHJvZHJpbmcucnhfam1iX3Byb2RfaWR4LAorCQkJICAgdG5hcGktPnByb2RyaW5nLnJ4X2ptYl9jb25zX2lkeCk7CisJfQorfQorCiAvKiBUaGlzIGlzIGNhbGxlZCB3aGVuZXZlciB3ZSBzdXNwZWN0IHRoYXQgdGhlIHN5c3RlbSBjaGlwc2V0IGlzIHJlLQogICogb3JkZXJpbmcgdGhlIHNlcXVlbmNlIG9mIE1NSU8gdG8gdGhlIHR4IHNlbmQgbWFpbGJveC4gVGhlIHN5bXB0b20KICAqIGlzIGJvZ3VzIHR4IGNvbXBsZXRpb25zLiBXZSB0cnkgdG8gcmVjb3ZlciBieSBzZXR0aW5nIHRoZQpAQCAtNDQ2Niw3ICs0NjIyLDcgQEAKICAqLwogc3RhdGljIHZvaWQgdGczX3R4X3JlY292ZXIoc3RydWN0IHRnMyAqdHApCiB7Ci0JQlVHX09OKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTUJPWF9XUklURV9SRU9SREVSKSB8fAorCUJVR19PTih0ZzNfZmxhZyh0cCwgTUJPWF9XUklURV9SRU9SREVSKSB8fAogCSAgICAgICB0cC0+d3JpdGUzMl90eF9tYm94ID09IHRnM193cml0ZV9pbmRpcmVjdF9tYm94KTsKIAogCW5ldGRldl93YXJuKHRwLT5kZXYsCkBAIC00NDc2LDcgKzQ2MzIsNyBAQAogCQkgICAgImFuZCBpbmNsdWRlIHN5c3RlbSBjaGlwc2V0IGluZm9ybWF0aW9uLlxuIik7CiAKIAlzcGluX2xvY2soJnRwLT5sb2NrKTsKLQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1RYX1JFQ09WRVJZX1BFTkRJTkc7CisJdGczX2ZsYWdfc2V0KHRwLCBUWF9SRUNPVkVSWV9QRU5ESU5HKTsKIAlzcGluX3VubG9jaygmdHAtPmxvY2spOwogfQogCkBAIC00NTAwLDcgKzQ2NTYsNyBAQAogCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKIAlpbnQgaW5kZXggPSB0bmFwaSAtIHRwLT5uYXBpOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX1RTUykKKwlpZiAodGczX2ZsYWcodHAsIEVOQUJMRV9UU1MpKQogCQlpbmRleC0tOwogCiAJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZSh0cC0+ZGV2LCBpbmRleCk7CkBAIC00ODE1LDcgKzQ5NzEsNyBAQAogCQkJc2tiID0gY29weV9za2I7CiAJCX0KIAotCQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19SWF9DSEVDS1NVTVMpICYmCisJCWlmICgodHAtPmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkgJiYKIAkJICAgIChkZXNjLT50eXBlX2ZsYWdzICYgUlhEX0ZMQUdfVENQVURQX0NTVU0pICYmCiAJCSAgICAoKChkZXNjLT5pcF90Y3BfY3N1bSAmIFJYRF9UQ1BDU1VNX01BU0spCiAJCSAgICAgID4+IFJYRF9UQ1BDU1VNX1NISUZUKSA9PSAweGZmZmYpKQpAQCAtNDg2OCw3ICs1MDI0LDcgQEAKIAl0dzMyX3J4X21ib3godG5hcGktPmNvbnNtYm94LCBzd19pZHgpOwogCiAJLyogUmVmaWxsIFJYIHJpbmcocykuICovCi0JaWYgKCEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfUlNTKSkgeworCWlmICghdGczX2ZsYWcodHAsIEVOQUJMRV9SU1MpKSB7CiAJCWlmICh3b3JrX21hc2sgJiBSWERfT1BBUVVFX1JJTkdfU1REKSB7CiAJCQl0cHItPnJ4X3N0ZF9wcm9kX2lkeCA9IHN0ZF9wcm9kX2lkeCAmCiAJCQkJCSAgICAgICB0cC0+cnhfc3RkX3JpbmdfbWFzazsKQEAgLTQ5MDEsMTYgKzUwNTcsMTQgQEAKIHN0YXRpYyB2b2lkIHRnM19wb2xsX2xpbmsoc3RydWN0IHRnMyAqdHApCiB7CiAJLyogaGFuZGxlIGxpbmsgY2hhbmdlIGFuZCBvdGhlciBwaHkgZXZlbnRzICovCi0JaWYgKCEodHAtPnRnM19mbGFncyAmCi0JICAgICAgKFRHM19GTEFHX1VTRV9MSU5LQ0hHX1JFRyB8Ci0JICAgICAgIFRHM19GTEFHX1BPTExfU0VSREVTKSkpIHsKKwlpZiAoISh0ZzNfZmxhZyh0cCwgVVNFX0xJTktDSEdfUkVHKSB8fCB0ZzNfZmxhZyh0cCwgUE9MTF9TRVJERVMpKSkgewogCQlzdHJ1Y3QgdGczX2h3X3N0YXR1cyAqc2JsayA9IHRwLT5uYXBpWzBdLmh3X3N0YXR1czsKIAogCQlpZiAoc2Jsay0+c3RhdHVzICYgU0RfU1RBVFVTX0xJTktfQ0hHKSB7CiAJCQlzYmxrLT5zdGF0dXMgPSBTRF9TVEFUVVNfVVBEQVRFRCB8CiAJCQkJICAgICAgIChzYmxrLT5zdGF0dXMgJiB+U0RfU1RBVFVTX0xJTktfQ0hHKTsKIAkJCXNwaW5fbG9jaygmdHAtPmxvY2spOwotCQkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfVVNFX1BIWUxJQikgeworCQkJaWYgKHRnM19mbGFnKHRwLCBVU0VfUEhZTElCKSkgewogCQkJCXR3MzJfZihNQUNfU1RBVFVTLAogCQkJCSAgICAgKE1BQ19TVEFUVVNfU1lOQ19DSEFOR0VEIHwKIAkJCQkgICAgICBNQUNfU1RBVFVTX0NGR19DSEFOR0VEIHwKQEAgLTUwNTcsNyArNTIxMSw3IEBACiAJLyogcnVuIFRYIGNvbXBsZXRpb24gdGhyZWFkICovCiAJaWYgKHRuYXBpLT5od19zdGF0dXMtPmlkeFswXS50eF9jb25zdW1lciAhPSB0bmFwaS0+dHhfY29ucykgewogCQl0ZzNfdHgodG5hcGkpOwotCQlpZiAodW5saWtlbHkodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1RYX1JFQ09WRVJZX1BFTkRJTkcpKQorCQlpZiAodW5saWtlbHkodGczX2ZsYWcodHAsIFRYX1JFQ09WRVJZX1BFTkRJTkcpKSkKIAkJCXJldHVybiB3b3JrX2RvbmU7CiAJfQogCkBAIC01MDY4LDcgKzUyMjIsNyBAQAogCWlmICgqKHRuYXBpLT5yeF9yY2JfcHJvZF9pZHgpICE9IHRuYXBpLT5yeF9yY2JfcHRyKQogCQl3b3JrX2RvbmUgKz0gdGczX3J4KHRuYXBpLCBidWRnZXQgLSB3b3JrX2RvbmUpOwogCi0JaWYgKCh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9SU1MpICYmIHRuYXBpID09ICZ0cC0+bmFwaVsxXSkgeworCWlmICh0ZzNfZmxhZyh0cCwgRU5BQkxFX1JTUykgJiYgdG5hcGkgPT0gJnRwLT5uYXBpWzFdKSB7CiAJCXN0cnVjdCB0ZzNfcnhfcHJvZHJpbmdfc2V0ICpkcHIgPSAmdHAtPm5hcGlbMF0ucHJvZHJpbmc7CiAJCWludCBpLCBlcnIgPSAwOwogCQl1MzIgc3RkX3Byb2RfaWR4ID0gZHByLT5yeF9zdGRfcHJvZF9pZHg7CkBAIC01MTA3LDcgKzUyNjEsNyBAQAogCXdoaWxlICgxKSB7CiAJCXdvcmtfZG9uZSA9IHRnM19wb2xsX3dvcmsodG5hcGksIHdvcmtfZG9uZSwgYnVkZ2V0KTsKIAotCQlpZiAodW5saWtlbHkodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1RYX1JFQ09WRVJZX1BFTkRJTkcpKQorCQlpZiAodW5saWtlbHkodGczX2ZsYWcodHAsIFRYX1JFQ09WRVJZX1BFTkRJTkcpKSkKIAkJCWdvdG8gdHhfcmVjb3Zlcnk7CiAKIAkJaWYgKHVubGlrZWx5KHdvcmtfZG9uZSA+PSBidWRnZXQpKQpAQCAtNTE0MSw2ICs1Mjk1LDQwIEBACiAJcmV0dXJuIHdvcmtfZG9uZTsKIH0KIAorc3RhdGljIHZvaWQgdGczX3Byb2Nlc3NfZXJyb3Ioc3RydWN0IHRnMyAqdHApCit7CisJdTMyIHZhbDsKKwlib29sIHJlYWxfZXJyb3IgPSBmYWxzZTsKKworCWlmICh0ZzNfZmxhZyh0cCwgRVJST1JfUFJPQ0VTU0VEKSkKKwkJcmV0dXJuOworCisJLyogQ2hlY2sgRmxvdyBBdHRlbnRpb24gcmVnaXN0ZXIgKi8KKwl2YWwgPSB0cjMyKEhPU1RDQ19GTE9XX0FUVE4pOworCWlmICh2YWwgJiB+SE9TVENDX0ZMT1dfQVRUTl9NQlVGX0xXTSkgeworCQluZXRkZXZfZXJyKHRwLT5kZXYsICJGTE9XIEF0dGVudGlvbiBlcnJvci4gIFJlc2V0dGluZyBjaGlwLlxuIik7CisJCXJlYWxfZXJyb3IgPSB0cnVlOworCX0KKworCWlmICh0cjMyKE1TR0lOVF9TVEFUVVMpICYgfk1TR0lOVF9TVEFUVVNfTVNJX1JFUSkgeworCQluZXRkZXZfZXJyKHRwLT5kZXYsICJNU0kgU3RhdHVzIGVycm9yLiAgUmVzZXR0aW5nIGNoaXAuXG4iKTsKKwkJcmVhbF9lcnJvciA9IHRydWU7CisJfQorCisJaWYgKHRyMzIoUkRNQUNfU1RBVFVTKSB8fCB0cjMyKFdETUFDX1NUQVRVUykpIHsKKwkJbmV0ZGV2X2Vycih0cC0+ZGV2LCAiRE1BIFN0YXR1cyBlcnJvci4gIFJlc2V0dGluZyBjaGlwLlxuIik7CisJCXJlYWxfZXJyb3IgPSB0cnVlOworCX0KKworCWlmICghcmVhbF9lcnJvcikKKwkJcmV0dXJuOworCisJdGczX2R1bXBfc3RhdGUodHApOworCisJdGczX2ZsYWdfc2V0KHRwLCBFUlJPUl9QUk9DRVNTRUQpOworCXNjaGVkdWxlX3dvcmsoJnRwLT5yZXNldF90YXNrKTsKK30KKwogc3RhdGljIGludCB0ZzNfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiB7CiAJc3RydWN0IHRnM19uYXBpICp0bmFwaSA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgdGczX25hcGksIG5hcGkpOwpAQCAtNTE0OSwxNyArNTMzNywyMCBAQAogCXN0cnVjdCB0ZzNfaHdfc3RhdHVzICpzYmxrID0gdG5hcGktPmh3X3N0YXR1czsKIAogCXdoaWxlICgxKSB7CisJCWlmIChzYmxrLT5zdGF0dXMgJiBTRF9TVEFUVVNfRVJST1IpCisJCQl0ZzNfcHJvY2Vzc19lcnJvcih0cCk7CisKIAkJdGczX3BvbGxfbGluayh0cCk7CiAKIAkJd29ya19kb25lID0gdGczX3BvbGxfd29yayh0bmFwaSwgd29ya19kb25lLCBidWRnZXQpOwogCi0JCWlmICh1bmxpa2VseSh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVFhfUkVDT1ZFUllfUEVORElORykpCisJCWlmICh1bmxpa2VseSh0ZzNfZmxhZyh0cCwgVFhfUkVDT1ZFUllfUEVORElORykpKQogCQkJZ290byB0eF9yZWNvdmVyeTsKIAogCQlpZiAodW5saWtlbHkod29ya19kb25lID49IGJ1ZGdldCkpCiAJCQlicmVhazsKIAotCQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1RBR0dFRF9TVEFUVVMpIHsKKwkJaWYgKHRnM19mbGFnKHRwLCBUQUdHRURfU1RBVFVTKSkgewogCQkJLyogdHAtPmxhc3RfdGFnIGlzIHVzZWQgaW4gdGczX2ludF9yZWVuYWJsZSgpIGJlbG93CiAJCQkgKiB0byB0ZWxsIHRoZSBodyBob3cgbXVjaCB3b3JrIGhhcyBiZWVuIHByb2Nlc3NlZCwKIAkJCSAqIHNvIHdlIG11c3QgcmVhZCBpdCBiZWZvcmUgY2hlY2tpbmcgZm9yIG1vcmUgd29yay4KQEAgLTUzMjYsNyArNTUxNyw3IEBACiAJICogaW50ZXJydXB0IGlzIG91cnMgYW5kIHdpbGwgZmx1c2ggdGhlIHN0YXR1cyBibG9jay4KIAkgKi8KIAlpZiAodW5saWtlbHkoIShzYmxrLT5zdGF0dXMgJiBTRF9TVEFUVVNfVVBEQVRFRCkpKSB7Ci0JCWlmICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0NISVBfUkVTRVRUSU5HKSB8fAorCQlpZiAodGczX2ZsYWcodHAsIENISVBfUkVTRVRUSU5HKSB8fAogCQkgICAgKHRyMzIoVEczUENJX1BDSVNUQVRFKSAmIFBDSVNUQVRFX0lOVF9OT1RfQUNUSVZFKSkgewogCQkJaGFuZGxlZCA9IDA7CiAJCQlnb3RvIG91dDsKQEAgLTUzNzUsNyArNTU2Niw3IEBACiAJICogaW50ZXJydXB0IGlzIG91cnMgYW5kIHdpbGwgZmx1c2ggdGhlIHN0YXR1cyBibG9jay4KIAkgKi8KIAlpZiAodW5saWtlbHkoc2Jsay0+c3RhdHVzX3RhZyA9PSB0bmFwaS0+bGFzdF9pcnFfdGFnKSkgewotCQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19DSElQX1JFU0VUVElORykgfHwKKwkJaWYgKHRnM19mbGFnKHRwLCBDSElQX1JFU0VUVElORykgfHwKIAkJICAgICh0cjMyKFRHM1BDSV9QQ0lTVEFURSkgJiBQQ0lTVEFURV9JTlRfTk9UX0FDVElWRSkpIHsKIAkJCWhhbmRsZWQgPSAwOwogCQkJZ290byBvdXQ7CkBAIC01NDg4LDE0ICs1Njc5LDE0IEBACiAKIAl0ZzNfZnVsbF9sb2NrKHRwLCAxKTsKIAotCXJlc3RhcnRfdGltZXIgPSB0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1JFU1RBUlRfVElNRVI7Ci0JdHAtPnRnM19mbGFnczIgJj0gflRHM19GTEcyX1JFU1RBUlRfVElNRVI7CisJcmVzdGFydF90aW1lciA9IHRnM19mbGFnKHRwLCBSRVNUQVJUX1RJTUVSKTsKKwl0ZzNfZmxhZ19jbGVhcih0cCwgUkVTVEFSVF9USU1FUik7CiAKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1RYX1JFQ09WRVJZX1BFTkRJTkcpIHsKKwlpZiAodGczX2ZsYWcodHAsIFRYX1JFQ09WRVJZX1BFTkRJTkcpKSB7CiAJCXRwLT53cml0ZTMyX3R4X21ib3ggPSB0ZzNfd3JpdGUzMl90eF9tYm94OwogCQl0cC0+d3JpdGUzMl9yeF9tYm94ID0gdGczX3dyaXRlX2ZsdXNoX3JlZzMyOwotCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX01CT1hfV1JJVEVfUkVPUkRFUjsKLQkJdHAtPnRnM19mbGFncyAmPSB+VEczX0ZMQUdfVFhfUkVDT1ZFUllfUEVORElORzsKKwkJdGczX2ZsYWdfc2V0KHRwLCBNQk9YX1dSSVRFX1JFT1JERVIpOworCQl0ZzNfZmxhZ19jbGVhcih0cCwgVFhfUkVDT1ZFUllfUEVORElORyk7CiAJfQogCiAJdGczX2hhbHQodHAsIFJFU0VUX0tJTkRfU0hVVERPV04sIDApOwpAQCAtNTUxNSwyMSArNTcwNiwxMyBAQAogCQl0ZzNfcGh5X3N0YXJ0KHRwKTsKIH0KIAotc3RhdGljIHZvaWQgdGczX2R1bXBfc2hvcnRfc3RhdGUoc3RydWN0IHRnMyAqdHApCi17Ci0JbmV0ZGV2X2Vycih0cC0+ZGV2LCAiREVCVUc6IE1BQ19UWF9TVEFUVVNbJTA4eF0gTUFDX1JYX1NUQVRVU1slMDh4XVxuIiwKLQkJICAgdHIzMihNQUNfVFhfU1RBVFVTKSwgdHIzMihNQUNfUlhfU1RBVFVTKSk7Ci0JbmV0ZGV2X2Vycih0cC0+ZGV2LCAiREVCVUc6IFJETUFDX1NUQVRVU1slMDh4XSBXRE1BQ19TVEFUVVNbJTA4eF1cbiIsCi0JCSAgIHRyMzIoUkRNQUNfU1RBVFVTKSwgdHIzMihXRE1BQ19TVEFUVVMpKTsKLX0KLQogc3RhdGljIHZvaWQgdGczX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAKIAlpZiAobmV0aWZfbXNnX3R4X2Vycih0cCkpIHsKIAkJbmV0ZGV2X2VycihkZXYsICJ0cmFuc21pdCB0aW1lZCBvdXQsIHJlc2V0dGluZ1xuIik7Ci0JCXRnM19kdW1wX3Nob3J0X3N0YXRlKHRwKTsKKwkJdGczX2R1bXBfc3RhdGUodHApOwogCX0KIAogCXNjaGVkdWxlX3dvcmsoJnRwLT5yZXNldF90YXNrKTsKQEAgLTU1NDgsNyArNTczMSw3IEBACiAJCQkJCSAgaW50IGxlbikKIHsKICNpZiBkZWZpbmVkKENPTkZJR19ISUdITUVNKSAmJiAoQklUU19QRVJfTE9ORyA9PSA2NCkKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHXzQwQklUX0RNQV9CVUcpCisJaWYgKHRnM19mbGFnKHRwLCA0MEJJVF9ETUFfQlVHKSkKIAkJcmV0dXJuICgodTY0KSBtYXBwaW5nICsgbGVuKSA+IERNQV9CSVRfTUFTSyg0MCk7CiAJcmV0dXJuIDA7CiAjZWxzZQpAQCAtNTU1Niw4OSArNTczOSw2IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgdGczX3NldF90eGQoc3RydWN0IHRnM19uYXBpICosIGludCwgZG1hX2FkZHJfdCwgaW50LCB1MzIsIHUzMik7Ci0KLS8qIFdvcmthcm91bmQgNEdCIGFuZCA0MC1iaXQgaGFyZHdhcmUgRE1BIGJ1Z3MuICovCi1zdGF0aWMgaW50IHRpZ29uM19kbWFfaHdidWdfd29ya2Fyb3VuZChzdHJ1Y3QgdGczX25hcGkgKnRuYXBpLAotCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbGFzdF9wbHVzX29uZSwKLQkJCQkgICAgICAgdTMyICpzdGFydCwgdTMyIGJhc2VfZmxhZ3MsIHUzMiBtc3MpCi17Ci0Jc3RydWN0IHRnMyAqdHAgPSB0bmFwaS0+dHA7Ci0Jc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7Ci0JZG1hX2FkZHJfdCBuZXdfYWRkciA9IDA7Ci0JdTMyIGVudHJ5ID0gKnN0YXJ0OwotCWludCBpLCByZXQgPSAwOwotCi0JaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzAxKQotCQluZXdfc2tiID0gc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTsKLQllbHNlIHsKLQkJaW50IG1vcmVfaGVhZHJvb20gPSA0IC0gKCh1bnNpZ25lZCBsb25nKXNrYi0+ZGF0YSAmIDMpOwotCi0JCW5ld19za2IgPSBza2JfY29weV9leHBhbmQoc2tiLAotCQkJCQkgIHNrYl9oZWFkcm9vbShza2IpICsgbW9yZV9oZWFkcm9vbSwKLQkJCQkJICBza2JfdGFpbHJvb20oc2tiKSwgR0ZQX0FUT01JQyk7Ci0JfQotCi0JaWYgKCFuZXdfc2tiKSB7Ci0JCXJldCA9IC0xOwotCX0gZWxzZSB7Ci0JCS8qIE5ldyBTS0IgaXMgZ3VhcmFudGVlZCB0byBiZSBsaW5lYXIuICovCi0JCWVudHJ5ID0gKnN0YXJ0OwotCQluZXdfYWRkciA9IHBjaV9tYXBfc2luZ2xlKHRwLT5wZGV2LCBuZXdfc2tiLT5kYXRhLCBuZXdfc2tiLT5sZW4sCi0JCQkJCSAgUENJX0RNQV9UT0RFVklDRSk7Ci0JCS8qIE1ha2Ugc3VyZSB0aGUgbWFwcGluZyBzdWNjZWVkZWQgKi8KLQkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcih0cC0+cGRldiwgbmV3X2FkZHIpKSB7Ci0JCQlyZXQgPSAtMTsKLQkJCWRldl9rZnJlZV9za2IobmV3X3NrYik7Ci0JCQluZXdfc2tiID0gTlVMTDsKLQotCQkvKiBNYWtlIHN1cmUgbmV3IHNrYiBkb2VzIG5vdCBjcm9zcyBhbnkgNEcgYm91bmRhcmllcy4KLQkJICogRHJvcCB0aGUgcGFja2V0IGlmIGl0IGRvZXMuCi0JCSAqLwotCQl9IGVsc2UgaWYgKCh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzRHX0RNQV9CTkRSWV9CVUcpICYmCi0JCQkgICAgdGczXzRnX292ZXJmbG93X3Rlc3QobmV3X2FkZHIsIG5ld19za2ItPmxlbikpIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUodHAtPnBkZXYsIG5ld19hZGRyLCBuZXdfc2tiLT5sZW4sCi0JCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJCXJldCA9IC0xOwotCQkJZGV2X2tmcmVlX3NrYihuZXdfc2tiKTsKLQkJCW5ld19za2IgPSBOVUxMOwotCQl9IGVsc2UgewotCQkJdGczX3NldF90eGQodG5hcGksIGVudHJ5LCBuZXdfYWRkciwgbmV3X3NrYi0+bGVuLAotCQkJCSAgICBiYXNlX2ZsYWdzLCAxIHwgKG1zcyA8PCAxKSk7Ci0JCQkqc3RhcnQgPSBORVhUX1RYKGVudHJ5KTsKLQkJfQotCX0KLQotCS8qIE5vdyBjbGVhbiB1cCB0aGUgc3cgcmluZyBlbnRyaWVzLiAqLwotCWkgPSAwOwotCXdoaWxlIChlbnRyeSAhPSBsYXN0X3BsdXNfb25lKSB7Ci0JCWludCBsZW47Ci0KLQkJaWYgKGkgPT0gMCkKLQkJCWxlbiA9IHNrYl9oZWFkbGVuKHNrYik7Ci0JCWVsc2UKLQkJCWxlbiA9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaS0xXS5zaXplOwotCi0JCXBjaV91bm1hcF9zaW5nbGUodHAtPnBkZXYsCi0JCQkJIGRtYV91bm1hcF9hZGRyKCZ0bmFwaS0+dHhfYnVmZmVyc1tlbnRyeV0sCi0JCQkJCQltYXBwaW5nKSwKLQkJCQkgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJaWYgKGkgPT0gMCkgewotCQkJdG5hcGktPnR4X2J1ZmZlcnNbZW50cnldLnNrYiA9IG5ld19za2I7Ci0JCQlkbWFfdW5tYXBfYWRkcl9zZXQoJnRuYXBpLT50eF9idWZmZXJzW2VudHJ5XSwgbWFwcGluZywKLQkJCQkJICAgbmV3X2FkZHIpOwotCQl9IGVsc2UgewotCQkJdG5hcGktPnR4X2J1ZmZlcnNbZW50cnldLnNrYiA9IE5VTEw7Ci0JCX0KLQkJZW50cnkgPSBORVhUX1RYKGVudHJ5KTsKLQkJaSsrOwotCX0KLQotCWRldl9rZnJlZV9za2Ioc2tiKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyB2b2lkIHRnM19zZXRfdHhkKHN0cnVjdCB0ZzNfbmFwaSAqdG5hcGksIGludCBlbnRyeSwKIAkJCWRtYV9hZGRyX3QgbWFwcGluZywgaW50IGxlbiwgdTMyIGZsYWdzLAogCQkJdTMyIG1zc19hbmRfaXNfZW5kKQpAQCAtNTY2MiwxNzkgKzU3NjIsODYgQEAKIAl0eGQtPnZsYW5fdGFnID0gdmxhbl90YWcgPDwgVFhEX1ZMQU5fVEFHX1NISUZUOwogfQogCi0vKiBoYXJkX3N0YXJ0X3htaXQgZm9yIGRldmljZXMgdGhhdCBkb24ndCBoYXZlIGFueSBidWdzIGFuZAotICogc3VwcG9ydCBURzNfRkxHMl9IV19UU09fMiBhbmQgVEczX0ZMRzJfSFdfVFNPXzMgb25seS4KLSAqLwotc3RhdGljIG5ldGRldl90eF90IHRnM19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgdGczX3NrYl9lcnJvcl91bm1hcChzdHJ1Y3QgdGczX25hcGkgKnRuYXBpLAorCQkJCXN0cnVjdCBza19idWZmICpza2IsIGludCBsYXN0KQogewotCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1MzIgbGVuLCBlbnRyeSwgYmFzZV9mbGFncywgbXNzOwotCWRtYV9hZGRyX3QgbWFwcGluZzsKLQlzdHJ1Y3QgdGczX25hcGkgKnRuYXBpOwotCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKLQl1bnNpZ25lZCBpbnQgaSwgbGFzdDsKKwlpbnQgaTsKKwl1MzIgZW50cnkgPSB0bmFwaS0+dHhfcHJvZDsKKwlzdHJ1Y3QgcmluZ19pbmZvICp0eGIgPSAmdG5hcGktPnR4X2J1ZmZlcnNbZW50cnldOwogCi0JdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKLQl0bmFwaSA9ICZ0cC0+bmFwaVtza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKV07Ci0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX1RTUykKLQkJdG5hcGkrKzsKLQotCS8qIFdlIGFyZSBydW5uaW5nIGluIEJIIGRpc2FibGVkIGNvbnRleHQgd2l0aCBuZXRpZl90eF9sb2NrCi0JICogYW5kIFRYIHJlY2xhaW0gcnVucyB2aWEgdHAtPm5hcGkucG9sbCBpbnNpZGUgb2YgYSBzb2Z0d2FyZQotCSAqIGludGVycnVwdC4gIEZ1cnRoZXJtb3JlLCBJUlEgcHJvY2Vzc2luZyBydW5zIGxvY2tsZXNzIHNvIHdlIGhhdmUKLQkgKiBubyBJUlEgY29udGV4dCBkZWFkbG9ja3MgdG8gd29ycnkgYWJvdXQgZWl0aGVyLiAgUmVqb2ljZSEKLQkgKi8KLQlpZiAodW5saWtlbHkodGczX3R4X2F2YWlsKHRuYXBpKSA8PSAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDEpKSkgewotCQlpZiAoIW5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkgewotCQkJbmV0aWZfdHhfc3RvcF9xdWV1ZSh0eHEpOwotCi0JCQkvKiBUaGlzIGlzIGEgaGFyZCBlcnJvciwgbG9nIGl0LiAqLwotCQkJbmV0ZGV2X2VycihkZXYsCi0JCQkJICAgIkJVRyEgVHggUmluZyBmdWxsIHdoZW4gcXVldWUgYXdha2UhXG4iKTsKLQkJfQotCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7Ci0JfQotCi0JZW50cnkgPSB0bmFwaS0+dHhfcHJvZDsKLQliYXNlX2ZsYWdzID0gMDsKLQltc3MgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplOwotCWlmIChtc3MpIHsKLQkJaW50IHRjcF9vcHRfbGVuLCBpcF90Y3BfbGVuOwotCQl1MzIgaGRybGVuOwotCi0JCWlmIChza2JfaGVhZGVyX2Nsb25lZChza2IpICYmCi0JCSAgICBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQykpIHsKLQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCWdvdG8gb3V0X3VubG9jazsKLQkJfQotCi0JCWlmIChza2JfaXNfZ3NvX3Y2KHNrYikpIHsKLQkJCWhkcmxlbiA9IHNrYl9oZWFkbGVuKHNrYikgLSBFVEhfSExFTjsKLQkJfSBlbHNlIHsKLQkJCXN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7Ci0KLQkJCXRjcF9vcHRfbGVuID0gdGNwX29wdGxlbihza2IpOwotCQkJaXBfdGNwX2xlbiA9IGlwX2hkcmxlbihza2IpICsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpOwotCi0JCQlpcGgtPmNoZWNrID0gMDsKLQkJCWlwaC0+dG90X2xlbiA9IGh0b25zKG1zcyArIGlwX3RjcF9sZW4gKyB0Y3Bfb3B0X2xlbik7Ci0JCQloZHJsZW4gPSBpcF90Y3BfbGVuICsgdGNwX29wdF9sZW47Ci0JCX0KLQotCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9IV19UU09fMykgewotCQkJbXNzIHw9IChoZHJsZW4gJiAweGMpIDw8IDEyOwotCQkJaWYgKGhkcmxlbiAmIDB4MTApCi0JCQkJYmFzZV9mbGFncyB8PSAweDAwMDAwMDEwOwotCQkJYmFzZV9mbGFncyB8PSAoaGRybGVuICYgMHgzZTApIDw8IDU7Ci0JCX0gZWxzZQotCQkJbXNzIHw9IGhkcmxlbiA8PCA5OwotCi0JCWJhc2VfZmxhZ3MgfD0gKFRYRF9GTEFHX0NQVV9QUkVfRE1BIHwKLQkJCSAgICAgICBUWERfRkxBR19DUFVfUE9TVF9ETUEpOwotCi0JCXRjcF9oZHIoc2tiKS0+Y2hlY2sgPSAwOwotCi0JfSBlbHNlIGlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7Ci0JCWJhc2VfZmxhZ3MgfD0gVFhEX0ZMQUdfVENQVURQX0NTVU07Ci0JfQotCi0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkKLQkJYmFzZV9mbGFncyB8PSAoVFhEX0ZMQUdfVkxBTiB8Ci0JCQkgICAgICAgKHZsYW5fdHhfdGFnX2dldChza2IpIDw8IDE2KSk7Ci0KLQlsZW4gPSBza2JfaGVhZGxlbihza2IpOwotCi0JLyogUXVldWUgc2tiIGRhdGEsIGEuay5hLiB0aGUgbWFpbiBza2IgZnJhZ21lbnQuICovCi0JbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKHRwLT5wZGV2LCBza2ItPmRhdGEsIGxlbiwgUENJX0RNQV9UT0RFVklDRSk7Ci0JaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcih0cC0+cGRldiwgbWFwcGluZykpIHsKLQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0JdG5hcGktPnR4X2J1ZmZlcnNbZW50cnldLnNrYiA9IHNrYjsKLQlkbWFfdW5tYXBfYWRkcl9zZXQoJnRuYXBpLT50eF9idWZmZXJzW2VudHJ5XSwgbWFwcGluZywgbWFwcGluZyk7Ci0KLQlpZiAoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfVVNFX0pVTUJPX0JERkxBRykgJiYKLQkgICAgIW1zcyAmJiBza2ItPmxlbiA+IFZMQU5fRVRIX0ZSQU1FX0xFTikKLQkJYmFzZV9mbGFncyB8PSBUWERfRkxBR19KTUJfUEtUOwotCi0JdGczX3NldF90eGQodG5hcGksIGVudHJ5LCBtYXBwaW5nLCBsZW4sIGJhc2VfZmxhZ3MsCi0JCSAgICAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9PSAwKSB8IChtc3MgPDwgMSkpOwotCi0JZW50cnkgPSBORVhUX1RYKGVudHJ5KTsKLQotCS8qIE5vdyBsb29wIHRocm91Z2ggYWRkaXRpb25hbCBkYXRhIGZyYWdtZW50cywgYW5kIHF1ZXVlIHRoZW0uICovCi0JaWYgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPiAwKSB7Ci0JCWxhc3QgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzIC0gMTsKLQkJZm9yIChpID0gMDsgaSA8PSBsYXN0OyBpKyspIHsKLQkJCXNrYl9mcmFnX3QgKmZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKLQotCQkJbGVuID0gZnJhZy0+c2l6ZTsKLQkJCW1hcHBpbmcgPSBwY2lfbWFwX3BhZ2UodHAtPnBkZXYsCi0JCQkJCSAgICAgICBmcmFnLT5wYWdlLAotCQkJCQkgICAgICAgZnJhZy0+cGFnZV9vZmZzZXQsCi0JCQkJCSAgICAgICBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcih0cC0+cGRldiwgbWFwcGluZykpCi0JCQkJZ290byBkbWFfZXJyb3I7Ci0KLQkJCXRuYXBpLT50eF9idWZmZXJzW2VudHJ5XS5za2IgPSBOVUxMOwotCQkJZG1hX3VubWFwX2FkZHJfc2V0KCZ0bmFwaS0+dHhfYnVmZmVyc1tlbnRyeV0sIG1hcHBpbmcsCi0JCQkJCSAgIG1hcHBpbmcpOwotCi0JCQl0ZzNfc2V0X3R4ZCh0bmFwaSwgZW50cnksIG1hcHBpbmcsIGxlbiwKLQkJCQkgICAgYmFzZV9mbGFncywgKGkgPT0gbGFzdCkgfCAobXNzIDw8IDEpKTsKLQotCQkJZW50cnkgPSBORVhUX1RYKGVudHJ5KTsKLQkJfQotCX0KLQotCS8qIFBhY2tldHMgYXJlIHJlYWR5LCB1cGRhdGUgVHggcHJvZHVjZXIgaWR4IGxvY2FsIGFuZCBvbiBjYXJkLiAqLwotCXR3MzJfdHhfbWJveCh0bmFwaS0+cHJvZG1ib3gsIGVudHJ5KTsKLQotCXRuYXBpLT50eF9wcm9kID0gZW50cnk7Ci0JaWYgKHVubGlrZWx5KHRnM190eF9hdmFpbCh0bmFwaSkgPD0gKE1BWF9TS0JfRlJBR1MgKyAxKSkpIHsKLQkJbmV0aWZfdHhfc3RvcF9xdWV1ZSh0eHEpOwotCi0JCS8qIG5ldGlmX3R4X3N0b3BfcXVldWUoKSBtdXN0IGJlIGRvbmUgYmVmb3JlIGNoZWNraW5nCi0JCSAqIGNoZWNraW5nIHR4IGluZGV4IGluIHRnM190eF9hdmFpbCgpIGJlbG93LCBiZWNhdXNlIGluCi0JCSAqIHRnM190eCgpLCB3ZSB1cGRhdGUgdHggaW5kZXggYmVmb3JlIGNoZWNraW5nIGZvcgotCQkgKiBuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKCkuCi0JCSAqLwotCQlzbXBfbWIoKTsKLQkJaWYgKHRnM190eF9hdmFpbCh0bmFwaSkgPiBURzNfVFhfV0FLRVVQX1RIUkVTSCh0bmFwaSkpCi0JCQluZXRpZl90eF93YWtlX3F1ZXVlKHR4cSk7Ci0JfQotCi1vdXRfdW5sb2NrOgotCW1taW93YigpOwotCi0JcmV0dXJuIE5FVERFVl9UWF9PSzsKLQotZG1hX2Vycm9yOgotCWxhc3QgPSBpOwotCWVudHJ5ID0gdG5hcGktPnR4X3Byb2Q7Ci0JdG5hcGktPnR4X2J1ZmZlcnNbZW50cnldLnNrYiA9IE5VTEw7Ci0JcGNpX3VubWFwX3NpbmdsZSh0cC0+cGRldiwKLQkJCSBkbWFfdW5tYXBfYWRkcigmdG5hcGktPnR4X2J1ZmZlcnNbZW50cnldLCBtYXBwaW5nKSwKKwlwY2lfdW5tYXBfc2luZ2xlKHRuYXBpLT50cC0+cGRldiwKKwkJCSBkbWFfdW5tYXBfYWRkcih0eGIsIG1hcHBpbmcpLAogCQkJIHNrYl9oZWFkbGVuKHNrYiksCiAJCQkgUENJX0RNQV9UT0RFVklDRSk7CiAJZm9yIChpID0gMDsgaSA8PSBsYXN0OyBpKyspIHsKIAkJc2tiX2ZyYWdfdCAqZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldOwotCQllbnRyeSA9IE5FWFRfVFgoZW50cnkpOwogCi0JCXBjaV91bm1hcF9wYWdlKHRwLT5wZGV2LAotCQkJICAgICAgIGRtYV91bm1hcF9hZGRyKCZ0bmFwaS0+dHhfYnVmZmVyc1tlbnRyeV0sCi0JCQkJCSAgICAgIG1hcHBpbmcpLAorCQllbnRyeSA9IE5FWFRfVFgoZW50cnkpOworCQl0eGIgPSAmdG5hcGktPnR4X2J1ZmZlcnNbZW50cnldOworCisJCXBjaV91bm1hcF9wYWdlKHRuYXBpLT50cC0+cGRldiwKKwkJCSAgICAgICBkbWFfdW5tYXBfYWRkcih0eGIsIG1hcHBpbmcpLAogCQkJICAgICAgIGZyYWctPnNpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOwogCX0KK30KKworLyogV29ya2Fyb3VuZCA0R0IgYW5kIDQwLWJpdCBoYXJkd2FyZSBETUEgYnVncy4gKi8KK3N0YXRpYyBpbnQgdGlnb24zX2RtYV9od2J1Z193b3JrYXJvdW5kKHN0cnVjdCB0ZzNfbmFwaSAqdG5hcGksCisJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgIHUzMiBiYXNlX2ZsYWdzLCB1MzIgbXNzKQoreworCXN0cnVjdCB0ZzMgKnRwID0gdG5hcGktPnRwOworCXN0cnVjdCBza19idWZmICpuZXdfc2tiOworCWRtYV9hZGRyX3QgbmV3X2FkZHIgPSAwOworCXUzMiBlbnRyeSA9IHRuYXBpLT50eF9wcm9kOworCWludCByZXQgPSAwOworCisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzAxKQorCQluZXdfc2tiID0gc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTsKKwllbHNlIHsKKwkJaW50IG1vcmVfaGVhZHJvb20gPSA0IC0gKCh1bnNpZ25lZCBsb25nKXNrYi0+ZGF0YSAmIDMpOworCisJCW5ld19za2IgPSBza2JfY29weV9leHBhbmQoc2tiLAorCQkJCQkgIHNrYl9oZWFkcm9vbShza2IpICsgbW9yZV9oZWFkcm9vbSwKKwkJCQkJICBza2JfdGFpbHJvb20oc2tiKSwgR0ZQX0FUT01JQyk7CisJfQorCisJaWYgKCFuZXdfc2tiKSB7CisJCXJldCA9IC0xOworCX0gZWxzZSB7CisJCS8qIE5ldyBTS0IgaXMgZ3VhcmFudGVlZCB0byBiZSBsaW5lYXIuICovCisJCW5ld19hZGRyID0gcGNpX21hcF9zaW5nbGUodHAtPnBkZXYsIG5ld19za2ItPmRhdGEsIG5ld19za2ItPmxlbiwKKwkJCQkJICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJLyogTWFrZSBzdXJlIHRoZSBtYXBwaW5nIHN1Y2NlZWRlZCAqLworCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHRwLT5wZGV2LCBuZXdfYWRkcikpIHsKKwkJCXJldCA9IC0xOworCQkJZGV2X2tmcmVlX3NrYihuZXdfc2tiKTsKKworCQkvKiBNYWtlIHN1cmUgbmV3IHNrYiBkb2VzIG5vdCBjcm9zcyBhbnkgNEcgYm91bmRhcmllcy4KKwkJICogRHJvcCB0aGUgcGFja2V0IGlmIGl0IGRvZXMuCisJCSAqLworCQl9IGVsc2UgaWYgKHRnM19mbGFnKHRwLCA0R19ETUFfQk5EUllfQlVHKSAmJgorCQkJICAgdGczXzRnX292ZXJmbG93X3Rlc3QobmV3X2FkZHIsIG5ld19za2ItPmxlbikpIHsKKwkJCXBjaV91bm1hcF9zaW5nbGUodHAtPnBkZXYsIG5ld19hZGRyLCBuZXdfc2tiLT5sZW4sCisJCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCXJldCA9IC0xOworCQkJZGV2X2tmcmVlX3NrYihuZXdfc2tiKTsKKwkJfSBlbHNlIHsKKwkJCXRuYXBpLT50eF9idWZmZXJzW2VudHJ5XS5za2IgPSBuZXdfc2tiOworCQkJZG1hX3VubWFwX2FkZHJfc2V0KCZ0bmFwaS0+dHhfYnVmZmVyc1tlbnRyeV0sCisJCQkJCSAgIG1hcHBpbmcsIG5ld19hZGRyKTsKKworCQkJdGczX3NldF90eGQodG5hcGksIGVudHJ5LCBuZXdfYWRkciwgbmV3X3NrYi0+bGVuLAorCQkJCSAgICBiYXNlX2ZsYWdzLCAxIHwgKG1zcyA8PCAxKSk7CisJCX0KKwl9CiAKIAlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIE5FVERFVl9UWF9PSzsKKworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBuZXRkZXZfdHhfdCB0ZzNfc3RhcnRfeG1pdF9kbWFfYnVnKHN0cnVjdCBza19idWZmICosCi0JCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgdGczX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CiAKIC8qIFVzZSBHU08gdG8gd29ya2Fyb3VuZCBhIHJhcmUgVFNPIGJ1ZyB0aGF0IG1heSBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUKICAqIFRTTyBoZWFkZXIgaXMgZ3JlYXRlciB0aGFuIDgwIGJ5dGVzLgpAQCAtNTg2OCw3ICs1ODc1LDcgQEAKIAkJbnNrYiA9IHNlZ3M7CiAJCXNlZ3MgPSBzZWdzLT5uZXh0OwogCQluc2tiLT5uZXh0ID0gTlVMTDsKLQkJdGczX3N0YXJ0X3htaXRfZG1hX2J1Zyhuc2tiLCB0cC0+ZGV2KTsKKwkJdGczX3N0YXJ0X3htaXQobnNrYiwgdHAtPmRldik7CiAJfSB3aGlsZSAoc2Vncyk7CiAKIHRnM190c29fYnVnX2VuZDoKQEAgLTU4NzgsMjIgKzU4ODUsMjEgQEAKIH0KIAogLyogaGFyZF9zdGFydF94bWl0IGZvciBkZXZpY2VzIHRoYXQgaGF2ZSB0aGUgNEcgYnVnIGFuZC9vciA0MC1iaXQgYnVnIGFuZAotICogc3VwcG9ydCBURzNfRkxHMl9IV19UU09fMSBvciBmaXJtd2FyZSBUU08gb25seS4KKyAqIHN1cHBvcnQgVEczX0ZMQUdfSFdfVFNPXzEgb3IgZmlybXdhcmUgVFNPIG9ubHkuCiAgKi8KLXN0YXRpYyBuZXRkZXZfdHhfdCB0ZzNfc3RhcnRfeG1pdF9kbWFfYnVnKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCB0ZzNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1MzIgbGVuLCBlbnRyeSwgYmFzZV9mbGFncywgbXNzOwotCWludCB3b3VsZF9oaXRfaHdidWc7CisJaW50IGkgPSAtMSwgd291bGRfaGl0X2h3YnVnOwogCWRtYV9hZGRyX3QgbWFwcGluZzsKIAlzdHJ1Y3QgdGczX25hcGkgKnRuYXBpOwogCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKLQl1bnNpZ25lZCBpbnQgaSwgbGFzdDsKKwl1bnNpZ25lZCBpbnQgbGFzdDsKIAogCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7CiAJdG5hcGkgPSAmdHAtPm5hcGlbc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYildOwotCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9UU1MpCisJaWYgKHRnM19mbGFnKHRwLCBFTkFCTEVfVFNTKSkKIAkJdG5hcGkrKzsKIAogCS8qIFdlIGFyZSBydW5uaW5nIGluIEJIIGRpc2FibGVkIGNvbnRleHQgd2l0aCBuZXRpZl90eF9sb2NrCkBAIC01OTQ0LDEzICs1OTUwLDE1IEBACiAJCX0KIAogCQlpZiAodW5saWtlbHkoKEVUSF9ITEVOICsgaGRyX2xlbikgPiA4MCkgJiYKLQkJCSAgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVFNPX0JVRykpCisJCSAgICB0ZzNfZmxhZyh0cCwgVFNPX0JVRykpCiAJCQlyZXR1cm4gdGczX3Rzb19idWcodHAsIHNrYik7CiAKIAkJYmFzZV9mbGFncyB8PSAoVFhEX0ZMQUdfQ1BVX1BSRV9ETUEgfAogCQkJICAgICAgIFRYRF9GTEFHX0NQVV9QT1NUX0RNQSk7CiAKLQkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSFdfVFNPKSB7CisJCWlmICh0ZzNfZmxhZyh0cCwgSFdfVFNPXzEpIHx8CisJCSAgICB0ZzNfZmxhZyh0cCwgSFdfVFNPXzIpIHx8CisJCSAgICB0ZzNfZmxhZyh0cCwgSFdfVFNPXzMpKSB7CiAJCQl0Y3BfaGRyKHNrYiktPmNoZWNrID0gMDsKIAkJCWJhc2VfZmxhZ3MgJj0gflRYRF9GTEFHX1RDUFVEUF9DU1VNOwogCQl9IGVsc2UKQEAgLTU5NTksMTQgKzU5NjcsMTQgQEAKIAkJCQkJCQkJIElQUFJPVE9fVENQLAogCQkJCQkJCQkgMCk7CiAKLQkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSFdfVFNPXzMpIHsKKwkJaWYgKHRnM19mbGFnKHRwLCBIV19UU09fMykpIHsKIAkJCW1zcyB8PSAoaGRyX2xlbiAmIDB4YykgPDwgMTI7CiAJCQlpZiAoaGRyX2xlbiAmIDB4MTApCiAJCQkJYmFzZV9mbGFncyB8PSAweDAwMDAwMDEwOwogCQkJYmFzZV9mbGFncyB8PSAoaGRyX2xlbiAmIDB4M2UwKSA8PCA1OwotCQl9IGVsc2UgaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSFdfVFNPXzIpCisJCX0gZWxzZSBpZiAodGczX2ZsYWcodHAsIEhXX1RTT18yKSkKIAkJCW1zcyB8PSBoZHJfbGVuIDw8IDk7Ci0JCWVsc2UgaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX1RTT18xKSB8fAorCQllbHNlIGlmICh0ZzNfZmxhZyh0cCwgSFdfVFNPXzEpIHx8CiAJCQkgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDUpIHsKIAkJCWlmICh0Y3Bfb3B0X2xlbiB8fCBpcGgtPmlobCA+IDUpIHsKIAkJCQlpbnQgdHNmbGFnczsKQEAgLTU5ODgsNyArNTk5Niw3IEBACiAJCWJhc2VfZmxhZ3MgfD0gKFRYRF9GTEFHX1ZMQU4gfAogCQkJICAgICAgICh2bGFuX3R4X3RhZ19nZXQoc2tiKSA8PCAxNikpOwogCi0JaWYgKCh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1VTRV9KVU1CT19CREZMQUcpICYmCisJaWYgKHRnM19mbGFnKHRwLCBVU0VfSlVNQk9fQkRGTEFHKSAmJgogCSAgICAhbXNzICYmIHNrYi0+bGVuID4gVkxBTl9FVEhfRlJBTUVfTEVOKQogCQliYXNlX2ZsYWdzIHw9IFRYRF9GTEFHX0pNQl9QS1Q7CiAKQEAgLTYwMDUsMTggKzYwMTMsMTggQEAKIAogCXdvdWxkX2hpdF9od2J1ZyA9IDA7CiAKLQlpZiAoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfU0hPUlRfRE1BX0JVRykgJiYgbGVuIDw9IDgpCisJaWYgKHRnM19mbGFnKHRwLCBTSE9SVF9ETUFfQlVHKSAmJiBsZW4gPD0gOCkKIAkJd291bGRfaGl0X2h3YnVnID0gMTsKIAotCWlmICgodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM180R19ETUFfQk5EUllfQlVHKSAmJgorCWlmICh0ZzNfZmxhZyh0cCwgNEdfRE1BX0JORFJZX0JVRykgJiYKIAkgICAgdGczXzRnX292ZXJmbG93X3Rlc3QobWFwcGluZywgbGVuKSkKIAkJd291bGRfaGl0X2h3YnVnID0gMTsKIAotCWlmICgodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM180MEJJVF9ETUFfTElNSVRfQlVHKSAmJgorCWlmICh0ZzNfZmxhZyh0cCwgNDBCSVRfRE1BX0xJTUlUX0JVRykgJiYKIAkgICAgdGczXzQwYml0X292ZXJmbG93X3Rlc3QodHAsIG1hcHBpbmcsIGxlbikpCiAJCXdvdWxkX2hpdF9od2J1ZyA9IDE7CiAKLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM181NzAxX0RNQV9CVUcpCisJaWYgKHRnM19mbGFnKHRwLCA1NzAxX0RNQV9CVUcpKQogCQl3b3VsZF9oaXRfaHdidWcgPSAxOwogCiAJdGczX3NldF90eGQodG5hcGksIGVudHJ5LCBtYXBwaW5nLCBsZW4sIGJhc2VfZmxhZ3MsCkBAIC02MDQyLDE5ICs2MDUwLDIxIEBACiAJCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHRwLT5wZGV2LCBtYXBwaW5nKSkKIAkJCQlnb3RvIGRtYV9lcnJvcjsKIAotCQkJaWYgKCh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1NIT1JUX0RNQV9CVUcpICYmCisJCQlpZiAodGczX2ZsYWcodHAsIFNIT1JUX0RNQV9CVUcpICYmCiAJCQkgICAgbGVuIDw9IDgpCiAJCQkJd291bGRfaGl0X2h3YnVnID0gMTsKIAotCQkJaWYgKCh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzRHX0RNQV9CTkRSWV9CVUcpICYmCisJCQlpZiAodGczX2ZsYWcodHAsIDRHX0RNQV9CTkRSWV9CVUcpICYmCiAJCQkgICAgdGczXzRnX292ZXJmbG93X3Rlc3QobWFwcGluZywgbGVuKSkKIAkJCQl3b3VsZF9oaXRfaHdidWcgPSAxOwogCi0JCQlpZiAoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNDBCSVRfRE1BX0xJTUlUX0JVRykgJiYKKwkJCWlmICh0ZzNfZmxhZyh0cCwgNDBCSVRfRE1BX0xJTUlUX0JVRykgJiYKIAkJCSAgICB0ZzNfNDBiaXRfb3ZlcmZsb3dfdGVzdCh0cCwgbWFwcGluZywgbGVuKSkKIAkJCQl3b3VsZF9oaXRfaHdidWcgPSAxOwogCi0JCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9IV19UU08pCisJCQlpZiAodGczX2ZsYWcodHAsIEhXX1RTT18xKSB8fAorCQkJICAgIHRnM19mbGFnKHRwLCBIV19UU09fMikgfHwKKwkJCSAgICB0ZzNfZmxhZyh0cCwgSFdfVFNPXzMpKQogCQkJCXRnM19zZXRfdHhkKHRuYXBpLCBlbnRyeSwgbWFwcGluZywgbGVuLAogCQkJCQkgICAgYmFzZV9mbGFncywgKGkgPT0gbGFzdCl8KG1zcyA8PCAxKSk7CiAJCQllbHNlCkBAIC02MDY2LDIwICs2MDc2LDE1IEBACiAJfQogCiAJaWYgKHdvdWxkX2hpdF9od2J1ZykgewotCQl1MzIgbGFzdF9wbHVzX29uZSA9IGVudHJ5OwotCQl1MzIgc3RhcnQ7Ci0KLQkJc3RhcnQgPSBlbnRyeSAtIDEgLSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOwotCQlzdGFydCAmPSAoVEczX1RYX1JJTkdfU0laRSAtIDEpOworCQl0ZzNfc2tiX2Vycm9yX3VubWFwKHRuYXBpLCBza2IsIGkpOwogCiAJCS8qIElmIHRoZSB3b3JrYXJvdW5kIGZhaWxzIGR1ZSB0byBtZW1vcnkvbWFwcGluZwogCQkgKiBmYWlsdXJlLCBzaWxlbnRseSBkcm9wIHRoaXMgcGFja2V0LgogCQkgKi8KLQkJaWYgKHRpZ29uM19kbWFfaHdidWdfd29ya2Fyb3VuZCh0bmFwaSwgc2tiLCBsYXN0X3BsdXNfb25lLAotCQkJCQkJJnN0YXJ0LCBiYXNlX2ZsYWdzLCBtc3MpKQorCQlpZiAodGlnb24zX2RtYV9od2J1Z193b3JrYXJvdW5kKHRuYXBpLCBza2IsIGJhc2VfZmxhZ3MsIG1zcykpCiAJCQlnb3RvIG91dF91bmxvY2s7CiAKLQkJZW50cnkgPSBzdGFydDsKKwkJZW50cnkgPSBORVhUX1RYKHRuYXBpLT50eF9wcm9kKTsKIAl9CiAKIAkvKiBQYWNrZXRzIGFyZSByZWFkeSwgdXBkYXRlIFR4IHByb2R1Y2VyIGlkeCBsb2NhbCBhbmQgb24gY2FyZC4gKi8KQEAgLTYxMDUsNDMgKzYxMTAsODYgQEAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogCiBkbWFfZXJyb3I6Ci0JbGFzdCA9IGk7Ci0JZW50cnkgPSB0bmFwaS0+dHhfcHJvZDsKLQl0bmFwaS0+dHhfYnVmZmVyc1tlbnRyeV0uc2tiID0gTlVMTDsKLQlwY2lfdW5tYXBfc2luZ2xlKHRwLT5wZGV2LAotCQkJIGRtYV91bm1hcF9hZGRyKCZ0bmFwaS0+dHhfYnVmZmVyc1tlbnRyeV0sIG1hcHBpbmcpLAotCQkJIHNrYl9oZWFkbGVuKHNrYiksCi0JCQkgUENJX0RNQV9UT0RFVklDRSk7Ci0JZm9yIChpID0gMDsgaSA8PSBsYXN0OyBpKyspIHsKLQkJc2tiX2ZyYWdfdCAqZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldOwotCQllbnRyeSA9IE5FWFRfVFgoZW50cnkpOwotCi0JCXBjaV91bm1hcF9wYWdlKHRwLT5wZGV2LAotCQkJICAgICAgIGRtYV91bm1hcF9hZGRyKCZ0bmFwaS0+dHhfYnVmZmVyc1tlbnRyeV0sCi0JCQkJCSAgICAgIG1hcHBpbmcpLAotCQkJICAgICAgIGZyYWctPnNpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOwotCX0KLQorCXRnM19za2JfZXJyb3JfdW5tYXAodG5hcGksIHNrYiwgaSk7CiAJZGV2X2tmcmVlX3NrYihza2IpOworCXRuYXBpLT50eF9idWZmZXJzW3RuYXBpLT50eF9wcm9kXS5za2IgPSBOVUxMOwogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKK3N0YXRpYyB2b2lkIHRnM19zZXRfbG9vcGJhY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZlYXR1cmVzKQoreworCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChmZWF0dXJlcyAmIE5FVElGX0ZfTE9PUEJBQ0spIHsKKwkJaWYgKHRwLT5tYWNfbW9kZSAmIE1BQ19NT0RFX1BPUlRfSU5UX0xQQkFDSykKKwkJCXJldHVybjsKKworCQkvKgorCQkgKiBDbGVhciBNQUNfTU9ERV9IQUxGX0RVUExFWCBvciB5b3Ugd29uJ3QgZ2V0IHBhY2tldHMgYmFjayBpbgorCQkgKiBsb29wYmFjayBtb2RlIGlmIEhhbGYtRHVwbGV4IG1vZGUgd2FzIG5lZ290aWF0ZWQgZWFybGllci4KKwkJICovCisJCXRwLT5tYWNfbW9kZSAmPSB+TUFDX01PREVfSEFMRl9EVVBMRVg7CisKKwkJLyogRW5hYmxlIGludGVybmFsIE1BQyBsb29wYmFjayBtb2RlICovCisJCXRwLT5tYWNfbW9kZSB8PSBNQUNfTU9ERV9QT1JUX0lOVF9MUEJBQ0s7CisJCXNwaW5fbG9ja19iaCgmdHAtPmxvY2spOworCQl0dzMyKE1BQ19NT0RFLCB0cC0+bWFjX21vZGUpOworCQluZXRpZl9jYXJyaWVyX29uKHRwLT5kZXYpOworCQlzcGluX3VubG9ja19iaCgmdHAtPmxvY2spOworCQluZXRkZXZfaW5mbyhkZXYsICJJbnRlcm5hbCBNQUMgbG9vcGJhY2sgbW9kZSBlbmFibGVkLlxuIik7CisJfSBlbHNlIHsKKwkJaWYgKCEodHAtPm1hY19tb2RlICYgTUFDX01PREVfUE9SVF9JTlRfTFBCQUNLKSkKKwkJCXJldHVybjsKKworCQkvKiBEaXNhYmxlIGludGVybmFsIE1BQyBsb29wYmFjayBtb2RlICovCisJCXRwLT5tYWNfbW9kZSAmPSB+TUFDX01PREVfUE9SVF9JTlRfTFBCQUNLOworCQlzcGluX2xvY2tfYmgoJnRwLT5sb2NrKTsKKwkJdHczMihNQUNfTU9ERSwgdHAtPm1hY19tb2RlKTsKKwkJLyogRm9yY2UgbGluayBzdGF0dXMgY2hlY2sgKi8KKwkJdGczX3NldHVwX3BoeSh0cCwgMSk7CisJCXNwaW5fdW5sb2NrX2JoKCZ0cC0+bG9jayk7CisJCW5ldGRldl9pbmZvKGRldiwgIkludGVybmFsIE1BQyBsb29wYmFjayBtb2RlIGRpc2FibGVkLlxuIik7CisJfQorfQorCitzdGF0aWMgdTMyIHRnM19maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZlYXR1cmVzKQoreworCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChkZXYtPm10dSA+IEVUSF9EQVRBX0xFTiAmJiB0ZzNfZmxhZyh0cCwgNTc4MF9DTEFTUykpCisJCWZlYXR1cmVzICY9IH5ORVRJRl9GX0FMTF9UU087CisKKwlyZXR1cm4gZmVhdHVyZXM7Cit9CisKK3N0YXRpYyBpbnQgdGczX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpCit7CisJdTMyIGNoYW5nZWQgPSBkZXYtPmZlYXR1cmVzIF4gZmVhdHVyZXM7CisKKwlpZiAoKGNoYW5nZWQgJiBORVRJRl9GX0xPT1BCQUNLKSAmJiBuZXRpZl9ydW5uaW5nKGRldikpCisJCXRnM19zZXRfbG9vcGJhY2soZGV2LCBmZWF0dXJlcyk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIHRnM19zZXRfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB0ZzMgKnRwLAogCQkJICAgICAgIGludCBuZXdfbXR1KQogewogCWRldi0+bXR1ID0gbmV3X210dTsKIAogCWlmIChuZXdfbXR1ID4gRVRIX0RBVEFfTEVOKSB7Ci0JCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3ODBfQ0xBU1MpIHsKLQkJCXRwLT50ZzNfZmxhZ3MyICY9IH5URzNfRkxHMl9UU09fQ0FQQUJMRTsKLQkJCWV0aHRvb2xfb3Bfc2V0X3RzbyhkZXYsIDApOworCQlpZiAodGczX2ZsYWcodHAsIDU3ODBfQ0xBU1MpKSB7CisJCQluZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7CisJCQl0ZzNfZmxhZ19jbGVhcih0cCwgVFNPX0NBUEFCTEUpOwogCQl9IGVsc2UgewotCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19KVU1CT19SSU5HX0VOQUJMRTsKKwkJCXRnM19mbGFnX3NldCh0cCwgSlVNQk9fUklOR19FTkFCTEUpOwogCQl9CiAJfSBlbHNlIHsKLQkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc4MF9DTEFTUykKLQkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX1RTT19DQVBBQkxFOwotCQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19KVU1CT19SSU5HX0VOQUJMRTsKKwkJaWYgKHRnM19mbGFnKHRwLCA1NzgwX0NMQVNTKSkgeworCQkJdGczX2ZsYWdfc2V0KHRwLCBUU09fQ0FQQUJMRSk7CisJCQluZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7CisJCX0KKwkJdGczX2ZsYWdfY2xlYXIodHAsIEpVTUJPX1JJTkdfRU5BQkxFKTsKIAl9CiB9CiAKQEAgLTYxOTUsNyArNjI0Myw3IEBACiAJCQl0ZzNfcnhfc2tiX2ZyZWUodHAsICZ0cHItPnJ4X3N0ZF9idWZmZXJzW2ldLAogCQkJCQl0cC0+cnhfcGt0X21hcF9zeik7CiAKLQkJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19KVU1CT19DQVBBQkxFKSB7CisJCWlmICh0ZzNfZmxhZyh0cCwgSlVNQk9fQ0FQQUJMRSkpIHsKIAkJCWZvciAoaSA9IHRwci0+cnhfam1iX2NvbnNfaWR4OwogCQkJICAgICBpICE9IHRwci0+cnhfam1iX3Byb2RfaWR4OwogCQkJICAgICBpID0gKGkgKyAxKSAmIHRwLT5yeF9qbWJfcmluZ19tYXNrKSB7CkBAIC02MjExLDggKzYyNTksNyBAQAogCQl0ZzNfcnhfc2tiX2ZyZWUodHAsICZ0cHItPnJ4X3N0ZF9idWZmZXJzW2ldLAogCQkJCXRwLT5yeF9wa3RfbWFwX3N6KTsKIAotCWlmICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0pVTUJPX0NBUEFCTEUpICYmCi0JICAgICEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzgwX0NMQVNTKSkgeworCWlmICh0ZzNfZmxhZyh0cCwgSlVNQk9fQ0FQQUJMRSkgJiYgIXRnM19mbGFnKHRwLCA1NzgwX0NMQVNTKSkgewogCQlmb3IgKGkgPSAwOyBpIDw9IHRwLT5yeF9qbWJfcmluZ19tYXNrOyBpKyspCiAJCQl0ZzNfcnhfc2tiX2ZyZWUodHAsICZ0cHItPnJ4X2ptYl9idWZmZXJzW2ldLAogCQkJCQlURzNfUlhfSk1CX01BUF9TWik7CkBAIC02MjQ5LDcgKzYyOTYsNyBAQAogCW1lbXNldCh0cHItPnJ4X3N0ZCwgMCwgVEczX1JYX1NURF9SSU5HX0JZVEVTKHRwKSk7CiAKIAlyeF9wa3RfZG1hX3N6ID0gVEczX1JYX1NURF9ETUFfU1o7Ci0JaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3ODBfQ0xBU1MpICYmCisJaWYgKHRnM19mbGFnKHRwLCA1NzgwX0NMQVNTKSAmJgogCSAgICB0cC0+ZGV2LT5tdHUgPiBFVEhfREFUQV9MRU4pCiAJCXJ4X3BrdF9kbWFfc3ogPSBURzNfUlhfSk1CX0RNQV9TWjsKIAl0cC0+cnhfcGt0X21hcF9zeiA9IFRHM19SWF9ETUFfVE9fTUFQX1NaKHJ4X3BrdF9kbWFfc3opOwpAQCAtNjI4MiwxMyArNjMyOSwxMiBAQAogCQl9CiAJfQogCi0JaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0pVTUJPX0NBUEFCTEUpIHx8Ci0JICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3ODBfQ0xBU1MpKQorCWlmICghdGczX2ZsYWcodHAsIEpVTUJPX0NBUEFCTEUpIHx8IHRnM19mbGFnKHRwLCA1NzgwX0NMQVNTKSkKIAkJZ290byBkb25lOwogCiAJbWVtc2V0KHRwci0+cnhfam1iLCAwLCBURzNfUlhfSk1CX1JJTkdfQllURVModHApKTsKIAotCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19KVU1CT19SSU5HX0VOQUJMRSkpCisJaWYgKCF0ZzNfZmxhZyh0cCwgSlVNQk9fUklOR19FTkFCTEUpKQogCQlnb3RvIGRvbmU7CiAKIAlmb3IgKGkgPSAwOyBpIDw9IHRwLT5yeF9qbWJfcmluZ19tYXNrOyBpKyspIHsKQEAgLTYzNTcsOCArNjQwMyw3IEBACiAJaWYgKCF0cHItPnJ4X3N0ZCkKIAkJZ290byBlcnJfb3V0OwogCi0JaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfSlVNQk9fQ0FQQUJMRSkgJiYKLQkgICAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3ODBfQ0xBU1MpKSB7CisJaWYgKHRnM19mbGFnKHRwLCBKVU1CT19DQVBBQkxFKSAmJiAhdGczX2ZsYWcodHAsIDU3ODBfQ0xBU1MpKSB7CiAJCXRwci0+cnhfam1iX2J1ZmZlcnMgPSBremFsbG9jKFRHM19SWF9KTUJfQlVGRl9SSU5HX1NJWkUodHApLAogCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKIAkJaWYgKCF0cHItPnJ4X2ptYl9idWZmZXJzKQpAQCAtNjU1Niw4ICs2NjAxLDggQEAKIAkJLyogSWYgbXVsdGl2ZWN0b3IgVFNTIGlzIGVuYWJsZWQsIHZlY3RvciAwIGRvZXMgbm90IGhhbmRsZQogCQkgKiB0eCBpbnRlcnJ1cHRzLiAgRG9uJ3QgYWxsb2NhdGUgYW55IHJlc291cmNlcyBmb3IgaXQuCiAJCSAqLwotCQlpZiAoKCFpICYmICEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfVFNTKSkgfHwKLQkJICAgIChpICYmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9UU1MpKSkgeworCQlpZiAoKCFpICYmICF0ZzNfZmxhZyh0cCwgRU5BQkxFX1RTUykpIHx8CisJCSAgICAoaSAmJiB0ZzNfZmxhZyh0cCwgRU5BQkxFX1RTUykpKSB7CiAJCQl0bmFwaS0+dHhfYnVmZmVycyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByaW5nX2luZm8pICoKIAkJCQkJCSAgICBURzNfVFhfUklOR19TSVpFLAogCQkJCQkJICAgIEdGUF9LRVJORUwpOwpAQCAtNjU5Nyw3ICs2NjQyLDcgQEAKIAkJICogSWYgbXVsdGl2ZWN0b3IgUlNTIGlzIGVuYWJsZWQsIHZlY3RvciAwIGRvZXMgbm90IGhhbmRsZQogCQkgKiByeCBvciB0eCBpbnRlcnJ1cHRzLiAgRG9uJ3QgYWxsb2NhdGUgYW55IHJlc291cmNlcyBmb3IgaXQuCiAJCSAqLwotCQlpZiAoIWkgJiYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX1JTUykpCisJCWlmICghaSAmJiB0ZzNfZmxhZyh0cCwgRU5BQkxFX1JTUykpCiAJCQljb250aW51ZTsKIAogCQl0bmFwaS0+cnhfcmNiID0gZG1hX2FsbG9jX2NvaGVyZW50KCZ0cC0+cGRldi0+ZGV2LApAQCAtNjYyNyw3ICs2NjcyLDcgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAl1MzIgdmFsOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSB7CisJaWYgKHRnM19mbGFnKHRwLCA1NzA1X1BMVVMpKSB7CiAJCXN3aXRjaCAob2ZzKSB7CiAJCWNhc2UgUkNWTFNDX01PREU6CiAJCWNhc2UgRE1BQ19NT0RFOgpAQCAtNjczNyw3ICs2NzgyLDcgQEAKIAl1MzIgYXBlZGF0YTsKIAogCS8qIE5DU0kgZG9lcyBub3Qgc3VwcG9ydCBBUEUgZXZlbnRzICovCi0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfQVBFX0hBU19OQ1NJKQorCWlmICh0ZzNfZmxhZyh0cCwgQVBFX0hBU19OQ1NJKSkKIAkJcmV0dXJuOwogCiAJYXBlZGF0YSA9IHRnM19hcGVfcmVhZDMyKHRwLCBURzNfQVBFX1NFR19TSUcpOwpAQCAtNjc3Niw3ICs2ODIxLDcgQEAKIAl1MzIgZXZlbnQ7CiAJdTMyIGFwZWRhdGE7CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpKQorCWlmICghdGczX2ZsYWcodHAsIEVOQUJMRV9BUEUpKQogCQlyZXR1cm47CiAKIAlzd2l0Y2ggKGtpbmQpIHsKQEAgLTY4MDUsNyArNjg1MCw3IEBACiAJCXRnM19hcGVfd3JpdGUzMih0cCwgVEczX0FQRV9IT1NUX1NFR19TSUcsIDB4MCk7CiAKIAkJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZ0cC0+cGRldi0+ZGV2KSAmJgotCQkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19XT0xfRU5BQkxFKSkgeworCQkgICAgdGczX2ZsYWcodHAsIFdPTF9FTkFCTEUpKSB7CiAJCQl0ZzNfYXBlX3dyaXRlMzIodHAsIFRHM19BUEVfSE9TVF9XT0xfU1BFRUQsCiAJCQkJCSAgICBURzNfQVBFX0hPU1RfV09MX1NQRUVEX0FVVE8pOwogCQkJYXBlZGF0YSA9IFRHM19BUEVfSE9TVF9EUlZSX1NUQVRFX1dPTDsKQEAgLTY4MzQsNyArNjg3OSw3IEBACiAJdGczX3dyaXRlX21lbSh0cCwgTklDX1NSQU1fRklSTVdBUkVfTUJPWCwKIAkJICAgICAgTklDX1NSQU1fRklSTVdBUkVfTUJPWF9NQUdJQzEpOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfQVNGX05FV19IQU5EU0hBS0UpIHsKKwlpZiAodGczX2ZsYWcodHAsIEFTRl9ORVdfSEFORFNIQUtFKSkgewogCQlzd2l0Y2ggKGtpbmQpIHsKIAkJY2FzZSBSRVNFVF9LSU5EX0lOSVQ6CiAJCQl0ZzNfd3JpdGVfbWVtKHRwLCBOSUNfU1JBTV9GV19EUlZfU1RBVEVfTUJPWCwKQEAgLTY4NjQsNyArNjkwOSw3IEBACiAvKiB0cC0+bG9jayBpcyBoZWxkLiAqLwogc3RhdGljIHZvaWQgdGczX3dyaXRlX3NpZ19wb3N0X3Jlc2V0KHN0cnVjdCB0ZzMgKnRwLCBpbnQga2luZCkKIHsKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9BU0ZfTkVXX0hBTkRTSEFLRSkgeworCWlmICh0ZzNfZmxhZyh0cCwgQVNGX05FV19IQU5EU0hBS0UpKSB7CiAJCXN3aXRjaCAoa2luZCkgewogCQljYXNlIFJFU0VUX0tJTkRfSU5JVDoKIAkJCXRnM193cml0ZV9tZW0odHAsIE5JQ19TUkFNX0ZXX0RSVl9TVEFURV9NQk9YLApAQCAtNjg4OCw3ICs2OTMzLDcgQEAKIC8qIHRwLT5sb2NrIGlzIGhlbGQuICovCiBzdGF0aWMgdm9pZCB0ZzNfd3JpdGVfc2lnX2xlZ2FjeShzdHJ1Y3QgdGczICp0cCwgaW50IGtpbmQpCiB7Ci0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSB7CisJaWYgKHRnM19mbGFnKHRwLCBFTkFCTEVfQVNGKSkgewogCQlzd2l0Y2ggKGtpbmQpIHsKIAkJY2FzZSBSRVNFVF9LSU5EX0lOSVQ6CiAJCQl0ZzNfd3JpdGVfbWVtKHRwLCBOSUNfU1JBTV9GV19EUlZfU1RBVEVfTUJPWCwKQEAgLTY5MzksOSArNjk4NCw4IEBACiAJICogb2YgdGhlIGFib3ZlIGxvb3AgYXMgYW4gZXJyb3IsIGJ1dCBkbyByZXBvcnQgdGhlIGxhY2sgb2YKIAkgKiBydW5uaW5nIGZpcm13YXJlIG9uY2UuCiAJICovCi0JaWYgKGkgPj0gMTAwMDAwICYmCi0JICAgICEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9OT19GV0FSRV9SRVBPUlRFRCkpIHsKLQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfTk9fRldBUkVfUkVQT1JURUQ7CisJaWYgKGkgPj0gMTAwMDAwICYmICF0ZzNfZmxhZyh0cCwgTk9fRldBUkVfUkVQT1JURUQpKSB7CisJCXRnM19mbGFnX3NldCh0cCwgTk9fRldBUkVfUkVQT1JURUQpOwogCiAJCW5ldGRldl9pbmZvKHRwLT5kZXYsICJObyBmaXJtd2FyZSBydW5uaW5nXG4iKTsKIAl9CkBAIC02OTc0LDEwICs3MDE4LDEwIEBACiAJLyogU2V0IE1BWCBQQ0kgcmV0cnkgdG8gemVyby4gKi8KIAl2YWwgPSAoUENJU1RBVEVfUk9NX0VOQUJMRSB8IFBDSVNUQVRFX1JPTV9SRVRSWV9FTkFCTEUpOwogCWlmICh0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTcwNF9BMCAmJgotCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1BDSVhfTU9ERSkpCisJICAgIHRnM19mbGFnKHRwLCBQQ0lYX01PREUpKQogCQl2YWwgfD0gUENJU1RBVEVfUkVUUllfU0FNRV9ETUE7CiAJLyogQWxsb3cgcmVhZHMgYW5kIHdyaXRlcyB0byB0aGUgQVBFIHJlZ2lzdGVyIGFuZCBtZW1vcnkgc3BhY2UuICovCi0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkKKwlpZiAodGczX2ZsYWcodHAsIEVOQUJMRV9BUEUpKQogCQl2YWwgfD0gUENJU1RBVEVfQUxMT1dfQVBFX0NUTFNQQ19XUiB8CiAJCSAgICAgICBQQ0lTVEFURV9BTExPV19BUEVfU0hNRU1fV1IgfAogCQkgICAgICAgUENJU1RBVEVfQUxMT1dfQVBFX1BTUEFDRV9XUjsKQEAgLTY5ODYsNyArNzAzMCw3IEBACiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHRwLT5wZGV2LCBQQ0lfQ09NTUFORCwgdHAtPnBjaV9jbWQpOwogCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81Nzg1KSB7Ci0JCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BDSV9FWFBSRVNTKQorCQlpZiAodGczX2ZsYWcodHAsIFBDSV9FWFBSRVNTKSkKIAkJCXBjaWVfc2V0X3JlYWRycSh0cC0+cGRldiwgdHAtPnBjaWVfcmVhZHJxKTsKIAkJZWxzZSB7CiAJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUodHAtPnBkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsCkBAIC02OTk3LDcgKzcwNDEsNyBAQAogCX0KIAogCS8qIE1ha2Ugc3VyZSBQQ0ktWCByZWxheGVkIG9yZGVyaW5nIGJpdCBpcyBjbGVhci4gKi8KLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1BDSVhfTU9ERSkgeworCWlmICh0ZzNfZmxhZyh0cCwgUENJWF9NT0RFKSkgewogCQl1MTYgcGNpeF9jbWQ7CiAKIAkJcGNpX3JlYWRfY29uZmlnX3dvcmQodHAtPnBkZXYsIHRwLT5wY2l4X2NhcCArIFBDSV9YX0NNRCwKQEAgLTcwMDcsMTIgKzcwNTEsMTIgQEAKIAkJCQkgICAgICBwY2l4X2NtZCk7CiAJfQogCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc4MF9DTEFTUykgeworCWlmICh0ZzNfZmxhZyh0cCwgNTc4MF9DTEFTUykpIHsKIAogCQkvKiBDaGlwIHJlc2V0IG9uIDU3ODAgd2lsbCByZXNldCBNU0kgZW5hYmxlIGJpdCwKIAkJICogc28gbmVlZCB0byByZXN0b3JlIGl0LgogCQkgKi8KLQkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJKSB7CisJCWlmICh0ZzNfZmxhZyh0cCwgVVNJTkdfTVNJKSkgewogCQkJdTE2IGN0cmw7CiAKIAkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHRwLT5wZGV2LApAQCAtNzA1Miw3ICs3MDk2LDcgQEAKIAl0ZzNfc2F2ZV9wY2lfc3RhdGUodHApOwogCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzUyIHx8Ci0JICAgICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3NTVfUExVUykpCisJICAgIHRnM19mbGFnKHRwLCA1NzU1X1BMVVMpKQogCQl0dzMyKEdSQ19GQVNUQk9PVF9QQywgMCk7CiAKIAkvKgpAQCAtNzA3MSw3ICs3MTE1LDcgQEAKIAkgKiBhdCB0aGlzIHRpbWUsIGJ1dCB0aGUgaXJxIGhhbmRsZXIgbWF5IHN0aWxsIGJlIGNhbGxlZCBkdWUgdG8gaXJxCiAJICogc2hhcmluZyBvciBpcnFwb2xsLgogCSAqLwotCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfQ0hJUF9SRVNFVFRJTkc7CisJdGczX2ZsYWdfc2V0KHRwLCBDSElQX1JFU0VUVElORyk7CiAJZm9yIChpID0gMDsgaSA8IHRwLT5pcnFfY250OyBpKyspIHsKIAkJc3RydWN0IHRnM19uYXBpICp0bmFwaSA9ICZ0cC0+bmFwaVtpXTsKIAkJaWYgKHRuYXBpLT5od19zdGF0dXMpIHsKQEAgLTcwOTQsMTAgKzcxMzgsMTAgQEAKIAkvKiBkbyB0aGUgcmVzZXQgKi8KIAl2YWwgPSBHUkNfTUlTQ19DRkdfQ09SRUNMS19SRVNFVDsKIAotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BDSV9FWFBSRVNTKSB7CisJaWYgKHRnM19mbGFnKHRwLCBQQ0lfRVhQUkVTUykpIHsKIAkJLyogRm9yY2UgUENJZSAxLjBhIG1vZGUgKi8KIAkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81Nzg1ICYmCi0JCSAgICAhKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTcxN19QTFVTKSAmJgorCQkgICAgIXRnM19mbGFnKHRwLCA1Nzc2NV9QTFVTKSAmJgogCQkgICAgdHIzMihURzNfUENJRV9QSFlfVFNUQ1RMKSA9PQogCQkgICAgKFRHM19QQ0lFX1BIWV9UU1RDVExfUENJRTEwIHwgVEczX1BDSUVfUEhZX1RTVENUTF9QU0NSQU0pKQogCQkJdHczMihURzNfUENJRV9QSFlfVFNUQ1RMLCBURzNfUENJRV9QSFlfVFNUQ1RMX1BTQ1JBTSk7CkBAIC03MTE1LDggKzcxNTksNyBAQAogCX0KIAogCS8qIE1hbmFnZSBncGh5IHBvd2VyIGZvciBhbGwgQ1BNVSBhYnNlbnQgUENJZSBkZXZpY2VzLiAqLwotCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpICYmCi0JICAgICEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0NQTVVfUFJFU0VOVCkpCisJaWYgKHRnM19mbGFnKHRwLCA1NzA1X1BMVVMpICYmICF0ZzNfZmxhZyh0cCwgQ1BNVV9QUkVTRU5UKSkKIAkJdmFsIHw9IEdSQ19NSVNDX0NGR19LRUVQX0dQSFlfUE9XRVI7CiAKIAl0dzMyKEdSQ19NSVNDX0NGRywgdmFsKTsKQEAgLTcxNDksNyArNzE5Miw3IEBACiAKIAl1ZGVsYXkoMTIwKTsKIAotCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QQ0lfRVhQUkVTUykgJiYgdHAtPnBjaWVfY2FwKSB7CisJaWYgKHRnM19mbGFnKHRwLCBQQ0lfRVhQUkVTUykgJiYgdHAtPnBjaWVfY2FwKSB7CiAJCXUxNiB2YWwxNjsKIAogCQlpZiAodHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3NTBfQTApIHsKQEAgLTcxNzUsNyArNzIxOCw3IEBACiAJCSAqIE9sZGVyIFBDSWUgZGV2aWNlcyBvbmx5IHN1cHBvcnQgdGhlIDEyOCBieXRlCiAJCSAqIE1QUyBzZXR0aW5nLiAgRW5mb3JjZSB0aGUgcmVzdHJpY3Rpb24uCiAJCSAqLwotCQlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfQ1BNVV9QUkVTRU5UKSkKKwkJaWYgKCF0ZzNfZmxhZyh0cCwgQ1BNVV9QUkVTRU5UKSkKIAkJCXZhbDE2ICY9IH5QQ0lfRVhQX0RFVkNUTF9QQVlMT0FEOwogCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQodHAtPnBkZXYsCiAJCQkJICAgICAgdHAtPnBjaWVfY2FwICsgUENJX0VYUF9ERVZDVEwsCkBAIC03MTk0LDEwICs3MjM3LDExIEBACiAKIAl0ZzNfcmVzdG9yZV9wY2lfc3RhdGUodHApOwogCi0JdHAtPnRnM19mbGFncyAmPSB+VEczX0ZMQUdfQ0hJUF9SRVNFVFRJTkc7CisJdGczX2ZsYWdfY2xlYXIodHAsIENISVBfUkVTRVRUSU5HKTsKKwl0ZzNfZmxhZ19jbGVhcih0cCwgRVJST1JfUFJPQ0VTU0VEKTsKIAogCXZhbCA9IDA7Ci0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc4MF9DTEFTUykKKwlpZiAodGczX2ZsYWcodHAsIDU3ODBfQ0xBU1MpKQogCQl2YWwgPSB0cjMyKE1FTUFSQl9NT0RFKTsKIAl0dzMyKE1FTUFSQl9NT0RFLCB2YWwgfCBNRU1BUkJfTU9ERV9FTkFCTEUpOwogCkBAIC03MjIyLDcgKzcyNjYsNyBAQAogCQl0dzMyKFRHM1BDSV9DTE9DS19DVFJMLCB0cC0+cGNpX2Nsb2NrX2N0cmwpOwogCX0KIAotCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpCisJaWYgKHRnM19mbGFnKHRwLCBFTkFCTEVfQVBFKSkKIAkJdHAtPm1hY19tb2RlID0gTUFDX01PREVfQVBFX1RYX0VOIHwKIAkJCSAgICAgICBNQUNfTU9ERV9BUEVfUlhfRU4gfAogCQkJICAgICAgIE1BQ19NT0RFX1RERV9FTkFCTEU7CkBAIC03MjQ3LDI4ICs3MjkxLDMzIEBACiAKIAl0ZzNfbWRpb19zdGFydCh0cCk7CiAKLQlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUENJX0VYUFJFU1MpICYmCisJaWYgKHRnM19mbGFnKHRwLCBQQ0lfRVhQUkVTUykgJiYKIAkgICAgdHAtPnBjaV9jaGlwX3Jldl9pZCAhPSBDSElQUkVWX0lEXzU3NTBfQTAgJiYKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3ODUgJiYKLQkgICAgISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3MTdfUExVUykpIHsKKwkgICAgIXRnM19mbGFnKHRwLCA1Nzc2NV9QTFVTKSkgewogCQl2YWwgPSB0cjMyKDB4N2MwMCk7CiAKIAkJdHczMigweDdjMDAsIHZhbCB8ICgxIDw8IDI1KSk7CiAJfQogCisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzIwKSB7CisJCXZhbCA9IHRyMzIoVEczX0NQTVVfQ0xDS19PUklERSk7CisJCXR3MzIoVEczX0NQTVVfQ0xDS19PUklERSwgdmFsICYgfkNQTVVfQ0xDS19PUklERV9NQUNfT1JJREVfRU4pOworCX0KKwogCS8qIFJlcHJvYmUgQVNGIGVuYWJsZSBzdGF0ZS4gICovCi0JdHAtPnRnM19mbGFncyAmPSB+VEczX0ZMQUdfRU5BQkxFX0FTRjsKLQl0cC0+dGczX2ZsYWdzMiAmPSB+VEczX0ZMRzJfQVNGX05FV19IQU5EU0hBS0U7CisJdGczX2ZsYWdfY2xlYXIodHAsIEVOQUJMRV9BU0YpOworCXRnM19mbGFnX2NsZWFyKHRwLCBBU0ZfTkVXX0hBTkRTSEFLRSk7CiAJdGczX3JlYWRfbWVtKHRwLCBOSUNfU1JBTV9EQVRBX1NJRywgJnZhbCk7CiAJaWYgKHZhbCA9PSBOSUNfU1JBTV9EQVRBX1NJR19NQUdJQykgewogCQl1MzIgbmljX2NmZzsKIAogCQl0ZzNfcmVhZF9tZW0odHAsIE5JQ19TUkFNX0RBVEFfQ0ZHLCAmbmljX2NmZyk7CiAJCWlmIChuaWNfY2ZnICYgTklDX1NSQU1fREFUQV9DRkdfQVNGX0VOQUJMRSkgewotCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19FTkFCTEVfQVNGOworCQkJdGczX2ZsYWdfc2V0KHRwLCBFTkFCTEVfQVNGKTsKIAkJCXRwLT5sYXN0X2V2ZW50X2ppZmZpZXMgPSBqaWZmaWVzOwotCQkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKQotCQkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0FTRl9ORVdfSEFORFNIQUtFOworCQkJaWYgKHRnM19mbGFnKHRwLCA1NzUwX1BMVVMpKQorCQkJCXRnM19mbGFnX3NldCh0cCwgQVNGX05FV19IQU5EU0hBS0UpOwogCQl9CiAJfQogCkBAIC03Mjc4LDggKzczMjcsNyBAQAogLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KIHN0YXRpYyB2b2lkIHRnM19zdG9wX2Z3KHN0cnVjdCB0ZzMgKnRwKQogewotCWlmICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VOQUJMRV9BU0YpICYmCi0JICAgISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpKSB7CisJaWYgKHRnM19mbGFnKHRwLCBFTkFCTEVfQVNGKSAmJiAhdGczX2ZsYWcodHAsIEVOQUJMRV9BUEUpKSB7CiAJCS8qIFdhaXQgZm9yIFJYIGNwdSB0byBBQ0sgdGhlIHByZXZpb3VzIGV2ZW50LiAqLwogCQl0ZzNfd2FpdF9mb3JfZXZlbnRfYWNrKHRwKTsKIApAQCAtNzMyNSw4ICs3MzczLDcgQEAKIHsKIAlpbnQgaTsKIAotCUJVR19PTihvZmZzZXQgPT0gVFhfQ1BVX0JBU0UgJiYKLQkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSk7CisJQlVHX09OKG9mZnNldCA9PSBUWF9DUFVfQkFTRSAmJiB0ZzNfZmxhZyh0cCwgNTcwNV9QTFVTKSk7CiAKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpIHsKIAkJdTMyIHZhbCA9IHRyMzIoR1JDX1ZDUFVfRVhUX0NUUkwpOwpAQCAtNzM2MSw3ICs3NDA4LDcgQEAKIAl9CiAKIAkvKiBDbGVhciBmaXJtd2FyZSdzIG52cmFtIGFyYml0cmF0aW9uLiAqLwotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU0pCisJaWYgKHRnM19mbGFnKHRwLCBOVlJBTSkpCiAJCXR3MzIoTlZSQU1fU1dBUkIsIFNXQVJCX1JFUV9DTFIwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTczNzksMTUgKzc0MjYsMTQgQEAKIAlpbnQgZXJyLCBsb2NrX2VyciwgaTsKIAl2b2lkICgqd3JpdGVfb3ApKHN0cnVjdCB0ZzMgKiwgdTMyLCB1MzIpOwogCi0JaWYgKGNwdV9iYXNlID09IFRYX0NQVV9CQVNFICYmCi0JICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykpIHsKKwlpZiAoY3B1X2Jhc2UgPT0gVFhfQ1BVX0JBU0UgJiYgdGczX2ZsYWcodHAsIDU3MDVfUExVUykpIHsKIAkJbmV0ZGV2X2Vycih0cC0+ZGV2LAogCQkJICAgIiVzOiBUcnlpbmcgdG8gbG9hZCBUWCBjcHUgZmlybXdhcmUgd2hpY2ggaXMgNTcwNVxuIiwKIAkJCSAgIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKQorCWlmICh0ZzNfZmxhZyh0cCwgNTcwNV9QTFVTKSkKIAkJd3JpdGVfb3AgPSB0ZzNfd3JpdGVfbWVtOwogCWVsc2UKIAkJd3JpdGVfb3AgPSB0ZzNfd3JpdGVfaW5kaXJlY3RfcmVnMzI7CkBAIC03NDczLDggKzc1MTksNiBAQAogCXJldHVybiAwOwogfQogCi0vKiA1NzA1IG5lZWRzIGEgc3BlY2lhbCB2ZXJzaW9uIG9mIHRoZSBUU08gZmlybXdhcmUuICAqLwotCiAvKiB0cC0+bG9jayBpcyBoZWxkLiAqLwogc3RhdGljIGludCB0ZzNfbG9hZF90c29fZmlybXdhcmUoc3RydWN0IHRnMyAqdHApCiB7CkBAIC03NDgzLDcgKzc1MjcsOSBAQAogCXVuc2lnbmVkIGxvbmcgY3B1X2Jhc2UsIGNwdV9zY3JhdGNoX2Jhc2UsIGNwdV9zY3JhdGNoX3NpemU7CiAJaW50IGVyciwgaTsKIAotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX1RTTykKKwlpZiAodGczX2ZsYWcodHAsIEhXX1RTT18xKSB8fAorCSAgICB0ZzNfZmxhZyh0cCwgSFdfVFNPXzIpIHx8CisJICAgIHRnM19mbGFnKHRwLCBIV19UU09fMykpCiAJCXJldHVybiAwOwogCiAJZndfZGF0YSA9ICh2b2lkICopdHAtPmZ3LT5kYXRhOwpAQCAtNzU1Miw3ICs3NTk4LDcgQEAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VOQUJMRV9BU0YpIHsKKwlpZiAodGczX2ZsYWcodHAsIEVOQUJMRV9BU0YpKSB7CiAJCXUzMiBhZGRyMF9oaWdoLCBhZGRyMF9sb3csIGFkZHIxX2hpZ2gsIGFkZHIxX2xvdzsKIAogCQlhZGRyMF9oaWdoID0gdHIzMihNQUNfQUREUl8wX0hJR0gpOwpAQCAtNzU4Nyw3ICs3NjMzLDcgQEAKIAkJICAgICAgKGJkaW5mb19hZGRyICsgVEczX0JESU5GT19NQVhMRU5fRkxBR1MpLAogCQkgICAgICAgbWF4bGVuX2ZsYWdzKTsKIAotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSkKKwlpZiAoIXRnM19mbGFnKHRwLCA1NzA1X1BMVVMpKQogCQl0ZzNfd3JpdGVfbWVtKHRwLAogCQkJICAgICAgKGJkaW5mb19hZGRyICsgVEczX0JESU5GT19OSUNfQUREUiksCiAJCQkgICAgICBuaWNfYWRkcik7CkBAIC03NTk4LDcgKzc2NDQsNyBAQAogewogCWludCBpOwogCi0JaWYgKCEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfVFNTKSkgeworCWlmICghdGczX2ZsYWcodHAsIEVOQUJMRV9UU1MpKSB7CiAJCXR3MzIoSE9TVENDX1RYQ09MX1RJQ0tTLCBlYy0+dHhfY29hbGVzY2VfdXNlY3MpOwogCQl0dzMyKEhPU1RDQ19UWE1BWF9GUkFNRVMsIGVjLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lcyk7CiAJCXR3MzIoSE9TVENDX1RYQ09BTF9NQVhGX0lOVCwgZWMtPnR4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycSk7CkBAIC03NjA4LDcgKzc2NTQsNyBAQAogCQl0dzMyKEhPU1RDQ19UWENPQUxfTUFYRl9JTlQsIDApOwogCX0KIAotCWlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX1JTUykpIHsKKwlpZiAoIXRnM19mbGFnKHRwLCBFTkFCTEVfUlNTKSkgewogCQl0dzMyKEhPU1RDQ19SWENPTF9USUNLUywgZWMtPnJ4X2NvYWxlc2NlX3VzZWNzKTsKIAkJdHczMihIT1NUQ0NfUlhNQVhfRlJBTUVTLCBlYy0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMpOwogCQl0dzMyKEhPU1RDQ19SWENPQUxfTUFYRl9JTlQsIGVjLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnEpOwpAQCAtNzYxOCw3ICs3NjY0LDcgQEAKIAkJdHczMihIT1NUQ0NfUlhDT0FMX01BWEZfSU5ULCAwKTsKIAl9CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykpIHsKKwlpZiAoIXRnM19mbGFnKHRwLCA1NzA1X1BMVVMpKSB7CiAJCXUzMiB2YWwgPSBlYy0+c3RhdHNfYmxvY2tfY29hbGVzY2VfdXNlY3M7CiAKIAkJdHczMihIT1NUQ0NfUlhDT0FMX1RJQ0tfSU5ULCBlYy0+cnhfY29hbGVzY2VfdXNlY3NfaXJxKTsKQEAgLTc2NDAsNyArNzY4Niw3IEBACiAJCXJlZyA9IEhPU1RDQ19SWENPQUxfTUFYRl9JTlRfVkVDMSArIGkgKiAweDE4OwogCQl0dzMyKHJlZywgZWMtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycSk7CiAKLQkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX1RTUykgeworCQlpZiAodGczX2ZsYWcodHAsIEVOQUJMRV9UU1MpKSB7CiAJCQlyZWcgPSBIT1NUQ0NfVFhDT0xfVElDS1NfVkVDMSArIGkgKiAweDE4OwogCQkJdHczMihyZWcsIGVjLT50eF9jb2FsZXNjZV91c2Vjcyk7CiAJCQlyZWcgPSBIT1NUQ0NfVFhNQVhfRlJBTUVTX1ZFQzEgKyBpICogMHgxODsKQEAgLTc2NTUsNyArNzcwMSw3IEBACiAJCXR3MzIoSE9TVENDX1JYTUFYX0ZSQU1FU19WRUMxICsgaSAqIDB4MTgsIDApOwogCQl0dzMyKEhPU1RDQ19SWENPQUxfTUFYRl9JTlRfVkVDMSArIGkgKiAweDE4LCAwKTsKIAotCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfVFNTKSB7CisJCWlmICh0ZzNfZmxhZyh0cCwgRU5BQkxFX1RTUykpIHsKIAkJCXR3MzIoSE9TVENDX1RYQ09MX1RJQ0tTX1ZFQzEgKyBpICogMHgxOCwgMCk7CiAJCQl0dzMyKEhPU1RDQ19UWE1BWF9GUkFNRVNfVkVDMSArIGkgKiAweDE4LCAwKTsKIAkJCXR3MzIoSE9TVENDX1RYQ09BTF9NQVhGX0lOVF9WRUMxICsgaSAqIDB4MTgsIDApOwpAQCAtNzY3MSwxMCArNzcxNyw5IEBACiAJc3RydWN0IHRnM19uYXBpICp0bmFwaSA9ICZ0cC0+bmFwaVswXTsKIAogCS8qIERpc2FibGUgYWxsIHRyYW5zbWl0IHJpbmdzIGJ1dCB0aGUgZmlyc3QuICovCi0JaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKQorCWlmICghdGczX2ZsYWcodHAsIDU3MDVfUExVUykpCiAJCWxpbWl0ID0gTklDX1NSQU1fU0VORF9SQ0IgKyBURzNfQkRJTkZPX1NJWkUgKiAxNjsKLQllbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNyB8fAotCQkgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTkpCisJZWxzZSBpZiAodGczX2ZsYWcodHAsIDU3MTdfUExVUykpCiAJCWxpbWl0ID0gTklDX1NSQU1fU0VORF9SQ0IgKyBURzNfQkRJTkZPX1NJWkUgKiA0OwogCWVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc2NSkKIAkJbGltaXQgPSBOSUNfU1JBTV9TRU5EX1JDQiArIFRHM19CRElORk9fU0laRSAqIDI7CkBAIC03Njg4LDEwICs3NzMzLDkgQEAKIAogCiAJLyogRGlzYWJsZSBhbGwgcmVjZWl2ZSByZXR1cm4gcmluZ3MgYnV0IHRoZSBmaXJzdC4gKi8KLQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcgfHwKLQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTkpCisJaWYgKHRnM19mbGFnKHRwLCA1NzE3X1BMVVMpKQogCQlsaW1pdCA9IE5JQ19TUkFNX1JDVl9SRVRfUkNCICsgVEczX0JESU5GT19TSVpFICogMTc7Ci0JZWxzZSBpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykpCisJZWxzZSBpZiAoIXRnM19mbGFnKHRwLCA1NzA1X1BMVVMpKQogCQlsaW1pdCA9IE5JQ19TUkFNX1JDVl9SRVRfUkNCICsgVEczX0JESU5GT19TSVpFICogMTY7CiAJZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTUgfHwKIAkJIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc2NSkKQEAgLTc3MDgsMTYgKzc3NTIsMTYgQEAKIAl0dzMyX21haWxib3hfZih0cC0+bmFwaVswXS5pbnRfbWJveCwgMSk7CiAKIAkvKiBaZXJvIG1haWxib3ggcmVnaXN0ZXJzLiAqLwotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfU1VQUE9SVF9NU0lYKSB7CisJaWYgKHRnM19mbGFnKHRwLCBTVVBQT1JUX01TSVgpKSB7CiAJCWZvciAoaSA9IDE7IGkgPCB0cC0+aXJxX21heDsgaSsrKSB7CiAJCQl0cC0+bmFwaVtpXS50eF9wcm9kID0gMDsKIAkJCXRwLT5uYXBpW2ldLnR4X2NvbnMgPSAwOwotCQkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX1RTUykKKwkJCWlmICh0ZzNfZmxhZyh0cCwgRU5BQkxFX1RTUykpCiAJCQkJdHczMl9tYWlsYm94KHRwLT5uYXBpW2ldLnByb2RtYm94LCAwKTsKIAkJCXR3MzJfcnhfbWJveCh0cC0+bmFwaVtpXS5jb25zbWJveCwgMCk7CiAJCQl0dzMyX21haWxib3hfZih0cC0+bmFwaVtpXS5pbnRfbWJveCwgMSk7CiAJCX0KLQkJaWYgKCEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfVFNTKSkKKwkJaWYgKCF0ZzNfZmxhZyh0cCwgRU5BQkxFX1RTUykpCiAJCQl0dzMyX21haWxib3godHAtPm5hcGlbMF0ucHJvZG1ib3gsIDApOwogCX0gZWxzZSB7CiAJCXRwLT5uYXBpWzBdLnR4X3Byb2QgPSAwOwpAQCAtNzcyNyw3ICs3NzcxLDcgQEAKIAl9CiAKIAkvKiBNYWtlIHN1cmUgdGhlIE5JQy1iYXNlZCBzZW5kIEJEIHJpbmdzIGFyZSBkaXNhYmxlZC4gKi8KLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykpIHsKKwlpZiAoIXRnM19mbGFnKHRwLCA1NzA1X1BMVVMpKSB7CiAJCXUzMiBtYm94ID0gTUFJTEJPWF9TTkROSUNfUFJPRF9JRFhfMCArIFRHM182NEJJVF9SRUdfTE9XOwogCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKIAkJCXR3MzJfdHhfbWJveChtYm94ICsgaSAqIDgsIDApOwpAQCAtNzc4Nyw2ICs3ODMxLDQ3IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCB0ZzNfc2V0dXBfcnhiZF90aHJlc2hvbGRzKHN0cnVjdCB0ZzMgKnRwKQoreworCXUzMiB2YWwsIGJkY2FjaGVfbWF4Y250LCBob3N0X3JlcF90aHJlc2gsIG5pY19yZXBfdGhyZXNoOworCisJaWYgKCF0ZzNfZmxhZyh0cCwgNTc1MF9QTFVTKSB8fAorCSAgICB0ZzNfZmxhZyh0cCwgNTc4MF9DTEFTUykgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTAgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTIpCisJCWJkY2FjaGVfbWF4Y250ID0gVEczX1NSQU1fUlhfU1REX0JEQ0FDSEVfU0laRV81NzAwOworCWVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzU1IHx8CisJCSBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NykKKwkJYmRjYWNoZV9tYXhjbnQgPSBURzNfU1JBTV9SWF9TVERfQkRDQUNIRV9TSVpFXzU3NTU7CisJZWxzZQorCQliZGNhY2hlX21heGNudCA9IFRHM19TUkFNX1JYX1NURF9CRENBQ0hFX1NJWkVfNTkwNjsKKworCW5pY19yZXBfdGhyZXNoID0gbWluKGJkY2FjaGVfbWF4Y250IC8gMiwgdHAtPnJ4X3N0ZF9tYXhfcG9zdCk7CisJaG9zdF9yZXBfdGhyZXNoID0gbWF4X3QodTMyLCB0cC0+cnhfcGVuZGluZyAvIDgsIDEpOworCisJdmFsID0gbWluKG5pY19yZXBfdGhyZXNoLCBob3N0X3JlcF90aHJlc2gpOworCXR3MzIoUkNWQkRJX1NURF9USFJFU0gsIHZhbCk7CisKKwlpZiAodGczX2ZsYWcodHAsIDU3NzY1X1BMVVMpKQorCQl0dzMyKFNURF9SRVBMRU5JU0hfTFdNLCBiZGNhY2hlX21heGNudCk7CisKKwlpZiAoIXRnM19mbGFnKHRwLCBKVU1CT19DQVBBQkxFKSB8fCB0ZzNfZmxhZyh0cCwgNTc4MF9DTEFTUykpCisJCXJldHVybjsKKworCWlmICghdGczX2ZsYWcodHAsIDU3MDVfUExVUykpCisJCWJkY2FjaGVfbWF4Y250ID0gVEczX1NSQU1fUlhfSk1CX0JEQ0FDSEVfU0laRV81NzAwOworCWVsc2UKKwkJYmRjYWNoZV9tYXhjbnQgPSBURzNfU1JBTV9SWF9KTUJfQkRDQUNIRV9TSVpFXzU3MTc7CisKKwlob3N0X3JlcF90aHJlc2ggPSBtYXhfdCh1MzIsIHRwLT5yeF9qdW1ib19wZW5kaW5nIC8gOCwgMSk7CisKKwl2YWwgPSBtaW4oYmRjYWNoZV9tYXhjbnQgLyAyLCBob3N0X3JlcF90aHJlc2gpOworCXR3MzIoUkNWQkRJX0pVTUJPX1RIUkVTSCwgdmFsKTsKKworCWlmICh0ZzNfZmxhZyh0cCwgNTc3NjVfUExVUykpCisJCXR3MzIoSk1CX1JFUExFTklTSF9MV00sIGJkY2FjaGVfbWF4Y250KTsKK30KKwogLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KIHN0YXRpYyBpbnQgdGczX3Jlc2V0X2h3KHN0cnVjdCB0ZzMgKnRwLCBpbnQgcmVzZXRfcGh5KQogewpAQCAtNzgwMCw3ICs3ODg1LDcgQEAKIAogCXRnM193cml0ZV9zaWdfcHJlX3Jlc2V0KHRwLCBSRVNFVF9LSU5EX0lOSVQpOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19JTklUX0NPTVBMRVRFKQorCWlmICh0ZzNfZmxhZyh0cCwgSU5JVF9DT01QTEVURSkpCiAJCXRnM19hYm9ydF9odyh0cCwgMSk7CiAKIAkvKiBFbmFibGUgTUFDIGNvbnRyb2wgb2YgTFBJICovCkBAIC03ODIwLDcgKzc5MDUsNyBAQAogCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MTcpCiAJCQl2YWwgfD0gVEczX0NQTVVfRUVFTURfU05EX0lEWF9ERVRfRU47CiAKLQkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkKKwkJaWYgKHRnM19mbGFnKHRwLCBFTkFCTEVfQVBFKSkKIAkJCXZhbCB8PSBURzNfQ1BNVV9FRUVNRF9BUEVfVFhfREVUX0VOOwogCiAJCXR3MzJfZihURzNfQ1BNVV9FRUVfTU9ERSwgdmFsKTsKQEAgLTc4NzksNyArNzk2NCw3IEBACiAJCXR3MzIoVEczX1BDSUVfTE5LQ1RMLCB2YWwgfCBURzNfUENJRV9MTktDVExfTDFfUExMX1BEX0RJUyk7CiAJfQogCi0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTDFQTExQRF9FTikgeworCWlmICh0ZzNfZmxhZyh0cCwgTDFQTExQRF9FTikpIHsKIAkJdTMyIGdyY19tb2RlID0gdHIzMihHUkNfTU9ERSk7CiAKIAkJLyogQWNjZXNzIHRoZSBsb3dlciAxSyBvZiBQTCBQQ0lFIGJsb2NrIHJlZ2lzdGVycy4gKi8KQEAgLTc5MDksNiArNzk5NCwyMiBAQAogCQkJdHczMihHUkNfTU9ERSwgZ3JjX21vZGUpOwogCQl9CiAKKwkJaWYgKEdFVF9DSElQX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBDSElQUkVWXzU3NzY1X0FYKSB7CisJCQl1MzIgZ3JjX21vZGUgPSB0cjMyKEdSQ19NT0RFKTsKKworCQkJLyogQWNjZXNzIHRoZSBsb3dlciAxSyBvZiBETCBQQ0lFIGJsb2NrIHJlZ2lzdGVycy4gKi8KKwkJCXZhbCA9IGdyY19tb2RlICYgfkdSQ19NT0RFX1BDSUVfUE9SVF9NQVNLOworCQkJdHczMihHUkNfTU9ERSwgdmFsIHwgR1JDX01PREVfUENJRV9ETF9TRUwpOworCisJCQl2YWwgPSB0cjMyKFRHM19QQ0lFX1RMRExQTF9QT1JUICsKKwkJCQkgICBURzNfUENJRV9ETF9MT19GVFNNQVgpOworCQkJdmFsICY9IH5URzNfUENJRV9ETF9MT19GVFNNQVhfTVNLOworCQkJdHczMihURzNfUENJRV9UTERMUExfUE9SVCArIFRHM19QQ0lFX0RMX0xPX0ZUU01BWCwKKwkJCSAgICAgdmFsIHwgVEczX1BDSUVfRExfTE9fRlRTTUFYX1ZBTCk7CisKKwkJCXR3MzIoR1JDX01PREUsIGdyY19tb2RlKTsKKwkJfQorCiAJCXZhbCA9IHRyMzIoVEczX0NQTVVfTFNQRF8xME1CX0NMSyk7CiAJCXZhbCAmPSB+Q1BNVV9MU1BEXzEwTUJfTUFDQ0xLX01BU0s7CiAJCXZhbCB8PSBDUE1VX0xTUERfMTBNQl9NQUNDTEtfNl8yNTsKQEAgLTc5MjAsMjAgKzgwMjEsMjAgQEAKIAkgKiBvdGhlciByZXZpc2lvbi4gIEJ1dCBkbyBub3Qgc2V0IHRoaXMgb24gUENJIEV4cHJlc3MKIAkgKiBjaGlwcyBhbmQgZG9uJ3QgZXZlbiB0b3VjaCB0aGUgY2xvY2tzIGlmIHRoZSBDUE1VIGlzIHByZXNlbnQuCiAJICovCi0JaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0NQTVVfUFJFU0VOVCkpIHsKLQkJaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QQ0lfRVhQUkVTUykpCisJaWYgKCF0ZzNfZmxhZyh0cCwgQ1BNVV9QUkVTRU5UKSkgeworCQlpZiAoIXRnM19mbGFnKHRwLCBQQ0lfRVhQUkVTUykpCiAJCQl0cC0+cGNpX2Nsb2NrX2N0cmwgfD0gQ0xPQ0tfQ1RSTF9ERUxBWV9QQ0lfR1JBTlQ7CiAJCXR3MzJfZihURzNQQ0lfQ0xPQ0tfQ1RSTCwgdHAtPnBjaV9jbG9ja19jdHJsKTsKIAl9CiAKIAlpZiAodHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3MDRfQTAgJiYKLQkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19QQ0lYX01PREUpKSB7CisJICAgIHRnM19mbGFnKHRwLCBQQ0lYX01PREUpKSB7CiAJCXZhbCA9IHRyMzIoVEczUENJX1BDSVNUQVRFKTsKIAkJdmFsIHw9IFBDSVNUQVRFX1JFVFJZX1NBTUVfRE1BOwogCQl0dzMyKFRHM1BDSV9QQ0lTVEFURSwgdmFsKTsKIAl9CiAKLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfQVBFKSB7CisJaWYgKHRnM19mbGFnKHRwLCBFTkFCTEVfQVBFKSkgewogCQkvKiBBbGxvdyByZWFkcyBhbmQgd3JpdGVzIHRvIHRoZQogCQkgKiBBUEUgcmVnaXN0ZXIgYW5kIG1lbW9yeSBzcGFjZS4KIAkJICovCkBAIC03OTYwLDExICs4MDYxLDE0IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3MTdfUExVUykgeworCWlmICh0ZzNfZmxhZyh0cCwgNTc3NjVfUExVUykpIHsKIAkJdmFsID0gdHIzMihURzNQQ0lfRE1BX1JXX0NUUkwpICYKIAkJICAgICAgfkRNQV9SV0NUUkxfRElTX0NBQ0hFX0FMSUdOTUVOVDsKIAkJaWYgKHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81Nzc2NV9BMCkKIAkJCXZhbCAmPSB+RE1BX1JXQ1RSTF9DUkRSRFJfUkRNQV9NUlJTX01TSzsKKwkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81Nzc2NSAmJgorCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MTcpCisJCQl2YWwgfD0gRE1BX1JXQ1RSTF9UQUdHRURfU1RBVF9XQTsKIAkJdHczMihURzNQQ0lfRE1BX1JXX0NUUkwsIHZhbCB8IHRwLT5kbWFfcndjdHJsKTsKIAl9IGVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81Nzg0ICYmCiAJCSAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzYxKSB7CkBAIC03OTk5LDcgKzgxMDMsNyBAQAogCXR3MzIoR1JDX01JU0NfQ0ZHLCB2YWwpOwogCiAJLyogSW5pdGlhbGl6ZSBNQlVGL0RFU0MgcG9vbC4gKi8KLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpIHsKKwlpZiAodGczX2ZsYWcodHAsIDU3NTBfUExVUykpIHsKIAkJLyogRG8gbm90aGluZy4gICovCiAJfSBlbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcwNSkgewogCQl0dzMyKEJVRk1HUl9NQl9QT09MX0FERFIsIE5JQ19TUkFNX01CVUZfUE9PTF9CQVNFKTsKQEAgLTgwMDksNyArODExMyw3IEBACiAJCQl0dzMyKEJVRk1HUl9NQl9QT09MX1NJWkUsIE5JQ19TUkFNX01CVUZfUE9PTF9TSVpFOTYpOwogCQl0dzMyKEJVRk1HUl9ETUFfREVTQ19QT09MX0FERFIsIE5JQ19TUkFNX0RNQV9ERVNDX1BPT0xfQkFTRSk7CiAJCXR3MzIoQlVGTUdSX0RNQV9ERVNDX1BPT0xfU0laRSwgTklDX1NSQU1fRE1BX0RFU0NfUE9PTF9TSVpFKTsKLQl9IGVsc2UgaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVFNPX0NBUEFCTEUpIHsKKwl9IGVsc2UgaWYgKHRnM19mbGFnKHRwLCBUU09fQ0FQQUJMRSkpIHsKIAkJaW50IGZ3X2xlbjsKIAogCQlmd19sZW4gPSB0cC0+ZndfbGVuOwpAQCAtODA0Myw2ICs4MTQ3LDEwIEBACiAJdmFsID0gQlVGTUdSX01PREVfRU5BQkxFIHwgQlVGTUdSX01PREVfQVRUTl9FTkFCTEU7CiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE5KQogCQl2YWwgfD0gQlVGTUdSX01PREVfTk9fVFhfVU5ERVJSVU47CisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3IHx8CisJICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81NzE5X0EwIHx8CisJICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81NzIwX0EwKQorCQl2YWwgfD0gQlVGTUdSX01PREVfTUJMT1dfQVRUTl9FTkFCOwogCXR3MzIoQlVGTUdSX01PREUsIHZhbCk7CiAJZm9yIChpID0gMDsgaSA8IDIwMDA7IGkrKykgewogCQlpZiAodHIzMihCVUZNR1JfTU9ERSkgJiBCVUZNR1JfTU9ERV9FTkFCTEUpCkBAIC04MDU0LDIxICs4MTYyLDEwIEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCS8qIFNldHVwIHJlcGxlbmlzaCB0aHJlc2hvbGQuICovCi0JdmFsID0gdHAtPnJ4X3BlbmRpbmcgLyA4OwotCWlmICh2YWwgPT0gMCkKLQkJdmFsID0gMTsKLQllbHNlIGlmICh2YWwgPiB0cC0+cnhfc3RkX21heF9wb3N0KQotCQl2YWwgPSB0cC0+cnhfc3RkX21heF9wb3N0OwotCWVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KSB7Ci0JCWlmICh0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTkwNl9BMSkKLQkJCXR3MzIoSVNPX1BLVF9UWCwgKHRyMzIoSVNPX1BLVF9UWCkgJiB+MHgzKSB8IDB4Mik7CisJaWYgKHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81OTA2X0ExKQorCQl0dzMyKElTT19QS1RfVFgsICh0cjMyKElTT19QS1RfVFgpICYgfjB4MykgfCAweDIpOwogCi0JCWlmICh2YWwgPiAoVEczX1JYX0lOVEVSTkFMX1JJTkdfU1pfNTkwNiAvIDIpKQotCQkJdmFsID0gVEczX1JYX0lOVEVSTkFMX1JJTkdfU1pfNTkwNiAvIDI7Ci0JfQotCi0JdHczMihSQ1ZCRElfU1REX1RIUkVTSCwgdmFsKTsKKwl0ZzNfc2V0dXBfcnhiZF90aHJlc2hvbGRzKHRwKTsKIAogCS8qIEluaXRpYWxpemUgVEczX0JESU5GTydzIGF0OgogCSAqICBSQ1ZEQkRJX1NURF9CRDoJc3RhbmRhcmQgZXRoIHNpemUgcnggcmluZwpAQCAtODA5MSwxMyArODE4OCwxMiBAQAogCSAgICAgKCh1NjQpIHRwci0+cnhfc3RkX21hcHBpbmcgPj4gMzIpKTsKIAl0dzMyKFJDVkRCRElfU1REX0JEICsgVEczX0JESU5GT19IT1NUX0FERFIgKyBURzNfNjRCSVRfUkVHX0xPVywKIAkgICAgICgodTY0KSB0cHItPnJ4X3N0ZF9tYXBwaW5nICYgMHhmZmZmZmZmZikpOwotCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcxNyAmJgotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcxOSkKKwlpZiAoIXRnM19mbGFnKHRwLCA1NzE3X1BMVVMpKQogCQl0dzMyKFJDVkRCRElfU1REX0JEICsgVEczX0JESU5GT19OSUNfQUREUiwKIAkJICAgICBOSUNfU1JBTV9SWF9CVUZGRVJfREVTQyk7CiAKIAkvKiBEaXNhYmxlIHRoZSBtaW5pIHJpbmcgKi8KLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykpCisJaWYgKCF0ZzNfZmxhZyh0cCwgNTcwNV9QTFVTKSkKIAkJdHczMihSQ1ZEQkRJX01JTklfQkQgKyBURzNfQkRJTkZPX01BWExFTl9GTEFHUywKIAkJICAgICBCRElORk9fRkxBR1NfRElTQUJMRUQpOwogCkBAIC04MTA1LDIwICs4MjAxLDE4IEBACiAJICogYmxvY2tzIG9uIHRob3NlIGRldmljZXMgdGhhdCBoYXZlIHRoZW0uCiAJICovCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE5IHx8Ci0JICAgICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0pVTUJPX0NBUEFCTEUpICYmCi0JICAgICEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzgwX0NMQVNTKSkpIHsKLQkJLyogU2V0dXAgcmVwbGVuaXNoIHRocmVzaG9sZC4gKi8KLQkJdHczMihSQ1ZCRElfSlVNQk9fVEhSRVNILCB0cC0+cnhfanVtYm9fcGVuZGluZyAvIDgpOworCSAgICAodGczX2ZsYWcodHAsIEpVTUJPX0NBUEFCTEUpICYmICF0ZzNfZmxhZyh0cCwgNTc4MF9DTEFTUykpKSB7CiAKLQkJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19KVU1CT19SSU5HX0VOQUJMRSkgeworCQlpZiAodGczX2ZsYWcodHAsIEpVTUJPX1JJTkdfRU5BQkxFKSkgewogCQkJdHczMihSQ1ZEQkRJX0pVTUJPX0JEICsgVEczX0JESU5GT19IT1NUX0FERFIgKyBURzNfNjRCSVRfUkVHX0hJR0gsCiAJCQkgICAgICgodTY0KSB0cHItPnJ4X2ptYl9tYXBwaW5nID4+IDMyKSk7CiAJCQl0dzMyKFJDVkRCRElfSlVNQk9fQkQgKyBURzNfQkRJTkZPX0hPU1RfQUREUiArIFRHM182NEJJVF9SRUdfTE9XLAogCQkJICAgICAoKHU2NCkgdHByLT5yeF9qbWJfbWFwcGluZyAmIDB4ZmZmZmZmZmYpKTsKKwkJCXZhbCA9IFRHM19SWF9KTUJfUklOR19TSVpFKHRwKSA8PAorCQkJICAgICAgQkRJTkZPX0ZMQUdTX01BWExFTl9TSElGVDsKIAkJCXR3MzIoUkNWREJESV9KVU1CT19CRCArIFRHM19CRElORk9fTUFYTEVOX0ZMQUdTLAotCQkJICAgICAoUlhfSlVNQk9fTUFYX1NJWkUgPDwgQkRJTkZPX0ZMQUdTX01BWExFTl9TSElGVCkgfAotCQkJICAgICBCRElORk9fRkxBR1NfVVNFX0VYVF9SRUNWKTsKLQkJCWlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfVVNFX0pVTUJPX0JERkxBRykgfHwKKwkJCSAgICAgdmFsIHwgQkRJTkZPX0ZMQUdTX1VTRV9FWFRfUkVDVik7CisJCQlpZiAoIXRnM19mbGFnKHRwLCBVU0VfSlVNQk9fQkRGTEFHKSB8fAogCQkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc2NSkKIAkJCQl0dzMyKFJDVkRCRElfSlVNQk9fQkQgKyBURzNfQkRJTkZPX05JQ19BRERSLAogCQkJCSAgICAgTklDX1NSQU1fUlhfSlVNQk9fQlVGRkVSX0RFU0MpOwpAQCAtODEyNywzMiArODIyMSwyNyBAQAogCQkJICAgICBCRElORk9fRkxBR1NfRElTQUJMRUQpOwogCQl9CiAKLQkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTcxN19QTFVTKSB7CisJCWlmICh0ZzNfZmxhZyh0cCwgNTc3NjVfUExVUykpIHsKIAkJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3NjUpCi0JCQkJdmFsID0gUlhfU1REX01BWF9TSVpFXzU3MDU7CisJCQkJdmFsID0gVEczX1JYX1NURF9NQVhfU0laRV81NzAwOwogCQkJZWxzZQotCQkJCXZhbCA9IFJYX1NURF9NQVhfU0laRV81NzE3OworCQkJCXZhbCA9IFRHM19SWF9TVERfTUFYX1NJWkVfNTcxNzsKIAkJCXZhbCA8PD0gQkRJTkZPX0ZMQUdTX01BWExFTl9TSElGVDsKIAkJCXZhbCB8PSAoVEczX1JYX1NURF9ETUFfU1ogPDwgMik7CiAJCX0gZWxzZQogCQkJdmFsID0gVEczX1JYX1NURF9ETUFfU1ogPDwgQkRJTkZPX0ZMQUdTX01BWExFTl9TSElGVDsKIAl9IGVsc2UKLQkJdmFsID0gUlhfU1REX01BWF9TSVpFXzU3MDUgPDwgQkRJTkZPX0ZMQUdTX01BWExFTl9TSElGVDsKKwkJdmFsID0gVEczX1JYX1NURF9NQVhfU0laRV81NzAwIDw8IEJESU5GT19GTEFHU19NQVhMRU5fU0hJRlQ7CiAKIAl0dzMyKFJDVkRCRElfU1REX0JEICsgVEczX0JESU5GT19NQVhMRU5fRkxBR1MsIHZhbCk7CiAKIAl0cHItPnJ4X3N0ZF9wcm9kX2lkeCA9IHRwLT5yeF9wZW5kaW5nOwogCXR3MzJfcnhfbWJveChURzNfUlhfU1REX1BST0RfSURYX1JFRywgdHByLT5yeF9zdGRfcHJvZF9pZHgpOwogCi0JdHByLT5yeF9qbWJfcHJvZF9pZHggPSAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0pVTUJPX1JJTkdfRU5BQkxFKSA/Ci0JCQkgIHRwLT5yeF9qdW1ib19wZW5kaW5nIDogMDsKKwl0cHItPnJ4X2ptYl9wcm9kX2lkeCA9CisJCXRnM19mbGFnKHRwLCBKVU1CT19SSU5HX0VOQUJMRSkgPyB0cC0+cnhfanVtYm9fcGVuZGluZyA6IDA7CiAJdHczMl9yeF9tYm94KFRHM19SWF9KTUJfUFJPRF9JRFhfUkVHLCB0cHItPnJ4X2ptYl9wcm9kX2lkeCk7CiAKLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM181NzE3X1BMVVMpIHsKLQkJdHczMihTVERfUkVQTEVOSVNIX0xXTSwgMzIpOwotCQl0dzMyKEpNQl9SRVBMRU5JU0hfTFdNLCAxNik7Ci0JfQotCiAJdGczX3JpbmdzX3Jlc2V0KHRwKTsKIAogCS8qIEluaXRpYWxpemUgTUFDIGFkZHJlc3MgYW5kIGJhY2tvZmYgc2VlZC4gKi8KQEAgLTgxNjUsMTAgKzgyNTQsMTYgQEAKIAkvKiBUaGUgc2xvdCB0aW1lIGlzIGNoYW5nZWQgYnkgdGczX3NldHVwX3BoeSBpZiB3ZQogCSAqIHJ1biBhdCBnaWdhYml0IHdpdGggaGFsZiBkdXBsZXguCiAJICovCi0JdHczMihNQUNfVFhfTEVOR1RIUywKLQkgICAgICgyIDw8IFRYX0xFTkdUSFNfSVBHX0NSU19TSElGVCkgfAotCSAgICAgKDYgPDwgVFhfTEVOR1RIU19JUEdfU0hJRlQpIHwKLQkgICAgICgzMiA8PCBUWF9MRU5HVEhTX1NMT1RfVElNRV9TSElGVCkpOworCXZhbCA9ICgyIDw8IFRYX0xFTkdUSFNfSVBHX0NSU19TSElGVCkgfAorCSAgICAgICg2IDw8IFRYX0xFTkdUSFNfSVBHX1NISUZUKSB8CisJICAgICAgKDMyIDw8IFRYX0xFTkdUSFNfU0xPVF9USU1FX1NISUZUKTsKKworCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcyMCkKKwkJdmFsIHw9IHRyMzIoTUFDX1RYX0xFTkdUSFMpICYKKwkJICAgICAgIChUWF9MRU5HVEhTX0pNQl9GUk1fTEVOX01TSyB8CisJCQlUWF9MRU5HVEhTX0NOVF9EV05fVkFMX01TSyk7CisKKwl0dzMyKE1BQ19UWF9MRU5HVEhTLCB2YWwpOwogCiAJLyogUmVjZWl2ZSBydWxlcy4gKi8KIAl0dzMyKE1BQ19SQ1ZfUlVMRV9DRkcsIFJDVl9SVUxFX0NGR19ERUZBVUxUX0NMQVNTKTsKQEAgLTgxOTUsMzMgKzgyOTAsMzkgQEAKIAogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwNSAmJgogCSAgICB0cC0+cGNpX2NoaXBfcmV2X2lkICE9IENISVBSRVZfSURfNTcwNV9BMCkgewotCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9UU09fQ0FQQUJMRSAmJgorCQlpZiAodGczX2ZsYWcodHAsIFRTT19DQVBBQkxFKSAmJgogCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDUpIHsKIAkJCXJkbWFjX21vZGUgfD0gUkRNQUNfTU9ERV9GSUZPX1NJWkVfMTI4OwogCQl9IGVsc2UgaWYgKCEodHIzMihURzNQQ0lfUENJU1RBVEUpICYgUENJU1RBVEVfQlVTX1NQRUVEX0hJR0gpICYmCi0JCQkgICAhKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSVNfNTc4OCkpIHsKKwkJCSAgICF0ZzNfZmxhZyh0cCwgSVNfNTc4OCkpIHsKIAkJCXJkbWFjX21vZGUgfD0gUkRNQUNfTU9ERV9GSUZPX0xPTkdfQlVSU1Q7CiAJCX0KIAl9CiAKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QQ0lfRVhQUkVTUykKKwlpZiAodGczX2ZsYWcodHAsIFBDSV9FWFBSRVNTKSkKIAkJcmRtYWNfbW9kZSB8PSBSRE1BQ19NT0RFX0ZJRk9fTE9OR19CVVJTVDsKIAotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX1RTTykKKwlpZiAodGczX2ZsYWcodHAsIEhXX1RTT18xKSB8fAorCSAgICB0ZzNfZmxhZyh0cCwgSFdfVFNPXzIpIHx8CisJICAgIHRnM19mbGFnKHRwLCBIV19UU09fMykpCiAJCXJkbWFjX21vZGUgfD0gUkRNQUNfTU9ERV9JUFY0X0xTT19FTjsKIAotCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9IV19UU09fMykgfHwKKwlpZiAodGczX2ZsYWcodHAsIDU3NzY1X1BMVVMpIHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg1IHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc4MCkKIAkJcmRtYWNfbW9kZSB8PSBSRE1BQ19NT0RFX0lQVjZfTFNPX0VOOwogCisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzIwKQorCQlyZG1hY19tb2RlIHw9IHRyMzIoUkRNQUNfTU9ERSkgJiBSRE1BQ19NT0RFX0gyQk5DX1ZMQU5fREVUOworCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzYxIHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg0IHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg1IHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc4MCB8fAotCSAgICAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM181NzE3X1BMVVMpKSB7CisJICAgIHRnM19mbGFnKHRwLCA1Nzc2NV9QTFVTKSkgewogCQl2YWwgPSB0cjMyKFRHM19SRE1BX1JTUlZDVFJMX1JFRyk7Ci0JCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxOSkgeworCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTkgfHwKKwkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzIwKSB7CiAJCQl2YWwgJj0gfihURzNfUkRNQV9SU1JWQ1RSTF9UWE1SR05fTUFTSyB8CiAJCQkJIFRHM19SRE1BX1JTUlZDVFJMX0ZJRk9fTFdNX01BU0sgfAogCQkJCSBURzNfUkRNQV9SU1JWQ1RSTF9GSUZPX0hXTV9NQVNLKTsKQEAgLTgyMzMsNyArODMzNCw4IEBACiAJCSAgICAgdmFsIHwgVEczX1JETUFfUlNSVkNUUkxfRklGT19PRkxXX0ZJWCk7CiAJfQogCi0JaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE5KSB7CisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE5IHx8CisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzIwKSB7CiAJCXZhbCA9IHRyMzIoVEczX0xTT19SRF9ETUFfQ1JQVEVOX0NUUkwpOwogCQl0dzMyKFRHM19MU09fUkRfRE1BX0NSUFRFTl9DVFJMLCB2YWwgfAogCQkgICAgIFRHM19MU09fUkRfRE1BX0NSUFRFTl9DVFJMX0JMRU5fQkRfNEsgfApAQCAtODI0MSwxMiArODM0MywxMiBAQAogCX0KIAogCS8qIFJlY2VpdmUvc2VuZCBzdGF0aXN0aWNzLiAqLwotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3NTBfUExVUykgeworCWlmICh0ZzNfZmxhZyh0cCwgNTc1MF9QTFVTKSkgewogCQl2YWwgPSB0cjMyKFJDVkxQQ19TVEFUU19FTkFCTEUpOwogCQl2YWwgJj0gflJDVkxQQ19TVEFUU0VOQUJfREFDS19GSVg7CiAJCXR3MzIoUkNWTFBDX1NUQVRTX0VOQUJMRSwgdmFsKTsKIAl9IGVsc2UgaWYgKChyZG1hY19tb2RlICYgUkRNQUNfTU9ERV9GSUZPX1NJWkVfMTI4KSAmJgotCQkgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9UU09fQ0FQQUJMRSkpIHsKKwkJICAgdGczX2ZsYWcodHAsIFRTT19DQVBBQkxFKSkgewogCQl2YWwgPSB0cjMyKFJDVkxQQ19TVEFUU19FTkFCTEUpOwogCQl2YWwgJj0gflJDVkxQQ19TVEFUU0VOQUJfTE5HQlJTVF9SRklYOwogCQl0dzMyKFJDVkxQQ19TVEFUU19FTkFCTEUsIHZhbCk7CkBAIC04MjY5LDcgKzgzNzEsNyBAQAogCiAJX190ZzNfc2V0X2NvYWxlc2NlKHRwLCAmdHAtPmNvYWwpOwogCi0JaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKSB7CisJaWYgKCF0ZzNfZmxhZyh0cCwgNTcwNV9QTFVTKSkgewogCQkvKiBTdGF0dXMvc3RhdGlzdGljcyBibG9jayBhZGRyZXNzLiAgU2VlIHRnM190aW1lciwKIAkJICogdGhlIHRnM19wZXJpb2RpY19mZXRjaF9zdGF0cyBjYWxsIHRoZXJlLCBhbmQKIAkJICogdGczX2dldF9zdGF0cyB0byBzZWUgaG93IHRoaXMgd29ya3MgZm9yIDU3MDUvNTc1MCBjaGlwcy4KQEAgLTgyOTUsNyArODM5Nyw3IEBACiAKIAl0dzMyKFJDVkNDX01PREUsIFJDVkNDX01PREVfRU5BQkxFIHwgUkNWQ0NfTU9ERV9BVFROX0VOQUJMRSk7CiAJdHczMihSQ1ZMUENfTU9ERSwgUkNWTFBDX01PREVfRU5BQkxFKTsKLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykpCisJaWYgKCF0ZzNfZmxhZyh0cCwgNTcwNV9QTFVTKSkKIAkJdHczMihSQ1ZMU0NfTU9ERSwgUkNWTFNDX01PREVfRU5BQkxFIHwgUkNWTFNDX01PREVfQVRUTl9FTkFCTEUpOwogCiAJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX01JSV9TRVJERVMpIHsKQEAgLTgzMDUsMTMgKzg0MDcsMTMgQEAKIAkJdWRlbGF5KDEwKTsKIAl9CiAKLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfQVBFKQorCWlmICh0ZzNfZmxhZyh0cCwgRU5BQkxFX0FQRSkpCiAJCXRwLT5tYWNfbW9kZSA9IE1BQ19NT0RFX0FQRV9UWF9FTiB8IE1BQ19NT0RFX0FQRV9SWF9FTjsKIAllbHNlCiAJCXRwLT5tYWNfbW9kZSA9IDA7CiAJdHAtPm1hY19tb2RlIHw9IE1BQ19NT0RFX1RYU1RBVF9FTkFCTEUgfCBNQUNfTU9ERV9SWFNUQVRfRU5BQkxFIHwKIAkJTUFDX01PREVfVERFX0VOQUJMRSB8IE1BQ19NT0RFX1JERV9FTkFCTEUgfCBNQUNfTU9ERV9GSERFX0VOQUJMRTsKLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykgJiYKKwlpZiAoIXRnM19mbGFnKHRwLCA1NzA1X1BMVVMpICYmCiAJICAgICEodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfUEhZX1NFUkRFUykgJiYKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MDApCiAJCXRwLT5tYWNfbW9kZSB8PSBNQUNfTU9ERV9MSU5LX1BPTEFSSVRZOwpAQCAtODMxOSwxMiArODQyMSwxMiBAQAogCXVkZWxheSg0MCk7CiAKIAkvKiB0cC0+Z3JjX2xvY2FsX2N0cmwgaXMgcGFydGlhbGx5IHNldCB1cCBkdXJpbmcgdGczX2dldF9pbnZhcmlhbnRzKCkuCi0JICogSWYgVEczX0ZMRzJfSVNfTklDIGlzIHplcm8sIHdlIHNob3VsZCByZWFkIHRoZQorCSAqIElmIFRHM19GTEFHX0lTX05JQyBpcyB6ZXJvLCB3ZSBzaG91bGQgcmVhZCB0aGUKIAkgKiByZWdpc3RlciB0byBwcmVzZXJ2ZSB0aGUgR1BJTyBzZXR0aW5ncyBmb3IgTE9Ncy4gVGhlIEdQSU9zLAogCSAqIHdoZXRoZXIgdXNlZCBhcyBpbnB1dHMgb3Igb3V0cHV0cywgYXJlIHNldCBieSBib290IGNvZGUgYWZ0ZXIKIAkgKiByZXNldC4KIAkgKi8KLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0lTX05JQykpIHsKKwlpZiAoIXRnM19mbGFnKHRwLCBJU19OSUMpKSB7CiAJCXUzMiBncGlvX21hc2s7CiAKIAkJZ3Bpb19tYXNrID0gR1JDX0xDTENUUkxfR1BJT19PRTAgfCBHUkNfTENMQ1RSTF9HUElPX09FMSB8CkBAIC04MzQyLDIxICs4NDQ0LDIwIEBACiAJCXRwLT5ncmNfbG9jYWxfY3RybCB8PSB0cjMyKEdSQ19MT0NBTF9DVFJMKSAmIGdwaW9fbWFzazsKIAogCQkvKiBHUElPMSBtdXN0IGJlIGRyaXZlbiBoaWdoIGZvciBlZXByb20gd3JpdGUgcHJvdGVjdCAqLwotCQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VFUFJPTV9XUklURV9QUk9UKQorCQlpZiAodGczX2ZsYWcodHAsIEVFUFJPTV9XUklURV9QUk9UKSkKIAkJCXRwLT5ncmNfbG9jYWxfY3RybCB8PSAoR1JDX0xDTENUUkxfR1BJT19PRTEgfAogCQkJCQkgICAgICAgR1JDX0xDTENUUkxfR1BJT19PVVRQVVQxKTsKIAl9CiAJdHczMl9mKEdSQ19MT0NBTF9DVFJMLCB0cC0+Z3JjX2xvY2FsX2N0cmwpOwogCXVkZWxheSgxMDApOwogCi0JaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSVgpICYmCi0JCXRwLT5pcnFfY250ID4gMSkgeworCWlmICh0ZzNfZmxhZyh0cCwgVVNJTkdfTVNJWCkgJiYgdHAtPmlycV9jbnQgPiAxKSB7CiAJCXZhbCA9IHRyMzIoTVNHSU5UX01PREUpOwogCQl2YWwgfD0gTVNHSU5UX01PREVfTVVMVElWRUNfRU4gfCBNU0dJTlRfTU9ERV9FTkFCTEU7CiAJCXR3MzIoTVNHSU5UX01PREUsIHZhbCk7CiAJfQogCi0JaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKSB7CisJaWYgKCF0ZzNfZmxhZyh0cCwgNTcwNV9QTFVTKSkgewogCQl0dzMyX2YoRE1BQ19NT0RFLCBETUFDX01PREVfRU5BQkxFKTsKIAkJdWRlbGF5KDQwKTsKIAl9CkBAIC04MzY5LDE4ICs4NDcwLDE4IEBACiAKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDUgJiYKIAkgICAgdHAtPnBjaV9jaGlwX3Jldl9pZCAhPSBDSElQUkVWX0lEXzU3MDVfQTApIHsKLQkJaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1RTT19DQVBBQkxFKSAmJgorCQlpZiAodGczX2ZsYWcodHAsIFRTT19DQVBBQkxFKSAmJgogCQkgICAgKHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81NzA1X0ExIHx8CiAJCSAgICAgdHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3MDVfQTIpKSB7CiAJCQkvKiBub3RoaW5nICovCiAJCX0gZWxzZSBpZiAoISh0cjMyKFRHM1BDSV9QQ0lTVEFURSkgJiBQQ0lTVEFURV9CVVNfU1BFRURfSElHSCkgJiYKLQkJCSAgICEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9JU181Nzg4KSkgeworCQkJICAgIXRnM19mbGFnKHRwLCBJU181Nzg4KSkgewogCQkJdmFsIHw9IFdETUFDX01PREVfUlhfQUNDRUw7CiAJCX0KIAl9CiAKIAkvKiBFbmFibGUgaG9zdCBjb2FsZXNjaW5nIGJ1ZyBmaXggKi8KLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM181NzU1X1BMVVMpCisJaWYgKHRnM19mbGFnKHRwLCA1NzU1X1BMVVMpKQogCQl2YWwgfD0gV0RNQUNfTU9ERV9TVEFUVVNfVEFHX0ZJWDsKIAogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NSkKQEAgLTgzODksNyArODQ5MCw3IEBACiAJdHczMl9mKFdETUFDX01PREUsIHZhbCk7CiAJdWRlbGF5KDQwKTsKIAotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUENJWF9NT0RFKSB7CisJaWYgKHRnM19mbGFnKHRwLCBQQ0lYX01PREUpKSB7CiAJCXUxNiBwY2l4X2NtZDsKIAogCQlwY2lfcmVhZF9jb25maWdfd29yZCh0cC0+cGRldiwgdHAtPnBjaXhfY2FwICsgUENJX1hfQ01ELApAQCAtODQwOSw3ICs4NTEwLDcgQEAKIAl1ZGVsYXkoNDApOwogCiAJdHczMihSQ1ZEQ0NfTU9ERSwgUkNWRENDX01PREVfRU5BQkxFIHwgUkNWRENDX01PREVfQVRUTl9FTkFCTEUpOwotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSkKKwlpZiAoIXRnM19mbGFnKHRwLCA1NzA1X1BMVVMpKQogCQl0dzMyKE1CRlJFRV9NT0RFLCBNQkZSRUVfTU9ERV9FTkFCTEUpOwogCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzYxKQpAQCAtODQyMSwxNSArODUyMiwxNiBAQAogCXR3MzIoU05EQkRDX01PREUsIFNOREJEQ19NT0RFX0VOQUJMRSB8IFNOREJEQ19NT0RFX0FUVE5fRU5BQkxFKTsKIAl0dzMyKFJDVkJESV9NT0RFLCBSQ1ZCRElfTU9ERV9FTkFCTEUgfCBSQ1ZCRElfTU9ERV9SQ0JfQVRUTl9FTkFCKTsKIAl2YWwgPSBSQ1ZEQkRJX01PREVfRU5BQkxFIHwgUkNWREJESV9NT0RFX0lOVl9SSU5HX1NaOwotCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNyB8fAotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxOSkKKwlpZiAodGczX2ZsYWcodHAsIExSR19QUk9EX1JJTkdfQ0FQKSkKIAkJdmFsIHw9IFJDVkRCRElfTU9ERV9MUkdfUklOR19TWjsKIAl0dzMyKFJDVkRCRElfTU9ERSwgdmFsKTsKIAl0dzMyKFNORERBVEFJX01PREUsIFNORERBVEFJX01PREVfRU5BQkxFKTsKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9IV19UU08pCisJaWYgKHRnM19mbGFnKHRwLCBIV19UU09fMSkgfHwKKwkgICAgdGczX2ZsYWcodHAsIEhXX1RTT18yKSB8fAorCSAgICB0ZzNfZmxhZyh0cCwgSFdfVFNPXzMpKQogCQl0dzMyKFNORERBVEFJX01PREUsIFNORERBVEFJX01PREVfRU5BQkxFIHwgMHg4KTsKIAl2YWwgPSBTTkRCRElfTU9ERV9FTkFCTEUgfCBTTkRCRElfTU9ERV9BVFROX0VOQUJMRTsKLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfVFNTKQorCWlmICh0ZzNfZmxhZyh0cCwgRU5BQkxFX1RTUykpCiAJCXZhbCB8PSBTTkRCRElfTU9ERV9NVUxUSV9UWFFfRU47CiAJdHczMihTTkRCRElfTU9ERSwgdmFsKTsKIAl0dzMyKFNOREJEU19NT0RFLCBTTkRCRFNfTU9ERV9FTkFCTEUgfCBTTkRCRFNfTU9ERV9BVFROX0VOQUJMRSk7CkBAIC04NDQwLDIwICs4NTQyLDI4IEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1RTT19DQVBBQkxFKSB7CisJaWYgKHRnM19mbGFnKHRwLCBUU09fQ0FQQUJMRSkpIHsKIAkJZXJyID0gdGczX2xvYWRfdHNvX2Zpcm13YXJlKHRwKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQogCiAJdHAtPnR4X21vZGUgPSBUWF9NT0RFX0VOQUJMRTsKLQlpZiAoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTc1NV9QTFVTKSB8fAorCisJaWYgKHRnM19mbGFnKHRwLCA1NzU1X1BMVVMpIHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KQogCQl0cC0+dHhfbW9kZSB8PSBUWF9NT0RFX01CVUZfTE9DS1VQX0ZJWDsKKworCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcyMCkgeworCQl2YWwgPSBUWF9NT0RFX0pNQl9GUk1fTEVOIHwgVFhfTU9ERV9DTlRfRE5fTU9ERTsKKwkJdHAtPnR4X21vZGUgJj0gfnZhbDsKKwkJdHAtPnR4X21vZGUgfD0gdHIzMihNQUNfVFhfTU9ERSkgJiB2YWw7CisJfQorCiAJdHczMl9mKE1BQ19UWF9NT0RFLCB0cC0+dHhfbW9kZSk7CiAJdWRlbGF5KDEwMCk7CiAKLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfUlNTKSB7CisJaWYgKHRnM19mbGFnKHRwLCBFTkFCTEVfUlNTKSkgewogCQl1MzIgcmVnID0gTUFDX1JTU19JTkRJUl9UQkxfMDsKIAkJdTggKmVudCA9ICh1OCAqKSZ2YWw7CiAKQEAgLTg0ODIsMTAgKzg1OTIsMTAgQEAKIAl9CiAKIAl0cC0+cnhfbW9kZSA9IFJYX01PREVfRU5BQkxFOwotCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3NTVfUExVUykKKwlpZiAodGczX2ZsYWcodHAsIDU3NTVfUExVUykpCiAJCXRwLT5yeF9tb2RlIHw9IFJYX01PREVfSVBWNl9DU1VNX0VOQUJMRTsKIAotCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9SU1MpCisJaWYgKHRnM19mbGFnKHRwLCBFTkFCTEVfUlNTKSkKIAkJdHAtPnJ4X21vZGUgfD0gUlhfTU9ERV9SU1NfRU5BQkxFIHwKIAkJCSAgICAgICBSWF9NT0RFX1JTU19JVEJMX0hBU0hfQklUU183IHwKIAkJCSAgICAgICBSWF9NT0RFX1JTU19JUFY2X0hBU0hfRU4gfApAQCAtODUzMiwxMSArODY0MiwxMSBAQAogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwNCAmJgogCSAgICAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfUEhZX1NFUkRFUykpIHsKIAkJLyogVXNlIGhhcmR3YXJlIGxpbmsgYXV0by1uZWdvdGlhdGlvbiAqLwotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9IV19BVVRPTkVHOworCQl0ZzNfZmxhZ19zZXQodHAsIEhXX0FVVE9ORUcpOwogCX0KIAogCWlmICgodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfTUlJX1NFUkRFUykgJiYKLQkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE0KSkgeworCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNCkgewogCQl1MzIgdG1wOwogCiAJCXRtcCA9IHRyMzIoU0VSREVTX1JYX0NUUkwpOwpAQCAtODU0Niw3ICs4NjU2LDcgQEAKIAkJdHczMihHUkNfTE9DQUxfQ1RSTCwgdHAtPmdyY19sb2NhbF9jdHJsKTsKIAl9CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1VTRV9QSFlMSUIpKSB7CisJaWYgKCF0ZzNfZmxhZyh0cCwgVVNFX1BIWUxJQikpIHsKIAkJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0xPV19QT1dFUikgewogCQkJdHAtPnBoeV9mbGFncyAmPSB+VEczX1BIWUZMR19JU19MT1dfUE9XRVI7CiAJCQl0cC0+bGlua19jb25maWcuc3BlZWQgPSB0cC0+bGlua19jb25maWcub3JpZ19zcGVlZDsKQEAgLTg1NzksMTIgKzg2ODksMTEgQEAKIAl0dzMyKE1BQ19SQ1ZfUlVMRV8xLCAgMHg4NjAwMDAwNCAmIFJDVl9SVUxFX0RJU0FCTEVfTUFTSyk7CiAJdHczMihNQUNfUkNWX1ZBTFVFXzEsIDB4ZmZmZmZmZmYgJiBSQ1ZfUlVMRV9ESVNBQkxFX01BU0spOwogCi0JaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykgJiYKLQkgICAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3ODBfQ0xBU1MpKQorCWlmICh0ZzNfZmxhZyh0cCwgNTcwNV9QTFVTKSAmJiAhdGczX2ZsYWcodHAsIDU3ODBfQ0xBU1MpKQogCQlsaW1pdCA9IDg7CiAJZWxzZQogCQlsaW1pdCA9IDE2OwotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikKKwlpZiAodGczX2ZsYWcodHAsIEVOQUJMRV9BU0YpKQogCQlsaW1pdCAtPSA0OwogCXN3aXRjaCAobGltaXQpIHsKIAljYXNlIDE2OgpAQCAtODYyMiw3ICs4NzMxLDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkKKwlpZiAodGczX2ZsYWcodHAsIEVOQUJMRV9BUEUpKQogCQkvKiBXcml0ZSBvdXIgaGVhcnRiZWF0IHVwZGF0ZSBpbnRlcnZhbCB0byBBUEUuICovCiAJCXRnM19hcGVfd3JpdGUzMih0cCwgVEczX0FQRV9IT1NUX0hFQVJUQkVBVF9JTlRfTVMsCiAJCQkJQVBFX0hPU1RfSEVBUlRCRUFUX0lOVF9ESVNBQkxFKTsKQEAgLTg2ODgsNyArODc5NywyMSBAQAogCVRHM19TVEFUX0FERDMyKCZzcC0+cnhfdW5kZXJzaXplX3BhY2tldHMsIE1BQ19SWF9TVEFUU19VTkRFUlNJWkUpOwogCiAJVEczX1NUQVRfQUREMzIoJnNwLT5yeGJkc19lbXB0eSwgUkNWTFBDX05PX1JDVl9CRF9DTlQpOwotCVRHM19TVEFUX0FERDMyKCZzcC0+cnhfZGlzY2FyZHMsIFJDVkxQQ19JTl9ESVNDQVJEU19DTlQpOworCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcxNyAmJgorCSAgICB0cC0+cGNpX2NoaXBfcmV2X2lkICE9IENISVBSRVZfSURfNTcxOV9BMCAmJgorCSAgICB0cC0+cGNpX2NoaXBfcmV2X2lkICE9IENISVBSRVZfSURfNTcyMF9BMCkgeworCQlURzNfU1RBVF9BREQzMigmc3AtPnJ4X2Rpc2NhcmRzLCBSQ1ZMUENfSU5fRElTQ0FSRFNfQ05UKTsKKwl9IGVsc2UgeworCQl1MzIgdmFsID0gdHIzMihIT1NUQ0NfRkxPV19BVFROKTsKKwkJdmFsID0gKHZhbCAmIEhPU1RDQ19GTE9XX0FUVE5fTUJVRl9MV00pID8gMSA6IDA7CisJCWlmICh2YWwpIHsKKwkJCXR3MzIoSE9TVENDX0ZMT1dfQVRUTiwgSE9TVENDX0ZMT1dfQVRUTl9NQlVGX0xXTSk7CisJCQlzcC0+cnhfZGlzY2FyZHMubG93ICs9IHZhbDsKKwkJCWlmIChzcC0+cnhfZGlzY2FyZHMubG93IDwgdmFsKQorCQkJCXNwLT5yeF9kaXNjYXJkcy5oaWdoICs9IDE7CisJCX0KKwkJc3AtPm1idWZfbHdtX3RocmVzaF9oaXQgPSBzcC0+cnhfZGlzY2FyZHM7CisJfQogCVRHM19TVEFUX0FERDMyKCZzcC0+cnhfZXJyb3JzLCBSQ1ZMUENfSU5fRVJST1JTX0NOVCk7CiB9CiAKQEAgLTg3MDEsNyArODgyNCw3IEBACiAKIAlzcGluX2xvY2soJnRwLT5sb2NrKTsKIAotCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19UQUdHRURfU1RBVFVTKSkgeworCWlmICghdGczX2ZsYWcodHAsIFRBR0dFRF9TVEFUVVMpKSB7CiAJCS8qIEFsbCBvZiB0aGlzIGdhcmJhZ2UgaXMgYmVjYXVzZSB3aGVuIHVzaW5nIG5vbi10YWdnZWQKIAkJICogSVJRIHN0YXR1cyB0aGUgbWFpbGJveC9zdGF0dXNfYmxvY2sgcHJvdG9jb2wgdGhlIGNoaXAKIAkJICogdXNlcyB3aXRoIHRoZSBjcHUgaXMgcmFjZSBwcm9uZS4KQEAgLTg3MTUsNyArODgzOCw3IEBACiAJCX0KIAogCQlpZiAoISh0cjMyKFdETUFDX01PREUpICYgV0RNQUNfTU9ERV9FTkFCTEUpKSB7Ci0JCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9SRVNUQVJUX1RJTUVSOworCQkJdGczX2ZsYWdfc2V0KHRwLCBSRVNUQVJUX1RJTUVSKTsKIAkJCXNwaW5fdW5sb2NrKCZ0cC0+bG9jayk7CiAJCQlzY2hlZHVsZV93b3JrKCZ0cC0+cmVzZXRfdGFzayk7CiAJCQlyZXR1cm47CkBAIC04NzI0LDE2ICs4ODQ3LDEzIEBACiAKIAkvKiBUaGlzIHBhcnQgb25seSBydW5zIG9uY2UgcGVyIHNlY29uZC4gKi8KIAlpZiAoIS0tdHAtPnRpbWVyX2NvdW50ZXIpIHsKLQkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKQorCQlpZiAodGczX2ZsYWcodHAsIDU3MDVfUExVUykpCiAJCQl0ZzNfcGVyaW9kaWNfZmV0Y2hfc3RhdHModHApOwogCi0JCWlmICh0cC0+c2V0bHBpY250ICYmICEtLXRwLT5zZXRscGljbnQpIHsKLQkJCXUzMiB2YWwgPSB0cjMyKFRHM19DUE1VX0VFRV9NT0RFKTsKLQkJCXR3MzIoVEczX0NQTVVfRUVFX01PREUsCi0JCQkgICAgIHZhbCB8IFRHM19DUE1VX0VFRU1EX0xQSV9FTkFCTEUpOwotCQl9CisJCWlmICh0cC0+c2V0bHBpY250ICYmICEtLXRwLT5zZXRscGljbnQpCisJCQl0ZzNfcGh5X2VlZV9lbmFibGUodHApOwogCi0JCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVVNFX0xJTktDSEdfUkVHKSB7CisJCWlmICh0ZzNfZmxhZyh0cCwgVVNFX0xJTktDSEdfUkVHKSkgewogCQkJdTMyIG1hY19zdGF0OwogCQkJaW50IHBoeV9ldmVudDsKIApAQCAtODc0OCw3ICs4ODY4LDcgQEAKIAogCQkJaWYgKHBoeV9ldmVudCkKIAkJCQl0ZzNfc2V0dXBfcGh5KHRwLCAwKTsKLQkJfSBlbHNlIGlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUE9MTF9TRVJERVMpIHsKKwkJfSBlbHNlIGlmICh0ZzNfZmxhZyh0cCwgUE9MTF9TRVJERVMpKSB7CiAJCQl1MzIgbWFjX3N0YXQgPSB0cjMyKE1BQ19TVEFUVVMpOwogCQkJaW50IG5lZWRfc2V0dXAgPSAwOwogCkBAIC04NzczLDcgKzg4OTMsNyBAQAogCQkJCXRnM19zZXR1cF9waHkodHAsIDApOwogCQkJfQogCQl9IGVsc2UgaWYgKCh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19NSUlfU0VSREVTKSAmJgotCQkJICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc4MF9DTEFTUykpIHsKKwkJCSAgIHRnM19mbGFnKHRwLCA1NzgwX0NMQVNTKSkgewogCQkJdGczX3NlcmRlc19wYXJhbGxlbF9kZXRlY3QodHApOwogCQl9CiAKQEAgLTg3OTgsOCArODkxOCw3IEBACiAJICogcmVzZXRzLgogCSAqLwogCWlmICghLS10cC0+YXNmX2NvdW50ZXIpIHsKLQkJaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikgJiYKLQkJICAgICEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfQVBFKSkgeworCQlpZiAodGczX2ZsYWcodHAsIEVOQUJMRV9BU0YpICYmICF0ZzNfZmxhZyh0cCwgRU5BQkxFX0FQRSkpIHsKIAkJCXRnM193YWl0X2Zvcl9ldmVudF9hY2sodHApOwogCiAJCQl0ZzNfd3JpdGVfbWVtKHRwLCBOSUNfU1JBTV9GV19DTURfTUJPWCwKQEAgLTg4MzUsMTYgKzg5NTQsMTYgQEAKIAkJbmFtZVtJRk5BTVNJWi0xXSA9IDA7CiAJfQogCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJX09SX01TSVgpIHsKKwlpZiAodGczX2ZsYWcodHAsIFVTSU5HX01TSSkgfHwgdGczX2ZsYWcodHAsIFVTSU5HX01TSVgpKSB7CiAJCWZuID0gdGczX21zaTsKLQkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfMVNIT1RfTVNJKQorCQlpZiAodGczX2ZsYWcodHAsIDFTSE9UX01TSSkpCiAJCQlmbiA9IHRnM19tc2lfMXNob3Q7Ci0JCWZsYWdzID0gSVJRRl9TQU1QTEVfUkFORE9NOworCQlmbGFncyA9IDA7CiAJfSBlbHNlIHsKIAkJZm4gPSB0ZzNfaW50ZXJydXB0OwotCQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1RBR0dFRF9TVEFUVVMpCisJCWlmICh0ZzNfZmxhZyh0cCwgVEFHR0VEX1NUQVRVUykpCiAJCQlmbiA9IHRnM19pbnRlcnJ1cHRfdGFnZ2VkOwotCQlmbGFncyA9IElSUUZfU0hBUkVEIHwgSVJRRl9TQU1QTEVfUkFORE9NOworCQlmbGFncyA9IElSUUZfU0hBUkVEOwogCX0KIAogCXJldHVybiByZXF1ZXN0X2lycSh0bmFwaS0+aXJxX3ZlYywgZm4sIGZsYWdzLCBuYW1lLCB0bmFwaSk7CkBAIC04ODY4LDggKzg5ODcsNyBAQAogCSAqIFR1cm4gb2ZmIE1TSSBvbmUgc2hvdCBtb2RlLiAgT3RoZXJ3aXNlIHRoaXMgdGVzdCBoYXMgbm8KIAkgKiBvYnNlcnZhYmxlIHdheSB0byBrbm93IHdoZXRoZXIgdGhlIGludGVycnVwdCB3YXMgZGVsaXZlcmVkLgogCSAqLwotCWlmICgodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM181NzE3X1BMVVMpICYmCi0JICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSSkpIHsKKwlpZiAodGczX2ZsYWcodHAsIDU3NzY1X1BMVVMpICYmIHRnM19mbGFnKHRwLCBVU0lOR19NU0kpKSB7CiAJCXZhbCA9IHRyMzIoTVNHSU5UX01PREUpIHwgTVNHSU5UX01PREVfT05FX1NIT1RfRElTQUJMRTsKIAkJdHczMihNU0dJTlRfTU9ERSwgdmFsKTsKIAl9CkBAIC04OTExLDggKzkwMjksNyBAQAogCiAJaWYgKGludHJfb2spIHsKIAkJLyogUmVlbmFibGUgTVNJIG9uZSBzaG90IG1vZGUuICovCi0JCWlmICgodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM181NzE3X1BMVVMpICYmCi0JCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9VU0lOR19NU0kpKSB7CisJCWlmICh0ZzNfZmxhZyh0cCwgNTc3NjVfUExVUykgJiYgdGczX2ZsYWcodHAsIFVTSU5HX01TSSkpIHsKIAkJCXZhbCA9IHRyMzIoTVNHSU5UX01PREUpICYgfk1TR0lOVF9NT0RFX09ORV9TSE9UX0RJU0FCTEU7CiAJCQl0dzMyKE1TR0lOVF9NT0RFLCB2YWwpOwogCQl9CkBAIC04OTMwLDcgKzkwNDcsNyBAQAogCWludCBlcnI7CiAJdTE2IHBjaV9jbWQ7CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSSkpCisJaWYgKCF0ZzNfZmxhZyh0cCwgVVNJTkdfTVNJKSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBUdXJuIG9mZiBTRVJSIHJlcG9ydGluZyBpbiBjYXNlIE1TSSB0ZXJtaW5hdGVzIHdpdGggTWFzdGVyCkBAIC04OTYwLDcgKzkwNzcsNyBAQAogCiAJcGNpX2Rpc2FibGVfbXNpKHRwLT5wZGV2KTsKIAotCXRwLT50ZzNfZmxhZ3MyICY9IH5URzNfRkxHMl9VU0lOR19NU0k7CisJdGczX2ZsYWdfY2xlYXIodHAsIFVTSU5HX01TSSk7CiAJdHAtPm5hcGlbMF0uaXJxX3ZlYyA9IHRwLT5wZGV2LT5pcnE7CiAKIAllcnIgPSB0ZzNfcmVxdWVzdF9pcnEodHAsIDApOwpAQCAtOTA1Nyw5ICs5MTc0LDExIEBACiAJfQogCiAJaWYgKHRwLT5pcnFfY250ID4gMSkgewotCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19FTkFCTEVfUlNTOwotCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTkpIHsKLQkJCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX0VOQUJMRV9UU1M7CisJCXRnM19mbGFnX3NldCh0cCwgRU5BQkxFX1JTUyk7CisKKwkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE5IHx8CisJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcyMCkgeworCQkJdGczX2ZsYWdfc2V0KHRwLCBFTkFCTEVfVFNTKTsKIAkJCW5ldGlmX3NldF9yZWFsX251bV90eF9xdWV1ZXModHAtPmRldiwgdHAtPmlycV9jbnQgLSAxKTsKIAkJfQogCX0KQEAgLTkwNjksOCArOTE4OCw4IEBACiAKIHN0YXRpYyB2b2lkIHRnM19pbnRzX2luaXQoc3RydWN0IHRnMyAqdHApCiB7Ci0JaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfU1VQUE9SVF9NU0lfT1JfTVNJWCkgJiYKLQkgICAgISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVEFHR0VEX1NUQVRVUykpIHsKKwlpZiAoKHRnM19mbGFnKHRwLCBTVVBQT1JUX01TSSkgfHwgdGczX2ZsYWcodHAsIFNVUFBPUlRfTVNJWCkpICYmCisJICAgICF0ZzNfZmxhZyh0cCwgVEFHR0VEX1NUQVRVUykpIHsKIAkJLyogQWxsIE1TSSBzdXBwb3J0aW5nIGNoaXBzIHNob3VsZCBzdXBwb3J0IHRhZ2dlZAogCQkgKiBzdGF0dXMuICBBc3NlcnQgdGhhdCB0aGlzIGlzIHRoZSBjYXNlLgogCQkgKi8KQEAgLTkwNzksMjEgKzkxOTgsMTkgQEAKIAkJZ290byBkZWZjZmc7CiAJfQogCi0JaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfU1VQUE9SVF9NU0lYKSAmJiB0ZzNfZW5hYmxlX21zaXgodHApKQotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9VU0lOR19NU0lYOwotCWVsc2UgaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfU1VQUE9SVF9NU0kpICYmCi0JCSBwY2lfZW5hYmxlX21zaSh0cC0+cGRldikgPT0gMCkKLQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfVVNJTkdfTVNJOworCWlmICh0ZzNfZmxhZyh0cCwgU1VQUE9SVF9NU0lYKSAmJiB0ZzNfZW5hYmxlX21zaXgodHApKQorCQl0ZzNfZmxhZ19zZXQodHAsIFVTSU5HX01TSVgpOworCWVsc2UgaWYgKHRnM19mbGFnKHRwLCBTVVBQT1JUX01TSSkgJiYgcGNpX2VuYWJsZV9tc2kodHAtPnBkZXYpID09IDApCisJCXRnM19mbGFnX3NldCh0cCwgVVNJTkdfTVNJKTsKIAotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSV9PUl9NU0lYKSB7CisJaWYgKHRnM19mbGFnKHRwLCBVU0lOR19NU0kpIHx8IHRnM19mbGFnKHRwLCBVU0lOR19NU0lYKSkgewogCQl1MzIgbXNpX21vZGUgPSB0cjMyKE1TR0lOVF9NT0RFKTsKLQkJaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSVgpICYmCi0JCSAgICB0cC0+aXJxX2NudCA+IDEpCisJCWlmICh0ZzNfZmxhZyh0cCwgVVNJTkdfTVNJWCkgJiYgdHAtPmlycV9jbnQgPiAxKQogCQkJbXNpX21vZGUgfD0gTVNHSU5UX01PREVfTVVMVElWRUNfRU47CiAJCXR3MzIoTVNHSU5UX01PREUsIG1zaV9tb2RlIHwgTVNHSU5UX01PREVfRU5BQkxFKTsKIAl9CiBkZWZjZmc6Ci0JaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9VU0lOR19NU0lYKSkgeworCWlmICghdGczX2ZsYWcodHAsIFVTSU5HX01TSVgpKSB7CiAJCXRwLT5pcnFfY250ID0gMTsKIAkJdHAtPm5hcGlbMF0uaXJxX3ZlYyA9IHRwLT5wZGV2LT5pcnE7CiAJCW5ldGlmX3NldF9yZWFsX251bV90eF9xdWV1ZXModHAtPmRldiwgMSk7CkBAIC05MTAzLDEyICs5MjIwLDE0IEBACiAKIHN0YXRpYyB2b2lkIHRnM19pbnRzX2Zpbmkoc3RydWN0IHRnMyAqdHApCiB7Ci0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJWCkKKwlpZiAodGczX2ZsYWcodHAsIFVTSU5HX01TSVgpKQogCQlwY2lfZGlzYWJsZV9tc2l4KHRwLT5wZGV2KTsKLQllbHNlIGlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSSkKKwllbHNlIGlmICh0ZzNfZmxhZyh0cCwgVVNJTkdfTVNJKSkKIAkJcGNpX2Rpc2FibGVfbXNpKHRwLT5wZGV2KTsKLQl0cC0+dGczX2ZsYWdzMiAmPSB+VEczX0ZMRzJfVVNJTkdfTVNJX09SX01TSVg7Ci0JdHAtPnRnM19mbGFnczMgJj0gfihURzNfRkxHM19FTkFCTEVfUlNTIHwgVEczX0ZMRzNfRU5BQkxFX1RTUyk7CisJdGczX2ZsYWdfY2xlYXIodHAsIFVTSU5HX01TSSk7CisJdGczX2ZsYWdfY2xlYXIodHAsIFVTSU5HX01TSVgpOworCXRnM19mbGFnX2NsZWFyKHRwLCBFTkFCTEVfUlNTKTsKKwl0ZzNfZmxhZ19jbGVhcih0cCwgRU5BQkxFX1RTUyk7CiB9CiAKIHN0YXRpYyBpbnQgdGczX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTkxMjMsMTAgKzkyNDIsMTAgQEAKIAkJCQlyZXR1cm4gZXJyOwogCQl9IGVsc2UgaWYgKGVycikgewogCQkJbmV0ZGV2X3dhcm4odHAtPmRldiwgIlRTTyBjYXBhYmlsaXR5IGRpc2FibGVkXG4iKTsKLQkJCXRwLT50ZzNfZmxhZ3MyICY9IH5URzNfRkxHMl9UU09fQ0FQQUJMRTsKLQkJfSBlbHNlIGlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVFNPX0NBUEFCTEUpKSB7CisJCQl0ZzNfZmxhZ19jbGVhcih0cCwgVFNPX0NBUEFCTEUpOworCQl9IGVsc2UgaWYgKCF0ZzNfZmxhZyh0cCwgVFNPX0NBUEFCTEUpKSB7CiAJCQluZXRkZXZfbm90aWNlKHRwLT5kZXYsICJUU08gY2FwYWJpbGl0eSByZXN0b3JlZFxuIik7Ci0JCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9UU09fQ0FQQUJMRTsKKwkJCXRnM19mbGFnX3NldCh0cCwgVFNPX0NBUEFCTEUpOwogCQl9CiAJfQogCkBAIC05MTM5LDcgKzkyNTgsNyBAQAogCXRnM19mdWxsX2xvY2sodHAsIDApOwogCiAJdGczX2Rpc2FibGVfaW50cyh0cCk7Ci0JdHAtPnRnM19mbGFncyAmPSB+VEczX0ZMQUdfSU5JVF9DT01QTEVURTsKKwl0ZzNfZmxhZ19jbGVhcih0cCwgSU5JVF9DT01QTEVURSk7CiAKIAl0ZzNfZnVsbF91bmxvY2sodHApOwogCkBAIC05MTgwLDcgKzkyOTksNyBAQAogCQl0ZzNfaGFsdCh0cCwgUkVTRVRfS0lORF9TSFVURE9XTiwgMSk7CiAJCXRnM19mcmVlX3JpbmdzKHRwKTsKIAl9IGVsc2UgewotCQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1RBR0dFRF9TVEFUVVMpCisJCWlmICh0ZzNfZmxhZyh0cCwgVEFHR0VEX1NUQVRVUykpCiAJCQl0cC0+dGltZXJfb2Zmc2V0ID0gSFo7CiAJCWVsc2UKIAkJCXRwLT50aW1lcl9vZmZzZXQgPSBIWiAvIDEwOwpAQCAtOTIwMiw3ICs5MzIxLDcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXQzOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJKSB7CisJaWYgKHRnM19mbGFnKHRwLCBVU0lOR19NU0kpKSB7CiAJCWVyciA9IHRnM190ZXN0X21zaSh0cCk7CiAKIAkJaWYgKGVycikgewpAQCAtOTIxNCw4ICs5MzMzLDcgQEAKIAkJCWdvdG8gZXJyX291dDI7CiAJCX0KIAotCQlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3MTdfUExVUykgJiYKLQkJICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSSkpIHsKKwkJaWYgKCF0ZzNfZmxhZyh0cCwgNTc3NjVfUExVUykgJiYgdGczX2ZsYWcodHAsIFVTSU5HX01TSSkpIHsKIAkJCXUzMiB2YWwgPSB0cjMyKFBDSUVfVFJBTlNBQ1RJT05fQ0ZHKTsKIAogCQkJdHczMihQQ0lFX1RSQU5TQUNUSU9OX0NGRywKQEAgLTkyMjgsMTMgKzkzNDYsMjAgQEAKIAl0ZzNfZnVsbF9sb2NrKHRwLCAwKTsKIAogCWFkZF90aW1lcigmdHAtPnRpbWVyKTsKLQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0lOSVRfQ09NUExFVEU7CisJdGczX2ZsYWdfc2V0KHRwLCBJTklUX0NPTVBMRVRFKTsKIAl0ZzNfZW5hYmxlX2ludHModHApOwogCiAJdGczX2Z1bGxfdW5sb2NrKHRwKTsKIAogCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMoZGV2KTsKIAorCS8qCisJICogUmVzZXQgbG9vcGJhY2sgZmVhdHVyZSBpZiBpdCB3YXMgdHVybmVkIG9uIHdoaWxlIHRoZSBkZXZpY2Ugd2FzIGRvd24KKwkgKiBtYWtlIHN1cmUgdGhhdCBpdCdzIGluc3RhbGxlZCBwcm9wZXJseSBub3cuCisJICovCisJaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xPT1BCQUNLKQorCQl0ZzNfc2V0X2xvb3BiYWNrKGRldiwgZGV2LT5mZWF0dXJlcyk7CisKIAlyZXR1cm4gMDsKIAogZXJyX291dDM6CkBAIC05Mjc3LDcgKzk0MDIsNyBAQAogCiAJdGczX2hhbHQodHAsIFJFU0VUX0tJTkRfU0hVVERPV04sIDEpOwogCXRnM19mcmVlX3JpbmdzKHRwKTsKLQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19JTklUX0NPTVBMRVRFOworCXRnM19mbGFnX2NsZWFyKHRwLCBJTklUX0NPTVBMRVRFKTsKIAogCXRnM19mdWxsX3VubG9jayh0cCk7CiAKQEAgLTk0MjQsNiArOTU0OSw4IEBACiAJRVNUQVRfQUREKG5pY19hdm9pZGVkX2lycXMpOwogCUVTVEFUX0FERChuaWNfdHhfdGhyZXNob2xkX2hpdCk7CiAKKwlFU1RBVF9BREQobWJ1Zl9sd21fdGhyZXNoX2hpdCk7CisKIAlyZXR1cm4gZXN0YXRzOwogfQogCkBAIC05NTM0LDcgKzk2NjEsNyBAQAogCS8qIFdoZW4gQVNGIGlzIGluIHVzZSwgd2UgYWx3YXlzIGtlZXAgdGhlIFJYX01PREVfS0VFUF9WTEFOX1RBRwogCSAqIGZsYWcgY2xlYXIuCiAJICovCi0JaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VOQUJMRV9BU0YpKQorCWlmICghdGczX2ZsYWcodHAsIEVOQUJMRV9BU0YpKQogCQlyeF9tb2RlIHw9IFJYX01PREVfS0VFUF9WTEFOX1RBRzsKICNlbmRpZgogCkBAIC05NTg4LDgyICs5NzE1LDI2IEBACiAJdGczX2Z1bGxfdW5sb2NrKHRwKTsKIH0KIAotI2RlZmluZSBURzNfUkVHRFVNUF9MRU4JCSgzMiAqIDEwMjQpCi0KIHN0YXRpYyBpbnQgdGczX2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXJldHVybiBURzNfUkVHRFVNUF9MRU47CisJcmV0dXJuIFRHM19SRUdfQkxLX1NJWkU7CiB9CiAKIHN0YXRpYyB2b2lkIHRnM19nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQlzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLCB2b2lkICpfcCkKIHsKLQl1MzIgKnAgPSBfcDsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0JdTggKm9yaWdfcCA9IF9wOwotCWludCBpOwogCiAJcmVncy0+dmVyc2lvbiA9IDA7CiAKLQltZW1zZXQocCwgMCwgVEczX1JFR0RVTVBfTEVOKTsKKwltZW1zZXQoX3AsIDAsIFRHM19SRUdfQkxLX1NJWkUpOwogCiAJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0xPV19QT1dFUikKIAkJcmV0dXJuOwogCiAJdGczX2Z1bGxfbG9jayh0cCwgMCk7CiAKLSNkZWZpbmUgX19HRVRfUkVHMzIocmVnKQkoKihwKSsrID0gdHIzMihyZWcpKQotI2RlZmluZSBHRVRfUkVHMzJfTE9PUChiYXNlLCBsZW4pCQlcCi1kbyB7CXAgPSAodTMyICopKG9yaWdfcCArIChiYXNlKSk7CQlcCi0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSA0KQkJXAotCQlfX0dFVF9SRUczMigoYmFzZSkgKyBpKTsJXAotfSB3aGlsZSAoMCkKLSNkZWZpbmUgR0VUX1JFRzMyXzEocmVnKQkJCVwKLWRvIHsJcCA9ICh1MzIgKikob3JpZ19wICsgKHJlZykpOwkJXAotCV9fR0VUX1JFRzMyKChyZWcpKTsJCQlcCi19IHdoaWxlICgwKQotCi0JR0VUX1JFRzMyX0xPT1AoVEczUENJX1ZFTkRPUiwgMHhiMCk7Ci0JR0VUX1JFRzMyX0xPT1AoTUFJTEJPWF9JTlRFUlJVUFRfMCwgMHgyMDApOwotCUdFVF9SRUczMl9MT09QKE1BQ19NT0RFLCAweDRmMCk7Ci0JR0VUX1JFRzMyX0xPT1AoU05EREFUQUlfTU9ERSwgMHhlMCk7Ci0JR0VUX1JFRzMyXzEoU05EREFUQUNfTU9ERSk7Ci0JR0VUX1JFRzMyX0xPT1AoU05EQkRTX01PREUsIDB4ODApOwotCUdFVF9SRUczMl9MT09QKFNOREJESV9NT0RFLCAweDQ4KTsKLQlHRVRfUkVHMzJfMShTTkRCRENfTU9ERSk7Ci0JR0VUX1JFRzMyX0xPT1AoUkNWTFBDX01PREUsIDB4MjApOwotCUdFVF9SRUczMl9MT09QKFJDVkxQQ19TRUxMU1RfQkFTRSwgMHgxNWMpOwotCUdFVF9SRUczMl9MT09QKFJDVkRCRElfTU9ERSwgMHgwYyk7Ci0JR0VUX1JFRzMyX0xPT1AoUkNWREJESV9KVU1CT19CRCwgMHgzYyk7Ci0JR0VUX1JFRzMyX0xPT1AoUkNWREJESV9CRF9QUk9EX0lEWF8wLCAweDQ0KTsKLQlHRVRfUkVHMzJfMShSQ1ZEQ0NfTU9ERSk7Ci0JR0VUX1JFRzMyX0xPT1AoUkNWQkRJX01PREUsIDB4MjApOwotCUdFVF9SRUczMl9MT09QKFJDVkNDX01PREUsIDB4MTQpOwotCUdFVF9SRUczMl9MT09QKFJDVkxTQ19NT0RFLCAweDA4KTsKLQlHRVRfUkVHMzJfMShNQkZSRUVfTU9ERSk7Ci0JR0VUX1JFRzMyX0xPT1AoSE9TVENDX01PREUsIDB4MTAwKTsKLQlHRVRfUkVHMzJfTE9PUChNRU1BUkJfTU9ERSwgMHgxMCk7Ci0JR0VUX1JFRzMyX0xPT1AoQlVGTUdSX01PREUsIDB4NTgpOwotCUdFVF9SRUczMl9MT09QKFJETUFDX01PREUsIDB4MDgpOwotCUdFVF9SRUczMl9MT09QKFdETUFDX01PREUsIDB4MDgpOwotCUdFVF9SRUczMl8xKFJYX0NQVV9NT0RFKTsKLQlHRVRfUkVHMzJfMShSWF9DUFVfU1RBVEUpOwotCUdFVF9SRUczMl8xKFJYX0NQVV9QR01DVFIpOwotCUdFVF9SRUczMl8xKFJYX0NQVV9IV0JLUFQpOwotCUdFVF9SRUczMl8xKFRYX0NQVV9NT0RFKTsKLQlHRVRfUkVHMzJfMShUWF9DUFVfU1RBVEUpOwotCUdFVF9SRUczMl8xKFRYX0NQVV9QR01DVFIpOwotCUdFVF9SRUczMl9MT09QKEdSQ01CT1hfSU5URVJSVVBUXzAsIDB4MTEwKTsKLQlHRVRfUkVHMzJfTE9PUChGVFFfUkVTRVQsIDB4MTIwKTsKLQlHRVRfUkVHMzJfTE9PUChNU0dJTlRfTU9ERSwgMHgwYyk7Ci0JR0VUX1JFRzMyXzEoRE1BQ19NT0RFKTsKLQlHRVRfUkVHMzJfTE9PUChHUkNfTU9ERSwgMHg0Yyk7Ci0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkKLQkJR0VUX1JFRzMyX0xPT1AoTlZSQU1fQ01ELCAweDI0KTsKLQotI3VuZGVmIF9fR0VUX1JFRzMyCi0jdW5kZWYgR0VUX1JFRzMyX0xPT1AKLSN1bmRlZiBHRVRfUkVHMzJfMQorCXRnM19kdW1wX2xlZ2FjeV9yZWdzKHRwLCAodTMyICopX3ApOwogCiAJdGczX2Z1bGxfdW5sb2NrKHRwKTsKIH0KQEAgLTk2ODMsNyArOTc1NCw3IEBACiAJdTMyIGksIG9mZnNldCwgbGVuLCBiX29mZnNldCwgYl9jb3VudDsKIAlfX2JlMzIgdmFsOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTk9fTlZSQU0pCisJaWYgKHRnM19mbGFnKHRwLCBOT19OVlJBTSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0xPV19QT1dFUikKQEAgLTk3NTEsNyArOTgyMiw3IEBACiAJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0xPV19QT1dFUikKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQlpZiAoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTk9fTlZSQU0pIHx8CisJaWYgKHRnM19mbGFnKHRwLCBOT19OVlJBTSkgfHwKIAkgICAgZWVwcm9tLT5tYWdpYyAhPSBURzNfRUVQUk9NX01BR0lDKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtOTgwMyw3ICs5ODc0LDcgQEAKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfUEhZTElCKSB7CisJaWYgKHRnM19mbGFnKHRwLCBVU0VfUEhZTElCKSkgewogCQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwogCQlpZiAoISh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19DT05ORUNURUQpKQogCQkJcmV0dXJuIC1FQUdBSU47CkBAIC05ODMxLDEwICs5OTAyLDEwIEBACiAKIAljbWQtPmFkdmVydGlzaW5nID0gdHAtPmxpbmtfY29uZmlnLmFkdmVydGlzaW5nOwogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKLQkJY21kLT5zcGVlZCA9IHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfc3BlZWQ7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfc3BlZWQpOwogCQljbWQtPmR1cGxleCA9IHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfZHVwbGV4OwogCX0gZWxzZSB7Ci0JCWNtZC0+c3BlZWQgPSBTUEVFRF9JTlZBTElEOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBTUEVFRF9JTlZBTElEKTsKIAkJY21kLT5kdXBsZXggPSBEVVBMRVhfSU5WQUxJRDsKIAl9CiAJY21kLT5waHlfYWRkcmVzcyA9IHRwLT5waHlfYWRkcjsKQEAgLTk4NDgsOCArOTkxOSw5IEBACiBzdGF0aWMgaW50IHRnM19zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7CiAJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiBzcGVlZCA9IGV0aHRvb2xfY21kX3NwZWVkKGNtZCk7CiAKLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfUEhZTElCKSB7CisJaWYgKHRnM19mbGFnKHRwLCBVU0VfUEhZTElCKSkgewogCQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwogCQlpZiAoISh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19DT05ORUNURUQpKQogCQkJcmV0dXJuIC1FQUdBSU47CkBAIC05ODk3LDE0ICs5OTY5LDE0IEBACiAJCWNtZC0+YWR2ZXJ0aXNpbmcgJj0gbWFzazsKIAl9IGVsc2UgewogCQlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfQU5ZX1NFUkRFUykgewotCQkJaWYgKGNtZC0+c3BlZWQgIT0gU1BFRURfMTAwMCkKKwkJCWlmIChzcGVlZCAhPSBTUEVFRF8xMDAwKQogCQkJCXJldHVybiAtRUlOVkFMOwogCiAJCQlpZiAoY21kLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0gZWxzZSB7Ci0JCQlpZiAoY21kLT5zcGVlZCAhPSBTUEVFRF8xMDAgJiYKLQkJCSAgICBjbWQtPnNwZWVkICE9IFNQRUVEXzEwKQorCQkJaWYgKHNwZWVkICE9IFNQRUVEXzEwMCAmJgorCQkJICAgIHNwZWVkICE9IFNQRUVEXzEwKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQpAQCAtOTkxOSw3ICs5OTkxLDcgQEAKIAkJdHAtPmxpbmtfY29uZmlnLmR1cGxleCA9IERVUExFWF9JTlZBTElEOwogCX0gZWxzZSB7CiAJCXRwLT5saW5rX2NvbmZpZy5hZHZlcnRpc2luZyA9IDA7Ci0JCXRwLT5saW5rX2NvbmZpZy5zcGVlZCA9IGNtZC0+c3BlZWQ7CisJCXRwLT5saW5rX2NvbmZpZy5zcGVlZCA9IHNwZWVkOwogCQl0cC0+bGlua19jb25maWcuZHVwbGV4ID0gY21kLT5kdXBsZXg7CiAJfQogCkBAIC05OTQ5LDE0ICsxMDAyMSwxMiBAQAogewogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWlmICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1dPTF9DQVApICYmCi0JICAgIGRldmljZV9jYW5fd2FrZXVwKCZ0cC0+cGRldi0+ZGV2KSkKKwlpZiAodGczX2ZsYWcodHAsIFdPTF9DQVApICYmIGRldmljZV9jYW5fd2FrZXVwKCZ0cC0+cGRldi0+ZGV2KSkKIAkJd29sLT5zdXBwb3J0ZWQgPSBXQUtFX01BR0lDOwogCWVsc2UKIAkJd29sLT5zdXBwb3J0ZWQgPSAwOwogCXdvbC0+d29sb3B0cyA9IDA7Ci0JaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfV09MX0VOQUJMRSkgJiYKLQkgICAgZGV2aWNlX2Nhbl93YWtldXAoJnRwLT5wZGV2LT5kZXYpKQorCWlmICh0ZzNfZmxhZyh0cCwgV09MX0VOQUJMRSkgJiYgZGV2aWNlX2Nhbl93YWtldXAoJnRwLT5wZGV2LT5kZXYpKQogCQl3b2wtPndvbG9wdHMgPSBXQUtFX01BR0lDOwogCW1lbXNldCgmd29sLT5zb3Bhc3MsIDAsIHNpemVvZih3b2wtPnNvcGFzcykpOwogfQpAQCAtOTk2OSwxOSArMTAwMzksMTggQEAKIAlpZiAod29sLT53b2xvcHRzICYgfldBS0VfTUFHSUMpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmICgod29sLT53b2xvcHRzICYgV0FLRV9NQUdJQykgJiYKLQkgICAgISgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1dPTF9DQVApICYmIGRldmljZV9jYW5fd2FrZXVwKGRwKSkpCisJICAgICEodGczX2ZsYWcodHAsIFdPTF9DQVApICYmIGRldmljZV9jYW5fd2FrZXVwKGRwKSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKGRwLCB3b2wtPndvbG9wdHMgJiBXQUtFX01BR0lDKTsKIAogCXNwaW5fbG9ja19iaCgmdHAtPmxvY2spOwogCWlmIChkZXZpY2VfbWF5X3dha2V1cChkcCkpCi0JCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfV09MX0VOQUJMRTsKKwkJdGczX2ZsYWdfc2V0KHRwLCBXT0xfRU5BQkxFKTsKIAllbHNlCi0JCXRwLT50ZzNfZmxhZ3MgJj0gflRHM19GTEFHX1dPTF9FTkFCTEU7CisJCXRnM19mbGFnX2NsZWFyKHRwLCBXT0xfRU5BQkxFKTsKIAlzcGluX3VubG9ja19iaCgmdHAtPmxvY2spOwogCi0KIAlyZXR1cm4gMDsKIH0KIApAQCAtOTk5NywzMyArMTAwNjYsNiBAQAogCXRwLT5tc2dfZW5hYmxlID0gdmFsdWU7CiB9CiAKLXN0YXRpYyBpbnQgdGczX3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHZhbHVlKQotewotCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVFNPX0NBUEFCTEUpKSB7Ci0JCWlmICh2YWx1ZSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9JUFY2X0NTVU0pICYmCi0JICAgICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9IV19UU09fMikgfHwKLQkgICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX1RTT18zKSkpIHsKLQkJaWYgKHZhbHVlKSB7Ci0JCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKLQkJCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9IV19UU09fMykgfHwKLQkJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc2MSB8fAotCQkJICAgIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NCAmJgotCQkJICAgICBHRVRfQ0hJUF9SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQ0hJUFJFVl81Nzg0X0FYKSB8fAotCQkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg1IHx8Ci0JCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzgwKQotCQkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU09fRUNOOwotCQl9IGVsc2UKLQkJCWRldi0+ZmVhdHVyZXMgJj0gfihORVRJRl9GX1RTTzYgfCBORVRJRl9GX1RTT19FQ04pOwotCX0KLQlyZXR1cm4gZXRodG9vbF9vcF9zZXRfdHNvKGRldiwgdmFsdWUpOwotfQotCiBzdGF0aWMgaW50IHRnM19ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTAwMzUsNyArMTAwNzcsNyBAQAogCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19QSFlfU0VSREVTKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1VTRV9QSFlMSUIpIHsKKwlpZiAodGczX2ZsYWcodHAsIFVTRV9QSFlMSUIpKSB7CiAJCWlmICghKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0NPTk5FQ1RFRCkpCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJciA9IHBoeV9zdGFydF9hbmVnKHRwLT5tZGlvX2J1cy0+cGh5X21hcFtURzNfUEhZX01JSV9BRERSXSk7CkBAIC0xMDA2NCw3ICsxMDEwNiw3IEBACiAKIAllcmluZy0+cnhfbWF4X3BlbmRpbmcgPSB0cC0+cnhfc3RkX3JpbmdfbWFzazsKIAllcmluZy0+cnhfbWluaV9tYXhfcGVuZGluZyA9IDA7Ci0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19KVU1CT19SSU5HX0VOQUJMRSkKKwlpZiAodGczX2ZsYWcodHAsIEpVTUJPX1JJTkdfRU5BQkxFKSkKIAkJZXJpbmctPnJ4X2p1bWJvX21heF9wZW5kaW5nID0gdHAtPnJ4X2ptYl9yaW5nX21hc2s7CiAJZWxzZQogCQllcmluZy0+cnhfanVtYm9fbWF4X3BlbmRpbmcgPSAwOwpAQCAtMTAwNzMsNyArMTAxMTUsNyBAQAogCiAJZXJpbmctPnJ4X3BlbmRpbmcgPSB0cC0+cnhfcGVuZGluZzsKIAllcmluZy0+cnhfbWluaV9wZW5kaW5nID0gMDsKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0pVTUJPX1JJTkdfRU5BQkxFKQorCWlmICh0ZzNfZmxhZyh0cCwgSlVNQk9fUklOR19FTkFCTEUpKQogCQllcmluZy0+cnhfanVtYm9fcGVuZGluZyA9IHRwLT5yeF9qdW1ib19wZW5kaW5nOwogCWVsc2UKIAkJZXJpbmctPnJ4X2p1bWJvX3BlbmRpbmcgPSAwOwpAQCAtMTAwOTAsNyArMTAxMzIsNyBAQAogCSAgICAoZXJpbmctPnJ4X2p1bWJvX3BlbmRpbmcgPiB0cC0+cnhfam1iX3JpbmdfbWFzaykgfHwKIAkgICAgKGVyaW5nLT50eF9wZW5kaW5nID4gVEczX1RYX1JJTkdfU0laRSAtIDEpIHx8CiAJICAgIChlcmluZy0+dHhfcGVuZGluZyA8PSBNQVhfU0tCX0ZSQUdTKSB8fAotCSAgICAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVFNPX0JVRykgJiYKKwkgICAgKHRnM19mbGFnKHRwLCBUU09fQlVHKSAmJgogCSAgICAgKGVyaW5nLT50eF9wZW5kaW5nIDw9IChNQVhfU0tCX0ZSQUdTICogMykpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTEwMTA0LDcgKzEwMTQ2LDcgQEAKIAogCXRwLT5yeF9wZW5kaW5nID0gZXJpbmctPnJ4X3BlbmRpbmc7CiAKLQlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfTUFYX1JYUEVORF82NCkgJiYKKwlpZiAodGczX2ZsYWcodHAsIE1BWF9SWFBFTkRfNjQpICYmCiAJICAgIHRwLT5yeF9wZW5kaW5nID4gNjMpCiAJCXRwLT5yeF9wZW5kaW5nID0gNjM7CiAJdHAtPnJ4X2p1bWJvX3BlbmRpbmcgPSBlcmluZy0+cnhfanVtYm9fcGVuZGluZzsKQEAgLTEwMTMxLDcgKzEwMTczLDcgQEAKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAKLQllcGF1c2UtPmF1dG9uZWcgPSAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1BBVVNFX0FVVE9ORUcpICE9IDA7CisJZXBhdXNlLT5hdXRvbmVnID0gISF0ZzNfZmxhZyh0cCwgUEFVU0VfQVVUT05FRyk7CiAKIAlpZiAodHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9mbG93Y3RybCAmIEZMT1dfQ1RSTF9SWCkKIAkJZXBhdXNlLT5yeF9wYXVzZSA9IDE7CkBAIC0xMDE0OSw3ICsxMDE5MSw3IEBACiAJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBlcnIgPSAwOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfVVNFX1BIWUxJQikgeworCWlmICh0ZzNfZmxhZyh0cCwgVVNFX1BIWUxJQikpIHsKIAkJdTMyIG5ld2FkdjsKIAkJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKIApAQCAtMTAxNzcsOSArMTAyMTksOSBAQAogCQkJbmV3YWR2ID0gMDsKIAogCQlpZiAoZXBhdXNlLT5hdXRvbmVnKQotCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19QQVVTRV9BVVRPTkVHOworCQkJdGczX2ZsYWdfc2V0KHRwLCBQQVVTRV9BVVRPTkVHKTsKIAkJZWxzZQotCQkJdHAtPnRnM19mbGFncyAmPSB+VEczX0ZMQUdfUEFVU0VfQVVUT05FRzsKKwkJCXRnM19mbGFnX2NsZWFyKHRwLCBQQVVTRV9BVVRPTkVHKTsKIAogCQlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfQ09OTkVDVEVEKSB7CiAJCQl1MzIgb2xkYWR2ID0gcGh5ZGV2LT5hZHZlcnRpc2luZyAmCkBAIC0xMDIyMSw5ICsxMDI2Myw5IEBACiAJCXRnM19mdWxsX2xvY2sodHAsIGlycV9zeW5jKTsKIAogCQlpZiAoZXBhdXNlLT5hdXRvbmVnKQotCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19QQVVTRV9BVVRPTkVHOworCQkJdGczX2ZsYWdfc2V0KHRwLCBQQVVTRV9BVVRPTkVHKTsKIAkJZWxzZQotCQkJdHAtPnRnM19mbGFncyAmPSB+VEczX0ZMQUdfUEFVU0VfQVVUT05FRzsKKwkJCXRnM19mbGFnX2NsZWFyKHRwLCBQQVVTRV9BVVRPTkVHKTsKIAkJaWYgKGVwYXVzZS0+cnhfcGF1c2UpCiAJCQl0cC0+bGlua19jb25maWcuZmxvd2N0cmwgfD0gRkxPV19DVFJMX1JYOwogCQllbHNlCkBAIC0xMDI0Niw1MCArMTAyODgsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB1MzIgdGczX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXJldHVybiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1JYX0NIRUNLU1VNUykgIT0gMDsKLX0KLQotc3RhdGljIGludCB0ZzNfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19CUk9LRU5fQ0hFQ0tTVU1TKSB7Ci0JCWlmIChkYXRhICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc3Bpbl9sb2NrX2JoKCZ0cC0+bG9jayk7Ci0JaWYgKGRhdGEpCi0JCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfUlhfQ0hFQ0tTVU1TOwotCWVsc2UKLQkJdHAtPnRnM19mbGFncyAmPSB+VEczX0ZMQUdfUlhfQ0hFQ0tTVU1TOwotCXNwaW5fdW5sb2NrX2JoKCZ0cC0+bG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB0ZzNfc2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19CUk9LRU5fQ0hFQ0tTVU1TKSB7Ci0JCWlmIChkYXRhICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTc1NV9QTFVTKQotCQlldGh0b29sX29wX3NldF90eF9pcHY2X2NzdW0oZGV2LCBkYXRhKTsKLQllbHNlCi0JCWV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0oZGV2LCBkYXRhKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHRnM19nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3NldCkKIHsKIAlzd2l0Y2ggKHNzZXQpIHsKQEAgLTEwMzE3LDM1ICsxMDMxNSwzOCBAQAogCX0KIH0KIAotc3RhdGljIGludCB0ZzNfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3N0YXRpYyBpbnQgdGczX3NldF9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgZW51bSBldGh0b29sX3BoeXNfaWRfc3RhdGUgc3RhdGUpCiB7CiAJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpOwogCiAJaWYgKCFuZXRpZl9ydW5uaW5nKHRwLT5kZXYpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAotCWlmIChkYXRhID09IDApCi0JCWRhdGEgPSBVSU5UX01BWCAvIDI7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgRVRIVE9PTF9JRF9BQ1RJVkU6CisJCXJldHVybiAxOwkvKiBjeWNsZSBvbi9vZmYgb25jZSBwZXIgc2Vjb25kICovCiAKLQlmb3IgKGkgPSAwOyBpIDwgKGRhdGEgKiAyKTsgaSsrKSB7Ci0JCWlmICgoaSAlIDIpID09IDApCi0JCQl0dzMyKE1BQ19MRURfQ1RSTCwgTEVEX0NUUkxfTE5LTEVEX09WRVJSSURFIHwKLQkJCQkJICAgTEVEX0NUUkxfMTAwME1CUFNfT04gfAotCQkJCQkgICBMRURfQ1RSTF8xMDBNQlBTX09OIHwKLQkJCQkJICAgTEVEX0NUUkxfMTBNQlBTX09OIHwKLQkJCQkJICAgTEVEX0NUUkxfVFJBRkZJQ19PVkVSUklERSB8Ci0JCQkJCSAgIExFRF9DVFJMX1RSQUZGSUNfQkxJTksgfAotCQkJCQkgICBMRURfQ1RSTF9UUkFGRklDX0xFRCk7CisJY2FzZSBFVEhUT09MX0lEX09OOgorCQl0dzMyKE1BQ19MRURfQ1RSTCwgTEVEX0NUUkxfTE5LTEVEX09WRVJSSURFIHwKKwkJICAgICBMRURfQ1RSTF8xMDAwTUJQU19PTiB8CisJCSAgICAgTEVEX0NUUkxfMTAwTUJQU19PTiB8CisJCSAgICAgTEVEX0NUUkxfMTBNQlBTX09OIHwKKwkJICAgICBMRURfQ1RSTF9UUkFGRklDX09WRVJSSURFIHwKKwkJICAgICBMRURfQ1RSTF9UUkFGRklDX0JMSU5LIHwKKwkJICAgICBMRURfQ1RSTF9UUkFGRklDX0xFRCk7CisJCWJyZWFrOwogCi0JCWVsc2UKLQkJCXR3MzIoTUFDX0xFRF9DVFJMLCBMRURfQ1RSTF9MTktMRURfT1ZFUlJJREUgfAotCQkJCQkgICBMRURfQ1RSTF9UUkFGRklDX09WRVJSSURFKTsKKwljYXNlIEVUSFRPT0xfSURfT0ZGOgorCQl0dzMyKE1BQ19MRURfQ1RSTCwgTEVEX0NUUkxfTE5LTEVEX09WRVJSSURFIHwKKwkJICAgICBMRURfQ1RSTF9UUkFGRklDX09WRVJSSURFKTsKKwkJYnJlYWs7CiAKLQkJaWYgKG1zbGVlcF9pbnRlcnJ1cHRpYmxlKDUwMCkpCi0JCQlicmVhazsKKwljYXNlIEVUSFRPT0xfSURfSU5BQ1RJVkU6CisJCXR3MzIoTUFDX0xFRF9DVFJMLCB0cC0+bGVkX2N0cmwpOworCQlicmVhazsKIAl9Ci0JdHczMihNQUNfTEVEX0NUUkwsIHRwLT5sZWRfY3RybCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTAzNTYsNiArMTAzNTcsODAgQEAKIAltZW1jcHkodG1wX3N0YXRzLCB0ZzNfZ2V0X2VzdGF0cyh0cCksIHNpemVvZih0cC0+ZXN0YXRzKSk7CiB9CiAKK3N0YXRpYyBfX2JlMzIgKiB0ZzNfdnBkX3JlYWRibG9jayhzdHJ1Y3QgdGczICp0cCkKK3sKKwlpbnQgaTsKKwlfX2JlMzIgKmJ1ZjsKKwl1MzIgb2Zmc2V0ID0gMCwgbGVuID0gMDsKKwl1MzIgbWFnaWMsIHZhbDsKKworCWlmICh0ZzNfZmxhZyh0cCwgTk9fTlZSQU0pIHx8IHRnM19udnJhbV9yZWFkKHRwLCAwLCAmbWFnaWMpKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChtYWdpYyA9PSBURzNfRUVQUk9NX01BR0lDKSB7CisJCWZvciAob2Zmc2V0ID0gVEczX05WTV9ESVJfU1RBUlQ7CisJCSAgICAgb2Zmc2V0IDwgVEczX05WTV9ESVJfRU5EOworCQkgICAgIG9mZnNldCArPSBURzNfTlZNX0RJUkVOVF9TSVpFKSB7CisJCQlpZiAodGczX252cmFtX3JlYWQodHAsIG9mZnNldCwgJnZhbCkpCisJCQkJcmV0dXJuIE5VTEw7CisKKwkJCWlmICgodmFsID4+IFRHM19OVk1fRElSVFlQRV9TSElGVCkgPT0KKwkJCSAgICBURzNfTlZNX0RJUlRZUEVfRVhUVlBEKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKG9mZnNldCAhPSBURzNfTlZNX0RJUl9FTkQpIHsKKwkJCWxlbiA9ICh2YWwgJiBURzNfTlZNX0RJUlRZUEVfTEVOTVNLKSAqIDQ7CisJCQlpZiAodGczX252cmFtX3JlYWQodHAsIG9mZnNldCArIDQsICZvZmZzZXQpKQorCQkJCXJldHVybiBOVUxMOworCisJCQlvZmZzZXQgPSB0ZzNfbnZyYW1fbG9naWNhbF9hZGRyKHRwLCBvZmZzZXQpOworCQl9CisJfQorCisJaWYgKCFvZmZzZXQgfHwgIWxlbikgeworCQlvZmZzZXQgPSBURzNfTlZNX1ZQRF9PRkY7CisJCWxlbiA9IFRHM19OVk1fVlBEX0xFTjsKKwl9CisKKwlidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChtYWdpYyA9PSBURzNfRUVQUk9NX01BR0lDKSB7CisJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkgeworCQkJLyogVGhlIGRhdGEgaXMgaW4gbGl0dGxlLWVuZGlhbiBmb3JtYXQgaW4gTlZSQU0uCisJCQkgKiBVc2UgdGhlIGJpZy1lbmRpYW4gcmVhZCByb3V0aW5lcyB0byBwcmVzZXJ2ZQorCQkJICogdGhlIGJ5dGUgb3JkZXIgYXMgaXQgZXhpc3RzIGluIE5WUkFNLgorCQkJICovCisJCQlpZiAodGczX252cmFtX3JlYWRfYmUzMih0cCwgb2Zmc2V0ICsgaSwgJmJ1ZltpLzRdKSkKKwkJCQlnb3RvIGVycm9yOworCQl9CisJfSBlbHNlIHsKKwkJdTggKnB0cjsKKwkJc3NpemVfdCBjbnQ7CisJCXVuc2lnbmVkIGludCBwb3MgPSAwOworCisJCXB0ciA9ICh1OCAqKSZidWZbMF07CisJCWZvciAoaSA9IDA7IHBvcyA8IGxlbiAmJiBpIDwgMzsgaSsrLCBwb3MgKz0gY250LCBwdHIgKz0gY250KSB7CisJCQljbnQgPSBwY2lfcmVhZF92cGQodHAtPnBkZXYsIHBvcywKKwkJCQkJICAgbGVuIC0gcG9zLCBwdHIpOworCQkJaWYgKGNudCA9PSAtRVRJTUVET1VUIHx8IGNudCA9PSAtRUlOVFIpCisJCQkJY250ID0gMDsKKwkJCWVsc2UgaWYgKGNudCA8IDApCisJCQkJZ290byBlcnJvcjsKKwkJfQorCQlpZiAocG9zICE9IGxlbikKKwkJCWdvdG8gZXJyb3I7CisJfQorCisJcmV0dXJuIGJ1ZjsKKworZXJyb3I6CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gTlVMTDsKK30KKwogI2RlZmluZSBOVlJBTV9URVNUX1NJWkUgMHgxMDAKICNkZWZpbmUgTlZSQU1fU0VMRkJPT1RfRk9STUFUMV8wX1NJWkUJMHgxNAogI2RlZmluZSBOVlJBTV9TRUxGQk9PVF9GT1JNQVQxXzJfU0laRQkweDE4CkBAIC0xMDM2OSw3ICsxMDQ0NCw3IEBACiAJX19iZTMyICpidWY7CiAJaW50IGksIGosIGssIGVyciA9IDAsIHNpemU7CiAKLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19OT19OVlJBTSkKKwlpZiAodGczX2ZsYWcodHAsIE5PX05WUkFNKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAodGczX252cmFtX3JlYWQodHAsIDAsICZtYWdpYykgIT0gMCkKQEAgLTEwNDk1LDE0ICsxMDU3MCwxMSBAQAogCWlmIChjc3VtICE9IGxlMzJfdG9fY3B1KGJ1ZlsweGZjLzRdKSkKIAkJZ290byBvdXQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgVEczX05WTV9WUERfTEVOOyBpICs9IDQpIHsKLQkJLyogVGhlIGRhdGEgaXMgaW4gbGl0dGxlLWVuZGlhbiBmb3JtYXQgaW4gTlZSQU0uCi0JCSAqIFVzZSB0aGUgYmlnLWVuZGlhbiByZWFkIHJvdXRpbmVzIHRvIHByZXNlcnZlCi0JCSAqIHRoZSBieXRlIG9yZGVyIGFzIGl0IGV4aXN0cyBpbiBOVlJBTS4KLQkJICovCi0JCWlmICh0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBURzNfTlZNX1ZQRF9PRkYgKyBpLCAmYnVmW2kvNF0pKQotCQkJZ290byBvdXQ7Ci0JfQorCWtmcmVlKGJ1Zik7CisKKwlidWYgPSB0ZzNfdnBkX3JlYWRibG9jayh0cCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOwogCiAJaSA9IHBjaV92cGRfZmluZF90YWcoKHU4ICopYnVmLCAwLCBURzNfTlZNX1ZQRF9MRU4sCiAJCQkgICAgIFBDSV9WUERfTFJEVF9ST19EQVRBKTsKQEAgLTEwNzE0LDkgKzEwNzg2LDkgQEAKIAl9OwogCiAJaXNfNTcwNSA9IGlzXzU3NTAgPSAwOwotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykgeworCWlmICh0ZzNfZmxhZyh0cCwgNTcwNV9QTFVTKSkgewogCQlpc181NzA1ID0gMTsKLQkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKQorCQlpZiAodGczX2ZsYWcodHAsIDU3NTBfUExVUykpCiAJCQlpc181NzUwID0gMTsKIAl9CiAKQEAgLTEwNzI3LDcgKzEwNzk5LDcgQEAKIAkJaWYgKCFpc181NzA1ICYmIChyZWdfdGJsW2ldLmZsYWdzICYgVEczX0ZMXzU3MDUpKQogCQkJY29udGludWU7CiAKLQkJaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0lTXzU3ODgpICYmCisJCWlmICh0ZzNfZmxhZyh0cCwgSVNfNTc4OCkgJiYKIAkJICAgIChyZWdfdGJsW2ldLmZsYWdzICYgVEczX0ZMX05PVF81Nzg4KSkKIAkJCWNvbnRpbnVlOwogCkBAIC0xMDg1MCwxNiArMTA5MjIsMTUgQEAKIAlpbnQgZXJyID0gMDsKIAlpbnQgaTsKIAotCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNyB8fAotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxOSkKKwlpZiAodGczX2ZsYWcodHAsIDU3MTdfUExVUykpCiAJCW1lbV90YmwgPSBtZW1fdGJsXzU3MTc7CiAJZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzY1KQogCQltZW1fdGJsID0gbWVtX3RibF81Nzc2NTsKLQllbHNlIGlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3NTVfUExVUykKKwllbHNlIGlmICh0ZzNfZmxhZyh0cCwgNTc1NV9QTFVTKSkKIAkJbWVtX3RibCA9IG1lbV90YmxfNTc1NTsKIAllbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikKIAkJbWVtX3RibCA9IG1lbV90YmxfNTkwNjsKLQllbHNlIGlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykKKwllbHNlIGlmICh0ZzNfZmxhZyh0cCwgNTcwNV9QTFVTKSkKIAkJbWVtX3RibCA9IG1lbV90YmxfNTcwNTsKIAllbHNlCiAJCW1lbV90YmwgPSBtZW1fdGJsXzU3MHg7CkBAIC0xMDg3NSwxMSArMTA5NDYsMzUgQEAKIAogI2RlZmluZSBURzNfTUFDX0xPT1BCQUNLCTAKICNkZWZpbmUgVEczX1BIWV9MT09QQkFDSwkxCisjZGVmaW5lIFRHM19UU09fTE9PUEJBQ0sJMgogCi1zdGF0aWMgaW50IHRnM19ydW5fbG9vcGJhY2soc3RydWN0IHRnMyAqdHAsIGludCBsb29wYmFja19tb2RlKQorI2RlZmluZSBURzNfVFNPX01TUwkJNTAwCisKKyNkZWZpbmUgVEczX1RTT19JUF9IRFJfTEVOCTIwCisjZGVmaW5lIFRHM19UU09fVENQX0hEUl9MRU4JMjAKKyNkZWZpbmUgVEczX1RTT19UQ1BfT1BUX0xFTgkxMgorCitzdGF0aWMgY29uc3QgdTggdGczX3Rzb19oZWFkZXJbXSA9IHsKKzB4MDgsIDB4MDAsCisweDQ1LCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwKKzB4NDAsIDB4MDYsIDB4MDAsIDB4MDAsCisweDBhLCAweDAwLCAweDAwLCAweDAxLAorMHgwYSwgMHgwMCwgMHgwMCwgMHgwMiwKKzB4MGQsIDB4MDAsIDB4ZTAsIDB4MDAsCisweDAwLCAweDAwLCAweDAxLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwKKzB4ODAsIDB4MTAsIDB4MTAsIDB4MDAsCisweDE0LCAweDA5LCAweDAwLCAweDAwLAorMHgwMSwgMHgwMSwgMHgwOCwgMHgwYSwKKzB4MTEsIDB4MTEsIDB4MTEsIDB4MTEsCisweDExLCAweDExLCAweDExLCAweDExLAorfTsKKworc3RhdGljIGludCB0ZzNfcnVuX2xvb3BiYWNrKHN0cnVjdCB0ZzMgKnRwLCB1MzIgcGt0c3osIGludCBsb29wYmFja19tb2RlKQogewogCXUzMiBtYWNfbW9kZSwgcnhfc3RhcnRfaWR4LCByeF9pZHgsIHR4X2lkeCwgb3BhcXVlX2tleTsKLQl1MzIgZGVzY19pZHgsIGNvYWxfbm93OworCXUzMiBiYXNlX2ZsYWdzID0gMCwgbXNzID0gMCwgZGVzY19pZHgsIGNvYWxfbm93LCBkYXRhX29mZiwgdmFsOwogCXN0cnVjdCBza19idWZmICpza2IsICpyeF9za2I7CiAJdTggKnR4X2RhdGE7CiAJZG1hX2FkZHJfdCBtYXA7CkBAIC0xMDg5MSw5ICsxMDk4Niw5IEBACiAJdG5hcGkgPSAmdHAtPm5hcGlbMF07CiAJcm5hcGkgPSAmdHAtPm5hcGlbMF07CiAJaWYgKHRwLT5pcnFfY250ID4gMSkgewotCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfUlNTKQorCQlpZiAodGczX2ZsYWcodHAsIEVOQUJMRV9SU1MpKQogCQkJcm5hcGkgPSAmdHAtPm5hcGlbMV07Ci0JCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9UU1MpCisJCWlmICh0ZzNfZmxhZyh0cCwgRU5BQkxFX1RTUykpCiAJCQl0bmFwaSA9ICZ0cC0+bmFwaVsxXTsKIAl9CiAJY29hbF9ub3cgPSB0bmFwaS0+Y29hbF9ub3cgfCBybmFwaS0+Y29hbF9ub3c7CkBAIC0xMDkwNSwyMiArMTEwMDAsMjAgQEAKIAkJICogYWxsIG5ld2VyIEFTSUMgcmV2aXNpb25zLgogCQkgKi8KIAkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzgwIHx8Ci0JCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0NQTVVfUFJFU0VOVCkpCisJCSAgICB0ZzNfZmxhZyh0cCwgQ1BNVV9QUkVTRU5UKSkKIAkJCXJldHVybiAwOwogCiAJCW1hY19tb2RlID0gdHAtPm1hY19tb2RlICYKIAkJCSAgIH4oTUFDX01PREVfUE9SVF9NT0RFX01BU0sgfCBNQUNfTU9ERV9IQUxGX0RVUExFWCk7CiAJCW1hY19tb2RlIHw9IE1BQ19NT0RFX1BPUlRfSU5UX0xQQkFDSzsKLQkJaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKQorCQlpZiAoIXRnM19mbGFnKHRwLCA1NzA1X1BMVVMpKQogCQkJbWFjX21vZGUgfD0gTUFDX01PREVfTElOS19QT0xBUklUWTsKIAkJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHXzEwXzEwMF9PTkxZKQogCQkJbWFjX21vZGUgfD0gTUFDX01PREVfUE9SVF9NT0RFX01JSTsKIAkJZWxzZQogCQkJbWFjX21vZGUgfD0gTUFDX01PREVfUE9SVF9NT0RFX0dNSUk7CiAJCXR3MzIoTUFDX01PREUsIG1hY19tb2RlKTsKLQl9IGVsc2UgaWYgKGxvb3BiYWNrX21vZGUgPT0gVEczX1BIWV9MT09QQkFDSykgewotCQl1MzIgdmFsOwotCisJfSBlbHNlIHsKIAkJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0ZFVCkgewogCQkJdGczX3BoeV9mZXRfdG9nZ2xlX2FwZCh0cCwgZmFsc2UpOwogCQkJdmFsID0gQk1DUl9MT09QQkFDSyB8IEJNQ1JfRlVMTERQTFggfCBCTUNSX1NQRUVEMTAwOwpAQCAtMTA5NjgsMTMgKzExMDYxLDExIEBACiAJCQkJYnJlYWs7CiAJCQltZGVsYXkoMSk7CiAJCX0KLQl9IGVsc2UgewotCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAllcnIgPSAtRUlPOwogCi0JdHhfbGVuID0gMTUxNDsKKwl0eF9sZW4gPSBwa3RzejsKIAlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKHRwLT5kZXYsIHR4X2xlbik7CiAJaWYgKCFza2IpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTA5ODMsOSArMTEwNzQsNTggQEAKIAltZW1jcHkodHhfZGF0YSwgdHAtPmRldi0+ZGV2X2FkZHIsIDYpOwogCW1lbXNldCh0eF9kYXRhICsgNiwgMHgwLCA4KTsKIAotCXR3MzIoTUFDX1JYX01UVV9TSVpFLCB0eF9sZW4gKyA0KTsKKwl0dzMyKE1BQ19SWF9NVFVfU0laRSwgdHhfbGVuICsgRVRIX0ZDU19MRU4pOwogCi0JZm9yIChpID0gMTQ7IGkgPCB0eF9sZW47IGkrKykKKwlpZiAobG9vcGJhY2tfbW9kZSA9PSBURzNfVFNPX0xPT1BCQUNLKSB7CisJCXN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKSZ0eF9kYXRhW0VUSF9ITEVOXTsKKworCQl1MzIgaGRyX2xlbiA9IFRHM19UU09fSVBfSERSX0xFTiArIFRHM19UU09fVENQX0hEUl9MRU4gKworCQkJICAgICAgVEczX1RTT19UQ1BfT1BUX0xFTjsKKworCQltZW1jcHkodHhfZGF0YSArIEVUSF9BTEVOICogMiwgdGczX3Rzb19oZWFkZXIsCisJCSAgICAgICBzaXplb2YodGczX3Rzb19oZWFkZXIpKTsKKwkJbXNzID0gVEczX1RTT19NU1M7CisKKwkJdmFsID0gdHhfbGVuIC0gRVRIX0FMRU4gKiAyIC0gc2l6ZW9mKHRnM190c29faGVhZGVyKTsKKwkJbnVtX3BrdHMgPSBESVZfUk9VTkRfVVAodmFsLCBURzNfVFNPX01TUyk7CisKKwkJLyogU2V0IHRoZSB0b3RhbCBsZW5ndGggZmllbGQgaW4gdGhlIElQIGhlYWRlciAqLworCQlpcGgtPnRvdF9sZW4gPSBodG9ucygodTE2KShtc3MgKyBoZHJfbGVuKSk7CisKKwkJYmFzZV9mbGFncyA9IChUWERfRkxBR19DUFVfUFJFX0RNQSB8CisJCQkgICAgICBUWERfRkxBR19DUFVfUE9TVF9ETUEpOworCisJCWlmICh0ZzNfZmxhZyh0cCwgSFdfVFNPXzEpIHx8CisJCSAgICB0ZzNfZmxhZyh0cCwgSFdfVFNPXzIpIHx8CisJCSAgICB0ZzNfZmxhZyh0cCwgSFdfVFNPXzMpKSB7CisJCQlzdHJ1Y3QgdGNwaGRyICp0aDsKKwkJCXZhbCA9IEVUSF9ITEVOICsgVEczX1RTT19JUF9IRFJfTEVOOworCQkJdGggPSAoc3RydWN0IHRjcGhkciAqKSZ0eF9kYXRhW3ZhbF07CisJCQl0aC0+Y2hlY2sgPSAwOworCQl9IGVsc2UKKwkJCWJhc2VfZmxhZ3MgfD0gVFhEX0ZMQUdfVENQVURQX0NTVU07CisKKwkJaWYgKHRnM19mbGFnKHRwLCBIV19UU09fMykpIHsKKwkJCW1zcyB8PSAoaGRyX2xlbiAmIDB4YykgPDwgMTI7CisJCQlpZiAoaGRyX2xlbiAmIDB4MTApCisJCQkJYmFzZV9mbGFncyB8PSAweDAwMDAwMDEwOworCQkJYmFzZV9mbGFncyB8PSAoaGRyX2xlbiAmIDB4M2UwKSA8PCA1OworCQl9IGVsc2UgaWYgKHRnM19mbGFnKHRwLCBIV19UU09fMikpCisJCQltc3MgfD0gaGRyX2xlbiA8PCA5OworCQllbHNlIGlmICh0ZzNfZmxhZyh0cCwgSFdfVFNPXzEpIHx8CisJCQkgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDUpIHsKKwkJCW1zcyB8PSAoVEczX1RTT19UQ1BfT1BUX0xFTiA8PCA5KTsKKwkJfSBlbHNlIHsKKwkJCWJhc2VfZmxhZ3MgfD0gKFRHM19UU09fVENQX09QVF9MRU4gPDwgMTApOworCQl9CisKKwkJZGF0YV9vZmYgPSBFVEhfQUxFTiAqIDIgKyBzaXplb2YodGczX3Rzb19oZWFkZXIpOworCX0gZWxzZSB7CisJCW51bV9wa3RzID0gMTsKKwkJZGF0YV9vZmYgPSBFVEhfSExFTjsKKwl9CisKKwlmb3IgKGkgPSBkYXRhX29mZjsgaSA8IHR4X2xlbjsgaSsrKQogCQl0eF9kYXRhW2ldID0gKHU4KSAoaSAmIDB4ZmYpOwogCiAJbWFwID0gcGNpX21hcF9zaW5nbGUodHAtPnBkZXYsIHNrYi0+ZGF0YSwgdHhfbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKQEAgLTExMDAxLDEyICsxMTE0MSwxMCBAQAogCiAJcnhfc3RhcnRfaWR4ID0gcm5hcGktPmh3X3N0YXR1cy0+aWR4WzBdLnJ4X3Byb2R1Y2VyOwogCi0JbnVtX3BrdHMgPSAwOwotCi0JdGczX3NldF90eGQodG5hcGksIHRuYXBpLT50eF9wcm9kLCBtYXAsIHR4X2xlbiwgMCwgMSk7CisJdGczX3NldF90eGQodG5hcGksIHRuYXBpLT50eF9wcm9kLCBtYXAsIHR4X2xlbiwKKwkJICAgIGJhc2VfZmxhZ3MsIChtc3MgPDwgMSkgfCAxKTsKIAogCXRuYXBpLT50eF9wcm9kKys7Ci0JbnVtX3BrdHMrKzsKIAogCXR3MzJfdHhfbWJveCh0bmFwaS0+cHJvZG1ib3gsIHRuYXBpLT50eF9wcm9kKTsKIAl0cjMyX21haWxib3godG5hcGktPnByb2RtYm94KTsKQEAgLTExMDM2LDI5ICsxMTE3NCw1NiBAQAogCWlmIChyeF9pZHggIT0gcnhfc3RhcnRfaWR4ICsgbnVtX3BrdHMpCiAJCWdvdG8gb3V0OwogCi0JZGVzYyA9ICZybmFwaS0+cnhfcmNiW3J4X3N0YXJ0X2lkeF07Ci0JZGVzY19pZHggPSBkZXNjLT5vcGFxdWUgJiBSWERfT1BBUVVFX0lOREVYX01BU0s7Ci0Jb3BhcXVlX2tleSA9IGRlc2MtPm9wYXF1ZSAmIFJYRF9PUEFRVUVfUklOR19NQVNLOwotCWlmIChvcGFxdWVfa2V5ICE9IFJYRF9PUEFRVUVfUklOR19TVEQpCi0JCWdvdG8gb3V0OworCXZhbCA9IGRhdGFfb2ZmOworCXdoaWxlIChyeF9pZHggIT0gcnhfc3RhcnRfaWR4KSB7CisJCWRlc2MgPSAmcm5hcGktPnJ4X3JjYltyeF9zdGFydF9pZHgrK107CisJCWRlc2NfaWR4ID0gZGVzYy0+b3BhcXVlICYgUlhEX09QQVFVRV9JTkRFWF9NQVNLOworCQlvcGFxdWVfa2V5ID0gZGVzYy0+b3BhcXVlICYgUlhEX09QQVFVRV9SSU5HX01BU0s7CiAKLQlpZiAoKGRlc2MtPmVycl92bGFuICYgUlhEX0VSUl9NQVNLKSAhPSAwICYmCi0JICAgIChkZXNjLT5lcnJfdmxhbiAhPSBSWERfRVJSX09ERF9OSUJCTEVfUkNWRF9NSUkpKQotCQlnb3RvIG91dDsKLQotCXJ4X2xlbiA9ICgoZGVzYy0+aWR4X2xlbiAmIFJYRF9MRU5fTUFTSykgPj4gUlhEX0xFTl9TSElGVCkgLSA0OwotCWlmIChyeF9sZW4gIT0gdHhfbGVuKQotCQlnb3RvIG91dDsKLQotCXJ4X3NrYiA9IHRwci0+cnhfc3RkX2J1ZmZlcnNbZGVzY19pZHhdLnNrYjsKLQotCW1hcCA9IGRtYV91bm1hcF9hZGRyKCZ0cHItPnJ4X3N0ZF9idWZmZXJzW2Rlc2NfaWR4XSwgbWFwcGluZyk7Ci0JcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHRwLT5wZGV2LCBtYXAsIHJ4X2xlbiwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQotCWZvciAoaSA9IDE0OyBpIDwgdHhfbGVuOyBpKyspIHsKLQkJaWYgKCoocnhfc2tiLT5kYXRhICsgaSkgIT0gKHU4KSAoaSAmIDB4ZmYpKQorCQlpZiAoKGRlc2MtPmVycl92bGFuICYgUlhEX0VSUl9NQVNLKSAhPSAwICYmCisJCSAgICAoZGVzYy0+ZXJyX3ZsYW4gIT0gUlhEX0VSUl9PRERfTklCQkxFX1JDVkRfTUlJKSkKIAkJCWdvdG8gb3V0OworCisJCXJ4X2xlbiA9ICgoZGVzYy0+aWR4X2xlbiAmIFJYRF9MRU5fTUFTSykgPj4gUlhEX0xFTl9TSElGVCkKKwkJCSAtIEVUSF9GQ1NfTEVOOworCisJCWlmIChsb29wYmFja19tb2RlICE9IFRHM19UU09fTE9PUEJBQ0spIHsKKwkJCWlmIChyeF9sZW4gIT0gdHhfbGVuKQorCQkJCWdvdG8gb3V0OworCisJCQlpZiAocGt0c3ogPD0gVEczX1JYX1NURF9ETUFfU1ogLSBFVEhfRkNTX0xFTikgeworCQkJCWlmIChvcGFxdWVfa2V5ICE9IFJYRF9PUEFRVUVfUklOR19TVEQpCisJCQkJCWdvdG8gb3V0OworCQkJfSBlbHNlIHsKKwkJCQlpZiAob3BhcXVlX2tleSAhPSBSWERfT1BBUVVFX1JJTkdfSlVNQk8pCisJCQkJCWdvdG8gb3V0OworCQkJfQorCQl9IGVsc2UgaWYgKChkZXNjLT50eXBlX2ZsYWdzICYgUlhEX0ZMQUdfVENQVURQX0NTVU0pICYmCisJCQkgICAoZGVzYy0+aXBfdGNwX2NzdW0gJiBSWERfVENQQ1NVTV9NQVNLKQorCQkJICAgID4+IFJYRF9UQ1BDU1VNX1NISUZUICE9IDB4ZmZmZikgeworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAob3BhcXVlX2tleSA9PSBSWERfT1BBUVVFX1JJTkdfU1REKSB7CisJCQlyeF9za2IgPSB0cHItPnJ4X3N0ZF9idWZmZXJzW2Rlc2NfaWR4XS5za2I7CisJCQltYXAgPSBkbWFfdW5tYXBfYWRkcigmdHByLT5yeF9zdGRfYnVmZmVyc1tkZXNjX2lkeF0sCisJCQkJCSAgICAgbWFwcGluZyk7CisJCX0gZWxzZSBpZiAob3BhcXVlX2tleSA9PSBSWERfT1BBUVVFX1JJTkdfSlVNQk8pIHsKKwkJCXJ4X3NrYiA9IHRwci0+cnhfam1iX2J1ZmZlcnNbZGVzY19pZHhdLnNrYjsKKwkJCW1hcCA9IGRtYV91bm1hcF9hZGRyKCZ0cHItPnJ4X2ptYl9idWZmZXJzW2Rlc2NfaWR4XSwKKwkJCQkJICAgICBtYXBwaW5nKTsKKwkJfSBlbHNlCisJCQlnb3RvIG91dDsKKworCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUodHAtPnBkZXYsIG1hcCwgcnhfbGVuLAorCQkJCQkgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKworCQlmb3IgKGkgPSBkYXRhX29mZjsgaSA8IHJ4X2xlbjsgaSsrLCB2YWwrKykgeworCQkJaWYgKCoocnhfc2tiLT5kYXRhICsgaSkgIT0gKHU4KSAodmFsICYgMHhmZikpCisJCQkJZ290byBvdXQ7CisJCX0KIAl9CisKIAllcnIgPSAwOwogCiAJLyogdGczX2ZyZWVfcmluZ3Mgd2lsbCB1bm1hcCBhbmQgZnJlZSB0aGUgcnhfc2tiICovCkBAIC0xMTA2NiwxMCArMTEyMzEsMTMgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0jZGVmaW5lIFRHM19NQUNfTE9PUEJBQ0tfRkFJTEVECQkxCi0jZGVmaW5lIFRHM19QSFlfTE9PUEJBQ0tfRkFJTEVECQkyCi0jZGVmaW5lIFRHM19MT09QQkFDS19GQUlMRUQJCShURzNfTUFDX0xPT1BCQUNLX0ZBSUxFRCB8CVwKLQkJCQkJIFRHM19QSFlfTE9PUEJBQ0tfRkFJTEVEKQorI2RlZmluZSBURzNfU1REX0xPT1BCQUNLX0ZBSUxFRAkJMQorI2RlZmluZSBURzNfSk1CX0xPT1BCQUNLX0ZBSUxFRAkJMgorI2RlZmluZSBURzNfVFNPX0xPT1BCQUNLX0ZBSUxFRAkJNAorCisjZGVmaW5lIFRHM19NQUNfTE9PUEJBQ0tfU0hJRlQJCTAKKyNkZWZpbmUgVEczX1BIWV9MT09QQkFDS19TSElGVAkJNAorI2RlZmluZSBURzNfTE9PUEJBQ0tfRkFJTEVECQkweDAwMDAwMDc3CiAKIHN0YXRpYyBpbnQgdGczX3Rlc3RfbG9vcGJhY2soc3RydWN0IHRnMyAqdHApCiB7CkBAIC0xMTA4OCwxMSArMTEyNTYsMjAgQEAKIAkJZ290byBkb25lOwogCX0KIAorCWlmICh0ZzNfZmxhZyh0cCwgRU5BQkxFX1JTUykpIHsKKwkJaW50IGk7CisKKwkJLyogUmVyb3V0ZSBhbGwgcnggcGFja2V0cyB0byB0aGUgMXN0IHF1ZXVlICovCisJCWZvciAoaSA9IE1BQ19SU1NfSU5ESVJfVEJMXzA7CisJCSAgICAgaSA8IE1BQ19SU1NfSU5ESVJfVEJMXzAgKyBURzNfUlNTX0lORElSX1RCTF9TSVpFOyBpICs9IDQpCisJCQl0dzMyKGksIDB4MCk7CisJfQorCiAJLyogVHVybiBvZmYgZ3BoeSBhdXRvcG93ZXJkb3duLiAqLwogCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19FTkFCTEVfQVBEKQogCQl0ZzNfcGh5X3RvZ2dsZV9hcGQodHAsIGZhbHNlKTsKIAotCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfQ1BNVV9QUkVTRU5UKSB7CisJaWYgKHRnM19mbGFnKHRwLCBDUE1VX1BSRVNFTlQpKSB7CiAJCWludCBpOwogCQl1MzIgc3RhdHVzOwogCkBAIC0xMTExOCwxMCArMTEyOTUsMTQgQEAKIAkJCQkgIENQTVVfQ1RSTF9MSU5LX0FXQVJFX01PREUpKTsKIAl9CiAKLQlpZiAodGczX3J1bl9sb29wYmFjayh0cCwgVEczX01BQ19MT09QQkFDSykpCi0JCWVyciB8PSBURzNfTUFDX0xPT1BCQUNLX0ZBSUxFRDsKKwlpZiAodGczX3J1bl9sb29wYmFjayh0cCwgRVRIX0ZSQU1FX0xFTiwgVEczX01BQ19MT09QQkFDSykpCisJCWVyciB8PSBURzNfU1REX0xPT1BCQUNLX0ZBSUxFRCA8PCBURzNfTUFDX0xPT1BCQUNLX1NISUZUOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19DUE1VX1BSRVNFTlQpIHsKKwlpZiAodGczX2ZsYWcodHAsIEpVTUJPX1JJTkdfRU5BQkxFKSAmJgorCSAgICB0ZzNfcnVuX2xvb3BiYWNrKHRwLCA5MDAwICsgRVRIX0hMRU4sIFRHM19NQUNfTE9PUEJBQ0spKQorCQllcnIgfD0gVEczX0pNQl9MT09QQkFDS19GQUlMRUQgPDwgVEczX01BQ19MT09QQkFDS19TSElGVDsKKworCWlmICh0ZzNfZmxhZyh0cCwgQ1BNVV9QUkVTRU5UKSkgewogCQl0dzMyKFRHM19DUE1VX0NUUkwsIGNwbXVjdHJsKTsKIAogCQkvKiBSZWxlYXNlIHRoZSBtdXRleCAqLwpAQCAtMTExMjksOSArMTEzMTAsMTggQEAKIAl9CiAKIAlpZiAoISh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19QSFlfU0VSREVTKSAmJgotCSAgICAhKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfVVNFX1BIWUxJQikpIHsKLQkJaWYgKHRnM19ydW5fbG9vcGJhY2sodHAsIFRHM19QSFlfTE9PUEJBQ0spKQotCQkJZXJyIHw9IFRHM19QSFlfTE9PUEJBQ0tfRkFJTEVEOworCSAgICAhdGczX2ZsYWcodHAsIFVTRV9QSFlMSUIpKSB7CisJCWlmICh0ZzNfcnVuX2xvb3BiYWNrKHRwLCBFVEhfRlJBTUVfTEVOLCBURzNfUEhZX0xPT1BCQUNLKSkKKwkJCWVyciB8PSBURzNfU1REX0xPT1BCQUNLX0ZBSUxFRCA8PAorCQkJICAgICAgIFRHM19QSFlfTE9PUEJBQ0tfU0hJRlQ7CisJCWlmICh0ZzNfZmxhZyh0cCwgVFNPX0NBUEFCTEUpICYmCisJCSAgICB0ZzNfcnVuX2xvb3BiYWNrKHRwLCBFVEhfRlJBTUVfTEVOLCBURzNfVFNPX0xPT1BCQUNLKSkKKwkJCWVyciB8PSBURzNfVFNPX0xPT1BCQUNLX0ZBSUxFRCA8PAorCQkJICAgICAgIFRHM19QSFlfTE9PUEJBQ0tfU0hJRlQ7CisJCWlmICh0ZzNfZmxhZyh0cCwgSlVNQk9fUklOR19FTkFCTEUpICYmCisJCSAgICB0ZzNfcnVuX2xvb3BiYWNrKHRwLCA5MDAwICsgRVRIX0hMRU4sIFRHM19QSFlfTE9PUEJBQ0spKQorCQkJZXJyIHw9IFRHM19KTUJfTE9PUEJBQ0tfRkFJTEVEIDw8CisJCQkgICAgICAgVEczX1BIWV9MT09QQkFDS19TSElGVDsKIAl9CiAKIAkvKiBSZS1lbmFibGUgZ3BoeSBhdXRvcG93ZXJkb3duLiAqLwpAQCAtMTExNzYsNyArMTEzNjYsNyBAQAogCQl0ZzNfaGFsdCh0cCwgUkVTRVRfS0lORF9TVVNQRU5ELCAxKTsKIAkJZXJyID0gdGczX252cmFtX2xvY2sodHApOwogCQl0ZzNfaGFsdF9jcHUodHAsIFJYX0NQVV9CQVNFKTsKLQkJaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKQorCQlpZiAoIXRnM19mbGFnKHRwLCA1NzA1X1BMVVMpKQogCQkJdGczX2hhbHRfY3B1KHRwLCBUWF9DUFVfQkFTRSk7CiAJCWlmICghZXJyKQogCQkJdGczX252cmFtX3VubG9jayh0cCk7CkBAIC0xMTIwNiw3ICsxMTM5Niw3IEBACiAKIAkJdGczX2hhbHQodHAsIFJFU0VUX0tJTkRfU0hVVERPV04sIDEpOwogCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7Ci0JCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0lOSVRfQ09NUExFVEU7CisJCQl0ZzNfZmxhZ19zZXQodHAsIElOSVRfQ09NUExFVEUpOwogCQkJZXJyMiA9IHRnM19yZXN0YXJ0X2h3KHRwLCAxKTsKIAkJCWlmICghZXJyMikKIAkJCQl0ZzNfbmV0aWZfc3RhcnQodHApOwpAQCAtMTEyMjgsNyArMTE0MTgsNyBAQAogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgZXJyOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfVVNFX1BIWUxJQikgeworCWlmICh0ZzNfZmxhZyh0cCwgVVNFX1BIWUxJQikpIHsKIAkJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKIAkJaWYgKCEodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfQ09OTkVDVEVEKSkKIAkJCXJldHVybiAtRUFHQUlOOwpAQCAtMTEyNDcsOSArMTE0MzcsNyBAQAogCQlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfUEhZX1NFUkRFUykKIAkJCWJyZWFrOwkJCS8qIFdlIGhhdmUgbm8gUEhZICovCiAKLQkJaWYgKCh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19MT1dfUE9XRVIpIHx8Ci0JCSAgICAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSAmJgotCQkgICAgICFuZXRpZl9ydW5uaW5nKGRldikpKQorCQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJCXJldHVybiAtRUFHQUlOOwogCiAJCXNwaW5fbG9ja19iaCgmdHAtPmxvY2spOwpAQCAtMTEyNjUsOSArMTE0NTMsNyBAQAogCQlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfUEhZX1NFUkRFUykKIAkJCWJyZWFrOwkJCS8qIFdlIGhhdmUgbm8gUEhZICovCiAKLQkJaWYgKCh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19MT1dfUE9XRVIpIHx8Ci0JCSAgICAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSAmJgotCQkgICAgICFuZXRpZl9ydW5uaW5nKGRldikpKQorCQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJCXJldHVybiAtRUFHQUlOOwogCiAJCXNwaW5fbG9ja19iaCgmdHAtPmxvY2spOwpAQCAtMTEyOTcsNyArMTE0ODMsNyBAQAogCXUzMiBtYXhfcnhjb2FsX3RpY2tfaW50ID0gMCwgbWF4X3R4Y29hbF90aWNrX2ludCA9IDA7CiAJdTMyIG1heF9zdGF0X2NvYWxfdGlja3MgPSAwLCBtaW5fc3RhdF9jb2FsX3RpY2tzID0gMDsKIAotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSkgeworCWlmICghdGczX2ZsYWcodHAsIDU3MDVfUExVUykpIHsKIAkJbWF4X3J4Y29hbF90aWNrX2ludCA9IE1BWF9SWENPQUxfVElDS19JTlQ7CiAJCW1heF90eGNvYWxfdGlja19pbnQgPSBNQVhfVFhDT0FMX1RJQ0tfSU5UOwogCQltYXhfc3RhdF9jb2FsX3RpY2tzID0gTUFYX1NUQVRfQ09BTF9USUNLUzsKQEAgLTExMzY0LDE0ICsxMTU1MCw5IEBACiAJLnNldF9yaW5ncGFyYW0JCT0gdGczX3NldF9yaW5ncGFyYW0sCiAJLmdldF9wYXVzZXBhcmFtCQk9IHRnM19nZXRfcGF1c2VwYXJhbSwKIAkuc2V0X3BhdXNlcGFyYW0JCT0gdGczX3NldF9wYXVzZXBhcmFtLAotCS5nZXRfcnhfY3N1bQkJPSB0ZzNfZ2V0X3J4X2NzdW0sCi0JLnNldF9yeF9jc3VtCQk9IHRnM19zZXRfcnhfY3N1bSwKLQkuc2V0X3R4X2NzdW0JCT0gdGczX3NldF90eF9jc3VtLAotCS5zZXRfc2cJCQk9IGV0aHRvb2xfb3Bfc2V0X3NnLAotCS5zZXRfdHNvCQk9IHRnM19zZXRfdHNvLAogCS5zZWxmX3Rlc3QJCT0gdGczX3NlbGZfdGVzdCwKIAkuZ2V0X3N0cmluZ3MJCT0gdGczX2dldF9zdHJpbmdzLAotCS5waHlzX2lkCQk9IHRnM19waHlzX2lkLAorCS5zZXRfcGh5c19pZAkJPSB0ZzNfc2V0X3BoeXNfaWQsCiAJLmdldF9ldGh0b29sX3N0YXRzCT0gdGczX2dldF9ldGh0b29sX3N0YXRzLAogCS5nZXRfY29hbGVzY2UJCT0gdGczX2dldF9jb2FsZXNjZSwKIAkuc2V0X2NvYWxlc2NlCQk9IHRnM19zZXRfY29hbGVzY2UsCkBAIC0xMTQxNiw4ICsxMTU5Nyw3IEBACiB7CiAJdTMyIHZhbDsKIAotCWlmICgodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19OT19OVlJBTSkgfHwKLQkgICAgdGczX252cmFtX3JlYWQodHAsIDAsICZ2YWwpICE9IDApCisJaWYgKHRnM19mbGFnKHRwLCBOT19OVlJBTSkgfHwgdGczX252cmFtX3JlYWQodHAsIDAsICZ2YWwpICE9IDApCiAJCXJldHVybjsKIAogCS8qIFNlbGZib290IGZvcm1hdCAqLwpAQCAtMTE0NTIsMTkgKzExNjMyLDE5IEBACiAKIAludmNmZzEgPSB0cjMyKE5WUkFNX0NGRzEpOwogCWlmIChudmNmZzEgJiBOVlJBTV9DRkcxX0ZMQVNISUZfRU5BQikgewotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9GTEFTSDsKKwkJdGczX2ZsYWdfc2V0KHRwLCBGTEFTSCk7CiAJfSBlbHNlIHsKIAkJbnZjZmcxICY9IH5OVlJBTV9DRkcxX0NPTVBBVF9CWVBBU1M7CiAJCXR3MzIoTlZSQU1fQ0ZHMSwgbnZjZmcxKTsKIAl9CiAKLQlpZiAoKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzUwKSB8fAotCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzgwX0NMQVNTKSkgeworCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1MCB8fAorCSAgICB0ZzNfZmxhZyh0cCwgNTc4MF9DTEFTUykpIHsKIAkJc3dpdGNoIChudmNmZzEgJiBOVlJBTV9DRkcxX1ZFTkRPUl9NQVNLKSB7CiAJCWNhc2UgRkxBU0hfVkVORE9SX0FUTUVMX0ZMQVNIX0JVRkZFUkVEOgogCQkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfQVRNRUw7CiAJCQl0cC0+bnZyYW1fcGFnZXNpemUgPSBBVE1FTF9BVDQ1REIwWDFCX1BBR0VfU0laRTsKLQkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7CisJCQl0ZzNfZmxhZ19zZXQodHAsIE5WUkFNX0JVRkZFUkVEKTsKIAkJCWJyZWFrOwogCQljYXNlIEZMQVNIX1ZFTkRPUl9BVE1FTF9GTEFTSF9VTkJVRkZFUkVEOgogCQkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfQVRNRUw7CkBAIC0xMTQ3MywxMiArMTE2NTMsMTIgQEAKIAkJY2FzZSBGTEFTSF9WRU5ET1JfQVRNRUxfRUVQUk9NOgogCQkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfQVRNRUw7CiAJCQl0cC0+bnZyYW1fcGFnZXNpemUgPSBBVE1FTF9BVDI0QzUxMl9DSElQX1NJWkU7Ci0JCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOworCQkJdGczX2ZsYWdfc2V0KHRwLCBOVlJBTV9CVUZGRVJFRCk7CiAJCQlicmVhazsKIAkJY2FzZSBGTEFTSF9WRU5ET1JfU1Q6CiAJCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19TVDsKIAkJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IFNUX000NVBFWDBfUEFHRV9TSVpFOwotCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKKwkJCXRnM19mbGFnX3NldCh0cCwgTlZSQU1fQlVGRkVSRUQpOwogCQkJYnJlYWs7CiAJCWNhc2UgRkxBU0hfVkVORE9SX1NBSUZVTjoKIAkJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX1NBSUZVTjsKQEAgLTExNDkzLDcgKzExNjczLDcgQEAKIAl9IGVsc2UgewogCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19BVE1FTDsKIAkJdHAtPm52cmFtX3BhZ2VzaXplID0gQVRNRUxfQVQ0NURCMFgxQl9QQUdFX1NJWkU7Ci0JCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7CisJCXRnM19mbGFnX3NldCh0cCwgTlZSQU1fQlVGRkVSRUQpOwogCX0KIH0KIApAQCAtMTE1MzIsMjkgKzExNzEyLDI5IEBACiAKIAkvKiBOVlJBTSBwcm90ZWN0aW9uIGZvciBUUE0gKi8KIAlpZiAobnZjZmcxICYgKDEgPDwgMjcpKQotCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19QUk9URUNURURfTlZSQU07CisJCXRnM19mbGFnX3NldCh0cCwgUFJPVEVDVEVEX05WUkFNKTsKIAogCXN3aXRjaCAobnZjZmcxICYgTlZSQU1fQ0ZHMV81NzUyVkVORE9SX01BU0spIHsKIAljYXNlIEZMQVNIXzU3NTJWRU5ET1JfQVRNRUxfRUVQUk9NXzY0S0haOgogCWNhc2UgRkxBU0hfNTc1MlZFTkRPUl9BVE1FTF9FRVBST01fMzc2S0haOgogCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19BVE1FTDsKLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKKwkJdGczX2ZsYWdfc2V0KHRwLCBOVlJBTV9CVUZGRVJFRCk7CiAJCWJyZWFrOwogCWNhc2UgRkxBU0hfNTc1MlZFTkRPUl9BVE1FTF9GTEFTSF9CVUZGRVJFRDoKIAkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfQVRNRUw7Ci0JCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7Ci0JCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0ZMQVNIOworCQl0ZzNfZmxhZ19zZXQodHAsIE5WUkFNX0JVRkZFUkVEKTsKKwkJdGczX2ZsYWdfc2V0KHRwLCBGTEFTSCk7CiAJCWJyZWFrOwogCWNhc2UgRkxBU0hfNTc1MlZFTkRPUl9TVF9NNDVQRTEwOgogCWNhc2UgRkxBU0hfNTc1MlZFTkRPUl9TVF9NNDVQRTIwOgogCWNhc2UgRkxBU0hfNTc1MlZFTkRPUl9TVF9NNDVQRTQwOgogCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19TVDsKLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKLQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfRkxBU0g7CisJCXRnM19mbGFnX3NldCh0cCwgTlZSQU1fQlVGRkVSRUQpOworCQl0ZzNfZmxhZ19zZXQodHAsIEZMQVNIKTsKIAkJYnJlYWs7CiAJfQogCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfRkxBU0gpIHsKKwlpZiAodGczX2ZsYWcodHAsIEZMQVNIKSkgewogCQl0ZzNfbnZyYW1fZ2V0X3BhZ2VzaXplKHRwLCBudmNmZzEpOwogCX0gZWxzZSB7CiAJCS8qIEZvciBlZXByb20sIHNldCBwYWdlc2l6ZSB0byBtYXhpbXVtIGVlcHJvbSBzaXplICovCkBAIC0xMTU3Myw3ICsxMTc1Myw3IEBACiAKIAkvKiBOVlJBTSBwcm90ZWN0aW9uIGZvciBUUE0gKi8KIAlpZiAobnZjZmcxICYgKDEgPDwgMjcpKSB7Ci0JCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX1BST1RFQ1RFRF9OVlJBTTsKKwkJdGczX2ZsYWdfc2V0KHRwLCBQUk9URUNURURfTlZSQU0pOwogCQlwcm90ZWN0ID0gMTsKIAl9CiAKQEAgLTExNTg0LDggKzExNzY0LDggQEAKIAljYXNlIEZMQVNIXzU3NTVWRU5ET1JfQVRNRUxfRkxBU0hfMzoKIAljYXNlIEZMQVNIXzU3NTVWRU5ET1JfQVRNRUxfRkxBU0hfNToKIAkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfQVRNRUw7Ci0JCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7Ci0JCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0ZMQVNIOworCQl0ZzNfZmxhZ19zZXQodHAsIE5WUkFNX0JVRkZFUkVEKTsKKwkJdGczX2ZsYWdfc2V0KHRwLCBGTEFTSCk7CiAJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDI2NDsKIAkJaWYgKG52Y2ZnMSA9PSBGTEFTSF81NzU1VkVORE9SX0FUTUVMX0ZMQVNIXzEgfHwKIAkJICAgIG52Y2ZnMSA9PSBGTEFTSF81NzU1VkVORE9SX0FUTUVMX0ZMQVNIXzUpCkBAIC0xMTYwMiw4ICsxMTc4Miw4IEBACiAJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFMjA6CiAJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFNDA6CiAJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX1NUOwotCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOwotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9GTEFTSDsKKwkJdGczX2ZsYWdfc2V0KHRwLCBOVlJBTV9CVUZGRVJFRCk7CisJCXRnM19mbGFnX3NldCh0cCwgRkxBU0gpOwogCQl0cC0+bnZyYW1fcGFnZXNpemUgPSAyNTY7CiAJCWlmIChudmNmZzEgPT0gRkxBU0hfNTc1MlZFTkRPUl9TVF9NNDVQRTEwKQogCQkJdHAtPm52cmFtX3NpemUgPSAocHJvdGVjdCA/CkBAIC0xMTYzMyw3ICsxMTgxMyw3IEBACiAJY2FzZSBGTEFTSF81Nzg3VkVORE9SX01JQ1JPX0VFUFJPTV82NEtIWjoKIAljYXNlIEZMQVNIXzU3ODdWRU5ET1JfTUlDUk9fRUVQUk9NXzM3NktIWjoKIAkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfQVRNRUw7Ci0JCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7CisJCXRnM19mbGFnX3NldCh0cCwgTlZSQU1fQlVGRkVSRUQpOwogCQl0cC0+bnZyYW1fcGFnZXNpemUgPSBBVE1FTF9BVDI0QzUxMl9DSElQX1NJWkU7CiAKIAkJbnZjZmcxICY9IH5OVlJBTV9DRkcxX0NPTVBBVF9CWVBBU1M7CkBAIC0xMTY0NCwxNiArMTE4MjQsMTYgQEAKIAljYXNlIEZMQVNIXzU3NTVWRU5ET1JfQVRNRUxfRkxBU0hfMjoKIAljYXNlIEZMQVNIXzU3NTVWRU5ET1JfQVRNRUxfRkxBU0hfMzoKIAkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfQVRNRUw7Ci0JCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7Ci0JCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0ZMQVNIOworCQl0ZzNfZmxhZ19zZXQodHAsIE5WUkFNX0JVRkZFUkVEKTsKKwkJdGczX2ZsYWdfc2V0KHRwLCBGTEFTSCk7CiAJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDI2NDsKIAkJYnJlYWs7CiAJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFMTA6CiAJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFMjA6CiAJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFNDA6CiAJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX1NUOwotCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOwotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9GTEFTSDsKKwkJdGczX2ZsYWdfc2V0KHRwLCBOVlJBTV9CVUZGRVJFRCk7CisJCXRnM19mbGFnX3NldCh0cCwgRkxBU0gpOwogCQl0cC0+bnZyYW1fcGFnZXNpemUgPSAyNTY7CiAJCWJyZWFrOwogCX0KQEAgLTExNjY3LDcgKzExODQ3LDcgQEAKIAogCS8qIE5WUkFNIHByb3RlY3Rpb24gZm9yIFRQTSAqLwogCWlmIChudmNmZzEgJiAoMSA8PCAyNykpIHsKLQkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfUFJPVEVDVEVEX05WUkFNOworCQl0ZzNfZmxhZ19zZXQodHAsIFBST1RFQ1RFRF9OVlJBTSk7CiAJCXByb3RlY3QgPSAxOwogCX0KIApAQCAtMTE2ODIsOSArMTE4NjIsOSBAQAogCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9BVE1FTF9NREIwODFEOgogCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9BVE1FTF9NREIxNjFEOgogCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19BVE1FTDsKLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKLQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfRkxBU0g7Ci0JCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX05PX05WUkFNX0FERFJfVFJBTlM7CisJCXRnM19mbGFnX3NldCh0cCwgTlZSQU1fQlVGRkVSRUQpOworCQl0ZzNfZmxhZ19zZXQodHAsIEZMQVNIKTsKKwkJdGczX2ZsYWdfc2V0KHRwLCBOT19OVlJBTV9BRERSX1RSQU5TKTsKIAkJdHAtPm52cmFtX3BhZ2VzaXplID0gMjU2OwogCQlicmVhazsKIAljYXNlIEZMQVNIXzU3NjFWRU5ET1JfU1RfQV9NNDVQRTIwOgpAQCAtMTE2OTYsOCArMTE4NzYsOCBAQAogCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9TVF9NX000NVBFODA6CiAJY2FzZSBGTEFTSF81NzYxVkVORE9SX1NUX01fTTQ1UEUxNjoKIAkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfU1Q7Ci0JCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7Ci0JCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0ZMQVNIOworCQl0ZzNfZmxhZ19zZXQodHAsIE5WUkFNX0JVRkZFUkVEKTsKKwkJdGczX2ZsYWdfc2V0KHRwLCBGTEFTSCk7CiAJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDI1NjsKIAkJYnJlYWs7CiAJfQpAQCAtMTE3MzcsNyArMTE5MTcsNyBAQAogc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19nZXRfNTkwNl9udnJhbV9pbmZvKHN0cnVjdCB0ZzMgKnRwKQogewogCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOwotCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7CisJdGczX2ZsYWdfc2V0KHRwLCBOVlJBTV9CVUZGRVJFRCk7CiAJdHAtPm52cmFtX3BhZ2VzaXplID0gQVRNRUxfQVQyNEM1MTJfQ0hJUF9TSVpFOwogfQogCkBAIC0xMTc1MSw3ICsxMTkzMSw3IEBACiAJY2FzZSBGTEFTSF81Nzg3VkVORE9SX0FUTUVMX0VFUFJPTV8zNzZLSFo6CiAJY2FzZSBGTEFTSF81Nzg3VkVORE9SX01JQ1JPX0VFUFJPTV8zNzZLSFo6CiAJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOwotCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOworCQl0ZzNfZmxhZ19zZXQodHAsIE5WUkFNX0JVRkZFUkVEKTsKIAkJdHAtPm52cmFtX3BhZ2VzaXplID0gQVRNRUxfQVQyNEM1MTJfQ0hJUF9TSVpFOwogCiAJCW52Y2ZnMSAmPSB+TlZSQU1fQ0ZHMV9DT01QQVRfQllQQVNTOwpAQCAtMTE3NjUsOCArMTE5NDUsOCBAQAogCWNhc2UgRkxBU0hfNTc3ODBWRU5ET1JfQVRNRUxfQVQ0NURCMDQxRDoKIAljYXNlIEZMQVNIXzU3NzgwVkVORE9SX0FUTUVMX0FUNDVEQjA0MUI6CiAJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOwotCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOwotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9GTEFTSDsKKwkJdGczX2ZsYWdfc2V0KHRwLCBOVlJBTV9CVUZGRVJFRCk7CisJCXRnM19mbGFnX3NldCh0cCwgRkxBU0gpOwogCiAJCXN3aXRjaCAobnZjZmcxICYgTlZSQU1fQ0ZHMV81NzUyVkVORE9SX01BU0spIHsKIAkJY2FzZSBGTEFTSF81NzUyVkVORE9SX0FUTUVMX0ZMQVNIX0JVRkZFUkVEOgpAQCAtMTE3ODgsOCArMTE5NjgsOCBAQAogCWNhc2UgRkxBU0hfNTc1MlZFTkRPUl9TVF9NNDVQRTIwOgogCWNhc2UgRkxBU0hfNTc1MlZFTkRPUl9TVF9NNDVQRTQwOgogCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19TVDsKLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKLQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfRkxBU0g7CisJCXRnM19mbGFnX3NldCh0cCwgTlZSQU1fQlVGRkVSRUQpOworCQl0ZzNfZmxhZ19zZXQodHAsIEZMQVNIKTsKIAogCQlzd2l0Y2ggKG52Y2ZnMSAmIE5WUkFNX0NGRzFfNTc1MlZFTkRPUl9NQVNLKSB7CiAJCWNhc2UgRkxBU0hfNTc1MlZFTkRPUl9TVF9NNDVQRTEwOgpAQCAtMTE4MDQsMTMgKzExOTg0LDEzIEBACiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfTk9fTlZSQU07CisJCXRnM19mbGFnX3NldCh0cCwgTk9fTlZSQU0pOwogCQlyZXR1cm47CiAJfQogCiAJdGczX252cmFtX2dldF9wYWdlc2l6ZSh0cCwgbnZjZmcxKTsKIAlpZiAodHAtPm52cmFtX3BhZ2VzaXplICE9IDI2NCAmJiB0cC0+bnZyYW1fcGFnZXNpemUgIT0gNTI4KQotCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19OT19OVlJBTV9BRERSX1RSQU5TOworCQl0ZzNfZmxhZ19zZXQodHAsIE5PX05WUkFNX0FERFJfVFJBTlMpOwogfQogCiAKQEAgLTExODI0LDcgKzEyMDA0LDcgQEAKIAljYXNlIEZMQVNIXzU3MTdWRU5ET1JfQVRNRUxfRUVQUk9NOgogCWNhc2UgRkxBU0hfNTcxN1ZFTkRPUl9NSUNST19FRVBST006CiAJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOwotCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOworCQl0ZzNfZmxhZ19zZXQodHAsIE5WUkFNX0JVRkZFUkVEKTsKIAkJdHAtPm52cmFtX3BhZ2VzaXplID0gQVRNRUxfQVQyNEM1MTJfQ0hJUF9TSVpFOwogCiAJCW52Y2ZnMSAmPSB+TlZSQU1fQ0ZHMV9DT01QQVRfQllQQVNTOwpAQCAtMTE4MzgsMTEgKzEyMDE4LDEzIEBACiAJY2FzZSBGTEFTSF81NzE3VkVORE9SX0FUTUVMX0FEQjAyMUQ6CiAJY2FzZSBGTEFTSF81NzE3VkVORE9SX0FUTUVMXzQ1VVNQVDoKIAkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfQVRNRUw7Ci0JCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7Ci0JCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0ZMQVNIOworCQl0ZzNfZmxhZ19zZXQodHAsIE5WUkFNX0JVRkZFUkVEKTsKKwkJdGczX2ZsYWdfc2V0KHRwLCBGTEFTSCk7CiAKIAkJc3dpdGNoIChudmNmZzEgJiBOVlJBTV9DRkcxXzU3NTJWRU5ET1JfTUFTSykgewogCQljYXNlIEZMQVNIXzU3MTdWRU5ET1JfQVRNRUxfTURCMDIxRDoKKwkJCS8qIERldGVjdCBzaXplIHdpdGggdGczX252cmFtX2dldF9zaXplKCkgKi8KKwkJCWJyZWFrOwogCQljYXNlIEZMQVNIXzU3MTdWRU5ET1JfQVRNRUxfQURCMDIxQjoKIAkJY2FzZSBGTEFTSF81NzE3VkVORE9SX0FUTUVMX0FEQjAyMUQ6CiAJCQl0cC0+bnZyYW1fc2l6ZSA9IFRHM19OVlJBTV9TSVpFXzI1NktCOwpAQCAtMTE4NjMsMTMgKzEyMDQ1LDE1IEBACiAJY2FzZSBGTEFTSF81NzE3VkVORE9SX1NUXzI1VVNQVDoKIAljYXNlIEZMQVNIXzU3MTdWRU5ET1JfU1RfNDVVU1BUOgogCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19TVDsKLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKLQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfRkxBU0g7CisJCXRnM19mbGFnX3NldCh0cCwgTlZSQU1fQlVGRkVSRUQpOworCQl0ZzNfZmxhZ19zZXQodHAsIEZMQVNIKTsKIAogCQlzd2l0Y2ggKG52Y2ZnMSAmIE5WUkFNX0NGRzFfNTc1MlZFTkRPUl9NQVNLKSB7CiAJCWNhc2UgRkxBU0hfNTcxN1ZFTkRPUl9TVF9NX00yNVBFMjA6Ci0JCWNhc2UgRkxBU0hfNTcxN1ZFTkRPUl9TVF9BX00yNVBFMjA6CiAJCWNhc2UgRkxBU0hfNTcxN1ZFTkRPUl9TVF9NX000NVBFMjA6CisJCQkvKiBEZXRlY3Qgc2l6ZSB3aXRoIHRnM19udnJhbV9nZXRfc2l6ZSgpICovCisJCQlicmVhazsKKwkJY2FzZSBGTEFTSF81NzE3VkVORE9SX1NUX0FfTTI1UEUyMDoKIAkJY2FzZSBGTEFTSF81NzE3VkVORE9SX1NUX0FfTTQ1UEUyMDoKIAkJCXRwLT5udnJhbV9zaXplID0gVEczX05WUkFNX1NJWkVfMjU2S0I7CiAJCQlicmVhazsKQEAgLTExODc5LDEzICsxMjA2MywxMjUgQEAKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgotCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19OT19OVlJBTTsKKwkJdGczX2ZsYWdfc2V0KHRwLCBOT19OVlJBTSk7CiAJCXJldHVybjsKIAl9CiAKIAl0ZzNfbnZyYW1fZ2V0X3BhZ2VzaXplKHRwLCBudmNmZzEpOwogCWlmICh0cC0+bnZyYW1fcGFnZXNpemUgIT0gMjY0ICYmIHRwLT5udnJhbV9wYWdlc2l6ZSAhPSA1MjgpCi0JCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX05PX05WUkFNX0FERFJfVFJBTlM7CisJCXRnM19mbGFnX3NldCh0cCwgTk9fTlZSQU1fQUREUl9UUkFOUyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCB0ZzNfZ2V0XzU3MjBfbnZyYW1faW5mbyhzdHJ1Y3QgdGczICp0cCkKK3sKKwl1MzIgbnZjZmcxLCBudm1waW5zdHJwOworCisJbnZjZmcxID0gdHIzMihOVlJBTV9DRkcxKTsKKwludm1waW5zdHJwID0gbnZjZmcxICYgTlZSQU1fQ0ZHMV81NzUyVkVORE9SX01BU0s7CisKKwlzd2l0Y2ggKG52bXBpbnN0cnApIHsKKwljYXNlIEZMQVNIXzU3MjBfRUVQUk9NX0hEOgorCWNhc2UgRkxBU0hfNTcyMF9FRVBST01fTEQ6CisJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOworCQl0ZzNfZmxhZ19zZXQodHAsIE5WUkFNX0JVRkZFUkVEKTsKKworCQludmNmZzEgJj0gfk5WUkFNX0NGRzFfQ09NUEFUX0JZUEFTUzsKKwkJdHczMihOVlJBTV9DRkcxLCBudmNmZzEpOworCQlpZiAobnZtcGluc3RycCA9PSBGTEFTSF81NzIwX0VFUFJPTV9IRCkKKwkJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IEFUTUVMX0FUMjRDNTEyX0NISVBfU0laRTsKKwkJZWxzZQorCQkJdHAtPm52cmFtX3BhZ2VzaXplID0gQVRNRUxfQVQyNEMwMl9DSElQX1NJWkU7CisJCXJldHVybjsKKwljYXNlIEZMQVNIXzU3MjBWRU5ET1JfTV9BVE1FTF9EQjAxMUQ6CisJY2FzZSBGTEFTSF81NzIwVkVORE9SX0FfQVRNRUxfREIwMTFCOgorCWNhc2UgRkxBU0hfNTcyMFZFTkRPUl9BX0FUTUVMX0RCMDExRDoKKwljYXNlIEZMQVNIXzU3MjBWRU5ET1JfTV9BVE1FTF9EQjAyMUQ6CisJY2FzZSBGTEFTSF81NzIwVkVORE9SX0FfQVRNRUxfREIwMjFCOgorCWNhc2UgRkxBU0hfNTcyMFZFTkRPUl9BX0FUTUVMX0RCMDIxRDoKKwljYXNlIEZMQVNIXzU3MjBWRU5ET1JfTV9BVE1FTF9EQjA0MUQ6CisJY2FzZSBGTEFTSF81NzIwVkVORE9SX0FfQVRNRUxfREIwNDFCOgorCWNhc2UgRkxBU0hfNTcyMFZFTkRPUl9BX0FUTUVMX0RCMDQxRDoKKwljYXNlIEZMQVNIXzU3MjBWRU5ET1JfTV9BVE1FTF9EQjA4MUQ6CisJY2FzZSBGTEFTSF81NzIwVkVORE9SX0FfQVRNRUxfREIwODFEOgorCWNhc2UgRkxBU0hfNTcyMFZFTkRPUl9BVE1FTF80NVVTUFQ6CisJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOworCQl0ZzNfZmxhZ19zZXQodHAsIE5WUkFNX0JVRkZFUkVEKTsKKwkJdGczX2ZsYWdfc2V0KHRwLCBGTEFTSCk7CisKKwkJc3dpdGNoIChudm1waW5zdHJwKSB7CisJCWNhc2UgRkxBU0hfNTcyMFZFTkRPUl9NX0FUTUVMX0RCMDIxRDoKKwkJY2FzZSBGTEFTSF81NzIwVkVORE9SX0FfQVRNRUxfREIwMjFCOgorCQljYXNlIEZMQVNIXzU3MjBWRU5ET1JfQV9BVE1FTF9EQjAyMUQ6CisJCQl0cC0+bnZyYW1fc2l6ZSA9IFRHM19OVlJBTV9TSVpFXzI1NktCOworCQkJYnJlYWs7CisJCWNhc2UgRkxBU0hfNTcyMFZFTkRPUl9NX0FUTUVMX0RCMDQxRDoKKwkJY2FzZSBGTEFTSF81NzIwVkVORE9SX0FfQVRNRUxfREIwNDFCOgorCQljYXNlIEZMQVNIXzU3MjBWRU5ET1JfQV9BVE1FTF9EQjA0MUQ6CisJCQl0cC0+bnZyYW1fc2l6ZSA9IFRHM19OVlJBTV9TSVpFXzUxMktCOworCQkJYnJlYWs7CisJCWNhc2UgRkxBU0hfNTcyMFZFTkRPUl9NX0FUTUVMX0RCMDgxRDoKKwkJY2FzZSBGTEFTSF81NzIwVkVORE9SX0FfQVRNRUxfREIwODFEOgorCQkJdHAtPm52cmFtX3NpemUgPSBURzNfTlZSQU1fU0laRV8xTUI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXRwLT5udnJhbV9zaXplID0gVEczX05WUkFNX1NJWkVfMTI4S0I7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIEZMQVNIXzU3MjBWRU5ET1JfTV9TVF9NMjVQRTEwOgorCWNhc2UgRkxBU0hfNTcyMFZFTkRPUl9NX1NUX000NVBFMTA6CisJY2FzZSBGTEFTSF81NzIwVkVORE9SX0FfU1RfTTI1UEUxMDoKKwljYXNlIEZMQVNIXzU3MjBWRU5ET1JfQV9TVF9NNDVQRTEwOgorCWNhc2UgRkxBU0hfNTcyMFZFTkRPUl9NX1NUX00yNVBFMjA6CisJY2FzZSBGTEFTSF81NzIwVkVORE9SX01fU1RfTTQ1UEUyMDoKKwljYXNlIEZMQVNIXzU3MjBWRU5ET1JfQV9TVF9NMjVQRTIwOgorCWNhc2UgRkxBU0hfNTcyMFZFTkRPUl9BX1NUX000NVBFMjA6CisJY2FzZSBGTEFTSF81NzIwVkVORE9SX01fU1RfTTI1UEU0MDoKKwljYXNlIEZMQVNIXzU3MjBWRU5ET1JfTV9TVF9NNDVQRTQwOgorCWNhc2UgRkxBU0hfNTcyMFZFTkRPUl9BX1NUX00yNVBFNDA6CisJY2FzZSBGTEFTSF81NzIwVkVORE9SX0FfU1RfTTQ1UEU0MDoKKwljYXNlIEZMQVNIXzU3MjBWRU5ET1JfTV9TVF9NMjVQRTgwOgorCWNhc2UgRkxBU0hfNTcyMFZFTkRPUl9NX1NUX000NVBFODA6CisJY2FzZSBGTEFTSF81NzIwVkVORE9SX0FfU1RfTTI1UEU4MDoKKwljYXNlIEZMQVNIXzU3MjBWRU5ET1JfQV9TVF9NNDVQRTgwOgorCWNhc2UgRkxBU0hfNTcyMFZFTkRPUl9TVF8yNVVTUFQ6CisJY2FzZSBGTEFTSF81NzIwVkVORE9SX1NUXzQ1VVNQVDoKKwkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfU1Q7CisJCXRnM19mbGFnX3NldCh0cCwgTlZSQU1fQlVGRkVSRUQpOworCQl0ZzNfZmxhZ19zZXQodHAsIEZMQVNIKTsKKworCQlzd2l0Y2ggKG52bXBpbnN0cnApIHsKKwkJY2FzZSBGTEFTSF81NzIwVkVORE9SX01fU1RfTTI1UEUyMDoKKwkJY2FzZSBGTEFTSF81NzIwVkVORE9SX01fU1RfTTQ1UEUyMDoKKwkJY2FzZSBGTEFTSF81NzIwVkVORE9SX0FfU1RfTTI1UEUyMDoKKwkJY2FzZSBGTEFTSF81NzIwVkVORE9SX0FfU1RfTTQ1UEUyMDoKKwkJCXRwLT5udnJhbV9zaXplID0gVEczX05WUkFNX1NJWkVfMjU2S0I7CisJCQlicmVhazsKKwkJY2FzZSBGTEFTSF81NzIwVkVORE9SX01fU1RfTTI1UEU0MDoKKwkJY2FzZSBGTEFTSF81NzIwVkVORE9SX01fU1RfTTQ1UEU0MDoKKwkJY2FzZSBGTEFTSF81NzIwVkVORE9SX0FfU1RfTTI1UEU0MDoKKwkJY2FzZSBGTEFTSF81NzIwVkVORE9SX0FfU1RfTTQ1UEU0MDoKKwkJCXRwLT5udnJhbV9zaXplID0gVEczX05WUkFNX1NJWkVfNTEyS0I7CisJCQlicmVhazsKKwkJY2FzZSBGTEFTSF81NzIwVkVORE9SX01fU1RfTTI1UEU4MDoKKwkJY2FzZSBGTEFTSF81NzIwVkVORE9SX01fU1RfTTQ1UEU4MDoKKwkJY2FzZSBGTEFTSF81NzIwVkVORE9SX0FfU1RfTTI1UEU4MDoKKwkJY2FzZSBGTEFTSF81NzIwVkVORE9SX0FfU1RfTTQ1UEU4MDoKKwkJCXRwLT5udnJhbV9zaXplID0gVEczX05WUkFNX1NJWkVfMU1COworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl0cC0+bnZyYW1fc2l6ZSA9IFRHM19OVlJBTV9TSVpFXzEyOEtCOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdGczX2ZsYWdfc2V0KHRwLCBOT19OVlJBTSk7CisJCXJldHVybjsKKwl9CisKKwl0ZzNfbnZyYW1fZ2V0X3BhZ2VzaXplKHRwLCBudmNmZzEpOworCWlmICh0cC0+bnZyYW1fcGFnZXNpemUgIT0gMjY0ICYmIHRwLT5udnJhbV9wYWdlc2l6ZSAhPSA1MjgpCisJCXRnM19mbGFnX3NldCh0cCwgTk9fTlZSQU1fQUREUl9UUkFOUyk7CiB9CiAKIC8qIENoaXBzIG90aGVyIHRoYW4gNTcwMC81NzAxIHVzZSB0aGUgTlZSQU0gZm9yIGZldGNoaW5nIGluZm8uICovCkBAIC0xMTkwNSw3ICsxMjIwMSw3IEBACiAKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MDAgJiYKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MDEpIHsKLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTTsKKwkJdGczX2ZsYWdfc2V0KHRwLCBOVlJBTSk7CiAKIAkJaWYgKHRnM19udnJhbV9sb2NrKHRwKSkgewogCQkJbmV0ZGV2X3dhcm4odHAtPmRldiwKQEAgLTExOTM1LDYgKzEyMjMxLDggQEAKIAkJZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcgfHwKIAkJCSBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxOSkKIAkJCXRnM19nZXRfNTcxN19udnJhbV9pbmZvKHRwKTsKKwkJZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MjApCisJCQl0ZzNfZ2V0XzU3MjBfbnZyYW1faW5mbyh0cCk7CiAJCWVsc2UKIAkJCXRnM19nZXRfbnZyYW1faW5mbyh0cCk7CiAKQEAgLTExOTQ1LDcgKzEyMjQzLDggQEAKIAkJdGczX252cmFtX3VubG9jayh0cCk7CiAKIAl9IGVsc2UgewotCQl0cC0+dGczX2ZsYWdzICY9IH4oVEczX0ZMQUdfTlZSQU0gfCBURzNfRkxBR19OVlJBTV9CVUZGRVJFRCk7CisJCXRnM19mbGFnX2NsZWFyKHRwLCBOVlJBTSk7CisJCXRnM19mbGFnX2NsZWFyKHRwLCBOVlJBTV9CVUZGRVJFRCk7CiAKIAkJdGczX2dldF9lZXByb21fc2l6ZSh0cCk7CiAJfQpAQCAtMTIxMjgsNyArMTI0MjcsNyBAQAogCQkJbnZyYW1fY21kIHw9IE5WUkFNX0NNRF9MQVNUOwogCiAJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTc1MiAmJgotCQkgICAgISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3NTVfUExVUykgJiYKKwkJICAgICF0ZzNfZmxhZyh0cCwgNTc1NV9QTFVTKSAmJgogCQkgICAgKHRwLT5udnJhbV9qZWRlY251bSA9PSBKRURFQ19TVCkgJiYKIAkJICAgIChudnJhbV9jbWQgJiBOVlJBTV9DTURfRklSU1QpKSB7CiAKQEAgLTEyMTM4LDcgKzEyNDM3LDcgQEAKIAogCQkJCWJyZWFrOwogCQl9Ci0JCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfRkxBU0gpKSB7CisJCWlmICghdGczX2ZsYWcodHAsIEZMQVNIKSkgewogCQkJLyogV2UgYWx3YXlzIGRvIGNvbXBsZXRlIHdvcmQgd3JpdGVzIHRvIGVlcHJvbS4gKi8KIAkJCW52cmFtX2NtZCB8PSAoTlZSQU1fQ01EX0ZJUlNUIHwgTlZSQU1fQ01EX0xBU1QpOwogCQl9CkBAIC0xMjE1NCwxMyArMTI0NTMsMTMgQEAKIHsKIAlpbnQgcmV0OwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FRVBST01fV1JJVEVfUFJPVCkgeworCWlmICh0ZzNfZmxhZyh0cCwgRUVQUk9NX1dSSVRFX1BST1QpKSB7CiAJCXR3MzJfZihHUkNfTE9DQUxfQ1RSTCwgdHAtPmdyY19sb2NhbF9jdHJsICYKIAkJICAgICAgIH5HUkNfTENMQ1RSTF9HUElPX09VVFBVVDEpOwogCQl1ZGVsYXkoNDApOwogCX0KIAotCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkpIHsKKwlpZiAoIXRnM19mbGFnKHRwLCBOVlJBTSkpIHsKIAkJcmV0ID0gdGczX252cmFtX3dyaXRlX2Jsb2NrX3VzaW5nX2VlcHJvbSh0cCwgb2Zmc2V0LCBsZW4sIGJ1Zik7CiAJfSBlbHNlIHsKIAkJdTMyIGdyY19tb2RlOwpAQCAtMTIxNzAsMTYgKzEyNDY5LDEzIEBACiAJCQlyZXR1cm4gcmV0OwogCiAJCXRnM19lbmFibGVfbnZyYW1fYWNjZXNzKHRwKTsKLQkJaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3NTBfUExVUykgJiYKLQkJICAgICEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QUk9URUNURURfTlZSQU0pKQorCQlpZiAodGczX2ZsYWcodHAsIDU3NTBfUExVUykgJiYgIXRnM19mbGFnKHRwLCBQUk9URUNURURfTlZSQU0pKQogCQkJdHczMihOVlJBTV9XUklURTEsIDB4NDA2KTsKIAogCQlncmNfbW9kZSA9IHRyMzIoR1JDX01PREUpOwogCQl0dzMyKEdSQ19NT0RFLCBncmNfbW9kZSB8IEdSQ19NT0RFX05WUkFNX1dSX0VOQUJMRSk7CiAKLQkJaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQpIHx8Ci0JCQkhKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfRkxBU0gpKSB7Ci0KKwkJaWYgKHRnM19mbGFnKHRwLCBOVlJBTV9CVUZGRVJFRCkgfHwgIXRnM19mbGFnKHRwLCBGTEFTSCkpIHsKIAkJCXJldCA9IHRnM19udnJhbV93cml0ZV9ibG9ja19idWZmZXJlZCh0cCwgb2Zmc2V0LCBsZW4sCiAJCQkJYnVmKTsKIAkJfSBlbHNlIHsKQEAgLTEyMTk0LDcgKzEyNDkwLDcgQEAKIAkJdGczX252cmFtX3VubG9jayh0cCk7CiAJfQogCi0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FRVBST01fV1JJVEVfUFJPVCkgeworCWlmICh0ZzNfZmxhZyh0cCwgRUVQUk9NX1dSSVRFX1BST1QpKSB7CiAJCXR3MzJfZihHUkNfTE9DQUxfQ1RSTCwgdHAtPmdyY19sb2NhbF9jdHJsKTsKIAkJdWRlbGF5KDQwKTsKIAl9CkBAIC0xMjMxNiwxOSArMTI2MTIsMjIgQEAKIAl0cC0+bGVkX2N0cmwgPSBMRURfQ1RSTF9NT0RFX1BIWV8xOwogCiAJLyogQXNzdW1lIGFuIG9uYm9hcmQgZGV2aWNlIGFuZCBXT0wgY2FwYWJsZSBieSBkZWZhdWx0LiAgKi8KLQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0VFUFJPTV9XUklURV9QUk9UIHwgVEczX0ZMQUdfV09MX0NBUDsKKwl0ZzNfZmxhZ19zZXQodHAsIEVFUFJPTV9XUklURV9QUk9UKTsKKwl0ZzNfZmxhZ19zZXQodHAsIFdPTF9DQVApOwogCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KSB7CiAJCWlmICghKHRyMzIoUENJRV9UUkFOU0FDVElPTl9DRkcpICYgUENJRV9UUkFOU19DRkdfTE9NKSkgewotCQkJdHAtPnRnM19mbGFncyAmPSB+VEczX0ZMQUdfRUVQUk9NX1dSSVRFX1BST1Q7Ci0JCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9JU19OSUM7CisJCQl0ZzNfZmxhZ19jbGVhcih0cCwgRUVQUk9NX1dSSVRFX1BST1QpOworCQkJdGczX2ZsYWdfc2V0KHRwLCBJU19OSUMpOwogCQl9CiAJCXZhbCA9IHRyMzIoVkNQVV9DRkdTSERXKTsKIAkJaWYgKHZhbCAmIFZDUFVfQ0ZHU0hEV19BU1BNX0RCTkMpCi0JCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0FTUE1fV09SS0FST1VORDsKKwkJCXRnM19mbGFnX3NldCh0cCwgQVNQTV9XT1JLQVJPVU5EKTsKIAkJaWYgKCh2YWwgJiBWQ1BVX0NGR1NIRFdfV09MX0VOQUJMRSkgJiYKLQkJICAgICh2YWwgJiBWQ1BVX0NGR1NIRFdfV09MX01BR1BLVCkpCi0JCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1dPTF9FTkFCTEU7CisJCSAgICAodmFsICYgVkNQVV9DRkdTSERXX1dPTF9NQUdQS1QpKSB7CisJCQl0ZzNfZmxhZ19zZXQodHAsIFdPTF9FTkFCTEUpOworCQkJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKCZ0cC0+cGRldi0+ZGV2LCB0cnVlKTsKKwkJfQogCQlnb3RvIGRvbmU7CiAJfQogCkBAIC0xMjM0Myw5ICsxMjY0Miw5IEBACiAKIAkJdGczX3JlYWRfbWVtKHRwLCBOSUNfU1JBTV9EQVRBX1ZFUiwgJnZlcik7CiAJCXZlciA+Pj0gTklDX1NSQU1fREFUQV9WRVJfU0hJRlQ7Ci0JCWlmICgoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MDApICYmCi0JCSAgICAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MDEpICYmCi0JCSAgICAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MDMpICYmCisJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcwMCAmJgorCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MDEgJiYKKwkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzAzICYmCiAJCSAgICAodmVyID4gMCkgJiYgKHZlciA8IDB4MTAwKSkKIAkJCXRnM19yZWFkX21lbSh0cCwgTklDX1NSQU1fREFUQV9DRkdfMiwgJmNmZzIpOwogCkBAIC0xMjM2OSwxMyArMTI2NjgsMTMgQEAKIAogCQl0cC0+cGh5X2lkID0gZWVwcm9tX3BoeV9pZDsKIAkJaWYgKGVlcHJvbV9waHlfc2VyZGVzKSB7Ci0JCQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykpCisJCQlpZiAoIXRnM19mbGFnKHRwLCA1NzA1X1BMVVMpKQogCQkJCXRwLT5waHlfZmxhZ3MgfD0gVEczX1BIWUZMR19QSFlfU0VSREVTOwogCQkJZWxzZQogCQkJCXRwLT5waHlfZmxhZ3MgfD0gVEczX1BIWUZMR19NSUlfU0VSREVTOwogCQl9CiAKLQkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKQorCQlpZiAodGczX2ZsYWcodHAsIDU3NTBfUExVUykpCiAJCQlsZWRfY2ZnID0gY2ZnMiAmIChOSUNfU1JBTV9EQVRBX0NGR19MRURfTU9ERV9NQVNLIHwKIAkJCQkgICAgU0hBU1RBX0VYVF9MRURfTU9ERV9NQVNLKTsKIAkJZWxzZQpAQCAtMTI0MzUsMzQgKzEyNzM0LDM2IEBACiAJCQl0cC0+bGVkX2N0cmwgPSBMRURfQ1RSTF9NT0RFX1BIWV8xOwogCiAJCWlmIChuaWNfY2ZnICYgTklDX1NSQU1fREFUQV9DRkdfRUVQUk9NX1dQKSB7Ci0JCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0VFUFJPTV9XUklURV9QUk9UOworCQkJdGczX2ZsYWdfc2V0KHRwLCBFRVBST01fV1JJVEVfUFJPVCk7CiAJCQlpZiAoKHRwLT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09CiAJCQkgICAgIFBDSV9WRU5ET1JfSURfQVJJTUEpICYmCiAJCQkgICAgKHRwLT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MjA1YSB8fAogCQkJICAgICB0cC0+cGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweDIwNjMpKQotCQkJCXRwLT50ZzNfZmxhZ3MgJj0gflRHM19GTEFHX0VFUFJPTV9XUklURV9QUk9UOworCQkJCXRnM19mbGFnX2NsZWFyKHRwLCBFRVBST01fV1JJVEVfUFJPVCk7CiAJCX0gZWxzZSB7Ci0JCQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19FRVBST01fV1JJVEVfUFJPVDsKLQkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0lTX05JQzsKKwkJCXRnM19mbGFnX2NsZWFyKHRwLCBFRVBST01fV1JJVEVfUFJPVCk7CisJCQl0ZzNfZmxhZ19zZXQodHAsIElTX05JQyk7CiAJCX0KIAogCQlpZiAobmljX2NmZyAmIE5JQ19TUkFNX0RBVEFfQ0ZHX0FTRl9FTkFCTEUpIHsKLQkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfRU5BQkxFX0FTRjsKLQkJCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3NTBfUExVUykKLQkJCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9BU0ZfTkVXX0hBTkRTSEFLRTsKKwkJCXRnM19mbGFnX3NldCh0cCwgRU5BQkxFX0FTRik7CisJCQlpZiAodGczX2ZsYWcodHAsIDU3NTBfUExVUykpCisJCQkJdGczX2ZsYWdfc2V0KHRwLCBBU0ZfTkVXX0hBTkRTSEFLRSk7CiAJCX0KIAogCQlpZiAoKG5pY19jZmcgJiBOSUNfU1JBTV9EQVRBX0NGR19BUEVfRU5BQkxFKSAmJgotCQkJKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKSkKLQkJCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX0VOQUJMRV9BUEU7CisJCSAgICB0ZzNfZmxhZyh0cCwgNTc1MF9QTFVTKSkKKwkJCXRnM19mbGFnX3NldCh0cCwgRU5BQkxFX0FQRSk7CiAKIAkJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0FOWV9TRVJERVMgJiYKIAkJICAgICEobmljX2NmZyAmIE5JQ19TUkFNX0RBVEFfQ0ZHX0ZJQkVSX1dPTCkpCi0JCQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19XT0xfQ0FQOworCQkJdGczX2ZsYWdfY2xlYXIodHAsIFdPTF9DQVApOwogCi0JCWlmICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1dPTF9DQVApICYmCi0JCSAgICAobmljX2NmZyAmIE5JQ19TUkFNX0RBVEFfQ0ZHX1dPTF9FTkFCTEUpKQotCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19XT0xfRU5BQkxFOworCQlpZiAodGczX2ZsYWcodHAsIFdPTF9DQVApICYmCisJCSAgICAobmljX2NmZyAmIE5JQ19TUkFNX0RBVEFfQ0ZHX1dPTF9FTkFCTEUpKSB7CisJCQl0ZzNfZmxhZ19zZXQodHAsIFdPTF9FTkFCTEUpOworCQkJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKCZ0cC0+cGRldi0+ZGV2LCB0cnVlKTsKKwkJfQogCiAJCWlmIChjZmcyICYgKDEgPDwgMTcpKQogCQkJdHAtPnBoeV9mbGFncyB8PSBURzNfUEhZRkxHX0NBUEFDSVRJVkVfQ09VUExJTkc7CkBAIC0xMjQ3MiwzMyArMTI3NzMsMzMgQEAKIAkJaWYgKGNmZzIgJiAoMSA8PCAxOCkpCiAJCQl0cC0+cGh5X2ZsYWdzIHw9IFRHM19QSFlGTEdfU0VSREVTX1BSRUVNUEhBU0lTOwogCi0JCWlmICgoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTcxN19QTFVTKSB8fAotCQkgICAgKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NCAmJgotCQkgICAgICBHRVRfQ0hJUF9SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQ0hJUFJFVl81Nzg0X0FYKSkpICYmCisJCWlmICgodGczX2ZsYWcodHAsIDU3NzY1X1BMVVMpIHx8CisJCSAgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg0ICYmCisJCSAgICAgIEdFVF9DSElQX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBDSElQUkVWXzU3ODRfQVgpKSAmJgogCQkgICAgKGNmZzIgJiBOSUNfU1JBTV9EQVRBX0NGR18yX0FQRF9FTikpCiAJCQl0cC0+cGh5X2ZsYWdzIHw9IFRHM19QSFlGTEdfRU5BQkxFX0FQRDsKIAotCQlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUENJX0VYUFJFU1MpICYmCisJCWlmICh0ZzNfZmxhZyh0cCwgUENJX0VYUFJFU1MpICYmCiAJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTc4NSAmJgotCQkgICAgISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3MTdfUExVUykpIHsKKwkJICAgICF0ZzNfZmxhZyh0cCwgNTc3NjVfUExVUykpIHsKIAkJCXUzMiBjZmczOwogCiAJCQl0ZzNfcmVhZF9tZW0odHAsIE5JQ19TUkFNX0RBVEFfQ0ZHXzMsICZjZmczKTsKIAkJCWlmIChjZmczICYgTklDX1NSQU1fQVNQTV9ERUJPVU5DRSkKLQkJCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0FTUE1fV09SS0FST1VORDsKKwkJCQl0ZzNfZmxhZ19zZXQodHAsIEFTUE1fV09SS0FST1VORCk7CiAJCX0KIAogCQlpZiAoY2ZnNCAmIE5JQ19TUkFNX1JHTUlJX0lOQkFORF9ESVNBQkxFKQotCQkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfUkdNSUlfSU5CQU5EX0RJU0FCTEU7CisJCQl0ZzNfZmxhZ19zZXQodHAsIFJHTUlJX0lOQkFORF9ESVNBQkxFKTsKIAkJaWYgKGNmZzQgJiBOSUNfU1JBTV9SR01JSV9FWFRfSUJORF9SWF9FTikKLQkJCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX1JHTUlJX0VYVF9JQk5EX1JYX0VOOworCQkJdGczX2ZsYWdfc2V0KHRwLCBSR01JSV9FWFRfSUJORF9SWF9FTik7CiAJCWlmIChjZmc0ICYgTklDX1NSQU1fUkdNSUlfRVhUX0lCTkRfVFhfRU4pCi0JCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19SR01JSV9FWFRfSUJORF9UWF9FTjsKKwkJCXRnM19mbGFnX3NldCh0cCwgUkdNSUlfRVhUX0lCTkRfVFhfRU4pOwogCX0KIGRvbmU6Ci0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19XT0xfQ0FQKQorCWlmICh0ZzNfZmxhZyh0cCwgV09MX0NBUCkpCiAJCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmdHAtPnBkZXYtPmRldiwKLQkJCQkgdHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1dPTF9FTkFCTEUpOworCQkJCQkgdGczX2ZsYWcodHAsIFdPTF9FTkFCTEUpKTsKIAllbHNlCiAJCWRldmljZV9zZXRfd2FrZXVwX2NhcGFibGUoJnRwLT5wZGV2LT5kZXYsIGZhbHNlKTsKIH0KQEAgLTEyNTg4LDE4ICsxMjg4OSwxNyBAQAogCWludCBlcnI7CiAKIAkvKiBmbG93IGNvbnRyb2wgYXV0b25lZ290aWF0aW9uIGlzIGRlZmF1bHQgYmVoYXZpb3IgKi8KLQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1BBVVNFX0FVVE9ORUc7CisJdGczX2ZsYWdfc2V0KHRwLCBQQVVTRV9BVVRPTkVHKTsKIAl0cC0+bGlua19jb25maWcuZmxvd2N0cmwgPSBGTE9XX0NUUkxfVFggfCBGTE9XX0NUUkxfUlg7CiAKLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfUEhZTElCKQorCWlmICh0ZzNfZmxhZyh0cCwgVVNFX1BIWUxJQikpCiAJCXJldHVybiB0ZzNfcGh5X2luaXQodHApOwogCiAJLyogUmVhZGluZyB0aGUgUEhZIElEIHJlZ2lzdGVyIGNhbiBjb25mbGljdCB3aXRoIEFTRgogCSAqIGZpcm13YXJlIGFjY2VzcyB0byB0aGUgUEhZIGhhcmR3YXJlLgogCSAqLwogCWVyciA9IDA7Ci0JaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikgfHwKLQkgICAgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkpIHsKKwlpZiAodGczX2ZsYWcodHAsIEVOQUJMRV9BU0YpIHx8IHRnM19mbGFnKHRwLCBFTkFCTEVfQVBFKSkgewogCQlod19waHlfaWQgPSBod19waHlfaWRfbWFza2VkID0gVEczX1BIWV9JRF9JTlZBTElEOwogCX0gZWxzZSB7CiAJCS8qIE5vdyByZWFkIHRoZSBwaHlzaWNhbCBQSFlfSUQgZnJvbSB0aGUgY2hpcCBhbmQgdmVyaWZ5CkBAIC0xMjY1NSw5ICsxMjk1NSw5IEBACiAJdGczX3BoeV9pbml0X2xpbmtfY29uZmlnKHRwKTsKIAogCWlmICghKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0FOWV9TRVJERVMpICYmCi0JICAgICEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfQVBFKSAmJgotCSAgICAhKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSkgewotCQl1MzIgYm1zciwgYWR2X3JlZywgdGczX2N0cmwsIG1hc2s7CisJICAgICF0ZzNfZmxhZyh0cCwgRU5BQkxFX0FQRSkgJiYKKwkgICAgIXRnM19mbGFnKHRwLCBFTkFCTEVfQVNGKSkgeworCQl1MzIgYm1zciwgbWFzazsKIAogCQl0ZzNfcmVhZHBoeSh0cCwgTUlJX0JNU1IsICZibXNyKTsKIAkJaWYgKCF0ZzNfcmVhZHBoeSh0cCwgTUlJX0JNU1IsICZibXNyKSAmJgpAQCAtMTI2NjgsMzYgKzEyOTY4LDE4IEBACiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCi0JCWFkdl9yZWcgPSAoQURWRVJUSVNFXzEwSEFMRiB8IEFEVkVSVElTRV8xMEZVTEwgfAotCQkJICAgQURWRVJUSVNFXzEwMEhBTEYgfCBBRFZFUlRJU0VfMTAwRlVMTCB8Ci0JCQkgICBBRFZFUlRJU0VfQ1NNQSB8IEFEVkVSVElTRV9QQVVTRV9DQVApOwotCQl0ZzNfY3RybCA9IDA7Ci0JCWlmICghKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHXzEwXzEwMF9PTkxZKSkgewotCQkJdGczX2N0cmwgPSAoTUlJX1RHM19DVFJMX0FEVl8xMDAwX0hBTEYgfAotCQkJCSAgICBNSUlfVEczX0NUUkxfQURWXzEwMDBfRlVMTCk7Ci0JCQlpZiAodHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3MDFfQTAgfHwKLQkJCSAgICB0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTcwMV9CMCkKLQkJCQl0ZzNfY3RybCB8PSAoTUlJX1RHM19DVFJMX0FTX01BU1RFUiB8Ci0JCQkJCSAgICAgTUlJX1RHM19DVFJMX0VOQUJMRV9BU19NQVNURVIpOwotCQl9CisJCXRnM19waHlfc2V0X3dpcmVzcGVlZCh0cCk7CiAKIAkJbWFzayA9IChBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZiB8IEFEVkVSVElTRURfMTBiYXNlVF9GdWxsIHwKIAkJCUFEVkVSVElTRURfMTAwYmFzZVRfSGFsZiB8IEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCB8CiAJCQlBRFZFUlRJU0VEXzEwMDBiYXNlVF9IYWxmIHwgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCk7CiAJCWlmICghdGczX2NvcHBlcl9pc19hZHZlcnRpc2luZ19hbGwodHAsIG1hc2spKSB7Ci0JCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9BRFZFUlRJU0UsIGFkdl9yZWcpOwotCi0JCQlpZiAoISh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR18xMF8xMDBfT05MWSkpCi0JCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0NUUkwsIHRnM19jdHJsKTsKKwkJCXRnM19waHlfYXV0b25lZ19jZmcodHAsIHRwLT5saW5rX2NvbmZpZy5hZHZlcnRpc2luZywKKwkJCQkJICAgIHRwLT5saW5rX2NvbmZpZy5mbG93Y3RybCk7CiAKIAkJCXRnM193cml0ZXBoeSh0cCwgTUlJX0JNQ1IsCiAJCQkJICAgICBCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQpOwogCQl9Ci0JCXRnM19waHlfc2V0X3dpcmVzcGVlZCh0cCk7Ci0KLQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfQURWRVJUSVNFLCBhZHZfcmVnKTsKLQkJaWYgKCEodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfMTBfMTAwX09OTFkpKQotCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0NUUkwsIHRnM19jdHJsKTsKIAl9CiAKIHNraXBfcGh5X3Jlc2V0OgpAQCAtMTI3MTcsNDYgKzEyOTk5LDExIEBACiAJdTggKnZwZF9kYXRhOwogCXVuc2lnbmVkIGludCBibG9ja19lbmQsIHJvc2l6ZSwgbGVuOwogCWludCBqLCBpID0gMDsKLQl1MzIgbWFnaWM7CiAKLQlpZiAoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTk9fTlZSQU0pIHx8Ci0JICAgIHRnM19udnJhbV9yZWFkKHRwLCAweDAsICZtYWdpYykpCi0JCWdvdG8gb3V0X25vX3ZwZDsKLQotCXZwZF9kYXRhID0ga21hbGxvYyhURzNfTlZNX1ZQRF9MRU4sIEdGUF9LRVJORUwpOworCXZwZF9kYXRhID0gKHU4ICopdGczX3ZwZF9yZWFkYmxvY2sodHApOwogCWlmICghdnBkX2RhdGEpCiAJCWdvdG8gb3V0X25vX3ZwZDsKIAotCWlmIChtYWdpYyA9PSBURzNfRUVQUk9NX01BR0lDKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBURzNfTlZNX1ZQRF9MRU47IGkgKz0gNCkgewotCQkJdTMyIHRtcDsKLQotCQkJLyogVGhlIGRhdGEgaXMgaW4gbGl0dGxlLWVuZGlhbiBmb3JtYXQgaW4gTlZSQU0uCi0JCQkgKiBVc2UgdGhlIGJpZy1lbmRpYW4gcmVhZCByb3V0aW5lcyB0byBwcmVzZXJ2ZQotCQkJICogdGhlIGJ5dGUgb3JkZXIgYXMgaXQgZXhpc3RzIGluIE5WUkFNLgotCQkJICovCi0JCQlpZiAodGczX252cmFtX3JlYWRfYmUzMih0cCwgVEczX05WTV9WUERfT0ZGICsgaSwgJnRtcCkpCi0JCQkJZ290byBvdXRfbm90X2ZvdW5kOwotCi0JCQltZW1jcHkoJnZwZF9kYXRhW2ldLCAmdG1wLCBzaXplb2YodG1wKSk7Ci0JCX0KLQl9IGVsc2UgewotCQlzc2l6ZV90IGNudDsKLQkJdW5zaWduZWQgaW50IHBvcyA9IDA7Ci0KLQkJZm9yICg7IHBvcyA8IFRHM19OVk1fVlBEX0xFTiAmJiBpIDwgMzsgaSsrLCBwb3MgKz0gY250KSB7Ci0JCQljbnQgPSBwY2lfcmVhZF92cGQodHAtPnBkZXYsIHBvcywKLQkJCQkJICAgVEczX05WTV9WUERfTEVOIC0gcG9zLAotCQkJCQkgICAmdnBkX2RhdGFbcG9zXSk7Ci0JCQlpZiAoY250ID09IC1FVElNRURPVVQgfHwgY250ID09IC1FSU5UUikKLQkJCQljbnQgPSAwOwotCQkJZWxzZSBpZiAoY250IDwgMCkKLQkJCQlnb3RvIG91dF9ub3RfZm91bmQ7Ci0JCX0KLQkJaWYgKHBvcyAhPSBURzNfTlZNX1ZQRF9MRU4pCi0JCQlnb3RvIG91dF9ub3RfZm91bmQ7Ci0JfQotCiAJaSA9IHBjaV92cGRfZmluZF90YWcodnBkX2RhdGEsIDAsIFRHM19OVk1fVlBEX0xFTiwKIAkJCSAgICAgUENJX1ZQRF9MUkRUX1JPX0RBVEEpOwogCWlmIChpIDwgMCkKQEAgLTEzMDEwLDcgKzEzMjU3LDcgQEAKIAlpZiAob2Zmc2V0ID09IFRHM19OVk1fRElSX0VORCkKIAkJcmV0dXJuOwogCi0JaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKQorCWlmICghdGczX2ZsYWcodHAsIDU3MDVfUExVUykpCiAJCXN0YXJ0ID0gMHgwODAwMDAwMDsKIAllbHNlIGlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0IC0gNCwgJnN0YXJ0KSkKIAkJcmV0dXJuOwpAQCAtMTMwNTAsOCArMTMyOTcsNyBAQAogCXUzMiBhcGVkYXRhOwogCWNoYXIgKmZ3dHlwZTsKIAotCWlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkgfHwKLQkgICAgISh0cC0+dGczX2ZsYWdzICAmIFRHM19GTEFHX0VOQUJMRV9BU0YpKQorCWlmICghdGczX2ZsYWcodHAsIEVOQUJMRV9BUEUpIHx8ICF0ZzNfZmxhZyh0cCwgRU5BQkxFX0FTRikpCiAJCXJldHVybjsKIAogCWFwZWRhdGEgPSB0ZzNfYXBlX3JlYWQzMih0cCwgVEczX0FQRV9TRUdfU0lHKTsKQEAgLTEzMDY1LDcgKzEzMzExLDcgQEAKIAlhcGVkYXRhID0gdGczX2FwZV9yZWFkMzIodHAsIFRHM19BUEVfRldfVkVSU0lPTik7CiAKIAlpZiAodGczX2FwZV9yZWFkMzIodHAsIFRHM19BUEVfRldfRkVBVFVSRVMpICYgVEczX0FQRV9GV19GRUFUVVJFX05DU0kpIHsKLQkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfQVBFX0hBU19OQ1NJOworCQl0ZzNfZmxhZ19zZXQodHAsIEFQRV9IQVNfTkNTSSk7CiAJCWZ3dHlwZSA9ICJOQ1NJIjsKIAl9IGVsc2UgewogCQlmd3R5cGUgPSAiREFTSCI7CkBAIC0xMzA4OSw3ICsxMzMzNSw3IEBACiAJaWYgKHRwLT5md192ZXJbMF0gIT0gMCkKIAkJdnBkX3ZlcnMgPSB0cnVlOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTk9fTlZSQU0pIHsKKwlpZiAodGczX2ZsYWcodHAsIE5PX05WUkFNKSkgewogCQlzdHJjYXQodHAtPmZ3X3ZlciwgInNiIik7CiAJCXJldHVybjsKIAl9CkBAIC0xMzEwNiw4ICsxMzM1Miw3IEBACiAJZWxzZQogCQlyZXR1cm47CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikgfHwKLQkgICAgICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9BUEUpIHx8IHZwZF92ZXJzKQorCWlmICghdGczX2ZsYWcodHAsIEVOQUJMRV9BU0YpIHx8IHRnM19mbGFnKHRwLCBFTkFCTEVfQVBFKSB8fCB2cGRfdmVycykKIAkJZ290byBkb25lOwogCiAJdGczX3JlYWRfbWdtdGZ3X3Zlcih0cCk7CkBAIC0xMzExOCwyMSArMTMzNjMsMTQgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2ICogX19kZXZpbml0IHRnM19maW5kX3BlZXIoc3RydWN0IHRnMyAqKTsKIAotc3RhdGljIGlubGluZSB2b2lkIHZsYW5fZmVhdHVyZXNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JZGV2LT52bGFuX2ZlYXR1cmVzIHw9IGZsYWdzOwotfQotCiBzdGF0aWMgaW5saW5lIHUzMiB0ZzNfcnhfcmV0X3Jpbmdfc2l6ZShzdHJ1Y3QgdGczICp0cCkKIHsKLQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcgfHwKLQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTkpCi0JCXJldHVybiA0MDk2OwotCWVsc2UgaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfSlVNQk9fQ0FQQUJMRSkgJiYKLQkJICEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzgwX0NMQVNTKSkKLQkJcmV0dXJuIDEwMjQ7CisJaWYgKHRnM19mbGFnKHRwLCBMUkdfUFJPRF9SSU5HX0NBUCkpCisJCXJldHVybiBURzNfUlhfUkVUX01BWF9TSVpFXzU3MTc7CisJZWxzZSBpZiAodGczX2ZsYWcodHAsIEpVTUJPX0NBUEFCTEUpICYmICF0ZzNfZmxhZyh0cCwgNTc4MF9DTEFTUykpCisJCXJldHVybiBURzNfUlhfUkVUX01BWF9TSVpFXzU3MDA7CiAJZWxzZQotCQlyZXR1cm4gNTEyOworCQlyZXR1cm4gVEczX1JYX1JFVF9NQVhfU0laRV81NzA1OwogfQogCiBzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUodGczX3dyaXRlX3Jlb3JkZXJfY2hpcHNldHMpID0gewpAQCAtMTMxNzcsNyArMTM0MTUsOCBAQAogCiAJCWlmICh0cC0+cGRldi0+ZGV2aWNlID09IFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3MTcgfHwKIAkJICAgIHRwLT5wZGV2LT5kZXZpY2UgPT0gVEczUENJX0RFVklDRV9USUdPTjNfNTcxOCB8fAotCQkgICAgdHAtPnBkZXYtPmRldmljZSA9PSBURzNQQ0lfREVWSUNFX1RJR09OM181NzE5KQorCQkgICAgdHAtPnBkZXYtPmRldmljZSA9PSBURzNQQ0lfREVWSUNFX1RJR09OM181NzE5IHx8CisJCSAgICB0cC0+cGRldi0+ZGV2aWNlID09IFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3MjApCiAJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQodHAtPnBkZXYsCiAJCQkJCSAgICAgIFRHM1BDSV9HRU4yX1BST0RJRF9BU0lDUkVWLAogCQkJCQkgICAgICAmcHJvZF9pZF9hc2ljX3Jldik7CkBAIC0xMzI1NCwxNSArMTM0OTMsMTQgQEAKIAkJCWlmIChicmlkZ2UtPnN1Ym9yZGluYXRlICYmCiAJCQkgICAgKGJyaWRnZS0+c3Vib3JkaW5hdGUtPm51bWJlciA9PQogCQkJICAgICB0cC0+cGRldi0+YnVzLT5udW1iZXIpKSB7Ci0KLQkJCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9JQ0hfV09SS0FST1VORDsKKwkJCQl0ZzNfZmxhZ19zZXQodHAsIElDSF9XT1JLQVJPVU5EKTsKIAkJCQlwY2lfZGV2X3B1dChicmlkZ2UpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CiAJfQogCi0JaWYgKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMSkpIHsKKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDEpIHsKIAkJc3RhdGljIHN0cnVjdCB0ZzNfZGV2X2lkIHsKIAkJCXUzMgl2ZW5kb3I7CiAJCQl1MzIJZGV2aWNlOwpAQCAtMTMyODcsNyArMTM1MjUsNyBAQAogCQkJICAgICB0cC0+cGRldi0+YnVzLT5udW1iZXIpICYmCiAJCQkgICAgKGJyaWRnZS0+c3Vib3JkaW5hdGUtPnN1Ym9yZGluYXRlID49CiAJCQkgICAgIHRwLT5wZGV2LT5idXMtPm51bWJlcikpIHsKLQkJCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM181NzAxX0RNQV9CVUc7CisJCQkJdGczX2ZsYWdfc2V0KHRwLCA1NzAxX0RNQV9CVUcpOwogCQkJCXBjaV9kZXZfcHV0KGJyaWRnZSk7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0xMzMwMiw4ICsxMzU0MCw4IEBACiAJICovCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzgwIHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE0KSB7Ci0JCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyXzU3ODBfQ0xBU1M7Ci0JCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfNDBCSVRfRE1BX0JVRzsKKwkJdGczX2ZsYWdfc2V0KHRwLCA1NzgwX0NMQVNTKTsKKwkJdGczX2ZsYWdfc2V0KHRwLCA0MEJJVF9ETUFfQlVHKTsKIAkJdHAtPm1zaV9jYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHRwLT5wZGV2LCBQQ0lfQ0FQX0lEX01TSSk7CiAJfSBlbHNlIHsKIAkJc3RydWN0IHBjaV9kZXYgKmJyaWRnZSA9IE5VTEw7CkBAIC0xMzMxNyw3ICsxMzU1NSw3IEBACiAJCQkgICAgIHRwLT5wZGV2LT5idXMtPm51bWJlcikgJiYKIAkJCSAgICAoYnJpZGdlLT5zdWJvcmRpbmF0ZS0+c3Vib3JkaW5hdGUgPj0KIAkJCSAgICAgdHAtPnBkZXYtPmJ1cy0+bnVtYmVyKSkgewotCQkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfNDBCSVRfRE1BX0JVRzsKKwkJCQl0ZzNfZmxhZ19zZXQodHAsIDQwQklUX0RNQV9CVUcpOwogCQkJCXBjaV9kZXZfcHV0KGJyaWRnZSk7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0xMzMzMiwxMyArMTM1NzAsMTggQEAKIAogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwNCB8fAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNCB8fAotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNykKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MjApCiAJCXRwLT5wZGV2X3BlZXIgPSB0ZzNfZmluZF9wZWVyKHRwKTsKIAogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNyB8fAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxOSB8fAotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3NjUpCi0JCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczXzU3MTdfUExVUzsKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MjApCisJCXRnM19mbGFnX3NldCh0cCwgNTcxN19QTFVTKTsKKworCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3NjUgfHwKKwkgICAgdGczX2ZsYWcodHAsIDU3MTdfUExVUykpCisJCXRnM19mbGFnX3NldCh0cCwgNTc3NjVfUExVUyk7CiAKIAkvKiBJbnRlbnRpb25hbGx5IGV4Y2x1ZGUgQVNJQ19SRVZfNTkwNiAqLwogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1NSB8fApAQCAtMTMzNDcsOTcgKzEzNTkwLDEwMiBAQAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc2MSB8fAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NSB8fAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3ODAgfHwKLQkgICAgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTcxN19QTFVTKSkKLQkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfNTc1NV9QTFVTOworCSAgICB0ZzNfZmxhZyh0cCwgNTc3NjVfUExVUykpCisJCXRnM19mbGFnX3NldCh0cCwgNTc1NV9QTFVTKTsKIAogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1MCB8fAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1MiB8fAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNiB8fAotCSAgICAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM181NzU1X1BMVVMpIHx8Ci0JICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3ODBfQ0xBU1MpKQotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl81NzUwX1BMVVM7CisJICAgIHRnM19mbGFnKHRwLCA1NzU1X1BMVVMpIHx8CisJICAgIHRnM19mbGFnKHRwLCA1NzgwX0NMQVNTKSkKKwkJdGczX2ZsYWdfc2V0KHRwLCA1NzUwX1BMVVMpOwogCi0JaWYgKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwNSkgfHwKLQkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKSkKLQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfNTcwNV9QTFVTOwotCi0JLyogNTcwMCBCMCBjaGlwcyBkbyBub3Qgc3VwcG9ydCBjaGVja3N1bW1pbmcgY29ycmVjdGx5IGR1ZQotCSAqIHRvIGhhcmR3YXJlIGJ1Z3MuCi0JICovCi0JaWYgKHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81NzAwX0IwKQotCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0JST0tFTl9DSEVDS1NVTVM7Ci0JZWxzZSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmVhdHVyZXMgPSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHIHwgTkVUSUZfRl9HUk87Ci0KLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19SWF9DSEVDS1NVTVM7Ci0JCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3NTVfUExVUykKLQkJCWZlYXR1cmVzIHw9IE5FVElGX0ZfSVBWNl9DU1VNOwotCQl0cC0+ZGV2LT5mZWF0dXJlcyB8PSBmZWF0dXJlczsKLQkJdmxhbl9mZWF0dXJlc19hZGQodHAtPmRldiwgZmVhdHVyZXMpOwotCX0KKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDUgfHwKKwkgICAgdGczX2ZsYWcodHAsIDU3NTBfUExVUykpCisJCXRnM19mbGFnX3NldCh0cCwgNTcwNV9QTFVTKTsKIAogCS8qIERldGVybWluZSBUU08gY2FwYWJpbGl0aWVzICovCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE5KQogCQk7IC8qIERvIG5vdGhpbmcuIEhXIGJ1Zy4gKi8KLQllbHNlIGlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3MTdfUExVUykKLQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfSFdfVFNPXzM7Ci0JZWxzZSBpZiAoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTc1NV9QTFVTKSB8fAorCWVsc2UgaWYgKHRnM19mbGFnKHRwLCA1Nzc2NV9QTFVTKSkKKwkJdGczX2ZsYWdfc2V0KHRwLCBIV19UU09fMyk7CisJZWxzZSBpZiAodGczX2ZsYWcodHAsIDU3NTVfUExVUykgfHwKIAkJIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KQotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9IV19UU09fMjsKLQllbHNlIGlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3NTBfUExVUykgewotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9IV19UU09fMSB8IFRHM19GTEcyX1RTT19CVUc7CisJCXRnM19mbGFnX3NldCh0cCwgSFdfVFNPXzIpOworCWVsc2UgaWYgKHRnM19mbGFnKHRwLCA1NzUwX1BMVVMpKSB7CisJCXRnM19mbGFnX3NldCh0cCwgSFdfVFNPXzEpOworCQl0ZzNfZmxhZ19zZXQodHAsIFRTT19CVUcpOwogCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTAgJiYKIAkJICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgPj0gQ0hJUFJFVl9JRF81NzUwX0MyKQotCQkJdHAtPnRnM19mbGFnczIgJj0gflRHM19GTEcyX1RTT19CVUc7CisJCQl0ZzNfZmxhZ19jbGVhcih0cCwgVFNPX0JVRyk7CiAJfSBlbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcwMCAmJgogCQkgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcwMSAmJgogCQkgICB0cC0+cGNpX2NoaXBfcmV2X2lkICE9IENISVBSRVZfSURfNTcwNV9BMCkgewotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9UU09fQlVHOworCQkJdGczX2ZsYWdfc2V0KHRwLCBUU09fQlVHKTsKIAkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzA1KQogCQkJdHAtPmZ3X25lZWRlZCA9IEZJUk1XQVJFX1RHM1RTTzU7CiAJCWVsc2UKIAkJCXRwLT5md19uZWVkZWQgPSBGSVJNV0FSRV9URzNUU087CiAJfQogCisJLyogU2VsZWN0aXZlbHkgYWxsb3cgVFNPIGJhc2VkIG9uIG9wZXJhdGluZyBjb25kaXRpb25zICovCisJaWYgKHRnM19mbGFnKHRwLCBIV19UU09fMSkgfHwKKwkgICAgdGczX2ZsYWcodHAsIEhXX1RTT18yKSB8fAorCSAgICB0ZzNfZmxhZyh0cCwgSFdfVFNPXzMpIHx8CisJICAgICh0cC0+ZndfbmVlZGVkICYmICF0ZzNfZmxhZyh0cCwgRU5BQkxFX0FTRikpKQorCQl0ZzNfZmxhZ19zZXQodHAsIFRTT19DQVBBQkxFKTsKKwllbHNlIHsKKwkJdGczX2ZsYWdfY2xlYXIodHAsIFRTT19DQVBBQkxFKTsKKwkJdGczX2ZsYWdfY2xlYXIodHAsIFRTT19CVUcpOworCQl0cC0+ZndfbmVlZGVkID0gTlVMTDsKKwl9CisKKwlpZiAodHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3MDFfQTApCisJCXRwLT5md19uZWVkZWQgPSBGSVJNV0FSRV9URzM7CisKIAl0cC0+aXJxX21heCA9IDE7CiAKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpIHsKLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19TVVBQT1JUX01TSTsKKwlpZiAodGczX2ZsYWcodHAsIDU3NTBfUExVUykpIHsKKwkJdGczX2ZsYWdfc2V0KHRwLCBTVVBQT1JUX01TSSk7CiAJCWlmIChHRVRfQ0hJUF9SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQ0hJUFJFVl81NzUwX0FYIHx8CiAJCSAgICBHRVRfQ0hJUF9SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQ0hJUFJFVl81NzUwX0JYIHx8CiAJCSAgICAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTQgJiYKIAkJICAgICB0cC0+cGNpX2NoaXBfcmV2X2lkIDw9IENISVBSRVZfSURfNTcxNF9BMiAmJgogCQkgICAgIHRwLT5wZGV2X3BlZXIgPT0gdHAtPnBkZXYpKQotCQkJdHAtPnRnM19mbGFncyAmPSB+VEczX0ZMQUdfU1VQUE9SVF9NU0k7CisJCQl0ZzNfZmxhZ19jbGVhcih0cCwgU1VQUE9SVF9NU0kpOwogCi0JCWlmICgodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM181NzU1X1BMVVMpIHx8CisJCWlmICh0ZzNfZmxhZyh0cCwgNTc1NV9QTFVTKSB8fAogCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpIHsKLQkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyXzFTSE9UX01TSTsKKwkJCXRnM19mbGFnX3NldCh0cCwgMVNIT1RfTVNJKTsKIAkJfQogCi0JCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczXzU3MTdfUExVUykgewotCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19TVVBQT1JUX01TSVg7CisJCWlmICh0ZzNfZmxhZyh0cCwgNTc3NjVfUExVUykpIHsKKwkJCXRnM19mbGFnX3NldCh0cCwgU1VQUE9SVF9NU0lYKTsKIAkJCXRwLT5pcnFfbWF4ID0gVEczX0lSUV9NQVhfVkVDUzsKIAkJfQogCX0KIAotCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNyB8fAotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxOSB8fAotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikKLQkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfU0hPUlRfRE1BX0JVRzsKLQllbHNlIGlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTc1NV9QTFVTKSkgewotCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM180R19ETUFfQk5EUllfQlVHOwotCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM180MEJJVF9ETUFfTElNSVRfQlVHOwotCX0KKwkvKiBBbGwgY2hpcHMgY2FuIGdldCBjb25mdXNlZCBpZiBUWCBidWZmZXJzCisJICogc3RyYWRkbGUgdGhlIDRHQiBhZGRyZXNzIGJvdW5kYXJ5LgorCSAqLworCXRnM19mbGFnX3NldCh0cCwgNEdfRE1BX0JORFJZX0JVRyk7CiAKLQlpZiAoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTcxN19QTFVTKSAmJgorCWlmICh0ZzNfZmxhZyh0cCwgNTc1NV9QTFVTKSkKKwkJdGczX2ZsYWdfc2V0KHRwLCBTSE9SVF9ETUFfQlVHKTsKKwllbHNlCisJCXRnM19mbGFnX3NldCh0cCwgNDBCSVRfRE1BX0xJTUlUX0JVRyk7CisKKwlpZiAodGczX2ZsYWcodHAsIDU3MTdfUExVUykpCisJCXRnM19mbGFnX3NldCh0cCwgTFJHX1BST0RfUklOR19DQVApOworCisJaWYgKHRnM19mbGFnKHRwLCA1Nzc2NV9QTFVTKSAmJgogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcxOSkKLQkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfVVNFX0pVTUJPX0JERkxBRzsKKwkJdGczX2ZsYWdfc2V0KHRwLCBVU0VfSlVNQk9fQkRGTEFHKTsKIAotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSB8fAotCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzgwX0NMQVNTKSB8fAotCSAgICAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfSlVNQk9fQkRGTEFHKSkKLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19KVU1CT19DQVBBQkxFOworCWlmICghdGczX2ZsYWcodHAsIDU3MDVfUExVUykgfHwKKwkgICAgdGczX2ZsYWcodHAsIDU3ODBfQ0xBU1MpIHx8CisJICAgIHRnM19mbGFnKHRwLCBVU0VfSlVNQk9fQkRGTEFHKSkKKwkJdGczX2ZsYWdfc2V0KHRwLCBKVU1CT19DQVBBQkxFKTsKIAogCXBjaV9yZWFkX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgVEczUENJX1BDSVNUQVRFLAogCQkJICAgICAgJnBjaV9zdGF0ZV9yZWcpOwpAQCAtMTM0NDYsMTAgKzEzNjk0LDExIEBACiAJaWYgKHRwLT5wY2llX2NhcCAhPSAwKSB7CiAJCXUxNiBsbmtjdGw7CiAKLQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfUENJX0VYUFJFU1M7CisJCXRnM19mbGFnX3NldCh0cCwgUENJX0VYUFJFU1MpOwogCiAJCXRwLT5wY2llX3JlYWRycSA9IDQwOTY7Ci0JCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxOSkKKwkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE5IHx8CisJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcyMCkKIAkJCXRwLT5wY2llX3JlYWRycSA9IDIwNDg7CiAKIAkJcGNpZV9zZXRfcmVhZHJxKHRwLT5wZGV2LCB0cC0+cGNpZV9yZWFkcnEpOwpAQCAtMTM0NTgsMjAgKzEzNzA3LDIzIEBACiAJCQkJICAgICB0cC0+cGNpZV9jYXAgKyBQQ0lfRVhQX0xOS0NUTCwKIAkJCQkgICAgICZsbmtjdGwpOwogCQlpZiAobG5rY3RsICYgUENJX0VYUF9MTktDVExfQ0xLUkVRX0VOKSB7Ci0JCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpCi0JCQkJdHAtPnRnM19mbGFnczIgJj0gflRHM19GTEcyX0hXX1RTT18yOworCQkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PQorCQkJICAgIEFTSUNfUkVWXzU5MDYpIHsKKwkJCQl0ZzNfZmxhZ19jbGVhcih0cCwgSFdfVFNPXzIpOworCQkJCXRnM19mbGFnX2NsZWFyKHRwLCBUU09fQ0FQQUJMRSk7CisJCQl9CiAJCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODQgfHwKIAkJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc2MSB8fAogCQkJICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81Nzc4MF9BMCB8fAogCQkJICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81Nzc4MF9BMSkKLQkJCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19DTEtSRVFfQlVHOworCQkJCXRnM19mbGFnX3NldCh0cCwgQ0xLUkVRX0JVRyk7CiAJCX0gZWxzZSBpZiAodHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3MTdfQTApIHsKLQkJCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX0wxUExMUERfRU47CisJCQl0ZzNfZmxhZ19zZXQodHAsIEwxUExMUERfRU4pOwogCQl9CiAJfSBlbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NSkgewotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9QQ0lfRVhQUkVTUzsKLQl9IGVsc2UgaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpIHx8Ci0JCSAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3ODBfQ0xBU1MpKSB7CisJCXRnM19mbGFnX3NldCh0cCwgUENJX0VYUFJFU1MpOworCX0gZWxzZSBpZiAoIXRnM19mbGFnKHRwLCA1NzA1X1BMVVMpIHx8CisJCSAgIHRnM19mbGFnKHRwLCA1NzgwX0NMQVNTKSkgewogCQl0cC0+cGNpeF9jYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHRwLT5wZGV2LCBQQ0lfQ0FQX0lEX1BDSVgpOwogCQlpZiAoIXRwLT5wY2l4X2NhcCkgewogCQkJZGV2X2VycigmdHAtPnBkZXYtPmRldiwKQEAgLTEzNDgwLDcgKzEzNzMyLDcgQEAKIAkJfQogCiAJCWlmICghKHBjaV9zdGF0ZV9yZWcgJiBQQ0lTVEFURV9DT05WX1BDSV9NT0RFKSkKLQkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfUENJWF9NT0RFOworCQkJdGczX2ZsYWdfc2V0KHRwLCBQQ0lYX01PREUpOwogCX0KIAogCS8qIElmIHdlIGhhdmUgYW4gQU1EIDc2MiBvciBWSUEgSzhUODAwIGNoaXBzZXQsIHdyaXRlCkBAIC0xMzQ5MCw4ICsxMzc0Miw4IEBACiAJICogcG9zdGVkIHRvIHRoZSBjaGlwIGluIG9yZGVyLgogCSAqLwogCWlmIChwY2lfZGV2X3ByZXNlbnQodGczX3dyaXRlX3Jlb3JkZXJfY2hpcHNldHMpICYmCi0JICAgICEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QQ0lfRVhQUkVTUykpCi0JCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTUJPWF9XUklURV9SRU9SREVSOworCSAgICAhdGczX2ZsYWcodHAsIFBDSV9FWFBSRVNTKSkKKwkJdGczX2ZsYWdfc2V0KHRwLCBNQk9YX1dSSVRFX1JFT1JERVIpOwogCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUodHAtPnBkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsCiAJCQkgICAgICZ0cC0+cGNpX2NhY2hlbGluZV9zeik7CkBAIC0xMzUwOCwxNyArMTM3NjAsMTcgQEAKIAkJLyogNTcwMCBCWCBjaGlwcyBuZWVkIHRvIGhhdmUgdGhlaXIgVFggcHJvZHVjZXIgaW5kZXgKIAkJICogbWFpbGJveGVzIHdyaXR0ZW4gdHdpY2UgdG8gd29ya2Fyb3VuZCBhIGJ1Zy4KIAkJICovCi0JCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfVFhEX01CT1hfSFdCVUc7CisJCXRnM19mbGFnX3NldCh0cCwgVFhEX01CT1hfSFdCVUcpOwogCiAJCS8qIElmIHdlIGFyZSBpbiBQQ0ktWCBtb2RlLCBlbmFibGUgcmVnaXN0ZXIgd3JpdGUgd29ya2Fyb3VuZC4KIAkJICoKIAkJICogVGhlIHdvcmthcm91bmQgaXMgdG8gdXNlIGluZGlyZWN0IHJlZ2lzdGVyIGFjY2Vzc2VzCiAJCSAqIGZvciBhbGwgY2hpcCB3cml0ZXMgbm90IHRvIG1haWxib3ggcmVnaXN0ZXJzLgogCQkgKi8KLQkJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19QQ0lYX01PREUpIHsKKwkJaWYgKHRnM19mbGFnKHRwLCBQQ0lYX01PREUpKSB7CiAJCQl1MzIgcG1fcmVnOwogCi0JCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1BDSVhfVEFSR0VUX0hXQlVHOworCQkJdGczX2ZsYWdfc2V0KHRwLCBQQ0lYX1RBUkdFVF9IV0JVRyk7CiAKIAkJCS8qIFRoZSBjaGlwIGNhbiBoYXZlIGl0J3MgcG93ZXIgbWFuYWdlbWVudCBQQ0kgY29uZmlnCiAJCQkgKiBzcGFjZSByZWdpc3RlcnMgY2xvYmJlcmVkIGR1ZSB0byB0aGlzIGJ1Zy4KQEAgLTEzNTQxLDkgKzEzNzkzLDkgQEAKIAl9CiAKIAlpZiAoKHBjaV9zdGF0ZV9yZWcgJiBQQ0lTVEFURV9CVVNfU1BFRURfSElHSCkgIT0gMCkKLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19QQ0lfSElHSF9TUEVFRDsKKwkJdGczX2ZsYWdfc2V0KHRwLCBQQ0lfSElHSF9TUEVFRCk7CiAJaWYgKChwY2lfc3RhdGVfcmVnICYgUENJU1RBVEVfQlVTXzMyQklUKSAhPSAwKQotCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1BDSV8zMkJJVDsKKwkJdGczX2ZsYWdfc2V0KHRwLCBQQ0lfMzJCSVQpOwogCiAJLyogQ2hpcC1zcGVjaWZpYyBmaXh1cCBmcm9tIEJyb2FkY29tIGRyaXZlciAqLwogCWlmICgodHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3MDRfQTApICYmCkBAIC0xMzU2MSwxMCArMTM4MTMsMTAgQEAKIAl0cC0+d3JpdGUzMl9yeF9tYm94ID0gdGczX3dyaXRlMzI7CiAKIAkvKiBWYXJpb3VzIHdvcmthcm91bmQgcmVnaXN0ZXIgYWNjZXNzIG1ldGhvZHMgKi8KLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1BDSVhfVEFSR0VUX0hXQlVHKQorCWlmICh0ZzNfZmxhZyh0cCwgUENJWF9UQVJHRVRfSFdCVUcpKQogCQl0cC0+d3JpdGUzMiA9IHRnM193cml0ZV9pbmRpcmVjdF9yZWczMjsKIAllbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMSB8fAotCQkgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BDSV9FWFBSRVNTKSAmJgorCQkgKHRnM19mbGFnKHRwLCBQQ0lfRVhQUkVTUykgJiYKIAkJICB0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTc1MF9BMCkpIHsKIAkJLyoKIAkJICogQmFjayB0byBiYWNrIHJlZ2lzdGVyIHdyaXRlcyBjYW4gY2F1c2UgcHJvYmxlbXMgb24gdGhlc2UKQEAgLTEzNTc2LDE0ICsxMzgyOCwxMyBAQAogCQl0cC0+d3JpdGUzMiA9IHRnM193cml0ZV9mbHVzaF9yZWczMjsKIAl9CiAKLQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19UWERfTUJPWF9IV0JVRykgfHwKLQkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19NQk9YX1dSSVRFX1JFT1JERVIpKSB7CisJaWYgKHRnM19mbGFnKHRwLCBUWERfTUJPWF9IV0JVRykgfHwgdGczX2ZsYWcodHAsIE1CT1hfV1JJVEVfUkVPUkRFUikpIHsKIAkJdHAtPndyaXRlMzJfdHhfbWJveCA9IHRnM193cml0ZTMyX3R4X21ib3g7Ci0JCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTUJPWF9XUklURV9SRU9SREVSKQorCQlpZiAodGczX2ZsYWcodHAsIE1CT1hfV1JJVEVfUkVPUkRFUikpCiAJCQl0cC0+d3JpdGUzMl9yeF9tYm94ID0gdGczX3dyaXRlX2ZsdXNoX3JlZzMyOwogCX0KIAotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0lDSF9XT1JLQVJPVU5EKSB7CisJaWYgKHRnM19mbGFnKHRwLCBJQ0hfV09SS0FST1VORCkpIHsKIAkJdHAtPnJlYWQzMiA9IHRnM19yZWFkX2luZGlyZWN0X3JlZzMyOwogCQl0cC0+d3JpdGUzMiA9IHRnM193cml0ZV9pbmRpcmVjdF9yZWczMjsKIAkJdHAtPnJlYWQzMl9tYm94ID0gdGczX3JlYWRfaW5kaXJlY3RfbWJveDsKQEAgLTEzNjA2LDEzICsxMzg1NywxMyBAQAogCX0KIAogCWlmICh0cC0+d3JpdGUzMiA9PSB0ZzNfd3JpdGVfaW5kaXJlY3RfcmVnMzIgfHwKLQkgICAgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUENJWF9NT0RFKSAmJgorCSAgICAodGczX2ZsYWcodHAsIFBDSVhfTU9ERSkgJiYKIAkgICAgIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMCB8fAogCSAgICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzAxKSkpCi0JCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfU1JBTV9VU0VfQ09ORklHOworCQl0ZzNfZmxhZ19zZXQodHAsIFNSQU1fVVNFX0NPTkZJRyk7CiAKIAkvKiBHZXQgZWVwcm9tIGh3IGNvbmZpZyBiZWZvcmUgY2FsbGluZyB0ZzNfc2V0X3Bvd2VyX3N0YXRlKCkuCi0JICogSW4gcGFydGljdWxhciwgdGhlIFRHM19GTEcyX0lTX05JQyBmbGFnIG11c3QgYmUKKwkgKiBJbiBwYXJ0aWN1bGFyLCB0aGUgVEczX0ZMQUdfSVNfTklDIGZsYWcgbXVzdCBiZQogCSAqIGRldGVybWluZWQgYmVmb3JlIGNhbGxpbmcgdGczX3NldF9wb3dlcl9zdGF0ZSgpIHNvIHRoYXQKIAkgKiB3ZSBrbm93IHdoZXRoZXIgb3Igbm90IHRvIHN3aXRjaCBvdXQgb2YgVmF1eCBwb3dlci4KIAkgKiBXaGVuIHRoZSBmbGFnIGlzIHNldCwgaXQgbWVhbnMgdGhhdCBHUElPMSBpcyB1c2VkIGZvciBlZXByb20KQEAgLTEzNjIxLDcgKzEzODcyLDcgQEAKIAkgKi8KIAl0ZzNfZ2V0X2VlcHJvbV9od19jZmcodHApOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkgeworCWlmICh0ZzNfZmxhZyh0cCwgRU5BQkxFX0FQRSkpIHsKIAkJLyogQWxsb3cgcmVhZHMgYW5kIHdyaXRlcyB0byB0aGUKIAkJICogQVBFIHJlZ2lzdGVyIGFuZCBtZW1vcnkgc3BhY2UuCiAJCSAqLwpAQCAtMTM2MzYsMTYgKzEzODg3LDE2IEBACiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzYxIHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg1IHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc4MCB8fAotCSAgICAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM181NzE3X1BMVVMpKQotCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0NQTVVfUFJFU0VOVDsKKwkgICAgdGczX2ZsYWcodHAsIDU3NzY1X1BMVVMpKQorCQl0ZzNfZmxhZ19zZXQodHAsIENQTVVfUFJFU0VOVCk7CiAKLQkvKiBTZXQgdXAgdHAtPmdyY19sb2NhbF9jdHJsIGJlZm9yZSBjYWxsaW5nIHRnX3Bvd2VyX3VwKCkuCisJLyogU2V0IHVwIHRwLT5ncmNfbG9jYWxfY3RybCBiZWZvcmUgY2FsbGluZyB0ZzNfcG93ZXJfdXAoKS4KIAkgKiBHUElPMSBkcml2ZW4gaGlnaCB3aWxsIGJyaW5nIDU3MDAncyBleHRlcm5hbCBQSFkgb3V0IG9mIHJlc2V0LgogCSAqIEl0IGlzIGFsc28gdXNlZCBhcyBlZXByb20gd3JpdGUgcHJvdGVjdCBvbiBMT01zLgogCSAqLwogCXRwLT5ncmNfbG9jYWxfY3RybCA9IEdSQ19MQ0xDVFJMX0lOVF9PTl9BVFROIHwgR1JDX0xDTENUUkxfQVVUT19TRUVQUk9NOwotCWlmICgoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDApIHx8Ci0JICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRUVQUk9NX1dSSVRFX1BST1QpKQorCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMCB8fAorCSAgICB0ZzNfZmxhZyh0cCwgRUVQUk9NX1dSSVRFX1BST1QpKQogCQl0cC0+Z3JjX2xvY2FsX2N0cmwgfD0gKEdSQ19MQ0xDVFJMX0dQSU9fT0UxIHwKIAkJCQkgICAgICAgR1JDX0xDTENUUkxfR1BJT19PVVRQVVQxKTsKIAkvKiBVbnVzZWQgR1BJTzMgbXVzdCBiZSBkcml2ZW4gYXMgb3V0cHV0IG9uIDU3NTIgYmVjYXVzZSB0aGVyZQpAQCAtMTM2NjMsNyArMTM5MTQsNyBAQAogCSAgICB0cC0+cGRldi0+ZGV2aWNlID09IFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3NjFTKSB7CiAJCS8qIFR1cm4gb2ZmIHRoZSBkZWJ1ZyBVQVJULiAqLwogCQl0cC0+Z3JjX2xvY2FsX2N0cmwgfD0gR1JDX0xDTENUUkxfR1BJT19VQVJUX1NFTDsKLQkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSVNfTklDKQorCQlpZiAodGczX2ZsYWcodHAsIElTX05JQykpCiAJCQkvKiBLZWVwIFZNYWluIHBvd2VyLiAqLwogCQkJdHAtPmdyY19sb2NhbF9jdHJsIHw9IEdSQ19MQ0xDVFJMX0dQSU9fT0UwIHwKIAkJCQkJICAgICAgR1JDX0xDTENUUkxfR1BJT19PVVRQVVQwOwpAQCAtMTM2NzksMjYgKzEzOTMwLDI1IEBACiAJLyogRGVyaXZlIGluaXRpYWwganVtYm8gbW9kZSBmcm9tIE1UVSBhc3NpZ25lZCBpbgogCSAqIGV0aGVyX3NldHVwKCkgdmlhIHRoZSBhbGxvY19ldGhlcmRldigpIGNhbGwKIAkgKi8KLQlpZiAodHAtPmRldi0+bXR1ID4gRVRIX0RBVEFfTEVOICYmCi0JICAgICEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzgwX0NMQVNTKSkKLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19KVU1CT19SSU5HX0VOQUJMRTsKKwlpZiAodHAtPmRldi0+bXR1ID4gRVRIX0RBVEFfTEVOICYmICF0ZzNfZmxhZyh0cCwgNTc4MF9DTEFTUykpCisJCXRnM19mbGFnX3NldCh0cCwgSlVNQk9fUklOR19FTkFCTEUpOwogCiAJLyogRGV0ZXJtaW5lIFdha2VPbkxhbiBzcGVlZCB0byB1c2UuICovCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzAwIHx8CiAJICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81NzAxX0EwIHx8CiAJICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81NzAxX0IwIHx8CiAJICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81NzAxX0IyKSB7Ci0JCXRwLT50ZzNfZmxhZ3MgJj0gfihURzNfRkxBR19XT0xfU1BFRURfMTAwTUIpOworCQl0ZzNfZmxhZ19jbGVhcih0cCwgV09MX1NQRUVEXzEwME1CKTsKIAl9IGVsc2UgewotCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1dPTF9TUEVFRF8xMDBNQjsKKwkJdGczX2ZsYWdfc2V0KHRwLCBXT0xfU1BFRURfMTAwTUIpOwogCX0KIAogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikKIAkJdHAtPnBoeV9mbGFncyB8PSBURzNfUEhZRkxHX0lTX0ZFVDsKIAogCS8qIEEgZmV3IGJvYXJkcyBkb24ndCB3YW50IEV0aGVybmV0QFdpcmVTcGVlZCBwaHkgZmVhdHVyZSAqLwotCWlmICgoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDApIHx8Ci0JICAgICgoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDUpICYmCisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzAwIHx8CisJICAgIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwNSAmJgogCSAgICAgKHRwLT5wY2lfY2hpcF9yZXZfaWQgIT0gQ0hJUFJFVl9JRF81NzA1X0EwKSAmJgogCSAgICAgKHRwLT5wY2lfY2hpcF9yZXZfaWQgIT0gQ0hJUFJFVl9JRF81NzA1X0ExKSkgfHwKIAkgICAgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0ZFVCkgfHwKQEAgLTEzNzExLDExICsxMzk2MSwxMSBAQAogCWlmICh0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTcwNF9BMCkKIAkJdHAtPnBoeV9mbGFncyB8PSBURzNfUEhZRkxHXzU3MDRfQTBfQlVHOwogCi0JaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykgJiYKKwlpZiAodGczX2ZsYWcodHAsIDU3MDVfUExVUykgJiYKIAkgICAgISh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19GRVQpICYmCiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81Nzg1ICYmCiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81Nzc4MCAmJgotCSAgICAhKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTcxN19QTFVTKSkgeworCSAgICAhdGczX2ZsYWcodHAsIDU3NzY1X1BMVVMpKSB7CiAJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1NSB8fAogCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODcgfHwKIAkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg0IHx8CkBAIC0xMzczNiw3ICsxMzk4Niw3IEBACiAJCQl0cC0+cGh5X290cCA9IFRHM19PVFBfREVGQVVMVDsKIAl9CiAKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0NQTVVfUFJFU0VOVCkKKwlpZiAodGczX2ZsYWcodHAsIENQTVVfUFJFU0VOVCkpCiAJCXRwLT5taV9tb2RlID0gTUFDX01JX01PREVfNTAwS0haX0NPTlNUOwogCWVsc2UKIAkJdHAtPm1pX21vZGUgPSBNQUNfTUlfTU9ERV9CQVNFOwpAQCAtMTM3NDYsOSArMTM5OTYsMTcgQEAKIAkgICAgR0VUX0NISVBfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IENISVBSRVZfNTcwMF9CWCkKIAkJdHAtPmNvYWxlc2NlX21vZGUgfD0gSE9TVENDX01PREVfMzJCWVRFOwogCisJLyogU2V0IHRoZXNlIGJpdHMgdG8gZW5hYmxlIHN0YXRpc3RpY3Mgd29ya2Fyb3VuZC4gKi8KKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcgfHwKKwkgICAgdHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3MTlfQTAgfHwKKwkgICAgdHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3MjBfQTApIHsKKwkJdHAtPmNvYWxlc2NlX21vZGUgfD0gSE9TVENDX01PREVfQVRUTjsKKwkJdHAtPmdyY19tb2RlIHw9IEdSQ19NT0RFX0lSUV9PTl9GTE9XX0FUVE47CisJfQorCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg1IHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc4MCkKLQkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfVVNFX1BIWUxJQjsKKwkJdGczX2ZsYWdfc2V0KHRwLCBVU0VfUEhZTElCKTsKIAogCWVyciA9IHRnM19tZGlvX2luaXQodHApOwogCWlmIChlcnIpCkBAIC0xMzc1Niw3ICsxNDAxNCwxNSBAQAogCiAJLyogSW5pdGlhbGl6ZSBkYXRhL2Rlc2NyaXB0b3IgYnl0ZS93b3JkIHN3YXBwaW5nLiAqLwogCXZhbCA9IHRyMzIoR1JDX01PREUpOwotCXZhbCAmPSBHUkNfTU9ERV9IT1NUX1NUQUNLVVA7CisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzIwKQorCQl2YWwgJj0gKEdSQ19NT0RFX0JZVEVfU1dBUF9CMkhSWF9EQVRBIHwKKwkJCUdSQ19NT0RFX1dPUkRfU1dBUF9CMkhSWF9EQVRBIHwKKwkJCUdSQ19NT0RFX0IySFJYX0VOQUJMRSB8CisJCQlHUkNfTU9ERV9IVFgyQl9FTkFCTEUgfAorCQkJR1JDX01PREVfSE9TVF9TVEFDS1VQKTsKKwllbHNlCisJCXZhbCAmPSBHUkNfTU9ERV9IT1NUX1NUQUNLVVA7CisKIAl0dzMyKEdSQ19NT0RFLCB2YWwgfCB0cC0+Z3JjX21vZGUpOwogCiAJdGczX3N3aXRjaF9jbG9ja3ModHApOwpAQCAtMTM3NjcsNyArMTQwMzMsNyBAQAogCXBjaV9yZWFkX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgVEczUENJX1BDSVNUQVRFLAogCQkJICAgICAgJnBjaV9zdGF0ZV9yZWcpOwogCWlmICgocGNpX3N0YXRlX3JlZyAmIFBDSVNUQVRFX0NPTlZfUENJX01PREUpID09IDAgJiYKLQkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19QQ0lYX1RBUkdFVF9IV0JVRykgPT0gMCkgeworCSAgICAhdGczX2ZsYWcodHAsIFBDSVhfVEFSR0VUX0hXQlVHKSkgewogCQl1MzIgY2hpcHJldmlkID0gR0VUX0NISVBfUkVWX0lEKHRwLT5taXNjX2hvc3RfY3RybCk7CiAKIAkJaWYgKGNoaXByZXZpZCA9PSBDSElQUkVWX0lEXzU3MDFfQTAgfHwKQEAgLTEzNzg2LDcgKzE0MDUyLDcgQEAKIAkJCXdyaXRlbCgweDAwMDAwMDAwLCBzcmFtX2Jhc2UgKyA0KTsKIAkJCXdyaXRlbCgweGZmZmZmZmZmLCBzcmFtX2Jhc2UgKyA0KTsKIAkJCWlmIChyZWFkbChzcmFtX2Jhc2UpICE9IDB4MDAwMDAwMDApCi0JCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19QQ0lYX1RBUkdFVF9IV0JVRzsKKwkJCQl0ZzNfZmxhZ19zZXQodHAsIFBDSVhfVEFSR0VUX0hXQlVHKTsKIAkJfQogCX0KIApAQCAtMTM3OTksMTIgKzE0MDY1LDEyIEBACiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzA1ICYmCiAJICAgIChncmNfbWlzY19jZmcgPT0gR1JDX01JU0NfQ0ZHX0JPQVJEX0lEXzU3ODggfHwKIAkgICAgIGdyY19taXNjX2NmZyA9PSBHUkNfTUlTQ19DRkdfQk9BUkRfSURfNTc4OE0pKQotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9JU181Nzg4OworCQl0ZzNfZmxhZ19zZXQodHAsIElTXzU3ODgpOwogCi0JaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9JU181Nzg4KSAmJgotCSAgICAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MDApKQotCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1RBR0dFRF9TVEFUVVM7Ci0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19UQUdHRURfU1RBVFVTKSB7CisJaWYgKCF0ZzNfZmxhZyh0cCwgSVNfNTc4OCkgJiYKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MDApCisJCXRnM19mbGFnX3NldCh0cCwgVEFHR0VEX1NUQVRVUyk7CisJaWYgKHRnM19mbGFnKHRwLCBUQUdHRURfU1RBVFVTKSkgewogCQl0cC0+Y29hbGVzY2VfbW9kZSB8PSAoSE9TVENDX01PREVfQ0xSVElDS19SWEJEIHwKIAkJCQkgICAgICBIT1NUQ0NfTU9ERV9DTFJUSUNLX1RYQkQpOwogCkBAIC0xMzgxNCw3ICsxNDA4MCw3IEBACiAJfQogCiAJLyogUHJlc2VydmUgdGhlIEFQRSBNQUNfTU9ERSBiaXRzICovCi0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkKKwlpZiAodGczX2ZsYWcodHAsIEVOQUJMRV9BUEUpKQogCQl0cC0+bWFjX21vZGUgPSBNQUNfTU9ERV9BUEVfVFhfRU4gfCBNQUNfTU9ERV9BUEVfUlhfRU47CiAJZWxzZQogCQl0cC0+bWFjX21vZGUgPSBURzNfREVGX01BQ19NT0RFOwpAQCAtMTM4NjEsOSArMTQxMjcsOSBAQAogCSAqIHN0YXR1cyByZWdpc3RlciBpbiB0aG9zZSBjYXNlcy4KIAkgKi8KIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDApCi0JCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfVVNFX0xJTktDSEdfUkVHOworCQl0ZzNfZmxhZ19zZXQodHAsIFVTRV9MSU5LQ0hHX1JFRyk7CiAJZWxzZQotCQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19VU0VfTElOS0NIR19SRUc7CisJCXRnM19mbGFnX2NsZWFyKHRwLCBVU0VfTElOS0NIR19SRUcpOwogCiAJLyogVGhlIGxlZF9jdHJsIGlzIHNldCBkdXJpbmcgdGczX3BoeV9wcm9iZSwgaGVyZSB3ZSBtaWdodAogCSAqIGhhdmUgdG8gZm9yY2UgdGhlIGxpbmsgc3RhdHVzIHBvbGxpbmcgbWVjaGFuaXNtIGJhc2VkCkBAIC0xMzg3MywxOSArMTQxMzksMTkgQEAKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDEgJiYKIAkgICAgISh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19QSFlfU0VSREVTKSkgewogCQl0cC0+cGh5X2ZsYWdzIHw9IFRHM19QSFlGTEdfVVNFX01JX0lOVEVSUlVQVDsKLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19VU0VfTElOS0NIR19SRUc7CisJCXRnM19mbGFnX3NldCh0cCwgVVNFX0xJTktDSEdfUkVHKTsKIAl9CiAKIAkvKiBGb3IgYWxsIFNFUkRFUyB3ZSBwb2xsIHRoZSBNQUMgc3RhdHVzIHJlZ2lzdGVyLiAqLwogCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19QSFlfU0VSREVTKQotCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1BPTExfU0VSREVTOworCQl0ZzNfZmxhZ19zZXQodHAsIFBPTExfU0VSREVTKTsKIAllbHNlCi0JCXRwLT50ZzNfZmxhZ3MgJj0gflRHM19GTEFHX1BPTExfU0VSREVTOworCQl0ZzNfZmxhZ19jbGVhcih0cCwgUE9MTF9TRVJERVMpOwogCiAJdHAtPnJ4X29mZnNldCA9IE5FVF9JUF9BTElHTjsKIAl0cC0+cnhfY29weV90aHJlc2ggPSBURzNfUlhfQ09QWV9USFJFU0hPTEQ7CiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzAxICYmCi0JICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUENJWF9NT0RFKSAhPSAwKSB7CisJICAgIHRnM19mbGFnKHRwLCBQQ0lYX01PREUpKSB7CiAJCXRwLT5yeF9vZmZzZXQgPSAwOwogI2lmbmRlZiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUwogCQl0cC0+cnhfY29weV90aHJlc2ggPSB+KHUxNikwOwpAQCAtMTM5MDYsNyArMTQxNzIsNyBAQAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1NSkKIAkJdHAtPnJ4X3N0ZF9tYXhfcG9zdCA9IDg7CiAKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0FTUE1fV09SS0FST1VORCkKKwlpZiAodGczX2ZsYWcodHAsIEFTUE1fV09SS0FST1VORCkpCiAJCXRwLT5wd3JtZ210X3RocmVzaCA9IHRyMzIoUENJRV9QV1JfTUdNVF9USFJFU0gpICYKIAkJCQkgICAgIFBDSUVfUFdSX01HTVRfTDFfVEhSRVNIX01TSzsKIApAQCAtMTM5NTMsMTYgKzE0MjE5LDE1IEBACiAjZW5kaWYKIAogCW1hY19vZmZzZXQgPSAweDdjOwotCWlmICgoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDQpIHx8Ci0JICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3ODBfQ0xBU1MpKSB7CisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzA0IHx8CisJICAgIHRnM19mbGFnKHRwLCA1NzgwX0NMQVNTKSkgewogCQlpZiAodHIzMihURzNQQ0lfRFVBTF9NQUNfQ1RSTCkgJiBEVUFMX01BQ19DVFJMX0lEKQogCQkJbWFjX29mZnNldCA9IDB4Y2M7CiAJCWlmICh0ZzNfbnZyYW1fbG9jayh0cCkpCiAJCQl0dzMyX2YoTlZSQU1fQ01ELCBOVlJBTV9DTURfUkVTRVQpOwogCQllbHNlCiAJCQl0ZzNfbnZyYW1fdW5sb2NrKHRwKTsKLQl9IGVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3IHx8Ci0JCSAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE5KSB7CisJfSBlbHNlIGlmICh0ZzNfZmxhZyh0cCwgNTcxN19QTFVTKSkgewogCQlpZiAoUENJX0ZVTkModHAtPnBkZXYtPmRldmZuKSAmIDEpCiAJCQltYWNfb2Zmc2V0ID0gMHhjYzsKIAkJaWYgKFBDSV9GVU5DKHRwLT5wZGV2LT5kZXZmbikgPiAxKQpAQCAtMTM5ODcsNyArMTQyNTIsNyBAQAogCX0KIAlpZiAoIWFkZHJfb2spIHsKIAkJLyogTmV4dCwgdHJ5IE5WUkFNLiAqLwotCQlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX05PX05WUkFNKSAmJgorCQlpZiAoIXRnM19mbGFnKHRwLCBOT19OVlJBTSkgJiYKIAkJICAgICF0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBtYWNfb2Zmc2V0ICsgMCwgJmhpKSAmJgogCQkgICAgIXRnM19udnJhbV9yZWFkX2JlMzIodHAsIG1hY19vZmZzZXQgKyA0LCAmbG8pKSB7CiAJCQltZW1jcHkoJmRldi0+ZGV2X2FkZHJbMF0sICgoY2hhciAqKSZoaSkgKyAyLCAyKTsKQEAgLTE0MDM4LDcgKzE0MzAzLDcgQEAKIAkgKi8KIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MDAgJiYKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3MDEgJiYKLQkgICAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BDSV9FWFBSRVNTKSkKKwkgICAgIXRnM19mbGFnKHRwLCBQQ0lfRVhQUkVTUykpCiAJCWdvdG8gb3V0OwogCiAjaWYgZGVmaW5lZChDT05GSUdfUFBDNjQpIHx8IGRlZmluZWQoQ09ORklHX0lBNjQpIHx8IGRlZmluZWQoQ09ORklHX1BBUklTQykKQEAgLTE0MDUxLDcgKzE0MzE2LDcgQEAKICNlbmRpZgogI2VuZGlmCiAKLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM181NzE3X1BMVVMpIHsKKwlpZiAodGczX2ZsYWcodHAsIDU3NzY1X1BMVVMpKSB7CiAJCXZhbCA9IGdvYWwgPyAwIDogRE1BX1JXQ1RSTF9ESVNfQ0FDSEVfQUxJR05NRU5UOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xNDA3MCw4ICsxNDMzNSw3IEBACiAJICogb3RoZXIgdGhhbiA1NzAwIGFuZCA1NzAxIHdoaWNoIGRvIG5vdCBpbXBsZW1lbnQgdGhlCiAJICogYm91bmRhcnkgYml0cy4KIAkgKi8KLQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19QQ0lYX01PREUpICYmCi0JICAgICEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QQ0lfRVhQUkVTUykpIHsKKwlpZiAodGczX2ZsYWcodHAsIFBDSVhfTU9ERSkgJiYgIXRnM19mbGFnKHRwLCBQQ0lfRVhQUkVTUykpIHsKIAkJc3dpdGNoIChjYWNoZWxpbmVfc2l6ZSkgewogCQljYXNlIDE2OgogCQljYXNlIDMyOgpAQCAtMTQwOTYsNyArMTQzNjAsNyBAQAogCQkJCURNQV9SV0NUUkxfV1JJVEVfQk5EUllfMzg0X1BDSVgpOwogCQkJYnJlYWs7CiAJCX0KLQl9IGVsc2UgaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUENJX0VYUFJFU1MpIHsKKwl9IGVsc2UgaWYgKHRnM19mbGFnKHRwLCBQQ0lfRVhQUkVTUykpIHsKIAkJc3dpdGNoIChjYWNoZWxpbmVfc2l6ZSkgewogCQljYXNlIDE2OgogCQljYXNlIDMyOgpAQCAtMTQyNjgsMTMgKzE0NTMyLDEzIEBACiAKIAl0cC0+ZG1hX3J3Y3RybCA9IHRnM19jYWxjX2RtYV9ibmRyeSh0cCwgdHAtPmRtYV9yd2N0cmwpOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTcxN19QTFVTKQorCWlmICh0ZzNfZmxhZyh0cCwgNTc3NjVfUExVUykpCiAJCWdvdG8gb3V0OwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUENJX0VYUFJFU1MpIHsKKwlpZiAodGczX2ZsYWcodHAsIFBDSV9FWFBSRVNTKSkgewogCQkvKiBETUEgcmVhZCB3YXRlcm1hcmsgbm90IHVzZWQgb24gUENJRSAqLwogCQl0cC0+ZG1hX3J3Y3RybCB8PSAweDAwMTgwMDAwOwotCX0gZWxzZSBpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUENJWF9NT0RFKSkgeworCX0gZWxzZSBpZiAoIXRnM19mbGFnKHRwLCBQQ0lYX01PREUpKSB7CiAJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwNSB8fAogCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTApCiAJCQl0cC0+ZG1hX3J3Y3RybCB8PSAweDAwM2YwMDAwOwpAQCAtMTQyOTAsNyArMTQ1NTQsNyBAQAogCQkJICogZG8gdGhlIGxlc3MgcmVzdHJpY3RpdmUgT05FX0RNQSB3b3JrYXJvdW5kIGZvcgogCQkJICogYmV0dGVyIHBlcmZvcm1hbmNlLgogCQkJICovCi0JCQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR180MEJJVF9ETUFfQlVHKSAmJgorCQkJaWYgKHRnM19mbGFnKHRwLCA0MEJJVF9ETUFfQlVHKSAmJgogCQkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzA0KQogCQkJCXRwLT5kbWFfcndjdHJsIHw9IDB4ODAwMDsKIAkJCWVsc2UgaWYgKGNjdmFsID09IDB4NiB8fCBjY3ZhbCA9PSAweDcpCkBAIC0xNDQxOSw3ICsxNDY4Myw2IEBACiAJfQogCWlmICgodHAtPmRtYV9yd2N0cmwgJiBETUFfUldDVFJMX1dSSVRFX0JORFJZX01BU0spICE9CiAJICAgIERNQV9SV0NUUkxfV1JJVEVfQk5EUllfMTYpIHsKLQogCQkvKiBETUEgdGVzdCBwYXNzZWQgd2l0aG91dCBhZGp1c3RpbmcgRE1BIGJvdW5kYXJ5LAogCQkgKiBub3cgbG9vayBmb3IgY2hpcHNldHMgdGhhdCBhcmUga25vd24gdG8gZXhwb3NlIHRoZQogCQkgKiBETUEgYnVnIHdpdGhvdXQgZmFpbGluZyB0aGUgdGVzdC4KQEAgLTE0NDQzLDcgKzE0NzA2LDcgQEAKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19pbml0X2J1Zm1ncl9jb25maWcoc3RydWN0IHRnMyAqdHApCiB7Ci0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTcxN19QTFVTKSB7CisJaWYgKHRnM19mbGFnKHRwLCA1Nzc2NV9QTFVTKSkgewogCQl0cC0+YnVmbWdyX2NvbmZpZy5tYnVmX3JlYWRfZG1hX2xvd193YXRlciA9CiAJCQlERUZBVUxUX01CX1JETUFfTE9XX1dBVEVSXzU3MDU7CiAJCXRwLT5idWZtZ3JfY29uZmlnLm1idWZfbWFjX3J4X2xvd193YXRlciA9CkBAIC0xNDQ1Nyw3ICsxNDcyMCw3IEBACiAJCQlERUZBVUxUX01CX01BQ1JYX0xPV19XQVRFUl9KVU1CT181Nzc2NTsKIAkJdHAtPmJ1Zm1ncl9jb25maWcubWJ1Zl9oaWdoX3dhdGVyX2p1bWJvID0KIAkJCURFRkFVTFRfTUJfSElHSF9XQVRFUl9KVU1CT181Nzc2NTsKLQl9IGVsc2UgaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSB7CisJfSBlbHNlIGlmICh0ZzNfZmxhZyh0cCwgNTcwNV9QTFVTKSkgewogCQl0cC0+YnVmbWdyX2NvbmZpZy5tYnVmX3JlYWRfZG1hX2xvd193YXRlciA9CiAJCQlERUZBVUxUX01CX1JETUFfTE9XX1dBVEVSXzU3MDU7CiAJCXRwLT5idWZtZ3JfY29uZmlnLm1idWZfbWFjX3J4X2xvd193YXRlciA9CkBAIC0xNDUyMSw2ICsxNDc4NCw3IEBACiAJY2FzZSBURzNfUEhZX0lEX0JDTTU3MThTOglyZXR1cm4gIjU3MThTIjsKIAljYXNlIFRHM19QSFlfSURfQkNNNTc3NjU6CXJldHVybiAiNTc3NjUiOwogCWNhc2UgVEczX1BIWV9JRF9CQ001NzE5QzoJcmV0dXJuICI1NzE5QyI7CisJY2FzZSBURzNfUEhZX0lEX0JDTTU3MjBDOglyZXR1cm4gIjU3MjBDIjsKIAljYXNlIFRHM19QSFlfSURfQkNNODAwMjoJcmV0dXJuICI4MDAyL3NlcmRlcyI7CiAJY2FzZSAwOgkJCXJldHVybiAic2VyZGVzIjsKIAlkZWZhdWx0OgkJcmV0dXJuICJ1bmtub3duIjsKQEAgLTE0NTI5LDEwICsxNDc5MywxMCBAQAogCiBzdGF0aWMgY2hhciAqIF9fZGV2aW5pdCB0ZzNfYnVzX3N0cmluZyhzdHJ1Y3QgdGczICp0cCwgY2hhciAqc3RyKQogewotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BDSV9FWFBSRVNTKSB7CisJaWYgKHRnM19mbGFnKHRwLCBQQ0lfRVhQUkVTUykpIHsKIAkJc3RyY3B5KHN0ciwgIlBDSSBFeHByZXNzIik7CiAJCXJldHVybiBzdHI7Ci0JfSBlbHNlIGlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUENJWF9NT0RFKSB7CisJfSBlbHNlIGlmICh0ZzNfZmxhZyh0cCwgUENJWF9NT0RFKSkgewogCQl1MzIgY2xvY2tfY3RybCA9IHRyMzIoVEczUENJX0NMT0NLX0NUUkwpICYgMHgxZjsKIAogCQlzdHJjcHkoc3RyLCAiUENJWDoiKTsKQEAgLTE0NTUxLDEyICsxNDgxNSwxMiBAQAogCQkJc3RyY2F0KHN0ciwgIjEwME1IeiIpOwogCX0gZWxzZSB7CiAJCXN0cmNweShzdHIsICJQQ0k6Iik7Ci0JCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUENJX0hJR0hfU1BFRUQpCisJCWlmICh0ZzNfZmxhZyh0cCwgUENJX0hJR0hfU1BFRUQpKQogCQkJc3RyY2F0KHN0ciwgIjY2TUh6Iik7CiAJCWVsc2UKIAkJCXN0cmNhdChzdHIsICIzM01IeiIpOwogCX0KLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1BDSV8zMkJJVCkKKwlpZiAodGczX2ZsYWcodHAsIFBDSV8zMkJJVCkpCiAJCXN0cmNhdChzdHIsICI6MzItYml0Iik7CiAJZWxzZQogCQlzdHJjYXQoc3RyLCAiOjY0LWJpdCIpOwpAQCAtMTQ2MTUsNyArMTQ4NzksNyBAQAogCQllYy0+dHhfY29hbGVzY2VfdXNlY3NfaXJxID0gREVGQVVMVF9UWENPQUxfVElDS19JTlRfQ0xSVENLUzsKIAl9CiAKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpIHsKKwlpZiAodGczX2ZsYWcodHAsIDU3MDVfUExVUykpIHsKIAkJZWMtPnJ4X2NvYWxlc2NlX3VzZWNzX2lycSA9IDA7CiAJCWVjLT50eF9jb2FsZXNjZV91c2Vjc19pcnEgPSAwOwogCQllYy0+c3RhdHNfYmxvY2tfY29hbGVzY2VfdXNlY3MgPSAwOwpAQCAtMTQ2MzMsMjIgKzE0ODk3LDggQEAKIAkubmRvX2RvX2lvY3RsCQk9IHRnM19pb2N0bCwKIAkubmRvX3R4X3RpbWVvdXQJCT0gdGczX3R4X3RpbWVvdXQsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IHRnM19jaGFuZ2VfbXR1LAotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JLm5kb19wb2xsX2NvbnRyb2xsZXIJPSB0ZzNfcG9sbF9jb250cm9sbGVyLAotI2VuZGlmCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRnM19uZXRkZXZfb3BzX2RtYV9idWcgPSB7Ci0JLm5kb19vcGVuCQk9IHRnM19vcGVuLAotCS5uZG9fc3RvcAkJPSB0ZzNfY2xvc2UsCi0JLm5kb19zdGFydF94bWl0CQk9IHRnM19zdGFydF94bWl0X2RtYV9idWcsCi0JLm5kb19nZXRfc3RhdHM2NAk9IHRnM19nZXRfc3RhdHM2NCwKLQkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKLQkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHRnM19zZXRfcnhfbW9kZSwKLQkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHRnM19zZXRfbWFjX2FkZHIsCi0JLm5kb19kb19pb2N0bAkJPSB0ZzNfaW9jdGwsCi0JLm5kb190eF90aW1lb3V0CQk9IHRnM190eF90aW1lb3V0LAotCS5uZG9fY2hhbmdlX210dQkJPSB0ZzNfY2hhbmdlX210dSwKKwkubmRvX2ZpeF9mZWF0dXJlcwk9IHRnM19maXhfZmVhdHVyZXMsCisJLm5kb19zZXRfZmVhdHVyZXMJPSB0ZzNfc2V0X2ZlYXR1cmVzLAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSB0ZzNfcG9sbF9jb250cm9sbGVyLAogI2VuZGlmCkBAIC0xNDY2Myw2ICsxNDkxMyw3IEBACiAJdTMyIHNuZG1ieCwgcmN2bWJ4LCBpbnRtYng7CiAJY2hhciBzdHJbNDBdOwogCXU2NCBkbWFfbWFzaywgcGVyc2lzdF9kbWFfbWFzazsKKwl1MzIgZmVhdHVyZXMgPSAwOwogCiAJcHJpbnRrX29uY2UoS0VSTl9JTkZPICIlc1xuIiwgdmVyc2lvbik7CiAKQEAgLTE0Njk4LDggKzE0OTQ5LDYgQEAKIAogCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CiAKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKLQogCXRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl0cC0+cGRldiA9IHBkZXY7CiAJdHAtPmRldiA9IGRldjsKQEAgLTE0NzQ5LDYgKzE0OTk4LDcgQEAKIAogCWRldi0+ZXRodG9vbF9vcHMgPSAmdGczX2V0aHRvb2xfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBURzNfVFhfVElNRU9VVDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmdGczX25ldGRldl9vcHM7CiAJZGV2LT5pcnEgPSBwZGV2LT5pcnE7CiAKIAllcnIgPSB0ZzNfZ2V0X2ludmFyaWFudHModHApOwpAQCAtMTQ3NTgsMjMgKzE1MDA4LDE1IEBACiAJCWdvdG8gZXJyX291dF9pb3VubWFwOwogCX0KIAotCWlmICgodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM181NzU1X1BMVVMpICYmCi0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzE3ICYmCi0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzE5KQotCQlkZXYtPm5ldGRldl9vcHMgPSAmdGczX25ldGRldl9vcHM7Ci0JZWxzZQotCQlkZXYtPm5ldGRldl9vcHMgPSAmdGczX25ldGRldl9vcHNfZG1hX2J1ZzsKLQotCiAJLyogVGhlIEVQQiBicmlkZ2UgaW5zaWRlIDU3MTQsIDU3MTUsIGFuZCA1NzgwIGFuZCBhbnkKIAkgKiBkZXZpY2UgYmVoaW5kIHRoZSBFUEIgY2Fubm90IHN1cHBvcnQgRE1BIGFkZHJlc3NlcyA+IDQwLWJpdC4KIAkgKiBPbiA2NC1iaXQgc3lzdGVtcyB3aXRoIElPTU1VLCB1c2UgNDAtYml0IGRtYV9tYXNrLgogCSAqIE9uIDY0LWJpdCBzeXN0ZW1zIHdpdGhvdXQgSU9NTVUsIHVzZSA2NC1iaXQgZG1hX21hc2sgYW5kCiAJICogZG8gRE1BIGFkZHJlc3MgY2hlY2sgaW4gdGczX3N0YXJ0X3htaXQoKS4KIAkgKi8KLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9JU181Nzg4KQorCWlmICh0ZzNfZmxhZyh0cCwgSVNfNTc4OCkpCiAJCXBlcnNpc3RfZG1hX21hc2sgPSBkbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7Ci0JZWxzZSBpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHXzQwQklUX0RNQV9CVUcpIHsKKwllbHNlIGlmICh0ZzNfZmxhZyh0cCwgNDBCSVRfRE1BX0JVRykpIHsKIAkJcGVyc2lzdF9kbWFfbWFzayA9IGRtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDQwKTsKICNpZmRlZiBDT05GSUdfSElHSE1FTQogCQlkbWFfbWFzayA9IERNQV9CSVRfTUFTSyg2NCk7CkBAIC0xNDc4Niw3ICsxNTAyOCw3IEBACiAJaWYgKGRtYV9tYXNrID4gRE1BX0JJVF9NQVNLKDMyKSkgewogCQllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIGRtYV9tYXNrKTsKIAkJaWYgKCFlcnIpIHsKLQkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOworCQkJZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogCQkJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsCiAJCQkJCQkJICBwZXJzaXN0X2RtYV9tYXNrKTsKIAkJCWlmIChlcnIgPCAwKSB7CkBAIC0xNDgwNyw0OCArMTUwNDksNTggQEAKIAogCXRnM19pbml0X2J1Zm1ncl9jb25maWcodHApOwogCi0JLyogU2VsZWN0aXZlbHkgYWxsb3cgVFNPIGJhc2VkIG9uIG9wZXJhdGluZyBjb25kaXRpb25zICovCi0JaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX1RTTykgfHwKLQkgICAgKHRwLT5md19uZWVkZWQgJiYgISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikpKQotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9UU09fQ0FQQUJMRTsKLQllbHNlIHsKLQkJdHAtPnRnM19mbGFnczIgJj0gfihURzNfRkxHMl9UU09fQ0FQQUJMRSB8IFRHM19GTEcyX1RTT19CVUcpOwotCQl0cC0+ZndfbmVlZGVkID0gTlVMTDsKLQl9CisJZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYOwogCi0JaWYgKHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81NzAxX0EwKQotCQl0cC0+ZndfbmVlZGVkID0gRklSTVdBUkVfVEczOworCS8qIDU3MDAgQjAgY2hpcHMgZG8gbm90IHN1cHBvcnQgY2hlY2tzdW1taW5nIGNvcnJlY3RseSBkdWUKKwkgKiB0byBoYXJkd2FyZSBidWdzLgorCSAqLworCWlmICh0cC0+cGNpX2NoaXBfcmV2X2lkICE9IENISVBSRVZfSURfNTcwMF9CMCkgeworCQlmZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU07CisKKwkJaWYgKHRnM19mbGFnKHRwLCA1NzU1X1BMVVMpKQorCQkJZmVhdHVyZXMgfD0gTkVUSUZfRl9JUFY2X0NTVU07CisJfQogCiAJLyogVFNPIGlzIG9uIGJ5IGRlZmF1bHQgb24gY2hpcHMgdGhhdCBzdXBwb3J0IGhhcmR3YXJlIFRTTy4KIAkgKiBGaXJtd2FyZSBUU08gb24gb2xkZXIgY2hpcHMgZ2l2ZXMgbG93ZXIgcGVyZm9ybWFuY2UsIHNvIGl0CiAJICogaXMgb2ZmIGJ5IGRlZmF1bHQsIGJ1dCBjYW4gYmUgZW5hYmxlZCB1c2luZyBldGh0b29sLgogCSAqLwotCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9IV19UU08pICYmCi0JICAgIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9JUF9DU1VNKSkgewotCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwotCQl2bGFuX2ZlYXR1cmVzX2FkZChkZXYsIE5FVElGX0ZfVFNPKTsKLQl9Ci0JaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX1RTT18yKSB8fAotCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9IV19UU09fMykpIHsKLQkJaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0lQVjZfQ1NVTSkgewotCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7Ci0JCQl2bGFuX2ZlYXR1cmVzX2FkZChkZXYsIE5FVElGX0ZfVFNPNik7Ci0JCX0KLQkJaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX1RTT18zKSB8fAorCWlmICgodGczX2ZsYWcodHAsIEhXX1RTT18xKSB8fAorCSAgICAgdGczX2ZsYWcodHAsIEhXX1RTT18yKSB8fAorCSAgICAgdGczX2ZsYWcodHAsIEhXX1RTT18zKSkgJiYKKwkgICAgKGZlYXR1cmVzICYgTkVUSUZfRl9JUF9DU1VNKSkKKwkJZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CisJaWYgKHRnM19mbGFnKHRwLCBIV19UU09fMikgfHwgdGczX2ZsYWcodHAsIEhXX1RTT18zKSkgeworCQlpZiAoZmVhdHVyZXMgJiBORVRJRl9GX0lQVjZfQ1NVTSkKKwkJCWZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKKwkJaWYgKHRnM19mbGFnKHRwLCBIV19UU09fMykgfHwKIAkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzYxIHx8CiAJCSAgICAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODQgJiYKIAkJICAgICBHRVRfQ0hJUF9SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQ0hJUFJFVl81Nzg0X0FYKSB8fAotCQkJR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODUgfHwKLQkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc4MCkgewotCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTT19FQ047Ci0JCQl2bGFuX2ZlYXR1cmVzX2FkZChkZXYsIE5FVElGX0ZfVFNPX0VDTik7Ci0JCX0KKwkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg1IHx8CisJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3ODApCisJCQlmZWF0dXJlcyB8PSBORVRJRl9GX1RTT19FQ047CiAJfQogCisJZGV2LT5mZWF0dXJlcyB8PSBmZWF0dXJlczsKKwlkZXYtPnZsYW5fZmVhdHVyZXMgfD0gZmVhdHVyZXM7CisKKwkvKgorCSAqIEFkZCBsb29wYmFjayBjYXBhYmlsaXR5IG9ubHkgZm9yIGEgc3Vic2V0IG9mIGRldmljZXMgdGhhdCBzdXBwb3J0CisJICogTUFDLUxPT1BCQUNLLiBFdmVudHVhbGx5IHRoaXMgbmVlZCB0byBiZSBlbmhhbmNlZCB0byBhbGxvdyBJTlQtUEhZCisJICogbG9vcGJhY2sgZm9yIHRoZSByZW1haW5pbmcgZGV2aWNlcy4KKwkgKi8KKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3ODAgJiYKKwkgICAgIXRnM19mbGFnKHRwLCBDUE1VX1BSRVNFTlQpKQorCQkvKiBBZGQgdGhlIGxvb3BiYWNrIGNhcGFiaWxpdHkgKi8KKwkJZmVhdHVyZXMgfD0gTkVUSUZfRl9MT09QQkFDSzsKKworCWRldi0+aHdfZmVhdHVyZXMgfD0gZmVhdHVyZXM7CisKIAlpZiAodHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU3MDVfQTEgJiYKLQkgICAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1RTT19DQVBBQkxFKSAmJgorCSAgICAhdGczX2ZsYWcodHAsIFRTT19DQVBBQkxFKSAmJgogCSAgICAhKHRyMzIoVEczUENJX1BDSVNUQVRFKSAmIFBDSVNUQVRFX0JVU19TUEVFRF9ISUdIKSkgewotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9NQVhfUlhQRU5EXzY0OworCQl0ZzNfZmxhZ19zZXQodHAsIE1BWF9SWFBFTkRfNjQpOwogCQl0cC0+cnhfcGVuZGluZyA9IDYzOwogCX0KIApAQCAtMTQ4NTksNyArMTUxMTEsNyBAQAogCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKIAl9CiAKLQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfQVBFKSB7CisJaWYgKHRnM19mbGFnKHRwLCBFTkFCTEVfQVBFKSkgewogCQl0cC0+YXBlcmVncyA9IHBjaV9pb3JlbWFwX2JhcihwZGV2LCBCQVJfMik7CiAJCWlmICghdHAtPmFwZXJlZ3MpIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwKQEAgLTE0ODcwLDcgKzE1MTIyLDcgQEAKIAogCQl0ZzNfYXBlX2xvY2tfaW5pdCh0cCk7CiAKLQkJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKQorCQlpZiAodGczX2ZsYWcodHAsIEVOQUJMRV9BU0YpKQogCQkJdGczX3JlYWRfZGFzaF92ZXIodHApOwogCX0KIApAQCAtMTQ5MTQsNyArMTUxNjYsNyBAQAogCQllbHNlCiAJCQl0bmFwaS0+Y29hbF9ub3cgPSBIT1NUQ0NfTU9ERV9OT1c7CiAKLQkJaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1NVUFBPUlRfTVNJWCkpCisJCWlmICghdGczX2ZsYWcodHAsIFNVUFBPUlRfTVNJWCkpCiAJCQlicmVhazsKIAogCQkvKgpAQCAtMTQ5NjgsMjEgKzE1MjIwLDI1IEBACiAJCQlldGh0eXBlID0gIjEwLzEwMC8xMDAwQmFzZS1UIjsKIAogCQluZXRkZXZfaW5mbyhkZXYsICJhdHRhY2hlZCBQSFkgaXMgJXMgKCVzIEV0aGVybmV0KSAiCi0JCQkgICAgIihXaXJlU3BlZWRbJWRdKVxuIiwgdGczX3BoeV9zdHJpbmcodHApLCBldGh0eXBlLAotCQkJICAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfTk9fRVRIX1dJUkVfU1BFRUQpID09IDApOworCQkJICAgICIoV2lyZVNwZWVkWyVkXSwgRUVFWyVkXSlcbiIsCisJCQkgICAgdGczX3BoeV9zdHJpbmcodHApLCBldGh0eXBlLAorCQkJICAgICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19OT19FVEhfV0lSRV9TUEVFRCkgPT0gMCwKKwkJCSAgICAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfRUVFX0NBUCkgIT0gMCk7CiAJfQogCiAJbmV0ZGV2X2luZm8oZGV2LCAiUlhjc3Vtc1slZF0gTGlua0NoZ1JFR1slZF0gTUlpcnFbJWRdIEFTRlslZF0gVFNPY2FwWyVkXVxuIiwKLQkJICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUlhfQ0hFQ0tTVU1TKSAhPSAwLAotCQkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19VU0VfTElOS0NIR19SRUcpICE9IDAsCisJCSAgICAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSAhPSAwLAorCQkgICAgdGczX2ZsYWcodHAsIFVTRV9MSU5LQ0hHX1JFRykgIT0gMCwKIAkJICAgICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19VU0VfTUlfSU5URVJSVVBUKSAhPSAwLAotCQkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSAhPSAwLAotCQkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVFNPX0NBUEFCTEUpICE9IDApOworCQkgICAgdGczX2ZsYWcodHAsIEVOQUJMRV9BU0YpICE9IDAsCisJCSAgICB0ZzNfZmxhZyh0cCwgVFNPX0NBUEFCTEUpICE9IDApOwogCW5ldGRldl9pbmZvKGRldiwgImRtYV9yd2N0cmxbJTA4eF0gZG1hX21hc2tbJWQtYml0XVxuIiwKIAkJICAgIHRwLT5kbWFfcndjdHJsLAogCQkgICAgcGRldi0+ZG1hX21hc2sgPT0gRE1BX0JJVF9NQVNLKDMyKSA/IDMyIDoKIAkJICAgICgodTY0KXBkZXYtPmRtYV9tYXNrKSA9PSBETUFfQklUX01BU0soNDApID8gNDAgOiA2NCk7CiAKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwogCXJldHVybiAwOwogCiBlcnJfb3V0X2FwZXVubWFwOgpAQCAtMTUwMjEsNyArMTUyNzcsNyBAQAogCiAJCWNhbmNlbF93b3JrX3N5bmMoJnRwLT5yZXNldF90YXNrKTsKIAotCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19VU0VfUEhZTElCKSB7CisJCWlmICghdGczX2ZsYWcodHAsIFVTRV9QSFlMSUIpKSB7CiAJCQl0ZzNfcGh5X2ZpbmkodHApOwogCQkJdGczX21kaW9fZmluaSh0cCk7CiAJCX0KQEAgLTE1MDY3LDcgKzE1MzIzLDcgQEAKIAogCXRnM19mdWxsX2xvY2sodHAsIDApOwogCXRnM19oYWx0KHRwLCBSRVNFVF9LSU5EX1NIVVRET1dOLCAxKTsKLQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19JTklUX0NPTVBMRVRFOworCXRnM19mbGFnX2NsZWFyKHRwLCBJTklUX0NPTVBMRVRFKTsKIAl0ZzNfZnVsbF91bmxvY2sodHApOwogCiAJZXJyID0gdGczX3Bvd2VyX2Rvd25fcHJlcGFyZSh0cCk7CkBAIC0xNTA3Niw3ICsxNTMzMiw3IEBACiAKIAkJdGczX2Z1bGxfbG9jayh0cCwgMCk7CiAKLQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19JTklUX0NPTVBMRVRFOworCQl0ZzNfZmxhZ19zZXQodHAsIElOSVRfQ09NUExFVEUpOwogCQllcnIyID0gdGczX3Jlc3RhcnRfaHcodHAsIDEpOwogCQlpZiAoZXJyMikKIAkJCWdvdG8gb3V0OwpAQCAtMTUxMTEsNyArMTUzNjcsNyBAQAogCiAJdGczX2Z1bGxfbG9jayh0cCwgMCk7CiAKLQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX0lOSVRfQ09NUExFVEU7CisJdGczX2ZsYWdfc2V0KHRwLCBJTklUX0NPTVBMRVRFKTsKIAllcnIgPSB0ZzNfcmVzdGFydF9odyh0cCwgMSk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CkBAIC0xNTEzOSwxMSArMTUzOTUsMTU2IEBACiAKICNlbmRpZiAvKiBDT05GSUdfUE1fU0xFRVAgKi8KIAorLyoqCisgKiB0ZzNfaW9fZXJyb3JfZGV0ZWN0ZWQgLSBjYWxsZWQgd2hlbiBQQ0kgZXJyb3IgaXMgZGV0ZWN0ZWQKKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKKyAqIEBzdGF0ZTogVGhlIGN1cnJlbnQgcGNpIGNvbm5lY3Rpb24gc3RhdGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBhIFBDSSBidXMgZXJyb3IgYWZmZWN0aW5nCisgKiB0aGlzIGRldmljZSBoYXMgYmVlbiBkZXRlY3RlZC4KKyAqLworc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgdGczX2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCQkgICAgICBwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXBjaV9lcnNfcmVzdWx0X3QgZXJyID0gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDsKKworCW5ldGRldl9pbmZvKG5ldGRldiwgIlBDSSBJL08gZXJyb3IgZGV0ZWN0ZWRcbiIpOworCisJcnRubF9sb2NrKCk7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJZ290byBkb25lOworCisJdGczX3BoeV9zdG9wKHRwKTsKKworCXRnM19uZXRpZl9zdG9wKHRwKTsKKworCWRlbF90aW1lcl9zeW5jKCZ0cC0+dGltZXIpOworCXRnM19mbGFnX2NsZWFyKHRwLCBSRVNUQVJUX1RJTUVSKTsKKworCS8qIFdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHJlc2V0IHRhc2sgZG9lc24ndCBydW4gKi8KKwljYW5jZWxfd29ya19zeW5jKCZ0cC0+cmVzZXRfdGFzayk7CisJdGczX2ZsYWdfY2xlYXIodHAsIFRYX1JFQ09WRVJZX1BFTkRJTkcpOworCXRnM19mbGFnX2NsZWFyKHRwLCBSRVNUQVJUX1RJTUVSKTsKKworCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKKworCS8qIENsZWFuIHVwIHNvZnR3YXJlIHN0YXRlLCBldmVuIGlmIE1NSU8gaXMgYmxvY2tlZCAqLworCXRnM19mdWxsX2xvY2sodHAsIDApOworCXRnM19oYWx0KHRwLCBSRVNFVF9LSU5EX1NIVVRET1dOLCAwKTsKKwl0ZzNfZnVsbF91bmxvY2sodHApOworCitkb25lOgorCWlmIChzdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpCisJCWVyciA9IFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CisJZWxzZQorCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisKKwlydG5sX3VubG9jaygpOworCisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiB0ZzNfaW9fc2xvdF9yZXNldCAtIGNhbGxlZCBhZnRlciB0aGUgcGNpIGJ1cyBoYXMgYmVlbiByZXNldC4KKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKKyAqCisgKiBSZXN0YXJ0IHRoZSBjYXJkIGZyb20gc2NyYXRjaCwgYXMgaWYgZnJvbSBhIGNvbGQtYm9vdC4KKyAqIEF0IHRoaXMgcG9pbnQsIHRoZSBjYXJkIGhhcyBleHByaWVuY2VkIGEgaGFyZCByZXNldCwKKyAqIGZvbGxvd2VkIGJ5IGZpeHVwcyBieSBCSU9TLCBhbmQgaGFzIGl0cyBjb25maWcgc3BhY2UKKyAqIHNldCB1cCBpZGVudGljYWxseSB0byB3aGF0IGl0IHdhcyBhdCBjb2xkIGJvb3QuCisgKi8KK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHRnM19pb19zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXBjaV9lcnNfcmVzdWx0X3QgcmMgPSBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOworCWludCBlcnI7CisKKwlydG5sX2xvY2soKTsKKworCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgeworCQluZXRkZXZfZXJyKG5ldGRldiwgIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisJcGNpX3NhdmVfc3RhdGUocGRldik7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQlyYyA9IFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKKwkJZ290byBkb25lOworCX0KKworCWVyciA9IHRnM19wb3dlcl91cCh0cCk7CisJaWYgKGVycikgeworCQluZXRkZXZfZXJyKG5ldGRldiwgIkZhaWxlZCB0byByZXN0b3JlIHJlZ2lzdGVyIGFjY2Vzcy5cbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJcmMgPSBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7CisKK2RvbmU6CisJcnRubF91bmxvY2soKTsKKworCXJldHVybiByYzsKK30KKworLyoqCisgKiB0ZzNfaW9fcmVzdW1lIC0gY2FsbGVkIHdoZW4gdHJhZmZpYyBjYW4gc3RhcnQgZmxvd2luZyBhZ2Fpbi4KKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKKyAqCisgKiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMKKyAqIHVzIHRoYXQgaXRzIE9LIHRvIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9uLgorICovCitzdGF0aWMgdm9pZCB0ZzNfaW9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBlcnI7CisKKwlydG5sX2xvY2soKTsKKworCWlmICghbmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQlnb3RvIGRvbmU7CisKKwl0ZzNfZnVsbF9sb2NrKHRwLCAwKTsKKwl0ZzNfZmxhZ19zZXQodHAsIElOSVRfQ09NUExFVEUpOworCWVyciA9IHRnM19yZXN0YXJ0X2h3KHRwLCAxKTsKKwl0ZzNfZnVsbF91bmxvY2sodHApOworCWlmIChlcnIpIHsKKwkJbmV0ZGV2X2VycihuZXRkZXYsICJDYW5ub3QgcmVzdGFydCBoYXJkd2FyZSBhZnRlciByZXNldC5cbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOworCisJdHAtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgdHAtPnRpbWVyX29mZnNldDsKKwlhZGRfdGltZXIoJnRwLT50aW1lcik7CisKKwl0ZzNfbmV0aWZfc3RhcnQodHApOworCisJdGczX3BoeV9zdGFydCh0cCk7CisKK2RvbmU6CisJcnRubF91bmxvY2soKTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgdGczX2Vycl9oYW5kbGVyID0geworCS5lcnJvcl9kZXRlY3RlZAk9IHRnM19pb19lcnJvcl9kZXRlY3RlZCwKKwkuc2xvdF9yZXNldAk9IHRnM19pb19zbG90X3Jlc2V0LAorCS5yZXN1bWUJCT0gdGczX2lvX3Jlc3VtZQorfTsKKwogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHRnM19kcml2ZXIgPSB7CiAJLm5hbWUJCT0gRFJWX01PRFVMRV9OQU1FLAogCS5pZF90YWJsZQk9IHRnM19wY2lfdGJsLAogCS5wcm9iZQkJPSB0ZzNfaW5pdF9vbmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh0ZzNfcmVtb3ZlX29uZSksCisJLmVycl9oYW5kbGVyCT0gJnRnM19lcnJfaGFuZGxlciwKIAkuZHJpdmVyLnBtCT0gVEczX1BNX09QUywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5oIGIvZHJpdmVycy9uZXQvdGczLmgKaW5kZXggNWU5NjcwNi4uNWIzZDJmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmgKKysrIGIvZHJpdmVycy9uZXQvdGczLmgKQEAgLTIzLDExICsyMywxMyBAQAogI2RlZmluZSBURzNfQkRJTkZPX05JQ19BRERSCQkweGNVTCAvKiAzMi1iaXQgKi8KICNkZWZpbmUgVEczX0JESU5GT19TSVpFCQkJMHgxMFVMCiAKLSNkZWZpbmUgVEczX1JYX0lOVEVSTkFMX1JJTkdfU1pfNTkwNgkzMgotCi0jZGVmaW5lIFJYX1NURF9NQVhfU0laRV81NzA1CQk1MTIKLSNkZWZpbmUgUlhfU1REX01BWF9TSVpFXzU3MTcJCTIwNDgKLSNkZWZpbmUgUlhfSlVNQk9fTUFYX1NJWkUJCTB4ZGVhZGJlZWYgLyogWFhYICovCisjZGVmaW5lIFRHM19SWF9TVERfTUFYX1NJWkVfNTcwMAk1MTIKKyNkZWZpbmUgVEczX1JYX1NURF9NQVhfU0laRV81NzE3CTIwNDgKKyNkZWZpbmUgVEczX1JYX0pNQl9NQVhfU0laRV81NzAwCTI1NgorI2RlZmluZSBURzNfUlhfSk1CX01BWF9TSVpFXzU3MTcJMTAyNAorI2RlZmluZSBURzNfUlhfUkVUX01BWF9TSVpFXzU3MDAJMTAyNAorI2RlZmluZSBURzNfUlhfUkVUX01BWF9TSVpFXzU3MDUJNTEyCisjZGVmaW5lIFRHM19SWF9SRVRfTUFYX1NJWkVfNTcxNwk0MDk2CiAKIC8qIEZpcnN0IDI1NiBieXRlcyBhcmUgYSBtaXJyb3Igb2YgUENJIGNvbmZpZyBzcGFjZS4gKi8KICNkZWZpbmUgVEczUENJX1ZFTkRPUgkJCTB4MDAwMDAwMDAKQEAgLTU0LDYgKzU2LDcgQEAKICNkZWZpbmUgIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3NzkxCSAweDE2YjIKICNkZWZpbmUgIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3Nzk1CSAweDE2YjYKICNkZWZpbmUgIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3MTkJIDB4MTY1NworI2RlZmluZSAgVEczUENJX0RFVklDRV9USUdPTjNfNTcyMAkgMHgxNjVmCiAvKiAweDA0IC0tPiAweDJjIHVudXNlZCAqLwogI2RlZmluZSBURzNQQ0lfU1VCVkVORE9SX0lEX0JST0FEQ09NCQlQQ0lfVkVORE9SX0lEX0JST0FEQ09NCiAjZGVmaW5lIFRHM1BDSV9TVUJERVZJQ0VfSURfQlJPQURDT01fOTU3MDBBNgkweDE2NDQKQEAgLTE0Miw2ICsxNDUsNyBAQAogI2RlZmluZSAgQ0hJUFJFVl9JRF81NzE3X0EwCQkgMHgwNTcxNzAwMAogI2RlZmluZSAgQ0hJUFJFVl9JRF81Nzc2NV9BMAkJIDB4NTc3ODUwMDAKICNkZWZpbmUgIENISVBSRVZfSURfNTcxOV9BMAkJIDB4MDU3MTkwMDAKKyNkZWZpbmUgIENISVBSRVZfSURfNTcyMF9BMAkJIDB4MDU3MjAwMDAKICNkZWZpbmUgIEdFVF9BU0lDX1JFVihDSElQX1JFVl9JRCkJKChDSElQX1JFVl9JRCkgPj4gMTIpCiAjZGVmaW5lICAgQVNJQ19SRVZfNTcwMAkJCSAweDA3CiAjZGVmaW5lICAgQVNJQ19SRVZfNTcwMQkJCSAweDAwCkBAIC0xNjMsNiArMTY3LDcgQEAKICNkZWZpbmUgICBBU0lDX1JFVl81NzE3CQkJIDB4NTcxNwogI2RlZmluZSAgIEFTSUNfUkVWXzU3NzY1CQkgMHg1Nzc4NQogI2RlZmluZSAgIEFTSUNfUkVWXzU3MTkJCQkgMHg1NzE5CisjZGVmaW5lICAgQVNJQ19SRVZfNTcyMAkJCSAweDU3MjAKICNkZWZpbmUgIEdFVF9DSElQX1JFVihDSElQX1JFVl9JRCkJKChDSElQX1JFVl9JRCkgPj4gOCkKICNkZWZpbmUgICBDSElQUkVWXzU3MDBfQVgJCSAweDcwCiAjZGVmaW5lICAgQ0hJUFJFVl81NzAwX0JYCQkgMHg3MQpAQCAtMTc1LDYgKzE4MCw3IEBACiAjZGVmaW5lICAgQ0hJUFJFVl81NzUwX0JYCQkgMHg0MQogI2RlZmluZSAgIENISVBSRVZfNTc4NF9BWAkJIDB4NTc4NDAKICNkZWZpbmUgICBDSElQUkVWXzU3NjFfQVgJCSAweDU3NjEwCisjZGVmaW5lICAgQ0hJUFJFVl81Nzc2NV9BWAkJIDB4NTc3NjUwCiAjZGVmaW5lICBHRVRfTUVUQUxfUkVWKENISVBfUkVWX0lEKQkoKENISVBfUkVWX0lEKSAmIDB4ZmYpCiAjZGVmaW5lICAgTUVUQUxfUkVWX0EwCQkJIDB4MDAKICNkZWZpbmUgICBNRVRBTF9SRVZfQTEJCQkgMHgwMQpAQCAtMTgzLDYgKzE4OSw3IEBACiAjZGVmaW5lICAgTUVUQUxfUkVWX0IyCQkJIDB4MDIKICNkZWZpbmUgVEczUENJX0RNQV9SV19DVFJMCQkweDAwMDAwMDZjCiAjZGVmaW5lICBETUFfUldDVFJMX0RJU19DQUNIRV9BTElHTk1FTlQgIDB4MDAwMDAwMDEKKyNkZWZpbmUgIERNQV9SV0NUUkxfVEFHR0VEX1NUQVRfV0EJIDB4MDAwMDAwODAKICNkZWZpbmUgIERNQV9SV0NUUkxfQ1JEUkRSX1JETUFfTVJSU19NU0sgMHgwMDAwMDM4MAogI2RlZmluZSAgRE1BX1JXQ1RSTF9SRUFEX0JORFJZX01BU0sJIDB4MDAwMDA3MDAKICNkZWZpbmUgIERNQV9SV0NUUkxfUkVBRF9CTkRSWV9ESVNBQgkgMHgwMDAwMDAwMApAQCAtNDczLDYgKzQ4MCw4IEBACiAjZGVmaW5lICBUWF9NT0RFX0JJR19CQ0tPRkZfRU5BQkxFCSAweDAwMDAwMDIwCiAjZGVmaW5lICBUWF9NT0RFX0xPTkdfUEFVU0VfRU5BQkxFCSAweDAwMDAwMDQwCiAjZGVmaW5lICBUWF9NT0RFX01CVUZfTE9DS1VQX0ZJWAkgMHgwMDAwMDEwMAorI2RlZmluZSAgVFhfTU9ERV9KTUJfRlJNX0xFTgkJIDB4MDA0MDAwMDAKKyNkZWZpbmUgIFRYX01PREVfQ05UX0ROX01PREUJCSAweDAwODAwMDAwCiAjZGVmaW5lIE1BQ19UWF9TVEFUVVMJCQkweDAwMDAwNDYwCiAjZGVmaW5lICBUWF9TVEFUVVNfWE9GRkVECQkgMHgwMDAwMDAwMQogI2RlZmluZSAgVFhfU1RBVFVTX1NFTlRfWE9GRgkJIDB4MDAwMDAwMDIKQEAgLTQ4Nyw2ICs0OTYsOCBAQAogI2RlZmluZSAgVFhfTEVOR1RIU19JUEdfU0hJRlQJCSA4CiAjZGVmaW5lICBUWF9MRU5HVEhTX0lQR19DUlNfTUFTSwkgMHgwMDAwMzAwMAogI2RlZmluZSAgVFhfTEVOR1RIU19JUEdfQ1JTX1NISUZUCSAxMgorI2RlZmluZSAgVFhfTEVOR1RIU19KTUJfRlJNX0xFTl9NU0sJIDB4MDBmZjAwMDAKKyNkZWZpbmUgIFRYX0xFTkdUSFNfQ05UX0RXTl9WQUxfTVNLCSAweGZmMDAwMDAwCiAjZGVmaW5lIE1BQ19SWF9NT0RFCQkJMHgwMDAwMDQ2OAogI2RlZmluZSAgUlhfTU9ERV9SRVNFVAkJCSAweDAwMDAwMDAxCiAjZGVmaW5lICBSWF9NT0RFX0VOQUJMRQkJCSAweDAwMDAwMDAyCkBAIC0xMDc5LDYgKzEwOTAsOSBAQAogI2RlZmluZSAgQ1BNVV9IU1RfQUNDX01BQ0NMS182XzI1CSAweDAwMTMwMDAwCiAvKiAweDM2MjAgLS0+IDB4MzYzMCB1bnVzZWQgKi8KIAorI2RlZmluZSBURzNfQ1BNVV9DTENLX09SSURFCQkweDAwMDAzNjI0CisjZGVmaW5lICBDUE1VX0NMQ0tfT1JJREVfTUFDX09SSURFX0VOCSAweDgwMDAwMDAwCisKICNkZWZpbmUgVEczX0NQTVVfQ0xDS19TVEFUCQkweDAwMDAzNjMwCiAjZGVmaW5lICBDUE1VX0NMQ0tfU1RBVF9NQUNfQ0xDS19NQVNLCSAweDAwMWYwMDAwCiAjZGVmaW5lICBDUE1VX0NMQ0tfU1RBVF9NQUNfQ0xDS182Ml81CSAweDAwMDAwMDAwCkBAIC0xMTg4LDYgKzEyMDIsNyBAQAogI2RlZmluZSBIT1NUQ0NfU1RBVFNfQkxLX05JQ19BRERSCTB4MDAwMDNjNDAKICNkZWZpbmUgSE9TVENDX1NUQVRVU19CTEtfTklDX0FERFIJMHgwMDAwM2M0NAogI2RlZmluZSBIT1NUQ0NfRkxPV19BVFROCQkweDAwMDAzYzQ4CisjZGVmaW5lIEhPU1RDQ19GTE9XX0FUVE5fTUJVRl9MV00JIDB4MDAwMDAwNDAKIC8qIDB4M2M0YyAtLT4gMHgzYzUwIHVudXNlZCAqLwogI2RlZmluZSBIT1NUQ0NfSlVNQk9fQ09OX0lEWAkJMHgwMDAwM2M1MAogI2RlZmluZSBIT1NUQ0NfU1REX0NPTl9JRFgJCTB4MDAwMDNjNTQKQEAgLTEzMjEsNiArMTMzNiw3IEBACiAjZGVmaW5lICBSRE1BQ19NT0RFX01VTFRfRE1BX1JEX0RJUwkgMHgwMTAwMDAwMAogI2RlZmluZSAgUkRNQUNfTU9ERV9JUFY0X0xTT19FTgkJIDB4MDgwMDAwMDAKICNkZWZpbmUgIFJETUFDX01PREVfSVBWNl9MU09fRU4JCSAweDEwMDAwMDAwCisjZGVmaW5lICBSRE1BQ19NT0RFX0gyQk5DX1ZMQU5fREVUCSAweDIwMDAwMDAwCiAjZGVmaW5lIFJETUFDX1NUQVRVUwkJCTB4MDAwMDQ4MDQKICNkZWZpbmUgIFJETUFDX1NUQVRVU19UR1RBQk9SVAkJIDB4MDAwMDAwMDQKICNkZWZpbmUgIFJETUFDX1NUQVRVU19NU1RBQk9SVAkJIDB4MDAwMDAwMDgKQEAgLTE1OTcsNiArMTYxMyw3IEBACiAjZGVmaW5lICBNU0dJTlRfTU9ERV9PTkVfU0hPVF9ESVNBQkxFCSAweDAwMDAwMDIwCiAjZGVmaW5lICBNU0dJTlRfTU9ERV9NVUxUSVZFQ19FTgkgMHgwMDAwMDA4MAogI2RlZmluZSBNU0dJTlRfU1RBVFVTCQkJMHgwMDAwNjAwNAorI2RlZmluZSAgTVNHSU5UX1NUQVRVU19NU0lfUkVRCQkgMHgwMDAwMDAwMQogI2RlZmluZSBNU0dJTlRfRklGTwkJCTB4MDAwMDYwMDgKIC8qIDB4NjAwYyAtLT4gMHg2NDAwIHVudXNlZCAqLwogCkBAIC0xNjEzLDYgKzE2MzAsOCBAQAogI2RlZmluZSAgR1JDX01PREVfV1NXQVBfTk9ORlJNX0RBVEEJMHgwMDAwMDAwNAogI2RlZmluZSAgR1JDX01PREVfQlNXQVBfREFUQQkJMHgwMDAwMDAxMAogI2RlZmluZSAgR1JDX01PREVfV1NXQVBfREFUQQkJMHgwMDAwMDAyMAorI2RlZmluZSAgR1JDX01PREVfQllURV9TV0FQX0IySFJYX0RBVEEJMHgwMDAwMDA0MAorI2RlZmluZSAgR1JDX01PREVfV09SRF9TV0FQX0IySFJYX0RBVEEJMHgwMDAwMDA4MAogI2RlZmluZSAgR1JDX01PREVfU1BMSVRIRFIJCTB4MDAwMDAxMDAKICNkZWZpbmUgIEdSQ19NT0RFX05PRlJNX0NSQUNLSU5HCTB4MDAwMDAyMDAKICNkZWZpbmUgIEdSQ19NT0RFX0lOQ0xfQ1JDCQkweDAwMDAwNDAwCkBAIC0xNjIwLDggKzE2MzksMTAgQEAKICNkZWZpbmUgIEdSQ19NT0RFX05PSVJRX09OX1NFTkRTCTB4MDAwMDIwMDAKICNkZWZpbmUgIEdSQ19NT0RFX05PSVJRX09OX1JDVgkJMHgwMDAwNDAwMAogI2RlZmluZSAgR1JDX01PREVfRk9SQ0VfUENJMzJCSVQJMHgwMDAwODAwMAorI2RlZmluZSAgR1JDX01PREVfQjJIUlhfRU5BQkxFCQkweDAwMDA4MDAwCiAjZGVmaW5lICBHUkNfTU9ERV9IT1NUX1NUQUNLVVAJCTB4MDAwMTAwMDAKICNkZWZpbmUgIEdSQ19NT0RFX0hPU1RfU0VOREJEUwkJMHgwMDAyMDAwMAorI2RlZmluZSAgR1JDX01PREVfSFRYMkJfRU5BQkxFCQkweDAwMDQwMDAwCiAjZGVmaW5lICBHUkNfTU9ERV9OT19UWF9QSERSX0NTVU0JMHgwMDEwMDAwMAogI2RlZmluZSAgR1JDX01PREVfTlZSQU1fV1JfRU5BQkxFCTB4MDAyMDAwMDAKICNkZWZpbmUgIEdSQ19NT0RFX1BDSUVfVExfU0VMCQkweDAwMDAwMDAwCkBAIC0xODE4LDYgKzE4MzksMzggQEAKICNkZWZpbmUgIEZMQVNIXzU3MTdWRU5ET1JfQVRNRUxfNDVVU1BUCSAweDAzNDAwMDAwCiAjZGVmaW5lICBGTEFTSF81NzE3VkVORE9SX1NUXzI1VVNQVAkgMHgwMzQwMDAwMgogI2RlZmluZSAgRkxBU0hfNTcxN1ZFTkRPUl9TVF80NVVTUFQJIDB4MDM0MDAwMDEKKyNkZWZpbmUgIEZMQVNIXzU3MjBfRUVQUk9NX0hECQkgMHgwMDAwMDAwMQorI2RlZmluZSAgRkxBU0hfNTcyMF9FRVBST01fTEQJCSAweDAwMDAwMDAzCisjZGVmaW5lICBGTEFTSF81NzIwVkVORE9SX01fQVRNRUxfREIwMTFEIDB4MDEwMDAwMDAKKyNkZWZpbmUgIEZMQVNIXzU3MjBWRU5ET1JfTV9BVE1FTF9EQjAyMUQgMHgwMTAwMDAwMgorI2RlZmluZSAgRkxBU0hfNTcyMFZFTkRPUl9NX0FUTUVMX0RCMDQxRCAweDAxMDAwMDAxCisjZGVmaW5lICBGTEFTSF81NzIwVkVORE9SX01fQVRNRUxfREIwODFEIDB4MDEwMDAwMDMKKyNkZWZpbmUgIEZMQVNIXzU3MjBWRU5ET1JfTV9TVF9NMjVQRTEwCSAweDAyMDAwMDAwCisjZGVmaW5lICBGTEFTSF81NzIwVkVORE9SX01fU1RfTTI1UEUyMAkgMHgwMjAwMDAwMgorI2RlZmluZSAgRkxBU0hfNTcyMFZFTkRPUl9NX1NUX00yNVBFNDAJIDB4MDIwMDAwMDEKKyNkZWZpbmUgIEZMQVNIXzU3MjBWRU5ET1JfTV9TVF9NMjVQRTgwCSAweDAyMDAwMDAzCisjZGVmaW5lICBGTEFTSF81NzIwVkVORE9SX01fU1RfTTQ1UEUxMAkgMHgwMzAwMDAwMAorI2RlZmluZSAgRkxBU0hfNTcyMFZFTkRPUl9NX1NUX000NVBFMjAJIDB4MDMwMDAwMDIKKyNkZWZpbmUgIEZMQVNIXzU3MjBWRU5ET1JfTV9TVF9NNDVQRTQwCSAweDAzMDAwMDAxCisjZGVmaW5lICBGTEFTSF81NzIwVkVORE9SX01fU1RfTTQ1UEU4MAkgMHgwMzAwMDAwMworI2RlZmluZSAgRkxBU0hfNTcyMFZFTkRPUl9BX0FUTUVMX0RCMDExQiAweDAxODAwMDAwCisjZGVmaW5lICBGTEFTSF81NzIwVkVORE9SX0FfQVRNRUxfREIwMjFCIDB4MDE4MDAwMDIKKyNkZWZpbmUgIEZMQVNIXzU3MjBWRU5ET1JfQV9BVE1FTF9EQjA0MUIgMHgwMTgwMDAwMQorI2RlZmluZSAgRkxBU0hfNTcyMFZFTkRPUl9BX0FUTUVMX0RCMDExRCAweDAxYzAwMDAwCisjZGVmaW5lICBGTEFTSF81NzIwVkVORE9SX0FfQVRNRUxfREIwMjFEIDB4MDFjMDAwMDIKKyNkZWZpbmUgIEZMQVNIXzU3MjBWRU5ET1JfQV9BVE1FTF9EQjA0MUQgMHgwMWMwMDAwMQorI2RlZmluZSAgRkxBU0hfNTcyMFZFTkRPUl9BX0FUTUVMX0RCMDgxRCAweDAxYzAwMDAzCisjZGVmaW5lICBGTEFTSF81NzIwVkVORE9SX0FfU1RfTTI1UEUxMAkgMHgwMjgwMDAwMAorI2RlZmluZSAgRkxBU0hfNTcyMFZFTkRPUl9BX1NUX00yNVBFMjAJIDB4MDI4MDAwMDIKKyNkZWZpbmUgIEZMQVNIXzU3MjBWRU5ET1JfQV9TVF9NMjVQRTQwCSAweDAyODAwMDAxCisjZGVmaW5lICBGTEFTSF81NzIwVkVORE9SX0FfU1RfTTI1UEU4MAkgMHgwMjgwMDAwMworI2RlZmluZSAgRkxBU0hfNTcyMFZFTkRPUl9BX1NUX000NVBFMTAJIDB4MDJjMDAwMDAKKyNkZWZpbmUgIEZMQVNIXzU3MjBWRU5ET1JfQV9TVF9NNDVQRTIwCSAweDAyYzAwMDAyCisjZGVmaW5lICBGTEFTSF81NzIwVkVORE9SX0FfU1RfTTQ1UEU0MAkgMHgwMmMwMDAwMQorI2RlZmluZSAgRkxBU0hfNTcyMFZFTkRPUl9BX1NUX000NVBFODAJIDB4MDJjMDAwMDMKKyNkZWZpbmUgIEZMQVNIXzU3MjBWRU5ET1JfQVRNRUxfNDVVU1BUCSAweDAzYzAwMDAwCisjZGVmaW5lICBGTEFTSF81NzIwVkVORE9SX1NUXzI1VVNQVAkgMHgwM2MwMDAwMgorI2RlZmluZSAgRkxBU0hfNTcyMFZFTkRPUl9TVF80NVVTUFQJIDB4MDNjMDAwMDEKICNkZWZpbmUgIE5WUkFNX0NGRzFfNTc1MlBBR0VfU0laRV9NQVNLCSAweDcwMDAwMDAwCiAjZGVmaW5lICBGTEFTSF81NzUyUEFHRV9TSVpFXzI1NgkgMHgwMDAwMDAwMAogI2RlZmluZSAgRkxBU0hfNTc1MlBBR0VfU0laRV81MTIJIDB4MTAwMDAwMDAKQEAgLTE4OTksMTEgKzE5NTIsMTYgQEAKIAogLyogQWx0ZXJuYXRlIFBDSUUgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgVEczX1BDSUVfVExETFBMX1BPUlQJCTB4MDAwMDdjMDAKKyNkZWZpbmUgVEczX1BDSUVfRExfTE9fRlRTTUFYCQkweDAwMDAwMDBjCisjZGVmaW5lIFRHM19QQ0lFX0RMX0xPX0ZUU01BWF9NU0sJMHgwMDAwMDBmZgorI2RlZmluZSBURzNfUENJRV9ETF9MT19GVFNNQVhfVkFMCTB4MDAwMDAwMmMKICNkZWZpbmUgVEczX1BDSUVfUExfTE9fUEhZQ1RMMQkJIDB4MDAwMDAwMDQKICNkZWZpbmUgVEczX1BDSUVfUExfTE9fUEhZQ1RMMV9MMVBMTFBEX0VOCSAgMHgwMDAwMTAwMAogI2RlZmluZSBURzNfUENJRV9QTF9MT19QSFlDVEw1CQkgMHgwMDAwMDAxNAogI2RlZmluZSBURzNfUENJRV9QTF9MT19QSFlDVEw1X0RJU19MMkNMS1JFUQkgIDB4ODAwMDAwMDAKIAorI2RlZmluZSBURzNfUkVHX0JMS19TSVpFCQkweDAwMDA4MDAwCisKIC8qIE9UUCBiaXQgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgVEczX09UUF9BR0NUR1RfTUFTSwkJMHgwMDAwMDBlMAogI2RlZmluZSBURzNfT1RQX0FHQ1RHVF9TSElGVAkJMQpAQCAtMTk1NSw3ICsyMDEzLDkgQEAKICNkZWZpbmUgVEczX05WTV9ESVJfRU5ECQkJMHg3OAogI2RlZmluZSBURzNfTlZNX0RJUkVOVF9TSVpFCQkweGMKICNkZWZpbmUgVEczX05WTV9ESVJUWVBFX1NISUZUCQkyNAorI2RlZmluZSBURzNfTlZNX0RJUlRZUEVfTEVOTVNLCQkweDAwM2ZmZmZmCiAjZGVmaW5lIFRHM19OVk1fRElSVFlQRV9BU0ZJTkkJCTEKKyNkZWZpbmUgVEczX05WTV9ESVJUWVBFX0VYVFZQRAkJMjAKICNkZWZpbmUgVEczX05WTV9QVFJFVl9CQ1ZFUgkJMHg5NAogI2RlZmluZSBURzNfTlZNX0JDVkVSX01BSk1TSwkJMHgwMDAwZmYwMAogI2RlZmluZSBURzNfTlZNX0JDVkVSX01BSlNGVAkJOApAQCAtMjA3OSw2ICsyMTM5LDEzIEBACiAjZGVmaW5lICBOSUNfU1JBTV9NQlVGX1BPT0xfQkFTRTU3MDUJMHgwMDAxMDAwMAogI2RlZmluZSAgTklDX1NSQU1fTUJVRl9QT09MX1NJWkU1NzA1CTB4MDAwMGUwMDAKIAorI2RlZmluZSBURzNfU1JBTV9SWF9TVERfQkRDQUNIRV9TSVpFXzU3MDAJMTI4CisjZGVmaW5lIFRHM19TUkFNX1JYX1NURF9CRENBQ0hFX1NJWkVfNTc1NQk2NAorI2RlZmluZSBURzNfU1JBTV9SWF9TVERfQkRDQUNIRV9TSVpFXzU5MDYJMzIKKworI2RlZmluZSBURzNfU1JBTV9SWF9KTUJfQkRDQUNIRV9TSVpFXzU3MDAJNjQKKyNkZWZpbmUgVEczX1NSQU1fUlhfSk1CX0JEQ0FDSEVfU0laRV81NzE3CTE2CisKIAogLyogQ3VycmVudGx5IHRoaXMgaXMgZml4ZWQuICovCiAjZGVmaW5lIFRHM19QSFlfTUlJX0FERFIJCTB4MDEKQEAgLTIxMTksNyArMjE4Niw3IEBACiAjZGVmaW5lICBNSUlfVEczX0RTUF9UQVAyNl9PUENTSU5QVAkweDAwMDQKICNkZWZpbmUgTUlJX1RHM19EU1BfQUFESjFDSDAJCTB4MDAxZgogI2RlZmluZSBNSUlfVEczX0RTUF9DSDM0VFAyCQkweDQwMjIKLSNkZWZpbmUgTUlJX1RHM19EU1BfQ0gzNFRQMl9ISUJXMDEJMHgwMDEwCisjZGVmaW5lIE1JSV9URzNfRFNQX0NIMzRUUDJfSElCVzAxCTB4MDE3YgogI2RlZmluZSBNSUlfVEczX0RTUF9BQURKMUNIMwkJMHg2MDFmCiAjZGVmaW5lICBNSUlfVEczX0RTUF9BQURKMUNIM19BRENDS0FESgkweDAwMDIKICNkZWZpbmUgTUlJX1RHM19EU1BfRVhQMV9JTlRfU1RBVAkweDBmMDEKQEAgLTIxMzIsMTkgKzIxOTksMjYgQEAKIAogI2RlZmluZSBNSUlfVEczX0FVWF9DVFJMCQkweDE4IC8qIGF1eGlsaWFyeSBjb250cm9sIHJlZ2lzdGVyICovCiAKKyNkZWZpbmUgTUlJX1RHM19BVVhDVExfU0hEV1NFTF9BVVhDVEwJMHgwMDAwCisjZGVmaW5lIE1JSV9URzNfQVVYQ1RMX0FDVExfVFhfNkRCCTB4MDQwMAorI2RlZmluZSBNSUlfVEczX0FVWENUTF9BQ1RMX1NNRFNQX0VOQQkweDA4MDAKKyNkZWZpbmUgTUlJX1RHM19BVVhDVExfQUNUTF9FWFRQS1RMRU4JMHg0MDAwCisKKyNkZWZpbmUgTUlJX1RHM19BVVhDVExfU0hEV1NFTF9QV1JDVEwJMHgwMDAyCisjZGVmaW5lIE1JSV9URzNfQVVYQ1RMX1BDVExfV09MX0VOCTB4MDAwOAogI2RlZmluZSBNSUlfVEczX0FVWENUTF9QQ1RMXzEwMFRYX0xQV1IJMHgwMDEwCiAjZGVmaW5lIE1JSV9URzNfQVVYQ1RMX1BDVExfU1BSX0lTT0xBVEUJMHgwMDIwCisjZGVmaW5lIE1JSV9URzNfQVVYQ1RMX1BDVExfQ0xfQUJfVFhEQUMJMHgwMDQwCiAjZGVmaW5lIE1JSV9URzNfQVVYQ1RMX1BDVExfVlJFR18xMVYJMHgwMTgwCi0jZGVmaW5lIE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfUFdSQ1RMCTB4MDAwMgogCi0jZGVmaW5lIE1JSV9URzNfQVVYQ1RMX01JU0NfV1JFTgkweDgwMDAKLSNkZWZpbmUgTUlJX1RHM19BVVhDVExfTUlTQ19GT1JDRV9BTURJWAkweDAyMDAKLSNkZWZpbmUgTUlJX1RHM19BVVhDVExfTUlTQ19SRFNFTF9NSVNDCTB4NzAwMAorI2RlZmluZSBNSUlfVEczX0FVWENUTF9TSERXU0VMX01JU0NURVNUCTB4MDAwNAorCiAjZGVmaW5lIE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfTUlTQwkweDAwMDcKKyNkZWZpbmUgTUlJX1RHM19BVVhDVExfTUlTQ19XSVJFU1BEX0VOCTB4MDAxMAorI2RlZmluZSBNSUlfVEczX0FVWENUTF9NSVNDX0ZPUkNFX0FNRElYCTB4MDIwMAorI2RlZmluZSBNSUlfVEczX0FVWENUTF9NSVNDX1JEU0VMX1NISUZUCTEyCisjZGVmaW5lIE1JSV9URzNfQVVYQ1RMX01JU0NfV1JFTgkweDgwMDAKIAotI2RlZmluZSBNSUlfVEczX0FVWENUTF9BQ1RMX1NNRFNQX0VOQQkweDA4MDAKLSNkZWZpbmUgTUlJX1RHM19BVVhDVExfQUNUTF9UWF82REIJMHgwNDAwCi0jZGVmaW5lIE1JSV9URzNfQVVYQ1RMX1NIRFdTRUxfQVVYQ1RMCTB4MDAwMAogCiAjZGVmaW5lIE1JSV9URzNfQVVYX1NUQVQJCTB4MTkgLyogYXV4aWxpYXJ5IHN0YXR1cyByZWdpc3RlciAqLwogI2RlZmluZSBNSUlfVEczX0FVWF9TVEFUX0xQQVNTCQkweDAwMDQKQEAgLTI1NjQsNyArMjYzOCwxMiBAQAogCXRnM19zdGF0NjRfdAkJCW5pY19hdm9pZGVkX2lycXM7CiAJdGczX3N0YXQ2NF90CQkJbmljX3R4X3RocmVzaG9sZF9oaXQ7CiAKLQl1OAkJCQlfX3Jlc2VydmVkNFsweGIwMC0weDljMF07CisJLyogTk9UIGEgcGFydCBvZiB0aGUgaGFyZHdhcmUgc3RhdGlzdGljcyBibG9jayBmb3JtYXQuCisJICogVGhlc2Ugc3RhdHMgYXJlIGhlcmUgYXMgc3RvcmFnZSBmb3IgdGczX3BlcmlvZGljX2ZldGNoX3N0YXRzKCkuCisJICovCisJdGczX3N0YXQ2NF90CQkJbWJ1Zl9sd21fdGhyZXNoX2hpdDsKKworCXU4CQkJCV9fcmVzZXJ2ZWQ0WzB4YjAwLTB4OWM4XTsKIH07CiAKIC8qICdtYXBwaW5nJyBpcyBzdXBlcmZsdW91cyBhcyB0aGUgY2hpcCBkb2VzIG5vdCB3cml0ZSBpbnRvCkBAIC0yNjk2LDYgKzI3NzUsOCBAQAogCXU2NAkJbmljX2lycXM7CiAJdTY0CQluaWNfYXZvaWRlZF9pcnFzOwogCXU2NAkJbmljX3R4X3RocmVzaG9sZF9oaXQ7CisKKwl1NjQJCW1idWZfbHdtX3RocmVzaF9oaXQ7CiB9OwogCiBzdHJ1Y3QgdGczX3J4X3Byb2RyaW5nX3NldCB7CkBAIC0yNzQ1LDYgKzI4MjYsODYgQEAKIAl1bnNpZ25lZCBpbnQJCQlpcnFfdmVjOwogfTsKIAorZW51bSBURzNfRkxBR1MgeworCVRHM19GTEFHX1RBR0dFRF9TVEFUVVMgPSAwLAorCVRHM19GTEFHX1RYRF9NQk9YX0hXQlVHLAorCVRHM19GTEFHX1VTRV9MSU5LQ0hHX1JFRywKKwlURzNfRkxBR19FUlJPUl9QUk9DRVNTRUQsCisJVEczX0ZMQUdfRU5BQkxFX0FTRiwKKwlURzNfRkxBR19BU1BNX1dPUktBUk9VTkQsCisJVEczX0ZMQUdfUE9MTF9TRVJERVMsCisJVEczX0ZMQUdfTUJPWF9XUklURV9SRU9SREVSLAorCVRHM19GTEFHX1BDSVhfVEFSR0VUX0hXQlVHLAorCVRHM19GTEFHX1dPTF9TUEVFRF8xMDBNQiwKKwlURzNfRkxBR19XT0xfRU5BQkxFLAorCVRHM19GTEFHX0VFUFJPTV9XUklURV9QUk9ULAorCVRHM19GTEFHX05WUkFNLAorCVRHM19GTEFHX05WUkFNX0JVRkZFUkVELAorCVRHM19GTEFHX1NVUFBPUlRfTVNJLAorCVRHM19GTEFHX1NVUFBPUlRfTVNJWCwKKwlURzNfRkxBR19QQ0lYX01PREUsCisJVEczX0ZMQUdfUENJX0hJR0hfU1BFRUQsCisJVEczX0ZMQUdfUENJXzMyQklULAorCVRHM19GTEFHX1NSQU1fVVNFX0NPTkZJRywKKwlURzNfRkxBR19UWF9SRUNPVkVSWV9QRU5ESU5HLAorCVRHM19GTEFHX1dPTF9DQVAsCisJVEczX0ZMQUdfSlVNQk9fUklOR19FTkFCTEUsCisJVEczX0ZMQUdfUEFVU0VfQVVUT05FRywKKwlURzNfRkxBR19DUE1VX1BSRVNFTlQsCisJVEczX0ZMQUdfNDBCSVRfRE1BX0JVRywKKwlURzNfRkxBR19CUk9LRU5fQ0hFQ0tTVU1TLAorCVRHM19GTEFHX0pVTUJPX0NBUEFCTEUsCisJVEczX0ZMQUdfQ0hJUF9SRVNFVFRJTkcsCisJVEczX0ZMQUdfSU5JVF9DT01QTEVURSwKKwlURzNfRkxBR19SRVNUQVJUX1RJTUVSLAorCVRHM19GTEFHX1RTT19CVUcsCisJVEczX0ZMQUdfSVNfNTc4OCwKKwlURzNfRkxBR19NQVhfUlhQRU5EXzY0LAorCVRHM19GTEFHX1RTT19DQVBBQkxFLAorCVRHM19GTEFHX1BDSV9FWFBSRVNTLAorCVRHM19GTEFHX0FTRl9ORVdfSEFORFNIQUtFLAorCVRHM19GTEFHX0hXX0FVVE9ORUcsCisJVEczX0ZMQUdfSVNfTklDLAorCVRHM19GTEFHX0ZMQVNILAorCVRHM19GTEFHX0hXX1RTT18xLAorCVRHM19GTEFHXzU3MDVfUExVUywKKwlURzNfRkxBR181NzUwX1BMVVMsCisJVEczX0ZMQUdfSFdfVFNPXzMsCisJVEczX0ZMQUdfVVNJTkdfTVNJLAorCVRHM19GTEFHX1VTSU5HX01TSVgsCisJVEczX0ZMQUdfSUNIX1dPUktBUk9VTkQsCisJVEczX0ZMQUdfNTc4MF9DTEFTUywKKwlURzNfRkxBR19IV19UU09fMiwKKwlURzNfRkxBR18xU0hPVF9NU0ksCisJVEczX0ZMQUdfTk9fRldBUkVfUkVQT1JURUQsCisJVEczX0ZMQUdfTk9fTlZSQU1fQUREUl9UUkFOUywKKwlURzNfRkxBR19FTkFCTEVfQVBFLAorCVRHM19GTEFHX1BST1RFQ1RFRF9OVlJBTSwKKwlURzNfRkxBR181NzAxX0RNQV9CVUcsCisJVEczX0ZMQUdfVVNFX1BIWUxJQiwKKwlURzNfRkxBR19NRElPQlVTX0lOSVRFRCwKKwlURzNfRkxBR19MUkdfUFJPRF9SSU5HX0NBUCwKKwlURzNfRkxBR19SR01JSV9JTkJBTkRfRElTQUJMRSwKKwlURzNfRkxBR19SR01JSV9FWFRfSUJORF9SWF9FTiwKKwlURzNfRkxBR19SR01JSV9FWFRfSUJORF9UWF9FTiwKKwlURzNfRkxBR19DTEtSRVFfQlVHLAorCVRHM19GTEFHXzU3NTVfUExVUywKKwlURzNfRkxBR19OT19OVlJBTSwKKwlURzNfRkxBR19FTkFCTEVfUlNTLAorCVRHM19GTEFHX0VOQUJMRV9UU1MsCisJVEczX0ZMQUdfNEdfRE1BX0JORFJZX0JVRywKKwlURzNfRkxBR180MEJJVF9ETUFfTElNSVRfQlVHLAorCVRHM19GTEFHX1NIT1JUX0RNQV9CVUcsCisJVEczX0ZMQUdfVVNFX0pVTUJPX0JERkxBRywKKwlURzNfRkxBR19MMVBMTFBEX0VOLAorCVRHM19GTEFHXzU3NzY1X1BMVVMsCisJVEczX0ZMQUdfQVBFX0hBU19OQ1NJLAorCVRHM19GTEFHXzU3MTdfUExVUywKKworCS8qIEFkZCBuZXcgZmxhZ3MgYmVmb3JlIHRoaXMgY29tbWVudCBhbmQgVEczX0ZMQUdfTlVNQkVSX09GX0ZMQUdTICovCisJVEczX0ZMQUdfTlVNQkVSX09GX0ZMQUdTLAkvKiBMYXN0IGVudHJ5IGluIGVudW0gVEczX0ZMQUdTICovCit9OworCiBzdHJ1Y3QgdGczIHsKIAkvKiBiZWdpbiAiZ2VuZXJhbCwgZnJlcXVlbnRseS11c2VkIG1lbWJlcnMiIGNhY2hlbGluZSBzZWN0aW9uICovCiAKQEAgLTI3NjgsNyArMjkyOSw3IEBACiAJLyogU01QIGxvY2tpbmcgc3RyYXRlZ3k6CiAJICoKIAkgKiBsb2NrOiBIZWxkIGR1cmluZyByZXNldCwgUEhZIGFjY2VzcywgdGltZXIsIGFuZCB3aGVuCi0JICogICAgICAgdXBkYXRpbmcgdGczX2ZsYWdzIGFuZCB0ZzNfZmxhZ3MyLgorCSAqICAgICAgIHVwZGF0aW5nIHRnM19mbGFncy4KIAkgKgogCSAqIG5ldGlmX3R4X2xvY2s6IEhlbGQgZHVyaW5nIHRnM19zdGFydF94bWl0LiB0ZzNfdHggaG9sZHMKIAkgKiAgICAgICAgICAgICAgICBuZXRpZl90eF9sb2NrIHdoZW4gaXQgbmVlZHMgdG8gY2FsbApAQCAtMjgyNSw5NCArMjk4NiwxMyBAQAogCXN0cnVjdCB0ZzNfZXRodG9vbF9zdGF0cwllc3RhdHM7CiAJc3RydWN0IHRnM19ldGh0b29sX3N0YXRzCWVzdGF0c19wcmV2OwogCisJREVDTEFSRV9CSVRNQVAodGczX2ZsYWdzLCBURzNfRkxBR19OVU1CRVJfT0ZfRkxBR1MpOworCiAJdW5pb24gewogCXVuc2lnbmVkIGxvbmcJCQlwaHlfY3JjX2Vycm9yczsKIAl1bnNpZ25lZCBsb25nCQkJbGFzdF9ldmVudF9qaWZmaWVzOwogCX07CiAKLQl1MzIJCQkJdGczX2ZsYWdzOwotI2RlZmluZSBURzNfRkxBR19UQUdHRURfU1RBVFVTCQkweDAwMDAwMDAxCi0jZGVmaW5lIFRHM19GTEFHX1RYRF9NQk9YX0hXQlVHCQkweDAwMDAwMDAyCi0jZGVmaW5lIFRHM19GTEFHX1JYX0NIRUNLU1VNUwkJMHgwMDAwMDAwNAotI2RlZmluZSBURzNfRkxBR19VU0VfTElOS0NIR19SRUcJMHgwMDAwMDAwOAotI2RlZmluZSBURzNfRkxBR19FTkFCTEVfQVNGCQkweDAwMDAwMDIwCi0jZGVmaW5lIFRHM19GTEFHX0FTUE1fV09SS0FST1VORAkweDAwMDAwMDQwCi0jZGVmaW5lIFRHM19GTEFHX1BPTExfU0VSREVTCQkweDAwMDAwMDgwCi0jZGVmaW5lIFRHM19GTEFHX01CT1hfV1JJVEVfUkVPUkRFUgkweDAwMDAwMTAwCi0jZGVmaW5lIFRHM19GTEFHX1BDSVhfVEFSR0VUX0hXQlVHCTB4MDAwMDAyMDAKLSNkZWZpbmUgVEczX0ZMQUdfV09MX1NQRUVEXzEwME1CCTB4MDAwMDA0MDAKLSNkZWZpbmUgVEczX0ZMQUdfV09MX0VOQUJMRQkJMHgwMDAwMDgwMAotI2RlZmluZSBURzNfRkxBR19FRVBST01fV1JJVEVfUFJPVAkweDAwMDAxMDAwCi0jZGVmaW5lIFRHM19GTEFHX05WUkFNCQkJMHgwMDAwMjAwMAotI2RlZmluZSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRAkJMHgwMDAwNDAwMAotI2RlZmluZSBURzNfRkxBR19TVVBQT1JUX01TSQkJMHgwMDAwODAwMAotI2RlZmluZSBURzNfRkxBR19TVVBQT1JUX01TSVgJCTB4MDAwMTAwMDAKLSNkZWZpbmUgVEczX0ZMQUdfU1VQUE9SVF9NU0lfT1JfTVNJWAkoVEczX0ZMQUdfU1VQUE9SVF9NU0kgfCBcCi0JCQkJCSBURzNfRkxBR19TVVBQT1JUX01TSVgpCi0jZGVmaW5lIFRHM19GTEFHX1BDSVhfTU9ERQkJMHgwMDAyMDAwMAotI2RlZmluZSBURzNfRkxBR19QQ0lfSElHSF9TUEVFRAkJMHgwMDA0MDAwMAotI2RlZmluZSBURzNfRkxBR19QQ0lfMzJCSVQJCTB4MDAwODAwMDAKLSNkZWZpbmUgVEczX0ZMQUdfU1JBTV9VU0VfQ09ORklHCTB4MDAxMDAwMDAKLSNkZWZpbmUgVEczX0ZMQUdfVFhfUkVDT1ZFUllfUEVORElORwkweDAwMjAwMDAwCi0jZGVmaW5lIFRHM19GTEFHX1dPTF9DQVAJCTB4MDA0MDAwMDAKLSNkZWZpbmUgVEczX0ZMQUdfSlVNQk9fUklOR19FTkFCTEUJMHgwMDgwMDAwMAotI2RlZmluZSBURzNfRkxBR19QQVVTRV9BVVRPTkVHCQkweDAyMDAwMDAwCi0jZGVmaW5lIFRHM19GTEFHX0NQTVVfUFJFU0VOVAkJMHgwNDAwMDAwMAotI2RlZmluZSBURzNfRkxBR180MEJJVF9ETUFfQlVHCQkweDA4MDAwMDAwCi0jZGVmaW5lIFRHM19GTEFHX0JST0tFTl9DSEVDS1NVTVMJMHgxMDAwMDAwMAotI2RlZmluZSBURzNfRkxBR19KVU1CT19DQVBBQkxFCQkweDIwMDAwMDAwCi0jZGVmaW5lIFRHM19GTEFHX0NISVBfUkVTRVRUSU5HCQkweDQwMDAwMDAwCi0jZGVmaW5lIFRHM19GTEFHX0lOSVRfQ09NUExFVEUJCTB4ODAwMDAwMDAKLQl1MzIJCQkJdGczX2ZsYWdzMjsKLSNkZWZpbmUgVEczX0ZMRzJfUkVTVEFSVF9USU1FUgkJMHgwMDAwMDAwMQotI2RlZmluZSBURzNfRkxHMl9UU09fQlVHCQkweDAwMDAwMDAyCi0jZGVmaW5lIFRHM19GTEcyX0lTXzU3ODgJCTB4MDAwMDAwMDgKLSNkZWZpbmUgVEczX0ZMRzJfTUFYX1JYUEVORF82NAkJMHgwMDAwMDAxMAotI2RlZmluZSBURzNfRkxHMl9UU09fQ0FQQUJMRQkJMHgwMDAwMDAyMAotI2RlZmluZSBURzNfRkxHMl9QQ0lfRVhQUkVTUwkJMHgwMDAwMDIwMAotI2RlZmluZSBURzNfRkxHMl9BU0ZfTkVXX0hBTkRTSEFLRQkweDAwMDAwNDAwCi0jZGVmaW5lIFRHM19GTEcyX0hXX0FVVE9ORUcJCTB4MDAwMDA4MDAKLSNkZWZpbmUgVEczX0ZMRzJfSVNfTklDCQkJMHgwMDAwMTAwMAotI2RlZmluZSBURzNfRkxHMl9GTEFTSAkJCTB4MDAwMDgwMDAKLSNkZWZpbmUgVEczX0ZMRzJfSFdfVFNPXzEJCTB4MDAwMTAwMDAKLSNkZWZpbmUgVEczX0ZMRzJfNTcwNV9QTFVTCQkweDAwMDQwMDAwCi0jZGVmaW5lIFRHM19GTEcyXzU3NTBfUExVUwkJMHgwMDA4MDAwMAotI2RlZmluZSBURzNfRkxHMl9IV19UU09fMwkJMHgwMDEwMDAwMAotI2RlZmluZSBURzNfRkxHMl9VU0lOR19NU0kJCTB4MDAyMDAwMDAKLSNkZWZpbmUgVEczX0ZMRzJfVVNJTkdfTVNJWAkJMHgwMDQwMDAwMAotI2RlZmluZSBURzNfRkxHMl9VU0lOR19NU0lfT1JfTVNJWAkoVEczX0ZMRzJfVVNJTkdfTVNJIHwgXAotCQkJCQlURzNfRkxHMl9VU0lOR19NU0lYKQotI2RlZmluZSBURzNfRkxHMl9JQ0hfV09SS0FST1VORAkJMHgwMjAwMDAwMAotI2RlZmluZSBURzNfRkxHMl81NzgwX0NMQVNTCQkweDA0MDAwMDAwCi0jZGVmaW5lIFRHM19GTEcyX0hXX1RTT18yCQkweDA4MDAwMDAwCi0jZGVmaW5lIFRHM19GTEcyX0hXX1RTTwkJCShURzNfRkxHMl9IV19UU09fMSB8IFwKLQkJCQkJIFRHM19GTEcyX0hXX1RTT18yIHwgXAotCQkJCQkgVEczX0ZMRzJfSFdfVFNPXzMpCi0jZGVmaW5lIFRHM19GTEcyXzFTSE9UX01TSQkJMHgxMDAwMDAwMAotI2RlZmluZSBURzNfRkxHMl9OT19GV0FSRV9SRVBPUlRFRAkweDQwMDAwMDAwCi0JdTMyCQkJCXRnM19mbGFnczM7Ci0jZGVmaW5lIFRHM19GTEczX05PX05WUkFNX0FERFJfVFJBTlMJMHgwMDAwMDAwMQotI2RlZmluZSBURzNfRkxHM19FTkFCTEVfQVBFCQkweDAwMDAwMDAyCi0jZGVmaW5lIFRHM19GTEczX1BST1RFQ1RFRF9OVlJBTQkweDAwMDAwMDA0Ci0jZGVmaW5lIFRHM19GTEczXzU3MDFfRE1BX0JVRwkJMHgwMDAwMDAwOAotI2RlZmluZSBURzNfRkxHM19VU0VfUEhZTElCCQkweDAwMDAwMDEwCi0jZGVmaW5lIFRHM19GTEczX01ESU9CVVNfSU5JVEVECQkweDAwMDAwMDIwCi0jZGVmaW5lIFRHM19GTEczX1JHTUlJX0lOQkFORF9ESVNBQkxFCTB4MDAwMDAxMDAKLSNkZWZpbmUgVEczX0ZMRzNfUkdNSUlfRVhUX0lCTkRfUlhfRU4JMHgwMDAwMDIwMAotI2RlZmluZSBURzNfRkxHM19SR01JSV9FWFRfSUJORF9UWF9FTgkweDAwMDAwNDAwCi0jZGVmaW5lIFRHM19GTEczX0NMS1JFUV9CVUcJCTB4MDAwMDA4MDAKLSNkZWZpbmUgVEczX0ZMRzNfNTc1NV9QTFVTCQkweDAwMDAyMDAwCi0jZGVmaW5lIFRHM19GTEczX05PX05WUkFNCQkweDAwMDA0MDAwCi0jZGVmaW5lIFRHM19GTEczX0VOQUJMRV9SU1MJCTB4MDAwMjAwMDAKLSNkZWZpbmUgVEczX0ZMRzNfRU5BQkxFX1RTUwkJMHgwMDA0MDAwMAotI2RlZmluZSBURzNfRkxHM180R19ETUFfQk5EUllfQlVHCTB4MDAwODAwMDAKLSNkZWZpbmUgVEczX0ZMRzNfNDBCSVRfRE1BX0xJTUlUX0JVRwkweDAwMTAwMDAwCi0jZGVmaW5lIFRHM19GTEczX1NIT1JUX0RNQV9CVUcJCTB4MDAyMDAwMDAKLSNkZWZpbmUgVEczX0ZMRzNfVVNFX0pVTUJPX0JERkxBRwkweDAwNDAwMDAwCi0jZGVmaW5lIFRHM19GTEczX0wxUExMUERfRU4JCTB4MDA4MDAwMDAKLSNkZWZpbmUgVEczX0ZMRzNfNTcxN19QTFVTCQkweDAxMDAwMDAwCi0jZGVmaW5lIFRHM19GTEczX0FQRV9IQVNfTkNTSQkJMHgwMjAwMDAwMAotCiAJc3RydWN0IHRpbWVyX2xpc3QJCXRpbWVyOwogCXUxNgkJCQl0aW1lcl9jb3VudGVyOwogCXUxNgkJCQl0aW1lcl9tdWx0aXBsaWVyOwpAQCAtMjk4Myw2ICszMDYzLDcgQEAKICNkZWZpbmUgVEczX1BIWV9JRF9CQ001NzE4UwkJMHhiYzA1MGZmMAogI2RlZmluZSBURzNfUEhZX0lEX0JDTTU3NzY1CQkweDVjMGQ4YTQwCiAjZGVmaW5lIFRHM19QSFlfSURfQkNNNTcxOUMJCTB4NWMwZDhhMjAKKyNkZWZpbmUgVEczX1BIWV9JRF9CQ001NzIwQwkJMHg1YzBkOGI2MAogI2RlZmluZSBURzNfUEhZX0lEX0JDTTU5MDYJCTB4ZGMwMGFjNDAKICNkZWZpbmUgVEczX1BIWV9JRF9CQ004MDAyCQkweDYwMDEwMTQwCiAjZGVmaW5lIFRHM19QSFlfSURfSU5WQUxJRAkJMHhmZmZmZmZmZgpAQCAtMzA0OSw2ICszMTMwLDcgQEAKIAogCWludAkJCQludnJhbV9sb2NrX2NudDsKIAl1MzIJCQkJbnZyYW1fc2l6ZTsKKyNkZWZpbmUgVEczX05WUkFNX1NJWkVfMktCCQkweDAwMDAwODAwCiAjZGVmaW5lIFRHM19OVlJBTV9TSVpFXzY0S0IJCTB4MDAwMTAwMDAKICNkZWZpbmUgVEczX05WUkFNX1NJWkVfMTI4S0IJCTB4MDAwMjAwMDAKICNkZWZpbmUgVEczX05WUkFNX1NJWkVfMjU2S0IJCTB4MDAwNDAwMDAKQEAgLTMwNjQsNiArMzE0Niw5IEBACiAjZGVmaW5lIEpFREVDX1NBSUZVTgkJCTB4NGYKICNkZWZpbmUgSkVERUNfU1NUCQkJMHhiZgogCisjZGVmaW5lIEFUTUVMX0FUMjRDMDJfQ0hJUF9TSVpFCQlURzNfTlZSQU1fU0laRV8yS0IKKyNkZWZpbmUgQVRNRUxfQVQyNEMwMl9QQUdFX1NJWkUJCSg4KQorCiAjZGVmaW5lIEFUTUVMX0FUMjRDNjRfQ0hJUF9TSVpFCQlURzNfTlZSQU1fU0laRV82NEtCCiAjZGVmaW5lIEFUTUVMX0FUMjRDNjRfUEFHRV9TSVpFCQkoMzIpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RpbGUvdGlsZXByby5jIGIvZHJpdmVycy9uZXQvdGlsZS90aWxlcHJvLmMKaW5kZXggMDgyNWRiNi4uMWU5ODBmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGlsZS90aWxlcHJvLmMKKysrIGIvZHJpdmVycy9uZXQvdGlsZS90aWxlcHJvLmMKQEAgLTE5MzAsNyArMTkzMCw3IEBACiAJdW5zaWduZWQgaW50IGxlbiA9IHNrYi0+bGVuOwogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSBza2ItPmRhdGE7CiAKLQl1bnNpZ25lZCBpbnQgY3N1bV9zdGFydCA9IHNrYi0+Y3N1bV9zdGFydCAtIHNrYl9oZWFkcm9vbShza2IpOworCXVuc2lnbmVkIGludCBjc3VtX3N0YXJ0ID0gc2tiX2NoZWNrc3VtX3N0YXJ0X29mZnNldChza2IpOwogCiAJbGVwcF9mcmFnX3QgZnJhZ3NbTEVQUF9NQVhfRlJBR1NdOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvbWFkZ2VtYy5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL21hZGdlbWMuYwppbmRleCAyYmVkYzBhLi4xMzEzYWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvbWFkZ2VtYy5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9tYWRnZW1jLmMKQEAgLTcyNyw3ICs3MjcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc2hvcnQgbWFkZ2VtY19hZGFwdGVyX2lkc1tdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc2hvcnQgbWFkZ2VtY19hZGFwdGVyX2lkc1tdIF9fZGV2aW5pdGNvbnN0ID0gewogCTB4MDAyZCwKIAkweDAwMDAKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuYwppbmRleCAyNjg0MDAzLi5lMzg1NWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmMKQEAgLTg2LDYgKzg2LDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CkBAIC0xOTMsNyArMTk0LDcgQEAKIHN0YXRpYyBpbnQgb2x5bXBpY19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBtdHUpOwogc3RhdGljIHZvaWQgb2x5bXBpY19zcmJfYmgoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgOyAKIHN0YXRpYyB2b2lkIG9seW1waWNfYXNiX2JoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIDsgCi1zdGF0aWMgaW50IG9seW1waWNfcHJvY19pbmZvKGNoYXIgKmJ1ZmZlciwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCBsZW5ndGgsIGludCAqZW9mLCB2b2lkICpkYXRhKSA7IAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb2x5bXBpY19wcm9jX29wczsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBvbHltcGljX25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuCQk9IG9seW1waWNfb3BlbiwKQEAgLTI3Miw3ICsyNzMsNyBAQAogCQljaGFyIHByb2NfbmFtZVsyMF0gOyAKIAkJc3RyY3B5KHByb2NfbmFtZSwib2x5bXBpY18iKSA7CiAJCXN0cmNhdChwcm9jX25hbWUsZGV2LT5uYW1lKSA7IAotCQljcmVhdGVfcHJvY19yZWFkX2VudHJ5KHByb2NfbmFtZSwwLGluaXRfbmV0LnByb2NfbmV0LG9seW1waWNfcHJvY19pbmZvLCh2b2lkICopZGV2KSA7CisJCXByb2NfY3JlYXRlX2RhdGEocHJvY19uYW1lLCAwLCBpbml0X25ldC5wcm9jX25ldCwgJm9seW1waWNfcHJvY19vcHMsIGRldik7CiAJCXByaW50aygiT2x5bXBpYzogTmV0d29yayBNb25pdG9yIGluZm9ybWF0aW9uOiAvcHJvYy8lc1xuIixwcm9jX25hbWUpOyAKIAl9CiAJcmV0dXJuICAwIDsKQEAgLTE2MTUsMjkgKzE2MTYsMjUgQEAKIAlyZXR1cm4gMCA7IAogfQogCi1zdGF0aWMgaW50IG9seW1waWNfcHJvY19pbmZvKGNoYXIgKmJ1ZmZlciwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCBsZW5ndGgsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBvbHltcGljX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGEgOyAKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbS0+cHJpdmF0ZTsKIAlzdHJ1Y3Qgb2x5bXBpY19wcml2YXRlICpvbHltcGljX3ByaXY9bmV0ZGV2X3ByaXYoZGV2KTsKIAl1OCBfX2lvbWVtICpvYXQgPSAob2x5bXBpY19wcml2LT5vbHltcGljX2xhcCArIG9seW1waWNfcHJpdi0+b2x5bXBpY19hZGRyX3RhYmxlX2FkZHIpIDsgCiAJdTggX19pb21lbSAqb3B0ID0gKG9seW1waWNfcHJpdi0+b2x5bXBpY19sYXAgKyBvbHltcGljX3ByaXYtPm9seW1waWNfcGFybXNfYWRkcikgOyAKLQlpbnQgc2l6ZSA9IDAgOyAKLQlpbnQgbGVuPTA7Ci0Jb2ZmX3QgYmVnaW49MDsKLQlvZmZfdCBwb3M9MDsKIAl1OCBhZGRyWzZdOwogCXU4IGFkZHIyWzZdOwogCWludCBpOwogCi0Jc2l6ZSA9IHNwcmludGYoYnVmZmVyLCAKKwlzZXFfcHJpbnRmKG0sCiAJCSJJQk0gUGl0L1BpdC1QaHkvT2x5bXBpYyBDaGlwc2V0IFRva2VuIFJpbmcgQWRhcHRlciAlc1xuIixkZXYtPm5hbWUpOwotCXNpemUgKz0gc3ByaW50ZihidWZmZXIrc2l6ZSwgIlxuJTZzOiBBZGFwdGVyIEFkZHJlc3MgICA6IE5vZGUgQWRkcmVzcyAgICAgIDogRnVuY3Rpb25hbCBBZGRyXG4iLAorCXNlcV9wcmludGYobSwgIlxuJTZzOiBBZGFwdGVyIEFkZHJlc3MgICA6IE5vZGUgQWRkcmVzcyAgICAgIDogRnVuY3Rpb25hbCBBZGRyXG4iLAogIAkgICBkZXYtPm5hbWUpOyAKIAogCWZvciAoaSA9IDAgOyBpIDwgNiA7IGkrKykKIAkJYWRkcltpXSA9IHJlYWRiKG9hdCtvZmZzZXRvZihzdHJ1Y3Qgb2x5bXBpY19hZGFwdGVyX2FkZHJfdGFibGUsbm9kZV9hZGRyKSArIGkpOwogCi0Jc2l6ZSArPSBzcHJpbnRmKGJ1ZmZlcitzaXplLCAiJTZzOiAlcE0gOiAlcE0gOiAlMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCXNlcV9wcmludGYobSwgIiU2czogJXBNIDogJXBNIDogJTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKIAkgICBkZXYtPm5hbWUsCiAJICAgZGV2LT5kZXZfYWRkciwgYWRkciwKIAkgICByZWFkYihvYXQrb2Zmc2V0b2Yoc3RydWN0IG9seW1waWNfYWRhcHRlcl9hZGRyX3RhYmxlLGZ1bmNfYWRkcikpLCAKQEAgLTE2NDUsOSArMTY0Miw5IEBACiAJICAgcmVhZGIob2F0K29mZnNldG9mKHN0cnVjdCBvbHltcGljX2FkYXB0ZXJfYWRkcl90YWJsZSxmdW5jX2FkZHIpKzIpLAogCSAgIHJlYWRiKG9hdCtvZmZzZXRvZihzdHJ1Y3Qgb2x5bXBpY19hZGFwdGVyX2FkZHJfdGFibGUsZnVuY19hZGRyKSszKSk7CiAJIAotCXNpemUgKz0gc3ByaW50ZihidWZmZXIrc2l6ZSwgIlxuJTZzOiBUb2tlbiBSaW5nIFBhcmFtZXRlcnMgVGFibGU6XG4iLCBkZXYtPm5hbWUpOworCXNlcV9wcmludGYobSwgIlxuJTZzOiBUb2tlbiBSaW5nIFBhcmFtZXRlcnMgVGFibGU6XG4iLCBkZXYtPm5hbWUpOwogCi0Jc2l6ZSArPSBzcHJpbnRmKGJ1ZmZlcitzaXplLCAiJTZzOiBQaHlzaWNhbCBBZGRyIDogVXAgTm9kZSBBZGRyZXNzICAgOiBQb2xsIEFkZHJlc3MgICAgICA6IEFjY1ByaSA6IEF1dGggU3JjIDogQXR0IENvZGUgOlxuIiwKKwlzZXFfcHJpbnRmKG0sICIlNnM6IFBoeXNpY2FsIEFkZHIgOiBVcCBOb2RlIEFkZHJlc3MgICA6IFBvbGwgQWRkcmVzcyAgICAgIDogQWNjUHJpIDogQXV0aCBTcmMgOiBBdHQgQ29kZSA6XG4iLAogCSAgZGV2LT5uYW1lKSA7IAogCiAJZm9yIChpID0gMCA7IGkgPCA2IDsgaSsrKQpAQCAtMTY1NSw3ICsxNjUyLDcgQEAKIAlmb3IgKGkgPSAwIDsgaSA8IDYgOyBpKyspCiAJCWFkZHIyW2ldID0gIHJlYWRiKG9wdCtvZmZzZXRvZihzdHJ1Y3Qgb2x5bXBpY19wYXJhbWV0ZXJzX3RhYmxlLCBwb2xsX2FkZHIpICsgaSk7CiAKLQlzaXplICs9IHNwcmludGYoYnVmZmVyK3NpemUsICIlNnM6ICUwMng6JTAyeDolMDJ4OiUwMnggICA6ICVwTSA6ICVwTSA6ICUwNHggICA6ICUwNHggICAgIDogICUwNHggICAgOlxuIiwKKwlzZXFfcHJpbnRmKG0sICIlNnM6ICUwMng6JTAyeDolMDJ4OiUwMnggICA6ICVwTSA6ICVwTSA6ICUwNHggICA6ICUwNHggICAgIDogICUwNHggICAgOlxuIiwKIAkgIGRldi0+bmFtZSwKIAkgIHJlYWRiKG9wdCtvZmZzZXRvZihzdHJ1Y3Qgb2x5bXBpY19wYXJhbWV0ZXJzX3RhYmxlLCBwaHlzX2FkZHIpKSwKIAkgIHJlYWRiKG9wdCtvZmZzZXRvZihzdHJ1Y3Qgb2x5bXBpY19wYXJhbWV0ZXJzX3RhYmxlLCBwaHlzX2FkZHIpKzEpLApAQCAtMTY2NiwxMiArMTY2MywxMiBAQAogCSAgc3dhYjE2KHJlYWR3KG9wdCtvZmZzZXRvZihzdHJ1Y3Qgb2x5bXBpY19wYXJhbWV0ZXJzX3RhYmxlLCBhdXRoX3NvdXJjZV9jbGFzcykpKSwKIAkgIHN3YWIxNihyZWFkdyhvcHQrb2Zmc2V0b2Yoc3RydWN0IG9seW1waWNfcGFyYW1ldGVyc190YWJsZSwgYXR0X2NvZGUpKSkpOwogCi0Jc2l6ZSArPSBzcHJpbnRmKGJ1ZmZlcitzaXplLCAiJTZzOiBTb3VyY2UgQWRkcmVzcyAgICA6IEJjbiBUIDogTWFqLiBWIDogTGFuIFN0IDogTGNsIFJnIDogTW9uIEVyciA6IEZyYW1lIENvcnJlbCA6IFxuIiwKKwlzZXFfcHJpbnRmKG0sICIlNnM6IFNvdXJjZSBBZGRyZXNzICAgIDogQmNuIFQgOiBNYWouIFYgOiBMYW4gU3QgOiBMY2wgUmcgOiBNb24gRXJyIDogRnJhbWUgQ29ycmVsIDogXG4iLAogCSAgZGV2LT5uYW1lKSA7IAogCQogCWZvciAoaSA9IDAgOyBpIDwgNiA7IGkrKykKIAkJYWRkcltpXSA9IHJlYWRiKG9wdCtvZmZzZXRvZihzdHJ1Y3Qgb2x5bXBpY19wYXJhbWV0ZXJzX3RhYmxlLCBzb3VyY2VfYWRkcikgKyBpKTsKLQlzaXplICs9IHNwcmludGYoYnVmZmVyK3NpemUsICIlNnM6ICVwTSA6ICUwNHggIDogJTA0eCAgIDogJTA0eCAgIDogJTA0eCAgIDogJTA0eCAgICA6ICAgICAlMDR4ICAgICA6IFxuIiwKKwlzZXFfcHJpbnRmKG0sICIlNnM6ICVwTSA6ICUwNHggIDogJTA0eCAgIDogJTA0eCAgIDogJTA0eCAgIDogJTA0eCAgICA6ICAgICAlMDR4ICAgICA6IFxuIiwKIAkgIGRldi0+bmFtZSwgYWRkciwKIAkgIHN3YWIxNihyZWFkdyhvcHQrb2Zmc2V0b2Yoc3RydWN0IG9seW1waWNfcGFyYW1ldGVyc190YWJsZSwgYmVhY29uX3R5cGUpKSksCiAJICBzd2FiMTYocmVhZHcob3B0K29mZnNldG9mKHN0cnVjdCBvbHltcGljX3BhcmFtZXRlcnNfdGFibGUsIG1ham9yX3ZlY3RvcikpKSwKQEAgLTE2ODAsMTIgKzE2NzcsMTIgQEAKIAkgIHN3YWIxNihyZWFkdyhvcHQrb2Zmc2V0b2Yoc3RydWN0IG9seW1waWNfcGFyYW1ldGVyc190YWJsZSwgbW9uX2Vycm9yKSkpLAogCSAgc3dhYjE2KHJlYWR3KG9wdCtvZmZzZXRvZihzdHJ1Y3Qgb2x5bXBpY19wYXJhbWV0ZXJzX3RhYmxlLCBmcmFtZV9jb3JyZWwpKSkpOwogCi0Jc2l6ZSArPSBzcHJpbnRmKGJ1ZmZlcitzaXplLCAiJTZzOiBCZWFjb24gRGV0YWlscyA6ICBUeCAgOiAgUnggIDogTkFVTiBOb2RlIEFkZHJlc3MgOiBOQVVOIE5vZGUgUGh5cyA6IFxuIiwKKwlzZXFfcHJpbnRmKG0sICIlNnM6IEJlYWNvbiBEZXRhaWxzIDogIFR4ICA6ICBSeCAgOiBOQVVOIE5vZGUgQWRkcmVzcyA6IE5BVU4gTm9kZSBQaHlzIDogXG4iLAogCSAgZGV2LT5uYW1lKSA7IAogCiAJZm9yIChpID0gMCA7IGkgPCA2IDsgaSsrKQogCQlhZGRyW2ldID0gcmVhZGIob3B0K29mZnNldG9mKHN0cnVjdCBvbHltcGljX3BhcmFtZXRlcnNfdGFibGUsIGJlYWNvbl9uYXVuKSArIGkpOwotCXNpemUgKz0gc3ByaW50ZihidWZmZXIrc2l6ZSwgIiU2czogICAgICAgICAgICAgICAgOiAgJTAyeCAgOiAgJTAyeCAgOiAlcE0gOiAlMDJ4OiUwMng6JTAyeDolMDJ4ICAgIDogXG4iLAorCXNlcV9wcmludGYobSwgIiU2czogICAgICAgICAgICAgICAgOiAgJTAyeCAgOiAgJTAyeCAgOiAlcE0gOiAlMDJ4OiUwMng6JTAyeDolMDJ4ICAgIDogXG4iLAogCSAgZGV2LT5uYW1lLAogCSAgc3dhYjE2KHJlYWR3KG9wdCtvZmZzZXRvZihzdHJ1Y3Qgb2x5bXBpY19wYXJhbWV0ZXJzX3RhYmxlLCBiZWFjb25fdHJhbnNtaXQpKSksCiAJICBzd2FiMTYocmVhZHcob3B0K29mZnNldG9mKHN0cnVjdCBvbHltcGljX3BhcmFtZXRlcnNfdGFibGUsIGJlYWNvbl9yZWNlaXZlKSkpLApAQCAtMTY5NSwxOSArMTY5MiwyMSBAQAogCSAgcmVhZGIob3B0K29mZnNldG9mKHN0cnVjdCBvbHltcGljX3BhcmFtZXRlcnNfdGFibGUsIGJlYWNvbl9waHlzKSsyKSwKIAkgIHJlYWRiKG9wdCtvZmZzZXRvZihzdHJ1Y3Qgb2x5bXBpY19wYXJhbWV0ZXJzX3RhYmxlLCBiZWFjb25fcGh5cykrMykpOwogCi0JbGVuPXNpemU7Ci0JcG9zPWJlZ2luK3NpemU7Ci0JaWYgKHBvczxvZmZzZXQpIHsKLQkJbGVuPTA7Ci0JCWJlZ2luPXBvczsKLQl9Ci0JKnN0YXJ0PWJ1ZmZlcisob2Zmc2V0LWJlZ2luKTsJLyogU3RhcnQgb2Ygd2FudGVkIGRhdGEgKi8KLQlsZW4tPShvZmZzZXQtYmVnaW4pOwkJLyogU3RhcnQgc2xvcCAqLwotCWlmKGxlbj5sZW5ndGgpCi0JCWxlbj1sZW5ndGg7CQkvKiBFbmRpbmcgc2xvcCAqLwotCXJldHVybiBsZW47CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgb2x5bXBpY19wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIG9seW1waWNfcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb2x5bXBpY19wcm9jX29wcyA9IHsKKwkub3BlbgkJPSBvbHltcGljX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogc3RhdGljIHZvaWQgX19kZXZleGl0IG9seW1waWNfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikgCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KSA7IApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvMjExNDIuYyBiL2RyaXZlcnMvbmV0L3R1bGlwLzIxMTQyLmMKaW5kZXggMDA3ZDhlNy4uMDkyYzNmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvMjExNDIuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC8yMTE0Mi5jCkBAIC0xMjIsOCArMTIyLDggQEAKIAl0cC0+bndheSA9IHRwLT5tZWRpYXNlbnNlID0gMTsKIAl0cC0+bndheXNldCA9IHRwLT5scGFyID0gMDsKIAlpZiAodHVsaXBfZGVidWcgPiAxKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJlc3RhcnRpbmcgMjExNDMgYXV0b25lZ290aWF0aW9uLCBjc3IxND0lMDh4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBjc3IxNCk7CisJCW5ldGRldl9kYmcoZGV2LCAiUmVzdGFydGluZyAyMTE0MyBhdXRvbmVnb3RpYXRpb24sIGNzcjE0PSUwOHhcbiIsCisJCQkgICBjc3IxNCk7CiAJaW93cml0ZTMyKDB4MDAwMSwgaW9hZGRyICsgQ1NSMTMpOwogCXVkZWxheSgxMDApOwogCWlvd3JpdGUzMihjc3IxNCwgaW9hZGRyICsgQ1NSMTQpOwpAQCAtMjA2LDE0ICsyMDYsMTQgQEAKICNpZiAwCQkJCQkJCS8qIFJlc3RhcnQgc2hvdWxkbid0IGJlIG5lZWRlZC4gKi8KIAkJaW93cml0ZTMyKHRwLT5jc3I2IHwgUnhPbiwgaW9hZGRyICsgQ1NSNik7CiAJCWlmICh0dWxpcF9kZWJ1ZyA+IDIpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICBSZXN0YXJ0aW5nIFR4IGFuZCBSeCwgQ1NSNSBpcyAlMDh4XG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSkpOworCQkJbmV0ZGV2X2RiZyhkZXYsICIgUmVzdGFydGluZyBUeCBhbmQgUngsIENTUjUgaXMgJTA4eFxuIiwKKwkJCQkgICBpb3JlYWQzMihpb2FkZHIgKyBDU1I1KSk7CiAjZW5kaWYKIAkJdHVsaXBfc3RhcnRfcnh0eCh0cCk7CiAJCWlmICh0dWxpcF9kZWJ1ZyA+IDIpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICBTZXR0aW5nIENTUjYgJTA4eC8leCBDU1IxMiAlMDh4XG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgdHAtPmNzcjYsIGlvcmVhZDMyKGlvYWRkciArIENTUjYpLAotCQkJICAgICAgIGlvcmVhZDMyKGlvYWRkciArIENTUjEyKSk7CisJCQluZXRkZXZfZGJnKGRldiwgIiBTZXR0aW5nIENTUjYgJTA4eC8leCBDU1IxMiAlMDh4XG4iLAorCQkJCSAgIHRwLT5jc3I2LCBpb3JlYWQzMihpb2FkZHIgKyBDU1I2KSwKKwkJCQkgICBpb3JlYWQzMihpb2FkZHIgKyBDU1IxMikpOwogCX0gZWxzZSBpZiAoKHRwLT5ud2F5c2V0ICAmJiAgKGNzcjUgJiAweDA4MDAwMDAwKSAmJgogCQkgICAgKGRldi0+aWZfcG9ydCA9PSAzICB8fCAgZGV2LT5pZl9wb3J0ID09IDUpICYmCiAJCSAgICAoY3NyMTIgJiAyKSA9PSAyKSB8fApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC90dWxpcC9NYWtlZmlsZQppbmRleCAyMDBjYmY3Li41ZThiZTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC90dWxpcC9NYWtlZmlsZQpAQCAtMiw2ICsyLDggQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBMaW51eCAiVHVsaXAiIGZhbWlseSBuZXR3b3JrIGRldmljZSBkcml2ZXJzLgogIwogCitjY2ZsYWdzLSQoQ09ORklHX05FVF9UVUxJUCkJOj0gLURERUJVRworCiBvYmotJChDT05GSUdfUENNQ0lBX1hJUkNPTSkJKz0geGlyY29tX2NiLm8KIG9iai0kKENPTkZJR19ETTkxMDIpCQkrPSBkbWZlLm8KIG9iai0kKENPTkZJR19XSU5CT05EXzg0MCkJKz0gd2luYm9uZC04NDAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jCmluZGV4IGIxM2M2YjAuLmUyZjY5MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlMjEwNHguYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9kZTIxMDR4LmMKQEAgLTI3LDYgKzI3LDggQEAKIAogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2RlZmluZSBEUlZfTkFNRQkJImRlMjEwNHgiCiAjZGVmaW5lIERSVl9WRVJTSU9OCQkiMC43IgogI2RlZmluZSBEUlZfUkVMREFURQkJIk1hciAxNywgMjAwNCIKQEAgLTUxLDcgKzUzLDcgQEAKIAogLyogVGhlc2UgaWRlbnRpZnkgdGhlIGRyaXZlciBiYXNlIHZlcnNpb24gYW5kIG1heSBub3QgYmUgcmVtb3ZlZC4gKi8KIHN0YXRpYyBjaGFyIHZlcnNpb25bXSA9Ci1LRVJOX0lORk8gRFJWX05BTUUgIiBQQ0kgRXRoZXJuZXQgZHJpdmVyIHYiIERSVl9WRVJTSU9OICIgKCIgRFJWX1JFTERBVEUgIilcbiI7CisiUENJIEV0aGVybmV0IGRyaXZlciB2IiBEUlZfVkVSU0lPTiAiICgiIERSVl9SRUxEQVRFICIpIjsKIAogTU9EVUxFX0FVVEhPUigiSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcG9ib3guY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlbC9EaWdpdGFsIDIxMDQwLzEgc2VyaWVzIFBDSSBFdGhlcm5ldCBkcml2ZXIiKTsKQEAgLTczLDggKzc1LDYgQEAKIG1vZHVsZV9wYXJhbSAocnhfY29weWJyZWFrLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyAocnhfY29weWJyZWFrLCAiZGUyMTA0eCBCcmVha3BvaW50IGF0IHdoaWNoIFJ4IHBhY2tldHMgYXJlIGNvcGllZCIpOwogCi0jZGVmaW5lIFBGWAkJCURSVl9OQU1FICI6ICIKLQogI2RlZmluZSBERV9ERUZfTVNHX0VOQUJMRQkoTkVUSUZfTVNHX0RSVgkJfCBcCiAJCQkJIE5FVElGX01TR19QUk9CRSAJfCBcCiAJCQkJIE5FVElGX01TR19MSU5LCQl8IFwKQEAgLTM3NywxOCArMzc3LDE2IEBACiBzdGF0aWMgdm9pZCBkZV9yeF9lcnJfYWNjdCAoc3RydWN0IGRlX3ByaXZhdGUgKmRlLCB1bnNpZ25lZCByeF90YWlsLAogCQkJICAgIHUzMiBzdGF0dXMsIHUzMiBsZW4pCiB7Ci0JaWYgKG5ldGlmX21zZ19yeF9lcnIgKGRlKSkKLQkJcHJpbnRrIChLRVJOX0RFQlVHCi0JCQkiJXM6IHJ4IGVyciwgc2xvdCAlZCBzdGF0dXMgMHgleCBsZW4gJWRcbiIsCi0JCQlkZS0+ZGV2LT5uYW1lLCByeF90YWlsLCBzdGF0dXMsIGxlbik7CisJbmV0aWZfZGJnKGRlLCByeF9lcnIsIGRlLT5kZXYsCisJCSAgInJ4IGVyciwgc2xvdCAlZCBzdGF0dXMgMHgleCBsZW4gJWRcbiIsCisJCSAgcnhfdGFpbCwgc3RhdHVzLCBsZW4pOwogCiAJaWYgKChzdGF0dXMgJiAweDM4MDAwMzAwKSAhPSAweDAzMDApIHsKIAkJLyogSW5nb3JlIGVhcmxpZXIgYnVmZmVycy4gKi8KIAkJaWYgKChzdGF0dXMgJiAweGZmZmYpICE9IDB4N2ZmZikgewotCQkJaWYgKG5ldGlmX21zZ19yeF9lcnIoZGUpKQotCQkJCWRldl93YXJuKCZkZS0+ZGV2LT5kZXYsCi0JCQkJCSAiT3ZlcnNpemVkIEV0aGVybmV0IGZyYW1lIHNwYW5uZWQgbXVsdGlwbGUgYnVmZmVycywgc3RhdHVzICUwOHghXG4iLAotCQkJCQkgc3RhdHVzKTsKKwkJCW5ldGlmX3dhcm4oZGUsIHJ4X2VyciwgZGUtPmRldiwKKwkJCQkgICAiT3ZlcnNpemVkIEV0aGVybmV0IGZyYW1lIHNwYW5uZWQgbXVsdGlwbGUgYnVmZmVycywgc3RhdHVzICUwOHghXG4iLAorCQkJCSAgIHN0YXR1cyk7CiAJCQlkZS0+bmV0X3N0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJfQogCX0gZWxzZSBpZiAoc3RhdHVzICYgUnhFcnJvcikgewpAQCAtNDM1LDEwICs0MzMsOSBAQAogCiAJCWNvcHlpbmdfc2tiID0gKGxlbiA8PSByeF9jb3B5YnJlYWspOwogCi0JCWlmICh1bmxpa2VseShuZXRpZl9tc2dfcnhfc3RhdHVzKGRlKSkpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJ4IHNsb3QgJWQgc3RhdHVzIDB4JXggbGVuICVkIGNvcHlpbmc/ICVkXG4iLAotCQkJICAgICAgIGRlLT5kZXYtPm5hbWUsIHJ4X3RhaWwsIHN0YXR1cywgbGVuLAotCQkJICAgICAgIGNvcHlpbmdfc2tiKTsKKwkJbmV0aWZfZGJnKGRlLCByeF9zdGF0dXMsIGRlLT5kZXYsCisJCQkgICJyeCBzbG90ICVkIHN0YXR1cyAweCV4IGxlbiAlZCBjb3B5aW5nPyAlZFxuIiwKKwkJCSAgcnhfdGFpbCwgc3RhdHVzLCBsZW4sIGNvcHlpbmdfc2tiKTsKIAogCQlidWZsZW4gPSBjb3B5aW5nX3NrYiA/IChsZW4gKyBSWF9PRkZTRVQpIDogZGUtPnJ4X2J1Zl9zejsKIAkJY29weV9za2IgPSBkZXZfYWxsb2Nfc2tiIChidWZsZW4pOwpAQCAtNDkxLDcgKzQ4OCw3IEBACiAJfQogCiAJaWYgKCFyeF93b3JrKQotCQlkZXZfd2FybigmZGUtPmRldi0+ZGV2LCAicnggd29yayBsaW1pdCByZWFjaGVkXG4iKTsKKwkJbmV0ZGV2X3dhcm4oZGUtPmRldiwgInJ4IHdvcmsgbGltaXQgcmVhY2hlZFxuIik7CiAKIAlkZS0+cnhfdGFpbCA9IHJ4X3RhaWw7CiB9CkBAIC01MDYsMTAgKzUwMyw5IEBACiAJaWYgKCghKHN0YXR1cyAmIChJbnRyT0t8SW50ckVycikpKSB8fCAoc3RhdHVzID09IDB4RkZGRikpCiAJCXJldHVybiBJUlFfTk9ORTsKIAotCWlmIChuZXRpZl9tc2dfaW50cihkZSkpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogaW50ciwgc3RhdHVzICUwOHggbW9kZSAlMDh4IGRlc2MgJXUvJXUvJXVcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHN0YXR1cywgZHIzMihNYWNNb2RlKSwKLQkJICAgICAgIGRlLT5yeF90YWlsLCBkZS0+dHhfaGVhZCwgZGUtPnR4X3RhaWwpOworCW5ldGlmX2RiZyhkZSwgaW50ciwgZGV2LCAiaW50ciwgc3RhdHVzICUwOHggbW9kZSAlMDh4IGRlc2MgJXUvJXUvJXVcbiIsCisJCSAgc3RhdHVzLCBkcjMyKE1hY01vZGUpLAorCQkgIGRlLT5yeF90YWlsLCBkZS0+dHhfaGVhZCwgZGUtPnR4X3RhaWwpOwogCiAJZHczMihNYWNTdGF0dXMsIHN0YXR1cyk7CiAKQEAgLTUzNCw5ICs1MzAsOSBAQAogCiAJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRlLT5wZGV2LCBQQ0lfU1RBVFVTLCAmcGNpX3N0YXR1cyk7CiAJCXBjaV93cml0ZV9jb25maWdfd29yZChkZS0+cGRldiwgUENJX1NUQVRVUywgcGNpX3N0YXR1cyk7Ci0JCWRldl9lcnIoJmRlLT5kZXYtPmRldiwKLQkJCSJQQ0kgYnVzIGVycm9yLCBzdGF0dXM9JTA4eCwgUENJIHN0YXR1cz0lMDR4XG4iLAotCQkJc3RhdHVzLCBwY2lfc3RhdHVzKTsKKwkJbmV0ZGV2X2VycihkZS0+ZGV2LAorCQkJICAgIlBDSSBidXMgZXJyb3IsIHN0YXR1cz0lMDh4LCBQQ0kgc3RhdHVzPSUwNHhcbiIsCisJCQkgICBzdGF0dXMsIHBjaV9zdGF0dXMpOwogCX0KIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTU3Miw5ICs1NjgsOSBAQAogCiAJCWlmIChzdGF0dXMgJiBMYXN0RnJhZykgewogCQkJaWYgKHN0YXR1cyAmIFR4RXJyb3IpIHsKLQkJCQlpZiAobmV0aWZfbXNnX3R4X2VycihkZSkpCi0JCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdHggZXJyLCBzdGF0dXMgMHgleFxuIiwKLQkJCQkJICAgICAgIGRlLT5kZXYtPm5hbWUsIHN0YXR1cyk7CisJCQkJbmV0aWZfZGJnKGRlLCB0eF9lcnIsIGRlLT5kZXYsCisJCQkJCSAgInR4IGVyciwgc3RhdHVzIDB4JXhcbiIsCisJCQkJCSAgc3RhdHVzKTsKIAkJCQlkZS0+bmV0X3N0YXRzLnR4X2Vycm9ycysrOwogCQkJCWlmIChzdGF0dXMgJiBUeE9XQykKIAkJCQkJZGUtPm5ldF9zdGF0cy50eF93aW5kb3dfZXJyb3JzKys7CkBAIC01ODcsOSArNTgzLDggQEAKIAkJCX0gZWxzZSB7CiAJCQkJZGUtPm5ldF9zdGF0cy50eF9wYWNrZXRzKys7CiAJCQkJZGUtPm5ldF9zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKLQkJCQlpZiAobmV0aWZfbXNnX3R4X2RvbmUoZGUpKQotCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHR4IGRvbmUsIHNsb3QgJWRcbiIsCi0JCQkJCSAgICAgICBkZS0+ZGV2LT5uYW1lLCB0eF90YWlsKTsKKwkJCQluZXRpZl9kYmcoZGUsIHR4X2RvbmUsIGRlLT5kZXYsCisJCQkJCSAgInR4IGRvbmUsIHNsb3QgJWRcbiIsIHR4X3RhaWwpOwogCQkJfQogCQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKIAkJfQpAQCAtNjQ2LDkgKzY0MSw4IEBACiAJd21iKCk7CiAKIAlkZS0+dHhfaGVhZCA9IE5FWFRfVFgoZW50cnkpOwotCWlmIChuZXRpZl9tc2dfdHhfcXVldWVkKGRlKSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eCBxdWV1ZWQsIHNsb3QgJWQsIHNrYmxlbiAlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZW50cnksIHNrYi0+bGVuKTsKKwluZXRpZl9kYmcoZGUsIHR4X3F1ZXVlZCwgZGV2LCAidHggcXVldWVkLCBzbG90ICVkLCBza2JsZW4gJWRcbiIsCisJCSAgZW50cnksIHNrYi0+bGVuKTsKIAogCWlmICh0eF9mcmVlID09IDApCiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKQEAgLTg3Myw3ICs4NjcsNyBAQAogCQl1ZGVsYXkoMTAwKTsKIAl9CiAKLQlkZXZfd2FybigmZGUtPmRldi0+ZGV2LCAidGltZW91dCBleHBpcmVkIHN0b3BwaW5nIERNQVxuIik7CisJbmV0ZGV2X3dhcm4oZGUtPmRldiwgInRpbWVvdXQgZXhwaXJlZCwgc3RvcHBpbmcgRE1BXG4iKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRlX3N0YXJ0X3J4dHggKHN0cnVjdCBkZV9wcml2YXRlICpkZSkKQEAgLTkwNyw5ICs5MDEsOCBAQAogewogCWlmICghbmV0aWZfY2Fycmllcl9vayhkZS0+ZGV2KSkgewogCQluZXRpZl9jYXJyaWVyX29uKGRlLT5kZXYpOwotCQlpZiAobmV0aWZfbXNnX2xpbmsoZGUpKQotCQkJZGV2X2luZm8oJmRlLT5kZXYtPmRldiwgImxpbmsgdXAsIG1lZGlhICVzXG4iLAotCQkJCSBtZWRpYV9uYW1lW2RlLT5tZWRpYV90eXBlXSk7CisJCW5ldGlmX2luZm8oZGUsIGxpbmssIGRlLT5kZXYsICJsaW5rIHVwLCBtZWRpYSAlc1xuIiwKKwkJCSAgIG1lZGlhX25hbWVbZGUtPm1lZGlhX3R5cGVdKTsKIAl9CiB9CiAKQEAgLTkxNyw4ICs5MTAsNyBAQAogewogCWlmIChuZXRpZl9jYXJyaWVyX29rKGRlLT5kZXYpKSB7CiAJCW5ldGlmX2NhcnJpZXJfb2ZmKGRlLT5kZXYpOwotCQlpZiAobmV0aWZfbXNnX2xpbmsoZGUpKQotCQkJZGV2X2luZm8oJmRlLT5kZXYtPmRldiwgImxpbmsgZG93blxuIik7CisJCW5ldGlmX2luZm8oZGUsIGxpbmssIGRlLT5kZXYsICJsaW5rIGRvd25cbiIpOwogCX0KIH0KIApAQCAtOTI4LDggKzkyMCw3IEBACiAJdTMyIG1hY21vZGUgPSBkcjMyKE1hY01vZGUpOwogCiAJaWYgKGRlX2lzX3J1bm5pbmcoZGUpKQotCQlkZXZfd2FybigmZGUtPmRldi0+ZGV2LAotCQkJICJjaGlwIGlzIHJ1bm5pbmcgd2hpbGUgY2hhbmdpbmcgbWVkaWEhXG4iKTsKKwkJbmV0ZGV2X3dhcm4oZGUtPmRldiwgImNoaXAgaXMgcnVubmluZyB3aGlsZSBjaGFuZ2luZyBtZWRpYSFcbiIpOwogCiAJaWYgKGRlLT5kZTIxMDQwKQogCQlkdzMyKENTUjExLCBGVUxMX0RVUExFWF9NQUdJQyk7CkBAIC05NDgsMTggKzkzOSwxMyBAQAogCWVsc2UKIAkJbWFjbW9kZSAmPSB+RnVsbER1cGxleDsKIAotCWlmIChuZXRpZl9tc2dfbGluayhkZSkpCi0JCWRldl9pbmZvKCZkZS0+ZGV2LT5kZXYsICJzZXQgbGluayAlc1xuIiwgbWVkaWFfbmFtZVttZWRpYV0pOwotCWlmIChuZXRpZl9tc2dfaHcoZGUpKSB7Ci0JCWRldl9pbmZvKCZkZS0+ZGV2LT5kZXYsICJtb2RlIDB4JXgsIHNpYSAweCV4LDB4JXgsMHgleCwweCV4XG4iLAotCQkJIGRyMzIoTWFjTW9kZSksIGRyMzIoU0lBU3RhdHVzKSwKLQkJCSBkcjMyKENTUjEzKSwgZHIzMihDU1IxNCksIGRyMzIoQ1NSMTUpKTsKLQotCQlkZXZfaW5mbygmZGUtPmRldi0+ZGV2LAotCQkJICJzZXQgbW9kZSAweCV4LCBzZXQgc2lhIDB4JXgsMHgleCwweCV4XG4iLAotCQkJIG1hY21vZGUsIGRlLT5tZWRpYVttZWRpYV0uY3NyMTMsCi0JCQkgZGUtPm1lZGlhW21lZGlhXS5jc3IxNCwgZGUtPm1lZGlhW21lZGlhXS5jc3IxNSk7Ci0JfQorCW5ldGlmX2luZm8oZGUsIGxpbmssIGRlLT5kZXYsICJzZXQgbGluayAlc1xuIiwgbWVkaWFfbmFtZVttZWRpYV0pOworCW5ldGlmX2luZm8oZGUsIGh3LCBkZS0+ZGV2LCAibW9kZSAweCV4LCBzaWEgMHgleCwweCV4LDB4JXgsMHgleFxuIiwKKwkJICAgZHIzMihNYWNNb2RlKSwgZHIzMihTSUFTdGF0dXMpLAorCQkgICBkcjMyKENTUjEzKSwgZHIzMihDU1IxNCksIGRyMzIoQ1NSMTUpKTsKKwluZXRpZl9pbmZvKGRlLCBodywgZGUtPmRldiwgInNldCBtb2RlIDB4JXgsIHNldCBzaWEgMHgleCwweCV4LDB4JXhcbiIsCisJCSAgIG1hY21vZGUsIGRlLT5tZWRpYVttZWRpYV0uY3NyMTMsCisJCSAgIGRlLT5tZWRpYVttZWRpYV0uY3NyMTQsIGRlLT5tZWRpYVttZWRpYV0uY3NyMTUpOwogCWlmIChtYWNtb2RlICE9IGRyMzIoTWFjTW9kZSkpCiAJCWR3MzIoTWFjTW9kZSwgbWFjbW9kZSk7CiB9CkBAIC05OTYsOSArOTgyLDggQEAKIAkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKGRldikpCiAJCQlkZV9saW5rX3VwKGRlKTsKIAkJZWxzZQotCQkJaWYgKG5ldGlmX21zZ190aW1lcihkZSkpCi0JCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiJXMgbGluayBvaywgc3RhdHVzICV4XG4iLAotCQkJCQkgbWVkaWFfbmFtZVtkZS0+bWVkaWFfdHlwZV0sIHN0YXR1cyk7CisJCQluZXRpZl9pbmZvKGRlLCB0aW1lciwgZGV2LCAiJXMgbGluayBvaywgc3RhdHVzICV4XG4iLAorCQkJCSAgIG1lZGlhX25hbWVbZGUtPm1lZGlhX3R5cGVdLCBzdGF0dXMpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMDI1LDkgKzEwMTAsOCBAQAogCWRlLT5tZWRpYV90aW1lci5leHBpcmVzID0gamlmZmllcyArIERFX1RJTUVSX05PX0xJTks7CiAJYWRkX3RpbWVyKCZkZS0+bWVkaWFfdGltZXIpOwogCi0JaWYgKG5ldGlmX21zZ190aW1lcihkZSkpCi0JCWRldl9pbmZvKCZkZXYtPmRldiwgIm5vIGxpbmssIHRyeWluZyBtZWRpYSAlcywgc3RhdHVzICV4XG4iLAotCQkJIG1lZGlhX25hbWVbZGUtPm1lZGlhX3R5cGVdLCBzdGF0dXMpOworCW5ldGlmX2luZm8oZGUsIHRpbWVyLCBkZXYsICJubyBsaW5rLCB0cnlpbmcgbWVkaWEgJXMsIHN0YXR1cyAleFxuIiwKKwkJICAgbWVkaWFfbmFtZVtkZS0+bWVkaWFfdHlwZV0sIHN0YXR1cyk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVfb2tfdG9fYWR2ZXJ0aXNlIChzdHJ1Y3QgZGVfcHJpdmF0ZSAqZGUsIHUzMiBuZXdfbWVkaWEpCkBAIC0xMDg1LDExICsxMDY5LDEwIEBACiAJCWlmICghbmV0aWZfY2Fycmllcl9vayhkZXYpKQogCQkJZGVfbGlua191cChkZSk7CiAJCWVsc2UKLQkJCWlmIChuZXRpZl9tc2dfdGltZXIoZGUpKQotCQkJCWRldl9pbmZvKCZkZXYtPmRldiwKLQkJCQkJICIlcyBsaW5rIG9rLCBtb2RlICV4IHN0YXR1cyAleFxuIiwKLQkJCQkJIG1lZGlhX25hbWVbZGUtPm1lZGlhX3R5cGVdLAotCQkJCQkgZHIzMihNYWNNb2RlKSwgc3RhdHVzKTsKKwkJCW5ldGlmX2luZm8oZGUsIHRpbWVyLCBkZXYsCisJCQkJICAgIiVzIGxpbmsgb2ssIG1vZGUgJXggc3RhdHVzICV4XG4iLAorCQkJCSAgIG1lZGlhX25hbWVbZGUtPm1lZGlhX3R5cGVdLAorCQkJCSAgIGRyMzIoTWFjTW9kZSksIHN0YXR1cyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTExNjMsOSArMTE0Niw4IEBACiAJZGUtPm1lZGlhX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgREVfVElNRVJfTk9fTElOSzsKIAlhZGRfdGltZXIoJmRlLT5tZWRpYV90aW1lcik7CiAKLQlpZiAobmV0aWZfbXNnX3RpbWVyKGRlKSkKLQkJZGV2X2luZm8oJmRldi0+ZGV2LCAibm8gbGluaywgdHJ5aW5nIG1lZGlhICVzLCBzdGF0dXMgJXhcbiIsCi0JCQkgbWVkaWFfbmFtZVtkZS0+bWVkaWFfdHlwZV0sIHN0YXR1cyk7CisJbmV0aWZfaW5mbyhkZSwgdGltZXIsIGRldiwgIm5vIGxpbmssIHRyeWluZyBtZWRpYSAlcywgc3RhdHVzICV4XG4iLAorCQkgICBtZWRpYV9uYW1lW2RlLT5tZWRpYV90eXBlXSwgc3RhdHVzKTsKIH0KIAogc3RhdGljIHZvaWQgZGVfbWVkaWFfaW50ZXJydXB0IChzdHJ1Y3QgZGVfcHJpdmF0ZSAqZGUsIHUzMiBzdGF0dXMpCkBAIC0xNDAxLDE0ICsxMzgzLDEzIEBACiAJc3RydWN0IGRlX3ByaXZhdGUgKmRlID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgcmM7CiAKLQlpZiAobmV0aWZfbXNnX2lmdXAoZGUpKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGVuYWJsaW5nIGludGVyZmFjZVxuIiwgZGV2LT5uYW1lKTsKKwluZXRpZl9kYmcoZGUsIGlmdXAsIGRldiwgImVuYWJsaW5nIGludGVyZmFjZVxuIik7CiAKIAlkZS0+cnhfYnVmX3N6ID0gKGRldi0+bXR1IDw9IDE1MDAgPyBQS1RfQlVGX1NaIDogZGV2LT5tdHUgKyAzMik7CiAKIAlyYyA9IGRlX2FsbG9jX3JpbmdzKGRlKTsKIAlpZiAocmMpIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsICJyaW5nIGFsbG9jYXRpb24gZmFpbHVyZSwgZXJyPSVkXG4iLCByYyk7CisJCW5ldGRldl9lcnIoZGV2LCAicmluZyBhbGxvY2F0aW9uIGZhaWx1cmUsIGVycj0lZFxuIiwgcmMpOwogCQlyZXR1cm4gcmM7CiAJfQogCkBAIC0xNDE2LDE0ICsxMzk3LDE0IEBACiAKIAlyYyA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBkZV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldik7CiAJaWYgKHJjKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiSVJRICVkIHJlcXVlc3QgZmFpbHVyZSwgZXJyPSVkXG4iLAotCQkJZGV2LT5pcnEsIHJjKTsKKwkJbmV0ZGV2X2VycihkZXYsICJJUlEgJWQgcmVxdWVzdCBmYWlsdXJlLCBlcnI9JWRcbiIsCisJCQkgICBkZXYtPmlycSwgcmMpOwogCQlnb3RvIGVycl9vdXRfZnJlZTsKIAl9CiAKIAlyYyA9IGRlX2luaXRfaHcoZGUpOwogCWlmIChyYykgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgImgvdyBpbml0IGZhaWx1cmUsIGVycj0lZFxuIiwgcmMpOworCQluZXRkZXZfZXJyKGRldiwgImgvdyBpbml0IGZhaWx1cmUsIGVycj0lZFxuIiwgcmMpOwogCQlnb3RvIGVycl9vdXRfZnJlZV9pcnE7CiAJfQogCkBAIC0xNDQ0LDggKzE0MjUsNyBAQAogCXN0cnVjdCBkZV9wcml2YXRlICpkZSA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChuZXRpZl9tc2dfaWZkb3duKGRlKSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXNhYmxpbmcgaW50ZXJmYWNlXG4iLCBkZXYtPm5hbWUpOworCW5ldGlmX2RiZyhkZSwgaWZkb3duLCBkZXYsICJkaXNhYmxpbmcgaW50ZXJmYWNlXG4iKTsKIAogCWRlbF90aW1lcl9zeW5jKCZkZS0+bWVkaWFfdGltZXIpOwogCkBAIC0xNDY2LDkgKzE0NDYsOSBAQAogewogCXN0cnVjdCBkZV9wcml2YXRlICpkZSA9IG5ldGRldl9wcml2KGRldik7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5JQyBzdGF0dXMgJTA4eCBtb2RlICUwOHggc2lhICUwOHggZGVzYyAldS8ldS8ldVxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBkcjMyKE1hY1N0YXR1cyksIGRyMzIoTWFjTW9kZSksIGRyMzIoU0lBU3RhdHVzKSwKLQkgICAgICAgZGUtPnJ4X3RhaWwsIGRlLT50eF9oZWFkLCBkZS0+dHhfdGFpbCk7CisJbmV0ZGV2X2RiZyhkZXYsICJOSUMgc3RhdHVzICUwOHggbW9kZSAlMDh4IHNpYSAlMDh4IGRlc2MgJXUvJXUvJXVcbiIsCisJCSAgIGRyMzIoTWFjU3RhdHVzKSwgZHIzMihNYWNNb2RlKSwgZHIzMihTSUFTdGF0dXMpLAorCQkgICBkZS0+cnhfdGFpbCwgZGUtPnR4X2hlYWQsIGRlLT50eF90YWlsKTsKIAogCWRlbF90aW1lcl9zeW5jKCZkZS0+bWVkaWFfdGltZXIpOwogCkBAIC0xNTE4LDE4ICsxNDk4LDE3IEBACiAJc3dpdGNoIChkZS0+bWVkaWFfdHlwZSkgewogCWNhc2UgREVfTUVESUFfQVVJOgogCQllY21kLT5wb3J0ID0gUE9SVF9BVUk7Ci0JCWVjbWQtPnNwZWVkID0gNTsKIAkJYnJlYWs7CiAJY2FzZSBERV9NRURJQV9CTkM6CiAJCWVjbWQtPnBvcnQgPSBQT1JUX0JOQzsKLQkJZWNtZC0+c3BlZWQgPSAyOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQllY21kLT5wb3J0ID0gUE9SVF9UUDsKLQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDsKIAkJYnJlYWs7CiAJfQogCisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIDEwKTsKKwogCWlmIChkcjMyKE1hY01vZGUpICYgRnVsbER1cGxleCkKIAkJZWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJZWxzZQpAQCAtMTU1MCw5ICsxNTI5LDcgQEAKIAl1MzIgbmV3X21lZGlhOwogCXVuc2lnbmVkIGludCBtZWRpYV9sb2NrOwogCi0JaWYgKGVjbWQtPnNwZWVkICE9IFNQRUVEXzEwICYmIGVjbWQtPnNwZWVkICE9IDUgJiYgZWNtZC0+c3BlZWQgIT0gMikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGRlLT5kZTIxMDQwICYmIGVjbWQtPnNwZWVkID09IDIpCisJaWYgKGV0aHRvb2xfY21kX3NwZWVkKGVjbWQpICE9IDEwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoZWNtZC0+ZHVwbGV4ICE9IERVUExFWF9IQUxGICYmIGVjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNjk2LDkgKzE2NzMsOCBAQAogCiAJc3RhdHVzID0gZHIzMihTSUFTdGF0dXMpOwogCWR3MzIoU0lBU3RhdHVzLCAoc3RhdHVzICYgfk5XYXlTdGF0ZSkgfCBOV2F5UmVzdGFydCk7Ci0JaWYgKG5ldGlmX21zZ19saW5rKGRlKSkKLQkJZGV2X2luZm8oJmRlLT5kZXYtPmRldiwgImxpbmsgbndheSByZXN0YXJ0LCBzdGF0dXMgJXgsJXhcbiIsCi0JCQkgc3RhdHVzLCBkcjMyKFNJQVN0YXR1cykpOworCW5ldGlmX2luZm8oZGUsIGxpbmssIGRldiwgImxpbmsgbndheSByZXN0YXJ0LCBzdGF0dXMgJXgsJXhcbiIsCisJCSAgIHN0YXR1cywgZHIzMihTSUFTdGF0dXMpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTc0Myw3ICsxNzE5LDggQEAKIAkJZGUtPmRldi0+ZGV2X2FkZHJbaV0gPSB2YWx1ZTsKIAkJdWRlbGF5KDEpOwogCQlpZiAoYm9ndXNjbnQgPD0gMCkKLQkJCXByX3dhcm5pbmcoUEZYICJ0aW1lb3V0IHJlYWRpbmcgMjEwNDAgTUFDIGFkZHJlc3MgYnl0ZSAldVxuIiwgaSk7CisJCQlwcl93YXJuKCJ0aW1lb3V0IHJlYWRpbmcgMjEwNDAgTUFDIGFkZHJlc3MgYnl0ZSAldVxuIiwKKwkJCQlpKTsKIAl9CiB9CiAKQEAgLTE5MjksOCArMTkwNiwxMCBAQAogCQkJCQlkZS0+bWVkaWFbaWR4XS5jc3IxNCwKIAkJCQkJZGUtPm1lZGlhW2lkeF0uY3NyMTUpOwogCi0JCX0gZWxzZSBpZiAobmV0aWZfbXNnX3Byb2JlKGRlKSkKLQkJCXByX2NvbnQoIlxuIik7CisJCX0gZWxzZSB7CisJCQlpZiAobmV0aWZfbXNnX3Byb2JlKGRlKSkKKwkJCQlwcl9jb250KCJcbiIpOworCQl9CiAKIAkJaWYgKGJ1ZnAgPiAoKHZvaWQgKikmZWVfZGF0YVtERV9FRVBST01fU0laRSAtIDNdKSkKIAkJCWJyZWFrOwpAQCAtMTk5OSw3ICsxOTc4LDcgQEAKIAogI2lmbmRlZiBNT0RVTEUKIAlpZiAoYm9hcmRfaWR4ID09IDApCi0JCXByaW50aygiJXMiLCB2ZXJzaW9uKTsKKwkJcHJfaW5mbygiJXNcbiIsIHZlcnNpb24pOwogI2VuZGlmCiAKIAkvKiBhbGxvY2F0ZSBhIG5ldyBldGhlcm5ldCBkZXZpY2Ugc3RydWN0dXJlLCBhbmQgZmlsbCBpbiBkZWZhdWx0cyAqLwpAQCAtMjA0MSw3ICsyMDIwLDcgQEAKIAkvKiBjaGVjayBmb3IgaW52YWxpZCBJUlEgdmFsdWUgKi8KIAlpZiAocGRldi0+aXJxIDwgMikgewogCQlyYyA9IC1FSU87Ci0JCXByX2VycihQRlggImludmFsaWQgaXJxICglZCkgZm9yIHBjaSBkZXYgJXNcbiIsCisJCXByX2VycigiaW52YWxpZCBpcnEgKCVkKSBmb3IgcGNpIGRldiAlc1xuIiwKIAkJICAgICAgIHBkZXYtPmlycSwgcGNpX25hbWUocGRldikpOwogCQlnb3RvIGVycl9vdXRfcmVzOwogCX0KQEAgLTIwNTIsMTIgKzIwMzEsMTIgQEAKIAlwY2lhZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOwogCWlmICghcGNpYWRkcikgewogCQlyYyA9IC1FSU87Ci0JCXByX2VycihQRlggIm5vIE1NSU8gcmVzb3VyY2UgZm9yIHBjaSBkZXYgJXNcbiIsIHBjaV9uYW1lKHBkZXYpKTsKKwkJcHJfZXJyKCJubyBNTUlPIHJlc291cmNlIGZvciBwY2kgZGV2ICVzXG4iLCBwY2lfbmFtZShwZGV2KSk7CiAJCWdvdG8gZXJyX291dF9yZXM7CiAJfQogCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpIDwgREVfUkVHU19TSVpFKSB7CiAJCXJjID0gLUVJTzsKLQkJcHJfZXJyKFBGWCAiTU1JTyByZXNvdXJjZSAoJWxseCkgdG9vIHNtYWxsIG9uIHBjaSBkZXYgJXNcbiIsCisJCXByX2VycigiTU1JTyByZXNvdXJjZSAoJWxseCkgdG9vIHNtYWxsIG9uIHBjaSBkZXYgJXNcbiIsCiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSksCiAJCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CiAJCWdvdG8gZXJyX291dF9yZXM7CkBAIC0yMDY3LDcgKzIwNDYsNyBAQAogCXJlZ3MgPSBpb3JlbWFwX25vY2FjaGUocGNpYWRkciwgREVfUkVHU19TSVpFKTsKIAlpZiAoIXJlZ3MpIHsKIAkJcmMgPSAtRUlPOwotCQlwcl9lcnIoUEZYICJDYW5ub3QgbWFwIFBDSSBNTUlPICglbGx4QCVseCkgb24gcGNpIGRldiAlc1xuIiwKKwkJcHJfZXJyKCJDYW5ub3QgbWFwIFBDSSBNTUlPICglbGx4QCVseCkgb24gcGNpIGRldiAlc1xuIiwKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSwKIAkJICAgICAgIHBjaWFkZHIsIHBjaV9uYW1lKHBkZXYpKTsKIAkJZ290byBlcnJfb3V0X3JlczsKQEAgLTIwODAsNyArMjA1OSw3IEBACiAJLyogbWFrZSBzdXJlIGhhcmR3YXJlIGlzIG5vdCBydW5uaW5nICovCiAJcmMgPSBkZV9yZXNldF9tYWMoZGUpOwogCWlmIChyYykgewotCQlwcl9lcnIoUEZYICJDYW5ub3QgcmVzZXQgTUFDLCBwY2kgZGV2ICVzXG4iLCBwY2lfbmFtZShwZGV2KSk7CisJCXByX2VycigiQ2Fubm90IHJlc2V0IE1BQywgcGNpIGRldiAlc1xuIiwgcGNpX25hbWUocGRldikpOwogCQlnb3RvIGVycl9vdXRfaW9tYXA7CiAJfQogCkBAIC0yMTAwLDExICsyMDc5LDExIEBACiAJCWdvdG8gZXJyX291dF9pb21hcDsKIAogCS8qIHByaW50IGluZm8gYWJvdXQgYm9hcmQgYW5kIGludGVyZmFjZSBqdXN0IHJlZ2lzdGVyZWQgKi8KLQlkZXZfaW5mbygmZGV2LT5kZXYsICIlcyBhdCAweCVseCwgJXBNLCBJUlEgJWRcbiIsCi0JCSBkZS0+ZGUyMTA0MCA/ICIyMTA0MCIgOiAiMjEwNDEiLAotCQkgZGV2LT5iYXNlX2FkZHIsCi0JCSBkZXYtPmRldl9hZGRyLAotCQkgZGV2LT5pcnEpOworCW5ldGRldl9pbmZvKGRldiwgIiVzIGF0IDB4JWx4LCAlcE0sIElSUSAlZFxuIiwKKwkJICAgIGRlLT5kZTIxMDQwID8gIjIxMDQwIiA6ICIyMTA0MSIsCisJCSAgICBkZXYtPmJhc2VfYWRkciwKKwkJICAgIGRldi0+ZGV2X2FkZHIsCisJCSAgICBkZXYtPmlycSk7CiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKIApAQCAtMjE5Miw3ICsyMTcxLDcgQEAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJZ290byBvdXRfYXR0YWNoOwogCWlmICgocmV0dmFsID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldikpKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAicGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkIGluIHJlc3VtZVxuIik7CisJCW5ldGRldl9lcnIoZGV2LCAicGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkIGluIHJlc3VtZVxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKQEAgLTIyMjEsNyArMjIwMCw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBkZV9pbml0ICh2b2lkKQogewogI2lmZGVmIE1PRFVMRQotCXByaW50aygiJXMiLCB2ZXJzaW9uKTsKKwlwcl9pbmZvKCIlc1xuIiwgdmVyc2lvbik7CiAjZW5kaWYKIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZGVfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMgYi9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jCmluZGV4IGVmYWExZDYuLjQ1MTQ0ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvZGU0eDUuYwpAQCAtMTk5NSw3ICsxOTk1LDcgQEAKIAogc3RhdGljIHVfY2hhciBkZTR4NV9pcnFbXSA9IEVJU0FfQUxMT1dFRF9JUlFfTElTVDsKIAotc3RhdGljIGludCBfX2luaXQgZGU0eDVfZWlzYV9wcm9iZSAoc3RydWN0IGRldmljZSAqZ2VuZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgZGU0eDVfZWlzYV9wcm9iZSAoc3RydWN0IGRldmljZSAqZ2VuZGV2KQogewogCXN0cnVjdCBlaXNhX2RldmljZSAqZWRldjsKIAl1X2xvbmcgaW9iYXNlOwpAQCAtMjA5Nyw3ICsyMDk3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBlaXNhX2RldmljZV9pZCBkZTR4NV9laXNhX2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBlaXNhX2RldmljZV9pZCBkZTR4NV9laXNhX2lkc1tdIF9fZGV2aW5pdGNvbnN0ID0gewogICAgICAgICB7ICJERUM0MjUwIiwgMCB9LAkvKiAwIGlzIHRoZSBib2FyZCBuYW1lIGluZGV4Li4uICovCiAgICAgICAgIHsgIiIgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYwppbmRleCBmYjA3ZjQ4Li40Njg1MTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jCkBAIC0yOTUsOCArMjk1LDcgQEAKIC8qIEdsb2JhbCB2YXJpYWJsZSBkZWNsYXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogc3RhdGljIGludCBfX2RldmluaXRkYXRhIHByaW50ZWRfdmVyc2lvbjsKIHN0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9Ci0JS0VSTl9JTkZPIERSVl9OQU1FICI6IERhdmljb20gRE05eHh4IG5ldCBkcml2ZXIsIHZlcnNpb24gIgotCURSVl9WRVJTSU9OICIgKCIgRFJWX1JFTERBVEUgIilcbiI7CisJIkRhdmljb20gRE05eHh4IG5ldCBkcml2ZXIsIHZlcnNpb24gIiBEUlZfVkVSU0lPTiAiICgiIERSVl9SRUxEQVRFICIpIjsKIAogc3RhdGljIGludCBkbWZlX2RlYnVnOwogc3RhdGljIHVuc2lnbmVkIGNoYXIgZG1mZV9tZWRpYV9tb2RlID0gRE1GRV9BVVRPOwpAQCAtMzgxLDcgKzM4MCw3IEBACiAJRE1GRV9EQlVHKDAsICJkbWZlX2luaXRfb25lKCkiLCAwKTsKIAogCWlmICghcHJpbnRlZF92ZXJzaW9uKyspCi0JCXByaW50ayh2ZXJzaW9uKTsKKwkJcHJfaW5mbygiJXNcbiIsIHZlcnNpb24pOwogCiAJLyoKIAkgKglTUEFSQyBvbi1ib2FyZCBETTkxMHggY2hpcHMgc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIG1haW4KQEAgLTQwNiw3ICs0MDUsNyBAQAogCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CiAKIAlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSkgewotCQlwcl93YXJuaW5nKCIzMi1iaXQgUENJIERNQSBub3QgYXZhaWxhYmxlXG4iKTsKKwkJcHJfd2FybigiMzItYml0IFBDSSBETUEgbm90IGF2YWlsYWJsZVxuIik7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX291dF9mcmVlOwogCX0KQEAgLTIyMDMsNyArMjIwMiw3IEBACiB7CiAJaW50IHJjOwogCi0JcHJpbnRrKHZlcnNpb24pOworCXByX2luZm8oIiVzXG4iLCB2ZXJzaW9uKTsKIAlwcmludGVkX3ZlcnNpb24gPSAxOwogCiAJRE1GRV9EQlVHKDAsICJpbml0X21vZHVsZSgpICIsIGRlYnVnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2VlcHJvbS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZWVwcm9tLmMKaW5kZXggMjk2NDg2Yi4uZmE1ZWVlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvZWVwcm9tLmMKQEAgLTIyMiw4ICsyMjIsOCBAQAogCSAgICAgICAgLyogdGhlcmUgaXMgbm8gcGh5IGluZm9ybWF0aW9uLCBkb24ndCBldmVuIHRyeSB0byBidWlsZCBtdGFibGUgKi8KIAkgICAgICAgIGlmIChjb3VudCA9PSAwKSB7CiAJCQlpZiAodHVsaXBfZGVidWcgPiAwKQotCQkJCXByX3dhcm5pbmcoIiVzOiBubyBwaHkgaW5mbywgYWJvcnRpbmcgbXRhYmxlIGJ1aWxkXG4iLAotCQkJCQkgICBkZXYtPm5hbWUpOworCQkJCXByX3dhcm4oIiVzOiBubyBwaHkgaW5mbywgYWJvcnRpbmcgbXRhYmxlIGJ1aWxkXG4iLAorCQkJCQlkZXYtPm5hbWUpOwogCQkgICAgICAgIHJldHVybjsKIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9pbnRlcnJ1cHQuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL2ludGVycnVwdC5jCmluZGV4IDAwMTM2NDIuLjUzNTBkNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2ludGVycnVwdC5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2ludGVycnVwdC5jCkBAIC0xMjUsMTIgKzEyNSwxMiBAQAogI2VuZGlmCiAKIAlpZiAodHVsaXBfZGVidWcgPiA0KQotCQlwcmludGsoS0VSTl9ERUJVRyAiIEluIHR1bGlwX3J4KCksIGVudHJ5ICVkICUwOHhcbiIsCi0JCSAgICAgICBlbnRyeSwgdHAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyk7CisJCW5ldGRldl9kYmcoZGV2LCAiIEluIHR1bGlwX3J4KCksIGVudHJ5ICVkICUwOHhcbiIsCisJCQkgICBlbnRyeSwgdHAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyk7CiAKICAgICAgICBkbyB7CiAJCWlmIChpb3JlYWQzMih0cC0+YmFzZV9hZGRyICsgQ1NSNSkgPT0gMHhmZmZmZmZmZikgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiBJbiB0dWxpcF9wb2xsKCksIGhhcmR3YXJlIGRpc2FwcGVhcmVkXG4iKTsKKwkJCW5ldGRldl9kYmcoZGV2LCAiIEluIHR1bGlwX3BvbGwoKSwgaGFyZHdhcmUgZGlzYXBwZWFyZWRcbiIpOwogCQkJYnJlYWs7CiAJCX0KICAgICAgICAgICAgICAgIC8qIEFja25vd2xlZGdlIGN1cnJlbnQgUlggaW50ZXJydXB0IHNvdXJjZXMuICovCkBAIC0xNDUsOSArMTQ1LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRwLT5kaXJ0eV9yeCArIFJYX1JJTkdfU0laRSA9PSB0cC0+Y3VyX3J4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgICAgICAgIGlmICh0dWxpcF9kZWJ1ZyA+IDUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbiB0dWxpcF9yeCgpLCBlbnRyeSAlZCAlMDh4XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIGVudHJ5LCBzdGF0dXMpOworCQkgICAgICAgaWYgKHR1bGlwX2RlYnVnID4gNSkKKwkJCQluZXRkZXZfZGJnKGRldiwgIkluIHR1bGlwX3J4KCksIGVudHJ5ICVkICUwOHhcbiIsCisJCQkJCSAgIGVudHJ5LCBzdGF0dXMpOwogCiAJCSAgICAgICBpZiAoKyt3b3JrX2RvbmUgPj0gYnVkZ2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbm90X2RvbmU7CkBAIC0xODQsOSArMTg0LDkgQEAKIAkJCQkJfQogCQkJICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZXJlIHdhcyBhIGZhdGFsIGVycm9yLiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR1bGlwX2RlYnVnID4gMikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZWNlaXZlIGVycm9yLCBSeCBzdGF0dXMgJTA4eFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgc3RhdHVzKTsKKwkJCQkgICAgICAgaWYgKHR1bGlwX2RlYnVnID4gMikKKwkJCQkJCW5ldGRldl9kYmcoZGV2LCAiUmVjZWl2ZSBlcnJvciwgUnggc3RhdHVzICUwOHhcbiIsCisJCQkJCQkJICAgc3RhdHVzKTsKIAkJCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsgLyogZW5kIG9mIGEgcGFja2V0LiovCiAJCQkJCWlmIChwa3RfbGVuID4gMTUxOCB8fAogCQkJCQkgICAgKHN0YXR1cyAmIFJ4RGVzY1J1bnQpKQpAQCAtMzY3LDE2ICszNjcsMTYgQEAKIAlpbnQgcmVjZWl2ZWQgPSAwOwogCiAJaWYgKHR1bGlwX2RlYnVnID4gNCkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiBJbiB0dWxpcF9yeCgpLCBlbnRyeSAlZCAlMDh4XG4iLAotCQkgICAgICAgZW50cnksIHRwLT5yeF9yaW5nW2VudHJ5XS5zdGF0dXMpOworCQluZXRkZXZfZGJnKGRldiwgIkluIHR1bGlwX3J4KCksIGVudHJ5ICVkICUwOHhcbiIsCisJCQkgICBlbnRyeSwgdHAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyk7CiAJLyogSWYgd2Ugb3duIHRoZSBuZXh0IGVudHJ5LCBpdCBpcyBhIG5ldyBwYWNrZXQuIFNlbmQgaXQgdXAuICovCiAJd2hpbGUgKCAhICh0cC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzICYgY3B1X3RvX2xlMzIoRGVzY093bmVkKSkpIHsKIAkJczMyIHN0YXR1cyA9IGxlMzJfdG9fY3B1KHRwLT5yeF9yaW5nW2VudHJ5XS5zdGF0dXMpOwogCQlzaG9ydCBwa3RfbGVuOwogCiAJCWlmICh0dWxpcF9kZWJ1ZyA+IDUpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEluIHR1bGlwX3J4KCksIGVudHJ5ICVkICUwOHhcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlbnRyeSwgc3RhdHVzKTsKKwkJCW5ldGRldl9kYmcoZGV2LCAiSW4gdHVsaXBfcngoKSwgZW50cnkgJWQgJTA4eFxuIiwKKwkJCQkgICBlbnRyeSwgc3RhdHVzKTsKIAkJaWYgKC0tcnhfd29ya19saW1pdCA8IDApCiAJCQlicmVhazsKIApAQCAtNDA0LDE2ICs0MDQsMTYgQEAKIAkJCQkvKiBJbmdvcmUgZWFybGllciBidWZmZXJzLiAqLwogCQkJCWlmICgoc3RhdHVzICYgMHhmZmZmKSAhPSAweDdmZmYpIHsKIAkJCQkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCQkJCWRldl93YXJuKCZkZXYtPmRldiwKLQkJCQkJCQkgIk92ZXJzaXplZCBFdGhlcm5ldCBmcmFtZSBzcGFubmVkIG11bHRpcGxlIGJ1ZmZlcnMsIHN0YXR1cyAlMDh4IVxuIiwKLQkJCQkJCQkgc3RhdHVzKTsKKwkJCQkJCW5ldGRldl93YXJuKGRldiwKKwkJCQkJCQkgICAgIk92ZXJzaXplZCBFdGhlcm5ldCBmcmFtZSBzcGFubmVkIG11bHRpcGxlIGJ1ZmZlcnMsIHN0YXR1cyAlMDh4IVxuIiwKKwkJCQkJCQkgICAgc3RhdHVzKTsKIAkJCQkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCQkJfQogCQkJfSBlbHNlIHsKIAkJCQkvKiBUaGVyZSB3YXMgYSBmYXRhbCBlcnJvci4gKi8KIAkJCQlpZiAodHVsaXBfZGVidWcgPiAyKQotCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJlY2VpdmUgZXJyb3IsIFJ4IHN0YXR1cyAlMDh4XG4iLAotCQkJCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOworCQkJCQluZXRkZXZfZGJnKGRldiwgIlJlY2VpdmUgZXJyb3IsIFJ4IHN0YXR1cyAlMDh4XG4iLAorCQkJCQkJICAgc3RhdHVzKTsKIAkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOyAvKiBlbmQgb2YgYSBwYWNrZXQuKi8KIAkJCQlpZiAocGt0X2xlbiA+IDE1MTggfHwKIAkJCQkgICAgKHN0YXR1cyAmIFJ4RGVzY1J1bnQpKQpAQCAtNTczLDggKzU3Myw4IEBACiAjZW5kaWYgLyogIENPTkZJR19UVUxJUF9OQVBJICovCiAKIAkJaWYgKHR1bGlwX2RlYnVnID4gNCkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogaW50ZXJydXB0ICBjc3I1PSUjOC44eCBuZXcgY3NyNT0lIzguOHhcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBjc3I1LCBpb3JlYWQzMihpb2FkZHIgKyBDU1I1KSk7CisJCQluZXRkZXZfZGJnKGRldiwgImludGVycnVwdCAgY3NyNT0lIzguOHggbmV3IGNzcjU9JSM4Ljh4XG4iLAorCQkJCSAgIGNzcjUsIGlvcmVhZDMyKGlvYWRkciArIENTUjUpKTsKIAogCiAJCWlmIChjc3I1ICYgKFR4Tm9CdWYgfCBUeERpZWQgfCBUeEludHIgfCBUaW1lckludCkpIHsKQEAgLTYwNSw4ICs2MDUsOCBAQAogCQkJCQkvKiBUaGVyZSB3YXMgYW4gbWFqb3IgZXJyb3IsIGxvZyBpdC4gKi8KICNpZm5kZWYgZmluYWxfdmVyc2lvbgogCQkJCQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmFuc21pdCBlcnJvciwgVHggc3RhdHVzICUwOHhcbiIsCi0JCQkJCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOworCQkJCQkJbmV0ZGV2X2RiZyhkZXYsICJUcmFuc21pdCBlcnJvciwgVHggc3RhdHVzICUwOHhcbiIsCisJCQkJCQkJICAgc3RhdHVzKTsKICNlbmRpZgogCQkJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQkJCQlpZiAoc3RhdHVzICYgMHg0MTA0KQpAQCAtODA0LDggKzgwNCw4IEBACiAJfQogCiAJaWYgKHR1bGlwX2RlYnVnID4gNCkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBleGl0aW5nIGludGVycnVwdCwgY3NyNT0lIzA0eFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSkpOworCQluZXRkZXZfZGJnKGRldiwgImV4aXRpbmcgaW50ZXJydXB0LCBjc3I1PSUjMDR4XG4iLAorCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvbWVkaWEuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL21lZGlhLmMKaW5kZXggYTBjNzcwZS4uNGJkMTM5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvbWVkaWEuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9tZWRpYS5jCkBAIC0xODIsOCArMTgyLDggQEAKIAkJc3dpdGNoIChtbGVhZi0+dHlwZSkgewogCQljYXNlIDA6CQkJCQkvKiAyMTE0MCBub24tTUlJIHhjdnIuICovCiAJCQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVXNpbmcgYSAyMTE0MCBub24tTUlJIHRyYW5zY2VpdmVyIHdpdGggY29udHJvbCBzZXR0aW5nICUwMnhcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgcFsxXSk7CisJCQkJbmV0ZGV2X2RiZyhkZXYsICJVc2luZyBhIDIxMTQwIG5vbi1NSUkgdHJhbnNjZWl2ZXIgd2l0aCBjb250cm9sIHNldHRpbmcgJTAyeFxuIiwKKwkJCQkJICAgcFsxXSk7CiAJCQlkZXYtPmlmX3BvcnQgPSBwWzBdOwogCQkJaWYgKHN0YXJ0dXApCiAJCQkJaW93cml0ZTMyKG10YWJsZS0+Y3NyMTJkaXIgfCAweDEwMCwgaW9hZGRyICsgQ1NSMTIpOwpAQCAtMjA0LDE1ICsyMDQsMTQgQEAKIAkJCQlzdHJ1Y3QgbWVkaWFsZWFmICpybGVhZiA9ICZtdGFibGUtPm1sZWFmW210YWJsZS0+aGFzX3Jlc2V0XTsKIAkJCQl1bnNpZ25lZCBjaGFyICpyc3QgPSBybGVhZi0+bGVhZmRhdGE7CiAJCQkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZXNldHRpbmcgdGhlIHRyYW5zY2VpdmVyXG4iLAotCQkJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCQkJbmV0ZGV2X2RiZyhkZXYsICJSZXNldHRpbmcgdGhlIHRyYW5zY2VpdmVyXG4iKTsKIAkJCQlmb3IgKGkgPSAwOyBpIDwgcnN0WzBdOyBpKyspCiAJCQkJCWlvd3JpdGUzMihnZXRfdTE2KHJzdCArIDEgKyAoaTw8MSkpIDw8IDE2LCBpb2FkZHIgKyBDU1IxNSk7CiAJCQl9CiAJCQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogMjExNDMgbm9uLU1JSSAlcyB0cmFuc2NlaXZlciBjb250cm9sICUwNHgvJTA0eFxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSwKLQkJCQkgICAgICAgc2V0dXBbMF0sIHNldHVwWzFdKTsKKwkJCQluZXRkZXZfZGJnKGRldiwgIjIxMTQzIG5vbi1NSUkgJXMgdHJhbnNjZWl2ZXIgY29udHJvbCAlMDR4LyUwNHhcbiIsCisJCQkJCSAgIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdLAorCQkJCQkgICBzZXR1cFswXSwgc2V0dXBbMV0pOwogCQkJaWYgKHBbMF0gJiAweDQwKSB7CS8qIFNJQSAoQ1NSMTMtMTUpIHNldHVwIHZhbHVlcyBhcmUgcHJvdmlkZWQuICovCiAJCQkJY3NyMTN2YWwgPSBzZXR1cFswXTsKIAkJCQljc3IxNHZhbCA9IHNldHVwWzFdOwpAQCAtMjM5LDggKzIzOCw4IEBACiAJCQkJaWYgKHN0YXJ0dXApIGlvd3JpdGUzMihjc3IxM3ZhbCwgaW9hZGRyICsgQ1NSMTMpOwogCQkJfQogCQkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICBTZXR0aW5nIENTUjE1IHRvICUwOHgvJTA4eFxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCBjc3IxNWRpciwgY3NyMTV2YWwpOworCQkJCW5ldGRldl9kYmcoZGV2LCAiU2V0dGluZyBDU1IxNSB0byAlMDh4LyUwOHhcbiIsCisJCQkJCSAgIGNzcjE1ZGlyLCBjc3IxNXZhbCk7CiAJCQlpZiAobWxlYWYtPnR5cGUgPT0gNCkKIAkJCQluZXdfY3NyNiA9IDB4ODIwMjAwMDAgfCAoKHNldHVwWzJdICYgMHg3MSkgPDwgMTgpOwogCQkJZWxzZQpAQCAtMzE2LDkgKzMxNSw5IEBACiAJCQkJaWYgKHRwLT5taWlfYWR2ZXJ0aXNlID09IDApCiAJCQkJCXRwLT5taWlfYWR2ZXJ0aXNlID0gdHAtPmFkdmVydGlzaW5nW3BoeV9udW1dOwogCQkJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogIEFkdmVydGlzaW5nICUwNHggb24gTUlJICVkXG4iLAotCQkJCQkgICAgICAgZGV2LT5uYW1lLCB0cC0+bWlpX2FkdmVydGlzZSwKLQkJCQkJICAgICAgIHRwLT5waHlzW3BoeV9udW1dKTsKKwkJCQkJbmV0ZGV2X2RiZyhkZXYsICIgQWR2ZXJ0aXNpbmcgJTA0eCBvbiBNSUkgJWRcbiIsCisJCQkJCQkgICB0cC0+bWlpX2FkdmVydGlzZSwKKwkJCQkJCSAgIHRwLT5waHlzW3BoeV9udW1dKTsKIAkJCQl0dWxpcF9tZGlvX3dyaXRlKGRldiwgdHAtPnBoeXNbcGh5X251bV0sIDQsIHRwLT5taWlfYWR2ZXJ0aXNlKTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMzM1LDggKzMzNCw3IEBACiAJCQkJc3RydWN0IG1lZGlhbGVhZiAqcmxlYWYgPSAmbXRhYmxlLT5tbGVhZlttdGFibGUtPmhhc19yZXNldF07CiAJCQkJdW5zaWduZWQgY2hhciAqcnN0ID0gcmxlYWYtPmxlYWZkYXRhOwogCQkJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogUmVzZXR0aW5nIHRoZSB0cmFuc2NlaXZlclxuIiwKLQkJCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQkJCW5ldGRldl9kYmcoZGV2LCAiUmVzZXR0aW5nIHRoZSB0cmFuc2NlaXZlclxuIik7CiAJCQkJZm9yIChpID0gMDsgaSA8IHJzdFswXTsgaSsrKQogCQkJCQlpb3dyaXRlMzIoZ2V0X3UxNihyc3QgKyAxICsgKGk8PDEpKSA8PCAxNiwgaW9hZGRyICsgQ1NSMTUpOwogCQkJfQpAQCAtMzQ0LDIwICszNDIsMjEgQEAKIAkJCWJyZWFrOwogCQl9CiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICBJbnZhbGlkIG1lZGlhIHRhYmxlIHNlbGVjdGlvbiAlZFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIG1sZWFmLT50eXBlKTsKKwkJCW5ldGRldl9kYmcoZGV2LCAiIEludmFsaWQgbWVkaWEgdGFibGUgc2VsZWN0aW9uICVkXG4iLAorCQkJCSAgIG1sZWFmLT50eXBlKTsKIAkJCW5ld19jc3I2ID0gMHgwMjBFMDAwMDsKIAkJfQogCQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBVc2luZyBtZWRpYSB0eXBlICVzLCBDU1IxMiBpcyAlMDJ4XG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sCisJCQluZXRkZXZfZGJnKGRldiwgIlVzaW5nIG1lZGlhIHR5cGUgJXMsIENTUjEyIGlzICUwMnhcbiIsCisJCQkJICAgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sCiAJCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTIpICYgMHhmZik7CiAJfSBlbHNlIGlmICh0cC0+Y2hpcF9pZCA9PSBMQzgyQzE2OCkgewogCQlpZiAoc3RhcnR1cCAmJiAhIHRwLT5tZWRpYWxvY2spCiAJCQlkZXYtPmlmX3BvcnQgPSB0cC0+bWlpX2NudCA/IDExIDogMDsKIAkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogUE5JQyBQSFkgc3RhdHVzIGlzICUzLjN4LCBtZWRpYSAlc1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGlvcmVhZDMyKGlvYWRkciArIDB4QjgpLCBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSk7CisJCQluZXRkZXZfZGJnKGRldiwgIlBOSUMgUEhZIHN0YXR1cyBpcyAlMy4zeCwgbWVkaWEgJXNcbiIsCisJCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgMHhCOCksCisJCQkJICAgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0pOwogCQlpZiAodHAtPm1paV9jbnQpIHsKIAkJCW5ld19jc3I2ID0gMHg4MTBDMDAwMDsKIAkJCWlvd3JpdGUzMigweDAwMDEsIGlvYWRkciArIENTUjE1KTsKQEAgLTM4OCw5ICszODcsOSBAQAogCQl9IGVsc2UKIAkJCW5ld19jc3I2ID0gMHgwMzg2MDAwMDsKIAkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gbWVkaWEgZGVzY3JpcHRpb24gdGFibGUsIGFzc3VtaW5nICVzIHRyYW5zY2VpdmVyLCBDU1IxMiAlMDJ4XG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sCi0JCQkgICAgICAgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTIpKTsKKwkJCW5ldGRldl9kYmcoZGV2LCAiTm8gbWVkaWEgZGVzY3JpcHRpb24gdGFibGUsIGFzc3VtaW5nICVzIHRyYW5zY2VpdmVyLCBDU1IxMiAlMDJ4XG4iLAorCQkJCSAgIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdLAorCQkJCSAgIGlvcmVhZDMyKGlvYWRkciArIENTUjEyKSk7CiAJfQogCiAJdHAtPmNzcjYgPSBuZXdfY3NyNiB8ICh0cC0+Y3NyNiAmIDB4ZmRmZikgfCAodHAtPmZ1bGxfZHVwbGV4ID8gMHgwMjAwIDogMCk7CkBAIC01MDQsOCArNTAzLDggQEAKIAogCQkvKiBGaXh1cCBmb3IgRExpbmsgd2l0aCBtaXN3aXJlZCBQSFkuICovCiAJCWlmIChtaWlfYWR2ZXJ0ICE9IHRvX2FkdmVydCkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgInR1bGlwJWQ6ICBBZHZlcnRpc2luZyAlMDR4IG9uIFBIWSAlZCwgcHJldmlvdXNseSBhZHZlcnRpc2luZyAlMDR4XG4iLAotCQkJICAgICAgIGJvYXJkX2lkeCwgdG9fYWR2ZXJ0LCBwaHksIG1paV9hZHZlcnQpOworCQkJcHJfZGVidWcoInR1bGlwJWQ6ICBBZHZlcnRpc2luZyAlMDR4IG9uIFBIWSAlZCwgcHJldmlvdXNseSBhZHZlcnRpc2luZyAlMDR4XG4iLAorCQkJCSBib2FyZF9pZHgsIHRvX2FkdmVydCwgcGh5LCBtaWlfYWR2ZXJ0KTsKIAkJCXR1bGlwX21kaW9fd3JpdGUgKGRldiwgcGh5LCA0LCB0b19hZHZlcnQpOwogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3BuaWMuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3BuaWMuYwppbmRleCBhNjNlNjRiLi5hYTRkOWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9wbmljLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvcG5pYy5jCkBAIC00MCw4ICs0MCw4IEBACiAJCQluZXdfY3NyNiB8PSAweDAwMDAwMjAwOwogCQl9CiAJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFBOSUMgYXV0b25lZ290aWF0ZWQgc3RhdHVzICUwOHgsICVzXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgcGh5X3JlZywgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0pOworCQkJbmV0ZGV2X2RiZyhkZXYsICJQTklDIGF1dG9uZWdvdGlhdGVkIHN0YXR1cyAlMDh4LCAlc1xuIiwKKwkJCQkgICBwaHlfcmVnLCBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSk7CiAJCWlmICh0cC0+Y3NyNiAhPSBuZXdfY3NyNikgewogCQkJdHAtPmNzcjYgPSBuZXdfY3NyNjsKIAkJCS8qIFJlc3RhcnQgVHggKi8KQEAgLTU4LDggKzU4LDggQEAKIAlpbnQgcGh5X3JlZyA9IGlvcmVhZDMyKGlvYWRkciArIDB4QjgpOwogCiAJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBQTklDIGxpbmsgY2hhbmdlZCBzdGF0ZSAlMDh4LCBDU1I1ICUwOHhcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHBoeV9yZWcsIGNzcjUpOworCQluZXRkZXZfZGJnKGRldiwgIlBOSUMgbGluayBjaGFuZ2VkIHN0YXRlICUwOHgsIENTUjUgJTA4eFxuIiwKKwkJCSAgIHBoeV9yZWcsIGNzcjUpOwogCWlmIChpb3JlYWQzMihpb2FkZHIgKyBDU1I1KSAmIFRQTG5rRmFpbCkgewogCQlpb3dyaXRlMzIoKGlvcmVhZDMyKGlvYWRkciArIENTUjcpICYgflRQTG5rRmFpbCkgfCBUUExua1Bhc3MsIGlvYWRkciArIENTUjcpOwogCQkvKiBJZiB3ZSB1c2UgYW4gZXh0ZXJuYWwgTUlJLCB0aGVuIHdlIG11c3RuJ3QgdXNlIHRoZQpAQCAtMTE0LDggKzExNCw4IEBACiAJCWludCBjc3I1ID0gaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSk7CiAKIAkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogUE5JQyB0aW1lciBQSFkgc3RhdHVzICUwOHgsICVzIENTUjUgJTA4eFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIHBoeV9yZWcsIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdLCBjc3I1KTsKKwkJCW5ldGRldl9kYmcoZGV2LCAiUE5JQyB0aW1lciBQSFkgc3RhdHVzICUwOHgsICVzIENTUjUgJTA4eFxuIiwKKwkJCQkgICBwaHlfcmVnLCBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSwgY3NyNSk7CiAJCWlmIChwaHlfcmVnICYgMHgwNDAwMDAwMCkgewkvKiBSZW1vdGUgbGluayBmYXVsdCAqLwogCQkJaW93cml0ZTMyKDB4MDIwMUYwNzgsIGlvYWRkciArIDB4QjgpOwogCQkJbmV4dF90aWNrID0gMSpIWjsKQEAgLTEyNSwxMSArMTI1LDExIEBACiAJCQluZXh0X3RpY2sgPSA2MCpIWjsKIAkJfSBlbHNlIGlmIChjc3I1ICYgVFBMbmtGYWlsKSB7IC8qIDEwMGJhc2VUeCBsaW5rIGJlYXQgKi8KIAkJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAlcyBsaW5rIGJlYXQgZmFpbGVkLCBDU1IxMiAlMDR4LCBDU1I1ICUwOHgsIFBIWSAlMDN4XG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdLAotCQkJCSAgICAgICBjc3IxMiwKLQkJCQkgICAgICAgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSksCi0JCQkJICAgICAgIGlvcmVhZDMyKGlvYWRkciArIDB4QjgpKTsKKwkJCQluZXRkZXZfZGJnKGRldiwgIiVzIGxpbmsgYmVhdCBmYWlsZWQsIENTUjEyICUwNHgsIENTUjUgJTA4eCwgUEhZICUwM3hcbiIsCisJCQkJCSAgIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdLAorCQkJCQkgICBjc3IxMiwKKwkJCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSksCisJCQkJCSAgIGlvcmVhZDMyKGlvYWRkciArIDB4QjgpKTsKIAkJCW5leHRfdGljayA9IDMqSFo7CiAJCQlpZiAodHAtPm1lZGlhbG9jaykgewogCQkJfSBlbHNlIGlmICh0cC0+bndheXNldCAgJiYgIChkZXYtPmlmX3BvcnQgJiAxKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvcG5pYzIuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3BuaWMyLmMKaW5kZXggNDY5MGM4ZS4uOTMzNThlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvcG5pYzIuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9wbmljMi5jCkBAIC0xMjUsOCArMTI1LDggQEAKICAgICAgICAgY3NyMTQgfD0gMHgwMDAwMTE4NDsKIAogCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogUmVzdGFydGluZyBQTklDMiBhdXRvbmVnb3RpYXRpb24sIGNzcjE0PSUwOHhcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGNzcjE0KTsKKwkJbmV0ZGV2X2RiZyhkZXYsICJSZXN0YXJ0aW5nIFBOSUMyIGF1dG9uZWdvdGlhdGlvbiwgY3NyMTQ9JTA4eFxuIiwKKwkJCSAgIGNzcjE0KTsKIAogICAgICAgICAvKiB0ZWxsIHBuaWMyX2xua19jaGFuZ2Ugd2UgYXJlIGRvaW5nIGFuIG53YXkgbmVnb3RpYXRpb24gKi8KIAlkZXYtPmlmX3BvcnQgPSAwOwpAQCAtMTM3LDggKzEzNyw3IEBACiAKIAl0cC0+Y3NyNiA9IGlvcmVhZDMyKGlvYWRkciArIENTUjYpOwogCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogT24gRW50cnkgdG8gTndheSwgY3NyNj0lMDh4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCB0cC0+Y3NyNik7CisJCW5ldGRldl9kYmcoZGV2LCAiT24gRW50cnkgdG8gTndheSwgY3NyNj0lMDh4XG4iLCB0cC0+Y3NyNik7CiAKICAgICAgICAgLyogbWFzayBvZmYgYW55IGJpdHMgbm90IHRvIHRvdWNoCiAgICAgICAgICAqIGNvbW1lbnQgYXQgdG9wIG9mIGZpbGUgZXhwbGFpbnMgbWFzayB2YWx1ZQpAQCAtMjcxLDkgKzI3MCwxMCBAQAogCQkJaW93cml0ZTMyKDEsIGlvYWRkciArIENTUjEzKTsKIAogCQkJaWYgKHR1bGlwX2RlYnVnID4gMikKLQkJCSAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTZXR0aW5nIENTUjYgJTA4eC8leCBDU1IxMiAlMDh4XG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIHRwLT5jc3I2LAotCQkJCSAgICAgICBpb3JlYWQzMihpb2FkZHIgKyBDU1I2KSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTIpKTsKKwkJCQluZXRkZXZfZGJnKGRldiwgIlNldHRpbmcgQ1NSNiAlMDh4LyV4IENTUjEyICUwOHhcbiIsCisJCQkJCSAgIHRwLT5jc3I2LAorCQkJCQkgICBpb3JlYWQzMihpb2FkZHIgKyBDU1I2KSwKKwkJCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTIpKTsKIAogCQkJLyogbm93IHRoZSBmb2xsb3dpbmcgYWN0dWFsbHkgd3JpdGVzIG91dCB0aGUKIAkJCSAqIG5ldyBjc3I2IHZhbHVlcwpAQCAtMzI0LDcgKzMyNCw3IEBACiAJCS8qIExpbmsgYmxldz8gTWF5YmUgcmVzdGFydCBOV2F5LiAqLwogCiAJCWlmICh0dWxpcF9kZWJ1ZyA+IDIpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFVnaCEgTGluayBibGV3P1xuIiwgZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9kYmcoZGV2LCAiVWdoISBMaW5rIGJsZXc/XG4iKTsKIAogCQlkZWxfdGltZXJfc3luYygmdHAtPnRpbWVyKTsKIAkJcG5pYzJfc3RhcnRfbndheShkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvdGltZXIuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3RpbWVyLmMKaW5kZXggMzZjMjcyNS4uMjAxN2ZhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvdGltZXIuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC90aW1lci5jCkBAIC0yOCwxMSArMjgsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKHR1bGlwX2RlYnVnID4gMikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE1lZGlhIHNlbGVjdGlvbiB0aWNrLCAlcywgc3RhdHVzICUwOHggbW9kZSAlMDh4IFNJQSAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSwKLQkJICAgICAgIGlvcmVhZDMyKGlvYWRkciArIENTUjUpLCBpb3JlYWQzMihpb2FkZHIgKyBDU1I2KSwKLQkJICAgICAgIGNzcjEyLCBpb3JlYWQzMihpb2FkZHIgKyBDU1IxMyksCi0JCSAgICAgICBpb3JlYWQzMihpb2FkZHIgKyBDU1IxNCksIGlvcmVhZDMyKGlvYWRkciArIENTUjE1KSk7CisJCW5ldGRldl9kYmcoZGV2LCAiTWVkaWEgc2VsZWN0aW9uIHRpY2ssICVzLCBzdGF0dXMgJTA4eCBtb2RlICUwOHggU0lBICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsCisJCQkgICBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSwKKwkJCSAgIGlvcmVhZDMyKGlvYWRkciArIENTUjUpLCBpb3JlYWQzMihpb2FkZHIgKyBDU1I2KSwKKwkJCSAgIGNzcjEyLCBpb3JlYWQzMihpb2FkZHIgKyBDU1IxMyksCisJCQkgICBpb3JlYWQzMihpb2FkZHIgKyBDU1IxNCksIGlvcmVhZDMyKGlvYWRkciArIENTUjE1KSk7CiAJfQogCXN3aXRjaCAodHAtPmNoaXBfaWQpIHsKIAljYXNlIERDMjExNDA6CkBAIC00OCw5ICs0OCw5IEBACiAJCQkgICBBc3N1bWUgdGhpcyBhIGdlbmVyaWMgTUlJIG9yIFNZTSB0cmFuc2NlaXZlci4gKi8KIAkJCW5leHRfdGljayA9IDYwKkhaOwogCQkJaWYgKHR1bGlwX2RlYnVnID4gMikKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG5ldHdvcmsgbWVkaWEgbW9uaXRvciBDU1I2ICUwOHggQ1NSMTIgMHglMDJ4XG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsCi0JCQkJICAgICAgIGlvcmVhZDMyKGlvYWRkciArIENTUjYpLCBjc3IxMiAmIDB4ZmYpOworCQkJCW5ldGRldl9kYmcoZGV2LCAibmV0d29yayBtZWRpYSBtb25pdG9yIENTUjYgJTA4eCBDU1IxMiAweCUwMnhcbiIsCisJCQkJCSAgIGlvcmVhZDMyKGlvYWRkciArIENTUjYpLAorCQkJCQkgICBjc3IxMiAmIDB4ZmYpOwogCQkJYnJlYWs7CiAJCX0KIAkJbWxlYWYgPSAmdHAtPm10YWJsZS0+bWxlYWZbdHAtPmN1cl9pbmRleF07CkBAIC02Miw4ICs2Miw4IEBACiAJCQlzOCBiaXRudW0gPSBwW29mZnNldF07CiAJCQlpZiAocFtvZmZzZXQrMV0gJiAweDgwKSB7CiAJCQkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmFuc2NlaXZlciBtb25pdG9yIHRpY2sgQ1NSMTI9JSMwMngsIG5vIG1lZGlhIHNlbnNlXG4iLAotCQkJCQkgICAgICAgZGV2LT5uYW1lLCBjc3IxMik7CisJCQkJCW5ldGRldl9kYmcoZGV2LCAiVHJhbnNjZWl2ZXIgbW9uaXRvciB0aWNrIENTUjEyPSUjMDJ4LCBubyBtZWRpYSBzZW5zZVxuIiwKKwkJCQkJCSAgIGNzcjEyKTsKIAkJCQlpZiAobWxlYWYtPnR5cGUgPT0gNCkgewogCQkJCQlpZiAobWxlYWYtPm1lZGlhID09IDMgJiYgKGNzcjEyICYgMHgwMikpCiAJCQkJCQlnb3RvIHNlbGVjdF9uZXh0X21lZGlhOwpAQCAtNzEsMTcgKzcxLDE2IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlpZiAodHVsaXBfZGVidWcgPiAyKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVHJhbnNjZWl2ZXIgbW9uaXRvciB0aWNrOiBDU1IxMj0lIzAyeCBiaXQgJWQgaXMgJWQsIGV4cGVjdGluZyAlZFxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCBjc3IxMiwgKGJpdG51bSA+PiAxKSAmIDcsCi0JCQkJICAgICAgIChjc3IxMiAmICgxIDw8ICgoYml0bnVtID4+IDEpICYgNykpKSAhPSAwLAotCQkJCSAgICAgICAoYml0bnVtID49IDApKTsKKwkJCQluZXRkZXZfZGJnKGRldiwgIlRyYW5zY2VpdmVyIG1vbml0b3IgdGljazogQ1NSMTI9JSMwMnggYml0ICVkIGlzICVkLCBleHBlY3RpbmcgJWRcbiIsCisJCQkJCSAgIGNzcjEyLCAoYml0bnVtID4+IDEpICYgNywKKwkJCQkJICAgKGNzcjEyICYgKDEgPDwgKChiaXRudW0gPj4gMSkgJiA3KSkpICE9IDAsCisJCQkJCSAgIChiaXRudW0gPj0gMCkpOwogCQkJLyogQ2hlY2sgdGhhdCB0aGUgc3BlY2lmaWVkIGJpdCBoYXMgdGhlIHByb3BlciB2YWx1ZS4gKi8KIAkJCWlmICgoYml0bnVtIDwgMCkgIT0KIAkJCQkoKGNzcjEyICYgKDEgPDwgKChiaXRudW0gPj4gMSkgJiA3KSkpICE9IDApKSB7CiAJCQkJaWYgKHR1bGlwX2RlYnVnID4gMikKLQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBMaW5rIGJlYXQgZGV0ZWN0ZWQgZm9yICVzXG4iLAotCQkJCQkgICAgICAgZGV2LT5uYW1lLAotCQkJCQkgICAgICAgbWVkaWFuYW1lW21sZWFmLT5tZWRpYSAmIE1FRElBX01BU0tdKTsKKwkJCQkJbmV0ZGV2X2RiZyhkZXYsICJMaW5rIGJlYXQgZGV0ZWN0ZWQgZm9yICVzXG4iLAorCQkJCQkJICAgbWVkaWFuYW1lW21sZWFmLT5tZWRpYSAmIE1FRElBX01BU0tdKTsKIAkJCQlpZiAoKHBbMl0gJiAweDYxKSA9PSAweDAxKQkvKiBCb2d1cyBabnl4IGJvYXJkLiAqLwogCQkJCQlnb3RvIGFjdHVhbGx5X21paTsKIAkJCQluZXRpZl9jYXJyaWVyX29uKGRldik7CkBAIC05OSwxMCArOTgsOSBAQAogCQkJaWYgKHR1bGlwX21lZGlhX2NhcFtkZXYtPmlmX3BvcnRdICYgTWVkaWFJc0ZEKQogCQkJCWdvdG8gc2VsZWN0X25leHRfbWVkaWE7IC8qIFNraXAgRkQgZW50cmllcy4gKi8KIAkJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBObyBsaW5rIGJlYXQgb24gbWVkaWEgJXMsIHRyeWluZyB0cmFuc2NlaXZlciB0eXBlICVzXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsCi0JCQkJICAgICAgIG1lZGlhbmFtZVttbGVhZi0+bWVkaWEgJiBNRURJQV9NQVNLXSwKLQkJCQkgICAgICAgbWVkaWFuYW1lW3RwLT5tdGFibGUtPm1sZWFmW3RwLT5jdXJfaW5kZXhdLm1lZGlhXSk7CisJCQkJbmV0ZGV2X2RiZyhkZXYsICJObyBsaW5rIGJlYXQgb24gbWVkaWEgJXMsIHRyeWluZyB0cmFuc2NlaXZlciB0eXBlICVzXG4iLAorCQkJCQkgICBtZWRpYW5hbWVbbWxlYWYtPm1lZGlhICYgTUVESUFfTUFTS10sCisJCQkJCSAgIG1lZGlhbmFtZVt0cC0+bXRhYmxlLT5tbGVhZlt0cC0+Y3VyX2luZGV4XS5tZWRpYV0pOwogCQkJdHVsaXBfc2VsZWN0X21lZGlhKGRldiwgMCk7CiAJCQkvKiBSZXN0YXJ0IHRoZSB0cmFuc21pdCBwcm9jZXNzLiAqLwogCQkJdHVsaXBfcmVzdGFydF9yeHR4KHRwKTsKQEAgLTE2NiwxMCArMTY0LDkgQEAKIAlpbnQgbmV4dF90aWNrID0gNjAqSFo7CiAKIAlpZiAodHVsaXBfZGVidWcgPiAxKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IENvbWV0IGxpbmsgc3RhdHVzICUwNHggcGFydG5lciBjYXBhYmlsaXR5ICUwNHhcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsCi0JCSAgICAgICB0dWxpcF9tZGlvX3JlYWQoZGV2LCB0cC0+cGh5c1swXSwgMSksCi0JCSAgICAgICB0dWxpcF9tZGlvX3JlYWQoZGV2LCB0cC0+cGh5c1swXSwgNSkpOworCQluZXRkZXZfZGJnKGRldiwgIkNvbWV0IGxpbmsgc3RhdHVzICUwNHggcGFydG5lciBjYXBhYmlsaXR5ICUwNHhcbiIsCisJCQkgICB0dWxpcF9tZGlvX3JlYWQoZGV2LCB0cC0+cGh5c1swXSwgMSksCisJCQkgICB0dWxpcF9tZGlvX3JlYWQoZGV2LCB0cC0+cGh5c1swXSwgNSkpOwogCS8qIG1vZF90aW1lciBzeW5jaHJvbml6ZXMgdXMgd2l0aCBwb3RlbnRpYWwgYWRkX3RpbWVyIGNhbGxzCiAJICogZnJvbSBpbnRlcnJ1cHRzLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXAuaCBiL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwLmgKaW5kZXggZWQ2NmExNi4uOWRiNTI4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXAuaAorKysgYi9kcml2ZXJzL25ldC90dWxpcC90dWxpcC5oCkBAIC01NDcsMTEgKzU0Nyw5IEBACiAJCQl1ZGVsYXkoMTApOwogCiAJCWlmICghaSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdHVsaXBfc3RvcF9yeHR4KCkgZmFpbGVkIgotCQkJCQkiIChDU1I1IDB4JXggQ1NSNiAweCV4KVxuIiwKLQkJCQkJcGNpX25hbWUodHAtPnBkZXYpLAotCQkJCQlpb3JlYWQzMihpb2FkZHIgKyBDU1I1KSwKLQkJCQkJaW9yZWFkMzIoaW9hZGRyICsgQ1NSNikpOworCQkJbmV0ZGV2X2RiZyh0cC0+ZGV2LCAidHVsaXBfc3RvcF9yeHR4KCkgZmFpbGVkIChDU1I1IDB4JXggQ1NSNiAweCV4KVxuIiwKKwkJCQkgICBpb3JlYWQzMihpb2FkZHIgKyBDU1I1KSwKKwkJCQkgICBpb3JlYWQzMihpb2FkZHIgKyBDU1I2KSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC90dWxpcF9jb3JlLmMgYi9kcml2ZXJzL25ldC90dWxpcC90dWxpcF9jb3JlLmMKaW5kZXggNWMwMWUyNi4uODJmODc2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXBfY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwX2NvcmUuYwpAQCAtMTIsNiArMTIsNyBAQAogCVBsZWFzZSBzdWJtaXQgYnVncyB0byBodHRwOi8vYnVnemlsbGEua2VybmVsLm9yZy8gLgogKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSAidHVsaXA6ICIgZm10CiAKICNkZWZpbmUgRFJWX05BTUUJInR1bGlwIgogI2lmZGVmIENPTkZJR19UVUxJUF9OQVBJCkBAIC0xMTksOCArMTIwLDYgQEAKIG1vZHVsZV9wYXJhbV9hcnJheShvcHRpb25zLCBpbnQsIE5VTEwsIDApOwogbW9kdWxlX3BhcmFtX2FycmF5KGZ1bGxfZHVwbGV4LCBpbnQsIE5VTEwsIDApOwogCi0jZGVmaW5lIFBGWCBEUlZfTkFNRSAiOiAiCi0KICNpZmRlZiBUVUxJUF9ERUJVRwogaW50IHR1bGlwX2RlYnVnID0gVFVMSVBfREVCVUc7CiAjZWxzZQpAQCAtMzMxLDggKzMzMCw3IEBACiAJdWRlbGF5KDEwMCk7CiAKIAlpZiAodHVsaXBfZGVidWcgPiAxKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHR1bGlwX3VwKCksIGlycT09JWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGRldi0+aXJxKTsKKwkJbmV0ZGV2X2RiZyhkZXYsICJ0dWxpcF91cCgpLCBpcnE9PSVkXG4iLCBkZXYtPmlycSk7CiAKIAlpb3dyaXRlMzIodHAtPnJ4X3JpbmdfZG1hLCBpb2FkZHIgKyBDU1IzKTsKIAlpb3dyaXRlMzIodHAtPnR4X3JpbmdfZG1hLCBpb2FkZHIgKyBDU1I0KTsKQEAgLTQ5OSwxMCArNDk3LDEwIEBACiAJaW93cml0ZTMyKDAsIGlvYWRkciArIENTUjIpOwkJLyogUnggcG9sbCBkZW1hbmQgKi8KIAogCWlmICh0dWxpcF9kZWJ1ZyA+IDIpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBEb25lIHR1bGlwX3VwKCksIENTUjAgJTA4eCwgQ1NSNSAlMDh4IENTUjYgJTA4eFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMCksCi0JCSAgICAgICBpb3JlYWQzMihpb2FkZHIgKyBDU1I1KSwKLQkJICAgICAgIGlvcmVhZDMyKGlvYWRkciArIENTUjYpKTsKKwkJbmV0ZGV2X2RiZyhkZXYsICJEb25lIHR1bGlwX3VwKCksIENTUjAgJTA4eCwgQ1NSNSAlMDh4IENTUjYgJTA4eFxuIiwKKwkJCSAgIGlvcmVhZDMyKGlvYWRkciArIENTUjApLAorCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSksCisJCQkgICBpb3JlYWQzMihpb2FkZHIgKyBDU1I2KSk7CiAJfQogCiAJLyogU2V0IHRoZSB0aW1lciB0byBzd2l0Y2ggdG8gY2hlY2sgZm9yIGxpbmsgYmVhdCBhbmQgcGVyaGFwcyBzd2l0Y2gKQEAgLTg0Myw4ICs4NDEsNyBAQAogCXR1bGlwX2Rvd24gKGRldik7CiAKIAlpZiAodHVsaXBfZGVidWcgPiAxKQotCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwKLQkJCSAgICJTaHV0dGluZyBkb3duIGV0aGVyY2FyZCwgc3RhdHVzIHdhcyAlMDJ4XG4iLAorCQluZXRkZXZfZGJnKGRldiwgIlNodXR0aW5nIGRvd24gZXRoZXJjYXJkLCBzdGF0dXMgd2FzICUwMnhcbiIsCiAJCQkgICBpb3JlYWQzMiAoaW9hZGRyICsgQ1NSNSkpOwogCiAJZnJlZV9pcnEgKGRldi0+aXJxLCBkZXYpOwpAQCAtMTIwNyw3ICsxMjA0LDcgQEAKIAl1MzIgY3NyMDsKIAogCWlmICh0dWxpcF9kZWJ1ZyA+IDMpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogdHVsaXBfbXdpX2NvbmZpZygpXG4iLCBwY2lfbmFtZShwZGV2KSk7CisJCW5ldGRldl9kYmcoZGV2LCAidHVsaXBfbXdpX2NvbmZpZygpXG4iKTsKIAogCXRwLT5jc3IwID0gY3NyMCA9IDA7CiAKQEAgLTEyNjksOCArMTI2Niw4IEBACiBvdXQ6CiAJdHAtPmNzcjAgPSBjc3IwOwogCWlmICh0dWxpcF9kZWJ1ZyA+IDIpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogTVdJIGNvbmZpZyBjYWNoZWxpbmU9JWQsIGNzcjA9JTA4eFxuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpLCBjYWNoZSwgY3NyMCk7CisJCW5ldGRldl9kYmcoZGV2LCAiTVdJIGNvbmZpZyBjYWNoZWxpbmU9JWQsIGNzcjA9JTA4eFxuIiwKKwkJCSAgIGNhY2hlLCBjc3IwKTsKIH0KICNlbmRpZgogCkBAIC0xMzQwLDEzICsxMzM3LDEzIEBACiAJICovCiAKICAgICAgICAgaWYgKHBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9MTUMpIHsKLQkJcHJfZXJyKFBGWCAic2tpcHBpbmcgTE1DIGNhcmRcbiIpOworCQlwcl9lcnIoInNraXBwaW5nIExNQyBjYXJkXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfSBlbHNlIGlmIChwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IFBDSV9WRU5ET1JfSURfU0JFICYmCiAJCSAgIChwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IFBDSV9TVUJERVZJQ0VfSURfU0JFX1QzRTMgfHwKIAkJICAgIHBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gUENJX1NVQkRFVklDRV9JRF9TQkVfMlQzRTNfUDAgfHwKIAkJICAgIHBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gUENJX1NVQkRFVklDRV9JRF9TQkVfMlQzRTNfUDEpKSB7Ci0JCXByX2VycihQRlggInNraXBwaW5nIFNCRSBUM0UzIHBvcnRcbiIpOworCQlwcl9lcnIoInNraXBwaW5nIFNCRSBUM0UzIHBvcnRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTEzNjIsMTMgKzEzNTksMTMgQEAKIAogCQlpZiAocGRldi0+dmVuZG9yID09IDB4MTI4MiAmJiBwZGV2LT5kZXZpY2UgPT0gMHg5MTAwICYmCiAJCSAgICBwZGV2LT5yZXZpc2lvbiA8IDB4MzApIHsKLQkJCXByX2luZm8oUEZYICJza2lwcGluZyBlYXJseSBETTkxMDAgd2l0aCBDcmMgYnVnICh1c2UgZG1mZSlcbiIpOworCQkJcHJfaW5mbygic2tpcHBpbmcgZWFybHkgRE05MTAwIHdpdGggQ3JjIGJ1ZyAodXNlIGRtZmUpXG4iKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAKIAkJZHAgPSBwY2lfZGV2aWNlX3RvX09GX25vZGUocGRldik7CiAJCWlmICghKGRwICYmIG9mX2dldF9wcm9wZXJ0eShkcCwgImxvY2FsLW1hYy1hZGRyZXNzIiwgTlVMTCkpKSB7Ci0JCQlwcl9pbmZvKFBGWCAic2tpcHBpbmcgRE05MTB4IGV4cGFuc2lvbiBjYXJkICh1c2UgZG1mZSlcbiIpOworCQkJcHJfaW5mbygic2tpcHBpbmcgRE05MTB4IGV4cGFuc2lvbiBjYXJkICh1c2UgZG1mZSlcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CkBAIC0xNDE1LDE2ICsxNDEyLDE0IEBACiAKIAlpID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKGkpIHsKLQkJcHJfZXJyKFBGWCAiQ2Fubm90IGVuYWJsZSB0dWxpcCBib2FyZCAjJWQsIGFib3J0aW5nXG4iLAotCQkgICAgICAgYm9hcmRfaWR4KTsKKwkJcHJfZXJyKCJDYW5ub3QgZW5hYmxlIHR1bGlwIGJvYXJkICMlZCwgYWJvcnRpbmdcbiIsIGJvYXJkX2lkeCk7CiAJCXJldHVybiBpOwogCX0KIAogCS8qIFRoZSBjaGlwIHdpbGwgZmFpbCB0byBlbnRlciBhIGxvdy1wb3dlciBzdGF0ZSBsYXRlciB1bmxlc3MKIAkgKiBmaXJzdCBleHBsaWNpdGx5IGNvbW1hbmRlZCBpbnRvIEQwICovCiAJaWYgKHBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKSkgewotCQlwcmludGsgKEtFUk5fTk9USUNFIFBGWAotCQkJIkZhaWxlZCB0byBzZXQgcG93ZXIgc3RhdGUgdG8gRDBcbiIpOworCQlwcl9ub3RpY2UoIkZhaWxlZCB0byBzZXQgcG93ZXIgc3RhdGUgdG8gRDBcbiIpOwogCX0KIAogCWlycSA9IHBkZXYtPmlycTsKQEAgLTE0MzIsMTMgKzE0MjcsMTMgQEAKIAkvKiBhbGxvY19ldGhlcmRldiBlbnN1cmVzIGFsaWduZWQgYW5kIHplcm9lZCBwcml2YXRlIHN0cnVjdHVyZXMgKi8KIAlkZXYgPSBhbGxvY19ldGhlcmRldiAoc2l6ZW9mICgqdHApKTsKIAlpZiAoIWRldikgewotCQlwcl9lcnIoUEZYICJldGhlciBkZXZpY2UgYWxsb2MgZmFpbGVkLCBhYm9ydGluZ1xuIik7CisJCXByX2VycigiZXRoZXIgZGV2aWNlIGFsbG9jIGZhaWxlZCwgYWJvcnRpbmdcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCWlmIChwY2lfcmVzb3VyY2VfbGVuIChwZGV2LCAwKSA8IHR1bGlwX3RibFtjaGlwX2lkeF0uaW9fc2l6ZSkgewotCQlwcl9lcnIoUEZYICIlczogSS9PIHJlZ2lvbiAoMHglbGx4QDB4JWxseCkgdG9vIHNtYWxsLCBhYm9ydGluZ1xuIiwKKwkJcHJfZXJyKCIlczogSS9PIHJlZ2lvbiAoMHglbGx4QDB4JWxseCkgdG9vIHNtYWxsLCBhYm9ydGluZ1xuIiwKIAkJICAgICAgIHBjaV9uYW1lKHBkZXYpLAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2VfbGVuIChwZGV2LCAwKSwKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0IChwZGV2LCAwKSk7CkBAIC0xNDgzLDcgKzE0NzgsOCBAQAogCQlpZiAoc2lnID09IDB4MDk4MTEzMTcpIHsKIAkJCXRwLT5mbGFncyB8PSBDT01FVF9QTTsKIAkJCXRwLT53b2xpbmZvLnN1cHBvcnRlZCA9IFdBS0VfUEhZIHwgV0FLRV9NQUdJQzsKLQkJCXByaW50ayhLRVJOX0lORk8gInR1bGlwX2luaXRfb25lOiBFbmFibGVkIFdPTCBzdXBwb3J0IGZvciBBTjk4M0JcbiIpOworCQkJcHJfaW5mbygiJXM6IEVuYWJsZWQgV09MIHN1cHBvcnQgZm9yIEFOOTgzQlxuIiwKKwkJCQlfX2Z1bmNfXyk7CiAJCX0KIAl9CiAJdHAtPnBkZXYgPSBwZGV2OwpAQCAtMTg3OSw3ICsxODc1LDcgQEAKIAkJdHVsaXBfc2V0X3dvbG9wdHMocGRldiwgdHAtPndvbGluZm8ud29sb3B0cyk7CiAJCXJjID0gcGNpX2VuYWJsZV93YWtlKHBkZXYsIHBzdGF0ZSwgdHAtPndvbGluZm8ud29sb3B0cyk7CiAJCWlmIChyYykKLQkJCXByaW50aygidHVsaXA6IHBjaV9lbmFibGVfd2FrZSBmYWlsZWQgKCVkKVxuIiwgcmMpOworCQkJcHJfZXJyKCJwY2lfZW5hYmxlX3dha2UgZmFpbGVkICglZClcbiIsIHJjKTsKIAl9CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBwc3RhdGUpOwogCkBAIC0xOTA1LDEyICsxOTAxLDEyIEBACiAJCXJldHVybiAwOwogCiAJaWYgKChyZXR2YWwgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KSkpIHsKLQkJcHJfZXJyKFBGWCAicGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkIGluIHJlc3VtZVxuIik7CisJCXByX2VycigicGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkIGluIHJlc3VtZVxuIik7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCiAJaWYgKChyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgdHVsaXBfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpKSkgewotCQlwcl9lcnIoUEZYICJyZXF1ZXN0X2lycSBmYWlsZWQgaW4gcmVzdW1lXG4iKTsKKwkJcHJfZXJyKCJyZXF1ZXN0X2lycSBmYWlsZWQgaW4gcmVzdW1lXG4iKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3VsaTUyNnguYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3VsaTUyNnguYwppbmRleCA3NDIxN2RiLi45ZTYzZjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC91bGk1MjZ4LmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvdWxpNTI2eC5jCkBAIC0yMDksOCArMjA5LDcgQEAKIC8qIEdsb2JhbCB2YXJpYWJsZSBkZWNsYXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogc3RhdGljIGludCBfX2RldmluaXRkYXRhIHByaW50ZWRfdmVyc2lvbjsKIHN0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9Ci0JS0VSTl9JTkZPIERSVl9OQU1FICI6IFVMaSBNNTI2MS9NNTI2MyBuZXQgZHJpdmVyLCB2ZXJzaW9uICIKLQlEUlZfVkVSU0lPTiAiICgiIERSVl9SRUxEQVRFICIpXG4iOworCSJVTGkgTTUyNjEvTTUyNjMgbmV0IGRyaXZlciwgdmVyc2lvbiAiIERSVl9WRVJTSU9OICIgKCIgRFJWX1JFTERBVEUgIikiOwogCiBzdGF0aWMgaW50IHVsaTUyNnhfZGVidWc7CiBzdGF0aWMgdW5zaWduZWQgY2hhciB1bGk1MjZ4X21lZGlhX21vZGUgPSBVTEk1MjZYX0FVVE87CkBAIC0yODMsNyArMjgyLDcgQEAKIAlVTEk1MjZYX0RCVUcoMCwgInVsaTUyNnhfaW5pdF9vbmUoKSIsIDApOwogCiAJaWYgKCFwcmludGVkX3ZlcnNpb24rKykKLQkJcHJpbnRrKHZlcnNpb24pOworCQlwcl9pbmZvKCIlc1xuIiwgdmVyc2lvbik7CiAKIAkvKiBJbml0IG5ldHdvcmsgZGV2aWNlICovCiAJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKCpkYikpOwpAQCAtMjkyLDcgKzI5MSw3IEBACiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAogCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpKSB7Ci0JCXByX3dhcm5pbmcoIjMyLWJpdCBQQ0kgRE1BIG5vdCBhdmFpbGFibGVcbiIpOworCQlwcl93YXJuKCIzMi1iaXQgUENJIERNQSBub3QgYXZhaWxhYmxlXG4iKTsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBlcnJfb3V0X2ZyZWU7CiAJfQpAQCAtMzkwLDkgKzM4OSw5IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0X3JlczsKIAotCWRldl9pbmZvKCZkZXYtPmRldiwgIlVMaSBNJTA0bHggYXQgcGNpJXMsICVwTSwgaXJxICVkXG4iLAotCQkgZW50LT5kcml2ZXJfZGF0YSA+PiAxNiwgcGNpX25hbWUocGRldiksCi0JCSBkZXYtPmRldl9hZGRyLCBkZXYtPmlycSk7CisJbmV0ZGV2X2luZm8oZGV2LCAiVUxpIE0lMDRseCBhdCBwY2klcywgJXBNLCBpcnEgJWRcbiIsCisJCSAgICBlbnQtPmRyaXZlcl9kYXRhID4+IDE2LCBwY2lfbmFtZShwZGV2KSwKKwkJICAgIGRldi0+ZGV2X2FkZHIsIGRldi0+aXJxKTsKIAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCkBAIC01MjQsNyArNTIzLDcgQEAKIAkJfQogCX0KIAlpZihwaHlfdG1wID09IDMyKQotCQlwcl93YXJuaW5nKCJDYW4gbm90IGZpbmQgdGhlIHBoeSBhZGRyZXNzISEhIik7CisJCXByX3dhcm4oIkNhbiBub3QgZmluZCB0aGUgcGh5IGFkZHJlc3MhISFcbiIpOwogCS8qIFBhcnNlciBTUk9NIGFuZCBtZWRpYSBtb2RlICovCiAJZGItPm1lZGlhX21vZGUgPSB1bGk1MjZ4X21lZGlhX21vZGU7CiAKQEAgLTU5MCw3ICs1ODksNyBAQAogCiAJLyogVG9vIGxhcmdlIHBhY2tldCBjaGVjayAqLwogCWlmIChza2ItPmxlbiA+IE1BWF9QQUNLRVRfU0laRSkgewotCQlwcl9lcnIoImJpZyBwYWNrZXQgPSAlZFxuIiwgKHUxNilza2ItPmxlbik7CisJCW5ldGRldl9lcnIoZGV2LCAiYmlnIHBhY2tldCA9ICVkXG4iLCAodTE2KXNrYi0+bGVuKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KQEAgLTYwMCw3ICs1OTksNyBAQAogCS8qIE5vIFR4IHJlc291cmNlIGNoZWNrLCBpdCBuZXZlciBoYXBwZW4gbnJvbWFsbHkgKi8KIAlpZiAoZGItPnR4X3BhY2tldF9jbnQgPj0gVFhfRlJFRV9ERVNDX0NOVCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYi0+bG9jaywgZmxhZ3MpOwotCQlwcl9lcnIoIk5vIFR4IHJlc291cmNlICVsZFxuIiwgZGItPnR4X3BhY2tldF9jbnQpOworCQluZXRkZXZfZXJyKGRldiwgIk5vIFR4IHJlc291cmNlICVsZFxuIiwgZGItPnR4X3BhY2tldF9jbnQpOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCkBAIC02NjcsMTUgKzY2Niw2IEBACiAJLyogZnJlZSBhbGxvY2F0ZWQgcnggYnVmZmVyICovCiAJdWxpNTI2eF9mcmVlX3J4YnVmZmVyKGRiKTsKIAotI2lmIDAKLQkvKiBzaG93IHN0YXRpc3RpYyBjb3VudGVyICovCi0JcHJpbnRrKERSVl9OQU1FICI6IEZVOiVseCBFQzolbHggTEM6JWx4IE5DOiVseCBMT0M6JWx4IFRYSlQ6JWx4IFJFU0VUOiVseCBSQ1I4OiVseCBGQUw6JWx4IFRUOiVseFxuIiwKLQkJZGItPnR4X2ZpZm9fdW5kZXJydW4sIGRiLT50eF9leGNlc3NpdmVfY29sbGlzaW9uLAotCQlkYi0+dHhfbGF0ZV9jb2xsaXNpb24sIGRiLT50eF9ub19jYXJyaWVyLCBkYi0+dHhfbG9zc19jYXJyaWVyLAotCQlkYi0+dHhfamFiYmVyX3RpbWVvdXQsIGRiLT5yZXNldF9jb3VudCwgZGItPnJlc2V0X2NyOCwKLQkJZGItPnJlc2V0X2ZhdGFsLCBkYi0+cmVzZXRfVFh0aW1lb3V0KTsKLSNlbmRpZgotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc1NSw3ICs3NDUsNiBAQAogCXR4cHRyID0gZGItPnR4X3JlbW92ZV9wdHI7CiAJd2hpbGUoZGItPnR4X3BhY2tldF9jbnQpIHsKIAkJdGRlczAgPSBsZTMyX3RvX2NwdSh0eHB0ci0+dGRlczApOwotCQkvKiBwcmludGsoRFJWX05BTUUgIjogdGRlczA9JXhcbiIsIHRkZXMwKTsgKi8KIAkJaWYgKHRkZXMwICYgMHg4MDAwMDAwMCkKIAkJCWJyZWFrOwogCkBAIC03NjUsNyArNzU0LDYgQEAKIAogCQkvKiBUcmFuc21pdCBzdGF0aXN0aWMgY291bnRlciAqLwogCQlpZiAoIHRkZXMwICE9IDB4N2ZmZmZmZmYgKSB7Ci0JCQkvKiBwcmludGsoRFJWX05BTUUgIjogdGRlczA9JXhcbiIsIHRkZXMwKTsgKi8KIAkJCWRldi0+c3RhdHMuY29sbGlzaW9ucyArPSAodGRlczAgPj4gMykgJiAweGY7CiAJCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IGxlMzJfdG9fY3B1KHR4cHRyLT50ZGVzMSkgJiAweDdmZjsKIAkJCWlmICh0ZGVzMCAmIFRERVMwX0VSUl9NQVNLKSB7CkBAIC04MzgsNyArODI2LDYgQEAKIAkJCS8qIGVycm9yIHN1bW1hcnkgYml0IGNoZWNrICovCiAJCQlpZiAocmRlczAgJiAweDgwMDApIHsKIAkJCQkvKiBUaGlzIGlzIGEgZXJyb3IgcGFja2V0ICovCi0JCQkJLy9wcmludGsoRFJWX05BTUUgIjogcmRlczA6ICVseFxuIiwgcmRlczApOwogCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJaWYgKHJkZXMwICYgMSkKIAkJCQkJZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwpAQCAtOTQ1LDEyICs5MzIsMTIgQEAKIAogCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKIAotCWVjbWQtPnNwZWVkID0gMTA7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIFNQRUVEXzEwKTsKIAllY21kLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKIAogCWlmKGRiLT5vcF9tb2RlPT1VTEk1MjZYXzEwME1IRiB8fCBkYi0+b3BfbW9kZT09VUxJNTI2WF8xMDBNRkQpCiAJewotCQllY21kLT5zcGVlZCA9IDEwMDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIFNQRUVEXzEwMCk7CiAJfQogCWlmKGRiLT5vcF9tb2RlPT1VTEk1MjZYXzEwTUZEIHx8IGRiLT5vcF9tb2RlPT1VTEk1MjZYXzEwME1GRCkKIAl7CkBAIC05NTgsNyArOTQ1LDcgQEAKIAl9CiAJaWYoZGItPmxpbmtfZmFpbGVkKQogCXsKLQkJZWNtZC0+c3BlZWQgPSAtMTsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGVjbWQsIC0xKTsKIAkJZWNtZC0+ZHVwbGV4ID0gLTE7CiAJfQogCkBAIC0xMDI0LDcgKzEwMTEsNiBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGF0YTsKIAlzdHJ1Y3QgdWxpNTI2eF9ib2FyZF9pbmZvICpkYiA9IG5ldGRldl9wcml2KGRldik7CiAgCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTggVG1wU3BlZWQ9MTA7CiAKIAkvL1VMSTUyNlhfREJVRygwLCAidWxpNTI2eF90aW1lcigpIiwgMCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRiLT5sb2NrLCBmbGFncyk7CkBAIC0xMDQ3LDggKzEwMzMsNyBAQAogCQlpZiAoIHRpbWVfYWZ0ZXIoamlmZmllcywgZGV2X3RyYW5zX3N0YXJ0KGRldikgKyBVTEk1MjZYX1RYX1RJTUVPVVQpICkgewogCQkJZGItPnJlc2V0X1RYdGltZW91dCsrOwogCQkJZGItPndhaXRfcmVzZXQgPSAxOwotCQkJcHJpbnRrKCAiJXM6IFR4IHRpbWVvdXQgLSByZXNldHRpbmdcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9lcnIoZGV2LCAiIFR4IHRpbWVvdXQgLSByZXNldHRpbmdcbiIpOwogCQl9CiAJfQogCkBAIC0xMDcwLDcgKzEwNTUsNyBAQAogCQkvKiBMaW5rIEZhaWxlZCAqLwogCQlVTEk1MjZYX0RCVUcoMCwgIkxpbmsgRmFpbGVkIiwgdG1wX2NyMTIpOwogCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCQlwcl9pbmZvKCIlcyBOSUMgTGluayBpcyBEb3duXG4iLGRldi0+bmFtZSk7CisJCW5ldGRldl9pbmZvKGRldiwgIk5JQyBMaW5rIGlzIERvd25cbiIpOwogCQlkYi0+bGlua19mYWlsZWQgPSAxOwogCiAJCS8qIEZvciBGb3JjZSAxMC8xMDBNIEhhbGYvRnVsbCBtb2RlOiBFbmFibGUgQXV0by1OZWdvIG1vZGUgKi8KQEAgLTEwOTYsMTggKzEwODEsMTMgQEAKIAogCQkJaWYoZGItPmxpbmtfZmFpbGVkPT0wKQogCQkJewotCQkJCWlmKGRiLT5vcF9tb2RlPT1VTEk1MjZYXzEwME1IRiB8fCBkYi0+b3BfbW9kZT09VUxJNTI2WF8xMDBNRkQpCi0JCQkJewotCQkJCQlUbXBTcGVlZCA9IDEwMDsKLQkJCQl9Ci0JCQkJaWYoZGItPm9wX21vZGU9PVVMSTUyNlhfMTBNRkQgfHwgZGItPm9wX21vZGU9PVVMSTUyNlhfMTAwTUZEKQotCQkJCXsKLQkJCQkJcHJfaW5mbygiJXMgTklDIExpbmsgaXMgVXAgJWQgTWJwcyBGdWxsIGR1cGxleFxuIixkZXYtPm5hbWUsVG1wU3BlZWQpOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJCQlwcl9pbmZvKCIlcyBOSUMgTGluayBpcyBVcCAlZCBNYnBzIEhhbGYgZHVwbGV4XG4iLGRldi0+bmFtZSxUbXBTcGVlZCk7Ci0JCQkJfQorCQkJCW5ldGRldl9pbmZvKGRldiwgIk5JQyBMaW5rIGlzIFVwICVkIE1icHMgJXMgZHVwbGV4XG4iLAorCQkJCQkgICAgKGRiLT5vcF9tb2RlID09IFVMSTUyNlhfMTAwTUhGIHx8CisJCQkJCSAgICAgZGItPm9wX21vZGUgPT0gVUxJNTI2WF8xMDBNRkQpCisJCQkJCSAgICA/IDEwMCA6IDEwLAorCQkJCQkgICAgKGRiLT5vcF9tb2RlID09IFVMSTUyNlhfMTBNRkQgfHwKKwkJCQkJICAgICBkYi0+b3BfbW9kZSA9PSBVTEk1MjZYXzEwME1GRCkKKwkJCQkJICAgID8gIkZ1bGwiIDogIkhhbGYiKTsKIAkJCQluZXRpZl9jYXJyaWVyX29uKGRldik7CiAJCQl9CiAJCQkvKiBTSE9XX01FRElBX1RZUEUoZGItPm9wX21vZGUpOyAqLwpAQCAtMTExNiw3ICsxMDk2LDcgQEAKIAkJewogCQkJaWYoZGItPmluaXQ9PTEpCiAJCQl7Ci0JCQkJcHJfaW5mbygiJXMgTklDIExpbmsgaXMgRG93blxuIixkZXYtPm5hbWUpOworCQkJCW5ldGRldl9pbmZvKGRldiwgIk5JQyBMaW5rIGlzIERvd25cbiIpOwogCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAJCQl9CiAJCX0KQEAgLTEyNDIsNyArMTIyMiw3IEBACiAKIAllcnIgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJaWYgKGVycikgewotCQlkZXZfd2FybigmZGV2LT5kZXYsICJDb3VsZCBub3QgcHV0IGRldmljZSBpbnRvIEQwXG4iKTsKKwkJbmV0ZGV2X3dhcm4oZGV2LCAiQ291bGQgbm90IHB1dCBkZXZpY2UgaW50byBEMFxuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC0xNDQzLDcgKzE0MjMsNyBAQAogCQl1cGRhdGVfY3I2KGRiLT5jcjZfZGF0YSwgZGV2LT5iYXNlX2FkZHIpOwogCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAl9IGVsc2UKLQkJcHJfZXJyKCJObyBUeCByZXNvdXJjZSAtIFNlbmRfZmlsdGVyX2ZyYW1lIVxuIik7CisJCW5ldGRldl9lcnIoZGV2LCAiTm8gVHggcmVzb3VyY2UgLSBTZW5kX2ZpbHRlcl9mcmFtZSFcbiIpOwogfQogCiAKQEAgLTE1NDAsNyArMTUyMCw2IEBACiAJCWVsc2UKIAkJCXBoeV9tb2RlID0gMHgxMDAwOwogCi0JCS8qIHByaW50ayhEUlZfTkFNRSAiOiBQaHlfbW9kZSAleCAiLHBoeV9tb2RlKTsgKi8KIAkJc3dpdGNoIChwaHlfbW9kZSkgewogCQljYXNlIDB4MTAwMDogZGItPm9wX21vZGUgPSBVTEk1MjZYXzEwTUhGOyBicmVhazsKIAkJY2FzZSAweDIwMDA6IGRiLT5vcF9tb2RlID0gVUxJNTI2WF8xME1GRDsgYnJlYWs7CkBAIC0xODI5LDcgKzE4MDgsNyBAQAogc3RhdGljIGludCBfX2luaXQgdWxpNTI2eF9pbml0X21vZHVsZSh2b2lkKQogewogCi0JcHJpbnRrKHZlcnNpb24pOworCXByX2luZm8oIiVzXG4iLCB2ZXJzaW9uKTsKIAlwcmludGVkX3ZlcnNpb24gPSAxOwogCiAJVUxJNTI2WF9EQlVHKDAsICJpbml0X21vZHVsZSgpICIsIGRlYnVnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMgYi9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jCmluZGV4IGYwYjIzMTAuLjg2MmVhZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYwpAQCAtNDQsNiArNDQsOCBAQAogCSogV2FrZS1Pbi1MQU4KICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2RlZmluZSBEUlZfTkFNRQkid2luYm9uZC04NDAiCiAjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjAxLWUiCiAjZGVmaW5lIERSVl9SRUxEQVRFCSJTZXAtMTEtMjAwNiIKQEAgLTEzOSw3ICsxNDEsNyBAQAogCiAvKiBUaGVzZSBpZGVudGlmeSB0aGUgZHJpdmVyIGJhc2UgdmVyc2lvbiBhbmQgbWF5IG5vdCBiZSByZW1vdmVkLiAqLwogc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9faW5pdGNvbnN0ID0KLQlLRVJOX0lORk8gRFJWX05BTUUgIi5jOnYiIERSVl9WRVJTSU9OICIgKDIuNCBwb3J0KSAiCisJInYiIERSVl9WRVJTSU9OICIgKDIuNCBwb3J0KSAiCiAJRFJWX1JFTERBVEUgIiAgRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT5cbiIKIAkiICBodHRwOi8vd3d3LnNjeWxkLmNvbS9uZXR3b3JrL2RyaXZlcnMuaHRtbFxuIjsKIApAQCAtMzc1LDggKzM3Nyw4IEBACiAJaXJxID0gcGRldi0+aXJxOwogCiAJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpIHsKLQkJcHJfd2FybmluZygiV2luYm9uZC04NDA6IERldmljZSAlcyBkaXNhYmxlZCBkdWUgdG8gRE1BIGxpbWl0YXRpb25zXG4iLAotCQkJICAgcGNpX25hbWUocGRldikpOworCQlwcl93YXJuKCJEZXZpY2UgJXMgZGlzYWJsZWQgZHVlIHRvIERNQSBsaW1pdGF0aW9uc1xuIiwKKwkJCXBjaV9uYW1lKHBkZXYpKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZigqbnApKTsKQEAgLTY0Myw4ICs2NDUsNyBAQAogCQlnb3RvIG91dF9lcnI7CiAKIAlpZiAoZGVidWcgPiAxKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHc4OWM4NDBfb3BlbigpIGlycSAlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZGV2LT5pcnEpOworCQluZXRkZXZfZGJnKGRldiwgInc4OWM4NDBfb3BlbigpIGlycSAlZFxuIiwgZGV2LT5pcnEpOwogCiAJaWYoKGk9YWxsb2NfcmluZ2Rlc2MoZGV2KSkpCiAJCWdvdG8gb3V0X2VycjsKQEAgLTY1Niw3ICs2NTcsNyBAQAogCiAJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAlpZiAoZGVidWcgPiAyKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IERvbmUgbmV0ZGV2X29wZW4oKVxuIiwgZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2RiZyhkZXYsICJEb25lIG5ldGRldl9vcGVuKClcbiIpOwogCiAJLyogU2V0IHRoZSB0aW1lciB0byBjaGVjayBmb3IgbGluayBiZWF0LiAqLwogCWluaXRfdGltZXIoJm5wLT50aW1lcik7CkBAIC03ODUsOSArNzg2LDkgQEAKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IG5wLT5iYXNlX2FkZHI7CiAKIAlpZiAoZGVidWcgPiAyKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE1lZGlhIHNlbGVjdGlvbiB0aW1lciB0aWNrLCBzdGF0dXMgJTA4eCBjb25maWcgJTA4eFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgaW9yZWFkMzIoaW9hZGRyICsgSW50clN0YXR1cyksCi0JCSAgICAgICBpb3JlYWQzMihpb2FkZHIgKyBOZXR3b3JrQ29uZmlnKSk7CisJCW5ldGRldl9kYmcoZGV2LCAiTWVkaWEgc2VsZWN0aW9uIHRpbWVyIHRpY2ssIHN0YXR1cyAlMDh4IGNvbmZpZyAlMDh4XG4iLAorCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgSW50clN0YXR1cyksCisJCQkgICBpb3JlYWQzMihpb2FkZHIgKyBOZXR3b3JrQ29uZmlnKSk7CiAJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOwogCXVwZGF0ZV9jc3I2KGRldiwgdXBkYXRlX2xpbmsoZGV2KSk7CiAJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CkBAIC0xMDU0LDggKzEwNTUsOCBAQAogCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogCiAJaWYgKGRlYnVnID4gNCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRyYW5zbWl0IGZyYW1lICMlZCBxdWV1ZWQgaW4gc2xvdCAlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgbnAtPmN1cl90eCwgZW50cnkpOworCQluZXRkZXZfZGJnKGRldiwgIlRyYW5zbWl0IGZyYW1lICMlZCBxdWV1ZWQgaW4gc2xvdCAlZFxuIiwKKwkJCSAgIG5wLT5jdXJfdHgsIGVudHJ5KTsKIAl9CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KQEAgLTEwNzIsOCArMTA3Myw4IEBACiAJCWlmICh0eF9zdGF0dXMgJiAweDgwMDApIHsgCS8qIFRoZXJlIHdhcyBhbiBlcnJvciwgbG9nIGl0LiAqLwogI2lmbmRlZiBmaW5hbF92ZXJzaW9uCiAJCQlpZiAoZGVidWcgPiAxKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVHJhbnNtaXQgZXJyb3IsIFR4IHN0YXR1cyAlMDh4XG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIHR4X3N0YXR1cyk7CisJCQkJbmV0ZGV2X2RiZyhkZXYsICJUcmFuc21pdCBlcnJvciwgVHggc3RhdHVzICUwOHhcbiIsCisJCQkJCSAgIHR4X3N0YXR1cyk7CiAjZW5kaWYKIAkJCW5wLT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCWlmICh0eF9zdGF0dXMgJiAweDAxMDQpIG5wLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwpAQCAtMTA4NSw4ICsxMDg2LDggQEAKIAkJfSBlbHNlIHsKICNpZm5kZWYgZmluYWxfdmVyc2lvbgogCQkJaWYgKGRlYnVnID4gMykKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRyYW5zbWl0IHNsb3QgJWQgb2ssIFR4IHN0YXR1cyAlMDh4XG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIGVudHJ5LCB0eF9zdGF0dXMpOworCQkJCW5ldGRldl9kYmcoZGV2LCAiVHJhbnNtaXQgc2xvdCAlZCBvaywgVHggc3RhdHVzICUwOHhcbiIsCisJCQkJCSAgIGVudHJ5LCB0eF9zdGF0dXMpOwogI2VuZGlmCiAJCQlucC0+c3RhdHMudHhfYnl0ZXMgKz0gbnAtPnR4X3NrYnVmZltlbnRyeV0tPmxlbjsKIAkJCW5wLT5zdGF0cy5jb2xsaXNpb25zICs9ICh0eF9zdGF0dXMgPj4gMykgJiAxNTsKQEAgLTExMjksOCArMTEzMCw3IEBACiAJCWlvd3JpdGUzMihpbnRyX3N0YXR1cyAmIDB4MDAxZmZmZiwgaW9hZGRyICsgSW50clN0YXR1cyk7CiAKIAkJaWYgKGRlYnVnID4gNCkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogSW50ZXJydXB0LCBzdGF0dXMgJTA0eFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGludHJfc3RhdHVzKTsKKwkJCW5ldGRldl9kYmcoZGV2LCAiSW50ZXJydXB0LCBzdGF0dXMgJTA0eFxuIiwgaW50cl9zdGF0dXMpOwogCiAJCWlmICgoaW50cl9zdGF0dXMgJiAoTm9ybWFsSW50cnxBYm5vcm1hbEludHIpKSA9PSAwKQogCQkJYnJlYWs7CkBAIC0xMTcxLDggKzExNzEsOCBAQAogCX0gd2hpbGUgKDEpOwogCiAJaWYgKGRlYnVnID4gMykKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBleGl0aW5nIGludGVycnVwdCwgc3RhdHVzPSUjNC40eFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgaW9yZWFkMzIoaW9hZGRyICsgSW50clN0YXR1cykpOworCQluZXRkZXZfZGJnKGRldiwgImV4aXRpbmcgaW50ZXJydXB0LCBzdGF0dXM9JSM0LjR4XG4iLAorCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgSW50clN0YXR1cykpOwogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogfQogCkBAIC0xMTg1LDggKzExODUsOCBAQAogCWludCB3b3JrX2xpbWl0ID0gbnAtPmRpcnR5X3J4ICsgUlhfUklOR19TSVpFIC0gbnAtPmN1cl9yeDsKIAogCWlmIChkZWJ1ZyA+IDQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiBJbiBuZXRkZXZfcngoKSwgZW50cnkgJWQgc3RhdHVzICUwNHhcbiIsCi0JCSAgICAgICBlbnRyeSwgbnAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyk7CisJCW5ldGRldl9kYmcoZGV2LCAiIEluIG5ldGRldl9yeCgpLCBlbnRyeSAlZCBzdGF0dXMgJTA0eFxuIiwKKwkJCSAgIGVudHJ5LCBucC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzKTsKIAl9CiAKIAkvKiBJZiBFT1AgaXMgc2V0IG9uIHRoZSBuZXh0IGVudHJ5LCBpdCdzIGEgbmV3IHBhY2tldC4gU2VuZCBpdCB1cC4gKi8KQEAgLTExOTUsOCArMTE5NSw4IEBACiAJCXMzMiBzdGF0dXMgPSBkZXNjLT5zdGF0dXM7CiAKIAkJaWYgKGRlYnVnID4gNCkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIgIG5ldGRldl9yeCgpIHN0YXR1cyB3YXMgJTA4eFxuIiwKLQkJCSAgICAgICBzdGF0dXMpOworCQkJbmV0ZGV2X2RiZyhkZXYsICIgIG5ldGRldl9yeCgpIHN0YXR1cyB3YXMgJTA4eFxuIiwKKwkJCQkgICBzdGF0dXMpOwogCQlpZiAoc3RhdHVzIDwgMCkKIAkJCWJyZWFrOwogCQlpZiAoKHN0YXR1cyAmIDB4MzgwMDgzMDApICE9IDB4MDMwMCkgewpAQCAtMTIxMSw4ICsxMjExLDggQEAKIAkJCX0gZWxzZSBpZiAoc3RhdHVzICYgMHg4MDAwKSB7CiAJCQkJLyogVGhlcmUgd2FzIGEgZmF0YWwgZXJyb3IuICovCiAJCQkJaWYgKGRlYnVnID4gMikKLQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZWNlaXZlIGVycm9yLCBSeCBzdGF0dXMgJTA4eFxuIiwKLQkJCQkJICAgICAgIGRldi0+bmFtZSwgc3RhdHVzKTsKKwkJCQkJbmV0ZGV2X2RiZyhkZXYsICJSZWNlaXZlIGVycm9yLCBSeCBzdGF0dXMgJTA4eFxuIiwKKwkJCQkJCSAgIHN0YXR1cyk7CiAJCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOyAvKiBlbmQgb2YgYSBwYWNrZXQuKi8KIAkJCQlpZiAoc3RhdHVzICYgMHgwODkwKSBucC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQkJCWlmIChzdGF0dXMgJiAweDAwNEMpIG5wLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKQEAgLTEyMjUsOCArMTIyNSw4IEBACiAKICNpZm5kZWYgZmluYWxfdmVyc2lvbgogCQkJaWYgKGRlYnVnID4gNCkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiICBuZXRkZXZfcngoKSBub3JtYWwgUnggcGt0IGxlbmd0aCAlZCBzdGF0dXMgJXhcbiIsCi0JCQkJICAgICAgIHBrdF9sZW4sIHN0YXR1cyk7CisJCQkJbmV0ZGV2X2RiZyhkZXYsICIgIG5ldGRldl9yeCgpIG5vcm1hbCBSeCBwa3QgbGVuZ3RoICVkIHN0YXR1cyAleFxuIiwKKwkJCQkJICAgcGt0X2xlbiwgc3RhdHVzKTsKICNlbmRpZgogCQkJLyogQ2hlY2sgaWYgdGhlIHBhY2tldCBpcyBsb25nIGVub3VnaCB0byBhY2NlcHQgd2l0aG91dCBjb3B5aW5nCiAJCQkgICB0byBhIG1pbmltYWxseS1zaXplZCBza2J1ZmYuICovCkBAIC0xMjUxLDEwICsxMjUxLDEwIEBACiAjaWZuZGVmIGZpbmFsX3ZlcnNpb24JCQkJLyogUmVtb3ZlIGFmdGVyIHRlc3RpbmcuICovCiAJCQkvKiBZb3Ugd2lsbCB3YW50IHRoaXMgaW5mbyBmb3IgdGhlIGluaXRpYWwgZGVidWcuICovCiAJCQlpZiAoZGVidWcgPiA1KQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIgIFJ4IGRhdGEgJXBNICVwTSAlMDJ4JTAyeCAlcEk0XG4iLAotCQkJCSAgICAgICAmc2tiLT5kYXRhWzBdLCAmc2tiLT5kYXRhWzZdLAotCQkJCSAgICAgICBza2ItPmRhdGFbMTJdLCBza2ItPmRhdGFbMTNdLAotCQkJCSAgICAgICAmc2tiLT5kYXRhWzE0XSk7CisJCQkJbmV0ZGV2X2RiZyhkZXYsICIgIFJ4IGRhdGEgJXBNICVwTSAlMDJ4JTAyeCAlcEk0XG4iLAorCQkJCQkgICAmc2tiLT5kYXRhWzBdLCAmc2tiLT5kYXRhWzZdLAorCQkJCQkgICBza2ItPmRhdGFbMTJdLCBza2ItPmRhdGFbMTNdLAorCQkJCQkgICAmc2tiLT5kYXRhWzE0XSk7CiAjZW5kaWYKIAkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAJCQluZXRpZl9yeChza2IpOwpAQCAtMTI5Miw4ICsxMjkyLDcgQEAKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IG5wLT5iYXNlX2FkZHI7CiAKIAlpZiAoZGVidWcgPiAyKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFibm9ybWFsIGV2ZW50LCAlMDh4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBpbnRyX3N0YXR1cyk7CisJCW5ldGRldl9kYmcoZGV2LCAiQWJub3JtYWwgZXZlbnQsICUwOHhcbiIsIGludHJfc3RhdHVzKTsKIAlpZiAoaW50cl9zdGF0dXMgPT0gMHhmZmZmZmZmZikKIAkJcmV0dXJuOwogCXNwaW5fbG9jaygmbnAtPmxvY2spOwpAQCAtMTMxMyw4ICsxMzEyLDcgQEAKIAkJIAluZXcgPSAxMjc7IC8qIGxvYWQgZnVsbCBwYWNrZXQgYmVmb3JlIHN0YXJ0aW5nICovCiAJCW5ldyA9IChucC0+Y3NyNiAmIH4oMHg3RiA8PCAxNCkpIHwgKG5ldzw8MTQpOwogI2VuZGlmCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogVHggdW5kZXJmbG93LCBuZXcgY3NyNiAlMDh4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBuZXcpOworCQluZXRkZXZfZGJnKGRldiwgIlR4IHVuZGVyZmxvdywgbmV3IGNzcjYgJTA4eFxuIiwgbmV3KTsKIAkJdXBkYXRlX2NzcjYoZGV2LCBuZXcpOwogCX0KIAlpZiAoaW50cl9zdGF0dXMgJiBSeERpZWQpIHsJCS8qIE1pc3NlZCBhIFJ4IGZyYW1lLiAqLwpAQCAtMTQ4NywxMyArMTQ4NSwxMiBAQAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAogCWlmIChkZWJ1ZyA+IDEpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTaHV0dGluZyBkb3duIGV0aGVyY2FyZCwgc3RhdHVzIHdhcyAlMDh4IENvbmZpZyAlMDh4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBpb3JlYWQzMihpb2FkZHIgKyBJbnRyU3RhdHVzKSwKLQkJICAgICAgIGlvcmVhZDMyKGlvYWRkciArIE5ldHdvcmtDb25maWcpKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBRdWV1ZSBwb2ludGVycyB3ZXJlIFR4ICVkIC8gJWQsICBSeCAlZCAvICVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLAotCQkgICAgICAgbnAtPmN1cl90eCwgbnAtPmRpcnR5X3R4LAotCQkgICAgICAgbnAtPmN1cl9yeCwgbnAtPmRpcnR5X3J4KTsKKwkJbmV0ZGV2X2RiZyhkZXYsICJTaHV0dGluZyBkb3duIGV0aGVyY2FyZCwgc3RhdHVzIHdhcyAlMDh4IENvbmZpZyAlMDh4XG4iLAorCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgSW50clN0YXR1cyksCisJCQkgICBpb3JlYWQzMihpb2FkZHIgKyBOZXR3b3JrQ29uZmlnKSk7CisJCW5ldGRldl9kYmcoZGV2LCAiUXVldWUgcG9pbnRlcnMgd2VyZSBUeCAlZCAvICVkLCAgUnggJWQgLyAlZFxuIiwKKwkJCSAgIG5wLT5jdXJfdHgsIG5wLT5kaXJ0eV90eCwKKwkJCSAgIG5wLT5jdXJfcngsIG5wLT5kaXJ0eV9yeCk7CiAJfQogCiAgCS8qIFN0b3AgdGhlIGNoaXAncyBUeCBhbmQgUnggcHJvY2Vzc2VzLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAveGlyY29tX2NiLmMgYi9kcml2ZXJzL25ldC90dWxpcC94aXJjb21fY2IuYwppbmRleCA1YTczNzUyLi45ODhiOGViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC94aXJjb21fY2IuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC94aXJjb21fY2IuYwpAQCAtMzcsMTUgKzM3LDYgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjZW5kaWYKIAotI2lmZGVmIERFQlVHCi0jZGVmaW5lIGVudGVyKHgpICAgcHJpbnRrKCJFbnRlcjogJXMsICVzIGxpbmUgJWlcbiIseCxfX0ZJTEVfXyxfX0xJTkVfXykKLSNkZWZpbmUgbGVhdmUoeCkgICBwcmludGsoIkxlYXZlOiAlcywgJXMgbGluZSAlaVxuIix4LF9fRklMRV9fLF9fTElORV9fKQotI2Vsc2UKLSNkZWZpbmUgZW50ZXIoeCkgICBkbyB7fSB3aGlsZSAoMCkKLSNkZWZpbmUgbGVhdmUoeCkgICBkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgotCi0KIE1PRFVMRV9ERVNDUklQVElPTigiWGlyY29tIENhcmRidXMgZXRoZXJuZXQgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJBcmphbiB2YW4gZGUgVmVuIDxhcmphbnZAcmVkaGF0LmNvbT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKQEAgLTE2MSw3ICsxNTIsNyBAQAogfTsKIAogCi0jaWZkZWYgREVCVUcKKyNpZiBkZWZpbmVkIERFQlVHICYmIERFQlVHID4gMQogc3RhdGljIHZvaWQgcHJpbnRfYmluYXJ5KHVuc2lnbmVkIGludCBudW1iZXIpCiB7CiAJaW50IGksaTI7CkBAIC0xNzYsNyArMTY3LDcgQEAKIAkJaWYgKChpJjMpPT0wKQogCQkJYnVmZmVyW2kyKytdPScgJzsKIAl9Ci0JcHJpbnRrKCIlc1xuIixidWZmZXIpOworCXByX2RlYnVnKCIlc1xuIixidWZmZXIpOwogfQogI2VuZGlmCiAKQEAgLTIwNSw3ICsxOTYsNiBAQAogCXN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqcHJpdmF0ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIHNob3J0IHRtcDE2OwotCWVudGVyKCJ4aXJjb21fcHJvYmUiKTsKIAogCS8qIEZpcnN0IGRvIHRoZSBQQ0kgaW5pdGlhbGlzYXRpb24gKi8KIApAQCAtMjcyLDggKzI2Miw4IEBACiAJCWdvdG8gcmVnX2ZhaWw7CiAJfQogCi0JZGV2X2luZm8oJmRldi0+ZGV2LCAiWGlyY29tIGNhcmRidXMgcmV2aXNpb24gJWkgYXQgaXJxICVpXG4iLAotCQkgcGRldi0+cmV2aXNpb24sIHBkZXYtPmlycSk7CisJbmV0ZGV2X2luZm8oZGV2LCAiWGlyY29tIGNhcmRidXMgcmV2aXNpb24gJWkgYXQgaXJxICVpXG4iLAorCQkgICAgcGRldi0+cmV2aXNpb24sIHBkZXYtPmlycSk7CiAJLyogc3RhcnQgdGhlIHRyYW5zbWl0dGVyIHRvIGdldCBhIGhlYXJ0YmVhdCAqLwogCS8qIFRPRE86IHNlbmQgMiBkdW1teSBwYWNrZXRzIGhlcmUgKi8KIAl0cmFuc2NlaXZlcl92b29kb28ocHJpdmF0ZSk7CkBAIC0yODUsNyArMjc1LDYgQEAKIAogCXRyaWdnZXJfcmVjZWl2ZShwcml2YXRlKTsKIAotCWxlYXZlKCJ4aXJjb21fcHJvYmUiKTsKIAlyZXR1cm4gMDsKIAogcmVnX2ZhaWw6CkBAIC0zMTAsNyArMjk5LDYgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqY2FyZCA9IG5ldGRldl9wcml2KGRldik7CiAKLQllbnRlcigieGlyY29tX3JlbW92ZSIpOwogCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiw4MTkyLGNhcmQtPnJ4X2J1ZmZlcixjYXJkLT5yeF9kbWFfaGFuZGxlKTsKIAlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsODE5MixjYXJkLT50eF9idWZmZXIsY2FyZC0+dHhfZG1hX2hhbmRsZSk7CiAKQEAgLTMxOCw3ICszMDYsNiBAQAogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJZnJlZV9uZXRkZXYoZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0JbGVhdmUoInhpcmNvbV9yZW1vdmUiKTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IHhpcmNvbV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQpAQCAtMzI4LDE3ICszMTUsMTUgQEAKIAl1bnNpZ25lZCBpbnQgc3RhdHVzOwogCWludCBpOwogCi0JZW50ZXIoInhpcmNvbV9pbnRlcnJ1cHRcbiIpOwotCiAJc3Bpbl9sb2NrKCZjYXJkLT5sb2NrKTsKIAlzdGF0dXMgPSBpbmwoY2FyZC0+aW9fcG9ydCtDU1I1KTsKIAotI2lmZGVmIERFQlVHCisjaWYgZGVmaW5lZCBERUJVRyAmJiBERUJVRyA+IDEKIAlwcmludF9iaW5hcnkoc3RhdHVzKTsKLQlwcmludGsoInR4IHN0YXR1cyAweCUwOHggMHglMDh4XG4iLAotCSAgICAgICBjYXJkLT50eF9idWZmZXJbMF0sIGNhcmQtPnR4X2J1ZmZlcls0XSk7Ci0JcHJpbnRrKCJyeCBzdGF0dXMgMHglMDh4IDB4JTA4eFxuIiwKLQkgICAgICAgY2FyZC0+cnhfYnVmZmVyWzBdLCBjYXJkLT5yeF9idWZmZXJbNF0pOworCXByX2RlYnVnKCJ0eCBzdGF0dXMgMHglMDh4IDB4JTA4eFxuIiwKKwkJIGNhcmQtPnR4X2J1ZmZlclswXSwgY2FyZC0+dHhfYnVmZmVyWzRdKTsKKwlwcl9kZWJ1Zygicnggc3RhdHVzIDB4JTA4eCAweCUwOHhcbiIsCisJCSBjYXJkLT5yeF9idWZmZXJbMF0sIGNhcmQtPnJ4X2J1ZmZlcls0XSk7CiAjZW5kaWYKIAkvKiBIYW5kbGUgc2hhcmVkIGlycSBhbmQgaG90cGx1ZyAqLwogCWlmIChzdGF0dXMgPT0gMCB8fCBzdGF0dXMgPT0gMHhmZmZmZmZmZikgewpAQCAtMzQ4LDkgKzMzMyw5IEBACiAKIAlpZiAobGlua19zdGF0dXNfY2hhbmdlZChjYXJkKSkgewogCQlpbnQgbmV3bGluazsKLQkJcHJpbnRrKEtFUk5fREVCVUcgInhpcmNvbV9jYjogTGluayBzdGF0dXMgaGFzIGNoYW5nZWRcbiIpOworCQluZXRkZXZfZGJnKGRldiwgIkxpbmsgc3RhdHVzIGhhcyBjaGFuZ2VkXG4iKTsKIAkJbmV3bGluayA9IGxpbmtfc3RhdHVzKGNhcmQpOwotCQlkZXZfaW5mbygmZGV2LT5kZXYsICJMaW5rIGlzICVpIG1iaXRcbiIsIG5ld2xpbmspOworCQluZXRkZXZfaW5mbyhkZXYsICJMaW5rIGlzICVkIG1iaXRcbiIsIG5ld2xpbmspOwogCQlpZiAobmV3bGluaykKIAkJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKIAkJZWxzZQpAQCAtMzY5LDkgKzM1NCw3IEBACiAJZm9yIChpPTA7aTxOVU1ERVNDUklQVE9SUztpKyspCiAJCWludmVzdGlnYXRlX3JlYWRfZGVzY3JpcHRvcihkZXYsY2FyZCxpLGJ1ZmZlcm9mZnNldHNbaV0pOwogCi0KIAlzcGluX3VubG9jaygmY2FyZC0+bG9jayk7Ci0JbGVhdmUoInhpcmNvbV9pbnRlcnJ1cHQiKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTM4Miw3ICszNjUsNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IG5leHRkZXNjcmlwdG9yOwogCWludCBkZXNjOwotCWVudGVyKCJ4aXJjb21fc3RhcnRfeG1pdCIpOwogCiAJY2FyZCA9IG5ldGRldl9wcml2KGRldik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssZmxhZ3MpOwpAQCAtNDI0LDEzICs0MDYsMTAgQEAKIAkJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCQl9CiAJCQljYXJkLT50cmFuc21pdF91c2VkID0gbmV4dGRlc2NyaXB0b3I7Ci0JCQlsZWF2ZSgieGlyY29tLXN0YXJ0X3htaXQgLSBzZW50Iik7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLGZsYWdzKTsKIAkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCi0KLQogCS8qIFVoIG9oLi4uIG5vIGZyZWUgZGVzY3JpcHRvci4uLiBkcm9wIHRoZSBwYWNrZXQgKi8KIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jayxmbGFncyk7CkBAIC00NDYsMTggKzQyNSwxNiBAQAogewogCXN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqeHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCByZXR2YWw7Ci0JZW50ZXIoInhpcmNvbV9vcGVuIik7Ci0JcHJfaW5mbygieGlyY29tIGNhcmRidXMgYWRhcHRvciBmb3VuZCwgcmVnaXN0ZXJpbmcgYXMgJXMsIHVzaW5nIGlycSAlaVxuIiwKLQkJZGV2LT5uYW1lLCBkZXYtPmlycSk7CisKKwluZXRkZXZfaW5mbyhkZXYsICJ4aXJjb20gY2FyZGJ1cyBhZGFwdG9yIGZvdW5kLCB1c2luZyBpcnEgJWlcbiIsCisJCSAgICBkZXYtPmlycSk7CiAJcmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHhpcmNvbV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldik7Ci0JaWYgKHJldHZhbCkgewotCQlsZWF2ZSgieGlyY29tX29wZW4gLSBObyBJUlEiKTsKKwlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwotCX0KIAogCXhpcmNvbV91cCh4cCk7CiAJeHAtPm9wZW4gPSAxOwotCWxlYXZlKCJ4aXJjb21fb3BlbiIpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ2Niw3ICs0NDMsNiBAQAogCXN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqY2FyZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZW50ZXIoInhpcmNvbV9jbG9zZSIpOwogCWNhcmQgPSBuZXRkZXZfcHJpdihkZXYpOwogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsgLyogd2UgZG9uJ3Qgd2FudCBuZXcgcGFja2V0cyAqLwogCkBAIC00ODYsOCArNDYyLDYgQEAKIAljYXJkLT5vcGVuID0gMDsKIAlmcmVlX2lycShkZXYtPmlycSxkZXYpOwogCi0JbGVhdmUoInhpcmNvbV9jbG9zZSIpOwotCiAJcmV0dXJuIDA7CiAKIH0KQEAgLTUwNyw4ICs0ODEsNiBAQAogewogCXVuc2lnbmVkIGludCB2YWw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQllbnRlcigiaW5pdGlhbGl6ZV9jYXJkIik7Ci0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAKQEAgLTUzNCw4ICs1MDYsNiBAQAogCWRlYWN0aXZhdGVfdHJhbnNtaXR0ZXIoY2FyZCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7Ci0KLQlsZWF2ZSgiaW5pdGlhbGl6ZV9jYXJkIik7CiB9CiAKIC8qCkBAIC01NDcsMTIgKzUxNyw5IEBACiBzdGF0aWMgdm9pZCB0cmlnZ2VyX3RyYW5zbWl0KHN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqY2FyZCkKIHsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCWVudGVyKCJ0cmlnZ2VyX3RyYW5zbWl0Iik7CiAKIAl2YWwgPSAwOwogCW91dGwodmFsLCBjYXJkLT5pb19wb3J0ICsgQ1NSMSk7Ci0KLQlsZWF2ZSgidHJpZ2dlcl90cmFuc21pdCIpOwogfQogCiAvKgpAQCAtNTY1LDEyICs1MzIsOSBAQAogc3RhdGljIHZvaWQgdHJpZ2dlcl9yZWNlaXZlKHN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqY2FyZCkKIHsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCWVudGVyKCJ0cmlnZ2VyX3JlY2VpdmUiKTsKIAogCXZhbCA9IDA7CiAJb3V0bCh2YWwsIGNhcmQtPmlvX3BvcnQgKyBDU1IyKTsKLQotCWxlYXZlKCJ0cmlnZ2VyX3JlY2VpdmUiKTsKIH0KIAogLyoKQEAgLTU4MSw4ICs1NDUsNiBAQAogewogCXUzMiBhZGRyZXNzOwogCWludCBpOwotCWVudGVyKCJzZXR1cF9kZXNjcmlwdG9ycyIpOwotCiAKIAlCVUdfT04oY2FyZC0+cnhfYnVmZmVyID09IE5VTEwpOwogCUJVR19PTihjYXJkLT50eF9idWZmZXIgPT0gTlVMTCk7CkBAIC02MzYsOCArNTk4LDYgQEAKIAkvKiB3aXRlIHRoZSB0cmFuc21pdCBkZXNjcmlwdG9yIHJpbmcgdG8gdGhlIGNhcmQgKi8KIAlhZGRyZXNzID0gY2FyZC0+dHhfZG1hX2hhbmRsZTsKIAlvdXRsKGFkZHJlc3MsIGNhcmQtPmlvX3BvcnQgKyBDU1I0KTsJLyogeG1pdCBkZXNjciBsaXN0IGFkZHJlc3MgKi8KLQotCWxlYXZlKCJzZXR1cF9kZXNjcmlwdG9ycyIpOwogfQogCiAvKgpAQCAtNjQ3LDEzICs2MDcsMTAgQEAKIHN0YXRpYyB2b2lkIHJlbW92ZV9kZXNjcmlwdG9ycyhzdHJ1Y3QgeGlyY29tX3ByaXZhdGUgKmNhcmQpCiB7CiAJdW5zaWduZWQgaW50IHZhbDsKLQllbnRlcigicmVtb3ZlX2Rlc2NyaXB0b3JzIik7CiAKIAl2YWwgPSAwOwogCW91dGwodmFsLCBjYXJkLT5pb19wb3J0ICsgQ1NSMyk7CS8qIFJlY2VpdmUgZGVzY3JpcHRvciBhZGRyZXNzICovCiAJb3V0bCh2YWwsIGNhcmQtPmlvX3BvcnQgKyBDU1I0KTsJLyogU2VuZCBkZXNjcmlwdG9yIGFkZHJlc3MgKi8KLQotCWxlYXZlKCJyZW1vdmVfZGVzY3JpcHRvcnMiKTsKIH0KIAogLyoKQEAgLTY2NSwyMSArNjIyLDE3IEBACiBzdGF0aWMgaW50IGxpbmtfc3RhdHVzX2NoYW5nZWQoc3RydWN0IHhpcmNvbV9wcml2YXRlICpjYXJkKQogewogCXVuc2lnbmVkIGludCB2YWw7Ci0JZW50ZXIoImxpbmtfc3RhdHVzX2NoYW5nZWQiKTsKIAogCXZhbCA9IGlubChjYXJkLT5pb19wb3J0ICsgQ1NSNSk7CS8qIFN0YXR1cyByZWdpc3RlciAqLwogCi0JaWYgKCh2YWwgJiAoMSA8PCAyNykpID09IDApIHsJLyogbm8gY2hhbmdlICovCi0JCWxlYXZlKCJsaW5rX3N0YXR1c19jaGFuZ2VkIC0gbm9jaGFuZ2UiKTsKKwlpZiAoKHZhbCAmICgxIDw8IDI3KSkgPT0gMCkJCS8qIG5vIGNoYW5nZSAqLwogCQlyZXR1cm4gMDsKLQl9CiAKIAkvKiBjbGVhciB0aGUgZXZlbnQgYnkgd3JpdGluZyBhIDEgdG8gdGhlIGJpdCBpbiB0aGUKIAkgICBzdGF0dXMgcmVnaXN0ZXIuICovCiAJdmFsID0gKDEgPDwgMjcpOwogCW91dGwodmFsLCBjYXJkLT5pb19wb3J0ICsgQ1NSNSk7CiAKLQlsZWF2ZSgibGlua19zdGF0dXNfY2hhbmdlZCAtIGNoYW5nZWQiKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtNjkxLDE2ICs2NDQsMTIgQEAKIHN0YXRpYyBpbnQgdHJhbnNtaXRfYWN0aXZlKHN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqY2FyZCkKIHsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCWVudGVyKCJ0cmFuc21pdF9hY3RpdmUiKTsKIAogCXZhbCA9IGlubChjYXJkLT5pb19wb3J0ICsgQ1NSNSk7CS8qIFN0YXR1cyByZWdpc3RlciAqLwogCi0JaWYgKCh2YWwgJiAoNyA8PCAyMCkpID09IDApIHsJLyogdHJhbnNtaXR0ZXIgZGlzYWJsZWQgKi8KLQkJbGVhdmUoInRyYW5zbWl0X2FjdGl2ZSAtIGluYWN0aXZlIik7CisJaWYgKCh2YWwgJiAoNyA8PCAyMCkpID09IDApCQkvKiB0cmFuc21pdHRlciBkaXNhYmxlZCAqLwogCQlyZXR1cm4gMDsKLQl9CiAKLQlsZWF2ZSgidHJhbnNtaXRfYWN0aXZlIC0gYWN0aXZlIik7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTcxMSwxNyArNjYwLDEyIEBACiBzdGF0aWMgaW50IHJlY2VpdmVfYWN0aXZlKHN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqY2FyZCkKIHsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCWVudGVyKCJyZWNlaXZlX2FjdGl2ZSIpOwotCiAKIAl2YWwgPSBpbmwoY2FyZC0+aW9fcG9ydCArIENTUjUpOwkvKiBTdGF0dXMgcmVnaXN0ZXIgKi8KIAotCWlmICgodmFsICYgKDcgPDwgMTcpKSA9PSAwKSB7CS8qIHJlY2VpdmVyIGRpc2FibGVkICovCi0JCWxlYXZlKCJyZWNlaXZlX2FjdGl2ZSAtIGluYWN0aXZlIik7CisJaWYgKCh2YWwgJiAoNyA8PCAxNykpID09IDApCQkvKiByZWNlaXZlciBkaXNhYmxlZCAqLwogCQlyZXR1cm4gMDsKLQl9CiAKLQlsZWF2ZSgicmVjZWl2ZV9hY3RpdmUgLSBhY3RpdmUiKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtNzM5LDggKzY4Myw2IEBACiB7CiAJdW5zaWduZWQgaW50IHZhbDsKIAlpbnQgY291bnRlcjsKLQllbnRlcigiYWN0aXZhdGVfcmVjZWl2ZXIiKTsKLQogCiAJdmFsID0gaW5sKGNhcmQtPmlvX3BvcnQgKyBDU1I2KTsJLyogT3BlcmF0aW9uIG1vZGUgKi8KIApAQCAtNzYxLDcgKzcwMyw3IEBACiAJCXVkZWxheSg1MCk7CiAJCWNvdW50ZXItLTsKIAkJaWYgKGNvdW50ZXIgPD0gMCkKLQkJCXByX2VycigiUmVjZWl2ZXIgZmFpbGVkIHRvIGRlYWN0aXZhdGVcbiIpOworCQkJbmV0ZGV2X2VycihjYXJkLT5kZXYsICJSZWNlaXZlciBmYWlsZWQgdG8gZGVhY3RpdmF0ZVxuIik7CiAJfQogCiAJLyogZW5hYmxlIHRoZSByZWNlaXZlciAqLwpAQCAtNzc4LDEwICs3MjAsOSBAQAogCQl1ZGVsYXkoNTApOwogCQljb3VudGVyLS07CiAJCWlmIChjb3VudGVyIDw9IDApCi0JCQlwcl9lcnIoIlJlY2VpdmVyIGZhaWxlZCB0byByZS1hY3RpdmF0ZVxuIik7CisJCQluZXRkZXZfZXJyKGNhcmQtPmRldiwKKwkJCQkgICAiUmVjZWl2ZXIgZmFpbGVkIHRvIHJlLWFjdGl2YXRlXG4iKTsKIAl9Ci0KLQlsZWF2ZSgiYWN0aXZhdGVfcmVjZWl2ZXIiKTsKIH0KIAogLyoKQEAgLTc5NSw3ICs3MzYsNiBAQAogewogCXVuc2lnbmVkIGludCB2YWw7CiAJaW50IGNvdW50ZXI7Ci0JZW50ZXIoImRlYWN0aXZhdGVfcmVjZWl2ZXIiKTsKIAogCXZhbCA9IGlubChjYXJkLT5pb19wb3J0ICsgQ1NSNik7CS8qIE9wZXJhdGlvbiBtb2RlICovCiAJdmFsID0gdmFsICYgfjI7CQkJCS8qIGRpc2FibGUgdGhlIHJlY2VpdmVyICovCkBAIC04MDksMTEgKzc0OSw4IEBACiAJCXVkZWxheSg1MCk7CiAJCWNvdW50ZXItLTsKIAkJaWYgKGNvdW50ZXIgPD0gMCkKLQkJCXByX2VycigiUmVjZWl2ZXIgZmFpbGVkIHRvIGRlYWN0aXZhdGVcbiIpOworCQkJbmV0ZGV2X2VycihjYXJkLT5kZXYsICJSZWNlaXZlciBmYWlsZWQgdG8gZGVhY3RpdmF0ZVxuIik7CiAJfQotCi0KLQlsZWF2ZSgiZGVhY3RpdmF0ZV9yZWNlaXZlciIpOwogfQogCiAKQEAgLTgzMSw4ICs3NjgsNiBAQAogewogCXVuc2lnbmVkIGludCB2YWw7CiAJaW50IGNvdW50ZXI7Ci0JZW50ZXIoImFjdGl2YXRlX3RyYW5zbWl0dGVyIik7Ci0KIAogCXZhbCA9IGlubChjYXJkLT5pb19wb3J0ICsgQ1NSNik7CS8qIE9wZXJhdGlvbiBtb2RlICovCiAKQEAgLTg1Miw3ICs3ODcsOCBAQAogCQl1ZGVsYXkoNTApOwogCQljb3VudGVyLS07CiAJCWlmIChjb3VudGVyIDw9IDApCi0JCQlwcl9lcnIoIlRyYW5zbWl0dGVyIGZhaWxlZCB0byBkZWFjdGl2YXRlXG4iKTsKKwkJCW5ldGRldl9lcnIoY2FyZC0+ZGV2LAorCQkJCSAgICJUcmFuc21pdHRlciBmYWlsZWQgdG8gZGVhY3RpdmF0ZVxuIik7CiAJfQogCiAJLyogZW5hYmxlIHRoZSB0cmFuc21pdHRlciAqLwpAQCAtODY5LDEwICs4MDUsOSBAQAogCQl1ZGVsYXkoNTApOwogCQljb3VudGVyLS07CiAJCWlmIChjb3VudGVyIDw9IDApCi0JCQlwcl9lcnIoIlRyYW5zbWl0dGVyIGZhaWxlZCB0byByZS1hY3RpdmF0ZVxuIik7CisJCQluZXRkZXZfZXJyKGNhcmQtPmRldiwKKwkJCQkgICAiVHJhbnNtaXR0ZXIgZmFpbGVkIHRvIHJlLWFjdGl2YXRlXG4iKTsKIAl9Ci0KLQlsZWF2ZSgiYWN0aXZhdGVfdHJhbnNtaXR0ZXIiKTsKIH0KIAogLyoKQEAgLTg4Niw3ICs4MjEsNiBAQAogewogCXVuc2lnbmVkIGludCB2YWw7CiAJaW50IGNvdW50ZXI7Ci0JZW50ZXIoImRlYWN0aXZhdGVfdHJhbnNtaXR0ZXIiKTsKIAogCXZhbCA9IGlubChjYXJkLT5pb19wb3J0ICsgQ1NSNik7CS8qIE9wZXJhdGlvbiBtb2RlICovCiAJdmFsID0gdmFsICYgfjI7CQkvKiBkaXNhYmxlIHRoZSB0cmFuc21pdHRlciAqLwpAQCAtOTAwLDExICs4MzQsOSBAQAogCQl1ZGVsYXkoNTApOwogCQljb3VudGVyLS07CiAJCWlmIChjb3VudGVyIDw9IDApCi0JCQlwcl9lcnIoIlRyYW5zbWl0dGVyIGZhaWxlZCB0byBkZWFjdGl2YXRlXG4iKTsKKwkJCW5ldGRldl9lcnIoY2FyZC0+ZGV2LAorCQkJCSAgICJUcmFuc21pdHRlciBmYWlsZWQgdG8gZGVhY3RpdmF0ZVxuIik7CiAJfQotCi0KLQlsZWF2ZSgiZGVhY3RpdmF0ZV90cmFuc21pdHRlciIpOwogfQogCiAKQEAgLTkxNiwxMyArODQ4LDEwIEBACiBzdGF0aWMgdm9pZCBlbmFibGVfdHJhbnNtaXRfaW50ZXJydXB0KHN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqY2FyZCkKIHsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCWVudGVyKCJlbmFibGVfdHJhbnNtaXRfaW50ZXJydXB0Iik7CiAKIAl2YWwgPSBpbmwoY2FyZC0+aW9fcG9ydCArIENTUjcpOwkvKiBJbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyICovCiAJdmFsIHw9IDE7CQkJCS8qIGVuYWJsZSB0aGUgdHJhbnNtaXQgaW50ZXJydXB0ICovCiAJb3V0bCh2YWwsIGNhcmQtPmlvX3BvcnQgKyBDU1I3KTsKLQotCWxlYXZlKCJlbmFibGVfdHJhbnNtaXRfaW50ZXJydXB0Iik7CiB9CiAKIApAQCAtOTM0LDEzICs4NjMsMTAgQEAKIHN0YXRpYyB2b2lkIGVuYWJsZV9yZWNlaXZlX2ludGVycnVwdChzdHJ1Y3QgeGlyY29tX3ByaXZhdGUgKmNhcmQpCiB7CiAJdW5zaWduZWQgaW50IHZhbDsKLQllbnRlcigiZW5hYmxlX3JlY2VpdmVfaW50ZXJydXB0Iik7CiAKIAl2YWwgPSBpbmwoY2FyZC0+aW9fcG9ydCArIENTUjcpOwkvKiBJbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyICovCiAJdmFsID0gdmFsIHwgKDEgPDwgNik7CQkJLyogZW5hYmxlIHRoZSByZWNlaXZlIGludGVycnVwdCAqLwogCW91dGwodmFsLCBjYXJkLT5pb19wb3J0ICsgQ1NSNyk7Ci0KLQlsZWF2ZSgiZW5hYmxlX3JlY2VpdmVfaW50ZXJydXB0Iik7CiB9CiAKIC8qCkBAIC05NTEsMTMgKzg3NywxMCBAQAogc3RhdGljIHZvaWQgZW5hYmxlX2xpbmtfaW50ZXJydXB0KHN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqY2FyZCkKIHsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCWVudGVyKCJlbmFibGVfbGlua19pbnRlcnJ1cHQiKTsKIAogCXZhbCA9IGlubChjYXJkLT5pb19wb3J0ICsgQ1NSNyk7CS8qIEludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgKi8KIAl2YWwgPSB2YWwgfCAoMSA8PCAyNyk7CQkJLyogZW5hYmxlIHRoZSBsaW5rIHN0YXR1cyBjaGFnZSBpbnRlcnJ1cHQgKi8KIAlvdXRsKHZhbCwgY2FyZC0+aW9fcG9ydCArIENTUjcpOwotCi0JbGVhdmUoImVuYWJsZV9saW5rX2ludGVycnVwdCIpOwogfQogCiAKQEAgLTk3MCwxMiArODkzLDkgQEAKIHN0YXRpYyB2b2lkIGRpc2FibGVfYWxsX2ludGVycnVwdHMoc3RydWN0IHhpcmNvbV9wcml2YXRlICpjYXJkKQogewogCXVuc2lnbmVkIGludCB2YWw7Ci0JZW50ZXIoImVuYWJsZV9hbGxfaW50ZXJydXB0cyIpOwogCiAJdmFsID0gMDsJCQkJLyogZGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLwogCW91dGwodmFsLCBjYXJkLT5pb19wb3J0ICsgQ1NSNyk7Ci0KLQlsZWF2ZSgiZGlzYWJsZV9hbGxfaW50ZXJydXB0cyIpOwogfQogCiAvKgpAQCAtOTg2LDcgKzkwNiw2IEBACiBzdGF0aWMgdm9pZCBlbmFibGVfY29tbW9uX2ludGVycnVwdHMoc3RydWN0IHhpcmNvbV9wcml2YXRlICpjYXJkKQogewogCXVuc2lnbmVkIGludCB2YWw7Ci0JZW50ZXIoImVuYWJsZV9saW5rX2ludGVycnVwdCIpOwogCiAJdmFsID0gaW5sKGNhcmQtPmlvX3BvcnQgKyBDU1I3KTsJLyogSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciAqLwogCXZhbCB8PSAoMTw8MTYpOyAvKiBOb3JtYWwgSW50ZXJydXB0IFN1bW1hcnkgKi8KQEAgLTk5OCw4ICs5MTcsNiBAQAogCXZhbCB8PSAoMTw8Mik7ICAvKiBUcmFuc21pdCBCdWZmZXIgVW5hdmFpbGFibGUgKi8KIAl2YWwgfD0gKDE8PDEpOyAgLyogVHJhbnNtaXQgUHJvY2VzcyBTdG9wcGVkICovCiAJb3V0bCh2YWwsIGNhcmQtPmlvX3BvcnQgKyBDU1I3KTsKLQotCWxlYXZlKCJlbmFibGVfbGlua19pbnRlcnJ1cHQiKTsKIH0KIAogLyoKQEAgLTEwMTAsMTMgKzkyNywxMSBAQAogc3RhdGljIGludCBlbmFibGVfcHJvbWlzYyhzdHJ1Y3QgeGlyY29tX3ByaXZhdGUgKmNhcmQpCiB7CiAJdW5zaWduZWQgaW50IHZhbDsKLQllbnRlcigiZW5hYmxlX3Byb21pc2MiKTsKIAogCXZhbCA9IGlubChjYXJkLT5pb19wb3J0ICsgQ1NSNik7CiAJdmFsID0gdmFsIHwgKDEgPDwgNik7CiAJb3V0bCh2YWwsIGNhcmQtPmlvX3BvcnQgKyBDU1I2KTsKIAotCWxlYXZlKCJlbmFibGVfcHJvbWlzYyIpOwogCXJldHVybiAxOwogfQogCkBAIC0xMDMxLDcgKzk0Niw2IEBACiBzdGF0aWMgaW50IGxpbmtfc3RhdHVzKHN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqY2FyZCkKIHsKIAl1bnNpZ25lZCBpbnQgdmFsOwotCWVudGVyKCJsaW5rX3N0YXR1cyIpOwogCiAJdmFsID0gaW5iKGNhcmQtPmlvX3BvcnQgKyBDU1IxMik7CiAKQEAgLTEwNDIsNyArOTU2LDYgQEAKIAogCS8qIElmIHdlIGdldCBoZXJlIC0+IG5vIGxpbmsgYXQgYWxsICovCiAKLQlsZWF2ZSgibGlua19zdGF0dXMiKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA2MSw4ICs5NzQsNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CiAKLQllbnRlcigicmVhZF9tYWNfYWRkcmVzcyIpOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAogCW91dGwoMSA8PCAxMiwgY2FyZC0+aW9fcG9ydCArIENTUjkpOwkvKiBlbmFibGUgYm9vdCByb20gYWNjZXNzICovCkBAIC0xMDkwLDcgKzEwMDEsNiBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAJcHJfZGVidWcoIiAlcE1cbiIsIGNhcmQtPmRldi0+ZGV2X2FkZHIpOwotCWxlYXZlKCJyZWFkX21hY19hZGRyZXNzIik7CiB9CiAKIApAQCAtMTEwMyw4ICsxMDEzLDYgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZW50ZXIoInRyYW5zY2VpdmVyX3Zvb2RvbyIpOwotCiAJLyogZGlzYWJsZSBhbGwgcG93ZXJtYW5hZ2VtZW50ICovCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChjYXJkLT5wZGV2LCBQQ0lfUE9XRVJNR01ULCAweDAwMDApOwogCkBAIC0xMTIyLDcgKzEwMzAsNiBAQAogICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAKIAluZXRpZl9zdGFydF9xdWV1ZShjYXJkLT5kZXYpOwotCWxlYXZlKCJ0cmFuc2NlaXZlcl92b29kb28iKTsKIH0KIAogCkBAIC0xMTMxLDggKzEwMzgsNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CiAKLQllbnRlcigieGlyY29tX3VwIik7Ci0KIAkvKiBkaXNhYmxlIGFsbCBwb3dlcm1hbmFnZW1lbnQgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGNhcmQtPnBkZXYsIFBDSV9QT1dFUk1HTVQsIDB4MDAwMCk7CiAKQEAgLTExNTYsODcgKzEwNjEsODQgQEAKIAl0cmlnZ2VyX3JlY2VpdmUoY2FyZCk7CiAJdHJpZ2dlcl90cmFuc21pdChjYXJkKTsKIAluZXRpZl9zdGFydF9xdWV1ZShjYXJkLT5kZXYpOwotCWxlYXZlKCJ4aXJjb21fdXAiKTsKIH0KIAogLyogQnVmZmVyb2Zmc2V0IGlzIGluIEJZVEVTICovCi1zdGF0aWMgdm9pZCBpbnZlc3RpZ2F0ZV9yZWFkX2Rlc2NyaXB0b3Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldixzdHJ1Y3QgeGlyY29tX3ByaXZhdGUgKmNhcmQsIGludCBkZXNjbnIsIHVuc2lnbmVkIGludCBidWZmZXJvZmZzZXQpCitzdGF0aWMgdm9pZAoraW52ZXN0aWdhdGVfcmVhZF9kZXNjcmlwdG9yKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqY2FyZCwKKwkJCSAgICBpbnQgZGVzY25yLCB1bnNpZ25lZCBpbnQgYnVmZmVyb2Zmc2V0KQogewotCQlpbnQgc3RhdHVzOworCWludCBzdGF0dXM7CiAKLQkJZW50ZXIoImludmVzdGlnYXRlX3JlYWRfZGVzY3JpcHRvciIpOwotCQlzdGF0dXMgPSBsZTMyX3RvX2NwdShjYXJkLT5yeF9idWZmZXJbNCpkZXNjbnJdKTsKKwlzdGF0dXMgPSBsZTMyX3RvX2NwdShjYXJkLT5yeF9idWZmZXJbNCpkZXNjbnJdKTsKIAotCQlpZiAoKHN0YXR1cyA+IDApKSB7CS8qIHBhY2tldCByZWNlaXZlZCAqLworCWlmIChzdGF0dXMgPiAwKSB7CQkvKiBwYWNrZXQgcmVjZWl2ZWQgKi8KIAotCQkJLyogVE9ETzogZGlzY2FyZCBlcnJvciBwYWNrZXRzICovCisJCS8qIFRPRE86IGRpc2NhcmQgZXJyb3IgcGFja2V0cyAqLwogCi0JCQlzaG9ydCBwa3RfbGVuID0gKChzdGF0dXMgPj4gMTYpICYgMHg3ZmYpIC0gNDsJLyogbWludXMgNCwgd2UgZG9uJ3Qgd2FudCB0aGUgQ1JDICovCi0JCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQlzaG9ydCBwa3RfbGVuID0gKChzdGF0dXMgPj4gMTYpICYgMHg3ZmYpIC0gNDsKKwkJCQkJLyogbWludXMgNCwgd2UgZG9uJ3Qgd2FudCB0aGUgQ1JDICovCisJCXN0cnVjdCBza19idWZmICpza2I7CiAKLQkJCWlmIChwa3RfbGVuID4gMTUxOCkgewotCQkJCXByX2VycigiUGFja2V0IGxlbmd0aCAlaSBpcyBib2d1c1xuIiwgcGt0X2xlbik7Ci0JCQkJcGt0X2xlbiA9IDE1MTg7Ci0JCQl9Ci0KLQkJCXNrYiA9IGRldl9hbGxvY19za2IocGt0X2xlbiArIDIpOwotCQkJaWYgKHNrYiA9PSBOVUxMKSB7Ci0JCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlza2JfcmVzZXJ2ZShza2IsIDIpOwotCQkJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCAodW5zaWduZWQgY2hhciopJmNhcmQtPnJ4X2J1ZmZlcltidWZmZXJvZmZzZXQgLyA0XSwgcGt0X2xlbik7Ci0JCQlza2JfcHV0KHNrYiwgcGt0X2xlbik7Ci0JCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwotCQkJbmV0aWZfcngoc2tiKTsKLQkJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwotCQkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOwotCi0JCSAgICAgIG91dDoKLQkJCS8qIGdpdmUgdGhlIGJ1ZmZlciBiYWNrIHRvIHRoZSBjYXJkICovCi0JCQljYXJkLT5yeF9idWZmZXJbNCpkZXNjbnJdID0gIGNwdV90b19sZTMyKDB4ODAwMDAwMDApOwotCQkJdHJpZ2dlcl9yZWNlaXZlKGNhcmQpOworCQlpZiAocGt0X2xlbiA+IDE1MTgpIHsKKwkJCW5ldGRldl9lcnIoZGV2LCAiUGFja2V0IGxlbmd0aCAlaSBpcyBib2d1c1xuIiwgcGt0X2xlbik7CisJCQlwa3RfbGVuID0gMTUxODsKIAkJfQogCi0JCWxlYXZlKCJpbnZlc3RpZ2F0ZV9yZWFkX2Rlc2NyaXB0b3IiKTsKKwkJc2tiID0gZGV2X2FsbG9jX3NrYihwa3RfbGVuICsgMik7CisJCWlmIChza2IgPT0gTlVMTCkgeworCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQlnb3RvIG91dDsKKwkJfQorCQlza2JfcmVzZXJ2ZShza2IsIDIpOworCQlza2JfY29weV90b19saW5lYXJfZGF0YShza2IsCisJCQkJCSZjYXJkLT5yeF9idWZmZXJbYnVmZmVyb2Zmc2V0IC8gNF0sCisJCQkJCXBrdF9sZW4pOworCQlza2JfcHV0KHNrYiwgcGt0X2xlbik7CisJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJCW5ldGlmX3J4KHNrYik7CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAKK291dDoKKwkJLyogZ2l2ZSB0aGUgYnVmZmVyIGJhY2sgdG8gdGhlIGNhcmQgKi8KKwkJY2FyZC0+cnhfYnVmZmVyWzQqZGVzY25yXSA9IGNwdV90b19sZTMyKDB4ODAwMDAwMDApOworCQl0cmlnZ2VyX3JlY2VpdmUoY2FyZCk7CisJfQogfQogCiAKIC8qIEJ1ZmZlcm9mZnNldCBpcyBpbiBCWVRFUyAqLwotc3RhdGljIHZvaWQgaW52ZXN0aWdhdGVfd3JpdGVfZGVzY3JpcHRvcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeGlyY29tX3ByaXZhdGUgKmNhcmQsIGludCBkZXNjbnIsIHVuc2lnbmVkIGludCBidWZmZXJvZmZzZXQpCitzdGF0aWMgdm9pZAoraW52ZXN0aWdhdGVfd3JpdGVfZGVzY3JpcHRvcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICBzdHJ1Y3QgeGlyY29tX3ByaXZhdGUgKmNhcmQsCisJCQkgICAgIGludCBkZXNjbnIsIHVuc2lnbmVkIGludCBidWZmZXJvZmZzZXQpCiB7Ci0JCWludCBzdGF0dXM7CisJaW50IHN0YXR1czsKIAotCQllbnRlcigiaW52ZXN0aWdhdGVfd3JpdGVfZGVzY3JpcHRvciIpOwotCi0JCXN0YXR1cyA9IGxlMzJfdG9fY3B1KGNhcmQtPnR4X2J1ZmZlcls0KmRlc2Nucl0pOworCXN0YXR1cyA9IGxlMzJfdG9fY3B1KGNhcmQtPnR4X2J1ZmZlcls0KmRlc2Nucl0pOwogI2lmIDAKLQkJaWYgKHN0YXR1cyAmIDB4ODAwMCkgewkvKiBNYWpvciBlcnJvciAqLwotCQkJcHJfZXJyKCJNYWpvciB0cmFuc21pdCBlcnJvciBzdGF0dXMgJXhcbiIsIHN0YXR1cyk7Ci0JCQljYXJkLT50eF9idWZmZXJbNCpkZXNjbnJdID0gMDsKLQkJCW5ldGlmX3dha2VfcXVldWUgKGRldik7Ci0JCX0KKwlpZiAoc3RhdHVzICYgMHg4MDAwKSB7CS8qIE1ham9yIGVycm9yICovCisJCXByX2VycigiTWFqb3IgdHJhbnNtaXQgZXJyb3Igc3RhdHVzICV4XG4iLCBzdGF0dXMpOworCQljYXJkLT50eF9idWZmZXJbNCpkZXNjbnJdID0gMDsKKwkJbmV0aWZfd2FrZV9xdWV1ZSAoZGV2KTsKKwl9CiAjZW5kaWYKLQkJaWYgKHN0YXR1cyA+IDApIHsJLyogYml0IDMxIGlzIDAgd2hlbiBkb25lICovCi0JCQlpZiAoY2FyZC0+dHhfc2tiW2Rlc2Nucl0hPU5VTEwpIHsKLQkJCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IGNhcmQtPnR4X3NrYltkZXNjbnJdLT5sZW47Ci0JCQkJZGV2X2tmcmVlX3NrYl9pcnEoY2FyZC0+dHhfc2tiW2Rlc2Nucl0pOwotCQkJfQotCQkJY2FyZC0+dHhfc2tiW2Rlc2Nucl0gPSBOVUxMOwotCQkJLyogQml0IDggaW4gdGhlIHN0YXR1cyBmaWVsZCBpcyAxIGlmIHRoZXJlIHdhcyBhIGNvbGxpc2lvbiAqLwotCQkJaWYgKHN0YXR1cyYoMTw8OCkpCi0JCQkJZGV2LT5zdGF0cy5jb2xsaXNpb25zKys7Ci0JCQljYXJkLT50eF9idWZmZXJbNCpkZXNjbnJdID0gMDsgLyogZGVzY3JpcHRvciBpcyBmcmVlIGFnYWluICovCi0JCQluZXRpZl93YWtlX3F1ZXVlIChkZXYpOwotCQkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJaWYgKHN0YXR1cyA+IDApIHsJLyogYml0IDMxIGlzIDAgd2hlbiBkb25lICovCisJCWlmIChjYXJkLT50eF9za2JbZGVzY25yXSE9TlVMTCkgeworCQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBjYXJkLT50eF9za2JbZGVzY25yXS0+bGVuOworCQkJZGV2X2tmcmVlX3NrYl9pcnEoY2FyZC0+dHhfc2tiW2Rlc2Nucl0pOwogCQl9Ci0KLQkJbGVhdmUoImludmVzdGlnYXRlX3dyaXRlX2Rlc2NyaXB0b3IiKTsKLQorCQljYXJkLT50eF9za2JbZGVzY25yXSA9IE5VTEw7CisJCS8qIEJpdCA4IGluIHRoZSBzdGF0dXMgZmllbGQgaXMgMSBpZiB0aGVyZSB3YXMgYSBjb2xsaXNpb24gKi8KKwkJaWYgKHN0YXR1cyAmICgxIDw8IDgpKQorCQkJZGV2LT5zdGF0cy5jb2xsaXNpb25zKys7CisJCWNhcmQtPnR4X2J1ZmZlcls0KmRlc2Nucl0gPSAwOyAvKiBkZXNjcmlwdG9yIGlzIGZyZWUgYWdhaW4gKi8KKwkJbmV0aWZfd2FrZV9xdWV1ZSAoZGV2KTsKKwkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJfQogfQogCi0KIHN0YXRpYyBpbnQgX19pbml0IHhpcmNvbV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnhpcmNvbV9vcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVuLmMgYi9kcml2ZXJzL25ldC90dW4uYwppbmRleCBmNWU5YWMwLi43NGU5NDA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dW4uYworKysgYi9kcml2ZXJzL25ldC90dW4uYwpAQCAtMTIzLDYgKzEyMyw5IEBACiAJZ2lkX3QJCQlncm91cDsKIAogCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CisJdTMyCQkJc2V0X2ZlYXR1cmVzOworI2RlZmluZSBUVU5fVVNFUl9GRUFUVVJFUyAoTkVUSUZfRl9IV19DU1VNfE5FVElGX0ZfVFNPX0VDTnxORVRJRl9GX1RTT3wgXAorCQkJICBORVRJRl9GX1RTTzZ8TkVUSUZfRl9VRk8pCiAJc3RydWN0IGZhc3luY19zdHJ1Y3QJKmZhc3luYzsKIAogCXN0cnVjdCB0YXBfZmlsdGVyICAgICAgIHR4Zmx0OwpAQCAtNDUxLDEyICs0NTQsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHUzMiB0dW5fbmV0X2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpCit7CisJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IG5ldGRldl9wcml2KGRldik7CisKKwlyZXR1cm4gKGZlYXR1cmVzICYgdHVuLT5zZXRfZmVhdHVyZXMpIHwgKGZlYXR1cmVzICYgflRVTl9VU0VSX0ZFQVRVUkVTKTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0dW5fbmV0ZGV2X29wcyA9IHsKIAkubmRvX3VuaW5pdAkJPSB0dW5fbmV0X3VuaW5pdCwKIAkubmRvX29wZW4JCT0gdHVuX25ldF9vcGVuLAogCS5uZG9fc3RvcAkJPSB0dW5fbmV0X2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdAkJPSB0dW5fbmV0X3htaXQsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IHR1bl9uZXRfY2hhbmdlX210dSwKKwkubmRvX2ZpeF9mZWF0dXJlcwk9IHR1bl9uZXRfZml4X2ZlYXR1cmVzLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0YXBfbmV0ZGV2X29wcyA9IHsKQEAgLTQ2NSw2ICs0NzYsNyBAQAogCS5uZG9fc3RvcAkJPSB0dW5fbmV0X2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdAkJPSB0dW5fbmV0X3htaXQsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IHR1bl9uZXRfY2hhbmdlX210dSwKKwkubmRvX2ZpeF9mZWF0dXJlcwk9IHR1bl9uZXRfZml4X2ZlYXR1cmVzLAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gdHVuX25ldF9tY2xpc3QsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBldGhfbWFjX2FkZHIsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCkBAIC02MjgsOCArNjQwLDcgQEAKIAkJCWtmcmVlX3NrYihza2IpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQl9IGVsc2UgaWYgKHR1bi0+ZmxhZ3MgJiBUVU5fTk9DSEVDS1NVTSkKLQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwl9CiAKIAlzd2l0Y2ggKHR1bi0+ZmxhZ3MgJiBUVU5fVFlQRV9NQVNLKSB7CiAJY2FzZSBUVU5fVFVOX0RFVjoKQEAgLTEwODgsMTEgKzEwOTksOSBAQAogCiAJCXR1bl9uZXRfaW5pdChkZXYpOwogCi0JCWlmIChzdHJjaHIoZGV2LT5uYW1lLCAnJScpKSB7Ci0JCQllcnIgPSBkZXZfYWxsb2NfbmFtZShkZXYsIGRldi0+bmFtZSk7Ci0JCQlpZiAoZXJyIDwgMCkKLQkJCQlnb3RvIGVycl9mcmVlX3NrOwotCQl9CisJCWRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9GUkFHTElTVCB8CisJCQlUVU5fVVNFUl9GRUFUVVJFUzsKKwkJZGV2LT5mZWF0dXJlcyA9IGRldi0+aHdfZmVhdHVyZXM7CiAKIAkJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKHR1bi0+ZGV2KTsKIAkJaWYgKGVyciA8IDApCkBAIC0xMTU4LDE4ICsxMTY3LDEyIEBACiAKIC8qIFRoaXMgaXMgbGlrZSBhIGN1dC1kb3duIGV0aHRvb2wgb3BzLCBleGNlcHQgZG9uZSB2aWEgdHVuIGZkIHNvIG5vCiAgKiBwcml2cyByZXF1aXJlZC4gKi8KLXN0YXRpYyBpbnQgc2V0X29mZmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IHNldF9vZmZsb2FkKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXUzMiBvbGRfZmVhdHVyZXMsIGZlYXR1cmVzOwotCi0Jb2xkX2ZlYXR1cmVzID0gZGV2LT5mZWF0dXJlczsKLQkvKiBVbnNldCBmZWF0dXJlcywgc2V0IHRoZW0gYXMgd2UgY2hldyBvbiB0aGUgYXJnLiAqLwotCWZlYXR1cmVzID0gKG9sZF9mZWF0dXJlcyAmIH4oTkVUSUZfRl9IV19DU1VNfE5FVElGX0ZfU0d8TkVUSUZfRl9GUkFHTElTVAotCQkJCSAgICB8TkVUSUZfRl9UU09fRUNOfE5FVElGX0ZfVFNPfE5FVElGX0ZfVFNPNgotCQkJCSAgICB8TkVUSUZfRl9VRk8pKTsKKwl1MzIgZmVhdHVyZXMgPSAwOwogCiAJaWYgKGFyZyAmIFRVTl9GX0NTVU0pIHsKLQkJZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNfE5FVElGX0ZfU0d8TkVUSUZfRl9GUkFHTElTVDsKKwkJZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOwogCQlhcmcgJj0gflRVTl9GX0NTVU07CiAKIAkJaWYgKGFyZyAmIChUVU5fRl9UU080fFRVTl9GX1RTTzYpKSB7CkBAIC0xMTk1LDkgKzExOTgsOCBAQAogCWlmIChhcmcpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZGV2LT5mZWF0dXJlcyA9IGZlYXR1cmVzOwotCWlmIChvbGRfZmVhdHVyZXMgIT0gZGV2LT5mZWF0dXJlcykKLQkJbmV0ZGV2X2ZlYXR1cmVzX2NoYW5nZShkZXYpOworCXR1bi0+c2V0X2ZlYXR1cmVzID0gZmVhdHVyZXM7CisJbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyh0dW4tPmRldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyNjIsMTIgKzEyNjQsOSBAQAogCiAJY2FzZSBUVU5TRVROT0NTVU06CiAJCS8qIERpc2FibGUvRW5hYmxlIGNoZWNrc3VtICovCi0JCWlmIChhcmcpCi0JCQl0dW4tPmZsYWdzIHw9IFRVTl9OT0NIRUNLU1VNOwotCQllbHNlCi0JCQl0dW4tPmZsYWdzICY9IH5UVU5fTk9DSEVDS1NVTTsKIAotCQl0dW5fZGVidWcoS0VSTl9JTkZPLCB0dW4sICJjaGVja3N1bSAlc1xuIiwKKwkJLyogW3VuaW1wbGVtZW50ZWRdICovCisJCXR1bl9kZWJ1ZyhLRVJOX0lORk8sIHR1biwgImlnbm9yZWQ6IHNldCBjaGVja3N1bSAlc1xuIiwKIAkJCSAgYXJnID8gImRpc2FibGVkIiA6ICJlbmFibGVkIik7CiAJCWJyZWFrOwogCkBAIC0xMzE2LDcgKzEzMTUsNyBAQAogCQlicmVhazsKICNlbmRpZgogCWNhc2UgVFVOU0VUT0ZGTE9BRDoKLQkJcmV0ID0gc2V0X29mZmxvYWQodHVuLT5kZXYsIGFyZyk7CisJCXJldCA9IHNldF9vZmZsb2FkKHR1biwgYXJnKTsKIAkJYnJlYWs7CiAKIAljYXNlIFRVTlNFVFRYRklMVEVSOgpAQCAtMTU0OCw3ICsxNTQ3LDcgQEAKIHsKIAljbWQtPnN1cHBvcnRlZAkJPSAwOwogCWNtZC0+YWR2ZXJ0aXNpbmcJPSAwOwotCWNtZC0+c3BlZWQJCT0gU1BFRURfMTA7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgU1BFRURfMTApOwogCWNtZC0+ZHVwbGV4CQk9IERVUExFWF9GVUxMOwogCWNtZC0+cG9ydAkJPSBQT1JUX1RQOwogCWNtZC0+cGh5X2FkZHJlc3MJPSAwOwpAQCAtMTU5NSwzMCArMTU5NCwxMiBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyB1MzIgdHVuX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IG5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuICh0dW4tPmZsYWdzICYgVFVOX05PQ0hFQ0tTVU0pID09IDA7Ci19Ci0KLXN0YXRpYyBpbnQgdHVuX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBuZXRkZXZfcHJpdihkZXYpOwotCWlmIChkYXRhKQotCQl0dW4tPmZsYWdzICY9IH5UVU5fTk9DSEVDS1NVTTsKLQllbHNlCi0JCXR1bi0+ZmxhZ3MgfD0gVFVOX05PQ0hFQ0tTVU07Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdHVuX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MJPSB0dW5fZ2V0X3NldHRpbmdzLAogCS5nZXRfZHJ2aW5mbwk9IHR1bl9nZXRfZHJ2aW5mbywKIAkuZ2V0X21zZ2xldmVsCT0gdHVuX2dldF9tc2dsZXZlbCwKIAkuc2V0X21zZ2xldmVsCT0gdHVuX3NldF9tc2dsZXZlbCwKIAkuZ2V0X2xpbmsJPSBldGh0b29sX29wX2dldF9saW5rLAotCS5nZXRfcnhfY3N1bQk9IHR1bl9nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0JPSB0dW5fc2V0X3J4X2NzdW0KIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHlwaG9vbi5jIGIvZHJpdmVycy9uZXQvdHlwaG9vbi5jCmluZGV4IDgyNjUzY2IuLjNkZTQyODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R5cGhvb24uYworKysgYi9kcml2ZXJzL25ldC90eXBob29uLmMKQEAgLTEwNTAsNyArMTA1MCw3IEBACiAKIAkvKiBuZWVkIHRvIGdldCBzdGF0cyB0byBtYWtlIHRoZXNlIGxpbmsgc3BlZWQvZHVwbGV4IHZhbGlkICovCiAJdHlwaG9vbl9kb19nZXRfc3RhdHModHApOwotCWNtZC0+c3BlZWQgPSB0cC0+c3BlZWQ7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgdHAtPnNwZWVkKTsKIAljbWQtPmR1cGxleCA9IHRwLT5kdXBsZXg7CiAJY21kLT5waHlfYWRkcmVzcyA9IDA7CiAJY21kLT50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CkBAIC0xMDY4LDI1ICsxMDY4LDI2IEBACiB0eXBob29uX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgdHlwaG9vbiAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiBzcGVlZCA9IGV0aHRvb2xfY21kX3NwZWVkKGNtZCk7CiAJc3RydWN0IGNtZF9kZXNjIHhwX2NtZDsKIAlfX2xlMTYgeGN2cjsKIAlpbnQgZXJyOwogCiAJZXJyID0gLUVJTlZBTDsKLQlpZihjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHsKKwlpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7CiAJCXhjdnIgPSBUWVBIT09OX1hDVlJfQVVUT05FRzsKIAl9IGVsc2UgewotCQlpZihjbWQtPmR1cGxleCA9PSBEVVBMRVhfSEFMRikgewotCQkJaWYoY21kLT5zcGVlZCA9PSBTUEVFRF8xMCkKKwkJaWYgKGNtZC0+ZHVwbGV4ID09IERVUExFWF9IQUxGKSB7CisJCQlpZiAoc3BlZWQgPT0gU1BFRURfMTApCiAJCQkJeGN2ciA9IFRZUEhPT05fWENWUl8xMEhBTEY7Ci0JCQllbHNlIGlmKGNtZC0+c3BlZWQgPT0gU1BFRURfMTAwKQorCQkJZWxzZSBpZiAoc3BlZWQgPT0gU1BFRURfMTAwKQogCQkJCXhjdnIgPSBUWVBIT09OX1hDVlJfMTAwSEFMRjsKIAkJCWVsc2UKIAkJCQlnb3RvIG91dDsKLQkJfSBlbHNlIGlmKGNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKSB7Ci0JCQlpZihjbWQtPnNwZWVkID09IFNQRUVEXzEwKQorCQl9IGVsc2UgaWYgKGNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKSB7CisJCQlpZiAoc3BlZWQgPT0gU1BFRURfMTApCiAJCQkJeGN2ciA9IFRZUEhPT05fWENWUl8xMEZVTEw7Ci0JCQllbHNlIGlmKGNtZC0+c3BlZWQgPT0gU1BFRURfMTAwKQorCQkJZWxzZSBpZiAoc3BlZWQgPT0gU1BFRURfMTAwKQogCQkJCXhjdnIgPSBUWVBIT09OX1hDVlJfMTAwRlVMTDsKIAkJCWVsc2UKIAkJCQlnb3RvIG91dDsKQEAgLTExMDUsNyArMTEwNiw3IEBACiAJCXRwLT5zcGVlZCA9IDB4ZmY7CS8qIGludmFsaWQgKi8KIAkJdHAtPmR1cGxleCA9IDB4ZmY7CS8qIGludmFsaWQgKi8KIAl9IGVsc2UgewotCQl0cC0+c3BlZWQgPSBjbWQtPnNwZWVkOworCQl0cC0+c3BlZWQgPSBzcGVlZDsKIAkJdHAtPmR1cGxleCA9IGNtZC0+ZHVwbGV4OwogCX0KIApAQCAtMTE0NCwyOCArMTE0NSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MzIKLXR5cGhvb25fZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQkvKiBGb3Igbm93LCB3ZSBkb24ndCBhbGxvdyB0dXJuaW5nIG9mZiBSWCBjaGVja3N1bXMuCi0JICovCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQKLXR5cGhvb25fc2V0X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCS8qIFRoZXJlJ3Mgbm8gd2F5IHRvIHR1cm4gb2ZmIHRoZSBSWCBWTEFOIG9mZmxvYWRpbmcgYW5kIHN0cmlwcGluZwotCSAqIG9uIHRoZSBjdXJyZW50IDNYUCBmaXJtd2FyZSAtLSBpdCBkb2VzIG5vdCByZXNwZWN0IHRoZSBvZmZsb2FkCi0JICogc2V0dGluZ3MgLS0gc28gd2Ugb25seSBhbGxvdyB0aGUgdXNlciB0byB0b2dnbGUgdGhlIFRYIHByb2Nlc3NpbmcuCi0JICovCi0JaWYgKCEoZGF0YSAmIEVUSF9GTEFHX1JYVkxBTikpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIGV0aHRvb2xfb3Bfc2V0X2ZsYWdzKGRldiwgZGF0YSwKLQkJCQkgICAgRVRIX0ZMQUdfUlhWTEFOIHwgRVRIX0ZMQUdfVFhWTEFOKTsKLX0KLQogc3RhdGljIHZvaWQKIHR5cGhvb25fZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKmVyaW5nKQogewpAQCAtMTE4NywxMyArMTE2Niw3IEBACiAJLmdldF93b2wJCT0gdHlwaG9vbl9nZXRfd29sLAogCS5zZXRfd29sCQk9IHR5cGhvb25fc2V0X3dvbCwKIAkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKLQkuZ2V0X3J4X2NzdW0JCT0gdHlwaG9vbl9nZXRfcnhfY3N1bSwKLQkuc2V0X3R4X2NzdW0JCT0gZXRodG9vbF9vcF9zZXRfdHhfY3N1bSwKLQkuc2V0X3NnCQkJPSBldGh0b29sX29wX3NldF9zZywKLQkuc2V0X3RzbwkJPSBldGh0b29sX29wX3NldF90c28sCiAJLmdldF9yaW5ncGFyYW0JCT0gdHlwaG9vbl9nZXRfcmluZ3BhcmFtLAotCS5zZXRfZmxhZ3MJCT0gdHlwaG9vbl9zZXRfZmxhZ3MsCi0JLmdldF9mbGFncwkJPSBldGh0b29sX29wX2dldF9mbGFncywKIH07CiAKIHN0YXRpYyBpbnQKQEAgLTI0ODIsMTAgKzI0NTUsMTUgQEAKIAogCS8qIFdlIGNhbiBoYW5kbGUgc2NhdHRlciBnYXRoZXIsIHVwIHRvIDE2IGVudHJpZXMsIGFuZAogCSAqIHdlIGNhbiBkbyBJUCBjaGVja3N1bW1pbmcgKG9ubHkgdmVyc2lvbiA0LCBkb2guLi4pCisJICoKKwkgKiBUaGVyZSdzIG5vIHdheSB0byB0dXJuIG9mZiB0aGUgUlggVkxBTiBvZmZsb2FkaW5nIGFuZCBzdHJpcHBpbmcKKwkgKiBvbiB0aGUgY3VycmVudCAzWFAgZmlybXdhcmUgLS0gaXQgZG9lcyBub3QgcmVzcGVjdCB0aGUgb2ZmbG9hZAorCSAqIHNldHRpbmdzIC0tIHNvIHdlIG9ubHkgYWxsb3cgdGhlIHVzZXIgdG8gdG9nZ2xlIHRoZSBUWCBwcm9jZXNzaW5nLgogCSAqLwotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTTsKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKLQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOworCWRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9UU08gfAorCQlORVRJRl9GX0hXX1ZMQU5fVFg7CisJZGV2LT5mZWF0dXJlcyA9IGRldi0+aHdfZmVhdHVyZXMgfAorCQlORVRJRl9GX0hXX1ZMQU5fUlggfCBORVRJRl9GX1JYQ1NVTTsKIAogCWlmKHJlZ2lzdGVyX25ldGRldihkZXYpIDwgMCkgewogCQllcnJfbXNnID0gInVuYWJsZSB0byByZWdpc3RlciBuZXRkZXYiOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdWNjX2dldGhfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvdWNjX2dldGhfZXRodG9vbC5jCmluZGV4IDZmOTJlNDguLjUzN2ZiYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VjY19nZXRoX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aF9ldGh0b29sLmMKQEAgLTQxMCw3ICs0MTAsNiBAQAogCS5zZXRfcmluZ3BhcmFtICAgICAgICAgID0gdWVjX3NldF9yaW5ncGFyYW0sCiAJLmdldF9wYXVzZXBhcmFtICAgICAgICAgPSB1ZWNfZ2V0X3BhdXNlcGFyYW0sCiAJLnNldF9wYXVzZXBhcmFtICAgICAgICAgPSB1ZWNfc2V0X3BhdXNlcGFyYW0sCi0JLnNldF9zZyAgICAgICAgICAgICAgICAgPSBldGh0b29sX29wX3NldF9zZywKIAkuZ2V0X3NzZXRfY291bnQJCT0gdWVjX2dldF9zc2V0X2NvdW50LAogCS5nZXRfc3RyaW5ncyAgICAgICAgICAgID0gdWVjX2dldF9zdHJpbmdzLAogCS5nZXRfZXRodG9vbF9zdGF0cyAgICAgID0gdWVjX2dldF9ldGh0b29sX3N0YXRzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL0tjb25maWcgYi9kcml2ZXJzL25ldC91c2IvS2NvbmZpZwppbmRleCAzZWMyMmMzLi45ZDRmOTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC91c2IvS2NvbmZpZwpAQCAtMjU4LDcgKzI1OCw3IEBACiAJICBvcHRpb25hbGx5IHdpdGggTEVEcyB0aGF0IGluZGljYXRlIHRyYWZmaWMKIAogY29uZmlnIFVTQl9ORVRfUExVU0IKLQl0cmlzdGF0ZSAiUHJvbGlmaWMgUEwtMjMwMS8yMzAyIGJhc2VkIGNhYmxlcyIKKwl0cmlzdGF0ZSAiUHJvbGlmaWMgUEwtMjMwMS8yMzAyLzI1QTEgYmFzZWQgY2FibGVzIgogCSMgaWYgdGhlIGhhbmRzaGFrZS9pbml0L3Jlc2V0IHByb2JsZW1zLCBmcm9tIG9yaWdpbmFsICdwbHVzYicsCiAJIyBhcmUgZXZlciByZXNvbHZlZCAuLi4gdGhlbiByZW1vdmUgImV4cGVyaW1lbnRhbCIKIAlkZXBlbmRzIG9uIFVTQl9VU0JORVQgJiYgRVhQRVJJTUVOVEFMCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvYXNpeC5jIGIvZHJpdmVycy9uZXQvdXNiL2FzaXguYwppbmRleCA2MTQwYjU2Li42OTk4YWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvYXNpeC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4LmMKQEAgLTg0Nyw3ICs4NDcsNyBAQAogc3RhdGljIGludCBheDg4MTcyX2xpbmtfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KQogewogCXU4IG1vZGU7Ci0Jc3RydWN0IGV0aHRvb2xfY21kIGVjbWQ7CisJc3RydWN0IGV0aHRvb2xfY21kIGVjbWQgPSB7IC5jbWQgPSBFVEhUT09MX0dTRVQgfTsKIAogCW1paV9jaGVja19tZWRpYSgmZGV2LT5taWksIDEsIDEpOwogCW1paV9ldGh0b29sX2dzZXQoJmRldi0+bWlpLCAmZWNtZCk7CkBAIC04NTYsOCArODU2LDggQEAKIAlpZiAoZWNtZC5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpCiAJCW1vZGUgfD0gfkFYODgxNzJfTUVESVVNX0ZEOwogCi0JbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImF4ODgxNzJfbGlua19yZXNldCgpIHNwZWVkOiAlZCBkdXBsZXg6ICVkIHNldHRpbmcgbW9kZSB0byAweCUwNHhcbiIsCi0JCSAgIGVjbWQuc3BlZWQsIGVjbWQuZHVwbGV4LCBtb2RlKTsKKwluZXRkZXZfZGJnKGRldi0+bmV0LCAiYXg4ODE3Ml9saW5rX3Jlc2V0KCkgc3BlZWQ6ICV1IGR1cGxleDogJWQgc2V0dGluZyBtb2RlIHRvIDB4JTA0eFxuIiwKKwkJICAgZXRodG9vbF9jbWRfc3BlZWQoJmVjbWQpLCBlY21kLmR1cGxleCwgbW9kZSk7CiAKIAlhc2l4X3dyaXRlX21lZGl1bV9tb2RlKGRldiwgbW9kZSk7CiAKQEAgLTk0NywyMCArOTQ3LDIwIEBACiBzdGF0aWMgaW50IGF4ODg3NzJfbGlua19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpCiB7CiAJdTE2IG1vZGU7Ci0Jc3RydWN0IGV0aHRvb2xfY21kIGVjbWQ7CisJc3RydWN0IGV0aHRvb2xfY21kIGVjbWQgPSB7IC5jbWQgPSBFVEhUT09MX0dTRVQgfTsKIAogCW1paV9jaGVja19tZWRpYSgmZGV2LT5taWksIDEsIDEpOwogCW1paV9ldGh0b29sX2dzZXQoJmRldi0+bWlpLCAmZWNtZCk7CiAJbW9kZSA9IEFYODg3NzJfTUVESVVNX0RFRkFVTFQ7CiAKLQlpZiAoZWNtZC5zcGVlZCAhPSBTUEVFRF8xMDApCisJaWYgKGV0aHRvb2xfY21kX3NwZWVkKCZlY21kKSAhPSBTUEVFRF8xMDApCiAJCW1vZGUgJj0gfkFYX01FRElVTV9QUzsKIAogCWlmIChlY21kLmR1cGxleCAhPSBEVVBMRVhfRlVMTCkKIAkJbW9kZSAmPSB+QVhfTUVESVVNX0ZEOwogCi0JbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImF4ODg3NzJfbGlua19yZXNldCgpIHNwZWVkOiAlZCBkdXBsZXg6ICVkIHNldHRpbmcgbW9kZSB0byAweCUwNHhcbiIsCi0JCSAgIGVjbWQuc3BlZWQsIGVjbWQuZHVwbGV4LCBtb2RlKTsKKwluZXRkZXZfZGJnKGRldi0+bmV0LCAiYXg4ODc3Ml9saW5rX3Jlc2V0KCkgc3BlZWQ6ICV1IGR1cGxleDogJWQgc2V0dGluZyBtb2RlIHRvIDB4JTA0eFxuIiwKKwkJICAgZXRodG9vbF9jbWRfc3BlZWQoJmVjbWQpLCBlY21kLmR1cGxleCwgbW9kZSk7CiAKIAlhc2l4X3dyaXRlX21lZGl1bV9tb2RlKGRldiwgbW9kZSk7CiAKQEAgLTExNzMsMTggKzExNzMsMjAgQEAKIHN0YXRpYyBpbnQgYXg4ODE3OF9saW5rX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldikKIHsKIAl1MTYgbW9kZTsKLQlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZDsKKwlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZCA9IHsgLmNtZCA9IEVUSFRPT0xfR1NFVCB9OwogCXN0cnVjdCBhc2l4X2RhdGEgKmRhdGEgPSAoc3RydWN0IGFzaXhfZGF0YSAqKSZkZXYtPmRhdGE7CisJdTMyIHNwZWVkOwogCiAJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImF4ODgxNzhfbGlua19yZXNldCgpXG4iKTsKIAogCW1paV9jaGVja19tZWRpYSgmZGV2LT5taWksIDEsIDEpOwogCW1paV9ldGh0b29sX2dzZXQoJmRldi0+bWlpLCAmZWNtZCk7CiAJbW9kZSA9IEFYODgxNzhfTUVESVVNX0RFRkFVTFQ7CisJc3BlZWQgPSBldGh0b29sX2NtZF9zcGVlZCgmZWNtZCk7CiAKLQlpZiAoZWNtZC5zcGVlZCA9PSBTUEVFRF8xMDAwKQorCWlmIChzcGVlZCA9PSBTUEVFRF8xMDAwKQogCQltb2RlIHw9IEFYX01FRElVTV9HTTsKLQllbHNlIGlmIChlY21kLnNwZWVkID09IFNQRUVEXzEwMCkKKwllbHNlIGlmIChzcGVlZCA9PSBTUEVFRF8xMDApCiAJCW1vZGUgfD0gQVhfTUVESVVNX1BTOwogCWVsc2UKIAkJbW9kZSAmPSB+KEFYX01FRElVTV9QUyB8IEFYX01FRElVTV9HTSk7CkBAIC0xMTk2LDEzICsxMTk4LDEzIEBACiAJZWxzZQogCQltb2RlICY9IH5BWF9NRURJVU1fRkQ7CiAKLQluZXRkZXZfZGJnKGRldi0+bmV0LCAiYXg4ODE3OF9saW5rX3Jlc2V0KCkgc3BlZWQ6ICVkIGR1cGxleDogJWQgc2V0dGluZyBtb2RlIHRvIDB4JTA0eFxuIiwKLQkJICAgZWNtZC5zcGVlZCwgZWNtZC5kdXBsZXgsIG1vZGUpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJheDg4MTc4X2xpbmtfcmVzZXQoKSBzcGVlZDogJXUgZHVwbGV4OiAlZCBzZXR0aW5nIG1vZGUgdG8gMHglMDR4XG4iLAorCQkgICBzcGVlZCwgZWNtZC5kdXBsZXgsIG1vZGUpOwogCiAJYXNpeF93cml0ZV9tZWRpdW1fbW9kZShkZXYsIG1vZGUpOwogCiAJaWYgKGRhdGEtPnBoeW1vZGUgPT0gUEhZX01PREVfTUFSVkVMTCAmJiBkYXRhLT5sZWRtb2RlKQotCQltYXJ2ZWxsX2xlZF9zdGF0dXMoZGV2LCBlY21kLnNwZWVkKTsKKwkJbWFydmVsbF9sZWRfc3RhdHVzKGRldiwgc3BlZWQpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2F0Yy5jIGIvZHJpdmVycy9uZXQvdXNiL2NhdGMuYwppbmRleCA5NzY4N2QzLi5kNzIyMWM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvY2F0Yy5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMKQEAgLTY4Niw3ICs2ODYsNyBAQAogCiAJY21kLT5zdXBwb3J0ZWQgPSBTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwgU1VQUE9SVEVEX1RQOwogCWNtZC0+YWR2ZXJ0aXNpbmcgPSBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZiB8IEFEVkVSVElTRURfVFA7Ci0JY21kLT5zcGVlZCA9IFNQRUVEXzEwOworCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIFNQRUVEXzEwKTsKIAljbWQtPmR1cGxleCA9IERVUExFWF9IQUxGOwogCWNtZC0+cG9ydCA9IFBPUlRfVFA7IAogCWNtZC0+cGh5X2FkZHJlc3MgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NkY19ldGhlci5jIGIvZHJpdmVycy9uZXQvdXNiL2NkY19ldGhlci5jCmluZGV4IDM0MWY3MDUuLmM5MjRlYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jZGNfZXRoZXIuYworKysgYi9kcml2ZXJzL25ldC91c2IvY2RjX2V0aGVyLmMKQEAgLTQ2MCw3ICs0NjAsNyBAQAogCS5tYW5hZ2VfcG93ZXIgPQljZGNfbWFuYWdlX3Bvd2VyLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBtYm1faW5mbyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8gd3dhbl9pbmZvID0gewogCS5kZXNjcmlwdGlvbiA9CSJNb2JpbGUgQnJvYWRiYW5kIE5ldHdvcmsgRGV2aWNlIiwKIAkuZmxhZ3MgPQlGTEFHX1dXQU4sCiAJLmJpbmQgPQkJdXNibmV0X2NkY19iaW5kLApAQCAtNDcxLDYgKzQ3MSw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKyNkZWZpbmUgSFVBV0VJX1ZFTkRPUl9JRAkweDEyRDEKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkCXByb2R1Y3RzIFtdID0gewogLyoKQEAgLTU2Niw3ICs1NjcsNyBAQAogewogCVVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MTAwNCwgMHg2MWFhLCBVU0JfQ0xBU1NfQ09NTSwKIAkJCVVTQl9DRENfU1VCQ0xBU1NfRVRIRVJORVQsIFVTQl9DRENfUFJPVE9fTk9ORSksCi0JLmRyaXZlcl9pbmZvCQk9IDAsCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpJnd3YW5faW5mbywKIH0sCiAKIC8qCkBAIC01ODcsOCArNTg4LDE3IEBACiB9LCB7CiAJVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19DT01NLCBVU0JfQ0RDX1NVQkNMQVNTX01ETE0sCiAJCQlVU0JfQ0RDX1BST1RPX05PTkUpLAotCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSZtYm1faW5mbywKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykmd3dhbl9pbmZvLAogCit9LCB7CisJLyogVmFyaW91cyBIdWF3ZWkgbW9kZW1zIHdpdGggYSBuZXR3b3JrIHBvcnQgbGlrZSB0aGUgVU1HMTgzMSAqLworCS5tYXRjaF9mbGFncyAgICA9ICAgVVNCX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IKKwkJIHwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKKwkuaWRWZW5kb3IgICAgICAgICAgICAgICA9IEhVQVdFSV9WRU5ET1JfSUQsCisJLmJJbnRlcmZhY2VDbGFzcwk9IFVTQl9DTEFTU19DT01NLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MJPSBVU0JfQ0RDX1NVQkNMQVNTX0VUSEVSTkVULAorCS5iSW50ZXJmYWNlUHJvdG9jb2wJPSAyNTUsCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpJnd3YW5faW5mbywKIH0sCiAJeyB9LAkJLy8gRU5ECiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYyBiL2RyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMKaW5kZXggOTY3MzcxZi4uNGFiNTU3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYworKysgYi9kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jCkBAIC01NCw3ICs1NCw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNiL3VzYm5ldC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9jZGMuaD4KIAotI2RlZmluZQlEUklWRVJfVkVSU0lPTgkJCQkiNy1GZWItMjAxMSIKKyNkZWZpbmUJRFJJVkVSX1ZFUlNJT04JCQkJIjA2LU1heS0yMDExIgogCiAvKiBDREMgTkNNIHN1YmNsYXNzIDMuMi4xICovCiAjZGVmaW5lIFVTQl9DRENfTkNNX05EUDE2X0xFTkdUSF9NSU4JCTB4MTAKQEAgLTcyMiw3ICs3MjIsNyBAQAogCiAJfSBlbHNlIHsKIAkJLyogcmVzZXQgdmFyaWFibGVzICovCi0JCXNrYl9vdXQgPSBhbGxvY19za2IoY3R4LT50eF9tYXgsIEdGUF9BVE9NSUMpOworCQlza2Jfb3V0ID0gYWxsb2Nfc2tiKChjdHgtPnR4X21heCArIDEpLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHNrYl9vdXQgPT0gTlVMTCkgewogCQkJaWYgKHNrYiAhPSBOVUxMKSB7CiAJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKQEAgLTg2MSw4ICs4NjEsMTEgQEAKIAkvKiBzdG9yZSBsYXN0IG9mZnNldCAqLwogCWxhc3Rfb2Zmc2V0ID0gb2Zmc2V0OwogCi0JaWYgKChsYXN0X29mZnNldCA8IGN0eC0+dHhfbWF4KSAmJiAoKGxhc3Rfb2Zmc2V0ICUKLQkJCWxlMTZfdG9fY3B1KGN0eC0+b3V0X2VwLT5kZXNjLndNYXhQYWNrZXRTaXplKSkgPT0gMCkpIHsKKwlpZiAoKChsYXN0X29mZnNldCA8IGN0eC0+dHhfbWF4KSAmJiAoKGxhc3Rfb2Zmc2V0ICUKKwkJCWxlMTZfdG9fY3B1KGN0eC0+b3V0X2VwLT5kZXNjLndNYXhQYWNrZXRTaXplKSkgPT0gMCkpIHx8CisJICAgICgoKGxhc3Rfb2Zmc2V0ID09IGN0eC0+dHhfbWF4KSAmJiAoKGN0eC0+dHhfbWF4ICUKKwkJbGUxNl90b19jcHUoY3R4LT5vdXRfZXAtPmRlc2Mud01heFBhY2tldFNpemUpKSA9PSAwKSkgJiYKKwkJKGN0eC0+dHhfbWF4IDwgbGUzMl90b19jcHUoY3R4LT5uY21fcGFybS5kd050Yk91dE1heFNpemUpKSkpIHsKIAkJLyogZm9yY2Ugc2hvcnQgcGFja2V0ICovCiAJCSooKCh1OCAqKXNrYl9vdXQtPmRhdGEpICsgbGFzdF9vZmZzZXQpID0gMDsKIAkJbGFzdF9vZmZzZXQrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYyBiL2RyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYwppbmRleCA1MDAyZjViLi4xZDkzMTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvZG05NjAxLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jCkBAIC01OTksMTMgKzU5OSwxMyBAQAogCiBzdGF0aWMgaW50IGRtOTYwMV9saW5rX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldikKIHsKLQlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZDsKKwlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZCA9IHsgLmNtZCA9IEVUSFRPT0xfR1NFVCB9OwogCiAJbWlpX2NoZWNrX21lZGlhKCZkZXYtPm1paSwgMSwgMSk7CiAJbWlpX2V0aHRvb2xfZ3NldCgmZGV2LT5taWksICZlY21kKTsKIAotCW5ldGRldl9kYmcoZGV2LT5uZXQsICJsaW5rX3Jlc2V0KCkgc3BlZWQ6ICVkIGR1cGxleDogJWRcbiIsCi0JCSAgIGVjbWQuc3BlZWQsIGVjbWQuZHVwbGV4KTsKKwluZXRkZXZfZGJnKGRldi0+bmV0LCAibGlua19yZXNldCgpIHNwZWVkOiAldSBkdXBsZXg6ICVkXG4iLAorCQkgICBldGh0b29sX2NtZF9zcGVlZCgmZWNtZCksIGVjbWQuZHVwbGV4KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jIGIvZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jCmluZGV4IDdkNDJmOWEuLjgxMTI2ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9pcGhldGguYworKysgYi9kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMKQEAgLTY1LDYgKzY1LDcgQEAKICNkZWZpbmUgSVBIRVRIX1VTQklOVEZfUFJPVE8gICAgMQogCiAjZGVmaW5lIElQSEVUSF9CVUZfU0laRSAgICAgICAgIDE1MTYKKyNkZWZpbmUgSVBIRVRIX0lQX0FMSUdOCQkyCS8qIHBhZGRpbmcgYXQgZnJvbnQgb2YgVVJCICovCiAjZGVmaW5lIElQSEVUSF9UWF9USU1FT1VUICAgICAgICg1ICogSFopCiAKICNkZWZpbmUgSVBIRVRIX0lOVEZOVU0gICAgICAgICAgMgpAQCAtMjAyLDE4ICsyMDMsMjEgQEAKIAkJcmV0dXJuOwogCX0KIAotCWxlbiA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKLQlidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoIDw9IElQSEVUSF9JUF9BTElHTikgeworCQlkZXYtPm5ldC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQlyZXR1cm47CisJfQorCWxlbiA9IHVyYi0+YWN0dWFsX2xlbmd0aCAtIElQSEVUSF9JUF9BTElHTjsKKwlidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlciArIElQSEVUSF9JUF9BTElHTjsKIAotCXNrYiA9IGRldl9hbGxvY19za2IoTkVUX0lQX0FMSUdOICsgbGVuKTsKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbik7CiAJaWYgKCFza2IpIHsKIAkJZXJyKCIlczogZGV2X2FsbG9jX3NrYjogLUVOT01FTSIsIF9fZnVuY19fKTsKIAkJZGV2LT5uZXQtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJcmV0dXJuOwogCX0KIAotCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOKTsKLQltZW1jcHkoc2tiX3B1dChza2IsIGxlbiksIGJ1ZiArIE5FVF9JUF9BTElHTiwgbGVuIC0gTkVUX0lQX0FMSUdOKTsKKwltZW1jcHkoc2tiX3B1dChza2IsIGxlbiksIGJ1ZiwgbGVuKTsKIAlza2ItPmRldiA9IGRldi0+bmV0OwogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldi0+bmV0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3BsdXNiLmMgYi9kcml2ZXJzL25ldC91c2IvcGx1c2IuYwppbmRleCA4MjNjNTM3Li4yMTdhZWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvcGx1c2IuYworKysgYi9kcml2ZXJzL25ldC91c2IvcGx1c2IuYwpAQCAtNDUsNiArNDUsMTQgQEAKICAqIHNlZW1zIHRvIGdldCB3ZWRnZWQgdW5kZXIgbG9hZC4gIFByb2xpZmljIGRvY3MgYXJlIHdlYWssIGFuZAogICogZG9uJ3QgaWRlbnRpZnkgZGlmZmVyZW5jZXMgYmV0d2VlbiBQTDIzMDEgYW5kIFBMMjMwMiwgbXVjaCBsZXNzCiAgKiBhbnl0aGluZyB0byBleHBsYWluIHRoZSBkaWZmZXJlbnQgUEwyMzAyIHZlcnNpb25zIG9ic2VydmVkLgorICoKKyAqIE5PVEU6ICBwbDI1MDEgaGFzIHNldmVyYWwgbW9kZXMsIGluY2x1ZGluZyBwbDIzMDEgYW5kIHBsMjMwMgorICogY29tcGF0aWJpbGl0eS4gICBTb21lIGRvY3Mgc3VnZ2VzdCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIDIzMDEKKyAqIGFuZCAyMzAyIGlzIG9ubHkgdG8gbWFrZSBNUy1XaW5kb3dzIHVzZSBhIGRpZmZlcmVudCBkcml2ZXIuLi4KKyAqCisgKiBwbDI1YTEgZ2x1ZSBiYXNlZCBvbiBwYXRjaCBmcm9tIFRvbnkgR2liYnMuICBQcm9saWZpYyAiZG9jcyIgb24KKyAqIHRoaXMgY2hpcCBhcmUgYXMgdXN1YWwgaW5jb21wbGV0ZSBhYm91dCB3aGF0IGNvbnRyb2wgbWVzc2FnZXMKKyAqIGFyZSBzdXBwb3J0ZWQuCiAgKi8KIAogLyoKQEAgLTg2LDE2ICs5NCwyMCBAQAogCiBzdGF0aWMgaW50IHBsX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldikKIHsKKwlpbnQgc3RhdHVzOworCiAJLyogc29tZSB1bml0cyBzZWVtIHRvIG5lZWQgdGhpcyByZXNldCwgb3RoZXJzIHJlamVjdCBpdCB1dHRlcmx5LgogCSAqIEZJWE1FIGJlIG1vcmUgbGlrZSAibmFwbGluayIgb3Igd2luZG93cyBkcml2ZXJzLgogCSAqLwotCSh2b2lkKSBwbF9zZXRfUXVpY2tMaW5rX2ZlYXR1cmVzKGRldiwKKwlzdGF0dXMgPSBwbF9zZXRfUXVpY2tMaW5rX2ZlYXR1cmVzKGRldiwKIAkJUExfU19FTnxQTF9SRVNFVF9PVVR8UExfUkVTRVRfSU58UExfUEVFUl9FKTsKKwlpZiAoc3RhdHVzICE9IDAgJiYgbmV0aWZfbXNnX3Byb2JlKGRldikpCisJCW5ldGlmX2RiZyhkZXYsIGxpbmssIGRldi0+bmV0LCAicGxfcmVzZXQgLS0+ICVkXG4iLCBzdGF0dXMpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvCXByb2xpZmljX2luZm8gPSB7Ci0JLmRlc2NyaXB0aW9uID0JIlByb2xpZmljIFBMLTIzMDEvUEwtMjMwMiIsCisJLmRlc2NyaXB0aW9uID0JIlByb2xpZmljIFBMLTIzMDEvUEwtMjMwMi9QTC0yNUExIiwKIAkuZmxhZ3MgPQlGTEFHX1BPSU5UVE9QT0lOVCB8IEZMQUdfTk9fU0VUSU5ULAogCQkvKiBzb21lIFBMLTIzMDIgdmVyc2lvbnMgc2VlbSB0byBmYWlsIHVzYl9zZXRfaW50ZXJmYWNlKCkgKi8KIAkucmVzZXQgPQlwbF9yZXNldCwKQEAgLTExMSw2ICsxMjMsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQJcHJvZHVjdHMgW10gPSB7CiAKKy8qIGZ1bGwgc3BlZWQgY2FibGVzICovCiB7CiAJVVNCX0RFVklDRSgweDA2N2IsIDB4MDAwMCksCS8vIFBMLTIzMDEKIAkuZHJpdmVyX2luZm8gPQkodW5zaWduZWQgbG9uZykgJnByb2xpZmljX2luZm8sCkBAIC0xMTksNiArMTMyLDE1IEBACiAJLmRyaXZlcl9pbmZvID0JKHVuc2lnbmVkIGxvbmcpICZwcm9saWZpY19pbmZvLAogfSwKIAorLyogaGlnaCBzcGVlZCBjYWJsZXMgKi8KK3sKKwlVU0JfREVWSUNFKDB4MDY3YiwgMHgyNWExKSwgICAgIC8qIFBMLTI1QTEsIG5vIGVlcHJvbSAqLworCS5kcml2ZXJfaW5mbyA9ICAodW5zaWduZWQgbG9uZykgJnByb2xpZmljX2luZm8sCit9LCB7CisJVVNCX0RFVklDRSgweDA1MGQsIDB4MjU4YSksICAgICAvKiBCZWxraW4gRjVVMjU4L0Y1VTI3OSAoUEwtMjVBMSkgKi8KKwkuZHJpdmVyX2luZm8gPSAgKHVuc2lnbmVkIGxvbmcpICZwcm9saWZpY19pbmZvLAorfSwKKwogCXsgfSwJCS8vIEVORAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBwcm9kdWN0cyk7CkBAIC0xMzQsMTYgKzE1NiwxNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBwbHVzYl9pbml0KHZvaWQpCiB7Ci0gCXJldHVybiB1c2JfcmVnaXN0ZXIoJnBsdXNiX2RyaXZlcik7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmcGx1c2JfZHJpdmVyKTsKIH0KIG1vZHVsZV9pbml0KHBsdXNiX2luaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcGx1c2JfZXhpdCh2b2lkKQogewotIAl1c2JfZGVyZWdpc3RlcigmcGx1c2JfZHJpdmVyKTsKKwl1c2JfZGVyZWdpc3RlcigmcGx1c2JfZHJpdmVyKTsKIH0KIG1vZHVsZV9leGl0KHBsdXNiX2V4aXQpOwogCiBNT0RVTEVfQVVUSE9SKCJEYXZpZCBCcm93bmVsbCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJQcm9saWZpYyBQTC0yMzAxLzIzMDIgVVNCIEhvc3QgdG8gSG9zdCBMaW5rIERyaXZlciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQcm9saWZpYyBQTC0yMzAxLzIzMDIvMjVBMSBVU0IgSG9zdCB0byBIb3N0IExpbmsgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jIGIvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYwppbmRleCA1OTk0YTI1Li4yNTVkNmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMKQEAgLTEwNCw4ICsxMDQsMTAgQEAKIGludCBybmRpc19jb21tYW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHJuZGlzX21zZ19oZHIgKmJ1ZiwgaW50IGJ1ZmxlbikKIHsKIAlzdHJ1Y3QgY2RjX3N0YXRlCSppbmZvID0gKHZvaWQgKikgJmRldi0+ZGF0YTsKKwlzdHJ1Y3QgdXNiX2NkY19ub3RpZmljYXRpb24gbm90aWZpY2F0aW9uOwogCWludAkJCW1hc3Rlcl9pZm51bTsKIAlpbnQJCQlyZXR2YWw7CisJaW50CQkJcGFydGlhbDsKIAl1bnNpZ25lZAkJY291bnQ7CiAJX19sZTMyCQkJcnNwOwogCXUzMgkJCXhpZCA9IDAsIG1zZ19sZW4sIHJlcXVlc3RfaWQ7CkBAIC0xMzMsMTMgKzEzNSwyMCBAQAogCWlmICh1bmxpa2VseShyZXR2YWwgPCAwIHx8IHhpZCA9PSAwKSkKIAkJcmV0dXJuIHJldHZhbDsKIAotCS8vIEZJWE1FIFNlZW1zIGxpa2Ugc29tZSBkZXZpY2VzIGRpc2NhcmQgcmVzcG9uc2VzIHdoZW4KLQkvLyB3ZSB0aW1lIG91dCBhbmQgY2FuY2VsIG91ciAiZ2V0IHJlc3BvbnNlIiByZXF1ZXN0cy4uLgotCS8vIHNvLCB0aGlzIGlzIGZyYWdpbGUuICBQcm9iYWJseSBuZWVkIHRvIHBvbGwgZm9yIHN0YXR1cy4KKwkvKiBTb21lIGRldmljZXMgZG9uJ3QgcmVzcG9uZCBvbiB0aGUgY29udHJvbCBjaGFubmVsIHVudGlsCisJICogcG9sbGVkIG9uIHRoZSBzdGF0dXMgY2hhbm5lbCwgc28gZG8gdGhhdCBmaXJzdC4gKi8KKwlpZiAoZGV2LT5kcml2ZXJfaW5mby0+ZGF0YSAmIFJORElTX0RSSVZFUl9EQVRBX1BPTExfU1RBVFVTKSB7CisJCXJldHZhbCA9IHVzYl9pbnRlcnJ1cHRfbXNnKAorCQkJZGV2LT51ZGV2LAorCQkJdXNiX3JjdmludHBpcGUoZGV2LT51ZGV2LAorCQkJCSAgICAgICBkZXYtPnN0YXR1cy0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJCSZub3RpZmljYXRpb24sIHNpemVvZihub3RpZmljYXRpb24pLCAmcGFydGlhbCwKKwkJCVJORElTX0NPTlRST0xfVElNRU9VVF9NUyk7CisJCWlmICh1bmxpa2VseShyZXR2YWwgPCAwKSkKKwkJCXJldHVybiByZXR2YWw7CisJfQogCi0JLyogaWdub3JlIHN0YXR1cyBlbmRwb2ludCwganVzdCBwb2xsIHRoZSBjb250cm9sIGNoYW5uZWw7Ci0JICogdGhlIHJlcXVlc3QgcHJvYmFibHkgY29tcGxldGVkIGltbWVkaWF0ZWx5Ci0JICovCisJLyogUG9sbCB0aGUgY29udHJvbCBjaGFubmVsOyB0aGUgcmVxdWVzdCBwcm9iYWJseSBjb21wbGV0ZWQgaW1tZWRpYXRlbHkgKi8KIAlyc3AgPSBidWYtPm1zZ190eXBlIHwgUk5ESVNfTVNHX0NPTVBMRVRJT047CiAJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgMTA7IGNvdW50KyspIHsKIAkJbWVtc2V0KGJ1ZiwgMCwgQ09OVFJPTF9CVUZGRVJfU0laRSk7CkBAIC01ODEsMTcgKzU5MCwzMyBAQAogCS50eF9maXh1cCA9CXJuZGlzX3R4X2ZpeHVwLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbwlybmRpc19wb2xsX3N0YXR1c19pbmZvID0geworCS5kZXNjcmlwdGlvbiA9CSJSTkRJUyBkZXZpY2UgKHBvbGwgc3RhdHVzIGJlZm9yZSBjb250cm9sKSIsCisJLmZsYWdzID0JRkxBR19FVEhFUiB8IEZMQUdfUE9JTlRUT1BPSU5UIHwgRkxBR19GUkFNSU5HX1JOIHwgRkxBR19OT19TRVRJTlQsCisJLmRhdGEgPQkJUk5ESVNfRFJJVkVSX0RBVEFfUE9MTF9TVEFUVVMsCisJLmJpbmQgPQkJcm5kaXNfYmluZCwKKwkudW5iaW5kID0Jcm5kaXNfdW5iaW5kLAorCS5zdGF0dXMgPQlybmRpc19zdGF0dXMsCisJLnJ4X2ZpeHVwID0Jcm5kaXNfcnhfZml4dXAsCisJLnR4X2ZpeHVwID0Jcm5kaXNfdHhfZml4dXAsCit9OworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQJcHJvZHVjdHMgW10gPSB7CiB7CisJLyogMldpcmUgSG9tZVBvcnRhbCAxMDAwU1cgKi8KKwlVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDE2MzAsIDB4MDA0MiwKKwkJCQkgICAgICBVU0JfQ0xBU1NfQ09NTSwgMiAvKiBBQ00gKi8sIDB4MGZmKSwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJnJuZGlzX3BvbGxfc3RhdHVzX2luZm8sCit9LCB7CiAJLyogUk5ESVMgaXMgTVNGVCdzIHVuLW9mZmljaWFsIHZhcmlhbnQgb2YgQ0RDIEFDTSAqLwogCVVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfQ09NTSwgMiAvKiBBQ00gKi8sIDB4MGZmKSwKIAkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJnJuZGlzX2luZm8sCiB9LCB7CiAJLyogIkFjdGl2ZVN5bmMiIGlzIGFuIHVuZG9jdW1lbnRlZCB2YXJpYW50IG9mIFJORElTLCB1c2VkIGluIFdNNSAqLwogCVVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUlTQywgMSwgMSksCi0JLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZybmRpc19pbmZvLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmcm5kaXNfcG9sbF9zdGF0dXNfaW5mbywKIH0sIHsKIAkvKiBSTkRJUyBmb3IgdGV0aGVyaW5nICovCiAJVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19XSVJFTEVTU19DT05UUk9MTEVSLCAxLCAzKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMgYi9kcml2ZXJzL25ldC91c2IvcnRsODE1MC5jCmluZGV4IGU4NWM4OWMuLjA0MWZiN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3J0bDgxNTAuYwpAQCAtODQzLDEwICs4NDMsMTEgQEAKIAlnZXRfcmVnaXN0ZXJzKGRldiwgQk1DUiwgMiwgJmJtY3IpOwogCWdldF9yZWdpc3RlcnMoZGV2LCBBTkxQLCAyLCAmbHBhKTsKIAlpZiAoYm1jciAmIEJNQ1JfQU5FTkFCTEUpIHsKKwkJdTMyIHNwZWVkID0gKChscGEgJiAoTFBBXzEwMEhBTEYgfCBMUEFfMTAwRlVMTCkpID8KKwkJCSAgICAgU1BFRURfMTAwIDogU1BFRURfMTApOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgc3BlZWQpOwogCQllY21kLT5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7Ci0JCWVjbWQtPnNwZWVkID0gKGxwYSAmIChMUEFfMTAwSEFMRiB8IExQQV8xMDBGVUxMKSkgPwotCQkJICAgICBTUEVFRF8xMDAgOiBTUEVFRF8xMDsKLQkJaWYgKGVjbWQtPnNwZWVkID09IFNQRUVEXzEwMCkKKwkJaWYgKHNwZWVkID09IFNQRUVEXzEwMCkKIAkJCWVjbWQtPmR1cGxleCA9IChscGEgJiBMUEFfMTAwRlVMTCkgPwogCQkJICAgIERVUExFWF9GVUxMIDogRFVQTEVYX0hBTEY7CiAJCWVsc2UKQEAgLTg1NCw4ICs4NTUsOCBAQAogCQkJICAgIERVUExFWF9GVUxMIDogRFVQTEVYX0hBTEY7CiAJfSBlbHNlIHsKIAkJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKLQkJZWNtZC0+c3BlZWQgPSAoYm1jciAmIEJNQ1JfU1BFRUQxMDApID8KLQkJICAgIFNQRUVEXzEwMCA6IFNQRUVEXzEwOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgKChibWNyICYgQk1DUl9TUEVFRDEwMCkgPworCQkJCQkgICAgIFNQRUVEXzEwMCA6IFNQRUVEXzEwKSk7CiAJCWVjbWQtPmR1cGxleCA9IChibWNyICYgQk1DUl9GVUxMRFBMWCkgPwogCQkgICAgRFVQTEVYX0ZVTEwgOiBEVVBMRVhfSEFMRjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2Ivc21zYzc1eHguYyBiL2RyaXZlcnMvbmV0L3VzYi9zbXNjNzV4eC5jCmluZGV4IDc1M2VlNmUuLjE1YjNkNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9zbXNjNzV4eC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9zbXNjNzV4eC5jCkBAIC02NSw3ICs2NSw2IEBACiAJc3RydWN0IHVzYm5ldCAqZGV2OwogCXUzMiByZmVfY3RsOwogCXUzMiBtdWx0aWNhc3RfaGFzaF90YWJsZVtEUF9TRUxfVkhGX0hBU0hfTEVOXTsKLQlib29sIHVzZV9yeF9jc3VtOwogCXN0cnVjdCBtdXRleCBkYXRhcG9ydF9tdXRleDsKIAlzcGlubG9ja190IHJmZV9jdGxfbG9jazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2V0X211bHRpY2FzdDsKQEAgLTUwNCw3ICs1MDMsNyBAQAogc3RhdGljIGludCBzbXNjNzV4eF9saW5rX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldikKIHsKIAlzdHJ1Y3QgbWlpX2lmX2luZm8gKm1paSA9ICZkZXYtPm1paTsKLQlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZDsKKwlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZCA9IHsgLmNtZCA9IEVUSFRPT0xfR1NFVCB9OwogCXUxNiBsY2xhZHYsIHJtdGFkdjsKIAlpbnQgcmV0OwogCkBAIC01MjAsOCArNTE5LDkgQEAKIAlsY2xhZHYgPSBzbXNjNzV4eF9tZGlvX3JlYWQoZGV2LT5uZXQsIG1paS0+cGh5X2lkLCBNSUlfQURWRVJUSVNFKTsKIAlybXRhZHYgPSBzbXNjNzV4eF9tZGlvX3JlYWQoZGV2LT5uZXQsIG1paS0+cGh5X2lkLCBNSUlfTFBBKTsKIAotCW5ldGlmX2RiZyhkZXYsIGxpbmssIGRldi0+bmV0LCAic3BlZWQ6ICVkIGR1cGxleDogJWQgbGNsYWR2OiAlMDR4IgotCQkiIHJtdGFkdjogJTA0eCIsIGVjbWQuc3BlZWQsIGVjbWQuZHVwbGV4LCBsY2xhZHYsIHJtdGFkdik7CisJbmV0aWZfZGJnKGRldiwgbGluaywgZGV2LT5uZXQsICJzcGVlZDogJXUgZHVwbGV4OiAlZCBsY2xhZHY6ICUwNHgiCisJCSAgIiBybXRhZHY6ICUwNHgiLCBldGh0b29sX2NtZF9zcGVlZCgmZWNtZCksCisJCSAgZWNtZC5kdXBsZXgsIGxjbGFkdiwgcm10YWR2KTsKIAogCXJldHVybiBzbXNjNzV4eF91cGRhdGVfZmxvd2NvbnRyb2woZGV2LCBlY21kLmR1cGxleCwgbGNsYWR2LCBybXRhZHYpOwogfQpAQCAtNTQ4LDI4ICs1NDgsNiBAQAogCQkJInVuZXhwZWN0ZWQgaW50ZXJydXB0LCBpbnRkYXRhPTB4JTA4WCIsIGludGRhdGEpOwogfQogCi0vKiBFbmFibGUgb3IgZGlzYWJsZSBSeCBjaGVja3N1bSBvZmZsb2FkIGVuZ2luZSAqLwotc3RhdGljIGludCBzbXNjNzV4eF9zZXRfcnhfY3N1bV9vZmZsb2FkKHN0cnVjdCB1c2JuZXQgKmRldikKLXsKLQlzdHJ1Y3Qgc21zYzc1eHhfcHJpdiAqcGRhdGEgPSAoc3RydWN0IHNtc2M3NXh4X3ByaXYgKikoZGV2LT5kYXRhWzBdKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQ7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGRhdGEtPnJmZV9jdGxfbG9jaywgZmxhZ3MpOwotCi0JaWYgKHBkYXRhLT51c2VfcnhfY3N1bSkKLQkJcGRhdGEtPnJmZV9jdGwgfD0gUkZFX0NUTF9UQ1BVRFBfQ0tNIHwgUkZFX0NUTF9JUF9DS007Ci0JZWxzZQotCQlwZGF0YS0+cmZlX2N0bCAmPSB+KFJGRV9DVExfVENQVURQX0NLTSB8IFJGRV9DVExfSVBfQ0tNKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBkYXRhLT5yZmVfY3RsX2xvY2ssIGZsYWdzKTsKLQotCXJldCA9IHNtc2M3NXh4X3dyaXRlX3JlZyhkZXYsIFJGRV9DVEwsIHBkYXRhLT5yZmVfY3RsKTsKLQljaGVja193YXJuX3JldHVybihyZXQsICJFcnJvciB3cml0aW5nIFJGRV9DVEwiKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHNtc2M3NXh4X2V0aHRvb2xfZ2V0X2VlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlyZXR1cm4gTUFYX0VFUFJPTV9TSVpFOwpAQCAtNTk5LDM0ICs1NzcsNiBAQAogCXJldHVybiBzbXNjNzV4eF93cml0ZV9lZXByb20oZGV2LCBlZS0+b2Zmc2V0LCBlZS0+bGVuLCBkYXRhKTsKIH0KIAotc3RhdGljIHUzMiBzbXNjNzV4eF9ldGh0b29sX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0Jc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3Qgc21zYzc1eHhfcHJpdiAqcGRhdGEgPSAoc3RydWN0IHNtc2M3NXh4X3ByaXYgKikoZGV2LT5kYXRhWzBdKTsKLQotCXJldHVybiBwZGF0YS0+dXNlX3J4X2NzdW07Ci19Ci0KLXN0YXRpYyBpbnQgc21zYzc1eHhfZXRodG9vbF9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgdmFsKQotewotCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IHNtc2M3NXh4X3ByaXYgKnBkYXRhID0gKHN0cnVjdCBzbXNjNzV4eF9wcml2ICopKGRldi0+ZGF0YVswXSk7Ci0KLQlwZGF0YS0+dXNlX3J4X2NzdW0gPSAhIXZhbDsKLQotCXJldHVybiBzbXNjNzV4eF9zZXRfcnhfY3N1bV9vZmZsb2FkKGRldik7Ci19Ci0KLXN0YXRpYyBpbnQgc21zYzc1eHhfZXRodG9vbF9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQotewotCWlmIChkYXRhKQotCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082OwotCWVsc2UKLQkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082KTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHNtc2M3NXh4X2V0aHRvb2xfb3BzID0gewogCS5nZXRfbGluawk9IHVzYm5ldF9nZXRfbGluaywKIAkubndheV9yZXNldAk9IHVzYm5ldF9ud2F5X3Jlc2V0LApAQCAtNjM4LDEyICs1ODgsNiBAQAogCS5nZXRfZWVwcm9tX2xlbgk9IHNtc2M3NXh4X2V0aHRvb2xfZ2V0X2VlcHJvbV9sZW4sCiAJLmdldF9lZXByb20JPSBzbXNjNzV4eF9ldGh0b29sX2dldF9lZXByb20sCiAJLnNldF9lZXByb20JPSBzbXNjNzV4eF9ldGh0b29sX3NldF9lZXByb20sCi0JLmdldF90eF9jc3VtCT0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKLQkuc2V0X3R4X2NzdW0JPSBldGh0b29sX29wX3NldF90eF9od19jc3VtLAotCS5nZXRfcnhfY3N1bQk9IHNtc2M3NXh4X2V0aHRvb2xfZ2V0X3J4X2NzdW0sCi0JLnNldF9yeF9jc3VtCT0gc21zYzc1eHhfZXRodG9vbF9zZXRfcnhfY3N1bSwKLQkuZ2V0X3Rzbwk9IGV0aHRvb2xfb3BfZ2V0X3RzbywKLQkuc2V0X3Rzbwk9IHNtc2M3NXh4X2V0aHRvb2xfc2V0X3RzbywKIH07CiAKIHN0YXRpYyBpbnQgc21zYzc1eHhfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKQEAgLTc4Miw2ICs3MjYsMzAgQEAKIAlyZXR1cm4gdXNibmV0X2NoYW5nZV9tdHUobmV0ZGV2LCBuZXdfbXR1KTsKIH0KIAorLyogRW5hYmxlIG9yIGRpc2FibGUgUnggY2hlY2tzdW0gb2ZmbG9hZCBlbmdpbmUgKi8KK3N0YXRpYyBpbnQgc21zYzc1eHhfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBmZWF0dXJlcykKK3sKKwlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBzbXNjNzV4eF9wcml2ICpwZGF0YSA9IChzdHJ1Y3Qgc21zYzc1eHhfcHJpdiAqKShkZXYtPmRhdGFbMF0pOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwZGF0YS0+cmZlX2N0bF9sb2NrLCBmbGFncyk7CisKKwlpZiAoZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkKKwkJcGRhdGEtPnJmZV9jdGwgfD0gUkZFX0NUTF9UQ1BVRFBfQ0tNIHwgUkZFX0NUTF9JUF9DS007CisJZWxzZQorCQlwZGF0YS0+cmZlX2N0bCAmPSB+KFJGRV9DVExfVENQVURQX0NLTSB8IFJGRV9DVExfSVBfQ0tNKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBkYXRhLT5yZmVfY3RsX2xvY2ssIGZsYWdzKTsKKwkvKiBpdCdzIHJhY2luZyBoZXJlISAqLworCisJcmV0ID0gc21zYzc1eHhfd3JpdGVfcmVnKGRldiwgUkZFX0NUTCwgcGRhdGEtPnJmZV9jdGwpOworCWNoZWNrX3dhcm5fcmV0dXJuKHJldCwgIkVycm9yIHdyaXRpbmcgUkZFX0NUTCIpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgc21zYzc1eHhfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KQogewogCXN0cnVjdCBzbXNjNzV4eF9wcml2ICpwZGF0YSA9IChzdHJ1Y3Qgc21zYzc1eHhfcHJpdiAqKShkZXYtPmRhdGFbMF0pOwpAQCAtOTYwLDExICs5MjgsNyBAQAogCW5ldGlmX2RiZyhkZXYsIGlmdXAsIGRldi0+bmV0LCAiUkZFX0NUTCBzZXQgdG8gMHglMDh4IiwgcGRhdGEtPnJmZV9jdGwpOwogCiAJLyogRW5hYmxlIG9yIGRpc2FibGUgY2hlY2tzdW0gb2ZmbG9hZCBlbmdpbmVzICovCi0JZXRodG9vbF9vcF9zZXRfdHhfaHdfY3N1bShkZXYtPm5ldCwgREVGQVVMVF9UWF9DU1VNX0VOQUJMRSk7Ci0JcmV0ID0gc21zYzc1eHhfc2V0X3J4X2NzdW1fb2ZmbG9hZChkZXYpOwotCWNoZWNrX3dhcm5fcmV0dXJuKHJldCwgIkZhaWxlZCB0byBzZXQgcnggY3N1bSBvZmZsb2FkOiAlZCIsIHJldCk7Ci0KLQlzbXNjNzV4eF9ldGh0b29sX3NldF90c28oZGV2LT5uZXQsIERFRkFVTFRfVFNPX0VOQUJMRSk7CisJc21zYzc1eHhfc2V0X2ZlYXR1cmVzKGRldi0+bmV0LCBkZXYtPm5ldC0+ZmVhdHVyZXMpOwogCiAJc21zYzc1eHhfc2V0X211bHRpY2FzdChkZXYtPm5ldCk7CiAKQEAgLTEwMzcsNiArMTAwMSw3IEBACiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiAJLm5kb19kb19pb2N0bCAJCT0gc21zYzc1eHhfaW9jdGwsCiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzbXNjNzV4eF9zZXRfbXVsdGljYXN0LAorCS5uZG9fc2V0X2ZlYXR1cmVzCT0gc21zYzc1eHhfc2V0X2ZlYXR1cmVzLAogfTsKIAogc3RhdGljIGludCBzbXNjNzV4eF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCkBAIC0xMDY1LDEwICsxMDMwLDE3IEBACiAKIAlJTklUX1dPUksoJnBkYXRhLT5zZXRfbXVsdGljYXN0LCBzbXNjNzV4eF9kZWZlcnJlZF9tdWx0aWNhc3Rfd3JpdGUpOwogCi0JcGRhdGEtPnVzZV9yeF9jc3VtID0gREVGQVVMVF9SWF9DU1VNX0VOQUJMRTsKKwlpZiAoREVGQVVMVF9UWF9DU1VNX0VOQUJMRSkgeworCQlkZXYtPm5ldC0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU07CisJCWlmIChERUZBVUxUX1RTT19FTkFCTEUpCisJCQlkZXYtPm5ldC0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TRyB8CisJCQkJTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzY7CisJfQorCWlmIChERUZBVUxUX1JYX0NTVU1fRU5BQkxFKQorCQlkZXYtPm5ldC0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9SWENTVU07CiAKLQkvKiBXZSBoYXZlIHRvIGFkdmVydGlzZSBTRyBvdGhlcndpc2UgVFNPIGNhbm5vdCBiZSBlbmFibGVkICovCi0JZGV2LT5uZXQtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0c7CisJZGV2LT5uZXQtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU0gfAorCQlORVRJRl9GX1NHIHwgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfCBORVRJRl9GX1JYQ1NVTTsKIAogCS8qIEluaXQgYWxsIHJlZ2lzdGVycyAqLwogCXJldCA9IHNtc2M3NXh4X3Jlc2V0KGRldik7CkBAIC0xMDkxLDEwICsxMDYzLDExIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzbXNjNzV4eF9yeF9jc3VtX29mZmxvYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHJ4X2NtZF9hLAotCQkJCSAgICAgdTMyIHJ4X2NtZF9iKQorc3RhdGljIHZvaWQgc21zYzc1eHhfcnhfY3N1bV9vZmZsb2FkKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgIHUzMiByeF9jbWRfYSwgdTMyIHJ4X2NtZF9iKQogewotCWlmICh1bmxpa2VseShyeF9jbWRfYSAmIFJYX0NNRF9BX0xDU00pKSB7CisJaWYgKCEoZGV2LT5uZXQtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pIHx8CisJICAgIHVubGlrZWx5KHJ4X2NtZF9hICYgUlhfQ01EX0FfTENTTSkpIHsKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCX0gZWxzZSB7CiAJCXNrYi0+Y3N1bSA9IG50b2hzKCh1MTYpKHJ4X2NtZF9iID4+IFJYX0NNRF9CX0NTVU1fU0hJRlQpKTsKQEAgLTExMDQsOCArMTA3Nyw2IEBACiAKIHN0YXRpYyBpbnQgc21zYzc1eHhfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBzbXNjNzV4eF9wcml2ICpwZGF0YSA9IChzdHJ1Y3Qgc21zYzc1eHhfcHJpdiAqKShkZXYtPmRhdGFbMF0pOwotCiAJd2hpbGUgKHNrYi0+bGVuID4gMCkgewogCQl1MzIgcnhfY21kX2EsIHJ4X2NtZF9iLCBhbGlnbl9jb3VudCwgc2l6ZTsKIAkJc3RydWN0IHNrX2J1ZmYgKmF4X3NrYjsKQEAgLTExNDUsMTEgKzExMTYsOCBAQAogCiAJCQkvKiBsYXN0IGZyYW1lIGluIHRoaXMgYmF0Y2ggKi8KIAkJCWlmIChza2ItPmxlbiA9PSBzaXplKSB7Ci0JCQkJaWYgKHBkYXRhLT51c2VfcnhfY3N1bSkKLQkJCQkJc21zYzc1eHhfcnhfY3N1bV9vZmZsb2FkKHNrYiwgcnhfY21kX2EsCi0JCQkJCQlyeF9jbWRfYik7Ci0JCQkJZWxzZQotCQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJCQkJc21zYzc1eHhfcnhfY3N1bV9vZmZsb2FkKGRldiwgc2tiLCByeF9jbWRfYSwKKwkJCQkJcnhfY21kX2IpOwogCiAJCQkJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIDQpOyAvKiByZW1vdmUgZmNzICovCiAJCQkJc2tiLT50cnVlc2l6ZSA9IHNpemUgKyBzaXplb2Yoc3RydWN0IHNrX2J1ZmYpOwpAQCAtMTE2NywxMSArMTEzNSw4IEBACiAJCQlheF9za2ItPmRhdGEgPSBwYWNrZXQ7CiAJCQlza2Jfc2V0X3RhaWxfcG9pbnRlcihheF9za2IsIHNpemUpOwogCi0JCQlpZiAocGRhdGEtPnVzZV9yeF9jc3VtKQotCQkJCXNtc2M3NXh4X3J4X2NzdW1fb2ZmbG9hZChheF9za2IsIHJ4X2NtZF9hLAotCQkJCQlyeF9jbWRfYik7Ci0JCQllbHNlCi0JCQkJYXhfc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCQkJc21zYzc1eHhfcnhfY3N1bV9vZmZsb2FkKGRldiwgYXhfc2tiLCByeF9jbWRfYSwKKwkJCQlyeF9jbWRfYik7CiAKIAkJCXNrYl90cmltKGF4X3NrYiwgYXhfc2tiLT5sZW4gLSA0KTsgLyogcmVtb3ZlIGZjcyAqLwogCQkJYXhfc2tiLT50cnVlc2l6ZSA9IHNpemUgKyBzaXplb2Yoc3RydWN0IHNrX2J1ZmYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMgYi9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYwppbmRleCA0N2E2Yzg3Li5mNzRmM2NlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYworKysgYi9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYwpAQCAtNTIsOCArNTIsNiBAQAogCXUzMiBoYXNoX2hpOwogCXUzMiBoYXNoX2xvOwogCXNwaW5sb2NrX3QgbWFjX2NyX2xvY2s7Ci0JYm9vbCB1c2VfdHhfY3N1bTsKLQlib29sIHVzZV9yeF9jc3VtOwogfTsKIAogc3RydWN0IHVzYl9jb250ZXh0IHsKQEAgLTQ1OSw3ICs0NTcsNyBAQAogewogCXN0cnVjdCBzbXNjOTV4eF9wcml2ICpwZGF0YSA9IChzdHJ1Y3Qgc21zYzk1eHhfcHJpdiAqKShkZXYtPmRhdGFbMF0pOwogCXN0cnVjdCBtaWlfaWZfaW5mbyAqbWlpID0gJmRldi0+bWlpOwotCXN0cnVjdCBldGh0b29sX2NtZCBlY21kOworCXN0cnVjdCBldGh0b29sX2NtZCBlY21kID0geyAuY21kID0gRVRIVE9PTF9HU0VUIH07CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MTYgbGNsYWR2LCBybXRhZHY7CiAJdTMyIGludGRhdGE7CkBAIC00NzQsOCArNDcyLDkgQEAKIAlsY2xhZHYgPSBzbXNjOTV4eF9tZGlvX3JlYWQoZGV2LT5uZXQsIG1paS0+cGh5X2lkLCBNSUlfQURWRVJUSVNFKTsKIAlybXRhZHYgPSBzbXNjOTV4eF9tZGlvX3JlYWQoZGV2LT5uZXQsIG1paS0+cGh5X2lkLCBNSUlfTFBBKTsKIAotCW5ldGlmX2RiZyhkZXYsIGxpbmssIGRldi0+bmV0LCAic3BlZWQ6ICVkIGR1cGxleDogJWQgbGNsYWR2OiAlMDR4IHJtdGFkdjogJTA0eFxuIiwKLQkJICBlY21kLnNwZWVkLCBlY21kLmR1cGxleCwgbGNsYWR2LCBybXRhZHYpOworCW5ldGlmX2RiZyhkZXYsIGxpbmssIGRldi0+bmV0LAorCQkgICJzcGVlZDogJXUgZHVwbGV4OiAlZCBsY2xhZHY6ICUwNHggcm10YWR2OiAlMDR4XG4iLAorCQkgIGV0aHRvb2xfY21kX3NwZWVkKCZlY21kKSwgZWNtZC5kdXBsZXgsIGxjbGFkdiwgcm10YWR2KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwZGF0YS0+bWFjX2NyX2xvY2ssIGZsYWdzKTsKIAlpZiAoZWNtZC5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpIHsKQEAgLTUxNywyMiArNTE2LDI0IEBACiB9CiAKIC8qIEVuYWJsZSBvciBkaXNhYmxlIFR4ICYgUnggY2hlY2tzdW0gb2ZmbG9hZCBlbmdpbmVzICovCi1zdGF0aWMgaW50IHNtc2M5NXh4X3NldF9jc3VtcyhzdHJ1Y3QgdXNibmV0ICpkZXYpCitzdGF0aWMgaW50IHNtc2M5NXh4X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZmVhdHVyZXMpCiB7Ci0Jc3RydWN0IHNtc2M5NXh4X3ByaXYgKnBkYXRhID0gKHN0cnVjdCBzbXNjOTV4eF9wcml2ICopKGRldi0+ZGF0YVswXSk7CisJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAl1MzIgcmVhZF9idWY7Ci0JaW50IHJldCA9IHNtc2M5NXh4X3JlYWRfcmVnKGRldiwgQ09FX0NSLCAmcmVhZF9idWYpOworCWludCByZXQ7CisKKwlyZXQgPSBzbXNjOTV4eF9yZWFkX3JlZyhkZXYsIENPRV9DUiwgJnJlYWRfYnVmKTsKIAlpZiAocmV0IDwgMCkgewogCQluZXRkZXZfd2FybihkZXYtPm5ldCwgIkZhaWxlZCB0byByZWFkIENPRV9DUjogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JaWYgKHBkYXRhLT51c2VfdHhfY3N1bSkKKwlpZiAoZmVhdHVyZXMgJiBORVRJRl9GX0hXX0NTVU0pCiAJCXJlYWRfYnVmIHw9IFR4X0NPRV9FTl87CiAJZWxzZQogCQlyZWFkX2J1ZiAmPSB+VHhfQ09FX0VOXzsKIAotCWlmIChwZGF0YS0+dXNlX3J4X2NzdW0pCisJaWYgKGZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pCiAJCXJlYWRfYnVmIHw9IFJ4X0NPRV9FTl87CiAJZWxzZQogCQlyZWFkX2J1ZiAmPSB+UnhfQ09FX0VOXzsKQEAgLTU3Niw0MyArNTc3LDYgQEAKIAlyZXR1cm4gc21zYzk1eHhfd3JpdGVfZWVwcm9tKGRldiwgZWUtPm9mZnNldCwgZWUtPmxlbiwgZGF0YSk7CiB9CiAKLXN0YXRpYyB1MzIgc21zYzk1eHhfZXRodG9vbF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IHNtc2M5NXh4X3ByaXYgKnBkYXRhID0gKHN0cnVjdCBzbXNjOTV4eF9wcml2ICopKGRldi0+ZGF0YVswXSk7Ci0KLQlyZXR1cm4gcGRhdGEtPnVzZV9yeF9jc3VtOwotfQotCi1zdGF0aWMgaW50IHNtc2M5NXh4X2V0aHRvb2xfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIHZhbCkKLXsKLQlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBzbXNjOTV4eF9wcml2ICpwZGF0YSA9IChzdHJ1Y3Qgc21zYzk1eHhfcHJpdiAqKShkZXYtPmRhdGFbMF0pOwotCi0JcGRhdGEtPnVzZV9yeF9jc3VtID0gISF2YWw7Ci0KLQlyZXR1cm4gc21zYzk1eHhfc2V0X2NzdW1zKGRldik7Ci19Ci0KLXN0YXRpYyB1MzIgc21zYzk1eHhfZXRodG9vbF9nZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IHNtc2M5NXh4X3ByaXYgKnBkYXRhID0gKHN0cnVjdCBzbXNjOTV4eF9wcml2ICopKGRldi0+ZGF0YVswXSk7Ci0KLQlyZXR1cm4gcGRhdGEtPnVzZV90eF9jc3VtOwotfQotCi1zdGF0aWMgaW50IHNtc2M5NXh4X2V0aHRvb2xfc2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIHZhbCkKLXsKLQlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBzbXNjOTV4eF9wcml2ICpwZGF0YSA9IChzdHJ1Y3Qgc21zYzk1eHhfcHJpdiAqKShkZXYtPmRhdGFbMF0pOwotCi0JcGRhdGEtPnVzZV90eF9jc3VtID0gISF2YWw7Ci0KLQlldGh0b29sX29wX3NldF90eF9od19jc3VtKG5ldGRldiwgcGRhdGEtPnVzZV90eF9jc3VtKTsKLQlyZXR1cm4gc21zYzk1eHhfc2V0X2NzdW1zKGRldik7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgc21zYzk1eHhfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9saW5rCT0gdXNibmV0X2dldF9saW5rLAogCS5ud2F5X3Jlc2V0CT0gdXNibmV0X253YXlfcmVzZXQsCkBAIC02MjQsMTAgKzU4OCw2IEBACiAJLmdldF9lZXByb21fbGVuCT0gc21zYzk1eHhfZXRodG9vbF9nZXRfZWVwcm9tX2xlbiwKIAkuZ2V0X2VlcHJvbQk9IHNtc2M5NXh4X2V0aHRvb2xfZ2V0X2VlcHJvbSwKIAkuc2V0X2VlcHJvbQk9IHNtc2M5NXh4X2V0aHRvb2xfc2V0X2VlcHJvbSwKLQkuZ2V0X3R4X2NzdW0JPSBzbXNjOTV4eF9ldGh0b29sX2dldF90eF9jc3VtLAotCS5zZXRfdHhfY3N1bQk9IHNtc2M5NXh4X2V0aHRvb2xfc2V0X3R4X2NzdW0sCi0JLmdldF9yeF9jc3VtCT0gc21zYzk1eHhfZXRodG9vbF9nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0JPSBzbXNjOTV4eF9ldGh0b29sX3NldF9yeF9jc3VtLAogfTsKIAogc3RhdGljIGludCBzbXNjOTV4eF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQpAQCAtNzMwLDcgKzY5MCw3IEBACiAJCW1zbGVlcCgxMCk7CiAJCWJtY3IgPSBzbXNjOTV4eF9tZGlvX3JlYWQoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IpOwogCQl0aW1lb3V0Kys7Ci0JfSB3aGlsZSAoKGJtY3IgJiBNSUlfQk1DUikgJiYgKHRpbWVvdXQgPCAxMDApKTsKKwl9IHdoaWxlICgoYm1jciAmIEJNQ1JfUkVTRVQpICYmICh0aW1lb3V0IDwgMTAwKSk7CiAKIAlpZiAodGltZW91dCA+PSAxMDApIHsKIAkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJ0aW1lb3V0IG9uIFBIWSBSZXNldCIpOwpAQCAtNzU1LDcgKzcxNSw2IEBACiBzdGF0aWMgaW50IHNtc2M5NXh4X3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldikKIHsKIAlzdHJ1Y3Qgc21zYzk1eHhfcHJpdiAqcGRhdGEgPSAoc3RydWN0IHNtc2M5NXh4X3ByaXYgKikoZGV2LT5kYXRhWzBdKTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZGV2LT5uZXQ7CiAJdTMyIHJlYWRfYnVmLCB3cml0ZV9idWYsIGJ1cnN0X2NhcDsKIAlpbnQgcmV0ID0gMCwgdGltZW91dDsKIApAQCAtOTc1LDEyICs5MzQsNyBAQAogCX0KIAogCS8qIEVuYWJsZSBvciBkaXNhYmxlIGNoZWNrc3VtIG9mZmxvYWQgZW5naW5lcyAqLwotCWV0aHRvb2xfb3Bfc2V0X3R4X2h3X2NzdW0obmV0ZGV2LCBwZGF0YS0+dXNlX3R4X2NzdW0pOwotCXJldCA9IHNtc2M5NXh4X3NldF9jc3VtcyhkZXYpOwotCWlmIChyZXQgPCAwKSB7Ci0JCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHNldCBjc3VtIG9mZmxvYWQ6ICVkXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KKwlzbXNjOTV4eF9zZXRfZmVhdHVyZXMoZGV2LT5uZXQsIGRldi0+bmV0LT5mZWF0dXJlcyk7CiAKIAlzbXNjOTV4eF9zZXRfbXVsdGljYXN0KGRldi0+bmV0KTsKIApAQCAtMTAxOSw2ICs5NzMsNyBAQAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAogCS5uZG9fZG9faW9jdGwgCQk9IHNtc2M5NXh4X2lvY3RsLAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc21zYzk1eHhfc2V0X211bHRpY2FzdCwKKwkubmRvX3NldF9mZWF0dXJlcwk9IHNtc2M5NXh4X3NldF9mZWF0dXJlcywKIH07CiAKIHN0YXRpYyBpbnQgc21zYzk1eHhfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQpAQCAtMTA0NSw4ICsxMDAwLDEyIEBACiAKIAlzcGluX2xvY2tfaW5pdCgmcGRhdGEtPm1hY19jcl9sb2NrKTsKIAotCXBkYXRhLT51c2VfdHhfY3N1bSA9IERFRkFVTFRfVFhfQ1NVTV9FTkFCTEU7Ci0JcGRhdGEtPnVzZV9yeF9jc3VtID0gREVGQVVMVF9SWF9DU1VNX0VOQUJMRTsKKwlpZiAoREVGQVVMVF9UWF9DU1VNX0VOQUJMRSkKKwkJZGV2LT5uZXQtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTTsKKwlpZiAoREVGQVVMVF9SWF9DU1VNX0VOQUJMRSkKKwkJZGV2LT5uZXQtPmZlYXR1cmVzIHw9IE5FVElGX0ZfUlhDU1VNOworCisJZGV2LT5uZXQtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9IV19DU1VNIHwgTkVUSUZfRl9SWENTVU07CiAKIAlzbXNjOTV4eF9pbml0X21hY19hZGRyZXNzKGRldik7CiAKQEAgLTEwNTYsNyArMTAxNSw3IEBACiAJZGV2LT5uZXQtPm5ldGRldl9vcHMgPSAmc21zYzk1eHhfbmV0ZGV2X29wczsKIAlkZXYtPm5ldC0+ZXRodG9vbF9vcHMgPSAmc21zYzk1eHhfZXRodG9vbF9vcHM7CiAJZGV2LT5uZXQtPmZsYWdzIHw9IElGRl9NVUxUSUNBU1Q7Ci0JZGV2LT5uZXQtPmhhcmRfaGVhZGVyX2xlbiArPSBTTVNDOTVYWF9UWF9PVkVSSEVBRDsKKwlkZXYtPm5ldC0+aGFyZF9oZWFkZXJfbGVuICs9IFNNU0M5NVhYX1RYX09WRVJIRUFEX0NTVU07CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwODAsOCArMTAzOSw2IEBACiAKIHN0YXRpYyBpbnQgc21zYzk1eHhfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBzbXNjOTV4eF9wcml2ICpwZGF0YSA9IChzdHJ1Y3Qgc21zYzk1eHhfcHJpdiAqKShkZXYtPmRhdGFbMF0pOwotCiAJd2hpbGUgKHNrYi0+bGVuID4gMCkgewogCQl1MzIgaGVhZGVyLCBhbGlnbl9jb3VudDsKIAkJc3RydWN0IHNrX2J1ZmYgKmF4X3NrYjsKQEAgLTExMjMsNyArMTA4MCw3IEBACiAKIAkJCS8qIGxhc3QgZnJhbWUgaW4gdGhpcyBiYXRjaCAqLwogCQkJaWYgKHNrYi0+bGVuID09IHNpemUpIHsKLQkJCQlpZiAocGRhdGEtPnVzZV9yeF9jc3VtKQorCQkJCWlmIChkZXYtPm5ldC0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkKIAkJCQkJc21zYzk1eHhfcnhfY3N1bV9vZmZsb2FkKHNrYik7CiAJCQkJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIDQpOyAvKiByZW1vdmUgZmNzICovCiAJCQkJc2tiLT50cnVlc2l6ZSA9IHNpemUgKyBzaXplb2Yoc3RydWN0IHNrX2J1ZmYpOwpAQCAtMTE0MSw3ICsxMDk4LDcgQEAKIAkJCWF4X3NrYi0+ZGF0YSA9IHBhY2tldDsKIAkJCXNrYl9zZXRfdGFpbF9wb2ludGVyKGF4X3NrYiwgc2l6ZSk7CiAKLQkJCWlmIChwZGF0YS0+dXNlX3J4X2NzdW0pCisJCQlpZiAoZGV2LT5uZXQtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pCiAJCQkJc21zYzk1eHhfcnhfY3N1bV9vZmZsb2FkKGF4X3NrYik7CiAJCQlza2JfdHJpbShheF9za2IsIGF4X3NrYi0+bGVuIC0gNCk7IC8qIHJlbW92ZSBmY3MgKi8KIAkJCWF4X3NrYi0+dHJ1ZXNpemUgPSBzaXplICsgc2l6ZW9mKHN0cnVjdCBza19idWZmKTsKQEAgLTExNzQsOCArMTEzMSw3IEBACiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnNtc2M5NXh4X3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwKIAkJCQkJIHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGZsYWdzKQogewotCXN0cnVjdCBzbXNjOTV4eF9wcml2ICpwZGF0YSA9IChzdHJ1Y3Qgc21zYzk1eHhfcHJpdiAqKShkZXYtPmRhdGFbMF0pOwotCWJvb2wgY3N1bSA9IHBkYXRhLT51c2VfdHhfY3N1bSAmJiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCk7CisJYm9vbCBjc3VtID0gc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTDsKIAlpbnQgb3ZlcmhlYWQgPSBjc3VtID8gU01TQzk1WFhfVFhfT1ZFUkhFQURfQ1NVTSA6IFNNU0M5NVhYX1RYX09WRVJIRUFEOwogCXUzMiB0eF9jbWRfYSwgdHhfY21kX2I7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwppbmRleCAwNjljMWNmLi5lNmRkMjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCkBAIC02NDUsNiArNjQ1LDcgQEAKIAlzdHJ1Y3QgZHJpdmVyX2luZm8JKmluZm8gPSBkZXYtPmRyaXZlcl9pbmZvOwogCWludAkJCXJldHZhbDsKIAorCWNsZWFyX2JpdChFVkVOVF9ERVZfT1BFTiwgJmRldi0+ZmxhZ3MpOwogCW5ldGlmX3N0b3BfcXVldWUgKG5ldCk7CiAKIAluZXRpZl9pbmZvKGRldiwgaWZkb3duLCBkZXYtPm5ldCwKQEAgLTczNiw2ICs3MzcsNyBAQAogCQl9CiAJfQogCisJc2V0X2JpdChFVkVOVF9ERVZfT1BFTiwgJmRldi0+ZmxhZ3MpOwogCW5ldGlmX3N0YXJ0X3F1ZXVlIChuZXQpOwogCW5ldGlmX2luZm8oZGV2LCBpZnVwLCBkZXYtPm5ldCwKIAkJICAgIm9wZW46IGVuYWJsZSBxdWV1ZWluZyAocnggJWQsIHR4ICVkKSBtdHUgJWQgJXMgZnJhbWluZ1xuIiwKQEAgLTEyNTksNiArMTI2MSw5IEBACiAJaWYgKGRldi0+ZHJpdmVyX2luZm8tPnVuYmluZCkKIAkJZGV2LT5kcml2ZXJfaW5mby0+dW5iaW5kIChkZXYsIGludGYpOwogCisJdXNiX2tpbGxfdXJiKGRldi0+aW50ZXJydXB0KTsKKwl1c2JfZnJlZV91cmIoZGV2LT5pbnRlcnJ1cHQpOworCiAJZnJlZV9uZXRkZXYobmV0KTsKIAl1c2JfcHV0X2RldiAoeGRldik7CiB9CkBAIC0xNDk4LDYgKzE1MDMsMTAgQEAKIAlpbnQgICAgICAgICAgICAgICAgICAgICByZXR2YWw7CiAKIAlpZiAoIS0tZGV2LT5zdXNwZW5kX2NvdW50KSB7CisJCS8qIHJlc3VtZSBpbnRlcnJ1cHQgVVJCcyAqLworCQlpZiAoZGV2LT5pbnRlcnJ1cHQgJiYgdGVzdF9iaXQoRVZFTlRfREVWX09QRU4sICZkZXYtPmZsYWdzKSkKKwkJCXVzYl9zdWJtaXRfdXJiKGRldi0+aW50ZXJydXB0LCBHRlBfTk9JTyk7CisKIAkJc3Bpbl9sb2NrX2lycSgmZGV2LT50eHEubG9jayk7CiAJCXdoaWxlICgocmVzID0gdXNiX2dldF9mcm9tX2FuY2hvcigmZGV2LT5kZWZlcnJlZCkpKSB7CiAKQEAgLTE1MTYsOSArMTUyNSwxMiBAQAogCQlzbXBfbWIoKTsKIAkJY2xlYXJfYml0KEVWRU5UX0RFVl9BU0xFRVAsICZkZXYtPmZsYWdzKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnR4cS5sb2NrKTsKLQkJaWYgKCEoZGV2LT50eHEucWxlbiA+PSBUWF9RTEVOKGRldikpKQotCQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2LT5uZXQpOwotCQl0YXNrbGV0X3NjaGVkdWxlICgmZGV2LT5iaCk7CisKKwkJaWYgKHRlc3RfYml0KEVWRU5UX0RFVl9PUEVOLCAmZGV2LT5mbGFncykpIHsKKwkJCWlmICghKGRldi0+dHhxLnFsZW4gPj0gVFhfUUxFTihkZXYpKSkKKwkJCQluZXRpZl9zdGFydF9xdWV1ZShkZXYtPm5ldCk7CisJCQl0YXNrbGV0X3NjaGVkdWxlICgmZGV2LT5iaCk7CisJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xNTI5LDkgKzE1NDEsOSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB1c2JuZXRfaW5pdCh2b2lkKQogewotCS8qIGNvbXBpbGVyIHNob3VsZCBvcHRpbWl6ZSB0aGlzIG91dCAqLwotCUJVSUxEX0JVR19PTiAoc2l6ZW9mICgoKHN0cnVjdCBza19idWZmICopMCktPmNiKQotCQkJPCBzaXplb2YgKHN0cnVjdCBza2JfZGF0YSkpOworCS8qIENvbXBpbGVyIHNob3VsZCBvcHRpbWl6ZSB0aGlzIG91dC4gKi8KKwlCVUlMRF9CVUdfT04oCisJCUZJRUxEX1NJWkVPRihzdHJ1Y3Qgc2tfYnVmZiwgY2IpIDwgc2l6ZW9mKHN0cnVjdCBza2JfZGF0YSkpOwogCiAJcmFuZG9tX2V0aGVyX2FkZHIobm9kZV9pZCk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92ZXRoLmMgYi9kcml2ZXJzL25ldC92ZXRoLmMKaW5kZXggMmRlOWI5MC4uODQ2MTU3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3ZldGguYwpAQCAtMjIsNyArMjIsNiBAQAogCiAjZGVmaW5lIE1JTl9NVFUgNjgJCS8qIE1pbiBMMyBNVFUgKi8KICNkZWZpbmUgTUFYX01UVSA2NTUzNQkJLyogTWF4IEwzIE1UVSAoYXJiaXRyYXJ5KSAqLwotI2RlZmluZSBNVFVfUEFEIChFVEhfSExFTiArIDQpICAvKiBNYXggZGlmZmVyZW5jZSBiZXR3ZWVuIEwyIGFuZCBMMyBzaXplIE1UVSAqLwogCiBzdHJ1Y3QgdmV0aF9uZXRfc3RhdHMgewogCXVuc2lnbmVkIGxvbmcJcnhfcGFja2V0czsKQEAgLTM2LDcgKzM1LDYgQEAKIHN0cnVjdCB2ZXRoX3ByaXYgewogCXN0cnVjdCBuZXRfZGV2aWNlICpwZWVyOwogCXN0cnVjdCB2ZXRoX25ldF9zdGF0cyBfX3BlcmNwdSAqc3RhdHM7Ci0JdW5zaWduZWQgaXBfc3VtbWVkOwogfTsKIAogLyoKQEAgLTUzLDcgKzUxLDcgQEAKIHsKIAljbWQtPnN1cHBvcnRlZAkJPSAwOwogCWNtZC0+YWR2ZXJ0aXNpbmcJPSAwOwotCWNtZC0+c3BlZWQJCT0gU1BFRURfMTAwMDA7CisJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgU1BFRURfMTAwMDApOwogCWNtZC0+ZHVwbGV4CQk9IERVUExFWF9GVUxMOwogCWNtZC0+cG9ydAkJPSBQT1JUX1RQOwogCWNtZC0+cGh5X2FkZHJlc3MJPSAwOwpAQCAtOTksNDcgKzk3LDEwIEBACiAJZGF0YVswXSA9IHByaXYtPnBlZXItPmlmaW5kZXg7CiB9CiAKLXN0YXRpYyB1MzIgdmV0aF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCB2ZXRoX3ByaXYgKnByaXY7Ci0KLQlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gcHJpdi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotfQotCi1zdGF0aWMgaW50IHZldGhfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHZldGhfcHJpdiAqcHJpdjsKLQotCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXByaXYtPmlwX3N1bW1lZCA9IGRhdGEgPyBDSEVDS1NVTV9VTk5FQ0VTU0FSWSA6IENIRUNLU1VNX05PTkU7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1MzIgdmV0aF9nZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJldHVybiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTk9fQ1NVTSkgIT0gMDsKLX0KLQotc3RhdGljIGludCB2ZXRoX3NldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCWlmIChkYXRhKQotCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTk9fQ1NVTTsKLQllbHNlCi0JCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfTk9fQ1NVTTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB2ZXRoX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MJCT0gdmV0aF9nZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvCQk9IHZldGhfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCi0JLmdldF9yeF9jc3VtCQk9IHZldGhfZ2V0X3J4X2NzdW0sCi0JLnNldF9yeF9jc3VtCQk9IHZldGhfc2V0X3J4X2NzdW0sCi0JLmdldF90eF9jc3VtCQk9IHZldGhfZ2V0X3R4X2NzdW0sCi0JLnNldF90eF9jc3VtCQk9IHZldGhfc2V0X3R4X2NzdW0sCi0JLmdldF9zZwkJCT0gZXRodG9vbF9vcF9nZXRfc2csCi0JLnNldF9zZwkJCT0gZXRodG9vbF9vcF9zZXRfc2csCiAJLmdldF9zdHJpbmdzCQk9IHZldGhfZ2V0X3N0cmluZ3MsCiAJLmdldF9zc2V0X2NvdW50CQk9IHZldGhfZ2V0X3NzZXRfY291bnQsCiAJLmdldF9ldGh0b29sX3N0YXRzCT0gdmV0aF9nZXRfZXRodG9vbF9zdGF0cywKQEAgLTE2OCw4ICsxMjksOSBAQAogCiAJLyogZG9uJ3QgY2hhbmdlIGlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMLCBhcyB0aGF0CiAJICAgd2lsbCBjYXVzZSBiYWQgY2hlY2tzdW0gb24gZm9yd2FyZGVkIHBhY2tldHMgKi8KLQlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fTk9ORSkKLQkJc2tiLT5pcF9zdW1tZWQgPSByY3ZfcHJpdi0+aXBfc3VtbWVkOworCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9OT05FICYmCisJICAgIHJjdi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkKKwkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAogCWxlbmd0aCA9IHNrYi0+bGVuOwogCWlmIChkZXZfZm9yd2FyZF9za2IocmN2LCBza2IpICE9IE5FVF9SWF9TVUNDRVNTKQpAQCAtMzA0LDYgKzI2Niw4IEBACiAJZGV2LT5ldGh0b29sX29wcyA9ICZ2ZXRoX2V0aHRvb2xfb3BzOwogCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MTFRYOwogCWRldi0+ZGVzdHJ1Y3RvciA9IHZldGhfZGV2X2ZyZWU7CisKKwlkZXYtPmh3X2ZlYXR1cmVzID0gTkVUSUZfRl9OT19DU1VNIHwgTkVUSUZfRl9TRyB8IE5FVElGX0ZfUlhDU1VNOwogfQogCiAvKgpAQCAtNDAzLDYgKzM2NywxNyBAQAogCWlmICh0YltJRkxBX0FERFJFU1NdID09IE5VTEwpCiAJCXJhbmRvbV9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpOwogCisJaWYgKHRiW0lGTEFfSUZOQU1FXSkKKwkJbmxhX3N0cmxjcHkoZGV2LT5uYW1lLCB0YltJRkxBX0lGTkFNRV0sIElGTkFNU0laKTsKKwllbHNlCisJCXNucHJpbnRmKGRldi0+bmFtZSwgSUZOQU1TSVosIERSVl9OQU1FICIlJWQiKTsKKworCWlmIChzdHJjaHIoZGV2LT5uYW1lLCAnJScpKSB7CisJCWVyciA9IGRldl9hbGxvY19uYW1lKGRldiwgZGV2LT5uYW1lKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycl9hbGxvY19uYW1lOworCX0KKwogCWVyciA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycl9yZWdpc3Rlcl9kZXY7CkBAIC00MjIsNiArMzk3LDcgQEAKIAogZXJyX3JlZ2lzdGVyX2RldjoKIAkvKiBub3RoaW5nIHRvIGRvICovCitlcnJfYWxsb2NfbmFtZToKIGVycl9jb25maWd1cmVfcGVlcjoKIAl1bnJlZ2lzdGVyX25ldGRldmljZShwZWVyKTsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMgYi9kcml2ZXJzL25ldC92aWEtcmhpbmUuYwppbmRleCBlYjVkNzVkLi43ZjIzYWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aWEtcmhpbmUuYworKysgYi9kcml2ZXJzL25ldC92aWEtcmhpbmUuYwpAQCAtMjksNiArMjksOCBAQAogCiAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNkZWZpbmUgRFJWX05BTUUJInZpYS1yaGluZSIKICNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuNS4wIgogI2RlZmluZSBEUlZfUkVMREFURQkiMjAxMC0xMC0wOSIKQEAgLTM3LDYgKzM5LDcgQEAKIC8qIEEgZmV3IHVzZXItY29uZmlndXJhYmxlIHZhbHVlcy4KICAgIFRoZXNlIG1heSBiZSBtb2RpZmllZCB3aGVuIGEgZHJpdmVyIG1vZHVsZSBpcyBsb2FkZWQuICovCiAKKyNkZWZpbmUgREVCVUcKIHN0YXRpYyBpbnQgZGVidWcgPSAxOwkvKiAxIG5vcm1hbCBtZXNzYWdlcywgMCBxdWlldCAuLiA3IHZlcmJvc2UuICovCiBzdGF0aWMgaW50IG1heF9pbnRlcnJ1cHRfd29yayA9IDIwOwogCkBAIC0xMTEsOCArMTE0LDcgQEAKIAogLyogVGhlc2UgaWRlbnRpZnkgdGhlIGRyaXZlciBiYXNlIHZlcnNpb24gYW5kIG1heSBub3QgYmUgcmVtb3ZlZC4gKi8KIHN0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9Ci0JS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2MS4xMC1MSyIgRFJWX1ZFUlNJT04gIiAiIERSVl9SRUxEQVRFCi0JIiBXcml0dGVuIGJ5IERvbmFsZCBCZWNrZXJcbiI7CisJInYxLjEwLUxLIiBEUlZfVkVSU0lPTiAiICIgRFJWX1JFTERBVEUgIiBXcml0dGVuIGJ5IERvbmFsZCBCZWNrZXIiOwogCiAvKiBUaGlzIGRyaXZlciB3YXMgd3JpdHRlbiB0byB1c2UgUENJIG1lbW9yeSBzcGFjZS4gU29tZSBlYXJseSB2ZXJzaW9ucwogICAgb2YgdGhlIFJoaW5lIG1heSBvbmx5IHdvcmsgY29ycmVjdGx5IHdpdGggSS9PIHNwYWNlIGFjY2Vzc2VzLiAqLwpAQCAtNDk1LDE0ICs0OTcsMTUgQEAKIHN0YXRpYyB2b2lkIHJoaW5lX2luaXRfY2FtX2ZpbHRlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHJoaW5lX3VwZGF0ZV92Y2FtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCi0jZGVmaW5lIFJISU5FX1dBSVRfRk9SKGNvbmRpdGlvbikgZG8gewkJCQkJXAotCWludCBpPTEwMjQ7CQkJCQkJCVwKLQl3aGlsZSAoIShjb25kaXRpb24pICYmIC0taSkJCQkJCVwKLQkJOwkJCQkJCQlcCi0JaWYgKGRlYnVnID4gMSAmJiBpIDwgNTEyKQkJCQkJXAotCQlwcmludGsoS0VSTl9JTkZPICIlczogJTRkIGN5Y2xlcyB1c2VkIEAgJXM6JWRcbiIsCVwKLQkJCQlEUlZfTkFNRSwgMTAyNC1pLCBfX2Z1bmNfXywgX19MSU5FX18pOwlcCi19IHdoaWxlKDApCisjZGVmaW5lIFJISU5FX1dBSVRfRk9SKGNvbmRpdGlvbikJCQkJXAorZG8gewkJCQkJCQkJXAorCWludCBpID0gMTAyNDsJCQkJCQlcCisJd2hpbGUgKCEoY29uZGl0aW9uKSAmJiAtLWkpCQkJCVwKKwkJOwkJCQkJCVwKKwlpZiAoZGVidWcgPiAxICYmIGkgPCA1MTIpCQkJCVwKKwkJcHJfaW5mbygiJTRkIGN5Y2xlcyB1c2VkIEAgJXM6JWRcbiIsCQlcCisJCQkxMDI0IC0gaSwgX19mdW5jX18sIF9fTElORV9fKTsJCVwKK30gd2hpbGUgKDApCiAKIHN0YXRpYyBpbmxpbmUgdTMyIGdldF9pbnRyX3N0YXR1cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtNTcxLDggKzU3NCw4IEBACiAJCQlkZWZhdWx0OgogCQkJCXJlYXNvbiA9ICJVbmtub3duIjsKIAkJCX0KLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBXb2tlIHN5c3RlbSB1cC4gUmVhc29uOiAlcy5cbiIsCi0JCQkgICAgICAgRFJWX05BTUUsIHJlYXNvbik7CisJCQluZXRkZXZfaW5mbyhkZXYsICJXb2tlIHN5c3RlbSB1cC4gUmVhc29uOiAlc1xuIiwKKwkJCQkgICAgcmVhc29uKTsKIAkJfQogCX0KIH0KQEAgLTU4Niw4ICs1ODksNyBAQAogCUlPU1lOQzsKIAogCWlmIChpb3JlYWQ4KGlvYWRkciArIENoaXBDbWQxKSAmIENtZDFSZXNldCkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogUmVzZXQgbm90IGNvbXBsZXRlIHlldC4gIgotCQkJIlRyeWluZyBoYXJkZXIuXG4iLCBEUlZfTkFNRSk7CisJCW5ldGRldl9pbmZvKGRldiwgIlJlc2V0IG5vdCBjb21wbGV0ZSB5ZXQuIFRyeWluZyBoYXJkZXIuXG4iKTsKIAogCQkvKiBGb3JjZSByZXNldCAqLwogCQlpZiAocnAtPnF1aXJrcyAmIHJxRm9yY2VSZXNldCkKQEAgLTU5OCw5ICs2MDAsOSBAQAogCX0KIAogCWlmIChkZWJ1ZyA+IDEpCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZXNldCAlcy5cbiIsIGRldi0+bmFtZSwKLQkJCShpb3JlYWQ4KGlvYWRkciArIENoaXBDbWQxKSAmIENtZDFSZXNldCkgPwotCQkJImZhaWxlZCIgOiAic3VjY2VlZGVkIik7CisJCW5ldGRldl9pbmZvKGRldiwgIlJlc2V0ICVzXG4iLAorCQkJICAgIChpb3JlYWQ4KGlvYWRkciArIENoaXBDbWQxKSAmIENtZDFSZXNldCkgPworCQkJICAgICJmYWlsZWQiIDogInN1Y2NlZWRlZCIpOwogfQogCiAjaWZkZWYgVVNFX01NSU8KQEAgLTcyOCw5ICs3MzAsNyBAQAogCiAvKiB3aGVuIGJ1aWx0IGludG8gdGhlIGtlcm5lbCwgd2Ugb25seSBwcmludCB2ZXJzaW9uIGlmIGRldmljZSBpcyBmb3VuZCAqLwogI2lmbmRlZiBNT0RVTEUKLQlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKLQlpZiAoIXByaW50ZWRfdmVyc2lvbisrKQotCQlwcmludGsodmVyc2lvbik7CisJcHJfaW5mb19vbmNlKCIlc1xuIiwgdmVyc2lvbik7CiAjZW5kaWYKIAogCWlvX3NpemUgPSAyNTY7CkBAIC03NjUsOCArNzY1LDggQEAKIAkvKiB0aGlzIHNob3VsZCBhbHdheXMgYmUgc3VwcG9ydGVkICovCiAJcmMgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpOwogCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgIjMyLWJpdCBQQ0kgRE1BIGFkZHJlc3NlcyBub3Qgc3VwcG9ydGVkIGJ5ICIKLQkJICAgICAgICJ0aGUgY2FyZCE/XG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJIjMyLWJpdCBQQ0kgRE1BIGFkZHJlc3NlcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBjYXJkIT9cbiIpOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCkBAIC03NzQsNyArNzc0LDcgQEAKIAlpZiAoKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkgPCBpb19zaXplKSB8fAogCSAgICAocGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSA8IGlvX3NpemUpKSB7CiAJCXJjID0gLUVJTzsKLQkJcHJpbnRrKEtFUk5fRVJSICJJbnN1ZmZpY2llbnQgUENJIHJlc291cmNlcywgYWJvcnRpbmdcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJbnN1ZmZpY2llbnQgUENJIHJlc291cmNlcywgYWJvcnRpbmdcbiIpOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCkBAIC03ODYsNyArNzg2LDcgQEAKIAlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IHJoaW5lX3ByaXZhdGUpKTsKIAlpZiAoIWRldikgewogCQlyYyA9IC1FTk9NRU07Ci0JCXByaW50ayhLRVJOX0VSUiAiYWxsb2NfZXRoZXJkZXYgZmFpbGVkXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiYWxsb2NfZXRoZXJkZXYgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfb3V0OwogCX0KIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwpAQCAtODA0LDggKzgwNCw5IEBACiAJaW9hZGRyID0gcGNpX2lvbWFwKHBkZXYsIGJhciwgaW9fc2l6ZSk7CiAJaWYgKCFpb2FkZHIpIHsKIAkJcmMgPSAtRUlPOwotCQlwcmludGsoS0VSTl9FUlIgImlvcmVtYXAgZmFpbGVkIGZvciBkZXZpY2UgJXMsIHJlZ2lvbiAweCVYICIKLQkJICAgICAgICJAIDB4JWxYXG4iLCBwY2lfbmFtZShwZGV2KSwgaW9fc2l6ZSwgbWVtYWRkcik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJpb3JlbWFwIGZhaWxlZCBmb3IgZGV2aWNlICVzLCByZWdpb24gMHglWCBAIDB4JWxYXG4iLAorCQkJcGNpX25hbWUocGRldiksIGlvX3NpemUsIG1lbWFkZHIpOwogCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7CiAJfQogCkBAIC04MjAsOCArODIxLDkgQEAKIAkJdW5zaWduZWQgY2hhciBiID0gcmVhZGIoaW9hZGRyK3JlZyk7CiAJCWlmIChhICE9IGIpIHsKIAkJCXJjID0gLUVJTzsKLQkJCXByaW50ayhLRVJOX0VSUiAiTU1JTyBkbyBub3QgbWF0Y2ggUElPIFslMDJ4XSAiCi0JCQkgICAgICAgIiglMDJ4ICE9ICUwMngpXG4iLCByZWcsIGEsIGIpOworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJNTUlPIGRvIG5vdCBtYXRjaCBQSU8gWyUwMnhdICglMDJ4ICE9ICUwMngpXG4iLAorCQkJCXJlZywgYSwgYik7CiAJCQlnb3RvIGVycl9vdXRfdW5tYXA7CiAJCX0KIAl9CkBAIC04MzYsMTMgKzgzOCwxNSBAQAogCiAJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKIAkJZGV2LT5kZXZfYWRkcltpXSA9IGlvcmVhZDgoaW9hZGRyICsgU3RhdGlvbkFkZHIgKyBpKTsKLQltZW1jcHkoZGV2LT5wZXJtX2FkZHIsIGRldi0+ZGV2X2FkZHIsIGRldi0+YWRkcl9sZW4pOwogCi0JaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+cGVybV9hZGRyKSkgewotCQlyYyA9IC1FSU87Ci0JCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBNQUMgYWRkcmVzc1xuIik7Ci0JCWdvdG8gZXJyX291dF91bm1hcDsKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcikpIHsKKwkJLyogUmVwb3J0IGl0IGFuZCB1c2UgYSByYW5kb20gZXRoZXJuZXQgYWRkcmVzcyBpbnN0ZWFkICovCisJCW5ldGRldl9lcnIoZGV2LCAiSW52YWxpZCBNQUMgYWRkcmVzczogJXBNXG4iLCBkZXYtPmRldl9hZGRyKTsKKwkJcmFuZG9tX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcik7CisJCW5ldGRldl9pbmZvKGRldiwgIlVzaW5nIHJhbmRvbSBNQUMgYWRkcmVzczogJXBNXG4iLAorCQkJICAgIGRldi0+ZGV2X2FkZHIpOwogCX0KKwltZW1jcHkoZGV2LT5wZXJtX2FkZHIsIGRldi0+ZGV2X2FkZHIsIGRldi0+YWRkcl9sZW4pOwogCiAJLyogRm9yIFJoaW5lLUkvSUksIHBoeV9pZCBpcyBsb2FkZWQgZnJvbSBFRVBST00gKi8KIAlpZiAoIXBoeV9pZCkKQEAgLTg3OCwxNCArODgyLDE0IEBACiAJaWYgKHJjKQogCQlnb3RvIGVycl9vdXRfdW5tYXA7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogVklBICVzIGF0IDB4JWx4LCAlcE0sIElSUSAlZC5cbiIsCi0JICAgICAgIGRldi0+bmFtZSwgbmFtZSwKKwluZXRkZXZfaW5mbyhkZXYsICJWSUEgJXMgYXQgMHglbHgsICVwTSwgSVJRICVkXG4iLAorCQkgICAgbmFtZSwKICNpZmRlZiBVU0VfTU1JTwotCSAgICAgICBtZW1hZGRyLAorCQkgICAgbWVtYWRkciwKICNlbHNlCi0JICAgICAgIChsb25nKWlvYWRkciwKKwkJICAgIChsb25nKWlvYWRkciwKICNlbmRpZgotCSAgICAgICBkZXYtPmRldl9hZGRyLCBwZGV2LT5pcnEpOworCQkgICAgZGV2LT5kZXZfYWRkciwgcGRldi0+aXJxKTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCkBAIC04OTYsMTEgKzkwMCwxMSBAQAogCQltZGlvX3dyaXRlKGRldiwgcGh5X2lkLCBNSUlfQk1DUiwgbWlpX2NtZCk7CiAJCWlmIChtaWlfc3RhdHVzICE9IDB4ZmZmZiAmJiBtaWlfc3RhdHVzICE9IDB4MDAwMCkgewogCQkJcnAtPm1paV9pZi5hZHZlcnRpc2luZyA9IG1kaW9fcmVhZChkZXYsIHBoeV9pZCwgNCk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogTUlJIFBIWSBmb3VuZCBhdCBhZGRyZXNzICIKLQkJCSAgICAgICAiJWQsIHN0YXR1cyAweCU0LjR4IGFkdmVydGlzaW5nICU0LjR4ICIKLQkJCSAgICAgICAiTGluayAlNC40eC5cbiIsIGRldi0+bmFtZSwgcGh5X2lkLAotCQkJICAgICAgIG1paV9zdGF0dXMsIHJwLT5taWlfaWYuYWR2ZXJ0aXNpbmcsCi0JCQkgICAgICAgbWRpb19yZWFkKGRldiwgcGh5X2lkLCA1KSk7CisJCQluZXRkZXZfaW5mbyhkZXYsCisJCQkJICAgICJNSUkgUEhZIGZvdW5kIGF0IGFkZHJlc3MgJWQsIHN0YXR1cyAweCUwNHggYWR2ZXJ0aXNpbmcgJTA0eCBMaW5rICUwNHhcbiIsCisJCQkJICAgIHBoeV9pZCwKKwkJCQkgICAgbWlpX3N0YXR1cywgcnAtPm1paV9pZi5hZHZlcnRpc2luZywKKwkJCQkgICAgbWRpb19yZWFkKGRldiwgcGh5X2lkLCA1KSk7CiAKIAkJCS8qIHNldCBJRkZfUlVOTklORyAqLwogCQkJaWYgKG1paV9zdGF0dXMgJiBCTVNSX0xTVEFUVVMpCkBAIC05MTIsOCArOTE2LDcgQEAKIAl9CiAJcnAtPm1paV9pZi5waHlfaWQgPSBwaHlfaWQ7CiAJaWYgKGRlYnVnID4gMSAmJiBhdm9pZF9EMykKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE5vIEQzIHBvd2VyIHN0YXRlIGF0IHNodXRkb3duLlxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7CisJCW5ldGRldl9pbmZvKGRldiwgIk5vIEQzIHBvd2VyIHN0YXRlIGF0IHNodXRkb3duXG4iKTsKIAogCXJldHVybiAwOwogCkBAIC05MzgsNyArOTQxLDcgQEAKIAkJCQkgICAgVFhfUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCB0eF9kZXNjKSwKIAkJCQkgICAgJnJpbmdfZG1hKTsKIAlpZiAoIXJpbmcpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgYWxsb2NhdGUgRE1BIG1lbW9yeS5cbiIpOworCQluZXRkZXZfZXJyKGRldiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBETUEgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWlmIChycC0+cXVpcmtzICYgcnFSaGluZUkpIHsKQEAgLTEwOTgsOCArMTEwMSw4IEBACiAJICAgIGlvd3JpdGU4KGlvcmVhZDgoaW9hZGRyICsgQ2hpcENtZDEpICYgfkNtZDFGRHVwbGV4LAogCQkgICBpb2FkZHIgKyBDaGlwQ21kMSk7CiAJaWYgKGRlYnVnID4gMSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGZvcmNlX21lZGlhICVkLCBjYXJyaWVyICVkXG4iLCBkZXYtPm5hbWUsCi0JCQlycC0+bWlpX2lmLmZvcmNlX21lZGlhLCBuZXRpZl9jYXJyaWVyX29rKGRldikpOworCQluZXRkZXZfaW5mbyhkZXYsICJmb3JjZV9tZWRpYSAlZCwgY2FycmllciAlZFxuIiwKKwkJCSAgICBycC0+bWlpX2lmLmZvcmNlX21lZGlhLCBuZXRpZl9jYXJyaWVyX29rKGRldikpOwogfQogCiAvKiBDYWxsZWQgYWZ0ZXIgc3RhdHVzIG9mIGZvcmNlX21lZGlhIHBvc3NpYmx5IGNoYW5nZWQgKi8KQEAgLTExMTMsOSArMTExNiw4IEBACiAJZWxzZQkvKiBMZXQgTU1JIGxpYnJhcnkgdXBkYXRlIGNhcnJpZXIgc3RhdHVzICovCiAJCXJoaW5lX2NoZWNrX21lZGlhKG1paS0+ZGV2LCAwKTsKIAlpZiAoZGVidWcgPiAxKQotCQlwcmludGsoS0VSTl9JTkZPICIlczogZm9yY2VfbWVkaWEgJWQsIGNhcnJpZXIgJWRcbiIsCi0JCSAgICAgICBtaWktPmRldi0+bmFtZSwgbWlpLT5mb3JjZV9tZWRpYSwKLQkJICAgICAgIG5ldGlmX2NhcnJpZXJfb2sobWlpLT5kZXYpKTsKKwkJbmV0ZGV2X2luZm8obWlpLT5kZXYsICJmb3JjZV9tZWRpYSAlZCwgY2FycmllciAlZFxuIiwKKwkJCSAgICBtaWktPmZvcmNlX21lZGlhLCBuZXRpZl9jYXJyaWVyX29rKG1paS0+ZGV2KSk7CiB9CiAKIC8qKgpAQCAtMTQwMiw4ICsxNDA0LDcgQEAKIAkJcmV0dXJuIHJjOwogCiAJaWYgKGRlYnVnID4gMSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByaGluZV9vcGVuKCkgaXJxICVkLlxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgcnAtPnBkZXYtPmlycSk7CisJCW5ldGRldl9kYmcoZGV2LCAiJXMoKSBpcnEgJWRcbiIsIF9fZnVuY19fLCBycC0+cGRldi0+aXJxKTsKIAogCXJjID0gYWxsb2NfcmluZyhkZXYpOwogCWlmIChyYykgewpAQCAtMTQxNSwxMCArMTQxNiw5IEBACiAJcmhpbmVfY2hpcF9yZXNldChkZXYpOwogCWluaXRfcmVnaXN0ZXJzKGRldik7CiAJaWYgKGRlYnVnID4gMikKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBEb25lIHJoaW5lX29wZW4oKSwgc3RhdHVzICU0LjR4ICIKLQkJICAgICAgICJNSUkgc3RhdHVzOiAlNC40eC5cbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGlvcmVhZDE2KGlvYWRkciArIENoaXBDbWQpLAotCQkgICAgICAgbWRpb19yZWFkKGRldiwgcnAtPm1paV9pZi5waHlfaWQsIE1JSV9CTVNSKSk7CisJCW5ldGRldl9kYmcoZGV2LCAiJXMoKSBEb25lIC0gc3RhdHVzICUwNHggTUlJIHN0YXR1czogJTA0eFxuIiwKKwkJCSAgIF9fZnVuY19fLCBpb3JlYWQxNihpb2FkZHIgKyBDaGlwQ21kKSwKKwkJCSAgIG1kaW9fcmVhZChkZXYsIHJwLT5taWlfaWYucGh5X2lkLCBNSUlfQk1TUikpOwogCiAJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIApAQCAtMTQ2MSwxMCArMTQ2MSw5IEBACiAJc3RydWN0IHJoaW5lX3ByaXZhdGUgKnJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHJwLT5iYXNlOwogCi0JcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFRyYW5zbWl0IHRpbWVkIG91dCwgc3RhdHVzICU0LjR4LCBQSFkgc3RhdHVzICIKLQkgICAgICAgIiU0LjR4LCByZXNldHRpbmcuLi5cbiIsCi0JICAgICAgIGRldi0+bmFtZSwgaW9yZWFkMTYoaW9hZGRyICsgSW50clN0YXR1cyksCi0JICAgICAgIG1kaW9fcmVhZChkZXYsIHJwLT5taWlfaWYucGh5X2lkLCBNSUlfQk1TUikpOworCW5ldGRldl93YXJuKGRldiwgIlRyYW5zbWl0IHRpbWVkIG91dCwgc3RhdHVzICUwNHgsIFBIWSBzdGF0dXMgJTA0eCwgcmVzZXR0aW5nLi4uXG4iLAorCQkgICAgaW9yZWFkMTYoaW9hZGRyICsgSW50clN0YXR1cyksCisJCSAgICBtZGlvX3JlYWQoZGV2LCBycC0+bWlpX2lmLnBoeV9pZCwgTUlJX0JNU1IpKTsKIAogCXNjaGVkdWxlX3dvcmsoJnJwLT5yZXNldF90YXNrKTsKIH0KQEAgLTE1NTEsOCArMTU1MCw4IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnAtPmxvY2ssIGZsYWdzKTsKIAogCWlmIChkZWJ1ZyA+IDQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmFuc21pdCBmcmFtZSAjJWQgcXVldWVkIGluIHNsb3QgJWQuXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBycC0+Y3VyX3R4LTEsIGVudHJ5KTsKKwkJbmV0ZGV2X2RiZyhkZXYsICJUcmFuc21pdCBmcmFtZSAjJWQgcXVldWVkIGluIHNsb3QgJWRcbiIsCisJCQkgICBycC0+Y3VyX3R4LTEsIGVudHJ5KTsKIAl9CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KQEAgLTE1NzgsOCArMTU3Nyw4IEBACiAJCUlPU1lOQzsKIAogCQlpZiAoZGVidWcgPiA0KQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbnRlcnJ1cHQsIHN0YXR1cyAlOC44eC5cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBpbnRyX3N0YXR1cyk7CisJCQluZXRkZXZfZGJnKGRldiwgIkludGVycnVwdCwgc3RhdHVzICUwOHhcbiIsCisJCQkJICAgaW50cl9zdGF0dXMpOwogCiAJCWlmIChpbnRyX3N0YXR1cyAmIChJbnRyUnhEb25lIHwgSW50clJ4RXJyIHwgSW50clJ4RHJvcHBlZCB8CiAJCQkJICAgSW50clJ4V2FrZVVwIHwgSW50clJ4RW1wdHkgfCBJbnRyUnhOb0J1ZikpIHsKQEAgLTE1OTcsOSArMTU5Niw5IEBACiAJCQkJUkhJTkVfV0FJVF9GT1IoIShpb3JlYWQ4KGlvYWRkcitDaGlwQ21kKSAmIENtZFR4T24pKTsKIAkJCQlpZiAoZGVidWcgPiAyICYmCiAJCQkJICAgIGlvcmVhZDgoaW9hZGRyK0NoaXBDbWQpICYgQ21kVHhPbikKLQkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICIKLQkJCQkJICAgICAgICJyaGluZV9pbnRlcnJ1cHQoKSBUeCBlbmdpbmUgIgotCQkJCQkgICAgICAgInN0aWxsIG9uLlxuIiwgZGV2LT5uYW1lKTsKKwkJCQkJbmV0ZGV2X3dhcm4oZGV2LAorCQkJCQkJICAgICIlczogVHggZW5naW5lIHN0aWxsIG9uXG4iLAorCQkJCQkJICAgIF9fZnVuY19fKTsKIAkJCX0KIAkJCXJoaW5lX3R4KGRldik7CiAJCX0KQEAgLTE2MTEsMTYgKzE2MTAsMTUgQEAKIAkJCXJoaW5lX2Vycm9yKGRldiwgaW50cl9zdGF0dXMpOwogCiAJCWlmICgtLWJvZ3VzY250IDwgMCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFRvbyBtdWNoIHdvcmsgYXQgaW50ZXJydXB0LCAiCi0JCQkgICAgICAgInN0YXR1cz0lIzguOHguXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgaW50cl9zdGF0dXMpOworCQkJbmV0ZGV2X3dhcm4oZGV2LCAiVG9vIG11Y2ggd29yayBhdCBpbnRlcnJ1cHQsIHN0YXR1cz0lIzA4eFxuIiwKKwkJCQkgICAgaW50cl9zdGF0dXMpOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKIAlpZiAoZGVidWcgPiAzKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGV4aXRpbmcgaW50ZXJydXB0LCBzdGF0dXM9JTguOHguXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBpb3JlYWQxNihpb2FkZHIgKyBJbnRyU3RhdHVzKSk7CisJCW5ldGRldl9kYmcoZGV2LCAiZXhpdGluZyBpbnRlcnJ1cHQsIHN0YXR1cz0lMDh4XG4iLAorCQkJICAgaW9yZWFkMTYoaW9hZGRyICsgSW50clN0YXR1cykpOwogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogfQogCkBAIC0xNjM3LDE1ICsxNjM1LDE0IEBACiAJd2hpbGUgKHJwLT5kaXJ0eV90eCAhPSBycC0+Y3VyX3R4KSB7CiAJCXR4c3RhdHVzID0gbGUzMl90b19jcHUocnAtPnR4X3JpbmdbZW50cnldLnR4X3N0YXR1cyk7CiAJCWlmIChkZWJ1ZyA+IDYpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiVHggc2NhdmVuZ2UgJWQgc3RhdHVzICU4Ljh4LlxuIiwKLQkJCSAgICAgICBlbnRyeSwgdHhzdGF0dXMpOworCQkJbmV0ZGV2X2RiZyhkZXYsICJUeCBzY2F2ZW5nZSAlZCBzdGF0dXMgJTA4eFxuIiwKKwkJCQkgICBlbnRyeSwgdHhzdGF0dXMpOwogCQlpZiAodHhzdGF0dXMgJiBEZXNjT3duKQogCQkJYnJlYWs7CiAJCWlmICh0eHN0YXR1cyAmIDB4ODAwMCkgewogCQkJaWYgKGRlYnVnID4gMSkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRyYW5zbWl0IGVycm9yLCAiCi0JCQkJICAgICAgICJUeCBzdGF0dXMgJTguOHguXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIHR4c3RhdHVzKTsKKwkJCQluZXRkZXZfZGJnKGRldiwgIlRyYW5zbWl0IGVycm9yLCBUeCBzdGF0dXMgJTA4eFxuIiwKKwkJCQkJICAgdHhzdGF0dXMpOwogCQkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCWlmICh0eHN0YXR1cyAmIDB4MDQwMCkKIAkJCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CkBAIC0xNjY4LDkgKzE2NjUsOSBAQAogCQkJZWxzZQogCQkJCWRldi0+c3RhdHMuY29sbGlzaW9ucyArPSB0eHN0YXR1cyAmIDB4MEY7CiAJCQlpZiAoZGVidWcgPiA2KQotCQkJCXByaW50ayhLRVJOX0RFQlVHICJjb2xsaXNpb25zOiAlMS4xeDolMS4xeFxuIiwKLQkJCQkgICAgICAgKHR4c3RhdHVzID4+IDMpICYgMHhGLAotCQkJCSAgICAgICB0eHN0YXR1cyAmIDB4Rik7CisJCQkJbmV0ZGV2X2RiZyhkZXYsICJjb2xsaXNpb25zOiAlMS4xeDolMS4xeFxuIiwKKwkJCQkJICAgKHR4c3RhdHVzID4+IDMpICYgMHhGLAorCQkJCQkgICB0eHN0YXR1cyAmIDB4Rik7CiAJCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHJwLT50eF9za2J1ZmZbZW50cnldLT5sZW47CiAJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJfQpAQCAtMTcwMyw3ICsxNzAwLDcgQEAKIHN0YXRpYyBpbmxpbmUgdTE2IHJoaW5lX2dldF92bGFuX3RjaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZGF0YV9zaXplKQogewogCXU4ICp0cmFpbGVyID0gKHU4ICopc2tiLT5kYXRhICsgKChkYXRhX3NpemUgKyAzKSAmIH4zKSArIDI7Ci0JcmV0dXJuIG50b2hzKCoodTE2ICopdHJhaWxlcik7CisJcmV0dXJuIGJlMTZfdG9fY3B1cCgoX19iZTE2ICopdHJhaWxlcik7CiB9CiAKIC8qIFByb2Nlc3MgdXAgdG8gbGltaXQgZnJhbWVzIGZyb20gcmVjZWl2ZSByaW5nICovCkBAIC0xNzE0LDkgKzE3MTEsOSBAQAogCWludCBlbnRyeSA9IHJwLT5jdXJfcnggJSBSWF9SSU5HX1NJWkU7CiAKIAlpZiAoZGVidWcgPiA0KSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogcmhpbmVfcngoKSwgZW50cnkgJWQgc3RhdHVzICU4Ljh4LlxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZW50cnksCi0JCSAgICAgICBsZTMyX3RvX2NwdShycC0+cnhfaGVhZF9kZXNjLT5yeF9zdGF0dXMpKTsKKwkJbmV0ZGV2X2RiZyhkZXYsICIlcygpLCBlbnRyeSAlZCBzdGF0dXMgJTA4eFxuIiwKKwkJCSAgIF9fZnVuY19fLCBlbnRyeSwKKwkJCSAgIGxlMzJfdG9fY3B1KHJwLT5yeF9oZWFkX2Rlc2MtPnJ4X3N0YXR1cykpOwogCX0KIAogCS8qIElmIEVPUCBpcyBzZXQgb24gdGhlIG5leHQgZW50cnksIGl0J3MgYSBuZXcgcGFja2V0LiBTZW5kIGl0IHVwLiAqLwpAQCAtMTczMCwyNiArMTcyNywyNiBAQAogCQkJYnJlYWs7CiAKIAkJaWYgKGRlYnVnID4gNCkKLQkJCXByaW50ayhLRVJOX0RFQlVHICJyaGluZV9yeCgpIHN0YXR1cyBpcyAlOC44eC5cbiIsCi0JCQkgICAgICAgZGVzY19zdGF0dXMpOworCQkJbmV0ZGV2X2RiZyhkZXYsICIlcygpIHN0YXR1cyBpcyAlMDh4XG4iLAorCQkJCSAgIF9fZnVuY19fLCBkZXNjX3N0YXR1cyk7CiAKIAkJaWYgKChkZXNjX3N0YXR1cyAmIChSeFdob2xlUGt0IHwgUnhFcnIpKSAhPSBSeFdob2xlUGt0KSB7CiAJCQlpZiAoKGRlc2Nfc3RhdHVzICYgUnhXaG9sZVBrdCkgIT0gUnhXaG9sZVBrdCkgewotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBPdmVyc2l6ZWQgRXRoZXJuZXQgIgotCQkJCSAgICAgICAiZnJhbWUgc3Bhbm5lZCBtdWx0aXBsZSBidWZmZXJzLCBlbnRyeSAiCi0JCQkJICAgICAgICIlI3ggbGVuZ3RoICVkIHN0YXR1cyAlOC44eCFcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgZW50cnksIGRhdGFfc2l6ZSwKLQkJCQkgICAgICAgZGVzY19zdGF0dXMpOwotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBPdmVyc2l6ZWQgRXRoZXJuZXQgIgotCQkJCSAgICAgICAiZnJhbWUgJXAgdnMgJXAuXG4iLCBkZXYtPm5hbWUsCi0JCQkJICAgICAgIHJwLT5yeF9oZWFkX2Rlc2MsICZycC0+cnhfcmluZ1tlbnRyeV0pOworCQkJCW5ldGRldl93YXJuKGRldiwKKwkiT3ZlcnNpemVkIEV0aGVybmV0IGZyYW1lIHNwYW5uZWQgbXVsdGlwbGUgYnVmZmVycywgIgorCSJlbnRyeSAlI3ggbGVuZ3RoICVkIHN0YXR1cyAlMDh4IVxuIiwKKwkJCQkJICAgIGVudHJ5LCBkYXRhX3NpemUsCisJCQkJCSAgICBkZXNjX3N0YXR1cyk7CisJCQkJbmV0ZGV2X3dhcm4oZGV2LAorCQkJCQkgICAgIk92ZXJzaXplZCBFdGhlcm5ldCBmcmFtZSAlcCB2cyAlcFxuIiwKKwkJCQkJICAgIHJwLT5yeF9oZWFkX2Rlc2MsCisJCQkJCSAgICAmcnAtPnJ4X3JpbmdbZW50cnldKTsKIAkJCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJCX0gZWxzZSBpZiAoZGVzY19zdGF0dXMgJiBSeEVycikgewogCQkJCS8qIFRoZXJlIHdhcyBhIGVycm9yLiAqLwogCQkJCWlmIChkZWJ1ZyA+IDIpCi0JCQkJCXByaW50ayhLRVJOX0RFQlVHICJyaGluZV9yeCgpIFJ4ICIKLQkJCQkJICAgICAgICJlcnJvciB3YXMgJTguOHguXG4iLAotCQkJCQkgICAgICAgZGVzY19zdGF0dXMpOworCQkJCQluZXRkZXZfZGJnKGRldiwgIiVzKCkgUnggZXJyb3Igd2FzICUwOHhcbiIsCisJCQkJCQkgICBfX2Z1bmNfXywgZGVzY19zdGF0dXMpOwogCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJaWYgKGRlc2Nfc3RhdHVzICYgMHgwMDMwKQogCQkJCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKQEAgLTE3OTEsOSArMTc4OCw3IEBACiAJCQl9IGVsc2UgewogCQkJCXNrYiA9IHJwLT5yeF9za2J1ZmZbZW50cnldOwogCQkJCWlmIChza2IgPT0gTlVMTCkgewotCQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbmNvbnNpc3RlbnQgUnggIgotCQkJCQkgICAgICAgImRlc2NyaXB0b3IgY2hhaW4uXG4iLAotCQkJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCQkJbmV0ZGV2X2VycihkZXYsICJJbmNvbnNpc3RlbnQgUnggZGVzY3JpcHRvciBjaGFpblxuIik7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCQlycC0+cnhfc2tidWZmW2VudHJ5XSA9IE5VTEw7CkBAIC0xODg2LDkgKzE4ODEsOCBAQAogCWVsc2UgewogCQkvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KIAkJaWYgKGRlYnVnID4gMSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiByaGluZV9yZXN0YXJ0X3R4KCkgIgotCQkJICAgICAgICJBbm90aGVyIGVycm9yIG9jY3VycmVkICU4Ljh4LlxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGludHJfc3RhdHVzKTsKKwkJCW5ldGRldl93YXJuKGRldiwgIiVzKCkgQW5vdGhlciBlcnJvciBvY2N1cnJlZCAlMDh4XG4iLAorCQkJCSAgIF9fZnVuY19fLCBpbnRyX3N0YXR1cyk7CiAJfQogCiB9CkBAIC0xOTA5LDIxICsxOTAzLDE5IEBACiAJfQogCWlmIChpbnRyX3N0YXR1cyAmIEludHJUeEFib3J0ZWQpIHsKIAkJaWYgKGRlYnVnID4gMSkKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBBYm9ydCAlOC44eCwgZnJhbWUgZHJvcHBlZC5cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBpbnRyX3N0YXR1cyk7CisJCQluZXRkZXZfaW5mbyhkZXYsICJBYm9ydCAlMDh4LCBmcmFtZSBkcm9wcGVkXG4iLAorCQkJCSAgICBpbnRyX3N0YXR1cyk7CiAJfQogCWlmIChpbnRyX3N0YXR1cyAmIEludHJUeFVuZGVycnVuKSB7CiAJCWlmIChycC0+dHhfdGhyZXNoIDwgMHhFMCkKIAkJCUJZVEVfUkVHX0JJVFNfU0VUKChycC0+dHhfdGhyZXNoICs9IDB4MjApLCAweDgwLCBpb2FkZHIgKyBUeENvbmZpZyk7CiAJCWlmIChkZWJ1ZyA+IDEpCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogVHJhbnNtaXR0ZXIgdW5kZXJydW4sIFR4ICIKLQkJCSAgICAgICAidGhyZXNob2xkIG5vdyAlMi4yeC5cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBycC0+dHhfdGhyZXNoKTsKKwkJCW5ldGRldl9pbmZvKGRldiwgIlRyYW5zbWl0dGVyIHVuZGVycnVuLCBUeCB0aHJlc2hvbGQgbm93ICUwMnhcbiIsCisJCQkJICAgIHJwLT50eF90aHJlc2gpOwogCX0KIAlpZiAoaW50cl9zdGF0dXMgJiBJbnRyVHhEZXNjUmFjZSkgewogCQlpZiAoZGVidWcgPiAyKQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFR4IGRlc2NyaXB0b3Igd3JpdGUtYmFjayByYWNlLlxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJbmV0ZGV2X2luZm8oZGV2LCAiVHggZGVzY3JpcHRvciB3cml0ZS1iYWNrIHJhY2VcbiIpOwogCX0KIAlpZiAoKGludHJfc3RhdHVzICYgSW50clR4RXJyb3IpICYmCiAJICAgIChpbnRyX3N0YXR1cyAmIChJbnRyVHhBYm9ydGVkIHwKQEAgLTE5MzIsOSArMTkyNCw4IEBACiAJCQlCWVRFX1JFR19CSVRTX1NFVCgocnAtPnR4X3RocmVzaCArPSAweDIwKSwgMHg4MCwgaW9hZGRyICsgVHhDb25maWcpOwogCQl9CiAJCWlmIChkZWJ1ZyA+IDEpCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogVW5zcGVjaWZpZWQgZXJyb3IuIFR4ICIKLQkJCSAgICAgICAidGhyZXNob2xkIG5vdyAlMi4yeC5cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBycC0+dHhfdGhyZXNoKTsKKwkJCW5ldGRldl9pbmZvKGRldiwgIlVuc3BlY2lmaWVkIGVycm9yLiBUeCB0aHJlc2hvbGQgbm93ICUwMnhcbiIsCisJCQkJICAgIHJwLT50eF90aHJlc2gpOwogCX0KIAlpZiAoaW50cl9zdGF0dXMgJiAoSW50clR4QWJvcnRlZCB8IEludHJUeFVuZGVycnVuIHwgSW50clR4RGVzY1JhY2UgfAogCQkJICAgSW50clR4RXJyb3IpKQpAQCAtMTk0NCw4ICsxOTM1LDggQEAKIAkJCSAgICBJbnRyVHhFcnJvciB8IEludHJUeEFib3J0ZWQgfCBJbnRyTm9ybWFsU3VtbWFyeSB8CiAJCQkgICAgSW50clR4RGVzY1JhY2UpKSB7CiAJCWlmIChkZWJ1ZyA+IDEpCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBTb21ldGhpbmcgV2lja2VkIGhhcHBlbmVkISAiCi0JCQkgICAgICAgIiU4Ljh4LlxuIiwgZGV2LT5uYW1lLCBpbnRyX3N0YXR1cyk7CisJCQluZXRkZXZfZXJyKGRldiwgIlNvbWV0aGluZyBXaWNrZWQgaGFwcGVuZWQhICUwOHhcbiIsCisJCQkJICAgaW50cl9zdGF0dXMpOwogCX0KIAogCXNwaW5fdW5sb2NrKCZycC0+bG9jayk7CkBAIC0yMTQ1LDkgKzIxMzYsOCBAQAogCXNwaW5fbG9ja19pcnEoJnJwLT5sb2NrKTsKIAogCWlmIChkZWJ1ZyA+IDEpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogU2h1dHRpbmcgZG93biBldGhlcmNhcmQsICIKLQkJICAgICAgICJzdGF0dXMgd2FzICU0LjR4LlxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgaW9yZWFkMTYoaW9hZGRyICsgQ2hpcENtZCkpOworCQluZXRkZXZfZGJnKGRldiwgIlNodXR0aW5nIGRvd24gZXRoZXJjYXJkLCBzdGF0dXMgd2FzICUwNHhcbiIsCisJCQkgICBpb3JlYWQxNihpb2FkZHIgKyBDaGlwQ21kKSk7CiAKIAkvKiBTd2l0Y2ggdG8gbG9vcGJhY2sgbW9kZSB0byBhdm9pZCBoYXJkd2FyZSByYWNlcy4gKi8KIAlpb3dyaXRlOChycC0+dHhfdGhyZXNoIHwgMHgwMiwgaW9hZGRyICsgVHhDb25maWcpOwpAQCAtMjI2NSwxMiArMjI1NSwxMiBAQAogCQlyZXR1cm4gMDsKIAogCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgcmhpbmVfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpKQotCQlwcmludGsoS0VSTl9FUlIgInZpYS1yaGluZSAlczogcmVxdWVzdF9pcnEgZmFpbGVkXG4iLCBkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgInJlcXVlc3RfaXJxIGZhaWxlZFxuIik7CiAKIAlyZXQgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJaWYgKGRlYnVnID4gMSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVudGVyaW5nIHBvd2VyIHN0YXRlIEQwICVzICglZCkuXG4iLAotCQkJZGV2LT5uYW1lLCByZXQgPyAiZmFpbGVkIiA6ICJzdWNjZWVkZWQiLCByZXQpOworCQluZXRkZXZfaW5mbyhkZXYsICJFbnRlcmluZyBwb3dlciBzdGF0ZSBEMCAlcyAoJWQpXG4iLAorCQkJICAgIHJldCA/ICJmYWlsZWQiIDogInN1Y2NlZWRlZCIsIHJldCk7CiAKIAlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKIApAQCAtMjMyNiwxNyArMjMxNiwxNSBAQAogewogLyogd2hlbiBhIG1vZHVsZSwgdGhpcyBpcyBwcmludGVkIHdoZXRoZXIgb3Igbm90IGRldmljZXMgYXJlIGZvdW5kIGluIHByb2JlICovCiAjaWZkZWYgTU9EVUxFCi0JcHJpbnRrKHZlcnNpb24pOworCXByX2luZm8oIiVzXG4iLCB2ZXJzaW9uKTsKICNlbmRpZgogCWlmIChkbWlfY2hlY2tfc3lzdGVtKHJoaW5lX2RtaV90YWJsZSkpIHsKIAkJLyogdGhlc2UgQklPU2VzIGZhaWwgYXQgUFhFIGJvb3QgaWYgY2hpcCBpcyBpbiBEMyAqLwogCQlhdm9pZF9EMyA9IDE7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBCcm9rZW4gQklPUyBkZXRlY3RlZCwgYXZvaWRfRDMgIgotCQkJCSAgICAiZW5hYmxlZC5cbiIsCi0JCSAgICAgICBEUlZfTkFNRSk7CisJCXByX3dhcm4oIkJyb2tlbiBCSU9TIGRldGVjdGVkLCBhdm9pZF9EMyBlbmFibGVkXG4iKTsKIAl9CiAJZWxzZSBpZiAoYXZvaWRfRDMpCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBhdm9pZF9EMyBzZXQuXG4iLCBEUlZfTkFNRSk7CisJCXByX2luZm8oImF2b2lkX0QzIHNldFxuIik7CiAKIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcmhpbmVfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKaW5kZXggNGZlMDUxNy4uMDZkYWE5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKKysrIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKQEAgLTI2MDAsOCArMjYwMCw3IEBACiAJLyoKIAkgKglIYW5kbGUgaGFyZHdhcmUgY2hlY2tzdW0KIAkgKi8KLQlpZiAoKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0lQX0NTVU0pICYmCi0JICAgIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSkgeworCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CiAJCWNvbnN0IHN0cnVjdCBpcGhkciAqaXAgPSBpcF9oZHIoc2tiKTsKIAkJaWYgKGlwLT5wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkKIAkJCXRkX3B0ci0+dGRlc2MxLlRDUiB8PSBUQ1IwX1RDUENLOwpAQCAtMjg0MSw2ICsyODQwLDcgQEAKIAlkZXYtPmV0aHRvb2xfb3BzID0gJnZlbG9jaXR5X2V0aHRvb2xfb3BzOwogCW5ldGlmX25hcGlfYWRkKGRldiwgJnZwdHItPm5hcGksIHZlbG9jaXR5X3BvbGwsIFZFTE9DSVRZX05BUElfV0VJR0hUKTsKIAorCWRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHIHwgTkVUSUZfRl9IV19WTEFOX1RYOwogCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX0ZJTFRFUiB8CiAJCU5FVElGX0ZfSFdfVkxBTl9SWCB8IE5FVElGX0ZfSVBfQ1NVTTsKIApAQCAtMzE4Miw3ICszMTgyLDggQEAKIAkJcGNpX3NldF9wb3dlcl9zdGF0ZSh2cHRyLT5wZGV2LCBQQ0lfRDNob3QpOwogfQogCi1zdGF0aWMgaW50IHZlbG9jaXR5X2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKK3N0YXRpYyBpbnQgdmVsb2NpdHlfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewogCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqcmVncyA9IHZwdHItPm1hY19yZWdzOwpAQCAtMzIyOCwxMiArMzIyOSwxNCBAQAogCQkJYnJlYWs7CiAJCX0KIAl9CisKIAlpZiAoc3RhdHVzICYgVkVMT0NJVFlfU1BFRURfMTAwMCkKLQkJY21kLT5zcGVlZCA9IFNQRUVEXzEwMDA7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChjbWQsIFNQRUVEXzEwMDApOwogCWVsc2UgaWYgKHN0YXR1cyAmIFZFTE9DSVRZX1NQRUVEXzEwMCkKLQkJY21kLT5zcGVlZCA9IFNQRUVEXzEwMDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgU1BFRURfMTAwKTsKIAllbHNlCi0JCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGNtZCwgU1BFRURfMTApOworCiAJY21kLT5hdXRvbmVnID0gKHN0YXR1cyAmIFZFTE9DSVRZX0FVVE9ORUdfRU5BQkxFKSA/IEFVVE9ORUdfRU5BQkxFIDogQVVUT05FR19ESVNBQkxFOwogCWNtZC0+cG9ydCA9IFBPUlRfVFA7CiAJY21kLT50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CkBAIC0zMjQ3LDkgKzMyNTAsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2ZWxvY2l0eV9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCitzdGF0aWMgaW50IHZlbG9jaXR5X3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIHNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoY21kKTsKIAl1MzIgY3Vycl9zdGF0dXM7CiAJdTMyIG5ld19zdGF0dXMgPSAwOwogCWludCByZXQgPSAwOwpAQCAtMzI1OCw5ICszMjYzLDkgQEAKIAljdXJyX3N0YXR1cyAmPSAoflZFTE9DSVRZX0xJTktfRkFJTCk7CiAKIAluZXdfc3RhdHVzIHw9ICgoY21kLT5hdXRvbmVnKSA/IFZFTE9DSVRZX0FVVE9ORUdfRU5BQkxFIDogMCk7Ci0JbmV3X3N0YXR1cyB8PSAoKGNtZC0+c3BlZWQgPT0gU1BFRURfMTAwMCkgPyBWRUxPQ0lUWV9TUEVFRF8xMDAwIDogMCk7Ci0JbmV3X3N0YXR1cyB8PSAoKGNtZC0+c3BlZWQgPT0gU1BFRURfMTAwKSA/IFZFTE9DSVRZX1NQRUVEXzEwMCA6IDApOwotCW5ld19zdGF0dXMgfD0gKChjbWQtPnNwZWVkID09IFNQRUVEXzEwKSA/IFZFTE9DSVRZX1NQRUVEXzEwIDogMCk7CisJbmV3X3N0YXR1cyB8PSAoKHNwZWVkID09IFNQRUVEXzEwMDApID8gVkVMT0NJVFlfU1BFRURfMTAwMCA6IDApOworCW5ld19zdGF0dXMgfD0gKChzcGVlZCA9PSBTUEVFRF8xMDApID8gVkVMT0NJVFlfU1BFRURfMTAwIDogMCk7CisJbmV3X3N0YXR1cyB8PSAoKHNwZWVkID09IFNQRUVEXzEwKSA/IFZFTE9DSVRZX1NQRUVEXzEwIDogMCk7CiAJbmV3X3N0YXR1cyB8PSAoKGNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKSA/IFZFTE9DSVRZX0RVUExFWF9GVUxMIDogMCk7CiAKIAlpZiAoKG5ld19zdGF0dXMgJiBWRUxPQ0lUWV9BVVRPTkVHX0VOQUJMRSkgJiYKQEAgLTM0NTcsMTMgKzM0NjIsMTAgQEAKIAkuZ2V0X3NldHRpbmdzCT0JdmVsb2NpdHlfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MJPQl2ZWxvY2l0eV9zZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvCT0JdmVsb2NpdHlfZ2V0X2RydmluZm8sCi0JLnNldF90eF9jc3VtCT0JZXRodG9vbF9vcF9zZXRfdHhfY3N1bSwKLQkuZ2V0X3R4X2NzdW0JPQlldGh0b29sX29wX2dldF90eF9jc3VtLAogCS5nZXRfd29sCT0JdmVsb2NpdHlfZXRodG9vbF9nZXRfd29sLAogCS5zZXRfd29sCT0JdmVsb2NpdHlfZXRodG9vbF9zZXRfd29sLAogCS5nZXRfbXNnbGV2ZWwJPQl2ZWxvY2l0eV9nZXRfbXNnbGV2ZWwsCiAJLnNldF9tc2dsZXZlbAk9CXZlbG9jaXR5X3NldF9tc2dsZXZlbCwKLQkuc2V0X3NnIAk9CWV0aHRvb2xfb3Bfc2V0X3NnLAogCS5nZXRfbGluawk9CXZlbG9jaXR5X2dldF9saW5rLAogCS5nZXRfY29hbGVzY2UJPQl2ZWxvY2l0eV9nZXRfY29hbGVzY2UsCiAJLnNldF9jb2FsZXNjZQk9CXZlbG9jaXR5X3NldF9jb2FsZXNjZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwppbmRleCA4MmRiYTVhLi4wY2IwYjA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCkBAIC03MTAsMTcgKzcxMCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlydG5ldF9zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYgPSB2aS0+dmRldjsKLQotCWlmIChkYXRhICYmICF2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX05FVF9GX0NTVU0pKQotCQlyZXR1cm4gLUVOT1NZUzsKLQotCXJldHVybiBldGh0b29sX29wX3NldF90eF9od19jc3VtKGRldiwgZGF0YSk7Ci19Ci0KIHN0YXRpYyB2b2lkIHZpcnRuZXRfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IG5ldGRldl9wcml2KGRldik7CkBAIC04MjIsMTAgKzgxMSw2IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdmlydG5ldF9ldGh0b29sX29wcyA9IHsKLQkuc2V0X3R4X2NzdW0gPSB2aXJ0bmV0X3NldF90eF9jc3VtLAotCS5zZXRfc2cgPSBldGh0b29sX29wX3NldF9zZywKLQkuc2V0X3RzbyA9IGV0aHRvb2xfb3Bfc2V0X3RzbywKLQkuc2V0X3VmbyA9IGV0aHRvb2xfb3Bfc2V0X3VmbywKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAogfTsKIApAQCAtOTEyLDIyICs4OTcsMjkgQEAKIAlTRVRfTkVUREVWX0RFVihkZXYsICZ2ZGV2LT5kZXYpOwogCiAJLyogRG8gd2Ugc3VwcG9ydCAiaGFyZHdhcmUiIGNoZWNrc3Vtcz8gKi8KLQlpZiAoY3N1bSAmJiB2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX05FVF9GX0NTVU0pKSB7CisJaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fTkVUX0ZfQ1NVTSkpIHsKIAkJLyogVGhpcyBvcGVucyB1cCB0aGUgd29ybGQgb2YgZXh0cmEgZmVhdHVyZXMuICovCi0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNfE5FVElGX0ZfU0d8TkVUSUZfRl9GUkFHTElTVDsKLQkJaWYgKGdzbyAmJiB2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX05FVF9GX0dTTykpIHsKLQkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU08gfCBORVRJRl9GX1VGTworCQlkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTXxORVRJRl9GX1NHfE5FVElGX0ZfRlJBR0xJU1Q7CisJCWlmIChjc3VtKQorCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX0NTVU18TkVUSUZfRl9TR3xORVRJRl9GX0ZSQUdMSVNUOworCisJCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX05FVF9GX0dTTykpIHsKKwkJCWRldi0+aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9UU08gfCBORVRJRl9GX1VGTwogCQkJCXwgTkVUSUZfRl9UU09fRUNOIHwgTkVUSUZfRl9UU082OwogCQl9CiAJCS8qIEluZGl2aWR1YWwgZmVhdHVyZSBiaXRzOiB3aGF0IGNhbiBob3N0IGhhbmRsZT8gKi8KLQkJaWYgKGdzbyAmJiB2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX05FVF9GX0hPU1RfVFNPNCkpCi0JCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwotCQlpZiAoZ3NvICYmIHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fTkVUX0ZfSE9TVF9UU082KSkKLQkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwotCQlpZiAoZ3NvICYmIHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fTkVUX0ZfSE9TVF9FQ04pKQotCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTT19FQ047Ci0JCWlmIChnc28gJiYgdmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19ORVRfRl9IT1NUX1VGTykpCi0JCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVUZPOworCQlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19ORVRfRl9IT1NUX1RTTzQpKQorCQkJZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKKwkJaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fTkVUX0ZfSE9TVF9UU082KSkKKwkJCWRldi0+aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OworCQlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19ORVRfRl9IT1NUX0VDTikpCisJCQlkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPX0VDTjsKKwkJaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fTkVUX0ZfSE9TVF9VRk8pKQorCQkJZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX1VGTzsKKworCQlpZiAoZ3NvKQorCQkJZGV2LT5mZWF0dXJlcyB8PSBkZXYtPmh3X2ZlYXR1cmVzICYgKE5FVElGX0ZfQUxMX1RTT3xORVRJRl9GX1VGTyk7CisJCS8qICghY3N1bSAmJiBnc28pIGNhc2Ugd2lsbCBiZSBmaXhlZCBieSByZWdpc3Rlcl9uZXRkZXYoKSAqLwogCX0KIAogCS8qIENvbmZpZ3VyYXRpb24gbWF5IHNwZWNpZnkgd2hhdCBNQUMgdG8gdXNlLiAgT3RoZXJ3aXNlIHJhbmRvbS4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kcnYuYyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kcnYuYwppbmRleCAwZDQ3YzNhLi5mYTZlMmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZHJ2LmMKKysrIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2Rydi5jCkBAIC0xNzgsNiArMTc4LDcgQEAKIHZteG5ldDNfcHJvY2Vzc19ldmVudHMoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBldmVudHMgPSBsZTMyX3RvX2NwdShhZGFwdGVyLT5zaGFyZWQtPmVjcik7CiAJaWYgKCFldmVudHMpCiAJCXJldHVybjsKQEAgLTE5MCwxMCArMTkxLDEwIEBACiAKIAkvKiBDaGVjayBpZiB0aGVyZSBpcyBhbiBlcnJvciBvbiB4bWl0L3JlY3YgcXVldWVzICovCiAJaWYgKGV2ZW50cyAmIChWTVhORVQzX0VDUl9UUUVSUiB8IFZNWE5FVDNfRUNSX1JRRVJSKSkgewotCQlzcGluX2xvY2soJmFkYXB0ZXItPmNtZF9sb2NrKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmNtZF9sb2NrLCBmbGFncyk7CiAJCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAogCQkJCSAgICAgICBWTVhORVQzX0NNRF9HRVRfUVVFVUVfU1RBVFVTKTsKLQkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPmNtZF9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kX2xvY2ssIGZsYWdzKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQogCQkJaWYgKGFkYXB0ZXItPnRxZF9zdGFydFtpXS5zdGF0dXMuc3RvcHBlZCkKQEAgLTEwODIsNyArMTA4Myw3IEBACiAJCXN0cnVjdCBza19idWZmICpza2IsCiAJCXVuaW9uIFZteG5ldDNfR2VuZXJpY0Rlc2MgKmdkZXNjKQogewotCWlmICghZ2Rlc2MtPnJjZC5jbmMgJiYgYWRhcHRlci0+cnhjc3VtKSB7CisJaWYgKCFnZGVzYy0+cmNkLmNuYyAmJiBhZGFwdGVyLT5uZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pIHsKIAkJLyogdHlwaWNhbCBjYXNlOiBUQ1AvVURQIG92ZXIgSVAgYW5kIGJvdGggY3N1bXMgYXJlIGNvcnJlY3QgKi8KIAkJaWYgKChsZTMyX3RvX2NwdShnZGVzYy0+ZHdvcmRbM10pICYgVk1YTkVUM19SQ0RfQ1NVTV9PSykgPT0KIAkJCQkJCQlWTVhORVQzX1JDRF9DU1VNX09LKSB7CkBAIC0yMDgxLDEwICsyMDgyLDEwIEBACiAJZGV2UmVhZC0+bWlzYy5kZExlbiA9IGNwdV90b19sZTMyKHNpemVvZihzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyKSk7CiAKIAkvKiBzZXQgdXAgZmVhdHVyZSBmbGFncyAqLwotCWlmIChhZGFwdGVyLT5yeGNzdW0pCisJaWYgKGFkYXB0ZXItPm5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkKIAkJZGV2UmVhZC0+bWlzYy51cHRGZWF0dXJlcyB8PSBVUFQxX0ZfUlhDU1VNOwogCi0JaWYgKGFkYXB0ZXItPmxybykgeworCWlmIChhZGFwdGVyLT5uZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8pIHsKIAkJZGV2UmVhZC0+bWlzYy51cHRGZWF0dXJlcyB8PSBVUFQxX0ZfTFJPOwogCQlkZXZSZWFkLT5taXNjLm1heE51bVJ4U0cgPSBjcHVfdG9fbGUxNigxICsgTUFYX1NLQl9GUkFHUyk7CiAJfQpAQCAtMjU5Myw5ICsyNTk0LDYgQEAKIAlpZiAobmV3X210dSA8IFZNWE5FVDNfTUlOX01UVSB8fCBuZXdfbXR1ID4gVk1YTkVUM19NQVhfTVRVKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChuZXdfbXR1ID4gMTUwMCAmJiAhYWRhcHRlci0+anVtYm9fZnJhbWUpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJbmV0ZGV2LT5tdHUgPSBuZXdfbXR1OwogCiAJLyoKQEAgLTI2NDEsMjggKzI2MzksMTggQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCi0JbmV0ZGV2LT5mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfAotCQlORVRJRl9GX0hXX0NTVU0gfAotCQlORVRJRl9GX0hXX1ZMQU5fVFggfAotCQlORVRJRl9GX0hXX1ZMQU5fUlggfAotCQlORVRJRl9GX0hXX1ZMQU5fRklMVEVSIHwKLQkJTkVUSUZfRl9UU08gfAotCQlORVRJRl9GX1RTTzYgfAotCQlORVRJRl9GX0xSTzsKLQotCXByaW50ayhLRVJOX0lORk8gImZlYXR1cmVzOiBzZyBjc3VtIHZsYW4gamYgdHNvIHRzb0lQdjYgbHJvIik7Ci0KLQlhZGFwdGVyLT5yeGNzdW0gPSB0cnVlOwotCWFkYXB0ZXItPmp1bWJvX2ZyYW1lID0gdHJ1ZTsKLQlhZGFwdGVyLT5scm8gPSB0cnVlOwotCi0JaWYgKGRtYTY0KSB7CisJbmV0ZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX1JYQ1NVTSB8CisJCU5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfSFdfVkxBTl9UWCB8CisJCU5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082IHwgTkVUSUZfRl9MUk87CisJaWYgKGRtYTY0KQogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKLQkJcHJpbnRrKCIgaGlnaERNQSIpOwotCX0KKwluZXRkZXYtPnZsYW5fZmVhdHVyZXMgPSBuZXRkZXYtPmh3X2ZlYXR1cmVzICYgfk5FVElGX0ZfSFdfVkxBTl9UWDsKKwluZXRkZXYtPmZlYXR1cmVzID0gbmV0ZGV2LT5od19mZWF0dXJlcyB8CisJCU5FVElGX0ZfSFdfVkxBTl9SWCB8IE5FVElGX0ZfSFdfVkxBTl9GSUxURVI7CiAKLQluZXRkZXYtPnZsYW5fZmVhdHVyZXMgPSBuZXRkZXYtPmZlYXR1cmVzOwotCXByaW50aygiXG4iKTsKKwluZXRkZXZfaW5mbyhhZGFwdGVyLT5uZXRkZXYsCisJCSJmZWF0dXJlczogc2cgY3N1bSB2bGFuIGpmIHRzbyB0c29JUHY2IGxybyVzXG4iLAorCQlkbWE2NCA/ICIgaGlnaERNQSIgOiAiIik7CiB9CiAKIApAQCAtMjczMywxMyArMjcyMSwxNCBAQAogdm14bmV0M19hbGxvY19pbnRyX3Jlc291cmNlcyhzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKQogewogCXUzMiBjZmc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIGludHIgc2V0dGluZ3MgKi8KLQlzcGluX2xvY2soJmFkYXB0ZXItPmNtZF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Y21kX2xvY2ssIGZsYWdzKTsKIAlWTVhORVQzX1dSSVRFX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCwKIAkJCSAgICAgICBWTVhORVQzX0NNRF9HRVRfQ09ORl9JTlRSKTsKIAljZmcgPSBWTVhORVQzX1JFQURfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01EKTsKLQlzcGluX3VubG9jaygmYWRhcHRlci0+Y21kX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmNtZF9sb2NrLCBmbGFncyk7CiAJYWRhcHRlci0+aW50ci50eXBlID0gY2ZnICYgMHgzOwogCWFkYXB0ZXItPmludHIubWFza19tb2RlID0gKGNmZyA+PiAyKSAmIDB4MzsKIApAQCAtMjg3NCw2ICsyODYzLDcgQEAKIAkJLm5kb19zdGFydF94bWl0ID0gdm14bmV0M194bWl0X2ZyYW1lLAogCQkubmRvX3NldF9tYWNfYWRkcmVzcyA9IHZteG5ldDNfc2V0X21hY19hZGRyLAogCQkubmRvX2NoYW5nZV9tdHUgPSB2bXhuZXQzX2NoYW5nZV9tdHUsCisJCS5uZG9fc2V0X2ZlYXR1cmVzID0gdm14bmV0M19zZXRfZmVhdHVyZXMsCiAJCS5uZG9fZ2V0X3N0YXRzID0gdm14bmV0M19nZXRfc3RhdHMsCiAJCS5uZG9fdHhfdGltZW91dCA9IHZteG5ldDNfdHhfdGltZW91dCwKIAkJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSB2bXhuZXQzX3NldF9tYywKQEAgLTI4OTQsNiArMjg4NCw5IEBACiAJaW50IG51bV90eF9xdWV1ZXM7CiAJaW50IG51bV9yeF9xdWV1ZXM7CiAKKwlpZiAoIXBjaV9tc2lfZW5hYmxlZCgpKQorCQllbmFibGVfbXEgPSAwOworCiAjaWZkZWYgVk1YTkVUM19SU1MKIAlpZiAoZW5hYmxlX21xKQogCQludW1fcnhfcXVldWVzID0gbWluKFZNWE5FVDNfREVWSUNFX01BWF9SWF9RVUVVRVMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2V0aHRvb2wuYwppbmRleCA1MWYyZWYxLi5kYzk1OWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19ldGh0b29sLmMKQEAgLTMzLDQwICszMyw2IEBACiB9OwogCiAKLXN0YXRpYyB1MzIKLXZteG5ldDNfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlyZXR1cm4gYWRhcHRlci0+cnhjc3VtOwotfQotCi0KLXN0YXRpYyBpbnQKLXZteG5ldDNfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIHZhbCkKLXsKLQlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGFkYXB0ZXItPnJ4Y3N1bSAhPSB2YWwpIHsKLQkJYWRhcHRlci0+cnhjc3VtID0gdmFsOwotCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7Ci0JCQlpZiAodmFsKQotCQkJCWFkYXB0ZXItPnNoYXJlZC0+ZGV2UmVhZC5taXNjLnVwdEZlYXR1cmVzIHw9Ci0JCQkJVVBUMV9GX1JYQ1NVTTsKLQkJCWVsc2UKLQkJCQlhZGFwdGVyLT5zaGFyZWQtPmRldlJlYWQubWlzYy51cHRGZWF0dXJlcyAmPQotCQkJCX5VUFQxX0ZfUlhDU1VNOwotCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Y21kX2xvY2ssIGZsYWdzKTsKLQkJCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAotCQkJCQkgICAgICAgVk1YTkVUM19DTURfVVBEQVRFX0ZFQVRVUkUpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kX2xvY2ssIGZsYWdzKTsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotCiAvKiBwZXIgdHEgc3RhdHMgbWFpbnRhaW5lZCBieSB0aGUgZGV2aWNlICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHZteG5ldDNfc3RhdF9kZXNjCiB2bXhuZXQzX3RxX2Rldl9zdGF0c1tdID0gewpAQCAtMjk2LDI4ICsyNjIsMjggQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQKLXZteG5ldDNfc2V0X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQoraW50IHZteG5ldDNfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBmZWF0dXJlcykKIHsKIAlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQl1OCBscm9fcmVxdWVzdGVkID0gKGRhdGEgJiBFVEhfRkxBR19MUk8pID09IDAgPyAwIDogMTsKLQl1OCBscm9fcHJlc2VudCA9IChuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8pID09IDAgPyAwIDogMTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBjaGFuZ2VkID0gZmVhdHVyZXMgXiBuZXRkZXYtPmZlYXR1cmVzOwogCi0JaWYgKGV0aHRvb2xfaW52YWxpZF9mbGFncyhuZXRkZXYsIGRhdGEsIEVUSF9GTEFHX0xSTykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGxyb19yZXF1ZXN0ZWQgXiBscm9fcHJlc2VudCkgewotCQkvKiB0b2dnbGUgdGhlIExSTyBmZWF0dXJlKi8KLQkJbmV0ZGV2LT5mZWF0dXJlcyBePSBORVRJRl9GX0xSTzsKKwlpZiAoY2hhbmdlZCAmIChORVRJRl9GX1JYQ1NVTXxORVRJRl9GX0xSTykpIHsKKwkJaWYgKGZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pCisJCQlhZGFwdGVyLT5zaGFyZWQtPmRldlJlYWQubWlzYy51cHRGZWF0dXJlcyB8PQorCQkJVVBUMV9GX1JYQ1NVTTsKKwkJZWxzZQorCQkJYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLm1pc2MudXB0RmVhdHVyZXMgJj0KKwkJCX5VUFQxX0ZfUlhDU1VNOwogCiAJCS8qIHVwZGF0ZSBoYXJ3YXJlIExSTyBjYXBhYmlsaXR5IGFjY29yZGluZ2x5ICovCi0JCWlmIChscm9fcmVxdWVzdGVkKQorCQlpZiAoZmVhdHVyZXMgJiBORVRJRl9GX0xSTykKIAkJCWFkYXB0ZXItPnNoYXJlZC0+ZGV2UmVhZC5taXNjLnVwdEZlYXR1cmVzIHw9CiAJCQkJCQkJVVBUMV9GX0xSTzsKIAkJZWxzZQogCQkJYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLm1pc2MudXB0RmVhdHVyZXMgJj0KIAkJCQkJCQl+VVBUMV9GX0xSTzsKKwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Y21kX2xvY2ssIGZsYWdzKTsKIAkJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsCiAJCQkJICAgICAgIFZNWE5FVDNfQ01EX1VQREFURV9GRUFUVVJFKTsKQEAgLTQ1OSwxMCArNDI1LDEwIEBACiAJZWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOwogCiAJaWYgKGFkYXB0ZXItPmxpbmtfc3BlZWQpIHsKLQkJZWNtZC0+c3BlZWQgPSBhZGFwdGVyLT5saW5rX3NwZWVkOworCQlldGh0b29sX2NtZF9zcGVlZF9zZXQoZWNtZCwgYWRhcHRlci0+bGlua19zcGVlZCk7CiAJCWVjbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOwogCX0gZWxzZSB7Ci0JCWVjbWQtPnNwZWVkID0gLTE7CisJCWV0aHRvb2xfY21kX3NwZWVkX3NldChlY21kLCAtMSk7CiAJCWVjbWQtPmR1cGxleCA9IC0xOwogCX0KIAlyZXR1cm4gMDsKQEAgLTY1NCwxNyArNjIwLDcgQEAKIAkuZ2V0X3dvbCAgICAgICAgICAgPSB2bXhuZXQzX2dldF93b2wsCiAJLnNldF93b2wgICAgICAgICAgID0gdm14bmV0M19zZXRfd29sLAogCS5nZXRfbGluayAgICAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCi0JLmdldF9yeF9jc3VtICAgICAgID0gdm14bmV0M19nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0gICAgICAgPSB2bXhuZXQzX3NldF9yeF9jc3VtLAotCS5nZXRfdHhfY3N1bSAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCi0JLnNldF90eF9jc3VtICAgICAgID0gZXRodG9vbF9vcF9zZXRfdHhfaHdfY3N1bSwKLQkuZ2V0X3NnICAgICAgICAgICAgPSBldGh0b29sX29wX2dldF9zZywKLQkuc2V0X3NnICAgICAgICAgICAgPSBldGh0b29sX29wX3NldF9zZywKLQkuZ2V0X3RzbyAgICAgICAgICAgPSBldGh0b29sX29wX2dldF90c28sCi0JLnNldF90c28gICAgICAgICAgID0gZXRodG9vbF9vcF9zZXRfdHNvLAogCS5nZXRfc3RyaW5ncyAgICAgICA9IHZteG5ldDNfZ2V0X3N0cmluZ3MsCi0JLmdldF9mbGFncwkgICA9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLAotCS5zZXRfZmxhZ3MJICAgPSB2bXhuZXQzX3NldF9mbGFncywKIAkuZ2V0X3NzZXRfY291bnQJICAgPSB2bXhuZXQzX2dldF9zc2V0X2NvdW50LAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IHZteG5ldDNfZ2V0X2V0aHRvb2xfc3RhdHMsCiAJLmdldF9yaW5ncGFyYW0gICAgID0gdm14bmV0M19nZXRfcmluZ3BhcmFtLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2ludC5oIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2ludC5oCmluZGV4IGZiNWQyNDUuLmY1MGQzNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19pbnQuaAorKysgYi9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfaW50LmgKQEAgLTY4LDEwICs2OCwxMCBAQAogLyoKICAqIFZlcnNpb24gbnVtYmVycwogICovCi0jZGVmaW5lIFZNWE5FVDNfRFJJVkVSX1ZFUlNJT05fU1RSSU5HICAgIjEuMC4yNS4wLWsiCisjZGVmaW5lIFZNWE5FVDNfRFJJVkVSX1ZFUlNJT05fU1RSSU5HICAgIjEuMS45LjAtayIKIAogLyogYSAzMi1iaXQgaW50LCBlYWNoIGJ5dGUgZW5jb2RlIGEgdmVyaW9uIG51bWJlciBpbiBWTVhORVQzX0RSSVZFUl9WRVJTSU9OICovCi0jZGVmaW5lIFZNWE5FVDNfRFJJVkVSX1ZFUlNJT05fTlVNICAgICAgMHgwMTAwMTkwMAorI2RlZmluZSBWTVhORVQzX0RSSVZFUl9WRVJTSU9OX05VTSAgICAgIDB4MDEwMTA5MDAKIAogI2lmIGRlZmluZWQoQ09ORklHX1BDSV9NU0kpCiAJLyogUlNTIG9ubHkgbWFrZXMgc2Vuc2UgaWYgTVNJLVggaXMgc3VwcG9ydGVkLiAqLwpAQCAtMzI5LDEwICszMjksNiBAQAogCXU4CQkJX19pb21lbSAqaHdfYWRkcjA7IC8qIGZvciBCQVIgMCAqLwogCXU4CQkJX19pb21lbSAqaHdfYWRkcjE7IC8qIGZvciBCQVIgMSAqLwogCi0JLyogZmVhdHVyZSBjb250cm9sICovCi0JYm9vbAkJCQlyeGNzdW07Ci0JYm9vbAkJCQlscm87Ci0JYm9vbAkJCQlqdW1ib19mcmFtZTsKICNpZmRlZiBWTVhORVQzX1JTUwogCXN0cnVjdCBVUFQxX1JTU0NvbmYJCSpyc3NfY29uZjsKIAlib29sCQkJCXJzczsKQEAgLTQwNCw2ICs0MDAsOSBAQAogdm14bmV0M19ycV9kZXN0cm95X2FsbChzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyKTsKIAogaW50Cit2bXhuZXQzX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZmVhdHVyZXMpOworCitpbnQKIHZteG5ldDNfY3JlYXRlX3F1ZXVlcyhzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyLAogCQkgICAgICB1MzIgdHhfcmluZ19zaXplLCB1MzIgcnhfcmluZ19zaXplLCB1MzIgcnhfcmluZzJfc2l6ZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuYyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuYwppbmRleCA0MDFiZWJmLi4zMjc2M2IyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmMKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5jCkBAIC0xNTksMTYgKzE1OSwxNSBAQAogCQkgICAgIHUzMiBmd19tZW1vLCB1MzIgb2Zmc2V0LCB1NjQgKmRhdGEwLCB1NjQgKmRhdGExLAogCQkgICAgIHU2NCAqc3RlZXJfY3RybCkKIHsKLQlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBfcmVnOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cF9yZWcgPSB2cGF0aC0+dnBfcmVnOwogCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOwogCXU2NCB2YWw2NDsKLQl1MzIgcmV0cnkgPSAwLCBtYXhfcmV0cnkgPSAxMDA7CisJdTMyIHJldHJ5ID0gMCwgbWF4X3JldHJ5ID0gMzsKIAotCXZwX3JlZyA9IHZwYXRoLT52cF9yZWc7Ci0KLQlpZiAodnBhdGgtPnZwX29wZW4pIHsKLQkJbWF4X3JldHJ5ID0gMzsKLQkJc3Bpbl9sb2NrKCZ2cGF0aC0+bG9jayk7CisJc3Bpbl9sb2NrKCZ2cGF0aC0+bG9jayk7CisJaWYgKCF2cGF0aC0+dnBfb3BlbikgeworCQlzcGluX3VubG9jaygmdnBhdGgtPmxvY2spOworCQltYXhfcmV0cnkgPSAxMDA7CiAJfQogCiAJd3JpdGVxKCpkYXRhMCwgJnZwX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9kYXRhMCk7CkBAIC0xMDAwLDcgKzk5OSw3IEBACiAvKioKICAqIHZ4Z2VfaHdfZGV2aWNlX2h3X2luZm9fZ2V0IC0gR2V0IHRoZSBodyBpbmZvcm1hdGlvbgogICogUmV0dXJucyB0aGUgdnBhdGggbWFzayB0aGF0IGhhcyB0aGUgYml0cyBzZXQgZm9yIGVhY2ggdnBhdGggYWxsb2NhdGVkCi0gKiBmb3IgdGhlIGRyaXZlciwgRlcgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgdGhlIGZpcnN0IG1hYyBhZGRyZXNzZSBmb3IKKyAqIGZvciB0aGUgZHJpdmVyLCBGVyB2ZXJzaW9uIGluZm9ybWF0aW9uLCBhbmQgdGhlIGZpcnN0IG1hYyBhZGRyZXNzIGZvcgogICogZWFjaCB2cGF0aAogICovCiBlbnVtIHZ4Z2VfaHdfc3RhdHVzIF9fZGV2aW5pdApAQCAtMTA2NCw5ICsxMDYzLDEwIEBACiAKIAkJdmFsNjQgPSByZWFkcSgmdG9jLT50b2NfdnBhdGhfcG9pbnRlcltpXSk7CiAKKwkJc3Bpbl9sb2NrX2luaXQoJnZwYXRoLmxvY2spOwogCQl2cGF0aC52cF9yZWcgPSAoc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKikKIAkJCSAgICAgICAoYmFyMCArIHZhbDY0KTsKLQkJdnBhdGgudnBfb3BlbiA9IDA7CisJCXZwYXRoLnZwX29wZW4gPSBWWEdFX0hXX1ZQX05PVF9PUEVOOwogCiAJCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9wY2lfZnVuY19tb2RlX2dldCgmdnBhdGgsIGh3X2luZm8pOwogCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCkBAIC0xMDkwLDcgKzEwOTAsNyBAQAogCQl2YWw2NCA9IHJlYWRxKCZ0b2MtPnRvY192cGF0aF9wb2ludGVyW2ldKTsKIAkJdnBhdGgudnBfcmVnID0gKHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICopCiAJCQkgICAgICAgKGJhcjAgKyB2YWw2NCk7Ci0JCXZwYXRoLnZwX29wZW4gPSAwOworCQl2cGF0aC52cF9vcGVuID0gVlhHRV9IV19WUF9OT1RfT1BFTjsKIAogCQlzdGF0dXMgPSAgX192eGdlX2h3X3ZwYXRoX2FkZHJfZ2V0KCZ2cGF0aCwKIAkJCQlod19pbmZvLT5tYWNfYWRkcnNbaV0sCkBAIC00NjQ2LDcgKzQ2NDYsMjcgQEAKIAkJdnBhdGgtPmhsZGV2LT50aW1faW50X21hc2sxLCB2cGF0aC0+dnBfaWQpOwogCWhsZGV2LT5zdGF0cy5od19kZXZfaW5mb19zdGF0cy52cGF0aF9pbmZvW3ZwYXRoLT52cF9pZF0gPSBOVUxMOwogCi0JbWVtc2V0KHZwYXRoLCAwLCBzaXplb2Yoc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCkpOworCS8qIElmIHRoZSB3aG9sZSBzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoIGlzIHplcm9lZCwgbm90aGluZyB3aWxsCisJICogd29yayBhZnRlciB0aGUgaW50ZXJmYWNlIGlzIGJyb3VnaHQgZG93bi4KKwkgKi8KKwlzcGluX2xvY2soJnZwYXRoLT5sb2NrKTsKKwl2cGF0aC0+dnBfb3BlbiA9IFZYR0VfSFdfVlBfTk9UX09QRU47CisJc3Bpbl91bmxvY2soJnZwYXRoLT5sb2NrKTsKKworCXZwYXRoLT52cG1nbXRfcmVnID0gTlVMTDsKKwl2cGF0aC0+bm9mbF9kYiA9IE5VTEw7CisJdnBhdGgtPm1heF9tdHUgPSAwOworCXZwYXRoLT52c3BvcnRfbnVtYmVyID0gMDsKKwl2cGF0aC0+bWF4X2tkZmNfZGIgPSAwOworCXZwYXRoLT5tYXhfbm9mbF9kYiA9IDA7CisJdnBhdGgtPnJpbmdoID0gTlVMTDsKKwl2cGF0aC0+Zmlmb2ggPSBOVUxMOworCW1lbXNldCgmdnBhdGgtPnZwYXRoX2hhbmRsZXMsIDAsIHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSk7CisJdnBhdGgtPnN0YXRzX2Jsb2NrID0gMDsKKwl2cGF0aC0+aHdfc3RhdHMgPSBOVUxMOworCXZwYXRoLT5od19zdGF0c19zYXYgPSBOVUxMOworCXZwYXRoLT5zd19zdGF0cyA9IE5VTEw7CisKIGV4aXQ6CiAJcmV0dXJuOwogfQpAQCAtNDY3MCw3ICs0NjkwLDcgQEAKIAogCXZwYXRoID0gJmhsZGV2LT52aXJ0dWFsX3BhdGhzW3ZwX2lkXTsKIAotCXNwaW5fbG9ja19pbml0KCZobGRldi0+dmlydHVhbF9wYXRoc1t2cF9pZF0ubG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnZwYXRoLT5sb2NrKTsKIAl2cGF0aC0+dnBfaWQgPSB2cF9pZDsKIAl2cGF0aC0+dnBfb3BlbiA9IFZYR0VfSFdfVlBfT1BFTjsKIAl2cGF0aC0+aGxkZXYgPSBobGRldjsKQEAgLTUwMTksMTAgKzUwMzksNiBAQAogCiAJX192eGdlX2h3X3ZwX3Rlcm1pbmF0ZShkZXZoLCB2cF9pZCk7CiAKLQlzcGluX2xvY2soJnZwYXRoLT5sb2NrKTsKLQl2cGF0aC0+dnBfb3BlbiA9IFZYR0VfSFdfVlBfTk9UX09QRU47Ci0Jc3Bpbl91bmxvY2soJnZwYXRoLT5sb2NrKTsKLQogdnBhdGhfY2xvc2VfZXhpdDoKIAlyZXR1cm4gc3RhdHVzOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5oIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5oCmluZGV4IDNjNTNhYTcuLjM1OWI5YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuaAorKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmgKQEAgLTQxMiw0NCArNDEyLDQ4IEBACiAgKiBTZWUgYWxzbzogc3RydWN0IHZ4Z2VfaHdfdGltX2ludHJfY29uZmlne30uCiAgKi8KIHN0cnVjdCB2eGdlX2h3X2RldmljZV9jb25maWcgewotCXUzMgkJCQlkbWFfYmxvY2twb29sX2luaXRpYWw7Ci0JdTMyCQkJCWRtYV9ibG9ja3Bvb2xfbWF4OwotI2RlZmluZSBWWEdFX0hXX01JTl9ETUFfQkxPQ0tfUE9PTF9TSVpFCQkJMAotI2RlZmluZSBWWEdFX0hXX0lOSVRJQUxfRE1BX0JMT0NLX1BPT0xfU0laRQkJMAotI2RlZmluZSBWWEdFX0hXX0lOQ1JfRE1BX0JMT0NLX1BPT0xfU0laRQkJNAotI2RlZmluZSBWWEdFX0hXX01BWF9ETUFfQkxPQ0tfUE9PTF9TSVpFCQkJNDA5NgorCXUzMgkJCQkJZGV2aWNlX3BvbGxfbWlsbGlzOworI2RlZmluZSBWWEdFX0hXX01JTl9ERVZJQ0VfUE9MTF9NSUxMSVMJCTEKKyNkZWZpbmUgVlhHRV9IV19NQVhfREVWSUNFX1BPTExfTUlMTElTCQkxMDAwMDAKKyNkZWZpbmUgVlhHRV9IV19ERUZfREVWSUNFX1BPTExfTUlMTElTCQkxMDAwCiAKLSNkZWZpbmUgICAgICAgIFZYR0VfSFdfTUFYX1BBWUxPQURfU0laRV81MTIJCTIKKwl1MzIJCQkJCWRtYV9ibG9ja3Bvb2xfaW5pdGlhbDsKKwl1MzIJCQkJCWRtYV9ibG9ja3Bvb2xfbWF4OworI2RlZmluZSBWWEdFX0hXX01JTl9ETUFfQkxPQ0tfUE9PTF9TSVpFCQkwCisjZGVmaW5lIFZYR0VfSFdfSU5JVElBTF9ETUFfQkxPQ0tfUE9PTF9TSVpFCTAKKyNkZWZpbmUgVlhHRV9IV19JTkNSX0RNQV9CTE9DS19QT09MX1NJWkUJNAorI2RlZmluZSBWWEdFX0hXX01BWF9ETUFfQkxPQ0tfUE9PTF9TSVpFCQk0MDk2CiAKLQl1MzIJCQkJaW50cl9tb2RlOwotI2RlZmluZSBWWEdFX0hXX0lOVFJfTU9ERV9JUlFMSU5FCQkJMAotI2RlZmluZSBWWEdFX0hXX0lOVFJfTU9ERV9NU0lYCQkJCTEKLSNkZWZpbmUgVlhHRV9IV19JTlRSX01PREVfTVNJWF9PTkVfU0hPVAkJCTIKKyNkZWZpbmUJVlhHRV9IV19NQVhfUEFZTE9BRF9TSVpFXzUxMgkJMgogCi0jZGVmaW5lIFZYR0VfSFdfSU5UUl9NT0RFX0RFRgkJCQkwCisJdTMyCQkJCQlpbnRyX21vZGU6MiwKKyNkZWZpbmUgVlhHRV9IV19JTlRSX01PREVfSVJRTElORQkJMAorI2RlZmluZSBWWEdFX0hXX0lOVFJfTU9ERV9NU0lYCQkJMQorI2RlZmluZSBWWEdFX0hXX0lOVFJfTU9ERV9NU0lYX09ORV9TSE9UCQkyCiAKLQl1MzIJCQkJcnRoX2VuOwotI2RlZmluZSBWWEdFX0hXX1JUSF9ESVNBQkxFCQkJCTAKLSNkZWZpbmUgVlhHRV9IV19SVEhfRU5BQkxFCQkJCTEKLSNkZWZpbmUgVlhHRV9IV19SVEhfREVGQVVMVAkJCQkwCisjZGVmaW5lIFZYR0VfSFdfSU5UUl9NT0RFX0RFRgkJCTAKIAotCXUzMgkJCQlydGhfaXRfdHlwZTsKLSNkZWZpbmUgVlhHRV9IV19SVEhfSVRfVFlQRV9TT0xPX0lUCQkJMAotI2RlZmluZSBWWEdFX0hXX1JUSF9JVF9UWVBFX01VTFRJX0lUCQkJMQotI2RlZmluZSBWWEdFX0hXX1JUSF9JVF9UWVBFX0RFRkFVTFQJCQkwCisJCQkJCQlydGhfZW46MSwKKyNkZWZpbmUgVlhHRV9IV19SVEhfRElTQUJMRQkJCTAKKyNkZWZpbmUgVlhHRV9IV19SVEhfRU5BQkxFCQkJMQorI2RlZmluZSBWWEdFX0hXX1JUSF9ERUZBVUxUCQkJMAogCi0JdTMyCQkJCXJ0c19tYWNfZW47CisJCQkJCQlydGhfaXRfdHlwZToxLAorI2RlZmluZSBWWEdFX0hXX1JUSF9JVF9UWVBFX1NPTE9fSVQJCTAKKyNkZWZpbmUgVlhHRV9IV19SVEhfSVRfVFlQRV9NVUxUSV9JVAkJMQorI2RlZmluZSBWWEdFX0hXX1JUSF9JVF9UWVBFX0RFRkFVTFQJCTAKKworCQkJCQkJcnRzX21hY19lbjoxLAogI2RlZmluZSBWWEdFX0hXX1JUU19NQUNfRElTQUJMRQkJCTAKICNkZWZpbmUgVlhHRV9IV19SVFNfTUFDX0VOQUJMRQkJCTEKICNkZWZpbmUgVlhHRV9IV19SVFNfTUFDX0RFRkFVTFQJCQkwCiAKLQlzdHJ1Y3QgdnhnZV9od192cF9jb25maWcJdnBfY29uZmlnW1ZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFNdOworCQkJCQkJaHd0c19lbjoxOworI2RlZmluZQlWWEdFX0hXX0hXVFNfRElTQUJMRQkJCTAKKyNkZWZpbmUJVlhHRV9IV19IV1RTX0VOQUJMRQkJCTEKKyNkZWZpbmUJVlhHRV9IV19IV1RTX0RFRkFVTFQJCQkxCiAKLQl1MzIJCQkJZGV2aWNlX3BvbGxfbWlsbGlzOwotI2RlZmluZSBWWEdFX0hXX01JTl9ERVZJQ0VfUE9MTF9NSUxMSVMJCQkxCi0jZGVmaW5lIFZYR0VfSFdfTUFYX0RFVklDRV9QT0xMX01JTExJUwkJCTEwMDAwMAotI2RlZmluZSBWWEdFX0hXX0RFRl9ERVZJQ0VfUE9MTF9NSUxMSVMJCQkxMDAwCi0KKwlzdHJ1Y3QgdnhnZV9od192cF9jb25maWcgdnBfY29uZmlnW1ZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFNdOwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLWV0aHRvb2wuYwppbmRleCBjNWViMDM0Li45MmRkNzJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1ldGh0b29sLmMKQEAgLTMzLDcgKzMzLDggQEAKIHsKIAkvKiBXZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IDEwR2IvRlVMTCAqLwogCWlmICgoaW5mby0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgfHwKLQkgICAgKGluZm8tPnNwZWVkICE9IFNQRUVEXzEwMDAwKSB8fCAoaW5mby0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKSkKKwkgICAgKGV0aHRvb2xfY21kX3NwZWVkKGluZm8pICE9IFNQRUVEXzEwMDAwKSB8fAorCSAgICAoaW5mby0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR1cm4gMDsKQEAgLTU4LDEwICs1OSwxMCBAQAogCWluZm8tPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKIAogCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKLQkJaW5mby0+c3BlZWQgPSBTUEVFRF8xMDAwMDsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGluZm8sIFNQRUVEXzEwMDAwKTsKIAkJaW5mby0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJfSBlbHNlIHsKLQkJaW5mby0+c3BlZWQgPSAtMTsKKwkJZXRodG9vbF9jbWRfc3BlZWRfc2V0KGluZm8sIC0xKTsKIAkJaW5mby0+ZHVwbGV4ID0gLTE7CiAJfQogCkBAIC0xMzQsMjIgKzEzNSwyOSBAQAogLyoqCiAgKiB2eGdlX2V0aHRvb2xfaWRuaWMgLSBUbyBwaHlzaWNhbGx5IGlkZW50aWZ5IHRoZSBuaWMgb24gdGhlIHN5c3RlbS4KICAqIEBkZXYgOiBkZXZpY2UgcG9pbnRlci4KLSAqIEBpZCA6IHBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSB3aXRoIGlkZW50aWZpY2F0aW9uIHBhcmFtZXRlcnMgZ2l2ZW4gYnkKLSAqIGV0aHRvb2wuCisgKiBAc3RhdGUgOiByZXF1ZXN0ZWQgTEVEIHN0YXRlCiAgKgogICogVXNlZCB0byBwaHlzaWNhbGx5IGlkZW50aWZ5IHRoZSBOSUMgb24gdGhlIHN5c3RlbS4KLSAqIFRoZSBMaW5rIExFRCB3aWxsIGJsaW5rIGZvciBhIHRpbWUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgotICogUmV0dXJuIHZhbHVlOgogICogMCBvbiBzdWNjZXNzCiAgKi8KLXN0YXRpYyBpbnQgdnhnZV9ldGh0b29sX2lkbmljKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQorc3RhdGljIGludCB2eGdlX2V0aHRvb2xfaWRuaWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgIGVudW0gZXRodG9vbF9waHlzX2lkX3N0YXRlIHN0YXRlKQogewogCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYgPSB2ZGV2LT5kZXZoOwogCi0JdnhnZV9od19kZXZpY2VfZmxpY2tfbGlua19sZWQoaGxkZXYsIFZYR0VfRkxJQ0tFUl9PTik7Ci0JbXNsZWVwX2ludGVycnVwdGlibGUoZGF0YSA/IChkYXRhICogSFopIDogVlhHRV9NQVhfRkxJQ0tFUl9USU1FKTsKLQl2eGdlX2h3X2RldmljZV9mbGlja19saW5rX2xlZChobGRldiwgVlhHRV9GTElDS0VSX09GRik7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgRVRIVE9PTF9JRF9BQ1RJVkU6CisJCXZ4Z2VfaHdfZGV2aWNlX2ZsaWNrX2xpbmtfbGVkKGhsZGV2LCBWWEdFX0ZMSUNLRVJfT04pOworCQlicmVhazsKKworCWNhc2UgRVRIVE9PTF9JRF9JTkFDVElWRToKKwkJdnhnZV9od19kZXZpY2VfZmxpY2tfbGlua19sZWQoaGxkZXYsIFZYR0VfRkxJQ0tFUl9PRkYpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTA2NCwzNSArMTA3Miw2IEBACiAJcmV0dXJuIHNpemVvZihzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcpICogdmRldi0+bm9fb2ZfdnBhdGg7CiB9CiAKLXN0YXRpYyB1MzIgdnhnZV9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybiB2ZGV2LT5yeF9jc3VtOwotfQotCi1zdGF0aWMgaW50IHZ4Z2Vfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKGRhdGEpCi0JCXZkZXYtPnJ4X2NzdW0gPSAxOwotCWVsc2UKLQkJdmRldi0+cnhfY3N1bSA9IDA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2eGdlX2V0aHRvb2xfb3Bfc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlpZiAoZGF0YSkKLQkJZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYpOwotCWVsc2UKLQkJZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082KTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHZ4Z2VfZXRodG9vbF9nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3NldCkKIHsKIAlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xMTEyLDQwICsxMDkxLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgdnhnZV9zZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOwotCi0JaWYgKGV0aHRvb2xfaW52YWxpZF9mbGFncyhkZXYsIGRhdGEsIEVUSF9GTEFHX1JYSEFTSCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCEhKGRhdGEgJiBFVEhfRkxBR19SWEhBU0gpID09IHZkZXYtPmRldmgtPmNvbmZpZy5ydGhfZW4pCi0JCXJldHVybiAwOwotCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSB8fCAodmRldi0+Y29uZmlnLnJ0aF9zdGVlcmluZyA9PSBOT19TVEVFUklORykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdmRldi0+ZGV2aC0+Y29uZmlnLnJ0aF9lbiA9ICEhKGRhdGEgJiBFVEhfRkxBR19SWEhBU0gpOwotCi0JLyogRW5hYmxpbmcgUlRIIHJlcXVpcmVzIHNvbWUgb2YgdGhlIGxvZ2ljIGluIHZ4Z2VfZGV2aWNlX3JlZ2lzdGVyIGFuZCBhCi0JICogdnBhdGggcmVzZXQuICBEdWUgdG8gdGhlc2UgcmVzdHJpY3Rpb25zLCBvbmx5IGFsbG93IG1vZGlmaWNhdGlvbgotCSAqIHdoaWxlIHRoZSBpbnRlcmZhY2UgaXMgZG93bi4KLQkgKi8KLQlzdGF0dXMgPSB2eGdlX3Jlc2V0X2FsbF92cGF0aHModmRldik7Ci0JaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7Ci0JCXZkZXYtPmRldmgtPmNvbmZpZy5ydGhfZW4gPSAhdmRldi0+ZGV2aC0+Y29uZmlnLnJ0aF9lbjsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JaWYgKHZkZXYtPmRldmgtPmNvbmZpZy5ydGhfZW4pCi0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9SWEhBU0g7Ci0JZWxzZQotCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1JYSEFTSDsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHZ4Z2VfZndfZmxhc2goc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZmxhc2ggKnBhcm1zKQogewogCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTExNzQsMTkgKzExMTksMTAgQEAKIAkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKIAkuZ2V0X3BhdXNlcGFyYW0JCT0gdnhnZV9ldGh0b29sX2dldHBhdXNlX2RhdGEsCiAJLnNldF9wYXVzZXBhcmFtCQk9IHZ4Z2VfZXRodG9vbF9zZXRwYXVzZV9kYXRhLAotCS5nZXRfcnhfY3N1bQkJPSB2eGdlX2dldF9yeF9jc3VtLAotCS5zZXRfcnhfY3N1bQkJPSB2eGdlX3NldF9yeF9jc3VtLAotCS5nZXRfdHhfY3N1bQkJPSBldGh0b29sX29wX2dldF90eF9jc3VtLAotCS5zZXRfdHhfY3N1bQkJPSBldGh0b29sX29wX3NldF90eF9pcHY2X2NzdW0sCi0JLmdldF9zZwkJCT0gZXRodG9vbF9vcF9nZXRfc2csCi0JLnNldF9zZwkJCT0gZXRodG9vbF9vcF9zZXRfc2csCi0JLmdldF90c28JCT0gZXRodG9vbF9vcF9nZXRfdHNvLAotCS5zZXRfdHNvCQk9IHZ4Z2VfZXRodG9vbF9vcF9zZXRfdHNvLAogCS5nZXRfc3RyaW5ncwkJPSB2eGdlX2V0aHRvb2xfZ2V0X3N0cmluZ3MsCi0JLnBoeXNfaWQJCT0gdnhnZV9ldGh0b29sX2lkbmljLAorCS5zZXRfcGh5c19pZAkJPSB2eGdlX2V0aHRvb2xfaWRuaWMsCiAJLmdldF9zc2V0X2NvdW50CQk9IHZ4Z2VfZXRodG9vbF9nZXRfc3NldF9jb3VudCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMJPSB2eGdlX2dldF9ldGh0b29sX3N0YXRzLAotCS5zZXRfZmxhZ3MJCT0gdnhnZV9zZXRfZmxhZ3MsCiAJLmZsYXNoX2RldmljZQkJPSB2eGdlX2Z3X2ZsYXNoLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uYyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmMKaW5kZXggYWZmNjhjMS4uOGFiODcwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uYworKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5jCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldF90c3RhbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgInZ4Z2UtbWFpbi5oIgogI2luY2x1ZGUgInZ4Z2UtcmVnLmgiCiAKQEAgLTMwNCwyMiArMzA1LDE0IEBACiAJCSIlczogJXM6JWQgIHNrYiBwcm90b2NvbCA9ICVkIiwKIAkJcmluZy0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fLCBza2ItPnByb3RvY29sKTsKIAotCWlmIChyaW5nLT5ncm9fZW5hYmxlKSB7Ci0JCWlmIChyaW5nLT52bGdycCAmJiBleHRfaW5mby0+dmxhbiAmJgotCQkJKHJpbmctPnZsYW5fdGFnX3N0cmlwID09Ci0JCQkJVlhHRV9IV19WUEFUSF9SUEFfU1RSSVBfVkxBTl9UQUdfRU5BQkxFKSkKLQkJCXZsYW5fZ3JvX3JlY2VpdmUocmluZy0+bmFwaV9wLCByaW5nLT52bGdycCwKLQkJCQkJZXh0X2luZm8tPnZsYW4sIHNrYik7Ci0JCWVsc2UKLQkJCW5hcGlfZ3JvX3JlY2VpdmUocmluZy0+bmFwaV9wLCBza2IpOwotCX0gZWxzZSB7Ci0JCWlmIChyaW5nLT52bGdycCAmJiB2bGFuICYmCi0JCQkocmluZy0+dmxhbl90YWdfc3RyaXAgPT0KLQkJCQlWWEdFX0hXX1ZQQVRIX1JQQV9TVFJJUF9WTEFOX1RBR19FTkFCTEUpKQotCQkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgcmluZy0+dmxncnAsIHZsYW4pOwotCQllbHNlCi0JCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwotCX0KKwlpZiAocmluZy0+dmxncnAgJiYgZXh0X2luZm8tPnZsYW4gJiYKKwkJKHJpbmctPnZsYW5fdGFnX3N0cmlwID09CisJCQlWWEdFX0hXX1ZQQVRIX1JQQV9TVFJJUF9WTEFOX1RBR19FTkFCTEUpKQorCQl2bGFuX2dyb19yZWNlaXZlKHJpbmctPm5hcGlfcCwgcmluZy0+dmxncnAsCisJCQkJZXh0X2luZm8tPnZsYW4sIHNrYik7CisJZWxzZQorCQluYXBpX2dyb19yZWNlaXZlKHJpbmctPm5hcGlfcCwgc2tiKTsKKwogCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCiAJCSIlczogJXM6JWQgRXhpdGluZy4uLiIsIHJpbmctPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiB9CkBAIC00OTAsNyArNDgzLDcgQEAKIAogCQlpZiAoKGV4dF9pbmZvLnByb3RvICYgVlhHRV9IV19GUkFNRV9QUk9UT19UQ1BfT1JfVURQKSAmJgogCQkgICAgIShleHRfaW5mby5wcm90byAmIFZYR0VfSFdfRlJBTUVfUFJPVE9fSVBfRlJBRykgJiYKLQkJICAgIHJpbmctPnJ4X2NzdW0gJiYgLyogT2ZmbG9hZCBSeCBzaWRlIENTVU0gKi8KKwkJICAgIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pICYmIC8qIE9mZmxvYWQgUnggc2lkZSBDU1VNICovCiAJCSAgICBleHRfaW5mby5sM19ja3N1bSA9PSBWWEdFX0hXX0wzX0NLU1VNX09LICYmCiAJCSAgICBleHRfaW5mby5sNF9ja3N1bSA9PSBWWEdFX0hXX0w0X0NLU1VNX09LKQogCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKQEAgLTIwOTQsMTEgKzIwODcsOSBAQAogCQkJCXZkZXYtPmNvbmZpZy5maWZvX2luZGljYXRlX21heF9wa3RzOwogCQkJdnBhdGgtPmZpZm8udHhfdmVjdG9yX25vID0gMDsKIAkJCXZwYXRoLT5yaW5nLnJ4X3ZlY3Rvcl9ubyA9IDA7Ci0JCQl2cGF0aC0+cmluZy5yeF9jc3VtID0gdmRldi0+cnhfY3N1bTsKIAkJCXZwYXRoLT5yaW5nLnJ4X2h3dHMgPSB2ZGV2LT5yeF9od3RzOwogCQkJdnBhdGgtPmlzX29wZW4gPSAxOwogCQkJdmRldi0+dnBfaGFuZGxlc1tpXSA9IHZwYXRoLT5oYW5kbGU7Ci0JCQl2cGF0aC0+cmluZy5ncm9fZW5hYmxlID0gdmRldi0+Y29uZmlnLmdyb19lbmFibGU7CiAJCQl2cGF0aC0+cmluZy52bGFuX3RhZ19zdHJpcCA9IHZkZXYtPnZsYW5fdGFnX3N0cmlwOwogCQkJdmRldi0+c3RhdHMudnBhdGhzX29wZW4rKzsKIAkJfSBlbHNlIHsKQEAgLTI2NzAsNiArMjY2MSw0MCBAQAogCW1vZF90aW1lcigmdmRldi0+dnBfbG9ja3VwX3RpbWVyLCBqaWZmaWVzICsgSFogLyAxMDAwKTsKIH0KIAorc3RhdGljIHUzMiB2eGdlX2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpCit7CisJdTMyIGNoYW5nZWQgPSBkZXYtPmZlYXR1cmVzIF4gZmVhdHVyZXM7CisKKwkvKiBFbmFibGluZyBSVEggcmVxdWlyZXMgc29tZSBvZiB0aGUgbG9naWMgaW4gdnhnZV9kZXZpY2VfcmVnaXN0ZXIgYW5kIGEKKwkgKiB2cGF0aCByZXNldC4gIER1ZSB0byB0aGVzZSByZXN0cmljdGlvbnMsIG9ubHkgYWxsb3cgbW9kaWZpY2F0aW9uCisJICogd2hpbGUgdGhlIGludGVyZmFjZSBpcyBkb3duLgorCSAqLworCWlmICgoY2hhbmdlZCAmIE5FVElGX0ZfUlhIQVNIKSAmJiBuZXRpZl9ydW5uaW5nKGRldikpCisJCWZlYXR1cmVzIF49IE5FVElGX0ZfUlhIQVNIOworCisJcmV0dXJuIGZlYXR1cmVzOworfQorCitzdGF0aWMgaW50IHZ4Z2Vfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKK3sKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIGNoYW5nZWQgPSBkZXYtPmZlYXR1cmVzIF4gZmVhdHVyZXM7CisKKwlpZiAoIShjaGFuZ2VkICYgTkVUSUZfRl9SWEhBU0gpKQorCQlyZXR1cm4gMDsKKworCS8qICFuZXRpZl9ydW5uaW5nKCkgZW5zdXJlZCBieSB2eGdlX2ZpeF9mZWF0dXJlcygpICovCisKKwl2ZGV2LT5kZXZoLT5jb25maWcucnRoX2VuID0gISEoZmVhdHVyZXMgJiBORVRJRl9GX1JYSEFTSCk7CisJaWYgKHZ4Z2VfcmVzZXRfYWxsX3ZwYXRocyh2ZGV2KSAhPSBWWEdFX0hXX09LKSB7CisJCWRldi0+ZmVhdHVyZXMgPSBmZWF0dXJlcyBeIE5FVElGX0ZfUlhIQVNIOworCQl2ZGV2LT5kZXZoLT5jb25maWcucnRoX2VuID0gISEoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhIQVNIKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogdnhnZV9vcGVuCiAgKiBAZGV2OiBwb2ludGVyIHRvIHRoZSBkZXZpY2Ugc3RydWN0dXJlLgpAQCAtMzExMiw4ICszMTM3LDcgQEAKIAlyZXR1cm4gbmV0X3N0YXRzOwogfQogCi1zdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX3RpbWVzdGFtcF9jb25maWcoc3RydWN0IHZ4Z2VkZXYgKnZkZXYsCi0JCQkJCQkgaW50IGVuYWJsZSkKK3N0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfdGltZXN0YW1wX2NvbmZpZyhzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCkKIHsKIAllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKIAl1NjQgdmFsNjQ7CkBAIC0zMTIzLDI3ICszMTQ3LDI0IEBACiAJICogcmVxdWlyZWQgZm9yIHRoZSBkcml2ZXIgdG8gbG9hZCAoZHVlIHRvIGEgaGFyZHdhcmUgYnVnKSwKIAkgKiB0aGVyZSBpcyBubyBuZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgaGVyZS4KIAkgKi8KLQlpZiAoZW5hYmxlKQotCQl2YWw2NCA9IFZYR0VfSFdfWE1BQ19USU1FU1RBTVBfRU4gfAotCQkJVlhHRV9IV19YTUFDX1RJTUVTVEFNUF9VU0VfTElOS19JRCgwKSB8Ci0JCQlWWEdFX0hXX1hNQUNfVElNRVNUQU1QX0lOVEVSVkFMKDApOwotCWVsc2UKLQkJdmFsNjQgPSAwOworCXZhbDY0ID0gVlhHRV9IV19YTUFDX1RJTUVTVEFNUF9FTiB8CisJCVZYR0VfSFdfWE1BQ19USU1FU1RBTVBfVVNFX0xJTktfSUQoMCkgfAorCQlWWEdFX0hXX1hNQUNfVElNRVNUQU1QX0lOVEVSVkFMKDApOwogCi0Jc3RhdHVzID0gdnhnZV9od19tZ210X3JlZ193cml0ZSh2ZGV2LT5kZXZoLAorCXN0YXR1cyA9IHZ4Z2VfaHdfbWdtdF9yZWdfd3JpdGUoZGV2aCwKIAkJCQkJdnhnZV9od19tZ210X3JlZ190eXBlX21ycGNpbSwKIAkJCQkJMCwKIAkJCQkJb2Zmc2V0b2Yoc3RydWN0IHZ4Z2VfaHdfbXJwY2ltX3JlZywKIAkJCQkJCSB4bWFjX3RpbWVzdGFtcCksCiAJCQkJCXZhbDY0KTsKLQl2eGdlX2h3X2RldmljZV9mbHVzaF9pbyh2ZGV2LT5kZXZoKTsKKwl2eGdlX2h3X2RldmljZV9mbHVzaF9pbyhkZXZoKTsKKwlkZXZoLT5jb25maWcuaHd0c19lbiA9IFZYR0VfSFdfSFdUU19FTkFCTEU7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIGludCB2eGdlX2h3dHN0YW1wX2lvY3RsKHN0cnVjdCB2eGdlZGV2ICp2ZGV2LCB2b2lkIF9fdXNlciAqZGF0YSkKIHsKIAlzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnIGNvbmZpZzsKLQllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKIAlpbnQgaTsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmY29uZmlnLCBkYXRhLCBzaXplb2YoY29uZmlnKSkpCkBAIC0zMTY0LDEwICszMTg1LDYgQEAKIAogCXN3aXRjaCAoY29uZmlnLnJ4X2ZpbHRlcikgewogCWNhc2UgSFdUU1RBTVBfRklMVEVSX05PTkU6Ci0JCXN0YXR1cyA9IHZ4Z2VfdGltZXN0YW1wX2NvbmZpZyh2ZGV2LCAwKTsKLQkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KIAkJdmRldi0+cnhfaHd0cyA9IDA7CiAJCWNvbmZpZy5yeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfTk9ORTsKIAkJYnJlYWs7CkBAIC0zMTg2LDggKzMyMDMsNyBAQAogCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9FVkVOVDoKIAljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfU1lOQzoKIAljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfREVMQVlfUkVROgotCQlzdGF0dXMgPSB2eGdlX3RpbWVzdGFtcF9jb25maWcodmRldiwgMSk7Ci0JCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJaWYgKHZkZXYtPmRldmgtPmNvbmZpZy5od3RzX2VuICE9IFZYR0VfSFdfSFdUU19FTkFCTEUpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQl2ZGV2LT5yeF9od3RzID0gMTsKQEAgLTMzNzgsNiArMzM5NCw4IEBACiAJLm5kb19kb19pb2N0bCAgICAgICAgICAgPSB2eGdlX2lvY3RsLAogCS5uZG9fc2V0X21hY19hZGRyZXNzICAgID0gdnhnZV9zZXRfbWFjX2FkZHIsCiAJLm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB2eGdlX2NoYW5nZV9tdHUsCisJLm5kb19maXhfZmVhdHVyZXMJPSB2eGdlX2ZpeF9mZWF0dXJlcywKKwkubmRvX3NldF9mZWF0dXJlcwk9IHZ4Z2Vfc2V0X2ZlYXR1cmVzLAogCS5uZG9fdmxhbl9yeF9yZWdpc3RlciAgID0gdnhnZV92bGFuX3J4X3JlZ2lzdGVyLAogCS5uZG9fdmxhbl9yeF9raWxsX3ZpZCAgID0gdnhnZV92bGFuX3J4X2tpbGxfdmlkLAogCS5uZG9fdmxhbl9yeF9hZGRfdmlkCT0gdnhnZV92bGFuX3J4X2FkZF92aWQsCkBAIC0zNDI0LDE0ICszNDQyLDIxIEBACiAJdmRldi0+ZGV2aCA9IGhsZGV2OwogCXZkZXYtPnBkZXYgPSBobGRldi0+cGRldjsKIAltZW1jcHkoJnZkZXYtPmNvbmZpZywgY29uZmlnLCBzaXplb2Yoc3RydWN0IHZ4Z2VfY29uZmlnKSk7Ci0JdmRldi0+cnhfY3N1bSA9IDE7CS8qIEVuYWJsZSBSeCBDU1VNIGJ5IGRlZmF1bHQuICovCiAJdmRldi0+cnhfaHd0cyA9IDA7CiAJdmRldi0+dGl0YW4xID0gKHZkZXYtPnBkZXYtPnJldmlzaW9uID09IFZYR0VfSFdfVElUQU4xX1BDSV9SRVZJU0lPTik7CiAKIAlTRVRfTkVUREVWX0RFVihuZGV2LCAmdmRldi0+cGRldi0+ZGV2KTsKIAotCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWCB8Ci0JCQkJTkVUSUZfRl9IV19WTEFOX0ZJTFRFUjsKKwluZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfUlhDU1VNIHwgTkVUSUZfRl9TRyB8CisJCU5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNIHwKKwkJTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfAorCQlORVRJRl9GX0hXX1ZMQU5fVFg7CisJaWYgKHZkZXYtPmNvbmZpZy5ydGhfc3RlZXJpbmcgIT0gTk9fU1RFRVJJTkcpCisJCW5kZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfUlhIQVNIOworCisJbmRldi0+ZmVhdHVyZXMgfD0gbmRldi0+aHdfZmVhdHVyZXMgfAorCQlORVRJRl9GX0hXX1ZMQU5fUlggfCBORVRJRl9GX0hXX1ZMQU5fRklMVEVSOworCiAJLyogIERyaXZlciBlbnRyeSBwb2ludHMgKi8KIAluZGV2LT5pcnEgPSB2ZGV2LT5wZGV2LT5pcnE7CiAJbmRldi0+YmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpIGhsZGV2LT5iYXIwOwpAQCAtMzQ0MywxMSArMzQ2OCw2IEBACiAKIAl2eGdlX2luaXRpYWxpemVfZXRodG9vbF9vcHMobmRldik7CiAKLQlpZiAodmRldi0+Y29uZmlnLnJ0aF9zdGVlcmluZyAhPSBOT19TVEVFUklORykgewotCQluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1JYSEFTSDsKLQkJaGxkZXYtPmNvbmZpZy5ydGhfZW4gPSBWWEdFX0hXX1JUSF9FTkFCTEU7Ci0JfQotCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB2cGF0aCAqLwogCXZkZXYtPnZwYXRocyA9IGt6YWxsb2MoKHNpemVvZihzdHJ1Y3QgdnhnZV92cGF0aCkpICoKIAkJCQlub19vZl92cGF0aCwgR0ZQX0tFUk5FTCk7CkBAIC0zNDU5LDkgKzM0NzksNiBAQAogCQlnb3RvIF9vdXQxOwogCX0KIAotCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0c7Ci0KLQluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTTsKIAl2eGdlX2RlYnVnX2luaXQodnhnZV9od19kZXZpY2VfdHJhY2VfbGV2ZWxfZ2V0KGhsZGV2KSwKIAkJIiVzIDogY2hlY2tzdW1pbmcgZW5hYmxlZCIsIF9fZnVuY19fKTsKIApAQCAtMzQ3MSwxMSArMzQ4OCw2IEBACiAJCQkiJXMgOiB1c2luZyBIaWdoIERNQSIsIF9fZnVuY19fKTsKIAl9CiAKLQluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNjsKLQotCWlmICh2ZGV2LT5jb25maWcuZ3JvX2VuYWJsZSkKLQkJbmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9HUk87Ci0KIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7CiAJaWYgKHJldCkgewogCQl2eGdlX2RlYnVnX2luaXQodnhnZV9od19kZXZpY2VfdHJhY2VfbGV2ZWxfZ2V0KGhsZGV2KSwKQEAgLTQwMDUsMTUgKzQwMTcsNiBAQAogCQl2ZGV2LT5jb25maWcudHhfc3RlZXJpbmdfdHlwZSA9IDA7CiAJfQogCi0JaWYgKHZkZXYtPmNvbmZpZy5ncm9fZW5hYmxlKSB7Ci0JCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKLQkJCSIlczogR2VuZXJpYyByZWNlaXZlIG9mZmxvYWQgZW5hYmxlZCIsCi0JCQl2ZGV2LT5uZGV2LT5uYW1lKTsKLQl9IGVsc2UKLQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCi0JCQkiJXM6IEdlbmVyaWMgcmVjZWl2ZSBvZmZsb2FkIGRpc2FibGVkIiwKLQkJCXZkZXYtPm5kZXYtPm5hbWUpOwotCiAJaWYgKHZkZXYtPmNvbmZpZy5hZGRyX2xlYXJuX2VuKQogCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKIAkJCSIlczogTUFDIEFkZHJlc3MgbGVhcm5pbmcgZW5hYmxlZCIsIHZkZXYtPm5kZXYtPm5hbWUpOwpAQCAtNDU3NSwxMiArNDU3OCwyOSBAQAogCQlnb3RvIF9leGl0NDsKIAl9CiAKKwkvKiBBbHdheXMgZW5hYmxlIEhXVFMuICBUaGlzIHdpbGwgYWx3YXlzIGNhdXNlIHRoZSBGQ1MgdG8gYmUgaW52YWxpZCwKKwkgKiBkdWUgdG8gdGhlIGZhY3QgdGhhdCBIV1RTIGlzIHVzaW5nIHRoZSBGQ1MgYXMgdGhlIGxvY2F0aW9uIG9mIHRoZQorCSAqIHRpbWVzdGFtcC4gIFRoZSBIVyBGQ1MgY2hlY2tpbmcgd2lsbCBzdGlsbCBjb3JyZWN0bHkgZGV0ZXJtaW5lIGlmCisJICogdGhlcmUgaXMgYSB2YWxpZCBjaGVja3N1bSwgYW5kIHRoZSBGQ1MgaXMgYmVpbmcgcmVtb3ZlZCBieSB0aGUgZHJpdmVyCisJICogYW55d2F5LiAgU28gbm8gZnVjbnRpb25hbGl0eSBpcyBiZWluZyBsb3N0LiAgU2luY2UgaXQgaXMgYWx3YXlzCisJICogZW5hYmxlZCwgd2Ugbm93IHNpbXBseSB1c2UgdGhlIGlvY3RsIGNhbGwgdG8gc2V0IHdoZXRoZXIgb3Igbm90IHRoZQorCSAqIGRyaXZlciBzaG91bGQgYmUgcGF5aW5nIGF0dGVudGlvbiB0byB0aGUgSFdUUy4KKwkgKi8KKwlpZiAoaXNfcHJpdmlsZWdlZCA9PSBWWEdFX0hXX09LKSB7CisJCXN0YXR1cyA9IHZ4Z2VfdGltZXN0YW1wX2NvbmZpZyhobGRldik7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLCAiJXM6IEhXVFMgZW5hYmxlIGZhaWxlZCIsCisJCQkJCVZYR0VfRFJJVkVSX05BTUUpOworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gX2V4aXQ0OworCQl9CisJfQorCiAJdnhnZV9od19kZXZpY2VfZGVidWdfc2V0KGhsZGV2LCBWWEdFX0VSUiwgVlhHRV9DT01QT05FTlRfTEwpOwogCiAJLyogc2V0IHByaXZhdGUgZGV2aWNlIGluZm8gKi8KIAlwY2lfc2V0X2RydmRhdGEocGRldiwgaGxkZXYpOwogCi0JbGxfY29uZmlnLT5ncm9fZW5hYmxlID0gVlhHRV9HUk9fQUxXQVlTX0FHR1JFR0FURTsKIAlsbF9jb25maWctPmZpZm9faW5kaWNhdGVfbWF4X3BrdHMgPSBWWEdFX0ZJRk9fSU5ESUNBVEVfTUFYX1BLVFM7CiAJbGxfY29uZmlnLT5hZGRyX2xlYXJuX2VuID0gYWRkcl9sZWFybl9lbjsKIAlsbF9jb25maWctPnJ0aF9hbGdvcml0aG0gPSBSVEhfQUxHX0pFTktJTlM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5oIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uaAppbmRleCA0MDQ3NGYwLi5lZDEyMGFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5oCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmgKQEAgLTE2OCw5ICsxNjgsNiBAQAogCiAjZGVmaW5lCU5FV19OQVBJX1dFSUdIVAk2NAogCWludAkJbmFwaV93ZWlnaHQ7Ci0jZGVmaW5lIFZYR0VfR1JPX0RPTk9UX0FHR1JFR0FURQkJMAotI2RlZmluZSBWWEdFX0dST19BTFdBWVNfQUdHUkVHQVRFCQkxCi0JaW50CQlncm9fZW5hYmxlOwogCWludAkJaW50cl90eXBlOwogI2RlZmluZSBJTlRBCTAKICNkZWZpbmUgTVNJCTEKQEAgLTI5MCwxMyArMjg3LDExIEBACiAJdW5zaWduZWQgbG9uZyBpbnRlcnJ1cHRfY291bnQ7CiAJdW5zaWduZWQgbG9uZyBqaWZmaWVzOwogCi0JLyogY29weSBvZiB0aGUgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgcnhfY3N1bSBpcyB0byBiZSB1c2VkICovCi0JdTMyIHJ4X2NzdW06MSwKLQkgICAgcnhfaHd0czoxOworCS8qIGNvcHkgb2YgdGhlIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHJ4X2h3dHMgaXMgdG8gYmUgdXNlZCAqLworCXUzMiByeF9od3RzOjE7CiAKIAlpbnQgcGt0c19wcm9jZXNzZWQ7CiAJaW50IGJ1ZGdldDsKLQlpbnQgZ3JvX2VuYWJsZTsKIAogCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOwogCXN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaV9wOwpAQCAtMzY5LDkgKzM2NCw4IEBACiAJICovCiAJdTE2CQlhbGxfbXVsdGlfZmxnOwogCi0JIC8qIEEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgcnhfY3N1bSBpcyB0byBiZSB1c2VkIG9yIG5vdC4gKi8KLQl1MzIJcnhfY3N1bToxLAotCQlyeF9od3RzOjEsCisJLyogQSBmbGFnIGluZGljYXRpbmcgd2hldGhlciByeF9od3RzIGlzIHRvIGJlIHVzZWQgb3Igbm90LiAqLworCXUzMglyeF9od3RzOjEsCiAJCXRpdGFuMToxOwogCiAJc3RydWN0IHZ4Z2VfbXNpeF9lbnRyeSAqdnhnZV9lbnRyaWVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuYyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmMKaW5kZXggMjYzOGI4ZC4uZjkzNTE3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuYworKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdHJhZmZpYy5jCkBAIC0xMiw2ICsxMiw3IEBACiAgKiBDb3B5cmlnaHQoYykgMjAwMi0yMDEwIEV4YXIgQ29ycC4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjaW5jbHVkZSAidnhnZS10cmFmZmljLmgiCiAjaW5jbHVkZSAidnhnZS1jb25maWcuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmggYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdHJhZmZpYy5oCmluZGV4IDZjMmZjMGIuLjRhNTE4YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmgKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuaApAQCAtMjQwLDcgKzI0MCw3IEBACiAJdTMyCQkJCWJ0aW1lcl92YWw7CiAjZGVmaW5lIFZYR0VfSFdfTUlOX1RJTV9CVElNRVJfVkFMCQkJCTAKICNkZWZpbmUgVlhHRV9IV19NQVhfVElNX0JUSU1FUl9WQUwJCQkJNjcxMDg4NjQKLSNkZWZpbmUgVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVAkJCQkweGZmZmZmZmZmCisjZGVmaW5lIFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQJCQkJKH4wKQogCiAJdTMyCQkJCXRpbWVyX2FjX2VuOwogI2RlZmluZSBWWEdFX0hXX1RJTV9USU1FUl9BQ19FTkFCTEUJCQkJMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLXZlcnNpb24uaCBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS12ZXJzaW9uLmgKaW5kZXggNTgxZTIxNS4uYjllZmEyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLXZlcnNpb24uaAorKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdmVyc2lvbi5oCkBAIC0xNiw4ICsxNiw4IEBACiAKICNkZWZpbmUgVlhHRV9WRVJTSU9OX01BSk9SCSIyIgogI2RlZmluZSBWWEdFX1ZFUlNJT05fTUlOT1IJIjUiCi0jZGVmaW5lIFZYR0VfVkVSU0lPTl9GSVgJIjIiCi0jZGVmaW5lIFZYR0VfVkVSU0lPTl9CVUlMRAkiMjIyNTkiCisjZGVmaW5lIFZYR0VfVkVSU0lPTl9GSVgJIjMiCisjZGVmaW5lIFZYR0VfVkVSU0lPTl9CVUlMRAkiMjI2NDAiCiAjZGVmaW5lIFZYR0VfVkVSU0lPTl9GT1IJImsiCiAKICNkZWZpbmUgVlhHRV9GV19WRVIobWFqLCBtaW4sIGJsZCkgKCgobWFqKSA8PCAxNikgKyAoKG1pbikgPDwgOCkgKyAoYmxkKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9kbGNpLmMgYi9kcml2ZXJzL25ldC93YW4vZGxjaS5jCmluZGV4IDE0ODFhNDQuLjIxYjEwNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9kbGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2RsY2kuYwpAQCAtMzQxLDEwICszNDEsNiBAQAogCQl9CiAJfQogCi0JZXJyID0gZGV2X2FsbG9jX25hbWUobWFzdGVyLCBtYXN0ZXItPm5hbWUpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIGVycjI7Ci0KIAkqKHNob3J0ICopKG1hc3Rlci0+ZGV2X2FkZHIpID0gZGxjaS0+ZGxjaTsKIAogCWRscCA9IG5ldGRldl9wcml2KG1hc3Rlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaGRsY19mci5jIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfZnIuYwppbmRleCAwZWRiNTM1Li5mYzQzM2YyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsY19mci5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2ZyLmMKQEAgLTEwNzAsNyArMTA3MCw3IEBACiAJaGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhmcmFkKTsKIAlwdmNfZGV2aWNlICpwdmM7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlpbnQgcmVzdWx0LCB1c2VkOworCWludCB1c2VkOwogCiAJaWYgKChwdmMgPSBhZGRfcHZjKGZyYWQsIGRsY2kpKSA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBNZW1vcnkgc3F1ZWV6ZSBvbiBmcl9hZGRfcHZjKClcbiIsCkBAIC0xMTA2LDEzICsxMTA2LDYgQEAKIAlkZXYtPnR4X3F1ZXVlX2xlbiA9IDA7CiAJZGV2LT5tbF9wcml2ID0gcHZjOwogCi0JcmVzdWx0ID0gZGV2X2FsbG9jX25hbWUoZGV2LCBkZXYtPm5hbWUpOwotCWlmIChyZXN1bHQgPCAwKSB7Ci0JCWZyZWVfbmV0ZGV2KGRldik7Ci0JCWRlbGV0ZV91bnVzZWRfcHZjcyhoZGxjKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KIAlpZiAocmVnaXN0ZXJfbmV0ZGV2aWNlKGRldikgIT0gMCkgewogCQlmcmVlX25ldGRldihkZXYpOwogCQlkZWxldGVfdW51c2VkX3B2Y3MoaGRsYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMgYi9kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMKaW5kZXggN2Y1YmI5MS4uZWVjNDYzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYwpAQCAtMzM4LDEwICszMzgsNiBAQAogCWRldl9ob2xkKGRldik7CiAJbGFwYmV0aC0+ZXRoZGV2ID0gZGV2OwogCi0JcmMgPSBkZXZfYWxsb2NfbmFtZShuZGV2LCBuZGV2LT5uYW1lKTsKLQlpZiAocmMgPCAwKSAKLQkJZ290byBmYWlsOwotCiAJcmMgPSAtRUlPOwogCWlmIChyZWdpc3Rlcl9uZXRkZXZpY2UobmRldikpCiAJCWdvdG8gZmFpbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCmluZGV4IDdhZWIxMTMuLmYzNTRiZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZwpAQCAtMjg0LDUgKzI4NCw2IEBACiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvS2NvbmZpZyIKK3NvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9LY29uZmlnIgogCiBlbmRpZiAjIFdMQU4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGUKaW5kZXggZGRkM2ZiNi4uN2JiYTZhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGUKQEAgLTU2LDMgKzU2LDUgQEAKIG9iai0kKENPTkZJR19XTDEyWFhfUExBVEZPUk1fREFUQSkJKz0gd2wxMnh4LwogCiBvYmotJChDT05GSUdfSVdNKQkrPSBpd21jMzIwMHdpZmkvCisKK29iai0kKENPTkZJR19NV0lGSUVYKQkrPSBtd2lmaWV4LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZwppbmRleCA5MmMyMTYyLi5kMWIyMzA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZwpAQCAtMjQsNyArMjQsNiBAQAogCiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZyIKLXNvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvS2NvbmZpZyIKIAogZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9NYWtlZmlsZQppbmRleCA2ZDcxMWVjLi4wZThmNTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL01ha2VmaWxlCkBAIC0xLDYgKzEsNSBAQAogb2JqLSQoQ09ORklHX0FUSDVLKQkJKz0gYXRoNWsvCiBvYmotJChDT05GSUdfQVRIOUtfSFcpCQkrPSBhdGg5ay8KLW9iai0kKENPTkZJR19BUjkxNzBfVVNCKSAgICAgICAgKz0gYXI5MTcwLwogb2JqLSQoQ09ORklHX0NBUkw5MTcwKQkJKz0gY2FybDkxNzAvCiAKIG9iai0kKENPTkZJR19BVEhfQ09NTU9OKQkrPSBhdGgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Yjk2NzJiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLWNvbmZpZyBBUjkxNzBfVVNCCi0JdHJpc3RhdGUgIkF0aGVyb3MgQVI5MTcwIDgwMi4xMW4gVVNCIHN1cHBvcnQgKE9CU09MRVRFKSIKLQlkZXBlbmRzIG9uIFVTQiAmJiBNQUM4MDIxMQotCXNlbGVjdCBGV19MT0FERVIKLQloZWxwCi0JICBUaGlzIGRyaXZlciBpcyBnb2luZyB0byBnZXQgcmVwbGFjZWQgYnkgY2FybDkxNzAuCi0KLQkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBBdGhlcm9zICJvdHVzIiA4MDIuMTFuIFVTQiBkZXZpY2VzLgotCi0JICBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgYWRkaXRpb25hbCBmaXJtd2FyZSAoMiBmaWxlcykuCi0JICBGb3Igbm93LCB0aGVzZSBmaWxlcyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGhlcmU6Ci0KLQkgIGh0dHA6Ly93aXJlbGVzcy5rZXJuZWwub3JnL2VuL3VzZXJzL0RyaXZlcnMvYXI5MTcwCi0KLQkgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCBhcjkxNzB1c2IuCi0KLWNvbmZpZyBBUjkxNzBfTEVEUwotCWJvb2wKLQlkZXBlbmRzIG9uIEFSOTE3MF9VU0IgJiYgTUFDODAyMTFfTEVEUyAmJiAoTEVEU19DTEFTUyA9IHkgfHwgTEVEU19DTEFTUyA9IEFSOTE3MF9VU0IpCi0JZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ5MWM3ZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1hcjkxNzB1c2Itb2JqcyA6PSB1c2IubyBtYWluLm8gY21kLm8gbWFjLm8gcGh5Lm8gbGVkLm8KLQotb2JqLSQoQ09ORklHX0FSOTE3MF9VU0IpICs9IGFyOTE3MHVzYi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2FyOTE3MC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9hcjkxNzAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzcxZTRjZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2FyOTE3MC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjU4ICswLDAgQEAKLS8qCi0gKiBBdGhlcm9zIEFSOTE3MCBkcml2ZXIKLSAqCi0gKiBEcml2ZXIgc3BlY2lmaWMgZGVmaW5pdGlvbnMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgc2VlCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgotICoKLSAqIFRoaXMgZmlsZSBpbmNvcnBvcmF0ZXMgd29yayBjb3ZlcmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAotICogcGVybWlzc2lvbiBub3RpY2U6Ci0gKiAgICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCi0gKgotICogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogICAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLSAqICAgIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqICAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLSAqICAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLSNpZm5kZWYgX19BUjkxNzBfSAotI2RlZmluZSBfX0FSOTE3MF9ICi0KLSNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KLSNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLSNpZmRlZiBDT05GSUdfQVI5MTcwX0xFRFMKLSNpbmNsdWRlIDxsaW51eC9sZWRzLmg+Ci0jZW5kaWYgLyogQ09ORklHX0FSOTE3MF9MRURTICovCi0jaW5jbHVkZSAiZWVwcm9tLmgiCi0jaW5jbHVkZSAiaHcuaCIKLQotI2luY2x1ZGUgIi4uL3JlZ2QuaCIKLQotI2RlZmluZSBQQVlMT0FEX01BWAkoQVI5MTcwX01BWF9DTURfTEVOLzQgLSAxKQotCi1lbnVtIGFyOTE3MF9idyB7Ci0JQVI5MTcwX0JXXzIwLAotCUFSOTE3MF9CV180MF9CRUxPVywKLQlBUjkxNzBfQldfNDBfQUJPVkUsCi0KLQlfX0FSOTE3MF9OVU1fQlcsCi19OwotCi1zdGF0aWMgaW5saW5lIGVudW0gYXI5MTcwX2J3IG5sODAyMTFfdG9fYXI5MTcwKGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgdHlwZSkKLXsKLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIE5MODAyMTFfQ0hBTl9OT19IVDoKLQljYXNlIE5MODAyMTFfQ0hBTl9IVDIwOgotCQlyZXR1cm4gQVI5MTcwX0JXXzIwOwotCWNhc2UgTkw4MDIxMV9DSEFOX0hUNDBNSU5VUzoKLQkJcmV0dXJuIEFSOTE3MF9CV180MF9CRUxPVzsKLQljYXNlIE5MODAyMTFfQ0hBTl9IVDQwUExVUzoKLQkJcmV0dXJuIEFSOTE3MF9CV180MF9BQk9WRTsKLQlkZWZhdWx0OgotCQlCVUcoKTsKLQl9Ci19Ci0KLWVudW0gYXI5MTcwX3JmX2luaXRfbW9kZSB7Ci0JQVI5MTcwX1JGSV9OT05FLAotCUFSOTE3MF9SRklfV0FSTSwKLQlBUjkxNzBfUkZJX0NPTEQsCi19OwotCi0jZGVmaW5lIEFSOTE3MF9NQVhfUlhfQlVGRkVSX1NJWkUJCTgxOTIKLQotI2lmZGVmIENPTkZJR19BUjkxNzBfTEVEUwotc3RydWN0IGFyOTE3MDsKLQotc3RydWN0IGFyOTE3MF9sZWQgewotCXN0cnVjdCBhcjkxNzAgKmFyOwotCXN0cnVjdCBsZWRfY2xhc3NkZXYgbDsKLQljaGFyIG5hbWVbMzJdOwotCXVuc2lnbmVkIGludCB0b2dnbGVkOwotCWJvb2wgbGFzdF9zdGF0ZTsKLQlib29sIHJlZ2lzdGVyZWQ7Ci19OwotCi0jZW5kaWYgLyogQ09ORklHX0FSOTE3MF9MRURTICovCi0KLWVudW0gYXI5MTcwX2RldmljZV9zdGF0ZSB7Ci0JQVI5MTcwX1VOS05PV05fU1RBVEUsCi0JQVI5MTcwX1NUT1BQRUQsCi0JQVI5MTcwX0lETEUsCi0JQVI5MTcwX1NUQVJURUQsCi19OwotCi1zdHJ1Y3QgYXI5MTcwX3J4c3RyZWFtX21wZHVfbWVyZ2UgewotCXN0cnVjdCBhcjkxNzBfcnhfaGVhZCBwbGNwOwotCWJvb2wgaGFzX3BsY3A7Ci19OwotCi1zdHJ1Y3QgYXI5MTcwX3R4X3F1ZXVlX3N0YXRzIHsKLQl1bnNpZ25lZCBpbnQgbGVuOwotCXVuc2lnbmVkIGludCBsaW1pdDsKLQl1bnNpZ25lZCBpbnQgY291bnQ7Ci19OwotCi0jZGVmaW5lIEFSOTE3MF9RVUVVRV9USU1FT1VUCQk2NAotI2RlZmluZSBBUjkxNzBfVFhfVElNRU9VVAkJOAotI2RlZmluZSBBUjkxNzBfSkFOSVRPUl9ERUxBWQkJMTI4Ci0jZGVmaW5lIEFSOTE3MF9UWF9JTlZBTElEX1JBVEUJCTB4ZmZmZmZmZmYKLQotI2RlZmluZSBBUjkxNzBfTlVNX1RYX0xJTUlUX0hBUkQJQVI5MTcwX1RYUV9ERVBUSAotI2RlZmluZSBBUjkxNzBfTlVNX1RYX0xJTUlUX1NPRlQJKEFSOTE3MF9UWFFfREVQVEggLSAxMCkKLQotc3RydWN0IGFyOTE3MCB7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0Jc3RydWN0IGF0aF9jb21tb24gY29tbW9uOwotCXN0cnVjdCBtdXRleCBtdXRleDsKLQllbnVtIGFyOTE3MF9kZXZpY2Vfc3RhdGUgc3RhdGU7Ci0JYm9vbCByZWdpc3RlcmVkOwotCXVuc2lnbmVkIGxvbmcgYmFkX2h3X25hZ2dlcjsKLQotCWludCAoKm9wZW4pKHN0cnVjdCBhcjkxNzAgKik7Ci0Jdm9pZCAoKnN0b3ApKHN0cnVjdCBhcjkxNzAgKik7Ci0JaW50ICgqdHgpKHN0cnVjdCBhcjkxNzAgKiwgc3RydWN0IHNrX2J1ZmYgKik7Ci0JaW50ICgqZXhlY19jbWQpKHN0cnVjdCBhcjkxNzAgKiwgZW51bSBhcjkxNzBfY21kLCB1MzIgLAotCQkJdm9pZCAqLCB1MzIgLCB2b2lkICopOwotCXZvaWQgKCpjYWxsYmFja19jbWQpKHN0cnVjdCBhcjkxNzAgKiwgdTMyICwgdm9pZCAqKTsKLQlpbnQgKCpmbHVzaCkoc3RydWN0IGFyOTE3MCAqKTsKLQotCS8qIGludGVyZmFjZSBtb2RlIHNldHRpbmdzICovCi0Jc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKLQotCS8qIGJlYWNvbmluZyAqLwotCXN0cnVjdCBza19idWZmICpiZWFjb247Ci0Jc3RydWN0IHdvcmtfc3RydWN0IGJlYWNvbl93b3JrOwotCWJvb2wgZW5hYmxlX2JlYWNvbjsKLQotCS8qIGNyeXB0b2dyYXBoaWMgZW5naW5lICovCi0JdTY0IHVzZWRrZXlzOwotCWJvb2wgcnhfc29mdHdhcmVfZGVjcnlwdGlvbjsKLQlib29sIGRpc2FibGVfb2ZmbG9hZDsKLQotCS8qIGZpbHRlciBzZXR0aW5ncyAqLwotCXU2NCBjdXJfbWNfaGFzaDsKLQl1MzIgY3VyX2ZpbHRlcjsKLQl1bnNpZ25lZCBpbnQgZmlsdGVyX3N0YXRlOwotCWJvb2wgc25pZmZlcl9lbmFibGVkOwotCi0JLyogUEhZICovCi0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOwotCWludCBub2lzZVs0XTsKLQotCS8qIHBvd2VyIGNhbGlicmF0aW9uIGRhdGEgKi8KLQl1OCBwb3dlcl81R19sZWdbNF07Ci0JdTggcG93ZXJfMkdfY2NrWzRdOwotCXU4IHBvd2VyXzJHX29mZG1bNF07Ci0JdTggcG93ZXJfNUdfaHQyMFs4XTsKLQl1OCBwb3dlcl81R19odDQwWzhdOwotCXU4IHBvd2VyXzJHX2h0MjBbOF07Ci0JdTggcG93ZXJfMkdfaHQ0MFs4XTsKLQotCXU4IHBoeV9oZWF2eV9jbGlwOwotCi0jaWZkZWYgQ09ORklHX0FSOTE3MF9MRURTCi0Jc3RydWN0IGRlbGF5ZWRfd29yayBsZWRfd29yazsKLQlzdHJ1Y3QgYXI5MTcwX2xlZCBsZWRzW0FSOTE3MF9OVU1fTEVEU107Ci0jZW5kaWYgLyogQ09ORklHX0FSOTE3MF9MRURTICovCi0KLQkvKiBxb3MgcXVldWUgc2V0dGluZ3MgKi8KLQlzcGlubG9ja190IHR4X3N0YXRzX2xvY2s7Ci0Jc3RydWN0IGFyOTE3MF90eF9xdWV1ZV9zdGF0cyB0eF9zdGF0c1s1XTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyBlZGNmWzVdOwotCi0Jc3BpbmxvY2tfdCBjbWRsb2NrOwotCV9fbGUzMiBjbWRidWZbUEFZTE9BRF9NQVggKyAxXTsKLQotCS8qIE1BQyBzdGF0aXN0aWNzICovCi0Jc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgc3RhdHM7Ci0KLQkvKiBFRVBST00gKi8KLQlzdHJ1Y3QgYXI5MTcwX2VlcHJvbSBlZXByb207Ci0KLQkvKiB0eCBxdWV1ZXMgLSBhcyBzZWVuIGJ5IGh3IC0gKi8KLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3BlbmRpbmdbX19BUjkxNzBfTlVNX1RYUV07Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9zdGF0dXNbX19BUjkxNzBfTlVNX1RYUV07Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayB0eF9qYW5pdG9yOwotCi0JLyogcnhzdHJlYW0gbXBkdSBtZXJnZSAqLwotCXN0cnVjdCBhcjkxNzBfcnhzdHJlYW1fbXBkdV9tZXJnZSByeF9tcGR1OwotCXN0cnVjdCBza19idWZmICpyeF9mYWlsb3ZlcjsKLQlpbnQgcnhfZmFpbG92ZXJfbWlzc2luZzsKLQotCS8qIChjYWNoZWQpIEhXIEEtTVBEVSBzZXR0aW5ncyAqLwotCXU4IGdsb2JhbF9hbXBkdV9kZW5zaXR5OwotCXU4IGdsb2JhbF9hbXBkdV9mYWN0b3I7Ci19OwotCi1zdHJ1Y3QgYXI5MTcwX3R4X2luZm8gewotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLX07Ci0KLSNkZWZpbmUgSVNfU1RBUlRFRChhKQkJKCgoc3RydWN0IGFyOTE3MCAqKWEpLT5zdGF0ZSA+PSBBUjkxNzBfU1RBUlRFRCkKLSNkZWZpbmUgSVNfQUNDRVBUSU5HX0NNRChhKQkoKChzdHJ1Y3QgYXI5MTcwICopYSktPnN0YXRlID49IEFSOTE3MF9JRExFKQotCi0vKiBleHBvcnRlZCBpbnRlcmZhY2UgKi8KLXZvaWQgKmFyOTE3MF9hbGxvYyhzaXplX3QgcHJpdl9zaXplKTsKLWludCBhcjkxNzBfcmVnaXN0ZXIoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBkZXZpY2UgKnBkZXYpOwotdm9pZCBhcjkxNzBfcngoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBza19idWZmICpza2IpOwotdm9pZCBhcjkxNzBfdW5yZWdpc3RlcihzdHJ1Y3QgYXI5MTcwICphcik7Ci12b2lkIGFyOTE3MF90eF9jYWxsYmFjayhzdHJ1Y3QgYXI5MTcwICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci12b2lkIGFyOTE3MF9oYW5kbGVfY29tbWFuZF9yZXNwb25zZShzdHJ1Y3QgYXI5MTcwICphciwgdm9pZCAqYnVmLCB1MzIgbGVuKTsKLWludCBhcjkxNzBfbmFnX2xpbWl0ZXIoc3RydWN0IGFyOTE3MCAqYXIpOwotCi0vKiBNQUMgKi8KLXZvaWQgYXI5MTcwX29wX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWludCBhcjkxNzBfaW5pdF9tYWMoc3RydWN0IGFyOTE3MCAqYXIpOwotaW50IGFyOTE3MF9zZXRfcW9zKHN0cnVjdCBhcjkxNzAgKmFyKTsKLWludCBhcjkxNzBfdXBkYXRlX211bHRpY2FzdChzdHJ1Y3QgYXI5MTcwICphciwgY29uc3QgdTY0IG1jX2hhc3QpOwotaW50IGFyOTE3MF91cGRhdGVfZnJhbWVfZmlsdGVyKHN0cnVjdCBhcjkxNzAgKmFyLCBjb25zdCB1MzIgZmlsdGVyKTsKLWludCBhcjkxNzBfc2V0X29wZXJhdGluZ19tb2RlKHN0cnVjdCBhcjkxNzAgKmFyKTsKLWludCBhcjkxNzBfc2V0X2JlYWNvbl90aW1lcnMoc3RydWN0IGFyOTE3MCAqYXIpOwotaW50IGFyOTE3MF9zZXRfZHluX3NpZnNfYWNrKHN0cnVjdCBhcjkxNzAgKmFyKTsKLWludCBhcjkxNzBfc2V0X3Nsb3RfdGltZShzdHJ1Y3QgYXI5MTcwICphcik7Ci1pbnQgYXI5MTcwX3NldF9iYXNpY19yYXRlcyhzdHJ1Y3QgYXI5MTcwICphcik7Ci1pbnQgYXI5MTcwX3NldF9od3JldHJ5X2xpbWl0KHN0cnVjdCBhcjkxNzAgKmFyLCB1MzIgbWF4X3JldHJ5KTsKLWludCBhcjkxNzBfdXBkYXRlX2JlYWNvbihzdHJ1Y3QgYXI5MTcwICphcik7Ci12b2lkIGFyOTE3MF9uZXdfYmVhY29uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci1pbnQgYXI5MTcwX3VwbG9hZF9rZXkoc3RydWN0IGFyOTE3MCAqYXIsIHU4IGlkLCBjb25zdCB1OCAqbWFjLCB1OCBrdHlwZSwKLQkJICAgICAgdTgga2V5aWR4LCB1OCAqa2V5ZGF0YSwgaW50IGtleWxlbik7Ci1pbnQgYXI5MTcwX2Rpc2FibGVfa2V5KHN0cnVjdCBhcjkxNzAgKmFyLCB1OCBpZCk7Ci0KLS8qIExFRHMgKi8KLSNpZmRlZiBDT05GSUdfQVI5MTcwX0xFRFMKLWludCBhcjkxNzBfcmVnaXN0ZXJfbGVkcyhzdHJ1Y3QgYXI5MTcwICphcik7Ci12b2lkIGFyOTE3MF91bnJlZ2lzdGVyX2xlZHMoc3RydWN0IGFyOTE3MCAqYXIpOwotI2VuZGlmIC8qIENPTkZJR19BUjkxNzBfTEVEUyAqLwotaW50IGFyOTE3MF9pbml0X2xlZHMoc3RydWN0IGFyOTE3MCAqYXIpOwotaW50IGFyOTE3MF9zZXRfbGVkc19zdGF0ZShzdHJ1Y3QgYXI5MTcwICphciwgdTMyIGxlZF9zdGF0ZSk7Ci0KLS8qIFBIWSAvIFJGICovCi1pbnQgYXI5MTcwX2luaXRfcGh5KHN0cnVjdCBhcjkxNzAgKmFyLCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpOwotaW50IGFyOTE3MF9pbml0X3JmKHN0cnVjdCBhcjkxNzAgKmFyKTsKLWludCBhcjkxNzBfc2V0X2NoYW5uZWwoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKLQkJICAgICAgIGVudW0gYXI5MTcwX3JmX2luaXRfbW9kZSByZmksIGVudW0gYXI5MTcwX2J3IGJ3KTsKLQotI2VuZGlmIC8qIF9fQVI5MTcwX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2NtZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDUyYzUwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvY21kLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoKLSAqIEF0aGVyb3MgQVI5MTcwIGRyaXZlcgotICoKLSAqIEJhc2ljIEhXIHJlZ2lzdGVyL21lbW9yeS9jb21tYW5kIGFjY2VzcyBmdW5jdGlvbnMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgc2VlCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgotICoKLSAqIFRoaXMgZmlsZSBpbmNvcnBvcmF0ZXMgd29yayBjb3ZlcmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAotICogcGVybWlzc2lvbiBub3RpY2U6Ci0gKiAgICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCi0gKgotICogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogICAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLSAqICAgIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqICAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLSAqICAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUgImFyOTE3MC5oIgotI2luY2x1ZGUgImNtZC5oIgotCi1pbnQgYXI5MTcwX3dyaXRlX21lbShzdHJ1Y3QgYXI5MTcwICphciwgY29uc3QgX19sZTMyICpkYXRhLCBzaXplX3QgbGVuKQotewotCWludCBlcnI7Ci0KLQlpZiAodW5saWtlbHkoIUlTX0FDQ0VQVElOR19DTUQoYXIpKSkKLQkJcmV0dXJuIDA7Ci0KLQllcnIgPSBhci0+ZXhlY19jbWQoYXIsIEFSOTE3MF9DTURfV01FTSwgbGVuLCAodTggKikgZGF0YSwgMCwgTlVMTCk7Ci0JaWYgKGVycikKLQkJd2lwaHlfZGVidWcoYXItPmh3LT53aXBoeSwgIndyaXRpbmcgbWVtb3J5IGZhaWxlZFxuIik7Ci0JcmV0dXJuIGVycjsKLX0KLQotaW50IGFyOTE3MF93cml0ZV9yZWcoc3RydWN0IGFyOTE3MCAqYXIsIGNvbnN0IHUzMiByZWcsIGNvbnN0IHUzMiB2YWwpCi17Ci0JY29uc3QgX19sZTMyIGJ1ZlsyXSA9IHsKLQkJY3B1X3RvX2xlMzIocmVnKSwKLQkJY3B1X3RvX2xlMzIodmFsKSwKLQl9OwotCWludCBlcnI7Ci0KLQlpZiAodW5saWtlbHkoIUlTX0FDQ0VQVElOR19DTUQoYXIpKSkKLQkJcmV0dXJuIDA7Ci0KLQllcnIgPSBhci0+ZXhlY19jbWQoYXIsIEFSOTE3MF9DTURfV1JFRywgc2l6ZW9mKGJ1ZiksCi0JCQkgICAodTggKikgYnVmLCAwLCBOVUxMKTsKLQlpZiAoZXJyKQotCQl3aXBoeV9kZWJ1Zyhhci0+aHctPndpcGh5LCAid3JpdGluZyByZWcgJSN4ICh2YWwgJSN4KSBmYWlsZWRcbiIsCi0JCQkgICAgcmVnLCB2YWwpOwotCXJldHVybiBlcnI7Ci19Ci0KLWludCBhcjkxNzBfcmVhZF9tcmVnKHN0cnVjdCBhcjkxNzAgKmFyLCBpbnQgbnJlZ3MsIGNvbnN0IHUzMiAqcmVncywgdTMyICpvdXQpCi17Ci0JaW50IGksIGVycjsKLQlfX2xlMzIgKm9mZnMsICpyZXM7Ci0KLQlpZiAodW5saWtlbHkoIUlTX0FDQ0VQVElOR19DTUQoYXIpKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBhYnVzZSAib3V0IiBmb3IgdGhlIHJlZ2lzdGVyIG9mZnNldHMsIG11c3QgYmUgc2FtZSBsZW5ndGggKi8KLQlvZmZzID0gKF9fbGUzMiAqKW91dDsKLQlmb3IgKGkgPSAwOyBpIDwgbnJlZ3M7IGkrKykKLQkJb2Zmc1tpXSA9IGNwdV90b19sZTMyKHJlZ3NbaV0pOwotCi0JLyogYWxzbyB1c2UgdGhlIHNhbWUgYnVmZmVyIGZvciB0aGUgaW5wdXQgKi8KLQlyZXMgPSAoX19sZTMyICopb3V0OwotCi0JZXJyID0gYXItPmV4ZWNfY21kKGFyLCBBUjkxNzBfQ01EX1JSRUcsCi0JCQkgICA0ICogbnJlZ3MsICh1OCAqKW9mZnMsCi0JCQkgICA0ICogbnJlZ3MsICh1OCAqKXJlcyk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCS8qIGNvbnZlcnQgcmVzdWx0IHRvIGNwdSBlbmRpYW4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnJlZ3M7IGkrKykKLQkJb3V0W2ldID0gbGUzMl90b19jcHUocmVzW2ldKTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgYXI5MTcwX3JlYWRfcmVnKHN0cnVjdCBhcjkxNzAgKmFyLCB1MzIgcmVnLCB1MzIgKnZhbCkKLXsKLQlyZXR1cm4gYXI5MTcwX3JlYWRfbXJlZyhhciwgMSwgJnJlZywgdmFsKTsKLX0KLQotaW50IGFyOTE3MF9lY2hvX3Rlc3Qoc3RydWN0IGFyOTE3MCAqYXIsIHUzMiB2KQotewotCV9fbGUzMiBlY2hvYnVmID0gY3B1X3RvX2xlMzIodik7Ci0JX19sZTMyIGVjaG9yZXM7Ci0JaW50IGVycjsKLQotCWlmICh1bmxpa2VseSghSVNfQUNDRVBUSU5HX0NNRChhcikpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWVyciA9IGFyLT5leGVjX2NtZChhciwgQVI5MTcwX0NNRF9FQ0hPLAotCQkJICAgNCwgKHU4ICopJmVjaG9idWYsCi0JCQkgICA0LCAodTggKikmZWNob3Jlcyk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWlmIChlY2hvYnVmICE9IGVjaG9yZXMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2NtZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9jbWQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM4MTM0YjQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9jbWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qCi0gKiBBdGhlcm9zIEFSOTE3MCBkcml2ZXIKLSAqCi0gKiBCYXNpYyBIVyByZWdpc3Rlci9tZW1vcnkvY29tbWFuZCBhY2Nlc3MgZnVuY3Rpb25zCi0gKgotICogQ29weXJpZ2h0IDIwMDgsIEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHNlZQotICogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KLSAqCi0gKiBUaGlzIGZpbGUgaW5jb3Jwb3JhdGVzIHdvcmsgY292ZXJlZCBieSB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQKLSAqIHBlcm1pc3Npb24gbm90aWNlOgotICogICAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSW5jLgotICoKLSAqICAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSAqICAgIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICAgIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0gKiAgICBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0gKiAgICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSAqICAgIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0gKiAgICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0jaWZuZGVmIF9fQ01EX0gKLSNkZWZpbmUgX19DTURfSAotCi0jaW5jbHVkZSAiYXI5MTcwLmgiCi0KLS8qIGJhc2ljIEhXIGFjY2VzcyAqLwotaW50IGFyOTE3MF93cml0ZV9tZW0oc3RydWN0IGFyOTE3MCAqYXIsIGNvbnN0IF9fbGUzMiAqZGF0YSwgc2l6ZV90IGxlbik7Ci1pbnQgYXI5MTcwX3dyaXRlX3JlZyhzdHJ1Y3QgYXI5MTcwICphciwgY29uc3QgdTMyIHJlZywgY29uc3QgdTMyIHZhbCk7Ci1pbnQgYXI5MTcwX3JlYWRfcmVnKHN0cnVjdCBhcjkxNzAgKmFyLCB1MzIgcmVnLCB1MzIgKnZhbCk7Ci1pbnQgYXI5MTcwX3JlYWRfbXJlZyhzdHJ1Y3QgYXI5MTcwICphciwgaW50IG5yZWdzLCBjb25zdCB1MzIgKnJlZ3MsIHUzMiAqb3V0KTsKLWludCBhcjkxNzBfZWNob190ZXN0KHN0cnVjdCBhcjkxNzAgKmFyLCB1MzIgdik7Ci0KLS8qCi0gKiBNYWNyb3MgdG8gZmFjaWxpdGF0ZSB3cml0aW5nIG11bHRpcGxlIHJlZ2lzdGVycyBpbiBhIHNpbmdsZQotICogd3JpdGUtY29tYmluaW5nIFVTQiBjb21tYW5kLiBOb3RlIHRoYXQgd2hlbiB0aGUgZmlyc3QgZ3JvdXAKLSAqIGZhaWxzIHRoZSB3aG9sZSB0aGluZyB3aWxsIGZhaWwgd2l0aG91dCBhbnkgb3RoZXJzIGF0dGVtcHRlZCwKLSAqIGJ1dCB5b3Ugd29uJ3Qga25vdyB3aGljaCB3cml0ZSBpbiB0aGUgZ3JvdXAgZmFpbGVkLgotICovCi0jZGVmaW5lIGFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcikJCQkJCVwKLWRvIHsJCQkJCQkJCQlcCi0JaW50IF9fbnJlZyA9IDAsIF9fZXJyID0gMDsJCQkJCVwKLQlzdHJ1Y3QgYXI5MTcwICpfX2FyID0gYXI7Ci0KLSNkZWZpbmUgYXI5MTcwX3JlZ3dyaXRlKHIsIHYpIGRvIHsJCQkJCVwKLQlfX2FyLT5jbWRidWZbMiAqIF9fbnJlZyArIDFdID0gY3B1X3RvX2xlMzIocik7CQkJXAotCV9fYXItPmNtZGJ1ZlsyICogX19ucmVnICsgMl0gPSBjcHVfdG9fbGUzMih2KTsJCQlcCi0JX19ucmVnKys7CQkJCQkJCVwKLQlpZiAoKF9fbnJlZyA+PSBQQVlMT0FEX01BWC8yKSkgewkJCQlcCi0JCWlmIChJU19BQ0NFUFRJTkdfQ01EKF9fYXIpKQkJCQlcCi0JCQlfX2VyciA9IGFyLT5leGVjX2NtZChfX2FyLCBBUjkxNzBfQ01EX1dSRUcsCVwKLQkJCQkJICAgICA4ICogX19ucmVnLAkJXAotCQkJCQkgICAgICh1OCAqKSAmX19hci0+Y21kYnVmWzFdLAlcCi0JCQkJCSAgICAgMCwgTlVMTCk7CQkJXAotCQlfX25yZWcgPSAwOwkJCQkJCVwKLQkJaWYgKF9fZXJyKQkJCQkJCVwKLQkJCWdvdG8gX19yZWd3cml0ZV9vdXQ7CQkJCVwKLQl9CQkJCQkJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIGFyOTE3MF9yZWd3cml0ZV9maW5pc2goKQkJCQkJXAotX19yZWd3cml0ZV9vdXQgOgkJCQkJCQlcCi0JaWYgKF9fbnJlZykgewkJCQkJCQlcCi0JCWlmIChJU19BQ0NFUFRJTkdfQ01EKF9fYXIpKQkJCQlcCi0JCQlfX2VyciA9IGFyLT5leGVjX2NtZChfX2FyLCBBUjkxNzBfQ01EX1dSRUcsCVwKLQkJCQkJICAgICA4ICogX19ucmVnLAkJXAotCQkJCQkgICAgICh1OCAqKSAmX19hci0+Y21kYnVmWzFdLAlcCi0JCQkJCSAgICAgMCwgTlVMTCk7CQkJXAotCQlfX25yZWcgPSAwOwkJCQkJCVwKLQl9Ci0KLSNkZWZpbmUgYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpCQkJCQlcCi0JX19lcnI7CQkJCQkJCQlcCi19IHdoaWxlICgwKTsKLQotI2VuZGlmIC8qIF9fQ01EX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvZWVwcm9tLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2VlcHJvbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzQ2NjM4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvZWVwcm9tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkgKzAsMCBAQAotLyoKLSAqIEF0aGVyb3MgQVI5MTcwIGRyaXZlcgotICoKLSAqIEVFUFJPTSBsYXlvdXQKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgc2VlCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgotICoKLSAqIFRoaXMgZmlsZSBpbmNvcnBvcmF0ZXMgd29yayBjb3ZlcmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAotICogcGVybWlzc2lvbiBub3RpY2U6Ci0gKiAgICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCi0gKgotICogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogICAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLSAqICAgIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqICAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLSAqICAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLSNpZm5kZWYgX19BUjkxNzBfRUVQUk9NX0gKLSNkZWZpbmUgX19BUjkxNzBfRUVQUk9NX0gKLQotI2RlZmluZSBBUjU0MTZfTUFYX0NIQUlOUwkJMgotI2RlZmluZSBBUjU0MTZfTU9EQUxfU1BVUlMJCTUKLQotc3RydWN0IGFyOTE3MF9lZXByb21fbW9kYWwgewotCV9fbGUzMglhbnRDdHJsQ2hhaW5bQVI1NDE2X01BWF9DSEFJTlNdOwotCV9fbGUzMglhbnRDdHJsQ29tbW9uOwotCXM4CWFudGVubmFHYWluQ2hbQVI1NDE2X01BWF9DSEFJTlNdOwotCXU4CXN3aXRjaFNldHRsaW5nOwotCXU4CXR4UnhBdHRlbkNoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl1OAlyeFR4TWFyZ2luQ2hbQVI1NDE2X01BWF9DSEFJTlNdOwotCXM4CWFkY0Rlc2lyZWRTaXplOwotCXM4CXBnYURlc2lyZWRTaXplOwotCXU4CXhsbmFHYWluQ2hbQVI1NDE2X01BWF9DSEFJTlNdOwotCXU4CXR4RW5kVG9YcGFPZmY7Ci0JdTgJdHhFbmRUb1J4T247Ci0JdTgJdHhGcmFtZVRvWHBhT247Ci0JdTgJdGhyZXNoNjI7Ci0JczgJbm9pc2VGbG9vclRocmVzaENoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl1OAl4cGRHYWluOwotCXU4CXhwZDsKLQlzOAlpcUNhbElDaFtBUjU0MTZfTUFYX0NIQUlOU107Ci0JczgJaXFDYWxRQ2hbQVI1NDE2X01BWF9DSEFJTlNdOwotCXU4CXBkR2Fpbk92ZXJsYXA7Ci0JdTgJb2I7Ci0JdTgJZGI7Ci0JdTgJeHBhQmlhc0x2bDsKLQl1OAlwd3JEZWNyZWFzZUZvcjJDaGFpbjsKLQl1OAlwd3JEZWNyZWFzZUZvcjNDaGFpbjsKLQl1OAl0eEZyYW1lVG9EYXRhU3RhcnQ7Ci0JdTgJdHhGcmFtZVRvUGFPbjsKLQl1OAlodDQwUG93ZXJJbmNGb3JQZGFkYzsKLQl1OAlic3dBdHRlbltBUjU0MTZfTUFYX0NIQUlOU107Ci0JdTgJYnN3TWFyZ2luW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl1OAlzd1NldHRsZUh0NDA7Ci0JdTgJcmVzZXJ2ZWRbMjJdOwotCXN0cnVjdCBzcHVyX2NoYW5uZWwgewotCQlfX2xlMTYgc3B1ckNoYW47Ci0JCXU4CXNwdXJSYW5nZUxvdzsKLQkJdTgJc3B1clJhbmdlSGlnaDsKLQl9IF9fcGFja2VkIHNwdXJfY2hhbm5lbHNbQVI1NDE2X01PREFMX1NQVVJTXTsKLX0gX19wYWNrZWQ7Ci0KLSNkZWZpbmUgQVI1NDE2X05VTV9QRF9HQUlOUwkJNAotI2RlZmluZSBBUjU0MTZfUERfR0FJTl9JQ0VQVFMJCTUKLQotc3RydWN0IGFyOTE3MF9jYWxpYnJhdGlvbl9kYXRhX3Blcl9mcmVxIHsKLQl1OAlwd3JfcGRnW0FSNTQxNl9OVU1fUERfR0FJTlNdW0FSNTQxNl9QRF9HQUlOX0lDRVBUU107Ci0JdTgJdnBkX3BkZ1tBUjU0MTZfTlVNX1BEX0dBSU5TXVtBUjU0MTZfUERfR0FJTl9JQ0VQVFNdOwotfSBfX3BhY2tlZDsKLQotI2RlZmluZSBBUjU0MTZfTlVNXzVHX0NBTF9QSUVSUwkJOAotI2RlZmluZSBBUjU0MTZfTlVNXzJHX0NBTF9QSUVSUwkJNAotCi0jZGVmaW5lIEFSNTQxNl9OVU1fNUdfVEFSR0VUX1BXUlMJOAotI2RlZmluZSBBUjU0MTZfTlVNXzJHX0NDS19UQVJHRVRfUFdSUwkzCi0jZGVmaW5lIEFSNTQxNl9OVU1fMkdfT0ZETV9UQVJHRVRfUFdSUwk0Ci0jZGVmaW5lIEFSNTQxNl9NQVhfTlVNX1RHVF9QV1JTCQk4Ci0KLXN0cnVjdCBhcjkxNzBfY2FsaWJyYXRpb25fdGFyZ2V0X3Bvd2VyX2xlZ2FjeSB7Ci0JdTgJZnJlcTsKLQl1OAlwb3dlcls0XTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBhcjkxNzBfY2FsaWJyYXRpb25fdGFyZ2V0X3Bvd2VyX2h0IHsKLQl1OAlmcmVxOwotCXU4CXBvd2VyWzhdOwotfSBfX3BhY2tlZDsKLQotI2RlZmluZSBBUjU0MTZfTlVNX0NUTFMJCQkyNAotCi1zdHJ1Y3QgYXI5MTcwX2NhbGN0bF9lZGdlcyB7Ci0JdTgJY2hhbm5lbDsKLSNkZWZpbmUgQVI5MTcwX0NBTENUTF9FREdFX0ZMQUdTCTB4QzAKLQl1OAlwb3dlcl9mbGFnczsKLX0gX19wYWNrZWQ7Ci0KLSNkZWZpbmUgQVI1NDE2X05VTV9CQU5EX0VER0VTCQk4Ci0KLXN0cnVjdCBhcjkxNzBfY2FsY3RsX2RhdGEgewotCXN0cnVjdCBhcjkxNzBfY2FsY3RsX2VkZ2VzCi0JCWNvbnRyb2xfZWRnZXNbQVI1NDE2X01BWF9DSEFJTlNdW0FSNTQxNl9OVU1fQkFORF9FREdFU107Ci19IF9fcGFja2VkOwotCi0KLXN0cnVjdCBhcjkxNzBfZWVwcm9tIHsKLQlfX2xlMTYJbGVuZ3RoOwotCV9fbGUxNgljaGVja3N1bTsKLQlfX2xlMTYJdmVyc2lvbjsKLQl1OAlvcGVyYXRpbmdfZmxhZ3M7Ci0jZGVmaW5lIEFSOTE3MF9PUEZMQUdfNUdIWgkJMQotI2RlZmluZSBBUjkxNzBfT1BGTEFHXzJHSFoJCTIKLQl1OAltaXNjOwotCV9fbGUxNglyZWdfZG9tYWluWzJdOwotCXU4CW1hY19hZGRyZXNzWzZdOwotCXU4CXJ4X21hc2s7Ci0JdTgJdHhfbWFzazsKLQlfX2xlMTYJcmZfc2lsZW50OwotCV9fbGUxNglibHVldG9vdGhfb3B0aW9uczsKLQlfX2xlMTYJZGV2aWNlX2NhcGFiaWxpdGllczsKLQlfX2xlMzIJYnVpbGRfbnVtYmVyOwotCXU4CWRldmljZVR5cGU7Ci0JdTgJcmVzZXJ2ZWRbMzNdOwotCi0JdTgJY3VzdG9tZXJfZGF0YVs2NF07Ci0KLQlzdHJ1Y3QgYXI5MTcwX2VlcHJvbV9tb2RhbAotCQltb2RhbF9oZWFkZXJbMl07Ci0KLQl1OAljYWxfZnJlcV9waWVyXzVHW0FSNTQxNl9OVU1fNUdfQ0FMX1BJRVJTXTsKLQl1OAljYWxfZnJlcV9waWVyXzJHW0FSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTXTsKLQotCXN0cnVjdCBhcjkxNzBfY2FsaWJyYXRpb25fZGF0YV9wZXJfZnJlcQotCQljYWxfcGllcl9kYXRhXzVHW0FSNTQxNl9NQVhfQ0hBSU5TXVtBUjU0MTZfTlVNXzVHX0NBTF9QSUVSU10sCi0JCWNhbF9waWVyX2RhdGFfMkdbQVI1NDE2X01BWF9DSEFJTlNdW0FSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTXTsKLQotCS8qIHBvd2VyIGNhbGlicmF0aW9uIGRhdGEgKi8KLQlzdHJ1Y3QgYXI5MTcwX2NhbGlicmF0aW9uX3RhcmdldF9wb3dlcl9sZWdhY3kKLQkJY2FsX3RndF9wd3JfNUdbQVI1NDE2X05VTV81R19UQVJHRVRfUFdSU107Ci0Jc3RydWN0IGFyOTE3MF9jYWxpYnJhdGlvbl90YXJnZXRfcG93ZXJfaHQKLQkJY2FsX3RndF9wd3JfNUdfaHQyMFtBUjU0MTZfTlVNXzVHX1RBUkdFVF9QV1JTXSwKLQkJY2FsX3RndF9wd3JfNUdfaHQ0MFtBUjU0MTZfTlVNXzVHX1RBUkdFVF9QV1JTXTsKLQotCXN0cnVjdCBhcjkxNzBfY2FsaWJyYXRpb25fdGFyZ2V0X3Bvd2VyX2xlZ2FjeQotCQljYWxfdGd0X3B3cl8yR19jY2tbQVI1NDE2X05VTV8yR19DQ0tfVEFSR0VUX1BXUlNdLAotCQljYWxfdGd0X3B3cl8yR19vZmRtW0FSNTQxNl9OVU1fMkdfT0ZETV9UQVJHRVRfUFdSU107Ci0Jc3RydWN0IGFyOTE3MF9jYWxpYnJhdGlvbl90YXJnZXRfcG93ZXJfaHQKLQkJY2FsX3RndF9wd3JfMkdfaHQyMFtBUjU0MTZfTlVNXzJHX09GRE1fVEFSR0VUX1BXUlNdLAotCQljYWxfdGd0X3B3cl8yR19odDQwW0FSNTQxNl9OVU1fMkdfT0ZETV9UQVJHRVRfUFdSU107Ci0KLQkvKiBjb25mb3JtYW5jZSB0ZXN0aW5nIGxpbWl0cyAqLwotCXU4CWN0bF9pbmRleFtBUjU0MTZfTlVNX0NUTFNdOwotCXN0cnVjdCBhcjkxNzBfY2FsY3RsX2RhdGEKLQkJY3RsX2RhdGFbQVI1NDE2X05VTV9DVExTXTsKLQotCXU4CXBhZDsKLQlfX2xlMTYJc3Vic3lzdGVtX2lkOwotfSBfX3BhY2tlZDsKLQotI2VuZGlmIC8qIF9fQVI5MTcwX0VFUFJPTV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2h3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2h3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2ZjFmM2MuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9ody5oCisrKyAvZGV2L251bGwKQEAgLTEsNDMwICswLDAgQEAKLS8qCi0gKiBBdGhlcm9zIEFSOTE3MCBkcml2ZXIKLSAqCi0gKiBIYXJkd2FyZS1zcGVjaWZpYyBkZWZpbml0aW9ucwotICoKLSAqIENvcHlyaWdodCAyMDA4LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBzZWUKLSAqIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCi0gKgotICogVGhpcyBmaWxlIGluY29ycG9yYXRlcyB3b3JrIGNvdmVyZWQgYnkgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCi0gKiBwZXJtaXNzaW9uIG5vdGljZToKLSAqICAgIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KLSAqCi0gKiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiAgICBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgotICogICAgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiAgICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgotICogICAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotI2lmbmRlZiBfX0FSOTE3MF9IV19ICi0jZGVmaW5lIF9fQVI5MTcwX0hXX0gKLQotI2RlZmluZSBBUjkxNzBfTUFYX0NNRF9MRU4JNjQKLQotZW51bSBhcjkxNzBfY21kIHsKLQlBUjkxNzBfQ01EX1JSRUcJCT0gMHgwMCwKLQlBUjkxNzBfQ01EX1dSRUcJCT0gMHgwMSwKLQlBUjkxNzBfQ01EX1JNRU0JCT0gMHgwMiwKLQlBUjkxNzBfQ01EX1dNRU0JCT0gMHgwMywKLQlBUjkxNzBfQ01EX0JJVEFORAk9IDB4MDQsCi0JQVI5MTcwX0NNRF9CSVRPUgk9IDB4MDUsCi0JQVI5MTcwX0NNRF9FS0VZCQk9IDB4MjgsCi0JQVI5MTcwX0NNRF9ES0VZCQk9IDB4MjksCi0JQVI5MTcwX0NNRF9GUkVRVUVOQ1kJPSAweDMwLAotCUFSOTE3MF9DTURfUkZfSU5JVAk9IDB4MzEsCi0JQVI5MTcwX0NNRF9TWU5USAk9IDB4MzIsCi0JQVI5MTcwX0NNRF9GUkVRX1NUQVJUCT0gMHgzMywKLQlBUjkxNzBfQ01EX0VDSE8JCT0gMHg4MCwKLQlBUjkxNzBfQ01EX1RBTExZCT0gMHg4MSwKLQlBUjkxNzBfQ01EX1RBTExZX0FQRAk9IDB4ODIsCi0JQVI5MTcwX0NNRF9DT05GSUcJPSAweDgzLAotCUFSOTE3MF9DTURfUkVTRVQJPSAweDkwLAotCUFSOTE3MF9DTURfREtSRVNFVAk9IDB4OTEsCi0JQVI5MTcwX0NNRF9ES1RYX1NUQVRVUwk9IDB4OTIsCi0JQVI5MTcwX0NNRF9GREMJCT0gMHhBMCwKLQlBUjkxNzBfQ01EX1dSRUVQUk9NCT0gMHhCMCwKLQlBUjkxNzBfQ01EX1dGTEFTSAk9IDB4QjAsCi0JQVI5MTcwX0NNRF9GTEFTSF9FUkFTRQk9IDB4QjEsCi0JQVI5MTcwX0NNRF9GTEFTSF9QUk9HCT0gMHhCMiwKLQlBUjkxNzBfQ01EX0ZMQVNIX0NIS1NVTQk9IDB4QjMsCi0JQVI5MTcwX0NNRF9GTEFTSF9SRUFECT0gMHhCNCwKLQlBUjkxNzBfQ01EX0ZXX0RMX0lOSVQJPSAweEI1LAotCUFSOTE3MF9DTURfTUVNX1dSRUVQUk9NCT0gMHhCQiwKLX07Ci0KLS8qIGVuZHBvaW50cyAqLwotI2RlZmluZSBBUjkxNzBfRVBfVFgJCQkJMQotI2RlZmluZSBBUjkxNzBfRVBfUlgJCQkJMgotI2RlZmluZSBBUjkxNzBfRVBfSVJRCQkJCTMKLSNkZWZpbmUgQVI5MTcwX0VQX0NNRAkJCQk0Ci0KLSNkZWZpbmUgQVI5MTcwX0VFUFJPTV9TVEFSVAkJCTB4MTYwMAotCi0jZGVmaW5lIEFSOTE3MF9HUElPX1JFR19CQVNFCQkJMHgxZDAxMDAKLSNkZWZpbmUgQVI5MTcwX0dQSU9fUkVHX1BPUlRfVFlQRQkJQVI5MTcwX0dQSU9fUkVHX0JBU0UKLSNkZWZpbmUgQVI5MTcwX0dQSU9fUkVHX0RBVEEJCQkoQVI5MTcwX0dQSU9fUkVHX0JBU0UgKyA0KQotI2RlZmluZSBBUjkxNzBfTlVNX0xFRFMJCQkJMgotCi0KLSNkZWZpbmUgQVI5MTcwX1VTQl9SRUdfQkFTRQkJCTB4MWUxMDAwCi0jZGVmaW5lIEFSOTE3MF9VU0JfUkVHX0RNQV9DVEwJCQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MTA4KQotI2RlZmluZQkJQVI5MTcwX0RNQV9DVExfRU5BQkxFX1RPX0RFVklDRQkJMHgxCi0jZGVmaW5lCQlBUjkxNzBfRE1BX0NUTF9FTkFCTEVfRlJPTV9ERVZJQ0UJMHgyCi0jZGVmaW5lCQlBUjkxNzBfRE1BX0NUTF9ISUdIX1NQRUVECQkweDQKLSNkZWZpbmUJCUFSOTE3MF9ETUFfQ1RMX1BBQ0tFVF9NT0RFCQkweDgKLQotI2RlZmluZSBBUjkxNzBfVVNCX1JFR19NQVhfQUdHX1VQTE9BRAkJKEFSOTE3MF9VU0JfUkVHX0JBU0UgKyAweDExMCkKLSNkZWZpbmUgQVI5MTcwX1VTQl9SRUdfVVBMT0FEX1RJTUVfQ1RMCQkoQVI5MTcwX1VTQl9SRUdfQkFTRSArIDB4MTE0KQotCi0KLQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19CQVNFCQkJMHgxYzMwMDAKLQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19UU0ZfTAkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg1MTQpCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1RTRl9ICQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDUxOCkKLQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19BVElNX1dJTkRPVwkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDUxQykKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQkNOX1BFUklPRAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDUyMCkKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfUFJFVEJUVAkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg1MjQpCi0KLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfTUFDX0FERFJfTAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDYxMCkKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfTUFDX0FERFJfSAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDYxNCkKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQlNTSURfTAkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2MTgpCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0JTU0lEX0gJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjFjKQotCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0dST1VQX0hBU0hfVEJMX0wJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2MjQpCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0dST1VQX0hBU0hfVEJMX0gJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2MjgpCi0KLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfUlhfVElNRU9VVAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDYyQykKLQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19CQVNJQ19SQVRFCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjMwKQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19NQU5EQVRPUllfUkFURQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDYzNCkKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfUlRTX0NUU19SQVRFCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjM4KQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19CQUNLT0ZGX1BST1RFQ1QJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2M2MpCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1JYX1RIUkVTSE9MRAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDY0MCkKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfUlhfUEVfREVMQVkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2NEMpCi0KLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfRFlOQU1JQ19TSUZTX0FDSwkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDY1OCkKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfU05JRkZFUgkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2NzQpCi0jZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19TTklGRkVSX0VOQUJMRV9QUk9NSVNDCUJJVCgwKQotI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfU05JRkZFUl9ERUZBVUxUUwkJMHgwMjAwMDAwMAotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19FTkNSWVBUSU9OCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4Njc4KQotI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRU5DUllQVElPTl9SWF9TT0ZUV0FSRQlCSVQoMykKLSNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0VOQ1JZUFRJT05fREVGQVVMVFMJMHg3MAotCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX01JU0NfNjgwCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDY4MCkKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfVFhfVU5ERVJSVU4JCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2ODgpCi0KLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfRlJBTUVUWVBFX0ZJTFRFUgkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDY4YykKLSNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9BU1NPQ19SRVEJCUJJVCgwKQotI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0FTU09DX1JFU1AJCUJJVCgxKQotI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX1JFQVNTT0NfUkVRCQlCSVQoMikKLSNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9SRUFTU09DX1JFU1AJCUJJVCgzKQotI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX1BSQl9SRVEJCUJJVCg0KQotI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX1BSQl9SRVNQCQlCSVQoNSkKLSNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9CSVQ2CQkJQklUKDYpCi0jZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQklUNwkJCUJJVCg3KQotI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0JFQUNPTgkJQklUKDgpCi0jZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQVRJTQkJCUJJVCg5KQotI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0RFQVNTT0MJCUJJVCgxMCkKLSNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9BVVRICQkJQklUKDExKQotI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0RFQVVUSAkJQklUKDEyKQotI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0JJVDEzCQlCSVQoMTMpCi0jZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQklUMTQJCUJJVCgxNCkKLSNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9CSVQxNQkJQklUKDE1KQotI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0JBUgkJCUJJVCgyNCkKLSNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9CQQkJCUJJVCgyNSkKLSNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9QU1BPTEwJCUJJVCgyNikKLSNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9SVFMJCQlCSVQoMjcpCi0jZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQ1RTCQkJQklUKDI4KQotI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0FDSwkJCUJJVCgyOSkKLSNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9DRkUJCQlCSVQoMzApCi0jZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQ0ZFX0FDSwkJQklUKDMxKQotI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0RFRkFVTFRTCQkweDA3MDBmZmZmCi0jZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfTU9OSVRPUgkJMHhmZDAwZmZmZgotCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1JYX1RPVEFMCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDZBMCkKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfUlhfQ1JDMzIJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NkE0KQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19SWF9DUkMxNgkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2QTgpCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1JYX0VSUl9ERUNSWVBUSU9OX1VOSQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NkFDKQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19SWF9PVkVSUlVOCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NkIwKQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19SWF9FUlJfREVDUllQVElPTl9NVUwJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDZCQykKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfVFhfUkVUUlkJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NkNDKQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19UWF9UT1RBTAkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2RjQpCi0KLQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19BQ0tfRVhURU5TSU9OCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjkwKQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19FSUZTX0FORF9TSUZTCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4Njk4KQotCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1NMT1RfVElNRQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDZGMCkKLQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19QT1dFUk1BTkFHRU1FTlQJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg3MDApCi0jZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19QT1dFUk1HVF9JQlNTCQkweGUwCi0jZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19QT1dFUk1HVF9BUAkJMHhhMQotI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfUE9XRVJNR1RfU1RBCQkweDIKLSNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX1BPV0VSTUdUX0FQX1dEUwkJMHgzCi0jZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19QT1dFUk1HVF9ERUZBVUxUUwkoMHhmIDw8IDI0KQotCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1JPTExfQ0FMTF9UQkxfTAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDcwNCkKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfUk9MTF9DQUxMX1RCTF9ICQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NzA4KQotCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDMF9DVwkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhCMDApCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDMV9DVwkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhCMDQpCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDMl9DVwkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhCMDgpCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDM19DVwkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhCMEMpCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDNF9DVwkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhCMTApCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDMV9BQzBfQUlGUwkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEIxNCkKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQUMzX0FDMl9BSUZTCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4QjE4KQotCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1JFVFJZX01BWAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEIyOCkKLQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19GQ1NfU0VMRUNUCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4QkIwKQotI2RlZmluZQkJQVI5MTcwX01BQ19GQ1NfU1dGQ1MJCTB4MQotI2RlZmluZQkJQVI5MTcwX01BQ19GQ1NfRklGT19QUk9UCTB4NAotCi0KLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfVFhPUF9OT1RfRU5PVUdIX0lORAkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4QjMwKQotCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDMV9BQzBfVFhPUAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEI0NCkKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQUMzX0FDMl9UWE9QCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4QjQ4KQotCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FNUERVX0ZBQ1RPUgkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEI5QykKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQU1QRFVfREVOU0lUWQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEJBMCkKLQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19BQ0tfVEFCTEUJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhDMDApCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FNUERVX1JYX1RIUkVTSAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEM1MCkKLQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19UWFJYX01QSQkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhEN0MpCi0jZGVmaW5lCQlBUjkxNzBfTUFDX1RYUlhfTVBJX1RYX01QSV9NQVNLCTB4MDAwMDAwMGYKLSNkZWZpbmUJCUFSOTE3MF9NQUNfVFhSWF9NUElfVFhfVE9fTUFTSwkweDAwMDBmZmYwCi0jZGVmaW5lCQlBUjkxNzBfTUFDX1RYUlhfTVBJX1JYX01QSV9NQVNLCTB4MDAwZjAwMDAKLSNkZWZpbmUJCUFSOTE3MF9NQUNfVFhSWF9NUElfUlhfVE9fTUFTSwkweGZmZjAwMDAwCi0KLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQkNOX0FERFIJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4RDg0KQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19CQ05fTEVOR1RICQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4RDg4KQotI2RlZmluZSBBUjkxNzBfTUFDX1JFR19CQ05fUExDUAkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhEOTApCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0JDTl9DVFJMCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEQ5NCkKLSNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQkNOX0hUMQkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhEQTApCi0jZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0JDTl9IVDIJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4REE0KQotCi0KLSNkZWZpbmUgQVI5MTcwX1BXUl9SRUdfQkFTRQkJCTB4MUQ0MDAwCi0KLSNkZWZpbmUgQVI5MTcwX1BXUl9SRUdfQ0xPQ0tfU0VMCQkoQVI5MTcwX1BXUl9SRUdfQkFTRSArIDB4MDA4KQotI2RlZmluZQkJQVI5MTcwX1BXUl9DTEtfQUhCXzQwTUhaCTAKLSNkZWZpbmUJCUFSOTE3MF9QV1JfQ0xLX0FIQl8yMF8yMk1IWgkxCi0jZGVmaW5lCQlBUjkxNzBfUFdSX0NMS19BSEJfNDBfNDRNSFoJMgotI2RlZmluZQkJQVI5MTcwX1BXUl9DTEtfQUhCXzgwXzg4TUhaCTMKLSNkZWZpbmUJCUFSOTE3MF9QV1JfQ0xLX0RBQ18xNjBfSU5WX0RMWQkweDcwCi0KLQotLyogcHV0IGJlYWNvbiBoZXJlIGluIG1lbW9yeSAqLwotI2RlZmluZSBBUjkxNzBfQkVBQ09OX0JVRkZFUl9BRERSRVNTCQkweDExNzkwMAotCi0KLXN0cnVjdCBhcjkxNzBfdHhfY29udHJvbCB7Ci0JX19sZTE2IGxlbmd0aDsKLQlfX2xlMTYgbWFjX2NvbnRyb2w7Ci0JX19sZTMyIHBoeV9jb250cm9sOwotCXU4IGZyYW1lX2RhdGFbMF07Ci19IF9fcGFja2VkOwotCi0vKiB0aGVzZSBhcmUgZWl0aGVyLW9yICovCi0jZGVmaW5lIEFSOTE3MF9UWF9NQUNfUFJPVF9SVFMJCQkweDAwMDEKLSNkZWZpbmUgQVI5MTcwX1RYX01BQ19QUk9UX0NUUwkJCTB4MDAwMgotCi0jZGVmaW5lIEFSOTE3MF9UWF9NQUNfTk9fQUNLCQkJMHgwMDA0Ci0vKiBpZiB1bnNldCwgTUFDIHdpbGwgb25seSBkbyBTSUZTIHNwYWNlIGJlZm9yZSBmcmFtZSAqLwotI2RlZmluZSBBUjkxNzBfVFhfTUFDX0JBQ0tPRkYJCQkweDAwMDgKLSNkZWZpbmUgQVI5MTcwX1RYX01BQ19CVVJTVAkJCTB4MDAxMAotI2RlZmluZSBBUjkxNzBfVFhfTUFDX0FHR1IJCQkweDAwMjAKLQotLyogZW5jcnlwdGlvbiBpcyBhIHR3by1iaXQgZmllbGQgKi8KLSNkZWZpbmUgQVI5MTcwX1RYX01BQ19FTkNSX05PTkUJCQkweDAwMDAKLSNkZWZpbmUgQVI5MTcwX1RYX01BQ19FTkNSX1JDNAkJCTB4MDA0MAotI2RlZmluZSBBUjkxNzBfVFhfTUFDX0VOQ1JfQ0VOQwkJCTB4MDA4MAotI2RlZmluZSBBUjkxNzBfVFhfTUFDX0VOQ1JfQUVTCQkJMHgwMGMwCi0KLSNkZWZpbmUgQVI5MTcwX1RYX01BQ19NTUlDCQkJMHgwMTAwCi0jZGVmaW5lIEFSOTE3MF9UWF9NQUNfSFdfRFVSQVRJT04JCTB4MDIwMAotI2RlZmluZSBBUjkxNzBfVFhfTUFDX1FPU19TSElGVAkJCTEwCi0jZGVmaW5lIEFSOTE3MF9UWF9NQUNfUU9TX01BU0sJCQkoMyA8PCBBUjkxNzBfVFhfTUFDX1FPU19TSElGVCkKLSNkZWZpbmUgQVI5MTcwX1RYX01BQ19BR0dSX1FPU19CSVQxCQkweDA0MDAKLSNkZWZpbmUgQVI5MTcwX1RYX01BQ19BR0dSX1FPU19CSVQyCQkweDA4MDAKLSNkZWZpbmUgQVI5MTcwX1RYX01BQ19ESVNBQkxFX1RYT1AJCTB4MTAwMAotI2RlZmluZSBBUjkxNzBfVFhfTUFDX1RYT1BfUklGUwkJCTB4MjAwMAotI2RlZmluZSBBUjkxNzBfVFhfTUFDX0lNTV9BTVBEVQkJCTB4NDAwMAotI2RlZmluZSBBUjkxNzBfVFhfTUFDX1JBVEVfUFJPQkUJCTB4ODAwMAotCi0vKiBlaXRoZXItb3IgKi8KLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9NT0RfTUFTSwkJCTB4MDAwMDAwMDMKLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9NT0RfQ0NLCQkJMHgwMDAwMDAwMAotI2RlZmluZSBBUjkxNzBfVFhfUEhZX01PRF9PRkRNCQkJMHgwMDAwMDAwMQotI2RlZmluZSBBUjkxNzBfVFhfUEhZX01PRF9IVAkJCTB4MDAwMDAwMDIKLQotLyogZGVwZW5kcyBvbiBtb2R1bGF0aW9uICovCi0jZGVmaW5lIEFSOTE3MF9UWF9QSFlfU0hPUlRfUFJFQU1CTEUJCTB4MDAwMDAwMDQKLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9HUkVFTkZJRUxECQkweDAwMDAwMDA0Ci0KLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9CV19TSElGVAkJCTMKLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9CV19NQVNLCQkJKDMgPDwgQVI5MTcwX1RYX1BIWV9CV19TSElGVCkKLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9CV18yME1IWgkJCTAKLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9CV180ME1IWgkJCTIKLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9CV180ME1IWl9EVVAJCTMKLQotI2RlZmluZSBBUjkxNzBfVFhfUEhZX1RYX0hFQVZZX0NMSVBfU0hJRlQJNgotI2RlZmluZSBBUjkxNzBfVFhfUEhZX1RYX0hFQVZZX0NMSVBfTUFTSwkoNyA8PCBBUjkxNzBfVFhfUEhZX1RYX0hFQVZZX0NMSVBfU0hJRlQpCi0KLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9UWF9QV1JfU0hJRlQJCTkKLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9UWF9QV1JfTUFTSwkJKDB4M2YgPDwgQVI5MTcwX1RYX1BIWV9UWF9QV1JfU0hJRlQpCi0KLS8qIG5vdCBwYXJ0IG9mIHRoZSBody1zcGVjICovCi0jZGVmaW5lIEFSOTE3MF9UWF9QSFlfUU9TX1NISUZUCQkJMjUKLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9RT1NfTUFTSwkJCSgzIDw8IEFSOTE3MF9UWF9QSFlfUU9TX1NISUZUKQotCi0jZGVmaW5lIEFSOTE3MF9UWF9QSFlfVFhDSEFJTl9TSElGVAkJMTUKLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9UWENIQUlOX01BU0sJCSg3IDw8IEFSOTE3MF9UWF9QSFlfVFhDSEFJTl9TSElGVCkKLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9UWENIQUlOXzEJCQkxCi0vKiB1c2UgZm9yIGNjaywgb2ZkbSA2LzkvMTIvMTgvMjQgYW5kIEhUIGlmIGNhcGFibGUgKi8KLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9UWENIQUlOXzIJCQk1Ci0KLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9NQ1NfU0hJRlQJCQkxOAotI2RlZmluZSBBUjkxNzBfVFhfUEhZX01DU19NQVNLCQkJKDB4N2YgPDwgQVI5MTcwX1RYX1BIWV9NQ1NfU0hJRlQpCi0KLSNkZWZpbmUgQVI5MTcwX1RYX1BIWV9TSE9SVF9HSQkJCTB4ODAwMDAwMDAKLQotI2RlZmluZSBBUjU0MTZfTUFYX1JBVEVfUE9XRVIgICAgICAgICAgICAgICAgICAgNjMKLQotc3RydWN0IGFyOTE3MF9yeF9oZWFkIHsKLQl1OCBwbGNwWzEyXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBhcjkxNzBfcnhfcGh5c3RhdHVzIHsKLQl1bmlvbiB7Ci0JCXN0cnVjdCB7Ci0JCQl1OCByc3NpX2FudDAsIHJzc2lfYW50MSwgcnNzaV9hbnQyLAotCQkJICAgcnNzaV9hbnQweCwgcnNzaV9hbnQxeCwgcnNzaV9hbnQyeCwKLQkJCSAgIHJzc2lfY29tYmluZWQ7Ci0JCX0gX19wYWNrZWQ7Ci0JCXU4IHJzc2lbN107Ci0JfSBfX3BhY2tlZDsKLQotCXU4IGV2bV9zdHJlYW0wWzZdLCBldm1fc3RyZWFtMVs2XTsKLQl1OCBwaHlfZXJyOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGFyOTE3MF9yeF9tYWNzdGF0dXMgewotCXU4IFNBaWR4LCBEQWlkeDsKLQl1OCBlcnJvcjsKLQl1OCBzdGF0dXM7Ci19IF9fcGFja2VkOwotCi0jZGVmaW5lIEFSOTE3MF9FTkNfQUxHX05PTkUJCQkweDAKLSNkZWZpbmUgQVI5MTcwX0VOQ19BTEdfV0VQNjQJCQkweDEKLSNkZWZpbmUgQVI5MTcwX0VOQ19BTEdfVEtJUAkJCTB4MgotI2RlZmluZSBBUjkxNzBfRU5DX0FMR19BRVNDQ01QCQkJMHg0Ci0jZGVmaW5lIEFSOTE3MF9FTkNfQUxHX1dFUDEyOAkJCTB4NQotI2RlZmluZSBBUjkxNzBfRU5DX0FMR19XRVAyNTYJCQkweDYKLSNkZWZpbmUgQVI5MTcwX0VOQ19BTEdfQ0VOQwkJCTB4NwotCi0jZGVmaW5lIEFSOTE3MF9SWF9FTkNfU09GVFdBUkUJCQkweDgKLQotc3RhdGljIGlubGluZSB1OCBhcjkxNzBfZ2V0X2RlY3J5cHRfdHlwZShzdHJ1Y3QgYXI5MTcwX3J4X21hY3N0YXR1cyAqdCkKLXsKLQlyZXR1cm4gKHQtPlNBaWR4ICYgMHhjMCkgPj4gNCB8Ci0JICAgICAgICh0LT5EQWlkeCAmIDB4YzApID4+IDY7Ci19Ci0KLSNkZWZpbmUgQVI5MTcwX1JYX1NUQVRVU19NT0RVTEFUSU9OX01BU0sJMHgwMwotI2RlZmluZSBBUjkxNzBfUlhfU1RBVFVTX01PRFVMQVRJT05fQ0NLCQkweDAwCi0jZGVmaW5lIEFSOTE3MF9SWF9TVEFUVVNfTU9EVUxBVElPTl9PRkRNCTB4MDEKLSNkZWZpbmUgQVI5MTcwX1JYX1NUQVRVU19NT0RVTEFUSU9OX0hUCQkweDAyCi0jZGVmaW5lIEFSOTE3MF9SWF9TVEFUVVNfTU9EVUxBVElPTl9EVVBPRkRNCTB4MDMKLQotLyogZGVwZW5kcyBvbiBtb2R1bGF0aW9uICovCi0jZGVmaW5lIEFSOTE3MF9SWF9TVEFUVVNfU0hPUlRfUFJFQU1CTEUJCTB4MDgKLSNkZWZpbmUgQVI5MTcwX1JYX1NUQVRVU19HUkVFTkZJRUxECQkweDA4Ci0KLSNkZWZpbmUgQVI5MTcwX1JYX1NUQVRVU19NUERVX01BU0sJCTB4MzAKLSNkZWZpbmUgQVI5MTcwX1JYX1NUQVRVU19NUERVX1NJTkdMRQkJMHgwMAotI2RlZmluZSBBUjkxNzBfUlhfU1RBVFVTX01QRFVfRklSU1QJCTB4MjAKLSNkZWZpbmUgQVI5MTcwX1JYX1NUQVRVU19NUERVX01JRERMRQkJMHgzMAotI2RlZmluZSBBUjkxNzBfUlhfU1RBVFVTX01QRFVfTEFTVAkJMHgxMAotCi0jZGVmaW5lIEFSOTE3MF9SWF9FUlJPUl9SWFRPCQkJMHgwMQotI2RlZmluZSBBUjkxNzBfUlhfRVJST1JfT1ZFUlJVTgkJCTB4MDIKLSNkZWZpbmUgQVI5MTcwX1JYX0VSUk9SX0RFQ1JZUFQJCQkweDA0Ci0jZGVmaW5lIEFSOTE3MF9SWF9FUlJPUl9GQ1MJCQkweDA4Ci0jZGVmaW5lIEFSOTE3MF9SWF9FUlJPUl9XUk9OR19SQQkJMHgxMAotI2RlZmluZSBBUjkxNzBfUlhfRVJST1JfUExDUAkJCTB4MjAKLSNkZWZpbmUgQVI5MTcwX1JYX0VSUk9SX01NSUMJCQkweDQwCi0jZGVmaW5lIEFSOTE3MF9SWF9FUlJPUl9GQVRBTAkJCTB4ODAKLQotc3RydWN0IGFyOTE3MF9jbWRfdHhfc3RhdHVzIHsKLQl1OCBkc3RbRVRIX0FMRU5dOwotCV9fbGUzMiByYXRlOwotCV9fbGUxNiBzdGF0dXM7Ci19IF9fcGFja2VkOwotCi0jZGVmaW5lIEFSOTE3MF9UWF9TVEFUVVNfQ09NUExFVEUJCTB4MDAKLSNkZWZpbmUgQVI5MTcwX1RYX1NUQVRVU19SRVRSWQkJCTB4MDEKLSNkZWZpbmUgQVI5MTcwX1RYX1NUQVRVU19GQUlMRUQJCQkweDAyCi0KLXN0cnVjdCBhcjkxNzBfY21kX2JhX2ZhaWxlZF9jb3VudCB7Ci0JX19sZTE2IGZhaWxlZDsKLQlfX2xlMTYgcmF0ZTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBhcjkxNzBfY21kX3Jlc3BvbnNlIHsKLQl1OCBmbGFnOwotCXU4IHR5cGU7Ci0JX19sZTE2IHBhZGRpbmc7Ci0KLQl1bmlvbiB7Ci0JCXN0cnVjdCBhcjkxNzBfY21kX3R4X3N0YXR1cwkJdHhfc3RhdHVzOwotCQlzdHJ1Y3QgYXI5MTcwX2NtZF9iYV9mYWlsZWRfY291bnQJYmFfZmFpbF9jbnQ7Ci0JCXU4IGRhdGFbMF07Ci0JfTsKLX0gX19wYWNrZWQ7Ci0KLS8qIFFvUyAqLwotCi0vKiBtYWM4MDIxMSBxdWV1ZSB0byBIVy9GVyBtYXAgKi8KLXN0YXRpYyBjb25zdCB1OCBhcjkxNzBfcW9zX2h3bWFwWzRdID0geyAzLCAyLCAwLCAxIH07Ci0KLS8qIEhXL0ZXIHF1ZXVlIHRvIG1hYzgwMjExIG1hcCAqLwotc3RhdGljIGNvbnN0IHU4IGFyOTE3MF9xb3NfbWFjODAyMTFtYXBbNF0gPSB7IDIsIDMsIDEsIDAgfTsKLQotZW51bSBhcjkxNzBfdHhxIHsKLQlBUjkxNzBfVFhRX0JFLAotCUFSOTE3MF9UWFFfQkssCi0JQVI5MTcwX1RYUV9WSSwKLQlBUjkxNzBfVFhRX1ZPLAotCi0JX19BUjkxNzBfTlVNX1RYUSwKLX07Ci0KLSNkZWZpbmUgQVI5MTcwX1RYUV9ERVBUSAkzMgotI2RlZmluZSBBUjkxNzBfVFhfTUFYX1BFTkRJTkcJMTI4Ci0jZGVmaW5lIEFSOTE3MF9SWF9TVFJFQU1fTUFYX1NJWkUgNjU1MzUKLQotI2VuZGlmIC8qIF9fQVI5MTcwX0hXX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvbGVkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2xlZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzJkOTAwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvbGVkLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODEgKzAsMCBAQAotLyoKLSAqIEF0aGVyb3MgQVI5MTcwIGRyaXZlcgotICoKLSAqIExFRCBoYW5kbGluZwotICoKLSAqIENvcHlyaWdodCAyMDA4LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBzZWUKLSAqIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCi0gKgotICogVGhpcyBmaWxlIGluY29ycG9yYXRlcyB3b3JrIGNvdmVyZWQgYnkgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCi0gKiBwZXJtaXNzaW9uIG5vdGljZToKLSAqICAgIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KLSAqCi0gKiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiAgICBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgotICogICAgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiAgICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgotICogICAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVkZSAiYXI5MTcwLmgiCi0jaW5jbHVkZSAiY21kLmgiCi0KLWludCBhcjkxNzBfc2V0X2xlZHNfc3RhdGUoc3RydWN0IGFyOTE3MCAqYXIsIHUzMiBsZWRfc3RhdGUpCi17Ci0JcmV0dXJuIGFyOTE3MF93cml0ZV9yZWcoYXIsIEFSOTE3MF9HUElPX1JFR19EQVRBLCBsZWRfc3RhdGUpOwotfQotCi1pbnQgYXI5MTcwX2luaXRfbGVkcyhzdHJ1Y3QgYXI5MTcwICphcikKLXsKLQlpbnQgZXJyOwotCi0JLyogZGlzYWJsZSBMRURzICovCi0JLyogR1BJTyBbMC8xIG1vZGU6IG91dHB1dCwgMi8zOiBpbnB1dF0gKi8KLQllcnIgPSBhcjkxNzBfd3JpdGVfcmVnKGFyLCBBUjkxNzBfR1BJT19SRUdfUE9SVF9UWVBFLCAzKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCS8qIEdQSU8gMC8xIHZhbHVlOiBvZmYgKi8KLQllcnIgPSBhcjkxNzBfc2V0X2xlZHNfc3RhdGUoYXIsIDApOwotCi1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotI2lmZGVmIENPTkZJR19BUjkxNzBfTEVEUwotc3RhdGljIHZvaWQgYXI5MTcwX3VwZGF0ZV9sZWRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgYXI5MTcwICphciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXI5MTcwLCBsZWRfd29yay53b3JrKTsKLQlpbnQgaSwgdG1wLCBibGlua19kZWxheSA9IDEwMDA7Ci0JdTMyIGxlZF92YWwgPSAwOwotCWJvb2wgcmVydW4gPSBmYWxzZTsKLQotCWlmICh1bmxpa2VseSghSVNfQUNDRVBUSU5HX0NNRChhcikpKQotCQlyZXR1cm4gOwotCi0JbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKLQlmb3IgKGkgPSAwOyBpIDwgQVI5MTcwX05VTV9MRURTOyBpKyspCi0JCWlmIChhci0+bGVkc1tpXS5yZWdpc3RlcmVkICYmIGFyLT5sZWRzW2ldLnRvZ2dsZWQpIHsKLQkJCWxlZF92YWwgfD0gMSA8PCBpOwotCi0JCQl0bXAgPSA3MCArIDIwMCAvIChhci0+bGVkc1tpXS50b2dnbGVkKTsKLQkJCWlmICh0bXAgPCBibGlua19kZWxheSkKLQkJCQlibGlua19kZWxheSA9IHRtcDsKLQotCQkJaWYgKGFyLT5sZWRzW2ldLnRvZ2dsZWQgPiAxKQotCQkJCWFyLT5sZWRzW2ldLnRvZ2dsZWQgPSAwOwotCi0JCQlyZXJ1biA9IHRydWU7Ci0JCX0KLQotCWFyOTE3MF9zZXRfbGVkc19zdGF0ZShhciwgbGVkX3ZhbCk7Ci0JbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOwotCi0JaWYgKCFyZXJ1bikKLQkJcmV0dXJuOwotCi0JaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhhci0+aHcsCi0JCQkJICAgICAmYXItPmxlZF93b3JrLAotCQkJCSAgICAgbXNlY3NfdG9famlmZmllcyhibGlua19kZWxheSkpOwotfQotCi1zdGF0aWMgdm9pZCBhcjkxNzBfbGVkX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZCwKLQkJCQkgICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCi17Ci0Jc3RydWN0IGFyOTE3MF9sZWQgKmFybCA9IGNvbnRhaW5lcl9vZihsZWQsIHN0cnVjdCBhcjkxNzBfbGVkLCBsKTsKLQlzdHJ1Y3QgYXI5MTcwICphciA9IGFybC0+YXI7Ci0KLQlpZiAodW5saWtlbHkoIWFybC0+cmVnaXN0ZXJlZCkpCi0JCXJldHVybiA7Ci0KLQlpZiAoYXJsLT5sYXN0X3N0YXRlICE9ICEhYnJpZ2h0bmVzcykgewotCQlhcmwtPnRvZ2dsZWQrKzsKLQkJYXJsLT5sYXN0X3N0YXRlID0gISFicmlnaHRuZXNzOwotCX0KLQotCWlmIChsaWtlbHkoSVNfQUNDRVBUSU5HX0NNRChhcikgJiYgYXJsLT50b2dnbGVkKSkKLQkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhhci0+aHcsICZhci0+bGVkX3dvcmssIEhaLzEwKTsKLX0KLQotc3RhdGljIGludCBhcjkxNzBfcmVnaXN0ZXJfbGVkKHN0cnVjdCBhcjkxNzAgKmFyLCBpbnQgaSwgY2hhciAqbmFtZSwKLQkJCSAgICAgICBjaGFyICp0cmlnZ2VyKQotewotCWludCBlcnI7Ci0KLQlzbnByaW50Zihhci0+bGVkc1tpXS5uYW1lLCBzaXplb2YoYXItPmxlZHNbaV0ubmFtZSksCi0JCSAiYXI5MTcwLSVzOjolcyIsIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIG5hbWUpOwotCi0JYXItPmxlZHNbaV0uYXIgPSBhcjsKLQlhci0+bGVkc1tpXS5sLm5hbWUgPSBhci0+bGVkc1tpXS5uYW1lOwotCWFyLT5sZWRzW2ldLmwuYnJpZ2h0bmVzc19zZXQgPSBhcjkxNzBfbGVkX2JyaWdodG5lc3Nfc2V0OwotCWFyLT5sZWRzW2ldLmwuYnJpZ2h0bmVzcyA9IDA7Ci0JYXItPmxlZHNbaV0ubC5kZWZhdWx0X3RyaWdnZXIgPSB0cmlnZ2VyOwotCi0JZXJyID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKHdpcGh5X2Rldihhci0+aHctPndpcGh5KSwKLQkJCQkgICAgJmFyLT5sZWRzW2ldLmwpOwotCWlmIChlcnIpCi0JCXdpcGh5X2Vycihhci0+aHctPndpcGh5LCAiZmFpbGVkIHRvIHJlZ2lzdGVyICVzIExFRCAoJWQpLlxuIiwKLQkJCSAgYXItPmxlZHNbaV0ubmFtZSwgZXJyKTsKLQllbHNlCi0JCWFyLT5sZWRzW2ldLnJlZ2lzdGVyZWQgPSB0cnVlOwotCi0JcmV0dXJuIGVycjsKLX0KLQotdm9pZCBhcjkxNzBfdW5yZWdpc3Rlcl9sZWRzKHN0cnVjdCBhcjkxNzAgKmFyKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSOTE3MF9OVU1fTEVEUzsgaSsrKQotCQlpZiAoYXItPmxlZHNbaV0ucmVnaXN0ZXJlZCkgewotCQkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmFyLT5sZWRzW2ldLmwpOwotCQkJYXItPmxlZHNbaV0ucmVnaXN0ZXJlZCA9IGZhbHNlOwotCQkJYXItPmxlZHNbaV0udG9nZ2xlZCA9IDA7Ci0JCX0KLQotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYXItPmxlZF93b3JrKTsKLX0KLQotaW50IGFyOTE3MF9yZWdpc3Rlcl9sZWRzKHN0cnVjdCBhcjkxNzAgKmFyKQotewotCWludCBlcnI7Ci0KLQlJTklUX0RFTEFZRURfV09SSygmYXItPmxlZF93b3JrLCBhcjkxNzBfdXBkYXRlX2xlZHMpOwotCi0JZXJyID0gYXI5MTcwX3JlZ2lzdGVyX2xlZChhciwgMCwgInR4IiwKLQkJCQkgIGllZWU4MDIxMV9nZXRfdHhfbGVkX25hbWUoYXItPmh3KSk7Ci0JaWYgKGVycikKLQkJZ290byBmYWlsOwotCi0JZXJyID0gYXI5MTcwX3JlZ2lzdGVyX2xlZChhciwgMSwgImFzc29jIiwKLQkJCQkgaWVlZTgwMjExX2dldF9hc3NvY19sZWRfbmFtZShhci0+aHcpKTsKLQlpZiAoZXJyKQotCQlnb3RvIGZhaWw7Ci0KLQlyZXR1cm4gMDsKLQotZmFpbDoKLQlhcjkxNzBfdW5yZWdpc3Rlcl9sZWRzKGFyKTsKLQlyZXR1cm4gZXJyOwotfQotCi0jZW5kaWYgLyogQ09ORklHX0FSOTE3MF9MRURTICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9tYWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU3ZTg2MS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL21hYy5jCisrKyAvZGV2L251bGwKQEAgLTEsNTE5ICswLDAgQEAKLS8qCi0gKiBBdGhlcm9zIEFSOTE3MCBkcml2ZXIKLSAqCi0gKiBNQUMgcHJvZ3JhbW1pbmcKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgc2VlCi0gKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgotICoKLSAqIFRoaXMgZmlsZSBpbmNvcnBvcmF0ZXMgd29yayBjb3ZlcmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAotICogcGVybWlzc2lvbiBub3RpY2U6Ci0gKiAgICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCi0gKgotICogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogICAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLSAqICAgIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqICAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLSAqICAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KLQotI2luY2x1ZGUgImFyOTE3MC5oIgotI2luY2x1ZGUgImNtZC5oIgotCi1pbnQgYXI5MTcwX3NldF9keW5fc2lmc19hY2soc3RydWN0IGFyOTE3MCAqYXIpCi17Ci0JdTMyIHZhbDsKLQotCWlmIChjb25mX2lzX2h0NDAoJmFyLT5ody0+Y29uZikpCi0JCXZhbCA9IDB4MDEwYTsKLQllbHNlIHsKLQkJaWYgKGFyLT5ody0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopCi0JCQl2YWwgPSAweDEwNTsKLQkJZWxzZQotCQkJdmFsID0gMHgxMDQ7Ci0JfQotCi0JcmV0dXJuIGFyOTE3MF93cml0ZV9yZWcoYXIsIEFSOTE3MF9NQUNfUkVHX0RZTkFNSUNfU0lGU19BQ0ssIHZhbCk7Ci19Ci0KLWludCBhcjkxNzBfc2V0X3Nsb3RfdGltZShzdHJ1Y3QgYXI5MTcwICphcikKLXsKLQl1MzIgc2xvdHRpbWUgPSAyMDsKLQotCWlmICghYXItPnZpZikKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoKGFyLT5ody0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopIHx8Ci0JICAgIGFyLT52aWYtPmJzc19jb25mLnVzZV9zaG9ydF9zbG90KQotCQlzbG90dGltZSA9IDk7Ci0KLQlyZXR1cm4gYXI5MTcwX3dyaXRlX3JlZyhhciwgQVI5MTcwX01BQ19SRUdfU0xPVF9USU1FLCBzbG90dGltZSA8PCAxMCk7Ci19Ci0KLWludCBhcjkxNzBfc2V0X2Jhc2ljX3JhdGVzKHN0cnVjdCBhcjkxNzAgKmFyKQotewotCXU4IGNjaywgb2ZkbTsKLQotCWlmICghYXItPnZpZikKLQkJcmV0dXJuIDA7Ci0KLQlvZmRtID0gYXItPnZpZi0+YnNzX2NvbmYuYmFzaWNfcmF0ZXMgPj4gNDsKLQotCS8qIEZJWE1FOiBpcyBzdGlsbCBuZWNlc3Nhcnk/ICovCi0JaWYgKGFyLT5ody0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCi0JCWNjayA9IDA7Ci0JZWxzZQotCQljY2sgPSBhci0+dmlmLT5ic3NfY29uZi5iYXNpY19yYXRlcyAmIDB4ZjsKLQotCXJldHVybiBhcjkxNzBfd3JpdGVfcmVnKGFyLCBBUjkxNzBfTUFDX1JFR19CQVNJQ19SQVRFLAotCQkJCW9mZG0gPDwgOCB8IGNjayk7Ci19Ci0KLWludCBhcjkxNzBfc2V0X3FvcyhzdHJ1Y3QgYXI5MTcwICphcikKLXsKLQlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOwotCi0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FDMF9DVywgYXItPmVkY2ZbMF0uY3dfbWluIHwKLQkJCShhci0+ZWRjZlswXS5jd19tYXggPDwgMTYpKTsKLQlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQUMxX0NXLCBhci0+ZWRjZlsxXS5jd19taW4gfAotCQkJKGFyLT5lZGNmWzFdLmN3X21heCA8PCAxNikpOwotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19BQzJfQ1csIGFyLT5lZGNmWzJdLmN3X21pbiB8Ci0JCQkoYXItPmVkY2ZbMl0uY3dfbWF4IDw8IDE2KSk7Ci0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FDM19DVywgYXItPmVkY2ZbM10uY3dfbWluIHwKLQkJCShhci0+ZWRjZlszXS5jd19tYXggPDwgMTYpKTsKLQlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQUM0X0NXLCBhci0+ZWRjZls0XS5jd19taW4gfAotCQkJKGFyLT5lZGNmWzRdLmN3X21heCA8PCAxNikpOwotCi0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FDMV9BQzBfQUlGUywKLQkJCSgoYXItPmVkY2ZbMF0uYWlmcyAqIDkgKyAxMCkpIHwKLQkJCSgoYXItPmVkY2ZbMV0uYWlmcyAqIDkgKyAxMCkgPDwgMTIpIHwKLQkJCSgoYXItPmVkY2ZbMl0uYWlmcyAqIDkgKyAxMCkgPDwgMjQpKTsKLQlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQUMzX0FDMl9BSUZTLAotCQkJKChhci0+ZWRjZlsyXS5haWZzICogOSArIDEwKSA+PiA4KSB8Ci0JCQkoKGFyLT5lZGNmWzNdLmFpZnMgKiA5ICsgMTApIDw8IDQpIHwKLQkJCSgoYXItPmVkY2ZbNF0uYWlmcyAqIDkgKyAxMCkgPDwgMTYpKTsKLQotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19BQzFfQUMwX1RYT1AsCi0JCQlhci0+ZWRjZlswXS50eG9wIHwgYXItPmVkY2ZbMV0udHhvcCA8PCAxNik7Ci0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FDM19BQzJfVFhPUCwKLQkJCWFyLT5lZGNmWzJdLnR4b3AgfCBhci0+ZWRjZlszXS50eG9wIDw8IDE2KTsKLQotCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKLQotCXJldHVybiBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7Ci19Ci0KLXN0YXRpYyBpbnQgYXI5MTcwX3NldF9hbXBkdV9kZW5zaXR5KHN0cnVjdCBhcjkxNzAgKmFyLCB1OCBtcGR1ZGVuc2l0eSkKLXsKLQl1MzIgdmFsOwotCi0JLyogZG9uJ3QgYWxsb3cgQU1QRFUgZGVuc2l0eSA+IDh1cyAqLwotCWlmIChtcGR1ZGVuc2l0eSA+IDYpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogV2F0Y2ggb3V0ISBPdHVzIHVzZXMgc2xpZ2h0bHkgZGlmZmVyZW50IGRlbnNpdHkgdmFsdWVzLiAqLwotCXZhbCA9IDB4MTQwYTAwIHwgKG1wZHVkZW5zaXR5ID8gKG1wZHVkZW5zaXR5ICsgMSkgOiAwKTsKLQotCWFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcik7Ci0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FNUERVX0RFTlNJVFksIHZhbCk7Ci0JYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOwotCi0JcmV0dXJuIGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKLX0KLQotaW50IGFyOTE3MF9pbml0X21hYyhzdHJ1Y3QgYXI5MTcwICphcikKLXsKLQlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOwotCi0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FDS19FWFRFTlNJT04sIDB4NDApOwotCi0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX1JFVFJZX01BWCwgMCk7Ci0KLQkvKiBlbmFibGUgTU1JQyAqLwotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19TTklGRkVSLAotCQkJQVI5MTcwX01BQ19SRUdfU05JRkZFUl9ERUZBVUxUUyk7Ci0KLQlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfUlhfVEhSRVNIT0xELCAweGMxZjgwKTsKLQotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19SWF9QRV9ERUxBWSwgMHg3MCk7Ci0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0VJRlNfQU5EX1NJRlMsIDB4YTE0NDAwMCk7Ci0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX1NMT1RfVElNRSwgOSA8PCAxMCk7Ci0KLQkvKiBDRi1FTkQgbW9kZSAqLwotCWFyOTE3MF9yZWd3cml0ZSgweDFjM2IyYywgMHgxOTAwMDAwMCk7Ci0KLQkvKiBOQVYgcHJvdGVjdHMgQUNLIG9ubHkgKGluIFRYT1ApICovCi0JYXI5MTcwX3JlZ3dyaXRlKDB4MWMzYjM4LCAweDIwMSk7Ci0KLQkvKiBTZXQgQmVhY29uIFBIWSBDVFJMJ3MgVFBDIHRvIDB4NywgVEExPTEgKi8KLQkvKiBPVFVTIHNldCBBTSB0byAweDEgKi8KLQlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQkNOX0hUMSwgMHg4MDAwMTcwKTsKLQotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19CQUNLT0ZGX1BST1RFQ1QsIDB4MTA1KTsKLQotCS8qIEFHRyB0ZXN0IGNvZGUqLwotCS8qIEFnZ3JlZ2F0aW9uIE1BWCBudW1iZXIgYW5kIHRpbWVvdXQgKi8KLQlhcjkxNzBfcmVnd3JpdGUoMHgxYzNiOWMsIDB4MTAwMDBhKTsKLQotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19GUkFNRVRZUEVfRklMVEVSLAotCQkJQVI5MTcwX01BQ19SRUdfRlRGX0RFRkFVTFRTKTsKLQotCS8qIEVuYWJsZSBkZWFnZ3JlZ2F0b3IsIHJlc3BvbnNlIGluIHNuaWZmZXIgbW9kZSAqLwotCWFyOTE3MF9yZWd3cml0ZSgweDFjM2M0MCwgMHgxIHwgMTw8MzApOwotCi0JLyogcmF0ZSBzZXRzICovCi0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0JBU0lDX1JBVEUsIDB4MTUwZik7Ci0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX01BTkRBVE9SWV9SQVRFLCAweDE1MGYpOwotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19SVFNfQ1RTX1JBVEUsIDB4MTBiMDFiYik7Ci0KLQkvKiBNSU1PIHJlc3BvbnNlIGNvbnRyb2wgKi8KLQlhcjkxNzBfcmVnd3JpdGUoMHgxYzM2OTQsIDB4NDAwM0MxRSk7LyogYml0IDI2fjI4ICBvdHVzLUFNICovCi0KLQkvKiBzd2l0Y2ggTUFDIHRvIE9UVVMgaW50ZXJmYWNlICovCi0JYXI5MTcwX3JlZ3dyaXRlKDB4MWMzNjAwLCAweDMpOwotCi0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FNUERVX1JYX1RIUkVTSCwgMHhmZmZmKTsKLQotCS8qIHNldCBQSFkgcmVnaXN0ZXIgcmVhZCB0aW1lb3V0ICg/PykgKi8KLQlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfTUlTQ182ODAsIDB4ZjAwMDA4KTsKLQotCS8qIERpc2FibGUgUnggVGltZU91dCwgd29ya2Fyb3VuZCBmb3IgQkIuICovCi0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX1JYX1RJTUVPVVQsIDB4MCk7Ci0KLQkvKiBTZXQgQ1BVIGNsb2NrIGZyZXF1ZW5jeSB0byA4OC84ME1IeiAqLwotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfUFdSX1JFR19DTE9DS19TRUwsCi0JCQlBUjkxNzBfUFdSX0NMS19BSEJfODBfODhNSFogfAotCQkJQVI5MTcwX1BXUl9DTEtfREFDXzE2MF9JTlZfRExZKTsKLQotCS8qIFNldCBXTEFOIERNQSBpbnRlcnJ1cHQgbW9kZTogZ2VuZXJhdGUgaW50IHBlciBwYWNrZXQgKi8KLQlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfVFhSWF9NUEksIDB4MTEwMDExKTsKLQotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19GQ1NfU0VMRUNULAotCQkJQVI5MTcwX01BQ19GQ1NfRklGT19QUk9UKTsKLQotCS8qIERpc2FibGVzIHRoZSBDRl9FTkQgZnJhbWUsIHVuZG9jdW1lbnRlZCByZWdpc3RlciAqLwotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19UWE9QX05PVF9FTk9VR0hfSU5ELAotCQkJMHgxNDFFMEY0OCk7Ci0KLQlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7Ci0KLQlyZXR1cm4gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOwotfQotCi1zdGF0aWMgaW50IGFyOTE3MF9zZXRfbWFjX3JlZyhzdHJ1Y3QgYXI5MTcwICphciwgY29uc3QgdTMyIHJlZywgY29uc3QgdTggKm1hYykKLXsKLQlzdGF0aWMgY29uc3QgdTggemVyb1tFVEhfQUxFTl0gPSB7IDAgfTsKLQotCWlmICghbWFjKQotCQltYWMgPSB6ZXJvOwotCi0JYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKLQotCWFyOTE3MF9yZWd3cml0ZShyZWcsIGdldF91bmFsaWduZWRfbGUzMihtYWMpKTsKLQlhcjkxNzBfcmVnd3JpdGUocmVnICsgNCwgZ2V0X3VuYWxpZ25lZF9sZTE2KG1hYyArIDQpKTsKLQotCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKLQotCXJldHVybiBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7Ci19Ci0KLWludCBhcjkxNzBfdXBkYXRlX211bHRpY2FzdChzdHJ1Y3QgYXI5MTcwICphciwgY29uc3QgdTY0IG1jX2hhc2gpCi17Ci0JaW50IGVycjsKLQotCWFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcik7Ci0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0dST1VQX0hBU0hfVEJMX0gsIG1jX2hhc2ggPj4gMzIpOwotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19HUk9VUF9IQVNIX1RCTF9MLCBtY19oYXNoKTsKLQlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7Ci0JZXJyID0gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlhci0+Y3VyX21jX2hhc2ggPSBtY19oYXNoOwotCXJldHVybiAwOwotfQotCi1pbnQgYXI5MTcwX3VwZGF0ZV9mcmFtZV9maWx0ZXIoc3RydWN0IGFyOTE3MCAqYXIsIGNvbnN0IHUzMiBmaWx0ZXIpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IGFyOTE3MF93cml0ZV9yZWcoYXIsIEFSOTE3MF9NQUNfUkVHX0ZSQU1FVFlQRV9GSUxURVIsIGZpbHRlcik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWFyLT5jdXJfZmlsdGVyID0gZmlsdGVyOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFyOTE3MF9zZXRfcHJvbWlzY291b3VzKHN0cnVjdCBhcjkxNzAgKmFyKQotewotCXUzMiBlbmNyX21vZGUsIHNuaWZmZXI7Ci0JaW50IGVycjsKLQotCWVyciA9IGFyOTE3MF9yZWFkX3JlZyhhciwgQVI5MTcwX01BQ19SRUdfU05JRkZFUiwgJnNuaWZmZXIpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBhcjkxNzBfcmVhZF9yZWcoYXIsIEFSOTE3MF9NQUNfUkVHX0VOQ1JZUFRJT04sICZlbmNyX21vZGUpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlpZiAoYXItPnNuaWZmZXJfZW5hYmxlZCkgewotCQlzbmlmZmVyIHw9IEFSOTE3MF9NQUNfUkVHX1NOSUZGRVJfRU5BQkxFX1BST01JU0M7Ci0KLQkJLyoKLQkJICogUnggZGVjcnlwdGlvbiB3b3JrcyBpbiBwbGFjZS4KLQkJICoKLQkJICogSWYgd2UgZG9uJ3QgZGlzYWJsZSBpdCwgdGhlIGhhcmR3YXJlIHdpbGwgcmVuZGVyIGFsbAotCQkgKiBlbmNyeXB0ZWQgZnJhbWVzIHdoaWNoIGFyZSBlbmNyeXB0ZWQgd2l0aCBhbiB1bmtub3duCi0JCSAqIGtleSB1c2VsZXNzLgotCQkgKi8KLQotCQllbmNyX21vZGUgfD0gQVI5MTcwX01BQ19SRUdfRU5DUllQVElPTl9SWF9TT0ZUV0FSRTsKLQkJYXItPnNuaWZmZXJfZW5hYmxlZCA9IHRydWU7Ci0JfSBlbHNlIHsKLQkJc25pZmZlciAmPSB+QVI5MTcwX01BQ19SRUdfU05JRkZFUl9FTkFCTEVfUFJPTUlTQzsKLQotCQlpZiAoYXItPnJ4X3NvZnR3YXJlX2RlY3J5cHRpb24pCi0JCQllbmNyX21vZGUgfD0gQVI5MTcwX01BQ19SRUdfRU5DUllQVElPTl9SWF9TT0ZUV0FSRTsKLQkJZWxzZQotCQkJZW5jcl9tb2RlICY9IH5BUjkxNzBfTUFDX1JFR19FTkNSWVBUSU9OX1JYX1NPRlRXQVJFOwotCX0KLQotCWFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcik7Ci0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0VOQ1JZUFRJT04sIGVuY3JfbW9kZSk7Ci0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX1NOSUZGRVIsIHNuaWZmZXIpOwotCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKLQotCXJldHVybiBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7Ci19Ci0KLWludCBhcjkxNzBfc2V0X29wZXJhdGluZ19tb2RlKHN0cnVjdCBhcjkxNzAgKmFyKQotewotCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSAmYXItPmNvbW1vbjsKLQl1MzIgcG1fbW9kZSA9IEFSOTE3MF9NQUNfUkVHX1BPV0VSTUdUX0RFRkFVTFRTOwotCXU4ICptYWNfYWRkciwgKmJzc2lkOwotCWludCBlcnI7Ci0KLQlpZiAoYXItPnZpZikgewotCQltYWNfYWRkciA9IGNvbW1vbi0+bWFjYWRkcjsKLQkJYnNzaWQgPSBjb21tb24tPmN1cmJzc2lkOwotCi0JCXN3aXRjaCAoYXItPnZpZi0+dHlwZSkgewotCQljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6Ci0JCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6Ci0JCQlwbV9tb2RlIHw9IEFSOTE3MF9NQUNfUkVHX1BPV0VSTUdUX0lCU1M7Ci0JCQlicmVhazsKLQkJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKLQkJCXBtX21vZGUgfD0gQVI5MTcwX01BQ19SRUdfUE9XRVJNR1RfQVA7Ci0JCQlicmVhazsKLQkJY2FzZSBOTDgwMjExX0lGVFlQRV9XRFM6Ci0JCQlwbV9tb2RlIHw9IEFSOTE3MF9NQUNfUkVHX1BPV0VSTUdUX0FQX1dEUzsKLQkJCWJyZWFrOwotCQljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6Ci0JCQlhci0+c25pZmZlcl9lbmFibGVkID0gdHJ1ZTsKLQkJCWFyLT5yeF9zb2Z0d2FyZV9kZWNyeXB0aW9uID0gdHJ1ZTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcG1fbW9kZSB8PSBBUjkxNzBfTUFDX1JFR19QT1dFUk1HVF9TVEE7Ci0JCQlicmVhazsKLQkJfQotCX0gZWxzZSB7Ci0JCW1hY19hZGRyID0gTlVMTDsKLQkJYnNzaWQgPSBOVUxMOwotCX0KLQotCWVyciA9IGFyOTE3MF9zZXRfbWFjX3JlZyhhciwgQVI5MTcwX01BQ19SRUdfTUFDX0FERFJfTCwgbWFjX2FkZHIpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBhcjkxNzBfc2V0X21hY19yZWcoYXIsIEFSOTE3MF9NQUNfUkVHX0JTU0lEX0wsIGJzc2lkKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gYXI5MTcwX3NldF9wcm9taXNjb3VvdXMoYXIpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQkvKiBzZXQgQU1QRFUgZGVuc2l0eSB0byA4dXMuICovCi0JZXJyID0gYXI5MTcwX3NldF9hbXBkdV9kZW5zaXR5KGFyLCA2KTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKLQotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19QT1dFUk1BTkFHRU1FTlQsIHBtX21vZGUpOwotCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKLQotCXJldHVybiBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7Ci19Ci0KLWludCBhcjkxNzBfc2V0X2h3cmV0cnlfbGltaXQoc3RydWN0IGFyOTE3MCAqYXIsIHVuc2lnbmVkIGludCBtYXhfcmV0cnkpCi17Ci0JdTMyIHRtcCA9IG1pbl90KHUzMiwgMHgzMzMzMywgbWF4X3JldHJ5ICogMHgxMTExMSk7Ci0KLQlyZXR1cm4gYXI5MTcwX3dyaXRlX3JlZyhhciwgQVI5MTcwX01BQ19SRUdfUkVUUllfTUFYLCB0bXApOwotfQotCi1pbnQgYXI5MTcwX3NldF9iZWFjb25fdGltZXJzKHN0cnVjdCBhcjkxNzAgKmFyKQotewotCXUzMiB2ID0gMDsKLQl1MzIgcHJldGJ0dCA9IDA7Ci0KLQlpZiAoYXItPnZpZikgewotCQl2IHw9IGFyLT52aWYtPmJzc19jb25mLmJlYWNvbl9pbnQ7Ci0KLQkJaWYgKGFyLT5lbmFibGVfYmVhY29uKSB7Ci0JCQlzd2l0Y2ggKGFyLT52aWYtPnR5cGUpIHsKLQkJCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKLQkJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6Ci0JCQkJdiB8PSBCSVQoMjUpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKLQkJCQl2IHw9IEJJVCgyNCk7Ci0JCQkJcHJldGJ0dCA9IChhci0+dmlmLT5ic3NfY29uZi5iZWFjb25faW50IC0gNikgPDwKLQkJCQkJICAxNjsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCXYgfD0gYXItPnZpZi0+YnNzX2NvbmYuZHRpbV9wZXJpb2QgPDwgMTY7Ci0JfQotCi0JYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKLQlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfUFJFVEJUVCwgcHJldGJ0dCk7Ci0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0JDTl9QRVJJT0QsIHYpOwotCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKLQlyZXR1cm4gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOwotfQotCi1pbnQgYXI5MTcwX3VwZGF0ZV9iZWFjb24oc3RydWN0IGFyOTE3MCAqYXIpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlfX2xlMzIgKmRhdGEsICpvbGQgPSBOVUxMOwotCXUzMiB3b3JkOwotCWludCBpOwotCi0Jc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoYXItPmh3LCBhci0+dmlmKTsKLQlpZiAoIXNrYikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlkYXRhID0gKF9fbGUzMiAqKXNrYi0+ZGF0YTsKLQlpZiAoYXItPmJlYWNvbikKLQkJb2xkID0gKF9fbGUzMiAqKWFyLT5iZWFjb24tPmRhdGE7Ci0KLQlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOwotCWZvciAoaSA9IDA7IGkgPCBESVZfUk9VTkRfVVAoc2tiLT5sZW4sIDQpOyBpKyspIHsKLQkJLyoKLQkJICogWFhYOiBUaGlzIGFjY2Vzc2VzIGJleW9uZCBza2IgZGF0YSBmb3IgdXAKLQkJICoJdG8gdGhlIGxhc3QgMyBieXRlcyEhCi0JCSAqLwotCi0JCWlmIChvbGQgJiYgKGRhdGFbaV0gPT0gb2xkW2ldKSkKLQkJCWNvbnRpbnVlOwotCi0JCXdvcmQgPSBsZTMyX3RvX2NwdShkYXRhW2ldKTsKLQkJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9CRUFDT05fQlVGRkVSX0FERFJFU1MgKyA0ICogaSwgd29yZCk7Ci0JfQotCi0JLyogWFhYOiB1c2Ugc2tiLT5jYiBpbmZvICovCi0JaWYgKGFyLT5ody0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopCi0JCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19CQ05fUExDUCwKLQkJCQkoKHNrYi0+bGVuICsgNCkgPDwgKDMgKyAxNikpICsgMHgwNDAwKTsKLQllbHNlCi0JCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19CQ05fUExDUCwKLQkJCQkoKHNrYi0+bGVuICsgNCkgPDwgMTYpICsgMHgwMDFiKTsKLQotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19CQ05fTEVOR1RILCBza2ItPmxlbiArIDQpOwotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19CQ05fQUREUiwgQVI5MTcwX0JFQUNPTl9CVUZGRVJfQUREUkVTUyk7Ci0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0JDTl9DVFJMLCAxKTsKLQotCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKLQotCWRldl9rZnJlZV9za2IoYXItPmJlYWNvbik7Ci0JYXItPmJlYWNvbiA9IHNrYjsKLQotCXJldHVybiBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7Ci19Ci0KLXZvaWQgYXI5MTcwX25ld19iZWFjb24oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBhcjkxNzAgKmFyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhcjkxNzAsCi0JCQkJCSBiZWFjb25fd29yayk7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCWlmICh1bmxpa2VseSghSVNfU1RBUlRFRChhcikpKQotCQlyZXR1cm4gOwotCi0JbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKLQotCWlmICghYXItPnZpZikKLQkJZ290byBvdXQ7Ci0KLQlhcjkxNzBfdXBkYXRlX2JlYWNvbihhcik7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0Jd2hpbGUgKChza2IgPSBpZWVlODAyMTFfZ2V0X2J1ZmZlcmVkX2JjKGFyLT5odywgYXItPnZpZikpKQotCQlhcjkxNzBfb3BfdHgoYXItPmh3LCBza2IpOwotCi0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLSBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOwotfQotCi1pbnQgYXI5MTcwX3VwbG9hZF9rZXkoc3RydWN0IGFyOTE3MCAqYXIsIHU4IGlkLCBjb25zdCB1OCAqbWFjLCB1OCBrdHlwZSwKLQkJICAgICAgdTgga2V5aWR4LCB1OCAqa2V5ZGF0YSwgaW50IGtleWxlbikKLXsKLQlfX2xlMzIgdmFsc1s3XTsKLQlzdGF0aWMgY29uc3QgdTggYmNhc3RbRVRIX0FMRU5dID0KLQkJeyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH07Ci0JdTggZHVtbXk7Ci0KLQltYWMgPSBtYWMgPyA6IGJjYXN0OwotCi0JdmFsc1swXSA9IGNwdV90b19sZTMyKChrZXlpZHggPDwgMTYpICsgaWQpOwotCXZhbHNbMV0gPSBjcHVfdG9fbGUzMihtYWNbMV0gPDwgMjQgfCBtYWNbMF0gPDwgMTYgfCBrdHlwZSk7Ci0JdmFsc1syXSA9IGNwdV90b19sZTMyKG1hY1s1XSA8PCAyNCB8IG1hY1s0XSA8PCAxNiB8Ci0JCQkgICAgICBtYWNbM10gPDwgOCB8IG1hY1syXSk7Ci0JbWVtc2V0KCZ2YWxzWzNdLCAwLCAxNik7Ci0JaWYgKGtleWRhdGEpCi0JCW1lbWNweSgmdmFsc1szXSwga2V5ZGF0YSwga2V5bGVuKTsKLQotCXJldHVybiBhci0+ZXhlY19jbWQoYXIsIEFSOTE3MF9DTURfRUtFWSwKLQkJCSAgICBzaXplb2YodmFscyksICh1OCAqKXZhbHMsCi0JCQkgICAgMSwgJmR1bW15KTsKLX0KLQotaW50IGFyOTE3MF9kaXNhYmxlX2tleShzdHJ1Y3QgYXI5MTcwICphciwgdTggaWQpCi17Ci0JX19sZTMyIHZhbCA9IGNwdV90b19sZTMyKGlkKTsKLQl1OCBkdW1teTsKLQotCXJldHVybiBhci0+ZXhlY19jbWQoYXIsIEFSOTE3MF9DTURfRUtFWSwKLQkJCSAgICBzaXplb2YodmFsKSwgKHU4ICopJnZhbCwKLQkJCSAgICAxLCAmZHVtbXkpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL21haW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2NjMmVkYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL21haW4uYworKysgL2Rldi9udWxsCkBAIC0xLDIxOTAgKzAsMCBAQAotLyoKLSAqIEF0aGVyb3MgQVI5MTcwIGRyaXZlcgotICoKLSAqIG1hYzgwMjExIGludGVyYWN0aW9uIGNvZGUKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KLSAqIENvcHlyaWdodCAyMDA5LCBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUB3ZWIuZGU+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHNlZQotICogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KLSAqCi0gKiBUaGlzIGZpbGUgaW5jb3Jwb3JhdGVzIHdvcmsgY292ZXJlZCBieSB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQKLSAqIHBlcm1pc3Npb24gbm90aWNlOgotICogICAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSW5jLgotICoKLSAqICAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSAqICAgIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICAgIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0gKiAgICBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0gKiAgICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSAqICAgIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0gKiAgICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Ci0jaW5jbHVkZSAiYXI5MTcwLmgiCi0jaW5jbHVkZSAiaHcuaCIKLSNpbmNsdWRlICJjbWQuaCIKLQotc3RhdGljIGludCBtb2RwYXJhbV9ub2h3Y3J5cHQ7Ci1tb2R1bGVfcGFyYW1fbmFtZWQobm9od2NyeXB0LCBtb2RwYXJhbV9ub2h3Y3J5cHQsIGJvb2wsIFNfSVJVR08pOwotTU9EVUxFX1BBUk1fREVTQyhub2h3Y3J5cHQsICJEaXNhYmxlIGhhcmR3YXJlIGVuY3J5cHRpb24uIik7Ci0KLSNkZWZpbmUgUkFURShfYml0cmF0ZSwgX2h3X3JhdGUsIF90eHBpZHgsIF9mbGFncykgewlcCi0JLmJpdHJhdGUJPSAoX2JpdHJhdGUpLAkJCVwKLQkuZmxhZ3MJCT0gKF9mbGFncyksCQkJXAotCS5od192YWx1ZQk9IChfaHdfcmF0ZSkgfCAoX3R4cGlkeCkgPDwgNCwJXAotfQotCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIF9fYXI5MTcwX3JhdGV0YWJsZVtdID0gewotCVJBVEUoMTAsIDAsIDAsIDApLAotCVJBVEUoMjAsIDEsIDEsIElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFKSwKLQlSQVRFKDU1LCAyLCAyLCBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSksCi0JUkFURSgxMTAsIDMsIDMsIElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFKSwKLQlSQVRFKDYwLCAweGIsIDAsIDApLAotCVJBVEUoOTAsIDB4ZiwgMCwgMCksCi0JUkFURSgxMjAsIDB4YSwgMCwgMCksCi0JUkFURSgxODAsIDB4ZSwgMCwgMCksCi0JUkFURSgyNDAsIDB4OSwgMCwgMCksCi0JUkFURSgzNjAsIDB4ZCwgMSwgMCksCi0JUkFURSg0ODAsIDB4OCwgMiwgMCksCi0JUkFURSg1NDAsIDB4YywgMywgMCksCi19OwotI3VuZGVmIFJBVEUKLQotI2RlZmluZSBhcjkxNzBfZ19yYXRldGFibGUJKF9fYXI5MTcwX3JhdGV0YWJsZSArIDApCi0jZGVmaW5lIGFyOTE3MF9nX3JhdGV0YWJsZV9zaXplCTEyCi0jZGVmaW5lIGFyOTE3MF9hX3JhdGV0YWJsZQkoX19hcjkxNzBfcmF0ZXRhYmxlICsgNCkKLSNkZWZpbmUgYXI5MTcwX2FfcmF0ZXRhYmxlX3NpemUJOAotCi0vKgotICogTkI6IFRoZSBod192YWx1ZSBpcyB1c2VkIGFzIGFuIGluZGV4IGludG8gdGhlIGFyOTE3MF9waHlfZnJlcV9wYXJhbXMKLSAqICAgICBhcnJheSBpbiBwaHkuYyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gZG8gZnJlcXVlbmN5IGxvb2t1cHMhCi0gKi8KLSNkZWZpbmUgQ0hBTihfZnJlcSwgX2lkeCkgewkJXAotCS5jZW50ZXJfZnJlcQk9IChfZnJlcSksCVwKLQkuaHdfdmFsdWUJPSAoX2lkeCksCVwKLQkubWF4X3Bvd2VyCT0gMTgsIC8qIFhYWCAqLwlcCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgYXI5MTcwXzJnaHpfY2hhbnRhYmxlW10gPSB7Ci0JQ0hBTigyNDEyLCAgMCksCi0JQ0hBTigyNDE3LCAgMSksCi0JQ0hBTigyNDIyLCAgMiksCi0JQ0hBTigyNDI3LCAgMyksCi0JQ0hBTigyNDMyLCAgNCksCi0JQ0hBTigyNDM3LCAgNSksCi0JQ0hBTigyNDQyLCAgNiksCi0JQ0hBTigyNDQ3LCAgNyksCi0JQ0hBTigyNDUyLCAgOCksCi0JQ0hBTigyNDU3LCAgOSksCi0JQ0hBTigyNDYyLCAxMCksCi0JQ0hBTigyNDY3LCAxMSksCi0JQ0hBTigyNDcyLCAxMiksCi0JQ0hBTigyNDg0LCAxMyksCi19OwotCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGFyOTE3MF81Z2h6X2NoYW50YWJsZVtdID0gewotCUNIQU4oNDkyMCwgMTQpLAotCUNIQU4oNDk0MCwgMTUpLAotCUNIQU4oNDk2MCwgMTYpLAotCUNIQU4oNDk4MCwgMTcpLAotCUNIQU4oNTA0MCwgMTgpLAotCUNIQU4oNTA2MCwgMTkpLAotCUNIQU4oNTA4MCwgMjApLAotCUNIQU4oNTE4MCwgMjEpLAotCUNIQU4oNTIwMCwgMjIpLAotCUNIQU4oNTIyMCwgMjMpLAotCUNIQU4oNTI0MCwgMjQpLAotCUNIQU4oNTI2MCwgMjUpLAotCUNIQU4oNTI4MCwgMjYpLAotCUNIQU4oNTMwMCwgMjcpLAotCUNIQU4oNTMyMCwgMjgpLAotCUNIQU4oNTUwMCwgMjkpLAotCUNIQU4oNTUyMCwgMzApLAotCUNIQU4oNTU0MCwgMzEpLAotCUNIQU4oNTU2MCwgMzIpLAotCUNIQU4oNTU4MCwgMzMpLAotCUNIQU4oNTYwMCwgMzQpLAotCUNIQU4oNTYyMCwgMzUpLAotCUNIQU4oNTY0MCwgMzYpLAotCUNIQU4oNTY2MCwgMzcpLAotCUNIQU4oNTY4MCwgMzgpLAotCUNIQU4oNTcwMCwgMzkpLAotCUNIQU4oNTc0NSwgNDApLAotCUNIQU4oNTc2NSwgNDEpLAotCUNIQU4oNTc4NSwgNDIpLAotCUNIQU4oNTgwNSwgNDMpLAotCUNIQU4oNTgyNSwgNDQpLAotCUNIQU4oNTE3MCwgNDUpLAotCUNIQU4oNTE5MCwgNDYpLAotCUNIQU4oNTIxMCwgNDcpLAotCUNIQU4oNTIzMCwgNDgpLAotfTsKLSN1bmRlZiBDSEFOCi0KLSNkZWZpbmUgQVI5MTcwX0hUX0NBUAkJCQkJCQlcCi17CQkJCQkJCQkJXAotCS5odF9zdXBwb3J0ZWQJPSB0cnVlLAkJCQkJCVwKLQkuY2FwCQk9IElFRUU4MDIxMV9IVF9DQVBfTUFYX0FNU0RVIHwJCQlcCi0JCQkgIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwIHwJCVwKLQkJCSAgSUVFRTgwMjExX0hUX0NBUF9TR0lfNDAgfAkJCVwKLQkJCSAgSUVFRTgwMjExX0hUX0NBUF9HUk5fRkxEIHwJCQlcCi0JCQkgIElFRUU4MDIxMV9IVF9DQVBfRFNTU0NDSzQwIHwJCQlcCi0JCQkgIElFRUU4MDIxMV9IVF9DQVBfU01fUFMsCQkJXAotCS5hbXBkdV9mYWN0b3IJPSAzLAkJCQkJCVwKLQkuYW1wZHVfZGVuc2l0eQk9IDYsCQkJCQkJXAotCS5tY3MJCT0gewkJCQkJCVwKLQkJLnJ4X21hc2sgPSB7IDB4ZmYsIDB4ZmYsIDAsIDAsIDB4MSwgMCwgMCwgMCwgMCwgMCwgfSwJXAotCQkucnhfaGlnaGVzdCA9IGNwdV90b19sZTE2KDMwMCksCQkJCVwKLQkJLnR4X3BhcmFtcyA9IElFRUU4MDIxMV9IVF9NQ1NfVFhfREVGSU5FRCwJCVwKLQl9LAkJCQkJCQkJXAotfQotCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBhcjkxNzBfYmFuZF8yR0h6ID0gewotCS5jaGFubmVscwk9IGFyOTE3MF8yZ2h6X2NoYW50YWJsZSwKLQkubl9jaGFubmVscwk9IEFSUkFZX1NJWkUoYXI5MTcwXzJnaHpfY2hhbnRhYmxlKSwKLQkuYml0cmF0ZXMJPSBhcjkxNzBfZ19yYXRldGFibGUsCi0JLm5fYml0cmF0ZXMJPSBhcjkxNzBfZ19yYXRldGFibGVfc2l6ZSwKLQkuaHRfY2FwCQk9IEFSOTE3MF9IVF9DQVAsCi19OwotCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBhcjkxNzBfYmFuZF81R0h6ID0gewotCS5jaGFubmVscwk9IGFyOTE3MF81Z2h6X2NoYW50YWJsZSwKLQkubl9jaGFubmVscwk9IEFSUkFZX1NJWkUoYXI5MTcwXzVnaHpfY2hhbnRhYmxlKSwKLQkuYml0cmF0ZXMJPSBhcjkxNzBfYV9yYXRldGFibGUsCi0JLm5fYml0cmF0ZXMJPSBhcjkxNzBfYV9yYXRldGFibGVfc2l6ZSwKLQkuaHRfY2FwCQk9IEFSOTE3MF9IVF9DQVAsCi19OwotCi1zdGF0aWMgdm9pZCBhcjkxNzBfdHgoc3RydWN0IGFyOTE3MCAqYXIpOwotCi1zdGF0aWMgaW5saW5lIHUxNiBhcjkxNzBfZ2V0X3NlcV9oKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCi17Ci0JcmV0dXJuIGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpID4+IDQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTE2IGFyOTE3MF9nZXRfc2VxKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGFyOTE3MF90eF9jb250cm9sICp0eGMgPSAodm9pZCAqKSBza2ItPmRhdGE7Ci0JcmV0dXJuIGFyOTE3MF9nZXRfc2VxX2goKHZvaWQgKikgdHhjLT5mcmFtZV9kYXRhKTsKLX0KLQotI2lmZGVmIEFSOTE3MF9RVUVVRV9ERUJVRwotc3RhdGljIHZvaWQgYXI5MTcwX3ByaW50X3R4aGVhZGVyKHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBhcjkxNzBfdHhfY29udHJvbCAqdHhjID0gKHZvaWQgKikgc2tiLT5kYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXN0cnVjdCBhcjkxNzBfdHhfaW5mbyAqYXJpbmZvID0gKHZvaWQgKikgdHhpbmZvLT5yYXRlX2RyaXZlcl9kYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKSB0eGMtPmZyYW1lX2RhdGE7Ci0KLQl3aXBoeV9kZWJ1Zyhhci0+aHctPndpcGh5LAotCQkgICAgIj0+IEZSQU1FIFtza2I6JXAsIHE6JWQsIERBOlslcE1dIHM6JWQgIgotCQkgICAgIm1hY19jdHJsOiUwNHgsIHBoeV9jdHJsOiUwOHgsIHRpbWVvdXQ6WyVkIG1zXV1cbiIsCi0JCSAgICBza2IsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpLAotCQkgICAgaWVlZTgwMjExX2dldF9EQShoZHIpLCBhcjkxNzBfZ2V0X3NlcV9oKGhkciksCi0JCSAgICBsZTE2X3RvX2NwdSh0eGMtPm1hY19jb250cm9sKSwgbGUzMl90b19jcHUodHhjLT5waHlfY29udHJvbCksCi0JCSAgICBqaWZmaWVzX3RvX21zZWNzKGFyaW5mby0+dGltZW91dCAtIGppZmZpZXMpKTsKLX0KLQotc3RhdGljIHZvaWQgX19hcjkxNzBfZHVtcF90eHF1ZXVlKHN0cnVjdCBhcjkxNzAgKmFyLAotCQkJCXN0cnVjdCBza19idWZmX2hlYWQgKnF1ZXVlKQotewotCXN0cnVjdCBza19idWZmICpza2I7Ci0JaW50IGkgPSAwOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIi0tLVsgY3V0IGhlcmUgXS0tLVxuIik7Ci0Jd2lwaHlfZGVidWcoYXItPmh3LT53aXBoeSwgIiVkIGVudHJpZXMgaW4gcXVldWUuXG4iLAotCQkgICAgc2tiX3F1ZXVlX2xlbihxdWV1ZSkpOwotCi0Jc2tiX3F1ZXVlX3dhbGsocXVldWUsIHNrYikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiaW5kZXg6JWQgPT5cbiIsIGkrKyk7Ci0JCWFyOTE3MF9wcmludF90eGhlYWRlcihhciwgc2tiKTsKLQl9Ci0JaWYgKGkgIT0gc2tiX3F1ZXVlX2xlbihxdWV1ZSkpCi0JCXByaW50ayhLRVJOX0RFQlVHICJXQVJOSU5HOiBxdWV1ZSBmcmFtZSBjb3VudGVyICIKLQkJICAgICAgICJtaXNtYXRjaCAlZCAhPSAlZFxuIiwgc2tiX3F1ZXVlX2xlbihxdWV1ZSksIGkpOwotCXByaW50ayhLRVJOX0RFQlVHICItLS1bIGVuZCBdLS0tXG4iKTsKLX0KLSNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfREVCVUcgKi8KLQotI2lmZGVmIEFSOTE3MF9RVUVVRV9ERUJVRwotc3RhdGljIHZvaWQgYXI5MTcwX2R1bXBfdHhxdWV1ZShzdHJ1Y3QgYXI5MTcwICphciwKLQkJCQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnF1ZXVlLT5sb2NrLCBmbGFncyk7Ci0JX19hcjkxNzBfZHVtcF90eHF1ZXVlKGFyLCBxdWV1ZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXVldWUtPmxvY2ssIGZsYWdzKTsKLX0KLSNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfREVCVUcgKi8KLQotI2lmZGVmIEFSOTE3MF9RVUVVRV9TVE9QX0RFQlVHCi1zdGF0aWMgdm9pZCBfX2FyOTE3MF9kdW1wX3R4c3RhdHMoc3RydWN0IGFyOTE3MCAqYXIpCi17Ci0JaW50IGk7Ci0KLQl3aXBoeV9kZWJ1Zyhhci0+aHctPndpcGh5LCAiUW9TIHF1ZXVlIHN0YXRzXG4iKTsKLQotCWZvciAoaSA9IDA7IGkgPCBfX0FSOTE3MF9OVU1fVFhROyBpKyspCi0JCXdpcGh5X2RlYnVnKGFyLT5ody0+d2lwaHksCi0JCQkgICAgInF1ZXVlOiVkIGxpbWl0OiVkIGxlbjolZCB3YWl0YWNrOiVkIHN0b3BwZWQ6JWRcbiIsCi0JCQkgICAgaSwgYXItPnR4X3N0YXRzW2ldLmxpbWl0LCBhci0+dHhfc3RhdHNbaV0ubGVuLAotCQkJICAgIHNrYl9xdWV1ZV9sZW4oJmFyLT50eF9zdGF0dXNbaV0pLAotCQkJICAgIGllZWU4MDIxMV9xdWV1ZV9zdG9wcGVkKGFyLT5odywgaSkpOwotfQotI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9TVE9QX0RFQlVHICovCi0KLS8qIGNhbGxlciBtdXN0IGd1YXJhbnRlZSBleGNsdXNpdmUgYWNjZXNzIGZvciBfYmluXyBxdWV1ZS4gKi8KLXN0YXRpYyB2b2lkIGFyOTE3MF9yZWN5Y2xlX2V4cGlyZWQoc3RydWN0IGFyOTE3MCAqYXIsCi0JCQkJICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUsCi0JCQkJICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqYmluKQotewotCXN0cnVjdCBza19idWZmICpza2IsICpvbGQgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcXVldWUtPmxvY2ssIGZsYWdzKTsKLQl3aGlsZSAoKHNrYiA9IHNrYl9wZWVrKHF1ZXVlKSkpIHsKLQkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eGluZm87Ci0JCXN0cnVjdCBhcjkxNzBfdHhfaW5mbyAqYXJpbmZvOwotCi0JCXR4aW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQkJYXJpbmZvID0gKHZvaWQgKikgdHhpbmZvLT5yYXRlX2RyaXZlcl9kYXRhOwotCi0JCWlmICh0aW1lX2lzX2JlZm9yZV9qaWZmaWVzKGFyaW5mby0+dGltZW91dCkpIHsKLSNpZmRlZiBBUjkxNzBfUVVFVUVfREVCVUcKLQkJCXdpcGh5X2RlYnVnKGFyLT5ody0+d2lwaHksCi0JCQkJICAgICJbJWxkID4gJWxkXSBmcmFtZSBleHBpcmVkID0+IHJlY3ljbGVcbiIsCi0JCQkJICAgIGppZmZpZXMsIGFyaW5mby0+dGltZW91dCk7Ci0JCQlhcjkxNzBfcHJpbnRfdHhoZWFkZXIoYXIsIHNrYik7Ci0jZW5kaWYgLyogQVI5MTcwX1FVRVVFX0RFQlVHICovCi0JCQlfX3NrYl91bmxpbmsoc2tiLCBxdWV1ZSk7Ci0JCQlfX3NrYl9xdWV1ZV90YWlsKGJpbiwgc2tiKTsKLQkJfSBlbHNlIHsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKHVubGlrZWx5KG9sZCA9PSBza2IpKSB7Ci0JCQkvKiBiYWlsIG91dCAtIHF1ZXVlIGlzIHNob3QuICovCi0KLQkJCVdBUk5fT04oMSk7Ci0JCQlicmVhazsKLQkJfQotCQlvbGQgPSBza2I7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnF1ZXVlLT5sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFyOTE3MF90eF9zdGF0dXMoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgIHUxNiB0eF9zdGF0dXMpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eGluZm87Ci0JdW5zaWduZWQgaW50IHJldHJpZXMgPSAwOwotCi0JdHhpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCWllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cyh0eGluZm8pOwotCi0Jc3dpdGNoICh0eF9zdGF0dXMpIHsKLQljYXNlIEFSOTE3MF9UWF9TVEFUVVNfUkVUUlk6Ci0JCXJldHJpZXMgPSAyOwotCWNhc2UgQVI5MTcwX1RYX1NUQVRVU19DT01QTEVURToKLQkJdHhpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7Ci0JCWJyZWFrOwotCi0JY2FzZSBBUjkxNzBfVFhfU1RBVFVTX0ZBSUxFRDoKLQkJcmV0cmllcyA9IGFyLT5ody0+Y29uZi5sb25nX2ZyYW1lX21heF90eF9jb3VudDsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQl3aXBoeV9lcnIoYXItPmh3LT53aXBoeSwKLQkJCSAgImludmFsaWQgdHhfc3RhdHVzIHJlc3BvbnNlICgleClcbiIsIHR4X3N0YXR1cyk7Ci0JCWJyZWFrOwotCX0KLQotCXR4aW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50ID0gcmV0cmllcyArIDE7Ci0Jc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGFyOTE3MF90eF9jb250cm9sKSk7Ci0JaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGFyLT5odywgc2tiKTsKLX0KLQotdm9pZCBhcjkxNzBfdHhfY2FsbGJhY2soc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXN0cnVjdCBhcjkxNzBfdHhfaW5mbyAqYXJpbmZvID0gKHZvaWQgKikgaW5mby0+cmF0ZV9kcml2ZXJfZGF0YTsKLQl1bnNpZ25lZCBpbnQgcXVldWUgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFyLT50eF9zdGF0c19sb2NrLCBmbGFncyk7Ci0JYXItPnR4X3N0YXRzW3F1ZXVlXS5sZW4tLTsKLQotCWlmIChhci0+dHhfc3RhdHNbcXVldWVdLmxlbiA8IEFSOTE3MF9OVU1fVFhfTElNSVRfU09GVCkgewotI2lmZGVmIEFSOTE3MF9RVUVVRV9TVE9QX0RFQlVHCi0JCXdpcGh5X2RlYnVnKGFyLT5ody0+d2lwaHksICJ3YWtlIHF1ZXVlICVkXG4iLCBxdWV1ZSk7Ci0JCV9fYXI5MTcwX2R1bXBfdHhzdGF0cyhhcik7Ci0jZW5kaWYgLyogQVI5MTcwX1FVRVVFX1NUT1BfREVCVUcgKi8KLQkJaWVlZTgwMjExX3dha2VfcXVldWUoYXItPmh3LCBxdWV1ZSk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFyLT50eF9zdGF0c19sb2NrLCBmbGFncyk7Ci0KLQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykgewotCQlhcjkxNzBfdHhfc3RhdHVzKGFyLCBza2IsIEFSOTE3MF9UWF9TVEFUVVNfRkFJTEVEKTsKLQl9IGVsc2UgewotCQlhcmluZm8tPnRpbWVvdXQgPSBqaWZmaWVzICsKLQkJCSAgbXNlY3NfdG9famlmZmllcyhBUjkxNzBfVFhfVElNRU9VVCk7Ci0KLQkJc2tiX3F1ZXVlX3RhaWwoJmFyLT50eF9zdGF0dXNbcXVldWVdLCBza2IpOwotCX0KLQotCWlmICghYXItPnR4X3N0YXRzW3F1ZXVlXS5sZW4gJiYKLQkgICAgIXNrYl9xdWV1ZV9lbXB0eSgmYXItPnR4X3BlbmRpbmdbcXVldWVdKSkgewotCQlhcjkxNzBfdHgoYXIpOwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCBza19idWZmICphcjkxNzBfZ2V0X3F1ZXVlZF9za2Ioc3RydWN0IGFyOTE3MCAqYXIsCi0JCQkJCSAgICAgY29uc3QgdTggKm1hYywKLQkJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSwKLQkJCQkJICAgICBjb25zdCB1MzIgcmF0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0KLQkvKgotCSAqIFVuZm9ydHVuYXRlbHksIHRoZSBmaXJtd2FyZSBkb2VzIG5vdCB0ZWxsIHRvIHdoaWNoIChxdWV1ZWQpIGZyYW1lCi0JICogdGhpcyB0cmFuc21pc3Npb24gc3RhdHVzIHJlcG9ydCBiZWxvbmdzIHRvLgotCSAqCi0JICogU28gd2UgaGF2ZSB0byBtYWtlIHJpc2t5IGd1ZXNzZXMgLSB3aXRoIHRoZSBzY2FyY2UgaW5mb3JtYXRpb24KLQkgKiB0aGUgZmlybXdhcmUgcHJvdmlkZWQgKC0+IGRlc3RpbmF0aW9uIE1BQywgYW5kIHBoeV9jb250cm9sKSAtCi0JICogYW5kIGhvcGUgdGhhdCB3ZSBwaWNrZWQgdGhlIHJpZ2h0IG9uZS4uLgotCSAqLwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnF1ZXVlLT5sb2NrLCBmbGFncyk7Ci0Jc2tiX3F1ZXVlX3dhbGsocXVldWUsIHNrYikgewotCQlzdHJ1Y3QgYXI5MTcwX3R4X2NvbnRyb2wgKnR4YyA9ICh2b2lkICopIHNrYi0+ZGF0YTsKLQkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopIHR4Yy0+ZnJhbWVfZGF0YTsKLQkJdTMyIHI7Ci0KLQkJaWYgKG1hYyAmJiBjb21wYXJlX2V0aGVyX2FkZHIoaWVlZTgwMjExX2dldF9EQShoZHIpLCBtYWMpKSB7Ci0jaWZkZWYgQVI5MTcwX1FVRVVFX0RFQlVHCi0JCQl3aXBoeV9kZWJ1Zyhhci0+aHctPndpcGh5LAotCQkJCSAgICAic2tpcCBmcmFtZSA9PiBEQSAlcE0gIT0gJXBNXG4iLAotCQkJCSAgICBtYWMsIGllZWU4MDIxMV9nZXRfREEoaGRyKSk7Ci0JCQlhcjkxNzBfcHJpbnRfdHhoZWFkZXIoYXIsIHNrYik7Ci0jZW5kaWYgLyogQVI5MTcwX1FVRVVFX0RFQlVHICovCi0JCQljb250aW51ZTsKLQkJfQotCi0JCXIgPSAobGUzMl90b19jcHUodHhjLT5waHlfY29udHJvbCkgJiBBUjkxNzBfVFhfUEhZX01DU19NQVNLKSA+PgotCQkgICAgQVI5MTcwX1RYX1BIWV9NQ1NfU0hJRlQ7Ci0KLQkJaWYgKChyYXRlICE9IEFSOTE3MF9UWF9JTlZBTElEX1JBVEUpICYmIChyICE9IHJhdGUpKSB7Ci0jaWZkZWYgQVI5MTcwX1FVRVVFX0RFQlVHCi0JCQl3aXBoeV9kZWJ1Zyhhci0+aHctPndpcGh5LAotCQkJCSAgICAic2tpcCBmcmFtZSA9PiByYXRlICVkICE9ICVkXG4iLCByYXRlLCByKTsKLQkJCWFyOTE3MF9wcmludF90eGhlYWRlcihhciwgc2tiKTsKLSNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfREVCVUcgKi8KLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJX19za2JfdW5saW5rKHNrYiwgcXVldWUpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxdWV1ZS0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gc2tiOwotCX0KLQotI2lmZGVmIEFSOTE3MF9RVUVVRV9ERUJVRwotCXdpcGh5X2Vycihhci0+aHctPndpcGh5LAotCQkgICJFU1M6WyVwTV0gZG9lcyBub3QgaGF2ZSBhbnkgb3V0c3RhbmRpbmcgZnJhbWVzIGluIHF1ZXVlLlxuIiwKLQkJICBtYWMpOwotCV9fYXI5MTcwX2R1bXBfdHhxdWV1ZShhciwgcXVldWUpOwotI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9ERUJVRyAqLwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnF1ZXVlLT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotLyoKLSAqIFRoaXMgd29ya2VyIHRyaWVzIHRvIGtlZXBzIGFuIG1haW50YWluIHR4X3N0YXR1cyBxdWV1ZXMuCi0gKiBTbyB3ZSBjYW4gZ3VhcmFudGVlIHRoYXQgaW5jb21pbmcgdHhfc3RhdHVzIHJlcG9ydHMgYXJlCi0gKiBhY3R1YWxseSBmb3IgYSBwZW5kaW5nIGZyYW1lLgotICovCi0KLXN0YXRpYyB2b2lkIGFyOTE3MF90eF9qYW5pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgYXI5MTcwICphciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXI5MTcwLAotCQkJCQkgdHhfamFuaXRvci53b3JrKTsKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHdhc3RlOwotCXVuc2lnbmVkIGludCBpOwotCWJvb2wgcmVzY2hlZCA9IGZhbHNlOwotCi0JaWYgKHVubGlrZWx5KCFJU19TVEFSVEVEKGFyKSkpCi0JCXJldHVybiA7Ci0KLQlza2JfcXVldWVfaGVhZF9pbml0KCZ3YXN0ZSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgX19BUjkxNzBfTlVNX1RYUTsgaSsrKSB7Ci0jaWZkZWYgQVI5MTcwX1FVRVVFX0RFQlVHCi0JCXdpcGh5X2RlYnVnKGFyLT5ody0+d2lwaHksICJnYXJiYWdlIGNvbGxlY3RvciBzY2FucyBxdWV1ZTolZFxuIiwKLQkJCSAgICBpKTsKLQkJYXI5MTcwX2R1bXBfdHhxdWV1ZShhciwgJmFyLT50eF9wZW5kaW5nW2ldKTsKLQkJYXI5MTcwX2R1bXBfdHhxdWV1ZShhciwgJmFyLT50eF9zdGF0dXNbaV0pOwotI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9ERUJVRyAqLwotCi0JCWFyOTE3MF9yZWN5Y2xlX2V4cGlyZWQoYXIsICZhci0+dHhfc3RhdHVzW2ldLCAmd2FzdGUpOwotCQlhcjkxNzBfcmVjeWNsZV9leHBpcmVkKGFyLCAmYXItPnR4X3BlbmRpbmdbaV0sICZ3YXN0ZSk7Ci0JCXNrYl9xdWV1ZV9wdXJnZSgmd2FzdGUpOwotCi0JCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZhci0+dHhfc3RhdHVzW2ldKSB8fAotCQkgICAgIXNrYl9xdWV1ZV9lbXB0eSgmYXItPnR4X3BlbmRpbmdbaV0pKQotCQkJcmVzY2hlZCA9IHRydWU7Ci0JfQotCi0JaWYgKCFyZXNjaGVkKQotCQlyZXR1cm47Ci0KLQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKGFyLT5odywKLQkJCQkgICAgICZhci0+dHhfamFuaXRvciwKLQkJCQkgICAgIG1zZWNzX3RvX2ppZmZpZXMoQVI5MTcwX0pBTklUT1JfREVMQVkpKTsKLX0KLQotdm9pZCBhcjkxNzBfaGFuZGxlX2NvbW1hbmRfcmVzcG9uc2Uoc3RydWN0IGFyOTE3MCAqYXIsIHZvaWQgKmJ1ZiwgdTMyIGxlbikKLXsKLQlzdHJ1Y3QgYXI5MTcwX2NtZF9yZXNwb25zZSAqY21kID0gKHZvaWQgKikgYnVmOwotCi0JaWYgKChjbWQtPnR5cGUgJiAweGMwKSAhPSAweGMwKSB7Ci0JCWFyLT5jYWxsYmFja19jbWQoYXIsIGxlbiwgYnVmKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIGhhcmR3YXJlIGV2ZW50IGhhbmRsZXJzICovCi0Jc3dpdGNoIChjbWQtPnR5cGUpIHsKLQljYXNlIDB4YzE6IHsKLQkJLyoKLQkJICogVFggc3RhdHVzIG5vdGlmaWNhdGlvbjoKLQkJICogYnl0ZXM6IDBjIGMxIFhYIFlZIE0xIE0yIE0zIE00IE01IE02IFI0IFIzIFIyIFIxIFMyIFMxCi0JCSAqCi0JCSAqIFhYIGFsd2F5cyA4MQotCQkgKiBZWSBhbHdheXMgMDAKLQkJICogTTEtTTYgaXMgdGhlIE1BQyBhZGRyZXNzCi0JCSAqIFIxLVI0IGlzIHRoZSB0cmFuc21pdCByYXRlCi0JCSAqIFMxLVMyIGlzIHRoZSB0cmFuc21pdCBzdGF0dXMKLQkJICovCi0KLQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkJdTMyIHBoeSA9IGxlMzJfdG9fY3B1KGNtZC0+dHhfc3RhdHVzLnJhdGUpOwotCQl1MzIgcSA9IChwaHkgJiBBUjkxNzBfVFhfUEhZX1FPU19NQVNLKSA+PgotCQkJQVI5MTcwX1RYX1BIWV9RT1NfU0hJRlQ7Ci0jaWZkZWYgQVI5MTcwX1FVRVVFX0RFQlVHCi0JCXdpcGh5X2RlYnVnKGFyLT5ody0+d2lwaHksCi0JCQkgICAgInJlY3YgdHhfc3RhdHVzIGZvciAlcG0sIHA6JTA4eCwgcTolZFxuIiwKLQkJCSAgICBjbWQtPnR4X3N0YXR1cy5kc3QsIHBoeSwgcSk7Ci0jZW5kaWYgLyogQVI5MTcwX1FVRVVFX0RFQlVHICovCi0KLQkJc2tiID0gYXI5MTcwX2dldF9xdWV1ZWRfc2tiKGFyLCBjbWQtPnR4X3N0YXR1cy5kc3QsCi0JCQkJCSAgICAmYXItPnR4X3N0YXR1c1txXSwKLQkJCQkJICAgIEFSOTE3MF9UWF9JTlZBTElEX1JBVEUpOwotCQlpZiAodW5saWtlbHkoIXNrYikpCi0JCQlyZXR1cm4gOwotCi0JCWFyOTE3MF90eF9zdGF0dXMoYXIsIHNrYiwgbGUxNl90b19jcHUoY21kLT50eF9zdGF0dXMuc3RhdHVzKSk7Ci0JCWJyZWFrOwotCQl9Ci0KLQljYXNlIDB4YzA6Ci0JCS8qCi0JCSAqIHByZS1UQlRUIGV2ZW50Ci0JCSAqLwotCQlpZiAoYXItPnZpZiAmJiBhci0+dmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKQotCQkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoYXItPmh3LCAmYXItPmJlYWNvbl93b3JrKTsKLQkJYnJlYWs7Ci0KLQljYXNlIDB4YzI6Ci0JCS8qCi0JCSAqIChJQlNTKSBiZWFjb24gc2VuZCBub3RpZmljYXRpb24KLQkJICogYnl0ZXM6IDA0IGMyIFhYIFlZIEI0IEIzIEIyIEIxCi0JCSAqCi0JCSAqIFhYIGFsd2F5cyA4MAotCQkgKiBZWSBhbHdheXMgMDAKLQkJICogQjEtQjQgInNob3VsZCIgYmUgdGhlIG51bWJlciBvZiBzZW5kIG91dCBiZWFjb25zLgotCQkgKi8KLQkJYnJlYWs7Ci0KLQljYXNlIDB4YzM6Ci0JCS8qIEVuZCBvZiBBdGltIFdpbmRvdyAqLwotCQlicmVhazsKLQotCWNhc2UgMHhjNDoKLQkJLyogQmxvY2tBQ0sgYml0bWFwICovCi0JCWJyZWFrOwotCi0JY2FzZSAweGM1OgotCQkvKiBCbG9ja0FDSyBldmVudHMgKi8KLQkJYnJlYWs7Ci0KLQljYXNlIDB4YzY6Ci0JCS8qIFdhdGNoZG9nIEludGVycnVwdCAqLwotCQlicmVhazsKLQotCWNhc2UgMHhjOToKLQkJLyogcmV0cmFuc21pc3Npb24gaXNzdWUgLyBTSUZTL0VJRlMgY29sbGlzaW9uID8hICovCi0JCWJyZWFrOwotCi0JLyogZmlybXdhcmUgZGVidWcgKi8KLQljYXNlIDB4Y2E6Ci0JCXByaW50ayhLRVJOX0RFQlVHICJhcjkxNzAgRlc6ICUuKnNcbiIsIGxlbiAtIDQsCi0JCQkJKGNoYXIgKilidWYgKyA0KTsKLQkJYnJlYWs7Ci0JY2FzZSAweGNiOgotCQlsZW4gLT0gNDsKLQotCQlzd2l0Y2ggKGxlbikgewotCQljYXNlIDE6Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiYXI5MTcwIEZXOiB1ODogJSMuMnhcbiIsCi0JCQkJKigoY2hhciAqKWJ1ZiArIDQpKTsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiYXI5MTcwIEZXOiB1ODogJSMuNHhcbiIsCi0JCQkJbGUxNl90b19jcHVwKChfX2xlMTYgKikoKGNoYXIgKilidWYgKyA0KSkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgNDoKLQkJCXByaW50ayhLRVJOX0RFQlVHICJhcjkxNzAgRlc6IHU4OiAlIy44eFxuIiwKLQkJCQlsZTMyX3RvX2NwdXAoKF9fbGUzMiAqKSgoY2hhciAqKWJ1ZiArIDQpKSk7Ci0JCQlicmVhazsKLQkJY2FzZSA4OgotCQkJcHJpbnRrKEtFUk5fREVCVUcgImFyOTE3MCBGVzogdTg6ICUjLjE2bHhcbiIsCi0JCQkJKHVuc2lnbmVkIGxvbmcpbGU2NF90b19jcHVwKAotCQkJCQkJKF9fbGU2NCAqKSgoY2hhciAqKWJ1ZiArIDQpKSk7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQljYXNlIDB4Y2M6Ci0JCXByaW50X2hleF9kdW1wX2J5dGVzKCJhcjkxNzAgRlc6IiwgRFVNUF9QUkVGSVhfTk9ORSwKLQkJCQkgICAgIChjaGFyICopYnVmICsgNCwgbGVuIC0gNCk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcHJfaW5mbygicmVjZWl2ZWQgdW5oYW5kbGVkIGV2ZW50ICV4XG4iLCBjbWQtPnR5cGUpOwotCQlwcmludF9oZXhfZHVtcF9ieXRlcygiZHVtcDoiLCBEVU1QX1BSRUZJWF9OT05FLCBidWYsIGxlbik7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYXI5MTcwX3J4X3Jlc2V0X3J4X21wZHUoc3RydWN0IGFyOTE3MCAqYXIpCi17Ci0JbWVtc2V0KCZhci0+cnhfbXBkdS5wbGNwLCAwLCBzaXplb2Yoc3RydWN0IGFyOTE3MF9yeF9oZWFkKSk7Ci0JYXItPnJ4X21wZHUuaGFzX3BsY3AgPSBmYWxzZTsKLX0KLQotaW50IGFyOTE3MF9uYWdfbGltaXRlcihzdHJ1Y3QgYXI5MTcwICphcikKLXsKLQlib29sIHByaW50X21lc3NhZ2U7Ci0KLQkvKgotCSAqIHdlIGV4cGVjdCBhbGwgc29ydHMgb2YgZXJyb3JzIGluIHByb21pc2N1b3VzIG1vZGUuCi0JICogZG9uJ3QgYm90aGVyIHdpdGggaXQsIGl0J3MgT0shCi0JICovCi0JaWYgKGFyLT5zbmlmZmVyX2VuYWJsZWQpCi0JCXJldHVybiBmYWxzZTsKLQotCS8qCi0JICogb25seSBnbyBmb3IgZnJlcXVlbnQgZXJyb3JzISBUaGUgaGFyZHdhcmUgdGVuZHMgdG8KLQkgKiBkbyBzb21lIHN0dXBpZCB0aGluZyBvbmNlIGluIGEgd2hpbGUgdW5kZXIgbG9hZCwgaW4KLQkgKiBub2lzeSBlbnZpcm9ubWVudHMgb3IganVzdCBmb3IgZnVuIQotCSAqLwotCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBhci0+YmFkX2h3X25hZ2dlcikgJiYgbmV0X3JhdGVsaW1pdCgpKQotCQlwcmludF9tZXNzYWdlID0gdHJ1ZTsKLQllbHNlCi0JCXByaW50X21lc3NhZ2UgPSBmYWxzZTsKLQotCS8qIHJlc2V0IHRocmVzaG9sZCBmb3IgIm9uY2UgaW4gYSB3aGlsZSIgKi8KLQlhci0+YmFkX2h3X25hZ2dlciA9IGppZmZpZXMgKyBIWiAvIDQ7Ci0JcmV0dXJuIHByaW50X21lc3NhZ2U7Ci19Ci0KLXN0YXRpYyBpbnQgYXI5MTcwX3J4X21hY19zdGF0dXMoc3RydWN0IGFyOTE3MCAqYXIsCi0JCQkJc3RydWN0IGFyOTE3MF9yeF9oZWFkICpoZWFkLAotCQkJCXN0cnVjdCBhcjkxNzBfcnhfbWFjc3RhdHVzICptYWMsCi0JCQkJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cykKLXsKLQl1OCBlcnJvciwgZGVjcnlwdDsKLQotCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGFyOTE3MF9yeF9oZWFkKSAhPSAxMik7Ci0JQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgYXI5MTcwX3J4X21hY3N0YXR1cykgIT0gNCk7Ci0KLQllcnJvciA9IG1hYy0+ZXJyb3I7Ci0JaWYgKGVycm9yICYgQVI5MTcwX1JYX0VSUk9SX01NSUMpIHsKLQkJc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfTU1JQ19FUlJPUjsKLQkJZXJyb3IgJj0gfkFSOTE3MF9SWF9FUlJPUl9NTUlDOwotCX0KLQotCWlmIChlcnJvciAmIEFSOTE3MF9SWF9FUlJPUl9QTENQKSB7Ci0JCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0ZBSUxFRF9QTENQX0NSQzsKLQkJZXJyb3IgJj0gfkFSOTE3MF9SWF9FUlJPUl9QTENQOwotCi0JCWlmICghKGFyLT5maWx0ZXJfc3RhdGUgJiBGSUZfUExDUEZBSUwpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGVycm9yICYgQVI5MTcwX1JYX0VSUk9SX0ZDUykgewotCQlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19GQUlMRURfRkNTX0NSQzsKLQkJZXJyb3IgJj0gfkFSOTE3MF9SWF9FUlJPUl9GQ1M7Ci0KLQkJaWYgKCEoYXItPmZpbHRlcl9zdGF0ZSAmIEZJRl9GQ1NGQUlMKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWRlY3J5cHQgPSBhcjkxNzBfZ2V0X2RlY3J5cHRfdHlwZShtYWMpOwotCWlmICghKGRlY3J5cHQgJiBBUjkxNzBfUlhfRU5DX1NPRlRXQVJFKSAmJgotCSAgICBkZWNyeXB0ICE9IEFSOTE3MF9FTkNfQUxHX05PTkUpCi0JCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0RFQ1JZUFRFRDsKLQotCS8qIGlnbm9yZSB3cm9uZyBSQSBlcnJvcnMgKi8KLQllcnJvciAmPSB+QVI5MTcwX1JYX0VSUk9SX1dST05HX1JBOwotCi0JaWYgKGVycm9yICYgQVI5MTcwX1JYX0VSUk9SX0RFQ1JZUFQpIHsKLQkJZXJyb3IgJj0gfkFSOTE3MF9SWF9FUlJPUl9ERUNSWVBUOwotCQkvKgotCQkgKiBSeCBkZWNyeXB0aW9uIGlzIGRvbmUgaW4gcGxhY2UsCi0JCSAqIHRoZSBvcmlnaW5hbCBkYXRhIGlzIGxvc3QgYW55d2F5LgotCQkgKi8KLQotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBkcm9wIGFueSBvdGhlciBlcnJvciBmcmFtZXMgKi8KLQlpZiAodW5saWtlbHkoZXJyb3IpKSB7Ci0JCS8qIFRPRE86IHVwZGF0ZSBuZXRkZXZpY2UncyBSWCBkcm9wcGVkL2Vycm9ycyBzdGF0aXN0aWNzICovCi0KLQkJaWYgKGFyOTE3MF9uYWdfbGltaXRlcihhcikpCi0JCQl3aXBoeV9kZWJ1Zyhhci0+aHctPndpcGh5LAotCQkJCSAgICAicmVjZWl2ZWQgZnJhbWUgd2l0aCBzdXNwaWNpb3VzIGVycm9yIGNvZGUgKCUjeCkuXG4iLAotCQkJCSAgICBlcnJvcik7Ci0KLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc3RhdHVzLT5iYW5kID0gYXItPmNoYW5uZWwtPmJhbmQ7Ci0Jc3RhdHVzLT5mcmVxID0gYXItPmNoYW5uZWwtPmNlbnRlcl9mcmVxOwotCi0Jc3dpdGNoIChtYWMtPnN0YXR1cyAmIEFSOTE3MF9SWF9TVEFUVVNfTU9EVUxBVElPTl9NQVNLKSB7Ci0JY2FzZSBBUjkxNzBfUlhfU1RBVFVTX01PRFVMQVRJT05fQ0NLOgotCQlpZiAobWFjLT5zdGF0dXMgJiBBUjkxNzBfUlhfU1RBVFVTX1NIT1JUX1BSRUFNQkxFKQotCQkJc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfU0hPUlRQUkU7Ci0JCXN3aXRjaCAoaGVhZC0+cGxjcFswXSkgewotCQljYXNlIDB4MGE6Ci0JCQlzdGF0dXMtPnJhdGVfaWR4ID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIDB4MTQ6Ci0JCQlzdGF0dXMtPnJhdGVfaWR4ID0gMTsKLQkJCWJyZWFrOwotCQljYXNlIDB4Mzc6Ci0JCQlzdGF0dXMtPnJhdGVfaWR4ID0gMjsKLQkJCWJyZWFrOwotCQljYXNlIDB4NmU6Ci0JCQlzdGF0dXMtPnJhdGVfaWR4ID0gMzsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJaWYgKGFyOTE3MF9uYWdfbGltaXRlcihhcikpCi0JCQkJd2lwaHlfZXJyKGFyLT5ody0+d2lwaHksCi0JCQkJCSAgImludmFsaWQgcGxjcCBjY2sgcmF0ZSAoJXgpLlxuIiwKLQkJCQkJICBoZWFkLT5wbGNwWzBdKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBBUjkxNzBfUlhfU1RBVFVTX01PRFVMQVRJT05fRFVQT0ZETToKLQljYXNlIEFSOTE3MF9SWF9TVEFUVVNfTU9EVUxBVElPTl9PRkRNOgotCQlzd2l0Y2ggKGhlYWQtPnBsY3BbMF0gJiAweGYpIHsKLQkJY2FzZSAweGI6Ci0JCQlzdGF0dXMtPnJhdGVfaWR4ID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIDB4ZjoKLQkJCXN0YXR1cy0+cmF0ZV9pZHggPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHhhOgotCQkJc3RhdHVzLT5yYXRlX2lkeCA9IDI7Ci0JCQlicmVhazsKLQkJY2FzZSAweGU6Ci0JCQlzdGF0dXMtPnJhdGVfaWR4ID0gMzsKLQkJCWJyZWFrOwotCQljYXNlIDB4OToKLQkJCXN0YXR1cy0+cmF0ZV9pZHggPSA0OwotCQkJYnJlYWs7Ci0JCWNhc2UgMHhkOgotCQkJc3RhdHVzLT5yYXRlX2lkeCA9IDU7Ci0JCQlicmVhazsKLQkJY2FzZSAweDg6Ci0JCQlzdGF0dXMtPnJhdGVfaWR4ID0gNjsKLQkJCWJyZWFrOwotCQljYXNlIDB4YzoKLQkJCXN0YXR1cy0+cmF0ZV9pZHggPSA3OwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlpZiAoYXI5MTcwX25hZ19saW1pdGVyKGFyKSkKLQkJCQl3aXBoeV9lcnIoYXItPmh3LT53aXBoeSwKLQkJCQkJICAiaW52YWxpZCBwbGNwIG9mZG0gcmF0ZSAoJXgpLlxuIiwKLQkJCQkJICBoZWFkLT5wbGNwWzBdKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWlmIChzdGF0dXMtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKLQkJCXN0YXR1cy0+cmF0ZV9pZHggKz0gNDsKLQkJYnJlYWs7Ci0KLQljYXNlIEFSOTE3MF9SWF9TVEFUVVNfTU9EVUxBVElPTl9IVDoKLQkJaWYgKGhlYWQtPnBsY3BbM10gJiAweDgwKQotCQkJc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfNDBNSFo7Ci0JCWlmIChoZWFkLT5wbGNwWzZdICYgMHg4MCkKLQkJCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX1NIT1JUX0dJOwotCi0JCXN0YXR1cy0+cmF0ZV9pZHggPSBjbGFtcCgwLCA3NSwgaGVhZC0+cGxjcFs2XSAmIDB4N2YpOwotCQlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19IVDsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlpZiAoYXI5MTcwX25hZ19saW1pdGVyKGFyKSkKLQkJCXdpcGh5X2Vycihhci0+aHctPndpcGh5LCAiaW52YWxpZCBtb2R1bGF0aW9uXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGFyOTE3MF9yeF9waHlfc3RhdHVzKHN0cnVjdCBhcjkxNzAgKmFyLAotCQkJCSBzdHJ1Y3QgYXI5MTcwX3J4X3BoeXN0YXR1cyAqcGh5LAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKQotewotCWludCBpOwotCi0JQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgYXI5MTcwX3J4X3BoeXN0YXR1cykgIT0gMjApOwotCi0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykKLQkJaWYgKHBoeS0+cnNzaVtpXSAhPSAweDgwKQotCQkJc3RhdHVzLT5hbnRlbm5hIHw9IEJJVChpKTsKLQotCS8qIHBvc3QtcHJvY2VzcyBSU1NJICovCi0JZm9yIChpID0gMDsgaSA8IDc7IGkrKykKLQkJaWYgKHBoeS0+cnNzaVtpXSAmIDB4ODApCi0JCQlwaHktPnJzc2lbaV0gPSAoKHBoeS0+cnNzaVtpXSAmIDB4N2YpICsgMSkgJiAweDdmOwotCi0JLyogVE9ETzogd2UgY291bGQgZG8gc29tZXRoaW5nIHdpdGggcGh5X2Vycm9ycyAqLwotCXN0YXR1cy0+c2lnbmFsID0gYXItPm5vaXNlWzBdICsgcGh5LT5yc3NpX2NvbWJpbmVkOwotfQotCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmFyOTE3MF9yeF9jb3B5X2RhdGEodTggKmJ1ZiwgaW50IGxlbikKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWludCByZXNlcnZlZCA9IDA7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopIGJ1ZjsKLQotCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSkgewotCQl1OCAqcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKLQkJcmVzZXJ2ZWQgKz0gTkVUX0lQX0FMSUdOOwotCi0JCWlmICgqcWMgJiBJRUVFODAyMTFfUU9TX0NPTlRST0xfQV9NU0RVX1BSRVNFTlQpCi0JCQlyZXNlcnZlZCArPSBORVRfSVBfQUxJR047Ci0JfQotCi0JaWYgKGllZWU4MDIxMV9oYXNfYTQoaGRyLT5mcmFtZV9jb250cm9sKSkKLQkJcmVzZXJ2ZWQgKz0gTkVUX0lQX0FMSUdOOwotCi0JcmVzZXJ2ZWQgPSAzMiArIChyZXNlcnZlZCAmIE5FVF9JUF9BTElHTik7Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbiArIHJlc2VydmVkKTsKLQlpZiAobGlrZWx5KHNrYikpIHsKLQkJc2tiX3Jlc2VydmUoc2tiLCByZXNlcnZlZCk7Ci0JCW1lbWNweShza2JfcHV0KHNrYiwgbGVuKSwgYnVmLCBsZW4pOwotCX0KLQotCXJldHVybiBza2I7Ci19Ci0KLS8qCi0gKiBJZiB0aGUgZnJhbWUgYWxpZ25tZW50IGlzIHJpZ2h0IChvciB0aGUga2VybmVsIGhhcwotICogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MpLCBhbmQgdGhlcmUKLSAqIGlzIG9ubHkgYSBzaW5nbGUgTVBEVSBpbiB0aGUgVVNCIGZyYW1lLCB0aGVuIHdlIGNvdWxkCi0gKiBzdWJtaXQgdG8gbWFjODAyMTEgdGhlIFNLQiBkaXJlY3RseS4gSG93ZXZlciwgc2luY2UKLSAqIHRoZXJlIG1heSBiZSBtdWx0aXBsZSBwYWNrZXRzIGluIG9uZSBTS0IgaW4gc3RyZWFtCi0gKiBtb2RlLCBhbmQgd2UgbmVlZCB0byBvYnNlcnZlIHRoZSBwcm9wZXIgb3JkZXJpbmcsCi0gKiB0aGlzIGlzIG5vbi10cml2aWFsLgotICovCi0KLXN0YXRpYyB2b2lkIGFyOTE3MF9oYW5kbGVfbXBkdShzdHJ1Y3QgYXI5MTcwICphciwgdTggKmJ1ZiwgaW50IGxlbikKLXsKLQlzdHJ1Y3QgYXI5MTcwX3J4X2hlYWQgKmhlYWQ7Ci0Jc3RydWN0IGFyOTE3MF9yeF9tYWNzdGF0dXMgKm1hYzsKLQlzdHJ1Y3QgYXI5MTcwX3J4X3BoeXN0YXR1cyAqcGh5ID0gTlVMTDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyBzdGF0dXM7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgbXBkdV9sZW47Ci0KLQlpZiAodW5saWtlbHkoIUlTX1NUQVJURUQoYXIpIHx8IGxlbiA8IChzaXplb2YoKm1hYykpKSkKLQkJcmV0dXJuIDsKLQotCS8qIFJlY2VpdmVkIE1QRFUgKi8KLQltcGR1X2xlbiA9IGxlbiAtIHNpemVvZigqbWFjKTsKLQotCW1hYyA9ICh2b2lkICopKGJ1ZiArIG1wZHVfbGVuKTsKLQlpZiAodW5saWtlbHkobWFjLT5lcnJvciAmIEFSOTE3MF9SWF9FUlJPUl9GQVRBTCkpIHsKLQkJLyogdGhpcyBmcmFtZSBpcyB0b28gZGFtYWdlZCBhbmQgY2FuJ3QgYmUgdXNlZCAtIGRyb3AgaXQgKi8KLQotCQlyZXR1cm4gOwotCX0KLQotCXN3aXRjaCAobWFjLT5zdGF0dXMgJiBBUjkxNzBfUlhfU1RBVFVTX01QRFVfTUFTSykgewotCWNhc2UgQVI5MTcwX1JYX1NUQVRVU19NUERVX0ZJUlNUOgotCQkvKiBmaXJzdCBtcGR1IHBhY2tldCBoYXMgdGhlIHBsY3AgaGVhZGVyICovCi0JCWlmIChsaWtlbHkobXBkdV9sZW4gPj0gc2l6ZW9mKHN0cnVjdCBhcjkxNzBfcnhfaGVhZCkpKSB7Ci0JCQloZWFkID0gKHZvaWQgKikgYnVmOwotCQkJbWVtY3B5KCZhci0+cnhfbXBkdS5wbGNwLCAodm9pZCAqKSBidWYsCi0JCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBhcjkxNzBfcnhfaGVhZCkpOwotCi0JCQltcGR1X2xlbiAtPSBzaXplb2Yoc3RydWN0IGFyOTE3MF9yeF9oZWFkKTsKLQkJCWJ1ZiArPSBzaXplb2Yoc3RydWN0IGFyOTE3MF9yeF9oZWFkKTsKLQkJCWFyLT5yeF9tcGR1Lmhhc19wbGNwID0gdHJ1ZTsKLQkJfSBlbHNlIHsKLQkJCWlmIChhcjkxNzBfbmFnX2xpbWl0ZXIoYXIpKQotCQkJCXdpcGh5X2Vycihhci0+aHctPndpcGh5LAotCQkJCQkgICJwbGNwIGluZm8gaXMgY2xpcHBlZC5cbiIpOwotCQkJcmV0dXJuIDsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgQVI5MTcwX1JYX1NUQVRVU19NUERVX0xBU1Q6Ci0JCS8qIGxhc3QgbXBkdSBoYXMgYSBleHRyYSB0YWlsIHdpdGggcGh5IHN0YXR1cyBpbmZvcm1hdGlvbiAqLwotCi0JCWlmIChsaWtlbHkobXBkdV9sZW4gPj0gc2l6ZW9mKHN0cnVjdCBhcjkxNzBfcnhfcGh5c3RhdHVzKSkpIHsKLQkJCW1wZHVfbGVuIC09IHNpemVvZihzdHJ1Y3QgYXI5MTcwX3J4X3BoeXN0YXR1cyk7Ci0JCQlwaHkgPSAodm9pZCAqKShidWYgKyBtcGR1X2xlbik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoYXI5MTcwX25hZ19saW1pdGVyKGFyKSkKLQkJCQl3aXBoeV9lcnIoYXItPmh3LT53aXBoeSwKLQkJCQkJICAiZnJhbWUgdGFpbCBpcyBjbGlwcGVkLlxuIik7Ci0JCQlyZXR1cm4gOwotCQl9Ci0KLQljYXNlIEFSOTE3MF9SWF9TVEFUVVNfTVBEVV9NSURETEU6Ci0JCS8qIG1pZGRsZSBtcGR1cyBhcmUganVzdCBkYXRhICovCi0JCWlmICh1bmxpa2VseSghYXItPnJ4X21wZHUuaGFzX3BsY3ApKSB7Ci0JCQlpZiAoIWFyOTE3MF9uYWdfbGltaXRlcihhcikpCi0JCQkJcmV0dXJuIDsKLQotCQkJd2lwaHlfZXJyKGFyLT5ody0+d2lwaHksCi0JCQkJICAicnggc3RyZWFtIGRpZCBub3Qgc3RhcnQgd2l0aCBhIGZpcnN0X21wZHUgZnJhbWUgdGFnLlxuIik7Ci0KLQkJCXJldHVybiA7Ci0JCX0KLQotCQloZWFkID0gJmFyLT5yeF9tcGR1LnBsY3A7Ci0JCWJyZWFrOwotCi0JY2FzZSBBUjkxNzBfUlhfU1RBVFVTX01QRFVfU0lOR0xFOgotCQkvKiBzaW5nbGUgbXBkdSAtIGhhcyBwbGNwIChoZWFkKSBhbmQgcGh5IHN0YXR1cyAodGFpbCkgKi8KLQkJaGVhZCA9ICh2b2lkICopIGJ1ZjsKLQotCQltcGR1X2xlbiAtPSBzaXplb2Yoc3RydWN0IGFyOTE3MF9yeF9oZWFkKTsKLQkJbXBkdV9sZW4gLT0gc2l6ZW9mKHN0cnVjdCBhcjkxNzBfcnhfcGh5c3RhdHVzKTsKLQotCQlidWYgKz0gc2l6ZW9mKHN0cnVjdCBhcjkxNzBfcnhfaGVhZCk7Ci0JCXBoeSA9ICh2b2lkICopKGJ1ZiArIG1wZHVfbGVuKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlCVUdfT04oMSk7Ci0JCWJyZWFrOwotCX0KLQotCWlmICh1bmxpa2VseShtcGR1X2xlbiA8IEZDU19MRU4pKQotCQlyZXR1cm4gOwotCi0JbWVtc2V0KCZzdGF0dXMsIDAsIHNpemVvZihzdGF0dXMpKTsKLQlpZiAodW5saWtlbHkoYXI5MTcwX3J4X21hY19zdGF0dXMoYXIsIGhlYWQsIG1hYywgJnN0YXR1cykpKQotCQlyZXR1cm4gOwotCi0JaWYgKHBoeSkKLQkJYXI5MTcwX3J4X3BoeV9zdGF0dXMoYXIsIHBoeSwgJnN0YXR1cyk7Ci0KLQlza2IgPSBhcjkxNzBfcnhfY29weV9kYXRhKGJ1ZiwgbXBkdV9sZW4pOwotCWlmIChsaWtlbHkoc2tiKSkgewotCQltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksICZzdGF0dXMsIHNpemVvZihzdGF0dXMpKTsKLQkJaWVlZTgwMjExX3J4X2lycXNhZmUoYXItPmh3LCBza2IpOwotCX0KLX0KLQotdm9pZCBhcjkxNzBfcngoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JdW5zaWduZWQgaW50IGksIHRsZW4sIHJlc3BsZW4sIHdsZW4gPSAwLCBjbGVuID0gMDsKLQl1OCAqdGJ1ZiwgKnJlc3BidWY7Ci0KLQl0YnVmID0gc2tiLT5kYXRhOwotCXRsZW4gPSBza2ItPmxlbjsKLQotCXdoaWxlICh0bGVuID49IDQpIHsKLQkJY2xlbiA9IHRidWZbMV0gPDwgOCB8IHRidWZbMF07Ci0JCXdsZW4gPSBBTElHTihjbGVuLCA0KTsKLQotCQkvKiBjaGVjayBpZiB0aGlzIGlzIHN0cmVhbSBoYXMgYSB2YWxpZCB0YWcuKi8KLQkJaWYgKHRidWZbMl0gIT0gMCB8fCB0YnVmWzNdICE9IDB4NGUpIHsKLQkJCS8qCi0JCQkgKiBUT0RPOiBoYW5kbGUgdGhlIGhpZ2hseSB1bmxpa2VseSBldmVudCB0aGF0IHRoZQotCQkJICogY29ycnVwdGVkIHN0cmVhbSBoYXMgdGhlIFRBRyBhdCB0aGUgcmlnaHQgcG9zaXRpb24uCi0JCQkgKi8KLQotCQkJLyogY2hlY2sgaWYgdGhlIGZyYW1lIGNhbiBiZSByZXBhaXJlZC4gKi8KLQkJCWlmICghYXItPnJ4X2ZhaWxvdmVyX21pc3NpbmcpIHsKLQkJCQkvKiB0aGlzIGlzIG5vICJzaG9ydCByZWFkIi4gKi8KLQkJCQlpZiAoYXI5MTcwX25hZ19saW1pdGVyKGFyKSkgewotCQkJCQl3aXBoeV9lcnIoYXItPmh3LT53aXBoeSwKLQkJCQkJCSAgIm1pc3NpbmcgdGFnIVxuIik7Ci0JCQkJCWdvdG8gZXJyX3RlbGx1c2VyOwotCQkJCX0gZWxzZQotCQkJCQlnb3RvIGVycl9zaWxlbnQ7Ci0JCQl9Ci0KLQkJCWlmIChhci0+cnhfZmFpbG92ZXJfbWlzc2luZyA+IHRsZW4pIHsKLQkJCQlpZiAoYXI5MTcwX25hZ19saW1pdGVyKGFyKSkgewotCQkJCQl3aXBoeV9lcnIoYXItPmh3LT53aXBoeSwKLQkJCQkJCSAgInBvc3NpYmxlIG11bHRpIHN0cmVhbSBjb3JydXB0aW9uIVxuIik7Ci0JCQkJCWdvdG8gZXJyX3RlbGx1c2VyOwotCQkJCX0gZWxzZQotCQkJCQlnb3RvIGVycl9zaWxlbnQ7Ci0JCQl9Ci0KLQkJCW1lbWNweShza2JfcHV0KGFyLT5yeF9mYWlsb3ZlciwgdGxlbiksIHRidWYsIHRsZW4pOwotCQkJYXItPnJ4X2ZhaWxvdmVyX21pc3NpbmcgLT0gdGxlbjsKLQotCQkJaWYgKGFyLT5yeF9mYWlsb3Zlcl9taXNzaW5nIDw9IDApIHsKLQkJCQkvKgotCQkJCSAqIG5lc3RlZCBhcjkxNzBfcnggY2FsbCEKLQkJCQkgKiB0ZXJtaW5hdGlvbiBpcyBndWFyYW50ZWVkLCBldmVuIHdoZW4gdGhlCi0JCQkJICogY29tYmluZWQgZnJhbWUgYWxzbyBoYXZlIGEgZWxlbWVudCB3aXRoCi0JCQkJICogYSBiYWQgdGFnLgotCQkJCSAqLwotCi0JCQkJYXItPnJ4X2ZhaWxvdmVyX21pc3NpbmcgPSAwOwotCQkJCWFyOTE3MF9yeChhciwgYXItPnJ4X2ZhaWxvdmVyKTsKLQotCQkJCXNrYl9yZXNldF90YWlsX3BvaW50ZXIoYXItPnJ4X2ZhaWxvdmVyKTsKLQkJCQlza2JfdHJpbShhci0+cnhfZmFpbG92ZXIsIDApOwotCQkJfQotCi0JCQlyZXR1cm4gOwotCQl9Ci0KLQkJLyogY2hlY2sgaWYgc3RyZWFtIGlzIGNsaXBwZWQgKi8KLQkJaWYgKHdsZW4gPiB0bGVuIC0gNCkgewotCQkJaWYgKGFyLT5yeF9mYWlsb3Zlcl9taXNzaW5nKSB7Ci0JCQkJLyogVE9ETzogaGFuZGxlIGRvdWJsZSBzdHJlYW0gY29ycnVwdGlvbi4gKi8KLQkJCQlpZiAoYXI5MTcwX25hZ19saW1pdGVyKGFyKSkgewotCQkJCQl3aXBoeV9lcnIoYXItPmh3LT53aXBoeSwKLQkJCQkJCSAgImRvdWJsZSByeCBzdHJlYW0gY29ycnVwdGlvbiFcbiIpOwotCQkJCQlnb3RvIGVycl90ZWxsdXNlcjsKLQkJCQl9IGVsc2UKLQkJCQkJZ290byBlcnJfc2lsZW50OwotCQkJfQotCi0JCQkvKgotCQkJICogc2F2ZSBpbmNvbXBsZXRlIGRhdGEgc2V0LgotCQkJICogdGhlIGZpcm13YXJlIHdpbGwgcmVzZW5kIHRoZSBtaXNzaW5nIGJpdHMgd2hlbgotCQkJICogdGhlIHJ4IC0gZGVzY3JpcHRvciBjb21lcyByb3VuZCBhZ2Fpbi4KLQkJCSAqLwotCi0JCQltZW1jcHkoc2tiX3B1dChhci0+cnhfZmFpbG92ZXIsIHRsZW4pLCB0YnVmLCB0bGVuKTsKLQkJCWFyLT5yeF9mYWlsb3Zlcl9taXNzaW5nID0gY2xlbiAtIHRsZW47Ci0JCQlyZXR1cm4gOwotCQl9Ci0JCXJlc3BsZW4gPSBjbGVuOwotCQlyZXNwYnVmID0gdGJ1ZiArIDQ7Ci0JCXRidWYgKz0gd2xlbiArIDQ7Ci0JCXRsZW4gLT0gd2xlbiArIDQ7Ci0KLQkJaSA9IDA7Ci0KLQkJLyogd2VpcmQgdGhpbmcsIGJ1dCB0aGlzIGlzIHRoZSBzYW1lIGluIHRoZSBvcmlnaW5hbCBkcml2ZXIgKi8KLQkJd2hpbGUgKHJlc3BsZW4gPiAyICYmIGkgPCAxMiAmJgotCQkgICAgICAgcmVzcGJ1ZlswXSA9PSAweGZmICYmIHJlc3BidWZbMV0gPT0gMHhmZikgewotCQkJaSArPSAyOwotCQkJcmVzcGxlbiAtPSAyOwotCQkJcmVzcGJ1ZiArPSAyOwotCQl9Ci0KLQkJaWYgKHJlc3BsZW4gPCA0KQotCQkJY29udGludWU7Ci0KLQkJLyogZm91bmQgdGhlIDYgKiAweGZmZmYgbWFya2VyPyAqLwotCQlpZiAoaSA9PSAxMikKLQkJCWFyOTE3MF9oYW5kbGVfY29tbWFuZF9yZXNwb25zZShhciwgcmVzcGJ1ZiwgcmVzcGxlbik7Ci0JCWVsc2UKLQkJCWFyOTE3MF9oYW5kbGVfbXBkdShhciwgcmVzcGJ1ZiwgY2xlbik7Ci0JfQotCi0JaWYgKHRsZW4pIHsKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXdpcGh5X2Vycihhci0+aHctPndpcGh5LAotCQkJCSAgIiVkIGJ5dGVzIG9mIHVucHJvY2Vzc2VkIGRhdGEgbGVmdCBpbiByeCBzdHJlYW0hXG4iLAotCQkJCSAgdGxlbik7Ci0KLQkJZ290byBlcnJfdGVsbHVzZXI7Ci0JfQotCi0JcmV0dXJuIDsKLQotZXJyX3RlbGx1c2VyOgotCXdpcGh5X2Vycihhci0+aHctPndpcGh5LAotCQkgICJkYW1hZ2VkIFJYIHN0cmVhbSBkYXRhIFt3YW50OiVkLCBkYXRhOiVkLCByeDolZCwgcGVuZGluZzolZCBdXG4iLAotCQkgIGNsZW4sIHdsZW4sIHRsZW4sIGFyLT5yeF9mYWlsb3Zlcl9taXNzaW5nKTsKLQotCWlmIChhci0+cnhfZmFpbG92ZXJfbWlzc2luZykKLQkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoInJ4YnVmOiIsIERVTVBfUFJFRklYX09GRlNFVCwKLQkJCQkgICAgIGFyLT5yeF9mYWlsb3Zlci0+ZGF0YSwKLQkJCQkgICAgIGFyLT5yeF9mYWlsb3Zlci0+bGVuKTsKLQotCXByaW50X2hleF9kdW1wX2J5dGVzKCJzdHJlYW06IiwgRFVNUF9QUkVGSVhfT0ZGU0VULAotCQkJICAgICBza2ItPmRhdGEsIHNrYi0+bGVuKTsKLQotCXdpcGh5X2Vycihhci0+aHctPndpcGh5LAotCQkgICJJZiB5b3Ugc2VlIHRoaXMgbWVzc2FnZSBmcmVxdWVudGx5LCBwbGVhc2UgY2hlY2sgeW91ciBoYXJkd2FyZSBhbmQgY2FibGVzLlxuIik7Ci0KLWVycl9zaWxlbnQ6Ci0JaWYgKGFyLT5yeF9mYWlsb3Zlcl9taXNzaW5nKSB7Ci0JCXNrYl9yZXNldF90YWlsX3BvaW50ZXIoYXItPnJ4X2ZhaWxvdmVyKTsKLQkJc2tiX3RyaW0oYXItPnJ4X2ZhaWxvdmVyLCAwKTsKLQkJYXItPnJ4X2ZhaWxvdmVyX21pc3NpbmcgPSAwOwotCX0KLX0KLQotI2RlZmluZSBBUjkxNzBfRklMTF9RVUVVRShxdWV1ZSwgYWlfZnMsIGN3bWluLCBjd21heCwgX3R4b3ApCQlcCi1kbyB7CQkJCQkJCQkJXAotCXF1ZXVlLmFpZnMgPSBhaV9mczsJCQkJCQlcCi0JcXVldWUuY3dfbWluID0gY3dtaW47CQkJCQkJXAotCXF1ZXVlLmN3X21heCA9IGN3bWF4OwkJCQkJCVwKLQlxdWV1ZS50eG9wID0gX3R4b3A7CQkJCQkJXAotfSB3aGlsZSAoMCkKLQotc3RhdGljIGludCBhcjkxNzBfb3Bfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci0Jc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKLQlpbnQgZXJyLCBpOwotCi0JbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKLQotCS8qIHJlaW5pdGlhbGl6ZSBxdWV1ZXMgc3RhdGlzdGljcyAqLwotCW1lbXNldCgmYXItPnR4X3N0YXRzLCAwLCBzaXplb2YoYXItPnR4X3N0YXRzKSk7Ci0JZm9yIChpID0gMDsgaSA8IF9fQVI5MTcwX05VTV9UWFE7IGkrKykKLQkJYXItPnR4X3N0YXRzW2ldLmxpbWl0ID0gQVI5MTcwX1RYUV9ERVBUSDsKLQotCS8qIHJlc2V0IFFvUyBkZWZhdWx0cyAqLwotCUFSOTE3MF9GSUxMX1FVRVVFKGFyLT5lZGNmWzBdLCAzLCAxNSwgMTAyMywgIDApOyAvKiBCRVNUIEVGRk9SVCovCi0JQVI5MTcwX0ZJTExfUVVFVUUoYXItPmVkY2ZbMV0sIDcsIDE1LCAxMDIzLCAgMCk7IC8qIEJBQ0tHUk9VTkQgKi8KLQlBUjkxNzBfRklMTF9RVUVVRShhci0+ZWRjZlsyXSwgMiwgNywgICAgMTUsIDk0KTsgLyogVklERU8gKi8KLQlBUjkxNzBfRklMTF9RVUVVRShhci0+ZWRjZlszXSwgMiwgMywgICAgIDcsIDQ3KTsgLyogVk9JQ0UgKi8KLQlBUjkxNzBfRklMTF9RVUVVRShhci0+ZWRjZls0XSwgMiwgMywgICAgIDcsICAwKTsgLyogU1BFQ0lBTCAqLwotCi0JLyogc2V0IHNhbmUgQU1QRFUgZGVmYXVsdHMgKi8KLQlhci0+Z2xvYmFsX2FtcGR1X2RlbnNpdHkgPSA2OwotCWFyLT5nbG9iYWxfYW1wZHVfZmFjdG9yID0gMzsKLQotCWFyLT5iYWRfaHdfbmFnZ2VyID0gamlmZmllczsKLQotCWVyciA9IGFyLT5vcGVuKGFyKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCWVyciA9IGFyOTE3MF9pbml0X21hYyhhcik7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSBhcjkxNzBfc2V0X3Fvcyhhcik7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSBhcjkxNzBfaW5pdF9waHkoYXIsIElFRUU4MDIxMV9CQU5EXzJHSFopOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gYXI5MTcwX2luaXRfcmYoYXIpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JLyogc3RhcnQgRE1BICovCi0JZXJyID0gYXI5MTcwX3dyaXRlX3JlZyhhciwgMHgxYzNkMzAsIDB4MTAwKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCWFyLT5zdGF0ZSA9IEFSOTE3MF9TVEFSVEVEOwotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIGFyOTE3MF9vcF9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlpZiAoSVNfU1RBUlRFRChhcikpCi0JCWFyLT5zdGF0ZSA9IEFSOTE3MF9JRExFOwotCi0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhci0+dHhfamFuaXRvcik7Ci0jaWZkZWYgQ09ORklHX0FSOTE3MF9MRURTCi0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhci0+bGVkX3dvcmspOwotI2VuZGlmCi0JY2FuY2VsX3dvcmtfc3luYygmYXItPmJlYWNvbl93b3JrKTsKLQotCW11dGV4X2xvY2soJmFyLT5tdXRleCk7Ci0KLQlpZiAoSVNfQUNDRVBUSU5HX0NNRChhcikpIHsKLQkJYXI5MTcwX3NldF9sZWRzX3N0YXRlKGFyLCAwKTsKLQotCQkvKiBzdG9wIERNQSAqLwotCQlhcjkxNzBfd3JpdGVfcmVnKGFyLCAweDFjM2QzMCwgMCk7Ci0JCWFyLT5zdG9wKGFyKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgX19BUjkxNzBfTlVNX1RYUTsgaSsrKSB7Ci0JCXNrYl9xdWV1ZV9wdXJnZSgmYXItPnR4X3BlbmRpbmdbaV0pOwotCQlza2JfcXVldWVfcHVyZ2UoJmFyLT50eF9zdGF0dXNbaV0pOwotCX0KLQotCW11dGV4X3VubG9jaygmYXItPm11dGV4KTsKLX0KLQotc3RhdGljIGludCBhcjkxNzBfdHhfcHJlcGFyZShzdHJ1Y3QgYXI5MTcwICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwotCXN0cnVjdCBhcjkxNzBfdHhfY29udHJvbCAqdHhjOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnR4cmF0ZTsKLQlzdHJ1Y3QgYXI5MTcwX3R4X2luZm8gKmFyaW5mbzsKLQl1bnNpZ25lZCBpbnQgcXVldWUgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKLQl1MTYga2V5dHlwZSA9IDA7Ci0JdTE2IGxlbiwgaWN2ID0gMDsKLQotCUJVSUxEX0JVR19PTihzaXplb2YoKmFyaW5mbykgPiBzaXplb2YoaW5mby0+cmF0ZV9kcml2ZXJfZGF0YSkpOwotCi0JaGRyID0gKHZvaWQgKilza2ItPmRhdGE7Ci0JaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlsZW4gPSBza2ItPmxlbjsKLQotCXR4YyA9ICh2b2lkICopc2tiX3B1c2goc2tiLCBzaXplb2YoKnR4YykpOwotCi0JaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5KSB7Ci0JCWljdiA9IGluZm8tPmNvbnRyb2wuaHdfa2V5LT5pY3ZfbGVuOwotCi0JCXN3aXRjaCAoaW5mby0+Y29udHJvbC5od19rZXktPmNpcGhlcikgewotCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwOgotCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDoKLQkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9US0lQOgotCQkJa2V5dHlwZSA9IEFSOTE3MF9UWF9NQUNfRU5DUl9SQzQ7Ci0JCQlicmVhazsKLQkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOgotCQkJa2V5dHlwZSA9IEFSOTE3MF9UWF9NQUNfRU5DUl9BRVM7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCVdBUk5fT04oMSk7Ci0JCQlnb3RvIGVycl9vdXQ7Ci0JCX0KLQl9Ci0KLQkvKiBMZW5ndGggKi8KLQl0eGMtPmxlbmd0aCA9IGNwdV90b19sZTE2KGxlbiArIGljdiArIDQpOwotCi0JdHhjLT5tYWNfY29udHJvbCA9IGNwdV90b19sZTE2KEFSOTE3MF9UWF9NQUNfSFdfRFVSQVRJT04gfAotCQkJCSAgICAgICBBUjkxNzBfVFhfTUFDX0JBQ0tPRkYpOwotCXR4Yy0+bWFjX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoYXI5MTcwX3Fvc19od21hcFtxdWV1ZV0gPDwKLQkJCQkJQVI5MTcwX1RYX01BQ19RT1NfU0hJRlQpOwotCXR4Yy0+bWFjX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoa2V5dHlwZSk7Ci0JdHhjLT5waHlfY29udHJvbCA9IGNwdV90b19sZTMyKDApOwotCi0JaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spCi0JCXR4Yy0+bWFjX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoQVI5MTcwX1RYX01BQ19OT19BQ0spOwotCi0JdHhyYXRlID0gJmluZm8tPmNvbnRyb2wucmF0ZXNbMF07Ci0JaWYgKHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUKQotCQl0eGMtPm1hY19jb250cm9sIHw9IGNwdV90b19sZTE2KEFSOTE3MF9UWF9NQUNfUFJPVF9DVFMpOwotCWVsc2UgaWYgKHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMpCi0JCXR4Yy0+bWFjX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoQVI5MTcwX1RYX01BQ19QUk9UX1JUUyk7Ci0KLQlhcmluZm8gPSAodm9pZCAqKWluZm8tPnJhdGVfZHJpdmVyX2RhdGE7Ci0JYXJpbmZvLT50aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoQVI5MTcwX1FVRVVFX1RJTUVPVVQpOwotCi0JaWYgKCEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykgJiYKLQkgICAgIChpc192YWxpZF9ldGhlcl9hZGRyKGllZWU4MDIxMV9nZXRfREEoaGRyKSkpKSB7Ci0JCS8qCi0JCSAqIFdBUk5JTkc6Ci0JCSAqIFB1dHRpbmcgdGhlIFFvUyBxdWV1ZSBiaXRzIGludG8gYW4gdW5leHBsb3JlZCB0ZXJyaXRvcnkgaXMKLQkJICogY2VydGFpbmx5IG5vdCBlbGVnYW50LgotCQkgKgotCQkgKiBJbiBteSBkZWZlbnNlOiBUaGlzIGlkZWEgcHJvdmlkZXMgYSByZWFzb25hYmxlIHdheSB0bwotCQkgKiBzbXVnZ2xlIHZhbHVhYmxlIGluZm9ybWF0aW9uIHRvIHRoZSB0eF9zdGF0dXMgY2FsbGJhY2suCi0JCSAqIEFsc28sIHRoZSBpZGVhIGJlaGluZCB0aGlzIGJpdC1hYnVzZSBjYW1lIHN0cmFpZ2h0IGZyb20KLQkJICogdGhlIG9yaWdpbmFsIGRyaXZlciBjb2RlLgotCQkgKi8KLQotCQl0eGMtPnBoeV9jb250cm9sIHw9Ci0JCQljcHVfdG9fbGUzMihxdWV1ZSA8PCBBUjkxNzBfVFhfUEhZX1FPU19TSElGVCk7Ci0KLQkJdHhjLT5tYWNfY29udHJvbCB8PSBjcHVfdG9fbGUxNihBUjkxNzBfVFhfTUFDX1JBVEVfUFJPQkUpOwotCX0KLQotCXJldHVybiAwOwotCi1lcnJfb3V0OgotCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCp0eGMpKTsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIHZvaWQgYXI5MTcwX3R4X3ByZXBhcmVfcGh5KHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBhcjkxNzBfdHhfY29udHJvbCAqdHhjOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUgPSBOVUxMOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqdHhyYXRlOwotCXUzMiBwb3dlciwgY2hhaW5zOwotCi0JdHhjID0gKHZvaWQgKikgc2tiLT5kYXRhOwotCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0JdHhyYXRlID0gJmluZm8tPmNvbnRyb2wucmF0ZXNbMF07Ci0KLQlpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19HUkVFTl9GSUVMRCkKLQkJdHhjLT5waHlfY29udHJvbCB8PSBjcHVfdG9fbGUzMihBUjkxNzBfVFhfUEhZX0dSRUVORklFTEQpOwotCi0JaWYgKHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFKQotCQl0eGMtPnBoeV9jb250cm9sIHw9IGNwdV90b19sZTMyKEFSOTE3MF9UWF9QSFlfU0hPUlRfUFJFQU1CTEUpOwotCi0JaWYgKHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIKQotCQl0eGMtPnBoeV9jb250cm9sIHw9IGNwdV90b19sZTMyKEFSOTE3MF9UWF9QSFlfQldfNDBNSFopOwotCS8qIHRoaXMgd29ya3MgYmVjYXVzZSA0MCBNSHogaXMgMiBhbmQgZHVwIGlzIDMgKi8KLQlpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19EVVBfREFUQSkKLQkJdHhjLT5waHlfY29udHJvbCB8PSBjcHVfdG9fbGUzMihBUjkxNzBfVFhfUEhZX0JXXzQwTUhaX0RVUCk7Ci0KLQlpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSkKLQkJdHhjLT5waHlfY29udHJvbCB8PSBjcHVfdG9fbGUzMihBUjkxNzBfVFhfUEhZX1NIT1JUX0dJKTsKLQotCWlmICh0eHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX01DUykgewotCQl1MzIgciA9IHR4cmF0ZS0+aWR4OwotCQl1OCAqdHhwb3dlcjsKLQotCQkvKiBoZWF2eSBjbGlwIGNvbnRyb2wgKi8KLQkJdHhjLT5waHlfY29udHJvbCB8PSBjcHVfdG9fbGUzMigociAmIDB4NykgPDwgNyk7Ci0KLQkJciA8PD0gQVI5MTcwX1RYX1BIWV9NQ1NfU0hJRlQ7Ci0JCUJVR19PTihyICYgfkFSOTE3MF9UWF9QSFlfTUNTX01BU0spOwotCi0JCXR4Yy0+cGh5X2NvbnRyb2wgfD0gY3B1X3RvX2xlMzIociAmIEFSOTE3MF9UWF9QSFlfTUNTX01BU0spOwotCQl0eGMtPnBoeV9jb250cm9sIHw9IGNwdV90b19sZTMyKEFSOTE3MF9UWF9QSFlfTU9EX0hUKTsKLQotCQlpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEgpIHsKLQkJCWlmIChpbmZvLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCi0JCQkJdHhwb3dlciA9IGFyLT5wb3dlcl81R19odDQwOwotCQkJZWxzZQotCQkJCXR4cG93ZXIgPSBhci0+cG93ZXJfMkdfaHQ0MDsKLQkJfSBlbHNlIHsKLQkJCWlmIChpbmZvLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCi0JCQkJdHhwb3dlciA9IGFyLT5wb3dlcl81R19odDIwOwotCQkJZWxzZQotCQkJCXR4cG93ZXIgPSBhci0+cG93ZXJfMkdfaHQyMDsKLQkJfQotCi0JCXBvd2VyID0gdHhwb3dlclsodHhyYXRlLT5pZHgpICYgN107Ci0JfSBlbHNlIHsKLQkJdTggKnR4cG93ZXI7Ci0JCXUzMiBtb2Q7Ci0JCXUzMiBwaHlyYXRlOwotCQl1OCBpZHggPSB0eHJhdGUtPmlkeDsKLQotCQlpZiAoaW5mby0+YmFuZCAhPSBJRUVFODAyMTFfQkFORF8yR0haKSB7Ci0JCQlpZHggKz0gNDsKLQkJCXR4cG93ZXIgPSBhci0+cG93ZXJfNUdfbGVnOwotCQkJbW9kID0gQVI5MTcwX1RYX1BIWV9NT0RfT0ZETTsKLQkJfSBlbHNlIHsKLQkJCWlmIChpZHggPCA0KSB7Ci0JCQkJdHhwb3dlciA9IGFyLT5wb3dlcl8yR19jY2s7Ci0JCQkJbW9kID0gQVI5MTcwX1RYX1BIWV9NT0RfQ0NLOwotCQkJfSBlbHNlIHsKLQkJCQltb2QgPSBBUjkxNzBfVFhfUEhZX01PRF9PRkRNOwotCQkJCXR4cG93ZXIgPSBhci0+cG93ZXJfMkdfb2ZkbTsKLQkJCX0KLQkJfQotCi0JCXJhdGUgPSAmX19hcjkxNzBfcmF0ZXRhYmxlW2lkeF07Ci0KLQkJcGh5cmF0ZSA9IHJhdGUtPmh3X3ZhbHVlICYgMHhGOwotCQlwb3dlciA9IHR4cG93ZXJbKHJhdGUtPmh3X3ZhbHVlICYgMHgzMCkgPj4gNF07Ci0JCXBoeXJhdGUgPDw9IEFSOTE3MF9UWF9QSFlfTUNTX1NISUZUOwotCi0JCXR4Yy0+cGh5X2NvbnRyb2wgfD0gY3B1X3RvX2xlMzIobW9kKTsKLQkJdHhjLT5waHlfY29udHJvbCB8PSBjcHVfdG9fbGUzMihwaHlyYXRlKTsKLQl9Ci0KLQlwb3dlciA8PD0gQVI5MTcwX1RYX1BIWV9UWF9QV1JfU0hJRlQ7Ci0JcG93ZXIgJj0gQVI5MTcwX1RYX1BIWV9UWF9QV1JfTUFTSzsKLQl0eGMtPnBoeV9jb250cm9sIHw9IGNwdV90b19sZTMyKHBvd2VyKTsKLQotCS8qIHNldCBUWCBjaGFpbnMgKi8KLQlpZiAoYXItPmVlcHJvbS50eF9tYXNrID09IDEpIHsKLQkJY2hhaW5zID0gQVI5MTcwX1RYX1BIWV9UWENIQUlOXzE7Ci0JfSBlbHNlIHsKLQkJY2hhaW5zID0gQVI5MTcwX1RYX1BIWV9UWENIQUlOXzI7Ci0KLQkJLyogPj0gMzZNIGxlZ2FjeSBPRkRNIC0gdXNlIG9ubHkgb25lIGNoYWluICovCi0JCWlmIChyYXRlICYmIHJhdGUtPmJpdHJhdGUgPj0gMzYwKQotCQkJY2hhaW5zID0gQVI5MTcwX1RYX1BIWV9UWENIQUlOXzE7Ci0JfQotCXR4Yy0+cGh5X2NvbnRyb2wgfD0gY3B1X3RvX2xlMzIoY2hhaW5zIDw8IEFSOTE3MF9UWF9QSFlfVFhDSEFJTl9TSElGVCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFyOTE3MF90eChzdHJ1Y3QgYXI5MTcwICphcikKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwotCXN0cnVjdCBhcjkxNzBfdHhfaW5mbyAqYXJpbmZvOwotCXVuc2lnbmVkIGludCBpLCBmcmFtZXMsIGZyYW1lc19mYWlsZWQsIHJlbWFpbmluZ19zcGFjZTsKLQlpbnQgZXJyOwotCWJvb2wgc2NoZWR1bGVfZ2FyYmFnZWNvbGxlY3RvciA9IGZhbHNlOwotCi0JQlVJTERfQlVHX09OKHNpemVvZigqYXJpbmZvKSA+IHNpemVvZihpbmZvLT5yYXRlX2RyaXZlcl9kYXRhKSk7Ci0KLQlpZiAodW5saWtlbHkoIUlTX1NUQVJURUQoYXIpKSkKLQkJcmV0dXJuIDsKLQotCXJlbWFpbmluZ19zcGFjZSA9IEFSOTE3MF9UWF9NQVhfUEVORElORzsKLQotCWZvciAoaSA9IDA7IGkgPCBfX0FSOTE3MF9OVU1fVFhROyBpKyspIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFyLT50eF9zdGF0c19sb2NrLCBmbGFncyk7Ci0JCWZyYW1lcyA9IG1pbihhci0+dHhfc3RhdHNbaV0ubGltaXQgLSBhci0+dHhfc3RhdHNbaV0ubGVuLAotCQkJICAgICBza2JfcXVldWVfbGVuKCZhci0+dHhfcGVuZGluZ1tpXSkpOwotCi0JCWlmIChyZW1haW5pbmdfc3BhY2UgPCBmcmFtZXMpIHsKLSNpZmRlZiBBUjkxNzBfUVVFVUVfREVCVUcKLQkJCXdpcGh5X2RlYnVnKGFyLT5ody0+d2lwaHksCi0JCQkJICAgICJ0eCBxdW90YSByZWFjaGVkIHF1ZXVlOiVkLCAiCi0JCQkJICAgICJyZW1haW5pbmcgc2xvdHM6JWQsIG5lZWRlZDolZFxuIiwKLQkJCQkgICAgaSwgcmVtYWluaW5nX3NwYWNlLCBmcmFtZXMpOwotI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9ERUJVRyAqLwotCQkJZnJhbWVzID0gcmVtYWluaW5nX3NwYWNlOwotCQl9Ci0KLQkJYXItPnR4X3N0YXRzW2ldLmxlbiArPSBmcmFtZXM7Ci0JCWFyLT50eF9zdGF0c1tpXS5jb3VudCArPSBmcmFtZXM7Ci0JCWlmIChhci0+dHhfc3RhdHNbaV0ubGVuID49IGFyLT50eF9zdGF0c1tpXS5saW1pdCkgewotI2lmZGVmIEFSOTE3MF9RVUVVRV9ERUJVRwotCQkJd2lwaHlfZGVidWcoYXItPmh3LT53aXBoeSwgInF1ZXVlICVkIGZ1bGxcbiIsIGkpOwotCQkJd2lwaHlfZGVidWcoYXItPmh3LT53aXBoeSwgInN0dWNrIGZyYW1lczogPT09PlxuIik7Ci0JCQlhcjkxNzBfZHVtcF90eHF1ZXVlKGFyLCAmYXItPnR4X3BlbmRpbmdbaV0pOwotCQkJYXI5MTcwX2R1bXBfdHhxdWV1ZShhciwgJmFyLT50eF9zdGF0dXNbaV0pOwotI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9ERUJVRyAqLwotCi0jaWZkZWYgQVI5MTcwX1FVRVVFX1NUT1BfREVCVUcKLQkJCXdpcGh5X2RlYnVnKGFyLT5ody0+d2lwaHksICJzdG9wIHF1ZXVlICVkXG4iLCBpKTsKLQkJCV9fYXI5MTcwX2R1bXBfdHhzdGF0cyhhcik7Ci0jZW5kaWYgLyogQVI5MTcwX1FVRVVFX1NUT1BfREVCVUcgKi8KLQkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGFyLT5odywgaSk7Ci0JCX0KLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhci0+dHhfc3RhdHNfbG9jaywgZmxhZ3MpOwotCi0JCWlmICghZnJhbWVzKQotCQkJY29udGludWU7Ci0KLQkJZnJhbWVzX2ZhaWxlZCA9IDA7Ci0JCXdoaWxlIChmcmFtZXMpIHsKLQkJCXNrYiA9IHNrYl9kZXF1ZXVlKCZhci0+dHhfcGVuZGluZ1tpXSk7Ci0JCQlpZiAodW5saWtlbHkoIXNrYikpIHsKLQkJCQlmcmFtZXNfZmFpbGVkICs9IGZyYW1lczsKLQkJCQlmcmFtZXMgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCQkJYXJpbmZvID0gKHZvaWQgKikgaW5mby0+cmF0ZV9kcml2ZXJfZGF0YTsKLQotCQkJLyogVE9ETzogY2FuY2VsIHN0dWNrIGZyYW1lcyAqLwotCQkJYXJpbmZvLT50aW1lb3V0ID0gamlmZmllcyArCi0JCQkJCSAgbXNlY3NfdG9famlmZmllcyhBUjkxNzBfVFhfVElNRU9VVCk7Ci0KLSNpZmRlZiBBUjkxNzBfUVVFVUVfREVCVUcKLQkJCXdpcGh5X2RlYnVnKGFyLT5ody0+d2lwaHksICJzZW5kIGZyYW1lIHE6JWQgPT5cbiIsIGkpOwotCQkJYXI5MTcwX3ByaW50X3R4aGVhZGVyKGFyLCBza2IpOwotI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9ERUJVRyAqLwotCi0JCQllcnIgPSBhci0+dHgoYXIsIHNrYik7Ci0JCQlpZiAodW5saWtlbHkoZXJyKSkgewotCQkJCWZyYW1lc19mYWlsZWQrKzsKLQkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQkJfSBlbHNlIHsKLQkJCQlyZW1haW5pbmdfc3BhY2UtLTsKLQkJCQlzY2hlZHVsZV9nYXJiYWdlY29sbGVjdG9yID0gdHJ1ZTsKLQkJCX0KLQotCQkJZnJhbWVzLS07Ci0JCX0KLQotI2lmZGVmIEFSOTE3MF9RVUVVRV9ERUJVRwotCQl3aXBoeV9kZWJ1Zyhhci0+aHctPndpcGh5LAotCQkJICAgICJhcjkxNzBfdHggcmVwb3J0IGZvciBxdWV1ZSAlZFxuIiwgaSk7Ci0KLQkJd2lwaHlfZGVidWcoYXItPmh3LT53aXBoeSwKLQkJCSAgICAidW5wcm9jZXNzZWQgcGVuZGluZyBmcmFtZXMgbGVmdDpcbiIpOwotCQlhcjkxNzBfZHVtcF90eHF1ZXVlKGFyLCAmYXItPnR4X3BlbmRpbmdbaV0pOwotI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9ERUJVRyAqLwotCi0JCWlmICh1bmxpa2VseShmcmFtZXNfZmFpbGVkKSkgewotI2lmZGVmIEFSOTE3MF9RVUVVRV9ERUJVRwotCQkJd2lwaHlfZGVidWcoYXItPmh3LT53aXBoeSwKLQkJCQkgICAgImZyYW1lcyBmYWlsZWQgJWQgPT5cbiIsIGZyYW1lc19mYWlsZWQpOwotI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9ERUJVRyAqLwotCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXItPnR4X3N0YXRzX2xvY2ssIGZsYWdzKTsKLQkJCWFyLT50eF9zdGF0c1tpXS5sZW4gLT0gZnJhbWVzX2ZhaWxlZDsKLQkJCWFyLT50eF9zdGF0c1tpXS5jb3VudCAtPSBmcmFtZXNfZmFpbGVkOwotI2lmZGVmIEFSOTE3MF9RVUVVRV9TVE9QX0RFQlVHCi0JCQl3aXBoeV9kZWJ1Zyhhci0+aHctPndpcGh5LCAid2FrZSBxdWV1ZSAlZFxuIiwgaSk7Ci0JCQlfX2FyOTE3MF9kdW1wX3R4c3RhdHMoYXIpOwotI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9TVE9QX0RFQlVHICovCi0JCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShhci0+aHcsIGkpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXItPnR4X3N0YXRzX2xvY2ssIGZsYWdzKTsKLQkJfQotCX0KLQotCWlmICghc2NoZWR1bGVfZ2FyYmFnZWNvbGxlY3RvcikKLQkJcmV0dXJuOwotCi0JaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhhci0+aHcsCi0JCQkJICAgICAmYXItPnR4X2phbml0b3IsCi0JCQkJICAgICBtc2Vjc190b19qaWZmaWVzKEFSOTE3MF9KQU5JVE9SX0RFTEFZKSk7Ci19Ci0KLXZvaWQgYXI5MTcwX29wX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwotCXVuc2lnbmVkIGludCBxdWV1ZTsKLQotCWlmICh1bmxpa2VseSghSVNfU1RBUlRFRChhcikpKQotCQlnb3RvIGVycl9mcmVlOwotCi0JaWYgKHVubGlrZWx5KGFyOTE3MF90eF9wcmVwYXJlKGFyLCBza2IpKSkKLQkJZ290byBlcnJfZnJlZTsKLQotCXF1ZXVlID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7Ci0JaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlhcjkxNzBfdHhfcHJlcGFyZV9waHkoYXIsIHNrYik7Ci0Jc2tiX3F1ZXVlX3RhaWwoJmFyLT50eF9wZW5kaW5nW3F1ZXVlXSwgc2tiKTsKLQotCWFyOTE3MF90eChhcik7Ci0JcmV0dXJuOwotCi1lcnJfZnJlZToKLQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotfQotCi1zdGF0aWMgaW50IGFyOTE3MF9vcF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCi17Ci0Jc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKLQlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gJmFyLT5jb21tb247Ci0JaW50IGVyciA9IDA7Ci0KLQltdXRleF9sb2NrKCZhci0+bXV0ZXgpOwotCi0JaWYgKGFyLT52aWYpIHsKLQkJZXJyID0gLUVCVVNZOwotCQlnb3RvIHVubG9jazsKLQl9Ci0KLQlhci0+dmlmID0gdmlmOwotCW1lbWNweShjb21tb24tPm1hY2FkZHIsIHZpZi0+YWRkciwgRVRIX0FMRU4pOwotCi0JaWYgKG1vZHBhcmFtX25vaHdjcnlwdCB8fCAoYXItPnZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkgewotCQlhci0+cnhfc29mdHdhcmVfZGVjcnlwdGlvbiA9IHRydWU7Ci0JCWFyLT5kaXNhYmxlX29mZmxvYWQgPSB0cnVlOwotCX0KLQotCWFyLT5jdXJfZmlsdGVyID0gMDsKLQllcnIgPSBhcjkxNzBfdXBkYXRlX2ZyYW1lX2ZpbHRlcihhciwgQVI5MTcwX01BQ19SRUdfRlRGX0RFRkFVTFRTKTsKLQlpZiAoZXJyKQotCQlnb3RvIHVubG9jazsKLQotCWVyciA9IGFyOTE3MF9zZXRfb3BlcmF0aW5nX21vZGUoYXIpOwotCi11bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIGFyOTE3MF9vcF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQotewotCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7Ci0KLQltdXRleF9sb2NrKCZhci0+bXV0ZXgpOwotCWFyLT52aWYgPSBOVUxMOwotCWFyOTE3MF91cGRhdGVfZnJhbWVfZmlsdGVyKGFyLCAwKTsKLQlhcjkxNzBfc2V0X2JlYWNvbl90aW1lcnMoYXIpOwotCWRldl9rZnJlZV9za2IoYXItPmJlYWNvbik7Ci0JYXItPmJlYWNvbiA9IE5VTEw7Ci0JYXItPnNuaWZmZXJfZW5hYmxlZCA9IGZhbHNlOwotCWFyLT5yeF9zb2Z0d2FyZV9kZWNyeXB0aW9uID0gZmFsc2U7Ci0JYXI5MTcwX3NldF9vcGVyYXRpbmdfbW9kZShhcik7Ci0JbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOwotfQotCi1zdGF0aWMgaW50IGFyOTE3MF9vcF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQotewotCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7Ci0JaW50IGVyciA9IDA7Ci0KLQltdXRleF9sb2NrKCZhci0+bXV0ZXgpOwotCi0JaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfTElTVEVOX0lOVEVSVkFMKSB7Ci0JCS8qIFRPRE8gKi8KLQkJZXJyID0gMDsKLQl9Ci0KLQlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUykgewotCQkvKiBUT0RPICovCi0JCWVyciA9IDA7Ci0JfQotCi0JaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUE9XRVIpIHsKLQkJLyogVE9ETyAqLwotCQllcnIgPSAwOwotCX0KLQotCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JFVFJZX0xJTUlUUykgewotCQkvKgotCQkgKiBpcyBpdCBsb25nX2ZyYW1lX21heF90eF9jb3VudCBvciBzaG9ydF9mcmFtZV9tYXhfdHhfY291bnQ/Ci0JCSAqLwotCi0JCWVyciA9IGFyOTE3MF9zZXRfaHdyZXRyeV9saW1pdChhciwKLQkJCWFyLT5ody0+Y29uZi5sb25nX2ZyYW1lX21heF90eF9jb3VudCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMKSB7Ci0KLQkJLyogYWRqdXN0IHNsb3QgdGltZSBmb3IgNSBHSHogKi8KLQkJZXJyID0gYXI5MTcwX3NldF9zbG90X3RpbWUoYXIpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXQ7Ci0KLQkJZXJyID0gYXI5MTcwX3NldF9keW5fc2lmc19hY2soYXIpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXQ7Ci0KLQkJZXJyID0gYXI5MTcwX3NldF9jaGFubmVsKGFyLCBody0+Y29uZi5jaGFubmVsLAotCQkJCUFSOTE3MF9SRklfTk9ORSwKLQkJCQlubDgwMjExX3RvX2FyOTE3MChody0+Y29uZi5jaGFubmVsX3R5cGUpKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0OwotCX0KLQotb3V0OgotCW11dGV4X3VubG9jaygmYXItPm11dGV4KTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdTY0IGFyOTE3MF9vcF9wcmVwYXJlX211bHRpY2FzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jX2xpc3QpCi17Ci0JdTY0IG1jaGFzaDsKLQlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOwotCi0JLyogYWx3YXlzIGdldCBicm9hZGNhc3QgZnJhbWVzICovCi0JbWNoYXNoID0gMVVMTCA8PCAoMHhmZiA+PiAyKTsKLQotCW5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIG1jX2xpc3QpCi0JCW1jaGFzaCB8PSAxVUxMIDw8IChoYS0+YWRkcls1XSA+PiAyKTsKLQotCXJldHVybiBtY2hhc2g7Ci19Ci0KLXN0YXRpYyB2b2lkIGFyOTE3MF9vcF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKLQkJCQkgICAgICAgdW5zaWduZWQgaW50ICpuZXdfZmxhZ3MsCi0JCQkJICAgICAgIHU2NCBtdWx0aWNhc3QpCi17Ci0Jc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKLQotCWlmICh1bmxpa2VseSghSVNfQUNDRVBUSU5HX0NNRChhcikpKQotCQlyZXR1cm4gOwotCi0JbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKLQotCS8qIG1hc2sgc3VwcG9ydGVkIGZsYWdzICovCi0JKm5ld19mbGFncyAmPSBGSUZfQUxMTVVMVEkgfCBGSUZfQ09OVFJPTCB8IEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDIHwKLQkJICAgICAgRklGX1BST01JU0NfSU5fQlNTIHwgRklGX0ZDU0ZBSUwgfCBGSUZfUExDUEZBSUw7Ci0JYXItPmZpbHRlcl9zdGF0ZSA9ICpuZXdfZmxhZ3M7Ci0JLyoKLQkgKiBXZSBjYW4gc3VwcG9ydCBtb3JlIGJ5IHNldHRpbmcgdGhlIHNuaWZmZXIgYml0IGFuZAotCSAqIHRoZW4gY2hlY2tpbmcgdGhlIGVycm9yIGZsYWdzLCBsYXRlci4KLQkgKi8KLQotCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0FMTE1VTFRJICYmICpuZXdfZmxhZ3MgJiBGSUZfQUxMTVVMVEkpCi0JCW11bHRpY2FzdCA9IH4wVUxMOwotCi0JaWYgKG11bHRpY2FzdCAhPSBhci0+Y3VyX21jX2hhc2gpCi0JCWFyOTE3MF91cGRhdGVfbXVsdGljYXN0KGFyLCBtdWx0aWNhc3QpOwotCi0JaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQ09OVFJPTCkgewotCQl1MzIgZmlsdGVyID0gQVI5MTcwX01BQ19SRUdfRlRGX1BTUE9MTCB8Ci0JCQkgICAgIEFSOTE3MF9NQUNfUkVHX0ZURl9SVFMgfAotCQkJICAgICBBUjkxNzBfTUFDX1JFR19GVEZfQ1RTIHwKLQkJCSAgICAgQVI5MTcwX01BQ19SRUdfRlRGX0FDSyB8Ci0JCQkgICAgIEFSOTE3MF9NQUNfUkVHX0ZURl9DRkUgfAotCQkJICAgICBBUjkxNzBfTUFDX1JFR19GVEZfQ0ZFX0FDSzsKLQotCQlpZiAoKm5ld19mbGFncyAmIEZJRl9DT05UUk9MKQotCQkJZmlsdGVyIHw9IGFyLT5jdXJfZmlsdGVyOwotCQllbHNlCi0JCQlmaWx0ZXIgJj0gKH5hci0+Y3VyX2ZpbHRlcik7Ci0KLQkJYXI5MTcwX3VwZGF0ZV9mcmFtZV9maWx0ZXIoYXIsIGZpbHRlcik7Ci0JfQotCi0JaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpIHsKLQkJYXItPnNuaWZmZXJfZW5hYmxlZCA9ICgoKm5ld19mbGFncykgJiBGSUZfUFJPTUlTQ19JTl9CU1MpICE9IDA7Ci0JCWFyOTE3MF9zZXRfb3BlcmF0aW5nX21vZGUoYXIpOwotCX0KLQotCW11dGV4X3VubG9jaygmYXItPm11dGV4KTsKLX0KLQotCi1zdGF0aWMgdm9pZCBhcjkxNzBfb3BfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYsCi0JCQkJICAgICAgIHUzMiBjaGFuZ2VkKQotewotCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7Ci0Jc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9ICZhci0+Y29tbW9uOwotCWludCBlcnIgPSAwOwotCi0JbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKLQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQlNTSUQpIHsKLQkJbWVtY3B5KGNvbW1vbi0+Y3VyYnNzaWQsIGJzc19jb25mLT5ic3NpZCwgRVRIX0FMRU4pOwotCQllcnIgPSBhcjkxNzBfc2V0X29wZXJhdGluZ19tb2RlKGFyKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0OwotCX0KLQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQpCi0JCWFyLT5lbmFibGVfYmVhY29uID0gYnNzX2NvbmYtPmVuYWJsZV9iZWFjb247Ci0KLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTikgewotCQllcnIgPSBhcjkxNzBfdXBkYXRlX2JlYWNvbihhcik7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoY2hhbmdlZCAmIChCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCB8IEJTU19DSEFOR0VEX0JFQUNPTiB8Ci0JCSAgICAgICBCU1NfQ0hBTkdFRF9CRUFDT05fSU5UKSkgewotCQllcnIgPSBhcjkxNzBfc2V0X2JlYWNvbl90aW1lcnMoYXIpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BU1NPQykgewotI2lmbmRlZiBDT05GSUdfQVI5MTcwX0xFRFMKLQkJLyogZW5hYmxlIGFzc29jIExFRC4gKi8KLQkJZXJyID0gYXI5MTcwX3NldF9sZWRzX3N0YXRlKGFyLCBic3NfY29uZi0+YXNzb2MgPyAyIDogMCk7Ci0jZW5kaWYgLyogQ09ORklHX0FSOTE3MF9MRURTICovCi0JfQotCi0JaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9IVCkgewotCQkvKiBUT0RPICovCi0JCWVyciA9IDA7Ci0JfQotCi0JaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBfU0xPVCkgewotCQllcnIgPSBhcjkxNzBfc2V0X3Nsb3RfdGltZShhcik7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JBU0lDX1JBVEVTKSB7Ci0JCWVyciA9IGFyOTE3MF9zZXRfYmFzaWNfcmF0ZXMoYXIpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXQ7Ci0JfQotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOwotfQotCi1zdGF0aWMgdTY0IGFyOTE3MF9vcF9nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7Ci0JaW50IGVycjsKLQl1NjQgdHNmOwotI2RlZmluZSBOUiAzCi0Jc3RhdGljIGNvbnN0IHUzMiBhZGRyW05SXSA9IHsgQVI5MTcwX01BQ19SRUdfVFNGX0gsCi0JCQkJICAgIEFSOTE3MF9NQUNfUkVHX1RTRl9MLAotCQkJCSAgICBBUjkxNzBfTUFDX1JFR19UU0ZfSCB9OwotCXUzMiB2YWxbTlJdOwotCWludCBsb29wcyA9IDA7Ci0KLQltdXRleF9sb2NrKCZhci0+bXV0ZXgpOwotCi0Jd2hpbGUgKGxvb3BzKysgPCAxMCkgewotCQllcnIgPSBhcjkxNzBfcmVhZF9tcmVnKGFyLCBOUiwgYWRkciwgdmFsKTsKLQkJaWYgKGVyciB8fCB2YWxbMF0gPT0gdmFsWzJdKQotCQkJYnJlYWs7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOwotCi0JaWYgKFdBUk5fT04oZXJyKSkKLQkJcmV0dXJuIDA7Ci0JdHNmID0gdmFsWzBdOwotCXRzZiA9ICh0c2YgPDwgMzIpIHwgdmFsWzFdOwotCXJldHVybiB0c2Y7Ci0jdW5kZWYgTlIKLX0KLQotc3RhdGljIGludCBhcjkxNzBfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsCi0JCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCi0JCQkgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKLXsKLQlzdHJ1Y3QgYXI5MTcwICphciA9IGh3LT5wcml2OwotCWludCBlcnIgPSAwLCBpOwotCXU4IGt0eXBlOwotCi0JaWYgKCghYXItPnZpZikgfHwgKGFyLT5kaXNhYmxlX29mZmxvYWQpKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlzd2l0Y2ggKGtleS0+Y2lwaGVyKSB7Ci0JY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDoKLQkJa3R5cGUgPSBBUjkxNzBfRU5DX0FMR19XRVA2NDsKLQkJYnJlYWs7Ci0JY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ6Ci0JCWt0eXBlID0gQVI5MTcwX0VOQ19BTEdfV0VQMTI4OwotCQlicmVhazsKLQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVA6Ci0JCWt0eXBlID0gQVI5MTcwX0VOQ19BTEdfVEtJUDsKLQkJYnJlYWs7Ci0JY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOgotCQlrdHlwZSA9IEFSOTE3MF9FTkNfQUxHX0FFU0NDTVA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0KLQltdXRleF9sb2NrKCZhci0+bXV0ZXgpOwotCWlmIChjbWQgPT0gU0VUX0tFWSkgewotCQlpZiAodW5saWtlbHkoIUlTX1NUQVJURUQoYXIpKSkgewotCQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCS8qIGdyb3VwIGtleXMgbmVlZCBhbGwtemVyb2VzIGFkZHJlc3MgKi8KLQkJaWYgKCEoa2V5LT5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRSkpCi0JCQlzdGEgPSBOVUxMOwotCi0JCWlmIChrZXktPmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykKLQkJCQlpZiAoIShhci0+dXNlZGtleXMgJiBCSVQoaSkpKQotCQkJCQlicmVhazsKLQkJCWlmIChpID09IDY0KSB7Ci0JCQkJYXItPnJ4X3NvZnR3YXJlX2RlY3J5cHRpb24gPSB0cnVlOwotCQkJCWFyOTE3MF9zZXRfb3BlcmF0aW5nX21vZGUoYXIpOwotCQkJCWVyciA9IC1FTk9TUEM7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpID0gNjQgKyBrZXktPmtleWlkeDsKLQkJfQotCi0JCWtleS0+aHdfa2V5X2lkeCA9IGk7Ci0KLQkJZXJyID0gYXI5MTcwX3VwbG9hZF9rZXkoYXIsIGksIHN0YSA/IHN0YS0+YWRkciA6IE5VTEwsIGt0eXBlLCAwLAotCQkJCQlrZXktPmtleSwgbWluX3QodTgsIDE2LCBrZXktPmtleWxlbikpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXQ7Ci0KLQkJaWYgKGtleS0+Y2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVApIHsKLQkJCWVyciA9IGFyOTE3MF91cGxvYWRfa2V5KGFyLCBpLCBzdGEgPyBzdGEtPmFkZHIgOiBOVUxMLAotCQkJCQkJa3R5cGUsIDEsIGtleS0+a2V5ICsgMTYsIDE2KTsKLQkJCWlmIChlcnIpCi0JCQkJZ290byBvdXQ7Ci0KLQkJCS8qCi0JCQkgKiBoYXJkd2FyZSBpcyBub3QgY2FwYWJsZSBnZW5lcmF0aW5nIHRoZSBNTUlDCi0JCQkgKiBmb3IgZnJhZ21lbnRlZCBmcmFtZXMhCi0JCQkgKi8KLQkJCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUM7Ci0JCX0KLQotCQlpZiAoaSA8IDY0KQotCQkJYXItPnVzZWRrZXlzIHw9IEJJVChpKTsKLQotCQlrZXktPmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVjsKLQl9IGVsc2UgewotCQlpZiAodW5saWtlbHkoIUlTX1NUQVJURUQoYXIpKSkgewotCQkJLyogVGhlIGRldmljZSBpcyBnb25lLi4uIHRvZ2V0aGVyIHdpdGggdGhlIGtleSA7LSkgKi8KLQkJCWVyciA9IDA7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCWVyciA9IGFyOTE3MF9kaXNhYmxlX2tleShhciwga2V5LT5od19rZXlfaWR4KTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0OwotCi0JCWlmIChrZXktPmh3X2tleV9pZHggPCA2NCkgewotCQkJYXItPnVzZWRrZXlzICY9IH5CSVQoa2V5LT5od19rZXlfaWR4KTsKLQkJfSBlbHNlIHsKLQkJCWVyciA9IGFyOTE3MF91cGxvYWRfa2V5KGFyLCBrZXktPmh3X2tleV9pZHgsIE5VTEwsCi0JCQkJCQlBUjkxNzBfRU5DX0FMR19OT05FLCAwLAotCQkJCQkJTlVMTCwgMCk7Ci0JCQlpZiAoZXJyKQotCQkJCWdvdG8gb3V0OwotCi0JCQlpZiAoa2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCkgewotCQkJCWVyciA9IGFyOTE3MF91cGxvYWRfa2V5KGFyLCBrZXktPmh3X2tleV9pZHgsCi0JCQkJCQkJTlVMTCwKLQkJCQkJCQlBUjkxNzBfRU5DX0FMR19OT05FLCAxLAotCQkJCQkJCU5VTEwsIDApOwotCQkJCWlmIChlcnIpCi0JCQkJCWdvdG8gb3V0OwotCQkJfQotCi0JCX0KLQl9Ci0KLQlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOwotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19ST0xMX0NBTExfVEJMX0wsIGFyLT51c2Vka2V5cyk7Ci0JYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX1JPTExfQ0FMTF9UQkxfSCwgYXItPnVzZWRrZXlzID4+IDMyKTsKLQlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7Ci0JZXJyID0gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOwotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBhcjkxNzBfZ2V0X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cykKLXsKLQlzdHJ1Y3QgYXI5MTcwICphciA9IGh3LT5wcml2OwotCXUzMiB2YWw7Ci0JaW50IGVycjsKLQotCW11dGV4X2xvY2soJmFyLT5tdXRleCk7Ci0JZXJyID0gYXI5MTcwX3JlYWRfcmVnKGFyLCBBUjkxNzBfTUFDX1JFR19UWF9SRVRSWSwgJnZhbCk7Ci0JYXItPnN0YXRzLmRvdDExQUNLRmFpbHVyZUNvdW50ICs9IHZhbDsKLQotCW1lbWNweShzdGF0cywgJmFyLT5zdGF0cywgc2l6ZW9mKCpzdGF0cykpOwotCW11dGV4X3VubG9jaygmYXItPm11dGV4KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFyOTE3MF9nZXRfc3VydmV5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaWR4LAotCQkJCXN0cnVjdCBzdXJ2ZXlfaW5mbyAqc3VydmV5KQotewotCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOwotCi0JaWYgKGlkeCAhPSAwKQotCQlyZXR1cm4gLUVOT0VOVDsKLQotCS8qIFRPRE86IHVwZGF0ZSBub2lzZSB2YWx1ZSwgZS5nLiBjYWxsIGFyOTE3MF9zZXRfY2hhbm5lbCAqLwotCi0Jc3VydmV5LT5jaGFubmVsID0gY29uZi0+Y2hhbm5lbDsKLQlzdXJ2ZXktPmZpbGxlZCA9IFNVUlZFWV9JTkZPX05PSVNFX0RCTTsKLQlzdXJ2ZXktPm5vaXNlID0gYXItPm5vaXNlWzBdOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYXI5MTcwX2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBxdWV1ZSwKLQkJCSAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtKQotewotCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7Ci0JaW50IHJldDsKLQotCW11dGV4X2xvY2soJmFyLT5tdXRleCk7Ci0JaWYgKHF1ZXVlIDwgX19BUjkxNzBfTlVNX1RYUSkgewotCQltZW1jcHkoJmFyLT5lZGNmW2FyOTE3MF9xb3NfaHdtYXBbcXVldWVdXSwKLQkJICAgICAgIHBhcmFtLCBzaXplb2YoKnBhcmFtKSk7Ci0KLQkJcmV0ID0gYXI5MTcwX3NldF9xb3MoYXIpOwotCX0gZWxzZSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgYXI5MTcwX2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkJICAgICAgIGVudW0gaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uIGFjdGlvbiwKLQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkLCB1MTYgKnNzbiwKLQkJCSAgICAgICB1OCBidWZfc2l6ZSkKLXsKLQlzd2l0Y2ggKGFjdGlvbikgewotCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUQVJUOgotCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUT1A6Ci0JCS8qIEhhbmRsZWQgYnkgZmlybXdhcmUgKi8KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBhcjkxNzBfb3BzID0gewotCS5zdGFydAkJCT0gYXI5MTcwX29wX3N0YXJ0LAotCS5zdG9wCQkJPSBhcjkxNzBfb3Bfc3RvcCwKLQkudHgJCQk9IGFyOTE3MF9vcF90eCwKLQkuYWRkX2ludGVyZmFjZQkJPSBhcjkxNzBfb3BfYWRkX2ludGVyZmFjZSwKLQkucmVtb3ZlX2ludGVyZmFjZQk9IGFyOTE3MF9vcF9yZW1vdmVfaW50ZXJmYWNlLAotCS5jb25maWcJCQk9IGFyOTE3MF9vcF9jb25maWcsCi0JLnByZXBhcmVfbXVsdGljYXN0CT0gYXI5MTcwX29wX3ByZXBhcmVfbXVsdGljYXN0LAotCS5jb25maWd1cmVfZmlsdGVyCT0gYXI5MTcwX29wX2NvbmZpZ3VyZV9maWx0ZXIsCi0JLmNvbmZfdHgJCT0gYXI5MTcwX2NvbmZfdHgsCi0JLmJzc19pbmZvX2NoYW5nZWQJPSBhcjkxNzBfb3BfYnNzX2luZm9fY2hhbmdlZCwKLQkuZ2V0X3RzZgkJPSBhcjkxNzBfb3BfZ2V0X3RzZiwKLQkuc2V0X2tleQkJPSBhcjkxNzBfc2V0X2tleSwKLQkuZ2V0X3N0YXRzCQk9IGFyOTE3MF9nZXRfc3RhdHMsCi0JLmdldF9zdXJ2ZXkJCT0gYXI5MTcwX2dldF9zdXJ2ZXksCi0JLmFtcGR1X2FjdGlvbgkJPSBhcjkxNzBfYW1wZHVfYWN0aW9uLAotfTsKLQotdm9pZCAqYXI5MTcwX2FsbG9jKHNpemVfdCBwcml2X3NpemUpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0Jc3RydWN0IGFyOTE3MCAqYXI7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgaTsKLQotCS8qCi0JICogdGhpcyBidWZmZXIgaXMgdXNlZCBmb3Igcnggc3RyZWFtIHJlY29uc3RydWN0aW9uLgotCSAqIFVuZGVyIGhlYXZ5IGxvYWQgdGhpcyBkZXZpY2UgKG9yIHRoZSB0cmFuc3BvcnQgbGF5ZXI/KQotCSAqIHRlbmRzIHRvIHNwbGl0IHRoZSBzdHJlYW1zIGludG8gc2VwYXJhdGUgcnggZGVzY3JpcHRvcnMuCi0JICovCi0KLQlza2IgPSBfX2Rldl9hbGxvY19za2IoQVI5MTcwX1JYX1NUUkVBTV9NQVhfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFza2IpCi0JCWdvdG8gZXJyX25vbWVtOwotCi0JaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcocHJpdl9zaXplLCAmYXI5MTcwX29wcyk7Ci0JaWYgKCFodykKLQkJZ290byBlcnJfbm9tZW07Ci0KLQlhciA9IGh3LT5wcml2OwotCWFyLT5odyA9IGh3OwotCWFyLT5yeF9mYWlsb3ZlciA9IHNrYjsKLQotCW11dGV4X2luaXQoJmFyLT5tdXRleCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmFyLT5jbWRsb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmYXItPnR4X3N0YXRzX2xvY2spOwotCWZvciAoaSA9IDA7IGkgPCBfX0FSOTE3MF9OVU1fVFhROyBpKyspIHsKLQkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYXItPnR4X3N0YXR1c1tpXSk7Ci0JCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmFyLT50eF9wZW5kaW5nW2ldKTsKLQl9Ci0JYXI5MTcwX3J4X3Jlc2V0X3J4X21wZHUoYXIpOwotCUlOSVRfV09SSygmYXItPmJlYWNvbl93b3JrLCBhcjkxNzBfbmV3X2JlYWNvbik7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJmFyLT50eF9qYW5pdG9yLCBhcjkxNzBfdHhfamFuaXRvcik7Ci0KLQkvKiBhbGwgaHcgc3VwcG9ydHMgMi40IEdIeiwgc28gc2V0IGNoYW5uZWwgdG8gMSBieSBkZWZhdWx0ICovCi0JYXItPmNoYW5uZWwgPSAmYXI5MTcwXzJnaHpfY2hhbnRhYmxlWzBdOwotCi0JLyogZmlyc3QgcGFydCBvZiB3aXBoeSBpbml0ICovCi0JYXItPmh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKLQkJCQkJIEJJVChOTDgwMjExX0lGVFlQRV9XRFMpIHwKLQkJCQkJIEJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7Ci0JYXItPmh3LT5mbGFncyB8PSBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKLQkJCSBJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HIHwKLQkJCSBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTTsKLQotCWFyLT5ody0+cXVldWVzID0gX19BUjkxNzBfTlVNX1RYUTsKLQlhci0+aHctPmV4dHJhX3R4X2hlYWRyb29tID0gODsKLQotCWFyLT5ody0+bWF4X3JhdGVzID0gMTsKLQlhci0+aHctPm1heF9yYXRlX3RyaWVzID0gMzsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFyLT5ub2lzZSk7IGkrKykKLQkJYXItPm5vaXNlW2ldID0gLTk1OyAvKiBBVEhfREVGQVVMVF9OT0lTRV9GTE9PUiAqLwotCi0JcmV0dXJuIGFyOwotCi1lcnJfbm9tZW06Ci0Ja2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci19Ci0KLXN0YXRpYyBpbnQgYXI5MTcwX3JlYWRfZWVwcm9tKHN0cnVjdCBhcjkxNzAgKmFyKQotewotI2RlZmluZSBSVwk4CS8qIG51bWJlciBvZiB3b3JkcyB0byByZWFkIGF0IG9uY2UgKi8KLSNkZWZpbmUgUkIJKHNpemVvZih1MzIpICogUlcpCi0Jc3RydWN0IGF0aF9yZWd1bGF0b3J5ICpyZWd1bGF0b3J5ID0gJmFyLT5jb21tb24ucmVndWxhdG9yeTsKLQl1OCAqZWVwcm9tID0gKHZvaWQgKikmYXItPmVlcHJvbTsKLQl1OCAqYWRkciA9IGFyLT5lZXByb20ubWFjX2FkZHJlc3M7Ci0JX19sZTMyIG9mZnNldHNbUlddOwotCXVuc2lnbmVkIGludCByeF9zdHJlYW1zLCB0eF9zdHJlYW1zLCB0eF9wYXJhbXMgPSAwOwotCWludCBpLCBqLCBlcnIsIGJhbmRzID0gMDsKLQotCUJVSUxEX0JVR19PTihzaXplb2YoYXItPmVlcHJvbSkgJiAzKTsKLQotCUJVSUxEX0JVR19PTihSQiA+IEFSOTE3MF9NQVhfQ01EX0xFTiAtIDQpOwotI2lmbmRlZiBfX0NIRUNLRVJfXwotCS8qIGRvbid0IHdhbnQgdG8gaGFuZGxlIHRyYWlsaW5nIHJlbWFpbnMgKi8KLQlCVUlMRF9CVUdfT04oc2l6ZW9mKGFyLT5lZXByb20pICUgUkIpOwotI2VuZGlmCi0KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGFyLT5lZXByb20pL1JCOyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8IFJXOyBqKyspCi0JCQlvZmZzZXRzW2pdID0gY3B1X3RvX2xlMzIoQVI5MTcwX0VFUFJPTV9TVEFSVCArCi0JCQkJCQkgUkIgKiBpICsgNCAqIGopOwotCi0JCWVyciA9IGFyLT5leGVjX2NtZChhciwgQVI5MTcwX0NNRF9SUkVHLAotCQkJCSAgIFJCLCAodTggKikgJm9mZnNldHMsCi0JCQkJICAgUkIsIGVlcHJvbSArIFJCICogaSk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KLQotI3VuZGVmIFJXCi0jdW5kZWYgUkIKLQotCWlmIChhci0+ZWVwcm9tLmxlbmd0aCA9PSBjcHVfdG9fbGUxNigweEZGRkYpKQotCQlyZXR1cm4gLUVOT0RBVEE7Ci0KLQlpZiAoYXItPmVlcHJvbS5vcGVyYXRpbmdfZmxhZ3MgJiBBUjkxNzBfT1BGTEFHXzJHSFopIHsKLQkJYXItPmh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmYXI5MTcwX2JhbmRfMkdIejsKLQkJYmFuZHMrKzsKLQl9Ci0JaWYgKGFyLT5lZXByb20ub3BlcmF0aW5nX2ZsYWdzICYgQVI5MTcwX09QRkxBR181R0haKSB7Ci0JCWFyLT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0gJmFyOTE3MF9iYW5kXzVHSHo7Ci0JCWJhbmRzKys7Ci0JfQotCi0Jcnhfc3RyZWFtcyA9IGh3ZWlnaHQ4KGFyLT5lZXByb20ucnhfbWFzayk7Ci0JdHhfc3RyZWFtcyA9IGh3ZWlnaHQ4KGFyLT5lZXByb20udHhfbWFzayk7Ci0KLQlpZiAocnhfc3RyZWFtcyAhPSB0eF9zdHJlYW1zKQotCQl0eF9wYXJhbXMgPSBJRUVFODAyMTFfSFRfTUNTX1RYX1JYX0RJRkY7Ci0KLQlpZiAodHhfc3RyZWFtcyA+PSAxICYmIHR4X3N0cmVhbXMgPD0gSUVFRTgwMjExX0hUX01DU19UWF9NQVhfU1RSRUFNUykKLQkJdHhfcGFyYW1zID0gKHR4X3N0cmVhbXMgLSAxKSA8PAotCQkJICAgIElFRUU4MDIxMV9IVF9NQ1NfVFhfTUFYX1NUUkVBTVNfU0hJRlQ7Ci0KLQlhcjkxNzBfYmFuZF8yR0h6Lmh0X2NhcC5tY3MudHhfcGFyYW1zIHw9IHR4X3BhcmFtczsKLQlhcjkxNzBfYmFuZF81R0h6Lmh0X2NhcC5tY3MudHhfcGFyYW1zIHw9IHR4X3BhcmFtczsKLQotCS8qCi0JICogSSBtZWFzdXJlZCB0aGlzLCBhIGJhbmRzd2l0Y2ggdGFrZXMgcm91Z2hseQotCSAqIDEzNSBtcyBhbmQgYSBmcmVxdWVuY3kgc3dpdGNoIGFib3V0IDgwLgotCSAqCi0JICogRklYTUU6IG1lYXN1cmUgdGhlc2UgdmFsdWVzIGFnYWluIG9uY2UgRUVQUk9NIHNldHRpbmdzCi0JICoJICBhcmUgdXNlZCwgdGhhdCB3aWxsIGluZmx1ZW5jZSB0aGVtIQotCSAqLwotCWlmIChiYW5kcyA9PSAyKQotCQlhci0+aHctPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSAxMzUgKiAxMDAwOwotCWVsc2UKLQkJYXItPmh3LT5jaGFubmVsX2NoYW5nZV90aW1lID0gODAgKiAxMDAwOwotCi0JcmVndWxhdG9yeS0+Y3VycmVudF9yZCA9IGxlMTZfdG9fY3B1KGFyLT5lZXByb20ucmVnX2RvbWFpblswXSk7Ci0JcmVndWxhdG9yeS0+Y3VycmVudF9yZF9leHQgPSBsZTE2X3RvX2NwdShhci0+ZWVwcm9tLnJlZ19kb21haW5bMV0pOwotCi0JLyogc2Vjb25kIHBhcnQgb2Ygd2lwaHkgaW5pdCAqLwotCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGFyLT5odywgYWRkcik7Ci0KLQlyZXR1cm4gYmFuZHMgPyAwIDogLUVJTlZBTDsKLX0KLQotc3RhdGljIGludCBhcjkxNzBfcmVnX25vdGlmaWVyKHN0cnVjdCB3aXBoeSAqd2lwaHksCi0JCQlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0KQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gd2lwaHlfdG9faWVlZTgwMjExX2h3KHdpcGh5KTsKLQlzdHJ1Y3QgYXI5MTcwICphciA9IGh3LT5wcml2OwotCi0JcmV0dXJuIGF0aF9yZWdfbm90aWZpZXJfYXBwbHkod2lwaHksIHJlcXVlc3QsICZhci0+Y29tbW9uLnJlZ3VsYXRvcnkpOwotfQotCi1pbnQgYXI5MTcwX3JlZ2lzdGVyKHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3QgZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBhdGhfcmVndWxhdG9yeSAqcmVndWxhdG9yeSA9ICZhci0+Y29tbW9uLnJlZ3VsYXRvcnk7Ci0JaW50IGVycjsKLQotCS8qIHRyeSB0byByZWFkIEVFUFJPTSwgaW5pdCBNQUMgYWRkciAqLwotCWVyciA9IGFyOTE3MF9yZWFkX2VlcHJvbShhcik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0OwotCi0JZXJyID0gYXRoX3JlZ2RfaW5pdChyZWd1bGF0b3J5LCBhci0+aHctPndpcGh5LAotCQkJICAgIGFyOTE3MF9yZWdfbm90aWZpZXIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dDsKLQotCWVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhhci0+aHcpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dDsKLQotCWlmICghYXRoX2lzX3dvcmxkX3JlZ2QocmVndWxhdG9yeSkpCi0JCXJlZ3VsYXRvcnlfaGludChhci0+aHctPndpcGh5LCByZWd1bGF0b3J5LT5hbHBoYTIpOwotCi0JZXJyID0gYXI5MTcwX2luaXRfbGVkcyhhcik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfdW5yZWc7Ci0KLSNpZmRlZiBDT05GSUdfQVI5MTcwX0xFRFMKLQllcnIgPSBhcjkxNzBfcmVnaXN0ZXJfbGVkcyhhcik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfdW5yZWc7Ci0jZW5kaWYgLyogQ09ORklHX0FSOTE3MF9MRURTICovCi0KLQlkZXZfaW5mbyhwZGV2LCAiQXRoZXJvcyBBUjkxNzAgaXMgcmVnaXN0ZXJlZCBhcyAnJXMnXG4iLAotCQkgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSk7Ci0KLQlhci0+cmVnaXN0ZXJlZCA9IHRydWU7Ci0JcmV0dXJuIDA7Ci0KLWVycl91bnJlZzoKLQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhhci0+aHcpOwotCi1lcnJfb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLXZvaWQgYXI5MTcwX3VucmVnaXN0ZXIoc3RydWN0IGFyOTE3MCAqYXIpCi17Ci0JaWYgKGFyLT5yZWdpc3RlcmVkKSB7Ci0jaWZkZWYgQ09ORklHX0FSOTE3MF9MRURTCi0JCWFyOTE3MF91bnJlZ2lzdGVyX2xlZHMoYXIpOwotI2VuZGlmIC8qIENPTkZJR19BUjkxNzBfTEVEUyAqLwotCi0JaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoYXItPmh3KTsKLQl9Ci0KLQlrZnJlZV9za2IoYXItPnJ4X2ZhaWxvdmVyKTsKLQltdXRleF9kZXN0cm95KCZhci0+bXV0ZXgpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvcGh5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhOGQwNmIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9waHkuYworKysgL2Rldi9udWxsCkBAIC0xLDE3MTkgKzAsMCBAQAotLyoKLSAqIEF0aGVyb3MgQVI5MTcwIGRyaXZlcgotICoKLSAqIFBIWSBhbmQgUkYgY29kZQotICoKLSAqIENvcHlyaWdodCAyMDA4LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBzZWUKLSAqIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCi0gKgotICogVGhpcyBmaWxlIGluY29ycG9yYXRlcyB3b3JrIGNvdmVyZWQgYnkgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCi0gKiBwZXJtaXNzaW9uIG5vdGljZToKLSAqICAgIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KLSAqCi0gKiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiAgICBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgotICogICAgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiAgICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgotICogICAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvYml0cmV2Lmg+Ci0jaW5jbHVkZSAiYXI5MTcwLmgiCi0jaW5jbHVkZSAiY21kLmgiCi0KLXN0YXRpYyBpbnQgYXI5MTcwX2luaXRfcG93ZXJfY2FsKHN0cnVjdCBhcjkxNzAgKmFyKQotewotCWFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcik7Ci0KLQlhcjkxNzBfcmVnd3JpdGUoMHgxYmMwMDAgKyAweDk5M2MsIDB4N2YpOwotCWFyOTE3MF9yZWd3cml0ZSgweDFiYzAwMCArIDB4OTkzNCwgMHgzZjNmM2YzZik7Ci0JYXI5MTcwX3JlZ3dyaXRlKDB4MWJjMDAwICsgMHg5OTM4LCAweDNmM2YzZjNmKTsKLQlhcjkxNzBfcmVnd3JpdGUoMHgxYmMwMDAgKyAweGEyMzQsIDB4M2YzZjNmM2YpOwotCWFyOTE3MF9yZWd3cml0ZSgweDFiYzAwMCArIDB4YTIzOCwgMHgzZjNmM2YzZik7Ci0JYXI5MTcwX3JlZ3dyaXRlKDB4MWJjMDAwICsgMHhhMzhjLCAweDNmM2YzZjNmKTsKLQlhcjkxNzBfcmVnd3JpdGUoMHgxYmMwMDAgKyAweGEzOTAsIDB4M2YzZjNmM2YpOwotCWFyOTE3MF9yZWd3cml0ZSgweDFiYzAwMCArIDB4YTNjYywgMHgzZjNmM2YzZik7Ci0JYXI5MTcwX3JlZ3dyaXRlKDB4MWJjMDAwICsgMHhhM2QwLCAweDNmM2YzZjNmKTsKLQlhcjkxNzBfcmVnd3JpdGUoMHgxYmMwMDAgKyAweGEzZDQsIDB4M2YzZjNmM2YpOwotCi0JYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOwotCXJldHVybiBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7Ci19Ci0KLXN0cnVjdCBhcjkxNzBfcGh5X2luaXQgewotCXUzMiByZWcsIF81Z2h6XzIwLCBfNWdoel80MCwgXzJnaHpfNDAsIF8yZ2h6XzIwOwotfTsKLQotc3RhdGljIHN0cnVjdCBhcjkxNzBfcGh5X2luaXQgYXI1NDE2X3BoeV9pbml0W10gPSB7Ci0JeyAweDFjNTgwMCwgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgfSwKLQl7IDB4MWM1ODA0LCAweDAwMDAwMzAwLCAweDAwMDAwM2M0LCAweDAwMDAwM2M0LCAweDAwMDAwMzAwLCB9LAotCXsgMHgxYzU4MDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNTgwYywgMHhhZDg0OGUxOSwgMHhhZDg0OGUxOSwgMHhhZDg0OGUxOSwgMHhhZDg0OGUxOSwgfSwKLQl7IDB4MWM1ODEwLCAweDdkMTRlMDAwLCAweDdkMTRlMDAwLCAweDdkMTRlMDAwLCAweDdkMTRlMDAwLCB9LAotCXsgMHgxYzU4MTQsIDB4OWMwYTlmNmIsIDB4OWMwYTlmNmIsIDB4OWMwYTlmNmIsIDB4OWMwYTlmNmIsIH0sCi0JeyAweDFjNTgxOCwgMHgwMDAwMDA5MCwgMHgwMDAwMDA5MCwgMHgwMDAwMDA5MCwgMHgwMDAwMDA5MCwgfSwKLQl7IDB4MWM1ODFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzU4MjAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIH0sCi0JeyAweDFjNTgyNCwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgfSwKLQl7IDB4MWM1ODI4LCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCB9LAotCXsgMHgxYzU4MmMsIDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAsIH0sCi0JeyAweDFjNTgzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1ODM0LCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCB9LAotCXsgMHgxYzU4MzgsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIH0sCi0JeyAweDFjNTgzYywgMHgwMDIwMDQwMCwgMHgwMDIwMDQwMCwgMHgwMDIwMDQwMCwgMHgwMDIwMDQwMCwgfSwKLQl7IDB4MWM1ODQwLCAweDIwNmEwMDJlLCAweDIwNmEwMDJlLCAweDIwNmEwMDJlLCAweDIwNmEwMDJlLCB9LAotCXsgMHgxYzU4NDQsIDB4MTM3MjE2MWUsIDB4MTM3MjFjMWUsIDB4MTM3MjFjMjQsIDB4MTM3MjE2YTQsIH0sCi0JeyAweDFjNTg0OCwgMHgwMDFhNmE2NSwgMHgwMDFhNmE2NSwgMHgwMDE5N2E2OCwgMHgwMDE5N2E2OCwgfSwKLQl7IDB4MWM1ODRjLCAweDEyODQyMzNjLCAweDEyODQyMzNjLCAweDEyODQyMzNjLCAweDEyODQyMzNjLCB9LAotCXsgMHgxYzU4NTAsIDB4NmM0OGI0ZTQsIDB4NmM0OGI0ZTQsIDB4NmM0OGIwZTQsIDB4NmM0OGIwZTQsIH0sCi0JeyAweDFjNTg1NCwgMHgwMDAwMDg1OSwgMHgwMDAwMDg1OSwgMHgwMDAwMDg1OSwgMHgwMDAwMDg1OSwgfSwKLQl7IDB4MWM1ODU4LCAweDdlYzgwZDJlLCAweDdlYzgwZDJlLCAweDdlYzgwZDJlLCAweDdlYzgwZDJlLCB9LAotCXsgMHgxYzU4NWMsIDB4MzEzOTVjNWUsIDB4MzEzOTVjNWUsIDB4MzEzOTVjNWUsIDB4MzEzOTVjNWUsIH0sCi0JeyAweDFjNTg2MCwgMHgwMDA0ZGQxMCwgMHgwMDA0ZGQxMCwgMHgwMDA0ZGQyMCwgMHgwMDA0ZGQyMCwgfSwKLQl7IDB4MWM1ODY4LCAweDQwOWE0MTkwLCAweDQwOWE0MTkwLCAweDQwOWE0MTkwLCAweDQwOWE0MTkwLCB9LAotCXsgMHgxYzU4NmMsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIH0sCi0JeyAweDFjNTkwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1OTA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzU5MDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNTkwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1OTE0LCAweDAwMDAwN2QwLCAweDAwMDAwN2QwLCAweDAwMDAwODk4LCAweDAwMDAwODk4LCB9LAotCXsgMHgxYzU5MTgsIDB4MDAwMDAxMTgsIDB4MDAwMDAyMzAsIDB4MDAwMDAyNjgsIDB4MDAwMDAxMzQsIH0sCi0JeyAweDFjNTkxYywgMHgxMDAwMGZmZiwgMHgxMDAwMGZmZiwgMHgxMDAwMGZmZiwgMHgxMDAwMGZmZiwgfSwKLQl7IDB4MWM1OTIwLCAweDA1MTAwODFjLCAweDA1MTAwODFjLCAweDA1MTAwMDFjLCAweDA1MTAwMDFjLCB9LAotCXsgMHgxYzU5MjQsIDB4ZDAwNThhMTUsIDB4ZDAwNThhMTUsIDB4ZDAwNThhMTUsIDB4ZDAwNThhMTUsIH0sCi0JeyAweDFjNTkyOCwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgfSwKLQl7IDB4MWM1OTJjLCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCB9LAotCXsgMHgxYzU5MzQsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIH0sCi0JeyAweDFjNTkzOCwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgfSwKLQl7IDB4MWM1OTNjLCAweDAwMDAwMDdmLCAweDAwMDAwMDdmLCAweDAwMDAwMDdmLCAweDAwMDAwMDdmLCB9LAotCXsgMHgxYzU5NDQsIDB4ZGZiODEwMjAsIDB4ZGZiODEwMjAsIDB4ZGZiODEwMjAsIDB4ZGZiODEwMjAsIH0sCi0JeyAweDFjNTk0OCwgMHg5MjgwYjIxMiwgMHg5MjgwYjIxMiwgMHg5MjgwYjIxMiwgMHg5MjgwYjIxMiwgfSwKLQl7IDB4MWM1OTRjLCAweDAwMDIwMDI4LCAweDAwMDIwMDI4LCAweDAwMDIwMDI4LCAweDAwMDIwMDI4LCB9LAotCXsgMHgxYzU5NTQsIDB4NWQ1MGUxODgsIDB4NWQ1MGUxODgsIDB4NWQ1MGUxODgsIDB4NWQ1MGUxODgsIH0sCi0JeyAweDFjNTk1OCwgMHgwMDA4MWZmZiwgMHgwMDA4MWZmZiwgMHgwMDA4MWZmZiwgMHgwMDA4MWZmZiwgfSwKLQl7IDB4MWM1OTYwLCAweDAwMDA5YjQwLCAweDAwMDA5YjQwLCAweDAwMDA5YjQwLCAweDAwMDA5YjQwLCB9LAotCXsgMHgxYzU5NjQsIDB4MDAwMDExMjAsIDB4MDAwMDExMjAsIDB4MDAwMDExMjAsIDB4MDAwMDExMjAsIH0sCi0JeyAweDFjNTk3MCwgMHgxOTBmYjUxNSwgMHgxOTBmYjUxNSwgMHgxOTBmYjUxNSwgMHgxOTBmYjUxNSwgfSwKLQl7IDB4MWM1OTc0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzU5NzgsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIH0sCi0JeyAweDFjNTk3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1OTgwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzU5ODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNTk4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1OThjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzU5OTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNTk5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1OTk4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzU5OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNTlhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1OWE0LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCB9LAotCXsgMHgxYzU5YTgsIDB4MDAxZmZmMDAsIDB4MDAxZmZmMDAsIDB4MDAxZmZmMDAsIDB4MDAxZmZmMDAsIH0sCi0JeyAweDFjNTlhYywgMHgwMDZmMDBjNCwgMHgwMDZmMDBjNCwgMHgwMDZmMDBjNCwgMHgwMDZmMDBjNCwgfSwKLQl7IDB4MWM1OWIwLCAweDAzMDUxMDAwLCAweDAzMDUxMDAwLCAweDAzMDUxMDAwLCAweDAzMDUxMDAwLCB9LAotCXsgMHgxYzU5YjQsIDB4MDAwMDA4MjAsIDB4MDAwMDA4MjAsIDB4MDAwMDA4MjAsIDB4MDAwMDA4MjAsIH0sCi0JeyAweDFjNTljMCwgMHgwMzg5MTliZSwgMHgwMzg5MTliZSwgMHgwMzg5MTliZSwgMHgwMzg5MTliZSwgfSwKLQl7IDB4MWM1OWM0LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3LCAweDA2MzM2Zjc3LCB9LAotCXsgMHgxYzU5YzgsIDB4NjBmNjUzMmMsIDB4NjBmNjUzMmMsIDB4NjBmNjUzMmMsIDB4NjBmNjUzMmMsIH0sCi0JeyAweDFjNTljYywgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgfSwKLQl7IDB4MWM1OWQwLCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0LCAweDAwMDQ2Mzg0LCB9LAotCXsgMHgxYzU5ZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNTlkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1OWRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzU5ZTAsIDB4MDAwMDAyMDAsIDB4MDAwMDAyMDAsIDB4MDAwMDAyMDAsIDB4MDAwMDAyMDAsIH0sCi0JeyAweDFjNTllNCwgMHg2NDY0NjQ2NCwgMHg2NDY0NjQ2NCwgMHg2NDY0NjQ2NCwgMHg2NDY0NjQ2NCwgfSwKLQl7IDB4MWM1OWU4LCAweDNjNzg3ODc4LCAweDNjNzg3ODc4LCAweDNjNzg3ODc4LCAweDNjNzg3ODc4LCB9LAotCXsgMHgxYzU5ZWMsIDB4MDAwMDAwYWEsIDB4MDAwMDAwYWEsIDB4MDAwMDAwYWEsIDB4MDAwMDAwYWEsIH0sCi0JeyAweDFjNTlmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1OWZjLCAweDAwMDAxMDQyLCAweDAwMDAxMDQyLCAweDAwMDAxMDQyLCAweDAwMDAxMDQyLCB9LAotCXsgMHgxYzVhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNWEwNCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCwgfSwKLQl7IDB4MWM1YTA4LCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCB9LAotCXsgMHgxYzVhMGMsIDB4MDAwMDAxYTEsIDB4MDAwMDAxYTEsIDB4MDAwMDAxNDEsIDB4MDAwMDAxNDEsIH0sCi0JeyAweDFjNWExMCwgMHgwMDAwMDFlMSwgMHgwMDAwMDFlMSwgMHgwMDAwMDE4MSwgMHgwMDAwMDE4MSwgfSwKLQl7IDB4MWM1YTE0LCAweDAwMDAwMDIxLCAweDAwMDAwMDIxLCAweDAwMDAwMWMxLCAweDAwMDAwMWMxLCB9LAotCXsgMHgxYzVhMTgsIDB4MDAwMDAwNjEsIDB4MDAwMDAwNjEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIH0sCi0JeyAweDFjNWExYywgMHgwMDAwMDE2OCwgMHgwMDAwMDE2OCwgMHgwMDAwMDA0MSwgMHgwMDAwMDA0MSwgfSwKLQl7IDB4MWM1YTIwLCAweDAwMDAwMWE4LCAweDAwMDAwMWE4LCAweDAwMDAwMWE4LCAweDAwMDAwMWE4LCB9LAotCXsgMHgxYzVhMjQsIDB4MDAwMDAxZTgsIDB4MDAwMDAxZTgsIDB4MDAwMDAxZTgsIDB4MDAwMDAxZTgsIH0sCi0JeyAweDFjNWEyOCwgMHgwMDAwMDAyOCwgMHgwMDAwMDAyOCwgMHgwMDAwMDAyOCwgMHgwMDAwMDAyOCwgfSwKLQl7IDB4MWM1YTJjLCAweDAwMDAwMDY4LCAweDAwMDAwMDY4LCAweDAwMDAwMDY4LCAweDAwMDAwMDY4LCB9LAotCXsgMHgxYzVhMzAsIDB4MDAwMDAxODksIDB4MDAwMDAxODksIDB4MDAwMDAwYTgsIDB4MDAwMDAwYTgsIH0sCi0JeyAweDFjNWEzNCwgMHgwMDAwMDFjOSwgMHgwMDAwMDFjOSwgMHgwMDAwMDE2OSwgMHgwMDAwMDE2OSwgfSwKLQl7IDB4MWM1YTM4LCAweDAwMDAwMDA5LCAweDAwMDAwMDA5LCAweDAwMDAwMWE5LCAweDAwMDAwMWE5LCB9LAotCXsgMHgxYzVhM2MsIDB4MDAwMDAwNDksIDB4MDAwMDAwNDksIDB4MDAwMDAxZTksIDB4MDAwMDAxZTksIH0sCi0JeyAweDFjNWE0MCwgMHgwMDAwMDA4OSwgMHgwMDAwMDA4OSwgMHgwMDAwMDAyOSwgMHgwMDAwMDAyOSwgfSwKLQl7IDB4MWM1YTQ0LCAweDAwMDAwMTcwLCAweDAwMDAwMTcwLCAweDAwMDAwMDY5LCAweDAwMDAwMDY5LCB9LAotCXsgMHgxYzVhNDgsIDB4MDAwMDAxYjAsIDB4MDAwMDAxYjAsIDB4MDAwMDAxOTAsIDB4MDAwMDAxOTAsIH0sCi0JeyAweDFjNWE0YywgMHgwMDAwMDFmMCwgMHgwMDAwMDFmMCwgMHgwMDAwMDFkMCwgMHgwMDAwMDFkMCwgfSwKLQl7IDB4MWM1YTUwLCAweDAwMDAwMDMwLCAweDAwMDAwMDMwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCB9LAotCXsgMHgxYzVhNTQsIDB4MDAwMDAwNzAsIDB4MDAwMDAwNzAsIDB4MDAwMDAwNTAsIDB4MDAwMDAwNTAsIH0sCi0JeyAweDFjNWE1OCwgMHgwMDAwMDE5MSwgMHgwMDAwMDE5MSwgMHgwMDAwMDA5MCwgMHgwMDAwMDA5MCwgfSwKLQl7IDB4MWM1YTVjLCAweDAwMDAwMWQxLCAweDAwMDAwMWQxLCAweDAwMDAwMTUxLCAweDAwMDAwMTUxLCB9LAotCXsgMHgxYzVhNjAsIDB4MDAwMDAwMTEsIDB4MDAwMDAwMTEsIDB4MDAwMDAxOTEsIDB4MDAwMDAxOTEsIH0sCi0JeyAweDFjNWE2NCwgMHgwMDAwMDA1MSwgMHgwMDAwMDA1MSwgMHgwMDAwMDFkMSwgMHgwMDAwMDFkMSwgfSwKLQl7IDB4MWM1YTY4LCAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDExLCAweDAwMDAwMDExLCB9LAotCXsgMHgxYzVhNmMsIDB4MDAwMDAxYjgsIDB4MDAwMDAxYjgsIDB4MDAwMDAwNTEsIDB4MDAwMDAwNTEsIH0sCi0JeyAweDFjNWE3MCwgMHgwMDAwMDFmOCwgMHgwMDAwMDFmOCwgMHgwMDAwMDE5OCwgMHgwMDAwMDE5OCwgfSwKLQl7IDB4MWM1YTc0LCAweDAwMDAwMDM4LCAweDAwMDAwMDM4LCAweDAwMDAwMWQ4LCAweDAwMDAwMWQ4LCB9LAotCXsgMHgxYzVhNzgsIDB4MDAwMDAwNzgsIDB4MDAwMDAwNzgsIDB4MDAwMDAwMTgsIDB4MDAwMDAwMTgsIH0sCi0JeyAweDFjNWE3YywgMHgwMDAwMDE5OSwgMHgwMDAwMDE5OSwgMHgwMDAwMDA1OCwgMHgwMDAwMDA1OCwgfSwKLQl7IDB4MWM1YTgwLCAweDAwMDAwMWQ5LCAweDAwMDAwMWQ5LCAweDAwMDAwMDk4LCAweDAwMDAwMDk4LCB9LAotCXsgMHgxYzVhODQsIDB4MDAwMDAwMTksIDB4MDAwMDAwMTksIDB4MDAwMDAxNTksIDB4MDAwMDAxNTksIH0sCi0JeyAweDFjNWE4OCwgMHgwMDAwMDA1OSwgMHgwMDAwMDA1OSwgMHgwMDAwMDE5OSwgMHgwMDAwMDE5OSwgfSwKLQl7IDB4MWM1YThjLCAweDAwMDAwMDk5LCAweDAwMDAwMDk5LCAweDAwMDAwMWQ5LCAweDAwMDAwMWQ5LCB9LAotCXsgMHgxYzVhOTAsIDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIDB4MDAwMDAwMTksIDB4MDAwMDAwMTksIH0sCi0JeyAweDFjNWE5NCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDA1OSwgMHgwMDAwMDA1OSwgfSwKLQl7IDB4MWM1YTk4LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMDk5LCAweDAwMDAwMDk5LCB9LAotCXsgMHgxYzVhOWMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIH0sCi0JeyAweDFjNWFhMCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKLQl7IDB4MWM1YWE0LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAotCXsgMHgxYzVhYTgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCi0JeyAweDFjNWFhYywgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKLQl7IDB4MWM1YWIwLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAotCXsgMHgxYzVhYjQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCi0JeyAweDFjNWFiOCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKLQl7IDB4MWM1YWJjLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAotCXsgMHgxYzVhYzAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCi0JeyAweDFjNWFjNCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKLQl7IDB4MWM1YWM4LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAotCXsgMHgxYzVhY2MsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCi0JeyAweDFjNWFkMCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKLQl7IDB4MWM1YWQ0LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAotCXsgMHgxYzVhZDgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCi0JeyAweDFjNWFkYywgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKLQl7IDB4MWM1YWUwLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAotCXsgMHgxYzVhZTQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCi0JeyAweDFjNWFlOCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKLQl7IDB4MWM1YWVjLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAotCXsgMHgxYzVhZjAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCi0JeyAweDFjNWFmNCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKLQl7IDB4MWM1YWY4LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAotCXsgMHgxYzVhZmMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCi0JeyAweDFjNWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1YjA0LCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCB9LAotCXsgMHgxYzViMDgsIDB4MDAwMDAwMDIsIDB4MDAwMDAwMDIsIDB4MDAwMDAwMDIsIDB4MDAwMDAwMDIsIH0sCi0JeyAweDFjNWIwYywgMHgwMDAwMDAwMywgMHgwMDAwMDAwMywgMHgwMDAwMDAwMywgMHgwMDAwMDAwMywgfSwKLQl7IDB4MWM1YjEwLCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCB9LAotCXsgMHgxYzViMTQsIDB4MDAwMDAwMDUsIDB4MDAwMDAwMDUsIDB4MDAwMDAwMDUsIDB4MDAwMDAwMDUsIH0sCi0JeyAweDFjNWIxOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgfSwKLQl7IDB4MWM1YjFjLCAweDAwMDAwMDA5LCAweDAwMDAwMDA5LCAweDAwMDAwMDA5LCAweDAwMDAwMDA5LCB9LAotCXsgMHgxYzViMjAsIDB4MDAwMDAwMGEsIDB4MDAwMDAwMGEsIDB4MDAwMDAwMGEsIDB4MDAwMDAwMGEsIH0sCi0JeyAweDFjNWIyNCwgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiwgfSwKLQl7IDB4MWM1YjI4LCAweDAwMDAwMDBjLCAweDAwMDAwMDBjLCAweDAwMDAwMDBjLCAweDAwMDAwMDBjLCB9LAotCXsgMHgxYzViMmMsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMGQsIH0sCi0JeyAweDFjNWIzMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgfSwKLQl7IDB4MWM1YjM0LCAweDAwMDAwMDExLCAweDAwMDAwMDExLCAweDAwMDAwMDExLCAweDAwMDAwMDExLCB9LAotCXsgMHgxYzViMzgsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIH0sCi0JeyAweDFjNWIzYywgMHgwMDAwMDAxMywgMHgwMDAwMDAxMywgMHgwMDAwMDAxMywgMHgwMDAwMDAxMywgfSwKLQl7IDB4MWM1YjQwLCAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCB9LAotCXsgMHgxYzViNDQsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIH0sCi0JeyAweDFjNWI0OCwgMHgwMDAwMDAxOCwgMHgwMDAwMDAxOCwgMHgwMDAwMDAxOCwgMHgwMDAwMDAxOCwgfSwKLQl7IDB4MWM1YjRjLCAweDAwMDAwMDE5LCAweDAwMDAwMDE5LCAweDAwMDAwMDE5LCAweDAwMDAwMDE5LCB9LAotCXsgMHgxYzViNTAsIDB4MDAwMDAwMWEsIDB4MDAwMDAwMWEsIDB4MDAwMDAwMWEsIDB4MDAwMDAwMWEsIH0sCi0JeyAweDFjNWI1NCwgMHgwMDAwMDAxYiwgMHgwMDAwMDAxYiwgMHgwMDAwMDAxYiwgMHgwMDAwMDAxYiwgfSwKLQl7IDB4MWM1YjU4LCAweDAwMDAwMDFjLCAweDAwMDAwMDFjLCAweDAwMDAwMDFjLCAweDAwMDAwMDFjLCB9LAotCXsgMHgxYzViNWMsIDB4MDAwMDAwMWQsIDB4MDAwMDAwMWQsIDB4MDAwMDAwMWQsIDB4MDAwMDAwMWQsIH0sCi0JeyAweDFjNWI2MCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgfSwKLQl7IDB4MWM1YjY0LCAweDAwMDAwMDIxLCAweDAwMDAwMDIxLCAweDAwMDAwMDIxLCAweDAwMDAwMDIxLCB9LAotCXsgMHgxYzViNjgsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIsIH0sCi0JeyAweDFjNWI2YywgMHgwMDAwMDAyMywgMHgwMDAwMDAyMywgMHgwMDAwMDAyMywgMHgwMDAwMDAyMywgfSwKLQl7IDB4MWM1YjcwLCAweDAwMDAwMDI0LCAweDAwMDAwMDI0LCAweDAwMDAwMDI0LCAweDAwMDAwMDI0LCB9LAotCXsgMHgxYzViNzQsIDB4MDAwMDAwMjUsIDB4MDAwMDAwMjUsIDB4MDAwMDAwMjUsIDB4MDAwMDAwMjUsIH0sCi0JeyAweDFjNWI3OCwgMHgwMDAwMDAyOCwgMHgwMDAwMDAyOCwgMHgwMDAwMDAyOCwgMHgwMDAwMDAyOCwgfSwKLQl7IDB4MWM1YjdjLCAweDAwMDAwMDI5LCAweDAwMDAwMDI5LCAweDAwMDAwMDI5LCAweDAwMDAwMDI5LCB9LAotCXsgMHgxYzViODAsIDB4MDAwMDAwMmEsIDB4MDAwMDAwMmEsIDB4MDAwMDAwMmEsIDB4MDAwMDAwMmEsIH0sCi0JeyAweDFjNWI4NCwgMHgwMDAwMDAyYiwgMHgwMDAwMDAyYiwgMHgwMDAwMDAyYiwgMHgwMDAwMDAyYiwgfSwKLQl7IDB4MWM1Yjg4LCAweDAwMDAwMDJjLCAweDAwMDAwMDJjLCAweDAwMDAwMDJjLCAweDAwMDAwMDJjLCB9LAotCXsgMHgxYzViOGMsIDB4MDAwMDAwMmQsIDB4MDAwMDAwMmQsIDB4MDAwMDAwMmQsIDB4MDAwMDAwMmQsIH0sCi0JeyAweDFjNWI5MCwgMHgwMDAwMDAzMCwgMHgwMDAwMDAzMCwgMHgwMDAwMDAzMCwgMHgwMDAwMDAzMCwgfSwKLQl7IDB4MWM1Yjk0LCAweDAwMDAwMDMxLCAweDAwMDAwMDMxLCAweDAwMDAwMDMxLCAweDAwMDAwMDMxLCB9LAotCXsgMHgxYzViOTgsIDB4MDAwMDAwMzIsIDB4MDAwMDAwMzIsIDB4MDAwMDAwMzIsIDB4MDAwMDAwMzIsIH0sCi0JeyAweDFjNWI5YywgMHgwMDAwMDAzMywgMHgwMDAwMDAzMywgMHgwMDAwMDAzMywgMHgwMDAwMDAzMywgfSwKLQl7IDB4MWM1YmEwLCAweDAwMDAwMDM0LCAweDAwMDAwMDM0LCAweDAwMDAwMDM0LCAweDAwMDAwMDM0LCB9LAotCXsgMHgxYzViYTQsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCi0JeyAweDFjNWJhOCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKLQl7IDB4MWM1YmFjLCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAotCXsgMHgxYzViYjAsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCi0JeyAweDFjNWJiNCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKLQl7IDB4MWM1YmI4LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAotCXsgMHgxYzViYmMsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCi0JeyAweDFjNWJjMCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKLQl7IDB4MWM1YmM0LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAotCXsgMHgxYzViYzgsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCi0JeyAweDFjNWJjYywgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKLQl7IDB4MWM1YmQwLCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAotCXsgMHgxYzViZDQsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCi0JeyAweDFjNWJkOCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKLQl7IDB4MWM1YmRjLCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAotCXsgMHgxYzViZTAsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCi0JeyAweDFjNWJlNCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKLQl7IDB4MWM1YmU4LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAotCXsgMHgxYzViZWMsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCi0JeyAweDFjNWJmMCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKLQl7IDB4MWM1YmY0LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAotCXsgMHgxYzViZjgsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIH0sCi0JeyAweDFjNWJmYywgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgfSwKLQl7IDB4MWM1YzAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzVjMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNWMxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1YzE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzVjMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNWMxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1YzIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzVjMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNWMyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1YzJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzVjMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNWMzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1YzM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzVjM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNWNmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM1Y2Y0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzVjZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNWNmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM2MjAwLCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCB9LAotCXsgMHgxYzYyMDQsIDB4MDAwMDA0NDAsIDB4MDAwMDA0NDAsIDB4MDAwMDA0NDAsIDB4MDAwMDA0NDAsIH0sCi0JeyAweDFjNjIwOCwgMHhkNmJlNDc4OCwgMHhkNmJlNDc4OCwgMHhkMDNlNDc4OCwgMHhkMDNlNDc4OCwgfSwKLQl7IDB4MWM2MjBjLCAweDAxMmU4MTYwLCAweDAxMmU4MTYwLCAweDAxMmE4MTYwLCAweDAxMmE4MTYwLCB9LAotCXsgMHgxYzYyMTAsIDB4NDA4MDYzMzMsIDB4NDA4MDYzMzMsIDB4NDA4MDYzMzMsIDB4NDA4MDYzMzMsIH0sCi0JeyAweDFjNjIxNCwgMHgwMDEwNmMxMCwgMHgwMDEwNmMxMCwgMHgwMDEwNmMxMCwgMHgwMDEwNmMxMCwgfSwKLQl7IDB4MWM2MjE4LCAweDAwOWM0MDYwLCAweDAwOWM0MDYwLCAweDAwOWM0MDYwLCAweDAwOWM0MDYwLCB9LAotCXsgMHgxYzYyMWMsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIH0sCi0JeyAweDFjNjIyMCwgMHgwMTg4MzBjNiwgMHgwMTg4MzBjNiwgMHgwMTg4MzBjNiwgMHgwMTg4MzBjNiwgfSwKLQl7IDB4MWM2MjI0LCAweDAwMDAwNDAwLCAweDAwMDAwNDAwLCAweDAwMDAwNDAwLCAweDAwMDAwNDAwLCB9LAotCXsgMHgxYzYyMjgsIDB4MDAwMDA5YjUsIDB4MDAwMDA5YjUsIDB4MDAwMDA5YjUsIDB4MDAwMDA5YjUsIH0sCi0JeyAweDFjNjIyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM2MjMwLCAweDAwMDAwMTA4LCAweDAwMDAwMjEwLCAweDAwMDAwMjEwLCAweDAwMDAwMTA4LCB9LAotCXsgMHgxYzYyMzQsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIH0sCi0JeyAweDFjNjIzOCwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgfSwKLQl7IDB4MWM2MjNjLCAweDEzYzg4OWFmLCAweDEzYzg4OWFmLCAweDEzYzg4OWFmLCAweDEzYzg4OWFmLCB9LAotCXsgMHgxYzYyNDAsIDB4Mzg0OTBhMjAsIDB4Mzg0OTBhMjAsIDB4Mzg0OTBhMjAsIDB4Mzg0OTBhMjAsIH0sCi0JeyAweDFjNjI0NCwgMHgwMDAwN2JiNiwgMHgwMDAwN2JiNiwgMHgwMDAwN2JiNiwgMHgwMDAwN2JiNiwgfSwKLQl7IDB4MWM2MjQ4LCAweDBmZmYzZmZjLCAweDBmZmYzZmZjLCAweDBmZmYzZmZjLCAweDBmZmYzZmZjLCB9LAotCXsgMHgxYzYyNGMsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIH0sCi0JeyAweDFjNjI1MCwgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCwgfSwKLQl7IDB4MWM2MjU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzYyNTgsIDB4MGNjNzUzODAsIDB4MGNjNzUzODAsIDB4MGNjNzUzODAsIDB4MGNjNzUzODAsIH0sCi0JeyAweDFjNjI1YywgMHgwZjBmMGYwMSwgMHgwZjBmMGYwMSwgMHgwZjBmMGYwMSwgMHgwZjBmMGYwMSwgfSwKLQl7IDB4MWM2MjYwLCAweGRmYTkxZjAxLCAweGRmYTkxZjAxLCAweGRmYTkxZjAxLCAweGRmYTkxZjAxLCB9LAotCXsgMHgxYzYyNjQsIDB4MDA0MThhMTEsIDB4MDA0MThhMTEsIDB4MDA0MThhMTEsIDB4MDA0MThhMTEsIH0sCi0JeyAweDFjNjI2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM2MjZjLCAweDA5MjQ5MTI2LCAweDA5MjQ5MTI2LCAweDA5MjQ5MTI2LCAweDA5MjQ5MTI2LCB9LAotCXsgMHgxYzYyNzQsIDB4MGExYTljYWEsIDB4MGExYTljYWEsIDB4MGExYTdjYWEsIDB4MGExYTdjYWEsIH0sCi0JeyAweDFjNjI3OCwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgfSwKLQl7IDB4MWM2MjdjLCAweDA1MTcwMWNlLCAweDA1MTcwMWNlLCAweDA1MTcwMWNlLCAweDA1MTcwMWNlLCB9LAotCXsgMHgxYzYzMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIH0sCi0JeyAweDFjNjMwNCwgMHgzMDAzMjYwMiwgMHgzMDAzMjYwMiwgMHgyZTAzMjQwMiwgMHgyZTAzMjQwMiwgfSwKLQl7IDB4MWM2MzA4LCAweDQ4MDczZTA2LCAweDQ4MDczZTA2LCAweDRhMGEzYzA2LCAweDRhMGEzYzA2LCB9LAotCXsgMHgxYzYzMGMsIDB4NTYwYjRjMGEsIDB4NTYwYjRjMGEsIDB4NjIxYTU0MGIsIDB4NjIxYTU0MGIsIH0sCi0JeyAweDFjNjMxMCwgMHg2NDFhNjAwZiwgMHg2NDFhNjAwZiwgMHg3NjRmNmMxYiwgMHg3NjRmNmMxYiwgfSwKLQl7IDB4MWM2MzE0LCAweDdhNGY2ZTFiLCAweDdhNGY2ZTFiLCAweDg0NWI3YTVhLCAweDg0NWI3YTVhLCB9LAotCXsgMHgxYzYzMTgsIDB4OGM1YjdlNWEsIDB4OGM1YjdlNWEsIDB4OTUwZjhjY2YsIDB4OTUwZjhjY2YsIH0sCi0JeyAweDFjNjMxYywgMHg5ZDBmOTZjZiwgMHg5ZDBmOTZjZiwgMHhhNWNmOWI0ZiwgMHhhNWNmOWI0ZiwgfSwKLQl7IDB4MWM2MzIwLCAweGI1MWZhNjlmLCAweGI1MWZhNjlmLCAweGJkZGZhZjFmLCAweGJkZGZhZjFmLCB9LAotCXsgMHgxYzYzMjQsIDB4Y2IzZmJkMDcsIDB4Y2IzZmJjYmYsIDB4ZDFmZmM5M2YsIDB4ZDFmZmM5M2YsIH0sCi0JeyAweDFjNjMyOCwgMHgwMDAwZDdiZiwgMHgwMDAwZDdiZiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM2MzJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzYzMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNjMzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM2MzM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzYzM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNjM0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM2MzQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzYzNDgsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIH0sCi0JeyAweDFjNjM0YywgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgfSwKLQl7IDB4MWM2MzUwLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCB9LAotCXsgMHgxYzYzNTQsIDB4MDAwM2ZmZmYsIDB4MDAwM2ZmZmYsIDB4MDAwM2ZmZmYsIDB4MDAwM2ZmZmYsIH0sCi0JeyAweDFjNjM1OCwgMHg3OWE4YWExZiwgMHg3OWE4YWExZiwgMHg3OWE4YWExZiwgMHg3OWE4YWExZiwgfSwKLQl7IDB4MWM2Mzg4LCAweDA4MDAwMDAwLCAweDA4MDAwMDAwLCAweDA4MDAwMDAwLCAweDA4MDAwMDAwLCB9LAotCXsgMHgxYzYzOGMsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIH0sCi0JeyAweDFjNjM5MCwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgfSwKLQl7IDB4MWM2Mzk0LCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCB9LAotCXsgMHgxYzYzOTgsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIH0sCi0JeyAweDFjNjM5YywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgfSwKLQl7IDB4MWM2M2EwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzYzYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNjNhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM2M2FjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzYzYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNjNiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM2M2I4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzYzYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNjNjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM2M2M0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAotCXsgMHgxYzYzYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCi0JeyAweDFjNjNjYywgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgfSwKLQl7IDB4MWM2M2QwLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCB9LAotCXsgMHgxYzYzZDQsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIH0sCi0JeyAweDFjNjNkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKLQl7IDB4MWM2M2RjLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCB9LAotCXsgMHgxYzYzZTAsIDB4MDAwMDAwYzAsIDB4MDAwMDAwYzAsIDB4MDAwMDAwYzAsIDB4MDAwMDAwYzAsIH0sCi0JeyAweDFjNjg0OCwgMHgwMDE4MGE2NSwgMHgwMDE4MGE2NSwgMHgwMDE4MGE2OCwgMHgwMDE4MGE2OCwgfSwKLQl7IDB4MWM2OTIwLCAweDA1MTAwMDFjLCAweDA1MTAwMDFjLCAweDA1MTAwMDFjLCAweDA1MTAwMDFjLCB9LAotCXsgMHgxYzY5NjAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIH0sCi0JeyAweDFjNzIwYywgMHgwMTJlODE2MCwgMHgwMTJlODE2MCwgMHgwMTJhODE2MCwgMHgwMTJhODE2MCwgfSwKLQl7IDB4MWM3MjZjLCAweDA5MjQ5MTI2LCAweDA5MjQ5MTI2LCAweDA5MjQ5MTI2LCAweDA5MjQ5MTI2LCB9LAotCXsgMHgxYzc4NDgsIDB4MDAxODBhNjUsIDB4MDAxODBhNjUsIDB4MDAxODBhNjgsIDB4MDAxODBhNjgsIH0sCi0JeyAweDFjNzkyMCwgMHgwNTEwMDAxYywgMHgwNTEwMDAxYywgMHgwNTEwMDAxYywgMHgwNTEwMDAxYywgfSwKLQl7IDB4MWM3OTYwLCAweDAwMDA5YjQwLCAweDAwMDA5YjQwLCAweDAwMDA5YjQwLCAweDAwMDA5YjQwLCB9LAotCXsgMHgxYzgyMGMsIDB4MDEyZTgxNjAsIDB4MDEyZTgxNjAsIDB4MDEyYTgxNjAsIDB4MDEyYTgxNjAsIH0sCi0JeyAweDFjODI2YywgMHgwOTI0OTEyNiwgMHgwOTI0OTEyNiwgMHgwOTI0OTEyNiwgMHgwOTI0OTEyNiwgfSwKLS8qCXsgMHgxYzg4NjQsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIH0sICovCi0JeyAweDFjODg2NCwgMHgwMDAxYzYwMCwgMHgwMDAxYzYwMCwgMHgwMDAxYzYwMCwgMHgwMDAxYzYwMCwgfSwKLQl7IDB4MWM4OTVjLCAweDAwNGI2YThlLCAweDAwNGI2YThlLCAweDAwNGI2YThlLCAweDAwNGI2YThlLCB9LAotCXsgMHgxYzg5NjgsIDB4MDAwMDAzY2UsIDB4MDAwMDAzY2UsIDB4MDAwMDAzY2UsIDB4MDAwMDAzY2UsIH0sCi0JeyAweDFjODliYywgMHgwMDE4MTQwMCwgMHgwMDE4MTQwMCwgMHgwMDE4MTQwMCwgMHgwMDE4MTQwMCwgfSwKLQl7IDB4MWM5MjcwLCAweDAwODIwODIwLCAweDAwODIwODIwLCAweDAwODIwODIwLCAweDAwODIwODIwLCB9LAotCXsgMHgxYzkzNWMsIDB4MDY2YzQyMGYsIDB4MDY2YzQyMGYsIDB4MDY2YzQyMGYsIDB4MDY2YzQyMGYsIH0sCi0JeyAweDFjOTM2MCwgMHgwZjI4MjIwNywgMHgwZjI4MjIwNywgMHgwZjI4MjIwNywgMHgwZjI4MjIwNywgfSwKLQl7IDB4MWM5MzY0LCAweDE3NjAxNjg1LCAweDE3NjAxNjg1LCAweDE3NjAxNjg1LCAweDE3NjAxNjg1LCB9LAotCXsgMHgxYzkzNjgsIDB4MWY4MDExMDQsIDB4MWY4MDExMDQsIDB4MWY4MDExMDQsIDB4MWY4MDExMDQsIH0sCi0JeyAweDFjOTM2YywgMHgzN2EwMGMwMywgMHgzN2EwMGMwMywgMHgzN2EwMGMwMywgMHgzN2EwMGMwMywgfSwKLQl7IDB4MWM5MzcwLCAweDNmYzQwODgzLCAweDNmYzQwODgzLCAweDNmYzQwODgzLCAweDNmYzQwODgzLCB9LAotCXsgMHgxYzkzNzQsIDB4NTdjMDA4MDMsIDB4NTdjMDA4MDMsIDB4NTdjMDA4MDMsIDB4NTdjMDA4MDMsIH0sCi0JeyAweDFjOTM3OCwgMHg1ZmQ4MDY4MiwgMHg1ZmQ4MDY4MiwgMHg1ZmQ4MDY4MiwgMHg1ZmQ4MDY4MiwgfSwKLQl7IDB4MWM5MzdjLCAweDdmZTAwNDgyLCAweDdmZTAwNDgyLCAweDdmZTAwNDgyLCAweDdmZTAwNDgyLCB9LAotCXsgMHgxYzkzODAsIDB4N2YzYzdiYmEsIDB4N2YzYzdiYmEsIDB4N2YzYzdiYmEsIDB4N2YzYzdiYmEsIH0sCi0JeyAweDFjOTM4NCwgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCwgfQotfTsKLQotLyoKLSAqIGxvb2sgdXAgYSBjZXJ0YWluIHJlZ2lzdGVyIGluIGFyNTQxNl9waHlfaW5pdFtdIGFuZCByZXR1cm4gdGhlIGluaXQuIHZhbHVlCi0gKiBmb3IgdGhlIGJhbmQgYW5kIGJhbmR3aWR0aCBnaXZlbi4gUmV0dXJuIDAgaWYgcmVnaXN0ZXIgYWRkcmVzcyBub3QgZm91bmQuCi0gKi8KLXN0YXRpYyB1MzIgYXI5MTcwX2dldF9kZWZhdWx0X3BoeV9yZWdfdmFsKHUzMiByZWcsIGJvb2wgaXNfMmdoeiwgYm9vbCBpc180MG1oeikKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhcjU0MTZfcGh5X2luaXQpOyBpKyspIHsKLQkJaWYgKGFyNTQxNl9waHlfaW5pdFtpXS5yZWcgIT0gcmVnKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGlzXzJnaHopIHsKLQkJCWlmIChpc180MG1oeikKLQkJCQlyZXR1cm4gYXI1NDE2X3BoeV9pbml0W2ldLl8yZ2h6XzQwOwotCQkJZWxzZQotCQkJCXJldHVybiBhcjU0MTZfcGh5X2luaXRbaV0uXzJnaHpfMjA7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoaXNfNDBtaHopCi0JCQkJcmV0dXJuIGFyNTQxNl9waHlfaW5pdFtpXS5fNWdoel80MDsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gYXI1NDE2X3BoeV9pbml0W2ldLl81Z2h6XzIwOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi0vKgotICogaW5pdGlhbGl6ZSBzb21lIHBoeSByZWdzIGZyb20gZWVwcm9tIHZhbHVlcyBpbiBtb2RhbF9oZWFkZXJbXQotICogYWNjLiB0byBiYW5kIGFuZCBiYW5kd2lkdGgKLSAqLwotc3RhdGljIGludCBhcjkxNzBfaW5pdF9waHlfZnJvbV9lZXByb20oc3RydWN0IGFyOTE3MCAqYXIsCi0JCQkJYm9vbCBpc18yZ2h6LCBib29sIGlzXzQwbWh6KQotewotCXN0YXRpYyBjb25zdCB1OCB4cGQycGRbMTZdID0gewotCQkweDIsIDB4MiwgMHgyLCAweDEsIDB4MiwgMHgyLCAweDYsIDB4MiwKLQkJMHgyLCAweDMsIDB4NywgMHgyLCAweEIsIDB4MiwgMHgyLCAweDIKLQl9OwotCXUzMiBkZWZ2YWwsIG5ld3ZhbDsKLQkvKiBwb2ludGVyIHRvIHRoZSBtb2RhbF9oZWFkZXIgYWNjLiB0byBiYW5kICovCi0Jc3RydWN0IGFyOTE3MF9lZXByb21fbW9kYWwgKm0gPSAmYXItPmVlcHJvbS5tb2RhbF9oZWFkZXJbaXNfMmdoel07Ci0KLQlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOwotCi0JLyogYW50IGNvbW1vbiBjb250cm9sIChpbmRleCAwKSAqLwotCW5ld3ZhbCA9IGxlMzJfdG9fY3B1KG0tPmFudEN0cmxDb21tb24pOwotCWFyOTE3MF9yZWd3cml0ZSgweDFjNTk2NCwgbmV3dmFsKTsKLQotCS8qIGFudCBjb250cm9sIGNoYWluIDAgKGluZGV4IDEpICovCi0JbmV3dmFsID0gbGUzMl90b19jcHUobS0+YW50Q3RybENoYWluWzBdKTsKLQlhcjkxNzBfcmVnd3JpdGUoMHgxYzU5NjAsIG5ld3ZhbCk7Ci0KLQkvKiBhbnQgY29udHJvbCBjaGFpbiAyIChpbmRleCAyKSAqLwotCW5ld3ZhbCA9IGxlMzJfdG9fY3B1KG0tPmFudEN0cmxDaGFpblsxXSk7Ci0JYXI5MTcwX3JlZ3dyaXRlKDB4MWM3OTYwLCBuZXd2YWwpOwotCi0JLyogU3dTZXR0bGUgKGluZGV4IDMpICovCi0JaWYgKCFpc180MG1oeikgewotCQlkZWZ2YWwgPSBhcjkxNzBfZ2V0X2RlZmF1bHRfcGh5X3JlZ192YWwoMHgxYzU4NDQsCi0JCQkJCQkJaXNfMmdoeiwgaXNfNDBtaHopOwotCQluZXd2YWwgPSAoZGVmdmFsICYgfjB4M2Y4MCkgfAotCQkJKChtLT5zd2l0Y2hTZXR0bGluZyAmIDB4N2YpIDw8IDcpOwotCQlhcjkxNzBfcmVnd3JpdGUoMHgxYzU4NDQsIG5ld3ZhbCk7Ci0JfQotCi0JLyogYWRjRGVzaXJlZCwgcGRhRGVzaXJlZCAoaW5kZXggNCkgKi8KLQlkZWZ2YWwgPSBhcjkxNzBfZ2V0X2RlZmF1bHRfcGh5X3JlZ192YWwoMHgxYzU4NTAsIGlzXzJnaHosIGlzXzQwbWh6KTsKLQluZXd2YWwgPSAoZGVmdmFsICYgfjB4ZmZmZikgfCAoKHU4KW0tPnBnYURlc2lyZWRTaXplIDw8IDgpIHwKLQkJKCh1OCltLT5hZGNEZXNpcmVkU2l6ZSk7Ci0JYXI5MTcwX3JlZ3dyaXRlKDB4MWM1ODUwLCBuZXd2YWwpOwotCi0JLyogVHhFbmRUb1hwYU9mZiwgVHhGcmFtZVRvWHBhT24gKGluZGV4IDUpICovCi0JZGVmdmFsID0gYXI5MTcwX2dldF9kZWZhdWx0X3BoeV9yZWdfdmFsKDB4MWM1ODM0LCBpc18yZ2h6LCBpc180MG1oeik7Ci0JbmV3dmFsID0gKG0tPnR4RW5kVG9YcGFPZmYgPDwgMjQpIHwgKG0tPnR4RW5kVG9YcGFPZmYgPDwgMTYpIHwKLQkJKG0tPnR4RnJhbWVUb1hwYU9uIDw8IDgpIHwgbS0+dHhGcmFtZVRvWHBhT247Ci0JYXI5MTcwX3JlZ3dyaXRlKDB4MWM1ODM0LCBuZXd2YWwpOwotCi0JLyogVHhFbmRUb1J4T24gKGluZGV4IDYpICovCi0JZGVmdmFsID0gYXI5MTcwX2dldF9kZWZhdWx0X3BoeV9yZWdfdmFsKDB4MWM1ODI4LCBpc18yZ2h6LCBpc180MG1oeik7Ci0JbmV3dmFsID0gKGRlZnZhbCAmIH4weGZmMDAwMCkgfCAobS0+dHhFbmRUb1J4T24gPDwgMTYpOwotCWFyOTE3MF9yZWd3cml0ZSgweDFjNTgyOCwgbmV3dmFsKTsKLQotCS8qIHRocmVzaDYyIChpbmRleCA3KSAqLwotCWRlZnZhbCA9IGFyOTE3MF9nZXRfZGVmYXVsdF9waHlfcmVnX3ZhbCgweDFjODg2NCwgaXNfMmdoeiwgaXNfNDBtaHopOwotCW5ld3ZhbCA9IChkZWZ2YWwgJiB+MHg3ZjAwMCkgfCAobS0+dGhyZXNoNjIgPDwgMTIpOwotCWFyOTE3MF9yZWd3cml0ZSgweDFjODg2NCwgbmV3dmFsKTsKLQotCS8qIHR4L3J4IGF0dGVudWF0aW9uIGNoYWluIDAgKGluZGV4IDgpICovCi0JZGVmdmFsID0gYXI5MTcwX2dldF9kZWZhdWx0X3BoeV9yZWdfdmFsKDB4MWM1ODQ4LCBpc18yZ2h6LCBpc180MG1oeik7Ci0JbmV3dmFsID0gKGRlZnZhbCAmIH4weDNmMDAwKSB8ICgobS0+dHhSeEF0dGVuQ2hbMF0gJiAweDNmKSA8PCAxMik7Ci0JYXI5MTcwX3JlZ3dyaXRlKDB4MWM1ODQ4LCBuZXd2YWwpOwotCi0JLyogdHgvcnggYXR0ZW51YXRpb24gY2hhaW4gMiAoaW5kZXggOSkgKi8KLQlkZWZ2YWwgPSBhcjkxNzBfZ2V0X2RlZmF1bHRfcGh5X3JlZ192YWwoMHgxYzc4NDgsIGlzXzJnaHosIGlzXzQwbWh6KTsKLQluZXd2YWwgPSAoZGVmdmFsICYgfjB4M2YwMDApIHwgKChtLT50eFJ4QXR0ZW5DaFsxXSAmIDB4M2YpIDw8IDEyKTsKLQlhcjkxNzBfcmVnd3JpdGUoMHgxYzc4NDgsIG5ld3ZhbCk7Ci0KLQkvKiB0eC9yeCBtYXJnaW4gY2hhaW4gMCAoaW5kZXggMTApICovCi0JZGVmdmFsID0gYXI5MTcwX2dldF9kZWZhdWx0X3BoeV9yZWdfdmFsKDB4MWM2MjBjLCBpc18yZ2h6LCBpc180MG1oeik7Ci0JbmV3dmFsID0gKGRlZnZhbCAmIH4weGZjMDAwMCkgfCAoKG0tPnJ4VHhNYXJnaW5DaFswXSAmIDB4M2YpIDw8IDE4KTsKLQkvKiBic3cgbWFyZ2luIGNoYWluIDAgZm9yIDVHSHogb25seSAqLwotCWlmICghaXNfMmdoeikKLQkJbmV3dmFsID0gKG5ld3ZhbCAmIH4weDNjMDApIHwgKChtLT5ic3dNYXJnaW5bMF0gJiAweGYpIDw8IDEwKTsKLQlhcjkxNzBfcmVnd3JpdGUoMHgxYzYyMGMsIG5ld3ZhbCk7Ci0KLQkvKiB0eC9yeCBtYXJnaW4gY2hhaW4gMiAoaW5kZXggMTEpICovCi0JZGVmdmFsID0gYXI5MTcwX2dldF9kZWZhdWx0X3BoeV9yZWdfdmFsKDB4MWM4MjBjLCBpc18yZ2h6LCBpc180MG1oeik7Ci0JbmV3dmFsID0gKGRlZnZhbCAmIH4weGZjMDAwMCkgfCAoKG0tPnJ4VHhNYXJnaW5DaFsxXSAmIDB4M2YpIDw8IDE4KTsKLQlhcjkxNzBfcmVnd3JpdGUoMHgxYzgyMGMsIG5ld3ZhbCk7Ci0KLQkvKiBpcUNhbGwsIGlxQ2FsbHEgY2hhaW4gMCAoaW5kZXggMTIpICovCi0JZGVmdmFsID0gYXI5MTcwX2dldF9kZWZhdWx0X3BoeV9yZWdfdmFsKDB4MWM1OTIwLCBpc18yZ2h6LCBpc180MG1oeik7Ci0JbmV3dmFsID0gKGRlZnZhbCAmIH4weDdmZikgfCAoKCh1OCltLT5pcUNhbElDaFswXSAmIDB4M2YpIDw8IDUpIHwKLQkJKCh1OCltLT5pcUNhbFFDaFswXSAmIDB4MWYpOwotCWFyOTE3MF9yZWd3cml0ZSgweDFjNTkyMCwgbmV3dmFsKTsKLQotCS8qIGlxQ2FsbCwgaXFDYWxscSBjaGFpbiAyIChpbmRleCAxMykgKi8KLQlkZWZ2YWwgPSBhcjkxNzBfZ2V0X2RlZmF1bHRfcGh5X3JlZ192YWwoMHgxYzc5MjAsIGlzXzJnaHosIGlzXzQwbWh6KTsKLQluZXd2YWwgPSAoZGVmdmFsICYgfjB4N2ZmKSB8ICgoKHU4KW0tPmlxQ2FsSUNoWzFdICYgMHgzZikgPDwgNSkgfAotCQkoKHU4KW0tPmlxQ2FsUUNoWzFdICYgMHgxZik7Ci0JYXI5MTcwX3JlZ3dyaXRlKDB4MWM3OTIwLCBuZXd2YWwpOwotCi0JLyogeHBkIGdhaW4gbWFzayAoaW5kZXggMTQpICovCi0JZGVmdmFsID0gYXI5MTcwX2dldF9kZWZhdWx0X3BoeV9yZWdfdmFsKDB4MWM2MjU4LCBpc18yZ2h6LCBpc180MG1oeik7Ci0JbmV3dmFsID0gKGRlZnZhbCAmIH4weGYwMDAwKSB8ICh4cGQycGRbbS0+eHBkR2FpbiAmIDB4Zl0gPDwgMTYpOwotCWFyOTE3MF9yZWd3cml0ZSgweDFjNjI1OCwgbmV3dmFsKTsKLQlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7Ci0KLQlyZXR1cm4gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOwotfQotCi1pbnQgYXI5MTcwX2luaXRfcGh5KHN0cnVjdCBhcjkxNzAgKmFyLCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCi17Ci0JaW50IGksIGVycjsKLQl1MzIgdmFsOwotCWJvb2wgaXNfMmdoeiA9IGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWjsKLQlib29sIGlzXzQwbWh6ID0gY29uZl9pc19odDQwKCZhci0+aHctPmNvbmYpOwotCi0JYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFyNTQxNl9waHlfaW5pdCk7IGkrKykgewotCQlpZiAoaXNfNDBtaHopIHsKLQkJCWlmIChpc18yZ2h6KQotCQkJCXZhbCA9IGFyNTQxNl9waHlfaW5pdFtpXS5fMmdoel80MDsKLQkJCWVsc2UKLQkJCQl2YWwgPSBhcjU0MTZfcGh5X2luaXRbaV0uXzVnaHpfNDA7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoaXNfMmdoeikKLQkJCQl2YWwgPSBhcjU0MTZfcGh5X2luaXRbaV0uXzJnaHpfMjA7Ci0JCQllbHNlCi0JCQkJdmFsID0gYXI1NDE2X3BoeV9pbml0W2ldLl81Z2h6XzIwOwotCQl9Ci0KLQkJYXI5MTcwX3JlZ3dyaXRlKGFyNTQxNl9waHlfaW5pdFtpXS5yZWcsIHZhbCk7Ci0JfQotCi0JYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOwotCWVyciA9IGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gYXI5MTcwX2luaXRfcGh5X2Zyb21fZWVwcm9tKGFyLCBpc18yZ2h6LCBpc180MG1oeik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IGFyOTE3MF9pbml0X3Bvd2VyX2NhbChhcik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCS8qIFhYWDogcmVtb3ZlIG1hZ2ljISAqLwotCWlmIChpc18yZ2h6KQotCQllcnIgPSBhcjkxNzBfd3JpdGVfcmVnKGFyLCAweDFkNDAxNCwgMHg1MTYzKTsKLQllbHNlCi0JCWVyciA9IGFyOTE3MF93cml0ZV9yZWcoYXIsIDB4MWQ0MDE0LCAweDUxNDMpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RydWN0IGFyOTE3MF9yZl9pbml0IHsKLQl1MzIgcmVnLCBfNWdoeiwgXzJnaHo7Ci19OwotCi1zdGF0aWMgc3RydWN0IGFyOTE3MF9yZl9pbml0IGFyOTE3MF9yZl9pbml0W10gPSB7Ci0gICAgIC8qIGJhbmsgMCAqLwotICAgICB7IDB4MWM1OGIwLCAgMHgxZTU3OTVlNSwgIDB4MWU1Nzk1ZTV9LAotICAgICB7IDB4MWM1OGUwLCAgMHgwMjAwODAyMCwgIDB4MDIwMDgwMjB9LAotICAgICAvKiBiYW5rIDEgKi8KLSAgICAgeyAweDFjNThiMCwgIDB4MDIxMDg0MjEsICAweDAyMTA4NDIxfSwKLSAgICAgeyAweDFjNThlYywgIDB4MDAwMDAwMDgsICAweDAwMDAwMDA4fSwKLSAgICAgLyogYmFuayAyICovCi0gICAgIHsgMHgxYzU4YjAsICAweDBlNzNmZjE3LCAgMHgwZTczZmYxN30sCi0gICAgIHsgMHgxYzU4ZTAsICAweDAwMDAwNDIwLCAgMHgwMDAwMDQyMH0sCi0gICAgIC8qIGJhbmsgMyAqLwotICAgICB7IDB4MWM1OGYwLCAgMHgwMTQwMDAxOCwgIDB4MDFjMDAwMTh9LAotICAgICAvKiBiYW5rIDQgKi8KLSAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAxYTEsICAweDAwMDAwMWExfSwKLSAgICAgeyAweDFjNThlOCwgIDB4MDAwMDAwMDEsICAweDAwMDAwMDAxfSwKLSAgICAgLyogYmFuayA1ICovCi0gICAgIHsgMHgxYzU4YjAsICAweDAwMDAwMDEzLCAgMHgwMDAwMDAxM30sCi0gICAgIHsgMHgxYzU4ZTQsICAweDAwMDAwMDAyLCAgMHgwMDAwMDAwMn0sCi0gICAgIC8qIGJhbmsgNiAqLwotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDAwMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDAwMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDAwMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDAwMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDAwMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNDAwMCwgIDB4MDAwMDQwMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNmMwMCwgIDB4MDAwMDZjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMmMwMCwgIDB4MDAwMDJjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNDgwMCwgIDB4MDAwMDQ4MDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNDAwMCwgIDB4MDAwMDQwMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNjAwMCwgIDB4MDAwMDYwMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMTAwMCwgIDB4MDAwMDEwMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNDAwMCwgIDB4MDAwMDQwMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDA4N2MwMCwgIDB4MDAwODdjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNTQwMCwgIDB4MDAwMDU0MDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMGMwMCwgIDB4MDAwMDBjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMTgwMCwgIDB4MDAwMDE4MDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNmMwMCwgIDB4MDAwMDZjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNmMwMCwgIDB4MDAwMDZjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMmMwMCwgIDB4MDAwMDJjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwM2MwMCwgIDB4MDAwMDNjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMzgwMCwgIDB4MDAwMDM4MDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMWMwMCwgIDB4MDAwMDFjMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDgwMCwgIDB4MDAwMDA4MDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDQwOCwgIDB4MDAwMDA0MDh9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNGMxNSwgIDB4MDAwMDRjMTV9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNDE4OCwgIDB4MDAwMDQxODh9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMjAxZSwgIDB4MDAwMDIwMWV9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAxMDQwOCwgIDB4MDAwMTA0MDh9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDgwMSwgIDB4MDAwMDA4MDF9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMGMwOCwgIDB4MDAwMDBjMDh9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMTgxZSwgIDB4MDAwMDE4MWV9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMTAxNiwgIDB4MDAwMDEwMTZ9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMjgwMCwgIDB4MDAwMDI4MDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNDAxMCwgIDB4MDAwMDQwMTB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDgxYywgIDB4MDAwMDA4MWN9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDExNSwgIDB4MDAwMDAxMTV9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAxNSwgIDB4MDAwMDAwMTV9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDA2NiwgIDB4MDAwMDAwNjZ9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAxYywgIDB4MDAwMDAwMWN9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDAwMDB9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAwNCwgIDB4MDAwMDAwMDR9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAxNSwgIDB4MDAwMDAwMTV9LAotICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAxZiwgIDB4MDAwMDAwMWZ9LAotICAgICB7IDB4MWM1OGUwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDA0MDB9LAotICAgICAvKiBiYW5rIDcgKi8KLSAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAwYTAsICAweDAwMDAwMGEwfSwKLSAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAwMDAsICAweDAwMDAwMDAwfSwKLSAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAwNDAsICAweDAwMDAwMDQwfSwKLSAgICAgeyAweDFjNThmMCwgIDB4MDAwMDAwMWMsICAweDAwMDAwMDFjfSwKLX07Ci0KLXN0YXRpYyBpbnQgYXI5MTcwX2luaXRfcmZfYmFua3NfMF83KHN0cnVjdCBhcjkxNzAgKmFyLCBib29sIGJhbmQ1Z2h6KQotewotCWludCBlcnIsIGk7Ci0KLQlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXI5MTcwX3JmX2luaXQpOyBpKyspCi0JCWFyOTE3MF9yZWd3cml0ZShhcjkxNzBfcmZfaW5pdFtpXS5yZWcsCi0JCQkJYmFuZDVnaHogPyBhcjkxNzBfcmZfaW5pdFtpXS5fNWdoegotCQkJCQkgOiBhcjkxNzBfcmZfaW5pdFtpXS5fMmdoeik7Ci0KLQlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7Ci0JZXJyID0gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOwotCWlmIChlcnIpCi0JCXdpcGh5X2Vycihhci0+aHctPndpcGh5LCAicmYgaW5pdCBmYWlsZWRcbiIpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgYXI5MTcwX2luaXRfcmZfYmFuazRfcHdyKHN0cnVjdCBhcjkxNzAgKmFyLCBib29sIGJhbmQ1Z2h6LAotCQkJCSAgICB1MzIgZnJlcSwgZW51bSBhcjkxNzBfYncgYncpCi17Ci0JaW50IGVycjsKLQl1MzIgZDAsIGQxLCB0ZDAsIHRkMSwgZmQwLCBmZDE7Ci0JdTggY2hhbnNlbDsKLQl1OCByZWZzZWwwID0gMSwgcmVmc2VsMSA9IDA7Ci0JdTggbGZfc3ludGggPSAwOwotCi0Jc3dpdGNoIChidykgewotCWNhc2UgQVI5MTcwX0JXXzQwX0FCT1ZFOgotCQlmcmVxICs9IDEwOwotCQlicmVhazsKLQljYXNlIEFSOTE3MF9CV180MF9CRUxPVzoKLQkJZnJlcSAtPSAxMDsKLQkJYnJlYWs7Ci0JY2FzZSBBUjkxNzBfQldfMjA6Ci0JCWJyZWFrOwotCWNhc2UgX19BUjkxNzBfTlVNX0JXOgotCQlCVUcoKTsKLQl9Ci0KLQlpZiAoYmFuZDVnaHopIHsKLQkJaWYgKGZyZXEgJSAxMCkgewotCQkJY2hhbnNlbCA9IChmcmVxIC0gNDgwMCkgLyA1OwotCQl9IGVsc2UgewotCQkJY2hhbnNlbCA9ICgoZnJlcSAtIDQ4MDApIC8gMTApICogMjsKLQkJCXJlZnNlbDAgPSAwOwotCQkJcmVmc2VsMSA9IDE7Ci0JCX0KLQkJY2hhbnNlbCA9IGJ5dGVfcmV2X3RhYmxlW2NoYW5zZWxdOwotCX0gZWxzZSB7Ci0JCWlmIChmcmVxID09IDI0ODQpIHsKLQkJCWNoYW5zZWwgPSAxMCArIChmcmVxIC0gMjI3NCkgLyA1OwotCQkJbGZfc3ludGggPSAxOwotCQl9IGVsc2UKLQkJCWNoYW5zZWwgPSAxNiArIChmcmVxIC0gMjI3MikgLyA1OwotCQljaGFuc2VsICo9IDQ7Ci0JCWNoYW5zZWwgPSBieXRlX3Jldl90YWJsZVtjaGFuc2VsXTsKLQl9Ci0KLQlkMSA9CWNoYW5zZWw7Ci0JZDAgPQkweDIxIHwKLQkJcmVmc2VsMCA8PCAzIHwKLQkJcmVmc2VsMSA8PCAyIHwKLQkJbGZfc3ludGggPDwgMTsKLQl0ZDAgPQlkMCAmIDB4MWY7Ci0JdGQxID0JZDEgJiAweDFmOwotCWZkMCA9CXRkMSA8PCA1IHwgdGQwOwotCi0JdGQwID0JKGQwID4+IDUpICYgMHg3OwotCXRkMSA9CShkMSA+PiA1KSAmIDB4NzsKLQlmZDEgPQl0ZDEgPDwgNSB8IHRkMDsKLQotCWFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcik7Ci0KLQlhcjkxNzBfcmVnd3JpdGUoMHgxYzU4YjAsIGZkMCk7Ci0JYXI5MTcwX3JlZ3dyaXRlKDB4MWM1OGU4LCBmZDEpOwotCi0JYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOwotCWVyciA9IGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JbXNsZWVwKDEwKTsKLQotCXJldHVybiAwOwotfQotCi1zdHJ1Y3QgYXI5MTcwX3BoeV9mcmVxX3BhcmFtcyB7Ci0JdTggY29lZmZfZXhwOwotCXUxNiBjb2VmZl9tYW47Ci0JdTggY29lZmZfZXhwX3NoZ2k7Ci0JdTE2IGNvZWZmX21hbl9zaGdpOwotfTsKLQotc3RydWN0IGFyOTE3MF9waHlfZnJlcV9lbnRyeSB7Ci0JdTE2IGZyZXE7Ci0Jc3RydWN0IGFyOTE3MF9waHlfZnJlcV9wYXJhbXMgcGFyYW1zW19fQVI5MTcwX05VTV9CV107Ci19OwotCi0vKiBOQjogbXVzdCBiZSBpbiBzeW5jIHdpdGggY2hhbm5lbCB0YWJsZXMgaW4gbWFpbiEgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXI5MTcwX3BoeV9mcmVxX2VudHJ5IGFyOTE3MF9waHlfZnJlcV9wYXJhbXNbXSA9IHsKLS8qCi0gKglmcmVxLAotICoJCTIwTUh6LAotICoJCTQwTUh6IChiZWxvdyksCi0gKgkJNDBNaHogKGFib3ZlKSwKLSAqLwotCXsgMjQxMiwgewotCQl7IDMsIDIxNzM3LCAzLCAxOTU2MywgfSwKLQkJeyAzLCAyMTgyNywgMywgMTk2NDQsIH0sCi0JCXsgMywgMjE2NDcsIDMsIDE5NDgyLCB9LAotCX0gfSwKLQl7IDI0MTcsIHsKLQkJeyAzLCAyMTY5MiwgMywgMTk1MjMsIH0sCi0JCXsgMywgMjE3ODIsIDMsIDE5NjA0LCB9LAotCQl7IDMsIDIxNjAyLCAzLCAxOTQ0MiwgfSwKLQl9IH0sCi0JeyAyNDIyLCB7Ci0JCXsgMywgMjE2NDcsIDMsIDE5NDgyLCB9LAotCQl7IDMsIDIxNzM3LCAzLCAxOTU2MywgfSwKLQkJeyAzLCAyMTU1OCwgMywgMTk0MDIsIH0sCi0JfSB9LAotCXsgMjQyNywgewotCQl7IDMsIDIxNjAyLCAzLCAxOTQ0MiwgfSwKLQkJeyAzLCAyMTY5MiwgMywgMTk1MjMsIH0sCi0JCXsgMywgMjE1MTQsIDMsIDE5MzYyLCB9LAotCX0gfSwKLQl7IDI0MzIsIHsKLQkJeyAzLCAyMTU1OCwgMywgMTk0MDIsIH0sCi0JCXsgMywgMjE2NDcsIDMsIDE5NDgyLCB9LAotCQl7IDMsIDIxNDcwLCAzLCAxOTMyMywgfSwKLQl9IH0sCi0JeyAyNDM3LCB7Ci0JCXsgMywgMjE1MTQsIDMsIDE5MzYyLCB9LAotCQl7IDMsIDIxNjAyLCAzLCAxOTQ0MiwgfSwKLQkJeyAzLCAyMTQyNiwgMywgMTkyODMsIH0sCi0JfSB9LAotCXsgMjQ0MiwgewotCQl7IDMsIDIxNDcwLCAzLCAxOTMyMywgfSwKLQkJeyAzLCAyMTU1OCwgMywgMTk0MDIsIH0sCi0JCXsgMywgMjEzODIsIDMsIDE5MjQ0LCB9LAotCX0gfSwKLQl7IDI0NDcsIHsKLQkJeyAzLCAyMTQyNiwgMywgMTkyODMsIH0sCi0JCXsgMywgMjE1MTQsIDMsIDE5MzYyLCB9LAotCQl7IDMsIDIxMzM5LCAzLCAxOTIwNSwgfSwKLQl9IH0sCi0JeyAyNDUyLCB7Ci0JCXsgMywgMjEzODIsIDMsIDE5MjQ0LCB9LAotCQl7IDMsIDIxNDcwLCAzLCAxOTMyMywgfSwKLQkJeyAzLCAyMTI5NSwgMywgMTkxNjYsIH0sCi0JfSB9LAotCXsgMjQ1NywgewotCQl7IDMsIDIxMzM5LCAzLCAxOTIwNSwgfSwKLQkJeyAzLCAyMTQyNiwgMywgMTkyODMsIH0sCi0JCXsgMywgMjEyNTIsIDMsIDE5MTI3LCB9LAotCX0gfSwKLQl7IDI0NjIsIHsKLQkJeyAzLCAyMTI5NSwgMywgMTkxNjYsIH0sCi0JCXsgMywgMjEzODIsIDMsIDE5MjQ0LCB9LAotCQl7IDMsIDIxMjA5LCAzLCAxOTA4OCwgfSwKLQl9IH0sCi0JeyAyNDY3LCB7Ci0JCXsgMywgMjEyNTIsIDMsIDE5MTI3LCB9LAotCQl7IDMsIDIxMzM5LCAzLCAxOTIwNSwgfSwKLQkJeyAzLCAyMTE2NiwgMywgMTkwNTAsIH0sCi0JfSB9LAotCXsgMjQ3MiwgewotCQl7IDMsIDIxMjA5LCAzLCAxOTA4OCwgfSwKLQkJeyAzLCAyMTI5NSwgMywgMTkxNjYsIH0sCi0JCXsgMywgMjExMjQsIDMsIDE5MDExLCB9LAotCX0gfSwKLQl7IDI0ODQsIHsKLQkJeyAzLCAyMTEwNywgMywgMTg5OTYsIH0sCi0JCXsgMywgMjExOTIsIDMsIDE5MDczLCB9LAotCQl7IDMsIDIxMDIyLCAzLCAxODkyMCwgfSwKLQl9IH0sCi0JeyA0OTIwLCB7Ci0JCXsgNCwgMjEzMTMsIDQsIDE5MTgxLCB9LAotCQl7IDQsIDIxMzU2LCA0LCAxOTIyMCwgfSwKLQkJeyA0LCAyMTI2OSwgNCwgMTkxNDIsIH0sCi0JfSB9LAotCXsgNDk0MCwgewotCQl7IDQsIDIxMjI2LCA0LCAxOTEwNCwgfSwKLQkJeyA0LCAyMTI2OSwgNCwgMTkxNDIsIH0sCi0JCXsgNCwgMjExODMsIDQsIDE5MDY1LCB9LAotCX0gfSwKLQl7IDQ5NjAsIHsKLQkJeyA0LCAyMTE0MSwgNCwgMTkwMjcsIH0sCi0JCXsgNCwgMjExODMsIDQsIDE5MDY1LCB9LAotCQl7IDQsIDIxMDk4LCA0LCAxODk4OCwgfSwKLQl9IH0sCi0JeyA0OTgwLCB7Ci0JCXsgNCwgMjEwNTYsIDQsIDE4OTUwLCB9LAotCQl7IDQsIDIxMDk4LCA0LCAxODk4OCwgfSwKLQkJeyA0LCAyMTAxNCwgNCwgMTg5MTIsIH0sCi0JfSB9LAotCXsgNTA0MCwgewotCQl7IDQsIDIwODA1LCA0LCAxODcyNSwgfSwKLQkJeyA0LCAyMDg0NiwgNCwgMTg3NjIsIH0sCi0JCXsgNCwgMjA3NjQsIDQsIDE4Njg3LCB9LAotCX0gfSwKLQl7IDUwNjAsIHsKLQkJeyA0LCAyMDcyMywgNCwgMTg2NTEsIH0sCi0JCXsgNCwgMjA3NjQsIDQsIDE4Njg3LCB9LAotCQl7IDQsIDIwNjgyLCA0LCAxODYxNCwgfSwKLQl9IH0sCi0JeyA1MDgwLCB7Ci0JCXsgNCwgMjA2NDEsIDQsIDE4NTc3LCB9LAotCQl7IDQsIDIwNjgyLCA0LCAxODYxNCwgfSwKLQkJeyA0LCAyMDYwMSwgNCwgMTg1NDEsIH0sCi0JfSB9LAotCXsgNTE4MCwgewotCQl7IDQsIDIwMjQzLCA0LCAxODIxOSwgfSwKLQkJeyA0LCAyMDI4MiwgNCwgMTgyNTQsIH0sCi0JCXsgNCwgMjAyMDQsIDQsIDE4MTgzLCB9LAotCX0gfSwKLQl7IDUyMDAsIHsKLQkJeyA0LCAyMDE2NSwgNCwgMTgxNDgsIH0sCi0JCXsgNCwgMjAyMDQsIDQsIDE4MTgzLCB9LAotCQl7IDQsIDIwMTI2LCA0LCAxODExNCwgfSwKLQl9IH0sCi0JeyA1MjIwLCB7Ci0JCXsgNCwgMjAwODgsIDQsIDE4MDc5LCB9LAotCQl7IDQsIDIwMTI2LCA0LCAxODExNCwgfSwKLQkJeyA0LCAyMDA0OSwgNCwgMTgwNDQsIH0sCi0JfSB9LAotCXsgNTI0MCwgewotCQl7IDQsIDIwMDExLCA0LCAxODAxMCwgfSwKLQkJeyA0LCAyMDA0OSwgNCwgMTgwNDQsIH0sCi0JCXsgNCwgMTk5NzMsIDQsIDE3OTc2LCB9LAotCX0gfSwKLQl7IDUyNjAsIHsKLQkJeyA0LCAxOTkzNSwgNCwgMTc5NDEsIH0sCi0JCXsgNCwgMTk5NzMsIDQsIDE3OTc2LCB9LAotCQl7IDQsIDE5ODk3LCA0LCAxNzkwNywgfSwKLQl9IH0sCi0JeyA1MjgwLCB7Ci0JCXsgNCwgMTk4NTksIDQsIDE3ODczLCB9LAotCQl7IDQsIDE5ODk3LCA0LCAxNzkwNywgfSwKLQkJeyA0LCAxOTgyMiwgNCwgMTc4NDAsIH0sCi0JfSB9LAotCXsgNTMwMCwgewotCQl7IDQsIDE5Nzg0LCA0LCAxNzgwNiwgfSwKLQkJeyA0LCAxOTgyMiwgNCwgMTc4NDAsIH0sCi0JCXsgNCwgMTk3NDcsIDQsIDE3NzcyLCB9LAotCX0gfSwKLQl7IDUzMjAsIHsKLQkJeyA0LCAxOTcxMCwgNCwgMTc3MzksIH0sCi0JCXsgNCwgMTk3NDcsIDQsIDE3NzcyLCB9LAotCQl7IDQsIDE5NjczLCA0LCAxNzcwNiwgfSwKLQl9IH0sCi0JeyA1NTAwLCB7Ci0JCXsgNCwgMTkwNjUsIDQsIDE3MTU5LCB9LAotCQl7IDQsIDE5MTAwLCA0LCAxNzE5MCwgfSwKLQkJeyA0LCAxOTAzMCwgNCwgMTcxMjcsIH0sCi0JfSB9LAotCXsgNTUyMCwgewotCQl7IDQsIDE4OTk2LCA0LCAxNzA5NiwgfSwKLQkJeyA0LCAxOTAzMCwgNCwgMTcxMjcsIH0sCi0JCXsgNCwgMTg5NjIsIDQsIDE3MDY1LCB9LAotCX0gfSwKLQl7IDU1NDAsIHsKLQkJeyA0LCAxODkyNywgNCwgMTcwMzUsIH0sCi0JCXsgNCwgMTg5NjIsIDQsIDE3MDY1LCB9LAotCQl7IDQsIDE4ODkzLCA0LCAxNzAwNCwgfSwKLQl9IH0sCi0JeyA1NTYwLCB7Ci0JCXsgNCwgMTg4NTksIDQsIDE2OTczLCB9LAotCQl7IDQsIDE4ODkzLCA0LCAxNzAwNCwgfSwKLQkJeyA0LCAxODgyNSwgNCwgMTY5NDMsIH0sCi0JfSB9LAotCXsgNTU4MCwgewotCQl7IDQsIDE4NzkyLCA0LCAxNjkxMywgfSwKLQkJeyA0LCAxODgyNSwgNCwgMTY5NDMsIH0sCi0JCXsgNCwgMTg3NTgsIDQsIDE2ODgyLCB9LAotCX0gfSwKLQl7IDU2MDAsIHsKLQkJeyA0LCAxODcyNSwgNCwgMTY4NTIsIH0sCi0JCXsgNCwgMTg3NTgsIDQsIDE2ODgyLCB9LAotCQl7IDQsIDE4NjkxLCA0LCAxNjgyMiwgfSwKLQl9IH0sCi0JeyA1NjIwLCB7Ci0JCXsgNCwgMTg2NTgsIDQsIDE2NzkyLCB9LAotCQl7IDQsIDE4NjkxLCA0LCAxNjgyMiwgfSwKLQkJeyA0LCAxODYyNSwgNCwgMTY3NjIsIH0sCi0JfSB9LAotCXsgNTY0MCwgewotCQl7IDQsIDE4NTkyLCA0LCAxNjczMywgfSwKLQkJeyA0LCAxODYyNSwgNCwgMTY3NjIsIH0sCi0JCXsgNCwgMTg1NTksIDQsIDE2NzAzLCB9LAotCX0gfSwKLQl7IDU2NjAsIHsKLQkJeyA0LCAxODUyNiwgNCwgMTY2NzMsIH0sCi0JCXsgNCwgMTg1NTksIDQsIDE2NzAzLCB9LAotCQl7IDQsIDE4NDkzLCA0LCAxNjY0NCwgfSwKLQl9IH0sCi0JeyA1NjgwLCB7Ci0JCXsgNCwgMTg0NjEsIDQsIDE2NjE1LCB9LAotCQl7IDQsIDE4NDkzLCA0LCAxNjY0NCwgfSwKLQkJeyA0LCAxODQyOCwgNCwgMTY1ODYsIH0sCi0JfSB9LAotCXsgNTcwMCwgewotCQl7IDQsIDE4Mzk2LCA0LCAxNjU1NiwgfSwKLQkJeyA0LCAxODQyOCwgNCwgMTY1ODYsIH0sCi0JCXsgNCwgMTgzNjQsIDQsIDE2NTI3LCB9LAotCX0gfSwKLQl7IDU3NDUsIHsKLQkJeyA0LCAxODI1MiwgNCwgMTY0MjcsIH0sCi0JCXsgNCwgMTgyODQsIDQsIDE2NDU1LCB9LAotCQl7IDQsIDE4MjIwLCA0LCAxNjM5OCwgfSwKLQl9IH0sCi0JeyA1NzY1LCB7Ci0JCXsgNCwgMTgxODksIDUsIDMyNzQwLCB9LAotCQl7IDQsIDE4MjIwLCA0LCAxNjM5OCwgfSwKLQkJeyA0LCAxODE1NywgNSwgMzI2ODMsIH0sCi0JfSB9LAotCXsgNTc4NSwgewotCQl7IDQsIDE4MTI2LCA1LCAzMjYyNiwgfSwKLQkJeyA0LCAxODE1NywgNSwgMzI2ODMsIH0sCi0JCXsgNCwgMTgwOTQsIDUsIDMyNTcwLCB9LAotCX0gfSwKLQl7IDU4MDUsIHsKLQkJeyA0LCAxODA2MywgNSwgMzI1MTQsIH0sCi0JCXsgNCwgMTgwOTQsIDUsIDMyNTcwLCB9LAotCQl7IDQsIDE4MDMyLCA1LCAzMjQ1OCwgfSwKLQl9IH0sCi0JeyA1ODI1LCB7Ci0JCXsgNCwgMTgwMDEsIDUsIDMyNDAyLCB9LAotCQl7IDQsIDE4MDMyLCA1LCAzMjQ1OCwgfSwKLQkJeyA0LCAxNzk3MCwgNSwgMzIzNDcsIH0sCi0JfSB9LAotCXsgNTE3MCwgewotCQl7IDQsIDIwMjgyLCA0LCAxODI1NCwgfSwKLQkJeyA0LCAyMDMyMSwgNCwgMTgyODksIH0sCi0JCXsgNCwgMjAyNDMsIDQsIDE4MjE5LCB9LAotCX0gfSwKLQl7IDUxOTAsIHsKLQkJeyA0LCAyMDIwNCwgNCwgMTgxODMsIH0sCi0JCXsgNCwgMjAyNDMsIDQsIDE4MjE5LCB9LAotCQl7IDQsIDIwMTY1LCA0LCAxODE0OCwgfSwKLQl9IH0sCi0JeyA1MjEwLCB7Ci0JCXsgNCwgMjAxMjYsIDQsIDE4MTE0LCB9LAotCQl7IDQsIDIwMTY1LCA0LCAxODE0OCwgfSwKLQkJeyA0LCAyMDA4OCwgNCwgMTgwNzksIH0sCi0JfSB9LAotCXsgNTIzMCwgewotCQl7IDQsIDIwMDQ5LCA0LCAxODA0NCwgfSwKLQkJeyA0LCAyMDA4OCwgNCwgMTgwNzksIH0sCi0JCXsgNCwgMjAwMTEsIDQsIDE4MDEwLCB9LAotCX0gfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXI5MTcwX3BoeV9mcmVxX3BhcmFtcyAqCi1hcjkxNzBfZ2V0X2h3X2R5bl9wYXJhbXMoc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAotCQkJIGVudW0gYXI5MTcwX2J3IGJ3KQotewotCXVuc2lnbmVkIGludCBjaGFuaWR4ID0gMDsKLQl1MTYgZnJlcSA9IDI0MTI7Ci0KLQlpZiAoY2hhbm5lbCkgewotCQljaGFuaWR4ID0gY2hhbm5lbC0+aHdfdmFsdWU7Ci0JCWZyZXEgPSBjaGFubmVsLT5jZW50ZXJfZnJlcTsKLQl9Ci0KLQlCVUdfT04oY2hhbmlkeCA+PSBBUlJBWV9TSVpFKGFyOTE3MF9waHlfZnJlcV9wYXJhbXMpKTsKLQotCUJVSUxEX0JVR19PTihfX0FSOTE3MF9OVU1fQlcgIT0gMyk7Ci0KLQlXQVJOX09OKGFyOTE3MF9waHlfZnJlcV9wYXJhbXNbY2hhbmlkeF0uZnJlcSAhPSBmcmVxKTsKLQotCXJldHVybiAmYXI5MTcwX3BoeV9mcmVxX3BhcmFtc1tjaGFuaWR4XS5wYXJhbXNbYnddOwotfQotCi0KLWludCBhcjkxNzBfaW5pdF9yZihzdHJ1Y3QgYXI5MTcwICphcikKLXsKLQljb25zdCBzdHJ1Y3QgYXI5MTcwX3BoeV9mcmVxX3BhcmFtcyAqZnJlcXBhcjsKLQlfX2xlMzIgY21kWzddOwotCWludCBlcnI7Ci0KLQllcnIgPSBhcjkxNzBfaW5pdF9yZl9iYW5rc18wXzcoYXIsIGZhbHNlKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gYXI5MTcwX2luaXRfcmZfYmFuazRfcHdyKGFyLCBmYWxzZSwgMjQxMiwgQVI5MTcwX0JXXzIwKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZnJlcXBhciA9IGFyOTE3MF9nZXRfaHdfZHluX3BhcmFtcyhOVUxMLCBBUjkxNzBfQldfMjApOwotCi0JY21kWzBdID0gY3B1X3RvX2xlMzIoMjQxMiAqIDEwMDApOwotCWNtZFsxXSA9IGNwdV90b19sZTMyKDApOwotCWNtZFsyXSA9IGNwdV90b19sZTMyKDEpOwotCWNtZFszXSA9IGNwdV90b19sZTMyKGZyZXFwYXItPmNvZWZmX2V4cCk7Ci0JY21kWzRdID0gY3B1X3RvX2xlMzIoZnJlcXBhci0+Y29lZmZfbWFuKTsKLQljbWRbNV0gPSBjcHVfdG9fbGUzMihmcmVxcGFyLT5jb2VmZl9leHBfc2hnaSk7Ci0JY21kWzZdID0gY3B1X3RvX2xlMzIoZnJlcXBhci0+Y29lZmZfbWFuX3NoZ2kpOwotCi0JLyogUkZfSU5JVCBlY2hvZXMgdGhlIGNvbW1hbmQgYmFjayB0byB1cyAqLwotCWVyciA9IGFyLT5leGVjX2NtZChhciwgQVI5MTcwX0NNRF9SRl9JTklULAotCQkJICAgc2l6ZW9mKGNtZCksICh1OCAqKWNtZCwKLQkJCSAgIHNpemVvZihjbWQpLCAodTggKiljbWQpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQltc2xlZXAoMTAwMCk7Ci0KLQlyZXR1cm4gYXI5MTcwX2VjaG9fdGVzdChhciwgMHhhYWJiY2NkZCk7Ci19Ci0KLXN0YXRpYyBpbnQgYXI5MTcwX2ZpbmRfZnJlcV9pZHgoaW50IG5mcmVxcywgdTggKmZyZXFzLCB1OCBmKQotewotCWludCBpZHggPSBuZnJlcXMgLSAyOwotCi0Jd2hpbGUgKGlkeCA+PSAwKSB7Ci0JCWlmIChmID49IGZyZXFzW2lkeF0pCi0JCQlyZXR1cm4gaWR4OwotCQlpZHgtLTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHMzMiBhcjkxNzBfaW50ZXJwb2xhdGVfczMyKHMzMiB4LCBzMzIgeDEsIHMzMiB5MSwgczMyIHgyLCBzMzIgeTIpCi17Ci0JLyogbm90aGluZyB0byBpbnRlcnBvbGF0ZSwgaXQncyBob3Jpem9udGFsICovCi0JaWYgKHkyID09IHkxKQotCQlyZXR1cm4geTE7Ci0KLQkvKiBjaGVjayBpZiB3ZSBoaXQgb25lIG9mIHRoZSBlZGdlcyAqLwotCWlmICh4ID09IHgxKQotCQlyZXR1cm4geTE7Ci0JaWYgKHggPT0geDIpCi0JCXJldHVybiB5MjsKLQotCS8qIHgxID09IHgyIGlzIGJhZCwgaG9wZWZ1bGx5ID09IHggKi8KLQlpZiAoeDIgPT0geDEpCi0JCXJldHVybiB5MTsKLQotCXJldHVybiB5MSArICgoKHkyIC0geTEpICogKHggLSB4MSkpIC8gKHgyIC0geDEpKTsKLX0KLQotc3RhdGljIHU4IGFyOTE3MF9pbnRlcnBvbGF0ZV91OCh1OCB4LCB1OCB4MSwgdTggeTEsIHU4IHgyLCB1OCB5MikKLXsKLSNkZWZpbmUgU0hJRlQJCTgKLQlzMzIgeTsKLQotCXkgPSBhcjkxNzBfaW50ZXJwb2xhdGVfczMyKHggPDwgU0hJRlQsCi0JCQkJICAgeDEgPDwgU0hJRlQsIHkxIDw8IFNISUZULAotCQkJCSAgIHgyIDw8IFNISUZULCB5MiA8PCBTSElGVCk7Ci0KLQkvKgotCSAqIFhYWDogdW53cmFwIHRoaXMgZXhwcmVzc2lvbgotCSAqCUlzbid0IGl0IGp1c3QgRElWX1JPVU5EX1VQKHksIDE8PFNISUZUKT8KLQkgKglDYW4gd2UgcmVseSBvbiB0aGUgY29tcGlsZXIgdG8gb3B0aW1pc2UgYXdheSB0aGUgZGl2PwotCSAqLwotCXJldHVybiAoeSA+PiBTSElGVCkgKyAoKHkgJiAoMTw8KFNISUZULTEpKSkgPj4gKFNISUZUIC0gMSkpOwotI3VuZGVmIFNISUZUCi19Ci0KLXN0YXRpYyB1OCBhcjkxNzBfaW50ZXJwb2xhdGVfdmFsKHU4IHgsIHU4ICp4X2FycmF5LCB1OCAqeV9hcnJheSkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCWlmICh4IDw9IHhfYXJyYXlbaSArIDFdKQotCQkJYnJlYWs7Ci0KLQlyZXR1cm4gYXI5MTcwX2ludGVycG9sYXRlX3U4KHgsCi0JCQkJICAgICB4X2FycmF5W2ldLAotCQkJCSAgICAgeV9hcnJheVtpXSwKLQkJCQkgICAgIHhfYXJyYXlbaSArIDFdLAotCQkJCSAgICAgeV9hcnJheVtpICsgMV0pOwotfQotCi1zdGF0aWMgaW50IGFyOTE3MF9zZXRfZnJlcV9jYWxfZGF0YShzdHJ1Y3QgYXI5MTcwICphciwKLQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKQotewotCXU4ICpjYWxfZnJlcV9waWVyOwotCXU4IHZwZHNbMl1bQVI1NDE2X1BEX0dBSU5fSUNFUFRTXTsKLQl1OCBwd3JzWzJdW0FSNTQxNl9QRF9HQUlOX0lDRVBUU107Ci0JaW50IGNoYWluLCBpZHgsIGk7Ci0JdTMyIHBoeV9kYXRhID0gMDsKLQl1OCBmLCB0bXA7Ci0KLQlzd2l0Y2ggKGNoYW5uZWwtPmJhbmQpIHsKLQljYXNlIElFRUU4MDIxMV9CQU5EXzJHSFo6Ci0JCWYgPSBjaGFubmVsLT5jZW50ZXJfZnJlcSAtIDIzMDA7Ci0JCWNhbF9mcmVxX3BpZXIgPSBhci0+ZWVwcm9tLmNhbF9mcmVxX3BpZXJfMkc7Ci0JCWkgPSBBUjU0MTZfTlVNXzJHX0NBTF9QSUVSUyAtIDE7Ci0JCWJyZWFrOwotCi0JY2FzZSBJRUVFODAyMTFfQkFORF81R0haOgotCQlmID0gKGNoYW5uZWwtPmNlbnRlcl9mcmVxIC0gNDgwMCkgLyA1OwotCQljYWxfZnJlcV9waWVyID0gYXItPmVlcHJvbS5jYWxfZnJlcV9waWVyXzVHOwotCQlpID0gQVI1NDE2X05VTV81R19DQUxfUElFUlMgLSAxOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0KLQlmb3IgKDsgaSA+PSAwOyBpLS0pIHsKLQkJaWYgKGNhbF9mcmVxX3BpZXJbaV0gIT0gMHhmZikKLQkJCWJyZWFrOwotCX0KLQlpZiAoaSA8IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWR4ID0gYXI5MTcwX2ZpbmRfZnJlcV9pZHgoaSwgY2FsX2ZyZXFfcGllciwgZik7Ci0KLQlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOwotCi0JZm9yIChjaGFpbiA9IDA7IGNoYWluIDwgQVI1NDE2X01BWF9DSEFJTlM7IGNoYWluKyspIHsKLQkJZm9yIChpID0gMDsgaSA8IEFSNTQxNl9QRF9HQUlOX0lDRVBUUzsgaSsrKSB7Ci0JCQlzdHJ1Y3QgYXI5MTcwX2NhbGlicmF0aW9uX2RhdGFfcGVyX2ZyZXEgKmNhbF9waWVyX2RhdGE7Ci0JCQlpbnQgajsKLQotCQkJc3dpdGNoIChjaGFubmVsLT5iYW5kKSB7Ci0JCQljYXNlIElFRUU4MDIxMV9CQU5EXzJHSFo6Ci0JCQkJY2FsX3BpZXJfZGF0YSA9ICZhci0+ZWVwcm9tLgotCQkJCQljYWxfcGllcl9kYXRhXzJHW2NoYWluXVtpZHhdOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIElFRUU4MDIxMV9CQU5EXzVHSFo6Ci0JCQkJY2FsX3BpZXJfZGF0YSA9ICZhci0+ZWVwcm9tLgotCQkJCQljYWxfcGllcl9kYXRhXzVHW2NoYWluXVtpZHhdOwotCQkJCWJyZWFrOwotCi0JCQlkZWZhdWx0OgotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCi0JCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7Ci0JCQkJdnBkc1tqXVtpXSA9IGFyOTE3MF9pbnRlcnBvbGF0ZV91OChmLAotCQkJCQljYWxfZnJlcV9waWVyW2lkeF0sCi0JCQkJCWNhbF9waWVyX2RhdGEtPnZwZF9wZGdbal1baV0sCi0JCQkJCWNhbF9mcmVxX3BpZXJbaWR4ICsgMV0sCi0JCQkJCWNhbF9waWVyX2RhdGFbMV0udnBkX3BkZ1tqXVtpXSk7Ci0KLQkJCQlwd3JzW2pdW2ldID0gYXI5MTcwX2ludGVycG9sYXRlX3U4KGYsCi0JCQkJCWNhbF9mcmVxX3BpZXJbaWR4XSwKLQkJCQkJY2FsX3BpZXJfZGF0YS0+cHdyX3BkZ1tqXVtpXSwKLQkJCQkJY2FsX2ZyZXFfcGllcltpZHggKyAxXSwKLQkJCQkJY2FsX3BpZXJfZGF0YVsxXS5wd3JfcGRnW2pdW2ldKSAvIDI7Ci0JCQl9Ci0JCX0KLQotCQlmb3IgKGkgPSAwOyBpIDwgNzY7IGkrKykgewotCQkJaWYgKGkgPCAyNSkgewotCQkJCXRtcCA9IGFyOTE3MF9pbnRlcnBvbGF0ZV92YWwoaSwgJnB3cnNbMF1bMF0sCi0JCQkJCQkJICAgICAmdnBkc1swXVswXSk7Ci0JCQl9IGVsc2UgewotCQkJCXRtcCA9IGFyOTE3MF9pbnRlcnBvbGF0ZV92YWwoaSAtIDEyLAotCQkJCQkJCSAgICAgJnB3cnNbMV1bMF0sCi0JCQkJCQkJICAgICAmdnBkc1sxXVswXSk7Ci0JCQl9Ci0KLQkJCXBoeV9kYXRhIHw9IHRtcCA8PCAoKGkgJiAzKSA8PCAzKTsKLQkJCWlmICgoaSAmIDMpID09IDMpIHsKLQkJCQlhcjkxNzBfcmVnd3JpdGUoMHgxYzYyODAgKyBjaGFpbiAqIDB4MTAwMCArCi0JCQkJCQkoaSAmIH4zKSwgcGh5X2RhdGEpOwotCQkJCXBoeV9kYXRhID0gMDsKLQkJCX0KLQkJfQotCi0JCWZvciAoaSA9IDE5OyBpIDwgMzI7IGkrKykKLQkJCWFyOTE3MF9yZWd3cml0ZSgweDFjNjI4MCArIGNoYWluICogMHgxMDAwICsgKGkgPDwgMiksCi0JCQkJCTB4MCk7Ci0JfQotCi0JYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOwotCXJldHVybiBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7Ci19Ci0KLXN0YXRpYyB1OCBhcjkxNzBfZ2V0X21heF9lZGdlX3Bvd2VyKHN0cnVjdCBhcjkxNzAgKmFyLAotCQkJCSAgICBzdHJ1Y3QgYXI5MTcwX2NhbGN0bF9lZGdlcyBlZGdlc1tdLAotCQkJCSAgICB1MzIgZnJlcSkKLXsKLQlpbnQgaTsKLQl1OCByYyA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKLQl1OCBmOwotCWlmIChmcmVxIDwgMzAwMCkKLQkJZiA9IGZyZXEgLSAyMzAwOwotCWVsc2UKLQkJZiA9IChmcmVxIC0gNDgwMCkgLyA1OwotCi0JZm9yIChpID0gMDsgaSA8IEFSNTQxNl9OVU1fQkFORF9FREdFUzsgaSsrKSB7Ci0JCWlmIChlZGdlc1tpXS5jaGFubmVsID09IDB4ZmYpCi0JCQlicmVhazsKLQkJaWYgKGYgPT0gZWRnZXNbaV0uY2hhbm5lbCkgewotCQkJLyogZXhhY3QgZnJlcSBtYXRjaCAqLwotCQkJcmMgPSBlZGdlc1tpXS5wb3dlcl9mbGFncyAmIH5BUjkxNzBfQ0FMQ1RMX0VER0VfRkxBR1M7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoaSA+IDAgJiYgZiA8IGVkZ2VzW2ldLmNoYW5uZWwpIHsKLQkJCWlmIChmID4gZWRnZXNbaSAtIDFdLmNoYW5uZWwgJiYKLQkJCSAgICBlZGdlc1tpIC0gMV0ucG93ZXJfZmxhZ3MgJgotCQkJICAgIEFSOTE3MF9DQUxDVExfRURHRV9GTEFHUykgewotCQkJCS8qIGxvd2VyIGNoYW5uZWwgaGFzIHRoZSBpbmJhbmQgZmxhZyBzZXQgKi8KLQkJCQlyYyA9IGVkZ2VzW2kgLSAxXS5wb3dlcl9mbGFncyAmCi0JCQkJCX5BUjkxNzBfQ0FMQ1RMX0VER0VfRkxBR1M7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChpID09IEFSNTQxNl9OVU1fQkFORF9FREdFUykgewotCQlpZiAoZiA+IGVkZ2VzW2kgLSAxXS5jaGFubmVsICYmCi0JCSAgICBlZGdlc1tpIC0gMV0ucG93ZXJfZmxhZ3MgJiBBUjkxNzBfQ0FMQ1RMX0VER0VfRkxBR1MpIHsKLQkJCS8qIGxvd2VyIGNoYW5uZWwgaGFzIHRoZSBpbmJhbmQgZmxhZyBzZXQgKi8KLQkJCXJjID0gZWRnZXNbaSAtIDFdLnBvd2VyX2ZsYWdzICYKLQkJCQl+QVI5MTcwX0NBTENUTF9FREdFX0ZMQUdTOwotCQl9Ci0JfQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHU4IGFyOTE3MF9nZXRfaGVhdnlfY2xpcChzdHJ1Y3QgYXI5MTcwICphciwKLQkJCQlzdHJ1Y3QgYXI5MTcwX2NhbGN0bF9lZGdlcyBlZGdlc1tdLAotCQkJCXUzMiBmcmVxLCBlbnVtIGFyOTE3MF9idyBidykKLXsKLQl1OCBmOwotCWludCBpOwotCXU4IHJjID0gMDsKLQotCWlmIChmcmVxIDwgMzAwMCkKLQkJZiA9IGZyZXEgLSAyMzAwOwotCWVsc2UKLQkJZiA9IChmcmVxIC0gNDgwMCkgLyA1OwotCi0JaWYgKGJ3ID09IEFSOTE3MF9CV180MF9CRUxPVyB8fCBidyA9PSBBUjkxNzBfQldfNDBfQUJPVkUpCi0JCXJjIHw9IDB4ZjA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X05VTV9CQU5EX0VER0VTOyBpKyspIHsKLQkJaWYgKGVkZ2VzW2ldLmNoYW5uZWwgPT0gMHhmZikKLQkJCWJyZWFrOwotCQlpZiAoZiA9PSBlZGdlc1tpXS5jaGFubmVsKSB7Ci0JCQlpZiAoIShlZGdlc1tpXS5wb3dlcl9mbGFncyAmIEFSOTE3MF9DQUxDVExfRURHRV9GTEFHUykpCi0JCQkJcmMgfD0gMHgwZjsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi0vKgotICogY2FsY3VsYXRlIHRoZSBjb25mb3JtYW5jZSB0ZXN0IGxpbWl0cyBhbmQgdGhlIGhlYXZ5IGNsaXAgcGFyYW1ldGVyCi0gKiBhbmQgYXBwbHkgdGhlbSB0byBhci0+cG93ZXIqIChkZXJpdmVkIGZyb20gb3R1cyBoYWwvaHBtYWluLmMsIGxpbmUgMzcwNikKLSAqLwotc3RhdGljIHZvaWQgYXI5MTcwX2NhbGNfY3RsKHN0cnVjdCBhcjkxNzAgKmFyLCB1MzIgZnJlcSwgZW51bSBhcjkxNzBfYncgYncpCi17Ci0JdTggY3RsX2dycDsgLyogQ1RMIGdyb3VwICovCi0JdTggY3RsX2lkeDsgLyogQ1RMIGluZGV4ICovCi0JaW50IGksIGo7Ci0Jc3RydWN0IGN0bF9tb2RlcyB7Ci0JCXU4IGN0bF9tb2RlOwotCQl1OCBtYXhfcG93ZXI7Ci0JCXU4ICpwd3JfY2FsX2RhdGE7Ci0JCWludCBwd3JfY2FsX2xlbjsKLQl9ICptb2RlczsKLQotCS8qCi0JICogb3JkZXIgaXMgcmVsZXZhbnQgaW4gdGhlIG1vZGVfbGlzdF8qOiB3ZSBmYWxsIGJhY2sgdG8gdGhlCi0JICogbG93ZXIgaW5kaWNlcyBpZiBhbnkgbW9kZSBpcyBtaXNzZWQgaW4gdGhlIEVFUFJPTS4KLQkgKi8KLQlzdHJ1Y3QgY3RsX21vZGVzIG1vZGVfbGlzdF8yZ2h6W10gPSB7Ci0JCXsgQ1RMXzExQiwgMCwgYXItPnBvd2VyXzJHX2NjaywgNCB9LAotCQl7IENUTF8xMUcsIDAsIGFyLT5wb3dlcl8yR19vZmRtLCA0IH0sCi0JCXsgQ1RMXzJHSFQyMCwgMCwgYXItPnBvd2VyXzJHX2h0MjAsIDggfSwKLQkJeyBDVExfMkdIVDQwLCAwLCBhci0+cG93ZXJfMkdfaHQ0MCwgOCB9LAotCX07Ci0Jc3RydWN0IGN0bF9tb2RlcyBtb2RlX2xpc3RfNWdoeltdID0gewotCQl7IENUTF8xMUEsIDAsIGFyLT5wb3dlcl81R19sZWcsIDQgfSwKLQkJeyBDVExfNUdIVDIwLCAwLCBhci0+cG93ZXJfNUdfaHQyMCwgOCB9LAotCQl7IENUTF81R0hUNDAsIDAsIGFyLT5wb3dlcl81R19odDQwLCA4IH0sCi0JfTsKLQlpbnQgbnJfbW9kZXM7Ci0KLSNkZWZpbmUgRURHRVMoYywgbikgKGFyLT5lZXByb20uY3RsX2RhdGFbY10uY29udHJvbF9lZGdlc1tuXSkKLQotCWFyLT5waHlfaGVhdnlfY2xpcCA9IDA7Ci0KLQkvKgotCSAqIFRPRE86IGludmVzdGlnYXRlIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIE9UVVMnCi0JICogaHByZWcuYzo6emZIcEdldFJlZ3VsYXRvcnlEb21haW4oKSBhbmQKLQkgKiBhdGgvcmVnZC5jOjphdGhfcmVnZF9nZXRfYmFuZF9jdGwoKSAtCi0JICogZS5nLiBmb3IgRkNDM19XT1JMRCB0aGUgT1RVUyBwcm9jZWR1cmUKLQkgKiBhbHdheXMgcmV0dXJucyBDVExfRkNDLCB3aGlsZSB0aGUgb25lIGluIGF0aC8gZGVsaXZlcnMKLQkgKiBDVExfRVRTSSBmb3IgMkdIeiBhbmQgQ1RMX0ZDQyBmb3IgNUdIei4KLQkgKi8KLQljdGxfZ3JwID0gYXRoX3JlZ2RfZ2V0X2JhbmRfY3RsKCZhci0+Y29tbW9uLnJlZ3VsYXRvcnksCi0JCQkJCWFyLT5ody0+Y29uZi5jaGFubmVsLT5iYW5kKTsKLQotCS8qIGN0bCBncm91cCBub3QgZm91bmQgLSBlaXRoZXIgaW52YWxpZCBiYW5kIChOT19DVEwpIG9yIHd3IHJvYW1pbmcgKi8KLQlpZiAoY3RsX2dycCA9PSBOT19DVEwgfHwgY3RsX2dycCA9PSBTRF9OT19DVEwpCi0JCWN0bF9ncnAgPSBDVExfRkNDOwotCi0JaWYgKGN0bF9ncnAgIT0gQ1RMX0ZDQykKLQkJLyogc2tpcCBDVEwgYW5kIGhlYXZ5IGNsaXAgZm9yIENUTF9NS0sgYW5kIENUTF9FVFNJICovCi0JCXJldHVybjsKLQotCWlmIChhci0+aHctPmNvbmYuY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7Ci0JCW1vZGVzID0gbW9kZV9saXN0XzJnaHo7Ci0JCW5yX21vZGVzID0gQVJSQVlfU0laRShtb2RlX2xpc3RfMmdoeik7Ci0JfSBlbHNlIHsKLQkJbW9kZXMgPSBtb2RlX2xpc3RfNWdoejsKLQkJbnJfbW9kZXMgPSBBUlJBWV9TSVpFKG1vZGVfbGlzdF81Z2h6KTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfbW9kZXM7IGkrKykgewotCQl1OCBjID0gY3RsX2dycCB8IG1vZGVzW2ldLmN0bF9tb2RlOwotCQlmb3IgKGN0bF9pZHggPSAwOyBjdGxfaWR4IDwgQVI1NDE2X05VTV9DVExTOyBjdGxfaWR4KyspCi0JCQlpZiAoYyA9PSBhci0+ZWVwcm9tLmN0bF9pbmRleFtjdGxfaWR4XSkKLQkJCQlicmVhazsKLQkJaWYgKGN0bF9pZHggPCBBUjU0MTZfTlVNX0NUTFMpIHsKLQkJCWludCBmX29mZiA9IDA7Ci0KLQkJCS8qIGRldGVybWluZSBoZWF2IGNsaXAgcGFyYW1ldGVyIGZyb20KLQkJCSAgIHRoZSAxMUcgZWRnZXMgYXJyYXkgKi8KLQkJCWlmIChtb2Rlc1tpXS5jdGxfbW9kZSA9PSBDVExfMTFHKSB7Ci0JCQkJYXItPnBoeV9oZWF2eV9jbGlwID0KLQkJCQkJYXI5MTcwX2dldF9oZWF2eV9jbGlwKGFyLAotCQkJCQkJCSAgICAgIEVER0VTKGN0bF9pZHgsIDEpLAotCQkJCQkJCSAgICAgIGZyZXEsIGJ3KTsKLQkJCX0KLQotCQkJLyogYWRqdXN0IGZyZXEgZm9yIDQwTUh6ICovCi0JCQlpZiAobW9kZXNbaV0uY3RsX21vZGUgPT0gQ1RMXzJHSFQ0MCB8fAotCQkJICAgIG1vZGVzW2ldLmN0bF9tb2RlID09IENUTF81R0hUNDApIHsKLQkJCQlpZiAoYncgPT0gQVI5MTcwX0JXXzQwX0JFTE9XKQotCQkJCQlmX29mZiA9IC0xMDsKLQkJCQllbHNlCi0JCQkJCWZfb2ZmID0gMTA7Ci0JCQl9Ci0KLQkJCW1vZGVzW2ldLm1heF9wb3dlciA9Ci0JCQkJYXI5MTcwX2dldF9tYXhfZWRnZV9wb3dlcihhciwgRURHRVMoY3RsX2lkeCwgMSksCi0JCQkJCQkJICBmcmVxK2Zfb2ZmKTsKLQotCQkJLyoKLQkJCSAqIFRPRE86IGNoZWNrIGlmIHRoZSByZWd1bGF0b3J5IG1heC4gcG93ZXIgaXMKLQkJCSAqICBjb250cm9sbGVkIGJ5IGNmZzgwMjExIGZvciBERlMKLQkJCSAqIChocG1haW4gYXBwbGllcyBpdCB0byBtYXhfcG93ZXIgaXRzZWxmIGZvciBERlMgZnJlcSkKLQkJCSAqLwotCi0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogV29ya2Fyb3VuZCBpbiBvdHVzIGRyaXZlciwgaHBtYWluLmMsIGxpbmUgMzkwNjoKLQkJCSAqIGlmIG5vIGRhdGEgZm9yIDVHSFQyMCBhcmUgZm91bmQsIHRha2UgdGhlCi0JCQkgKiBsZWdhY3kgNUcgdmFsdWUuCi0JCQkgKiBXZSBleHRlbmQgdGhpcyBoZXJlIHRvIGZhbGxiYWNrIGZyb20gYW55IG90aGVyICpIVCBvcgotCQkJICogMTFHLCB0b28uCi0JCQkgKi8KLQkJCWludCBrID0gaTsKLQotCQkJbW9kZXNbaV0ubWF4X3Bvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOwotCQkJd2hpbGUgKGstLSA+IDApIHsKLQkJCQlpZiAobW9kZXNba10ubWF4X3Bvd2VyICE9Ci0JCQkJICAgIEFSNTQxNl9NQVhfUkFURV9QT1dFUikgewotCQkJCQltb2Rlc1tpXS5tYXhfcG93ZXIgPSBtb2Rlc1trXS5tYXhfcG93ZXI7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCS8qIGFwcGx5IG1heCBwb3dlciB0byBwd3JfY2FsX2RhdGEgKGFyLT5wb3dlcl8qKSAqLwotCQlmb3IgKGogPSAwOyBqIDwgbW9kZXNbaV0ucHdyX2NhbF9sZW47IGorKykgewotCQkJbW9kZXNbaV0ucHdyX2NhbF9kYXRhW2pdID0gbWluKG1vZGVzW2ldLnB3cl9jYWxfZGF0YVtqXSwKLQkJCQkJCSAgICAgICBtb2Rlc1tpXS5tYXhfcG93ZXIpOwotCQl9Ci0JfQotCi0JaWYgKGFyLT5waHlfaGVhdnlfY2xpcCAmIDB4ZjApIHsKLQkJYXItPnBvd2VyXzJHX2h0NDBbMF0tLTsKLQkJYXItPnBvd2VyXzJHX2h0NDBbMV0tLTsKLQkJYXItPnBvd2VyXzJHX2h0NDBbMl0tLTsKLQl9Ci0JaWYgKGFyLT5waHlfaGVhdnlfY2xpcCAmIDB4ZikgewotCQlhci0+cG93ZXJfMkdfaHQyMFswXSsrOwotCQlhci0+cG93ZXJfMkdfaHQyMFsxXSsrOwotCQlhci0+cG93ZXJfMkdfaHQyMFsyXSsrOwotCX0KLQotCi0jdW5kZWYgRURHRVMKLX0KLQotc3RhdGljIGludCBhcjkxNzBfc2V0X3Bvd2VyX2NhbChzdHJ1Y3QgYXI5MTcwICphciwgdTMyIGZyZXEsIGVudW0gYXI5MTcwX2J3IGJ3KQotewotCXN0cnVjdCBhcjkxNzBfY2FsaWJyYXRpb25fdGFyZ2V0X3Bvd2VyX2xlZ2FjeSAqY3RwbDsKLQlzdHJ1Y3QgYXI5MTcwX2NhbGlicmF0aW9uX3RhcmdldF9wb3dlcl9odCAqY3RwaDsKLQl1OCAqY3RwcmVzOwotCWludCBudGFyZ2V0czsKLQlpbnQgaWR4LCBpLCBuOwotCXU4IGFja3Bvd2VyLCBhY2tjaGFpbnMsIGY7Ci0JdTggcHdyX2ZyZXFzW0FSNTQxNl9NQVhfTlVNX1RHVF9QV1JTXTsKLQotCWlmIChmcmVxIDwgMzAwMCkKLQkJZiA9IGZyZXEgLSAyMzAwOwotCWVsc2UKLQkJZiA9IChmcmVxIC0gNDgwMCkvNTsKLQotCS8qCi0JICogY3ljbGUgdGhyb3VnaCB0aGUgdmFyaW91cyBtb2RlcwotCSAqCi0JICogbGVnYWN5IG1vZGVzIGZpcnN0OiA1RywgMkcgQ0NLLCAyRyBPRkRNCi0JICovCi0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotCQlzd2l0Y2ggKGkpIHsKLQkJY2FzZSAwOiAvKiA1IEdIeiBsZWdhY3kgKi8KLQkJCWN0cGwgPSAmYXItPmVlcHJvbS5jYWxfdGd0X3B3cl81R1swXTsKLQkJCW50YXJnZXRzID0gQVI1NDE2X05VTV81R19UQVJHRVRfUFdSUzsKLQkJCWN0cHJlcyA9IGFyLT5wb3dlcl81R19sZWc7Ci0JCQlicmVhazsKLQkJY2FzZSAxOiAvKiAyLjQgR0h6IENDSyAqLwotCQkJY3RwbCA9ICZhci0+ZWVwcm9tLmNhbF90Z3RfcHdyXzJHX2Nja1swXTsKLQkJCW50YXJnZXRzID0gQVI1NDE2X05VTV8yR19DQ0tfVEFSR0VUX1BXUlM7Ci0JCQljdHByZXMgPSBhci0+cG93ZXJfMkdfY2NrOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjogLyogMi40IEdIeiBPRkRNICovCi0JCQljdHBsID0gJmFyLT5lZXByb20uY2FsX3RndF9wd3JfMkdfb2ZkbVswXTsKLQkJCW50YXJnZXRzID0gQVI1NDE2X05VTV8yR19PRkRNX1RBUkdFVF9QV1JTOwotCQkJY3RwcmVzID0gYXItPnBvd2VyXzJHX29mZG07Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCUJVRygpOwotCQl9Ci0KLQkJZm9yIChuID0gMDsgbiA8IG50YXJnZXRzOyBuKyspIHsKLQkJCWlmIChjdHBsW25dLmZyZXEgPT0gMHhmZikKLQkJCQlicmVhazsKLQkJCXB3cl9mcmVxc1tuXSA9IGN0cGxbbl0uZnJlcTsKLQkJfQotCQludGFyZ2V0cyA9IG47Ci0JCWlkeCA9IGFyOTE3MF9maW5kX2ZyZXFfaWR4KG50YXJnZXRzLCBwd3JfZnJlcXMsIGYpOwotCQlmb3IgKG4gPSAwOyBuIDwgNDsgbisrKQotCQkJY3RwcmVzW25dID0gYXI5MTcwX2ludGVycG9sYXRlX3U4KAotCQkJCQlmLAotCQkJCQljdHBsW2lkeCArIDBdLmZyZXEsCi0JCQkJCWN0cGxbaWR4ICsgMF0ucG93ZXJbbl0sCi0JCQkJCWN0cGxbaWR4ICsgMV0uZnJlcSwKLQkJCQkJY3RwbFtpZHggKyAxXS5wb3dlcltuXSk7Ci0JfQotCi0JLyoKLQkgKiBIVCBtb2RlcyBub3c6IDVHIEhUMjAsIDVHIEhUNDAsIDJHIENDSywgMkcgT0ZETSwgMkcgSFQyMCwgMkcgSFQ0MAotCSAqLwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJc3dpdGNoIChpKSB7Ci0JCWNhc2UgMDogLyogNSBHSHogSFQgMjAgKi8KLQkJCWN0cGggPSAmYXItPmVlcHJvbS5jYWxfdGd0X3B3cl81R19odDIwWzBdOwotCQkJbnRhcmdldHMgPSBBUjU0MTZfTlVNXzVHX1RBUkdFVF9QV1JTOwotCQkJY3RwcmVzID0gYXItPnBvd2VyXzVHX2h0MjA7Ci0JCQlicmVhazsKLQkJY2FzZSAxOiAvKiA1IEdIeiBIVCA0MCAqLwotCQkJY3RwaCA9ICZhci0+ZWVwcm9tLmNhbF90Z3RfcHdyXzVHX2h0NDBbMF07Ci0JCQludGFyZ2V0cyA9IEFSNTQxNl9OVU1fNUdfVEFSR0VUX1BXUlM7Ci0JCQljdHByZXMgPSBhci0+cG93ZXJfNUdfaHQ0MDsKLQkJCWJyZWFrOwotCQljYXNlIDI6IC8qIDIuNCBHSHogSFQgMjAgKi8KLQkJCWN0cGggPSAmYXItPmVlcHJvbS5jYWxfdGd0X3B3cl8yR19odDIwWzBdOwotCQkJbnRhcmdldHMgPSBBUjU0MTZfTlVNXzJHX09GRE1fVEFSR0VUX1BXUlM7Ci0JCQljdHByZXMgPSBhci0+cG93ZXJfMkdfaHQyMDsKLQkJCWJyZWFrOwotCQljYXNlIDM6IC8qIDIuNCBHSHogSFQgNDAgKi8KLQkJCWN0cGggPSAmYXItPmVlcHJvbS5jYWxfdGd0X3B3cl8yR19odDQwWzBdOwotCQkJbnRhcmdldHMgPSBBUjU0MTZfTlVNXzJHX09GRE1fVEFSR0VUX1BXUlM7Ci0JCQljdHByZXMgPSBhci0+cG93ZXJfMkdfaHQ0MDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJQlVHKCk7Ci0JCX0KLQotCQlmb3IgKG4gPSAwOyBuIDwgbnRhcmdldHM7IG4rKykgewotCQkJaWYgKGN0cGhbbl0uZnJlcSA9PSAweGZmKQotCQkJCWJyZWFrOwotCQkJcHdyX2ZyZXFzW25dID0gY3RwaFtuXS5mcmVxOwotCQl9Ci0JCW50YXJnZXRzID0gbjsKLQkJaWR4ID0gYXI5MTcwX2ZpbmRfZnJlcV9pZHgobnRhcmdldHMsIHB3cl9mcmVxcywgZik7Ci0JCWZvciAobiA9IDA7IG4gPCA4OyBuKyspCi0JCQljdHByZXNbbl0gPSBhcjkxNzBfaW50ZXJwb2xhdGVfdTgoCi0JCQkJCWYsCi0JCQkJCWN0cGhbaWR4ICsgMF0uZnJlcSwKLQkJCQkJY3RwaFtpZHggKyAwXS5wb3dlcltuXSwKLQkJCQkJY3RwaFtpZHggKyAxXS5mcmVxLAotCQkJCQljdHBoW2lkeCArIDFdLnBvd2VyW25dKTsKLQl9Ci0KLQotCS8qIGNhbGMuIGNvbmZvcm1hbmNlIHRlc3QgbGltaXRzIGFuZCBhcHBseSB0byBhci0+cG93ZXIqW10gKi8KLQlhcjkxNzBfY2FsY19jdGwoYXIsIGZyZXEsIGJ3KTsKLQotCS8qIHNldCBBQ0svQ1RTIFRYIHBvd2VyICovCi0JYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKLQotCWlmIChhci0+ZWVwcm9tLnR4X21hc2sgIT0gMSkKLQkJYWNrY2hhaW5zID0gQVI5MTcwX1RYX1BIWV9UWENIQUlOXzI7Ci0JZWxzZQotCQlhY2tjaGFpbnMgPSBBUjkxNzBfVFhfUEhZX1RYQ0hBSU5fMTsKLQotCWlmIChmcmVxIDwgMzAwMCkKLQkJYWNrcG93ZXIgPSBhci0+cG93ZXJfMkdfb2ZkbVswXSAmIDB4M2Y7Ci0JZWxzZQotCQlhY2twb3dlciA9IGFyLT5wb3dlcl81R19sZWdbMF0gJiAweDNmOwotCi0JYXI5MTcwX3JlZ3dyaXRlKDB4MWMzNjk0LCBhY2twb3dlciA8PCAyMCB8IGFja2NoYWlucyA8PCAyNik7Ci0JYXI5MTcwX3JlZ3dyaXRlKDB4MWMzYmI0LCBhY2twb3dlciA8PCA1IHwgYWNrY2hhaW5zIDw8IDExIHwKLQkJCQkgIGFja3Bvd2VyIDw8IDIxIHwgYWNrY2hhaW5zIDw8IDI3KTsKLQotCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKLQlyZXR1cm4gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOwotfQotCi1zdGF0aWMgaW50IGFyOTE3MF9jYWxjX25vaXNlX2RibSh1MzIgcmF3X25vaXNlKQotewotCWlmIChyYXdfbm9pc2UgJiAweDEwMCkKLQkJcmV0dXJuIH4oKHJhd19ub2lzZSAmIDB4MGZmKSA+PiAxKTsKLQllbHNlCi0JCXJldHVybiAocmF3X25vaXNlICYgMHhmZikgPj4gMTsKLX0KLQotaW50IGFyOTE3MF9zZXRfY2hhbm5lbChzdHJ1Y3QgYXI5MTcwICphciwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAotCQkgICAgICAgZW51bSBhcjkxNzBfcmZfaW5pdF9tb2RlIHJmaSwgZW51bSBhcjkxNzBfYncgYncpCi17Ci0JY29uc3Qgc3RydWN0IGFyOTE3MF9waHlfZnJlcV9wYXJhbXMgKmZyZXFwYXI7Ci0JdTMyIGNtZCwgdG1wLCBvZmZzOwotCV9fbGUzMiB2YWxzWzhdOwotCWludCBpLCBlcnI7Ci0JYm9vbCBiYW5kc3dpdGNoOwotCi0JLyogY2xlYXIgQkIgaGVhdnkgY2xpcCBlbmFibGUgKi8KLQllcnIgPSBhcjkxNzBfd3JpdGVfcmVnKGFyLCAweDFjNTllMCwgMHgyMDApOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQkvKiBtYXkgYmUgTlVMTCBhdCBmaXJzdCBzZXR1cCAqLwotCWlmIChhci0+Y2hhbm5lbCkKLQkJYmFuZHN3aXRjaCA9IGFyLT5jaGFubmVsLT5iYW5kICE9IGNoYW5uZWwtPmJhbmQ7Ci0JZWxzZQotCQliYW5kc3dpdGNoID0gdHJ1ZTsKLQotCS8qIEhXIHdvcmthcm91bmQgKi8KLQlpZiAoIWFyLT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdICYmCi0JICAgIGNoYW5uZWwtPmNlbnRlcl9mcmVxIDw9IDI0MTcpCi0JCWJhbmRzd2l0Y2ggPSB0cnVlOwotCi0JZXJyID0gYXItPmV4ZWNfY21kKGFyLCBBUjkxNzBfQ01EX0ZSRVFfU1RBUlQsIDAsIE5VTEwsIDAsIE5VTEwpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlpZiAocmZpICE9IEFSOTE3MF9SRklfTk9ORSB8fCBiYW5kc3dpdGNoKSB7Ci0JCXUzMiB2YWwgPSAweDQwMDsKLQotCQlpZiAocmZpID09IEFSOTE3MF9SRklfQ09MRCkKLQkJCXZhbCA9IDB4ODAwOwotCi0JCS8qIHdhcm0vY29sZCByZXNldCBCQi9BRERBICovCi0JCWVyciA9IGFyOTE3MF93cml0ZV9yZWcoYXIsIDB4MWQ0MDA0LCB2YWwpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQotCQllcnIgPSBhcjkxNzBfd3JpdGVfcmVnKGFyLCAweDFkNDAwNCwgMHgwKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0KLQkJZXJyID0gYXI5MTcwX2luaXRfcGh5KGFyLCBjaGFubmVsLT5iYW5kKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0KLQkJZXJyID0gYXI5MTcwX2luaXRfcmZfYmFua3NfMF83KGFyLAotCQkJY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0KLQkJY21kID0gQVI5MTcwX0NNRF9SRl9JTklUOwotCX0gZWxzZSB7Ci0JCWNtZCA9IEFSOTE3MF9DTURfRlJFUVVFTkNZOwotCX0KLQotCWVyciA9IGFyOTE3MF9pbml0X3JmX2Jhbms0X3B3cihhciwKLQkJY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haLAotCQljaGFubmVsLT5jZW50ZXJfZnJlcSwgYncpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlzd2l0Y2ggKGJ3KSB7Ci0JY2FzZSBBUjkxNzBfQldfMjA6Ci0JCXRtcCA9IDB4MjQwOwotCQlvZmZzID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBBUjkxNzBfQldfNDBfQkVMT1c6Ci0JCXRtcCA9IDB4MmM0OwotCQlvZmZzID0gMzsKLQkJYnJlYWs7Ci0JY2FzZSBBUjkxNzBfQldfNDBfQUJPVkU6Ci0JCXRtcCA9IDB4MmQ0OwotCQlvZmZzID0gMTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JCXJldHVybiAtRU5PU1lTOwotCX0KLQotCWlmIChhci0+ZWVwcm9tLnR4X21hc2sgIT0gMSkKLQkJdG1wIHw9IDB4MTAwOwotCi0JZXJyID0gYXI5MTcwX3dyaXRlX3JlZyhhciwgMHgxYzU4MDQsIHRtcCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IGFyOTE3MF9zZXRfZnJlcV9jYWxfZGF0YShhciwgY2hhbm5lbCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IGFyOTE3MF9zZXRfcG93ZXJfY2FsKGFyLCBjaGFubmVsLT5jZW50ZXJfZnJlcSwgYncpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlmcmVxcGFyID0gYXI5MTcwX2dldF9od19keW5fcGFyYW1zKGNoYW5uZWwsIGJ3KTsKLQotCXZhbHNbMF0gPSBjcHVfdG9fbGUzMihjaGFubmVsLT5jZW50ZXJfZnJlcSAqIDEwMDApOwotCXZhbHNbMV0gPSBjcHVfdG9fbGUzMihjb25mX2lzX2h0NDAoJmFyLT5ody0+Y29uZikpOwotCXZhbHNbMl0gPSBjcHVfdG9fbGUzMihvZmZzIDw8IDIgfCAxKTsKLQl2YWxzWzNdID0gY3B1X3RvX2xlMzIoZnJlcXBhci0+Y29lZmZfZXhwKTsKLQl2YWxzWzRdID0gY3B1X3RvX2xlMzIoZnJlcXBhci0+Y29lZmZfbWFuKTsKLQl2YWxzWzVdID0gY3B1X3RvX2xlMzIoZnJlcXBhci0+Y29lZmZfZXhwX3NoZ2kpOwotCXZhbHNbNl0gPSBjcHVfdG9fbGUzMihmcmVxcGFyLT5jb2VmZl9tYW5fc2hnaSk7Ci0JdmFsc1s3XSA9IGNwdV90b19sZTMyKDEwMDApOwotCi0JZXJyID0gYXItPmV4ZWNfY21kKGFyLCBjbWQsIHNpemVvZih2YWxzKSwgKHU4ICopdmFscywKLQkJCSAgIHNpemVvZih2YWxzKSwgKHU4ICopdmFscyk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWlmIChhci0+cGh5X2hlYXZ5X2NsaXApIHsKLQkJZXJyID0gYXI5MTcwX3dyaXRlX3JlZyhhciwgMHgxYzU5ZTAsCi0JCQkJICAgICAgIDB4MjAwIHwgYXItPnBoeV9oZWF2eV9jbGlwKTsKLQkJaWYgKGVycikgewotCQkJaWYgKGFyOTE3MF9uYWdfbGltaXRlcihhcikpCi0JCQkJd2lwaHlfZXJyKGFyLT5ody0+d2lwaHksCi0JCQkJCSAgImZhaWxlZCB0byBzZXQgaGVhdnkgY2xpcFxuIik7Ci0JCX0KLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0JCWFyLT5ub2lzZVtpXSA9IGFyOTE3MF9jYWxjX25vaXNlX2RibSgKLQkJCQkobGUzMl90b19jcHUodmFsc1syICsgaV0pID4+IDE5KSAmIDB4MWZmKTsKLQotCQlhci0+bm9pc2VbaSArIDJdID0gYXI5MTcwX2NhbGNfbm9pc2VfZGJtKAotCQkJCSAgICAobGUzMl90b19jcHUodmFsc1s1ICsgaV0pID4+IDIzKSAmIDB4MWZmKTsKLQl9Ci0KLQlhci0+Y2hhbm5lbCA9IGNoYW5uZWw7Ci0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC91c2IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNiZTZmOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL3VzYi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAwOCArMCwwIEBACi0vKgotICogQXRoZXJvcyBBUjkxNzAgZHJpdmVyCi0gKgotICogVVNCIC0gZnJvbnRlbmQKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KLSAqIENvcHlyaWdodCAyMDA5LCBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUB3ZWIuZGU+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHNlZQotICogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KLSAqCi0gKiBUaGlzIGZpbGUgaW5jb3Jwb3JhdGVzIHdvcmsgY292ZXJlZCBieSB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQKLSAqIHBlcm1pc3Npb24gbm90aWNlOgotICogICAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSW5jLgotICoKLSAqICAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSAqICAgIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICAgIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0gKiAgICBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0gKiAgICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSAqICAgIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0gKiAgICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0jaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotI2luY2x1ZGUgImFyOTE3MC5oIgotI2luY2x1ZGUgImNtZC5oIgotI2luY2x1ZGUgImh3LmgiCi0jaW5jbHVkZSAidXNiLmgiCi0KLU1PRFVMRV9BVVRIT1IoIkpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+Iik7Ci1NT0RVTEVfQVVUSE9SKCJDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUB3ZWIuZGU+Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkF0aGVyb3MgQVI5MTcwIDgwMi4xMW4gVVNCIHdpcmVsZXNzIik7Ci1NT0RVTEVfRklSTVdBUkUoImFyOTE3MC5mdyIpOwotCi1lbnVtIGFyOTE3MF9yZXF1aXJlbWVudHMgewotCUFSOTE3MF9SRVFfRlcxX09OTFkgPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGFyOTE3MF91c2JfaWRzW10gPSB7Ci0JLyogQXRoZXJvcyA5MTcwICovCi0JeyBVU0JfREVWSUNFKDB4MGNmMywgMHg5MTcwKSB9LAotCS8qIEF0aGVyb3MgVEcxMjFOICovCi0JeyBVU0JfREVWSUNFKDB4MGNmMywgMHgxMDAxKSB9LAotCS8qIFRQLUxpbmsgVEwtV044MjFOIHYyICovCi0JeyBVU0JfREVWSUNFKDB4MGNmMywgMHgxMDAyKSB9LAotCS8qIDNDb20gRHVhbCBCYW5kIDgwMi4xMW4gVVNCIEFkYXB0ZXIgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweDEwMTApIH0sCi0JLyogSDNDIER1YWwgQmFuZCA4MDIuMTFuIFVTQiBBZGFwdGVyICovCi0JeyBVU0JfREVWSUNFKDB4MGNmMywgMHgxMDExKSB9LAotCS8qIENhY2UgQWlycGNhcCBOWCAqLwotCXsgVVNCX0RFVklDRSgweGNhY2UsIDB4MDMwMCkgfSwKLQkvKiBELUxpbmsgRFdBIDE2MCBBMSAqLwotCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MxMCkgfSwKLQkvKiBELUxpbmsgRFdBIDE2MCBBMiAqLwotCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2EwOSkgfSwKLQkvKiBOZXRnZWFyIFdOQTEwMDAgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwODQ2LCAweDkwNDApIH0sCi0JLyogTmV0Z2VhciBXTkRBMzEwMCAqLwotCXsgVVNCX0RFVklDRSgweDA4NDYsIDB4OTAxMCkgfSwKLQkvKiBOZXRnZWFyIFdOMTExIHYyICovCi0JeyBVU0JfREVWSUNFKDB4MDg0NiwgMHg5MDAxKSB9LAotCS8qIFp5ZGFzIFpEMTIyMSAqLwotCXsgVVNCX0RFVklDRSgweDBhY2UsIDB4MTIyMSkgfSwKLQkvKiBQcm94aW0gT1JpTk9DTyA4MDIuMTFuIFVTQiAqLwotCXsgVVNCX0RFVklDRSgweDE0MzUsIDB4MDgwNCkgfSwKLQkvKiBXTkMgR2VuZXJpYyAxMW4gVVNCIERvbmdsZSAqLwotCXsgVVNCX0RFVklDRSgweDE0MzUsIDB4MDMyNikgfSwKLQkvKiBaeVhFTCBOV0QyNzFOICovCi0JeyBVU0JfREVWSUNFKDB4MDU4NiwgMHgzNDE3KSB9LAotCS8qIFotQ29tIFVCODEgQkcgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwY2RlLCAweDAwMjMpIH0sCi0JLyogWi1Db20gVUI4MiBBQkcgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwY2RlLCAweDAwMjYpIH0sCi0JLyogU3BoYWlyb24gSG9tZWxpbmsgMTIwMiAqLwotCXsgVVNCX0RFVklDRSgweDBjZGUsIDB4MDAyNykgfSwKLQkvKiBBcmNhZHlhbiBXTjc1MTIgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGY1MjIpIH0sCi0JLyogUGxhbmV4IEdXVVMzMDAgKi8KLQl7IFVTQl9ERVZJQ0UoMHgyMDE5LCAweDUzMDQpIH0sCi0JLyogSU8tRGF0YSBXTkdETlVTMiAqLwotCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDkzZikgfSwKLQkvKiBBVk0gRlJJVFohV0xBTiBVU0IgU3RpY2sgTiAqLwotCXsgVVNCX0RFVklDRSgweDA1N0MsIDB4ODQwMSkgfSwKLQkvKiBORUMgV0wzMDBOVS1HICovCi0JeyBVU0JfREVWSUNFKDB4MDQwOSwgMHgwMjQ5KSB9LAotCS8qIEFWTSBGUklUWiFXTEFOIFVTQiBTdGljayBOIDIuNCAqLwotCXsgVVNCX0RFVklDRSgweDA1N0MsIDB4ODQwMiksIC5kcml2ZXJfaW5mbyA9IEFSOTE3MF9SRVFfRlcxX09OTFkgfSwKLQkvKiBRd2VzdC9BY3Rpb250ZWMgODAyQUlOIFdpcmVsZXNzIE4gVVNCIE5ldHdvcmsgQWRhcHRlciAqLwotCXsgVVNCX0RFVklDRSgweDE2NjgsIDB4MTIwMCkgfSwKLQotCS8qIHRlcm1pbmF0ZSAqLwotCXt9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGFyOTE3MF91c2JfaWRzKTsKLQotc3RhdGljIHZvaWQgYXI5MTcwX3VzYl9zdWJtaXRfdXJiKHN0cnVjdCBhcjkxNzBfdXNiICphcnUpCi17Ci0Jc3RydWN0IHVyYiAqdXJiOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVycjsKLQotCWlmICh1bmxpa2VseSghSVNfU1RBUlRFRCgmYXJ1LT5jb21tb24pKSkKLQkJcmV0dXJuIDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhcnUtPnR4X3VyYl9sb2NrLCBmbGFncyk7Ci0JaWYgKGF0b21pY19yZWFkKCZhcnUtPnR4X3N1Ym1pdHRlZF91cmJzKSA+PSBBUjkxNzBfTlVNX1RYX1VSQlMpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXJ1LT50eF91cmJfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gOwotCX0KLQlhdG9taWNfaW5jKCZhcnUtPnR4X3N1Ym1pdHRlZF91cmJzKTsKLQotCXVyYiA9IHVzYl9nZXRfZnJvbV9hbmNob3IoJmFydS0+dHhfcGVuZGluZyk7Ci0JaWYgKCF1cmIpIHsKLQkJYXRvbWljX2RlYygmYXJ1LT50eF9zdWJtaXR0ZWRfdXJicyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFydS0+dHhfdXJiX2xvY2ssIGZsYWdzKTsKLQotCQlyZXR1cm4gOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcnUtPnR4X3VyYl9sb2NrLCBmbGFncyk7Ci0KLQlhcnUtPnR4X3BlbmRpbmdfdXJicy0tOwotCXVzYl9hbmNob3JfdXJiKHVyYiwgJmFydS0+dHhfc3VibWl0dGVkKTsKLQotCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKHVubGlrZWx5KGVycikpIHsKLQkJaWYgKGFyOTE3MF9uYWdfbGltaXRlcigmYXJ1LT5jb21tb24pKQotCQkJZGV2X2VycigmYXJ1LT51ZGV2LT5kZXYsICJzdWJtaXRfdXJiIGZhaWxlZCAoJWQpLlxuIiwKLQkJCQllcnIpOwotCi0JCXVzYl91bmFuY2hvcl91cmIodXJiKTsKLQkJYXRvbWljX2RlYygmYXJ1LT50eF9zdWJtaXR0ZWRfdXJicyk7Ci0JCWFyOTE3MF90eF9jYWxsYmFjaygmYXJ1LT5jb21tb24sIHVyYi0+Y29udGV4dCk7Ci0JfQotCi0JdXNiX2ZyZWVfdXJiKHVyYik7Ci19Ci0KLXN0YXRpYyB2b2lkIGFyOTE3MF91c2JfdHhfdXJiX2NvbXBsZXRlX2ZyYW1lKHN0cnVjdCB1cmIgKnVyYikKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdXJiLT5jb250ZXh0OwotCXN0cnVjdCBhcjkxNzBfdXNiICphcnUgPSB1c2JfZ2V0X2ludGZkYXRhKHVzYl9pZm51bV90b19pZih1cmItPmRldiwgMCkpOwotCi0JaWYgKHVubGlrZWx5KCFhcnUpKSB7Ci0JCWRldl9rZnJlZV9za2JfaXJxKHNrYik7Ci0JCXJldHVybiA7Ci0JfQotCi0JYXRvbWljX2RlYygmYXJ1LT50eF9zdWJtaXR0ZWRfdXJicyk7Ci0KLQlhcjkxNzBfdHhfY2FsbGJhY2soJmFydS0+Y29tbW9uLCBza2IpOwotCi0JYXI5MTcwX3VzYl9zdWJtaXRfdXJiKGFydSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFyOTE3MF91c2JfdHhfdXJiX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKLXsKLX0KLQotc3RhdGljIHZvaWQgYXI5MTcwX3VzYl9pcnFfY29tcGxldGVkKHN0cnVjdCB1cmIgKnVyYikKLXsKLQlzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1ID0gdXJiLT5jb250ZXh0OwotCi0Jc3dpdGNoICh1cmItPnN0YXR1cykgewotCS8qIGV2ZXJ5dGhpbmcgaXMgZmluZSAqLwotCWNhc2UgMDoKLQkJYnJlYWs7Ci0KLQkvKiBkaXNjb25uZWN0ICovCi0JY2FzZSAtRU5PRU5UOgotCWNhc2UgLUVDT05OUkVTRVQ6Ci0JY2FzZSAtRU5PREVWOgotCWNhc2UgLUVTSFVURE9XTjoKLQkJZ290byBmcmVlOwotCi0JZGVmYXVsdDoKLQkJZ290byByZXN1Ym1pdDsKLQl9Ci0KLQlhcjkxNzBfaGFuZGxlX2NvbW1hbmRfcmVzcG9uc2UoJmFydS0+Y29tbW9uLCB1cmItPnRyYW5zZmVyX2J1ZmZlciwKLQkJCQkgICAgICAgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKLQotcmVzdWJtaXQ6Ci0JdXNiX2FuY2hvcl91cmIodXJiLCAmYXJ1LT5yeF9zdWJtaXR0ZWQpOwotCWlmICh1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpKSB7Ci0JCXVzYl91bmFuY2hvcl91cmIodXJiKTsKLQkJZ290byBmcmVlOwotCX0KLQotCXJldHVybjsKLQotZnJlZToKLQl1c2JfZnJlZV9jb2hlcmVudChhcnUtPnVkZXYsIDY0LCB1cmItPnRyYW5zZmVyX2J1ZmZlciwgdXJiLT50cmFuc2Zlcl9kbWEpOwotfQotCi1zdGF0aWMgdm9pZCBhcjkxNzBfdXNiX3J4X2NvbXBsZXRlZChzdHJ1Y3QgdXJiICp1cmIpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHVyYi0+Y29udGV4dDsKLQlzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1ID0gdXNiX2dldF9pbnRmZGF0YSh1c2JfaWZudW1fdG9faWYodXJiLT5kZXYsIDApKTsKLQlpbnQgZXJyOwotCi0JaWYgKCFhcnUpCi0JCWdvdG8gZnJlZTsKLQotCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKLQkvKiBldmVyeXRoaW5nIGlzIGZpbmUgKi8KLQljYXNlIDA6Ci0JCWJyZWFrOwotCi0JLyogZGlzY29ubmVjdCAqLwotCWNhc2UgLUVOT0VOVDoKLQljYXNlIC1FQ09OTlJFU0VUOgotCWNhc2UgLUVOT0RFVjoKLQljYXNlIC1FU0hVVERPV046Ci0JCWdvdG8gZnJlZTsKLQotCWRlZmF1bHQ6Ci0JCWdvdG8gcmVzdWJtaXQ7Ci0JfQotCi0Jc2tiX3B1dChza2IsIHVyYi0+YWN0dWFsX2xlbmd0aCk7Ci0JYXI5MTcwX3J4KCZhcnUtPmNvbW1vbiwgc2tiKTsKLQotcmVzdWJtaXQ6Ci0Jc2tiX3Jlc2V0X3RhaWxfcG9pbnRlcihza2IpOwotCXNrYl90cmltKHNrYiwgMCk7Ci0KLQl1c2JfYW5jaG9yX3VyYih1cmIsICZhcnUtPnJ4X3N1Ym1pdHRlZCk7Ci0JZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLQlpZiAodW5saWtlbHkoZXJyKSkgewotCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7Ci0JCWdvdG8gZnJlZTsKLQl9Ci0KLQlyZXR1cm4gOwotCi1mcmVlOgotCWRldl9rZnJlZV9za2JfaXJxKHNrYik7Ci19Ci0KLXN0YXRpYyBpbnQgYXI5MTcwX3VzYl9wcmVwX3J4X3VyYihzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1LAotCQkJCSAgc3RydWN0IHVyYiAqdXJiLCBnZnBfdCBnZnApCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCXNrYiA9IF9fZGV2X2FsbG9jX3NrYihBUjkxNzBfTUFYX1JYX0JVRkZFUl9TSVpFICsgMzIsIGdmcCk7Ci0JaWYgKCFza2IpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JLyogcmVzZXJ2ZSBzb21lIHNwYWNlIGZvciBtYWM4MDIxMSdzIHJhZGlvdGFwICovCi0Jc2tiX3Jlc2VydmUoc2tiLCAzMik7Ci0KLQl1c2JfZmlsbF9idWxrX3VyYih1cmIsIGFydS0+dWRldiwKLQkJCSAgdXNiX3JjdmJ1bGtwaXBlKGFydS0+dWRldiwgQVI5MTcwX0VQX1JYKSwKLQkJCSAgc2tiLT5kYXRhLCBtaW4oc2tiX3RhaWxyb29tKHNrYiksCi0JCQkgIEFSOTE3MF9NQVhfUlhfQlVGRkVSX1NJWkUpLAotCQkJICBhcjkxNzBfdXNiX3J4X2NvbXBsZXRlZCwgc2tiKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFyOTE3MF91c2JfYWxsb2NfcnhfaXJxX3VyYihzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1KQotewotCXN0cnVjdCB1cmIgKnVyYiA9IE5VTEw7Ci0Jdm9pZCAqaWJ1ZjsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQotCS8qIGluaXRpYWxpemUgaW50ZXJydXB0IGVuZHBvaW50ICovCi0JdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXVyYikKLQkJZ290byBvdXQ7Ci0KLQlpYnVmID0gdXNiX2FsbG9jX2NvaGVyZW50KGFydS0+dWRldiwgNjQsIEdGUF9LRVJORUwsICZ1cmItPnRyYW5zZmVyX2RtYSk7Ci0JaWYgKCFpYnVmKQotCQlnb3RvIG91dDsKLQotCXVzYl9maWxsX2ludF91cmIodXJiLCBhcnUtPnVkZXYsCi0JCQkgdXNiX3JjdmludHBpcGUoYXJ1LT51ZGV2LCBBUjkxNzBfRVBfSVJRKSwgaWJ1ZiwKLQkJCSA2NCwgYXI5MTcwX3VzYl9pcnFfY29tcGxldGVkLCBhcnUsIDEpOwotCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7Ci0KLQl1c2JfYW5jaG9yX3VyYih1cmIsICZhcnUtPnJ4X3N1Ym1pdHRlZCk7Ci0JZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKLQlpZiAoZXJyKSB7Ci0JCXVzYl91bmFuY2hvcl91cmIodXJiKTsKLQkJdXNiX2ZyZWVfY29oZXJlbnQoYXJ1LT51ZGV2LCA2NCwgdXJiLT50cmFuc2Zlcl9idWZmZXIsCi0JCQkJICB1cmItPnRyYW5zZmVyX2RtYSk7Ci0JfQotCi1vdXQ6Ci0JdXNiX2ZyZWVfdXJiKHVyYik7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBhcjkxNzBfdXNiX2FsbG9jX3J4X2J1bGtfdXJicyhzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1KQotewotCXN0cnVjdCB1cmIgKnVyYjsKLQlpbnQgaTsKLQlpbnQgZXJyID0gLUVJTlZBTDsKLQotCWZvciAoaSA9IDA7IGkgPCBBUjkxNzBfTlVNX1JYX1VSQlM7IGkrKykgewotCQllcnIgPSAtRU5PTUVNOwotCQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCQlpZiAoIXVyYikKLQkJCWdvdG8gZXJyX291dDsKLQotCQllcnIgPSBhcjkxNzBfdXNiX3ByZXBfcnhfdXJiKGFydSwgdXJiLCBHRlBfS0VSTkVMKTsKLQkJaWYgKGVycikgewotCQkJdXNiX2ZyZWVfdXJiKHVyYik7Ci0JCQlnb3RvIGVycl9vdXQ7Ci0JCX0KLQotCQl1c2JfYW5jaG9yX3VyYih1cmIsICZhcnUtPnJ4X3N1Ym1pdHRlZCk7Ci0JCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChlcnIpIHsKLQkJCXVzYl91bmFuY2hvcl91cmIodXJiKTsKLQkJCWRldl9rZnJlZV9za2JfYW55KCh2b2lkICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKLQkJCXVzYl9mcmVlX3VyYih1cmIpOwotCQkJZ290byBlcnJfb3V0OwotCQl9Ci0JCXVzYl9mcmVlX3VyYih1cmIpOwotCX0KLQotCS8qIHRoZSBkZXZpY2Ugbm93IHdhaXRpbmcgZm9yIGEgZmlybXdhcmUuICovCi0JYXJ1LT5jb21tb24uc3RhdGUgPSBBUjkxNzBfSURMRTsKLQlyZXR1cm4gMDsKLQotZXJyX291dDoKLQotCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmFydS0+cnhfc3VibWl0dGVkKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGFyOTE3MF91c2JfZmx1c2goc3RydWN0IGFyOTE3MCAqYXIpCi17Ci0Jc3RydWN0IGFyOTE3MF91c2IgKmFydSA9ICh2b2lkICopIGFyOwotCXN0cnVjdCB1cmIgKnVyYjsKLQlpbnQgcmV0LCBlcnIgPSAwOwotCi0JaWYgKElTX1NUQVJURUQoYXIpKQotCQlhcnUtPmNvbW1vbi5zdGF0ZSA9IEFSOTE3MF9JRExFOwotCi0JdXNiX3dhaXRfYW5jaG9yX2VtcHR5X3RpbWVvdXQoJmFydS0+dHhfcGVuZGluZywKLQkJCQkJICAgIG1zZWNzX3RvX2ppZmZpZXMoODAwKSk7Ci0Jd2hpbGUgKCh1cmIgPSB1c2JfZ2V0X2Zyb21fYW5jaG9yKCZhcnUtPnR4X3BlbmRpbmcpKSkgewotCQlhcjkxNzBfdHhfY2FsbGJhY2soJmFydS0+Y29tbW9uLCAodm9pZCAqKSB1cmItPmNvbnRleHQpOwotCQl1c2JfZnJlZV91cmIodXJiKTsKLQl9Ci0KLQkvKiBsZXRzIHdhaXQgYSB3aGlsZSB1bnRpbCB0aGUgdHggLSBxdWV1ZXMgYXJlIGRyaWVkIG91dCAqLwotCXJldCA9IHVzYl93YWl0X2FuY2hvcl9lbXB0eV90aW1lb3V0KCZhcnUtPnR4X3N1Ym1pdHRlZCwKLQkJCQkJICAgIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7Ci0JaWYgKHJldCA9PSAwKQotCQllcnIgPSAtRVRJTUVET1VUOwotCi0JdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmYXJ1LT50eF9zdWJtaXR0ZWQpOwotCi0JaWYgKElTX0FDQ0VQVElOR19DTUQoYXIpKQotCQlhcnUtPmNvbW1vbi5zdGF0ZSA9IEFSOTE3MF9TVEFSVEVEOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgYXI5MTcwX3VzYl9jYW5jZWxfdXJicyhzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1KQotewotCWludCBlcnI7Ci0KLQlhcnUtPmNvbW1vbi5zdGF0ZSA9IEFSOTE3MF9VTktOT1dOX1NUQVRFOwotCi0JZXJyID0gYXI5MTcwX3VzYl9mbHVzaCgmYXJ1LT5jb21tb24pOwotCWlmIChlcnIpCi0JCWRldl9lcnIoJmFydS0+dWRldi0+ZGV2LCAic3R1Y2sgdHggdXJicyFcbiIpOwotCi0JdXNiX3BvaXNvbl9hbmNob3JlZF91cmJzKCZhcnUtPnR4X3N1Ym1pdHRlZCk7Ci0JdXNiX3BvaXNvbl9hbmNob3JlZF91cmJzKCZhcnUtPnJ4X3N1Ym1pdHRlZCk7Ci19Ci0KLXN0YXRpYyBpbnQgYXI5MTcwX3VzYl9leGVjX2NtZChzdHJ1Y3QgYXI5MTcwICphciwgZW51bSBhcjkxNzBfY21kIGNtZCwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcGxlbiwgdm9pZCAqcGF5bG9hZCwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgb3V0bGVuLCB2b2lkICpvdXQpCi17Ci0Jc3RydWN0IGFyOTE3MF91c2IgKmFydSA9ICh2b2lkICopIGFyOwotCXN0cnVjdCB1cmIgKnVyYiA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQotCWlmICh1bmxpa2VseSghSVNfQUNDRVBUSU5HX0NNRChhcikpKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JaWYgKFdBUk5fT04ocGxlbiA+IEFSOTE3MF9NQVhfQ01EX0xFTiAtIDQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7Ci0JaWYgKHVubGlrZWx5KCF1cmIpKQotCQlnb3RvIGVycl9mcmVlOwotCi0JYXItPmNtZGJ1ZlswXSA9IGNwdV90b19sZTMyKHBsZW4pOwotCWFyLT5jbWRidWZbMF0gfD0gY3B1X3RvX2xlMzIoY21kIDw8IDgpOwotCS8qIHdyaXRpbmcgbXVsdGlwbGUgcmVncyBmaWxscyB0aGlzIGJ1ZmZlciBhbHJlYWR5ICovCi0JaWYgKHBsZW4gJiYgcGF5bG9hZCAhPSAodTggKikoJmFyLT5jbWRidWZbMV0pKQotCQltZW1jcHkoJmFyLT5jbWRidWZbMV0sIHBheWxvYWQsIHBsZW4pOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFydS0+Y29tbW9uLmNtZGxvY2ssIGZsYWdzKTsKLQlhcnUtPnJlYWRidWYgPSAodTggKilvdXQ7Ci0JYXJ1LT5yZWFkbGVuID0gb3V0bGVuOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFydS0+Y29tbW9uLmNtZGxvY2ssIGZsYWdzKTsKLQotCXVzYl9maWxsX2ludF91cmIodXJiLCBhcnUtPnVkZXYsCi0JCQkgdXNiX3NuZGludHBpcGUoYXJ1LT51ZGV2LCBBUjkxNzBfRVBfQ01EKSwKLQkJCSBhcnUtPmNvbW1vbi5jbWRidWYsIHBsZW4gKyA0LAotCQkJIGFyOTE3MF91c2JfdHhfdXJiX2NvbXBsZXRlLCBOVUxMLCAxKTsKLQotCXVzYl9hbmNob3JfdXJiKHVyYiwgJmFydS0+dHhfc3VibWl0dGVkKTsKLQllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwotCWlmICh1bmxpa2VseShlcnIpKSB7Ci0JCXVzYl91bmFuY2hvcl91cmIodXJiKTsKLQkJdXNiX2ZyZWVfdXJiKHVyYik7Ci0JCWdvdG8gZXJyX3VuYnVmOwotCX0KLQl1c2JfZnJlZV91cmIodXJiKTsKLQotCWVyciA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmYXJ1LT5jbWRfd2FpdCwgSFopOwotCWlmIChlcnIgPT0gMCkgewotCQllcnIgPSAtRVRJTUVET1VUOwotCQlnb3RvIGVycl91bmJ1ZjsKLQl9Ci0KLQlpZiAoYXJ1LT5yZWFkbGVuICE9IG91dGxlbikgewotCQllcnIgPSAtRU1TR1NJWkU7Ci0JCWdvdG8gZXJyX3VuYnVmOwotCX0KLQotCXJldHVybiAwOwotCi1lcnJfdW5idWY6Ci0JLyogTWF5YmUgdGhlIGRldmljZSB3YXMgcmVtb3ZlZCBpbiB0aGUgc2Vjb25kIHdlIHdlcmUgd2FpdGluZz8gKi8KLQlpZiAoSVNfU1RBUlRFRChhcikpIHsKLQkJZGV2X2VycigmYXJ1LT51ZGV2LT5kZXYsICJubyBjb21tYW5kIGZlZWRiYWNrICIKLQkJCQkJICJyZWNlaXZlZCAoJWQpLlxuIiwgZXJyKTsKLQotCQkvKiBwcm92aWRlIHNvbWUgbWF5YmUgdXNlZnVsIGRlYnVnIGluZm9ybWF0aW9uICovCi0JCXByaW50X2hleF9kdW1wX2J5dGVzKCJhcjkxNzAgY21kOiAiLCBEVU1QX1BSRUZJWF9OT05FLAotCQkJCSAgICAgYXJ1LT5jb21tb24uY21kYnVmLCBwbGVuICsgNCk7Ci0JCWR1bXBfc3RhY2soKTsKLQl9Ci0KLQkvKiBpbnZhbGlkYXRlIHRvIGF2b2lkIGNvbXBsZXRpbmcgdGhlIG5leHQgcHJlbWF0dXJlbHkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYXJ1LT5jb21tb24uY21kbG9jaywgZmxhZ3MpOwotCWFydS0+cmVhZGJ1ZiA9IE5VTEw7Ci0JYXJ1LT5yZWFkbGVuID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcnUtPmNvbW1vbi5jbWRsb2NrLCBmbGFncyk7Ci0KLWVycl9mcmVlOgotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBhcjkxNzBfdXNiX3R4KHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBhcjkxNzBfdXNiICphcnUgPSAoc3RydWN0IGFyOTE3MF91c2IgKikgYXI7Ci0Jc3RydWN0IHVyYiAqdXJiOwotCi0JaWYgKHVubGlrZWx5KCFJU19TVEFSVEVEKGFyKSkpIHsKLQkJLyogU2VyaW91c2x5LCB3aGF0IHdlcmUgeW91IGRyaW5rLi4uIGVyci4uLiB0aGlua2luZyE/ICovCi0JCXJldHVybiAtRVBFUk07Ci0JfQotCi0JdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKLQlpZiAodW5saWtlbHkoIXVyYikpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JdXNiX2ZpbGxfYnVsa191cmIodXJiLCBhcnUtPnVkZXYsCi0JCQkgIHVzYl9zbmRidWxrcGlwZShhcnUtPnVkZXYsIEFSOTE3MF9FUF9UWCksCi0JCQkgIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCi0JCQkgIGFyOTE3MF91c2JfdHhfdXJiX2NvbXBsZXRlX2ZyYW1lLCBza2IpOwotCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX1pFUk9fUEFDS0VUOwotCi0JdXNiX2FuY2hvcl91cmIodXJiLCAmYXJ1LT50eF9wZW5kaW5nKTsKLQlhcnUtPnR4X3BlbmRpbmdfdXJicysrOwotCi0JdXNiX2ZyZWVfdXJiKHVyYik7Ci0KLQlhcjkxNzBfdXNiX3N1Ym1pdF91cmIoYXJ1KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYXI5MTcwX3VzYl9jYWxsYmFja19jbWQoc3RydWN0IGFyOTE3MCAqYXIsIHUzMiBsZW4gLCB2b2lkICpidWZmZXIpCi17Ci0Jc3RydWN0IGFyOTE3MF91c2IgKmFydSA9ICh2b2lkICopIGFyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTMyIGluLCBvdXQ7Ci0KLQlpZiAodW5saWtlbHkoIWJ1ZmZlcikpCi0JCXJldHVybiA7Ci0KLQlpbiA9IGxlMzJfdG9fY3B1cCgoX19sZTMyICopYnVmZmVyKTsKLQlvdXQgPSBsZTMyX3RvX2NwdShhci0+Y21kYnVmWzBdKTsKLQotCS8qIG1hc2sgb2ZmIGxlbmd0aCBieXRlICovCi0Jb3V0ICY9IH4weEZGOwotCi0JaWYgKGFydS0+cmVhZGxlbiA+PSAwKSB7Ci0JCS8qIGFkZCBleHBlY3RlZCBsZW5ndGggKi8KLQkJb3V0IHw9IGFydS0+cmVhZGxlbjsKLQl9IGVsc2UgewotCQkvKiBhZGQgb2J0YWluZWQgbGVuZ3RoICovCi0JCW91dCB8PSBpbiAmIDB4RkY7Ci0JfQotCi0JLyoKLQkgKiBTb21lIGNvbW1hbmRzIChlLmc6IEFSOTE3MF9DTURfRlJFUVVFTkNZKSBoYXZlIGEgdmFyaWFibGUgcmVzcG9uc2UKLQkgKiBsZW5ndGggYW5kIHdlIGNhbm5vdCBwcmVkaWN0IHRoZSBjb3JyZWN0IGxlbmd0aCBpbiBhZHZhbmNlLgotCSAqIFNvIHdlIG9ubHkgY2hlY2sgaWYgd2UgcHJvdmlkZWQgZW5vdWdoIHNwYWNlIGZvciB0aGUgZGF0YS4KLQkgKi8KLQlpZiAodW5saWtlbHkob3V0IDwgaW4pKSB7Ci0JCWRldl93YXJuKCZhcnUtPnVkZXYtPmRldiwgInJlY2VpdmVkIGludmFsaWQgY29tbWFuZCByZXNwb25zZSAiCi0JCQkJCSAgImdvdCAlZCBieXRlcywgaW5zdGVhZCBvZiAlZCBieXRlcyAiCi0JCQkJCSAgImFuZCB0aGUgcmVzcCBsZW5ndGggaXMgJWQgYnl0ZXNcbiIsCi0JCQkgaW4sIG91dCwgbGVuKTsKLQkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoImFyOTE3MCBpbnZhbGlkIHJlc3A6ICIsCi0JCQkJICAgICBEVU1QX1BSRUZJWF9PRkZTRVQsIGJ1ZmZlciwgbGVuKTsKLQkJLyoKLQkJICogRG8gbm90IGNvbXBsZXRlLCB0aGVuIHRoZSBjb21tYW5kIHRpbWVzIG91dCwKLQkJICogYW5kIHdlIGdldCBhIHN0YWNrIHRyYWNlIGZyb20gdGhlcmUuCi0JCSAqLwotCQlyZXR1cm4gOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhcnUtPmNvbW1vbi5jbWRsb2NrLCBmbGFncyk7Ci0JaWYgKGFydS0+cmVhZGJ1ZiAmJiBsZW4gPiAwKSB7Ci0JCW1lbWNweShhcnUtPnJlYWRidWYsIGJ1ZmZlciArIDQsIGxlbiAtIDQpOwotCQlhcnUtPnJlYWRidWYgPSBOVUxMOwotCX0KLQljb21wbGV0ZSgmYXJ1LT5jbWRfd2FpdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXJ1LT5jb21tb24uY21kbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IGFyOTE3MF91c2JfdXBsb2FkKHN0cnVjdCBhcjkxNzBfdXNiICphcnUsIGNvbnN0IHZvaWQgKmRhdGEsCi0JCQkgICAgIHNpemVfdCBsZW4sIHUzMiBhZGRyLCBib29sIGNvbXBsZXRlKQotewotCWludCB0cmFuc2ZlciwgZXJyOwotCXU4ICpidWYgPSBrbWFsbG9jKDQwOTYsIEdGUF9LRVJORUwpOwotCi0JaWYgKCFidWYpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jd2hpbGUgKGxlbikgewotCQl0cmFuc2ZlciA9IG1pbl90KGludCwgbGVuLCA0MDk2KTsKLQkJbWVtY3B5KGJ1ZiwgZGF0YSwgdHJhbnNmZXIpOwotCi0JCWVyciA9IHVzYl9jb250cm9sX21zZyhhcnUtPnVkZXYsIHVzYl9zbmRjdHJscGlwZShhcnUtPnVkZXYsIDApLAotCQkJCSAgICAgIDB4MzAgLyogRlcgREwgKi8sIDB4NDAgfCBVU0JfRElSX09VVCwKLQkJCQkgICAgICBhZGRyID4+IDgsIDAsIGJ1ZiwgdHJhbnNmZXIsIDEwMDApOwotCi0JCWlmIChlcnIgPCAwKSB7Ci0JCQlrZnJlZShidWYpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCi0JCWxlbiAtPSB0cmFuc2ZlcjsKLQkJZGF0YSArPSB0cmFuc2ZlcjsKLQkJYWRkciArPSB0cmFuc2ZlcjsKLQl9Ci0Ja2ZyZWUoYnVmKTsKLQotCWlmIChjb21wbGV0ZSkgewotCQllcnIgPSB1c2JfY29udHJvbF9tc2coYXJ1LT51ZGV2LCB1c2Jfc25kY3RybHBpcGUoYXJ1LT51ZGV2LCAwKSwKLQkJCQkgICAgICAweDMxIC8qIEZXIERMIENPTVBMRVRFICovLAotCQkJCSAgICAgIDB4NDAgfCBVU0JfRElSX09VVCwgMCwgMCwgTlVMTCwgMCwgNTAwMCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYXI5MTcwX3VzYl9yZXNldChzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1KQotewotCWludCByZXQsIGxvY2sgPSAoYXJ1LT5pbnRmLT5jb25kaXRpb24gIT0gVVNCX0lOVEVSRkFDRV9CSU5ESU5HKTsKLQotCWlmIChsb2NrKSB7Ci0JCXJldCA9IHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQoYXJ1LT51ZGV2LCBhcnUtPmludGYpOwotCQlpZiAocmV0IDwgMCkgewotCQkJZGV2X2VycigmYXJ1LT51ZGV2LT5kZXYsICJ1bmFibGUgdG8gbG9jayBkZXZpY2UgIgotCQkJCSJmb3IgcmVzZXQgKCVkKS5cbiIsIHJldCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCi0JcmV0ID0gdXNiX3Jlc2V0X2RldmljZShhcnUtPnVkZXYpOwotCWlmIChsb2NrKQotCQl1c2JfdW5sb2NrX2RldmljZShhcnUtPnVkZXYpOwotCi0JLyogbGV0IGl0IHJlc3QgLSBmb3IgYSBzZWNvbmQgLSAqLwotCW1zbGVlcCgxMDAwKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgYXI5MTcwX3VzYl91cGxvYWRfZmlybXdhcmUoc3RydWN0IGFyOTE3MF91c2IgKmFydSkKLXsKLQlpbnQgZXJyOwotCi0JaWYgKCFhcnUtPmluaXRfdmFsdWVzKQotCQlnb3RvIHVwbG9hZF9md19zdGFydDsKLQotCS8qIEZpcnN0LCB1cGxvYWQgaW5pdGlhbCB2YWx1ZXMgdG8gZGV2aWNlIFJBTSAqLwotCWVyciA9IGFyOTE3MF91c2JfdXBsb2FkKGFydSwgYXJ1LT5pbml0X3ZhbHVlcy0+ZGF0YSwKLQkJCQlhcnUtPmluaXRfdmFsdWVzLT5zaXplLCAweDEwMjgwMCwgZmFsc2UpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycigmYXJ1LT51ZGV2LT5kZXYsICJmaXJtd2FyZSBwYXJ0IDEgIgotCQkJInVwbG9hZCBmYWlsZWQgKCVkKS5cbiIsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi11cGxvYWRfZndfc3RhcnQ6Ci0KLQkvKiBUaGVuLCB1cGxvYWQgdGhlIGZpcm13YXJlIGl0c2VsZiBhbmQgc3RhcnQgaXQgKi8KLQlyZXR1cm4gYXI5MTcwX3VzYl91cGxvYWQoYXJ1LCBhcnUtPmZpcm13YXJlLT5kYXRhLCBhcnUtPmZpcm13YXJlLT5zaXplLAotCQkJCTB4MjAwMDAwLCB0cnVlKTsKLX0KLQotc3RhdGljIGludCBhcjkxNzBfdXNiX2luaXRfdHJhbnNwb3J0KHN0cnVjdCBhcjkxNzBfdXNiICphcnUpCi17Ci0Jc3RydWN0IGFyOTE3MCAqYXIgPSAodm9pZCAqKSAmYXJ1LT5jb21tb247Ci0JaW50IGVycjsKLQotCWFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcik7Ci0KLQkvKiBTZXQgVVNCIFJ4IHN0cmVhbSBtb2RlIE1BWCBwYWNrZXQgbnVtYmVyIHRvIDIgKi8KLQlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX1VTQl9SRUdfTUFYX0FHR19VUExPQUQsIDB4NCk7Ci0KLQkvKiBTZXQgVVNCIFJ4IHN0cmVhbSBtb2RlIHRpbWVvdXQgdG8gMTB1cyAqLwotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfVVNCX1JFR19VUExPQURfVElNRV9DVEwsIDB4ODApOwotCi0JYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOwotCi0JZXJyID0gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOwotCWlmIChlcnIpCi0JCWRldl9lcnIoJmFydS0+dWRldi0+ZGV2LCAiVVNCIHNldHVwIGZhaWxlZCAoJWQpLlxuIiwgZXJyKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIGFyOTE3MF91c2Jfc3RvcChzdHJ1Y3QgYXI5MTcwICphcikKLXsKLQlzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1ID0gKHZvaWQgKikgYXI7Ci0JaW50IHJldDsKLQotCWlmIChJU19BQ0NFUFRJTkdfQ01EKGFyKSkKLQkJYXJ1LT5jb21tb24uc3RhdGUgPSBBUjkxNzBfU1RPUFBFRDsKLQotCXJldCA9IGFyOTE3MF91c2JfZmx1c2goYXIpOwotCWlmIChyZXQpCi0JCWRldl9lcnIoJmFydS0+dWRldi0+ZGV2LCAia2lsbCBwZW5kaW5nIHR4IHVyYnMuXG4iKTsKLQotCXVzYl9wb2lzb25fYW5jaG9yZWRfdXJicygmYXJ1LT50eF9zdWJtaXR0ZWQpOwotCi0JLyoKLQkgKiBOb3RlOgotCSAqIFNvIGZhciB3ZSBmcmVlZCBhbGwgdHggdXJicywgYnV0IHdlIHdvbid0IGRhcmUgdG8gdG91Y2ggYW55IHJ4IHVyYnMuCi0JICogRWxzZSB3ZSB3b3VsZCBlbmQgdXAgd2l0aCBhIHVucmVzcG9uc2l2ZSBkZXZpY2UuLi4KLQkgKi8KLX0KLQotc3RhdGljIGludCBhcjkxNzBfdXNiX29wZW4oc3RydWN0IGFyOTE3MCAqYXIpCi17Ci0Jc3RydWN0IGFyOTE3MF91c2IgKmFydSA9ICh2b2lkICopIGFyOwotCWludCBlcnI7Ci0KLQl1c2JfdW5wb2lzb25fYW5jaG9yZWRfdXJicygmYXJ1LT50eF9zdWJtaXR0ZWQpOwotCWVyciA9IGFyOTE3MF91c2JfaW5pdF90cmFuc3BvcnQoYXJ1KTsKLQlpZiAoZXJyKSB7Ci0JCXVzYl9wb2lzb25fYW5jaG9yZWRfdXJicygmYXJ1LT50eF9zdWJtaXR0ZWQpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWFydS0+Y29tbW9uLnN0YXRlID0gQVI5MTcwX0lETEU7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYXI5MTcwX3VzYl9pbml0X2RldmljZShzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1KQotewotCWludCBlcnI7Ci0KLQllcnIgPSBhcjkxNzBfdXNiX2FsbG9jX3J4X2lycV91cmIoYXJ1KTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXQ7Ci0KLQllcnIgPSBhcjkxNzBfdXNiX2FsbG9jX3J4X2J1bGtfdXJicyhhcnUpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3Vucng7Ci0KLQllcnIgPSBhcjkxNzBfdXNiX3VwbG9hZF9maXJtd2FyZShhcnUpOwotCWlmIChlcnIpIHsKLQkJZXJyID0gYXI5MTcwX2VjaG9fdGVzdCgmYXJ1LT5jb21tb24sIDB4NjBkNDMxMTApOwotCQlpZiAoZXJyKSB7Ci0JCQkvKiBmb3JjZSB1c2VyIGludmVudGlvbiwgYnkgZGlzYWJsaW5nIHRoZSBkZXZpY2UgKi8KLQkJCWVyciA9IHVzYl9kcml2ZXJfc2V0X2NvbmZpZ3VyYXRpb24oYXJ1LT51ZGV2LCAtMSk7Ci0JCQlkZXZfZXJyKCZhcnUtPnVkZXYtPmRldiwgImRldmljZSBpcyBpbiBhIGJhZCBzdGF0ZS4gIgotCQkJCQkJICJwbGVhc2UgcmVjb25uZWN0IGl0IVxuIik7Ci0JCQlnb3RvIGVycl91bnJ4OwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWVycl91bnJ4OgotCWFyOTE3MF91c2JfY2FuY2VsX3VyYnMoYXJ1KTsKLQotZXJyX291dDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBhcjkxNzBfdXNiX2Zpcm13YXJlX2ZhaWxlZChzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1KQotewotCXN0cnVjdCBkZXZpY2UgKnBhcmVudCA9IGFydS0+dWRldi0+ZGV2LnBhcmVudDsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKLQotCS8qCi0JICogU3RvcmUgYSBjb3B5IG9mIHRoZSB1c2JfZGV2aWNlIHBvaW50ZXIgbG9jYWxseS4KLQkgKiBUaGlzIGlzIGJlY2F1c2UgZGV2aWNlX3JlbGVhc2VfZHJpdmVyIGluaXRpYXRlcwotCSAqIGFyOTE3MF91c2JfZGlzY29ubmVjdCwgd2hpY2ggaW4gdHVybiBmcmVlcyBvdXIKLQkgKiBkcml2ZXIgY29udGV4dCAoYXJ1KS4KLQkgKi8KLQl1ZGV2ID0gYXJ1LT51ZGV2OwotCi0JY29tcGxldGUoJmFydS0+ZmlybXdhcmVfbG9hZGluZ19jb21wbGV0ZSk7Ci0KLQkvKiB1bmJpbmQgYW55dGhpbmcgZmFpbGVkICovCi0JaWYgKHBhcmVudCkKLQkJZGV2aWNlX2xvY2socGFyZW50KTsKLQotCWRldmljZV9yZWxlYXNlX2RyaXZlcigmdWRldi0+ZGV2KTsKLQlpZiAocGFyZW50KQotCQlkZXZpY2VfdW5sb2NrKHBhcmVudCk7Ci0KLQl1c2JfcHV0X2Rldih1ZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgYXI5MTcwX3VzYl9maXJtd2FyZV9maW5pc2goY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgdm9pZCAqY29udGV4dCkKLXsKLQlzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1ID0gY29udGV4dDsKLQlpbnQgZXJyOwotCi0JYXJ1LT5maXJtd2FyZSA9IGZ3OwotCi0JaWYgKCFmdykgewotCQlkZXZfZXJyKCZhcnUtPnVkZXYtPmRldiwgImZpcm13YXJlIGZpbGUgbm90IGZvdW5kLlxuIik7Ci0JCWdvdG8gZXJyX2ZyZWVmdzsKLQl9Ci0KLQllcnIgPSBhcjkxNzBfdXNiX2luaXRfZGV2aWNlKGFydSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfZnJlZWZ3OwotCi0JZXJyID0gYXI5MTcwX3VzYl9vcGVuKCZhcnUtPmNvbW1vbik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfdW5yeDsKLQotCWVyciA9IGFyOTE3MF9yZWdpc3RlcigmYXJ1LT5jb21tb24sICZhcnUtPnVkZXYtPmRldik7Ci0KLQlhcjkxNzBfdXNiX3N0b3AoJmFydS0+Y29tbW9uKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl91bnJ4OwotCi0JY29tcGxldGUoJmFydS0+ZmlybXdhcmVfbG9hZGluZ19jb21wbGV0ZSk7Ci0JdXNiX3B1dF9kZXYoYXJ1LT51ZGV2KTsKLQlyZXR1cm47Ci0KLSBlcnJfdW5yeDoKLQlhcjkxNzBfdXNiX2NhbmNlbF91cmJzKGFydSk7Ci0KLSBlcnJfZnJlZWZ3OgotCWFyOTE3MF91c2JfZmlybXdhcmVfZmFpbGVkKGFydSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFyOTE3MF91c2JfZmlybXdhcmVfaW5pdHMoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywKLQkJCQkgICAgICB2b2lkICpjb250ZXh0KQotewotCXN0cnVjdCBhcjkxNzBfdXNiICphcnUgPSBjb250ZXh0OwotCWludCBlcnI7Ci0KLQlpZiAoIWZ3KSB7Ci0JCWRldl9lcnIoJmFydS0+dWRldi0+ZGV2LCAiZmlsZSB3aXRoIGluaXQgdmFsdWVzIG5vdCBmb3VuZC5cbiIpOwotCQlhcjkxNzBfdXNiX2Zpcm13YXJlX2ZhaWxlZChhcnUpOwotCQlyZXR1cm47Ci0JfQotCi0JYXJ1LT5pbml0X3ZhbHVlcyA9IGZ3OwotCi0JLyogb2sgc28gd2UgaGF2ZSB0aGUgaW5pdCB2YWx1ZXMgLS0gZ2V0IGNvZGUgZm9yIHR3by1zdGFnZSAqLwotCi0JZXJyID0gcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQoVEhJU19NT0RVTEUsIDEsICJhcjkxNzAtMi5mdyIsCi0JCQkJICAgICAgJmFydS0+dWRldi0+ZGV2LCBHRlBfS0VSTkVMLCBhcnUsCi0JCQkJICAgICAgYXI5MTcwX3VzYl9maXJtd2FyZV9maW5pc2gpOwotCWlmIChlcnIpCi0JCWFyOTE3MF91c2JfZmlybXdhcmVfZmFpbGVkKGFydSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFyOTE3MF91c2JfZmlybXdhcmVfc3RlcDIoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgdm9pZCAqY29udGV4dCkKLXsKLQlzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1ID0gY29udGV4dDsKLQlpbnQgZXJyOwotCi0JaWYgKGZ3KSB7Ci0JCWFyOTE3MF91c2JfZmlybXdhcmVfZmluaXNoKGZ3LCBjb250ZXh0KTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChhcnUtPnJlcV9vbmVfc3RhZ2VfZncpIHsKLQkJZGV2X2VycigmYXJ1LT51ZGV2LT5kZXYsICJhcjkxNzAuZncgZmlybXdhcmUgZmlsZSAiCi0JCQkibm90IGZvdW5kIGFuZCBpcyByZXF1aXJlZCBmb3IgdGhpcyBkZXZpY2VcbiIpOwotCQlhcjkxNzBfdXNiX2Zpcm13YXJlX2ZhaWxlZChhcnUpOwotCQlyZXR1cm47Ci0JfQotCi0JZGV2X2VycigmYXJ1LT51ZGV2LT5kZXYsICJhcjkxNzAuZncgZmlybXdhcmUgZmlsZSAiCi0JCSJub3QgZm91bmQsIHRyeWluZyBvbGQgZmlybXdhcmUuLi5cbiIpOwotCi0JZXJyID0gcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQoVEhJU19NT0RVTEUsIDEsICJhcjkxNzAtMS5mdyIsCi0JCQkJICAgICAgJmFydS0+dWRldi0+ZGV2LCBHRlBfS0VSTkVMLCBhcnUsCi0JCQkJICAgICAgYXI5MTcwX3VzYl9maXJtd2FyZV9pbml0cyk7Ci0JaWYgKGVycikKLQkJYXI5MTcwX3VzYl9maXJtd2FyZV9mYWlsZWQoYXJ1KTsKLX0KLQotc3RhdGljIGJvb2wgYXI5MTcwX3JlcXVpcmVzX29uZV9zdGFnZShjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCi17Ci0JaWYgKCFpZC0+ZHJpdmVyX2luZm8pCi0JCXJldHVybiBmYWxzZTsKLQlpZiAoaWQtPmRyaXZlcl9pbmZvID09IEFSOTE3MF9SRVFfRlcxX09OTFkpCi0JCXJldHVybiB0cnVlOwotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGludCBhcjkxNzBfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAotCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCBhcjkxNzBfdXNiICphcnU7Ci0Jc3RydWN0IGFyOTE3MCAqYXI7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7Ci0JaW50IGVycjsKLQotCWFydSA9IGFyOTE3MF9hbGxvYyhzaXplb2YoKmFydSkpOwotCWlmIChJU19FUlIoYXJ1KSkgewotCQllcnIgPSBQVFJfRVJSKGFydSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwotCXVzYl9nZXRfZGV2KHVkZXYpOwotCWFydS0+dWRldiA9IHVkZXY7Ci0JYXJ1LT5pbnRmID0gaW50ZjsKLQlhciA9ICZhcnUtPmNvbW1vbjsKLQotCWFydS0+cmVxX29uZV9zdGFnZV9mdyA9IGFyOTE3MF9yZXF1aXJlc19vbmVfc3RhZ2UoaWQpOwotCi0JdXNiX3NldF9pbnRmZGF0YShpbnRmLCBhcnUpOwotCVNFVF9JRUVFODAyMTFfREVWKGFyLT5odywgJmludGYtPmRldik7Ci0KLQlpbml0X3VzYl9hbmNob3IoJmFydS0+cnhfc3VibWl0dGVkKTsKLQlpbml0X3VzYl9hbmNob3IoJmFydS0+dHhfcGVuZGluZyk7Ci0JaW5pdF91c2JfYW5jaG9yKCZhcnUtPnR4X3N1Ym1pdHRlZCk7Ci0JaW5pdF9jb21wbGV0aW9uKCZhcnUtPmNtZF93YWl0KTsKLQlpbml0X2NvbXBsZXRpb24oJmFydS0+ZmlybXdhcmVfbG9hZGluZ19jb21wbGV0ZSk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmFydS0+dHhfdXJiX2xvY2spOwotCi0JYXJ1LT50eF9wZW5kaW5nX3VyYnMgPSAwOwotCWF0b21pY19zZXQoJmFydS0+dHhfc3VibWl0dGVkX3VyYnMsIDApOwotCi0JYXJ1LT5jb21tb24uc3RvcCA9IGFyOTE3MF91c2Jfc3RvcDsKLQlhcnUtPmNvbW1vbi5mbHVzaCA9IGFyOTE3MF91c2JfZmx1c2g7Ci0JYXJ1LT5jb21tb24ub3BlbiA9IGFyOTE3MF91c2Jfb3BlbjsKLQlhcnUtPmNvbW1vbi50eCA9IGFyOTE3MF91c2JfdHg7Ci0JYXJ1LT5jb21tb24uZXhlY19jbWQgPSBhcjkxNzBfdXNiX2V4ZWNfY21kOwotCWFydS0+Y29tbW9uLmNhbGxiYWNrX2NtZCA9IGFyOTE3MF91c2JfY2FsbGJhY2tfY21kOwotCi0jaWZkZWYgQ09ORklHX1BNCi0JdWRldi0+cmVzZXRfcmVzdW1lID0gMTsKLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KLQllcnIgPSBhcjkxNzBfdXNiX3Jlc2V0KGFydSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfZnJlZWh3OwotCi0JdXNiX2dldF9kZXYoYXJ1LT51ZGV2KTsKLQlyZXR1cm4gcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQoVEhJU19NT0RVTEUsIDEsICJhcjkxNzAuZnciLAotCQkJCSAgICAgICAmYXJ1LT51ZGV2LT5kZXYsIEdGUF9LRVJORUwsIGFydSwKLQkJCQkgICAgICAgYXI5MTcwX3VzYl9maXJtd2FyZV9zdGVwMik7Ci1lcnJfZnJlZWh3OgotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7Ci0JdXNiX3B1dF9kZXYodWRldik7Ci0JaWVlZTgwMjExX2ZyZWVfaHcoYXItPmh3KTsKLW91dDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBhcjkxNzBfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCi17Ci0Jc3RydWN0IGFyOTE3MF91c2IgKmFydSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0KLQlpZiAoIWFydSkKLQkJcmV0dXJuOwotCi0JYXJ1LT5jb21tb24uc3RhdGUgPSBBUjkxNzBfSURMRTsKLQotCXdhaXRfZm9yX2NvbXBsZXRpb24oJmFydS0+ZmlybXdhcmVfbG9hZGluZ19jb21wbGV0ZSk7Ci0KLQlhcjkxNzBfdW5yZWdpc3RlcigmYXJ1LT5jb21tb24pOwotCWFyOTE3MF91c2JfY2FuY2VsX3VyYnMoYXJ1KTsKLQotCXVzYl9wdXRfZGV2KGFydS0+dWRldik7Ci0JdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKLQlpZWVlODAyMTFfZnJlZV9odyhhcnUtPmNvbW1vbi5odyk7Ci0KLQlyZWxlYXNlX2Zpcm13YXJlKGFydS0+aW5pdF92YWx1ZXMpOwotCXJlbGVhc2VfZmlybXdhcmUoYXJ1LT5maXJtd2FyZSk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgYXI5MTcwX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCi0JCQkgIHBtX21lc3NhZ2VfdCAgbWVzc2FnZSkKLXsKLQlzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKLQotCWlmICghYXJ1KQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWFydS0+Y29tbW9uLnN0YXRlID0gQVI5MTcwX0lETEU7Ci0JYXI5MTcwX3VzYl9jYW5jZWxfdXJicyhhcnUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYXI5MTcwX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKLXsKLQlzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKLQlpbnQgZXJyOwotCi0JaWYgKCFhcnUpCi0JCXJldHVybiAtRU5PREVWOwotCi0JdXNiX3VucG9pc29uX2FuY2hvcmVkX3VyYnMoJmFydS0+cnhfc3VibWl0dGVkKTsKLQl1c2JfdW5wb2lzb25fYW5jaG9yZWRfdXJicygmYXJ1LT50eF9zdWJtaXR0ZWQpOwotCi0JZXJyID0gYXI5MTcwX3VzYl9pbml0X2RldmljZShhcnUpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3Vucng7Ci0KLQllcnIgPSBhcjkxNzBfdXNiX29wZW4oJmFydS0+Y29tbW9uKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl91bnJ4OwotCi0JcmV0dXJuIDA7Ci0KLWVycl91bnJ4OgotCWFydS0+Y29tbW9uLnN0YXRlID0gQVI5MTcwX0lETEU7Ci0JYXI5MTcwX3VzYl9jYW5jZWxfdXJicyhhcnUpOwotCi0JcmV0dXJuIGVycjsKLX0KLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KLQotc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGFyOTE3MF9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiYXI5MTcwdXNiIiwKLQkucHJvYmUgPSBhcjkxNzBfdXNiX3Byb2JlLAotCS5kaXNjb25uZWN0ID0gYXI5MTcwX3VzYl9kaXNjb25uZWN0LAotCS5pZF90YWJsZSA9IGFyOTE3MF91c2JfaWRzLAotCS5zb2Z0X3VuYmluZCA9IDEsCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQgPSBhcjkxNzBfc3VzcGVuZCwKLQkucmVzdW1lID0gYXI5MTcwX3Jlc3VtZSwKLQkucmVzZXRfcmVzdW1lID0gYXI5MTcwX3Jlc3VtZSwKLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFyOTE3MF9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHVzYl9yZWdpc3RlcigmYXI5MTcwX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBhcjkxNzBfZXhpdCh2b2lkKQotewotCXVzYl9kZXJlZ2lzdGVyKCZhcjkxNzBfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQoYXI5MTcwX2luaXQpOwotbW9kdWxlX2V4aXQoYXI5MTcwX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC91c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvdXNiLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxOWIwNjAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC91c2IuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBBdGhlcm9zIEFSOTE3MCBVU0IgZHJpdmVyCi0gKgotICogRHJpdmVyIHNwZWNpZmljIGRlZmluaXRpb25zCi0gKgotICogQ29weXJpZ2h0IDIwMDgsIEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+Ci0gKiBDb3B5cmlnaHQgMjAwOSwgQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAd2ViLmRlPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBzZWUKLSAqIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCi0gKgotICogVGhpcyBmaWxlIGluY29ycG9yYXRlcyB3b3JrIGNvdmVyZWQgYnkgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCi0gKiBwZXJtaXNzaW9uIG5vdGljZToKLSAqICAgIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KLSAqCi0gKiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiAgICBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgotICogICAgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiAgICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgotICogICAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotI2lmbmRlZiBfX1VTQl9ICi0jZGVmaW5lIF9fVVNCX0gKLQotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KLSNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KLSNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLSNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgotI2luY2x1ZGUgImVlcHJvbS5oIgotI2luY2x1ZGUgImh3LmgiCi0jaW5jbHVkZSAiYXI5MTcwLmgiCi0KLSNkZWZpbmUgQVI5MTcwX05VTV9SWF9VUkJTCQkJMTYKLSNkZWZpbmUgQVI5MTcwX05VTV9UWF9VUkJTCQkJOAotCi1zdHJ1Y3QgZmlybXdhcmU7Ci0KLXN0cnVjdCBhcjkxNzBfdXNiIHsKLQlzdHJ1Y3QgYXI5MTcwIGNvbW1vbjsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKLQotCXN0cnVjdCB1c2JfYW5jaG9yIHJ4X3N1Ym1pdHRlZDsKLQlzdHJ1Y3QgdXNiX2FuY2hvciB0eF9wZW5kaW5nOwotCXN0cnVjdCB1c2JfYW5jaG9yIHR4X3N1Ym1pdHRlZDsKLQotCWJvb2wgcmVxX29uZV9zdGFnZV9mdzsKLQotCXNwaW5sb2NrX3QgdHhfdXJiX2xvY2s7Ci0JYXRvbWljX3QgdHhfc3VibWl0dGVkX3VyYnM7Ci0JdW5zaWduZWQgaW50IHR4X3BlbmRpbmdfdXJiczsKLQotCXN0cnVjdCBjb21wbGV0aW9uIGNtZF93YWl0OwotCXN0cnVjdCBjb21wbGV0aW9uIGZpcm13YXJlX2xvYWRpbmdfY29tcGxldGU7Ci0JaW50IHJlYWRsZW47Ci0JdTggKnJlYWRidWY7Ci0KLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmluaXRfdmFsdWVzOwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmU7Ci19OwotCi0jZW5kaWYgLyogX19VU0JfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aC5oCmluZGV4IGE2YzZhNDYuLjdjZjQzMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoLmgKQEAgLTExOSwxNyArMTE5LDExIEBACiAJdm9pZCAoKndyaXRlKSh2b2lkICosIHUzMiB2YWwsIHUzMiByZWdfb2Zmc2V0KTsKIAl2b2lkICgqZW5hYmxlX3dyaXRlX2J1ZmZlcikodm9pZCAqKTsKIAl2b2lkICgqd3JpdGVfZmx1c2gpICh2b2lkICopOworCXUzMiAoKnJtdykodm9pZCAqLCB1MzIgcmVnX29mZnNldCwgdTMyIHNldCwgdTMyIGNscik7CiB9OwogCiBzdHJ1Y3QgYXRoX2NvbW1vbjsKLQotc3RydWN0IGF0aF9idXNfb3BzIHsKLQllbnVtIGF0aF9idXNfdHlwZSBhdGhfYnVzX3R5cGU7Ci0Jdm9pZCAoKnJlYWRfY2FjaGVzaXplKShzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLCBpbnQgKmNzeik7Ci0JYm9vbCAoKmVlcHJvbV9yZWFkKShzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLCB1MzIgb2ZmLCB1MTYgKmRhdGEpOwotCXZvaWQgKCpidF9jb2V4X3ByZXApKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24pOwotCXZvaWQgKCpleHRuX3N5bmNoX2VuKShzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uKTsKLX07CitzdHJ1Y3QgYXRoX2J1c19vcHM7CiAKIHN0cnVjdCBhdGhfY29tbW9uIHsKIAl2b2lkICphaDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9haGIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9haGIuYwppbmRleCA4MjMyNGU5Li5lYTk5ODI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYWhiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2FoYi5jCkBAIC0xOCw2ICsxOCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9ubDgwMjExLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxhcjIzMXhfcGxhdGZvcm0uaD4KICNpbmNsdWRlICJhdGg1ay5oIgogI2luY2x1ZGUgImRlYnVnLmgiCkBAIC02MiwxMCArNjMsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBhdGg1a19haGJfZWVwcm9tX3JlYWRfbWFjKHN0cnVjdCBhdGg1a19odyAqYWgsIHU4ICptYWMpCit7CisJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGFoLT5haF9zYzsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKHNjLT5kZXYpOworCXN0cnVjdCBhcjIzMXhfYm9hcmRfY29uZmlnICpiY2ZnID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJdTggKmNmZ19tYWM7CisKKwlpZiAodG9fcGxhdGZvcm1fZGV2aWNlKHNjLT5kZXYpLT5pZCA9PSAwKQorCQljZmdfbWFjID0gYmNmZy0+Y29uZmlnLT53bGFuMF9tYWM7CisJZWxzZQorCQljZmdfbWFjID0gYmNmZy0+Y29uZmlnLT53bGFuMV9tYWM7CisKKwltZW1jcHkobWFjLCBjZmdfbWFjLCBFVEhfQUxFTik7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoX2J1c19vcHMgYXRoX2FoYl9idXNfb3BzID0gewogCS5hdGhfYnVzX3R5cGUgPSBBVEhfQUhCLAogCS5yZWFkX2NhY2hlc2l6ZSA9IGF0aDVrX2FoYl9yZWFkX2NhY2hlc2l6ZSwKIAkuZWVwcm9tX3JlYWQgPSBhdGg1a19haGJfZWVwcm9tX3JlYWQsCisJLmVlcHJvbV9yZWFkX21hYyA9IGF0aDVrX2FoYl9lZXByb21fcmVhZF9tYWMsCiB9OwogCiAvKkluaXRpYWxpemF0aW9uKi8KQEAgLTE0Miw2ICsxNjAsMTYgQEAKIAkJZWxzZQogCQkJcmVnIHw9IEFSNUtfQVI1MzEyX0VOQUJMRV9XTEFOMTsKIAkJX19yYXdfd3JpdGVsKHJlZywgKHZvaWQgX19pb21lbSAqKSBBUjVLX0FSNTMxMl9FTkFCTEUpOworCisJCS8qCisJCSAqIE9uIGEgZHVhbC1iYW5kIEFSNTMxMiwgdGhlIG11bHRpYmFuZCByYWRpbyBpcyBvbmx5CisJCSAqIHVzZWQgYXMgcGFzcy10aHJvdWdoLiBEaXNhYmxlIDIgR0h6IHN1cHBvcnQgaW4gdGhlCisJCSAqIGRyaXZlciBmb3IgaXQKKwkJICovCisJCWlmICh0b19wbGF0Zm9ybV9kZXZpY2Uoc2MtPmRldiktPmlkID09IDAgJiYKKwkJICAgIChiY2ZnLT5jb25maWctPmZsYWdzICYgKEJEX1dMQU4wfEJEX1dMQU4xKSkgPT0KKwkJICAgICAoQkRfV0xBTjF8QkRfV0xBTjApKQorCQkJX19zZXRfYml0KEFUSF9TVEFUXzJHX0RJU0FCTEVELCBzYy0+c3RhdHVzKTsKIAl9CiAKIAlyZXQgPSBhdGg1a19pbml0X3NvZnRjKHNjLCAmYXRoX2FoYl9idXNfb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hdGg1ay5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2F0aDVrLmgKaW5kZXggOGEwNmRiZC4uYmI1MDcwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2F0aDVrLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2F0aDVrLmgKQEAgLTIyNCw4ICsyMjQsNyBAQAogCiAvKiBTSUZTICovCiAjZGVmaW5lCUFSNUtfSU5JVF9TSUZTX1RVUkJPCQkJNgotLyogWFhYOiA4IGZyb20gaW5pdHZhbHMgMTAgZnJvbSBzdGFuZGFyZCAqLwotI2RlZmluZQlBUjVLX0lOSVRfU0lGU19ERUZBVUxUX0JHCQk4CisjZGVmaW5lCUFSNUtfSU5JVF9TSUZTX0RFRkFVTFRfQkcJCTEwCiAjZGVmaW5lCUFSNUtfSU5JVF9TSUZTX0RFRkFVTFRfQQkJMTYKICNkZWZpbmUJQVI1S19JTklUX1NJRlNfSEFMRl9SQVRFCQkzMgogI2RlZmluZSBBUjVLX0lOSVRfU0lGU19RVUFSVEVSX1JBVEUJCTY0CkBAIC00NTMsMTIgKzQ1MiwxMCBAQAogCXUxNgl0c19zZXFudW07CiAJdTE2CXRzX3RzdGFtcDsKIAl1OAl0c19zdGF0dXM7Ci0JdTgJdHNfcmF0ZVs0XTsKLQl1OAl0c19yZXRyeVs0XTsKIAl1OAl0c19maW5hbF9pZHg7CisJdTgJdHNfZmluYWxfcmV0cnk7CiAJczgJdHNfcnNzaTsKIAl1OAl0c19zaG9ydHJldHJ5OwotCXU4CXRzX2xvbmdyZXRyeTsKIAl1OAl0c192aXJ0Y29sOwogCXU4CXRzX2FudGVubmE7CiB9OwpAQCAtODc1LDYgKzg3MiwxOSBAQAogCUFSNUtfSU5UX1FUUklHCT0JMHg0MDAwMDAwMCwgLyogTm9uIGNvbW1vbiAqLwogCUFSNUtfSU5UX0dMT0JBTCA9CTB4ODAwMDAwMDAsCiAKKwlBUjVLX0lOVF9UWF9BTEwgPSBBUjVLX0lOVF9UWE9LCisJCXwgQVI1S19JTlRfVFhERVNDCisJCXwgQVI1S19JTlRfVFhFUlIKKwkJfCBBUjVLX0lOVF9UWEVPTAorCQl8IEFSNUtfSU5UX1RYVVJOLAorCisJQVI1S19JTlRfUlhfQUxMID0gQVI1S19JTlRfUlhPSworCQl8IEFSNUtfSU5UX1JYREVTQworCQl8IEFSNUtfSU5UX1JYRVJSCisJCXwgQVI1S19JTlRfUlhOT0ZSTQorCQl8IEFSNUtfSU5UX1JYRU9MCisJCXwgQVI1S19JTlRfUlhPUk4sCisKIAlBUjVLX0lOVF9DT01NT04gID0gQVI1S19JTlRfUlhPSwogCQl8IEFSNUtfSU5UX1JYREVTQwogCQl8IEFSNUtfSU5UX1JYRVJSCkBAIC0xMDU4LDYgKzEwNjgsNyBAQAogCXU4CQkJYWhfY292ZXJhZ2VfY2xhc3M7CiAJYm9vbAkJCWFoX2Fja19iaXRyYXRlX2hpZ2g7CiAJdTgJCQlhaF9id21vZGU7CisJYm9vbAkJCWFoX3Nob3J0X3Nsb3Q7CiAKIAkvKiBBbnRlbm5hIENvbnRyb2wgKi8KIAl1MzIJCQlhaF9hbnRfY3RsW0FSNUtfRUVQUk9NX05fTU9ERVNdW0FSNUtfQU5UX01BWF07CkBAIC0xMTQ0LDYgKzExNTUsMTMgQEAKIAkJc3RydWN0IGF0aDVrX3J4X3N0YXR1cyAqKTsKIH07CiAKK3N0cnVjdCBhdGhfYnVzX29wcyB7CisJZW51bSBhdGhfYnVzX3R5cGUgYXRoX2J1c190eXBlOworCXZvaWQgKCpyZWFkX2NhY2hlc2l6ZSkoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiwgaW50ICpjc3opOworCWJvb2wgKCplZXByb21fcmVhZCkoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiwgdTMyIG9mZiwgdTE2ICpkYXRhKTsKKwlpbnQgKCplZXByb21fcmVhZF9tYWMpKHN0cnVjdCBhdGg1a19odyAqYWgsIHU4ICptYWMpOworfTsKKwogLyoKICAqIFByb3RvdHlwZXMKICAqLwpAQCAtMTIyNywxMyArMTI0NSwxMiBAQAogLyogRUVQUk9NIGFjY2VzcyBmdW5jdGlvbnMgKi8KIGludCBhdGg1a19lZXByb21faW5pdChzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIHZvaWQgYXRoNWtfZWVwcm9tX2RldGFjaChzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKLWludCBhdGg1a19lZXByb21fcmVhZF9tYWMoc3RydWN0IGF0aDVrX2h3ICphaCwgdTggKm1hYyk7CiAKIAogLyogUHJvdG9jb2wgQ29udHJvbCBVbml0IEZ1bmN0aW9ucyAqLwogLyogSGVscGVycyAqLwogaW50IGF0aDVrX2h3X2dldF9mcmFtZV9kdXJhdGlvbihzdHJ1Y3QgYXRoNWtfaHcgKmFoLAotCQlpbnQgbGVuLCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUpOworCQlpbnQgbGVuLCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUsIGJvb2wgc2hvcnRwcmUpOwogdW5zaWduZWQgaW50IGF0aDVrX2h3X2dldF9kZWZhdWx0X3Nsb3R0aW1lKHN0cnVjdCBhdGg1a19odyAqYWgpOwogdW5zaWduZWQgaW50IGF0aDVrX2h3X2dldF9kZWZhdWx0X3NpZnMoc3RydWN0IGF0aDVrX2h3ICphaCk7CiBleHRlcm4gaW50IGF0aDVrX2h3X3NldF9vcG1vZGUoc3RydWN0IGF0aDVrX2h3ICphaCwgZW51bSBubDgwMjExX2lmdHlwZSBvcG1vZGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2F0dGFjaC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2F0dGFjaC5jCmluZGV4IGJjODI0MDUuLjE1ODg0MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hdHRhY2guYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYXR0YWNoLmMKQEAgLTMxMywxMiArMzEzLDE3IEBACiAJCWdvdG8gZXJyOwogCX0KIAorCWlmICh0ZXN0X2JpdChBVEhfU1RBVF8yR19ESVNBQkxFRCwgc2MtPnN0YXR1cykpIHsKKwkJX19jbGVhcl9iaXQoQVI1S19NT0RFXzExQiwgYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfbW9kZSk7CisJCV9fY2xlYXJfYml0KEFSNUtfTU9ERV8xMUcsIGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX21vZGUpOworCX0KKwogCS8qIENyeXB0byBzZXR0aW5ncyAqLwogCWNvbW1vbi0+a2V5bWF4ID0gKHNjLT5haC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMCA/CiAJCQkgIEFSNUtfS0VZVEFCTEVfU0laRV81MjEwIDogQVI1S19LRVlUQUJMRV9TSVpFXzUyMTEpOwogCiAJaWYgKHNyZXYgPj0gQVI1S19TUkVWX0FSNTIxMl9WNCAmJgotCSAgICAoZWUtPmVlX3ZlcnNpb24gPj0gQVI1S19FRVBST01fVkVSU0lPTl81XzAgJiYKKwkgICAgKGVlLT5lZV92ZXJzaW9uIDwgQVI1S19FRVBST01fVkVSU0lPTl81XzAgfHwKIAkgICAgIUFSNUtfRUVQUk9NX0FFU19ESVMoZWUtPmVlX21pc2M1KSkpCiAJCWNvbW1vbi0+Y3J5cHRfY2FwcyB8PSBBVEhfQ1JZUFRfQ0FQX0NJUEhFUl9BRVNDQ007CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jCmluZGV4IDM0OWE1OTYuLjIyMDQ3NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuYwpAQCAtMTQ0NCw2ICsxNDQ0LDIxIEBACiB9CiAKIHN0YXRpYyB2b2lkCithdGg1a19zZXRfY3VycmVudF9pbWFzayhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQoreworCWVudW0gYXRoNWtfaW50IGltYXNrID0gc2MtPmltYXNrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2MtPmlycWxvY2ssIGZsYWdzKTsKKwlpZiAoc2MtPnJ4X3BlbmRpbmcpCisJCWltYXNrICY9IH5BUjVLX0lOVF9SWF9BTEw7CisJaWYgKHNjLT50eF9wZW5kaW5nKQorCQlpbWFzayAmPSB+QVI1S19JTlRfVFhfQUxMOworCWF0aDVrX2h3X3NldF9pbXIoc2MtPmFoLCBpbWFzayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPmlycWxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQKIGF0aDVrX3Rhc2tsZXRfcngodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBhdGg1a19yeF9zdGF0dXMgcnMgPSB7fTsKQEAgLTE1MDYsNiArMTUyMSw4IEBACiAJfSB3aGlsZSAoYXRoNWtfcnhidWZfc2V0dXAoc2MsIGJmKSA9PSAwKTsKIHVubG9jazoKIAlzcGluX3VubG9jaygmc2MtPnJ4YnVmbG9jayk7CisJc2MtPnJ4X3BlbmRpbmcgPSBmYWxzZTsKKwlhdGg1a19zZXRfY3VycmVudF9pbWFzayhzYyk7CiB9CiAKIApAQCAtMTU3MywyOCArMTU5MCwyOCBAQAogCQkJIHN0cnVjdCBhdGg1a190eHEgKnR4cSwgc3RydWN0IGF0aDVrX3R4X3N0YXR1cyAqdHMpCiB7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOworCXU4IHRyaWVzWzNdOwogCWludCBpOwogCiAJc2MtPnN0YXRzLnR4X2FsbF9jb3VudCsrOwogCXNjLT5zdGF0cy50eF9ieXRlc19jb3VudCArPSBza2ItPmxlbjsKIAlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCisJdHJpZXNbMF0gPSBpbmZvLT5zdGF0dXMucmF0ZXNbMF0uY291bnQ7CisJdHJpZXNbMV0gPSBpbmZvLT5zdGF0dXMucmF0ZXNbMV0uY291bnQ7CisJdHJpZXNbMl0gPSBpbmZvLT5zdGF0dXMucmF0ZXNbMl0uY291bnQ7CisKIAlpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXMoaW5mbyk7Ci0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCisJZm9yIChpID0gMDsgaSA8IHRzLT50c19maW5hbF9pZHg7IGkrKykgewogCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnIgPQogCQkJJmluZm8tPnN0YXR1cy5yYXRlc1tpXTsKIAotCQlpZiAodHMtPnRzX3JhdGVbaV0pIHsKLQkJCXItPmlkeCA9IGF0aDVrX2h3X3RvX2RyaXZlcl9yaXgoc2MsIHRzLT50c19yYXRlW2ldKTsKLQkJCXItPmNvdW50ID0gdHMtPnRzX3JldHJ5W2ldOwotCQl9IGVsc2UgewotCQkJci0+aWR4ID0gLTE7Ci0JCQlyLT5jb3VudCA9IDA7Ci0JCX0KKwkJci0+Y291bnQgPSB0cmllc1tpXTsKIAl9CiAKLQkvKiBjb3VudCB0aGUgc3VjY2Vzc2Z1bCBhdHRlbXB0IGFzIHdlbGwgKi8KLQlpbmZvLT5zdGF0dXMucmF0ZXNbdHMtPnRzX2ZpbmFsX2lkeF0uY291bnQrKzsKKwlpbmZvLT5zdGF0dXMucmF0ZXNbdHMtPnRzX2ZpbmFsX2lkeF0uY291bnQgPSB0cy0+dHNfZmluYWxfcmV0cnk7CisJaW5mby0+c3RhdHVzLnJhdGVzW3RzLT50c19maW5hbF9pZHggKyAxXS5pZHggPSAtMTsKIAogCWlmICh1bmxpa2VseSh0cy0+dHNfc3RhdHVzKSkgewogCQlzYy0+c3RhdHMuYWNrX2ZhaWwrKzsKQEAgLTE2MDksNiArMTYyNiw5IEBACiAJfSBlbHNlIHsKIAkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOwogCQlpbmZvLT5zdGF0dXMuYWNrX3NpZ25hbCA9IHRzLT50c19yc3NpOworCisJCS8qIGNvdW50IHRoZSBzdWNjZXNzZnVsIGF0dGVtcHQgYXMgd2VsbCAqLworCQlpbmZvLT5zdGF0dXMucmF0ZXNbdHMtPnRzX2ZpbmFsX2lkeF0uY291bnQrKzsKIAl9CiAKIAkvKgpAQCAtMTY5MCw2ICsxNzEwLDkgQEAKIAlmb3IgKGk9MDsgaSA8IEFSNUtfTlVNX1RYX1FVRVVFUzsgaSsrKQogCQlpZiAoc2MtPnR4cXNbaV0uc2V0dXAgJiYgKHNjLT5haC0+YWhfdHhxX2lzciAmIEJJVChpKSkpCiAJCQlhdGg1a190eF9wcm9jZXNzcShzYywgJnNjLT50eHFzW2ldKTsKKworCXNjLT50eF9wZW5kaW5nID0gZmFsc2U7CisJYXRoNWtfc2V0X2N1cnJlbnRfaW1hc2soc2MpOwogfQogCiAKQEAgLTIxMTksNiArMjE0MiwyMCBAQAogCSAqIEFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX0NSLCBBUjVLX0NSX1NXSSk7ICovCiB9CiAKK3N0YXRpYyB2b2lkCithdGg1a19zY2hlZHVsZV9yeChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQoreworCXNjLT5yeF9wZW5kaW5nID0gdHJ1ZTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZzYy0+cnh0cSk7Cit9CisKK3N0YXRpYyB2b2lkCithdGg1a19zY2hlZHVsZV90eChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQoreworCXNjLT50eF9wZW5kaW5nID0gdHJ1ZTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZzYy0+dHh0cSk7Cit9CisKIGlycXJldHVybl90CiBhdGg1a19pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKQEAgLTIxNjEsNyArMjE5OCw3IEBACiAJCQkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoc2MtPmh3LCAmc2MtPnJlc2V0X3dvcmspOwogCQkJfQogCQkJZWxzZQotCQkJCXRhc2tsZXRfc2NoZWR1bGUoJnNjLT5yeHRxKTsKKwkJCQlhdGg1a19zY2hlZHVsZV9yeChzYyk7CiAJCX0gZWxzZSB7CiAJCQlpZiAoc3RhdHVzICYgQVI1S19JTlRfU1dCQSkgewogCQkJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnNjLT5iZWFjb250cSk7CkBAIC0yMTc5LDEwICsyMjE2LDEwIEBACiAJCQkJYXRoNWtfaHdfdXBkYXRlX3R4X3RyaWdsZXZlbChhaCwgdHJ1ZSk7CiAJCQl9CiAJCQlpZiAoc3RhdHVzICYgKEFSNUtfSU5UX1JYT0sgfCBBUjVLX0lOVF9SWEVSUikpCi0JCQkJdGFza2xldF9zY2hlZHVsZSgmc2MtPnJ4dHEpOworCQkJCWF0aDVrX3NjaGVkdWxlX3J4KHNjKTsKIAkJCWlmIChzdGF0dXMgJiAoQVI1S19JTlRfVFhPSyB8IEFSNUtfSU5UX1RYREVTQwogCQkJCQl8IEFSNUtfSU5UX1RYRVJSIHwgQVI1S19JTlRfVFhFT0wpKQotCQkJCXRhc2tsZXRfc2NoZWR1bGUoJnNjLT50eHRxKTsKKwkJCQlhdGg1a19zY2hlZHVsZV90eChzYyk7CiAJCQlpZiAoc3RhdHVzICYgQVI1S19JTlRfQk1JU1MpIHsKIAkJCQkvKiBUT0RPICovCiAJCQl9CkBAIC0yMjAxLDYgKzIyMzgsOSBAQAogCiAJfSB3aGlsZSAoYXRoNWtfaHdfaXNfaW50cl9wZW5kaW5nKGFoKSAmJiAtLWNvdW50ZXIgPiAwKTsKIAorCWlmIChzYy0+cnhfcGVuZGluZyB8fCBzYy0+dHhfcGVuZGluZykKKwkJYXRoNWtfc2V0X2N1cnJlbnRfaW1hc2soc2MpOworCiAJaWYgKHVubGlrZWx5KCFjb3VudGVyKSkKIAkJQVRINUtfV0FSTihzYywgInRvbyBtYW55IGludGVycnVwdHMsIGdpdmluZyB1cCBmb3Igbm93XG4iKTsKIApAQCAtMjM1NCw3ICsyMzk0LDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmc2MtPnJ4YnVmbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnNjLT50eGJ1ZmxvY2spOwogCXNwaW5fbG9ja19pbml0KCZzYy0+YmxvY2spOwotCisJc3Bpbl9sb2NrX2luaXQoJnNjLT5pcnFsb2NrKTsKIAogCS8qIFNldHVwIGludGVycnVwdCBoYW5kbGVyICovCiAJcmV0ID0gcmVxdWVzdF9pcnEoc2MtPmlycSwgYXRoNWtfaW50ciwgSVJRRl9TSEFSRUQsICJhdGgiLCBzYyk7CkBAIC0yNTcyLDYgKzI2MTIsOCBAQAogCiBzdGF0aWMgdm9pZCBzdG9wX3Rhc2tsZXRzKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCiB7CisJc2MtPnJ4X3BlbmRpbmcgPSBmYWxzZTsKKwlzYy0+dHhfcGVuZGluZyA9IGZhbHNlOwogCXRhc2tsZXRfa2lsbCgmc2MtPnJ4dHEpOwogCXRhc2tsZXRfa2lsbCgmc2MtPnR4dHEpOwogCXRhc2tsZXRfa2lsbCgmc2MtPmNhbGliKTsKQEAgLTI4MzgsNyArMjg4MCw3IEBACiAJSU5JVF9XT1JLKCZzYy0+cmVzZXRfd29yaywgYXRoNWtfcmVzZXRfd29yayk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnNjLT50eF9jb21wbGV0ZV93b3JrLCBhdGg1a190eF9jb21wbGV0ZV9wb2xsX3dvcmspOwogCi0JcmV0ID0gYXRoNWtfZWVwcm9tX3JlYWRfbWFjKGFoLCBtYWMpOworCXJldCA9IGF0aDVrX2h3X2NvbW1vbihhaCktPmJ1c19vcHMtPmVlcHJvbV9yZWFkX21hYyhhaCwgbWFjKTsKIAlpZiAocmV0KSB7CiAJCUFUSDVLX0VSUihzYywgInVuYWJsZSB0byByZWFkIGFkZHJlc3MgZnJvbSBFRVBST01cbiIpOwogCQlnb3RvIGVycl9xdWV1ZXM7CkBAIC0yODk4LDcgKzI5NDAsNiBAQAogCSAqIFhYWDogPz8/IGRldGFjaCBhdGg1a19odyA/Pz8KIAkgKiBPdGhlciB0aGFuIHRoYXQsIGl0J3Mgc3RyYWlnaHRmb3J3YXJkLi4uCiAJICovCi0JYXRoNWtfZGVidWdfZmluaXNoX2RldmljZShzYyk7CiAJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoaHcpOwogCWF0aDVrX2Rlc2NfZnJlZShzYyk7CiAJYXRoNWtfdHhxX3JlbGVhc2Uoc2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmgKaW5kZXggOTc4ZjFmNC4uYjI5NGYzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5oCkBAIC0xOTMsMTIgKzE5MywxMyBAQAogCWRtYV9hZGRyX3QJCWRlc2NfZGFkZHI7CS8qIERNQSAocGh5c2ljYWwpIGFkZHJlc3MgKi8KIAlzaXplX3QJCQlkZXNjX2xlbjsJLyogc2l6ZSBvZiBUWC9SWCBkZXNjcmlwdG9ycyAqLwogCi0JREVDTEFSRV9CSVRNQVAoc3RhdHVzLCA1KTsKKwlERUNMQVJFX0JJVE1BUChzdGF0dXMsIDYpOwogI2RlZmluZSBBVEhfU1RBVF9JTlZBTElECTAJCS8qIGRpc2FibGUgaGFyZHdhcmUgYWNjZXNzZXMgKi8KICNkZWZpbmUgQVRIX1NUQVRfTVJSRVRSWQkxCQkvKiBtdWx0aS1yYXRlIHJldHJ5IHN1cHBvcnQgKi8KICNkZWZpbmUgQVRIX1NUQVRfUFJPTUlTQwkyCiAjZGVmaW5lIEFUSF9TVEFUX0xFRFNPRlQJMwkJLyogZW5hYmxlIExFRCBncGlvIHN0YXR1cyAqLwogI2RlZmluZSBBVEhfU1RBVF9TVEFSVEVECTQJCS8qIG9wZW5lZCAmIGlycXMgZW5hYmxlZCAqLworI2RlZmluZSBBVEhfU1RBVF8yR19ESVNBQkxFRAk1CQkvKiBtdWx0aWJhbmQgcmFkaW8gd2l0aG91dCAyRyAqLwogCiAJdW5zaWduZWQgaW50CQlmaWx0ZXJfZmxhZ3M7CS8qIEhXIGZsYWdzLCBBUjVLX1JYX0ZJTFRFUl8qICovCiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjdXJjaGFuOwkvKiBjdXJyZW50IGgvdyBjaGFubmVsICovCkBAIC0yMDcsNiArMjA4LDEwIEBACiAKIAllbnVtIGF0aDVrX2ludAkJaW1hc2s7CQkvKiBpbnRlcnJ1cHQgbWFzayBjb3B5ICovCiAKKwlzcGlubG9ja190CQlpcnFsb2NrOworCWJvb2wJCQlyeF9wZW5kaW5nOwkvKiByeCB0YXNrbGV0IHBlbmRpbmcgKi8KKwlib29sCQkJdHhfcGVuZGluZzsJLyogdHggdGFza2xldCBwZW5kaW5nICovCisKIAl1OAkJCWxsYWRkcltFVEhfQUxFTl07CiAJdTgJCQlic3NpZG1hc2tbRVRIX0FMRU5dOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvY2Fwcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2NhcHMuYwppbmRleCBmNzdlOGE3Li43ZGQ4OGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvY2Fwcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9jYXBzLmMKQEAgLTk0LDYgKzk0LDkgQEAKIAkJfQogCX0KIAorCWlmICgoYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gJiAweGYwKSA9PSBBUjVLX1NSRVZfUkFEXzIxMTIpCisJCV9fY2xlYXJfYml0KEFSNUtfTU9ERV8xMUEsIGNhcHMtPmNhcF9tb2RlKTsKKwogCS8qIFNldCBudW1iZXIgb2Ygc3VwcG9ydGVkIFRYIHF1ZXVlcyAqLwogCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMCkKIAkJY2Fwcy0+Y2FwX3F1ZXVlcy5xX3R4X251bSA9IEFSNUtfTlVNX1RYX1FVRVVFU19OT1FDVTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZWJ1Zy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2RlYnVnLmMKaW5kZXggMDIzMGYzMC4uMGJmNzMxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2RlYnVnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2RlYnVnLmMKQEAgLTg4OCw2NSArODg4LDM4IEBACiB2b2lkCiBhdGg1a19kZWJ1Z19pbml0X2RldmljZShzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQogeworCXN0cnVjdCBkZW50cnkgKnBoeWRpcjsKKwogCXNjLT5kZWJ1Zy5sZXZlbCA9IGF0aDVrX2RlYnVnOwogCi0Jc2MtPmRlYnVnLmRlYnVnZnNfcGh5ZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJhdGg1ayIsCi0JCQkJc2MtPmh3LT53aXBoeS0+ZGVidWdmc2Rpcik7CisJcGh5ZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJhdGg1ayIsIHNjLT5ody0+d2lwaHktPmRlYnVnZnNkaXIpOworCWlmICghcGh5ZGlyKQorCSAgICByZXR1cm47CiAKLQlzYy0+ZGVidWcuZGVidWdmc19kZWJ1ZyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImRlYnVnIiwKLQkJCQlTX0lXVVNSIHwgU19JUlVTUiwKLQkJCQlzYy0+ZGVidWcuZGVidWdmc19waHlkaXIsIHNjLCAmZm9wc19kZWJ1Zyk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgiZGVidWciLCBTX0lXVVNSIHwgU19JUlVTUiwgcGh5ZGlyLCBzYywKKwkJCSAgICAmZm9wc19kZWJ1Zyk7CiAKLQlzYy0+ZGVidWcuZGVidWdmc19yZWdpc3RlcnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZWdpc3RlcnMiLCBTX0lSVVNSLAotCQkJCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeWRpciwgc2MsICZmb3BzX3JlZ2lzdGVycyk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgicmVnaXN0ZXJzIiwgU19JUlVTUiwgcGh5ZGlyLCBzYywgJmZvcHNfcmVnaXN0ZXJzKTsKIAotCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX2JlYWNvbiA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImJlYWNvbiIsCi0JCQkJU19JV1VTUiB8IFNfSVJVU1IsCi0JCQkJc2MtPmRlYnVnLmRlYnVnZnNfcGh5ZGlyLCBzYywgJmZvcHNfYmVhY29uKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJiZWFjb24iLCBTX0lXVVNSIHwgU19JUlVTUiwgcGh5ZGlyLCBzYywKKwkJCSAgICAmZm9wc19iZWFjb24pOwogCi0Jc2MtPmRlYnVnLmRlYnVnZnNfcmVzZXQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZXNldCIsIFNfSVdVU1IsCi0JCQkJc2MtPmRlYnVnLmRlYnVnZnNfcGh5ZGlyLCBzYywgJmZvcHNfcmVzZXQpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlc2V0IiwgU19JV1VTUiwgcGh5ZGlyLCBzYywgJmZvcHNfcmVzZXQpOwogCi0Jc2MtPmRlYnVnLmRlYnVnZnNfYW50ZW5uYSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImFudGVubmEiLAotCQkJCVNfSVdVU1IgfCBTX0lSVVNSLAotCQkJCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeWRpciwgc2MsICZmb3BzX2FudGVubmEpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImFudGVubmEiLCBTX0lXVVNSIHwgU19JUlVTUiwgcGh5ZGlyLCBzYywKKwkJCSAgICAmZm9wc19hbnRlbm5hKTsKIAotCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX21pc2MgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJtaXNjIiwKLQkJCQlTX0lSVVNSLAotCQkJCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeWRpciwgc2MsICZmb3BzX21pc2MpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoIm1pc2MiLCBTX0lSVVNSLCBwaHlkaXIsIHNjLCAmZm9wc19taXNjKTsKIAotCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX2ZyYW1lZXJyb3JzID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZnJhbWVlcnJvcnMiLAotCQkJCVNfSVdVU1IgfCBTX0lSVVNSLAotCQkJCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeWRpciwgc2MsCi0JCQkJJmZvcHNfZnJhbWVlcnJvcnMpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImZyYW1lZXJyb3JzIiwgU19JV1VTUiB8IFNfSVJVU1IsIHBoeWRpciwgc2MsCisJCQkgICAgJmZvcHNfZnJhbWVlcnJvcnMpOwogCi0Jc2MtPmRlYnVnLmRlYnVnZnNfYW5pID0gZGVidWdmc19jcmVhdGVfZmlsZSgiYW5pIiwKLQkJCQlTX0lXVVNSIHwgU19JUlVTUiwKLQkJCQlzYy0+ZGVidWcuZGVidWdmc19waHlkaXIsIHNjLAotCQkJCSZmb3BzX2FuaSk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgiYW5pIiwgU19JV1VTUiB8IFNfSVJVU1IsIHBoeWRpciwgc2MsICZmb3BzX2FuaSk7CiAKLQlzYy0+ZGVidWcuZGVidWdmc19xdWV1ZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInF1ZXVlIiwKLQkJCQlTX0lXVVNSIHwgU19JUlVTUiwKLQkJCQlzYy0+ZGVidWcuZGVidWdmc19waHlkaXIsIHNjLAotCQkJCSZmb3BzX3F1ZXVlKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJxdWV1ZSIsIFNfSVdVU1IgfCBTX0lSVVNSLCBwaHlkaXIsIHNjLAorCQkJICAgICZmb3BzX3F1ZXVlKTsKIH0KIAotdm9pZAotYXRoNWtfZGVidWdfZmluaXNoX2RldmljZShzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQotewotCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX2RlYnVnKTsKLQlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc19yZWdpc3RlcnMpOwotCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX2JlYWNvbik7Ci0JZGVidWdmc19yZW1vdmUoc2MtPmRlYnVnLmRlYnVnZnNfcmVzZXQpOwotCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX2FudGVubmEpOwotCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX21pc2MpOwotCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX2ZyYW1lZXJyb3JzKTsKLQlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc19hbmkpOwotCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3F1ZXVlKTsKLQlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc19waHlkaXIpOwotfQotCi0KIC8qIGZ1bmN0aW9ucyB1c2VkIGluIG90aGVyIHBsYWNlcyAqLwogCiB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZGVidWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZWJ1Zy5oCmluZGV4IGIwMzU1YWUuLjE5M2RkMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZWJ1Zy5oCkBAIC02OCwxNyArNjgsNiBAQAogCiBzdHJ1Y3QgYXRoNWtfZGJnX2luZm8gewogCXVuc2lnbmVkIGludAkJbGV2ZWw7CQkvKiBkZWJ1ZyBsZXZlbCAqLwotCS8qIGRlYnVnZnMgZW50cmllcyAqLwotCXN0cnVjdCBkZW50cnkJCSpkZWJ1Z2ZzX3BoeWRpcjsKLQlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdmc19kZWJ1ZzsKLQlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdmc19yZWdpc3RlcnM7Ci0Jc3RydWN0IGRlbnRyeQkJKmRlYnVnZnNfYmVhY29uOwotCXN0cnVjdCBkZW50cnkJCSpkZWJ1Z2ZzX3Jlc2V0OwotCXN0cnVjdCBkZW50cnkJCSpkZWJ1Z2ZzX2FudGVubmE7Ci0Jc3RydWN0IGRlbnRyeQkJKmRlYnVnZnNfbWlzYzsKLQlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdmc19mcmFtZWVycm9yczsKLQlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdmc19hbmk7Ci0Jc3RydWN0IGRlbnRyeQkJKmRlYnVnZnNfcXVldWU7CiB9OwogCiAvKioKQEAgLTE0MSw5ICsxMzAsNiBAQAogYXRoNWtfZGVidWdfaW5pdF9kZXZpY2Uoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CiAKIHZvaWQKLWF0aDVrX2RlYnVnX2ZpbmlzaF9kZXZpY2Uoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7Ci0KLXZvaWQKIGF0aDVrX2RlYnVnX3ByaW50cnhidWZmcyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIAogdm9pZApAQCAtMTY3LDkgKzE1Myw2IEBACiBhdGg1a19kZWJ1Z19pbml0X2RldmljZShzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKSB7fQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLWF0aDVrX2RlYnVnX2ZpbmlzaF9kZXZpY2Uoc3RydWN0IGF0aDVrX3NvZnRjICpzYykge30KLQotc3RhdGljIGlubGluZSB2b2lkCiBhdGg1a19kZWJ1Z19wcmludHJ4YnVmZnMoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgc3RydWN0IGF0aDVrX2h3ICphaCkge30KIAogc3RhdGljIGlubGluZSB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZGVzYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Rlc2MuYwppbmRleCBhOGZjYzk0Li42MjE3MmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZGVzYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kZXNjLmMKQEAgLTE4NSw2ICsxODUsMTIgQEAKIAlzdHJ1Y3QgYXRoNWtfaHdfNHdfdHhfY3RsICp0eF9jdGw7CiAJdW5zaWduZWQgaW50IGZyYW1lX2xlbjsKIAorCS8qCisJICogVXNlIGxvY2FsIHZhcmlhYmxlcyBmb3IgdGhlc2UgdG8gcmVkdWNlIGxvYWQvc3RvcmUgYWNjZXNzIG9uCisJICogdW5jYWNoZWQgbWVtb3J5CisJICovCisJdTMyIHR4Y3RsMCA9IDAsIHR4Y3RsMSA9IDAsIHR4Y3RsMiA9IDAsIHR4Y3RsMyA9IDA7CisKIAl0eF9jdGwgPSAmZGVzYy0+dWQuZHNfdHg1MjEyLnR4X2N0bDsKIAogCS8qCkBAIC0yMDgsOCArMjE0LDkgQEAKIAlpZiAodHhfcG93ZXIgPiBBUjVLX1RVTkVfTUFYX1RYUE9XRVIpCiAJCXR4X3Bvd2VyID0gQVI1S19UVU5FX01BWF9UWFBPV0VSOwogCi0JLyogQ2xlYXIgZGVzY3JpcHRvciAqLwotCW1lbXNldCgmZGVzYy0+dWQuZHNfdHg1MjEyLCAwLCBzaXplb2Yoc3RydWN0IGF0aDVrX2h3XzUyMTJfdHhfZGVzYykpOworCS8qIENsZWFyIGRlc2NyaXB0b3Igc3RhdHVzIGFyZWEgKi8KKwltZW1zZXQoJmRlc2MtPnVkLmRzX3R4NTIxMi50eF9zdGF0LCAwLAorCSAgICAgICBzaXplb2YoZGVzYy0+dWQuZHNfdHg1MjEyLnR4X3N0YXQpKTsKIAogCS8qIFNldHVwIGNvbnRyb2wgZGVzY3JpcHRvciAqLwogCkBAIC0yMjEsNyArMjI4LDcgQEAKIAlpZiAoZnJhbWVfbGVuICYgfkFSNUtfNFdfVFhfREVTQ19DVEwwX0ZSQU1FX0xFTikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl0eF9jdGwtPnR4X2NvbnRyb2xfMCA9IGZyYW1lX2xlbiAmIEFSNUtfNFdfVFhfREVTQ19DVEwwX0ZSQU1FX0xFTjsKKwl0eGN0bDAgPSBmcmFtZV9sZW4gJiBBUjVLXzRXX1RYX0RFU0NfQ1RMMF9GUkFNRV9MRU47CiAKIAkvKiBWZXJpZnkgYW5kIHNldCBidWZmZXIgbGVuZ3RoICovCiAKQEAgLTIzMiwyMSArMjM5LDE3IEBACiAJaWYgKHBrdF9sZW4gJiB+QVI1S180V19UWF9ERVNDX0NUTDFfQlVGX0xFTikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl0eF9jdGwtPnR4X2NvbnRyb2xfMSA9IHBrdF9sZW4gJiBBUjVLXzRXX1RYX0RFU0NfQ1RMMV9CVUZfTEVOOworCXR4Y3RsMSA9IHBrdF9sZW4gJiBBUjVLXzRXX1RYX0RFU0NfQ1RMMV9CVUZfTEVOOwogCi0JdHhfY3RsLT50eF9jb250cm9sXzAgfD0KLQkJQVI1S19SRUdfU00odHhfcG93ZXIsIEFSNUtfNFdfVFhfREVTQ19DVEwwX1hNSVRfUE9XRVIpIHwKLQkJQVI1S19SRUdfU00oYW50ZW5uYV9tb2RlLCBBUjVLXzRXX1RYX0RFU0NfQ1RMMF9BTlRfTU9ERV9YTUlUKTsKLQl0eF9jdGwtPnR4X2NvbnRyb2xfMSB8PSBBUjVLX1JFR19TTSh0eXBlLAotCQkJCQlBUjVLXzRXX1RYX0RFU0NfQ1RMMV9GUkFNRV9UWVBFKTsKLQl0eF9jdGwtPnR4X2NvbnRyb2xfMiA9IEFSNUtfUkVHX1NNKHR4X3RyaWVzMCwKLQkJCQkJQVI1S180V19UWF9ERVNDX0NUTDJfWE1JVF9UUklFUzApOwotCXR4X2N0bC0+dHhfY29udHJvbF8zID0gdHhfcmF0ZTAgJiBBUjVLXzRXX1RYX0RFU0NfQ1RMM19YTUlUX1JBVEUwOworCXR4Y3RsMCB8PSBBUjVLX1JFR19TTSh0eF9wb3dlciwgQVI1S180V19UWF9ERVNDX0NUTDBfWE1JVF9QT1dFUikgfAorCQkgIEFSNUtfUkVHX1NNKGFudGVubmFfbW9kZSwgQVI1S180V19UWF9ERVNDX0NUTDBfQU5UX01PREVfWE1JVCk7CisJdHhjdGwxIHw9IEFSNUtfUkVHX1NNKHR5cGUsIEFSNUtfNFdfVFhfREVTQ19DVEwxX0ZSQU1FX1RZUEUpOworCXR4Y3RsMiA9IEFSNUtfUkVHX1NNKHR4X3RyaWVzMCwgQVI1S180V19UWF9ERVNDX0NUTDJfWE1JVF9UUklFUzApOworCXR4Y3RsMyA9IHR4X3JhdGUwICYgQVI1S180V19UWF9ERVNDX0NUTDNfWE1JVF9SQVRFMDsKIAogI2RlZmluZSBfVFhfRkxBR1MoX2MsIF9mbGFnKQkJCQkJXAogCWlmIChmbGFncyAmIEFSNUtfVFhERVNDXyMjX2ZsYWcpIHsJCQlcCi0JCXR4X2N0bC0+dHhfY29udHJvbF8jI19jIHw9CQkJXAotCQkJQVI1S180V19UWF9ERVNDX0NUTCMjX2MjI18jI19mbGFnOwlcCisJCXR4Y3RsIyNfYyB8PSBBUjVLXzRXX1RYX0RFU0NfQ1RMIyNfYyMjXyMjX2ZsYWc7CVwKIAl9CiAKIAlfVFhfRkxBR1MoMCwgQ0xSRE1BU0spOwpAQCAtMjYyLDggKzI2NSw4IEBACiAJICogV0VQIGNyYXAKIAkgKi8KIAlpZiAoa2V5X2luZGV4ICE9IEFSNUtfVFhLRVlJWF9JTlZBTElEKSB7Ci0JCXR4X2N0bC0+dHhfY29udHJvbF8wIHw9IEFSNUtfNFdfVFhfREVTQ19DVEwwX0VOQ1JZUFRfS0VZX1ZBTElEOwotCQl0eF9jdGwtPnR4X2NvbnRyb2xfMSB8PSBBUjVLX1JFR19TTShrZXlfaW5kZXgsCisJCXR4Y3RsMCB8PSBBUjVLXzRXX1RYX0RFU0NfQ1RMMF9FTkNSWVBUX0tFWV9WQUxJRDsKKwkJdHhjdGwxIHw9IEFSNUtfUkVHX1NNKGtleV9pbmRleCwKIAkJCQlBUjVLXzRXX1RYX0RFU0NfQ1RMMV9FTkNSWVBUX0tFWV9JRFgpOwogCX0KIApAQCAtMjc0LDEyICsyNzcsMTYgQEAKIAkJaWYgKChmbGFncyAmIEFSNUtfVFhERVNDX1JUU0VOQSkgJiYKIAkJCQkoZmxhZ3MgJiBBUjVLX1RYREVTQ19DVFNFTkEpKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXR4X2N0bC0+dHhfY29udHJvbF8yIHw9IHJ0c2N0c19kdXJhdGlvbiAmCi0JCQkJQVI1S180V19UWF9ERVNDX0NUTDJfUlRTX0RVUkFUSU9OOwotCQl0eF9jdGwtPnR4X2NvbnRyb2xfMyB8PSBBUjVLX1JFR19TTShydHNjdHNfcmF0ZSwKKwkJdHhjdGwyIHw9IHJ0c2N0c19kdXJhdGlvbiAmIEFSNUtfNFdfVFhfREVTQ19DVEwyX1JUU19EVVJBVElPTjsKKwkJdHhjdGwzIHw9IEFSNUtfUkVHX1NNKHJ0c2N0c19yYXRlLAogCQkJCUFSNUtfNFdfVFhfREVTQ19DVEwzX1JUU19DVFNfUkFURSk7CiAJfQogCisJdHhfY3RsLT50eF9jb250cm9sXzAgPSB0eGN0bDA7CisJdHhfY3RsLT50eF9jb250cm9sXzEgPSB0eGN0bDE7CisJdHhfY3RsLT50eF9jb250cm9sXzIgPSB0eGN0bDI7CisJdHhfY3RsLT50eF9jb250cm9sXzMgPSB0eGN0bDM7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzY0LDcgKzM3MSw3IEBACiAJCUFSNUtfREVTQ19UWF9TVEFUVVMwX1NFTkRfVElNRVNUQU1QKTsKIAl0cy0+dHNfc2hvcnRyZXRyeSA9IEFSNUtfUkVHX01TKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzAsCiAJCUFSNUtfREVTQ19UWF9TVEFUVVMwX1NIT1JUX1JFVFJZX0NPVU5UKTsKLQl0cy0+dHNfbG9uZ3JldHJ5ID0gQVI1S19SRUdfTVModHhfc3RhdHVzLT50eF9zdGF0dXNfMCwKKwl0cy0+dHNfZmluYWxfcmV0cnkgPSBBUjVLX1JFR19NUyh0eF9zdGF0dXMtPnR4X3N0YXR1c18wLAogCQlBUjVLX0RFU0NfVFhfU1RBVFVTMF9MT05HX1JFVFJZX0NPVU5UKTsKIAkvKlRPRE86IHRzLT50c192aXJ0Y29sICsgdGVzdCovCiAJdHMtPnRzX3NlcW51bSA9IEFSNUtfUkVHX01TKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzEsCkBAIC0zNzMsOSArMzgwLDYgQEAKIAkJQVI1S19ERVNDX1RYX1NUQVRVUzFfQUNLX1NJR19TVFJFTkdUSCk7CiAJdHMtPnRzX2FudGVubmEgPSAxOwogCXRzLT50c19zdGF0dXMgPSAwOwotCXRzLT50c19yYXRlWzBdID0gQVI1S19SRUdfTVModHhfY3RsLT50eF9jb250cm9sXzAsCi0JCUFSNUtfMldfVFhfREVTQ19DVEwwX1hNSVRfUkFURSk7Ci0JdHMtPnRzX3JldHJ5WzBdID0gdHMtPnRzX2xvbmdyZXRyeTsKIAl0cy0+dHNfZmluYWxfaWR4ID0gMDsKIAogCWlmICghKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzAgJiBBUjVLX0RFU0NfVFhfU1RBVFVTMF9GUkFNRV9YTUlUX09LKSkgewpAQCAtNDAxLDgxICs0MDUsNDggQEAKIHsKIAlzdHJ1Y3QgYXRoNWtfaHdfNHdfdHhfY3RsICp0eF9jdGw7CiAJc3RydWN0IGF0aDVrX2h3X3R4X3N0YXR1cyAqdHhfc3RhdHVzOworCXUzMiB0eHN0YXQwLCB0eHN0YXQxOwogCiAJdHhfY3RsID0gJmRlc2MtPnVkLmRzX3R4NTIxMi50eF9jdGw7CiAJdHhfc3RhdHVzID0gJmRlc2MtPnVkLmRzX3R4NTIxMi50eF9zdGF0OwogCisJdHhzdGF0MSA9IEFDQ0VTU19PTkNFKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzEpOworCiAJLyogTm8gZnJhbWUgaGFzIGJlZW4gc2VuZCBvciBlcnJvciAqLwotCWlmICh1bmxpa2VseSghKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzEgJiBBUjVLX0RFU0NfVFhfU1RBVFVTMV9ET05FKSkpCisJaWYgKHVubGlrZWx5KCEodHhzdGF0MSAmIEFSNUtfREVTQ19UWF9TVEFUVVMxX0RPTkUpKSkKIAkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKIAorCXR4c3RhdDAgPSBBQ0NFU1NfT05DRSh0eF9zdGF0dXMtPnR4X3N0YXR1c18wKTsKKwogCS8qCiAJICogR2V0IGRlc2NyaXB0b3Igc3RhdHVzCiAJICovCi0JdHMtPnRzX3RzdGFtcCA9IEFSNUtfUkVHX01TKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzAsCisJdHMtPnRzX3RzdGFtcCA9IEFSNUtfUkVHX01TKHR4c3RhdDAsCiAJCUFSNUtfREVTQ19UWF9TVEFUVVMwX1NFTkRfVElNRVNUQU1QKTsKLQl0cy0+dHNfc2hvcnRyZXRyeSA9IEFSNUtfUkVHX01TKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzAsCisJdHMtPnRzX3Nob3J0cmV0cnkgPSBBUjVLX1JFR19NUyh0eHN0YXQwLAogCQlBUjVLX0RFU0NfVFhfU1RBVFVTMF9TSE9SVF9SRVRSWV9DT1VOVCk7Ci0JdHMtPnRzX2xvbmdyZXRyeSA9IEFSNUtfUkVHX01TKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzAsCisJdHMtPnRzX2ZpbmFsX3JldHJ5ID0gQVI1S19SRUdfTVModHhzdGF0MCwKIAkJQVI1S19ERVNDX1RYX1NUQVRVUzBfTE9OR19SRVRSWV9DT1VOVCk7Ci0JdHMtPnRzX3NlcW51bSA9IEFSNUtfUkVHX01TKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzEsCisJdHMtPnRzX3NlcW51bSA9IEFSNUtfUkVHX01TKHR4c3RhdDEsCiAJCUFSNUtfREVTQ19UWF9TVEFUVVMxX1NFUV9OVU0pOwotCXRzLT50c19yc3NpID0gQVI1S19SRUdfTVModHhfc3RhdHVzLT50eF9zdGF0dXNfMSwKKwl0cy0+dHNfcnNzaSA9IEFSNUtfUkVHX01TKHR4c3RhdDEsCiAJCUFSNUtfREVTQ19UWF9TVEFUVVMxX0FDS19TSUdfU1RSRU5HVEgpOwotCXRzLT50c19hbnRlbm5hID0gKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzEgJgorCXRzLT50c19hbnRlbm5hID0gKHR4c3RhdDEgJgogCQlBUjVLX0RFU0NfVFhfU1RBVFVTMV9YTUlUX0FOVEVOTkFfNTIxMikgPyAyIDogMTsKIAl0cy0+dHNfc3RhdHVzID0gMDsKIAotCXRzLT50c19maW5hbF9pZHggPSBBUjVLX1JFR19NUyh0eF9zdGF0dXMtPnR4X3N0YXR1c18xLAorCXRzLT50c19maW5hbF9pZHggPSBBUjVLX1JFR19NUyh0eHN0YXQxLAogCQkJQVI1S19ERVNDX1RYX1NUQVRVUzFfRklOQUxfVFNfSVhfNTIxMik7CiAKLQkvKiBUaGUgbG9uZ3JldHJ5IGNvdW50ZXIgaGFzIHRoZSBudW1iZXIgb2YgdW4tYWNrZWQgcmV0cmllcwotCSAqIGZvciB0aGUgZmluYWwgcmF0ZS4gVG8gZ2V0IHRoZSB0b3RhbCBudW1iZXIgb2YgcmV0cmllcwotCSAqIHdlIGhhdmUgdG8gYWRkIHRoZSByZXRyeSBjb3VudGVycyBmb3IgdGhlIG90aGVyIHJhdGVzCi0JICogYXMgd2VsbAotCSAqLwotCXRzLT50c19yZXRyeVt0cy0+dHNfZmluYWxfaWR4XSA9IHRzLT50c19sb25ncmV0cnk7Ci0Jc3dpdGNoICh0cy0+dHNfZmluYWxfaWR4KSB7Ci0JY2FzZSAzOgotCQl0cy0+dHNfcmF0ZVszXSA9IEFSNUtfUkVHX01TKHR4X2N0bC0+dHhfY29udHJvbF8zLAotCQkJQVI1S180V19UWF9ERVNDX0NUTDNfWE1JVF9SQVRFMyk7Ci0KLQkJdHMtPnRzX3JldHJ5WzJdID0gQVI1S19SRUdfTVModHhfY3RsLT50eF9jb250cm9sXzIsCi0JCQlBUjVLXzRXX1RYX0RFU0NfQ1RMMl9YTUlUX1RSSUVTMik7Ci0JCXRzLT50c19sb25ncmV0cnkgKz0gdHMtPnRzX3JldHJ5WzJdOwotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQljYXNlIDI6Ci0JCXRzLT50c19yYXRlWzJdID0gQVI1S19SRUdfTVModHhfY3RsLT50eF9jb250cm9sXzMsCi0JCQlBUjVLXzRXX1RYX0RFU0NfQ1RMM19YTUlUX1JBVEUyKTsKLQotCQl0cy0+dHNfcmV0cnlbMV0gPSBBUjVLX1JFR19NUyh0eF9jdGwtPnR4X2NvbnRyb2xfMiwKLQkJCUFSNUtfNFdfVFhfREVTQ19DVEwyX1hNSVRfVFJJRVMxKTsKLQkJdHMtPnRzX2xvbmdyZXRyeSArPSB0cy0+dHNfcmV0cnlbMV07Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgMToKLQkJdHMtPnRzX3JhdGVbMV0gPSBBUjVLX1JFR19NUyh0eF9jdGwtPnR4X2NvbnRyb2xfMywKLQkJCUFSNUtfNFdfVFhfREVTQ19DVEwzX1hNSVRfUkFURTEpOwotCi0JCXRzLT50c19yZXRyeVswXSA9IEFSNUtfUkVHX01TKHR4X2N0bC0+dHhfY29udHJvbF8yLAotCQkJQVI1S180V19UWF9ERVNDX0NUTDJfWE1JVF9UUklFUzEpOwotCQl0cy0+dHNfbG9uZ3JldHJ5ICs9IHRzLT50c19yZXRyeVswXTsKLQkJLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSAwOgotCQl0cy0+dHNfcmF0ZVswXSA9IHR4X2N0bC0+dHhfY29udHJvbF8zICYKLQkJCUFSNUtfNFdfVFhfREVTQ19DVEwzX1hNSVRfUkFURTA7Ci0JCWJyZWFrOwotCX0KLQogCS8qIFRYIGVycm9yICovCi0JaWYgKCEodHhfc3RhdHVzLT50eF9zdGF0dXNfMCAmIEFSNUtfREVTQ19UWF9TVEFUVVMwX0ZSQU1FX1hNSVRfT0spKSB7Ci0JCWlmICh0eF9zdGF0dXMtPnR4X3N0YXR1c18wICYKLQkJCQlBUjVLX0RFU0NfVFhfU1RBVFVTMF9FWENFU1NJVkVfUkVUUklFUykKKwlpZiAoISh0eHN0YXQwICYgQVI1S19ERVNDX1RYX1NUQVRVUzBfRlJBTUVfWE1JVF9PSykpIHsKKwkJaWYgKHR4c3RhdDAgJiBBUjVLX0RFU0NfVFhfU1RBVFVTMF9FWENFU1NJVkVfUkVUUklFUykKIAkJCXRzLT50c19zdGF0dXMgfD0gQVI1S19UWEVSUl9YUkVUUlk7CiAKLQkJaWYgKHR4X3N0YXR1cy0+dHhfc3RhdHVzXzAgJiBBUjVLX0RFU0NfVFhfU1RBVFVTMF9GSUZPX1VOREVSUlVOKQorCQlpZiAodHhzdGF0MCAmIEFSNUtfREVTQ19UWF9TVEFUVVMwX0ZJRk9fVU5ERVJSVU4pCiAJCQl0cy0+dHNfc3RhdHVzIHw9IEFSNUtfVFhFUlJfRklGTzsKIAotCQlpZiAodHhfc3RhdHVzLT50eF9zdGF0dXNfMCAmIEFSNUtfREVTQ19UWF9TVEFUVVMwX0ZJTFRFUkVEKQorCQlpZiAodHhzdGF0MCAmIEFSNUtfREVTQ19UWF9TVEFUVVMwX0ZJTFRFUkVEKQogCQkJdHMtPnRzX3N0YXR1cyB8PSBBUjVLX1RYRVJSX0ZJTFQ7CiAJfQogCkBAIC02MDksMzcgKzU4MCwzNyBAQAogCQkJCQlzdHJ1Y3QgYXRoNWtfcnhfc3RhdHVzICpycykKIHsKIAlzdHJ1Y3QgYXRoNWtfaHdfcnhfc3RhdHVzICpyeF9zdGF0dXM7CisJdTMyIHJ4c3RhdDAsIHJ4c3RhdDE7CiAKIAlyeF9zdGF0dXMgPSAmZGVzYy0+dWQuZHNfcngucnhfc3RhdDsKKwlyeHN0YXQxID0gQUNDRVNTX09OQ0Uocnhfc3RhdHVzLT5yeF9zdGF0dXNfMSk7CiAKIAkvKiBObyBmcmFtZSByZWNlaXZlZCAvIG5vdCByZWFkeSAqLwotCWlmICh1bmxpa2VseSghKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzEgJgotCQkJCUFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzFfRE9ORSkpKQorCWlmICh1bmxpa2VseSghKHJ4c3RhdDEgJiBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX0RPTkUpKSkKIAkJcmV0dXJuIC1FSU5QUk9HUkVTUzsKIAogCW1lbXNldChycywgMCwgc2l6ZW9mKHN0cnVjdCBhdGg1a19yeF9zdGF0dXMpKTsKKwlyeHN0YXQwID0gQUNDRVNTX09OQ0Uocnhfc3RhdHVzLT5yeF9zdGF0dXNfMCk7CiAKIAkvKgogCSAqIEZyYW1lIHJlY2VpdmUgc3RhdHVzCiAJICovCi0JcnMtPnJzX2RhdGFsZW4gPSByeF9zdGF0dXMtPnJ4X3N0YXR1c18wICYKLQkJQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMF9EQVRBX0xFTjsKLQlycy0+cnNfcnNzaSA9IEFSNUtfUkVHX01TKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzAsCisJcnMtPnJzX2RhdGFsZW4gPSByeHN0YXQwICYgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMF9EQVRBX0xFTjsKKwlycy0+cnNfcnNzaSA9IEFSNUtfUkVHX01TKHJ4c3RhdDAsCiAJCUFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzBfUkVDRUlWRV9TSUdOQUwpOwotCXJzLT5yc19yYXRlID0gQVI1S19SRUdfTVMocnhfc3RhdHVzLT5yeF9zdGF0dXNfMCwKKwlycy0+cnNfcmF0ZSA9IEFSNUtfUkVHX01TKHJ4c3RhdDAsCiAJCUFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzBfUkVDRUlWRV9SQVRFKTsKLQlycy0+cnNfYW50ZW5uYSA9IEFSNUtfUkVHX01TKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzAsCisJcnMtPnJzX2FudGVubmEgPSBBUjVLX1JFR19NUyhyeHN0YXQwLAogCQlBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMwX1JFQ0VJVkVfQU5URU5OQSk7Ci0JcnMtPnJzX21vcmUgPSAhIShyeF9zdGF0dXMtPnJ4X3N0YXR1c18wICYKLQkJQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMF9NT1JFKTsKLQlycy0+cnNfdHN0YW1wID0gQVI1S19SRUdfTVMocnhfc3RhdHVzLT5yeF9zdGF0dXNfMSwKKwlycy0+cnNfbW9yZSA9ICEhKHJ4c3RhdDAgJiBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMwX01PUkUpOworCXJzLT5yc190c3RhbXAgPSBBUjVLX1JFR19NUyhyeHN0YXQxLAogCQlBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX1JFQ0VJVkVfVElNRVNUQU1QKTsKIAogCS8qCiAJICogS2V5IHRhYmxlIHN0YXR1cwogCSAqLwotCWlmIChyeF9zdGF0dXMtPnJ4X3N0YXR1c18xICYgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9LRVlfSU5ERVhfVkFMSUQpCi0JCXJzLT5yc19rZXlpeCA9IEFSNUtfUkVHX01TKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzEsCisJaWYgKHJ4c3RhdDEgJiBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX0tFWV9JTkRFWF9WQUxJRCkKKwkJcnMtPnJzX2tleWl4ID0gQVI1S19SRUdfTVMocnhzdGF0MSwKIAkJCQkJICAgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9LRVlfSU5ERVgpOwogCWVsc2UKIAkJcnMtPnJzX2tleWl4ID0gQVI1S19SWEtFWUlYX0lOVkFMSUQ7CkBAIC02NDcsMjcgKzYxOCwyMiBAQAogCS8qCiAJICogUmVjZWl2ZS9kZXNjcmlwdG9yIGVycm9ycwogCSAqLwotCWlmICghKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzEgJgotCSAgICBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX0ZSQU1FX1JFQ0VJVkVfT0spKSB7Ci0JCWlmIChyeF9zdGF0dXMtPnJ4X3N0YXR1c18xICYKLQkJCQlBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX0NSQ19FUlJPUikKKwlpZiAoIShyeHN0YXQxICYgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9GUkFNRV9SRUNFSVZFX09LKSkgeworCQlpZiAocnhzdGF0MSAmIEFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzFfQ1JDX0VSUk9SKQogCQkJcnMtPnJzX3N0YXR1cyB8PSBBUjVLX1JYRVJSX0NSQzsKIAotCQlpZiAocnhfc3RhdHVzLT5yeF9zdGF0dXNfMSAmCi0JCQkJQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9QSFlfRVJST1IpIHsKKwkJaWYgKHJ4c3RhdDEgJiBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX1BIWV9FUlJPUikgewogCQkJcnMtPnJzX3N0YXR1cyB8PSBBUjVLX1JYRVJSX1BIWTsKLQkJCXJzLT5yc19waHllcnIgPSBBUjVLX1JFR19NUyhyeF9zdGF0dXMtPnJ4X3N0YXR1c18xLAorCQkJcnMtPnJzX3BoeWVyciA9IEFSNUtfUkVHX01TKHJ4c3RhdDEsCiAJCQkJQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9QSFlfRVJST1JfQ09ERSk7CiAJCQlpZiAoIWFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2hhc19waHllcnJfY291bnRlcnMpCiAJCQkJYXRoNWtfYW5pX3BoeV9lcnJvcl9yZXBvcnQoYWgsIHJzLT5yc19waHllcnIpOwogCQl9CiAKLQkJaWYgKHJ4X3N0YXR1cy0+cnhfc3RhdHVzXzEgJgotCQkJCUFSNUtfNTIxMl9SWF9ERVNDX1NUQVRVUzFfREVDUllQVF9DUkNfRVJST1IpCisJCWlmIChyeHN0YXQxICYgQVI1S181MjEyX1JYX0RFU0NfU1RBVFVTMV9ERUNSWVBUX0NSQ19FUlJPUikKIAkJCXJzLT5yc19zdGF0dXMgfD0gQVI1S19SWEVSUl9ERUNSWVBUOwogCi0JCWlmIChyeF9zdGF0dXMtPnJ4X3N0YXR1c18xICYKLQkJCQlBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX01JQ19FUlJPUikKKwkJaWYgKHJ4c3RhdDEgJiBBUjVLXzUyMTJfUlhfREVTQ19TVEFUVVMxX01JQ19FUlJPUikKIAkJCXJzLT5yc19zdGF0dXMgfD0gQVI1S19SWEVSUl9NSUM7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2VlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2VlcHJvbS5jCmluZGV4IGVmYjY3MmMuLjFmZWY4NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9lZXByb20uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZWVwcm9tLmMKQEAgLTY2MCw2ICs2NjAsNTMgQEAKIAkJdnBbaV0gPSAoaXBbaV0gKiBtYXggKyAoMTAwIC0gaXBbaV0pICogbWluKSAvIDEwMDsKIH0KIAorc3RhdGljIGludAorYXRoNWtfZWVwcm9tX2ZyZWVfcGNhbF9pbmZvKHN0cnVjdCBhdGg1a19odyAqYWgsIGludCBtb2RlKQoreworCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOworCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mbyAqY2hpbmZvOworCXU4IHBpZXIsIHBkZzsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUE6CisJCWlmICghQVI1S19FRVBST01fSERSXzExQShlZS0+ZWVfaGVhZGVyKSkKKwkJCXJldHVybiAwOworCQljaGluZm8gPSBlZS0+ZWVfcHdyX2NhbF9hOworCQlicmVhazsKKwljYXNlIEFSNUtfRUVQUk9NX01PREVfMTFCOgorCQlpZiAoIUFSNUtfRUVQUk9NX0hEUl8xMUIoZWUtPmVlX2hlYWRlcikpCisJCQlyZXR1cm4gMDsKKwkJY2hpbmZvID0gZWUtPmVlX3B3cl9jYWxfYjsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX0VFUFJPTV9NT0RFXzExRzoKKwkJaWYgKCFBUjVLX0VFUFJPTV9IRFJfMTFHKGVlLT5lZV9oZWFkZXIpKQorCQkJcmV0dXJuIDA7CisJCWNoaW5mbyA9IGVlLT5lZV9wd3JfY2FsX2c7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZvciAocGllciA9IDA7IHBpZXIgPCBlZS0+ZWVfbl9waWVyc1ttb2RlXTsgcGllcisrKSB7CisJCWlmICghY2hpbmZvW3BpZXJdLnBkX2N1cnZlcykKKwkJCWNvbnRpbnVlOworCisJCWZvciAocGRnID0gMDsgcGRnIDwgZWUtPmVlX3BkX2dhaW5zW21vZGVdOyBwZGcrKykgeworCQkJc3RydWN0IGF0aDVrX3BkZ2Fpbl9pbmZvICpwZCA9CisJCQkJCSZjaGluZm9bcGllcl0ucGRfY3VydmVzW3BkZ107CisKKwkJCWlmIChwZCAhPSBOVUxMKSB7CisJCQkJa2ZyZWUocGQtPnBkX3N0ZXApOworCQkJCWtmcmVlKHBkLT5wZF9wd3IpOworCQkJfQorCQl9CisKKwkJa2ZyZWUoY2hpbmZvW3BpZXJdLnBkX2N1cnZlcyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIC8qIENvbnZlcnQgUkY1MTExIHNwZWNpZmljIGRhdGEgdG8gZ2VuZXJpYyByYXcgZGF0YQogICogdXNlZCBieSBpbnRlcnBvbGF0aW9uIGNvZGUgKi8KIHN0YXRpYyBpbnQKQEAgLTY4NCw3ICs3MzEsNyBAQAogCQkJCUdGUF9LRVJORUwpOwogCiAJCWlmICghY2hpbmZvW3BpZXJdLnBkX2N1cnZlcykKLQkJCXJldHVybiAtRU5PTUVNOworCQkJZ290byBlcnJfb3V0OwogCiAJCS8qIE9ubHkgb25lIGN1cnZlIGZvciBSRjUxMTEKIAkJICogZmluZCBvdXQgd2hpY2ggb25lIGFuZCBwbGFjZQpAQCAtNzA4LDEyICs3NTUsMTIgQEAKIAkJcGQtPnBkX3N0ZXAgPSBrY2FsbG9jKEFSNUtfRUVQUk9NX05fUFdSX1BPSU5UU181MTExLAogCQkJCQlzaXplb2YodTgpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFwZC0+cGRfc3RlcCkKLQkJCXJldHVybiAtRU5PTUVNOworCQkJZ290byBlcnJfb3V0OwogCiAJCXBkLT5wZF9wd3IgPSBrY2FsbG9jKEFSNUtfRUVQUk9NX05fUFdSX1BPSU5UU181MTExLAogCQkJCQlzaXplb2YoczE2KSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghcGQtPnBkX3B3cikKLQkJCXJldHVybiAtRU5PTUVNOworCQkJZ290byBlcnJfb3V0OwogCiAJCS8qIEZpbGwgcmF3IGRhdGFzZXQKIAkJICogKGNvbnZlcnQgcG93ZXIgdG8gMC4yNWRCIHVuaXRzCkBAIC03MzQsNiArNzgxLDEwIEBACiAJfQogCiAJcmV0dXJuIDA7CisKK2Vycl9vdXQ6CisJYXRoNWtfZWVwcm9tX2ZyZWVfcGNhbF9pbmZvKGFoLCBtb2RlKTsKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogLyogUGFyc2UgRUVQUk9NIGRhdGEgKi8KQEAgLTg2Nyw3ICs5MTgsNyBAQAogCQkJCQlHRlBfS0VSTkVMKTsKIAogCQlpZiAoIWNoaW5mb1twaWVyXS5wZF9jdXJ2ZXMpCi0JCQlyZXR1cm4gLUVOT01FTTsKKwkJCWdvdG8gZXJyX291dDsKIAogCQkvKiBGaWxsIHBkX2N1cnZlcyAqLwogCQlmb3IgKHBkZyA9IDA7IHBkZyA8IGVlLT5lZV9wZF9nYWluc1ttb2RlXTsgcGRnKyspIHsKQEAgLTg4NiwxNCArOTM3LDEzIEBACiAJCQkJCQlzaXplb2YodTgpLCBHRlBfS0VSTkVMKTsKIAogCQkJCWlmICghcGQtPnBkX3N0ZXApCi0JCQkJCXJldHVybiAtRU5PTUVNOworCQkJCQlnb3RvIGVycl9vdXQ7CiAKIAkJCQlwZC0+cGRfcHdyID0ga2NhbGxvYyhwZC0+cGRfcG9pbnRzLAogCQkJCQkJc2l6ZW9mKHMxNiksIEdGUF9LRVJORUwpOwogCiAJCQkJaWYgKCFwZC0+cGRfcHdyKQotCQkJCQlyZXR1cm4gLUVOT01FTTsKLQorCQkJCQlnb3RvIGVycl9vdXQ7CiAKIAkJCQkvKiBGaWxsIHJhdyBkYXRhc2V0CiAJCQkJICogKGFsbCBwb3dlciBsZXZlbHMgYXJlIGluIDAuMjVkQiB1bml0cykgKi8KQEAgLTkyNSwxMyArOTc1LDEzIEBACiAJCQkJCQlzaXplb2YodTgpLCBHRlBfS0VSTkVMKTsKIAogCQkJCWlmICghcGQtPnBkX3N0ZXApCi0JCQkJCXJldHVybiAtRU5PTUVNOworCQkJCQlnb3RvIGVycl9vdXQ7CiAKIAkJCQlwZC0+cGRfcHdyID0ga2NhbGxvYyhwZC0+cGRfcG9pbnRzLAogCQkJCQkJc2l6ZW9mKHMxNiksIEdGUF9LRVJORUwpOwogCiAJCQkJaWYgKCFwZC0+cGRfcHdyKQotCQkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCQkJZ290byBlcnJfb3V0OwogCiAJCQkJLyogRmlsbCByYXcgZGF0YXNldAogCQkJCSAqIChhbGwgcG93ZXIgbGV2ZWxzIGFyZSBpbiAwLjI1ZEIgdW5pdHMpICovCkBAIC05NTQsNiArMTAwNCwxMCBAQAogCX0KIAogCXJldHVybiAwOworCitlcnJfb3V0OgorCWF0aDVrX2VlcHJvbV9mcmVlX3BjYWxfaW5mbyhhaCwgbW9kZSk7CisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIC8qIFBhcnNlIEVFUFJPTSBkYXRhICovCkBAIC0xMTU2LDcgKzEyMTAsNyBAQAogCQkJCQlHRlBfS0VSTkVMKTsKIAogCQlpZiAoIWNoaW5mb1twaWVyXS5wZF9jdXJ2ZXMpCi0JCQlyZXR1cm4gLUVOT01FTTsKKwkJCWdvdG8gZXJyX291dDsKIAogCQkvKiBGaWxsIHBkX2N1cnZlcyAqLwogCQlmb3IgKHBkZyA9IDA7IHBkZyA8IGVlLT5lZV9wZF9nYWluc1ttb2RlXTsgcGRnKyspIHsKQEAgLTExNzcsMTMgKzEyMzEsMTMgQEAKIAkJCQkJc2l6ZW9mKHU4KSwgR0ZQX0tFUk5FTCk7CiAKIAkJCWlmICghcGQtPnBkX3N0ZXApCi0JCQkJcmV0dXJuIC1FTk9NRU07CisJCQkJZ290byBlcnJfb3V0OwogCiAJCQlwZC0+cGRfcHdyID0ga2NhbGxvYyhwZC0+cGRfcG9pbnRzLAogCQkJCQlzaXplb2YoczE2KSwgR0ZQX0tFUk5FTCk7CiAKIAkJCWlmICghcGQtPnBkX3B3cikKLQkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCQlnb3RvIGVycl9vdXQ7CiAKIAkJCS8qIEZpbGwgcmF3IGRhdGFzZXQKIAkJCSAqIGNvbnZlcnQgYWxsIHB3ciBsZXZlbHMgdG8KQEAgLTEyMTMsNiArMTI2NywxMCBAQAogCX0KIAogCXJldHVybiAwOworCitlcnJfb3V0OgorCWF0aDVrX2VlcHJvbV9mcmVlX3BjYWxfaW5mbyhhaCwgbW9kZSk7CisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIC8qIFBhcnNlIEVFUFJPTSBkYXRhICovCkBAIC0xNTM0LDUzICsxNTkyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotYXRoNWtfZWVwcm9tX2ZyZWVfcGNhbF9pbmZvKHN0cnVjdCBhdGg1a19odyAqYWgsIGludCBtb2RlKQotewotCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOwotCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mbyAqY2hpbmZvOwotCXU4IHBpZXIsIHBkZzsKLQotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUE6Ci0JCWlmICghQVI1S19FRVBST01fSERSXzExQShlZS0+ZWVfaGVhZGVyKSkKLQkJCXJldHVybiAwOwotCQljaGluZm8gPSBlZS0+ZWVfcHdyX2NhbF9hOwotCQlicmVhazsKLQljYXNlIEFSNUtfRUVQUk9NX01PREVfMTFCOgotCQlpZiAoIUFSNUtfRUVQUk9NX0hEUl8xMUIoZWUtPmVlX2hlYWRlcikpCi0JCQlyZXR1cm4gMDsKLQkJY2hpbmZvID0gZWUtPmVlX3B3cl9jYWxfYjsKLQkJYnJlYWs7Ci0JY2FzZSBBUjVLX0VFUFJPTV9NT0RFXzExRzoKLQkJaWYgKCFBUjVLX0VFUFJPTV9IRFJfMTFHKGVlLT5lZV9oZWFkZXIpKQotCQkJcmV0dXJuIDA7Ci0JCWNoaW5mbyA9IGVlLT5lZV9wd3JfY2FsX2c7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWZvciAocGllciA9IDA7IHBpZXIgPCBlZS0+ZWVfbl9waWVyc1ttb2RlXTsgcGllcisrKSB7Ci0JCWlmICghY2hpbmZvW3BpZXJdLnBkX2N1cnZlcykKLQkJCWNvbnRpbnVlOwotCi0JCWZvciAocGRnID0gMDsgcGRnIDwgZWUtPmVlX3BkX2dhaW5zW21vZGVdOyBwZGcrKykgewotCQkJc3RydWN0IGF0aDVrX3BkZ2Fpbl9pbmZvICpwZCA9Ci0JCQkJCSZjaGluZm9bcGllcl0ucGRfY3VydmVzW3BkZ107Ci0KLQkJCWlmIChwZCAhPSBOVUxMKSB7Ci0JCQkJa2ZyZWUocGQtPnBkX3N0ZXApOwotCQkJCWtmcmVlKHBkLT5wZF9wd3IpOwotCQkJfQotCQl9Ci0KLQkJa2ZyZWUoY2hpbmZvW3BpZXJdLnBkX2N1cnZlcyk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qIFJlYWQgY29uZm9ybWFuY2UgdGVzdCBsaW1pdHMgdXNlZCBmb3IgcmVndWxhdG9yeSBjb250cm9sICovCiBzdGF0aWMgaW50CiBhdGg1a19lZXByb21fcmVhZF9jdGxfaW5mbyhzdHJ1Y3QgYXRoNWtfaHcgKmFoKQpAQCAtMTcyMSwzNSArMTczMiw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIFJlYWQgdGhlIE1BQyBhZGRyZXNzIGZyb20gZWVwcm9tCi0gKi8KLWludCBhdGg1a19lZXByb21fcmVhZF9tYWMoc3RydWN0IGF0aDVrX2h3ICphaCwgdTggKm1hYykKLXsKLQl1OCBtYWNfZFtFVEhfQUxFTl0gPSB7fTsKLQl1MzIgdG90YWwsIG9mZnNldDsKLQl1MTYgZGF0YTsKLQlpbnQgb2N0ZXQ7Ci0KLQlBUjVLX0VFUFJPTV9SRUFEKDB4MjAsIGRhdGEpOwotCi0JZm9yIChvZmZzZXQgPSAweDFmLCBvY3RldCA9IDAsIHRvdGFsID0gMDsgb2Zmc2V0ID49IDB4MWQ7IG9mZnNldC0tKSB7Ci0JCUFSNUtfRUVQUk9NX1JFQUQob2Zmc2V0LCBkYXRhKTsKLQotCQl0b3RhbCArPSBkYXRhOwotCQltYWNfZFtvY3RldCArIDFdID0gZGF0YSAmIDB4ZmY7Ci0JCW1hY19kW29jdGV0XSA9IGRhdGEgPj4gODsKLQkJb2N0ZXQgKz0gMjsKLQl9Ci0KLQlpZiAoIXRvdGFsIHx8IHRvdGFsID09IDMgKiAweGZmZmYpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbWVtY3B5KG1hYywgbWFjX2QsIEVUSF9BTEVOKTsKLQotCXJldHVybiAwOwotfQotCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKlwKICogSW5pdC9EZXRhY2ggZnVuY3Rpb25zICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9tYWM4MDIxMS1vcHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9tYWM4MDIxMS1vcHMuYwppbmRleCA5YmUyOWI3Li44MDdiZDY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvbWFjODAyMTEtb3BzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL21hYzgwMjExLW9wcy5jCkBAIC0yODIsNiArMjgyLDE1IEBACiAJaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9CRUFDT05fSU5UKQogCQlzYy0+YmludHZhbCA9IGJzc19jb25mLT5iZWFjb25faW50OwogCisJaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9FUlBfU0xPVCkgeworCQlpbnQgc2xvdF90aW1lOworCisJCWFoLT5haF9zaG9ydF9zbG90ID0gYnNzX2NvbmYtPnVzZV9zaG9ydF9zbG90OworCQlzbG90X3RpbWUgPSBhdGg1a19od19nZXRfZGVmYXVsdF9zbG90dGltZShhaCkgKworCQkJICAgIDMgKiBhaC0+YWhfY292ZXJhZ2VfY2xhc3M7CisJCWF0aDVrX2h3X3NldF9pZnNfaW50ZXJ2YWxzKGFoLCBzbG90X3RpbWUpOworCX0KKwogCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfQVNTT0MpIHsKIAkJYXZmLT5hc3NvYyA9IGJzc19jb25mLT5hc3NvYzsKIAkJaWYgKGJzc19jb25mLT5hc3NvYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY2kuYwppbmRleCAzYzQ0Njg5Li4yOTZjMzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BjaS5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbmw4MDIxMS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS1hc3BtLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlICIuLi9hdGguaCIKICNpbmNsdWRlICJhdGg1ay5oIgogI2luY2x1ZGUgImRlYnVnLmgiCkBAIC0xMDgsMTEgKzEwOSw0MiBAQAogCXJldHVybiAwOwogfQogCisvKgorICogUmVhZCB0aGUgTUFDIGFkZHJlc3MgZnJvbSBlZXByb20gb3IgcGxhdGZvcm1fZGF0YQorICovCitzdGF0aWMgaW50IGF0aDVrX3BjaV9lZXByb21fcmVhZF9tYWMoc3RydWN0IGF0aDVrX2h3ICphaCwgdTggKm1hYykKK3sKKwl1OCBtYWNfZFtFVEhfQUxFTl0gPSB7fTsKKwl1MzIgdG90YWwsIG9mZnNldDsKKwl1MTYgZGF0YTsKKwlpbnQgb2N0ZXQ7CisKKwlBUjVLX0VFUFJPTV9SRUFEKDB4MjAsIGRhdGEpOworCisJZm9yIChvZmZzZXQgPSAweDFmLCBvY3RldCA9IDAsIHRvdGFsID0gMDsgb2Zmc2V0ID49IDB4MWQ7IG9mZnNldC0tKSB7CisJCUFSNUtfRUVQUk9NX1JFQUQob2Zmc2V0LCBkYXRhKTsKKworCQl0b3RhbCArPSBkYXRhOworCQltYWNfZFtvY3RldCArIDFdID0gZGF0YSAmIDB4ZmY7CisJCW1hY19kW29jdGV0XSA9IGRhdGEgPj4gODsKKwkJb2N0ZXQgKz0gMjsKKwl9CisKKwlpZiAoIXRvdGFsIHx8IHRvdGFsID09IDMgKiAweGZmZmYpCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtY3B5KG1hYywgbWFjX2QsIEVUSF9BTEVOKTsKKworCXJldHVybiAwOworfQorCisKIC8qIENvbW1vbiBhdGhfYnVzX29wdHMgc3RydWN0dXJlICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aF9idXNfb3BzIGF0aF9wY2lfYnVzX29wcyA9IHsKIAkuYXRoX2J1c190eXBlID0gQVRIX1BDSSwKIAkucmVhZF9jYWNoZXNpemUgPSBhdGg1a19wY2lfcmVhZF9jYWNoZXNpemUsCiAJLmVlcHJvbV9yZWFkID0gYXRoNWtfcGNpX2VlcHJvbV9yZWFkLAorCS5lZXByb21fcmVhZF9tYWMgPSBhdGg1a19wY2lfZWVwcm9tX3JlYWRfbWFjLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BjdS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BjdS5jCmluZGV4IGQ5YjNmODIuLjcxMmE5YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY3UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGN1LmMKQEAgLTc1LDcgKzc1LDcgQEAKICAqIGJ3bW9kZXMuCiAgKi8KIGludCBhdGg1a19od19nZXRfZnJhbWVfZHVyYXRpb24oc3RydWN0IGF0aDVrX2h3ICphaCwKLQkJaW50IGxlbiwgc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlKQorCQlpbnQgbGVuLCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUsIGJvb2wgc2hvcnRwcmUpCiB7CiAJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGFoLT5haF9zYzsKIAlpbnQgc2lmcywgcHJlYW1ibGUsIHBsY3BfYml0cywgc3ltX3RpbWU7CkBAIC04NCw5ICs4NCwxNSBAQAogCiAJLyogRmFsbGJhY2sgKi8KIAlpZiAoIWFoLT5haF9id21vZGUpIHsKLQkJZHVyID0gaWVlZTgwMjExX2dlbmVyaWNfZnJhbWVfZHVyYXRpb24oc2MtPmh3LAotCQkJCQkJTlVMTCwgbGVuLCByYXRlKTsKLQkJcmV0dXJuIGxlMTZfdG9fY3B1KGR1cik7CisJCV9fbGUxNiByYXdfZHVyID0gaWVlZTgwMjExX2dlbmVyaWNfZnJhbWVfZHVyYXRpb24oc2MtPmh3LAorCQkJCQlOVUxMLCBsZW4sIHJhdGUpOworCisJCS8qIHN1YnRyYWN0IGRpZmZlcmVuY2UgYmV0d2VlbiBsb25nIGFuZCBzaG9ydCBwcmVhbWJsZSAqLworCQlkdXIgPSBsZTE2X3RvX2NwdShyYXdfZHVyKTsKKwkJaWYgKHNob3J0cHJlKQorCQkJZHVyIC09IDk2OworCisJCXJldHVybiBkdXI7CiAJfQogCiAJYml0cmF0ZSA9IHJhdGUtPmJpdHJhdGU7CkBAIC0xNDUsOSArMTUxLDkgQEAKIAkJc2xvdF90aW1lID0gQVI1S19JTklUX1NMT1RfVElNRV9RVUFSVEVSX1JBVEU7CiAJCWJyZWFrOwogCWNhc2UgQVI1S19CV01PREVfREVGQVVMVDoKLQkJc2xvdF90aW1lID0gQVI1S19JTklUX1NMT1RfVElNRV9ERUZBVUxUOwogCWRlZmF1bHQ6Ci0JCWlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfQ0NLKQorCQlzbG90X3RpbWUgPSBBUjVLX0lOSVRfU0xPVF9USU1FX0RFRkFVTFQ7CisJCWlmICgoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX0NDSykgJiYgIWFoLT5haF9zaG9ydF9zbG90KQogCQkJc2xvdF90aW1lID0gQVI1S19JTklUX1NMT1RfVElNRV9COwogCQlicmVhazsKIAl9CkBAIC0yNjMsMjcgKzI2OSwxNCBAQAogCQkgKiBhY3R1YWwgcmF0ZSBmb3IgdGhpcyByYXRlLiBTZWUgbWFjODAyMTEgdHguYwogCQkgKiBpZWVlODAyMTFfZHVyYXRpb24oKSBmb3IgYSBicmllZiBkZXNjcmlwdGlvbiBvZgogCQkgKiB3aGF0IHJhdGUgd2Ugc2hvdWxkIGNob29zZSB0byBUWCBBQ0tzLiAqLwotCQl0eF90aW1lID0gYXRoNWtfaHdfZ2V0X2ZyYW1lX2R1cmF0aW9uKGFoLCAxMCwgcmF0ZSk7CisJCXR4X3RpbWUgPSBhdGg1a19od19nZXRfZnJhbWVfZHVyYXRpb24oYWgsIDEwLCByYXRlLCBmYWxzZSk7CiAKIAkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCB0eF90aW1lLCByZWcpOwogCiAJCWlmICghKHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpKQogCQkJY29udGludWU7CiAKLQkJLyoKLQkJICogV2UncmUgbm90IGRpc3Rpbmd1aXNoaW5nIHNob3J0IHByZWFtYmxlIGhlcmUsCi0JCSAqIFRoaXMgaXMgdHJ1ZSwgYWxsIHdlJ2xsIGdldCBpcyBhIGxvbmdlciB2YWx1ZSBoZXJlCi0JCSAqIHdoaWNoIGlzIG5vdCBuZWNlc3NhcmlsbHkgYmFkLiBXZSBjb3VsZCB1c2UKLQkJICogZXhwb3J0IGllZWU4MDIxMV9mcmFtZV9kdXJhdGlvbigpIGJ1dCB0aGF0IG5lZWRzIHRvIGJlCi0JCSAqIGZpeGVkIGZpcnN0IHRvIGJlIHByb3Blcmx5IHVzZWQgYnkgbWFjODAyMTExIGRyaXZlcnM6Ci0JCSAqCi0JCSAqICAtIHJlbW92ZSBlcnAgc3R1ZmYgYW5kIGxldCB0aGUgcm91dGluZSBmaWd1cmUgb2ZkbQotCQkgKiAgICBlcnAgcmF0ZXMKLQkJICogIC0gcmVtb3ZlIHBhc3NpbmcgYXJndW1lbnQgaWVlZTgwMjExX2xvY2FsIGFzCi0JCSAqICAgIGRyaXZlcnMgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gaXQKLQkJICogIC0gbW92ZSBkcml2ZXJzIHVzaW5nIGllZWU4MDIxMV9nZW5lcmljX2ZyYW1lX2R1cmF0aW9uKCkKLQkJICogICAgdG8gdGhpcwotCQkgKi8KKwkJdHhfdGltZSA9IGF0aDVrX2h3X2dldF9mcmFtZV9kdXJhdGlvbihhaCwgMTAsIHJhdGUsIHRydWUpOwogCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHR4X3RpbWUsCiAJCQlyZWcgKyAoQVI1S19TRVRfU0hPUlRfUFJFQU1CTEUgPDwgMikpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9xY3UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9xY3UuYwppbmRleCAzMzQzZmI5Li5iMThjNTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcWN1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3FjdS5jCkBAIC01MTksNyArNTE5LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzaWZzID0gYXRoNWtfaHdfZ2V0X2RlZmF1bHRfc2lmcyhhaCk7Ci0Jc2lmc19jbG9jayA9IGF0aDVrX2h3X2h0b2Nsb2NrKGFoLCBzaWZzKTsKKwlzaWZzX2Nsb2NrID0gYXRoNWtfaHdfaHRvY2xvY2soYWgsIHNpZnMgLSAyKTsKIAogCS8qIEVJRlMKIAkgKiBUeHRpbWUgb2YgYWNrIGF0IGxvd2VzdCByYXRlICsgU0lGUyArIERJRlMKQEAgLTU1MCw3ICs1NTAsNyBAQAogCWVsc2UKIAkJcmF0ZSA9ICZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmJpdHJhdGVzWzBdOwogCi0JYWNrX3R4X3RpbWUgPSBhdGg1a19od19nZXRfZnJhbWVfZHVyYXRpb24oYWgsIDEwLCByYXRlKTsKKwlhY2tfdHhfdGltZSA9IGF0aDVrX2h3X2dldF9mcmFtZV9kdXJhdGlvbihhaCwgMTAsIHJhdGUsIGZhbHNlKTsKIAogCS8qIGFja190eF90aW1lIGluY2x1ZGVzIGFuIFNJRlMgYWxyZWFkeSAqLwogCWVpZnMgPSBhY2tfdHhfdGltZSArIHNpZnMgKyAyICogc2xvdF90aW1lOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3Jlc2V0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVzZXQuYwppbmRleCA4NDIwNjg5Li4zNTEwZGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVzZXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVzZXQuYwpAQCAtMTU5LDYgKzE1OSwxMSBAQAogCXJ4bGF0ID0gQVI1S19SRUdfTVModXNlY19yZWcsIEFSNUtfVVNFQ19SWF9MQVRFTkNZXzUyMTEpOwogCiAJLyoKKwkgKiBTZXQgZGVmYXVsdCBUeCBmcmFtZSB0byBUeCBkYXRhIHN0YXJ0IGRlbGF5CisJICovCisJdHhmMnR4cyA9IEFSNUtfSU5JVF9UWEYyVFhEX1NUQVJUX0RFRkFVTFQ7CisKKwkvKgogCSAqIDUyMTAgaW5pdHZhbHMgZG9uJ3QgaW5jbHVkZSB1c2VjIHNldHRpbmdzCiAJICogc28gd2UgbmVlZCB0byB1c2UgbWFnaWMgdmFsdWVzIGhlcmUgZm9yCiAJICogdHgvcnggbGF0ZW5jaWVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnCmluZGV4IGFkNTdhNmQuLmQ5ZmY4NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnCkBAIC01LDcgKzUsNyBAQAogCiBjb25maWcgQVRIOUsKIAl0cmlzdGF0ZSAiQXRoZXJvcyA4MDIuMTFuIHdpcmVsZXNzIGNhcmRzIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgTUFDODAyMTEKKwlkZXBlbmRzIG9uIE1BQzgwMjExCiAJc2VsZWN0IEFUSDlLX0hXCiAJc2VsZWN0IE1BQzgwMjExX0xFRFMKIAlzZWxlY3QgTEVEU19DTEFTUwpAQCAtMjMsNiArMjMsMjUgQEAKIAogCSAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIGF0aDlrLgogCitjb25maWcgQVRIOUtfUENJCisJYm9vbCAiQXRoZXJvcyBhdGg5ayBQQ0kvUENJZSBidXMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFUSDlLICYmIFBDSQorCWRlZmF1bHQgUENJCisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgUENJIGJ1cyBzdXBwb3J0IGluIGF0aDlrLgorCisJICBTYXkgWSwgaWYgeW91IGhhdmUgYSBjb21wYXRpYmxlIFBDSS9QQ0llIHdpcmVsZXNzIGNhcmQuCisKK2NvbmZpZyBBVEg5S19BSEIKKwlib29sICJBdGhlcm9zIGF0aDlrIEFIQiBidXMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFUSDlLCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgQUhCIGJ1cyBzdXBwb3J0IGluIGF0aDlrLgorCisJICBTYXkgWSwgaWYgeW91IGhhdmUgYSBTb0Mgd2l0aCBhIGNvbXBhdGlibGUgYnVpbHQtaW4KKwkgIHdpcmVsZXNzIE1BQy4gU2F5IE4gaWYgdW5zdXJlLgorCiBjb25maWcgQVRIOUtfREVCVUdGUwogCWJvb2wgIkF0aGVyb3MgYXRoOWsgZGVidWdnaW5nIgogCWRlcGVuZHMgb24gQVRIOUsgJiYgREVCVUdfRlMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZQppbmRleCA0ZDY2Y2E4Li4wNWE2ZmFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlCkBAIC02LDggKzYsOCBAQAogCQl4bWl0Lm8gXAogCiBhdGg5ay0kKENPTkZJR19BVEg5S19SQVRFX0NPTlRST0wpICs9IHJjLm8KLWF0aDlrLSQoQ09ORklHX1BDSSkgKz0gcGNpLm8KLWF0aDlrLSQoQ09ORklHX0FUSEVST1NfQVI3MVhYKSArPSBhaGIubworYXRoOWstJChDT05GSUdfQVRIOUtfUENJKSArPSBwY2kubworYXRoOWstJChDT05GSUdfQVRIOUtfQUhCKSArPSBhaGIubwogYXRoOWstJChDT05GSUdfQVRIOUtfREVCVUdGUykgKz0gZGVidWcubwogCiBvYmotJChDT05GSUdfQVRIOUspICs9IGF0aDlrLm8KQEAgLTQ4LDQgKzQ4LDYgQEAKIAkJaHRjX2Rydl9pbml0Lm8gXAogCQlodGNfZHJ2X2dwaW8ubwogCithdGg5a19odGMtJChDT05GSUdfQVRIOUtfSFRDX0RFQlVHRlMpICs9IGh0Y19kcnZfZGVidWcubworCiBvYmotJChDT05GSUdfQVRIOUtfSFRDKSArPSBhdGg5a19odGMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FoYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FoYi5jCmluZGV4IDljYjBlZmEuLjYxOTU2MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9haGIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYWhiLmMKQEAgLTIxLDYgKzIxLDE4IEBACiAjaW5jbHVkZSA8bGludXgvYXRoOWtfcGxhdGZvcm0uaD4KICNpbmNsdWRlICJhdGg5ay5oIgogCitzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCBhdGg5a19wbGF0Zm9ybV9pZF90YWJsZVtdID0geworCXsKKwkJLm5hbWUgPSAiYXRoOWsiLAorCQkuZHJpdmVyX2RhdGEgPSBBUjU0MTZfQVI5MTAwX0RFVklELAorCX0sCisJeworCQkubmFtZSA9ICJhcjkzNHhfd21hYyIsCisJCS5kcml2ZXJfZGF0YSA9IEFSOTMwMF9ERVZJRF9BUjkzNDAsCisJfSwKKwl7fSwKK307CisKIC8qIHJldHVybiBidXMgY2FjaGVzaXplIGluIDRCIHdvcmQgdW5pdHMgKi8KIHN0YXRpYyB2b2lkIGF0aF9haGJfcmVhZF9jYWNoZXNpemUoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiwgaW50ICpjc3opCiB7CkBAIC01Nyw2ICs2OSw3IEBACiAJc3RydWN0IGF0aF9zb2Z0YyAqc2M7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CisJY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCAqaWQgPSBwbGF0Zm9ybV9nZXRfZGV2aWNlX2lkKHBkZXYpOwogCWludCBpcnE7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGF0aF9odyAqYWg7CkBAIC0xMTYsNyArMTI5LDcgQEAKIAkJZ290byBlcnJfZnJlZV9odzsKIAl9CiAKLQlyZXQgPSBhdGg5a19pbml0X2RldmljZShBUjU0MTZfQVI5MTAwX0RFVklELCBzYywgMHgwLCAmYXRoX2FoYl9idXNfb3BzKTsKKwlyZXQgPSBhdGg5a19pbml0X2RldmljZShpZC0+ZHJpdmVyX2RhdGEsIHNjLCAweDAsICZhdGhfYWhiX2J1c19vcHMpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgZGV2aWNlXG4iKTsKIAkJZ290byBlcnJfaXJxOwpAQCAtMTY1LDggKzE3OCwxMSBAQAogCQkubmFtZQk9ICJhdGg5ayIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCisJLmlkX3RhYmxlICAgID0gYXRoOWtfcGxhdGZvcm1faWRfdGFibGUsCiB9OwogCitNT0RVTEVfREVWSUNFX1RBQkxFKHBsYXRmb3JtLCBhdGg5a19wbGF0Zm9ybV9pZF90YWJsZSk7CisKIGludCBhdGhfYWhiX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhdGhfYWhiX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYW5pLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYW5pLmMKaW5kZXggMmUzMWM3Ny4uNWExZjRmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FuaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hbmkuYwpAQCAtODk5LDEyICs4OTksNiBAQAogCSAqIGNoZWNrIGhlcmUgZGVmYXVsdCBsZXZlbCBzaG91bGQgbm90IG1vZGlmeSBJTkkgc2V0dGluZy4KIAkgKi8KIAlpZiAodXNlX25ld19hbmkoYWgpKSB7Ci0JCWNvbnN0IHN0cnVjdCBhbmlfb2ZkbV9sZXZlbF9lbnRyeSAqZW50cnlfb2ZkbTsKLQkJY29uc3Qgc3RydWN0IGFuaV9jY2tfbGV2ZWxfZW50cnkgKmVudHJ5X2NjazsKLQotCQllbnRyeV9vZmRtID0gJm9mZG1fbGV2ZWxfdGFibGVbQVRIOUtfQU5JX09GRE1fREVGX0xFVkVMXTsKLQkJZW50cnlfY2NrID0gJmNja19sZXZlbF90YWJsZVtBVEg5S19BTklfQ0NLX0RFRl9MRVZFTF07Ci0KIAkJYWgtPmFuaXBlcmlvZCA9IEFUSDlLX0FOSV9QRVJJT0RfTkVXOwogCQlhaC0+Y29uZmlnLmFuaV9wb2xsX2ludGVydmFsID0gQVRIOUtfQU5JX1BPTExJTlRFUlZBTF9ORVc7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjUwMDhfcGh5LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI1MDA4X3BoeS5jCmluZGV4IDEwNmMwYjAuLjRiZjlkYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjUwMDhfcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyNTAwOF9waHkuYwpAQCAtNDQsNiArNDQsMzQgQEAKIHN0YXRpYyBjb25zdCBpbnQgbTJUaHJlc2hFeHRfb2ZmID0gMTI3OwogCiAKK3N0YXRpYyB2b2lkIGFyNTAwOF9yZl9iYW5rX3NldHVwKHUzMiAqYmFuaywgc3RydWN0IGFyNTQxNkluaUFycmF5ICphcnJheSwKKwkJCQkgaW50IGNvbCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBhcnJheS0+aWFfcm93czsgaSsrKQorCQliYW5rW2ldID0gSU5JX1JBKGFycmF5LCBpLCBjb2wpOworfQorCisKKyNkZWZpbmUgUkVHX1dSSVRFX1JGX0FSUkFZKGluaWFycmF5LCByZWdEYXRhLCByZWdXcikgXAorCWFyNTAwOF93cml0ZV9yZl9hcnJheShhaCwgaW5pYXJyYXksIHJlZ0RhdGEsICYocmVnV3IpKQorCitzdGF0aWMgdm9pZCBhcjUwMDhfd3JpdGVfcmZfYXJyYXkoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhcjU0MTZJbmlBcnJheSAqYXJyYXksCisJCQkJICB1MzIgKmRhdGEsIHVuc2lnbmVkIGludCAqd3JpdGVjbnQpCit7CisJaW50IHI7CisKKwlFTkFCTEVfUkVHV1JJVEVfQlVGRkVSKGFoKTsKKworCWZvciAociA9IDA7IHIgPCBhcnJheS0+aWFfcm93czsgcisrKSB7CisJCVJFR19XUklURShhaCwgSU5JX1JBKGFycmF5LCByLCAwKSwgZGF0YVtyXSk7CisJCURPX0RFTEFZKCp3cml0ZWNudCk7CisJfQorCisJUkVHV1JJVEVfQlVGRkVSX0ZMVVNIKGFoKTsKK30KKwogLyoqCiAgKiBhcjUwMDhfaHdfcGh5X21vZGlmeV9yeF9idWZmZXIoKSAtIHBlcmZvcm0gYW5hbG9nIHN3aXp6bGluZyBvZiBwYXJhbWV0ZXJzCiAgKiBAcmZidWY6CkBAIC01MzAsMTYgKzU1OCwxNiBAQAogCWVlcE1pbm9yUmV2ID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9NSU5PUl9SRVYpOwogCiAJLyogU2V0dXAgQmFuayAwIFdyaXRlICovCi0JUkZfQkFOS19TRVRVUChhaC0+YW5hbG9nQmFuazBEYXRhLCAmYWgtPmluaUJhbmswLCAxKTsKKwlhcjUwMDhfcmZfYmFua19zZXR1cChhaC0+YW5hbG9nQmFuazBEYXRhLCAmYWgtPmluaUJhbmswLCAxKTsKIAogCS8qIFNldHVwIEJhbmsgMSBXcml0ZSAqLwotCVJGX0JBTktfU0VUVVAoYWgtPmFuYWxvZ0JhbmsxRGF0YSwgJmFoLT5pbmlCYW5rMSwgMSk7CisJYXI1MDA4X3JmX2Jhbmtfc2V0dXAoYWgtPmFuYWxvZ0JhbmsxRGF0YSwgJmFoLT5pbmlCYW5rMSwgMSk7CiAKIAkvKiBTZXR1cCBCYW5rIDIgV3JpdGUgKi8KLQlSRl9CQU5LX1NFVFVQKGFoLT5hbmFsb2dCYW5rMkRhdGEsICZhaC0+aW5pQmFuazIsIDEpOworCWFyNTAwOF9yZl9iYW5rX3NldHVwKGFoLT5hbmFsb2dCYW5rMkRhdGEsICZhaC0+aW5pQmFuazIsIDEpOwogCiAJLyogU2V0dXAgQmFuayA2IFdyaXRlICovCi0JUkZfQkFOS19TRVRVUChhaC0+YW5hbG9nQmFuazNEYXRhLCAmYWgtPmluaUJhbmszLAorCWFyNTAwOF9yZl9iYW5rX3NldHVwKGFoLT5hbmFsb2dCYW5rM0RhdGEsICZhaC0+aW5pQmFuazMsCiAJCSAgICAgIG1vZGVzSW5kZXgpOwogCXsKIAkJaW50IGk7CkBAIC01NjksNyArNTk3LDcgQEAKIAl9CiAKIAkvKiBTZXR1cCBCYW5rIDcgU2V0dXAgKi8KLQlSRl9CQU5LX1NFVFVQKGFoLT5hbmFsb2dCYW5rN0RhdGEsICZhaC0+aW5pQmFuazcsIDEpOworCWFyNTAwOF9yZl9iYW5rX3NldHVwKGFoLT5hbmFsb2dCYW5rN0RhdGEsICZhaC0+aW5pQmFuazcsIDEpOwogCiAJLyogV3JpdGUgQW5hbG9nIHJlZ2lzdGVycyAqLwogCVJFR19XUklURV9SRl9BUlJBWSgmYWgtPmluaUJhbmswLCBhaC0+YW5hbG9nQmFuazBEYXRhLApAQCAtNzI5LDYgKzc1Nyw3IEBACiAJCQkJIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCXN0cnVjdCBhdGhfcmVndWxhdG9yeSAqcmVndWxhdG9yeSA9IGF0aDlrX2h3X3JlZ3VsYXRvcnkoYWgpOworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCWludCBpLCByZWdXcml0ZXMgPSAwOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGNoYW4tPmNoYW47CiAJdTMyIG1vZGVzSW5kZXgsIGZyZXFJbmRleDsKQEAgLTgwNSw3ICs4MzQsOCBAQAogCQlSRUdfV1JJVEUoYWgsIHJlZywgdmFsKTsKIAogCQlpZiAocmVnID49IDB4NzgwMCAmJiByZWcgPCAweDc4YTAKLQkJICAgICYmIGFoLT5jb25maWcuYW5hbG9nX3NoaWZ0cmVnKSB7CisJCSAgICAmJiBhaC0+Y29uZmlnLmFuYWxvZ19zaGlmdHJlZworCQkgICAgJiYgKGNvbW1vbi0+YnVzX29wcy0+YXRoX2J1c190eXBlICE9IEFUSF9VU0IpKSB7CiAJCQl1ZGVsYXkoMTAwKTsKIAkJfQogCkBAIC04MzUsNyArODY1LDggQEAKIAkJUkVHX1dSSVRFKGFoLCByZWcsIHZhbCk7CiAKIAkJaWYgKHJlZyA+PSAweDc4MDAgJiYgcmVnIDwgMHg3OGEwCi0JCSAgICAmJiBhaC0+Y29uZmlnLmFuYWxvZ19zaGlmdHJlZykgeworCQkgICAgJiYgYWgtPmNvbmZpZy5hbmFsb2dfc2hpZnRyZWcKKwkJICAgICYmIChjb21tb24tPmJ1c19vcHMtPmF0aF9idXNfdHlwZSAhPSBBVEhfVVNCKSkgewogCQkJdWRlbGF5KDEwMCk7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9jYWxpYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9jYWxpYi5jCmluZGV4IDc2Mzg4YzYuLmNiNjExYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfY2FsaWIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX2NhbGliLmMKQEAgLTI2LDYgKzI2LDI3IEBACiAJSVFfTUlTTUFUQ0hfQ0FMID0gQklUKDIpLAogfTsKIAorc3RhdGljIGJvb2wgYXI5MDAyX2h3X2lzX2NhbF9zdXBwb3J0ZWQoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkJZW51bSBhcjkwMDJfY2FsX3R5cGVzIGNhbF90eXBlKQoreworCWJvb2wgc3VwcG9ydGVkID0gZmFsc2U7CisJc3dpdGNoIChhaC0+c3VwcF9jYWxzICYgY2FsX3R5cGUpIHsKKwljYXNlIElRX01JU01BVENIX0NBTDoKKwkJLyogUnVuIElRIE1pc21hdGNoIGZvciBub24tQ0NLIG9ubHkgKi8KKwkJaWYgKCFJU19DSEFOX0IoY2hhbikpCisJCQlzdXBwb3J0ZWQgPSB0cnVlOworCQlicmVhazsKKwljYXNlIEFEQ19HQUlOX0NBTDoKKwljYXNlIEFEQ19EQ19DQUw6CisJCS8qIFJ1biBBREMgR2FpbiBDYWwgZm9yIG5vbi1DQ0sgJiBub24gMkdIei1IVDIwIG9ubHkgKi8KKwkJaWYgKCFJU19DSEFOX0IoY2hhbikgJiYKKwkJICAgICEoSVNfQ0hBTl8yR0haKGNoYW4pICYmIElTX0NIQU5fSFQyMChjaGFuKSkpCisJCQlzdXBwb3J0ZWQgPSB0cnVlOworCQlicmVhazsKKwl9CisJcmV0dXJuIHN1cHBvcnRlZDsKK30KIAogc3RhdGljIHZvaWQgYXI5MDAyX2h3X3NldHVwX2NhbGlicmF0aW9uKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCQlzdHJ1Y3QgYXRoOWtfY2FsX2xpc3QgKmN1cnJDYWwpCkBAIC04NTgsMjYgKzg3OSwzMiBAQAogCWlmIChBUl9TUkVWXzkxMDAoYWgpIHx8IEFSX1NSRVZfOTE2MF8xMF9PUl9MQVRFUihhaCkpIHsKIAkJYWgtPnN1cHBfY2FscyA9IElRX01JU01BVENIX0NBTDsKIAotCQlpZiAoQVJfU1JFVl85MTYwXzEwX09SX0xBVEVSKGFoKSAmJgotCQkgICAgIShJU19DSEFOXzJHSFooY2hhbikgJiYgSVNfQ0hBTl9IVDIwKGNoYW4pKSkgeworCQlpZiAoQVJfU1JFVl85MTYwXzEwX09SX0xBVEVSKGFoKSkKIAkJCWFoLT5zdXBwX2NhbHMgfD0gQURDX0dBSU5fQ0FMIHwgQURDX0RDX0NBTDsKIAorCQlpZiAoQVJfU1JFVl85Mjg3KGFoKSkKKwkJCWFoLT5zdXBwX2NhbHMgJj0gfkFEQ19HQUlOX0NBTDsKIAorCQlpZiAoYXI5MDAyX2h3X2lzX2NhbF9zdXBwb3J0ZWQoYWgsIGNoYW4sIEFEQ19HQUlOX0NBTCkpIHsKIAkJCUlOSVRfQ0FMKCZhaC0+YWRjZ2Fpbl9jYWxkYXRhKTsKIAkJCUlOU0VSVF9DQUwoYWgsICZhaC0+YWRjZ2Fpbl9jYWxkYXRhKTsKIAkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCQkiZW5hYmxpbmcgQURDIEdhaW4gQ2FsaWJyYXRpb24uXG4iKTsKKwkJCQkJImVuYWJsaW5nIEFEQyBHYWluIENhbGlicmF0aW9uLlxuIik7CisJCX0KIAorCQlpZiAoYXI5MDAyX2h3X2lzX2NhbF9zdXBwb3J0ZWQoYWgsIGNoYW4sIEFEQ19EQ19DQUwpKSB7CiAJCQlJTklUX0NBTCgmYWgtPmFkY2RjX2NhbGRhdGEpOwogCQkJSU5TRVJUX0NBTChhaCwgJmFoLT5hZGNkY19jYWxkYXRhKTsKIAkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCQkiZW5hYmxpbmcgQURDIERDIENhbGlicmF0aW9uLlxuIik7CisJCQkJCSJlbmFibGluZyBBREMgREMgQ2FsaWJyYXRpb24uXG4iKTsKIAkJfQogCi0JCUlOSVRfQ0FMKCZhaC0+aXFfY2FsZGF0YSk7Ci0JCUlOU0VSVF9DQUwoYWgsICZhaC0+aXFfY2FsZGF0YSk7Ci0JCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCSJlbmFibGluZyBJUSBDYWxpYnJhdGlvbi5cbiIpOworCQlpZiAoYXI5MDAyX2h3X2lzX2NhbF9zdXBwb3J0ZWQoYWgsIGNoYW4sIElRX01JU01BVENIX0NBTCkpIHsKKwkJCUlOSVRfQ0FMKCZhaC0+aXFfY2FsZGF0YSk7CisJCQlJTlNFUlRfQ0FMKGFoLCAmYWgtPmlxX2NhbGRhdGEpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJCQkiZW5hYmxpbmcgSVEgQ2FsaWJyYXRpb24uXG4iKTsKKwkJfQogCiAJCWFoLT5jYWxfbGlzdF9jdXJyID0gYWgtPmNhbF9saXN0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9tYWMuYwppbmRleCAzOTlhYjNiLi43YTMzMmYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfbWFjLmMKQEAgLTI5MCw3ICsyOTAsNiBAQAogCQl8IChmbGFncyAmIEFUSDlLX1RYREVTQ19WTUYgPyBBUl9WaXJ0TW9yZUZyYWcgOiAwKQogCQl8IFNNKHR4UG93ZXIsIEFSX1htaXRQb3dlcikKIAkJfCAoZmxhZ3MgJiBBVEg5S19UWERFU0NfVkVPTCA/IEFSX1ZFT0wgOiAwKQotCQl8IChmbGFncyAmIEFUSDlLX1RYREVTQ19DTFJETUFTSyA/IEFSX0NsckRlc3RNYXNrIDogMCkKIAkJfCAoZmxhZ3MgJiBBVEg5S19UWERFU0NfSU5UUkVRID8gQVJfVHhJbnRyUmVxIDogMCkKIAkJfCAoa2V5SXggIT0gQVRIOUtfVFhLRVlJWF9JTlZBTElEID8gQVJfRGVzdElkeFZhbGlkIDogMCk7CiAKQEAgLTMxMSw2ICszMTAsMTYgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGFyOTAwMl9od19zZXRfY2xyZG1hc2soc3RydWN0IGF0aF9odyAqYWgsIHZvaWQgKmRzLCBib29sIHZhbCkKK3sKKwlzdHJ1Y3QgYXI1NDE2X2Rlc2MgKmFkcyA9IEFSNTQxNkRFU0MoZHMpOworCisJaWYgKHZhbCkKKwkJYWRzLT5kc19jdGwwIHw9IEFSX0NsckRlc3RNYXNrOworCWVsc2UKKwkJYWRzLT5kc19jdGwwICY9IH5BUl9DbHJEZXN0TWFzazsKK30KKwogc3RhdGljIHZvaWQgYXI5MDAyX2h3X3NldDExbl9yYXRlc2NlbmFyaW8oc3RydWN0IGF0aF9odyAqYWgsIHZvaWQgKmRzLAogCQkJCQkgIHZvaWQgKmxhc3RkcywKIAkJCQkJICB1MzIgZHVyVXBkYXRlRW4sIHUzMiBydHNjdHNSYXRlLApAQCAtNDA2LDI2ICs0MTUsNiBAQAogCWFkcy0+ZHNfY3RsMSAmPSAofkFSX0lzQWdnciAmIH5BUl9Nb3JlQWdncik7CiB9CiAKLXN0YXRpYyB2b2lkIGFyOTAwMl9od19zZXQxMW5fYnVyc3RkdXJhdGlvbihzdHJ1Y3QgYXRoX2h3ICphaCwgdm9pZCAqZHMsCi0JCQkJCSAgIHUzMiBidXJzdER1cmF0aW9uKQotewotCXN0cnVjdCBhcjU0MTZfZGVzYyAqYWRzID0gQVI1NDE2REVTQyhkcyk7Ci0KLQlhZHMtPmRzX2N0bDIgJj0gfkFSX0J1cnN0RHVyOwotCWFkcy0+ZHNfY3RsMiB8PSBTTShidXJzdER1cmF0aW9uLCBBUl9CdXJzdER1cik7Ci19Ci0KLXN0YXRpYyB2b2lkIGFyOTAwMl9od19zZXQxMW5fdmlydHVhbG1vcmVmcmFnKHN0cnVjdCBhdGhfaHcgKmFoLCB2b2lkICpkcywKLQkJCQkJICAgIHUzMiB2bWYpCi17Ci0Jc3RydWN0IGFyNTQxNl9kZXNjICphZHMgPSBBUjU0MTZERVNDKGRzKTsKLQotCWlmICh2bWYpCi0JCWFkcy0+ZHNfY3RsMCB8PSBBUl9WaXJ0TW9yZUZyYWc7Ci0JZWxzZQotCQlhZHMtPmRzX2N0bDAgJj0gfkFSX1ZpcnRNb3JlRnJhZzsKLX0KLQogdm9pZCBhdGg5a19od19zZXR1cHJ4ZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKIAkJCSAgdTMyIHNpemUsIHUzMiBmbGFncykKIHsKQEAgLTQ1OCw2ICs0NDcsNSBAQAogCW9wcy0+c2V0MTFuX2FnZ3JfbWlkZGxlID0gYXI5MDAyX2h3X3NldDExbl9hZ2dyX21pZGRsZTsKIAlvcHMtPnNldDExbl9hZ2dyX2xhc3QgPSBhcjkwMDJfaHdfc2V0MTFuX2FnZ3JfbGFzdDsKIAlvcHMtPmNscjExbl9hZ2dyID0gYXI5MDAyX2h3X2NscjExbl9hZ2dyOwotCW9wcy0+c2V0MTFuX2J1cnN0ZHVyYXRpb24gPSBhcjkwMDJfaHdfc2V0MTFuX2J1cnN0ZHVyYXRpb247Ci0Jb3BzLT5zZXQxMW5fdmlydHVhbG1vcmVmcmFnID0gYXI5MDAyX2h3X3NldDExbl92aXJ0dWFsbW9yZWZyYWc7CisJb3BzLT5zZXRfY2xyZG1hc2sgPSBhcjkwMDJfaHdfc2V0X2NscmRtYXNrOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfcGh5LmMKaW5kZXggN2Q2OGQ2MS4uYTU3ZTk2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX3BoeS5jCkBAIC01MTcsMjMgKzUxNyw3IEBACiAJfQogfQogCi12b2lkIGFyOTAwMl9od19hdHRhY2hfcGh5X29wcyhzdHJ1Y3QgYXRoX2h3ICphaCkKLXsKLQlzdHJ1Y3QgYXRoX2h3X3ByaXZhdGVfb3BzICpwcml2X29wcyA9IGF0aDlrX2h3X3ByaXZhdGVfb3BzKGFoKTsKLQotCXByaXZfb3BzLT5zZXRfcmZfcmVncyA9IE5VTEw7Ci0JcHJpdl9vcHMtPnJmX2FsbG9jX2V4dF9iYW5rcyA9IE5VTEw7Ci0JcHJpdl9vcHMtPnJmX2ZyZWVfZXh0X2JhbmtzID0gTlVMTDsKLQlwcml2X29wcy0+cmZfc2V0X2ZyZXEgPSBhcjkwMDJfaHdfc2V0X2NoYW5uZWw7Ci0JcHJpdl9vcHMtPnNwdXJfbWl0aWdhdGVfZnJlcSA9IGFyOTAwMl9od19zcHVyX21pdGlnYXRlOwotCXByaXZfb3BzLT5vbGNfaW5pdCA9IGFyOTAwMl9vbGNfaW5pdDsKLQlwcml2X29wcy0+Y29tcHV0ZV9wbGxfY29udHJvbCA9IGFyOTAwMl9od19jb21wdXRlX3BsbF9jb250cm9sOwotCXByaXZfb3BzLT5kb19nZXRuZiA9IGFyOTAwMl9od19kb19nZXRuZjsKLQotCWFyOTAwMl9od19zZXRfbmZfbGltaXRzKGFoKTsKLX0KLQotdm9pZCBhdGg5a19od19hbnRkaXZfY29tYl9jb25mX2dldChzdHJ1Y3QgYXRoX2h3ICphaCwKK3N0YXRpYyB2b2lkIGFyOTAwMl9od19hbnRkaXZfY29tYl9jb25mX2dldChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgICBzdHJ1Y3QgYXRoX2h3X2FudGNvbWJfY29uZiAqYW50Y29uZikKIHsKIAl1MzIgcmVndmFsOwpAQCAtNTQ1LDEwICs1MjksMTEgQEAKIAkJCQkgQVJfUEhZXzkyODVfQU5UX0RJVl9BTFRfTE5BQ09ORl9TOwogCWFudGNvbmYtPmZhc3RfZGl2X2JpYXMgPSAocmVndmFsICYgQVJfUEhZXzkyODVfRkFTVF9ESVZfQklBUykgPj4KIAkJCQkgIEFSX1BIWV85Mjg1X0ZBU1RfRElWX0JJQVNfUzsKKwlhbnRjb25mLT5sbmExX2xuYTJfZGVsdGEgPSAtMzsKKwlhbnRjb25mLT5kaXZfZ3JvdXAgPSAwOwogfQotRVhQT1JUX1NZTUJPTChhdGg5a19od19hbnRkaXZfY29tYl9jb25mX2dldCk7CiAKLXZvaWQgYXRoOWtfaHdfYW50ZGl2X2NvbWJfY29uZl9zZXQoc3RydWN0IGF0aF9odyAqYWgsCitzdGF0aWMgdm9pZCBhcjkwMDJfaHdfYW50ZGl2X2NvbWJfY29uZl9zZXQoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJICAgc3RydWN0IGF0aF9od19hbnRjb21iX2NvbmYgKmFudGNvbmYpCiB7CiAJdTMyIHJlZ3ZhbDsKQEAgLTU2Niw0ICs1NTEsMjMgQEAKIAogCVJFR19XUklURShhaCwgQVJfUEhZX01VTFRJQ0hBSU5fR0FJTl9DVEwsIHJlZ3ZhbCk7CiB9Ci1FWFBPUlRfU1lNQk9MKGF0aDlrX2h3X2FudGRpdl9jb21iX2NvbmZfc2V0KTsKKwordm9pZCBhcjkwMDJfaHdfYXR0YWNoX3BoeV9vcHMoc3RydWN0IGF0aF9odyAqYWgpCit7CisJc3RydWN0IGF0aF9od19wcml2YXRlX29wcyAqcHJpdl9vcHMgPSBhdGg5a19od19wcml2YXRlX29wcyhhaCk7CisJc3RydWN0IGF0aF9od19vcHMgKm9wcyA9IGF0aDlrX2h3X29wcyhhaCk7CisKKwlwcml2X29wcy0+c2V0X3JmX3JlZ3MgPSBOVUxMOworCXByaXZfb3BzLT5yZl9hbGxvY19leHRfYmFua3MgPSBOVUxMOworCXByaXZfb3BzLT5yZl9mcmVlX2V4dF9iYW5rcyA9IE5VTEw7CisJcHJpdl9vcHMtPnJmX3NldF9mcmVxID0gYXI5MDAyX2h3X3NldF9jaGFubmVsOworCXByaXZfb3BzLT5zcHVyX21pdGlnYXRlX2ZyZXEgPSBhcjkwMDJfaHdfc3B1cl9taXRpZ2F0ZTsKKwlwcml2X29wcy0+b2xjX2luaXQgPSBhcjkwMDJfb2xjX2luaXQ7CisJcHJpdl9vcHMtPmNvbXB1dGVfcGxsX2NvbnRyb2wgPSBhcjkwMDJfaHdfY29tcHV0ZV9wbGxfY29udHJvbDsKKwlwcml2X29wcy0+ZG9fZ2V0bmYgPSBhcjkwMDJfaHdfZG9fZ2V0bmY7CisKKwlvcHMtPmFudGRpdl9jb21iX2NvbmZfZ2V0ID0gYXI5MDAyX2h3X2FudGRpdl9jb21iX2NvbmZfZ2V0OworCW9wcy0+YW50ZGl2X2NvbWJfY29uZl9zZXQgPSBhcjkwMDJfaHdfYW50ZGl2X2NvbWJfY29uZl9zZXQ7CisKKwlhcjkwMDJfaHdfc2V0X25mX2xpbWl0cyhhaCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX3BoeS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9waHkuaAppbmRleCAzNzY2M2RiLi40Nzc4MGVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX3BoeS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfcGh5LmgKQEAgLTQ4Myw3ICs0ODMsMTEgQEAKICNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkxfSU5JVF9UWF9HQUlOICAgICAweDAxRjgwMDAwCiAjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMX0lOSVRfVFhfR0FJTl9TICAgMTkKIAorI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTDggICAgICAgMHhhMjc4CisKICNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkw5ICAgICAgIDB4YTI3QworCisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMMTAgICAgICAgMHhhMzk0CiAjZGVmaW5lIEFSX1BIWV9UWF9ERVNJUkVEX1NDQUxFX0NDSyAgICAgICAgMHgwMDAwN0MwMAogI2RlZmluZSBBUl9QSFlfVFhfREVTSVJFRF9TQ0FMRV9DQ0tfUyAgICAgIDEwCiAjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMOV9SRVNfRENfUkVNT1ZBTCAgMHg4MDAwMDAwMApAQCAtNDk1LDYgKzQ5OSw4IEBACiAKICNkZWZpbmUgQVJfUEhZX0NIMF9UWF9QV1JDVFJMMTEgIDB4YTM5OAogI2RlZmluZSBBUl9QSFlfQ0gxX1RYX1BXUkNUUkwxMSAgMHhiMzk4CisjZGVmaW5lIEFSX1BIWV9DSDBfVFhfUFdSQ1RSTDEyICAweGEzZGMKKyNkZWZpbmUgQVJfUEhZX0NIMF9UWF9QV1JDVFJMMTMgIDB4YTNlMAogI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTF9PTFBDX1RFTVBfQ09NUCAgIDB4MDAwMEZDMDAKICNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkxfT0xQQ19URU1QX0NPTVBfUyAxMAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzXzJwMl9pbml0dmFscy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM18ycDJfaW5pdHZhbHMuaAppbmRleCA5ZWNjYTkzLi5mOTE1YTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzXzJwMl9pbml0dmFscy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfMnAyX2luaXR2YWxzLmgKQEAgLTM0LDEwICszNCwxMCBAQAogCiBzdGF0aWMgY29uc3QgdTMyIGFyOTMwME1vZGVzX2xvd2VzdF9vYl9kYl90eF9nYWluX3RhYmxlXzJwMltdWzVdID0gewogCS8qIEFkZHIgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICAgKi8KLQl7MHgwMDAwYTJkYywgMHgwMDAzMzgwMCwgMHgwMDAzMzgwMCwgMHgwMDYzNzgwMCwgMHgwMDYzNzgwMH0sCi0JezB4MDAwMGEyZTAsIDB4MDAwM2MwMDAsIDB4MDAwM2MwMDAsIDB4MDM4MzgwMDAsIDB4MDM4MzgwMDB9LAotCXsweDAwMDBhMmU0LCAweDAzZmMwMDAwLCAweDAzZmMwMDAwLCAweDAzZmMwMDAwLCAweDAzZmMwMDAwfSwKLQl7MHgwMDAwYTJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyZGMsIDB4MDAwMzM4MDAsIDB4MDAwMzM4MDAsIDB4MDNhYWEzNTIsIDB4MDNhYWEzNTJ9LAorCXsweDAwMDBhMmUwLCAweDAwMDNjMDAwLCAweDAwMDNjMDAwLCAweDAzY2NjNTg0LCAweDAzY2NjNTg0fSwKKwl7MHgwMDAwYTJlNCwgMHgwM2ZjMDAwMCwgMHgwM2ZjMDAwMCwgMHgwM2YwZjgwMCwgMHgwM2YwZjgwMH0sCisJezB4MDAwMGEyZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDNmZjAwMDAsIDB4MDNmZjAwMDB9LAogCXsweDAwMDBhNDEwLCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5fSwKIAl7MHgwMDAwYTUwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCiAJezB4MDAwMGE1MDQsIDB4MDYwMDAwMDMsIDB4MDYwMDAwMDMsIDB4MDQwMDAwMDIsIDB4MDQwMDAwMDJ9LApAQCAtMTE5LDE0ICsxMTksMTQgQEAKIAl7MHgwMDAwYTYzNCwgMHgwNDQxMTEwNCwgMHgwNDQxMTEwNCwgMHgwNDAxNTAwNSwgMHgwNDAxNTAwNX0sCiAJezB4MDAwMGE2MzgsIDB4MDQ0MTExMDQsIDB4MDQ0MTExMDQsIDB4MDQwMTUwMDUsIDB4MDQwMTUwMDV9LAogCXsweDAwMDBhNjNjLCAweDA0NDExMTA0LCAweDA0NDExMTA0LCAweDA0MDE1MDA1LCAweDA0MDE1MDA1fSwKLQl7MHgwMDAwYjJkYywgMHgwMDAzMzgwMCwgMHgwMDAzMzgwMCwgMHgwMDYzNzgwMCwgMHgwMDYzNzgwMH0sCi0JezB4MDAwMGIyZTAsIDB4MDAwM2MwMDAsIDB4MDAwM2MwMDAsIDB4MDM4MzgwMDAsIDB4MDM4MzgwMDB9LAotCXsweDAwMDBiMmU0LCAweDAzZmMwMDAwLCAweDAzZmMwMDAwLCAweDAzZmMwMDAwLCAweDAzZmMwMDAwfSwKLQl7MHgwMDAwYjJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGMyZGMsIDB4MDAwMzM4MDAsIDB4MDAwMzM4MDAsIDB4MDA2Mzc4MDAsIDB4MDA2Mzc4MDB9LAotCXsweDAwMDBjMmUwLCAweDAwMDNjMDAwLCAweDAwMDNjMDAwLCAweDAzODM4MDAwLCAweDAzODM4MDAwfSwKLQl7MHgwMDAwYzJlNCwgMHgwM2ZjMDAwMCwgMHgwM2ZjMDAwMCwgMHgwM2ZjMDAwMCwgMHgwM2ZjMDAwMH0sCi0JezB4MDAwMGMyZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMmRjLCAweDAwMDMzODAwLCAweDAwMDMzODAwLCAweDAzYWFhMzUyLCAweDAzYWFhMzUyfSwKKwl7MHgwMDAwYjJlMCwgMHgwMDAzYzAwMCwgMHgwMDAzYzAwMCwgMHgwM2NjYzU4NCwgMHgwM2NjYzU4NH0sCisJezB4MDAwMGIyZTQsIDB4MDNmYzAwMDAsIDB4MDNmYzAwMDAsIDB4MDNmMGY4MDAsIDB4MDNmMGY4MDB9LAorCXsweDAwMDBiMmU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAzZmYwMDAwLCAweDAzZmYwMDAwfSwKKwl7MHgwMDAwYzJkYywgMHgwMDAzMzgwMCwgMHgwMDAzMzgwMCwgMHgwM2FhYTM1MiwgMHgwM2FhYTM1Mn0sCisJezB4MDAwMGMyZTAsIDB4MDAwM2MwMDAsIDB4MDAwM2MwMDAsIDB4MDNjY2M1ODQsIDB4MDNjY2M1ODR9LAorCXsweDAwMDBjMmU0LCAweDAzZmMwMDAwLCAweDAzZmMwMDAwLCAweDAzZjBmODAwLCAweDAzZjBmODAwfSwKKwl7MHgwMDAwYzJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwM2ZmMDAwMCwgMHgwM2ZmMDAwMH0sCiAJezB4MDAwMTYwNDQsIDB4MDEyNDkyZDQsIDB4MDEyNDkyZDQsIDB4MDEyNDkyZDQsIDB4MDEyNDkyZDR9LAogCXsweDAwMDE2MDQ4LCAweDYyNDgwMDAxLCAweDYyNDgwMDAxLCAweDYyNDgwMDAxLCAweDYyNDgwMDAxfSwKIAl7MHgwMDAxNjA2OCwgMHg2ZGI2ZGI2YywgMHg2ZGI2ZGI2YywgMHg2ZGI2ZGI2YywgMHg2ZGI2ZGI2Y30sCkBAIC04MzUsMTAgKzgzNSwxMCBAQAogCiBzdGF0aWMgY29uc3QgdTMyIGFyOTMwME1vZGVzX2hpZ2hfcG93ZXJfdHhfZ2Fpbl90YWJsZV8ycDJbXVs1XSA9IHsKIAkvKiBBZGRyICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAgMkdfSFQyMCAgICovCi0JezB4MDAwMGEyZGMsIDB4MDM4MGM3ZmMsIDB4MDM4MGM3ZmMsIDB4MDA2Mzc4MDAsIDB4MDA2Mzc4MDB9LAotCXsweDAwMDBhMmUwLCAweDAwMDBmODAwLCAweDAwMDBmODAwLCAweDAzODM4MDAwLCAweDAzODM4MDAwfSwKLQl7MHgwMDAwYTJlNCwgMHgwM2ZmMDAwMCwgMHgwM2ZmMDAwMCwgMHgwM2ZjMDAwMCwgMHgwM2ZjMDAwMH0sCi0JezB4MDAwMGEyZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMmRjLCAweDAzODBjN2ZjLCAweDAzODBjN2ZjLCAweDAzYWFhMzUyLCAweDAzYWFhMzUyfSwKKwl7MHgwMDAwYTJlMCwgMHgwMDAwZjgwMCwgMHgwMDAwZjgwMCwgMHgwM2NjYzU4NCwgMHgwM2NjYzU4NH0sCisJezB4MDAwMGEyZTQsIDB4MDNmZjAwMDAsIDB4MDNmZjAwMDAsIDB4MDNmMGY4MDAsIDB4MDNmMGY4MDB9LAorCXsweDAwMDBhMmU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAzZmYwMDAwLCAweDAzZmYwMDAwfSwKIAl7MHgwMDAwYTQxMCwgMHgwMDAwNTBkOCwgMHgwMDAwNTBkOCwgMHgwMDAwNTBkOSwgMHgwMDAwNTBkOX0sCiAJezB4MDAwMGE1MDAsIDB4MDAwMDIyMjAsIDB4MDAwMDIyMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAogCXsweDAwMDBhNTA0LCAweDA0MDAyMjIyLCAweDA0MDAyMjIyLCAweDA0MDAwMDAyLCAweDA0MDAwMDAyfSwKQEAgLTkyMCwxNCArOTIwLDE0IEBACiAJezB4MDAwMGE2MzQsIDB4MDRjMTUzMDUsIDB4MDRjMTUzMDUsIDB4MDQwMTUwMDUsIDB4MDQwMTUwMDV9LAogCXsweDAwMDBhNjM4LCAweDA0YzE1MzA1LCAweDA0YzE1MzA1LCAweDA0MDE1MDA1LCAweDA0MDE1MDA1fSwKIAl7MHgwMDAwYTYzYywgMHgwNGMxNTMwNSwgMHgwNGMxNTMwNSwgMHgwNDAxNTAwNSwgMHgwNDAxNTAwNX0sCi0JezB4MDAwMGIyZGMsIDB4MDM4MGM3ZmMsIDB4MDM4MGM3ZmMsIDB4MDA2Mzc4MDAsIDB4MDA2Mzc4MDB9LAotCXsweDAwMDBiMmUwLCAweDAwMDBmODAwLCAweDAwMDBmODAwLCAweDAzODM4MDAwLCAweDAzODM4MDAwfSwKLQl7MHgwMDAwYjJlNCwgMHgwM2ZmMDAwMCwgMHgwM2ZmMDAwMCwgMHgwM2ZjMDAwMCwgMHgwM2ZjMDAwMH0sCi0JezB4MDAwMGIyZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBjMmRjLCAweDAzODBjN2ZjLCAweDAzODBjN2ZjLCAweDAwNjM3ODAwLCAweDAwNjM3ODAwfSwKLQl7MHgwMDAwYzJlMCwgMHgwMDAwZjgwMCwgMHgwMDAwZjgwMCwgMHgwMzgzODAwMCwgMHgwMzgzODAwMH0sCi0JezB4MDAwMGMyZTQsIDB4MDNmZjAwMDAsIDB4MDNmZjAwMDAsIDB4MDNmYzAwMDAsIDB4MDNmYzAwMDB9LAotCXsweDAwMDBjMmU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjJkYywgMHgwMzgwYzdmYywgMHgwMzgwYzdmYywgMHgwM2FhYTM1MiwgMHgwM2FhYTM1Mn0sCisJezB4MDAwMGIyZTAsIDB4MDAwMGY4MDAsIDB4MDAwMGY4MDAsIDB4MDNjY2M1ODQsIDB4MDNjY2M1ODR9LAorCXsweDAwMDBiMmU0LCAweDAzZmYwMDAwLCAweDAzZmYwMDAwLCAweDAzZjBmODAwLCAweDAzZjBmODAwfSwKKwl7MHgwMDAwYjJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwM2ZmMDAwMCwgMHgwM2ZmMDAwMH0sCisJezB4MDAwMGMyZGMsIDB4MDM4MGM3ZmMsIDB4MDM4MGM3ZmMsIDB4MDNhYWEzNTIsIDB4MDNhYWEzNTJ9LAorCXsweDAwMDBjMmUwLCAweDAwMDBmODAwLCAweDAwMDBmODAwLCAweDAzY2NjNTg0LCAweDAzY2NjNTg0fSwKKwl7MHgwMDAwYzJlNCwgMHgwM2ZmMDAwMCwgMHgwM2ZmMDAwMCwgMHgwM2YwZjgwMCwgMHgwM2YwZjgwMH0sCisJezB4MDAwMGMyZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDNmZjAwMDAsIDB4MDNmZjAwMDB9LAogCXsweDAwMDE2MDQ0LCAweDA1NmRiMmU2LCAweDA1NmRiMmU2LCAweDA1NmRiMmU2LCAweDA1NmRiMmU2fSwKIAl7MHgwMDAxNjA0OCwgMHhhZTQ4MDAwMSwgMHhhZTQ4MDAwMSwgMHhhZTQ4MDAwMSwgMHhhZTQ4MDAwMX0sCiAJezB4MDAwMTYwNjgsIDB4NmViNmRiNmMsIDB4NmViNmRiNmMsIDB4NmViNmRiNmMsIDB4NmViNmRiNmN9LApAQCAtOTQxLDEwICs5NDEsMTAgQEAKIAogc3RhdGljIGNvbnN0IHUzMiBhcjkzMDBNb2Rlc19oaWdoX29iX2RiX3R4X2dhaW5fdGFibGVfMnAyW11bNV0gPSB7CiAJLyogQWRkciAgICAgIDVHX0hUMjAgICAgIDVHX0hUNDAgICAgIDJHX0hUNDAgICAgIDJHX0hUMjAgICAqLwotCXsweDAwMDBhMmRjLCAweDAxZmVlZTAwLCAweDAxZmVlZTAwLCAweDAwNjM3ODAwLCAweDAwNjM3ODAwfSwKLQl7MHgwMDAwYTJlMCwgMHgwMDAwZjAwMCwgMHgwMDAwZjAwMCwgMHgwMzgzODAwMCwgMHgwMzgzODAwMH0sCi0JezB4MDAwMGEyZTQsIDB4MDFmZjAwMDAsIDB4MDFmZjAwMDAsIDB4MDNmYzAwMDAsIDB4MDNmYzAwMDB9LAotCXsweDAwMDBhMmU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTJkYywgMHgwMWZlZWUwMCwgMHgwMWZlZWUwMCwgMHgwM2FhYTM1MiwgMHgwM2FhYTM1Mn0sCisJezB4MDAwMGEyZTAsIDB4MDAwMGYwMDAsIDB4MDAwMGYwMDAsIDB4MDNjY2M1ODQsIDB4MDNjY2M1ODR9LAorCXsweDAwMDBhMmU0LCAweDAxZmYwMDAwLCAweDAxZmYwMDAwLCAweDAzZjBmODAwLCAweDAzZjBmODAwfSwKKwl7MHgwMDAwYTJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwM2ZmMDAwMCwgMHgwM2ZmMDAwMH0sCiAJezB4MDAwMGE0MTAsIDB4MDAwMDUwZDgsIDB4MDAwMDUwZDgsIDB4MDAwMDUwZDksIDB4MDAwMDUwZDl9LAogCXsweDAwMDBhNTAwLCAweDAwMDAyMjIwLCAweDAwMDAyMjIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKIAl7MHgwMDAwYTUwNCwgMHgwNDAwMjIyMiwgMHgwNDAwMjIyMiwgMHgwNDAwMDAwMiwgMHgwNDAwMDAwMn0sCkBAIC0xMDI2LDE0ICsxMDI2LDE0IEBACiAJezB4MDAwMGE2MzQsIDB4MDRjMTUzMDUsIDB4MDRjMTUzMDUsIDB4MDQwMTUwMDUsIDB4MDQwMTUwMDV9LAogCXsweDAwMDBhNjM4LCAweDA0YzE1MzA1LCAweDA0YzE1MzA1LCAweDA0MDE1MDA1LCAweDA0MDE1MDA1fSwKIAl7MHgwMDAwYTYzYywgMHgwNGMxNTMwNSwgMHgwNGMxNTMwNSwgMHgwNDAxNTAwNSwgMHgwNDAxNTAwNX0sCi0JezB4MDAwMGIyZGMsIDB4MDFmZWVlMDAsIDB4MDFmZWVlMDAsIDB4MDA2Mzc4MDAsIDB4MDA2Mzc4MDB9LAotCXsweDAwMDBiMmUwLCAweDAwMDBmMDAwLCAweDAwMDBmMDAwLCAweDAzODM4MDAwLCAweDAzODM4MDAwfSwKLQl7MHgwMDAwYjJlNCwgMHgwMWZmMDAwMCwgMHgwMWZmMDAwMCwgMHgwM2ZjMDAwMCwgMHgwM2ZjMDAwMH0sCi0JezB4MDAwMGIyZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBjMmRjLCAweDAxZmVlZTAwLCAweDAxZmVlZTAwLCAweDAwNjM3ODAwLCAweDAwNjM3ODAwfSwKLQl7MHgwMDAwYzJlMCwgMHgwMDAwZjAwMCwgMHgwMDAwZjAwMCwgMHgwMzgzODAwMCwgMHgwMzgzODAwMH0sCi0JezB4MDAwMGMyZTQsIDB4MDFmZjAwMDAsIDB4MDFmZjAwMDAsIDB4MDNmYzAwMDAsIDB4MDNmYzAwMDB9LAotCXsweDAwMDBjMmU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjJkYywgMHgwMWZlZWUwMCwgMHgwMWZlZWUwMCwgMHgwM2FhYTM1MiwgMHgwM2FhYTM1Mn0sCisJezB4MDAwMGIyZTAsIDB4MDAwMGYwMDAsIDB4MDAwMGYwMDAsIDB4MDNjY2M1ODQsIDB4MDNjY2M1ODR9LAorCXsweDAwMDBiMmU0LCAweDAxZmYwMDAwLCAweDAxZmYwMDAwLCAweDAzZjBmODAwLCAweDAzZjBmODAwfSwKKwl7MHgwMDAwYjJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwM2ZmMDAwMCwgMHgwM2ZmMDAwMH0sCisJezB4MDAwMGMyZGMsIDB4MDFmZWVlMDAsIDB4MDFmZWVlMDAsIDB4MDNhYWEzNTIsIDB4MDNhYWEzNTJ9LAorCXsweDAwMDBjMmUwLCAweDAwMDBmMDAwLCAweDAwMDBmMDAwLCAweDAzY2NjNTg0LCAweDAzY2NjNTg0fSwKKwl7MHgwMDAwYzJlNCwgMHgwMWZmMDAwMCwgMHgwMWZmMDAwMCwgMHgwM2YwZjgwMCwgMHgwM2YwZjgwMH0sCisJezB4MDAwMGMyZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDNmZjAwMDAsIDB4MDNmZjAwMDB9LAogCXsweDAwMDE2MDQ0LCAweDA1NmRiMmU0LCAweDA1NmRiMmU0LCAweDA1NmRiMmU0LCAweDA1NmRiMmU0fSwKIAl7MHgwMDAxNjA0OCwgMHg4ZTQ4MDAwMSwgMHg4ZTQ4MDAwMSwgMHg4ZTQ4MDAwMSwgMHg4ZTQ4MDAwMX0sCiAJezB4MDAwMTYwNjgsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmMsIDB4NmRiNmRiNmN9LApAQCAtMTMwNywxMCArMTMwNywxMCBAQAogCiBzdGF0aWMgY29uc3QgdTMyIGFyOTMwME1vZGVzX2xvd19vYl9kYl90eF9nYWluX3RhYmxlXzJwMltdWzVdID0gewogCS8qIEFkZHIgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICAgKi8KLQl7MHgwMDAwYTJkYywgMHgwMzgwYzdmYywgMHgwMzgwYzdmYywgMHgwMDYzNzgwMCwgMHgwMDYzNzgwMH0sCi0JezB4MDAwMGEyZTAsIDB4MDAwMGY4MDAsIDB4MDAwMGY4MDAsIDB4MDM4MzgwMDAsIDB4MDM4MzgwMDB9LAotCXsweDAwMDBhMmU0LCAweDAzZmYwMDAwLCAweDAzZmYwMDAwLCAweDAzZmMwMDAwLCAweDAzZmMwMDAwfSwKLQl7MHgwMDAwYTJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyZGMsIDB4MDAwMzM4MDAsIDB4MDAwMzM4MDAsIDB4MDNhYWEzNTIsIDB4MDNhYWEzNTJ9LAorCXsweDAwMDBhMmUwLCAweDAwMDNjMDAwLCAweDAwMDNjMDAwLCAweDAzY2NjNTg0LCAweDAzY2NjNTg0fSwKKwl7MHgwMDAwYTJlNCwgMHgwM2ZjMDAwMCwgMHgwM2ZjMDAwMCwgMHgwM2YwZjgwMCwgMHgwM2YwZjgwMH0sCisJezB4MDAwMGEyZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDNmZjAwMDAsIDB4MDNmZjAwMDB9LAogCXsweDAwMDBhNDEwLCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5fSwKIAl7MHgwMDAwYTUwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCiAJezB4MDAwMGE1MDQsIDB4MDYwMDAwMDMsIDB4MDYwMDAwMDMsIDB4MDQwMDAwMDIsIDB4MDQwMDAwMDJ9LApAQCAtMTMyOSwyMSArMTMyOSwyMSBAQAogCXsweDAwMDBhNTM4LCAweDQ3MDIyNDRhLCAweDQ3MDIyNDRhLCAweDM0MDAwZTI0LCAweDM0MDAwZTI0fSwKIAl7MHgwMDAwYTUzYywgMHg0YjAyMjQ0YywgMHg0YjAyMjQ0YywgMHgzODAwMTY0MCwgMHgzODAwMTY0MH0sCiAJezB4MDAwMGE1NDAsIDB4NGUwMjI0NmMsIDB4NGUwMjI0NmMsIDB4M2MwMDE2NjAsIDB4M2MwMDE2NjB9LAotCXsweDAwMDBhNTQ0LCAweDUzMDIyNjZjLCAweDUzMDIyNjZjLCAweDNmMDAxODYxLCAweDNmMDAxODYxfSwKLQl7MHgwMDAwYTU0OCwgMHg1NzAyMjg2YywgMHg1NzAyMjg2YywgMHg0MzAwMWE4MSwgMHg0MzAwMWE4MX0sCi0JezB4MDAwMGE1NGMsIDB4NWMwMjQ4NmIsIDB4NWMwMjQ4NmIsIDB4NDcwMDFhODMsIDB4NDcwMDFhODN9LAotCXsweDAwMDBhNTUwLCAweDYxMDI0YTZjLCAweDYxMDI0YTZjLCAweDRhMDAxYzg0LCAweDRhMDAxYzg0fSwKLQl7MHgwMDAwYTU1NCwgMHg2NjAyNmE2YywgMHg2NjAyNmE2YywgMHg0ZTAwMWNlMywgMHg0ZTAwMWNlM30sCi0JezB4MDAwMGE1NTgsIDB4NmIwMjZlNmMsIDB4NmIwMjZlNmMsIDB4NTIwMDFjZTUsIDB4NTIwMDFjZTV9LAotCXsweDAwMDBhNTVjLCAweDcwMDI3MDhjLCAweDcwMDI3MDhjLCAweDU2MDAxY2U5LCAweDU2MDAxY2U5fSwKLQl7MHgwMDAwYTU2MCwgMHg3MzAyYjA4YSwgMHg3MzAyYjA4YSwgMHg1YTAwMWNlYiwgMHg1YTAwMWNlYn0sCi0JezB4MDAwMGE1NjQsIDB4NzcwMmIwOGMsIDB4NzcwMmIwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAotCXsweDAwMDBhNTY4LCAweDc3MDJiMDhjLCAweDc3MDJiMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKLQl7MHgwMDAwYTU2YywgMHg3NzAyYjA4YywgMHg3NzAyYjA4YywgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCi0JezB4MDAwMGE1NzAsIDB4NzcwMmIwOGMsIDB4NzcwMmIwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAotCXsweDAwMDBhNTc0LCAweDc3MDJiMDhjLCAweDc3MDJiMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKLQl7MHgwMDAwYTU3OCwgMHg3NzAyYjA4YywgMHg3NzAyYjA4YywgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCi0JezB4MDAwMGE1N2MsIDB4NzcwMmIwOGMsIDB4NzcwMmIwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAorCXsweDAwMDBhNTQ0LCAweDUyMDIyNDcwLCAweDUyMDIyNDcwLCAweDNmMDAxODYxLCAweDNmMDAxODYxfSwKKwl7MHgwMDAwYTU0OCwgMHg1NTAyMjQ5MCwgMHg1NTAyMjQ5MCwgMHg0MzAwMWE4MSwgMHg0MzAwMWE4MX0sCisJezB4MDAwMGE1NGMsIDB4NTkwMjI0OTIsIDB4NTkwMjI0OTIsIDB4NDcwMDFhODMsIDB4NDcwMDFhODN9LAorCXsweDAwMDBhNTUwLCAweDVkMDIyNjkyLCAweDVkMDIyNjkyLCAweDRhMDAxYzg0LCAweDRhMDAxYzg0fSwKKwl7MHgwMDAwYTU1NCwgMHg2MTAyMjg5MiwgMHg2MTAyMjg5MiwgMHg0ZTAwMWNlMywgMHg0ZTAwMWNlM30sCisJezB4MDAwMGE1NTgsIDB4NjUwMjQ4OTAsIDB4NjUwMjQ4OTAsIDB4NTIwMDFjZTUsIDB4NTIwMDFjZTV9LAorCXsweDAwMDBhNTVjLCAweDY5MDI0ODkyLCAweDY5MDI0ODkyLCAweDU2MDAxY2U5LCAweDU2MDAxY2U5fSwKKwl7MHgwMDAwYTU2MCwgMHg2ZTAyNGM5MiwgMHg2ZTAyNGM5MiwgMHg1YTAwMWNlYiwgMHg1YTAwMWNlYn0sCisJezB4MDAwMGE1NjQsIDB4NzQwMjZlOTIsIDB4NzQwMjZlOTIsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAorCXsweDAwMDBhNTY4LCAweDc0MDI2ZTkyLCAweDc0MDI2ZTkyLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKKwl7MHgwMDAwYTU2YywgMHg3NDAyNmU5MiwgMHg3NDAyNmU5MiwgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCisJezB4MDAwMGE1NzAsIDB4NzQwMjZlOTIsIDB4NzQwMjZlOTIsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAorCXsweDAwMDBhNTc0LCAweDc0MDI2ZTkyLCAweDc0MDI2ZTkyLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKKwl7MHgwMDAwYTU3OCwgMHg3NDAyNmU5MiwgMHg3NDAyNmU5MiwgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCisJezB4MDAwMGE1N2MsIDB4NzQwMjZlOTIsIDB4NzQwMjZlOTIsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAogCXsweDAwMDBhNTgwLCAweDAwODAwMDAwLCAweDAwODAwMDAwLCAweDAwODAwMDAwLCAweDAwODAwMDAwfSwKIAl7MHgwMDAwYTU4NCwgMHgwNjgwMDAwMywgMHgwNjgwMDAwMywgMHgwNDgwMDAwMiwgMHgwNDgwMDAwMn0sCiAJezB4MDAwMGE1ODgsIDB4MGE4MDAwMjAsIDB4MGE4MDAwMjAsIDB4MDg4MDAwMDQsIDB4MDg4MDAwMDR9LApAQCAtMTM2MSw0NSArMTM2MSw0NSBAQAogCXsweDAwMDBhNWI4LCAweDQ3ODIyNDRhLCAweDQ3ODIyNDRhLCAweDM0ODAwZTI0LCAweDM0ODAwZTI0fSwKIAl7MHgwMDAwYTViYywgMHg0YjgyMjQ0YywgMHg0YjgyMjQ0YywgMHgzODgwMTY0MCwgMHgzODgwMTY0MH0sCiAJezB4MDAwMGE1YzAsIDB4NGU4MjI0NmMsIDB4NGU4MjI0NmMsIDB4M2M4MDE2NjAsIDB4M2M4MDE2NjB9LAotCXsweDAwMDBhNWM0LCAweDUzODIyNjZjLCAweDUzODIyNjZjLCAweDNmODAxODYxLCAweDNmODAxODYxfSwKLQl7MHgwMDAwYTVjOCwgMHg1NzgyMjg2YywgMHg1NzgyMjg2YywgMHg0MzgwMWE4MSwgMHg0MzgwMWE4MX0sCi0JezB4MDAwMGE1Y2MsIDB4NWM4MjQ4NmIsIDB4NWM4MjQ4NmIsIDB4NDc4MDFhODMsIDB4NDc4MDFhODN9LAotCXsweDAwMDBhNWQwLCAweDYxODI0YTZjLCAweDYxODI0YTZjLCAweDRhODAxYzg0LCAweDRhODAxYzg0fSwKLQl7MHgwMDAwYTVkNCwgMHg2NjgyNmE2YywgMHg2NjgyNmE2YywgMHg0ZTgwMWNlMywgMHg0ZTgwMWNlM30sCi0JezB4MDAwMGE1ZDgsIDB4NmI4MjZlNmMsIDB4NmI4MjZlNmMsIDB4NTI4MDFjZTUsIDB4NTI4MDFjZTV9LAotCXsweDAwMDBhNWRjLCAweDcwODI3MDhjLCAweDcwODI3MDhjLCAweDU2ODAxY2U5LCAweDU2ODAxY2U5fSwKLQl7MHgwMDAwYTVlMCwgMHg3MzgyYjA4YSwgMHg3MzgyYjA4YSwgMHg1YTgwMWNlYiwgMHg1YTgwMWNlYn0sCi0JezB4MDAwMGE1ZTQsIDB4Nzc4MmIwOGMsIDB4Nzc4MmIwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAotCXsweDAwMDBhNWU4LCAweDc3ODJiMDhjLCAweDc3ODJiMDhjLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKLQl7MHgwMDAwYTVlYywgMHg3NzgyYjA4YywgMHg3NzgyYjA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCi0JezB4MDAwMGE1ZjAsIDB4Nzc4MmIwOGMsIDB4Nzc4MmIwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAotCXsweDAwMDBhNWY0LCAweDc3ODJiMDhjLCAweDc3ODJiMDhjLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKLQl7MHgwMDAwYTVmOCwgMHg3NzgyYjA4YywgMHg3NzgyYjA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCi0JezB4MDAwMGE1ZmMsIDB4Nzc4MmIwOGMsIDB4Nzc4MmIwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDBhNWM0LCAweDUyODIyNDcwLCAweDUyODIyNDcwLCAweDNmODAxODYxLCAweDNmODAxODYxfSwKKwl7MHgwMDAwYTVjOCwgMHg1NTgyMjQ5MCwgMHg1NTgyMjQ5MCwgMHg0MzgwMWE4MSwgMHg0MzgwMWE4MX0sCisJezB4MDAwMGE1Y2MsIDB4NTk4MjI0OTIsIDB4NTk4MjI0OTIsIDB4NDc4MDFhODMsIDB4NDc4MDFhODN9LAorCXsweDAwMDBhNWQwLCAweDVkODIyNjkyLCAweDVkODIyNjkyLCAweDRhODAxYzg0LCAweDRhODAxYzg0fSwKKwl7MHgwMDAwYTVkNCwgMHg2MTgyMjg5MiwgMHg2MTgyMjg5MiwgMHg0ZTgwMWNlMywgMHg0ZTgwMWNlM30sCisJezB4MDAwMGE1ZDgsIDB4NjU4MjQ4OTAsIDB4NjU4MjQ4OTAsIDB4NTI4MDFjZTUsIDB4NTI4MDFjZTV9LAorCXsweDAwMDBhNWRjLCAweDY5ODI0ODkyLCAweDY5ODI0ODkyLCAweDU2ODAxY2U5LCAweDU2ODAxY2U5fSwKKwl7MHgwMDAwYTVlMCwgMHg2ZTgyNGM5MiwgMHg2ZTgyNGM5MiwgMHg1YTgwMWNlYiwgMHg1YTgwMWNlYn0sCisJezB4MDAwMGE1ZTQsIDB4NzQ4MjZlOTIsIDB4NzQ4MjZlOTIsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDBhNWU4LCAweDc0ODI2ZTkyLCAweDc0ODI2ZTkyLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKKwl7MHgwMDAwYTVlYywgMHg3NDgyNmU5MiwgMHg3NDgyNmU5MiwgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCisJezB4MDAwMGE1ZjAsIDB4NzQ4MjZlOTIsIDB4NzQ4MjZlOTIsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDBhNWY0LCAweDc0ODI2ZTkyLCAweDc0ODI2ZTkyLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKKwl7MHgwMDAwYTVmOCwgMHg3NDgyNmU5MiwgMHg3NDgyNmU5MiwgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCisJezB4MDAwMGE1ZmMsIDB4NzQ4MjZlOTIsIDB4NzQ4MjZlOTIsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAogCXsweDAwMDBhNjAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKIAl7MHgwMDAwYTYwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCiAJezB4MDAwMGE2MDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAogCXsweDAwMDBhNjBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKIAl7MHgwMDAwYTYxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE2MTQsIDB4MDE0MDQwMDAsIDB4MDE0MDQwMDAsIDB4MDE0MDQwMDAsIDB4MDE0MDQwMDB9LAotCXsweDAwMDBhNjE4LCAweDAxNDA0NTAxLCAweDAxNDA0NTAxLCAweDAxNDA0NTAxLCAweDAxNDA0NTAxfSwKLQl7MHgwMDAwYTYxYywgMHgwMjAwODgwMiwgMHgwMjAwODgwMiwgMHgwMjAwODUwMSwgMHgwMjAwODUwMX0sCi0JezB4MDAwMGE2MjAsIDB4MDMwMGNjMDMsIDB4MDMwMGNjMDMsIDB4MDI4MGNhMDMsIDB4MDI4MGNhMDN9LAotCXsweDAwMDBhNjI0LCAweDAzMDBjYzAzLCAweDAzMDBjYzAzLCAweDAzMDEwYzA0LCAweDAzMDEwYzA0fSwKLQl7MHgwMDAwYTYyOCwgMHgwMzAwY2MwMywgMHgwMzAwY2MwMywgMHgwNDAxNGMwNCwgMHgwNDAxNGMwNH0sCi0JezB4MDAwMGE2MmMsIDB4MDM4MTBjMDMsIDB4MDM4MTBjMDMsIDB4MDQwMTUwMDUsIDB4MDQwMTUwMDV9LAotCXsweDAwMDBhNjMwLCAweDAzODEwZTA0LCAweDAzODEwZTA0LCAweDA0MDE1MDA1LCAweDA0MDE1MDA1fSwKLQl7MHgwMDAwYTYzNCwgMHgwMzgxMGUwNCwgMHgwMzgxMGUwNCwgMHgwNDAxNTAwNSwgMHgwNDAxNTAwNX0sCi0JezB4MDAwMGE2MzgsIDB4MDM4MTBlMDQsIDB4MDM4MTBlMDQsIDB4MDQwMTUwMDUsIDB4MDQwMTUwMDV9LAotCXsweDAwMDBhNjNjLCAweDAzODEwZTA0LCAweDAzODEwZTA0LCAweDA0MDE1MDA1LCAweDA0MDE1MDA1fSwKLQl7MHgwMDAwYjJkYywgMHgwMzgwYzdmYywgMHgwMzgwYzdmYywgMHgwMDYzNzgwMCwgMHgwMDYzNzgwMH0sCi0JezB4MDAwMGIyZTAsIDB4MDAwMGY4MDAsIDB4MDAwMGY4MDAsIDB4MDM4MzgwMDAsIDB4MDM4MzgwMDB9LAotCXsweDAwMDBiMmU0LCAweDAzZmYwMDAwLCAweDAzZmYwMDAwLCAweDAzZmMwMDAwLCAweDAzZmMwMDAwfSwKLQl7MHgwMDAwYjJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGMyZGMsIDB4MDM4MGM3ZmMsIDB4MDM4MGM3ZmMsIDB4MDA2Mzc4MDAsIDB4MDA2Mzc4MDB9LAotCXsweDAwMDBjMmUwLCAweDAwMDBmODAwLCAweDAwMDBmODAwLCAweDAzODM4MDAwLCAweDAzODM4MDAwfSwKLQl7MHgwMDAwYzJlNCwgMHgwM2ZmMDAwMCwgMHgwM2ZmMDAwMCwgMHgwM2ZjMDAwMCwgMHgwM2ZjMDAwMH0sCi0JezB4MDAwMGMyZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjE0LCAweDAyMDA0MDAwLCAweDAyMDA0MDAwLCAweDAxNDA0MDAwLCAweDAxNDA0MDAwfSwKKwl7MHgwMDAwYTYxOCwgMHgwMjAwNDgwMSwgMHgwMjAwNDgwMSwgMHgwMTQwNDUwMSwgMHgwMTQwNDUwMX0sCisJezB4MDAwMGE2MWMsIDB4MDI4MDhhMDIsIDB4MDI4MDhhMDIsIDB4MDIwMDg1MDEsIDB4MDIwMDg1MDF9LAorCXsweDAwMDBhNjIwLCAweDAzODBjZTAzLCAweDAzODBjZTAzLCAweDAyODBjYTAzLCAweDAyODBjYTAzfSwKKwl7MHgwMDAwYTYyNCwgMHgwNDQxMTEwNCwgMHgwNDQxMTEwNCwgMHgwMzAxMGMwNCwgMHgwMzAxMGMwNH0sCisJezB4MDAwMGE2MjgsIDB4MDQ0MTExMDQsIDB4MDQ0MTExMDQsIDB4MDQwMTRjMDQsIDB4MDQwMTRjMDR9LAorCXsweDAwMDBhNjJjLCAweDA0NDExMTA0LCAweDA0NDExMTA0LCAweDA0MDE1MDA1LCAweDA0MDE1MDA1fSwKKwl7MHgwMDAwYTYzMCwgMHgwNDQxMTEwNCwgMHgwNDQxMTEwNCwgMHgwNDAxNTAwNSwgMHgwNDAxNTAwNX0sCisJezB4MDAwMGE2MzQsIDB4MDQ0MTExMDQsIDB4MDQ0MTExMDQsIDB4MDQwMTUwMDUsIDB4MDQwMTUwMDV9LAorCXsweDAwMDBhNjM4LCAweDA0NDExMTA0LCAweDA0NDExMTA0LCAweDA0MDE1MDA1LCAweDA0MDE1MDA1fSwKKwl7MHgwMDAwYTYzYywgMHgwNDQxMTEwNCwgMHgwNDQxMTEwNCwgMHgwNDAxNTAwNSwgMHgwNDAxNTAwNX0sCisJezB4MDAwMGIyZGMsIDB4MDAwMzM4MDAsIDB4MDAwMzM4MDAsIDB4MDNhYWEzNTIsIDB4MDNhYWEzNTJ9LAorCXsweDAwMDBiMmUwLCAweDAwMDNjMDAwLCAweDAwMDNjMDAwLCAweDAzY2NjNTg0LCAweDAzY2NjNTg0fSwKKwl7MHgwMDAwYjJlNCwgMHgwM2ZjMDAwMCwgMHgwM2ZjMDAwMCwgMHgwM2YwZjgwMCwgMHgwM2YwZjgwMH0sCisJezB4MDAwMGIyZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDNmZjAwMDAsIDB4MDNmZjAwMDB9LAorCXsweDAwMDBjMmRjLCAweDAwMDMzODAwLCAweDAwMDMzODAwLCAweDAzYWFhMzUyLCAweDAzYWFhMzUyfSwKKwl7MHgwMDAwYzJlMCwgMHgwMDAzYzAwMCwgMHgwMDAzYzAwMCwgMHgwM2NjYzU4NCwgMHgwM2NjYzU4NH0sCisJezB4MDAwMGMyZTQsIDB4MDNmYzAwMDAsIDB4MDNmYzAwMDAsIDB4MDNmMGY4MDAsIDB4MDNmMGY4MDB9LAorCXsweDAwMDBjMmU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAzZmYwMDAwLCAweDAzZmYwMDAwfSwKIAl7MHgwMDAxNjA0NCwgMHgwMTI0OTJkNCwgMHgwMTI0OTJkNCwgMHgwMTI0OTJkNCwgMHgwMTI0OTJkNH0sCiAJezB4MDAwMTYwNDgsIDB4NjY0ODAwMDEsIDB4NjY0ODAwMDEsIDB4NjY0ODAwMDEsIDB4NjY0ODAwMDF9LAogCXsweDAwMDE2MDY4LCAweDZkYjZkYjZjLCAweDZkYjZkYjZjLCAweDZkYjZkYjZjLCAweDZkYjZkYjZjfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfY2FsaWIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfY2FsaWIuYwppbmRleCA0YTRjZDg4Li5mMjc2Y2I5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2NhbGliLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19jYWxpYi5jCkBAIC0xOCwxMyArMTgsMTMgQEAKICNpbmNsdWRlICJody1vcHMuaCIKICNpbmNsdWRlICJhcjkwMDNfcGh5LmgiCiAKLSNkZWZpbmUgTVBBU1MJMwogI2RlZmluZSBNQVhfTUVBU1VSRU1FTlQJOAotI2RlZmluZSBNQVhfRElGRkVSRU5DRQkxMAorI2RlZmluZSBNQVhfTUFHX0RFTFRBCTExCisjZGVmaW5lIE1BWF9QSFNfREVMVEEJMTAKIAogc3RydWN0IGNvZWZmIHsKLQlpbnQgbWFnX2NvZWZmW0FSOTMwMF9NQVhfQ0hBSU5TXVtNQVhfTUVBU1VSRU1FTlRdW01QQVNTXTsKLQlpbnQgcGhzX2NvZWZmW0FSOTMwMF9NQVhfQ0hBSU5TXVtNQVhfTUVBU1VSRU1FTlRdW01QQVNTXTsKKwlpbnQgbWFnX2NvZWZmW0FSOTMwMF9NQVhfQ0hBSU5TXVtNQVhfTUVBU1VSRU1FTlRdOworCWludCBwaHNfY29lZmZbQVI5MzAwX01BWF9DSEFJTlNdW01BWF9NRUFTVVJFTUVOVF07CiAJaW50IGlxY19jb2VmZlsyXTsKIH07CiAKQEAgLTE4NSwxNyArMTg1LDE5IEBACiAKIAkvKiBBY2N1bXVsYXRlIElRIGNhbCBtZWFzdXJlcyBmb3IgYWN0aXZlIGNoYWlucyAqLwogCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7Ci0JCWFoLT50b3RhbFBvd2VyTWVhc0lbaV0gKz0KLQkJCVJFR19SRUFEKGFoLCBBUl9QSFlfQ0FMX01FQVNfMChpKSk7Ci0JCWFoLT50b3RhbFBvd2VyTWVhc1FbaV0gKz0KLQkJCVJFR19SRUFEKGFoLCBBUl9QSFlfQ0FMX01FQVNfMShpKSk7Ci0JCWFoLT50b3RhbElxQ29yck1lYXNbaV0gKz0KLQkJCShpbnQzMl90KSBSRUdfUkVBRChhaCwgQVJfUEhZX0NBTF9NRUFTXzIoaSkpOwotCQlhdGhfZGJnKGF0aDlrX2h3X2NvbW1vbihhaCksIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJIiVkOiBDaG4gJWQgcG1pPTB4JTA4eDtwbXE9MHglMDh4O2lxY209MHglMDh4O1xuIiwKLQkJCWFoLT5jYWxfc2FtcGxlcywgaSwgYWgtPnRvdGFsUG93ZXJNZWFzSVtpXSwKLQkJCWFoLT50b3RhbFBvd2VyTWVhc1FbaV0sCi0JCQlhaC0+dG90YWxJcUNvcnJNZWFzW2ldKTsKKwkJaWYgKGFoLT50eGNoYWlubWFzayAmIEJJVChpKSkgeworCQkJYWgtPnRvdGFsUG93ZXJNZWFzSVtpXSArPQorCQkJCVJFR19SRUFEKGFoLCBBUl9QSFlfQ0FMX01FQVNfMChpKSk7CisJCQlhaC0+dG90YWxQb3dlck1lYXNRW2ldICs9CisJCQkJUkVHX1JFQUQoYWgsIEFSX1BIWV9DQUxfTUVBU18xKGkpKTsKKwkJCWFoLT50b3RhbElxQ29yck1lYXNbaV0gKz0KKwkJCQkoaW50MzJfdCkgUkVHX1JFQUQoYWgsIEFSX1BIWV9DQUxfTUVBU18yKGkpKTsKKwkJCWF0aF9kYmcoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkJIiVkOiBDaG4gJWQgcG1pPTB4JTA4eDtwbXE9MHglMDh4O2lxY209MHglMDh4O1xuIiwKKwkJCQlhaC0+Y2FsX3NhbXBsZXMsIGksIGFoLT50b3RhbFBvd2VyTWVhc0lbaV0sCisJCQkJYWgtPnRvdGFsUG93ZXJNZWFzUVtpXSwKKwkJCQlhaC0+dG90YWxJcUNvcnJNZWFzW2ldKTsKKwkJfQogCX0KIH0KIApAQCAtNjA4LDM2ICs2MTAsNDggQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgYXI5MDAzX2h3X2NvbXB1dGVfY2xvc2VzdF9wYXNzX2FuZF9hdmcoaW50ICptcF9jb2VmZiwgaW50ICptcF9hdmcpCitzdGF0aWMgdm9pZCBhcjkwMDNfaHdfZGV0ZWN0X291dGxpZXIoaW50ICptcF9jb2VmZiwgaW50IG5tZWFzdXJlbWVudCwKKwkJCQkgICAgIGludCBtYXhfZGVsdGEpCiB7Ci0JaW50IGRpZmZbTVBBU1NdOworCWludCBtcF9tYXggPSAtNjQsIG1heF9pZHggPSAwOworCWludCBtcF9taW4gPSA2MywgbWluX2lkeCA9IDA7CisJaW50IG1wX2F2ZyA9IDAsIGksIG91dGxpZXJfaWR4ID0gMDsKIAotCWRpZmZbMF0gPSBhYnMobXBfY29lZmZbMF0gLSBtcF9jb2VmZlsxXSk7Ci0JZGlmZlsxXSA9IGFicyhtcF9jb2VmZlsxXSAtIG1wX2NvZWZmWzJdKTsKLQlkaWZmWzJdID0gYWJzKG1wX2NvZWZmWzJdIC0gbXBfY29lZmZbMF0pOworCS8qIGZpbmQgbWluL21heCBtaXNtYXRjaCBhY3Jvc3MgYWxsIGNhbGlicmF0ZWQgZ2FpbnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbm1lYXN1cmVtZW50OyBpKyspIHsKKwkJbXBfYXZnICs9IG1wX2NvZWZmW2ldOworCQlpZiAobXBfY29lZmZbaV0gPiBtcF9tYXgpIHsKKwkJCW1wX21heCA9IG1wX2NvZWZmW2ldOworCQkJbWF4X2lkeCA9IGk7CisJCX0gZWxzZSBpZiAobXBfY29lZmZbaV0gPCBtcF9taW4pIHsKKwkJCW1wX21pbiA9IG1wX2NvZWZmW2ldOworCQkJbWluX2lkeCA9IGk7CisJCX0KKwl9CiAKLQlpZiAoZGlmZlswXSA+IE1BWF9ESUZGRVJFTkNFICYmCi0JICAgIGRpZmZbMV0gPiBNQVhfRElGRkVSRU5DRSAmJgotCSAgICBkaWZmWzJdID4gTUFYX0RJRkZFUkVOQ0UpCi0JCXJldHVybiBmYWxzZTsKKwkvKiBmaW5kIGF2ZXJhZ2UgKGV4Y2x1ZGUgbWF4IGFicyB2YWx1ZSkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbm1lYXN1cmVtZW50OyBpKyspIHsKKwkJaWYgKChhYnMobXBfY29lZmZbaV0pIDwgYWJzKG1wX21heCkpIHx8CisJCSAgICAoYWJzKG1wX2NvZWZmW2ldKSA8IGFicyhtcF9taW4pKSkKKwkJCW1wX2F2ZyArPSBtcF9jb2VmZltpXTsKKwl9CisJbXBfYXZnIC89IChubWVhc3VyZW1lbnQgLSAxKTsKIAotCWlmIChkaWZmWzBdIDw9IGRpZmZbMV0gJiYgZGlmZlswXSA8PSBkaWZmWzJdKQotCQkqbXBfYXZnID0gKG1wX2NvZWZmWzBdICsgbXBfY29lZmZbMV0pIC8gMjsKLQllbHNlIGlmIChkaWZmWzFdIDw9IGRpZmZbMl0pCi0JCSptcF9hdmcgPSAobXBfY29lZmZbMV0gKyBtcF9jb2VmZlsyXSkgLyAyOwotCWVsc2UKLQkJKm1wX2F2ZyA9IChtcF9jb2VmZlsyXSArIG1wX2NvZWZmWzBdKSAvIDI7Ci0KLQlyZXR1cm4gdHJ1ZTsKKwkvKiBkZXRlY3Qgb3V0bGllciAqLworCWlmIChhYnMobXBfbWF4IC0gbXBfbWluKSA+IG1heF9kZWx0YSkgeworCQlpZiAoYWJzKG1wX21heCAtIG1wX2F2ZykgPiBhYnMobXBfbWluIC0gbXBfYXZnKSkKKwkJCW91dGxpZXJfaWR4ID0gbWF4X2lkeDsKKwkJZWxzZQorCQkJb3V0bGllcl9pZHggPSBtaW5faWR4OworCX0KKwltcF9jb2VmZltvdXRsaWVyX2lkeF0gPSBtcF9hdmc7CiB9CiAKIHN0YXRpYyB2b2lkIGFyOTAwM19od190eF9pcWNhbF9sb2FkX2F2Z18yX3Bhc3NlcyhzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkJCSB1OCBudW1fY2hhaW5zLAogCQkJCQkJIHN0cnVjdCBjb2VmZiAqY29lZmYpCiB7Ci0Jc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CiAJaW50IGksIGltLCBubWVhc3VyZW1lbnQ7Ci0JaW50IG1hZ25pdHVkZSwgcGhhc2U7CiAJdTMyIHR4X2NvcnJfY29lZmZbTUFYX01FQVNVUkVNRU5UXVtBUjkzMDBfTUFYX0NIQUlOU107CiAKIAltZW1zZXQodHhfY29ycl9jb2VmZiwgMCwgc2l6ZW9mKHR4X2NvcnJfY29lZmYpKTsKQEAgLTY1NywzNyArNjcxLDI4IEBACiAKIAkvKiBMb2FkIHRoZSBhdmVyYWdlIG9mIDIgcGFzc2VzICovCiAJZm9yIChpID0gMDsgaSA8IG51bV9jaGFpbnM7IGkrKykgewotCQlpZiAoQVJfU1JFVl85NDg1KGFoKSkKLQkJCW5tZWFzdXJlbWVudCA9IFJFR19SRUFEX0ZJRUxEKGFoLAotCQkJCQlBUl9QSFlfVFhfSVFDQUxfU1RBVFVTX0IwXzk0ODUsCi0JCQkJCUFSX1BIWV9DQUxJQlJBVEVEX0dBSU5TXzApOwotCQllbHNlCi0JCQlubWVhc3VyZW1lbnQgPSBSRUdfUkVBRF9GSUVMRChhaCwKLQkJCQkJQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19CMCwKLQkJCQkJQVJfUEhZX0NBTElCUkFURURfR0FJTlNfMCk7CisJCW5tZWFzdXJlbWVudCA9IFJFR19SRUFEX0ZJRUxEKGFoLAorCQkJCUFSX1BIWV9UWF9JUUNBTF9TVEFUVVNfQjAsCisJCQkJQVJfUEhZX0NBTElCUkFURURfR0FJTlNfMCk7CiAKIAkJaWYgKG5tZWFzdXJlbWVudCA+IE1BWF9NRUFTVVJFTUVOVCkKIAkJCW5tZWFzdXJlbWVudCA9IE1BWF9NRUFTVVJFTUVOVDsKIAorCQkvKiBkZXRlY3Qgb3V0bGllciBvbmx5IGlmIG5tZWFzdXJlbWVudCA+IDEgKi8KKwkJaWYgKG5tZWFzdXJlbWVudCA+IDEpIHsKKwkJCS8qIERldGVjdCBtYWduaXR1ZGUgb3V0bGllciAqLworCQkJYXI5MDAzX2h3X2RldGVjdF9vdXRsaWVyKGNvZWZmLT5tYWdfY29lZmZbaV0sCisJCQkJCW5tZWFzdXJlbWVudCwgTUFYX01BR19ERUxUQSk7CisKKwkJCS8qIERldGVjdCBwaGFzZSBvdXRsaWVyICovCisJCQlhcjkwMDNfaHdfZGV0ZWN0X291dGxpZXIoY29lZmYtPnBoc19jb2VmZltpXSwKKwkJCQkJbm1lYXN1cmVtZW50LCBNQVhfUEhTX0RFTFRBKTsKKwkJfQorCiAJCWZvciAoaW0gPSAwOyBpbSA8IG5tZWFzdXJlbWVudDsgaW0rKykgewotCQkJLyoKLQkJCSAqIERldGVybWluZSB3aGljaCAyIHBhc3NlcyBhcmUgY2xvc2VzdCBhbmQgY29tcHV0ZSBhdmcKLQkJCSAqIG1hZ25pdHVkZQotCQkJICovCi0JCQlpZiAoIWFyOTAwM19od19jb21wdXRlX2Nsb3Nlc3RfcGFzc19hbmRfYXZnKGNvZWZmLT5tYWdfY29lZmZbaV1baW1dLAotCQkJCQkJCQkgICAgJm1hZ25pdHVkZSkpCi0JCQkJZ290byBkaXNhYmxlX3R4aXFjYWw7CiAKLQkJCS8qCi0JCQkgKiBEZXRlcm1pbmUgd2hpY2ggMiBwYXNzZXMgYXJlIGNsb3Nlc3QgYW5kIGNvbXB1dGUgYXZnCi0JCQkgKiBwaGFzZQotCQkJICovCi0JCQlpZiAoIWFyOTAwM19od19jb21wdXRlX2Nsb3Nlc3RfcGFzc19hbmRfYXZnKGNvZWZmLT5waHNfY29lZmZbaV1baW1dLAotCQkJCQkJCQkgICAgJnBoYXNlKSkKLQkJCQlnb3RvIGRpc2FibGVfdHhpcWNhbDsKLQotCQkJY29lZmYtPmlxY19jb2VmZlswXSA9IChtYWduaXR1ZGUgJiAweDdmKSB8Ci0JCQkJCSAgICAgICgocGhhc2UgJiAweDdmKSA8PCA3KTsKKwkJCWNvZWZmLT5pcWNfY29lZmZbMF0gPSAoY29lZmYtPm1hZ19jb2VmZltpXVtpbV0gJiAweDdmKSB8CisJCQkJKChjb2VmZi0+cGhzX2NvZWZmW2ldW2ltXSAmIDB4N2YpIDw8IDcpOwogCiAJCQlpZiAoKGltICUgMikgPT0gMCkKIAkJCQlSRUdfUk1XX0ZJRUxEKGFoLCB0eF9jb3JyX2NvZWZmW2ltXVtpXSwKQEAgLTcwNywxNDEgKzcxMiwzNyBAQAogCiAJcmV0dXJuOwogCi1kaXNhYmxlX3R4aXFjYWw6Ci0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX0lRQ0FMX0NPTlRST0xfMywKLQkJICAgICAgQVJfUEhZX1RYX0lRQ0FMX0NPTlRST0xfM19JUUNPUlJfRU4sIDB4MCk7Ci0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JYX0lRQ0FMX0NPUlJfQjAsCi0JCSAgICAgIEFSX1BIWV9SWF9JUUNBTF9DT1JSX0IwX0xPT1BCQUNLX0lRQ09SUl9FTiwgMHgwKTsKLQotCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwgIlRYIElRIENhbCBkaXNhYmxlZFxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIGFyOTAwM19od190eF9pcV9jYWwoc3RydWN0IGF0aF9odyAqYWgpCitzdGF0aWMgYm9vbCBhcjkwMDNfaHdfdHhfaXFfY2FsX3J1bihzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKLQlzdGF0aWMgY29uc3QgdTMyIHR4aXFjYWxfc3RhdHVzW0FSOTMwMF9NQVhfQ0hBSU5TXSA9IHsKLQkJQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19CMCwKLQkJQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19CMSwKLQkJQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19CMiwKLQl9OwotCXN0YXRpYyBjb25zdCB1MzIgY2hhbl9pbmZvX3RhYltdID0gewotCQlBUl9QSFlfQ0hBTl9JTkZPX1RBQl8wLAotCQlBUl9QSFlfQ0hBTl9JTkZPX1RBQl8xLAotCQlBUl9QSFlfQ0hBTl9JTkZPX1RBQl8yLAotCX07Ci0Jc3RydWN0IGNvZWZmIGNvZWZmOwotCXMzMiBpcV9yZXNbNl07Ci0JczMyIGksIGosIGlwLCBpbSwgbm1lYXN1cmVtZW50OwotCXU4IG5jaGFpbnMgPSBnZXRfc3RyZWFtcyhjb21tb24tPnR4X2NoYWlubWFzayk7Ci0KLQlmb3IgKGlwID0gMDsgaXAgPCBNUEFTUzsgaXArKykgewotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFhfSVFDQUxfQ09OVFJPTF8xLAotCQkJICAgICAgQVJfUEhZX1RYX0lRQ0FRTF9DT05UUk9MXzFfSVFDT1JSX0lfUV9DT0ZGX0RFTFBULAotCQkJICAgICAgREVMUFQpOwotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFhfSVFDQUxfU1RBUlQsCi0JCQkgICAgICBBUl9QSFlfVFhfSVFDQUxfU1RBUlRfRE9fQ0FMLAotCQkJICAgICAgQVJfUEhZX1RYX0lRQ0FMX1NUQVJUX0RPX0NBTCk7Ci0KLQkJaWYgKCFhdGg5a19od193YWl0KGFoLCBBUl9QSFlfVFhfSVFDQUxfU1RBUlQsCi0JCQkJICAgQVJfUEhZX1RYX0lRQ0FMX1NUQVJUX0RPX0NBTCwKLQkJCQkgICAwLCBBSF9XQUlUX1RJTUVPVVQpKSB7Ci0JCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkJIlR4IElRIENhbCBub3QgY29tcGxldGUuXG4iKTsKLQkJCWdvdG8gVFhfSVFfQ0FMX0ZBSUxFRDsKLQkJfQotCi0JCW5tZWFzdXJlbWVudCA9IFJFR19SRUFEX0ZJRUxEKGFoLCBBUl9QSFlfVFhfSVFDQUxfU1RBVFVTX0IwLAotCQkJCQkgICAgICBBUl9QSFlfQ0FMSUJSQVRFRF9HQUlOU18wKTsKLQkJCWlmIChubWVhc3VyZW1lbnQgPiBNQVhfTUVBU1VSRU1FTlQpCi0JCQkJbm1lYXN1cmVtZW50ID0gTUFYX01FQVNVUkVNRU5UOwotCi0JCWZvciAoaSA9IDA7IGkgPCBuY2hhaW5zOyBpKyspIHsKLQkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCQkiRG9pbmcgVHggSVEgQ2FsIGZvciBjaGFpbiAlZC5cbiIsIGkpOwotCQkJZm9yIChpbSA9IDA7IGltIDwgbm1lYXN1cmVtZW50OyBpbSsrKSB7Ci0JCQkJaWYgKFJFR19SRUFEKGFoLCB0eGlxY2FsX3N0YXR1c1tpXSkgJgotCQkJCQkgICAgIEFSX1BIWV9UWF9JUUNBTF9TVEFUVVNfRkFJTEVEKSB7Ci0JCQkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCQkJCSJUeCBJUSBDYWwgZmFpbGVkIGZvciBjaGFpbiAlZC5cbiIsIGkpOwotCQkJCQlnb3RvIFRYX0lRX0NBTF9GQUlMRUQ7Ci0JCQkJfQotCi0JCQkJZm9yIChqID0gMDsgaiA8IDM7IGorKykgewotCQkJCQl1OCBpZHggPSAyICogaiwKLQkJCQkJICAgb2Zmc2V0ID0gNCAqICgzICogaW0gKyBqKTsKLQotCQkJCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfQ0hBTl9JTkZPX01FTU9SWSwKLQkJCQkJCSAgICAgIEFSX1BIWV9DSEFOX0lORk9fVEFCX1MyX1JFQUQsCi0JCQkJCQkgICAgICAwKTsKLQotCQkJCQkvKiAzMiBiaXRzICovCi0JCQkJCWlxX3Jlc1tpZHhdID0gUkVHX1JFQUQoYWgsCi0JCQkJCQkJY2hhbl9pbmZvX3RhYltpXSArCi0JCQkJCQkJb2Zmc2V0KTsKLQotCQkJCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfQ0hBTl9JTkZPX01FTU9SWSwKLQkJCQkJCSAgICAgIEFSX1BIWV9DSEFOX0lORk9fVEFCX1MyX1JFQUQsCi0JCQkJCQkgICAgICAxKTsKLQotCQkJCQkvKiAxNiBiaXRzICovCi0JCQkJCWlxX3Jlc1tpZHgrMV0gPSAweGZmZmYgJiBSRUdfUkVBRChhaCwKLQkJCQkJCQkJY2hhbl9pbmZvX3RhYltpXSArCi0JCQkJCQkJCW9mZnNldCk7Ci0KLQkJCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJCQkJIklRIFJFU1slZF09MHgleCBJUV9SRVNbJWRdPTB4JXhcbiIsCi0JCQkJCQlpZHgsIGlxX3Jlc1tpZHhdLCBpZHgrMSwgaXFfcmVzW2lkeCsxXSk7Ci0JCQkJfQotCi0JCQkJaWYgKCFhcjkwMDNfaHdfY2FsY19pcV9jb3JyKGFoLCBpLCBpcV9yZXMsCi0JCQkJCQkJICAgIGNvZWZmLmlxY19jb2VmZikpIHsKLQkJCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJCQkJIkZhaWxlZCBpbiBjYWxjdWxhdGlvbiBvZiBJUSBjb3JyZWN0aW9uLlxuIik7Ci0JCQkJCWdvdG8gVFhfSVFfQ0FMX0ZBSUxFRDsKLQkJCQl9Ci0JCQkJY29lZmYubWFnX2NvZWZmW2ldW2ltXVtpcF0gPQotCQkJCQkJY29lZmYuaXFjX2NvZWZmWzBdICYgMHg3ZjsKLQkJCQljb2VmZi5waHNfY29lZmZbaV1baW1dW2lwXSA9Ci0JCQkJCQkoY29lZmYuaXFjX2NvZWZmWzBdID4+IDcpICYgMHg3ZjsKLQotCQkJCWlmIChjb2VmZi5tYWdfY29lZmZbaV1baW1dW2lwXSA+IDYzKQotCQkJCQljb2VmZi5tYWdfY29lZmZbaV1baW1dW2lwXSAtPSAxMjg7Ci0JCQkJaWYgKGNvZWZmLnBoc19jb2VmZltpXVtpbV1baXBdID4gNjMpCi0JCQkJCWNvZWZmLnBoc19jb2VmZltpXVtpbV1baXBdIC09IDEyODsKLQotCQkJfQotCQl9Ci0JfQotCi0JYXI5MDAzX2h3X3R4X2lxY2FsX2xvYWRfYXZnXzJfcGFzc2VzKGFoLCBuY2hhaW5zLCAmY29lZmYpOwotCi0JcmV0dXJuOwotCi1UWF9JUV9DQUxfRkFJTEVEOgotCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwgIlR4IElRIENhbCBmYWlsZWRcbiIpOwotfQotCi1zdGF0aWMgdm9pZCBhcjkwMDNfaHdfdHhfaXFfY2FsX3J1bihzdHJ1Y3QgYXRoX2h3ICphaCkKLXsKIAl1OCB0eF9nYWluX2ZvcmNlZDsKIAotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9JUUNBTF9DT05UUk9MXzFfOTQ4NSwKLQkJICAgICAgQVJfUEhZX1RYX0lRQ0FRTF9DT05UUk9MXzFfSVFDT1JSX0lfUV9DT0ZGX0RFTFBULCBERUxQVCk7CiAJdHhfZ2Fpbl9mb3JjZWQgPSBSRUdfUkVBRF9GSUVMRChhaCwgQVJfUEhZX1RYX0ZPUkNFRF9HQUlOLAogCQkJCQlBUl9QSFlfVFhHQUlOX0ZPUkNFKTsKIAlpZiAodHhfZ2Fpbl9mb3JjZWQpCiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9GT1JDRURfR0FJTiwKIAkJCSAgICAgIEFSX1BIWV9UWEdBSU5fRk9SQ0UsIDApOwogCi0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX0lRQ0FMX1NUQVJUXzk0ODUsCi0JCSAgICAgIEFSX1BIWV9UWF9JUUNBTF9TVEFSVF9ET19DQUxfOTQ4NSwgMSk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX0lRQ0FMX1NUQVJULAorCQkgICAgICBBUl9QSFlfVFhfSVFDQUxfU1RBUlRfRE9fQ0FMLCAxKTsKKworCWlmICghYXRoOWtfaHdfd2FpdChhaCwgQVJfUEhZX1RYX0lRQ0FMX1NUQVJULAorCQkJQVJfUEhZX1RYX0lRQ0FMX1NUQVJUX0RPX0NBTCwgMCwKKwkJCUFIX1dBSVRfVElNRU9VVCkpIHsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJIlR4IElRIENhbCBpcyBub3QgY29tcGxldGVkLlxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyB2b2lkIGFyOTAwM19od190eF9pcV9jYWxfcG9zdF9wcm9jKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCWNvbnN0IHUzMiB0eGlxY2FsX3N0YXR1c1tBUjkzMDBfTUFYX0NIQUlOU10gPSB7Ci0JCUFSX1BIWV9UWF9JUUNBTF9TVEFUVVNfQjBfOTQ4NSwKKwkJQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19CMCwKIAkJQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19CMSwKIAkJQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19CMiwKIAl9OwpAQCAtODUzLDcgKzc1NCw3IEBACiAJc3RydWN0IGNvZWZmIGNvZWZmOwogCXMzMiBpcV9yZXNbNl07CiAJdTggbnVtX2NoYWlucyA9IDA7Ci0JaW50IGksIGlwLCBpbSwgajsKKwlpbnQgaSwgaW0sIGo7CiAJaW50IG5tZWFzdXJlbWVudDsKIAogCWZvciAoaSA9IDA7IGkgPCBBUjkzMDBfTUFYX0NIQUlOUzsgaSsrKSB7CkBAIC04NjEsNzEgKzc2Miw2OSBAQAogCQkJbnVtX2NoYWlucysrOwogCX0KIAotCWZvciAoaXAgPSAwOyBpcCA8IE1QQVNTOyBpcCsrKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBudW1fY2hhaW5zOyBpKyspIHsKLQkJCW5tZWFzdXJlbWVudCA9IFJFR19SRUFEX0ZJRUxEKGFoLAotCQkJCQlBUl9QSFlfVFhfSVFDQUxfU1RBVFVTX0IwXzk0ODUsCi0JCQkJCUFSX1BIWV9DQUxJQlJBVEVEX0dBSU5TXzApOwotCQkJaWYgKG5tZWFzdXJlbWVudCA+IE1BWF9NRUFTVVJFTUVOVCkKLQkJCQlubWVhc3VyZW1lbnQgPSBNQVhfTUVBU1VSRU1FTlQ7CisJZm9yIChpID0gMDsgaSA8IG51bV9jaGFpbnM7IGkrKykgeworCQlubWVhc3VyZW1lbnQgPSBSRUdfUkVBRF9GSUVMRChhaCwKKwkJCQlBUl9QSFlfVFhfSVFDQUxfU1RBVFVTX0IwLAorCQkJCUFSX1BIWV9DQUxJQlJBVEVEX0dBSU5TXzApOworCQlpZiAobm1lYXN1cmVtZW50ID4gTUFYX01FQVNVUkVNRU5UKQorCQkJbm1lYXN1cmVtZW50ID0gTUFYX01FQVNVUkVNRU5UOwogCi0JCQlmb3IgKGltID0gMDsgaW0gPCBubWVhc3VyZW1lbnQ7IGltKyspIHsKKwkJZm9yIChpbSA9IDA7IGltIDwgbm1lYXN1cmVtZW50OyBpbSsrKSB7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkJIkRvaW5nIFR4IElRIENhbCBmb3IgY2hhaW4gJWQuXG4iLCBpKTsKKworCQkJaWYgKFJFR19SRUFEKGFoLCB0eGlxY2FsX3N0YXR1c1tpXSkgJgorCQkJCQlBUl9QSFlfVFhfSVFDQUxfU1RBVFVTX0ZBSUxFRCkgewogCQkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCQkJIkRvaW5nIFR4IElRIENhbCBmb3IgY2hhaW4gJWQuXG4iLCBpKTsKLQotCQkJCWlmIChSRUdfUkVBRChhaCwgdHhpcWNhbF9zdGF0dXNbaV0pICYKLQkJCQkgICAgQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19GQUlMRUQpIHsKLQkJCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAogCQkJCQkiVHggSVEgQ2FsIGZhaWxlZCBmb3IgY2hhaW4gJWQuXG4iLCBpKTsKLQkJCQkJZ290byB0eF9pcWNhbF9mYWlsOwotCQkJCX0KKwkJCQlnb3RvIHR4X2lxY2FsX2ZhaWw7CisJCQl9CiAKLQkJCQlmb3IgKGogPSAwOyBqIDwgMzsgaisrKSB7Ci0JCQkJCXUzMiBpZHggPSAyICogaiwgb2Zmc2V0ID0gNCAqICgzICogaW0gKyBqKTsKKwkJCWZvciAoaiA9IDA7IGogPCAzOyBqKyspIHsKKwkJCQl1MzIgaWR4ID0gMiAqIGosIG9mZnNldCA9IDQgKiAoMyAqIGltICsgaik7CiAKLQkJCQkJUkVHX1JNV19GSUVMRChhaCwKKwkJCQlSRUdfUk1XX0ZJRUxEKGFoLAogCQkJCQkJQVJfUEhZX0NIQU5fSU5GT19NRU1PUlksCiAJCQkJCQlBUl9QSFlfQ0hBTl9JTkZPX1RBQl9TMl9SRUFELAogCQkJCQkJMCk7CiAKLQkJCQkJLyogMzIgYml0cyAqLwotCQkJCQlpcV9yZXNbaWR4XSA9IFJFR19SRUFEKGFoLAotCQkJCQkJCWNoYW5faW5mb190YWJbaV0gKwotCQkJCQkJCW9mZnNldCk7CisJCQkJLyogMzIgYml0cyAqLworCQkJCWlxX3Jlc1tpZHhdID0gUkVHX1JFQUQoYWgsCisJCQkJCQljaGFuX2luZm9fdGFiW2ldICsKKwkJCQkJCW9mZnNldCk7CiAKLQkJCQkJUkVHX1JNV19GSUVMRChhaCwKKwkJCQlSRUdfUk1XX0ZJRUxEKGFoLAogCQkJCQkJQVJfUEhZX0NIQU5fSU5GT19NRU1PUlksCiAJCQkJCQlBUl9QSFlfQ0hBTl9JTkZPX1RBQl9TMl9SRUFELAogCQkJCQkJMSk7CiAKLQkJCQkJLyogMTYgYml0cyAqLwotCQkJCQlpcV9yZXNbaWR4ICsgMV0gPSAweGZmZmYgJiBSRUdfUkVBRChhaCwKLQkJCQkJCQkgIGNoYW5faW5mb190YWJbaV0gKyBvZmZzZXQpOworCQkJCS8qIDE2IGJpdHMgKi8KKwkJCQlpcV9yZXNbaWR4ICsgMV0gPSAweGZmZmYgJiBSRUdfUkVBRChhaCwKKwkJCQkJCWNoYW5faW5mb190YWJbaV0gKyBvZmZzZXQpOwogCi0JCQkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCQkJCSJJUSBSRVNbJWRdPTB4JXgiCi0JCQkJCQkiSVFfUkVTWyVkXT0weCV4XG4iLAotCQkJCQkJaWR4LCBpcV9yZXNbaWR4XSwgaWR4ICsgMSwKLQkJCQkJCWlxX3Jlc1tpZHggKyAxXSk7Ci0JCQkJfQotCi0JCQkJaWYgKCFhcjkwMDNfaHdfY2FsY19pcV9jb3JyKGFoLCBpLCBpcV9yZXMsCi0JCQkJCQkJICAgIGNvZWZmLmlxY19jb2VmZikpIHsKLQkJCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJCQkgIkZhaWxlZCBpbiBjYWxjdWxhdGlvbiBvZiBJUSBjb3JyZWN0aW9uLlxuIik7Ci0JCQkJCWdvdG8gdHhfaXFjYWxfZmFpbDsKLQkJCQl9Ci0KLQkJCQljb2VmZi5tYWdfY29lZmZbaV1baW1dW2lwXSA9Ci0JCQkJCQljb2VmZi5pcWNfY29lZmZbMF0gJiAweDdmOwotCQkJCWNvZWZmLnBoc19jb2VmZltpXVtpbV1baXBdID0KLQkJCQkJCShjb2VmZi5pcWNfY29lZmZbMF0gPj4gNykgJiAweDdmOwotCi0JCQkJaWYgKGNvZWZmLm1hZ19jb2VmZltpXVtpbV1baXBdID4gNjMpCi0JCQkJCWNvZWZmLm1hZ19jb2VmZltpXVtpbV1baXBdIC09IDEyODsKLQkJCQlpZiAoY29lZmYucGhzX2NvZWZmW2ldW2ltXVtpcF0gPiA2MykKLQkJCQkJY29lZmYucGhzX2NvZWZmW2ldW2ltXVtpcF0gLT0gMTI4OworCQkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCQkJIklRIFJFU1slZF09MHgleCIKKwkJCQkJIklRX1JFU1slZF09MHgleFxuIiwKKwkJCQkJaWR4LCBpcV9yZXNbaWR4XSwgaWR4ICsgMSwKKwkJCQkJaXFfcmVzW2lkeCArIDFdKTsKIAkJCX0KKworCQkJaWYgKCFhcjkwMDNfaHdfY2FsY19pcV9jb3JyKGFoLCBpLCBpcV9yZXMsCisJCQkJCQljb2VmZi5pcWNfY29lZmYpKSB7CisJCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJCQkiRmFpbGVkIGluIGNhbGN1bGF0aW9uIG9mIFwKKwkJCQkJSVEgY29ycmVjdGlvbi5cbiIpOworCQkJCWdvdG8gdHhfaXFjYWxfZmFpbDsKKwkJCX0KKworCQkJY29lZmYubWFnX2NvZWZmW2ldW2ltXSA9IGNvZWZmLmlxY19jb2VmZlswXSAmIDB4N2Y7CisJCQljb2VmZi5waHNfY29lZmZbaV1baW1dID0KKwkJCQkoY29lZmYuaXFjX2NvZWZmWzBdID4+IDcpICYgMHg3ZjsKKworCQkJaWYgKGNvZWZmLm1hZ19jb2VmZltpXVtpbV0gPiA2MykKKwkJCQljb2VmZi5tYWdfY29lZmZbaV1baW1dIC09IDEyODsKKwkJCWlmIChjb2VmZi5waHNfY29lZmZbaV1baW1dID4gNjMpCisJCQkJY29lZmYucGhzX2NvZWZmW2ldW2ltXSAtPSAxMjg7CiAJCX0KIAl9CiAJYXI5MDAzX2h3X3R4X2lxY2FsX2xvYWRfYXZnXzJfcGFzc2VzKGFoLCBudW1fY2hhaW5zLCAmY29lZmYpOwpAQCAtOTQwLDMxICs4MzksMzcgQEAKIAkJCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKKwlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOwogCWludCB2YWw7CisJYm9vbCB0eGlxY2FsX2RvbmUgPSBmYWxzZTsKIAogCXZhbCA9IFJFR19SRUFEKGFoLCBBUl9FTlRfT1RQKTsKIAlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DQUxJQlJBVEUsICJhdGg5azogQVJfRU5UX09UUCAweCV4XG4iLCB2YWwpOwogCi0JaWYgKEFSX1NSRVZfOTQ4NShhaCkpCi0JCWFyOTAwM19od19zZXRfY2hhaW5fbWFza3MoYWgsIDB4MSwgMHgxKTsKLQllbHNlIGlmICh2YWwgJiBBUl9FTlRfT1RQX0NIQUlOMl9ESVNBQkxFKQorCS8qIENvbmZpZ3VyZSByeC90eCBjaGFpbnMgYmVmb3JlIHJ1bm5pbmcgQUdDL1R4aVEgY2FscyAqLworCWlmICh2YWwgJiBBUl9FTlRfT1RQX0NIQUlOMl9ESVNBQkxFKQogCQlhcjkwMDNfaHdfc2V0X2NoYWluX21hc2tzKGFoLCAweDMsIDB4Myk7CiAJZWxzZQotCQkvKgotCQkgKiAweDcgPSAwYjExMSAsIEFSOTAwMyBuZWVkcyB0byBiZSBjb25maWd1cmVkIGZvciAzLWNoYWluCi0JCSAqIG1vZGUgYmVmb3JlIHJ1bm5pbmcgQUdDL1R4SVEgY2FscwotCQkgKi8KLQkJYXI5MDAzX2h3X3NldF9jaGFpbl9tYXNrcyhhaCwgMHg3LCAweDcpOworCQlhcjkwMDNfaHdfc2V0X2NoYWluX21hc2tzKGFoLCBwQ2FwLT5yeF9jaGFpbm1hc2ssCisJCQkJCSAgcENhcC0+dHhfY2hhaW5tYXNrKTsKIAogCS8qIERvIFR4IElRIENhbGlicmF0aW9uICovCi0JaWYgKEFSX1NSRVZfOTQ4NShhaCkpCi0JCWFyOTAwM19od190eF9pcV9jYWxfcnVuKGFoKTsKLQllbHNlCi0JCWFyOTAwM19od190eF9pcV9jYWwoYWgpOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9JUUNBTF9DT05UUk9MXzEsCisJCSAgICAgIEFSX1BIWV9UWF9JUUNBTF9DT05UUk9MXzFfSVFDT1JSX0lfUV9DT0ZGX0RFTFBULAorCQkgICAgICBERUxQVCk7CiAKLQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9BQ1RJVkUsIEFSX1BIWV9BQ1RJVkVfRElTKTsKLQl1ZGVsYXkoNSk7Ci0JUkVHX1dSSVRFKGFoLCBBUl9QSFlfQUNUSVZFLCBBUl9QSFlfQUNUSVZFX0VOKTsKKwkvKgorCSAqIEZvciBBUjk0ODUgb3IgbGF0ZXIgY2hpcHMsIFR4SVEgY2FsIHJ1bnMgYXMgcGFydCBvZgorCSAqIEFHQyBjYWxpYnJhdGlvbgorCSAqLworCWlmIChBUl9TUkVWXzk0ODVfT1JfTEFURVIoYWgpKQorCQl0eGlxY2FsX2RvbmUgPSB0cnVlOworCWVsc2UgeworCQl0eGlxY2FsX2RvbmUgPSBhcjkwMDNfaHdfdHhfaXFfY2FsX3J1bihhaCk7CisJCVJFR19XUklURShhaCwgQVJfUEhZX0FDVElWRSwgQVJfUEhZX0FDVElWRV9ESVMpOworCQl1ZGVsYXkoNSk7CisJCVJFR19XUklURShhaCwgQVJfUEhZX0FDVElWRSwgQVJfUEhZX0FDVElWRV9FTik7CisJfQogCiAJLyogQ2FsaWJyYXRlIHRoZSBBR0MgKi8KIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwKQEAgLTk3OSw3ICs4ODQsNyBAQAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JaWYgKEFSX1NSRVZfOTQ4NShhaCkpCisJaWYgKHR4aXFjYWxfZG9uZSkKIAkJYXI5MDAzX2h3X3R4X2lxX2NhbF9wb3N0X3Byb2MoYWgpOwogCiAJLyogUmV2ZXJ0IGNoYWlubWFza3MgdG8gdGhlaXIgb3JpZ2luYWwgdmFsdWVzIGJlZm9yZSBORiBjYWwgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfZWVwcm9tLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2VlcHJvbS5jCmluZGV4IDZlYWRmOTcuLjFlMjIwMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19lZXByb20uYwpAQCAtNjUyLDcgKzY1Miw3IEBACiAJCS5yZWdEbW4gPSB7IExFMTYoMCksIExFMTYoMHgxZikgfSwKIAkJLnR4cnhNYXNrID0gIDB4NzcsIC8qIDQgYml0cyB0eCBhbmQgNCBiaXRzIHJ4ICovCiAJCS5vcENhcEZsYWdzID0gewotCQkJLm9wRmxhZ3MgPSBBUjU0MTZfT1BGTEFHU18xMUcgfCBBUjU0MTZfT1BGTEFHU18xMUEsCisJCQkub3BGbGFncyA9IEFSNTQxNl9PUEZMQUdTXzExQSwKIAkJCS5lZXBNaXNjID0gMCwKIAkJfSwKIAkJLnJmU2lsZW50ID0gMCwKQEAgLTkyMiw3ICs5MjIsNyBAQAogCQkuZGJfc3RhZ2UyID0gezMsIDMsIDN9LCAvKiAzIGNoYWluICovCiAJCS5kYl9zdGFnZTMgPSB7MywgMywgM30sIC8qIGRvZXNuJ3QgZXhpc3QgZm9yIDJHICovCiAJCS5kYl9zdGFnZTQgPSB7MywgMywgM30sCSAvKiBkb24ndCBleGlzdCBmb3IgMkcgKi8KLQkJLnhwYUJpYXNMdmwgPSAwLAorCQkueHBhQmlhc0x2bCA9IDB4ZiwKIAkJLnR4RnJhbWVUb0RhdGFTdGFydCA9IDB4MGUsCiAJCS50eEZyYW1lVG9QYU9uID0gMHgwZSwKIAkJLnR4Q2xpcCA9IDMsIC8qIDQgYml0cyB0eF9jbGlwLCA0IGJpdHMgZGFjX3NjYWxlX2NjayAqLwpAQCAtMzIxNyw3ICszMjE3LDYgQEAKIAkJCQkgICAgdTggKndvcmQsIGludCBsZW5ndGgsIGludCBtZGF0YV9zaXplKQogewogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwotCXU4ICpkcHRyOwogCWNvbnN0IHN0cnVjdCBhcjkzMDBfZWVwcm9tICplZXAgPSBOVUxMOwogCiAJc3dpdGNoIChjb2RlKSB7CkBAIC0zMjM1LDcgKzMyMzQsNiBAQAogCQlicmVhazsKIAljYXNlIF9Db21wcmVzc0Jsb2NrOgogCQlpZiAocmVmZXJlbmNlID09IDApIHsKLQkJCWRwdHIgPSBtcHRyOwogCQl9IGVsc2UgewogCQkJZWVwID0gYXI5MDAzX2VlcHJvbV9zdHJ1Y3RfZmluZF9ieV9pZChyZWZlcmVuY2UpOwogCQkJaWYgKGVlcCA9PSBOVUxMKSB7CkBAIC0zNDQ0LDEzICszNDQyLDE1IEBACiB7CiAJaW50IGJpYXMgPSBhcjkwMDNfaHdfeHBhX2JpYXNfbGV2ZWxfZ2V0KGFoLCBpczJnaHopOwogCi0JaWYgKEFSX1NSRVZfOTQ4NShhaCkpCisJaWYgKEFSX1NSRVZfOTQ4NShhaCkgfHwgQVJfU1JFVl85MzQwKGFoKSkKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfQ0gwX1RPUDIsIEFSX0NIMF9UT1AyX1hQQUJJQVNMVkwsIGJpYXMpOwogCWVsc2UgewogCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9DSDBfVE9QLCBBUl9DSDBfVE9QX1hQQUJJQVNMVkwsIGJpYXMpOwotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9DSDBfVEhFUk0sIEFSX0NIMF9USEVSTV9YUEFCSUFTTFZMX01TQiwKLQkJCSAgICAgIGJpYXMgPj4gMik7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX0NIMF9USEVSTSwgQVJfQ0gwX1RIRVJNX1hQQVNIT1JUMkdORCwgMSk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX0NIMF9USEVSTSwKKwkJCQlBUl9DSDBfVEhFUk1fWFBBQklBU0xWTF9NU0IsCisJCQkJYmlhcyA+PiAyKTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfQ0gwX1RIRVJNLAorCQkJCUFSX0NIMF9USEVSTV9YUEFTSE9SVDJHTkQsIDEpOwogCX0KIH0KIApAQCAtMzQ5NywzNCArMzQ5Nyw3NyBAQAogCiBzdGF0aWMgdm9pZCBhcjkwMDNfaHdfYW50X2N0cmxfYXBwbHkoc3RydWN0IGF0aF9odyAqYWgsIGJvb2wgaXMyZ2h6KQogeworCWludCBjaGFpbjsKKwl1MzIgcmVndmFsOworCXUzMiBhbnRfZGl2X2N0bDE7CisJc3RhdGljIGNvbnN0IHUzMiBzd2l0Y2hfY2hhaW5fcmVnW0FSOTMwMF9NQVhfQ0hBSU5TXSA9IHsKKwkJCUFSX1BIWV9TV0lUQ0hfQ0hBSU5fMCwKKwkJCUFSX1BIWV9TV0lUQ0hfQ0hBSU5fMSwKKwkJCUFSX1BIWV9TV0lUQ0hfQ0hBSU5fMiwKKwl9OworCiAJdTMyIHZhbHVlID0gYXI5MDAzX2h3X2FudF9jdHJsX2NvbW1vbl9nZXQoYWgsIGlzMmdoeik7CisKIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU1dJVENIX0NPTSwgQVJfU1dJVENIX1RBQkxFX0NPTV9BTEwsIHZhbHVlKTsKIAogCXZhbHVlID0gYXI5MDAzX2h3X2FudF9jdHJsX2NvbW1vbl8yX2dldChhaCwgaXMyZ2h6KTsKIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU1dJVENIX0NPTV8yLCBBUl9TV0lUQ0hfVEFCTEVfQ09NMl9BTEwsIHZhbHVlKTsKIAotCXZhbHVlID0gYXI5MDAzX2h3X2FudF9jdHJsX2NoYWluX2dldChhaCwgMCwgaXMyZ2h6KTsKLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU1dJVENIX0NIQUlOXzAsIEFSX1NXSVRDSF9UQUJMRV9BTEwsIHZhbHVlKTsKLQotCWlmICghQVJfU1JFVl85NDg1KGFoKSkgewotCQl2YWx1ZSA9IGFyOTAwM19od19hbnRfY3RybF9jaGFpbl9nZXQoYWgsIDEsIGlzMmdoeik7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TV0lUQ0hfQ0hBSU5fMSwgQVJfU1dJVENIX1RBQkxFX0FMTCwKLQkJCSAgICAgIHZhbHVlKTsKLQotCQl2YWx1ZSA9IGFyOTAwM19od19hbnRfY3RybF9jaGFpbl9nZXQoYWgsIDIsIGlzMmdoeik7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TV0lUQ0hfQ0hBSU5fMiwgQVJfU1dJVENIX1RBQkxFX0FMTCwKLQkJCSAgICAgIHZhbHVlKTsKKwlmb3IgKGNoYWluID0gMDsgY2hhaW4gPCBBUjkzMDBfTUFYX0NIQUlOUzsgY2hhaW4rKykgeworCQlpZiAoKGFoLT5yeGNoYWlubWFzayAmIEJJVChjaGFpbikpIHx8CisJCSAgICAoYWgtPnR4Y2hhaW5tYXNrICYgQklUKGNoYWluKSkpIHsKKwkJCXZhbHVlID0gYXI5MDAzX2h3X2FudF9jdHJsX2NoYWluX2dldChhaCwgY2hhaW4sCisJCQkJCQkJICAgICBpczJnaHopOworCQkJUkVHX1JNV19GSUVMRChhaCwgc3dpdGNoX2NoYWluX3JlZ1tjaGFpbl0sCisJCQkJICAgICAgQVJfU1dJVENIX1RBQkxFX0FMTCwgdmFsdWUpOworCQl9CiAJfQogCiAJaWYgKEFSX1NSRVZfOTQ4NShhaCkpIHsKIAkJdmFsdWUgPSBhdGg5a19od19hcjkzMDBfZ2V0X2VlcHJvbShhaCwgRUVQX0FOVF9ESVZfQ1RMMSk7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9NQ19HQUlOX0NUUkwsIEFSX0FOVF9ESVZfQ1RSTF9BTEwsCi0JCQkgICAgICB2YWx1ZSk7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9NQ19HQUlOX0NUUkwsIEFSX0FOVF9ESVZfRU5BQkxFLAotCQkJICAgICAgdmFsdWUgPj4gNik7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9DQ0tfREVURUNULCBBUl9GQVNUX0RJVl9FTkFCTEUsCi0JCQkgICAgICB2YWx1ZSA+PiA3KTsKKwkJLyoKKwkJICogbWFpbl9sbmFjb25mLCBhbHRfbG5hY29uZiwgbWFpbl90YiwgYWx0X3RiCisJCSAqIGFyZSB0aGUgZmllbGRzIHByZXNlbnQKKwkJICovCisJCXJlZ3ZhbCA9IFJFR19SRUFEKGFoLCBBUl9QSFlfTUNfR0FJTl9DVFJMKTsKKwkJcmVndmFsICY9ICh+QVJfQU5UX0RJVl9DVFJMX0FMTCk7CisJCXJlZ3ZhbCB8PSAodmFsdWUgJiAweDNmKSA8PCBBUl9BTlRfRElWX0NUUkxfQUxMX1M7CisJCS8qIGVuYWJsZV9sbmFkaXYgKi8KKwkJcmVndmFsICY9ICh+QVJfUEhZXzk0ODVfQU5UX0RJVl9MTkFESVYpOworCQlyZWd2YWwgfD0gKCh2YWx1ZSA+PiA2KSAmIDB4MSkgPDwKKwkJCQlBUl9QSFlfOTQ4NV9BTlRfRElWX0xOQURJVl9TOworCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9NQ19HQUlOX0NUUkwsIHJlZ3ZhbCk7CisKKwkJLyplbmFibGUgZmFzdF9kaXYgKi8KKwkJcmVndmFsID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9DQ0tfREVURUNUKTsKKwkJcmVndmFsICY9ICh+QVJfRkFTVF9ESVZfRU5BQkxFKTsKKwkJcmVndmFsIHw9ICgodmFsdWUgPj4gNykgJiAweDEpIDw8CisJCQkJQVJfRkFTVF9ESVZfRU5BQkxFX1M7CisJCVJFR19XUklURShhaCwgQVJfUEhZX0NDS19ERVRFQ1QsIHJlZ3ZhbCk7CisJCWFudF9kaXZfY3RsMSA9CisJCQlhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX0FOVF9ESVZfQ1RMMSk7CisJCS8qIGNoZWNrIHdoZXRoZXIgYW50ZW5uYSBkaXZlcnNpdHkgaXMgZW5hYmxlZCAqLworCQlpZiAoKGFudF9kaXZfY3RsMSA+PiAweDYpID09IDB4MykgeworCQkJcmVndmFsID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9NQ19HQUlOX0NUUkwpOworCQkJLyoKKwkJCSAqIGNsZWFyIGJpdHMgMjUtMzAgbWFpbl9sbmFjb25mLCBhbHRfbG5hY29uZiwKKwkJCSAqIG1haW5fdGIsIGFsdF90YgorCQkJICovCisJCQlyZWd2YWwgJj0gKH4oQVJfUEhZXzk0ODVfQU5UX0RJVl9NQUlOX0xOQUNPTkYgfAorCQkJCQlBUl9QSFlfOTQ4NV9BTlRfRElWX0FMVF9MTkFDT05GIHwKKwkJCQkJQVJfUEhZXzk0ODVfQU5UX0RJVl9BTFRfR0FJTlRCIHwKKwkJCQkJQVJfUEhZXzk0ODVfQU5UX0RJVl9NQUlOX0dBSU5UQikpOworCQkJLyogYnkgZGVmYXVsdCB1c2UgTE5BMSBmb3IgdGhlIG1haW4gYW50ZW5uYSAqLworCQkJcmVndmFsIHw9IChBUl9QSFlfOTQ4NV9BTlRfRElWX0xOQTEgPDwKKwkJCQkJQVJfUEhZXzk0ODVfQU5UX0RJVl9NQUlOX0xOQUNPTkZfUyk7CisJCQlyZWd2YWwgfD0gKEFSX1BIWV85NDg1X0FOVF9ESVZfTE5BMiA8PAorCQkJCQlBUl9QSFlfOTQ4NV9BTlRfRElWX0FMVF9MTkFDT05GX1MpOworCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfTUNfR0FJTl9DVFJMLCByZWd2YWwpOworCQl9CisKKwogCX0KKwogfQogCiBzdGF0aWMgdm9pZCBhcjkwMDNfaHdfZHJpdmVfc3RyZW5ndGhfYXBwbHkoc3RydWN0IGF0aF9odyAqYWgpCkBAIC0zNjM0LDEzICszNjc3LDE2IEBACiAKIAkvKiBUZXN0IHZhbHVlLiBpZiAwIHRoZW4gYXR0ZW51YXRpb24gaXMgdW51c2VkLiBEb24ndCBsb2FkIGFueXRoaW5nLiAqLwogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJdmFsdWUgPSBhcjkwMDNfaHdfYXR0ZW5fY2hhaW5fZ2V0KGFoLCBpLCBjaGFuKTsKLQkJUkVHX1JNV19GSUVMRChhaCwgZXh0X2F0dGVuX3JlZ1tpXSwKLQkJCSAgICAgIEFSX1BIWV9FWFRfQVRURU5fQ1RMX1hBVFRFTjFfREIsIHZhbHVlKTsKKwkJaWYgKGFoLT50eGNoYWlubWFzayAmIEJJVChpKSkgeworCQkJdmFsdWUgPSBhcjkwMDNfaHdfYXR0ZW5fY2hhaW5fZ2V0KGFoLCBpLCBjaGFuKTsKKwkJCVJFR19STVdfRklFTEQoYWgsIGV4dF9hdHRlbl9yZWdbaV0sCisJCQkJICAgICAgQVJfUEhZX0VYVF9BVFRFTl9DVExfWEFUVEVOMV9EQiwgdmFsdWUpOwogCi0JCXZhbHVlID0gYXI5MDAzX2h3X2F0dGVuX2NoYWluX2dldF9tYXJnaW4oYWgsIGksIGNoYW4pOwotCQlSRUdfUk1XX0ZJRUxEKGFoLCBleHRfYXR0ZW5fcmVnW2ldLAotCQkJICAgICAgQVJfUEhZX0VYVF9BVFRFTl9DVExfWEFUVEVOMV9NQVJHSU4sIHZhbHVlKTsKKwkJCXZhbHVlID0gYXI5MDAzX2h3X2F0dGVuX2NoYWluX2dldF9tYXJnaW4oYWgsIGksIGNoYW4pOworCQkJUkVHX1JNV19GSUVMRChhaCwgZXh0X2F0dGVuX3JlZ1tpXSwKKwkJCQkgICAgICBBUl9QSFlfRVhUX0FUVEVOX0NUTF9YQVRURU4xX01BUkdJTiwKKwkJCQkgICAgICB2YWx1ZSk7CisJCX0KIAl9CiB9CiAKQEAgLTM3NDksOCArMzc5NSw5IEBACiAJYXI5MDAzX2h3X2FudF9jdHJsX2FwcGx5KGFoLCBJU19DSEFOXzJHSFooY2hhbikpOwogCWFyOTAwM19od19kcml2ZV9zdHJlbmd0aF9hcHBseShhaCk7CiAJYXI5MDAzX2h3X2F0dGVuX2FwcGx5KGFoLCBjaGFuKTsKLQlhcjkwMDNfaHdfaW50ZXJuYWxfcmVndWxhdG9yX2FwcGx5KGFoKTsKLQlpZiAoQVJfU1JFVl85NDg1KGFoKSkKKwlpZiAoIUFSX1NSRVZfOTM0MChhaCkpCisJCWFyOTAwM19od19pbnRlcm5hbF9yZWd1bGF0b3JfYXBwbHkoYWgpOworCWlmIChBUl9TUkVWXzk0ODUoYWgpIHx8IEFSX1NSRVZfOTM0MChhaCkpCiAJCWFyOTAwM19od19hcHBseV90dW5pbmdfY2FwcyhhaCk7CiB9CiAKQEAgLTM5OTQsNiArNDA0MSwxNiBAQAogCQkgIFBPV19TTShwUHdyQXJyYXlbQUxMX1RBUkdFVF9MRUdBQ1lfMUxfNUxdLCAwKQogCSAgICApOwogCisgICAgICAgIC8qIFdyaXRlIHRoZSBwb3dlciBmb3IgZHVwbGljYXRlZCBmcmFtZXMgLSBIVDQwICovCisKKyAgICAgICAgLyogZHVwNDBfY2NrIChMU0IpLCBkdXA0MF9vZmRtLCBleHQyMF9jY2ssIGV4dDIwX29mZG0gKE1TQikgKi8KKwlSRUdfV1JJVEUoYWgsIDB4YTNlMCwKKwkJICBQT1dfU00ocFB3ckFycmF5W0FMTF9UQVJHRVRfTEVHQUNZXzZfMjRdLCAyNCkgfAorCQkgIFBPV19TTShwUHdyQXJyYXlbQUxMX1RBUkdFVF9MRUdBQ1lfMUxfNUxdLCAxNikgfAorCQkgIFBPV19TTShwUHdyQXJyYXlbQUxMX1RBUkdFVF9MRUdBQ1lfNl8yNF0sICA4KSB8CisJCSAgUE9XX1NNKHBQd3JBcnJheVtBTExfVEFSR0VUX0xFR0FDWV8xTF81TF0sICAwKQorCSAgICApOworCiAJLyogV3JpdGUgdGhlIEhUMjAgcG93ZXIgcGVyIHJhdGUgc2V0ICovCiAKIAkvKiAwLzgvMTYgKExTQiksIDEtMy85LTExLzE3LTE5LCA0LCA1IChNU0IpICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2h3LmMKaW5kZXggN2Y1ZGU2ZS4uYTU1ZWRkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfaHcuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgImFyOTAwM19tYWMuaCIKICNpbmNsdWRlICJhcjkwMDNfMnAyX2luaXR2YWxzLmgiCiAjaW5jbHVkZSAiYXI5NDg1X2luaXR2YWxzLmgiCisjaW5jbHVkZSAiYXI5MzQwX2luaXR2YWxzLmgiCiAKIC8qIEdlbmVyYWwgaGFyZHdhcmUgY29kZSBmb3IgdGhlIEFSOTAwMyBoYWR3YXJlIGZhbWlseSAqLwogCkBAIC0yOCw3ICsyOSw2MyBAQAogICovCiBzdGF0aWMgdm9pZCBhcjkwMDNfaHdfaW5pdF9tb2RlX3JlZ3Moc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0JaWYgKEFSX1NSRVZfOTQ4NV8xMShhaCkpIHsKKwlpZiAoQVJfU1JFVl85MzQwKGFoKSkgeworCQkvKiBtYWMgKi8KKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNYWNbQVRIX0lOSV9QUkVdLCBOVUxMLCAwLCAwKTsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNYWNbQVRIX0lOSV9DT1JFXSwKKwkJCQlhcjkzNDBfMXAwX21hY19jb3JlLAorCQkJCUFSUkFZX1NJWkUoYXI5MzQwXzFwMF9tYWNfY29yZSksIDIpOworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1hY1tBVEhfSU5JX1BPU1RdLAorCQkJCWFyOTM0MF8xcDBfbWFjX3Bvc3RhbWJsZSwKKwkJCQlBUlJBWV9TSVpFKGFyOTM0MF8xcDBfbWFjX3Bvc3RhbWJsZSksIDUpOworCisJCS8qIGJiICovCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQkJbQVRIX0lOSV9QUkVdLCBOVUxMLCAwLCAwKTsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCQltBVEhfSU5JX0NPUkVdLAorCQkJCWFyOTM0MF8xcDBfYmFzZWJhbmRfY29yZSwKKwkJCQlBUlJBWV9TSVpFKGFyOTM0MF8xcDBfYmFzZWJhbmRfY29yZSksIDIpOworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJCW0FUSF9JTklfUE9TVF0sCisJCQkJYXI5MzQwXzFwMF9iYXNlYmFuZF9wb3N0YW1ibGUsCisJCQkJQVJSQVlfU0laRShhcjkzNDBfMXAwX2Jhc2ViYW5kX3Bvc3RhbWJsZSksIDUpOworCisJCS8qIHJhZGlvICovCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pUmFkaW9bQVRIX0lOSV9QUkVdLCBOVUxMLCAwLCAwKTsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlSYWRpb1tBVEhfSU5JX0NPUkVdLAorCQkJCWFyOTM0MF8xcDBfcmFkaW9fY29yZSwKKwkJCQlBUlJBWV9TSVpFKGFyOTM0MF8xcDBfcmFkaW9fY29yZSksIDIpOworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVJhZGlvW0FUSF9JTklfUE9TVF0sCisJCQkJYXI5MzQwXzFwMF9yYWRpb19wb3N0YW1ibGUsCisJCQkJQVJSQVlfU0laRShhcjkzNDBfMXAwX3JhZGlvX3Bvc3RhbWJsZSksIDUpOworCisJCS8qIHNvYyAqLworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVNPQ1tBVEhfSU5JX1BSRV0sCisJCQkJYXI5MzQwXzFwMF9zb2NfcHJlYW1ibGUsCisJCQkJQVJSQVlfU0laRShhcjkzNDBfMXAwX3NvY19wcmVhbWJsZSksIDIpOworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVNPQ1tBVEhfSU5JX0NPUkVdLCBOVUxMLCAwLCAwKTsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlTT0NbQVRIX0lOSV9QT1NUXSwKKwkJCQlhcjkzNDBfMXAwX3NvY19wb3N0YW1ibGUsCisJCQkJQVJSQVlfU0laRShhcjkzNDBfMXAwX3NvY19wb3N0YW1ibGUpLCA1KTsKKworCQkvKiByeC90eCBnYWluICovCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNSeEdhaW4sCisJCQkJYXI5MzQwQ29tbW9uX3dvX3hsbmFfcnhfZ2Fpbl90YWJsZV8xcDAsCisJCQkJQVJSQVlfU0laRShhcjkzNDBDb21tb25fd29feGxuYV9yeF9nYWluX3RhYmxlXzFwMCksCisJCQkJNSk7CisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCisJCQkJYXI5MzQwTW9kZXNfaGlnaF9vYl9kYl90eF9nYWluX3RhYmxlXzFwMCwKKwkJCQlBUlJBWV9TSVpFKGFyOTM0ME1vZGVzX2hpZ2hfb2JfZGJfdHhfZ2Fpbl90YWJsZV8xcDApLAorCQkJCTUpOworCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNBZGRpdGlvbmFsLAorCQkJCWFyOTM0ME1vZGVzX2Zhc3RfY2xvY2tfMXAwLAorCQkJCUFSUkFZX1NJWkUoYXI5MzQwTW9kZXNfZmFzdF9jbG9ja18xcDApLAorCQkJCTMpOworCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNBZGRpdGlvbmFsXzQwTSwKKwkJCQlhcjkzNDBfMXAwX3JhZGlvX2NvcmVfNDBNLAorCQkJCUFSUkFZX1NJWkUoYXI5MzQwXzFwMF9yYWRpb19jb3JlXzQwTSksCisJCQkJMik7CisJfSBlbHNlIGlmIChBUl9TUkVWXzk0ODVfMTEoYWgpKSB7CiAJCS8qIG1hYyAqLwogCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1hY1tBVEhfSU5JX1BSRV0sIE5VTEwsIDAsIDApOwogCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1hY1tBVEhfSU5JX0NPUkVdLApAQCAtNjYsOCArMTIzLDggQEAKIAogCQkvKiByeC90eCBnYWluICovCiAJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNSeEdhaW4sCi0JCQkJYXI5NDg1X2NvbW1vbl9yeF9nYWluXzFfMSwKLQkJCQlBUlJBWV9TSVpFKGFyOTQ4NV9jb21tb25fcnhfZ2Fpbl8xXzEpLCAyKTsKKwkJCQlhcjk0ODVDb21tb25fd29feGxuYV9yeF9nYWluXzFfMSwKKwkJCQlBUlJBWV9TSVpFKGFyOTQ4NUNvbW1vbl93b194bG5hX3J4X2dhaW5fMV8xKSwgMik7CiAJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCiAJCQkJYXI5NDg1X21vZGVzX2xvd2VzdF9vYl9kYl90eF9nYWluXzFfMSwKIAkJCQlBUlJBWV9TSVpFKGFyOTQ4NV9tb2Rlc19sb3dlc3Rfb2JfZGJfdHhfZ2Fpbl8xXzEpLApAQCAtODgsNjYgKzE0NSw2IEBACiAJCQkJYXI5NDg1XzFfMV9wY2llX3BoeV9jbGtyZXFfZGlzYWJsZV9MMSwKIAkJCQlBUlJBWV9TSVpFKGFyOTQ4NV8xXzFfcGNpZV9waHlfY2xrcmVxX2Rpc2FibGVfTDEpLAogCQkJCTIpOwotCX0gZWxzZSBpZiAoQVJfU1JFVl85NDg1KGFoKSkgewotCQkvKiBtYWMgKi8KLQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNYWNbQVRIX0lOSV9QUkVdLCBOVUxMLCAwLCAwKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNYWNbQVRIX0lOSV9DT1JFXSwKLQkJCQlhcjk0ODVfMV8wX21hY19jb3JlLAotCQkJCUFSUkFZX1NJWkUoYXI5NDg1XzFfMF9tYWNfY29yZSksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1hY1tBVEhfSU5JX1BPU1RdLAotCQkJCWFyOTQ4NV8xXzBfbWFjX3Bvc3RhbWJsZSwKLQkJCQlBUlJBWV9TSVpFKGFyOTQ4NV8xXzBfbWFjX3Bvc3RhbWJsZSksIDUpOwotCi0JCS8qIGJiICovCi0JCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQkJbQVRIX0lOSV9QUkVdLCBhcjk0ODVfMV8wLAotCQkJCUFSUkFZX1NJWkUoYXI5NDg1XzFfMCksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJCW0FUSF9JTklfQ09SRV0sCi0JCQkJYXI5NDg1XzFfMF9iYXNlYmFuZF9jb3JlLAotCQkJCUFSUkFZX1NJWkUoYXI5NDg1XzFfMF9iYXNlYmFuZF9jb3JlKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQkJbQVRIX0lOSV9QT1NUXSwKLQkJCQlhcjk0ODVfMV8wX2Jhc2ViYW5kX3Bvc3RhbWJsZSwKLQkJCQlBUlJBWV9TSVpFKGFyOTQ4NV8xXzBfYmFzZWJhbmRfcG9zdGFtYmxlKSwgNSk7Ci0KLQkJLyogcmFkaW8gKi8KLQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlSYWRpb1tBVEhfSU5JX1BSRV0sIE5VTEwsIDAsIDApOwotCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVJhZGlvW0FUSF9JTklfQ09SRV0sCi0JCQkJYXI5NDg1XzFfMF9yYWRpb19jb3JlLAotCQkJCUFSUkFZX1NJWkUoYXI5NDg1XzFfMF9yYWRpb19jb3JlKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pUmFkaW9bQVRIX0lOSV9QT1NUXSwKLQkJCQlhcjk0ODVfMV8wX3JhZGlvX3Bvc3RhbWJsZSwKLQkJCQlBUlJBWV9TSVpFKGFyOTQ4NV8xXzBfcmFkaW9fcG9zdGFtYmxlKSwgMik7Ci0KLQkJLyogc29jICovCi0JCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pU09DW0FUSF9JTklfUFJFXSwKLQkJCQlhcjk0ODVfMV8wX3NvY19wcmVhbWJsZSwKLQkJCQlBUlJBWV9TSVpFKGFyOTQ4NV8xXzBfc29jX3ByZWFtYmxlKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pU09DW0FUSF9JTklfQ09SRV0sIE5VTEwsIDAsIDApOwotCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVNPQ1tBVEhfSU5JX1BPU1RdLCBOVUxMLCAwLCAwKTsKLQotCQkvKiByeC90eCBnYWluICovCi0JCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNSeEdhaW4sCi0JCQkJYXI5NDg1Q29tbW9uX3J4X2dhaW5fMV8wLAotCQkJCUFSUkFZX1NJWkUoYXI5NDg1Q29tbW9uX3J4X2dhaW5fMV8wKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCi0JCQkJYXI5NDg1TW9kZXNfbG93ZXN0X29iX2RiX3R4X2dhaW5fMV8wLAotCQkJCUFSUkFZX1NJWkUoYXI5NDg1TW9kZXNfbG93ZXN0X29iX2RiX3R4X2dhaW5fMV8wKSwKLQkJCQk1KTsKLQotCQkvKiBMb2FkIFBDSUUgU0VSREVTIHNldHRpbmdzIGZyb20gSU5JICovCi0KLQkJLyogQXdha2UgU2V0dGluZyAqLwotCi0JCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pUGNpZVNlcmRlcywKLQkJCQlhcjk0ODVfMV8wX3BjaWVfcGh5X3BsbF9vbl9jbGtyZXFfZGlzYWJsZV9MMSwKLQkJCQlBUlJBWV9TSVpFKGFyOTQ4NV8xXzBfcGNpZV9waHlfcGxsX29uX2Nsa3JlcV9kaXNhYmxlX0wxKSwKLQkJCQkyKTsKLQotCQkvKiBTbGVlcCBTZXR0aW5nICovCi0KLQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlQY2llU2VyZGVzTG93UG93ZXIsCi0JCQkJYXI5NDg1XzFfMF9wY2llX3BoeV9wbGxfb25fY2xrcmVxX2Rpc2FibGVfTDEsCi0JCQkJQVJSQVlfU0laRShhcjk0ODVfMV8wX3BjaWVfcGh5X3BsbF9vbl9jbGtyZXFfZGlzYWJsZV9MMSksCi0JCQkJMik7CiAJfSBlbHNlIHsKIAkJLyogbWFjICovCiAJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTWFjW0FUSF9JTklfUFJFXSwgTlVMTCwgMCwgMCk7CkBAIC0yMjMsMTYgKzIyMCwxNiBAQAogCXN3aXRjaCAoYXI5MDAzX2h3X2dldF90eF9nYWluX2lkeChhaCkpIHsKIAljYXNlIDA6CiAJZGVmYXVsdDoKLQkJaWYgKEFSX1NSRVZfOTQ4NV8xMShhaCkpCisJCWlmIChBUl9TUkVWXzkzNDAoYWgpKQorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKKwkJCQkJYXI5MzQwTW9kZXNfbG93ZXN0X29iX2RiX3R4X2dhaW5fdGFibGVfMXAwLAorCQkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTM0ME1vZGVzX2xvd2VzdF9vYl9kYl90eF9nYWluX3RhYmxlXzFwMCksCisJCQkJICAgICAgIDUpOworCQllbHNlIGlmIChBUl9TUkVWXzk0ODVfMTEoYWgpKQogCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKIAkJCQkgICAgICAgYXI5NDg1X21vZGVzX2xvd2VzdF9vYl9kYl90eF9nYWluXzFfMSwKIAkJCQkgICAgICAgQVJSQVlfU0laRShhcjk0ODVfbW9kZXNfbG93ZXN0X29iX2RiX3R4X2dhaW5fMV8xKSwKIAkJCQkgICAgICAgNSk7Ci0JCWVsc2UgaWYgKEFSX1NSRVZfOTQ4NShhaCkpCi0JCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLAotCQkJCSAgICAgICBhcjk0ODVNb2Rlc19sb3dlc3Rfb2JfZGJfdHhfZ2Fpbl8xXzAsCi0JCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5NDg1TW9kZXNfbG93ZXN0X29iX2RiX3R4X2dhaW5fMV8wKSwKLQkJCQkgICAgICAgNSk7CiAJCWVsc2UKIAkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCiAJCQkJICAgICAgIGFyOTMwME1vZGVzX2xvd2VzdF9vYl9kYl90eF9nYWluX3RhYmxlXzJwMiwKQEAgLTI0MCwxNiArMjM3LDE2IEBACiAJCQkJICAgICAgIDUpOwogCQlicmVhazsKIAljYXNlIDE6Ci0JCWlmIChBUl9TUkVWXzk0ODVfMTEoYWgpKQorCQlpZiAoQVJfU1JFVl85MzQwKGFoKSkKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCisJCQkJCWFyOTM0ME1vZGVzX2xvd2VzdF9vYl9kYl90eF9nYWluX3RhYmxlXzFwMCwKKwkJCQkgICAgICAgQVJSQVlfU0laRShhcjkzNDBNb2Rlc19sb3dlc3Rfb2JfZGJfdHhfZ2Fpbl90YWJsZV8xcDApLAorCQkJCSAgICAgICA1KTsKKwkJZWxzZSBpZiAoQVJfU1JFVl85NDg1XzExKGFoKSkKIAkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCiAJCQkJICAgICAgIGFyOTQ4NU1vZGVzX2hpZ2hfb2JfZGJfdHhfZ2Fpbl8xXzEsCiAJCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5NDg1TW9kZXNfaGlnaF9vYl9kYl90eF9nYWluXzFfMSksCiAJCQkJICAgICAgIDUpOwotCQllbHNlIGlmIChBUl9TUkVWXzk0ODUoYWgpKQotCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKLQkJCQkgICAgICAgYXI5NDg1TW9kZXNfaGlnaF9vYl9kYl90eF9nYWluXzFfMCwKLQkJCQkgICAgICAgQVJSQVlfU0laRShhcjk0ODVNb2Rlc19oaWdoX29iX2RiX3R4X2dhaW5fMV8wKSwKLQkJCQkgICAgICAgNSk7CiAJCWVsc2UKIAkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCiAJCQkJICAgICAgIGFyOTMwME1vZGVzX2hpZ2hfb2JfZGJfdHhfZ2Fpbl90YWJsZV8ycDIsCkBAIC0yNTcsMTYgKzI1NCwxNiBAQAogCQkJCSAgICAgICA1KTsKIAkJYnJlYWs7CiAJY2FzZSAyOgotCQlpZiAoQVJfU1JFVl85NDg1XzExKGFoKSkKKwkJaWYgKEFSX1NSRVZfOTM0MChhaCkpCisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLAorCQkJCQlhcjkzNDBNb2Rlc19sb3dlc3Rfb2JfZGJfdHhfZ2Fpbl90YWJsZV8xcDAsCisJCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MzQwTW9kZXNfbG93ZXN0X29iX2RiX3R4X2dhaW5fdGFibGVfMXAwKSwKKwkJCQkgICAgICAgNSk7CisJCWVsc2UgaWYgKEFSX1NSRVZfOTQ4NV8xMShhaCkpCiAJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLAogCQkJCSAgICAgICBhcjk0ODVNb2Rlc19sb3dfb2JfZGJfdHhfZ2Fpbl8xXzEsCiAJCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5NDg1TW9kZXNfbG93X29iX2RiX3R4X2dhaW5fMV8xKSwKIAkJCQkgICAgICAgNSk7Ci0JCWVsc2UgaWYgKEFSX1NSRVZfOTQ4NShhaCkpCi0JCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLAotCQkJCSAgICAgICBhcjk0ODVNb2Rlc19sb3dfb2JfZGJfdHhfZ2Fpbl8xXzAsCi0JCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5NDg1TW9kZXNfbG93X29iX2RiX3R4X2dhaW5fMV8wKSwKLQkJCQkgICAgICAgNSk7CiAJCWVsc2UKIAkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCiAJCQkJICAgICAgIGFyOTMwME1vZGVzX2xvd19vYl9kYl90eF9nYWluX3RhYmxlXzJwMiwKQEAgLTI3NCwxNiArMjcxLDE2IEBACiAJCQkJICAgICAgIDUpOwogCQlicmVhazsKIAljYXNlIDM6Ci0JCWlmIChBUl9TUkVWXzk0ODVfMTEoYWgpKQorCQlpZiAoQVJfU1JFVl85MzQwKGFoKSkKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCisJCQkJCWFyOTM0ME1vZGVzX2xvd2VzdF9vYl9kYl90eF9nYWluX3RhYmxlXzFwMCwKKwkJCQkgICAgICAgQVJSQVlfU0laRShhcjkzNDBNb2Rlc19sb3dlc3Rfb2JfZGJfdHhfZ2Fpbl90YWJsZV8xcDApLAorCQkJCSAgICAgICA1KTsKKwkJZWxzZSBpZiAoQVJfU1JFVl85NDg1XzExKGFoKSkKIAkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCiAJCQkJICAgICAgIGFyOTQ4NU1vZGVzX2hpZ2hfcG93ZXJfdHhfZ2Fpbl8xXzEsCiAJCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5NDg1TW9kZXNfaGlnaF9wb3dlcl90eF9nYWluXzFfMSksCiAJCQkJICAgICAgIDUpOwotCQllbHNlIGlmIChBUl9TUkVWXzk0ODUoYWgpKQotCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKLQkJCQkgICAgICAgYXI5NDg1TW9kZXNfaGlnaF9wb3dlcl90eF9nYWluXzFfMCwKLQkJCQkgICAgICAgQVJSQVlfU0laRShhcjk0ODVNb2Rlc19oaWdoX3Bvd2VyX3R4X2dhaW5fMV8wKSwKLQkJCQkgICAgICAgNSk7CiAJCWVsc2UKIAkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCiAJCQkJICAgICAgIGFyOTMwME1vZGVzX2hpZ2hfcG93ZXJfdHhfZ2Fpbl90YWJsZV8ycDIsCkBAIC0yOTgsMTUgKzI5NSwxNSBAQAogCXN3aXRjaCAoYXI5MDAzX2h3X2dldF9yeF9nYWluX2lkeChhaCkpIHsKIAljYXNlIDA6CiAJZGVmYXVsdDoKLQkJaWYgKEFSX1NSRVZfOTQ4NV8xMShhaCkpCisJCWlmIChBUl9TUkVWXzkzNDAoYWgpKQogCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1J4R2FpbiwKLQkJCQkgICAgICAgYXI5NDg1X2NvbW1vbl9yeF9nYWluXzFfMSwKLQkJCQkgICAgICAgQVJSQVlfU0laRShhcjk0ODVfY29tbW9uX3J4X2dhaW5fMV8xKSwKKwkJCQkgICAgICAgYXI5MzQwQ29tbW9uX3J4X2dhaW5fdGFibGVfMXAwLAorCQkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTM0MENvbW1vbl9yeF9nYWluX3RhYmxlXzFwMCksCiAJCQkJICAgICAgIDIpOwotCQllbHNlIGlmIChBUl9TUkVWXzk0ODUoYWgpKQorCQllbHNlIGlmIChBUl9TUkVWXzk0ODVfMTEoYWgpKQogCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1J4R2FpbiwKLQkJCQkgICAgICAgYXI5NDg1Q29tbW9uX3J4X2dhaW5fMV8wLAotCQkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTQ4NUNvbW1vbl9yeF9nYWluXzFfMCksCisJCQkJICAgICAgIGFyOTQ4NUNvbW1vbl93b194bG5hX3J4X2dhaW5fMV8xLAorCQkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTQ4NUNvbW1vbl93b194bG5hX3J4X2dhaW5fMV8xKSwKIAkJCQkgICAgICAgMik7CiAJCWVsc2UKIAkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNSeEdhaW4sCkBAIC0zMTUsMTYgKzMxMiwxNiBAQAogCQkJCSAgICAgICAyKTsKIAkJYnJlYWs7CiAJY2FzZSAxOgotCQlpZiAoQVJfU1JFVl85NDg1XzExKGFoKSkKKwkJaWYgKEFSX1NSRVZfOTM0MChhaCkpCisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzUnhHYWluLAorCQkJCSAgICAgICBhcjkzNDBDb21tb25fd29feGxuYV9yeF9nYWluX3RhYmxlXzFwMCwKKwkJCQkgICAgICAgQVJSQVlfU0laRShhcjkzNDBDb21tb25fd29feGxuYV9yeF9nYWluX3RhYmxlXzFwMCksCisJCQkJICAgICAgIDIpOworCQllbHNlIGlmIChBUl9TUkVWXzk0ODVfMTEoYWgpKQogCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1J4R2FpbiwKIAkJCQkgICAgICAgYXI5NDg1Q29tbW9uX3dvX3hsbmFfcnhfZ2Fpbl8xXzEsCiAJCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5NDg1Q29tbW9uX3dvX3hsbmFfcnhfZ2Fpbl8xXzEpLAogCQkJCSAgICAgICAyKTsKLQkJZWxzZSBpZiAoQVJfU1JFVl85NDg1KGFoKSkKLQkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNSeEdhaW4sCi0JCQkJICAgICAgIGFyOTQ4NUNvbW1vbl93b194bG5hX3J4X2dhaW5fMV8wLAotCQkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTQ4NUNvbW1vbl93b194bG5hX3J4X2dhaW5fMV8wKSwKLQkJCQkgICAgICAgMik7CiAJCWVsc2UKIAkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNSeEdhaW4sCiAJCQkJICAgICAgIGFyOTMwMENvbW1vbl93b194bG5hX3J4X2dhaW5fdGFibGVfMnAyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfbWFjLmMKaW5kZXggMDM4YTBjYi4uYmU2YWRlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19tYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX21hYy5jCkBAIC0zMjksNyArMzI5LDYgQEAKIAkJfCAoZmxhZ3MgJiBBVEg5S19UWERFU0NfVk1GID8gQVJfVmlydE1vcmVGcmFnIDogMCkKIAkJfCBTTSh0eHBvd2VyLCBBUl9YbWl0UG93ZXIpCiAJCXwgKGZsYWdzICYgQVRIOUtfVFhERVNDX1ZFT0wgPyBBUl9WRU9MIDogMCkKLQkJfCAoZmxhZ3MgJiBBVEg5S19UWERFU0NfQ0xSRE1BU0sgPyBBUl9DbHJEZXN0TWFzayA6IDApCiAJCXwgKGtleUl4ICE9IEFUSDlLX1RYS0VZSVhfSU5WQUxJRCA/IEFSX0Rlc3RJZHhWYWxpZCA6IDApCiAJCXwgKGZsYWdzICYgQVRIOUtfVFhERVNDX0xPV1JYQ0hBSU4gPyBBUl9Mb3dSeENoYWluIDogMCk7CiAKQEAgLTM1MCw2ICszNDksMTYgQEAKIAlhZHMtPmN0bDIyID0gMDsKIH0KIAorc3RhdGljIHZvaWQgYXI5MDAzX2h3X3NldF9jbHJkbWFzayhzdHJ1Y3QgYXRoX2h3ICphaCwgdm9pZCAqZHMsIGJvb2wgdmFsKQoreworCXN0cnVjdCBhcjkwMDNfdHhjICphZHMgPSAoc3RydWN0IGFyOTAwM190eGMgKikgZHM7CisKKwlpZiAodmFsKQorCQlhZHMtPmN0bDExIHw9IEFSX0NsckRlc3RNYXNrOworCWVsc2UKKwkJYWRzLT5jdGwxMSAmPSB+QVJfQ2xyRGVzdE1hc2s7Cit9CisKIHN0YXRpYyB2b2lkIGFyOTAwM19od19zZXQxMW5fcmF0ZXNjZW5hcmlvKHN0cnVjdCBhdGhfaHcgKmFoLCB2b2lkICpkcywKIAkJCQkJICB2b2lkICpsYXN0ZHMsCiAJCQkJCSAgdTMyIGR1clVwZGF0ZUVuLCB1MzIgcnRzY3RzUmF0ZSwKQEAgLTQ3NSwyNyArNDg0LDYgQEAKIAlhZHMtPmN0bDEyICY9ICh+QVJfSXNBZ2dyICYgfkFSX01vcmVBZ2dyKTsKIH0KIAotc3RhdGljIHZvaWQgYXI5MDAzX2h3X3NldDExbl9idXJzdGR1cmF0aW9uKHN0cnVjdCBhdGhfaHcgKmFoLCB2b2lkICpkcywKLQkJCQkJICAgdTMyIGJ1cnN0RHVyYXRpb24pCi17Ci0Jc3RydWN0IGFyOTAwM190eGMgKmFkcyA9IChzdHJ1Y3QgYXI5MDAzX3R4YyAqKSBkczsKLQotCWFkcy0+Y3RsMTMgJj0gfkFSX0J1cnN0RHVyOwotCWFkcy0+Y3RsMTMgfD0gU00oYnVyc3REdXJhdGlvbiwgQVJfQnVyc3REdXIpOwotCi19Ci0KLXN0YXRpYyB2b2lkIGFyOTAwM19od19zZXQxMW5fdmlydHVhbG1vcmVmcmFnKHN0cnVjdCBhdGhfaHcgKmFoLCB2b2lkICpkcywKLQkJCQkJICAgICB1MzIgdm1mKQotewotCXN0cnVjdCBhcjkwMDNfdHhjICphZHMgPSAoc3RydWN0IGFyOTAwM190eGMgKikgZHM7Ci0KLQlpZiAodm1mKQotCQlhZHMtPmN0bDExIHw9ICBBUl9WaXJ0TW9yZUZyYWc7Ci0JZWxzZQotCQlhZHMtPmN0bDExICY9IH5BUl9WaXJ0TW9yZUZyYWc7Ci19Ci0KIHZvaWQgYXI5MDAzX2h3X3NldF9wYXByZF90eGRlc2Moc3RydWN0IGF0aF9odyAqYWgsIHZvaWQgKmRzLCB1OCBjaGFpbnMpCiB7CiAJc3RydWN0IGFyOTAwM190eGMgKmFkcyA9IGRzOwpAQCAtNTIwLDggKzUwOCw3IEBACiAJb3BzLT5zZXQxMW5fYWdncl9taWRkbGUgPSBhcjkwMDNfaHdfc2V0MTFuX2FnZ3JfbWlkZGxlOwogCW9wcy0+c2V0MTFuX2FnZ3JfbGFzdCA9IGFyOTAwM19od19zZXQxMW5fYWdncl9sYXN0OwogCW9wcy0+Y2xyMTFuX2FnZ3IgPSBhcjkwMDNfaHdfY2xyMTFuX2FnZ3I7Ci0Jb3BzLT5zZXQxMW5fYnVyc3RkdXJhdGlvbiA9IGFyOTAwM19od19zZXQxMW5fYnVyc3RkdXJhdGlvbjsKLQlvcHMtPnNldDExbl92aXJ0dWFsbW9yZWZyYWcgPSBhcjkwMDNfaHdfc2V0MTFuX3ZpcnR1YWxtb3JlZnJhZzsKKwlvcHMtPnNldF9jbHJkbWFzayA9IGFyOTAwM19od19zZXRfY2xyZG1hc2s7CiB9CiAKIHZvaWQgYXRoOWtfaHdfc2V0X3J4X2J1ZnNpemUoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBidWZfc2l6ZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfcGh5LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX3BoeS5jCmluZGV4IGViMjUwZDYuLjI1ZjNjMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19waHkuYwpAQCAtNzUsMTYgKzc1LDQyIEBACiAJZnJlcSA9IGNlbnRlcnMuc3ludGhfY2VudGVyOwogCiAJaWYgKGZyZXEgPCA0ODAwKSB7ICAgICAvKiAyIEdIeiwgZnJhY3Rpb25hbCBtb2RlICovCi0JCWlmIChBUl9TUkVWXzk0ODUoYWgpKQotCQkJY2hhbm5lbFNlbCA9IENIQU5TRUxfMkdfOTQ4NShmcmVxKTsKLQkJZWxzZQorCQlpZiAoQVJfU1JFVl85NDg1KGFoKSkgeworCQkJdTMyIGNoYW5fZnJhYzsKKworCQkJLyoKKwkJCSAqIGZyZXFfcmVmID0gNDAgLyAocmVmZGl2YSA+PiBhbW9kZXJlZnNlbCk7IHdoZXJlIHJlZmRpdmE9MSBhbmQgYW1vZGVyZWZzZWw9MAorCQkJICogbmRpdiA9ICgoY2hhbl9taHogKiA0KSAvIDMpIC8gZnJlcV9yZWY7CisJCQkgKiBjaGFuc2VsID0gaW50KG5kaXYpLCBjaGFuZnJhYyA9IChuZGl2IC0gY2hhbnNlbCkgKiAweDIwMDAwCisJCQkgKi8KKwkJCWNoYW5uZWxTZWwgPSAoZnJlcSAqIDQpIC8gMTIwOworCQkJY2hhbl9mcmFjID0gKCgoZnJlcSAqIDQpICUgMTIwKSAqIDB4MjAwMDApIC8gMTIwOworCQkJY2hhbm5lbFNlbCA9IChjaGFubmVsU2VsIDw8IDE3KSB8IGNoYW5fZnJhYzsKKwkJfSBlbHNlIGlmIChBUl9TUkVWXzkzNDAoYWgpKSB7CisJCQlpZiAoYWgtPmlzX2Nsa18yNW1oeikgeworCQkJCXUzMiBjaGFuX2ZyYWM7CisKKwkJCQljaGFubmVsU2VsID0gKGZyZXEgKiAyKSAvIDc1OworCQkJCWNoYW5fZnJhYyA9ICgoKGZyZXEgKiAyKSAlIDc1KSAqIDB4MjAwMDApIC8gNzU7CisJCQkJY2hhbm5lbFNlbCA9IChjaGFubmVsU2VsIDw8IDE3KSB8IGNoYW5fZnJhYzsKKwkJCX0gZWxzZQorCQkJCWNoYW5uZWxTZWwgPSBDSEFOU0VMXzJHKGZyZXEpID4+IDE7CisJCX0gZWxzZQogCQkJY2hhbm5lbFNlbCA9IENIQU5TRUxfMkcoZnJlcSk7CiAJCS8qIFNldCB0byAyRyBtb2RlICovCiAJCWJNb2RlID0gMTsKIAl9IGVsc2UgewotCQljaGFubmVsU2VsID0gQ0hBTlNFTF81RyhmcmVxKTsKLQkJLyogRG91YmxlciBpcyBPTiwgc28sIGRpdmlkZSBjaGFubmVsU2VsIGJ5IDIuICovCi0JCWNoYW5uZWxTZWwgPj49IDE7CisJCWlmIChBUl9TUkVWXzkzNDAoYWgpICYmIGFoLT5pc19jbGtfMjVtaHopIHsKKwkJCXUzMiBjaGFuX2ZyYWM7CisKKwkJCWNoYW5uZWxTZWwgPSAoZnJlcSAqIDIpIC8gNzU7CisJCQljaGFuX2ZyYWMgPSAoKGZyZXEgJSA3NSkgKiAweDIwMDAwKSAvIDc1OworCQkJY2hhbm5lbFNlbCA9IChjaGFubmVsU2VsIDw8IDE3KSB8IGNoYW5fZnJhYzsKKwkJfSBlbHNlIHsKKwkJCWNoYW5uZWxTZWwgPSBDSEFOU0VMXzVHKGZyZXEpOworCQkJLyogRG91YmxlciBpcyBPTiwgc28sIGRpdmlkZSBjaGFubmVsU2VsIGJ5IDIuICovCisJCQljaGFubmVsU2VsID4+PSAxOworCQl9CiAJCS8qIFNldCB0byA1RyBtb2RlICovCiAJCWJNb2RlID0gMDsKIAl9CkBAIC0xNDIsNyArMTY4LDcgQEAKIAkgKiBpcyBvdXQtb2YtYmFuZCBhbmQgY2FuIGJlIGlnbm9yZWQuCiAJICovCiAKLQlpZiAoQVJfU1JFVl85NDg1KGFoKSkgeworCWlmIChBUl9TUkVWXzk0ODUoYWgpIHx8IEFSX1NSRVZfOTM0MChhaCkpIHsKIAkJc3B1cl9mYmluX3B0ciA9IGFyOTAwM19nZXRfc3B1cl9jaGFuX3B0cihhaCwKIAkJCQkJCQkgSVNfQ0hBTl8yR0haKGNoYW4pKTsKIAkJaWYgKHNwdXJfZmJpbl9wdHJbMF0gPT0gMCkgLyogTm8gc3B1ciAqLwpAQCAtMTY3LDcgKzE5Myw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgbWF4X3NwdXJfY250czsgaSsrKSB7CiAJCW5lZ2F0aXZlID0gMDsKLQkJaWYgKEFSX1NSRVZfOTQ4NShhaCkpCisJCWlmIChBUl9TUkVWXzk0ODUoYWgpIHx8IEFSX1NSRVZfOTM0MChhaCkpCiAJCQljdXJfYmJfc3B1ciA9IEZCSU4yRlJFUShzcHVyX2ZiaW5fcHRyW2ldLAogCQkJCQlJU19DSEFOXzJHSFooY2hhbikpIC0gc3ludGhfZnJlcTsKIAkJZWxzZQpAQCAtNDAxLDcgKzQyNyw3IEBACiAKIAlhcjkwMDNfaHdfc3B1cl9vZmRtX2NsZWFyKGFoKTsKIAotCWZvciAoaSA9IDA7IHNwdXJDaGFuc1B0cltpXSAmJiBpIDwgNTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEFSX0VFUFJPTV9NT0RBTF9TUFVSUyAmJiBzcHVyQ2hhbnNQdHJbaV07IGkrKykgewogCQlmcmVxX29mZnNldCA9IEZCSU4yRlJFUShzcHVyQ2hhbnNQdHJbaV0sIG1vZGUpIC0gc3ludGhfZnJlcTsKIAkJaWYgKGFicyhmcmVxX29mZnNldCkgPCByYW5nZSkgewogCQkJYXI5MDAzX2h3X3NwdXJfb2ZkbV93b3JrKGFoLCBjaGFuLCBmcmVxX29mZnNldCk7CkBAIC01OTAsMjkgKzYxNiwyNSBAQAogCXN0cnVjdCBhdGhfcmVndWxhdG9yeSAqcmVndWxhdG9yeSA9IGF0aDlrX2h3X3JlZ3VsYXRvcnkoYWgpOwogCXVuc2lnbmVkIGludCByZWdXcml0ZXMgPSAwLCBpOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGNoYW4tPmNoYW47Ci0JdTMyIG1vZGVzSW5kZXgsIGZyZXFJbmRleDsKKwl1MzIgbW9kZXNJbmRleDsKIAogCXN3aXRjaCAoY2hhbi0+Y2hhbm1vZGUpIHsKIAljYXNlIENIQU5ORUxfQToKIAljYXNlIENIQU5ORUxfQV9IVDIwOgogCQltb2Rlc0luZGV4ID0gMTsKLQkJZnJlcUluZGV4ID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBDSEFOTkVMX0FfSFQ0MFBMVVM6CiAJY2FzZSBDSEFOTkVMX0FfSFQ0ME1JTlVTOgogCQltb2Rlc0luZGV4ID0gMjsKLQkJZnJlcUluZGV4ID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBDSEFOTkVMX0c6CiAJY2FzZSBDSEFOTkVMX0dfSFQyMDoKIAljYXNlIENIQU5ORUxfQjoKIAkJbW9kZXNJbmRleCA9IDQ7Ci0JCWZyZXFJbmRleCA9IDI7CiAJCWJyZWFrOwogCWNhc2UgQ0hBTk5FTF9HX0hUNDBQTFVTOgogCWNhc2UgQ0hBTk5FTF9HX0hUNDBNSU5VUzoKIAkJbW9kZXNJbmRleCA9IDM7Ci0JCWZyZXFJbmRleCA9IDI7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTYzNyw2ICs2NTksOSBAQAogCQlSRUdfV1JJVEVfQVJSQVkoJmFoLT5pbmlNb2Rlc0FkZGl0aW9uYWwsCiAJCQkJbW9kZXNJbmRleCwgcmVnV3JpdGVzKTsKIAorCWlmIChBUl9TUkVWXzkzNDAoYWgpICYmICFhaC0+aXNfY2xrXzI1bWh6KQorCQlSRUdfV1JJVEVfQVJSQVkoJmFoLT5pbmlNb2Rlc0FkZGl0aW9uYWxfNDBNLCAxLCByZWdXcml0ZXMpOworCiAJYXI5MDAzX2h3X292ZXJyaWRlX2luaShhaCk7CiAJYXI5MDAzX2h3X3NldF9jaGFubmVsX3JlZ3MoYWgsIGNoYW4pOwogCWFyOTAwM19od19zZXRfY2hhaW5fbWFza3MoYWgsIGFoLT5yeGNoYWlubWFzaywgYWgtPnR4Y2hhaW5tYXNrKTsKQEAgLTExNTksOSArMTE4NCw1MiBAQAogCWNvbmYtPnJhZGFyX2luYmFuZCA9IDg7CiB9CiAKK3N0YXRpYyB2b2lkIGFyOTAwM19od19hbnRkaXZfY29tYl9jb25mX2dldChzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgICBzdHJ1Y3QgYXRoX2h3X2FudGNvbWJfY29uZiAqYW50Y29uZikKK3sKKwl1MzIgcmVndmFsOworCisJcmVndmFsID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9NQ19HQUlOX0NUUkwpOworCWFudGNvbmYtPm1haW5fbG5hX2NvbmYgPSAocmVndmFsICYgQVJfUEhZXzk0ODVfQU5UX0RJVl9NQUlOX0xOQUNPTkYpID4+CisJCQkJICBBUl9QSFlfOTQ4NV9BTlRfRElWX01BSU5fTE5BQ09ORl9TOworCWFudGNvbmYtPmFsdF9sbmFfY29uZiA9IChyZWd2YWwgJiBBUl9QSFlfOTQ4NV9BTlRfRElWX0FMVF9MTkFDT05GKSA+PgorCQkJCSBBUl9QSFlfOTQ4NV9BTlRfRElWX0FMVF9MTkFDT05GX1M7CisJYW50Y29uZi0+ZmFzdF9kaXZfYmlhcyA9IChyZWd2YWwgJiBBUl9QSFlfOTQ4NV9BTlRfRkFTVF9ESVZfQklBUykgPj4KKwkJCQkgIEFSX1BIWV85NDg1X0FOVF9GQVNUX0RJVl9CSUFTX1M7CisJYW50Y29uZi0+bG5hMV9sbmEyX2RlbHRhID0gLTk7CisJYW50Y29uZi0+ZGl2X2dyb3VwID0gMjsKK30KKworc3RhdGljIHZvaWQgYXI5MDAzX2h3X2FudGRpdl9jb21iX2NvbmZfc2V0KHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgIHN0cnVjdCBhdGhfaHdfYW50Y29tYl9jb25mICphbnRjb25mKQoreworCXUzMiByZWd2YWw7CisKKwlyZWd2YWwgPSBSRUdfUkVBRChhaCwgQVJfUEhZX01DX0dBSU5fQ1RSTCk7CisJcmVndmFsICY9IH4oQVJfUEhZXzk0ODVfQU5UX0RJVl9NQUlOX0xOQUNPTkYgfAorCQkgICAgQVJfUEhZXzk0ODVfQU5UX0RJVl9BTFRfTE5BQ09ORiB8CisJCSAgICBBUl9QSFlfOTQ4NV9BTlRfRkFTVF9ESVZfQklBUyB8CisJCSAgICBBUl9QSFlfOTQ4NV9BTlRfRElWX01BSU5fR0FJTlRCIHwKKwkJICAgIEFSX1BIWV85NDg1X0FOVF9ESVZfQUxUX0dBSU5UQik7CisJcmVndmFsIHw9ICgoYW50Y29uZi0+bWFpbl9sbmFfY29uZiA8PAorCQkJCQlBUl9QSFlfOTQ4NV9BTlRfRElWX01BSU5fTE5BQ09ORl9TKQorCQkgICAmIEFSX1BIWV85NDg1X0FOVF9ESVZfTUFJTl9MTkFDT05GKTsKKwlyZWd2YWwgfD0gKChhbnRjb25mLT5hbHRfbG5hX2NvbmYgPDwgQVJfUEhZXzk0ODVfQU5UX0RJVl9BTFRfTE5BQ09ORl9TKQorCQkgICAmIEFSX1BIWV85NDg1X0FOVF9ESVZfQUxUX0xOQUNPTkYpOworCXJlZ3ZhbCB8PSAoKGFudGNvbmYtPmZhc3RfZGl2X2JpYXMgPDwgQVJfUEhZXzk0ODVfQU5UX0ZBU1RfRElWX0JJQVNfUykKKwkJICAgJiBBUl9QSFlfOTQ4NV9BTlRfRkFTVF9ESVZfQklBUyk7CisJcmVndmFsIHw9ICgoYW50Y29uZi0+bWFpbl9nYWludGIgPDwgQVJfUEhZXzk0ODVfQU5UX0RJVl9NQUlOX0dBSU5UQl9TKQorCQkgICAmIEFSX1BIWV85NDg1X0FOVF9ESVZfTUFJTl9HQUlOVEIpOworCXJlZ3ZhbCB8PSAoKGFudGNvbmYtPmFsdF9nYWludGIgPDwgQVJfUEhZXzk0ODVfQU5UX0RJVl9BTFRfR0FJTlRCX1MpCisJCSAgICYgQVJfUEhZXzk0ODVfQU5UX0RJVl9BTFRfR0FJTlRCKTsKKworCVJFR19XUklURShhaCwgQVJfUEhZX01DX0dBSU5fQ1RSTCwgcmVndmFsKTsKK30KKwogdm9pZCBhcjkwMDNfaHdfYXR0YWNoX3BoeV9vcHMoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJc3RydWN0IGF0aF9od19wcml2YXRlX29wcyAqcHJpdl9vcHMgPSBhdGg5a19od19wcml2YXRlX29wcyhhaCk7CisJc3RydWN0IGF0aF9od19vcHMgKm9wcyA9IGF0aDlrX2h3X29wcyhhaCk7CiAJc3RhdGljIGNvbnN0IHUzMiBhcjkzMDBfY2NhX3JlZ3NbNl0gPSB7CiAJCUFSX1BIWV9DQ0FfMCwKIAkJQVJfUEhZX0NDQV8xLApAQCAtMTE4OCw2ICsxMjU2LDkgQEAKIAlwcml2X29wcy0+YW5pX2NhY2hlX2luaV9yZWdzID0gYXI5MDAzX2h3X2FuaV9jYWNoZV9pbmlfcmVnczsKIAlwcml2X29wcy0+c2V0X3JhZGFyX3BhcmFtcyA9IGFyOTAwM19od19zZXRfcmFkYXJfcGFyYW1zOwogCisJb3BzLT5hbnRkaXZfY29tYl9jb25mX2dldCA9IGFyOTAwM19od19hbnRkaXZfY29tYl9jb25mX2dldDsKKwlvcHMtPmFudGRpdl9jb21iX2NvbmZfc2V0ID0gYXI5MDAzX2h3X2FudGRpdl9jb21iX2NvbmZfc2V0OworCiAJYXI5MDAzX2h3X3NldF9uZl9saW1pdHMoYWgpOwogCWFyOTAwM19od19zZXRfcmFkYXJfY29uZihhaCk7CiAJbWVtY3B5KGFoLT5uZl9yZWdzLCBhcjkzMDBfY2NhX3JlZ3MsIHNpemVvZihhaC0+bmZfcmVncykpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19waHkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfcGh5LmgKaW5kZXggOGJkZGEyYy4uYzc1MDViNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19waHkuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX3BoeS5oCkBAIC0yNjEsMTIgKzI2MSwzNCBAQAogI2RlZmluZSBBUl9QSFlfRVhUX0NDQTAgICAgICAgICAoQVJfQUdDX0JBU0UgKyAweDIwKQogI2RlZmluZSBBUl9QSFlfUkVTVEFSVCAgICAgICAgICAoQVJfQUdDX0JBU0UgKyAweDI0KQogCisvKgorICogQW50ZW5uYSBEaXZlcnNpdHkgIHNldHRpbmdzCisgKi8KICNkZWZpbmUgQVJfUEhZX01DX0dBSU5fQ1RSTCAgICAgKEFSX0FHQ19CQVNFICsgMHgyOCkKICNkZWZpbmUgQVJfQU5UX0RJVl9DVFJMX0FMTAkweDdlMDAwMDAwCiAjZGVmaW5lIEFSX0FOVF9ESVZfQ1RSTF9BTExfUwkyNQogI2RlZmluZSBBUl9BTlRfRElWX0VOQUJMRQkweDEwMDAwMDAKICNkZWZpbmUgQVJfQU5UX0RJVl9FTkFCTEVfUwkyNAogCisKKyNkZWZpbmUgQVJfUEhZXzk0ODVfQU5UX0ZBU1RfRElWX0JJQVMJCQkweDAwMDA3ZTAwCisjZGVmaW5lIEFSX1BIWV85NDg1X0FOVF9GQVNUX0RJVl9CSUFTX1MgICAgICAgICAgICAgICAgICA5CisjZGVmaW5lIEFSX1BIWV85NDg1X0FOVF9ESVZfTE5BRElWCQkJMHgwMTAwMDAwMAorI2RlZmluZSBBUl9QSFlfOTQ4NV9BTlRfRElWX0xOQURJVl9TCQkJMjQKKyNkZWZpbmUgQVJfUEhZXzk0ODVfQU5UX0RJVl9BTFRfTE5BQ09ORgkJCTB4MDYwMDAwMDAKKyNkZWZpbmUgQVJfUEhZXzk0ODVfQU5UX0RJVl9BTFRfTE5BQ09ORl9TCQkyNQorI2RlZmluZSBBUl9QSFlfOTQ4NV9BTlRfRElWX01BSU5fTE5BQ09ORgkJMHgxODAwMDAwMAorI2RlZmluZSBBUl9QSFlfOTQ4NV9BTlRfRElWX01BSU5fTE5BQ09ORl9TCQkyNworI2RlZmluZSBBUl9QSFlfOTQ4NV9BTlRfRElWX0FMVF9HQUlOVEIJCQkweDIwMDAwMDAwCisjZGVmaW5lIEFSX1BIWV85NDg1X0FOVF9ESVZfQUxUX0dBSU5UQl9TCQkyOQorI2RlZmluZSBBUl9QSFlfOTQ4NV9BTlRfRElWX01BSU5fR0FJTlRCCQkJMHg0MDAwMDAwMAorI2RlZmluZSBBUl9QSFlfOTQ4NV9BTlRfRElWX01BSU5fR0FJTlRCX1MJCTMwCisKKyNkZWZpbmUgQVJfUEhZXzk0ODVfQU5UX0RJVl9MTkExX01JTlVTX0xOQTIJCTB4MAorI2RlZmluZSBBUl9QSFlfOTQ4NV9BTlRfRElWX0xOQTIJCQkweDEKKyNkZWZpbmUgQVJfUEhZXzk0ODVfQU5UX0RJVl9MTkExCQkJMHgyCisjZGVmaW5lIEFSX1BIWV85NDg1X0FOVF9ESVZfTE5BMV9QTFVTX0xOQTIJCTB4MworCiAjZGVmaW5lIEFSX1BIWV9FWFRDSE5fUFdSVEhSMSAgIChBUl9BR0NfQkFTRSArIDB4MmMpCiAjZGVmaW5lIEFSX1BIWV9FWFRfQ0hOX1dJTiAgICAgIChBUl9BR0NfQkFTRSArIDB4MzApCiAjZGVmaW5lIEFSX1BIWV8yMF80MF9ERVRfVEhSICAgIChBUl9BR0NfQkFTRSArIDB4MzQpCkBAIC01NDgsMTUgKzU3MCwxMiBAQAogCiAjZGVmaW5lIEFSX1BIWV9UWEdBSU5fVEFCTEUgICAgICAoQVJfU01fQkFTRSArIDB4MzAwKQogCi0jZGVmaW5lIEFSX1BIWV9UWF9JUUNBTF9TVEFSVF85NDg1CQkoQVJfU01fQkFTRSArIDB4M2M0KQotI2RlZmluZSBBUl9QSFlfVFhfSVFDQUxfU1RBUlRfRE9fQ0FMXzk0ODUJMHg4MDAwMDAwMAotI2RlZmluZSBBUl9QSFlfVFhfSVFDQUxfU1RBUlRfRE9fQ0FMXzk0ODVfUwkzMQotI2RlZmluZSBBUl9QSFlfVFhfSVFDQUxfQ09OVFJPTF8xXzk0ODUJCShBUl9TTV9CQVNFICsgMHgzYzgpCi0jZGVmaW5lIEFSX1BIWV9UWF9JUUNBTF9TVEFUVVNfQjBfOTQ4NQkJKEFSX1NNX0JBU0UgKyAweDNmMCkKLQotI2RlZmluZSBBUl9QSFlfVFhfSVFDQUxfQ09OVFJPTF8xICAgKEFSX1NNX0JBU0UgKyAweDQ0OCkKLSNkZWZpbmUgQVJfUEhZX1RYX0lRQ0FMX1NUQVJUICAgICAgIChBUl9TTV9CQVNFICsgMHg0NDApCi0jZGVmaW5lIEFSX1BIWV9UWF9JUUNBTF9TVEFUVVNfQjAgICAoQVJfU01fQkFTRSArIDB4NDhjKQorI2RlZmluZSBBUl9QSFlfVFhfSVFDQUxfQ09OVFJPTF8xICAgKEFSX1NNX0JBU0UgKyBBUl9TUkVWXzk0ODUoYWgpID8gXAorCQkJCQkJIDB4M2M4IDogMHg0NDgpCisjZGVmaW5lIEFSX1BIWV9UWF9JUUNBTF9TVEFSVCAgICAgICAoQVJfU01fQkFTRSArIEFSX1NSRVZfOTQ4NShhaCkgPyBcCisJCQkJCQkgMHgzYzQgOiAweDQ0MCkKKyNkZWZpbmUgQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19CMCAgIChBUl9TTV9CQVNFICsgQVJfU1JFVl85NDg1KGFoKSA/IFwKKwkJCQkJCSAweDNmMCA6IDB4NDhjKQogI2RlZmluZSBBUl9QSFlfVFhfSVFDQUxfQ09SUl9DT0VGRl9CMChfaSkgICAgKEFSX1NNX0JBU0UgKyBcCiAJCQkJCSAgICAgKEFSX1NSRVZfOTQ4NShhaCkgPyBcCiAJCQkJCSAgICAgIDB4M2QwIDogMHg0NTApICsgKChfaSkgPDwgMikpCkBAIC01ODgsNyArNjA3LDcgQEAKICNkZWZpbmUgQVJfUEhZXzY1Tk1fQ0gwX0JJQVMyICAgICAgIDB4MTYwYzQKICNkZWZpbmUgQVJfUEhZXzY1Tk1fQ0gwX0JJQVM0ICAgICAgIDB4MTYwY2MKICNkZWZpbmUgQVJfUEhZXzY1Tk1fQ0gwX1JYVFg0ICAgICAgIDB4MTYxMGMKLSNkZWZpbmUgQVJfUEhZXzY1Tk1fQ0gwX1RIRVJNICAgICAgIChBUl9TUkVWXzk0ODUoYWgpID8gMHgxNjI4YyA6IDB4MTYyOTApCisjZGVmaW5lIEFSX1BIWV82NU5NX0NIMF9USEVSTSAgICAgICAoQVJfU1JFVl85MzAwKGFoKSA/IDB4MTYyOTAgOiAweDE2MjhjKQogCiAjZGVmaW5lIEFSX1BIWV82NU5NX0NIMF9USEVSTV9MT0NBTCAgIDB4ODAwMDAwMDAKICNkZWZpbmUgQVJfUEhZXzY1Tk1fQ0gwX1RIRVJNX0xPQ0FMX1MgMzEKQEAgLTc1OCwxMCArNzc3LDEwIEBACiAjZGVmaW5lIEFSX1BIWV9TUEVDVFJBTF9TQ0FOX1NIT1JUX1JFUEVBVCAgIDB4MDEwMDAwMDAKICNkZWZpbmUgQVJfUEhZX1NQRUNUUkFMX1NDQU5fU0hPUlRfUkVQRUFUX1MgMjQKICNkZWZpbmUgQVJfUEhZX0NIQU5ORUxfU1RBVFVTX1JYX0NMRUFSICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBBUl9QSFlfVFhfSVFDQVFMX0NPTlRST0xfMV9JUUNPUlJfSV9RX0NPRkZfREVMUFQgICAgICAgICAgICAgMHgwMWZjMDAwMAotI2RlZmluZSBBUl9QSFlfVFhfSVFDQVFMX0NPTlRST0xfMV9JUUNPUlJfSV9RX0NPRkZfREVMUFRfUyAgICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBBUl9QSFlfVFhfSVFDQUxfU1RBUlRfRE9fQ0FMICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIEFSX1BIWV9UWF9JUUNBTF9TVEFSVF9ET19DQUxfUyAgICAgIDAKKyNkZWZpbmUgQVJfUEhZX1RYX0lRQ0FMX0NPTlRST0xfMV9JUUNPUlJfSV9RX0NPRkZfREVMUFQgICAgICAgICAgICAgMHgwMWZjMDAwMAorI2RlZmluZSBBUl9QSFlfVFhfSVFDQUxfQ09OVFJPTF8xX0lRQ09SUl9JX1FfQ09GRl9ERUxQVF9TICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIEFSX1BIWV9UWF9JUUNBTF9TVEFSVF9ET19DQUwJICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVJfUEhZX1RYX0lRQ0FMX1NUQVJUX0RPX0NBTF9TCSAgICAwCiAKICNkZWZpbmUgQVJfUEhZX1RYX0lRQ0FMX1NUQVRVU19GQUlMRUQgICAgMHgwMDAwMDAwMQogI2RlZmluZSBBUl9QSFlfQ0FMSUJSQVRFRF9HQUlOU18wCSAweDNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MzQwX2luaXR2YWxzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MzQwX2luaXR2YWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE1YThhZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkzNDBfaW5pdHZhbHMuaApAQCAtMCwwICsxLDE1MjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBJTklUVkFMU185MzQwX0gKKyNkZWZpbmUgSU5JVFZBTFNfOTM0MF9ICisKK3N0YXRpYyBjb25zdCB1MzIgYXI5MzQwXzFwMF9yYWRpb19wb3N0YW1ibGVbXVs1XSA9IHsKKwkvKiAgQWRkciAgICAgIDVHX0hUMjAgICAgIDVHX0hUNDAgICAgIDJHX0hUNDAgICAgIDJHX0hUMjAgICovCisJezB4MDAwMTYwYWMsIDB4YTQ2NDY4MDAsIDB4YTQ2NDY4MDAsIDB4YTQ2NDY4MDAsIDB4YTQ2NDY4MDB9LAorCXsweDAwMDE2MTBjLCAweDA4MDAwMDAwLCAweDA4MDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjE0MCwgMHgxMDgwNDAwMCwgMHgxMDgwNDAwMCwgMHg1MDgwNDAwMCwgMHg1MDgwNDAwMH0sCisJezB4MDAwMTY1MGMsIDB4MDgwMDAwMDAsIDB4MDgwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2NTQwLCAweDEwODA0MDAwLCAweDEwODA0MDAwLCAweDUwODA0MDAwLCAweDUwODA0MDAwfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5MzQwTW9kZXNfbG93ZXN0X29iX2RiX3R4X2dhaW5fdGFibGVfMXAwW11bNV0gPSB7CisJLyogICBBZGRyICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICAqLworCXsweDAwMDBhNDEwLCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5fSwKKwl7MHgwMDAwYTUwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE1MDQsIDB4MDYwMDAwMDMsIDB4MDYwMDAwMDMsIDB4MDQwMDAwMDIsIDB4MDQwMDAwMDJ9LAorCXsweDAwMDBhNTA4LCAweDBhMDAwMDIwLCAweDBhMDAwMDIwLCAweDA4MDAwMDA0LCAweDA4MDAwMDA0fSwKKwl7MHgwMDAwYTUwYywgMHgxMDAwMDAyMywgMHgxMDAwMDAyMywgMHgwYjAwMDIwMCwgMHgwYjAwMDIwMH0sCisJezB4MDAwMGE1MTAsIDB4MTYwMDAyMjAsIDB4MTYwMDAyMjAsIDB4MGYwMDAyMDIsIDB4MGYwMDAyMDJ9LAorCXsweDAwMDBhNTE0LCAweDFjMDAwMjIzLCAweDFjMDAwMjIzLCAweDEyMDAwNDAwLCAweDEyMDAwNDAwfSwKKwl7MHgwMDAwYTUxOCwgMHgyMTAyMDIyMCwgMHgyMTAyMDIyMCwgMHgxNjAwMDQwMiwgMHgxNjAwMDQwMn0sCisJezB4MDAwMGE1MWMsIDB4MjcwMjAyMjMsIDB4MjcwMjAyMjMsIDB4MTkwMDA0MDQsIDB4MTkwMDA0MDR9LAorCXsweDAwMDBhNTIwLCAweDJiMDIyMjIwLCAweDJiMDIyMjIwLCAweDFjMDAwNjAzLCAweDFjMDAwNjAzfSwKKwl7MHgwMDAwYTUyNCwgMHgyZjAyMjIyMiwgMHgyZjAyMjIyMiwgMHgyMTAwMGEwMiwgMHgyMTAwMGEwMn0sCisJezB4MDAwMGE1MjgsIDB4MzQwMjIyMjUsIDB4MzQwMjIyMjUsIDB4MjUwMDBhMDQsIDB4MjUwMDBhMDR9LAorCXsweDAwMDBhNTJjLCAweDNhMDIyMjJhLCAweDNhMDIyMjJhLCAweDI4MDAwYTIwLCAweDI4MDAwYTIwfSwKKwl7MHgwMDAwYTUzMCwgMHgzZTAyMjIyYywgMHgzZTAyMjIyYywgMHgyYzAwMGUyMCwgMHgyYzAwMGUyMH0sCisJezB4MDAwMGE1MzQsIDB4NDIwMjI0MmEsIDB4NDIwMjI0MmEsIDB4MzAwMDBlMjIsIDB4MzAwMDBlMjJ9LAorCXsweDAwMDBhNTM4LCAweDQ3MDIyNDRhLCAweDQ3MDIyNDRhLCAweDM0MDAwZTI0LCAweDM0MDAwZTI0fSwKKwl7MHgwMDAwYTUzYywgMHg0YjAyMjQ0YywgMHg0YjAyMjQ0YywgMHgzODAwMTY0MCwgMHgzODAwMTY0MH0sCisJezB4MDAwMGE1NDAsIDB4NGUwMjI0NmMsIDB4NGUwMjI0NmMsIDB4M2MwMDE2NjAsIDB4M2MwMDE2NjB9LAorCXsweDAwMDBhNTQ0LCAweDUzMDIyNjZjLCAweDUzMDIyNjZjLCAweDNmMDAxODYxLCAweDNmMDAxODYxfSwKKwl7MHgwMDAwYTU0OCwgMHg1NzAyMjg2YywgMHg1NzAyMjg2YywgMHg0MzAwMWE4MSwgMHg0MzAwMWE4MX0sCisJezB4MDAwMGE1NGMsIDB4NWMwNDI4NmIsIDB4NWMwNDI4NmIsIDB4NDcwMDFhODMsIDB4NDcwMDFhODN9LAorCXsweDAwMDBhNTUwLCAweDYxMDQyYTZjLCAweDYxMDQyYTZjLCAweDRhMDAxYzg0LCAweDRhMDAxYzg0fSwKKwl7MHgwMDAwYTU1NCwgMHg2NjA2MmE2YywgMHg2NjA2MmE2YywgMHg0ZTAwMWNlMywgMHg0ZTAwMWNlM30sCisJezB4MDAwMGE1NTgsIDB4NmIwNjJlNmMsIDB4NmIwNjJlNmMsIDB4NTIwMDFjZTUsIDB4NTIwMDFjZTV9LAorCXsweDAwMDBhNTVjLCAweDcwMDYzMDhjLCAweDcwMDYzMDhjLCAweDU2MDAxY2U5LCAweDU2MDAxY2U5fSwKKwl7MHgwMDAwYTU2MCwgMHg3MzBhMzA4YSwgMHg3MzBhMzA4YSwgMHg1YTAwMWNlYiwgMHg1YTAwMWNlYn0sCisJezB4MDAwMGE1NjQsIDB4NzcwYTMwOGMsIDB4NzcwYTMwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAorCXsweDAwMDBhNTY4LCAweDc3MGEzMDhjLCAweDc3MGEzMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKKwl7MHgwMDAwYTU2YywgMHg3NzBhMzA4YywgMHg3NzBhMzA4YywgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCisJezB4MDAwMGE1NzAsIDB4NzcwYTMwOGMsIDB4NzcwYTMwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAorCXsweDAwMDBhNTc0LCAweDc3MGEzMDhjLCAweDc3MGEzMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKKwl7MHgwMDAwYTU3OCwgMHg3NzBhMzA4YywgMHg3NzBhMzA4YywgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCisJezB4MDAwMGE1N2MsIDB4NzcwYTMwOGMsIDB4NzcwYTMwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAorCXsweDAwMDBhNTgwLCAweDAwODAwMDAwLCAweDAwODAwMDAwLCAweDAwODAwMDAwLCAweDAwODAwMDAwfSwKKwl7MHgwMDAwYTU4NCwgMHgwNjgwMDAwMywgMHgwNjgwMDAwMywgMHgwNDgwMDAwMiwgMHgwNDgwMDAwMn0sCisJezB4MDAwMGE1ODgsIDB4MGE4MDAwMjAsIDB4MGE4MDAwMjAsIDB4MDg4MDAwMDQsIDB4MDg4MDAwMDR9LAorCXsweDAwMDBhNThjLCAweDEwODAwMDIzLCAweDEwODAwMDIzLCAweDBiODAwMjAwLCAweDBiODAwMjAwfSwKKwl7MHgwMDAwYTU5MCwgMHgxNjgwMDIyMCwgMHgxNjgwMDIyMCwgMHgwZjgwMDIwMiwgMHgwZjgwMDIwMn0sCisJezB4MDAwMGE1OTQsIDB4MWM4MDAyMjMsIDB4MWM4MDAyMjMsIDB4MTI4MDA0MDAsIDB4MTI4MDA0MDB9LAorCXsweDAwMDBhNTk4LCAweDIxODIwMjIwLCAweDIxODIwMjIwLCAweDE2ODAwNDAyLCAweDE2ODAwNDAyfSwKKwl7MHgwMDAwYTU5YywgMHgyNzgyMDIyMywgMHgyNzgyMDIyMywgMHgxOTgwMDQwNCwgMHgxOTgwMDQwNH0sCisJezB4MDAwMGE1YTAsIDB4MmI4MjIyMjAsIDB4MmI4MjIyMjAsIDB4MWM4MDA2MDMsIDB4MWM4MDA2MDN9LAorCXsweDAwMDBhNWE0LCAweDJmODIyMjIyLCAweDJmODIyMjIyLCAweDIxODAwYTAyLCAweDIxODAwYTAyfSwKKwl7MHgwMDAwYTVhOCwgMHgzNDgyMjIyNSwgMHgzNDgyMjIyNSwgMHgyNTgwMGEwNCwgMHgyNTgwMGEwNH0sCisJezB4MDAwMGE1YWMsIDB4M2E4MjIyMmEsIDB4M2E4MjIyMmEsIDB4Mjg4MDBhMjAsIDB4Mjg4MDBhMjB9LAorCXsweDAwMDBhNWIwLCAweDNlODIyMjJjLCAweDNlODIyMjJjLCAweDJjODAwZTIwLCAweDJjODAwZTIwfSwKKwl7MHgwMDAwYTViNCwgMHg0MjgyMjQyYSwgMHg0MjgyMjQyYSwgMHgzMDgwMGUyMiwgMHgzMDgwMGUyMn0sCisJezB4MDAwMGE1YjgsIDB4NDc4MjI0NGEsIDB4NDc4MjI0NGEsIDB4MzQ4MDBlMjQsIDB4MzQ4MDBlMjR9LAorCXsweDAwMDBhNWJjLCAweDRiODIyNDRjLCAweDRiODIyNDRjLCAweDM4ODAxNjQwLCAweDM4ODAxNjQwfSwKKwl7MHgwMDAwYTVjMCwgMHg0ZTgyMjQ2YywgMHg0ZTgyMjQ2YywgMHgzYzgwMTY2MCwgMHgzYzgwMTY2MH0sCisJezB4MDAwMGE1YzQsIDB4NTM4MjI2NmMsIDB4NTM4MjI2NmMsIDB4M2Y4MDE4NjEsIDB4M2Y4MDE4NjF9LAorCXsweDAwMDBhNWM4LCAweDU3ODIyODZjLCAweDU3ODIyODZjLCAweDQzODAxYTgxLCAweDQzODAxYTgxfSwKKwl7MHgwMDAwYTVjYywgMHg1Yzg0Mjg2YiwgMHg1Yzg0Mjg2YiwgMHg0NzgwMWE4MywgMHg0NzgwMWE4M30sCisJezB4MDAwMGE1ZDAsIDB4NjE4NDJhNmMsIDB4NjE4NDJhNmMsIDB4NGE4MDFjODQsIDB4NGE4MDFjODR9LAorCXsweDAwMDBhNWQ0LCAweDY2ODYyYTZjLCAweDY2ODYyYTZjLCAweDRlODAxY2UzLCAweDRlODAxY2UzfSwKKwl7MHgwMDAwYTVkOCwgMHg2Yjg2MmU2YywgMHg2Yjg2MmU2YywgMHg1MjgwMWNlNSwgMHg1MjgwMWNlNX0sCisJezB4MDAwMGE1ZGMsIDB4NzA4NjMwOGMsIDB4NzA4NjMwOGMsIDB4NTY4MDFjZTksIDB4NTY4MDFjZTl9LAorCXsweDAwMDBhNWUwLCAweDczOGEzMDhhLCAweDczOGEzMDhhLCAweDVhODAxY2ViLCAweDVhODAxY2VifSwKKwl7MHgwMDAwYTVlNCwgMHg3NzhhMzA4YywgMHg3NzhhMzA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCisJezB4MDAwMGE1ZTgsIDB4Nzc4YTMwOGMsIDB4Nzc4YTMwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDBhNWVjLCAweDc3OGEzMDhjLCAweDc3OGEzMDhjLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKKwl7MHgwMDAwYTVmMCwgMHg3NzhhMzA4YywgMHg3NzhhMzA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCisJezB4MDAwMGE1ZjQsIDB4Nzc4YTMwOGMsIDB4Nzc4YTMwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDBhNWY4LCAweDc3OGEzMDhjLCAweDc3OGEzMDhjLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKKwl7MHgwMDAwYTVmYywgMHg3NzhhMzA4YywgMHg3NzhhMzA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCisJezB4MDAwMTYwNDQsIDB4MDU2ZGIyZGIsIDB4MDU2ZGIyZGIsIDB4MDU2ZGIyZGIsIDB4MDU2ZGIyZGJ9LAorCXsweDAwMDE2MDQ4LCAweDI0OTI1MjY2LCAweDI0OTI1MjY2LCAweDI0OTI1MjY2LCAweDI0OTI1MjY2fSwKKwl7MHgwMDAxNjQ0NCwgMHgwNTZkYjJkYiwgMHgwNTZkYjJkYiwgMHgwNTZkYjJkYiwgMHgwNTZkYjJkYn0sCisJezB4MDAwMTY0NDgsIDB4MjQ5MjUyNjYsIDB4MjQ5MjUyNjYsIDB4MjQ5MjUyNjYsIDB4MjQ5MjUyNjZ9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhcjkzNDBNb2Rlc19mYXN0X2Nsb2NrXzFwMFtdWzNdID0geworCS8qICBBZGRyICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgKi8KKwl7MHgwMDAwMTAzMCwgMHgwMDAwMDI2OCwgMHgwMDAwMDRkMH0sCisJezB4MDAwMDEwNzAsIDB4MDAwMDAxOGMsIDB4MDAwMDAzMTh9LAorCXsweDAwMDAxMGIwLCAweDAwMDAwZmQwLCAweDAwMDAxZmEwfSwKKwl7MHgwMDAwODAxNCwgMHgwNDRjMDQ0YywgMHgwODk4MDg5OH0sCisJezB4MDAwMDgwMWMsIDB4MTQ4ZWMwMmIsIDB4MTQ4ZWMwNTd9LAorCXsweDAwMDA4MzE4LCAweDAwMDA0NGMwLCAweDAwMDA4OTgwfSwKKwl7MHgwMDAwOWUwMCwgMHgwMzcyMTgyMSwgMHgwMzcyMTgyMX0sCisJezB4MDAwMGEyMzAsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMTZ9LAorCXsweDAwMDBhMjU0LCAweDAwMDAwODk4LCAweDAwMDAxMTMwfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5MzQwXzFwMF9yYWRpb19jb3JlW11bMl0gPSB7CisJLyogIEFkZHIgICAgIGFsbG1vZGVzICAqLworCXsweDAwMDE2MDAwLCAweDM2ZGI2ZGI2fSwKKwl7MHgwMDAxNjAwNCwgMHg2ZGI2ZGI0MH0sCisJezB4MDAwMTYwMDgsIDB4NzNmMDAwMDB9LAorCXsweDAwMDE2MDBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjA0MCwgMHg3ZjgwZmZmOH0sCisJezB4MDAwMTYwNDQsIDB4MDNiNmQyZGJ9LAorCXsweDAwMDE2MDQ4LCAweDI0OTI1MjY2fSwKKwl7MHgwMDAxNjA0YywgMHgwMDBmMDI3OH0sCisJezB4MDAwMTYwNTAsIDB4NmRiNmRiNmN9LAorCXsweDAwMDE2MDU0LCAweDZkYjYwMDAwfSwKKwl7MHgwMDAxNjA4MCwgMHgwMDA4MDAwMH0sCisJezB4MDAwMTYwODQsIDB4MGU0ODA0OGN9LAorCXsweDAwMDE2MDg4LCAweDE0MjE0NTE0fSwKKwl7MHgwMDAxNjA4YywgMHgxMTlmMDgxY30sCisJezB4MDAwMTYwOTAsIDB4MjQ5MjY0OTB9LAorCXsweDAwMDE2MDk0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjA5OCwgMHhkNDExZWI4NH0sCisJezB4MDAwMTYwOWMsIDB4MDNlNDdmMzJ9LAorCXsweDAwMDE2MGEwLCAweGMyMTA4ZmZlfSwKKwl7MHgwMDAxNjBhNCwgMHg4MTJmYzM3MH0sCisJezB4MDAwMTYwYTgsIDB4NDIzYzgwMDB9LAorCXsweDAwMDE2MGFjLCAweGE0NjQ2ODAwfSwKKwl7MHgwMDAxNjBiMCwgMHgwMGZlN2Y0Nn0sCisJezB4MDAwMTYwYjQsIDB4OTI0ODAwMDB9LAorCXsweDAwMDE2MGMwLCAweDAwNmRiNmRifSwKKwl7MHgwMDAxNjBjNCwgMHg2ZGI2ZGI2MH0sCisJezB4MDAwMTYwYzgsIDB4NmRiNmRiNmN9LAorCXsweDAwMDE2MGNjLCAweDZkZTZkYjZjfSwKKwl7MHgwMDAxNjBkMCwgMHhiNmRhNDkyNH0sCisJezB4MDAwMTYxMDAsIDB4MDRjYjAwMDF9LAorCXsweDAwMDE2MTA0LCAweGZmZjgwMDAwfSwKKwl7MHgwMDAxNjEwOCwgMHgwMDA4MDAxMH0sCisJezB4MDAwMTYxMGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2MTQwLCAweDUwODA0MDA4fSwKKwl7MHgwMDAxNjE0NCwgMHgwMTg4NDA4MH0sCisJezB4MDAwMTYxNDgsIDB4MDAwMDgwYzB9LAorCXsweDAwMDE2MjgwLCAweDAxMDAwMDE1fSwKKwl7MHgwMDAxNjI4NCwgMHgwNTUzMDAwMH0sCisJezB4MDAwMTYyODgsIDB4MDAzMTgwMDB9LAorCXsweDAwMDE2MjhjLCAweDUwMDAwMDAwfSwKKwl7MHgwMDAxNjI5MCwgMHg0MDgwMjk0Zn0sCisJezB4MDAwMTYzODAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2Mzg0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjM4OCwgMHgwMDgwMDcwMH0sCisJezB4MDAwMTYzOGMsIDB4MDA4MDA3MDB9LAorCXsweDAwMDE2MzkwLCAweDAwODAwNzAwfSwKKwl7MHgwMDAxNjM5NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYzOTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2MzljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjNhMCwgMHgwMDAwMDAwMX0sCisJezB4MDAwMTYzYTQsIDB4MDAwMDAwMDF9LAorCXsweDAwMDE2M2E4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjNhYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYzYjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2M2I0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjNiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYzYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2M2MwLCAweDAwMDAwMGEwfSwKKwl7MHgwMDAxNjNjNCwgMHgwMDBjMDAwMH0sCisJezB4MDAwMTYzYzgsIDB4MTQwMjE0MDJ9LAorCXsweDAwMDE2M2NjLCAweDAwMDAxNDAyfSwKKwl7MHgwMDAxNjNkMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYzZDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2NDAwLCAweDM2ZGI2ZGI2fSwKKwl7MHgwMDAxNjQwNCwgMHg2ZGI2ZGI0MH0sCisJezB4MDAwMTY0MDgsIDB4NzNmMDAwMDB9LAorCXsweDAwMDE2NDBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjQ0MCwgMHg3ZjgwZmZmOH0sCisJezB4MDAwMTY0NDQsIDB4MDNiNmQyZGJ9LAorCXsweDAwMDE2NDQ4LCAweDI0OTI3MjY2fSwKKwl7MHgwMDAxNjQ0YywgMHgwMDBmMDI3OH0sCisJezB4MDAwMTY0NTAsIDB4NmRiNmRiNmN9LAorCXsweDAwMDE2NDU0LCAweDZkYjYwMDAwfSwKKwl7MHgwMDAxNjUwMCwgMHgwNGNiMDAwMX0sCisJezB4MDAwMTY1MDQsIDB4ZmZmODAwMDB9LAorCXsweDAwMDE2NTA4LCAweDAwMDgwMDEwfSwKKwl7MHgwMDAxNjUwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMTY1NDAsIDB4NTA4MDQwMDh9LAorCXsweDAwMDE2NTQ0LCAweDAxODg0MDgwfSwKKwl7MHgwMDAxNjU0OCwgMHgwMDAwODBjMH0sCisJezB4MDAwMTY3ODAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2Nzg0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjc4OCwgMHgwMDgwMDcwMH0sCisJezB4MDAwMTY3OGMsIDB4MDA4MDA3MDB9LAorCXsweDAwMDE2NzkwLCAweDAwODAwNzAwfSwKKwl7MHgwMDAxNjc5NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTY3OTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2NzljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjdhMCwgMHgwMDAwMDAwMX0sCisJezB4MDAwMTY3YTQsIDB4MDAwMDAwMDF9LAorCXsweDAwMDE2N2E4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjdhYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMTY3YjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2N2I0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjdiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTY3YmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2N2MwLCAweDAwMDAwMGEwfSwKKwl7MHgwMDAxNjdjNCwgMHgwMDBjMDAwMH0sCisJezB4MDAwMTY3YzgsIDB4MTQwMjE0MDJ9LAorCXsweDAwMDE2N2NjLCAweDAwMDAxNDAyfSwKKwl7MHgwMDAxNjdkMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTY3ZDQsIDB4MDAwMDAwMDB9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhcjkzNDBfMXAwX3JhZGlvX2NvcmVfNDBNW11bMl0gPSB7CisJezB4MDAwMTYwOWMsIDB4MDI1NjZmM2F9LAorCXsweDAwMDE2MGFjLCAweGE0NjQ3YzAwfSwKKwl7MHgwMDAxNjBiMCwgMHgwMTg4NWY1YX0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFyOTM0MF8xcDBfbWFjX3Bvc3RhbWJsZVtdWzVdID0geworCS8qIEFkZHIgICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAyR19IVDIwICAqLworCXsweDAwMDAxMDMwLCAweDAwMDAwMjMwLCAweDAwMDAwNDYwLCAweDAwMDAwMmMwLCAweDAwMDAwMTYwfSwKKwl7MHgwMDAwMTA3MCwgMHgwMDAwMDE2OCwgMHgwMDAwMDJkMCwgMHgwMDAwMDMxOCwgMHgwMDAwMDE4Y30sCisJezB4MDAwMDEwYjAsIDB4MDAwMDBlNjAsIDB4MDAwMDFjYzAsIDB4MDAwMDdjNzAsIDB4MDAwMDNlMzh9LAorCXsweDAwMDA4MDE0LCAweDAzZTgwM2U4LCAweDA3ZDAwN2QwLCAweDEwODAxNjAwLCAweDA4NDAwYjAwfSwKKwl7MHgwMDAwODAxYywgMHgxMjhkODAyNywgMHgxMjhkODA0ZiwgMHgxMmUwMDA1NywgMHgxMmUwMDAyYn0sCisJezB4MDAwMDgxMjAsIDB4MDhmMDQ4MDAsIDB4MDhmMDQ4MDAsIDB4MDhmMDQ4MTAsIDB4MDhmMDQ4MTB9LAorCXsweDAwMDA4MWQwLCAweDAwMDAzMjEwLCAweDAwMDAzMjEwLCAweDAwMDAzMjBhLCAweDAwMDAzMjBhfSwKKwl7MHgwMDAwODMxOCwgMHgwMDAwM2U4MCwgMHgwMDAwN2QwMCwgMHgwMDAwNjg4MCwgMHgwMDAwMzQ0MH0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFyOTM0MF8xcDBfc29jX3Bvc3RhbWJsZVtdWzVdID0geworCS8qICAgQWRkciAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAgMkdfSFQyMCAgKi8KKwl7MHgwMDAwNzAxMCwgMHgwMDAwMDAyMywgMHgwMDAwMDAyMywgMHgwMDAwMDAyMywgMHgwMDAwMDAyM30sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFyOTM0MF8xcDBfYmFzZWJhbmRfcG9zdGFtYmxlW11bNV0gPSB7CisJLyogIEFkZHIgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICAqLworCXsweDAwMDA5ODEwLCAweGQwMGE4MDA1LCAweGQwMGE4MDA1LCAweGQwMGE4MDExLCAweGQwMGE4MDExfSwKKwl7MHgwMDAwOTgyMCwgMHgyMDZhMDIyZSwgMHgyMDZhMDIyZSwgMHgyMDZhMDIyZSwgMHgyMDZhMDIyZX0sCisJezB4MDAwMDk4MjQsIDB4NWFjNjQwZDAsIDB4NWFjNjQwZDAsIDB4NWFjNjQwZDAsIDB4NWFjNjQwZDB9LAorCXsweDAwMDA5ODI4LCAweDA2OTAzMDgxLCAweDA2OTAzMDgxLCAweDA2OTAzODgxLCAweDA2OTAzODgxfSwKKwl7MHgwMDAwOTgyYywgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNH0sCisJezB4MDAwMDk4MzAsIDB4MDAwMDA1OWMsIDB4MDAwMDA1OWMsIDB4MDAwMDExOWMsIDB4MDAwMDExOWN9LAorCXsweDAwMDA5YzAwLCAweDAwMDAwMDQ0LCAweDAwMDAwMGM0LCAweDAwMDAwMGM0LCAweDAwMDAwMDQ0fSwKKwl7MHgwMDAwOWUwMCwgMHgwMzcyMTYxZSwgMHgwMzcyMTYxZSwgMHgwMzcyMTZhMCwgMHgwMzcyMTZhMH0sCisJezB4MDAwMDllMDQsIDB4MDAxODIwMjAsIDB4MDAxODIwMjAsIDB4MDAxODIwMjAsIDB4MDAxODIwMjB9LAorCXsweDAwMDA5ZTBjLCAweDZjNDAwMGUyLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyLCAweDZjNDAwMGUyfSwKKwl7MHgwMDAwOWUxMCwgMHg3ZWM4OGQyZSwgMHg3ZWM4OGQyZSwgMHg3ZWM4OGQyZSwgMHg3ZWM4OGQyZX0sCisJezB4MDAwMDllMTQsIDB4MzEzOTVkNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTVkNWV9LAorCXsweDAwMDA5ZTE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWUxYywgMHgwMDAxY2Y5YywgMHgwMDAxY2Y5YywgMHgwMDAyMWY5YywgMHgwMDAyMWY5Y30sCisJezB4MDAwMDllMjAsIDB4MDAwMDAzYjUsIDB4MDAwMDAzYjUsIDB4MDAwMDAzY2UsIDB4MDAwMDAzY2V9LAorCXsweDAwMDA5ZTJjLCAweDAwMDAwMDFjLCAweDAwMDAwMDFjLCAweDAwMDAwMDIxLCAweDAwMDAwMDIxfSwKKwl7MHgwMDAwOWU0NCwgMHgwMjMyMWUyNywgMHgwMjMyMWUyNywgMHgwMjI5MWUyNywgMHgwMjI5MWUyN30sCisJezB4MDAwMDllNDgsIDB4NTAzMDIwMWEsIDB4NTAzMDIwMWEsIDB4NTAzMDIwMTIsIDB4NTAzMDIwMTJ9LAorCXsweDAwMDA5ZmM4LCAweDAwMDNmMDAwLCAweDAwMDNmMDAwLCAweDAwMDFhMDAwLCAweDAwMDFhMDAwfSwKKwl7MHgwMDAwYTIwNCwgMHgwMDAwM2ZjMCwgMHgwMDAwM2ZjNCwgMHgwMDAwM2ZjNCwgMHgwMDAwM2ZjMH0sCisJezB4MDAwMGEyMDgsIDB4MDAwMDAxMDQsIDB4MDAwMDAxMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDR9LAorCXsweDAwMDBhMjMwLCAweDAwMDAwMDBhLCAweDAwMDAwMDE0LCAweDAwMDAwMDE2LCAweDAwMDAwMDBifSwKKwl7MHgwMDAwYTIzOCwgMHhmZmI4MTAxOCwgMHhmZmI4MTAxOCwgMHhmZmI4MTAxOCwgMHhmZmI4MTAxOH0sCisJezB4MDAwMGEyNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAyMTAsIDB4MDAwMDAxMDh9LAorCXsweDAwMDBhMjU0LCAweDAwMDAwN2QwLCAweDAwMDAwZmEwLCAweDAwMDAxMTMwLCAweDAwMDAwODk4fSwKKwl7MHgwMDAwYTI1OCwgMHgwMjAyMDAwMiwgMHgwMjAyMDAwMiwgMHgwMjAyMDAwMiwgMHgwMjAyMDAwMn0sCisJezB4MDAwMGEyNWMsIDB4MDEwMDBlMGUsIDB4MDEwMDBlMGUsIDB4MDEwMDBlMGUsIDB4MDEwMDBlMGV9LAorCXsweDAwMDBhMjYwLCAweDBhMDIxNTAxLCAweDBhMDIxNTAxLCAweDNhMDIxNTAxLCAweDNhMDIxNTAxfSwKKwl7MHgwMDAwYTI2NCwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZX0sCisJezB4MDAwMGEyODAsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGJ9LAorCXsweDAwMDBhMjg0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMTUwLCAweDAwMDAwMTUwfSwKKwl7MHgwMDAwYTI4OCwgMHgwMDAwMDIyMCwgMHgwMDAwMDIyMCwgMHgwMDAwMDExMCwgMHgwMDAwMDExMH0sCisJezB4MDAwMGEyOGMsIDB4MDAwMTExMTEsIDB4MDAwMTExMTEsIDB4MDAwMjIyMjIsIDB4MDAwMjIyMjJ9LAorCXsweDAwMDBhMmM0LCAweDAwMTU4ZDE4LCAweDAwMTU4ZDE4LCAweDAwMTU4ZDE4LCAweDAwMTU4ZDE4fSwKKwl7MHgwMDAwYTJkMCwgMHgwMDA3MTk4MSwgMHgwMDA3MTk4MSwgMHgwMDA3MTk4MSwgMHgwMDA3MTk4Mn0sCisJezB4MDAwMGEyZDgsIDB4Zjk5OWE4M2EsIDB4Zjk5OWE4M2EsIDB4Zjk5OWE4M2EsIDB4Zjk5OWE4M2F9LAorCXsweDAwMDBhMzU4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTgzMCwgMHgwMDAwMDE5YywgMHgwMDAwMDE5YywgMHgwMDAwMDE5YywgMHgwMDAwMDE5Y30sCisJezB4MDAwMGFlMDQsIDB4MDAxODAwMDAsIDB4MDAxODAwMDAsIDB4MDAxODAwMDAsIDB4MDAxODAwMDB9LAorCXsweDAwMDBhZTE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYWUxYywgMHgwMDAwMDE5YywgMHgwMDAwMDE5YywgMHgwMDAwMDE5YywgMHgwMDAwMDE5Y30sCisJezB4MDAwMGFlMjAsIDB4MDAwMDAxYjUsIDB4MDAwMDAxYjUsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2V9LAorCXsweDAwMDBiMjg0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMTUwLCAweDAwMDAwMTUwfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5MzQwXzFwMF9iYXNlYmFuZF9jb3JlW11bMl0gPSB7CisJLyogIEFkZHIgICAgIGFsbG1vZGVzICAqLworCXsweDAwMDA5ODAwLCAweGFmZTY4ZTMwfSwKKwl7MHgwMDAwOTgwNCwgMHhmZDE0ZTAwMH0sCisJezB4MDAwMDk4MDgsIDB4OWMwYTlmNmJ9LAorCXsweDAwMDA5ODBjLCAweDA0OTAwMDAwfSwKKwl7MHgwMDAwOTgxNCwgMHhiMjgwYzAwYX0sCisJezB4MDAwMDk4MTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ODFjLCAweDAwMDIwMDI4fSwKKwl7MHgwMDAwOTgzNCwgMHg1ZjNjYTNkZX0sCisJezB4MDAwMDk4MzgsIDB4MDEwOGVjZmZ9LAorCXsweDAwMDA5ODNjLCAweDE0NzUwNjAwfSwKKwl7MHgwMDAwOTg4MCwgMHgyMDFmZmYwMH0sCisJezB4MDAwMDk4ODQsIDB4MDAwMDEwNDJ9LAorCXsweDAwMDA5OGE0LCAweDAwMjAwNDAwfSwKKwl7MHgwMDAwOThiMCwgMHg1MjQ0MGJiZX0sCisJezB4MDAwMDk4ZDAsIDB4MDA0YjZhOGV9LAorCXsweDAwMDA5OGQ0LCAweDAwMDAwODIwfSwKKwl7MHgwMDAwOThkYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4ZjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OGY0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWMwNCwgMHhmZjU1ZmY1NX0sCisJezB4MDAwMDljMDgsIDB4MDMyMGZmNTV9LAorCXsweDAwMDA5YzBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWMxMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDljMTQsIDB4MDAwNDYzODR9LAorCXsweDAwMDA5YzE4LCAweDA1YjZiNDQwfSwKKwl7MHgwMDAwOWMxYywgMHgwMGI2YjQ0MH0sCisJezB4MDAwMDlkMDAsIDB4YzA4MGEzMzN9LAorCXsweDAwMDA5ZDA0LCAweDQwMjA2YzEwfSwKKwl7MHgwMDAwOWQwOCwgMHgwMDljNDA2MH0sCisJezB4MDAwMDlkMGMsIDB4OTg4MzgwMGF9LAorCXsweDAwMDA5ZDEwLCAweDAxODM0MDYxfSwKKwl7MHgwMDAwOWQxNCwgMHgwMGMwMDQwYn0sCisJezB4MDAwMDlkMTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ZTA4LCAweDAwMzgyMzBjfSwKKwl7MHgwMDAwOWUyNCwgMHg5OTBiYjUxNX0sCisJezB4MDAwMDllMjgsIDB4MGM2ZjAwMDB9LAorCXsweDAwMDA5ZTMwLCAweDA2MzM2Zjc3fSwKKwl7MHgwMDAwOWUzNCwgMHg2YWY2NTMyZn0sCisJezB4MDAwMDllMzgsIDB4MGNjODBjMDB9LAorCXsweDAwMDA5ZTNjLCAweGNmOTQ2MjIyfSwKKwl7MHgwMDAwOWU0MCwgMHgwZDI2MTgyMH0sCisJezB4MDAwMDllNGMsIDB4MDAwMDEwMDR9LAorCXsweDAwMDA5ZTUwLCAweDAwZmYwM2YxfSwKKwl7MHgwMDAwOWU1NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDlmYzAsIDB4ODAzZTQ3ODh9LAorCXsweDAwMDA5ZmM0LCAweDAwMDFlZmI1fSwKKwl7MHgwMDAwOWZjYywgMHg0MDAwMDAxNH0sCisJezB4MDAwMDlmZDAsIDB4MDExOTNiOTN9LAorCXsweDAwMDBhMjBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTIyMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyMjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMjI4LCAweDEwMDAyMzEwfSwKKwl7MHgwMDAwYTIyYywgMHgwMTAzNmExZX0sCisJezB4MDAwMGEyMzQsIDB4MTAwMDBmZmZ9LAorCXsweDAwMDBhMjNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTI0NCwgMHgwYzAwMDAwMH0sCisJezB4MDAwMGEyYTAsIDB4MDAwMDAwMDF9LAorCXsweDAwMDBhMmMwLCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwYTJjOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyY2MsIDB4MThjNDM0MzN9LAorCXsweDAwMDBhMmQ0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTJkYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyZTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMmU0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTJlOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyZWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMmYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTJmNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzQ0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTM0YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzNTAsIDB4MDAwMGEwMDB9LAorCXsweDAwMDBhMzY0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTM3MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzOTAsIDB4MDAwMDAwMDF9LAorCXsweDAwMDBhMzk0LCAweDAwMDAwNDQ0fSwKKwl7MHgwMDAwYTM5OCwgMHgwMDFmMGUwZn0sCisJezB4MDAwMGEzOWMsIDB4MDA3NTM5M2Z9LAorCXsweDAwMDBhM2EwLCAweGI3OWY2NDI3fSwKKwl7MHgwMDAwYTNhNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzYTgsIDB4YWFhYWFhYWF9LAorCXsweDAwMDBhM2FjLCAweDNjNDY2NDc4fSwKKwl7MHgwMDAwYTNjMCwgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzYzQsIDB4MjIyMjIyMjB9LAorCXsweDAwMDBhM2M4LCAweDIwMjAwMDIwfSwKKwl7MHgwMDAwYTNjYywgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzZDAsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhM2Q0LCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTNkOCwgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzZGMsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhM2UwLCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTNlNCwgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzZTgsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhM2VjLCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTNmMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzZjQsIDB4MDAwMDAyNDZ9LAorCXsweDAwMDBhM2Y4LCAweDBjZGJkMzgwfSwKKwl7MHgwMDAwYTNmYywgMHgwMDBmMGYwMX0sCisJezB4MDAwMGE0MDAsIDB4OGZhOTFmMDF9LAorCXsweDAwMDBhNDA0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTQwOCwgMHgwZTc5ZTVjNn0sCisJezB4MDAwMGE0MGMsIDB4MDA4MjA4MjB9LAorCXsweDAwMDBhNDE0LCAweDFjZTczOWNlfSwKKwl7MHgwMDAwYTQxOCwgMHgyZDAwMWRjZX0sCisJezB4MDAwMGE0MWMsIDB4MWNlNzM5Y2V9LAorCXsweDAwMDBhNDIwLCAweDAwMDAwMWNlfSwKKwl7MHgwMDAwYTQyNCwgMHgxY2U3MzljZX0sCisJezB4MDAwMGE0MjgsIDB4MDAwMDAxY2V9LAorCXsweDAwMDBhNDJjLCAweDFjZTczOWNlfSwKKwl7MHgwMDAwYTQzMCwgMHgxY2U3MzljZX0sCisJezB4MDAwMGE0MzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNDM4LCAweDAwMDAxODAxfSwKKwl7MHgwMDAwYTQzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE0NDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNDQ0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTQ0OCwgMHgwNDAwMDA4MH0sCisJezB4MDAwMGE0NGMsIDB4MDAwMDAwMDF9LAorCXsweDAwMDBhNDUwLCAweDAwMDEwMDAwfSwKKwl7MHgwMDAwYTQ1OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2MDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjA0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTYwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2MGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTYxNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2MTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTYyMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2MjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTYyYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2MzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjM0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTYzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2M2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjQwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTY0NCwgMHgzZmFkOWQ3NH0sCisJezB4MDAwMGE2NDgsIDB4MDA0ODA2MGF9LAorCXsweDAwMDBhNjRjLCAweDAwMDAwNjM3fSwKKwl7MHgwMDAwYTY3MCwgMHgwMzAyMDEwMH0sCisJezB4MDAwMGE2NzQsIDB4MDkwODA1MDR9LAorCXsweDAwMDBhNjc4LCAweDBkMGMwYjBhfSwKKwl7MHgwMDAwYTY3YywgMHgxMzEyMTExMH0sCisJezB4MDAwMGE2ODAsIDB4MzEzMDE1MTR9LAorCXsweDAwMDBhNjg0LCAweDM1MzQzMzMyfSwKKwl7MHgwMDAwYTY4OCwgMHgwMDAwMDAzNn0sCisJezB4MDAwMGE2OTAsIDB4MDAwMDA4Mzh9LAorCXsweDAwMDBhN2MwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTdjNCwgMHhmZmZmZmZmY30sCisJezB4MDAwMGE3YzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhN2NjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTdkMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE3ZDQsIDB4MDAwMDAwMDR9LAorCXsweDAwMDBhN2RjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYThkMCwgMHgwMDRiNmE4ZX0sCisJezB4MDAwMGE4ZDQsIDB4MDAwMDA4MjB9LAorCXsweDAwMDBhOGRjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYThmMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE4ZjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMmQwLCAweDAwMDAwMDgwfSwKKwl7MHgwMDAwYjJkNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIyZGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMmUwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjJlNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIyZTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMmVjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjJmMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIyZjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMmY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjQwOCwgMHgwZTc5ZTVjMH0sCisJezB4MDAwMGI0MGMsIDB4MDA4MjA4MjB9LAorCXsweDAwMDBiNDIwLCAweDAwMDAwMDAwfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5MzQwTW9kZXNfaGlnaF9wb3dlcl90eF9nYWluX3RhYmxlXzFwMFtdWzVdID0geworCS8qICBBZGRyICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAgMkdfSFQyMCAgKi8KKwl7MHgwMDAwYTQxMCwgMHgwMDAwNTBkOCwgMHgwMDAwNTBkOCwgMHgwMDAwNTBkOSwgMHgwMDAwNTBkOX0sCisJezB4MDAwMGE1MDAsIDB4MDAwMDIyMjAsIDB4MDAwMDIyMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNTA0LCAweDA0MDAyMjIyLCAweDA0MDAyMjIyLCAweDA0MDAwMDAyLCAweDA0MDAwMDAyfSwKKwl7MHgwMDAwYTUwOCwgMHgwOTAwMjQyMSwgMHgwOTAwMjQyMSwgMHgwODAwMDAwNCwgMHgwODAwMDAwNH0sCisJezB4MDAwMGE1MGMsIDB4MGQwMDI2MjEsIDB4MGQwMDI2MjEsIDB4MGIwMDAyMDAsIDB4MGIwMDAyMDB9LAorCXsweDAwMDBhNTEwLCAweDEzMDA0NjIwLCAweDEzMDA0NjIwLCAweDBmMDAwMjAyLCAweDBmMDAwMjAyfSwKKwl7MHgwMDAwYTUxNCwgMHgxOTAwNGEyMCwgMHgxOTAwNGEyMCwgMHgxMTAwMDQwMCwgMHgxMTAwMDQwMH0sCisJezB4MDAwMGE1MTgsIDB4MWQwMDRlMjAsIDB4MWQwMDRlMjAsIDB4MTUwMDA0MDIsIDB4MTUwMDA0MDJ9LAorCXsweDAwMDBhNTFjLCAweDIxMDA1NDIwLCAweDIxMDA1NDIwLCAweDE5MDAwNDA0LCAweDE5MDAwNDA0fSwKKwl7MHgwMDAwYTUyMCwgMHgyNjAwNWUyMCwgMHgyNjAwNWUyMCwgMHgxYjAwMDYwMywgMHgxYjAwMDYwM30sCisJezB4MDAwMGE1MjQsIDB4MmIwMDVlNDAsIDB4MmIwMDVlNDAsIDB4MWYwMDBhMDIsIDB4MWYwMDBhMDJ9LAorCXsweDAwMDBhNTI4LCAweDJmMDA1ZTQyLCAweDJmMDA1ZTQyLCAweDIzMDAwYTA0LCAweDIzMDAwYTA0fSwKKwl7MHgwMDAwYTUyYywgMHgzMzAwNWU0NCwgMHgzMzAwNWU0NCwgMHgyNjAwMGEyMCwgMHgyNjAwMGEyMH0sCisJezB4MDAwMGE1MzAsIDB4MzgwMDVlNjUsIDB4MzgwMDVlNjUsIDB4MmEwMDBlMjAsIDB4MmEwMDBlMjB9LAorCXsweDAwMDBhNTM0LCAweDNjMDA1ZTY5LCAweDNjMDA1ZTY5LCAweDJlMDAwZTIyLCAweDJlMDAwZTIyfSwKKwl7MHgwMDAwYTUzOCwgMHg0MDAwNWU2YiwgMHg0MDAwNWU2YiwgMHgzMTAwMGUyNCwgMHgzMTAwMGUyNH0sCisJezB4MDAwMGE1M2MsIDB4NDQwMDVlNmQsIDB4NDQwMDVlNmQsIDB4MzQwMDE2NDAsIDB4MzQwMDE2NDB9LAorCXsweDAwMDBhNTQwLCAweDQ5MDA1ZTcyLCAweDQ5MDA1ZTcyLCAweDM4MDAxNjYwLCAweDM4MDAxNjYwfSwKKwl7MHgwMDAwYTU0NCwgMHg0ZTAwNWViMiwgMHg0ZTAwNWViMiwgMHgzYjAwMTg2MSwgMHgzYjAwMTg2MX0sCisJezB4MDAwMGE1NDgsIDB4NTMwMDVmMTIsIDB4NTMwMDVmMTIsIDB4M2UwMDFhODEsIDB4M2UwMDFhODF9LAorCXsweDAwMDBhNTRjLCAweDU5MDI1ZWI1LCAweDU5MDI1ZWI1LCAweDQyMDAxYTgzLCAweDQyMDAxYTgzfSwKKwl7MHgwMDAwYTU1MCwgMHg1ZTAyNWYxMiwgMHg1ZTAyNWYxMiwgMHg0NDAwMWM4NCwgMHg0NDAwMWM4NH0sCisJezB4MDAwMGE1NTQsIDB4NjEwMjdmMTIsIDB4NjEwMjdmMTIsIDB4NDgwMDFjZTMsIDB4NDgwMDFjZTN9LAorCXsweDAwMDBhNTU4LCAweDY3MDJiZjEyLCAweDY3MDJiZjEyLCAweDRjMDAxY2U1LCAweDRjMDAxY2U1fSwKKwl7MHgwMDAwYTU1YywgMHg2YjAyYmYxNCwgMHg2YjAyYmYxNCwgMHg1MDAwMWNlOSwgMHg1MDAwMWNlOX0sCisJezB4MDAwMGE1NjAsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTQwMDFjZWIsIDB4NTQwMDFjZWJ9LAorCXsweDAwMDBhNTY0LCAweDZmMDJiZjE2LCAweDZmMDJiZjE2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU2OCwgMHg2ZjAyYmYxNiwgMHg2ZjAyYmYxNiwgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCisJezB4MDAwMGE1NmMsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAorCXsweDAwMDBhNTcwLCAweDZmMDJiZjE2LCAweDZmMDJiZjE2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU3NCwgMHg2ZjAyYmYxNiwgMHg2ZjAyYmYxNiwgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCisJezB4MDAwMGE1NzgsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAorCXsweDAwMDBhNTdjLCAweDZmMDJiZjE2LCAweDZmMDJiZjE2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU4MCwgMHgwMDgwMjIyMCwgMHgwMDgwMjIyMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMH0sCisJezB4MDAwMGE1ODQsIDB4MDQ4MDIyMjIsIDB4MDQ4MDIyMjIsIDB4MDQ4MDAwMDIsIDB4MDQ4MDAwMDJ9LAorCXsweDAwMDBhNTg4LCAweDA5ODAyNDIxLCAweDA5ODAyNDIxLCAweDA4ODAwMDA0LCAweDA4ODAwMDA0fSwKKwl7MHgwMDAwYTU4YywgMHgwZDgwMjYyMSwgMHgwZDgwMjYyMSwgMHgwYjgwMDIwMCwgMHgwYjgwMDIwMH0sCisJezB4MDAwMGE1OTAsIDB4MTM4MDQ2MjAsIDB4MTM4MDQ2MjAsIDB4MGY4MDAyMDIsIDB4MGY4MDAyMDJ9LAorCXsweDAwMDBhNTk0LCAweDE5ODA0YTIwLCAweDE5ODA0YTIwLCAweDExODAwNDAwLCAweDExODAwNDAwfSwKKwl7MHgwMDAwYTU5OCwgMHgxZDgwNGUyMCwgMHgxZDgwNGUyMCwgMHgxNTgwMDQwMiwgMHgxNTgwMDQwMn0sCisJezB4MDAwMGE1OWMsIDB4MjE4MDU0MjAsIDB4MjE4MDU0MjAsIDB4MTk4MDA0MDQsIDB4MTk4MDA0MDR9LAorCXsweDAwMDBhNWEwLCAweDI2ODA1ZTIwLCAweDI2ODA1ZTIwLCAweDFiODAwNjAzLCAweDFiODAwNjAzfSwKKwl7MHgwMDAwYTVhNCwgMHgyYjgwNWU0MCwgMHgyYjgwNWU0MCwgMHgxZjgwMGEwMiwgMHgxZjgwMGEwMn0sCisJezB4MDAwMGE1YTgsIDB4MmY4MDVlNDIsIDB4MmY4MDVlNDIsIDB4MjM4MDBhMDQsIDB4MjM4MDBhMDR9LAorCXsweDAwMDBhNWFjLCAweDMzODA1ZTQ0LCAweDMzODA1ZTQ0LCAweDI2ODAwYTIwLCAweDI2ODAwYTIwfSwKKwl7MHgwMDAwYTViMCwgMHgzODgwNWU2NSwgMHgzODgwNWU2NSwgMHgyYTgwMGUyMCwgMHgyYTgwMGUyMH0sCisJezB4MDAwMGE1YjQsIDB4M2M4MDVlNjksIDB4M2M4MDVlNjksIDB4MmU4MDBlMjIsIDB4MmU4MDBlMjJ9LAorCXsweDAwMDBhNWI4LCAweDQwODA1ZTZiLCAweDQwODA1ZTZiLCAweDMxODAwZTI0LCAweDMxODAwZTI0fSwKKwl7MHgwMDAwYTViYywgMHg0NDgwNWU2ZCwgMHg0NDgwNWU2ZCwgMHgzNDgwMTY0MCwgMHgzNDgwMTY0MH0sCisJezB4MDAwMGE1YzAsIDB4NDk4MDVlNzIsIDB4NDk4MDVlNzIsIDB4Mzg4MDE2NjAsIDB4Mzg4MDE2NjB9LAorCXsweDAwMDBhNWM0LCAweDRlODA1ZWIyLCAweDRlODA1ZWIyLCAweDNiODAxODYxLCAweDNiODAxODYxfSwKKwl7MHgwMDAwYTVjOCwgMHg1MzgwNWYxMiwgMHg1MzgwNWYxMiwgMHgzZTgwMWE4MSwgMHgzZTgwMWE4MX0sCisJezB4MDAwMGE1Y2MsIDB4NTk4MjVlYjIsIDB4NTk4MjVlYjIsIDB4NDI4MDFhODMsIDB4NDI4MDFhODN9LAorCXsweDAwMDBhNWQwLCAweDVlODI1ZjEyLCAweDVlODI1ZjEyLCAweDQ0ODAxYzg0LCAweDQ0ODAxYzg0fSwKKwl7MHgwMDAwYTVkNCwgMHg2MTgyN2YxMiwgMHg2MTgyN2YxMiwgMHg0ODgwMWNlMywgMHg0ODgwMWNlM30sCisJezB4MDAwMGE1ZDgsIDB4Njc4MmJmMTIsIDB4Njc4MmJmMTIsIDB4NGM4MDFjZTUsIDB4NGM4MDFjZTV9LAorCXsweDAwMDBhNWRjLCAweDZiODJiZjE0LCAweDZiODJiZjE0LCAweDUwODAxY2U5LCAweDUwODAxY2U5fSwKKwl7MHgwMDAwYTVlMCwgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NDgwMWNlYiwgMHg1NDgwMWNlYn0sCisJezB4MDAwMGE1ZTQsIDB4NmY4MmJmMTYsIDB4NmY4MmJmMTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDBhNWU4LCAweDZmODJiZjE2LCAweDZmODJiZjE2LCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKKwl7MHgwMDAwYTVlYywgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCisJezB4MDAwMGE1ZjAsIDB4NmY4MmJmMTYsIDB4NmY4MmJmMTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDBhNWY0LCAweDZmODJiZjE2LCAweDZmODJiZjE2LCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKKwl7MHgwMDAwYTVmOCwgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCisJezB4MDAwMGE1ZmMsIDB4NmY4MmJmMTYsIDB4NmY4MmJmMTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDE2MDQ0LCAweDA1NmRiMmRiLCAweDA1NmRiMmRiLCAweDA1NmRiMmRiLCAweDA1NmRiMmRifSwKKwl7MHgwMDAxNjA0OCwgMHgyNDkyNTI2NiwgMHgyNDkyNTI2NiwgMHgyNDkyNTI2NiwgMHgyNDkyNTI2Nn0sCisJezB4MDAwMTY0NDQsIDB4MDU2ZGIyZGIsIDB4MDU2ZGIyZGIsIDB4MDU2ZGIyZGIsIDB4MDU2ZGIyZGJ9LAorCXsweDAwMDE2NDQ4LCAweDI0OTI1MjY2LCAweDI0OTI1MjY2LCAweDI0OTI1MjY2LCAweDI0OTI1MjY2fSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5MzQwTW9kZXNfaGlnaF9vYl9kYl90eF9nYWluX3RhYmxlXzFwMFtdWzVdID0geworCS8qICBBZGRyICAgICAgIDVHX0hUMjAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAgMkdfSFQyMCAgKi8KKwl7MHgwMDAwYTQxMCwgMHgwMDAwNTBkOCwgMHgwMDAwNTBkOCwgMHgwMDAwNTBkOSwgMHgwMDAwNTBkOX0sCisJezB4MDAwMGE1MDAsIDB4MDAwMDIyMjAsIDB4MDAwMDIyMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNTA0LCAweDA0MDAyMjIyLCAweDA0MDAyMjIyLCAweDA0MDAwMDAyLCAweDA0MDAwMDAyfSwKKwl7MHgwMDAwYTUwOCwgMHgwOTAwMjQyMSwgMHgwOTAwMjQyMSwgMHgwODAwMDAwNCwgMHgwODAwMDAwNH0sCisJezB4MDAwMGE1MGMsIDB4MGQwMDI2MjEsIDB4MGQwMDI2MjEsIDB4MGIwMDAyMDAsIDB4MGIwMDAyMDB9LAorCXsweDAwMDBhNTEwLCAweDEzMDA0NjIwLCAweDEzMDA0NjIwLCAweDBmMDAwMjAyLCAweDBmMDAwMjAyfSwKKwl7MHgwMDAwYTUxNCwgMHgxOTAwNGEyMCwgMHgxOTAwNGEyMCwgMHgxMTAwMDQwMCwgMHgxMTAwMDQwMH0sCisJezB4MDAwMGE1MTgsIDB4MWQwMDRlMjAsIDB4MWQwMDRlMjAsIDB4MTUwMDA0MDIsIDB4MTUwMDA0MDJ9LAorCXsweDAwMDBhNTFjLCAweDIxMDA1NDIwLCAweDIxMDA1NDIwLCAweDE5MDAwNDA0LCAweDE5MDAwNDA0fSwKKwl7MHgwMDAwYTUyMCwgMHgyNjAwNWUyMCwgMHgyNjAwNWUyMCwgMHgxYjAwMDYwMywgMHgxYjAwMDYwM30sCisJezB4MDAwMGE1MjQsIDB4MmIwMDVlNDAsIDB4MmIwMDVlNDAsIDB4MWYwMDBhMDIsIDB4MWYwMDBhMDJ9LAorCXsweDAwMDBhNTI4LCAweDJmMDA1ZTQyLCAweDJmMDA1ZTQyLCAweDIzMDAwYTA0LCAweDIzMDAwYTA0fSwKKwl7MHgwMDAwYTUyYywgMHgzMzAwNWU0NCwgMHgzMzAwNWU0NCwgMHgyNjAwMGEyMCwgMHgyNjAwMGEyMH0sCisJezB4MDAwMGE1MzAsIDB4MzgwMDVlNjUsIDB4MzgwMDVlNjUsIDB4MmEwMDBlMjAsIDB4MmEwMDBlMjB9LAorCXsweDAwMDBhNTM0LCAweDNjMDA1ZTY5LCAweDNjMDA1ZTY5LCAweDJlMDAwZTIyLCAweDJlMDAwZTIyfSwKKwl7MHgwMDAwYTUzOCwgMHg0MDAwNWU2YiwgMHg0MDAwNWU2YiwgMHgzMTAwMGUyNCwgMHgzMTAwMGUyNH0sCisJezB4MDAwMGE1M2MsIDB4NDQwMDVlNmQsIDB4NDQwMDVlNmQsIDB4MzQwMDE2NDAsIDB4MzQwMDE2NDB9LAorCXsweDAwMDBhNTQwLCAweDQ5MDA1ZTcyLCAweDQ5MDA1ZTcyLCAweDM4MDAxNjYwLCAweDM4MDAxNjYwfSwKKwl7MHgwMDAwYTU0NCwgMHg0ZTAwNWViMiwgMHg0ZTAwNWViMiwgMHgzYjAwMTg2MSwgMHgzYjAwMTg2MX0sCisJezB4MDAwMGE1NDgsIDB4NTMwMDVmMTIsIDB4NTMwMDVmMTIsIDB4M2UwMDFhODEsIDB4M2UwMDFhODF9LAorCXsweDAwMDBhNTRjLCAweDU5MDI1ZWI1LCAweDU5MDI1ZWI1LCAweDQyMDAxYTgzLCAweDQyMDAxYTgzfSwKKwl7MHgwMDAwYTU1MCwgMHg1ZTAyNWYxMiwgMHg1ZTAyNWYxMiwgMHg0NDAwMWM4NCwgMHg0NDAwMWM4NH0sCisJezB4MDAwMGE1NTQsIDB4NjEwMjdmMTIsIDB4NjEwMjdmMTIsIDB4NDgwMDFjZTMsIDB4NDgwMDFjZTN9LAorCXsweDAwMDBhNTU4LCAweDY3MDJiZjEyLCAweDY3MDJiZjEyLCAweDRjMDAxY2U1LCAweDRjMDAxY2U1fSwKKwl7MHgwMDAwYTU1YywgMHg2YjAyYmYxNCwgMHg2YjAyYmYxNCwgMHg1MDAwMWNlOSwgMHg1MDAwMWNlOX0sCisJezB4MDAwMGE1NjAsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTQwMDFjZWIsIDB4NTQwMDFjZWJ9LAorCXsweDAwMDBhNTY0LCAweDZmMDJiZjE2LCAweDZmMDJiZjE2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU2OCwgMHg2ZjAyYmYxNiwgMHg2ZjAyYmYxNiwgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCisJezB4MDAwMGE1NmMsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAorCXsweDAwMDBhNTcwLCAweDZmMDJiZjE2LCAweDZmMDJiZjE2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU3NCwgMHg2ZjAyYmYxNiwgMHg2ZjAyYmYxNiwgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCisJezB4MDAwMGE1NzgsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAorCXsweDAwMDBhNTdjLCAweDZmMDJiZjE2LCAweDZmMDJiZjE2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU4MCwgMHgwMDgwMjIyMCwgMHgwMDgwMjIyMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMH0sCisJezB4MDAwMGE1ODQsIDB4MDQ4MDIyMjIsIDB4MDQ4MDIyMjIsIDB4MDQ4MDAwMDIsIDB4MDQ4MDAwMDJ9LAorCXsweDAwMDBhNTg4LCAweDA5ODAyNDIxLCAweDA5ODAyNDIxLCAweDA4ODAwMDA0LCAweDA4ODAwMDA0fSwKKwl7MHgwMDAwYTU4YywgMHgwZDgwMjYyMSwgMHgwZDgwMjYyMSwgMHgwYjgwMDIwMCwgMHgwYjgwMDIwMH0sCisJezB4MDAwMGE1OTAsIDB4MTM4MDQ2MjAsIDB4MTM4MDQ2MjAsIDB4MGY4MDAyMDIsIDB4MGY4MDAyMDJ9LAorCXsweDAwMDBhNTk0LCAweDE5ODA0YTIwLCAweDE5ODA0YTIwLCAweDExODAwNDAwLCAweDExODAwNDAwfSwKKwl7MHgwMDAwYTU5OCwgMHgxZDgwNGUyMCwgMHgxZDgwNGUyMCwgMHgxNTgwMDQwMiwgMHgxNTgwMDQwMn0sCisJezB4MDAwMGE1OWMsIDB4MjE4MDU0MjAsIDB4MjE4MDU0MjAsIDB4MTk4MDA0MDQsIDB4MTk4MDA0MDR9LAorCXsweDAwMDBhNWEwLCAweDI2ODA1ZTIwLCAweDI2ODA1ZTIwLCAweDFiODAwNjAzLCAweDFiODAwNjAzfSwKKwl7MHgwMDAwYTVhNCwgMHgyYjgwNWU0MCwgMHgyYjgwNWU0MCwgMHgxZjgwMGEwMiwgMHgxZjgwMGEwMn0sCisJezB4MDAwMGE1YTgsIDB4MmY4MDVlNDIsIDB4MmY4MDVlNDIsIDB4MjM4MDBhMDQsIDB4MjM4MDBhMDR9LAorCXsweDAwMDBhNWFjLCAweDMzODA1ZTQ0LCAweDMzODA1ZTQ0LCAweDI2ODAwYTIwLCAweDI2ODAwYTIwfSwKKwl7MHgwMDAwYTViMCwgMHgzODgwNWU2NSwgMHgzODgwNWU2NSwgMHgyYTgwMGUyMCwgMHgyYTgwMGUyMH0sCisJezB4MDAwMGE1YjQsIDB4M2M4MDVlNjksIDB4M2M4MDVlNjksIDB4MmU4MDBlMjIsIDB4MmU4MDBlMjJ9LAorCXsweDAwMDBhNWI4LCAweDQwODA1ZTZiLCAweDQwODA1ZTZiLCAweDMxODAwZTI0LCAweDMxODAwZTI0fSwKKwl7MHgwMDAwYTViYywgMHg0NDgwNWU2ZCwgMHg0NDgwNWU2ZCwgMHgzNDgwMTY0MCwgMHgzNDgwMTY0MH0sCisJezB4MDAwMGE1YzAsIDB4NDk4MDVlNzIsIDB4NDk4MDVlNzIsIDB4Mzg4MDE2NjAsIDB4Mzg4MDE2NjB9LAorCXsweDAwMDBhNWM0LCAweDRlODA1ZWIyLCAweDRlODA1ZWIyLCAweDNiODAxODYxLCAweDNiODAxODYxfSwKKwl7MHgwMDAwYTVjOCwgMHg1MzgwNWYxMiwgMHg1MzgwNWYxMiwgMHgzZTgwMWE4MSwgMHgzZTgwMWE4MX0sCisJezB4MDAwMGE1Y2MsIDB4NTk4MjVlYjIsIDB4NTk4MjVlYjIsIDB4NDI4MDFhODMsIDB4NDI4MDFhODN9LAorCXsweDAwMDBhNWQwLCAweDVlODI1ZjEyLCAweDVlODI1ZjEyLCAweDQ0ODAxYzg0LCAweDQ0ODAxYzg0fSwKKwl7MHgwMDAwYTVkNCwgMHg2MTgyN2YxMiwgMHg2MTgyN2YxMiwgMHg0ODgwMWNlMywgMHg0ODgwMWNlM30sCisJezB4MDAwMGE1ZDgsIDB4Njc4MmJmMTIsIDB4Njc4MmJmMTIsIDB4NGM4MDFjZTUsIDB4NGM4MDFjZTV9LAorCXsweDAwMDBhNWRjLCAweDZiODJiZjE0LCAweDZiODJiZjE0LCAweDUwODAxY2U5LCAweDUwODAxY2U5fSwKKwl7MHgwMDAwYTVlMCwgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NDgwMWNlYiwgMHg1NDgwMWNlYn0sCisJezB4MDAwMGE1ZTQsIDB4NmY4MmJmMTYsIDB4NmY4MmJmMTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDBhNWU4LCAweDZmODJiZjE2LCAweDZmODJiZjE2LCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKKwl7MHgwMDAwYTVlYywgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCisJezB4MDAwMGE1ZjAsIDB4NmY4MmJmMTYsIDB4NmY4MmJmMTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDBhNWY0LCAweDZmODJiZjE2LCAweDZmODJiZjE2LCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKKwl7MHgwMDAwYTVmOCwgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCisJezB4MDAwMGE1ZmMsIDB4NmY4MmJmMTYsIDB4NmY4MmJmMTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDE2MDQ0LCAweDAzYjZkMmU0LCAweDAzYjZkMmU0LCAweDAzYjZkMmU0LCAweDAzYjZkMmU0fSwKKwl7MHgwMDAxNjA0OCwgMHg4ZTQ4MTI2NiwgMHg4ZTQ4MTI2NiwgMHg4ZTQ4MTI2NiwgMHg4ZTQ4MTI2Nn0sCisJezB4MDAwMTY0NDQsIDB4MDNiNmQyZTQsIDB4MDNiNmQyZTQsIDB4MDNiNmQyZTQsIDB4MDNiNmQyZTR9LAorCXsweDAwMDE2NDQ4LCAweDhlNDgxMjY2LCAweDhlNDgxMjY2LCAweDhlNDgxMjY2LCAweDhlNDgxMjY2fSwKK307CitzdGF0aWMgY29uc3QgdTMyIGFyOTM0ME1vZGVzX3ViMTI0X3R4X2dhaW5fdGFibGVfMXAwW11bNV0gPSB7CisJLyogIEFkZHIgICAgICA1R19IVDIwICAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAyR19IVDIwICAqLworCXsweDAwMDBhNDEwLCAweDAwMDA1MGQ4LCAweDAwMDA1MGQ4LCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5fSwKKwl7MHgwMDAwYTUwMCwgMHgwMDAwMjIyMCwgMHgwMDAwMjIyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE1MDQsIDB4MDQwMDIyMjIsIDB4MDQwMDIyMjIsIDB4MDQwMDAwMDIsIDB4MDQwMDAwMDJ9LAorCXsweDAwMDBhNTA4LCAweDA5MDAyNDIxLCAweDA5MDAyNDIxLCAweDA4MDAwMDA0LCAweDA4MDAwMDA0fSwKKwl7MHgwMDAwYTUwYywgMHgwZDAwMjYyMSwgMHgwZDAwMjYyMSwgMHgwYjAwMDIwMCwgMHgwYjAwMDIwMH0sCisJezB4MDAwMGE1MTAsIDB4MTMwMDQ2MjAsIDB4MTMwMDQ2MjAsIDB4MGYwMDAyMDIsIDB4MGYwMDAyMDJ9LAorCXsweDAwMDBhNTE0LCAweDE5MDA0YTIwLCAweDE5MDA0YTIwLCAweDExMDAwNDAwLCAweDExMDAwNDAwfSwKKwl7MHgwMDAwYTUxOCwgMHgxZDAwNGUyMCwgMHgxZDAwNGUyMCwgMHgxNTAwMDQwMiwgMHgxNTAwMDQwMn0sCisJezB4MDAwMGE1MWMsIDB4MjEwMDU0MjAsIDB4MjEwMDU0MjAsIDB4MTkwMDA0MDQsIDB4MTkwMDA0MDR9LAorCXsweDAwMDBhNTIwLCAweDI2MDA1ZTIwLCAweDI2MDA1ZTIwLCAweDFiMDAwNjAzLCAweDFiMDAwNjAzfSwKKwl7MHgwMDAwYTUyNCwgMHgyYjAwNWU0MCwgMHgyYjAwNWU0MCwgMHgxZjAwMGEwMiwgMHgxZjAwMGEwMn0sCisJezB4MDAwMGE1MjgsIDB4MmYwMDVlNDIsIDB4MmYwMDVlNDIsIDB4MjMwMDBhMDQsIDB4MjMwMDBhMDR9LAorCXsweDAwMDBhNTJjLCAweDMzMDA1ZTQ0LCAweDMzMDA1ZTQ0LCAweDI2MDAwYTIwLCAweDI2MDAwYTIwfSwKKwl7MHgwMDAwYTUzMCwgMHgzODAwNWU2NSwgMHgzODAwNWU2NSwgMHgyYTAwMGUyMCwgMHgyYTAwMGUyMH0sCisJezB4MDAwMGE1MzQsIDB4M2MwMDVlNjksIDB4M2MwMDVlNjksIDB4MmUwMDBlMjIsIDB4MmUwMDBlMjJ9LAorCXsweDAwMDBhNTM4LCAweDQwMDA1ZTZiLCAweDQwMDA1ZTZiLCAweDMxMDAwZTI0LCAweDMxMDAwZTI0fSwKKwl7MHgwMDAwYTUzYywgMHg0NDAwNWU2ZCwgMHg0NDAwNWU2ZCwgMHgzNDAwMTY0MCwgMHgzNDAwMTY0MH0sCisJezB4MDAwMGE1NDAsIDB4NDkwMDVlNzIsIDB4NDkwMDVlNzIsIDB4MzgwMDE2NjAsIDB4MzgwMDE2NjB9LAorCXsweDAwMDBhNTQ0LCAweDRlMDA1ZWIyLCAweDRlMDA1ZWIyLCAweDNiMDAxODYxLCAweDNiMDAxODYxfSwKKwl7MHgwMDAwYTU0OCwgMHg1MzAwNWYxMiwgMHg1MzAwNWYxMiwgMHgzZTAwMWE4MSwgMHgzZTAwMWE4MX0sCisJezB4MDAwMGE1NGMsIDB4NTkwMjVlYjUsIDB4NTkwMjVlYjUsIDB4NDIwMDFhODMsIDB4NDIwMDFhODN9LAorCXsweDAwMDBhNTUwLCAweDVlMDI1ZjEyLCAweDVlMDI1ZjEyLCAweDQ0MDAxYzg0LCAweDQ0MDAxYzg0fSwKKwl7MHgwMDAwYTU1NCwgMHg2MTAyN2YxMiwgMHg2MTAyN2YxMiwgMHg0ODAwMWNlMywgMHg0ODAwMWNlM30sCisJezB4MDAwMGE1NTgsIDB4NjcwMmJmMTIsIDB4NjcwMmJmMTIsIDB4NGMwMDFjZTUsIDB4NGMwMDFjZTV9LAorCXsweDAwMDBhNTVjLCAweDZiMDJiZjE0LCAweDZiMDJiZjE0LCAweDUwMDAxY2U5LCAweDUwMDAxY2U5fSwKKwl7MHgwMDAwYTU2MCwgMHg2ZjAyYmYxNiwgMHg2ZjAyYmYxNiwgMHg1NDAwMWNlYiwgMHg1NDAwMWNlYn0sCisJezB4MDAwMGE1NjQsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAorCXsweDAwMDBhNTY4LCAweDZmMDJiZjE2LCAweDZmMDJiZjE2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU2YywgMHg2ZjAyYmYxNiwgMHg2ZjAyYmYxNiwgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCisJezB4MDAwMGE1NzAsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAorCXsweDAwMDBhNTc0LCAweDZmMDJiZjE2LCAweDZmMDJiZjE2LCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU3OCwgMHg2ZjAyYmYxNiwgMHg2ZjAyYmYxNiwgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCisJezB4MDAwMGE1N2MsIDB4NmYwMmJmMTYsIDB4NmYwMmJmMTYsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAorCXsweDAwMDBhNTgwLCAweDAwODAyMjIwLCAweDAwODAyMjIwLCAweDAwODAwMDAwLCAweDAwODAwMDAwfSwKKwl7MHgwMDAwYTU4NCwgMHgwNDgwMjIyMiwgMHgwNDgwMjIyMiwgMHgwNDgwMDAwMiwgMHgwNDgwMDAwMn0sCisJezB4MDAwMGE1ODgsIDB4MDk4MDI0MjEsIDB4MDk4MDI0MjEsIDB4MDg4MDAwMDQsIDB4MDg4MDAwMDR9LAorCXsweDAwMDBhNThjLCAweDBkODAyNjIxLCAweDBkODAyNjIxLCAweDBiODAwMjAwLCAweDBiODAwMjAwfSwKKwl7MHgwMDAwYTU5MCwgMHgxMzgwNDYyMCwgMHgxMzgwNDYyMCwgMHgwZjgwMDIwMiwgMHgwZjgwMDIwMn0sCisJezB4MDAwMGE1OTQsIDB4MTk4MDRhMjAsIDB4MTk4MDRhMjAsIDB4MTE4MDA0MDAsIDB4MTE4MDA0MDB9LAorCXsweDAwMDBhNTk4LCAweDFkODA0ZTIwLCAweDFkODA0ZTIwLCAweDE1ODAwNDAyLCAweDE1ODAwNDAyfSwKKwl7MHgwMDAwYTU5YywgMHgyMTgwNTQyMCwgMHgyMTgwNTQyMCwgMHgxOTgwMDQwNCwgMHgxOTgwMDQwNH0sCisJezB4MDAwMGE1YTAsIDB4MjY4MDVlMjAsIDB4MjY4MDVlMjAsIDB4MWI4MDA2MDMsIDB4MWI4MDA2MDN9LAorCXsweDAwMDBhNWE0LCAweDJiODA1ZTQwLCAweDJiODA1ZTQwLCAweDFmODAwYTAyLCAweDFmODAwYTAyfSwKKwl7MHgwMDAwYTVhOCwgMHgyZjgwNWU0MiwgMHgyZjgwNWU0MiwgMHgyMzgwMGEwNCwgMHgyMzgwMGEwNH0sCisJezB4MDAwMGE1YWMsIDB4MzM4MDVlNDQsIDB4MzM4MDVlNDQsIDB4MjY4MDBhMjAsIDB4MjY4MDBhMjB9LAorCXsweDAwMDBhNWIwLCAweDM4ODA1ZTY1LCAweDM4ODA1ZTY1LCAweDJhODAwZTIwLCAweDJhODAwZTIwfSwKKwl7MHgwMDAwYTViNCwgMHgzYzgwNWU2OSwgMHgzYzgwNWU2OSwgMHgyZTgwMGUyMiwgMHgyZTgwMGUyMn0sCisJezB4MDAwMGE1YjgsIDB4NDA4MDVlNmIsIDB4NDA4MDVlNmIsIDB4MzE4MDBlMjQsIDB4MzE4MDBlMjR9LAorCXsweDAwMDBhNWJjLCAweDQ0ODA1ZTZkLCAweDQ0ODA1ZTZkLCAweDM0ODAxNjQwLCAweDM0ODAxNjQwfSwKKwl7MHgwMDAwYTVjMCwgMHg0OTgwNWU3MiwgMHg0OTgwNWU3MiwgMHgzODgwMTY2MCwgMHgzODgwMTY2MH0sCisJezB4MDAwMGE1YzQsIDB4NGU4MDVlYjIsIDB4NGU4MDVlYjIsIDB4M2I4MDE4NjEsIDB4M2I4MDE4NjF9LAorCXsweDAwMDBhNWM4LCAweDUzODA1ZjEyLCAweDUzODA1ZjEyLCAweDNlODAxYTgxLCAweDNlODAxYTgxfSwKKwl7MHgwMDAwYTVjYywgMHg1OTgyNWViMiwgMHg1OTgyNWViMiwgMHg0MjgwMWE4MywgMHg0MjgwMWE4M30sCisJezB4MDAwMGE1ZDAsIDB4NWU4MjVmMTIsIDB4NWU4MjVmMTIsIDB4NDQ4MDFjODQsIDB4NDQ4MDFjODR9LAorCXsweDAwMDBhNWQ0LCAweDYxODI3ZjEyLCAweDYxODI3ZjEyLCAweDQ4ODAxY2UzLCAweDQ4ODAxY2UzfSwKKwl7MHgwMDAwYTVkOCwgMHg2NzgyYmYxMiwgMHg2NzgyYmYxMiwgMHg0YzgwMWNlNSwgMHg0YzgwMWNlNX0sCisJezB4MDAwMGE1ZGMsIDB4NmI4MmJmMTQsIDB4NmI4MmJmMTQsIDB4NTA4MDFjZTksIDB4NTA4MDFjZTl9LAorCXsweDAwMDBhNWUwLCAweDZmODJiZjE2LCAweDZmODJiZjE2LCAweDU0ODAxY2ViLCAweDU0ODAxY2VifSwKKwl7MHgwMDAwYTVlNCwgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCisJezB4MDAwMGE1ZTgsIDB4NmY4MmJmMTYsIDB4NmY4MmJmMTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDBhNWVjLCAweDZmODJiZjE2LCAweDZmODJiZjE2LCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKKwl7MHgwMDAwYTVmMCwgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCisJezB4MDAwMGE1ZjQsIDB4NmY4MmJmMTYsIDB4NmY4MmJmMTYsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDBhNWY4LCAweDZmODJiZjE2LCAweDZmODJiZjE2LCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKKwl7MHgwMDAwYTVmYywgMHg2ZjgyYmYxNiwgMHg2ZjgyYmYxNiwgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCisJezB4MDAwMTYwNDQsIDB4MDM2ZGIyZGIsIDB4MDM2ZGIyZGIsIDB4MDM2ZGIyZGIsIDB4MDM2ZGIyZGJ9LAorCXsweDAwMDE2MDQ4LCAweDY5YjY1MjY2LCAweDY5YjY1MjY2LCAweDY5YjY1MjY2LCAweDY5YjY1MjY2fSwKKwl7MHgwMDAxNjQ0NCwgMHgwMzZkYjJkYiwgMHgwMzZkYjJkYiwgMHgwMzZkYjJkYiwgMHgwMzZkYjJkYn0sCisJezB4MDAwMTY0NDgsIDB4NjliNjUyNjYsIDB4NjliNjUyNjYsIDB4NjliNjUyNjYsIDB4NjliNjUyNjZ9LAorfTsKKworCitzdGF0aWMgY29uc3QgdTMyIGFyOTM0MENvbW1vbl9yeF9nYWluX3RhYmxlXzFwMFtdWzJdID0geworCS8qICAgQWRkciAgICAgYWxsbW9kZXMgKi8KKwl7MHgwMDAwYTAwMCwgMHgwMDAxMDAwMH0sCisJezB4MDAwMGEwMDQsIDB4MDAwMzAwMDJ9LAorCXsweDAwMDBhMDA4LCAweDAwMDUwMDA0fSwKKwl7MHgwMDAwYTAwYywgMHgwMDgxMDA4MH0sCisJezB4MDAwMGEwMTAsIDB4MDA4MzAwODJ9LAorCXsweDAwMDBhMDE0LCAweDAxODEwMTgwfSwKKwl7MHgwMDAwYTAxOCwgMHgwMTgzMDE4Mn0sCisJezB4MDAwMGEwMWMsIDB4MDE4NTAxODR9LAorCXsweDAwMDBhMDIwLCAweDAxODkwMTg4fSwKKwl7MHgwMDAwYTAyNCwgMHgwMThiMDE4YX0sCisJezB4MDAwMGEwMjgsIDB4MDE4ZDAxOGN9LAorCXsweDAwMDBhMDJjLCAweDAxOTEwMTkwfSwKKwl7MHgwMDAwYTAzMCwgMHgwMTkzMDE5Mn0sCisJezB4MDAwMGEwMzQsIDB4MDE5NTAxOTR9LAorCXsweDAwMDBhMDM4LCAweDAzOGEwMTk2fSwKKwl7MHgwMDAwYTAzYywgMHgwMzhjMDM4Yn0sCisJezB4MDAwMGEwNDAsIDB4MDM5MDAzOGR9LAorCXsweDAwMDBhMDQ0LCAweDAzOTIwMzkxfSwKKwl7MHgwMDAwYTA0OCwgMHgwMzk0MDM5M30sCisJezB4MDAwMGEwNGMsIDB4MDM5NjAzOTV9LAorCXsweDAwMDBhMDUwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA1NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDVjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA2MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA2YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDc0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwN2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDgwLCAweDIyMjIyMjI5fSwKKwl7MHgwMDAwYTA4NCwgMHgxZDFkMWQxZH0sCisJezB4MDAwMGEwODgsIDB4MWQxZDFkMWR9LAorCXsweDAwMDBhMDhjLCAweDFkMWQxZDFkfSwKKwl7MHgwMDAwYTA5MCwgMHgxNzFkMWQxZH0sCisJezB4MDAwMGEwOTQsIDB4MTExMTE3MTd9LAorCXsweDAwMDBhMDk4LCAweDAwMDMwMzExfSwKKwl7MHgwMDAwYTA5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGE0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBhOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBiNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBjMCwgMHgwMDFmMDAwMH0sCisJezB4MDAwMGEwYzQsIDB4MDEwMDAxMDF9LAorCXsweDAwMDBhMGM4LCAweDAxMWUwMTFmfSwKKwl7MHgwMDAwYTBjYywgMHgwMTFjMDExZH0sCisJezB4MDAwMGEwZDAsIDB4MDIwMzAyMDR9LAorCXsweDAwMDBhMGQ0LCAweDAyMDEwMjAyfSwKKwl7MHgwMDAwYTBkOCwgMHgwMjFmMDIwMH0sCisJezB4MDAwMGEwZGMsIDB4MDMwMjAyMWV9LAorCXsweDAwMDBhMGUwLCAweDAzMDAwMzAxfSwKKwl7MHgwMDAwYTBlNCwgMHgwMzFlMDMxZn0sCisJezB4MDAwMGEwZTgsIDB4MDQwMjAzMWR9LAorCXsweDAwMDBhMGVjLCAweDA0MDAwNDAxfSwKKwl7MHgwMDAwYTBmMCwgMHgwNDFlMDQxZn0sCisJezB4MDAwMGEwZjQsIDB4MDUwMjA0MWR9LAorCXsweDAwMDBhMGY4LCAweDA1MDAwNTAxfSwKKwl7MHgwMDAwYTBmYywgMHgwNTFlMDUxZn0sCisJezB4MDAwMGExMDAsIDB4MDYwMTA2MDJ9LAorCXsweDAwMDBhMTA0LCAweDA2MWYwNjAwfSwKKwl7MHgwMDAwYTEwOCwgMHgwNjFkMDYxZX0sCisJezB4MDAwMGExMGMsIDB4MDcwMjA3MDN9LAorCXsweDAwMDBhMTEwLCAweDA3MDAwNzAxfSwKKwl7MHgwMDAwYTExNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTEyMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTEyYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTM0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTEzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTQwLCAweDAwMWYwMDAwfSwKKwl7MHgwMDAwYTE0NCwgMHgwMTAwMDEwMX0sCisJezB4MDAwMGExNDgsIDB4MDExZTAxMWZ9LAorCXsweDAwMDBhMTRjLCAweDAxMWMwMTFkfSwKKwl7MHgwMDAwYTE1MCwgMHgwMjAzMDIwNH0sCisJezB4MDAwMGExNTQsIDB4MDIwMTAyMDJ9LAorCXsweDAwMDBhMTU4LCAweDAyMWYwMjAwfSwKKwl7MHgwMDAwYTE1YywgMHgwMzAyMDIxZX0sCisJezB4MDAwMGExNjAsIDB4MDMwMDAzMDF9LAorCXsweDAwMDBhMTY0LCAweDAzMWUwMzFmfSwKKwl7MHgwMDAwYTE2OCwgMHgwNDAyMDMxZH0sCisJezB4MDAwMGExNmMsIDB4MDQwMDA0MDF9LAorCXsweDAwMDBhMTcwLCAweDA0MWUwNDFmfSwKKwl7MHgwMDAwYTE3NCwgMHgwNTAyMDQxZH0sCisJezB4MDAwMGExNzgsIDB4MDUwMDA1MDF9LAorCXsweDAwMDBhMTdjLCAweDA1MWUwNTFmfSwKKwl7MHgwMDAwYTE4MCwgMHgwNjAxMDYwMn0sCisJezB4MDAwMGExODQsIDB4MDYxZjA2MDB9LAorCXsweDAwMDBhMTg4LCAweDA2MWQwNjFlfSwKKwl7MHgwMDAwYTE4YywgMHgwNzAyMDcwM30sCisJezB4MDAwMGExOTAsIDB4MDcwMDA3MDF9LAorCXsweDAwMDBhMTk0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTE5OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExOWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFhNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFiMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWM0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFjOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExY2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWQwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFkNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWRjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFlMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWU4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFlYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZjAsIDB4MDAwMDAzOTZ9LAorCXsweDAwMDBhMWY0LCAweDAwMDAwMzk2fSwKKwl7MHgwMDAwYTFmOCwgMHgwMDAwMDM5Nn0sCisJezB4MDAwMGExZmMsIDB4MDAwMDAxOTZ9LAorCXsweDAwMDBiMDAwLCAweDAwMDEwMDAwfSwKKwl7MHgwMDAwYjAwNCwgMHgwMDAzMDAwMn0sCisJezB4MDAwMGIwMDgsIDB4MDAwNTAwMDR9LAorCXsweDAwMDBiMDBjLCAweDAwODEwMDgwfSwKKwl7MHgwMDAwYjAxMCwgMHgwMDgzMDA4Mn0sCisJezB4MDAwMGIwMTQsIDB4MDE4MTAxODB9LAorCXsweDAwMDBiMDE4LCAweDAxODMwMTgyfSwKKwl7MHgwMDAwYjAxYywgMHgwMTg1MDE4NH0sCisJezB4MDAwMGIwMjAsIDB4MDI4MTAyODB9LAorCXsweDAwMDBiMDI0LCAweDAyODMwMjgyfSwKKwl7MHgwMDAwYjAyOCwgMHgwMjg1MDI4NH0sCisJezB4MDAwMGIwMmMsIDB4MDI4OTAyODh9LAorCXsweDAwMDBiMDMwLCAweDAyOGIwMjhhfSwKKwl7MHgwMDAwYjAzNCwgMHgwMzg4MDI4Y30sCisJezB4MDAwMGIwMzgsIDB4MDM4YTAzODl9LAorCXsweDAwMDBiMDNjLCAweDAzOGMwMzhifSwKKwl7MHgwMDAwYjA0MCwgMHgwMzkwMDM4ZH0sCisJezB4MDAwMGIwNDQsIDB4MDM5MjAzOTF9LAorCXsweDAwMDBiMDQ4LCAweDAzOTQwMzkzfSwKKwl7MHgwMDAwYjA0YywgMHgwMzk2MDM5NX0sCisJezB4MDAwMGIwNTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDU0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA1OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwNWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA2NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwNjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDZjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA3MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwNzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDc4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA3YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwODAsIDB4MzIzMjMyMzJ9LAorCXsweDAwMDBiMDg0LCAweDJmMmYzMjMyfSwKKwl7MHgwMDAwYjA4OCwgMHgyMzI4MmEyZH0sCisJezB4MDAwMGIwOGMsIDB4MWMxZTIxMjN9LAorCXsweDAwMDBiMDkwLCAweDE0MTcxOTE5fSwKKwl7MHgwMDAwYjA5NCwgMHgwZTBlMTIxNH0sCisJezB4MDAwMGIwOTgsIDB4MDMwNTA3MDd9LAorCXsweDAwMDBiMDljLCAweDAwMDMwMzAzfSwKKwl7MHgwMDAwYjBhMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwYTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMGE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjBhYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwYjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMGI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjBiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMGMwLCAweDAwM2YwMDIwfSwKKwl7MHgwMDAwYjBjNCwgMHgwMDQwMDA0MX0sCisJezB4MDAwMGIwYzgsIDB4MDE0MDAwNWZ9LAorCXsweDAwMDBiMGNjLCAweDAxNjAwMTVmfSwKKwl7MHgwMDAwYjBkMCwgMHgwMTdlMDE3Zn0sCisJezB4MDAwMGIwZDQsIDB4MDI0MTAyNDJ9LAorCXsweDAwMDBiMGQ4LCAweDAyNWYwMjQwfSwKKwl7MHgwMDAwYjBkYywgMHgwMjdmMDI2MH0sCisJezB4MDAwMGIwZTAsIDB4MDM0MTAyN2V9LAorCXsweDAwMDBiMGU0LCAweDAzNWYwMzQwfSwKKwl7MHgwMDAwYjBlOCwgMHgwMzdmMDM2MH0sCisJezB4MDAwMGIwZWMsIDB4MDQ0MDA0NDF9LAorCXsweDAwMDBiMGYwLCAweDA0NjAwNDVmfSwKKwl7MHgwMDAwYjBmNCwgMHgwNTQxMDQ3Zn0sCisJezB4MDAwMGIwZjgsIDB4MDU1ZjA1NDB9LAorCXsweDAwMDBiMGZjLCAweDA1N2YwNTYwfSwKKwl7MHgwMDAwYjEwMCwgMHgwNjQwMDY0MX0sCisJezB4MDAwMGIxMDQsIDB4MDY2MDA2NWZ9LAorCXsweDAwMDBiMTA4LCAweDA2N2UwNjdmfSwKKwl7MHgwMDAwYjEwYywgMHgwNzQxMDc0Mn0sCisJezB4MDAwMGIxMTAsIDB4MDc1ZjA3NDB9LAorCXsweDAwMDBiMTE0LCAweDA3N2YwNzYwfSwKKwl7MHgwMDAwYjExOCwgMHgwNzgwMDc4MX0sCisJezB4MDAwMGIxMWMsIDB4MDdhMDA3OWZ9LAorCXsweDAwMDBiMTIwLCAweDA3YzEwN2JmfSwKKwl7MHgwMDAwYjEyNCwgMHgwMDAwMDdjMH0sCisJezB4MDAwMGIxMjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMTJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjEzMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxMzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMTM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjEzYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxNDAsIDB4MDAzZjAwMjB9LAorCXsweDAwMDBiMTQ0LCAweDAwNDAwMDQxfSwKKwl7MHgwMDAwYjE0OCwgMHgwMTQwMDA1Zn0sCisJezB4MDAwMGIxNGMsIDB4MDE2MDAxNWZ9LAorCXsweDAwMDBiMTUwLCAweDAxN2UwMTdmfSwKKwl7MHgwMDAwYjE1NCwgMHgwMjQxMDI0Mn0sCisJezB4MDAwMGIxNTgsIDB4MDI1ZjAyNDB9LAorCXsweDAwMDBiMTVjLCAweDAyN2YwMjYwfSwKKwl7MHgwMDAwYjE2MCwgMHgwMzQxMDI3ZX0sCisJezB4MDAwMGIxNjQsIDB4MDM1ZjAzNDB9LAorCXsweDAwMDBiMTY4LCAweDAzN2YwMzYwfSwKKwl7MHgwMDAwYjE2YywgMHgwNDQwMDQ0MX0sCisJezB4MDAwMGIxNzAsIDB4MDQ2MDA0NWZ9LAorCXsweDAwMDBiMTc0LCAweDA1NDEwNDdmfSwKKwl7MHgwMDAwYjE3OCwgMHgwNTVmMDU0MH0sCisJezB4MDAwMGIxN2MsIDB4MDU3ZjA1NjB9LAorCXsweDAwMDBiMTgwLCAweDA2NDAwNjQxfSwKKwl7MHgwMDAwYjE4NCwgMHgwNjYwMDY1Zn0sCisJezB4MDAwMGIxODgsIDB4MDY3ZTA2N2Z9LAorCXsweDAwMDBiMThjLCAweDA3NDEwNzQyfSwKKwl7MHgwMDAwYjE5MCwgMHgwNzVmMDc0MH0sCisJezB4MDAwMGIxOTQsIDB4MDc3ZjA3NjB9LAorCXsweDAwMDBiMTk4LCAweDA3ODAwNzgxfSwKKwl7MHgwMDAwYjE5YywgMHgwN2EwMDc5Zn0sCisJezB4MDAwMGIxYTAsIDB4MDdjMTA3YmZ9LAorCXsweDAwMDBiMWE0LCAweDAwMDAwN2MwfSwKKwl7MHgwMDAwYjFhOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxYWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFiNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxYjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFjMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxYzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFjYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxZDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWQ0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFkOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxZGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWUwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFlNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxZTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWVjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFmMCwgMHgwMDAwMDM5Nn0sCisJezB4MDAwMGIxZjQsIDB4MDAwMDAzOTZ9LAorCXsweDAwMDBiMWY4LCAweDAwMDAwMzk2fSwKKwl7MHgwMDAwYjFmYywgMHgwMDAwMDE5Nn0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFyOTM0ME1vZGVzX2xvd19vYl9kYl90eF9nYWluX3RhYmxlXzFwMFtdWzVdID0geworCS8qICBBZGRyICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAgMkdfSFQyMCAgKi8KKwl7MHgwMDAwYTQxMCwgMHgwMDAwNTBkOSwgMHgwMDAwNTBkOSwgMHgwMDAwNTBkOSwgMHgwMDAwNTBkOX0sCisJezB4MDAwMGE1MDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNTA0LCAweDA2MDAwMDAzLCAweDA2MDAwMDAzLCAweDA0MDAwMDAyLCAweDA0MDAwMDAyfSwKKwl7MHgwMDAwYTUwOCwgMHgwYTAwMDAyMCwgMHgwYTAwMDAyMCwgMHgwODAwMDAwNCwgMHgwODAwMDAwNH0sCisJezB4MDAwMGE1MGMsIDB4MTAwMDAwMjMsIDB4MTAwMDAwMjMsIDB4MGIwMDAyMDAsIDB4MGIwMDAyMDB9LAorCXsweDAwMDBhNTEwLCAweDE2MDAwMjIwLCAweDE2MDAwMjIwLCAweDBmMDAwMjAyLCAweDBmMDAwMjAyfSwKKwl7MHgwMDAwYTUxNCwgMHgxYzAwMDIyMywgMHgxYzAwMDIyMywgMHgxMjAwMDQwMCwgMHgxMjAwMDQwMH0sCisJezB4MDAwMGE1MTgsIDB4MjEwMjAyMjAsIDB4MjEwMjAyMjAsIDB4MTYwMDA0MDIsIDB4MTYwMDA0MDJ9LAorCXsweDAwMDBhNTFjLCAweDI3MDIwMjIzLCAweDI3MDIwMjIzLCAweDE5MDAwNDA0LCAweDE5MDAwNDA0fSwKKwl7MHgwMDAwYTUyMCwgMHgyYjAyMjIyMCwgMHgyYjAyMjIyMCwgMHgxYzAwMDYwMywgMHgxYzAwMDYwM30sCisJezB4MDAwMGE1MjQsIDB4MmYwMjIyMjIsIDB4MmYwMjIyMjIsIDB4MjEwMDBhMDIsIDB4MjEwMDBhMDJ9LAorCXsweDAwMDBhNTI4LCAweDM0MDIyMjI1LCAweDM0MDIyMjI1LCAweDI1MDAwYTA0LCAweDI1MDAwYTA0fSwKKwl7MHgwMDAwYTUyYywgMHgzYTAyMjIyYSwgMHgzYTAyMjIyYSwgMHgyODAwMGEyMCwgMHgyODAwMGEyMH0sCisJezB4MDAwMGE1MzAsIDB4M2UwMjIyMmMsIDB4M2UwMjIyMmMsIDB4MmMwMDBlMjAsIDB4MmMwMDBlMjB9LAorCXsweDAwMDBhNTM0LCAweDQyMDIyNDJhLCAweDQyMDIyNDJhLCAweDMwMDAwZTIyLCAweDMwMDAwZTIyfSwKKwl7MHgwMDAwYTUzOCwgMHg0NzAyMjQ0YSwgMHg0NzAyMjQ0YSwgMHgzNDAwMGUyNCwgMHgzNDAwMGUyNH0sCisJezB4MDAwMGE1M2MsIDB4NGIwMjI0NGMsIDB4NGIwMjI0NGMsIDB4MzgwMDE2NDAsIDB4MzgwMDE2NDB9LAorCXsweDAwMDBhNTQwLCAweDRlMDIyNDZjLCAweDRlMDIyNDZjLCAweDNjMDAxNjYwLCAweDNjMDAxNjYwfSwKKwl7MHgwMDAwYTU0NCwgMHg1MzAyMjY2YywgMHg1MzAyMjY2YywgMHgzZjAwMTg2MSwgMHgzZjAwMTg2MX0sCisJezB4MDAwMGE1NDgsIDB4NTcwMjI4NmMsIDB4NTcwMjI4NmMsIDB4NDMwMDFhODEsIDB4NDMwMDFhODF9LAorCXsweDAwMDBhNTRjLCAweDVjMDQyODZiLCAweDVjMDQyODZiLCAweDQ3MDAxYTgzLCAweDQ3MDAxYTgzfSwKKwl7MHgwMDAwYTU1MCwgMHg2MTA0MmE2YywgMHg2MTA0MmE2YywgMHg0YTAwMWM4NCwgMHg0YTAwMWM4NH0sCisJezB4MDAwMGE1NTQsIDB4NjYwNjJhNmMsIDB4NjYwNjJhNmMsIDB4NGUwMDFjZTMsIDB4NGUwMDFjZTN9LAorCXsweDAwMDBhNTU4LCAweDZiMDYyZTZjLCAweDZiMDYyZTZjLCAweDUyMDAxY2U1LCAweDUyMDAxY2U1fSwKKwl7MHgwMDAwYTU1YywgMHg3MDA2MzA4YywgMHg3MDA2MzA4YywgMHg1NjAwMWNlOSwgMHg1NjAwMWNlOX0sCisJezB4MDAwMGE1NjAsIDB4NzMwYTMwOGEsIDB4NzMwYTMwOGEsIDB4NWEwMDFjZWIsIDB4NWEwMDFjZWJ9LAorCXsweDAwMDBhNTY0LCAweDc3MGEzMDhjLCAweDc3MGEzMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKKwl7MHgwMDAwYTU2OCwgMHg3NzBhMzA4YywgMHg3NzBhMzA4YywgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCisJezB4MDAwMGE1NmMsIDB4NzcwYTMwOGMsIDB4NzcwYTMwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAorCXsweDAwMDBhNTcwLCAweDc3MGEzMDhjLCAweDc3MGEzMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKKwl7MHgwMDAwYTU3NCwgMHg3NzBhMzA4YywgMHg3NzBhMzA4YywgMHg1ZDAwMWVlYywgMHg1ZDAwMWVlY30sCisJezB4MDAwMGE1NzgsIDB4NzcwYTMwOGMsIDB4NzcwYTMwOGMsIDB4NWQwMDFlZWMsIDB4NWQwMDFlZWN9LAorCXsweDAwMDBhNTdjLCAweDc3MGEzMDhjLCAweDc3MGEzMDhjLCAweDVkMDAxZWVjLCAweDVkMDAxZWVjfSwKKwl7MHgwMDAwYTU4MCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMH0sCisJezB4MDAwMGE1ODQsIDB4MDY4MDAwMDMsIDB4MDY4MDAwMDMsIDB4MDQ4MDAwMDIsIDB4MDQ4MDAwMDJ9LAorCXsweDAwMDBhNTg4LCAweDBhODAwMDIwLCAweDBhODAwMDIwLCAweDA4ODAwMDA0LCAweDA4ODAwMDA0fSwKKwl7MHgwMDAwYTU4YywgMHgxMDgwMDAyMywgMHgxMDgwMDAyMywgMHgwYjgwMDIwMCwgMHgwYjgwMDIwMH0sCisJezB4MDAwMGE1OTAsIDB4MTY4MDAyMjAsIDB4MTY4MDAyMjAsIDB4MGY4MDAyMDIsIDB4MGY4MDAyMDJ9LAorCXsweDAwMDBhNTk0LCAweDFjODAwMjIzLCAweDFjODAwMjIzLCAweDEyODAwNDAwLCAweDEyODAwNDAwfSwKKwl7MHgwMDAwYTU5OCwgMHgyMTgyMDIyMCwgMHgyMTgyMDIyMCwgMHgxNjgwMDQwMiwgMHgxNjgwMDQwMn0sCisJezB4MDAwMGE1OWMsIDB4Mjc4MjAyMjMsIDB4Mjc4MjAyMjMsIDB4MTk4MDA0MDQsIDB4MTk4MDA0MDR9LAorCXsweDAwMDBhNWEwLCAweDJiODIyMjIwLCAweDJiODIyMjIwLCAweDFjODAwNjAzLCAweDFjODAwNjAzfSwKKwl7MHgwMDAwYTVhNCwgMHgyZjgyMjIyMiwgMHgyZjgyMjIyMiwgMHgyMTgwMGEwMiwgMHgyMTgwMGEwMn0sCisJezB4MDAwMGE1YTgsIDB4MzQ4MjIyMjUsIDB4MzQ4MjIyMjUsIDB4MjU4MDBhMDQsIDB4MjU4MDBhMDR9LAorCXsweDAwMDBhNWFjLCAweDNhODIyMjJhLCAweDNhODIyMjJhLCAweDI4ODAwYTIwLCAweDI4ODAwYTIwfSwKKwl7MHgwMDAwYTViMCwgMHgzZTgyMjIyYywgMHgzZTgyMjIyYywgMHgyYzgwMGUyMCwgMHgyYzgwMGUyMH0sCisJezB4MDAwMGE1YjQsIDB4NDI4MjI0MmEsIDB4NDI4MjI0MmEsIDB4MzA4MDBlMjIsIDB4MzA4MDBlMjJ9LAorCXsweDAwMDBhNWI4LCAweDQ3ODIyNDRhLCAweDQ3ODIyNDRhLCAweDM0ODAwZTI0LCAweDM0ODAwZTI0fSwKKwl7MHgwMDAwYTViYywgMHg0YjgyMjQ0YywgMHg0YjgyMjQ0YywgMHgzODgwMTY0MCwgMHgzODgwMTY0MH0sCisJezB4MDAwMGE1YzAsIDB4NGU4MjI0NmMsIDB4NGU4MjI0NmMsIDB4M2M4MDE2NjAsIDB4M2M4MDE2NjB9LAorCXsweDAwMDBhNWM0LCAweDUzODIyNjZjLCAweDUzODIyNjZjLCAweDNmODAxODYxLCAweDNmODAxODYxfSwKKwl7MHgwMDAwYTVjOCwgMHg1NzgyMjg2YywgMHg1NzgyMjg2YywgMHg0MzgwMWE4MSwgMHg0MzgwMWE4MX0sCisJezB4MDAwMGE1Y2MsIDB4NWM4NDI4NmIsIDB4NWM4NDI4NmIsIDB4NDc4MDFhODMsIDB4NDc4MDFhODN9LAorCXsweDAwMDBhNWQwLCAweDYxODQyYTZjLCAweDYxODQyYTZjLCAweDRhODAxYzg0LCAweDRhODAxYzg0fSwKKwl7MHgwMDAwYTVkNCwgMHg2Njg2MmE2YywgMHg2Njg2MmE2YywgMHg0ZTgwMWNlMywgMHg0ZTgwMWNlM30sCisJezB4MDAwMGE1ZDgsIDB4NmI4NjJlNmMsIDB4NmI4NjJlNmMsIDB4NTI4MDFjZTUsIDB4NTI4MDFjZTV9LAorCXsweDAwMDBhNWRjLCAweDcwODYzMDhjLCAweDcwODYzMDhjLCAweDU2ODAxY2U5LCAweDU2ODAxY2U5fSwKKwl7MHgwMDAwYTVlMCwgMHg3MzhhMzA4YSwgMHg3MzhhMzA4YSwgMHg1YTgwMWNlYiwgMHg1YTgwMWNlYn0sCisJezB4MDAwMGE1ZTQsIDB4Nzc4YTMwOGMsIDB4Nzc4YTMwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDBhNWU4LCAweDc3OGEzMDhjLCAweDc3OGEzMDhjLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKKwl7MHgwMDAwYTVlYywgMHg3NzhhMzA4YywgMHg3NzhhMzA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCisJezB4MDAwMGE1ZjAsIDB4Nzc4YTMwOGMsIDB4Nzc4YTMwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDBhNWY0LCAweDc3OGEzMDhjLCAweDc3OGEzMDhjLCAweDVkODAxZWVjLCAweDVkODAxZWVjfSwKKwl7MHgwMDAwYTVmOCwgMHg3NzhhMzA4YywgMHg3NzhhMzA4YywgMHg1ZDgwMWVlYywgMHg1ZDgwMWVlY30sCisJezB4MDAwMGE1ZmMsIDB4Nzc4YTMwOGMsIDB4Nzc4YTMwOGMsIDB4NWQ4MDFlZWMsIDB4NWQ4MDFlZWN9LAorCXsweDAwMDE2MDQ0LCAweDA1NmRiMmRiLCAweDA1NmRiMmRiLCAweDA1NmRiMmRiLCAweDA1NmRiMmRifSwKKwl7MHgwMDAxNjA0OCwgMHgyNDkyNTI2NiwgMHgyNDkyNTI2NiwgMHgyNDkyNTI2NiwgMHgyNDkyNTI2Nn0sCisJezB4MDAwMTY0NDQsIDB4MDU2ZGIyZGIsIDB4MDU2ZGIyZGIsIDB4MDU2ZGIyZGIsIDB4MDU2ZGIyZGJ9LAorCXsweDAwMDE2NDQ4LCAweDI0OTI1MjY2LCAweDI0OTI1MjY2LCAweDI0OTI1MjY2LCAweDI0OTI1MjY2fSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYXI5MzQwTW9kZXNfbWl4ZWRfb2JfZGJfdHhfZ2Fpbl90YWJsZV8xcDBbXVs1XSA9IHsKKwkvKiAgQWRkciAgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgIDJHX0hUMjAgICovCisJezB4MDAwMGE0MTAsIDB4MDAwMDUwZDksIDB4MDAwMDUwZDksIDB4MDAwMDUwZDksIDB4MDAwMDUwZDl9LAorCXsweDAwMDBhNTAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTUwNCwgMHgwNjAwMDAwMywgMHgwNjAwMDAwMywgMHgwNDAwMDAwMiwgMHgwNDAwMDAwMn0sCisJezB4MDAwMGE1MDgsIDB4MGEwMDAwMjAsIDB4MGEwMDAwMjAsIDB4MDgwMDAwMDQsIDB4MDgwMDAwMDR9LAorCXsweDAwMDBhNTBjLCAweDEwMDAwMDIzLCAweDEwMDAwMDIzLCAweDBiMDAwMjAwLCAweDBiMDAwMjAwfSwKKwl7MHgwMDAwYTUxMCwgMHgxNjAwMDIyMCwgMHgxNjAwMDIyMCwgMHgwZjAwMDIwMiwgMHgwZjAwMDIwMn0sCisJezB4MDAwMGE1MTQsIDB4MWMwMDAyMjMsIDB4MWMwMDAyMjMsIDB4MTEwMDA0MDAsIDB4MTEwMDA0MDB9LAorCXsweDAwMDBhNTE4LCAweDIxMDIwMjIwLCAweDIxMDIwMjIwLCAweDE1MDAwNDAyLCAweDE1MDAwNDAyfSwKKwl7MHgwMDAwYTUxYywgMHgyNzAyMDIyMywgMHgyNzAyMDIyMywgMHgxOTAwMDQwNCwgMHgxOTAwMDQwNH0sCisJezB4MDAwMGE1MjAsIDB4MmIwMjIyMjAsIDB4MmIwMjIyMjAsIDB4MWIwMDA2MDMsIDB4MWIwMDA2MDN9LAorCXsweDAwMDBhNTI0LCAweDJmMDIyMjIyLCAweDJmMDIyMjIyLCAweDFmMDAwYTAyLCAweDFmMDAwYTAyfSwKKwl7MHgwMDAwYTUyOCwgMHgzNDAyMjIyNSwgMHgzNDAyMjIyNSwgMHgyMzAwMGEwNCwgMHgyMzAwMGEwNH0sCisJezB4MDAwMGE1MmMsIDB4M2EwMjIyMmEsIDB4M2EwMjIyMmEsIDB4MjYwMDBhMjAsIDB4MjYwMDBhMjB9LAorCXsweDAwMDBhNTMwLCAweDNlMDIyMjJjLCAweDNlMDIyMjJjLCAweDJhMDAwZTIwLCAweDJhMDAwZTIwfSwKKwl7MHgwMDAwYTUzNCwgMHg0MjAyMjQyYSwgMHg0MjAyMjQyYSwgMHgyZTAwMGUyMiwgMHgyZTAwMGUyMn0sCisJezB4MDAwMGE1MzgsIDB4NDcwMjI0NGEsIDB4NDcwMjI0NGEsIDB4MzEwMDBlMjQsIDB4MzEwMDBlMjR9LAorCXsweDAwMDBhNTNjLCAweDRiMDIyNDRjLCAweDRiMDIyNDRjLCAweDM0MDAxNjQwLCAweDM0MDAxNjQwfSwKKwl7MHgwMDAwYTU0MCwgMHg0ZTAyMjQ2YywgMHg0ZTAyMjQ2YywgMHgzODAwMTY2MCwgMHgzODAwMTY2MH0sCisJezB4MDAwMGE1NDQsIDB4NTMwMjI2NmMsIDB4NTMwMjI2NmMsIDB4M2IwMDE4NjEsIDB4M2IwMDE4NjF9LAorCXsweDAwMDBhNTQ4LCAweDU3MDIyODZjLCAweDU3MDIyODZjLCAweDNlMDAxYTgxLCAweDNlMDAxYTgxfSwKKwl7MHgwMDAwYTU0YywgMHg1YzA0Mjg2YiwgMHg1YzA0Mjg2YiwgMHg0MjAwMWE4MywgMHg0MjAwMWE4M30sCisJezB4MDAwMGE1NTAsIDB4NjEwNDJhNmMsIDB4NjEwNDJhNmMsIDB4NDQwMDFjODQsIDB4NDQwMDFjODR9LAorCXsweDAwMDBhNTU0LCAweDY2MDYyYTZjLCAweDY2MDYyYTZjLCAweDQ4MDAxY2UzLCAweDQ4MDAxY2UzfSwKKwl7MHgwMDAwYTU1OCwgMHg2YjA2MmU2YywgMHg2YjA2MmU2YywgMHg0YzAwMWNlNSwgMHg0YzAwMWNlNX0sCisJezB4MDAwMGE1NWMsIDB4NzAwNjMwOGMsIDB4NzAwNjMwOGMsIDB4NTAwMDFjZTksIDB4NTAwMDFjZTl9LAorCXsweDAwMDBhNTYwLCAweDczMGEzMDhhLCAweDczMGEzMDhhLCAweDU0MDAxY2ViLCAweDU0MDAxY2VifSwKKwl7MHgwMDAwYTU2NCwgMHg3NzBhMzA4YywgMHg3NzBhMzA4YywgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCisJezB4MDAwMGE1NjgsIDB4NzcwYTMwOGMsIDB4NzcwYTMwOGMsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAorCXsweDAwMDBhNTZjLCAweDc3MGEzMDhjLCAweDc3MGEzMDhjLCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU3MCwgMHg3NzBhMzA4YywgMHg3NzBhMzA4YywgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCisJezB4MDAwMGE1NzQsIDB4NzcwYTMwOGMsIDB4NzcwYTMwOGMsIDB4NTYwMDFlZWMsIDB4NTYwMDFlZWN9LAorCXsweDAwMDBhNTc4LCAweDc3MGEzMDhjLCAweDc3MGEzMDhjLCAweDU2MDAxZWVjLCAweDU2MDAxZWVjfSwKKwl7MHgwMDAwYTU3YywgMHg3NzBhMzA4YywgMHg3NzBhMzA4YywgMHg1NjAwMWVlYywgMHg1NjAwMWVlY30sCisJezB4MDAwMGE1ODAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDB9LAorCXsweDAwMDBhNTg0LCAweDA2ODAwMDAzLCAweDA2ODAwMDAzLCAweDA0ODAwMDAyLCAweDA0ODAwMDAyfSwKKwl7MHgwMDAwYTU4OCwgMHgwYTgwMDAyMCwgMHgwYTgwMDAyMCwgMHgwODgwMDAwNCwgMHgwODgwMDAwNH0sCisJezB4MDAwMGE1OGMsIDB4MTA4MDAwMjMsIDB4MTA4MDAwMjMsIDB4MGI4MDAyMDAsIDB4MGI4MDAyMDB9LAorCXsweDAwMDBhNTkwLCAweDE2ODAwMjIwLCAweDE2ODAwMjIwLCAweDBmODAwMjAyLCAweDBmODAwMjAyfSwKKwl7MHgwMDAwYTU5NCwgMHgxYzgwMDIyMywgMHgxYzgwMDIyMywgMHgxMTgwMDQwMCwgMHgxMTgwMDQwMH0sCisJezB4MDAwMGE1OTgsIDB4MjE4MjAyMjAsIDB4MjE4MjAyMjAsIDB4MTU4MDA0MDIsIDB4MTU4MDA0MDJ9LAorCXsweDAwMDBhNTljLCAweDI3ODIwMjIzLCAweDI3ODIwMjIzLCAweDE5ODAwNDA0LCAweDE5ODAwNDA0fSwKKwl7MHgwMDAwYTVhMCwgMHgyYjgyMjIyMCwgMHgyYjgyMjIyMCwgMHgxYjgwMDYwMywgMHgxYjgwMDYwM30sCisJezB4MDAwMGE1YTQsIDB4MmY4MjIyMjIsIDB4MmY4MjIyMjIsIDB4MWY4MDBhMDIsIDB4MWY4MDBhMDJ9LAorCXsweDAwMDBhNWE4LCAweDM0ODIyMjI1LCAweDM0ODIyMjI1LCAweDIzODAwYTA0LCAweDIzODAwYTA0fSwKKwl7MHgwMDAwYTVhYywgMHgzYTgyMjIyYSwgMHgzYTgyMjIyYSwgMHgyNjgwMGEyMCwgMHgyNjgwMGEyMH0sCisJezB4MDAwMGE1YjAsIDB4M2U4MjIyMmMsIDB4M2U4MjIyMmMsIDB4MmE4MDBlMjAsIDB4MmE4MDBlMjB9LAorCXsweDAwMDBhNWI0LCAweDQyODIyNDJhLCAweDQyODIyNDJhLCAweDJlODAwZTIyLCAweDJlODAwZTIyfSwKKwl7MHgwMDAwYTViOCwgMHg0NzgyMjQ0YSwgMHg0NzgyMjQ0YSwgMHgzMTgwMGUyNCwgMHgzMTgwMGUyNH0sCisJezB4MDAwMGE1YmMsIDB4NGI4MjI0NGMsIDB4NGI4MjI0NGMsIDB4MzQ4MDE2NDAsIDB4MzQ4MDE2NDB9LAorCXsweDAwMDBhNWMwLCAweDRlODIyNDZjLCAweDRlODIyNDZjLCAweDM4ODAxNjYwLCAweDM4ODAxNjYwfSwKKwl7MHgwMDAwYTVjNCwgMHg1MzgyMjY2YywgMHg1MzgyMjY2YywgMHgzYjgwMTg2MSwgMHgzYjgwMTg2MX0sCisJezB4MDAwMGE1YzgsIDB4NTc4MjI4NmMsIDB4NTc4MjI4NmMsIDB4M2U4MDFhODEsIDB4M2U4MDFhODF9LAorCXsweDAwMDBhNWNjLCAweDVjODQyODZiLCAweDVjODQyODZiLCAweDQyODAxYTgzLCAweDQyODAxYTgzfSwKKwl7MHgwMDAwYTVkMCwgMHg2MTg0MmE2YywgMHg2MTg0MmE2YywgMHg0NDgwMWM4NCwgMHg0NDgwMWM4NH0sCisJezB4MDAwMGE1ZDQsIDB4NjY4NjJhNmMsIDB4NjY4NjJhNmMsIDB4NDg4MDFjZTMsIDB4NDg4MDFjZTN9LAorCXsweDAwMDBhNWQ4LCAweDZiODYyZTZjLCAweDZiODYyZTZjLCAweDRjODAxY2U1LCAweDRjODAxY2U1fSwKKwl7MHgwMDAwYTVkYywgMHg3MDg2MzA4YywgMHg3MDg2MzA4YywgMHg1MDgwMWNlOSwgMHg1MDgwMWNlOX0sCisJezB4MDAwMGE1ZTAsIDB4NzM4YTMwOGEsIDB4NzM4YTMwOGEsIDB4NTQ4MDFjZWIsIDB4NTQ4MDFjZWJ9LAorCXsweDAwMDBhNWU0LCAweDc3OGEzMDhjLCAweDc3OGEzMDhjLCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKKwl7MHgwMDAwYTVlOCwgMHg3NzhhMzA4YywgMHg3NzhhMzA4YywgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCisJezB4MDAwMGE1ZWMsIDB4Nzc4YTMwOGMsIDB4Nzc4YTMwOGMsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDBhNWYwLCAweDc3OGEzMDhjLCAweDc3OGEzMDhjLCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKKwl7MHgwMDAwYTVmNCwgMHg3NzhhMzA4YywgMHg3NzhhMzA4YywgMHg1NjgwMWVlYywgMHg1NjgwMWVlY30sCisJezB4MDAwMGE1ZjgsIDB4Nzc4YTMwOGMsIDB4Nzc4YTMwOGMsIDB4NTY4MDFlZWMsIDB4NTY4MDFlZWN9LAorCXsweDAwMDBhNWZjLCAweDc3OGEzMDhjLCAweDc3OGEzMDhjLCAweDU2ODAxZWVjLCAweDU2ODAxZWVjfSwKKwl7MHgwMDAxNjA0NCwgMHgwNTZkYjJkYiwgMHgwNTZkYjJkYiwgMHgwM2I2ZDJlNCwgMHgwM2I2ZDJlNH0sCisJezB4MDAwMTYwNDgsIDB4MjQ5MjcyNjYsIDB4MjQ5MjcyNjYsIDB4OGU0ODMyNjYsIDB4OGU0ODMyNjZ9LAorCXsweDAwMDE2NDQ0LCAweDA1NmRiMmRiLCAweDA1NmRiMmRiLCAweDAzYjZkMmU0LCAweDAzYjZkMmU0fSwKKwl7MHgwMDAxNjQ0OCwgMHgyNDkyNzI2NiwgMHgyNDkyNzI2NiwgMHg4ZTQ4MjI2NiwgMHg4ZTQ4MjI2Nn0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFyOTM0MF8xcDBfbWFjX2NvcmVbXVsyXSA9IHsKKwkvKiAgICBBZGRyICAgICAgICBhbGxtb2RlcyAgICAgICAgKi8KKwl7MHgwMDAwMDAwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDAwMzAsIDB4MDAwMjAwODV9LAorCXsweDAwMDAwMDM0LCAweDAwMDAwMDA1fSwKKwl7MHgwMDAwMDA0MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDAwNDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAwMDQ4LCAweDAwMDAwMDA4fSwKKwl7MHgwMDAwMDA0YywgMHgwMDAwMDAxMH0sCisJezB4MDAwMDAwNTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMDQwLCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA0NCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNDgsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDRjLCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA1MCwgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNTQsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDU4LCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTA1YywgMHgwMDJmZmMwZn0sCisJezB4MDAwMDEwNjAsIDB4MDAyZmZjMGZ9LAorCXsweDAwMDAxMDY0LCAweDAwMmZmYzBmfSwKKwl7MHgwMDAwMTBmMCwgMHgwMDAwMDEwMH0sCisJezB4MDAwMDEyNzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxMmIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwMTJmMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDE0M2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDAxNDdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwMDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDA4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODAwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwMTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODAzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDQwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODA0NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwNDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDRjLCAweGZmZmZmZmZmfSwKKwl7MHgwMDAwODA1NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwNTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDVjLCAweDAwMGZjNzhmfSwKKwl7MHgwMDAwODA2MCwgMHgwMDAwMDAwZn0sCisJezB4MDAwMDgwNjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDcwLCAweDAwMDAwMzEwfSwKKwl7MHgwMDAwODA3NCwgMHgwMDAwMDAyMH0sCisJezB4MDAwMDgwNzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MDljLCAweDAwMDAwMDBmfSwKKwl7MHgwMDAwODBhMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwYTQsIDB4MDJmZjAwMDB9LAorCXsweDAwMDA4MGE4LCAweDBlMDcwNjA1fSwKKwl7MHgwMDAwODBhYywgMHgwMDAwMDAwZH0sCisJezB4MDAwMDgwYjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MGI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MGMwLCAweDJhODAwMDAwfSwKKwl7MHgwMDAwODBjNCwgMHgwNjkwMDE2OH0sCisJezB4MDAwMDgwYzgsIDB4MTM4ODFjMjB9LAorCXsweDAwMDA4MGNjLCAweDAxZjQwMDAwfSwKKwl7MHgwMDAwODBkMCwgMHgwMDI1MjUwMH0sCisJezB4MDAwMDgwZDQsIDB4MDBhMDAwMDB9LAorCXsweDAwMDA4MGQ4LCAweDAwNDAwMDAwfSwKKwl7MHgwMDAwODBkYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwZTAsIDB4ZmZmZmZmZmZ9LAorCXsweDAwMDA4MGU0LCAweDAwMDBmZmZmfSwKKwl7MHgwMDAwODBlOCwgMHgzZjNmM2YzZn0sCisJezB4MDAwMDgwZWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MGYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODBmNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgwZmMsIDB4MDAwMjAwMDB9LAorCXsweDAwMDA4MTAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODEwOCwgMHgwMDAwMDA1Mn0sCisJezB4MDAwMDgxMGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODExNCwgMHgwMDAwMDdmZn0sCisJezB4MDAwMDgxMTgsIDB4MDAwMDAwYWF9LAorCXsweDAwMDA4MTFjLCAweDAwMDAzMjEwfSwKKwl7MHgwMDAwODEyNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxMjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODEzMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxMzQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MTM4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODEzYywgMHgwMDAwZmZmZn0sCisJezB4MDAwMDgxNDQsIDB4ZmZmZmZmZmZ9LAorCXsweDAwMDA4MTY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODE2YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxNzAsIDB4MTg0ODYyMDB9LAorCXsweDAwMDA4MTc0LCAweDMzMzMyMjEwfSwKKwl7MHgwMDAwODE3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxN2MsIDB4MDAwMjAwMDB9LAorCXsweDAwMDA4MWMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODFjNCwgMHgzMzMzMjIxMH0sCisJezB4MDAwMDgxYzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODFkNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxZWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODFmNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgxZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MWZjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI0MCwgMHgwMDEwMDAwMH0sCisJezB4MDAwMDgyNDQsIDB4MDAxMGY0MjR9LAorCXsweDAwMDA4MjQ4LCAweDAwMDAwODAwfSwKKwl7MHgwMDAwODI0YywgMHgwMDAxZTg0OH0sCisJezB4MDAwMDgyNTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MjU0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI1OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyNWMsIDB4NDAwMDAwMDB9LAorCXsweDAwMDA4MjYwLCAweDAwMDgwOTIyfSwKKwl7MHgwMDAwODI2NCwgMHg5ZDQwMDAxMH0sCisJezB4MDAwMDgyNjgsIDB4ZmZmZmZmZmZ9LAorCXsweDAwMDA4MjZjLCAweDAwMDBmZmZmfSwKKwl7MHgwMDAwODI3MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgyNzQsIDB4NDAwMDAwMDB9LAorCXsweDAwMDA4Mjc4LCAweDAwM2U0MTgwfSwKKwl7MHgwMDAwODI3YywgMHgwMDAwMDAwNH0sCisJezB4MDAwMDgyODQsIDB4MDAwMDAwMmN9LAorCXsweDAwMDA4Mjg4LCAweDAwMDAwMDJjfSwKKwl7MHgwMDAwODI4YywgMHgwMDAwMDBmZn0sCisJezB4MDAwMDgyOTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4Mjk4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODI5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzMDAsIDB4MDAwMDAxNDB9LAorCXsweDAwMDA4MzE0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODMxYywgMHgwMDAwMDEwZH0sCisJezB4MDAwMDgzMjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzJjLCAweDAwMDAwMDA3fSwKKwl7MHgwMDAwODMzMCwgMHgwMDAwMDMwMn0sCisJezB4MDAwMDgzMzQsIDB4MDAwMDA3MDB9LAorCXsweDAwMDA4MzM4LCAweDAwZmYwMDAwfSwKKwl7MHgwMDAwODMzYywgMHgwMjQwMDAwMH0sCisJezB4MDAwMDgzNDAsIDB4MDAwMTA3ZmZ9LAorCXsweDAwMDA4MzQ0LCAweGFhNDgxMDVifSwKKwl7MHgwMDAwODM0OCwgMHgwMDhmMDAwMH0sCisJezB4MDAwMDgzNWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzYwLCAweGZmZmZmZmZmfSwKKwl7MHgwMDAwODM2NCwgMHhmZmZmZmZmZn0sCisJezB4MDAwMDgzNjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzcwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODM3NCwgMHgwMDAwMDBmZn0sCisJezB4MDAwMDgzNzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODM4MCwgMHhmZmZmZmZmZn0sCisJezB4MDAwMDgzODQsIDB4ZmZmZmZmZmZ9LAorCXsweDAwMDA4MzkwLCAweGZmZmZmZmZmfSwKKwl7MHgwMDAwODM5NCwgMHhmZmZmZmZmZn0sCisJezB4MDAwMDgzOTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4MzljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODNhMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzYTQsIDB4MDAwMGZhMTR9LAorCXsweDAwMDA4M2E4LCAweDAwMGYwYzAwfSwKKwl7MHgwMDAwODNhYywgMHgzMzMzMjIxMH0sCisJezB4MDAwMDgzYjAsIDB4MzMzMzIyMTB9LAorCXsweDAwMDA4M2I0LCAweDMzMzMyMjEwfSwKKwl7MHgwMDAwODNiOCwgMHgzMzMzMjIxMH0sCisJezB4MDAwMDgzYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4M2MwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwODNjNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDgzYzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA4M2NjLCAweDAwMDAwMjAwfSwKKwl7MHgwMDAwODNkMCwgMHgwMDAzMDFmZn0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIGFyOTM0MENvbW1vbl93b194bG5hX3J4X2dhaW5fdGFibGVfMXAwW11bMl0gPSB7CisJLyogICAgQWRkciAgICAgICAgYWxsbW9kZXMgICAgICAgICovCisJezB4MDAwMGEwMDAsIDB4MDAwMTAwMDB9LAorCXsweDAwMDBhMDA0LCAweDAwMDMwMDAyfSwKKwl7MHgwMDAwYTAwOCwgMHgwMDA1MDAwNH0sCisJezB4MDAwMGEwMGMsIDB4MDA4MTAwODB9LAorCXsweDAwMDBhMDEwLCAweDAwODMwMDgyfSwKKwl7MHgwMDAwYTAxNCwgMHgwMTgxMDE4MH0sCisJezB4MDAwMGEwMTgsIDB4MDE4MzAxODJ9LAorCXsweDAwMDBhMDFjLCAweDAxODUwMTg0fSwKKwl7MHgwMDAwYTAyMCwgMHgwMTg5MDE4OH0sCisJezB4MDAwMGEwMjQsIDB4MDE4YjAxOGF9LAorCXsweDAwMDBhMDI4LCAweDAxOGQwMThjfSwKKwl7MHgwMDAwYTAyYywgMHgwMzgyMDE5MH0sCisJezB4MDAwMGEwMzAsIDB4MDM4NDAzODN9LAorCXsweDAwMDBhMDM0LCAweDAzODgwMzg1fSwKKwl7MHgwMDAwYTAzOCwgMHgwMzhhMDM4OX0sCisJezB4MDAwMGEwM2MsIDB4MDM4YzAzOGJ9LAorCXsweDAwMDBhMDQwLCAweDAzOTAwMzhkfSwKKwl7MHgwMDAwYTA0NCwgMHgwMzkyMDM5MX0sCisJezB4MDAwMGEwNDgsIDB4MDM5NDAzOTN9LAorCXsweDAwMDBhMDRjLCAweDAzOTYwMzk1fSwKKwl7MHgwMDAwYTA1MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDU4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA1YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDY0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA2OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDcwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA3NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA4MCwgMHgyOTI5MjkyOX0sCisJezB4MDAwMGEwODQsIDB4MjkyOTI5Mjl9LAorCXsweDAwMDBhMDg4LCAweDI5MjkyOTI5fSwKKwl7MHgwMDAwYTA4YywgMHgyOTI5MjkyOX0sCisJezB4MDAwMGEwOTAsIDB4MjIyOTI5Mjl9LAorCXsweDAwMDBhMDk0LCAweDFkMWQyMjIyfSwKKwl7MHgwMDAwYTA5OCwgMHgwYzExMTExN30sCisJezB4MDAwMGEwOWMsIDB4MDAwMzAzMDN9LAorCXsweDAwMDBhMGEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBhNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBiMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYzAsIDB4MDAxZjAwMDB9LAorCXsweDAwMDBhMGM0LCAweDAxMDAwMTAxfSwKKwl7MHgwMDAwYTBjOCwgMHgwMTFlMDExZn0sCisJezB4MDAwMGEwY2MsIDB4MDExYzAxMWR9LAorCXsweDAwMDBhMGQwLCAweDAyMDMwMjA0fSwKKwl7MHgwMDAwYTBkNCwgMHgwMjAxMDIwMn0sCisJezB4MDAwMGEwZDgsIDB4MDIxZjAyMDB9LAorCXsweDAwMDBhMGRjLCAweDAzMDIwMjFlfSwKKwl7MHgwMDAwYTBlMCwgMHgwMzAwMDMwMX0sCisJezB4MDAwMGEwZTQsIDB4MDMxZTAzMWZ9LAorCXsweDAwMDBhMGU4LCAweDA0MDIwMzFkfSwKKwl7MHgwMDAwYTBlYywgMHgwNDAwMDQwMX0sCisJezB4MDAwMGEwZjAsIDB4MDQxZTA0MWZ9LAorCXsweDAwMDBhMGY0LCAweDA1MDIwNDFkfSwKKwl7MHgwMDAwYTBmOCwgMHgwNTAwMDUwMX0sCisJezB4MDAwMGEwZmMsIDB4MDUxZTA1MWZ9LAorCXsweDAwMDBhMTAwLCAweDA2MDEwNjAyfSwKKwl7MHgwMDAwYTEwNCwgMHgwNjFmMDYwMH0sCisJezB4MDAwMGExMDgsIDB4MDYxZDA2MWV9LAorCXsweDAwMDBhMTBjLCAweDA3MDIwNzAzfSwKKwl7MHgwMDAwYTExMCwgMHgwNzAwMDcwMX0sCisJezB4MDAwMGExMTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTExYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTEyOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTEzNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTE0MCwgMHgwMDFmMDAwMH0sCisJezB4MDAwMGExNDQsIDB4MDEwMDAxMDF9LAorCXsweDAwMDBhMTQ4LCAweDAxMWUwMTFmfSwKKwl7MHgwMDAwYTE0YywgMHgwMTFjMDExZH0sCisJezB4MDAwMGExNTAsIDB4MDIwMzAyMDR9LAorCXsweDAwMDBhMTU0LCAweDAyMDEwMjAyfSwKKwl7MHgwMDAwYTE1OCwgMHgwMjFmMDIwMH0sCisJezB4MDAwMGExNWMsIDB4MDMwMjAyMWV9LAorCXsweDAwMDBhMTYwLCAweDAzMDAwMzAxfSwKKwl7MHgwMDAwYTE2NCwgMHgwMzFlMDMxZn0sCisJezB4MDAwMGExNjgsIDB4MDQwMjAzMWR9LAorCXsweDAwMDBhMTZjLCAweDA0MDAwNDAxfSwKKwl7MHgwMDAwYTE3MCwgMHgwNDFlMDQxZn0sCisJezB4MDAwMGExNzQsIDB4MDUwMjA0MWR9LAorCXsweDAwMDBhMTc4LCAweDA1MDAwNTAxfSwKKwl7MHgwMDAwYTE3YywgMHgwNTFlMDUxZn0sCisJezB4MDAwMGExODAsIDB4MDYwMTA2MDJ9LAorCXsweDAwMDBhMTg0LCAweDA2MWYwNjAwfSwKKwl7MHgwMDAwYTE4OCwgMHgwNjFkMDYxZX0sCisJezB4MDAwMGExOGMsIDB4MDcwMjA3MDN9LAorCXsweDAwMDBhMTkwLCAweDA3MDAwNzAxfSwKKwl7MHgwMDAwYTE5NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExOTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFhMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFhYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFjNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFkMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWQ4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFkYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWU0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFlOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWYwLCAweDAwMDAwMzk2fSwKKwl7MHgwMDAwYTFmNCwgMHgwMDAwMDM5Nn0sCisJezB4MDAwMGExZjgsIDB4MDAwMDAzOTZ9LAorCXsweDAwMDBhMWZjLCAweDAwMDAwMTk2fSwKKwl7MHgwMDAwYjAwMCwgMHgwMDAxMDAwMH0sCisJezB4MDAwMGIwMDQsIDB4MDAwMzAwMDJ9LAorCXsweDAwMDBiMDA4LCAweDAwMDUwMDA0fSwKKwl7MHgwMDAwYjAwYywgMHgwMDgxMDA4MH0sCisJezB4MDAwMGIwMTAsIDB4MDA4MzAwODJ9LAorCXsweDAwMDBiMDE0LCAweDAxODEwMTgwfSwKKwl7MHgwMDAwYjAxOCwgMHgwMTgzMDE4Mn0sCisJezB4MDAwMGIwMWMsIDB4MDE4NTAxODR9LAorCXsweDAwMDBiMDIwLCAweDAyODEwMjgwfSwKKwl7MHgwMDAwYjAyNCwgMHgwMjgzMDI4Mn0sCisJezB4MDAwMGIwMjgsIDB4MDI4NTAyODR9LAorCXsweDAwMDBiMDJjLCAweDAyODkwMjg4fSwKKwl7MHgwMDAwYjAzMCwgMHgwMjhiMDI4YX0sCisJezB4MDAwMGIwMzQsIDB4MDM4ODAyOGN9LAorCXsweDAwMDBiMDM4LCAweDAzOGEwMzg5fSwKKwl7MHgwMDAwYjAzYywgMHgwMzhjMDM4Yn0sCisJezB4MDAwMGIwNDAsIDB4MDM5MDAzOGR9LAorCXsweDAwMDBiMDQ0LCAweDAzOTIwMzkxfSwKKwl7MHgwMDAwYjA0OCwgMHgwMzk0MDM5M30sCisJezB4MDAwMGIwNGMsIDB4MDM5NjAzOTV9LAorCXsweDAwMDBiMDUwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA1NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwNTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDVjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA2MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwNjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA2YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwNzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDc0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwN2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDgwLCAweDMyMzIzMjMyfSwKKwl7MHgwMDAwYjA4NCwgMHgyZjJmMzIzMn0sCisJezB4MDAwMGIwODgsIDB4MjMyODJhMmR9LAorCXsweDAwMDBiMDhjLCAweDFjMWUyMTIzfSwKKwl7MHgwMDAwYjA5MCwgMHgxNDE3MTkxOX0sCisJezB4MDAwMGIwOTQsIDB4MGUwZTEyMTR9LAorCXsweDAwMDBiMDk4LCAweDAzMDUwNzA3fSwKKwl7MHgwMDAwYjA5YywgMHgwMDAzMDMwM30sCisJezB4MDAwMGIwYTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMGE0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjBhOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwYWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMGIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjBiNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwYjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMGJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjBjMCwgMHgwMDNmMDAyMH0sCisJezB4MDAwMGIwYzQsIDB4MDA0MDAwNDF9LAorCXsweDAwMDBiMGM4LCAweDAxNDAwMDVmfSwKKwl7MHgwMDAwYjBjYywgMHgwMTYwMDE1Zn0sCisJezB4MDAwMGIwZDAsIDB4MDE3ZTAxN2Z9LAorCXsweDAwMDBiMGQ0LCAweDAyNDEwMjQyfSwKKwl7MHgwMDAwYjBkOCwgMHgwMjVmMDI0MH0sCisJezB4MDAwMGIwZGMsIDB4MDI3ZjAyNjB9LAorCXsweDAwMDBiMGUwLCAweDAzNDEwMjdlfSwKKwl7MHgwMDAwYjBlNCwgMHgwMzVmMDM0MH0sCisJezB4MDAwMGIwZTgsIDB4MDM3ZjAzNjB9LAorCXsweDAwMDBiMGVjLCAweDA0NDAwNDQxfSwKKwl7MHgwMDAwYjBmMCwgMHgwNDYwMDQ1Zn0sCisJezB4MDAwMGIwZjQsIDB4MDU0MTA0N2Z9LAorCXsweDAwMDBiMGY4LCAweDA1NWYwNTQwfSwKKwl7MHgwMDAwYjBmYywgMHgwNTdmMDU2MH0sCisJezB4MDAwMGIxMDAsIDB4MDY0MDA2NDF9LAorCXsweDAwMDBiMTA0LCAweDA2NjAwNjVmfSwKKwl7MHgwMDAwYjEwOCwgMHgwNjdlMDY3Zn0sCisJezB4MDAwMGIxMGMsIDB4MDc0MTA3NDJ9LAorCXsweDAwMDBiMTEwLCAweDA3NWYwNzQwfSwKKwl7MHgwMDAwYjExNCwgMHgwNzdmMDc2MH0sCisJezB4MDAwMGIxMTgsIDB4MDc4MDA3ODF9LAorCXsweDAwMDBiMTFjLCAweDA3YTAwNzlmfSwKKwl7MHgwMDAwYjEyMCwgMHgwN2MxMDdiZn0sCisJezB4MDAwMGIxMjQsIDB4MDAwMDA3YzB9LAorCXsweDAwMDBiMTI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjEyYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxMzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMTM0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjEzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMTQwLCAweDAwM2YwMDIwfSwKKwl7MHgwMDAwYjE0NCwgMHgwMDQwMDA0MX0sCisJezB4MDAwMGIxNDgsIDB4MDE0MDAwNWZ9LAorCXsweDAwMDBiMTRjLCAweDAxNjAwMTVmfSwKKwl7MHgwMDAwYjE1MCwgMHgwMTdlMDE3Zn0sCisJezB4MDAwMGIxNTQsIDB4MDI0MTAyNDJ9LAorCXsweDAwMDBiMTU4LCAweDAyNWYwMjQwfSwKKwl7MHgwMDAwYjE1YywgMHgwMjdmMDI2MH0sCisJezB4MDAwMGIxNjAsIDB4MDM0MTAyN2V9LAorCXsweDAwMDBiMTY0LCAweDAzNWYwMzQwfSwKKwl7MHgwMDAwYjE2OCwgMHgwMzdmMDM2MH0sCisJezB4MDAwMGIxNmMsIDB4MDQ0MDA0NDF9LAorCXsweDAwMDBiMTcwLCAweDA0NjAwNDVmfSwKKwl7MHgwMDAwYjE3NCwgMHgwNTQxMDQ3Zn0sCisJezB4MDAwMGIxNzgsIDB4MDU1ZjA1NDB9LAorCXsweDAwMDBiMTdjLCAweDA1N2YwNTYwfSwKKwl7MHgwMDAwYjE4MCwgMHgwNjQwMDY0MX0sCisJezB4MDAwMGIxODQsIDB4MDY2MDA2NWZ9LAorCXsweDAwMDBiMTg4LCAweDA2N2UwNjdmfSwKKwl7MHgwMDAwYjE4YywgMHgwNzQxMDc0Mn0sCisJezB4MDAwMGIxOTAsIDB4MDc1ZjA3NDB9LAorCXsweDAwMDBiMTk0LCAweDA3N2YwNzYwfSwKKwl7MHgwMDAwYjE5OCwgMHgwNzgwMDc4MX0sCisJezB4MDAwMGIxOWMsIDB4MDdhMDA3OWZ9LAorCXsweDAwMDBiMWEwLCAweDA3YzEwN2JmfSwKKwl7MHgwMDAwYjFhNCwgMHgwMDAwMDdjMH0sCisJezB4MDAwMGIxYTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFiMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxYjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxYzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWM0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFjOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxY2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWQwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFkNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxZDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWRjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFlMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxZTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWU4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFlYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxZjAsIDB4MDAwMDAzOTZ9LAorCXsweDAwMDBiMWY0LCAweDAwMDAwMzk2fSwKKwl7MHgwMDAwYjFmOCwgMHgwMDAwMDM5Nn0sCisJezB4MDAwMGIxZmMsIDB4MDAwMDAxOTZ9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhcjkzNDBfMXAwX3NvY19wcmVhbWJsZVtdWzJdID0geworCS8qICAgIEFkZHIgICAgICAgIGFsbG1vZGVzICAgICAgICAqLworCXsweDAwMDA0MGE0LCAweDAwYTBjMWM5fSwKKwl7MHgwMDAwNzAwOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDcwMjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA3MDM0LCAweDAwMDAwMDAyfSwKKwl7MHgwMDAwNzAzOCwgMHgwMDAwMDRjMn0sCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjk0ODVfaW5pdHZhbHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjk0ODVfaW5pdHZhbHMuaAppbmRleCA3MWNjMGEzLi5mYmRkZTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5NDg1X2luaXR2YWxzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTQ4NV9pbml0dmFscy5oCkBAIC0xNyw5MzEgKzE3LDYgQEAKICNpZm5kZWYgSU5JVFZBTFNfOTQ4NV9ICiAjZGVmaW5lIElOSVRWQUxTXzk0ODVfSAogCi1zdGF0aWMgY29uc3QgdTMyIGFyOTQ4NUNvbW1vbl8xXzBbXVsyXSA9IHsKLQkvKiAgIEFkZHIgICAgIGFsbG1vZGVzICovCi0JezB4MDAwMDcwMTAsIDB4MDAwMDAwMjJ9LAotCXsweDAwMDA3MDIwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwNzAzNCwgMHgwMDAwMDAwMn0sCi0JezB4MDAwMDcwMzgsIDB4MDAwMDA0YzJ9LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBhcjk0ODVfMV8wX21hY19wb3N0YW1ibGVbXVs1XSA9IHsKLQkvKiBBZGRyICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICAgICovCi0JezB4MDAwMDEwMzAsIDB4MDAwMDAyMzAsIDB4MDAwMDA0NjAsIDB4MDAwMDAyYzAsIDB4MDAwMDAxNjB9LAotCXsweDAwMDAxMDcwLCAweDAwMDAwMTY4LCAweDAwMDAwMmQwLCAweDAwMDAwMzE4LCAweDAwMDAwMThjfSwKLQl7MHgwMDAwMTBiMCwgMHgwMDAwMGU2MCwgMHgwMDAwMWNjMCwgMHgwMDAwN2M3MCwgMHgwMDAwM2UzOH0sCi0JezB4MDAwMDgwMTQsIDB4MDNlODAzZTgsIDB4MDdkMDA3ZDAsIDB4MTA4MDE2MDAsIDB4MDg0MDBiMDB9LAotCXsweDAwMDA4MDFjLCAweDEyOGQ4MDI3LCAweDEyOGQ4MDRmLCAweDEyZTAwMDU3LCAweDEyZTAwMDJifSwKLQl7MHgwMDAwODEyMCwgMHgwOGYwNDgwMCwgMHgwOGYwNDgwMCwgMHgwOGYwNDgxMCwgMHgwOGYwNDgxMH0sCi0JezB4MDAwMDgxZDAsIDB4MDAwMDMyMTAsIDB4MDAwMDMyMTAsIDB4MDAwMDMyMGEsIDB4MDAwMDMyMGF9LAotCXsweDAwMDA4MzE4LCAweDAwMDAzZTgwLCAweDAwMDA3ZDAwLCAweDAwMDA2ODgwLCAweDAwMDAzNDQwfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5NDg1XzFfMF9wY2llX3BoeV9wbGxfb25fY2xrcmVxX2Rpc2FibGVfTDFbXVsyXSA9IHsKLQkvKiAgIEFkZHIgICAgIGFsbG1vZGVzICovCi0JezB4MDAwMThjMDAsIDB4MTAyMTJlNWV9LAotCXsweDAwMDE4YzA0LCAweDAwMDgwMWQ4fSwKLQl7MHgwMDAxOGMwOCwgMHgwMDAwNTgwY30sCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIGFyOTQ4NUNvbW1vbl93b194bG5hX3J4X2dhaW5fMV8wW11bMl0gPSB7Ci0JLyogICBBZGRyICAgICBhbGxtb2RlcyAqLwotCXsweDAwMDBhMDAwLCAweDAwMDEwMDAwfSwKLQl7MHgwMDAwYTAwNCwgMHgwMDAzMDAwMn0sCi0JezB4MDAwMGEwMDgsIDB4MDAwNTAwMDR9LAotCXsweDAwMDBhMDBjLCAweDAwODEwMDgwfSwKLQl7MHgwMDAwYTAxMCwgMHgwMTgwMDA4Mn0sCi0JezB4MDAwMGEwMTQsIDB4MDE4MjAxODF9LAotCXsweDAwMDBhMDE4LCAweDAxODQwMTgzfSwKLQl7MHgwMDAwYTAxYywgMHgwMTg4MDE4NX0sCi0JezB4MDAwMGEwMjAsIDB4MDE4YTAxODl9LAotCXsweDAwMDBhMDI0LCAweDAyODUwMjg0fSwKLQl7MHgwMDAwYTAyOCwgMHgwMjg5MDI4OH0sCi0JezB4MDAwMGEwMmMsIDB4MDM4NTAzODR9LAotCXsweDAwMDBhMDMwLCAweDAzODkwMzg4fSwKLQl7MHgwMDAwYTAzNCwgMHgwMzhiMDM4YX0sCi0JezB4MDAwMGEwMzgsIDB4MDM4ZDAzOGN9LAotCXsweDAwMDBhMDNjLCAweDAzOTEwMzkwfSwKLQl7MHgwMDAwYTA0MCwgMHgwMzkzMDM5Mn0sCi0JezB4MDAwMGEwNDQsIDB4MDM5NTAzOTR9LAotCXsweDAwMDBhMDQ4LCAweDAwMDAwMzk2fSwKLQl7MHgwMDAwYTA0YywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwNTAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMDU0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTA1OCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwNWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMDYwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTA2NCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwNjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMDZjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTA3MCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwNzQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMDc4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTA3YywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwODAsIDB4MjgyODI4Mjh9LAotCXsweDAwMDBhMDg0LCAweDI4MjgyODI4fSwKLQl7MHgwMDAwYTA4OCwgMHgyODI4MjgyOH0sCi0JezB4MDAwMGEwOGMsIDB4MjgyODI4Mjh9LAotCXsweDAwMDBhMDkwLCAweDI4MjgyODI4fSwKLQl7MHgwMDAwYTA5NCwgMHgyMTIxMjEyOH0sCi0JezB4MDAwMGEwOTgsIDB4MTcxYzFjMWN9LAotCXsweDAwMDBhMDljLCAweDAyMDIwMjEyfSwKLQl7MHgwMDAwYTBhMCwgMHgwMDAwMDIwMn0sCi0JezB4MDAwMGEwYTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMGE4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTBhYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwYjAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMGI0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTBiOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwYmMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMGMwLCAweDAwMWYwMDAwfSwKLQl7MHgwMDAwYTBjNCwgMHgxMTFmMTEwMH0sCi0JezB4MDAwMGEwYzgsIDB4MTExZDExMWV9LAotCXsweDAwMDBhMGNjLCAweDExMWIxMTFjfSwKLQl7MHgwMDAwYTBkMCwgMHgyMjAzMjIwNH0sCi0JezB4MDAwMGEwZDQsIDB4MjIwMTIyMDJ9LAotCXsweDAwMDBhMGQ4LCAweDIyMWYyMjAwfSwKLQl7MHgwMDAwYTBkYywgMHgyMjFkMjIxZX0sCi0JezB4MDAwMGEwZTAsIDB4MzMwMTMzMDJ9LAotCXsweDAwMDBhMGU0LCAweDMzMWYzMzAwfSwKLQl7MHgwMDAwYTBlOCwgMHg0NDAyMzMxZX0sCi0JezB4MDAwMGEwZWMsIDB4NDQwMDQ0MDF9LAotCXsweDAwMDBhMGYwLCAweDQ0MWU0NDFmfSwKLQl7MHgwMDAwYTBmNCwgMHg1NTAxNTUwMn0sCi0JezB4MDAwMGEwZjgsIDB4NTUxZjU1MDB9LAotCXsweDAwMDBhMGZjLCAweDY2MDI1NTFlfSwKLQl7MHgwMDAwYTEwMCwgMHg2NjAwNjYwMX0sCi0JezB4MDAwMGExMDQsIDB4NjYxZTY2MWZ9LAotCXsweDAwMDBhMTA4LCAweDc3MDM2NjFkfSwKLQl7MHgwMDAwYTEwYywgMHg3NzAxNzcwMn0sCi0JezB4MDAwMGExMTAsIDB4MDAwMDc3MDB9LAotCXsweDAwMDBhMTE0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTExOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExMWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMTIwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTEyNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExMjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMTJjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTEzMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExMzQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMTM4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTEzYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExNDAsIDB4MDAxZjAwMDB9LAotCXsweDAwMDBhMTQ0LCAweDExMWYxMTAwfSwKLQl7MHgwMDAwYTE0OCwgMHgxMTFkMTExZX0sCi0JezB4MDAwMGExNGMsIDB4MTExYjExMWN9LAotCXsweDAwMDBhMTUwLCAweDIyMDMyMjA0fSwKLQl7MHgwMDAwYTE1NCwgMHgyMjAxMjIwMn0sCi0JezB4MDAwMGExNTgsIDB4MjIxZjIyMDB9LAotCXsweDAwMDBhMTVjLCAweDIyMWQyMjFlfSwKLQl7MHgwMDAwYTE2MCwgMHgzMzAxMzMwMn0sCi0JezB4MDAwMGExNjQsIDB4MzMxZjMzMDB9LAotCXsweDAwMDBhMTY4LCAweDQ0MDIzMzFlfSwKLQl7MHgwMDAwYTE2YywgMHg0NDAwNDQwMX0sCi0JezB4MDAwMGExNzAsIDB4NDQxZTQ0MWZ9LAotCXsweDAwMDBhMTc0LCAweDU1MDE1NTAyfSwKLQl7MHgwMDAwYTE3OCwgMHg1NTFmNTUwMH0sCi0JezB4MDAwMGExN2MsIDB4NjYwMjU1MWV9LAotCXsweDAwMDBhMTgwLCAweDY2MDA2NjAxfSwKLQl7MHgwMDAwYTE4NCwgMHg2NjFlNjYxZn0sCi0JezB4MDAwMGExODgsIDB4NzcwMzY2MWR9LAotCXsweDAwMDBhMThjLCAweDc3MDE3NzAyfSwKLQl7MHgwMDAwYTE5MCwgMHgwMDAwNzcwMH0sCi0JezB4MDAwMGExOTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMTk4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTE5YywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExYTAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWE0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFhOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExYWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWIwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFiNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExYjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWJjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFjMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExYzQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWM4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFjYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExZDAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWQ0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFkOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExZGMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWUwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFlNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExZTgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWVjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFmMCwgMHgwMDAwMDM5Nn0sCi0JezB4MDAwMGExZjQsIDB4MDAwMDAzOTZ9LAotCXsweDAwMDBhMWY4LCAweDAwMDAwMzk2fSwKLQl7MHgwMDAwYTFmYywgMHgwMDAwMDI5Nn0sCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIGFyOTQ4NU1vZGVzX2hpZ2hfcG93ZXJfdHhfZ2Fpbl8xXzBbXVs1XSA9IHsKLQkvKiAgIEFkZHIgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICovCi0JezB4MDAwMGE0MTAsIDB4MDAwMDUwZDksIDB4MDAwMDUwZDksIDB4MDAwMDUwZDgsIDB4MDAwMDUwZDh9LAotCXsweDAwMDBhNTAwLCAweDAwMDIyMjAwLCAweDAwMDIyMjAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTUwNCwgMHgwNTA2MjAwMiwgMHgwNTA2MjAwMiwgMHgwNDAwMDAwMiwgMHgwNDAwMDAwMn0sCi0JezB4MDAwMGE1MDgsIDB4MGMwMDJlMDAsIDB4MGMwMDJlMDAsIDB4MDgwMDAwMDQsIDB4MDgwMDAwMDR9LAotCXsweDAwMDBhNTBjLCAweDExMDYyMjAyLCAweDExMDYyMjAyLCAweDBkMDAwMjAwLCAweDBkMDAwMjAwfSwKLQl7MHgwMDAwYTUxMCwgMHgxNzAyMmUwMCwgMHgxNzAyMmUwMCwgMHgxMTAwMDIwMiwgMHgxMTAwMDIwMn0sCi0JezB4MDAwMGE1MTQsIDB4MWQwMDBlYzIsIDB4MWQwMDBlYzIsIDB4MTUwMDA0MDAsIDB4MTUwMDA0MDB9LAotCXsweDAwMDBhNTE4LCAweDI1MDIwZWMwLCAweDI1MDIwZWMwLCAweDE5MDAwNDAyLCAweDE5MDAwNDAyfSwKLQl7MHgwMDAwYTUxYywgMHgyYjAyMGVjMywgMHgyYjAyMGVjMywgMHgxZDAwMDQwNCwgMHgxZDAwMDQwNH0sCi0JezB4MDAwMGE1MjAsIDB4MmYwMDFmMDQsIDB4MmYwMDFmMDQsIDB4MjEwMDA2MDMsIDB4MjEwMDA2MDN9LAotCXsweDAwMDBhNTI0LCAweDM1MDAxZmM0LCAweDM1MDAxZmM0LCAweDI1MDAwNjA1LCAweDI1MDAwNjA1fSwKLQl7MHgwMDAwYTUyOCwgMHgzYzAyMmYwNCwgMHgzYzAyMmYwNCwgMHgyYTAwMGEwMywgMHgyYTAwMGEwM30sCi0JezB4MDAwMGE1MmMsIDB4NDEwMjNlODUsIDB4NDEwMjNlODUsIDB4MmMwMDBhMDQsIDB4MmMwMDBhMDR9LAotCXsweDAwMDBhNTMwLCAweDQ4MDIzZWM2LCAweDQ4MDIzZWM2LCAweDJlMDAwYTIwLCAweDJlMDAwYTIwfSwKLQl7MHgwMDAwYTUzNCwgMHg0ZDAyM2YwMSwgMHg0ZDAyM2YwMSwgMHgzNDAwMGUyMCwgMHgzNDAwMGUyMH0sCi0JezB4MDAwMGE1MzgsIDB4NTMwMjNmNGIsIDB4NTMwMjNmNGIsIDB4MzgwMDBlMjIsIDB4MzgwMDBlMjJ9LAotCXsweDAwMDBhNTNjLCAweDVhMDI3ZjA5LCAweDVhMDI3ZjA5LCAweDNjMDAwZTI0LCAweDNjMDAwZTI0fSwKLQl7MHgwMDAwYTU0MCwgMHg1ZjAyN2ZjOSwgMHg1ZjAyN2ZjOSwgMHg0MDAwMGUyNiwgMHg0MDAwMGUyNn0sCi0JezB4MDAwMGE1NDQsIDB4NjUwMmZlY2EsIDB4NjUwMmZlY2EsIDB4NDMwMDE2NDAsIDB4NDMwMDE2NDB9LAotCXsweDAwMDBhNTQ4LCAweDZiMDJmZjRhLCAweDZiMDJmZjRhLCAweDQ2MDAxNjYwLCAweDQ2MDAxNjYwfSwKLQl7MHgwMDAwYTU0YywgMHg3MjAzZmVjYSwgMHg3MjAzZmVjYSwgMHg0OTAwMTg2MSwgMHg0OTAwMTg2MX0sCi0JezB4MDAwMGE1NTAsIDB4NzcwM2ZmMGIsIDB4NzcwM2ZmMGIsIDB4NGMwMDFhODEsIDB4NGMwMDFhODF9LAotCXsweDAwMDBhNTU0LCAweDdkMDZmZmNiLCAweDdkMDZmZmNiLCAweDRmMDAxYTgzLCAweDRmMDAxYTgzfSwKLQl7MHgwMDAwYTU1OCwgMHg4NDA3ZmYwYiwgMHg4NDA3ZmYwYiwgMHg1NDAwMWM4NSwgMHg1NDAwMWM4NX0sCi0JezB4MDAwMGE1NWMsIDB4ODkwN2ZmY2IsIDB4ODkwN2ZmY2IsIDB4NTgwMDFjZTUsIDB4NTgwMDFjZTV9LAotCXsweDAwMDBhNTYwLCAweDkwMGZmZjBiLCAweDkwMGZmZjBiLCAweDViMDAxY2U5LCAweDViMDAxY2U5fSwKLQl7MHgwMDAwYTU2NCwgMHg5NjBmZmZjYiwgMHg5NjBmZmZjYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCi0JezB4MDAwMGE1NjgsIDB4OWMxZmZmMGIsIDB4OWMxZmZmMGIsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAotCXsweDAwMDBhNTZjLCAweDljMWZmZjBiLCAweDljMWZmZjBiLCAweDYwMDAxZWViLCAweDYwMDAxZWVifSwKLQl7MHgwMDAwYTU3MCwgMHg5YzFmZmYwYiwgMHg5YzFmZmYwYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCi0JezB4MDAwMGE1NzQsIDB4OWMxZmZmMGIsIDB4OWMxZmZmMGIsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAotCXsweDAwMDBhNTc4LCAweDljMWZmZjBiLCAweDljMWZmZjBiLCAweDYwMDAxZWViLCAweDYwMDAxZWVifSwKLQl7MHgwMDAwYTU3YywgMHg5YzFmZmYwYiwgMHg5YzFmZmYwYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCi0JezB4MDAwMTYwNDQsIDB4MDViNmIyZGIsIDB4MDViNmIyZGIsIDB4MDViNmIyZGIsIDB4MDViNmIyZGJ9LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBhcjk0ODVfMV8wW11bMl0gPSB7Ci0JLyogIEFkZHIgICAgICBhbGxtb2RlcyAqLwotCXsweDAwMDBhNTgwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTU4NCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE1ODgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhNThjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTU5MCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE1OTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhNTk4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTU5YywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE1YTAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhNWE0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTVhOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE1YWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhNWIwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTViNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE1YjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhNWJjLCAweDAwMDAwMDAwfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5NDg1XzFfMF9yYWRpb19jb3JlW11bMl0gPSB7Ci0JLyogICBBZGRyICAgICBhbGxtb2RlcyAqLwotCXsweDAwMDE2MDAwLCAweDM2ZGI2ZGI2fSwKLQl7MHgwMDAxNjAwNCwgMHg2ZGI2ZGI0MH0sCi0JezB4MDAwMTYwMDgsIDB4NzM4MDAwMDB9LAotCXsweDAwMDE2MDBjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNjA0MCwgMHg3ZjgwZmZmOH0sCi0JezB4MDAwMTYwNDgsIDB4NmM5MjQyNmV9LAotCXsweDAwMDE2MDRjLCAweDAwMGYwMjc4fSwKLQl7MHgwMDAxNjA1MCwgMHg2ZGI2ZGI2Y30sCi0JezB4MDAwMTYwNTQsIDB4NmRiNjAwMDB9LAotCXsweDAwMDE2MDgwLCAweDAwMDgwMDAwfSwKLQl7MHgwMDAxNjA4NCwgMHgwZTQ4MDQ4Y30sCi0JezB4MDAwMTYwODgsIDB4MTQyMTQ1MTR9LAotCXsweDAwMDE2MDhjLCAweDExOWYwODFlfSwKLQl7MHgwMDAxNjA5MCwgMHgyNDkyNjQ5MH0sCi0JezB4MDAwMTYwOTgsIDB4ZDI4YjMzMzB9LAotCXsweDAwMDE2MGEwLCAweGMyMTA4ZmZlfSwKLQl7MHgwMDAxNjBhNCwgMHg4MTJmYzM3MH0sCi0JezB4MDAwMTYwYTgsIDB4NDIzYzgwMDB9LAotCXsweDAwMDE2MGI0LCAweDkyNDgwMDQwfSwKLQl7MHgwMDAxNjBjMCwgMHgwMDZkYjZkYn0sCi0JezB4MDAwMTYwYzQsIDB4MDE4NmRiNjB9LAotCXsweDAwMDE2MGM4LCAweDZkYjZkYjZjfSwKLQl7MHgwMDAxNjBjYywgMHg2ZGU2ZmJlMH0sCi0JezB4MDAwMTYwZDAsIDB4ZjdkZmNmM2N9LAotCXsweDAwMDE2MTAwLCAweDA0Y2IwMDAxfSwKLQl7MHgwMDAxNjEwNCwgMHhmZmY4MDAxNX0sCi0JezB4MDAwMTYxMDgsIDB4MDAwODAwMTB9LAotCXsweDAwMDE2MTQ0LCAweDAxODg0MDgwfSwKLQl7MHgwMDAxNjE0OCwgMHgwMDAwODA0MH0sCi0JezB4MDAwMTYxODAsIDB4MDg0NTMzMzN9LAotCXsweDAwMDE2MTg0LCAweDE4ZTgyZjAxfSwKLQl7MHgwMDAxNjE4OCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMTYxOGMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDE2MjQwLCAweDA4NDAwMDAwfSwKLQl7MHgwMDAxNjI0NCwgMHgxYmY5MGYwMH0sCi0JezB4MDAwMTYyNDgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDE2MjRjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNjI4MCwgMHgwMTAwMDAxNX0sCi0JezB4MDAwMTYyODQsIDB4MDBkMzAwMDB9LAotCXsweDAwMDE2Mjg4LCAweDAwMzE4MDAwfSwKLQl7MHgwMDAxNjI4YywgMHg1MDAwMDAwMH0sCi0JezB4MDAwMTYyOTAsIDB4NGI5NjIxMGZ9LAotCXsweDAwMDE2MzgwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNjM4NCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMTYzODgsIDB4MDA4MDA3MDB9LAotCXsweDAwMDE2MzhjLCAweDAwODAwNzAwfSwKLQl7MHgwMDAxNjM5MCwgMHgwMDgwMDcwMH0sCi0JezB4MDAwMTYzOTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDE2Mzk4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNjM5YywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMTYzYTAsIDB4MDAwMDAwMDF9LAotCXsweDAwMDE2M2E0LCAweDAwMDAwMDAxfSwKLQl7MHgwMDAxNjNhOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMTYzYWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDE2M2IwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNjNiNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMTYzYjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDE2M2JjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNjNjMCwgMHgwMDAwMDBhMH0sCi0JezB4MDAwMTYzYzQsIDB4MDAwYzAwMDB9LAotCXsweDAwMDE2M2M4LCAweDE0MDIxNDAyfSwKLQl7MHgwMDAxNjNjYywgMHgwMDAwMTQwMn0sCi0JezB4MDAwMTYzZDAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDE2M2Q0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAxNmM0MCwgMHgxMzE5YzE3OH0sCi0JezB4MDAwMTZjNDQsIDB4MTAwMDAwMDB9LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBhcjk0ODVNb2Rlc19sb3dlc3Rfb2JfZGJfdHhfZ2Fpbl8xXzBbXVs1XSA9IHsKLQkvKiAgQWRkciAgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICovCi0JezB4MDAwMGE0MTAsIDB4MDAwMDUwZDksIDB4MDAwMDUwZDksIDB4MDAwMDUwZDgsIDB4MDAwMDUwZDh9LAotCXsweDAwMDBhNTAwLCAweDAwMDIyMjAwLCAweDAwMDIyMjAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTUwNCwgMHgwNTA2MjAwMiwgMHgwNTA2MjAwMiwgMHgwNDAwMDAwMiwgMHgwNDAwMDAwMn0sCi0JezB4MDAwMGE1MDgsIDB4MGMwMDJlMDAsIDB4MGMwMDJlMDAsIDB4MDgwMDAwMDQsIDB4MDgwMDAwMDR9LAotCXsweDAwMDBhNTBjLCAweDExMDYyMjAyLCAweDExMDYyMjAyLCAweDBkMDAwMjAwLCAweDBkMDAwMjAwfSwKLQl7MHgwMDAwYTUxMCwgMHgxNzAyMmUwMCwgMHgxNzAyMmUwMCwgMHgxMTAwMDIwMiwgMHgxMTAwMDIwMn0sCi0JezB4MDAwMGE1MTQsIDB4MWQwMDBlYzIsIDB4MWQwMDBlYzIsIDB4MTUwMDA0MDAsIDB4MTUwMDA0MDB9LAotCXsweDAwMDBhNTE4LCAweDI1MDIwZWMwLCAweDI1MDIwZWMwLCAweDE5MDAwNDAyLCAweDE5MDAwNDAyfSwKLQl7MHgwMDAwYTUxYywgMHgyYjAyMGVjMywgMHgyYjAyMGVjMywgMHgxZDAwMDQwNCwgMHgxZDAwMDQwNH0sCi0JezB4MDAwMGE1MjAsIDB4MmYwMDFmMDQsIDB4MmYwMDFmMDQsIDB4MjEwMDA2MDMsIDB4MjEwMDA2MDN9LAotCXsweDAwMDBhNTI0LCAweDM1MDAxZmM0LCAweDM1MDAxZmM0LCAweDI1MDAwNjA1LCAweDI1MDAwNjA1fSwKLQl7MHgwMDAwYTUyOCwgMHgzYzAyMmYwNCwgMHgzYzAyMmYwNCwgMHgyYTAwMGEwMywgMHgyYTAwMGEwM30sCi0JezB4MDAwMGE1MmMsIDB4NDEwMjNlODUsIDB4NDEwMjNlODUsIDB4MmMwMDBhMDQsIDB4MmMwMDBhMDR9LAotCXsweDAwMDBhNTMwLCAweDQ4MDIzZWM2LCAweDQ4MDIzZWM2LCAweDJlMDAwYTIwLCAweDJlMDAwYTIwfSwKLQl7MHgwMDAwYTUzNCwgMHg0ZDAyM2YwMSwgMHg0ZDAyM2YwMSwgMHgzNDAwMGUyMCwgMHgzNDAwMGUyMH0sCi0JezB4MDAwMGE1MzgsIDB4NTMwMjNmNGIsIDB4NTMwMjNmNGIsIDB4MzgwMDBlMjIsIDB4MzgwMDBlMjJ9LAotCXsweDAwMDBhNTNjLCAweDVhMDI3ZjA5LCAweDVhMDI3ZjA5LCAweDNjMDAwZTI0LCAweDNjMDAwZTI0fSwKLQl7MHgwMDAwYTU0MCwgMHg1ZjAyN2ZjOSwgMHg1ZjAyN2ZjOSwgMHg0MDAwMGUyNiwgMHg0MDAwMGUyNn0sCi0JezB4MDAwMGE1NDQsIDB4NjUwMmZlY2EsIDB4NjUwMmZlY2EsIDB4NDMwMDE2NDAsIDB4NDMwMDE2NDB9LAotCXsweDAwMDBhNTQ4LCAweDZiMDJmZjRhLCAweDZiMDJmZjRhLCAweDQ2MDAxNjYwLCAweDQ2MDAxNjYwfSwKLQl7MHgwMDAwYTU0YywgMHg3MjAzZmVjYSwgMHg3MjAzZmVjYSwgMHg0OTAwMTg2MSwgMHg0OTAwMTg2MX0sCi0JezB4MDAwMGE1NTAsIDB4NzcwM2ZmMGIsIDB4NzcwM2ZmMGIsIDB4NGMwMDFhODEsIDB4NGMwMDFhODF9LAotCXsweDAwMDBhNTU0LCAweDdkMDZmZmNiLCAweDdkMDZmZmNiLCAweDRmMDAxYTgzLCAweDRmMDAxYTgzfSwKLQl7MHgwMDAwYTU1OCwgMHg4NDA3ZmYwYiwgMHg4NDA3ZmYwYiwgMHg1NDAwMWM4NSwgMHg1NDAwMWM4NX0sCi0JezB4MDAwMGE1NWMsIDB4ODkwN2ZmY2IsIDB4ODkwN2ZmY2IsIDB4NTgwMDFjZTUsIDB4NTgwMDFjZTV9LAotCXsweDAwMDBhNTYwLCAweDkwMGZmZjBiLCAweDkwMGZmZjBiLCAweDViMDAxY2U5LCAweDViMDAxY2U5fSwKLQl7MHgwMDAwYTU2NCwgMHg5NjBmZmZjYiwgMHg5NjBmZmZjYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCi0JezB4MDAwMGE1NjgsIDB4OWMxZmZmMGIsIDB4OWMxZmZmMGIsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAotCXsweDAwMDBhNTZjLCAweDljMWZmZjBiLCAweDljMWZmZjBiLCAweDYwMDAxZWViLCAweDYwMDAxZWVifSwKLQl7MHgwMDAwYTU3MCwgMHg5YzFmZmYwYiwgMHg5YzFmZmYwYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCi0JezB4MDAwMGE1NzQsIDB4OWMxZmZmMGIsIDB4OWMxZmZmMGIsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAotCXsweDAwMDBhNTc4LCAweDljMWZmZjBiLCAweDljMWZmZjBiLCAweDYwMDAxZWViLCAweDYwMDAxZWVifSwKLQl7MHgwMDAwYTU3YywgMHg5YzFmZmYwYiwgMHg5YzFmZmYwYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCi0JezB4MDAwMTYwNDQsIDB4MDViNmIyZGIsIDB4MDViNmIyZGIsIDB4MDViNmIyZGIsIDB4MDViNmIyZGJ9LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBhcjk0ODVfMV8wX2Jhc2ViYW5kX2NvcmVbXVsyXSA9IHsKLQkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCi0JezB4MDAwMDk4MDAsIDB4YWZlNjhlMzB9LAotCXsweDAwMDA5ODA0LCAweGZkMTRlMDAwfSwKLQl7MHgwMDAwOTgwOCwgMHg5YzBhOGY2Yn0sCi0JezB4MDAwMDk4MGMsIDB4MDQ4MDAwMDB9LAotCXsweDAwMDA5ODE0LCAweDkyODBjMDBhfSwKLQl7MHgwMDAwOTgxOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDk4MWMsIDB4MDAwMjAwMjh9LAotCXsweDAwMDA5ODM0LCAweDVmM2NhM2RlfSwKLQl7MHgwMDAwOTgzOCwgMHgwMTA4ZWNmZn0sCi0JezB4MDAwMDk4M2MsIDB4MTQ3NTA2MDB9LAotCXsweDAwMDA5ODgwLCAweDIwMWZmZjAwfSwKLQl7MHgwMDAwOTg4NCwgMHgwMDAwMTA0Mn0sCi0JezB4MDAwMDk4YTQsIDB4MDAyMDA0MDB9LAotCXsweDAwMDA5OGIwLCAweDUyNDQwYmJlfSwKLQl7MHgwMDAwOThiYywgMHgwMDAwMDAwMn0sCi0JezB4MDAwMDk4ZDAsIDB4MDA0YjZhOGV9LAotCXsweDAwMDA5OGQ0LCAweDAwMDAwODIwfSwKLQl7MHgwMDAwOThkYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDk4ZjAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA5OGY0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwOWMwNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDljMDgsIDB4MDMyMDAwMDB9LAotCXsweDAwMDA5YzBjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwOWMxMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDljMTQsIDB4MDAwNDYzODR9LAotCXsweDAwMDA5YzE4LCAweDA1YjZiNDQwfSwKLQl7MHgwMDAwOWMxYywgMHgwMGI2YjQ0MH0sCi0JezB4MDAwMDlkMDAsIDB4YzA4MGEzMzN9LAotCXsweDAwMDA5ZDA0LCAweDQwMjA2YzEwfSwKLQl7MHgwMDAwOWQwOCwgMHgwMDljNDA2MH0sCi0JezB4MDAwMDlkMGMsIDB4MTg4MzgwMGF9LAotCXsweDAwMDA5ZDEwLCAweDAxODM0MDYxfSwKLQl7MHgwMDAwOWQxNCwgMHgwMGMwMDQwMH0sCi0JezB4MDAwMDlkMTgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA5ZDFjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwOWUwOCwgMHgwMDM4MjMzY30sCi0JezB4MDAwMDllMjQsIDB4OTkwYmI1MTV9LAotCXsweDAwMDA5ZTI4LCAweDBhNmYwMDAwfSwKLQl7MHgwMDAwOWUzMCwgMHgwNjMzNmY3N30sCi0JezB4MDAwMDllMzQsIDB4NmFmNjUzMmZ9LAotCXsweDAwMDA5ZTM4LCAweDBjYzgwYzAwfSwKLQl7MHgwMDAwOWU0MCwgMHgwZDI2MTgyMH0sCi0JezB4MDAwMDllNGMsIDB4MDAwMDEwMDR9LAotCXsweDAwMDA5ZTUwLCAweDAwZmYwM2YxfSwKLQl7MHgwMDAwOWZjMCwgMHg4MGJlNDc4OH0sCi0JezB4MDAwMDlmYzQsIDB4MDAwMWVmYjV9LAotCXsweDAwMDA5ZmNjLCAweDQwMDAwMDE0fSwKLQl7MHgwMDAwYTIwYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEyMTAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMjIwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTIyNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEyMjgsIDB4MTAwMDIzMTB9LAotCXsweDAwMDBhMjNjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTI0NCwgMHgwYzAwMDAwMH0sCi0JezB4MDAwMGEyYTAsIDB4MDAwMDAwMDF9LAotCXsweDAwMDBhMmMwLCAweDAwMDAwMDAxfSwKLQl7MHgwMDAwYTJjOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEyY2MsIDB4MThjNDM0MzN9LAotCXsweDAwMDBhMmQ0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTJkYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEyZTAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMmU0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTJlOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEyZWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMmYwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTJmNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEyZjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMzQ0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTM0YywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEzNTAsIDB4MDAwMGEwMDB9LAotCXsweDAwMDBhMzY0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTM3MCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEzOTAsIDB4MDAwMDAwMDF9LAotCXsweDAwMDBhMzk0LCAweDAwMDAwNDQ0fSwKLQl7MHgwMDAwYTM5OCwgMHgwMDFmMGUwZn0sCi0JezB4MDAwMGEzOWMsIDB4MDA3NTM5M2Z9LAotCXsweDAwMDBhM2EwLCAweGI3OWY2NDI3fSwKLQl7MHgwMDAwYTNhNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEzYTgsIDB4YWFhYWFhYWF9LAotCXsweDAwMDBhM2FjLCAweDNjNDY2NDc4fSwKLQl7MHgwMDAwYTNjMCwgMHgyMDIwMjAyMH0sCi0JezB4MDAwMGEzYzQsIDB4MjIyMjIyMjB9LAotCXsweDAwMDBhM2M4LCAweDIwMjAwMDIwfSwKLQl7MHgwMDAwYTNjYywgMHgyMDIwMjAyMH0sCi0JezB4MDAwMGEzZDAsIDB4MjAyMDIwMjB9LAotCXsweDAwMDBhM2Q0LCAweDIwMjAyMDIwfSwKLQl7MHgwMDAwYTNkOCwgMHgyMDIwMjAyMH0sCi0JezB4MDAwMGEzZGMsIDB4MjAyMDIwMjB9LAotCXsweDAwMDBhM2UwLCAweDIwMjAyMDIwfSwKLQl7MHgwMDAwYTNlNCwgMHgyMDIwMjAyMH0sCi0JezB4MDAwMGEzZTgsIDB4MjAyMDIwMjB9LAotCXsweDAwMDBhM2VjLCAweDIwMjAyMDIwfSwKLQl7MHgwMDAwYTNmMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEzZjQsIDB4MDAwMDAwMDZ9LAotCXsweDAwMDBhM2Y4LCAweDBjZGJkMzgwfSwKLQl7MHgwMDAwYTNmYywgMHgwMDBmMGYwMX0sCi0JezB4MDAwMGE0MDAsIDB4OGZhOTFmMDF9LAotCXsweDAwMDBhNDA0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTQwOCwgMHgwZTc5ZTVjNn0sCi0JezB4MDAwMGE0MGMsIDB4MDA4MjA4MjB9LAotCXsweDAwMDBhNDE0LCAweDFjZTczOWNlfSwKLQl7MHgwMDAwYTQxOCwgMHgyZDAwMTFjZX0sCi0JezB4MDAwMGE0MWMsIDB4MWNlNzM5Y2V9LAotCXsweDAwMDBhNDIwLCAweDAwMDAwMWNlfSwKLQl7MHgwMDAwYTQyNCwgMHgxY2U3MzljZX0sCi0JezB4MDAwMGE0MjgsIDB4MDAwMDAxY2V9LAotCXsweDAwMDBhNDJjLCAweDFjZTczOWNlfSwKLQl7MHgwMDAwYTQzMCwgMHgxY2U3MzljZX0sCi0JezB4MDAwMGE0MzQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhNDM4LCAweDAwMDAxODAxfSwKLQl7MHgwMDAwYTQzYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE0NDAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhNDQ0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTQ0OCwgMHgwNDAwMDAwMH0sCi0JezB4MDAwMGE0NGMsIDB4MDAwMDAwMDF9LAotCXsweDAwMDBhNDUwLCAweDAwMDEwMDAwfSwKLQl7MHgwMDAwYTQ1OCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE1YzQsIDB4M2ZhZDlkNzR9LAotCXsweDAwMDBhNWM4LCAweDAwNDgwNjBhfSwKLQl7MHgwMDAwYTVjYywgMHgwMDAwMDYzN30sCi0JezB4MDAwMGE3NjAsIDB4MDMwMjAxMDB9LAotCXsweDAwMDBhNzY0LCAweDA5MDgwNTA0fSwKLQl7MHgwMDAwYTc2OCwgMHgwZDBjMGIwYX0sCi0JezB4MDAwMGE3NmMsIDB4MTMxMjExMTB9LAotCXsweDAwMDBhNzcwLCAweDMxMzAxNTE0fSwKLQl7MHgwMDAwYTc3NCwgMHgzNTM0MzMzMn0sCi0JezB4MDAwMGE3NzgsIDB4MDAwMDAwMzZ9LAotCXsweDAwMDBhNzgwLCAweDAwMDAwODM4fSwKLQl7MHgwMDAwYTdjMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE3YzQsIDB4ZmZmZmZmZmN9LAotCXsweDAwMDBhN2M4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTdjYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE3ZDAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhN2Q0LCAweDAwMDAwMDA0fSwKLQl7MHgwMDAwYTdkYywgMHgwMDAwMDAwMX0sCi19OwotCi1zdGF0aWMgY29uc3QgdTMyIGFyOTQ4NU1vZGVzX2hpZ2hfb2JfZGJfdHhfZ2Fpbl8xXzBbXVs1XSA9IHsKLQkvKiBBZGRyICAgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgIDJHX0hUMjAgICovCi0JezB4MDAwMGE0MTAsIDB4MDAwMDUwZDksIDB4MDAwMDUwZDksIDB4MDAwMDUwZDgsIDB4MDAwMDUwZDh9LAotCXsweDAwMDBhNTAwLCAweDAwMDIyMjAwLCAweDAwMDIyMjAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTUwNCwgMHgwNTA2MjAwMiwgMHgwNTA2MjAwMiwgMHgwNDAwMDAwMiwgMHgwNDAwMDAwMn0sCi0JezB4MDAwMGE1MDgsIDB4MGMwMDJlMDAsIDB4MGMwMDJlMDAsIDB4MDgwMDAwMDQsIDB4MDgwMDAwMDR9LAotCXsweDAwMDBhNTBjLCAweDExMDYyMjAyLCAweDExMDYyMjAyLCAweDBkMDAwMjAwLCAweDBkMDAwMjAwfSwKLQl7MHgwMDAwYTUxMCwgMHgxNzAyMmUwMCwgMHgxNzAyMmUwMCwgMHgxMTAwMDIwMiwgMHgxMTAwMDIwMn0sCi0JezB4MDAwMGE1MTQsIDB4MWQwMDBlYzIsIDB4MWQwMDBlYzIsIDB4MTUwMDA0MDAsIDB4MTUwMDA0MDB9LAotCXsweDAwMDBhNTE4LCAweDI1MDIwZWMwLCAweDI1MDIwZWMwLCAweDE5MDAwNDAyLCAweDE5MDAwNDAyfSwKLQl7MHgwMDAwYTUxYywgMHgyYjAyMGVjMywgMHgyYjAyMGVjMywgMHgxZDAwMDQwNCwgMHgxZDAwMDQwNH0sCi0JezB4MDAwMGE1MjAsIDB4MmYwMDFmMDQsIDB4MmYwMDFmMDQsIDB4MjEwMDA2MDMsIDB4MjEwMDA2MDN9LAotCXsweDAwMDBhNTI0LCAweDM1MDAxZmM0LCAweDM1MDAxZmM0LCAweDI1MDAwNjA1LCAweDI1MDAwNjA1fSwKLQl7MHgwMDAwYTUyOCwgMHgzYzAyMmYwNCwgMHgzYzAyMmYwNCwgMHgyYTAwMGEwMywgMHgyYTAwMGEwM30sCi0JezB4MDAwMGE1MmMsIDB4NDEwMjNlODUsIDB4NDEwMjNlODUsIDB4MmMwMDBhMDQsIDB4MmMwMDBhMDR9LAotCXsweDAwMDBhNTMwLCAweDQ4MDIzZWM2LCAweDQ4MDIzZWM2LCAweDJlMDAwYTIwLCAweDJlMDAwYTIwfSwKLQl7MHgwMDAwYTUzNCwgMHg0ZDAyM2YwMSwgMHg0ZDAyM2YwMSwgMHgzNDAwMGUyMCwgMHgzNDAwMGUyMH0sCi0JezB4MDAwMGE1MzgsIDB4NTMwMjNmNGIsIDB4NTMwMjNmNGIsIDB4MzgwMDBlMjIsIDB4MzgwMDBlMjJ9LAotCXsweDAwMDBhNTNjLCAweDVhMDI3ZjA5LCAweDVhMDI3ZjA5LCAweDNjMDAwZTI0LCAweDNjMDAwZTI0fSwKLQl7MHgwMDAwYTU0MCwgMHg1ZjAyN2ZjOSwgMHg1ZjAyN2ZjOSwgMHg0MDAwMGUyNiwgMHg0MDAwMGUyNn0sCi0JezB4MDAwMGE1NDQsIDB4NjUwMmZlY2EsIDB4NjUwMmZlY2EsIDB4NDMwMDE2NDAsIDB4NDMwMDE2NDB9LAotCXsweDAwMDBhNTQ4LCAweDZiMDJmZjRhLCAweDZiMDJmZjRhLCAweDQ2MDAxNjYwLCAweDQ2MDAxNjYwfSwKLQl7MHgwMDAwYTU0YywgMHg3MjAzZmVjYSwgMHg3MjAzZmVjYSwgMHg0OTAwMTg2MSwgMHg0OTAwMTg2MX0sCi0JezB4MDAwMGE1NTAsIDB4NzcwM2ZmMGIsIDB4NzcwM2ZmMGIsIDB4NGMwMDFhODEsIDB4NGMwMDFhODF9LAotCXsweDAwMDBhNTU0LCAweDdkMDZmZmNiLCAweDdkMDZmZmNiLCAweDRmMDAxYTgzLCAweDRmMDAxYTgzfSwKLQl7MHgwMDAwYTU1OCwgMHg4NDA3ZmYwYiwgMHg4NDA3ZmYwYiwgMHg1NDAwMWM4NSwgMHg1NDAwMWM4NX0sCi0JezB4MDAwMGE1NWMsIDB4ODkwN2ZmY2IsIDB4ODkwN2ZmY2IsIDB4NTgwMDFjZTUsIDB4NTgwMDFjZTV9LAotCXsweDAwMDBhNTYwLCAweDkwMGZmZjBiLCAweDkwMGZmZjBiLCAweDViMDAxY2U5LCAweDViMDAxY2U5fSwKLQl7MHgwMDAwYTU2NCwgMHg5NjBmZmZjYiwgMHg5NjBmZmZjYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCi0JezB4MDAwMGE1NjgsIDB4OWMxZmZmMGIsIDB4OWMxZmZmMGIsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAotCXsweDAwMDBhNTZjLCAweDljMWZmZjBiLCAweDljMWZmZjBiLCAweDYwMDAxZWViLCAweDYwMDAxZWVifSwKLQl7MHgwMDAwYTU3MCwgMHg5YzFmZmYwYiwgMHg5YzFmZmYwYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCi0JezB4MDAwMGE1NzQsIDB4OWMxZmZmMGIsIDB4OWMxZmZmMGIsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAotCXsweDAwMDBhNTc4LCAweDljMWZmZjBiLCAweDljMWZmZjBiLCAweDYwMDAxZWViLCAweDYwMDAxZWVifSwKLQl7MHgwMDAwYTU3YywgMHg5YzFmZmYwYiwgMHg5YzFmZmYwYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCi0JezB4MDAwMTYwNDQsIDB4MDViNmIyZGIsIDB4MDViNmIyZGIsIDB4MDViNmIyZGIsIDB4MDViNmIyZGJ9LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBhcjk0ODVDb21tb25fcnhfZ2Fpbl8xXzBbXVsyXSA9IHsKLQkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCi0JezB4MDAwMGEwMDAsIDB4MDAwMTAwMDB9LAotCXsweDAwMDBhMDA0LCAweDAwMDMwMDAyfSwKLQl7MHgwMDAwYTAwOCwgMHgwMDA1MDAwNH0sCi0JezB4MDAwMGEwMGMsIDB4MDA4MTAwODB9LAotCXsweDAwMDBhMDEwLCAweDAxODAwMDgyfSwKLQl7MHgwMDAwYTAxNCwgMHgwMTgyMDE4MX0sCi0JezB4MDAwMGEwMTgsIDB4MDE4NDAxODN9LAotCXsweDAwMDBhMDFjLCAweDAxODgwMTg1fSwKLQl7MHgwMDAwYTAyMCwgMHgwMThhMDE4OX0sCi0JezB4MDAwMGEwMjQsIDB4MDI4NTAyODR9LAotCXsweDAwMDBhMDI4LCAweDAyODkwMjg4fSwKLQl7MHgwMDAwYTAyYywgMHgwMzg1MDM4NH0sCi0JezB4MDAwMGEwMzAsIDB4MDM4OTAzODh9LAotCXsweDAwMDBhMDM0LCAweDAzOGIwMzhhfSwKLQl7MHgwMDAwYTAzOCwgMHgwMzhkMDM4Y30sCi0JezB4MDAwMGEwM2MsIDB4MDM5MTAzOTB9LAotCXsweDAwMDBhMDQwLCAweDAzOTMwMzkyfSwKLQl7MHgwMDAwYTA0NCwgMHgwMzk1MDM5NH0sCi0JezB4MDAwMGEwNDgsIDB4MDAwMDAzOTZ9LAotCXsweDAwMDBhMDRjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTA1MCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwNTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMDU4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTA1YywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwNjAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMDY0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTA2OCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwNmMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMDcwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTA3NCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwNzgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMDdjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTA4MCwgMHgyODI4MjgyOH0sCi0JezB4MDAwMGEwODQsIDB4MjgyODI4Mjh9LAotCXsweDAwMDBhMDg4LCAweDI4MjgyODI4fSwKLQl7MHgwMDAwYTA4YywgMHgyODI4MjgyOH0sCi0JezB4MDAwMGEwOTAsIDB4MjgyODI4Mjh9LAotCXsweDAwMDBhMDk0LCAweDIxMjEyMTI4fSwKLQl7MHgwMDAwYTA5OCwgMHgxNzFjMWMxY30sCi0JezB4MDAwMGEwOWMsIDB4MDIwMjAyMTJ9LAotCXsweDAwMDBhMGEwLCAweDAwMDAwMjAyfSwKLQl7MHgwMDAwYTBhNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwYTgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMGFjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTBiMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwYjQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMGI4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTBiYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGEwYzAsIDB4MDAxZjAwMDB9LAotCXsweDAwMDBhMGM0LCAweDExMWYxMTAwfSwKLQl7MHgwMDAwYTBjOCwgMHgxMTFkMTExZX0sCi0JezB4MDAwMGEwY2MsIDB4MTExYjExMWN9LAotCXsweDAwMDBhMGQwLCAweDIyMDMyMjA0fSwKLQl7MHgwMDAwYTBkNCwgMHgyMjAxMjIwMn0sCi0JezB4MDAwMGEwZDgsIDB4MjIxZjIyMDB9LAotCXsweDAwMDBhMGRjLCAweDIyMWQyMjFlfSwKLQl7MHgwMDAwYTBlMCwgMHgzMzAxMzMwMn0sCi0JezB4MDAwMGEwZTQsIDB4MzMxZjMzMDB9LAotCXsweDAwMDBhMGU4LCAweDQ0MDIzMzFlfSwKLQl7MHgwMDAwYTBlYywgMHg0NDAwNDQwMX0sCi0JezB4MDAwMGEwZjAsIDB4NDQxZTQ0MWZ9LAotCXsweDAwMDBhMGY0LCAweDU1MDE1NTAyfSwKLQl7MHgwMDAwYTBmOCwgMHg1NTFmNTUwMH0sCi0JezB4MDAwMGEwZmMsIDB4NjYwMjU1MWV9LAotCXsweDAwMDBhMTAwLCAweDY2MDA2NjAxfSwKLQl7MHgwMDAwYTEwNCwgMHg2NjFlNjYxZn0sCi0JezB4MDAwMGExMDgsIDB4NzcwMzY2MWR9LAotCXsweDAwMDBhMTBjLCAweDc3MDE3NzAyfSwKLQl7MHgwMDAwYTExMCwgMHgwMDAwNzcwMH0sCi0JezB4MDAwMGExMTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMTE4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTExYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExMjAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMTI0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTEyOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExMmMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMTMwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTEzNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExMzgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMTNjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTE0MCwgMHgwMDFmMDAwMH0sCi0JezB4MDAwMGExNDQsIDB4MTExZjExMDB9LAotCXsweDAwMDBhMTQ4LCAweDExMWQxMTFlfSwKLQl7MHgwMDAwYTE0YywgMHgxMTFiMTExY30sCi0JezB4MDAwMGExNTAsIDB4MjIwMzIyMDR9LAotCXsweDAwMDBhMTU0LCAweDIyMDEyMjAyfSwKLQl7MHgwMDAwYTE1OCwgMHgyMjFmMjIwMH0sCi0JezB4MDAwMGExNWMsIDB4MjIxZDIyMWV9LAotCXsweDAwMDBhMTYwLCAweDMzMDEzMzAyfSwKLQl7MHgwMDAwYTE2NCwgMHgzMzFmMzMwMH0sCi0JezB4MDAwMGExNjgsIDB4NDQwMjMzMWV9LAotCXsweDAwMDBhMTZjLCAweDQ0MDA0NDAxfSwKLQl7MHgwMDAwYTE3MCwgMHg0NDFlNDQxZn0sCi0JezB4MDAwMGExNzQsIDB4NTUwMTU1MDJ9LAotCXsweDAwMDBhMTc4LCAweDU1MWY1NTAwfSwKLQl7MHgwMDAwYTE3YywgMHg2NjAyNTUxZX0sCi0JezB4MDAwMGExODAsIDB4NjYwMDY2MDF9LAotCXsweDAwMDBhMTg0LCAweDY2MWU2NjFmfSwKLQl7MHgwMDAwYTE4OCwgMHg3NzAzNjYxZH0sCi0JezB4MDAwMGExOGMsIDB4NzcwMTc3MDJ9LAotCXsweDAwMDBhMTkwLCAweDAwMDA3NzAwfSwKLQl7MHgwMDAwYTE5NCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExOTgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMTljLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFhMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExYTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWE4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFhYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExYjAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWI0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFiOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExYmMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWMwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFjNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExYzgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWNjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFkMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExZDQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWQ4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFkYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExZTAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWU0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTFlOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGExZWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMWYwLCAweDAwMDAwMzk2fSwKLQl7MHgwMDAwYTFmNCwgMHgwMDAwMDM5Nn0sCi0JezB4MDAwMGExZjgsIDB4MDAwMDAzOTZ9LAotCXsweDAwMDBhMWZjLCAweDAwMDAwMjk2fSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5NDg1XzFfMF9wY2llX3BoeV9wbGxfb25fY2xrcmVxX2VuYWJsZV9MMVtdWzJdID0gewotCS8qICAgQWRkciAgICBhbGxtb2RlcyAgKi8KLQl7MHgwMDAxOGMwMCwgMHgxMDI1MmU1ZX0sCi0JezB4MDAwMThjMDQsIDB4MDAwODAxZDh9LAotCXsweDAwMDE4YzA4LCAweDAwMDA1ODBjfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5NDg1XzFfMF9wY2llX3BoeV9jbGtyZXFfZW5hYmxlX0wxW11bMl0gPSB7Ci0JLyogIEFkZHIgICAgYWxsbW9kZXMgICAqLwotCXsweDAwMDE4YzAwLCAweDEwMjUzZTVlfSwKLQl7MHgwMDAxOGMwNCwgMHgwMDA4MDFkOH0sCi0JezB4MDAwMThjMDgsIDB4MDAwMDU4MGN9LAotfTsKLQotc3RhdGljIGNvbnN0IHUzMiBhcjk0ODVfMV8wX3NvY19wcmVhbWJsZVtdWzJdID0gewotCS8qICAgQWRkciAgICAgYWxsbW9kZXMgKi8KLQl7MHgwMDAwNDA5MCwgMHgwMGFhMTBhYX0sCi0JezB4MDAwMDQwYTQsIDB4MDBhMGM5Yzl9LAotCXsweDAwMDA3MDQ4LCAweDAwMDAwMDA0fSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5NDg1X2Zhc3RfY2xvY2tfMV8wX2Jhc2ViYW5kX3Bvc3RhbWJsZVtdWzNdID0gewotCS8qICAgQWRkciAgICAgIDVHX0hUMjAgICAgIDVHX0hUNDAgKi8KLQl7MHgwMDAwOWUwMCwgMHgwMzcyMTgyMSwgMHgwMzcyMTgyMX0sCi0JezB4MDAwMGEyMzAsIDB4MDAwMDQwMGIsIDB4MDAwMDQwMTZ9LAotCXsweDAwMDBhMjU0LCAweDAwMDAwODk4LCAweDAwMDAxMTMwfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5NDg1XzFfMF9iYXNlYmFuZF9wb3N0YW1ibGVbXVs1XSA9IHsKLQkvKiBBZGRyICAgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICovCi0JezB4MDAwMDk4MTAsIDB4ZDAwYTgwMDUsIDB4ZDAwYTgwMDUsIDB4ZDAwYTgwMDUsIDB4ZDAwYTgwMDV9LAotCXsweDAwMDA5ODIwLCAweDIwNmEwMDJlLCAweDIwNmEwMDJlLCAweDIwNmEwMDJlLCAweDIwNmEwMDJlfSwKLQl7MHgwMDAwOTgyNCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMH0sCi0JezB4MDAwMDk4MjgsIDB4MDY5MDMwODEsIDB4MDY5MDMwODEsIDB4MDY5MDM4ODEsIDB4MDY5MDM4ODF9LAotCXsweDAwMDA5ODJjLCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0fSwKLQl7MHgwMDAwOTgzMCwgMHgwMDAwMDU5YywgMHgwMDAwMDU5YywgMHgwMDAwMDU5YywgMHgwMDAwMDU5Y30sCi0JezB4MDAwMDljMDAsIDB4MDAwMDAwNDQsIDB4MDAwMDAwNDQsIDB4MDAwMDAwNDQsIDB4MDAwMDAwNDR9LAotCXsweDAwMDA5ZTAwLCAweDAzNzIxNjFlLCAweDAzNzIxNjFlLCAweDAzNzIxNmEwLCAweDAzNzIxNmEwfSwKLQl7MHgwMDAwOWUwNCwgMHgwMDE4MjAyMCwgMHgwMDE4MjAyMCwgMHgwMDE4MjAyMCwgMHgwMDE4MjAyMH0sCi0JezB4MDAwMDllMGMsIDB4NmM0MDAwZTIsIDB4NmQ0MDAwZTIsIDB4NmQ0MDAwZTIsIDB4NmM0MDAwZTJ9LAotCXsweDAwMDA5ZTEwLCAweDdlYzg4ZDJlLCAweDdlYzg4ZDJlLCAweDdlYzgwZDJlLCAweDdlYzgwZDJlfSwKLQl7MHgwMDAwOWUxNCwgMHgzMTM5NWQ1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM5NWQ1ZX0sCi0JezB4MDAwMDllMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA5ZTFjLCAweDAwMDFjZjljLCAweDAwMDFjZjljLCAweDAwMDIxZjljLCAweDAwMDIxZjljfSwKLQl7MHgwMDAwOWUyMCwgMHgwMDAwMDNiNSwgMHgwMDAwMDNiNSwgMHgwMDAwMDNjZSwgMHgwMDAwMDNjZX0sCi0JezB4MDAwMDllMmMsIDB4MDAwMDAwMWMsIDB4MDAwMDAwMWMsIDB4MDAwMDAwMjEsIDB4MDAwMDAwMjF9LAotCXsweDAwMDA5ZTNjLCAweGNmOTQ2MjIwLCAweGNmOTQ2MjIwLCAweGNmOTQ2MjIyLCAweGNmOTQ2MjIyfSwKLQl7MHgwMDAwOWU0NCwgMHgwMjMyMWUyNywgMHgwMjMyMWUyNywgMHgwMjI4MjMyNCwgMHgwMjI4MjMyNH0sCi0JezB4MDAwMDllNDgsIDB4NTAzMDIwMWEsIDB4NTAzMDIwMWEsIDB4NTAzMDIwMTAsIDB4NTAzMDIwMTB9LAotCXsweDAwMDA5ZmM4LCAweDAwMDNmMDAwLCAweDAwMDNmMDAwLCAweDAwMDFhMDAwLCAweDAwMDFhMDAwfSwKLQl7MHgwMDAwYTIwNCwgMHgwMTMwM2ZjMCwgMHgwMTMwM2ZjNCwgMHgwMTMwM2ZjNCwgMHgwMTMwM2ZjMH0sCi0JezB4MDAwMGEyMDgsIDB4MDAwMDAxMDQsIDB4MDAwMDAxMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDR9LAotCXsweDAwMDBhMjMwLCAweDAwMDA0MDBhLCAweDAwMDA0MDE0LCAweDAwMDA0MDE2LCAweDAwMDA0MDBifSwKLQl7MHgwMDAwYTIzNCwgMHgxMDAwMGZmZiwgMHgxMDAwMGZmZiwgMHgxMDAwMGZmZiwgMHgxMDAwMGZmZn0sCi0JezB4MDAwMGEyMzgsIDB4ZmZiODEwMTgsIDB4ZmZiODEwMTgsIDB4ZmZiODEwMTgsIDB4ZmZiODEwMTh9LAotCXsweDAwMDBhMjUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMjEwLCAweDAwMDAwMTA4fSwKLQl7MHgwMDAwYTI1NCwgMHgwMDAwMDdkMCwgMHgwMDAwMGZhMCwgMHgwMDAwMTEzMCwgMHgwMDAwMDg5OH0sCi0JezB4MDAwMGEyNTgsIDB4MDIwMjAwMDIsIDB4MDIwMjAwMDIsIDB4MDIwMjAwMDIsIDB4MDIwMjAwMDJ9LAotCXsweDAwMDBhMjVjLCAweDAxMDAwZTBlLCAweDAxMDAwZTBlLCAweDAxMDAwZTBlLCAweDAxMDAwZTBlfSwKLQl7MHgwMDAwYTI2MCwgMHgzYTAyMTUwMSwgMHgzYTAyMTUwMSwgMHgzYTAyMTUwMSwgMHgzYTAyMTUwMX0sCi0JezB4MDAwMGEyNjQsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGV9LAotCXsweDAwMDBhMjgwLCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDBiLCAweDAwMDAwMDBifSwKLQl7MHgwMDAwYTI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDJhMCwgMHgwMDAwMDJhMH0sCi0JezB4MDAwMGEyODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDBhMjhjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwYTJjNCwgMHgwMDE1OGQxOCwgMHgwMDE1OGQxOCwgMHgwMDE1OGQxOCwgMHgwMDE1OGQxOH0sCi0JezB4MDAwMGEyZDAsIDB4MDAwNzE5ODEsIDB4MDAwNzE5ODEsIDB4MDAwNzE5ODEsIDB4MDAwNzE5ODJ9LAotCXsweDAwMDBhMmQ4LCAweGY5OTlhODNhLCAweGY5OTlhODNhLCAweGY5OTlhODNhLCAweGY5OTlhODNhfSwKLQl7MHgwMDAwYTM1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGJlMDQsIDB4MDA4MDIwMjAsIDB4MDA4MDIwMjAsIDB4MDA4MDIwMjAsIDB4MDA4MDIwMjB9LAotCXsweDAwMDBiZTE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5NDg1TW9kZXNfbG93X29iX2RiX3R4X2dhaW5fMV8wW11bNV0gPSB7Ci0JLyogIEFkZHIgICAgICA1R19IVDIwICAgIDVHX0hUNDAgICAgIDJHX0hUNDAgICAgIDJHX0hUMjAgICAqLwotCXsweDAwMDBhNDEwLCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ5LCAweDAwMDA1MGQ4LCAweDAwMDA1MGQ4fSwKLQl7MHgwMDAwYTUwMCwgMHgwMDAyMjIwMCwgMHgwMDAyMjIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMGE1MDQsIDB4MDUwNjIwMDIsIDB4MDUwNjIwMDIsIDB4MDQwMDAwMDIsIDB4MDQwMDAwMDJ9LAotCXsweDAwMDBhNTA4LCAweDBjMDAyZTAwLCAweDBjMDAyZTAwLCAweDA4MDAwMDA0LCAweDA4MDAwMDA0fSwKLQl7MHgwMDAwYTUwYywgMHgxMTA2MjIwMiwgMHgxMTA2MjIwMiwgMHgwZDAwMDIwMCwgMHgwZDAwMDIwMH0sCi0JezB4MDAwMGE1MTAsIDB4MTcwMjJlMDAsIDB4MTcwMjJlMDAsIDB4MTEwMDAyMDIsIDB4MTEwMDAyMDJ9LAotCXsweDAwMDBhNTE0LCAweDFkMDAwZWMyLCAweDFkMDAwZWMyLCAweDE1MDAwNDAwLCAweDE1MDAwNDAwfSwKLQl7MHgwMDAwYTUxOCwgMHgyNTAyMGVjMCwgMHgyNTAyMGVjMCwgMHgxOTAwMDQwMiwgMHgxOTAwMDQwMn0sCi0JezB4MDAwMGE1MWMsIDB4MmIwMjBlYzMsIDB4MmIwMjBlYzMsIDB4MWQwMDA0MDQsIDB4MWQwMDA0MDR9LAotCXsweDAwMDBhNTIwLCAweDJmMDAxZjA0LCAweDJmMDAxZjA0LCAweDIxMDAwNjAzLCAweDIxMDAwNjAzfSwKLQl7MHgwMDAwYTUyNCwgMHgzNTAwMWZjNCwgMHgzNTAwMWZjNCwgMHgyNTAwMDYwNSwgMHgyNTAwMDYwNX0sCi0JezB4MDAwMGE1MjgsIDB4M2MwMjJmMDQsIDB4M2MwMjJmMDQsIDB4MmEwMDBhMDMsIDB4MmEwMDBhMDN9LAotCXsweDAwMDBhNTJjLCAweDQxMDIzZTg1LCAweDQxMDIzZTg1LCAweDJjMDAwYTA0LCAweDJjMDAwYTA0fSwKLQl7MHgwMDAwYTUzMCwgMHg0ODAyM2VjNiwgMHg0ODAyM2VjNiwgMHgyZTAwMGEyMCwgMHgyZTAwMGEyMH0sCi0JezB4MDAwMGE1MzQsIDB4NGQwMjNmMDEsIDB4NGQwMjNmMDEsIDB4MzQwMDBlMjAsIDB4MzQwMDBlMjB9LAotCXsweDAwMDBhNTM4LCAweDUzMDIzZjRiLCAweDUzMDIzZjRiLCAweDM4MDAwZTIyLCAweDM4MDAwZTIyfSwKLQl7MHgwMDAwYTUzYywgMHg1YTAyN2YwOSwgMHg1YTAyN2YwOSwgMHgzYzAwMGUyNCwgMHgzYzAwMGUyNH0sCi0JezB4MDAwMGE1NDAsIDB4NWYwMjdmYzksIDB4NWYwMjdmYzksIDB4NDAwMDBlMjYsIDB4NDAwMDBlMjZ9LAotCXsweDAwMDBhNTQ0LCAweDY1MDJmZWNhLCAweDY1MDJmZWNhLCAweDQzMDAxNjQwLCAweDQzMDAxNjQwfSwKLQl7MHgwMDAwYTU0OCwgMHg2YjAyZmY0YSwgMHg2YjAyZmY0YSwgMHg0NjAwMTY2MCwgMHg0NjAwMTY2MH0sCi0JezB4MDAwMGE1NGMsIDB4NzIwM2ZlY2EsIDB4NzIwM2ZlY2EsIDB4NDkwMDE4NjEsIDB4NDkwMDE4NjF9LAotCXsweDAwMDBhNTUwLCAweDc3MDNmZjBiLCAweDc3MDNmZjBiLCAweDRjMDAxYTgxLCAweDRjMDAxYTgxfSwKLQl7MHgwMDAwYTU1NCwgMHg3ZDA2ZmZjYiwgMHg3ZDA2ZmZjYiwgMHg0ZjAwMWE4MywgMHg0ZjAwMWE4M30sCi0JezB4MDAwMGE1NTgsIDB4ODQwN2ZmMGIsIDB4ODQwN2ZmMGIsIDB4NTQwMDFjODUsIDB4NTQwMDFjODV9LAotCXsweDAwMDBhNTVjLCAweDg5MDdmZmNiLCAweDg5MDdmZmNiLCAweDU4MDAxY2U1LCAweDU4MDAxY2U1fSwKLQl7MHgwMDAwYTU2MCwgMHg5MDBmZmYwYiwgMHg5MDBmZmYwYiwgMHg1YjAwMWNlOSwgMHg1YjAwMWNlOX0sCi0JezB4MDAwMGE1NjQsIDB4OTYwZmZmY2IsIDB4OTYwZmZmY2IsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAotCXsweDAwMDBhNTY4LCAweDljMWZmZjBiLCAweDljMWZmZjBiLCAweDYwMDAxZWViLCAweDYwMDAxZWVifSwKLQl7MHgwMDAwYTU2YywgMHg5YzFmZmYwYiwgMHg5YzFmZmYwYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCi0JezB4MDAwMGE1NzAsIDB4OWMxZmZmMGIsIDB4OWMxZmZmMGIsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAotCXsweDAwMDBhNTc0LCAweDljMWZmZjBiLCAweDljMWZmZjBiLCAweDYwMDAxZWViLCAweDYwMDAxZWVifSwKLQl7MHgwMDAwYTU3OCwgMHg5YzFmZmYwYiwgMHg5YzFmZmYwYiwgMHg2MDAwMWVlYiwgMHg2MDAwMWVlYn0sCi0JezB4MDAwMGE1N2MsIDB4OWMxZmZmMGIsIDB4OWMxZmZmMGIsIDB4NjAwMDFlZWIsIDB4NjAwMDFlZWJ9LAotCXsweDAwMDE2MDQ0LCAweDA1YjZiMmRiLCAweDA1YjZiMmRiLCAweDA1YjZiMmRiLCAweDA1YjZiMmRifSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5NDg1XzFfMF9wY2llX3BoeV9jbGtyZXFfZGlzYWJsZV9MMVtdWzJdID0gewotCS8qICAgQWRkciAgICAgYWxsbW9kZXMgKi8KLQl7MHgwMDAxOGMwMCwgMHgxMDIxM2U1ZX0sCi0JezB4MDAwMThjMDQsIDB4MDAwODAxZDh9LAotCXsweDAwMDE4YzA4LCAweDAwMDA1ODBjfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5NDg1XzFfMF9yYWRpb19wb3N0YW1ibGVbXVsyXSA9IHsKLQkvKiAgIEFkZHIgICAgIGFsbG1vZGVzICovCi0JezB4MDAwMTYwOWMsIDB4MGIyODNmMzF9LAotCXsweDAwMDE2MGFjLCAweDI0NjExODAwfSwKLQl7MHgwMDAxNjBiMCwgMHgwMzI4NGYzZX0sCi0JezB4MDAwMTYxMGMsIDB4MDAxNzAwMDB9LAotCXsweDAwMDE2MTQwLCAweDEwODA0MDA4fSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgYXI5NDg1XzFfMF9tYWNfY29yZVtdWzJdID0gewotCS8qICBBZGRyICAgICAgYWxsbW9kZXMgKi8KLQl7MHgwMDAwMDAwOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDAwMzAsIDB4MDAwMjAwODV9LAotCXsweDAwMDAwMDM0LCAweDAwMDAwMDA1fSwKLQl7MHgwMDAwMDA0MCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDAwNDQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDAwMDQ4LCAweDAwMDAwMDA4fSwKLQl7MHgwMDAwMDA0YywgMHgwMDAwMDAxMH0sCi0JezB4MDAwMDAwNTAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDAxMDQwLCAweDAwMmZmYzBmfSwKLQl7MHgwMDAwMTA0NCwgMHgwMDJmZmMwZn0sCi0JezB4MDAwMDEwNDgsIDB4MDAyZmZjMGZ9LAotCXsweDAwMDAxMDRjLCAweDAwMmZmYzBmfSwKLQl7MHgwMDAwMTA1MCwgMHgwMDJmZmMwZn0sCi0JezB4MDAwMDEwNTQsIDB4MDAyZmZjMGZ9LAotCXsweDAwMDAxMDU4LCAweDAwMmZmYzBmfSwKLQl7MHgwMDAwMTA1YywgMHgwMDJmZmMwZn0sCi0JezB4MDAwMDEwNjAsIDB4MDAyZmZjMGZ9LAotCXsweDAwMDAxMDY0LCAweDAwMmZmYzBmfSwKLQl7MHgwMDAwMTBmMCwgMHgwMDAwMDEwMH0sCi0JezB4MDAwMDEyNzAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDAxMmIwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwMTJmMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDE0M2MsIDB4MDAwMDAwMDB9LAotCXsweDAwMDAxNDdjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODAwMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgwMDQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MDA4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODAwYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgwMTgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MDIwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODAzOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgwM2MsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MDQwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODA0NCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgwNDgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MDRjLCAweGZmZmZmZmZmfSwKLQl7MHgwMDAwODA1NCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgwNTgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MDVjLCAweDAwMGZjNzhmfSwKLQl7MHgwMDAwODA2MCwgMHgwMDAwMDAwZn0sCi0JezB4MDAwMDgwNjQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MDcwLCAweDAwMDAwMzEwfSwKLQl7MHgwMDAwODA3NCwgMHgwMDAwMDAyMH0sCi0JezB4MDAwMDgwNzgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MDljLCAweDAwMDAwMDBmfSwKLQl7MHgwMDAwODBhMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgwYTQsIDB4MDJmZjAwMDB9LAotCXsweDAwMDA4MGE4LCAweDBlMDcwNjA1fSwKLQl7MHgwMDAwODBhYywgMHgwMDAwMDAwZH0sCi0JezB4MDAwMDgwYjAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MGI0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODBiOCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgwYmMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MGMwLCAweDJhODAwMDAwfSwKLQl7MHgwMDAwODBjNCwgMHgwNjkwMDE2OH0sCi0JezB4MDAwMDgwYzgsIDB4MTM4ODFjMjB9LAotCXsweDAwMDA4MGNjLCAweDAxZjQwMDAwfSwKLQl7MHgwMDAwODBkMCwgMHgwMDI1MjUwMH0sCi0JezB4MDAwMDgwZDQsIDB4MDBhMDAwMDB9LAotCXsweDAwMDA4MGQ4LCAweDAwNDAwMDAwfSwKLQl7MHgwMDAwODBkYywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgwZTAsIDB4ZmZmZmZmZmZ9LAotCXsweDAwMDA4MGU0LCAweDAwMDBmZmZmfSwKLQl7MHgwMDAwODBlOCwgMHgzZjNmM2YzZn0sCi0JezB4MDAwMDgwZWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MGYwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODBmNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgwZmMsIDB4MDAwMjAwMDB9LAotCXsweDAwMDA4MTAwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODEwOCwgMHgwMDAwMDA1Mn0sCi0JezB4MDAwMDgxMGMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MTEwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODExNCwgMHgwMDAwMDdmZn0sCi0JezB4MDAwMDgxMTgsIDB4MDAwMDAwYWF9LAotCXsweDAwMDA4MTFjLCAweDAwMDAzMjEwfSwKLQl7MHgwMDAwODEyNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgxMjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MTJjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODEzMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgxMzQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MTM4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODEzYywgMHgwMDAwZmZmZn0sCi0JezB4MDAwMDgxNDQsIDB4ZmZmZmZmZmZ9LAotCXsweDAwMDA4MTY4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODE2YywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgxNzAsIDB4MTg0ODYyMDB9LAotCXsweDAwMDA4MTc0LCAweDMzMzMyMjEwfSwKLQl7MHgwMDAwODE3OCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgxN2MsIDB4MDAwMjAwMDB9LAotCXsweDAwMDA4MWMwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODFjNCwgMHgzMzMzMjIxMH0sCi0JezB4MDAwMDgxYzgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MWNjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODFkNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgxZWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MWYwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODFmNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgxZjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MWZjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODI0MCwgMHgwMDEwMDAwMH0sCi0JezB4MDAwMDgyNDQsIDB4MDAxMGY0MDB9LAotCXsweDAwMDA4MjQ4LCAweDAwMDAwODAwfSwKLQl7MHgwMDAwODI0YywgMHgwMDAxZTgwMH0sCi0JezB4MDAwMDgyNTAsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MjU0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODI1OCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgyNWMsIDB4NDAwMDAwMDB9LAotCXsweDAwMDA4MjYwLCAweDAwMDgwOTIyfSwKLQl7MHgwMDAwODI2NCwgMHg5Y2EwMDAxMH0sCi0JezB4MDAwMDgyNjgsIDB4ZmZmZmZmZmZ9LAotCXsweDAwMDA4MjZjLCAweDAwMDBmZmZmfSwKLQl7MHgwMDAwODI3MCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgyNzQsIDB4NDAwMDAwMDB9LAotCXsweDAwMDA4Mjc4LCAweDAwM2U0MTgwfSwKLQl7MHgwMDAwODI3YywgMHgwMDAwMDAwNH0sCi0JezB4MDAwMDgyODQsIDB4MDAwMDAwMmN9LAotCXsweDAwMDA4Mjg4LCAweDAwMDAwMDJjfSwKLQl7MHgwMDAwODI4YywgMHgwMDAwMDBmZn0sCi0JezB4MDAwMDgyOTQsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4Mjk4LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODI5YywgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgzMDAsIDB4MDAwMDAxNDB9LAotCXsweDAwMDA4MzE0LCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODMxYywgMHgwMDAwMDEwZH0sCi0JezB4MDAwMDgzMjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MzJjLCAweDAwMDAwMDA3fSwKLQl7MHgwMDAwODMzMCwgMHgwMDAwMDMwMn0sCi0JezB4MDAwMDgzMzQsIDB4MDAwMDA3MDB9LAotCXsweDAwMDA4MzM4LCAweDAwZmYwMDAwfSwKLQl7MHgwMDAwODMzYywgMHgwMjQwMDAwMH0sCi0JezB4MDAwMDgzNDAsIDB4MDAwMTA3ZmZ9LAotCXsweDAwMDA4MzQ0LCAweGEyNDgxMDVifSwKLQl7MHgwMDAwODM0OCwgMHgwMDhmMDAwMH0sCi0JezB4MDAwMDgzNWMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MzYwLCAweGZmZmZmZmZmfSwKLQl7MHgwMDAwODM2NCwgMHhmZmZmZmZmZn0sCi0JezB4MDAwMDgzNjgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MzcwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODM3NCwgMHgwMDAwMDBmZn0sCi0JezB4MDAwMDgzNzgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MzdjLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODM4MCwgMHhmZmZmZmZmZn0sCi0JezB4MDAwMDgzODQsIDB4ZmZmZmZmZmZ9LAotCXsweDAwMDA4MzkwLCAweGZmZmZmZmZmfSwKLQl7MHgwMDAwODM5NCwgMHhmZmZmZmZmZn0sCi0JezB4MDAwMDgzOTgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4MzljLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODNhMCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgzYTQsIDB4MDAwMGZhMTR9LAotCXsweDAwMDA4M2E4LCAweDAwMGYwYzAwfSwKLQl7MHgwMDAwODNhYywgMHgzMzMzMjIxMH0sCi0JezB4MDAwMDgzYjAsIDB4MzMzMzIyMTB9LAotCXsweDAwMDA4M2I0LCAweDMzMzMyMjEwfSwKLQl7MHgwMDAwODNiOCwgMHgzMzMzMjIxMH0sCi0JezB4MDAwMDgzYmMsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4M2MwLCAweDAwMDAwMDAwfSwKLQl7MHgwMDAwODNjNCwgMHgwMDAwMDAwMH0sCi0JezB4MDAwMDgzYzgsIDB4MDAwMDAwMDB9LAotCXsweDAwMDA4M2NjLCAweDAwMDAwMjAwfSwKLQl7MHgwMDAwODNkMCwgMHgwMDAzMDFmZn0sCi19OwotCiBzdGF0aWMgY29uc3QgdTMyIGFyOTQ4NV8xXzFfbWFjX2NvcmVbXVsyXSA9IHsKIAkvKiAgQWRkciAgICAgICBhbGxtb2RlcyAqLwogCXsweDAwMDAwMDA4LCAweDAwMDAwMDAwfSwKQEAgLTEzMjEsNyArMzk2LDcgQEAKIAl7MHgwMDAwYTU0YywgMHg3MjAzZmVjYSwgMHg3MjAzZmVjYSwgMHg1MTAwMTg2NSwgMHg1MTAwMTg2NX0sCiAJezB4MDAwMGE1NTAsIDB4NzcwM2ZmMGIsIDB4NzcwM2ZmMGIsIDB4NTUwMDFhODYsIDB4NTUwMDFhODZ9LAogCXsweDAwMDBhNTU0LCAweDdkMDZmZmNiLCAweDdkMDZmZmNiLCAweDU3MDAxY2U5LCAweDU3MDAxY2U5fSwKLQl7MHgwMDAwYTU1OCwgMHg4NDA3ZmYwYiwgMHg4NDA3ZmYwYiwgMHg1YTAwMWVlYiwgMHg1YTAwMWVlYn0sCisJezB4MDAwMGE1NTgsIDB4ODQwN2ZmMGIsIDB4ODQwN2ZmMGIsIDB4NWEwMDFjZWIsIDB4NWEwMDFjZWJ9LAogCXsweDAwMDBhNTVjLCAweDg5MDdmZmNiLCAweDg5MDdmZmNiLCAweDVlMDAxZWViLCAweDVlMDAxZWVifSwKIAl7MHgwMDAwYTU2MCwgMHg5MDBmZmYwYiwgMHg5MDBmZmYwYiwgMHg1ZTAwMWVlYiwgMHg1ZTAwMWVlYn0sCiAJezB4MDAwMGE1NjQsIDB4OTYwZmZmY2IsIDB4OTYwZmZmY2IsIDB4NWUwMDFlZWIsIDB4NWUwMDFlZWJ9LApAQCAtMTM5NCw3ICs0NjksNyBAQAogCXsweDAwMDBhNTRjLCAweDcyMDNmZWNhLCAweDcyMDNmZWNhLCAweDUxMDAxODY1LCAweDUxMDAxODY1fSwKIAl7MHgwMDAwYTU1MCwgMHg3NzAzZmYwYiwgMHg3NzAzZmYwYiwgMHg1NTAwMWE4NiwgMHg1NTAwMWE4Nn0sCiAJezB4MDAwMGE1NTQsIDB4N2QwNmZmY2IsIDB4N2QwNmZmY2IsIDB4NTcwMDFjZTksIDB4NTcwMDFjZTl9LAotCXsweDAwMDBhNTU4LCAweDg0MDdmZjBiLCAweDg0MDdmZjBiLCAweDVhMDAxZWViLCAweDVhMDAxZWVifSwKKwl7MHgwMDAwYTU1OCwgMHg4NDA3ZmYwYiwgMHg4NDA3ZmYwYiwgMHg1YTAwMWNlYiwgMHg1YTAwMWNlYn0sCiAJezB4MDAwMGE1NWMsIDB4ODkwN2ZmY2IsIDB4ODkwN2ZmY2IsIDB4NWUwMDFlZWIsIDB4NWUwMDFlZWJ9LAogCXsweDAwMDBhNTYwLCAweDkwMGZmZjBiLCAweDkwMGZmZjBiLCAweDVlMDAxZWViLCAweDVlMDAxZWVifSwKIAl7MHgwMDAwYTU2NCwgMHg5NjBmZmZjYiwgMHg5NjBmZmZjYiwgMHg1ZTAwMWVlYiwgMHg1ZTAwMWVlYn0sCkBAIC0xNTYwLDcgKzYzNSw3IEBACiAJezB4MDAwMGE1NGMsIDB4NzIwM2ZlY2EsIDB4NzIwM2ZlY2EsIDB4NTEwMDE4NjUsIDB4NTEwMDE4NjV9LAogCXsweDAwMDBhNTUwLCAweDc3MDNmZjBiLCAweDc3MDNmZjBiLCAweDU1MDAxYTg2LCAweDU1MDAxYTg2fSwKIAl7MHgwMDAwYTU1NCwgMHg3ZDA2ZmZjYiwgMHg3ZDA2ZmZjYiwgMHg1NzAwMWNlOSwgMHg1NzAwMWNlOX0sCi0JezB4MDAwMGE1NTgsIDB4ODQwN2ZmMGIsIDB4ODQwN2ZmMGIsIDB4NWEwMDFlZWIsIDB4NWEwMDFlZWJ9LAorCXsweDAwMDBhNTU4LCAweDg0MDdmZjBiLCAweDg0MDdmZjBiLCAweDVhMDAxY2ViLCAweDVhMDAxY2VifSwKIAl7MHgwMDAwYTU1YywgMHg4OTA3ZmZjYiwgMHg4OTA3ZmZjYiwgMHg1ZTAwMWVlYiwgMHg1ZTAwMWVlYn0sCiAJezB4MDAwMGE1NjAsIDB4OTAwZmZmMGIsIDB4OTAwZmZmMGIsIDB4NWUwMDFlZWIsIDB4NWUwMDFlZWJ9LAogCXsweDAwMDBhNTY0LCAweDk2MGZmZmNiLCAweDk2MGZmZmNiLCAweDVlMDAxZWViLCAweDVlMDAxZWVifSwKQEAgLTE2NTMsNyArNzI4LDcgQEAKIAl7MHgwMDAwYTU0YywgMHg3MjAzZmVjYSwgMHg3MjAzZmVjYSwgMHg1MTAwMTg2NSwgMHg1MTAwMTg2NX0sCiAJezB4MDAwMGE1NTAsIDB4NzcwM2ZmMGIsIDB4NzcwM2ZmMGIsIDB4NTUwMDFhODYsIDB4NTUwMDFhODZ9LAogCXsweDAwMDBhNTU0LCAweDdkMDZmZmNiLCAweDdkMDZmZmNiLCAweDU3MDAxY2U5LCAweDU3MDAxY2U5fSwKLQl7MHgwMDAwYTU1OCwgMHg4NDA3ZmYwYiwgMHg4NDA3ZmYwYiwgMHg1YTAwMWVlYiwgMHg1YTAwMWVlYn0sCisJezB4MDAwMGE1NTgsIDB4ODQwN2ZmMGIsIDB4ODQwN2ZmMGIsIDB4NWEwMDFjZWIsIDB4NWEwMDFjZWJ9LAogCXsweDAwMDBhNTVjLCAweDg5MDdmZmNiLCAweDg5MDdmZmNiLCAweDVlMDAxZWViLCAweDVlMDAxZWVifSwKIAl7MHgwMDAwYTU2MCwgMHg5MDBmZmYwYiwgMHg5MDBmZmYwYiwgMHg1ZTAwMWVlYiwgMHg1ZTAwMWVlYn0sCiAJezB4MDAwMGE1NjQsIDB4OTYwZmZmY2IsIDB4OTYwZmZmY2IsIDB4NWUwMDFlZWIsIDB4NWUwMDFlZWJ9LApAQCAtMTc1Miw3ICs4MjcsNyBAQAogCXsweDAwMDBhNTRjLCAweDcyMDNmZWNhLCAweDcyMDNmZWNhLCAweDUxMDAxODY1LCAweDUxMDAxODY1fSwKIAl7MHgwMDAwYTU1MCwgMHg3NzAzZmYwYiwgMHg3NzAzZmYwYiwgMHg1NTAwMWE4NiwgMHg1NTAwMWE4Nn0sCiAJezB4MDAwMGE1NTQsIDB4N2QwNmZmY2IsIDB4N2QwNmZmY2IsIDB4NTcwMDFjZTksIDB4NTcwMDFjZTl9LAotCXsweDAwMDBhNTU4LCAweDg0MDdmZjBiLCAweDg0MDdmZjBiLCAweDVhMDAxZWViLCAweDVhMDAxZWVifSwKKwl7MHgwMDAwYTU1OCwgMHg4NDA3ZmYwYiwgMHg4NDA3ZmYwYiwgMHg1YTAwMWNlYiwgMHg1YTAwMWNlYn0sCiAJezB4MDAwMGE1NWMsIDB4ODkwN2ZmY2IsIDB4ODkwN2ZmY2IsIDB4NWUwMDFlZWIsIDB4NWUwMDFlZWJ9LAogCXsweDAwMDBhNTYwLCAweDkwMGZmZjBiLCAweDkwMGZmZjBiLCAweDVlMDAxZWViLCAweDVlMDAxZWVifSwKIAl7MHgwMDAwYTU2NCwgMHg5NjBmZmZjYiwgMHg5NjBmZmZjYiwgMHg1ZTAwMWVlYiwgMHg1ZTAwMWVlYn0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXRoOWsuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oCmluZGV4IDA5OWJkNDEuLjAzYjM3ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oCkBAIC02Miw3ICs2Miw2IEBACiAjZGVmaW5lCUFUSF9UWFFfU0VUVVAoc2MsIGkpICAgICAgICAoKHNjKS0+dHgudHhxc2V0dXAgJiAoMTw8aSkpCiAKIHN0cnVjdCBhdGhfY29uZmlnIHsKLQl1MzIgYXRoX2FnZ3JfcHJvdDsKIAl1MTYgdHhwb3dsaW1pdDsKIAl1OCBjYWJxUmVhZHl0aW1lOwogfTsKQEAgLTEyMCwxMyArMTE5LDExIEBACiAvKiBSWCAvIFRYICovCiAvKioqKioqKioqKiovCiAKLSNkZWZpbmUgQVRIX01BWF9BTlRFTk5BICAgICAgICAgMwogI2RlZmluZSBBVEhfUlhCVUYgICAgICAgICAgICAgICA1MTIKICNkZWZpbmUgQVRIX1RYQlVGICAgICAgICAgICAgICAgNTEyCiAjZGVmaW5lIEFUSF9UWEJVRl9SRVNFUlZFICAgICAgIDUKICNkZWZpbmUgQVRIX01BWF9RREVQVEggICAgICAgICAgKEFUSF9UWEJVRiAvIDQgLSBBVEhfVFhCVUZfUkVTRVJWRSkKICNkZWZpbmUgQVRIX1RYTUFYVFJZICAgICAgICAgICAgMTMKLSNkZWZpbmUgQVRIX01HVF9UWE1BWFRSWSAgICAgICAgNAogCiAjZGVmaW5lIFRJRF9UT19XTUVfQUMoX3RpZCkJCQkJXAogCSgoKChfdGlkKSA9PSAwKSB8fCAoKF90aWQpID09IDMpKSA/IFdNRV9BQ19CRSA6CVwKQEAgLTIwMiw2ICsxOTksNyBAQAogCWludCBzY2hlZDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCB0aWRfcTsKKwlib29sIGNsZWFyX3BzX2ZpbHRlcjsKIH07CiAKIHN0cnVjdCBhdGhfZnJhbWVfaW5mbyB7CkBAIC0yNTcsOCArMjU1LDEyIEBACiAjZW5kaWYKIAlzdHJ1Y3QgYXRoX2F0eF90aWQgdGlkW1dNRV9OVU1fVElEXTsKIAlzdHJ1Y3QgYXRoX2F0eF9hYyBhY1tXTUVfTlVNX0FDXTsKKwlpbnQgcHNfa2V5OworCiAJdTE2IG1heGFtcGR1OwogCXU4IG1wZHVkZW5zaXR5OworCisJYm9vbCBzbGVlcGluZzsKIH07CiAKICNkZWZpbmUgQUdHUl9DTEVBTlVQICAgICAgICAgQklUKDEpCkBAIC0zNDAsMTcgKzM0MiwxOCBAQAogdm9pZCBhdGhfdHhfYWdncl9zdG9wKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKTsKIHZvaWQgYXRoX3R4X2FnZ3JfcmVzdW1lKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKTsKIAordm9pZCBhdGhfdHhfYWdncl93YWtldXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4pOworYm9vbCBhdGhfdHhfYWdncl9zbGVlcChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9ub2RlICphbik7CisKIC8qKioqKioqKi8KIC8qIFZJRnMgKi8KIC8qKioqKioqKi8KIAogc3RydWN0IGF0aF92aWYgewogCWludCBhdl9ic2xvdDsKLQlib29sIGlzX2JzbG90X2FjdGl2ZTsKKwlib29sIGlzX2JzbG90X2FjdGl2ZSwgcHJpbWFyeV9zdGFfdmlmOwogCV9fbGU2NCB0c2ZfYWRqdXN0OyAvKiBUU0YgYWRqdXN0bWVudCBmb3Igc3RhZ2dlcmVkIGJlYWNvbnMgKi8KLQllbnVtIG5sODAyMTFfaWZ0eXBlIGF2X29wbW9kZTsKIAlzdHJ1Y3QgYXRoX2J1ZiAqYXZfYmNidWY7Ci0JdTggYnNzaWRbRVRIX0FMRU5dOyAvKiBjdXJyZW50IEJTU0lEIGZyb20gY29uZmlnX2ludGVyZmFjZSAqLwogfTsKIAogLyoqKioqKioqKioqKioqKioqKiovCkBAIC0zNjIsNyArMzY1LDcgQEAKICAqIG51bWJlciBvZiBCU1NJRHMpIGlmIGEgZ2l2ZW4gYmVhY29uIGRvZXMgbm90IGdvIG91dCBldmVuIGFmdGVyIHdhaXRpbmcgdGhpcwogICogbnVtYmVyIG9mIGJlYWNvbiBpbnRlcnZhbHMsIHRoZSBnYW1lJ3MgdXAuCiAgKi8KLSNkZWZpbmUgQlNUVUNLX1RIUkVTSCAgICAgICAgICAgCSg5ICogQVRIX0JDQlVGKQorI2RlZmluZSBCU1RVQ0tfVEhSRVNIICAgICAgICAgICAJOQogI2RlZmluZQlBVEhfQkNCVUYgICAgICAgICAgICAgICAJNAogI2RlZmluZSBBVEhfREVGQVVMVF9CSU5UVkFMICAgICAJMTAwIC8qIFRVICovCiAjZGVmaW5lIEFUSF9ERUZBVUxUX0JNSVNTX0xJTUlUIAkxMApAQCAtMzg2LDcgKzM4OSw3IEBACiAJdTMyIGJlYWNvbnE7CiAJdTMyIGJtaXNzY250OwogCXUzMiBhc3RfYmVfeG1pdDsKLQl1NjQgYmNfdHN0YW1wOworCXUzMiBiY190c3RhbXA7CiAJc3RydWN0IGllZWU4MDIxMV92aWYgKmJzbG90W0FUSF9CQ0JVRl07CiAJaW50IHNsb3R0aW1lOwogCWludCBzbG90dXBkYXRlOwpAQCAtNDAxLDYgKzQwNCw3IEBACiBpbnQgYXRoX2JlYWNvbl9hbGxvYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7CiB2b2lkIGF0aF9iZWFjb25fcmV0dXJuKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3ZpZiAqYXZwKTsKIGludCBhdGhfYmVhY29ucV9jb25maWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwordm9pZCBhdGhfc2V0X2JlYWNvbihzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CiB2b2lkIGF0aDlrX3NldF9iZWFjb25pbmdfc3RhdHVzKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBib29sIHN0YXR1cyk7CiAKIC8qKioqKioqLwpAQCAtNDE4LDYgKzQyMiw3IEBACiAjZGVmaW5lIEFUSF9QQVBSRF9USU1FT1VUCTEwMCAvKiBtc2VjcyAqLwogCiB2b2lkIGF0aF9od19jaGVjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwordm9pZCBhdGhfaHdfcGxsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHZvaWQgYXRoX3BhcHJkX2NhbGlicmF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBhdGhfYW5pX2NhbGlicmF0ZSh1bnNpZ25lZCBsb25nIGRhdGEpOwogCkBAIC00NDgsNiArNDUzLDcgQEAKIAogI2RlZmluZSBBVEhfTEVEX1BJTl9ERUYgCQkxCiAjZGVmaW5lIEFUSF9MRURfUElOXzkyODcJCTgKKyNkZWZpbmUgQVRIX0xFRF9QSU5fOTMwMAkJMTAKICNkZWZpbmUgQVRIX0xFRF9QSU5fOTQ4NQkJNgogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFMKQEAgLTQ3Nyw3ICs0ODMsNiBAQAogI2RlZmluZSBBVEhfQU5UX0RJVl9DT01CX0FMVF9BTlRfUkFUSU8gMzAKICNkZWZpbmUgQVRIX0FOVF9ESVZfQ09NQl9BTFRfQU5UX1JBVElPMiAyMAogCi0jZGVmaW5lIEFUSF9BTlRfRElWX0NPTUJfTE5BMV9MTkEyX0RFTFRBIC0zCiAjZGVmaW5lIEFUSF9BTlRfRElWX0NPTUJfTE5BMV9MTkEyX1NXSVRDSF9ERUxUQSAtMQogI2RlZmluZSBBVEhfQU5UX0RJVl9DT01CX0xOQTFfREVMVEFfSEkgLTQKICNkZWZpbmUgQVRIX0FOVF9ESVZfQ09NQl9MTkExX0RFTFRBX01JRCAtMgpAQCAtNTUwLDYgKzU1NSw3IEBACiAjZGVmaW5lIFNDX09QX0JUX1NDQU4JCSAgICAgQklUKDEzKQogI2RlZmluZSBTQ19PUF9BTklfUlVOCQkgICAgIEJJVCgxNCkKICNkZWZpbmUgU0NfT1BfRU5BQkxFX0FQTQkgICAgIEJJVCgxNSkKKyNkZWZpbmUgU0NfT1BfUFJJTV9TVEFfVklGCSAgICAgQklUKDE2KQogCiAvKiBQb3dlcnNhdmUgZmxhZ3MgKi8KICNkZWZpbmUgUFNfV0FJVF9GT1JfQkVBQ09OICAgICAgICBCSVQoMCkKQEAgLTU1Nyw2ICs1NjMsNyBAQAogI2RlZmluZSBQU19XQUlUX0ZPUl9QU1BPTExfREFUQSAgIEJJVCgyKQogI2RlZmluZSBQU19XQUlUX0ZPUl9UWF9BQ0sgICAgICAgIEJJVCgzKQogI2RlZmluZSBQU19CRUFDT05fU1lOQyAgICAgICAgICAgIEJJVCg0KQorI2RlZmluZSBQU19UU0ZPT1JfU1lOQyAgICAgICAgICAgIEJJVCg1KQogCiBzdHJ1Y3QgYXRoX3JhdGVfdGFibGU7CiAKQEAgLTY2Nyw3ICs2NzQsNyBAQAogYm9vbCBhdGg5a19zZXRwb3dlcihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgZW51bSBhdGg5a19wb3dlcl9tb2RlIG1vZGUpOwogYm9vbCBhdGg5a191c2VzX2JlYWNvbnMoaW50IHR5cGUpOwogCi0jaWZkZWYgQ09ORklHX1BDSQorI2lmZGVmIENPTkZJR19BVEg5S19QQ0kKIGludCBhdGhfcGNpX2luaXQodm9pZCk7CiB2b2lkIGF0aF9wY2lfZXhpdCh2b2lkKTsKICNlbHNlCkBAIC02NzUsNyArNjgyLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhdGhfcGNpX2V4aXQodm9pZCkge307CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BVEhFUk9TX0FSNzFYWAorI2lmZGVmIENPTkZJR19BVEg5S19BSEIKIGludCBhdGhfYWhiX2luaXQodm9pZCk7CiB2b2lkIGF0aF9haGJfZXhpdCh2b2lkKTsKICNlbHNlCkBAIC02ODgsOCArNjk1LDYgQEAKIAogdTggYXRoX3R4Y2hhaW5tYXNrX3JlZHVjdGlvbihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgdTggY2hhaW5tYXNrLCB1MzIgcmF0ZSk7CiAKLXZvaWQgYXRoOWtfc2V0X2Jzc2lkX21hc2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwotCiB2b2lkIGF0aF9zdGFydF9yZmtpbGxfcG9sbChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CiBleHRlcm4gdm9pZCBhdGg5a19yZmtpbGxfcG9sbF9zdGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiB2b2lkIGF0aDlrX2NhbGN1bGF0ZV9pdGVyX2RhdGEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYmVhY29uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYmVhY29uLmMKaW5kZXggNmQyYTU0NWYuLjYzN2RiYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9iZWFjb24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYmVhY29uLmMKQEAgLTU3LDggKzU3LDggQEAKIAogLyoKICAqICBBc3NvY2lhdGVzIHRoZSBiZWFjb24gZnJhbWUgYnVmZmVyIHdpdGggYSB0cmFuc21pdCBkZXNjcmlwdG9yLiAgV2lsbCBzZXQKLSAqICB1cCBhbGwgcmVxdWlyZWQgYW50ZW5uYSBzd2l0Y2ggcGFyYW1ldGVycywgcmF0ZSBjb2RlcywgYW5kIGNoYW5uZWwgZmxhZ3MuCi0gKiAgQmVhY29ucyBhcmUgYWx3YXlzIHNlbnQgb3V0IGF0IHRoZSBsb3dlc3QgcmF0ZSwgYW5kIGFyZSBub3QgcmV0cmllZC4KKyAqICB1cCByYXRlIGNvZGVzLCBhbmQgY2hhbm5lbCBmbGFncy4gQmVhY29ucyBhcmUgYWx3YXlzIHNlbnQgb3V0IGF0IHRoZQorICogIGxvd2VzdCByYXRlLCBhbmQgYXJlIG5vdCByZXRyaWVkLgogKi8KIHN0YXRpYyB2b2lkIGF0aF9iZWFjb25fc2V0dXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdmlmICphdnAsCiAJCQkgICAgIHN0cnVjdCBhdGhfYnVmICpiZiwgaW50IHJhdGVpZHgpCkBAIC02OCw3ICs2OCw3IEBACiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CiAJc3RydWN0IGF0aF9kZXNjICpkczsKIAlzdHJ1Y3QgYXRoOWtfMTFuX3JhdGVfc2VyaWVzIHNlcmllc1s0XTsKLQlpbnQgZmxhZ3MsIGFudGVubmEsIGN0c3JhdGUgPSAwLCBjdHNkdXJhdGlvbiA9IDA7CisJaW50IGZsYWdzLCBjdHNyYXRlID0gMCwgY3RzZHVyYXRpb24gPSAwOwogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwogCXU4IHJhdGUgPSAwOwogCkBAIC03NiwxMiArNzYsNiBAQAogCWZsYWdzID0gQVRIOUtfVFhERVNDX05PQUNLOwogCiAJZHMtPmRzX2xpbmsgPSAwOwotCS8qCi0JICogU3dpdGNoIGFudGVubmEgZXZlcnkgYmVhY29uLgotCSAqIFNob3VsZCBvbmx5IHN3aXRjaCBldmVyeSBiZWFjb24gcGVyaW9kLCBub3QgZm9yIGV2ZXJ5IFNXQkEKLQkgKiBYWFggYXNzdW1lcyB0d28gYW50ZW5uYWUKLQkgKi8KLQlhbnRlbm5hID0gKChzYy0+YmVhY29uLmFzdF9iZV94bWl0IC8gc2MtPm5iY252aWZzKSAmIDEgPyAyIDogMSk7CiAKIAlzYmFuZCA9ICZzYy0+c2JhbmRzW2NvbW1vbi0+aHctPmNvbmYuY2hhbm5lbC0+YmFuZF07CiAJcmF0ZSA9IHNiYW5kLT5iaXRyYXRlc1tyYXRlaWR4XS5od192YWx1ZTsKQEAgLTI3OCw3ICsyNzIsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXRzdGFtcCA9ICgoc3RydWN0IGllZWU4MDIxMV9tZ210ICopc2tiLT5kYXRhKS0+dS5iZWFjb24udGltZXN0YW1wOwotCXNjLT5iZWFjb24uYmNfdHN0YW1wID0gbGU2NF90b19jcHUodHN0YW1wKTsKKwlzYy0+YmVhY29uLmJjX3RzdGFtcCA9ICh1MzIpIGxlNjRfdG9fY3B1KHRzdGFtcCk7CiAJLyogQ2FsY3VsYXRlIGEgVFNGIGFkanVzdG1lbnQgZmFjdG9yIHJlcXVpcmVkIGZvciBzdGFnZ2VyZWQgYmVhY29ucy4gKi8KIAlpZiAoYXZwLT5hdl9ic2xvdCA+IDApIHsKIAkJdTY0IHRzZmFkanVzdDsKQEAgLTI5NCw4ICsyODgsOCBAQAogCQkgKiBhZGp1c3RtZW50LiBPdGhlciBzbG90cyBhcmUgYWRqdXN0ZWQgdG8gZ2V0IHRoZSB0aW1lc3RhbXAKIAkJICogY2xvc2UgdG8gdGhlIFRCVFQgZm9yIHRoZSBCU1MuCiAJCSAqLwotCQl0c2ZhZGp1c3QgPSBpbnR2YWwgKiBhdnAtPmF2X2JzbG90IC8gQVRIX0JDQlVGOwotCQlhdnAtPnRzZl9hZGp1c3QgPSBjcHVfdG9fbGU2NChUVV9UT19VU0VDKHRzZmFkanVzdCkpOworCQl0c2ZhZGp1c3QgPSBUVV9UT19VU0VDKGludHZhbCAqIGF2cC0+YXZfYnNsb3QpIC8gQVRIX0JDQlVGOworCQlhdnAtPnRzZl9hZGp1c3QgPSBjcHVfdG9fbGU2NCh0c2ZhZGp1c3QpOwogCiAJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0JFQUNPTiwKIAkJCSJzdGFnZ2VyIGJlYWNvbnMsIGJzbG90ICVkIGludHZhbCAldSB0c2ZhZGp1c3QgJWxsdVxuIiwKQEAgLTMyNiw5ICszMjAsMTEgQEAKIAlpZiAoYXZwLT5hdl9iY2J1ZiAhPSBOVUxMKSB7CiAJCXN0cnVjdCBhdGhfYnVmICpiZjsKIAorCQlhdnAtPmlzX2JzbG90X2FjdGl2ZSA9IGZhbHNlOwogCQlpZiAoYXZwLT5hdl9ic2xvdCAhPSAtMSkgewogCQkJc2MtPmJlYWNvbi5ic2xvdFthdnAtPmF2X2JzbG90XSA9IE5VTEw7CiAJCQlzYy0+bmJjbnZpZnMtLTsKKwkJCWF2cC0+YXZfYnNsb3QgPSAtMTsKIAkJfQogCiAJCWJmID0gYXZwLT5hdl9iY2J1ZjsKQEAgLTM2OSwxMiArMzY1LDEzIEBACiAJaWYgKGF0aDlrX2h3X251bXR4cGVuZGluZyhhaCwgc2MtPmJlYWNvbi5iZWFjb25xKSAhPSAwKSB7CiAJCXNjLT5iZWFjb24uYm1pc3NjbnQrKzsKIAotCQlpZiAoc2MtPmJlYWNvbi5ibWlzc2NudCA8IEJTVFVDS19USFJFU0gpIHsKKwkJaWYgKHNjLT5iZWFjb24uYm1pc3NjbnQgPCBCU1RVQ0tfVEhSRVNIICogc2MtPm5iY252aWZzKSB7CiAJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19CU1RVQ0ssCiAJCQkJIm1pc3NlZCAldSBjb25zZWN1dGl2ZSBiZWFjb25zXG4iLAogCQkJCXNjLT5iZWFjb24uYm1pc3NjbnQpOwogCQkJYXRoOWtfaHdfc3RvcF9kbWFfcXVldWUoYWgsIHNjLT5iZWFjb24uYmVhY29ucSk7Ci0JCQlhdGg5a19od19ic3R1Y2tfbmZjYWwoYWgpOworCQkJaWYgKHNjLT5iZWFjb24uYm1pc3NjbnQgPiAzKQorCQkJCWF0aDlrX2h3X2JzdHVja19uZmNhbChhaCk7CiAJCX0gZWxzZSBpZiAoc2MtPmJlYWNvbi5ibWlzc2NudCA+PSBCU1RVQ0tfVEhSRVNIKSB7CiAJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19CU1RVQ0ssCiAJCQkJImJlYWNvbiBpcyBvZmZpY2lhbGx5IHN0dWNrXG4iKTsKQEAgLTM4NSwxMyArMzgyLDYgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChzYy0+YmVhY29uLmJtaXNzY250ICE9IDApIHsKLQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQlNUVUNLLAotCQkJInJlc3VtZSBiZWFjb24geG1pdCBhZnRlciAldSBtaXNzZXNcbiIsCi0JCQlzYy0+YmVhY29uLmJtaXNzY250KTsKLQkJc2MtPmJlYWNvbi5ibWlzc2NudCA9IDA7Ci0JfQotCiAJLyoKIAkgKiBHZW5lcmF0ZSBiZWFjb24gZnJhbWVzLiB3ZSBhcmUgc2VuZGluZyBmcmFtZXMKIAkgKiBzdGFnZ2VyZWQgc28gY2FsY3VsYXRlIHRoZSBzbG90IGZvciB0aGlzIGZyYW1lIGJhc2VkCkBAIC00MDEsMjEgKzM5MSwxNCBAQAogCWludHZhbCA9IGN1cl9jb25mLT5iZWFjb25faW50ZXJ2YWwgPyA6IEFUSF9ERUZBVUxUX0JJTlRWQUw7CiAKIAl0c2YgPSBhdGg5a19od19nZXR0c2Y2NChhaCk7Ci0JdHNmdHUgPSBUU0ZfVE9fVFUodHNmPj4zMiwgdHNmKTsKLQlzbG90ID0gKCh0c2Z0dSAlIGludHZhbCkgKiBBVEhfQkNCVUYpIC8gaW50dmFsOwotCS8qCi0JICogUmV2ZXJzZSB0aGUgc2xvdCBvcmRlciB0byBnZXQgc2xvdCAwIG9uIHRoZSBUQlRUIG9mZnNldCB0aGF0IGRvZXMKLQkgKiBub3QgcmVxdWlyZSBUU0YgYWRqdXN0bWVudCBhbmQgb3RoZXIgc2xvdHMgYWRkaW5nCi0JICogc2xvdC9BVEhfQkNCVUYgKiBiZWFjb25faW50IHRvIHRpbWVzdGFtcC4gRm9yIGV4YW1wbGUsIHdpdGgKLQkgKiBBVEhfQkNCVUYgPSA0LCB3ZSBwcm9jZXNzIGJlYWNvbiBzbG90cyBhcyBmb2xsb3dzOiAzIDIgMSAwIDMgMiAxIC4uCi0JICogYW5kIHNsb3QgMCBpcyBhdCBjb3JyZWN0IG9mZnNldCB0byBUQlRULgotCSAqLwotCXNsb3QgPSBBVEhfQkNCVUYgLSBzbG90IC0gMTsKKwl0c2YgKz0gVFVfVE9fVVNFQyhhaC0+Y29uZmlnLnN3X2JlYWNvbl9yZXNwb25zZV90aW1lKTsKKwl0c2Z0dSA9IFRTRl9UT19UVSgodHNmICogQVRIX0JDQlVGKSA+PjMyLCB0c2YgKiBBVEhfQkNCVUYpOworCXNsb3QgPSAodHNmdHUgJSAoaW50dmFsICogQVRIX0JDQlVGKSkgLyBpbnR2YWw7CiAJdmlmID0gc2MtPmJlYWNvbi5ic2xvdFtzbG90XTsKIAogCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0JFQUNPTiwKIAkJInNsb3QgJWQgW3RzZiAlbGx1IHRzZnR1ICV1IGludHZhbCAldV0gdmlmICVwXG4iLAotCQlzbG90LCB0c2YsIHRzZnR1LCBpbnR2YWwsIHZpZik7CisJCXNsb3QsIHRzZiwgdHNmdHUgLyBBVEhfQkNCVUYsIGludHZhbCwgdmlmKTsKIAogCWJmYWRkciA9IDA7CiAJaWYgKHZpZikgewpAQCAtNDI0LDYgKzQwNywxMyBAQAogCQkJYmZhZGRyID0gYmYtPmJmX2RhZGRyOwogCQkJYmMgPSAxOwogCQl9CisKKwkJaWYgKHNjLT5iZWFjb24uYm1pc3NjbnQgIT0gMCkgeworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQlNUVUNLLAorCQkJCSJyZXN1bWUgYmVhY29uIHhtaXQgYWZ0ZXIgJXUgbWlzc2VzXG4iLAorCQkJCXNjLT5iZWFjb24uYm1pc3NjbnQpOworCQkJc2MtPmJlYWNvbi5ibWlzc2NudCA9IDA7CisJCX0KIAl9CiAKIAkvKgpAQCAtNDYzLDEzICs0NTMsMTcgQEAKIAkJCSAgICAgIHUzMiBuZXh0X2JlYWNvbiwKIAkJCSAgICAgIHUzMiBiZWFjb25fcGVyaW9kKQogewotCWlmIChiZWFjb25fcGVyaW9kICYgQVRIOUtfQkVBQ09OX1JFU0VUX1RTRikKKwlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfVFNGX1JFU0VUKSB7CiAJCWF0aDlrX3BzX3dha2V1cChzYyk7CisJCWF0aDlrX2h3X3Jlc2V0X3RzZihzYy0+c2NfYWgpOworCX0KIAogCWF0aDlrX2h3X2JlYWNvbmluaXQoc2MtPnNjX2FoLCBuZXh0X2JlYWNvbiwgYmVhY29uX3BlcmlvZCk7CiAKLQlpZiAoYmVhY29uX3BlcmlvZCAmIEFUSDlLX0JFQUNPTl9SRVNFVF9UU0YpCisJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RTRl9SRVNFVCkgewogCQlhdGg5a19wc19yZXN0b3JlKHNjKTsKKwkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9UU0ZfUkVTRVQ7CisJfQogfQogCiAvKgpAQCAtNDg0LDE4ICs0NzgsMTQgQEAKIAl1MzIgbmV4dHRidHQsIGludHZhbDsKIAogCS8qIE5COiB0aGUgYmVhY29uIGludGVydmFsIGlzIGtlcHQgaW50ZXJuYWxseSBpbiBUVSdzICovCi0JaW50dmFsID0gY29uZi0+YmVhY29uX2ludGVydmFsICYgQVRIOUtfQkVBQ09OX1BFUklPRDsKKwlpbnR2YWwgPSBUVV9UT19VU0VDKGNvbmYtPmJlYWNvbl9pbnRlcnZhbCAmIEFUSDlLX0JFQUNPTl9QRVJJT0QpOwogCWludHZhbCAvPSBBVEhfQkNCVUY7ICAgIC8qIGZvciBzdGFnZ2VyZWQgYmVhY29ucyAqLwogCW5leHR0YnR0ID0gaW50dmFsOwogCi0JaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RTRl9SRVNFVCkKLQkJaW50dmFsIHw9IEFUSDlLX0JFQUNPTl9SRVNFVF9UU0Y7Ci0KIAkvKgogCSAqIEluIEFQIG1vZGUgd2UgZW5hYmxlIHRoZSBiZWFjb24gdGltZXJzIGFuZCBTV0JBIGludGVycnVwdHMgdG8KIAkgKiBwcmVwYXJlIGJlYWNvbiBmcmFtZXMuCiAJICovCi0JaW50dmFsIHw9IEFUSDlLX0JFQUNPTl9FTkE7CiAJYWgtPmltYXNrIHw9IEFUSDlLX0lOVF9TV0JBOwogCWF0aF9iZWFjb25xX2NvbmZpZyhzYyk7CiAKQEAgLTUwNSwxMSArNDk1LDYgQEAKIAlhdGg5a19iZWFjb25faW5pdChzYywgbmV4dHRidHQsIGludHZhbCk7CiAJc2MtPmJlYWNvbi5ibWlzc2NudCA9IDA7CiAJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIGFoLT5pbWFzayk7Ci0KLQkvKiBDbGVhciB0aGUgcmVzZXQgVFNGIGZsYWcsIHNvIHRoYXQgc3Vic2VxdWVudCBiZWFjb24gdXBkYXRpb24KLQkgICB3aWxsIG5vdCByZXNldCB0aGUgSFcgVFNGLiAqLwotCi0Jc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9UU0ZfUkVTRVQ7CiB9CiAKIC8qCkBAIC02MzUsNyArNjIwLDEzIEBACiAJYXRoOWtfaHdfZGlzYWJsZV9pbnRlcnJ1cHRzKGFoKTsKIAlhdGg5a19od19zZXRfc3RhX2JlYWNvbl90aW1lcnMoYWgsICZicyk7CiAJYWgtPmltYXNrIHw9IEFUSDlLX0lOVF9CTUlTUzsKLQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgYWgtPmltYXNrKTsKKworCS8qCisJICogSWYgdGhlIGJlYWNvbiBjb25maWcgaXMgY2FsbGVkIGJlYWNhdXNlIG9mIFRTRk9PUiwKKwkgKiBJbnRlcnJ1cHRzIHdpbGwgYmUgZW5hYmxlZCBiYWNrIGF0IHRoZSBlbmQgb2YgYXRoOWtfdGFza2xldAorCSAqLworCWlmICghKHNjLT5wc19mbGFncyAmIFBTX1RTRk9PUl9TWU5DKSkKKwkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIGFoLT5pbWFzayk7CiB9CiAKIHN0YXRpYyB2b2lkIGF0aF9iZWFjb25fY29uZmlnX2FkaG9jKHN0cnVjdCBhdGhfc29mdGMgKnNjLApAQCAtNjQzLDI1ICs2MzQsMjAgQEAKIHsKIAlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKLQl1NjQgdHNmOwotCXUzMiB0c2Z0dSwgaW50dmFsLCBuZXh0dGJ0dDsKKwl1MzIgdHNmLCBkZWx0YSwgaW50dmFsLCBuZXh0dGJ0dDsKIAotCWludHZhbCA9IGNvbmYtPmJlYWNvbl9pbnRlcnZhbCAmIEFUSDlLX0JFQUNPTl9QRVJJT0Q7CisJdHNmID0gYXRoOWtfaHdfZ2V0dHNmMzIoYWgpICsgVFVfVE9fVVNFQyhGVURHRSk7CisJaW50dmFsID0gVFVfVE9fVVNFQyhjb25mLT5iZWFjb25faW50ZXJ2YWwgJiBBVEg5S19CRUFDT05fUEVSSU9EKTsKIAotCi0JLyogUHVsbCBuZXh0dGJ0dCBmb3J3YXJkIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQgVFNGICovCi0KLQluZXh0dGJ0dCA9IFRTRl9UT19UVShzYy0+YmVhY29uLmJjX3RzdGFtcCA+PiAzMiwgc2MtPmJlYWNvbi5iY190c3RhbXApOwotCWlmIChuZXh0dGJ0dCA9PSAwKQotICAgICAgICAgICAgICAgIG5leHR0YnR0ID0gaW50dmFsOwotICAgICAgICBlbHNlIGlmIChpbnR2YWwpCi0gICAgICAgICAgICAgICAgbmV4dHRidHQgPSByb3VuZHVwKG5leHR0YnR0LCBpbnR2YWwpOwotCi0JdHNmID0gYXRoOWtfaHdfZ2V0dHNmNjQoYWgpOwotCXRzZnR1ID0gVFNGX1RPX1RVKCh1MzIpKHRzZj4+MzIpLCAodTMyKXRzZikgKyBGVURHRTsKLQlkbyB7Ci0JCW5leHR0YnR0ICs9IGludHZhbDsKLQl9IHdoaWxlIChuZXh0dGJ0dCA8IHRzZnR1KTsKKwlpZiAoIXNjLT5iZWFjb24uYmNfdHN0YW1wKQorCQluZXh0dGJ0dCA9IHRzZiArIGludHZhbDsKKwllbHNlIHsKKwkJaWYgKHRzZiA+IHNjLT5iZWFjb24uYmNfdHN0YW1wKQorCQkJZGVsdGEgPSAodHNmIC0gc2MtPmJlYWNvbi5iY190c3RhbXApOworCQllbHNlCisJCQlkZWx0YSA9ICh0c2YgKyAxICsgKH4wVSAtIHNjLT5iZWFjb24uYmNfdHN0YW1wKSk7CisJCW5leHR0YnR0ID0gdHNmICsgcm91bmR1cChkZWx0YSwgaW50dmFsKTsKKwl9CiAKIAlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19CRUFDT04sCiAJCSJJQlNTIG5leHR0YnR0ICV1IGludHZhbCAldSAoJXUpXG4iLApAQCAtNjcyLDcgKzY1OCw2IEBACiAJICogaWYgd2UgbmVlZCB0byBtYW51YWxseSBwcmVwYXJlIGJlYWNvbiBmcmFtZXMuICBPdGhlcndpc2Ugd2UgdXNlIGEKIAkgKiBzZWxmLWxpbmtlZCB0eCBkZXNjcmlwdG9yIGFuZCBsZXQgdGhlIGhhcmR3YXJlIGRlYWwgd2l0aCB0aGluZ3MuCiAJICovCi0JaW50dmFsIHw9IEFUSDlLX0JFQUNPTl9FTkE7CiAJYWgtPmltYXNrIHw9IEFUSDlLX0lOVF9TV0JBOwogCiAJYXRoX2JlYWNvbnFfY29uZmlnKHNjKTsKQEAgLTY4MiwyNSArNjY3LDcxIEBACiAJYXRoOWtfaHdfZGlzYWJsZV9pbnRlcnJ1cHRzKGFoKTsKIAlhdGg5a19iZWFjb25faW5pdChzYywgbmV4dHRidHQsIGludHZhbCk7CiAJc2MtPmJlYWNvbi5ibWlzc2NudCA9IDA7Ci0JYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIGFoLT5pbWFzayk7CisJLyoKKwkgKiBJZiB0aGUgYmVhY29uIGNvbmZpZyBpcyBjYWxsZWQgYmVhY2F1c2Ugb2YgVFNGT09SLAorCSAqIEludGVycnVwdHMgd2lsbCBiZSBlbmFibGVkIGJhY2sgYXQgdGhlIGVuZCBvZiBhdGg5a190YXNrbGV0CisJICovCisJaWYgKCEoc2MtPnBzX2ZsYWdzICYgUFNfVFNGT09SX1NZTkMpKQorCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgYWgtPmltYXNrKTsKK30KKworc3RhdGljIGJvb2wgYXRoOWtfYWxsb3dfYmVhY29uX2NvbmZpZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCBhdGhfYmVhY29uX2NvbmZpZyAqY3VyX2NvbmYgPSAmc2MtPmN1cl9iZWFjb25fY29uZjsKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCk7CisJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYgPSAmdmlmLT5ic3NfY29uZjsKKwlzdHJ1Y3QgYXRoX3ZpZiAqYXZwID0gKHZvaWQgKil2aWYtPmRydl9wcml2OworCisJLyoKKwkgKiBDYW4gbm90IGhhdmUgZGlmZmVyZW50IGJlYWNvbiBpbnRlcnZhbCBvbiBtdWx0aXBsZQorCSAqIEFQIGludGVyZmFjZSBjYXNlCisJICovCisJaWYgKChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgJiYKKwkgICAgKHNjLT5uYmNudmlmcyA+IDEpICYmCisJICAgICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApICYmCisJICAgIChjdXJfY29uZi0+YmVhY29uX2ludGVydmFsICE9IGJzc19jb25mLT5iZWFjb25faW50KSkgeworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DT05GSUcsCisJCQkiQ2hhbmdpbmcgYmVhY29uIGludGVydmFsIG9mIG11bHRpcGxlIFwKKwkJCUFQIGludGVyZmFjZXMgIVxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisJLyoKKwkgKiBDYW4gbm90IGNvbmZpZ3VyZSBzdGF0aW9uIHZpZidzIGJlYWNvbiBjb25maWcKKwkgKiB3aGlsZSBvbiBBUCBvcG1vZGUKKwkgKi8KKwlpZiAoKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSAmJgorCSAgICAodmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKSkgeworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DT05GSUcsCisJCQkiU1RBIHZpZidzIGJlYWNvbiBub3QgYWxsb3dlZCBvbiBBUCBtb2RlXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwkvKgorCSAqIERvIG5vdCBhbGxvdyBiZWFjb24gY29uZmlnIGlmIEhXIHdhcyBhbHJlYWR5IGNvbmZpZ3VyZWQKKwkgKiB3aXRoIGFub3RoZXIgU1RBIHZpZgorCSAqLworCWlmICgoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgJiYKKwkgICAgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSAmJgorCSAgICAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfQkVBQ09OUykgJiYKKwkgICAgIWF2cC0+cHJpbWFyeV9zdGFfdmlmKSB7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKKwkJCSJCZWFjb24gYWxyZWFkeSBjb25maWd1cmVkIGZvciBhIHN0YXRpb24gaW50ZXJmYWNlXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBhdGhfYmVhY29uX2NvbmZpZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3QgYXRoX2JlYWNvbl9jb25maWcgKmN1cl9jb25mID0gJnNjLT5jdXJfYmVhY29uX2NvbmY7Ci0Jc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpOwotCWVudW0gbmw4MDIxMV9pZnR5cGUgaWZ0eXBlOworCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mID0gJnZpZi0+YnNzX2NvbmY7CisKKwlpZiAoIWF0aDlrX2FsbG93X2JlYWNvbl9jb25maWcoc2MsIHZpZikpCisJCXJldHVybjsKIAogCS8qIFNldHVwIHRoZSBiZWFjb24gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICovCi0JaWYgKHZpZikgewotCQlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiA9ICZ2aWYtPmJzc19jb25mOwotCQlpZnR5cGUgPSB2aWYtPnR5cGU7Ci0JCWN1cl9jb25mLT5iZWFjb25faW50ZXJ2YWwgPSBic3NfY29uZi0+YmVhY29uX2ludDsKLQkJY3VyX2NvbmYtPmR0aW1fcGVyaW9kID0gYnNzX2NvbmYtPmR0aW1fcGVyaW9kOwotCX0gZWxzZSB7Ci0JCWlmdHlwZSA9IHNjLT5zY19haC0+b3Btb2RlOwotCX0KLQorCWN1cl9jb25mLT5iZWFjb25faW50ZXJ2YWwgPSBic3NfY29uZi0+YmVhY29uX2ludDsKKwljdXJfY29uZi0+ZHRpbV9wZXJpb2QgPSBic3NfY29uZi0+ZHRpbV9wZXJpb2Q7CiAJY3VyX2NvbmYtPmxpc3Rlbl9pbnRlcnZhbCA9IDE7CiAJY3VyX2NvbmYtPmR0aW1fY291bnQgPSAxOwogCWN1cl9jb25mLT5ibWlzc190aW1lb3V0ID0KQEAgLTcyMyw5ICs3NTQsMzcgQEAKIAlpZiAoY3VyX2NvbmYtPmR0aW1fcGVyaW9kID09IDApCiAJCWN1cl9jb25mLT5kdGltX3BlcmlvZCA9IDE7CiAKLQlzd2l0Y2ggKGlmdHlwZSkgeworCWF0aF9zZXRfYmVhY29uKHNjKTsKK30KKworc3RhdGljIGJvb2wgYXRoX2hhc192YWxpZF9ic2xvdChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgYXRoX3ZpZiAqYXZwOworCWludCBzbG90OworCWJvb2wgZm91bmQgPSBmYWxzZTsKKworCWZvciAoc2xvdCA9IDA7IHNsb3QgPCBBVEhfQkNCVUY7IHNsb3QrKykgeworCQlpZiAoc2MtPmJlYWNvbi5ic2xvdFtzbG90XSkgeworCQkJYXZwID0gKHZvaWQgKilzYy0+YmVhY29uLmJzbG90W3Nsb3RdLT5kcnZfcHJpdjsKKwkJCWlmIChhdnAtPmlzX2JzbG90X2FjdGl2ZSkgeworCQkJCWZvdW5kID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gZm91bmQ7Cit9CisKKwordm9pZCBhdGhfc2V0X2JlYWNvbihzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCk7CisJc3RydWN0IGF0aF9iZWFjb25fY29uZmlnICpjdXJfY29uZiA9ICZzYy0+Y3VyX2JlYWNvbl9jb25mOworCisJc3dpdGNoIChzYy0+c2NfYWgtPm9wbW9kZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6Ci0JCWF0aF9iZWFjb25fY29uZmlnX2FwKHNjLCBjdXJfY29uZik7CisJCWlmIChhdGhfaGFzX3ZhbGlkX2JzbG90KHNjKSkKKwkJCWF0aF9iZWFjb25fY29uZmlnX2FwKHNjLCBjdXJfY29uZik7CiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgpAQCAtNzQ2LDI2ICs4MDUsMTUgQEAKIHZvaWQgYXRoOWtfc2V0X2JlYWNvbmluZ19zdGF0dXMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgc3RhdHVzKQogewogCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwotCXN0cnVjdCBhdGhfdmlmICphdnA7Ci0JaW50IHNsb3Q7Ci0JYm9vbCBmb3VuZCA9IGZhbHNlOworCisJaWYgKCFhdGhfaGFzX3ZhbGlkX2JzbG90KHNjKSkKKwkJcmV0dXJuOwogCiAJYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCWZvciAoc2xvdCA9IDA7IHNsb3QgPCBBVEhfQkNCVUY7IHNsb3QrKykgewotCQkJaWYgKHNjLT5iZWFjb24uYnNsb3Rbc2xvdF0pIHsKLQkJCQlhdnAgPSAodm9pZCAqKXNjLT5iZWFjb24uYnNsb3Rbc2xvdF0tPmRydl9wcml2OwotCQkJCWlmIChhdnAtPmlzX2JzbG90X2FjdGl2ZSkgewotCQkJCQlmb3VuZCA9IHRydWU7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCQlpZiAoZm91bmQpIHsKLQkJCS8qIFJlLWVuYWJsZSBiZWFjb25pbmcgKi8KLQkJCWFoLT5pbWFzayB8PSBBVEg5S19JTlRfU1dCQTsKLQkJCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBhaC0+aW1hc2spOwotCQl9CisJCS8qIFJlLWVuYWJsZSBiZWFjb25pbmcgKi8KKwkJYWgtPmltYXNrIHw9IEFUSDlLX0lOVF9TV0JBOworCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgYWgtPmltYXNrKTsKIAl9IGVsc2UgewogCQkvKiBEaXNhYmxlIFNXQkEgaW50ZXJydXB0ICovCiAJCWFoLT5pbWFzayAmPSB+QVRIOUtfSU5UX1NXQkE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYnRjb2V4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYnRjb2V4LmMKaW5kZXggZDMzYmYyMC4uMjNmMTVhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2J0Y29leC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9idGNvZXguYwpAQCAtNTEsNiArNTEsMTAgQEAKIAkJLmJ0X2hvbGRfcnhfY2xlYXIgPSB0cnVlLAogCX07CiAJdTMyIGk7CisJYm9vbCByeGNsZWFyX3BvbGFyaXR5ID0gYXRoX2J0X2NvbmZpZy5idF9yeGNsZWFyX3BvbGFyaXR5OworCisJaWYgKEFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkpCisJCXJ4Y2xlYXJfcG9sYXJpdHkgPSAhYXRoX2J0X2NvbmZpZy5idF9yeGNsZWFyX3BvbGFyaXR5OwogCiAJYnRjb2V4X2h3LT5idF9jb2V4X21vZGUgPQogCQkoYnRjb2V4X2h3LT5idF9jb2V4X21vZGUgJiBBUl9CVF9RQ1VfVEhSRVNIKSB8CkBAIC01OSw3ICs2Myw3IEBACiAJCVNNKGF0aF9idF9jb25maWcuYnRfdHhmcmFtZV9leHRlbmQsIEFSX0JUX1RYX0ZSQU1FX0VYVEVORCkgfAogCQlTTShhdGhfYnRfY29uZmlnLmJ0X21vZGUsIEFSX0JUX01PREUpIHwKIAkJU00oYXRoX2J0X2NvbmZpZy5idF9xdWlldF9jb2xsaXNpb24sIEFSX0JUX1FVSUVUKSB8Ci0JCVNNKGF0aF9idF9jb25maWcuYnRfcnhjbGVhcl9wb2xhcml0eSwgQVJfQlRfUlhfQ0xFQVJfUE9MQVJJVFkpIHwKKwkJU00ocnhjbGVhcl9wb2xhcml0eSwgQVJfQlRfUlhfQ0xFQVJfUE9MQVJJVFkpIHwKIAkJU00oYXRoX2J0X2NvbmZpZy5idF9wcmlvcml0eV90aW1lLCBBUl9CVF9QUklPUklUWV9USU1FKSB8CiAJCVNNKGF0aF9idF9jb25maWcuYnRfZmlyc3Rfc2xvdF90aW1lLCBBUl9CVF9GSVJTVF9TTE9UX1RJTUUpIHwKIAkJU00ocW51bSwgQVJfQlRfUUNVX1RIUkVTSCk7CkBAIC0xNDIsNiArMTQ2LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woYXRoOWtfaHdfYnRjb2V4X3NldF93ZWlnaHQpOwogCisKIHN0YXRpYyB2b2lkIGF0aDlrX2h3X2J0Y29leF9lbmFibGVfM3dpcmUoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJc3RydWN0IGF0aF9idGNvZXhfaHcgKmJ0Y29leF9odyA9ICZhaC0+YnRjb2V4X2h3OwpAQCAtMTUyLDkgKzE1NywyMiBAQAogCSAqIGVuYWJsZSBjb2V4IDMtd2lyZQogCSAqLwogCVJFR19XUklURShhaCwgQVJfQlRfQ09FWF9NT0RFLCBidGNvZXhfaHctPmJ0X2NvZXhfbW9kZSk7Ci0JUkVHX1dSSVRFKGFoLCBBUl9CVF9DT0VYX1dFSUdIVCwgYnRjb2V4X2h3LT5idF9jb2V4X3dlaWdodHMpOwogCVJFR19XUklURShhaCwgQVJfQlRfQ09FWF9NT0RFMiwgYnRjb2V4X2h3LT5idF9jb2V4X21vZGUyKTsKIAorCisJaWYgKEFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkpIHsKKwkJUkVHX1dSSVRFKGFoLCBBUl9CVF9DT0VYX1dMX1dFSUdIVFMwLCBhaC0+YnRfY29leF93bGFuX3dlaWdodFswXSk7CisJCVJFR19XUklURShhaCwgQVJfQlRfQ09FWF9XTF9XRUlHSFRTMSwgYWgtPmJ0X2NvZXhfd2xhbl93ZWlnaHRbMV0pOworCQlSRUdfV1JJVEUoYWgsIEFSX0JUX0NPRVhfQlRfV0VJR0hUUzAsIGFoLT5idF9jb2V4X2J0X3dlaWdodFswXSk7CisJCVJFR19XUklURShhaCwgQVJfQlRfQ09FWF9CVF9XRUlHSFRTMSwgYWgtPmJ0X2NvZXhfYnRfd2VpZ2h0WzFdKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9CVF9DT0VYX0JUX1dFSUdIVFMyLCBhaC0+YnRfY29leF9idF93ZWlnaHRbMl0pOworCQlSRUdfV1JJVEUoYWgsIEFSX0JUX0NPRVhfQlRfV0VJR0hUUzMsIGFoLT5idF9jb2V4X2J0X3dlaWdodFszXSk7CisKKwl9IGVsc2UKKwkJUkVHX1dSSVRFKGFoLCBBUl9CVF9DT0VYX1dFSUdIVCwgYnRjb2V4X2h3LT5idF9jb2V4X3dlaWdodHMpOworCisKKwogCWlmIChBUl9TUkVWXzkyNzEoYWgpKSB7CiAJCXZhbCA9IFJFR19SRUFEKGFoLCAweDUwMDQwKTsKIAkJdmFsICY9IDB4RkZGRkZFRkY7CkBAIC0yMDIsMTAgKzIyMCw4NiBAQAogCiAJaWYgKGJ0Y29leF9ody0+c2NoZW1lID09IEFUSF9CVENPRVhfQ0ZHXzNXSVJFKSB7CiAJCVJFR19XUklURShhaCwgQVJfQlRfQ09FWF9NT0RFLCBBUl9CVF9RVUlFVCB8IEFSX0JUX01PREUpOwotCQlSRUdfV1JJVEUoYWgsIEFSX0JUX0NPRVhfV0VJR0hULCAwKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9CVF9DT0VYX01PREUyLCAwKTsKKworCQlpZiAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSkgeworCQkJUkVHX1dSSVRFKGFoLCBBUl9CVF9DT0VYX1dMX1dFSUdIVFMwLCAwKTsKKwkJCVJFR19XUklURShhaCwgQVJfQlRfQ09FWF9XTF9XRUlHSFRTMSwgMCk7CisJCQlSRUdfV1JJVEUoYWgsIEFSX0JUX0NPRVhfQlRfV0VJR0hUUzAsIDApOworCQkJUkVHX1dSSVRFKGFoLCBBUl9CVF9DT0VYX0JUX1dFSUdIVFMxLCAwKTsKKwkJCVJFR19XUklURShhaCwgQVJfQlRfQ09FWF9CVF9XRUlHSFRTMiwgMCk7CisJCQlSRUdfV1JJVEUoYWgsIEFSX0JUX0NPRVhfQlRfV0VJR0hUUzMsIDApOworCQl9IGVsc2UKKwkJCVJFR19XUklURShhaCwgQVJfQlRfQ09FWF9XRUlHSFQsIDApOworCiAJfQogCiAJYWgtPmJ0Y29leF9ody5lbmFibGVkID0gZmFsc2U7CiB9CiBFWFBPUlRfU1lNQk9MKGF0aDlrX2h3X2J0Y29leF9kaXNhYmxlKTsKKworc3RhdGljIHZvaWQgYXI5MDAzX2J0Y29leF9idF9zdG9tcChzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCSBlbnVtIGF0aF9zdG9tcF90eXBlIHN0b21wX3R5cGUpCit7CisJYWgtPmJ0X2NvZXhfYnRfd2VpZ2h0WzBdID0gQVI5MzAwX0JUX1dHSFQ7CisJYWgtPmJ0X2NvZXhfYnRfd2VpZ2h0WzFdID0gQVI5MzAwX0JUX1dHSFQ7CisJYWgtPmJ0X2NvZXhfYnRfd2VpZ2h0WzJdID0gQVI5MzAwX0JUX1dHSFQ7CisJYWgtPmJ0X2NvZXhfYnRfd2VpZ2h0WzNdID0gQVI5MzAwX0JUX1dHSFQ7CisKKworCXN3aXRjaCAoc3RvbXBfdHlwZSkgeworCWNhc2UgQVRIX0JUQ09FWF9TVE9NUF9BTEw6CisJCWFoLT5idF9jb2V4X3dsYW5fd2VpZ2h0WzBdID0gQVI5MzAwX1NUT01QX0FMTF9XTEFOX1dHSFQwOworCQlhaC0+YnRfY29leF93bGFuX3dlaWdodFsxXSA9IEFSOTMwMF9TVE9NUF9BTExfV0xBTl9XR0hUMTsKKwkJYnJlYWs7CisJY2FzZSBBVEhfQlRDT0VYX1NUT01QX0xPVzoKKwkJYWgtPmJ0X2NvZXhfd2xhbl93ZWlnaHRbMF0gPSBBUjkzMDBfU1RPTVBfTE9XX1dMQU5fV0dIVDA7CisJCWFoLT5idF9jb2V4X3dsYW5fd2VpZ2h0WzFdID0gQVI5MzAwX1NUT01QX0xPV19XTEFOX1dHSFQxOworCQlicmVhazsKKwljYXNlIEFUSF9CVENPRVhfU1RPTVBfTk9ORToKKwkJYWgtPmJ0X2NvZXhfd2xhbl93ZWlnaHRbMF0gPSBBUjkzMDBfU1RPTVBfTk9ORV9XTEFOX1dHSFQwOworCQlhaC0+YnRfY29leF93bGFuX3dlaWdodFsxXSA9IEFSOTMwMF9TVE9NUF9OT05FX1dMQU5fV0dIVDE7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYXRoX2RiZyhhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX0JUQ09FWCwKKwkJCQkiSW52YWxpZCBTdG9tcHR5cGVcbiIpOworCQlicmVhazsKKwl9CisKKwlhdGg5a19od19idGNvZXhfZW5hYmxlKGFoKTsKK30KKworLyoKKyAqIENvbmZpZ3VyZXMgYXBwcm9wcmlhdGUgd2VpZ2h0IGJhc2VkIG9uIHN0b21wIHR5cGUuCisgKi8KK3ZvaWQgYXRoOWtfaHdfYnRjb2V4X2J0X3N0b21wKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJICAgICAgZW51bSBhdGhfc3RvbXBfdHlwZSBzdG9tcF90eXBlKQoreworCWlmIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKSB7CisJCWFyOTAwM19idGNvZXhfYnRfc3RvbXAoYWgsIHN0b21wX3R5cGUpOworCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChzdG9tcF90eXBlKSB7CisJY2FzZSBBVEhfQlRDT0VYX1NUT01QX0FMTDoKKwkJYXRoOWtfaHdfYnRjb2V4X3NldF93ZWlnaHQoYWgsIEFSX0JUX0NPRVhfV0dIVCwKKwkJCQlBUl9TVE9NUF9BTExfV0xBTl9XR0hUKTsKKwkJYnJlYWs7CisJY2FzZSBBVEhfQlRDT0VYX1NUT01QX0xPVzoKKwkJYXRoOWtfaHdfYnRjb2V4X3NldF93ZWlnaHQoYWgsIEFSX0JUX0NPRVhfV0dIVCwKKwkJCQlBUl9TVE9NUF9MT1dfV0xBTl9XR0hUKTsKKwkJYnJlYWs7CisJY2FzZSBBVEhfQlRDT0VYX1NUT01QX05PTkU6CisJCWF0aDlrX2h3X2J0Y29leF9zZXRfd2VpZ2h0KGFoLCBBUl9CVF9DT0VYX1dHSFQsCisJCQkJQVJfU1RPTVBfTk9ORV9XTEFOX1dHSFQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlhdGhfZGJnKGF0aDlrX2h3X2NvbW1vbihhaCksIEFUSF9EQkdfQlRDT0VYLAorCQkJCSJJbnZhbGlkIFN0b21wdHlwZVxuIik7CisJCWJyZWFrOworCX0KKworCWF0aDlrX2h3X2J0Y29leF9lbmFibGUoYWgpOworfQorRVhQT1JUX1NZTUJPTChhdGg5a19od19idGNvZXhfYnRfc3RvbXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2J0Y29leC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2J0Y29leC5oCmluZGV4IDU4OGRmZDQuLmE5ZWZjYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9idGNvZXguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYnRjb2V4LmgKQEAgLTE5LDkgKzE5LDEzIEBACiAKICNpbmNsdWRlICJody5oIgogCi0jZGVmaW5lIEFUSF9XTEFOQUNUSVZFX0dQSU8JNQotI2RlZmluZSBBVEhfQlRBQ1RJVkVfR1BJTwk2Ci0jZGVmaW5lIEFUSF9CVFBSSU9SSVRZX0dQSU8JNworI2RlZmluZSBBVEhfV0xBTkFDVElWRV9HUElPXzkyODAgICAgIDUKKyNkZWZpbmUgQVRIX0JUQUNUSVZFX0dQSU9fOTI4MCAgICAgICA2CisjZGVmaW5lIEFUSF9CVFBSSU9SSVRZX0dQSU9fOTI4NSAgICAgNworCisjZGVmaW5lIEFUSF9XTEFOQUNUSVZFX0dQSU9fOTMwMCAgICAgNQorI2RlZmluZSBBVEhfQlRBQ1RJVkVfR1BJT185MzAwICAgICAgIDQKKyNkZWZpbmUgQVRIX0JUUFJJT1JJVFlfR1BJT185MzAwICAgICA4CiAKICNkZWZpbmUgQVRIX0JUQ09FWF9ERUZfQlRfUEVSSU9EICA0NQogI2RlZmluZSBBVEhfQlRDT0VYX0RFRl9EVVRZX0NZQ0xFIDU1CkBAIC0zMiw2ICszNiwxNCBAQAogI2RlZmluZSBBVEhfQlRfQ05UX1RIUkVTSE9MRAkgICAgICAgMwogI2RlZmluZSBBVEhfQlRfQ05UX1NDQU5fVEhSRVNIT0xEICAgICAgMTUKIAorLyogRGVmaW5lcyB0aGUgQlQgQVJfQlRfQ09FWF9XR0hUIHVzZWQgKi8KK2VudW0gYXRoX3N0b21wX3R5cGUgeworCUFUSF9CVENPRVhfTk9fU1RPTVAsCisJQVRIX0JUQ09FWF9TVE9NUF9BTEwsCisJQVRIX0JUQ09FWF9TVE9NUF9MT1csCisJQVRIX0JUQ09FWF9TVE9NUF9OT05FCit9OworCiBlbnVtIGF0aF9idGNvZXhfc2NoZW1lIHsKIAlBVEhfQlRDT0VYX0NGR19OT05FLAogCUFUSF9CVENPRVhfQ0ZHXzJXSVJFLApAQCAtNTcsNSArNjksNyBAQAogCQkJCXUzMiB3bGFuX3dlaWdodCk7CiB2b2lkIGF0aDlrX2h3X2J0Y29leF9lbmFibGUoc3RydWN0IGF0aF9odyAqYWgpOwogdm9pZCBhdGg5a19od19idGNvZXhfZGlzYWJsZShzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2h3X2J0Y29leF9idF9zdG9tcChzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCSAgICAgIGVudW0gYXRoX3N0b21wX3R5cGUgc3RvbXBfdHlwZSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NhbGliLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY2FsaWIuYwppbmRleCA4NjQ5NTgxLi41NThiMjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY2FsaWIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY2FsaWIuYwpAQCAtNjksMTUgKzY5LDIxIEBACiAJCQkJCSAgICAgIGludDE2X3QgKm5mYXJyYXkpCiB7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmNvbW1vbi0+aHctPmNvbmY7CiAJc3RydWN0IGF0aF9uZl9saW1pdHMgKmxpbWl0OwogCXN0cnVjdCBhdGg5a19uZmNhbF9oaXN0ICpoOwogCWJvb2wgaGlnaF9uZl9taWQgPSBmYWxzZTsKKwl1OCBjaGFpbm1hc2sgPSAoYWgtPnJ4Y2hhaW5tYXNrIDw8IDMpIHwgYWgtPnJ4Y2hhaW5tYXNrOwogCWludCBpOwogCiAJaCA9IGNhbC0+bmZDYWxIaXN0OwogCWxpbWl0ID0gYXRoOWtfaHdfZ2V0X25mX2xpbWl0cyhhaCwgYWgtPmN1cmNoYW4pOwogCiAJZm9yIChpID0gMDsgaSA8IE5VTV9ORl9SRUFESU5HUzsgaSsrKSB7CisJCWlmICghKGNoYWlubWFzayAmICgxIDw8IGkpKSB8fAorCQkgICAgKChpID49IEFSNTQxNl9NQVhfQ0hBSU5TKSAmJiAhY29uZl9pc19odDQwKGNvbmYpKSkKKwkJCWNvbnRpbnVlOworCiAJCWhbaV0ubmZDYWxCdWZmZXJbaFtpXS5jdXJySW5kZXhdID0gbmZhcnJheVtpXTsKIAogCQlpZiAoKytoW2ldLmN1cnJJbmRleCA+PSBBVEg5S19ORl9DQUxfSElTVF9NQVgpCkBAIC0yMjUsNiArMjMxLDcgQEAKIAlpbnQzMl90IHZhbDsKIAl1OCBjaGFpbm1hc2sgPSAoYWgtPnJ4Y2hhaW5tYXNrIDw8IDMpIHwgYWgtPnJ4Y2hhaW5tYXNrOwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZjb21tb24tPmh3LT5jb25mOwogCXMxNiBkZWZhdWx0X25mID0gYXRoOWtfaHdfZ2V0X2RlZmF1bHRfbmYoYWgsIGNoYW4pOwogCiAJaWYgKGFoLT5jYWxkYXRhKQpAQCAtMjM0LDYgKzI0MSw5IEBACiAJCWlmIChjaGFpbm1hc2sgJiAoMSA8PCBpKSkgewogCQkJczE2IG5mdmFsOwogCisJCQlpZiAoKGkgPj0gQVI1NDE2X01BWF9DSEFJTlMpICYmICFjb25mX2lzX2h0NDAoY29uZikpCisJCQkJY29udGludWU7CisKIAkJCWlmIChoKQogCQkJCW5mdmFsID0gaFtpXS5wcml2TkY7CiAJCQllbHNlCkBAIC0yOTMsNiArMzAzLDkgQEAKIAlFTkFCTEVfUkVHV1JJVEVfQlVGRkVSKGFoKTsKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX05GX1JFQURJTkdTOyBpKyspIHsKIAkJaWYgKGNoYWlubWFzayAmICgxIDw8IGkpKSB7CisJCQlpZiAoKGkgPj0gQVI1NDE2X01BWF9DSEFJTlMpICYmICFjb25mX2lzX2h0NDAoY29uZikpCisJCQkJY29udGludWU7CisKIAkJCXZhbCA9IFJFR19SRUFEKGFoLCBhaC0+bmZfcmVnc1tpXSk7CiAJCQl2YWwgJj0gMHhGRkZGRkUwMDsKIAkJCXZhbCB8PSAoKCh1MzIpICgtNTApIDw8IDEpICYgMHgxZmYpOwpAQCAtMzk2LDE0ICs0MDksNiBAQAogCX0KIH0KIAotczE2IGF0aDlrX2h3X2dldGNoYW5fbm9pc2Uoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCWlmICghYWgtPmN1cmNoYW4gfHwgIWFoLT5jdXJjaGFuLT5ub2lzZWZsb29yKQotCQlyZXR1cm4gYXRoOWtfaHdfZ2V0X2RlZmF1bHRfbmYoYWgsIGNoYW4pOwotCi0JcmV0dXJuIGFoLT5jdXJjaGFuLT5ub2lzZWZsb29yOwotfQotRVhQT1JUX1NZTUJPTChhdGg5a19od19nZXRjaGFuX25vaXNlKTsKIAogdm9pZCBhdGg5a19od19ic3R1Y2tfbmZjYWwoc3RydWN0IGF0aF9odyAqYWgpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY2FsaWIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jYWxpYi5oCmluZGV4IGI4OTczZWIuLjQ0MjA3ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jYWxpYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jYWxpYi5oCkBAIC0xMDYsNyArMTA2LDYgQEAKIHZvaWQgYXRoOWtfaW5pdF9uZmNhbF9oaXN0X2J1ZmZlcihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKIHZvaWQgYXRoOWtfaHdfYnN0dWNrX25mY2FsKHN0cnVjdCBhdGhfaHcgKmFoKTsKLXMxNiBhdGg5a19od19nZXRjaGFuX25vaXNlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CiB2b2lkIGF0aDlrX2h3X3Jlc2V0X2NhbGlicmF0aW9uKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCXN0cnVjdCBhdGg5a19jYWxfbGlzdCAqY3VyckNhbCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uYwppbmRleCA2MTVlNjgyLi43NDUzNWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAogCWlmIChjaGFuLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKIAkJaWNoYW4tPmNoYW5tb2RlID0gQ0hBTk5FTF9HOwotCQlpY2hhbi0+Y2hhbm5lbEZsYWdzID0gQ0hBTk5FTF8yR0haIHwgQ0hBTk5FTF9PRkRNIHwgQ0hBTk5FTF9HOworCQlpY2hhbi0+Y2hhbm5lbEZsYWdzID0gQ0hBTk5FTF8yR0haIHwgQ0hBTk5FTF9PRkRNOwogCX0gZWxzZSB7CiAJCWljaGFuLT5jaGFubW9kZSA9IENIQU5ORUxfQTsKIAkJaWNoYW4tPmNoYW5uZWxGbGFncyA9IENIQU5ORUxfNUdIWiB8IENIQU5ORUxfT0ZETTsKQEAgLTE1OCwzNyArMTU4LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woYXRoOWtfY21uX2NvdW50X3N0cmVhbXMpOwogCi0vKgotICogQ29uZmlndXJlcyBhcHByb3ByaWF0ZSB3ZWlnaHQgYmFzZWQgb24gc3RvbXAgdHlwZS4KLSAqLwotdm9pZCBhdGg5a19jbW5fYnRjb2V4X2J0X3N0b21wKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sCi0JCQkJICBlbnVtIGF0aF9zdG9tcF90eXBlIHN0b21wX3R5cGUpCi17Ci0Jc3RydWN0IGF0aF9odyAqYWggPSBjb21tb24tPmFoOwotCi0Jc3dpdGNoIChzdG9tcF90eXBlKSB7Ci0JY2FzZSBBVEhfQlRDT0VYX1NUT01QX0FMTDoKLQkJYXRoOWtfaHdfYnRjb2V4X3NldF93ZWlnaHQoYWgsIEFSX0JUX0NPRVhfV0dIVCwKLQkJCQkJICAgQVJfU1RPTVBfQUxMX1dMQU5fV0dIVCk7Ci0JCWJyZWFrOwotCWNhc2UgQVRIX0JUQ09FWF9TVE9NUF9MT1c6Ci0JCWF0aDlrX2h3X2J0Y29leF9zZXRfd2VpZ2h0KGFoLCBBUl9CVF9DT0VYX1dHSFQsCi0JCQkJCSAgIEFSX1NUT01QX0xPV19XTEFOX1dHSFQpOwotCQlicmVhazsKLQljYXNlIEFUSF9CVENPRVhfU1RPTVBfTk9ORToKLQkJYXRoOWtfaHdfYnRjb2V4X3NldF93ZWlnaHQoYWgsIEFSX0JUX0NPRVhfV0dIVCwKLQkJCQkJICAgQVJfU1RPTVBfTk9ORV9XTEFOX1dHSFQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19CVENPRVgsCi0JCQkiSW52YWxpZCBTdG9tcHR5cGVcbiIpOwotCQlicmVhazsKLQl9Ci0KLQlhdGg5a19od19idGNvZXhfZW5hYmxlKGFoKTsKLX0KLUVYUE9SVF9TWU1CT0woYXRoOWtfY21uX2J0Y29leF9idF9zdG9tcCk7Ci0KIHZvaWQgYXRoOWtfY21uX3VwZGF0ZV90eHBvdyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGN1cl90eHBvdywKIAkJCSAgICB1MTYgbmV3X3R4cG93LCB1MTYgKnR4cG93ZXIpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLmgKaW5kZXggYjJmN2I1Zi4uNTEyNGYxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24uaApAQCAtNTAsMTQgKzUwLDYgQEAKICNkZWZpbmUgQVRIX0VQX1JORCh4LCBtdWwpIAkJCQkJCVwKIAkoKCgoeCklKG11bCkpID49ICgobXVsKS8yKSkgPyAoKHgpICsgKChtdWwpIC0gMSkpIC8gKG11bCkgOiAoeCkvKG11bCkpCiAKLS8qIERlZmluZXMgdGhlIEJUIEFSX0JUX0NPRVhfV0dIVCB1c2VkICovCi1lbnVtIGF0aF9zdG9tcF90eXBlIHsKLQlBVEhfQlRDT0VYX05PX1NUT01QLAotCUFUSF9CVENPRVhfU1RPTVBfQUxMLAotCUFUSF9CVENPRVhfU1RPTVBfTE9XLAotCUFUSF9CVENPRVhfU1RPTVBfTk9ORQotfTsKLQogaW50IGF0aDlrX2Ntbl9wYWRwb3MoX19sZTE2IGZyYW1lX2NvbnRyb2wpOwogaW50IGF0aDlrX2Ntbl9nZXRfaHdfY3J5cHRvX2tleXR5cGUoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIGF0aDlrX2Ntbl91cGRhdGVfaWNoYW5uZWwoc3RydWN0IGF0aDlrX2NoYW5uZWwgKmljaGFuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuYwppbmRleCA4ZGY1YTkyLi5iYWQxYTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuYwpAQCAtMzI2LDYgKzMyNiw4IEBACiAJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuZHRpbXN5bmMrKzsKIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX0RUSU0pCiAJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuZHRpbSsrOworCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfVFNGT09SKQorCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnRzZm9vcisrOwogfQogCiBzdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfaW50ZXJydXB0KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCkBAIC0zODAsOCArMzgyLDExIEBACiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCiAJCSIlOHM6ICUxMHVcbiIsICJEVElNIiwgc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5kdGltKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJIiU4czogJTEwdVxuIiwgIlRTRk9PUiIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMudHNmb29yKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKIAkJIiU4czogJTEwdVxuIiwgIlRPVEFMIiwgc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy50b3RhbCk7CiAKKwogCWlmIChsZW4gPiBzaXplb2YoYnVmKSkKIAkJbGVuID0gc2l6ZW9mKGJ1Zik7CiAKQEAgLTg0NSw3ICs4NTAsNyBAQAogCiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJY2hhciAqYnVmOwotCXVuc2lnbmVkIGludCBsZW4gPSAwLCBzaXplID0gMTE1MjsKKwl1bnNpZ25lZCBpbnQgbGVuID0gMCwgc2l6ZSA9IDE0MDA7CiAJc3NpemVfdCByZXR2YWwgPSAwOwogCiAJYnVmID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKQEAgLTg3NCw2ICs4NzksMzQgQEAKIAkJCSIlMThzIDogJTEwdVxuIiwgIkRFQ1JZUFQgQlVTWSBFUlIiLAogCQkJc2MtPmRlYnVnLnN0YXRzLnJ4c3RhdHMuZGVjcnlwdF9idXN5X2Vycik7CiAKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUxOHMgOiAlMTBkXG4iLCAiUlNTSS1DVEwwIiwKKwkJCXNjLT5kZWJ1Zy5zdGF0cy5yeHN0YXRzLnJzX3Jzc2lfY3RsMCk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUxOHMgOiAlMTBkXG4iLCAiUlNTSS1DVEwxIiwKKwkJCXNjLT5kZWJ1Zy5zdGF0cy5yeHN0YXRzLnJzX3Jzc2lfY3RsMSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUxOHMgOiAlMTBkXG4iLCAiUlNTSS1DVEwyIiwKKwkJCXNjLT5kZWJ1Zy5zdGF0cy5yeHN0YXRzLnJzX3Jzc2lfY3RsMik7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUxOHMgOiAlMTBkXG4iLCAiUlNTSS1FWFQwIiwKKwkJCXNjLT5kZWJ1Zy5zdGF0cy5yeHN0YXRzLnJzX3Jzc2lfZXh0MCk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUxOHMgOiAlMTBkXG4iLCAiUlNTSS1FWFQxIiwKKwkJCXNjLT5kZWJ1Zy5zdGF0cy5yeHN0YXRzLnJzX3Jzc2lfZXh0MSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUxOHMgOiAlMTBkXG4iLCAiUlNTSS1FWFQyIiwKKwkJCXNjLT5kZWJ1Zy5zdGF0cy5yeHN0YXRzLnJzX3Jzc2lfZXh0Mik7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUxOHMgOiAlMTBkXG4iLCAiUnggQW50ZW5uYSIsCisJCQlzYy0+ZGVidWcuc3RhdHMucnhzdGF0cy5yc19hbnRlbm5hKTsKKwogCVBIWV9FUlIoIlVOREVSUlVOIiwgQVRIOUtfUEhZRVJSX1VOREVSUlVOKTsKIAlQSFlfRVJSKCJUSU1JTkciLCBBVEg5S19QSFlFUlJfVElNSU5HKTsKIAlQSFlfRVJSKCJQQVJJVFkiLCBBVEg5S19QSFlFUlJfUEFSSVRZKTsKQEAgLTk0OCw2ICs5ODEsMTYgQEAKIAkJUlhfUEhZX0VSUl9JTkMocGh5ZXJyKTsKIAl9CiAKKwlzYy0+ZGVidWcuc3RhdHMucnhzdGF0cy5yc19yc3NpX2N0bDAgPSBycy0+cnNfcnNzaV9jdGwwOworCXNjLT5kZWJ1Zy5zdGF0cy5yeHN0YXRzLnJzX3Jzc2lfY3RsMSA9IHJzLT5yc19yc3NpX2N0bDE7CisJc2MtPmRlYnVnLnN0YXRzLnJ4c3RhdHMucnNfcnNzaV9jdGwyID0gcnMtPnJzX3Jzc2lfY3RsMjsKKworCXNjLT5kZWJ1Zy5zdGF0cy5yeHN0YXRzLnJzX3Jzc2lfZXh0MCA9IHJzLT5yc19yc3NpX2V4dDA7CisJc2MtPmRlYnVnLnN0YXRzLnJ4c3RhdHMucnNfcnNzaV9leHQxID0gcnMtPnJzX3Jzc2lfZXh0MTsKKwlzYy0+ZGVidWcuc3RhdHMucnhzdGF0cy5yc19yc3NpX2V4dDIgPSBycy0+cnNfcnNzaV9leHQyOworCisJc2MtPmRlYnVnLnN0YXRzLnJ4c3RhdHMucnNfYW50ZW5uYSA9IHJzLT5yc19hbnRlbm5hOworCiAjdW5kZWYgUlhfU1RBVF9JTkMKICN1bmRlZiBSWF9QSFlfRVJSX0lOQwogfQpAQCAtMTA4OCw2NyArMTEzMSw0MyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogI2lmZGVmIENPTkZJR19BVEhfREVCVUcKLQlpZiAoIWRlYnVnZnNfY3JlYXRlX2ZpbGUoImRlYnVnIiwgU19JUlVTUiB8IFNfSVdVU1IsCi0JCQlzYy0+ZGVidWcuZGVidWdmc19waHksIHNjLCAmZm9wc19kZWJ1ZykpCi0JCWdvdG8gZXJyOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImRlYnVnIiwgU19JUlVTUiB8IFNfSVdVU1IsIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKKwkJCSAgICBzYywgJmZvcHNfZGVidWcpOwogI2VuZGlmCisJZGVidWdmc19jcmVhdGVfZmlsZSgiZG1hIiwgU19JUlVTUiwgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LCBzYywKKwkJCSAgICAmZm9wc19kbWEpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImludGVycnVwdCIsIFNfSVJVU1IsIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgc2MsCisJCQkgICAgJmZvcHNfaW50ZXJydXB0KTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ3aXBoeSIsIFNfSVJVU1IgfCBTX0lXVVNSLCBzYy0+ZGVidWcuZGVidWdmc19waHksCisJCQkgICAgc2MsICZmb3BzX3dpcGh5KTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ4bWl0IiwgU19JUlVTUiwgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LCBzYywKKwkJCSAgICAmZm9wc194bWl0KTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzdGF0aW9ucyIsIFNfSVJVU1IsIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgc2MsCisJCQkgICAgJmZvcHNfc3RhdGlvbnMpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoIm1pc2MiLCBTX0lSVVNSLCBzYy0+ZGVidWcuZGVidWdmc19waHksIHNjLAorCQkJICAgICZmb3BzX21pc2MpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlY3YiLCBTX0lSVVNSLCBzYy0+ZGVidWcuZGVidWdmc19waHksIHNjLAorCQkJICAgICZmb3BzX3JlY3YpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInJ4X2NoYWlubWFzayIsIFNfSVJVU1IgfCBTX0lXVVNSLAorCQkJICAgIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgc2MsICZmb3BzX3J4X2NoYWlubWFzayk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgidHhfY2hhaW5tYXNrIiwgU19JUlVTUiB8IFNfSVdVU1IsCisJCQkgICAgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LCBzYywgJmZvcHNfdHhfY2hhaW5tYXNrKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZWdpZHgiLCBTX0lSVVNSIHwgU19JV1VTUiwgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LAorCQkJICAgIHNjLCAmZm9wc19yZWdpZHgpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlZ3ZhbCIsIFNfSVJVU1IgfCBTX0lXVVNSLCBzYy0+ZGVidWcuZGVidWdmc19waHksCisJCQkgICAgc2MsICZmb3BzX3JlZ3ZhbCk7CisJZGVidWdmc19jcmVhdGVfYm9vbCgiaWdub3JlX2V4dGNjYSIsIFNfSVJVU1IgfCBTX0lXVVNSLAorCQkJICAgIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKKwkJCSAgICAmYWgtPmNvbmZpZy5jd21faWdub3JlX2V4dGNjYSk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgicmVnZHVtcCIsIFNfSVJVU1IsIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgc2MsCisJCQkgICAgJmZvcHNfcmVnZHVtcCk7CiAKLQlpZiAoIWRlYnVnZnNfY3JlYXRlX2ZpbGUoImRtYSIsIFNfSVJVU1IsIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKLQkJCXNjLCAmZm9wc19kbWEpKQotCQlnb3RvIGVycjsKKwlkZWJ1Z2ZzX2NyZWF0ZV91MzIoImdwaW9fbWFzayIsIFNfSVJVU1IgfCBTX0lXVVNSLAorCQkJICAgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LCAmc2MtPnNjX2FoLT5ncGlvX21hc2spOwogCi0JaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJpbnRlcnJ1cHQiLCBTX0lSVVNSLCBzYy0+ZGVidWcuZGVidWdmc19waHksCi0JCQlzYywgJmZvcHNfaW50ZXJydXB0KSkKLQkJZ290byBlcnI7Ci0KLQlpZiAoIWRlYnVnZnNfY3JlYXRlX2ZpbGUoIndpcGh5IiwgU19JUlVTUiB8IFNfSVdVU1IsCi0JCQlzYy0+ZGVidWcuZGVidWdmc19waHksIHNjLCAmZm9wc193aXBoeSkpCi0JCWdvdG8gZXJyOwotCi0JaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ4bWl0IiwgU19JUlVTUiwgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LAotCQkJc2MsICZmb3BzX3htaXQpKQotCQlnb3RvIGVycjsKLQotCWlmICghZGVidWdmc19jcmVhdGVfZmlsZSgic3RhdGlvbnMiLCBTX0lSVVNSLCBzYy0+ZGVidWcuZGVidWdmc19waHksCi0JCQlzYywgJmZvcHNfc3RhdGlvbnMpKQotCQlnb3RvIGVycjsKLQotCWlmICghZGVidWdmc19jcmVhdGVfZmlsZSgibWlzYyIsIFNfSVJVU1IsIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKLQkJCXNjLCAmZm9wc19taXNjKSkKLQkJZ290byBlcnI7Ci0KLQlpZiAoIWRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlY3YiLCBTX0lSVVNSLCBzYy0+ZGVidWcuZGVidWdmc19waHksCi0JCQlzYywgJmZvcHNfcmVjdikpCi0JCWdvdG8gZXJyOwotCi0JaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyeF9jaGFpbm1hc2siLCBTX0lSVVNSIHwgU19JV1VTUiwKLQkJCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgc2MsICZmb3BzX3J4X2NoYWlubWFzaykpCi0JCWdvdG8gZXJyOwotCi0JaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ0eF9jaGFpbm1hc2siLCBTX0lSVVNSIHwgU19JV1VTUiwKLQkJCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgc2MsICZmb3BzX3R4X2NoYWlubWFzaykpCi0JCWdvdG8gZXJyOwotCi0JaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZWdpZHgiLCBTX0lSVVNSIHwgU19JV1VTUiwKLQkJCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgc2MsICZmb3BzX3JlZ2lkeCkpCi0JCWdvdG8gZXJyOwotCi0JaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZWd2YWwiLCBTX0lSVVNSIHwgU19JV1VTUiwKLQkJCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgc2MsICZmb3BzX3JlZ3ZhbCkpCi0JCWdvdG8gZXJyOwotCi0JaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9ib29sKCJpZ25vcmVfZXh0Y2NhIiwgU19JUlVTUiB8IFNfSVdVU1IsCi0JCQlzYy0+ZGVidWcuZGVidWdmc19waHksICZhaC0+Y29uZmlnLmN3bV9pZ25vcmVfZXh0Y2NhKSkKLQkJZ290byBlcnI7Ci0KLQlpZiAoIWRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlZ2R1bXAiLCBTX0lSVVNSLCBzYy0+ZGVidWcuZGVidWdmc19waHksCi0JCQlzYywgJmZvcHNfcmVnZHVtcCkpCi0JCWdvdG8gZXJyOworCWRlYnVnZnNfY3JlYXRlX3UzMigiZ3Bpb192YWwiLCBTX0lSVVNSIHwgU19JV1VTUiwKKwkJCSAgIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgJnNjLT5zY19haC0+Z3Bpb192YWwpOwogCiAJc2MtPmRlYnVnLnJlZ2lkeCA9IDA7CiAJcmV0dXJuIDA7Ci1lcnI6Ci0JZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSk7Ci0Jc2MtPmRlYnVnLmRlYnVnZnNfcGh5ID0gTlVMTDsKLQlyZXR1cm4gLUVOT01FTTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmgKaW5kZXggNTkzMzhkZS4uNTQ4OGEzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmgKQEAgLTU0LDYgKzU0LDkgQEAKICAqIEBkdGltc3luYzogRFRJTSBzeW5jIGxvc3NhZ2UKICAqIEBkdGltOiBSWCBCZWFjb24gd2l0aCBEVElNCiAgKiBAYmJfd2F0Y2hkb2c6IEJhc2ViYW5kIHdhdGNoZG9nCisgKiBAdHNmb29yOiBUU0Ygb3V0IG9mIHJhbmdlLCBpbmRpY2F0ZXMgdGhhdCB0aGUgY29ycmVjdGVkIFRTRiByZWNlaXZlZAorICogZnJvbSBhIGJlYWNvbiBkaWZmZXJzIGZyb20gdGhlIFBDVSdzIGludGVybmFsIFRTRiBieSBtb3JlIHRoYW4gYQorICogKHByb2dyYW1tYWJsZSkgdGhyZXNob2xkCiAgKi8KIHN0cnVjdCBhdGhfaW50ZXJydXB0X3N0YXRzIHsKIAl1MzIgdG90YWw7CkBAIC03OCw2ICs4MSw3IEBACiAJdTMyIGR0aW1zeW5jOwogCXUzMiBkdGltOwogCXUzMiBiYl93YXRjaGRvZzsKKwl1MzIgdHNmb29yOwogfTsKIAogLyoqCkBAIC0xNTcsNiArMTYxLDEzIEBACiAJdTMyIHBvc3RfZGVsaW1fY3JjX2VycjsKIAl1MzIgZGVjcnlwdF9idXN5X2VycjsKIAl1MzIgcGh5X2Vycl9zdGF0c1tBVEg5S19QSFlFUlJfTUFYXTsKKwlpbnQ4X3QgcnNfcnNzaV9jdGwwOworCWludDhfdCByc19yc3NpX2N0bDE7CisJaW50OF90IHJzX3Jzc2lfY3RsMjsKKwlpbnQ4X3QgcnNfcnNzaV9leHQwOworCWludDhfdCByc19yc3NpX2V4dDE7CisJaW50OF90IHJzX3Jzc2lfZXh0MjsKKwl1OCByc19hbnRlbm5hOwogfTsKIAogc3RydWN0IGF0aF9zdGF0cyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tLmgKaW5kZXggYmQ4MjQ0Ny4uM2UzMTYxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb20uaApAQCAtNDM2LDcgKzQzNiwxMSBAQAogCXU4IGRiMl8yOjQsIGRiMl8zOjQ7CiAJdTggZGIyXzQ6NCwgcmVzZXJ2ZWQ6NDsKICNlbmRpZgotCXU4IGZ1dHVyZU1vZGFsWzRdOworCXU4IHR4X2RpdmVyc2l0eTsKKwl1OCBmbGNfcHdyX3RocmVzaDsKKwl1OCBiYl9zY2FsZV9zbXJ0X2FudGVubmE7CisjZGVmaW5lIEVFUF80S19CQl9ERVNJUkVEX1NDQUxFX01BU0sJMHgxZgorCXU4IGZ1dHVyZU1vZGFsWzFdOwogCXN0cnVjdCBzcHVyX2NoYW4gc3B1ckNoYW5zW0FSX0VFUFJPTV9NT0RBTF9TUFVSU107CiB9IF9fcGFja2VkOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tXzRrLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tXzRrLmMKaW5kZXggYmM3N2EzMC4uNmY3MTRkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbV80ay5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fNGsuYwpAQCAtNzgxLDYgKzc4MSw3IEBACiB7CiAJc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbDsKIAlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0gJmFoLT5lZXByb20ubWFwNGs7CisJc3RydWN0IGJhc2VfZWVwX2hlYWRlcl80ayAqcEJhc2UgPSAmZWVwLT5iYXNlRWVwSGVhZGVyOwogCXU4IHR4UnhBdHRlbkxvY2FsOwogCXU4IG9iWzVdLCBkYjFbNV0sIGRiMls1XTsKIAl1OCBhbnRfZGl2X2NvbnRyb2wxLCBhbnRfZGl2X2NvbnRyb2wyOwpAQCAtMTAwMyw2ICsxMDA0LDMxIEBACiAJCQkJICAgICAgQVJfUEhZX1NFVFRMSU5HX1NXSVRDSCwKIAkJCQkgICAgICBwTW9kYWwtPnN3U2V0dGxlSHQ0MCk7CiAJfQorCWlmIChBUl9TUkVWXzkyNzEoYWgpIHx8IEFSX1NSRVZfOTI4NShhaCkpIHsKKwkJdTggYmJfZGVzaXJlZF9zY2FsZSA9IChwTW9kYWwtPmJiX3NjYWxlX3NtcnRfYW50ZW5uYSAmCisJCQkJRUVQXzRLX0JCX0RFU0lSRURfU0NBTEVfTUFTSyk7CisJCWlmICgocEJhc2UtPnR4R2FpblR5cGUgPT0gMCkgJiYgKGJiX2Rlc2lyZWRfc2NhbGUgIT0gMCkpIHsKKwkJCXUzMiBwd3JjdHJsLCBtYXNrLCBjbHI7CisKKwkJCW1hc2sgPSBCSVQoMCl8QklUKDUpfEJJVCgxMCl8QklUKDE1KXxCSVQoMjApfEJJVCgyNSk7CisJCQlwd3JjdHJsID0gbWFzayAqIGJiX2Rlc2lyZWRfc2NhbGU7CisJCQljbHIgPSBtYXNrICogMHgxZjsKKwkJCVJFR19STVcoYWgsIEFSX1BIWV9UWF9QV1JDVFJMOCwgcHdyY3RybCwgY2xyKTsKKwkJCVJFR19STVcoYWgsIEFSX1BIWV9UWF9QV1JDVFJMMTAsIHB3cmN0cmwsIGNscik7CisJCQlSRUdfUk1XKGFoLCBBUl9QSFlfQ0gwX1RYX1BXUkNUUkwxMiwgcHdyY3RybCwgY2xyKTsKKworCQkJbWFzayA9IEJJVCgwKXxCSVQoNSl8QklUKDE1KTsKKwkJCXB3cmN0cmwgPSBtYXNrICogYmJfZGVzaXJlZF9zY2FsZTsKKwkJCWNsciA9IG1hc2sgKiAweDFmOworCQkJUkVHX1JNVyhhaCwgQVJfUEhZX1RYX1BXUkNUUkw5LCBwd3JjdHJsLCBjbHIpOworCisJCQltYXNrID0gQklUKDApfEJJVCg1KTsKKwkJCXB3cmN0cmwgPSBtYXNrICogYmJfZGVzaXJlZF9zY2FsZTsKKwkJCWNsciA9IG1hc2sgKiAweDFmOworCQkJUkVHX1JNVyhhaCwgQVJfUEhZX0NIMF9UWF9QV1JDVFJMMTEsIHB3cmN0cmwsIGNscik7CisJCQlSRUdfUk1XKGFoLCBBUl9QSFlfQ0gwX1RYX1BXUkNUUkwxMywgcHdyY3RybCwgY2xyKTsKKwkJfQorCX0KIH0KIAogc3RhdGljIHUxNiBhdGg5a19od180a19nZXRfc3B1cl9jaGFubmVsKHN0cnVjdCBhdGhfaHcgKmFoLCB1MTYgaSwgYm9vbCBpczJHSHopCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tXzkyODcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fOTI4Ny5jCmluZGV4IDhjZDgzMzMuLmI4N2RiNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fOTI4Ny5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fOTI4Ny5jCkBAIC0zMTksMTAgKzMxOSw5IEBACiAJdTE2IG51bVhwZEdhaW4sIHhwZE1hc2s7CiAJdTE2IHhwZEdhaW5WYWx1ZXNbQVI1NDE2X05VTV9QRF9HQUlOU10gPSB7MCwgMCwgMCwgMH07CiAJdTMyIHJlZzMyLCByZWdPZmZzZXQsIHJlZ0NoYWluT2Zmc2V0LCByZWd2YWw7Ci0JaW50MTZfdCBtb2RhbElkeCwgZGlmZiA9IDA7CisJaW50MTZfdCBkaWZmID0gMDsKIAlzdHJ1Y3QgYXI5Mjg3X2VlcHJvbSAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5tYXA5Mjg3OwogCi0JbW9kYWxJZHggPSBJU19DSEFOXzJHSFooY2hhbikgPyAxIDogMDsKIAl4cGRNYXNrID0gcEVlcERhdGEtPm1vZGFsSGVhZGVyLnhwZEdhaW47CiAKIAlpZiAoKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjkyODdfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQpAQCAtMzkyLDYgKzM5MSw4IEBACiAJCQkJCQkJICAgbnVtWHBkR2Fpbik7CiAJCQl9CiAKKwkJCUVOQUJMRV9SRUdXUklURV9CVUZGRVIoYWgpOworCiAJCQlpZiAoaSA9PSAwKSB7CiAJCQkJaWYgKCFhdGg5a19od19hcjkyODdfZ2V0X2VlcHJvbShhaCwKIAkJCQkJCQlFRVBfT0xfUFdSQ1RSTCkpIHsKQEAgLTQ0Miw2ICs0NDMsNyBAQAogCQkJCQlyZWdPZmZzZXQgKz0gNDsKIAkJCQl9CiAJCQl9CisJCQlSRUdXUklURV9CVUZGRVJfRkxVU0goYWgpOwogCQl9CiAJfQogCkBAIC03NTcsNiArNzU5LDggQEAKIAkJCXJhdGVzQXJyYXlbaV0gLT0gQVI5Mjg3X1BXUl9UQUJMRV9PRkZTRVRfREIgKiAyOwogCX0KIAorCUVOQUJMRV9SRUdXUklURV9CVUZGRVIoYWgpOworCiAJLyogT0ZETSBwb3dlciBwZXIgcmF0ZSAqLwogCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUxLAogCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxOG1iXSwgMjQpCkBAIC04NDAsNiArODQ0LDcgQEAKIAkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwT2ZkbV0sIDgpCiAJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUR1cENja10sIDApKTsKIAl9CisJUkVHV1JJVEVfQlVGRkVSX0ZMVVNIKGFoKTsKIH0KIAogc3RhdGljIHZvaWQgYXRoOWtfaHdfYXI5Mjg3X3NldF9hZGRhYyhzdHJ1Y3QgYXRoX2h3ICphaCwKQEAgLTg1MiwzNSArODU3LDEyIEBACiB7CiAJc3RydWN0IGFyOTI4N19lZXByb20gKmVlcCA9ICZhaC0+ZWVwcm9tLm1hcDkyODc7CiAJc3RydWN0IG1vZGFsX2VlcF9hcjkyODdfaGVhZGVyICpwTW9kYWwgPSAmZWVwLT5tb2RhbEhlYWRlcjsKLQl1MTYgYW50V3JpdGVzW0FSOTI4N19BTlRfMTZTXTsKIAl1MzIgcmVnQ2hhaW5PZmZzZXQsIHJlZ3ZhbDsKIAl1OCB0eFJ4QXR0ZW5Mb2NhbDsKLQlpbnQgaSwgaiwgb2Zmc2V0X251bTsKKwlpbnQgaTsKIAogCXBNb2RhbCA9ICZlZXAtPm1vZGFsSGVhZGVyOwogCi0JYW50V3JpdGVzWzBdID0gKHUxNikoKHBNb2RhbC0+YW50Q3RybENvbW1vbiA+PiAyOCkgJiAweEYpOwotCWFudFdyaXRlc1sxXSA9ICh1MTYpKChwTW9kYWwtPmFudEN0cmxDb21tb24gPj4gMjQpICYgMHhGKTsKLQlhbnRXcml0ZXNbMl0gPSAodTE2KSgocE1vZGFsLT5hbnRDdHJsQ29tbW9uID4+IDIwKSAmIDB4Rik7Ci0JYW50V3JpdGVzWzNdID0gKHUxNikoKHBNb2RhbC0+YW50Q3RybENvbW1vbiA+PiAxNikgJiAweEYpOwotCWFudFdyaXRlc1s0XSA9ICh1MTYpKChwTW9kYWwtPmFudEN0cmxDb21tb24gPj4gMTIpICYgMHhGKTsKLQlhbnRXcml0ZXNbNV0gPSAodTE2KSgocE1vZGFsLT5hbnRDdHJsQ29tbW9uID4+IDgpICYgMHhGKTsKLQlhbnRXcml0ZXNbNl0gPSAodTE2KSgocE1vZGFsLT5hbnRDdHJsQ29tbW9uID4+IDQpICAmIDB4Rik7Ci0JYW50V3JpdGVzWzddID0gKHUxNikocE1vZGFsLT5hbnRDdHJsQ29tbW9uICYgMHhGKTsKLQotCW9mZnNldF9udW0gPSA4OwotCi0JZm9yIChpID0gMCwgaiA9IG9mZnNldF9udW07IGkgPCBBUjkyODdfTUFYX0NIQUlOUzsgaSsrKSB7Ci0JCWFudFdyaXRlc1tqKytdID0gKHUxNikoKHBNb2RhbC0+YW50Q3RybENoYWluW2ldID4+IDI4KSAmIDB4Zik7Ci0JCWFudFdyaXRlc1tqKytdID0gKHUxNikoKHBNb2RhbC0+YW50Q3RybENoYWluW2ldID4+IDEwKSAmIDB4Myk7Ci0JCWFudFdyaXRlc1tqKytdID0gKHUxNikoKHBNb2RhbC0+YW50Q3RybENoYWluW2ldID4+IDgpICYgMHgzKTsKLQkJYW50V3JpdGVzW2orK10gPSAwOwotCQlhbnRXcml0ZXNbaisrXSA9ICh1MTYpKChwTW9kYWwtPmFudEN0cmxDaGFpbltpXSA+PiA2KSAmIDB4Myk7Ci0JCWFudFdyaXRlc1tqKytdID0gKHUxNikoKHBNb2RhbC0+YW50Q3RybENoYWluW2ldID4+IDQpICYgMHgzKTsKLQkJYW50V3JpdGVzW2orK10gPSAodTE2KSgocE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0gPj4gMikgJiAweDMpOwotCQlhbnRXcml0ZXNbaisrXSA9ICh1MTYpKHBNb2RhbC0+YW50Q3RybENoYWluW2ldICYgMHgzKTsKLQl9Ci0KIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9TV0lUQ0hfQ09NLCBwTW9kYWwtPmFudEN0cmxDb21tb24pOwogCiAJZm9yIChpID0gMDsgaSA8IEFSOTI4N19NQVhfQ0hBSU5TOyBpKyspCXsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fZGVmLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tX2RlZi5jCmluZGV4IGZjY2Q4N2QuLmMwMzE4NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fZGVmLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbV9kZWYuYwpAQCAtMjMxLDYgKzIzMSwxMCBAQAogCQkJCWludGVnZXIgPSBzd2FiMzIocE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0pOwogCQkJCXBNb2RhbC0+YW50Q3RybENoYWluW2ldID0gaW50ZWdlcjsKIAkJCX0KKwkJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJCQl3b3JkID0gc3dhYjE2KHBNb2RhbC0+eHBhQmlhc0x2bEZyZXFbaV0pOworCQkJCXBNb2RhbC0+eHBhQmlhc0x2bEZyZXFbaV0gPSB3b3JkOworCQkJfQogCiAJCQlmb3IgKGkgPSAwOyBpIDwgQVJfRUVQUk9NX01PREFMX1NQVVJTOyBpKyspIHsKIAkJCQl3b3JkID0gc3dhYjE2KHBNb2RhbC0+c3B1ckNoYW5zW2ldLnNwdXJDaGFuKTsKQEAgLTc5OSw2ICs4MDMsOCBAQAogCQkJCQkJCSAgIHB3cl90YWJsZV9vZmZzZXQsCiAJCQkJCQkJICAgJmRpZmYpOwogCisJCQlFTkFCTEVfUkVHV1JJVEVfQlVGRkVSKGFoKTsKKwogCQkJaWYgKChpID09IDApIHx8IEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkpIHsKIAkJCQlpZiAoT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIpIHsKIAkJCQkJUkVHX1dSSVRFKGFoLApAQCAtODQ3LDYgKzg1Myw3IEBACiAKIAkJCQlyZWdPZmZzZXQgKz0gNDsKIAkJCX0KKwkJCVJFR1dSSVRFX0JVRkZFUl9GTFVTSChhaCk7CiAJCX0KIAl9CiAKQEAgLTEyMDUsNiArMTIxMiw4IEBACiAJCX0KIAl9CiAKKwlFTkFCTEVfUkVHV1JJVEVfQlVGRkVSKGFoKTsKKwogCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUxLAogCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxOG1iXSwgMjQpCiAJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMTJtYl0sIDE2KQpAQCAtMTI5MSw2ICsxMzAwLDggQEAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9TVUIsCiAJCSAgQVRIOUtfUE9XX1NNKHBNb2RhbC0+cHdyRGVjcmVhc2VGb3IzQ2hhaW4sIDYpCiAJCSAgfCBBVEg5S19QT1dfU00ocE1vZGFsLT5wd3JEZWNyZWFzZUZvcjJDaGFpbiwgMCkpOworCisJUkVHV1JJVEVfQlVGRkVSX0ZMVVNIKGFoKTsKIH0KIAogc3RhdGljIHUxNiBhdGg5a19od19kZWZfZ2V0X3NwdXJfY2hhbm5lbChzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGksIGJvb2wgaXMyR0h6KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2dwaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ncGlvLmMKaW5kZXggMGZiOGY4YS4uMDM0OWIzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2dwaW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZ3Bpby5jCkBAIC00MSwxMiArNDEsMTYgQEAKIHsKIAlpbnQgcmV0OwogCi0JaWYgKEFSX1NSRVZfOTI4NyhzYy0+c2NfYWgpKQotCQlzYy0+c2NfYWgtPmxlZF9waW4gPSBBVEhfTEVEX1BJTl85Mjg3OwotCWVsc2UgaWYgKEFSX1NSRVZfOTQ4NShzYy0+c2NfYWgpKQotCQlzYy0+c2NfYWgtPmxlZF9waW4gPSBBVEhfTEVEX1BJTl85NDg1OwotCWVsc2UKLQkJc2MtPnNjX2FoLT5sZWRfcGluID0gQVRIX0xFRF9QSU5fREVGOworCWlmIChzYy0+c2NfYWgtPmxlZF9waW4gPCAwKSB7CisJCWlmIChBUl9TUkVWXzkyODcoc2MtPnNjX2FoKSkKKwkJCXNjLT5zY19haC0+bGVkX3BpbiA9IEFUSF9MRURfUElOXzkyODc7CisJCWVsc2UgaWYgKEFSX1NSRVZfOTQ4NShzYy0+c2NfYWgpKQorCQkJc2MtPnNjX2FoLT5sZWRfcGluID0gQVRIX0xFRF9QSU5fOTQ4NTsKKwkJZWxzZSBpZiAoQVJfU1JFVl85MzAwKHNjLT5zY19haCkpCisJCQlzYy0+c2NfYWgtPmxlZF9waW4gPSBBVEhfTEVEX1BJTl85MzAwOworCQllbHNlCisJCQlzYy0+c2NfYWgtPmxlZF9waW4gPSBBVEhfTEVEX1BJTl9ERUY7CisJfQogCiAJLyogQ29uZmlndXJlIGdwaW8gMSBmb3Igb3V0cHV0ICovCiAJYXRoOWtfaHdfY2ZnX291dHB1dChzYy0+c2NfYWgsIHNjLT5zY19haC0+bGVkX3BpbiwKQEAgLTEzNiwxMCArMTQwLDEwIEBACiAKIHN0YXRpYyB2b2lkIGF0aDlrX2dlbl90aW1lcl9zdGFydChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgIHN0cnVjdCBhdGhfZ2VuX3RpbWVyICp0aW1lciwKLQkJCQkgIHUzMiB0aW1lcl9uZXh0LAorCQkJCSAgdTMyIHRyaWdfdGltZW91dCwKIAkJCQkgIHUzMiB0aW1lcl9wZXJpb2QpCiB7Ci0JYXRoOWtfaHdfZ2VuX3RpbWVyX3N0YXJ0KGFoLCB0aW1lciwgdGltZXJfbmV4dCwgdGltZXJfcGVyaW9kKTsKKwlhdGg5a19od19nZW5fdGltZXJfc3RhcnQoYWgsIHRpbWVyLCB0cmlnX3RpbWVvdXQsIHRpbWVyX3BlcmlvZCk7CiAKIAlpZiAoKGFoLT5pbWFzayAmIEFUSDlLX0lOVF9HRU5USU1FUikgPT0gMCkgewogCQlhdGg5a19od19kaXNhYmxlX2ludGVycnVwdHMoYWgpOwpAQCAtMTcyLDE3ICsxNzYsMTcgQEAKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IChzdHJ1Y3QgYXRoX3NvZnRjICopIGRhdGE7CiAJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAJc3RydWN0IGF0aF9idGNvZXggKmJ0Y29leCA9ICZzYy0+YnRjb2V4OwotCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCXUzMiB0aW1lcl9wZXJpb2Q7CiAJYm9vbCBpc19idHNjYW47CiAKKwlhdGg5a19wc193YWtldXAoc2MpOwogCWF0aF9kZXRlY3RfYnRfcHJpb3JpdHkoc2MpOwogCiAJaXNfYnRzY2FuID0gc2MtPnNjX2ZsYWdzICYgU0NfT1BfQlRfU0NBTjsKIAogCXNwaW5fbG9ja19iaCgmYnRjb2V4LT5idGNvZXhfbG9jayk7CiAKLQlhdGg5a19jbW5fYnRjb2V4X2J0X3N0b21wKGNvbW1vbiwgaXNfYnRzY2FuID8gQVRIX0JUQ09FWF9TVE9NUF9BTEwgOgorCWF0aDlrX2h3X2J0Y29leF9idF9zdG9tcChhaCwgaXNfYnRzY2FuID8gQVRIX0JUQ09FWF9TVE9NUF9BTEwgOgogCQkJICAgICAgYnRjb2V4LT5idF9zdG9tcF90eXBlKTsKIAogCXNwaW5fdW5sb2NrX2JoKCZidGNvZXgtPmJ0Y29leF9sb2NrKTsKQEAgLTE5MywxMSArMTk3LDEyIEBACiAKIAkJdGltZXJfcGVyaW9kID0gaXNfYnRzY2FuID8gYnRjb2V4LT5idHNjYW5fbm9fc3RvbXAgOgogCQkJCQkgICBidGNvZXgtPmJ0Y29leF9ub19zdG9tcDsKLQkJYXRoOWtfZ2VuX3RpbWVyX3N0YXJ0KGFoLCBidGNvZXgtPm5vX3N0b21wX3RpbWVyLCAwLAorCQlhdGg5a19nZW5fdGltZXJfc3RhcnQoYWgsIGJ0Y29leC0+bm9fc3RvbXBfdGltZXIsIHRpbWVyX3BlcmlvZCwKIAkJCQkgICAgICB0aW1lcl9wZXJpb2QgKiAxMCk7CiAJCWJ0Y29leC0+aHdfdGltZXJfZW5hYmxlZCA9IHRydWU7CiAJfQogCisJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiAJbW9kX3RpbWVyKCZidGNvZXgtPnBlcmlvZF90aW1lciwgamlmZmllcyArCiAJCQkJICBtc2Vjc190b19qaWZmaWVzKEFUSF9CVENPRVhfREVGX0JUX1BFUklPRCkpOwogfQpAQCAtMjE3LDE0ICsyMjIsMTYgQEAKIAlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19CVENPRVgsCiAJCSJubyBzdG9tcCB0aW1lciBydW5uaW5nXG4iKTsKIAorCWF0aDlrX3BzX3dha2V1cChzYyk7CiAJc3Bpbl9sb2NrX2JoKCZidGNvZXgtPmJ0Y29leF9sb2NrKTsKIAogCWlmIChidGNvZXgtPmJ0X3N0b21wX3R5cGUgPT0gQVRIX0JUQ09FWF9TVE9NUF9MT1cgfHwgaXNfYnRzY2FuKQotCQlhdGg5a19jbW5fYnRjb2V4X2J0X3N0b21wKGNvbW1vbiwgQVRIX0JUQ09FWF9TVE9NUF9OT05FKTsKKwkJYXRoOWtfaHdfYnRjb2V4X2J0X3N0b21wKGFoLCBBVEhfQlRDT0VYX1NUT01QX05PTkUpOwogCSBlbHNlIGlmIChidGNvZXgtPmJ0X3N0b21wX3R5cGUgPT0gQVRIX0JUQ09FWF9TVE9NUF9BTEwpCi0JCWF0aDlrX2Ntbl9idGNvZXhfYnRfc3RvbXAoY29tbW9uLCBBVEhfQlRDT0VYX1NUT01QX0xPVyk7CisJCWF0aDlrX2h3X2J0Y29leF9idF9zdG9tcChhaCwgQVRIX0JUQ09FWF9TVE9NUF9MT1cpOwogCiAJc3Bpbl91bmxvY2tfYmgoJmJ0Y29leC0+YnRjb2V4X2xvY2spOworCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogfQogCiBpbnQgYXRoX2luaXRfYnRjb2V4X3RpbWVyKHN0cnVjdCBhdGhfc29mdGMgKnNjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMKaW5kZXggMmQxMDIzOS4uMmUzYTMzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jCkBAIC0xNywxMSArMTcsOSBAQAogI2luY2x1ZGUgImh0Yy5oIgogCiAvKiBpZGVudGlmeSBmaXJtd2FyZSBpbWFnZXMgKi8KLSNkZWZpbmUgRklSTVdBUkVfQVI3MDEwCQkiYXI3MDEwLmZ3IgotI2RlZmluZSBGSVJNV0FSRV9BUjcwMTBfMV8xCSJhcjcwMTBfMV8xLmZ3IgotI2RlZmluZSBGSVJNV0FSRV9BUjkyNzEJCSJhcjkyNzEuZnciCisjZGVmaW5lIEZJUk1XQVJFX0FSNzAxMF8xXzEgICAgICJodGNfNzAxMC5mdyIKKyNkZWZpbmUgRklSTVdBUkVfQVI5MjcxICAgICAgICAgImh0Y185MjcxLmZ3IgogCi1NT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfQVI3MDEwKTsKIE1PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV9BUjcwMTBfMV8xKTsKIE1PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV9BUjkyNzEpOwogCkBAIC04MCw3ICs3OCw3IEBACiAKIAlpZiAoY21kKSB7CiAJCWF0aDlrX2h0Y190eGNvbXBsZXRpb25fY2IoY21kLT5oaWZfZGV2LT5odGNfaGFuZGxlLAotCQkJCQkgIGNtZC0+c2tiLCAxKTsKKwkJCQkJICBjbWQtPnNrYiwgdHJ1ZSk7CiAJCWtmcmVlKGNtZCk7CiAJfQogCkBAIC0xMjYsNiArMTI0LDkwIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgaGlmX3VzYl9tZ210X2NiKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgY21kX2J1ZiAqY21kID0gKHN0cnVjdCBjbWRfYnVmICopdXJiLT5jb250ZXh0OworCXN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqaGlmX2RldiA9IGNtZC0+aGlmX2RldjsKKwlib29sIHR4b2sgPSB0cnVlOworCisJaWYgKCFjbWQgfHwgIWNtZC0+c2tiIHx8ICFjbWQtPmhpZl9kZXYpCisJCXJldHVybjsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0RFVjoKKwljYXNlIC1FU0hVVERPV046CisJCXR4b2sgPSBmYWxzZTsKKworCQkvKgorCQkgKiBJZiB0aGUgVVJCcyBhcmUgYmVpbmcgZmx1c2hlZCwgbm8gbmVlZCB0byBjb21wbGV0ZQorCQkgKiB0aGlzIHBhY2tldC4KKwkJICovCisJCXNwaW5fbG9jaygmaGlmX2Rldi0+dHgudHhfbG9jayk7CisJCWlmIChoaWZfZGV2LT50eC5mbGFncyAmIEhJRl9VU0JfVFhfRkxVU0gpIHsKKwkJCXNwaW5fdW5sb2NrKCZoaWZfZGV2LT50eC50eF9sb2NrKTsKKwkJCWRldl9rZnJlZV9za2JfYW55KGNtZC0+c2tiKTsKKwkJCWtmcmVlKGNtZCk7CisJCQlyZXR1cm47CisJCX0KKwkJc3Bpbl91bmxvY2soJmhpZl9kZXYtPnR4LnR4X2xvY2spOworCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXR4b2sgPSBmYWxzZTsKKwkJYnJlYWs7CisJfQorCisJc2tiX3B1bGwoY21kLT5za2IsIDQpOworCWF0aDlrX2h0Y190eGNvbXBsZXRpb25fY2IoY21kLT5oaWZfZGV2LT5odGNfaGFuZGxlLAorCQkJCSAgY21kLT5za2IsIHR4b2spOworCWtmcmVlKGNtZCk7Cit9CisKK3N0YXRpYyBpbnQgaGlmX3VzYl9zZW5kX21nbXQoc3RydWN0IGhpZl9kZXZpY2VfdXNiICpoaWZfZGV2LAorCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCB1cmIgKnVyYjsKKwlzdHJ1Y3QgY21kX2J1ZiAqY21kOworCWludCByZXQgPSAwOworCV9fbGUxNiAqaGRyOworCisJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKKwlpZiAodXJiID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9BVE9NSUMpOworCWlmIChjbWQgPT0gTlVMTCkgeworCQl1c2JfZnJlZV91cmIodXJiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJY21kLT5za2IgPSBza2I7CisJY21kLT5oaWZfZGV2ID0gaGlmX2RldjsKKworCWhkciA9IChfX2xlMTYgKikgc2tiX3B1c2goc2tiLCA0KTsKKwkqaGRyKysgPSBjcHVfdG9fbGUxNihza2ItPmxlbiAtIDQpOworCSpoZHIrKyA9IGNwdV90b19sZTE2KEFUSF9VU0JfVFhfU1RSRUFNX01PREVfVEFHKTsKKworCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgaGlmX2Rldi0+dWRldiwKKwkJCSB1c2Jfc25kYnVsa3BpcGUoaGlmX2Rldi0+dWRldiwgVVNCX1dMQU5fVFhfUElQRSksCisJCQkgc2tiLT5kYXRhLCBza2ItPmxlbiwKKwkJCSBoaWZfdXNiX21nbXRfY2IsIGNtZCk7CisKKwl1c2JfYW5jaG9yX3VyYih1cmIsICZoaWZfZGV2LT5tZ210X3N1Ym1pdHRlZCk7CisJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0KSB7CisJCXVzYl91bmFuY2hvcl91cmIodXJiKTsKKwkJa2ZyZWUoY21kKTsKKwl9CisJdXNiX2ZyZWVfdXJiKHVyYik7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfc2tiX3F1ZXVlX3B1cmdlKHN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqaGlmX2RldiwKIAkJCQkJIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpCiB7CkBAIC0xMzMsNyArMjE1LDIyIEBACiAKIAl3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUobGlzdCkpICE9IE5VTEwpIHsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJVFhfU1RBVF9JTkMoc2tiX2Ryb3BwZWQpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX3NrYl9xdWV1ZV9jb21wbGV0ZShzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYsCisJCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSwKKwkJCQkJICAgIGJvb2wgdHhvaykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJd2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKHF1ZXVlKSkgIT0gTlVMTCkgeworCQlhdGg5a19odGNfdHhjb21wbGV0aW9uX2NiKGhpZl9kZXYtPmh0Y19oYW5kbGUsCisJCQkJCSAgc2tiLCB0eG9rKTsKKwkJaWYgKHR4b2spCisJCQlUWF9TVEFUX0lOQyhza2Jfc3VjY2Vzcyk7CisJCWVsc2UKKwkJCVRYX1NUQVRfSU5DKHNrYl9mYWlsZWQpOwogCX0KIH0KIApAQCAtMTQxLDcgKzIzOCw3IEBACiB7CiAJc3RydWN0IHR4X2J1ZiAqdHhfYnVmID0gKHN0cnVjdCB0eF9idWYgKikgdXJiLT5jb250ZXh0OwogCXN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqaGlmX2RldjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWJvb2wgdHhvayA9IHRydWU7CiAKIAlpZiAoIXR4X2J1ZiB8fCAhdHhfYnVmLT5oaWZfZGV2KQogCQlyZXR1cm47CkBAIC0xNTUsMTAgKzI1Miw3IEBACiAJY2FzZSAtRUNPTk5SRVNFVDoKIAljYXNlIC1FTk9ERVY6CiAJY2FzZSAtRVNIVVRET1dOOgotCQkvKgotCQkgKiBUaGUgVVJCIGhhcyBiZWVuIGtpbGxlZCwgZnJlZSB0aGUgU0tCcy4KLQkJICovCi0JCWF0aDlrX3NrYl9xdWV1ZV9wdXJnZShoaWZfZGV2LCAmdHhfYnVmLT5za2JfcXVldWUpOworCQl0eG9rID0gZmFsc2U7CiAKIAkJLyoKIAkJICogSWYgdGhlIFVSQnMgYXJlIGJlaW5nIGZsdXNoZWQsIG5vIG5lZWQgdG8gYWRkIHRoaXMKQEAgLTE2Nyw0MSArMjYxLDE5IEBACiAJCXNwaW5fbG9jaygmaGlmX2Rldi0+dHgudHhfbG9jayk7CiAJCWlmIChoaWZfZGV2LT50eC5mbGFncyAmIEhJRl9VU0JfVFhfRkxVU0gpIHsKIAkJCXNwaW5fdW5sb2NrKCZoaWZfZGV2LT50eC50eF9sb2NrKTsKKwkJCWF0aDlrX3NrYl9xdWV1ZV9wdXJnZShoaWZfZGV2LCAmdHhfYnVmLT5za2JfcXVldWUpOwogCQkJcmV0dXJuOwogCQl9CiAJCXNwaW5fdW5sb2NrKCZoaWZfZGV2LT50eC50eF9sb2NrKTsKIAotCQkvKgotCQkgKiBJbiB0aGUgc3RvcCgpIGNhc2UsIHRoaXMgVVJCIGhhcyB0byBiZSBhZGRlZCB0bwotCQkgKiB0aGUgZnJlZSBsaXN0LgotCQkgKi8KLQkJZ290byBhZGRfZnJlZTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKKwkJdHhvayA9IGZhbHNlOwogCQlicmVhazsKIAl9CiAKLQkvKgotCSAqIENoZWNrIGlmIFRYIGhhcyBiZWVuIHN0b3BwZWQsIHRoaXMgaXMgbmVlZGVkIGJlY2F1c2UKLQkgKiB0aGlzIENCIGNvdWxkIGhhdmUgYmVlbiBpbnZva2VkIGp1c3QgYWZ0ZXIgdGhlIFRYIGxvY2sKLQkgKiB3YXMgcmVsZWFzZWQgaW4gaGlmX3N0b3AoKSBhbmQga2lsbF91cmIoKSBoYXNuJ3QgYmVlbgotCSAqIGNhbGxlZCB5ZXQuCi0JICovCi0Jc3Bpbl9sb2NrKCZoaWZfZGV2LT50eC50eF9sb2NrKTsKLQlpZiAoaGlmX2Rldi0+dHguZmxhZ3MgJiBISUZfVVNCX1RYX1NUT1ApIHsKLQkJc3Bpbl91bmxvY2soJmhpZl9kZXYtPnR4LnR4X2xvY2spOwotCQlhdGg5a19za2JfcXVldWVfcHVyZ2UoaGlmX2RldiwgJnR4X2J1Zi0+c2tiX3F1ZXVlKTsKLQkJZ290byBhZGRfZnJlZTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmhpZl9kZXYtPnR4LnR4X2xvY2spOworCWF0aDlrX3NrYl9xdWV1ZV9jb21wbGV0ZShoaWZfZGV2LCAmdHhfYnVmLT5za2JfcXVldWUsIHR4b2spOwogCi0JLyogQ29tcGxldGUgdGhlIHF1ZXVlZCBTS0JzLiAqLwotCXdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZSgmdHhfYnVmLT5za2JfcXVldWUpKSAhPSBOVUxMKSB7Ci0JCWF0aDlrX2h0Y190eGNvbXBsZXRpb25fY2IoaGlmX2Rldi0+aHRjX2hhbmRsZSwKLQkJCQkJICBza2IsIDEpOwotCQlUWF9TVEFUX0lOQyhza2JfY29tcGxldGVkKTsKLQl9Ci0KLWFkZF9mcmVlOgogCS8qIFJlLWluaXRpYWxpemUgdGhlIFNLQiBxdWV1ZSAqLwogCXR4X2J1Zi0+bGVuID0gdHhfYnVmLT5vZmZzZXQgPSAwOwogCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmdHhfYnVmLT5za2JfcXVldWUpOwpAQCAtMjc0LDcgKzM0Niw3IEBACiAJcmV0ID0gdXNiX3N1Ym1pdF91cmIodHhfYnVmLT51cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXQpIHsKIAkJdHhfYnVmLT5sZW4gPSB0eF9idWYtPm9mZnNldCA9IDA7Ci0JCWF0aDlrX3NrYl9xdWV1ZV9wdXJnZShoaWZfZGV2LCAmdHhfYnVmLT5za2JfcXVldWUpOworCQlhdGg5a19za2JfcXVldWVfY29tcGxldGUoaGlmX2RldiwgJnR4X2J1Zi0+c2tiX3F1ZXVlLCBmYWxzZSk7CiAJCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmdHhfYnVmLT5za2JfcXVldWUpOwogCQlsaXN0X21vdmVfdGFpbCgmdHhfYnVmLT5saXN0LCAmaGlmX2Rldi0+dHgudHhfYnVmKTsKIAkJaGlmX2Rldi0+dHgudHhfYnVmX2NudCsrOwpAQCAtMjg2LDEwICszNTgsMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGhpZl91c2Jfc2VuZF90eChzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICBzdHJ1Y3QgYXRoOWtfaHRjX3R4X2N0bCAqdHhfY3RsKQorc3RhdGljIGludCBoaWZfdXNiX3NlbmRfdHgoc3RydWN0IGhpZl9kZXZpY2VfdXNiICpoaWZfZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXN0cnVjdCBhdGg5a19odGNfdHhfY3RsICp0eF9jdGw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZoaWZfZGV2LT50eC50eF9sb2NrLCBmbGFncyk7CiAKQEAgLTMwNCwyNiArMzc3LDM2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCV9fc2tiX3F1ZXVlX3RhaWwoJmhpZl9kZXYtPnR4LnR4X3NrYl9xdWV1ZSwgc2tiKTsKLQloaWZfZGV2LT50eC50eF9za2JfY250Kys7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGlmX2Rldi0+dHgudHhfbG9jaywgZmxhZ3MpOwogCi0JLyogU2VuZCBub3JtYWwgZnJhbWVzIGltbWVkaWF0ZWx5ICovCi0JaWYgKCF0eF9jdGwgfHwgKHR4X2N0bCAmJiAodHhfY3RsLT50eXBlID09IEFUSDlLX0hUQ19OT1JNQUwpKSkKLQkJX19oaWZfdXNiX3R4KGhpZl9kZXYpOworCXR4X2N0bCA9IEhUQ19TS0JfQ0Ioc2tiKTsKKworCS8qIE1nbXQvQmVhY29uIGZyYW1lcyBkb24ndCB1c2UgdGhlIFRYIGJ1ZmZlciBwb29sICovCisJaWYgKCh0eF9jdGwtPnR5cGUgPT0gQVRIOUtfSFRDX01HTVQpIHx8CisJICAgICh0eF9jdGwtPnR5cGUgPT0gQVRIOUtfSFRDX0JFQUNPTikpIHsKKwkJcmV0ID0gaGlmX3VzYl9zZW5kX21nbXQoaGlmX2Rldiwgc2tiKTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaGlmX2Rldi0+dHgudHhfbG9jaywgZmxhZ3MpOworCisJaWYgKCh0eF9jdGwtPnR5cGUgPT0gQVRIOUtfSFRDX05PUk1BTCkgfHwKKwkgICAgKHR4X2N0bC0+dHlwZSA9PSBBVEg5S19IVENfQU1QRFUpKSB7CisJCV9fc2tiX3F1ZXVlX3RhaWwoJmhpZl9kZXYtPnR4LnR4X3NrYl9xdWV1ZSwgc2tiKTsKKwkJaGlmX2Rldi0+dHgudHhfc2tiX2NudCsrOworCX0KIAogCS8qIENoZWNrIGlmIEFNUERVcyBoYXZlIHRvIGJlIHNlbnQgaW1tZWRpYXRlbHkgKi8KLQlpZiAodHhfY3RsICYmICh0eF9jdGwtPnR5cGUgPT0gQVRIOUtfSFRDX0FNUERVKSAmJgotCSAgICAoaGlmX2Rldi0+dHgudHhfYnVmX2NudCA9PSBNQVhfVFhfVVJCX05VTSkgJiYKKwlpZiAoKGhpZl9kZXYtPnR4LnR4X2J1Zl9jbnQgPT0gTUFYX1RYX1VSQl9OVU0pICYmCiAJICAgIChoaWZfZGV2LT50eC50eF9za2JfY250IDwgMikpIHsKIAkJX19oaWZfdXNiX3R4KGhpZl9kZXYpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhpZl9kZXYtPnR4LnR4X2xvY2ssIGZsYWdzKTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGhpZl91c2Jfc3RhcnQodm9pZCAqaGlmX2hhbmRsZSwgdTggcGlwZV9pZCkKK3N0YXRpYyB2b2lkIGhpZl91c2Jfc3RhcnQodm9pZCAqaGlmX2hhbmRsZSkKIHsKIAlzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYgPSAoc3RydWN0IGhpZl9kZXZpY2VfdXNiICopaGlmX2hhbmRsZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMzM1LDE0ICs0MTgsMTQgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoaWZfZGV2LT50eC50eF9sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIGhpZl91c2Jfc3RvcCh2b2lkICpoaWZfaGFuZGxlLCB1OCBwaXBlX2lkKQorc3RhdGljIHZvaWQgaGlmX3VzYl9zdG9wKHZvaWQgKmhpZl9oYW5kbGUpCiB7CiAJc3RydWN0IGhpZl9kZXZpY2VfdXNiICpoaWZfZGV2ID0gKHN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqKWhpZl9oYW5kbGU7CiAJc3RydWN0IHR4X2J1ZiAqdHhfYnVmID0gTlVMTCwgKnR4X2J1Zl90bXAgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaGlmX2Rldi0+dHgudHhfbG9jaywgZmxhZ3MpOwotCWF0aDlrX3NrYl9xdWV1ZV9wdXJnZShoaWZfZGV2LCAmaGlmX2Rldi0+dHgudHhfc2tiX3F1ZXVlKTsKKwlhdGg5a19za2JfcXVldWVfY29tcGxldGUoaGlmX2RldiwgJmhpZl9kZXYtPnR4LnR4X3NrYl9xdWV1ZSwgZmFsc2UpOwogCWhpZl9kZXYtPnR4LnR4X3NrYl9jbnQgPSAwOwogCWhpZl9kZXYtPnR4LmZsYWdzIHw9IEhJRl9VU0JfVFhfU1RPUDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoaWZfZGV2LT50eC50eF9sb2NrLCBmbGFncyk7CkBAIC0zNTIsMTcgKzQzNSwxOCBAQAogCQkJCSAmaGlmX2Rldi0+dHgudHhfcGVuZGluZywgbGlzdCkgewogCQl1c2Jfa2lsbF91cmIodHhfYnVmLT51cmIpOwogCX0KKworCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmhpZl9kZXYtPm1nbXRfc3VibWl0dGVkKTsKIH0KIAotc3RhdGljIGludCBoaWZfdXNiX3NlbmQodm9pZCAqaGlmX2hhbmRsZSwgdTggcGlwZV9pZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCXN0cnVjdCBhdGg5a19odGNfdHhfY3RsICp0eF9jdGwpCitzdGF0aWMgaW50IGhpZl91c2Jfc2VuZCh2b2lkICpoaWZfaGFuZGxlLCB1OCBwaXBlX2lkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqaGlmX2RldiA9IChzdHJ1Y3QgaGlmX2RldmljZV91c2IgKiloaWZfaGFuZGxlOwogCWludCByZXQgPSAwOwogCiAJc3dpdGNoIChwaXBlX2lkKSB7CiAJY2FzZSBVU0JfV0xBTl9UWF9QSVBFOgotCQlyZXQgPSBoaWZfdXNiX3NlbmRfdHgoaGlmX2Rldiwgc2tiLCB0eF9jdGwpOworCQlyZXQgPSBoaWZfdXNiX3NlbmRfdHgoaGlmX2Rldiwgc2tiKTsKIAkJYnJlYWs7CiAJY2FzZSBVU0JfUkVHX09VVF9QSVBFOgogCQlyZXQgPSBoaWZfdXNiX3NlbmRfcmVnb3V0KGhpZl9kZXYsIHNrYik7CkBAIC0zNzcsNiArNDYxLDQwIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGNoZWNrX2luZGV4KHN0cnVjdCBza19idWZmICpza2IsIHU4IGlkeCkKK3sKKwlzdHJ1Y3QgYXRoOWtfaHRjX3R4X2N0bCAqdHhfY3RsOworCisJdHhfY3RsID0gSFRDX1NLQl9DQihza2IpOworCisJaWYgKCh0eF9jdGwtPnR5cGUgPT0gQVRIOUtfSFRDX0FNUERVKSAmJgorCSAgICAodHhfY3RsLT5zdGFfaWR4ID09IGlkeCkpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBoaWZfdXNiX3N0YV9kcmFpbih2b2lkICpoaWZfaGFuZGxlLCB1OCBpZHgpCit7CisJc3RydWN0IGhpZl9kZXZpY2VfdXNiICpoaWZfZGV2ID0gKHN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqKWhpZl9oYW5kbGU7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKnRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhpZl9kZXYtPnR4LnR4X2xvY2ssIGZsYWdzKTsKKworCXNrYl9xdWV1ZV93YWxrX3NhZmUoJmhpZl9kZXYtPnR4LnR4X3NrYl9xdWV1ZSwgc2tiLCB0bXApIHsKKwkJaWYgKGNoZWNrX2luZGV4KHNrYiwgaWR4KSkgeworCQkJX19za2JfdW5saW5rKHNrYiwgJmhpZl9kZXYtPnR4LnR4X3NrYl9xdWV1ZSk7CisJCQlhdGg5a19odGNfdHhjb21wbGV0aW9uX2NiKGhpZl9kZXYtPmh0Y19oYW5kbGUsCisJCQkJCQkgIHNrYiwgZmFsc2UpOworCQkJaGlmX2Rldi0+dHgudHhfc2tiX2NudC0tOworCQkJVFhfU1RBVF9JTkMoc2tiX2ZhaWxlZCk7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoaWZfZGV2LT50eC50eF9sb2NrLCBmbGFncyk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgYXRoOWtfaHRjX2hpZiBoaWZfdXNiID0gewogCS50cmFuc3BvcnQgPSBBVEg5S19ISUZfVVNCLAogCS5uYW1lID0gImF0aDlrX2hpZl91c2IiLApAQCAtMzg2LDYgKzUwNCw3IEBACiAKIAkuc3RhcnQgPSBoaWZfdXNiX3N0YXJ0LAogCS5zdG9wID0gaGlmX3VzYl9zdG9wLAorCS5zdGFfZHJhaW4gPSBoaWZfdXNiX3N0YV9kcmFpbiwKIAkuc2VuZCA9IGhpZl91c2Jfc2VuZCwKIH07CiAKQEAgLTU2Nyw2ICs2ODYsOSBAQAogCWNhc2UgLUVTSFVURE9XTjoKIAkJZ290byBmcmVlOwogCWRlZmF1bHQ6CisJCXNrYl9yZXNldF90YWlsX3BvaW50ZXIoc2tiKTsKKwkJc2tiX3RyaW0oc2tiLCAwKTsKKwogCQlnb3RvIHJlc3VibWl0OwogCX0KIApAQCAtNTkxLDIzICs3MTMsMTUgQEAKIAkJCQkJCSBVU0JfUkVHX0lOX1BJUEUpLAogCQkJCSBuc2tiLT5kYXRhLCBNQVhfUkVHX0lOX0JVRl9TSVpFLAogCQkJCSBhdGg5a19oaWZfdXNiX3JlZ19pbl9jYiwgbnNrYik7Ci0KLQkJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLQkJaWYgKHJldCkgewotCQkJa2ZyZWVfc2tiKG5za2IpOwotCQkJdXJiLT5jb250ZXh0ID0gTlVMTDsKLQkJfQotCi0JCXJldHVybjsKIAl9CiAKIHJlc3VibWl0OgotCXNrYl9yZXNldF90YWlsX3BvaW50ZXIoc2tiKTsKLQlza2JfdHJpbShza2IsIDApOwotCisJdXNiX2FuY2hvcl91cmIodXJiLCAmaGlmX2Rldi0+cmVnX2luX3N1Ym1pdHRlZCk7CiAJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLQlpZiAocmV0KQorCWlmIChyZXQpIHsKKwkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOwogCQlnb3RvIGZyZWU7CisJfQogCiAJcmV0dXJuOwogZnJlZToKQEAgLTY0MSw2ICs3NTUsOCBAQAogCQlrZnJlZSh0eF9idWYtPmJ1Zik7CiAJCWtmcmVlKHR4X2J1Zik7CiAJfQorCisJdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmaGlmX2Rldi0+bWdtdF9zdWJtaXR0ZWQpOwogfQogCiBzdGF0aWMgaW50IGF0aDlrX2hpZl91c2JfYWxsb2NfdHhfdXJicyhzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYpCkBAIC02NTIsNiArNzY4LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmaGlmX2Rldi0+dHgudHhfcGVuZGluZyk7CiAJc3Bpbl9sb2NrX2luaXQoJmhpZl9kZXYtPnR4LnR4X2xvY2spOwogCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmaGlmX2Rldi0+dHgudHhfc2tiX3F1ZXVlKTsKKwlpbml0X3VzYl9hbmNob3IoJmhpZl9kZXYtPm1nbXRfc3VibWl0dGVkKTsKIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfVFhfVVJCX05VTTsgaSsrKSB7CiAJCXR4X2J1ZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0eF9idWYpLCBHRlBfS0VSTkVMKTsKQEAgLTc0OCw0MyArODY1LDY3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaGlmX3VzYl9kZWFsbG9jX3JlZ19pbl91cmIoc3RydWN0IGhpZl9kZXZpY2VfdXNiICpoaWZfZGV2KQorc3RhdGljIHZvaWQgYXRoOWtfaGlmX3VzYl9kZWFsbG9jX3JlZ19pbl91cmJzKHN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqaGlmX2RldikKIHsKLQlpZiAoaGlmX2Rldi0+cmVnX2luX3VyYikgewotCQl1c2Jfa2lsbF91cmIoaGlmX2Rldi0+cmVnX2luX3VyYik7Ci0JCWlmIChoaWZfZGV2LT5yZWdfaW5fdXJiLT5jb250ZXh0KQotCQkJa2ZyZWVfc2tiKCh2b2lkICopaGlmX2Rldi0+cmVnX2luX3VyYi0+Y29udGV4dCk7Ci0JCXVzYl9mcmVlX3VyYihoaWZfZGV2LT5yZWdfaW5fdXJiKTsKLQkJaGlmX2Rldi0+cmVnX2luX3VyYiA9IE5VTEw7Ci0JfQorCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmhpZl9kZXYtPnJlZ19pbl9zdWJtaXR0ZWQpOwogfQogCi1zdGF0aWMgaW50IGF0aDlrX2hpZl91c2JfYWxsb2NfcmVnX2luX3VyYihzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYpCitzdGF0aWMgaW50IGF0aDlrX2hpZl91c2JfYWxsb2NfcmVnX2luX3VyYnMoc3RydWN0IGhpZl9kZXZpY2VfdXNiICpoaWZfZGV2KQogewotCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHVyYiAqdXJiID0gTlVMTDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwlpbnQgaSwgcmV0OwogCi0JaGlmX2Rldi0+cmVnX2luX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGhpZl9kZXYtPnJlZ19pbl91cmIgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJaW5pdF91c2JfYW5jaG9yKCZoaWZfZGV2LT5yZWdfaW5fc3VibWl0dGVkKTsKIAotCXNrYiA9IGFsbG9jX3NrYihNQVhfUkVHX0lOX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNrYikKLQkJZ290byBlcnI7CisJZm9yIChpID0gMDsgaSA8IE1BWF9SRUdfSU5fVVJCX05VTTsgaSsrKSB7CiAKLQl1c2JfZmlsbF9idWxrX3VyYihoaWZfZGV2LT5yZWdfaW5fdXJiLCBoaWZfZGV2LT51ZGV2LAotCQkJIHVzYl9yY3ZidWxrcGlwZShoaWZfZGV2LT51ZGV2LAotCQkJCQkgVVNCX1JFR19JTl9QSVBFKSwKLQkJCSBza2ItPmRhdGEsIE1BWF9SRUdfSU5fQlVGX1NJWkUsCi0JCQkgYXRoOWtfaGlmX3VzYl9yZWdfaW5fY2IsIHNrYik7CisJCS8qIEFsbG9jYXRlIFVSQiAqLworCQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQlpZiAodXJiID09IE5VTEwpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGVycl91cmI7CisJCX0KIAotCWlmICh1c2Jfc3VibWl0X3VyYihoaWZfZGV2LT5yZWdfaW5fdXJiLCBHRlBfS0VSTkVMKSAhPSAwKQotCQlnb3RvIGVycjsKKwkJLyogQWxsb2NhdGUgYnVmZmVyICovCisJCXNrYiA9IGFsbG9jX3NrYihNQVhfUkVHX0lOX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFza2IpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9za2I7CisJCX0KKworCQl1c2JfZmlsbF9idWxrX3VyYih1cmIsIGhpZl9kZXYtPnVkZXYsCisJCQkJICB1c2JfcmN2YnVsa3BpcGUoaGlmX2Rldi0+dWRldiwKKwkJCQkJCSAgVVNCX1JFR19JTl9QSVBFKSwKKwkJCQkgIHNrYi0+ZGF0YSwgTUFYX1JFR19JTl9CVUZfU0laRSwKKwkJCQkgIGF0aDlrX2hpZl91c2JfcmVnX2luX2NiLCBza2IpOworCisJCS8qIEFuY2hvciBVUkIgKi8KKwkJdXNiX2FuY2hvcl91cmIodXJiLCAmaGlmX2Rldi0+cmVnX2luX3N1Ym1pdHRlZCk7CisKKwkJLyogU3VibWl0IFVSQiAqLworCQlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOworCQlpZiAocmV0KSB7CisJCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7CisJCQlnb3RvIGVycl9zdWJtaXQ7CisJCX0KKworCQkvKgorCQkgKiBEcm9wIHJlZmVyZW5jZSBjb3VudC4KKwkJICogVGhpcyBlbnN1cmVzIHRoYXQgdGhlIFVSQiBpcyBmcmVlZCB3aGVuIGtpbGxpbmcgdGhlbS4KKwkJICovCisJCXVzYl9mcmVlX3VyYih1cmIpOworCX0KIAogCXJldHVybiAwOwogCi1lcnI6Ci0JYXRoOWtfaGlmX3VzYl9kZWFsbG9jX3JlZ19pbl91cmIoaGlmX2Rldik7Ci0JcmV0dXJuIC1FTk9NRU07CitlcnJfc3VibWl0OgorCWtmcmVlX3NrYihza2IpOworZXJyX3NrYjoKKwl1c2JfZnJlZV91cmIodXJiKTsKK2Vycl91cmI6CisJYXRoOWtfaGlmX3VzYl9kZWFsbG9jX3JlZ19pbl91cmJzKGhpZl9kZXYpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgYXRoOWtfaGlmX3VzYl9hbGxvY191cmJzKHN0cnVjdCBoaWZfZGV2aWNlX3VzYiAqaGlmX2RldikKQEAgLTgwMSw3ICs5NDIsNyBAQAogCQlnb3RvIGVycl9yeDsKIAogCS8qIFJlZ2lzdGVyIFJlYWQgKi8KLQlpZiAoYXRoOWtfaGlmX3VzYl9hbGxvY19yZWdfaW5fdXJiKGhpZl9kZXYpIDwgMCkKKwlpZiAoYXRoOWtfaGlmX3VzYl9hbGxvY19yZWdfaW5fdXJicyhoaWZfZGV2KSA8IDApCiAJCWdvdG8gZXJyX3JlZzsKIAogCXJldHVybiAwOwpAQCAtODE2LDcgKzk1Nyw3IEBACiBzdGF0aWMgdm9pZCBhdGg5a19oaWZfdXNiX2RlYWxsb2NfdXJicyhzdHJ1Y3QgaGlmX2RldmljZV91c2IgKmhpZl9kZXYpCiB7CiAJdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmaGlmX2Rldi0+cmVnb3V0X3N1Ym1pdHRlZCk7Ci0JYXRoOWtfaGlmX3VzYl9kZWFsbG9jX3JlZ19pbl91cmIoaGlmX2Rldik7CisJYXRoOWtfaGlmX3VzYl9kZWFsbG9jX3JlZ19pbl91cmJzKGhpZl9kZXYpOwogCWF0aDlrX2hpZl91c2JfZGVhbGxvY190eF91cmJzKGhpZl9kZXYpOwogCWF0aDlrX2hpZl91c2JfZGVhbGxvY19yeF91cmJzKGhpZl9kZXYpOwogfQpAQCAtMTAyNiwxMCArMTE2Nyw3IEBACiAJLyogRmluZCBvdXQgd2hpY2ggZmlybXdhcmUgdG8gbG9hZCAqLwogCiAJaWYgKElTX0FSNzAxMF9ERVZJQ0UoaWQtPmRyaXZlcl9pbmZvKSkKLQkJaWYgKGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSA9PSAweDAyMDIpCi0JCQloaWZfZGV2LT5md19uYW1lID0gRklSTVdBUkVfQVI3MDEwXzFfMTsKLQkJZWxzZQotCQkJaGlmX2Rldi0+ZndfbmFtZSA9IEZJUk1XQVJFX0FSNzAxMDsKKwkJaGlmX2Rldi0+ZndfbmFtZSA9IEZJUk1XQVJFX0FSNzAxMF8xXzE7CiAJZWxzZQogCQloaWZfZGV2LT5md19uYW1lID0gRklSTVdBUkVfQVI5MjcxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuaAppbmRleCA3YjlkODYzLi4yYmRjZGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmgKQEAgLTE3LDYgKzE3LDkgQEAKICNpZm5kZWYgSFRDX1VTQl9ICiAjZGVmaW5lIEhUQ19VU0JfSAogCisjZGVmaW5lIE1BSk9SX1ZFUlNJT05fUkVRIDEKKyNkZWZpbmUgTUlOT1JfVkVSU0lPTl9SRVEgMgorCiAjZGVmaW5lIElTX0FSNzAxMF9ERVZJQ0UoX3YpICgoKF92KSA9PSBBUjkyODBfVVNCKSB8fCAoKF92KSA9PSBBUjkyODdfVVNCKSkKIAogI2RlZmluZSBBUjkyNzFfRklSTVdBUkUgICAgICAgMHg1MDEwMDAKQEAgLTMxLDcgKzM0LDcgQEAKIAogLyogRklYTUU6IFZlcmlmeSB0aGVzZSBudW1iZXJzICh3aXRoIFdpbmRvd3MpICovCiAjZGVmaW5lIE1BWF9UWF9VUkJfTlVNICA4Ci0jZGVmaW5lIE1BWF9UWF9CVUZfTlVNICAxMDI0CisjZGVmaW5lIE1BWF9UWF9CVUZfTlVNICAyNTYKICNkZWZpbmUgTUFYX1RYX0JVRl9TSVpFIDMyNzY4CiAjZGVmaW5lIE1BWF9UWF9BR0dSX05VTSAyMAogCkBAIC00MCw3ICs0Myw3IEBACiAjZGVmaW5lIE1BWF9QS1RfTlVNX0lOX1RSQU5TRkVSIDEwCiAKICNkZWZpbmUgTUFYX1JFR19PVVRfVVJCX05VTSAgMQotI2RlZmluZSBNQVhfUkVHX09VVF9CVUZfTlVNICA4CisjZGVmaW5lIE1BWF9SRUdfSU5fVVJCX05VTSAgIDY0CiAKICNkZWZpbmUgTUFYX1JFR19JTl9CVUZfU0laRSA2NAogCkBAIC05MCw5ICs5MywxMCBAQAogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmU7CiAJc3RydWN0IGh0Y190YXJnZXQgKmh0Y19oYW5kbGU7CiAJc3RydWN0IGhpZl91c2JfdHggdHg7Ci0Jc3RydWN0IHVyYiAqcmVnX2luX3VyYjsKIAlzdHJ1Y3QgdXNiX2FuY2hvciByZWdvdXRfc3VibWl0dGVkOwogCXN0cnVjdCB1c2JfYW5jaG9yIHJ4X3N1Ym1pdHRlZDsKKwlzdHJ1Y3QgdXNiX2FuY2hvciByZWdfaW5fc3VibWl0dGVkOworCXN0cnVjdCB1c2JfYW5jaG9yIG1nbXRfc3VibWl0dGVkOwogCXN0cnVjdCBza19idWZmICpyZW1haW5fc2tiOwogCWNvbnN0IGNoYXIgKmZ3X25hbWU7CiAJaW50IHJ4X3JlbWFpbl9sZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgKaW5kZXggNzUzYTI0NS4uZGZjN2E5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaApAQCAtNjYsMTMgKzY2LDEzIEBACiAJSFRDX01fV0RTCT0gMgogfTsKIAotI2RlZmluZSBBVEg5S19IVENfSERSU1BBQ0Ugc2l6ZW9mKHN0cnVjdCBodGNfZnJhbWVfaGRyKQotI2RlZmluZSBBVEg5S19IVENfQU1QRFUJMQorI2RlZmluZSBBVEg5S19IVENfQU1QRFUgIDEKICNkZWZpbmUgQVRIOUtfSFRDX05PUk1BTCAyCisjZGVmaW5lIEFUSDlLX0hUQ19CRUFDT04gMworI2RlZmluZSBBVEg5S19IVENfTUdNVCAgIDQKIAogI2RlZmluZSBBVEg5S19IVENfVFhfQ1RTT05MWSAgICAgIDB4MQogI2RlZmluZSBBVEg5S19IVENfVFhfUlRTQ1RTICAgICAgIDB4MgotI2RlZmluZSBBVEg5S19IVENfVFhfVVNFX01JTl9SQVRFIDB4MTAwCiAKIHN0cnVjdCB0eF9mcmFtZV9oZHIgewogCXU4IGRhdGFfdHlwZTsKQEAgLTgyLDcgKzgyLDggQEAKIAlfX2JlMzIgZmxhZ3M7IC8qIEFUSDlLX0hUQ19UWF8qICovCiAJdTgga2V5X3R5cGU7CiAJdTgga2V5aXg7Ci0JdTggcmVzZXJ2ZWRbMjZdOworCXU4IGNvb2tpZTsKKwl1OCBwYWQ7CiB9IF9fcGFja2VkOwogCiBzdHJ1Y3QgdHhfbWdtdF9oZHIgewpAQCAtOTIsNTAgKzkzLDM0IEBACiAJdTggZmxhZ3M7CiAJdTgga2V5X3R5cGU7CiAJdTgga2V5aXg7Ci0JdTE2IHJlc2VydmVkOworCXU4IGNvb2tpZTsKKwl1OCBwYWQ7CiB9IF9fcGFja2VkOwogCiBzdHJ1Y3QgdHhfYmVhY29uX2hlYWRlciB7Ci0JdTggbGVuX2NoYW5nZWQ7CiAJdTggdmlmX2luZGV4OworCXU4IGxlbl9jaGFuZ2VkOwogCXUxNiByZXY7CiB9IF9fcGFja2VkOwogCi1zdHJ1Y3QgYXRoOWtfaHRjX3RhcmdldF9odyB7Ci0JdTMyIGZsYWdzOwotCXUzMiBmbGFnc19leHQ7Ci0JdTMyIGFtcGR1X2xpbWl0OwotCXU4IGFtcGR1X3N1YmZyYW1lczsKLQl1OCB0eF9jaGFpbm1hc2s7Ci0JdTggdHhfY2hhaW5tYXNrX2xlZ2FjeTsKLQl1OCBydHNjdHNfcmF0ZWNvZGU7Ci0JdTggcHJvdG1vZGU7Ci19IF9fcGFja2VkOworI2RlZmluZSBNQVhfVFhfQU1QRFVfU1VCRlJBTUVTXzkyNzEgMTcKKyNkZWZpbmUgTUFYX1RYX0FNUERVX1NVQkZSQU1FU183MDEwIDIyCiAKIHN0cnVjdCBhdGg5a19odGNfY2FwX3RhcmdldCB7Ci0JdTMyIGZsYWdzOwotCXUzMiBmbGFnc19leHQ7Ci0JdTMyIGFtcGR1X2xpbWl0OworCV9fYmUzMiBhbXBkdV9saW1pdDsKIAl1OCBhbXBkdV9zdWJmcmFtZXM7CisJdTggZW5hYmxlX2NvZXg7CiAJdTggdHhfY2hhaW5tYXNrOwotCXU4IHR4X2NoYWlubWFza19sZWdhY3k7Ci0JdTggcnRzY3RzX3JhdGVjb2RlOwotCXU4IHByb3Rtb2RlOworCXU4IHBhZDsKIH0gX19wYWNrZWQ7CiAKIHN0cnVjdCBhdGg5a19odGNfdGFyZ2V0X3ZpZiB7CiAJdTggaW5kZXg7Ci0JdTggZGVzX2Jzc2lkW0VUSF9BTEVOXTsKLQlfX2JlMzIgb3Btb2RlOworCXU4IG9wbW9kZTsKIAl1OCBteWFkZHJbRVRIX0FMRU5dOwotCXU4IGJzc2lkW0VUSF9BTEVOXTsKLQl1MzIgZmxhZ3M7Ci0JdTMyIGZsYWdzX2V4dDsKLQl1MTYgcHNfc3RhOwotCV9fYmUxNiBydHN0aHJlc2hvbGQ7CiAJdTggYXRoX2NhcDsKLQl1OCBub2RlOwotCXM4IG1jYXN0X3JhdGU7CisJX19iZTE2IHJ0c3RocmVzaG9sZDsKKwl1OCBwYWQ7CiB9IF9fcGFja2VkOwogCiAjZGVmaW5lIEFUSF9IVENfU1RBX0FVVEggIDB4MDAwMQpAQCAtMTQzLDI3ICsxMjgsMTYgQEAKICNkZWZpbmUgQVRIX0hUQ19TVEFfRVJQICAgMHgwMDA0CiAjZGVmaW5lIEFUSF9IVENfU1RBX0hUICAgIDB4MDAwOAogCi0vKiBGSVhNRTogVUFQU0QgdmFyaWFibGVzICovCiBzdHJ1Y3QgYXRoOWtfaHRjX3RhcmdldF9zdGEgewotCXUxNiBhc3NvY2lkOwotCXUxNiB0eHBvd2VyOwotCXUzMiB1Y2FzdGtleTsKIAl1OCBtYWNhZGRyW0VUSF9BTEVOXTsKIAl1OCBic3NpZFtFVEhfQUxFTl07CiAJdTggc3RhX2luZGV4OwogCXU4IHZpZl9pbmRleDsKLQl1OCB2aWZfc3RhOwotCV9fYmUxNiBmbGFnczsgLyogQVRIX0hUQ19TVEFfKiAqLwotCXUxNiBodGNhcDsKLQl1OCB2YWxpZDsKLQl1MTYgY2FwaW5mbzsKLQlzdHJ1Y3QgYXRoOWtfaHRjX3RhcmdldF9odyAqaHc7Ci0Jc3RydWN0IGF0aDlrX2h0Y190YXJnZXRfdmlmICp2aWY7Ci0JdTE2IHR4c2VxbWdtdDsKIAl1OCBpc192aWZfc3RhOwotCXUxNiBtYXhhbXBkdTsKLQl1MTYgaXYxNjsKLQl1MzIgaXYzMjsKKwlfX2JlMTYgZmxhZ3M7IC8qIEFUSF9IVENfU1RBXyogKi8KKwlfX2JlMTYgaHRjYXA7CisJX19iZTE2IG1heGFtcGR1OworCXU4IHBhZDsKIH0gX19wYWNrZWQ7CiAKIHN0cnVjdCBhdGg5a19odGNfdGFyZ2V0X2FnZ3IgewpAQCAtMTk3LDEyICsxNzEsMzggQEAKIAlzdHJ1Y3QgYXRoOWtfaHRjX3JhdGUgcmF0ZXM7CiB9OwogCi1zdHJ1Y3QgYXRoOWtfaHRjX3RhcmdldF9zdGF0cyB7Ci0JX19iZTMyIHR4X3Nob3J0cmV0cnk7Ci0JX19iZTMyIHR4X2xvbmdyZXRyeTsKLQlfX2JlMzIgdHhfeHJldHJpZXM7Ci0JX19iZTMyIGh0X3R4dW5hZ2dyX3hyZXRyeTsKLQlfX2JlMzIgaHRfdHhfeHJldHJpZXM7CitzdHJ1Y3QgYXRoOWtfaHRjX3RhcmdldF9yYXRlX21hc2sgeworCXU4IHZpZl9pbmRleDsKKwl1OCBiYW5kOworCV9fYmUzMiBtYXNrOworCXUxNiBwYWQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYXRoOWtfaHRjX3RhcmdldF9pbnRfc3RhdHMgeworCV9fYmUzMiByeDsKKwlfX2JlMzIgcnhvcm47CisJX19iZTMyIHJ4ZW9sOworCV9fYmUzMiB0eHVybjsKKwlfX2JlMzIgdHh0bzsKKwlfX2JlMzIgY3N0OworfSBfX3BhY2tlZDsKKworc3RydWN0IGF0aDlrX2h0Y190YXJnZXRfdHhfc3RhdHMgeworCV9fYmUzMiB4cmV0cmllczsKKwlfX2JlMzIgZmlmb2VycjsKKwlfX2JlMzIgZmlsdGVyZWQ7CisJX19iZTMyIHRpbWVyX2V4cDsKKwlfX2JlMzIgc2hvcnRyZXRyaWVzOworCV9fYmUzMiBsb25ncmV0cmllczsKKwlfX2JlMzIgcW51bGw7CisJX19iZTMyIGVuY2FwX2ZhaWw7CisJX19iZTMyIG5vYnVmOworfSBfX3BhY2tlZDsKKworc3RydWN0IGF0aDlrX2h0Y190YXJnZXRfcnhfc3RhdHMgeworCV9fYmUzMiBub2J1ZjsKKwlfX2JlMzIgaG9zdF9zZW5kOworCV9fYmUzMiBob3N0X2RvbmU7CiB9IF9fcGFja2VkOwogCiAjZGVmaW5lIEFUSDlLX0hUQ19NQVhfVklGIDIKQEAgLTI0NCw2ICsyNDQsOCBAQAogCXU4IGluZGV4OwogCXUxNiBzZXFfbm87CiAJYm9vbCBiZWFjb25fY29uZmlndXJlZDsKKwlpbnQgYnNsb3Q7CisJX19sZTY0IHRzZmFkanVzdDsKIH07CiAKIHN0cnVjdCBhdGg5a192aWZfaXRlcl9kYXRhIHsKQEAgLTI4MiwyMyArMjg0LDY1IEBACiAJc3BpbmxvY2tfdCByeGJ1ZmxvY2s7CiB9OwogCisjZGVmaW5lIEFUSDlLX0hUQ19UWF9DTEVBTlVQX0lOVEVSVkFMIDUwIC8qIG1zICovCisjZGVmaW5lIEFUSDlLX0hUQ19UWF9USU1FT1VUX0lOVEVSVkFMIDI1MDAgLyogbXMgKi8KKyNkZWZpbmUgQVRIOUtfSFRDX1RYX1JFU0VSVkUgMTAKKyNkZWZpbmUgQVRIOUtfSFRDX1RYX1RJTUVPVVRfQ09VTlQgMjAKKyNkZWZpbmUgQVRIOUtfSFRDX1RYX1RIUkVTSE9MRCAoTUFYX1RYX0JVRl9OVU0gLSBBVEg5S19IVENfVFhfUkVTRVJWRSkKKworI2RlZmluZSBBVEg5S19IVENfT1BfVFhfUVVFVUVTX1NUT1AgQklUKDApCisjZGVmaW5lIEFUSDlLX0hUQ19PUF9UWF9EUkFJTiAgICAgICBCSVQoMSkKKworc3RydWN0IGF0aDlrX2h0Y190eCB7CisJdTggZmxhZ3M7CisJaW50IHF1ZXVlZF9jbnQ7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCBtZ210X2VwX3F1ZXVlOworCXN0cnVjdCBza19idWZmX2hlYWQgY2FiX2VwX3F1ZXVlOworCXN0cnVjdCBza19idWZmX2hlYWQgZGF0YV9iZV9xdWV1ZTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGRhdGFfYmtfcXVldWU7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCBkYXRhX3ZpX3F1ZXVlOworCXN0cnVjdCBza19idWZmX2hlYWQgZGF0YV92b19xdWV1ZTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X2ZhaWxlZDsKKwlERUNMQVJFX0JJVE1BUCh0eF9zbG90LCBNQVhfVFhfQlVGX05VTSk7CisJc3RydWN0IHRpbWVyX2xpc3QgY2xlYW51cF90aW1lcjsKKwlzcGlubG9ja190IHR4X2xvY2s7Cit9OworCiBzdHJ1Y3QgYXRoOWtfaHRjX3R4X2N0bCB7CiAJdTggdHlwZTsgLyogQVRIOUtfSFRDXyogKi8KKwl1OCBlcGlkOworCXU4IHR4b2s7CisJdTggc3RhX2lkeDsKKwl1bnNpZ25lZCBsb25nIHRpbWVzdGFtcDsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGF0aDlrX2h0Y190eF9jdGwgKkhUQ19TS0JfQ0Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBhdGg5a19odGNfdHhfY3RsKSA+CisJCSAgICAgSUVFRTgwMjExX1RYX0lORk9fRFJJVkVSX0RBVEFfU0laRSk7CisJcmV0dXJuIChzdHJ1Y3QgYXRoOWtfaHRjX3R4X2N0bCAqKSAmdHhfaW5mby0+ZHJpdmVyX2RhdGE7Cit9CisKICNpZmRlZiBDT05GSUdfQVRIOUtfSFRDX0RFQlVHRlMKIAogI2RlZmluZSBUWF9TVEFUX0lOQyhjKSAoaGlmX2Rldi0+aHRjX2hhbmRsZS0+ZHJ2X3ByaXYtPmRlYnVnLnR4X3N0YXRzLmMrKykKICNkZWZpbmUgUlhfU1RBVF9JTkMoYykgKGhpZl9kZXYtPmh0Y19oYW5kbGUtPmRydl9wcml2LT5kZWJ1Zy5yeF9zdGF0cy5jKyspCisjZGVmaW5lIENBQl9TVEFUX0lOQyAgIHByaXYtPmRlYnVnLnR4X3N0YXRzLmNhYl9xdWV1ZWQrKwogCiAjZGVmaW5lIFRYX1FTVEFUX0lOQyhxKSAocHJpdi0+ZGVidWcudHhfc3RhdHMucXVldWVfc3RhdHNbcV0rKykKIAordm9pZCBhdGg5a19odGNfZXJyX3N0YXRfcngoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAorCQkJICAgc3RydWN0IGF0aF9odGNfcnhfc3RhdHVzICpyeHMpOworCiBzdHJ1Y3QgYXRoX3R4X3N0YXRzIHsKIAl1MzIgYnVmX3F1ZXVlZDsKIAl1MzIgYnVmX2NvbXBsZXRlZDsKIAl1MzIgc2tiX3F1ZXVlZDsKLQl1MzIgc2tiX2NvbXBsZXRlZDsKLQl1MzIgc2tiX2Ryb3BwZWQ7CisJdTMyIHNrYl9zdWNjZXNzOworCXUzMiBza2JfZmFpbGVkOworCXUzMiBjYWJfcXVldWVkOwogCXUzMiBxdWV1ZV9zdGF0c1tXTUVfTlVNX0FDXTsKIH07CiAKQEAgLTMwNiw1NSArMzUwLDU3IEBACiAJdTMyIHNrYl9hbGxvY2F0ZWQ7CiAJdTMyIHNrYl9jb21wbGV0ZWQ7CiAJdTMyIHNrYl9kcm9wcGVkOworCXUzMiBlcnJfY3JjOworCXUzMiBlcnJfZGVjcnlwdF9jcmM7CisJdTMyIGVycl9taWM7CisJdTMyIGVycl9wcmVfZGVsaW07CisJdTMyIGVycl9wb3N0X2RlbGltOworCXUzMiBlcnJfZGVjcnlwdF9idXN5OworCXUzMiBlcnJfcGh5OworCXUzMiBlcnJfcGh5X3N0YXRzW0FUSDlLX1BIWUVSUl9NQVhdOwogfTsKIAogc3RydWN0IGF0aDlrX2RlYnVnIHsKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3BoeTsKLQlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3RndF9zdGF0czsKLQlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3htaXQ7Ci0Jc3RydWN0IGRlbnRyeSAqZGVidWdmc19yZWN2OwogCXN0cnVjdCBhdGhfdHhfc3RhdHMgdHhfc3RhdHM7CiAJc3RydWN0IGF0aF9yeF9zdGF0cyByeF9zdGF0czsKLQl1MzIgdHhyYXRlOwogfTsKIAogI2Vsc2UKIAogI2RlZmluZSBUWF9TVEFUX0lOQyhjKSBkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIFJYX1NUQVRfSU5DKGMpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgQ0FCX1NUQVRfSU5DICAgZG8geyB9IHdoaWxlICgwKQogCiAjZGVmaW5lIFRYX1FTVEFUX0lOQyhjKSBkbyB7IH0gd2hpbGUgKDApCiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19odGNfZXJyX3N0YXRfcngoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAorCQkJCQkgc3RydWN0IGF0aF9odGNfcnhfc3RhdHVzICpyeHMpCit7Cit9CisKICNlbmRpZiAvKiBDT05GSUdfQVRIOUtfSFRDX0RFQlVHRlMgKi8KIAogI2RlZmluZSBBVEhfTEVEX1BJTl9ERUYgICAgICAgICAgICAgMQotI2RlZmluZSBBVEhfTEVEX1BJTl85Mjg3ICAgICAgICAgICAgOAorI2RlZmluZSBBVEhfTEVEX1BJTl85Mjg3ICAgICAgICAgICAgMTAKICNkZWZpbmUgQVRIX0xFRF9QSU5fOTI3MSAgICAgICAgICAgIDE1CiAjZGVmaW5lIEFUSF9MRURfUElOXzcwMTAgICAgICAgICAgICAxMgotI2RlZmluZSBBVEhfTEVEX09OX0RVUkFUSU9OX0lETEUgICAgMzUwCS8qIGluIG1zZWNzICovCi0jZGVmaW5lIEFUSF9MRURfT0ZGX0RVUkFUSU9OX0lETEUgICAyNTAJLyogaW4gbXNlY3MgKi8KIAotZW51bSBhdGhfbGVkX3R5cGUgewotCUFUSF9MRURfUkFESU8sCi0JQVRIX0xFRF9BU1NPQywKLQlBVEhfTEVEX1RYLAotCUFUSF9MRURfUlgKLX07CisjZGVmaW5lIEJTVFVDS19USFJFU0hPTEQgMTAKIAotc3RydWN0IGF0aF9sZWQgewotCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdjsKLQlzdHJ1Y3QgbGVkX2NsYXNzZGV2IGxlZF9jZGV2OwotCWVudW0gYXRoX2xlZF90eXBlIGxlZF90eXBlOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgYnJpZ2h0bmVzc193b3JrOwotCWNoYXIgbmFtZVszMl07Ci0JYm9vbCByZWdpc3RlcmVkOwotCWludCBicmlnaHRuZXNzOwotfTsKKy8qCisgKiBBZGp1c3QgdGhlc2Ugd2hlbiB0aGUgbWF4LiBubyBvZiBiZWFjb25pbmcgaW50ZXJmYWNlcyBpcworICogaW5jcmVhc2VkLgorICovCisjZGVmaW5lIERFRkFVTFRfU1dCQV9SRVNQT05TRSA0MCAvKiBpbiBUVXMgKi8KKyNkZWZpbmUgTUlOX1NXQkFfUkVTUE9OU0UgICAgIDEwIC8qIGluIFRVcyAqLwogCiBzdHJ1Y3QgaHRjX2JlYWNvbl9jb25maWcgeworCXN0cnVjdCBpZWVlODAyMTFfdmlmICpic2xvdFtBVEg5S19IVENfTUFYX0JDTl9WSUZdOwogCXUxNiBiZWFjb25faW50ZXJ2YWw7CiAJdTE2IGR0aW1fcGVyaW9kOwogCXUxNiBibWlzc190aW1lb3V0OworCXUzMiBibWlzc19jbnQ7CiB9OwogCiBzdHJ1Y3QgYXRoX2J0Y29leCB7CkBAIC0zNzIsMTQgKzQxOCwxMSBAQAogCiAjZGVmaW5lIE9QX0lOVkFMSUQJCSAgIEJJVCgwKQogI2RlZmluZSBPUF9TQ0FOTklORwkJICAgQklUKDEpCi0jZGVmaW5lIE9QX0xFRF9BU1NPQ0lBVEVECSAgIEJJVCgyKQotI2RlZmluZSBPUF9MRURfT04JCSAgIEJJVCgzKQotI2RlZmluZSBPUF9FTkFCTEVfQkVBQ09OCSAgIEJJVCg0KQotI2RlZmluZSBPUF9MRURfREVJTklUCQkgICBCSVQoNSkKLSNkZWZpbmUgT1BfQlRfUFJJT1JJVFlfREVURUNURUQgICAgQklUKDYpCi0jZGVmaW5lIE9QX0JUX1NDQU4gICAgICAgICAgICAgICAgIEJJVCg3KQotI2RlZmluZSBPUF9BTklfUlVOTklORyAgICAgICAgICAgICBCSVQoOCkKLSNkZWZpbmUgT1BfVFNGX1JFU0VUICAgICAgICAgICAgICAgQklUKDkpCisjZGVmaW5lIE9QX0VOQUJMRV9CRUFDT04gICAgICAgICAgIEJJVCgyKQorI2RlZmluZSBPUF9CVF9QUklPUklUWV9ERVRFQ1RFRCAgICBCSVQoMykKKyNkZWZpbmUgT1BfQlRfU0NBTiAgICAgICAgICAgICAgICAgQklUKDQpCisjZGVmaW5lIE9QX0FOSV9SVU5OSU5HICAgICAgICAgICAgIEJJVCg1KQorI2RlZmluZSBPUF9UU0ZfUkVTRVQgICAgICAgICAgICAgICBCSVQoNikKIAogc3RydWN0IGF0aDlrX2h0Y19wcml2IHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CkBAIC0zODgsNiArNDMxLDkgQEAKIAlzdHJ1Y3QgaHRjX3RhcmdldCAqaHRjOwogCXN0cnVjdCB3bWkgKndtaTsKIAorCXUxNiBmd192ZXJzaW9uX21ham9yOworCXUxNiBmd192ZXJzaW9uX21pbm9yOworCiAJZW51bSBodGNfZW5kcG9pbnRfaWQgd21pX2NtZF9lcDsKIAllbnVtIGh0Y19lbmRwb2ludF9pZCBiZWFjb25fZXA7CiAJZW51bSBodGNfZW5kcG9pbnRfaWQgY2FiX2VwOwpAQCAtNDExLDI3ICs0NTcsMjMgQEAKIAl1MTYgdHhwb3dsaW1pdDsKIAl1MTYgbnZpZnM7CiAJdTE2IG5zdGF0aW9uczsKLQl1MzIgYm1pc3NfY250OwogCWJvb2wgcmVhcm1fYW5pOwogCWJvb2wgcmVjb25maWdfYmVhY29uOworCXVuc2lnbmVkIGludCByeGZpbHRlcjsKIAogCXN0cnVjdCBhdGg5a19od19jYWxfZGF0YSBjYWxkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgc2JhbmRzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwogCiAJc3BpbmxvY2tfdCBiZWFjb25fbG9jazsKLQotCWJvb2wgdHhfcXVldWVzX3N0b3A7Ci0Jc3BpbmxvY2tfdCB0eF9sb2NrOwotCi0Jc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKIAlzdHJ1Y3QgaHRjX2JlYWNvbl9jb25maWcgY3VyX2JlYWNvbl9jb25mOwotCXVuc2lnbmVkIGludCByeGZpbHRlcjsKKworCXN0cnVjdCBhdGg5a19odGNfcnggcng7CisJc3RydWN0IGF0aDlrX2h0Y190eCB0eDsKKwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBzd2JhX3Rhc2tsZXQ7CiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IHJ4X3Rhc2tsZXQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBzYmFuZHNbSUVFRTgwMjExX05VTV9CQU5EU107Ci0Jc3RydWN0IGF0aDlrX2h0Y19yeCByeDsKLQlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdHhfdGFza2xldDsKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgYW5pX3dvcms7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHR4X2ZhaWxlZF90YXNrbGV0OwogCXN0cnVjdCB3b3JrX3N0cnVjdCBwc193b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBmYXRhbF93b3JrOwogCkBAIC00NDAsMTUgKzQ4MiwxMyBAQAogCWJvb2wgcHNfZW5hYmxlZDsKIAlib29sIHBzX2lkbGU7CiAKLQlzdHJ1Y3QgYXRoX2xlZCByYWRpb19sZWQ7Ci0Jc3RydWN0IGF0aF9sZWQgYXNzb2NfbGVkOwotCXN0cnVjdCBhdGhfbGVkIHR4X2xlZDsKLQlzdHJ1Y3QgYXRoX2xlZCByeF9sZWQ7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayBhdGg5a19sZWRfYmxpbmtfd29yazsKLQlpbnQgbGVkX29uX2R1cmF0aW9uOwotCWludCBsZWRfb2ZmX2R1cmF0aW9uOwotCWludCBsZWRfb25fY250OwotCWludCBsZWRfb2ZmX2NudDsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTEVEUworCWVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzczsKKwlib29sIGxlZF9yZWdpc3RlcmVkOworCWNoYXIgbGVkX25hbWVbMzJdOworCXN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkX2NkZXY7CisJc3RydWN0IHdvcmtfc3RydWN0IGxlZF93b3JrOworI2VuZGlmCiAKIAlpbnQgYmVhY29ucTsKIAlpbnQgY2FicTsKQEAgLTQ3MCwxMSArNTEwLDE4IEBACiAKIHZvaWQgYXRoOWtfaHRjX3Jlc2V0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdik7CiAKK3ZvaWQgYXRoOWtfaHRjX2Fzc2lnbl9ic2xvdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCisJCQkgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7Cit2b2lkIGF0aDlrX2h0Y19yZW1vdmVfYnNsb3Qoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAorCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwordm9pZCBhdGg5a19odGNfc2V0X3RzZmFkanVzdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwogdm9pZCBhdGg5a19odGNfYmVhY29ucV9jb25maWcoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KTsKIHZvaWQgYXRoOWtfaHRjX2JlYWNvbl9jb25maWcoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAogCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKIHZvaWQgYXRoOWtfaHRjX2JlYWNvbl9yZWNvbmZpZyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpOwotdm9pZCBhdGg5a19odGNfc3diYShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsIHU4IGJlYWNvbl9wZW5kaW5nKTsKK3ZvaWQgYXRoOWtfaHRjX3N3YmEoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAorCQkgICAgc3RydWN0IHdtaV9ldmVudF9zd2JhICpzd2JhKTsKIAogdm9pZCBhdGg5a19odGNfcnhlcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgZW51bSBodGNfZW5kcG9pbnRfaWQgZXBfaWQpOwpAQCAtNDgzLDcgKzUzMCw4IEBACiB2b2lkIGF0aDlrX2h0Y19iZWFjb25lcCh2b2lkICpkcnZfcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCWVudW0gaHRjX2VuZHBvaW50X2lkIGVwX2lkLCBib29sIHR4b2spOwogCi1pbnQgYXRoOWtfaHRjX3VwZGF0ZV9jYXBfdGFyZ2V0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdik7CitpbnQgYXRoOWtfaHRjX3VwZGF0ZV9jYXBfdGFyZ2V0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKKwkJCQl1OCBlbmFibGVfY29leCk7CiB2b2lkIGF0aDlrX2h0Y19zdGF0aW9uX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHZvaWQgYXRoOWtfaHRjX2FnZ3Jfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBhdGg5a19odGNfYW5pX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKQEAgLTQ5MSwxNCArNTM5LDIzIEBACiB2b2lkIGF0aDlrX2h0Y19zdG9wX2FuaShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpOwogCiBpbnQgYXRoOWtfdHhfaW5pdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpOwotdm9pZCBhdGg5a190eF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci1pbnQgYXRoOWtfaHRjX3R4X3N0YXJ0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgYXRoOWtfaHRjX3R4X3N0YXJ0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKKwkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHU4IHNsb3QsIGJvb2wgaXNfY2FiKTsKIHZvaWQgYXRoOWtfdHhfY2xlYW51cChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpOwogYm9vbCBhdGg5a19odGNfdHhxX3NldHVwKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgaW50IHN1YnR5cGUpOwogaW50IGF0aDlrX2h0Y19jYWJxX3NldHVwKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdik7CiBpbnQgZ2V0X2h3X3FudW0odTE2IHF1ZXVlLCBpbnQgKmh3cV9tYXApOwogaW50IGF0aF9odGNfdHhxX3VwZGF0ZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsIGludCBxbnVtLAogCQkgICAgICAgc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpbmZvKTsKK3ZvaWQgYXRoOWtfaHRjX2NoZWNrX3N0b3BfcXVldWVzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdik7Cit2b2lkIGF0aDlrX2h0Y19jaGVja193YWtlX3F1ZXVlcyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpOworaW50IGF0aDlrX2h0Y190eF9nZXRfc2xvdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpOwordm9pZCBhdGg5a19odGNfdHhfY2xlYXJfc2xvdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsIGludCBzbG90KTsKK3ZvaWQgYXRoOWtfaHRjX3R4X2RyYWluKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdik7Cit2b2lkIGF0aDlrX2h0Y190eHN0YXR1cyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsIHZvaWQgKndtaV9ldmVudCk7Cit2b2lkIGF0aDlrX2h0Y190eF9mYWlsZWQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KTsKK3ZvaWQgYXRoOWtfdHhfZmFpbGVkX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKK3ZvaWQgYXRoOWtfaHRjX3R4X2NsZWFudXBfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKTsKIAogaW50IGF0aDlrX3J4X2luaXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KTsKIHZvaWQgYXRoOWtfcnhfY2xlYW51cChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpOwpAQCAtNTE2LDkgKzU3MywyNCBAQAogdm9pZCBhdGg5a19odGNfcmZraWxsX3BvbGxfc3RhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBhdGg5a19odGNfcmFkaW9fZW5hYmxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHZvaWQgYXRoOWtfaHRjX3JhZGlvX2Rpc2FibGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwotdm9pZCBhdGg5a19sZWRfc3RvcF9icmlnaHRuZXNzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdik7CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfTEVEUwogdm9pZCBhdGg5a19pbml0X2xlZHMoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KTsKIHZvaWQgYXRoOWtfZGVpbml0X2xlZHMoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KTsKK3ZvaWQgYXRoOWtfbGVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfaW5pdF9sZWRzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2RlaW5pdF9sZWRzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2xlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKK30KKyNlbmRpZgogCiBpbnQgYXRoOWtfaHRjX3Byb2JlX2RldmljZShzdHJ1Y3QgaHRjX3RhcmdldCAqaHRjX2hhbmRsZSwgc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgdTE2IGRldmlkLCBjaGFyICpwcm9kdWN0LCB1MzIgZHJ2X2luZm8pOwpAQCAtNTI4LDE1ICs2MDAsOSBAQAogaW50IGF0aDlrX2h0Y19yZXN1bWUoc3RydWN0IGh0Y190YXJnZXQgKmh0Y19oYW5kbGUpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FUSDlLX0hUQ19ERUJVR0ZTCi1pbnQgYXRoOWtfaHRjX2RlYnVnX2NyZWF0ZV9yb290KHZvaWQpOwotdm9pZCBhdGg5a19odGNfZGVidWdfcmVtb3ZlX3Jvb3Qodm9pZCk7CiBpbnQgYXRoOWtfaHRjX2luaXRfZGVidWcoc3RydWN0IGF0aF9odyAqYWgpOwotdm9pZCBhdGg5a19odGNfZXhpdF9kZWJ1ZyhzdHJ1Y3QgYXRoX2h3ICphaCk7CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgYXRoOWtfaHRjX2RlYnVnX2NyZWF0ZV9yb290KHZvaWQpIHsgcmV0dXJuIDA7IH07Ci1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfaHRjX2RlYnVnX3JlbW92ZV9yb290KHZvaWQpIHt9Owogc3RhdGljIGlubGluZSBpbnQgYXRoOWtfaHRjX2luaXRfZGVidWcoc3RydWN0IGF0aF9odyAqYWgpIHsgcmV0dXJuIDA7IH07Ci1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfaHRjX2V4aXRfZGVidWcoc3RydWN0IGF0aF9odyAqYWgpIHt9OwogI2VuZGlmIC8qIENPTkZJR19BVEg5S19IVENfREVCVUdGUyAqLwogCiAjZW5kaWYgLyogSFRDX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2JlYWNvbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmMKaW5kZXggOGQxZDg3OS4uMGRlZDJjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfYmVhY29uLmMKQEAgLTE4LDYgKzE4LDUwIEBACiAKICNkZWZpbmUgRlVER0UgMgogCit2b2lkIGF0aDlrX2h0Y19iZWFjb25xX2NvbmZpZyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpCit7CisJc3RydWN0IGF0aF9odyAqYWggPSBwcml2LT5haDsKKwlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyBxaSwgcWlfYmU7CisKKwltZW1zZXQoJnFpLCAwLCBzaXplb2Yoc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8pKTsKKwltZW1zZXQoJnFpX2JlLCAwLCBzaXplb2Yoc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8pKTsKKworCWF0aDlrX2h3X2dldF90eHFfcHJvcHMoYWgsIHByaXYtPmJlYWNvbnEsICZxaSk7CisKKwlpZiAocHJpdi0+YWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgeworCQlxaS50cWlfYWlmcyA9IDE7CisJCXFpLnRxaV9jd21pbiA9IDA7CisJCXFpLnRxaV9jd21heCA9IDA7CisJfSBlbHNlIGlmIChwcml2LT5haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCWludCBxbnVtID0gcHJpdi0+aHdxX21hcFtXTUVfQUNfQkVdOworCisJCWF0aDlrX2h3X2dldF90eHFfcHJvcHMoYWgsIHFudW0sICZxaV9iZSk7CisKKwkJcWkudHFpX2FpZnMgPSBxaV9iZS50cWlfYWlmczsKKworCQkvKgorCQkgKiBGb3IgV0lGSSBCZWFjb24gRGlzdHJpYnV0aW9uCisJCSAqIExvbmcgc2xvdCB0aW1lICA6IDJ4IGN3bWluCisJCSAqIFNob3J0IHNsb3QgdGltZSA6IDR4IGN3bWluCisJCSAqLworCQlpZiAoYWgtPnNsb3R0aW1lID09IEFUSDlLX1NMT1RfVElNRV8yMCkKKwkJCXFpLnRxaV9jd21pbiA9IDIqcWlfYmUudHFpX2N3bWluOworCQllbHNlCisJCQlxaS50cWlfY3dtaW4gPSA0KnFpX2JlLnRxaV9jd21pbjsKKworCQlxaS50cWlfY3dtYXggPSBxaV9iZS50cWlfY3dtYXg7CisKKwl9CisKKwlpZiAoIWF0aDlrX2h3X3NldF90eHFfcHJvcHMoYWgsIHByaXYtPmJlYWNvbnEsICZxaSkpIHsKKwkJYXRoX2VycihhdGg5a19od19jb21tb24oYWgpLAorCQkJIlVuYWJsZSB0byB1cGRhdGUgYmVhY29uIHF1ZXVlICV1IVxuIiwgcHJpdi0+YmVhY29ucSk7CisJfSBlbHNlIHsKKwkJYXRoOWtfaHdfcmVzZXR0eHF1ZXVlKGFoLCBwcml2LT5iZWFjb25xKTsKKwl9Cit9CisKKwogc3RhdGljIHZvaWQgYXRoOWtfaHRjX2JlYWNvbl9jb25maWdfc3RhKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKIAkJCQkJc3RydWN0IGh0Y19iZWFjb25fY29uZmlnICpic3NfY29uZikKIHsKQEAgLTMwLDcgKzc0LDcgQEAKIAlfX2JlMzIgaHRjX2ltYXNrID0gMDsKIAl1NjQgdHNmOwogCWludCBudW1fYmVhY29ucywgb2Zmc2V0LCBkdGltX2RlY19jb3VudCwgY2ZwX2RlY19jb3VudDsKLQlpbnQgcmV0OworCWludCByZXQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOwogCXU4IGNtZF9yc3A7CiAKIAltZW1zZXQoJmJzLCAwLCBzaXplb2YoYnMpKTsKQEAgLTE0Niw3ICsxOTAsNyBAQAogCWVudW0gYXRoOWtfaW50IGltYXNrID0gMDsKIAl1MzIgbmV4dHRidHQsIGludHZhbCwgdHNmdHU7CiAJX19iZTMyIGh0Y19pbWFzayA9IDA7Ci0JaW50IHJldDsKKwlpbnQgcmV0IF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKIAl1OCBjbWRfcnNwOwogCXU2NCB0c2Y7CiAKQEAgLTE1NCw4ICsxOTgsMTcgQEAKIAlpbnR2YWwgLz0gQVRIOUtfSFRDX01BWF9CQ05fVklGOwogCW5leHR0YnR0ID0gaW50dmFsOwogCisJLyoKKwkgKiBUbyByZWR1Y2UgYmVhY29uIG1pc3NlcyB1bmRlciBoZWF2eSBUWCBsb2FkLAorCSAqIHNldCB0aGUgYmVhY29uIHJlc3BvbnNlIHRpbWUgdG8gYSBsYXJnZXIgdmFsdWUuCisJICovCisJaWYgKGludHZhbCA+IERFRkFVTFRfU1dCQV9SRVNQT05TRSkKKwkJcHJpdi0+YWgtPmNvbmZpZy5zd19iZWFjb25fcmVzcG9uc2VfdGltZSA9IERFRkFVTFRfU1dCQV9SRVNQT05TRTsKKwllbHNlCisJCXByaXYtPmFoLT5jb25maWcuc3dfYmVhY29uX3Jlc3BvbnNlX3RpbWUgPSBNSU5fU1dCQV9SRVNQT05TRTsKKwogCWlmIChwcml2LT5vcF9mbGFncyAmIE9QX1RTRl9SRVNFVCkgewotCQlpbnR2YWwgfD0gQVRIOUtfQkVBQ09OX1JFU0VUX1RTRjsKKwkJYXRoOWtfaHdfcmVzZXRfdHNmKHByaXYtPmFoKTsKIAkJcHJpdi0+b3BfZmxhZ3MgJj0gfk9QX1RTRl9SRVNFVDsKIAl9IGVsc2UgewogCQkvKgpAQCAtMTY4LDE4ICsyMjEsMjAgQEAKIAkJfSB3aGlsZSAobmV4dHRidHQgPCB0c2Z0dSk7CiAJfQogCi0JaW50dmFsIHw9IEFUSDlLX0JFQUNPTl9FTkE7Ci0KIAlpZiAocHJpdi0+b3BfZmxhZ3MgJiBPUF9FTkFCTEVfQkVBQ09OKQogCQlpbWFzayB8PSBBVEg5S19JTlRfU1dCQTsKIAogCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKLQkJIkFQIEJlYWNvbiBjb25maWcsIGludHZhbDogJWQsIG5leHR0YnR0OiAldSBpbWFzazogMHgleFxuIiwKLQkJYnNzX2NvbmYtPmJlYWNvbl9pbnRlcnZhbCwgbmV4dHRidHQsIGltYXNrKTsKKwkJIkFQIEJlYWNvbiBjb25maWcsIGludHZhbDogJWQsIG5leHR0YnR0OiAldSwgcmVzcF90aW1lOiAlZCAiCisJCSJpbWFzazogMHgleFxuIiwKKwkJYnNzX2NvbmYtPmJlYWNvbl9pbnRlcnZhbCwgbmV4dHRidHQsCisJCXByaXYtPmFoLT5jb25maWcuc3dfYmVhY29uX3Jlc3BvbnNlX3RpbWUsIGltYXNrKTsKKworCWF0aDlrX2h0Y19iZWFjb25xX2NvbmZpZyhwcml2KTsKIAogCVdNSV9DTUQoV01JX0RJU0FCTEVfSU5UUl9DTURJRCk7Ci0JYXRoOWtfaHdfYmVhY29uaW5pdChwcml2LT5haCwgbmV4dHRidHQsIGludHZhbCk7Ci0JcHJpdi0+Ym1pc3NfY250ID0gMDsKKwlhdGg5a19od19iZWFjb25pbml0KHByaXYtPmFoLCBUVV9UT19VU0VDKG5leHR0YnR0KSwgVFVfVE9fVVNFQyhpbnR2YWwpKTsKKwlwcml2LT5jdXJfYmVhY29uX2NvbmYuYm1pc3NfY250ID0gMDsKIAlodGNfaW1hc2sgPSBjcHVfdG9fYmUzMihpbWFzayk7CiAJV01JX0NNRF9CVUYoV01JX0VOQUJMRV9JTlRSX0NNRElELCAmaHRjX2ltYXNrKTsKIH0KQEAgLTE5MSw3ICsyNDYsNyBAQAogCWVudW0gYXRoOWtfaW50IGltYXNrID0gMDsKIAl1MzIgbmV4dHRidHQsIGludHZhbCwgdHNmdHU7CiAJX19iZTMyIGh0Y19pbWFzayA9IDA7Ci0JaW50IHJldDsKKwlpbnQgcmV0IF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKIAl1OCBjbWRfcnNwOwogCXU2NCB0c2Y7CiAKQEAgLTIwNywxNyArMjYyLDI2IEBACiAJCW5leHR0YnR0ICs9IGludHZhbDsKIAl9IHdoaWxlIChuZXh0dGJ0dCA8IHRzZnR1KTsKIAotCWludHZhbCB8PSBBVEg5S19CRUFDT05fRU5BOworCS8qCisJICogT25seSBvbmUgSUJTUyBpbnRlcmZjZSBpcyBhbGxvd2VkLgorCSAqLworCWlmIChpbnR2YWwgPiBERUZBVUxUX1NXQkFfUkVTUE9OU0UpCisJCXByaXYtPmFoLT5jb25maWcuc3dfYmVhY29uX3Jlc3BvbnNlX3RpbWUgPSBERUZBVUxUX1NXQkFfUkVTUE9OU0U7CisJZWxzZQorCQlwcml2LT5haC0+Y29uZmlnLnN3X2JlYWNvbl9yZXNwb25zZV90aW1lID0gTUlOX1NXQkFfUkVTUE9OU0U7CisKIAlpZiAocHJpdi0+b3BfZmxhZ3MgJiBPUF9FTkFCTEVfQkVBQ09OKQogCQlpbWFzayB8PSBBVEg5S19JTlRfU1dCQTsKIAogCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKLQkJIklCU1MgQmVhY29uIGNvbmZpZywgaW50dmFsOiAlZCwgbmV4dHRidHQ6ICV1LCBpbWFzazogMHgleFxuIiwKLQkJYnNzX2NvbmYtPmJlYWNvbl9pbnRlcnZhbCwgbmV4dHRidHQsIGltYXNrKTsKKwkJIklCU1MgQmVhY29uIGNvbmZpZywgaW50dmFsOiAlZCwgbmV4dHRidHQ6ICV1LCAiCisJCSJyZXNwX3RpbWU6ICVkLCBpbWFzazogMHgleFxuIiwKKwkJYnNzX2NvbmYtPmJlYWNvbl9pbnRlcnZhbCwgbmV4dHRidHQsCisJCXByaXYtPmFoLT5jb25maWcuc3dfYmVhY29uX3Jlc3BvbnNlX3RpbWUsIGltYXNrKTsKIAogCVdNSV9DTUQoV01JX0RJU0FCTEVfSU5UUl9DTURJRCk7Ci0JYXRoOWtfaHdfYmVhY29uaW5pdChwcml2LT5haCwgbmV4dHRidHQsIGludHZhbCk7Ci0JcHJpdi0+Ym1pc3NfY250ID0gMDsKKwlhdGg5a19od19iZWFjb25pbml0KHByaXYtPmFoLCBUVV9UT19VU0VDKG5leHR0YnR0KSwgVFVfVE9fVVNFQyhpbnR2YWwpKTsKKwlwcml2LT5jdXJfYmVhY29uX2NvbmYuYm1pc3NfY250ID0gMDsKIAlodGNfaW1hc2sgPSBjcHVfdG9fYmUzMihpbWFzayk7CiAJV01JX0NNRF9CVUYoV01JX0VOQUJMRV9JTlRSX0NNRElELCAmaHRjX2ltYXNrKTsKIH0KQEAgLTIyOCwzOCArMjkyLDEwMSBAQAogCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiB9CiAKLXZvaWQgYXRoOWtfaHRjX3N3YmEoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LCB1OCBiZWFjb25fcGVuZGluZykKK3N0YXRpYyB2b2lkIGF0aDlrX2h0Y19zZW5kX2J1ZmZlcmVkKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKKwkJCQkgICAgaW50IHNsb3QpCiB7Ci0Jc3RydWN0IGF0aDlrX2h0Y192aWYgKmF2cCA9ICh2b2lkICopcHJpdi0+dmlmLT5kcnZfcHJpdjsKLQlzdHJ1Y3QgdHhfYmVhY29uX2hlYWRlciBiZWFjb25faGRyOwotCXN0cnVjdCBhdGg5a19odGNfdHhfY3RsIHR4X2N0bDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87Ci0Jc3RydWN0IHNrX2J1ZmYgKmJlYWNvbjsKLQl1OCAqdHhfZmhkcjsKLQotCW1lbXNldCgmYmVhY29uX2hkciwgMCwgc2l6ZW9mKHN0cnVjdCB0eF9iZWFjb25faGVhZGVyKSk7Ci0JbWVtc2V0KCZ0eF9jdGwsIDAsIHNpemVvZihzdHJ1Y3QgYXRoOWtfaHRjX3R4X2N0bCkpOwotCi0JLyogRklYTUU6IEhhbmRsZSBCTUlTUyAqLwotCWlmIChiZWFjb25fcGVuZGluZyAhPSAwKSB7Ci0JCXByaXYtPmJtaXNzX2NudCsrOwotCQlyZXR1cm47Ci0JfQorCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24ocHJpdi0+YWgpOworCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCWludCBwYWRwb3MsIHBhZHNpemUsIHJldCwgdHhfc2xvdDsKIAogCXNwaW5fbG9ja19iaCgmcHJpdi0+YmVhY29uX2xvY2spOwogCisJdmlmID0gcHJpdi0+Y3VyX2JlYWNvbl9jb25mLmJzbG90W3Nsb3RdOworCisJc2tiID0gaWVlZTgwMjExX2dldF9idWZmZXJlZF9iYyhwcml2LT5odywgdmlmKTsKKworCXdoaWxlKHNrYikgeworCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCisJCXBhZHBvcyA9IGF0aDlrX2Ntbl9wYWRwb3MoaGRyLT5mcmFtZV9jb250cm9sKTsKKwkJcGFkc2l6ZSA9IHBhZHBvcyAmIDM7CisJCWlmIChwYWRzaXplICYmIHNrYi0+bGVuID4gcGFkcG9zKSB7CisJCQlpZiAoc2tiX2hlYWRyb29tKHNrYikgPCBwYWRzaXplKSB7CisJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCQlnb3RvIG5leHQ7CisJCQl9CisJCQlza2JfcHVzaChza2IsIHBhZHNpemUpOworCQkJbWVtbW92ZShza2ItPmRhdGEsIHNrYi0+ZGF0YSArIHBhZHNpemUsIHBhZHBvcyk7CisJCX0KKworCQl0eF9zbG90ID0gYXRoOWtfaHRjX3R4X2dldF9zbG90KHByaXYpOworCQlpZiAodHhfc2xvdCA8IDApIHsKKwkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1hNSVQsICJObyBmcmVlIENBQiBzbG90XG4iKTsKKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQlnb3RvIG5leHQ7CisJCX0KKworCQlyZXQgPSBhdGg5a19odGNfdHhfc3RhcnQocHJpdiwgc2tiLCB0eF9zbG90LCB0cnVlKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlhdGg5a19odGNfdHhfY2xlYXJfc2xvdChwcml2LCB0eF9zbG90KTsKKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisKKwkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1hNSVQsCisJCQkJIkZhaWxlZCB0byBzZW5kIENBQiBmcmFtZVxuIik7CisJCX0gZWxzZSB7CisJCQlzcGluX2xvY2tfYmgoJnByaXYtPnR4LnR4X2xvY2spOworCQkJcHJpdi0+dHgucXVldWVkX2NudCsrOworCQkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4LnR4X2xvY2spOworCQl9CisJbmV4dDoKKwkJc2tiID0gaWVlZTgwMjExX2dldF9idWZmZXJlZF9iYyhwcml2LT5odywgdmlmKTsKKwl9CisKKwlzcGluX3VubG9ja19iaCgmcHJpdi0+YmVhY29uX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBhdGg5a19odGNfc2VuZF9iZWFjb24oc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAorCQkJCSAgaW50IHNsb3QpCit7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihwcml2LT5haCk7CisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKKwlzdHJ1Y3QgYXRoOWtfaHRjX3ZpZiAqYXZwOworCXN0cnVjdCB0eF9iZWFjb25faGVhZGVyIGJlYWNvbl9oZHI7CisJc3RydWN0IGF0aDlrX2h0Y190eF9jdGwgKnR4X2N0bDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXN0cnVjdCBza19idWZmICpiZWFjb247CisJdTggKnR4X2ZoZHI7CisJaW50IHJldDsKKworCW1lbXNldCgmYmVhY29uX2hkciwgMCwgc2l6ZW9mKHN0cnVjdCB0eF9iZWFjb25faGVhZGVyKSk7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPmJlYWNvbl9sb2NrKTsKKworCXZpZiA9IHByaXYtPmN1cl9iZWFjb25fY29uZi5ic2xvdFtzbG90XTsKKwlhdnAgPSAoc3RydWN0IGF0aDlrX2h0Y192aWYgKil2aWYtPmRydl9wcml2OworCiAJaWYgKHVubGlrZWx5KHByaXYtPm9wX2ZsYWdzICYgT1BfU0NBTk5JTkcpKSB7CiAJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5iZWFjb25fbG9jayk7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBHZXQgYSBuZXcgYmVhY29uICovCi0JYmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQocHJpdi0+aHcsIHByaXYtPnZpZik7CisJYmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQocHJpdi0+aHcsIHZpZik7CiAJaWYgKCFiZWFjb24pIHsKIAkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmJlYWNvbl9sb2NrKTsKIAkJcmV0dXJuOwogCX0KIAorCS8qCisJICogVXBkYXRlIHRoZSBUU0YgYWRqdXN0IHZhbHVlIGhlcmUsIHRoZSBIVyB3aWxsCisJICogYWRkIHRoaXMgdmFsdWUgZm9yIGV2ZXJ5IGJlYWNvbi4KKwkgKi8KKwltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKWJlYWNvbi0+ZGF0YTsKKwltZ210LT51LmJlYWNvbi50aW1lc3RhbXAgPSBhdnAtPnRzZmFkanVzdDsKKwogCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKGJlYWNvbik7CiAJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BU1NJR05fU0VRKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPQpAQCAtMjY5LDQ1ICszOTYsMTQ5IEBACiAJCWhkci0+c2VxX2N0cmwgfD0gY3B1X3RvX2xlMTYoYXZwLT5zZXFfbm8pOwogCX0KIAotCXR4X2N0bC50eXBlID0gQVRIOUtfSFRDX05PUk1BTDsKKwl0eF9jdGwgPSBIVENfU0tCX0NCKGJlYWNvbik7CisJbWVtc2V0KHR4X2N0bCwgMCwgc2l6ZW9mKCp0eF9jdGwpKTsKKworCXR4X2N0bC0+dHlwZSA9IEFUSDlLX0hUQ19CRUFDT047CisJdHhfY3RsLT5lcGlkID0gcHJpdi0+YmVhY29uX2VwOworCiAJYmVhY29uX2hkci52aWZfaW5kZXggPSBhdnAtPmluZGV4OwogCXR4X2ZoZHIgPSBza2JfcHVzaChiZWFjb24sIHNpemVvZihiZWFjb25faGRyKSk7CiAJbWVtY3B5KHR4X2ZoZHIsICh1OCAqKSAmYmVhY29uX2hkciwgc2l6ZW9mKGJlYWNvbl9oZHIpKTsKIAotCWh0Y19zZW5kKHByaXYtPmh0YywgYmVhY29uLCBwcml2LT5iZWFjb25fZXAsICZ0eF9jdGwpOworCXJldCA9IGh0Y19zZW5kKHByaXYtPmh0YywgYmVhY29uKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJaWYgKHJldCA9PSAtRU5PTUVNKSB7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19CU1RVQ0ssCisJCQkJIkZhaWxlZCB0byBzZW5kIGJlYWNvbiwgbm8gZnJlZSBUWCBidWZmZXJcbiIpOworCQl9CisJCWRldl9rZnJlZV9za2JfYW55KGJlYWNvbik7CisJfQogCiAJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmJlYWNvbl9sb2NrKTsKIH0KIAotLyogQ3VycmVudGx5LCBvbmx5IGZvciBJQlNTICovCi12b2lkIGF0aDlrX2h0Y19iZWFjb25xX2NvbmZpZyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGF0aDlrX2h0Y19jaG9vc2VfYnNsb3Qoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAorCQkJCSAgc3RydWN0IHdtaV9ldmVudF9zd2JhICpzd2JhKQogewotCXN0cnVjdCBhdGhfaHcgKmFoID0gcHJpdi0+YWg7Ci0Jc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gcWksIHFpX2JlOwotCWludCBxbnVtID0gcHJpdi0+aHdxX21hcFtXTUVfQUNfQkVdOworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24ocHJpdi0+YWgpOworCXU2NCB0c2Y7CisJdTMyIHRzZnR1OworCXUxNiBpbnR2YWw7CisJaW50IHNsb3Q7CiAKLQltZW1zZXQoJnFpLCAwLCBzaXplb2Yoc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8pKTsKLQltZW1zZXQoJnFpX2JlLCAwLCBzaXplb2Yoc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8pKTsKKwlpbnR2YWwgPSBwcml2LT5jdXJfYmVhY29uX2NvbmYuYmVhY29uX2ludGVydmFsICYgQVRIOUtfQkVBQ09OX1BFUklPRDsKIAotCWF0aDlrX2h3X2dldF90eHFfcHJvcHMoYWgsIHFudW0sICZxaV9iZSk7CisJdHNmID0gYmU2NF90b19jcHUoc3diYS0+dHNmKTsKKwl0c2Z0dSA9IFRTRl9UT19UVSh0c2YgPj4gMzIsIHRzZik7CisJc2xvdCA9ICgodHNmdHUgJSBpbnR2YWwpICogQVRIOUtfSFRDX01BWF9CQ05fVklGKSAvIGludHZhbDsKKwlzbG90ID0gQVRIOUtfSFRDX01BWF9CQ05fVklGIC0gc2xvdCAtIDE7CiAKLQlxaS50cWlfYWlmcyA9IHFpX2JlLnRxaV9haWZzOwotCS8qIEZvciBXSUZJIEJlYWNvbiBEaXN0cmlidXRpb24KLQkgKiBMb25nIHNsb3QgdGltZSAgOiAyeCBjd21pbgotCSAqIFNob3J0IHNsb3QgdGltZSA6IDR4IGN3bWluCi0JICovCi0JaWYgKGFoLT5zbG90dGltZSA9PSBBVEg5S19TTE9UX1RJTUVfMjApCi0JCXFpLnRxaV9jd21pbiA9IDIqcWlfYmUudHFpX2N3bWluOwotCWVsc2UKLQkJcWkudHFpX2N3bWluID0gNCpxaV9iZS50cWlfY3dtaW47Ci0JcWkudHFpX2N3bWF4ID0gcWlfYmUudHFpX2N3bWF4OworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0JFQUNPTiwKKwkJIkNob29zZSBzbG90OiAlZCwgdHNmOiAlbGx1LCB0c2Z0dTogJXUsIGludHZhbDogJXVcbiIsCisJCXNsb3QsIHRzZiwgdHNmdHUsIGludHZhbCk7CiAKLQlpZiAoIWF0aDlrX2h3X3NldF90eHFfcHJvcHMoYWgsIHByaXYtPmJlYWNvbnEsICZxaSkpIHsKLQkJYXRoX2VycihhdGg5a19od19jb21tb24oYWgpLAotCQkJIlVuYWJsZSB0byB1cGRhdGUgYmVhY29uIHF1ZXVlICV1IVxuIiwgcW51bSk7Ci0JfSBlbHNlIHsKLQkJYXRoOWtfaHdfcmVzZXR0eHF1ZXVlKGFoLCBwcml2LT5iZWFjb25xKTsKKwlyZXR1cm4gc2xvdDsKK30KKwordm9pZCBhdGg5a19odGNfc3diYShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCisJCSAgICBzdHJ1Y3Qgd21pX2V2ZW50X3N3YmEgKnN3YmEpCit7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihwcml2LT5haCk7CisJaW50IHNsb3Q7CisKKwlpZiAoc3diYS0+YmVhY29uX3BlbmRpbmcgIT0gMCkgeworCQlwcml2LT5jdXJfYmVhY29uX2NvbmYuYm1pc3NfY250Kys7CisJCWlmIChwcml2LT5jdXJfYmVhY29uX2NvbmYuYm1pc3NfY250ID4gQlNUVUNLX1RIUkVTSE9MRCkgeworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQlNUVUNLLAorCQkJCSJCZWFjb24gc3R1Y2ssIEhXIHJlc2V0XG4iKTsKKwkJCWllZWU4MDIxMV9xdWV1ZV93b3JrKHByaXYtPmh3LAorCQkJCQkgICAgICZwcml2LT5mYXRhbF93b3JrKTsKKwkJfQorCQlyZXR1cm47CiAJfQorCisJaWYgKHByaXYtPmN1cl9iZWFjb25fY29uZi5ibWlzc19jbnQpIHsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQlNUVUNLLAorCQkJIlJlc3VtaW5nIGJlYWNvbiB4bWl0IGFmdGVyICV1IG1pc3Nlc1xuIiwKKwkJCXByaXYtPmN1cl9iZWFjb25fY29uZi5ibWlzc19jbnQpOworCQlwcml2LT5jdXJfYmVhY29uX2NvbmYuYm1pc3NfY250ID0gMDsKKwl9CisKKwlzbG90ID0gYXRoOWtfaHRjX2Nob29zZV9ic2xvdChwcml2LCBzd2JhKTsKKwlzcGluX2xvY2tfYmgoJnByaXYtPmJlYWNvbl9sb2NrKTsKKwlpZiAocHJpdi0+Y3VyX2JlYWNvbl9jb25mLmJzbG90W3Nsb3RdID09IE5VTEwpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmJlYWNvbl9sb2NrKTsKKwkJcmV0dXJuOworCX0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+YmVhY29uX2xvY2spOworCisJYXRoOWtfaHRjX3NlbmRfYnVmZmVyZWQocHJpdiwgc2xvdCk7CisJYXRoOWtfaHRjX3NlbmRfYmVhY29uKHByaXYsIHNsb3QpOworfQorCit2b2lkIGF0aDlrX2h0Y19hc3NpZ25fYnNsb3Qoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAorCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihwcml2LT5haCk7CisJc3RydWN0IGF0aDlrX2h0Y192aWYgKmF2cCA9IChzdHJ1Y3QgYXRoOWtfaHRjX3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7CisJaW50IGkgPSAwOworCisJc3Bpbl9sb2NrX2JoKCZwcml2LT5iZWFjb25fbG9jayk7CisJZm9yIChpID0gMDsgaSA8IEFUSDlLX0hUQ19NQVhfQkNOX1ZJRjsgaSsrKSB7CisJCWlmIChwcml2LT5jdXJfYmVhY29uX2NvbmYuYnNsb3RbaV0gPT0gTlVMTCkgeworCQkJYXZwLT5ic2xvdCA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXByaXYtPmN1cl9iZWFjb25fY29uZi5ic2xvdFthdnAtPmJzbG90XSA9IHZpZjsKKwlzcGluX3VubG9ja19iaCgmcHJpdi0+YmVhY29uX2xvY2spOworCisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLAorCQkiQWRkZWQgaW50ZXJmYWNlIGF0IGJlYWNvbiBzbG90OiAlZFxuIiwgYXZwLT5ic2xvdCk7Cit9CisKK3ZvaWQgYXRoOWtfaHRjX3JlbW92ZV9ic2xvdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCisJCQkgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHByaXYtPmFoKTsKKwlzdHJ1Y3QgYXRoOWtfaHRjX3ZpZiAqYXZwID0gKHN0cnVjdCBhdGg5a19odGNfdmlmICopdmlmLT5kcnZfcHJpdjsKKworCXNwaW5fbG9ja19iaCgmcHJpdi0+YmVhY29uX2xvY2spOworCXByaXYtPmN1cl9iZWFjb25fY29uZi5ic2xvdFthdnAtPmJzbG90XSA9IE5VTEw7CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPmJlYWNvbl9sb2NrKTsKKworCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKKwkJIlJlbW92ZWQgaW50ZXJmYWNlIGF0IGJlYWNvbiBzbG90OiAlZFxuIiwgYXZwLT5ic2xvdCk7Cit9CisKKy8qCisgKiBDYWxjdWxhdGUgdGhlIFRTRiBhZGp1c3RtZW50IHZhbHVlIGZvciBhbGwgc2xvdHMKKyAqIG90aGVyIHRoYW4gemVyby4KKyAqLwordm9pZCBhdGg5a19odGNfc2V0X3RzZmFkanVzdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihwcml2LT5haCk7CisJc3RydWN0IGF0aDlrX2h0Y192aWYgKmF2cCA9IChzdHJ1Y3QgYXRoOWtfaHRjX3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7CisJc3RydWN0IGh0Y19iZWFjb25fY29uZmlnICpjdXJfY29uZiA9ICZwcml2LT5jdXJfYmVhY29uX2NvbmY7CisJdTY0IHRzZmFkanVzdDsKKworCWlmIChhdnAtPmJzbG90ID09IDApCisJCXJldHVybjsKKworCS8qCisJICogVGhlIGJlYWNvbiBpbnRlcnZhbCBjYW5ub3QgYmUgZGlmZmVyZW50IGZvciBtdWx0aS1BUCBtb2RlLAorCSAqIGFuZCB3ZSByZWFjaCBoZXJlIG9ubHkgZm9yIFZJRiBzbG90cyBncmVhdGVyIHRoYW4gemVybywKKwkgKiBzbyBiZWFjb25faW50ZXJ2YWwgaXMgZ3VhcmFudGVlZCB0byBiZSBzZXQgaW4gY3VyX2NvbmYuCisJICovCisJdHNmYWRqdXN0ID0gY3VyX2NvbmYtPmJlYWNvbl9pbnRlcnZhbCAqIGF2cC0+YnNsb3QgLyBBVEg5S19IVENfTUFYX0JDTl9WSUY7CisJYXZwLT50c2ZhZGp1c3QgPSBjcHVfdG9fbGU2NChUVV9UT19VU0VDKHRzZmFkanVzdCkpOworCisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLAorCQkidHNmYWRqdXN0IGlzOiAlbGx1IGZvciBic2xvdDogJWRcbiIsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpdHNmYWRqdXN0LCBhdnAtPmJzbG90KTsKIH0KIAogc3RhdGljIHZvaWQgYXRoOWtfaHRjX2JlYWNvbl9pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9kZWJ1Zy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTQ4YjNhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZGVidWcuYwpAQCAtMCwwICsxLDk2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJodGMuaCIKKworc3RhdGljIGludCBhdGg5a19kZWJ1Z2ZzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgcmVhZF9maWxlX3RndF9pbnRfc3RhdHMoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhdGg5a19odGNfdGFyZ2V0X2ludF9zdGF0cyBjbWRfcnNwOworCWNoYXIgYnVmWzUxMl07CisJdW5zaWduZWQgaW50IGxlbiA9IDA7CisJaW50IHJldCA9IDA7CisKKwltZW1zZXQoJmNtZF9yc3AsIDAsIHNpemVvZihjbWRfcnNwKSk7CisKKwlhdGg5a19odGNfcHNfd2FrZXVwKHByaXYpOworCisJV01JX0NNRChXTUlfSU5UX1NUQVRTX0NNRElEKTsKKwlpZiAocmV0KSB7CisJCWF0aDlrX2h0Y19wc19yZXN0b3JlKHByaXYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlhdGg5a19odGNfcHNfcmVzdG9yZShwcml2KTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJIiUyMHMgOiAlMTB1XG4iLCAiUlgiLAorCQkJYmUzMl90b19jcHUoY21kX3JzcC5yeCkpOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkiJTIwcyA6ICUxMHVcbiIsICJSWE9STiIsCisJCQliZTMyX3RvX2NwdShjbWRfcnNwLnJ4b3JuKSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwdVxuIiwgIlJYRU9MIiwKKwkJCWJlMzJfdG9fY3B1KGNtZF9yc3Aucnhlb2wpKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJIiUyMHMgOiAlMTB1XG4iLCAiVFhVUk4iLAorCQkJYmUzMl90b19jcHUoY21kX3JzcC50eHVybikpOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkiJTIwcyA6ICUxMHVcbiIsICJUWFRPIiwKKwkJCWJlMzJfdG9fY3B1KGNtZF9yc3AudHh0bykpOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkiJTIwcyA6ICUxMHVcbiIsICJDU1QiLAorCQkJYmUzMl90b19jcHUoY21kX3JzcC5jc3QpKTsKKworCWlmIChsZW4gPiBzaXplb2YoYnVmKSkKKwkJbGVuID0gc2l6ZW9mKGJ1Zik7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfdGd0X2ludF9zdGF0cyA9IHsKKwkucmVhZCA9IHJlYWRfZmlsZV90Z3RfaW50X3N0YXRzLAorCS5vcGVuID0gYXRoOWtfZGVidWdmc19vcGVuLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKK307CisKK3N0YXRpYyBzc2l6ZV90IHJlYWRfZmlsZV90Z3RfdHhfc3RhdHMoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGF0aDlrX2h0Y190YXJnZXRfdHhfc3RhdHMgY21kX3JzcDsKKwljaGFyIGJ1Zls1MTJdOworCXVuc2lnbmVkIGludCBsZW4gPSAwOworCWludCByZXQgPSAwOworCisJbWVtc2V0KCZjbWRfcnNwLCAwLCBzaXplb2YoY21kX3JzcCkpOworCisJYXRoOWtfaHRjX3BzX3dha2V1cChwcml2KTsKKworCVdNSV9DTUQoV01JX1RYX1NUQVRTX0NNRElEKTsKKwlpZiAocmV0KSB7CisJCWF0aDlrX2h0Y19wc19yZXN0b3JlKHByaXYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlhdGg5a19odGNfcHNfcmVzdG9yZShwcml2KTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJIiUyMHMgOiAlMTB1XG4iLCAiWHJldHJpZXMiLAorCQkJYmUzMl90b19jcHUoY21kX3JzcC54cmV0cmllcykpOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkiJTIwcyA6ICUxMHVcbiIsICJGaWZvRXJyIiwKKwkJCWJlMzJfdG9fY3B1KGNtZF9yc3AuZmlmb2VycikpOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkiJTIwcyA6ICUxMHVcbiIsICJGaWx0ZXJlZCIsCisJCQliZTMyX3RvX2NwdShjbWRfcnNwLmZpbHRlcmVkKSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwdVxuIiwgIlRpbWVyRXhwIiwKKwkJCWJlMzJfdG9fY3B1KGNtZF9yc3AudGltZXJfZXhwKSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwdVxuIiwgIlNob3J0UmV0cmllcyIsCisJCQliZTMyX3RvX2NwdShjbWRfcnNwLnNob3J0cmV0cmllcykpOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkiJTIwcyA6ICUxMHVcbiIsICJMb25nUmV0cmllcyIsCisJCQliZTMyX3RvX2NwdShjbWRfcnNwLmxvbmdyZXRyaWVzKSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwdVxuIiwgIlF1ZXVlTnVsbCIsCisJCQliZTMyX3RvX2NwdShjbWRfcnNwLnFudWxsKSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwdVxuIiwgIkVuY2FwRmFpbCIsCisJCQliZTMyX3RvX2NwdShjbWRfcnNwLmVuY2FwX2ZhaWwpKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJIiUyMHMgOiAlMTB1XG4iLCAiTm9CdWYiLAorCQkJYmUzMl90b19jcHUoY21kX3JzcC5ub2J1ZikpOworCisJaWYgKGxlbiA+IHNpemVvZihidWYpKQorCQlsZW4gPSBzaXplb2YoYnVmKTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc190Z3RfdHhfc3RhdHMgPSB7CisJLnJlYWQgPSByZWFkX2ZpbGVfdGd0X3R4X3N0YXRzLAorCS5vcGVuID0gYXRoOWtfZGVidWdmc19vcGVuLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKK307CisKK3N0YXRpYyBzc2l6ZV90IHJlYWRfZmlsZV90Z3Rfcnhfc3RhdHMoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGF0aDlrX2h0Y190YXJnZXRfcnhfc3RhdHMgY21kX3JzcDsKKwljaGFyIGJ1Zls1MTJdOworCXVuc2lnbmVkIGludCBsZW4gPSAwOworCWludCByZXQgPSAwOworCisJbWVtc2V0KCZjbWRfcnNwLCAwLCBzaXplb2YoY21kX3JzcCkpOworCisJYXRoOWtfaHRjX3BzX3dha2V1cChwcml2KTsKKworCVdNSV9DTUQoV01JX1JYX1NUQVRTX0NNRElEKTsKKwlpZiAocmV0KSB7CisJCWF0aDlrX2h0Y19wc19yZXN0b3JlKHByaXYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlhdGg5a19odGNfcHNfcmVzdG9yZShwcml2KTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJIiUyMHMgOiAlMTB1XG4iLCAiTm9CdWYiLAorCQkJYmUzMl90b19jcHUoY21kX3JzcC5ub2J1ZikpOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkiJTIwcyA6ICUxMHVcbiIsICJIb3N0U2VuZCIsCisJCQliZTMyX3RvX2NwdShjbWRfcnNwLmhvc3Rfc2VuZCkpOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkiJTIwcyA6ICUxMHVcbiIsICJIb3N0RG9uZSIsCisJCQliZTMyX3RvX2NwdShjbWRfcnNwLmhvc3RfZG9uZSkpOworCisJaWYgKGxlbiA+IHNpemVvZihidWYpKQorCQlsZW4gPSBzaXplb2YoYnVmKTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc190Z3Rfcnhfc3RhdHMgPSB7CisJLnJlYWQgPSByZWFkX2ZpbGVfdGd0X3J4X3N0YXRzLAorCS5vcGVuID0gYXRoOWtfZGVidWdmc19vcGVuLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKK307CisKK3N0YXRpYyBzc2l6ZV90IHJlYWRfZmlsZV94bWl0KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbNTEyXTsKKwl1bnNpZ25lZCBpbnQgbGVuID0gMDsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJIiUyMHMgOiAlMTB1XG4iLCAiQnVmZmVycyBxdWV1ZWQiLAorCQkJcHJpdi0+ZGVidWcudHhfc3RhdHMuYnVmX3F1ZXVlZCk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkiJTIwcyA6ICUxMHVcbiIsICJCdWZmZXJzIGNvbXBsZXRlZCIsCisJCQlwcml2LT5kZWJ1Zy50eF9zdGF0cy5idWZfY29tcGxldGVkKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwdVxuIiwgIlNLQnMgcXVldWVkIiwKKwkJCXByaXYtPmRlYnVnLnR4X3N0YXRzLnNrYl9xdWV1ZWQpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJIiUyMHMgOiAlMTB1XG4iLCAiU0tCcyBzdWNjZXNzIiwKKwkJCXByaXYtPmRlYnVnLnR4X3N0YXRzLnNrYl9zdWNjZXNzKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwdVxuIiwgIlNLQnMgZmFpbGVkIiwKKwkJCXByaXYtPmRlYnVnLnR4X3N0YXRzLnNrYl9mYWlsZWQpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJIiUyMHMgOiAlMTB1XG4iLCAiQ0FCIHF1ZXVlZCIsCisJCQlwcml2LT5kZWJ1Zy50eF9zdGF0cy5jYWJfcXVldWVkKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJIiUyMHMgOiAlMTB1XG4iLCAiQkUgcXVldWVkIiwKKwkJCXByaXYtPmRlYnVnLnR4X3N0YXRzLnF1ZXVlX3N0YXRzW1dNRV9BQ19CRV0pOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJIiUyMHMgOiAlMTB1XG4iLCAiQksgcXVldWVkIiwKKwkJCXByaXYtPmRlYnVnLnR4X3N0YXRzLnF1ZXVlX3N0YXRzW1dNRV9BQ19CS10pOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJIiUyMHMgOiAlMTB1XG4iLCAiVkkgcXVldWVkIiwKKwkJCXByaXYtPmRlYnVnLnR4X3N0YXRzLnF1ZXVlX3N0YXRzW1dNRV9BQ19WSV0pOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJIiUyMHMgOiAlMTB1XG4iLCAiVk8gcXVldWVkIiwKKwkJCXByaXYtPmRlYnVnLnR4X3N0YXRzLnF1ZXVlX3N0YXRzW1dNRV9BQ19WT10pOworCisJaWYgKGxlbiA+IHNpemVvZihidWYpKQorCQlsZW4gPSBzaXplb2YoYnVmKTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc194bWl0ID0geworCS5yZWFkID0gcmVhZF9maWxlX3htaXQsCisJLm9wZW4gPSBhdGg5a19kZWJ1Z2ZzX29wZW4sCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmxsc2VlayA9IGRlZmF1bHRfbGxzZWVrLAorfTsKKwordm9pZCBhdGg5a19odGNfZXJyX3N0YXRfcngoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAorCQkJICAgc3RydWN0IGF0aF9odGNfcnhfc3RhdHVzICpyeHMpCit7CisjZGVmaW5lIFJYX1BIWV9FUlJfSU5DKGMpIHByaXYtPmRlYnVnLnJ4X3N0YXRzLmVycl9waHlfc3RhdHNbY10rKworCisJaWYgKHJ4cy0+cnNfc3RhdHVzICYgQVRIOUtfUlhFUlJfQ1JDKQorCQlwcml2LT5kZWJ1Zy5yeF9zdGF0cy5lcnJfY3JjKys7CisJaWYgKHJ4cy0+cnNfc3RhdHVzICYgQVRIOUtfUlhFUlJfREVDUllQVCkKKwkJcHJpdi0+ZGVidWcucnhfc3RhdHMuZXJyX2RlY3J5cHRfY3JjKys7CisJaWYgKHJ4cy0+cnNfc3RhdHVzICYgQVRIOUtfUlhFUlJfTUlDKQorCQlwcml2LT5kZWJ1Zy5yeF9zdGF0cy5lcnJfbWljKys7CisJaWYgKHJ4cy0+cnNfc3RhdHVzICYgQVRIOUtfUlhfREVMSU1fQ1JDX1BSRSkKKwkJcHJpdi0+ZGVidWcucnhfc3RhdHMuZXJyX3ByZV9kZWxpbSsrOworCWlmIChyeHMtPnJzX3N0YXR1cyAmIEFUSDlLX1JYX0RFTElNX0NSQ19QT1NUKQorCQlwcml2LT5kZWJ1Zy5yeF9zdGF0cy5lcnJfcG9zdF9kZWxpbSsrOworCWlmIChyeHMtPnJzX3N0YXR1cyAmIEFUSDlLX1JYX0RFQ1JZUFRfQlVTWSkKKwkJcHJpdi0+ZGVidWcucnhfc3RhdHMuZXJyX2RlY3J5cHRfYnVzeSsrOworCisJaWYgKHJ4cy0+cnNfc3RhdHVzICYgQVRIOUtfUlhFUlJfUEhZKSB7CisJCXByaXYtPmRlYnVnLnJ4X3N0YXRzLmVycl9waHkrKzsKKwkJaWYgKHJ4cy0+cnNfcGh5ZXJyIDwgQVRIOUtfUEhZRVJSX01BWCkKKwkJCVJYX1BIWV9FUlJfSU5DKHJ4cy0+cnNfcGh5ZXJyKTsKKwl9CisKKyN1bmRlZiBSWF9QSFlfRVJSX0lOQworfQorCitzdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfcmVjdihzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisjZGVmaW5lIFBIWV9FUlIocywgcCkJCQkJCQkJXAorCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sICIlMjBzIDogJTEwdVxuIiwgcywJXAorCQkJcHJpdi0+ZGVidWcucnhfc3RhdHMuZXJyX3BoeV9zdGF0c1twXSk7CisKKwlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciAqYnVmOworCXVuc2lnbmVkIGludCBsZW4gPSAwLCBzaXplID0gMTUwMDsKKwlzc2l6ZV90IHJldHZhbCA9IDA7CisKKwlidWYgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmIChidWYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUyMHMgOiAlMTB1XG4iLCAiU0tCcyBhbGxvY2F0ZWQiLAorCQkJcHJpdi0+ZGVidWcucnhfc3RhdHMuc2tiX2FsbG9jYXRlZCk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwdVxuIiwgIlNLQnMgY29tcGxldGVkIiwKKwkJCXByaXYtPmRlYnVnLnJ4X3N0YXRzLnNrYl9jb21wbGV0ZWQpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkiJTIwcyA6ICUxMHVcbiIsICJTS0JzIERyb3BwZWQiLAorCQkJcHJpdi0+ZGVidWcucnhfc3RhdHMuc2tiX2Ryb3BwZWQpOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwdVxuIiwgIkNSQyBFUlIiLAorCQkJcHJpdi0+ZGVidWcucnhfc3RhdHMuZXJyX2NyYyk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwdVxuIiwgIkRFQ1JZUFQgQ1JDIEVSUiIsCisJCQlwcml2LT5kZWJ1Zy5yeF9zdGF0cy5lcnJfZGVjcnlwdF9jcmMpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkiJTIwcyA6ICUxMHVcbiIsICJNSUMgRVJSIiwKKwkJCXByaXYtPmRlYnVnLnJ4X3N0YXRzLmVycl9taWMpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkiJTIwcyA6ICUxMHVcbiIsICJQUkUtREVMSU0gQ1JDIEVSUiIsCisJCQlwcml2LT5kZWJ1Zy5yeF9zdGF0cy5lcnJfcHJlX2RlbGltKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUyMHMgOiAlMTB1XG4iLCAiUE9TVC1ERUxJTSBDUkMgRVJSIiwKKwkJCXByaXYtPmRlYnVnLnJ4X3N0YXRzLmVycl9wb3N0X2RlbGltKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUyMHMgOiAlMTB1XG4iLCAiREVDUllQVCBCVVNZIEVSUiIsCisJCQlwcml2LT5kZWJ1Zy5yeF9zdGF0cy5lcnJfZGVjcnlwdF9idXN5KTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUyMHMgOiAlMTB1XG4iLCAiVE9UQUwgUEhZIEVSUiIsCisJCQlwcml2LT5kZWJ1Zy5yeF9zdGF0cy5lcnJfcGh5KTsKKworCisJUEhZX0VSUigiVU5ERVJSVU4iLCBBVEg5S19QSFlFUlJfVU5ERVJSVU4pOworCVBIWV9FUlIoIlRJTUlORyIsIEFUSDlLX1BIWUVSUl9USU1JTkcpOworCVBIWV9FUlIoIlBBUklUWSIsIEFUSDlLX1BIWUVSUl9QQVJJVFkpOworCVBIWV9FUlIoIlJBVEUiLCBBVEg5S19QSFlFUlJfUkFURSk7CisJUEhZX0VSUigiTEVOR1RIIiwgQVRIOUtfUEhZRVJSX0xFTkdUSCk7CisJUEhZX0VSUigiUkFEQVIiLCBBVEg5S19QSFlFUlJfUkFEQVIpOworCVBIWV9FUlIoIlNFUlZJQ0UiLCBBVEg5S19QSFlFUlJfU0VSVklDRSk7CisJUEhZX0VSUigiVE9SIiwgQVRIOUtfUEhZRVJSX1RPUik7CisJUEhZX0VSUigiT0ZETS1USU1JTkciLCBBVEg5S19QSFlFUlJfT0ZETV9USU1JTkcpOworCVBIWV9FUlIoIk9GRE0tU0lHTkFMLVBBUklUWSIsIEFUSDlLX1BIWUVSUl9PRkRNX1NJR05BTF9QQVJJVFkpOworCVBIWV9FUlIoIk9GRE0tUkFURSIsIEFUSDlLX1BIWUVSUl9PRkRNX1JBVEVfSUxMRUdBTCk7CisJUEhZX0VSUigiT0ZETS1MRU5HVEgiLCBBVEg5S19QSFlFUlJfT0ZETV9MRU5HVEhfSUxMRUdBTCk7CisJUEhZX0VSUigiT0ZETS1QT1dFUi1EUk9QIiwgQVRIOUtfUEhZRVJSX09GRE1fUE9XRVJfRFJPUCk7CisJUEhZX0VSUigiT0ZETS1TRVJWSUNFIiwgQVRIOUtfUEhZRVJSX09GRE1fU0VSVklDRSk7CisJUEhZX0VSUigiT0ZETS1SRVNUQVJUIiwgQVRIOUtfUEhZRVJSX09GRE1fUkVTVEFSVCk7CisJUEhZX0VSUigiRkFMU0UtUkFEQVItRVhUIiwgQVRIOUtfUEhZRVJSX0ZBTFNFX1JBREFSX0VYVCk7CisJUEhZX0VSUigiQ0NLLVRJTUlORyIsIEFUSDlLX1BIWUVSUl9DQ0tfVElNSU5HKTsKKwlQSFlfRVJSKCJDQ0stSEVBREVSLUNSQyIsIEFUSDlLX1BIWUVSUl9DQ0tfSEVBREVSX0NSQyk7CisJUEhZX0VSUigiQ0NLLVJBVEUiLCBBVEg5S19QSFlFUlJfQ0NLX1JBVEVfSUxMRUdBTCk7CisJUEhZX0VSUigiQ0NLLVNFUlZJQ0UiLCBBVEg5S19QSFlFUlJfQ0NLX1NFUlZJQ0UpOworCVBIWV9FUlIoIkNDSy1SRVNUQVJUIiwgQVRIOUtfUEhZRVJSX0NDS19SRVNUQVJUKTsKKwlQSFlfRVJSKCJDQ0stTEVOR1RIIiwgQVRIOUtfUEhZRVJSX0NDS19MRU5HVEhfSUxMRUdBTCk7CisJUEhZX0VSUigiQ0NLLVBPV0VSLURST1AiLCBBVEg5S19QSFlFUlJfQ0NLX1BPV0VSX0RST1ApOworCVBIWV9FUlIoIkhULUNSQyIsIEFUSDlLX1BIWUVSUl9IVF9DUkNfRVJST1IpOworCVBIWV9FUlIoIkhULUxFTkdUSCIsIEFUSDlLX1BIWUVSUl9IVF9MRU5HVEhfSUxMRUdBTCk7CisJUEhZX0VSUigiSFQtUkFURSIsIEFUSDlLX1BIWUVSUl9IVF9SQVRFX0lMTEVHQUwpOworCisJaWYgKGxlbiA+IHNpemUpCisJCWxlbiA9IHNpemU7CisKKwlyZXR2YWwgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKKwlrZnJlZShidWYpOworCisJcmV0dXJuIHJldHZhbDsKKworI3VuZGVmIFBIWV9FUlIKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc19yZWN2ID0geworCS5yZWFkID0gcmVhZF9maWxlX3JlY3YsCisJLm9wZW4gPSBhdGg5a19kZWJ1Z2ZzX29wZW4sCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmxsc2VlayA9IGRlZmF1bHRfbGxzZWVrLAorfTsKKworc3RhdGljIHNzaXplX3QgcmVhZF9maWxlX3Nsb3Qoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1Zls1MTJdOworCXVuc2lnbmVkIGludCBsZW4gPSAwOworCisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLCAiVFggc2xvdCBiaXRtYXAgOiAiKTsKKworCWxlbiArPSBiaXRtYXBfc2NucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkgICAgICAgcHJpdi0+dHgudHhfc2xvdCwgTUFYX1RYX0JVRl9OVU0pOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sICJcbiIpOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkiVXNlZCBzbG90cyAgICAgOiAlZFxuIiwKKwkJCWJpdG1hcF93ZWlnaHQocHJpdi0+dHgudHhfc2xvdCwgTUFYX1RYX0JVRl9OVU0pKTsKKworCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKKworCWlmIChsZW4gPiBzaXplb2YoYnVmKSkKKwkJbGVuID0gc2l6ZW9mKGJ1Zik7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfc2xvdCA9IHsKKwkucmVhZCA9IHJlYWRfZmlsZV9zbG90LAorCS5vcGVuID0gYXRoOWtfZGVidWdmc19vcGVuLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKK307CisKK3N0YXRpYyBzc2l6ZV90IHJlYWRfZmlsZV9xdWV1ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1Zls1MTJdOworCXVuc2lnbmVkIGludCBsZW4gPSAwOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sICIlMjBzIDogJTEwdVxuIiwKKwkJCSJNZ210IGVuZHBvaW50Iiwgc2tiX3F1ZXVlX2xlbigmcHJpdi0+dHgubWdtdF9lcF9xdWV1ZSkpOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sICIlMjBzIDogJTEwdVxuIiwKKwkJCSJDYWIgZW5kcG9pbnQiLCBza2JfcXVldWVfbGVuKCZwcml2LT50eC5jYWJfZXBfcXVldWUpKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLCAiJTIwcyA6ICUxMHVcbiIsCisJCQkiRGF0YSBCRSBlbmRwb2ludCIsIHNrYl9xdWV1ZV9sZW4oJnByaXYtPnR4LmRhdGFfYmVfcXVldWUpKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLCAiJTIwcyA6ICUxMHVcbiIsCisJCQkiRGF0YSBCSyBlbmRwb2ludCIsIHNrYl9xdWV1ZV9sZW4oJnByaXYtPnR4LmRhdGFfYmtfcXVldWUpKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLCAiJTIwcyA6ICUxMHVcbiIsCisJCQkiRGF0YSBWSSBlbmRwb2ludCIsIHNrYl9xdWV1ZV9sZW4oJnByaXYtPnR4LmRhdGFfdmlfcXVldWUpKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLCAiJTIwcyA6ICUxMHVcbiIsCisJCQkiRGF0YSBWTyBlbmRwb2ludCIsIHNrYl9xdWV1ZV9sZW4oJnByaXYtPnR4LmRhdGFfdm9fcXVldWUpKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLCAiJTIwcyA6ICUxMHVcbiIsCisJCQkiRmFpbGVkIHF1ZXVlIiwgc2tiX3F1ZXVlX2xlbigmcHJpdi0+dHgudHhfZmFpbGVkKSk7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPnR4LnR4X2xvY2spOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLCAiJTIwcyA6ICUxMHVcbiIsCisJCQkiUXVldWVkIGNvdW50IiwgcHJpdi0+dHgucXVldWVkX2NudCk7CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4LnR4X2xvY2spOworCisJaWYgKGxlbiA+IHNpemVvZihidWYpKQorCQlsZW4gPSBzaXplb2YoYnVmKTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKKworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX3F1ZXVlID0geworCS5yZWFkID0gcmVhZF9maWxlX3F1ZXVlLAorCS5vcGVuID0gYXRoOWtfZGVidWdmc19vcGVuLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKK307CisKK3N0YXRpYyBzc2l6ZV90IHJlYWRfZmlsZV9kZWJ1ZyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHByaXYtPmFoKTsKKwljaGFyIGJ1ZlszMl07CisJdW5zaWduZWQgaW50IGxlbjsKKworCWxlbiA9IHNwcmludGYoYnVmLCAiMHglMDh4XG4iLCBjb21tb24tPmRlYnVnX21hc2spOworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIHNzaXplX3Qgd3JpdGVfZmlsZV9kZWJ1ZyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHByaXYtPmFoKTsKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisJY2hhciBidWZbMzJdOworCXNzaXplX3QgbGVuOworCisJbGVuID0gbWluKGNvdW50LCBzaXplb2YoYnVmKSAtIDEpOworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBsZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWJ1ZltsZW5dID0gJ1wwJzsKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmbWFzaykpCisJCXJldHVybiAtRUlOVkFMOworCisJY29tbW9uLT5kZWJ1Z19tYXNrID0gbWFzazsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfZGVidWcgPSB7CisJLnJlYWQgPSByZWFkX2ZpbGVfZGVidWcsCisJLndyaXRlID0gd3JpdGVfZmlsZV9kZWJ1ZywKKwkub3BlbiA9IGF0aDlrX2RlYnVnZnNfb3BlbiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssCit9OworCitzdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfYmFzZV9lZXByb20oc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHByaXYtPmFoKTsKKwlzdHJ1Y3QgYmFzZV9lZXBfaGVhZGVyICpwQmFzZSA9IE5VTEw7CisJdW5zaWduZWQgaW50IGxlbiA9IDAsIHNpemUgPSAxNTAwOworCXNzaXplX3QgcmV0dmFsID0gMDsKKwljaGFyICpidWY7CisKKwkvKgorCSAqIFRoaXMgY2FuIGJlIGRvbmUgc2luY2UgYWxsIHRoZSAzIEVFUFJPTSBmYW1pbGllcyBoYXZlIHRoZQorCSAqIHNhbWUgYmFzZSBoZWFkZXIgdXB0byBhIGNlcnRhaW4gcG9pbnQsIGFuZCB3ZSBhcmUgaW50ZXJlc3RlZCBpbgorCSAqIHRoZSBkYXRhIG9ubHkgdXB0byB0aGF0IHBvaW50LgorCSAqLworCisJaWYgKEFSX1NSRVZfOTI3MShwcml2LT5haCkpCisJCXBCYXNlID0gKHN0cnVjdCBiYXNlX2VlcF9oZWFkZXIgKikKKwkJCSZwcml2LT5haC0+ZWVwcm9tLm1hcDRrLmJhc2VFZXBIZWFkZXI7CisJZWxzZSBpZiAocHJpdi0+YWgtPmh3X3ZlcnNpb24udXNiZGV2ID09IEFSOTI4MF9VU0IpCisJCXBCYXNlID0gKHN0cnVjdCBiYXNlX2VlcF9oZWFkZXIgKikKKwkJCSZwcml2LT5haC0+ZWVwcm9tLmRlZi5iYXNlRWVwSGVhZGVyOworCWVsc2UgaWYgKHByaXYtPmFoLT5od192ZXJzaW9uLnVzYmRldiA9PSBBUjkyODdfVVNCKQorCQlwQmFzZSA9IChzdHJ1Y3QgYmFzZV9lZXBfaGVhZGVyICopCisJCQkmcHJpdi0+YWgtPmVlcHJvbS5tYXA5Mjg3LmJhc2VFZXBIZWFkZXI7CisKKwlpZiAocEJhc2UgPT0gTlVMTCkgeworCQlhdGhfZXJyKGNvbW1vbiwgIlVua25vd24gRUVQUk9NIHR5cGVcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlidWYgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmIChidWYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUyMHMgOiAlMTBkXG4iLCAiTWFqb3IgVmVyc2lvbiIsCisJCQlwQmFzZS0+dmVyc2lvbiA+PiAxMik7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwZFxuIiwgIk1pbm9yIFZlcnNpb24iLAorCQkJcEJhc2UtPnZlcnNpb24gJiAweEZGRik7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwZFxuIiwgIkNoZWNrc3VtIiwKKwkJCXBCYXNlLT5jaGVja3N1bSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwZFxuIiwgIkxlbmd0aCIsCisJCQlwQmFzZS0+bGVuZ3RoKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUyMHMgOiAlMTBkXG4iLCAiUmVnRG9tYWluMSIsCisJCQlwQmFzZS0+cmVnRG1uWzBdKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUyMHMgOiAlMTBkXG4iLCAiUmVnRG9tYWluMiIsCisJCQlwQmFzZS0+cmVnRG1uWzFdKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUyMHMgOiAlMTBkXG4iLAorCQkJIlRYIE1hc2siLCBwQmFzZS0+dHhNYXNrKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUyMHMgOiAlMTBkXG4iLAorCQkJIlJYIE1hc2siLCBwQmFzZS0+cnhNYXNrKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUyMHMgOiAlMTBkXG4iLAorCQkJIkFsbG93IDVHSHoiLAorCQkJISEocEJhc2UtPm9wQ2FwRmxhZ3MgJiBBUjU0MTZfT1BGTEFHU18xMUEpKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUyMHMgOiAlMTBkXG4iLAorCQkJIkFsbG93IDJHSHoiLAorCQkJISEocEJhc2UtPm9wQ2FwRmxhZ3MgJiBBUjU0MTZfT1BGTEFHU18xMUcpKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUyMHMgOiAlMTBkXG4iLAorCQkJIkRpc2FibGUgMkdIeiBIVDIwIiwKKwkJCSEhKHBCYXNlLT5vcENhcEZsYWdzICYgQVI1NDE2X09QRkxBR1NfTl8yR19IVDIwKSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwZFxuIiwKKwkJCSJEaXNhYmxlIDJHSHogSFQ0MCIsCisJCQkhIShwQmFzZS0+b3BDYXBGbGFncyAmIEFSNTQxNl9PUEZMQUdTX05fMkdfSFQ0MCkpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkiJTIwcyA6ICUxMGRcbiIsCisJCQkiRGlzYWJsZSA1R2h6IEhUMjAiLAorCQkJISEocEJhc2UtPm9wQ2FwRmxhZ3MgJiBBUjU0MTZfT1BGTEFHU19OXzVHX0hUMjApKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUyMHMgOiAlMTBkXG4iLAorCQkJIkRpc2FibGUgNUdoeiBIVDQwIiwKKwkJCSEhKHBCYXNlLT5vcENhcEZsYWdzICYgQVI1NDE2X09QRkxBR1NfTl81R19IVDQwKSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwZFxuIiwKKwkJCSJCaWcgRW5kaWFuIiwKKwkJCSEhKHBCYXNlLT5lZXBNaXNjICYgMHgwMSkpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkiJTIwcyA6ICUxMGRcbiIsCisJCQkiQ2FsIEJpbiBNYWpvciBWZXIiLAorCQkJKHBCYXNlLT5iaW5CdWlsZE51bWJlciA+PiAyNCkgJiAweEZGKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUyMHMgOiAlMTBkXG4iLAorCQkJIkNhbCBCaW4gTWlub3IgVmVyIiwKKwkJCShwQmFzZS0+YmluQnVpbGROdW1iZXIgPj4gMTYpICYgMHhGRik7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCSIlMjBzIDogJTEwZFxuIiwKKwkJCSJDYWwgQmluIEJ1aWxkIiwKKwkJCShwQmFzZS0+YmluQnVpbGROdW1iZXIgPj4gOCkgJiAweEZGKTsKKworCS8qCisJICogVUI5MSBzcGVjaWZpYyBkYXRhLgorCSAqLworCWlmIChBUl9TUkVWXzkyNzEocHJpdi0+YWgpKSB7CisJCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXJfNGsgKnBCYXNlNGsgPQorCQkJJnByaXYtPmFoLT5lZXByb20ubWFwNGsuYmFzZUVlcEhlYWRlcjsKKworCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJCSIlMjBzIDogJTEwZFxuIiwKKwkJCQkiVFggR2FpbiB0eXBlIiwKKwkJCQlwQmFzZTRrLT50eEdhaW5UeXBlKTsKKwl9CisKKwkvKgorCSAqIFVCOTUgc3BlY2lmaWMgZGF0YS4KKwkgKi8KKwlpZiAocHJpdi0+YWgtPmh3X3ZlcnNpb24udXNiZGV2ID09IEFSOTI4N19VU0IpIHsKKwkJc3RydWN0IGJhc2VfZWVwX2FyOTI4N19oZWFkZXIgKnBCYXNlOTI4NyA9CisJCQkmcHJpdi0+YWgtPmVlcHJvbS5tYXA5Mjg3LmJhc2VFZXBIZWFkZXI7CisKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCQkiJTIwcyA6ICUxMGRkQlxuIiwKKwkJCQkiUG93ZXIgVGFibGUgT2Zmc2V0IiwKKwkJCQlwQmFzZTkyODctPnB3clRhYmxlT2Zmc2V0KTsKKworCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJCSIlMjBzIDogJTEwZFxuIiwKKwkJCQkiT3Blbkxvb3AgUG93ZXIgQ3RybCIsCisJCQkJcEJhc2U5Mjg3LT5vcGVuTG9vcFB3ckNudGwpOworCX0KKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkiJTIwcyA6ICUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYXG4iLAorCQkJIk1hY0FkZHJlc3MiLAorCQkJcEJhc2UtPm1hY0FkZHJbMF0sIHBCYXNlLT5tYWNBZGRyWzFdLCBwQmFzZS0+bWFjQWRkclsyXSwKKwkJCXBCYXNlLT5tYWNBZGRyWzNdLCBwQmFzZS0+bWFjQWRkcls0XSwgcEJhc2UtPm1hY0FkZHJbNV0pOworCWlmIChsZW4gPiBzaXplKQorCQlsZW4gPSBzaXplOworCisJcmV0dmFsID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7CisJa2ZyZWUoYnVmKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfYmFzZV9lZXByb20gPSB7CisJLnJlYWQgPSByZWFkX2ZpbGVfYmFzZV9lZXByb20sCisJLm9wZW4gPSBhdGg5a19kZWJ1Z2ZzX29wZW4sCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmxsc2VlayA9IGRlZmF1bHRfbGxzZWVrLAorfTsKKworc3RhdGljIHNzaXplX3QgcmVhZF80a19tb2RhbF9lZXByb20oc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJICAgIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisjZGVmaW5lIFBSX0VFUChfcywgX3ZhbCkJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLCAiJTIwcyA6ICUxMGRcbiIsCVwKKwkJCQlfcywgKF92YWwpKTsJCQkJXAorCX0gd2hpbGUgKDApCisKKwlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbCA9ICZwcml2LT5haC0+ZWVwcm9tLm1hcDRrLm1vZGFsSGVhZGVyOworCXVuc2lnbmVkIGludCBsZW4gPSAwLCBzaXplID0gMjA0ODsKKwlzc2l6ZV90IHJldHZhbCA9IDA7CisJY2hhciAqYnVmOworCisJYnVmID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJUFJfRUVQKCJDaGFpbjAgQW50LiBDb250cm9sIiwgcE1vZGFsLT5hbnRDdHJsQ2hhaW5bMF0pOworCVBSX0VFUCgiQW50LiBDb21tb24gQ29udHJvbCIsIHBNb2RhbC0+YW50Q3RybENvbW1vbik7CisJUFJfRUVQKCJDaGFpbjAgQW50LiBHYWluIiwgcE1vZGFsLT5hbnRlbm5hR2FpbkNoWzBdKTsKKwlQUl9FRVAoIlN3aXRjaCBTZXR0bGUiLCBwTW9kYWwtPnN3aXRjaFNldHRsaW5nKTsKKwlQUl9FRVAoIkNoYWluMCBUeFJ4QXR0ZW4iLCBwTW9kYWwtPnR4UnhBdHRlbkNoWzBdKTsKKwlQUl9FRVAoIkNoYWluMCBSeFR4TWFyZ2luIiwgcE1vZGFsLT5yeFR4TWFyZ2luQ2hbMF0pOworCVBSX0VFUCgiQURDIERlc2lyZWQgc2l6ZSIsIHBNb2RhbC0+YWRjRGVzaXJlZFNpemUpOworCVBSX0VFUCgiUEdBIERlc2lyZWQgc2l6ZSIsIHBNb2RhbC0+cGdhRGVzaXJlZFNpemUpOworCVBSX0VFUCgiQ2hhaW4wIHhsbmEgR2FpbiIsIHBNb2RhbC0+eGxuYUdhaW5DaFswXSk7CisJUFJfRUVQKCJ0eEVuZFRvWHBhT2ZmIiwgcE1vZGFsLT50eEVuZFRvWHBhT2ZmKTsKKwlQUl9FRVAoInR4RW5kVG9SeE9uIiwgcE1vZGFsLT50eEVuZFRvUnhPbik7CisJUFJfRUVQKCJ0eEZyYW1lVG9YcGFPbiIsIHBNb2RhbC0+dHhGcmFtZVRvWHBhT24pOworCVBSX0VFUCgiQ0NBIFRocmVzaG9sZCkiLCBwTW9kYWwtPnRocmVzaDYyKTsKKwlQUl9FRVAoIkNoYWluMCBORiBUaHJlc2hvbGQiLCBwTW9kYWwtPm5vaXNlRmxvb3JUaHJlc2hDaFswXSk7CisJUFJfRUVQKCJ4cGRHYWluIiwgcE1vZGFsLT54cGRHYWluKTsKKwlQUl9FRVAoIkV4dGVybmFsIFBEIiwgcE1vZGFsLT54cGQpOworCVBSX0VFUCgiQ2hhaW4wIEkgQ29lZmZpY2llbnQiLCBwTW9kYWwtPmlxQ2FsSUNoWzBdKTsKKwlQUl9FRVAoIkNoYWluMCBRIENvZWZmaWNpZW50IiwgcE1vZGFsLT5pcUNhbFFDaFswXSk7CisJUFJfRUVQKCJwZEdhaW5PdmVybGFwIiwgcE1vZGFsLT5wZEdhaW5PdmVybGFwKTsKKwlQUl9FRVAoIk8vRCBCaWFzIFZlcnNpb24iLCBwTW9kYWwtPnZlcnNpb24pOworCVBSX0VFUCgiQ0NLIE91dHB1dEJpYXMiLCBwTW9kYWwtPm9iXzApOworCVBSX0VFUCgiQlBTSyBPdXRwdXRCaWFzIiwgcE1vZGFsLT5vYl8xKTsKKwlQUl9FRVAoIlFQU0sgT3V0cHV0QmlhcyIsIHBNb2RhbC0+b2JfMik7CisJUFJfRUVQKCIxNlFBTSBPdXRwdXRCaWFzIiwgcE1vZGFsLT5vYl8zKTsKKwlQUl9FRVAoIjY0UUFNIE91dHB1dEJpYXMiLCBwTW9kYWwtPm9iXzQpOworCVBSX0VFUCgiQ0NLIERyaXZlcjFfQmlhcyIsIHBNb2RhbC0+ZGIxXzApOworCVBSX0VFUCgiQlBTSyBEcml2ZXIxX0JpYXMiLCBwTW9kYWwtPmRiMV8xKTsKKwlQUl9FRVAoIlFQU0sgRHJpdmVyMV9CaWFzIiwgcE1vZGFsLT5kYjFfMik7CisJUFJfRUVQKCIxNlFBTSBEcml2ZXIxX0JpYXMiLCBwTW9kYWwtPmRiMV8zKTsKKwlQUl9FRVAoIjY0UUFNIERyaXZlcjFfQmlhcyIsIHBNb2RhbC0+ZGIxXzQpOworCVBSX0VFUCgiQ0NLIERyaXZlcjJfQmlhcyIsIHBNb2RhbC0+ZGIyXzApOworCVBSX0VFUCgiQlBTSyBEcml2ZXIyX0JpYXMiLCBwTW9kYWwtPmRiMl8xKTsKKwlQUl9FRVAoIlFQU0sgRHJpdmVyMl9CaWFzIiwgcE1vZGFsLT5kYjJfMik7CisJUFJfRUVQKCIxNlFBTSBEcml2ZXIyX0JpYXMiLCBwTW9kYWwtPmRiMl8zKTsKKwlQUl9FRVAoIjY0UUFNIERyaXZlcjJfQmlhcyIsIHBNb2RhbC0+ZGIyXzQpOworCVBSX0VFUCgieFBBIEJpYXMgTGV2ZWwiLCBwTW9kYWwtPnhwYUJpYXNMdmwpOworCVBSX0VFUCgidHhGcmFtZVRvRGF0YVN0YXJ0IiwgcE1vZGFsLT50eEZyYW1lVG9EYXRhU3RhcnQpOworCVBSX0VFUCgidHhGcmFtZVRvUGFPbiIsIHBNb2RhbC0+dHhGcmFtZVRvUGFPbik7CisJUFJfRUVQKCJIVDQwIFBvd2VyIEluYy4iLCBwTW9kYWwtPmh0NDBQb3dlckluY0ZvclBkYWRjKTsKKwlQUl9FRVAoIkNoYWluMCBic3dBdHRlbiIsIHBNb2RhbC0+YnN3QXR0ZW5bMF0pOworCVBSX0VFUCgiQ2hhaW4wIGJzd01hcmdpbiIsIHBNb2RhbC0+YnN3TWFyZ2luWzBdKTsKKwlQUl9FRVAoIkhUNDAgU3dpdGNoIFNldHRsZSIsIHBNb2RhbC0+c3dTZXR0bGVIdDQwKTsKKwlQUl9FRVAoIkNoYWluMCB4YXR0ZW4yRGIiLCBwTW9kYWwtPnhhdHRlbjJEYlswXSk7CisJUFJfRUVQKCJDaGFpbjAgeGF0dGVuMk1hcmdpbiIsIHBNb2RhbC0+eGF0dGVuMk1hcmdpblswXSk7CisJUFJfRUVQKCJBbnQuIERpdmVyc2l0eSBjdGwxIiwgcE1vZGFsLT5hbnRkaXZfY3RsMSk7CisJUFJfRUVQKCJBbnQuIERpdmVyc2l0eSBjdGwyIiwgcE1vZGFsLT5hbnRkaXZfY3RsMik7CisJUFJfRUVQKCJUWCBEaXZlcnNpdHkiLCBwTW9kYWwtPnR4X2RpdmVyc2l0eSk7CisKKwlpZiAobGVuID4gc2l6ZSkKKwkJbGVuID0gc2l6ZTsKKworCXJldHZhbCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOworCWtmcmVlKGJ1Zik7CisKKwlyZXR1cm4gcmV0dmFsOworCisjdW5kZWYgUFJfRUVQCit9CisKK3N0YXRpYyBzc2l6ZV90IHJlYWRfZGVmX21vZGFsX2VlcHJvbShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkgICAgIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworI2RlZmluZSBQUl9FRVAoX3MsIF92YWwpCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKHBCYXNlLT5vcENhcEZsYWdzICYgQVI1NDE2X09QRkxBR1NfMTFHKSB7CQlcCisJCQlwTW9kYWwgPSAmcHJpdi0+YWgtPmVlcHJvbS5kZWYubW9kYWxIZWFkZXJbMV07CVwKKwkJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sICIlMjBzIDogJThkJTdzIiwgXAorCQkJCQlfcywgKF92YWwpLCAifCIpOwkJXAorCQl9CQkJCQkJCVwKKwkJaWYgKHBCYXNlLT5vcENhcEZsYWdzICYgQVI1NDE2X09QRkxBR1NfMTFBKSB7CQlcCisJCQlwTW9kYWwgPSAmcHJpdi0+YWgtPmVlcHJvbS5kZWYubW9kYWxIZWFkZXJbMF07CVwKKwkJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sICIlOWRcbiIsIFwKKwkJCQkJKF92YWwpKTsJCQlcCisJCX0JCQkJCQkJXAorCX0gd2hpbGUgKDApCisKKwlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGJhc2VfZWVwX2hlYWRlciAqcEJhc2UgPSAmcHJpdi0+YWgtPmVlcHJvbS5kZWYuYmFzZUVlcEhlYWRlcjsKKwlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgbGVuID0gMCwgc2l6ZSA9IDM1MDA7CisJc3NpemVfdCByZXR2YWwgPSAwOworCWNoYXIgKmJ1ZjsKKworCWJ1ZiA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkiJTMxcyAlMTVzXG4iLCAiMkciLCAiNUciKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplIC0gbGVuLAorCQkJIiUzMnMgJTE2c1xuIiwgIj09PT0iLCAiPT09PVxuIik7CisKKwlQUl9FRVAoIkNoYWluMCBBbnQuIENvbnRyb2wiLCBwTW9kYWwtPmFudEN0cmxDaGFpblswXSk7CisJUFJfRUVQKCJDaGFpbjEgQW50LiBDb250cm9sIiwgcE1vZGFsLT5hbnRDdHJsQ2hhaW5bMV0pOworCVBSX0VFUCgiQ2hhaW4yIEFudC4gQ29udHJvbCIsIHBNb2RhbC0+YW50Q3RybENoYWluWzJdKTsKKwlQUl9FRVAoIkFudC4gQ29tbW9uIENvbnRyb2wiLCBwTW9kYWwtPmFudEN0cmxDb21tb24pOworCVBSX0VFUCgiQ2hhaW4wIEFudC4gR2FpbiIsIHBNb2RhbC0+YW50ZW5uYUdhaW5DaFswXSk7CisJUFJfRUVQKCJDaGFpbjEgQW50LiBHYWluIiwgcE1vZGFsLT5hbnRlbm5hR2FpbkNoWzFdKTsKKwlQUl9FRVAoIkNoYWluMiBBbnQuIEdhaW4iLCBwTW9kYWwtPmFudGVubmFHYWluQ2hbMl0pOworCVBSX0VFUCgiU3dpdGNoIFNldHRsZSIsIHBNb2RhbC0+c3dpdGNoU2V0dGxpbmcpOworCVBSX0VFUCgiQ2hhaW4wIFR4UnhBdHRlbiIsIHBNb2RhbC0+dHhSeEF0dGVuQ2hbMF0pOworCVBSX0VFUCgiQ2hhaW4xIFR4UnhBdHRlbiIsIHBNb2RhbC0+dHhSeEF0dGVuQ2hbMV0pOworCVBSX0VFUCgiQ2hhaW4yIFR4UnhBdHRlbiIsIHBNb2RhbC0+dHhSeEF0dGVuQ2hbMl0pOworCVBSX0VFUCgiQ2hhaW4wIFJ4VHhNYXJnaW4iLCBwTW9kYWwtPnJ4VHhNYXJnaW5DaFswXSk7CisJUFJfRUVQKCJDaGFpbjEgUnhUeE1hcmdpbiIsIHBNb2RhbC0+cnhUeE1hcmdpbkNoWzFdKTsKKwlQUl9FRVAoIkNoYWluMiBSeFR4TWFyZ2luIiwgcE1vZGFsLT5yeFR4TWFyZ2luQ2hbMl0pOworCVBSX0VFUCgiQURDIERlc2lyZWQgc2l6ZSIsIHBNb2RhbC0+YWRjRGVzaXJlZFNpemUpOworCVBSX0VFUCgiUEdBIERlc2lyZWQgc2l6ZSIsIHBNb2RhbC0+cGdhRGVzaXJlZFNpemUpOworCVBSX0VFUCgiQ2hhaW4wIHhsbmEgR2FpbiIsIHBNb2RhbC0+eGxuYUdhaW5DaFswXSk7CisJUFJfRUVQKCJDaGFpbjEgeGxuYSBHYWluIiwgcE1vZGFsLT54bG5hR2FpbkNoWzFdKTsKKwlQUl9FRVAoIkNoYWluMiB4bG5hIEdhaW4iLCBwTW9kYWwtPnhsbmFHYWluQ2hbMl0pOworCVBSX0VFUCgidHhFbmRUb1hwYU9mZiIsIHBNb2RhbC0+dHhFbmRUb1hwYU9mZik7CisJUFJfRUVQKCJ0eEVuZFRvUnhPbiIsIHBNb2RhbC0+dHhFbmRUb1J4T24pOworCVBSX0VFUCgidHhGcmFtZVRvWHBhT24iLCBwTW9kYWwtPnR4RnJhbWVUb1hwYU9uKTsKKwlQUl9FRVAoIkNDQSBUaHJlc2hvbGQpIiwgcE1vZGFsLT50aHJlc2g2Mik7CisJUFJfRUVQKCJDaGFpbjAgTkYgVGhyZXNob2xkIiwgcE1vZGFsLT5ub2lzZUZsb29yVGhyZXNoQ2hbMF0pOworCVBSX0VFUCgiQ2hhaW4xIE5GIFRocmVzaG9sZCIsIHBNb2RhbC0+bm9pc2VGbG9vclRocmVzaENoWzFdKTsKKwlQUl9FRVAoIkNoYWluMiBORiBUaHJlc2hvbGQiLCBwTW9kYWwtPm5vaXNlRmxvb3JUaHJlc2hDaFsyXSk7CisJUFJfRUVQKCJ4cGRHYWluIiwgcE1vZGFsLT54cGRHYWluKTsKKwlQUl9FRVAoIkV4dGVybmFsIFBEIiwgcE1vZGFsLT54cGQpOworCVBSX0VFUCgiQ2hhaW4wIEkgQ29lZmZpY2llbnQiLCBwTW9kYWwtPmlxQ2FsSUNoWzBdKTsKKwlQUl9FRVAoIkNoYWluMSBJIENvZWZmaWNpZW50IiwgcE1vZGFsLT5pcUNhbElDaFsxXSk7CisJUFJfRUVQKCJDaGFpbjIgSSBDb2VmZmljaWVudCIsIHBNb2RhbC0+aXFDYWxJQ2hbMl0pOworCVBSX0VFUCgiQ2hhaW4wIFEgQ29lZmZpY2llbnQiLCBwTW9kYWwtPmlxQ2FsUUNoWzBdKTsKKwlQUl9FRVAoIkNoYWluMSBRIENvZWZmaWNpZW50IiwgcE1vZGFsLT5pcUNhbFFDaFsxXSk7CisJUFJfRUVQKCJDaGFpbjIgUSBDb2VmZmljaWVudCIsIHBNb2RhbC0+aXFDYWxRQ2hbMl0pOworCVBSX0VFUCgicGRHYWluT3ZlcmxhcCIsIHBNb2RhbC0+cGRHYWluT3ZlcmxhcCk7CisJUFJfRUVQKCJDaGFpbjAgT3V0cHV0QmlhcyIsIHBNb2RhbC0+b2IpOworCVBSX0VFUCgiQ2hhaW4wIERyaXZlckJpYXMiLCBwTW9kYWwtPmRiKTsKKwlQUl9FRVAoInhQQSBCaWFzIExldmVsIiwgcE1vZGFsLT54cGFCaWFzTHZsKTsKKwlQUl9FRVAoIjJjaGFpbiBwd3IgZGVjcmVhc2UiLCBwTW9kYWwtPnB3ckRlY3JlYXNlRm9yMkNoYWluKTsKKwlQUl9FRVAoIjNjaGFpbiBwd3IgZGVjcmVhc2UiLCBwTW9kYWwtPnB3ckRlY3JlYXNlRm9yM0NoYWluKTsKKwlQUl9FRVAoInR4RnJhbWVUb0RhdGFTdGFydCIsIHBNb2RhbC0+dHhGcmFtZVRvRGF0YVN0YXJ0KTsKKwlQUl9FRVAoInR4RnJhbWVUb1BhT24iLCBwTW9kYWwtPnR4RnJhbWVUb1BhT24pOworCVBSX0VFUCgiSFQ0MCBQb3dlciBJbmMuIiwgcE1vZGFsLT5odDQwUG93ZXJJbmNGb3JQZGFkYyk7CisJUFJfRUVQKCJDaGFpbjAgYnN3QXR0ZW4iLCBwTW9kYWwtPmJzd0F0dGVuWzBdKTsKKwlQUl9FRVAoIkNoYWluMSBic3dBdHRlbiIsIHBNb2RhbC0+YnN3QXR0ZW5bMV0pOworCVBSX0VFUCgiQ2hhaW4yIGJzd0F0dGVuIiwgcE1vZGFsLT5ic3dBdHRlblsyXSk7CisJUFJfRUVQKCJDaGFpbjAgYnN3TWFyZ2luIiwgcE1vZGFsLT5ic3dNYXJnaW5bMF0pOworCVBSX0VFUCgiQ2hhaW4xIGJzd01hcmdpbiIsIHBNb2RhbC0+YnN3TWFyZ2luWzFdKTsKKwlQUl9FRVAoIkNoYWluMiBic3dNYXJnaW4iLCBwTW9kYWwtPmJzd01hcmdpblsyXSk7CisJUFJfRUVQKCJIVDQwIFN3aXRjaCBTZXR0bGUiLCBwTW9kYWwtPnN3U2V0dGxlSHQ0MCk7CisJUFJfRUVQKCJDaGFpbjAgeGF0dGVuMkRiIiwgcE1vZGFsLT54YXR0ZW4yRGJbMF0pOworCVBSX0VFUCgiQ2hhaW4xIHhhdHRlbjJEYiIsIHBNb2RhbC0+eGF0dGVuMkRiWzFdKTsKKwlQUl9FRVAoIkNoYWluMiB4YXR0ZW4yRGIiLCBwTW9kYWwtPnhhdHRlbjJEYlsyXSk7CisJUFJfRUVQKCJDaGFpbjAgeGF0dGVuMk1hcmdpbiIsIHBNb2RhbC0+eGF0dGVuMk1hcmdpblswXSk7CisJUFJfRUVQKCJDaGFpbjEgeGF0dGVuMk1hcmdpbiIsIHBNb2RhbC0+eGF0dGVuMk1hcmdpblsxXSk7CisJUFJfRUVQKCJDaGFpbjIgeGF0dGVuMk1hcmdpbiIsIHBNb2RhbC0+eGF0dGVuMk1hcmdpblsyXSk7CisJUFJfRUVQKCJDaGFpbjEgT3V0cHV0QmlhcyIsIHBNb2RhbC0+b2JfY2gxKTsKKwlQUl9FRVAoIkNoYWluMSBEcml2ZXJCaWFzIiwgcE1vZGFsLT5kYl9jaDEpOworCVBSX0VFUCgiTE5BIENvbnRyb2wiLCBwTW9kYWwtPmxuYV9jdGwpOworCVBSX0VFUCgiWFBBIEJpYXMgRnJlcTAiLCBwTW9kYWwtPnhwYUJpYXNMdmxGcmVxWzBdKTsKKwlQUl9FRVAoIlhQQSBCaWFzIEZyZXExIiwgcE1vZGFsLT54cGFCaWFzTHZsRnJlcVsxXSk7CisJUFJfRUVQKCJYUEEgQmlhcyBGcmVxMiIsIHBNb2RhbC0+eHBhQmlhc0x2bEZyZXFbMl0pOworCisJaWYgKGxlbiA+IHNpemUpCisJCWxlbiA9IHNpemU7CisKKwlyZXR2YWwgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKKwlrZnJlZShidWYpOworCisJcmV0dXJuIHJldHZhbDsKKworI3VuZGVmIFBSX0VFUAorfQorCitzdGF0aWMgc3NpemVfdCByZWFkXzkyODdfbW9kYWxfZWVwcm9tKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSAgICAgIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKyNkZWZpbmUgUFJfRUVQKF9zLCBfdmFsKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sICIlMjBzIDogJTEwZFxuIiwJXAorCQkJCV9zLCAoX3ZhbCkpOwkJCQlcCisJfSB3aGlsZSAoMCkKKworCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbW9kYWxfZWVwX2FyOTI4N19oZWFkZXIgKnBNb2RhbCA9ICZwcml2LT5haC0+ZWVwcm9tLm1hcDkyODcubW9kYWxIZWFkZXI7CisJdW5zaWduZWQgaW50IGxlbiA9IDAsIHNpemUgPSAzMDAwOworCXNzaXplX3QgcmV0dmFsID0gMDsKKwljaGFyICpidWY7CisKKwlidWYgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmIChidWYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlQUl9FRVAoIkNoYWluMCBBbnQuIENvbnRyb2wiLCBwTW9kYWwtPmFudEN0cmxDaGFpblswXSk7CisJUFJfRUVQKCJDaGFpbjEgQW50LiBDb250cm9sIiwgcE1vZGFsLT5hbnRDdHJsQ2hhaW5bMV0pOworCVBSX0VFUCgiQW50LiBDb21tb24gQ29udHJvbCIsIHBNb2RhbC0+YW50Q3RybENvbW1vbik7CisJUFJfRUVQKCJDaGFpbjAgQW50LiBHYWluIiwgcE1vZGFsLT5hbnRlbm5hR2FpbkNoWzBdKTsKKwlQUl9FRVAoIkNoYWluMSBBbnQuIEdhaW4iLCBwTW9kYWwtPmFudGVubmFHYWluQ2hbMV0pOworCVBSX0VFUCgiU3dpdGNoIFNldHRsZSIsIHBNb2RhbC0+c3dpdGNoU2V0dGxpbmcpOworCVBSX0VFUCgiQ2hhaW4wIFR4UnhBdHRlbiIsIHBNb2RhbC0+dHhSeEF0dGVuQ2hbMF0pOworCVBSX0VFUCgiQ2hhaW4xIFR4UnhBdHRlbiIsIHBNb2RhbC0+dHhSeEF0dGVuQ2hbMV0pOworCVBSX0VFUCgiQ2hhaW4wIFJ4VHhNYXJnaW4iLCBwTW9kYWwtPnJ4VHhNYXJnaW5DaFswXSk7CisJUFJfRUVQKCJDaGFpbjEgUnhUeE1hcmdpbiIsIHBNb2RhbC0+cnhUeE1hcmdpbkNoWzFdKTsKKwlQUl9FRVAoIkFEQyBEZXNpcmVkIHNpemUiLCBwTW9kYWwtPmFkY0Rlc2lyZWRTaXplKTsKKwlQUl9FRVAoInR4RW5kVG9YcGFPZmYiLCBwTW9kYWwtPnR4RW5kVG9YcGFPZmYpOworCVBSX0VFUCgidHhFbmRUb1J4T24iLCBwTW9kYWwtPnR4RW5kVG9SeE9uKTsKKwlQUl9FRVAoInR4RnJhbWVUb1hwYU9uIiwgcE1vZGFsLT50eEZyYW1lVG9YcGFPbik7CisJUFJfRUVQKCJDQ0EgVGhyZXNob2xkKSIsIHBNb2RhbC0+dGhyZXNoNjIpOworCVBSX0VFUCgiQ2hhaW4wIE5GIFRocmVzaG9sZCIsIHBNb2RhbC0+bm9pc2VGbG9vclRocmVzaENoWzBdKTsKKwlQUl9FRVAoIkNoYWluMSBORiBUaHJlc2hvbGQiLCBwTW9kYWwtPm5vaXNlRmxvb3JUaHJlc2hDaFsxXSk7CisJUFJfRUVQKCJ4cGRHYWluIiwgcE1vZGFsLT54cGRHYWluKTsKKwlQUl9FRVAoIkV4dGVybmFsIFBEIiwgcE1vZGFsLT54cGQpOworCVBSX0VFUCgiQ2hhaW4wIEkgQ29lZmZpY2llbnQiLCBwTW9kYWwtPmlxQ2FsSUNoWzBdKTsKKwlQUl9FRVAoIkNoYWluMSBJIENvZWZmaWNpZW50IiwgcE1vZGFsLT5pcUNhbElDaFsxXSk7CisJUFJfRUVQKCJDaGFpbjAgUSBDb2VmZmljaWVudCIsIHBNb2RhbC0+aXFDYWxRQ2hbMF0pOworCVBSX0VFUCgiQ2hhaW4xIFEgQ29lZmZpY2llbnQiLCBwTW9kYWwtPmlxQ2FsUUNoWzFdKTsKKwlQUl9FRVAoInBkR2Fpbk92ZXJsYXAiLCBwTW9kYWwtPnBkR2Fpbk92ZXJsYXApOworCVBSX0VFUCgieFBBIEJpYXMgTGV2ZWwiLCBwTW9kYWwtPnhwYUJpYXNMdmwpOworCVBSX0VFUCgidHhGcmFtZVRvRGF0YVN0YXJ0IiwgcE1vZGFsLT50eEZyYW1lVG9EYXRhU3RhcnQpOworCVBSX0VFUCgidHhGcmFtZVRvUGFPbiIsIHBNb2RhbC0+dHhGcmFtZVRvUGFPbik7CisJUFJfRUVQKCJIVDQwIFBvd2VyIEluYy4iLCBwTW9kYWwtPmh0NDBQb3dlckluY0ZvclBkYWRjKTsKKwlQUl9FRVAoIkNoYWluMCBic3dBdHRlbiIsIHBNb2RhbC0+YnN3QXR0ZW5bMF0pOworCVBSX0VFUCgiQ2hhaW4xIGJzd0F0dGVuIiwgcE1vZGFsLT5ic3dBdHRlblsxXSk7CisJUFJfRUVQKCJDaGFpbjAgYnN3TWFyZ2luIiwgcE1vZGFsLT5ic3dNYXJnaW5bMF0pOworCVBSX0VFUCgiQ2hhaW4xIGJzd01hcmdpbiIsIHBNb2RhbC0+YnN3TWFyZ2luWzFdKTsKKwlQUl9FRVAoIkhUNDAgU3dpdGNoIFNldHRsZSIsIHBNb2RhbC0+c3dTZXR0bGVIdDQwKTsKKwlQUl9FRVAoIkFSOTJ4NyBWZXJzaW9uIiwgcE1vZGFsLT52ZXJzaW9uKTsKKwlQUl9FRVAoIkRyaXZlckJpYXMxIiwgcE1vZGFsLT5kYjEpOworCVBSX0VFUCgiRHJpdmVyQmlhczIiLCBwTW9kYWwtPmRiMSk7CisJUFJfRUVQKCJDQ0sgT3V0cHV0QmlhcyIsIHBNb2RhbC0+b2JfY2NrKTsKKwlQUl9FRVAoIlBTSyBPdXRwdXRCaWFzIiwgcE1vZGFsLT5vYl9wc2spOworCVBSX0VFUCgiUUFNIE91dHB1dEJpYXMiLCBwTW9kYWwtPm9iX3FhbSk7CisJUFJfRUVQKCJQQUxfT0ZGIE91dHB1dEJpYXMiLCBwTW9kYWwtPm9iX3BhbF9vZmYpOworCisJaWYgKGxlbiA+IHNpemUpCisJCWxlbiA9IHNpemU7CisKKwlyZXR2YWwgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKKwlrZnJlZShidWYpOworCisJcmV0dXJuIHJldHZhbDsKKworI3VuZGVmIFBSX0VFUAorfQorCitzdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfbW9kYWxfZWVwcm9tKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKEFSX1NSRVZfOTI3MShwcml2LT5haCkpCisJCXJldHVybiByZWFkXzRrX21vZGFsX2VlcHJvbShmaWxlLCB1c2VyX2J1ZiwgY291bnQsIHBwb3MpOworCWVsc2UgaWYgKHByaXYtPmFoLT5od192ZXJzaW9uLnVzYmRldiA9PSBBUjkyODBfVVNCKQorCQlyZXR1cm4gcmVhZF9kZWZfbW9kYWxfZWVwcm9tKGZpbGUsIHVzZXJfYnVmLCBjb3VudCwgcHBvcyk7CisJZWxzZSBpZiAocHJpdi0+YWgtPmh3X3ZlcnNpb24udXNiZGV2ID09IEFSOTI4N19VU0IpCisJCXJldHVybiByZWFkXzkyODdfbW9kYWxfZWVwcm9tKGZpbGUsIHVzZXJfYnVmLCBjb3VudCwgcHBvcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc19tb2RhbF9lZXByb20gPSB7CisJLnJlYWQgPSByZWFkX2ZpbGVfbW9kYWxfZWVwcm9tLAorCS5vcGVuID0gYXRoOWtfZGVidWdmc19vcGVuLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKK307CisKK2ludCBhdGg5a19odGNfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKKwlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSAoc3RydWN0IGF0aDlrX2h0Y19wcml2ICopIGNvbW1vbi0+cHJpdjsKKworCXByaXYtPmRlYnVnLmRlYnVnZnNfcGh5ID0gZGVidWdmc19jcmVhdGVfZGlyKEtCVUlMRF9NT0ROQU1FLAorCQkJCQkgICAgIHByaXYtPmh3LT53aXBoeS0+ZGVidWdmc2Rpcik7CisJaWYgKCFwcml2LT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ0Z3RfaW50X3N0YXRzIiwgU19JUlVTUiwgcHJpdi0+ZGVidWcuZGVidWdmc19waHksCisJCQkgICAgcHJpdiwgJmZvcHNfdGd0X2ludF9zdGF0cyk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgidGd0X3R4X3N0YXRzIiwgU19JUlVTUiwgcHJpdi0+ZGVidWcuZGVidWdmc19waHksCisJCQkgICAgcHJpdiwgJmZvcHNfdGd0X3R4X3N0YXRzKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ0Z3Rfcnhfc3RhdHMiLCBTX0lSVVNSLCBwcml2LT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKKwkJCSAgICBwcml2LCAmZm9wc190Z3Rfcnhfc3RhdHMpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInhtaXQiLCBTX0lSVVNSLCBwcml2LT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKKwkJCSAgICBwcml2LCAmZm9wc194bWl0KTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZWN2IiwgU19JUlVTUiwgcHJpdi0+ZGVidWcuZGVidWdmc19waHksCisJCQkgICAgcHJpdiwgJmZvcHNfcmVjdik7CisJZGVidWdmc19jcmVhdGVfZmlsZSgic2xvdCIsIFNfSVJVU1IsIHByaXYtPmRlYnVnLmRlYnVnZnNfcGh5LAorCQkJICAgIHByaXYsICZmb3BzX3Nsb3QpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInF1ZXVlIiwgU19JUlVTUiwgcHJpdi0+ZGVidWcuZGVidWdmc19waHksCisJCQkgICAgcHJpdiwgJmZvcHNfcXVldWUpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImRlYnVnIiwgU19JUlVTUiB8IFNfSVdVU1IsIHByaXYtPmRlYnVnLmRlYnVnZnNfcGh5LAorCQkJICAgIHByaXYsICZmb3BzX2RlYnVnKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJiYXNlX2VlcHJvbSIsIFNfSVJVU1IsIHByaXYtPmRlYnVnLmRlYnVnZnNfcGh5LAorCQkJICAgIHByaXYsICZmb3BzX2Jhc2VfZWVwcm9tKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJtb2RhbF9lZXByb20iLCBTX0lSVVNSLCBwcml2LT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKKwkJCSAgICBwcml2LCAmZm9wc19tb2RhbF9lZXByb20pOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9ncGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9ncGlvLmMKaW5kZXggN2U2MzBhOC4uYWY1N2ZlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZ3Bpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2dwaW8uYwpAQCAtNjUsMTcgKzY1LDE5IEBACiAJdTMyIHRpbWVyX3BlcmlvZDsKIAlib29sIGlzX2J0c2NhbjsKIAlpbnQgcmV0OwotCXU4IGNtZF9yc3AsIGFnZ3I7CiAKIAlhdGhfZGV0ZWN0X2J0X3ByaW9yaXR5KHByaXYpOwogCiAJaXNfYnRzY2FuID0gISEocHJpdi0+b3BfZmxhZ3MgJiBPUF9CVF9TQ0FOKTsKIAotCWFnZ3IgPSBwcml2LT5vcF9mbGFncyAmIE9QX0JUX1BSSU9SSVRZX0RFVEVDVEVEOworCXJldCA9IGF0aDlrX2h0Y191cGRhdGVfY2FwX3RhcmdldChwcml2LAorCQkJCSAgISEocHJpdi0+b3BfZmxhZ3MgJiBPUF9CVF9QUklPUklUWV9ERVRFQ1RFRCkpOworCWlmIChyZXQpIHsKKwkJYXRoX2Vycihjb21tb24sICJVbmFibGUgdG8gc2V0IEJUQ09FWCBwYXJhbWV0ZXJzXG4iKTsKKwkJcmV0dXJuOworCX0KIAotCVdNSV9DTURfQlVGKFdNSV9BR0dSX0xJTUlUX0NNRCwgJmFnZ3IpOwotCi0JYXRoOWtfY21uX2J0Y29leF9idF9zdG9tcChjb21tb24sIGlzX2J0c2NhbiA/IEFUSF9CVENPRVhfU1RPTVBfQUxMIDoKKwlhdGg5a19od19idGNvZXhfYnRfc3RvbXAocHJpdi0+YWgsIGlzX2J0c2NhbiA/IEFUSF9CVENPRVhfU1RPTVBfQUxMIDoKIAkJCWJ0Y29leC0+YnRfc3RvbXBfdHlwZSk7CiAKIAl0aW1lcl9wZXJpb2QgPSBpc19idHNjYW4gPyBidGNvZXgtPmJ0c2Nhbl9ub19zdG9tcCA6CkBAIC0xMDMsOSArMTA1LDkgQEAKIAkJInRpbWUgc2xpY2Ugd29yayBmb3IgYnQgYW5kIHdsYW5cbiIpOwogCiAJaWYgKGJ0Y29leC0+YnRfc3RvbXBfdHlwZSA9PSBBVEhfQlRDT0VYX1NUT01QX0xPVyB8fCBpc19idHNjYW4pCi0JCWF0aDlrX2Ntbl9idGNvZXhfYnRfc3RvbXAoY29tbW9uLCBBVEhfQlRDT0VYX1NUT01QX05PTkUpOworCQlhdGg5a19od19idGNvZXhfYnRfc3RvbXAoYWgsIEFUSF9CVENPRVhfU1RPTVBfTk9ORSk7CiAJZWxzZSBpZiAoYnRjb2V4LT5idF9zdG9tcF90eXBlID09IEFUSF9CVENPRVhfU1RPTVBfQUxMKQotCQlhdGg5a19jbW5fYnRjb2V4X2J0X3N0b21wKGNvbW1vbiwgQVRIX0JUQ09FWF9TVE9NUF9MT1cpOworCQlhdGg5a19od19idGNvZXhfYnRfc3RvbXAoYWgsIEFUSF9CVENPRVhfU1RPTVBfTE9XKTsKIH0KIAogdm9pZCBhdGhfaHRjX2luaXRfYnRjb2V4X3dvcmsoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KQpAQCAtMTUyLDE0MCArMTU0LDQxIEBACiAvKiBMRUQgKi8KIC8qKioqKioqLwogCi1zdGF0aWMgdm9pZCBhdGg5a19sZWRfYmxpbmtfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFMKK3ZvaWQgYXRoOWtfbGVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYsCi0JCQkJCQkgICBhdGg5a19sZWRfYmxpbmtfd29yay53b3JrKTsKKwlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywKKwkJCQkJCSAgIHN0cnVjdCBhdGg5a19odGNfcHJpdiwKKwkJCQkJCSAgIGxlZF93b3JrKTsKIAotCWlmICghKHByaXYtPm9wX2ZsYWdzICYgT1BfTEVEX0FTU09DSUFURUQpKQotCQlyZXR1cm47Ci0KLQlpZiAoKHByaXYtPmxlZF9vbl9kdXJhdGlvbiA9PSBBVEhfTEVEX09OX0RVUkFUSU9OX0lETEUpIHx8Ci0JICAgIChwcml2LT5sZWRfb2ZmX2R1cmF0aW9uID09IEFUSF9MRURfT0ZGX0RVUkFUSU9OX0lETEUpKQotCQlhdGg5a19od19zZXRfZ3Bpbyhwcml2LT5haCwgcHJpdi0+YWgtPmxlZF9waW4sIDApOwotCWVsc2UKLQkJYXRoOWtfaHdfc2V0X2dwaW8ocHJpdi0+YWgsIHByaXYtPmFoLT5sZWRfcGluLAotCQkJCSAgKHByaXYtPm9wX2ZsYWdzICYgT1BfTEVEX09OKSA/IDEgOiAwKTsKLQotCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+aHcsCi0JCQkJICAgICAmcHJpdi0+YXRoOWtfbGVkX2JsaW5rX3dvcmssCi0JCQkJICAgICAocHJpdi0+b3BfZmxhZ3MgJiBPUF9MRURfT04pID8KLQkJCQkgICAgIG1zZWNzX3RvX2ppZmZpZXMocHJpdi0+bGVkX29mZl9kdXJhdGlvbikgOgotCQkJCSAgICAgbXNlY3NfdG9famlmZmllcyhwcml2LT5sZWRfb25fZHVyYXRpb24pKTsKLQotCXByaXYtPmxlZF9vbl9kdXJhdGlvbiA9IHByaXYtPmxlZF9vbl9jbnQgPwotCQltYXgoKEFUSF9MRURfT05fRFVSQVRJT05fSURMRSAtIHByaXYtPmxlZF9vbl9jbnQpLCAyNSkgOgotCQlBVEhfTEVEX09OX0RVUkFUSU9OX0lETEU7Ci0JcHJpdi0+bGVkX29mZl9kdXJhdGlvbiA9IHByaXYtPmxlZF9vZmZfY250ID8KLQkJbWF4KChBVEhfTEVEX09GRl9EVVJBVElPTl9JRExFIC0gcHJpdi0+bGVkX29mZl9jbnQpLCAxMCkgOgotCQlBVEhfTEVEX09GRl9EVVJBVElPTl9JRExFOwotCXByaXYtPmxlZF9vbl9jbnQgPSBwcml2LT5sZWRfb2ZmX2NudCA9IDA7Ci0KLQlpZiAocHJpdi0+b3BfZmxhZ3MgJiBPUF9MRURfT04pCi0JCXByaXYtPm9wX2ZsYWdzICY9IH5PUF9MRURfT047Ci0JZWxzZQotCQlwcml2LT5vcF9mbGFncyB8PSBPUF9MRURfT047Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aDlrX2xlZF9icmlnaHRuZXNzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBhdGhfbGVkICpsZWQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0aF9sZWQsCi0JCQkJCSAgIGJyaWdodG5lc3Nfd29yay53b3JrKTsKLQlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBsZWQtPnByaXY7Ci0KLQlzd2l0Y2ggKGxlZC0+YnJpZ2h0bmVzcykgewotCWNhc2UgTEVEX09GRjoKLQkJaWYgKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9BU1NPQyB8fAotCQkgICAgbGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX1JBRElPKSB7Ci0JCQlhdGg5a19od19zZXRfZ3Bpbyhwcml2LT5haCwgcHJpdi0+YWgtPmxlZF9waW4sCi0JCQkJCSAgKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9SQURJTykpOwotCQkJcHJpdi0+b3BfZmxhZ3MgJj0gfk9QX0xFRF9BU1NPQ0lBVEVEOwotCQkJaWYgKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9SQURJTykKLQkJCQlwcml2LT5vcF9mbGFncyAmPSB+T1BfTEVEX09OOwotCQl9IGVsc2UgewotCQkJcHJpdi0+bGVkX29mZl9jbnQrKzsKLQkJfQotCQlicmVhazsKLQljYXNlIExFRF9GVUxMOgotCQlpZiAobGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX0FTU09DKSB7Ci0JCQlwcml2LT5vcF9mbGFncyB8PSBPUF9MRURfQVNTT0NJQVRFRDsKLQkJCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+aHcsCi0JCQkJCSAgICAgJnByaXYtPmF0aDlrX2xlZF9ibGlua193b3JrLCAwKTsKLQkJfSBlbHNlIGlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfUkFESU8pIHsKLQkJCWF0aDlrX2h3X3NldF9ncGlvKHByaXYtPmFoLCBwcml2LT5haC0+bGVkX3BpbiwgMCk7Ci0JCQlwcml2LT5vcF9mbGFncyB8PSBPUF9MRURfT047Ci0JCX0gZWxzZSB7Ci0JCQlwcml2LT5sZWRfb25fY250Kys7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQorCWF0aDlrX2h3X3NldF9ncGlvKHByaXYtPmFoLCBwcml2LT5haC0+bGVkX3BpbiwKKwkJCSAgKHByaXYtPmJyaWdodG5lc3MgPT0gTEVEX09GRikpOwogfQogCiBzdGF0aWMgdm9pZCBhdGg5a19sZWRfYnJpZ2h0bmVzcyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKIAkJCQkgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQogewotCXN0cnVjdCBhdGhfbGVkICpsZWQgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBhdGhfbGVkLCBsZWRfY2Rldik7Ci0Jc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gbGVkLT5wcml2OworCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihsZWRfY2RldiwKKwkJCQkJCSAgIHN0cnVjdCBhdGg5a19odGNfcHJpdiwKKwkJCQkJCSAgIGxlZF9jZGV2KTsKIAotCWxlZC0+YnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7Ci0JaWYgKCEocHJpdi0+b3BfZmxhZ3MgJiBPUF9MRURfREVJTklUKSkKLQkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT5odywKLQkJCQkJICAgICAmbGVkLT5icmlnaHRuZXNzX3dvcmssIDApOwotfQotCi12b2lkIGF0aDlrX2xlZF9zdG9wX2JyaWdodG5lc3Moc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KQotewotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+cmFkaW9fbGVkLmJyaWdodG5lc3Nfd29yayk7Ci0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5hc3NvY19sZWQuYnJpZ2h0bmVzc193b3JrKTsKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPnR4X2xlZC5icmlnaHRuZXNzX3dvcmspOwotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+cnhfbGVkLmJyaWdodG5lc3Nfd29yayk7Ci19Ci0KLXN0YXRpYyBpbnQgYXRoOWtfcmVnaXN0ZXJfbGVkKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwgc3RydWN0IGF0aF9sZWQgKmxlZCwKLQkJCSAgICAgIGNoYXIgKnRyaWdnZXIpCi17Ci0JaW50IHJldDsKLQotCWxlZC0+cHJpdiA9IHByaXY7Ci0JbGVkLT5sZWRfY2Rldi5uYW1lID0gbGVkLT5uYW1lOwotCWxlZC0+bGVkX2NkZXYuZGVmYXVsdF90cmlnZ2VyID0gdHJpZ2dlcjsKLQlsZWQtPmxlZF9jZGV2LmJyaWdodG5lc3Nfc2V0ID0gYXRoOWtfbGVkX2JyaWdodG5lc3M7Ci0KLQlyZXQgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIod2lwaHlfZGV2KHByaXYtPmh3LT53aXBoeSksICZsZWQtPmxlZF9jZGV2KTsKLQlpZiAocmV0KQotCQlhdGhfZXJyKGF0aDlrX2h3X2NvbW1vbihwcml2LT5haCksCi0JCQkiRmFpbGVkIHRvIHJlZ2lzdGVyIGxlZDolcyIsIGxlZC0+bmFtZSk7Ci0JZWxzZQotCQlsZWQtPnJlZ2lzdGVyZWQgPSAxOwotCi0JSU5JVF9ERUxBWUVEX1dPUksoJmxlZC0+YnJpZ2h0bmVzc193b3JrLCBhdGg5a19sZWRfYnJpZ2h0bmVzc193b3JrKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aDlrX3VucmVnaXN0ZXJfbGVkKHN0cnVjdCBhdGhfbGVkICpsZWQpCi17Ci0JaWYgKGxlZC0+cmVnaXN0ZXJlZCkgewotCQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbGVkLT5sZWRfY2Rldik7Ci0JCWxlZC0+cmVnaXN0ZXJlZCA9IDA7Ci0JfQorCS8qIE5vdCBsb2NrZWQsIGJ1dCBpdCdzIGp1c3QgYSB0aW55IGdyZWVuIGxpZ2h0Li4qLworCXByaXYtPmJyaWdodG5lc3MgPSBicmlnaHRuZXNzOworCWllZWU4MDIxMV9xdWV1ZV93b3JrKHByaXYtPmh3LCAmcHJpdi0+bGVkX3dvcmspOwogfQogCiB2b2lkIGF0aDlrX2RlaW5pdF9sZWRzKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdikKIHsKLQlwcml2LT5vcF9mbGFncyB8PSBPUF9MRURfREVJTklUOwotCWF0aDlrX3VucmVnaXN0ZXJfbGVkKCZwcml2LT5hc3NvY19sZWQpOwotCXByaXYtPm9wX2ZsYWdzICY9IH5PUF9MRURfQVNTT0NJQVRFRDsKLQlhdGg5a191bnJlZ2lzdGVyX2xlZCgmcHJpdi0+dHhfbGVkKTsKLQlhdGg5a191bnJlZ2lzdGVyX2xlZCgmcHJpdi0+cnhfbGVkKTsKLQlhdGg5a191bnJlZ2lzdGVyX2xlZCgmcHJpdi0+cmFkaW9fbGVkKTsKKwlpZiAoIXByaXYtPmxlZF9yZWdpc3RlcmVkKQorCQlyZXR1cm47CisKKwlhdGg5a19sZWRfYnJpZ2h0bmVzcygmcHJpdi0+bGVkX2NkZXYsIExFRF9PRkYpOworCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZwcml2LT5sZWRfY2Rldik7CisJY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+bGVkX3dvcmspOwogfQogCiB2b2lkIGF0aDlrX2luaXRfbGVkcyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpCiB7Ci0JY2hhciAqdHJpZ2dlcjsKIAlpbnQgcmV0OwogCiAJaWYgKEFSX1NSRVZfOTI4Nyhwcml2LT5haCkpCkBAIC0zMDMsNDggKzIwNiwyMSBAQAogCS8qIExFRCBvZmYsIGFjdGl2ZSBsb3cgKi8KIAlhdGg5a19od19zZXRfZ3Bpbyhwcml2LT5haCwgcHJpdi0+YWgtPmxlZF9waW4sIDEpOwogCi0JSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmF0aDlrX2xlZF9ibGlua193b3JrLCBhdGg5a19sZWRfYmxpbmtfd29yayk7CisJc25wcmludGYocHJpdi0+bGVkX25hbWUsIHNpemVvZihwcml2LT5sZWRfbmFtZSksCisJCSJhdGg5a19odGMtJXMiLCB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOworCXByaXYtPmxlZF9jZGV2Lm5hbWUgPSBwcml2LT5sZWRfbmFtZTsKKwlwcml2LT5sZWRfY2Rldi5icmlnaHRuZXNzX3NldCA9IGF0aDlrX2xlZF9icmlnaHRuZXNzOwogCi0JdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfcmFkaW9fbGVkX25hbWUocHJpdi0+aHcpOwotCXNucHJpbnRmKHByaXYtPnJhZGlvX2xlZC5uYW1lLCBzaXplb2YocHJpdi0+cmFkaW9fbGVkLm5hbWUpLAotCQkiYXRoOWstJXM6OnJhZGlvIiwgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKLQlyZXQgPSBhdGg5a19yZWdpc3Rlcl9sZWQocHJpdiwgJnByaXYtPnJhZGlvX2xlZCwgdHJpZ2dlcik7Ci0JcHJpdi0+cmFkaW9fbGVkLmxlZF90eXBlID0gQVRIX0xFRF9SQURJTzsKLQlpZiAocmV0KQotCQlnb3RvIGZhaWw7CisJcmV0ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKHdpcGh5X2Rldihwcml2LT5ody0+d2lwaHkpLCAmcHJpdi0+bGVkX2NkZXYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm47CiAKLQl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF9hc3NvY19sZWRfbmFtZShwcml2LT5odyk7Ci0Jc25wcmludGYocHJpdi0+YXNzb2NfbGVkLm5hbWUsIHNpemVvZihwcml2LT5hc3NvY19sZWQubmFtZSksCi0JCSJhdGg5ay0lczo6YXNzb2MiLCB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOwotCXJldCA9IGF0aDlrX3JlZ2lzdGVyX2xlZChwcml2LCAmcHJpdi0+YXNzb2NfbGVkLCB0cmlnZ2VyKTsKLQlwcml2LT5hc3NvY19sZWQubGVkX3R5cGUgPSBBVEhfTEVEX0FTU09DOwotCWlmIChyZXQpCi0JCWdvdG8gZmFpbDsKLQotCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X3R4X2xlZF9uYW1lKHByaXYtPmh3KTsKLQlzbnByaW50Zihwcml2LT50eF9sZWQubmFtZSwgc2l6ZW9mKHByaXYtPnR4X2xlZC5uYW1lKSwKLQkJImF0aDlrLSVzOjp0eCIsIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7Ci0JcmV0ID0gYXRoOWtfcmVnaXN0ZXJfbGVkKHByaXYsICZwcml2LT50eF9sZWQsIHRyaWdnZXIpOwotCXByaXYtPnR4X2xlZC5sZWRfdHlwZSA9IEFUSF9MRURfVFg7Ci0JaWYgKHJldCkKLQkJZ290byBmYWlsOwotCi0JdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfcnhfbGVkX25hbWUocHJpdi0+aHcpOwotCXNucHJpbnRmKHByaXYtPnJ4X2xlZC5uYW1lLCBzaXplb2YocHJpdi0+cnhfbGVkLm5hbWUpLAotCQkiYXRoOWstJXM6OnJ4Iiwgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKLQlyZXQgPSBhdGg5a19yZWdpc3Rlcl9sZWQocHJpdiwgJnByaXYtPnJ4X2xlZCwgdHJpZ2dlcik7Ci0JcHJpdi0+cnhfbGVkLmxlZF90eXBlID0gQVRIX0xFRF9SWDsKLQlpZiAocmV0KQotCQlnb3RvIGZhaWw7Ci0KLQlwcml2LT5vcF9mbGFncyAmPSB+T1BfTEVEX0RFSU5JVDsKKwlJTklUX1dPUksoJnByaXYtPmxlZF93b3JrLCBhdGg5a19sZWRfd29yayk7CisJcHJpdi0+bGVkX3JlZ2lzdGVyZWQgPSB0cnVlOwogCiAJcmV0dXJuOwotCi1mYWlsOgotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+YXRoOWtfbGVkX2JsaW5rX3dvcmspOwotCWF0aDlrX2RlaW5pdF9sZWRzKHByaXYpOwogfQorI2VuZGlmCiAKIC8qKioqKioqKioqKioqKioqKioqLwogLyoJUmZraWxsCSAgICovCkBAIC0zOTgsOSArMjc0LDkgQEAKIAogCS8qIFN0YXJ0IFRYICovCiAJaHRjX3N0YXJ0KHByaXYtPmh0Yyk7Ci0Jc3Bpbl9sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKLQlwcml2LT50eF9xdWV1ZXNfc3RvcCA9IGZhbHNlOwotCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJnByaXYtPnR4LnR4X2xvY2spOworCXByaXYtPnR4LmZsYWdzICY9IH5BVEg5S19IVENfT1BfVFhfUVVFVUVTX1NUT1A7CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4LnR4X2xvY2spOwogCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhodyk7CiAKIAlXTUlfQ01EKFdNSV9FTkFCTEVfSU5UUl9DTURJRCk7CkBAIC00MjksMTMgKzMwNSwxNSBAQAogCiAJLyogU3RvcCBUWCAqLwogCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7Ci0JaHRjX3N0b3AocHJpdi0+aHRjKTsKKwlhdGg5a19odGNfdHhfZHJhaW4ocHJpdik7CiAJV01JX0NNRChXTUlfRFJBSU5fVFhRX0FMTF9DTURJRCk7Ci0Jc2tiX3F1ZXVlX3B1cmdlKCZwcml2LT50eF9xdWV1ZSk7CiAKIAkvKiBTdG9wIFJYICovCiAJV01JX0NNRChXTUlfU1RPUF9SRUNWX0NNRElEKTsKIAorCS8qIENsZWFyIHRoZSBXTUkgZXZlbnQgcXVldWUgKi8KKwlhdGg5a193bWlfZXZlbnRfZHJhaW4ocHJpdik7CisKIAkvKgogCSAqIFRoZSBNSUIgY291bnRlcnMgaGF2ZSB0byBiZSBkaXNhYmxlZCBoZXJlLAogCSAqIHNpbmNlIHRoZSB0YXJnZXQgZG9lc24ndCBkbyBpdC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2luaXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2luaXQuYwppbmRleCBmYzY3YzkzLi5iZmRjOGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfaW5pdC5jCkBAIC0xMTcsNiArMTE3LDIxIEBACiAJUkFURSg1NDAsIDB4MGMsIDApLAogfTsKIAorI2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90cHRfYmxpbmsgYXRoOWtfaHRjX3RwdF9ibGlua1tdID0geworCXsgLnRocm91Z2hwdXQgPSAwICogMTAyNCwgLmJsaW5rX3RpbWUgPSAzMzQgfSwKKwl7IC50aHJvdWdocHV0ID0gMSAqIDEwMjQsIC5ibGlua190aW1lID0gMjYwIH0sCisJeyAudGhyb3VnaHB1dCA9IDUgKiAxMDI0LCAuYmxpbmtfdGltZSA9IDIyMCB9LAorCXsgLnRocm91Z2hwdXQgPSAxMCAqIDEwMjQsIC5ibGlua190aW1lID0gMTkwIH0sCisJeyAudGhyb3VnaHB1dCA9IDIwICogMTAyNCwgLmJsaW5rX3RpbWUgPSAxNzAgfSwKKwl7IC50aHJvdWdocHV0ID0gNTAgKiAxMDI0LCAuYmxpbmtfdGltZSA9IDE1MCB9LAorCXsgLnRocm91Z2hwdXQgPSA3MCAqIDEwMjQsIC5ibGlua190aW1lID0gMTMwIH0sCisJeyAudGhyb3VnaHB1dCA9IDEwMCAqIDEwMjQsIC5ibGlua190aW1lID0gMTEwIH0sCisJeyAudGhyb3VnaHB1dCA9IDIwMCAqIDEwMjQsIC5ibGlua190aW1lID0gODAgfSwKKwl7IC50aHJvdWdocHV0ID0gMzAwICogMTAyNCwgLmJsaW5rX3RpbWUgPSA1MCB9LAorfTsKKyNlbmRpZgorCiBzdGF0aWMgaW50IGF0aDlrX2h0Y193YWl0X2Zvcl90YXJnZXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KQogewogCWludCB0aW1lX2xlZnQ7CkBAIC0xNDAsNyArMTU1LDYgQEAKIAogc3RhdGljIHZvaWQgYXRoOWtfZGVpbml0X3ByaXYoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KQogewotCWF0aDlrX2h0Y19leGl0X2RlYnVnKHByaXYtPmFoKTsKIAlhdGg5a19od19kZWluaXQocHJpdi0+YWgpOwogCWtmcmVlKHByaXYtPmFoKTsKIAlwcml2LT5haCA9IE5VTEw7CkBAIC0yNDQsNyArMjU4LDcgQEAKIAkgKi8KIAogCWlmIChJU19BUjcwMTBfREVWSUNFKGRydl9pbmZvKSkKLQkJcHJpdi0+aHRjLT5jcmVkaXRzID0gNDU7CisJCXByaXYtPmh0Yy0+Y3JlZGl0cyA9IDQ4OwogCWVsc2UKIAkJcHJpdi0+aHRjLT5jcmVkaXRzID0gMzM7CiAKQEAgLTQzMCwxMyArNDQ0LDE2IEBACiAJbXV0ZXhfdW5sb2NrKCZwcml2LT53bWktPm11bHRpX3dyaXRlX211dGV4KTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGhfb3BzIGF0aDlrX2NvbW1vbl9vcHMgPSB7Ci0JLnJlYWQgPSBhdGg5a19yZWdyZWFkLAotCS5tdWx0aV9yZWFkID0gYXRoOWtfbXVsdGlfcmVncmVhZCwKLQkud3JpdGUgPSBhdGg5a19yZWd3cml0ZSwKLQkuZW5hYmxlX3dyaXRlX2J1ZmZlciA9IGF0aDlrX2VuYWJsZV9yZWd3cml0ZV9idWZmZXIsCi0JLndyaXRlX2ZsdXNoID0gYXRoOWtfcmVnd3JpdGVfZmx1c2gsCi19Oworc3RhdGljIHUzMiBhdGg5a19yZWdfcm13KHZvaWQgKmh3X3ByaXYsIHUzMiByZWdfb2Zmc2V0LCB1MzIgc2V0LCB1MzIgY2xyKQoreworCXUzMiB2YWw7CisKKwl2YWwgPSBhdGg5a19yZWdyZWFkKGh3X3ByaXYsIHJlZ19vZmZzZXQpOworCXZhbCAmPSB+Y2xyOworCXZhbCB8PSBzZXQ7CisJYXRoOWtfcmVnd3JpdGUoaHdfcHJpdiwgdmFsLCByZWdfb2Zmc2V0KTsKKwlyZXR1cm4gdmFsOworfQogCiBzdGF0aWMgdm9pZCBhdGhfdXNiX3JlYWRfY2FjaGVzaXplKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sIGludCAqY3N6KQogewpAQCAtNTYxLDEzICs1NzgsNyBAQAogCWludCBpID0gMDsKIAogCS8qIEdldCB0aGUgaGFyZHdhcmUga2V5IGNhY2hlIHNpemUuICovCi0JY29tbW9uLT5rZXltYXggPSBwcml2LT5haC0+Y2Fwcy5rZXljYWNoZV9zaXplOwotCWlmIChjb21tb24tPmtleW1heCA+IEFUSF9LRVlNQVgpIHsKLQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5ZLAotCQkJIldhcm5pbmcsIHVzaW5nIG9ubHkgJXUgZW50cmllcyBpbiAldSBrZXkgY2FjaGVcbiIsCi0JCQlBVEhfS0VZTUFYLCBjb21tb24tPmtleW1heCk7Ci0JCWNvbW1vbi0+a2V5bWF4ID0gQVRIX0tFWU1BWDsKLQl9CisJY29tbW9uLT5rZXltYXggPSBBUl9LRVlUQUJMRV9TSVpFOwogCiAJaWYgKHByaXYtPmFoLT5taXNjX21vZGUgJiBBUl9QQ1VfTUlDX05FV19MT0NfRU5BKQogCQljb21tb24tPmNyeXB0X2NhcHMgfD0gQVRIX0NSWVBUX0NBUF9NSUNfQ09NQklORUQ7CkBAIC02NDYsNyArNjU3LDcgQEAKIHsKIAlzdHJ1Y3QgYXRoX2h3ICphaCA9IE5VTEw7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbjsKLQlpbnQgcmV0ID0gMCwgY3N6ID0gMDsKKwlpbnQgaSwgcmV0ID0gMCwgY3N6ID0gMDsKIAogCXByaXYtPm9wX2ZsYWdzIHw9IE9QX0lOVkFMSUQ7CiAKQEAgLTY1OCwzMCArNjY5LDM1IEBACiAJYWgtPmh3X3ZlcnNpb24uc3Vic3lzaWQgPSAwOyAvKiBGSVhNRSAqLwogCWFoLT5od192ZXJzaW9uLnVzYmRldiA9IGRydl9pbmZvOwogCWFoLT5haF9mbGFncyB8PSBBSF9VU0VfRUVQUk9NOworCWFoLT5yZWdfb3BzLnJlYWQgPSBhdGg5a19yZWdyZWFkOworCWFoLT5yZWdfb3BzLm11bHRpX3JlYWQgPSBhdGg5a19tdWx0aV9yZWdyZWFkOworCWFoLT5yZWdfb3BzLndyaXRlID0gYXRoOWtfcmVnd3JpdGU7CisJYWgtPnJlZ19vcHMuZW5hYmxlX3dyaXRlX2J1ZmZlciA9IGF0aDlrX2VuYWJsZV9yZWd3cml0ZV9idWZmZXI7CisJYWgtPnJlZ19vcHMud3JpdGVfZmx1c2ggPSBhdGg5a19yZWd3cml0ZV9mbHVzaDsKKwlhaC0+cmVnX29wcy5ybXcgPSBhdGg5a19yZWdfcm13OwogCXByaXYtPmFoID0gYWg7CiAKIAljb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwotCWNvbW1vbi0+b3BzID0gJmF0aDlrX2NvbW1vbl9vcHM7CisJY29tbW9uLT5vcHMgPSAmYWgtPnJlZ19vcHM7CiAJY29tbW9uLT5idXNfb3BzID0gJmF0aDlrX3VzYl9idXNfb3BzOwogCWNvbW1vbi0+YWggPSBhaDsKIAljb21tb24tPmh3ID0gcHJpdi0+aHc7CiAJY29tbW9uLT5wcml2ID0gcHJpdjsKIAljb21tb24tPmRlYnVnX21hc2sgPSBhdGg5a19kZWJ1ZzsKIAotCXNwaW5fbG9ja19pbml0KCZwcml2LT53bWktPndtaV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+YmVhY29uX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZwcml2LT50eF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+dHgudHhfbG9jayk7CiAJbXV0ZXhfaW5pdCgmcHJpdi0+bXV0ZXgpOwogCW11dGV4X2luaXQoJnByaXYtPmh0Y19wbV9sb2NrKTsKLQl0YXNrbGV0X2luaXQoJnByaXYtPnN3YmFfdGFza2xldCwgYXRoOWtfc3diYV90YXNrbGV0LAotCQkgICAgICh1bnNpZ25lZCBsb25nKXByaXYpOwogCXRhc2tsZXRfaW5pdCgmcHJpdi0+cnhfdGFza2xldCwgYXRoOWtfcnhfdGFza2xldCwKIAkJICAgICAodW5zaWduZWQgbG9uZylwcml2KTsKLQl0YXNrbGV0X2luaXQoJnByaXYtPnR4X3Rhc2tsZXQsIGF0aDlrX3R4X3Rhc2tsZXQsCisJdGFza2xldF9pbml0KCZwcml2LT50eF9mYWlsZWRfdGFza2xldCwgYXRoOWtfdHhfZmFpbGVkX3Rhc2tsZXQsCiAJCSAgICAgKHVuc2lnbmVkIGxvbmcpcHJpdik7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmFuaV93b3JrLCBhdGg5a19odGNfYW5pX3dvcmspOwogCUlOSVRfV09SSygmcHJpdi0+cHNfd29yaywgYXRoOWtfcHNfd29yayk7CiAJSU5JVF9XT1JLKCZwcml2LT5mYXRhbF93b3JrLCBhdGg5a19mYXRhbF93b3JrKTsKKwlzZXR1cF90aW1lcigmcHJpdi0+dHguY2xlYW51cF90aW1lciwgYXRoOWtfaHRjX3R4X2NsZWFudXBfdGltZXIsCisJCSAgICAodW5zaWduZWQgbG9uZylwcml2KTsKIAogCS8qCiAJICogQ2FjaGUgbGluZSBzaXplIGlzIHVzZWQgdG8gc2l6ZSBhbmQgYWxpZ24gdmFyaW91cwpAQCAtNjk4LDE2ICs3MTQsMTMgQEAKIAkJZ290byBlcnJfaHc7CiAJfQogCi0JcmV0ID0gYXRoOWtfaHRjX2luaXRfZGVidWcoYWgpOwotCWlmIChyZXQpIHsKLQkJYXRoX2Vycihjb21tb24sICJVbmFibGUgdG8gY3JlYXRlIGRlYnVnZnMgZmlsZXNcbiIpOwotCQlnb3RvIGVycl9kZWJ1ZzsKLQl9Ci0KIAlyZXQgPSBhdGg5a19pbml0X3F1ZXVlcyhwcml2KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9xdWV1ZXM7CiAKKwlmb3IgKGkgPSAwOyBpIDwgQVRIOUtfSFRDX01BWF9CQ05fVklGOyBpKyspCisJCXByaXYtPmN1cl9iZWFjb25fY29uZi5ic2xvdFtpXSA9IE5VTEw7CisKIAlhdGg5a19pbml0X2NyeXB0byhwcml2KTsKIAlhdGg5a19pbml0X2NoYW5uZWxzX3JhdGVzKHByaXYpOwogCWF0aDlrX2luaXRfbWlzYyhwcml2KTsKQEAgLTcyMCw4ICs3MzMsNiBAQAogCXJldHVybiAwOwogCiBlcnJfcXVldWVzOgotCWF0aDlrX2h0Y19leGl0X2RlYnVnKGFoKTsKLWVycl9kZWJ1ZzoKIAlhdGg5a19od19kZWluaXQoYWgpOwogZXJyX2h3OgogCkBAIC03NDIsMTcgKzc1MywyNyBAQAogCQlJRUVFODAyMTFfSFdfSEFTX1JBVEVfQ09OVFJPTCB8CiAJCUlFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1MgfAogCQlJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMgfAotCQlJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0s7CisJCUlFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSyB8CisJCUlFRUU4MDIxMV9IV19IT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkc7CiAKIAlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9CiAJCUJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8Ci0JCUJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7CisJCUJJVChOTDgwMjExX0lGVFlQRV9BREhPQykgfAorCQlCSVQoTkw4MDIxMV9JRlRZUEVfQVApIHwKKwkJQklUKE5MODAyMTFfSUZUWVBFX1AyUF9HTykgfAorCQlCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVCk7CiAKIAlody0+d2lwaHktPmZsYWdzICY9IH5XSVBIWV9GTEFHX1BTX09OX0JZX0RFRkFVTFQ7CiAKIAlody0+cXVldWVzID0gNDsKIAlody0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDUwMDA7CiAJaHctPm1heF9saXN0ZW5faW50ZXJ2YWwgPSAxMDsKKworCWlmIChBUl9TUkVWXzkyNzEocHJpdi0+YWgpKQorCQlody0+bWF4X3R4X2FnZ3JlZ2F0aW9uX3N1YmZyYW1lcyA9IE1BWF9UWF9BTVBEVV9TVUJGUkFNRVNfOTI3MTsKKwllbHNlCisJCWh3LT5tYXhfdHhfYWdncmVnYXRpb25fc3ViZnJhbWVzID0gTUFYX1RYX0FNUERVX1NVQkZSQU1FU183MDEwOworCiAJaHctPnZpZl9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGF0aDlrX2h0Y192aWYpOwogCWh3LT5zdGFfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhdGg5a19odGNfc3RhKTsKIApAQCAtNzc5LDYgKzgwMCw0MyBAQAogCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGh3LCBjb21tb24tPm1hY2FkZHIpOwogfQogCitzdGF0aWMgaW50IGF0aDlrX2luaXRfZmlybXdhcmVfdmVyc2lvbihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwcml2LT5odzsKKwlzdHJ1Y3Qgd21pX2Z3X3ZlcnNpb24gY21kX3JzcDsKKwlpbnQgcmV0OworCisJbWVtc2V0KCZjbWRfcnNwLCAwLCBzaXplb2YoY21kX3JzcCkpOworCisJV01JX0NNRChXTUlfR0VUX0ZXX1ZFUlNJT04pOworCWlmIChyZXQpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJpdi0+ZndfdmVyc2lvbl9tYWpvciA9IGJlMTZfdG9fY3B1KGNtZF9yc3AubWFqb3IpOworCXByaXYtPmZ3X3ZlcnNpb25fbWlub3IgPSBiZTE2X3RvX2NwdShjbWRfcnNwLm1pbm9yKTsKKworCXNucHJpbnRmKGh3LT53aXBoeS0+ZndfdmVyc2lvbiwgRVRIVE9PTF9CVVNJTkZPX0xFTiwgIiVkLiVkIiwKKwkJIHByaXYtPmZ3X3ZlcnNpb25fbWFqb3IsCisJCSBwcml2LT5md192ZXJzaW9uX21pbm9yKTsKKworCWRldl9pbmZvKHByaXYtPmRldiwgImF0aDlrX2h0YzogRlcgVmVyc2lvbjogJWQuJWRcbiIsCisJCSBwcml2LT5md192ZXJzaW9uX21ham9yLAorCQkgcHJpdi0+ZndfdmVyc2lvbl9taW5vcik7CisKKwkvKgorCSAqIENoZWNrIGlmIHRoZSBhdmFpbGFibGUgRlcgbWF0Y2hlcyB0aGUgZHJpdmVyJ3MKKwkgKiByZXF1aXJlZCB2ZXJzaW9uLgorCSAqLworCWlmIChwcml2LT5md192ZXJzaW9uX21ham9yICE9IE1BSk9SX1ZFUlNJT05fUkVRIHx8CisJICAgIHByaXYtPmZ3X3ZlcnNpb25fbWlub3IgIT0gTUlOT1JfVkVSU0lPTl9SRVEpIHsKKwkJZGV2X2Vycihwcml2LT5kZXYsICJhdGg5a19odGM6IFBsZWFzZSB1cGdyYWRlIHRvIEZXIHZlcnNpb24gJWQuJWRcbiIsCisJCQlNQUpPUl9WRVJTSU9OX1JFUSwgTUlOT1JfVkVSU0lPTl9SRVEpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBhdGg5a19pbml0X2RldmljZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCiAJCQkgICAgIHUxNiBkZXZpZCwgY2hhciAqcHJvZHVjdCwgdTMyIGRydl9pbmZvKQogewpAQCAtNzk4LDYgKzg1NiwxMCBAQAogCWNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CiAJYXRoOWtfc2V0X2h3X2NhcGFiKHByaXYsIGh3KTsKIAorCWVycm9yID0gYXRoOWtfaW5pdF9maXJtd2FyZV92ZXJzaW9uKHByaXYpOworCWlmIChlcnJvciAhPSAwKQorCQlnb3RvIGVycl9mdzsKKwogCS8qIEluaXRpYWxpemUgcmVndWxhdG9yeSAqLwogCWVycm9yID0gYXRoX3JlZ2RfaW5pdCgmY29tbW9uLT5yZWd1bGF0b3J5LCBwcml2LT5ody0+d2lwaHksCiAJCQkgICAgICBhdGg5a19yZWdfbm90aWZpZXIpOwpAQCAtODE2LDYgKzg3OCwxMyBAQAogCWlmIChlcnJvciAhPSAwKQogCQlnb3RvIGVycl9yeDsKIAorI2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTCisJLyogbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgaWVlZTgwMjExX3JlZ2lzdGVyX2h3ICovCisJcHJpdi0+bGVkX2NkZXYuZGVmYXVsdF90cmlnZ2VyID0gaWVlZTgwMjExX2NyZWF0ZV90cHRfbGVkX3RyaWdnZXIocHJpdi0+aHcsCisJCUlFRUU4MDIxMV9UUFRfTEVEVFJJR19GTF9SQURJTywgYXRoOWtfaHRjX3RwdF9ibGluaywKKwkJQVJSQVlfU0laRShhdGg5a19odGNfdHB0X2JsaW5rKSk7CisjZW5kaWYKKwogCS8qIFJlZ2lzdGVyIHdpdGggbWFjODAyMTEgKi8KIAllcnJvciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhodyk7CiAJaWYgKGVycm9yKQpAQCAtODI4LDYgKzg5NywxMiBAQAogCQkJZ290byBlcnJfd29ybGQ7CiAJfQogCisJZXJyb3IgPSBhdGg5a19odGNfaW5pdF9kZWJ1Zyhwcml2LT5haCk7CisJaWYgKGVycm9yKSB7CisJCWF0aF9lcnIoY29tbW9uLCAiVW5hYmxlIHRvIGNyZWF0ZSBkZWJ1Z2ZzIGZpbGVzXG4iKTsKKwkJZ290byBlcnJfd29ybGQ7CisJfQorCiAJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLAogCQkiV01JOiVkLCBCQ046JWQsIENBQjolZCwgVUFQU0Q6JWQsIE1HTVQ6JWQsICIKIAkJIkJFOiVkLCBCSzolZCwgVkk6JWQsIFZPOiVkXG4iLApAQCAtODU4LDYgKzkzMyw4IEBACiBlcnJfdHg6CiAJLyogTm90aGluZyAqLwogZXJyX3JlZ2Q6CisJLyogTm90aGluZyAqLworZXJyX2Z3OgogCWF0aDlrX2RlaW5pdF9wcml2KHByaXYpOwogZXJyX2luaXQ6CiAJcmV0dXJuIGVycm9yOwpAQCAtOTQ2LDM4ICsxMDIzLDIwIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGF0aDlrX2h0Y19pbml0KHZvaWQpCiB7Ci0JaW50IGVycm9yOwotCi0JZXJyb3IgPSBhdGg5a19odGNfZGVidWdfY3JlYXRlX3Jvb3QoKTsKLQlpZiAoZXJyb3IgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkJImF0aDlrX2h0YzogVW5hYmxlIHRvIGNyZWF0ZSBkZWJ1Z2ZzIHJvb3Q6ICVkXG4iLAotCQkJZXJyb3IpOwotCQlnb3RvIGVycl9kYmc7Ci0JfQotCi0JZXJyb3IgPSBhdGg5a19oaWZfdXNiX2luaXQoKTsKLQlpZiAoZXJyb3IgPCAwKSB7CisJaWYgKGF0aDlrX2hpZl91c2JfaW5pdCgpIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIKIAkJCSJhdGg5a19odGM6IE5vIFVTQiBkZXZpY2VzIGZvdW5kLCIKIAkJCSIgZHJpdmVyIG5vdCBpbnN0YWxsZWQuXG4iKTsKLQkJZXJyb3IgPSAtRU5PREVWOwotCQlnb3RvIGVycl91c2I7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAogCXJldHVybiAwOwotCi1lcnJfdXNiOgotCWF0aDlrX2h0Y19kZWJ1Z19yZW1vdmVfcm9vdCgpOwotZXJyX2RiZzoKLQlyZXR1cm4gZXJyb3I7CiB9CiBtb2R1bGVfaW5pdChhdGg5a19odGNfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhdGg5a19odGNfZXhpdCh2b2lkKQogewogCWF0aDlrX2hpZl91c2JfZXhpdCgpOwotCWF0aDlrX2h0Y19kZWJ1Z19yZW1vdmVfcm9vdCgpOwogCXByaW50ayhLRVJOX0lORk8gImF0aDlrX2h0YzogRHJpdmVyIHVubG9hZGVkXG4iKTsKIH0KIG1vZHVsZV9leGl0KGF0aDlrX2h0Y19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYwppbmRleCBkYjhjMGMwLi41YWExMDRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jCkBAIC0xNiwxMCArMTYsNiBAQAogCiAjaW5jbHVkZSAiaHRjLmgiCiAKLSNpZmRlZiBDT05GSUdfQVRIOUtfSFRDX0RFQlVHRlMKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdGg5a19kZWJ1Z2ZzX3Jvb3Q7Ci0jZW5kaWYKLQogLyoqKioqKioqKioqKiovCiAvKiBVdGlsaXRpZXMgKi8KIC8qKioqKioqKioqKioqLwpAQCAtMTk3LDExICsxOTMsMTYgQEAKIAogCWF0aDlrX2h0Y19zdG9wX2FuaShwcml2KTsKIAlpZWVlODAyMTFfc3RvcF9xdWV1ZXMocHJpdi0+aHcpOwotCWh0Y19zdG9wKHByaXYtPmh0Yyk7CisKKwlkZWxfdGltZXJfc3luYygmcHJpdi0+dHguY2xlYW51cF90aW1lcik7CisJYXRoOWtfaHRjX3R4X2RyYWluKHByaXYpOworCiAJV01JX0NNRChXTUlfRElTQUJMRV9JTlRSX0NNRElEKTsKIAlXTUlfQ01EKFdNSV9EUkFJTl9UWFFfQUxMX0NNRElEKTsKIAlXTUlfQ01EKFdNSV9TVE9QX1JFQ1ZfQ01ESUQpOwogCisJYXRoOWtfd21pX2V2ZW50X2RyYWluKHByaXYpOworCiAJY2FsZGF0YSA9ICZwcml2LT5jYWxkYXRhOwogCXJldCA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBhaC0+Y3VyY2hhbiwgY2FsZGF0YSwgZmFsc2UpOwogCWlmIChyZXQpIHsKQEAgLTIyNSw2ICsyMjYsOSBAQAogCWF0aDlrX2h0Y192aWZfcmVjb25maWcocHJpdik7CiAJaWVlZTgwMjExX3dha2VfcXVldWVzKHByaXYtPmh3KTsKIAorCW1vZF90aW1lcigmcHJpdi0+dHguY2xlYW51cF90aW1lciwKKwkJICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhBVEg5S19IVENfVFhfQ0xFQU5VUF9JTlRFUlZBTCkpOworCiAJYXRoOWtfaHRjX3BzX3Jlc3RvcmUocHJpdik7CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CkBAIC0yNTAsMTEgKzI1NCwxNiBAQAogCWZhc3RjYyA9ICEhKGh3LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfT0ZGQ0hBTk5FTCk7CiAKIAlhdGg5a19odGNfcHNfd2FrZXVwKHByaXYpOwotCWh0Y19zdG9wKHByaXYtPmh0Yyk7CisKKwlkZWxfdGltZXJfc3luYygmcHJpdi0+dHguY2xlYW51cF90aW1lcik7CisJYXRoOWtfaHRjX3R4X2RyYWluKHByaXYpOworCiAJV01JX0NNRChXTUlfRElTQUJMRV9JTlRSX0NNRElEKTsKIAlXTUlfQ01EKFdNSV9EUkFJTl9UWFFfQUxMX0NNRElEKTsKIAlXTUlfQ01EKFdNSV9TVE9QX1JFQ1ZfQ01ESUQpOwogCisJYXRoOWtfd21pX2V2ZW50X2RyYWluKHByaXYpOworCiAJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLAogCQkiKCV1IE1IeikgLT4gKCV1IE1IeiksIEhUOiAlZCwgSFQ0MDogJWQgZmFzdGNjOiAlZFxuIiwKIAkJcHJpdi0+YWgtPmN1cmNoYW4tPmNoYW5uZWwsCkBAIC0yNjMsNiArMjcyLDcgQEAKIAogCWlmICghZmFzdGNjKQogCQljYWxkYXRhID0gJnByaXYtPmNhbGRhdGE7CisKIAlyZXQgPSBhdGg5a19od19yZXNldChhaCwgaGNoYW4sIGNhbGRhdGEsIGZhc3RjYyk7CiAJaWYgKHJldCkgewogCQlhdGhfZXJyKGNvbW1vbiwKQEAgLTI5Niw2ICszMDYsOSBAQAogCSAgICAhKGh3LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfT0ZGQ0hBTk5FTCkpCiAJCWF0aDlrX2h0Y192aWZfcmVjb25maWcocHJpdik7CiAKKwltb2RfdGltZXIoJnByaXYtPnR4LmNsZWFudXBfdGltZXIsCisJCSAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoQVRIOUtfSFRDX1RYX0NMRUFOVVBfSU5URVJWQUwpKTsKKwogZXJyOgogCWF0aDlrX2h0Y19wc19yZXN0b3JlKHByaXYpOwogCXJldHVybiByZXQ7CkBAIC0zMTksNiArMzMyLDExIEBACiAJbWVtY3B5KCZodmlmLm15YWRkciwgY29tbW9uLT5tYWNhZGRyLCBFVEhfQUxFTik7CiAJaHZpZi5pbmRleCA9IHByaXYtPm1vbl92aWZfaWR4OwogCVdNSV9DTURfQlVGKFdNSV9WQVBfUkVNT1ZFX0NNRElELCAmaHZpZik7CisJaWYgKHJldCkgeworCQlhdGhfZXJyKGNvbW1vbiwgIlVuYWJsZSB0byByZW1vdmUgbW9uaXRvciBpbnRlcmZhY2UgYXQgaWR4OiAlZFxuIiwKKwkJCXByaXYtPm1vbl92aWZfaWR4KTsKKwl9CisKIAlwcml2LT5udmlmcy0tOwogCXByaXYtPnZpZl9zbG90ICY9IH4oMSA8PCBwcml2LT5tb25fdmlmX2lkeCk7CiB9CkBAIC0zNDksNyArMzY3LDcgQEAKIAltZW1zZXQoJmh2aWYsIDAsIHNpemVvZihzdHJ1Y3QgYXRoOWtfaHRjX3RhcmdldF92aWYpKTsKIAltZW1jcHkoJmh2aWYubXlhZGRyLCBjb21tb24tPm1hY2FkZHIsIEVUSF9BTEVOKTsKIAotCWh2aWYub3Btb2RlID0gY3B1X3RvX2JlMzIoSFRDX01fTU9OSVRPUik7CisJaHZpZi5vcG1vZGUgPSBIVENfTV9NT05JVE9SOwogCWh2aWYuaW5kZXggPSBmZnoocHJpdi0+dmlmX3Nsb3QpOwogCiAJV01JX0NNRF9CVUYoV01JX1ZBUF9DUkVBVEVfQ01ESUQsICZodmlmKTsKQEAgLTM4Miw3ICs0MDAsNyBAQAogCXRzdGEuaXNfdmlmX3N0YSA9IDE7CiAJdHN0YS5zdGFfaW5kZXggPSBzdGFfaWR4OwogCXRzdGEudmlmX2luZGV4ID0gaHZpZi5pbmRleDsKLQl0c3RhLm1heGFtcGR1ID0gMHhmZmZmOworCXRzdGEubWF4YW1wZHUgPSBjcHVfdG9fYmUxNigweGZmZmYpOwogCiAJV01JX0NNRF9CVUYoV01JX05PREVfQ1JFQVRFX0NNRElELCAmdHN0YSk7CiAJaWYgKHJldCkgewpAQCAtNDQ5LDYgKzQ2Nyw3IEBACiAJc3RydWN0IGF0aDlrX2h0Y19zdGEgKmlzdGE7CiAJaW50IHJldCwgc3RhX2lkeDsKIAl1OCBjbWRfcnNwOworCXUxNiBtYXhhbXBkdTsKIAogCWlmIChwcml2LT5uc3RhdGlvbnMgPj0gQVRIOUtfSFRDX01BWF9TVEEpCiAJCXJldHVybiAtRU5PQlVGUzsKQEAgLTQ2Myw5ICs0ODIsNyBAQAogCQlpc3RhID0gKHN0cnVjdCBhdGg5a19odGNfc3RhICopIHN0YS0+ZHJ2X3ByaXY7CiAJCW1lbWNweSgmdHN0YS5tYWNhZGRyLCBzdGEtPmFkZHIsIEVUSF9BTEVOKTsKIAkJbWVtY3B5KCZ0c3RhLmJzc2lkLCBjb21tb24tPmN1cmJzc2lkLCBFVEhfQUxFTik7Ci0JCXRzdGEuYXNzb2NpZCA9IGNvbW1vbi0+Y3VyYWlkOwogCQl0c3RhLmlzX3ZpZl9zdGEgPSAwOwotCQl0c3RhLnZhbGlkID0gdHJ1ZTsKIAkJaXN0YS0+aW5kZXggPSBzdGFfaWR4OwogCX0gZWxzZSB7CiAJCW1lbWNweSgmdHN0YS5tYWNhZGRyLCB2aWYtPmFkZHIsIEVUSF9BTEVOKTsKQEAgLTQ3NCw3ICs0OTEsMTUgQEAKIAogCXRzdGEuc3RhX2luZGV4ID0gc3RhX2lkeDsKIAl0c3RhLnZpZl9pbmRleCA9IGF2cC0+aW5kZXg7Ci0JdHN0YS5tYXhhbXBkdSA9IDB4ZmZmZjsKKworCWlmICghc3RhKSB7CisJCXRzdGEubWF4YW1wZHUgPSBjcHVfdG9fYmUxNigweGZmZmYpOworCX0gZWxzZSB7CisJCW1heGFtcGR1ID0gMSA8PCAoSUVFRTgwMjExX0hUX01BWF9BTVBEVV9GQUNUT1IgKworCQkJCSBzdGEtPmh0X2NhcC5hbXBkdV9mYWN0b3IpOworCQl0c3RhLm1heGFtcGR1ID0gY3B1X3RvX2JlMTYobWF4YW1wZHUpOworCX0KKwogCWlmIChzdGEgJiYgc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKQogCQl0c3RhLmZsYWdzID0gY3B1X3RvX2JlMTYoQVRIX0hUQ19TVEFfSFQpOwogCkBAIC01NDcsNyArNTcyLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGF0aDlrX2h0Y191cGRhdGVfY2FwX3RhcmdldChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpCitpbnQgYXRoOWtfaHRjX3VwZGF0ZV9jYXBfdGFyZ2V0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKKwkJCQl1OCBlbmFibGVfY29leCkKIHsKIAlzdHJ1Y3QgYXRoOWtfaHRjX2NhcF90YXJnZXQgdGNhcDsKIAlpbnQgcmV0OwpAQCAtNTU1LDEzICs1ODEsOSBAQAogCiAJbWVtc2V0KCZ0Y2FwLCAwLCBzaXplb2Yoc3RydWN0IGF0aDlrX2h0Y19jYXBfdGFyZ2V0KSk7CiAKLQkvKiBGSVhNRTogVmFsdWVzIGFyZSBoYXJkY29kZWQgKi8KLQl0Y2FwLmZsYWdzID0gMHgyNDBjNDA7Ci0JdGNhcC5mbGFnc19leHQgPSAweDgwNjAxMDAwOwotCXRjYXAuYW1wZHVfbGltaXQgPSAweGZmZmYwMDAwOwotCXRjYXAuYW1wZHVfc3ViZnJhbWVzID0gMjA7Ci0JdGNhcC50eF9jaGFpbm1hc2tfbGVnYWN5ID0gcHJpdi0+YWgtPmNhcHMudHhfY2hhaW5tYXNrOwotCXRjYXAucHJvdG1vZGUgPSAxOworCXRjYXAuYW1wZHVfbGltaXQgPSBjcHVfdG9fYmUzMigweGZmZmYpOworCXRjYXAuYW1wZHVfc3ViZnJhbWVzID0gcHJpdi0+aHctPm1heF90eF9hZ2dyZWdhdGlvbl9zdWJmcmFtZXM7CisJdGNhcC5lbmFibGVfY29leCA9IGVuYWJsZV9jb2V4OwogCXRjYXAudHhfY2hhaW5tYXNrID0gcHJpdi0+YWgtPmNhcHMudHhfY2hhaW5tYXNrOwogCiAJV01JX0NNRF9CVUYoV01JX1RBUkdFVF9JQ19VUERBVEVfQ01ESUQsICZ0Y2FwKTsKQEAgLTcwOSwyMTggKzczMSwxMyBAQAogCQkJKGFnZ3IuYWdncl9lbmFibGUpID8gIlN0YXJ0aW5nIiA6ICJTdG9wcGluZyIsCiAJCQlzdGEtPmFkZHIsIHRpZCk7CiAKLQlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCXNwaW5fbG9ja19iaCgmcHJpdi0+dHgudHhfbG9jayk7CiAJaXN0YS0+dGlkX3N0YXRlW3RpZF0gPSAoYWdnci5hZ2dyX2VuYWJsZSAmJiAhcmV0KSA/IEFHR1JfU1RBUlQgOiBBR0dSX1NUT1A7Ci0Jc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKIAogCXJldHVybiByZXQ7CiB9CiAKLS8qKioqKioqKiovCi0vKiBERUJVRyAqLwotLyoqKioqKioqKi8KLQotI2lmZGVmIENPTkZJR19BVEg5S19IVENfREVCVUdGUwotCi1zdGF0aWMgaW50IGF0aDlrX2RlYnVnZnNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2YXRlOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfdGd0X3N0YXRzKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCi0JCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBhdGg5a19odGNfdGFyZ2V0X3N0YXRzIGNtZF9yc3A7Ci0JY2hhciBidWZbNTEyXTsKLQl1bnNpZ25lZCBpbnQgbGVuID0gMDsKLQlpbnQgcmV0ID0gMDsKLQotCW1lbXNldCgmY21kX3JzcCwgMCwgc2l6ZW9mKGNtZF9yc3ApKTsKLQotCVdNSV9DTUQoV01JX1RHVF9TVEFUU19DTURJRCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQotCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkJIiUxOXMgOiAlMTB1XG4iLCAiVFggU2hvcnQgUmV0cmllcyIsCi0JCQliZTMyX3RvX2NwdShjbWRfcnNwLnR4X3Nob3J0cmV0cnkpKTsKLQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJCSIlMTlzIDogJTEwdVxuIiwgIlRYIExvbmcgUmV0cmllcyIsCi0JCQliZTMyX3RvX2NwdShjbWRfcnNwLnR4X2xvbmdyZXRyeSkpOwotCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkJIiUxOXMgOiAlMTB1XG4iLCAiVFggWHJldHJpZXMiLAotCQkJYmUzMl90b19jcHUoY21kX3JzcC50eF94cmV0cmllcykpOwotCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkJIiUxOXMgOiAlMTB1XG4iLCAiVFggVW5hZ2dyLiBYcmV0cmllcyIsCi0JCQliZTMyX3RvX2NwdShjbWRfcnNwLmh0X3R4dW5hZ2dyX3hyZXRyeSkpOwotCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkJIiUxOXMgOiAlMTB1XG4iLCAiVFggWHJldHJpZXMgKEhUKSIsCi0JCQliZTMyX3RvX2NwdShjbWRfcnNwLmh0X3R4X3hyZXRyaWVzKSk7Ci0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCQkiJTE5cyA6ICUxMHVcbiIsICJUWCBSYXRlIiwgcHJpdi0+ZGVidWcudHhyYXRlKTsKLQotCWlmIChsZW4gPiBzaXplb2YoYnVmKSkKLQkJbGVuID0gc2l6ZW9mKGJ1Zik7Ci0KLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfdGd0X3N0YXRzID0gewotCS5yZWFkID0gcmVhZF9maWxlX3RndF9zdGF0cywKLQkub3BlbiA9IGF0aDlrX2RlYnVnZnNfb3BlbiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssCi19OwotCi1zdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfeG1pdChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAotCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgYnVmWzUxMl07Ci0JdW5zaWduZWQgaW50IGxlbiA9IDA7Ci0KLQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJCSIlMjBzIDogJTEwdVxuIiwgIkJ1ZmZlcnMgcXVldWVkIiwKLQkJCXByaXYtPmRlYnVnLnR4X3N0YXRzLmJ1Zl9xdWV1ZWQpOwotCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkJIiUyMHMgOiAlMTB1XG4iLCAiQnVmZmVycyBjb21wbGV0ZWQiLAotCQkJcHJpdi0+ZGVidWcudHhfc3RhdHMuYnVmX2NvbXBsZXRlZCk7Ci0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCQkiJTIwcyA6ICUxMHVcbiIsICJTS0JzIHF1ZXVlZCIsCi0JCQlwcml2LT5kZWJ1Zy50eF9zdGF0cy5za2JfcXVldWVkKTsKLQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJCSIlMjBzIDogJTEwdVxuIiwgIlNLQnMgY29tcGxldGVkIiwKLQkJCXByaXYtPmRlYnVnLnR4X3N0YXRzLnNrYl9jb21wbGV0ZWQpOwotCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkJIiUyMHMgOiAlMTB1XG4iLCAiU0tCcyBkcm9wcGVkIiwKLQkJCXByaXYtPmRlYnVnLnR4X3N0YXRzLnNrYl9kcm9wcGVkKTsKLQotCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkJIiUyMHMgOiAlMTB1XG4iLCAiQkUgcXVldWVkIiwKLQkJCXByaXYtPmRlYnVnLnR4X3N0YXRzLnF1ZXVlX3N0YXRzW1dNRV9BQ19CRV0pOwotCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkJIiUyMHMgOiAlMTB1XG4iLCAiQksgcXVldWVkIiwKLQkJCXByaXYtPmRlYnVnLnR4X3N0YXRzLnF1ZXVlX3N0YXRzW1dNRV9BQ19CS10pOwotCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkJIiUyMHMgOiAlMTB1XG4iLCAiVkkgcXVldWVkIiwKLQkJCXByaXYtPmRlYnVnLnR4X3N0YXRzLnF1ZXVlX3N0YXRzW1dNRV9BQ19WSV0pOwotCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkJIiUyMHMgOiAlMTB1XG4iLCAiVk8gcXVldWVkIiwKLQkJCXByaXYtPmRlYnVnLnR4X3N0YXRzLnF1ZXVlX3N0YXRzW1dNRV9BQ19WT10pOwotCi0JaWYgKGxlbiA+IHNpemVvZihidWYpKQotCQlsZW4gPSBzaXplb2YoYnVmKTsKLQotCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc194bWl0ID0gewotCS5yZWFkID0gcmVhZF9maWxlX3htaXQsCi0JLm9wZW4gPSBhdGg5a19kZWJ1Z2ZzX29wZW4sCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLmxsc2VlayA9IGRlZmF1bHRfbGxzZWVrLAotfTsKLQotc3RhdGljIHNzaXplX3QgcmVhZF9maWxlX3JlY3Yoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQljaGFyIGJ1Zls1MTJdOwotCXVuc2lnbmVkIGludCBsZW4gPSAwOwotCi0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCQkiJTIwcyA6ICUxMHVcbiIsICJTS0JzIGFsbG9jYXRlZCIsCi0JCQlwcml2LT5kZWJ1Zy5yeF9zdGF0cy5za2JfYWxsb2NhdGVkKTsKLQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJCSIlMjBzIDogJTEwdVxuIiwgIlNLQnMgY29tcGxldGVkIiwKLQkJCXByaXYtPmRlYnVnLnJ4X3N0YXRzLnNrYl9jb21wbGV0ZWQpOwotCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkJIiUyMHMgOiAlMTB1XG4iLCAiU0tCcyBEcm9wcGVkIiwKLQkJCXByaXYtPmRlYnVnLnJ4X3N0YXRzLnNrYl9kcm9wcGVkKTsKLQotCWlmIChsZW4gPiBzaXplb2YoYnVmKSkKLQkJbGVuID0gc2l6ZW9mKGJ1Zik7Ci0KLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfcmVjdiA9IHsKLQkucmVhZCA9IHJlYWRfZmlsZV9yZWN2LAotCS5vcGVuID0gYXRoOWtfZGVidWdmc19vcGVuLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKLX07Ci0KLWludCBhdGg5a19odGNfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX2h3ICphaCkKLXsKLQlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKLQlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSAoc3RydWN0IGF0aDlrX2h0Y19wcml2ICopIGNvbW1vbi0+cHJpdjsKLQotCWlmICghYXRoOWtfZGVidWdmc19yb290KQotCQlyZXR1cm4gLUVOT0VOVDsKLQotCXByaXYtPmRlYnVnLmRlYnVnZnNfcGh5ID0gZGVidWdmc19jcmVhdGVfZGlyKHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwKLQkJCQkJCSAgICAgYXRoOWtfZGVidWdmc19yb290KTsKLQlpZiAoIXByaXYtPmRlYnVnLmRlYnVnZnNfcGh5KQotCQlnb3RvIGVycjsKLQotCXByaXYtPmRlYnVnLmRlYnVnZnNfdGd0X3N0YXRzID0gZGVidWdmc19jcmVhdGVfZmlsZSgidGd0X3N0YXRzIiwgU19JUlVTUiwKLQkJCQkJCSAgICBwcml2LT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKLQkJCQkJCSAgICBwcml2LCAmZm9wc190Z3Rfc3RhdHMpOwotCWlmICghcHJpdi0+ZGVidWcuZGVidWdmc190Z3Rfc3RhdHMpCi0JCWdvdG8gZXJyOwotCi0KLQlwcml2LT5kZWJ1Zy5kZWJ1Z2ZzX3htaXQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ4bWl0IiwgU19JUlVTUiwKLQkJCQkJCSAgICAgICBwcml2LT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKLQkJCQkJCSAgICAgICBwcml2LCAmZm9wc194bWl0KTsKLQlpZiAoIXByaXYtPmRlYnVnLmRlYnVnZnNfeG1pdCkKLQkJZ290byBlcnI7Ci0KLQlwcml2LT5kZWJ1Zy5kZWJ1Z2ZzX3JlY3YgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZWN2IiwgU19JUlVTUiwKLQkJCQkJCSAgICAgICBwcml2LT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKLQkJCQkJCSAgICAgICBwcml2LCAmZm9wc19yZWN2KTsKLQlpZiAoIXByaXYtPmRlYnVnLmRlYnVnZnNfcmVjdikKLQkJZ290byBlcnI7Ci0KLQlyZXR1cm4gMDsKLQotZXJyOgotCWF0aDlrX2h0Y19leGl0X2RlYnVnKGFoKTsKLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotdm9pZCBhdGg5a19odGNfZXhpdF9kZWJ1ZyhzdHJ1Y3QgYXRoX2h3ICphaCkKLXsKLQlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKLQlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSAoc3RydWN0IGF0aDlrX2h0Y19wcml2ICopIGNvbW1vbi0+cHJpdjsKLQotCWRlYnVnZnNfcmVtb3ZlKHByaXYtPmRlYnVnLmRlYnVnZnNfcmVjdik7Ci0JZGVidWdmc19yZW1vdmUocHJpdi0+ZGVidWcuZGVidWdmc194bWl0KTsKLQlkZWJ1Z2ZzX3JlbW92ZShwcml2LT5kZWJ1Zy5kZWJ1Z2ZzX3RndF9zdGF0cyk7Ci0JZGVidWdmc19yZW1vdmUocHJpdi0+ZGVidWcuZGVidWdmc19waHkpOwotfQotCi1pbnQgYXRoOWtfaHRjX2RlYnVnX2NyZWF0ZV9yb290KHZvaWQpCi17Ci0JYXRoOWtfZGVidWdmc19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKEtCVUlMRF9NT0ROQU1FLCBOVUxMKTsKLQlpZiAoIWF0aDlrX2RlYnVnZnNfcm9vdCkKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBhdGg5a19odGNfZGVidWdfcmVtb3ZlX3Jvb3Qodm9pZCkKLXsKLQlkZWJ1Z2ZzX3JlbW92ZShhdGg5a19kZWJ1Z2ZzX3Jvb3QpOwotCWF0aDlrX2RlYnVnZnNfcm9vdCA9IE5VTEw7Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfQVRIOUtfSFRDX0RFQlVHRlMgKi8KLQogLyoqKioqKiovCiAvKiBBTkkgKi8KIC8qKioqKioqLwpAQCAtMTA0MCw3ICs4NTcsOCBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JaW50IHBhZHBvcywgcGFkc2l6ZSwgcmV0OworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24ocHJpdi0+YWgpOworCWludCBwYWRwb3MsIHBhZHNpemUsIHJldCwgc2xvdDsKIAogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAKQEAgLTEwNDgsMzAgKzg2NiwzMiBAQAogCXBhZHBvcyA9IGF0aDlrX2Ntbl9wYWRwb3MoaGRyLT5mcmFtZV9jb250cm9sKTsKIAlwYWRzaXplID0gcGFkcG9zICYgMzsKIAlpZiAocGFkc2l6ZSAmJiBza2ItPmxlbiA+IHBhZHBvcykgewotCQlpZiAoc2tiX2hlYWRyb29tKHNrYikgPCBwYWRzaXplKQorCQlpZiAoc2tiX2hlYWRyb29tKHNrYikgPCBwYWRzaXplKSB7CisJCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19YTUlULCAiTm8gcm9vbSBmb3IgcGFkZGluZ1xuIik7CiAJCQlnb3RvIGZhaWxfdHg7CisJCX0KIAkJc2tiX3B1c2goc2tiLCBwYWRzaXplKTsKIAkJbWVtbW92ZShza2ItPmRhdGEsIHNrYi0+ZGF0YSArIHBhZHNpemUsIHBhZHBvcyk7CiAJfQogCi0JcmV0ID0gYXRoOWtfaHRjX3R4X3N0YXJ0KHByaXYsIHNrYik7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCWlmIChyZXQgPT0gLUVOT01FTSkgewotCQkJYXRoX2RiZyhhdGg5a19od19jb21tb24ocHJpdi0+YWgpLCBBVEhfREJHX1hNSVQsCi0JCQkJIlN0b3BwaW5nIFRYIHF1ZXVlc1xuIik7Ci0JCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoaHcpOwotCQkJc3Bpbl9sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKLQkJCXByaXYtPnR4X3F1ZXVlc19zdG9wID0gdHJ1ZTsKLQkJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKLQkJfSBlbHNlIHsKLQkJCWF0aF9kYmcoYXRoOWtfaHdfY29tbW9uKHByaXYtPmFoKSwgQVRIX0RCR19YTUlULAotCQkJCSJUeCBmYWlsZWRcbiIpOwotCQl9CisJc2xvdCA9IGF0aDlrX2h0Y190eF9nZXRfc2xvdChwcml2KTsKKwlpZiAoc2xvdCA8IDApIHsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfWE1JVCwgIk5vIGZyZWUgVFggc2xvdFxuIik7CiAJCWdvdG8gZmFpbF90eDsKIAl9CiAKKwlyZXQgPSBhdGg5a19odGNfdHhfc3RhcnQocHJpdiwgc2tiLCBzbG90LCBmYWxzZSk7CisJaWYgKHJldCAhPSAwKSB7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1hNSVQsICJUeCBmYWlsZWRcbiIpOworCQlnb3RvIGNsZWFyX3Nsb3Q7CisJfQorCisJYXRoOWtfaHRjX2NoZWNrX3N0b3BfcXVldWVzKHByaXYpOworCiAJcmV0dXJuOwogCitjbGVhcl9zbG90OgorCWF0aDlrX2h0Y190eF9jbGVhcl9zbG90KHByaXYsIHNsb3QpOwogZmFpbF90eDoKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogfQpAQCAtMTEyMiw3ICs5NDIsNyBAQAogCiAJYXRoOWtfaG9zdF9yeF9pbml0KHByaXYpOwogCi0JcmV0ID0gYXRoOWtfaHRjX3VwZGF0ZV9jYXBfdGFyZ2V0KHByaXYpOworCXJldCA9IGF0aDlrX2h0Y191cGRhdGVfY2FwX3RhcmdldChwcml2LCAwKTsKIAlpZiAocmV0KQogCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DT05GSUcsCiAJCQkiRmFpbGVkIHRvIHVwZGF0ZSBjYXBhYmlsaXR5IGluIHRhcmdldFxuIik7CkBAIC0xMTMwLDEyICs5NTAsMTUgQEAKIAlwcml2LT5vcF9mbGFncyAmPSB+T1BfSU5WQUxJRDsKIAlodGNfc3RhcnQocHJpdi0+aHRjKTsKIAotCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7Ci0JcHJpdi0+dHhfcXVldWVzX3N0b3AgPSBmYWxzZTsKLQlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKKwlwcml2LT50eC5mbGFncyAmPSB+QVRIOUtfSFRDX09QX1RYX1FVRVVFU19TVE9QOworCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKIAogCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhodyk7CiAKKwltb2RfdGltZXIoJnByaXYtPnR4LmNsZWFudXBfdGltZXIsCisJCSAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoQVRIOUtfSFRDX1RYX0NMRUFOVVBfSU5URVJWQUwpKTsKKwogCWlmIChhaC0+YnRjb2V4X2h3LnNjaGVtZSA9PSBBVEhfQlRDT0VYX0NGR18zV0lSRSkgewogCQlhdGg5a19od19idGNvZXhfc2V0X3dlaWdodChhaCwgQVJfQlRfQ09FWF9XR0hULAogCQkJCQkgICBBUl9TVE9NUF9MT1dfV0xBTl9XR0hUKTsKQEAgLTExNTIsNyArOTc1LDcgQEAKIAlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXRoX2h3ICphaCA9IHByaXYtPmFoOwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwotCWludCByZXQgPSAwOworCWludCByZXQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOwogCXU4IGNtZF9yc3A7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CkBAIC0xMTY0LDI1ICs5ODcsMjcgQEAKIAl9CiAKIAlhdGg5a19odGNfcHNfd2FrZXVwKHByaXYpOwotCWh0Y19zdG9wKHByaXYtPmh0Yyk7CisKIAlXTUlfQ01EKFdNSV9ESVNBQkxFX0lOVFJfQ01ESUQpOwogCVdNSV9DTUQoV01JX0RSQUlOX1RYUV9BTExfQ01ESUQpOwogCVdNSV9DTUQoV01JX1NUT1BfUkVDVl9DTURJRCk7CiAKLQl0YXNrbGV0X2tpbGwoJnByaXYtPnN3YmFfdGFza2xldCk7CiAJdGFza2xldF9raWxsKCZwcml2LT5yeF90YXNrbGV0KTsKLQl0YXNrbGV0X2tpbGwoJnByaXYtPnR4X3Rhc2tsZXQpOwogCi0Jc2tiX3F1ZXVlX3B1cmdlKCZwcml2LT50eF9xdWV1ZSk7CisJZGVsX3RpbWVyX3N5bmMoJnByaXYtPnR4LmNsZWFudXBfdGltZXIpOworCWF0aDlrX2h0Y190eF9kcmFpbihwcml2KTsKKwlhdGg5a193bWlfZXZlbnRfZHJhaW4ocHJpdik7CiAKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAogCS8qIENhbmNlbCBhbGwgdGhlIHJ1bm5pbmcgdGltZXJzL3dvcmsgLi4gKi8KIAljYW5jZWxfd29ya19zeW5jKCZwcml2LT5mYXRhbF93b3JrKTsKIAljYW5jZWxfd29ya19zeW5jKCZwcml2LT5wc193b3JrKTsKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmF0aDlrX2xlZF9ibGlua193b3JrKTsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTCisJY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+bGVkX3dvcmspOworI2VuZGlmCiAJYXRoOWtfaHRjX3N0b3BfYW5pKHByaXYpOwotCWF0aDlrX2xlZF9zdG9wX2JyaWdodG5lc3MocHJpdik7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKQEAgLTEyNDUsMTMgKzEwNzAsMTMgQEAKIAogCXN3aXRjaCAodmlmLT50eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCQlodmlmLm9wbW9kZSA9IGNwdV90b19iZTMyKEhUQ19NX1NUQSk7CisJCWh2aWYub3Btb2RlID0gSFRDX01fU1RBOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgotCQlodmlmLm9wbW9kZSA9IGNwdV90b19iZTMyKEhUQ19NX0lCU1MpOworCQlodmlmLm9wbW9kZSA9IEhUQ19NX0lCU1M7CiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6Ci0JCWh2aWYub3Btb2RlID0gY3B1X3RvX2JlMzIoSFRDX01fSE9TVEFQKTsKKwkJaHZpZi5vcG1vZGUgPSBIVENfTV9IT1NUQVA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWF0aF9lcnIoY29tbW9uLApAQCAtMTI4MSwxNCArMTEwNiwyMCBAQAogCiAJcHJpdi0+dmlmX3Nsb3QgfD0gKDEgPDwgYXZwLT5pbmRleCk7CiAJcHJpdi0+bnZpZnMrKzsKLQlwcml2LT52aWYgPSB2aWY7CiAKIAlJTkNfVklGKHByaXYsIHZpZi0+dHlwZSk7CisKKwlpZiAoKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgfHwKKwkgICAgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykpCisJCWF0aDlrX2h0Y19hc3NpZ25fYnNsb3QocHJpdiwgdmlmKTsKKwogCWF0aDlrX2h0Y19zZXRfb3Btb2RlKHByaXYpOwogCiAJaWYgKChwcml2LT5haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSAmJgotCSAgICAhKHByaXYtPm9wX2ZsYWdzICYgT1BfQU5JX1JVTk5JTkcpKQorCSAgICAhKHByaXYtPm9wX2ZsYWdzICYgT1BfQU5JX1JVTk5JTkcpKSB7CisJCWF0aDlrX2h3X3NldF90c2ZhZGp1c3QocHJpdi0+YWgsIDEpOwogCQlhdGg5a19odGNfc3RhcnRfYW5pKHByaXYpOworCX0KIAogCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKIAkJIkF0dGFjaCBhIFZJRiBvZiB0eXBlOiAlZCBhdCBpZHg6ICVkXG4iLCB2aWYtPnR5cGUsIGF2cC0+aW5kZXgpOwpAQCAtMTMxNywxMyArMTE0OCwyMSBAQAogCW1lbWNweSgmaHZpZi5teWFkZHIsIHZpZi0+YWRkciwgRVRIX0FMRU4pOwogCWh2aWYuaW5kZXggPSBhdnAtPmluZGV4OwogCVdNSV9DTURfQlVGKFdNSV9WQVBfUkVNT1ZFX0NNRElELCAmaHZpZik7CisJaWYgKHJldCkgeworCQlhdGhfZXJyKGNvbW1vbiwgIlVuYWJsZSB0byByZW1vdmUgaW50ZXJmYWNlIGF0IGlkeDogJWRcbiIsCisJCQlhdnAtPmluZGV4KTsKKwl9CiAJcHJpdi0+bnZpZnMtLTsKIAlwcml2LT52aWZfc2xvdCAmPSB+KDEgPDwgYXZwLT5pbmRleCk7CiAKIAlhdGg5a19odGNfcmVtb3ZlX3N0YXRpb24ocHJpdiwgdmlmLCBOVUxMKTsKLQlwcml2LT52aWYgPSBOVUxMOwogCiAJREVDX1ZJRihwcml2LCB2aWYtPnR5cGUpOworCisJaWYgKCh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHx8CisJICAgICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpKQorCQlhdGg5a19odGNfcmVtb3ZlX2JzbG90KHByaXYsIHZpZik7CisKIAlhdGg5a19odGNfc2V0X29wbW9kZShwcml2KTsKIAogCS8qCkBAIC0xNDkzLDEwICsxMzMyLDEzIEBACiAJCQkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKIAlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoOWtfaHRjX3N0YSAqaXN0YTsKIAlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCWF0aDlrX2h0Y19wc193YWtldXAocHJpdik7CisJaXN0YSA9IChzdHJ1Y3QgYXRoOWtfaHRjX3N0YSAqKSBzdGEtPmRydl9wcml2OworCWh0Y19zdGFfZHJhaW4ocHJpdi0+aHRjLCBpc3RhLT5pbmRleCk7CiAJcmV0ID0gYXRoOWtfaHRjX3JlbW92ZV9zdGF0aW9uKHByaXYsIHZpZiwgc3RhKTsKIAlhdGg5a19odGNfcHNfcmVzdG9yZShwcml2KTsKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKQEAgLTE2NDQsNiArMTQ4Niw3IEBACiAJaWYgKChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQpICYmIGJzc19jb25mLT5lbmFibGVfYmVhY29uKSB7CiAJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKIAkJCSJCZWFjb24gZW5hYmxlZCBmb3IgQlNTOiAlcE1cbiIsIGJzc19jb25mLT5ic3NpZCk7CisJCWF0aDlrX2h0Y19zZXRfdHNmYWRqdXN0KHByaXYsIHZpZik7CiAJCXByaXYtPm9wX2ZsYWdzIHw9IE9QX0VOQUJMRV9CRUFDT047CiAJCWF0aDlrX2h0Y19iZWFjb25fY29uZmlnKHByaXYsIHZpZik7CiAJfQpAQCAtMTc0MSw2ICsxNTg0LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwlhdGg5a19odGNfcHNfd2FrZXVwKHByaXYpOwogCiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIElFRUU4MDIxMV9BTVBEVV9SWF9TVEFSVDoKQEAgLTE3NTgsMTQgKzE2MDIsMTUgQEAKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfT1BFUkFUSU9OQUw6CiAJCWlzdGEgPSAoc3RydWN0IGF0aDlrX2h0Y19zdGEgKikgc3RhLT5kcnZfcHJpdjsKLQkJc3Bpbl9sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKwkJc3Bpbl9sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKIAkJaXN0YS0+dGlkX3N0YXRlW3RpZF0gPSBBR0dSX09QRVJBVElPTkFMOwotCQlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYXRoX2VycihhdGg5a19od19jb21tb24ocHJpdi0+YWgpLCAiVW5rbm93biBBTVBEVSBhY3Rpb25cbiIpOwogCX0KIAorCWF0aDlrX2h0Y19wc19yZXN0b3JlKHByaXYpOwogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKQEAgLTE4MTYsNiArMTY2MSw1NSBAQAogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCisvKgorICogQ3VycmVudGx5LCB0aGlzIGlzIHVzZWQgb25seSBmb3Igc2VsZWN0aW5nIHRoZSBtaW5pbXVtIHJhdGUKKyAqIGZvciBtYW5hZ2VtZW50IGZyYW1lcywgcmF0ZSBzZWxlY3Rpb24gZm9yIGRhdGEgZnJhbWVzIHJlbWFpbgorICogdW5hZmZlY3RlZC4KKyAqLworc3RhdGljIGludCBhdGg5a19odGNfc2V0X2JpdHJhdGVfbWFzayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9iaXRyYXRlX21hc2sgKm1hc2spCit7CisJc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihwcml2LT5haCk7CisJc3RydWN0IGF0aDlrX2h0Y190YXJnZXRfcmF0ZV9tYXNrIHRtYXNrOworCXN0cnVjdCBhdGg5a19odGNfdmlmICphdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CisJaW50IHJldCA9IDA7CisJdTggY21kX3JzcDsKKworCW1lbXNldCgmdG1hc2ssIDAsIHNpemVvZihzdHJ1Y3QgYXRoOWtfaHRjX3RhcmdldF9yYXRlX21hc2spKTsKKworCXRtYXNrLnZpZl9pbmRleCA9IGF2cC0+aW5kZXg7CisJdG1hc2suYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CisJdG1hc2subWFzayA9IGNwdV90b19iZTMyKG1hc2stPmNvbnRyb2xbSUVFRTgwMjExX0JBTkRfMkdIWl0ubGVnYWN5KTsKKworCVdNSV9DTURfQlVGKFdNSV9CSVRSQVRFX01BU0tfQ01ESUQsICZ0bWFzayk7CisJaWYgKHJldCkgeworCQlhdGhfZXJyKGNvbW1vbiwKKwkJCSJVbmFibGUgdG8gc2V0IDJHIHJhdGUgbWFzayBmb3IgIgorCQkJImludGVyZmFjZSBhdCBpZHg6ICVkXG4iLCBhdnAtPmluZGV4KTsKKwkJZ290byBvdXQ7CisJfQorCisJdG1hc2suYmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFo7CisJdG1hc2subWFzayA9IGNwdV90b19iZTMyKG1hc2stPmNvbnRyb2xbSUVFRTgwMjExX0JBTkRfNUdIWl0ubGVnYWN5KTsKKworCVdNSV9DTURfQlVGKFdNSV9CSVRSQVRFX01BU0tfQ01ESUQsICZ0bWFzayk7CisJaWYgKHJldCkgeworCQlhdGhfZXJyKGNvbW1vbiwKKwkJCSJVbmFibGUgdG8gc2V0IDVHIHJhdGUgbWFzayBmb3IgIgorCQkJImludGVyZmFjZSBhdCBpZHg6ICVkXG4iLCBhdnAtPmluZGV4KTsKKwkJZ290byBvdXQ7CisJfQorCisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLAorCQkiU2V0IGJpdHJhdGUgbWFza3M6IDB4JXgsIDB4JXhcbiIsCisJCW1hc2stPmNvbnRyb2xbSUVFRTgwMjExX0JBTkRfMkdIWl0ubGVnYWN5LAorCQltYXNrLT5jb250cm9sW0lFRUU4MDIxMV9CQU5EXzVHSFpdLmxlZ2FjeSk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwogc3RydWN0IGllZWU4MDIxMV9vcHMgYXRoOWtfaHRjX29wcyA9IHsKIAkudHggICAgICAgICAgICAgICAgID0gYXRoOWtfaHRjX3R4LAogCS5zdGFydCAgICAgICAgICAgICAgPSBhdGg5a19odGNfc3RhcnQsCkBAIC0xODM4LDQgKzE3MzIsNSBAQAogCS5zZXRfcnRzX3RocmVzaG9sZCAgPSBhdGg5a19odGNfc2V0X3J0c190aHJlc2hvbGQsCiAJLnJma2lsbF9wb2xsICAgICAgICA9IGF0aDlrX2h0Y19yZmtpbGxfcG9sbF9zdGF0ZSwKIAkuc2V0X2NvdmVyYWdlX2NsYXNzID0gYXRoOWtfaHRjX3NldF9jb3ZlcmFnZV9jbGFzcywKKwkuc2V0X2JpdHJhdGVfbWFzayAgID0gYXRoOWtfaHRjX3NldF9iaXRyYXRlX21hc2ssCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfdHhyeC5jCmluZGV4IDRhNGYyN2IuLmE4OThkYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X3R4cnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl90eHJ4LmMKQEAgLTUzLDYgKzUzLDEzOCBAQAogCX0KIH0KIAordm9pZCBhdGg5a19odGNfY2hlY2tfc3RvcF9xdWV1ZXMoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KQoreworCXNwaW5fbG9ja19iaCgmcHJpdi0+dHgudHhfbG9jayk7CisJcHJpdi0+dHgucXVldWVkX2NudCsrOworCWlmICgocHJpdi0+dHgucXVldWVkX2NudCA+PSBBVEg5S19IVENfVFhfVEhSRVNIT0xEKSAmJgorCSAgICAhKHByaXYtPnR4LmZsYWdzICYgQVRIOUtfSFRDX09QX1RYX1FVRVVFU19TVE9QKSkgeworCQlwcml2LT50eC5mbGFncyB8PSBBVEg5S19IVENfT1BfVFhfUVVFVUVTX1NUT1A7CisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhwcml2LT5odyk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKK30KKwordm9pZCBhdGg5a19odGNfY2hlY2tfd2FrZV9xdWV1ZXMoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KQoreworCXNwaW5fbG9ja19iaCgmcHJpdi0+dHgudHhfbG9jayk7CisJaWYgKChwcml2LT50eC5xdWV1ZWRfY250IDwgQVRIOUtfSFRDX1RYX1RIUkVTSE9MRCkgJiYKKwkgICAgKHByaXYtPnR4LmZsYWdzICYgQVRIOUtfSFRDX09QX1RYX1FVRVVFU19TVE9QKSkgeworCQlwcml2LT50eC5mbGFncyAmPSB+QVRIOUtfSFRDX09QX1RYX1FVRVVFU19TVE9QOworCQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMocHJpdi0+aHcpOworCX0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+dHgudHhfbG9jayk7Cit9CisKK2ludCBhdGg5a19odGNfdHhfZ2V0X3Nsb3Qoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KQoreworCWludCBzbG90OworCisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKKwlzbG90ID0gZmluZF9maXJzdF96ZXJvX2JpdChwcml2LT50eC50eF9zbG90LCBNQVhfVFhfQlVGX05VTSk7CisJaWYgKHNsb3QgPj0gTUFYX1RYX0JVRl9OVU0pIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4LnR4X2xvY2spOworCQlyZXR1cm4gLUVOT0JVRlM7CisJfQorCV9fc2V0X2JpdChzbG90LCBwcml2LT50eC50eF9zbG90KTsKKwlzcGluX3VubG9ja19iaCgmcHJpdi0+dHgudHhfbG9jayk7CisKKwlyZXR1cm4gc2xvdDsKK30KKwordm9pZCBhdGg5a19odGNfdHhfY2xlYXJfc2xvdChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsIGludCBzbG90KQoreworCXNwaW5fbG9ja19iaCgmcHJpdi0+dHgudHhfbG9jayk7CisJX19jbGVhcl9iaXQoc2xvdCwgcHJpdi0+dHgudHhfc2xvdCk7CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4LnR4X2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gaHRjX2VuZHBvaW50X2lkIGdldF9odGNfZXBpZChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCisJCQkJCQl1MTYgcW51bSkKK3sKKwllbnVtIGh0Y19lbmRwb2ludF9pZCBlcGlkOworCisJc3dpdGNoIChxbnVtKSB7CisJY2FzZSAwOgorCQlUWF9RU1RBVF9JTkMoV01FX0FDX1ZPKTsKKwkJZXBpZCA9IHByaXYtPmRhdGFfdm9fZXA7CisJCWJyZWFrOworCWNhc2UgMToKKwkJVFhfUVNUQVRfSU5DKFdNRV9BQ19WSSk7CisJCWVwaWQgPSBwcml2LT5kYXRhX3ZpX2VwOworCQlicmVhazsKKwljYXNlIDI6CisJCVRYX1FTVEFUX0lOQyhXTUVfQUNfQkUpOworCQllcGlkID0gcHJpdi0+ZGF0YV9iZV9lcDsKKwkJYnJlYWs7CisJY2FzZSAzOgorCWRlZmF1bHQ6CisJCVRYX1FTVEFUX0lOQyhXTUVfQUNfQkspOworCQllcGlkID0gcHJpdi0+ZGF0YV9ia19lcDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVwaWQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmZfaGVhZCoKK2dldF9odGNfZXBpZF9xdWV1ZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsIHU4IGVwaWQpCit7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihwcml2LT5haCk7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCAqZXBpZF9xdWV1ZSA9IE5VTEw7CisKKwlpZiAoZXBpZCA9PSBwcml2LT5tZ210X2VwKQorCQllcGlkX3F1ZXVlID0gJnByaXYtPnR4Lm1nbXRfZXBfcXVldWU7CisJZWxzZSBpZiAoZXBpZCA9PSBwcml2LT5jYWJfZXApCisJCWVwaWRfcXVldWUgPSAmcHJpdi0+dHguY2FiX2VwX3F1ZXVlOworCWVsc2UgaWYgKGVwaWQgPT0gcHJpdi0+ZGF0YV9iZV9lcCkKKwkJZXBpZF9xdWV1ZSA9ICZwcml2LT50eC5kYXRhX2JlX3F1ZXVlOworCWVsc2UgaWYgKGVwaWQgPT0gcHJpdi0+ZGF0YV9ia19lcCkKKwkJZXBpZF9xdWV1ZSA9ICZwcml2LT50eC5kYXRhX2JrX3F1ZXVlOworCWVsc2UgaWYgKGVwaWQgPT0gcHJpdi0+ZGF0YV92aV9lcCkKKwkJZXBpZF9xdWV1ZSA9ICZwcml2LT50eC5kYXRhX3ZpX3F1ZXVlOworCWVsc2UgaWYgKGVwaWQgPT0gcHJpdi0+ZGF0YV92b19lcCkKKwkJZXBpZF9xdWV1ZSA9ICZwcml2LT50eC5kYXRhX3ZvX3F1ZXVlOworCWVsc2UKKwkJYXRoX2Vycihjb21tb24sICJJbnZhbGlkIEVQSUQ6ICVkXG4iLCBlcGlkKTsKKworCXJldHVybiBlcGlkX3F1ZXVlOworfQorCisvKgorICogUmVtb3ZlcyB0aGUgZHJpdmVyIGhlYWRlciBhbmQgcmV0dXJucyB0aGUgVFggc2xvdCBudW1iZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgc3RyaXBfZHJ2X2hlYWRlcihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCisJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHByaXYtPmFoKTsKKwlzdHJ1Y3QgYXRoOWtfaHRjX3R4X2N0bCAqdHhfY3RsOworCWludCBzbG90OworCisJdHhfY3RsID0gSFRDX1NLQl9DQihza2IpOworCisJaWYgKHR4X2N0bC0+ZXBpZCA9PSBwcml2LT5tZ210X2VwKSB7CisJCXN0cnVjdCB0eF9tZ210X2hkciAqdHhfbWhkciA9CisJCQkoc3RydWN0IHR4X21nbXRfaGRyICopc2tiLT5kYXRhOworCQlzbG90ID0gdHhfbWhkci0+Y29va2llOworCQlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgdHhfbWdtdF9oZHIpKTsKKwl9IGVsc2UgaWYgKCh0eF9jdGwtPmVwaWQgPT0gcHJpdi0+ZGF0YV9ia19lcCkgfHwKKwkJICAgKHR4X2N0bC0+ZXBpZCA9PSBwcml2LT5kYXRhX2JlX2VwKSB8fAorCQkgICAodHhfY3RsLT5lcGlkID09IHByaXYtPmRhdGFfdmlfZXApIHx8CisJCSAgICh0eF9jdGwtPmVwaWQgPT0gcHJpdi0+ZGF0YV92b19lcCkgfHwKKwkJICAgKHR4X2N0bC0+ZXBpZCA9PSBwcml2LT5jYWJfZXApKSB7CisJCXN0cnVjdCB0eF9mcmFtZV9oZHIgKnR4X2ZoZHIgPQorCQkJKHN0cnVjdCB0eF9mcmFtZV9oZHIgKilza2ItPmRhdGE7CisJCXNsb3QgPSB0eF9maGRyLT5jb29raWU7CisJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCB0eF9mcmFtZV9oZHIpKTsKKwl9IGVsc2UgeworCQlhdGhfZXJyKGNvbW1vbiwgIlVuc3VwcG9ydGVkIEVQSUQ6ICVkXG4iLCB0eF9jdGwtPmVwaWQpOworCQlzbG90ID0gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gc2xvdDsKK30KKwogaW50IGF0aF9odGNfdHhxX3VwZGF0ZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsIGludCBxbnVtLAogCQkgICAgICAgc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpbmZvKQogewpAQCAtNzksMjMgKzIxMSwxNDAgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLWludCBhdGg5a19odGNfdHhfc3RhcnQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQgYXRoOWtfaHRjX3R4X21nbXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAorCQkJICAgICAgc3RydWN0IGF0aDlrX2h0Y192aWYgKmF2cCwKKwkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgICB1OCBzdGFfaWR4LCB1OCB2aWZfaWR4LCB1OCBzbG90KQoreworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwlzdHJ1Y3QgdHhfbWdtdF9oZHIgbWdtdF9oZHI7CisJc3RydWN0IGF0aDlrX2h0Y190eF9jdGwgKnR4X2N0bDsKKwl1OCAqdHhfZmhkcjsKKworCXR4X2N0bCA9IEhUQ19TS0JfQ0Ioc2tiKTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCisJbWVtc2V0KHR4X2N0bCwgMCwgc2l6ZW9mKCp0eF9jdGwpKTsKKwltZW1zZXQoJm1nbXRfaGRyLCAwLCBzaXplb2Yoc3RydWN0IHR4X21nbXRfaGRyKSk7CisKKwkvKgorCSAqIFNldCB0aGUgVFNGIGFkanVzdCB2YWx1ZSBmb3IgcHJvYmUgcmVzcG9uc2UKKwkgKiBmcmFtZSBhbHNvLgorCSAqLworCWlmIChhdnAgJiYgdW5saWtlbHkoaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoaGRyLT5mcmFtZV9jb250cm9sKSkpIHsKKwkJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilza2ItPmRhdGE7CisJCW1nbXQtPnUucHJvYmVfcmVzcC50aW1lc3RhbXAgPSBhdnAtPnRzZmFkanVzdDsKKwl9CisKKwl0eF9jdGwtPnR5cGUgPSBBVEg5S19IVENfTUdNVDsKKworCW1nbXRfaGRyLm5vZGVfaWR4ID0gc3RhX2lkeDsKKwltZ210X2hkci52aWZfaWR4ID0gdmlmX2lkeDsKKwltZ210X2hkci50aWRubyA9IDA7CisJbWdtdF9oZHIuZmxhZ3MgPSAwOworCW1nbXRfaGRyLmNvb2tpZSA9IHNsb3Q7CisKKwltZ210X2hkci5rZXlfdHlwZSA9IGF0aDlrX2Ntbl9nZXRfaHdfY3J5cHRvX2tleXR5cGUoc2tiKTsKKwlpZiAobWdtdF9oZHIua2V5X3R5cGUgPT0gQVRIOUtfS0VZX1RZUEVfQ0xFQVIpCisJCW1nbXRfaGRyLmtleWl4ID0gKHU4KSBBVEg5S19UWEtFWUlYX0lOVkFMSUQ7CisJZWxzZQorCQltZ210X2hkci5rZXlpeCA9IHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5LT5od19rZXlfaWR4OworCisJdHhfZmhkciA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKG1nbXRfaGRyKSk7CisJbWVtY3B5KHR4X2ZoZHIsICh1OCAqKSAmbWdtdF9oZHIsIHNpemVvZihtZ210X2hkcikpOworCXR4X2N0bC0+ZXBpZCA9IHByaXYtPm1nbXRfZXA7Cit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX2h0Y190eF9kYXRhKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgdTggc3RhX2lkeCwgdTggdmlmX2lkeCwgdTggc2xvdCwKKwkJCSAgICAgIGJvb2wgaXNfY2FiKQoreworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCXN0cnVjdCBhdGg5a19odGNfdHhfY3RsICp0eF9jdGw7CisJc3RydWN0IHR4X2ZyYW1lX2hkciB0eF9oZHI7CisJdTMyIGZsYWdzID0gMDsKKwl1OCAqcWMsICp0eF9maGRyOworCXUxNiBxbnVtOworCisJdHhfY3RsID0gSFRDX1NLQl9DQihza2IpOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisKKwltZW1zZXQodHhfY3RsLCAwLCBzaXplb2YoKnR4X2N0bCkpOworCW1lbXNldCgmdHhfaGRyLCAwLCBzaXplb2Yoc3RydWN0IHR4X2ZyYW1lX2hkcikpOworCisJdHhfaGRyLm5vZGVfaWR4ID0gc3RhX2lkeDsKKwl0eF9oZHIudmlmX2lkeCA9IHZpZl9pZHg7CisJdHhfaGRyLmNvb2tpZSA9IHNsb3Q7CisKKwkvKgorCSAqIFRoaXMgaXMgYSBiaXQgcmVkdW5kYW50IGJ1dCBpdCBoZWxwcyB0byBnZXQKKwkgKiB0aGUgcGVyLXBhY2tldCBpbmRleCBxdWlja2x5IHdoZW4gZHJhaW5pbmcgdGhlCisJICogVFggcXVldWUgaW4gdGhlIEhJRiBsYXllci4gT3RoZXJ3aXNlIHdlIHdvdWxkCisJICogaGF2ZSB0byBwYXJzZSB0aGUgcGFja2V0IGNvbnRlbnRzIC4uLgorCSAqLworCXR4X2N0bC0+c3RhX2lkeCA9IHN0YV9pZHg7CisKKwlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSB7CisJCXR4X2N0bC0+dHlwZSA9IEFUSDlLX0hUQ19BTVBEVTsKKwkJdHhfaGRyLmRhdGFfdHlwZSA9IEFUSDlLX0hUQ19BTVBEVTsKKwl9IGVsc2UgeworCQl0eF9jdGwtPnR5cGUgPSBBVEg5S19IVENfTk9STUFMOworCQl0eF9oZHIuZGF0YV90eXBlID0gQVRIOUtfSFRDX05PUk1BTDsKKwl9CisKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKKwkJcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKKwkJdHhfaGRyLnRpZG5vID0gcWNbMF0gJiBJRUVFODAyMTFfUU9TX0NUTF9USURfTUFTSzsKKwl9CisKKwkvKiBDaGVjayBmb3IgUlRTIHByb3RlY3Rpb24gKi8KKwlpZiAocHJpdi0+aHctPndpcGh5LT5ydHNfdGhyZXNob2xkICE9ICh1MzIpIC0xKQorCQlpZiAoc2tiLT5sZW4gPiBwcml2LT5ody0+d2lwaHktPnJ0c190aHJlc2hvbGQpCisJCQlmbGFncyB8PSBBVEg5S19IVENfVFhfUlRTQ1RTOworCisJLyogQ1RTLXRvLXNlbGYgKi8KKwlpZiAoIShmbGFncyAmIEFUSDlLX0hUQ19UWF9SVFNDVFMpICYmCisJICAgICh2aWYgJiYgdmlmLT5ic3NfY29uZi51c2VfY3RzX3Byb3QpKQorCQlmbGFncyB8PSBBVEg5S19IVENfVFhfQ1RTT05MWTsKKworCXR4X2hkci5mbGFncyA9IGNwdV90b19iZTMyKGZsYWdzKTsKKwl0eF9oZHIua2V5X3R5cGUgPSBhdGg5a19jbW5fZ2V0X2h3X2NyeXB0b19rZXl0eXBlKHNrYik7CisJaWYgKHR4X2hkci5rZXlfdHlwZSA9PSBBVEg5S19LRVlfVFlQRV9DTEVBUikKKwkJdHhfaGRyLmtleWl4ID0gKHU4KSBBVEg5S19UWEtFWUlYX0lOVkFMSUQ7CisJZWxzZQorCQl0eF9oZHIua2V5aXggPSB0eF9pbmZvLT5jb250cm9sLmh3X2tleS0+aHdfa2V5X2lkeDsKKworCXR4X2ZoZHIgPSBza2JfcHVzaChza2IsIHNpemVvZih0eF9oZHIpKTsKKwltZW1jcHkodHhfZmhkciwgKHU4ICopICZ0eF9oZHIsIHNpemVvZih0eF9oZHIpKTsKKworCWlmIChpc19jYWIpIHsKKwkJQ0FCX1NUQVRfSU5DOworCQl0eF9jdGwtPmVwaWQgPSBwcml2LT5jYWJfZXA7CisJCXJldHVybjsKKwl9CisKKwlxbnVtID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CisJdHhfY3RsLT5lcGlkID0gZ2V0X2h0Y19lcGlkKHByaXYsIHFudW0pOworfQorCitpbnQgYXRoOWtfaHRjX3R4X3N0YXJ0KHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKKwkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgICB1OCBzbG90LCBib29sIGlzX2NhYikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhID0gdHhfaW5mby0+Y29udHJvbC5zdGE7CiAJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiA9IHR4X2luZm8tPmNvbnRyb2wudmlmOwogCXN0cnVjdCBhdGg5a19odGNfc3RhICppc3RhOwotCXN0cnVjdCBhdGg5a19odGNfdmlmICphdnA7Ci0Jc3RydWN0IGF0aDlrX2h0Y190eF9jdGwgdHhfY3RsOwotCWVudW0gaHRjX2VuZHBvaW50X2lkIGVwaWQ7Ci0JdTE2IHFudW07Ci0JX19sZTE2IGZjOwotCXU4ICp0eF9maGRyOworCXN0cnVjdCBhdGg5a19odGNfdmlmICphdnAgPSBOVUxMOwogCXU4IHN0YV9pZHgsIHZpZl9pZHg7CiAKIAloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwotCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOwogCiAJLyoKIAkgKiBGaW5kIG91dCBvbiB3aGljaCBpbnRlcmZhY2UgdGhpcyBwYWNrZXQgaGFzIHRvIGJlCkBAIC0xMjQsMjE4ICszNzMsNDMwIEBACiAJCXN0YV9pZHggPSBwcml2LT52aWZfc3RhX3Bvc1t2aWZfaWR4XTsKIAl9CiAKLQltZW1zZXQoJnR4X2N0bCwgMCwgc2l6ZW9mKHN0cnVjdCBhdGg5a19odGNfdHhfY3RsKSk7CisJaWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCWF0aDlrX2h0Y190eF9kYXRhKHByaXYsIHZpZiwgc2tiLAorCQkJCSAgc3RhX2lkeCwgdmlmX2lkeCwgc2xvdCwgaXNfY2FiKTsKKwllbHNlCisJCWF0aDlrX2h0Y190eF9tZ210KHByaXYsIGF2cCwgc2tiLAorCQkJCSAgc3RhX2lkeCwgdmlmX2lkeCwgc2xvdCk7CiAKLQlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpKSB7Ci0JCXN0cnVjdCB0eF9mcmFtZV9oZHIgdHhfaGRyOwotCQl1MzIgZmxhZ3MgPSAwOwotCQl1OCAqcWM7CiAKLQkJbWVtc2V0KCZ0eF9oZHIsIDAsIHNpemVvZihzdHJ1Y3QgdHhfZnJhbWVfaGRyKSk7Ci0KLQkJdHhfaGRyLm5vZGVfaWR4ID0gc3RhX2lkeDsKLQkJdHhfaGRyLnZpZl9pZHggPSB2aWZfaWR4OwotCi0JCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpIHsKLQkJCXR4X2N0bC50eXBlID0gQVRIOUtfSFRDX0FNUERVOwotCQkJdHhfaGRyLmRhdGFfdHlwZSA9IEFUSDlLX0hUQ19BTVBEVTsKLQkJfSBlbHNlIHsKLQkJCXR4X2N0bC50eXBlID0gQVRIOUtfSFRDX05PUk1BTDsKLQkJCXR4X2hkci5kYXRhX3R5cGUgPSBBVEg5S19IVENfTk9STUFMOwotCQl9Ci0KLQkJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKLQkJCXFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7Ci0JCQl0eF9oZHIudGlkbm8gPSBxY1swXSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOwotCQl9Ci0KLQkJLyogQ2hlY2sgZm9yIFJUUyBwcm90ZWN0aW9uICovCi0JCWlmIChwcml2LT5ody0+d2lwaHktPnJ0c190aHJlc2hvbGQgIT0gKHUzMikgLTEpCi0JCQlpZiAoc2tiLT5sZW4gPiBwcml2LT5ody0+d2lwaHktPnJ0c190aHJlc2hvbGQpCi0JCQkJZmxhZ3MgfD0gQVRIOUtfSFRDX1RYX1JUU0NUUzsKLQotCQkvKiBDVFMtdG8tc2VsZiAqLwotCQlpZiAoIShmbGFncyAmIEFUSDlLX0hUQ19UWF9SVFNDVFMpICYmCi0JCSAgICAodmlmICYmIHZpZi0+YnNzX2NvbmYudXNlX2N0c19wcm90KSkKLQkJCWZsYWdzIHw9IEFUSDlLX0hUQ19UWF9DVFNPTkxZOwotCi0JCXR4X2hkci5mbGFncyA9IGNwdV90b19iZTMyKGZsYWdzKTsKLQkJdHhfaGRyLmtleV90eXBlID0gYXRoOWtfY21uX2dldF9od19jcnlwdG9fa2V5dHlwZShza2IpOwotCQlpZiAodHhfaGRyLmtleV90eXBlID09IEFUSDlLX0tFWV9UWVBFX0NMRUFSKQotCQkJdHhfaGRyLmtleWl4ID0gKHU4KSBBVEg5S19UWEtFWUlYX0lOVkFMSUQ7Ci0JCWVsc2UKLQkJCXR4X2hkci5rZXlpeCA9IHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5LT5od19rZXlfaWR4OwotCi0JCXR4X2ZoZHIgPSBza2JfcHVzaChza2IsIHNpemVvZih0eF9oZHIpKTsKLQkJbWVtY3B5KHR4X2ZoZHIsICh1OCAqKSAmdHhfaGRyLCBzaXplb2YodHhfaGRyKSk7Ci0KLQkJcW51bSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwotCi0JCXN3aXRjaCAocW51bSkgewotCQljYXNlIDA6Ci0JCQlUWF9RU1RBVF9JTkMoV01FX0FDX1ZPKTsKLQkJCWVwaWQgPSBwcml2LT5kYXRhX3ZvX2VwOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCVRYX1FTVEFUX0lOQyhXTUVfQUNfVkkpOwotCQkJZXBpZCA9IHByaXYtPmRhdGFfdmlfZXA7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJVFhfUVNUQVRfSU5DKFdNRV9BQ19CRSk7Ci0JCQllcGlkID0gcHJpdi0+ZGF0YV9iZV9lcDsKLQkJCWJyZWFrOwotCQljYXNlIDM6Ci0JCWRlZmF1bHQ6Ci0JCQlUWF9RU1RBVF9JTkMoV01FX0FDX0JLKTsKLQkJCWVwaWQgPSBwcml2LT5kYXRhX2JrX2VwOwotCQkJYnJlYWs7Ci0JCX0KLQl9IGVsc2UgewotCQlzdHJ1Y3QgdHhfbWdtdF9oZHIgbWdtdF9oZHI7Ci0KLQkJbWVtc2V0KCZtZ210X2hkciwgMCwgc2l6ZW9mKHN0cnVjdCB0eF9tZ210X2hkcikpOwotCi0JCXR4X2N0bC50eXBlID0gQVRIOUtfSFRDX05PUk1BTDsKLQotCQltZ210X2hkci5ub2RlX2lkeCA9IHN0YV9pZHg7Ci0JCW1nbXRfaGRyLnZpZl9pZHggPSB2aWZfaWR4OwotCQltZ210X2hkci50aWRubyA9IDA7Ci0JCW1nbXRfaGRyLmZsYWdzID0gMDsKLQotCQltZ210X2hkci5rZXlfdHlwZSA9IGF0aDlrX2Ntbl9nZXRfaHdfY3J5cHRvX2tleXR5cGUoc2tiKTsKLQkJaWYgKG1nbXRfaGRyLmtleV90eXBlID09IEFUSDlLX0tFWV9UWVBFX0NMRUFSKQotCQkJbWdtdF9oZHIua2V5aXggPSAodTgpIEFUSDlLX1RYS0VZSVhfSU5WQUxJRDsKLQkJZWxzZQotCQkJbWdtdF9oZHIua2V5aXggPSB0eF9pbmZvLT5jb250cm9sLmh3X2tleS0+aHdfa2V5X2lkeDsKLQotCQl0eF9maGRyID0gc2tiX3B1c2goc2tiLCBzaXplb2YobWdtdF9oZHIpKTsKLQkJbWVtY3B5KHR4X2ZoZHIsICh1OCAqKSAmbWdtdF9oZHIsIHNpemVvZihtZ210X2hkcikpOwotCQllcGlkID0gcHJpdi0+bWdtdF9lcDsKLQl9Ci0KLQlyZXR1cm4gaHRjX3NlbmQocHJpdi0+aHRjLCBza2IsIGVwaWQsICZ0eF9jdGwpOworCXJldHVybiBodGNfc2VuZChwcml2LT5odGMsIHNrYik7CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h0Y19jaGVja190eF9hZ2dyKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKLQkJCQkgICAgc3RydWN0IGF0aDlrX2h0Y19zdGEgKmlzdGEsIHU4IHRpZCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBfX2F0aDlrX2h0Y19jaGVja190eF9hZ2dyKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKKwkJCQkJICAgICBzdHJ1Y3QgYXRoOWtfaHRjX3N0YSAqaXN0YSwgdTggdGlkKQogewogCWJvb2wgcmV0ID0gZmFsc2U7CiAKLQlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCXNwaW5fbG9ja19iaCgmcHJpdi0+dHgudHhfbG9jayk7CiAJaWYgKCh0aWQgPCBBVEg5S19IVENfTUFYX1RJRCkgJiYgKGlzdGEtPnRpZF9zdGF0ZVt0aWRdID09IEFHR1JfU1RPUCkpCiAJCXJldCA9IHRydWU7Ci0Jc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKIAogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgYXRoOWtfdHhfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdm9pZCBhdGg5a19odGNfY2hlY2tfdHhfYWdncihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqKWRhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvOwotCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogCV9fbGUxNiBmYzsKIAotCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJnByaXYtPnR4X3F1ZXVlKSkgIT0gTlVMTCkgeworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CiAKLQkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKLQkJZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7Ci0JCXR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0JCXZpZiA9IHR4X2luZm8tPmNvbnRyb2wudmlmOworCXJjdV9yZWFkX2xvY2soKTsKIAotCQltZW1zZXQoJnR4X2luZm8tPnN0YXR1cywgMCwgc2l6ZW9mKHR4X2luZm8tPnN0YXR1cykpOworCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YSh2aWYsIGhkci0+YWRkcjEpOworCWlmICghc3RhKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXR1cm47CisJfQogCi0JCWlmICghdmlmKQotCQkJZ290byBzZW5kX21hYzgwMjExOworCWlmIChzdGEgJiYgY29uZl9pc19odCgmcHJpdi0+aHctPmNvbmYpICYmCisJICAgICEoc2tiLT5wcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9QQUUpKSkgeworCQlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgeworCQkJdTggKnFjLCB0aWQ7CisJCQlzdHJ1Y3QgYXRoOWtfaHRjX3N0YSAqaXN0YTsKIAotCQlyY3VfcmVhZF9sb2NrKCk7CisJCQlxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpOworCQkJdGlkID0gcWNbMF0gJiAweGY7CisJCQlpc3RhID0gKHN0cnVjdCBhdGg5a19odGNfc3RhICopc3RhLT5kcnZfcHJpdjsKKwkJCWlmIChfX2F0aDlrX2h0Y19jaGVja190eF9hZ2dyKHByaXYsIGlzdGEsIHRpZCkpIHsKKwkJCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbihzdGEsIHRpZCwgMCk7CisJCQkJc3Bpbl9sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKKwkJCQlpc3RhLT50aWRfc3RhdGVbdGlkXSA9IEFHR1JfUFJPR1JFU1M7CisJCQkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4LnR4X2xvY2spOworCQkJfQorCQl9CisJfQogCi0JCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YSh2aWYsIGhkci0+YWRkcjEpOwotCQlpZiAoIXN0YSkgewotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQlpZWVlODAyMTFfdHhfc3RhdHVzKHByaXYtPmh3LCBza2IpOworCXJjdV9yZWFkX3VubG9jaygpOworfQorCitzdGF0aWMgdm9pZCBhdGg5a19odGNfdHhfcHJvY2VzcyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCisJCQkJIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJIHN0cnVjdCBfX3dtaV9ldmVudF90eHN0YXR1cyAqdHhzKQoreworCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7CisJc3RydWN0IGF0aDlrX2h0Y190eF9jdGwgKnR4X2N0bDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm87CisJc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlOworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY3VyX2NvbmYgPSAmcHJpdi0+aHctPmNvbmY7CisJYm9vbCB0eG9rOworCWludCBzbG90OworCisJc2xvdCA9IHN0cmlwX2Rydl9oZWFkZXIocHJpdiwgc2tiKTsKKwlpZiAoc2xvdCA8IDApIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJcmV0dXJuOworCX0KKworCXR4X2N0bCA9IEhUQ19TS0JfQ0Ioc2tiKTsKKwl0eG9rID0gdHhfY3RsLT50eG9rOworCXR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJdmlmID0gdHhfaW5mby0+Y29udHJvbC52aWY7CisJcmF0ZSA9ICZ0eF9pbmZvLT5zdGF0dXMucmF0ZXNbMF07CisKKwltZW1zZXQoJnR4X2luZm8tPnN0YXR1cywgMCwgc2l6ZW9mKHR4X2luZm8tPnN0YXR1cykpOworCisJLyoKKwkgKiBVUkIgc3VibWlzc2lvbiBmYWlsZWQgZm9yIHRoaXMgZnJhbWUsIGl0IG5ldmVyIHJlYWNoZWQKKwkgKiB0aGUgdGFyZ2V0LgorCSAqLworCWlmICghdHhvayB8fCAhdmlmIHx8ICF0eHMpCisJCWdvdG8gc2VuZF9tYWM4MDIxMTsKKworCWlmICh0eHMtPnRzX2ZsYWdzICYgQVRIOUtfSFRDX1RYU1RBVF9BQ0spCisJCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKKworCWlmICh0eHMtPnRzX2ZsYWdzICYgQVRIOUtfSFRDX1RYU1RBVF9GSUxUKQorCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9UWF9GSUxURVJFRDsKKworCWlmICh0eHMtPnRzX2ZsYWdzICYgQVRIOUtfSFRDX1RYU1RBVF9SVENfQ1RTKQorCQlyYXRlLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFM7CisKKwlyYXRlLT5jb3VudCA9IDE7CisJcmF0ZS0+aWR4ID0gTVModHhzLT50c19yYXRlLCBBVEg5S19IVENfVFhTVEFUX1JBVEUpOworCisJaWYgKHR4cy0+dHNfZmxhZ3MgJiBBVEg5S19IVENfVFhTVEFUX01DUykgeworCQlyYXRlLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfTUNTOworCisJCWlmICh0eHMtPnRzX2ZsYWdzICYgQVRIOUtfSFRDX1RYU1RBVF9DVzQwKQorCQkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSDsKKwkJaWYgKHR4cy0+dHNfZmxhZ3MgJiBBVEg5S19IVENfVFhTVEFUX1NHSSkKKwkJCXJhdGUtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSTsKKwl9IGVsc2UgeworCQlpZiAoY3VyX2NvbmYtPmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKKwkJCXJhdGUtPmlkeCArPSA0OyAvKiBObyBDQ0sgcmF0ZXMgKi8KKwl9CisKKwlhdGg5a19odGNfY2hlY2tfdHhfYWdncihwcml2LCB2aWYsIHNrYik7CisKK3NlbmRfbWFjODAyMTE6CisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKKwlpZiAoV0FSTl9PTigtLXByaXYtPnR4LnF1ZXVlZF9jbnQgPCAwKSkKKwkJcHJpdi0+dHgucXVldWVkX2NudCA9IDA7CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4LnR4X2xvY2spOworCisJYXRoOWtfaHRjX3R4X2NsZWFyX3Nsb3QocHJpdiwgc2xvdCk7CisKKwkvKiBTZW5kIHN0YXR1cyB0byBtYWM4MDIxMSAqLworCWllZWU4MDIxMV90eF9zdGF0dXMocHJpdi0+aHcsIHNrYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19odGNfdHhfZHJhaW5xKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKKwkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUocXVldWUpKSAhPSBOVUxMKSB7CisJCWF0aDlrX2h0Y190eF9wcm9jZXNzKHByaXYsIHNrYiwgTlVMTCk7CisJfQorfQorCit2b2lkIGF0aDlrX2h0Y190eF9kcmFpbihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpCit7CisJc3RydWN0IGF0aDlrX2h0Y190eF9ldmVudCAqZXZlbnQsICp0bXA7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPnR4LnR4X2xvY2spOworCXByaXYtPnR4LmZsYWdzIHw9IEFUSDlLX0hUQ19PUF9UWF9EUkFJTjsKKwlzcGluX3VubG9ja19iaCgmcHJpdi0+dHgudHhfbG9jayk7CisKKwkvKgorCSAqIEVuc3VyZSB0aGF0IGFsbCBwZW5kaW5nIFRYIGZyYW1lcyBhcmUgZmx1c2hlZCwKKwkgKiBhbmQgdGhhdCB0aGUgVFggY29tcGxldGlvbi9mYWlsZWQgdGFza2xldHMgaXMga2lsbGVkLgorCSAqLworCWh0Y19zdG9wKHByaXYtPmh0Yyk7CisJdGFza2xldF9raWxsKCZwcml2LT53bWktPndtaV9ldmVudF90YXNrbGV0KTsKKwl0YXNrbGV0X2tpbGwoJnByaXYtPnR4X2ZhaWxlZF90YXNrbGV0KTsKKworCWF0aDlrX2h0Y190eF9kcmFpbnEocHJpdiwgJnByaXYtPnR4Lm1nbXRfZXBfcXVldWUpOworCWF0aDlrX2h0Y190eF9kcmFpbnEocHJpdiwgJnByaXYtPnR4LmNhYl9lcF9xdWV1ZSk7CisJYXRoOWtfaHRjX3R4X2RyYWlucShwcml2LCAmcHJpdi0+dHguZGF0YV9iZV9xdWV1ZSk7CisJYXRoOWtfaHRjX3R4X2RyYWlucShwcml2LCAmcHJpdi0+dHguZGF0YV9ia19xdWV1ZSk7CisJYXRoOWtfaHRjX3R4X2RyYWlucShwcml2LCAmcHJpdi0+dHguZGF0YV92aV9xdWV1ZSk7CisJYXRoOWtfaHRjX3R4X2RyYWlucShwcml2LCAmcHJpdi0+dHguZGF0YV92b19xdWV1ZSk7CisJYXRoOWtfaHRjX3R4X2RyYWlucShwcml2LCAmcHJpdi0+dHgudHhfZmFpbGVkKTsKKworCS8qCisJICogVGhlIFRYIGNsZWFudXAgdGltZXIgaGFzIGFscmVhZHkgYmVlbiBraWxsZWQuCisJICovCisJc3Bpbl9sb2NrX2JoKCZwcml2LT53bWktPmV2ZW50X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldmVudCwgdG1wLCAmcHJpdi0+d21pLT5wZW5kaW5nX3R4X2V2ZW50cywgbGlzdCkgeworCQlsaXN0X2RlbCgmZXZlbnQtPmxpc3QpOworCQlrZnJlZShldmVudCk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT53bWktPmV2ZW50X2xvY2spOworCisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKKwlwcml2LT50eC5mbGFncyAmPSB+QVRIOUtfSFRDX09QX1RYX0RSQUlOOworCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eC50eF9sb2NrKTsKK30KKwordm9pZCBhdGg5a190eF9mYWlsZWRfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqKWRhdGE7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPnR4LnR4X2xvY2spOworCWlmIChwcml2LT50eC5mbGFncyAmIEFUSDlLX0hUQ19PUF9UWF9EUkFJTikgeworCQlzcGluX3VubG9ja19iaCgmcHJpdi0+dHgudHhfbG9jayk7CisJCXJldHVybjsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4LnR4X2xvY2spOworCisJYXRoOWtfaHRjX3R4X2RyYWlucShwcml2LCAmcHJpdi0+dHgudHhfZmFpbGVkKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGNoZWNrX2Nvb2tpZShzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQl1OCBjb29raWUsIHU4IGVwaWQpCit7CisJdTggZmNvb2tpZSA9IDA7CisKKwlpZiAoZXBpZCA9PSBwcml2LT5tZ210X2VwKSB7CisJCXN0cnVjdCB0eF9tZ210X2hkciAqaGRyOworCQloZHIgPSAoc3RydWN0IHR4X21nbXRfaGRyICopIHNrYi0+ZGF0YTsKKwkJZmNvb2tpZSA9IGhkci0+Y29va2llOworCX0gZWxzZSBpZiAoKGVwaWQgPT0gcHJpdi0+ZGF0YV9ia19lcCkgfHwKKwkJICAgKGVwaWQgPT0gcHJpdi0+ZGF0YV9iZV9lcCkgfHwKKwkJICAgKGVwaWQgPT0gcHJpdi0+ZGF0YV92aV9lcCkgfHwKKwkJICAgKGVwaWQgPT0gcHJpdi0+ZGF0YV92b19lcCkgfHwKKwkJICAgKGVwaWQgPT0gcHJpdi0+Y2FiX2VwKSkgeworCQlzdHJ1Y3QgdHhfZnJhbWVfaGRyICpoZHI7CisJCWhkciA9IChzdHJ1Y3QgdHhfZnJhbWVfaGRyICopIHNrYi0+ZGF0YTsKKwkJZmNvb2tpZSA9IGhkci0+Y29va2llOworCX0KKworCWlmIChmY29va2llID09IGNvb2tpZSkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiogYXRoOWtfaHRjX3R4X2dldF9wYWNrZXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2LAorCQkJCQkgICAgICAgc3RydWN0IF9fd21pX2V2ZW50X3R4c3RhdHVzICp0eHMpCit7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihwcml2LT5haCk7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCAqZXBpZF9xdWV1ZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggZXBpZCA9IE1TKHR4cy0+dHNfcmF0ZSwgQVRIOUtfSFRDX1RYU1RBVF9FUElEKTsKKworCWVwaWRfcXVldWUgPSBnZXRfaHRjX2VwaWRfcXVldWUocHJpdiwgZXBpZCk7CisJaWYgKCFlcGlkX3F1ZXVlKQorCQlyZXR1cm4gTlVMTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlcGlkX3F1ZXVlLT5sb2NrLCBmbGFncyk7CisJc2tiX3F1ZXVlX3dhbGtfc2FmZShlcGlkX3F1ZXVlLCBza2IsIHRtcCkgeworCQlpZiAoY2hlY2tfY29va2llKHByaXYsIHNrYiwgdHhzLT5jb29raWUsIGVwaWQpKSB7CisJCQlfX3NrYl91bmxpbmsoc2tiLCBlcGlkX3F1ZXVlKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwaWRfcXVldWUtPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybiBza2I7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXBpZF9xdWV1ZS0+bG9jaywgZmxhZ3MpOworCisJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfWE1JVCwKKwkJIk5vIG1hdGNoaW5nIHBhY2tldCBmb3IgY29va2llOiAlZCwgZXBpZDogJWRcbiIsCisJCXR4cy0+Y29va2llLCBlcGlkKTsKKworCXJldHVybiBOVUxMOworfQorCit2b2lkIGF0aDlrX2h0Y190eHN0YXR1cyhzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsIHZvaWQgKndtaV9ldmVudCkKK3sKKwlzdHJ1Y3Qgd21pX2V2ZW50X3R4c3RhdHVzICp0eHMgPSAoc3RydWN0IHdtaV9ldmVudF90eHN0YXR1cyAqKXdtaV9ldmVudDsKKwlzdHJ1Y3QgX193bWlfZXZlbnRfdHhzdGF0dXMgKl9fdHhzOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGF0aDlrX2h0Y190eF9ldmVudCAqdHhfcGVuZDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCB0eHMtPmNudDsgaSsrKSB7CisJCVdBUk5fT04odHhzLT5jbnQgPiBIVENfTUFYX1RYX1NUQVRVUyk7CisKKwkJX190eHMgPSAmdHhzLT50eHN0YXR1c1tpXTsKKworCQlza2IgPSBhdGg5a19odGNfdHhfZ2V0X3BhY2tldChwcml2LCBfX3R4cyk7CisJCWlmICghc2tiKSB7CisJCQkvKgorCQkJICogU3RvcmUgdGhpcyBldmVudCwgc28gdGhhdCB0aGUgVFggY2xlYW51cAorCQkJICogcm91dGluZSBjYW4gY2hlY2sgbGF0ZXIgZm9yIHRoZSBuZWVkZWQgcGFja2V0LgorCQkJICovCisJCQl0eF9wZW5kID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGF0aDlrX2h0Y190eF9ldmVudCksCisJCQkJCSAgR0ZQX0FUT01JQyk7CisJCQlpZiAoIXR4X3BlbmQpCisJCQkJY29udGludWU7CisKKwkJCW1lbWNweSgmdHhfcGVuZC0+dHhzLCBfX3R4cywKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IF9fd21pX2V2ZW50X3R4c3RhdHVzKSk7CisKKwkJCXNwaW5fbG9jaygmcHJpdi0+d21pLT5ldmVudF9sb2NrKTsKKwkJCWxpc3RfYWRkX3RhaWwoJnR4X3BlbmQtPmxpc3QsCisJCQkJICAgICAgJnByaXYtPndtaS0+cGVuZGluZ190eF9ldmVudHMpOworCQkJc3Bpbl91bmxvY2soJnByaXYtPndtaS0+ZXZlbnRfbG9jayk7CisKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJLyogQ2hlY2sgaWYgd2UgbmVlZCB0byBzdGFydCBhZ2dyZWdhdGlvbiAqLwotCi0JCWlmIChzdGEgJiYgY29uZl9pc19odCgmcHJpdi0+aHctPmNvbmYpICYmCi0JCSAgICAhKHNrYi0+cHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfUEFFKSkpIHsKLQkJCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7Ci0JCQkJdTggKnFjLCB0aWQ7Ci0JCQkJc3RydWN0IGF0aDlrX2h0Y19zdGEgKmlzdGE7Ci0KLQkJCQlxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpOwotCQkJCXRpZCA9IHFjWzBdICYgMHhmOwotCQkJCWlzdGEgPSAoc3RydWN0IGF0aDlrX2h0Y19zdGEgKilzdGEtPmRydl9wcml2OwotCi0JCQkJaWYgKGF0aDlrX2h0Y19jaGVja190eF9hZ2dyKHByaXYsIGlzdGEsIHRpZCkpIHsKLQkJCQkJaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24oc3RhLCB0aWQsIDApOwotCQkJCQlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOwotCQkJCQlpc3RhLT50aWRfc3RhdGVbdGlkXSA9IEFHR1JfUFJPR1JFU1M7Ci0JCQkJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlyY3VfcmVhZF91bmxvY2soKTsKLQotCXNlbmRfbWFjODAyMTE6Ci0JCS8qIFNlbmQgc3RhdHVzIHRvIG1hYzgwMjExICovCi0JCWllZWU4MDIxMV90eF9zdGF0dXMocHJpdi0+aHcsIHNrYik7CisJCWF0aDlrX2h0Y190eF9wcm9jZXNzKHByaXYsIHNrYiwgX190eHMpOwogCX0KIAogCS8qIFdha2UgVFggcXVldWVzIGlmIG5lZWRlZCAqLwotCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7Ci0JaWYgKHByaXYtPnR4X3F1ZXVlc19zdG9wKSB7Ci0JCXByaXYtPnR4X3F1ZXVlc19zdG9wID0gZmFsc2U7Ci0JCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKLQkJYXRoX2RiZyhhdGg5a19od19jb21tb24ocHJpdi0+YWgpLCBBVEhfREJHX1hNSVQsCi0JCQkiV2FraW5nIHVwIFRYIHF1ZXVlc1xuIik7Ci0JCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhwcml2LT5odyk7Ci0JCXJldHVybjsKLQl9Ci0Jc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCWF0aDlrX2h0Y19jaGVja193YWtlX3F1ZXVlcyhwcml2KTsKIH0KIAogdm9pZCBhdGg5a19odGNfdHhlcCh2b2lkICpkcnZfcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICAgIGVudW0gaHRjX2VuZHBvaW50X2lkIGVwX2lkLCBib29sIHR4b2spCiB7CiAJc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqKSBkcnZfcHJpdjsKLQlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHByaXYtPmFoKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm87CisJc3RydWN0IGF0aDlrX2h0Y190eF9jdGwgKnR4X2N0bDsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICplcGlkX3F1ZXVlOwogCi0JaWYgKCFza2IpCisJdHhfY3RsID0gSFRDX1NLQl9DQihza2IpOworCXR4X2N0bC0+dHhvayA9IHR4b2s7CisJdHhfY3RsLT50aW1lc3RhbXAgPSBqaWZmaWVzOworCisJaWYgKCF0eG9rKSB7CisJCXNrYl9xdWV1ZV90YWlsKCZwcml2LT50eC50eF9mYWlsZWQsIHNrYik7CisJCXRhc2tsZXRfc2NoZWR1bGUoJnByaXYtPnR4X2ZhaWxlZF90YXNrbGV0KTsKIAkJcmV0dXJuOworCX0KIAotCWlmIChlcF9pZCA9PSBwcml2LT5tZ210X2VwKSB7Ci0JCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCB0eF9tZ210X2hkcikpOwotCX0gZWxzZSBpZiAoKGVwX2lkID09IHByaXYtPmRhdGFfYmtfZXApIHx8Ci0JCSAgIChlcF9pZCA9PSBwcml2LT5kYXRhX2JlX2VwKSB8fAotCQkgICAoZXBfaWQgPT0gcHJpdi0+ZGF0YV92aV9lcCkgfHwKLQkJICAgKGVwX2lkID09IHByaXYtPmRhdGFfdm9fZXApKSB7Ci0JCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCB0eF9mcmFtZV9oZHIpKTsKLQl9IGVsc2UgewotCQlhdGhfZXJyKGNvbW1vbiwgIlVuc3VwcG9ydGVkIFRYIEVQSUQ6ICVkXG4iLCBlcF9pZCk7CisJZXBpZF9xdWV1ZSA9IGdldF9odGNfZXBpZF9xdWV1ZShwcml2LCBlcF9pZCk7CisJaWYgKCFlcGlkX3F1ZXVlKSB7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCXJldHVybjsKIAl9CiAKLQl0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXNrYl9xdWV1ZV90YWlsKGVwaWRfcXVldWUsIHNrYik7Cit9CiAKLQlpZiAodHhvaykKLQkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOworc3RhdGljIGlubGluZSBib29sIGNoZWNrX3BhY2tldChzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihwcml2LT5haCk7CisJc3RydWN0IGF0aDlrX2h0Y190eF9jdGwgKnR4X2N0bDsKIAotCXNrYl9xdWV1ZV90YWlsKCZwcml2LT50eF9xdWV1ZSwgc2tiKTsKLQl0YXNrbGV0X3NjaGVkdWxlKCZwcml2LT50eF90YXNrbGV0KTsKKwl0eF9jdGwgPSBIVENfU0tCX0NCKHNrYik7CisKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLAorCQkgICAgICAgdHhfY3RsLT50aW1lc3RhbXAgKworCQkgICAgICAgbXNlY3NfdG9famlmZmllcyhBVEg5S19IVENfVFhfVElNRU9VVF9JTlRFUlZBTCkpKSB7CisJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1hNSVQsCisJCQkiRHJvcHBpbmcgYSBwYWNrZXQgZHVlIHRvIFRYIHRpbWVvdXRcbiIpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX2h0Y190eF9jbGVhbnVwX3F1ZXVlKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiwKKwkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZXBpZF9xdWV1ZSkKK3sKKwlib29sIHByb2Nlc3MgPSBmYWxzZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBza19idWZmICpza2IsICp0bXA7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCBxdWV1ZTsKKworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnF1ZXVlKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlcGlkX3F1ZXVlLT5sb2NrLCBmbGFncyk7CisJc2tiX3F1ZXVlX3dhbGtfc2FmZShlcGlkX3F1ZXVlLCBza2IsIHRtcCkgeworCQlpZiAoY2hlY2tfcGFja2V0KHByaXYsIHNrYikpIHsKKwkJCV9fc2tiX3VubGluayhza2IsIGVwaWRfcXVldWUpOworCQkJX19za2JfcXVldWVfdGFpbCgmcXVldWUsIHNrYik7CisJCQlwcm9jZXNzID0gdHJ1ZTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcGlkX3F1ZXVlLT5sb2NrLCBmbGFncyk7CisKKwlpZiAocHJvY2VzcykgeworCQlza2JfcXVldWVfd2Fsa19zYWZlKCZxdWV1ZSwgc2tiLCB0bXApIHsKKwkJCV9fc2tiX3VubGluayhza2IsICZxdWV1ZSk7CisJCQlhdGg5a19odGNfdHhfcHJvY2Vzcyhwcml2LCBza2IsIE5VTEwpOworCQl9CisJfQorfQorCit2b2lkIGF0aDlrX2h0Y190eF9jbGVhbnVwX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYgPSAoc3RydWN0IGF0aDlrX2h0Y19wcml2ICopIGRhdGE7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihwcml2LT5haCk7CisJc3RydWN0IGF0aDlrX2h0Y190eF9ldmVudCAqZXZlbnQsICp0bXA7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCXNwaW5fbG9jaygmcHJpdi0+d21pLT5ldmVudF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXZlbnQsIHRtcCwgJnByaXYtPndtaS0+cGVuZGluZ190eF9ldmVudHMsIGxpc3QpIHsKKworCQlza2IgPSBhdGg5a19odGNfdHhfZ2V0X3BhY2tldChwcml2LCAmZXZlbnQtPnR4cyk7CisJCWlmIChza2IpIHsKKwkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1hNSVQsCisJCQkJIkZvdW5kIHBhY2tldCBmb3IgY29va2llOiAlZCwgZXBpZDogJWRcbiIsCisJCQkJZXZlbnQtPnR4cy5jb29raWUsCisJCQkJTVMoZXZlbnQtPnR4cy50c19yYXRlLCBBVEg5S19IVENfVFhTVEFUX0VQSUQpKTsKKworCQkJYXRoOWtfaHRjX3R4X3Byb2Nlc3MocHJpdiwgc2tiLCAmZXZlbnQtPnR4cyk7CisJCQlsaXN0X2RlbCgmZXZlbnQtPmxpc3QpOworCQkJa2ZyZWUoZXZlbnQpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoKytldmVudC0+Y291bnQgPj0gQVRIOUtfSFRDX1RYX1RJTUVPVVRfQ09VTlQpIHsKKwkJCWxpc3RfZGVsKCZldmVudC0+bGlzdCk7CisJCQlrZnJlZShldmVudCk7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJnByaXYtPndtaS0+ZXZlbnRfbG9jayk7CisKKwkvKgorCSAqIENoZWNrIGlmIHN0YXR1cy1wZW5kaW5nIHBhY2tldHMgaGF2ZSB0byBiZSBjbGVhbmVkIHVwLgorCSAqLworCWF0aDlrX2h0Y190eF9jbGVhbnVwX3F1ZXVlKHByaXYsICZwcml2LT50eC5tZ210X2VwX3F1ZXVlKTsKKwlhdGg5a19odGNfdHhfY2xlYW51cF9xdWV1ZShwcml2LCAmcHJpdi0+dHguY2FiX2VwX3F1ZXVlKTsKKwlhdGg5a19odGNfdHhfY2xlYW51cF9xdWV1ZShwcml2LCAmcHJpdi0+dHguZGF0YV9iZV9xdWV1ZSk7CisJYXRoOWtfaHRjX3R4X2NsZWFudXBfcXVldWUocHJpdiwgJnByaXYtPnR4LmRhdGFfYmtfcXVldWUpOworCWF0aDlrX2h0Y190eF9jbGVhbnVwX3F1ZXVlKHByaXYsICZwcml2LT50eC5kYXRhX3ZpX3F1ZXVlKTsKKwlhdGg5a19odGNfdHhfY2xlYW51cF9xdWV1ZShwcml2LCAmcHJpdi0+dHguZGF0YV92b19xdWV1ZSk7CisKKwkvKiBXYWtlIFRYIHF1ZXVlcyBpZiBuZWVkZWQgKi8KKwlhdGg5a19odGNfY2hlY2tfd2FrZV9xdWV1ZXMocHJpdik7CisKKwltb2RfdGltZXIoJnByaXYtPnR4LmNsZWFudXBfdGltZXIsCisJCSAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoQVRIOUtfSFRDX1RYX0NMRUFOVVBfSU5URVJWQUwpKTsKIH0KIAogaW50IGF0aDlrX3R4X2luaXQoc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2KQogewotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPnR4X3F1ZXVlKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZwcml2LT50eC5tZ210X2VwX3F1ZXVlKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZwcml2LT50eC5jYWJfZXBfcXVldWUpOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPnR4LmRhdGFfYmVfcXVldWUpOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPnR4LmRhdGFfYmtfcXVldWUpOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPnR4LmRhdGFfdmlfcXVldWUpOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPnR4LmRhdGFfdm9fcXVldWUpOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPnR4LnR4X2ZhaWxlZCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTUwNyw4ICs5NjgsOSBAQAogCWludCBsYXN0X3Jzc2kgPSBBVEhfUlNTSV9EVU1NWV9NQVJLRVI7CiAJX19sZTE2IGZjOwogCi0JaWYgKHNrYi0+bGVuIDw9IEhUQ19SWF9GUkFNRV9IRUFERVJfU0laRSkgewotCQlhdGhfZXJyKGNvbW1vbiwgIkNvcnJ1cHRlZCBSWCBmcmFtZSwgZHJvcHBpbmdcbiIpOworCWlmIChza2ItPmxlbiA8IEhUQ19SWF9GUkFNRV9IRUFERVJfU0laRSkgeworCQlhdGhfZXJyKGNvbW1vbiwgIkNvcnJ1cHRlZCBSWCBmcmFtZSwgZHJvcHBpbmcgKGxlbjogJWQpXG4iLAorCQkJc2tiLT5sZW4pOwogCQlnb3RvIHJ4X25leHQ7CiAJfQogCkBAIC01MjIsNiArOTg0LDggQEAKIAkJZ290byByeF9uZXh0OwogCX0KIAorCWF0aDlrX2h0Y19lcnJfc3RhdF9yeChwcml2LCByeHN0YXR1cyk7CisKIAkvKiBHZXQgdGhlIFJYIHN0YXR1cyBpbmZvcm1hdGlvbiAqLwogCW1lbWNweSgmcnhidWYtPnJ4c3RhdHVzLCByeHN0YXR1cywgSFRDX1JYX0ZSQU1FX0hFQURFUl9TSVpFKTsKIAlza2JfcHVsbChza2IsIEhUQ19SWF9GUkFNRV9IRUFERVJfU0laRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2hzdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19oc3QuYwppbmRleCA2MmUxMzlhLi5jZWU5NzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2hzdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfaHN0LmMKQEAgLTE3LDggKzE3LDggQEAKICNpbmNsdWRlICJodGMuaCIKIAogc3RhdGljIGludCBodGNfaXNzdWVfc2VuZChzdHJ1Y3QgaHRjX3RhcmdldCAqdGFyZ2V0LCBzdHJ1Y3Qgc2tfYnVmZiogc2tiLAotCQkJICB1MTYgbGVuLCB1OCBmbGFncywgdTggZXBpZCwKLQkJCSAgc3RydWN0IGF0aDlrX2h0Y190eF9jdGwgKnR4X2N0bCkKKwkJCSAgdTE2IGxlbiwgdTggZmxhZ3MsIHU4IGVwaWQpCisKIHsKIAlzdHJ1Y3QgaHRjX2ZyYW1lX2hkciAqaGRyOwogCXN0cnVjdCBodGNfZW5kcG9pbnQgKmVuZHBvaW50ID0gJnRhcmdldC0+ZW5kcG9pbnRbZXBpZF07CkBAIC0zMCw4ICszMCw4IEBACiAJaGRyLT5mbGFncyA9IGZsYWdzOwogCWhkci0+cGF5bG9hZF9sZW4gPSBjcHVfdG9fYmUxNihsZW4pOwogCi0Jc3RhdHVzID0gdGFyZ2V0LT5oaWYtPnNlbmQodGFyZ2V0LT5oaWZfZGV2LCBlbmRwb2ludC0+dWxfcGlwZWlkLCBza2IsCi0JCQkJICAgdHhfY3RsKTsKKwlzdGF0dXMgPSB0YXJnZXQtPmhpZi0+c2VuZCh0YXJnZXQtPmhpZl9kZXYsIGVuZHBvaW50LT51bF9waXBlaWQsIHNrYik7CisKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0xNjIsNyArMTYyLDcgQEAKIAogCXRhcmdldC0+aHRjX2ZsYWdzIHw9IEhUQ19PUF9DT05GSUdfUElQRV9DUkVESVRTOwogCi0JcmV0ID0gaHRjX2lzc3VlX3NlbmQodGFyZ2V0LCBza2IsIHNrYi0+bGVuLCAwLCBFTkRQT0lOVDAsIE5VTEwpOworCXJldCA9IGh0Y19pc3N1ZV9zZW5kKHRhcmdldCwgc2tiLCBza2ItPmxlbiwgMCwgRU5EUE9JTlQwKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIApAQCAtMTk3LDcgKzE5Nyw3IEBACiAKIAl0YXJnZXQtPmh0Y19mbGFncyB8PSBIVENfT1BfU1RBUlRfV0FJVDsKIAotCXJldCA9IGh0Y19pc3N1ZV9zZW5kKHRhcmdldCwgc2tiLCBza2ItPmxlbiwgMCwgRU5EUE9JTlQwLCBOVUxMKTsKKwlyZXQgPSBodGNfaXNzdWVfc2VuZCh0YXJnZXQsIHNrYiwgc2tiLT5sZW4sIDAsIEVORFBPSU5UMCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKQEAgLTI2OCw3ICsyNjgsNyBAQAogCWNvbm5fbXNnLT5kbF9waXBlaWQgPSBlbmRwb2ludC0+ZGxfcGlwZWlkOwogCWNvbm5fbXNnLT51bF9waXBlaWQgPSBlbmRwb2ludC0+dWxfcGlwZWlkOwogCi0JcmV0ID0gaHRjX2lzc3VlX3NlbmQodGFyZ2V0LCBza2IsIHNrYi0+bGVuLCAwLCBFTkRQT0lOVDAsIE5VTEwpOworCXJldCA9IGh0Y19pc3N1ZV9zZW5kKHRhcmdldCwgc2tiLCBza2ItPmxlbiwgMCwgRU5EUE9JTlQwKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIApAQCAtMjg2LDM1ICsyODYsMzMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgaHRjX3NlbmQoc3RydWN0IGh0Y190YXJnZXQgKnRhcmdldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkgICAgIGVudW0gaHRjX2VuZHBvaW50X2lkIGVwaWQsIHN0cnVjdCBhdGg5a19odGNfdHhfY3RsICp0eF9jdGwpCitpbnQgaHRjX3NlbmQoc3RydWN0IGh0Y190YXJnZXQgKnRhcmdldCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlyZXR1cm4gaHRjX2lzc3VlX3NlbmQodGFyZ2V0LCBza2IsIHNrYi0+bGVuLCAwLCBlcGlkLCB0eF9jdGwpOworCXN0cnVjdCBhdGg5a19odGNfdHhfY3RsICp0eF9jdGw7CisKKwl0eF9jdGwgPSBIVENfU0tCX0NCKHNrYik7CisJcmV0dXJuIGh0Y19pc3N1ZV9zZW5kKHRhcmdldCwgc2tiLCBza2ItPmxlbiwgMCwgdHhfY3RsLT5lcGlkKTsKK30KKworaW50IGh0Y19zZW5kX2VwaWQoc3RydWN0IGh0Y190YXJnZXQgKnRhcmdldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICBlbnVtIGh0Y19lbmRwb2ludF9pZCBlcGlkKQoreworCXJldHVybiBodGNfaXNzdWVfc2VuZCh0YXJnZXQsIHNrYiwgc2tiLT5sZW4sIDAsIGVwaWQpOwogfQogCiB2b2lkIGh0Y19zdG9wKHN0cnVjdCBodGNfdGFyZ2V0ICp0YXJnZXQpCiB7Ci0JZW51bSBodGNfZW5kcG9pbnRfaWQgZXBpZDsKLQlzdHJ1Y3QgaHRjX2VuZHBvaW50ICplbmRwb2ludDsKLQotCWZvciAoZXBpZCA9IEVORFBPSU5UMDsgZXBpZCA8IEVORFBPSU5UX01BWDsgZXBpZCsrKSB7Ci0JCWVuZHBvaW50ID0gJnRhcmdldC0+ZW5kcG9pbnRbZXBpZF07Ci0JCWlmIChlbmRwb2ludC0+c2VydmljZV9pZCAhPSAwKQotCQkJdGFyZ2V0LT5oaWYtPnN0b3AodGFyZ2V0LT5oaWZfZGV2LCBlbmRwb2ludC0+dWxfcGlwZWlkKTsKLQl9CisJdGFyZ2V0LT5oaWYtPnN0b3AodGFyZ2V0LT5oaWZfZGV2KTsKIH0KIAogdm9pZCBodGNfc3RhcnQoc3RydWN0IGh0Y190YXJnZXQgKnRhcmdldCkKIHsKLQllbnVtIGh0Y19lbmRwb2ludF9pZCBlcGlkOwotCXN0cnVjdCBodGNfZW5kcG9pbnQgKmVuZHBvaW50OworCXRhcmdldC0+aGlmLT5zdGFydCh0YXJnZXQtPmhpZl9kZXYpOworfQogCi0JZm9yIChlcGlkID0gRU5EUE9JTlQwOyBlcGlkIDwgRU5EUE9JTlRfTUFYOyBlcGlkKyspIHsKLQkJZW5kcG9pbnQgPSAmdGFyZ2V0LT5lbmRwb2ludFtlcGlkXTsKLQkJaWYgKGVuZHBvaW50LT5zZXJ2aWNlX2lkICE9IDApCi0JCQl0YXJnZXQtPmhpZi0+c3RhcnQodGFyZ2V0LT5oaWZfZGV2LAotCQkJCQkgICBlbmRwb2ludC0+dWxfcGlwZWlkKTsKLQl9Cit2b2lkIGh0Y19zdGFfZHJhaW4oc3RydWN0IGh0Y190YXJnZXQgKnRhcmdldCwgdTggaWR4KQoreworCXRhcmdldC0+aGlmLT5zdGFfZHJhaW4odGFyZ2V0LT5oaWZfZGV2LCBpZHgpOwogfQogCiB2b2lkIGF0aDlrX2h0Y190eGNvbXBsZXRpb25fY2Ioc3RydWN0IGh0Y190YXJnZXQgKmh0Y19oYW5kbGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2hzdC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19oc3QuaAppbmRleCBlY2QwMTg3Li45MWE1MzA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2hzdC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfaHN0LmgKQEAgLTMzLDEwICszMywxMCBAQAogCXU4IGNvbnRyb2xfZGxfcGlwZTsKIAl1OCBjb250cm9sX3VsX3BpcGU7CiAKLQl2b2lkICgqc3RhcnQpICh2b2lkICpoaWZfaGFuZGxlLCB1OCBwaXBlKTsKLQl2b2lkICgqc3RvcCkgKHZvaWQgKmhpZl9oYW5kbGUsIHU4IHBpcGUpOwotCWludCAoKnNlbmQpICh2b2lkICpoaWZfaGFuZGxlLCB1OCBwaXBlLCBzdHJ1Y3Qgc2tfYnVmZiAqYnVmLAotCQkgICAgIHN0cnVjdCBhdGg5a19odGNfdHhfY3RsICp0eF9jdGwpOworCXZvaWQgKCpzdGFydCkgKHZvaWQgKmhpZl9oYW5kbGUpOworCXZvaWQgKCpzdG9wKSAodm9pZCAqaGlmX2hhbmRsZSk7CisJdm9pZCAoKnN0YV9kcmFpbikgKHZvaWQgKmhpZl9oYW5kbGUsIHU4IGlkeCk7CisJaW50ICgqc2VuZCkgKHZvaWQgKmhpZl9oYW5kbGUsIHU4IHBpcGUsIHN0cnVjdCBza19idWZmICpidWYpOwogfTsKIAogZW51bSBodGNfZW5kcG9pbnRfaWQgewpAQCAtODMsMjEgKzgzLDEwIEBACiAJdm9pZCAoKnJ4KSAodm9pZCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBlbnVtIGh0Y19lbmRwb2ludF9pZCk7CiB9OwogCi0jZGVmaW5lIEhUQ19UWF9RVUVVRV9TSVpFIDI1NgotCi1zdHJ1Y3QgaHRjX3R4cSB7Ci0Jc3RydWN0IHNrX2J1ZmYgKmJ1ZltIVENfVFhfUVVFVUVfU0laRV07Ci0JdTMyIHR4cWRlcHRoOwotCXUxNiB0eGJ1Zl9jbnQ7Ci0JdTE2IHR4cV9oZWFkOwotCXUxNiB0eHFfdGFpbDsKLX07Ci0KIHN0cnVjdCBodGNfZW5kcG9pbnQgewogCXUxNiBzZXJ2aWNlX2lkOwogCiAJc3RydWN0IGh0Y19lcF9jYWxsYmFja3MgZXBfY2FsbGJhY2tzOwotCXN0cnVjdCBodGNfdHhxIGh0Y190eHE7CiAJdTMyIG1heF90eHFkZXB0aDsKIAlpbnQgbWF4X21zZ2xlbjsKIApAQCAtMjA1LDEwICsxOTQsMTIgQEAKIGludCBodGNfY29ubmVjdF9zZXJ2aWNlKHN0cnVjdCBodGNfdGFyZ2V0ICp0YXJnZXQsCiAJCQkgIHN0cnVjdCBodGNfc2VydmljZV9jb25ucmVxICpzZXJ2aWNlX2Nvbm5yZXEsCiAJCQkgIGVudW0gaHRjX2VuZHBvaW50X2lkICpjb25uX3JzcF9laWQpOwotaW50IGh0Y19zZW5kKHN0cnVjdCBodGNfdGFyZ2V0ICp0YXJnZXQsIHN0cnVjdCBza19idWZmICpza2IsCi0JICAgICBlbnVtIGh0Y19lbmRwb2ludF9pZCBlaWQsIHN0cnVjdCBhdGg5a19odGNfdHhfY3RsICp0eF9jdGwpOworaW50IGh0Y19zZW5kKHN0cnVjdCBodGNfdGFyZ2V0ICp0YXJnZXQsIHN0cnVjdCBza19idWZmICpza2IpOworaW50IGh0Y19zZW5kX2VwaWQoc3RydWN0IGh0Y190YXJnZXQgKnRhcmdldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICBlbnVtIGh0Y19lbmRwb2ludF9pZCBlcGlkKTsKIHZvaWQgaHRjX3N0b3Aoc3RydWN0IGh0Y190YXJnZXQgKnRhcmdldCk7CiB2b2lkIGh0Y19zdGFydChzdHJ1Y3QgaHRjX3RhcmdldCAqdGFyZ2V0KTsKK3ZvaWQgaHRjX3N0YV9kcmFpbihzdHJ1Y3QgaHRjX3RhcmdldCAqdGFyZ2V0LCB1OCBpZHgpOwogCiB2b2lkIGF0aDlrX2h0Y19yeF9tc2coc3RydWN0IGh0Y190YXJnZXQgKmh0Y19oYW5kbGUsCiAJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBsZW4sIHU4IHBpcGVfaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LW9wcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LW9wcy5oCmluZGV4IGM4ZjI1NGYuLjhiOGYwNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody1vcHMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHctb3BzLmgKQEAgLTExNiwxNiArMTE2LDIxIEBACiAJYXRoOWtfaHdfb3BzKGFoKS0+Y2xyMTFuX2FnZ3IoYWgsIGRzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2h3X3NldDExbl9idXJzdGR1cmF0aW9uKHN0cnVjdCBhdGhfaHcgKmFoLCB2b2lkICpkcywKLQkJCQkJCSB1MzIgYnVyc3REdXJhdGlvbikKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19od19zZXRfY2xyZG1hc2soc3RydWN0IGF0aF9odyAqYWgsIHZvaWQgKmRzLCBib29sIHZhbCkKIHsKLQlhdGg5a19od19vcHMoYWgpLT5zZXQxMW5fYnVyc3RkdXJhdGlvbihhaCwgZHMsIGJ1cnN0RHVyYXRpb24pOworCWF0aDlrX2h3X29wcyhhaCktPnNldF9jbHJkbWFzayhhaCwgZHMsIHZhbCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19od19zZXQxMW5fdmlydHVhbG1vcmVmcmFnKHN0cnVjdCBhdGhfaHcgKmFoLCB2b2lkICpkcywKLQkJCQkJCSAgIHUzMiB2bWYpCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfaHdfYW50ZGl2X2NvbWJfY29uZl9nZXQoc3RydWN0IGF0aF9odyAqYWgsCisJCXN0cnVjdCBhdGhfaHdfYW50Y29tYl9jb25mICphbnRjb25mKQogewotCWF0aDlrX2h3X29wcyhhaCktPnNldDExbl92aXJ0dWFsbW9yZWZyYWcoYWgsIGRzLCB2bWYpOworCWF0aDlrX2h3X29wcyhhaCktPmFudGRpdl9jb21iX2NvbmZfZ2V0KGFoLCBhbnRjb25mKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2h3X2FudGRpdl9jb21iX2NvbmZfc2V0KHN0cnVjdCBhdGhfaHcgKmFoLAorCQlzdHJ1Y3QgYXRoX2h3X2FudGNvbWJfY29uZiAqYW50Y29uZikKK3sKKwlhdGg5a19od19vcHMoYWgpLT5hbnRkaXZfY29tYl9jb25mX3NldChhaCwgYW50Y29uZik7CiB9CiAKIC8qIFByaXZhdGUgaGFyZHdhcmUgY2FsbCBvcHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMKaW5kZXggYzk1YmM1Yy4uYjc1YjVkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMKQEAgLTEzMCw2ICsxMzAsMjAgQEAKIH0KIEVYUE9SVF9TWU1CT0woYXRoOWtfaHdfd2FpdCk7CiAKK3ZvaWQgYXRoOWtfaHdfd3JpdGVfYXJyYXkoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhcjU0MTZJbmlBcnJheSAqYXJyYXksCisJCQkgIGludCBjb2x1bW4sIHVuc2lnbmVkIGludCAqd3JpdGVjbnQpCit7CisJaW50IHI7CisKKwlFTkFCTEVfUkVHV1JJVEVfQlVGRkVSKGFoKTsKKwlmb3IgKHIgPSAwOyByIDwgYXJyYXktPmlhX3Jvd3M7IHIrKykgeworCQlSRUdfV1JJVEUoYWgsIElOSV9SQShhcnJheSwgciwgMCksCisJCQkgIElOSV9SQShhcnJheSwgciwgY29sdW1uKSk7CisJCURPX0RFTEFZKCp3cml0ZWNudCk7CisJfQorCVJFR1dSSVRFX0JVRkZFUl9GTFVTSChhaCk7Cit9CisKIHUzMiBhdGg5a19od19yZXZlcnNlX2JpdHModTMyIHZhbCwgdTMyIG4pCiB7CiAJdTMyIHJldHZhbDsKQEAgLTE0MiwyNSArMTU2LDYgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1ib29sIGF0aDlrX2dldF9jaGFubmVsX2VkZ2VzKHN0cnVjdCBhdGhfaHcgKmFoLAotCQkJICAgICB1MTYgZmxhZ3MsIHUxNiAqbG93LAotCQkJICAgICB1MTYgKmhpZ2gpCi17Ci0Jc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+Y2FwczsKLQotCWlmIChmbGFncyAmIENIQU5ORUxfNUdIWikgewotCQkqbG93ID0gcENhcC0+bG93XzVnaHpfY2hhbjsKLQkJKmhpZ2ggPSBwQ2FwLT5oaWdoXzVnaHpfY2hhbjsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCWlmICgoZmxhZ3MgJiBDSEFOTkVMXzJHSFopKSB7Ci0JCSpsb3cgPSBwQ2FwLT5sb3dfMmdoel9jaGFuOwotCQkqaGlnaCA9IHBDYXAtPmhpZ2hfMmdoel9jaGFuOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JcmV0dXJuIGZhbHNlOwotfQotCiB1MTYgYXRoOWtfaHdfY29tcHV0ZXR4dGltZShzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgIHU4IHBoeSwgaW50IGticHMsCiAJCQkgICB1MzIgZnJhbWVMZW4sIHUxNiByYXRlaXgsCkBAIC0yNTIsNiArMjQ3LDE3IEBACiB7CiAJdTMyIHZhbDsKIAorCXN3aXRjaCAoYWgtPmh3X3ZlcnNpb24uZGV2aWQpIHsKKwljYXNlIEFSNTQxNl9BUjkxMDBfREVWSUQ6CisJCWFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPSBBUl9TUkVWX1ZFUlNJT05fOTEwMDsKKwkJYnJlYWs7CisJY2FzZSBBUjkzMDBfREVWSURfQVI5MzQwOgorCQlhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID0gQVJfU1JFVl9WRVJTSU9OXzkzNDA7CisJCXZhbCA9IFJFR19SRUFEKGFoLCBBUl9TUkVWKTsKKwkJYWgtPmh3X3ZlcnNpb24ubWFjUmV2ID0gTVModmFsLCBBUl9TUkVWX1JFVklTSU9OMik7CisJCXJldHVybjsKKwl9CisKIAl2YWwgPSBSRUdfUkVBRChhaCwgQVJfU1JFVikgJiBBUl9TUkVWX0lEOwogCiAJaWYgKHZhbCA9PSAweEZGKSB7CkBAIC0zNjQsMTEgKzM3MCw2IEBACiAJCWFoLT5jb25maWcuc3B1cmNoYW5zW2ldWzFdID0gQVJfTk9fU1BVUjsKIAl9CiAKLQlpZiAoYWgtPmh3X3ZlcnNpb24uZGV2aWQgIT0gQVIyNDI3X0RFVklEX1BDSUUpCi0JCWFoLT5jb25maWcuaHRfZW5hYmxlID0gMTsKLQllbHNlCi0JCWFoLT5jb25maWcuaHRfZW5hYmxlID0gMDsKLQogCS8qIFBBUFJEIG5lZWRzIHNvbWUgbW9yZSB3b3JrIHRvIGJlIGVuYWJsZWQgKi8KIAlhaC0+Y29uZmlnLnBhcHJkX2Rpc2FibGUgPSAxOwogCkBAIC00MTAsNiArNDExLDggQEAKIAlhaC0+c3RhX2lkMV9kZWZhdWx0cyA9CiAJCUFSX1NUQV9JRDFfQ1JQVF9NSUNfRU5BQkxFIHwKIAkJQVJfU1RBX0lEMV9NQ0FTVF9LU1JDSDsKKwlpZiAoQVJfU1JFVl85MTAwKGFoKSkKKwkJYWgtPnN0YV9pZDFfZGVmYXVsdHMgfD0gQVJfU1RBX0lEMV9BUjkxMDBfQkFfRklYOwogCWFoLT5lbmFibGVfMzJrSHpfY2xvY2sgPSBET05UX1VTRV8zMktIWjsKIAlhaC0+c2xvdHRpbWUgPSAyMDsKIAlhaC0+Z2xvYmFsdHh0aW1lb3V0ID0gKHUzMikgLTE7CkBAIC00NzAsNyArNDczLDcgQEAKIAkJcmV0dXJuIGVjb2RlOwogCX0KIAotCWlmICghQVJfU1JFVl85MTAwKGFoKSkgeworCWlmICghQVJfU1JFVl85MTAwKGFoKSAmJiAhQVJfU1JFVl85MzQwKGFoKSkgewogCQlhdGg5a19od19hbmlfc2V0dXAoYWgpOwogCQlhdGg5a19od19hbmlfaW5pdChhaCk7CiAJfQpAQCAtNDkyLDkgKzQ5NSw2IEBACiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CiAJaW50IHIgPSAwOwogCi0JaWYgKGFoLT5od192ZXJzaW9uLmRldmlkID09IEFSNTQxNl9BUjkxMDBfREVWSUQpCi0JCWFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPSBBUl9TUkVWX1ZFUlNJT05fOTEwMDsKLQogCWF0aDlrX2h3X3JlYWRfcmV2aXNpb25zKGFoKTsKIAogCS8qCkBAIC01NTIsNiArNTUyLDcgQEAKIAljYXNlIEFSX1NSRVZfVkVSU0lPTl85MjcxOgogCWNhc2UgQVJfU1JFVl9WRVJTSU9OXzkzMDA6CiAJY2FzZSBBUl9TUkVWX1ZFUlNJT05fOTQ4NToKKwljYXNlIEFSX1NSRVZfVkVSU0lPTl85MzQwOgogCQlicmVhazsKIAlkZWZhdWx0OgogCQlhdGhfZXJyKGNvbW1vbiwKQEAgLTU2MCw3ICs1NjEsNyBAQAogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCi0JaWYgKEFSX1NSRVZfOTI3MShhaCkgfHwgQVJfU1JFVl85MTAwKGFoKSkKKwlpZiAoQVJfU1JFVl85MjcxKGFoKSB8fCBBUl9TUkVWXzkxMDAoYWgpIHx8IEFSX1NSRVZfOTM0MChhaCkpCiAJCWFoLT5pc19wY2lleHByZXNzID0gZmFsc2U7CiAKIAlhaC0+aHdfdmVyc2lvbi5waHlSZXYgPSBSRUdfUkVBRChhaCwgQVJfUEhZX0NISVBfSUQpOwpAQCAtNjI5LDYgKzYzMCw3IEBACiAJY2FzZSBBUjI0MjdfREVWSURfUENJRToKIAljYXNlIEFSOTMwMF9ERVZJRF9QQ0lFOgogCWNhc2UgQVI5MzAwX0RFVklEX0FSOTQ4NV9QQ0lFOgorCWNhc2UgQVI5MzAwX0RFVklEX0FSOTM0MDoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaWYgKGNvbW1vbi0+YnVzX29wcy0+YXRoX2J1c190eXBlID09IEFUSF9VU0IpCkBAIC02NzEsNDggKzY3Myw4OSBAQAogCVJFR1dSSVRFX0JVRkZFUl9GTFVTSChhaCk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgYXI5MDAzX2dldF9wbGxfc3FzdW1fZHZjKHN0cnVjdCBhdGhfaHcgKmFoKQordTMyIGFyOTAwM19nZXRfcGxsX3Nxc3VtX2R2YyhzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQkJUkVHX1dSSVRFKGFoLCBQTEwzLCAoUkVHX1JFQUQoYWgsIFBMTDMpICYgfihQTEwzX0RPX01FQVNfTUFTSykpKTsKKwlSRUdfQ0xSX0JJVChhaCwgUExMMywgUExMM19ET19NRUFTX01BU0spOworCXVkZWxheSgxMDApOworCVJFR19TRVRfQklUKGFoLCBQTEwzLCBQTEwzX0RPX01FQVNfTUFTSyk7CisKKwl3aGlsZSAoKFJFR19SRUFEKGFoLCBQTEw0KSAmIFBMTDRfTUVBU19ET05FKSA9PSAwKQogCQl1ZGVsYXkoMTAwKTsKLQkJUkVHX1dSSVRFKGFoLCBQTEwzLCAoUkVHX1JFQUQoYWgsIFBMTDMpIHwgUExMM19ET19NRUFTX01BU0spKTsKIAotCQl3aGlsZSAoKFJFR19SRUFEKGFoLCBQTEw0KSAmIFBMTDRfTUVBU19ET05FKSA9PSAwKQotCQkJdWRlbGF5KDEwMCk7Ci0KLQkJcmV0dXJuIChSRUdfUkVBRChhaCwgUExMMykgJiBTUVNVTV9EVkNfTUFTSykgPj4gMzsKKwlyZXR1cm4gKFJFR19SRUFEKGFoLCBQTEwzKSAmIFNRU1VNX0RWQ19NQVNLKSA+PiAzOwogfQogRVhQT1JUX1NZTUJPTChhcjkwMDNfZ2V0X3BsbF9zcXN1bV9kdmMpOwogCi0jZGVmaW5lIERQTEwyX0tEX1ZBTCAgICAgICAgICAgIDB4M0QKLSNkZWZpbmUgRFBMTDJfS0lfVkFMICAgICAgICAgICAgMHgwNgotI2RlZmluZSBEUExMM19QSEFTRV9TSElGVF9WQUwgICAweDEKLQogc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF9wbGwoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKIAl1MzIgcGxsOwogCiAJaWYgKEFSX1NSRVZfOTQ4NShhaCkpIHsKLQkJUkVHX1dSSVRFKGFoLCBBUl9SVENfUExMX0NPTlRST0wyLCAweDg4NjY2Nik7Ci0JCVJFR19XUklURShhaCwgQVJfQ0gwX0REUl9EUExMMiwgMHgxOWU4MmYwMSk7CiAKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfQ0gwX0REUl9EUExMMywKLQkJCSAgICAgIEFSX0NIMF9EUExMM19QSEFTRV9TSElGVCwgRFBMTDNfUEhBU0VfU0hJRlRfVkFMKTsKKwkJLyogcHJvZ3JhbSBCQiBQTEwga2kgYW5kIGtkIHZhbHVlLCBraT0weDQsIGtkPTB4NDAgKi8KKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfQ0gwX0JCX0RQTEwyLAorCQkJICAgICAgQVJfQ0gwX0JCX0RQTEwyX1BMTF9QV0QsIDB4MSk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX0NIMF9CQl9EUExMMiwKKwkJCSAgICAgIEFSX0NIMF9EUExMMl9LRCwgMHg0MCk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX0NIMF9CQl9EUExMMiwKKwkJCSAgICAgIEFSX0NIMF9EUExMMl9LSSwgMHg0KTsKKworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9DSDBfQkJfRFBMTDEsCisJCQkgICAgICBBUl9DSDBfQkJfRFBMTDFfUkVGRElWLCAweDUpOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9DSDBfQkJfRFBMTDEsCisJCQkgICAgICBBUl9DSDBfQkJfRFBMTDFfTklOSSwgMHg1OCk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX0NIMF9CQl9EUExMMSwKKwkJCSAgICAgIEFSX0NIMF9CQl9EUExMMV9ORlJBQywgMHgwKTsKKworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9DSDBfQkJfRFBMTDIsCisJCQkgICAgICBBUl9DSDBfQkJfRFBMTDJfT1VURElWLCAweDEpOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9DSDBfQkJfRFBMTDIsCisJCQkgICAgICBBUl9DSDBfQkJfRFBMTDJfTE9DQUxfUExMLCAweDEpOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9DSDBfQkJfRFBMTDIsCisJCQkgICAgICBBUl9DSDBfQkJfRFBMTDJfRU5fTkVHVFJJRywgMHgxKTsKKworCQkvKiBwcm9ncmFtIEJCIFBMTCBwaGFzZV9zaGlmdCB0byAweDYgKi8KKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfQ0gwX0JCX0RQTEwzLAorCQkJICAgICAgQVJfQ0gwX0JCX0RQTEwzX1BIQVNFX1NISUZULCAweDYpOworCisJCVJFR19STVdfRklFTEQoYWgsIEFSX0NIMF9CQl9EUExMMiwKKwkJCSAgICAgIEFSX0NIMF9CQl9EUExMMl9QTExfUFdELCAweDApOworCQl1ZGVsYXkoMTAwMCk7CisJfSBlbHNlIGlmIChBUl9TUkVWXzkzNDAoYWgpKSB7CisJCXUzMiByZWd2YWwsIHBsbDJfZGl2aW50LCBwbGwyX2RpdmZyYWMsIHJlZmRpdjsKIAogCQlSRUdfV1JJVEUoYWgsIEFSX1JUQ19QTExfQ09OVFJPTCwgMHgxMTQyYyk7CiAJCXVkZWxheSgxMDAwKTsKIAotCQlSRUdfV1JJVEUoYWgsIEFSX1JUQ19QTExfQ09OVFJPTDIsIDB4ODg2NjY2KTsKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9QTExfTU9ERSwgMHgxIDw8IDE2KTsKKwkJdWRlbGF5KDEwMCk7CiAKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfQ0gwX0JCX0RQTEwyLAotCQkJICAgICAgQVJfQ0gwX0RQTEwyX0tELCBEUExMMl9LRF9WQUwpOwotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9DSDBfQkJfRFBMTDIsCi0JCQkgICAgICBBUl9DSDBfRFBMTDJfS0ksIERQTEwyX0tJX1ZBTCk7CisJCWlmIChhaC0+aXNfY2xrXzI1bWh6KSB7CisJCQlwbGwyX2RpdmludCA9IDB4NTQ7CisJCQlwbGwyX2RpdmZyYWMgPSAweDFlYjg1OworCQkJcmVmZGl2ID0gMzsKKwkJfSBlbHNlIHsKKwkJCXBsbDJfZGl2aW50ID0gODg7CisJCQlwbGwyX2RpdmZyYWMgPSAwOworCQkJcmVmZGl2ID0gNTsKKwkJfQogCi0JCVJFR19STVdfRklFTEQoYWgsIEFSX0NIMF9CQl9EUExMMywKLQkJCSAgICAgIEFSX0NIMF9EUExMM19QSEFTRV9TSElGVCwgRFBMTDNfUEhBU0VfU0hJRlRfVkFMKTsKLQkJUkVHX1dSSVRFKGFoLCBBUl9SVENfUExMX0NPTlRST0wsIDB4MTQyYyk7CisJCXJlZ3ZhbCA9IFJFR19SRUFEKGFoLCBBUl9QSFlfUExMX01PREUpOworCQlyZWd2YWwgfD0gKDB4MSA8PCAxNik7CisJCVJFR19XUklURShhaCwgQVJfUEhZX1BMTF9NT0RFLCByZWd2YWwpOworCQl1ZGVsYXkoMTAwKTsKKworCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QTExfQ09OVFJPTCwgKHJlZmRpdiA8PCAyNykgfAorCQkJICAocGxsMl9kaXZpbnQgPDwgMTgpIHwgcGxsMl9kaXZmcmFjKTsKKwkJdWRlbGF5KDEwMCk7CisKKwkJcmVndmFsID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9QTExfTU9ERSk7CisJCXJlZ3ZhbCA9IChyZWd2YWwgJiAweDgwMDcxZmZmKSB8ICgweDEgPDwgMzApIHwgKDB4MSA8PCAxMykgfAorCQkJICgweDQgPDwgMjYpIHwgKDB4MTggPDwgMTkpOworCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QTExfTU9ERSwgcmVndmFsKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUExMX01PREUsCisJCQkgIFJFR19SRUFEKGFoLCBBUl9QSFlfUExMX01PREUpICYgMHhmZmZlZmZmZik7CiAJCXVkZWxheSgxMDAwKTsKIAl9CiAKQEAgLTcyMCw2ICs3NjMsOSBAQAogCiAJUkVHX1dSSVRFKGFoLCBBUl9SVENfUExMX0NPTlRST0wsIHBsbCk7CiAKKwlpZiAoQVJfU1JFVl85NDg1KGFoKSB8fCBBUl9TUkVWXzkzNDAoYWgpKQorCQl1ZGVsYXkoMTAwMCk7CisKIAkvKiBTd2l0Y2ggdGhlIGNvcmUgY2xvY2sgZm9yIGFyOTI3MSB0byAxMTdNaHogKi8KIAlpZiAoQVJfU1JFVl85MjcxKGFoKSkgewogCQl1ZGVsYXkoNTAwKTsKQEAgLTcyOSwxNyArNzc1LDM0IEBACiAJdWRlbGF5KFJUQ19QTExfU0VUVExFX0RFTEFZKTsKIAogCVJFR19XUklURShhaCwgQVJfUlRDX1NMRUVQX0NMSywgQVJfUlRDX0ZPUkNFX0RFUklWRURfQ0xLKTsKKworCWlmIChBUl9TUkVWXzkzNDAoYWgpKSB7CisJCWlmIChhaC0+aXNfY2xrXzI1bWh6KSB7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1JUQ19ERVJJVkVEX0NMSywgMHgxN2MgPDwgMSk7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1NMUDMyX01PREUsIDB4MDAxMGYzZDcpOworCQkJUkVHX1dSSVRFKGFoLCAgQVJfU0xQMzJfSU5DLCAweDAwMDFlN2FlKTsKKwkJfSBlbHNlIHsKKwkJCVJFR19XUklURShhaCwgQVJfUlRDX0RFUklWRURfQ0xLLCAweDI2MSA8PCAxKTsKKwkJCVJFR19XUklURShhaCwgQVJfU0xQMzJfTU9ERSwgMHgwMDEwZjQwMCk7CisJCQlSRUdfV1JJVEUoYWgsICBBUl9TTFAzMl9JTkMsIDB4MDAwMWU4MDApOworCQl9CisJCXVkZWxheSgxMDApOworCX0KIH0KIAogc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF9pbnRlcnJ1cHRfbWFza3Moc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJCSAgZW51bSBubDgwMjExX2lmdHlwZSBvcG1vZGUpCiB7CisJdTMyIHN5bmNfZGVmYXVsdCA9IEFSX0lOVFJfU1lOQ19ERUZBVUxUOwogCXUzMiBpbXJfcmVnID0gQVJfSU1SX1RYRVJSIHwKIAkJQVJfSU1SX1RYVVJOIHwKIAkJQVJfSU1SX1JYRVJSIHwKIAkJQVJfSU1SX1JYT1JOIHwKIAkJQVJfSU1SX0JDTk1JU0M7CiAKKwlpZiAoQVJfU1JFVl85MzQwKGFoKSkKKwkJc3luY19kZWZhdWx0ICY9IH5BUl9JTlRSX1NZTkNfSE9TVDFfRkFUQUw7CisKIAlpZiAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSkgewogCQlpbXJfcmVnIHw9IEFSX0lNUl9SWE9LX0hQOwogCQlpZiAoYWgtPmNvbmZpZy5yeF9pbnRyX21pdGlnYXRpb24pCkBAIC03NzAsNyArODMzLDcgQEAKIAogCWlmICghQVJfU1JFVl85MTAwKGFoKSkgewogCQlSRUdfV1JJVEUoYWgsIEFSX0lOVFJfU1lOQ19DQVVTRSwgMHhGRkZGRkZGRik7Ci0JCVJFR19XUklURShhaCwgQVJfSU5UUl9TWU5DX0VOQUJMRSwgQVJfSU5UUl9TWU5DX0RFRkFVTFQpOworCQlSRUdfV1JJVEUoYWgsIEFSX0lOVFJfU1lOQ19FTkFCTEUsIHN5bmNfZGVmYXVsdCk7CiAJCVJFR19XUklURShhaCwgQVJfSU5UUl9TWU5DX01BU0ssIDApOwogCX0KIApAQCAtODMwLDggKzg5Myw3IEBACiAJCWFoLT5taXNjX21vZGUpOwogCiAJaWYgKGFoLT5taXNjX21vZGUgIT0gMCkKLQkJUkVHX1dSSVRFKGFoLCBBUl9QQ1VfTUlTQywKLQkJCSAgUkVHX1JFQUQoYWgsIEFSX1BDVV9NSVNDKSB8IGFoLT5taXNjX21vZGUpOworCQlSRUdfU0VUX0JJVChhaCwgQVJfUENVX01JU0MsIGFoLT5taXNjX21vZGUpOwogCiAJaWYgKGNvbmYtPmNoYW5uZWwgJiYgY29uZi0+Y2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQogCQlzaWZzdGltZSA9IDE2OwpAQCAtODk5LDIzICs5NjEsMTkgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19od19zZXRfZG1hKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwotCXUzMiByZWd2YWw7CiAKIAlFTkFCTEVfUkVHV1JJVEVfQlVGRkVSKGFoKTsKIAogCS8qCiAJICogc2V0IEFIQl9NT0RFIG5vdCB0byBkbyBjYWNoZWxpbmUgcHJlZmV0Y2hlcwogCSovCi0JaWYgKCFBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKSB7Ci0JCXJlZ3ZhbCA9IFJFR19SRUFEKGFoLCBBUl9BSEJfTU9ERSk7Ci0JCVJFR19XUklURShhaCwgQVJfQUhCX01PREUsIHJlZ3ZhbCB8IEFSX0FIQl9QUkVGRVRDSF9SRF9FTik7Ci0JfQorCWlmICghQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSkKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX0FIQl9NT0RFLCBBUl9BSEJfUFJFRkVUQ0hfUkRfRU4pOwogCiAJLyoKIAkgKiBsZXQgbWFjIGRtYSByZWFkcyBiZSBpbiAxMjggYnl0ZSBjaHVua3MKIAkgKi8KLQlyZWd2YWwgPSBSRUdfUkVBRChhaCwgQVJfVFhDRkcpICYgfkFSX1RYQ0ZHX0RNQVNaX01BU0s7Ci0JUkVHX1dSSVRFKGFoLCBBUl9UWENGRywgcmVndmFsIHwgQVJfVFhDRkdfRE1BU1pfMTI4Qik7CisJUkVHX1JNVyhhaCwgQVJfVFhDRkcsIEFSX1RYQ0ZHX0RNQVNaXzEyOEIsIEFSX1RYQ0ZHX0RNQVNaX01BU0spOwogCiAJUkVHV1JJVEVfQlVGRkVSX0ZMVVNIKGFoKTsKIApAQCAtOTMyLDggKzk5MCw3IEBACiAJLyoKIAkgKiBsZXQgbWFjIGRtYSB3cml0ZXMgYmUgaW4gMTI4IGJ5dGUgY2h1bmtzCiAJICovCi0JcmVndmFsID0gUkVHX1JFQUQoYWgsIEFSX1JYQ0ZHKSAmIH5BUl9SWENGR19ETUFTWl9NQVNLOwotCVJFR19XUklURShhaCwgQVJfUlhDRkcsIHJlZ3ZhbCB8IEFSX1JYQ0ZHX0RNQVNaXzEyOEIpOworCVJFR19STVcoYWgsIEFSX1JYQ0ZHLCBBUl9SWENGR19ETUFTWl8xMjhCLCBBUl9SWENGR19ETUFTWl9NQVNLKTsKIAogCS8qCiAJICogU2V0dXAgcmVjZWl2ZSBGSUZPIHRocmVzaG9sZCB0byBob2xkIG9mZiBUWCBhY3Rpdml0aWVzCkBAIC05NzIsMzAgKzEwMjksMjcgQEAKIAogc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X29wZXJhdGluZ19tb2RlKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgb3Btb2RlKQogewotCXUzMiB2YWw7CisJdTMyIG1hc2sgPSBBUl9TVEFfSUQxX1NUQV9BUCB8IEFSX1NUQV9JRDFfQURIT0M7CisJdTMyIHNldCA9IEFSX1NUQV9JRDFfS1NSQ0hfTU9ERTsKIAotCXZhbCA9IFJFR19SRUFEKGFoLCBBUl9TVEFfSUQxKTsKLQl2YWwgJj0gfihBUl9TVEFfSUQxX1NUQV9BUCB8IEFSX1NUQV9JRDFfQURIT0MpOwogCXN3aXRjaCAob3Btb2RlKSB7Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKLQkJUkVHX1dSSVRFKGFoLCBBUl9TVEFfSUQxLCB2YWwgfCBBUl9TVEFfSUQxX1NUQV9BUAotCQkJICB8IEFSX1NUQV9JRDFfS1NSQ0hfTU9ERSk7Ci0JCVJFR19DTFJfQklUKGFoLCBBUl9DRkcsIEFSX0NGR19BUF9BREhPQ19JTkRJQ0FUSU9OKTsKLQkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKIAljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6Ci0JCVJFR19XUklURShhaCwgQVJfU1RBX0lEMSwgdmFsIHwgQVJfU1RBX0lEMV9BREhPQwotCQkJICB8IEFSX1NUQV9JRDFfS1NSQ0hfTU9ERSk7CisJCXNldCB8PSBBUl9TVEFfSUQxX0FESE9DOwogCQlSRUdfU0VUX0JJVChhaCwgQVJfQ0ZHLCBBUl9DRkdfQVBfQURIT0NfSU5ESUNBVElPTik7CiAJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJCXNldCB8PSBBUl9TVEFfSUQxX1NUQV9BUDsKKwkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCQlSRUdfV1JJVEUoYWgsIEFSX1NUQV9JRDEsIHZhbCB8IEFSX1NUQV9JRDFfS1NSQ0hfTU9ERSk7CisJCVJFR19DTFJfQklUKGFoLCBBUl9DRkcsIEFSX0NGR19BUF9BREhPQ19JTkRJQ0FUSU9OKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJaWYgKGFoLT5pc19tb25pdG9yaW5nKQotCQkJUkVHX1dSSVRFKGFoLCBBUl9TVEFfSUQxLCB2YWwgfCBBUl9TVEFfSUQxX0tTUkNIX01PREUpOworCQlpZiAoIWFoLT5pc19tb25pdG9yaW5nKQorCQkJc2V0ID0gMDsKIAkJYnJlYWs7CiAJfQorCVJFR19STVcoYWgsIEFSX1NUQV9JRDEsIHNldCwgbWFzayk7CiB9CiAKIHZvaWQgYXRoOWtfaHdfZ2V0X2RlbHRhX3Nsb3BlX3ZhbHMoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBjb2VmX3NjYWxlZCwKQEAgLTEwMjEsMTAgKzEwNzUsOCBAQAogCXUzMiB0bXBSZWc7CiAKIAlpZiAoQVJfU1JFVl85MTAwKGFoKSkgewotCQl1MzIgdmFsID0gUkVHX1JFQUQoYWgsIEFSX1JUQ19ERVJJVkVEX0NMSyk7Ci0JCXZhbCAmPSB+QVJfUlRDX0RFUklWRURfQ0xLX1BFUklPRDsKLQkJdmFsIHw9IFNNKDEsIEFSX1JUQ19ERVJJVkVEX0NMS19QRVJJT0QpOwotCQlSRUdfV1JJVEUoYWgsIEFSX1JUQ19ERVJJVkVEX0NMSywgdmFsKTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUlRDX0RFUklWRURfQ0xLLAorCQkJICAgICAgQVJfUlRDX0RFUklWRURfQ0xLX1BFUklPRCwgMSk7CiAJCSh2b2lkKVJFR19SRUFEKGFoLCBBUl9SVENfREVSSVZFRF9DTEspOwogCX0KIApAQCAtMTIxMiw2ICsxMjY0LDIwIEBACiAJcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2FwcGx5X2dwaW9fb3ZlcnJpZGUoc3RydWN0IGF0aF9odyAqYWgpCit7CisJdTMyIGdwaW9fbWFzayA9IGFoLT5ncGlvX21hc2s7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBncGlvX21hc2s7IGkrKywgZ3Bpb19tYXNrID4+PSAxKSB7CisJCWlmICghKGdwaW9fbWFzayAmIDEpKQorCQkJY29udGludWU7CisKKwkJYXRoOWtfaHdfY2ZnX291dHB1dChhaCwgaSwgQVJfR1BJT19PVVRQVVRfTVVYX0FTX09VVFBVVCk7CisJCWF0aDlrX2h3X3NldF9ncGlvKGFoLCBpLCAhIShhaC0+Z3Bpb192YWwgJiBCSVQoaSkpKTsKKwl9Cit9CisKIGJvb2wgYXRoOWtfaHdfY2hlY2tfYWxpdmUoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJaW50IGNvdW50ID0gNTA7CkBAIC0xNDA5LDcgKzE0NzUsNyBAQAogCVJFR1dSSVRFX0JVRkZFUl9GTFVTSChhaCk7CiAKIAlhaC0+aW50cl90eHFzID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgYWgtPmNhcHMudG90YWxfcXVldWVzOyBpKyspCisJZm9yIChpID0gMDsgaSA8IEFUSDlLX05VTV9UWF9RVUVVRVM7IGkrKykKIAkJYXRoOWtfaHdfcmVzZXR0eHF1ZXVlKGFoLCBpKTsKIAogCWF0aDlrX2h3X2luaXRfaW50ZXJydXB0X21hc2tzKGFoLCBhaC0+b3Btb2RlKTsKQEAgLTE0MjYsOCArMTQ5Miw3IEBACiAJCWFyOTAwMl9od19lbmFibGVfd2VwX2FnZ3JlZ2F0aW9uKGFoKTsKIAl9CiAKLQlSRUdfV1JJVEUoYWgsIEFSX1NUQV9JRDEsCi0JCSAgUkVHX1JFQUQoYWgsIEFSX1NUQV9JRDEpIHwgQVJfU1RBX0lEMV9QUkVTRVJWRV9TRVFOVU0pOworCVJFR19TRVRfQklUKGFoLCBBUl9TVEFfSUQxLCBBUl9TVEFfSUQxX1BSRVNFUlZFX1NFUU5VTSk7CiAKIAlhdGg5a19od19zZXRfZG1hKGFoKTsKIApAQCAtMTQ4MCw3ICsxNTQ1LDkgQEAKIAkJCQlSRUdfV1JJVEUoYWgsIEFSX0NGRywgQVJfQ0ZHX1NXVEQgfCBBUl9DRkdfU1dSRCk7CiAJCX0KICNpZmRlZiBfX0JJR19FTkRJQU4KLSAgICAgICAgICAgICAgICBlbHNlCisJCWVsc2UgaWYgKEFSX1NSRVZfOTM0MChhaCkpCisJCQlSRUdfUk1XKGFoLCBBUl9DRkcsIEFSX0NGR19TV1JCIHwgQVJfQ0ZHX1NXVEIsIDApOworCQllbHNlCiAJCQlSRUdfV1JJVEUoYWgsIEFSX0NGRywgQVJfQ0ZHX1NXVEQgfCBBUl9DRkdfU1dSRCk7CiAjZW5kaWYKIAl9CkBAIC0xNDkxLDYgKzE1NTgsOCBAQAogCWlmIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKQogCQlhcjkwMDNfaHdfYmJfd2F0Y2hkb2dfY29uZmlnKGFoKTsKIAorCWF0aDlrX2h3X2FwcGx5X2dwaW9fb3ZlcnJpZGUoYWgpOworCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGF0aDlrX2h3X3Jlc2V0KTsKQEAgLTE2NzAsMjEgKzE3MzksMTUgQEAKIAljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CiAJCVJFR19TRVRfQklUKGFoLCBBUl9UWENGRywKIAkJCSAgICBBUl9UWENGR19BREhPQ19CRUFDT05fQVRJTV9UWF9QT0xJQ1kpOwotCQlSRUdfV1JJVEUoYWgsIEFSX05FWFRfTkRQX1RJTUVSLAotCQkJICBUVV9UT19VU0VDKG5leHRfYmVhY29uICsKLQkJCQkgICAgIChhaC0+YXRpbV93aW5kb3cgPyBhaC0+Ci0JCQkJICAgICAgYXRpbV93aW5kb3cgOiAxKSkpOworCQlSRUdfV1JJVEUoYWgsIEFSX05FWFRfTkRQX1RJTUVSLCBuZXh0X2JlYWNvbiArCisJCQkgIFRVX1RPX1VTRUMoYWgtPmF0aW1fd2luZG93ID8gYWgtPmF0aW1fd2luZG93IDogMSkpOwogCQlmbGFncyB8PSBBUl9ORFBfVElNRVJfRU47CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKLQkJUkVHX1dSSVRFKGFoLCBBUl9ORVhUX1RCVFRfVElNRVIsIFRVX1RPX1VTRUMobmV4dF9iZWFjb24pKTsKLQkJUkVHX1dSSVRFKGFoLCBBUl9ORVhUX0RNQV9CRUFDT05fQUxFUlQsCi0JCQkgIFRVX1RPX1VTRUMobmV4dF9iZWFjb24gLQotCQkJCSAgICAgYWgtPmNvbmZpZy4KLQkJCQkgICAgIGRtYV9iZWFjb25fcmVzcG9uc2VfdGltZSkpOwotCQlSRUdfV1JJVEUoYWgsIEFSX05FWFRfU1dCQSwKLQkJCSAgVFVfVE9fVVNFQyhuZXh0X2JlYWNvbiAtCi0JCQkJICAgICBhaC0+Y29uZmlnLgotCQkJCSAgICAgc3dfYmVhY29uX3Jlc3BvbnNlX3RpbWUpKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9ORVhUX1RCVFRfVElNRVIsIG5leHRfYmVhY29uKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9ORVhUX0RNQV9CRUFDT05fQUxFUlQsIG5leHRfYmVhY29uIC0KKwkJCSAgVFVfVE9fVVNFQyhhaC0+Y29uZmlnLmRtYV9iZWFjb25fcmVzcG9uc2VfdGltZSkpOworCQlSRUdfV1JJVEUoYWgsIEFSX05FWFRfU1dCQSwgbmV4dF9iZWFjb24gLQorCQkJICBUVV9UT19VU0VDKGFoLT5jb25maWcuc3dfYmVhY29uX3Jlc3BvbnNlX3RpbWUpKTsKIAkJZmxhZ3MgfD0KIAkJCUFSX1RCVFRfVElNRVJfRU4gfCBBUl9EQkFfVElNRVJfRU4gfCBBUl9TV0JBX1RJTUVSX0VOOwogCQlicmVhazsKQEAgLTE2OTYsMTggKzE3NTksMTMgQEAKIAkJYnJlYWs7CiAJfQogCi0JUkVHX1dSSVRFKGFoLCBBUl9CRUFDT05fUEVSSU9ELCBUVV9UT19VU0VDKGJlYWNvbl9wZXJpb2QpKTsKLQlSRUdfV1JJVEUoYWgsIEFSX0RNQV9CRUFDT05fUEVSSU9ELCBUVV9UT19VU0VDKGJlYWNvbl9wZXJpb2QpKTsKLQlSRUdfV1JJVEUoYWgsIEFSX1NXQkFfUEVSSU9ELCBUVV9UT19VU0VDKGJlYWNvbl9wZXJpb2QpKTsKLQlSRUdfV1JJVEUoYWgsIEFSX05EUF9QRVJJT0QsIFRVX1RPX1VTRUMoYmVhY29uX3BlcmlvZCkpOworCVJFR19XUklURShhaCwgQVJfQkVBQ09OX1BFUklPRCwgYmVhY29uX3BlcmlvZCk7CisJUkVHX1dSSVRFKGFoLCBBUl9ETUFfQkVBQ09OX1BFUklPRCwgYmVhY29uX3BlcmlvZCk7CisJUkVHX1dSSVRFKGFoLCBBUl9TV0JBX1BFUklPRCwgYmVhY29uX3BlcmlvZCk7CisJUkVHX1dSSVRFKGFoLCBBUl9ORFBfUEVSSU9ELCBiZWFjb25fcGVyaW9kKTsKIAogCVJFR1dSSVRFX0JVRkZFUl9GTFVTSChhaCk7CiAKLQliZWFjb25fcGVyaW9kICY9IH5BVEg5S19CRUFDT05fRU5BOwotCWlmIChiZWFjb25fcGVyaW9kICYgQVRIOUtfQkVBQ09OX1JFU0VUX1RTRikgewotCQlhdGg5a19od19yZXNldF90c2YoYWgpOwotCX0KLQogCVJFR19TRVRfQklUKGFoLCBBUl9USU1FUl9NT0RFLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKGF0aDlrX2h3X2JlYWNvbmluaXQpOwpAQCAtMTc5NSw3ICsxODUzLDcgQEAKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKIAlzdHJ1Y3QgYXRoX2J0Y29leF9odyAqYnRjb2V4X2h3ID0gJmFoLT5idGNvZXhfaHc7CiAKLQl1MTYgY2FwRmllbGQgPSAwLCBlZXZhbDsKKwl1MTYgZWV2YWw7CiAJdTggYW50X2Rpdl9jdGwxLCB0eF9jaGFpbm1hc2ssIHJ4X2NoYWlubWFzazsKIAogCWVldmFsID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9SRUdfMCk7CkBAIC0xODA2LDggKzE4NjQsNiBAQAogCQllZXZhbCB8PSBBUjkyODVfUkRFWFRfREVGQVVMVDsKIAlyZWd1bGF0b3J5LT5jdXJyZW50X3JkX2V4dCA9IGVldmFsOwogCi0JY2FwRmllbGQgPSBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX09QX0NBUCk7Ci0KIAlpZiAoYWgtPm9wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BUCAmJgogCSAgICBhaC0+aHdfdmVyc2lvbi5zdWJ2ZW5kb3JpZCA9PSBBUl9TVUJWRU5ET1JfSURfTkVXX0EpIHsKIAkJaWYgKHJlZ3VsYXRvcnktPmN1cnJlbnRfcmQgPT0gMHg2NCB8fApAQCAtMTg0Miw2ICsxODk4LDggQEAKIAkgICAgIShBUl9TUkVWXzkyNzEoYWgpKSkKIAkJLyogQ0I3MTogR1BJTyAwIGlzIHB1bGxlZCBkb3duIHRvIGluZGljYXRlIDMgcnggY2hhaW5zICovCiAJCXBDYXAtPnJ4X2NoYWlubWFzayA9IGF0aDlrX2h3X2dwaW9fZ2V0KGFoLCAwKSA/IDB4NSA6IDB4NzsKKwllbHNlIGlmIChBUl9TUkVWXzkxMDAoYWgpKQorCQlwQ2FwLT5yeF9jaGFpbm1hc2sgPSAweDc7CiAJZWxzZQogCQkvKiBVc2UgcnhfY2hhaW5tYXNrIGZyb20gRUVQUk9NLiAqLwogCQlwQ2FwLT5yeF9jaGFpbm1hc2sgPSBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX1JYX01BU0spOwpAQCAtMTg1MiwzNiArMTkxMCwxMyBAQAogCWlmIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKQogCQlhaC0+bWlzY19tb2RlIHw9IEFSX1BDVV9BTFdBWVNfUEVSRk9STV9LRVlTRUFSQ0g7CiAKLQlwQ2FwLT5sb3dfMmdoel9jaGFuID0gMjMxMjsKLQlwQ2FwLT5oaWdoXzJnaHpfY2hhbiA9IDI3MzI7Ci0KLQlwQ2FwLT5sb3dfNWdoel9jaGFuID0gNDkyMDsKLQlwQ2FwLT5oaWdoXzVnaHpfY2hhbiA9IDYxMDA7Ci0KIAljb21tb24tPmNyeXB0X2NhcHMgfD0gQVRIX0NSWVBUX0NBUF9DSVBIRVJfQUVTQ0NNOwogCi0JaWYgKGFoLT5jb25maWcuaHRfZW5hYmxlKQorCWlmIChhaC0+aHdfdmVyc2lvbi5kZXZpZCAhPSBBUjI0MjdfREVWSURfUENJRSkKIAkJcENhcC0+aHdfY2FwcyB8PSBBVEg5S19IV19DQVBfSFQ7CiAJZWxzZQogCQlwQ2FwLT5od19jYXBzICY9IH5BVEg5S19IV19DQVBfSFQ7CiAKLQlpZiAoY2FwRmllbGQgJiBBUl9FRVBST01fRUVQQ0FQX01BWFFDVSkKLQkJcENhcC0+dG90YWxfcXVldWVzID0KLQkJCU1TKGNhcEZpZWxkLCBBUl9FRVBST01fRUVQQ0FQX01BWFFDVSk7Ci0JZWxzZQotCQlwQ2FwLT50b3RhbF9xdWV1ZXMgPSBBVEg5S19OVU1fVFhfUVVFVUVTOwotCi0JaWYgKGNhcEZpZWxkICYgQVJfRUVQUk9NX0VFUENBUF9LQ19FTlRSSUVTKQotCQlwQ2FwLT5rZXljYWNoZV9zaXplID0KLQkJCTEgPDwgTVMoY2FwRmllbGQsIEFSX0VFUFJPTV9FRVBDQVBfS0NfRU5UUklFUyk7Ci0JZWxzZQotCQlwQ2FwLT5rZXljYWNoZV9zaXplID0gQVJfS0VZVEFCTEVfU0laRTsKLQotCWlmIChBUl9TUkVWXzkyODUoYWgpIHx8IEFSX1NSRVZfOTI3MShhaCkpCi0JCXBDYXAtPnR4X3RyaWdsZXZlbF9tYXggPSBNQVhfVFhfRklGT19USFJFU0hPTEQgPj4gMTsKLQllbHNlCi0JCXBDYXAtPnR4X3RyaWdsZXZlbF9tYXggPSBNQVhfVFhfRklGT19USFJFU0hPTEQ7Ci0KIAlpZiAoQVJfU1JFVl85MjcxKGFoKSkKIAkJcENhcC0+bnVtX2dwaW9fcGlucyA9IEFSOTI3MV9OVU1fR1BJTzsKIAllbHNlIGlmIChBUl9ERVZJRF83MDEwKGFoKSkKQEAgLTE5MDAsOCArMTkzNSw2IEBACiAJCXBDYXAtPnJ0c19hZ2dyX2xpbWl0ID0gKDggKiAxMDI0KTsKIAl9CiAKLQlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF9FTkhBTkNFRFBNOwotCiAjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQogCWFoLT5yZnNpbGVudCA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfUkZfU0lMRU5UKTsKIAlpZiAoYWgtPnJmc2lsZW50ICYgRUVQX1JGU0lMRU5UX0VOQUJMRUQpIHsKQEAgLTE5MjMsMzIgKzE5NTYsMjMgQEAKIAllbHNlCiAJCXBDYXAtPmh3X2NhcHMgfD0gQVRIOUtfSFdfQ0FQXzRLQl9TUExJVFRSQU5TOwogCi0JaWYgKHJlZ3VsYXRvcnktPmN1cnJlbnRfcmRfZXh0ICYgKDEgPDwgUkVHX0VYVF9KQVBBTl9NSURCQU5EKSkgewotCQlwQ2FwLT5yZWdfY2FwID0KLQkJCUFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19ORVdfMTFBIHwKLQkJCUFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMV9FVkVOIHwKLQkJCUFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMiB8Ci0JCQlBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfTUlEQkFORDsKLQl9IGVsc2UgewotCQlwQ2FwLT5yZWdfY2FwID0KLQkJCUFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19ORVdfMTFBIHwKLQkJCUFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMV9FVkVOOwotCX0KLQotCS8qIEFkdmVydGlzZSBtaWRiYW5kIGZvciBBUjU0MTYgd2l0aCBGQ0MgbWlkYmFuZCBzZXQgaW4gZWVwcm9tICovCi0JaWYgKHJlZ3VsYXRvcnktPmN1cnJlbnRfcmRfZXh0ICYgKDEgPDwgUkVHX0VYVF9GQ0NfTUlEQkFORCkgJiYKLQkgICAgQVJfU1JFVl81NDE2KGFoKSkKLQkJcENhcC0+cmVnX2NhcCB8PSBBUl9FRVBST01fRUVSRUdDQVBfRU5fRkNDX01JREJBTkQ7Ci0KLQlpZiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSAmJiBjb21tb24tPmJ0Y29leF9lbmFibGVkKSB7Ci0JCWJ0Y29leF9ody0+YnRhY3RpdmVfZ3BpbyA9IEFUSF9CVEFDVElWRV9HUElPOwotCQlidGNvZXhfaHctPndsYW5hY3RpdmVfZ3BpbyA9IEFUSF9XTEFOQUNUSVZFX0dQSU87Ci0KLQkJaWYgKEFSX1NSRVZfOTI4NShhaCkpIHsKKwlpZiAoY29tbW9uLT5idGNvZXhfZW5hYmxlZCkgeworCQlpZiAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSkgewogCQkJYnRjb2V4X2h3LT5zY2hlbWUgPSBBVEhfQlRDT0VYX0NGR18zV0lSRTsKLQkJCWJ0Y29leF9ody0+YnRwcmlvcml0eV9ncGlvID0gQVRIX0JUUFJJT1JJVFlfR1BJTzsKLQkJfSBlbHNlIHsKLQkJCWJ0Y29leF9ody0+c2NoZW1lID0gQVRIX0JUQ09FWF9DRkdfMldJUkU7CisJCQlidGNvZXhfaHctPmJ0YWN0aXZlX2dwaW8gPSBBVEhfQlRBQ1RJVkVfR1BJT185MzAwOworCQkJYnRjb2V4X2h3LT53bGFuYWN0aXZlX2dwaW8gPSBBVEhfV0xBTkFDVElWRV9HUElPXzkzMDA7CisJCQlidGNvZXhfaHctPmJ0cHJpb3JpdHlfZ3BpbyA9IEFUSF9CVFBSSU9SSVRZX0dQSU9fOTMwMDsKKwkJfSBlbHNlIGlmIChBUl9TUkVWXzkyODBfMjBfT1JfTEFURVIoYWgpKSB7CisJCQlidGNvZXhfaHctPmJ0YWN0aXZlX2dwaW8gPSBBVEhfQlRBQ1RJVkVfR1BJT185MjgwOworCQkJYnRjb2V4X2h3LT53bGFuYWN0aXZlX2dwaW8gPSBBVEhfV0xBTkFDVElWRV9HUElPXzkyODA7CisKKwkJCWlmIChBUl9TUkVWXzkyODUoYWgpKSB7CisJCQkJYnRjb2V4X2h3LT5zY2hlbWUgPSBBVEhfQlRDT0VYX0NGR18zV0lSRTsKKwkJCQlidGNvZXhfaHctPmJ0cHJpb3JpdHlfZ3BpbyA9CisJCQkJCQlBVEhfQlRQUklPUklUWV9HUElPXzkyODU7CisJCQl9IGVsc2UgeworCQkJCWJ0Y29leF9ody0+c2NoZW1lID0gQVRIX0JUQ09FWF9DRkdfMldJUkU7CisJCQl9CiAJCX0KIAl9IGVsc2UgewogCQlidGNvZXhfaHctPnNjaGVtZSA9IEFUSF9CVENPRVhfQ0ZHX05PTkU7CkBAIC0xOTk4LDYgKzIwMjIsMjIgQEAKIAl9CiAKIAorCWlmIChBUl9TUkVWXzk0ODUoYWgpKSB7CisJCWFudF9kaXZfY3RsMSA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfQU5UX0RJVl9DVEwxKTsKKwkJLyoKKwkJICogZW5hYmxlIHRoZSBkaXZlcnNpdHktY29tYmluaW5nIGFsZ29yaXRobSBvbmx5IHdoZW4KKwkJICogYm90aCBlbmFibGVfbG5hX2RpdiBhbmQgZW5hYmxlX2Zhc3RfZGl2IGFyZSBzZXQKKwkJICoJCVRhYmxlIGZvciBEaXZlcnNpdHkKKwkJICogYW50X2Rpdl9hbHRfbG5hY29uZgkJYml0IDAtMQorCQkgKiBhbnRfZGl2X21haW5fbG5hY29uZgkJYml0IDItMworCQkgKiBhbnRfZGl2X2FsdF9nYWludGIJCWJpdCA0CisJCSAqIGFudF9kaXZfbWFpbl9nYWludGIJCWJpdCA1CisJCSAqIGVuYWJsZV9hbnRfZGl2X2xuYWRpdgliaXQgNgorCQkgKiBlbmFibGVfYW50X2Zhc3RfZGl2CQliaXQgNworCQkgKi8KKwkJaWYgKChhbnRfZGl2X2N0bDEgPj4gMHg2KSA9PSAweDMpCisJCQlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF9BTlRfRElWX0NPTUI7CisJfQogCiAJaWYgKEFSX1NSRVZfOTQ4NV8xMChhaCkpIHsKIAkJcENhcC0+cGNpZV9sY3JfZXh0c3luY19lbiA9IHRydWU7CkBAIC0yMTg2LDExICsyMjI2LDkgQEAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlIsIHBoeWJpdHMpOwogCiAJaWYgKHBoeWJpdHMpCi0JCVJFR19XUklURShhaCwgQVJfUlhDRkcsCi0JCQkgIFJFR19SRUFEKGFoLCBBUl9SWENGRykgfCBBUl9SWENGR19aTEZETUEpOworCQlSRUdfU0VUX0JJVChhaCwgQVJfUlhDRkcsIEFSX1JYQ0ZHX1pMRkRNQSk7CiAJZWxzZQotCQlSRUdfV1JJVEUoYWgsIEFSX1JYQ0ZHLAotCQkJICBSRUdfUkVBRChhaCwgQVJfUlhDRkcpICYgfkFSX1JYQ0ZHX1pMRkRNQSk7CisJCVJFR19DTFJfQklUKGFoLCBBUl9SWENGRywgQVJfUlhDRkdfWkxGRE1BKTsKIAogCVJFR1dSSVRFX0JVRkZFUl9GTFVTSChhaCk7CiB9CkBAIC0yMzY2LDEwICsyNDA0LDExIEBACiAJcmV0dXJuIHRpbWVyX3RhYmxlLT5nZW5fdGltZXJfaW5kZXhbYl07CiB9CiAKLXN0YXRpYyB1MzIgYXRoOWtfaHdfZ2V0dHNmMzIoc3RydWN0IGF0aF9odyAqYWgpCit1MzIgYXRoOWtfaHdfZ2V0dHNmMzIoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJcmV0dXJuIFJFR19SRUFEKGFoLCBBUl9UU0ZfTDMyKTsKIH0KK0VYUE9SVF9TWU1CT0woYXRoOWtfaHdfZ2V0dHNmMzIpOwogCiBzdHJ1Y3QgYXRoX2dlbl90aW1lciAqYXRoX2dlbl90aW1lcl9hbGxvYyhzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkJICB2b2lkICgqdHJpZ2dlcikodm9pZCAqKSwKQEAgLTI0MDIsMTEgKzI0NDEsMTEgQEAKIAogdm9pZCBhdGg5a19od19nZW5fdGltZXJfc3RhcnQoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkgICAgICBzdHJ1Y3QgYXRoX2dlbl90aW1lciAqdGltZXIsCi0JCQkgICAgICB1MzIgdGltZXJfbmV4dCwKKwkJCSAgICAgIHUzMiB0cmlnX3RpbWVvdXQsCiAJCQkgICAgICB1MzIgdGltZXJfcGVyaW9kKQogewogCXN0cnVjdCBhdGhfZ2VuX3RpbWVyX3RhYmxlICp0aW1lcl90YWJsZSA9ICZhaC0+aHdfZ2VuX3RpbWVyczsKLQl1MzIgdHNmOworCXUzMiB0c2YsIHRpbWVyX25leHQ7CiAKIAlCVUdfT04oIXRpbWVyX3BlcmlvZCk7CiAKQEAgLTI0MTQsMTggKzI0NTMsMTMgQEAKIAogCXRzZiA9IGF0aDlrX2h3X2dldHRzZjMyKGFoKTsKIAorCXRpbWVyX25leHQgPSB0c2YgKyB0cmlnX3RpbWVvdXQ7CisKIAlhdGhfZGJnKGF0aDlrX2h3X2NvbW1vbihhaCksIEFUSF9EQkdfSFdUSU1FUiwKIAkJImN1cnJlbnQgdHNmICV4IHBlcmlvZCAleCB0aW1lcl9uZXh0ICV4XG4iLAogCQl0c2YsIHRpbWVyX3BlcmlvZCwgdGltZXJfbmV4dCk7CiAKIAkvKgotCSAqIFB1bGwgdGltZXJfbmV4dCBmb3J3YXJkIGlmIHRoZSBjdXJyZW50IFRTRiBhbHJlYWR5IHBhc3NlZCBpdAotCSAqIGJlY2F1c2Ugb2Ygc29mdHdhcmUgbGF0ZW5jeQotCSAqLwotCWlmICh0aW1lcl9uZXh0IDwgdHNmKQotCQl0aW1lcl9uZXh0ID0gdHNmICsgdGltZXJfcGVyaW9kOwotCi0JLyoKIAkgKiBQcm9ncmFtIGdlbmVyaWMgdGltZXIgcmVnaXN0ZXJzCiAJICovCiAJUkVHX1dSSVRFKGFoLCBnZW5fdG1yX2NvbmZpZ3VyYXRpb25bdGltZXItPmluZGV4XS5uZXh0X2FkZHIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5oCmluZGV4IDY2NTBmZDQuLjdhZjI3NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5oCkBAIC00Myw2ICs0Myw3IEBACiAjZGVmaW5lIEFSOTI4N19ERVZJRF9QQ0kJMHgwMDJkCiAjZGVmaW5lIEFSOTI4N19ERVZJRF9QQ0lFCTB4MDAyZQogI2RlZmluZSBBUjkzMDBfREVWSURfUENJRQkweDAwMzAKKyNkZWZpbmUgQVI5MzAwX0RFVklEX0FSOTM0MAkweDAwMzEKICNkZWZpbmUgQVI5MzAwX0RFVklEX0FSOTQ4NV9QQ0lFIDB4MDAzMgogCiAjZGVmaW5lIEFSNTQxNl9BUjkxMDBfREVWSUQJMHgwMDBiCkBAIC01NSw2ICs1Niw5IEBACiAjZGVmaW5lIEFUOTI4NV9DT0VYM1dJUkVfU0FfU1VCU1lTSUQJMHgzMGFhCiAjZGVmaW5lIEFUOTI4NV9DT0VYM1dJUkVfREFfU1VCU1lTSUQJMHgzMGFiCiAKKyNkZWZpbmUgQVI5MzAwX05VTV9CVF9XRUlHSFRTICAgNAorI2RlZmluZSBBUjkzMDBfTlVNX1dMQU5fV0VJR0hUUyA0CisKICNkZWZpbmUgQVRIX0FNUERVX0xJTUlUX01BWCAgICAgICAgKDY0ICogMTAyNCAtIDEpCiAKICNkZWZpbmUJQVRIX0RFRkFVTFRfTk9JU0VfRkxPT1IgLTk1CkBAIC02NSw1MyArNjksNDkgQEAKIAogLyogUmVnaXN0ZXIgcmVhZC93cml0ZSBwcmltaXRpdmVzICovCiAjZGVmaW5lIFJFR19XUklURShfYWgsIF9yZWcsIF92YWwpIFwKLQlhdGg5a19od19jb21tb24oX2FoKS0+b3BzLT53cml0ZSgoX2FoKSwgKF92YWwpLCAoX3JlZykpCisJKF9haCktPnJlZ19vcHMud3JpdGUoKF9haCksIChfdmFsKSwgKF9yZWcpKQogCiAjZGVmaW5lIFJFR19SRUFEKF9haCwgX3JlZykgXAotCWF0aDlrX2h3X2NvbW1vbihfYWgpLT5vcHMtPnJlYWQoKF9haCksIChfcmVnKSkKKwkoX2FoKS0+cmVnX29wcy5yZWFkKChfYWgpLCAoX3JlZykpCiAKICNkZWZpbmUgUkVHX1JFQURfTVVMVEkoX2FoLCBfYWRkciwgX3ZhbCwgX2NudCkJCVwKLQlhdGg5a19od19jb21tb24oX2FoKS0+b3BzLT5tdWx0aV9yZWFkKChfYWgpLCAoX2FkZHIpLCAoX3ZhbCksIChfY250KSkKKwkoX2FoKS0+cmVnX29wcy5tdWx0aV9yZWFkKChfYWgpLCAoX2FkZHIpLCAoX3ZhbCksIChfY250KSkKKworI2RlZmluZSBSRUdfUk1XKF9haCwgX3JlZywgX3NldCwgX2NscikgXAorCShfYWgpLT5yZWdfb3BzLnJtdygoX2FoKSwgKF9yZWcpLCAoX3NldCksIChfY2xyKSkKIAogI2RlZmluZSBFTkFCTEVfUkVHV1JJVEVfQlVGRkVSKF9haCkJCQkJCVwKIAlkbyB7CQkJCQkJCQlcCi0JCWlmIChhdGg5a19od19jb21tb24oX2FoKS0+b3BzLT5lbmFibGVfd3JpdGVfYnVmZmVyKQlcCi0JCQlhdGg5a19od19jb21tb24oX2FoKS0+b3BzLT5lbmFibGVfd3JpdGVfYnVmZmVyKChfYWgpKTsgXAorCQlpZiAoKF9haCktPnJlZ19vcHMuZW5hYmxlX3dyaXRlX2J1ZmZlcikJXAorCQkJKF9haCktPnJlZ19vcHMuZW5hYmxlX3dyaXRlX2J1ZmZlcigoX2FoKSk7IFwKIAl9IHdoaWxlICgwKQogCiAjZGVmaW5lIFJFR1dSSVRFX0JVRkZFUl9GTFVTSChfYWgpCQkJCQlcCiAJZG8gewkJCQkJCQkJXAotCQlpZiAoYXRoOWtfaHdfY29tbW9uKF9haCktPm9wcy0+d3JpdGVfZmx1c2gpCQlcCi0JCQlhdGg5a19od19jb21tb24oX2FoKS0+b3BzLT53cml0ZV9mbHVzaCgoX2FoKSk7CVwKKwkJaWYgKChfYWgpLT5yZWdfb3BzLndyaXRlX2ZsdXNoKQkJXAorCQkJKF9haCktPnJlZ19vcHMud3JpdGVfZmx1c2goKF9haCkpOwlcCiAJfSB3aGlsZSAoMCkKIAogI2RlZmluZSBTTShfdiwgX2YpICAoKChfdikgPDwgX2YjI19TKSAmIF9mKQogI2RlZmluZSBNUyhfdiwgX2YpICAoKChfdikgJiBfZikgPj4gX2YjI19TKQotI2RlZmluZSBSRUdfUk1XKF9hLCBfciwgX3NldCwgX2NscikgICAgXAotCVJFR19XUklURShfYSwgX3IsIChSRUdfUkVBRChfYSwgX3IpICYgfihfY2xyKSkgfCAoX3NldCkpCiAjZGVmaW5lIFJFR19STVdfRklFTEQoX2EsIF9yLCBfZiwgX3YpIFwKLQlSRUdfV1JJVEUoX2EsIF9yLCBcCi0JKFJFR19SRUFEKF9hLCBfcikgJiB+X2YpIHwgKCgoX3YpIDw8IF9mIyNfUykgJiBfZikpCisJUkVHX1JNVyhfYSwgX3IsICgoKF92KSA8PCBfZiMjX1MpICYgX2YpLCAoX2YpKQogI2RlZmluZSBSRUdfUkVBRF9GSUVMRChfYSwgX3IsIF9mKSBcCiAJKCgoUkVHX1JFQUQoX2EsIF9yKSAmIF9mKSA+PiBfZiMjX1MpKQogI2RlZmluZSBSRUdfU0VUX0JJVChfYSwgX3IsIF9mKSBcCi0JUkVHX1dSSVRFKF9hLCBfciwgUkVHX1JFQUQoX2EsIF9yKSB8IChfZikpCisJUkVHX1JNVyhfYSwgX3IsIChfZiksIDApCiAjZGVmaW5lIFJFR19DTFJfQklUKF9hLCBfciwgX2YpIFwKLQlSRUdfV1JJVEUoX2EsIF9yLCBSRUdfUkVBRChfYSwgX3IpICYgfihfZikpCisJUkVHX1JNVyhfYSwgX3IsIDAsIChfZikpCiAKLSNkZWZpbmUgRE9fREVMQVkoeCkgZG8gewkJCVwKLQkJaWYgKCgrKyh4KSAlIDY0KSA9PSAwKSAgICAgICAgICBcCi0JCQl1ZGVsYXkoMSk7CQlcCisjZGVmaW5lIERPX0RFTEFZKHgpIGRvIHsJCQkJCVwKKwkJaWYgKCgoKysoeCkgJSA2NCkgPT0gMCkgJiYJCQlcCisJCSAgICAoYXRoOWtfaHdfY29tbW9uKGFoKS0+YnVzX29wcy0+YXRoX2J1c190eXBlCVwKKwkJCSE9IEFUSF9VU0IpKQkJCQlcCisJCQl1ZGVsYXkoMSk7CQkJCVwKIAl9IHdoaWxlICgwKQogCi0jZGVmaW5lIFJFR19XUklURV9BUlJBWShpbmlhcnJheSwgY29sdW1uLCByZWdXcikgZG8geyAgICAgICAgICAgICAgICAgICBcCi0JCWludCByOwkJCQkJCQlcCi0JCWZvciAociA9IDA7IHIgPCAoKGluaWFycmF5KS0+aWFfcm93cyk7IHIrKykgewkJXAotCQkJUkVHX1dSSVRFKGFoLCBJTklfUkEoKGluaWFycmF5KSwgKHIpLCAwKSwJXAotCQkJCSAgSU5JX1JBKChpbmlhcnJheSksIHIsIChjb2x1bW4pKSk7CVwKLQkJCURPX0RFTEFZKHJlZ1dyKTsJCQkJXAotCQl9CQkJCQkJCVwKLQl9IHdoaWxlICgwKQorI2RlZmluZSBSRUdfV1JJVEVfQVJSQVkoaW5pYXJyYXksIGNvbHVtbiwgcmVnV3IpIFwKKwlhdGg5a19od193cml0ZV9hcnJheShhaCwgaW5pYXJyYXksIGNvbHVtbiwgJihyZWdXcikpCiAKICNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYX0FTX09VVFBVVCAgICAgICAgICAgICAwCiAjZGVmaW5lIEFSX0dQSU9fT1VUUFVUX01VWF9BU19QQ0lFX0FUVEVOVElPTl9MRUQgMQpAQCAtMTI1LDcgKzEyNSw3IEBACiAjZGVmaW5lIEFSX0dQSU9fQklUKF9ncGlvKSAgICAgICAgICAoMSA8PCAoX2dwaW8pKQogCiAjZGVmaW5lIEJBU0VfQUNUSVZBVEVfREVMQVkgICAgICAgICAxMDAKLSNkZWZpbmUgUlRDX1BMTF9TRVRUTEVfREVMQVkgICAgICAgIDEwMAorI2RlZmluZSBSVENfUExMX1NFVFRMRV9ERUxBWSAgICAgICAgKEFSX1NSRVZfOTM0MChhaCkgPyAxMDAwIDogMTAwKQogI2RlZmluZSBDT0VGX1NDQUxFX1MgICAgICAgICAgICAgICAgMjQKICNkZWZpbmUgSFQ0MF9DSEFOTkVMX0NFTlRFUl9TSElGVCAgIDEwCiAKQEAgLTE3OCw3ICsxNzgsNiBAQAogCUFUSDlLX0hXX0NBUF9IVCAgICAgICAgICAgICAgICAgICAgICAgICA9IEJJVCgwKSwKIAlBVEg5S19IV19DQVBfUkZTSUxFTlQgICAgICAgICAgICAgICAgICAgPSBCSVQoMSksCiAJQVRIOUtfSFdfQ0FQX0NTVCAgICAgICAgICAgICAgICAgICAgICAgID0gQklUKDIpLAotCUFUSDlLX0hXX0NBUF9FTkhBTkNFRFBNICAgICAgICAgICAgICAgICA9IEJJVCgzKSwKIAlBVEg5S19IV19DQVBfQVVUT1NMRUVQICAgICAgICAgICAgICAgICAgPSBCSVQoNCksCiAJQVRIOUtfSFdfQ0FQXzRLQl9TUExJVFRSQU5TICAgICAgICAgICAgID0gQklUKDUpLAogCUFUSDlLX0hXX0NBUF9FRE1BCQkJPSBCSVQoNiksCkBAIC0xOTUsMTcgKzE5NCwxMSBAQAogCiBzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzIHsKIAl1MzIgaHdfY2FwczsgLyogQVRIOUtfSFdfQ0FQXyogZnJvbSBhdGg5a19od19jYXBzICovCi0JdTE2IHRvdGFsX3F1ZXVlczsKLQl1MTYga2V5Y2FjaGVfc2l6ZTsKLQl1MTYgbG93XzVnaHpfY2hhbiwgaGlnaF81Z2h6X2NoYW47Ci0JdTE2IGxvd18yZ2h6X2NoYW4sIGhpZ2hfMmdoel9jaGFuOwogCXUxNiBydHNfYWdncl9saW1pdDsKIAl1OCB0eF9jaGFpbm1hc2s7CiAJdTggcnhfY2hhaW5tYXNrOwogCXU4IG1heF90eGNoYWluczsKIAl1OCBtYXhfcnhjaGFpbnM7Ci0JdTE2IHR4X3RyaWdsZXZlbF9tYXg7Ci0JdTE2IHJlZ19jYXA7CiAJdTggbnVtX2dwaW9fcGluczsKIAl1OCByeF9ocF9xZGVwdGg7CiAJdTggcnhfbHBfcWRlcHRoOwpAQCAtMjI3LDcgKzIyMCw2IEBACiAJdTggcGNpZV9jbG9ja19yZXE7CiAJdTMyIHBjaWVfd2FlbjsKIAl1OCBhbmFsb2dfc2hpZnRyZWc7Ci0JdTggaHRfZW5hYmxlOwogCXU4IHBhcHJkX2Rpc2FibGU7CiAJdTMyIG9mZG1fdHJpZ19sb3c7CiAJdTMyIG9mZG1fdHJpZ19oaWdoOwpAQCAtNDEyLDggKzQwNCw2IEBACiAJdTMyIGJzX25leHRkdGltOwogCXUzMiBic19pbnR2YWw7CiAjZGVmaW5lIEFUSDlLX0JFQUNPTl9QRVJJT0QgICAgICAgMHgwMDAwZmZmZgotI2RlZmluZSBBVEg5S19CRUFDT05fRU5BICAgICAgICAgIDB4MDA4MDAwMDAKLSNkZWZpbmUgQVRIOUtfQkVBQ09OX1JFU0VUX1RTRiAgICAweDAxMDAwMDAwCiAjZGVmaW5lIEFUSDlLX1RTRk9PUl9USFJFU0hPTEQgICAgMHgwMDAwNDI0MCAvKiAxNmsgdXMgKi8KIAl1MzIgYnNfZHRpbXBlcmlvZDsKIAl1MTYgYnNfY2ZwcGVyaW9kOwpAQCAtNDg5LDYgKzQ3OSwxMCBAQAogCXU4IG1haW5fbG5hX2NvbmY7CiAJdTggYWx0X2xuYV9jb25mOwogCXU4IGZhc3RfZGl2X2JpYXM7CisJdTggbWFpbl9nYWludGI7CisJdTggYWx0X2dhaW50YjsKKwlpbnQgbG5hMV9sbmEyX2RlbHRhOworCXU4IGRpdl9ncm91cDsKIH07CiAKIC8qKgpAQCAtNjM4LDEwICs2MzIsMTIgQEAKIAkJCQkgICB1MzIgbnVtRGVsaW1zKTsKIAl2b2lkICgqc2V0MTFuX2FnZ3JfbGFzdCkoc3RydWN0IGF0aF9odyAqYWgsIHZvaWQgKmRzKTsKIAl2b2lkICgqY2xyMTFuX2FnZ3IpKHN0cnVjdCBhdGhfaHcgKmFoLCB2b2lkICpkcyk7Ci0Jdm9pZCAoKnNldDExbl9idXJzdGR1cmF0aW9uKShzdHJ1Y3QgYXRoX2h3ICphaCwgdm9pZCAqZHMsCi0JCQkJICAgICB1MzIgYnVyc3REdXJhdGlvbik7Ci0Jdm9pZCAoKnNldDExbl92aXJ0dWFsbW9yZWZyYWcpKHN0cnVjdCBhdGhfaHcgKmFoLCB2b2lkICpkcywKLQkJCQkgICAgICAgdTMyIHZtZik7CisJdm9pZCAoKnNldF9jbHJkbWFzaykoc3RydWN0IGF0aF9odyAqYWgsIHZvaWQgKmRzLCBib29sIHZhbCk7CisJdm9pZCAoKmFudGRpdl9jb21iX2NvbmZfZ2V0KShzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCXN0cnVjdCBhdGhfaHdfYW50Y29tYl9jb25mICphbnRjb25mKTsKKwl2b2lkICgqYW50ZGl2X2NvbWJfY29uZl9zZXQpKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJc3RydWN0IGF0aF9od19hbnRjb21iX2NvbmYgKmFudGNvbmYpOworCiB9OwogCiBzdHJ1Y3QgYXRoX25mX2xpbWl0cyB7CkBAIC02NTUsNiArNjUxLDggQEAKICNkZWZpbmUgQUhfVU5QTFVHR0VEICAgIDB4MiAvKiBUaGUgY2FyZCBoYXMgYmVlbiBwaHlzaWNhbGx5IHJlbW92ZWQuICovCiAKIHN0cnVjdCBhdGhfaHcgeworCXN0cnVjdCBhdGhfb3BzIHJlZ19vcHM7CisKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiBjb21tb247CiAJc3RydWN0IGF0aDlrX2h3X3ZlcnNpb24gaHdfdmVyc2lvbjsKQEAgLTc4NCw2ICs3ODIsOCBAQAogCiAJLyogQmx1ZXRvb3RoIGNvZXhpc3RhbmNlICovCiAJc3RydWN0IGF0aF9idGNvZXhfaHcgYnRjb2V4X2h3OworCXUzMiBidF9jb2V4X2J0X3dlaWdodFtBUjkzMDBfTlVNX0JUX1dFSUdIVFNdOworCXUzMiBidF9jb2V4X3dsYW5fd2VpZ2h0W0FSOTMwMF9OVU1fV0xBTl9XRUlHSFRTXTsKIAogCXUzMiBpbnRyX3R4cXM7CiAJdTggdHhjaGFpbm1hc2s7CkBAIC03OTQsNyArNzk0LDkgQEAKIAl1MzIgb3JpZ2luYWxHYWluWzIyXTsKIAlpbnQgaW5pdFBEQURDOwogCWludCBQREFEQ2RlbHRhOwotCXU4IGxlZF9waW47CisJaW50IGxlZF9waW47CisJdTMyIGdwaW9fbWFzazsKKwl1MzIgZ3Bpb192YWw7CiAKIAlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pTW9kZXM7CiAJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaUNvbW1vbjsKQEAgLTgxMCw2ICs4MTIsNyBAQAogCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlQY2llU2VyZGVzOwogCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlQY2llU2VyZGVzTG93UG93ZXI7CiAJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaU1vZGVzQWRkaXRpb25hbDsKKwlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pTW9kZXNBZGRpdGlvbmFsXzQwTTsKIAlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pTW9kZXNSeEdhaW47CiAJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaU1vZGVzVHhHYWluOwogCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlNb2Rlc185MjcxXzFfMF9vbmx5OwpAQCAtODU2LDYgKzg1OSwxNiBAQAogCiAJLyogRW50ZXJwcmlzZSBtb2RlIGNhcCAqLwogCXUzMiBlbnRfbW9kZTsKKworCWJvb2wgaXNfY2xrXzI1bWh6OworfTsKKworc3RydWN0IGF0aF9idXNfb3BzIHsKKwllbnVtIGF0aF9idXNfdHlwZSBhdGhfYnVzX3R5cGU7CisJdm9pZCAoKnJlYWRfY2FjaGVzaXplKShzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLCBpbnQgKmNzeik7CisJYm9vbCAoKmVlcHJvbV9yZWFkKShzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLCB1MzIgb2ZmLCB1MTYgKmRhdGEpOworCXZvaWQgKCpidF9jb2V4X3ByZXApKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24pOworCXZvaWQgKCpleHRuX3N5bmNoX2VuKShzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uKTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGF0aF9jb21tb24gKmF0aDlrX2h3X2NvbW1vbihzdHJ1Y3QgYXRoX2h3ICphaCkKQEAgLTkwMCwxNSArOTEzLDEyIEBACiB2b2lkIGF0aDlrX2h3X3NldF9ncGlvKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZ3BpbywgdTMyIHZhbCk7CiB1MzIgYXRoOWtfaHdfZ2V0ZGVmYW50ZW5uYShzdHJ1Y3QgYXRoX2h3ICphaCk7CiB2b2lkIGF0aDlrX2h3X3NldGFudGVubmEoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBhbnRlbm5hKTsKLXZvaWQgYXRoOWtfaHdfYW50ZGl2X2NvbWJfY29uZl9nZXQoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJICAgc3RydWN0IGF0aF9od19hbnRjb21iX2NvbmYgKmFudGNvbmYpOwotdm9pZCBhdGg5a19od19hbnRkaXZfY29tYl9jb25mX3NldChzdHJ1Y3QgYXRoX2h3ICphaCwKLQkJCQkgICBzdHJ1Y3QgYXRoX2h3X2FudGNvbWJfY29uZiAqYW50Y29uZik7CiAKIC8qIEdlbmVyYWwgT3BlcmF0aW9uICovCiBib29sIGF0aDlrX2h3X3dhaXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsLCB1MzIgdGltZW91dCk7Cit2b2lkIGF0aDlrX2h3X3dyaXRlX2FycmF5KHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgKmFycmF5LAorCQkJICBpbnQgY29sdW1uLCB1bnNpZ25lZCBpbnQgKndyaXRlY250KTsKIHUzMiBhdGg5a19od19yZXZlcnNlX2JpdHModTMyIHZhbCwgdTMyIG4pOwotYm9vbCBhdGg5a19nZXRfY2hhbm5lbF9lZGdlcyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGZsYWdzLCB1MTYgKmxvdywgdTE2ICpoaWdoKTsKIHUxNiBhdGg5a19od19jb21wdXRldHh0aW1lKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJICAgdTggcGh5LCBpbnQga2JwcywKIAkJCSAgIHUzMiBmcmFtZUxlbiwgdTE2IHJhdGVpeCwgYm9vbCBzaG9ydFByZWFtYmxlKTsKQEAgLTkyNCwxMiArOTM0LDEzIEBACiB2b2lkIGF0aDlrX2h3X3NldG1jYXN0ZmlsdGVyKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZmlsdGVyMCwgdTMyIGZpbHRlcjEpOwogdm9pZCBhdGg5a19od19zZXRic3NpZG1hc2soc3RydWN0IGF0aF9odyAqYWgpOwogdm9pZCBhdGg5a19od193cml0ZV9hc3NvY2lkKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3UzMiBhdGg5a19od19nZXR0c2YzMihzdHJ1Y3QgYXRoX2h3ICphaCk7CiB1NjQgYXRoOWtfaHdfZ2V0dHNmNjQoc3RydWN0IGF0aF9odyAqYWgpOwogdm9pZCBhdGg5a19od19zZXR0c2Y2NChzdHJ1Y3QgYXRoX2h3ICphaCwgdTY0IHRzZjY0KTsKIHZvaWQgYXRoOWtfaHdfcmVzZXRfdHNmKHN0cnVjdCBhdGhfaHcgKmFoKTsKIHZvaWQgYXRoOWtfaHdfc2V0X3RzZmFkanVzdChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHNldHRpbmcpOwogdm9pZCBhdGg5a19od19pbml0X2dsb2JhbF9zZXR0aW5ncyhzdHJ1Y3QgYXRoX2h3ICphaCk7Ci11bnNpZ25lZCBsb25nIGFyOTAwM19nZXRfcGxsX3Nxc3VtX2R2YyhzdHJ1Y3QgYXRoX2h3ICphaCk7Cit1MzIgYXI5MDAzX2dldF9wbGxfc3FzdW1fZHZjKHN0cnVjdCBhdGhfaHcgKmFoKTsKIHZvaWQgYXRoOWtfaHdfc2V0MTFubWFjMjA0MChzdHJ1Y3QgYXRoX2h3ICphaCk7CiB2b2lkIGF0aDlrX2h3X2JlYWNvbmluaXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBuZXh0X2JlYWNvbiwgdTMyIGJlYWNvbl9wZXJpb2QpOwogdm9pZCBhdGg5a19od19zZXRfc3RhX2JlYWNvbl90aW1lcnMoc3RydWN0IGF0aF9odyAqYWgsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaW5pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2luaXQuYwppbmRleCA3OWFlYzk4Li5iMTcyZDE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaW5pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9pbml0LmMKQEAgLTE1LDYgKzE1LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2F0aDlrX3BsYXRmb3JtLmg+CiAKICNpbmNsdWRlICJhdGg5ay5oIgogCkBAIC0xOTUsMTAgKzE5NiwyNyBAQAogCXJldHVybiB2YWw7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoX29wcyBhdGg5a19jb21tb25fb3BzID0gewotCS5yZWFkID0gYXRoOWtfaW9yZWFkMzIsCi0JLndyaXRlID0gYXRoOWtfaW93cml0ZTMyLAotfTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXRoOWtfcmVnX3Jtdyh2b2lkICpod19wcml2LCB1MzIgcmVnX29mZnNldCwgdTMyIHNldCwgdTMyIGNscikKK3sKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IChzdHJ1Y3QgYXRoX2h3ICopIGh3X3ByaXY7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAqKSBjb21tb24tPnByaXY7CisJdW5zaWduZWQgbG9uZyB1bmluaXRpYWxpemVkX3ZhcihmbGFncyk7CisJdTMyIHZhbDsKKworCWlmIChhaC0+Y29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlID09IFNFUl9SRUdfTU9ERV9PTikKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5zY19zZXJpYWxfcncsIGZsYWdzKTsKKworCXZhbCA9IGlvcmVhZDMyKHNjLT5tZW0gKyByZWdfb2Zmc2V0KTsKKwl2YWwgJj0gfmNscjsKKwl2YWwgfD0gc2V0OworCWlvd3JpdGUzMih2YWwsIHNjLT5tZW0gKyByZWdfb2Zmc2V0KTsKKworCWlmIChhaC0+Y29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlID09IFNFUl9SRUdfTU9ERV9PTikKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPnNjX3NlcmlhbF9ydywgZmxhZ3MpOworCisJcmV0dXJuIHZhbDsKK30KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgIEluaXRpYWxpemF0aW9uICAgICAqLwpAQCAtMzg5LDEzICs0MDcsNyBAQAogCWludCBpID0gMDsKIAogCS8qIEdldCB0aGUgaGFyZHdhcmUga2V5IGNhY2hlIHNpemUuICovCi0JY29tbW9uLT5rZXltYXggPSBzYy0+c2NfYWgtPmNhcHMua2V5Y2FjaGVfc2l6ZTsKLQlpZiAoY29tbW9uLT5rZXltYXggPiBBVEhfS0VZTUFYKSB7Ci0JCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0FOWSwKLQkJCSJXYXJuaW5nLCB1c2luZyBvbmx5ICV1IGVudHJpZXMgaW4gJXUga2V5IGNhY2hlXG4iLAotCQkJQVRIX0tFWU1BWCwgY29tbW9uLT5rZXltYXgpOwotCQljb21tb24tPmtleW1heCA9IEFUSF9LRVlNQVg7Ci0JfQorCWNvbW1vbi0+a2V5bWF4ID0gQVJfS0VZVEFCTEVfU0laRTsKIAogCS8qCiAJICogUmVzZXQgdGhlIGtleSBjYWNoZSBzaW5jZSBzb21lIHBhcnRzIGRvIG5vdApAQCAtNTM3LDYgKzU0OSw3IEBACiBzdGF0aWMgaW50IGF0aDlrX2luaXRfc29mdGModTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYywgdTE2IHN1YnN5c2lkLAogCQkJICAgIGNvbnN0IHN0cnVjdCBhdGhfYnVzX29wcyAqYnVzX29wcykKIHsKKwlzdHJ1Y3QgYXRoOWtfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBzYy0+ZGV2LT5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBhdGhfaHcgKmFoID0gTlVMTDsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uOwogCWludCByZXQgPSAwLCBpOwpAQCAtNTQ5LDEzICs1NjIsMjMgQEAKIAlhaC0+aHcgPSBzYy0+aHc7CiAJYWgtPmh3X3ZlcnNpb24uZGV2aWQgPSBkZXZpZDsKIAlhaC0+aHdfdmVyc2lvbi5zdWJzeXNpZCA9IHN1YnN5c2lkOworCWFoLT5yZWdfb3BzLnJlYWQgPSBhdGg5a19pb3JlYWQzMjsKKwlhaC0+cmVnX29wcy53cml0ZSA9IGF0aDlrX2lvd3JpdGUzMjsKKwlhaC0+cmVnX29wcy5ybXcgPSBhdGg5a19yZWdfcm13OwogCXNjLT5zY19haCA9IGFoOwogCi0JaWYgKCFzYy0+ZGV2LT5wbGF0Zm9ybV9kYXRhKQorCWlmICghcGRhdGEpIHsKIAkJYWgtPmFoX2ZsYWdzIHw9IEFIX1VTRV9FRVBST007CisJCXNjLT5zY19haC0+bGVkX3BpbiA9IC0xOworCX0gZWxzZSB7CisJCXNjLT5zY19haC0+Z3Bpb19tYXNrID0gcGRhdGEtPmdwaW9fbWFzazsKKwkJc2MtPnNjX2FoLT5ncGlvX3ZhbCA9IHBkYXRhLT5ncGlvX3ZhbDsKKwkJc2MtPnNjX2FoLT5sZWRfcGluID0gcGRhdGEtPmxlZF9waW47CisJCWFoLT5pc19jbGtfMjVtaHogPSBwZGF0YS0+aXNfY2xrXzI1bWh6OworCX0KIAogCWNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7Ci0JY29tbW9uLT5vcHMgPSAmYXRoOWtfY29tbW9uX29wczsKKwljb21tb24tPm9wcyA9ICZhaC0+cmVnX29wczsKIAljb21tb24tPmJ1c19vcHMgPSBidXNfb3BzOwogCWNvbW1vbi0+YWggPSBhaDsKIAljb21tb24tPmh3ID0gc2MtPmh3OwpAQCAtNTg3LDYgKzYxMCw5IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJfaHc7CiAKKwlpZiAocGRhdGEgJiYgcGRhdGEtPm1hY2FkZHIpCisJCW1lbWNweShjb21tb24tPm1hY2FkZHIsIHBkYXRhLT5tYWNhZGRyLCBFVEhfQUxFTik7CisKIAlyZXQgPSBhdGg5a19pbml0X3F1ZXVlcyhzYyk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfcXVldWVzOwpAQCAtNjc5LDYgKzcwNSw4IEBACiAJaWYgKEFSX1NSRVZfNTQxNihzYy0+c2NfYWgpKQogCQlody0+d2lwaHktPmZsYWdzICY9IH5XSVBIWV9GTEFHX1BTX09OX0JZX0RFRkFVTFQ7CiAKKwlody0+d2lwaHktPmZsYWdzIHw9IFdJUEhZX0ZMQUdfSUJTU19SU047CisKIAlody0+cXVldWVzID0gNDsKIAlody0+bWF4X3JhdGVzID0gNDsKIAlody0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDUwMDA7CkBAIC03NzMsNiArODAxLDcgQEAKIAogCUlOSVRfV09SSygmc2MtPmh3X2NoZWNrX3dvcmssIGF0aF9od19jaGVjayk7CiAJSU5JVF9XT1JLKCZzYy0+cGFwcmRfd29yaywgYXRoX3BhcHJkX2NhbGlicmF0ZSk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnNjLT5od19wbGxfd29yaywgYXRoX2h3X3BsbF93b3JrKTsKIAlzYy0+bGFzdF9yc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOwogCiAJYXRoX2luaXRfbGVkcyhzYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmMKaW5kZXggZWRjMWNiYi4uYmQ2ZDJiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuYwpAQCAtMjA5LDE1ICsyMDksOCBAQAogewogCXUzMiBjdzsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKLQlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOwogCXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaTsKIAotCWlmIChxID49IHBDYXAtPnRvdGFsX3F1ZXVlcykgewotCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19RVUVVRSwKLQkJCSJTZXQgVFhRIHByb3BlcnRpZXMsIGludmFsaWQgcXVldWU6ICV1XG4iLCBxKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQogCXFpID0gJmFoLT50eHFbcV07CiAJaWYgKHFpLT50cWlfdHlwZSA9PSBBVEg5S19UWF9RVUVVRV9JTkFDVElWRSkgewogCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19RVUVVRSwKQEAgLTI4MCwxNSArMjczLDggQEAKIAkJCSAgICBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWluZm8pCiB7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7Ci0Jc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+Y2FwczsKIAlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWk7CiAKLQlpZiAocSA+PSBwQ2FwLT50b3RhbF9xdWV1ZXMpIHsKLQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfUVVFVUUsCi0JCQkiR2V0IFRYUSBwcm9wZXJ0aWVzLCBpbnZhbGlkIHF1ZXVlOiAldVxuIiwgcSk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KIAlxaSA9ICZhaC0+dHhxW3FdOwogCWlmIChxaS0+dHFpX3R5cGUgPT0gQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkUpIHsKIAkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfUVVFVUUsCkBAIC0zMjAsMjggKzMwNiwyNyBAQAogewogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaTsKLQlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOwogCWludCBxOwogCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBBVEg5S19UWF9RVUVVRV9CRUFDT046Ci0JCXEgPSBwQ2FwLT50b3RhbF9xdWV1ZXMgLSAxOworCQlxID0gQVRIOUtfTlVNX1RYX1FVRVVFUyAtIDE7CiAJCWJyZWFrOwogCWNhc2UgQVRIOUtfVFhfUVVFVUVfQ0FCOgotCQlxID0gcENhcC0+dG90YWxfcXVldWVzIC0gMjsKKwkJcSA9IEFUSDlLX05VTV9UWF9RVUVVRVMgLSAyOwogCQlicmVhazsKIAljYXNlIEFUSDlLX1RYX1FVRVVFX1BTUE9MTDoKIAkJcSA9IDE7CiAJCWJyZWFrOwogCWNhc2UgQVRIOUtfVFhfUVVFVUVfVUFQU0Q6Ci0JCXEgPSBwQ2FwLT50b3RhbF9xdWV1ZXMgLSAzOworCQlxID0gQVRIOUtfTlVNX1RYX1FVRVVFUyAtIDM7CiAJCWJyZWFrOwogCWNhc2UgQVRIOUtfVFhfUVVFVUVfREFUQToKLQkJZm9yIChxID0gMDsgcSA8IHBDYXAtPnRvdGFsX3F1ZXVlczsgcSsrKQorCQlmb3IgKHEgPSAwOyBxIDwgQVRIOUtfTlVNX1RYX1FVRVVFUzsgcSsrKQogCQkJaWYgKGFoLT50eHFbcV0udHFpX3R5cGUgPT0KIAkJCSAgICBBVEg5S19UWF9RVUVVRV9JTkFDVElWRSkKIAkJCQlicmVhazsKLQkJaWYgKHEgPT0gcENhcC0+dG90YWxfcXVldWVzKSB7CisJCWlmIChxID09IEFUSDlLX05VTV9UWF9RVUVVRVMpIHsKIAkJCWF0aF9lcnIoY29tbW9uLCAiTm8gYXZhaWxhYmxlIFRYIHF1ZXVlXG4iKTsKIAkJCXJldHVybiAtMTsKIAkJfQpAQCAtMzgyLDE1ICszNjcsOSBAQAogCiBib29sIGF0aDlrX2h3X3JlbGVhc2V0eHF1ZXVlKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSkKIHsKLQlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaTsKIAotCWlmIChxID49IHBDYXAtPnRvdGFsX3F1ZXVlcykgewotCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19RVUVVRSwKLQkJCSJSZWxlYXNlIFRYUSwgaW52YWxpZCBxdWV1ZTogJXVcbiIsIHEpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQogCXFpID0gJmFoLT50eHFbcV07CiAJaWYgKHFpLT50cWlfdHlwZSA9PSBBVEg5S19UWF9RVUVVRV9JTkFDVElWRSkgewogCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19RVUVVRSwKQEAgLTQxNCwxOCArMzkzLDExIEBACiAKIGJvb2wgYXRoOWtfaHdfcmVzZXR0eHF1ZXVlKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSkKIHsKLQlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuID0gYWgtPmN1cmNoYW47CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpOwogCXUzMiBjd01pbiwgY2hhbkN3TWluLCB2YWx1ZTsKIAotCWlmIChxID49IHBDYXAtPnRvdGFsX3F1ZXVlcykgewotCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19RVUVVRSwKLQkJCSJSZXNldCBUWFEsIGludmFsaWQgcXVldWU6ICV1XG4iLCBxKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQogCXFpID0gJmFoLT50eHFbcV07CiAJaWYgKHFpLT50cWlfdHlwZSA9PSBBVEg5S19UWF9RVUVVRV9JTkFDVElWRSkgewogCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19RVUVVRSwKQEAgLTQ1OCwxNyArNDMwLDIxIEBACiAJCSAgU00ocWktPnRxaV9zaHJldHJ5LCBBUl9EX1JFVFJZX0xJTUlUX0ZSX1NIKSk7CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1FNSVNDKHEpLCBBUl9RX01JU0NfRENVX0VBUkxZX1RFUk1fUkVRKTsKLQlSRUdfV1JJVEUoYWgsIEFSX0RNSVNDKHEpLAotCQkgIEFSX0RfTUlTQ19DV19CS09GRl9FTiB8IEFSX0RfTUlTQ19GUkFHX1dBSVRfRU4gfCAweDIpOworCisJaWYgKEFSX1NSRVZfOTM0MChhaCkpCisJCVJFR19XUklURShhaCwgQVJfRE1JU0MocSksCisJCQkgIEFSX0RfTUlTQ19DV19CS09GRl9FTiB8IEFSX0RfTUlTQ19GUkFHX1dBSVRfRU4gfCAweDEpOworCWVsc2UKKwkJUkVHX1dSSVRFKGFoLCBBUl9ETUlTQyhxKSwKKwkJCSAgQVJfRF9NSVNDX0NXX0JLT0ZGX0VOIHwgQVJfRF9NSVNDX0ZSQUdfV0FJVF9FTiB8IDB4Mik7CiAKIAlpZiAocWktPnRxaV9jYnJQZXJpb2QpIHsKIAkJUkVHX1dSSVRFKGFoLCBBUl9RQ0JSQ0ZHKHEpLAogCQkJICBTTShxaS0+dHFpX2NiclBlcmlvZCwgQVJfUV9DQlJDRkdfSU5URVJWQUwpIHwKIAkJCSAgU00ocWktPnRxaV9jYnJPdmVyZmxvd0xpbWl0LCBBUl9RX0NCUkNGR19PVkZfVEhSRVNIKSk7Ci0JCVJFR19XUklURShhaCwgQVJfUU1JU0MocSksCi0JCQkgIFJFR19SRUFEKGFoLCBBUl9RTUlTQyhxKSkgfCBBUl9RX01JU0NfRlNQX0NCUiB8Ci0JCQkgIChxaS0+dHFpX2Nick92ZXJmbG93TGltaXQgPwotCQkJICAgQVJfUV9NSVNDX0NCUl9FWFBfQ05UUl9MSU1JVF9FTiA6IDApKTsKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX1FNSVNDKHEpLCBBUl9RX01JU0NfRlNQX0NCUiB8CisJCQkgICAgKHFpLT50cWlfY2JyT3ZlcmZsb3dMaW1pdCA/CisJCQkgICAgIEFSX1FfTUlTQ19DQlJfRVhQX0NOVFJfTElNSVRfRU4gOiAwKSk7CiAJfQogCWlmIChxaS0+dHFpX3JlYWR5VGltZSAmJiAocWktPnRxaV90eXBlICE9IEFUSDlLX1RYX1FVRVVFX0NBQikpIHsKIAkJUkVHX1dSSVRFKGFoLCBBUl9RUkRZVElNRUNGRyhxKSwKQEAgLTQ4MSw0MCArNDU3LDMxIEBACiAJCSAgKHFpLT50cWlfYnVyc3RUaW1lID8gQVJfRF9DSE5USU1FX0VOIDogMCkpOwogCiAJaWYgKHFpLT50cWlfYnVyc3RUaW1lCi0JICAgICYmIChxaS0+dHFpX3FmbGFncyAmIFRYUV9GTEFHX1JEWVRJTUVfRVhQX1BPTElDWV9FTkFCTEUpKSB7Ci0JCVJFR19XUklURShhaCwgQVJfUU1JU0MocSksCi0JCQkgIFJFR19SRUFEKGFoLCBBUl9RTUlTQyhxKSkgfAotCQkJICBBUl9RX01JU0NfUkRZVElNRV9FWFBfUE9MSUNZKTsKKwkgICAgJiYgKHFpLT50cWlfcWZsYWdzICYgVFhRX0ZMQUdfUkRZVElNRV9FWFBfUE9MSUNZX0VOQUJMRSkpCisJCVJFR19TRVRfQklUKGFoLCBBUl9RTUlTQyhxKSwgQVJfUV9NSVNDX1JEWVRJTUVfRVhQX1BPTElDWSk7CiAKLQl9Ci0KLQlpZiAocWktPnRxaV9xZmxhZ3MgJiBUWFFfRkxBR19CQUNLT0ZGX0RJU0FCTEUpIHsKLQkJUkVHX1dSSVRFKGFoLCBBUl9ETUlTQyhxKSwKLQkJCSAgUkVHX1JFQUQoYWgsIEFSX0RNSVNDKHEpKSB8Ci0JCQkgIEFSX0RfTUlTQ19QT1NUX0ZSX0JLT0ZGX0RJUyk7Ci0JfQorCWlmIChxaS0+dHFpX3FmbGFncyAmIFRYUV9GTEFHX0JBQ0tPRkZfRElTQUJMRSkKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX0RNSVNDKHEpLCBBUl9EX01JU0NfUE9TVF9GUl9CS09GRl9ESVMpOwogCiAJUkVHV1JJVEVfQlVGRkVSX0ZMVVNIKGFoKTsKIAotCWlmIChxaS0+dHFpX3FmbGFncyAmIFRYUV9GTEFHX0ZSQUdfQlVSU1RfQkFDS09GRl9FTkFCTEUpIHsKLQkJUkVHX1dSSVRFKGFoLCBBUl9ETUlTQyhxKSwKLQkJCSAgUkVHX1JFQUQoYWgsIEFSX0RNSVNDKHEpKSB8Ci0JCQkgIEFSX0RfTUlTQ19GUkFHX0JLT0ZGX0VOKTsKLQl9CisJaWYgKHFpLT50cWlfcWZsYWdzICYgVFhRX0ZMQUdfRlJBR19CVVJTVF9CQUNLT0ZGX0VOQUJMRSkKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX0RNSVNDKHEpLCBBUl9EX01JU0NfRlJBR19CS09GRl9FTik7CisKIAlzd2l0Y2ggKHFpLT50cWlfdHlwZSkgewogCWNhc2UgQVRIOUtfVFhfUVVFVUVfQkVBQ09OOgogCQlFTkFCTEVfUkVHV1JJVEVfQlVGRkVSKGFoKTsKIAotCQlSRUdfV1JJVEUoYWgsIEFSX1FNSVNDKHEpLCBSRUdfUkVBRChhaCwgQVJfUU1JU0MocSkpCi0JCQkgIHwgQVJfUV9NSVNDX0ZTUF9EQkFfR0FURUQKLQkJCSAgfCBBUl9RX01JU0NfQkVBQ09OX1VTRQotCQkJICB8IEFSX1FfTUlTQ19DQlJfSU5DUl9ESVMxKTsKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX1FNSVNDKHEpLAorCQkJICAgIEFSX1FfTUlTQ19GU1BfREJBX0dBVEVECisJCQkgICAgfCBBUl9RX01JU0NfQkVBQ09OX1VTRQorCQkJICAgIHwgQVJfUV9NSVNDX0NCUl9JTkNSX0RJUzEpOwogCi0JCVJFR19XUklURShhaCwgQVJfRE1JU0MocSksIFJFR19SRUFEKGFoLCBBUl9ETUlTQyhxKSkKLQkJCSAgfCAoQVJfRF9NSVNDX0FSQl9MT0NLT1VUX0NOVFJMX0dMT0JBTCA8PAorCQlSRUdfU0VUX0JJVChhaCwgQVJfRE1JU0MocSksCisJCQkgICAgKEFSX0RfTUlTQ19BUkJfTE9DS09VVF9DTlRSTF9HTE9CQUwgPDwKIAkJCSAgICAgQVJfRF9NSVNDX0FSQl9MT0NLT1VUX0NOVFJMX1MpCi0JCQkgIHwgQVJfRF9NSVNDX0JFQUNPTl9VU0UKLQkJCSAgfCBBUl9EX01JU0NfUE9TVF9GUl9CS09GRl9ESVMpOworCQkJICAgIHwgQVJfRF9NSVNDX0JFQUNPTl9VU0UKKwkJCSAgICB8IEFSX0RfTUlTQ19QT1NUX0ZSX0JLT0ZGX0RJUyk7CiAKIAkJUkVHV1JJVEVfQlVGRkVSX0ZMVVNIKGFoKTsKIApAQCAtNTMzLDQxICs1MDAsMzggQEAKIAljYXNlIEFUSDlLX1RYX1FVRVVFX0NBQjoKIAkJRU5BQkxFX1JFR1dSSVRFX0JVRkZFUihhaCk7CiAKLQkJUkVHX1dSSVRFKGFoLCBBUl9RTUlTQyhxKSwgUkVHX1JFQUQoYWgsIEFSX1FNSVNDKHEpKQotCQkJICB8IEFSX1FfTUlTQ19GU1BfREJBX0dBVEVECi0JCQkgIHwgQVJfUV9NSVNDX0NCUl9JTkNSX0RJUzEKLQkJCSAgfCBBUl9RX01JU0NfQ0JSX0lOQ1JfRElTMCk7CisJCVJFR19TRVRfQklUKGFoLCBBUl9RTUlTQyhxKSwKKwkJCSAgICBBUl9RX01JU0NfRlNQX0RCQV9HQVRFRAorCQkJICAgIHwgQVJfUV9NSVNDX0NCUl9JTkNSX0RJUzEKKwkJCSAgICB8IEFSX1FfTUlTQ19DQlJfSU5DUl9ESVMwKTsKIAkJdmFsdWUgPSAocWktPnRxaV9yZWFkeVRpbWUgLQogCQkJIChhaC0+Y29uZmlnLnN3X2JlYWNvbl9yZXNwb25zZV90aW1lIC0KIAkJCSAgYWgtPmNvbmZpZy5kbWFfYmVhY29uX3Jlc3BvbnNlX3RpbWUpIC0KIAkJCSBhaC0+Y29uZmlnLmFkZGl0aW9uYWxfc3diYV9iYWNrb2ZmKSAqIDEwMjQ7CiAJCVJFR19XUklURShhaCwgQVJfUVJEWVRJTUVDRkcocSksCiAJCQkgIHZhbHVlIHwgQVJfUV9SRFlUSU1FQ0ZHX0VOKTsKLQkJUkVHX1dSSVRFKGFoLCBBUl9ETUlTQyhxKSwgUkVHX1JFQUQoYWgsIEFSX0RNSVNDKHEpKQotCQkJICB8IChBUl9EX01JU0NfQVJCX0xPQ0tPVVRfQ05UUkxfR0xPQkFMIDw8CisJCVJFR19TRVRfQklUKGFoLCBBUl9ETUlTQyhxKSwKKwkJCSAgICAoQVJfRF9NSVNDX0FSQl9MT0NLT1VUX0NOVFJMX0dMT0JBTCA8PAogCQkJICAgICBBUl9EX01JU0NfQVJCX0xPQ0tPVVRfQ05UUkxfUykpOwogCiAJCVJFR1dSSVRFX0JVRkZFUl9GTFVTSChhaCk7CiAKIAkJYnJlYWs7CiAJY2FzZSBBVEg5S19UWF9RVUVVRV9QU1BPTEw6Ci0JCVJFR19XUklURShhaCwgQVJfUU1JU0MocSksCi0JCQkgIFJFR19SRUFEKGFoLCBBUl9RTUlTQyhxKSkgfCBBUl9RX01JU0NfQ0JSX0lOQ1JfRElTMSk7CisJCVJFR19TRVRfQklUKGFoLCBBUl9RTUlTQyhxKSwgQVJfUV9NSVNDX0NCUl9JTkNSX0RJUzEpOwogCQlicmVhazsKIAljYXNlIEFUSDlLX1RYX1FVRVVFX1VBUFNEOgotCQlSRUdfV1JJVEUoYWgsIEFSX0RNSVNDKHEpLCBSRUdfUkVBRChhaCwgQVJfRE1JU0MocSkpIHwKLQkJCSAgQVJfRF9NSVNDX1BPU1RfRlJfQktPRkZfRElTKTsKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX0RNSVNDKHEpLCBBUl9EX01JU0NfUE9TVF9GUl9CS09GRl9ESVMpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CiAKIAlpZiAocWktPnRxaV9pbnRGbGFncyAmIEFUSDlLX1RYUV9VU0VfTE9DS09VVF9CS09GRl9ESVMpIHsKLQkJUkVHX1dSSVRFKGFoLCBBUl9ETUlTQyhxKSwKLQkJCSAgUkVHX1JFQUQoYWgsIEFSX0RNSVNDKHEpKSB8Ci0JCQkgIFNNKEFSX0RfTUlTQ19BUkJfTE9DS09VVF9DTlRSTF9HTE9CQUwsCi0JCQkgICAgIEFSX0RfTUlTQ19BUkJfTE9DS09VVF9DTlRSTCkgfAotCQkJICBBUl9EX01JU0NfUE9TVF9GUl9CS09GRl9ESVMpOworCQlSRUdfU0VUX0JJVChhaCwgQVJfRE1JU0MocSksCisJCQkgICAgU00oQVJfRF9NSVNDX0FSQl9MT0NLT1VUX0NOVFJMX0dMT0JBTCwKKwkJCSAgICAgICBBUl9EX01JU0NfQVJCX0xPQ0tPVVRfQ05UUkwpIHwKKwkJCSAgICBBUl9EX01JU0NfUE9TVF9GUl9CS09GRl9ESVMpOwogCX0KIAogCWlmIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKQpAQCAtNzU0LDcgKzcxOCw2IEBACiBib29sIGF0aDlrX2h3X3N0b3BkbWFyZWN2KHN0cnVjdCBhdGhfaHcgKmFoLCBib29sICpyZXNldCkKIHsKICNkZWZpbmUgQUhfUlhfU1RPUF9ETUFfVElNRU9VVCAxMDAwMCAgIC8qIHVzZWMgKi8KLSNkZWZpbmUgQUhfUlhfVElNRV9RVUFOVFVNICAgICAxMDAgICAgIC8qIHVzZWMgKi8KIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKIAl1MzIgbWFjX3N0YXR1cywgbGFzdF9tYWNfc3RhdHVzID0gMDsKIAlpbnQgaTsKQEAgLTc5Nyw3ICs3NjAsNiBAQAogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKLSN1bmRlZiBBSF9SWF9USU1FX1FVQU5UVU0KICN1bmRlZiBBSF9SWF9TVE9QX0RNQV9USU1FT1VUCiB9CiBFWFBPUlRfU1lNQk9MKGF0aDlrX2h3X3N0b3BkbWFyZWN2KTsKQEAgLTg1NSwxMCArODE3LDE0IEBACiB2b2lkIGF0aDlrX2h3X2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOworCXUzMiBzeW5jX2RlZmF1bHQgPSBBUl9JTlRSX1NZTkNfREVGQVVMVDsKIAogCWlmICghKGFoLT5pbWFzayAmIEFUSDlLX0lOVF9HTE9CQUwpKQogCQlyZXR1cm47CiAKKwlpZiAoQVJfU1JFVl85MzQwKGFoKSkKKwkJc3luY19kZWZhdWx0ICY9IH5BUl9JTlRSX1NZTkNfSE9TVDFfRkFUQUw7CisKIAlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19JTlRFUlJVUFQsICJlbmFibGUgSUVSXG4iKTsKIAlSRUdfV1JJVEUoYWgsIEFSX0lFUiwgQVJfSUVSX0VOQUJMRSk7CiAJaWYgKCFBUl9TUkVWXzkxMDAoYWgpKSB7CkBAIC04NjcsMTAgKzgzMyw4IEBACiAJCVJFR19XUklURShhaCwgQVJfSU5UUl9BU1lOQ19NQVNLLCBBUl9JTlRSX01BQ19JUlEpOwogCiAKLQkJUkVHX1dSSVRFKGFoLCBBUl9JTlRSX1NZTkNfRU5BQkxFLAotCQkJICBBUl9JTlRSX1NZTkNfREVGQVVMVCk7Ci0JCVJFR19XUklURShhaCwgQVJfSU5UUl9TWU5DX01BU0ssCi0JCQkgIEFSX0lOVFJfU1lOQ19ERUZBVUxUKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9JTlRSX1NZTkNfRU5BQkxFLCBzeW5jX2RlZmF1bHQpOworCQlSRUdfV1JJVEUoYWgsIEFSX0lOVFJfU1lOQ19NQVNLLCBzeW5jX2RlZmF1bHQpOwogCX0KIAlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19JTlRFUlJVUFQsICJBUl9JTVIgMHgleCBJRVIgMHgleFxuIiwKIAkJUkVHX1JFQUQoYWgsIEFSX0lNUiksIFJFR19SRUFEKGFoLCBBUl9JRVIpKTsKQEAgLTkyNiw2ICs4OTAsOSBAQAogCQkJbWFzayB8PSBBUl9JTVJfR0VOVE1SOwogCX0KIAorCWlmIChpbnRzICYgQVRIOUtfSU5UX0dFTlRJTUVSKQorCQltYXNrIHw9IEFSX0lNUl9HRU5UTVI7CisKIAlpZiAoaW50cyAmIChBVEg5S19JTlRfQk1JU0MpKSB7CiAJCW1hc2sgfD0gQVJfSU1SX0JDTk1JU0M7CiAJCWlmIChpbnRzICYgQVRIOUtfSU5UX1RJTSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuaAppbmRleCBjMmE1OTM4Li5iNjBjMTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5oCkBAIC0yMzksNyArMjM5LDYgQEAKIAl2b2lkICpkc192ZGF0YTsKIH0gX19wYWNrZWQgX19hbGlnbmVkKDQpOwogCi0jZGVmaW5lIEFUSDlLX1RYREVTQ19DTFJETUFTSwkJMHgwMDAxCiAjZGVmaW5lIEFUSDlLX1RYREVTQ19OT0FDSwkJMHgwMDAyCiAjZGVmaW5lIEFUSDlLX1RYREVTQ19SVFNFTkEJCTB4MDAwNAogI2RlZmluZSBBVEg5S19UWERFU0NfQ1RTRU5BCQkweDAwMDgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCmluZGV4IDE3ZDA0ZmYuLjE3ZWJkZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYwpAQCAtMjk5LDcgKzI5OSw3IEBACiAKIAlpZiAoIShzYy0+c2NfZmxhZ3MgJiAoU0NfT1BfT0ZGQ0hBTk5FTCkpKSB7CiAJCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9CRUFDT05TKQotCQkJYXRoX2JlYWNvbl9jb25maWcoc2MsIE5VTEwpOworCQkJYXRoX3NldF9iZWFjb24oc2MpOwogCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHNjLT5odywgJnNjLT50eF9jb21wbGV0ZV93b3JrLCAwKTsKIAkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhzYy0+aHcsICZzYy0+aHdfcGxsX3dvcmssIEhaLzIpOwogCQlhdGhfc3RhcnRfYW5pKGNvbW1vbik7CkBAIC02MjQsNiArNjI0LDQzIEBACiAJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiB9CiAKK3N0YXRpYyB2b2lkIGF0aF9od19wbGxfcnhfaGFuZ19jaGVjayhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgdTMyIHBsbF9zcXN1bSkKK3sKKwlzdGF0aWMgaW50IGNvdW50OworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKKworCWlmIChwbGxfc3FzdW0gPj0gMHg0MDAwMCkgeworCQljb3VudCsrOworCQlpZiAoY291bnQgPT0gMykgeworCQkJLyogUnggaXMgaHVuZyBmb3IgbW9yZSB0aGFuIDUwMG1zLiBSZXNldCBpdCAqLworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfUkVTRVQsCisJCQkJIlBvc3NpYmxlIFJYIGhhbmcsIHJlc2V0dGluZyIpOworCQkJYXRoX3Jlc2V0KHNjLCB0cnVlKTsKKwkJCWNvdW50ID0gMDsKKwkJfQorCX0gZWxzZQorCQljb3VudCA9IDA7Cit9CisKK3ZvaWQgYXRoX2h3X3BsbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRoX3NvZnRjLAorCQkJCQkgICAgaHdfcGxsX3dvcmsud29yayk7CisJdTMyIHBsbF9zcXN1bTsKKworCWlmIChBUl9TUkVWXzk0ODUoc2MtPnNjX2FoKSkgeworCisJCWF0aDlrX3BzX3dha2V1cChzYyk7CisJCXBsbF9zcXN1bSA9IGFyOTAwM19nZXRfcGxsX3Nxc3VtX2R2YyhzYy0+c2NfYWgpOworCQlhdGg5a19wc19yZXN0b3JlKHNjKTsKKworCQlhdGhfaHdfcGxsX3J4X2hhbmdfY2hlY2soc2MsIHBsbF9zcXN1bSk7CisKKwkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhzYy0+aHcsICZzYy0+aHdfcGxsX3dvcmssIEhaLzUpOworCX0KK30KKworCiB2b2lkIGF0aDlrX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKilkYXRhOwpAQCAtNjUyLDYgKzY4OSwxNyBAQAogCSAgICAhYXRoOWtfaHdfY2hlY2tfYWxpdmUoYWgpKQogCQlpZWVlODAyMTFfcXVldWVfd29yayhzYy0+aHcsICZzYy0+aHdfY2hlY2tfd29yayk7CiAKKwlpZiAoKHN0YXR1cyAmIEFUSDlLX0lOVF9UU0ZPT1IpICYmIHNjLT5wc19lbmFibGVkKSB7CisJCS8qCisJCSAqIFRTRiBzeW5jIGRvZXMgbm90IGxvb2sgY29ycmVjdDsgcmVtYWluIGF3YWtlIHRvIHN5bmMgd2l0aAorCQkgKiB0aGUgbmV4dCBCZWFjb24uCisJCSAqLworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19QUywKKwkJCSJUU0ZPT1IgLSBTeW5jIHdpdGggbmV4dCBCZWFjb25cbiIpOworCQlzYy0+cHNfZmxhZ3MgfD0gUFNfV0FJVF9GT1JfQkVBQ09OIHwgUFNfQkVBQ09OX1NZTkMgfAorCQkJCVBTX1RTRk9PUl9TWU5DOworCX0KKwogCWlmIChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0VETUEpCiAJCXJ4bWFzayA9IChBVEg5S19JTlRfUlhIUCB8IEFUSDlLX0lOVF9SWExQIHwgQVRIOUtfSU5UX1JYRU9MIHwKIAkJCSAgQVRIOUtfSU5UX1JYT1JOKTsKQEAgLTY3NCwxNiArNzIyLDYgQEAKIAkJCWF0aF90eF90YXNrbGV0KHNjKTsKIAl9CiAKLQlpZiAoKHN0YXR1cyAmIEFUSDlLX0lOVF9UU0ZPT1IpICYmIHNjLT5wc19lbmFibGVkKSB7Ci0JCS8qCi0JCSAqIFRTRiBzeW5jIGRvZXMgbm90IGxvb2sgY29ycmVjdDsgcmVtYWluIGF3YWtlIHRvIHN5bmMgd2l0aAotCQkgKiB0aGUgbmV4dCBCZWFjb24uCi0JCSAqLwotCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19QUywKLQkJCSJUU0ZPT1IgLSBTeW5jIHdpdGggbmV4dCBCZWFjb25cbiIpOwotCQlzYy0+cHNfZmxhZ3MgfD0gUFNfV0FJVF9GT1JfQkVBQ09OIHwgUFNfQkVBQ09OX1NZTkM7Ci0JfQotCiAJaWYgKGFoLT5idGNvZXhfaHcuc2NoZW1lID09IEFUSF9CVENPRVhfQ0ZHXzNXSVJFKQogCQlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX0dFTlRJTUVSKQogCQkJYXRoX2dlbl90aW1lcl9pc3Ioc2MtPnNjX2FoKTsKQEAgLTgyOCw0OCArODY2LDYgQEAKICN1bmRlZiBTQ0hFRF9JTlRSCiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2Jzc19hc3NvY19pbmZvKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYpCi17Ci0Jc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7Ci0Jc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7Ci0KLQlpZiAoYnNzX2NvbmYtPmFzc29jKSB7Ci0JCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKLQkJCSJCc3MgSW5mbyBBU1NPQyAlZCwgYnNzaWQ6ICVwTVxuIiwKLQkJCWJzc19jb25mLT5haWQsIGNvbW1vbi0+Y3VyYnNzaWQpOwotCi0JCS8qIE5ldyBhc3NvY2lhdGlvbiwgc3RvcmUgYWlkICovCi0JCWNvbW1vbi0+Y3VyYWlkID0gYnNzX2NvbmYtPmFpZDsKLQkJYXRoOWtfaHdfd3JpdGVfYXNzb2NpZChhaCk7Ci0KLQkJLyoKLQkJICogUmVxdWVzdCBhIHJlLWNvbmZpZ3VyYXRpb24gb2YgQmVhY29uIHJlbGF0ZWQgdGltZXJzCi0JCSAqIG9uIHRoZSByZWNlaXB0IG9mIHRoZSBmaXJzdCBCZWFjb24gZnJhbWUgKGkuZS4sCi0JCSAqIGFmdGVyIHRpbWUgc3luYyB3aXRoIHRoZSBBUCkuCi0JCSAqLwotCQlzYy0+cHNfZmxhZ3MgfD0gUFNfQkVBQ09OX1NZTkM7Ci0KLQkJLyogQ29uZmlndXJlIHRoZSBiZWFjb24gKi8KLQkJYXRoX2JlYWNvbl9jb25maWcoc2MsIHZpZik7Ci0KLQkJLyogUmVzZXQgcnNzaSBzdGF0cyAqLwotCQlzYy0+bGFzdF9yc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOwotCQlzYy0+c2NfYWgtPnN0YXRzLmF2Z2Jyc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOwotCi0JCXNjLT5zY19mbGFncyB8PSBTQ19PUF9BTklfUlVOOwotCQlhdGhfc3RhcnRfYW5pKGNvbW1vbik7Ci0JfSBlbHNlIHsKLQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLCAiQnNzIEluZm8gRElTQVNTT0NcbiIpOwotCQljb21tb24tPmN1cmFpZCA9IDA7Ci0JCS8qIFN0b3AgQU5JICovCi0JCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfQU5JX1JVTjsKLQkJZGVsX3RpbWVyX3N5bmMoJmNvbW1vbi0+YW5pLnRpbWVyKTsKLQl9Ci19Ci0KIHZvaWQgYXRoX3JhZGlvX2VuYWJsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CkBAIC04OTksNyArODk1LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9CRUFDT05TKQotCQlhdGhfYmVhY29uX2NvbmZpZyhzYywgTlVMTCk7CS8qIHJlc3RhcnQgYmVhY29ucyAqLworCQlhdGhfc2V0X2JlYWNvbihzYyk7CS8qIHJlc3RhcnQgYmVhY29ucyAqLwogCiAJLyogUmUtRW5hYmxlICBpbnRlcnJ1cHRzICovCiAJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIGFoLT5pbWFzayk7CkBAIC0xMDA2LDcgKzEwMDIsNyBAQAogCQkJICAgICAgIHNjLT5jb25maWcudHhwb3dsaW1pdCwgJnNjLT5jdXJ0eHBvdyk7CiAKIAlpZiAoKHNjLT5zY19mbGFncyAmIFNDX09QX0JFQUNPTlMpIHx8ICEoc2MtPnNjX2ZsYWdzICYgKFNDX09QX09GRkNIQU5ORUwpKSkKLQkJYXRoX2JlYWNvbl9jb25maWcoc2MsIE5VTEwpOwkvKiByZXN0YXJ0IGJlYWNvbnMgKi8KKwkJYXRoX3NldF9iZWFjb24oc2MpOwkvKiByZXN0YXJ0IGJlYWNvbnMgKi8KIAogCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBhaC0+aW1hc2spOwogCkBAIC0xMzg5LDcgKzEzODUsOSBAQAogCQlhdGg5a19od19zZXRfdHNmYWRqdXN0KGFoLCAwKTsKIAkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9UU0ZfUkVTRVQ7CiAKLQkJaWYgKGl0ZXJfZGF0YS5ud2RzICsgaXRlcl9kYXRhLm5tZXNoZXMpCisJCWlmIChpdGVyX2RhdGEubm1lc2hlcykKKwkJCWFoLT5vcG1vZGUgPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOworCQllbHNlIGlmIChpdGVyX2RhdGEubndkcykKIAkJCWFoLT5vcG1vZGUgPSBOTDgwMjExX0lGVFlQRV9BUDsKIAkJZWxzZSBpZiAoaXRlcl9kYXRhLm5hZGhvY3MpCiAJCQlhaC0+b3Btb2RlID0gTkw4MDIxMV9JRlRZUEVfQURIT0M7CkBAIC0xNDEzLDYgKzE0MTEsNyBAQAogCiAJLyogU2V0IHVwIEFOSSAqLwogCWlmICgoaXRlcl9kYXRhLm5hcHMgKyBpdGVyX2RhdGEubmFkaG9jcykgPiAwKSB7CisJCXNjLT5zY19haC0+c3RhdHMuYXZnYnJzc2kgPSBBVEhfUlNTSV9EVU1NWV9NQVJLRVI7CiAJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9BTklfUlVOOwogCQlhdGhfc3RhcnRfYW5pKGNvbW1vbik7CiAJfSBlbHNlIHsKQEAgLTE0NTIsNyArMTQ1MSw2IEBACiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKLQlzdHJ1Y3QgYXRoX3ZpZiAqYXZwID0gKHZvaWQgKil2aWYtPmRydl9wcml2OwogCWludCByZXQgPSAwOwogCiAJYXRoOWtfcHNfd2FrZXVwKHNjKTsKQEAgLTE0ODIsOCArMTQ4MCw5IEBACiAJCX0KIAl9CiAKLQlpZiAoKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgJiYKLQkgICAgc2MtPm52aWZzID4gMCkgeworCWlmICgoYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgfHwKKwkgICAgKCh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpICYmCisJICAgICBzYy0+bnZpZnMgPiAwKSkgewogCQlhdGhfZXJyKGNvbW1vbiwgIkNhbm5vdCBjcmVhdGUgQURIT0MgaW50ZXJmYWNlIHdoZW4gb3RoZXIiCiAJCQkiIGludGVyZmFjZXMgYWxyZWFkeSBleGlzdC5cbiIpOwogCQlyZXQgPSAtRUlOVkFMOwpAQCAtMTQ5MywxMCArMTQ5Miw2IEBACiAJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLAogCQkiQXR0YWNoIGEgVklGIG9mIHR5cGU6ICVkXG4iLCB2aWYtPnR5cGUpOwogCi0JLyogU2V0IHRoZSBWSUYgb3Btb2RlICovCi0JYXZwLT5hdl9vcG1vZGUgPSB2aWYtPnR5cGU7Ci0JYXZwLT5hdl9ic2xvdCA9IC0xOwotCiAJc2MtPm52aWZzKys7CiAKIAlhdGg5a19kb192aWZfYWRkX3NldHVwKGh3LCB2aWYpOwpAQCAtMTc4MiwyMyArMTc3Nyw2OCBAQAogCQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCiB7CiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCk7CisJc3RydWN0IGF0aF9ub2RlICphbiA9IChzdHJ1Y3QgYXRoX25vZGUgKikgc3RhLT5kcnZfcHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mIHBzX2tleSA9IHsgfTsKIAogCWF0aF9ub2RlX2F0dGFjaChzYywgc3RhKTsKIAorCWlmICh2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVAgJiYKKwkgICAgdmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCisJCXJldHVybiAwOworCisJYW4tPnBzX2tleSA9IGF0aF9rZXlfY29uZmlnKGNvbW1vbiwgdmlmLCBzdGEsICZwc19rZXkpOworCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGF0aDlrX2RlbF9wc19rZXkoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCit7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpOworCXN0cnVjdCBhdGhfbm9kZSAqYW4gPSAoc3RydWN0IGF0aF9ub2RlICopIHN0YS0+ZHJ2X3ByaXY7CisJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiBwc19rZXkgPSB7IC5od19rZXlfaWR4ID0gYW4tPnBzX2tleSB9OworCisJaWYgKCFhbi0+cHNfa2V5KQorCSAgICByZXR1cm47CisKKwlhdGhfa2V5X2RlbGV0ZShjb21tb24sICZwc19rZXkpOworfQorCiBzdGF0aWMgaW50IGF0aDlrX3N0YV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQogewogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7CiAKKwlhdGg5a19kZWxfcHNfa2V5KHNjLCB2aWYsIHN0YSk7CiAJYXRoX25vZGVfZGV0YWNoKHNjLCBzdGEpOwogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGF0aDlrX3N0YV9ub3RpZnkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSBlbnVtIHN0YV9ub3RpZnlfY21kIGNtZCwKKwkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9ub2RlICphbiA9IChzdHJ1Y3QgYXRoX25vZGUgKikgc3RhLT5kcnZfcHJpdjsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTVEFfTk9USUZZX1NMRUVQOgorCQlhbi0+c2xlZXBpbmcgPSB0cnVlOworCQlpZiAoYXRoX3R4X2FnZ3Jfc2xlZXAoc2MsIGFuKSkKKwkJCWllZWU4MDIxMV9zdGFfc2V0X3RpbShzdGEpOworCQlicmVhazsKKwljYXNlIFNUQV9OT1RJRllfQVdBS0U6CisJCWFuLT5zbGVlcGluZyA9IGZhbHNlOworCQlhdGhfdHhfYWdncl93YWtldXAoc2MsIGFuKTsKKwkJYnJlYWs7CisJfQorfQorCiBzdGF0aWMgaW50IGF0aDlrX2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBxdWV1ZSwKIAkJCSBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKQogewpAQCAtMTg1NSwxMiArMTg5NSwyOSBAQAogCWlmIChhdGg5a19tb2RwYXJhbV9ub2h3Y3J5cHQpCiAJCXJldHVybiAtRU5PU1BDOwogCisJaWYgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgorCSAgICAoa2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCB8fAorCSAgICAga2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUCkgJiYKKwkgICAgIShrZXktPmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKSkgeworCQkvKgorCQkgKiBGb3Igbm93LCBkaXNhYmxlIGh3IGNyeXB0byBmb3IgdGhlIFJTTiBJQlNTIGdyb3VwIGtleXMuIFRoaXMKKwkJICogY291bGQgYmUgb3B0aW1pemVkIGluIHRoZSBmdXR1cmUgdG8gdXNlIGEgbW9kaWZpZWQga2V5IGNhY2hlCisJCSAqIGRlc2lnbiB0byBzdXBwb3J0IHBlci1TVEEgUlggR1RLLCBidXQgdW50aWwgdGhhdCBnZXRzCisJCSAqIGltcGxlbWVudGVkLCB1c2Ugb2Ygc29mdHdhcmUgY3J5cHRvIGZvciBncm91cCBhZGRyZXNzZWQKKwkJICogZnJhbWVzIGlzIGEgYWNjZXB0YWJsZSB0byBhbGxvdyBSU04gSUJTUyB0byBiZSB1c2VkLgorCQkgKi8KKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKwogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CiAJYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICJTZXQgSFcgS2V5XG4iKTsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTRVRfS0VZOgorCQlpZiAoc3RhKQorCQkJYXRoOWtfZGVsX3BzX2tleShzYywgdmlmLCBzdGEpOworCiAJCXJldCA9IGF0aF9rZXlfY29uZmlnKGNvbW1vbiwgdmlmLCBzdGEsIGtleSk7CiAJCWlmIChyZXQgPj0gMCkgewogCQkJa2V5LT5od19rZXlfaWR4ID0gcmV0OwpAQCAtMTg4Niw2ICsxOTQzLDkyIEBACiAKIAlyZXR1cm4gcmV0OwogfQorc3RhdGljIHZvaWQgYXRoOWtfYnNzX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGRhdGE7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpOworCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mID0gJnZpZi0+YnNzX2NvbmY7CisJc3RydWN0IGF0aF92aWYgKmF2cCA9ICh2b2lkICopdmlmLT5kcnZfcHJpdjsKKworCXN3aXRjaCAoc2MtPnNjX2FoLT5vcG1vZGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQkvKiBUaGVyZSBjYW4gYmUgb25seSBvbmUgdmlmIGF2YWlsYWJsZSAqLworCQltZW1jcHkoY29tbW9uLT5jdXJic3NpZCwgYnNzX2NvbmYtPmJzc2lkLCBFVEhfQUxFTik7CisJCWNvbW1vbi0+Y3VyYWlkID0gYnNzX2NvbmYtPmFpZDsKKwkJYXRoOWtfaHdfd3JpdGVfYXNzb2NpZChzYy0+c2NfYWgpOworCQkvKiBjb25maWd1cmUgYmVhY29uICovCisJCWlmIChic3NfY29uZi0+ZW5hYmxlX2JlYWNvbikKKwkJCWF0aF9iZWFjb25fY29uZmlnKHNjLCB2aWYpOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCS8qCisJCSAqIFNraXAgaXRlcmF0aW9uIGlmIHByaW1hcnkgc3RhdGlvbiB2aWYncyBic3MgaW5mbworCQkgKiB3YXMgbm90IGNoYW5nZWQKKwkJICovCisJCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9QUklNX1NUQV9WSUYpCisJCQlicmVhazsKKworCQlpZiAoYnNzX2NvbmYtPmFzc29jKSB7CisJCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfUFJJTV9TVEFfVklGOworCQkJYXZwLT5wcmltYXJ5X3N0YV92aWYgPSB0cnVlOworCQkJbWVtY3B5KGNvbW1vbi0+Y3VyYnNzaWQsIGJzc19jb25mLT5ic3NpZCwgRVRIX0FMRU4pOworCQkJY29tbW9uLT5jdXJhaWQgPSBic3NfY29uZi0+YWlkOworCQkJYXRoOWtfaHdfd3JpdGVfYXNzb2NpZChzYy0+c2NfYWgpOworCQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLAorCQkJCSJCc3MgSW5mbyBBU1NPQyAlZCwgYnNzaWQ6ICVwTVxuIiwKKwkJCQlic3NfY29uZi0+YWlkLCBjb21tb24tPmN1cmJzc2lkKTsKKwkJCWF0aF9iZWFjb25fY29uZmlnKHNjLCB2aWYpOworCQkJLyoKKwkJCSAqIFJlcXVlc3QgYSByZS1jb25maWd1cmF0aW9uIG9mIEJlYWNvbiByZWxhdGVkIHRpbWVycworCQkJICogb24gdGhlIHJlY2VpcHQgb2YgdGhlIGZpcnN0IEJlYWNvbiBmcmFtZSAoaS5lLiwKKwkJCSAqIGFmdGVyIHRpbWUgc3luYyB3aXRoIHRoZSBBUCkuCisJCQkgKi8KKwkJCXNjLT5wc19mbGFncyB8PSBQU19CRUFDT05fU1lOQyB8IFBTX1dBSVRfRk9SX0JFQUNPTjsKKwkJCS8qIFJlc2V0IHJzc2kgc3RhdHMgKi8KKwkJCXNjLT5sYXN0X3Jzc2kgPSBBVEhfUlNTSV9EVU1NWV9NQVJLRVI7CisJCQlzYy0+c2NfYWgtPnN0YXRzLmF2Z2Jyc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOworCisJCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfQU5JX1JVTjsKKwkJCWF0aF9zdGFydF9hbmkoY29tbW9uKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX2NvbmZpZ19ic3Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpOworCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mID0gJnZpZi0+YnNzX2NvbmY7CisJc3RydWN0IGF0aF92aWYgKmF2cCA9ICh2b2lkICopdmlmLT5kcnZfcHJpdjsKKworCS8qIFJlY29uZmlndXJlIGJzcyBpbmZvICovCisJaWYgKGF2cC0+cHJpbWFyeV9zdGFfdmlmICYmICFic3NfY29uZi0+YXNzb2MpIHsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLAorCQkJIkJzcyBJbmZvIERJU0FTU09DICVkLCBic3NpZCAlcE1cbiIsCisJCQljb21tb24tPmN1cmFpZCwgY29tbW9uLT5jdXJic3NpZCk7CisJCXNjLT5zY19mbGFncyAmPSB+KFNDX09QX1BSSU1fU1RBX1ZJRiB8IFNDX09QX0JFQUNPTlMpOworCQlhdnAtPnByaW1hcnlfc3RhX3ZpZiA9IGZhbHNlOworCQltZW1zZXQoY29tbW9uLT5jdXJic3NpZCwgMCwgRVRIX0FMRU4pOworCQljb21tb24tPmN1cmFpZCA9IDA7CisJfQorCisJaWVlZTgwMjExX2l0ZXJhdGVfYWN0aXZlX2ludGVyZmFjZXNfYXRvbWljKAorCQkJc2MtPmh3LCBhdGg5a19ic3NfaXRlciwgc2MpOworCisJLyoKKwkgKiBOb25lIG9mIHN0YXRpb24gdmlmcyBhcmUgYXNzb2NpYXRlZC4KKwkgKiBDbGVhciBic3NpZCAmIGFpZAorCSAqLworCWlmICgoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgJiYKKwkgICAgIShzYy0+c2NfZmxhZ3MgJiBTQ19PUF9QUklNX1NUQV9WSUYpKSB7CisJCWF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoc2MtPnNjX2FoKTsKKwkJLyogU3RvcCBBTkkgKi8KKwkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9BTklfUlVOOworCQlkZWxfdGltZXJfc3luYygmY29tbW9uLT5hbmkudGltZXIpOworCX0KK30KIAogc3RhdGljIHZvaWQgYXRoOWtfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLApAQCAtMTg5Myw3ICsyMDM2LDYgQEAKIAkJCQkgICB1MzIgY2hhbmdlZCkKIHsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwotCXN0cnVjdCBhdGhfYmVhY29uX2NvbmZpZyAqY3VyX2NvbmYgPSAmc2MtPmN1cl9iZWFjb25fY29uZjsKIAlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKIAlzdHJ1Y3QgYXRoX3ZpZiAqYXZwID0gKHZvaWQgKil2aWYtPmRydl9wcml2OwpAQCAtMTkwNCwyMCArMjA0NiwxMCBAQAogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CiAKIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JTU0lEKSB7Ci0JCS8qIFNldCBCU1NJRCAqLwotCQltZW1jcHkoY29tbW9uLT5jdXJic3NpZCwgYnNzX2NvbmYtPmJzc2lkLCBFVEhfQUxFTik7Ci0JCW1lbWNweShhdnAtPmJzc2lkLCBic3NfY29uZi0+YnNzaWQsIEVUSF9BTEVOKTsKLQkJY29tbW9uLT5jdXJhaWQgPSAwOwotCQlhdGg5a19od193cml0ZV9hc3NvY2lkKGFoKTsKLQotCQkvKiBTZXQgYWdncmVnYXRpb24gcHJvdGVjdGlvbiBtb2RlIHBhcmFtZXRlcnMgKi8KLQkJc2MtPmNvbmZpZy5hdGhfYWdncl9wcm90ID0gMDsKKwkJYXRoOWtfY29uZmlnX2JzcyhzYywgdmlmKTsKIAogCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICJCU1NJRDogJXBNIGFpZDogMHgleFxuIiwKIAkJCWNvbW1vbi0+Y3VyYnNzaWQsIGNvbW1vbi0+Y3VyYWlkKTsKLQotCQkvKiBuZWVkIHRvIHJlY29uZmlndXJlIHRoZSBiZWFjb24gKi8KLQkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9CRUFDT05TIDsKIAl9CiAKIAkvKiBFbmFibGUgdHJhbnNtaXNzaW9uIG9mIGJlYWNvbnMgKEFQLCBJQlNTLCBNRVNIKSAqLwpAQCAtMTk1OCw3ICsyMDkwLDYgQEAKIAl9CiAKIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTl9JTlQpIHsKLQkJY3VyX2NvbmYtPmJlYWNvbl9pbnRlcnZhbCA9IGJzc19jb25mLT5iZWFjb25faW50OwogCQkvKgogCQkgKiBJbiBjYXNlIG9mIEFQIG1vZGUsIHRoZSBIVyBUU0YgaGFzIHRvIGJlIHJlc2V0CiAJCSAqIHdoZW4gdGhlIGJlYWNvbiBpbnRlcnZhbCBjaGFuZ2VzLgpAQCAtMTk3MCw5ICsyMTAxLDggQEAKIAkJCWlmICghZXJyb3IpCiAJCQkJYXRoX2JlYWNvbl9jb25maWcoc2MsIHZpZik7CiAJCQlhdGg5a19zZXRfYmVhY29uaW5nX3N0YXR1cyhzYywgdHJ1ZSk7Ci0JCX0gZWxzZSB7CisJCX0gZWxzZQogCQkJYXRoX2JlYWNvbl9jb25maWcoc2MsIHZpZik7Ci0JCX0KIAl9CiAKIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRSkgewpAQCAtMTk5NCwxMiArMjEyNCw2IEBACiAJCQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX1BST1RFQ1RfRU5BQkxFOwogCX0KIAotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQVNTT0MpIHsKLQkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQ09ORklHLCAiQlNTIENoYW5nZWQgQVNTT0MgJWRcbiIsCi0JCQlic3NfY29uZi0+YXNzb2MpOwotCQlhdGg5a19ic3NfYXNzb2NfaW5mbyhzYywgaHcsIHZpZiwgYnNzX2NvbmYpOwotCX0KLQogCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIAlhdGg5a19wc19yZXN0b3JlKHNjKTsKIH0KQEAgLTIxNDEsMTkgKzIyNjUsMjYgQEAKIHN0YXRpYyB2b2lkIGF0aDlrX2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGRyb3ApCiB7CiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKIAlpbnQgdGltZW91dCA9IDIwMDsgLyogbXMgKi8KIAlpbnQgaSwgajsKKwlib29sIGRyYWluX3R4cTsKIAotCWF0aDlrX3BzX3dha2V1cChzYyk7CiAJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKLQogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmc2MtPnR4X2NvbXBsZXRlX3dvcmspOwogCisJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX0lOVkFMSUQpIHsKKwkJYXRoX2RiZyhjb21tb24sIEFUSF9EQkdfQU5ZLCAiRGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworCQlyZXR1cm47CisJfQorCiAJaWYgKGRyb3ApCiAJCXRpbWVvdXQgPSAxOwogCiAJZm9yIChqID0gMDsgaiA8IHRpbWVvdXQ7IGorKykgewotCQlpbnQgbnBlbmQgPSAwOworCQlib29sIG5wZW5kID0gZmFsc2U7CiAKIAkJaWYgKGopCiAJCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CkBAIC0yMTYyLDIyICsyMjkzLDQzIEBACiAJCQlpZiAoIUFUSF9UWFFfU0VUVVAoc2MsIGkpKQogCQkJCWNvbnRpbnVlOwogCi0JCQlucGVuZCArPSBhdGg5a19oYXNfcGVuZGluZ19mcmFtZXMoc2MsICZzYy0+dHgudHhxW2ldKTsKKwkJCW5wZW5kID0gYXRoOWtfaGFzX3BlbmRpbmdfZnJhbWVzKHNjLCAmc2MtPnR4LnR4cVtpXSk7CisKKwkJCWlmIChucGVuZCkKKwkJCQlicmVhazsKIAkJfQogCiAJCWlmICghbnBlbmQpCiAJCSAgICBnb3RvIG91dDsKIAl9CiAKLQlpZiAoIWF0aF9kcmFpbl9hbGxfdHhxKHNjLCBmYWxzZSkpCisJYXRoOWtfcHNfd2FrZXVwKHNjKTsKKwlzcGluX2xvY2tfYmgoJnNjLT5zY19wY3VfbG9jayk7CisJZHJhaW5fdHhxID0gYXRoX2RyYWluX2FsbF90eHEoc2MsIGZhbHNlKTsKKwlzcGluX3VubG9ja19iaCgmc2MtPnNjX3BjdV9sb2NrKTsKKwlpZiAoIWRyYWluX3R4cSkKIAkJYXRoX3Jlc2V0KHNjLCBmYWxzZSk7Ci0KKwlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoaHcpOwogCiBvdXQ6CiAJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhodywgJnNjLT50eF9jb21wbGV0ZV93b3JrLCAwKTsKIAltdXRleF91bmxvY2soJnNjLT5tdXRleCk7Ci0JYXRoOWtfcHNfcmVzdG9yZShzYyk7Cit9CisKK3N0YXRpYyBib29sIGF0aDlrX3R4X2ZyYW1lc19wZW5kaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVRIOUtfTlVNX1RYX1FVRVVFUzsgaSsrKSB7CisJCWlmICghQVRIX1RYUV9TRVRVUChzYywgaSkpCisJCQljb250aW51ZTsKKworCQlpZiAoYXRoOWtfaGFzX3BlbmRpbmdfZnJhbWVzKHNjLCAmc2MtPnR4LnR4cVtpXSkpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOwogfQogCiBzdHJ1Y3QgaWVlZTgwMjExX29wcyBhdGg5a19vcHMgPSB7CkBAIC0yMTkxLDYgKzIzNDMsNyBAQAogCS5jb25maWd1cmVfZmlsdGVyICAgPSBhdGg5a19jb25maWd1cmVfZmlsdGVyLAogCS5zdGFfYWRkCSAgICA9IGF0aDlrX3N0YV9hZGQsCiAJLnN0YV9yZW1vdmUJICAgID0gYXRoOWtfc3RhX3JlbW92ZSwKKwkuc3RhX25vdGlmeSAgICAgICAgID0gYXRoOWtfc3RhX25vdGlmeSwKIAkuY29uZl90eCAJICAgID0gYXRoOWtfY29uZl90eCwKIAkuYnNzX2luZm9fY2hhbmdlZCAgID0gYXRoOWtfYnNzX2luZm9fY2hhbmdlZCwKIAkuc2V0X2tleSAgICAgICAgICAgID0gYXRoOWtfc2V0X2tleSwKQEAgLTIyMDIsNCArMjM1NSw1IEBACiAJLnJma2lsbF9wb2xsICAgICAgICA9IGF0aDlrX3Jma2lsbF9wb2xsX3N0YXRlLAogCS5zZXRfY292ZXJhZ2VfY2xhc3MgPSBhdGg5a19zZXRfY292ZXJhZ2VfY2xhc3MsCiAJLmZsdXNoCQkgICAgPSBhdGg5a19mbHVzaCwKKwkudHhfZnJhbWVzX3BlbmRpbmcgID0gYXRoOWtfdHhfZnJhbWVzX3BlbmRpbmcsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BoeS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BoeS5oCmluZGV4IDVlM2Q3NDkuLjk0NDFiZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9waHkuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcGh5LmgKQEAgLTE5LDcgKzE5LDYgQEAKIAogI2RlZmluZSBDSEFOU0VMX0RJVgkJMTUKICNkZWZpbmUgQ0hBTlNFTF8yRyhfZnJlcSkJKCgoX2ZyZXEpICogMHgxMDAwMCkgLyBDSEFOU0VMX0RJVikKLSNkZWZpbmUgQ0hBTlNFTF8yR185NDg1KF9mcmVxKQkoKCgoX2ZyZXEpICogMHgxMDAwMCkgLSAyMTUpIC8gQ0hBTlNFTF9ESVYpCiAjZGVmaW5lIENIQU5TRUxfNUcoX2ZyZXEpCSgoKF9mcmVxKSAqIDB4ODAwMCkgLyBDSEFOU0VMX0RJVikKIAogI2RlZmluZSBBUl9QSFlfQkFTRSAgICAgMHg5ODAwCkBAIC0zOCwyNiArMzcsMTUgQEAKICNkZWZpbmUgQVJfUEhZX0NMQ19RMCAgICAgICAgMHgwMDAwZmZkMAogI2RlZmluZSBBUl9QSFlfQ0xDX1EwX1MgICAgICA1CiAKLSNkZWZpbmUgUkVHX1dSSVRFX1JGX0FSUkFZKGluaWFycmF5LCByZWdEYXRhLCByZWdXcikgZG8geyAgICAgICAgICAgICAgIFwKLQkJaW50IHI7CQkJCQkJCVwKLQkJZm9yIChyID0gMDsgciA8ICgoaW5pYXJyYXkpLT5pYV9yb3dzKTsgcisrKSB7CQlcCi0JCQlSRUdfV1JJVEUoYWgsIElOSV9SQSgoaW5pYXJyYXkpLCByLCAwKSwgKHJlZ0RhdGEpW3JdKTsgXAotCQkJRE9fREVMQVkocmVnV3IpOwkJCQlcCi0JCX0JCQkJCQkJXAotCX0gd2hpbGUgKDApCi0KICNkZWZpbmUgQU5UU1dBUF9BQiAweDAwMDEKICNkZWZpbmUgUkVEVUNFX0NIQUlOXzAgMHgwMDAwMDA1MAogI2RlZmluZSBSRURVQ0VfQ0hBSU5fMSAweDAwMDAwMDUxCiAjZGVmaW5lIEFSX1BIWV9DSElQX0lEIDB4OTgxOAogCi0jZGVmaW5lIFJGX0JBTktfU0VUVVAoX2JhbmssIF9pbmlhcnJheSwgX2NvbCkgZG8gewkJCVwKLQkJaW50IGk7CQkJCQkJCVwKLQkJZm9yIChpID0gMDsgaSA8IChfaW5pYXJyYXkpLT5pYV9yb3dzOyBpKyspCQlcCi0JCQkoX2JhbmspW2ldID0gSU5JX1JBKChfaW5pYXJyYXkpLCBpLCBfY29sKTs7CVwKLQl9IHdoaWxlICgwKQotCiAjZGVmaW5lCUFSX1BIWV9USU1JTkcxMV9TUFVSX0ZSRVFfU0QJCTB4M0ZGMDAwMDAKICNkZWZpbmUJQVJfUEhZX1RJTUlORzExX1NQVVJfRlJFUV9TRF9TCQkyMAogCisjZGVmaW5lIEFSX1BIWV9QTExfQ09OVFJPTCAweDE2MTgwCisjZGVmaW5lIEFSX1BIWV9QTExfTU9ERSAweDE2MTg0CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmMuYwppbmRleCA0YzBkMzZhLi40Y2NiZjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmMuYwpAQCAtODU0LDE0ICs4NTQsMTMgQEAKIAlhdGhfcmNfcmF0ZV9zZXRfcnRzY3RzKHNjLCByYXRlX3RhYmxlLCB0eF9pbmZvKTsKIH0KIAotc3RhdGljIGJvb2wgYXRoX3JjX3VwZGF0ZV9wZXIoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCitzdGF0aWMgdm9pZCBhdGhfcmNfdXBkYXRlX3BlcihzdHJ1Y3QgYXRoX3NvZnRjICpzYywKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcmF0ZV90YWJsZSwKIAkJCSAgICAgIHN0cnVjdCBhdGhfcmF0ZV9wcml2ICphdGhfcmNfcHJpdiwKIAkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbywKIAkJCSAgICAgIGludCB0eF9yYXRlLCBpbnQgeHJldHJpZXMsIGludCByZXRyaWVzLAogCQkJICAgICAgdTMyIG5vd19tc2VjKQogewotCWJvb2wgc3RhdGVfY2hhbmdlID0gZmFsc2U7CiAJaW50IGNvdW50LCBuX2JhZF9mcmFtZXM7CiAJdTggbGFzdF9wZXI7CiAJc3RhdGljIGNvbnN0IHUzMiBucmV0cnlfdG9fcGVyX2xvb2t1cFsxMF0gPSB7CkBAIC05OTIsOCArOTkxLDYgQEAKIAogCQl9CiAJfQotCi0JcmV0dXJuIHN0YXRlX2NoYW5nZTsKIH0KIAogc3RhdGljIHZvaWQgYXRoX2RlYnVnX3N0YXRfcmV0cmllcyhzdHJ1Y3QgYXRoX3JhdGVfcHJpdiAqcmMsIGludCByaXgsCkBAIC0xMDE3LDcgKzEwMTQsNiBAQAogCXUzMiBub3dfbXNlYyA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyk7CiAJaW50IHJhdGU7CiAJdTggbGFzdF9wZXI7Ci0JYm9vbCBzdGF0ZV9jaGFuZ2UgPSBmYWxzZTsKIAljb25zdCBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUgPSBhdGhfcmNfcHJpdi0+cmF0ZV90YWJsZTsKIAlpbnQgc2l6ZSA9IGF0aF9yY19wcml2LT5yYXRlX3RhYmxlX3NpemU7CiAKQEAgLTEwMjcsOSArMTAyMyw5IEBACiAJbGFzdF9wZXIgPSBhdGhfcmNfcHJpdi0+cGVyW3R4X3JhdGVdOwogCiAJLyogVXBkYXRlIFBFUiBmaXJzdCAqLwotCXN0YXRlX2NoYW5nZSA9IGF0aF9yY191cGRhdGVfcGVyKHNjLCByYXRlX3RhYmxlLCBhdGhfcmNfcHJpdiwKLQkJCQkJIHR4X2luZm8sIHR4X3JhdGUsIHhyZXRyaWVzLAotCQkJCQkgcmV0cmllcywgbm93X21zZWMpOworCWF0aF9yY191cGRhdGVfcGVyKHNjLCByYXRlX3RhYmxlLCBhdGhfcmNfcHJpdiwKKwkJCSAgdHhfaW5mbywgdHhfcmF0ZSwgeHJldHJpZXMsCisJCQkgIHJldHJpZXMsIG5vd19tc2VjKTsKIAogCS8qCiAJICogSWYgdGhpcyByYXRlIGxvb2tzIGJhZCAoaGlnaCBQRVIpIHRoZW4gc3RvcCB1c2luZyBpdCBmb3IKQEAgLTEwOTIsOCArMTA4OCw3IEBACiAJaWYgKCEocmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfTUNTKSkKIAkJcmV0dXJuIHJhdGUtPmlkeDsKIAotCXdoaWxlIChyYXRlLT5pZHggPiBtY3Nfcml4X29mZltpXSAmJgotCSAgICAgICBpIDwgQVJSQVlfU0laRShtY3Nfcml4X29mZikpIHsKKwl3aGlsZSAoaSA8IEFSUkFZX1NJWkUobWNzX3JpeF9vZmYpICYmIHJhdGUtPmlkeCA+IG1jc19yaXhfb2ZmW2ldKSB7CiAJCXJpeCsrOyBpKys7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYwppbmRleCBkY2QxOWJjLi40ZjUyZTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmMKQEAgLTI4LDYgKzI4LDMzIEBACiAJCShhbHRfcnNzaV9hdmcgPiBtYWluX3Jzc2lfYXZnICsgbWluZGVsdGEpKSAmJiAocGt0X2NvdW50ID4gNTApOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgYXRoX2FudF9kaXZfY29tYl9hbHRfY2hlY2sodTggZGl2X2dyb3VwLCBpbnQgYWx0X3JhdGlvLAorCQkJCQlpbnQgY3Vycl9tYWluX3NldCwgaW50IGN1cnJfYWx0X3NldCwKKwkJCQkJaW50IGFsdF9yc3NpX2F2ZywgaW50IG1haW5fcnNzaV9hdmcpCit7CisJYm9vbCByZXN1bHQgPSBmYWxzZTsKKwlzd2l0Y2ggKGRpdl9ncm91cCkgeworCWNhc2UgMDoKKwkJaWYgKGFsdF9yYXRpbyA+IEFUSF9BTlRfRElWX0NPTUJfQUxUX0FOVF9SQVRJTykKKwkJCXJlc3VsdCA9IHRydWU7CisJCWJyZWFrOworCWNhc2UgMToKKwkJaWYgKCgoKGN1cnJfbWFpbl9zZXQgPT0gQVRIX0FOVF9ESVZfQ09NQl9MTkEyKSAmJgorCQkJKGN1cnJfYWx0X3NldCA9PSBBVEhfQU5UX0RJVl9DT01CX0xOQTEpICYmCisJCQkJKGFsdF9yc3NpX2F2ZyA+PSAobWFpbl9yc3NpX2F2ZyAtIDUpKSkgfHwKKwkJCSgoY3Vycl9tYWluX3NldCA9PSBBVEhfQU5UX0RJVl9DT01CX0xOQTEpICYmCisJCQkoY3Vycl9hbHRfc2V0ID09IEFUSF9BTlRfRElWX0NPTUJfTE5BMikgJiYKKwkJCQkoYWx0X3Jzc2lfYXZnID49IChtYWluX3Jzc2lfYXZnIC0gMikpKSkgJiYKKwkJCQkJCQkoYWx0X3Jzc2lfYXZnID49IDQpKQorCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJZWxzZQorCQkJcmVzdWx0ID0gZmFsc2U7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKIHN0YXRpYyBpbmxpbmUgYm9vbCBhdGg5a19jaGVja19hdXRvX3NsZWVwKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewogCXJldHVybiBzYy0+cHNfZW5hYmxlZCAmJgpAQCAtNzUsNyArMTAyLDYgQEAKIAkJKnNjLT5yeC5yeGxpbmsgPSBiZi0+YmZfZGFkZHI7CiAKIAlzYy0+cngucnhsaW5rID0gJmRzLT5kc19saW5rOwotCWF0aDlrX2h3X3J4ZW5hKGFoKTsKIH0KIAogc3RhdGljIHZvaWQgYXRoX3NldGRlZmFudGVubmEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHUzMiBhbnRlbm5hKQpAQCAtNDI2LDkgKzQ1Miw3IEBACiAJZWxzZQogCQlyZmlsdCB8PSBBVEg5S19SWF9GSUxURVJfQkVBQ09OOwogCi0JaWYgKChBUl9TUkVWXzkyODBfMjBfT1JfTEFURVIoc2MtPnNjX2FoKSB8fAotCSAgICBBUl9TUkVWXzkyODVfMTJfT1JfTEFURVIoc2MtPnNjX2FoKSkgJiYKLQkgICAgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSAmJgorCWlmICgoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHx8CiAJICAgIChzYy0+cngucnhmaWx0ZXIgJiBGSUZfUFNQT0xMKSkKIAkJcmZpbHQgfD0gQVRIOUtfUlhfRklMVEVSX1BTUE9MTDsKIApAQCAtNTA2LDcgKzUzMCw3IEBACiAJCQkiY29uZnVzaW5nIHRoZSBETUEgZW5naW5lIHdoZW4gd2Ugc3RhcnQgUlggdXBcbiIpOwogCQlBVEhfREJHX1dBUk5fT05fT05DRSghc3RvcHBlZCk7CiAJfQotCXJldHVybiBzdG9wcGVkIHx8IHJlc2V0OworCXJldHVybiBzdG9wcGVkICYmICFyZXNldDsKIH0KIAogdm9pZCBhdGhfZmx1c2hyZWN2KHN0cnVjdCBhdGhfc29mdGMgKnNjKQpAQCAtNTc0LDcgKzU5OCw4IEBACiAJCXNjLT5wc19mbGFncyAmPSB+UFNfQkVBQ09OX1NZTkM7CiAJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1BTLAogCQkJIlJlY29uZmlndXJlIEJlYWNvbiB0aW1lcnMgYmFzZWQgb24gdGltZXN0YW1wIGZyb20gdGhlIEFQXG4iKTsKLQkJYXRoX2JlYWNvbl9jb25maWcoc2MsIE5VTEwpOworCQlhdGhfc2V0X2JlYWNvbihzYyk7CisJCXNjLT5wc19mbGFncyAmPSB+UFNfVFNGT09SX1NZTkM7CiAJfQogCiAJaWYgKGF0aF9iZWFjb25fZHRpbV9wZW5kaW5nX2NhYihza2IpKSB7CkBAIC05MTksNyArOTQ0LDggQEAKIAlpbnQgbGFzdF9yc3NpOwogCV9fbGUxNiBmYzsKIAotCWlmIChhaC0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJaWYgKChhaC0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pICYmCisJICAgIChhaC0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKSkKIAkJcmV0dXJuOwogCiAJZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CkBAIC0xMjkxLDQ5ICsxMzE3LDEzOCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYXRoX2FudF9kaXZfY29uZl9mYXN0X2RpdmJpYXMoc3RydWN0IGF0aF9od19hbnRjb21iX2NvbmYgKmFudF9jb25mKQorc3RhdGljIHZvaWQgYXRoX2FudF9kaXZfY29uZl9mYXN0X2RpdmJpYXMoc3RydWN0IGF0aF9od19hbnRjb21iX2NvbmYgKmFudF9jb25mLAorCQlzdHJ1Y3QgYXRoX2FudF9jb21iICphbnRjb21iLCBpbnQgYWx0X3JhdGlvKQogewotCS8qIEFkanVzdCB0aGUgZmFzdF9kaXZfYmlhcyBiYXNlZCBvbiBtYWluIGFuZCBhbHQgbG5hIGNvbmYgKi8KLQlzd2l0Y2ggKChhbnRfY29uZi0+bWFpbl9sbmFfY29uZiA8PCA0KSB8IGFudF9jb25mLT5hbHRfbG5hX2NvbmYpIHsKLQljYXNlICgweDAxKTogLyogQS1CIExOQTIgKi8KLQkJYW50X2NvbmYtPmZhc3RfZGl2X2JpYXMgPSAweDNiOwotCQlicmVhazsKLQljYXNlICgweDAyKTogLyogQS1CIExOQTEgKi8KLQkJYW50X2NvbmYtPmZhc3RfZGl2X2JpYXMgPSAweDNkOwotCQlicmVhazsKLQljYXNlICgweDAzKTogLyogQS1CIEErQiAqLwotCQlhbnRfY29uZi0+ZmFzdF9kaXZfYmlhcyA9IDB4MTsKLQkJYnJlYWs7Ci0JY2FzZSAoMHgxMCk6IC8qIExOQTIgQS1CICovCi0JCWFudF9jb25mLT5mYXN0X2Rpdl9iaWFzID0gMHg3OwotCQlicmVhazsKLQljYXNlICgweDEyKTogLyogTE5BMiBMTkExICovCi0JCWFudF9jb25mLT5mYXN0X2Rpdl9iaWFzID0gMHgyOwotCQlicmVhazsKLQljYXNlICgweDEzKTogLyogTE5BMiBBK0IgKi8KLQkJYW50X2NvbmYtPmZhc3RfZGl2X2JpYXMgPSAweDc7Ci0JCWJyZWFrOwotCWNhc2UgKDB4MjApOiAvKiBMTkExIEEtQiAqLwotCQlhbnRfY29uZi0+ZmFzdF9kaXZfYmlhcyA9IDB4NjsKLQkJYnJlYWs7Ci0JY2FzZSAoMHgyMSk6IC8qIExOQTEgTE5BMiAqLwotCQlhbnRfY29uZi0+ZmFzdF9kaXZfYmlhcyA9IDB4MDsKLQkJYnJlYWs7Ci0JY2FzZSAoMHgyMyk6IC8qIExOQTEgQStCICovCi0JCWFudF9jb25mLT5mYXN0X2Rpdl9iaWFzID0gMHg2OwotCQlicmVhazsKLQljYXNlICgweDMwKTogLyogQStCIEEtQiAqLwotCQlhbnRfY29uZi0+ZmFzdF9kaXZfYmlhcyA9IDB4MTsKLQkJYnJlYWs7Ci0JY2FzZSAoMHgzMSk6IC8qIEErQiBMTkEyICovCi0JCWFudF9jb25mLT5mYXN0X2Rpdl9iaWFzID0gMHgzYjsKLQkJYnJlYWs7Ci0JY2FzZSAoMHgzMik6IC8qIEErQiBMTkExICovCi0JCWFudF9jb25mLT5mYXN0X2Rpdl9iaWFzID0gMHgzZDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7CisJaWYgKGFudF9jb25mLT5kaXZfZ3JvdXAgPT0gMCkgeworCQkvKiBBZGp1c3QgdGhlIGZhc3RfZGl2X2JpYXMgYmFzZWQgb24gbWFpbiBhbmQgYWx0IGxuYSBjb25mICovCisJCXN3aXRjaCAoKGFudF9jb25mLT5tYWluX2xuYV9jb25mIDw8IDQpIHwKKwkJCQlhbnRfY29uZi0+YWx0X2xuYV9jb25mKSB7CisJCWNhc2UgKDB4MDEpOiAvKiBBLUIgTE5BMiAqLworCQkJYW50X2NvbmYtPmZhc3RfZGl2X2JpYXMgPSAweDNiOworCQkJYnJlYWs7CisJCWNhc2UgKDB4MDIpOiAvKiBBLUIgTE5BMSAqLworCQkJYW50X2NvbmYtPmZhc3RfZGl2X2JpYXMgPSAweDNkOworCQkJYnJlYWs7CisJCWNhc2UgKDB4MDMpOiAvKiBBLUIgQStCICovCisJCQlhbnRfY29uZi0+ZmFzdF9kaXZfYmlhcyA9IDB4MTsKKwkJCWJyZWFrOworCQljYXNlICgweDEwKTogLyogTE5BMiBBLUIgKi8KKwkJCWFudF9jb25mLT5mYXN0X2Rpdl9iaWFzID0gMHg3OworCQkJYnJlYWs7CisJCWNhc2UgKDB4MTIpOiAvKiBMTkEyIExOQTEgKi8KKwkJCWFudF9jb25mLT5mYXN0X2Rpdl9iaWFzID0gMHgyOworCQkJYnJlYWs7CisJCWNhc2UgKDB4MTMpOiAvKiBMTkEyIEErQiAqLworCQkJYW50X2NvbmYtPmZhc3RfZGl2X2JpYXMgPSAweDc7CisJCQlicmVhazsKKwkJY2FzZSAoMHgyMCk6IC8qIExOQTEgQS1CICovCisJCQlhbnRfY29uZi0+ZmFzdF9kaXZfYmlhcyA9IDB4NjsKKwkJCWJyZWFrOworCQljYXNlICgweDIxKTogLyogTE5BMSBMTkEyICovCisJCQlhbnRfY29uZi0+ZmFzdF9kaXZfYmlhcyA9IDB4MDsKKwkJCWJyZWFrOworCQljYXNlICgweDIzKTogLyogTE5BMSBBK0IgKi8KKwkJCWFudF9jb25mLT5mYXN0X2Rpdl9iaWFzID0gMHg2OworCQkJYnJlYWs7CisJCWNhc2UgKDB4MzApOiAvKiBBK0IgQS1CICovCisJCQlhbnRfY29uZi0+ZmFzdF9kaXZfYmlhcyA9IDB4MTsKKwkJCWJyZWFrOworCQljYXNlICgweDMxKTogLyogQStCIExOQTIgKi8KKwkJCWFudF9jb25mLT5mYXN0X2Rpdl9iaWFzID0gMHgzYjsKKwkJCWJyZWFrOworCQljYXNlICgweDMyKTogLyogQStCIExOQTEgKi8KKwkJCWFudF9jb25mLT5mYXN0X2Rpdl9iaWFzID0gMHgzZDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgaWYgKGFudF9jb25mLT5kaXZfZ3JvdXAgPT0gMikgeworCQkvKiBBZGp1c3QgdGhlIGZhc3RfZGl2X2JpYXMgYmFzZWQgb24gbWFpbiBhbmQgYWx0X2xuYV9jb25mICovCisJCXN3aXRjaCAoKGFudF9jb25mLT5tYWluX2xuYV9jb25mIDw8IDQpIHwKKwkJCQlhbnRfY29uZi0+YWx0X2xuYV9jb25mKSB7CisJCWNhc2UgKDB4MDEpOiAvKiBBLUIgTE5BMiAqLworCQkJYW50X2NvbmYtPmZhc3RfZGl2X2JpYXMgPSAweDE7CisJCQlhbnRfY29uZi0+bWFpbl9nYWludGIgPSAwOworCQkJYW50X2NvbmYtPmFsdF9nYWludGIgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgKDB4MDIpOiAvKiBBLUIgTE5BMSAqLworCQkJYW50X2NvbmYtPmZhc3RfZGl2X2JpYXMgPSAweDE7CisJCQlhbnRfY29uZi0+bWFpbl9nYWludGIgPSAwOworCQkJYW50X2NvbmYtPmFsdF9nYWludGIgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgKDB4MDMpOiAvKiBBLUIgQStCICovCisJCQlhbnRfY29uZi0+ZmFzdF9kaXZfYmlhcyA9IDB4MTsKKwkJCWFudF9jb25mLT5tYWluX2dhaW50YiA9IDA7CisJCQlhbnRfY29uZi0+YWx0X2dhaW50YiA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAoMHgxMCk6IC8qIExOQTIgQS1CICovCisJCQlpZiAoIShhbnRjb21iLT5zY2FuKSAmJgorCQkJCShhbHRfcmF0aW8gPiBBVEhfQU5UX0RJVl9DT01CX0FMVF9BTlRfUkFUSU8pKQorCQkJCWFudF9jb25mLT5mYXN0X2Rpdl9iaWFzID0gMHgxOworCQkJZWxzZQorCQkJCWFudF9jb25mLT5mYXN0X2Rpdl9iaWFzID0gMHgyOworCQkJYW50X2NvbmYtPm1haW5fZ2FpbnRiID0gMDsKKwkJCWFudF9jb25mLT5hbHRfZ2FpbnRiID0gMDsKKwkJCWJyZWFrOworCQljYXNlICgweDEyKTogLyogTE5BMiBMTkExICovCisJCQlhbnRfY29uZi0+ZmFzdF9kaXZfYmlhcyA9IDB4MTsKKwkJCWFudF9jb25mLT5tYWluX2dhaW50YiA9IDA7CisJCQlhbnRfY29uZi0+YWx0X2dhaW50YiA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAoMHgxMyk6IC8qIExOQTIgQStCICovCisJCQlpZiAoIShhbnRjb21iLT5zY2FuKSAmJgorCQkJCShhbHRfcmF0aW8gPiBBVEhfQU5UX0RJVl9DT01CX0FMVF9BTlRfUkFUSU8pKQorCQkJCWFudF9jb25mLT5mYXN0X2Rpdl9iaWFzID0gMHgxOworCQkJZWxzZQorCQkJCWFudF9jb25mLT5mYXN0X2Rpdl9iaWFzID0gMHgyOworCQkJYW50X2NvbmYtPm1haW5fZ2FpbnRiID0gMDsKKwkJCWFudF9jb25mLT5hbHRfZ2FpbnRiID0gMDsKKwkJCWJyZWFrOworCQljYXNlICgweDIwKTogLyogTE5BMSBBLUIgKi8KKwkJCWlmICghKGFudGNvbWItPnNjYW4pICYmCisJCQkJKGFsdF9yYXRpbyA+IEFUSF9BTlRfRElWX0NPTUJfQUxUX0FOVF9SQVRJTykpCisJCQkJYW50X2NvbmYtPmZhc3RfZGl2X2JpYXMgPSAweDE7CisJCQllbHNlCisJCQkJYW50X2NvbmYtPmZhc3RfZGl2X2JpYXMgPSAweDI7CisJCQlhbnRfY29uZi0+bWFpbl9nYWludGIgPSAwOworCQkJYW50X2NvbmYtPmFsdF9nYWludGIgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgKDB4MjEpOiAvKiBMTkExIExOQTIgKi8KKwkJCWFudF9jb25mLT5mYXN0X2Rpdl9iaWFzID0gMHgxOworCQkJYW50X2NvbmYtPm1haW5fZ2FpbnRiID0gMDsKKwkJCWFudF9jb25mLT5hbHRfZ2FpbnRiID0gMDsKKwkJCWJyZWFrOworCQljYXNlICgweDIzKTogLyogTE5BMSBBK0IgKi8KKwkJCWlmICghKGFudGNvbWItPnNjYW4pICYmCisJCQkJKGFsdF9yYXRpbyA+IEFUSF9BTlRfRElWX0NPTUJfQUxUX0FOVF9SQVRJTykpCisJCQkJYW50X2NvbmYtPmZhc3RfZGl2X2JpYXMgPSAweDE7CisJCQllbHNlCisJCQkJYW50X2NvbmYtPmZhc3RfZGl2X2JpYXMgPSAweDI7CisJCQlhbnRfY29uZi0+bWFpbl9nYWludGIgPSAwOworCQkJYW50X2NvbmYtPmFsdF9nYWludGIgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgKDB4MzApOiAvKiBBK0IgQS1CICovCisJCQlhbnRfY29uZi0+ZmFzdF9kaXZfYmlhcyA9IDB4MTsKKwkJCWFudF9jb25mLT5tYWluX2dhaW50YiA9IDA7CisJCQlhbnRfY29uZi0+YWx0X2dhaW50YiA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAoMHgzMSk6IC8qIEErQiBMTkEyICovCisJCQlhbnRfY29uZi0+ZmFzdF9kaXZfYmlhcyA9IDB4MTsKKwkJCWFudF9jb25mLT5tYWluX2dhaW50YiA9IDA7CisJCQlhbnRfY29uZi0+YWx0X2dhaW50YiA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAoMHgzMik6IC8qIEErQiBMTkExICovCisJCQlhbnRfY29uZi0+ZmFzdF9kaXZfYmlhcyA9IDB4MTsKKwkJCWFudF9jb25mLT5tYWluX2dhaW50YiA9IDA7CisJCQlhbnRfY29uZi0+YWx0X2dhaW50YiA9IDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKIAl9CisKIH0KIAogLyogQW50ZW5uYSBkaXZlcnNpdHkgYW5kIGNvbWJpbmluZyAqLwpAQCAtMTM0Miw3ICsxNDU3LDcgQEAKIAlzdHJ1Y3QgYXRoX2h3X2FudGNvbWJfY29uZiBkaXZfYW50X2NvbmY7CiAJc3RydWN0IGF0aF9hbnRfY29tYiAqYW50Y29tYiA9ICZzYy0+YW50X2NvbWI7CiAJaW50IGFsdF9yYXRpbyA9IDAsIGFsdF9yc3NpX2F2ZyA9IDAsIG1haW5fcnNzaV9hdmcgPSAwLCBjdXJyX2FsdF9zZXQ7Ci0JaW50IGN1cnJfbWFpbl9zZXQsIGN1cnJfYmlhczsKKwlpbnQgY3Vycl9tYWluX3NldDsKIAlpbnQgbWFpbl9yc3NpID0gcnMtPnJzX3Jzc2lfY3RsMDsKIAlpbnQgYWx0X3Jzc2kgPSBycy0+cnNfcnNzaV9jdGwxOwogCWludCByeF9hbnRfY29uZiwgIG1haW5fYW50X2NvbmY7CkBAIC0xMzUzLDggKzE0NjgsOCBAQAogCW1haW5fYW50X2NvbmYgPSAocnMtPnJzX3Jzc2lfY3RsMiA+PiBBVEhfQU5UX1JYX01BSU5fU0hJRlQpICYKIAkJCSBBVEhfQU5UX1JYX01BU0s7CiAKLQkvKiBSZWNvcmQgcGFja2V0IG9ubHkgd2hlbiBhbHRfcnNzaSBpcyBwb3NpdGl2ZSAqLwotCWlmIChhbHRfcnNzaSA+IDApIHsKKwkvKiBSZWNvcmQgcGFja2V0IG9ubHkgd2hlbiBib3RoIG1haW5fcnNzaSBhbmQgIGFsdF9yc3NpIGlzIHBvc2l0aXZlICovCisJaWYgKG1haW5fcnNzaSA+IDAgJiYgYWx0X3Jzc2kgPiAwKSB7CiAJCWFudGNvbWItPnRvdGFsX3BrdF9jb3VudCsrOwogCQlhbnRjb21iLT5tYWluX3RvdGFsX3Jzc2kgKz0gbWFpbl9yc3NpOwogCQlhbnRjb21iLT5hbHRfdG90YWxfcnNzaSAgKz0gYWx0X3Jzc2k7CkBAIC0xMzk2LDcgKzE1MTEsNiBAQAogCWF0aDlrX2h3X2FudGRpdl9jb21iX2NvbmZfZ2V0KHNjLT5zY19haCwgJmRpdl9hbnRfY29uZik7CiAJY3Vycl9hbHRfc2V0ID0gZGl2X2FudF9jb25mLmFsdF9sbmFfY29uZjsKIAljdXJyX21haW5fc2V0ID0gZGl2X2FudF9jb25mLm1haW5fbG5hX2NvbmY7Ci0JY3Vycl9iaWFzID0gZGl2X2FudF9jb25mLmZhc3RfZGl2X2JpYXM7CiAKIAlhbnRjb21iLT5jb3VudCsrOwogCkBAIC0xNDE1LDcgKzE1MjksOSBAQAogCX0KIAogCWlmICghYW50Y29tYi0+c2NhbikgewotCQlpZiAoYWx0X3JhdGlvID4gQVRIX0FOVF9ESVZfQ09NQl9BTFRfQU5UX1JBVElPKSB7CisJCWlmIChhdGhfYW50X2Rpdl9jb21iX2FsdF9jaGVjayhkaXZfYW50X2NvbmYuZGl2X2dyb3VwLAorCQkJCQlhbHRfcmF0aW8sIGN1cnJfbWFpbl9zZXQsIGN1cnJfYWx0X3NldCwKKwkJCQkJYWx0X3Jzc2lfYXZnLCBtYWluX3Jzc2lfYXZnKSkgewogCQkJaWYgKGN1cnJfYWx0X3NldCA9PSBBVEhfQU5UX0RJVl9DT01CX0xOQTIpIHsKIAkJCQkvKiBTd2l0Y2ggbWFpbiBhbmQgYWx0IExOQSAqLwogCQkJCWRpdl9hbnRfY29uZi5tYWluX2xuYV9jb25mID0KQEAgLTE0NDQsNyArMTU2MCw3IEBACiAJCX0KIAogCQlpZiAoKGFsdF9yc3NpX2F2ZyA8IChtYWluX3Jzc2lfYXZnICsKLQkJICAgIEFUSF9BTlRfRElWX0NPTUJfTE5BMV9MTkEyX0RFTFRBKSkpCisJCQkJCQlkaXZfYW50X2NvbmYubG5hMV9sbmEyX2RlbHRhKSkpCiAJCQlnb3RvIGRpdl9jb21iX2RvbmU7CiAJfQogCkBAIC0xNTU4LDggKzE2NzQsNyBAQAogCWFudGNvbWItPnF1aWNrX3NjYW5fY250Kys7CiAKIGRpdl9jb21iX2RvbmU6Ci0JYXRoX2FudF9kaXZfY29uZl9mYXN0X2RpdmJpYXMoJmRpdl9hbnRfY29uZik7Ci0KKwlhdGhfYW50X2Rpdl9jb25mX2Zhc3RfZGl2YmlhcygmZGl2X2FudF9jb25mLCBhbnRjb21iLCBhbHRfcmF0aW8pOwogCWF0aDlrX2h3X2FudGRpdl9jb21iX2NvbmZfc2V0KHNjLT5zY19haCwgJmRpdl9hbnRfY29uZik7CiAKIAlhbnRjb21iLT5zY2FuX3N0YXJ0X3RpbWUgPSBqaWZmaWVzOwpAQCAtMTc0Niw3ICsxODYxLDcgQEAKIAkJaWYgKChzYy0+cHNfZmxhZ3MgJiAoUFNfV0FJVF9GT1JfQkVBQ09OIHwKIAkJCQkJICAgICAgUFNfV0FJVF9GT1JfQ0FCIHwKIAkJCQkJICAgICAgUFNfV0FJVF9GT1JfUFNQT0xMX0RBVEEpKSB8fAotCQkJCQl1bmxpa2VseShhdGg5a19jaGVja19hdXRvX3NsZWVwKHNjKSkpCisJCQkJCQlhdGg5a19jaGVja19hdXRvX3NsZWVwKHNjKSkKIAkJCWF0aF9yeF9wcyhzYywgc2tiKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPnNjX3BtX2xvY2ssIGZsYWdzKTsKIApAQCAtMTc2Nyw2ICsxODgyLDcgQEAKIAkJfSBlbHNlIHsKIAkJCWxpc3RfbW92ZV90YWlsKCZiZi0+bGlzdCwgJnNjLT5yeC5yeGJ1Zik7CiAJCQlhdGhfcnhfYnVmX2xpbmsoc2MsIGJmKTsKKwkJCWF0aDlrX2h3X3J4ZW5hKGFoKTsKIAkJfQogCX0gd2hpbGUgKDEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVnLmgKaW5kZXggOGZhOGFjZi4uNDU2ZjNlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlZy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWcuaApAQCAtNjkzLDcgKzY5Myw3IEBACiAjZGVmaW5lIEFSX1JDX0FQQiAgICAgICAgICAgIDB4MDAwMDAwMDIKICNkZWZpbmUgQVJfUkNfSE9TVElGICAgICAgICAgMHgwMDAwMDEwMAogCi0jZGVmaW5lIEFSX1dBICAgICAgICAgICAgICAgIAkJMHg0MDA0CisjZGVmaW5lIEFSX1dBCQkJKEFSX1NSRVZfOTM0MChhaCkgPyAweDQwYzQgOiAweDQwMDQpCiAjZGVmaW5lIEFSX1dBX0JJVDYJCQkoMSA8PCA2KQogI2RlZmluZSBBUl9XQV9CSVQ3CQkJKDEgPDwgNykKICNkZWZpbmUgQVJfV0FfQklUMjMJCQkoMSA8PCAyMykKQEAgLTcxMiw3ICs3MTIsNyBAQAogI2RlZmluZSBBUl9QTV9TVEFURSAgICAgICAgICAgICAgICAgMHg0MDA4CiAjZGVmaW5lIEFSX1BNX1NUQVRFX1BNRV9EM0NPTERfVkFVWCAweDAwMTAwMDAwCiAKLSNkZWZpbmUgQVJfSE9TVF9USU1FT1VUICAgICAgICAgICAgIDB4NDAxOAorI2RlZmluZSBBUl9IT1NUX1RJTUVPVVQgICAgICAgICAgICAgKEFSX1NSRVZfOTM0MChhaCkgPyAweDQwMDggOiAweDQwMTgpCiAjZGVmaW5lIEFSX0hPU1RfVElNRU9VVF9BUEJfQ05UUiAgICAweDAwMDBGRkZGCiAjZGVmaW5lIEFSX0hPU1RfVElNRU9VVF9BUEJfQ05UUl9TICAwCiAjZGVmaW5lIEFSX0hPU1RfVElNRU9VVF9MQ0xfQ05UUiAgICAweEZGRkYwMDAwCkBAIC03NDIsNyArNzQyLDggQEAKICNkZWZpbmUgRUVQUk9NX1BST1RFQ1RfV1BfMTAyNF8yMDQ3ICAgMHg4MDAwCiAKICNkZWZpbmUgQVJfU1JFViBcCi0JKChBUl9TUkVWXzkxMDAoYWgpKSA/IDB4MDYwMCA6IDB4NDAyMCkKKwkoKEFSX1NSRVZfOTEwMChhaCkpID8gMHgwNjAwIDogKEFSX1NSRVZfOTM0MChhaCkgXAorCQkJCQk/IDB4NDAwYyA6IDB4NDAyMCkpCiAKICNkZWZpbmUgQVJfU1JFVl9JRCBcCiAJKChBUl9TUkVWXzkxMDAoYWgpKSA/IDB4MDAwMDBGRkYgOiAweDAwMDAwMEZGKQpAQCAtNzkwLDYgKzc5MSw3IEBACiAjZGVmaW5lIEFSX1NSRVZfVkVSU0lPTl85NDg1CQkweDI0MAogI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzk0ODVfMTAJMAogI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzk0ODVfMTEgICAgICAgIDEKKyNkZWZpbmUgQVJfU1JFVl9WRVJTSU9OXzkzNDAJCTB4MzAwCiAKICNkZWZpbmUgQVJfU1JFVl81NDE2KF9haCkgXAogCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0kpIHx8IFwKQEAgLTg1OCw5ICs4NjAsNyBAQAogI2RlZmluZSBBUl9TUkVWXzkzMDAoX2FoKSBcCiAJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MzAwKSkKICNkZWZpbmUgQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKF9haCkgXAotCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA+IEFSX1NSRVZfVkVSU0lPTl85MzAwKSB8fCBcCi0JICgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fOTMwMCkgJiYgXAotCSAgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA+PSBBUl9TUkVWX1JFVklTSU9OXzkzMDBfMjApKSkKKwkoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fOTMwMCkKIAogI2RlZmluZSBBUl9TUkVWXzk0ODUoX2FoKSBcCiAJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85NDg1KSkKQEAgLTg3MCw2ICs4NzAsMTEgQEAKICNkZWZpbmUgQVJfU1JFVl85NDg1XzExKF9haCkgXAogCShBUl9TUkVWXzk0ODUoX2FoKSAmJiBcCiAJICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNSZXYgPT0gQVJfU1JFVl9SRVZJU0lPTl85NDg1XzExKSkKKyNkZWZpbmUgQVJfU1JFVl85NDg1X09SX0xBVEVSKF9haCkgXAorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fOTQ4NSkpCisKKyNkZWZpbmUgQVJfU1JFVl85MzQwKF9haCkgXAorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fOTM0MCkpCiAKICNkZWZpbmUgQVJfU1JFVl85Mjg1RV8yMChfYWgpIFwKICAgICAoQVJfU1JFVl85Mjg1XzEyX09SX0xBVEVSKF9haCkgJiYgXApAQCAtOTEyLDExICs5MTcsMTEgQEAKICNkZWZpbmUgQVJfSU5UUl9TUFVSSU9VUyAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCiAKIAotI2RlZmluZSBBUl9JTlRSX1NZTkNfQ0FVU0VfQ0xSICAgICAgICAgICAgICAgIDB4NDAyOAorI2RlZmluZSBBUl9JTlRSX1NZTkNfQ0FVU0UgICAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzNDAoYWgpID8gMHg0MDEwIDogMHg0MDI4KQorI2RlZmluZSBBUl9JTlRSX1NZTkNfQ0FVU0VfQ0xSICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzNDAoYWgpID8gMHg0MDEwIDogMHg0MDI4KQogCi0jZGVmaW5lIEFSX0lOVFJfU1lOQ19DQVVTRSAgICAgICAgICAgICAgICAgICAgMHg0MDI4CiAKLSNkZWZpbmUgQVJfSU5UUl9TWU5DX0VOQUJMRSAgICAgICAgICAgICAgICAgICAweDQwMmMKKyNkZWZpbmUgQVJfSU5UUl9TWU5DX0VOQUJMRSAgICAgICAgICAgICAgICAgICAoQVJfU1JFVl85MzQwKGFoKSA/IDB4NDAxNCA6IDB4NDAyYykKICNkZWZpbmUgQVJfSU5UUl9TWU5DX0VOQUJMRV9HUElPICAgICAgICAgICAgICAweEZGRkMwMDAwCiAjZGVmaW5lIEFSX0lOVFJfU1lOQ19FTkFCTEVfR1BJT19TICAgICAgICAgICAgMTgKIApAQCAtOTU2LDI0ICs5NjEsMjQgQEAKIAogfTsKIAotI2RlZmluZSBBUl9JTlRSX0FTWU5DX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4NDAzMAorI2RlZmluZSBBUl9JTlRSX0FTWU5DX01BU0sgICAgICAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzNDAoYWgpID8gMHg0MDE4IDogMHg0MDMwKQogI2RlZmluZSBBUl9JTlRSX0FTWU5DX01BU0tfR1BJTyAgICAgICAgICAgICAgICAgIDB4RkZGQzAwMDAKICNkZWZpbmUgQVJfSU5UUl9BU1lOQ19NQVNLX0dQSU9fUyAgICAgICAgICAgICAgICAxOAogCi0jZGVmaW5lIEFSX0lOVFJfU1lOQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDM0CisjZGVmaW5lIEFSX0lOVFJfU1lOQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgKEFSX1NSRVZfOTM0MChhaCkgPyAweDQwMWMgOiAweDQwMzQpCiAjZGVmaW5lIEFSX0lOVFJfU1lOQ19NQVNLX0dQSU8gICAgICAgICAgICAgICAgICAgMHhGRkZDMDAwMAogI2RlZmluZSBBUl9JTlRSX1NZTkNfTUFTS19HUElPX1MgICAgICAgICAgICAgICAgIDE4CiAKLSNkZWZpbmUgQVJfSU5UUl9BU1lOQ19DQVVTRV9DTFIgICAgICAgICAgICAgICAgICAweDQwMzgKLSNkZWZpbmUgQVJfSU5UUl9BU1lOQ19DQVVTRSAgICAgICAgICAgICAgICAgICAgICAweDQwMzgKKyNkZWZpbmUgQVJfSU5UUl9BU1lOQ19DQVVTRV9DTFIgICAgICAgICAgICAgICAgICAoQVJfU1JFVl85MzQwKGFoKSA/IDB4NDAyMCA6IDB4NDAzOCkKKyNkZWZpbmUgQVJfSU5UUl9BU1lOQ19DQVVTRSAgICAgICAgICAgICAgICAgICAgICAoQVJfU1JFVl85MzQwKGFoKSA/IDB4NDAyMCA6IDB4NDAzOCkKIAotI2RlZmluZSBBUl9JTlRSX0FTWU5DX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgIDB4NDAzYworI2RlZmluZSBBUl9JTlRSX0FTWU5DX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzNDAoYWgpID8gMHg0MDI0IDogMHg0MDNjKQogI2RlZmluZSBBUl9JTlRSX0FTWU5DX0VOQUJMRV9HUElPICAgICAgICAgICAgICAgIDB4RkZGQzAwMDAKICNkZWZpbmUgQVJfSU5UUl9BU1lOQ19FTkFCTEVfR1BJT19TICAgICAgICAgICAgICAxOAogCiAjZGVmaW5lIEFSX1BDSUVfU0VSREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDQwCiAjZGVmaW5lIEFSX1BDSUVfU0VSREVTMiAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDQ0Ci0jZGVmaW5lIEFSX1BDSUVfUE1fQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDE0CisjZGVmaW5lIEFSX1BDSUVfUE1fQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgKEFSX1NSRVZfOTM0MChhaCkgPyAweDQwMDQgOiAweDQwMTQpCiAjZGVmaW5lIEFSX1BDSUVfUE1fQ1RSTF9FTkEgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAogCiAjZGVmaW5lIEFSX05VTV9HUElPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKQEAgLTk4NCw3ICs5ODksNyBAQAogI2RlZmluZSBBUjkzMDBfTlVNX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgIDE3CiAjZGVmaW5lIEFSNzAxMF9OVU1fR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKIAotI2RlZmluZSBBUl9HUElPX0lOX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDA0OAorI2RlZmluZSBBUl9HUElPX0lOX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzNDAoYWgpID8gMHg0MDI4IDogMHg0MDQ4KQogI2RlZmluZSBBUl9HUElPX0lOX1ZBTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEZGRkMwMDAKICNkZWZpbmUgQVJfR1BJT19JTl9WQUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAxNAogI2RlZmluZSBBUjkyOFhfR1BJT19JTl9WQUwgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRkZDMDAKQEAgLTk5OCwxMSArMTAwMywxMiBAQAogI2RlZmluZSBBUjcwMTBfR1BJT19JTl9WQUwgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKICNkZWZpbmUgQVI3MDEwX0dQSU9fSU5fVkFMX1MgICAgICAgICAgICAgICAgICAgICAwCiAKLSNkZWZpbmUgQVJfR1BJT19JTgkJCQkgMHg0MDRjCisjZGVmaW5lIEFSX0dQSU9fSU4JCQkJIChBUl9TUkVWXzkzNDAoYWgpID8gMHg0MDJjIDogMHg0MDRjKQogI2RlZmluZSBBUjkzMDBfR1BJT19JTl9WQUwgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMUZGRkYKICNkZWZpbmUgQVI5MzAwX0dQSU9fSU5fVkFMX1MgICAgICAgICAgICAgICAgICAgICAwCiAKLSNkZWZpbmUgQVJfR1BJT19PRV9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSA/IDB4NDA1MCA6IDB4NDA0YykKKyNkZWZpbmUgQVJfR1BJT19PRV9PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAoQVJfU1JFVl85MzQwKGFoKSA/IDB4NDAzMCA6IFwKKwkJCQkJCSAgKEFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkgPyAweDQwNTAgOiAweDQwNGMpKQogI2RlZmluZSBBUl9HUElPX09FX09VVF9EUlYgICAgICAgICAgICAgICAgICAgICAgIDB4MwogI2RlZmluZSBBUl9HUElPX09FX09VVF9EUlZfTk8gICAgICAgICAgICAgICAgICAgIDB4MAogI2RlZmluZSBBUl9HUElPX09FX09VVF9EUlZfTE9XICAgICAgICAgICAgICAgICAgIDB4MQpAQCAtMTAyNCwxMSArMTAzMCwxMyBAQAogI2RlZmluZSBBUjcwMTBfR1BJT19JTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4NTIwMjQKICNkZWZpbmUgQVI3MDEwX0dQSU9fRlVOQ1RJT04gICAgICAgICAgICAgICAgICAgICAweDUyMDI4CiAKLSNkZWZpbmUgQVJfR1BJT19JTlRSX1BPTCAgICAgICAgICAgICAgICAgICAgICAgICAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSA/IDB4NDA1OCA6IDB4NDA1MCkKKyNkZWZpbmUgQVJfR1BJT19JTlRSX1BPTCAgICAgICAgICAgICAgICAgICAgICAgICAoQVJfU1JFVl85MzQwKGFoKSA/IDB4NDAzOCA6IFwKKwkJCQkJCSAgKEFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkgPyAweDQwNTggOiAweDQwNTApKQogI2RlZmluZSBBUl9HUElPX0lOVFJfUE9MX1ZBTCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMUZGRkYKICNkZWZpbmUgQVJfR1BJT19JTlRSX1BPTF9WQUxfUyAgICAgICAgICAgICAgICAgICAwCiAKLSNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUwgICAgICAgICAgICAgICAgICAgICAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSA/IDB4NDA1YyA6IDB4NDA1NCkKKyNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUwgICAgICAgICAgICAgICAgICAgICAoQVJfU1JFVl85MzQwKGFoKSA/IDB4NDAzYyA6IFwKKwkJCQkJCSAgKEFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkgPyAweDQwNWMgOiAweDQwNTQpKQogI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9QUklPUklUWV9ERUYgICAgIDB4MDAwMDAwMDQKICNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUxfQlRfUFJJT1JJVFlfUyAgICAgICAyCiAjZGVmaW5lIEFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX0ZSRVFVRU5DWV9ERUYgICAgMHgwMDAwMDAwOApAQCAtMTA0NiwxMyArMTA1NCwxNSBAQAogI2RlZmluZSBBUl9HUElPX1JUQ19SRVNFVF9PVkVSUklERV9FTkFCTEUgICAgICAgIDB4MDAwMTAwMDAKICNkZWZpbmUgQVJfR1BJT19KVEFHX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCiAKLSNkZWZpbmUgQVJfR1BJT19JTlBVVF9NVVgxICAgICAgICAgICAgICAgICAgICAgICAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSA/IDB4NDA2MCA6IDB4NDA1OCkKKyNkZWZpbmUgQVJfR1BJT19JTlBVVF9NVVgxICAgICAgICAgICAgICAgICAgICAgICAoQVJfU1JFVl85MzQwKGFoKSA/IDB4NDA0MCA6IFwKKwkJCQkJCSAgKEFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkgPyAweDQwNjAgOiAweDQwNTgpKQogI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDFfQlRfQUNUSVZFICAgICAgICAgICAgIDB4MDAwZjAwMDAKICNkZWZpbmUgQVJfR1BJT19JTlBVVF9NVVgxX0JUX0FDVElWRV9TICAgICAgICAgICAxNgogI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDFfQlRfUFJJT1JJVFkgICAgICAgICAgIDB4MDAwMDBmMDAKICNkZWZpbmUgQVJfR1BJT19JTlBVVF9NVVgxX0JUX1BSSU9SSVRZX1MgICAgICAgICA4CiAKLSNkZWZpbmUgQVJfR1BJT19JTlBVVF9NVVgyICAgICAgICAgICAgICAgICAgICAgICAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSA/IDB4NDA2NCA6IDB4NDA1YykKKyNkZWZpbmUgQVJfR1BJT19JTlBVVF9NVVgyICAgICAgICAgICAgICAgICAgICAgICAoQVJfU1JFVl85MzQwKGFoKSA/IDB4NDA0NCA6IFwKKwkJCQkJCSAgKEFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkgPyAweDQwNjQgOiAweDQwNWMpKQogI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDJfQ0xLMjUgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGYKICNkZWZpbmUgQVJfR1BJT19JTlBVVF9NVVgyX0NMSzI1X1MgICAgICAgICAgICAgICAwCiAjZGVmaW5lIEFSX0dQSU9fSU5QVVRfTVVYMl9SRlNJTEVOVCAgICAgICAgICAgICAgMHgwMDAwMDBmMApAQCAtMTA2MCwxMyArMTA3MCwxOCBAQAogI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDJfUlRDX1JFU0VUICAgICAgICAgICAgIDB4MDAwMDBmMDAKICNkZWZpbmUgQVJfR1BJT19JTlBVVF9NVVgyX1JUQ19SRVNFVF9TICAgICAgICAgICA4CiAKLSNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYMSAgICAgICAgICAgICAgICAgICAgICAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSA/IDB4NDA2OCA6IDB4NDA2MCkKLSNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYMiAgICAgICAgICAgICAgICAgICAgICAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSA/IDB4NDA2YyA6IDB4NDA2NCkKLSNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYMyAgICAgICAgICAgICAgICAgICAgICAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSA/IDB4NDA3MCA6IDB4NDA2OCkKKyNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYMSAgICAgICAgICAgICAgICAgICAgICAoQVJfU1JFVl85MzQwKGFoKSA/IDB4NDA0OCA6IFwKKwkJCQkJCSAgKEFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkgPyAweDQwNjggOiAweDQwNjApKQorI2RlZmluZSBBUl9HUElPX09VVFBVVF9NVVgyICAgICAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzNDAoYWgpID8gMHg0MDRjIDogXAorCQkJCQkJICAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSA/IDB4NDA2YyA6IDB4NDA2NCkpCisjZGVmaW5lIEFSX0dQSU9fT1VUUFVUX01VWDMgICAgICAgICAgICAgICAgICAgICAgKEFSX1NSRVZfOTM0MChhaCkgPyAweDQwNTAgOiBcCisJCQkJCQkgIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpID8gMHg0MDcwIDogMHg0MDY4KSkKIAotI2RlZmluZSBBUl9JTlBVVF9TVEFURSAgICAgICAgICAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpID8gMHg0MDc0IDogMHg0MDZjKQorI2RlZmluZSBBUl9JTlBVVF9TVEFURSAgICAgICAgICAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzNDAoYWgpID8gMHg0MDU0IDogXAorCQkJCQkJICAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSA/IDB4NDA3NCA6IDB4NDA2YykpCiAKLSNkZWZpbmUgQVJfRUVQUk9NX1NUQVRVU19EQVRBICAgICAgICAgICAgICAgICAgICAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSA/IDB4NDA4NCA6IDB4NDA3YykKKyNkZWZpbmUgQVJfRUVQUk9NX1NUQVRVU19EQVRBICAgICAgICAgICAgICAgICAgICAoQVJfU1JFVl85MzQwKGFoKSA/IDB4NDBjOCA6IFwKKwkJCQkJCSAgKEFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkgPyAweDQwODQgOiAweDQwN2MpKQogI2RlZmluZSBBUl9FRVBST01fU1RBVFVTX0RBVEFfVkFMICAgICAgICAgICAgICAgIDB4MDAwMGZmZmYKICNkZWZpbmUgQVJfRUVQUk9NX1NUQVRVU19EQVRBX1ZBTF9TICAgICAgICAgICAgICAwCiAjZGVmaW5lIEFSX0VFUFJPTV9TVEFUVVNfREFUQV9CVVNZICAgICAgICAgICAgICAgMHgwMDAxMDAwMApAQCAtMTA3NCwyOCArMTA4OSw1MSBAQAogI2RlZmluZSBBUl9FRVBST01fU1RBVFVTX0RBVEFfUFJPVF9BQ0NFU1MgICAgICAgIDB4MDAwNDAwMDAKICNkZWZpbmUgQVJfRUVQUk9NX1NUQVRVU19EQVRBX0FCU0VOVF9BQ0NFU1MgICAgICAweDAwMDgwMDAwCiAKLSNkZWZpbmUgQVJfT0JTICAgICAgICAgICAgICAgICAgKEFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkgPyAweDQwODggOiAweDQwODApCisjZGVmaW5lIEFSX09CUyAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzNDAoYWgpID8gMHg0MDVjIDogXAorCQkJCSAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSA/IDB4NDA4OCA6IDB4NDA4MCkpCiAKICNkZWZpbmUgQVJfR1BJT19QRFBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSA/IDB4NDA5MCA6IDB4NDA4OCkKIAotI2RlZmluZSBBUl9QQ0lFX01TSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpID8gMHg0MGE0IDogMHg0MDk0KQorI2RlZmluZSBBUl9QQ0lFX01TSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFSX1NSRVZfOTM0MChhaCkgPyAweDQwZDggOiBcCisJCQkJCQkgKEFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkgPyAweDQwYTQgOiAweDQwOTQpKQogI2RlZmluZSBBUl9QQ0lFX01TSV9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKIAotI2RlZmluZSBBUl9JTlRSX1BSSU9fU1lOQ19FTkFCTEUgIDB4NDBjNAotI2RlZmluZSBBUl9JTlRSX1BSSU9fQVNZTkNfTUFTSyAgIDB4NDBjOAotI2RlZmluZSBBUl9JTlRSX1BSSU9fU1lOQ19NQVNLICAgIDB4NDBjYwotI2RlZmluZSBBUl9JTlRSX1BSSU9fQVNZTkNfRU5BQkxFIDB4NDBkNAorI2RlZmluZSBBUl9JTlRSX1BSSU9fU1lOQ19FTkFCTEUgIChBUl9TUkVWXzkzNDAoYWgpID8gMHg0MDg4IDogMHg0MGM0KQorI2RlZmluZSBBUl9JTlRSX1BSSU9fQVNZTkNfTUFTSyAgIChBUl9TUkVWXzkzNDAoYWgpID8gMHg0MDhjIDogMHg0MGM4KQorI2RlZmluZSBBUl9JTlRSX1BSSU9fU1lOQ19NQVNLICAgIChBUl9TUkVWXzkzNDAoYWgpID8gMHg0MDkwIDogMHg0MGNjKQorI2RlZmluZSBBUl9JTlRSX1BSSU9fQVNZTkNfRU5BQkxFIChBUl9TUkVWXzkzNDAoYWgpID8gMHg0MDk0IDogMHg0MGQ0KQogI2RlZmluZSBBUl9FTlRfT1RQCQkgIDB4NDBkOAogI2RlZmluZSBBUl9FTlRfT1RQX0NIQUlOMl9ESVNBQkxFICAgICAgICAgICAgICAgMHgwMDAyMDAwMAogI2RlZmluZSBBUl9FTlRfT1RQX01QU0QJCTB4MDA4MDAwMDAKLSNkZWZpbmUgQVJfQ0gwX0JCX0RQTEwyICAgICAgICAgIDB4MTYxODQKLSNkZWZpbmUgQVJfQ0gwX0JCX0RQTEwzICAgICAgICAgIDB4MTYxODgKLSNkZWZpbmUgQVJfQ0gwX0REUl9EUExMMiAgICAgICAgIDB4MTYyNDQKLSNkZWZpbmUgQVJfQ0gwX0REUl9EUExMMyAgICAgICAgIDB4MTYyNDgKLSNkZWZpbmUgQVJfQ0gwX0RQTEwyX0tEICAgICAgICAgICAgICAweDAzRjgwMDAwCi0jZGVmaW5lIEFSX0NIMF9EUExMMl9LRF9TICAgICAgICAgICAgMTkKKworI2RlZmluZSBBUl9DSDBfQkJfRFBMTDEJCSAweDE2MTgwCisjZGVmaW5lIEFSX0NIMF9CQl9EUExMMV9SRUZESVYJIDB4RjgwMDAwMDAKKyNkZWZpbmUgQVJfQ0gwX0JCX0RQTEwxX1JFRkRJVl9TIDI3CisjZGVmaW5lIEFSX0NIMF9CQl9EUExMMV9OSU5JCSAweDA3RkMwMDAwCisjZGVmaW5lIEFSX0NIMF9CQl9EUExMMV9OSU5JX1MJIDE4CisjZGVmaW5lIEFSX0NIMF9CQl9EUExMMV9ORlJBQwkgMHgwMDAzRkZGRgorI2RlZmluZSBBUl9DSDBfQkJfRFBMTDFfTkZSQUNfUwkgMAorCisjZGVmaW5lIEFSX0NIMF9CQl9EUExMMgkJICAgICAweDE2MTg0CisjZGVmaW5lIEFSX0NIMF9CQl9EUExMMl9MT0NBTF9QTEwgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBBUl9DSDBfQkJfRFBMTDJfTE9DQUxfUExMX1MgICAgIDMwCiAjZGVmaW5lIEFSX0NIMF9EUExMMl9LSSAgICAgICAgICAgICAgMHgzQzAwMDAwMAogI2RlZmluZSBBUl9DSDBfRFBMTDJfS0lfUyAgICAgICAgICAgIDI2CisjZGVmaW5lIEFSX0NIMF9EUExMMl9LRCAgICAgICAgICAgICAgMHgwM0Y4MDAwMAorI2RlZmluZSBBUl9DSDBfRFBMTDJfS0RfUyAgICAgICAgICAgIDE5CisjZGVmaW5lIEFSX0NIMF9CQl9EUExMMl9FTl9ORUdUUklHICAgMHgwMDA0MDAwMAorI2RlZmluZSBBUl9DSDBfQkJfRFBMTDJfRU5fTkVHVFJJR19TIDE4CisjZGVmaW5lIEFSX0NIMF9CQl9EUExMMl9QTExfUFdECSAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBBUl9DSDBfQkJfRFBMTDJfUExMX1BXRF9TICAgIDE2CisjZGVmaW5lIEFSX0NIMF9CQl9EUExMMl9PVVRESVYJICAgICAweDAwMDBFMDAwCisjZGVmaW5lIEFSX0NIMF9CQl9EUExMMl9PVVRESVZfUyAgICAgMTMKKworI2RlZmluZSBBUl9DSDBfQkJfRFBMTDMgICAgICAgICAgMHgxNjE4OAorI2RlZmluZSBBUl9DSDBfQkJfRFBMTDNfUEhBU0VfU0hJRlQJMHgzRjgwMDAwMAorI2RlZmluZSBBUl9DSDBfQkJfRFBMTDNfUEhBU0VfU0hJRlRfUwkyMworCisjZGVmaW5lIEFSX0NIMF9ERFJfRFBMTDIgICAgICAgICAweDE2MjQ0CisjZGVmaW5lIEFSX0NIMF9ERFJfRFBMTDMgICAgICAgICAweDE2MjQ4CiAjZGVmaW5lIEFSX0NIMF9EUExMM19QSEFTRV9TSElGVCAgICAgMHgzRjgwMDAwMAogI2RlZmluZSBBUl9DSDBfRFBMTDNfUEhBU0VfU0hJRlRfUyAgIDIzCiAjZGVmaW5lIEFSX1BIWV9DQ0FfTk9NX1ZBTF8yR0haICAgICAgLTExOApAQCAtMTE0NCw2ICsxMTgyLDcgQEAKICNkZWZpbmUgQVJfUlRDX1BMTF9SRUZESVZfNSAgICAgMHgwMDAwMDBjMAogI2RlZmluZSBBUl9SVENfUExMX0NMS1NFTCAgICAgICAweDAwMDAwMzAwCiAjZGVmaW5lIEFSX1JUQ19QTExfQ0xLU0VMX1MgICAgIDgKKyNkZWZpbmUgQVJfUlRDX1BMTF9CWVBBU1MJMHgwMDAxMDAwMAogCiAjZGVmaW5lIFBMTDMgMHgxNjE4OAogI2RlZmluZSBQTEwzX0RPX01FQVNfTUFTSyAweDQwMDAwMDAwCkBAIC0xMTkwLDcgKzEyMjksOCBAQAogCiAvKiBSVENfREVSSVZFRF8qIC0gb25seSBmb3IgQVI5MTAwICovCiAKLSNkZWZpbmUgQVJfUlRDX0RFUklWRURfQ0xLICAgICAgICAgICAoQVJfUlRDX0JBU0UgKyAweDAwMzgpCisjZGVmaW5lIEFSX1JUQ19ERVJJVkVEX0NMSyBcCisJKEFSX1NSRVZfOTEwMChhaCkgPyAoQVJfUlRDX0JBU0UgKyAweDAwMzgpIDogMHg3MDM4KQogI2RlZmluZSBBUl9SVENfREVSSVZFRF9DTEtfUEVSSU9EICAgIDB4MDAwMGZmZmUKICNkZWZpbmUgQVJfUlRDX0RFUklWRURfQ0xLX1BFUklPRF9TICAxCiAKQEAgLTEzOTYsNiArMTQzNiw3IEBACiAjZGVmaW5lIEFSX1NUQV9JRDFfUENGICAgICAgICAgICAgIDB4MDAxMDAwMDAKICNkZWZpbmUgQVJfU1RBX0lEMV9VU0VfREVGQU5UICAgICAgMHgwMDIwMDAwMAogI2RlZmluZSBBUl9TVEFfSUQxX0RFRkFOVF9VUERBVEUgICAweDAwNDAwMDAwCisjZGVmaW5lIEFSX1NUQV9JRDFfQVI5MTAwX0JBX0ZJWCAgIDB4MDA0MDAwMDAKICNkZWZpbmUgQVJfU1RBX0lEMV9SVFNfVVNFX0RFRiAgICAgMHgwMDgwMDAwMAogI2RlZmluZSBBUl9TVEFfSUQxX0FDS0NUU182TUIgICAgICAweDAxMDAwMDAwCiAjZGVmaW5lIEFSX1NUQV9JRDFfQkFTRV9SQVRFXzExQiAgIDB4MDIwMDAwMDAKQEAgLTE2NjgsNiArMTcwOSwyMiBAQAogI2RlZmluZSBBUl9CVENPRVhfV0xfV0dIVCAgICAgICAgICAweGZmZmYwMDAwCiAjZGVmaW5lIEFSX0JUQ09FWF9XTF9XR0hUX1MgICAgICAgIDE2CiAKKyNkZWZpbmUgQVJfQlRfQ09FWF9XTF9XRUlHSFRTMCAgICAgMHg4MTc0CisjZGVmaW5lIEFSX0JUX0NPRVhfV0xfV0VJR0hUUzEgICAgIDB4ODFjNAorCisjZGVmaW5lIEFSX0JUX0NPRVhfQlRfV0VJR0hUUzAgICAgIDB4ODNhYworI2RlZmluZSBBUl9CVF9DT0VYX0JUX1dFSUdIVFMxICAgICAweDgzYjAKKyNkZWZpbmUgQVJfQlRfQ09FWF9CVF9XRUlHSFRTMiAgICAgMHg4M2I0CisjZGVmaW5lIEFSX0JUX0NPRVhfQlRfV0VJR0hUUzMgICAgIDB4ODNiOAorCisjZGVmaW5lIEFSOTMwMF9CVF9XR0hUICAgICAgICAgICAgICAgICAgICAgMHhjY2NjNDQ0NAorI2RlZmluZSBBUjkzMDBfU1RPTVBfQUxMX1dMQU5fV0dIVDAgICAgICAgIDB4ZmZmZmZmZjAKKyNkZWZpbmUgQVI5MzAwX1NUT01QX0FMTF9XTEFOX1dHSFQxICAgICAgICAweGZmZmZmZmYwCisjZGVmaW5lIEFSOTMwMF9TVE9NUF9MT1dfV0xBTl9XR0hUMCAgICAgICAgMHg4ODg4ODg4MAorI2RlZmluZSBBUjkzMDBfU1RPTVBfTE9XX1dMQU5fV0dIVDEgICAgICAgIDB4ODg4ODg4ODAKKyNkZWZpbmUgQVI5MzAwX1NUT01QX05PTkVfV0xBTl9XR0hUMCAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIEFSOTMwMF9TVE9NUF9OT05FX1dMQU5fV0dIVDEgICAgICAgMHgwMDAwMDAwMAorCiAjZGVmaW5lIEFSX0JUX0NPRVhfTU9ERTIgICAgICAgICAgIDB4ODE3YwogI2RlZmluZSBBUl9CVF9CQ05fTUlTU19USFJFU0ggICAgICAweDAwMDAwMGZmCiAjZGVmaW5lIEFSX0JUX0JDTl9NSVNTX1RIUkVTSF9TICAgIDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93bWkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93bWkuYwppbmRleCBkM2QyNDkwLi5mOWIxZWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5jCkBAIC0yMywyMCArMjMsMTggQEAKIAkJcmV0dXJuICJXTUlfRUNIT19DTURJRCI7CiAJY2FzZSBXTUlfQUNDRVNTX01FTU9SWV9DTURJRDoKIAkJcmV0dXJuICJXTUlfQUNDRVNTX01FTU9SWV9DTURJRCI7CisJY2FzZSBXTUlfR0VUX0ZXX1ZFUlNJT046CisJCXJldHVybiAiV01JX0dFVF9GV19WRVJTSU9OIjsKIAljYXNlIFdNSV9ESVNBQkxFX0lOVFJfQ01ESUQ6CiAJCXJldHVybiAiV01JX0RJU0FCTEVfSU5UUl9DTURJRCI7CiAJY2FzZSBXTUlfRU5BQkxFX0lOVFJfQ01ESUQ6CiAJCXJldHVybiAiV01JX0VOQUJMRV9JTlRSX0NNRElEIjsKLQljYXNlIFdNSV9SWF9MSU5LX0NNRElEOgotCQlyZXR1cm4gIldNSV9SWF9MSU5LX0NNRElEIjsKIAljYXNlIFdNSV9BVEhfSU5JVF9DTURJRDoKIAkJcmV0dXJuICJXTUlfQVRIX0lOSVRfQ01ESUQiOwogCWNhc2UgV01JX0FCT1JUX1RYUV9DTURJRDoKIAkJcmV0dXJuICJXTUlfQUJPUlRfVFhRX0NNRElEIjsKIAljYXNlIFdNSV9TVE9QX1RYX0RNQV9DTURJRDoKIAkJcmV0dXJuICJXTUlfU1RPUF9UWF9ETUFfQ01ESUQiOwotCWNhc2UgV01JX1NUT1BfRE1BX1JFQ1ZfQ01ESUQ6Ci0JCXJldHVybiAiV01JX1NUT1BfRE1BX1JFQ1ZfQ01ESUQiOwogCWNhc2UgV01JX0FCT1JUX1RYX0RNQV9DTURJRDoKIAkJcmV0dXJuICJXTUlfQUJPUlRfVFhfRE1BX0NNRElEIjsKIAljYXNlIFdNSV9EUkFJTl9UWFFfQ01ESUQ6CkBAIC01MSw4ICs0OSw2IEBACiAJCXJldHVybiAiV01JX0ZMVVNIX1JFQ1ZfQ01ESUQiOwogCWNhc2UgV01JX1NFVF9NT0RFX0NNRElEOgogCQlyZXR1cm4gIldNSV9TRVRfTU9ERV9DTURJRCI7Ci0JY2FzZSBXTUlfUkVTRVRfQ01ESUQ6Ci0JCXJldHVybiAiV01JX1JFU0VUX0NNRElEIjsKIAljYXNlIFdNSV9OT0RFX0NSRUFURV9DTURJRDoKIAkJcmV0dXJuICJXTUlfTk9ERV9DUkVBVEVfQ01ESUQiOwogCWNhc2UgV01JX05PREVfUkVNT1ZFX0NNRElEOgpAQCAtNjEsOCArNTcsNiBAQAogCQlyZXR1cm4gIldNSV9WQVBfUkVNT1ZFX0NNRElEIjsKIAljYXNlIFdNSV9WQVBfQ1JFQVRFX0NNRElEOgogCQlyZXR1cm4gIldNSV9WQVBfQ1JFQVRFX0NNRElEIjsKLQljYXNlIFdNSV9CRUFDT05fVVBEQVRFX0NNRElEOgotCQlyZXR1cm4gIldNSV9CRUFDT05fVVBEQVRFX0NNRElEIjsKIAljYXNlIFdNSV9SRUdfUkVBRF9DTURJRDoKIAkJcmV0dXJuICJXTUlfUkVHX1JFQURfQ01ESUQiOwogCWNhc2UgV01JX1JFR19XUklURV9DTURJRDoKQEAgLTcxLDIyICs2NSwyMiBAQAogCQlyZXR1cm4gIldNSV9SQ19TVEFURV9DSEFOR0VfQ01ESUQiOwogCWNhc2UgV01JX1JDX1JBVEVfVVBEQVRFX0NNRElEOgogCQlyZXR1cm4gIldNSV9SQ19SQVRFX1VQREFURV9DTURJRCI7Ci0JY2FzZSBXTUlfREVCVUdfSU5GT19DTURJRDoKLQkJcmV0dXJuICJXTUlfREVCVUdfSU5GT19DTURJRCI7Ci0JY2FzZSBXTUlfSE9TVF9BVFRBQ0g6Ci0JCXJldHVybiAiV01JX0hPU1RfQVRUQUNIIjsKIAljYXNlIFdNSV9UQVJHRVRfSUNfVVBEQVRFX0NNRElEOgogCQlyZXR1cm4gIldNSV9UQVJHRVRfSUNfVVBEQVRFX0NNRElEIjsKLQljYXNlIFdNSV9UR1RfU1RBVFNfQ01ESUQ6Ci0JCXJldHVybiAiV01JX1RHVF9TVEFUU19DTURJRCI7CiAJY2FzZSBXTUlfVFhfQUdHUl9FTkFCTEVfQ01ESUQ6CiAJCXJldHVybiAiV01JX1RYX0FHR1JfRU5BQkxFX0NNRElEIjsKIAljYXNlIFdNSV9UR1RfREVUQUNIX0NNRElEOgogCQlyZXR1cm4gIldNSV9UR1RfREVUQUNIX0NNRElEIjsKLQljYXNlIFdNSV9UR1RfVFhRX0VOQUJMRV9DTURJRDoKLQkJcmV0dXJuICJXTUlfVEdUX1RYUV9FTkFCTEVfQ01ESUQiOwotCWNhc2UgV01JX0FHR1JfTElNSVRfQ01EOgotCQlyZXR1cm4gIldNSV9BR0dSX0xJTUlUX0NNRCI7CisJY2FzZSBXTUlfTk9ERV9VUERBVEVfQ01ESUQ6CisJCXJldHVybiAiV01JX05PREVfVVBEQVRFX0NNRElEIjsKKwljYXNlIFdNSV9JTlRfU1RBVFNfQ01ESUQ6CisJCXJldHVybiAiV01JX0lOVF9TVEFUU19DTURJRCI7CisJY2FzZSBXTUlfVFhfU1RBVFNfQ01ESUQ6CisJCXJldHVybiAiV01JX1RYX1NUQVRTX0NNRElEIjsKKwljYXNlIFdNSV9SWF9TVEFUU19DTURJRDoKKwkJcmV0dXJuICJXTUlfUlhfU1RBVFNfQ01ESUQiOworCWNhc2UgV01JX0JJVFJBVEVfTUFTS19DTURJRDoKKwkJcmV0dXJuICJXTUlfQklUUkFURV9NQVNLX0NNRElEIjsKIAl9CiAKIAlyZXR1cm4gIkJvZ3VzIjsKQEAgLTEwMiw5ICs5NiwxNSBAQAogCiAJd21pLT5kcnZfcHJpdiA9IHByaXY7CiAJd21pLT5zdG9wcGVkID0gZmFsc2U7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmd21pLT53bWlfZXZlbnRfcXVldWUpOworCXNwaW5fbG9ja19pbml0KCZ3bWktPndtaV9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmd21pLT5ldmVudF9sb2NrKTsKIAltdXRleF9pbml0KCZ3bWktPm9wX211dGV4KTsKIAltdXRleF9pbml0KCZ3bWktPm11bHRpX3dyaXRlX211dGV4KTsKIAlpbml0X2NvbXBsZXRpb24oJndtaS0+Y21kX3dhaXQpOworCUlOSVRfTElTVF9IRUFEKCZ3bWktPnBlbmRpbmdfdHhfZXZlbnRzKTsKKwl0YXNrbGV0X2luaXQoJndtaS0+d21pX2V2ZW50X3Rhc2tsZXQsIGF0aDlrX3dtaV9ldmVudF90YXNrbGV0LAorCQkgICAgICh1bnNpZ25lZCBsb25nKXdtaSk7CiAKIAlyZXR1cm4gd21pOwogfQpAQCAtMTIwLDExICsxMjAsNjUgQEAKIAlrZnJlZShwcml2LT53bWkpOwogfQogCi12b2lkIGF0aDlrX3N3YmFfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit2b2lkIGF0aDlrX3dtaV9ldmVudF9kcmFpbihzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKnByaXYpCiB7Ci0Jc3RydWN0IGF0aDlrX2h0Y19wcml2ICpwcml2ID0gKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqKWRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWF0aDlrX2h0Y19zd2JhKHByaXYsIHByaXYtPndtaS0+YmVhY29uX3BlbmRpbmcpOworCXRhc2tsZXRfa2lsbCgmcHJpdi0+d21pLT53bWlfZXZlbnRfdGFza2xldCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPndtaS0+d21pX2xvY2ssIGZsYWdzKTsKKwlfX3NrYl9xdWV1ZV9wdXJnZSgmcHJpdi0+d21pLT53bWlfZXZlbnRfcXVldWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPndtaS0+d21pX2xvY2ssIGZsYWdzKTsKK30KKwordm9pZCBhdGg5a193bWlfZXZlbnRfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHdtaSAqd21pID0gKHN0cnVjdCB3bWkgKilkYXRhOworCXN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdiA9IHdtaS0+ZHJ2X3ByaXY7CisJc3RydWN0IHdtaV9jbWRfaGRyICpoZHI7CisJdm9pZCAqd21pX2V2ZW50OworCXN0cnVjdCB3bWlfZXZlbnRfc3diYSAqc3diYTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBjbWRfaWQ7CisKKwlkbyB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZ3bWktPndtaV9sb2NrLCBmbGFncyk7CisJCXNrYiA9IF9fc2tiX2RlcXVldWUoJndtaS0+d21pX2V2ZW50X3F1ZXVlKTsKKwkJaWYgKCFza2IpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndtaS0+d21pX2xvY2ssIGZsYWdzKTsKKwkJCXJldHVybjsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bWktPndtaV9sb2NrLCBmbGFncyk7CisKKwkJaGRyID0gKHN0cnVjdCB3bWlfY21kX2hkciAqKSBza2ItPmRhdGE7CisJCWNtZF9pZCA9IGJlMTZfdG9fY3B1KGhkci0+Y29tbWFuZF9pZCk7CisJCXdtaV9ldmVudCA9IHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCB3bWlfY21kX2hkcikpOworCisJCXN3aXRjaCAoY21kX2lkKSB7CisJCWNhc2UgV01JX1NXQkFfRVZFTlRJRDoKKwkJCXN3YmEgPSAoc3RydWN0IHdtaV9ldmVudF9zd2JhICopIHdtaV9ldmVudDsKKwkJCWF0aDlrX2h0Y19zd2JhKHByaXYsIHN3YmEpOworCQkJYnJlYWs7CisJCWNhc2UgV01JX0ZBVEFMX0VWRU5USUQ6CisJCQlpZWVlODAyMTFfcXVldWVfd29yayh3bWktPmRydl9wcml2LT5odywKKwkJCQkJICAgICAmd21pLT5kcnZfcHJpdi0+ZmF0YWxfd29yayk7CisJCQlicmVhazsKKwkJY2FzZSBXTUlfVFhTVEFUVVNfRVZFTlRJRDoKKwkJCXNwaW5fbG9ja19iaCgmcHJpdi0+dHgudHhfbG9jayk7CisJCQlpZiAocHJpdi0+dHguZmxhZ3MgJiBBVEg5S19IVENfT1BfVFhfRFJBSU4pIHsKKwkJCQlzcGluX3VubG9ja19iaCgmcHJpdi0+dHgudHhfbG9jayk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlzcGluX3VubG9ja19iaCgmcHJpdi0+dHgudHhfbG9jayk7CisKKwkJCWF0aDlrX2h0Y190eHN0YXR1cyhwcml2LCB3bWlfZXZlbnQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJCWtmcmVlX3NrYihza2IpOworCX0gd2hpbGUgKDEpOwogfQogCiB2b2lkIGF0aDlrX2ZhdGFsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtMTUzLDEwICsyMDcsNiBAQAogCXN0cnVjdCB3bWkgKndtaSA9IChzdHJ1Y3Qgd21pICopIHByaXY7CiAJc3RydWN0IHdtaV9jbWRfaGRyICpoZHI7CiAJdTE2IGNtZF9pZDsKLQl2b2lkICp3bWlfZXZlbnQ7Ci0jaWZkZWYgQ09ORklHX0FUSDlLX0hUQ19ERUJVR0ZTCi0JX19iZTMyIHR4cmF0ZTsKLSNlbmRpZgogCiAJaWYgKHVubGlrZWx5KHdtaS0+c3RvcHBlZCkpCiAJCWdvdG8gZnJlZV9za2I7CkBAIC0xNjUsMjYgKzIxNSwxMCBAQAogCWNtZF9pZCA9IGJlMTZfdG9fY3B1KGhkci0+Y29tbWFuZF9pZCk7CiAKIAlpZiAoY21kX2lkICYgMHgxMDAwKSB7Ci0JCXdtaV9ldmVudCA9IHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCB3bWlfY21kX2hkcikpOwotCQlzd2l0Y2ggKGNtZF9pZCkgewotCQljYXNlIFdNSV9TV0JBX0VWRU5USUQ6Ci0JCQl3bWktPmJlYWNvbl9wZW5kaW5nID0gKih1OCAqKXdtaV9ldmVudDsKLQkJCXRhc2tsZXRfc2NoZWR1bGUoJndtaS0+ZHJ2X3ByaXYtPnN3YmFfdGFza2xldCk7Ci0JCQlicmVhazsKLQkJY2FzZSBXTUlfRkFUQUxfRVZFTlRJRDoKLQkJCWllZWU4MDIxMV9xdWV1ZV93b3JrKHdtaS0+ZHJ2X3ByaXYtPmh3LAotCQkJCQkgICAgICZ3bWktPmRydl9wcml2LT5mYXRhbF93b3JrKTsKLQkJCWJyZWFrOwotCQljYXNlIFdNSV9UWFJBVEVfRVZFTlRJRDoKLSNpZmRlZiBDT05GSUdfQVRIOUtfSFRDX0RFQlVHRlMKLQkJCXR4cmF0ZSA9ICgoc3RydWN0IHdtaV9ldmVudF90eHJhdGUgKil3bWlfZXZlbnQpLT50eHJhdGU7Ci0JCQl3bWktPmRydl9wcml2LT5kZWJ1Zy50eHJhdGUgPSBiZTMyX3RvX2NwdSh0eHJhdGUpOwotI2VuZGlmCi0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JCWtmcmVlX3NrYihza2IpOworCQlzcGluX2xvY2soJndtaS0+d21pX2xvY2spOworCQlfX3NrYl9xdWV1ZV90YWlsKCZ3bWktPndtaV9ldmVudF9xdWV1ZSwgc2tiKTsKKwkJc3Bpbl91bmxvY2soJndtaS0+d21pX2xvY2spOworCQl0YXNrbGV0X3NjaGVkdWxlKCZ3bWktPndtaV9ldmVudF90YXNrbGV0KTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjQzLDcgKzI3Nyw3IEBACiAJaGRyLT5jb21tYW5kX2lkID0gY3B1X3RvX2JlMTYoY21kKTsKIAloZHItPnNlcV9ubyA9IGNwdV90b19iZTE2KCsrd21pLT50eF9zZXFfaWQpOwogCi0JcmV0dXJuIGh0Y19zZW5kKHdtaS0+aHRjLCBza2IsIHdtaS0+Y3RybF9lcGlkLCBOVUxMKTsKKwlyZXR1cm4gaHRjX3NlbmRfZXBpZCh3bWktPmh0Yywgc2tiLCB3bWktPmN0cmxfZXBpZCk7CiB9CiAKIGludCBhdGg5a193bWlfY21kKHN0cnVjdCB3bWkgKndtaSwgZW51bSB3bWlfY21kX2lkIGNtZF9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93bWkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93bWkuaAppbmRleCA0MjA4NDI3Li42MDk1ZWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd21pLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dtaS5oCkBAIC0xNyw3ICsxNyw2IEBACiAjaWZuZGVmIFdNSV9ICiAjZGVmaW5lIFdNSV9ICiAKLQogc3RydWN0IHdtaV9ldmVudF90eHJhdGUgewogCV9fYmUzMiB0eHJhdGU7CiAJc3RydWN0IHsKQEAgLTMxLDE4ICszMCw2NSBAQAogCV9fYmUxNiBzZXFfbm87CiB9IF9fcGFja2VkOwogCitzdHJ1Y3Qgd21pX2Z3X3ZlcnNpb24geworCV9fYmUxNiBtYWpvcjsKKwlfX2JlMTYgbWlub3I7CisKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB3bWlfZXZlbnRfc3diYSB7CisJX19iZTY0IHRzZjsKKwl1OCBiZWFjb25fcGVuZGluZzsKK307CisKKy8qCisgKiA2NCAtIEhUQyBoZWFkZXIgLSBXTUkgaGVhZGVyIC0gMSAvIHR4c3RhdHVzCisgKiBBbmQgc29tZSBvdGhlciBoZHIuIHNwYWNlIGlzIGFsc28gYWNjb3VudGVkIGZvci4KKyAqIDEyIHNlZW1zIHRvIGJlIHRoZSBtYWdpYyBudW1iZXIuCisgKi8KKyNkZWZpbmUgSFRDX01BWF9UWF9TVEFUVVMgMTIKKworI2RlZmluZSBBVEg5S19IVENfVFhTVEFUX0FDSyAgICAgICAgQklUKDApCisjZGVmaW5lIEFUSDlLX0hUQ19UWFNUQVRfRklMVCAgICAgICBCSVQoMSkKKyNkZWZpbmUgQVRIOUtfSFRDX1RYU1RBVF9SVENfQ1RTICAgIEJJVCgyKQorI2RlZmluZSBBVEg5S19IVENfVFhTVEFUX01DUyAgICAgICAgQklUKDMpCisjZGVmaW5lIEFUSDlLX0hUQ19UWFNUQVRfQ1c0MCAgICAgICBCSVQoNCkKKyNkZWZpbmUgQVRIOUtfSFRDX1RYU1RBVF9TR0kgICAgICAgIEJJVCg1KQorCisvKgorICogTGVnYWN5IHJhdGVzIGFyZSBpbmRpY2F0ZWQgYXMgaW5kaWNlcy4KKyAqIEhUIHJhdGVzIGFyZSBpbmRpY2F0ZWQgYXMgZG90MTEgbnVtYmVycy4KKyAqIFRoaXMgYWxsb3dzIHVzIHRvIHJlc3JpY3QgdGhlIHJhdGUgZmllbGQKKyAqIHRvIDQgYml0cy4KKyAqLworI2RlZmluZSBBVEg5S19IVENfVFhTVEFUX1JBVEUgICAgICAgMHgwZgorI2RlZmluZSBBVEg5S19IVENfVFhTVEFUX1JBVEVfUyAgICAgMAorCisjZGVmaW5lIEFUSDlLX0hUQ19UWFNUQVRfRVBJRCAgICAgICAweGYwCisjZGVmaW5lIEFUSDlLX0hUQ19UWFNUQVRfRVBJRF9TICAgICA0CisKK3N0cnVjdCBfX3dtaV9ldmVudF90eHN0YXR1cyB7CisJdTggY29va2llOworCXU4IHRzX3JhdGU7IC8qIEFsc28gaG9sZHMgRVAgSUQgKi8KKwl1OCB0c19mbGFnczsKK307CisKK3N0cnVjdCB3bWlfZXZlbnRfdHhzdGF0dXMgeworCXU4IGNudDsKKwlzdHJ1Y3QgX193bWlfZXZlbnRfdHhzdGF0dXMgdHhzdGF0dXNbSFRDX01BWF9UWF9TVEFUVVNdOworfSBfX3BhY2tlZDsKKwogZW51bSB3bWlfY21kX2lkIHsKIAlXTUlfRUNIT19DTURJRCA9IDB4MDAwMSwKIAlXTUlfQUNDRVNTX01FTU9SWV9DTURJRCwKIAogCS8qIENvbW1hbmRzIHRvIFRhcmdldCAqLworCVdNSV9HRVRfRldfVkVSU0lPTiwKIAlXTUlfRElTQUJMRV9JTlRSX0NNRElELAogCVdNSV9FTkFCTEVfSU5UUl9DTURJRCwKLQlXTUlfUlhfTElOS19DTURJRCwKIAlXTUlfQVRIX0lOSVRfQ01ESUQsCiAJV01JX0FCT1JUX1RYUV9DTURJRCwKIAlXTUlfU1RPUF9UWF9ETUFfQ01ESUQsCi0JV01JX1NUT1BfRE1BX1JFQ1ZfQ01ESUQsCiAJV01JX0FCT1JUX1RYX0RNQV9DTURJRCwKIAlXTUlfRFJBSU5fVFhRX0NNRElELAogCVdNSV9EUkFJTl9UWFFfQUxMX0NNRElELApAQCAtNTAsMjQgKzk2LDIyIEBACiAJV01JX1NUT1BfUkVDVl9DTURJRCwKIAlXTUlfRkxVU0hfUkVDVl9DTURJRCwKIAlXTUlfU0VUX01PREVfQ01ESUQsCi0JV01JX1JFU0VUX0NNRElELAogCVdNSV9OT0RFX0NSRUFURV9DTURJRCwKIAlXTUlfTk9ERV9SRU1PVkVfQ01ESUQsCiAJV01JX1ZBUF9SRU1PVkVfQ01ESUQsCiAJV01JX1ZBUF9DUkVBVEVfQ01ESUQsCi0JV01JX0JFQUNPTl9VUERBVEVfQ01ESUQsCiAJV01JX1JFR19SRUFEX0NNRElELAogCVdNSV9SRUdfV1JJVEVfQ01ESUQsCiAJV01JX1JDX1NUQVRFX0NIQU5HRV9DTURJRCwKIAlXTUlfUkNfUkFURV9VUERBVEVfQ01ESUQsCi0JV01JX0RFQlVHX0lORk9fQ01ESUQsCi0JV01JX0hPU1RfQVRUQUNILAogCVdNSV9UQVJHRVRfSUNfVVBEQVRFX0NNRElELAotCVdNSV9UR1RfU1RBVFNfQ01ESUQsCiAJV01JX1RYX0FHR1JfRU5BQkxFX0NNRElELAogCVdNSV9UR1RfREVUQUNIX0NNRElELAotCVdNSV9UR1RfVFhRX0VOQUJMRV9DTURJRCwKLQlXTUlfQUdHUl9MSU1JVF9DTUQgPSAweDAwMjYsCisJV01JX05PREVfVVBEQVRFX0NNRElELAorCVdNSV9JTlRfU1RBVFNfQ01ESUQsCisJV01JX1RYX1NUQVRTX0NNRElELAorCVdNSV9SWF9TVEFUU19DTURJRCwKKwlXTUlfQklUUkFURV9NQVNLX0NNRElELAogfTsKIAogZW51bSB3bWlfZXZlbnRfaWQgewpAQCAtNzYsOSArMTIwLDggQEAKIAlXTUlfRkFUQUxfRVZFTlRJRCwKIAlXTUlfVFhUT19FVkVOVElELAogCVdNSV9CTUlTU19FVkVOVElELAotCVdNSV9XTEFOX1RYQ09NUF9FVkVOVElELAogCVdNSV9ERUxCQV9FVkVOVElELAotCVdNSV9UWFJBVEVfRVZFTlRJRCwKKwlXTUlfVFhTVEFUVVNfRVZFTlRJRCwKIH07CiAKICNkZWZpbmUgTUFYX0NNRF9OVU1CRVIgNjIKQEAgLTg4LDYgKzEzMSwxMiBAQAogCV9fYmUzMiB2YWw7CiB9OwogCitzdHJ1Y3QgYXRoOWtfaHRjX3R4X2V2ZW50IHsKKwlpbnQgY291bnQ7CisJc3RydWN0IF9fd21pX2V2ZW50X3R4c3RhdHVzIHR4czsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCiBzdHJ1Y3Qgd21pIHsKIAlzdHJ1Y3QgYXRoOWtfaHRjX3ByaXYgKmRydl9wcml2OwogCXN0cnVjdCBodGNfdGFyZ2V0ICpodGM7CkBAIC05NSwxMiArMTQ0LDE2IEBACiAJc3RydWN0IG11dGV4IG9wX211dGV4OwogCXN0cnVjdCBjb21wbGV0aW9uIGNtZF93YWl0OwogCWVudW0gd21pX2NtZF9pZCBsYXN0X2NtZF9pZDsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHdtaV9ldmVudF9xdWV1ZTsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3Qgd21pX2V2ZW50X3Rhc2tsZXQ7CiAJdTE2IHR4X3NlcV9pZDsKIAl1OCAqY21kX3JzcF9idWY7CiAJdTMyIGNtZF9yc3BfbGVuOwogCWJvb2wgc3RvcHBlZDsKIAotCXU4IGJlYWNvbl9wZW5kaW5nOworCXN0cnVjdCBsaXN0X2hlYWQgcGVuZGluZ190eF9ldmVudHM7CisJc3BpbmxvY2tfdCBldmVudF9sb2NrOworCiAJc3BpbmxvY2tfdCB3bWlfbG9jazsKIAogCWF0b21pY190IG13cml0ZV9jbnQ7CkBAIC0xMTcsOCArMTcwLDkgQEAKIAkJICB1OCAqY21kX2J1ZiwgdTMyIGNtZF9sZW4sCiAJCSAgdTggKnJzcF9idWYsIHUzMiByc3BfbGVuLAogCQkgIHUzMiB0aW1lb3V0KTsKLXZvaWQgYXRoOWtfc3diYV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7Cit2b2lkIGF0aDlrX3dtaV9ldmVudF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CiB2b2lkIGF0aDlrX2ZhdGFsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3ZvaWQgYXRoOWtfd21pX2V2ZW50X2RyYWluKHN0cnVjdCBhdGg5a19odGNfcHJpdiAqcHJpdik7CiAKICNkZWZpbmUgV01JX0NNRChfd21pX2NtZCkJCQkJCQlcCiAJZG8gewkJCQkJCQkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMKaW5kZXggODhmYTdmZC4uOTdkZDFmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jCkBAIC0zNTcsNiArMzU3LDcgQEAKIAlzdHJ1Y3QgYXRoX2ZyYW1lX2luZm8gKmZpOwogCWludCBuZnJhbWVzOwogCXU4IHRpZG5vOworCWJvb2wgY2xlYXJfZmlsdGVyOwogCiAJc2tiID0gYmYtPmJmX21wZHU7CiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwpAQCAtNDQxLDIyICs0NDIsMjQgQEAKIAkJCS8qIHRyYW5zbWl0IGNvbXBsZXRpb24gKi8KIAkJCWFja2VkX2NudCsrOwogCQl9IGVsc2UgewotCQkJaWYgKCEodGlkLT5zdGF0ZSAmIEFHR1JfQ0xFQU5VUCkgJiYgcmV0cnkpIHsKLQkJCQlpZiAoZmktPnJldHJpZXMgPCBBVEhfTUFYX1NXX1JFVFJJRVMpIHsKLQkJCQkJYXRoX3R4X3NldF9yZXRyeShzYywgdHhxLCBiZi0+YmZfbXBkdSk7Ci0JCQkJCXR4cGVuZGluZyA9IDE7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX1hSRVRSWTsKLQkJCQkJdHhmYWlsID0gMTsKLQkJCQkJc2VuZGJhciA9IDE7Ci0JCQkJCXR4ZmFpbF9jbnQrKzsKLQkJCQl9Ci0JCQl9IGVsc2UgeworCQkJaWYgKCh0aWQtPnN0YXRlICYgQUdHUl9DTEVBTlVQKSB8fCAhcmV0cnkpIHsKIAkJCQkvKgogCQkJCSAqIGNsZWFudXAgaW4gcHJvZ3Jlc3MsIGp1c3QgZmFpbAogCQkJCSAqIHRoZSB1bi1hY2tlZCBzdWItZnJhbWVzCiAJCQkJICovCiAJCQkJdHhmYWlsID0gMTsKKwkJCX0gZWxzZSBpZiAoZmktPnJldHJpZXMgPCBBVEhfTUFYX1NXX1JFVFJJRVMpIHsKKwkJCQlpZiAoISh0cy0+dHNfc3RhdHVzICYgQVRIOUtfVFhFUlJfRklMVCkgfHwKKwkJCQkgICAgIWFuLT5zbGVlcGluZykKKwkJCQkJYXRoX3R4X3NldF9yZXRyeShzYywgdHhxLCBiZi0+YmZfbXBkdSk7CisKKwkJCQljbGVhcl9maWx0ZXIgPSB0cnVlOworCQkJCXR4cGVuZGluZyA9IDE7CisJCQl9IGVsc2UgeworCQkJCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9YUkVUUlk7CisJCQkJdHhmYWlsID0gMTsKKwkJCQlzZW5kYmFyID0gMTsKKwkJCQl0eGZhaWxfY250Kys7CiAJCQl9CiAJCX0KIApAQCAtNDk2LDYgKzQ5OSw3IEBACiAJCQkJIXR4ZmFpbCwgc2VuZGJhcik7CiAJCX0gZWxzZSB7CiAJCQkvKiByZXRyeSB0aGUgdW4tYWNrZWQgb25lcyAqLworCQkJYXRoOWtfaHdfc2V0X2NscmRtYXNrKHNjLT5zY19haCwgYmYtPmJmX2Rlc2MsIGZhbHNlKTsKIAkJCWlmICghKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0VETUEpKSB7CiAJCQkJaWYgKGJmLT5iZl9uZXh0ID09IE5VTEwgJiYgYmZfbGFzdC0+YmZfc3RhbGUpIHsKIAkJCQkJc3RydWN0IGF0aF9idWYgKnRiZjsKQEAgLTU0Niw3ICs1NTAsMTIgQEAKIAogCS8qIHByZXBlbmQgdW4tYWNrZWQgZnJhbWVzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBlbmRpbmcgZnJhbWUgcXVldWUgKi8KIAlpZiAoIWxpc3RfZW1wdHkoJmJmX3BlbmRpbmcpKSB7CisJCWlmIChhbi0+c2xlZXBpbmcpCisJCQlpZWVlODAyMTFfc3RhX3NldF90aW0oc3RhKTsKKwogCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCQlpZiAoY2xlYXJfZmlsdGVyKQorCQkJdGlkLT5hYy0+Y2xlYXJfcHNfZmlsdGVyID0gdHJ1ZTsKIAkJbGlzdF9zcGxpY2UoJmJmX3BlbmRpbmcsICZ0aWQtPmJ1Zl9xKTsKIAkJYXRoX3R4X3F1ZXVlX3RpZCh0eHEsIHRpZCk7CiAJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKQEAgLTgxNiw2ICs4MjUsMTEgQEAKIAkJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZiZl9xLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CiAJCWJmLT5iZl9sYXN0YmYgPSBsaXN0X2VudHJ5KGJmX3EucHJldiwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwogCisJCWlmICh0aWQtPmFjLT5jbGVhcl9wc19maWx0ZXIpIHsKKwkJCXRpZC0+YWMtPmNsZWFyX3BzX2ZpbHRlciA9IGZhbHNlOworCQkJYXRoOWtfaHdfc2V0X2NscmRtYXNrKHNjLT5zY19haCwgYmYtPmJmX2Rlc2MsIHRydWUpOworCQl9CisKIAkJLyogaWYgb25seSBvbmUgZnJhbWUsIHNlbmQgYXMgbm9uLWFnZ3JlZ2F0ZSAqLwogCQlpZiAoYmYgPT0gYmYtPmJmX2xhc3RiZikgewogCQkJZmkgPSBnZXRfZnJhbWVfaW5mbyhiZi0+YmZfbXBkdSk7CkBAIC04OTYsNiArOTEwLDY3IEBACiAJYXRoX3R4X2ZsdXNoX3RpZChzYywgdHh0aWQpOwogfQogCitib29sIGF0aF90eF9hZ2dyX3NsZWVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuKQoreworCXN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkOworCXN0cnVjdCBhdGhfYXR4X2FjICphYzsKKwlzdHJ1Y3QgYXRoX3R4cSAqdHhxOworCWJvb2wgYnVmZmVyZWQgPSBmYWxzZTsKKwlpbnQgdGlkbm87CisKKwlmb3IgKHRpZG5vID0gMCwgdGlkID0gJmFuLT50aWRbdGlkbm9dOworCSAgICAgdGlkbm8gPCBXTUVfTlVNX1RJRDsgdGlkbm8rKywgdGlkKyspIHsKKworCQlpZiAoIXRpZC0+c2NoZWQpCisJCQljb250aW51ZTsKKworCQlhYyA9IHRpZC0+YWM7CisJCXR4cSA9IGFjLT50eHE7CisKKwkJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKworCQlpZiAoIWxpc3RfZW1wdHkoJnRpZC0+YnVmX3EpKQorCQkJYnVmZmVyZWQgPSB0cnVlOworCisJCXRpZC0+c2NoZWQgPSBmYWxzZTsKKwkJbGlzdF9kZWwoJnRpZC0+bGlzdCk7CisKKwkJaWYgKGFjLT5zY2hlZCkgeworCQkJYWMtPnNjaGVkID0gZmFsc2U7CisJCQlsaXN0X2RlbCgmYWMtPmxpc3QpOworCQl9CisKKwkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCX0KKworCXJldHVybiBidWZmZXJlZDsKK30KKwordm9pZCBhdGhfdHhfYWdncl93YWtldXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4pCit7CisJc3RydWN0IGF0aF9hdHhfdGlkICp0aWQ7CisJc3RydWN0IGF0aF9hdHhfYWMgKmFjOworCXN0cnVjdCBhdGhfdHhxICp0eHE7CisJaW50IHRpZG5vOworCisJZm9yICh0aWRubyA9IDAsIHRpZCA9ICZhbi0+dGlkW3RpZG5vXTsKKwkgICAgIHRpZG5vIDwgV01FX05VTV9USUQ7IHRpZG5vKyssIHRpZCsrKSB7CisKKwkJYWMgPSB0aWQtPmFjOworCQl0eHEgPSBhYy0+dHhxOworCisJCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisJCWFjLT5jbGVhcl9wc19maWx0ZXIgPSB0cnVlOworCisJCWlmICghbGlzdF9lbXB0eSgmdGlkLT5idWZfcSkgJiYgIXRpZC0+cGF1c2VkKSB7CisJCQlhdGhfdHhfcXVldWVfdGlkKHR4cSwgdGlkKTsKKwkJCWF0aF90eHFfc2NoZWR1bGUoc2MsIHR4cSk7CisJCX0KKworCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisJfQorfQorCiB2b2lkIGF0aF90eF9hZ2dyX3Jlc3VtZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCkKIHsKIAlzdHJ1Y3QgYXRoX2F0eF90aWQgKnR4dGlkOwpAQCAtMTQ1MSw3ICsxNTI2LDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpod19rZXkgPSB0eF9pbmZvLT5jb250cm9sLmh3X2tleTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXN0cnVjdCBhdGhfZnJhbWVfaW5mbyAqZmkgPSBnZXRfZnJhbWVfaW5mbyhza2IpOwotCXN0cnVjdCBhdGhfbm9kZSAqYW47CisJc3RydWN0IGF0aF9ub2RlICphbiA9IE5VTEw7CiAJc3RydWN0IGF0aF9hdHhfdGlkICp0aWQ7CiAJZW51bSBhdGg5a19rZXlfdHlwZSBrZXl0eXBlOwogCXUxNiBzZXFubyA9IDA7CkBAIC0xNDU5LDExICsxNTM0LDEzIEBACiAKIAlrZXl0eXBlID0gYXRoOWtfY21uX2dldF9od19jcnlwdG9fa2V5dHlwZShza2IpOwogCisJaWYgKHN0YSkKKwkJYW4gPSAoc3RydWN0IGF0aF9ub2RlICopIHN0YS0+ZHJ2X3ByaXY7CisKIAloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7Ci0JaWYgKHN0YSAmJiBpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSAmJgorCWlmIChhbiAmJiBpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSAmJgogCQljb25mX2lzX2h0KCZody0+Y29uZikgJiYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikpIHsKIAotCQlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKikgc3RhLT5kcnZfcHJpdjsKIAkJdGlkbm8gPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKVswXSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOwogCiAJCS8qCkBAIC0xNDc5LDYgKzE1NTYsOCBAQAogCW1lbXNldChmaSwgMCwgc2l6ZW9mKCpmaSkpOwogCWlmIChod19rZXkpCiAJCWZpLT5rZXlpeCA9IGh3X2tleS0+aHdfa2V5X2lkeDsKKwllbHNlIGlmIChhbiAmJiBpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpICYmIGFuLT5wc19rZXkgPiAwKQorCQlmaS0+a2V5aXggPSBhbi0+cHNfa2V5OwogCWVsc2UKIAkJZmktPmtleWl4ID0gQVRIOUtfVFhLRVlJWF9JTlZBTElEOwogCWZpLT5rZXl0eXBlID0ga2V5dHlwZTsKQEAgLTE0OTEsNyArMTU3MCw2IEBACiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCWludCBmbGFncyA9IDA7CiAKLQlmbGFncyB8PSBBVEg5S19UWERFU0NfQ0xSRE1BU0s7IC8qIG5lZWRlZCBmb3IgY3J5cHRvIGVycm9ycyAqLwogCWZsYWdzIHw9IEFUSDlLX1RYREVTQ19JTlRSRVE7CiAKIAlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykKQEAgLTE1ODUsOCArMTY2Myw3IEBACiAJCXJpeCA9IHJhdGVzW2ldLmlkeDsKIAkJc2VyaWVzW2ldLlRyaWVzID0gcmF0ZXNbaV0uY291bnQ7CiAKLQkJaWYgKChzYy0+Y29uZmlnLmF0aF9hZ2dyX3Byb3QgJiYgYmZfaXNhZ2dyKGJmKSkgfHwKLQkJICAgIChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUykpIHsKKwkJICAgIGlmIChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUykgewogCQkJc2VyaWVzW2ldLlJhdGVGbGFncyB8PSBBVEg5S19SQVRFU0VSSUVTX1JUU19DVFM7CiAJCQlmbGFncyB8PSBBVEg5S19UWERFU0NfUlRTRU5BOwogCQl9IGVsc2UgaWYgKHJhdGVzW2ldLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9DVFNfUFJPVEVDVCkgewpAQCAtMTY1NSw4ICsxNzMyLDYgQEAKIAkJCQkgICAgICFpc19wc3BvbGwsIGN0c3JhdGUsCiAJCQkJICAgICAwLCBzZXJpZXMsIDQsIGZsYWdzKTsKIAotCWlmIChzYy0+Y29uZmlnLmF0aF9hZ2dyX3Byb3QgJiYgZmxhZ3MpCi0JCWF0aDlrX2h3X3NldDExbl9idXJzdGR1cmF0aW9uKHNjLT5zY19haCwgYmYtPmJmX2Rlc2MsIDgxOTIpOwogfQogCiBzdGF0aWMgc3RydWN0IGF0aF9idWYgKmF0aF90eF9zZXR1cF9idWZmZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCkBAIC0xNzU0LDYgKzE4MjksOSBAQAogCQlpZiAodHhjdGwtPnBhcHJkKQogCQkJYmYtPmJmX3N0YXRlLmJmc19wYXByZF90aW1lc3RhbXAgPSBqaWZmaWVzOwogCisJCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQ0xFQVJfUFNfRklMVCkKKwkJCWF0aDlrX2h3X3NldF9jbHJkbWFzayhzYy0+c2NfYWgsIGJmLT5iZl9kZXNjLCB0cnVlKTsKKwogCQlhdGhfdHhfc2VuZF9ub3JtYWwoc2MsIHR4Y3RsLT50eHEsIHRpZCwgJmJmX2hlYWQpOwogCX0KIApAQCAtMTc2Nyw2ICsxODQ1LDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9IGluZm8tPmNvbnRyb2wuc3RhOworCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYgPSBpbmZvLT5jb250cm9sLnZpZjsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwogCXN0cnVjdCBhdGhfdHhxICp0eHEgPSB0eGN0bC0+dHhxOwogCXN0cnVjdCBhdGhfYnVmICpiZjsKQEAgLTE4MDQsNiArMTg4MywxMSBAQAogCQltZW1tb3ZlKHNrYi0+ZGF0YSwgc2tiLT5kYXRhICsgcGFkc2l6ZSwgcGFkcG9zKTsKIAl9CiAKKwlpZiAoKHZpZiAmJiB2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVAgJiYKKwkgICAgICAgICAgICB2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikgfHwKKwkgICAgIWllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfQ0xFQVJfUFNfRklMVDsKKwogCXNldHVwX2ZyYW1lX2luZm8oaHcsIHNrYiwgZnJtbGVuKTsKIAogCS8qCkBAIC0xOTgwLDcgKzIwNjQsNyBAQAogCQlpZiAoaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSAmJgogCQkgICAgKHRzLT50c19mbGFncyAmIChBVEg5S19UWF9EQVRBX1VOREVSUlVOIHwKIAkJICAgICAgICAgICAgICAgICAgICAgQVRIOUtfVFhfREVMSU1fVU5ERVJSVU4pKSAmJgotCQkgICAgYWgtPnR4X3RyaWdfbGV2ZWwgPj0gc2MtPnNjX2FoLT5jYXBzLnR4X3RyaWdsZXZlbF9tYXgpCisJCSAgICBhaC0+dHhfdHJpZ19sZXZlbCA+PSBzYy0+c2NfYWgtPmNvbmZpZy5tYXhfdHh0cmlnX2xldmVsKQogCQkJdHhfaW5mby0+c3RhdHVzLnJhdGVzW3R4X3JhdGVpbmRleF0uY291bnQgPQogCQkJCWh3LT5tYXhfcmF0ZV90cmllczsKIAl9CkBAIC0yMDk5LDI4ICsyMTgzLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGF0aF9od19wbGxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0aF9zb2Z0YywKLQkJCQkJICAgIGh3X3BsbF93b3JrLndvcmspOwotCXN0YXRpYyBpbnQgY291bnQ7Ci0KLQlpZiAoQVJfU1JFVl85NDg1KHNjLT5zY19haCkpIHsKLQkJaWYgKGFyOTAwM19nZXRfcGxsX3Nxc3VtX2R2YyhzYy0+c2NfYWgpID49IDB4NDAwMDApIHsKLQkJCWNvdW50Kys7Ci0KLQkJCWlmIChjb3VudCA9PSAzKSB7Ci0JCQkJLyogUnggaXMgaHVuZyBmb3IgbW9yZSB0aGFuIDUwMG1zLiBSZXNldCBpdCAqLwotCQkJCWF0aF9yZXNldChzYywgdHJ1ZSk7Ci0JCQkJY291bnQgPSAwOwotCQkJfQotCQl9IGVsc2UKLQkJCWNvdW50ID0gMDsKLQotCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHNjLT5odywgJnNjLT5od19wbGxfd29yaywgSFovNSk7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBhdGhfdHhfY29tcGxldGVfcG9sbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRoX3NvZnRjLApAQCAtMjE0NCwzMyArMjIwNiw2IEBACiAJCQkJfSBlbHNlIHsKIAkJCQkJdHhxLT5heHFfdHhfaW5wcm9ncmVzcyA9IHRydWU7CiAJCQkJfQotCQkJfSBlbHNlIHsKLQkJCQkvKiBJZiB0aGUgcXVldWUgaGFzIHBlbmRpbmcgYnVmZmVycywgdGhlbiBpdAotCQkJCSAqIHNob3VsZCBiZSBkb2luZyB0eCB3b3JrIChhbmQgaGF2ZSBheHFfZGVwdGgpLgotCQkJCSAqIFNob3VsZG4ndCBnZXQgdG8gdGhpcyBzdGF0ZSBJIHRoaW5rLi5idXQKLQkJCQkgKiB3ZSBkby4KLQkJCQkgKi8KLQkJCQlpZiAoIShzYy0+c2NfZmxhZ3MgJiAoU0NfT1BfT0ZGQ0hBTk5FTCkpICYmCi0JCQkJICAgICh0eHEtPnBlbmRpbmdfZnJhbWVzID4gMCB8fAotCQkJCSAgICAgIWxpc3RfZW1wdHkoJnR4cS0+YXhxX2FjcSkgfHwKLQkJCQkgICAgIHR4cS0+c3RvcHBlZCkpIHsKLQkJCQkJYXRoX2VycihhdGg5a19od19jb21tb24oc2MtPnNjX2FoKSwKLQkJCQkJCSJ0eHE6ICVwIGF4cV9xbnVtOiAldSwiCi0JCQkJCQkiIG1hYzgwMjExX3FudW06ICVpIgotCQkJCQkJIiBheHFfbGluazogJXAiCi0JCQkJCQkiIHBlbmRpbmcgZnJhbWVzOiAlaSIKLQkJCQkJCSIgYXhxX2FjcSBlbXB0eTogJWkiCi0JCQkJCQkiIHN0b3BwZWQ6ICVpIgotCQkJCQkJIiBheHFfZGVwdGg6IDAgIEF0dGVtcHRpbmcgdG8iCi0JCQkJCQkiIHJlc3RhcnQgdHggbG9naWMuXG4iLAotCQkJCQkJdHhxLCB0eHEtPmF4cV9xbnVtLAotCQkJCQkJdHhxLT5tYWM4MDIxMV9xbnVtLAotCQkJCQkJdHhxLT5heHFfbGluaywKLQkJCQkJCXR4cS0+cGVuZGluZ19mcmFtZXMsCi0JCQkJCQlsaXN0X2VtcHR5KCZ0eHEtPmF4cV9hY3EpLAotCQkJCQkJdHhxLT5zdG9wcGVkKTsKLQkJCQkJYXRoX3R4cV9zY2hlZHVsZShzYywgdHhxKTsKLQkJCQl9CiAJCQl9CiAJCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CiAJCX0KQEAgLTIzNDIsNyArMjM3Nyw2IEBACiAJfQogCiAJSU5JVF9ERUxBWUVEX1dPUksoJnNjLT50eF9jb21wbGV0ZV93b3JrLCBhdGhfdHhfY29tcGxldGVfcG9sbF93b3JrKTsKLQlJTklUX0RFTEFZRURfV09SSygmc2MtPmh3X3BsbF93b3JrLCBhdGhfaHdfcGxsX3dvcmspOwogCiAJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0VETUEpIHsKIAkJZXJyb3IgPSBhdGhfdHhfZWRtYV9pbml0KHNjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9jYXJsOTE3MC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL2Nhcmw5MTcwLmgKaW5kZXggM2Q0ZWQ1OC4uYmI1Nzg2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL2Nhcmw5MTcwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL2Nhcmw5MTcwLmgKQEAgLTQ0OCw2ICs0NDgsOCBAQAogCiBzdHJ1Y3QgY2FybDkxNzBfc3RhX2luZm8gewogCWJvb2wgaHRfc3RhOworCWJvb2wgc2xlZXBpbmc7CisJYXRvbWljX3QgcGVuZGluZ19mcmFtZXM7CiAJdW5zaWduZWQgaW50IGFtcGR1X21heF9sZW47CiAJc3RydWN0IGNhcmw5MTcwX3N0YV90aWQgKmFnZ1tDQVJMOTE3MF9OVU1fVElEXTsKIAlzdHJ1Y3QgY2FybDkxNzBfYmFfc3RhdHMgc3RhdHNbQ0FSTDkxNzBfTlVNX1RJRF07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL21haW4uYwppbmRleCA4OWZlNjBhLi43ZDVjNjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9tYWluLmMKQEAgLTg4Myw3ICs4ODMsNyBAQAogCSAqIHRoZW4gY2hlY2tpbmcgdGhlIGVycm9yIGZsYWdzLCBsYXRlci4KIAkgKi8KIAotCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0FMTE1VTFRJICYmICpuZXdfZmxhZ3MgJiBGSUZfQUxMTVVMVEkpCisJaWYgKCpuZXdfZmxhZ3MgJiBGSUZfQUxMTVVMVEkpCiAJCW11bHRpY2FzdCA9IH4wVUxMOwogCiAJaWYgKG11bHRpY2FzdCAhPSBhci0+Y3VyX21jX2hhc2gpCkBAIC0xMTkzLDYgKzExOTMsOCBAQAogCXN0cnVjdCBjYXJsOTE3MF9zdGFfaW5mbyAqc3RhX2luZm8gPSAodm9pZCAqKSBzdGEtPmRydl9wcml2OwogCXVuc2lnbmVkIGludCBpOwogCisJYXRvbWljX3NldCgmc3RhX2luZm8tPnBlbmRpbmdfZnJhbWVzLCAwKTsKKwogCWlmIChzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpIHsKIAkJaWYgKHN0YS0+aHRfY2FwLmFtcGR1X2RlbnNpdHkgPiA2KSB7CiAJCQkvKgpAQCAtMTQ2Nyw5OSArMTQ2OSwxNyBAQAogCQkJCSAgIGVudW0gc3RhX25vdGlmeV9jbWQgY21kLAogCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCiB7Ci0Jc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKIAlzdHJ1Y3QgY2FybDkxNzBfc3RhX2luZm8gKnN0YV9pbmZvID0gKHZvaWQgKikgc3RhLT5kcnZfcHJpdjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdG1wOwotCXN0cnVjdCBza19idWZmX2hlYWQgZnJlZTsKLQlpbnQgaTsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTVEFfTk9USUZZX1NMRUVQOgotCQkvKgotCQkgKiBTaW5jZSB0aGUgcGVlciBpcyBubyBsb25nZXIgbGlzdGVuaW5nLCB3ZSBoYXZlIHRvIHJldHVybgotCQkgKiBhcyBtYW55IFNLQnMgYXMgcG9zc2libGUgYmFjayB0byB0aGUgbWFjODAyMTEgc3RhY2suCi0JCSAqIEl0IHdpbGwgZGVhbCB3aXRoIHRoZSByZXRyeSBwcm9jZWR1cmUsIG9uY2UgdGhlIHBlZXIKLQkJICogaGFzIGJlY29tZSBhdmFpbGFibGUgYWdhaW4uCi0JCSAqCi0JCSAqIE5COiBJZGVhbGx5LCB0aGUgZHJpdmVyIHNob3VsZCByZXR1cm4gdGhlIGFsbCBmcmFtZXMgaW4KLQkJICogdGhlIGNvcnJlY3QsIGFzY2VuZGluZyBvcmRlci4gSG93ZXZlciwgSSB0aGluayB0aGF0IHRoaXMKLQkJICogZnVuY3Rpb25hbGl0eSBzaG91bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHN0YWNrIGFuZCBub3QKLQkJICogaGVyZS4uLgotCQkgKi8KLQotCQlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmZyZWUpOwotCi0JCWlmIChzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpIHsKLQkJCXJjdV9yZWFkX2xvY2soKTsKLQkJCWZvciAoaSA9IDA7IGkgPCBDQVJMOTE3MF9OVU1fVElEOyBpKyspIHsKLQkJCQlzdHJ1Y3QgY2FybDkxNzBfc3RhX3RpZCAqdGlkX2luZm87Ci0KLQkJCQl0aWRfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShzdGFfaW5mby0+YWdnW2ldKTsKLQotCQkJCWlmICghdGlkX2luZm8pCi0JCQkJCWNvbnRpbnVlOwotCi0JCQkJc3Bpbl9sb2NrX2JoKCZhci0+dHhfYW1wZHVfbGlzdF9sb2NrKTsKLQkJCQlpZiAodGlkX2luZm8tPnN0YXRlID4KLQkJCQkgICAgQ0FSTDkxNzBfVElEX1NUQVRFX1NVU1BFTkQpCi0JCQkJCXRpZF9pbmZvLT5zdGF0ZSA9Ci0JCQkJCQlDQVJMOTE3MF9USURfU1RBVEVfU1VTUEVORDsKLQkJCQlzcGluX3VubG9ja19iaCgmYXItPnR4X2FtcGR1X2xpc3RfbG9jayk7Ci0KLQkJCQlzcGluX2xvY2tfYmgoJnRpZF9pbmZvLT5sb2NrKTsKLQkJCQl3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoJnRpZF9pbmZvLT5xdWV1ZSkpKQotCQkJCQlfX3NrYl9xdWV1ZV90YWlsKCZmcmVlLCBza2IpOwotCQkJCXNwaW5fdW5sb2NrX2JoKCZ0aWRfaW5mby0+bG9jayk7Ci0JCQl9Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJfQotCi0JCWZvciAoaSA9IDA7IGkgPCBhci0+aHctPnF1ZXVlczsgaSsrKSB7Ci0JCQlzcGluX2xvY2tfYmgoJmFyLT50eF9wZW5kaW5nW2ldLmxvY2spOwotCQkJc2tiX3F1ZXVlX3dhbGtfc2FmZSgmYXItPnR4X3BlbmRpbmdbaV0sIHNrYiwgdG1wKSB7Ci0JCQkJc3RydWN0IF9jYXJsOTE3MF90eF9zdXBlcmZyYW1lICpzdXBlcjsKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwotCQkJCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKLQotCQkJCXN1cGVyID0gKHZvaWQgKikgc2tiLT5kYXRhOwotCQkJCWhkciA9ICh2b2lkICopIHN1cGVyLT5mcmFtZV9kYXRhOwotCi0JCQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihoZHItPmFkZHIxLCBzdGEtPmFkZHIpKQotCQkJCQljb250aW51ZTsKLQotCQkJCV9fc2tiX3VubGluayhza2IsICZhci0+dHhfcGVuZGluZ1tpXSk7Ci0KLQkJCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCQkJCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpCi0JCQkJCWF0b21pY19kZWMoJmFyLT50eF9hbXBkdV91cGxvYWQpOwotCi0JCQkJY2FybDkxNzBfdHhfc3RhdHVzKGFyLCBza2IsIGZhbHNlKTsKLQkJCX0KLQkJCXNwaW5fdW5sb2NrX2JoKCZhci0+dHhfcGVuZGluZ1tpXS5sb2NrKTsKLQkJfQotCi0JCXdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZSgmZnJlZSkpKQotCQkJY2FybDkxNzBfdHhfc3RhdHVzKGFyLCBza2IsIGZhbHNlKTsKLQorCQlzdGFfaW5mby0+c2xlZXBpbmcgPSB0cnVlOworCQlpZiAoYXRvbWljX3JlYWQoJnN0YV9pbmZvLT5wZW5kaW5nX2ZyYW1lcykpCisJCQlpZWVlODAyMTFfc3RhX2Jsb2NrX2F3YWtlKGh3LCBzdGEsIHRydWUpOwogCQlicmVhazsKIAogCWNhc2UgU1RBX05PVElGWV9BV0FLRToKLQkJaWYgKCFzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpCi0JCQlyZXR1cm47Ci0KLQkJcmN1X3JlYWRfbG9jaygpOwotCQlmb3IgKGkgPSAwOyBpIDwgQ0FSTDkxNzBfTlVNX1RJRDsgaSsrKSB7Ci0JCQlzdHJ1Y3QgY2FybDkxNzBfc3RhX3RpZCAqdGlkX2luZm87Ci0KLQkJCXRpZF9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKHN0YV9pbmZvLT5hZ2dbaV0pOwotCi0JCQlpZiAoIXRpZF9pbmZvKQotCQkJCWNvbnRpbnVlOwotCi0JCQlpZiAoKHRpZF9pbmZvLT5zdGF0ZSA9PSBDQVJMOTE3MF9USURfU1RBVEVfU1VTUEVORCkpCi0JCQkJdGlkX2luZm8tPnN0YXRlID0gQ0FSTDkxNzBfVElEX1NUQVRFX0lETEU7Ci0JCX0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXN0YV9pbmZvLT5zbGVlcGluZyA9IGZhbHNlOwogCQlicmVhazsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC90eC5jCmluZGV4IGNiNzBlZDcuLmU5NDA4NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC90eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC90eC5jCkBAIC0xMDQsMTIgKzEwNCw2MCBAQAogCXNwaW5fdW5sb2NrX2JoKCZhci0+dHhfc3RhdHNfbG9jayk7CiB9CiAKKy8qIG5lZWRzIHJjdV9yZWFkX2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqX19jYXJsOTE3MF9nZXRfdHhfc3RhKHN0cnVjdCBhcjkxNzAgKmFyLAorCQkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgX2Nhcmw5MTcwX3R4X3N1cGVyZnJhbWUgKnN1cGVyID0gKHZvaWQgKikgc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKSBzdXBlci0+ZnJhbWVfZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOworCXVuc2lnbmVkIGludCB2aWZfaWQ7CisKKwl2aWZfaWQgPSAoc3VwZXItPnMubWlzYyAmIENBUkw5MTcwX1RYX1NVUEVSX01JU0NfVklGX0lEKSA+PgorCQkgQ0FSTDkxNzBfVFhfU1VQRVJfTUlTQ19WSUZfSURfUzsKKworCWlmIChXQVJOX09OX09OQ0UodmlmX2lkID49IEFSOTE3MF9NQVhfVklSVFVBTF9NQUMpKQorCQlyZXR1cm4gTlVMTDsKKworCXZpZiA9IHJjdV9kZXJlZmVyZW5jZShhci0+dmlmX3ByaXZbdmlmX2lkXS52aWYpOworCWlmICh1bmxpa2VseSghdmlmKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIE5vcm1hbGx5IHdlIHNob3VsZCB1c2Ugd3JhcHBlcnMgbGlrZSBpZWVlODAyMTFfZ2V0X0RBIHRvIGdldAorCSAqIHRoZSBjb3JyZWN0IHBlZXIgaWVlZTgwMjExX3N0YS4KKwkgKgorCSAqIEJ1dCB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCBpbmRpcmVjdCB0cmFmZmljIChicm9hZGNhc3RzLCBvcgorCSAqIGRhdGEgd2hpY2ggaXMgZGVzaWduYXRlZCBmb3Igb3RoZXIgc3RhdGlvbnMpIGluIHN0YXRpb24gbW9kZS4KKwkgKiBUaGUgZnJhbWUgd2lsbCBiZSBkaXJlY3RlZCB0byB0aGUgQVAgZm9yIGRpc3RyaWJ1dGlvbiBhbmQgbm90CisJICogdG8gdGhlIGFjdHVhbCBkZXN0aW5hdGlvbi4KKwkgKi8KKworCXJldHVybiBpZWVlODAyMTFfZmluZF9zdGEodmlmLCBoZHItPmFkZHIxKTsKK30KKworc3RhdGljIHZvaWQgY2FybDkxNzBfdHhfcHNfdW5ibG9jayhzdHJ1Y3QgYXI5MTcwICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOworCXN0cnVjdCBjYXJsOTE3MF9zdGFfaW5mbyAqc3RhX2luZm87CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJc3RhID0gX19jYXJsOTE3MF9nZXRfdHhfc3RhKGFyLCBza2IpOworCWlmICh1bmxpa2VseSghc3RhKSkKKwkJZ290byBvdXRfcmN1OworCisJc3RhX2luZm8gPSAoc3RydWN0IGNhcmw5MTcwX3N0YV9pbmZvICopIHN0YS0+ZHJ2X3ByaXY7CisJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZzdGFfaW5mby0+cGVuZGluZ19mcmFtZXMpID09IDApCisJCWllZWU4MDIxMV9zdGFfYmxvY2tfYXdha2UoYXItPmh3LCBzdGEsIGZhbHNlKTsKKworb3V0X3JjdToKKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKwogc3RhdGljIHZvaWQgY2FybDkxNzBfdHhfYWNjb3VudGluZ19mcmVlKHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpbmZvOwogCWludCBxdWV1ZTsKIAotCXR4aW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlxdWV1ZSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwogCiAJc3Bpbl9sb2NrX2JoKCZhci0+dHhfc3RhdHNfbG9jayk7CkBAIC0xMzUsNiArMTgzLDcgQEAKIAl9CiAKIAlzcGluX3VubG9ja19iaCgmYXItPnR4X3N0YXRzX2xvY2spOworCiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFyLT50eF90b3RhbF9xdWV1ZWQpKQogCQljb21wbGV0ZSgmYXItPnR4X2ZsdXNoKTsKIH0KQEAgLTMyOSwxMyArMzc4LDkgQEAKIHsKIAlzdHJ1Y3QgX2Nhcmw5MTcwX3R4X3N1cGVyZnJhbWUgKnN1cGVyID0gKHZvaWQgKikgc2tiLT5kYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKSBzdXBlci0+ZnJhbWVfZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm87Ci0Jc3RydWN0IGNhcmw5MTcwX3R4X2luZm8gKmFyX2luZm87Ci0Jc3RydWN0IGNhcmw5MTcwX3N0YV9pbmZvICpzdGFfaW5mbzsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOworCXN0cnVjdCBjYXJsOTE3MF9zdGFfaW5mbyAqc3RhX2luZm87CiAJc3RydWN0IGNhcmw5MTcwX3N0YV90aWQgKnRpZF9pbmZvOwotCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7Ci0JdW5zaWduZWQgaW50IHZpZl9pZDsKIAl1OCB0aWQ7CiAKIAlpZiAoISh0eGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkgfHwKQEAgLTM0MywzMCArMzg4LDggQEAKIAkgICAoIShzdXBlci0+Zi5tYWNfY29udHJvbCAmIGNwdV90b19sZTE2KEFSOTE3MF9UWF9NQUNfQUdHUikpKSkKIAkJcmV0dXJuOwogCi0JdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlhcl9pbmZvID0gKHZvaWQgKikgdHhfaW5mby0+cmF0ZV9kcml2ZXJfZGF0YTsKLQotCXZpZl9pZCA9IChzdXBlci0+cy5taXNjICYgQ0FSTDkxNzBfVFhfU1VQRVJfTUlTQ19WSUZfSUQpID4+Ci0JCSBDQVJMOTE3MF9UWF9TVVBFUl9NSVNDX1ZJRl9JRF9TOwotCi0JaWYgKFdBUk5fT05fT05DRSh2aWZfaWQgPj0gQVI5MTcwX01BWF9WSVJUVUFMX01BQykpCi0JCXJldHVybjsKLQogCXJjdV9yZWFkX2xvY2soKTsKLQl2aWYgPSByY3VfZGVyZWZlcmVuY2UoYXItPnZpZl9wcml2W3ZpZl9pZF0udmlmKTsKLQlpZiAodW5saWtlbHkoIXZpZikpCi0JCWdvdG8gb3V0X3JjdTsKLQotCS8qCi0JICogTm9ybWFsbHkgd2Ugc2hvdWxkIHVzZSB3cmFwcGVycyBsaWtlIGllZWU4MDIxMV9nZXRfREEgdG8gZ2V0Ci0JICogdGhlIGNvcnJlY3QgcGVlciBpZWVlODAyMTFfc3RhLgotCSAqCi0JICogQnV0IHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIGluZGlyZWN0IHRyYWZmaWMgKGJyb2FkY2FzdHMsIG9yCi0JICogZGF0YSB3aGljaCBpcyBkZXNpZ25hdGVkIGZvciBvdGhlciBzdGF0aW9ucykgaW4gc3RhdGlvbiBtb2RlLgotCSAqIFRoZSBmcmFtZSB3aWxsIGJlIGRpcmVjdGVkIHRvIHRoZSBBUCBmb3IgZGlzdHJpYnV0aW9uIGFuZCBub3QKLQkgKiB0byB0aGUgYWN0dWFsIGRlc3RpbmF0aW9uLgotCSAqLwotCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YSh2aWYsIGhkci0+YWRkcjEpOworCXN0YSA9IF9fY2FybDkxNzBfZ2V0X3R4X3N0YShhciwgc2tiKTsKIAlpZiAodW5saWtlbHkoIXN0YSkpCiAJCWdvdG8gb3V0X3JjdTsKIApAQCAtNDI3LDYgKzQ1MCw3IEBACiAJaWYgKHR4aW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKQogCQljYXJsOTE3MF90eF9zdGF0dXNfcHJvY2Vzc19hbXBkdShhciwgc2tiLCB0eGluZm8pOwogCisJY2FybDkxNzBfdHhfcHNfdW5ibG9jayhhciwgc2tiKTsKIAljYXJsOTE3MF90eF9wdXRfc2tiKHNrYik7CiB9CiAKQEAgLTU0MCwxMSArNTY0LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpbmZvOwogCXN0cnVjdCBjYXJsOTE3MF90eF9pbmZvICphcmluZm87Ci0Jc3RydWN0IF9jYXJsOTE3MF90eF9zdXBlcmZyYW1lICpzdXBlcjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOwotCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKLQl1bnNpZ25lZCBpbnQgdmlmX2lkOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGl0ZXIsICZhci0+dHhfYW1wZHVfbGlzdCwgbGlzdCkgewpAQCAtNTYyLDIwICs1ODIsNyBAQAogCQkgICAgbXNlY3NfdG9famlmZmllcyhDQVJMOTE3MF9RVUVVRV9USU1FT1VUKSkpCiAJCQlnb3RvIHVubG9jazsKIAotCQlzdXBlciA9ICh2b2lkICopIHNrYi0+ZGF0YTsKLQkJaGRyID0gKHZvaWQgKikgc3VwZXItPmZyYW1lX2RhdGE7Ci0KLQkJdmlmX2lkID0gKHN1cGVyLT5zLm1pc2MgJiBDQVJMOTE3MF9UWF9TVVBFUl9NSVNDX1ZJRl9JRCkgPj4KLQkJCSBDQVJMOTE3MF9UWF9TVVBFUl9NSVNDX1ZJRl9JRF9TOwotCi0JCWlmIChXQVJOX09OKHZpZl9pZCA+PSBBUjkxNzBfTUFYX1ZJUlRVQUxfTUFDKSkKLQkJCWdvdG8gdW5sb2NrOwotCi0JCXZpZiA9IHJjdV9kZXJlZmVyZW5jZShhci0+dmlmX3ByaXZbdmlmX2lkXS52aWYpOwotCQlpZiAoV0FSTl9PTighdmlmKSkKLQkJCWdvdG8gdW5sb2NrOwotCi0JCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YSh2aWYsIGhkci0+YWRkcjEpOworCQlzdGEgPSBfX2Nhcmw5MTcwX2dldF90eF9zdGEoYXIsIHNrYik7CiAJCWlmIChXQVJOX09OKCFzdGEpKQogCQkJZ290byB1bmxvY2s7CiAKQEAgLTYxMSw3ICs2MTgsNiBAQAogewogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eGluZm87Ci0Jc3RydWN0IGNhcmw5MTcwX3R4X2luZm8gKmFyaW5mbzsKIAl1bnNpZ25lZCBpbnQgciwgdCwgcTsKIAlib29sIHN1Y2Nlc3MgPSB0cnVlOwogCkBAIC02MjcsNyArNjMzLDYgQEAKIAl9CiAKIAl0eGluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0JYXJpbmZvID0gKHZvaWQgKikgdHhpbmZvLT5yYXRlX2RyaXZlcl9kYXRhOwogCiAJaWYgKCEoaW5mbyAmIENBUkw5MTcwX1RYX1NUQVRVU19TVUNDRVNTKSkKIAkJc3VjY2VzcyA9IGZhbHNlOwpAQCAtMTE5OSwxNSArMTIwNCw2IEBACiAJYXJpbmZvID0gKHZvaWQgKikgaW5mby0+cmF0ZV9kcml2ZXJfZGF0YTsKIAogCWFyaW5mby0+dGltZW91dCA9IGppZmZpZXM7Ci0KLQkvKgotCSAqIGluY3JlYXNlIHJlZiBjb3VudCB0byAiMiIuCi0JICogUmVmIGNvdW50aW5nIGlzIHRoZSBlYXNpZXN0IHdheSB0byBzb2x2ZSB0aGUgcmFjZSBiZXR3ZWVuCi0JICogdGhlIHRoZSB1cmIncyBjb21wbGV0aW9uIHJvdXRpbmU6IGNhcmw5MTcwX3R4X2NhbGxiYWNrIGFuZAotCSAqIHdsYW4gdHggc3RhdHVzIGZ1bmN0aW9uczogY2FybDkxNzBfdHhfc3RhdHVzL2phbml0b3IuCi0JICovCi0JY2FybDkxNzBfdHhfZ2V0X3NrYihza2IpOwotCiAJcmV0dXJuIHNrYjsKIAogZXJyX3VubG9jazoKQEAgLTEyMjgsNiArMTIyNCwzNiBAQAogCV9fY2FybDkxNzBfdHhfcHJvY2Vzc19zdGF0dXMoYXIsIHN1cGVyLT5zLmNvb2tpZSwgcSk7CiB9CiAKK3N0YXRpYyBib29sIGNhcmw5MTcwX3R4X3BzX2Ryb3Aoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKKwlzdHJ1Y3QgY2FybDkxNzBfc3RhX2luZm8gKnN0YV9pbmZvOworCisJcmN1X3JlYWRfbG9jaygpOworCXN0YSA9IF9fY2FybDkxNzBfZ2V0X3R4X3N0YShhciwgc2tiKTsKKwlpZiAoIXN0YSkKKwkJZ290byBvdXRfcmN1OworCisJc3RhX2luZm8gPSAodm9pZCAqKSBzdGEtPmRydl9wcml2OworCWlmICh1bmxpa2VseShzdGFfaW5mby0+c2xlZXBpbmcpKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbzsKKworCQlyY3VfcmVhZF91bmxvY2soKTsKKworCQl0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCQlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKQorCQkJYXRvbWljX2RlYygmYXItPnR4X2FtcGR1X3VwbG9hZCk7CisKKwkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfVFhfRklMVEVSRUQ7CisJCWNhcmw5MTcwX3R4X3N0YXR1cyhhciwgc2tiLCBmYWxzZSk7CisJCXJldHVybiB0cnVlOworCX0KKworb3V0X3JjdToKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKIHN0YXRpYyB2b2lkIGNhcmw5MTcwX3R4KHN0cnVjdCBhcjkxNzAgKmFyKQogewogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0xMjQ3LDYgKzEyNzMsOSBAQAogCQkJaWYgKHVubGlrZWx5KCFza2IpKQogCQkJCWJyZWFrOwogCisJCQlpZiAodW5saWtlbHkoY2FybDkxNzBfdHhfcHNfZHJvcChhciwgc2tiKSkpCisJCQkJY29udGludWU7CisKIAkJCWF0b21pY19pbmMoJmFyLT50eF90b3RhbF9wZW5kaW5nKTsKIAogCQkJcSA9IF9fY2FybDkxNzBfZ2V0X3F1ZXVlKGFyLCBpKTsKQEAgLTEyNTYsNiArMTI4NSwxNiBAQAogCQkJICovCiAJCQlza2JfcXVldWVfdGFpbCgmYXItPnR4X3N0YXR1c1txXSwgc2tiKTsKIAorCQkJLyoKKwkJCSAqIGluY3JlYXNlIHJlZiBjb3VudCB0byAiMiIuCisJCQkgKiBSZWYgY291bnRpbmcgaXMgdGhlIGVhc2llc3Qgd2F5IHRvIHNvbHZlIHRoZQorCQkJICogcmFjZSBiZXR3ZWVuIHRoZSB1cmIncyBjb21wbGV0aW9uIHJvdXRpbmU6CisJCQkgKgljYXJsOTE3MF90eF9jYWxsYmFjaworCQkJICogYW5kIHdsYW4gdHggc3RhdHVzIGZ1bmN0aW9uczoKKwkJCSAqCWNhcmw5MTcwX3R4X3N0YXR1cy9qYW5pdG9yLgorCQkJICovCisJCQljYXJsOTE3MF90eF9nZXRfc2tiKHNrYik7CisKIAkJCWNhcmw5MTcwX3VzYl90eChhciwgc2tiKTsKIAkJCXNjaGVkdWxlX2dhcmJhZ2Vjb2xsZWN0b3IgPSB0cnVlOwogCQl9CkBAIC0xMjc1LDcgKzEzMTQsNiBAQAogCXN0cnVjdCBjYXJsOTE3MF9zdGFfaW5mbyAqc3RhX2luZm87CiAJc3RydWN0IGNhcmw5MTcwX3N0YV90aWQgKmFnZzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqaXRlcjsKLQl1bnNpZ25lZCBpbnQgbWF4OwogCXUxNiB0aWQsIHNlcSwgcXNlcSwgb2ZmOwogCWJvb2wgcnVuID0gZmFsc2U7CiAKQEAgLTEyODUsNyArMTMyMyw2IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJYWdnID0gcmN1X2RlcmVmZXJlbmNlKHN0YV9pbmZvLT5hZ2dbdGlkXSk7Ci0JbWF4ID0gc3RhX2luZm8tPmFtcGR1X21heF9sZW47CiAKIAlpZiAoIWFnZykKIAkJZ290byBlcnJfdW5sb2NrX3JjdTsKQEAgLTEzNjgsNiArMTQwNSwxMSBAQAogCSAqIGFsbCByZXNzb3VjZXMgd2hpY2ggYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZnJhbWUuCiAJICovCiAKKwlpZiAoc3RhKSB7CisJCXN0cnVjdCBjYXJsOTE3MF9zdGFfaW5mbyAqc3RhaSA9ICh2b2lkICopIHN0YS0+ZHJ2X3ByaXY7CisJCWF0b21pY19pbmMoJnN0YWktPnBlbmRpbmdfZnJhbWVzKTsKKwl9CisKIAlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSB7CiAJCXJ1biA9IGNhcmw5MTcwX3R4X2FtcGR1X3F1ZXVlKGFyLCBzdGEsIHNrYik7CiAJCWlmIChydW4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgva2V5LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgva2V5LmMKaW5kZXggMzdiOGUxMS4uYTYxZWYzZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9rZXkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgva2V5LmMKQEAgLTIzLDYgKzIzLDE0IEBACiAKICNkZWZpbmUgUkVHX1JFQUQJCQkoY29tbW9uLT5vcHMtPnJlYWQpCiAjZGVmaW5lIFJFR19XUklURShfYWgsIF9yZWcsIF92YWwpCShjb21tb24tPm9wcy0+d3JpdGUpKF9haCwgX3ZhbCwgX3JlZykKKyNkZWZpbmUgRU5BQkxFX1JFR1dSSVRFX0JVRkZFUihfYWgpCQkJXAorCWlmIChjb21tb24tPm9wcy0+ZW5hYmxlX3dyaXRlX2J1ZmZlcikJCVwKKwkJY29tbW9uLT5vcHMtPmVuYWJsZV93cml0ZV9idWZmZXIoKF9haCkpOworCisjZGVmaW5lIFJFR1dSSVRFX0JVRkZFUl9GTFVTSChfYWgpCQkJXAorCWlmIChjb21tb24tPm9wcy0+d3JpdGVfZmx1c2gpCQkJXAorCQljb21tb24tPm9wcy0+d3JpdGVfZmx1c2goKF9haCkpOworCiAKICNkZWZpbmUgSUVFRTgwMjExX1dFUF9OS0lEICAgICAgNCAgICAgICAvKiBudW1iZXIgb2Yga2V5IGlkcyAqLwogCkBAIC00Miw2ICs1MCw4IEBACiAKIAlrZXlUeXBlID0gUkVHX1JFQUQoYWgsIEFSX0tFWVRBQkxFX1RZUEUoZW50cnkpKTsKIAorCUVOQUJMRV9SRUdXUklURV9CVUZGRVIoYWgpOworCiAJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkwKGVudHJ5KSwgMCk7CiAJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkxKGVudHJ5KSwgMCk7CiAJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkyKGVudHJ5KSwgMCk7CkBAIC02Niw2ICs3Niw4IEBACiAKIAl9CiAKKwlSRUdXUklURV9CVUZGRVJfRkxVU0goYWgpOworCiAJcmV0dXJuIHRydWU7CiB9CiBFWFBPUlRfU1lNQk9MKGF0aF9od19rZXlyZXNldCk7CkBAIC0xMDQsOSArMTE2LDEzIEBACiAJfSBlbHNlIHsKIAkJbWFjTG8gPSBtYWNIaSA9IDA7CiAJfQorCUVOQUJMRV9SRUdXUklURV9CVUZGRVIoYWgpOworCiAJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9NQUMwKGVudHJ5KSwgbWFjTG8pOwogCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfTUFDMShlbnRyeSksIG1hY0hpIHwgdW5pY2FzdF9mbGFnKTsKIAorCVJFR1dSSVRFX0JVRkZFUl9GTFVTSChhaCk7CisKIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjIzLDYgKzIzOSw4IEBACiAJCQltaWMzID0gZ2V0X3VuYWxpZ25lZF9sZTE2KGstPmt2X3R4bWljICsgMCkgJiAweGZmZmY7CiAJCQltaWM0ID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGstPmt2X3R4bWljICsgNCk7CiAKKwkJCUVOQUJMRV9SRUdXUklURV9CVUZGRVIoYWgpOworCiAJCQkvKiBXcml0ZSBSWFszMTowXSBhbmQgVFhbMzE6MTZdICovCiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTAobWljZW50cnkpLCBtaWMwKTsKIAkJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMShtaWNlbnRyeSksIG1pYzEpOwpAQCAtMjM2LDYgKzI1NCw4IEBACiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX1RZUEUobWljZW50cnkpLAogCQkJCSAgQVJfS0VZVEFCTEVfVFlQRV9DTFIpOwogCisJCQlSRUdXUklURV9CVUZGRVJfRkxVU0goYWgpOworCiAJCX0gZWxzZSB7CiAJCQkvKgogCQkJICogVEtJUCB1c2VzIGZvdXIga2V5IGNhY2hlIGVudHJpZXMgKHR3byBmb3IgZ3JvdXAKQEAgLTI1OCw2ICsyNzgsOCBAQAogCQkJbWljMCA9IGdldF91bmFsaWduZWRfbGUzMihrLT5rdl9taWMgKyAwKTsKIAkJCW1pYzIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoay0+a3ZfbWljICsgNCk7CiAKKwkJCUVOQUJMRV9SRUdXUklURV9CVUZGRVIoYWgpOworCiAJCQkvKiBXcml0ZSBNSUMga2V5WzMxOjBdICovCiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTAobWljZW50cnkpLCBtaWMwKTsKIAkJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMShtaWNlbnRyeSksIDApOwpAQCAtMjcwLDggKzI5MiwxMiBAQAogCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVk0KG1pY2VudHJ5KSwgMCk7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX1RZUEUobWljZW50cnkpLAogCQkJCSAgQVJfS0VZVEFCTEVfVFlQRV9DTFIpOworCisJCQlSRUdXUklURV9CVUZGRVJfRkxVU0goYWgpOwogCQl9CiAKKwkJRU5BQkxFX1JFR1dSSVRFX0JVRkZFUihhaCk7CisKIAkJLyogTUFDIGFkZHJlc3MgcmVnaXN0ZXJzIGFyZSByZXNlcnZlZCBmb3IgdGhlIE1JQyBlbnRyeSAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX01BQzAobWljZW50cnkpLCAwKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9NQUMxKG1pY2VudHJ5KSwgMCk7CkBAIC0yODMsNyArMzA5LDExIEBACiAJCSAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTAoZW50cnkpLCBrZXkwKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkxKGVudHJ5KSwga2V5MSk7CisKKwkJUkVHV1JJVEVfQlVGRkVSX0ZMVVNIKGFoKTsKIAl9IGVsc2UgeworCQlFTkFCTEVfUkVHV1JJVEVfQlVGRkVSKGFoKTsKKwogCQkvKiBXcml0ZSBrZXlbNDc6MF0gKi8KIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkwKGVudHJ5KSwga2V5MCk7CiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMShlbnRyeSksIGtleTEpOwpAQCAtMjk2LDYgKzMyNiw4IEBACiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZNChlbnRyeSksIGtleTQpOwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX1RZUEUoZW50cnkpLCBrZXlUeXBlKTsKIAorCQlSRUdXUklURV9CVUZGRVJfRkxVU0goYWgpOworCiAJCS8qIFdyaXRlIE1BQyBhZGRyZXNzIGZvciB0aGUgZW50cnkgKi8KIAkJKHZvaWQpIGF0aF9od19rZXlzZXRtYWMoY29tbW9uLCBlbnRyeSwgbWFjKTsKIAl9CkBAIC00NTEsNiArNDgzLDkgQEAKIAltZW1zZXQoJmhrLCAwLCBzaXplb2YoaGspKTsKIAogCXN3aXRjaCAoa2V5LT5jaXBoZXIpIHsKKwljYXNlIDA6CisJCWhrLmt2X3R5cGUgPSBBVEhfQ0lQSEVSX0NMUjsKKwkJYnJlYWs7CiAJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDoKIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDoKIAkJaGsua3ZfdHlwZSA9IEFUSF9DSVBIRVJfV0VQOwpAQCAtNDY2LDcgKzUwMSw4IEBACiAJfQogCiAJaGsua3ZfbGVuID0ga2V5LT5rZXlsZW47Ci0JbWVtY3B5KGhrLmt2X3ZhbCwga2V5LT5rZXksIGtleS0+a2V5bGVuKTsKKwlpZiAoa2V5LT5rZXlsZW4pCisJCW1lbWNweShoay5rdl92YWwsIGtleS0+a2V5LCBrZXktPmtleWxlbik7CiAKIAlpZiAoIShrZXktPmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKSkgewogCQlzd2l0Y2ggKHZpZi0+dHlwZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3JlZ2QuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9yZWdkLmMKaW5kZXggMGUxYjg3OS4uMDI4MzEwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3JlZ2QuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvcmVnZC5jCkBAIC05Nyw4ICs5Nyw4IEBACiAJfQogfTsKIAotLyogQ2FuIGJlIHVzZWQgYnkgMHg2NywgMHg2QSBhbmQgMHg2OCAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluIGF0aF93b3JsZF9yZWdkb21fNjdfNjhfNkEgPSB7CisvKiBDYW4gYmUgdXNlZCBieSAweDY3LCAweDY4LCAweDZBIGFuZCAweDZDICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gYXRoX3dvcmxkX3JlZ2RvbV82N182OF82QV82QyA9IHsKIAkubl9yZWdfcnVsZXMgPSA0LAogCS5hbHBoYTIgPSAgIjk5IiwKIAkucmVnX3J1bGVzID0gewpAQCAtMTUxLDcgKzE1MSw4IEBACiAJY2FzZSAweDY3OgogCWNhc2UgMHg2ODoKIAljYXNlIDB4NkE6Ci0JCXJldHVybiAmYXRoX3dvcmxkX3JlZ2RvbV82N182OF82QTsKKwljYXNlIDB4NkM6CisJCXJldHVybiAmYXRoX3dvcmxkX3JlZ2RvbV82N182OF82QV82QzsKIAlkZWZhdWx0OgogCQlXQVJOX09OKDEpOwogCQlyZXR1cm4gYXRoX2RlZmF1bHRfd29ybGRfcmVnZG9tYWluKCk7CkBAIC0zMzMsNiArMzM0LDcgQEAKIAljYXNlIDB4NjM6CiAJY2FzZSAweDY2OgogCWNhc2UgMHg2NzoKKwljYXNlIDB4NkM6CiAJCWF0aF9yZWdfYXBwbHlfYmVhY29uaW5nX2ZsYWdzKHdpcGh5LCBpbml0aWF0b3IpOwogCQlicmVhazsKIAljYXNlIDB4Njg6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvcmVnZF9jb21tb24uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9yZWdkX2NvbW1vbi5oCmluZGV4IDVjMmNmZTYuLjI0YjUzODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9yZWdkX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9yZWdkX2NvbW1vbi5oCkBAIC04Niw2ICs4Niw3IEBACiAJV09SOV9XT1JMRCA9IDB4NjksCiAJV09SQV9XT1JMRCA9IDB4NkEsCiAJV09SQl9XT1JMRCA9IDB4NkIsCisJV09SQ19XT1JMRCA9IDB4NkMsCiAKIAlNS0szX01LS0IgPSAweDgwLAogCU1LSzNfTUtLQTIgPSAweDgxLApAQCAtMjgyLDYgKzI4Myw3IEBACiAJe1dPUjlfV09STEQsIE5PX0NUTCwgTk9fQ1RMfSwKIAl7V09SQV9XT1JMRCwgTk9fQ1RMLCBOT19DVEx9LAogCXtXT1JCX1dPUkxELCBOT19DVEwsIE5PX0NUTH0sCisJe1dPUkNfV09STEQsIE5PX0NUTCwgTk9fQ1RMfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY291bnRyeV9jb2RlX3RvX2VudW1fcmQgYWxsQ291bnRyaWVzW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYwppbmRleCBkNTliMDE2Li41YTQzOTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMKQEAgLTcyLDYgKzcyLDcgQEAKIE1PRFVMRV9GSVJNV0FSRSgiYjQzL3Vjb2RlMTMuZnciKTsKIE1PRFVMRV9GSVJNV0FSRSgiYjQzL3Vjb2RlMTQuZnciKTsKIE1PRFVMRV9GSVJNV0FSRSgiYjQzL3Vjb2RlMTUuZnciKTsKK01PRFVMRV9GSVJNV0FSRSgiYjQzL3Vjb2RlMTZfbWltby5mdyIpOwogTU9EVUxFX0ZJUk1XQVJFKCJiNDMvdWNvZGU1LmZ3Iik7CiBNT0RVTEVfRklSTVdBUkUoImI0My91Y29kZTkuZnciKTsKIApAQCAtMjY4NSw2ICsyNjg2LDE3IEBACiAJZGV2LT5tYWNfc3VzcGVuZGVkKys7CiB9CiAKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vTWFjUGh5Q2xrU2V0ICovCit2b2lkIGI0M19tYWNfcGh5X2Nsb2NrX3NldChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIGJvb2wgb24pCit7CisJdTMyIHRtc2xvdyA9IHNzYl9yZWFkMzIoZGV2LT5kZXYsIFNTQl9UTVNMT1cpOworCWlmIChvbikKKwkJdG1zbG93IHw9IEI0M19UTVNMT1dfTUFDUEhZQ0xLRU47CisJZWxzZQorCQl0bXNsb3cgJj0gfkI0M19UTVNMT1dfTUFDUEhZQ0xLRU47CisJc3NiX3dyaXRlMzIoZGV2LT5kZXYsIFNTQl9UTVNMT1csIHRtc2xvdyk7Cit9CisKIHN0YXRpYyB2b2lkIGI0M19hZGp1c3Rfb3Btb2RlKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKIAlzdHJ1Y3QgYjQzX3dsICp3bCA9IGRldi0+d2w7CkBAIC0yODQxLDcgKzI4NTMsNyBAQAogewogCXN0cnVjdCBiNDNfcGh5ICpwaHkgPSAmZGV2LT5waHk7CiAJaW50IGVycjsKLQl1MzIgdmFsdWUzMiwgbWFjY3RsOworCXUzMiBtYWNjdGw7CiAJdTE2IHZhbHVlMTY7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBNQUMgY29udHJvbCAqLwpAQCAtMjkxOSw5ICsyOTMxLDcgQEAKIAliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX0RNQTRfSVJRX01BU0ssIDB4MDAwMERDMDApOwogCWI0M193cml0ZTMyKGRldiwgQjQzX01NSU9fRE1BNV9JUlFfTUFTSywgMHgwMDAwREMwMCk7CiAKLQl2YWx1ZTMyID0gc3NiX3JlYWQzMihkZXYtPmRldiwgU1NCX1RNU0xPVyk7Ci0JdmFsdWUzMiB8PSAweDAwMTAwMDAwOwotCXNzYl93cml0ZTMyKGRldi0+ZGV2LCBTU0JfVE1TTE9XLCB2YWx1ZTMyKTsKKwliNDNfbWFjX3BoeV9jbG9ja19zZXQoZGV2LCB0cnVlKTsKIAogCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fUE9XRVJVUF9ERUxBWSwKIAkJICAgIGRldi0+ZGV2LT5idXMtPmNoaXBjby5mYXN0X3B3cnVwX2RlbGF5KTsKQEAgLTQyMTIsMzMgKzQyMjIsMTggQEAKIAogc3RhdGljIHZvaWQgYjQzX2ltY2ZnbG9fdGltZW91dHNfd29ya2Fyb3VuZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7Ci0jaWZkZWYgQ09ORklHX1NTQl9EUklWRVJfUENJQ09SRQogCXN0cnVjdCBzc2JfYnVzICpidXMgPSBkZXYtPmRldi0+YnVzOwogCXUzMiB0bXA7CiAKLQlpZiAoYnVzLT5wY2ljb3JlLmRldiAmJgotCSAgICBidXMtPnBjaWNvcmUuZGV2LT5pZC5jb3JlaWQgPT0gU1NCX0RFVl9QQ0kgJiYKLQkgICAgYnVzLT5wY2ljb3JlLmRldi0+aWQucmV2aXNpb24gPD0gNSkgewotCQkvKiBJTUNGR0xPIHRpbWVvdXRzIHdvcmthcm91bmQuICovCisJaWYgKChidXMtPmNoaXBfaWQgPT0gMHg0MzExICYmIGJ1cy0+Y2hpcF9yZXYgPT0gMikgfHwKKwkgICAgKGJ1cy0+Y2hpcF9pZCA9PSAweDQzMTIpKSB7CiAJCXRtcCA9IHNzYl9yZWFkMzIoZGV2LT5kZXYsIFNTQl9JTUNGR0xPKTsKLQkJc3dpdGNoIChidXMtPmJ1c3R5cGUpIHsKLQkJY2FzZSBTU0JfQlVTVFlQRV9QQ0k6Ci0JCWNhc2UgU1NCX0JVU1RZUEVfUENNQ0lBOgotCQkJdG1wICY9IH5TU0JfSU1DRkdMT19SRVFUTzsKLQkJCXRtcCAmPSB+U1NCX0lNQ0ZHTE9fU0VSVE87Ci0JCQl0bXAgfD0gMHgzMjsKLQkJCWJyZWFrOwotCQljYXNlIFNTQl9CVVNUWVBFX1NTQjoKLQkJCXRtcCAmPSB+U1NCX0lNQ0ZHTE9fUkVRVE87Ci0JCQl0bXAgJj0gflNTQl9JTUNGR0xPX1NFUlRPOwotCQkJdG1wIHw9IDB4NTM7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9CisJCXRtcCAmPSB+U1NCX0lNQ0ZHTE9fUkVRVE87CisJCXRtcCAmPSB+U1NCX0lNQ0ZHTE9fU0VSVE87CisJCXRtcCB8PSAweDM7CiAJCXNzYl93cml0ZTMyKGRldi0+ZGV2LCBTU0JfSU1DRkdMTywgdG1wKTsKKwkJc3NiX2NvbW1pdF9zZXR0aW5ncyhidXMpOwogCX0KLSNlbmRpZiAvKiBDT05GSUdfU1NCX0RSSVZFUl9QQ0lDT1JFICovCiB9CiAKIHN0YXRpYyB2b2lkIGI0M19zZXRfc3ludGhfcHVfZGVsYXkoc3RydWN0IGI0M193bGRldiAqZGV2LCBib29sIGlkbGUpCkBAIC00ODYyLDI1ICs0ODU3LDggQEAKIHN0YXRpYyBpbnQgYjQzX29uZV9jb3JlX2F0dGFjaChzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LCBzdHJ1Y3QgYjQzX3dsICp3bCkKIHsKIAlzdHJ1Y3QgYjQzX3dsZGV2ICp3bGRldjsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAotCWlmICghbGlzdF9lbXB0eSgmd2wtPmRldmxpc3QpKSB7Ci0JCS8qIFdlIGFyZSBub3QgdGhlIGZpcnN0IGNvcmUgb24gdGhpcyBjaGlwLiAqLwotCQlwZGV2ID0gKGRldi0+YnVzLT5idXN0eXBlID09IFNTQl9CVVNUWVBFX1BDSSkgPyBkZXYtPmJ1cy0+aG9zdF9wY2kgOiBOVUxMOwotCQkvKiBPbmx5IHNwZWNpYWwgY2hpcHMgc3VwcG9ydCBtb3JlIHRoYW4gb25lIHdpcmVsZXNzCi0JCSAqIGNvcmUsIGFsdGhvdWdoIHNvbWUgb2YgdGhlIG90aGVyIGNoaXBzIGhhdmUgbW9yZSB0aGFuCi0JCSAqIG9uZSB3aXJlbGVzcyBjb3JlIGFzIHdlbGwuIENoZWNrIGZvciB0aGlzIGFuZAotCQkgKiBiYWlsIG91dCBlYXJseS4KLQkJICovCi0JCWlmICghcGRldiB8fAotCQkgICAgKChwZGV2LT5kZXZpY2UgIT0gMHg0MzIxKSAmJgotCQkgICAgIChwZGV2LT5kZXZpY2UgIT0gMHg0MzEzKSAmJiAocGRldi0+ZGV2aWNlICE9IDB4NDMxQSkpKSB7Ci0JCQliNDNkYmcod2wsICJJZ25vcmluZyB1bmNvbm5lY3RlZCA4MDIuMTEgY29yZVxuIik7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQotCX0KLQogCXdsZGV2ID0ga3phbGxvYyhzaXplb2YoKndsZGV2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF3bGRldikKIAkJZ290byBvdXQ7CkBAIC01MDAxLDcgKzQ5NzksNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgYjQzX3Byb2JlKHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBzc2JfZGV2aWNlX2lkICppZCkKK3N0YXRpYyBpbnQgYjQzX3NzYl9wcm9iZShzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3Qgc3NiX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IGI0M193bCAqd2w7CiAJaW50IGVycjsKQEAgLTUwMzksNyArNTAxNyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgYjQzX3JlbW92ZShzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgYjQzX3NzYl9yZW1vdmUoc3RydWN0IHNzYl9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYjQzX3dsICp3bCA9IHNzYl9nZXRfZGV2dHlwZWRhdGEoZGV2KTsKIAlzdHJ1Y3QgYjQzX3dsZGV2ICp3bGRldiA9IHNzYl9nZXRfZHJ2ZGF0YShkZXYpOwpAQCAtNTA4Miw4ICs1MDYwLDggQEAKIHN0YXRpYyBzdHJ1Y3Qgc3NiX2RyaXZlciBiNDNfc3NiX2RyaXZlciA9IHsKIAkubmFtZQkJPSBLQlVJTERfTU9ETkFNRSwKIAkuaWRfdGFibGUJPSBiNDNfc3NiX3RibCwKLQkucHJvYmUJCT0gYjQzX3Byb2JlLAotCS5yZW1vdmUJCT0gYjQzX3JlbW92ZSwKKwkucHJvYmUJCT0gYjQzX3NzYl9wcm9iZSwKKwkucmVtb3ZlCQk9IGI0M19zc2JfcmVtb3ZlLAogfTsKIAogc3RhdGljIHZvaWQgYjQzX3ByaW50X2RyaXZlcmluZm8odm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5oCmluZGV4IDQwZGIwMzYuLmEwZDMyN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uaApAQCAtMTMzLDYgKzEzMyw3IEBACiAKIHZvaWQgYjQzX21hY19zdXNwZW5kKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7CiB2b2lkIGI0M19tYWNfZW5hYmxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7Cit2b2lkIGI0M19tYWNfcGh5X2Nsb2NrX3NldChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIGJvb2wgb24pOwogCiAKIHN0cnVjdCBiNDNfcmVxdWVzdF9md19jb250ZXh0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X24uYwppbmRleCA4YTAwZjlhLi5iMDc1YTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X24uYwpAQCAtMjI4MSw2ICsyMjgxLDcgQEAKIAkJc2F2ZV9yZWdzX3BoeVs1XSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0FGRUNUTF9PVkVSKTsKIAkJc2F2ZV9yZWdzX3BoeVs2XSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX1RYRl80MENPX0IxUzApOwogCQlzYXZlX3JlZ3NfcGh5WzddID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfVFhGXzQwQ09fQjMyUzEpOworCQlzYXZlX3JlZ3NfcGh5WzhdID0gMDsKIAl9IGVsc2UgewogCQlzYXZlX3JlZ3NfcGh5WzBdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfQUZFQ1RMX0MxKTsKIAkJc2F2ZV9yZWdzX3BoeVsxXSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0FGRUNUTF9DMik7CkBAIC0yMjg5LDYgKzIyOTAsOCBAQAogCQlzYXZlX3JlZ3NfcGh5WzRdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfUkZDVExfT1ZFUik7CiAJCXNhdmVfcmVnc19waHlbNV0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9SRkNUTF9SU1NJTzEpOwogCQlzYXZlX3JlZ3NfcGh5WzZdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfUkZDVExfUlNTSU8yKTsKKwkJc2F2ZV9yZWdzX3BoeVs3XSA9IDA7CisJCXNhdmVfcmVnc19waHlbOF0gPSAwOwogCX0KIAogCWI0M19ucGh5X3Jzc2lfc2VsZWN0KGRldiwgNSwgdHlwZSk7CkBAIC0zNTM3LDE3ICszNTQwLDYgQEAKIAkJcmV0dXJuIGI0M19ucGh5X3JldjJfY2FsX3J4X2lxKGRldiwgdGFyZ2V0LCB0eXBlLCBkZWJ1Zyk7CiB9CiAKLS8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vTWFjUGh5Q2xrU2V0ICovCi1zdGF0aWMgdm9pZCBiNDNfbnBoeV9tYWNfcGh5X2Nsb2NrX3NldChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIGJvb2wgb24pCi17Ci0JdTMyIHRtc2xvdyA9IHNzYl9yZWFkMzIoZGV2LT5kZXYsIFNTQl9UTVNMT1cpOwotCWlmIChvbikKLQkJdG1zbG93IHw9IEI0M19UTVNMT1dfTUFDUEhZQ0xLRU47Ci0JZWxzZQotCQl0bXNsb3cgJj0gfkI0M19UTVNMT1dfTUFDUEhZQ0xLRU47Ci0Jc3NiX3dyaXRlMzIoZGV2LT5kZXYsIFNTQl9UTVNMT1csIHRtc2xvdyk7Ci19Ci0KIC8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vUnhDb3JlU2V0U3RhdGUgKi8KIHN0YXRpYyB2b2lkIGI0M19ucGh5X3NldF9yeF9jb3JlX3N0YXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTggbWFzaykKIHsKQEAgLTM2ODgsNyArMzY4MCw3IEBACiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0JCQ0ZHLCB0bXAgJiB+QjQzX05QSFlfQkJDRkdfUlNUQ0NBKTsKIAliNDNfbnBoeV9ibWFjX2Nsb2NrX2ZnYyhkZXYsIDApOwogCi0JYjQzX25waHlfbWFjX3BoeV9jbG9ja19zZXQoZGV2LCB0cnVlKTsKKwliNDNfbWFjX3BoeV9jbG9ja19zZXQoZGV2LCB0cnVlKTsKIAogCWI0M19ucGh5X3BhX292ZXJyaWRlKGRldiwgZmFsc2UpOwogCWI0M19ucGh5X2ZvcmNlX3JmX3NlcXVlbmNlKGRldiwgQjQzX1JGU0VRX1JYMlRYKTsKQEAgLTM4NDUsOCArMzgzNyw4IEBACiB7CiAJc3RydWN0IGI0M19waHkgKnBoeSA9ICZkZXYtPnBoeTsKIAotCWNvbnN0IHN0cnVjdCBiNDNfbnBoeV9jaGFubmVsdGFiX2VudHJ5X3JldjIgKnRhYmVudF9yMjsKLQljb25zdCBzdHJ1Y3QgYjQzX25waHlfY2hhbm5lbHRhYl9lbnRyeV9yZXYzICp0YWJlbnRfcjM7CisJY29uc3Qgc3RydWN0IGI0M19ucGh5X2NoYW5uZWx0YWJfZW50cnlfcmV2MiAqdGFiZW50X3IyID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgYjQzX25waHlfY2hhbm5lbHRhYl9lbnRyeV9yZXYzICp0YWJlbnRfcjMgPSBOVUxMOwogCiAJdTggdG1wOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L21haW4uYwppbmRleCBjN2ZkNzNlLi4xYWI4ODYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMKQEAgLTIyMzQsNyArMjIzNCw3IEBACiAJYjQzbGVnYWN5X3dyaXRlMzIoZGV2LCBCNDNsZWdhY3lfTU1JT19ETUE1X0lSUV9NQVNLLCAweDAwMDBEQzAwKTsKIAogCXZhbHVlMzIgPSBzc2JfcmVhZDMyKGRldi0+ZGV2LCBTU0JfVE1TTE9XKTsKLQl2YWx1ZTMyIHw9IDB4MDAxMDAwMDA7CisJdmFsdWUzMiB8PSBCNDNsZWdhY3lfVE1TTE9XX01BQ1BIWUNMS0VOOwogCXNzYl93cml0ZTMyKGRldi0+ZGV2LCBTU0JfVE1TTE9XLCB2YWx1ZTMyKTsKIAogCWI0M2xlZ2FjeV93cml0ZTE2KGRldiwgQjQzbGVnYWN5X01NSU9fUE9XRVJVUF9ERUxBWSwKQEAgLTMxMDQsMzcgKzMxMDQsNiBAQAogCW1lbXNldCgmZGV2LT5ub2lzZWNhbGMsIDAsIHNpemVvZihkZXYtPm5vaXNlY2FsYykpOwogfQogCi1zdGF0aWMgdm9pZCBiNDNsZWdhY3lfaW1jZmdsb190aW1lb3V0c193b3JrYXJvdW5kKHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldikKLXsKLSNpZmRlZiBDT05GSUdfU1NCX0RSSVZFUl9QQ0lDT1JFCi0Jc3RydWN0IHNzYl9idXMgKmJ1cyA9IGRldi0+ZGV2LT5idXM7Ci0JdTMyIHRtcDsKLQotCWlmIChidXMtPnBjaWNvcmUuZGV2ICYmCi0JICAgIGJ1cy0+cGNpY29yZS5kZXYtPmlkLmNvcmVpZCA9PSBTU0JfREVWX1BDSSAmJgotCSAgICBidXMtPnBjaWNvcmUuZGV2LT5pZC5yZXZpc2lvbiA8PSA1KSB7Ci0JCS8qIElNQ0ZHTE8gdGltZW91dHMgd29ya2Fyb3VuZC4gKi8KLQkJdG1wID0gc3NiX3JlYWQzMihkZXYtPmRldiwgU1NCX0lNQ0ZHTE8pOwotCQlzd2l0Y2ggKGJ1cy0+YnVzdHlwZSkgewotCQljYXNlIFNTQl9CVVNUWVBFX1BDSToKLQkJY2FzZSBTU0JfQlVTVFlQRV9QQ01DSUE6Ci0JCQl0bXAgJj0gflNTQl9JTUNGR0xPX1JFUVRPOwotCQkJdG1wICY9IH5TU0JfSU1DRkdMT19TRVJUTzsKLQkJCXRtcCB8PSAweDMyOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1NCX0JVU1RZUEVfU1NCOgotCQkJdG1wICY9IH5TU0JfSU1DRkdMT19SRVFUTzsKLQkJCXRtcCAmPSB+U1NCX0lNQ0ZHTE9fU0VSVE87Ci0JCQl0bXAgfD0gMHg1MzsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQkJc3NiX3dyaXRlMzIoZGV2LT5kZXYsIFNTQl9JTUNGR0xPLCB0bXApOwotCX0KLSNlbmRpZiAvKiBDT05GSUdfU1NCX0RSSVZFUl9QQ0lDT1JFICovCi19Ci0KIHN0YXRpYyB2b2lkIGI0M2xlZ2FjeV9zZXRfc3ludGhfcHVfZGVsYXkoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2LAogCQkJCQkgIGJvb2wgaWRsZSkgewogCXUxNiBwdV9kZWxheSA9IDEwNTA7CkBAIC0zMjc4LDcgKzMyNDcsNiBAQAogCS8qIEVuYWJsZSBJUlEgcm91dGluZyB0byB0aGlzIGRldmljZS4gKi8KIAlzc2JfcGNpY29yZV9kZXZfaXJxdmVjc19lbmFibGUoJmJ1cy0+cGNpY29yZSwgZGV2LT5kZXYpOwogCi0JYjQzbGVnYWN5X2ltY2ZnbG9fdGltZW91dHNfd29ya2Fyb3VuZChkZXYpOwogCXByZXBhcmVfcGh5X2RhdGFfZm9yX2luaXQoZGV2KTsKIAliNDNsZWdhY3lfcGh5X2NhbGlicmF0ZShkZXYpOwogCWVyciA9IGI0M2xlZ2FjeV9jaGlwX2luaXQoZGV2KTsKQEAgLTM3MjgsMjYgKzM2OTYsOCBAQAogCQkJCSAgICAgc3RydWN0IGI0M2xlZ2FjeV93bCAqd2wpCiB7CiAJc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqd2xkZXY7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJaW50IGVyciA9IC1FTk9NRU07CiAKLQlpZiAoIWxpc3RfZW1wdHkoJndsLT5kZXZsaXN0KSkgewotCQkvKiBXZSBhcmUgbm90IHRoZSBmaXJzdCBjb3JlIG9uIHRoaXMgY2hpcC4gKi8KLQkJcGRldiA9IChkZXYtPmJ1cy0+YnVzdHlwZSA9PSBTU0JfQlVTVFlQRV9QQ0kpID8gZGV2LT5idXMtPmhvc3RfcGNpIDogTlVMTDsKLQkJLyogT25seSBzcGVjaWFsIGNoaXBzIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSB3aXJlbGVzcwotCQkgKiBjb3JlLCBhbHRob3VnaCBzb21lIG9mIHRoZSBvdGhlciBjaGlwcyBoYXZlIG1vcmUgdGhhbgotCQkgKiBvbmUgd2lyZWxlc3MgY29yZSBhcyB3ZWxsLiBDaGVjayBmb3IgdGhpcyBhbmQKLQkJICogYmFpbCBvdXQgZWFybHkuCi0JCSAqLwotCQlpZiAoIXBkZXYgfHwKLQkJICAgICgocGRldi0+ZGV2aWNlICE9IDB4NDMyMSkgJiYKLQkJICAgICAocGRldi0+ZGV2aWNlICE9IDB4NDMxMykgJiYKLQkJICAgICAocGRldi0+ZGV2aWNlICE9IDB4NDMxQSkpKSB7Ci0JCQliNDNsZWdhY3lkYmcod2wsICJJZ25vcmluZyB1bmNvbm5lY3RlZCA4MDIuMTEgY29yZVxuIik7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQotCX0KLQogCXdsZGV2ID0ga3phbGxvYyhzaXplb2YoKndsZGV2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF3bGRldikKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfbWFpbi5jCmluZGV4IDFkOWFlZDYuLmQ1MDg0ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfbWFpbi5jCkBAIC03OSwxMyArNzksOCBAQAogCWlmICghcnRubF9sb2NrZWQpCiAJCXJ0bmxfbG9jaygpOwogCi0JcmV0ID0gMDsKLQlpZiAoc3RyY2hyKGRldi0+bmFtZSwgJyUnKSkKLQkJcmV0ID0gZGV2X2FsbG9jX25hbWUoZGV2LCBkZXYtPm5hbWUpOwotCiAJU0VUX05FVERFVl9ERVYoZGV2LCBtZGV2LT5kZXYucGFyZW50KTsKLQlpZiAocmV0ID49IDApCi0JCXJldCA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpOworCXJldCA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpOwogCiAJaWYgKCFydG5sX2xvY2tlZCkKIAkJcnRubF91bmxvY2soKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC00OTY1LWxpYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTQ5NjUtbGliLmMKaW5kZXggNWE4YTNjYy4uN2U1ZTg1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTQ5NjUtbGliLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTQ5NjUtbGliLmMKQEAgLTk1NSw5ICs5NTUsNiBAQAogCWlmIChwcml2LT5jZmctPnNjYW5fcnhfYW50ZW5uYXNbYmFuZF0pCiAJCXJ4X2FudCA9IHByaXYtPmNmZy0+c2Nhbl9yeF9hbnRlbm5hc1tiYW5kXTsKIAotCWlmIChwcml2LT5jZmctPnNjYW5fdHhfYW50ZW5uYXNbYmFuZF0pCi0JCXNjYW5fdHhfYW50ZW5uYXMgPSBwcml2LT5jZmctPnNjYW5fdHhfYW50ZW5uYXNbYmFuZF07Ci0KIAlwcml2LT5zY2FuX3R4X2FudFtiYW5kXSA9IGl3bDQ5NjVfdG9nZ2xlX3R4X2FudChwcml2LAogCQkJCQkJcHJpdi0+c2Nhbl90eF9hbnRbYmFuZF0sCiAJCQkJCQkgICAgc2Nhbl90eF9hbnRlbm5hcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS1ycy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTQ5NjUtcnMuYwppbmRleCAzMWFjNjcyLi4yNGQxNDk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS1ycy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC00OTY1LXJzLmMKQEAgLTI2MDQsNyArMjYwNCw3IEBACiAJc3RydWN0IGl3bF9scV9zdGEgKmxxX3N0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXY7CiAJY2hhciBidWZbNjRdOwotCWludCBidWZfc2l6ZTsKKwlzaXplX3QgYnVmX3NpemU7CiAJdTMyIHBhcnNlZF9yYXRlOwogCXN0cnVjdCBpd2xfc3RhdGlvbl9wcml2ICpzdGFfcHJpdiA9CiAJCWNvbnRhaW5lcl9vZihscV9zdGEsIHN0cnVjdCBpd2xfc3RhdGlvbl9wcml2LCBscV9zdGEpOwpAQCAtMjg2MCw3ICsyODYwLDYgQEAKIAogaW50IGl3bDQ5NjVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKHZvaWQpCiB7Ci0JcHJfZXJyKCJSZWdpc3RlcmluZyA0OTY1IHJhdGUgY29udHJvbCBvcGVyYXRpb25zXG4iKTsKIAlyZXR1cm4gaWVlZTgwMjExX3JhdGVfY29udHJvbF9yZWdpc3RlcigmcnNfNDk2NV9vcHMpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS10eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTQ5NjUtdHguYwppbmRleCA1YzQwNTAyLi43OWFjMDgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS10eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC00OTY1LXR4LmMKQEAgLTMxNiwxMiArMzE2LDE4IEBACiAKIAloZHJfbGVuID0gaWVlZTgwMjExX2hkcmxlbihmYyk7CiAKLQkvKiBGaW5kIGluZGV4IGludG8gc3RhdGlvbiB0YWJsZSBmb3IgZGVzdGluYXRpb24gc3RhdGlvbiAqLwotCXN0YV9pZCA9IGl3bF9sZWdhY3lfc3RhX2lkX29yX2Jyb2FkY2FzdChwcml2LCBjdHgsIGluZm8tPmNvbnRyb2wuc3RhKTsKLQlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKLQkJSVdMX0RFQlVHX0RST1AocHJpdiwgIkRyb3BwaW5nIC0gSU5WQUxJRCBTVEFUSU9OOiAlcE1cbiIsCi0JCQkgICAgICAgaGRyLT5hZGRyMSk7Ci0JCWdvdG8gZHJvcF91bmxvY2s7CisJLyogRm9yIG1hbmFnZW1lbnQgZnJhbWVzIHVzZSBicm9hZGNhc3QgaWQgdG8gZG8gbm90IGJyZWFrIGFnZ3JlZ2F0aW9uICovCisJaWYgKCFpZWVlODAyMTFfaXNfZGF0YShmYykpCisJCXN0YV9pZCA9IGN0eC0+YmNhc3Rfc3RhX2lkOworCWVsc2UgeworCQkvKiBGaW5kIGluZGV4IGludG8gc3RhdGlvbiB0YWJsZSBmb3IgZGVzdGluYXRpb24gc3RhdGlvbiAqLworCQlzdGFfaWQgPSBpd2xfbGVnYWN5X3N0YV9pZF9vcl9icm9hZGNhc3QocHJpdiwgY3R4LCBpbmZvLT5jb250cm9sLnN0YSk7CisKKwkJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7CisJCQlJV0xfREVCVUdfRFJPUChwcml2LCAiRHJvcHBpbmcgLSBJTlZBTElEIFNUQVRJT046ICVwTVxuIiwKKwkJCQkgICAgICAgaGRyLT5hZGRyMSk7CisJCQlnb3RvIGRyb3BfdW5sb2NrOworCQl9CiAJfQogCiAJSVdMX0RFQlVHX1RYKHByaXYsICJzdGF0aW9uIElkICVkXG4iLCBzdGFfaWQpOwpAQCAtMTEyNywxMiArMTEzMywxNiBAQAogCSAgICAgcS0+cmVhZF9wdHIgPSBpd2xfbGVnYWN5X3F1ZXVlX2luY193cmFwKHEtPnJlYWRfcHRyLCBxLT5uX2JkKSkgewogCiAJCXR4X2luZm8gPSAmdHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXTsKLQkJaXdsNDk2NV90eF9zdGF0dXMocHJpdiwgdHhfaW5mbywKLQkJCQkgdHhxX2lkID49IElXTDQ5NjVfRklSU1RfQU1QRFVfUVVFVUUpOworCisJCWlmIChXQVJOX09OX09OQ0UodHhfaW5mby0+c2tiID09IE5VTEwpKQorCQkJY29udGludWU7CiAKIAkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopdHhfaW5mby0+c2tiLT5kYXRhOwotCQlpZiAoaGRyICYmIGllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItPmZyYW1lX2NvbnRyb2wpKQorCQlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCQluZnJlZWQrKzsKKworCQlpd2w0OTY1X3R4X3N0YXR1cyhwcml2LCB0eF9pbmZvLAorCQkJCSB0eHFfaWQgPj0gSVdMNDk2NV9GSVJTVF9BTVBEVV9RVUVVRSk7CiAJCXR4X2luZm8tPnNrYiA9IE5VTEw7CiAKIAkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2ZyZWVfdGZkKHByaXYsIHR4cSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWNvcmUuYwppbmRleCBjMTUxMWIxLi40MmRmODMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1jb3JlLmMKQEAgLTIxMSwxMCArMjExLDcgQEAKIAkJaWYgKCFpd2xfbGVnYWN5X2lzX2NoYW5uZWxfdmFsaWQoY2gpKQogCQkJY29udGludWU7CiAKLQkJaWYgKGl3bF9sZWdhY3lfaXNfY2hhbm5lbF9hX2JhbmQoY2gpKQotCQkJc2JhbmQgPSAgJnByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOwotCQllbHNlCi0JCQlzYmFuZCA9ICAmcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07CisJCXNiYW5kID0gJnByaXYtPmJhbmRzW2NoLT5iYW5kXTsKIAogCQlnZW9fY2ggPSAmc2JhbmQtPmNoYW5uZWxzW3NiYW5kLT5uX2NoYW5uZWxzKytdOwogCkBAIC0yMTE3LDEwICsyMTE0LDkgQEAKIAlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyIHRvIGNoYW5uZWwgJWQgY2hhbmdlZCAweCVYXG4iLAogCQkJCQljaGFubmVsLT5od192YWx1ZSwgY2hhbmdlZCk7CiAKLQlpZiAodW5saWtlbHkoIXByaXYtPmNmZy0+bW9kX3BhcmFtcy0+ZGlzYWJsZV9od19zY2FuICYmCi0JCQl0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKSkgeworCWlmICh1bmxpa2VseSh0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKSkgewogCQlzY2FuX2FjdGl2ZSA9IDE7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBzY2FubmluZ1xuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAic2NhbiBhY3RpdmVcbiIpOwogCX0KIAogCWlmIChjaGFuZ2VkICYgKElFRUU4MDIxMV9DT05GX0NIQU5HRV9TTVBTIHwKQEAgLTIxNTUsNiArMjE1MSwxMyBAQAogCQkJZ290byBzZXRfY2hfb3V0OwogCQl9CiAKKwkJaWYgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKKwkJICAgICFpd2xfbGVnYWN5X2lzX2NoYW5uZWxfaWJzcyhjaF9pbmZvKSkgeworCQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIG5vdCBJQlNTIGNoYW5uZWxcbiIpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gc2V0X2NoX291dDsKKwkJfQorCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAkJZm9yX2VhY2hfY29udGV4dChwcml2LCBjdHgpIHsKQEAgLTI0MzMsMTEgKzI0MzYsMTMgQEAKIAogCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiY2hhbmdlcyA9IDB4JVhcbiIsIGNoYW5nZXMpOwogCi0JaWYgKCFpd2xfbGVnYWN5X2lzX2FsaXZlKHByaXYpKQotCQlyZXR1cm47Ci0KIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKKwlpZiAoIWl3bF9sZWdhY3lfaXNfYWxpdmUocHJpdikpIHsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CisJCXJldHVybjsKKwl9CisKIAlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX1FPUykgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0yNjQ2LDcgKzI2NTEsNyBAQAogCiBub25lOgogCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGhlcmUgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byBzZXJ2aWNlLiAqLwotCS8qIG9ubHkgUmUtZW5hYmxlIGlmIGRpYWJsZWQgYnkgaXJxICovCisJLyogb25seSBSZS1lbmFibGUgaWYgZGlzYWJsZWQgYnkgaXJxICovCiAJaWYgKHRlc3RfYml0KFNUQVRVU19JTlRfRU5BQkxFRCwgJnByaXYtPnN0YXR1cykpCiAJCWl3bF9sZWdhY3lfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWNvcmUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1jb3JlLmgKaW5kZXggZjAzYjQ2My4uYmM2NmM2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWNvcmUuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtY29yZS5oCkBAIC0yODcsNyArMjg3LDYgQEAKIAlzdHJ1Y3QgaXdsX2Jhc2VfcGFyYW1zICpiYXNlX3BhcmFtczsKIAkvKiBwYXJhbXMgbGlrZWx5IHRvIGNoYW5nZSB3aXRoaW4gYSBkZXZpY2UgZmFtaWx5ICovCiAJdTggc2Nhbl9yeF9hbnRlbm5hc1tJRUVFODAyMTFfTlVNX0JBTkRTXTsKLQl1OCBzY2FuX3R4X2FudGVubmFzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwogCWVudW0gaXdsX2xlZF9tb2RlIGxlZF9tb2RlOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWRldi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWRldi5oCmluZGV4IDllZTg0OWQuLmJlMDEwNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1kZXYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtZGV2LmgKQEAgLTEzNCw3ICsxMzQsNyBAQAogCQkJCSogc3BhY2UgbW9yZSB0aGFuIHRoaXMgKi8KIAlpbnQgaGlnaF9tYXJrOyAgICAgICAgIC8qIGhpZ2ggd2F0ZXJtYXJrLCBzdG9wIHF1ZXVlIGlmIGZyZWUKIAkJCQkqIHNwYWNlIGxlc3MgdGhhbiB0aGlzICovCi19IF9fcGFja2VkOworfTsKIAogLyogT25lIGZvciBlYWNoIFRGRCAqLwogc3RydWN0IGl3bF90eF9pbmZvIHsKQEAgLTI5MCw2ICsyOTAsNyBAQAogCUNNRF9TSVpFX0hVR0UgPSAoMSA8PCAwKSwKIAlDTURfQVNZTkMgPSAoMSA8PCAxKSwKIAlDTURfV0FOVF9TS0IgPSAoMSA8PCAyKSwKKwlDTURfTUFQUEVEID0gKDEgPDwgMyksCiB9OwogCiAjZGVmaW5lIERFRl9DTURfUEFZTE9BRF9TSVpFIDMyMApAQCAtMTA3Niw3ICsxMDc3LDYgQEAKIAlzcGlubG9ja190IGhjbWRfbG9jazsJLyogcHJvdGVjdCBoY21kICovCiAJc3BpbmxvY2tfdCByZWdfbG9jazsJLyogcHJvdGVjdCBodyByZWdpc3RlciBhY2Nlc3MgKi8KIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7Ci0Jc3RydWN0IG11dGV4IHN5bmNfY21kX211dGV4OyAvKiBlbmFibGUgc2VyaWFsaXphdGlvbiBvZiBzeW5jIGNvbW1hbmRzICovCiAKIAkvKiBiYXNpYyBwY2ktbmV0d29yayBkcml2ZXIgc3R1ZmYgKi8KIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKQEAgLTE0MTEsNiArMTQxMSwxMiBAQAogCXJldHVybiAoIShjaC0+ZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9BQ1RJVkUpKSA/IDEgOiAwOwogfQogCitzdGF0aWMgaW5saW5lIGludAoraXdsX2xlZ2FjeV9pc19jaGFubmVsX2lic3MoY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoKQoreworCXJldHVybiAoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfSUJTUykgPyAxIDogMDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkCiBfX2l3bF9sZWdhY3lfZnJlZV9wYWdlcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBwYWdlICpwYWdlKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWhjbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1oY21kLmMKaW5kZXggOWQ3MjFjYi4uNjJiNGIwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWhjbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtaGNtZC5jCkBAIC0xNDUsNiArMTQ1LDggQEAKIAlpbnQgY21kX2lkeDsKIAlpbnQgcmV0OwogCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmcHJpdi0+bXV0ZXgpOworCiAJQlVHX09OKGNtZC0+ZmxhZ3MgJiBDTURfQVNZTkMpOwogCiAJIC8qIEEgc3luY2hyb25vdXMgY29tbWFuZCBjYW4gbm90IGhhdmUgYSBjYWxsYmFjayBzZXQuICovCkBAIC0xNTIsNyArMTU0LDYgQEAKIAogCUlXTF9ERUJVR19JTkZPKHByaXYsICJBdHRlbXB0aW5nIHRvIHNlbmQgc3luYyBjb21tYW5kICVzXG4iLAogCQkJaXdsX2xlZ2FjeV9nZXRfY21kX3N0cmluZyhjbWQtPmlkKSk7Ci0JbXV0ZXhfbG9jaygmcHJpdi0+c3luY19jbWRfbXV0ZXgpOwogCiAJc2V0X2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOwogCUlXTF9ERUJVR19JTkZPKHByaXYsICJTZXR0aW5nIEhDTURfQUNUSVZFIGZvciBjb21tYW5kICVzXG4iLApAQCAtMjI0LDcgKzIyNSw2IEBACiAJCWNtZC0+cmVwbHlfcGFnZSA9IDA7CiAJfQogb3V0OgotCW11dGV4X3VubG9jaygmcHJpdi0+c3luY19jbWRfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9sZWdhY3lfc2VuZF9jbWRfc3luYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtaGVscGVycy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWhlbHBlcnMuaAppbmRleCAwMjEzMmU3Li5hNmVmZmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtaGVscGVycy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1oZWxwZXJzLmgKQEAgLTE0OSw2ICsxNDksMTIgQEAKIAlJV0xfREVCVUdfSVNSKHByaXYsICJEaXNhYmxlZCBpbnRlcnJ1cHRzXG4iKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGl3bF9sZWdhY3lfZW5hYmxlX3Jma2lsbF9pbnQoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCUlXTF9ERUJVR19JU1IocHJpdiwgIkVuYWJsaW5nIHJma2lsbCBpbnRlcnJ1cHRcbiIpOworCWl3bF93cml0ZTMyKHByaXYsIENTUl9JTlRfTUFTSywgQ1NSX0lOVF9CSVRfUkZfS0lMTCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfbGVnYWN5X2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlJV0xfREVCVUdfSVNSKHByaXYsICJFbmFibGluZyBpbnRlcnJ1cHRzXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1sZWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1sZWQuYwppbmRleCAxNWViOGI3Li5iZGEwZDYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtbGVkLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWxlZC5jCkBAIC00OCw4ICs0OCwyMSBAQAogTU9EVUxFX1BBUk1fREVTQyhsZWRfbW9kZSwgIjA9c3lzdGVtIGRlZmF1bHQsICIKIAkJIjE9T24oUkYgT24pL09mZihSRiBPZmYpLCAyPWJsaW5raW5nIik7CiAKKy8qIFRocm91Z2hwdXQJCU9GRiB0aW1lKG1zKQlPTiB0aW1lIChtcykKKyAqCT4zMDAJCQkyNQkJMjUKKyAqCT4yMDAgdG8gMzAwCQk0MAkJNDAKKyAqCT4xMDAgdG8gMjAwCQk1NQkJNTUKKyAqCT43MCB0byAxMDAJCTY1CQk2NQorICoJPjUwIHRvIDcwCQk3NQkJNzUKKyAqCT4yMCB0byA1MAkJODUJCTg1CisgKgk+MTAgdG8gMjAJCTk1CQk5NQorICoJPjUgdG8gMTAJCTExMAkJMTEwCisgKgk+MSB0byA1CQkJMTMwCQkxMzAKKyAqCT4wIHRvIDEJCQkxNjcJCTE2NworICoJPD0wCQkJCQlTT0xJRCBPTgorICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90cHRfYmxpbmsgaXdsX2JsaW5rW10gPSB7Ci0JeyAudGhyb3VnaHB1dCA9IDAgKiAxMDI0IC0gMSwgLmJsaW5rX3RpbWUgPSAzMzQgfSwKKwl7IC50aHJvdWdocHV0ID0gMCwgLmJsaW5rX3RpbWUgPSAzMzQgfSwKIAl7IC50aHJvdWdocHV0ID0gMSAqIDEwMjQgLSAxLCAuYmxpbmtfdGltZSA9IDI2MCB9LAogCXsgLnRocm91Z2hwdXQgPSA1ICogMTAyNCAtIDEsIC5ibGlua190aW1lID0gMjIwIH0sCiAJeyAudGhyb3VnaHB1dCA9IDEwICogMTAyNCAtIDEsIC5ibGlua190aW1lID0gMTkwIH0sCkBAIC0xMDEsNiArMTE0LDExIEBACiAJaWYgKHByaXYtPmJsaW5rX29uID09IG9uICYmIHByaXYtPmJsaW5rX29mZiA9PSBvZmYpCiAJCXJldHVybiAwOwogCisJaWYgKG9mZiA9PSAwKSB7CisJCS8qIGxlZCBpcyBTT0xJRF9PTiAqLworCQlvbiA9IElXTF9MRURfU09MSUQ7CisJfQorCiAJSVdMX0RFQlVHX0xFRChwcml2LCAiTGVkIGJsaW5rIHRpbWUgY29tcGVuc2F0aW9uPSV1XG4iLAogCQkJcHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+bGVkX2NvbXBlbnNhdGlvbik7CiAJbGVkX2NtZC5vbiA9IGl3bF9sZWdhY3lfYmxpbmtfY29tcGVuc2F0aW9uKHByaXYsIG9uLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLXR4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtdHguYwppbmRleCBhMjI3NzczLi40ZmZmOTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtdHguYwpAQCAtMTQ2LDMzICsxNDYsMzIgQEAKIHsKIAlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW3ByaXYtPmNtZF9xdWV1ZV07CiAJc3RydWN0IGl3bF9xdWV1ZSAqcSA9ICZ0eHEtPnE7Ci0JYm9vbCBodWdlID0gZmFsc2U7CiAJaW50IGk7CiAKIAlpZiAocS0+bl9iZCA9PSAwKQogCQlyZXR1cm47CiAKIAl3aGlsZSAocS0+cmVhZF9wdHIgIT0gcS0+d3JpdGVfcHRyKSB7Ci0JCS8qIHdlIGhhdmUgbm8gd2F5IHRvIHRlbGwgaWYgaXQgaXMgYSBodWdlIGNtZCBBVE0gKi8KIAkJaSA9IGl3bF9sZWdhY3lfZ2V0X2NtZF9pbmRleChxLCBxLT5yZWFkX3B0ciwgMCk7CiAKLQkJaWYgKHR4cS0+bWV0YVtpXS5mbGFncyAmIENNRF9TSVpFX0hVR0UpCi0JCQlodWdlID0gdHJ1ZTsKLQkJZWxzZQorCQlpZiAodHhxLT5tZXRhW2ldLmZsYWdzICYgQ01EX01BUFBFRCkgewogCQkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LAogCQkJCQkgZG1hX3VubWFwX2FkZHIoJnR4cS0+bWV0YVtpXSwgbWFwcGluZyksCiAJCQkJCSBkbWFfdW5tYXBfbGVuKCZ0eHEtPm1ldGFbaV0sIGxlbiksCiAJCQkJCSBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCQkJdHhxLT5tZXRhW2ldLmZsYWdzID0gMDsKKwkJfQogCiAJCXEtPnJlYWRfcHRyID0gaXdsX2xlZ2FjeV9xdWV1ZV9pbmNfd3JhcChxLT5yZWFkX3B0ciwgcS0+bl9iZCk7CiAJfQogCi0JaWYgKGh1Z2UpIHsKLQkJaSA9IHEtPm5fd2luZG93OworCWkgPSBxLT5uX3dpbmRvdzsKKwlpZiAodHhxLT5tZXRhW2ldLmZsYWdzICYgQ01EX01BUFBFRCkgewogCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsCiAJCQkJIGRtYV91bm1hcF9hZGRyKCZ0eHEtPm1ldGFbaV0sIG1hcHBpbmcpLAogCQkJCSBkbWFfdW5tYXBfbGVuKCZ0eHEtPm1ldGFbaV0sIGxlbiksCiAJCQkJIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisJCXR4cS0+bWV0YVtpXS5mbGFncyA9IDA7CiAJfQogfQogRVhQT1JUX1NZTUJPTChpd2xfbGVnYWN5X2NtZF9xdWV1ZV91bm1hcCk7CkBAIC00NjcsMjkgKzQ2NiwyNyBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlpZiAoaXdsX2xlZ2FjeV9xdWV1ZV9zcGFjZShxKSA8ICgoY21kLT5mbGFncyAmIENNRF9BU1lOQykgPyAyIDogMSkpIHsKLQkJSVdMX0VSUihwcml2LCAiTm8gc3BhY2UgaW4gY29tbWFuZCBxdWV1ZVxuIik7Ci0JCUlXTF9FUlIocHJpdiwgIlJlc3RhcnRpbmcgYWRhcHRlciBkdWUgdG8gcXVldWUgZnVsbFxuIik7Ci0JCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7Ci0JCXJldHVybiAtRU5PU1BDOwotCX0KLQogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5oY21kX2xvY2ssIGZsYWdzKTsKIAotCS8qIElmIHRoaXMgaXMgYSBodWdlIGNtZCwgbWFyayB0aGUgaHVnZSBmbGFnIGFsc28gb24gdGhlIG1ldGEuZmxhZ3MKLQkgKiBvZiB0aGUgX29yaWdpbmFsXyBjbWQuIFRoaXMgaXMgdXNlZCBmb3IgRE1BIG1hcHBpbmcgY2xlYW4gdXAuCi0JICovCi0JaWYgKGNtZC0+ZmxhZ3MgJiBDTURfU0laRV9IVUdFKSB7Ci0JCWlkeCA9IGl3bF9sZWdhY3lfZ2V0X2NtZF9pbmRleChxLCBxLT53cml0ZV9wdHIsIDApOwotCQl0eHEtPm1ldGFbaWR4XS5mbGFncyA9IENNRF9TSVpFX0hVR0U7CisJaWYgKGl3bF9sZWdhY3lfcXVldWVfc3BhY2UocSkgPCAoKGNtZC0+ZmxhZ3MgJiBDTURfQVNZTkMpID8gMiA6IDEpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmhjbWRfbG9jaywgZmxhZ3MpOworCisJCUlXTF9FUlIocHJpdiwgIlJlc3RhcnRpbmcgYWRhcHRlciBkdWUgdG8gY29tbWFuZCBxdWV1ZSBmdWxsXG4iKTsKKwkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKKwkJcmV0dXJuIC1FTk9TUEM7CiAJfQogCiAJaWR4ID0gaXdsX2xlZ2FjeV9nZXRfY21kX2luZGV4KHEsIHEtPndyaXRlX3B0ciwgY21kLT5mbGFncyAmIENNRF9TSVpFX0hVR0UpOwogCW91dF9jbWQgPSB0eHEtPmNtZFtpZHhdOwogCW91dF9tZXRhID0gJnR4cS0+bWV0YVtpZHhdOwogCisJaWYgKFdBUk5fT04ob3V0X21ldGEtPmZsYWdzICYgQ01EX01BUFBFRCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+aGNtZF9sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRU5PU1BDOworCX0KKwogCW1lbXNldChvdXRfbWV0YSwgMCwgc2l6ZW9mKCpvdXRfbWV0YSkpOwkvKiByZS1pbml0aWFsaXplIHRvIE5VTEwgKi8KLQlvdXRfbWV0YS0+ZmxhZ3MgPSBjbWQtPmZsYWdzOworCW91dF9tZXRhLT5mbGFncyA9IGNtZC0+ZmxhZ3MgfCBDTURfTUFQUEVEOwogCWlmIChjbWQtPmZsYWdzICYgQ01EX1dBTlRfU0tCKQogCQlvdXRfbWV0YS0+c291cmNlID0gY21kOwogCWlmIChjbWQtPmZsYWdzICYgQ01EX0FTWU5DKQpAQCAtNjEwLDYgKzYwNyw3IEBACiAJc3RydWN0IGl3bF9kZXZpY2VfY21kICpjbWQ7CiAJc3RydWN0IGl3bF9jbWRfbWV0YSAqbWV0YTsKIAlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW3ByaXYtPmNtZF9xdWV1ZV07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIElmIGEgVHggY29tbWFuZCBpcyBiZWluZyBoYW5kbGVkIGFuZCBpdCBpc24ndCBpbiB0aGUgYWN0dWFsCiAJICogY29tbWFuZCBxdWV1ZSB0aGVuIHRoZXJlIGEgY29tbWFuZCByb3V0aW5nIGJ1ZyBoYXMgYmVlbiBpbnRyb2R1Y2VkCkBAIC02MjMsMTQgKzYyMSw2IEBACiAJCXJldHVybjsKIAl9CiAKLQkvKiBJZiB0aGlzIGlzIGEgaHVnZSBjbWQsIGNsZWFyIHRoZSBodWdlIGZsYWcgb24gdGhlIG1ldGEuZmxhZ3MKLQkgKiBvZiB0aGUgX29yaWdpbmFsXyBjbWQuIFNvIHRoYXQgaXdsX2xlZ2FjeV9jbWRfcXVldWVfZnJlZSB3b24ndCB1bm1hcAotCSAqIHRoZSBETUEgYnVmZmVyIGZvciB0aGUgc2NhbiAoaHVnZSkgY29tbWFuZC4KLQkgKi8KLQlpZiAoaHVnZSkgewotCQljbWRfaW5kZXggPSBpd2xfbGVnYWN5X2dldF9jbWRfaW5kZXgoJnR4cS0+cSwgaW5kZXgsIDApOwotCQl0eHEtPm1ldGFbY21kX2luZGV4XS5mbGFncyA9IDA7Ci0JfQogCWNtZF9pbmRleCA9IGl3bF9sZWdhY3lfZ2V0X2NtZF9pbmRleCgmdHhxLT5xLCBpbmRleCwgaHVnZSk7CiAJY21kID0gdHhxLT5jbWRbY21kX2luZGV4XTsKIAltZXRhID0gJnR4cS0+bWV0YVtjbWRfaW5kZXhdOwpAQCAtNjQ3LDYgKzYzNyw4IEBACiAJfSBlbHNlIGlmIChtZXRhLT5jYWxsYmFjaykKIAkJbWV0YS0+Y2FsbGJhY2socHJpdiwgY21kLCBwa3QpOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmhjbWRfbG9jaywgZmxhZ3MpOworCiAJaXdsX2xlZ2FjeV9oY21kX3F1ZXVlX3JlY2xhaW0ocHJpdiwgdHhxX2lkLCBpbmRleCwgY21kX2luZGV4KTsKIAogCWlmICghKG1ldGEtPmZsYWdzICYgQ01EX0FTWU5DKSkgewpAQCAtNjU1LDYgKzY0NywxMCBAQAogCQkJICAgICAgIGl3bF9sZWdhY3lfZ2V0X2NtZF9zdHJpbmcoY21kLT5oZHIuY21kKSk7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKIAl9CisKKwkvKiBNYXJrIGFzIHVubWFwcGVkICovCiAJbWV0YS0+ZmxhZ3MgPSAwOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+aGNtZF9sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9sZWdhY3lfdHhfY21kX2NvbXBsZXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bDM5NDUtYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsMzk0NS1iYXNlLmMKaW5kZXggY2M3ZWJjZS4uMGVlNmJlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsMzk0NS1iYXNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsMzk0NS1iYXNlLmMKQEAgLTI3NDgsMTEgKzI3NDgsMTIgQEAKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPQogCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCBpbml0X2FsaXZlX3N0YXJ0LndvcmspOwogCi0JaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQlyZXR1cm47Ci0KIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQorCQlnb3RvIG91dDsKKwogCWl3bDM5NDVfaW5pdF9hbGl2ZV9zdGFydChwcml2KTsKK291dDoKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KIApAQCAtMjc2MSwxMSArMjc2MiwxMiBAQAogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9CiAJICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsX3ByaXYsIGFsaXZlX3N0YXJ0LndvcmspOwogCi0JaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQlyZXR1cm47Ci0KIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQorCQlnb3RvIG91dDsKKwogCWl3bDM5NDVfYWxpdmVfc3RhcnQocHJpdik7CitvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiAKQEAgLTI5OTUsMTAgKzI5OTcsMTIgQEAKIAl9IGVsc2UgewogCQlpd2wzOTQ1X2Rvd24ocHJpdik7CiAKLQkJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQkJcmV0dXJuOwotCiAJCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwkJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKSB7CisJCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKwkJCXJldHVybjsKKwkJfQorCiAJCV9faXdsMzk0NV91cChwcml2KTsKIAkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJfQpAQCAtMzAwOSwxMSArMzAxMywxMiBAQAogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9CiAJICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsX3ByaXYsIHJ4X3JlcGxlbmlzaCk7CiAKLQlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCi0JCXJldHVybjsKLQogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCisJCWdvdG8gb3V0OworCiAJaXdsMzk0NV9yeF9yZXBsZW5pc2gocHJpdik7CitvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiAKQEAgLTM4MTAsNyArMzgxNSw2IEBACiAJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmZyZWVfZnJhbWVzKTsKIAogCW11dGV4X2luaXQoJnByaXYtPm11dGV4KTsKLQltdXRleF9pbml0KCZwcml2LT5zeW5jX2NtZF9tdXRleCk7CiAKIAlwcml2LT5pZWVlX2NoYW5uZWxzID0gTlVMTDsKIAlwcml2LT5pZWVlX3JhdGVzID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bDQ5NjUtYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsNDk2NS1iYXNlLmMKaW5kZXggZDQ4NGMzNi4uYWYyYWUyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsNDk2NS1iYXNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsNDk2NS1iYXNlLmMKQEAgLTEwNjksOSArMTA2OSwxMiBAQAogCX0KIAogCS8qIFJlLWVuYWJsZSBhbGwgaW50ZXJydXB0cyAqLwotCS8qIG9ubHkgUmUtZW5hYmxlIGlmIGRpYWJsZWQgYnkgaXJxICovCisJLyogb25seSBSZS1lbmFibGUgaWYgZGlzYWJsZWQgYnkgaXJxICovCiAJaWYgKHRlc3RfYml0KFNUQVRVU19JTlRfRU5BQkxFRCwgJnByaXYtPnN0YXR1cykpCiAJCWl3bF9sZWdhY3lfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CisJLyogUmUtZW5hYmxlIFJGX0tJTEwgaWYgaXQgb2NjdXJyZWQgKi8KKwllbHNlIGlmIChoYW5kbGVkICYgQ1NSX0lOVF9CSVRfUkZfS0lMTCkKKwkJaXdsX2xlZ2FjeV9lbmFibGVfcmZraWxsX2ludChwcml2KTsKIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0xFR0FDWV9ERUJVRwogCWlmIChpd2xfbGVnYWN5X2dldF9kZWJ1Z19sZXZlbChwcml2KSAmIChJV0xfRExfSVNSKSkgewpAQCAtMjEzOSw3ICsyMTQyLDcgQEAKIHN0YXRpYyB2b2lkIF9faXdsNDk2NV9kb3duKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBleGl0X3BlbmRpbmcgPSB0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKTsKKwlpbnQgZXhpdF9wZW5kaW5nOwogCiAJSVdMX0RFQlVHX0lORk8ocHJpdiwgRFJWX05BTUUgIiBpcyBnb2luZyBkb3duXG4iKTsKIApAQCAtMjQwMSwxMSArMjQwNCwxMiBAQAogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9CiAJICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsX3ByaXYsIGluaXRfYWxpdmVfc3RhcnQud29yayk7CiAKLQlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCi0JCXJldHVybjsKLQogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCisJCWdvdG8gb3V0OworCiAJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+aW5pdF9hbGl2ZV9zdGFydChwcml2KTsKK291dDoKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KIApAQCAtMjQxNCwxMSArMjQxOCwxMiBAQAogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9CiAJICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsX3ByaXYsIGFsaXZlX3N0YXJ0LndvcmspOwogCi0JaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQlyZXR1cm47Ci0KIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQorCQlnb3RvIG91dDsKKwogCWl3bDQ5NjVfYWxpdmVfc3RhcnQocHJpdik7CitvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiAKQEAgLTI0NjgsMTAgKzI0NzMsMTIgQEAKIAl9IGVsc2UgewogCQlpd2w0OTY1X2Rvd24ocHJpdik7CiAKLQkJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQkJcmV0dXJuOwotCiAJCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwkJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKSB7CisJCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKwkJCXJldHVybjsKKwkJfQorCiAJCV9faXdsNDk2NV91cChwcml2KTsKIAkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJfQpAQCAtMjYyNCw5ICsyNjMxLDEwIEBACiAKIAlmbHVzaF93b3JrcXVldWUocHJpdi0+d29ya3F1ZXVlKTsKIAotCS8qIGVuYWJsZSBpbnRlcnJ1cHRzIGFnYWluIGluIG9yZGVyIHRvIHJlY2VpdmUgcmZraWxsIGNoYW5nZXMgKi8KKwkvKiBVc2VyIHNwYWNlIHNvZnR3YXJlIG1heSBleHBlY3QgZ2V0dGluZyByZmtpbGwgY2hhbmdlcworCSAqIGV2ZW4gaWYgaW50ZXJmYWNlIGlzIGRvd24gKi8KIAlpd2xfd3JpdGUzMihwcml2LCBDU1JfSU5ULCAweEZGRkZGRkZGKTsKLQlpd2xfbGVnYWN5X2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCWl3bF9sZWdhY3lfZW5hYmxlX3Jma2lsbF9pbnQocHJpdik7CiAKIAlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIH0KQEAgLTI4NDcsMjEgKzI4NTUsMjIgQEAKIAogCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwogCisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCiAJaWYgKGl3bF9sZWdhY3lfaXNfcmZraWxsKHByaXYpKQotCQlnb3RvIG91dF9leGl0OworCQlnb3RvIG91dDsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSB8fAogCSAgICB0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKQotCQlnb3RvIG91dF9leGl0OworCQlnb3RvIG91dDsKIAogCWlmICghaXdsX2xlZ2FjeV9pc19hc3NvY2lhdGVkX2N0eChjdHgpKQotCQlnb3RvIG91dF9leGl0OworCQlnb3RvIG91dDsKIAogCS8qIGNoYW5uZWwgc3dpdGNoIGluIHByb2dyZXNzICovCiAJaWYgKHByaXYtPnN3aXRjaF9yeG9uLnN3aXRjaF9pbl9wcm9ncmVzcyA9PSB0cnVlKQotCQlnb3RvIG91dF9leGl0OworCQlnb3RvIG91dDsKIAotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+c2V0X2NoYW5uZWxfc3dpdGNoKSB7CiAKIAkJY2ggPSBjaGFubmVsLT5od192YWx1ZTsKQEAgLTI5MTcsNyArMjkyNiw2IEBACiAJfQogb3V0OgogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotb3V0X2V4aXQ6CiAJaWYgKCFwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MpCiAJCWllZWU4MDIxMV9jaHN3aXRjaF9kb25lKGN0eC0+dmlmLCBmYWxzZSk7CiAJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CkBAIC0yOTg0LDE1ICsyOTkyLDE1IEBACiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2xfcHJpdiwKIAkJCXR4cG93ZXJfd29yayk7CiAKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisKIAkvKiBJZiBhIHNjYW4gaGFwcGVuZWQgdG8gc3RhcnQgYmVmb3JlIHdlIGdvdCBoZXJlCiAJICogdGhlbiBqdXN0IHJldHVybjsgdGhlIHN0YXRpc3RpY3Mgbm90aWZpY2F0aW9uIHdpbGwKIAkgKiBraWNrIG9mZiBhbm90aGVyIHNjaGVkdWxlZCB3b3JrIHRvIGNvbXBlbnNhdGUgZm9yCiAJICogYW55IHRlbXBlcmF0dXJlIGRlbHRhIHdlIG1pc3NlZCBoZXJlLiAqLwogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSB8fAogCSAgICB0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKQotCQlyZXR1cm47Ci0KLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisJCWdvdG8gb3V0OwogCiAJLyogUmVnYXJkbGVzcyBvZiBpZiB3ZSBhcmUgYXNzb2NpYXRlZCwgd2UgbXVzdCByZWNvbmZpZ3VyZSB0aGUKIAkgKiBUWCBwb3dlciBzaW5jZSBmcmFtZXMgY2FuIGJlIHNlbnQgb24gbm9uLXJhZGFyIGNoYW5uZWxzIHdoaWxlCkBAIC0zMDAyLDcgKzMwMTAsNyBAQAogCS8qIFVwZGF0ZSBsYXN0X3RlbXBlcmF0dXJlIHRvIGtlZXAgaXNfY2FsaWJfbmVlZGVkIGZyb20gcnVubmluZwogCSAqIHdoZW4gaXQgaXNuJ3QgbmVlZGVkLi4uICovCiAJcHJpdi0+bGFzdF90ZW1wZXJhdHVyZSA9IHByaXYtPnRlbXBlcmF0dXJlOwotCitvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiAKQEAgLTMxMTYsNyArMzEyNCw2IEBACiAJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmZyZWVfZnJhbWVzKTsKIAogCW11dGV4X2luaXQoJnByaXYtPm11dGV4KTsKLQltdXRleF9pbml0KCZwcml2LT5zeW5jX2NtZF9tdXRleCk7CiAKIAlwcml2LT5pZWVlX2NoYW5uZWxzID0gTlVMTDsKIAlwcml2LT5pZWVlX3JhdGVzID0gTlVMTDsKQEAgLTMxNzMsNyArMzE4MCw3IEBACiB7CiAJcHJpdi0+aHdfcmV2ID0gX2l3bF9sZWdhY3lfcmVhZDMyKHByaXYsIENTUl9IV19SRVYpOwogCXByaXYtPmh3X3dhX3JldiA9IF9pd2xfbGVnYWN5X3JlYWQzMihwcml2LCBDU1JfSFdfUkVWX1dBX1JFRyk7Ci0JcGNpX3JlYWRfY29uZmlnX2J5dGUocHJpdi0+cGNpX2RldiwgUENJX1JFVklTSU9OX0lELCAmcHJpdi0+cmV2X2lkKTsKKwlwcml2LT5yZXZfaWQgPSBwcml2LT5wY2lfZGV2LT5yZXZpc2lvbjsKIAlJV0xfREVCVUdfSU5GTyhwcml2LCAiSFcgUmV2aXNpb24gSUQgPSAweCVYXG4iLCBwcml2LT5yZXZfaWQpOwogfQogCkBAIC0zNDA2LDE0ICszNDEzLDE0IEBACiAJICogOC4gRW5hYmxlIGludGVycnVwdHMgYW5kIHJlYWQgUkZLSUxMIHN0YXRlCiAJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotCS8qIGVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lZWRlZDogaHcgYnVnIHcvYSAqLworCS8qIGVuYWJsZSByZmtpbGwgaW50ZXJydXB0OiBodyBidWcgdy9hICovCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQocHJpdi0+cGNpX2RldiwgUENJX0NPTU1BTkQsICZwY2lfY21kKTsKIAlpZiAocGNpX2NtZCAmIFBDSV9DT01NQU5EX0lOVFhfRElTQUJMRSkgewogCQlwY2lfY21kICY9IH5QQ0lfQ09NTUFORF9JTlRYX0RJU0FCTEU7CiAJCXBjaV93cml0ZV9jb25maWdfd29yZChwcml2LT5wY2lfZGV2LCBQQ0lfQ09NTUFORCwgcGNpX2NtZCk7CiAJfQogCi0JaXdsX2xlZ2FjeV9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKKwlpd2xfbGVnYWN5X2VuYWJsZV9yZmtpbGxfaW50KHByaXYpOwogCiAJLyogSWYgcGxhdGZvcm0ncyBSRl9LSUxMIHN3aXRjaCBpcyBOT1Qgc2V0IHRvIEtJTEwgKi8KIAlpZiAoaXdsX3JlYWQzMihwcml2LCBDU1JfR1BfQ05UUkwpICYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvS2NvbmZpZwppbmRleCAxN2Q1NTVmLi5hZDNiZGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9LY29uZmlnCkBAIC0xMDIsNiArMTAyLDE2IEBACiAJICBvY2N1ci4KIGVuZG1lbnUKIAorY29uZmlnIElXTFdJRklfREVWSUNFX1NWVE9PTAorCWJvb2wgIml3bHdpZmkgZGV2aWNlIHN2dG9vbCBzdXBwb3J0IgorCWRlcGVuZHMgb24gSVdMQUdOCisJc2VsZWN0IE5MODAyMTFfVEVTVE1PREUKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBzdnRvb2wgc3VwcG9ydCBmb3IgaXdsd2lmaSBkZXZpY2UgdGhyb3VnaAorCSAgTkw4MDIxMV9URVNUTU9ERS4gc3Z0b29sIGlzIGEgc29mdHdhcmUgdmFsaWRhdGlvbiB0b29sIHRoYXQgcnVucyBpbgorCSAgdGhlIHVzZXIgc3BhY2UgYW5kIGludGVyYWN0cyB3aXRoIHRoZSBkZXZpY2UgaW4gdGhlIGtlcm5lbCBzcGFjZQorCSAgdGhyb3VnaCB0aGUgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UgdmlhIE5MODAyMTFfVEVTVE1PREUgY2hhbm5lbC4KKwogY29uZmlnIElXTF9QMlAKIAlib29sICJpd2x3aWZpIGV4cGVyaW1lbnRhbCBQMlAgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIElXTEFHTgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvTWFrZWZpbGUKaW5kZXggOWQ2ZWU4My4uODIyNjYwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL01ha2VmaWxlCkBAIC0xLDggKzEsOCBAQAogIyBBR04KIG9iai0kKENPTkZJR19JV0xBR04pCSs9IGl3bGFnbi5vCi1pd2xhZ24tb2JqcwkJOj0gaXdsLWFnbi5vIGl3bC1hZ24tcnMubyBpd2wtYWduLWxlZC5vCitpd2xhZ24tb2JqcwkJOj0gaXdsLWFnbi5vIGl3bC1hZ24tcnMubwogaXdsYWduLW9ianMJCSs9IGl3bC1hZ24tdWNvZGUubyBpd2wtYWduLXR4Lm8KLWl3bGFnbi1vYmpzCQkrPSBpd2wtYWduLWxpYi5vIGl3bC1hZ24tY2FsaWIubworaXdsYWduLW9ianMJCSs9IGl3bC1hZ24tbGliLm8gaXdsLWFnbi1jYWxpYi5vIGl3bC1pby5vCiBpd2xhZ24tb2JqcwkJKz0gaXdsLWFnbi10dC5vIGl3bC1hZ24tc3RhLm8gaXdsLWFnbi1lZXByb20ubwogCiBpd2xhZ24tb2JqcyAJCSs9IGl3bC1jb3JlLm8gaXdsLWVlcHJvbS5vIGl3bC1oY21kLm8gaXdsLXBvd2VyLm8KQEAgLTE0LDkgKzE0LDkgQEAKIGl3bGFnbi1vYmpzICAgICAgICAgICAgICs9IGl3bC0xMDAwLm8KIGl3bGFnbi1vYmpzICAgICAgICAgICAgICs9IGl3bC0yMDAwLm8KIAotaXdsYWduLSQoQ09ORklHX0lXTFdJRklfREVCVUdGUykgKz0gaXdsLWFnbi1kZWJ1Z2ZzLm8KIGl3bGFnbi0kKENPTkZJR19JV0xXSUZJX0RFQlVHRlMpICs9IGl3bC1kZWJ1Z2ZzLm8KIGl3bGFnbi0kKENPTkZJR19JV0xXSUZJX0RFVklDRV9UUkFDSU5HKSArPSBpd2wtZGV2dHJhY2UubworaXdsYWduLSQoQ09ORklHX0lXTFdJRklfREVWSUNFX1NWVE9PTCkgKz0gaXdsLXN2LW9wZW4ubwogCiBDRkxBR1NfaXdsLWRldnRyYWNlLm8gOj0gLUkkKHNyYykKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMTAwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMTAwMC5jCmluZGV4IDI3YzUwMDcuLmI0YzgxOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTEwMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0xMDAwLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtNDUsOCArNDUsNiBAQAogI2luY2x1ZGUgIml3bC1hZ24uaCIKICNpbmNsdWRlICJpd2wtaGVscGVycy5oIgogI2luY2x1ZGUgIml3bC1hZ24taHcuaCIKLSNpbmNsdWRlICJpd2wtYWduLWxlZC5oIgotI2luY2x1ZGUgIml3bC1hZ24tZGVidWdmcy5oIgogCiAvKiBIaWdoZXN0IGZpcm13YXJlIEFQSSB2ZXJzaW9uIHN1cHBvcnRlZCAqLwogI2RlZmluZSBJV0wxMDAwX1VDT0RFX0FQSV9NQVggNQpAQCAtNTcsMTIgKzU1LDEwIEBACiAjZGVmaW5lIElXTDEwMF9VQ09ERV9BUElfTUlOIDUKIAogI2RlZmluZSBJV0wxMDAwX0ZXX1BSRSAiaXdsd2lmaS0xMDAwLSIKLSNkZWZpbmUgX0lXTDEwMDBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgSVdMMTAwMF9GV19QUkUgI2FwaSAiLnVjb2RlIgotI2RlZmluZSBJV0wxMDAwX01PRFVMRV9GSVJNV0FSRShhcGkpIF9JV0wxMDAwX01PRFVMRV9GSVJNV0FSRShhcGkpCisjZGVmaW5lIElXTDEwMDBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgSVdMMTAwMF9GV19QUkUgI2FwaSAiLnVjb2RlIgogCiAjZGVmaW5lIElXTDEwMF9GV19QUkUgIml3bHdpZmktMTAwLSIKLSNkZWZpbmUgX0lXTDEwMF9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0wxMDBfRldfUFJFICNhcGkgIi51Y29kZSIKLSNkZWZpbmUgSVdMMTAwX01PRFVMRV9GSVJNV0FSRShhcGkpIF9JV0wxMDBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkKKyNkZWZpbmUgSVdMMTAwX01PRFVMRV9GSVJNV0FSRShhcGkpIElXTDEwMF9GV19QUkUgI2FwaSAiLnVjb2RlIgogCiAKIC8qCkBAIC0xMjQsMTAgKzEyMCwxMCBAQAogCiBzdGF0aWMgaW50IGl3bDEwMDBfaHdfc2V0X2h3X3BhcmFtcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JaWYgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+bnVtX29mX3F1ZXVlcyA+PSBJV0xfTUlOX05VTV9RVUVVRVMgJiYKLQkgICAgcHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5udW1fb2ZfcXVldWVzIDw9IElXTEFHTl9OVU1fUVVFVUVTKQorCWlmIChpd2xhZ25fbW9kX3BhcmFtcy5udW1fb2ZfcXVldWVzID49IElXTF9NSU5fTlVNX1FVRVVFUyAmJgorCSAgICBpd2xhZ25fbW9kX3BhcmFtcy5udW1fb2ZfcXVldWVzIDw9IElXTEFHTl9OVU1fUVVFVUVTKQogCQlwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5udW1fb2ZfcXVldWVzID0KLQkJCXByaXYtPmNmZy0+bW9kX3BhcmFtcy0+bnVtX29mX3F1ZXVlczsKKwkJCWl3bGFnbl9tb2RfcGFyYW1zLm51bV9vZl9xdWV1ZXM7CiAKIAlwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW0gPSBwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5udW1fb2ZfcXVldWVzOwogCXByaXYtPmh3X3BhcmFtcy5kbWFfY2hubF9udW0gPSBGSDUwX1RDU1JfQ0hOTF9OVU07CkBAIC0xNDEsNyArMTM3LDYgQEAKIAlwcml2LT5od19wYXJhbXMubWF4X2RhdGFfc2l6ZSA9IElXTEFHTl9SVENfREFUQV9TSVpFOwogCXByaXYtPmh3X3BhcmFtcy5tYXhfaW5zdF9zaXplID0gSVdMQUdOX1JUQ19JTlNUX1NJWkU7CiAKLQlwcml2LT5od19wYXJhbXMubWF4X2JzbV9zaXplID0gMDsKIAlwcml2LT5od19wYXJhbXMuaHQ0MF9jaGFubmVsID0gIEJJVChJRUVFODAyMTFfQkFORF8yR0haKSB8CiAJCQkJCUJJVChJRUVFODAyMTFfQkFORF81R0haKTsKIAlwcml2LT5od19wYXJhbXMucnhfd3J0X3B0cl9yZWcgPSBGSF9SU0NTUl9DSE5MMF9XUFRSOwpAQCAtMTc2LDI0ICsxNzEsMTMgQEAKIAogc3RhdGljIHN0cnVjdCBpd2xfbGliX29wcyBpd2wxMDAwX2xpYiA9IHsKIAkuc2V0X2h3X3BhcmFtcyA9IGl3bDEwMDBfaHdfc2V0X2h3X3BhcmFtcywKLQkudHhxX3VwZGF0ZV9ieXRlX2NudF90YmwgPSBpd2xhZ25fdHhxX3VwZGF0ZV9ieXRlX2NudF90YmwsCi0JLnR4cV9pbnZhbF9ieXRlX2NudF90YmwgPSBpd2xhZ25fdHhxX2ludmFsX2J5dGVfY250X3RibCwKIAkudHhxX3NldF9zY2hlZCA9IGl3bGFnbl90eHFfc2V0X3NjaGVkLAotCS50eHFfYWdnX2VuYWJsZSA9IGl3bGFnbl90eHFfYWdnX2VuYWJsZSwKLQkudHhxX2FnZ19kaXNhYmxlID0gaXdsYWduX3R4cV9hZ2dfZGlzYWJsZSwKIAkudHhxX2F0dGFjaF9idWZfdG9fdGZkID0gaXdsX2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZCwKIAkudHhxX2ZyZWVfdGZkID0gaXdsX2h3X3R4cV9mcmVlX3RmZCwKIAkudHhxX2luaXQgPSBpd2xfaHdfdHhfcXVldWVfaW5pdCwKIAkucnhfaGFuZGxlcl9zZXR1cCA9IGl3bGFnbl9yeF9oYW5kbGVyX3NldHVwLAogCS5zZXR1cF9kZWZlcnJlZF93b3JrID0gaXdsYWduX3NldHVwX2RlZmVycmVkX3dvcmssCiAJLmlzX3ZhbGlkX3J0Y19kYXRhX2FkZHIgPSBpd2xhZ25faHdfdmFsaWRfcnRjX2RhdGFfYWRkciwKLQkubG9hZF91Y29kZSA9IGl3bGFnbl9sb2FkX3Vjb2RlLAotCS5kdW1wX25pY19ldmVudF9sb2cgPSBpd2xfZHVtcF9uaWNfZXZlbnRfbG9nLAotCS5kdW1wX25pY19lcnJvcl9sb2cgPSBpd2xfZHVtcF9uaWNfZXJyb3JfbG9nLAotCS5kdW1wX2NzciA9IGl3bF9kdW1wX2NzciwKLQkuZHVtcF9maCA9IGl3bF9kdW1wX2ZoLAotCS5pbml0X2FsaXZlX3N0YXJ0ID0gaXdsYWduX2luaXRfYWxpdmVfc3RhcnQsCi0JLmFsaXZlX25vdGlmeSA9IGl3bGFnbl9hbGl2ZV9ub3RpZnksCiAJLnNlbmRfdHhfcG93ZXIgPSBpd2xhZ25fc2VuZF90eF9wb3dlciwKIAkudXBkYXRlX2NoYWluX2ZsYWdzID0gaXdsX3VwZGF0ZV9jaGFpbl9mbGFncywKIAkuYXBtX29wcyA9IHsKQEAgLTIwOCw0NSArMTkyLDIxIEBACiAJCQlFRVBST01fUkVHX0JBTkRfNF9DSEFOTkVMUywKIAkJCUVFUFJPTV9SRUdfQkFORF81X0NIQU5ORUxTLAogCQkJRUVQUk9NX1JFR19CQU5EXzI0X0hUNDBfQ0hBTk5FTFMsCi0JCQlFRVBST01fUkVHX0JBTkRfNTJfSFQ0MF9DSEFOTkVMUworCQkJRUVQUk9NX1JFR1VMQVRPUllfQkFORF9OT19IVDQwLAogCQl9LAotCQkuYWNxdWlyZV9zZW1hcGhvcmUgPSBpd2xjb3JlX2VlcHJvbV9hY3F1aXJlX3NlbWFwaG9yZSwKLQkJLnJlbGVhc2Vfc2VtYXBob3JlID0gaXdsY29yZV9lZXByb21fcmVsZWFzZV9zZW1hcGhvcmUsCi0JCS5jYWxpYl92ZXJzaW9uCT0gaXdsYWduX2VlcHJvbV9jYWxpYl92ZXJzaW9uLAogCQkucXVlcnlfYWRkciA9IGl3bGFnbl9lZXByb21fcXVlcnlfYWRkciwKIAl9LAotCS5pc3Jfb3BzID0gewotCQkuaXNyID0gaXdsX2lzcl9pY3QsCi0JCS5mcmVlID0gaXdsX2ZyZWVfaXNyX2ljdCwKLQkJLmFsbG9jID0gaXdsX2FsbG9jX2lzcl9pY3QsCi0JCS5yZXNldCA9IGl3bF9yZXNldF9pY3QsCi0JCS5kaXNhYmxlID0gaXdsX2Rpc2FibGVfaWN0LAotCX0sCiAJLnRlbXBfb3BzID0gewogCQkudGVtcGVyYXR1cmUgPSBpd2xhZ25fdGVtcGVyYXR1cmUsCiAJIH0sCi0JLmRlYnVnZnNfb3BzID0gewotCQkucnhfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV9yeF9zdGF0c19yZWFkLAotCQkudHhfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV90eF9zdGF0c19yZWFkLAotCQkuZ2VuZXJhbF9zdGF0c19yZWFkID0gaXdsX3Vjb2RlX2dlbmVyYWxfc3RhdHNfcmVhZCwKLQkJLmJ0X3N0YXRzX3JlYWQgPSBpd2xfdWNvZGVfYnRfc3RhdHNfcmVhZCwKLQkJLnJlcGx5X3R4X2Vycm9yID0gaXdsX3JlcGx5X3R4X2Vycm9yX3JlYWQsCi0JfSwKIAkudHhmaWZvX2ZsdXNoID0gaXdsYWduX3R4Zmlmb19mbHVzaCwKIAkuZGV2X3R4Zmlmb19mbHVzaCA9IGl3bGFnbl9kZXZfdHhmaWZvX2ZsdXNoLAotCS50dF9vcHMgPSB7Ci0JCS5sb3dlcl9wb3dlcl9kZXRlY3Rpb24gPSBpd2xfdHRfaXNfbG93X3Bvd2VyX3N0YXRlLAotCQkudHRfcG93ZXJfbW9kZSA9IGl3bF90dF9jdXJyZW50X3Bvd2VyX21vZGUsCi0JCS5jdF9raWxsX2NoZWNrID0gaXdsX2NoZWNrX2Zvcl9jdF9raWxsLAotCX0KIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX29wcyBpd2wxMDAwX29wcyA9IHsKIAkubGliID0gJml3bDEwMDBfbGliLAogCS5oY21kID0gJml3bGFnbl9oY21kLAogCS51dGlscyA9ICZpd2xhZ25faGNtZF91dGlscywKLQkubGVkID0gJml3bGFnbl9sZWRfb3BzLAotCS5pZWVlODAyMTFfb3BzID0gJml3bGFnbl9od19vcHMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGl3bF9iYXNlX3BhcmFtcyBpd2wxMDAwX2Jhc2VfcGFyYW1zID0gewpAQCAtMjU0LDggKzIxNCw2IEBACiAJLm51bV9vZl9hbXBkdV9xdWV1ZXMgPSBJV0xBR05fTlVNX0FNUERVX1FVRVVFUywKIAkuZWVwcm9tX3NpemUgPSBPVFBfTE9XX0lNQUdFX1NJWkUsCiAJLnBsbF9jZmdfdmFsID0gQ1NSNTBfQU5BX1BMTF9DRkdfVkFMLAotCS5zZXRfbDBzID0gdHJ1ZSwKLQkudXNlX2JzbSA9IGZhbHNlLAogCS5tYXhfbGxfaXRlbXMgPSBPVFBfTUFYX0xMX0lURU1TXzEwMDAsCiAJLnNoYWRvd19yYW1fc3VwcG9ydCA9IGZhbHNlLAogCS5sZWRfY29tcGVuc2F0aW9uID0gNTEsCkBAIC0yNjUsOSArMjIzLDYgQEAKIAkuY2hhaW5fbm9pc2Vfc2NhbGUgPSAxMDAwLAogCS53ZF90aW1lb3V0ID0gSVdMX0RFRl9XRF9USU1FT1VULAogCS5tYXhfZXZlbnRfbG9nX3NpemUgPSAxMjgsCi0JLnVjb2RlX3RyYWNpbmcgPSB0cnVlLAotCS5zZW5zaXRpdml0eV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLAotCS5jaGFpbl9ub2lzZV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLAogfTsKIHN0YXRpYyBzdHJ1Y3QgaXdsX2h0X3BhcmFtcyBpd2wxMDAwX2h0X3BhcmFtcyA9IHsKIAkuaHRfZ3JlZW5maWVsZF9zdXBwb3J0ID0gdHJ1ZSwKQEAgLTI4MSw3ICsyMzYsNiBAQAogCS5lZXByb21fdmVyID0gRUVQUk9NXzEwMDBfRUVQUk9NX1ZFUlNJT04sCQlcCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fMTAwMF9UWF9QT1dFUl9WRVJTSU9OLAlcCiAJLm9wcyA9ICZpd2wxMDAwX29wcywJCQkJCVwKLQkubW9kX3BhcmFtcyA9ICZpd2xhZ25fbW9kX3BhcmFtcywJCQlcCiAJLmJhc2VfcGFyYW1zID0gJml3bDEwMDBfYmFzZV9wYXJhbXMsCQkJXAogCS5sZWRfbW9kZSA9IElXTF9MRURfQkxJTksKIApAQCAtMzAzLDcgKzI1Nyw2IEBACiAJLmVlcHJvbV92ZXIgPSBFRVBST01fMTAwMF9FRVBST01fVkVSU0lPTiwJCVwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV8xMDAwX1RYX1BPV0VSX1ZFUlNJT04sCVwKIAkub3BzID0gJml3bDEwMDBfb3BzLAkJCQkJXAotCS5tb2RfcGFyYW1zID0gJml3bGFnbl9tb2RfcGFyYW1zLAkJCVwKIAkuYmFzZV9wYXJhbXMgPSAmaXdsMTAwMF9iYXNlX3BhcmFtcywJCQlcCiAJLmxlZF9tb2RlID0gSVdMX0xFRF9SRl9TVEFURSwJCQkJXAogCS5yeF93aXRoX3Npc29fZGl2ZXJzaXR5ID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMjAwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMjAwMC5jCmluZGV4IGQ3YjYxMjYuLjg5YjhkYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTIwMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0yMDAwLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtNDYsMzAgKzQ2LDI1IEBACiAjaW5jbHVkZSAiaXdsLWhlbHBlcnMuaCIKICNpbmNsdWRlICJpd2wtYWduLWh3LmgiCiAjaW5jbHVkZSAiaXdsLTYwMDAtaHcuaCIKLSNpbmNsdWRlICJpd2wtYWduLWxlZC5oIgotI2luY2x1ZGUgIml3bC1hZ24tZGVidWdmcy5oIgogCiAvKiBIaWdoZXN0IGZpcm13YXJlIEFQSSB2ZXJzaW9uIHN1cHBvcnRlZCAqLwogI2RlZmluZSBJV0wyMDMwX1VDT0RFX0FQSV9NQVggNQogI2RlZmluZSBJV0wyMDAwX1VDT0RFX0FQSV9NQVggNQotI2RlZmluZSBJV0wyMDBfVUNPREVfQVBJX01BWCA1CisjZGVmaW5lIElXTDEwNV9VQ09ERV9BUElfTUFYIDUKIAogLyogTG93ZXN0IGZpcm13YXJlIEFQSSB2ZXJzaW9uIHN1cHBvcnRlZCAqLwogI2RlZmluZSBJV0wyMDMwX1VDT0RFX0FQSV9NSU4gNQogI2RlZmluZSBJV0wyMDAwX1VDT0RFX0FQSV9NSU4gNQotI2RlZmluZSBJV0wyMDBfVUNPREVfQVBJX01JTiA1CisjZGVmaW5lIElXTDEwNV9VQ09ERV9BUElfTUlOIDUKIAogI2RlZmluZSBJV0wyMDMwX0ZXX1BSRSAiaXdsd2lmaS0yMDMwLSIKLSNkZWZpbmUgX0lXTDIwMzBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgSVdMMjAzMF9GV19QUkUgI2FwaSAiLnVjb2RlIgotI2RlZmluZSBJV0wyMDMwX01PRFVMRV9GSVJNV0FSRShhcGkpIF9JV0wyMDMwX01PRFVMRV9GSVJNV0FSRShhcGkpCisjZGVmaW5lIElXTDIwMzBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgSVdMMjAzMF9GV19QUkUgI2FwaSAiLnVjb2RlIgogCiAjZGVmaW5lIElXTDIwMDBfRldfUFJFICJpd2x3aWZpLTIwMDAtIgotI2RlZmluZSBfSVdMMjAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0wyMDAwX0ZXX1BSRSAjYXBpICIudWNvZGUiCi0jZGVmaW5lIElXTDIwMDBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgX0lXTDIwMDBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkKKyNkZWZpbmUgSVdMMjAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0wyMDAwX0ZXX1BSRSAjYXBpICIudWNvZGUiCiAKLSNkZWZpbmUgSVdMMjAwX0ZXX1BSRSAiaXdsd2lmaS0yMDAtIgotI2RlZmluZSBfSVdMMjAwX01PRFVMRV9GSVJNV0FSRShhcGkpIElXTDIwMF9GV19QUkUgI2FwaSAiLnVjb2RlIgotI2RlZmluZSBJV0wyMDBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgX0lXTDIwMF9NT0RVTEVfRklSTVdBUkUoYXBpKQorI2RlZmluZSBJV0wxMDVfRldfUFJFICJpd2x3aWZpLTEwNS0iCisjZGVmaW5lIElXTDEwNV9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0wxMDVfRldfUFJFICNhcGkgIi51Y29kZSIKIAogc3RhdGljIHZvaWQgaXdsMjAwMF9zZXRfY3RfdGhyZXNob2xkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKQEAgLTEwMSw2ICs5Niw4IEBACiAJCWl3bF9zZXRfYml0KHByaXYsIENTUl9HUF9EUklWRVJfUkVHLAogCQkJICAgIENTUl9HUF9EUklWRVJfUkVHX0JJVF9SQURJT19JUV9JTlZFUik7CiAKKwlpZiAocHJpdi0+Y2ZnLT5kaXNhYmxlX290cF9yZWZyZXNoKQorCQlpd2xfd3JpdGVfcHJwaChwcml2LCBBUE1HX0FOQUxPR19TVlJfUkVHLCAweDgwMDAwMDEwKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfcmFuZ2VzIGl3bDIwMDBfc2Vuc2l0aXZpdHkgPSB7CkBAIC0xMzAsMTAgKzEyNywxMCBAQAogCiBzdGF0aWMgaW50IGl3bDIwMDBfaHdfc2V0X2h3X3BhcmFtcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JaWYgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+bnVtX29mX3F1ZXVlcyA+PSBJV0xfTUlOX05VTV9RVUVVRVMgJiYKLQkgICAgcHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5udW1fb2ZfcXVldWVzIDw9IElXTEFHTl9OVU1fUVVFVUVTKQorCWlmIChpd2xhZ25fbW9kX3BhcmFtcy5udW1fb2ZfcXVldWVzID49IElXTF9NSU5fTlVNX1FVRVVFUyAmJgorCSAgICBpd2xhZ25fbW9kX3BhcmFtcy5udW1fb2ZfcXVldWVzIDw9IElXTEFHTl9OVU1fUVVFVUVTKQogCQlwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5udW1fb2ZfcXVldWVzID0KLQkJCXByaXYtPmNmZy0+bW9kX3BhcmFtcy0+bnVtX29mX3F1ZXVlczsKKwkJCWl3bGFnbl9tb2RfcGFyYW1zLm51bV9vZl9xdWV1ZXM7CiAKIAlwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW0gPSBwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5udW1fb2ZfcXVldWVzOwogCXByaXYtPmh3X3BhcmFtcy5kbWFfY2hubF9udW0gPSBGSDUwX1RDU1JfQ0hOTF9OVU07CkBAIC0xNDcsNyArMTQ0LDYgQEAKIAlwcml2LT5od19wYXJhbXMubWF4X2RhdGFfc2l6ZSA9IElXTDYwX1JUQ19EQVRBX1NJWkU7CiAJcHJpdi0+aHdfcGFyYW1zLm1heF9pbnN0X3NpemUgPSBJV0w2MF9SVENfSU5TVF9TSVpFOwogCi0JcHJpdi0+aHdfcGFyYW1zLm1heF9ic21fc2l6ZSA9IDA7CiAJcHJpdi0+aHdfcGFyYW1zLmh0NDBfY2hhbm5lbCA9ICBCSVQoSUVFRTgwMjExX0JBTkRfMkdIWikgfAogCQkJCQlCSVQoSUVFRTgwMjExX0JBTkRfNUdIWik7CiAJcHJpdi0+aHdfcGFyYW1zLnJ4X3dydF9wdHJfcmVnID0gRkhfUlNDU1JfQ0hOTDBfV1BUUjsKQEAgLTI1NiwxMSArMjUyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBpd2xfbGliX29wcyBpd2wyMDAwX2xpYiA9IHsKIAkuc2V0X2h3X3BhcmFtcyA9IGl3bDIwMDBfaHdfc2V0X2h3X3BhcmFtcywKLQkudHhxX3VwZGF0ZV9ieXRlX2NudF90YmwgPSBpd2xhZ25fdHhxX3VwZGF0ZV9ieXRlX2NudF90YmwsCi0JLnR4cV9pbnZhbF9ieXRlX2NudF90YmwgPSBpd2xhZ25fdHhxX2ludmFsX2J5dGVfY250X3RibCwKIAkudHhxX3NldF9zY2hlZCA9IGl3bGFnbl90eHFfc2V0X3NjaGVkLAotCS50eHFfYWdnX2VuYWJsZSA9IGl3bGFnbl90eHFfYWdnX2VuYWJsZSwKLQkudHhxX2FnZ19kaXNhYmxlID0gaXdsYWduX3R4cV9hZ2dfZGlzYWJsZSwKIAkudHhxX2F0dGFjaF9idWZfdG9fdGZkID0gaXdsX2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZCwKIAkudHhxX2ZyZWVfdGZkID0gaXdsX2h3X3R4cV9mcmVlX3RmZCwKIAkudHhxX2luaXQgPSBpd2xfaHdfdHhfcXVldWVfaW5pdCwKQEAgLTI2OCwxMyArMjYwLDYgQEAKIAkuc2V0dXBfZGVmZXJyZWRfd29yayA9IGl3bGFnbl9idF9zZXR1cF9kZWZlcnJlZF93b3JrLAogCS5jYW5jZWxfZGVmZXJyZWRfd29yayA9IGl3bGFnbl9idF9jYW5jZWxfZGVmZXJyZWRfd29yaywKIAkuaXNfdmFsaWRfcnRjX2RhdGFfYWRkciA9IGl3bGFnbl9od192YWxpZF9ydGNfZGF0YV9hZGRyLAotCS5sb2FkX3Vjb2RlID0gaXdsYWduX2xvYWRfdWNvZGUsCi0JLmR1bXBfbmljX2V2ZW50X2xvZyA9IGl3bF9kdW1wX25pY19ldmVudF9sb2csCi0JLmR1bXBfbmljX2Vycm9yX2xvZyA9IGl3bF9kdW1wX25pY19lcnJvcl9sb2csCi0JLmR1bXBfY3NyID0gaXdsX2R1bXBfY3NyLAotCS5kdW1wX2ZoID0gaXdsX2R1bXBfZmgsCi0JLmluaXRfYWxpdmVfc3RhcnQgPSBpd2xhZ25faW5pdF9hbGl2ZV9zdGFydCwKLQkuYWxpdmVfbm90aWZ5ID0gaXdsYWduX2FsaXZlX25vdGlmeSwKIAkuc2VuZF90eF9wb3dlciA9IGl3bGFnbl9zZW5kX3R4X3Bvd2VyLAogCS51cGRhdGVfY2hhaW5fZmxhZ3MgPSBpd2xfdXBkYXRlX2NoYWluX2ZsYWdzLAogCS5zZXRfY2hhbm5lbF9zd2l0Y2ggPSBpd2wyMDMwX2h3X2NoYW5uZWxfc3dpdGNoLApAQCAtMjkwLDcwICsyNzUsNDAgQEAKIAkJCUVFUFJPTV9SRUdfQkFORF80X0NIQU5ORUxTLAogCQkJRUVQUk9NX1JFR19CQU5EXzVfQ0hBTk5FTFMsCiAJCQlFRVBST01fNjAwMF9SRUdfQkFORF8yNF9IVDQwX0NIQU5ORUxTLAotCQkJRUVQUk9NX1JFR19CQU5EXzUyX0hUNDBfQ0hBTk5FTFMKKwkJCUVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfTk9fSFQ0MCwKIAkJfSwKLQkJLmFjcXVpcmVfc2VtYXBob3JlID0gaXdsY29yZV9lZXByb21fYWNxdWlyZV9zZW1hcGhvcmUsCi0JCS5yZWxlYXNlX3NlbWFwaG9yZSA9IGl3bGNvcmVfZWVwcm9tX3JlbGVhc2Vfc2VtYXBob3JlLAotCQkuY2FsaWJfdmVyc2lvbiAgPSBpd2xhZ25fZWVwcm9tX2NhbGliX3ZlcnNpb24sCiAJCS5xdWVyeV9hZGRyID0gaXdsYWduX2VlcHJvbV9xdWVyeV9hZGRyLAogCQkudXBkYXRlX2VuaGFuY2VkX3R4cG93ZXIgPSBpd2xjb3JlX2VlcHJvbV9lbmhhbmNlZF90eHBvd2VyLAogCX0sCi0JLmlzcl9vcHMgPSB7Ci0JCS5pc3IgPSBpd2xfaXNyX2ljdCwKLQkJLmZyZWUgPSBpd2xfZnJlZV9pc3JfaWN0LAotCQkuYWxsb2MgPSBpd2xfYWxsb2NfaXNyX2ljdCwKLQkJLnJlc2V0ID0gaXdsX3Jlc2V0X2ljdCwKLQkJLmRpc2FibGUgPSBpd2xfZGlzYWJsZV9pY3QsCi0JfSwKIAkudGVtcF9vcHMgPSB7CiAJCS50ZW1wZXJhdHVyZSA9IGl3bGFnbl90ZW1wZXJhdHVyZSwKIAl9LAotCS5kZWJ1Z2ZzX29wcyA9IHsKLQkJLnJ4X3N0YXRzX3JlYWQgPSBpd2xfdWNvZGVfcnhfc3RhdHNfcmVhZCwKLQkJLnR4X3N0YXRzX3JlYWQgPSBpd2xfdWNvZGVfdHhfc3RhdHNfcmVhZCwKLQkJLmdlbmVyYWxfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV9nZW5lcmFsX3N0YXRzX3JlYWQsCi0JCS5idF9zdGF0c19yZWFkID0gaXdsX3Vjb2RlX2J0X3N0YXRzX3JlYWQsCi0JCS5yZXBseV90eF9lcnJvciA9IGl3bF9yZXBseV90eF9lcnJvcl9yZWFkLAotCX0sCiAJLnR4Zmlmb19mbHVzaCA9IGl3bGFnbl90eGZpZm9fZmx1c2gsCiAJLmRldl90eGZpZm9fZmx1c2ggPSBpd2xhZ25fZGV2X3R4Zmlmb19mbHVzaCwKLQkudHRfb3BzID0gewotCQkubG93ZXJfcG93ZXJfZGV0ZWN0aW9uID0gaXdsX3R0X2lzX2xvd19wb3dlcl9zdGF0ZSwKLQkJLnR0X3Bvd2VyX21vZGUgPSBpd2xfdHRfY3VycmVudF9wb3dlcl9tb2RlLAotCQkuY3Rfa2lsbF9jaGVjayA9IGl3bF9jaGVja19mb3JfY3Rfa2lsbCwKLQl9CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGl3bF9vcHMgaXdsMjAwMF9vcHMgPSB7CiAJLmxpYiA9ICZpd2wyMDAwX2xpYiwKIAkuaGNtZCA9ICZpd2xhZ25faGNtZCwKIAkudXRpbHMgPSAmaXdsYWduX2hjbWRfdXRpbHMsCi0JLmxlZCA9ICZpd2xhZ25fbGVkX29wcywKLQkuaWVlZTgwMjExX29wcyA9ICZpd2xhZ25faHdfb3BzLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfb3BzIGl3bDIwMzBfb3BzID0gewogCS5saWIgPSAmaXdsMjAwMF9saWIsCiAJLmhjbWQgPSAmaXdsYWduX2J0X2hjbWQsCiAJLnV0aWxzID0gJml3bGFnbl9oY21kX3V0aWxzLAotCS5sZWQgPSAmaXdsYWduX2xlZF9vcHMsCi0JLmllZWU4MDIxMV9vcHMgPSAmaXdsYWduX2h3X29wcywKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX29wcyBpd2wyMDBfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfb3BzIGl3bDEwNV9vcHMgPSB7CiAJLmxpYiA9ICZpd2wyMDAwX2xpYiwKIAkuaGNtZCA9ICZpd2xhZ25faGNtZCwKIAkudXRpbHMgPSAmaXdsYWduX2hjbWRfdXRpbHMsCi0JLmxlZCA9ICZpd2xhZ25fbGVkX29wcywKLQkuaWVlZTgwMjExX29wcyA9ICZpd2xhZ25faHdfb3BzLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfb3BzIGl3bDIzMF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGl3bF9vcHMgaXdsMTM1X29wcyA9IHsKIAkubGliID0gJml3bDIwMDBfbGliLAogCS5oY21kID0gJml3bGFnbl9idF9oY21kLAogCS51dGlscyA9ICZpd2xhZ25faGNtZF91dGlscywKLQkubGVkID0gJml3bGFnbl9sZWRfb3BzLAotCS5pZWVlODAyMTFfb3BzID0gJml3bGFnbl9od19vcHMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGl3bF9iYXNlX3BhcmFtcyBpd2wyMDAwX2Jhc2VfcGFyYW1zID0gewpAQCAtMzYxLDggKzMxNiw2IEBACiAJLm51bV9vZl9xdWV1ZXMgPSBJV0xBR05fTlVNX1FVRVVFUywKIAkubnVtX29mX2FtcGR1X3F1ZXVlcyA9IElXTEFHTl9OVU1fQU1QRFVfUVVFVUVTLAogCS5wbGxfY2ZnX3ZhbCA9IDAsCi0JLnNldF9sMHMgPSB0cnVlLAotCS51c2VfYnNtID0gZmFsc2UsCiAJLm1heF9sbF9pdGVtcyA9IE9UUF9NQVhfTExfSVRFTVNfMngwMCwKIAkuc2hhZG93X3JhbV9zdXBwb3J0ID0gdHJ1ZSwKIAkubGVkX2NvbXBlbnNhdGlvbiA9IDUxLApAQCAtMzczLDkgKzMyNiw2IEBACiAJLmNoYWluX25vaXNlX3NjYWxlID0gMTAwMCwKIAkud2RfdGltZW91dCA9IElXTF9ERUZfV0RfVElNRU9VVCwKIAkubWF4X2V2ZW50X2xvZ19zaXplID0gNTEyLAotCS51Y29kZV90cmFjaW5nID0gdHJ1ZSwKLQkuc2Vuc2l0aXZpdHlfY2FsaWJfYnlfZHJpdmVyID0gdHJ1ZSwKLQkuY2hhaW5fbm9pc2VfY2FsaWJfYnlfZHJpdmVyID0gdHJ1ZSwKIAkuc2hhZG93X3JlZ19lbmFibGUgPSB0cnVlLAogfTsKIApAQCAtMzg1LDggKzMzNSw2IEBACiAJLm51bV9vZl9xdWV1ZXMgPSBJV0xBR05fTlVNX1FVRVVFUywKIAkubnVtX29mX2FtcGR1X3F1ZXVlcyA9IElXTEFHTl9OVU1fQU1QRFVfUVVFVUVTLAogCS5wbGxfY2ZnX3ZhbCA9IDAsCi0JLnNldF9sMHMgPSB0cnVlLAotCS51c2VfYnNtID0gZmFsc2UsCiAJLm1heF9sbF9pdGVtcyA9IE9UUF9NQVhfTExfSVRFTVNfMngwMCwKIAkuc2hhZG93X3JhbV9zdXBwb3J0ID0gdHJ1ZSwKIAkubGVkX2NvbXBlbnNhdGlvbiA9IDU3LApAQCAtMzk3LDkgKzM0NSw2IEBACiAJLmNoYWluX25vaXNlX3NjYWxlID0gMTAwMCwKIAkud2RfdGltZW91dCA9IElXTF9MT05HX1dEX1RJTUVPVVQsCiAJLm1heF9ldmVudF9sb2dfc2l6ZSA9IDUxMiwKLQkudWNvZGVfdHJhY2luZyA9IHRydWUsCi0JLnNlbnNpdGl2aXR5X2NhbGliX2J5X2RyaXZlciA9IHRydWUsCi0JLmNoYWluX25vaXNlX2NhbGliX2J5X2RyaXZlciA9IHRydWUsCiAJLnNoYWRvd19yZWdfZW5hYmxlID0gdHJ1ZSwKIH07CiAKQEAgLTQwOSw3ICszNTQsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBpd2xfYnRfcGFyYW1zIGl3bDIwMzBfYnRfcGFyYW1zID0gewotCS5idF9zdGF0aXN0aWNzID0gdHJ1ZSwKIAkvKiBEdWUgdG8gYmx1ZXRvb3RoLCB3ZSB0cmFuc21pdCAyLjQgR0h6IHByb2JlcyBvbmx5IG9uIGFudGVubmEgQSAqLwogCS5hZHZhbmNlZF9idF9jb2V4aXN0ID0gdHJ1ZSwKIAkuYWdnX3RpbWVfbGltaXQgPSBCVF9BR0dfVEhSRVNIT0xEX0RFRiwKQEAgLTQyNiwxMiArMzcwLDEyIEBACiAJLmVlcHJvbV92ZXIgPSBFRVBST01fMjAwMF9FRVBST01fVkVSU0lPTiwJCVwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV8yMDAwX1RYX1BPV0VSX1ZFUlNJT04sCVwKIAkub3BzID0gJml3bDIwMDBfb3BzLAkJCQkJXAotCS5tb2RfcGFyYW1zID0gJml3bGFnbl9tb2RfcGFyYW1zLAkJCVwKIAkuYmFzZV9wYXJhbXMgPSAmaXdsMjAwMF9iYXNlX3BhcmFtcywJCQlcCiAJLm5lZWRfZGNfY2FsaWIgPSB0cnVlLAkJCQkJXAogCS5uZWVkX3RlbXBfb2Zmc2V0X2NhbGliID0gdHJ1ZSwJCQkJXAogCS5sZWRfbW9kZSA9IElXTF9MRURfUkZfU1RBVEUsCQkJCVwKLQkuaXFfaW52ZXJ0ID0gdHJ1ZQkJCQkJXAorCS5pcV9pbnZlcnQgPSB0cnVlLAkJCQkJXAorCS5kaXNhYmxlX290cF9yZWZyZXNoID0gdHJ1ZQkJCQlcCiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDIwMDBfMmJnbl9jZmcgPSB7CiAJLm5hbWUgPSAiMjAwMCBTZXJpZXMgMngyIEJHTiIsCkBAIC00NTEsNyArMzk1LDYgQEAKIAkuZWVwcm9tX3ZlciA9IEVFUFJPTV8yMDAwX0VFUFJPTV9WRVJTSU9OLAkJXAogCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzIwMDBfVFhfUE9XRVJfVkVSU0lPTiwJXAogCS5vcHMgPSAmaXdsMjAzMF9vcHMsCQkJCQlcCi0JLm1vZF9wYXJhbXMgPSAmaXdsYWduX21vZF9wYXJhbXMsCQkJXAogCS5iYXNlX3BhcmFtcyA9ICZpd2wyMDMwX2Jhc2VfcGFyYW1zLAkJCVwKIAkuYnRfcGFyYW1zID0gJml3bDIwMzBfYnRfcGFyYW1zLAkJCVwKIAkubmVlZF9kY19jYWxpYiA9IHRydWUsCQkJCQlcCkBAIC00NzEsNDUgKzQxNCwxMyBAQAogCUlXTF9ERVZJQ0VfMjAzMCwKIH07CiAKLSNkZWZpbmUgSVdMX0RFVklDRV82MDM1CQkJCQkJXAotCS5md19uYW1lX3ByZSA9IElXTDIwMzBfRldfUFJFLAkJCQlcCi0JLnVjb2RlX2FwaV9tYXggPSBJV0wyMDMwX1VDT0RFX0FQSV9NQVgsCQkJXAotCS51Y29kZV9hcGlfbWluID0gSVdMMjAzMF9VQ09ERV9BUElfTUlOLAkJCVwKLQkuZWVwcm9tX3ZlciA9IEVFUFJPTV82MDM1X0VFUFJPTV9WRVJTSU9OLAkJXAotCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzYwMzVfVFhfUE9XRVJfVkVSU0lPTiwJXAotCS5vcHMgPSAmaXdsMjAzMF9vcHMsCQkJCQlcCi0JLm1vZF9wYXJhbXMgPSAmaXdsYWduX21vZF9wYXJhbXMsCQkJXAotCS5iYXNlX3BhcmFtcyA9ICZpd2wyMDMwX2Jhc2VfcGFyYW1zLAkJCVwKLQkuYnRfcGFyYW1zID0gJml3bDIwMzBfYnRfcGFyYW1zLAkJCVwKLQkubmVlZF9kY19jYWxpYiA9IHRydWUsCQkJCQlcCi0JLm5lZWRfdGVtcF9vZmZzZXRfY2FsaWIgPSB0cnVlLAkJCQlcCi0JLmxlZF9tb2RlID0gSVdMX0xFRF9SRl9TVEFURSwJCQkJXAotCS5hZHZfcG0gPSB0cnVlCQkJCQkJXAotCi1zdHJ1Y3QgaXdsX2NmZyBpd2w2MDM1XzJhZ25fY2ZnID0gewotCS5uYW1lID0gIjIwMDAgU2VyaWVzIDJ4MiBBR04vQlQiLAotCUlXTF9ERVZJQ0VfNjAzNSwKLQkuaHRfcGFyYW1zID0gJml3bDIwMDBfaHRfcGFyYW1zLAotfTsKLQotc3RydWN0IGl3bF9jZmcgaXdsNjAzNV8yYWJnX2NmZyA9IHsKLQkubmFtZSA9ICIyMDAwIFNlcmllcyAyeDIgQUJHL0JUIiwKLQlJV0xfREVWSUNFXzYwMzUsCi19OwotCi1zdHJ1Y3QgaXdsX2NmZyBpd2w2MDM1XzJiZ19jZmcgPSB7Ci0JLm5hbWUgPSAiMjAwMCBTZXJpZXMgMngyIEJHL0JUIiwKLQlJV0xfREVWSUNFXzYwMzUsCi19OwotCi0jZGVmaW5lIElXTF9ERVZJQ0VfMjAwCQkJCQkJXAotCS5md19uYW1lX3ByZSA9IElXTDIwMF9GV19QUkUsCQkJCVwKLQkudWNvZGVfYXBpX21heCA9IElXTDIwMF9VQ09ERV9BUElfTUFYLAkJCVwKLQkudWNvZGVfYXBpX21pbiA9IElXTDIwMF9VQ09ERV9BUElfTUlOLAkJCVwKKyNkZWZpbmUgSVdMX0RFVklDRV8xMDUJCQkJCQlcCisJLmZ3X25hbWVfcHJlID0gSVdMMTA1X0ZXX1BSRSwJCQkJXAorCS51Y29kZV9hcGlfbWF4ID0gSVdMMTA1X1VDT0RFX0FQSV9NQVgsCQkJXAorCS51Y29kZV9hcGlfbWluID0gSVdMMTA1X1VDT0RFX0FQSV9NSU4sCQkJXAogCS5lZXByb21fdmVyID0gRUVQUk9NXzIwMDBfRUVQUk9NX1ZFUlNJT04sCQlcCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fMjAwMF9UWF9QT1dFUl9WRVJTSU9OLAlcCi0JLm9wcyA9ICZpd2wyMDBfb3BzLAkJCQkJXAotCS5tb2RfcGFyYW1zID0gJml3bGFnbl9tb2RfcGFyYW1zLAkJCVwKKwkub3BzID0gJml3bDEwNV9vcHMsCQkJCQlcCiAJLmJhc2VfcGFyYW1zID0gJml3bDIwMDBfYmFzZV9wYXJhbXMsCQkJXAogCS5uZWVkX2RjX2NhbGliID0gdHJ1ZSwJCQkJCVwKIAkubmVlZF90ZW1wX29mZnNldF9jYWxpYiA9IHRydWUsCQkJCVwKQEAgLTUxNywyNSArNDI4LDI0IEBACiAJLmFkdl9wbSA9IHRydWUsCQkJCQkJXAogCS5yeF93aXRoX3Npc29fZGl2ZXJzaXR5ID0gdHJ1ZQkJCQlcCiAKLXN0cnVjdCBpd2xfY2ZnIGl3bDIwMF9iZ19jZmcgPSB7Ci0JLm5hbWUgPSAiMjAwIFNlcmllcyAxeDEgQkciLAotCUlXTF9ERVZJQ0VfMjAwLAorc3RydWN0IGl3bF9jZmcgaXdsMTA1X2JnX2NmZyA9IHsKKwkubmFtZSA9ICIxMDUgU2VyaWVzIDF4MSBCRyIsCisJSVdMX0RFVklDRV8xMDUsCiB9OwogCi1zdHJ1Y3QgaXdsX2NmZyBpd2wyMDBfYmduX2NmZyA9IHsKLQkubmFtZSA9ICIyMDAgU2VyaWVzIDF4MSBCR04iLAotCUlXTF9ERVZJQ0VfMjAwLAorc3RydWN0IGl3bF9jZmcgaXdsMTA1X2Jnbl9jZmcgPSB7CisJLm5hbWUgPSAiMTA1IFNlcmllcyAxeDEgQkdOIiwKKwlJV0xfREVWSUNFXzEwNSwKIAkuaHRfcGFyYW1zID0gJml3bDIwMDBfaHRfcGFyYW1zLAogfTsKIAotI2RlZmluZSBJV0xfREVWSUNFXzIzMAkJCQkJCVwKLQkuZndfbmFtZV9wcmUgPSBJV0wyMDBfRldfUFJFLAkJCQlcCi0JLnVjb2RlX2FwaV9tYXggPSBJV0wyMDBfVUNPREVfQVBJX01BWCwJCQlcCi0JLnVjb2RlX2FwaV9taW4gPSBJV0wyMDBfVUNPREVfQVBJX01JTiwJCQlcCisjZGVmaW5lIElXTF9ERVZJQ0VfMTM1CQkJCQkJXAorCS5md19uYW1lX3ByZSA9IElXTDEwNV9GV19QUkUsCQkJCVwKKwkudWNvZGVfYXBpX21heCA9IElXTDEwNV9VQ09ERV9BUElfTUFYLAkJCVwKKwkudWNvZGVfYXBpX21pbiA9IElXTDEwNV9VQ09ERV9BUElfTUlOLAkJCVwKIAkuZWVwcm9tX3ZlciA9IEVFUFJPTV8yMDAwX0VFUFJPTV9WRVJTSU9OLAkJXAogCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzIwMDBfVFhfUE9XRVJfVkVSU0lPTiwJXAotCS5vcHMgPSAmaXdsMjMwX29wcywJCQkJCVwKLQkubW9kX3BhcmFtcyA9ICZpd2xhZ25fbW9kX3BhcmFtcywJCQlcCisJLm9wcyA9ICZpd2wxMzVfb3BzLAkJCQkJXAogCS5iYXNlX3BhcmFtcyA9ICZpd2wyMDMwX2Jhc2VfcGFyYW1zLAkJCVwKIAkuYnRfcGFyYW1zID0gJml3bDIwMzBfYnRfcGFyYW1zLAkJCVwKIAkubmVlZF9kY19jYWxpYiA9IHRydWUsCQkJCQlcCkBAIC01NDQsMTcgKzQ1NCwxNyBAQAogCS5hZHZfcG0gPSB0cnVlLAkJCQkJCVwKIAkucnhfd2l0aF9zaXNvX2RpdmVyc2l0eSA9IHRydWUJCQkJXAogCi1zdHJ1Y3QgaXdsX2NmZyBpd2wyMzBfYmdfY2ZnID0gewotCS5uYW1lID0gIjIwMCBTZXJpZXMgMXgxIEJHL0JUIiwKLQlJV0xfREVWSUNFXzIzMCwKK3N0cnVjdCBpd2xfY2ZnIGl3bDEzNV9iZ19jZmcgPSB7CisJLm5hbWUgPSAiMTA1IFNlcmllcyAxeDEgQkcvQlQiLAorCUlXTF9ERVZJQ0VfMTM1LAogfTsKIAotc3RydWN0IGl3bF9jZmcgaXdsMjMwX2Jnbl9jZmcgPSB7Ci0JLm5hbWUgPSAiMjAwIFNlcmllcyAxeDEgQkdOL0JUIiwKLQlJV0xfREVWSUNFXzIzMCwKK3N0cnVjdCBpd2xfY2ZnIGl3bDEzNV9iZ25fY2ZnID0geworCS5uYW1lID0gIjEwNSBTZXJpZXMgMXgxIEJHTi9CVCIsCisJSVdMX0RFVklDRV8xMzUsCiAJLmh0X3BhcmFtcyA9ICZpd2wyMDAwX2h0X3BhcmFtcywKIH07CiAKIE1PRFVMRV9GSVJNV0FSRShJV0wyMDAwX01PRFVMRV9GSVJNV0FSRShJV0wyMDAwX1VDT0RFX0FQSV9NQVgpKTsKIE1PRFVMRV9GSVJNV0FSRShJV0wyMDMwX01PRFVMRV9GSVJNV0FSRShJV0wyMDMwX1VDT0RFX0FQSV9NQVgpKTsKLU1PRFVMRV9GSVJNV0FSRShJV0wyMDBfTU9EVUxFX0ZJUk1XQVJFKElXTDIwMF9VQ09ERV9BUElfTUFYKSk7CitNT0RVTEVfRklSTVdBUkUoSVdMMTA1X01PRFVMRV9GSVJNV0FSRShJV0wxMDVfVUNPREVfQVBJX01BWCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC1ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC1ody5oCmluZGV4IDM5NzVlNDUuLjA1YWQ0NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAtaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLWh3LmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKaW5kZXggMjJlMDQ1Yi4uOThmODFkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC00NSwxMCArNDUsOCBAQAogI2luY2x1ZGUgIml3bC1zdGEuaCIKICNpbmNsdWRlICJpd2wtaGVscGVycy5oIgogI2luY2x1ZGUgIml3bC1hZ24uaCIKLSNpbmNsdWRlICJpd2wtYWduLWxlZC5oIgogI2luY2x1ZGUgIml3bC1hZ24taHcuaCIKICNpbmNsdWRlICJpd2wtNTAwMC1ody5oIgotI2luY2x1ZGUgIml3bC1hZ24tZGVidWdmcy5oIgogCiAvKiBIaWdoZXN0IGZpcm13YXJlIEFQSSB2ZXJzaW9uIHN1cHBvcnRlZCAqLwogI2RlZmluZSBJV0w1MDAwX1VDT0RFX0FQSV9NQVggNQpAQCAtNTksMTIgKzU3LDEwIEBACiAjZGVmaW5lIElXTDUxNTBfVUNPREVfQVBJX01JTiAxCiAKICNkZWZpbmUgSVdMNTAwMF9GV19QUkUgIml3bHdpZmktNTAwMC0iCi0jZGVmaW5lIF9JV0w1MDAwX01PRFVMRV9GSVJNV0FSRShhcGkpIElXTDUwMDBfRldfUFJFICNhcGkgIi51Y29kZSIKLSNkZWZpbmUgSVdMNTAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKSBfSVdMNTAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKQorI2RlZmluZSBJV0w1MDAwX01PRFVMRV9GSVJNV0FSRShhcGkpIElXTDUwMDBfRldfUFJFICNhcGkgIi51Y29kZSIKIAogI2RlZmluZSBJV0w1MTUwX0ZXX1BSRSAiaXdsd2lmaS01MTUwLSIKLSNkZWZpbmUgX0lXTDUxNTBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgSVdMNTE1MF9GV19QUkUgI2FwaSAiLnVjb2RlIgotI2RlZmluZSBJV0w1MTUwX01PRFVMRV9GSVJNV0FSRShhcGkpIF9JV0w1MTUwX01PRFVMRV9GSVJNV0FSRShhcGkpCisjZGVmaW5lIElXTDUxNTBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgSVdMNTE1MF9GV19QUkUgI2FwaSAiLnVjb2RlIgogCiAvKiBOSUMgY29uZmlndXJhdGlvbiBmb3IgNTAwMCBzZXJpZXMgKi8KIHN0YXRpYyB2b2lkIGl3bDUwMDBfbmljX2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCkBAIC0xNjgsMTAgKzE2NCwxMCBAQAogCiBzdGF0aWMgaW50IGl3bDUwMDBfaHdfc2V0X2h3X3BhcmFtcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JaWYgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+bnVtX29mX3F1ZXVlcyA+PSBJV0xfTUlOX05VTV9RVUVVRVMgJiYKLQkgICAgcHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5udW1fb2ZfcXVldWVzIDw9IElXTEFHTl9OVU1fUVVFVUVTKQorCWlmIChpd2xhZ25fbW9kX3BhcmFtcy5udW1fb2ZfcXVldWVzID49IElXTF9NSU5fTlVNX1FVRVVFUyAmJgorCSAgICBpd2xhZ25fbW9kX3BhcmFtcy5udW1fb2ZfcXVldWVzIDw9IElXTEFHTl9OVU1fUVVFVUVTKQogCQlwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5udW1fb2ZfcXVldWVzID0KLQkJCXByaXYtPmNmZy0+bW9kX3BhcmFtcy0+bnVtX29mX3F1ZXVlczsKKwkJCWl3bGFnbl9tb2RfcGFyYW1zLm51bV9vZl9xdWV1ZXM7CiAKIAlwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW0gPSBwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5udW1fb2ZfcXVldWVzOwogCXByaXYtPmh3X3BhcmFtcy5kbWFfY2hubF9udW0gPSBGSDUwX1RDU1JfQ0hOTF9OVU07CkBAIC0xODUsNyArMTgxLDYgQEAKIAlwcml2LT5od19wYXJhbXMubWF4X2RhdGFfc2l6ZSA9IElXTEFHTl9SVENfREFUQV9TSVpFOwogCXByaXYtPmh3X3BhcmFtcy5tYXhfaW5zdF9zaXplID0gSVdMQUdOX1JUQ19JTlNUX1NJWkU7CiAKLQlwcml2LT5od19wYXJhbXMubWF4X2JzbV9zaXplID0gMDsKIAlwcml2LT5od19wYXJhbXMuaHQ0MF9jaGFubmVsID0gIEJJVChJRUVFODAyMTFfQkFORF8yR0haKSB8CiAJCQkJCUJJVChJRUVFODAyMTFfQkFORF81R0haKTsKIAlwcml2LT5od19wYXJhbXMucnhfd3J0X3B0cl9yZWcgPSBGSF9SU0NTUl9DSE5MMF9XUFRSOwpAQCAtMjE0LDEwICsyMDksMTAgQEAKIAogc3RhdGljIGludCBpd2w1MTUwX2h3X3NldF9od19wYXJhbXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCWlmIChwcml2LT5jZmctPm1vZF9wYXJhbXMtPm51bV9vZl9xdWV1ZXMgPj0gSVdMX01JTl9OVU1fUVVFVUVTICYmCi0JICAgIHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+bnVtX29mX3F1ZXVlcyA8PSBJV0xBR05fTlVNX1FVRVVFUykKKwlpZiAoaXdsYWduX21vZF9wYXJhbXMubnVtX29mX3F1ZXVlcyA+PSBJV0xfTUlOX05VTV9RVUVVRVMgJiYKKwkgICAgaXdsYWduX21vZF9wYXJhbXMubnVtX29mX3F1ZXVlcyA8PSBJV0xBR05fTlVNX1FVRVVFUykKIAkJcHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+bnVtX29mX3F1ZXVlcyA9Ci0JCQlwcml2LT5jZmctPm1vZF9wYXJhbXMtPm51bV9vZl9xdWV1ZXM7CisJCQlpd2xhZ25fbW9kX3BhcmFtcy5udW1fb2ZfcXVldWVzOwogCiAJcHJpdi0+aHdfcGFyYW1zLm1heF90eHFfbnVtID0gcHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+bnVtX29mX3F1ZXVlczsKIAlwcml2LT5od19wYXJhbXMuZG1hX2NobmxfbnVtID0gRkg1MF9UQ1NSX0NITkxfTlVNOwpAQCAtMjMxLDcgKzIyNiw2IEBACiAJcHJpdi0+aHdfcGFyYW1zLm1heF9kYXRhX3NpemUgPSBJV0xBR05fUlRDX0RBVEFfU0laRTsKIAlwcml2LT5od19wYXJhbXMubWF4X2luc3Rfc2l6ZSA9IElXTEFHTl9SVENfSU5TVF9TSVpFOwogCi0JcHJpdi0+aHdfcGFyYW1zLm1heF9ic21fc2l6ZSA9IDA7CiAJcHJpdi0+aHdfcGFyYW1zLmh0NDBfY2hhbm5lbCA9ICBCSVQoSUVFRTgwMjExX0JBTkRfMkdIWikgfAogCQkJCQlCSVQoSUVFRTgwMjExX0JBTkRfNUdIWik7CiAJcHJpdi0+aHdfcGFyYW1zLnJ4X3dydF9wdHJfcmVnID0gRkhfUlNDU1JfQ0hOTDBfV1BUUjsKQEAgLTI2Myw3ICsyNTcsNyBAQAogCXUzMiB2dCA9IDA7CiAJczMyIG9mZnNldCA9ICBpd2xfdGVtcF9jYWxpYl90b19vZmZzZXQocHJpdik7CiAKLQl2dCA9IGxlMzJfdG9fY3B1KHByaXYtPl9hZ24uc3RhdGlzdGljcy5nZW5lcmFsLmNvbW1vbi50ZW1wZXJhdHVyZSk7CisJdnQgPSBsZTMyX3RvX2NwdShwcml2LT5zdGF0aXN0aWNzLmNvbW1vbi50ZW1wZXJhdHVyZSk7CiAJdnQgPSB2dCAvIElXTF81MTUwX1ZPTFRBR0VfVE9fVEVNUEVSQVRVUkVfQ09FRkYgKyBvZmZzZXQ7CiAJLyogbm93IHZ0IGhvbGQgdGhlIHRlbXBlcmF0dXJlIGluIEtlbHZpbiAqLwogCXByaXYtPnRlbXBlcmF0dXJlID0gS0VMVklOX1RPX0NFTFNJVVModnQpOwpAQCAtMzQ1LDI0ICszMzksMTMgQEAKIAogc3RhdGljIHN0cnVjdCBpd2xfbGliX29wcyBpd2w1MDAwX2xpYiA9IHsKIAkuc2V0X2h3X3BhcmFtcyA9IGl3bDUwMDBfaHdfc2V0X2h3X3BhcmFtcywKLQkudHhxX3VwZGF0ZV9ieXRlX2NudF90YmwgPSBpd2xhZ25fdHhxX3VwZGF0ZV9ieXRlX2NudF90YmwsCi0JLnR4cV9pbnZhbF9ieXRlX2NudF90YmwgPSBpd2xhZ25fdHhxX2ludmFsX2J5dGVfY250X3RibCwKIAkudHhxX3NldF9zY2hlZCA9IGl3bGFnbl90eHFfc2V0X3NjaGVkLAotCS50eHFfYWdnX2VuYWJsZSA9IGl3bGFnbl90eHFfYWdnX2VuYWJsZSwKLQkudHhxX2FnZ19kaXNhYmxlID0gaXdsYWduX3R4cV9hZ2dfZGlzYWJsZSwKIAkudHhxX2F0dGFjaF9idWZfdG9fdGZkID0gaXdsX2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZCwKIAkudHhxX2ZyZWVfdGZkID0gaXdsX2h3X3R4cV9mcmVlX3RmZCwKIAkudHhxX2luaXQgPSBpd2xfaHdfdHhfcXVldWVfaW5pdCwKIAkucnhfaGFuZGxlcl9zZXR1cCA9IGl3bGFnbl9yeF9oYW5kbGVyX3NldHVwLAogCS5zZXR1cF9kZWZlcnJlZF93b3JrID0gaXdsYWduX3NldHVwX2RlZmVycmVkX3dvcmssCiAJLmlzX3ZhbGlkX3J0Y19kYXRhX2FkZHIgPSBpd2xhZ25faHdfdmFsaWRfcnRjX2RhdGFfYWRkciwKLQkuZHVtcF9uaWNfZXZlbnRfbG9nID0gaXdsX2R1bXBfbmljX2V2ZW50X2xvZywKLQkuZHVtcF9uaWNfZXJyb3JfbG9nID0gaXdsX2R1bXBfbmljX2Vycm9yX2xvZywKLQkuZHVtcF9jc3IgPSBpd2xfZHVtcF9jc3IsCi0JLmR1bXBfZmggPSBpd2xfZHVtcF9maCwKLQkubG9hZF91Y29kZSA9IGl3bGFnbl9sb2FkX3Vjb2RlLAotCS5pbml0X2FsaXZlX3N0YXJ0ID0gaXdsYWduX2luaXRfYWxpdmVfc3RhcnQsCi0JLmFsaXZlX25vdGlmeSA9IGl3bGFnbl9hbGl2ZV9ub3RpZnksCiAJLnNlbmRfdHhfcG93ZXIgPSBpd2xhZ25fc2VuZF90eF9wb3dlciwKIAkudXBkYXRlX2NoYWluX2ZsYWdzID0gaXdsX3VwZGF0ZV9jaGFpbl9mbGFncywKIAkuc2V0X2NoYW5uZWxfc3dpdGNoID0gaXdsNTAwMF9od19jaGFubmVsX3N3aXRjaCwKQEAgLTM4MCw1NiArMzYzLDI0IEBACiAJCQlFRVBST01fUkVHX0JBTkRfMjRfSFQ0MF9DSEFOTkVMUywKIAkJCUVFUFJPTV9SRUdfQkFORF81Ml9IVDQwX0NIQU5ORUxTCiAJCX0sCi0JCS5hY3F1aXJlX3NlbWFwaG9yZSA9IGl3bGNvcmVfZWVwcm9tX2FjcXVpcmVfc2VtYXBob3JlLAotCQkucmVsZWFzZV9zZW1hcGhvcmUgPSBpd2xjb3JlX2VlcHJvbV9yZWxlYXNlX3NlbWFwaG9yZSwKLQkJLmNhbGliX3ZlcnNpb24JPSBpd2xhZ25fZWVwcm9tX2NhbGliX3ZlcnNpb24sCiAJCS5xdWVyeV9hZGRyID0gaXdsYWduX2VlcHJvbV9xdWVyeV9hZGRyLAogCX0sCi0JLmlzcl9vcHMgPSB7Ci0JCS5pc3IgPSBpd2xfaXNyX2ljdCwKLQkJLmZyZWUgPSBpd2xfZnJlZV9pc3JfaWN0LAotCQkuYWxsb2MgPSBpd2xfYWxsb2NfaXNyX2ljdCwKLQkJLnJlc2V0ID0gaXdsX3Jlc2V0X2ljdCwKLQkJLmRpc2FibGUgPSBpd2xfZGlzYWJsZV9pY3QsCi0JfSwKIAkudGVtcF9vcHMgPSB7CiAJCS50ZW1wZXJhdHVyZSA9IGl3bGFnbl90ZW1wZXJhdHVyZSwKIAkgfSwKLQkuZGVidWdmc19vcHMgPSB7Ci0JCS5yeF9zdGF0c19yZWFkID0gaXdsX3Vjb2RlX3J4X3N0YXRzX3JlYWQsCi0JCS50eF9zdGF0c19yZWFkID0gaXdsX3Vjb2RlX3R4X3N0YXRzX3JlYWQsCi0JCS5nZW5lcmFsX3N0YXRzX3JlYWQgPSBpd2xfdWNvZGVfZ2VuZXJhbF9zdGF0c19yZWFkLAotCQkuYnRfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV9idF9zdGF0c19yZWFkLAotCQkucmVwbHlfdHhfZXJyb3IgPSBpd2xfcmVwbHlfdHhfZXJyb3JfcmVhZCwKLQl9LAogCS50eGZpZm9fZmx1c2ggPSBpd2xhZ25fdHhmaWZvX2ZsdXNoLAogCS5kZXZfdHhmaWZvX2ZsdXNoID0gaXdsYWduX2Rldl90eGZpZm9fZmx1c2gsCi0JLnR0X29wcyA9IHsKLQkJLmxvd2VyX3Bvd2VyX2RldGVjdGlvbiA9IGl3bF90dF9pc19sb3dfcG93ZXJfc3RhdGUsCi0JCS50dF9wb3dlcl9tb2RlID0gaXdsX3R0X2N1cnJlbnRfcG93ZXJfbW9kZSwKLQkJLmN0X2tpbGxfY2hlY2sgPSBpd2xfY2hlY2tfZm9yX2N0X2tpbGwsCi0JfQogfTsKIAogc3RhdGljIHN0cnVjdCBpd2xfbGliX29wcyBpd2w1MTUwX2xpYiA9IHsKIAkuc2V0X2h3X3BhcmFtcyA9IGl3bDUxNTBfaHdfc2V0X2h3X3BhcmFtcywKLQkudHhxX3VwZGF0ZV9ieXRlX2NudF90YmwgPSBpd2xhZ25fdHhxX3VwZGF0ZV9ieXRlX2NudF90YmwsCi0JLnR4cV9pbnZhbF9ieXRlX2NudF90YmwgPSBpd2xhZ25fdHhxX2ludmFsX2J5dGVfY250X3RibCwKIAkudHhxX3NldF9zY2hlZCA9IGl3bGFnbl90eHFfc2V0X3NjaGVkLAotCS50eHFfYWdnX2VuYWJsZSA9IGl3bGFnbl90eHFfYWdnX2VuYWJsZSwKLQkudHhxX2FnZ19kaXNhYmxlID0gaXdsYWduX3R4cV9hZ2dfZGlzYWJsZSwKIAkudHhxX2F0dGFjaF9idWZfdG9fdGZkID0gaXdsX2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZCwKIAkudHhxX2ZyZWVfdGZkID0gaXdsX2h3X3R4cV9mcmVlX3RmZCwKIAkudHhxX2luaXQgPSBpd2xfaHdfdHhfcXVldWVfaW5pdCwKIAkucnhfaGFuZGxlcl9zZXR1cCA9IGl3bGFnbl9yeF9oYW5kbGVyX3NldHVwLAogCS5zZXR1cF9kZWZlcnJlZF93b3JrID0gaXdsYWduX3NldHVwX2RlZmVycmVkX3dvcmssCiAJLmlzX3ZhbGlkX3J0Y19kYXRhX2FkZHIgPSBpd2xhZ25faHdfdmFsaWRfcnRjX2RhdGFfYWRkciwKLQkuZHVtcF9uaWNfZXZlbnRfbG9nID0gaXdsX2R1bXBfbmljX2V2ZW50X2xvZywKLQkuZHVtcF9uaWNfZXJyb3JfbG9nID0gaXdsX2R1bXBfbmljX2Vycm9yX2xvZywKLQkuZHVtcF9jc3IgPSBpd2xfZHVtcF9jc3IsCi0JLmxvYWRfdWNvZGUgPSBpd2xhZ25fbG9hZF91Y29kZSwKLQkuaW5pdF9hbGl2ZV9zdGFydCA9IGl3bGFnbl9pbml0X2FsaXZlX3N0YXJ0LAotCS5hbGl2ZV9ub3RpZnkgPSBpd2xhZ25fYWxpdmVfbm90aWZ5LAogCS5zZW5kX3R4X3Bvd2VyID0gaXdsYWduX3NlbmRfdHhfcG93ZXIsCiAJLnVwZGF0ZV9jaGFpbl9mbGFncyA9IGl3bF91cGRhdGVfY2hhaW5fZmxhZ3MsCiAJLnNldF9jaGFubmVsX3N3aXRjaCA9IGl3bDUwMDBfaHdfY2hhbm5lbF9zd2l0Y2gsCkBAIC00NDcsNTEgKzM5OCwyNSBAQAogCQkJRUVQUk9NX1JFR19CQU5EXzI0X0hUNDBfQ0hBTk5FTFMsCiAJCQlFRVBST01fUkVHX0JBTkRfNTJfSFQ0MF9DSEFOTkVMUwogCQl9LAotCQkuYWNxdWlyZV9zZW1hcGhvcmUgPSBpd2xjb3JlX2VlcHJvbV9hY3F1aXJlX3NlbWFwaG9yZSwKLQkJLnJlbGVhc2Vfc2VtYXBob3JlID0gaXdsY29yZV9lZXByb21fcmVsZWFzZV9zZW1hcGhvcmUsCi0JCS5jYWxpYl92ZXJzaW9uCT0gaXdsYWduX2VlcHJvbV9jYWxpYl92ZXJzaW9uLAogCQkucXVlcnlfYWRkciA9IGl3bGFnbl9lZXByb21fcXVlcnlfYWRkciwKIAl9LAotCS5pc3Jfb3BzID0gewotCQkuaXNyID0gaXdsX2lzcl9pY3QsCi0JCS5mcmVlID0gaXdsX2ZyZWVfaXNyX2ljdCwKLQkJLmFsbG9jID0gaXdsX2FsbG9jX2lzcl9pY3QsCi0JCS5yZXNldCA9IGl3bF9yZXNldF9pY3QsCi0JCS5kaXNhYmxlID0gaXdsX2Rpc2FibGVfaWN0LAotCX0sCiAJLnRlbXBfb3BzID0gewogCQkudGVtcGVyYXR1cmUgPSBpd2w1MTUwX3RlbXBlcmF0dXJlLAogCSB9LAotCS5kZWJ1Z2ZzX29wcyA9IHsKLQkJLnJ4X3N0YXRzX3JlYWQgPSBpd2xfdWNvZGVfcnhfc3RhdHNfcmVhZCwKLQkJLnR4X3N0YXRzX3JlYWQgPSBpd2xfdWNvZGVfdHhfc3RhdHNfcmVhZCwKLQkJLmdlbmVyYWxfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV9nZW5lcmFsX3N0YXRzX3JlYWQsCi0JCS5idF9zdGF0c19yZWFkID0gaXdsX3Vjb2RlX2J0X3N0YXRzX3JlYWQsCi0JCS5yZXBseV90eF9lcnJvciA9IGl3bF9yZXBseV90eF9lcnJvcl9yZWFkLAotCX0sCiAJLnR4Zmlmb19mbHVzaCA9IGl3bGFnbl90eGZpZm9fZmx1c2gsCiAJLmRldl90eGZpZm9fZmx1c2ggPSBpd2xhZ25fZGV2X3R4Zmlmb19mbHVzaCwKLQkudHRfb3BzID0gewotCQkubG93ZXJfcG93ZXJfZGV0ZWN0aW9uID0gaXdsX3R0X2lzX2xvd19wb3dlcl9zdGF0ZSwKLQkJLnR0X3Bvd2VyX21vZGUgPSBpd2xfdHRfY3VycmVudF9wb3dlcl9tb2RlLAotCQkuY3Rfa2lsbF9jaGVjayA9IGl3bF9jaGVja19mb3JfY3Rfa2lsbCwKLQl9CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGl3bF9vcHMgaXdsNTAwMF9vcHMgPSB7CiAJLmxpYiA9ICZpd2w1MDAwX2xpYiwKIAkuaGNtZCA9ICZpd2xhZ25faGNtZCwKIAkudXRpbHMgPSAmaXdsYWduX2hjbWRfdXRpbHMsCi0JLmxlZCA9ICZpd2xhZ25fbGVkX29wcywKLQkuaWVlZTgwMjExX29wcyA9ICZpd2xhZ25faHdfb3BzLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfb3BzIGl3bDUxNTBfb3BzID0gewogCS5saWIgPSAmaXdsNTE1MF9saWIsCiAJLmhjbWQgPSAmaXdsYWduX2hjbWQsCiAJLnV0aWxzID0gJml3bGFnbl9oY21kX3V0aWxzLAotCS5sZWQgPSAmaXdsYWduX2xlZF9vcHMsCi0JLmllZWU4MDIxMV9vcHMgPSAmaXdsYWduX2h3X29wcywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXdsX2Jhc2VfcGFyYW1zIGl3bDUwMDBfYmFzZV9wYXJhbXMgPSB7CkBAIC00OTksMTcgKzQyNCwxMiBAQAogCS5udW1fb2ZfcXVldWVzID0gSVdMQUdOX05VTV9RVUVVRVMsCiAJLm51bV9vZl9hbXBkdV9xdWV1ZXMgPSBJV0xBR05fTlVNX0FNUERVX1FVRVVFUywKIAkucGxsX2NmZ192YWwgPSBDU1I1MF9BTkFfUExMX0NGR19WQUwsCi0JLnNldF9sMHMgPSB0cnVlLAotCS51c2VfYnNtID0gZmFsc2UsCiAJLmxlZF9jb21wZW5zYXRpb24gPSA1MSwKIAkuY2hhaW5fbm9pc2VfbnVtX2JlYWNvbnMgPSBJV0xfQ0FMX05VTV9CRUFDT05TLAogCS5wbGNwX2RlbHRhX3RocmVzaG9sZCA9IElXTF9NQVhfUExDUF9FUlJfTE9OR19USFJFU0hPTERfREVGLAogCS5jaGFpbl9ub2lzZV9zY2FsZSA9IDEwMDAsCiAJLndkX3RpbWVvdXQgPSBJV0xfTE9OR19XRF9USU1FT1VULAogCS5tYXhfZXZlbnRfbG9nX3NpemUgPSA1MTIsCi0JLnVjb2RlX3RyYWNpbmcgPSB0cnVlLAotCS5zZW5zaXRpdml0eV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLAotCS5jaGFpbl9ub2lzZV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLAogfTsKIHN0YXRpYyBzdHJ1Y3QgaXdsX2h0X3BhcmFtcyBpd2w1MDAwX2h0X3BhcmFtcyA9IHsKIAkuaHRfZ3JlZW5maWVsZF9zdXBwb3J0ID0gdHJ1ZSwKQEAgLTUyMyw3ICs0NDMsNiBAQAogCS5lZXByb21fdmVyID0gRUVQUk9NXzUwMDBfRUVQUk9NX1ZFUlNJT04sCQlcCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNTAwMF9UWF9QT1dFUl9WRVJTSU9OLAlcCiAJLm9wcyA9ICZpd2w1MDAwX29wcywJCQkJCVwKLQkubW9kX3BhcmFtcyA9ICZpd2xhZ25fbW9kX3BhcmFtcywJCQlcCiAJLmJhc2VfcGFyYW1zID0gJml3bDUwMDBfYmFzZV9wYXJhbXMsCQkJXAogCS5sZWRfbW9kZSA9IElXTF9MRURfQkxJTksKIApAQCAtNTY3LDcgKzQ4Niw2IEBACiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNTA1MF9FRVBST01fVkVSU0lPTiwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDUwX1RYX1BPV0VSX1ZFUlNJT04sCiAJLm9wcyA9ICZpd2w1MDAwX29wcywKLQkubW9kX3BhcmFtcyA9ICZpd2xhZ25fbW9kX3BhcmFtcywKIAkuYmFzZV9wYXJhbXMgPSAmaXdsNTAwMF9iYXNlX3BhcmFtcywKIAkuaHRfcGFyYW1zID0gJml3bDUwMDBfaHRfcGFyYW1zLAogCS5sZWRfbW9kZSA9IElXTF9MRURfQkxJTkssCkBAIC01ODEsNyArNDk5LDYgQEAKIAkuZWVwcm9tX3ZlciA9IEVFUFJPTV81MDUwX0VFUFJPTV9WRVJTSU9OLAkJXAogCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzUwNTBfVFhfUE9XRVJfVkVSU0lPTiwJXAogCS5vcHMgPSAmaXdsNTE1MF9vcHMsCQkJCQlcCi0JLm1vZF9wYXJhbXMgPSAmaXdsYWduX21vZF9wYXJhbXMsCQkJXAogCS5iYXNlX3BhcmFtcyA9ICZpd2w1MDAwX2Jhc2VfcGFyYW1zLAkJCVwKIAkubmVlZF9kY19jYWxpYiA9IHRydWUsCQkJCQlcCiAJLmxlZF9tb2RlID0gSVdMX0xFRF9CTElOSywJCQkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC1ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC1ody5oCmluZGV4IDQ3ODkxZTEuLmIyNzk4NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAtaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLWh3LmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLmMKaW5kZXggYTc0NWIwMS4uYTc5MjFmOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtNDYsOCArNDYsNiBAQAogI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCiAjaW5jbHVkZSAiaXdsLWFnbi1ody5oIgogI2luY2x1ZGUgIml3bC02MDAwLWh3LmgiCi0jaW5jbHVkZSAiaXdsLWFnbi1sZWQuaCIKLSNpbmNsdWRlICJpd2wtYWduLWRlYnVnZnMuaCIKIAogLyogSGlnaGVzdCBmaXJtd2FyZSBBUEkgdmVyc2lvbiBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgSVdMNjAwMF9VQ09ERV9BUElfTUFYIDQKQEAgLTYwLDIwICs1OCwxNiBAQAogI2RlZmluZSBJV0w2MDAwRzJfVUNPREVfQVBJX01JTiA0CiAKICNkZWZpbmUgSVdMNjAwMF9GV19QUkUgIml3bHdpZmktNjAwMC0iCi0jZGVmaW5lIF9JV0w2MDAwX01PRFVMRV9GSVJNV0FSRShhcGkpIElXTDYwMDBfRldfUFJFICNhcGkgIi51Y29kZSIKLSNkZWZpbmUgSVdMNjAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKSBfSVdMNjAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKQorI2RlZmluZSBJV0w2MDAwX01PRFVMRV9GSVJNV0FSRShhcGkpIElXTDYwMDBfRldfUFJFICNhcGkgIi51Y29kZSIKIAogI2RlZmluZSBJV0w2MDUwX0ZXX1BSRSAiaXdsd2lmaS02MDUwLSIKLSNkZWZpbmUgX0lXTDYwNTBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgSVdMNjA1MF9GV19QUkUgI2FwaSAiLnVjb2RlIgotI2RlZmluZSBJV0w2MDUwX01PRFVMRV9GSVJNV0FSRShhcGkpIF9JV0w2MDUwX01PRFVMRV9GSVJNV0FSRShhcGkpCisjZGVmaW5lIElXTDYwNTBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgSVdMNjA1MF9GV19QUkUgI2FwaSAiLnVjb2RlIgogCiAjZGVmaW5lIElXTDYwMDVfRldfUFJFICJpd2x3aWZpLTYwMDBnMmEtIgotI2RlZmluZSBfSVdMNjAwNV9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0w2MDA1X0ZXX1BSRSAjYXBpICIudWNvZGUiCi0jZGVmaW5lIElXTDYwMDVfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgX0lXTDYwMDVfTU9EVUxFX0ZJUk1XQVJFKGFwaSkKKyNkZWZpbmUgSVdMNjAwNV9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0w2MDA1X0ZXX1BSRSAjYXBpICIudWNvZGUiCiAKICNkZWZpbmUgSVdMNjAzMF9GV19QUkUgIml3bHdpZmktNjAwMGcyYi0iCi0jZGVmaW5lIF9JV0w2MDMwX01PRFVMRV9GSVJNV0FSRShhcGkpIElXTDYwMzBfRldfUFJFICNhcGkgIi51Y29kZSIKLSNkZWZpbmUgSVdMNjAzMF9NT0RVTEVfRklSTVdBUkUoYXBpKSBfSVdMNjAzMF9NT0RVTEVfRklSTVdBUkUoYXBpKQorI2RlZmluZSBJV0w2MDMwX01PRFVMRV9GSVJNV0FSRShhcGkpIElXTDYwMzBfRldfUFJFICNhcGkgIi51Y29kZSIKIAogc3RhdGljIHZvaWQgaXdsNjAwMF9zZXRfY3RfdGhyZXNob2xkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKQEAgLTg1LDcgKzc5LDcgQEAKIHN0YXRpYyB2b2lkIGl3bDYwNTBfYWRkaXRpb25hbF9uaWNfY29uZmlnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAkvKiBJbmRpY2F0ZSBjYWxpYnJhdGlvbiB2ZXJzaW9uIHRvIHVDb2RlLiAqLwotCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5lZXByb21fb3BzLmNhbGliX3ZlcnNpb24ocHJpdikgPj0gNikKKwlpZiAoaXdsYWduX2VlcHJvbV9jYWxpYl92ZXJzaW9uKHByaXYpID49IDYpCiAJCWl3bF9zZXRfYml0KHByaXYsIENTUl9HUF9EUklWRVJfUkVHLAogCQkJCUNTUl9HUF9EUklWRVJfUkVHX0JJVF9DQUxJQl9WRVJTSU9ONik7CiB9CkBAIC05Myw3ICs4Nyw3IEBACiBzdGF0aWMgdm9pZCBpd2w2MTUwX2FkZGl0aW9uYWxfbmljX2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJLyogSW5kaWNhdGUgY2FsaWJyYXRpb24gdmVyc2lvbiB0byB1Q29kZS4gKi8KLQlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZWVwcm9tX29wcy5jYWxpYl92ZXJzaW9uKHByaXYpID49IDYpCisJaWYgKGl3bGFnbl9lZXByb21fY2FsaWJfdmVyc2lvbihwcml2KSA+PSA2KQogCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfR1BfRFJJVkVSX1JFRywKIAkJCQlDU1JfR1BfRFJJVkVSX1JFR19CSVRfQ0FMSUJfVkVSU0lPTjYpOwogCWl3bF9zZXRfYml0KHByaXYsIENTUl9HUF9EUklWRVJfUkVHLApAQCAtMTU5LDEwICsxNTMsMTAgQEAKIAogc3RhdGljIGludCBpd2w2MDAwX2h3X3NldF9od19wYXJhbXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCWlmIChwcml2LT5jZmctPm1vZF9wYXJhbXMtPm51bV9vZl9xdWV1ZXMgPj0gSVdMX01JTl9OVU1fUVVFVUVTICYmCi0JICAgIHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+bnVtX29mX3F1ZXVlcyA8PSBJV0xBR05fTlVNX1FVRVVFUykKKwlpZiAoaXdsYWduX21vZF9wYXJhbXMubnVtX29mX3F1ZXVlcyA+PSBJV0xfTUlOX05VTV9RVUVVRVMgJiYKKwkgICAgaXdsYWduX21vZF9wYXJhbXMubnVtX29mX3F1ZXVlcyA8PSBJV0xBR05fTlVNX1FVRVVFUykKIAkJcHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+bnVtX29mX3F1ZXVlcyA9Ci0JCQlwcml2LT5jZmctPm1vZF9wYXJhbXMtPm51bV9vZl9xdWV1ZXM7CisJCQlpd2xhZ25fbW9kX3BhcmFtcy5udW1fb2ZfcXVldWVzOwogCiAJcHJpdi0+aHdfcGFyYW1zLm1heF90eHFfbnVtID0gcHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+bnVtX29mX3F1ZXVlczsKIAlwcml2LT5od19wYXJhbXMuZG1hX2NobmxfbnVtID0gRkg1MF9UQ1NSX0NITkxfTlVNOwpAQCAtMTc2LDcgKzE3MCw2IEBACiAJcHJpdi0+aHdfcGFyYW1zLm1heF9kYXRhX3NpemUgPSBJV0w2MF9SVENfREFUQV9TSVpFOwogCXByaXYtPmh3X3BhcmFtcy5tYXhfaW5zdF9zaXplID0gSVdMNjBfUlRDX0lOU1RfU0laRTsKIAotCXByaXYtPmh3X3BhcmFtcy5tYXhfYnNtX3NpemUgPSAwOwogCXByaXYtPmh3X3BhcmFtcy5odDQwX2NoYW5uZWwgPSAgQklUKElFRUU4MDIxMV9CQU5EXzJHSFopIHwKIAkJCQkJQklUKElFRUU4MDIxMV9CQU5EXzVHSFopOwogCXByaXYtPmh3X3BhcmFtcy5yeF93cnRfcHRyX3JlZyA9IEZIX1JTQ1NSX0NITkwwX1dQVFI7CkBAIC0yODUsMjQgKzI3OCwxMyBAQAogCiBzdGF0aWMgc3RydWN0IGl3bF9saWJfb3BzIGl3bDYwMDBfbGliID0gewogCS5zZXRfaHdfcGFyYW1zID0gaXdsNjAwMF9od19zZXRfaHdfcGFyYW1zLAotCS50eHFfdXBkYXRlX2J5dGVfY250X3RibCA9IGl3bGFnbl90eHFfdXBkYXRlX2J5dGVfY250X3RibCwKLQkudHhxX2ludmFsX2J5dGVfY250X3RibCA9IGl3bGFnbl90eHFfaW52YWxfYnl0ZV9jbnRfdGJsLAogCS50eHFfc2V0X3NjaGVkID0gaXdsYWduX3R4cV9zZXRfc2NoZWQsCi0JLnR4cV9hZ2dfZW5hYmxlID0gaXdsYWduX3R4cV9hZ2dfZW5hYmxlLAotCS50eHFfYWdnX2Rpc2FibGUgPSBpd2xhZ25fdHhxX2FnZ19kaXNhYmxlLAogCS50eHFfYXR0YWNoX2J1Zl90b190ZmQgPSBpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkLAogCS50eHFfZnJlZV90ZmQgPSBpd2xfaHdfdHhxX2ZyZWVfdGZkLAogCS50eHFfaW5pdCA9IGl3bF9od190eF9xdWV1ZV9pbml0LAogCS5yeF9oYW5kbGVyX3NldHVwID0gaXdsYWduX3J4X2hhbmRsZXJfc2V0dXAsCiAJLnNldHVwX2RlZmVycmVkX3dvcmsgPSBpd2xhZ25fc2V0dXBfZGVmZXJyZWRfd29yaywKIAkuaXNfdmFsaWRfcnRjX2RhdGFfYWRkciA9IGl3bGFnbl9od192YWxpZF9ydGNfZGF0YV9hZGRyLAotCS5sb2FkX3Vjb2RlID0gaXdsYWduX2xvYWRfdWNvZGUsCi0JLmR1bXBfbmljX2V2ZW50X2xvZyA9IGl3bF9kdW1wX25pY19ldmVudF9sb2csCi0JLmR1bXBfbmljX2Vycm9yX2xvZyA9IGl3bF9kdW1wX25pY19lcnJvcl9sb2csCi0JLmR1bXBfY3NyID0gaXdsX2R1bXBfY3NyLAotCS5kdW1wX2ZoID0gaXdsX2R1bXBfZmgsCi0JLmluaXRfYWxpdmVfc3RhcnQgPSBpd2xhZ25faW5pdF9hbGl2ZV9zdGFydCwKLQkuYWxpdmVfbm90aWZ5ID0gaXdsYWduX2FsaXZlX25vdGlmeSwKIAkuc2VuZF90eF9wb3dlciA9IGl3bGFnbl9zZW5kX3R4X3Bvd2VyLAogCS51cGRhdGVfY2hhaW5fZmxhZ3MgPSBpd2xfdXBkYXRlX2NoYWluX2ZsYWdzLAogCS5zZXRfY2hhbm5lbF9zd2l0Y2ggPSBpd2w2MDAwX2h3X2NoYW5uZWxfc3dpdGNoLApAQCAtMzIwLDQ1ICszMDIsMTkgQEAKIAkJCUVFUFJPTV82MDAwX1JFR19CQU5EXzI0X0hUNDBfQ0hBTk5FTFMsCiAJCQlFRVBST01fUkVHX0JBTkRfNTJfSFQ0MF9DSEFOTkVMUwogCQl9LAotCQkuYWNxdWlyZV9zZW1hcGhvcmUgPSBpd2xjb3JlX2VlcHJvbV9hY3F1aXJlX3NlbWFwaG9yZSwKLQkJLnJlbGVhc2Vfc2VtYXBob3JlID0gaXdsY29yZV9lZXByb21fcmVsZWFzZV9zZW1hcGhvcmUsCi0JCS5jYWxpYl92ZXJzaW9uCT0gaXdsYWduX2VlcHJvbV9jYWxpYl92ZXJzaW9uLAogCQkucXVlcnlfYWRkciA9IGl3bGFnbl9lZXByb21fcXVlcnlfYWRkciwKIAkJLnVwZGF0ZV9lbmhhbmNlZF90eHBvd2VyID0gaXdsY29yZV9lZXByb21fZW5oYW5jZWRfdHhwb3dlciwKIAl9LAotCS5pc3Jfb3BzID0gewotCQkuaXNyID0gaXdsX2lzcl9pY3QsCi0JCS5mcmVlID0gaXdsX2ZyZWVfaXNyX2ljdCwKLQkJLmFsbG9jID0gaXdsX2FsbG9jX2lzcl9pY3QsCi0JCS5yZXNldCA9IGl3bF9yZXNldF9pY3QsCi0JCS5kaXNhYmxlID0gaXdsX2Rpc2FibGVfaWN0LAotCX0sCiAJLnRlbXBfb3BzID0gewogCQkudGVtcGVyYXR1cmUgPSBpd2xhZ25fdGVtcGVyYXR1cmUsCiAJIH0sCi0JLmRlYnVnZnNfb3BzID0gewotCQkucnhfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV9yeF9zdGF0c19yZWFkLAotCQkudHhfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV90eF9zdGF0c19yZWFkLAotCQkuZ2VuZXJhbF9zdGF0c19yZWFkID0gaXdsX3Vjb2RlX2dlbmVyYWxfc3RhdHNfcmVhZCwKLQkJLmJ0X3N0YXRzX3JlYWQgPSBpd2xfdWNvZGVfYnRfc3RhdHNfcmVhZCwKLQkJLnJlcGx5X3R4X2Vycm9yID0gaXdsX3JlcGx5X3R4X2Vycm9yX3JlYWQsCi0JfSwKIAkudHhmaWZvX2ZsdXNoID0gaXdsYWduX3R4Zmlmb19mbHVzaCwKIAkuZGV2X3R4Zmlmb19mbHVzaCA9IGl3bGFnbl9kZXZfdHhmaWZvX2ZsdXNoLAotCS50dF9vcHMgPSB7Ci0JCS5sb3dlcl9wb3dlcl9kZXRlY3Rpb24gPSBpd2xfdHRfaXNfbG93X3Bvd2VyX3N0YXRlLAotCQkudHRfcG93ZXJfbW9kZSA9IGl3bF90dF9jdXJyZW50X3Bvd2VyX21vZGUsCi0JCS5jdF9raWxsX2NoZWNrID0gaXdsX2NoZWNrX2Zvcl9jdF9raWxsLAotCX0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXdsX2xpYl9vcHMgaXdsNjAzMF9saWIgPSB7CiAJLnNldF9od19wYXJhbXMgPSBpd2w2MDAwX2h3X3NldF9od19wYXJhbXMsCi0JLnR4cV91cGRhdGVfYnl0ZV9jbnRfdGJsID0gaXdsYWduX3R4cV91cGRhdGVfYnl0ZV9jbnRfdGJsLAotCS50eHFfaW52YWxfYnl0ZV9jbnRfdGJsID0gaXdsYWduX3R4cV9pbnZhbF9ieXRlX2NudF90YmwsCiAJLnR4cV9zZXRfc2NoZWQgPSBpd2xhZ25fdHhxX3NldF9zY2hlZCwKLQkudHhxX2FnZ19lbmFibGUgPSBpd2xhZ25fdHhxX2FnZ19lbmFibGUsCi0JLnR4cV9hZ2dfZGlzYWJsZSA9IGl3bGFnbl90eHFfYWdnX2Rpc2FibGUsCiAJLnR4cV9hdHRhY2hfYnVmX3RvX3RmZCA9IGl3bF9od190eHFfYXR0YWNoX2J1Zl90b190ZmQsCiAJLnR4cV9mcmVlX3RmZCA9IGl3bF9od190eHFfZnJlZV90ZmQsCiAJLnR4cV9pbml0ID0gaXdsX2h3X3R4X3F1ZXVlX2luaXQsCkBAIC0zNjYsMTMgKzMyMiw2IEBACiAJLnNldHVwX2RlZmVycmVkX3dvcmsgPSBpd2xhZ25fYnRfc2V0dXBfZGVmZXJyZWRfd29yaywKIAkuY2FuY2VsX2RlZmVycmVkX3dvcmsgPSBpd2xhZ25fYnRfY2FuY2VsX2RlZmVycmVkX3dvcmssCiAJLmlzX3ZhbGlkX3J0Y19kYXRhX2FkZHIgPSBpd2xhZ25faHdfdmFsaWRfcnRjX2RhdGFfYWRkciwKLQkubG9hZF91Y29kZSA9IGl3bGFnbl9sb2FkX3Vjb2RlLAotCS5kdW1wX25pY19ldmVudF9sb2cgPSBpd2xfZHVtcF9uaWNfZXZlbnRfbG9nLAotCS5kdW1wX25pY19lcnJvcl9sb2cgPSBpd2xfZHVtcF9uaWNfZXJyb3JfbG9nLAotCS5kdW1wX2NzciA9IGl3bF9kdW1wX2NzciwKLQkuZHVtcF9maCA9IGl3bF9kdW1wX2ZoLAotCS5pbml0X2FsaXZlX3N0YXJ0ID0gaXdsYWduX2luaXRfYWxpdmVfc3RhcnQsCi0JLmFsaXZlX25vdGlmeSA9IGl3bGFnbl9hbGl2ZV9ub3RpZnksCiAJLnNlbmRfdHhfcG93ZXIgPSBpd2xhZ25fc2VuZF90eF9wb3dlciwKIAkudXBkYXRlX2NoYWluX2ZsYWdzID0gaXdsX3VwZGF0ZV9jaGFpbl9mbGFncywKIAkuc2V0X2NoYW5uZWxfc3dpdGNoID0gaXdsNjAwMF9od19jaGFubmVsX3N3aXRjaCwKQEAgLTM5MCwzNiArMzM5LDE0IEBACiAJCQlFRVBST01fNjAwMF9SRUdfQkFORF8yNF9IVDQwX0NIQU5ORUxTLAogCQkJRUVQUk9NX1JFR19CQU5EXzUyX0hUNDBfQ0hBTk5FTFMKIAkJfSwKLQkJLmFjcXVpcmVfc2VtYXBob3JlID0gaXdsY29yZV9lZXByb21fYWNxdWlyZV9zZW1hcGhvcmUsCi0JCS5yZWxlYXNlX3NlbWFwaG9yZSA9IGl3bGNvcmVfZWVwcm9tX3JlbGVhc2Vfc2VtYXBob3JlLAotCQkuY2FsaWJfdmVyc2lvbgk9IGl3bGFnbl9lZXByb21fY2FsaWJfdmVyc2lvbiwKIAkJLnF1ZXJ5X2FkZHIgPSBpd2xhZ25fZWVwcm9tX3F1ZXJ5X2FkZHIsCiAJCS51cGRhdGVfZW5oYW5jZWRfdHhwb3dlciA9IGl3bGNvcmVfZWVwcm9tX2VuaGFuY2VkX3R4cG93ZXIsCiAJfSwKLQkuaXNyX29wcyA9IHsKLQkJLmlzciA9IGl3bF9pc3JfaWN0LAotCQkuZnJlZSA9IGl3bF9mcmVlX2lzcl9pY3QsCi0JCS5hbGxvYyA9IGl3bF9hbGxvY19pc3JfaWN0LAotCQkucmVzZXQgPSBpd2xfcmVzZXRfaWN0LAotCQkuZGlzYWJsZSA9IGl3bF9kaXNhYmxlX2ljdCwKLQl9LAogCS50ZW1wX29wcyA9IHsKIAkJLnRlbXBlcmF0dXJlID0gaXdsYWduX3RlbXBlcmF0dXJlLAogCSB9LAotCS5kZWJ1Z2ZzX29wcyA9IHsKLQkJLnJ4X3N0YXRzX3JlYWQgPSBpd2xfdWNvZGVfcnhfc3RhdHNfcmVhZCwKLQkJLnR4X3N0YXRzX3JlYWQgPSBpd2xfdWNvZGVfdHhfc3RhdHNfcmVhZCwKLQkJLmdlbmVyYWxfc3RhdHNfcmVhZCA9IGl3bF91Y29kZV9nZW5lcmFsX3N0YXRzX3JlYWQsCi0JCS5idF9zdGF0c19yZWFkID0gaXdsX3Vjb2RlX2J0X3N0YXRzX3JlYWQsCi0JCS5yZXBseV90eF9lcnJvciA9IGl3bF9yZXBseV90eF9lcnJvcl9yZWFkLAotCX0sCiAJLnR4Zmlmb19mbHVzaCA9IGl3bGFnbl90eGZpZm9fZmx1c2gsCiAJLmRldl90eGZpZm9fZmx1c2ggPSBpd2xhZ25fZGV2X3R4Zmlmb19mbHVzaCwKLQkudHRfb3BzID0gewotCQkubG93ZXJfcG93ZXJfZGV0ZWN0aW9uID0gaXdsX3R0X2lzX2xvd19wb3dlcl9zdGF0ZSwKLQkJLnR0X3Bvd2VyX21vZGUgPSBpd2xfdHRfY3VycmVudF9wb3dlcl9tb2RlLAotCQkuY3Rfa2lsbF9jaGVjayA9IGl3bF9jaGVja19mb3JfY3Rfa2lsbCwKLQl9CiB9OwogCiBzdGF0aWMgc3RydWN0IGl3bF9uaWNfb3BzIGl3bDYwNTBfbmljX29wcyA9IHsKQEAgLTQzNCwzNCArMzYxLDI2IEBACiAJLmxpYiA9ICZpd2w2MDAwX2xpYiwKIAkuaGNtZCA9ICZpd2xhZ25faGNtZCwKIAkudXRpbHMgPSAmaXdsYWduX2hjbWRfdXRpbHMsCi0JLmxlZCA9ICZpd2xhZ25fbGVkX29wcywKLQkuaWVlZTgwMjExX29wcyA9ICZpd2xhZ25faHdfb3BzLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfb3BzIGl3bDYwNTBfb3BzID0gewogCS5saWIgPSAmaXdsNjAwMF9saWIsCiAJLmhjbWQgPSAmaXdsYWduX2hjbWQsCiAJLnV0aWxzID0gJml3bGFnbl9oY21kX3V0aWxzLAotCS5sZWQgPSAmaXdsYWduX2xlZF9vcHMsCiAJLm5pYyA9ICZpd2w2MDUwX25pY19vcHMsCi0JLmllZWU4MDIxMV9vcHMgPSAmaXdsYWduX2h3X29wcywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX29wcyBpd2w2MTUwX29wcyA9IHsKIAkubGliID0gJml3bDYwMDBfbGliLAogCS5oY21kID0gJml3bGFnbl9oY21kLAogCS51dGlscyA9ICZpd2xhZ25faGNtZF91dGlscywKLQkubGVkID0gJml3bGFnbl9sZWRfb3BzLAogCS5uaWMgPSAmaXdsNjE1MF9uaWNfb3BzLAotCS5pZWVlODAyMTFfb3BzID0gJml3bGFnbl9od19vcHMsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGl3bF9vcHMgaXdsNjAzMF9vcHMgPSB7CiAJLmxpYiA9ICZpd2w2MDMwX2xpYiwKIAkuaGNtZCA9ICZpd2xhZ25fYnRfaGNtZCwKIAkudXRpbHMgPSAmaXdsYWduX2hjbWRfdXRpbHMsCi0JLmxlZCA9ICZpd2xhZ25fbGVkX29wcywKLQkuaWVlZTgwMjExX29wcyA9ICZpd2xhZ25faHdfb3BzLAogfTsKIAogc3RhdGljIHN0cnVjdCBpd2xfYmFzZV9wYXJhbXMgaXdsNjAwMF9iYXNlX3BhcmFtcyA9IHsKQEAgLTQ2OSw4ICszODgsNiBAQAogCS5udW1fb2ZfcXVldWVzID0gSVdMQUdOX05VTV9RVUVVRVMsCiAJLm51bV9vZl9hbXBkdV9xdWV1ZXMgPSBJV0xBR05fTlVNX0FNUERVX1FVRVVFUywKIAkucGxsX2NmZ192YWwgPSAwLAotCS5zZXRfbDBzID0gdHJ1ZSwKLQkudXNlX2JzbSA9IGZhbHNlLAogCS5tYXhfbGxfaXRlbXMgPSBPVFBfTUFYX0xMX0lURU1TXzZ4MDAsCiAJLnNoYWRvd19yYW1fc3VwcG9ydCA9IHRydWUsCiAJLmxlZF9jb21wZW5zYXRpb24gPSA1MSwKQEAgLTQ4MSw5ICszOTgsNiBAQAogCS5jaGFpbl9ub2lzZV9zY2FsZSA9IDEwMDAsCiAJLndkX3RpbWVvdXQgPSBJV0xfREVGX1dEX1RJTUVPVVQsCiAJLm1heF9ldmVudF9sb2dfc2l6ZSA9IDUxMiwKLQkudWNvZGVfdHJhY2luZyA9IHRydWUsCi0JLnNlbnNpdGl2aXR5X2NhbGliX2J5X2RyaXZlciA9IHRydWUsCi0JLmNoYWluX25vaXNlX2NhbGliX2J5X2RyaXZlciA9IHRydWUsCiAJLnNoYWRvd19yZWdfZW5hYmxlID0gdHJ1ZSwKIH07CiAKQEAgLTQ5Miw4ICs0MDYsNiBAQAogCS5udW1fb2ZfcXVldWVzID0gSVdMQUdOX05VTV9RVUVVRVMsCiAJLm51bV9vZl9hbXBkdV9xdWV1ZXMgPSBJV0xBR05fTlVNX0FNUERVX1FVRVVFUywKIAkucGxsX2NmZ192YWwgPSAwLAotCS5zZXRfbDBzID0gdHJ1ZSwKLQkudXNlX2JzbSA9IGZhbHNlLAogCS5tYXhfbGxfaXRlbXMgPSBPVFBfTUFYX0xMX0lURU1TXzZ4NTAsCiAJLnNoYWRvd19yYW1fc3VwcG9ydCA9IHRydWUsCiAJLmxlZF9jb21wZW5zYXRpb24gPSA1MSwKQEAgLTUwNCw5ICs0MTYsNiBAQAogCS5jaGFpbl9ub2lzZV9zY2FsZSA9IDE1MDAsCiAJLndkX3RpbWVvdXQgPSBJV0xfREVGX1dEX1RJTUVPVVQsCiAJLm1heF9ldmVudF9sb2dfc2l6ZSA9IDEwMjQsCi0JLnVjb2RlX3RyYWNpbmcgPSB0cnVlLAotCS5zZW5zaXRpdml0eV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLAotCS5jaGFpbl9ub2lzZV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLAogCS5zaGFkb3dfcmVnX2VuYWJsZSA9IHRydWUsCiB9Owogc3RhdGljIHN0cnVjdCBpd2xfYmFzZV9wYXJhbXMgaXdsNjAwMF9nMl9iYXNlX3BhcmFtcyA9IHsKQEAgLTUxNCw4ICs0MjMsNiBAQAogCS5udW1fb2ZfcXVldWVzID0gSVdMQUdOX05VTV9RVUVVRVMsCiAJLm51bV9vZl9hbXBkdV9xdWV1ZXMgPSBJV0xBR05fTlVNX0FNUERVX1FVRVVFUywKIAkucGxsX2NmZ192YWwgPSAwLAotCS5zZXRfbDBzID0gdHJ1ZSwKLQkudXNlX2JzbSA9IGZhbHNlLAogCS5tYXhfbGxfaXRlbXMgPSBPVFBfTUFYX0xMX0lURU1TXzZ4MDAsCiAJLnNoYWRvd19yYW1fc3VwcG9ydCA9IHRydWUsCiAJLmxlZF9jb21wZW5zYXRpb24gPSA1NywKQEAgLTUyNiw5ICs0MzMsNiBAQAogCS5jaGFpbl9ub2lzZV9zY2FsZSA9IDEwMDAsCiAJLndkX3RpbWVvdXQgPSBJV0xfTE9OR19XRF9USU1FT1VULAogCS5tYXhfZXZlbnRfbG9nX3NpemUgPSA1MTIsCi0JLnVjb2RlX3RyYWNpbmcgPSB0cnVlLAotCS5zZW5zaXRpdml0eV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLAotCS5jaGFpbl9ub2lzZV9jYWxpYl9ieV9kcml2ZXIgPSB0cnVlLAogCS5zaGFkb3dfcmVnX2VuYWJsZSA9IHRydWUsCiB9OwogCkBAIC01MzgsNyArNDQyLDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXdsX2J0X3BhcmFtcyBpd2w2MDAwX2J0X3BhcmFtcyA9IHsKLQkuYnRfc3RhdGlzdGljcyA9IHRydWUsCiAJLyogRHVlIHRvIGJsdWV0b290aCwgd2UgdHJhbnNtaXQgMi40IEdIeiBwcm9iZXMgb25seSBvbiBhbnRlbm5hIEEgKi8KIAkuYWR2YW5jZWRfYnRfY29leGlzdCA9IHRydWUsCiAJLmFnZ190aW1lX2xpbWl0ID0gQlRfQUdHX1RIUkVTSE9MRF9ERUYsCkBAIC01NTQsNyArNDU3LDYgQEAKIAkuZWVwcm9tX3ZlciA9IEVFUFJPTV82MDA1X0VFUFJPTV9WRVJTSU9OLAkJXAogCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzYwMDVfVFhfUE9XRVJfVkVSU0lPTiwJXAogCS5vcHMgPSAmaXdsNjAwMF9vcHMsCQkJCQlcCi0JLm1vZF9wYXJhbXMgPSAmaXdsYWduX21vZF9wYXJhbXMsCQkJXAogCS5iYXNlX3BhcmFtcyA9ICZpd2w2MDAwX2cyX2Jhc2VfcGFyYW1zLAkJCVwKIAkubmVlZF9kY19jYWxpYiA9IHRydWUsCQkJCQlcCiAJLm5lZWRfdGVtcF9vZmZzZXRfY2FsaWIgPSB0cnVlLAkJCQlcCkBAIC01ODMsNyArNDg1LDYgQEAKIAkuZWVwcm9tX3ZlciA9IEVFUFJPTV82MDMwX0VFUFJPTV9WRVJTSU9OLAkJXAogCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzYwMzBfVFhfUE9XRVJfVkVSU0lPTiwJXAogCS5vcHMgPSAmaXdsNjAzMF9vcHMsCQkJCQlcCi0JLm1vZF9wYXJhbXMgPSAmaXdsYWduX21vZF9wYXJhbXMsCQkJXAogCS5iYXNlX3BhcmFtcyA9ICZpd2w2MDAwX2cyX2Jhc2VfcGFyYW1zLAkJCVwKIAkuYnRfcGFyYW1zID0gJml3bDYwMDBfYnRfcGFyYW1zLAkJCVwKIAkubmVlZF9kY19jYWxpYiA9IHRydWUsCQkJCQlcCkBAIC02MTMsNiArNTE0LDIyIEBACiAJSVdMX0RFVklDRV82MDMwLAogfTsKIAorc3RydWN0IGl3bF9jZmcgaXdsNjAzNV8yYWduX2NmZyA9IHsKKwkubmFtZSA9ICI2MDM1IFNlcmllcyAyeDIgQUdOL0JUIiwKKwlJV0xfREVWSUNFXzYwMzAsCisJLmh0X3BhcmFtcyA9ICZpd2w2MDAwX2h0X3BhcmFtcywKK307CisKK3N0cnVjdCBpd2xfY2ZnIGl3bDYwMzVfMmFiZ19jZmcgPSB7CisJLm5hbWUgPSAiNjAzNSBTZXJpZXMgMngyIEFCRy9CVCIsCisJSVdMX0RFVklDRV82MDMwLAorfTsKKworc3RydWN0IGl3bF9jZmcgaXdsNjAzNV8yYmdfY2ZnID0geworCS5uYW1lID0gIjYwMzUgU2VyaWVzIDJ4MiBCRy9CVCIsCisJSVdMX0RFVklDRV82MDMwLAorfTsKKwogc3RydWN0IGl3bF9jZmcgaXdsMTAzMF9iZ25fY2ZnID0gewogCS5uYW1lID0gIkludGVsKFIpIENlbnRyaW5vKFIpIFdpcmVsZXNzLU4gMTAzMCBCR04iLAogCUlXTF9ERVZJQ0VfNjAzMCwKQEAgLTY0OSw3ICs1NjYsNiBAQAogCS5lZXByb21fdmVyID0gRUVQUk9NXzYwMDBfRUVQUk9NX1ZFUlNJT04sCQlcCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNjAwMF9UWF9QT1dFUl9WRVJTSU9OLAlcCiAJLm9wcyA9ICZpd2w2MDAwX29wcywJCQkJCVwKLQkubW9kX3BhcmFtcyA9ICZpd2xhZ25fbW9kX3BhcmFtcywJCQlcCiAJLmJhc2VfcGFyYW1zID0gJml3bDYwMDBfYmFzZV9wYXJhbXMsCQkJXAogCS5wYV90eXBlID0gSVdMX1BBX0lOVEVSTkFMLAkJCQlcCiAJLmxlZF9tb2RlID0gSVdMX0xFRF9CTElOSwpAQCAtNjc5LDcgKzU5NSw2IEBACiAJLm9wcyA9ICZpd2w2MDUwX29wcywJCQkJCVwKIAkuZWVwcm9tX3ZlciA9IEVFUFJPTV82MDUwX0VFUFJPTV9WRVJTSU9OLAkJXAogCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzYwNTBfVFhfUE9XRVJfVkVSU0lPTiwJXAotCS5tb2RfcGFyYW1zID0gJml3bGFnbl9tb2RfcGFyYW1zLAkJCVwKIAkuYmFzZV9wYXJhbXMgPSAmaXdsNjA1MF9iYXNlX3BhcmFtcywJCQlcCiAJLm5lZWRfZGNfY2FsaWIgPSB0cnVlLAkJCQkJXAogCS5sZWRfbW9kZSA9IElXTF9MRURfQkxJTkssCQkJCVwKQEAgLTcwNCw3ICs2MTksNiBAQAogCS5lZXByb21fdmVyID0gRUVQUk9NXzYxNTBfRUVQUk9NX1ZFUlNJT04sCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNjE1MF9UWF9QT1dFUl9WRVJTSU9OLAogCS5vcHMgPSAmaXdsNjE1MF9vcHMsCi0JLm1vZF9wYXJhbXMgPSAmaXdsYWduX21vZF9wYXJhbXMsCiAJLmJhc2VfcGFyYW1zID0gJml3bDYwNTBfYmFzZV9wYXJhbXMsCiAJLmh0X3BhcmFtcyA9ICZpd2w2MDAwX2h0X3BhcmFtcywKIAkubmVlZF9kY19jYWxpYiA9IHRydWUsCkBAIC03MjAsNyArNjM0LDYgQEAKIAkuZWVwcm9tX3ZlciA9IEVFUFJPTV82MDAwX0VFUFJPTV9WRVJTSU9OLAogCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzYwMDBfVFhfUE9XRVJfVkVSU0lPTiwKIAkub3BzID0gJml3bDYwMDBfb3BzLAotCS5tb2RfcGFyYW1zID0gJml3bGFnbl9tb2RfcGFyYW1zLAogCS5iYXNlX3BhcmFtcyA9ICZpd2w2MDAwX2Jhc2VfcGFyYW1zLAogCS5odF9wYXJhbXMgPSAmaXdsNjAwMF9odF9wYXJhbXMsCiAJLm5lZWRfZGNfY2FsaWIgPSB0cnVlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWNhbGliLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tY2FsaWIuYwppbmRleCA5MDA2MjkzLi4wZjZiYjliIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tY2FsaWIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tY2FsaWIuYwpAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTYwNSw3ICs2MDUsNyBAQAogCUlXTF9ERUJVR19DQUxJQihwcml2LCAiPDxyZXR1cm4gMHglWFxuIiwgcmV0KTsKIH0KIAotdm9pZCBpd2xfc2Vuc2l0aXZpdHlfY2FsaWJyYXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCB2b2lkICpyZXNwKQordm9pZCBpd2xfc2Vuc2l0aXZpdHlfY2FsaWJyYXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXUzMiByeF9lbmFibGVfdGltZTsKIAl1MzIgZmFfY2NrOwpAQCAtNjMxLDE2ICs2MzEsOSBAQAogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaWYgKGl3bF9idF9zdGF0aXN0aWNzKHByaXYpKSB7Ci0JCXJ4X2luZm8gPSAmKCgoc3RydWN0IGl3bF9idF9ub3RpZl9zdGF0aXN0aWNzICopcmVzcCktPgotCQkJICAgICAgcnguZ2VuZXJhbC5jb21tb24pOwotCQlvZmRtID0gJigoKHN0cnVjdCBpd2xfYnRfbm90aWZfc3RhdGlzdGljcyAqKXJlc3ApLT5yeC5vZmRtKTsKLQkJY2NrID0gJigoKHN0cnVjdCBpd2xfYnRfbm90aWZfc3RhdGlzdGljcyAqKXJlc3ApLT5yeC5jY2spOwotCX0gZWxzZSB7Ci0JCXJ4X2luZm8gPSAmKCgoc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzICopcmVzcCktPnJ4LmdlbmVyYWwpOwotCQlvZmRtID0gJigoKHN0cnVjdCBpd2xfbm90aWZfc3RhdGlzdGljcyAqKXJlc3ApLT5yeC5vZmRtKTsKLQkJY2NrID0gJigoKHN0cnVjdCBpd2xfbm90aWZfc3RhdGlzdGljcyAqKXJlc3ApLT5yeC5jY2spOwotCX0KKwlyeF9pbmZvID0gJnByaXYtPnN0YXRpc3RpY3Mucnhfbm9uX3BoeTsKKwlvZmRtID0gJnByaXYtPnN0YXRpc3RpY3Mucnhfb2ZkbTsKKwljY2sgPSAmcHJpdi0+c3RhdGlzdGljcy5yeF9jY2s7CiAJaWYgKHJ4X2luZm8tPmludGVyZmVyZW5jZV9kYXRhX2ZsYWcgIT0gSU5URVJGRVJFTkNFX0RBVEFfQVZBSUxBQkxFKSB7CiAJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiPDwgaW52YWxpZCBkYXRhLlxuIik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTg1MSw3ICs4NDQsNyBAQAogICogMSkgIFdoaWNoIGFudGVubmFzIGFyZSBjb25uZWN0ZWQuCiAgKiAyKSAgRGlmZmVyZW50aWFsIHJ4IGdhaW4gc2V0dGluZ3MgdG8gYmFsYW5jZSB0aGUgMyByZWNlaXZlcnMuCiAgKi8KLXZvaWQgaXdsX2NoYWluX25vaXNlX2NhbGlicmF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdm9pZCAqc3RhdF9yZXNwKQordm9pZCBpd2xfY2hhaW5fbm9pc2VfY2FsaWJyYXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXN0cnVjdCBpd2xfY2hhaW5fbm9pc2VfZGF0YSAqZGF0YSA9IE5VTEw7CiAKQEAgLTg5NiwxMyArODg5LDkgQEAKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWlmIChpd2xfYnRfc3RhdGlzdGljcyhwcml2KSkgewotCQlyeF9pbmZvID0gJigoKHN0cnVjdCBpd2xfYnRfbm90aWZfc3RhdGlzdGljcyAqKXN0YXRfcmVzcCktPgotCQkJICAgICAgcnguZ2VuZXJhbC5jb21tb24pOwotCX0gZWxzZSB7Ci0JCXJ4X2luZm8gPSAmKCgoc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzICopc3RhdF9yZXNwKS0+Ci0JCQkgICAgICByeC5nZW5lcmFsKTsKLQl9CisKKwlyeF9pbmZvID0gJnByaXYtPnN0YXRpc3RpY3Mucnhfbm9uX3BoeTsKKwogCWlmIChyeF9pbmZvLT5pbnRlcmZlcmVuY2VfZGF0YV9mbGFnICE9IElOVEVSRkVSRU5DRV9EQVRBX0FWQUlMQUJMRSkgewogCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIiA8PCBJbnRlcmZlcmVuY2UgZGF0YSB1bmF2YWlsYWJsZVxuIik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTkxMSwxOSArOTAwLDkgQEAKIAogCXJ4b25fYmFuZDI0ID0gISEoY3R4LT5zdGFnaW5nLmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKTsKIAlyeG9uX2NobnVtID0gbGUxNl90b19jcHUoY3R4LT5zdGFnaW5nLmNoYW5uZWwpOwotCWlmIChpd2xfYnRfc3RhdGlzdGljcyhwcml2KSkgewotCQlzdGF0X2JhbmQyNCA9ICEhKCgoc3RydWN0IGl3bF9idF9ub3RpZl9zdGF0aXN0aWNzICopCi0JCQkJIHN0YXRfcmVzcCktPmZsYWcgJgotCQkJCSBTVEFUSVNUSUNTX1JFUExZX0ZMR19CQU5EXzI0R19NU0spOwotCQlzdGF0X2NobnVtID0gbGUzMl90b19jcHUoKChzdHJ1Y3QgaXdsX2J0X25vdGlmX3N0YXRpc3RpY3MgKikKLQkJCQkJIHN0YXRfcmVzcCktPmZsYWcpID4+IDE2OwotCX0gZWxzZSB7Ci0JCXN0YXRfYmFuZDI0ID0gISEoKChzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3MgKikKLQkJCQkgc3RhdF9yZXNwKS0+ZmxhZyAmCi0JCQkJIFNUQVRJU1RJQ1NfUkVQTFlfRkxHX0JBTkRfMjRHX01TSyk7Ci0JCXN0YXRfY2hudW0gPSBsZTMyX3RvX2NwdSgoKHN0cnVjdCBpd2xfbm90aWZfc3RhdGlzdGljcyAqKQotCQkJCQkgc3RhdF9yZXNwKS0+ZmxhZykgPj4gMTY7Ci0JfQorCXN0YXRfYmFuZDI0ID0KKwkJISEocHJpdi0+c3RhdGlzdGljcy5mbGFnICYgU1RBVElTVElDU19SRVBMWV9GTEdfQkFORF8yNEdfTVNLKTsKKwlzdGF0X2NobnVtID0gbGUzMl90b19jcHUocHJpdi0+c3RhdGlzdGljcy5mbGFnKSA+PiAxNjsKIAogCS8qIE1ha2Ugc3VyZSB3ZSBhY2N1bXVsYXRlIGRhdGEgZm9yIGp1c3QgdGhlIGFzc29jaWF0ZWQgY2hhbm5lbAogCSAqICAgKGV2ZW4gaWYgc2Nhbm5pbmcpLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWNhbGliLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tY2FsaWIuaAppbmRleCBlMzdhZTcyNi4uNGVmNGRkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWNhbGliLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWNhbGliLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02Niw4ICs2Niw4IEBACiAjaW5jbHVkZSAiaXdsLWNvcmUuaCIKICNpbmNsdWRlICJpd2wtY29tbWFuZHMuaCIKIAotdm9pZCBpd2xfY2hhaW5fbm9pc2VfY2FsaWJyYXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCB2b2lkICpzdGF0X3Jlc3ApOwotdm9pZCBpd2xfc2Vuc2l0aXZpdHlfY2FsaWJyYXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCB2b2lkICpyZXNwKTsKK3ZvaWQgaXdsX2NoYWluX25vaXNlX2NhbGlicmF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bF9zZW5zaXRpdml0eV9jYWxpYnJhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCiB2b2lkIGl3bF9pbml0X3NlbnNpdGl2aXR5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB2b2lkIGl3bF9yZXNldF9ydW5fdGltZV9jYWxpYihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWRlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1kZWJ1Z2ZzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1MDBhYWEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWRlYnVnZnMuYworKysgL2Rldi9udWxsCkBAIC0xLDEwNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKgotKiBHUEwgTElDRU5TRSBTVU1NQVJZCi0qCi0qIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0qCi0qIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0qIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsCi0qIFVTQQotKgotKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgotKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS5HUEwuCi0qCi0qIENvbnRhY3QgSW5mb3JtYXRpb246Ci0qICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KLSogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NwotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaW5jbHVkZSAiaXdsLWFnbi5oIgotI2luY2x1ZGUgIml3bC1hZ24tZGVidWdmcy5oIgotCi1zdGF0aWMgY29uc3QgY2hhciAqZm10X3ZhbHVlID0gIiAgJS0zMHMgJTEwdVxuIjsKLXN0YXRpYyBjb25zdCBjaGFyICpmbXRfaGV4ICAgPSAiICAlLTMwcyAgICAgICAweCUwMlhcbiI7Ci1zdGF0aWMgY29uc3QgY2hhciAqZm10X3RhYmxlID0gIiAgJS0zMHMgJTEwdSAgJTEwdSAgJTEwdSAgJTEwdVxuIjsKLXN0YXRpYyBjb25zdCBjaGFyICpmbXRfaGVhZGVyID0KLQkiJS0zMnMgICAgY3VycmVudCAgY3VtdWxhdGl2ZSAgICAgICBkZWx0YSAgICAgICAgIG1heFxuIjsKLQotc3RhdGljIGludCBpd2xfc3RhdGlzdGljc19mbGFnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY2hhciAqYnVmLCBpbnQgYnVmc3opCi17Ci0JaW50IHAgPSAwOwotCXUzMiBmbGFnOwotCi0JaWYgKGl3bF9idF9zdGF0aXN0aWNzKHByaXYpKQotCQlmbGFnID0gbGUzMl90b19jcHUocHJpdi0+X2Fnbi5zdGF0aXN0aWNzX2J0LmZsYWcpOwotCWVsc2UKLQkJZmxhZyA9IGxlMzJfdG9fY3B1KHByaXYtPl9hZ24uc3RhdGlzdGljcy5mbGFnKTsKLQotCXAgKz0gc2NucHJpbnRmKGJ1ZiArIHAsIGJ1ZnN6IC0gcCwgIlN0YXRpc3RpY3MgRmxhZygweCVYKTpcbiIsIGZsYWcpOwotCWlmIChmbGFnICYgVUNPREVfU1RBVElTVElDU19DTEVBUl9NU0spCi0JCXAgKz0gc2NucHJpbnRmKGJ1ZiArIHAsIGJ1ZnN6IC0gcCwKLQkJIlx0U3RhdGlzdGljcyBoYXZlIGJlZW4gY2xlYXJlZFxuIik7Ci0JcCArPSBzY25wcmludGYoYnVmICsgcCwgYnVmc3ogLSBwLCAiXHRPcGVyYXRpb25hbCBGcmVxdWVuY3k6ICVzXG4iLAotCQkoZmxhZyAmIFVDT0RFX1NUQVRJU1RJQ1NfRlJFUVVFTkNZX01TSykKLQkJPyAiMi40IEdIeiIgOiAiNS4yIEdIeiIpOwotCXAgKz0gc2NucHJpbnRmKGJ1ZiArIHAsIGJ1ZnN6IC0gcCwgIlx0VEdqIE5hcnJvdyBCYW5kOiAlc1xuIiwKLQkJKGZsYWcgJiBVQ09ERV9TVEFUSVNUSUNTX05BUlJPV19CQU5EX01TSykKLQkJID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7Ci0KLQlyZXR1cm4gcDsKLX0KLQotc3NpemVfdCBpd2xfdWNvZGVfcnhfc3RhdHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAotCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotICB7Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWludCBwb3MgPSAwOwotCWNoYXIgKmJ1ZjsKLQlpbnQgYnVmc3ogPSBzaXplb2Yoc3RydWN0IHN0YXRpc3RpY3NfcnhfcGh5KSAqIDQwICsKLQkJICAgIHNpemVvZihzdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5KSAqIDQwICsKLQkJICAgIHNpemVvZihzdHJ1Y3Qgc3RhdGlzdGljc19yeF9odF9waHkpICogNDAgKyA0MDA7Ci0Jc3NpemVfdCByZXQ7Ci0Jc3RydWN0IHN0YXRpc3RpY3NfcnhfcGh5ICpvZmRtLCAqYWNjdW1fb2ZkbSwgKmRlbHRhX29mZG0sICptYXhfb2ZkbTsKLQlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkgKmNjaywgKmFjY3VtX2NjaywgKmRlbHRhX2NjaywgKm1heF9jY2s7Ci0Jc3RydWN0IHN0YXRpc3RpY3Nfcnhfbm9uX3BoeSAqZ2VuZXJhbCwgKmFjY3VtX2dlbmVyYWw7Ci0Jc3RydWN0IHN0YXRpc3RpY3Nfcnhfbm9uX3BoeSAqZGVsdGFfZ2VuZXJhbCwgKm1heF9nZW5lcmFsOwotCXN0cnVjdCBzdGF0aXN0aWNzX3J4X2h0X3BoeSAqaHQsICphY2N1bV9odCwgKmRlbHRhX2h0LCAqbWF4X2h0OwotCi0JaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCi0JCXJldHVybiAtRUFHQUlOOwotCi0JYnVmID0ga3phbGxvYyhidWZzeiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpIHsKLQkJSVdMX0VSUihwcml2LCAiQ2FuIG5vdCBhbGxvY2F0ZSBCdWZmZXJcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQkvKgotCSAqIHRoZSBzdGF0aXN0aWMgaW5mb3JtYXRpb24gZGlzcGxheSBoZXJlIGlzIGJhc2VkIG9uCi0JICogdGhlIGxhc3Qgc3RhdGlzdGljcyBub3RpZmljYXRpb24gZnJvbSB1Q29kZQotCSAqIG1pZ2h0IG5vdCByZWZsZWN0IHRoZSBjdXJyZW50IHVDb2RlIGFjdGl2aXR5Ci0JICovCi0JaWYgKGl3bF9idF9zdGF0aXN0aWNzKHByaXYpKSB7Ci0JCW9mZG0gPSAmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzX2J0LnJ4Lm9mZG07Ci0JCWNjayA9ICZwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQucnguY2NrOwotCQlnZW5lcmFsID0gJnByaXYtPl9hZ24uc3RhdGlzdGljc19idC5yeC5nZW5lcmFsLmNvbW1vbjsKLQkJaHQgPSAmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzX2J0LnJ4Lm9mZG1faHQ7Ci0JCWFjY3VtX29mZG0gPSAmcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzX2J0LnJ4Lm9mZG07Ci0JCWFjY3VtX2NjayA9ICZwcml2LT5fYWduLmFjY3VtX3N0YXRpc3RpY3NfYnQucnguY2NrOwotCQlhY2N1bV9nZW5lcmFsID0KLQkJCSZwcml2LT5fYWduLmFjY3VtX3N0YXRpc3RpY3NfYnQucnguZ2VuZXJhbC5jb21tb247Ci0JCWFjY3VtX2h0ID0gJnByaXYtPl9hZ24uYWNjdW1fc3RhdGlzdGljc19idC5yeC5vZmRtX2h0OwotCQlkZWx0YV9vZmRtID0gJnByaXYtPl9hZ24uZGVsdGFfc3RhdGlzdGljc19idC5yeC5vZmRtOwotCQlkZWx0YV9jY2sgPSAmcHJpdi0+X2Fnbi5kZWx0YV9zdGF0aXN0aWNzX2J0LnJ4LmNjazsKLQkJZGVsdGFfZ2VuZXJhbCA9Ci0JCQkmcHJpdi0+X2Fnbi5kZWx0YV9zdGF0aXN0aWNzX2J0LnJ4LmdlbmVyYWwuY29tbW9uOwotCQlkZWx0YV9odCA9ICZwcml2LT5fYWduLmRlbHRhX3N0YXRpc3RpY3NfYnQucngub2ZkbV9odDsKLQkJbWF4X29mZG0gPSAmcHJpdi0+X2Fnbi5tYXhfZGVsdGFfYnQucngub2ZkbTsKLQkJbWF4X2NjayA9ICZwcml2LT5fYWduLm1heF9kZWx0YV9idC5yeC5jY2s7Ci0JCW1heF9nZW5lcmFsID0gJnByaXYtPl9hZ24ubWF4X2RlbHRhX2J0LnJ4LmdlbmVyYWwuY29tbW9uOwotCQltYXhfaHQgPSAmcHJpdi0+X2Fnbi5tYXhfZGVsdGFfYnQucngub2ZkbV9odDsKLQl9IGVsc2UgewotCQlvZmRtID0gJnByaXYtPl9hZ24uc3RhdGlzdGljcy5yeC5vZmRtOwotCQljY2sgPSAmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzLnJ4LmNjazsKLQkJZ2VuZXJhbCA9ICZwcml2LT5fYWduLnN0YXRpc3RpY3MucnguZ2VuZXJhbDsKLQkJaHQgPSAmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzLnJ4Lm9mZG1faHQ7Ci0JCWFjY3VtX29mZG0gPSAmcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzLnJ4Lm9mZG07Ci0JCWFjY3VtX2NjayA9ICZwcml2LT5fYWduLmFjY3VtX3N0YXRpc3RpY3MucnguY2NrOwotCQlhY2N1bV9nZW5lcmFsID0gJnByaXYtPl9hZ24uYWNjdW1fc3RhdGlzdGljcy5yeC5nZW5lcmFsOwotCQlhY2N1bV9odCA9ICZwcml2LT5fYWduLmFjY3VtX3N0YXRpc3RpY3Mucngub2ZkbV9odDsKLQkJZGVsdGFfb2ZkbSA9ICZwcml2LT5fYWduLmRlbHRhX3N0YXRpc3RpY3Mucngub2ZkbTsKLQkJZGVsdGFfY2NrID0gJnByaXYtPl9hZ24uZGVsdGFfc3RhdGlzdGljcy5yeC5jY2s7Ci0JCWRlbHRhX2dlbmVyYWwgPSAmcHJpdi0+X2Fnbi5kZWx0YV9zdGF0aXN0aWNzLnJ4LmdlbmVyYWw7Ci0JCWRlbHRhX2h0ID0gJnByaXYtPl9hZ24uZGVsdGFfc3RhdGlzdGljcy5yeC5vZmRtX2h0OwotCQltYXhfb2ZkbSA9ICZwcml2LT5fYWduLm1heF9kZWx0YS5yeC5vZmRtOwotCQltYXhfY2NrID0gJnByaXYtPl9hZ24ubWF4X2RlbHRhLnJ4LmNjazsKLQkJbWF4X2dlbmVyYWwgPSAmcHJpdi0+X2Fnbi5tYXhfZGVsdGEucnguZ2VuZXJhbDsKLQkJbWF4X2h0ID0gJnByaXYtPl9hZ24ubWF4X2RlbHRhLnJ4Lm9mZG1faHQ7Ci0JfQotCi0JcG9zICs9IGl3bF9zdGF0aXN0aWNzX2ZsYWcocHJpdiwgYnVmLCBidWZzeik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF9oZWFkZXIsICJTdGF0aXN0aWNzX1J4IC0gT0ZETToiKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiaW5hX2NudDoiLAotCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmluYV9jbnQpLAotCQkJIGFjY3VtX29mZG0tPmluYV9jbnQsCi0JCQkgZGVsdGFfb2ZkbS0+aW5hX2NudCwgbWF4X29mZG0tPmluYV9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJmaW5hX2NudDoiLAotCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmZpbmFfY250KSwgYWNjdW1fb2ZkbS0+ZmluYV9jbnQsCi0JCQkgZGVsdGFfb2ZkbS0+ZmluYV9jbnQsIG1heF9vZmRtLT5maW5hX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgInBsY3BfZXJyOiIsCi0JCQkgbGUzMl90b19jcHUob2ZkbS0+cGxjcF9lcnIpLCBhY2N1bV9vZmRtLT5wbGNwX2VyciwKLQkJCSBkZWx0YV9vZmRtLT5wbGNwX2VyciwgbWF4X29mZG0tPnBsY3BfZXJyKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiY3JjMzJfZXJyOiIsCi0JCQkgbGUzMl90b19jcHUob2ZkbS0+Y3JjMzJfZXJyKSwgYWNjdW1fb2ZkbS0+Y3JjMzJfZXJyLAotCQkJIGRlbHRhX29mZG0tPmNyYzMyX2VyciwgbWF4X29mZG0tPmNyYzMyX2Vycik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgIm92ZXJydW5fZXJyOiIsCi0JCQkgbGUzMl90b19jcHUob2ZkbS0+b3ZlcnJ1bl9lcnIpLAotCQkJIGFjY3VtX29mZG0tPm92ZXJydW5fZXJyLCBkZWx0YV9vZmRtLT5vdmVycnVuX2VyciwKLQkJCSBtYXhfb2ZkbS0+b3ZlcnJ1bl9lcnIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJlYXJseV9vdmVycnVuX2VycjoiLAotCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmVhcmx5X292ZXJydW5fZXJyKSwKLQkJCSBhY2N1bV9vZmRtLT5lYXJseV9vdmVycnVuX2VyciwKLQkJCSBkZWx0YV9vZmRtLT5lYXJseV9vdmVycnVuX2VyciwKLQkJCSBtYXhfb2ZkbS0+ZWFybHlfb3ZlcnJ1bl9lcnIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJjcmMzMl9nb29kOiIsCi0JCQkgbGUzMl90b19jcHUob2ZkbS0+Y3JjMzJfZ29vZCksCi0JCQkgYWNjdW1fb2ZkbS0+Y3JjMzJfZ29vZCwgZGVsdGFfb2ZkbS0+Y3JjMzJfZ29vZCwKLQkJCSBtYXhfb2ZkbS0+Y3JjMzJfZ29vZCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImZhbHNlX2FsYXJtX2NudDoiLAotCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmZhbHNlX2FsYXJtX2NudCksCi0JCQkgYWNjdW1fb2ZkbS0+ZmFsc2VfYWxhcm1fY250LAotCQkJIGRlbHRhX29mZG0tPmZhbHNlX2FsYXJtX2NudCwKLQkJCSBtYXhfb2ZkbS0+ZmFsc2VfYWxhcm1fY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiZmluYV9zeW5jX2Vycl9jbnQ6IiwKLQkJCSBsZTMyX3RvX2NwdShvZmRtLT5maW5hX3N5bmNfZXJyX2NudCksCi0JCQkgYWNjdW1fb2ZkbS0+ZmluYV9zeW5jX2Vycl9jbnQsCi0JCQkgZGVsdGFfb2ZkbS0+ZmluYV9zeW5jX2Vycl9jbnQsCi0JCQkgbWF4X29mZG0tPmZpbmFfc3luY19lcnJfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAic2ZkX3RpbWVvdXQ6IiwKLQkJCSBsZTMyX3RvX2NwdShvZmRtLT5zZmRfdGltZW91dCksCi0JCQkgYWNjdW1fb2ZkbS0+c2ZkX3RpbWVvdXQsIGRlbHRhX29mZG0tPnNmZF90aW1lb3V0LAotCQkJIG1heF9vZmRtLT5zZmRfdGltZW91dCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImZpbmFfdGltZW91dDoiLAotCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmZpbmFfdGltZW91dCksCi0JCQkgYWNjdW1fb2ZkbS0+ZmluYV90aW1lb3V0LCBkZWx0YV9vZmRtLT5maW5hX3RpbWVvdXQsCi0JCQkgbWF4X29mZG0tPmZpbmFfdGltZW91dCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgInVucmVzcG9uZGVkX3J0czoiLAotCQkJIGxlMzJfdG9fY3B1KG9mZG0tPnVucmVzcG9uZGVkX3J0cyksCi0JCQkgYWNjdW1fb2ZkbS0+dW5yZXNwb25kZWRfcnRzLAotCQkJIGRlbHRhX29mZG0tPnVucmVzcG9uZGVkX3J0cywKLQkJCSBtYXhfb2ZkbS0+dW5yZXNwb25kZWRfcnRzKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAicnhlX2ZyYW1lX2xtdF9vdnJ1bjoiLAotCQkJIGxlMzJfdG9fY3B1KG9mZG0tPnJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuKSwKLQkJCSBhY2N1bV9vZmRtLT5yeGVfZnJhbWVfbGltaXRfb3ZlcnJ1biwKLQkJCSBkZWx0YV9vZmRtLT5yeGVfZnJhbWVfbGltaXRfb3ZlcnJ1biwKLQkJCSBtYXhfb2ZkbS0+cnhlX2ZyYW1lX2xpbWl0X292ZXJydW4pOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJzZW50X2Fja19jbnQ6IiwKLQkJCSBsZTMyX3RvX2NwdShvZmRtLT5zZW50X2Fja19jbnQpLAotCQkJIGFjY3VtX29mZG0tPnNlbnRfYWNrX2NudCwgZGVsdGFfb2ZkbS0+c2VudF9hY2tfY250LAotCQkJIG1heF9vZmRtLT5zZW50X2Fja19jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJzZW50X2N0c19jbnQ6IiwKLQkJCSBsZTMyX3RvX2NwdShvZmRtLT5zZW50X2N0c19jbnQpLAotCQkJIGFjY3VtX29mZG0tPnNlbnRfY3RzX2NudCwgZGVsdGFfb2ZkbS0+c2VudF9jdHNfY250LAotCQkJIG1heF9vZmRtLT5zZW50X2N0c19jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJzZW50X2JhX3JzcF9jbnQ6IiwKLQkJCSBsZTMyX3RvX2NwdShvZmRtLT5zZW50X2JhX3JzcF9jbnQpLAotCQkJIGFjY3VtX29mZG0tPnNlbnRfYmFfcnNwX2NudCwKLQkJCSBkZWx0YV9vZmRtLT5zZW50X2JhX3JzcF9jbnQsCi0JCQkgbWF4X29mZG0tPnNlbnRfYmFfcnNwX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImRzcF9zZWxmX2tpbGw6IiwKLQkJCSBsZTMyX3RvX2NwdShvZmRtLT5kc3Bfc2VsZl9raWxsKSwKLQkJCSBhY2N1bV9vZmRtLT5kc3Bfc2VsZl9raWxsLAotCQkJIGRlbHRhX29mZG0tPmRzcF9zZWxmX2tpbGwsCi0JCQkgbWF4X29mZG0tPmRzcF9zZWxmX2tpbGwpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJtaF9mb3JtYXRfZXJyOiIsCi0JCQkgbGUzMl90b19jcHUob2ZkbS0+bWhfZm9ybWF0X2VyciksCi0JCQkgYWNjdW1fb2ZkbS0+bWhfZm9ybWF0X2VyciwKLQkJCSBkZWx0YV9vZmRtLT5taF9mb3JtYXRfZXJyLAotCQkJIG1heF9vZmRtLT5taF9mb3JtYXRfZXJyKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAicmVfYWNxX21haW5fcnNzaV9zdW06IiwKLQkJCSBsZTMyX3RvX2NwdShvZmRtLT5yZV9hY3FfbWFpbl9yc3NpX3N1bSksCi0JCQkgYWNjdW1fb2ZkbS0+cmVfYWNxX21haW5fcnNzaV9zdW0sCi0JCQkgZGVsdGFfb2ZkbS0+cmVfYWNxX21haW5fcnNzaV9zdW0sCi0JCQkgbWF4X29mZG0tPnJlX2FjcV9tYWluX3Jzc2lfc3VtKTsKLQotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfaGVhZGVyLCAiU3RhdGlzdGljc19SeCAtIENDSzoiKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiaW5hX2NudDoiLAotCQkJIGxlMzJfdG9fY3B1KGNjay0+aW5hX2NudCksIGFjY3VtX2Njay0+aW5hX2NudCwKLQkJCSBkZWx0YV9jY2stPmluYV9jbnQsIG1heF9jY2stPmluYV9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJmaW5hX2NudDoiLAotCQkJIGxlMzJfdG9fY3B1KGNjay0+ZmluYV9jbnQpLCBhY2N1bV9jY2stPmZpbmFfY250LAotCQkJIGRlbHRhX2Njay0+ZmluYV9jbnQsIG1heF9jY2stPmZpbmFfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAicGxjcF9lcnI6IiwKLQkJCSBsZTMyX3RvX2NwdShjY2stPnBsY3BfZXJyKSwgYWNjdW1fY2NrLT5wbGNwX2VyciwKLQkJCSBkZWx0YV9jY2stPnBsY3BfZXJyLCBtYXhfY2NrLT5wbGNwX2Vycik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImNyYzMyX2VycjoiLAotCQkJIGxlMzJfdG9fY3B1KGNjay0+Y3JjMzJfZXJyKSwgYWNjdW1fY2NrLT5jcmMzMl9lcnIsCi0JCQkgZGVsdGFfY2NrLT5jcmMzMl9lcnIsIG1heF9jY2stPmNyYzMyX2Vycik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgIm92ZXJydW5fZXJyOiIsCi0JCQkgbGUzMl90b19jcHUoY2NrLT5vdmVycnVuX2VyciksCi0JCQkgYWNjdW1fY2NrLT5vdmVycnVuX2VyciwgZGVsdGFfY2NrLT5vdmVycnVuX2VyciwKLQkJCSBtYXhfY2NrLT5vdmVycnVuX2Vycik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImVhcmx5X292ZXJydW5fZXJyOiIsCi0JCQkgbGUzMl90b19jcHUoY2NrLT5lYXJseV9vdmVycnVuX2VyciksCi0JCQkgYWNjdW1fY2NrLT5lYXJseV9vdmVycnVuX2VyciwKLQkJCSBkZWx0YV9jY2stPmVhcmx5X292ZXJydW5fZXJyLAotCQkJIG1heF9jY2stPmVhcmx5X292ZXJydW5fZXJyKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiY3JjMzJfZ29vZDoiLAotCQkJIGxlMzJfdG9fY3B1KGNjay0+Y3JjMzJfZ29vZCksIGFjY3VtX2Njay0+Y3JjMzJfZ29vZCwKLQkJCSBkZWx0YV9jY2stPmNyYzMyX2dvb2QsIG1heF9jY2stPmNyYzMyX2dvb2QpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJmYWxzZV9hbGFybV9jbnQ6IiwKLQkJCSBsZTMyX3RvX2NwdShjY2stPmZhbHNlX2FsYXJtX2NudCksCi0JCQkgYWNjdW1fY2NrLT5mYWxzZV9hbGFybV9jbnQsCi0JCQkgZGVsdGFfY2NrLT5mYWxzZV9hbGFybV9jbnQsIG1heF9jY2stPmZhbHNlX2FsYXJtX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImZpbmFfc3luY19lcnJfY250OiIsCi0JCQkgbGUzMl90b19jcHUoY2NrLT5maW5hX3N5bmNfZXJyX2NudCksCi0JCQkgYWNjdW1fY2NrLT5maW5hX3N5bmNfZXJyX2NudCwKLQkJCSBkZWx0YV9jY2stPmZpbmFfc3luY19lcnJfY250LAotCQkJIG1heF9jY2stPmZpbmFfc3luY19lcnJfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAic2ZkX3RpbWVvdXQ6IiwKLQkJCSBsZTMyX3RvX2NwdShjY2stPnNmZF90aW1lb3V0KSwKLQkJCSBhY2N1bV9jY2stPnNmZF90aW1lb3V0LCBkZWx0YV9jY2stPnNmZF90aW1lb3V0LAotCQkJIG1heF9jY2stPnNmZF90aW1lb3V0KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiZmluYV90aW1lb3V0OiIsCi0JCQkgbGUzMl90b19jcHUoY2NrLT5maW5hX3RpbWVvdXQpLAotCQkJIGFjY3VtX2Njay0+ZmluYV90aW1lb3V0LCBkZWx0YV9jY2stPmZpbmFfdGltZW91dCwKLQkJCSBtYXhfY2NrLT5maW5hX3RpbWVvdXQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJ1bnJlc3BvbmRlZF9ydHM6IiwKLQkJCSBsZTMyX3RvX2NwdShjY2stPnVucmVzcG9uZGVkX3J0cyksCi0JCQkgYWNjdW1fY2NrLT51bnJlc3BvbmRlZF9ydHMsIGRlbHRhX2Njay0+dW5yZXNwb25kZWRfcnRzLAotCQkJIG1heF9jY2stPnVucmVzcG9uZGVkX3J0cyk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgInJ4ZV9mcmFtZV9sbXRfb3ZydW46IiwKLQkJCSBsZTMyX3RvX2NwdShjY2stPnJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuKSwKLQkJCSBhY2N1bV9jY2stPnJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuLAotCQkJIGRlbHRhX2Njay0+cnhlX2ZyYW1lX2xpbWl0X292ZXJydW4sCi0JCQkgbWF4X2Njay0+cnhlX2ZyYW1lX2xpbWl0X292ZXJydW4pOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJzZW50X2Fja19jbnQ6IiwKLQkJCSBsZTMyX3RvX2NwdShjY2stPnNlbnRfYWNrX2NudCksCi0JCQkgYWNjdW1fY2NrLT5zZW50X2Fja19jbnQsIGRlbHRhX2Njay0+c2VudF9hY2tfY250LAotCQkJIG1heF9jY2stPnNlbnRfYWNrX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgInNlbnRfY3RzX2NudDoiLAotCQkJIGxlMzJfdG9fY3B1KGNjay0+c2VudF9jdHNfY250KSwKLQkJCSBhY2N1bV9jY2stPnNlbnRfY3RzX2NudCwgZGVsdGFfY2NrLT5zZW50X2N0c19jbnQsCi0JCQkgbWF4X2Njay0+c2VudF9jdHNfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAic2VudF9iYV9yc3BfY250OiIsCi0JCQkgbGUzMl90b19jcHUoY2NrLT5zZW50X2JhX3JzcF9jbnQpLAotCQkJIGFjY3VtX2Njay0+c2VudF9iYV9yc3BfY250LAotCQkJIGRlbHRhX2Njay0+c2VudF9iYV9yc3BfY250LAotCQkJIG1heF9jY2stPnNlbnRfYmFfcnNwX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImRzcF9zZWxmX2tpbGw6IiwKLQkJCSBsZTMyX3RvX2NwdShjY2stPmRzcF9zZWxmX2tpbGwpLAotCQkJIGFjY3VtX2Njay0+ZHNwX3NlbGZfa2lsbCwgZGVsdGFfY2NrLT5kc3Bfc2VsZl9raWxsLAotCQkJIG1heF9jY2stPmRzcF9zZWxmX2tpbGwpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJtaF9mb3JtYXRfZXJyOiIsCi0JCQkgbGUzMl90b19jcHUoY2NrLT5taF9mb3JtYXRfZXJyKSwKLQkJCSBhY2N1bV9jY2stPm1oX2Zvcm1hdF9lcnIsIGRlbHRhX2Njay0+bWhfZm9ybWF0X2VyciwKLQkJCSBtYXhfY2NrLT5taF9mb3JtYXRfZXJyKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAicmVfYWNxX21haW5fcnNzaV9zdW06IiwKLQkJCSBsZTMyX3RvX2NwdShjY2stPnJlX2FjcV9tYWluX3Jzc2lfc3VtKSwKLQkJCSBhY2N1bV9jY2stPnJlX2FjcV9tYWluX3Jzc2lfc3VtLAotCQkJIGRlbHRhX2Njay0+cmVfYWNxX21haW5fcnNzaV9zdW0sCi0JCQkgbWF4X2Njay0+cmVfYWNxX21haW5fcnNzaV9zdW0pOwotCi0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF9oZWFkZXIsICJTdGF0aXN0aWNzX1J4IC0gR0VORVJBTDoiKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiYm9ndXNfY3RzOiIsCi0JCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+Ym9ndXNfY3RzKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5ib2d1c19jdHMsIGRlbHRhX2dlbmVyYWwtPmJvZ3VzX2N0cywKLQkJCSBtYXhfZ2VuZXJhbC0+Ym9ndXNfY3RzKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiYm9ndXNfYWNrOiIsCi0JCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+Ym9ndXNfYWNrKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5ib2d1c19hY2ssIGRlbHRhX2dlbmVyYWwtPmJvZ3VzX2FjaywKLQkJCSBtYXhfZ2VuZXJhbC0+Ym9ndXNfYWNrKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAibm9uX2Jzc2lkX2ZyYW1lczoiLAotCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPm5vbl9ic3NpZF9mcmFtZXMpLAotCQkJIGFjY3VtX2dlbmVyYWwtPm5vbl9ic3NpZF9mcmFtZXMsCi0JCQkgZGVsdGFfZ2VuZXJhbC0+bm9uX2Jzc2lkX2ZyYW1lcywKLQkJCSBtYXhfZ2VuZXJhbC0+bm9uX2Jzc2lkX2ZyYW1lcyk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImZpbHRlcmVkX2ZyYW1lczoiLAotCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmZpbHRlcmVkX2ZyYW1lcyksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+ZmlsdGVyZWRfZnJhbWVzLAotCQkJIGRlbHRhX2dlbmVyYWwtPmZpbHRlcmVkX2ZyYW1lcywKLQkJCSBtYXhfZ2VuZXJhbC0+ZmlsdGVyZWRfZnJhbWVzKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAibm9uX2NoYW5uZWxfYmVhY29uczoiLAotCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPm5vbl9jaGFubmVsX2JlYWNvbnMpLAotCQkJIGFjY3VtX2dlbmVyYWwtPm5vbl9jaGFubmVsX2JlYWNvbnMsCi0JCQkgZGVsdGFfZ2VuZXJhbC0+bm9uX2NoYW5uZWxfYmVhY29ucywKLQkJCSBtYXhfZ2VuZXJhbC0+bm9uX2NoYW5uZWxfYmVhY29ucyk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImNoYW5uZWxfYmVhY29uczoiLAotCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmNoYW5uZWxfYmVhY29ucyksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+Y2hhbm5lbF9iZWFjb25zLAotCQkJIGRlbHRhX2dlbmVyYWwtPmNoYW5uZWxfYmVhY29ucywKLQkJCSBtYXhfZ2VuZXJhbC0+Y2hhbm5lbF9iZWFjb25zKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAibnVtX21pc3NlZF9iY29uOiIsCi0JCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+bnVtX21pc3NlZF9iY29uKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5udW1fbWlzc2VkX2Jjb24sCi0JCQkgZGVsdGFfZ2VuZXJhbC0+bnVtX21pc3NlZF9iY29uLAotCQkJIG1heF9nZW5lcmFsLT5udW1fbWlzc2VkX2Jjb24pOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJhZGNfcnhfc2F0dXJhdGlvbl90aW1lOiIsCi0JCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+YWRjX3J4X3NhdHVyYXRpb25fdGltZSksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+YWRjX3J4X3NhdHVyYXRpb25fdGltZSwKLQkJCSBkZWx0YV9nZW5lcmFsLT5hZGNfcnhfc2F0dXJhdGlvbl90aW1lLAotCQkJIG1heF9nZW5lcmFsLT5hZGNfcnhfc2F0dXJhdGlvbl90aW1lKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiaW5hX2RldGVjdF9zZWFyY2hfdG06IiwKLQkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5pbmFfZGV0ZWN0aW9uX3NlYXJjaF90aW1lKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5pbmFfZGV0ZWN0aW9uX3NlYXJjaF90aW1lLAotCQkJIGRlbHRhX2dlbmVyYWwtPmluYV9kZXRlY3Rpb25fc2VhcmNoX3RpbWUsCi0JCQkgbWF4X2dlbmVyYWwtPmluYV9kZXRlY3Rpb25fc2VhcmNoX3RpbWUpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJiZWFjb25fc2lsZW5jZV9yc3NpX2E6IiwKLQkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2EpLAotCQkJIGFjY3VtX2dlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYSwKLQkJCSBkZWx0YV9nZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2EsCi0JCQkgbWF4X2dlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYSk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImJlYWNvbl9zaWxlbmNlX3Jzc2lfYjoiLAotCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYiksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9iLAotCQkJIGRlbHRhX2dlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYiwKLQkJCSBtYXhfZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9iKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiYmVhY29uX3NpbGVuY2VfcnNzaV9jOiIsCi0JCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9jKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2MsCi0JCQkgZGVsdGFfZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9jLAotCQkJIG1heF9nZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2MpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJpbnRlcmZlcmVuY2VfZGF0YV9mbGFnOiIsCi0JCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+aW50ZXJmZXJlbmNlX2RhdGFfZmxhZyksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+aW50ZXJmZXJlbmNlX2RhdGFfZmxhZywKLQkJCSBkZWx0YV9nZW5lcmFsLT5pbnRlcmZlcmVuY2VfZGF0YV9mbGFnLAotCQkJIG1heF9nZW5lcmFsLT5pbnRlcmZlcmVuY2VfZGF0YV9mbGFnKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiY2hhbm5lbF9sb2FkOiIsCi0JCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+Y2hhbm5lbF9sb2FkKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5jaGFubmVsX2xvYWQsCi0JCQkgZGVsdGFfZ2VuZXJhbC0+Y2hhbm5lbF9sb2FkLAotCQkJIG1heF9nZW5lcmFsLT5jaGFubmVsX2xvYWQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJkc3BfZmFsc2VfYWxhcm1zOiIsCi0JCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+ZHNwX2ZhbHNlX2FsYXJtcyksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+ZHNwX2ZhbHNlX2FsYXJtcywKLQkJCSBkZWx0YV9nZW5lcmFsLT5kc3BfZmFsc2VfYWxhcm1zLAotCQkJIG1heF9nZW5lcmFsLT5kc3BfZmFsc2VfYWxhcm1zKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiYmVhY29uX3Jzc2lfYToiLAotCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJlYWNvbl9yc3NpX2EpLAotCQkJIGFjY3VtX2dlbmVyYWwtPmJlYWNvbl9yc3NpX2EsCi0JCQkgZGVsdGFfZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYSwKLQkJCSBtYXhfZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYSk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImJlYWNvbl9yc3NpX2I6IiwKLQkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5iZWFjb25fcnNzaV9iKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5iZWFjb25fcnNzaV9iLAotCQkJIGRlbHRhX2dlbmVyYWwtPmJlYWNvbl9yc3NpX2IsCi0JCQkgbWF4X2dlbmVyYWwtPmJlYWNvbl9yc3NpX2IpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJiZWFjb25fcnNzaV9jOiIsCi0JCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYyksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYywKLQkJCSBkZWx0YV9nZW5lcmFsLT5iZWFjb25fcnNzaV9jLAotCQkJIG1heF9nZW5lcmFsLT5iZWFjb25fcnNzaV9jKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiYmVhY29uX2VuZXJneV9hOiIsCi0JCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9hKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5iZWFjb25fZW5lcmd5X2EsCi0JCQkgZGVsdGFfZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9hLAotCQkJIG1heF9nZW5lcmFsLT5iZWFjb25fZW5lcmd5X2EpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJiZWFjb25fZW5lcmd5X2I6IiwKLQkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5iZWFjb25fZW5lcmd5X2IpLAotCQkJIGFjY3VtX2dlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYiwKLQkJCSBkZWx0YV9nZW5lcmFsLT5iZWFjb25fZW5lcmd5X2IsCi0JCQkgbWF4X2dlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImJlYWNvbl9lbmVyZ3lfYzoiLAotCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYyksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9jLAotCQkJIGRlbHRhX2dlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYywKLQkJCSBtYXhfZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9jKTsKLQotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfaGVhZGVyLCAiU3RhdGlzdGljc19SeCAtIE9GRE1fSFQ6Iik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgInBsY3BfZXJyOiIsCi0JCQkgbGUzMl90b19jcHUoaHQtPnBsY3BfZXJyKSwgYWNjdW1faHQtPnBsY3BfZXJyLAotCQkJIGRlbHRhX2h0LT5wbGNwX2VyciwgbWF4X2h0LT5wbGNwX2Vycik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgIm92ZXJydW5fZXJyOiIsCi0JCQkgbGUzMl90b19jcHUoaHQtPm92ZXJydW5fZXJyKSwgYWNjdW1faHQtPm92ZXJydW5fZXJyLAotCQkJIGRlbHRhX2h0LT5vdmVycnVuX2VyciwgbWF4X2h0LT5vdmVycnVuX2Vycik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImVhcmx5X292ZXJydW5fZXJyOiIsCi0JCQkgbGUzMl90b19jcHUoaHQtPmVhcmx5X292ZXJydW5fZXJyKSwKLQkJCSBhY2N1bV9odC0+ZWFybHlfb3ZlcnJ1bl9lcnIsCi0JCQkgZGVsdGFfaHQtPmVhcmx5X292ZXJydW5fZXJyLAotCQkJIG1heF9odC0+ZWFybHlfb3ZlcnJ1bl9lcnIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJjcmMzMl9nb29kOiIsCi0JCQkgbGUzMl90b19jcHUoaHQtPmNyYzMyX2dvb2QpLCBhY2N1bV9odC0+Y3JjMzJfZ29vZCwKLQkJCSBkZWx0YV9odC0+Y3JjMzJfZ29vZCwgbWF4X2h0LT5jcmMzMl9nb29kKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiY3JjMzJfZXJyOiIsCi0JCQkgbGUzMl90b19jcHUoaHQtPmNyYzMyX2VyciksIGFjY3VtX2h0LT5jcmMzMl9lcnIsCi0JCQkgZGVsdGFfaHQtPmNyYzMyX2VyciwgbWF4X2h0LT5jcmMzMl9lcnIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJtaF9mb3JtYXRfZXJyOiIsCi0JCQkgbGUzMl90b19jcHUoaHQtPm1oX2Zvcm1hdF9lcnIpLAotCQkJIGFjY3VtX2h0LT5taF9mb3JtYXRfZXJyLAotCQkJIGRlbHRhX2h0LT5taF9mb3JtYXRfZXJyLCBtYXhfaHQtPm1oX2Zvcm1hdF9lcnIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJhZ2dfY3JjMzJfZ29vZDoiLAotCQkJIGxlMzJfdG9fY3B1KGh0LT5hZ2dfY3JjMzJfZ29vZCksCi0JCQkgYWNjdW1faHQtPmFnZ19jcmMzMl9nb29kLAotCQkJIGRlbHRhX2h0LT5hZ2dfY3JjMzJfZ29vZCwgbWF4X2h0LT5hZ2dfY3JjMzJfZ29vZCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImFnZ19tcGR1X2NudDoiLAotCQkJIGxlMzJfdG9fY3B1KGh0LT5hZ2dfbXBkdV9jbnQpLAotCQkJIGFjY3VtX2h0LT5hZ2dfbXBkdV9jbnQsCi0JCQkgZGVsdGFfaHQtPmFnZ19tcGR1X2NudCwgbWF4X2h0LT5hZ2dfbXBkdV9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJhZ2dfY250OiIsCi0JCQkgbGUzMl90b19jcHUoaHQtPmFnZ19jbnQpLCBhY2N1bV9odC0+YWdnX2NudCwKLQkJCSBkZWx0YV9odC0+YWdnX2NudCwgbWF4X2h0LT5hZ2dfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAidW5zdXBwb3J0X21jczoiLAotCQkJIGxlMzJfdG9fY3B1KGh0LT51bnN1cHBvcnRfbWNzKSwKLQkJCSBhY2N1bV9odC0+dW5zdXBwb3J0X21jcywKLQkJCSBkZWx0YV9odC0+dW5zdXBwb3J0X21jcywgbWF4X2h0LT51bnN1cHBvcnRfbWNzKTsKLQotCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOwotCWtmcmVlKGJ1Zik7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3NpemVfdCBpd2xfdWNvZGVfdHhfc3RhdHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsCi0JCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWludCBwb3MgPSAwOwotCWNoYXIgKmJ1ZjsKLQlpbnQgYnVmc3ogPSAoc2l6ZW9mKHN0cnVjdCBzdGF0aXN0aWNzX3R4KSAqIDQ4KSArIDI1MDsKLQlzc2l6ZV90IHJldDsKLQlzdHJ1Y3Qgc3RhdGlzdGljc190eCAqdHgsICphY2N1bV90eCwgKmRlbHRhX3R4LCAqbWF4X3R4OwotCi0JaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCi0JCXJldHVybiAtRUFHQUlOOwotCi0JYnVmID0ga3phbGxvYyhidWZzeiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpIHsKLQkJSVdMX0VSUihwcml2LCAiQ2FuIG5vdCBhbGxvY2F0ZSBCdWZmZXJcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQkvKiB0aGUgc3RhdGlzdGljIGluZm9ybWF0aW9uIGRpc3BsYXkgaGVyZSBpcyBiYXNlZCBvbgotCSAgKiB0aGUgbGFzdCBzdGF0aXN0aWNzIG5vdGlmaWNhdGlvbiBmcm9tIHVDb2RlCi0JICAqIG1pZ2h0IG5vdCByZWZsZWN0IHRoZSBjdXJyZW50IHVDb2RlIGFjdGl2aXR5Ci0JICAqLwotCWlmIChpd2xfYnRfc3RhdGlzdGljcyhwcml2KSkgewotCQl0eCA9ICZwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQudHg7Ci0JCWFjY3VtX3R4ID0gJnByaXYtPl9hZ24uYWNjdW1fc3RhdGlzdGljc19idC50eDsKLQkJZGVsdGFfdHggPSAmcHJpdi0+X2Fnbi5kZWx0YV9zdGF0aXN0aWNzX2J0LnR4OwotCQltYXhfdHggPSAmcHJpdi0+X2Fnbi5tYXhfZGVsdGFfYnQudHg7Ci0JfSBlbHNlIHsKLQkJdHggPSAmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzLnR4OwotCQlhY2N1bV90eCA9ICZwcml2LT5fYWduLmFjY3VtX3N0YXRpc3RpY3MudHg7Ci0JCWRlbHRhX3R4ID0gJnByaXYtPl9hZ24uZGVsdGFfc3RhdGlzdGljcy50eDsKLQkJbWF4X3R4ID0gJnByaXYtPl9hZ24ubWF4X2RlbHRhLnR4OwotCX0KLQotCXBvcyArPSBpd2xfc3RhdGlzdGljc19mbGFnKHByaXYsIGJ1ZiwgYnVmc3opOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfaGVhZGVyLCAiU3RhdGlzdGljc19UeDoiKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAicHJlYW1ibGU6IiwKLQkJCSBsZTMyX3RvX2NwdSh0eC0+cHJlYW1ibGVfY250KSwKLQkJCSBhY2N1bV90eC0+cHJlYW1ibGVfY250LAotCQkJIGRlbHRhX3R4LT5wcmVhbWJsZV9jbnQsIG1heF90eC0+cHJlYW1ibGVfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAicnhfZGV0ZWN0ZWRfY250OiIsCi0JCQkgbGUzMl90b19jcHUodHgtPnJ4X2RldGVjdGVkX2NudCksCi0JCQkgYWNjdW1fdHgtPnJ4X2RldGVjdGVkX2NudCwKLQkJCSBkZWx0YV90eC0+cnhfZGV0ZWN0ZWRfY250LCBtYXhfdHgtPnJ4X2RldGVjdGVkX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImJ0X3ByaW9fZGVmZXJfY250OiIsCi0JCQkgbGUzMl90b19jcHUodHgtPmJ0X3ByaW9fZGVmZXJfY250KSwKLQkJCSBhY2N1bV90eC0+YnRfcHJpb19kZWZlcl9jbnQsCi0JCQkgZGVsdGFfdHgtPmJ0X3ByaW9fZGVmZXJfY250LAotCQkJIG1heF90eC0+YnRfcHJpb19kZWZlcl9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJidF9wcmlvX2tpbGxfY250OiIsCi0JCQkgbGUzMl90b19jcHUodHgtPmJ0X3ByaW9fa2lsbF9jbnQpLAotCQkJIGFjY3VtX3R4LT5idF9wcmlvX2tpbGxfY250LAotCQkJIGRlbHRhX3R4LT5idF9wcmlvX2tpbGxfY250LAotCQkJIG1heF90eC0+YnRfcHJpb19raWxsX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImZld19ieXRlc19jbnQ6IiwKLQkJCSBsZTMyX3RvX2NwdSh0eC0+ZmV3X2J5dGVzX2NudCksCi0JCQkgYWNjdW1fdHgtPmZld19ieXRlc19jbnQsCi0JCQkgZGVsdGFfdHgtPmZld19ieXRlc19jbnQsIG1heF90eC0+ZmV3X2J5dGVzX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImN0c190aW1lb3V0OiIsCi0JCQkgbGUzMl90b19jcHUodHgtPmN0c190aW1lb3V0KSwgYWNjdW1fdHgtPmN0c190aW1lb3V0LAotCQkJIGRlbHRhX3R4LT5jdHNfdGltZW91dCwgbWF4X3R4LT5jdHNfdGltZW91dCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImFja190aW1lb3V0OiIsCi0JCQkgbGUzMl90b19jcHUodHgtPmFja190aW1lb3V0KSwKLQkJCSBhY2N1bV90eC0+YWNrX3RpbWVvdXQsCi0JCQkgZGVsdGFfdHgtPmFja190aW1lb3V0LCBtYXhfdHgtPmFja190aW1lb3V0KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiZXhwZWN0ZWRfYWNrX2NudDoiLAotCQkJIGxlMzJfdG9fY3B1KHR4LT5leHBlY3RlZF9hY2tfY250KSwKLQkJCSBhY2N1bV90eC0+ZXhwZWN0ZWRfYWNrX2NudCwKLQkJCSBkZWx0YV90eC0+ZXhwZWN0ZWRfYWNrX2NudCwKLQkJCSBtYXhfdHgtPmV4cGVjdGVkX2Fja19jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJhY3R1YWxfYWNrX2NudDoiLAotCQkJIGxlMzJfdG9fY3B1KHR4LT5hY3R1YWxfYWNrX2NudCksCi0JCQkgYWNjdW1fdHgtPmFjdHVhbF9hY2tfY250LAotCQkJIGRlbHRhX3R4LT5hY3R1YWxfYWNrX2NudCwKLQkJCSBtYXhfdHgtPmFjdHVhbF9hY2tfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiZHVtcF9tc2R1X2NudDoiLAotCQkJIGxlMzJfdG9fY3B1KHR4LT5kdW1wX21zZHVfY250KSwKLQkJCSBhY2N1bV90eC0+ZHVtcF9tc2R1X2NudCwKLQkJCSBkZWx0YV90eC0+ZHVtcF9tc2R1X2NudCwKLQkJCSBtYXhfdHgtPmR1bXBfbXNkdV9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJhYm9ydF9ueHRfZnJhbWVfbWlzbWF0Y2g6IiwKLQkJCSBsZTMyX3RvX2NwdSh0eC0+YnVyc3RfYWJvcnRfbmV4dF9mcmFtZV9taXNtYXRjaF9jbnQpLAotCQkJIGFjY3VtX3R4LT5idXJzdF9hYm9ydF9uZXh0X2ZyYW1lX21pc21hdGNoX2NudCwKLQkJCSBkZWx0YV90eC0+YnVyc3RfYWJvcnRfbmV4dF9mcmFtZV9taXNtYXRjaF9jbnQsCi0JCQkgbWF4X3R4LT5idXJzdF9hYm9ydF9uZXh0X2ZyYW1lX21pc21hdGNoX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImFib3J0X21pc3Npbmdfbnh0X2ZyYW1lOiIsCi0JCQkgbGUzMl90b19jcHUodHgtPmJ1cnN0X2Fib3J0X21pc3NpbmdfbmV4dF9mcmFtZV9jbnQpLAotCQkJIGFjY3VtX3R4LT5idXJzdF9hYm9ydF9taXNzaW5nX25leHRfZnJhbWVfY250LAotCQkJIGRlbHRhX3R4LT5idXJzdF9hYm9ydF9taXNzaW5nX25leHRfZnJhbWVfY250LAotCQkJIG1heF90eC0+YnVyc3RfYWJvcnRfbWlzc2luZ19uZXh0X2ZyYW1lX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImN0c190aW1lb3V0X2NvbGxpc2lvbjoiLAotCQkJIGxlMzJfdG9fY3B1KHR4LT5jdHNfdGltZW91dF9jb2xsaXNpb24pLAotCQkJIGFjY3VtX3R4LT5jdHNfdGltZW91dF9jb2xsaXNpb24sCi0JCQkgZGVsdGFfdHgtPmN0c190aW1lb3V0X2NvbGxpc2lvbiwKLQkJCSBtYXhfdHgtPmN0c190aW1lb3V0X2NvbGxpc2lvbik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImFja19iYV90aW1lb3V0X2NvbGxpc2lvbjoiLAotCQkJIGxlMzJfdG9fY3B1KHR4LT5hY2tfb3JfYmFfdGltZW91dF9jb2xsaXNpb24pLAotCQkJIGFjY3VtX3R4LT5hY2tfb3JfYmFfdGltZW91dF9jb2xsaXNpb24sCi0JCQkgZGVsdGFfdHgtPmFja19vcl9iYV90aW1lb3V0X2NvbGxpc2lvbiwKLQkJCSBtYXhfdHgtPmFja19vcl9iYV90aW1lb3V0X2NvbGxpc2lvbik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImFnZyBiYV90aW1lb3V0OiIsCi0JCQkgbGUzMl90b19jcHUodHgtPmFnZy5iYV90aW1lb3V0KSwKLQkJCSBhY2N1bV90eC0+YWdnLmJhX3RpbWVvdXQsCi0JCQkgZGVsdGFfdHgtPmFnZy5iYV90aW1lb3V0LAotCQkJIG1heF90eC0+YWdnLmJhX3RpbWVvdXQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJhZ2cgYmFfcmVzY2hlZF9mcmFtZXM6IiwKLQkJCSBsZTMyX3RvX2NwdSh0eC0+YWdnLmJhX3Jlc2NoZWR1bGVfZnJhbWVzKSwKLQkJCSBhY2N1bV90eC0+YWdnLmJhX3Jlc2NoZWR1bGVfZnJhbWVzLAotCQkJIGRlbHRhX3R4LT5hZ2cuYmFfcmVzY2hlZHVsZV9mcmFtZXMsCi0JCQkgbWF4X3R4LT5hZ2cuYmFfcmVzY2hlZHVsZV9mcmFtZXMpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJhZ2cgc2NkX3F1ZXJ5X2FnZ19mcmFtZToiLAotCQkJIGxlMzJfdG9fY3B1KHR4LT5hZ2cuc2NkX3F1ZXJ5X2FnZ19mcmFtZV9jbnQpLAotCQkJIGFjY3VtX3R4LT5hZ2cuc2NkX3F1ZXJ5X2FnZ19mcmFtZV9jbnQsCi0JCQkgZGVsdGFfdHgtPmFnZy5zY2RfcXVlcnlfYWdnX2ZyYW1lX2NudCwKLQkJCSBtYXhfdHgtPmFnZy5zY2RfcXVlcnlfYWdnX2ZyYW1lX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImFnZyBzY2RfcXVlcnlfbm9fYWdnOiIsCi0JCQkgbGUzMl90b19jcHUodHgtPmFnZy5zY2RfcXVlcnlfbm9fYWdnKSwKLQkJCSBhY2N1bV90eC0+YWdnLnNjZF9xdWVyeV9ub19hZ2csCi0JCQkgZGVsdGFfdHgtPmFnZy5zY2RfcXVlcnlfbm9fYWdnLAotCQkJIG1heF90eC0+YWdnLnNjZF9xdWVyeV9ub19hZ2cpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJhZ2cgc2NkX3F1ZXJ5X2FnZzoiLAotCQkJIGxlMzJfdG9fY3B1KHR4LT5hZ2cuc2NkX3F1ZXJ5X2FnZyksCi0JCQkgYWNjdW1fdHgtPmFnZy5zY2RfcXVlcnlfYWdnLAotCQkJIGRlbHRhX3R4LT5hZ2cuc2NkX3F1ZXJ5X2FnZywKLQkJCSBtYXhfdHgtPmFnZy5zY2RfcXVlcnlfYWdnKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiYWdnIHNjZF9xdWVyeV9taXNtYXRjaDoiLAotCQkJIGxlMzJfdG9fY3B1KHR4LT5hZ2cuc2NkX3F1ZXJ5X21pc21hdGNoKSwKLQkJCSBhY2N1bV90eC0+YWdnLnNjZF9xdWVyeV9taXNtYXRjaCwKLQkJCSBkZWx0YV90eC0+YWdnLnNjZF9xdWVyeV9taXNtYXRjaCwKLQkJCSBtYXhfdHgtPmFnZy5zY2RfcXVlcnlfbWlzbWF0Y2gpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJhZ2cgZnJhbWVfbm90X3JlYWR5OiIsCi0JCQkgbGUzMl90b19jcHUodHgtPmFnZy5mcmFtZV9ub3RfcmVhZHkpLAotCQkJIGFjY3VtX3R4LT5hZ2cuZnJhbWVfbm90X3JlYWR5LAotCQkJIGRlbHRhX3R4LT5hZ2cuZnJhbWVfbm90X3JlYWR5LAotCQkJIG1heF90eC0+YWdnLmZyYW1lX25vdF9yZWFkeSk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImFnZyB1bmRlcnJ1bjoiLAotCQkJIGxlMzJfdG9fY3B1KHR4LT5hZ2cudW5kZXJydW4pLAotCQkJIGFjY3VtX3R4LT5hZ2cudW5kZXJydW4sCi0JCQkgZGVsdGFfdHgtPmFnZy51bmRlcnJ1biwgbWF4X3R4LT5hZ2cudW5kZXJydW4pOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJhZ2cgYnRfcHJpb19raWxsOiIsCi0JCQkgbGUzMl90b19jcHUodHgtPmFnZy5idF9wcmlvX2tpbGwpLAotCQkJIGFjY3VtX3R4LT5hZ2cuYnRfcHJpb19raWxsLAotCQkJIGRlbHRhX3R4LT5hZ2cuYnRfcHJpb19raWxsLAotCQkJIG1heF90eC0+YWdnLmJ0X3ByaW9fa2lsbCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgImFnZyByeF9iYV9yc3BfY250OiIsCi0JCQkgbGUzMl90b19jcHUodHgtPmFnZy5yeF9iYV9yc3BfY250KSwKLQkJCSBhY2N1bV90eC0+YWdnLnJ4X2JhX3JzcF9jbnQsCi0JCQkgZGVsdGFfdHgtPmFnZy5yeF9iYV9yc3BfY250LAotCQkJIG1heF90eC0+YWdnLnJ4X2JhX3JzcF9jbnQpOwotCi0JaWYgKHR4LT50eF9wb3dlci5hbnRfYSB8fCB0eC0+dHhfcG93ZXIuYW50X2IgfHwgdHgtPnR4X3Bvd2VyLmFudF9jKSB7Ci0JCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSJ0eCBwb3dlcjogKDEvMiBkQiBzdGVwKVxuIik7Ci0JCWlmICgocHJpdi0+Y2ZnLT52YWxpZF90eF9hbnQgJiBBTlRfQSkgJiYgdHgtPnR4X3Bvd2VyLmFudF9hKQotCQkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJCQlmbXRfaGV4LCAiYW50ZW5uYSBBOiIsCi0JCQkJCXR4LT50eF9wb3dlci5hbnRfYSk7Ci0JCWlmICgocHJpdi0+Y2ZnLT52YWxpZF90eF9hbnQgJiBBTlRfQikgJiYgdHgtPnR4X3Bvd2VyLmFudF9iKQotCQkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJCQlmbXRfaGV4LCAiYW50ZW5uYSBCOiIsCi0JCQkJCXR4LT50eF9wb3dlci5hbnRfYik7Ci0JCWlmICgocHJpdi0+Y2ZnLT52YWxpZF90eF9hbnQgJiBBTlRfQykgJiYgdHgtPnR4X3Bvd2VyLmFudF9jKQotCQkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJCQlmbXRfaGV4LCAiYW50ZW5uYSBDOiIsCi0JCQkJCXR4LT50eF9wb3dlci5hbnRfYyk7Ci0JfQotCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOwotCWtmcmVlKGJ1Zik7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3NpemVfdCBpd2xfdWNvZGVfZ2VuZXJhbF9zdGF0c19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCi0JCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JaW50IHBvcyA9IDA7Ci0JY2hhciAqYnVmOwotCWludCBidWZzeiA9IHNpemVvZihzdHJ1Y3Qgc3RhdGlzdGljc19nZW5lcmFsKSAqIDEwICsgMzAwOwotCXNzaXplX3QgcmV0OwotCXN0cnVjdCBzdGF0aXN0aWNzX2dlbmVyYWxfY29tbW9uICpnZW5lcmFsLCAqYWNjdW1fZ2VuZXJhbDsKLQlzdHJ1Y3Qgc3RhdGlzdGljc19nZW5lcmFsX2NvbW1vbiAqZGVsdGFfZ2VuZXJhbCwgKm1heF9nZW5lcmFsOwotCXN0cnVjdCBzdGF0aXN0aWNzX2RiZyAqZGJnLCAqYWNjdW1fZGJnLCAqZGVsdGFfZGJnLCAqbWF4X2RiZzsKLQlzdHJ1Y3Qgc3RhdGlzdGljc19kaXYgKmRpdiwgKmFjY3VtX2RpdiwgKmRlbHRhX2RpdiwgKm1heF9kaXY7Ci0KLQlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKLQkJcmV0dXJuIC1FQUdBSU47Ci0KLQlidWYgPSBremFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZikgewotCQlJV0xfRVJSKHByaXYsICJDYW4gbm90IGFsbG9jYXRlIEJ1ZmZlclxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCS8qIHRoZSBzdGF0aXN0aWMgaW5mb3JtYXRpb24gZGlzcGxheSBoZXJlIGlzIGJhc2VkIG9uCi0JICAqIHRoZSBsYXN0IHN0YXRpc3RpY3Mgbm90aWZpY2F0aW9uIGZyb20gdUNvZGUKLQkgICogbWlnaHQgbm90IHJlZmxlY3QgdGhlIGN1cnJlbnQgdUNvZGUgYWN0aXZpdHkKLQkgICovCi0JaWYgKGl3bF9idF9zdGF0aXN0aWNzKHByaXYpKSB7Ci0JCWdlbmVyYWwgPSAmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzX2J0LmdlbmVyYWwuY29tbW9uOwotCQlkYmcgPSAmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzX2J0LmdlbmVyYWwuY29tbW9uLmRiZzsKLQkJZGl2ID0gJnByaXYtPl9hZ24uc3RhdGlzdGljc19idC5nZW5lcmFsLmNvbW1vbi5kaXY7Ci0JCWFjY3VtX2dlbmVyYWwgPSAmcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzX2J0LmdlbmVyYWwuY29tbW9uOwotCQlhY2N1bV9kYmcgPSAmcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzX2J0LmdlbmVyYWwuY29tbW9uLmRiZzsKLQkJYWNjdW1fZGl2ID0gJnByaXYtPl9hZ24uYWNjdW1fc3RhdGlzdGljc19idC5nZW5lcmFsLmNvbW1vbi5kaXY7Ci0JCWRlbHRhX2dlbmVyYWwgPSAmcHJpdi0+X2Fnbi5kZWx0YV9zdGF0aXN0aWNzX2J0LmdlbmVyYWwuY29tbW9uOwotCQltYXhfZ2VuZXJhbCA9ICZwcml2LT5fYWduLm1heF9kZWx0YV9idC5nZW5lcmFsLmNvbW1vbjsKLQkJZGVsdGFfZGJnID0gJnByaXYtPl9hZ24uZGVsdGFfc3RhdGlzdGljc19idC5nZW5lcmFsLmNvbW1vbi5kYmc7Ci0JCW1heF9kYmcgPSAmcHJpdi0+X2Fnbi5tYXhfZGVsdGFfYnQuZ2VuZXJhbC5jb21tb24uZGJnOwotCQlkZWx0YV9kaXYgPSAmcHJpdi0+X2Fnbi5kZWx0YV9zdGF0aXN0aWNzX2J0LmdlbmVyYWwuY29tbW9uLmRpdjsKLQkJbWF4X2RpdiA9ICZwcml2LT5fYWduLm1heF9kZWx0YV9idC5nZW5lcmFsLmNvbW1vbi5kaXY7Ci0JfSBlbHNlIHsKLQkJZ2VuZXJhbCA9ICZwcml2LT5fYWduLnN0YXRpc3RpY3MuZ2VuZXJhbC5jb21tb247Ci0JCWRiZyA9ICZwcml2LT5fYWduLnN0YXRpc3RpY3MuZ2VuZXJhbC5jb21tb24uZGJnOwotCQlkaXYgPSAmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzLmdlbmVyYWwuY29tbW9uLmRpdjsKLQkJYWNjdW1fZ2VuZXJhbCA9ICZwcml2LT5fYWduLmFjY3VtX3N0YXRpc3RpY3MuZ2VuZXJhbC5jb21tb247Ci0JCWFjY3VtX2RiZyA9ICZwcml2LT5fYWduLmFjY3VtX3N0YXRpc3RpY3MuZ2VuZXJhbC5jb21tb24uZGJnOwotCQlhY2N1bV9kaXYgPSAmcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzLmdlbmVyYWwuY29tbW9uLmRpdjsKLQkJZGVsdGFfZ2VuZXJhbCA9ICZwcml2LT5fYWduLmRlbHRhX3N0YXRpc3RpY3MuZ2VuZXJhbC5jb21tb247Ci0JCW1heF9nZW5lcmFsID0gJnByaXYtPl9hZ24ubWF4X2RlbHRhLmdlbmVyYWwuY29tbW9uOwotCQlkZWx0YV9kYmcgPSAmcHJpdi0+X2Fnbi5kZWx0YV9zdGF0aXN0aWNzLmdlbmVyYWwuY29tbW9uLmRiZzsKLQkJbWF4X2RiZyA9ICZwcml2LT5fYWduLm1heF9kZWx0YS5nZW5lcmFsLmNvbW1vbi5kYmc7Ci0JCWRlbHRhX2RpdiA9ICZwcml2LT5fYWduLmRlbHRhX3N0YXRpc3RpY3MuZ2VuZXJhbC5jb21tb24uZGl2OwotCQltYXhfZGl2ID0gJnByaXYtPl9hZ24ubWF4X2RlbHRhLmdlbmVyYWwuY29tbW9uLmRpdjsKLQl9Ci0KLQlwb3MgKz0gaXdsX3N0YXRpc3RpY3NfZmxhZyhwcml2LCBidWYsIGJ1ZnN6KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X2hlYWRlciwgIlN0YXRpc3RpY3NfR2VuZXJhbDoiKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3ZhbHVlLCAidGVtcGVyYXR1cmU6IiwKLQkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT50ZW1wZXJhdHVyZSkpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdmFsdWUsICJ0ZW1wZXJhdHVyZV9tOiIsCi0JCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+dGVtcGVyYXR1cmVfbSkpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdmFsdWUsICJ0dGxfdGltZXN0YW1wOiIsCi0JCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+dHRsX3RpbWVzdGFtcCkpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJidXJzdF9jaGVjazoiLAotCQkJIGxlMzJfdG9fY3B1KGRiZy0+YnVyc3RfY2hlY2spLAotCQkJIGFjY3VtX2RiZy0+YnVyc3RfY2hlY2ssCi0JCQkgZGVsdGFfZGJnLT5idXJzdF9jaGVjaywgbWF4X2RiZy0+YnVyc3RfY2hlY2spOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJidXJzdF9jb3VudDoiLAotCQkJIGxlMzJfdG9fY3B1KGRiZy0+YnVyc3RfY291bnQpLAotCQkJIGFjY3VtX2RiZy0+YnVyc3RfY291bnQsCi0JCQkgZGVsdGFfZGJnLT5idXJzdF9jb3VudCwgbWF4X2RiZy0+YnVyc3RfY291bnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJ3YWl0X2Zvcl9zaWxlbmNlX3RpbWVvdXRfY291bnQ6IiwKLQkJCSBsZTMyX3RvX2NwdShkYmctPndhaXRfZm9yX3NpbGVuY2VfdGltZW91dF9jbnQpLAotCQkJIGFjY3VtX2RiZy0+d2FpdF9mb3Jfc2lsZW5jZV90aW1lb3V0X2NudCwKLQkJCSBkZWx0YV9kYmctPndhaXRfZm9yX3NpbGVuY2VfdGltZW91dF9jbnQsCi0JCQkgbWF4X2RiZy0+d2FpdF9mb3Jfc2lsZW5jZV90aW1lb3V0X2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgInNsZWVwX3RpbWU6IiwKLQkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5zbGVlcF90aW1lKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5zbGVlcF90aW1lLAotCQkJIGRlbHRhX2dlbmVyYWwtPnNsZWVwX3RpbWUsIG1heF9nZW5lcmFsLT5zbGVlcF90aW1lKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAic2xvdHNfb3V0OiIsCi0JCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+c2xvdHNfb3V0KSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5zbG90c19vdXQsCi0JCQkgZGVsdGFfZ2VuZXJhbC0+c2xvdHNfb3V0LCBtYXhfZ2VuZXJhbC0+c2xvdHNfb3V0KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAic2xvdHNfaWRsZToiLAotCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPnNsb3RzX2lkbGUpLAotCQkJIGFjY3VtX2dlbmVyYWwtPnNsb3RzX2lkbGUsCi0JCQkgZGVsdGFfZ2VuZXJhbC0+c2xvdHNfaWRsZSwgbWF4X2dlbmVyYWwtPnNsb3RzX2lkbGUpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJ0eF9vbl9hOiIsCi0JCQkgbGUzMl90b19jcHUoZGl2LT50eF9vbl9hKSwgYWNjdW1fZGl2LT50eF9vbl9hLAotCQkJIGRlbHRhX2Rpdi0+dHhfb25fYSwgbWF4X2Rpdi0+dHhfb25fYSk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIGZtdF90YWJsZSwgInR4X29uX2I6IiwKLQkJCSBsZTMyX3RvX2NwdShkaXYtPnR4X29uX2IpLCBhY2N1bV9kaXYtPnR4X29uX2IsCi0JCQkgZGVsdGFfZGl2LT50eF9vbl9iLCBtYXhfZGl2LT50eF9vbl9iKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAiZXhlY190aW1lOiIsCi0JCQkgbGUzMl90b19jcHUoZGl2LT5leGVjX3RpbWUpLCBhY2N1bV9kaXYtPmV4ZWNfdGltZSwKLQkJCSBkZWx0YV9kaXYtPmV4ZWNfdGltZSwgbWF4X2Rpdi0+ZXhlY190aW1lKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgZm10X3RhYmxlLCAicHJvYmVfdGltZToiLAotCQkJIGxlMzJfdG9fY3B1KGRpdi0+cHJvYmVfdGltZSksIGFjY3VtX2Rpdi0+cHJvYmVfdGltZSwKLQkJCSBkZWx0YV9kaXYtPnByb2JlX3RpbWUsIG1heF9kaXYtPnByb2JlX3RpbWUpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJyeF9lbmFibGVfY291bnRlcjoiLAotCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPnJ4X2VuYWJsZV9jb3VudGVyKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5yeF9lbmFibGVfY291bnRlciwKLQkJCSBkZWx0YV9nZW5lcmFsLT5yeF9lbmFibGVfY291bnRlciwKLQkJCSBtYXhfZ2VuZXJhbC0+cnhfZW5hYmxlX2NvdW50ZXIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSBmbXRfdGFibGUsICJudW1fb2Zfc29zX3N0YXRlczoiLAotCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPm51bV9vZl9zb3Nfc3RhdGVzKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5udW1fb2Zfc29zX3N0YXRlcywKLQkJCSBkZWx0YV9nZW5lcmFsLT5udW1fb2Zfc29zX3N0YXRlcywKLQkJCSBtYXhfZ2VuZXJhbC0+bnVtX29mX3Nvc19zdGF0ZXMpOwotCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOwotCWtmcmVlKGJ1Zik7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3NpemVfdCBpd2xfdWNvZGVfYnRfc3RhdHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsCi0JCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQlpbnQgcG9zID0gMDsKLQljaGFyICpidWY7Ci0JaW50IGJ1ZnN6ID0gKHNpemVvZihzdHJ1Y3Qgc3RhdGlzdGljc19idF9hY3Rpdml0eSkgKiAyNCkgKyAyMDA7Ci0Jc3NpemVfdCByZXQ7Ci0Jc3RydWN0IHN0YXRpc3RpY3NfYnRfYWN0aXZpdHkgKmJ0LCAqYWNjdW1fYnQ7Ci0KLQlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKLQkJcmV0dXJuIC1FQUdBSU47Ci0KLQlpZiAoIXByaXYtPmJ0X2VuYWJsZV9mbGFnKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIG1ha2UgcmVxdWVzdCB0byB1Q29kZSB0byByZXRyaWV2ZSBzdGF0aXN0aWNzIGluZm9ybWF0aW9uICovCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCXJldCA9IGl3bF9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChwcml2LCBDTURfU1lOQywgZmFsc2UpOwotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCi0JaWYgKHJldCkgewotCQlJV0xfRVJSKHByaXYsCi0JCQkiRXJyb3Igc2VuZGluZyBzdGF0aXN0aWNzIHJlcXVlc3Q6ICV6ZFxuIiwgcmV0KTsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCWJ1ZiA9IGt6YWxsb2MoYnVmc3osIEdGUF9LRVJORUwpOwotCWlmICghYnVmKSB7Ci0JCUlXTF9FUlIocHJpdiwgIkNhbiBub3QgYWxsb2NhdGUgQnVmZmVyXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLyoKLQkgKiB0aGUgc3RhdGlzdGljIGluZm9ybWF0aW9uIGRpc3BsYXkgaGVyZSBpcyBiYXNlZCBvbgotCSAqIHRoZSBsYXN0IHN0YXRpc3RpY3Mgbm90aWZpY2F0aW9uIGZyb20gdUNvZGUKLQkgKiBtaWdodCBub3QgcmVmbGVjdCB0aGUgY3VycmVudCB1Q29kZSBhY3Rpdml0eQotCSAqLwotCWJ0ID0gJnByaXYtPl9hZ24uc3RhdGlzdGljc19idC5nZW5lcmFsLmFjdGl2aXR5OwotCWFjY3VtX2J0ID0gJnByaXYtPl9hZ24uYWNjdW1fc3RhdGlzdGljc19idC5nZW5lcmFsLmFjdGl2aXR5OwotCi0JcG9zICs9IGl3bF9zdGF0aXN0aWNzX2ZsYWcocHJpdiwgYnVmLCBidWZzeik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiU3RhdGlzdGljc19CVDpcbiIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSJcdFx0XHRjdXJyZW50XHRcdFx0YWNjdW11bGF0aXZlXG4iKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImhpX3ByaW9yaXR5X3R4X3JlcV9jbnQ6XHRcdCV1XHRcdFx0JXVcbiIsCi0JCQkgbGUzMl90b19jcHUoYnQtPmhpX3ByaW9yaXR5X3R4X3JlcV9jbnQpLAotCQkJIGFjY3VtX2J0LT5oaV9wcmlvcml0eV90eF9yZXFfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImhpX3ByaW9yaXR5X3R4X2RlbmllZF9jbnQ6XHQldVx0XHRcdCV1XG4iLAotCQkJIGxlMzJfdG9fY3B1KGJ0LT5oaV9wcmlvcml0eV90eF9kZW5pZWRfY250KSwKLQkJCSBhY2N1bV9idC0+aGlfcHJpb3JpdHlfdHhfZGVuaWVkX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJsb19wcmlvcml0eV90eF9yZXFfY250Olx0XHQldVx0XHRcdCV1XG4iLAotCQkJIGxlMzJfdG9fY3B1KGJ0LT5sb19wcmlvcml0eV90eF9yZXFfY250KSwKLQkJCSBhY2N1bV9idC0+bG9fcHJpb3JpdHlfdHhfcmVxX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJsb19wcmlvcml0eV90eF9kZW5pZWRfY250Olx0JXVcdFx0XHQldVxuIiwKLQkJCSBsZTMyX3RvX2NwdShidC0+bG9fcHJpb3JpdHlfdHhfZGVuaWVkX2NudCksCi0JCQkgYWNjdW1fYnQtPmxvX3ByaW9yaXR5X3R4X2RlbmllZF9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiaGlfcHJpb3JpdHlfcnhfcmVxX2NudDpcdFx0JXVcdFx0XHQldVxuIiwKLQkJCSBsZTMyX3RvX2NwdShidC0+aGlfcHJpb3JpdHlfcnhfcmVxX2NudCksCi0JCQkgYWNjdW1fYnQtPmhpX3ByaW9yaXR5X3J4X3JlcV9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiaGlfcHJpb3JpdHlfcnhfZGVuaWVkX2NudDpcdCV1XHRcdFx0JXVcbiIsCi0JCQkgbGUzMl90b19jcHUoYnQtPmhpX3ByaW9yaXR5X3J4X2RlbmllZF9jbnQpLAotCQkJIGFjY3VtX2J0LT5oaV9wcmlvcml0eV9yeF9kZW5pZWRfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImxvX3ByaW9yaXR5X3J4X3JlcV9jbnQ6XHRcdCV1XHRcdFx0JXVcbiIsCi0JCQkgbGUzMl90b19jcHUoYnQtPmxvX3ByaW9yaXR5X3J4X3JlcV9jbnQpLAotCQkJIGFjY3VtX2J0LT5sb19wcmlvcml0eV9yeF9yZXFfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImxvX3ByaW9yaXR5X3J4X2RlbmllZF9jbnQ6XHQldVx0XHRcdCV1XG4iLAotCQkJIGxlMzJfdG9fY3B1KGJ0LT5sb19wcmlvcml0eV9yeF9kZW5pZWRfY250KSwKLQkJCSBhY2N1bV9idC0+bG9fcHJpb3JpdHlfcnhfZGVuaWVkX2NudCk7Ci0KLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgIihyeCludW1fYnRfa2lsbHM6XHRcdCV1XHRcdFx0JXVcbiIsCi0JCQkgbGUzMl90b19jcHUocHJpdi0+X2Fnbi5zdGF0aXN0aWNzX2J0LnJ4LgotCQkJCWdlbmVyYWwubnVtX2J0X2tpbGxzKSwKLQkJCSBwcml2LT5fYWduLmFjY3VtX3N0YXRpc3RpY3NfYnQucnguCi0JCQkJZ2VuZXJhbC5udW1fYnRfa2lsbHMpOwotCi0JcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7Ci0Ja2ZyZWUoYnVmKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zc2l6ZV90IGl3bF9yZXBseV90eF9lcnJvcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWludCBwb3MgPSAwOwotCWNoYXIgKmJ1ZjsKLQlpbnQgYnVmc3ogPSAoc2l6ZW9mKHN0cnVjdCByZXBseV90eF9lcnJvcl9zdGF0aXN0aWNzKSAqIDI0KSArCi0JCShzaXplb2Yoc3RydWN0IHJlcGx5X2FnZ190eF9lcnJvcl9zdGF0aXN0aWNzKSAqIDI0KSArIDIwMDsKLQlzc2l6ZV90IHJldDsKLQotCWlmICghaXdsX2lzX2FsaXZlKHByaXYpKQotCQlyZXR1cm4gLUVBR0FJTjsKLQotCWJ1ZiA9IGt6YWxsb2MoYnVmc3osIEdGUF9LRVJORUwpOwotCWlmICghYnVmKSB7Ci0JCUlXTF9FUlIocHJpdiwgIkNhbiBub3QgYWxsb2NhdGUgQnVmZmVyXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiU3RhdGlzdGljc19UWF9FcnJvcjpcbiIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdFx0JXVcbiIsCi0JCQkgaXdsX2dldF90eF9mYWlsX3JlYXNvbihUWF9TVEFUVVNfUE9TVFBPTkVfREVMQVkpLAotCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMucHBfZGVsYXkpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAotCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX1BPU1RQT05FX0ZFV19CWVRFUyksCi0JCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy5wcF9mZXdfYnl0ZXMpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAotCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX1BPU1RQT05FX0JUX1BSSU8pLAotCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMucHBfYnRfcHJpbyk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCi0JCQkgaXdsX2dldF90eF9mYWlsX3JlYXNvbihUWF9TVEFUVVNfUE9TVFBPTkVfUVVJRVRfUEVSSU9EKSwKLQkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLnBwX3F1aWV0X3BlcmlvZCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCi0JCQkgaXdsX2dldF90eF9mYWlsX3JlYXNvbihUWF9TVEFUVVNfUE9TVFBPTkVfQ0FMQ19UVEFLKSwKLQkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLnBwX2NhbGNfdHRhayk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdCV1XG4iLAotCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oCi0JCQkJVFhfU1RBVFVTX0ZBSUxfSU5URVJOQUxfQ1JPU1NFRF9SRVRSWSksCi0JCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy5pbnRfY3Jvc3NlZF9yZXRyeSk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCi0JCQkgaXdsX2dldF90eF9mYWlsX3JlYXNvbihUWF9TVEFUVVNfRkFJTF9TSE9SVF9MSU1JVCksCi0JCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy5zaG9ydF9saW1pdCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCi0JCQkgaXdsX2dldF90eF9mYWlsX3JlYXNvbihUWF9TVEFUVVNfRkFJTF9MT05HX0xJTUlUKSwKLQkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLmxvbmdfbGltaXQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAotCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX0ZBSUxfRklGT19VTkRFUlJVTiksCi0JCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy5maWZvX3VuZGVycnVuKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlczpcdFx0XHQldVxuIiwKLQkJCSBpd2xfZ2V0X3R4X2ZhaWxfcmVhc29uKFRYX1NUQVRVU19GQUlMX0RSQUlOX0ZMT1cpLAotCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMuZHJhaW5fZmxvdyk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCi0JCQkgaXdsX2dldF90eF9mYWlsX3JlYXNvbihUWF9TVEFUVVNfRkFJTF9SRktJTExfRkxVU0gpLAotCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMucmZraWxsX2ZsdXNoKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlczpcdFx0XHQldVxuIiwKLQkJCSBpd2xfZ2V0X3R4X2ZhaWxfcmVhc29uKFRYX1NUQVRVU19GQUlMX0xJRkVfRVhQSVJFKSwKLQkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLmxpZmVfZXhwaXJlKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlczpcdFx0XHQldVxuIiwKLQkJCSBpd2xfZ2V0X3R4X2ZhaWxfcmVhc29uKFRYX1NUQVRVU19GQUlMX0RFU1RfUFMpLAotCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMuZGVzdF9wcyk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCi0JCQkgaXdsX2dldF90eF9mYWlsX3JlYXNvbihUWF9TVEFUVVNfRkFJTF9IT1NUX0FCT1JURUQpLAotCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMuaG9zdF9hYm9ydCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCi0JCQkgaXdsX2dldF90eF9mYWlsX3JlYXNvbihUWF9TVEFUVVNfRkFJTF9CVF9SRVRSWSksCi0JCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy5wcF9kZWxheSk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCi0JCQkgaXdsX2dldF90eF9mYWlsX3JlYXNvbihUWF9TVEFUVVNfRkFJTF9TVEFfSU5WQUxJRCksCi0JCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy5zdGFfaW52YWxpZCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCi0JCQkgaXdsX2dldF90eF9mYWlsX3JlYXNvbihUWF9TVEFUVVNfRkFJTF9GUkFHX0RST1BQRUQpLAotCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMuZnJhZ19kcm9wKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlczpcdFx0XHQldVxuIiwKLQkJCSBpd2xfZ2V0X3R4X2ZhaWxfcmVhc29uKFRYX1NUQVRVU19GQUlMX1RJRF9ESVNBQkxFKSwKLQkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLnRpZF9kaXNhYmxlKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlczpcdFx0XHQldVxuIiwKLQkJCSBpd2xfZ2V0X3R4X2ZhaWxfcmVhc29uKFRYX1NUQVRVU19GQUlMX0ZJRk9fRkxVU0hFRCksCi0JCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy5maWZvX2ZsdXNoKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlczpcdFx0JXVcbiIsCi0JCQkgaXdsX2dldF90eF9mYWlsX3JlYXNvbigKLQkJCQlUWF9TVEFUVVNfRkFJTF9JTlNVRkZJQ0lFTlRfQ0ZfUE9MTCksCi0JCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy5pbnN1ZmZfY2ZfcG9sbCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCi0JCQkgaXdsX2dldF90eF9mYWlsX3JlYXNvbihUWF9TVEFUVVNfRkFJTF9QQVNTSVZFX05PX1JYKSwKLQkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLmZhaWxfaHdfZHJvcCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdCV1XG4iLAotCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oCi0JCQkJVFhfU1RBVFVTX0ZBSUxfTk9fQkVBQ09OX09OX1JBREFSKSwKLQkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLnN0YV9jb2xvcl9taXNtYXRjaCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiVU5LTk9XTjpcdFx0XHQldVxuIiwKLQkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLnVua25vd24pOwotCi0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJcblN0YXRpc3RpY3NfQWdnX1RYX0Vycm9yOlxuIik7Ci0KLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlczpcdFx0XHQldVxuIiwKLQkJCSBpd2xfZ2V0X2FnZ190eF9mYWlsX3JlYXNvbihBR0dfVFhfU1RBVEVfVU5ERVJSVU5fTVNLKSwKLQkJCSBwcml2LT5fYWduLnJlcGx5X2FnZ190eF9zdGF0cy51bmRlcnJ1bik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCi0JCQkgaXdsX2dldF9hZ2dfdHhfZmFpbF9yZWFzb24oQUdHX1RYX1NUQVRFX0JUX1BSSU9fTVNLKSwKLQkJCSBwcml2LT5fYWduLnJlcGx5X2FnZ190eF9zdGF0cy5idF9wcmlvKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlczpcdFx0XHQldVxuIiwKLQkJCSBpd2xfZ2V0X2FnZ190eF9mYWlsX3JlYXNvbihBR0dfVFhfU1RBVEVfRkVXX0JZVEVTX01TSyksCi0JCQkgcHJpdi0+X2Fnbi5yZXBseV9hZ2dfdHhfc3RhdHMuZmV3X2J5dGVzKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlczpcdFx0XHQldVxuIiwKLQkJCSBpd2xfZ2V0X2FnZ190eF9mYWlsX3JlYXNvbihBR0dfVFhfU1RBVEVfQUJPUlRfTVNLKSwKLQkJCSBwcml2LT5fYWduLnJlcGx5X2FnZ190eF9zdGF0cy5hYm9ydCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdCV1XG4iLAotCQkJIGl3bF9nZXRfYWdnX3R4X2ZhaWxfcmVhc29uKAotCQkJCUFHR19UWF9TVEFURV9MQVNUX1NFTlRfVFRMX01TSyksCi0JCQkgcHJpdi0+X2Fnbi5yZXBseV9hZ2dfdHhfc3RhdHMubGFzdF9zZW50X3R0bCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdCV1XG4iLAotCQkJIGl3bF9nZXRfYWdnX3R4X2ZhaWxfcmVhc29uKAotCQkJCUFHR19UWF9TVEFURV9MQVNUX1NFTlRfVFJZX0NOVF9NU0spLAotCQkJIHByaXYtPl9hZ24ucmVwbHlfYWdnX3R4X3N0YXRzLmxhc3Rfc2VudF90cnkpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHQldVxuIiwKLQkJCSBpd2xfZ2V0X2FnZ190eF9mYWlsX3JlYXNvbigKLQkJCQlBR0dfVFhfU1RBVEVfTEFTVF9TRU5UX0JUX0tJTExfTVNLKSwKLQkJCSBwcml2LT5fYWduLnJlcGx5X2FnZ190eF9zdGF0cy5sYXN0X3NlbnRfYnRfa2lsbCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCi0JCQkgaXdsX2dldF9hZ2dfdHhfZmFpbF9yZWFzb24oQUdHX1RYX1NUQVRFX1NDRF9RVUVSWV9NU0spLAotCQkJIHByaXYtPl9hZ24ucmVwbHlfYWdnX3R4X3N0YXRzLnNjZF9xdWVyeSk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdCV1XG4iLAotCQkJIGl3bF9nZXRfYWdnX3R4X2ZhaWxfcmVhc29uKAotCQkJCUFHR19UWF9TVEFURV9URVNUX0JBRF9DUkMzMl9NU0spLAotCQkJIHByaXYtPl9hZ24ucmVwbHlfYWdnX3R4X3N0YXRzLmJhZF9jcmMzMik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCi0JCQkgaXdsX2dldF9hZ2dfdHhfZmFpbF9yZWFzb24oQUdHX1RYX1NUQVRFX1JFU1BPTlNFX01TSyksCi0JCQkgcHJpdi0+X2Fnbi5yZXBseV9hZ2dfdHhfc3RhdHMucmVzcG9uc2UpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAotCQkJIGl3bF9nZXRfYWdnX3R4X2ZhaWxfcmVhc29uKEFHR19UWF9TVEFURV9EVU1QX1RYX01TSyksCi0JCQkgcHJpdi0+X2Fnbi5yZXBseV9hZ2dfdHhfc3RhdHMuZHVtcF90eCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCi0JCQkgaXdsX2dldF9hZ2dfdHhfZmFpbF9yZWFzb24oQUdHX1RYX1NUQVRFX0RFTEFZX1RYX01TSyksCi0JCQkgcHJpdi0+X2Fnbi5yZXBseV9hZ2dfdHhfc3RhdHMuZGVsYXlfdHgpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlVOS05PV046XHRcdFx0JXVcbiIsCi0JCQkgcHJpdi0+X2Fnbi5yZXBseV9hZ2dfdHhfc3RhdHMudW5rbm93bik7Ci0KLQlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKLQlrZnJlZShidWYpOwotCXJldHVybiByZXQ7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tZGVidWdmcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWRlYnVnZnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI1NzNiNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tZGVidWdmcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKLSAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwKLSAqIFVTQQotICoKLSAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS5HUEwuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KLSAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgIml3bC1kZXYuaCIKLSNpbmNsdWRlICJpd2wtY29yZS5oIgotI2luY2x1ZGUgIml3bC1kZWJ1Zy5oIgotCi0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUdGUwotc3NpemVfdCBpd2xfdWNvZGVfcnhfc3RhdHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAotCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKTsKLXNzaXplX3QgaXdsX3Vjb2RlX3R4X3N0YXRzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyk7Ci1zc2l6ZV90IGl3bF91Y29kZV9nZW5lcmFsX3N0YXRzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKTsKLXNzaXplX3QgaXdsX3Vjb2RlX2J0X3N0YXRzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyk7Ci1zc2l6ZV90IGl3bF9yZXBseV90eF9lcnJvcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCi0JCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOwotI2Vsc2UKLXN0YXRpYyBzc2l6ZV90IGl3bF91Y29kZV9yeF9zdGF0c19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCi0JCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXJldHVybiAwOwotfQotc3RhdGljIHNzaXplX3QgaXdsX3Vjb2RlX3R4X3N0YXRzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgc3NpemVfdCBpd2xfdWNvZGVfZ2VuZXJhbF9zdGF0c19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCi0JCQkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBzc2l6ZV90IGl3bF91Y29kZV9idF9zdGF0c19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCi0JCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXJldHVybiAwOwotfQotc3RhdGljIHNzaXplX3QgaXdsX3JlcGx5X3R4X2Vycm9yX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1lZXByb20uYwppbmRleCAyN2I1YTNlLi4yZWY5NDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWVlcHJvbS5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtODEsNTIgKzgxLDEzIEBACiAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKgotICogVGhlIGRldmljZSdzIEVFUFJPTSBzZW1hcGhvcmUgcHJldmVudHMgY29uZmxpY3RzIGJldHdlZW4gZHJpdmVyIGFuZCB1Q29kZQotICogd2hlbiBhY2Nlc3NpbmcgdGhlIEVFUFJPTTsgZWFjaCBhY2Nlc3MgaXMgYSBzZXJpZXMgb2YgcHVsc2VzIHRvL2Zyb20gdGhlCi0gKiBFRVBST00gY2hpcCwgbm90IGEgc2luZ2xlIGV2ZW50LCBzbyBldmVuIHJlYWRzIGNvdWxkIGNvbmZsaWN0IGlmIHRoZXkKLSAqIHdlcmVuJ3QgYXJiaXRyYXRlZCBieSB0aGUgc2VtYXBob3JlLgotICovCi1pbnQgaXdsY29yZV9lZXByb21fYWNxdWlyZV9zZW1hcGhvcmUoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCXUxNiBjb3VudDsKLQlpbnQgcmV0OwotCi0JZm9yIChjb3VudCA9IDA7IGNvdW50IDwgRUVQUk9NX1NFTV9SRVRSWV9MSU1JVDsgY291bnQrKykgewotCQkvKiBSZXF1ZXN0IHNlbWFwaG9yZSAqLwotCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfSFdfSUZfQ09ORklHX1JFRywKLQkJCSAgICBDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRfRUVQUk9NX09XTl9TRU0pOwotCi0JCS8qIFNlZSBpZiB3ZSBnb3QgaXQgKi8KLQkJcmV0ID0gaXdsX3BvbGxfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAotCQkJCUNTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9FRVBST01fT1dOX1NFTSwKLQkJCQlDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRfRUVQUk9NX09XTl9TRU0sCi0JCQkJRUVQUk9NX1NFTV9USU1FT1VUKTsKLQkJaWYgKHJldCA+PSAwKSB7Ci0JCQlJV0xfREVCVUdfSU8ocHJpdiwKLQkJCQkiQWNxdWlyZWQgc2VtYXBob3JlIGFmdGVyICVkIHRyaWVzLlxuIiwKLQkJCQljb3VudCsxKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIGl3bGNvcmVfZWVwcm9tX3JlbGVhc2Vfc2VtYXBob3JlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlpd2xfY2xlYXJfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAotCQlDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRfRUVQUk9NX09XTl9TRU0pOwotCi19Ci0KIGludCBpd2xfZWVwcm9tX2NoZWNrX3ZlcnNpb24oc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXUxNiBlZXByb21fdmVyOwogCXUxNiBjYWxpYl92ZXI7CiAKIAllZXByb21fdmVyID0gaXdsX2VlcHJvbV9xdWVyeTE2KHByaXYsIEVFUFJPTV9WRVJTSU9OKTsKLQljYWxpYl92ZXIgPSBwcml2LT5jZmctPm9wcy0+bGliLT5lZXByb21fb3BzLmNhbGliX3ZlcnNpb24ocHJpdik7CisJY2FsaWJfdmVyID0gaXdsYWduX2VlcHJvbV9jYWxpYl92ZXJzaW9uKHByaXYpOwogCiAJaWYgKGVlcHJvbV92ZXIgPCBwcml2LT5jZmctPmVlcHJvbV92ZXIgfHwKIAkgICAgY2FsaWJfdmVyIDwgcHJpdi0+Y2ZnLT5lZXByb21fY2FsaWJfdmVyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWhjbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1oY21kLmMKaW5kZXggNDE1NDNhZC4uYjEyYzcyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWhjbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24taGNtZC5jCkBAIC0yLDcgKzIsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zNyw1NCArMzcsNiBAQAogI2luY2x1ZGUgIml3bC1pby5oIgogI2luY2x1ZGUgIml3bC1hZ24uaCIKIAotaW50IGl3bGFnbl9zZW5kX3J4b25fYXNzb2Moc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJICAgc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCkKLXsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgaXdsNTAwMF9yeG9uX2Fzc29jX2NtZCByeG9uX2Fzc29jOwotCWNvbnN0IHN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24xID0gJmN0eC0+c3RhZ2luZzsKLQljb25zdCBzdHJ1Y3QgaXdsX3J4b25fY21kICpyeG9uMiA9ICZjdHgtPmFjdGl2ZTsKLQotCWlmICgocnhvbjEtPmZsYWdzID09IHJ4b24yLT5mbGFncykgJiYKLQkgICAgKHJ4b24xLT5maWx0ZXJfZmxhZ3MgPT0gcnhvbjItPmZpbHRlcl9mbGFncykgJiYKLQkgICAgKHJ4b24xLT5jY2tfYmFzaWNfcmF0ZXMgPT0gcnhvbjItPmNja19iYXNpY19yYXRlcykgJiYKLQkgICAgKHJ4b24xLT5vZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXMgPT0KLQkgICAgIHJ4b24yLT5vZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXMpICYmCi0JICAgIChyeG9uMS0+b2ZkbV9odF9kdWFsX3N0cmVhbV9iYXNpY19yYXRlcyA9PQotCSAgICAgcnhvbjItPm9mZG1faHRfZHVhbF9zdHJlYW1fYmFzaWNfcmF0ZXMpICYmCi0JICAgIChyeG9uMS0+b2ZkbV9odF90cmlwbGVfc3RyZWFtX2Jhc2ljX3JhdGVzID09Ci0JICAgICByeG9uMi0+b2ZkbV9odF90cmlwbGVfc3RyZWFtX2Jhc2ljX3JhdGVzKSAmJgotCSAgICAocnhvbjEtPmFjcXVpc2l0aW9uX2RhdGEgPT0gcnhvbjItPmFjcXVpc2l0aW9uX2RhdGEpICYmCi0JICAgIChyeG9uMS0+cnhfY2hhaW4gPT0gcnhvbjItPnJ4X2NoYWluKSAmJgotCSAgICAocnhvbjEtPm9mZG1fYmFzaWNfcmF0ZXMgPT0gcnhvbjItPm9mZG1fYmFzaWNfcmF0ZXMpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKHByaXYsICJVc2luZyBjdXJyZW50IFJYT05fQVNTT0MuICBOb3QgcmVzZW5kaW5nLlxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCXJ4b25fYXNzb2MuZmxhZ3MgPSBjdHgtPnN0YWdpbmcuZmxhZ3M7Ci0Jcnhvbl9hc3NvYy5maWx0ZXJfZmxhZ3MgPSBjdHgtPnN0YWdpbmcuZmlsdGVyX2ZsYWdzOwotCXJ4b25fYXNzb2Mub2ZkbV9iYXNpY19yYXRlcyA9IGN0eC0+c3RhZ2luZy5vZmRtX2Jhc2ljX3JhdGVzOwotCXJ4b25fYXNzb2MuY2NrX2Jhc2ljX3JhdGVzID0gY3R4LT5zdGFnaW5nLmNja19iYXNpY19yYXRlczsKLQlyeG9uX2Fzc29jLnJlc2VydmVkMSA9IDA7Ci0Jcnhvbl9hc3NvYy5yZXNlcnZlZDIgPSAwOwotCXJ4b25fYXNzb2MucmVzZXJ2ZWQzID0gMDsKLQlyeG9uX2Fzc29jLm9mZG1faHRfc2luZ2xlX3N0cmVhbV9iYXNpY19yYXRlcyA9Ci0JICAgIGN0eC0+c3RhZ2luZy5vZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXM7Ci0Jcnhvbl9hc3NvYy5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzID0KLQkgICAgY3R4LT5zdGFnaW5nLm9mZG1faHRfZHVhbF9zdHJlYW1fYmFzaWNfcmF0ZXM7Ci0Jcnhvbl9hc3NvYy5yeF9jaGFpbl9zZWxlY3RfZmxhZ3MgPSBjdHgtPnN0YWdpbmcucnhfY2hhaW47Ci0Jcnhvbl9hc3NvYy5vZmRtX2h0X3RyaXBsZV9zdHJlYW1fYmFzaWNfcmF0ZXMgPQotCQkgY3R4LT5zdGFnaW5nLm9mZG1faHRfdHJpcGxlX3N0cmVhbV9iYXNpY19yYXRlczsKLQlyeG9uX2Fzc29jLmFjcXVpc2l0aW9uX2RhdGEgPSBjdHgtPnN0YWdpbmcuYWNxdWlzaXRpb25fZGF0YTsKLQotCXJldCA9IGl3bF9zZW5kX2NtZF9wZHVfYXN5bmMocHJpdiwgY3R4LT5yeG9uX2Fzc29jX2NtZCwKLQkJCQkgICAgIHNpemVvZihyeG9uX2Fzc29jKSwgJnJ4b25fYXNzb2MsIE5VTEwpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBpbnQgaXdsYWduX3NlbmRfdHhfYW50X2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IHZhbGlkX3R4X2FudCkKIHsKIAlzdHJ1Y3QgaXdsX3R4X2FudF9jb25maWdfY21kIHR4X2FudF9jbWQgPSB7CkBAIC0xMDIsMTIgKzU0LDYgQEAKIAl9CiB9CiAKLS8qIEN1cnJlbnRseSB0aGlzIGlzIHRoZSBzdXBlcnNldCBvZiBldmVyeXRoaW5nICovCi1zdGF0aWMgdTE2IGl3bGFnbl9nZXRfaGNtZF9zaXplKHU4IGNtZF9pZCwgdTE2IGxlbikKLXsKLQlyZXR1cm4gbGVuOwotfQotCiBzdGF0aWMgdTE2IGl3bGFnbl9idWlsZF9hZGRzdGFfaGNtZChjb25zdCBzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgKmNtZCwgdTggKmRhdGEpCiB7CiAJdTE2IHNpemUgPSAodTE2KXNpemVvZihzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQpOwpAQCAtMzY0LDcgKzMxMCw2IEBACiB9CiAKIHN0cnVjdCBpd2xfaGNtZF9vcHMgaXdsYWduX2hjbWQgPSB7Ci0JLnJ4b25fYXNzb2MgPSBpd2xhZ25fc2VuZF9yeG9uX2Fzc29jLAogCS5jb21taXRfcnhvbiA9IGl3bGFnbl9jb21taXRfcnhvbiwKIAkuc2V0X3J4b25fY2hhaW4gPSBpd2xhZ25fc2V0X3J4b25fY2hhaW4sCiAJLnNldF90eF9hbnQgPSBpd2xhZ25fc2VuZF90eF9hbnRfY29uZmlnLApAQCAtMzczLDcgKzMxOCw2IEBACiB9OwogCiBzdHJ1Y3QgaXdsX2hjbWRfb3BzIGl3bGFnbl9idF9oY21kID0gewotCS5yeG9uX2Fzc29jID0gaXdsYWduX3NlbmRfcnhvbl9hc3NvYywKIAkuY29tbWl0X3J4b24gPSBpd2xhZ25fY29tbWl0X3J4b24sCiAJLnNldF9yeG9uX2NoYWluID0gaXdsYWduX3NldF9yeG9uX2NoYWluLAogCS5zZXRfdHhfYW50ID0gaXdsYWduX3NlbmRfdHhfYW50X2NvbmZpZywKQEAgLTM4Miw3ICszMjYsNiBAQAogfTsKIAogc3RydWN0IGl3bF9oY21kX3V0aWxzX29wcyBpd2xhZ25faGNtZF91dGlscyA9IHsKLQkuZ2V0X2hjbWRfc2l6ZSA9IGl3bGFnbl9nZXRfaGNtZF9zaXplLAogCS5idWlsZF9hZGRzdGFfaGNtZCA9IGl3bGFnbl9idWlsZF9hZGRzdGFfaGNtZCwKIAkuZ2Fpbl9jb21wdXRhdGlvbiA9IGl3bGFnbl9nYWluX2NvbXB1dGF0aW9uLAogCS5jaGFpbl9ub2lzZV9yZXNldCA9IGl3bGFnbl9jaGFpbl9ub2lzZV9yZXNldCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWh3LmgKaW5kZXggYTUyYjgyYy4uN2JkMTlmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWh3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWh3LmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24taWN0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24taWN0LmMKaW5kZXggZWQwMTQ4ZC4uMGQ1ZmRhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWljdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1pY3QuYwpAQCAtMiw3ICsyLDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtNTksOCArNTksNiBAQAogaW50IGl3bF9hbGxvY19pc3JfaWN0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAotCWlmIChwcml2LT5jZmctPmJhc2VfcGFyYW1zLT51c2VfaXNyX2xlZ2FjeSkKLQkJcmV0dXJuIDA7CiAJLyogYWxsb2NhdGUgc2hyYXJlZCBkYXRhIHRhYmxlICovCiAJcHJpdi0+X2Fnbi5pY3RfdGJsX3ZpciA9CiAJCWRtYV9hbGxvY19jb2hlcmVudCgmcHJpdi0+cGNpX2Rldi0+ZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWxlZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWxlZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTE5MGQ5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1sZWQuYworKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLSAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCi0gKgotICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCi0gKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiAgSW50ZWwgTGludXggV2lyZWxlc3MgPGlsd0BsaW51eC5pbnRlbC5jb20+Ci0gKiBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgotCi0jaW5jbHVkZSAiaXdsLWNvbW1hbmRzLmgiCi0jaW5jbHVkZSAiaXdsLWRldi5oIgotI2luY2x1ZGUgIml3bC1jb3JlLmgiCi0jaW5jbHVkZSAiaXdsLWlvLmgiCi0jaW5jbHVkZSAiaXdsLWFnbi1sZWQuaCIKLQotLyogU2VuZCBsZWQgY29tbWFuZCAqLwotc3RhdGljIGludCBpd2xfc2VuZF9sZWRfY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9sZWRfY21kICpsZWRfY21kKQotewotCXN0cnVjdCBpd2xfaG9zdF9jbWQgY21kID0gewotCQkuaWQgPSBSRVBMWV9MRURTX0NNRCwKLQkJLmxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsX2xlZF9jbWQpLAotCQkuZGF0YSA9IGxlZF9jbWQsCi0JCS5mbGFncyA9IENNRF9BU1lOQywKLQkJLmNhbGxiYWNrID0gTlVMTCwKLQl9OwotCXUzMiByZWc7Ci0KLQlyZWcgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9MRURfUkVHKTsKLQlpZiAocmVnICE9IChyZWcgJiBDU1JfTEVEX0JTTV9DVFJMX01TSykpCi0JCWl3bF93cml0ZTMyKHByaXYsIENTUl9MRURfUkVHLCByZWcgJiBDU1JfTEVEX0JTTV9DVFJMX01TSyk7Ci0KLQlyZXR1cm4gaXdsX3NlbmRfY21kKHByaXYsICZjbWQpOwotfQotCi0vKiBTZXQgbGVkIHJlZ2lzdGVyIG9mZiAqLwotdm9pZCBpd2xhZ25fbGVkX2VuYWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0JaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0xFRF9SRUcsIENTUl9MRURfUkVHX1RSVU5fT04pOwotfQotCi1jb25zdCBzdHJ1Y3QgaXdsX2xlZF9vcHMgaXdsYWduX2xlZF9vcHMgPSB7Ci0JLmNtZCA9IGl3bF9zZW5kX2xlZF9jbWQsCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWxpYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWxpYi5jCmluZGV4IDA4Y2NiOTQuLjhlNzk2NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1saWIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tbGliLmMKQEAgLTIsNyArMiw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTE3Miw2ICsxNzIsNyBAQAogCiBzdGF0aWMgdm9pZCBpd2xhZ25fc2V0X3R4X3N0YXR1cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbywKKwkJCQkgc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCwKIAkJCQkgc3RydWN0IGl3bGFnbl90eF9yZXNwICp0eF9yZXNwLAogCQkJCSBpbnQgdHhxX2lkLCBib29sIGlzX2FnZykKIHsKQEAgLTE4Niw2ICsxODcsMTMgQEAKIAlpZiAoIWl3bF9pc190eF9zdWNjZXNzKHN0YXR1cykpCiAJCWl3bGFnbl9jb3VudF90eF9lcnJfc3RhdHVzKHByaXYsIHN0YXR1cyk7CiAKKwlpZiAoc3RhdHVzID09IFRYX1NUQVRVU19GQUlMX1BBU1NJVkVfTk9fUlggJiYKKwkgICAgaXdsX2lzX2Fzc29jaWF0ZWRfY3R4KGN0eCkgJiYgY3R4LT52aWYgJiYKKwkgICAgY3R4LT52aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQljdHgtPmxhc3RfdHhfcmVqZWN0ZWQgPSB0cnVlOworCQlpd2xfc3RvcF9xdWV1ZShwcml2LCAmcHJpdi0+dHhxW3R4cV9pZF0pOworCX0KKwogCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiVFhRICVkIHN0YXR1cyAlcyAoMHglMDh4KSByYXRlX25fZmxhZ3MgIgogCQkJICAgIjB4JXggcmV0cmllcyAlZFxuIiwKIAkJCSAgIHR4cV9pZCwKQEAgLTI0MiwxNSArMjUwLDE2IEBACiAKIAkvKiAjIGZyYW1lcyBhdHRlbXB0ZWQgYnkgVHggY29tbWFuZCAqLwogCWlmIChhZ2ctPmZyYW1lX2NvdW50ID09IDEpIHsKKwkJc3RydWN0IGl3bF90eF9pbmZvICp0eGI7CisKIAkJLyogT25seSBvbmUgZnJhbWUgd2FzIGF0dGVtcHRlZDsgbm8gYmxvY2stYWNrIHdpbGwgYXJyaXZlICovCiAJCWlkeCA9IHN0YXJ0X2lkeDsKIAogCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIkZyYW1lQ250ID0gJWQsIFN0YXJ0SWR4PSVkIGlkeD0lZFxuIiwKIAkJCQkgICBhZ2ctPmZyYW1lX2NvdW50LCBhZ2ctPnN0YXJ0X2lkeCwgaWR4KTsKLQkJaXdsYWduX3NldF90eF9zdGF0dXMocHJpdiwKLQkJCQkgICAgIElFRUU4MDIxMV9TS0JfQ0IoCi0JCQkJCXByaXYtPnR4cVt0eHFfaWRdLnR4YltpZHhdLnNrYiksCi0JCQkJICAgICB0eF9yZXNwLCB0eHFfaWQsIHRydWUpOworCQl0eGIgPSAmcHJpdi0+dHhxW3R4cV9pZF0udHhiW2lkeF07CisJCWl3bGFnbl9zZXRfdHhfc3RhdHVzKHByaXYsIElFRUU4MDIxMV9TS0JfQ0IodHhiLT5za2IpLAorCQkJCSAgICAgdHhiLT5jdHgsIHR4X3Jlc3AsIHR4cV9pZCwgdHJ1ZSk7CiAJCWFnZy0+d2FpdF9mb3JfYmEgPSAwOwogCX0gZWxzZSB7CiAJCS8qIFR3byBvciBtb3JlIGZyYW1lcyB3ZXJlIGF0dGVtcHRlZDsgZXhwZWN0IGJsb2NrLWFjayAqLwpAQCAtMzkxLDcgKzQwMCw4IEBACiAJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVt0eHFfaWRdOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgaXdsYWduX3R4X3Jlc3AgKnR4X3Jlc3AgPSAodm9pZCAqKSZwa3QtPnUucmF3WzBdOwotCXUzMiAgc3RhdHVzID0gbGUxNl90b19jcHUodHhfcmVzcC0+c3RhdHVzLnN0YXR1cyk7CisJc3RydWN0IGl3bF90eF9pbmZvICp0eGI7CisJdTMyIHN0YXR1cyA9IGxlMTZfdG9fY3B1KHR4X3Jlc3AtPnN0YXR1cy5zdGF0dXMpOwogCWludCB0aWQ7CiAJaW50IHN0YV9pZDsKIAlpbnQgZnJlZWQ7CkBAIC00MDYsNyArNDE2LDggQEAKIAl9CiAKIAl0eHEtPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwotCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHR4cS0+dHhiW3R4cS0+cS5yZWFkX3B0cl0uc2tiKTsKKwl0eGIgPSAmdHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXTsKKwlpbmZvID0gSUVFRTgwMjExX1NLQl9DQih0eGItPnNrYik7CiAJbWVtc2V0KCZpbmZvLT5zdGF0dXMsIDAsIHNpemVvZihpbmZvLT5zdGF0dXMpKTsKIAogCXRpZCA9ICh0eF9yZXNwLT5yYV90aWQgJiBJV0xBR05fVFhfUkVTX1RJRF9NU0spID4+CkBAIC00NTAsMTIgKzQ2MSwxNCBAQAogCQkJCWl3bF93YWtlX3F1ZXVlKHByaXYsIHR4cSk7CiAJCX0KIAl9IGVsc2UgewotCQlpd2xhZ25fc2V0X3R4X3N0YXR1cyhwcml2LCBpbmZvLCB0eF9yZXNwLCB0eHFfaWQsIGZhbHNlKTsKKwkJaXdsYWduX3NldF90eF9zdGF0dXMocHJpdiwgaW5mbywgdHhiLT5jdHgsIHR4X3Jlc3AsCisJCQkJICAgICB0eHFfaWQsIGZhbHNlKTsKIAkJZnJlZWQgPSBpd2xhZ25fdHhfcXVldWVfcmVjbGFpbShwcml2LCB0eHFfaWQsIGluZGV4KTsKIAkJaXdsX2ZyZWVfdGZkc19pbl9xdWV1ZShwcml2LCBzdGFfaWQsIHRpZCwgZnJlZWQpOwogCiAJCWlmIChwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkICYmCi0JCSAgICAoaXdsX3F1ZXVlX3NwYWNlKCZ0eHEtPnEpID4gdHhxLT5xLmxvd19tYXJrKSkKKwkJICAgIGl3bF9xdWV1ZV9zcGFjZSgmdHhxLT5xKSA+IHR4cS0+cS5sb3dfbWFyayAmJgorCQkgICAgc3RhdHVzICE9IFRYX1NUQVRVU19GQUlMX1BBU1NJVkVfTk9fUlgpCiAJCQlpd2xfd2FrZV9xdWV1ZShwcml2LCB0eHEpOwogCX0KIApAQCAtNDcwLDggKzQ4Myw2IEBACiAJLyogaW5pdCBjYWxpYnJhdGlvbiBoYW5kbGVycyAqLwogCXByaXYtPnJ4X2hhbmRsZXJzW0NBTElCUkFUSU9OX1JFU19OT1RJRklDQVRJT05dID0KIAkJCQkJaXdsYWduX3J4X2NhbGliX3Jlc3VsdDsKLQlwcml2LT5yeF9oYW5kbGVyc1tDQUxJQlJBVElPTl9DT01QTEVURV9OT1RJRklDQVRJT05dID0KLQkJCQkJaXdsYWduX3J4X2NhbGliX2NvbXBsZXRlOwogCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX1RYXSA9IGl3bGFnbl9yeF9yZXBseV90eDsKIAogCS8qIHNldCB1cCBub3RpZmljYXRpb24gd2FpdCBzdXBwb3J0ICovCkBAIC00ODIsOCArNDkzLDEwIEBACiAKIHZvaWQgaXdsYWduX3NldHVwX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCS8qIGluIGFnbiwgdGhlIHR4IHBvd2VyIGNhbGlicmF0aW9uIGlzIGRvbmUgaW4gdUNvZGUgKi8KLQlwcml2LT5kaXNhYmxlX3R4X3Bvd2VyX2NhbCA9IDE7CisJLyoKKwkgKiBub3RoaW5nIG5lZWQgdG8gYmUgZG9uZSBoZXJlIGFueW1vcmUKKwkgKiBzdGlsbCBrZWVwIGZvciBmdXR1cmUgdXNlIGlmIG5lZWRlZAorCSAqLwogfQogCiBpbnQgaXdsYWduX2h3X3ZhbGlkX3J0Y19kYXRhX2FkZHIodTMyIGFkZHIpCkBAIC01MzQsOSArNTQ3LDcgQEAKIHZvaWQgaXdsYWduX3RlbXBlcmF0dXJlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAkvKiBzdG9yZSB0ZW1wZXJhdHVyZSBmcm9tIGNvcnJlY3Qgc3RhdGlzdGljcyAoaW4gQ2Vsc2l1cykgKi8KLQlwcml2LT50ZW1wZXJhdHVyZSA9IGxlMzJfdG9fY3B1KChpd2xfYnRfc3RhdGlzdGljcyhwcml2KSkgPwotCQlwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQuZ2VuZXJhbC5jb21tb24udGVtcGVyYXR1cmUgOgotCQlwcml2LT5fYWduLnN0YXRpc3RpY3MuZ2VuZXJhbC5jb21tb24udGVtcGVyYXR1cmUpOworCXByaXYtPnRlbXBlcmF0dXJlID0gbGUzMl90b19jcHUocHJpdi0+c3RhdGlzdGljcy5jb21tb24udGVtcGVyYXR1cmUpOwogCWl3bF90dF9oYW5kbGVyKHByaXYpOwogfQogCkBAIC02NTIsMTAgKzY2Myw5IEBACiAJY29uc3QgdTMyIHJmZG5sb2cgPSBSWF9RVUVVRV9TSVpFX0xPRzsgLyogMjU2IFJCRHMgKi8KIAl1MzIgcmJfdGltZW91dCA9IDA7IC8qIEZJWE1FOiBSWF9SQl9USU1FT1VUIGZvciBhbGwgZGV2aWNlcz8gKi8KIAotCWlmICghcHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+dXNlX2lzcl9sZWdhY3kpCi0JCXJiX3RpbWVvdXQgPSBSWF9SQl9USU1FT1VUOworCXJiX3RpbWVvdXQgPSBSWF9SQl9USU1FT1VUOwogCi0JaWYgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+YW1zZHVfc2l6ZV84SykKKwlpZiAoaXdsYWduX21vZF9wYXJhbXMuYW1zZHVfc2l6ZV84SykKIAkJcmJfc2l6ZSA9IEZIX1JDU1JfUlhfQ09ORklHX1JFR19WQUxfUkJfU0laRV84SzsKIAllbHNlCiAJCXJiX3NpemUgPSBGSF9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX1JCX1NJWkVfNEs7CkBAIC05MTMsNyArOTIzLDYgQEAKIAogCQlsaXN0X2FkZF90YWlsKCZyeGItPmxpc3QsICZyeHEtPnJ4X2ZyZWUpOwogCQlyeHEtPmZyZWVfY291bnQrKzsKLQkJcHJpdi0+YWxsb2NfcnhiX3BhZ2UrKzsKIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyeHEtPmxvY2ssIGZsYWdzKTsKIAl9CkBAIC0xMjg1LDkgKzEyOTQsMTcgQEAKIAkgKiBtZWFuIHdlIG5ldmVyIHJlYWNoIGl0LCBidXQgYXQgdGhlIHNhbWUgdGltZSB3b3JrIGFyb3VuZAogCSAqIHRoZSBhZm9yZW1lbnRpb25lZCBpc3N1ZS4gVGh1cyB1c2UgSVdMX0dPT0RfQ1JDX1RIX05FVkVSCiAJICogaGVyZSBpbnN0ZWFkIG9mIElXTF9HT09EX0NSQ19USF9ESVNBQkxFRC4KKwkgKgorCSAqIFRoaXMgd2FzIGZpeGVkIGluIGxhdGVyIHZlcnNpb25zIGFsb25nIHdpdGggc29tZSBvdGhlcgorCSAqIHNjYW4gY2hhbmdlcywgYW5kIHRoZSB0aHJlc2hvbGQgYmVoYXZlcyBhcyBhIGZsYWcgaW4gdGhvc2UKKwkgKiB2ZXJzaW9ucy4KIAkgKi8KLQlzY2FuLT5nb29kX0NSQ190aCA9IGlzX2FjdGl2ZSA/IElXTF9HT09EX0NSQ19USF9ERUZBVUxUIDoKLQkJCQkJSVdMX0dPT0RfQ1JDX1RIX05FVkVSOworCWlmIChwcml2LT5uZXdfc2Nhbl90aHJlc2hvbGRfYmVoYXZpb3VyKQorCQlzY2FuLT5nb29kX0NSQ190aCA9IGlzX2FjdGl2ZSA/IElXTF9HT09EX0NSQ19USF9ERUZBVUxUIDoKKwkJCQkJCUlXTF9HT09EX0NSQ19USF9ESVNBQkxFRDsKKwllbHNlCisJCXNjYW4tPmdvb2RfQ1JDX3RoID0gaXNfYWN0aXZlID8gSVdMX0dPT0RfQ1JDX1RIX0RFRkFVTFQgOgorCQkJCQkJSVdMX0dPT0RfQ1JDX1RIX05FVkVSOwogCiAJYmFuZCA9IHByaXYtPnNjYW5fYmFuZDsKIApAQCAtMjI0NSwzNCArMjI2Miw0NCBAQAogLyogbm90aWZpY2F0aW9uIHdhaXQgc3VwcG9ydCAqLwogdm9pZCBpd2xhZ25faW5pdF9ub3RpZmljYXRpb25fd2FpdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJICAgc3RydWN0IGl3bF9ub3RpZmljYXRpb25fd2FpdCAqd2FpdF9lbnRyeSwKKwkJCQkgICB1OCBjbWQsCiAJCQkJICAgdm9pZCAoKmZuKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCSAgICAgIHN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QpLAotCQkJCSAgIHU4IGNtZCkKKwkJCQkJICAgICAgc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCwKKwkJCQkJICAgICAgdm9pZCAqZGF0YSksCisJCQkJICAgdm9pZCAqZm5fZGF0YSkKIHsKIAl3YWl0X2VudHJ5LT5mbiA9IGZuOworCXdhaXRfZW50cnktPmZuX2RhdGEgPSBmbl9kYXRhOwogCXdhaXRfZW50cnktPmNtZCA9IGNtZDsKIAl3YWl0X2VudHJ5LT50cmlnZ2VyZWQgPSBmYWxzZTsKKwl3YWl0X2VudHJ5LT5hYm9ydGVkID0gZmFsc2U7CiAKIAlzcGluX2xvY2tfYmgoJnByaXYtPl9hZ24ubm90aWZfd2FpdF9sb2NrKTsKIAlsaXN0X2FkZCgmd2FpdF9lbnRyeS0+bGlzdCwgJnByaXYtPl9hZ24ubm90aWZfd2FpdHMpOwogCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5fYWduLm5vdGlmX3dhaXRfbG9jayk7CiB9CiAKLXNpZ25lZCBsb25nIGl3bGFnbl93YWl0X25vdGlmaWNhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgICBzdHJ1Y3QgaXdsX25vdGlmaWNhdGlvbl93YWl0ICp3YWl0X2VudHJ5LAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KQoraW50IGl3bGFnbl93YWl0X25vdGlmaWNhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgIHN0cnVjdCBpd2xfbm90aWZpY2F0aW9uX3dhaXQgKndhaXRfZW50cnksCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKIHsKIAlpbnQgcmV0OwogCiAJcmV0ID0gd2FpdF9ldmVudF90aW1lb3V0KHByaXYtPl9hZ24ubm90aWZfd2FpdHEsCi0JCQkJIHdhaXRfZW50cnktPnRyaWdnZXJlZCwKKwkJCQkgd2FpdF9lbnRyeS0+dHJpZ2dlcmVkIHx8IHdhaXRfZW50cnktPmFib3J0ZWQsCiAJCQkJIHRpbWVvdXQpOwogCiAJc3Bpbl9sb2NrX2JoKCZwcml2LT5fYWduLm5vdGlmX3dhaXRfbG9jayk7CiAJbGlzdF9kZWwoJndhaXRfZW50cnktPmxpc3QpOwogCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5fYWduLm5vdGlmX3dhaXRfbG9jayk7CiAKLQlyZXR1cm4gcmV0OworCWlmICh3YWl0X2VudHJ5LT5hYm9ydGVkKQorCQlyZXR1cm4gLUVJTzsKKworCS8qIHJldHVybiB2YWx1ZSBpcyBhbHdheXMgPj0gMCAqLworCWlmIChyZXQgPD0gMCkKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgaXdsYWduX3JlbW92ZV9ub3RpZmljYXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LApAQCAtMjI4MiwzICsyMzA5LDg3IEBACiAJbGlzdF9kZWwoJndhaXRfZW50cnktPmxpc3QpOwogCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5fYWduLm5vdGlmX3dhaXRfbG9jayk7CiB9CisKK2ludCBpd2xhZ25fc3RhcnRfZGV2aWNlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0OworCisJaWYgKGl3bF9wcmVwYXJlX2NhcmRfaHcocHJpdikpIHsKKwkJSVdMX1dBUk4ocHJpdiwgIkV4aXQgSFcgbm90IHJlYWR5XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogSWYgcGxhdGZvcm0ncyBSRl9LSUxMIHN3aXRjaCBpcyBOT1Qgc2V0IHRvIEtJTEwgKi8KKwlpZiAoaXdsX3JlYWQzMihwcml2LCBDU1JfR1BfQ05UUkwpICYgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0hXX1JGX0tJTExfU1cpCisJCWNsZWFyX2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cyk7CisJZWxzZQorCQlzZXRfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKTsKKworCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKSB7CisJCXdpcGh5X3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdi0+aHctPndpcGh5LCB0cnVlKTsKKwkJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCQlyZXR1cm4gLUVSRktJTEw7CisJfQorCisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgMHhGRkZGRkZGRik7CisKKwlyZXQgPSBpd2xhZ25faHdfbmljX2luaXQocHJpdik7CisJaWYgKHJldCkgeworCQlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gaW5pdCBuaWNcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIG1ha2Ugc3VyZSByZmtpbGwgaGFuZHNoYWtlIGJpdHMgYXJlIGNsZWFyZWQgKi8KKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsCisJCSAgICBDU1JfVUNPREVfRFJWX0dQMV9CSVRfQ01EX0JMT0NLRUQpOworCisJLyogY2xlYXIgKGFnYWluKSwgdGhlbiBlbmFibGUgaG9zdCBpbnRlcnJ1cHRzICovCisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgMHhGRkZGRkZGRik7CisJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCisJLyogcmVhbGx5IG1ha2Ugc3VyZSByZmtpbGwgaGFuZHNoYWtlIGJpdHMgYXJlIGNsZWFyZWQgKi8KKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKKworCXJldHVybiAwOworfQorCit2b2lkIGl3bGFnbl9zdG9wX2RldmljZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIHN0b3AgYW5kIHJlc2V0IHRoZSBvbi1ib2FyZCBwcm9jZXNzb3IgKi8KKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfUkVTRVQsIENTUl9SRVNFVF9SRUdfRkxBR19ORVZPX1JFU0VUKTsKKworCS8qIHRlbGwgdGhlIGRldmljZSB0byBzdG9wIHNlbmRpbmcgaW50ZXJydXB0cyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJaXdsX2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJaXdsX3N5bmNocm9uaXplX2lycShwcml2KTsKKworCS8qIGRldmljZSBnb2luZyBkb3duLCBTdG9wIHVzaW5nIElDVCB0YWJsZSAqLworCWl3bF9kaXNhYmxlX2ljdChwcml2KTsKKworCS8qCisJICogSWYgYSBIVyByZXN0YXJ0IGhhcHBlbnMgZHVyaW5nIGZpcm13YXJlIGxvYWRpbmcsCisJICogdGhlbiB0aGUgZmlybXdhcmUgbG9hZGluZyBtaWdodCBjYWxsIHRoaXMgZnVuY3Rpb24KKwkgKiBhbmQgbGF0ZXIgaXQgbWlnaHQgYmUgY2FsbGVkIGFnYWluIGR1ZSB0byB0aGUKKwkgKiByZXN0YXJ0LiBTbyBkb24ndCBwcm9jZXNzIGFnYWluIGlmIHRoZSBkZXZpY2UgaXMKKwkgKiBhbHJlYWR5IGRlYWQuCisJICovCisJaWYgKHRlc3RfYml0KFNUQVRVU19ERVZJQ0VfRU5BQkxFRCwgJnByaXYtPnN0YXR1cykpIHsKKyAgICAgICAgICAgICAgICBpd2xhZ25fdHhxX2N0eF9zdG9wKHByaXYpOworICAgICAgICAgICAgICAgIGl3bGFnbl9yeHFfc3RvcChwcml2KTsKKworICAgICAgICAgICAgICAgIC8qIFBvd2VyLWRvd24gZGV2aWNlJ3MgYnVzbWFzdGVyIERNQSBjbG9ja3MgKi8KKyAgICAgICAgICAgICAgICBpd2xfd3JpdGVfcHJwaChwcml2LCBBUE1HX0NMS19ESVNfUkVHLCBBUE1HX0NMS19WQUxfRE1BX0NMS19SUVQpOworICAgICAgICAgICAgICAgIHVkZWxheSg1KTsKKyAgICAgICAgfQorCisJLyogTWFrZSBzdXJlIChyZWR1bmRhbnQpIHdlJ3ZlIHJlbGVhc2VkIG91ciByZXF1ZXN0IHRvIHN0YXkgYXdha2UgKi8KKwlpd2xfY2xlYXJfYml0KHByaXYsIENTUl9HUF9DTlRSTCwgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKKworCS8qIFN0b3AgdGhlIGRldmljZSwgYW5kIHB1dCBpdCBpbiBsb3cgcG93ZXIgc3RhdGUgKi8KKwlpd2xfYXBtX3N0b3AocHJpdik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5jCmluZGV4IGQwM2I0NzMuLjkxZjI2NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTExNSwxMyArMTE1LDE4IEBACiAJLyogRklYTUU6UlM6ICAgICAgICAgIF5eICAgIHNob3VsZCBiZSBJTlYgKGxlZ2FjeSkgKi8KIH07CiAKK3N0YXRpYyBpbmxpbmUgdTggcnNfZXh0cmFjdF9yYXRlKHUzMiByYXRlX25fZmxhZ3MpCit7CisJcmV0dXJuICh1OCkocmF0ZV9uX2ZsYWdzICYgUkFURV9NQ1NfUkFURV9NU0spOworfQorCiBzdGF0aWMgaW50IGl3bF9od3JhdGVfdG9fcGxjcF9pZHgodTMyIHJhdGVfbl9mbGFncykKIHsKIAlpbnQgaWR4ID0gMDsKIAogCS8qIEhUIHJhdGUgZm9ybWF0ICovCiAJaWYgKHJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0hUX01TSykgewotCQlpZHggPSAocmF0ZV9uX2ZsYWdzICYgMHhmZik7CisJCWlkeCA9IHJzX2V4dHJhY3RfcmF0ZShyYXRlX25fZmxhZ3MpOwogCiAJCWlmIChpZHggPj0gSVdMX1JBVEVfTUlNTzNfNk1fUExDUCkKIAkJCWlkeCA9IGlkeCAtIElXTF9SQVRFX01JTU8zXzZNX1BMQ1A7CkBAIC0xMzgsNyArMTQzLDggQEAKIAkvKiBsZWdhY3kgcmF0ZSBmb3JtYXQsIHNlYXJjaCBmb3IgbWF0Y2ggaW4gdGFibGUgKi8KIAl9IGVsc2UgewogCQlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUoaXdsX3JhdGVzKTsgaWR4KyspCi0JCQlpZiAoaXdsX3JhdGVzW2lkeF0ucGxjcCA9PSAocmF0ZV9uX2ZsYWdzICYgMHhGRikpCisJCQlpZiAoaXdsX3JhdGVzW2lkeF0ucGxjcCA9PQorCQkJCQlyc19leHRyYWN0X3JhdGUocmF0ZV9uX2ZsYWdzKSkKIAkJCQlyZXR1cm4gaWR4OwogCX0KIApAQCAtMjM5LDExICsyNDUsNiBAQAogCiAjZGVmaW5lIE1DU19JTkRFWF9QRVJfU1RSRUFNCSg4KQogCi1zdGF0aWMgaW5saW5lIHU4IHJzX2V4dHJhY3RfcmF0ZSh1MzIgcmF0ZV9uX2ZsYWdzKQotewotCXJldHVybiAodTgpKHJhdGVfbl9mbGFncyAmIDB4RkYpOwotfQotCiBzdGF0aWMgdm9pZCByc19yYXRlX3NjYWxlX2NsZWFyX3dpbmRvdyhzdHJ1Y3QgaXdsX3JhdGVfc2NhbGVfZGF0YSAqd2luZG93KQogewogCXdpbmRvdy0+ZGF0YSA9IDA7CkBAIC0yNzcwLDE2ICsyNzcxLDEzIEBACiBzdGF0aWMgdm9pZCAqcnNfYWxsb2Nfc3RhKHZvaWQgKnByaXZfcmF0ZSwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJCSAgZ2ZwX3QgZ2ZwKQogewotCXN0cnVjdCBpd2xfbHFfc3RhICpscV9zdGE7CiAJc3RydWN0IGl3bF9zdGF0aW9uX3ByaXYgKnN0YV9wcml2ID0gKHN0cnVjdCBpd2xfc3RhdGlvbl9wcml2ICopIHN0YS0+ZHJ2X3ByaXY7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2OwogCiAJcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilwcml2X3JhdGU7CiAJSVdMX0RFQlVHX1JBVEUocHJpdiwgImNyZWF0ZSBzdGF0aW9uIHJhdGUgc2NhbGUgd2luZG93XG4iKTsKIAotCWxxX3N0YSA9ICZzdGFfcHJpdi0+bHFfc3RhOwotCi0JcmV0dXJuIGxxX3N0YTsKKwlyZXR1cm4gJnN0YV9wcml2LT5scV9zdGE7CiB9CiAKIC8qCkBAIC0yOTEyLDcgKzI5MTAsOCBAQAogCQlhbnRfdG9nZ2xlX2NudCA9IDE7CiAJCXJlcGVhdF9yYXRlID0gSVdMX05VTUJFUl9UUlk7CiAJfSBlbHNlIHsKLQkJcmVwZWF0X3JhdGUgPSBJV0xfSFRfTlVNQkVSX1RSWTsKKwkJcmVwZWF0X3JhdGUgPSBtaW4oSVdMX0hUX05VTUJFUl9UUlksCisJCQkJICBMSU5LX1FVQUxfQUdHX0RJU0FCTEVfU1RBUlRfREVGIC0gMSk7CiAJfQogCiAJbHFfY21kLT5nZW5lcmFsX3BhcmFtcy5taW1vX2RlbGltaXRlciA9CkBAIC0zMDg3LDcgKzMwODYsNyBAQAogCXN0cnVjdCBpd2xfbHFfc3RhICpscV9zdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2OwogCWNoYXIgYnVmWzY0XTsKLQlpbnQgYnVmX3NpemU7CisJc2l6ZV90IGJ1Zl9zaXplOwogCXUzMiBwYXJzZWRfcmF0ZTsKIAlzdHJ1Y3QgaXdsX3N0YXRpb25fcHJpdiAqc3RhX3ByaXYgPQogCQljb250YWluZXJfb2YobHFfc3RhLCBzdHJ1Y3QgaXdsX3N0YXRpb25fcHJpdiwgbHFfc3RhKTsKQEAgLTMyNTcsNyArMzI1Niw2IEBACiB7CiAJY2hhciBidWZmWzEyMF07CiAJaW50IGRlc2MgPSAwOwotCXNzaXplX3QgcmV0OwogCiAJc3RydWN0IGl3bF9scV9zdGEgKmxxX3N0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXY7CkBAIC0zMjc0LDggKzMyNzIsNyBAQAogCQkJCSJCaXQgUmF0ZT0gJWQgTWIvc1xuIiwKIAkJCQlpd2xfcmF0ZXNbbHFfc3RhLT5sYXN0X3R4cmF0ZV9pZHhdLmllZWUgPj4gMSk7CiAKLQlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZmYsIGRlc2MpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmZiwgZGVzYyk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJzX3N0YV9kYmdmc19yYXRlX3NjYWxlX2RhdGFfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuaAppbmRleCAxODQ4MjhjLi5iZGFlODJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC00MSwyMCArNDEsNiBAQAogCXU4IG5leHRfcnNfdGdnOyAgLyogbmV4dCByYXRlIHVzZWQgaW4gVEdHIHJzIGFsZ28gKi8KIH07CiAKLXN0cnVjdCBpd2wzOTQ1X3JhdGVfaW5mbyB7Ci0JdTggcGxjcDsJCS8qIHVDb2RlIEFQSTogIElXTF9SQVRFXzZNX1BMQ1AsIGV0Yy4gKi8KLQl1OCBpZWVlOwkJLyogTUFDIGhlYWRlcjogIElXTF9SQVRFXzZNX0lFRUUsIGV0Yy4gKi8KLQl1OCBwcmV2X2llZWU7CQkvKiBwcmV2aW91cyByYXRlIGluIElFRUUgc3BlZWRzICovCi0JdTggbmV4dF9pZWVlOwkJLyogbmV4dCByYXRlIGluIElFRUUgc3BlZWRzICovCi0JdTggcHJldl9yczsJCS8qIHByZXZpb3VzIHJhdGUgdXNlZCBpbiBycyBhbGdvICovCi0JdTggbmV4dF9yczsJCS8qIG5leHQgcmF0ZSB1c2VkIGluIHJzIGFsZ28gKi8KLQl1OCBwcmV2X3JzX3RnZzsJCS8qIHByZXZpb3VzIHJhdGUgdXNlZCBpbiBUR0cgcnMgYWxnbyAqLwotCXU4IG5leHRfcnNfdGdnOwkJLyogbmV4dCByYXRlIHVzZWQgaW4gVEdHIHJzIGFsZ28gKi8KLQl1OCB0YWJsZV9yc19pbmRleDsJLyogaW5kZXggaW4gcmF0ZSBzY2FsZSB0YWJsZSBjbWQgKi8KLQl1OCBwcmV2X3RhYmxlX3JzOwkvKiBwcmV2IGluIHJhdGUgdGFibGUgY21kICovCi19OwotCi0KIC8qCiAgKiBUaGVzZSBzZXJ2ZSBhcyBpbmRleGVzIGludG8KICAqIHN0cnVjdCBpd2xfcmF0ZV9pbmZvIGl3bF9yYXRlc1tJV0xfUkFURV9DT1VOVF07CkBAIC03NSw3ICs2MSw2IEBACiAJSVdMX1JBVEVfNjBNX0lOREVYLAogCUlXTF9SQVRFX0NPVU5ULCAvKkZJWE1FOlJTOmNoYW5nZSB0byBJV0xfUkFURV9JTkRFWF9DT1VOVCwqLwogCUlXTF9SQVRFX0NPVU5UX0xFR0FDWSA9IElXTF9SQVRFX0NPVU5UIC0gMSwJLyogRXhjbHVkaW5nIDYwTSAqLwotCUlXTF9SQVRFX0NPVU5UXzM5NDUgPSBJV0xfUkFURV9DT1VOVCAtIDEsCiAJSVdMX1JBVEVfSU5WTV9JTkRFWCA9IElXTF9SQVRFX0NPVU5ULAogCUlXTF9SQVRFX0lOVkFMSUQgPSBJV0xfUkFURV9DT1VOVCwKIH07CkBAIC05OCw3ICs4Myw2IEBACiAKIGVudW0gewogCUlXTF9GSVJTVF9PRkRNX1JBVEUgPSBJV0xfUkFURV82TV9JTkRFWCwKLQlJV0wzOV9MQVNUX09GRE1fUkFURSA9IElXTF9SQVRFXzU0TV9JTkRFWCwKIAlJV0xfTEFTVF9PRkRNX1JBVEUgPSBJV0xfUkFURV82ME1fSU5ERVgsCiAJSVdMX0ZJUlNUX0NDS19SQVRFID0gSVdMX1JBVEVfMU1fSU5ERVgsCiAJSVdMX0xBU1RfQ0NLX1JBVEUgPSBJV0xfUkFURV8xMU1fSU5ERVgsCkBAIC0yMTMsNyArMTk3LDYgQEAKIAkgSVdMX0NDS19CQVNJQ19SQVRFU19NQVNLKQogCiAjZGVmaW5lIElXTF9SQVRFU19NQVNLICgoMSA8PCBJV0xfUkFURV9DT1VOVCkgLSAxKQotI2RlZmluZSBJV0xfUkFURVNfTUFTS18zOTQ1ICgoMSA8PCBJV0xfUkFURV9DT1VOVF8zOTQ1KSAtIDEpCiAKICNkZWZpbmUgSVdMX0lOVkFMSURfVkFMVUUgICAgLTEKIApAQCAtNDUzLDE5ICs0MzYsOSBAQAogfQogCiAKLS8qKgotICogaXdsMzk0NV9yYXRlX3NjYWxlX2luaXQgLSBJbml0aWFsaXplIHRoZSByYXRlIHNjYWxlIHRhYmxlIGJhc2VkIG9uIGFzc29jIGluZm8KLSAqCi0gKiBUaGUgc3BlY2lmaWMgdGhyb3VnaHB1dCB0YWJsZSB1c2VkIGlzIGJhc2VkIG9uIHRoZSB0eXBlIG9mIG5ldHdvcmsKLSAqIHRoZSBhc3NvY2lhdGVkIHdpdGgsIGluY2x1ZGluZyBBLCBCLCBHLCBhbmQgRyB3LyBUR0cgcHJvdGVjdGlvbgotICovCi1leHRlcm4gdm9pZCBpd2wzOTQ1X3JhdGVfc2NhbGVfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgczMyIHN0YV9pZCk7Ci0KIC8qIEluaXRpYWxpemUgc3RhdGlvbidzIHJhdGUgc2NhbGluZyBpbmZvcm1hdGlvbiBhZnRlciBhZGRpbmcgc3RhdGlvbiAqLwogZXh0ZXJuIHZvaWQgaXdsX3JzX3JhdGVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHU4IHN0YV9pZCk7Ci1leHRlcm4gdm9pZCBpd2wzOTQ1X3JzX3JhdGVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHU4IHN0YV9pZCk7CiAKIC8qKgogICogaXdsX3JhdGVfY29udHJvbF9yZWdpc3RlciAtIFJlZ2lzdGVyIHRoZSByYXRlIGNvbnRyb2wgYWxnb3JpdGhtIGNhbGxiYWNrcwpAQCAtNDc4LDcgKzQ1MSw2IEBACiAgKgogICovCiBleHRlcm4gaW50IGl3bGFnbl9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIodm9pZCk7Ci1leHRlcm4gaW50IGl3bDM5NDVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKHZvaWQpOwogCiAvKioKICAqIGl3bF9yYXRlX2NvbnRyb2xfdW5yZWdpc3RlciAtIFVucmVnaXN0ZXIgdGhlIHJhdGUgY29udHJvbCBjYWxsYmFja3MKQEAgLTQ4Nyw2ICs0NTksNSBAQAogICogdGhlIGRyaXZlciBpcyB1bmxvYWRlZC4KICAqLwogZXh0ZXJuIHZvaWQgaXdsYWduX3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKHZvaWQpOwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9yYXRlX2NvbnRyb2xfdW5yZWdpc3Rlcih2b2lkKTsKIAogI2VuZGlmIC8qIF9faXdsX2Fnbl9fcnNfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJ4b24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1yeG9uLmMKaW5kZXggZGZkYmVhNi4uMDIzODc0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJ4b24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnhvbi5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJpd2wtc3RhLmgiCiAjaW5jbHVkZSAiaXdsLWNvcmUuaCIKICNpbmNsdWRlICJpd2wtYWduLWNhbGliLmgiCisjaW5jbHVkZSAiaXdsLWhlbHBlcnMuaCIKIAogc3RhdGljIGludCBpd2xhZ25fZGlzYWJsZV9ic3Moc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJICAgICAgc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCwKQEAgLTU3LDggKzU4LDkgQEAKIAl1OCBvbGRfZGV2X3R5cGUgPSBzZW5kLT5kZXZfdHlwZTsKIAlpbnQgcmV0OwogCi0JaXdsYWduX2luaXRfbm90aWZpY2F0aW9uX3dhaXQocHJpdiwgJmRpc2FibGVfd2FpdCwgTlVMTCwKLQkJCQkgICAgICBSRVBMWV9XSVBBTl9ERUFDVElWQVRJT05fQ09NUExFVEUpOworCWl3bGFnbl9pbml0X25vdGlmaWNhdGlvbl93YWl0KHByaXYsICZkaXNhYmxlX3dhaXQsCisJCQkJICAgICAgUkVQTFlfV0lQQU5fREVBQ1RJVkFUSU9OX0NPTVBMRVRFLAorCQkJCSAgICAgIE5VTEwsIE5VTEwpOwogCiAJc2VuZC0+ZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CiAJc2VuZC0+ZGV2X3R5cGUgPSBSWE9OX0RFVl9UWVBFX1AyUDsKQEAgLTcxLDEzICs3Myw5IEBACiAJCUlXTF9FUlIocHJpdiwgIkVycm9yIGRpc2FibGluZyBQQU4gKCVkKVxuIiwgcmV0KTsKIAkJaXdsYWduX3JlbW92ZV9ub3RpZmljYXRpb24ocHJpdiwgJmRpc2FibGVfd2FpdCk7CiAJfSBlbHNlIHsKLQkJc2lnbmVkIGxvbmcgd2FpdF9yZXM7Ci0KLQkJd2FpdF9yZXMgPSBpd2xhZ25fd2FpdF9ub3RpZmljYXRpb24ocHJpdiwgJmRpc2FibGVfd2FpdCwgSFopOwotCQlpZiAod2FpdF9yZXMgPT0gMCkgeworCQlyZXQgPSBpd2xhZ25fd2FpdF9ub3RpZmljYXRpb24ocHJpdiwgJmRpc2FibGVfd2FpdCwgSFopOworCQlpZiAocmV0KQogCQkJSVdMX0VSUihwcml2LCAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIFBBTiBkaXNhYmxlXG4iKTsKLQkJCXJldCA9IC1FSU87Ci0JCX0KIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTIzLDYgKzEyMSwxNTEgQEAKIAlyZXR1cm4gaXdsYWduX3NlbmRfYmVhY29uX2NtZChwcml2KTsKIH0KIAorc3RhdGljIGludCBpd2xhZ25fc2VuZF9yeG9uX2Fzc29jKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgIHN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHgpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGl3bF9yeG9uX2Fzc29jX2NtZCByeG9uX2Fzc29jOworCWNvbnN0IHN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24xID0gJmN0eC0+c3RhZ2luZzsKKwljb25zdCBzdHJ1Y3QgaXdsX3J4b25fY21kICpyeG9uMiA9ICZjdHgtPmFjdGl2ZTsKKworCWlmICgocnhvbjEtPmZsYWdzID09IHJ4b24yLT5mbGFncykgJiYKKwkgICAgKHJ4b24xLT5maWx0ZXJfZmxhZ3MgPT0gcnhvbjItPmZpbHRlcl9mbGFncykgJiYKKwkgICAgKHJ4b24xLT5jY2tfYmFzaWNfcmF0ZXMgPT0gcnhvbjItPmNja19iYXNpY19yYXRlcykgJiYKKwkgICAgKHJ4b24xLT5vZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXMgPT0KKwkgICAgIHJ4b24yLT5vZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXMpICYmCisJICAgIChyeG9uMS0+b2ZkbV9odF9kdWFsX3N0cmVhbV9iYXNpY19yYXRlcyA9PQorCSAgICAgcnhvbjItPm9mZG1faHRfZHVhbF9zdHJlYW1fYmFzaWNfcmF0ZXMpICYmCisJICAgIChyeG9uMS0+b2ZkbV9odF90cmlwbGVfc3RyZWFtX2Jhc2ljX3JhdGVzID09CisJICAgICByeG9uMi0+b2ZkbV9odF90cmlwbGVfc3RyZWFtX2Jhc2ljX3JhdGVzKSAmJgorCSAgICAocnhvbjEtPmFjcXVpc2l0aW9uX2RhdGEgPT0gcnhvbjItPmFjcXVpc2l0aW9uX2RhdGEpICYmCisJICAgIChyeG9uMS0+cnhfY2hhaW4gPT0gcnhvbjItPnJ4X2NoYWluKSAmJgorCSAgICAocnhvbjEtPm9mZG1fYmFzaWNfcmF0ZXMgPT0gcnhvbjItPm9mZG1fYmFzaWNfcmF0ZXMpKSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJVc2luZyBjdXJyZW50IFJYT05fQVNTT0MuICBOb3QgcmVzZW5kaW5nLlxuIik7CisJCXJldHVybiAwOworCX0KKworCXJ4b25fYXNzb2MuZmxhZ3MgPSBjdHgtPnN0YWdpbmcuZmxhZ3M7CisJcnhvbl9hc3NvYy5maWx0ZXJfZmxhZ3MgPSBjdHgtPnN0YWdpbmcuZmlsdGVyX2ZsYWdzOworCXJ4b25fYXNzb2Mub2ZkbV9iYXNpY19yYXRlcyA9IGN0eC0+c3RhZ2luZy5vZmRtX2Jhc2ljX3JhdGVzOworCXJ4b25fYXNzb2MuY2NrX2Jhc2ljX3JhdGVzID0gY3R4LT5zdGFnaW5nLmNja19iYXNpY19yYXRlczsKKwlyeG9uX2Fzc29jLnJlc2VydmVkMSA9IDA7CisJcnhvbl9hc3NvYy5yZXNlcnZlZDIgPSAwOworCXJ4b25fYXNzb2MucmVzZXJ2ZWQzID0gMDsKKwlyeG9uX2Fzc29jLm9mZG1faHRfc2luZ2xlX3N0cmVhbV9iYXNpY19yYXRlcyA9CisJICAgIGN0eC0+c3RhZ2luZy5vZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXM7CisJcnhvbl9hc3NvYy5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzID0KKwkgICAgY3R4LT5zdGFnaW5nLm9mZG1faHRfZHVhbF9zdHJlYW1fYmFzaWNfcmF0ZXM7CisJcnhvbl9hc3NvYy5yeF9jaGFpbl9zZWxlY3RfZmxhZ3MgPSBjdHgtPnN0YWdpbmcucnhfY2hhaW47CisJcnhvbl9hc3NvYy5vZmRtX2h0X3RyaXBsZV9zdHJlYW1fYmFzaWNfcmF0ZXMgPQorCQkgY3R4LT5zdGFnaW5nLm9mZG1faHRfdHJpcGxlX3N0cmVhbV9iYXNpY19yYXRlczsKKwlyeG9uX2Fzc29jLmFjcXVpc2l0aW9uX2RhdGEgPSBjdHgtPnN0YWdpbmcuYWNxdWlzaXRpb25fZGF0YTsKKworCXJldCA9IGl3bF9zZW5kX2NtZF9wZHVfYXN5bmMocHJpdiwgY3R4LT5yeG9uX2Fzc29jX2NtZCwKKwkJCQkgICAgIHNpemVvZihyeG9uX2Fzc29jKSwgJnJ4b25fYXNzb2MsIE5VTEwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGl3bGFnbl9yeG9uX2Rpc2Nvbm4oc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgICAgIHN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHgpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgaXdsX3J4b25fY21kICphY3RpdmUgPSAodm9pZCAqKSZjdHgtPmFjdGl2ZTsKKworCWlmIChjdHgtPmN0eGlkID09IElXTF9SWE9OX0NUWF9CU1MpCisJCXJldCA9IGl3bGFnbl9kaXNhYmxlX2Jzcyhwcml2LCBjdHgsICZjdHgtPnN0YWdpbmcpOworCWVsc2UKKwkJcmV0ID0gaXdsYWduX2Rpc2FibGVfcGFuKHByaXYsIGN0eCwgJmN0eC0+c3RhZ2luZyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogVW4tYXNzb2MgUlhPTiBjbGVhcnMgdGhlIHN0YXRpb24gdGFibGUgYW5kIFdFUAorCSAqIGtleXMsIHNvIHdlIGhhdmUgdG8gcmVzdG9yZSB0aG9zZSBhZnRlcndhcmRzLgorCSAqLworCWl3bF9jbGVhcl91Y29kZV9zdGF0aW9ucyhwcml2LCBjdHgpOworCWl3bF9yZXN0b3JlX3N0YXRpb25zKHByaXYsIGN0eCk7CisJcmV0ID0gaXdsX3Jlc3RvcmVfZGVmYXVsdF93ZXBfa2V5cyhwcml2LCBjdHgpOworCWlmIChyZXQpIHsKKwkJSVdMX0VSUihwcml2LCAiRmFpbGVkIHRvIHJlc3RvcmUgV0VQIGtleXMgKCVkKVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwltZW1jcHkoYWN0aXZlLCAmY3R4LT5zdGFnaW5nLCBzaXplb2YoKmFjdGl2ZSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGl3bGFnbl9yeG9uX2Nvbm5lY3Qoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgICAgIHN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHgpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgaXdsX3J4b25fY21kICphY3RpdmUgPSAodm9pZCAqKSZjdHgtPmFjdGl2ZTsKKworCS8qIFJYT04gdGltaW5nIG11c3QgYmUgYmVmb3JlIGFzc29jaWF0ZWQgUlhPTiAqLworCXJldCA9IGl3bF9zZW5kX3J4b25fdGltaW5nKHByaXYsIGN0eCk7CisJaWYgKHJldCkgeworCQlJV0xfRVJSKHByaXYsICJGYWlsZWQgdG8gc2VuZCB0aW1pbmcgKCVkKSFcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCS8qIFFvUyBpbmZvIG1heSBiZSBjbGVhcmVkIGJ5IHByZXZpb3VzIHVuLWFzc29jIFJYT04gKi8KKwlpd2xhZ25fdXBkYXRlX3Fvcyhwcml2LCBjdHgpOworCisJLyoKKwkgKiBXZSdsbCBydW4gaW50byB0aGlzIGNvZGUgcGF0aCB3aGVuIGJlYWNvbmluZyBpcworCSAqIGVuYWJsZWQsIGJ1dCB0aGVuIHdlIGFsc28gbmVlZCB0byBzZW5kIHRoZSBiZWFjb24KKwkgKiB0byB0aGUgZGV2aWNlLgorCSAqLworCWlmIChjdHgtPnZpZiAmJiAoY3R4LT52aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApKSB7CisJCXJldCA9IGl3bGFnbl91cGRhdGVfYmVhY29uKHByaXYsIGN0eC0+dmlmKTsKKwkJaWYgKHJldCkgeworCQkJSVdMX0VSUihwcml2LAorCQkJCSJFcnJvciBzZW5kaW5nIHJlcXVpcmVkIGJlYWNvbiAoJWQpIVxuIiwKKwkJCQlyZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXByaXYtPnN0YXJ0X2NhbGliID0gMDsKKwkvKgorCSAqIEFwcGx5IHRoZSBuZXcgY29uZmlndXJhdGlvbi4KKwkgKgorCSAqIEFzc29jaWF0ZWQgUlhPTiBkb2Vzbid0IGNsZWFyIHRoZSBzdGF0aW9uIHRhYmxlIGluIHVDb2RlLAorCSAqIHNvIHdlIGRvbid0IG5lZWQgdG8gcmVzdG9yZSBzdGF0aW9ucyBldGMuIGFmdGVyIHRoaXMuCisJICovCisJcmV0ID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBjdHgtPnJ4b25fY21kLAorCQkgICAgICBzaXplb2Yoc3RydWN0IGl3bF9yeG9uX2NtZCksICZjdHgtPnN0YWdpbmcpOworCWlmIChyZXQpIHsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3Igc2V0dGluZyBuZXcgUlhPTiAoJWQpXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwltZW1jcHkoYWN0aXZlLCAmY3R4LT5zdGFnaW5nLCBzaXplb2YoKmFjdGl2ZSkpOworCisJaXdsX3JlcHJvZ3JhbV9hcF9zdGEocHJpdiwgY3R4KTsKKworCS8qIElCU1MgYmVhY29uIG5lZWRzIHRvIGJlIHNlbnQgYWZ0ZXIgc2V0dGluZyBhc3NvYyAqLworCWlmIChjdHgtPnZpZiAmJiAoY3R4LT52aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpKQorCQlpZiAoaXdsYWduX3VwZGF0ZV9iZWFjb24ocHJpdiwgY3R4LT52aWYpKQorCQkJSVdMX0VSUihwcml2LCAiRXJyb3Igc2VuZGluZyBJQlNTIGJlYWNvblxuIik7CisJaXdsX2luaXRfc2Vuc2l0aXZpdHkocHJpdik7CisKKwkvKgorCSAqIElmIHdlIGlzc3VlIGEgbmV3IFJYT04gY29tbWFuZCB3aGljaCByZXF1aXJlZCBhIHR1bmUgdGhlbgorCSAqIHdlIG11c3Qgc2VuZCBhIG5ldyBUWFBPV0VSIGNvbW1hbmQgb3Igd2Ugd29uJ3QgYmUgYWJsZSB0bworCSAqIFR4IGFueSBmcmFtZXMuCisJICoKKwkgKiBJdCdzIGV4cGVjdGVkIHdlIHNldCBwb3dlciBoZXJlIGlmIGNoYW5uZWwgaXMgY2hhbmdpbmcuCisJICovCisJcmV0ID0gaXdsX3NldF90eF9wb3dlcihwcml2LCBwcml2LT50eF9wb3dlcl9uZXh0LCB0cnVlKTsKKwlpZiAocmV0KSB7CisJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNlbmRpbmcgVFggcG93ZXIgKCVkKVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogaXdsYWduX2NvbW1pdF9yeG9uIC0gY29tbWl0IHN0YWdpbmdfcnhvbiB0byBoYXJkd2FyZQogICoKQEAgLTEzMCw2ICsyNzMsMTYgQEAKICAqIHRoZSBhY3RpdmVfcnhvbiBzdHJ1Y3R1cmUgaXMgdXBkYXRlZCB3aXRoIHRoZSBuZXcgZGF0YS4gIFRoaXMKICAqIGZ1bmN0aW9uIGNvcnJlY3RseSB0cmFuc2l0aW9ucyBvdXQgb2YgdGhlIFJYT05fQVNTT0NfTVNLIHN0YXRlIGlmCiAgKiBhIEhXIHR1bmUgaXMgcmVxdWlyZWQgYmFzZWQgb24gdGhlIFJYT04gc3RydWN0dXJlIGNoYW5nZXMuCisgKgorICogVGhlIGNvbm5lY3QvZGlzY29ubmVjdCBmbG93IHNob3VsZCBiZSBhcyB0aGUgZm9sbG93aW5nOgorICoKKyAqIDEuIG1ha2Ugc3VyZSBzZW5kIFJYT04gY29tbWFuZCB3aXRoIGFzc29jaWF0aW9uIGJpdCB1bnNldCBpZiBub3QgY29ubmVjdAorICoJdGhpcyBzaG91bGQgaW5jbHVkZSB0aGUgY2hhbm5lbCBhbmQgdGhlIGJhbmQgZm9yIHRoZSBjYW5kaWRhdGUKKyAqCXRvIGJlIGNvbm5lY3RlZCB0bworICogMi4gQWRkIFN0YXRpb24gYmVmb3JlIFJYT04gYXNzb2NpYXRpb24gd2l0aCB0aGUgQVAKKyAqIDMuIFJYT05fdGltaW5nIGhhcyB0byBzZW5kIGJlZm9yZSBSWE9OIGZvciBjb25uZWN0aW9uCisgKiA0LiBmdWxsIFJYT04gY29tbWFuZCAtIGFzc29jaWF0ZWQgYml0IHNldAorICogNS4gdXNlIFJYT05fQVNTT0MgY29tbWFuZCB0byB1cGRhdGUgYW55IGZsYWdzIGNoYW5nZXMKICAqLwogaW50IGl3bGFnbl9jb21taXRfcnhvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHgpCiB7CkBAIC0xNzksNiArMzMyLDcgQEAKIAllbHNlCiAJCWN0eC0+c3RhZ2luZy5mbGFncyAmPSB+UlhPTl9GTEdfU0hPUlRfU0xPVF9NU0s7CiAKKwlpd2xfcHJpbnRfcnhfY29uZmlnX2NtZChwcml2LCBjdHgpOwogCXJldCA9IGl3bF9jaGVja19yeG9uX2NtZChwcml2LCBjdHgpOwogCWlmIChyZXQpIHsKIAkJSVdMX0VSUihwcml2LCAiSW52YWxpZCBSWE9OIGNvbmZpZ3VyYXRpb24uIE5vdCBjb21taXR0aW5nLlxuIik7CkBAIC0yMDIsMTQgKzM1NiwxMyBAQAogCSAqIGFuZCBvdGhlciBmbGFncyBmb3IgdGhlIGN1cnJlbnQgcmFkaW8gY29uZmlndXJhdGlvbi4KIAkgKi8KIAlpZiAoIWl3bF9mdWxsX3J4b25fcmVxdWlyZWQocHJpdiwgY3R4KSkgewotCQlyZXQgPSBpd2xfc2VuZF9yeG9uX2Fzc29jKHByaXYsIGN0eCk7CisJCXJldCA9IGl3bGFnbl9zZW5kX3J4b25fYXNzb2MocHJpdiwgY3R4KTsKIAkJaWYgKHJldCkgewogCQkJSVdMX0VSUihwcml2LCAiRXJyb3Igc2V0dGluZyBSWE9OX0FTU09DICglZClcbiIsIHJldCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAKIAkJbWVtY3B5KGFjdGl2ZSwgJmN0eC0+c3RhZ2luZywgc2l6ZW9mKCphY3RpdmUpKTsKLQkJaXdsX3ByaW50X3J4X2NvbmZpZ19jbWQocHJpdiwgY3R4KTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yMTksNyArMzcyLDcgQEAKIAkJCXJldHVybiByZXQ7CiAJfQogCi0JaXdsX3NldF9yeG9uX2h3Y3J5cHRvKHByaXYsIGN0eCwgIXByaXYtPmNmZy0+bW9kX3BhcmFtcy0+c3dfY3J5cHRvKTsKKwlpd2xfc2V0X3J4b25faHdjcnlwdG8ocHJpdiwgY3R4LCAhaXdsYWduX21vZF9wYXJhbXMuc3dfY3J5cHRvKTsKIAogCUlXTF9ERUJVR19JTkZPKHByaXYsCiAJCSAgICAgICAiR29pbmcgdG8gY29tbWl0IFJYT05cbiIKQEAgLTIzNyw5MiArMzkwLDEzIEBACiAJICogc2V0IHVwIGZpbHRlcnMgaW4gdGhlIGRldmljZS4KIAkgKi8KIAlpZiAoKG9sZF9hc3NvYyAmJiBuZXdfYXNzb2MpIHx8ICFuZXdfYXNzb2MpIHsKLQkJaWYgKGN0eC0+Y3R4aWQgPT0gSVdMX1JYT05fQ1RYX0JTUykKLQkJCXJldCA9IGl3bGFnbl9kaXNhYmxlX2Jzcyhwcml2LCBjdHgsICZjdHgtPnN0YWdpbmcpOwotCQllbHNlCi0JCQlyZXQgPSBpd2xhZ25fZGlzYWJsZV9wYW4ocHJpdiwgY3R4LCAmY3R4LT5zdGFnaW5nKTsKKwkJcmV0ID0gaXdsYWduX3J4b25fZGlzY29ubihwcml2LCBjdHgpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKLQotCQltZW1jcHkoYWN0aXZlLCAmY3R4LT5zdGFnaW5nLCBzaXplb2YoKmFjdGl2ZSkpOwotCi0JCS8qCi0JCSAqIFVuLWFzc29jIFJYT04gY2xlYXJzIHRoZSBzdGF0aW9uIHRhYmxlIGFuZCBXRVAKLQkJICoga2V5cywgc28gd2UgaGF2ZSB0byByZXN0b3JlIHRob3NlIGFmdGVyd2FyZHMuCi0JCSAqLwotCQlpd2xfY2xlYXJfdWNvZGVfc3RhdGlvbnMocHJpdiwgY3R4KTsKLQkJaXdsX3Jlc3RvcmVfc3RhdGlvbnMocHJpdiwgY3R4KTsKLQkJcmV0ID0gaXdsX3Jlc3RvcmVfZGVmYXVsdF93ZXBfa2V5cyhwcml2LCBjdHgpOwotCQlpZiAocmV0KSB7Ci0JCQlJV0xfRVJSKHByaXYsICJGYWlsZWQgdG8gcmVzdG9yZSBXRVAga2V5cyAoJWQpXG4iLCByZXQpOwotCQkJcmV0dXJuIHJldDsKLQkJfQogCX0KIAotCS8qIFJYT04gdGltaW5nIG11c3QgYmUgYmVmb3JlIGFzc29jaWF0ZWQgUlhPTiAqLwotCXJldCA9IGl3bF9zZW5kX3J4b25fdGltaW5nKHByaXYsIGN0eCk7Ci0JaWYgKHJldCkgewotCQlJV0xfRVJSKHByaXYsICJGYWlsZWQgdG8gc2VuZCB0aW1pbmcgKCVkKSFcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JaWYgKG5ld19hc3NvYykgewotCQkvKiBRb1MgaW5mbyBtYXkgYmUgY2xlYXJlZCBieSBwcmV2aW91cyB1bi1hc3NvYyBSWE9OICovCi0JCWl3bGFnbl91cGRhdGVfcW9zKHByaXYsIGN0eCk7Ci0KLQkJLyoKLQkJICogV2UnbGwgcnVuIGludG8gdGhpcyBjb2RlIHBhdGggd2hlbiBiZWFjb25pbmcgaXMKLQkJICogZW5hYmxlZCwgYnV0IHRoZW4gd2UgYWxzbyBuZWVkIHRvIHNlbmQgdGhlIGJlYWNvbgotCQkgKiB0byB0aGUgZGV2aWNlLgotCQkgKi8KLQkJaWYgKGN0eC0+dmlmICYmIChjdHgtPnZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkpIHsKLQkJCXJldCA9IGl3bGFnbl91cGRhdGVfYmVhY29uKHByaXYsIGN0eC0+dmlmKTsKLQkJCWlmIChyZXQpIHsKLQkJCQlJV0xfRVJSKHByaXYsCi0JCQkJCSJFcnJvciBzZW5kaW5nIHJlcXVpcmVkIGJlYWNvbiAoJWQpIVxuIiwKLQkJCQkJcmV0KTsKLQkJCQlyZXR1cm4gcmV0OwotCQkJfQotCQl9Ci0KLQkJcHJpdi0+c3RhcnRfY2FsaWIgPSAwOwotCQkvKgotCQkgKiBBcHBseSB0aGUgbmV3IGNvbmZpZ3VyYXRpb24uCi0JCSAqCi0JCSAqIEFzc29jaWF0ZWQgUlhPTiBkb2Vzbid0IGNsZWFyIHRoZSBzdGF0aW9uIHRhYmxlIGluIHVDb2RlLAotCQkgKiBzbyB3ZSBkb24ndCBuZWVkIHRvIHJlc3RvcmUgc3RhdGlvbnMgZXRjLiBhZnRlciB0aGlzLgotCQkgKi8KLQkJcmV0ID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBjdHgtPnJ4b25fY21kLAotCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpd2xfcnhvbl9jbWQpLCAmY3R4LT5zdGFnaW5nKTsKLQkJaWYgKHJldCkgewotCQkJSVdMX0VSUihwcml2LCAiRXJyb3Igc2V0dGluZyBuZXcgUlhPTiAoJWQpXG4iLCByZXQpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCQltZW1jcHkoYWN0aXZlLCAmY3R4LT5zdGFnaW5nLCBzaXplb2YoKmFjdGl2ZSkpOwotCi0JCWl3bF9yZXByb2dyYW1fYXBfc3RhKHByaXYsIGN0eCk7Ci0KLQkJLyogSUJTUyBiZWFjb24gbmVlZHMgdG8gYmUgc2VudCBhZnRlciBzZXR0aW5nIGFzc29jICovCi0JCWlmIChjdHgtPnZpZiAmJiAoY3R4LT52aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpKQotCQkJaWYgKGl3bGFnbl91cGRhdGVfYmVhY29uKHByaXYsIGN0eC0+dmlmKSkKLQkJCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZW5kaW5nIElCU1MgYmVhY29uXG4iKTsKLQl9Ci0KLQlpd2xfcHJpbnRfcnhfY29uZmlnX2NtZChwcml2LCBjdHgpOwotCi0JaXdsX2luaXRfc2Vuc2l0aXZpdHkocHJpdik7Ci0KLQkvKgotCSAqIElmIHdlIGlzc3VlIGEgbmV3IFJYT04gY29tbWFuZCB3aGljaCByZXF1aXJlZCBhIHR1bmUgdGhlbiB3ZSBtdXN0Ci0JICogc2VuZCBhIG5ldyBUWFBPV0VSIGNvbW1hbmQgb3Igd2Ugd29uJ3QgYmUgYWJsZSB0byBUeCBhbnkgZnJhbWVzLgotCSAqCi0JICogSXQncyBleHBlY3RlZCB3ZSBzZXQgcG93ZXIgaGVyZSBpZiBjaGFubmVsIGlzIGNoYW5naW5nLgotCSAqLwotCXJldCA9IGl3bF9zZXRfdHhfcG93ZXIocHJpdiwgcHJpdi0+dHhfcG93ZXJfbmV4dCwgdHJ1ZSk7Ci0JaWYgKHJldCkgewotCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZW5kaW5nIFRYIHBvd2VyICglZClcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQorCWlmIChuZXdfYXNzb2MpCisJCXJldHVybiBpd2xhZ25fcnhvbl9jb25uZWN0KHByaXYsIGN0eCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMzNSw3ICs0MDksNiBAQAogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGNvbmYtPmNoYW5uZWw7CiAJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CiAJaW50IHJldCA9IDA7Ci0JYm9vbCBodF9jaGFuZ2VkW05VTV9JV0xfUlhPTl9DVFhdID0ge307CiAKIAlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImNoYW5nZWQgJSN4IiwgY2hhbmdlZCk7CiAKQEAgLTM4MywxMCArNDU2LDggQEAKIAogCQlmb3JfZWFjaF9jb250ZXh0KHByaXYsIGN0eCkgewogCQkJLyogQ29uZmlndXJlIEhUNDAgY2hhbm5lbHMgKi8KLQkJCWlmIChjdHgtPmh0LmVuYWJsZWQgIT0gY29uZl9pc19odChjb25mKSkgeworCQkJaWYgKGN0eC0+aHQuZW5hYmxlZCAhPSBjb25mX2lzX2h0KGNvbmYpKQogCQkJCWN0eC0+aHQuZW5hYmxlZCA9IGNvbmZfaXNfaHQoY29uZik7Ci0JCQkJaHRfY2hhbmdlZFtjdHgtPmN0eGlkXSA9IHRydWU7Ci0JCQl9CiAKIAkJCWlmIChjdHgtPmh0LmVuYWJsZWQpIHsKIAkJCQlpZiAoY29uZl9pc19odDQwX21pbnVzKGNvbmYpKSB7CkBAIC00NTUsOCArNTI2LDYgQEAKIAkJaWYgKCFtZW1jbXAoJmN0eC0+c3RhZ2luZywgJmN0eC0+YWN0aXZlLCBzaXplb2YoY3R4LT5zdGFnaW5nKSkpCiAJCQljb250aW51ZTsKIAkJaXdsYWduX2NvbW1pdF9yeG9uKHByaXYsIGN0eCk7Ci0JCWlmIChodF9jaGFuZ2VkW2N0eC0+Y3R4aWRdKQotCQkJaXdsYWduX3VwZGF0ZV9xb3MocHJpdiwgY3R4KTsKIAl9CiAgb3V0OgogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwpAQCAtNjAwLDYgKzY2OSwxOCBAQAogCQkJcHJpdi0+dGltZXN0YW1wID0gYnNzX2NvbmYtPnRpbWVzdGFtcDsKIAkJCWN0eC0+c3RhZ2luZy5maWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIElmIHdlIGRpc2Fzc29jaWF0ZSB3aGlsZSB0aGVyZSBhcmUgcGVuZGluZworCQkJICogZnJhbWVzLCBqdXN0IHdha2UgdXAgdGhlIHF1ZXVlcyBhbmQgbGV0IHRoZQorCQkJICogZnJhbWVzICJlc2NhcGUiIC4uLiBUaGlzIHNob3VsZG4ndCByZWFsbHkKKwkJCSAqIGJlIGhhcHBlbmluZyB0byBzdGFydCB3aXRoLCBidXQgd2Ugc2hvdWxkCisJCQkgKiBub3QgZ2V0IHN0dWNrIGluIHRoaXMgY2FzZSBlaXRoZXIgc2luY2UgaXQKKwkJCSAqIGNhbiBoYXBwZW4gaWYgdXNlcnNwYWNlIGdldHMgY29uZnVzZWQuCisJCQkgKi8KKwkJCWlmIChjdHgtPmxhc3RfdHhfcmVqZWN0ZWQpIHsKKwkJCQljdHgtPmxhc3RfdHhfcmVqZWN0ZWQgPSBmYWxzZTsKKwkJCQlpd2xfd2FrZV9hbnlfcXVldWUocHJpdiwgY3R4KTsKKwkJCX0KIAkJCWN0eC0+c3RhZ2luZy5maWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0FTU09DX01TSzsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1zdGEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1zdGEuYwppbmRleCAzNWYwODVhLi4wNzkyNzVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tc3RhLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXN0YS5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCkBAIC00NzQsNyArNDc0LDcgQEAKIAltZW1zZXQoJnByaXYtPnN0YXRpb25zW3N0YV9pZF0ua2V5aW5mbywgMCwKIAkJCQkJc2l6ZW9mKHN0cnVjdCBpd2xfaHdfa2V5KSk7CiAJbWVtc2V0KCZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXksIDAsCi0JCQkJCXNpemVvZihzdHJ1Y3QgaXdsNDk2NV9rZXlpbmZvKSk7CisJCQkJCXNpemVvZihzdHJ1Y3QgaXdsX2tleWluZm8pKTsKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X2ZsYWdzID0KIAkJCVNUQV9LRVlfRkxHX05PX0VOQyB8IFNUQV9LRVlfRkxHX0lOVkFMSUQ7CiAJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleV9vZmZzZXQgPSBXRVBfSU5WQUxJRF9PRkZTRVQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tdHQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi10dC5jCmluZGV4IGUzYTgyMTYuLjM0OGY3NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi10dC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi10dC5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tdHQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi10dC5oCmluZGV4IGQ1NTA2MDQuLmQxMThlZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi10dC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi10dC5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi10eC5jCmluZGV4IGE3MDlkMDUuLjM0MmRlNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi10eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi10eC5jCkBAIC0yLDcgKzIsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC05OCw5ICs5OCw5IEBACiAvKioKICAqIGl3bGFnbl90eHFfdXBkYXRlX2J5dGVfY250X3RibCAtIFNldCB1cCBlbnRyeSBpbiBUeCBieXRlLWNvdW50IGFycmF5CiAgKi8KLXZvaWQgaXdsYWduX3R4cV91cGRhdGVfYnl0ZV9jbnRfdGJsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkJICAgIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwKLQkJCQkJICAgIHUxNiBieXRlX2NudCkKK3N0YXRpYyB2b2lkIGl3bGFnbl90eHFfdXBkYXRlX2J5dGVfY250X3RibChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJCSAgIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwKKwkJCQkJICAgdTE2IGJ5dGVfY250KQogewogCXN0cnVjdCBpd2xhZ25fc2NkX2JjX3RibCAqc2NkX2JjX3RibCA9IHByaXYtPnNjZF9iY190YmxzLmFkZHI7CiAJaW50IHdyaXRlX3B0ciA9IHR4cS0+cS53cml0ZV9wdHI7CkBAIC0xMTIsMjEgKzExMiwxOSBAQAogCiAJV0FSTl9PTihsZW4gPiAweEZGRiB8fCB3cml0ZV9wdHIgPj0gVEZEX1FVRVVFX1NJWkVfTUFYKTsKIAotCWlmICh0eHFfaWQgIT0gcHJpdi0+Y21kX3F1ZXVlKSB7Ci0JCXN0YV9pZCA9IHR4cS0+Y21kW3R4cS0+cS53cml0ZV9wdHJdLT5jbWQudHguc3RhX2lkOwotCQlzZWNfY3RsID0gdHhxLT5jbWRbdHhxLT5xLndyaXRlX3B0cl0tPmNtZC50eC5zZWNfY3RsOworCXN0YV9pZCA9IHR4cS0+Y21kW3R4cS0+cS53cml0ZV9wdHJdLT5jbWQudHguc3RhX2lkOworCXNlY19jdGwgPSB0eHEtPmNtZFt0eHEtPnEud3JpdGVfcHRyXS0+Y21kLnR4LnNlY19jdGw7CiAKLQkJc3dpdGNoIChzZWNfY3RsICYgVFhfQ01EX1NFQ19NU0spIHsKLQkJY2FzZSBUWF9DTURfU0VDX0NDTToKLQkJCWxlbiArPSBDQ01QX01JQ19MRU47Ci0JCQlicmVhazsKLQkJY2FzZSBUWF9DTURfU0VDX1RLSVA6Ci0JCQlsZW4gKz0gVEtJUF9JQ1ZfTEVOOwotCQkJYnJlYWs7Ci0JCWNhc2UgVFhfQ01EX1NFQ19XRVA6Ci0JCQlsZW4gKz0gV0VQX0lWX0xFTiArIFdFUF9JQ1ZfTEVOOwotCQkJYnJlYWs7Ci0JCX0KKwlzd2l0Y2ggKHNlY19jdGwgJiBUWF9DTURfU0VDX01TSykgeworCWNhc2UgVFhfQ01EX1NFQ19DQ006CisJCWxlbiArPSBDQ01QX01JQ19MRU47CisJCWJyZWFrOworCWNhc2UgVFhfQ01EX1NFQ19US0lQOgorCQlsZW4gKz0gVEtJUF9JQ1ZfTEVOOworCQlicmVhazsKKwljYXNlIFRYX0NNRF9TRUNfV0VQOgorCQlsZW4gKz0gV0VQX0lWX0xFTiArIFdFUF9JQ1ZfTEVOOworCQlicmVhazsKIAl9CiAKIAliY19lbnQgPSBjcHVfdG9fbGUxNigobGVuICYgMHhGRkYpIHwgKHN0YV9pZCA8PCAxMikpOwpAQCAtMTM4LDggKzEzNiw4IEBACiAJCQl0ZmRfb2Zmc2V0W1RGRF9RVUVVRV9TSVpFX01BWCArIHdyaXRlX3B0cl0gPSBiY19lbnQ7CiB9CiAKLXZvaWQgaXdsYWduX3R4cV9pbnZhbF9ieXRlX2NudF90Ymwoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCQkgICBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpCitzdGF0aWMgdm9pZCBpd2xhZ25fdHhxX2ludmFsX2J5dGVfY250X3RibChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJCSAgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKQogewogCXN0cnVjdCBpd2xhZ25fc2NkX2JjX3RibCAqc2NkX2JjX3RibCA9IHByaXYtPnNjZF9iY190YmxzLmFkZHI7CiAJaW50IHR4cV9pZCA9IHR4cS0+cS5pZDsKQEAgLTIyMiwxMyArMjIwLDggQEAKIAkJICAgICAgIHNjZF9yZXRyeSA/ICJCQSIgOiAiQUMvQ01EIiwgdHhxX2lkLCB0eF9maWZvX2lkKTsKIH0KIAotaW50IGl3bGFnbl90eHFfYWdnX2VuYWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCB0eHFfaWQsCi0JCQkgIGludCB0eF9maWZvLCBpbnQgc3RhX2lkLCBpbnQgdGlkLCB1MTYgc3NuX2lkeCkKK3N0YXRpYyBpbnQgaXdsYWduX3R4cV9hZ2dfZW5hYmxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHR4cV9pZCwgaW50IHN0YV9pZCwgaW50IHRpZCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXUxNiByYV90aWQ7Ci0JaW50IHJldDsKLQogCWlmICgoSVdMQUdOX0ZJUlNUX0FNUERVX1FVRVVFID4gdHhxX2lkKSB8fAogCSAgICAoSVdMQUdOX0ZJUlNUX0FNUERVX1FVRVVFICsKIAkJcHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+bnVtX29mX2FtcGR1X3F1ZXVlcyA8PSB0eHFfaWQpKSB7CkBAIC0yNDAsMTIgKzIzMywzMyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlyYV90aWQgPSBCVUlMRF9SQXhUSUQoc3RhX2lkLCB0aWQpOwotCiAJLyogTW9kaWZ5IGRldmljZSdzIHN0YXRpb24gdGFibGUgdG8gVHggdGhpcyBUSUQgKi8KLQlyZXQgPSBpd2xfc3RhX3R4X21vZGlmeV9lbmFibGVfdGlkKHByaXYsIHN0YV9pZCwgdGlkKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCXJldHVybiBpd2xfc3RhX3R4X21vZGlmeV9lbmFibGVfdGlkKHByaXYsIHN0YV9pZCwgdGlkKTsKK30KKwordm9pZCBpd2xhZ25fdHhxX2FnZ19xdWV1ZV9zZXR1cChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCQlpbnQgdGlkLCBpbnQgZnJhbWVfbGltaXQpCit7CisJaW50IHN0YV9pZCwgdHhfZmlmbywgdHhxX2lkLCBzc25faWR4OworCXUxNiByYV90aWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaXdsX3RpZF9kYXRhICp0aWRfZGF0YTsKKworCXN0YV9pZCA9IGl3bF9zdGFfaWQoc3RhKTsKKwlpZiAoV0FSTl9PTihzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikpCisJCXJldHVybjsKKwlpZiAoV0FSTl9PTih0aWQgPj0gTUFYX1RJRF9DT1VOVCkpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOworCXRpZF9kYXRhID0gJnByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF07CisJc3NuX2lkeCA9IFNFUV9UT19TTih0aWRfZGF0YS0+c2VxX251bWJlcik7CisJdHhxX2lkID0gdGlkX2RhdGEtPmFnZy50eHFfaWQ7CisJdHhfZmlmbyA9IHRpZF9kYXRhLT5hZ2cudHhfZmlmbzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOworCisJcmFfdGlkID0gQlVJTERfUkF4VElEKHN0YV9pZCwgdGlkKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKQEAgLTI3MSwxMCArMjg1LDEwIEBACiAJaXdsX3dyaXRlX3RhcmdfbWVtKHByaXYsIHByaXYtPnNjZF9iYXNlX2FkZHIgKwogCQkJSVdMQUdOX1NDRF9DT05URVhUX1FVRVVFX09GRlNFVCh0eHFfaWQpICsKIAkJCXNpemVvZih1MzIpLAotCQkJKChTQ0RfV0lOX1NJWkUgPDwKKwkJCSgoZnJhbWVfbGltaXQgPDwKIAkJCUlXTEFHTl9TQ0RfUVVFVUVfQ1RYX1JFRzJfV0lOX1NJWkVfUE9TKSAmCiAJCQlJV0xBR05fU0NEX1FVRVVFX0NUWF9SRUcyX1dJTl9TSVpFX01TSykgfAotCQkJKChTQ0RfRlJBTUVfTElNSVQgPDwKKwkJCSgoZnJhbWVfbGltaXQgPDwKIAkJCUlXTEFHTl9TQ0RfUVVFVUVfQ1RYX1JFRzJfRlJBTUVfTElNSVRfUE9TKSAmCiAJCQlJV0xBR05fU0NEX1FVRVVFX0NUWF9SRUcyX0ZSQU1FX0xJTUlUX01TSykpOwogCkBAIC0yODQsMTIgKzI5OCwxMCBAQAogCWl3bGFnbl90eF9xdWV1ZV9zZXRfc3RhdHVzKHByaXYsICZwcml2LT50eHFbdHhxX2lkXSwgdHhfZmlmbywgMSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKIH0KIAotaW50IGl3bGFnbl90eHFfYWdnX2Rpc2FibGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgdHhxX2lkLAotCQkJICAgdTE2IHNzbl9pZHgsIHU4IHR4X2ZpZm8pCitzdGF0aWMgaW50IGl3bGFnbl90eHFfYWdnX2Rpc2FibGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgdHhxX2lkLAorCQkJCSAgdTE2IHNzbl9pZHgsIHU4IHR4X2ZpZm8pCiB7CiAJaWYgKChJV0xBR05fRklSU1RfQU1QRFVfUVVFVUUgPiB0eHFfaWQpIHx8CiAJICAgIChJV0xBR05fRklSU1RfQU1QRFVfUVVFVUUgKwpAQCAtNTI1LDcgKzUzNyw3IEBACiAJc3RydWN0IGl3bF90eF9jbWQgKnR4X2NtZDsKIAlzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4ID0gJnByaXYtPmNvbnRleHRzW0lXTF9SWE9OX0NUWF9CU1NdOwogCWludCB0eHFfaWQ7Ci0JZG1hX2FkZHJfdCBwaHlzX2FkZHI7CisJZG1hX2FkZHJfdCBwaHlzX2FkZHIgPSAwOwogCWRtYV9hZGRyX3QgdHhjbWRfcGh5czsKIAlkbWFfYWRkcl90IHNjcmF0Y2hfcGh5czsKIAl1MTYgbGVuLCBmaXJzdGxlbiwgc2Vjb25kbGVuOwpAQCAtNTUyLDcgKzU2NCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkgewogCQlJV0xfREVCVUdfRFJPUChwcml2LCAiRHJvcHBpbmcgLSBSRiBLSUxMXG4iKTsKLQkJZ290byBkcm9wX3VubG9jazsKKwkJZ290byBkcm9wX3VubG9ja19wcml2OwogCX0KIAogCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOwpAQCAtNTY4LDEyICs1ODAsMTcgQEAKIAogCWhkcl9sZW4gPSBpZWVlODAyMTFfaGRybGVuKGZjKTsKIAotCS8qIEZpbmQgaW5kZXggaW50byBzdGF0aW9uIHRhYmxlIGZvciBkZXN0aW5hdGlvbiBzdGF0aW9uICovCi0Jc3RhX2lkID0gaXdsX3N0YV9pZF9vcl9icm9hZGNhc3QocHJpdiwgY3R4LCBpbmZvLT5jb250cm9sLnN0YSk7Ci0JaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCUlXTF9ERUJVR19EUk9QKHByaXYsICJEcm9wcGluZyAtIElOVkFMSUQgU1RBVElPTjogJXBNXG4iLAotCQkJICAgICAgIGhkci0+YWRkcjEpOwotCQlnb3RvIGRyb3BfdW5sb2NrOworCS8qIEZvciBtYW5hZ2VtZW50IGZyYW1lcyB1c2UgYnJvYWRjYXN0IGlkIHRvIGRvIG5vdCBicmVhayBhZ2dyZWdhdGlvbiAqLworCWlmICghaWVlZTgwMjExX2lzX2RhdGEoZmMpKQorCQlzdGFfaWQgPSBjdHgtPmJjYXN0X3N0YV9pZDsKKwllbHNlIHsKKwkJLyogRmluZCBpbmRleCBpbnRvIHN0YXRpb24gdGFibGUgZm9yIGRlc3RpbmF0aW9uIHN0YXRpb24gKi8KKwkJc3RhX2lkID0gaXdsX3N0YV9pZF9vcl9icm9hZGNhc3QocHJpdiwgY3R4LCBpbmZvLT5jb250cm9sLnN0YSk7CisJCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgeworCQkJSVdMX0RFQlVHX0RST1AocHJpdiwgIkRyb3BwaW5nIC0gSU5WQUxJRCBTVEFUSU9OOiAlcE1cbiIsCisJCQkJICAgICAgIGhkci0+YWRkcjEpOworCQkJZ290byBkcm9wX3VubG9ja19wcml2OworCQl9CiAJfQogCiAJSVdMX0RFQlVHX1RYKHByaXYsICJzdGF0aW9uIElkICVkXG4iLCBzdGFfaWQpOwpAQCAtNjE2LDEwICs2MzMsMTAgQEAKIAlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgewogCQlxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpOwogCQl0aWQgPSBxY1swXSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOwotCQlpZiAoV0FSTl9PTl9PTkNFKHRpZCA+PSBNQVhfVElEX0NPVU5UKSkgewotCQkJc3Bpbl91bmxvY2soJnByaXYtPnN0YV9sb2NrKTsKLQkJCWdvdG8gZHJvcF91bmxvY2s7Ci0JCX0KKworCQlpZiAoV0FSTl9PTl9PTkNFKHRpZCA+PSBNQVhfVElEX0NPVU5UKSkKKwkJCWdvdG8gZHJvcF91bmxvY2tfc3RhOworCiAJCXNlcV9udW1iZXIgPSBwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLnNlcV9udW1iZXI7CiAJCXNlcV9udW1iZXIgJj0gSUVFRTgwMjExX1NDVExfU0VROwogCQloZHItPnNlcV9jdHJsID0gaGRyLT5zZXFfY3RybCAmCkBAIC02MzcsMTggKzY1NCw4IEBACiAJdHhxID0gJnByaXYtPnR4cVt0eHFfaWRdOwogCXEgPSAmdHhxLT5xOwogCi0JaWYgKHVubGlrZWx5KGl3bF9xdWV1ZV9zcGFjZShxKSA8IHEtPmhpZ2hfbWFyaykpIHsKLQkJc3Bpbl91bmxvY2soJnByaXYtPnN0YV9sb2NrKTsKLQkJZ290byBkcm9wX3VubG9jazsKLQl9Ci0KLQlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgewotCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLnRmZHNfaW5fcXVldWUrKzsKLQkJaWYgKCFpZWVlODAyMTFfaGFzX21vcmVmcmFncyhmYykpCi0JCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLnNlcV9udW1iZXIgPSBzZXFfbnVtYmVyOwotCX0KLQotCXNwaW5fdW5sb2NrKCZwcml2LT5zdGFfbG9jayk7CisJaWYgKHVubGlrZWx5KGl3bF9xdWV1ZV9zcGFjZShxKSA8IHEtPmhpZ2hfbWFyaykpCisJCWdvdG8gZHJvcF91bmxvY2tfc3RhOwogCiAJLyogU2V0IHVwIGRyaXZlciBkYXRhIGZvciB0aGlzIFRGRCAqLwogCW1lbXNldCgmKHR4cS0+dHhiW3EtPndyaXRlX3B0cl0pLCAwLCBzaXplb2Yoc3RydWN0IGl3bF90eF9pbmZvKSk7CkBAIC03MTIsMTIgKzcxOSwxMCBAQAogCXR4Y21kX3BoeXMgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LAogCQkJCSAgICAmb3V0X2NtZC0+aGRyLCBmaXJzdGxlbiwKIAkJCQkgICAgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKwlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHByaXYtPnBjaV9kZXYsIHR4Y21kX3BoeXMpKSkKKwkJZ290byBkcm9wX3VubG9ja19zdGE7CiAJZG1hX3VubWFwX2FkZHJfc2V0KG91dF9tZXRhLCBtYXBwaW5nLCB0eGNtZF9waHlzKTsKIAlkbWFfdW5tYXBfbGVuX3NldChvdXRfbWV0YSwgbGVuLCBmaXJzdGxlbik7Ci0JLyogQWRkIGJ1ZmZlciBjb250YWluaW5nIFR4IGNvbW1hbmQgYW5kIE1BQyghKSBoZWFkZXIgdG8gVEZEJ3MKLQkgKiBmaXJzdCBlbnRyeSAqLwotCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9hdHRhY2hfYnVmX3RvX3RmZChwcml2LCB0eHEsCi0JCQkJCQkgICB0eGNtZF9waHlzLCBmaXJzdGxlbiwgMSwgMCk7CiAKIAlpZiAoIWllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKIAkJdHhxLT5uZWVkX3VwZGF0ZSA9IDE7CkBAIC03MzIsMTAgKzczNywzMCBAQAogCWlmIChzZWNvbmRsZW4gPiAwKSB7CiAJCXBoeXNfYWRkciA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsIHNrYi0+ZGF0YSArIGhkcl9sZW4sCiAJCQkJCSAgIHNlY29uZGxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisJCWlmICh1bmxpa2VseShwY2lfZG1hX21hcHBpbmdfZXJyb3IocHJpdi0+cGNpX2RldiwgcGh5c19hZGRyKSkpIHsKKwkJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwKKwkJCQkJIGRtYV91bm1hcF9hZGRyKG91dF9tZXRhLCBtYXBwaW5nKSwKKwkJCQkJIGRtYV91bm1hcF9sZW4ob3V0X21ldGEsIGxlbiksCisJCQkJCSBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCQkJZ290byBkcm9wX3VubG9ja19zdGE7CisJCX0KKwl9CisKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgeworCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLnRmZHNfaW5fcXVldWUrKzsKKwkJaWYgKCFpZWVlODAyMTFfaGFzX21vcmVmcmFncyhmYykpCisJCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLnNlcV9udW1iZXIgPSBzZXFfbnVtYmVyOworCX0KKworCXNwaW5fdW5sb2NrKCZwcml2LT5zdGFfbG9jayk7CisKKwkvKiBBdHRhY2ggYnVmZmVycyB0byBURkQgKi8KKwlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdHhxLAorCQkJCQkJICAgdHhjbWRfcGh5cywgZmlyc3RsZW4sIDEsIDApOworCWlmIChzZWNvbmRsZW4gPiAwKQogCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdHhxLAogCQkJCQkJCSAgIHBoeXNfYWRkciwgc2Vjb25kbGVuLAogCQkJCQkJCSAgIDAsIDApOwotCX0KIAogCXNjcmF0Y2hfcGh5cyA9IHR4Y21kX3BoeXMgKyBzaXplb2Yoc3RydWN0IGl3bF9jbWRfaGVhZGVyKSArCiAJCQkJb2Zmc2V0b2Yoc3RydWN0IGl3bF90eF9jbWQsIHNjcmF0Y2gpOwpAQCAtNzU0LDggKzc3OSw4IEBACiAKIAkvKiBTZXQgdXAgZW50cnkgZm9yIHRoaXMgVEZEIGluIFR4IGJ5dGUtY291bnQgYXJyYXkgKi8KIAlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKQotCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfdXBkYXRlX2J5dGVfY250X3RibChwcml2LCB0eHEsCi0JCQkJCQkgICAgIGxlMTZfdG9fY3B1KHR4X2NtZC0+bGVuKSk7CisJCWl3bGFnbl90eHFfdXBkYXRlX2J5dGVfY250X3RibChwcml2LCB0eHEsCisJCQkJCSAgICAgICBsZTE2X3RvX2NwdSh0eF9jbWQtPmxlbikpOwogCiAJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHByaXYtPnBjaV9kZXYsIHR4Y21kX3BoeXMsCiAJCQkJICAgICAgIGZpcnN0bGVuLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwpAQCAtODAxLDcgKzgyNiw5IEBACiAKIAlyZXR1cm4gMDsKIAotZHJvcF91bmxvY2s6Citkcm9wX3VubG9ja19zdGE6CisJc3Bpbl91bmxvY2soJnByaXYtPnN0YV9sb2NrKTsKK2Ryb3BfdW5sb2NrX3ByaXY6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCXJldHVybiAtMTsKIH0KQEAgLTEwMzQsMTEgKzEwNjEsMTEgQEAKIAl0aWRfZGF0YSA9ICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdOwogCSpzc24gPSBTRVFfVE9fU04odGlkX2RhdGEtPnNlcV9udW1iZXIpOwogCXRpZF9kYXRhLT5hZ2cudHhxX2lkID0gdHhxX2lkOworCXRpZF9kYXRhLT5hZ2cudHhfZmlmbyA9IHR4X2ZpZm87CiAJaXdsX3NldF9zd3FfaWQoJnByaXYtPnR4cVt0eHFfaWRdLCBnZXRfYWNfZnJvbV90aWQodGlkKSwgdHhxX2lkKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCi0JcmV0ID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2FnZ19lbmFibGUocHJpdiwgdHhxX2lkLCB0eF9maWZvLAotCQkJCQkJICBzdGFfaWQsIHRpZCwgKnNzbik7CisJcmV0ID0gaXdsYWduX3R4cV9hZ2dfZW5hYmxlKHByaXYsIHR4cV9pZCwgc3RhX2lkLCB0aWQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTExMjUsOCArMTE1Miw3IEBACiAJICogdG8gZGVhY3RpdmF0ZSB0aGUgdUNvZGUgcXVldWUsIGp1c3QgcmV0dXJuICJzdWNjZXNzIiB0byBhbGxvdwogCSAqICBtYWM4MDIxMSB0byBjbGVhbiB1cCBpdCBvd24gZGF0YS4KIAkgKi8KLQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfYWdnX2Rpc2FibGUocHJpdiwgdHhxX2lkLCBzc24sCi0JCQkJCQkgICB0eF9maWZvX2lkKTsKKwlpd2xhZ25fdHhxX2FnZ19kaXNhYmxlKHByaXYsIHR4cV9pZCwgc3NuLCB0eF9maWZvX2lkKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlpZWVlODAyMTFfc3RvcF90eF9iYV9jYl9pcnFzYWZlKHZpZiwgc3RhLT5hZGRyLCB0aWQpOwpAQCAtMTE1NSw4ICsxMTgxLDcgQEAKIAkJCXUxNiBzc24gPSBTRVFfVE9fU04odGlkX2RhdGEtPnNlcV9udW1iZXIpOwogCQkJaW50IHR4X2ZpZm8gPSBnZXRfZmlmb19mcm9tX3RpZChjdHgsIHRpZCk7CiAJCQlJV0xfREVCVUdfSFQocHJpdiwgIkhXIHF1ZXVlIGVtcHR5OiBjb250aW51ZSBERUxCQSBmbG93XG4iKTsKLQkJCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9hZ2dfZGlzYWJsZShwcml2LCB0eHFfaWQsCi0JCQkJCQkJICAgICBzc24sIHR4X2ZpZm8pOworCQkJaXdsYWduX3R4cV9hZ2dfZGlzYWJsZShwcml2LCB0eHFfaWQsIHNzbiwgdHhfZmlmbyk7CiAJCQl0aWRfZGF0YS0+YWdnLnN0YXRlID0gSVdMX0FHR19PRkY7CiAJCQlpZWVlODAyMTFfc3RvcF90eF9iYV9jYl9pcnFzYWZlKGN0eC0+dmlmLCBhZGRyLCB0aWQpOwogCQl9CkBAIC0xMjI0LDE2ICsxMjQ5LDE5IEBACiAJICAgICBxLT5yZWFkX3B0ciA9IGl3bF9xdWV1ZV9pbmNfd3JhcChxLT5yZWFkX3B0ciwgcS0+bl9iZCkpIHsKIAogCQl0eF9pbmZvID0gJnR4cS0+dHhiW3R4cS0+cS5yZWFkX3B0cl07Ci0JCWl3bGFnbl90eF9zdGF0dXMocHJpdiwgdHhfaW5mbywKLQkJCQkgdHhxX2lkID49IElXTEFHTl9GSVJTVF9BTVBEVV9RVUVVRSk7CisKKwkJaWYgKFdBUk5fT05fT05DRSh0eF9pbmZvLT5za2IgPT0gTlVMTCkpCisJCQljb250aW51ZTsKIAogCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKil0eF9pbmZvLT5za2ItPmRhdGE7Ci0JCWlmIChoZHIgJiYgaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSkKIAkJCW5mcmVlZCsrOworCisJCWl3bGFnbl90eF9zdGF0dXMocHJpdiwgdHhfaW5mbywKKwkJCQkgdHhxX2lkID49IElXTEFHTl9GSVJTVF9BTVBEVV9RVUVVRSk7CiAJCXR4X2luZm8tPnNrYiA9IE5VTEw7CiAKLQkJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9pbnZhbF9ieXRlX2NudF90YmwpCi0JCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfaW52YWxfYnl0ZV9jbnRfdGJsKHByaXYsIHR4cSk7CisJCWl3bGFnbl90eHFfaW52YWxfYnl0ZV9jbnRfdGJsKHByaXYsIHR4cSk7CiAKIAkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2ZyZWVfdGZkKHByaXYsIHR4cSk7CiAJfQpAQCAtMTI1MSwxMSArMTI3OSwxMSBAQAogCQkJCSBzdHJ1Y3QgaXdsX2NvbXByZXNzZWRfYmFfcmVzcCAqYmFfcmVzcCkKIAogewotCWludCBpLCBzaCwgYWNrOworCWludCBzaDsKIAl1MTYgc2VxX2N0bCA9IGxlMTZfdG9fY3B1KGJhX3Jlc3AtPnNlcV9jdGwpOwogCXUxNiBzY2RfZmxvdyA9IGxlMTZfdG9fY3B1KGJhX3Jlc3AtPnNjZF9mbG93KTsKLQlpbnQgc3VjY2Vzc2VzID0gMDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CisJdTY0IGJpdG1hcCwgc2VudF9iaXRtYXA7CiAKIAlpZiAodW5saWtlbHkoIWFnZy0+d2FpdF9mb3JfYmEpKSAgewogCQlpZiAodW5saWtlbHkoYmFfcmVzcC0+Yml0bWFwKSkKQEAgLTEyNjksNzAgKzEyOTcsNDIgQEAKIAogCS8qIENhbGN1bGF0ZSBzaGlmdCB0byBhbGlnbiBibG9jay1hY2sgYml0cyB3aXRoIG91ciBUeCB3aW5kb3cgYml0cyAqLwogCXNoID0gYWdnLT5zdGFydF9pZHggLSBTRVFfVE9fSU5ERVgoc2VxX2N0bCA+PiA0KTsKLQlpZiAoc2ggPCAwKSAvKiB0Yncgc29tZXRoaW5nIGlzIHdyb25nIHdpdGggaW5kaWNlcyAqLworCWlmIChzaCA8IDApCiAJCXNoICs9IDB4MTAwOwogCi0JaWYgKGFnZy0+ZnJhbWVfY291bnQgPiAoNjQgLSBzaCkpIHsKLQkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJtb3JlIGZyYW1lcyB0aGFuIGJpdG1hcCBzaXplIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JaWYgKCFwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5ub19hZ2dfZnJhbWVjbnRfaW5mbyAmJiBiYV9yZXNwLT50eGVkKSB7CisJLyoKKwkgKiBDaGVjayBmb3Igc3VjY2VzcyBvciBmYWlsdXJlIGFjY29yZGluZyB0byB0aGUKKwkgKiB0cmFuc21pdHRlZCBiaXRtYXAgYW5kIGJsb2NrLWFjayBiaXRtYXAKKwkgKi8KKwliaXRtYXAgPSBsZTY0X3RvX2NwdShiYV9yZXNwLT5iaXRtYXApID4+IHNoOworCXNlbnRfYml0bWFwID0gYml0bWFwICYgYWdnLT5iaXRtYXA7CisKKwkvKiBTYW5pdHkgY2hlY2sgdmFsdWVzIHJlcG9ydGVkIGJ5IHVDb2RlICovCisJaWYgKGJhX3Jlc3AtPnR4ZWRfMl9kb25lID4gYmFfcmVzcC0+dHhlZCkgeworCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwKKwkJCSJib2d1cyBzZW50KCVkKSBhbmQgYWNrKCVkKSBjb3VudFxuIiwKKwkJCWJhX3Jlc3AtPnR4ZWQsIGJhX3Jlc3AtPnR4ZWRfMl9kb25lKTsKIAkJLyoKLQkJICogc2VudCBhbmQgYWNrIGluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5IHVDb2RlCi0JCSAqIHVzZSBpdCBpbnN0ZWFkIG9mIGZpZ3VyZSBvdXQgb3Vyc2VsZgorCQkgKiBzZXQgdHhlZF8yX2RvbmUgPSB0eGVkLAorCQkgKiBzbyBpdCB3b24ndCBpbXBhY3QgcmF0ZSBzY2FsZQogCQkgKi8KLQkJaWYgKGJhX3Jlc3AtPnR4ZWRfMl9kb25lID4gYmFfcmVzcC0+dHhlZCkgewotCQkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsCi0JCQkJImJvZ3VzIHNlbnQoJWQpIGFuZCBhY2soJWQpIGNvdW50XG4iLAotCQkJCWJhX3Jlc3AtPnR4ZWQsIGJhX3Jlc3AtPnR4ZWRfMl9kb25lKTsKLQkJCS8qCi0JCQkgKiBzZXQgdHhlZF8yX2RvbmUgPSB0eGVkLAotCQkJICogc28gaXQgd29uJ3QgaW1wYWN0IHJhdGUgc2NhbGUKLQkJCSAqLwotCQkJYmFfcmVzcC0+dHhlZCA9IGJhX3Jlc3AtPnR4ZWRfMl9kb25lOwotCQl9Ci0JCUlXTF9ERUJVR19IVChwcml2LCAiYWdnIGZyYW1lcyBzZW50OiVkLCBhY2tlZDolZFxuIiwKLQkJCQliYV9yZXNwLT50eGVkLCBiYV9yZXNwLT50eGVkXzJfZG9uZSk7Ci0JfSBlbHNlIHsKLQkJdTY0IGJpdG1hcCwgc2VudF9iaXRtYXA7CisJCWJhX3Jlc3AtPnR4ZWQgPSBiYV9yZXNwLT50eGVkXzJfZG9uZTsKKwl9CisJSVdMX0RFQlVHX0hUKHByaXYsICJhZ2cgZnJhbWVzIHNlbnQ6JWQsIGFja2VkOiVkXG4iLAorCQkJYmFfcmVzcC0+dHhlZCwgYmFfcmVzcC0+dHhlZF8yX2RvbmUpOwogCi0JCS8qIGRvbid0IHVzZSA2NC1iaXQgdmFsdWVzIGZvciBub3cgKi8KLQkJYml0bWFwID0gbGU2NF90b19jcHUoYmFfcmVzcC0+Yml0bWFwKSA+PiBzaDsKLQotCQkvKiBjaGVjayBmb3Igc3VjY2VzcyBvciBmYWlsdXJlIGFjY29yZGluZyB0byB0aGUKLQkJICogdHJhbnNtaXR0ZWQgYml0bWFwIGFuZCBibG9jay1hY2sgYml0bWFwICovCi0JCXNlbnRfYml0bWFwID0gYml0bWFwICYgYWdnLT5iaXRtYXA7Ci0KLQkJLyogRm9yIGVhY2ggZnJhbWUgYXR0ZW1wdGVkIGluIGFnZ3JlZ2F0aW9uLAotCQkgKiB1cGRhdGUgZHJpdmVyJ3MgcmVjb3JkIG9mIHR4IGZyYW1lJ3Mgc3RhdHVzLiAqLwotCQlpID0gMDsKLQkJd2hpbGUgKHNlbnRfYml0bWFwKSB7Ci0JCQlhY2sgPSBzZW50X2JpdG1hcCAmIDFVTEw7Ci0JCQlzdWNjZXNzZXMgKz0gYWNrOwotCQkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICIlcyBPTiBpPSVkIGlkeD0lZCByYXc9JWRcbiIsCi0JCQkJYWNrID8gIkFDSyIgOiAiTkFDSyIsIGksCi0JCQkJKGFnZy0+c3RhcnRfaWR4ICsgaSkgJiAweGZmLAotCQkJCWFnZy0+c3RhcnRfaWR4ICsgaSk7Ci0JCQlzZW50X2JpdG1hcCA+Pj0gMTsKLQkJCSsraTsKLQkJfQotCi0JCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiQml0bWFwICVsbHhcbiIsCi0JCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliaXRtYXApOworCS8qIEZpbmQgdGhlIGZpcnN0IEFDS2VkIGZyYW1lIHRvIHN0b3JlIHRoZSBUWCBzdGF0dXMgKi8KKwl3aGlsZSAoc2VudF9iaXRtYXAgJiYgIShzZW50X2JpdG1hcCAmIDEpKSB7CisJCWFnZy0+c3RhcnRfaWR4ID0gKGFnZy0+c3RhcnRfaWR4ICsgMSkgJiAweGZmOworCQlzZW50X2JpdG1hcCA+Pj0gMTsKIAl9CiAKIAlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihwcml2LT50eHFbc2NkX2Zsb3ddLnR4YlthZ2ctPnN0YXJ0X2lkeF0uc2tiKTsKIAltZW1zZXQoJmluZm8tPnN0YXR1cywgMCwgc2l6ZW9mKGluZm8tPnN0YXR1cykpOwogCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKIAlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVTsKLQlpZiAoIXByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPm5vX2FnZ19mcmFtZWNudF9pbmZvICYmIGJhX3Jlc3AtPnR4ZWQpIHsKLQkJaW5mby0+c3RhdHVzLmFtcGR1X2Fja19sZW4gPSBiYV9yZXNwLT50eGVkXzJfZG9uZTsKLQkJaW5mby0+c3RhdHVzLmFtcGR1X2xlbiA9IGJhX3Jlc3AtPnR4ZWQ7Ci0KLQl9IGVsc2UgewotCQlpbmZvLT5zdGF0dXMuYW1wZHVfYWNrX2xlbiA9IHN1Y2Nlc3NlczsKLQkJaW5mby0+c3RhdHVzLmFtcGR1X2xlbiA9IGFnZy0+ZnJhbWVfY291bnQ7Ci0JfQorCWluZm8tPnN0YXR1cy5hbXBkdV9hY2tfbGVuID0gYmFfcmVzcC0+dHhlZF8yX2RvbmU7CisJaW5mby0+c3RhdHVzLmFtcGR1X2xlbiA9IGJhX3Jlc3AtPnR4ZWQ7CiAJaXdsYWduX2h3cmF0ZV90b190eF9jb250cm9sKHByaXYsIGFnZy0+cmF0ZV9uX2ZsYWdzLCBpbmZvKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXVjb2RlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tdWNvZGUuYwppbmRleCBkODA3ZTVlLi44YmRhMGU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tdWNvZGUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tdWNvZGUuYwpAQCAtMiw3ICsyLDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMTYxLDQ3ICsxNjEsMTkgQEAKIH0KIAogc3RhdGljIGludCBpd2xhZ25fbG9hZF9naXZlbl91Y29kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCXN0cnVjdCBmd19kZXNjICppbnN0X2ltYWdlLAotCQlzdHJ1Y3QgZndfZGVzYyAqZGF0YV9pbWFnZSkKKwkJCQkgICBzdHJ1Y3QgZndfaW1nICppbWFnZSkKIHsKIAlpbnQgcmV0ID0gMDsKIAotCXJldCA9IGl3bGFnbl9sb2FkX3NlY3Rpb24ocHJpdiwgIklOU1QiLCBpbnN0X2ltYWdlLAorCXJldCA9IGl3bGFnbl9sb2FkX3NlY3Rpb24ocHJpdiwgIklOU1QiLCAmaW1hZ2UtPmNvZGUsCiAJCQkJICAgSVdMQUdOX1JUQ19JTlNUX0xPV0VSX0JPVU5EKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0dXJuIGl3bGFnbl9sb2FkX3NlY3Rpb24ocHJpdiwgIkRBVEEiLCBkYXRhX2ltYWdlLAorCXJldHVybiBpd2xhZ25fbG9hZF9zZWN0aW9uKHByaXYsICJEQVRBIiwgJmltYWdlLT5kYXRhLAogCQkJCSAgICBJV0xBR05fUlRDX0RBVEFfTE9XRVJfQk9VTkQpOwogfQogCi1pbnQgaXdsYWduX2xvYWRfdWNvZGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCWludCByZXQgPSAwOwotCi0JLyogY2hlY2sgd2hldGhlciBpbml0IHVjb2RlIHNob3VsZCBiZSBsb2FkZWQsIG9yIHJhdGhlciBydW50aW1lIHVjb2RlICovCi0JaWYgKHByaXYtPnVjb2RlX2luaXQubGVuICYmIChwcml2LT51Y29kZV90eXBlID09IFVDT0RFX05PTkUpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbml0IHVjb2RlIGZvdW5kLiBMb2FkaW5nIGluaXQgdWNvZGUuLi5cbiIpOwotCQlyZXQgPSBpd2xhZ25fbG9hZF9naXZlbl91Y29kZShwcml2LAotCQkJJnByaXYtPnVjb2RlX2luaXQsICZwcml2LT51Y29kZV9pbml0X2RhdGEpOwotCQlpZiAoIXJldCkgewotCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkluaXQgdWNvZGUgbG9hZCBjb21wbGV0ZS5cbiIpOwotCQkJcHJpdi0+dWNvZGVfdHlwZSA9IFVDT0RFX0lOSVQ7Ci0JCX0KLQl9IGVsc2UgewotCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdCB1Y29kZSBub3QgZm91bmQsIG9yIGFscmVhZHkgbG9hZGVkLiAiCi0JCQkiTG9hZGluZyBydW50aW1lIHVjb2RlLi4uXG4iKTsKLQkJcmV0ID0gaXdsYWduX2xvYWRfZ2l2ZW5fdWNvZGUocHJpdiwKLQkJCSZwcml2LT51Y29kZV9jb2RlLCAmcHJpdi0+dWNvZGVfZGF0YSk7Ci0JCWlmICghcmV0KSB7Ci0JCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUnVudGltZSB1Y29kZSBsb2FkIGNvbXBsZXRlLlxuIik7Ci0JCQlwcml2LT51Y29kZV90eXBlID0gVUNPREVfUlQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCiAvKgogICogIENhbGlicmF0aW9uCiAgKi8KQEAgLTI5NywzMyArMjY5LDkgQEAKIAlpd2xfY2FsaWJfc2V0KCZwcml2LT5jYWxpYl9yZXN1bHRzW2luZGV4XSwgcGt0LT51LnJhdywgbGVuKTsKIH0KIAotdm9pZCBpd2xhZ25fcnhfY2FsaWJfY29tcGxldGUoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJICAgICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQoraW50IGl3bGFnbl9pbml0X2FsaXZlX3N0YXJ0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdC4gY2FsaWJyYXRpb24gaXMgY29tcGxldGVkLCByZXN0YXJ0aW5nIGZ3LlxuIik7Ci0JcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKLX0KLQotdm9pZCBpd2xhZ25faW5pdF9hbGl2ZV9zdGFydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQkvKiBpbml0aWFsaXplIHVDb2RlIHdhcyBsb2FkZWQuLi4gdmVyaWZ5IGluc3QgaW1hZ2UuCi0JICogVGhpcyBpcyBhIHBhcmFub2lkIGNoZWNrLCBiZWNhdXNlIHdlIHdvdWxkIG5vdCBoYXZlIGdvdHRlbiB0aGUKLQkgKiAiaW5pdGlhbGl6ZSIgYWxpdmUgaWYgY29kZSB3ZXJlbid0IHByb3Blcmx5IGxvYWRlZC4gICovCi0JaWYgKGl3bF92ZXJpZnlfdWNvZGUocHJpdikpIHsKLQkJLyogUnVudGltZSBpbnN0cnVjdGlvbiBsb2FkIHdhcyBiYWQ7Ci0JCSAqIHRha2UgaXQgYWxsIHRoZSB3YXkgYmFjayBkb3duIHNvIHdlIGNhbiB0cnkgYWdhaW4gKi8KLQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkJhZCBcImluaXRpYWxpemVcIiB1Q29kZSBsb2FkLlxuIik7Ci0JCWdvdG8gcmVzdGFydDsKLQl9Ci0KLQlyZXQgPSBwcml2LT5jZmctPm9wcy0+bGliLT5hbGl2ZV9ub3RpZnkocHJpdik7Ci0JaWYgKHJldCkgewotCQlJV0xfV0FSTihwcml2LAotCQkJIkNvdWxkIG5vdCBjb21wbGV0ZSBBTElWRSB0cmFuc2l0aW9uOiAlZFxuIiwgcmV0KTsKLQkJZ290byByZXN0YXJ0OwotCX0KKwlpbnQgcmV0OwogCiAJaWYgKHByaXYtPmNmZy0+YnRfcGFyYW1zICYmCiAJICAgIHByaXYtPmNmZy0+YnRfcGFyYW1zLT5hZHZhbmNlZF9idF9jb2V4aXN0KSB7CkBAIC0zMzMsMjQgKzI4MSwyNSBAQAogCQkgKiBubyBuZWVkIHRvIGNsb3NlIHRoZSBlbnZsb3BlIHNpbmNlIHdlIGFyZSBnb2luZwogCQkgKiB0byBsb2FkIHRoZSBydW50aW1lIHVDb2RlIGxhdGVyLgogCQkgKi8KLQkJaXdsYWduX3NlbmRfYnRfZW52KHByaXYsIElXTF9CVF9DT0VYX0VOVl9PUEVOLAorCQlyZXQgPSBpd2xhZ25fc2VuZF9idF9lbnYocHJpdiwgSVdMX0JUX0NPRVhfRU5WX09QRU4sCiAJCQlCVF9DT0VYX1BSSU9fVEJMX0VWVF9JTklUX0NBTElCMik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OwogCiAJfQotCWl3bGFnbl9zZW5kX2NhbGliX2NmZyhwcml2KTsKKworCXJldCA9IGl3bGFnbl9zZW5kX2NhbGliX2NmZyhwcml2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJLyoqCiAJICogdGVtcGVyYXR1cmUgb2Zmc2V0IGNhbGlicmF0aW9uIGlzIG9ubHkgbmVlZGVkIGZvciBydW50aW1lIHVjb2RlLAogCSAqIHNvIHByZXBhcmUgdGhlIHZhbHVlIG5vdy4KIAkgKi8KIAlpZiAocHJpdi0+Y2ZnLT5uZWVkX3RlbXBfb2Zmc2V0X2NhbGliKQotCQlpd2xhZ25fc2V0X3RlbXBlcmF0dXJlX29mZnNldF9jYWxpYihwcml2KTsKKwkJcmV0dXJuIGl3bGFnbl9zZXRfdGVtcGVyYXR1cmVfb2Zmc2V0X2NhbGliKHByaXYpOwogCi0JcmV0dXJuOwotCi1yZXN0YXJ0OgotCS8qIHJlYWwgcmVzdGFydCAoZmlyc3QgbG9hZCBpbml0X3Vjb2RlKSAqLwotCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaXdsYWduX3NlbmRfd2ltYXhfY29leChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCkBAIC00MTMsMjUgKzM2MiwzMCBAQAogCQlJV0xfRVJSKHByaXYsICJmYWlsZWQgdG8gc2VuZCBCVCBwcmlvIHRibCBjb21tYW5kXG4iKTsKIH0KIAotdm9pZCBpd2xhZ25fc2VuZF9idF9lbnYoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBhY3Rpb24sIHU4IHR5cGUpCitpbnQgaXdsYWduX3NlbmRfYnRfZW52KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggYWN0aW9uLCB1OCB0eXBlKQogewogCXN0cnVjdCBpd2xfYnRfY29leF9wcm90X2Vudl9jbWQgZW52X2NtZDsKKwlpbnQgcmV0OwogCiAJZW52X2NtZC5hY3Rpb24gPSBhY3Rpb247CiAJZW52X2NtZC50eXBlID0gdHlwZTsKLQlpZiAoaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9CVF9DT0VYX1BST1RfRU5WLAotCQkJICAgICBzaXplb2YoZW52X2NtZCksICZlbnZfY21kKSkKKwlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX0JUX0NPRVhfUFJPVF9FTlYsCisJCQkgICAgICAgc2l6ZW9mKGVudl9jbWQpLCAmZW52X2NtZCk7CisJaWYgKHJldCkKIAkJSVdMX0VSUihwcml2LCAiZmFpbGVkIHRvIHNlbmQgQlQgZW52IGNvbW1hbmRcbiIpOworCXJldHVybiByZXQ7CiB9CiAKIAotaW50IGl3bGFnbl9hbGl2ZV9ub3RpZnkoc3RydWN0IGl3bF9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2xhZ25fYWxpdmVfbm90aWZ5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAljb25zdCBzdHJ1Y3QgcXVldWVfdG9fZmlmb19hYyAqcXVldWVfdG9fZmlmbzsKKwlzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4OwogCXUzMiBhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGksIGNoYW47CiAJdTMyIHJlZ192YWw7CisJaW50IHJldDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKQEAgLTUwMCw2ICs0NTQsOCBAQAogCW1lbXNldCgmcHJpdi0+cXVldWVfc3RvcHBlZFswXSwgMCwgc2l6ZW9mKHByaXYtPnF1ZXVlX3N0b3BwZWQpKTsKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQogCQlhdG9taWNfc2V0KCZwcml2LT5xdWV1ZV9zdG9wX2NvdW50W2ldLCAwKTsKKwlmb3JfZWFjaF9jb250ZXh0KHByaXYsIGN0eCkKKwkJY3R4LT5sYXN0X3R4X3JlamVjdGVkID0gZmFsc2U7CiAKIAkvKiByZXNldCB0byAwIHRvIGVuYWJsZSBhbGwgdGhlIHF1ZXVlIGZpcnN0ICovCiAJcHJpdi0+dHhxX2N0eF9hY3RpdmVfbXNrID0gMDsKQEAgLTUyNywxMiArNDgzLDE1IEBACiAJaXdsX2NsZWFyX2JpdHNfcHJwaChwcml2LCBBUE1HX1BDSURFVl9TVFRfUkVHLAogCQkJICBBUE1HX1BDSURFVl9TVFRfVkFMX0wxX0FDVF9ESVMpOwogCi0JaXdsYWduX3NlbmRfd2ltYXhfY29leChwcml2KTsKKwlyZXQgPSBpd2xhZ25fc2VuZF93aW1heF9jb2V4KHByaXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKLQlpd2xhZ25fc2V0X1h0YWxfY2FsaWIocHJpdik7Ci0JaXdsX3NlbmRfY2FsaWJfcmVzdWx0cyhwcml2KTsKKwlyZXQgPSBpd2xhZ25fc2V0X1h0YWxfY2FsaWIocHJpdik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAotCXJldHVybiAwOworCXJldHVybiBpd2xfc2VuZF9jYWxpYl9yZXN1bHRzKHByaXYpOwogfQogCiAKQEAgLTU0MSwxMSArNTAwLDEyIEBACiAgKiAgIHVzaW5nIHNhbXBsZSBkYXRhIDEwMCBieXRlcyBhcGFydC4gIElmIHRoZXNlIHNhbXBsZSBwb2ludHMgYXJlIGdvb2QsCiAgKiAgIGl0J3MgYSBwcmV0dHkgZ29vZCBiZXQgdGhhdCBldmVyeXRoaW5nIGJldHdlZW4gdGhlbSBpcyBnb29kLCB0b28uCiAgKi8KLXN0YXRpYyBpbnQgaXdsY29yZV92ZXJpZnlfaW5zdF9zcGFyc2Uoc3RydWN0IGl3bF9wcml2ICpwcml2LCBfX2xlMzIgKmltYWdlLCB1MzIgbGVuKQorc3RhdGljIGludCBpd2xjb3JlX3ZlcmlmeV9pbnN0X3NwYXJzZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICAgc3RydWN0IGZ3X2Rlc2MgKmZ3X2Rlc2MpCiB7CisJX19sZTMyICppbWFnZSA9IChfX2xlMzIgKilmd19kZXNjLT52X2FkZHI7CisJdTMyIGxlbiA9IGZ3X2Rlc2MtPmxlbjsKIAl1MzIgdmFsOwotCWludCByZXQgPSAwOwotCXUzMiBlcnJjbnQgPSAwOwogCXUzMiBpOwogCiAJSVdMX0RFQlVHX0lORk8ocHJpdiwgInVjb2RlIGluc3QgaW1hZ2Ugc2l6ZSBpcyAldVxuIiwgbGVuKTsKQEAgLTU1NiwxMDQgKzUxNiwyMDQgQEAKIAkJICogaWYgSVdMX0RMX0lPIGlzIHNldCAqLwogCQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SQUREUiwKIAkJCWkgKyBJV0xBR05fUlRDX0lOU1RfTE9XRVJfQk9VTkQpOwotCQl2YWwgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKLQkJaWYgKHZhbCAhPSBsZTMyX3RvX2NwdSgqaW1hZ2UpKSB7Ci0JCQlyZXQgPSAtRUlPOwotCQkJZXJyY250Kys7Ci0JCQlpZiAoZXJyY250ID49IDMpCi0JCQkJYnJlYWs7Ci0JCX0KKwkJdmFsID0gaXdsX3JlYWQzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOworCQlpZiAodmFsICE9IGxlMzJfdG9fY3B1KCppbWFnZSkpCisJCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCi0vKioKLSAqIGl3bGNvcmVfdmVyaWZ5X2luc3RfZnVsbCAtIHZlcmlmeSBydW50aW1lIHVDb2RlIGltYWdlIGluIGNhcmQgdnMuIGhvc3QsCi0gKiAgICAgbG9va2luZyBhdCBhbGwgZGF0YS4KLSAqLwotc3RhdGljIGludCBpd2xfdmVyaWZ5X2luc3RfZnVsbChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIF9fbGUzMiAqaW1hZ2UsCi0JCQkJIHUzMiBsZW4pCitzdGF0aWMgdm9pZCBpd2xfcHJpbnRfbWlzbWF0Y2hfaW5zdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVjdCBmd19kZXNjICpmd19kZXNjKQogeworCV9fbGUzMiAqaW1hZ2UgPSAoX19sZTMyICopZndfZGVzYy0+dl9hZGRyOworCXUzMiBsZW4gPSBmd19kZXNjLT5sZW47CiAJdTMyIHZhbDsKLQl1MzIgc2F2ZV9sZW4gPSBsZW47Ci0JaW50IHJldCA9IDA7Ci0JdTMyIGVycmNudDsKKwl1MzIgb2ZmczsKKwlpbnQgZXJyb3JzID0gMDsKIAogCUlXTF9ERUJVR19JTkZPKHByaXYsICJ1Y29kZSBpbnN0IGltYWdlIHNpemUgaXMgJXVcbiIsIGxlbik7CiAKIAlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SQUREUiwKIAkJCSAgIElXTEFHTl9SVENfSU5TVF9MT1dFUl9CT1VORCk7CiAKLQllcnJjbnQgPSAwOwotCWZvciAoOyBsZW4gPiAwOyBsZW4gLT0gc2l6ZW9mKHUzMiksIGltYWdlKyspIHsKKwlmb3IgKG9mZnMgPSAwOworCSAgICAgb2ZmcyA8IGxlbiAmJiBlcnJvcnMgPCAyMDsKKwkgICAgIG9mZnMgKz0gc2l6ZW9mKHUzMiksIGltYWdlKyspIHsKIAkJLyogcmVhZCBkYXRhIGNvbWVzIHRocm91Z2ggc2luZ2xlIHBvcnQsIGF1dG8taW5jciBhZGRyICovCi0JCS8qIE5PVEU6IFVzZSB0aGUgZGVidWdsZXNzIHJlYWQgc28gd2UgZG9uJ3QgZmxvb2Qga2VybmVsIGxvZwotCQkgKiBpZiBJV0xfRExfSU8gaXMgc2V0ICovCi0JCXZhbCA9IF9pd2xfcmVhZF9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOworCQl2YWwgPSBpd2xfcmVhZDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7CiAJCWlmICh2YWwgIT0gbGUzMl90b19jcHUoKmltYWdlKSkgewotCQkJSVdMX0VSUihwcml2LCAidUNvZGUgSU5TVCBzZWN0aW9uIGlzIGludmFsaWQgYXQgIgotCQkJCSAgIm9mZnNldCAweCV4LCBpcyAweCV4LCBzL2IgMHgleFxuIiwKLQkJCQkgIHNhdmVfbGVuIC0gbGVuLCB2YWwsIGxlMzJfdG9fY3B1KCppbWFnZSkpOwotCQkJcmV0ID0gLUVJTzsKLQkJCWVycmNudCsrOwotCQkJaWYgKGVycmNudCA+PSAyMCkKLQkJCQlicmVhazsKKwkJCUlXTF9FUlIocHJpdiwgInVDb2RlIElOU1Qgc2VjdGlvbiBhdCAiCisJCQkJIm9mZnNldCAweCV4LCBpcyAweCV4LCBzL2IgMHgleFxuIiwKKwkJCQlvZmZzLCB2YWwsIGxlMzJfdG9fY3B1KCppbWFnZSkpOworCQkJZXJyb3JzKys7CiAJCX0KIAl9Ci0KLQlpZiAoIWVycmNudCkKLQkJSVdMX0RFQlVHX0lORk8ocHJpdiwKLQkJICAgICJ1Y29kZSBpbWFnZSBpbiBJTlNUUlVDVElPTiBtZW1vcnkgaXMgZ29vZFxuIik7Ci0KLQlyZXR1cm4gcmV0OwogfQogCiAvKioKICAqIGl3bF92ZXJpZnlfdWNvZGUgLSBkZXRlcm1pbmUgd2hpY2ggaW5zdHJ1Y3Rpb24gaW1hZ2UgaXMgaW4gU1JBTSwKICAqICAgIGFuZCB2ZXJpZnkgaXRzIGNvbnRlbnRzCiAgKi8KLWludCBpd2xfdmVyaWZ5X3Vjb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3N0YXRpYyBpbnQgaXdsX3ZlcmlmeV91Y29kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBmd19pbWcgKmltZykKIHsKLQlfX2xlMzIgKmltYWdlOwotCXUzMiBsZW47CisJaWYgKCFpd2xjb3JlX3ZlcmlmeV9pbnN0X3NwYXJzZShwcml2LCAmaW1nLT5jb2RlKSkgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAidUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlJV0xfRVJSKHByaXYsICJVQ09ERSBJTUFHRSBJTiBJTlNUUlVDVElPTiBTUkFNIE5PVCBWQUxJRCEhXG4iKTsKKworCWl3bF9wcmludF9taXNtYXRjaF9pbnN0KHByaXYsICZpbWctPmNvZGUpOworCXJldHVybiAtRUlPOworfQorCitzdHJ1Y3QgaXdsYWduX2FsaXZlX2RhdGEgeworCWJvb2wgdmFsaWQ7CisJdTggc3VidHlwZTsKK307CisKK3N0YXRpYyB2b2lkIGl3bGFnbl9hbGl2ZV9mbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCwKKwkJCSAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBpd2xhZ25fYWxpdmVfZGF0YSAqYWxpdmVfZGF0YSA9IGRhdGE7CisJc3RydWN0IGl3bF9hbGl2ZV9yZXNwICpwYWxpdmU7CisKKwlwYWxpdmUgPSAmcGt0LT51LmFsaXZlX2ZyYW1lOworCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkFsaXZlIHVjb2RlIHN0YXR1cyAweCUwOFggcmV2aXNpb24gIgorCQkgICAgICAgIjB4JTAxWCAweCUwMVhcbiIsCisJCSAgICAgICBwYWxpdmUtPmlzX3ZhbGlkLCBwYWxpdmUtPnZlcl90eXBlLAorCQkgICAgICAgcGFsaXZlLT52ZXJfc3VidHlwZSk7CisKKwlwcml2LT5kZXZpY2VfcG9pbnRlcnMuZXJyb3JfZXZlbnRfdGFibGUgPQorCQlsZTMyX3RvX2NwdShwYWxpdmUtPmVycm9yX2V2ZW50X3RhYmxlX3B0cik7CisJcHJpdi0+ZGV2aWNlX3BvaW50ZXJzLmxvZ19ldmVudF90YWJsZSA9CisJCWxlMzJfdG9fY3B1KHBhbGl2ZS0+bG9nX2V2ZW50X3RhYmxlX3B0cik7CisKKwlhbGl2ZV9kYXRhLT5zdWJ0eXBlID0gcGFsaXZlLT52ZXJfc3VidHlwZTsKKwlhbGl2ZV9kYXRhLT52YWxpZCA9IHBhbGl2ZS0+aXNfdmFsaWQgPT0gVUNPREVfVkFMSURfT0s7Cit9CisKKyNkZWZpbmUgVUNPREVfQUxJVkVfVElNRU9VVAlIWgorI2RlZmluZSBVQ09ERV9DQUxJQl9USU1FT1VUCSgyKkhaKQorCitpbnQgaXdsYWduX2xvYWRfdWNvZGVfd2FpdF9hbGl2ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJIHN0cnVjdCBmd19pbWcgKmltYWdlLAorCQkJCSBpbnQgc3VidHlwZSwgaW50IGFsdGVybmF0ZV9zdWJ0eXBlKQoreworCXN0cnVjdCBpd2xfbm90aWZpY2F0aW9uX3dhaXQgYWxpdmVfd2FpdDsKKwlzdHJ1Y3QgaXdsYWduX2FsaXZlX2RhdGEgYWxpdmVfZGF0YTsKKwlpbnQgcmV0OworCWVudW0gaXdsYWduX3Vjb2RlX3N1YnR5cGUgb2xkX3R5cGU7CisKKwlyZXQgPSBpd2xhZ25fc3RhcnRfZGV2aWNlKHByaXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpd2xhZ25faW5pdF9ub3RpZmljYXRpb25fd2FpdChwcml2LCAmYWxpdmVfd2FpdCwgUkVQTFlfQUxJVkUsCisJCQkJICAgICAgaXdsYWduX2FsaXZlX2ZuLCAmYWxpdmVfZGF0YSk7CisKKwlvbGRfdHlwZSA9IHByaXYtPnVjb2RlX3R5cGU7CisJcHJpdi0+dWNvZGVfdHlwZSA9IHN1YnR5cGU7CisKKwlyZXQgPSBpd2xhZ25fbG9hZF9naXZlbl91Y29kZShwcml2LCBpbWFnZSk7CisJaWYgKHJldCkgeworCQlwcml2LT51Y29kZV90eXBlID0gb2xkX3R5cGU7CisJCWl3bGFnbl9yZW1vdmVfbm90aWZpY2F0aW9uKHByaXYsICZhbGl2ZV93YWl0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBSZW1vdmUgYWxsIHJlc2V0cyB0byBhbGxvdyBOSUMgdG8gb3BlcmF0ZSAqLworCWl3bF93cml0ZTMyKHByaXYsIENTUl9SRVNFVCwgMCk7CisKKwkvKgorCSAqIFNvbWUgdGhpbmdzIG1heSBydW4gaW4gdGhlIGJhY2tncm91bmQgbm93LCBidXQgd2UKKwkgKiBqdXN0IHdhaXQgZm9yIHRoZSBBTElWRSBub3RpZmljYXRpb24gaGVyZS4KKwkgKi8KKwlyZXQgPSBpd2xhZ25fd2FpdF9ub3RpZmljYXRpb24ocHJpdiwgJmFsaXZlX3dhaXQsIFVDT0RFX0FMSVZFX1RJTUVPVVQpOworCWlmIChyZXQpIHsKKwkJcHJpdi0+dWNvZGVfdHlwZSA9IG9sZF90eXBlOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmICghYWxpdmVfZGF0YS52YWxpZCkgeworCQlJV0xfRVJSKHByaXYsICJMb2FkZWQgdWNvZGUgaXMgbm90IHZhbGlkIVxuIik7CisJCXByaXYtPnVjb2RlX3R5cGUgPSBvbGRfdHlwZTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGFsaXZlX2RhdGEuc3VidHlwZSAhPSBzdWJ0eXBlICYmCisJICAgIGFsaXZlX2RhdGEuc3VidHlwZSAhPSBhbHRlcm5hdGVfc3VidHlwZSkgeworCQlJV0xfRVJSKHByaXYsCisJCQkiTG9hZGVkIHVjb2RlIGlzIG5vdCBleHBlY3RlZCB0eXBlIChnb3QgJWQsIGV4cGVjdGVkICVkKSFcbiIsCisJCQlhbGl2ZV9kYXRhLnN1YnR5cGUsIHN1YnR5cGUpOworCQlwcml2LT51Y29kZV90eXBlID0gb2xkX3R5cGU7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldCA9IGl3bF92ZXJpZnlfdWNvZGUocHJpdiwgaW1hZ2UpOworCWlmIChyZXQpIHsKKwkJcHJpdi0+dWNvZGVfdHlwZSA9IG9sZF90eXBlOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIGRlbGF5IGEgYml0IHRvIGdpdmUgcmZraWxsIHRpbWUgdG8gcnVuICovCisJbXNsZWVwKDUpOworCisJcmV0ID0gaXdsYWduX2FsaXZlX25vdGlmeShwcml2KTsKKwlpZiAocmV0KSB7CisJCUlXTF9XQVJOKHByaXYsCisJCQkiQ291bGQgbm90IGNvbXBsZXRlIEFMSVZFIHRyYW5zaXRpb246ICVkXG4iLCByZXQpOworCQlwcml2LT51Y29kZV90eXBlID0gb2xkX3R5cGU7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBpd2xhZ25fcnVuX2luaXRfdWNvZGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXN0cnVjdCBpd2xfbm90aWZpY2F0aW9uX3dhaXQgY2FsaWJfd2FpdDsKIAlpbnQgcmV0OwogCi0JLyogVHJ5IGJvb3RzdHJhcCAqLwotCWltYWdlID0gKF9fbGUzMiAqKXByaXYtPnVjb2RlX2Jvb3Qudl9hZGRyOwotCWxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOwotCXJldCA9IGl3bGNvcmVfdmVyaWZ5X2luc3Rfc3BhcnNlKHByaXYsIGltYWdlLCBsZW4pOwotCWlmICghcmV0KSB7Ci0JCUlXTF9ERUJVR19JTkZPKHByaXYsICJCb290c3RyYXAgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnByaXYtPm11dGV4KTsKKworCS8qIE5vIGluaXQgdWNvZGUgcmVxdWlyZWQ/IEN1cmlvdXMsIGJ1dCBtYXliZSBvayAqLworCWlmICghcHJpdi0+dWNvZGVfaW5pdC5jb2RlLmxlbikKIAkJcmV0dXJuIDA7Ci0JfQogCi0JLyogVHJ5IGluaXRpYWxpemUgKi8KLQlpbWFnZSA9IChfX2xlMzIgKilwcml2LT51Y29kZV9pbml0LnZfYWRkcjsKLQlsZW4gPSBwcml2LT51Y29kZV9pbml0LmxlbjsKLQlyZXQgPSBpd2xjb3JlX3ZlcmlmeV9pbnN0X3NwYXJzZShwcml2LCBpbWFnZSwgbGVuKTsKLQlpZiAoIXJldCkgewotCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdGlhbGl6ZSB1Q29kZSBpcyBnb29kIGluIGluc3QgU1JBTVxuIik7CisJaWYgKHByaXYtPnVjb2RlX3R5cGUgIT0gVUNPREVfU1VCVFlQRV9OT05FX0xPQURFRCkKIAkJcmV0dXJuIDA7Ci0JfQogCi0JLyogVHJ5IHJ1bnRpbWUvcHJvdG9jb2wgKi8KLQlpbWFnZSA9IChfX2xlMzIgKilwcml2LT51Y29kZV9jb2RlLnZfYWRkcjsKLQlsZW4gPSBwcml2LT51Y29kZV9jb2RlLmxlbjsKLQlyZXQgPSBpd2xjb3JlX3ZlcmlmeV9pbnN0X3NwYXJzZShwcml2LCBpbWFnZSwgbGVuKTsKLQlpZiAoIXJldCkgewotCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUnVudGltZSB1Q29kZSBpcyBnb29kIGluIGluc3QgU1JBTVxuIik7Ci0JCXJldHVybiAwOwotCX0KKwlpd2xhZ25faW5pdF9ub3RpZmljYXRpb25fd2FpdChwcml2LCAmY2FsaWJfd2FpdCwKKwkJCQkgICAgICBDQUxJQlJBVElPTl9DT01QTEVURV9OT1RJRklDQVRJT04sCisJCQkJICAgICAgTlVMTCwgTlVMTCk7CiAKLQlJV0xfRVJSKHByaXYsICJOTyBWQUxJRCBVQ09ERSBJTUFHRSBJTiBJTlNUUlVDVElPTiBTUkFNISFcbiIpOworCS8qIFdpbGwgYWxzbyBzdGFydCB0aGUgZGV2aWNlICovCisJcmV0ID0gaXdsYWduX2xvYWRfdWNvZGVfd2FpdF9hbGl2ZShwcml2LCAmcHJpdi0+dWNvZGVfaW5pdCwKKwkJCQkJICAgVUNPREVfU1VCVFlQRV9JTklULCAtMSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKIAotCS8qIFNpbmNlIG5vdGhpbmcgc2VlbXMgdG8gbWF0Y2gsIHNob3cgZmlyc3Qgc2V2ZXJhbCBkYXRhIGVudHJpZXMgaW4KLQkgKiBpbnN0cnVjdGlvbiBTUkFNLCBzbyBtYXliZSB2aXN1YWwgaW5zcGVjdGlvbiB3aWxsIGdpdmUgYSBjbHVlLgotCSAqIFNlbGVjdGlvbiBvZiBib290c3RyYXAgaW1hZ2UgKHZzLiBvdGhlciBpbWFnZXMpIGlzIGFyYml0cmFyeS4gKi8KLQlpbWFnZSA9IChfX2xlMzIgKilwcml2LT51Y29kZV9ib290LnZfYWRkcjsKLQlsZW4gPSBwcml2LT51Y29kZV9ib290LmxlbjsKLQlyZXQgPSBpd2xfdmVyaWZ5X2luc3RfZnVsbChwcml2LCBpbWFnZSwgbGVuKTsKKwlyZXQgPSBpd2xhZ25faW5pdF9hbGl2ZV9zdGFydChwcml2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOwogCisJLyoKKwkgKiBTb21lIHRoaW5ncyBtYXkgcnVuIGluIHRoZSBiYWNrZ3JvdW5kIG5vdywgYnV0IHdlCisJICoganVzdCB3YWl0IGZvciB0aGUgY2FsaWJyYXRpb24gY29tcGxldGUgbm90aWZpY2F0aW9uLgorCSAqLworCXJldCA9IGl3bGFnbl93YWl0X25vdGlmaWNhdGlvbihwcml2LCAmY2FsaWJfd2FpdCwgVUNPREVfQ0FMSUJfVElNRU9VVCk7CisKKwlnb3RvIG91dDsKKworIGVycm9yOgorCWl3bGFnbl9yZW1vdmVfbm90aWZpY2F0aW9uKHByaXYsICZjYWxpYl93YWl0KTsKKyBvdXQ6CisJLyogV2hhdGV2ZXIgaGFwcGVuZWQsIHN0b3AgdGhlIGRldmljZSAqLworCWl3bGFnbl9zdG9wX2RldmljZShwcml2KTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwppbmRleCAzMjFiMThiLi4zZWNjMzE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpAQCAtNTksNyArNTksNiBAQAogI2luY2x1ZGUgIml3bC1zdGEuaCIKICNpbmNsdWRlICJpd2wtYWduLWNhbGliLmgiCiAjaW5jbHVkZSAiaXdsLWFnbi5oIgotI2luY2x1ZGUgIml3bC1hZ24tbGVkLmgiCiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTAzLDcwICsxMDIsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgaXdsX2NsZWFyX2ZyZWVfZnJhbWVzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50OwotCi0JSVdMX0RFQlVHX0lORk8ocHJpdiwgIiVkIGZyYW1lcyBvbiBwcmUtYWxsb2NhdGVkIGhlYXAgb24gY2xlYXIuXG4iLAotCQkgICAgICAgcHJpdi0+ZnJhbWVzX2NvdW50KTsKLQotCXdoaWxlICghbGlzdF9lbXB0eSgmcHJpdi0+ZnJlZV9mcmFtZXMpKSB7Ci0JCWVsZW1lbnQgPSBwcml2LT5mcmVlX2ZyYW1lcy5uZXh0OwotCQlsaXN0X2RlbChlbGVtZW50KTsKLQkJa2ZyZWUobGlzdF9lbnRyeShlbGVtZW50LCBzdHJ1Y3QgaXdsX2ZyYW1lLCBsaXN0KSk7Ci0JCXByaXYtPmZyYW1lc19jb3VudC0tOwotCX0KLQotCWlmIChwcml2LT5mcmFtZXNfY291bnQpIHsKLQkJSVdMX1dBUk4ocHJpdiwgIiVkIGZyYW1lcyBzdGlsbCBpbiB1c2UuICBEaWQgd2UgbG9zZSBvbmU/XG4iLAotCQkJICAgIHByaXYtPmZyYW1lc19jb3VudCk7Ci0JCXByaXYtPmZyYW1lc19jb3VudCA9IDA7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IGl3bF9mcmFtZSAqaXdsX2dldF9mcmVlX2ZyYW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlzdHJ1Y3QgaXdsX2ZyYW1lICpmcmFtZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50OwotCWlmIChsaXN0X2VtcHR5KCZwcml2LT5mcmVlX2ZyYW1lcykpIHsKLQkJZnJhbWUgPSBremFsbG9jKHNpemVvZigqZnJhbWUpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFmcmFtZSkgewotCQkJSVdMX0VSUihwcml2LCAiQ291bGQgbm90IGFsbG9jYXRlIGZyYW1lIVxuIik7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCi0JCXByaXYtPmZyYW1lc19jb3VudCsrOwotCQlyZXR1cm4gZnJhbWU7Ci0JfQotCi0JZWxlbWVudCA9IHByaXYtPmZyZWVfZnJhbWVzLm5leHQ7Ci0JbGlzdF9kZWwoZWxlbWVudCk7Ci0JcmV0dXJuIGxpc3RfZW50cnkoZWxlbWVudCwgc3RydWN0IGl3bF9mcmFtZSwgbGlzdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bF9mcmVlX2ZyYW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9mcmFtZSAqZnJhbWUpCi17Ci0JbWVtc2V0KGZyYW1lLCAwLCBzaXplb2YoKmZyYW1lKSk7Ci0JbGlzdF9hZGQoJmZyYW1lLT5saXN0LCAmcHJpdi0+ZnJlZV9mcmFtZXMpOwotfQotCi1zdGF0aWMgdTMyIGl3bF9maWxsX2JlYWNvbl9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCi0JCQkJIGludCBsZWZ0KQotewotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnByaXYtPm11dGV4KTsKLQotCWlmICghcHJpdi0+YmVhY29uX3NrYikKLQkJcmV0dXJuIDA7Ci0KLQlpZiAocHJpdi0+YmVhY29uX3NrYi0+bGVuID4gbGVmdCkKLQkJcmV0dXJuIDA7Ci0KLQltZW1jcHkoaGRyLCBwcml2LT5iZWFjb25fc2tiLT5kYXRhLCBwcml2LT5iZWFjb25fc2tiLT5sZW4pOwotCi0JcmV0dXJuIHByaXYtPmJlYWNvbl9za2ItPmxlbjsKLX0KLQogLyogUGFyc2UgdGhlIGJlYWNvbiBmcmFtZSB0byBmaW5kIHRoZSBUSU0gZWxlbWVudCBhbmQgc2V0IHRpbV9pZHggJiB0aW1fc2l6ZSAqLwogc3RhdGljIHZvaWQgaXdsX3NldF9iZWFjb25fdGltKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgICBzdHJ1Y3QgaXdsX3R4X2JlYWNvbl9jbWQgKnR4X2JlYWNvbl9jbWQsCkBAIC0xOTQsMTMgKzEyOSwxOCBAQAogCQlJV0xfV0FSTihwcml2LCAiVW5hYmxlIHRvIGZpbmQgVElNIEVsZW1lbnQgaW4gYmVhY29uXG4iKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpd2xfaHdfZ2V0X2JlYWNvbl9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgICAgICBzdHJ1Y3QgaXdsX2ZyYW1lICpmcmFtZSkKK2ludCBpd2xhZ25fc2VuZF9iZWFjb25fY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaXdsX3R4X2JlYWNvbl9jbWQgKnR4X2JlYWNvbl9jbWQ7CisJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CisJCS5pZCA9IFJFUExZX1RYX0JFQUNPTiwKKwkJLmZsYWdzID0gQ01EX1NJWkVfSFVHRSwKKwl9OwogCXUzMiBmcmFtZV9zaXplOwogCXUzMiByYXRlX2ZsYWdzOwogCXUzMiByYXRlOworCWludCBlcnI7CisKIAkvKgogCSAqIFdlIGhhdmUgdG8gc2V0IHVwIHRoZSBUWCBjb21tYW5kLCB0aGUgVFggQmVhY29uIGNvbW1hbmQsIGFuZCB0aGUKIAkgKiBiZWFjb24gY29udGVudHMuCkBAIC0yMTMsMTcgKzE1MywxOSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKiBJbml0aWFsaXplIG1lbW9yeSAqLwotCXR4X2JlYWNvbl9jbWQgPSAmZnJhbWUtPnUuYmVhY29uOwotCW1lbXNldCh0eF9iZWFjb25fY21kLCAwLCBzaXplb2YoKnR4X2JlYWNvbl9jbWQpKTsKKwlpZiAoV0FSTl9PTighcHJpdi0+YmVhY29uX3NrYikpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQWxsb2NhdGUgYmVhY29uIG1lbW9yeSAqLworCXR4X2JlYWNvbl9jbWQgPSBremFsbG9jKHNpemVvZigqdHhfYmVhY29uX2NtZCkgKyBwcml2LT5iZWFjb25fc2tiLT5sZW4sCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCF0eF9iZWFjb25fY21kKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZyYW1lX3NpemUgPSBwcml2LT5iZWFjb25fc2tiLT5sZW47CiAKIAkvKiBTZXQgdXAgVFggYmVhY29uIGNvbnRlbnRzICovCi0JZnJhbWVfc2l6ZSA9IGl3bF9maWxsX2JlYWNvbl9mcmFtZShwcml2LCB0eF9iZWFjb25fY21kLT5mcmFtZSwKLQkJCQlzaXplb2YoZnJhbWUtPnUpIC0gc2l6ZW9mKCp0eF9iZWFjb25fY21kKSk7Ci0JaWYgKFdBUk5fT05fT05DRShmcmFtZV9zaXplID4gTUFYX01QRFVfU0laRSkpCi0JCXJldHVybiAwOwotCWlmICghZnJhbWVfc2l6ZSkKLQkJcmV0dXJuIDA7CisJbWVtY3B5KHR4X2JlYWNvbl9jbWQtPmZyYW1lLCBwcml2LT5iZWFjb25fc2tiLT5kYXRhLCBmcmFtZV9zaXplKTsKIAogCS8qIFNldCB1cCBUWCBjb21tYW5kIGZpZWxkcyAqLwogCXR4X2JlYWNvbl9jbWQtPnR4LmxlbiA9IGNwdV90b19sZTE2KCh1MTYpZnJhbWVfc2l6ZSk7CkBAIC0yNDYsMzUgKzE4OCwxNiBAQAogCXR4X2JlYWNvbl9jbWQtPnR4LnJhdGVfbl9mbGFncyA9IGl3bF9od19zZXRfcmF0ZV9uX2ZsYWdzKHJhdGUsCiAJCQlyYXRlX2ZsYWdzKTsKIAotCXJldHVybiBzaXplb2YoKnR4X2JlYWNvbl9jbWQpICsgZnJhbWVfc2l6ZTsKLX0KKwkvKiBTdWJtaXQgY29tbWFuZCAqLworCWNtZC5sZW4gPSBzaXplb2YoKnR4X2JlYWNvbl9jbWQpICsgZnJhbWVfc2l6ZTsKKwljbWQuZGF0YSA9IHR4X2JlYWNvbl9jbWQ7CiAKLWludCBpd2xhZ25fc2VuZF9iZWFjb25fY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlzdHJ1Y3QgaXdsX2ZyYW1lICpmcmFtZTsKLQl1bnNpZ25lZCBpbnQgZnJhbWVfc2l6ZTsKLQlpbnQgcmM7CisJZXJyID0gaXdsX3NlbmRfY21kX3N5bmMocHJpdiwgJmNtZCk7CiAKLQlmcmFtZSA9IGl3bF9nZXRfZnJlZV9mcmFtZShwcml2KTsKLQlpZiAoIWZyYW1lKSB7Ci0JCUlXTF9FUlIocHJpdiwgIkNvdWxkIG5vdCBvYnRhaW4gZnJlZSBmcmFtZSBidWZmZXIgZm9yIGJlYWNvbiAiCi0JCQkgICJjb21tYW5kLlxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KKwkvKiBGcmVlIHRlbXBvcmFyeSBzdG9yYWdlICovCisJa2ZyZWUodHhfYmVhY29uX2NtZCk7CiAKLQlmcmFtZV9zaXplID0gaXdsX2h3X2dldF9iZWFjb25fY21kKHByaXYsIGZyYW1lKTsKLQlpZiAoIWZyYW1lX3NpemUpIHsKLQkJSVdMX0VSUihwcml2LCAiRXJyb3IgY29uZmlndXJpbmcgdGhlIGJlYWNvbiBjb21tYW5kXG4iKTsKLQkJaXdsX2ZyZWVfZnJhbWUocHJpdiwgZnJhbWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyYyA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfVFhfQkVBQ09OLCBmcmFtZV9zaXplLAotCQkJICAgICAgJmZyYW1lLT51LmNtZFswXSk7Ci0KLQlpd2xfZnJlZV9mcmFtZShwcml2LCBmcmFtZSk7Ci0KLQlyZXR1cm4gcmM7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGl3bF90ZmRfdGJfZ2V0X2FkZHIoc3RydWN0IGl3bF90ZmQgKnRmZCwgdTggaWR4KQpAQCAtMzk1LDcgKzMxOCw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCUJVR19PTihhZGRyICYgfkRNQV9CSVRfTUFTSygzNikpOworCWlmIChXQVJOX09OKGFkZHIgJiB+RE1BX0JJVF9NQVNLKDM2KSkpCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKHVubGlrZWx5KGFkZHIgJiB+SVdMX1RYX0RNQV9NQVNLKSkKIAkJSVdMX0VSUihwcml2LCAiVW5hbGlnbmVkIGFkZHJlc3MgPSAlbGx4XG4iLAogCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWFkZHIpOwpAQCAtNDA5LDcgKzMzNCw3IEBACiAgKiBUZWxsIG5pYyB3aGVyZSB0byBmaW5kIGNpcmN1bGFyIGJ1ZmZlciBvZiBUeCBGcmFtZSBEZXNjcmlwdG9ycyBmb3IKICAqIGdpdmVuIFR4IHF1ZXVlLCBhbmQgZW5hYmxlIHRoZSBETUEgY2hhbm5lbCB1c2VkIGZvciB0aGF0IHF1ZXVlLgogICoKLSAqIDQ5NjUgc3VwcG9ydHMgdXAgdG8gMTYgVHggcXVldWVzIGluIERSQU0sIG1hcHBlZCB0byB1cCB0byA4IFR4IERNQQorICogc3VwcG9ydHMgdXAgdG8gMTYgVHggcXVldWVzIGluIERSQU0sIG1hcHBlZCB0byB1cCB0byA4IFR4IERNQQogICogY2hhbm5lbHMgc3VwcG9ydGVkIGluIGhhcmR3YXJlLgogICovCiBpbnQgaXdsX2h3X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LApAQCAtNDgzLDEyICs0MDgsMTQgQEAKIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2xfcHJpdiwgYnRfZnVsbF9jb25jdXJyZW5jeSk7CiAJc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eDsKIAorCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAogCS8qIGRvbnQgc2VuZCBob3N0IGNvbW1hbmQgaWYgcmYta2lsbCBpcyBvbiAqLwogCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKQotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCiAJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkJUIGNvZXggaW4gJXMgbW9kZVxuIiwKIAkJICAgICAgIHByaXYtPmJ0X2Z1bGxfY29uY3VycmVudCA/CkBAIC00OTgsMTUgKzQyNSwxNSBAQAogCSAqIExRICYgUlhPTiB1cGRhdGVkIGNtZHMgbXVzdCBiZSBzZW50IGJlZm9yZSBCVCBDb25maWcgY21kCiAJICogdG8gYXZvaWQgMy13aXJlIGNvbGxpc2lvbnMKIAkgKi8KLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJZm9yX2VhY2hfY29udGV4dChwcml2LCBjdHgpIHsKIAkJaWYgKHByaXYtPmNmZy0+b3BzLT5oY21kLT5zZXRfcnhvbl9jaGFpbikKIAkJCXByaXYtPmNmZy0+b3BzLT5oY21kLT5zZXRfcnhvbl9jaGFpbihwcml2LCBjdHgpOwogCQlpd2xjb3JlX2NvbW1pdF9yeG9uKHByaXYsIGN0eCk7CiAJfQotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJcHJpdi0+Y2ZnLT5vcHMtPmhjbWQtPnNlbmRfYnRfY29uZmlnKHByaXYpOworb3V0OgorCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCiAvKioKQEAgLTU1Niw3ICs0ODMsNyBAQAogCX0KIAogCS8qIFNldCBzdGFydGluZyBhZGRyZXNzOyByZWFkcyB3aWxsIGF1dG8taW5jcmVtZW50ICovCi0JX2l3bF93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JBRERSLCBwdHIpOworCWl3bF93cml0ZTMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkFERFIsIHB0cik7CiAJcm1iKCk7CiAKIAkvKgpAQCAtNTY0LDEzICs0OTEsMTMgQEAKIAkgKiBwbGFjZSBldmVudCBpZCAjIGF0IGZhciByaWdodCBmb3IgZWFzaWVyIHZpc3VhbCBwYXJzaW5nLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1fZXZlbnRzOyBpKyspIHsKLQkJZXYgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKLQkJdGltZSA9IF9pd2xfcmVhZF9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOworCQlldiA9IGl3bF9yZWFkMzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKKwkJdGltZSA9IGl3bF9yZWFkMzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKIAkJaWYgKG1vZGUgPT0gMCkgewogCQkJdHJhY2VfaXdsd2lmaV9kZXZfdWNvZGVfY29udF9ldmVudChwcml2LAogCQkJCQkJCTAsIHRpbWUsIGV2KTsKIAkJfSBlbHNlIHsKLQkJCWRhdGEgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKKwkJCWRhdGEgPSBpd2xfcmVhZDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7CiAJCQl0cmFjZV9pd2x3aWZpX2Rldl91Y29kZV9jb250X2V2ZW50KHByaXYsCiAJCQkJCQl0aW1lLCBkYXRhLCBldik7CiAJCX0KQEAgLTU4OCwxMCArNTE1LDcgQEAKIAl1MzIgbnVtX3dyYXBzOyAgLyogIyB0aW1lcyB1Q29kZSB3cmFwcGVkIHRvIHRvcCBvZiBsb2cgKi8KIAl1MzIgbmV4dF9lbnRyeTsgLyogaW5kZXggb2YgbmV4dCBlbnRyeSB0byBiZSB3cml0dGVuIGJ5IHVDb2RlICovCiAKLQlpZiAocHJpdi0+dWNvZGVfdHlwZSA9PSBVQ09ERV9JTklUKQotCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LmVycm9yX2V2ZW50X3RhYmxlX3B0cik7Ci0JZWxzZQotCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZS5sb2dfZXZlbnRfdGFibGVfcHRyKTsKKwliYXNlID0gcHJpdi0+ZGV2aWNlX3BvaW50ZXJzLmVycm9yX2V2ZW50X3RhYmxlOwogCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5pc192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7CiAJCWNhcGFjaXR5ID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSk7CiAJCW51bV93cmFwcyA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAoMiAqIHNpemVvZih1MzIpKSk7CkBAIC03MjAsNyArNjQ0LDEwIEBACiAJCS8qIElmIGFuIFJYQiBkb2Vzbid0IGhhdmUgYSBSeCBxdWV1ZSBzbG90IGFzc29jaWF0ZWQgd2l0aCBpdCwKIAkJICogdGhlbiBhIGJ1ZyBoYXMgYmVlbiBpbnRyb2R1Y2VkIGluIHRoZSBxdWV1ZSByZWZpbGxpbmcKIAkJICogcm91dGluZXMgLS0gY2F0Y2ggaXQgaGVyZSAqLwotCQlCVUdfT04ocnhiID09IE5VTEwpOworCQlpZiAoV0FSTl9PTihyeGIgPT0gTlVMTCkpIHsKKwkJCWkgPSAoaSArIDEpICYgUlhfUVVFVUVfTUFTSzsKKwkJCWNvbnRpbnVlOworCQl9CiAKIAkJcnhxLT5xdWV1ZVtpXSA9IE5VTEw7CiAKQEAgLTc2MCwxMyArNjg3LDE1IEBACiAJCQkJaWYgKHctPmNtZCA9PSBwa3QtPmhkci5jbWQpIHsKIAkJCQkJdy0+dHJpZ2dlcmVkID0gdHJ1ZTsKIAkJCQkJaWYgKHctPmZuKQotCQkJCQkJdy0+Zm4ocHJpdiwgcGt0KTsKKwkJCQkJCXctPmZuKHByaXYsIHBrdCwgdy0+Zm5fZGF0YSk7CiAJCQkJfQogCQkJfQogCQkJc3Bpbl91bmxvY2soJnByaXYtPl9hZ24ubm90aWZfd2FpdF9sb2NrKTsKIAogCQkJd2FrZV91cF9hbGwoJnByaXYtPl9hZ24ubm90aWZfd2FpdHEpOwogCQl9CisJCWlmIChwcml2LT5wcmVfcnhfaGFuZGxlcikKKwkJCXByaXYtPnByZV9yeF9oYW5kbGVyKHByaXYsIHJ4Yik7CiAKIAkJLyogQmFzZWQgb24gdHlwZSBvZiBjb21tYW5kIHJlc3BvbnNlIG9yIG5vdGlmaWNhdGlvbiwKIAkJICogICBoYW5kbGUgdGhvc2UgdGhhdCBuZWVkIGhhbmRsaW5nIHZpYSBmdW5jdGlvbiBpbgpAQCAtODM3LDE5OSArNzY2LDYgQEAKIAkJaXdsYWduX3J4X3F1ZXVlX3Jlc3RvY2socHJpdik7CiB9CiAKLS8qIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBmbHVzaCBhbnkgc2NoZWR1bGVkIHRhc2tsZXQgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfc3luY2hyb25pemVfaXJxKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQkvKiB3YWl0IHRvIG1ha2Ugc3VyZSB3ZSBmbHVzaCBwZW5kaW5nIHRhc2tsZXQqLwotCXN5bmNocm9uaXplX2lycShwcml2LT5wY2lfZGV2LT5pcnEpOwotCXRhc2tsZXRfa2lsbCgmcHJpdi0+aXJxX3Rhc2tsZXQpOwotfQotCi1zdGF0aWMgdm9pZCBpd2xfaXJxX3Rhc2tsZXRfbGVnYWN5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQl1MzIgaW50YSwgaGFuZGxlZCA9IDA7Ci0JdTMyIGludGFfZmg7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MzIgaTsKLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotCXUzMiBpbnRhX21hc2s7Ci0jZW5kaWYKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQkvKiBBY2svY2xlYXIvcmVzZXQgcGVuZGluZyB1Q29kZSBpbnRlcnJ1cHRzLgotCSAqIE5vdGU6ICBTb21lIGJpdHMgaW4gQ1NSX0lOVCBhcmUgIk9SIiBvZiBiaXRzIGluIENTUl9GSF9JTlRfU1RBVFVTLAotCSAqICBhbmQgd2lsbCBjbGVhciBvbmx5IHdoZW4gQ1NSX0ZIX0lOVF9TVEFUVVMgZ2V0cyBjbGVhcmVkLiAqLwotCWludGEgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9JTlQpOwotCWl3bF93cml0ZTMyKHByaXYsIENTUl9JTlQsIGludGEpOwotCi0JLyogQWNrL2NsZWFyL3Jlc2V0IHBlbmRpbmcgZmxvdy1oYW5kbGVyIChETUEpIGludGVycnVwdHMuCi0JICogQW55IG5ldyBpbnRlcnJ1cHRzIHRoYXQgaGFwcGVuIGFmdGVyIHRoaXMsIGVpdGhlciB3aGlsZSB3ZSdyZQotCSAqIGluIHRoaXMgdGFza2xldCwgb3IgbGF0ZXIsIHdpbGwgc2hvdyB1cCBpbiBuZXh0IElTUi90YXNrbGV0LiAqLwotCWludGFfZmggPSBpd2xfcmVhZDMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTKTsKLQlpd2xfd3JpdGUzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUywgaW50YV9maCk7Ci0KLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotCWlmIChpd2xfZ2V0X2RlYnVnX2xldmVsKHByaXYpICYgSVdMX0RMX0lTUikgewotCQkvKiBqdXN0IGZvciBkZWJ1ZyAqLwotCQlpbnRhX21hc2sgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9JTlRfTUFTSyk7Ci0JCUlXTF9ERUJVR19JU1IocHJpdiwgImludGEgMHglMDh4LCBlbmFibGVkIDB4JTA4eCwgZmggMHglMDh4XG4iLAotCQkJICAgICAgaW50YSwgaW50YV9tYXNrLCBpbnRhX2ZoKTsKLQl9Ci0jZW5kaWYKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCS8qIFNpbmNlIENTUl9JTlQgYW5kIENTUl9GSF9JTlRfU1RBVFVTIHJlYWRzIGFuZCBjbGVhcnMgYXJlIG5vdAotCSAqIGF0b21pYywgbWFrZSBzdXJlIHRoYXQgaW50YSBjb3ZlcnMgYWxsIHRoZSBpbnRlcnJ1cHRzIHRoYXQKLQkgKiB3ZSd2ZSBkaXNjb3ZlcmVkLCBldmVuIGlmIEZIIGludGVycnVwdCBjYW1lIGluIGp1c3QgYWZ0ZXIKLQkgKiByZWFkaW5nIENTUl9JTlQuICovCi0JaWYgKGludGFfZmggJiBDU1I0OV9GSF9JTlRfUlhfTUFTSykKLQkJaW50YSB8PSBDU1JfSU5UX0JJVF9GSF9SWDsKLQlpZiAoaW50YV9maCAmIENTUjQ5X0ZIX0lOVF9UWF9NQVNLKQotCQlpbnRhIHw9IENTUl9JTlRfQklUX0ZIX1RYOwotCi0JLyogTm93IHNlcnZpY2UgYWxsIGludGVycnVwdCBiaXRzIGRpc2NvdmVyZWQgYWJvdmUuICovCi0JaWYgKGludGEgJiBDU1JfSU5UX0JJVF9IV19FUlIpIHsKLQkJSVdMX0VSUihwcml2LCAiSGFyZHdhcmUgZXJyb3IgZGV0ZWN0ZWQuICBSZXN0YXJ0aW5nLlxuIik7Ci0KLQkJLyogVGVsbCB0aGUgZGV2aWNlIHRvIHN0b3Agc2VuZGluZyBpbnRlcnJ1cHRzICovCi0JCWl3bF9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7Ci0KLQkJcHJpdi0+aXNyX3N0YXRzLmh3Kys7Ci0JCWl3bF9pcnFfaGFuZGxlX2Vycm9yKHByaXYpOwotCi0JCWhhbmRsZWQgfD0gQ1NSX0lOVF9CSVRfSFdfRVJSOwotCi0JCXJldHVybjsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotCWlmIChpd2xfZ2V0X2RlYnVnX2xldmVsKHByaXYpICYgKElXTF9ETF9JU1IpKSB7Ci0JCS8qIE5JQyBmaXJlcyB0aGlzLCBidXQgd2UgZG9uJ3QgdXNlIGl0LCByZWR1bmRhbnQgd2l0aCBXQUtFVVAgKi8KLQkJaWYgKGludGEgJiBDU1JfSU5UX0JJVF9TQ0QpIHsKLQkJCUlXTF9ERUJVR19JU1IocHJpdiwgIlNjaGVkdWxlciBmaW5pc2hlZCB0byB0cmFuc21pdCAiCi0JCQkJICAgICAgInRoZSBmcmFtZS9mcmFtZXMuXG4iKTsKLQkJCXByaXYtPmlzcl9zdGF0cy5zY2grKzsKLQkJfQotCi0JCS8qIEFsaXZlIG5vdGlmaWNhdGlvbiB2aWEgUnggaW50ZXJydXB0IHdpbGwgZG8gdGhlIHJlYWwgd29yayAqLwotCQlpZiAoaW50YSAmIENTUl9JTlRfQklUX0FMSVZFKSB7Ci0JCQlJV0xfREVCVUdfSVNSKHByaXYsICJBbGl2ZSBpbnRlcnJ1cHRcbiIpOwotCQkJcHJpdi0+aXNyX3N0YXRzLmFsaXZlKys7Ci0JCX0KLQl9Ci0jZW5kaWYKLQkvKiBTYWZlbHkgaWdub3JlIHRoZXNlIGJpdHMgZm9yIGRlYnVnIGNoZWNrcyBiZWxvdyAqLwotCWludGEgJj0gfihDU1JfSU5UX0JJVF9TQ0QgfCBDU1JfSU5UX0JJVF9BTElWRSk7Ci0KLQkvKiBIVyBSRiBLSUxMIHN3aXRjaCB0b2dnbGVkICovCi0JaWYgKGludGEgJiBDU1JfSU5UX0JJVF9SRl9LSUxMKSB7Ci0JCWludCBod19yZl9raWxsID0gMDsKLQkJaWYgKCEoaXdsX3JlYWQzMihwcml2LCBDU1JfR1BfQ05UUkwpICYKLQkJCQlDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSFdfUkZfS0lMTF9TVykpCi0JCQlod19yZl9raWxsID0gMTsKLQotCQlJV0xfV0FSTihwcml2LCAiUkZfS0lMTCBiaXQgdG9nZ2xlZCB0byAlcy5cbiIsCi0JCQkJaHdfcmZfa2lsbCA/ICJkaXNhYmxlIHJhZGlvIiA6ICJlbmFibGUgcmFkaW8iKTsKLQotCQlwcml2LT5pc3Jfc3RhdHMucmZraWxsKys7Ci0KLQkJLyogZHJpdmVyIG9ubHkgbG9hZHMgdWNvZGUgb25jZSBzZXR0aW5nIHRoZSBpbnRlcmZhY2UgdXAuCi0JCSAqIHRoZSBkcml2ZXIgYWxsb3dzIGxvYWRpbmcgdGhlIHVjb2RlIGV2ZW4gaWYgdGhlIHJhZGlvCi0JCSAqIGlzIGtpbGxlZC4gSGVuY2UgdXBkYXRlIHRoZSBraWxsc3dpdGNoIHN0YXRlIGhlcmUuIFRoZQotCQkgKiByZmtpbGwgaGFuZGxlciB3aWxsIGNhcmUgYWJvdXQgcmVzdGFydGluZyBpZiBuZWVkZWQuCi0JCSAqLwotCQlpZiAoIXRlc3RfYml0KFNUQVRVU19BTElWRSwgJnByaXYtPnN0YXR1cykpIHsKLQkJCWlmIChod19yZl9raWxsKQotCQkJCXNldF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOwotCQkJZWxzZQotCQkJCWNsZWFyX2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cyk7Ci0JCQl3aXBoeV9yZmtpbGxfc2V0X2h3X3N0YXRlKHByaXYtPmh3LT53aXBoeSwgaHdfcmZfa2lsbCk7Ci0JCX0KLQotCQloYW5kbGVkIHw9IENTUl9JTlRfQklUX1JGX0tJTEw7Ci0JfQotCi0JLyogQ2hpcCBnb3QgdG9vIGhvdCBhbmQgc3RvcHBlZCBpdHNlbGYgKi8KLQlpZiAoaW50YSAmIENTUl9JTlRfQklUX0NUX0tJTEwpIHsKLQkJSVdMX0VSUihwcml2LCAiTWljcm9jb2RlIENUIGtpbGwgZXJyb3IgZGV0ZWN0ZWQuXG4iKTsKLQkJcHJpdi0+aXNyX3N0YXRzLmN0a2lsbCsrOwotCQloYW5kbGVkIHw9IENTUl9JTlRfQklUX0NUX0tJTEw7Ci0JfQotCi0JLyogRXJyb3IgZGV0ZWN0ZWQgYnkgdUNvZGUgKi8KLQlpZiAoaW50YSAmIENTUl9JTlRfQklUX1NXX0VSUikgewotCQlJV0xfRVJSKHByaXYsICJNaWNyb2NvZGUgU1cgZXJyb3IgZGV0ZWN0ZWQuICIKLQkJCSIgUmVzdGFydGluZyAweCVYLlxuIiwgaW50YSk7Ci0JCXByaXYtPmlzcl9zdGF0cy5zdysrOwotCQlpd2xfaXJxX2hhbmRsZV9lcnJvcihwcml2KTsKLQkJaGFuZGxlZCB8PSBDU1JfSU5UX0JJVF9TV19FUlI7Ci0JfQotCi0JLyoKLQkgKiB1Q29kZSB3YWtlcyB1cCBhZnRlciBwb3dlci1kb3duIHNsZWVwLgotCSAqIFRlbGwgZGV2aWNlIGFib3V0IGFueSBuZXcgdHggb3IgaG9zdCBjb21tYW5kcyBlbnF1ZXVlZCwKLQkgKiBhbmQgYWJvdXQgYW55IFJ4IGJ1ZmZlcnMgbWFkZSBhdmFpbGFibGUgd2hpbGUgYXNsZWVwLgotCSAqLwotCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfV0FLRVVQKSB7Ci0JCUlXTF9ERUJVR19JU1IocHJpdiwgIldha2V1cCBpbnRlcnJ1cHRcbiIpOwotCQlpd2xfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+cnhxKTsKLQkJZm9yIChpID0gMDsgaSA8IHByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bTsgaSsrKQotCQkJaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbaV0pOwotCQlwcml2LT5pc3Jfc3RhdHMud2FrZXVwKys7Ci0JCWhhbmRsZWQgfD0gQ1NSX0lOVF9CSVRfV0FLRVVQOwotCX0KLQotCS8qIEFsbCB1Q29kZSBjb21tYW5kIHJlc3BvbnNlcywgaW5jbHVkaW5nIFR4IGNvbW1hbmQgcmVzcG9uc2VzLAotCSAqIFJ4ICJyZXNwb25zZXMiIChmcmFtZS1yZWNlaXZlZCBub3RpZmljYXRpb24pLCBhbmQgb3RoZXIKLQkgKiBub3RpZmljYXRpb25zIGZyb20gdUNvZGUgY29tZSB0aHJvdWdoIGhlcmUqLwotCWlmIChpbnRhICYgKENTUl9JTlRfQklUX0ZIX1JYIHwgQ1NSX0lOVF9CSVRfU1dfUlgpKSB7Ci0JCWl3bF9yeF9oYW5kbGUocHJpdik7Ci0JCXByaXYtPmlzcl9zdGF0cy5yeCsrOwotCQloYW5kbGVkIHw9IChDU1JfSU5UX0JJVF9GSF9SWCB8IENTUl9JTlRfQklUX1NXX1JYKTsKLQl9Ci0KLQkvKiBUaGlzICJUeCIgRE1BIGNoYW5uZWwgaXMgdXNlZCBvbmx5IGZvciBsb2FkaW5nIHVDb2RlICovCi0JaWYgKGludGEgJiBDU1JfSU5UX0JJVF9GSF9UWCkgewotCQlJV0xfREVCVUdfSVNSKHByaXYsICJ1Q29kZSBsb2FkIGludGVycnVwdFxuIik7Ci0JCXByaXYtPmlzcl9zdGF0cy50eCsrOwotCQloYW5kbGVkIHw9IENTUl9JTlRfQklUX0ZIX1RYOwotCQkvKiBXYWtlIHVwIHVDb2RlIGxvYWQgcm91dGluZSwgbm93IHRoYXQgbG9hZCBpcyBjb21wbGV0ZSAqLwotCQlwcml2LT51Y29kZV93cml0ZV9jb21wbGV0ZSA9IDE7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKLQl9Ci0KLQlpZiAoaW50YSAmIH5oYW5kbGVkKSB7Ci0JCUlXTF9FUlIocHJpdiwgIlVuaGFuZGxlZCBJTlRBIGJpdHMgMHglMDh4XG4iLCBpbnRhICYgfmhhbmRsZWQpOwotCQlwcml2LT5pc3Jfc3RhdHMudW5oYW5kbGVkKys7Ci0JfQotCi0JaWYgKGludGEgJiB+KHByaXYtPmludGFfbWFzaykpIHsKLQkJSVdMX1dBUk4ocHJpdiwgIkRpc2FibGVkIElOVEEgYml0cyAweCUwOHggd2VyZSBwZW5kaW5nXG4iLAotCQkJIGludGEgJiB+cHJpdi0+aW50YV9tYXNrKTsKLQkJSVdMX1dBUk4ocHJpdiwgIiAgIHdpdGggRkhfSU5UID0gMHglMDh4XG4iLCBpbnRhX2ZoKTsKLQl9Ci0KLQkvKiBSZS1lbmFibGUgYWxsIGludGVycnVwdHMgKi8KLQkvKiBvbmx5IFJlLWVuYWJsZSBpZiBkaXNhYmxlZCBieSBpcnEgKi8KLQlpZiAodGVzdF9iaXQoU1RBVFVTX0lOVF9FTkFCTEVELCAmcHJpdi0+c3RhdHVzKSkKLQkJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwotCS8qIFJlLWVuYWJsZSBSRl9LSUxMIGlmIGl0IG9jY3VycmVkICovCi0JZWxzZSBpZiAoaGFuZGxlZCAmIENTUl9JTlRfQklUX1JGX0tJTEwpCi0JCWl3bF9lbmFibGVfcmZraWxsX2ludChwcml2KTsKLQotI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi0JaWYgKGl3bF9nZXRfZGVidWdfbGV2ZWwocHJpdikgJiAoSVdMX0RMX0lTUikpIHsKLQkJaW50YSA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVCk7Ci0JCWludGFfbWFzayA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsKLQkJaW50YV9maCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMpOwotCQlJV0xfREVCVUdfSVNSKHByaXYsICJFbmQgaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHgsICIKLQkJCSJmbGFncyAweCUwOGx4XG4iLCBpbnRhLCBpbnRhX21hc2ssIGludGFfZmgsIGZsYWdzKTsKLQl9Ci0jZW5kaWYKLX0KLQogLyogdGFza2xldCBmb3IgaXdsYWduIGludGVycnVwdCAqLwogc3RhdGljIHZvaWQgaXdsX2lycV90YXNrbGV0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKQEAgLTExNzEsNyArOTA3LDcgQEAKIAkJaWYgKGludGEgJiAoQ1NSX0lOVF9CSVRfRkhfUlggfCBDU1JfSU5UX0JJVF9TV19SWCkpIHsKIAkJCWhhbmRsZWQgfD0gKENTUl9JTlRfQklUX0ZIX1JYIHwgQ1NSX0lOVF9CSVRfU1dfUlgpOwogCQkJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMsCi0JCQkJCUNTUjQ5X0ZIX0lOVF9SWF9NQVNLKTsKKwkJCQkJQ1NSX0ZIX0lOVF9SWF9NQVNLKTsKIAkJfQogCQlpZiAoaW50YSAmIENTUl9JTlRfQklUX1JYX1BFUklPRElDKSB7CiAJCQloYW5kbGVkIHw9IENTUl9JTlRfQklUX1JYX1BFUklPRElDOwpAQCAtMTIwOSw3ICs5NDUsNyBAQAogCiAJLyogVGhpcyAiVHgiIERNQSBjaGFubmVsIGlzIHVzZWQgb25seSBmb3IgbG9hZGluZyB1Q29kZSAqLwogCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfRkhfVFgpIHsKLQkJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMsIENTUjQ5X0ZIX0lOVF9UWF9NQVNLKTsKKwkJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMsIENTUl9GSF9JTlRfVFhfTUFTSyk7CiAJCUlXTF9ERUJVR19JU1IocHJpdiwgInVDb2RlIGxvYWQgaW50ZXJydXB0XG4iKTsKIAkJcHJpdi0+aXNyX3N0YXRzLnR4Kys7CiAJCWhhbmRsZWQgfD0gQ1NSX0lOVF9CSVRfRkhfVFg7CkBAIC0xMzU3LDI2ICsxMDkzLDQ4IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgaXdsX2RlYWxsb2NfdWNvZGVfcGNpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bF9mcmVlX2Z3X2Rlc2Moc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIHN0cnVjdCBmd19kZXNjICpkZXNjKQogewotCWl3bF9mcmVlX2Z3X2Rlc2MocHJpdi0+cGNpX2RldiwgJnByaXYtPnVjb2RlX2NvZGUpOwotCWl3bF9mcmVlX2Z3X2Rlc2MocHJpdi0+cGNpX2RldiwgJnByaXYtPnVjb2RlX2RhdGEpOwotCWl3bF9mcmVlX2Z3X2Rlc2MocHJpdi0+cGNpX2RldiwgJnByaXYtPnVjb2RlX2RhdGFfYmFja3VwKTsKLQlpd2xfZnJlZV9md19kZXNjKHByaXYtPnBjaV9kZXYsICZwcml2LT51Y29kZV9pbml0KTsKLQlpd2xfZnJlZV9md19kZXNjKHByaXYtPnBjaV9kZXYsICZwcml2LT51Y29kZV9pbml0X2RhdGEpOwotCWl3bF9mcmVlX2Z3X2Rlc2MocHJpdi0+cGNpX2RldiwgJnByaXYtPnVjb2RlX2Jvb3QpOworCWlmIChkZXNjLT52X2FkZHIpCisJCWRtYV9mcmVlX2NvaGVyZW50KCZwY2lfZGV2LT5kZXYsIGRlc2MtPmxlbiwKKwkJCQkgIGRlc2MtPnZfYWRkciwgZGVzYy0+cF9hZGRyKTsKKwlkZXNjLT52X2FkZHIgPSBOVUxMOworCWRlc2MtPmxlbiA9IDA7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bF9uaWNfc3RhcnQoc3RydWN0IGl3bF9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsX2ZyZWVfZndfaW1nKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LCBzdHJ1Y3QgZndfaW1nICppbWcpCiB7Ci0JLyogUmVtb3ZlIGFsbCByZXNldHMgdG8gYWxsb3cgTklDIHRvIG9wZXJhdGUgKi8KLQlpd2xfd3JpdGUzMihwcml2LCBDU1JfUkVTRVQsIDApOworCWl3bF9mcmVlX2Z3X2Rlc2MocGNpX2RldiwgJmltZy0+Y29kZSk7CisJaXdsX2ZyZWVfZndfZGVzYyhwY2lfZGV2LCAmaW1nLT5kYXRhKTsKK30KKworc3RhdGljIGludCBpd2xfYWxsb2NfZndfZGVzYyhzdHJ1Y3QgcGNpX2RldiAqcGNpX2Rldiwgc3RydWN0IGZ3X2Rlc2MgKmRlc2MsCisJCQkgICAgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pCit7CisJaWYgKCFsZW4pIHsKKwkJZGVzYy0+dl9hZGRyID0gTlVMTDsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGVzYy0+dl9hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwY2lfZGV2LT5kZXYsIGxlbiwKKwkJCQkJICAmZGVzYy0+cF9hZGRyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRlc2MtPnZfYWRkcikKKwkJcmV0dXJuIC1FTk9NRU07CisJZGVzYy0+bGVuID0gbGVuOworCW1lbWNweShkZXNjLT52X2FkZHIsIGRhdGEsIGxlbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGl3bF9kZWFsbG9jX3Vjb2RlX3BjaShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaXdsX2ZyZWVfZndfaW1nKHByaXYtPnBjaV9kZXYsICZwcml2LT51Y29kZV9ydCk7CisJaXdsX2ZyZWVfZndfaW1nKHByaXYtPnBjaV9kZXYsICZwcml2LT51Y29kZV9pbml0KTsKIH0KIAogc3RydWN0IGl3bGFnbl91Y29kZV9jYXBhYmlsaXRpZXMgewogCXUzMiBtYXhfcHJvYmVfbGVuZ3RoOwogCXUzMiBzdGFuZGFyZF9waHlfY2FsaWJyYXRpb25fc2l6ZTsKLQlib29sIHBhbjsKKwl1MzIgZmxhZ3M7CiB9OwogCiBzdGF0aWMgdm9pZCBpd2xfdWNvZGVfY2FsbGJhY2soY29uc3Qgc3RydWN0IGZpcm13YXJlICp1Y29kZV9yYXcsIHZvaWQgKmNvbnRleHQpOwpAQCAtMTQyMiw4ICsxMTgwLDggQEAKIH0KIAogc3RydWN0IGl3bGFnbl9maXJtd2FyZV9waWVjZXMgewotCWNvbnN0IHZvaWQgKmluc3QsICpkYXRhLCAqaW5pdCwgKmluaXRfZGF0YSwgKmJvb3Q7Ci0Jc2l6ZV90IGluc3Rfc2l6ZSwgZGF0YV9zaXplLCBpbml0X3NpemUsIGluaXRfZGF0YV9zaXplLCBib290X3NpemU7CisJY29uc3Qgdm9pZCAqaW5zdCwgKmRhdGEsICppbml0LCAqaW5pdF9kYXRhOworCXNpemVfdCBpbnN0X3NpemUsIGRhdGFfc2l6ZSwgaW5pdF9zaXplLCBpbml0X2RhdGFfc2l6ZTsKIAogCXUzMiBidWlsZDsKIApAQCAtMTQ0NCwyOCArMTIwMiwxOCBAQAogCiAJc3dpdGNoIChhcGlfdmVyKSB7CiAJZGVmYXVsdDoKLQkJLyoKLQkJICogNDk2NSBkb2Vzbid0IHJldmlzaW9uIHRoZSBmaXJtd2FyZSBmaWxlIGZvcm1hdAotCQkgKiBhbG9uZyB3aXRoIHRoZSBBUEkgdmVyc2lvbiwgaXQgYWx3YXlzIHVzZXMgdjEKLQkJICogZmlsZSBmb3JtYXQuCi0JCSAqLwotCQlpZiAoKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spICE9Ci0JCQkJQ1NSX0hXX1JFVl9UWVBFXzQ5NjUpIHsKLQkJCWhkcl9zaXplID0gMjg7Ci0JCQlpZiAodWNvZGVfcmF3LT5zaXplIDwgaGRyX3NpemUpIHsKLQkJCQlJV0xfRVJSKHByaXYsICJGaWxlIHNpemUgdG9vIHNtYWxsIVxuIik7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCQlwaWVjZXMtPmJ1aWxkID0gbGUzMl90b19jcHUodWNvZGUtPnUudjIuYnVpbGQpOwotCQkJcGllY2VzLT5pbnN0X3NpemUgPSBsZTMyX3RvX2NwdSh1Y29kZS0+dS52Mi5pbnN0X3NpemUpOwotCQkJcGllY2VzLT5kYXRhX3NpemUgPSBsZTMyX3RvX2NwdSh1Y29kZS0+dS52Mi5kYXRhX3NpemUpOwotCQkJcGllY2VzLT5pbml0X3NpemUgPSBsZTMyX3RvX2NwdSh1Y29kZS0+dS52Mi5pbml0X3NpemUpOwotCQkJcGllY2VzLT5pbml0X2RhdGFfc2l6ZSA9IGxlMzJfdG9fY3B1KHVjb2RlLT51LnYyLmluaXRfZGF0YV9zaXplKTsKLQkJCXBpZWNlcy0+Ym9vdF9zaXplID0gbGUzMl90b19jcHUodWNvZGUtPnUudjIuYm9vdF9zaXplKTsKLQkJCXNyYyA9IHVjb2RlLT51LnYyLmRhdGE7Ci0JCQlicmVhazsKKwkJaGRyX3NpemUgPSAyODsKKwkJaWYgKHVjb2RlX3Jhdy0+c2l6ZSA8IGhkcl9zaXplKSB7CisJCQlJV0xfRVJSKHByaXYsICJGaWxlIHNpemUgdG9vIHNtYWxsIVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQkvKiBmYWxsIHRocm91Z2ggZm9yIDQ5NjUgKi8KKwkJcGllY2VzLT5idWlsZCA9IGxlMzJfdG9fY3B1KHVjb2RlLT51LnYyLmJ1aWxkKTsKKwkJcGllY2VzLT5pbnN0X3NpemUgPSBsZTMyX3RvX2NwdSh1Y29kZS0+dS52Mi5pbnN0X3NpemUpOworCQlwaWVjZXMtPmRhdGFfc2l6ZSA9IGxlMzJfdG9fY3B1KHVjb2RlLT51LnYyLmRhdGFfc2l6ZSk7CisJCXBpZWNlcy0+aW5pdF9zaXplID0gbGUzMl90b19jcHUodWNvZGUtPnUudjIuaW5pdF9zaXplKTsKKwkJcGllY2VzLT5pbml0X2RhdGFfc2l6ZSA9IGxlMzJfdG9fY3B1KHVjb2RlLT51LnYyLmluaXRfZGF0YV9zaXplKTsKKwkJc3JjID0gdWNvZGUtPnUudjIuZGF0YTsKKwkJYnJlYWs7CiAJY2FzZSAwOgogCWNhc2UgMToKIAljYXNlIDI6CkBAIC0xNDc5LDcgKzEyMjcsNiBAQAogCQlwaWVjZXMtPmRhdGFfc2l6ZSA9IGxlMzJfdG9fY3B1KHVjb2RlLT51LnYxLmRhdGFfc2l6ZSk7CiAJCXBpZWNlcy0+aW5pdF9zaXplID0gbGUzMl90b19jcHUodWNvZGUtPnUudjEuaW5pdF9zaXplKTsKIAkJcGllY2VzLT5pbml0X2RhdGFfc2l6ZSA9IGxlMzJfdG9fY3B1KHVjb2RlLT51LnYxLmluaXRfZGF0YV9zaXplKTsKLQkJcGllY2VzLT5ib290X3NpemUgPSBsZTMyX3RvX2NwdSh1Y29kZS0+dS52MS5ib290X3NpemUpOwogCQlzcmMgPSB1Y29kZS0+dS52MS5kYXRhOwogCQlicmVhazsKIAl9CkBAIC0xNDg3LDcgKzEyMzQsNyBAQAogCS8qIFZlcmlmeSBzaXplIG9mIGZpbGUgdnMuIGltYWdlIHNpemUgaW5mbyBpbiBmaWxlJ3MgaGVhZGVyICovCiAJaWYgKHVjb2RlX3Jhdy0+c2l6ZSAhPSBoZHJfc2l6ZSArIHBpZWNlcy0+aW5zdF9zaXplICsKIAkJCQlwaWVjZXMtPmRhdGFfc2l6ZSArIHBpZWNlcy0+aW5pdF9zaXplICsKLQkJCQlwaWVjZXMtPmluaXRfZGF0YV9zaXplICsgcGllY2VzLT5ib290X3NpemUpIHsKKwkJCQlwaWVjZXMtPmluaXRfZGF0YV9zaXplKSB7CiAKIAkJSVdMX0VSUihwcml2LAogCQkJInVDb2RlIGZpbGUgc2l6ZSAlZCBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBzaXplXG4iLApAQCAtMTUwMyw4ICsxMjUwLDYgQEAKIAlzcmMgKz0gcGllY2VzLT5pbml0X3NpemU7CiAJcGllY2VzLT5pbml0X2RhdGEgPSBzcmM7CiAJc3JjICs9IHBpZWNlcy0+aW5pdF9kYXRhX3NpemU7Ci0JcGllY2VzLT5ib290ID0gc3JjOwotCXNyYyArPSBwaWVjZXMtPmJvb3Rfc2l6ZTsKIAogCXJldHVybiAwOwogfQpAQCAtMTYwNSw4ICsxMzUwLDcgQEAKIAkJCXBpZWNlcy0+aW5pdF9kYXRhX3NpemUgPSB0bHZfbGVuOwogCQkJYnJlYWs7CiAJCWNhc2UgSVdMX1VDT0RFX1RMVl9CT09UOgotCQkJcGllY2VzLT5ib290ID0gdGx2X2RhdGE7Ci0JCQlwaWVjZXMtPmJvb3Rfc2l6ZSA9IHRsdl9sZW47CisJCQlJV0xfRVJSKHByaXYsICJGb3VuZCB1bmV4cGVjdGVkIEJPT1QgdWNvZGVcbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgSVdMX1VDT0RFX1RMVl9QUk9CRV9NQVhfTEVOOgogCQkJaWYgKHRsdl9sZW4gIT0gc2l6ZW9mKHUzMikpCkBAIC0xNjE3LDcgKzEzNjEsMjMgQEAKIAkJY2FzZSBJV0xfVUNPREVfVExWX1BBTjoKIAkJCWlmICh0bHZfbGVuKQogCQkJCWdvdG8gaW52YWxpZF90bHZfbGVuOwotCQkJY2FwYS0+cGFuID0gdHJ1ZTsKKwkJCWNhcGEtPmZsYWdzIHw9IElXTF9VQ09ERV9UTFZfRkxBR1NfUEFOOworCQkJYnJlYWs7CisJCWNhc2UgSVdMX1VDT0RFX1RMVl9GTEFHUzoKKwkJCS8qIG11c3QgYmUgYXQgbGVhc3Qgb25lIHUzMiAqLworCQkJaWYgKHRsdl9sZW4gPCBzaXplb2YodTMyKSkKKwkJCQlnb3RvIGludmFsaWRfdGx2X2xlbjsKKwkJCS8qIGFuZCBhIHByb3BlciBudW1iZXIgb2YgdTMycyAqLworCQkJaWYgKHRsdl9sZW4gJSBzaXplb2YodTMyKSkKKwkJCQlnb3RvIGludmFsaWRfdGx2X2xlbjsKKwkJCS8qCisJCQkgKiBUaGlzIGRyaXZlciBvbmx5IHJlYWRzIHRoZSBmaXJzdCB1MzIgYXMKKwkJCSAqIHJpZ2h0IG5vdyBubyBtb3JlIGZlYXR1cmVzIGFyZSBkZWZpbmVkLAorCQkJICogaWYgdGhhdCBjaGFuZ2VzIHRoZW4gZWl0aGVyIHRoZSBkcml2ZXIKKwkJCSAqIHdpbGwgbm90IHdvcmsgd2l0aCB0aGUgbmV3IGZpcm13YXJlLCBvcgorCQkJICogaXQnbGwgbm90IHRha2UgYWR2YW50YWdlIG9mIG5ldyBmZWF0dXJlcy4KKwkJCSAqLworCQkJY2FwYS0+ZmxhZ3MgPSBsZTMyX3RvX2NwdXAoKF9fbGUzMiAqKXRsdl9kYXRhKTsKIAkJCWJyZWFrOwogCQljYXNlIElXTF9VQ09ERV9UTFZfSU5JVF9FVlRMT0dfUFRSOgogCQkJaWYgKHRsdl9sZW4gIT0gc2l6ZW9mKHUzMikpCkBAIC0xNjY3LDcgKzE0MjcsNyBAQAogCQkJCQlsZTMyX3RvX2NwdXAoKF9fbGUzMiAqKXRsdl9kYXRhKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJSVdMX1dBUk4ocHJpdiwgInVua25vd24gVExWOiAlZFxuIiwgdGx2X3R5cGUpOworCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgInVua25vd24gVExWOiAlZFxuIiwgdGx2X3R5cGUpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0xODA2LDggKzE1NjYsNiBAQAogCQkgICAgICAgcGllY2VzLmluaXRfc2l6ZSk7CiAJSVdMX0RFQlVHX0lORk8ocHJpdiwgImYvdyBwYWNrYWdlIGhkciBpbml0IGRhdGEgc2l6ZSA9ICVaZFxuIiwKIAkJICAgICAgIHBpZWNlcy5pbml0X2RhdGFfc2l6ZSk7Ci0JSVdMX0RFQlVHX0lORk8ocHJpdiwgImYvdyBwYWNrYWdlIGhkciBib290IGluc3Qgc2l6ZSA9ICVaZFxuIiwKLQkJICAgICAgIHBpZWNlcy5ib290X3NpemUpOwogCiAJLyogVmVyaWZ5IHRoYXQgdUNvZGUgaW1hZ2VzIHdpbGwgZml0IGluIGNhcmQncyBTUkFNICovCiAJaWYgKHBpZWNlcy5pbnN0X3NpemUgPiBwcml2LT5od19wYXJhbXMubWF4X2luc3Rfc2l6ZSkgewpAQCAtMTgzNCw0OCArMTU5MiwyNSBAQAogCQlnb3RvIHRyeV9hZ2FpbjsKIAl9CiAKLQlpZiAocGllY2VzLmJvb3Rfc2l6ZSA+IHByaXYtPmh3X3BhcmFtcy5tYXhfYnNtX3NpemUpIHsKLQkJSVdMX0VSUihwcml2LCAidUNvZGUgYm9vdCBpbnN0ciBsZW4gJVpkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCi0JCQlwaWVjZXMuYm9vdF9zaXplKTsKLQkJZ290byB0cnlfYWdhaW47Ci0JfQotCiAJLyogQWxsb2NhdGUgdWNvZGUgYnVmZmVycyBmb3IgY2FyZCdzIGJ1cy1tYXN0ZXIgbG9hZGluZyAuLi4gKi8KIAogCS8qIFJ1bnRpbWUgaW5zdHJ1Y3Rpb25zIGFuZCAyIGNvcGllcyBvZiBkYXRhOgogCSAqIDEpIHVubW9kaWZpZWQgZnJvbSBkaXNrCiAJICogMikgYmFja3VwIGNhY2hlIGZvciBzYXZlL3Jlc3RvcmUgZHVyaW5nIHBvd2VyLWRvd25zICovCi0JcHJpdi0+dWNvZGVfY29kZS5sZW4gPSBwaWVjZXMuaW5zdF9zaXplOwotCWl3bF9hbGxvY19md19kZXNjKHByaXYtPnBjaV9kZXYsICZwcml2LT51Y29kZV9jb2RlKTsKLQotCXByaXYtPnVjb2RlX2RhdGEubGVuID0gcGllY2VzLmRhdGFfc2l6ZTsKLQlpd2xfYWxsb2NfZndfZGVzYyhwcml2LT5wY2lfZGV2LCAmcHJpdi0+dWNvZGVfZGF0YSk7Ci0KLQlwcml2LT51Y29kZV9kYXRhX2JhY2t1cC5sZW4gPSBwaWVjZXMuZGF0YV9zaXplOwotCWl3bF9hbGxvY19md19kZXNjKHByaXYtPnBjaV9kZXYsICZwcml2LT51Y29kZV9kYXRhX2JhY2t1cCk7Ci0KLQlpZiAoIXByaXYtPnVjb2RlX2NvZGUudl9hZGRyIHx8ICFwcml2LT51Y29kZV9kYXRhLnZfYWRkciB8fAotCSAgICAhcHJpdi0+dWNvZGVfZGF0YV9iYWNrdXAudl9hZGRyKQorCWlmIChpd2xfYWxsb2NfZndfZGVzYyhwcml2LT5wY2lfZGV2LCAmcHJpdi0+dWNvZGVfcnQuY29kZSwKKwkJCSAgICAgIHBpZWNlcy5pbnN0LCBwaWVjZXMuaW5zdF9zaXplKSkKKwkJZ290byBlcnJfcGNpX2FsbG9jOworCWlmIChpd2xfYWxsb2NfZndfZGVzYyhwcml2LT5wY2lfZGV2LCAmcHJpdi0+dWNvZGVfcnQuZGF0YSwKKwkJCSAgICAgIHBpZWNlcy5kYXRhLCBwaWVjZXMuZGF0YV9zaXplKSkKIAkJZ290byBlcnJfcGNpX2FsbG9jOwogCiAJLyogSW5pdGlhbGl6YXRpb24gaW5zdHJ1Y3Rpb25zIGFuZCBkYXRhICovCiAJaWYgKHBpZWNlcy5pbml0X3NpemUgJiYgcGllY2VzLmluaXRfZGF0YV9zaXplKSB7Ci0JCXByaXYtPnVjb2RlX2luaXQubGVuID0gcGllY2VzLmluaXRfc2l6ZTsKLQkJaXdsX2FsbG9jX2Z3X2Rlc2MocHJpdi0+cGNpX2RldiwgJnByaXYtPnVjb2RlX2luaXQpOwotCi0JCXByaXYtPnVjb2RlX2luaXRfZGF0YS5sZW4gPSBwaWVjZXMuaW5pdF9kYXRhX3NpemU7Ci0JCWl3bF9hbGxvY19md19kZXNjKHByaXYtPnBjaV9kZXYsICZwcml2LT51Y29kZV9pbml0X2RhdGEpOwotCi0JCWlmICghcHJpdi0+dWNvZGVfaW5pdC52X2FkZHIgfHwgIXByaXYtPnVjb2RlX2luaXRfZGF0YS52X2FkZHIpCisJCWlmIChpd2xfYWxsb2NfZndfZGVzYyhwcml2LT5wY2lfZGV2LCAmcHJpdi0+dWNvZGVfaW5pdC5jb2RlLAorCQkJCSAgICAgIHBpZWNlcy5pbml0LCBwaWVjZXMuaW5pdF9zaXplKSkKIAkJCWdvdG8gZXJyX3BjaV9hbGxvYzsKLQl9Ci0KLQkvKiBCb290c3RyYXAgKGluc3RydWN0aW9ucyBvbmx5LCBubyBkYXRhKSAqLwotCWlmIChwaWVjZXMuYm9vdF9zaXplKSB7Ci0JCXByaXYtPnVjb2RlX2Jvb3QubGVuID0gcGllY2VzLmJvb3Rfc2l6ZTsKLQkJaXdsX2FsbG9jX2Z3X2Rlc2MocHJpdi0+cGNpX2RldiwgJnByaXYtPnVjb2RlX2Jvb3QpOwotCi0JCWlmICghcHJpdi0+dWNvZGVfYm9vdC52X2FkZHIpCisJCWlmIChpd2xfYWxsb2NfZndfZGVzYyhwcml2LT5wY2lfZGV2LCAmcHJpdi0+dWNvZGVfaW5pdC5kYXRhLAorCQkJCSAgICAgIHBpZWNlcy5pbml0X2RhdGEsIHBpZWNlcy5pbml0X2RhdGFfc2l6ZSkpCiAJCQlnb3RvIGVycl9wY2lfYWxsb2M7CiAJfQogCkBAIC0xOTAxLDUwICsxNjM2LDE5IEBACiAJCQlwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5tYXhfZXZlbnRfbG9nX3NpemU7CiAJcHJpdi0+X2Fnbi5pbnN0X2VycmxvZ19wdHIgPSBwaWVjZXMuaW5zdF9lcnJsb2dfcHRyOwogCi0JaWYgKHVjb2RlX2NhcGEucGFuKSB7CisJcHJpdi0+bmV3X3NjYW5fdGhyZXNob2xkX2JlaGF2aW91ciA9CisJCSEhKHVjb2RlX2NhcGEuZmxhZ3MgJiBJV0xfVUNPREVfVExWX0ZMQUdTX05FV1NDQU4pOworCisJaWYgKHVjb2RlX2NhcGEuZmxhZ3MgJiBJV0xfVUNPREVfVExWX0ZMQUdTX1BBTikgewogCQlwcml2LT52YWxpZF9jb250ZXh0cyB8PSBCSVQoSVdMX1JYT05fQ1RYX1BBTik7CiAJCXByaXYtPnN0YV9rZXlfbWF4X251bSA9IFNUQV9LRVlfTUFYX05VTV9QQU47CiAJfSBlbHNlCiAJCXByaXYtPnN0YV9rZXlfbWF4X251bSA9IFNUQV9LRVlfTUFYX05VTTsKIAotCS8qIENvcHkgaW1hZ2VzIGludG8gYnVmZmVycyBmb3IgY2FyZCdzIGJ1cy1tYXN0ZXIgcmVhZHMgLi4uICovCi0KLQkvKiBSdW50aW1lIGluc3RydWN0aW9ucyAoZmlyc3QgYmxvY2sgb2YgZGF0YSBpbiBmaWxlKSAqLwotCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIHVDb2RlIGluc3RyIGxlbiAlWmRcbiIsCi0JCQlwaWVjZXMuaW5zdF9zaXplKTsKLQltZW1jcHkocHJpdi0+dWNvZGVfY29kZS52X2FkZHIsIHBpZWNlcy5pbnN0LCBwaWVjZXMuaW5zdF9zaXplKTsKLQotCUlXTF9ERUJVR19JTkZPKHByaXYsICJ1Q29kZSBpbnN0ciBidWYgdmFkZHIgPSAweCVwLCBwYWRkciA9IDB4JTA4eFxuIiwKLQkJcHJpdi0+dWNvZGVfY29kZS52X2FkZHIsICh1MzIpcHJpdi0+dWNvZGVfY29kZS5wX2FkZHIpOwotCi0JLyoKLQkgKiBSdW50aW1lIGRhdGEKLQkgKiBOT1RFOiAgQ29weSBpbnRvIGJhY2t1cCBidWZmZXIgd2lsbCBiZSBkb25lIGluIGl3bF91cCgpCi0JICovCi0JSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgdUNvZGUgZGF0YSBsZW4gJVpkXG4iLAotCQkJcGllY2VzLmRhdGFfc2l6ZSk7Ci0JbWVtY3B5KHByaXYtPnVjb2RlX2RhdGEudl9hZGRyLCBwaWVjZXMuZGF0YSwgcGllY2VzLmRhdGFfc2l6ZSk7Ci0JbWVtY3B5KHByaXYtPnVjb2RlX2RhdGFfYmFja3VwLnZfYWRkciwgcGllY2VzLmRhdGEsIHBpZWNlcy5kYXRhX3NpemUpOwotCi0JLyogSW5pdGlhbGl6YXRpb24gaW5zdHJ1Y3Rpb25zICovCi0JaWYgKHBpZWNlcy5pbml0X3NpemUpIHsKLQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgaW5pdCBpbnN0ciBsZW4gJVpkXG4iLAotCQkJCXBpZWNlcy5pbml0X3NpemUpOwotCQltZW1jcHkocHJpdi0+dWNvZGVfaW5pdC52X2FkZHIsIHBpZWNlcy5pbml0LCBwaWVjZXMuaW5pdF9zaXplKTsKLQl9Ci0KLQkvKiBJbml0aWFsaXphdGlvbiBkYXRhICovCi0JaWYgKHBpZWNlcy5pbml0X2RhdGFfc2l6ZSkgewotCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBpbml0IGRhdGEgbGVuICVaZFxuIiwKLQkJCSAgICAgICBwaWVjZXMuaW5pdF9kYXRhX3NpemUpOwotCQltZW1jcHkocHJpdi0+dWNvZGVfaW5pdF9kYXRhLnZfYWRkciwgcGllY2VzLmluaXRfZGF0YSwKLQkJICAgICAgIHBpZWNlcy5pbml0X2RhdGFfc2l6ZSk7Ci0JfQotCi0JLyogQm9vdHN0cmFwIGluc3RydWN0aW9ucyAqLwotCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIGJvb3QgaW5zdHIgbGVuICVaZFxuIiwKLQkJCXBpZWNlcy5ib290X3NpemUpOwotCW1lbWNweShwcml2LT51Y29kZV9ib290LnZfYWRkciwgcGllY2VzLmJvb3QsIHBpZWNlcy5ib290X3NpemUpOworCWlmIChwcml2LT52YWxpZF9jb250ZXh0cyAhPSBCSVQoSVdMX1JYT05fQ1RYX0JTUykpCisJCXByaXYtPmNtZF9xdWV1ZSA9IElXTF9JUEFOX0NNRF9RVUVVRV9OVU07CisJZWxzZQorCQlwcml2LT5jbWRfcXVldWUgPSBJV0xfREVGQVVMVF9DTURfUVVFVUVfTlVNOwogCiAJLyoKIAkgKiBmaWd1cmUgb3V0IHRoZSBvZmZzZXQgb2YgY2hhaW4gbm9pc2UgcmVzZXQgYW5kIGdhaW4gY29tbWFuZHMKQEAgLTIwNzYsMTMgKzE3ODAsMTMgQEAKIAl1MzIgZGVzYywgdGltZSwgY291bnQsIGJhc2UsIGRhdGExOwogCXUzMiBibGluazEsIGJsaW5rMiwgaWxpbmsxLCBpbGluazI7CiAJdTMyIHBjLCBoY21kOworCXN0cnVjdCBpd2xfZXJyb3JfZXZlbnRfdGFibGUgdGFibGU7CiAKLQlpZiAocHJpdi0+dWNvZGVfdHlwZSA9PSBVQ09ERV9JTklUKSB7Ci0JCWJhc2UgPSBsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlX2luaXQuZXJyb3JfZXZlbnRfdGFibGVfcHRyKTsKKwliYXNlID0gcHJpdi0+ZGV2aWNlX3BvaW50ZXJzLmVycm9yX2V2ZW50X3RhYmxlOworCWlmIChwcml2LT51Y29kZV90eXBlID09IFVDT0RFX1NVQlRZUEVfSU5JVCkgewogCQlpZiAoIWJhc2UpCiAJCQliYXNlID0gcHJpdi0+X2Fnbi5pbml0X2VycmxvZ19wdHI7CiAJfSBlbHNlIHsKLQkJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmUuZXJyb3JfZXZlbnRfdGFibGVfcHRyKTsKIAkJaWYgKCFiYXNlKQogCQkJYmFzZSA9IHByaXYtPl9hZ24uaW5zdF9lcnJsb2dfcHRyOwogCX0KQEAgLTIwOTAsMTEgKzE3OTQsMTUgQEAKIAlpZiAoIXByaXYtPmNmZy0+b3BzLT5saWItPmlzX3ZhbGlkX3J0Y19kYXRhX2FkZHIoYmFzZSkpIHsKIAkJSVdMX0VSUihwcml2LAogCQkJIk5vdCB2YWxpZCBlcnJvciBsb2cgcG9pbnRlciAweCUwOFggZm9yICVzIHVDb2RlXG4iLAotCQkJYmFzZSwgKHByaXYtPnVjb2RlX3R5cGUgPT0gVUNPREVfSU5JVCkgPyAiSW5pdCIgOiAiUlQiKTsKKwkJCWJhc2UsCisJCQkocHJpdi0+dWNvZGVfdHlwZSA9PSBVQ09ERV9TVUJUWVBFX0lOSVQpCisJCQkJCT8gIkluaXQiIDogIlJUIik7CiAJCXJldHVybjsKIAl9CiAKLQljb3VudCA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UpOworCWl3bF9yZWFkX3RhcmdfbWVtX3dvcmRzKHByaXYsIGJhc2UsICZ0YWJsZSwgc2l6ZW9mKHRhYmxlKSk7CisKKwljb3VudCA9IHRhYmxlLnZhbGlkOwogCiAJaWYgKEVSUk9SX1NUQVJUX09GRlNFVCA8PSBjb3VudCAqIEVSUk9SX0VMRU1fU0laRSkgewogCQlJV0xfRVJSKHByaXYsICJTdGFydCBJV0wgRXJyb3IgTG9nIER1bXA6XG4iKTsKQEAgLTIxMDIsMTggKzE4MTAsMTggQEAKIAkJCXByaXYtPnN0YXR1cywgY291bnQpOwogCX0KIAotCWRlc2MgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgMSAqIHNpemVvZih1MzIpKTsKKwlkZXNjID0gdGFibGUuZXJyb3JfaWQ7CiAJcHJpdi0+aXNyX3N0YXRzLmVycl9jb2RlID0gZGVzYzsKLQlwYyA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAyICogc2l6ZW9mKHUzMikpOwotCWJsaW5rMSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAzICogc2l6ZW9mKHUzMikpOwotCWJsaW5rMiA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyA0ICogc2l6ZW9mKHUzMikpOwotCWlsaW5rMSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyA1ICogc2l6ZW9mKHUzMikpOwotCWlsaW5rMiA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyA2ICogc2l6ZW9mKHUzMikpOwotCWRhdGExID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDcgKiBzaXplb2YodTMyKSk7Ci0JZGF0YTIgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgOCAqIHNpemVvZih1MzIpKTsKLQlsaW5lID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDkgKiBzaXplb2YodTMyKSk7Ci0JdGltZSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAxMSAqIHNpemVvZih1MzIpKTsKLQloY21kID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDIyICogc2l6ZW9mKHUzMikpOworCXBjID0gdGFibGUucGM7CisJYmxpbmsxID0gdGFibGUuYmxpbmsxOworCWJsaW5rMiA9IHRhYmxlLmJsaW5rMjsKKwlpbGluazEgPSB0YWJsZS5pbGluazE7CisJaWxpbmsyID0gdGFibGUuaWxpbmsyOworCWRhdGExID0gdGFibGUuZGF0YTE7CisJZGF0YTIgPSB0YWJsZS5kYXRhMjsKKwlsaW5lID0gdGFibGUubGluZTsKKwl0aW1lID0gdGFibGUudHNmX2xvdzsKKwloY21kID0gdGFibGUuaGNtZDsKIAogCXRyYWNlX2l3bHdpZmlfZGV2X3Vjb2RlX2Vycm9yKHByaXYsIGRlc2MsIHRpbWUsIGRhdGExLCBkYXRhMiwgbGluZSwKIAkJCQkgICAgICBibGluazEsIGJsaW5rMiwgaWxpbmsxLCBpbGluazIpOwpAQCAtMjE0NywxMiArMTg1NSwxMSBAQAogCWlmIChudW1fZXZlbnRzID09IDApCiAJCXJldHVybiBwb3M7CiAKLQlpZiAocHJpdi0+dWNvZGVfdHlwZSA9PSBVQ09ERV9JTklUKSB7Ci0JCWJhc2UgPSBsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlX2luaXQubG9nX2V2ZW50X3RhYmxlX3B0cik7CisJYmFzZSA9IHByaXYtPmRldmljZV9wb2ludGVycy5sb2dfZXZlbnRfdGFibGU7CisJaWYgKHByaXYtPnVjb2RlX3R5cGUgPT0gVUNPREVfU1VCVFlQRV9JTklUKSB7CiAJCWlmICghYmFzZSkKIAkJCWJhc2UgPSBwcml2LT5fYWduLmluaXRfZXZ0bG9nX3B0cjsKIAl9IGVsc2UgewotCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZS5sb2dfZXZlbnRfdGFibGVfcHRyKTsKIAkJaWYgKCFiYXNlKQogCQkJYmFzZSA9IHByaXYtPl9hZ24uaW5zdF9ldnRsb2dfcHRyOwogCX0KQEAgLTIxNjksMTQgKzE4NzYsMTQgQEAKIAlpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCiAJLyogU2V0IHN0YXJ0aW5nIGFkZHJlc3M7IHJlYWRzIHdpbGwgYXV0by1pbmNyZW1lbnQgKi8KLQlfaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkFERFIsIHB0cik7CisJaXdsX3dyaXRlMzIocHJpdiwgSEJVU19UQVJHX01FTV9SQUREUiwgcHRyKTsKIAlybWIoKTsKIAogCS8qICJ0aW1lIiBpcyBhY3R1YWxseSAiZGF0YSIgZm9yIG1vZGUgMCAobm8gdGltZXN0YW1wKS4KIAkqIHBsYWNlIGV2ZW50IGlkICMgYXQgZmFyIHJpZ2h0IGZvciBlYXNpZXIgdmlzdWFsIHBhcnNpbmcuICovCiAJZm9yIChpID0gMDsgaSA8IG51bV9ldmVudHM7IGkrKykgewotCQlldiA9IF9pd2xfcmVhZF9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOwotCQl0aW1lID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7CisJCWV2ID0gaXdsX3JlYWQzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOworCQl0aW1lID0gaXdsX3JlYWQzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOwogCQlpZiAobW9kZSA9PSAwKSB7CiAJCQkvKiBkYXRhLCBldiAqLwogCQkJaWYgKGJ1ZnN6KSB7CkBAIC0yMTkwLDcgKzE4OTcsNyBAQAogCQkJCQl0aW1lLCBldik7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQlkYXRhID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7CisJCQlkYXRhID0gaXdsX3JlYWQzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOwogCQkJaWYgKGJ1ZnN6KSB7CiAJCQkJcG9zICs9IHNjbnByaW50ZigqYnVmICsgcG9zLCBidWZzeiAtIHBvcywKIAkJCQkJCSJFVlRfTE9HVDolMDEwdToweCUwOHg6JTA0dVxuIiwKQEAgLTIyNjEsMTMgKzE5NjgsMTIgQEAKIAlpbnQgcG9zID0gMDsKIAlzaXplX3QgYnVmc3ogPSAwOwogCi0JaWYgKHByaXYtPnVjb2RlX3R5cGUgPT0gVUNPREVfSU5JVCkgewotCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LmxvZ19ldmVudF90YWJsZV9wdHIpOworCWJhc2UgPSBwcml2LT5kZXZpY2VfcG9pbnRlcnMubG9nX2V2ZW50X3RhYmxlOworCWlmIChwcml2LT51Y29kZV90eXBlID09IFVDT0RFX1NVQlRZUEVfSU5JVCkgewogCQlsb2dzaXplID0gcHJpdi0+X2Fnbi5pbml0X2V2dGxvZ19zaXplOwogCQlpZiAoIWJhc2UpCiAJCQliYXNlID0gcHJpdi0+X2Fnbi5pbml0X2V2dGxvZ19wdHI7CiAJfSBlbHNlIHsKLQkJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmUubG9nX2V2ZW50X3RhYmxlX3B0cik7CiAJCWxvZ3NpemUgPSBwcml2LT5fYWduLmluc3RfZXZ0bG9nX3NpemU7CiAJCWlmICghYmFzZSkKIAkJCWJhc2UgPSBwcml2LT5fYWduLmluc3RfZXZ0bG9nX3B0cjsKQEAgLTIyNzYsNyArMTk4Miw5IEBACiAJaWYgKCFwcml2LT5jZmctPm9wcy0+bGliLT5pc192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7CiAJCUlXTF9FUlIocHJpdiwKIAkJCSJJbnZhbGlkIGV2ZW50IGxvZyBwb2ludGVyIDB4JTA4WCBmb3IgJXMgdUNvZGVcbiIsCi0JCQliYXNlLCAocHJpdi0+dWNvZGVfdHlwZSA9PSBVQ09ERV9JTklUKSA/ICJJbml0IiA6ICJSVCIpOworCQkJYmFzZSwKKwkJCShwcml2LT51Y29kZV90eXBlID09IFVDT0RFX1NVQlRZUEVfSU5JVCkKKwkJCQkJPyAiSW5pdCIgOiAiUlQiKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0yNDIzLDMxICsyMTMxLDE1IEBACiAgKiAgICAgICAgICAgICAgICAgICBmcm9tIHByb3RvY29sL3J1bnRpbWUgdUNvZGUgKGluaXRpYWxpemF0aW9uIHVDb2RlJ3MKICAqICAgICAgICAgICAgICAgICAgIEFsaXZlIGdldHMgaGFuZGxlZCBieSBpd2xfaW5pdF9hbGl2ZV9zdGFydCgpKS4KICAqLwotc3RhdGljIHZvaWQgaXdsX2FsaXZlX3N0YXJ0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK2ludCBpd2xfYWxpdmVfc3RhcnQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHggPSAmcHJpdi0+Y29udGV4dHNbSVdMX1JYT05fQ1RYX0JTU107CiAKKwlpd2xfcmVzZXRfaWN0KHByaXYpOworCiAJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJ1bnRpbWUgQWxpdmUgcmVjZWl2ZWQuXG4iKTsKIAotCS8qIEluaXRpYWxpemUgdUNvZGUgaGFzIGxvYWRlZCBSdW50aW1lIHVDb2RlIC4uLiB2ZXJpZnkgaW5zdCBpbWFnZS4KLQkgKiBUaGlzIGlzIGEgcGFyYW5vaWQgY2hlY2ssIGJlY2F1c2Ugd2Ugd291bGQgbm90IGhhdmUgZ290dGVuIHRoZQotCSAqICJydW50aW1lIiBhbGl2ZSBpZiBjb2RlIHdlcmVuJ3QgcHJvcGVybHkgbG9hZGVkLiAgKi8KLQlpZiAoaXdsX3ZlcmlmeV91Y29kZShwcml2KSkgewotCQkvKiBSdW50aW1lIGluc3RydWN0aW9uIGxvYWQgd2FzIGJhZDsKLQkJICogdGFrZSBpdCBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLwotCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQmFkIHJ1bnRpbWUgdUNvZGUgbG9hZC5cbiIpOwotCQlnb3RvIHJlc3RhcnQ7Ci0JfQotCi0JcmV0ID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YWxpdmVfbm90aWZ5KHByaXYpOwotCWlmIChyZXQpIHsKLQkJSVdMX1dBUk4ocHJpdiwKLQkJCSJDb3VsZCBub3QgY29tcGxldGUgQUxJVkUgdHJhbnNpdGlvbiBbbnRmXTogJWRcbiIsIHJldCk7Ci0JCWdvdG8gcmVzdGFydDsKLQl9Ci0KLQogCS8qIEFmdGVyIHRoZSBBTElWRSByZXNwb25zZSwgd2UgY2FuIHNlbmQgaG9zdCBjb21tYW5kcyB0byB0aGUgdUNvZGUgKi8KIAlzZXRfYml0KFNUQVRVU19BTElWRSwgJnByaXYtPnN0YXR1cyk7CiAKQEAgLTI0NTUsNyArMjE0Nyw3IEBACiAJaXdsX3NldHVwX3dhdGNoZG9nKHByaXYpOwogCiAJaWYgKGl3bF9pc19yZmtpbGwocHJpdikpCi0JCXJldHVybjsKKwkJcmV0dXJuIC1FUkZLSUxMOwogCiAJLyogZG93bmxvYWQgcHJpb3JpdHkgdGFibGUgYmVmb3JlIGFueSBjYWxpYnJhdGlvbiByZXF1ZXN0ICovCiAJaWYgKHByaXYtPmNmZy0+YnRfcGFyYW1zICYmCkBAIC0yNDY5LDEwICsyMTYxLDE0IEBACiAJCWl3bGFnbl9zZW5kX3ByaW9fdGJsKHByaXYpOwogCiAJCS8qIEZJWE1FOiB3L2EgdG8gZm9yY2UgY2hhbmdlIHVDb2RlIEJUIHN0YXRlIG1hY2hpbmUgKi8KLQkJaXdsYWduX3NlbmRfYnRfZW52KHByaXYsIElXTF9CVF9DT0VYX0VOVl9PUEVOLAotCQkJQlRfQ09FWF9QUklPX1RCTF9FVlRfSU5JVF9DQUxJQjIpOwotCQlpd2xhZ25fc2VuZF9idF9lbnYocHJpdiwgSVdMX0JUX0NPRVhfRU5WX0NMT1NFLAotCQkJQlRfQ09FWF9QUklPX1RCTF9FVlRfSU5JVF9DQUxJQjIpOworCQlyZXQgPSBpd2xhZ25fc2VuZF9idF9lbnYocHJpdiwgSVdMX0JUX0NPRVhfRU5WX09QRU4sCisJCQkJCSBCVF9DT0VYX1BSSU9fVEJMX0VWVF9JTklUX0NBTElCMik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlyZXQgPSBpd2xhZ25fc2VuZF9idF9lbnYocHJpdiwgSVdMX0JUX0NPRVhfRU5WX0NMT1NFLAorCQkJCQkgQlRfQ09FWF9QUklPX1RCTF9FVlRfSU5JVF9DQUxJQjIpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKIAl9CiAJaWYgKHByaXYtPmh3X3BhcmFtcy5jYWxpYl9ydF9jZmcpCiAJCWl3bGFnbl9zZW5kX2NhbGliX2NmZ19ydChwcml2LCBwcml2LT5od19wYXJhbXMuY2FsaWJfcnRfY2ZnKTsKQEAgLTI1MTQsMzAgKzIyMTAsMjMgQEAKIAlzZXRfYml0KFNUQVRVU19SRUFEWSwgJnByaXYtPnN0YXR1cyk7CiAKIAkvKiBDb25maWd1cmUgdGhlIGFkYXB0ZXIgZm9yIHVuYXNzb2NpYXRlZCBvcGVyYXRpb24gKi8KLQlpd2xjb3JlX2NvbW1pdF9yeG9uKHByaXYsIGN0eCk7CisJcmV0ID0gaXdsY29yZV9jb21taXRfcnhvbihwcml2LCBjdHgpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAkvKiBBdCB0aGlzIHBvaW50LCB0aGUgTklDIGlzIGluaXRpYWxpemVkIGFuZCBvcGVyYXRpb25hbCAqLwogCWl3bF9yZl9raWxsX2N0X2NvbmZpZyhwcml2KTsKIAogCUlXTF9ERUJVR19JTkZPKHByaXYsICJBTElWRSBwcm9jZXNzaW5nIGNvbXBsZXRlLlxuIik7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOwogCi0JaXdsX3Bvd2VyX3VwZGF0ZV9tb2RlKHByaXYsIHRydWUpOwotCUlXTF9ERUJVR19JTkZPKHByaXYsICJVcGRhdGVkIHBvd2VyIG1vZGVcbiIpOwotCi0KLQlyZXR1cm47Ci0KLSByZXN0YXJ0OgotCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7CisJcmV0dXJuIGl3bF9wb3dlcl91cGRhdGVfbW9kZShwcml2LCB0cnVlKTsKIH0KIAogc3RhdGljIHZvaWQgaXdsX2NhbmNlbF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKIHN0YXRpYyB2b2lkIF9faXdsX2Rvd24oc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGV4aXRfcGVuZGluZyA9IHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpOworCWludCBleGl0X3BlbmRpbmc7CiAKIAlJV0xfREVCVUdfSU5GTyhwcml2LCBEUlZfTkFNRSAiIGlzIGdvaW5nIGRvd25cbiIpOwogCkBAIC0yNTYzLDQwICsyMjUyLDE1IEBACiAJcHJpdi0+YnRfZnVsbF9jb25jdXJyZW50ID0gZmFsc2U7CiAJcHJpdi0+YnRfY2lfY29tcGxpYW5jZSA9IDA7CiAKLQkvKiBVbmJsb2NrIGFueSB3YWl0aW5nIGNhbGxzICovCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlX2FsbCgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKLQogCS8qIFdpcGUgb3V0IHRoZSBFWElUX1BFTkRJTkcgc3RhdHVzIGJpdCBpZiB3ZSBhcmUgbm90IGFjdHVhbGx5CiAJICogZXhpdGluZyB0aGUgbW9kdWxlICovCiAJaWYgKCFleGl0X3BlbmRpbmcpCiAJCWNsZWFyX2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKTsKIAotCS8qIHN0b3AgYW5kIHJlc2V0IHRoZSBvbi1ib2FyZCBwcm9jZXNzb3IgKi8KLQlpd2xfd3JpdGUzMihwcml2LCBDU1JfUkVTRVQsIENTUl9SRVNFVF9SRUdfRkxBR19ORVZPX1JFU0VUKTsKLQotCS8qIHRlbGwgdGhlIGRldmljZSB0byBzdG9wIHNlbmRpbmcgaW50ZXJydXB0cyAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaXdsX2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaXdsX3N5bmNocm9uaXplX2lycShwcml2KTsKLQogCWlmIChwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkKQogCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMocHJpdi0+aHcpOwogCi0JLyogSWYgd2UgaGF2ZSBub3QgcHJldmlvdXNseSBjYWxsZWQgaXdsX2luaXQoKSB0aGVuCi0JICogY2xlYXIgYWxsIGJpdHMgYnV0IHRoZSBSRiBLaWxsIGJpdCBhbmQgcmV0dXJuICovCi0JaWYgKCFpd2xfaXNfaW5pdChwcml2KSkgewotCQlwcml2LT5zdGF0dXMgPSB0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykgPDwKLQkJCQkJU1RBVFVTX1JGX0tJTExfSFcgfAotCQkJICAgICAgIHRlc3RfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cykgPDwKLQkJCQkJU1RBVFVTX0dFT19DT05GSUdVUkVEIHwKLQkJCSAgICAgICB0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSA8PAotCQkJCQlTVEFUVVNfRVhJVF9QRU5ESU5HOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JLyogLi4ub3RoZXJ3aXNlIGNsZWFyIG91dCBhbGwgdGhlIHN0YXR1cyBiaXRzIGJ1dCB0aGUgUkYgS2lsbAotCSAqIGJpdCBhbmQgY29udGludWUgdGFraW5nIHRoZSBOSUMgZG93bi4gKi8KKwkvKiBDbGVhciBvdXQgYWxsIHN0YXR1cyBiaXRzIGJ1dCBhIGZldyB0aGF0IGFyZSBzdGFibGUgYWNyb3NzIHJlc2V0ICovCiAJcHJpdi0+c3RhdHVzICY9IHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSA8PAogCQkJCVNUQVRVU19SRl9LSUxMX0hXIHwKIAkJCXRlc3RfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cykgPDwKQEAgLTI2MDYsMzEgKzIyNzAsMTAgQEAKIAkJICAgICAgIHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpIDw8CiAJCQkJU1RBVFVTX0VYSVRfUEVORElORzsKIAotCS8qIGRldmljZSBnb2luZyBkb3duLCBTdG9wIHVzaW5nIElDVCB0YWJsZSAqLwotCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5pc3Jfb3BzLmRpc2FibGUpCi0JCXByaXYtPmNmZy0+b3BzLT5saWItPmlzcl9vcHMuZGlzYWJsZShwcml2KTsKLQotCWl3bGFnbl90eHFfY3R4X3N0b3AocHJpdik7Ci0JaXdsYWduX3J4cV9zdG9wKHByaXYpOwotCi0JLyogUG93ZXItZG93biBkZXZpY2UncyBidXNtYXN0ZXIgRE1BIGNsb2NrcyAqLwotCWl3bF93cml0ZV9wcnBoKHByaXYsIEFQTUdfQ0xLX0RJU19SRUcsIEFQTUdfQ0xLX1ZBTF9ETUFfQ0xLX1JRVCk7Ci0JdWRlbGF5KDUpOwotCi0JLyogTWFrZSBzdXJlIChyZWR1bmRhbnQpIHdlJ3ZlIHJlbGVhc2VkIG91ciByZXF1ZXN0IHRvIHN0YXkgYXdha2UgKi8KLQlpd2xfY2xlYXJfYml0KHByaXYsIENTUl9HUF9DTlRSTCwgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKLQotCS8qIFN0b3AgdGhlIGRldmljZSwgYW5kIHB1dCBpdCBpbiBsb3cgcG93ZXIgc3RhdGUgKi8KLQlpd2xfYXBtX3N0b3AocHJpdik7Ci0KLSBleGl0OgotCW1lbXNldCgmcHJpdi0+Y2FyZF9hbGl2ZSwgMCwgc2l6ZW9mKHN0cnVjdCBpd2xfYWxpdmVfcmVzcCkpOworCWl3bGFnbl9zdG9wX2RldmljZShwcml2KTsKIAogCWRldl9rZnJlZV9za2IocHJpdi0+YmVhY29uX3NrYik7CiAJcHJpdi0+YmVhY29uX3NrYiA9IE5VTEw7Ci0KLQkvKiBjbGVhciBvdXQgYW55IGZyZWUgZnJhbWVzICovCi0JaXdsX2NsZWFyX2ZyZWVfZnJhbWVzKHByaXYpOwogfQogCiBzdGF0aWMgdm9pZCBpd2xfZG93bihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCkBAIC0yNjQ0LDkgKzIyODcsMTAgQEAKIAogI2RlZmluZSBIV19SRUFEWV9USU1FT1VUICg1MCkKIAorLyogTm90ZTogcmV0dXJucyBwb2xsX2JpdCByZXR1cm4gdmFsdWUsIHdoaWNoIGlzID49IDAgaWYgc3VjY2VzcyAqLwogc3RhdGljIGludCBpd2xfc2V0X2h3X3JlYWR5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0OwogCiAJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCiAJCUNTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9OSUNfUkVBRFkpOwpAQCAtMjY1NiwyNSArMjMwMCwyMSBAQAogCQkJCUNTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9OSUNfUkVBRFksCiAJCQkJQ1NSX0hXX0lGX0NPTkZJR19SRUdfQklUX05JQ19SRUFEWSwKIAkJCQlIV19SRUFEWV9USU1FT1VUKTsKLQlpZiAocmV0ICE9IC1FVElNRURPVVQpCi0JCXByaXYtPmh3X3JlYWR5ID0gdHJ1ZTsKLQllbHNlCi0JCXByaXYtPmh3X3JlYWR5ID0gZmFsc2U7CiAKLQlJV0xfREVCVUdfSU5GTyhwcml2LCAiaGFyZHdhcmUgJXNcbiIsCi0JCSAgICAgIChwcml2LT5od19yZWFkeSA9PSAxKSA/ICJyZWFkeSIgOiAibm90IHJlYWR5Iik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgImhhcmR3YXJlJXMgcmVhZHlcbiIsIHJldCA8IDAgPyAiIG5vdCIgOiAiIik7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpd2xfcHJlcGFyZV9jYXJkX2h3KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKKy8qIE5vdGU6IHJldHVybnMgc3RhbmRhcmQgMC8tRVJST1IgY29kZSAqLworaW50IGl3bF9wcmVwYXJlX2NhcmRfaHcoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCWludCByZXQgPSAwOworCWludCByZXQ7CiAKIAlJV0xfREVCVUdfSU5GTyhwcml2LCAiaXdsX3ByZXBhcmVfY2FyZF9odyBlbnRlclxuIik7CiAKIAlyZXQgPSBpd2xfc2V0X2h3X3JlYWR5KHByaXYpOwotCWlmIChwcml2LT5od19yZWFkeSkKLQkJcmV0dXJuIHJldDsKKwlpZiAocmV0ID49IDApCisJCXJldHVybiAwOwogCiAJLyogSWYgSFcgaXMgbm90IHJlYWR5LCBwcmVwYXJlIHRoZSBjb25kaXRpb25zIHRvIGNoZWNrIGFnYWluICovCiAJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCkBAIC0yNjg0LDEwICsyMzI0LDEzIEBACiAJCQl+Q1NSX0hXX0lGX0NPTkZJR19SRUdfQklUX05JQ19QUkVQQVJFX0RPTkUsCiAJCQlDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRfTklDX1BSRVBBUkVfRE9ORSwgMTUwMDAwKTsKIAotCS8qIEhXIHNob3VsZCBiZSByZWFkeSBieSBub3csIGNoZWNrIGFnYWluLiAqLwotCWlmIChyZXQgIT0gLUVUSU1FRE9VVCkKLQkJaXdsX3NldF9od19yZWFkeShwcml2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAorCS8qIEhXIHNob3VsZCBiZSByZWFkeSBieSBub3csIGNoZWNrIGFnYWluLiAqLworCXJldCA9IGl3bF9zZXRfaHdfcmVhZHkocHJpdik7CisJaWYgKHJldCA+PSAwKQorCQlyZXR1cm4gMDsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNjk2LDE5ICsyMzM5LDE1IEBACiBzdGF0aWMgaW50IF9faXdsX3VwKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4OwotCWludCBpOwogCWludCByZXQ7CiAKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZwcml2LT5tdXRleCk7CisKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpIHsKIAkJSVdMX1dBUk4ocHJpdiwgIkV4aXQgcGVuZGluZzsgd2lsbCBub3QgYnJpbmcgdGhlIE5JQyB1cFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAotCWlmICghcHJpdi0+dWNvZGVfZGF0YV9iYWNrdXAudl9hZGRyIHx8ICFwcml2LT51Y29kZV9kYXRhLnZfYWRkcikgewotCQlJV0xfRVJSKHByaXYsICJ1Y29kZSBub3QgYXZhaWxhYmxlIGZvciBkZXZpY2UgYnJpbmd1cFxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQogCWZvcl9lYWNoX2NvbnRleHQocHJpdiwgY3R4KSB7CiAJCXJldCA9IGl3bGFnbl9hbGxvY19iY2FzdF9zdGF0aW9uKHByaXYsIGN0eCk7CiAJCWlmIChyZXQpIHsKQEAgLTI3MTcsODkgKzIzNTYsMzMgQEAKIAkJfQogCX0KIAotCWl3bF9wcmVwYXJlX2NhcmRfaHcocHJpdik7Ci0KLQlpZiAoIXByaXYtPmh3X3JlYWR5KSB7Ci0JCUlXTF9XQVJOKHByaXYsICJFeGl0IEhXIG5vdCByZWFkeVxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCS8qIElmIHBsYXRmb3JtJ3MgUkZfS0lMTCBzd2l0Y2ggaXMgTk9UIHNldCB0byBLSUxMICovCi0JaWYgKGl3bF9yZWFkMzIocHJpdiwgQ1NSX0dQX0NOVFJMKSAmIENTUl9HUF9DTlRSTF9SRUdfRkxBR19IV19SRl9LSUxMX1NXKQotCQljbGVhcl9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOwotCWVsc2UKLQkJc2V0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cyk7Ci0KLQlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkgewotCQl3aXBoeV9yZmtpbGxfc2V0X2h3X3N0YXRlKHByaXYtPmh3LT53aXBoeSwgdHJ1ZSk7Ci0KLQkJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwotCQlJV0xfV0FSTihwcml2LCAiUmFkaW8gZGlzYWJsZWQgYnkgSFcgUkYgS2lsbCBzd2l0Y2hcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpd2xfd3JpdGUzMihwcml2LCBDU1JfSU5ULCAweEZGRkZGRkZGKTsKLQotCS8qIG11c3QgYmUgaW5pdGlhbGlzZWQgYmVmb3JlIGl3bF9od19uaWNfaW5pdCAqLwotCWlmIChwcml2LT52YWxpZF9jb250ZXh0cyAhPSBCSVQoSVdMX1JYT05fQ1RYX0JTUykpCi0JCXByaXYtPmNtZF9xdWV1ZSA9IElXTF9JUEFOX0NNRF9RVUVVRV9OVU07Ci0JZWxzZQotCQlwcml2LT5jbWRfcXVldWUgPSBJV0xfREVGQVVMVF9DTURfUVVFVUVfTlVNOwotCi0JcmV0ID0gaXdsYWduX2h3X25pY19pbml0KHByaXYpOworCXJldCA9IGl3bGFnbl9ydW5faW5pdF91Y29kZShwcml2KTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9FUlIocHJpdiwgIlVuYWJsZSB0byBpbml0IG5pY1xuIik7Ci0JCXJldHVybiByZXQ7CisJCUlXTF9FUlIocHJpdiwgIkZhaWxlZCB0byBydW4gSU5JVCB1Y29kZTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyb3I7CiAJfQogCi0JLyogbWFrZSBzdXJlIHJma2lsbCBoYW5kc2hha2UgYml0cyBhcmUgY2xlYXJlZCAqLwotCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwgQ1NSX1VDT0RFX1NXX0JJVF9SRktJTEwpOwotCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwKLQkJICAgIENTUl9VQ09ERV9EUlZfR1AxX0JJVF9DTURfQkxPQ0tFRCk7Ci0KLQkvKiBjbGVhciAoYWdhaW4pLCB0aGVuIGVuYWJsZSBob3N0IGludGVycnVwdHMgKi8KLQlpd2xfd3JpdGUzMihwcml2LCBDU1JfSU5ULCAweEZGRkZGRkZGKTsKLQlpd2xfZW5hYmxlX2ludGVycnVwdHMocHJpdik7Ci0KLQkvKiByZWFsbHkgbWFrZSBzdXJlIHJma2lsbCBoYW5kc2hha2UgYml0cyBhcmUgY2xlYXJlZCAqLwotCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwgQ1NSX1VDT0RFX1NXX0JJVF9SRktJTEwpOwotCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwgQ1NSX1VDT0RFX1NXX0JJVF9SRktJTEwpOwotCi0JLyogQ29weSBvcmlnaW5hbCB1Y29kZSBkYXRhIGltYWdlIGZyb20gZGlzayBpbnRvIGJhY2t1cCBjYWNoZS4KLQkgKiBUaGlzIHdpbGwgYmUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBvbi1ib2FyZCBwcm9jZXNzb3IncwotCSAqIGRhdGEgU1JBTSBmb3IgYSBjbGVhbiBzdGFydCB3aGVuIHRoZSBydW50aW1lIHByb2dyYW0gZmlyc3QgbG9hZHMuICovCi0JbWVtY3B5KHByaXYtPnVjb2RlX2RhdGFfYmFja3VwLnZfYWRkciwgcHJpdi0+dWNvZGVfZGF0YS52X2FkZHIsCi0JICAgICAgIHByaXYtPnVjb2RlX2RhdGEubGVuKTsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfSFdfUkVTVEFSVFM7IGkrKykgewotCi0JCS8qIGxvYWQgYm9vdHN0cmFwIHN0YXRlIG1hY2hpbmUsCi0JCSAqIGxvYWQgYm9vdHN0cmFwIHByb2dyYW0gaW50byBwcm9jZXNzb3IncyBtZW1vcnksCi0JCSAqIHByZXBhcmUgdG8gbG9hZCB0aGUgImluaXRpYWxpemUiIHVDb2RlICovCi0JCXJldCA9IHByaXYtPmNmZy0+b3BzLT5saWItPmxvYWRfdWNvZGUocHJpdik7Ci0KLQkJaWYgKHJldCkgewotCQkJSVdMX0VSUihwcml2LCAiVW5hYmxlIHRvIHNldCB1cCBib290c3RyYXAgdUNvZGU6ICVkXG4iLAotCQkJCXJldCk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qIHN0YXJ0IGNhcmQ7ICJpbml0aWFsaXplIiB3aWxsIGxvYWQgcnVudGltZSB1Y29kZSAqLwotCQlpd2xfbmljX3N0YXJ0KHByaXYpOwotCi0JCUlXTF9ERUJVR19JTkZPKHByaXYsIERSVl9OQU1FICIgaXMgY29taW5nIHVwXG4iKTsKLQotCQlyZXR1cm4gMDsKKwlyZXQgPSBpd2xhZ25fbG9hZF91Y29kZV93YWl0X2FsaXZlKHByaXYsCisJCQkJCSAgICZwcml2LT51Y29kZV9ydCwKKwkJCQkJICAgVUNPREVfU1VCVFlQRV9SRUdVTEFSLAorCQkJCQkgICBVQ09ERV9TVUJUWVBFX1JFR1VMQVJfTkVXKTsKKwlpZiAocmV0KSB7CisJCUlXTF9FUlIocHJpdiwgIkZhaWxlZCB0byBzdGFydCBSVCB1Y29kZTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyb3I7CiAJfQogCisJcmV0ID0gaXdsX2FsaXZlX3N0YXJ0KHByaXYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisJcmV0dXJuIDA7CisKKyBlcnJvcjoKIAlzZXRfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpOwogCV9faXdsX2Rvd24ocHJpdik7CiAJY2xlYXJfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpOwogCi0JLyogdHJpZWQgdG8gcmVzdGFydCBhbmQgY29uZmlnIHRoZSBkZXZpY2UgZm9yIGFzIGxvbmcgYXMgb3VyCi0JICogcGF0aWVuY2UgY291bGQgd2l0aHN0YW5kICovCi0JSVdMX0VSUihwcml2LCAiVW5hYmxlIHRvIGluaXRpYWxpemUgZGV2aWNlIGFmdGVyICVkIGF0dGVtcHRzLlxuIiwgaSk7Ci0JcmV0dXJuIC1FSU87CisJSVdMX0VSUihwcml2LCAiVW5hYmxlIHRvIGluaXRpYWxpemUgZGV2aWNlLlxuIik7CisJcmV0dXJuIHJldDsKIH0KIAogCkBAIC0yODA5LDM2ICsyMzkyLDYgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIGl3bF9iZ19pbml0X2FsaXZlX3N0YXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKLXsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPQotCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCBpbml0X2FsaXZlX3N0YXJ0LndvcmspOwotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQlyZXR1cm47Ci0KLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+aW5pdF9hbGl2ZV9zdGFydChwcml2KTsKLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLX0KLQotc3RhdGljIHZvaWQgaXdsX2JnX2FsaXZlX3N0YXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKLXsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPQotCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCBhbGl2ZV9zdGFydC53b3JrKTsKLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCi0JLyogZW5hYmxlIGRyYW0gaW50ZXJydXB0ICovCi0JaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPmlzcl9vcHMucmVzZXQpCi0JCXByaXYtPmNmZy0+b3BzLT5saWItPmlzcl9vcHMucmVzZXQocHJpdik7Ci0KLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JaXdsX2FsaXZlX3N0YXJ0KHByaXYpOwotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotfQotCiBzdGF0aWMgdm9pZCBpd2xfYmdfcnVuX3RpbWVfY2FsaWJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2xfcHJpdiwKQEAgLTI4NTMsMjIgKzI0MDYsNDkgQEAKIAl9CiAKIAlpZiAocHJpdi0+c3RhcnRfY2FsaWIpIHsKLQkJaWYgKGl3bF9idF9zdGF0aXN0aWNzKHByaXYpKSB7Ci0JCQlpd2xfY2hhaW5fbm9pc2VfY2FsaWJyYXRpb24ocHJpdiwKLQkJCQkJKHZvaWQgKikmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzX2J0KTsKLQkJCWl3bF9zZW5zaXRpdml0eV9jYWxpYnJhdGlvbihwcml2LAotCQkJCQkodm9pZCAqKSZwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQpOwotCQl9IGVsc2UgewotCQkJaXdsX2NoYWluX25vaXNlX2NhbGlicmF0aW9uKHByaXYsCi0JCQkJCSh2b2lkICopJnByaXYtPl9hZ24uc3RhdGlzdGljcyk7Ci0JCQlpd2xfc2Vuc2l0aXZpdHlfY2FsaWJyYXRpb24ocHJpdiwKLQkJCQkJKHZvaWQgKikmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzKTsKLQkJfQorCQlpd2xfY2hhaW5fbm9pc2VfY2FsaWJyYXRpb24ocHJpdik7CisJCWl3bF9zZW5zaXRpdml0eV9jYWxpYnJhdGlvbihwcml2KTsKIAl9CiAKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KIAorc3RhdGljIHZvaWQgaXdsYWduX3ByZXBhcmVfcmVzdGFydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eDsKKwlib29sIGJ0X2Z1bGxfY29uY3VycmVudDsKKwl1OCBidF9jaV9jb21wbGlhbmNlOworCXU4IGJ0X2xvYWQ7CisJdTggYnRfc3RhdHVzOworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmcHJpdi0+bXV0ZXgpOworCisJZm9yX2VhY2hfY29udGV4dChwcml2LCBjdHgpCisJCWN0eC0+dmlmID0gTlVMTDsKKwlwcml2LT5pc19vcGVuID0gMDsKKworCS8qCisJICogX19pd2xfZG93bigpIHdpbGwgY2xlYXIgdGhlIEJUIHN0YXR1cyB2YXJpYWJsZXMsCisJICogd2hpY2ggaXMgY29ycmVjdCwgYnV0IHdoZW4gd2UgcmVzdGFydCB3ZSByZWFsbHkKKwkgKiB3YW50IHRvIGtlZXAgdGhlbSBzbyByZXN0b3JlIHRoZW0gYWZ0ZXJ3YXJkcy4KKwkgKgorCSAqIFRoZSByZXN0YXJ0IHByb2Nlc3Mgd2lsbCBsYXRlciBwaWNrIHRoZW0gdXAgYW5kCisJICogcmUtY29uZmlndXJlIHRoZSBodyB3aGVuIHdlIHJlY29uZmlndXJlIHRoZSBCVAorCSAqIGNvbW1hbmQuCisJICovCisJYnRfZnVsbF9jb25jdXJyZW50ID0gcHJpdi0+YnRfZnVsbF9jb25jdXJyZW50OworCWJ0X2NpX2NvbXBsaWFuY2UgPSBwcml2LT5idF9jaV9jb21wbGlhbmNlOworCWJ0X2xvYWQgPSBwcml2LT5idF90cmFmZmljX2xvYWQ7CisJYnRfc3RhdHVzID0gcHJpdi0+YnRfc3RhdHVzOworCisJX19pd2xfZG93bihwcml2KTsKKworCXByaXYtPmJ0X2Z1bGxfY29uY3VycmVudCA9IGJ0X2Z1bGxfY29uY3VycmVudDsKKwlwcml2LT5idF9jaV9jb21wbGlhbmNlID0gYnRfY2lfY29tcGxpYW5jZTsKKwlwcml2LT5idF90cmFmZmljX2xvYWQgPSBidF9sb2FkOworCXByaXYtPmJ0X3N0YXR1cyA9IGJ0X3N0YXR1czsKK30KKwogc3RhdGljIHZvaWQgaXdsX2JnX3Jlc3RhcnQoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsX3ByaXYsIHJlc3RhcnQpOwpAQCAtMjg3Nyw1MCArMjQ1NywxMyBAQAogCQlyZXR1cm47CiAKIAlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFNUQVRVU19GV19FUlJPUiwgJnByaXYtPnN0YXR1cykpIHsKLQkJc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eDsKLQkJYm9vbCBidF9mdWxsX2NvbmN1cnJlbnQ7Ci0JCXU4IGJ0X2NpX2NvbXBsaWFuY2U7Ci0JCXU4IGJ0X2xvYWQ7Ci0JCXU4IGJ0X3N0YXR1czsKLQogCQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JCWZvcl9lYWNoX2NvbnRleHQocHJpdiwgY3R4KQotCQkJY3R4LT52aWYgPSBOVUxMOwotCQlwcml2LT5pc19vcGVuID0gMDsKLQotCQkvKgotCQkgKiBfX2l3bF9kb3duKCkgd2lsbCBjbGVhciB0aGUgQlQgc3RhdHVzIHZhcmlhYmxlcywKLQkJICogd2hpY2ggaXMgY29ycmVjdCwgYnV0IHdoZW4gd2UgcmVzdGFydCB3ZSByZWFsbHkKLQkJICogd2FudCB0byBrZWVwIHRoZW0gc28gcmVzdG9yZSB0aGVtIGFmdGVyd2FyZHMuCi0JCSAqCi0JCSAqIFRoZSByZXN0YXJ0IHByb2Nlc3Mgd2lsbCBsYXRlciBwaWNrIHRoZW0gdXAgYW5kCi0JCSAqIHJlLWNvbmZpZ3VyZSB0aGUgaHcgd2hlbiB3ZSByZWNvbmZpZ3VyZSB0aGUgQlQKLQkJICogY29tbWFuZC4KLQkJICovCi0JCWJ0X2Z1bGxfY29uY3VycmVudCA9IHByaXYtPmJ0X2Z1bGxfY29uY3VycmVudDsKLQkJYnRfY2lfY29tcGxpYW5jZSA9IHByaXYtPmJ0X2NpX2NvbXBsaWFuY2U7Ci0JCWJ0X2xvYWQgPSBwcml2LT5idF90cmFmZmljX2xvYWQ7Ci0JCWJ0X3N0YXR1cyA9IHByaXYtPmJ0X3N0YXR1czsKLQotCQlfX2l3bF9kb3duKHByaXYpOwotCi0JCXByaXYtPmJ0X2Z1bGxfY29uY3VycmVudCA9IGJ0X2Z1bGxfY29uY3VycmVudDsKLQkJcHJpdi0+YnRfY2lfY29tcGxpYW5jZSA9IGJ0X2NpX2NvbXBsaWFuY2U7Ci0JCXByaXYtPmJ0X3RyYWZmaWNfbG9hZCA9IGJ0X2xvYWQ7Ci0JCXByaXYtPmJ0X3N0YXR1cyA9IGJ0X3N0YXR1czsKLQorCQlpd2xhZ25fcHJlcGFyZV9yZXN0YXJ0KHByaXYpOwogCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJaXdsX2NhbmNlbF9kZWZlcnJlZF93b3JrKHByaXYpOwogCQlpZWVlODAyMTFfcmVzdGFydF9odyhwcml2LT5odyk7CiAJfSBlbHNlIHsKLQkJaXdsX2Rvd24ocHJpdik7Ci0KLQkJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQkJcmV0dXJuOwotCi0JCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQkJX19pd2xfdXAocHJpdik7Ci0JCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCQlXQVJOX09OKDEpOwogCX0KIH0KIApAQCAtMzAzMSw4ICsyNTc0LDYgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgVUNPREVfUkVBRFlfVElNRU9VVAkoNCAqIEhaKQotCiAvKgogICogTm90IGEgbWFjODAyMTEgZW50cnkgcG9pbnQgZnVuY3Rpb24sIGJ1dCBpdCBmaXRzIGluIHdpdGggYWxsIHRoZQogICogb3RoZXIgbWFjODAyMTEgZnVuY3Rpb25zIGdyb3VwZWQgaGVyZS4KQEAgLTMwNTUsMTQgKzI1OTYsMTYgQEAKIAogCWh3LT5tYXhfdHhfYWdncmVnYXRpb25fc3ViZnJhbWVzID0gTElOS19RVUFMX0FHR19GUkFNRV9MSU1JVF9ERUY7CiAKLQlpZiAoIXByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPmJyb2tlbl9wb3dlcnNhdmUpCi0JCWh3LT5mbGFncyB8PSBJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMgfAotCQkJICAgICBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUzsKKwlody0+ZmxhZ3MgfD0gSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKKwkJICAgICBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUzsKIAogCWlmIChwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfTikKIAkJaHctPmZsYWdzIHw9IElFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1NNUFMgfAogCQkJICAgICBJRUVFODAyMTFfSFdfU1VQUE9SVFNfU1RBVElDX1NNUFM7CiAKKwlpZiAoY2FwYS0+ZmxhZ3MgJiBJV0xfVUNPREVfVExWX0ZMQUdTX01GUCkKKwkJaHctPmZsYWdzIHw9IElFRUU4MDIxMV9IV19NRlBfQ0FQQUJMRTsKKwogCWh3LT5zdGFfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBpd2xfc3RhdGlvbl9wcml2KTsKIAlody0+dmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXdsX3ZpZl9wcml2KTsKIApAQCAtMzExMiw3ICsyNjU1LDcgQEAKIH0KIAogCi1pbnQgaXdsYWduX21hY19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3N0YXRpYyBpbnQgaXdsYWduX21hY19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlpbnQgcmV0OwpAQCAtMzEyMywzNyArMjY2NiwyMyBAQAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlyZXQgPSBfX2l3bF91cChwcml2KTsKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkKLQkJZ290byBvdXQ7Ci0KIAlJV0xfREVCVUdfSU5GTyhwcml2LCAiU3RhcnQgVVAgd29yayBkb25lLlxuIik7CiAKLQkvKiBXYWl0IGZvciBTVEFSVF9BTElWRSBmcm9tIFJ1biBUaW1lIHVjb2RlLiBPdGhlcndpc2UgY2FsbGJhY2tzIGZyb20KLQkgKiBtYWM4MDIxMSB3aWxsIG5vdCBiZSBydW4gc3VjY2Vzc2Z1bGx5LiAqLwotCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSwKLQkJCXRlc3RfYml0KFNUQVRVU19SRUFEWSwgJnByaXYtPnN0YXR1cyksCi0JCQlVQ09ERV9SRUFEWV9USU1FT1VUKTsKLQlpZiAoIXJldCkgewotCQlpZiAoIXRlc3RfYml0KFNUQVRVU19SRUFEWSwgJnByaXYtPnN0YXR1cykpIHsKLQkJCUlXTF9FUlIocHJpdiwgIlNUQVJUX0FMSVZFIHRpbWVvdXQgYWZ0ZXIgJWRtcy5cbiIsCi0JCQkJamlmZmllc190b19tc2VjcyhVQ09ERV9SRUFEWV9USU1FT1VUKSk7Ci0JCQlyZXR1cm4gLUVUSU1FRE9VVDsKLQkJfQotCX0KKwkvKiBOb3cgd2Ugc2hvdWxkIGJlIGRvbmUsIGFuZCB0aGUgUkVBRFkgYml0IHNob3VsZCBiZSBzZXQuICovCisJaWYgKFdBUk5fT04oIXRlc3RfYml0KFNUQVRVU19SRUFEWSwgJnByaXYtPnN0YXR1cykpKQorCQlyZXQgPSAtRUlPOwogCiAJaXdsYWduX2xlZF9lbmFibGUocHJpdik7CiAKLW91dDoKIAlwcml2LT5pc19vcGVuID0gMTsKIAlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBpd2xhZ25fbWFjX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCitzdGF0aWMgdm9pZCBpd2xhZ25fbWFjX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKQEAgLTMxNzYsNyArMjcwNSw3IEBACiAJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiB9CiAKLXZvaWQgaXdsYWduX21hY190eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIGl3bGFnbl9tYWNfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKQEAgLTMxOTEsMTEgKzI3MjAsMTEgQEAKIAlJV0xfREVCVUdfTUFDRFVNUChwcml2LCAibGVhdmVcbiIpOwogfQogCi12b2lkIGl3bGFnbl9tYWNfdXBkYXRlX3RraXBfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5Y29uZiwKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAotCQkJCXUzMiBpdjMyLCB1MTYgKnBoYXNlMWtleSkKK3N0YXRpYyB2b2lkIGl3bGFnbl9tYWNfdXBkYXRlX3RraXBfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mLAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJCSAgICAgICB1MzIgaXYzMiwgdTE2ICpwaGFzZTFrZXkpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJc3RydWN0IGl3bF92aWZfcHJpdiAqdmlmX3ByaXYgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CkBAIC0zMjA4LDkgKzI3MzcsMTAgQEAKIAlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIH0KIAotaW50IGl3bGFnbl9tYWNfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsCi0JCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAotCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQorc3RhdGljIGludCBpd2xhZ25fbWFjX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJc3RydWN0IGl3bF92aWZfcHJpdiAqdmlmX3ByaXYgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CkBAIC0zMjIxLDcgKzI3NTEsNyBAQAogCiAJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKLQlpZiAocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5zd19jcnlwdG8pIHsKKwlpZiAoaXdsYWduX21vZF9wYXJhbXMuc3dfY3J5cHRvKSB7CiAJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBod2NyeXB0byBkaXNhYmxlZFxuIik7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CkBAIC0zMjg1LDExICsyODE1LDExIEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGl3bGFnbl9tYWNfYW1wZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCQkgICAgZW51bSBpZWVlODAyMTFfYW1wZHVfbWxtZV9hY3Rpb24gYWN0aW9uLAotCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQsIHUxNiAqc3NuLAotCQkJICAgIHU4IGJ1Zl9zaXplKQorc3RhdGljIGludCBpd2xhZ25fbWFjX2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgIGVudW0gaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uIGFjdGlvbiwKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkLCB1MTYgKnNzbiwKKwkJCQkgICB1OCBidWZfc2l6ZSkKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKQEAgLTMzNDgsNiArMjg3OCwxMCBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX09QRVJBVElPTkFMOgorCQlidWZfc2l6ZSA9IG1pbl90KGludCwgYnVmX3NpemUsIExJTktfUVVBTF9BR0dfRlJBTUVfTElNSVRfREVGKTsKKworCQlpd2xhZ25fdHhxX2FnZ19xdWV1ZV9zZXR1cChwcml2LCBzdGEsIHRpZCwgYnVmX3NpemUpOworCiAJCS8qCiAJCSAqIElmIHRoZSBsaW1pdCBpcyAwLCB0aGVuIGl0IHdhc24ndCBpbml0aWFsaXNlZCB5ZXQsCiAJCSAqIHVzZSB0aGUgZGVmYXVsdC4gV2UgY2FuIGRvIHRoYXQgc2luY2Ugd2UgdGFrZSB0aGUKQEAgLTMzOTIsOSArMjkyNiw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGl3bGFnbl9tYWNfc3RhX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQorc3RhdGljIGludCBpd2xhZ25fbWFjX3N0YV9hZGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlzdHJ1Y3QgaXdsX3N0YXRpb25fcHJpdiAqc3RhX3ByaXYgPSAodm9pZCAqKXN0YS0+ZHJ2X3ByaXY7CkBAIC0zNDM1LDggKzI5NjksOCBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGl3bGFnbl9tYWNfY2hhbm5lbF9zd2l0Y2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3aXRjaCAqY2hfc3dpdGNoKQorc3RhdGljIHZvaWQgaXdsYWduX21hY19jaGFubmVsX3N3aXRjaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfc3dpdGNoICpjaF9zd2l0Y2gpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CkBAIC0zNDU3LDIxICsyOTkxLDIyIEBACiAKIAlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAorCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwogCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKQotCQlnb3RvIG91dF9leGl0OworCQlnb3RvIG91dDsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSB8fAogCSAgICB0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKQotCQlnb3RvIG91dF9leGl0OworCQlnb3RvIG91dDsKIAogCWlmICghaXdsX2lzX2Fzc29jaWF0ZWRfY3R4KGN0eCkpCi0JCWdvdG8gb3V0X2V4aXQ7CisJCWdvdG8gb3V0OwogCiAJLyogY2hhbm5lbCBzd2l0Y2ggaW4gcHJvZ3Jlc3MgKi8KIAlpZiAocHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzID09IHRydWUpCi0JCWdvdG8gb3V0X2V4aXQ7CisJCWdvdG8gb3V0OwogCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5zZXRfY2hhbm5lbF9zd2l0Y2gpIHsKIAogCQljaCA9IGNoYW5uZWwtPmh3X3ZhbHVlOwpAQCAtMzUyNywxNiArMzA2MiwxNSBAQAogCX0KIG91dDoKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLW91dF9leGl0OgogCWlmICghcHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzKQogCQlpZWVlODAyMTFfY2hzd2l0Y2hfZG9uZShjdHgtPnZpZiwgZmFsc2UpOwogCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogfQogCi12b2lkIGl3bGFnbl9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKLQkJCSAgICAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKLQkJCSAgICAgdTY0IG11bHRpY2FzdCkKK3N0YXRpYyB2b2lkIGl3bGFnbl9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKKwkJCQkgICAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKKwkJCQkgICAgdTY0IG11bHRpY2FzdCkKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlfX2xlMzIgZmlsdGVyX29yID0gMCwgZmlsdGVyX25hbmQgPSAwOwpAQCAtMzU4Myw3ICszMTE3LDcgQEAKIAkJCUZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDIHwgRklGX0NPTlRST0w7CiB9CiAKLXZvaWQgaXdsYWduX21hY19mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBkcm9wKQorc3RhdGljIHZvaWQgaXdsYWduX21hY19mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBkcm9wKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCkBAIC0zNzI5LDggKzMyNjMsNiBAQAogCUlOSVRfV09SSygmcHJpdi0+dHhfZmx1c2gsIGl3bF9iZ190eF9mbHVzaCk7CiAJSU5JVF9XT1JLKCZwcml2LT5idF9mdWxsX2NvbmN1cnJlbmN5LCBpd2xfYmdfYnRfZnVsbF9jb25jdXJyZW5jeSk7CiAJSU5JVF9XT1JLKCZwcml2LT5idF9ydW50aW1lX2NvbmZpZywgaXdsX2JnX2J0X3J1bnRpbWVfY29uZmlnKTsKLQlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+aW5pdF9hbGl2ZV9zdGFydCwgaXdsX2JnX2luaXRfYWxpdmVfc3RhcnQpOwotCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5hbGl2ZV9zdGFydCwgaXdsX2JnX2FsaXZlX3N0YXJ0KTsKIAlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+X2Fnbi5od19yb2Nfd29yaywgaXdsYWduX2JnX3JvY19kb25lKTsKIAogCWl3bF9zZXR1cF9zY2FuX2RlZmVycmVkX3dvcmsocHJpdik7CkBAIC0zNzUwLDEyICszMjgyLDggQEAKIAlwcml2LT53YXRjaGRvZy5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcHJpdjsKIAlwcml2LT53YXRjaGRvZy5mdW5jdGlvbiA9IGl3bF9iZ193YXRjaGRvZzsKIAotCWlmICghcHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+dXNlX2lzcl9sZWdhY3kpCi0JCXRhc2tsZXRfaW5pdCgmcHJpdi0+aXJxX3Rhc2tsZXQsICh2b2lkICgqKSh1bnNpZ25lZCBsb25nKSkKLQkJCWl3bF9pcnFfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpcHJpdik7Ci0JZWxzZQotCQl0YXNrbGV0X2luaXQoJnByaXYtPmlycV90YXNrbGV0LCAodm9pZCAoKikodW5zaWduZWQgbG9uZykpCi0JCQlpd2xfaXJxX3Rhc2tsZXRfbGVnYWN5LCAodW5zaWduZWQgbG9uZylwcml2KTsKKwl0YXNrbGV0X2luaXQoJnByaXYtPmlycV90YXNrbGV0LCAodm9pZCAoKikodW5zaWduZWQgbG9uZykpCisJCWl3bF9pcnFfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpcHJpdik7CiB9CiAKIHN0YXRpYyB2b2lkIGl3bF9jYW5jZWxfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCkBAIC0zNzYzLDggKzMyOTEsNiBAQAogCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5jYW5jZWxfZGVmZXJyZWRfd29yaykKIAkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+Y2FuY2VsX2RlZmVycmVkX3dvcmsocHJpdik7CiAKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmluaXRfYWxpdmVfc3RhcnQpOwotCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmFsaXZlX3N0YXJ0KTsKIAljYW5jZWxfd29ya19zeW5jKCZwcml2LT5ydW5fdGltZV9jYWxpYl93b3JrKTsKIAljYW5jZWxfd29ya19zeW5jKCZwcml2LT5iZWFjb25fdXBkYXRlKTsKIApAQCAtMzgwNSwxMCArMzMzMSw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnN0YV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+aGNtZF9sb2NrKTsKIAotCUlOSVRfTElTVF9IRUFEKCZwcml2LT5mcmVlX2ZyYW1lcyk7Ci0KIAltdXRleF9pbml0KCZwcml2LT5tdXRleCk7Ci0JbXV0ZXhfaW5pdCgmcHJpdi0+c3luY19jbWRfbXV0ZXgpOwogCiAJcHJpdi0+aWVlZV9jaGFubmVscyA9IE5VTEw7CiAJcHJpdi0+aWVlZV9yYXRlcyA9IE5VTEw7CkBAIC0zODQ1LDEyICszMzY4LDYgQEAKIAkJcHJpdi0+ZHluYW1pY19mcmFnX3RocmVzaCA9IEJUX0ZSQUdfVEhSRVNIT0xEX0RFRjsKIAl9CiAKLQkvKiBTZXQgdGhlIHR4X3Bvd2VyX3VzZXJfbG10IHRvIHRoZSBsb3dlc3QgcG93ZXIgbGV2ZWwKLQkgKiB0aGlzIHZhbHVlIHdpbGwgZ2V0IG92ZXJ3cml0dGVuIGJ5IGNoYW5uZWwgbWF4IHBvd2VyIGF2ZwotCSAqIGZyb20gZWVwcm9tICovCi0JcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPSBJV0xBR05fVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01JTjsKLQlwcml2LT50eF9wb3dlcl9uZXh0ID0gSVdMQUdOX1RYX1BPV0VSX1RBUkdFVF9QT1dFUl9NSU47Ci0KIAlyZXQgPSBpd2xfaW5pdF9jaGFubmVsX21hcChwcml2KTsKIAlpZiAocmV0KSB7CiAJCUlXTF9FUlIocHJpdiwgImluaXRpYWxpemluZyByZWd1bGF0b3J5IGZhaWxlZDogJWRcbiIsIHJldCk7CkBAIC0zOTA1LDI4ICszNDIyLDMwIEBACiAJLmNhbmNlbF9yZW1haW5fb25fY2hhbm5lbCA9IGl3bF9tYWNfY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsLAogCS5vZmZjaGFubmVsX3R4ID0gaXdsX21hY19vZmZjaGFubmVsX3R4LAogCS5vZmZjaGFubmVsX3R4X2NhbmNlbF93YWl0ID0gaXdsX21hY19vZmZjaGFubmVsX3R4X2NhbmNlbF93YWl0LAorCUNGRzgwMjExX1RFU1RNT0RFX0NNRChpd2xfdGVzdG1vZGVfY21kKQogfTsKIAotc3RhdGljIHZvaWQgaXdsX2h3X2RldGVjdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitzdGF0aWMgdTMyIGl3bF9od19kZXRlY3Qoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXByaXYtPmh3X3JldiA9IF9pd2xfcmVhZDMyKHByaXYsIENTUl9IV19SRVYpOwotCXByaXYtPmh3X3dhX3JldiA9IF9pd2xfcmVhZDMyKHByaXYsIENTUl9IV19SRVZfV0FfUkVHKTsKLQlwcml2LT5yZXZfaWQgPSBwcml2LT5wY2lfZGV2LT5yZXZpc2lvbjsKLQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSFcgUmV2aXNpb24gSUQgPSAweCVYXG4iLCBwcml2LT5yZXZfaWQpOworCXU4IHJldl9pZDsKKworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHByaXYtPnBjaV9kZXYsIFBDSV9SRVZJU0lPTl9JRCwgJnJldl9pZCk7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkhXIFJldmlzaW9uIElEID0gMHglWFxuIiwgcmV2X2lkKTsKKwlyZXR1cm4gaXdsX3JlYWQzMihwcml2LCBDU1JfSFdfUkVWKTsKIH0KIAogc3RhdGljIGludCBpd2xfc2V0X2h3X3BhcmFtcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJcHJpdi0+aHdfcGFyYW1zLm1heF9yeHFfc2l6ZSA9IFJYX1FVRVVFX1NJWkU7CiAJcHJpdi0+aHdfcGFyYW1zLm1heF9yeHFfbG9nID0gUlhfUVVFVUVfU0laRV9MT0c7Ci0JaWYgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+YW1zZHVfc2l6ZV84SykKKwlpZiAoaXdsYWduX21vZF9wYXJhbXMuYW1zZHVfc2l6ZV84SykKIAkJcHJpdi0+aHdfcGFyYW1zLnJ4X3BhZ2Vfb3JkZXIgPSBnZXRfb3JkZXIoSVdMX1JYX0JVRl9TSVpFXzhLKTsKIAllbHNlCiAJCXByaXYtPmh3X3BhcmFtcy5yeF9wYWdlX29yZGVyID0gZ2V0X29yZGVyKElXTF9SWF9CVUZfU0laRV80Syk7CiAKIAlwcml2LT5od19wYXJhbXMubWF4X2JlYWNvbl9pdHJ2bCA9IElXTF9NQVhfVUNPREVfQkVBQ09OX0lOVEVSVkFMOwogCi0JaWYgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+ZGlzYWJsZV8xMW4pCisJaWYgKGl3bGFnbl9tb2RfcGFyYW1zLmRpc2FibGVfMTFuKQogCQlwcml2LT5jZmctPnNrdSAmPSB+SVdMX1NLVV9OOwogCiAJLyogRGV2aWNlLXNwZWNpZmljIHNldHVwICovCkBAIC0zOTU1LDYgKzM0NzQsMjggQEAKIAk3LCA2LCA1LCA0LAogfTsKIAorLyogVGhpcyBmdW5jdGlvbiBib3RoIGFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgaHcgYW5kIHByaXYuICovCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9odyAqaXdsX2FsbG9jX2FsbChzdHJ1Y3QgaXdsX2NmZyAqY2ZnKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdjsKKwkvKiBtYWM4MDIxMSBhbGxvY2F0ZXMgbWVtb3J5IGZvciB0aGlzIGRldmljZSBpbnN0YW5jZSwgaW5jbHVkaW5nCisJICogICBzcGFjZSBmb3IgdGhpcyBkcml2ZXIncyBwcml2YXRlIHN0cnVjdHVyZSAqLworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCisJaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKHN0cnVjdCBpd2xfcHJpdiksICZpd2xhZ25faHdfb3BzKTsKKwlpZiAoaHcgPT0gTlVMTCkgeworCQlwcl9lcnIoIiVzOiBDYW4gbm90IGFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlXG4iLAorCQkgICAgICAgY2ZnLT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJcHJpdiA9IGh3LT5wcml2OworCXByaXYtPmh3ID0gaHc7CisKK291dDoKKwlyZXR1cm4gaHc7Cit9CisKIHN0YXRpYyBpbnQgaXdsX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAlpbnQgZXJyID0gMCwgaTsKQEAgLTM5NjMsMTkgKzM1MDQsMTIgQEAKIAlzdHJ1Y3QgaXdsX2NmZyAqY2ZnID0gKHN0cnVjdCBpd2xfY2ZnICopKGVudC0+ZHJpdmVyX2RhdGEpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTE2IHBjaV9jbWQsIG51bV9tYWM7CisJdTMyIGh3X3JldjsKIAogCS8qKioqKioqKioqKioqKioqKioqKioqKioKIAkgKiAxLiBBbGxvY2F0aW5nIEhXIGRhdGEKIAkgKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0JLyogRGlzYWJsaW5nIGhhcmR3YXJlIHNjYW4gbWVhbnMgdGhhdCBtYWM4MDIxMSB3aWxsIHBlcmZvcm0gc2NhbnMKLQkgKiAidGhlIGhhcmQgd2F5IiwgcmF0aGVyIHRoYW4gdXNpbmcgZGV2aWNlJ3Mgc2Nhbi4gKi8KLQlpZiAoY2ZnLT5tb2RfcGFyYW1zLT5kaXNhYmxlX2h3X3NjYW4pIHsKLQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmKHBkZXYtPmRldiksCi0JCQkic3cgc2NhbiBzdXBwb3J0IGlzIGRlcHJlY2F0ZWRcbiIpOwotCQlpd2xhZ25faHdfb3BzLmh3X3NjYW4gPSBOVUxMOwotCX0KLQogCWh3ID0gaXdsX2FsbG9jX2FsbChjZmcpOwogCWlmICghaHcpIHsKIAkJZXJyID0gLUVOT01FTTsKQEAgLTM5ODQsNiArMzUxOCw4IEBACiAJcHJpdiA9IGh3LT5wcml2OwogCS8qIEF0IHRoaXMgcG9pbnQgYm90aCBodyBhbmQgcHJpdiBhcmUgYWxsb2NhdGVkLiAqLwogCisJcHJpdi0+dWNvZGVfdHlwZSA9IFVDT0RFX1NVQlRZUEVfTk9ORV9MT0FERUQ7CisKIAkvKgogCSAqIFRoZSBkZWZhdWx0IGNvbnRleHQgaXMgYWx3YXlzIHZhbGlkLAogCSAqIG1vcmUgbWF5IGJlIGRpc2NvdmVyZWQgd2hlbiBmaXJtd2FyZQpAQCAtNDExNiwxNiArMzY1MiwxNSBAQAogCSAqLwogCWl3bF93cml0ZTMyKHByaXYsIENTUl9SRVNFVCwgQ1NSX1JFU0VUX1JFR19GTEFHX05FVk9fUkVTRVQpOwogCi0JaXdsX2h3X2RldGVjdChwcml2KTsKKwlod19yZXYgPSBpd2xfaHdfZGV0ZWN0KHByaXYpOwogCUlXTF9JTkZPKHByaXYsICJEZXRlY3RlZCAlcywgUkVWPTB4JVhcbiIsCi0JCXByaXYtPmNmZy0+bmFtZSwgcHJpdi0+aHdfcmV2KTsKKwkJcHJpdi0+Y2ZnLT5uYW1lLCBod19yZXYpOwogCiAJLyogV2UgZGlzYWJsZSB0aGUgUkVUUllfVElNRU9VVCByZWdpc3RlciAoMHg0MSkgdG8ga2VlcAogCSAqIFBDSSBUeCByZXRyaWVzIGZyb20gaW50ZXJmZXJpbmcgd2l0aCBDMyBDUFUgc3RhdGUgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUENJX0NGR19SRVRSWV9USU1FT1VULCAweDAwKTsKIAotCWl3bF9wcmVwYXJlX2NhcmRfaHcocHJpdik7Ci0JaWYgKCFwcml2LT5od19yZWFkeSkgeworCWlmIChpd2xfcHJlcGFyZV9jYXJkX2h3KHByaXYpKSB7CiAJCUlXTF9XQVJOKHByaXYsICJGYWlsZWQsIEhXIG5vdCByZWFkeVxuIik7CiAJCWdvdG8gb3V0X2lvdW5tYXA7CiAJfQpAQCAtNDEzNCw3ICszNjY5LDcgQEAKIAkgKiA0LiBSZWFkIEVFUFJPTQogCSAqKioqKioqKioqKioqKioqKi8KIAkvKiBSZWFkIHRoZSBFRVBST00gKi8KLQllcnIgPSBpd2xfZWVwcm9tX2luaXQocHJpdik7CisJZXJyID0gaXdsX2VlcHJvbV9pbml0KHByaXYsIGh3X3Jldik7CiAJaWYgKGVycikgewogCQlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gaW5pdCBFRVBST01cbiIpOwogCQlnb3RvIG91dF9pb3VubWFwOwpAQCAtNDE4NiwxMCArMzcyMSw5IEBACiAKIAlwY2lfZW5hYmxlX21zaShwcml2LT5wY2lfZGV2KTsKIAotCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5pc3Jfb3BzLmFsbG9jKQotCQlwcml2LT5jZmctPm9wcy0+bGliLT5pc3Jfb3BzLmFsbG9jKHByaXYpOworCWl3bF9hbGxvY19pc3JfaWN0KHByaXYpOwogCi0JZXJyID0gcmVxdWVzdF9pcnEocHJpdi0+cGNpX2Rldi0+aXJxLCBwcml2LT5jZmctPm9wcy0+bGliLT5pc3Jfb3BzLmlzciwKKwllcnIgPSByZXF1ZXN0X2lycShwcml2LT5wY2lfZGV2LT5pcnEsIGl3bF9pc3JfaWN0LAogCQkJICBJUlFGX1NIQVJFRCwgRFJWX05BTUUsIHByaXYpOwogCWlmIChlcnIpIHsKIAkJSVdMX0VSUihwcml2LCAiRXJyb3IgYWxsb2NhdGluZyBJUlEgJWRcbiIsIHByaXYtPnBjaV9kZXYtPmlycSk7CkBAIC00MTk4LDYgKzM3MzIsNyBAQAogCiAJaXdsX3NldHVwX2RlZmVycmVkX3dvcmsocHJpdik7CiAJaXdsX3NldHVwX3J4X2hhbmRsZXJzKHByaXYpOworCWl3bF90ZXN0bW9kZV9pbml0KHByaXYpOwogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCSAqIDguIEVuYWJsZSBpbnRlcnJ1cHRzIGFuZCByZWFkIFJGS0lMTCBzdGF0ZQpAQCAtNDIzNiw4ICszNzcxLDcgQEAKIAlkZXN0cm95X3dvcmtxdWV1ZShwcml2LT53b3JrcXVldWUpOwogCXByaXYtPndvcmtxdWV1ZSA9IE5VTEw7CiAJZnJlZV9pcnEocHJpdi0+cGNpX2Rldi0+aXJxLCBwcml2KTsKLQlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+aXNyX29wcy5mcmVlKQotCQlwcml2LT5jZmctPm9wcy0+bGliLT5pc3Jfb3BzLmZyZWUocHJpdik7CisJaXdsX2ZyZWVfaXNyX2ljdChwcml2KTsKICBvdXRfZGlzYWJsZV9tc2k6CiAJcGNpX2Rpc2FibGVfbXNpKHByaXYtPnBjaV9kZXYpOwogCWl3bF91bmluaXRfZHJ2KHByaXYpOwpAQCAtNDI4MywxNyArMzgxNyw5IEBACiAJaWYgKHByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQpIHsKIAkJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcocHJpdi0+aHcpOwogCQlwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkID0gMDsKLQl9IGVsc2UgewotCQlpd2xfZG93bihwcml2KTsKIAl9CiAKLQkvKgotCSAqIE1ha2Ugc3VyZSBkZXZpY2UgaXMgcmVzZXQgdG8gbG93IHBvd2VyIGJlZm9yZSB1bmxvYWRpbmcgZHJpdmVyLgotCSAqIFRoaXMgbWF5IGJlIHJlZHVuZGFudCB3aXRoIGl3bF9kb3duKCksIGJ1dCB0aGVyZSBhcmUgcGF0aHMgdG8KLQkgKiBydW4gaXdsX2Rvd24oKSB3aXRob3V0IGNhbGxpbmcgYXBtX29wcy5zdG9wKCksIGFuZCB0aGVyZSBhcmUKLQkgKiBwYXRocyB0byBhdm9pZCBydW5uaW5nIGl3bF9kb3duKCkgYXQgYWxsIGJlZm9yZSBsZWF2aW5nIGRyaXZlci4KLQkgKiBUaGlzIChpbmV4cGVuc2l2ZSkgY2FsbCAqbWFrZXMgc3VyZSogZGV2aWNlIGlzIHJlc2V0LgotCSAqLworCS8qIFJlc2V0IHRvIGxvdyBwb3dlciBiZWZvcmUgdW5sb2FkaW5nIGRyaXZlci4gKi8KIAlpd2xfYXBtX3N0b3AocHJpdik7CiAKIAlpd2xfdHRfZXhpdChwcml2KTsKQEAgLTQzMzUsOCArMzg2MSw3IEBACiAKIAlpd2xfdW5pbml0X2Rydihwcml2KTsKIAotCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5pc3Jfb3BzLmZyZWUpCi0JCXByaXYtPmNmZy0+b3BzLT5saWItPmlzcl9vcHMuZnJlZShwcml2KTsKKwlpd2xfZnJlZV9pc3JfaWN0KHByaXYpOwogCiAJZGV2X2tmcmVlX3NrYihwcml2LT5iZWFjb25fc2tiKTsKIApAQCAtNDUyMSwyMSArNDA0NiwyMSBAQAogCXtJV0xfUENJX0RFVklDRSgweDA4OEYsIDB4NDI2NiwgaXdsNjAzNV8yYmdfY2ZnKX0sCiAJe0lXTF9QQ0lfREVWSUNFKDB4MDg4RSwgMHg0NDY2LCBpd2w2MDM1XzJiZ19jZmcpfSwKIAotLyogMjAwIFNlcmllcyAqLwotCXtJV0xfUENJX0RFVklDRSgweDA4OTQsIDB4MDAyMiwgaXdsMjAwX2Jnbl9jZmcpfSwKLQl7SVdMX1BDSV9ERVZJQ0UoMHgwODk1LCAweDAyMjIsIGl3bDIwMF9iZ25fY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDg5NCwgMHgwNDIyLCBpd2wyMDBfYmduX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDA4OTQsIDB4MDAyNiwgaXdsMjAwX2JnX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDA4OTUsIDB4MDIyNiwgaXdsMjAwX2JnX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDA4OTQsIDB4MDQyNiwgaXdsMjAwX2JnX2NmZyl9LAorLyogMTA1IFNlcmllcyAqLworCXtJV0xfUENJX0RFVklDRSgweDA4OTQsIDB4MDAyMiwgaXdsMTA1X2Jnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwODk1LCAweDAyMjIsIGl3bDEwNV9iZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDg5NCwgMHgwNDIyLCBpd2wxMDVfYmduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDA4OTQsIDB4MDAyNiwgaXdsMTA1X2JnX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDA4OTUsIDB4MDIyNiwgaXdsMTA1X2JnX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDA4OTQsIDB4MDQyNiwgaXdsMTA1X2JnX2NmZyl9LAogCi0vKiAyMzAgU2VyaWVzICovCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDg5MiwgMHgwMDYyLCBpd2wyMzBfYmduX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDA4OTMsIDB4MDI2MiwgaXdsMjMwX2Jnbl9jZmcpfSwKLQl7SVdMX1BDSV9ERVZJQ0UoMHgwODkyLCAweDA0NjIsIGl3bDIzMF9iZ25fY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDg5MiwgMHgwMDY2LCBpd2wyMzBfYmdfY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDg5MywgMHgwMjY2LCBpd2wyMzBfYmdfY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDg5MiwgMHgwNDY2LCBpd2wyMzBfYmdfY2ZnKX0sCisvKiAxMzUgU2VyaWVzICovCisJe0lXTF9QQ0lfREVWSUNFKDB4MDg5MiwgMHgwMDYyLCBpd2wxMzVfYmduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDA4OTMsIDB4MDI2MiwgaXdsMTM1X2Jnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwODkyLCAweDA0NjIsIGl3bDEzNV9iZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDg5MiwgMHgwMDY2LCBpd2wxMzVfYmdfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDg5MywgMHgwMjY2LCBpd2wxMzVfYmdfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDg5MiwgMHgwNDY2LCBpd2wxMzVfYmdfY2ZnKX0sCiAKIAl7MH0KIH07CkBAIC00NTg1LDQzICs0MTEwLDIxIEBACiBtb2R1bGVfaW5pdChpd2xfaW5pdCk7CiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnNTAsIGl3bF9kZWJ1Z19sZXZlbCwgdWludCwgU19JUlVHTyk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnNTAsICI1MFhYIGRlYnVnIG91dHB1dCBtYXNrIChkZXByZWNhdGVkKSIpOwogbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBpd2xfZGVidWdfbGV2ZWwsIHVpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJkZWJ1ZyBvdXRwdXQgbWFzayIpOwogI2VuZGlmCiAKLW1vZHVsZV9wYXJhbV9uYW1lZChzd2NyeXB0bzUwLCBpd2xhZ25fbW9kX3BhcmFtcy5zd19jcnlwdG8sIGJvb2wsIFNfSVJVR08pOwotTU9EVUxFX1BBUk1fREVTQyhzd2NyeXB0bzUwLAotCQkgInVzaW5nIGNyeXB0byBpbiBzb2Z0d2FyZSAoZGVmYXVsdCAwIFtoYXJkd2FyZV0pIChkZXByZWNhdGVkKSIpOwogbW9kdWxlX3BhcmFtX25hbWVkKHN3Y3J5cHRvLCBpd2xhZ25fbW9kX3BhcmFtcy5zd19jcnlwdG8sIGludCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKHN3Y3J5cHRvLCAidXNpbmcgY3J5cHRvIGluIHNvZnR3YXJlIChkZWZhdWx0IDAgW2hhcmR3YXJlXSkiKTsKLW1vZHVsZV9wYXJhbV9uYW1lZChxdWV1ZXNfbnVtNTAsCi0JCSAgIGl3bGFnbl9tb2RfcGFyYW1zLm51bV9vZl9xdWV1ZXMsIGludCwgU19JUlVHTyk7Ci1NT0RVTEVfUEFSTV9ERVNDKHF1ZXVlc19udW01MCwKLQkJICJudW1iZXIgb2YgaHcgcXVldWVzIGluIDUweHggc2VyaWVzIChkZXByZWNhdGVkKSIpOwogbW9kdWxlX3BhcmFtX25hbWVkKHF1ZXVlc19udW0sIGl3bGFnbl9tb2RfcGFyYW1zLm51bV9vZl9xdWV1ZXMsIGludCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKHF1ZXVlc19udW0sICJudW1iZXIgb2YgaHcgcXVldWVzLiIpOwotbW9kdWxlX3BhcmFtX25hbWVkKDExbl9kaXNhYmxlNTAsIGl3bGFnbl9tb2RfcGFyYW1zLmRpc2FibGVfMTFuLCBpbnQsIFNfSVJVR08pOwotTU9EVUxFX1BBUk1fREVTQygxMW5fZGlzYWJsZTUwLCAiZGlzYWJsZSA1MFhYIDExbiBmdW5jdGlvbmFsaXR5IChkZXByZWNhdGVkKSIpOwogbW9kdWxlX3BhcmFtX25hbWVkKDExbl9kaXNhYmxlLCBpd2xhZ25fbW9kX3BhcmFtcy5kaXNhYmxlXzExbiwgaW50LCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MoMTFuX2Rpc2FibGUsICJkaXNhYmxlIDExbiBmdW5jdGlvbmFsaXR5Iik7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoYW1zZHVfc2l6ZV84SzUwLCBpd2xhZ25fbW9kX3BhcmFtcy5hbXNkdV9zaXplXzhLLAotCQkgICBpbnQsIFNfSVJVR08pOwotTU9EVUxFX1BBUk1fREVTQyhhbXNkdV9zaXplXzhLNTAsCi0JCSAiZW5hYmxlIDhLIGFtc2R1IHNpemUgaW4gNTBYWCBzZXJpZXMgKGRlcHJlY2F0ZWQpIik7CiBtb2R1bGVfcGFyYW1fbmFtZWQoYW1zZHVfc2l6ZV84SywgaXdsYWduX21vZF9wYXJhbXMuYW1zZHVfc2l6ZV84SywKIAkJICAgaW50LCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MoYW1zZHVfc2l6ZV84SywgImVuYWJsZSA4SyBhbXNkdSBzaXplIik7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoZndfcmVzdGFydDUwLCBpd2xhZ25fbW9kX3BhcmFtcy5yZXN0YXJ0X2Z3LCBpbnQsIFNfSVJVR08pOwotTU9EVUxFX1BBUk1fREVTQyhmd19yZXN0YXJ0NTAsCi0JCSAicmVzdGFydCBmaXJtd2FyZSBpbiBjYXNlIG9mIGVycm9yIChkZXByZWNhdGVkKSIpOwogbW9kdWxlX3BhcmFtX25hbWVkKGZ3X3Jlc3RhcnQsIGl3bGFnbl9tb2RfcGFyYW1zLnJlc3RhcnRfZncsIGludCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGZ3X3Jlc3RhcnQsICJyZXN0YXJ0IGZpcm13YXJlIGluIGNhc2Ugb2YgZXJyb3IiKTsKLW1vZHVsZV9wYXJhbV9uYW1lZCgKLQlkaXNhYmxlX2h3X3NjYW4sIGl3bGFnbl9tb2RfcGFyYW1zLmRpc2FibGVfaHdfc2NhbiwgaW50LCBTX0lSVUdPKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9od19zY2FuLAotCQkgImRpc2FibGUgaGFyZHdhcmUgc2Nhbm5pbmcgKGRlZmF1bHQgMCkgKGRlcHJlY2F0ZWQpIik7CiAKIG1vZHVsZV9wYXJhbV9uYW1lZCh1Y29kZV9hbHRlcm5hdGl2ZSwgaXdsYWduX3dhbnRlZF91Y29kZV9hbHRlcm5hdGl2ZSwgaW50LAogCQkgICBTX0lSVUdPKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmgKaW5kZXggMjBmOGU0MS4uZmUzM2ZlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02Niw3ICs2Niw2IEBACiAjaW5jbHVkZSAiaXdsLWRldi5oIgogCiAvKiBjb25maWd1cmF0aW9uIGZvciB0aGUgX2FnbiBkZXZpY2VzICovCi1leHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNDk2NV9hZ25fY2ZnOwogZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDUzMDBfYWduX2NmZzsKIGV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTAwX2Fnbl9jZmc7CiBleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNTM1MF9hZ25fY2ZnOwpAQCAtMTAzLDEwICsxMDIsMTAgQEAKIGV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDM1XzJhZ25fY2ZnOwogZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwMzVfMmFiZ19jZmc7CiBleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAzNV8yYmdfY2ZnOwotZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDIwMF9iZ19jZmc7Ci1leHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsMjAwX2Jnbl9jZmc7Ci1leHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsMjMwX2JnX2NmZzsKLWV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2wyMzBfYmduX2NmZzsKK2V4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2wxMDVfYmdfY2ZnOworZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDEwNV9iZ25fY2ZnOworZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDEzNV9iZ19jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsMTM1X2Jnbl9jZmc7CiAKIGV4dGVybiBzdHJ1Y3QgaXdsX21vZF9wYXJhbXMgaXdsYWduX21vZF9wYXJhbXM7CiBleHRlcm4gc3RydWN0IGl3bF9oY21kX29wcyBpd2xhZ25faGNtZDsKQEAgLTExNCw3ICsxMTMsNiBAQAogZXh0ZXJuIHN0cnVjdCBpd2xfaGNtZF91dGlsc19vcHMgaXdsYWduX2hjbWRfdXRpbHM7CiAKIGV4dGVybiBzdHJ1Y3QgaWVlZTgwMjExX29wcyBpd2xhZ25faHdfb3BzOwotZXh0ZXJuIHN0cnVjdCBpZWVlODAyMTFfb3BzIGl3bDQ5NjVfaHdfb3BzOwogCiBpbnQgaXdsX3Jlc2V0X2ljdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogdm9pZCBpd2xfZGlzYWJsZV9pY3Qoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKQEAgLTEyMiwyMSArMTIwLDI1IEBACiB2b2lkIGl3bF9mcmVlX2lzcl9pY3Qoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGlycXJldHVybl90IGl3bF9pc3JfaWN0KGludCBpcnEsIHZvaWQgKmRhdGEpOwogCisvKiBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gZmx1c2ggYW55IHNjaGVkdWxlZCB0YXNrbGV0ICovCitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX3N5bmNocm9uaXplX2lycShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJLyogd2FpdCB0byBtYWtlIHN1cmUgd2UgZmx1c2ggcGVuZGluZyB0YXNrbGV0Ki8KKwlzeW5jaHJvbml6ZV9pcnEocHJpdi0+cGNpX2Rldi0+aXJxKTsKKwl0YXNrbGV0X2tpbGwoJnByaXYtPmlycV90YXNrbGV0KTsKK30KKworaW50IGl3bF9wcmVwYXJlX2NhcmRfaHcoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKworaW50IGl3bGFnbl9zdGFydF9kZXZpY2Uoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsYWduX3N0b3BfZGV2aWNlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CisKIC8qIHR4IHF1ZXVlICovCiB2b2lkIGl3bGFnbl9zZXRfd3JfcHRycyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCSAgICAgaW50IHR4cV9pZCwgdTMyIGluZGV4KTsKIHZvaWQgaXdsYWduX3R4X3F1ZXVlX3NldF9zdGF0dXMoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJICAgICBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEsCiAJCQkgICAgIGludCB0eF9maWZvX2lkLCBpbnQgc2NkX3JldHJ5KTsKLXZvaWQgaXdsYWduX3R4cV91cGRhdGVfYnl0ZV9jbnRfdGJsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICAgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLAotCQkJCSAgICB1MTYgYnl0ZV9jbnQpOwotdm9pZCBpd2xhZ25fdHhxX2ludmFsX2J5dGVfY250X3RibChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKTsKLWludCBpd2xhZ25fdHhxX2FnZ19lbmFibGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgdHhxX2lkLAotCQkJICBpbnQgdHhfZmlmbywgaW50IHN0YV9pZCwgaW50IHRpZCwgdTE2IHNzbl9pZHgpOwotaW50IGl3bGFnbl90eHFfYWdnX2Rpc2FibGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgdHhxX2lkLAotCQkJICAgdTE2IHNzbl9pZHgsIHU4IHR4X2ZpZm8pOwogdm9pZCBpd2xhZ25fdHhxX3NldF9zY2hlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBtYXNrKTsKIHZvaWQgaXdsX2ZyZWVfdGZkc19pbl9xdWV1ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgaW50IHN0YV9pZCwgaW50IHRpZCwgaW50IGZyZWVkKTsKQEAgLTE1MSwxNiArMTUzLDE0IEBACiAJCQkgICAgIHUzMiBjaGFuZ2VzKTsKIAogLyogdUNvZGUgKi8KLWludCBpd2xhZ25fbG9hZF91Y29kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogdm9pZCBpd2xhZ25fcnhfY2FsaWJfcmVzdWx0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4Yik7Ci12b2lkIGl3bGFnbl9yeF9jYWxpYl9jb21wbGV0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4Yik7Ci12b2lkIGl3bGFnbl9pbml0X2FsaXZlX3N0YXJ0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci1pbnQgaXdsYWduX2FsaXZlX25vdGlmeShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotaW50IGl3bF92ZXJpZnlfdWNvZGUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKLXZvaWQgaXdsYWduX3NlbmRfYnRfZW52KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggYWN0aW9uLCB1OCB0eXBlKTsKK2ludCBpd2xhZ25fc2VuZF9idF9lbnYoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBhY3Rpb24sIHU4IHR5cGUpOwogdm9pZCBpd2xhZ25fc2VuZF9wcmlvX3RibChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaW50IGl3bGFnbl9ydW5faW5pdF91Y29kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaW50IGl3bGFnbl9sb2FkX3Vjb2RlX3dhaXRfYWxpdmUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSBzdHJ1Y3QgZndfaW1nICppbWFnZSwKKwkJCQkgaW50IHN1YnR5cGUsIGludCBhbHRlcm5hdGVfc3VidHlwZSk7CiAKIC8qIGxpYiAqLwogdm9pZCBpd2xfY2hlY2tfYWJvcnRfc3RhdHVzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKQEAgLTE3OSw4ICsxNzksNiBAQAogaW50IGl3bGFnbl93YWl0X3R4X3F1ZXVlX2VtcHR5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsYWduX3R4Zmlmb19mbHVzaChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBmbHVzaF9jb250cm9sKTsKIHZvaWQgaXdsYWduX2Rldl90eGZpZm9fZmx1c2goc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgZmx1c2hfY29udHJvbCk7Ci12b2lkIGl3bF9kdW1wX2NzcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotaW50IGl3bF9kdW1wX2ZoKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY2hhciAqKmJ1ZiwgYm9vbCBkaXNwbGF5KTsKIAogLyogcnggKi8KIHZvaWQgaXdsYWduX3J4X3F1ZXVlX3Jlc3RvY2soc3RydWN0IGl3bF9wcml2ICpwcml2KTsKQEAgLTIwNiw2ICsyMDQsOSBAQAogCQkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCwgdTE2ICpzc24pOwogaW50IGl3bGFnbl90eF9hZ2dfc3RvcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKTsKK3ZvaWQgaXdsYWduX3R4cV9hZ2dfcXVldWVfc2V0dXAoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQkJaW50IHRpZCwgaW50IGZyYW1lX2xpbWl0KTsKIGludCBpd2xhZ25fdHhxX2NoZWNrX2VtcHR5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgIGludCBzdGFfaWQsIHU4IHRpZCwgaW50IHR4cV9pZCk7CiB2b2lkIGl3bGFnbl9yeF9yZXBseV9jb21wcmVzc2VkX2JhKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKQEAgLTIyNSw2ICsyMjYsNyBAQAogCWNhc2UgVFhfU1RBVFVTX0RJUkVDVF9ET05FOgogCQlyZXR1cm4gSUVFRTgwMjExX1RYX1NUQVRfQUNLOwogCWNhc2UgVFhfU1RBVFVTX0ZBSUxfREVTVF9QUzoKKwljYXNlIFRYX1NUQVRVU19GQUlMX1BBU1NJVkVfTk9fUlg6CiAJCXJldHVybiBJRUVFODAyMTFfVFhfU1RBVF9UWF9GSUxURVJFRDsKIAlkZWZhdWx0OgogCQlyZXR1cm4gMDsKQEAgLTI0OSw4ICsyNTEsNiBAQAogCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIGJvb2wgYWRkKTsKIAogLyogaGNtZCAqLwotaW50IGl3bGFnbl9zZW5kX3J4b25fYXNzb2Moc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJICAgc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCk7CiBpbnQgaXdsYWduX3NlbmRfdHhfYW50X2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IHZhbGlkX3R4X2FudCk7CiBpbnQgaXdsYWduX3NlbmRfYmVhY29uX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCkBAIC0zMTEsNyArMzExLDcgQEAKIAogc3RhdGljIGlubGluZSB1OCBpd2xfaHdfZ2V0X3JhdGUoX19sZTMyIHJhdGVfbl9mbGFncykKIHsKLQlyZXR1cm4gbGUzMl90b19jcHUocmF0ZV9uX2ZsYWdzKSAmIDB4RkY7CisJcmV0dXJuIGxlMzJfdG9fY3B1KHJhdGVfbl9mbGFncykgJiBSQVRFX01DU19SQVRFX01TSzsKIH0KIAogc3RhdGljIGlubGluZSBfX2xlMzIgaXdsX2h3X3NldF9yYXRlX25fZmxhZ3ModTggcmF0ZSwgdTMyIGZsYWdzKQpAQCAtMzIyLDUwICszMjIsMzkgQEAKIC8qIGVlcHJvbSAqLwogdm9pZCBpd2xjb3JlX2VlcHJvbV9lbmhhbmNlZF90eHBvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB2b2lkIGl3bF9lZXByb21fZ2V0X21hYyhjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4ICptYWMpOwotaW50IGl3bGNvcmVfZWVwcm9tX2FjcXVpcmVfc2VtYXBob3JlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci12b2lkIGl3bGNvcmVfZWVwcm9tX3JlbGVhc2Vfc2VtYXBob3JlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKIC8qIG5vdGlmaWNhdGlvbiB3YWl0IHN1cHBvcnQgKi8KIHZvaWQgX19hY3F1aXJlcyh3YWl0X2VudHJ5KQogaXdsYWduX2luaXRfbm90aWZpY2F0aW9uX3dhaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJICAgICAgc3RydWN0IGl3bF9ub3RpZmljYXRpb25fd2FpdCAqd2FpdF9lbnRyeSwKKwkJCSAgICAgIHU4IGNtZCwKIAkJCSAgICAgIHZvaWQgKCpmbikoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCQkgc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCksCi0JCQkgICAgICB1OCBjbWQpOwotc2lnbmVkIGxvbmcgX19yZWxlYXNlcyh3YWl0X2VudHJ5KQorCQkJCQkgc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCwKKwkJCQkJIHZvaWQgKmRhdGEpLAorCQkJICAgICAgdm9pZCAqZm5fZGF0YSk7CitpbnQgX19tdXN0X2NoZWNrIF9fcmVsZWFzZXMod2FpdF9lbnRyeSkKIGl3bGFnbl93YWl0X25vdGlmaWNhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgc3RydWN0IGl3bF9ub3RpZmljYXRpb25fd2FpdCAqd2FpdF9lbnRyeSwKIAkJCSB1bnNpZ25lZCBsb25nIHRpbWVvdXQpOwogdm9pZCBfX3JlbGVhc2VzKHdhaXRfZW50cnkpCiBpd2xhZ25fcmVtb3ZlX25vdGlmaWNhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICBzdHJ1Y3QgaXdsX25vdGlmaWNhdGlvbl93YWl0ICp3YWl0X2VudHJ5KTsKLQotLyogbWFjODAyMTEgaGFuZGxlcnMgKGZvciA0OTY1KSAqLwotdm9pZCBpd2xhZ25fbWFjX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWludCBpd2xhZ25fbWFjX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKLXZvaWQgaXdsYWduX21hY19zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKLXZvaWQgaXdsYWduX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgICAgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAotCQkJICAgICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAotCQkJICAgICB1NjQgbXVsdGljYXN0KTsKLWludCBpd2xhZ25fbWFjX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKLQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSk7Ci12b2lkIGl3bGFnbl9tYWNfdXBkYXRlX3RraXBfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5Y29uZiwKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAotCQkJCXUzMiBpdjMyLCB1MTYgKnBoYXNlMWtleSk7Ci1pbnQgaXdsYWduX21hY19hbXBkdV9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCSAgICBlbnVtIGllZWU4MDIxMV9hbXBkdV9tbG1lX2FjdGlvbiBhY3Rpb24sCi0JCQkgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCwgdTE2ICpzc24sCi0JCQkgICAgdTggYnVmX3NpemUpOwotaW50IGl3bGFnbl9tYWNfc3RhX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKTsKLXZvaWQgaXdsYWduX21hY19jaGFubmVsX3N3aXRjaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfc3dpdGNoICpjaF9zd2l0Y2gpOwotdm9pZCBpd2xhZ25fbWFjX2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGRyb3ApOworZXh0ZXJuIGludCBpd2xhZ25faW5pdF9hbGl2ZV9zdGFydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2xfYWxpdmVfc3RhcnQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKy8qIHN2dG9vbCAqLworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFVklDRV9TVlRPT0wKK2V4dGVybiBpbnQgaXdsX3Rlc3Rtb2RlX2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdm9pZCAqZGF0YSwgaW50IGxlbik7CitleHRlcm4gdm9pZCBpd2xfdGVzdG1vZGVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUKK2ludCBpd2xfdGVzdG1vZGVfY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXJldHVybiAtRU5PU1lTOworfQorc3RhdGljIGlubGluZQordm9pZCBpd2xfdGVzdG1vZGVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7Cit9CisjZW5kaWYKIAogI2VuZGlmIC8qIF9faXdsX2Fnbl9oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvbW1hbmRzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb21tYW5kcy5oCmluZGV4IGNhNDJmZmEuLjVmZGFkNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvbW1hbmRzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29tbWFuZHMuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTEwMyw5ICsxMDMsNyBAQAogCVJFUExZX1dFUEtFWSA9IDB4MjAsCiAKIAkvKiBSWCwgVFgsIExFRHMgKi8KLQlSRVBMWV8zOTQ1X1JYID0gMHgxYiwgICAgICAgICAgIC8qIDM5NDUgb25seSAqLwogCVJFUExZX1RYID0gMHgxYywKLQlSRVBMWV9SQVRFX1NDQUxFID0gMHg0NywJLyogMzk0NSBvbmx5ICovCiAJUkVQTFlfTEVEU19DTUQgPSAweDQ4LAogCVJFUExZX1RYX0xJTktfUVVBTElUWV9DTUQgPSAweDRlLCAvKiBmb3IgNDk2NSBhbmQgdXAgKi8KIApAQCAtMjI5LDcgKzIyNyw3IEBACiAJICogVGhlcmUgaXMgb25lIGV4Y2VwdGlvbjogIHVDb2RlIHNldHMgYml0IDE1IHdoZW4gaXQgb3JpZ2luYXRlcwogCSAqIHRoZSByZXNwb25zZS9ub3RpZmljYXRpb24sIGkuZS4gd2hlbiB0aGUgcmVzcG9uc2Uvbm90aWZpY2F0aW9uCiAJICogaXMgbm90IGEgZGlyZWN0IHJlc3BvbnNlIHRvIGEgY29tbWFuZCBzZW50IGJ5IHRoZSBkcml2ZXIuICBGb3IKLQkgKiBleGFtcGxlLCB1Q29kZSBpc3N1ZXMgUkVQTFlfMzk0NV9SWCB3aGVuIGl0IHNlbmRzIGEgcmVjZWl2ZWQgZnJhbWUKKwkgKiBleGFtcGxlLCB1Q29kZSBpc3N1ZXMgUkVQTFlfUlggd2hlbiBpdCBzZW5kcyBhIHJlY2VpdmVkIGZyYW1lCiAJICogdG8gdGhlIGRyaXZlcjsgaXQgaXMgbm90IGEgZGlyZWN0IHJlc3BvbnNlIHRvIGFueSBkcml2ZXIgY29tbWFuZC4KIAkgKgogCSAqIFRoZSBMaW51eCBkcml2ZXIgdXNlcyB0aGUgZm9sbG93aW5nIGZvcm1hdDoKQEAgLTI0OSwzNiArMjQ3LDYgQEAKIAogCiAvKioKLSAqIHN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyCi0gKgotICogVXNlZCBpbiBSRVBMWV9UWF9QV1JfVEFCTEVfQ01ELCBSRVBMWV9TQ0FOX0NNRCwgUkVQTFlfQ0hBTk5FTF9TV0lUQ0gKLSAqCi0gKiBFYWNoIGVudHJ5IGNvbnRhaW5zIHR3byB2YWx1ZXM6Ci0gKiAxKSAgRFNQIGdhaW4gKG9yIHNvbWV0aW1lcyBjYWxsZWQgRFNQIGF0dGVudWF0aW9uKS4gIFRoaXMgaXMgYSBmaW5lLWdyYWluZWQKLSAqICAgICBsaW5lYXIgdmFsdWUgdGhhdCBtdWx0aXBsaWVzIHRoZSBvdXRwdXQgb2YgdGhlIGRpZ2l0YWwgc2lnbmFsIHByb2Nlc3NvciwKLSAqICAgICBiZWZvcmUgYmVpbmcgc2VudCB0byB0aGUgYW5hbG9nIHJhZGlvLgotICogMikgIFJhZGlvIGdhaW4uICBUaGlzIHNldHMgdGhlIGFuYWxvZyBnYWluIG9mIHRoZSByYWRpbyBUeCBwYXRoLgotICogICAgIEl0IGlzIGEgY29hcnNlciBzZXR0aW5nLCBhbmQgYmVoYXZlcyBpbiBhIGxvZ2FyaXRobWljIChkQikgZmFzaGlvbi4KLSAqCi0gKiBEcml2ZXIgb2J0YWlucyB2YWx1ZXMgZnJvbSBzdHJ1Y3QgaXdsMzk0NV90eF9wb3dlciBwb3dlcl9nYWluX3RhYmxlW11bXS4KLSAqLwotc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIgewotCXU4IHR4X2dhaW47CQkvKiBnYWluIGZvciBhbmFsb2cgcmFkaW8gKi8KLQl1OCBkc3BfYXR0ZW47CQkvKiBnYWluIGZvciBEU1AgKi8KLX0gX19wYWNrZWQ7Ci0KLS8qKgotICogc3RydWN0IGl3bDM5NDVfcG93ZXJfcGVyX3JhdGUKLSAqCi0gKiBVc2VkIGluIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQsIFJFUExZX0NIQU5ORUxfU1dJVENICi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3Bvd2VyX3Blcl9yYXRlIHsKLQl1OCByYXRlOwkJLyogcGxjcCAqLwotCXN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHRwYzsKLQl1OCByZXNlcnZlZDsKLX0gX19wYWNrZWQ7Ci0KLS8qKgogICogaXdsYWduIHJhdGVfbl9mbGFncyBiaXQgZmllbGRzCiAgKgogICogcmF0ZV9uX2ZsYWdzIGZvcm1hdCBpcyB1c2VkIGluIGZvbGxvd2luZyBpd2xhZ24gY29tbWFuZHM6CkBAIC0zMjQsNiArMjkyLDggQEAKICNkZWZpbmUgUkFURV9NQ1NfU1BBVElBTF9NU0sgMHgxOAogI2RlZmluZSBSQVRFX01DU19IVF9EVVBfUE9TIDUKICNkZWZpbmUgUkFURV9NQ1NfSFRfRFVQX01TSyAweDIwCisvKiBCb3RoIGxlZ2FjeSBhbmQgSFQgdXNlIGJpdHMgNzowIGFzIHRoZSBDQ0svT0ZETSByYXRlIG9yIEhUIE1DUyAqLworI2RlZmluZSBSQVRFX01DU19SQVRFX01TSyAweGZmCiAKIC8qIEJpdCA4OiAoMSkgSFQgZm9ybWF0LCAoMCkgbGVnYWN5IGZvcm1hdCBpbiBiaXRzIDc6MCAqLwogI2RlZmluZSBSQVRFX01DU19GTEFHU19QT1MgOApAQCAtMzc1LDMwICszNDUsNiBAQAogI2RlZmluZSBJV0xfUFdSX0NDS19FTlRSSUVTCQkJMgogCiAvKioKLSAqIHVuaW9uIGl3bDQ5NjVfdHhfcG93ZXJfZHVhbF9zdHJlYW0KLSAqCi0gKiBIb3N0IGZvcm1hdCB1c2VkIGZvciBSRVBMWV9UWF9QV1JfVEFCTEVfQ01ELCBSRVBMWV9DSEFOTkVMX1NXSVRDSAotICogVXNlIF9fbGUzMiB2ZXJzaW9uIChzdHJ1Y3QgdHhfcG93ZXJfZHVhbF9zdHJlYW0pIHdoZW4gYnVpbGRpbmcgY29tbWFuZC4KLSAqCi0gKiBEcml2ZXIgcHJvdmlkZXMgcmFkaW8gZ2FpbiBhbmQgRFNQIGF0dGVudWF0aW9uIHNldHRpbmdzIHRvIGRldmljZSBpbiBwYWlycywKLSAqIG9uZSB2YWx1ZSBmb3IgZWFjaCB0cmFuc21pdHRlciBjaGFpbi4gIFRoZSBmaXJzdCB2YWx1ZSBpcyBmb3IgdHJhbnNtaXR0ZXIgQSwKLSAqIHNlY29uZCBmb3IgdHJhbnNtaXR0ZXIgQi4KLSAqCi0gKiBGb3IgU0lTTyBiaXQgcmF0ZXMsIGJvdGggdmFsdWVzIGluIGEgcGFpciBzaG91bGQgYmUgaWRlbnRpY2FsLgotICogRm9yIE1JTU8gcmF0ZXMsIG9uZSB2YWx1ZSBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlIG90aGVyLAotICogaW4gb3JkZXIgdG8gYmFsYW5jZSB0aGUgVHggb3V0cHV0IGJldHdlZW4gdGhlIHR3byB0cmFuc21pdHRlcnMuCi0gKgotICogU2VlIG1vcmUgZGV0YWlscyBpbiBkb2MgZm9yIFRYUE9XRVIgaW4gaXdsLTQ5NjUtaHcuaC4KLSAqLwotdW5pb24gaXdsNDk2NV90eF9wb3dlcl9kdWFsX3N0cmVhbSB7Ci0Jc3RydWN0IHsKLQkJdTggcmFkaW9fdHhfZ2FpblsyXTsKLQkJdTggZHNwX3ByZWRpc19hdHRlblsyXTsKLQl9IHM7Ci0JdTMyIGR3OwotfTsKLQotLyoqCiAgKiBzdHJ1Y3QgdHhfcG93ZXJfZHVhbF9zdHJlYW0KICAqCiAgKiBUYWJsZSBlbnRyaWVzIGluIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQsIFJFUExZX0NIQU5ORUxfU1dJVENICkBAIC00MTAsMTUgKzM1Niw2IEBACiB9IF9fcGFja2VkOwogCiAvKioKLSAqIHN0cnVjdCBpd2w0OTY1X3R4X3Bvd2VyX2RiCi0gKgotICogRW50aXJlIHRhYmxlIHdpdGhpbiBSRVBMWV9UWF9QV1JfVEFCTEVfQ01ELCBSRVBMWV9DSEFOTkVMX1NXSVRDSAotICovCi1zdHJ1Y3QgaXdsNDk2NV90eF9wb3dlcl9kYiB7Ci0Jc3RydWN0IHR4X3Bvd2VyX2R1YWxfc3RyZWFtIHBvd2VyX3RibFtQT1dFUl9UQUJMRV9OVU1fRU5UUklFU107Ci19IF9fcGFja2VkOwotCi0vKioKICAqIENvbW1hbmQgUkVQTFlfVFhfUE9XRVJfREJNX0NNRCA9IDB4OTgKICAqIHN0cnVjdCBpd2xhZ25fdHhfcG93ZXJfZGJtX2NtZAogICovCkBAIC00NDksNTUgKzM4NiwxOCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjZGVmaW5lIFVDT0RFX1ZBTElEX09LCWNwdV90b19sZTMyKDB4MSkKLSNkZWZpbmUgSU5JVElBTElaRV9TVUJUWVBFICAgICg5KQogCi0vKgotICogKCJJbml0aWFsaXplIikgUkVQTFlfQUxJVkUgPSAweDEgKHJlc3BvbnNlIG9ubHksIG5vdCBhIGNvbW1hbmQpCi0gKgotICogdUNvZGUgaXNzdWVzIHRoaXMgImluaXRpYWxpemUgYWxpdmUiIG5vdGlmaWNhdGlvbiBvbmNlIHRoZSBpbml0aWFsaXphdGlvbgotICogdUNvZGUgaW1hZ2UgaGFzIGNvbXBsZXRlZCBpdHMgd29yaywgYW5kIGlzIHJlYWR5IHRvIGxvYWQgdGhlIHJ1bnRpbWUgaW1hZ2UuCi0gKiBUaGlzIGlzIHRoZSAqZmlyc3QqICJhbGl2ZSIgbm90aWZpY2F0aW9uIHRoYXQgdGhlIGRyaXZlciB3aWxsIHJlY2VpdmUgYWZ0ZXIKLSAqIHJlYm9vdGluZyB1Q29kZTsgdGhlICJpbml0aWFsaXplIiBhbGl2ZSBpcyBpbmRpY2F0ZWQgYnkgc3VidHlwZSBmaWVsZCA9PSA5LgotICoKLSAqIFNlZSBjb21tZW50cyBkb2N1bWVudGluZyAiQlNNIiAoYm9vdHN0cmFwIHN0YXRlIG1hY2hpbmUpLgotICoKLSAqIEZvciA0OTY1LCB0aGlzIG5vdGlmaWNhdGlvbiBjb250YWlucyBpbXBvcnRhbnQgY2FsaWJyYXRpb24gZGF0YSBmb3IKLSAqIGNhbGN1bGF0aW5nIHR4cG93ZXIgc2V0dGluZ3M6Ci0gKgotICogMSkgIFBvd2VyIHN1cHBseSB2b2x0YWdlIGluZGljYXRpb24uICBUaGUgdm9sdGFnZSBzZW5zb3Igb3V0cHV0cyBoaWdoZXIKLSAqICAgICB2YWx1ZXMgZm9yIGxvd2VyIHZvbHRhZ2UsIGFuZCB2aWNlIHZlcnNlLgotICoKLSAqIDIpICBUZW1wZXJhdHVyZSBtZWFzdXJlbWVudCBwYXJhbWV0ZXJzLCBmb3IgZWFjaCBvZiB0d28gY2hhbm5lbCB3aWR0aHMKLSAqICAgICAoMjAgTUh6IGFuZCA0MCBNSHopIHN1cHBvcnRlZCBieSB0aGUgcmFkaW9zLiAgVGVtcGVyYXR1cmUgc2Vuc2luZwotICogICAgIGlzIGRvbmUgdmlhIG9uZSBvZiB0aGUgcmVjZWl2ZXIgY2hhaW5zLCBhbmQgY2hhbm5lbCB3aWR0aCBpbmZsdWVuY2VzCi0gKiAgICAgdGhlIHJlc3VsdHMuCi0gKgotICogMykgIFR4IGdhaW4gY29tcGVuc2F0aW9uIHRvIGJhbGFuY2UgNDk2NSdzIDIgVHggY2hhaW5zIGZvciBNSU1PIG9wZXJhdGlvbiwKLSAqICAgICBmb3IgZWFjaCBvZiA1IGZyZXF1ZW5jeSByYW5nZXMuCi0gKi8KLXN0cnVjdCBpd2xfaW5pdF9hbGl2ZV9yZXNwIHsKLQl1OCB1Y29kZV9taW5vcjsKLQl1OCB1Y29kZV9tYWpvcjsKLQlfX2xlMTYgcmVzZXJ2ZWQxOwotCXU4IHN3X3Jldls4XTsKLQl1OCB2ZXJfdHlwZTsKLQl1OCB2ZXJfc3VidHlwZTsJCS8qICI5IiBmb3IgaW5pdGlhbGl6ZSBhbGl2ZSAqLwotCV9fbGUxNiByZXNlcnZlZDI7Ci0JX19sZTMyIGxvZ19ldmVudF90YWJsZV9wdHI7Ci0JX19sZTMyIGVycm9yX2V2ZW50X3RhYmxlX3B0cjsKLQlfX2xlMzIgdGltZXN0YW1wOwotCV9fbGUzMiBpc192YWxpZDsKK2VudW0gaXdsYWduX3Vjb2RlX3N1YnR5cGUgeworCVVDT0RFX1NVQlRZUEVfUkVHVUxBUgk9IDAsCisJVUNPREVfU1VCVFlQRV9SRUdVTEFSX05FVyA9IDEsCisJVUNPREVfU1VCVFlQRV9JTklUCT0gOSwKIAotCS8qIGNhbGlicmF0aW9uIHZhbHVlcyBmcm9tICJpbml0aWFsaXplIiB1Q29kZSAqLwotCV9fbGUzMiB2b2x0YWdlOwkJLyogc2lnbmVkLCBoaWdoZXIgdmFsdWUgaXMgbG93ZXIgdm9sdGFnZSAqLwotCV9fbGUzMiB0aGVybV9yMVsyXTsJLyogc2lnbmVkLCAxc3QgZm9yIG5vcm1hbCwgMm5kIGZvciBIVDQwICovCi0JX19sZTMyIHRoZXJtX3IyWzJdOwkvKiBzaWduZWQgKi8KLQlfX2xlMzIgdGhlcm1fcjNbMl07CS8qIHNpZ25lZCAqLwotCV9fbGUzMiB0aGVybV9yNFsyXTsJLyogc2lnbmVkICovCi0JX19sZTMyIHR4X2F0dGVuWzVdWzJdOwkvKiBzaWduZWQgTUlNTyBnYWluIGNvbXAsIDUgZnJlcSBncm91cHMsCi0JCQkJICogMiBUeCBjaGFpbnMgKi8KLX0gX19wYWNrZWQ7Ci0KKwkvKgorCSAqIE5vdCBhIHZhbGlkIHN1YnR5cGUsIHRoZSB1Y29kZSBoYXMganVzdCBhIHU4LCBzbworCSAqIHdlIGNhbiB1c2Ugc29tZXRoaW5nID4gMHhmZiBmb3IgdGhpcyB2YWx1ZS4KKwkgKi8KKwlVQ09ERV9TVUJUWVBFX05PTkVfTE9BREVEID0gMHgxMDAsCit9OwogCiAvKioKICAqIFJFUExZX0FMSVZFID0gMHgxIChyZXNwb25zZSBvbmx5LCBub3QgYSBjb21tYW5kKQpAQCAtNTMzLDQ5ICs0MzMsNjEgQEAKICAqCiAgKiAyKSAgZXJyb3JfZXZlbnRfdGFibGVfcHRyIGluZGljYXRlcyBiYXNlIG9mIHRoZSBlcnJvciBsb2cuICBUaGlzIGNvbnRhaW5zCiAgKiAgICAgaW5mb3JtYXRpb24gYWJvdXQgYW55IHVDb2RlIGVycm9yIHRoYXQgb2NjdXJzLiAgRm9yIGFnbiwgdGhlIGZvcm1hdAotICogICAgIG9mIHRoZSBlcnJvciBsb2cgaXM6Ci0gKgotICoJX19sZTMyIHZhbGlkOyAgICAgICAgKG5vbnplcm8pIHZhbGlkLCAoMCkgbG9nIGlzIGVtcHR5Ci0gKglfX2xlMzIgZXJyb3JfaWQ7ICAgICB0eXBlIG9mIGVycm9yCi0gKglfX2xlMzIgcGM7ICAgICAgICAgICBwcm9ncmFtIGNvdW50ZXIKLSAqCV9fbGUzMiBibGluazE7ICAgICAgIGJyYW5jaCBsaW5rCi0gKglfX2xlMzIgYmxpbmsyOyAgICAgICBicmFuY2ggbGluawotICoJX19sZTMyIGlsaW5rMTsgICAgICAgaW50ZXJydXB0IGxpbmsKLSAqCV9fbGUzMiBpbGluazI7ICAgICAgIGludGVycnVwdCBsaW5rCi0gKglfX2xlMzIgZGF0YTE7ICAgICAgICBlcnJvci1zcGVjaWZpYyBkYXRhCi0gKglfX2xlMzIgZGF0YTI7ICAgICAgICBlcnJvci1zcGVjaWZpYyBkYXRhCi0gKglfX2xlMzIgbGluZTsgICAgICAgICBzb3VyY2UgY29kZSBsaW5lIG9mIGVycm9yCi0gKglfX2xlMzIgYmNvbl90aW1lOyAgICBiZWFjb24gdGltZXIKLSAqCV9fbGUzMiB0c2ZfbG93OyAgICAgIG5ldHdvcmsgdGltZXN0YW1wIGZ1bmN0aW9uIHRpbWVyCi0gKglfX2xlMzIgdHNmX2hpOyAgICAgICBuZXR3b3JrIHRpbWVzdGFtcCBmdW5jdGlvbiB0aW1lcgotICoJX19sZTMyIGdwMTsgICAgICAgICAgR1AxIHRpbWVyIHJlZ2lzdGVyCi0gKglfX2xlMzIgZ3AyOyAgICAgICAgICBHUDIgdGltZXIgcmVnaXN0ZXIKLSAqCV9fbGUzMiBncDM7ICAgICAgICAgIEdQMyB0aW1lciByZWdpc3RlcgotICoJX19sZTMyIHVjb2RlX3ZlcjsgICAgdUNvZGUgdmVyc2lvbgotICoJX19sZTMyIGh3X3ZlcjsgICAgICAgSFcgU2lsaWNvbiB2ZXJzaW9uCi0gKglfX2xlMzIgYnJkX3ZlcjsgICAgICBIVyBib2FyZCB2ZXJzaW9uCi0gKglfX2xlMzIgbG9nX3BjOyAgICAgICBsb2cgcHJvZ3JhbSBjb3VudGVyCi0gKglfX2xlMzIgZnJhbWVfcHRyOyAgICBmcmFtZSBwb2ludGVyCi0gKglfX2xlMzIgc3RhY2tfcHRyOyAgICBzdGFjayBwb2ludGVyCi0gKglfX2xlMzIgaGNtZDsgICAgICAgICBsYXN0IGhvc3QgY29tbWFuZAotICoJX19sZTMyIGlzcjA7ICAgICAgICAgaXNyIHN0YXR1cyByZWdpc3RlciBMTVBNX05JQ19JU1IwOiByeHR4X2ZsYWcKLSAqCV9fbGUzMiBpc3IxOyAgICAgICAgIGlzciBzdGF0dXMgcmVnaXN0ZXIgTE1QTV9OSUNfSVNSMTogaG9zdF9mbGFnCi0gKglfX2xlMzIgaXNyMjsgICAgICAgICBpc3Igc3RhdHVzIHJlZ2lzdGVyIExNUE1fTklDX0lTUjI6IGVuY19mbGFnCi0gKglfX2xlMzIgaXNyMzsgICAgICAgICBpc3Igc3RhdHVzIHJlZ2lzdGVyIExNUE1fTklDX0lTUjM6IHRpbWVfZmxhZwotICoJX19sZTMyIGlzcjQ7ICAgICAgICAgaXNyIHN0YXR1cyByZWdpc3RlciBMTVBNX05JQ19JU1I0OiB3aWNvIGludGVycnVwdAotICoJX19sZTMyIGlzcl9wcmVmOyAgICAgaXNyIHN0YXR1cyByZWdpc3RlciBMTVBNX05JQ19QUkVGX1NUQVQKLSAqCV9fbGUzMiB3YWl0X2V2ZW50OyAgIHdhaXQgZXZlbnQoKSBjYWxsZXIgYWRkcmVzcwotICoJX19sZTMyIGwycF9jb250cm9sOyAgTDJwQ29udHJvbEZpZWxkCi0gKglfX2xlMzIgbDJwX2R1cmF0aW9uOyBMMnBEdXJhdGlvbkZpZWxkCi0gKglfX2xlMzIgbDJwX21odmFsaWQ7ICBMMnBNaFZhbGlkQml0cwotICoJX19sZTMyIGwycF9hZGRyX21hdGNoOyBMMnBBZGRyTWF0Y2hTdGF0Ci0gKglfX2xlMzIgbG1wbV9wbWdfc2VsOyBpbmRpY2F0ZSB3aGljaCBjbG9ja3MgYXJlIHR1cm5lZCBvbiAoTE1QTV9QTUdfU0VMKQotICoJX19sZTMyIHVfdGltZXN0YW1wOyAgaW5kaWNhdGUgd2hlbiB0aGUgZGF0ZSBhbmQgdGltZSBvZiB0aGUgY29tcGlsYXRpb24KLSAqCV9fbGUzMiByZXNlcnZlZDsKKyAqICAgICBvZiB0aGUgZXJyb3IgbG9nIGlzIGRlZmluZWQgYnkgc3RydWN0IGl3bF9lcnJvcl9ldmVudF90YWJsZS4KICAqCiAgKiBUaGUgTGludXggZHJpdmVyIGNhbiBwcmludCBib3RoIGxvZ3MgdG8gdGhlIHN5c3RlbSBsb2cgd2hlbiBhIHVDb2RlIGVycm9yCiAgKiBvY2N1cnMuCiAgKi8KKworLyoKKyAqIE5vdGU6IFRoaXMgc3RydWN0dXJlIGlzIHJlYWQgZnJvbSB0aGUgZGV2aWNlIHdpdGggSU8gYWNjZXNzZXMsCisgKiBhbmQgdGhlIHJlYWRpbmcgYWxyZWFkeSBkb2VzIHRoZSBlbmRpYW4gY29udmVyc2lvbi4gQXMgaXQgaXMKKyAqIHJlYWQgd2l0aCB1MzItc2l6ZWQgYWNjZXNzZXMsIGFueSBtZW1iZXJzIHdpdGggYSBkaWZmZXJlbnQgc2l6ZQorICogbmVlZCB0byBiZSBvcmRlcmVkIGNvcnJlY3RseSB0aG91Z2ghCisgKi8KK3N0cnVjdCBpd2xfZXJyb3JfZXZlbnRfdGFibGUgeworCXUzMiB2YWxpZDsJCS8qIChub256ZXJvKSB2YWxpZCwgKDApIGxvZyBpcyBlbXB0eSAqLworCXUzMiBlcnJvcl9pZDsJCS8qIHR5cGUgb2YgZXJyb3IgKi8KKwl1MzIgcGM7CQkJLyogcHJvZ3JhbSBjb3VudGVyICovCisJdTMyIGJsaW5rMTsJCS8qIGJyYW5jaCBsaW5rICovCisJdTMyIGJsaW5rMjsJCS8qIGJyYW5jaCBsaW5rICovCisJdTMyIGlsaW5rMTsJCS8qIGludGVycnVwdCBsaW5rICovCisJdTMyIGlsaW5rMjsJCS8qIGludGVycnVwdCBsaW5rICovCisJdTMyIGRhdGExOwkJLyogZXJyb3Itc3BlY2lmaWMgZGF0YSAqLworCXUzMiBkYXRhMjsJCS8qIGVycm9yLXNwZWNpZmljIGRhdGEgKi8KKwl1MzIgbGluZTsJCS8qIHNvdXJjZSBjb2RlIGxpbmUgb2YgZXJyb3IgKi8KKwl1MzIgYmNvbl90aW1lOwkJLyogYmVhY29uIHRpbWVyICovCisJdTMyIHRzZl9sb3c7CQkvKiBuZXR3b3JrIHRpbWVzdGFtcCBmdW5jdGlvbiB0aW1lciAqLworCXUzMiB0c2ZfaGk7CQkvKiBuZXR3b3JrIHRpbWVzdGFtcCBmdW5jdGlvbiB0aW1lciAqLworCXUzMiBncDE7CQkvKiBHUDEgdGltZXIgcmVnaXN0ZXIgKi8KKwl1MzIgZ3AyOwkJLyogR1AyIHRpbWVyIHJlZ2lzdGVyICovCisJdTMyIGdwMzsJCS8qIEdQMyB0aW1lciByZWdpc3RlciAqLworCXUzMiB1Y29kZV92ZXI7CQkvKiB1Q29kZSB2ZXJzaW9uICovCisJdTMyIGh3X3ZlcjsJCS8qIEhXIFNpbGljb24gdmVyc2lvbiAqLworCXUzMiBicmRfdmVyOwkJLyogSFcgYm9hcmQgdmVyc2lvbiAqLworCXUzMiBsb2dfcGM7CQkvKiBsb2cgcHJvZ3JhbSBjb3VudGVyICovCisJdTMyIGZyYW1lX3B0cjsJCS8qIGZyYW1lIHBvaW50ZXIgKi8KKwl1MzIgc3RhY2tfcHRyOwkJLyogc3RhY2sgcG9pbnRlciAqLworCXUzMiBoY21kOwkJLyogbGFzdCBob3N0IGNvbW1hbmQgaGVhZGVyICovCisjaWYgMAorCS8qIG5vIG5lZWQgdG8gcmVhZCB0aGUgcmVtYWluZGVyLCB3ZSBkb24ndCB1c2UgdGhlIHZhbHVlcyAqLworCXUzMiBpc3IwOwkJLyogaXNyIHN0YXR1cyByZWdpc3RlciBMTVBNX05JQ19JU1IwOiByeHR4X2ZsYWcgKi8KKwl1MzIgaXNyMTsJCS8qIGlzciBzdGF0dXMgcmVnaXN0ZXIgTE1QTV9OSUNfSVNSMTogaG9zdF9mbGFnICovCisJdTMyIGlzcjI7CQkvKiBpc3Igc3RhdHVzIHJlZ2lzdGVyIExNUE1fTklDX0lTUjI6IGVuY19mbGFnICovCisJdTMyIGlzcjM7CQkvKiBpc3Igc3RhdHVzIHJlZ2lzdGVyIExNUE1fTklDX0lTUjM6IHRpbWVfZmxhZyAqLworCXUzMiBpc3I0OwkJLyogaXNyIHN0YXR1cyByZWdpc3RlciBMTVBNX05JQ19JU1I0OiB3aWNvIGludGVycnVwdCAqLworCXUzMiBpc3JfcHJlZjsJCS8qIGlzciBzdGF0dXMgcmVnaXN0ZXIgTE1QTV9OSUNfUFJFRl9TVEFUICovCisJdTMyIHdhaXRfZXZlbnQ7CQkvKiB3YWl0IGV2ZW50KCkgY2FsbGVyIGFkZHJlc3MgKi8KKwl1MzIgbDJwX2NvbnRyb2w7CS8qIEwycENvbnRyb2xGaWVsZCAqLworCXUzMiBsMnBfZHVyYXRpb247CS8qIEwycER1cmF0aW9uRmllbGQgKi8KKwl1MzIgbDJwX21odmFsaWQ7CS8qIEwycE1oVmFsaWRCaXRzICovCisJdTMyIGwycF9hZGRyX21hdGNoOwkvKiBMMnBBZGRyTWF0Y2hTdGF0ICovCisJdTMyIGxtcG1fcG1nX3NlbDsJLyogaW5kaWNhdGUgd2hpY2ggY2xvY2tzIGFyZSB0dXJuZWQgb24gKExNUE1fUE1HX1NFTCkgKi8KKwl1MzIgdV90aW1lc3RhbXA7CS8qIGluZGljYXRlIHdoZW4gdGhlIGRhdGUgYW5kIHRpbWUgb2YgdGhlIGNvbXBpbGF0aW9uICovCisJdTMyIGZsb3dfaGFuZGxlcjsJLyogRkggcmVhZC93cml0ZSBwb2ludGVycywgUlggY3JlZGl0ICovCisjZW5kaWYKK30gX19wYWNrZWQ7CisKIHN0cnVjdCBpd2xfYWxpdmVfcmVzcCB7CiAJdTggdWNvZGVfbWlub3I7CiAJdTggdWNvZGVfbWFqb3I7CkBAIC03MjIsNDYgKzYzNCw2IEBACiAgKiAgICAgICAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIFJYT05fRklMVEVSX0FTU09DX01TSyBpcyBzZXQuCiAgKi8KIAotc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQgewotCXU4IG5vZGVfYWRkcls2XTsKLQlfX2xlMTYgcmVzZXJ2ZWQxOwotCXU4IGJzc2lkX2FkZHJbNl07Ci0JX19sZTE2IHJlc2VydmVkMjsKLQl1OCB3bGFwX2Jzc2lkX2FkZHJbNl07Ci0JX19sZTE2IHJlc2VydmVkMzsKLQl1OCBkZXZfdHlwZTsKLQl1OCBhaXJfcHJvcGFnYXRpb247Ci0JX19sZTE2IHJlc2VydmVkNDsKLQl1OCBvZmRtX2Jhc2ljX3JhdGVzOwotCXU4IGNja19iYXNpY19yYXRlczsKLQlfX2xlMTYgYXNzb2NfaWQ7Ci0JX19sZTMyIGZsYWdzOwotCV9fbGUzMiBmaWx0ZXJfZmxhZ3M7Ci0JX19sZTE2IGNoYW5uZWw7Ci0JX19sZTE2IHJlc2VydmVkNTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBpd2w0OTY1X3J4b25fY21kIHsKLQl1OCBub2RlX2FkZHJbNl07Ci0JX19sZTE2IHJlc2VydmVkMTsKLQl1OCBic3NpZF9hZGRyWzZdOwotCV9fbGUxNiByZXNlcnZlZDI7Ci0JdTggd2xhcF9ic3NpZF9hZGRyWzZdOwotCV9fbGUxNiByZXNlcnZlZDM7Ci0JdTggZGV2X3R5cGU7Ci0JdTggYWlyX3Byb3BhZ2F0aW9uOwotCV9fbGUxNiByeF9jaGFpbjsKLQl1OCBvZmRtX2Jhc2ljX3JhdGVzOwotCXU4IGNja19iYXNpY19yYXRlczsKLQlfX2xlMTYgYXNzb2NfaWQ7Ci0JX19sZTMyIGZsYWdzOwotCV9fbGUzMiBmaWx0ZXJfZmxhZ3M7Ci0JX19sZTE2IGNoYW5uZWw7Ci0JdTggb2ZkbV9odF9zaW5nbGVfc3RyZWFtX2Jhc2ljX3JhdGVzOwotCXU4IG9mZG1faHRfZHVhbF9zdHJlYW1fYmFzaWNfcmF0ZXM7Ci19IF9fcGFja2VkOwotCi0vKiA1MDAwIEhXIGp1c3QgZXh0ZW5kIHRoaXMgY29tbWFuZCAqLwogc3RydWN0IGl3bF9yeG9uX2NtZCB7CiAJdTggbm9kZV9hZGRyWzZdOwogCV9fbGUxNiByZXNlcnZlZDE7CkBAIC03ODksMjYgKzY2MSw3IEBACiAvKgogICogUkVQTFlfUlhPTl9BU1NPQyA9IDB4MTEgKGNvbW1hbmQsIGhhcyBzaW1wbGUgZ2VuZXJpYyByZXNwb25zZSkKICAqLwotc3RydWN0IGl3bDM5NDVfcnhvbl9hc3NvY19jbWQgewotCV9fbGUzMiBmbGFnczsKLQlfX2xlMzIgZmlsdGVyX2ZsYWdzOwotCXU4IG9mZG1fYmFzaWNfcmF0ZXM7Ci0JdTggY2NrX2Jhc2ljX3JhdGVzOwotCV9fbGUxNiByZXNlcnZlZDsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBpd2w0OTY1X3J4b25fYXNzb2NfY21kIHsKLQlfX2xlMzIgZmxhZ3M7Ci0JX19sZTMyIGZpbHRlcl9mbGFnczsKLQl1OCBvZmRtX2Jhc2ljX3JhdGVzOwotCXU4IGNja19iYXNpY19yYXRlczsKLQl1OCBvZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXM7Ci0JdTggb2ZkbV9odF9kdWFsX3N0cmVhbV9iYXNpY19yYXRlczsKLQlfX2xlMTYgcnhfY2hhaW5fc2VsZWN0X2ZsYWdzOwotCV9fbGUxNiByZXNlcnZlZDsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBpd2w1MDAwX3J4b25fYXNzb2NfY21kIHsKK3N0cnVjdCBpd2xfcnhvbl9hc3NvY19jbWQgewogCV9fbGUzMiBmbGFnczsKIAlfX2xlMzIgZmlsdGVyX2ZsYWdzOwogCXU4IG9mZG1fYmFzaWNfcmF0ZXM7CkBAIC04NDMsMjYgKzY5Niw2IEBACiAvKgogICogUkVQTFlfQ0hBTk5FTF9TV0lUQ0ggPSAweDcyIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCiAgKi8KLXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfc3dpdGNoX2NtZCB7Ci0JdTggYmFuZDsKLQl1OCBleHBlY3RfYmVhY29uOwotCV9fbGUxNiBjaGFubmVsOwotCV9fbGUzMiByeG9uX2ZsYWdzOwotCV9fbGUzMiByeG9uX2ZpbHRlcl9mbGFnczsKLQlfX2xlMzIgc3dpdGNoX3RpbWU7Ci0Jc3RydWN0IGl3bDM5NDVfcG93ZXJfcGVyX3JhdGUgcG93ZXJbSVdMX01BWF9SQVRFU107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaXdsNDk2NV9jaGFubmVsX3N3aXRjaF9jbWQgewotCXU4IGJhbmQ7Ci0JdTggZXhwZWN0X2JlYWNvbjsKLQlfX2xlMTYgY2hhbm5lbDsKLQlfX2xlMzIgcnhvbl9mbGFnczsKLQlfX2xlMzIgcnhvbl9maWx0ZXJfZmxhZ3M7Ci0JX19sZTMyIHN3aXRjaF90aW1lOwotCXN0cnVjdCBpd2w0OTY1X3R4X3Bvd2VyX2RiIHR4X3Bvd2VyOwotfSBfX3BhY2tlZDsKLQogLyoqCiAgKiBzdHJ1Y3QgaXdsNTAwMF9jaGFubmVsX3N3aXRjaF9jbWQKICAqIEBiYW5kOiAwLSA1LjJHSHosIDEtIDIuNEdIegpAQCAtOTc2LDE1ICs4MDksMTAgQEAKICNkZWZpbmUJSVdMX0FQX0lECQkwCiAjZGVmaW5lCUlXTF9BUF9JRF9QQU4JCTEKICNkZWZpbmUJSVdMX1NUQV9JRAkJMgotI2RlZmluZQlJV0wzOTQ1X0JST0FEQ0FTVF9JRAkyNAotI2RlZmluZSBJV0wzOTQ1X1NUQVRJT05fQ09VTlQJMjUKLSNkZWZpbmUgSVdMNDk2NV9CUk9BRENBU1RfSUQJMzEKLSNkZWZpbmUJSVdMNDk2NV9TVEFUSU9OX0NPVU5UCTMyCiAjZGVmaW5lIElXTEFHTl9QQU5fQkNBU1RfSUQJMTQKICNkZWZpbmUgSVdMQUdOX0JST0FEQ0FTVF9JRAkxNQogI2RlZmluZQlJV0xBR05fU1RBVElPTl9DT1VOVAkxNgogCi0jZGVmaW5lCUlXTF9TVEFUSU9OX0NPVU5UCTMyIAkvKiBNQVgoMzk0NSw0OTY1KSovCiAjZGVmaW5lCUlXTF9JTlZBTElEX1NUQVRJT04gCTI1NQogCiAjZGVmaW5lIFNUQV9GTEdfVFhfUkFURV9NU0sJCWNwdV90b19sZTMyKDEgPDwgMikKQEAgLTEwMzIsMTYgKzg2MCw2IEBACiAgKiBjb21iaW5lZCB3aXRoIFRyYWZmaWMgSUQgKFFPUyBwcmlvcml0eSksIGluIGZvcm1hdCB1c2VkIGJ5IFR4IFNjaGVkdWxlciAqLwogI2RlZmluZSBCVUlMRF9SQXhUSUQoc3RhX2lkLCB0aWQpCSgoKHN0YV9pZCkgPDwgNCkgKyAodGlkKSkKIAotc3RydWN0IGl3bDQ5NjVfa2V5aW5mbyB7Ci0JX19sZTE2IGtleV9mbGFnczsKLQl1OCB0a2lwX3J4X3RzY19ieXRlMjsJLyogVFNDWzJdIGZvciBrZXkgbWl4IHBoMSBkZXRlY3Rpb24gKi8KLQl1OCByZXNlcnZlZDE7Ci0JX19sZTE2IHRraXBfcnhfdHRha1s1XTsJLyogMTAtYnl0ZSB1bmljYXN0IFRLSVAgVFRBSyAqLwotCXU4IGtleV9vZmZzZXQ7Ci0JdTggcmVzZXJ2ZWQyOwotCXU4IGtleVsxNl07CQkvKiAxNi1ieXRlIHVuaWNhc3QgZGVjcnlwdGlvbiBrZXkgKi8KLX0gX19wYWNrZWQ7Ci0KIC8qIGFnbiAqLwogc3RydWN0IGl3bF9rZXlpbmZvIHsKIAlfX2xlMTYga2V5X2ZsYWdzOwpAQCAtMTA4Myw3ICs5MDEsNiBAQAogICogd2l0aCBpbmZvIG9uIHNlY3VyaXR5IGtleXMsIGFnZ3JlZ2F0aW9uIHBhcmFtZXRlcnMsIGFuZCBUeCByYXRlcyBmb3IKICAqIGluaXRpYWwgVHggYXR0ZW1wdCBhbmQgYW55IHJldHJpZXMgKGFnbiBkZXZpY2VzIHVzZXMKICAqIFJFUExZX1RYX0xJTktfUVVBTElUWV9DTUQsCi0gKiAzOTQ1IHVzZXMgUkVQTFlfUkFURV9TQ0FMRSB0byBzZXQgdXAgcmF0ZSB0YWJsZXMpLgogICoKICAqIFJFUExZX0FERF9TVEEgc2V0cyB1cCB0aGUgdGFibGUgZW50cnkgZm9yIG9uZSBzdGF0aW9uLCBlaXRoZXIgY3JlYXRpbmcKICAqIGEgbmV3IGVudHJ5LCBvciBtb2RpZnlpbmcgYSBwcmUtZXhpc3Rpbmcgb25lLgpAQCAtMTEwMyw3MiArOTIwLDYgQEAKICAqICAgICAgICBlbnRyaWVzIGZvciBhbGwgU1RBcyBpbiBuZXR3b3JrLCBzdGFydGluZyB3aXRoIGluZGV4IElXTF9TVEFfSUQuCiAgKi8KIAotc3RydWN0IGl3bDM5NDVfYWRkc3RhX2NtZCB7Ci0JdTggbW9kZTsJCS8qIDE6IG1vZGlmeSBleGlzdGluZywgMDogYWRkIG5ldyBzdGF0aW9uICovCi0JdTggcmVzZXJ2ZWRbM107Ci0Jc3RydWN0IHN0YV9pZF9tb2RpZnkgc3RhOwotCXN0cnVjdCBpd2w0OTY1X2tleWluZm8ga2V5OwotCV9fbGUzMiBzdGF0aW9uX2ZsYWdzOwkJLyogU1RBX0ZMR18qICovCi0JX19sZTMyIHN0YXRpb25fZmxhZ3NfbXNrOwkvKiBTVEFfRkxHXyogKi8KLQotCS8qIGJpdCBmaWVsZCB0byBkaXNhYmxlICgxKSBvciBlbmFibGUgKDApIFR4IGZvciBUcmFmZmljIElEIChUSUQpCi0JICogY29ycmVzcG9uZGluZyB0byBiaXQgKGUuZy4gYml0IDUgY29udHJvbHMgVElEIDUpLgotCSAqIFNldCBtb2RpZnlfbWFzayBiaXQgU1RBX01PRElGWV9USURfRElTQUJMRV9UWCB0byB1c2UgdGhpcyBmaWVsZC4gKi8KLQlfX2xlMTYgdGlkX2Rpc2FibGVfdHg7Ci0KLQlfX2xlMTYgcmF0ZV9uX2ZsYWdzOwotCi0JLyogVElEIGZvciB3aGljaCB0byBhZGQgYmxvY2stYWNrIHN1cHBvcnQuCi0JICogU2V0IG1vZGlmeV9tYXNrIGJpdCBTVEFfTU9ESUZZX0FEREJBX1RJRF9NU0sgdG8gdXNlIHRoaXMgZmllbGQuICovCi0JdTggYWRkX2ltbWVkaWF0ZV9iYV90aWQ7Ci0KLQkvKiBUSUQgZm9yIHdoaWNoIHRvIHJlbW92ZSBibG9jay1hY2sgc3VwcG9ydC4KLQkgKiBTZXQgbW9kaWZ5X21hc2sgYml0IFNUQV9NT0RJRllfREVMQkFfVElEX01TSyB0byB1c2UgdGhpcyBmaWVsZC4gKi8KLQl1OCByZW1vdmVfaW1tZWRpYXRlX2JhX3RpZDsKLQotCS8qIFN0YXJ0aW5nIFNlcXVlbmNlIE51bWJlciBmb3IgYWRkZWQgYmxvY2stYWNrIHN1cHBvcnQuCi0JICogU2V0IG1vZGlmeV9tYXNrIGJpdCBTVEFfTU9ESUZZX0FEREJBX1RJRF9NU0sgdG8gdXNlIHRoaXMgZmllbGQuICovCi0JX19sZTE2IGFkZF9pbW1lZGlhdGVfYmFfc3NuOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGl3bDQ5NjVfYWRkc3RhX2NtZCB7Ci0JdTggbW9kZTsJCS8qIDE6IG1vZGlmeSBleGlzdGluZywgMDogYWRkIG5ldyBzdGF0aW9uICovCi0JdTggcmVzZXJ2ZWRbM107Ci0Jc3RydWN0IHN0YV9pZF9tb2RpZnkgc3RhOwotCXN0cnVjdCBpd2w0OTY1X2tleWluZm8ga2V5OwotCV9fbGUzMiBzdGF0aW9uX2ZsYWdzOwkJLyogU1RBX0ZMR18qICovCi0JX19sZTMyIHN0YXRpb25fZmxhZ3NfbXNrOwkvKiBTVEFfRkxHXyogKi8KLQotCS8qIGJpdCBmaWVsZCB0byBkaXNhYmxlICgxKSBvciBlbmFibGUgKDApIFR4IGZvciBUcmFmZmljIElEIChUSUQpCi0JICogY29ycmVzcG9uZGluZyB0byBiaXQgKGUuZy4gYml0IDUgY29udHJvbHMgVElEIDUpLgotCSAqIFNldCBtb2RpZnlfbWFzayBiaXQgU1RBX01PRElGWV9USURfRElTQUJMRV9UWCB0byB1c2UgdGhpcyBmaWVsZC4gKi8KLQlfX2xlMTYgdGlkX2Rpc2FibGVfdHg7Ci0KLQlfX2xlMTYJcmVzZXJ2ZWQxOwotCi0JLyogVElEIGZvciB3aGljaCB0byBhZGQgYmxvY2stYWNrIHN1cHBvcnQuCi0JICogU2V0IG1vZGlmeV9tYXNrIGJpdCBTVEFfTU9ESUZZX0FEREJBX1RJRF9NU0sgdG8gdXNlIHRoaXMgZmllbGQuICovCi0JdTggYWRkX2ltbWVkaWF0ZV9iYV90aWQ7Ci0KLQkvKiBUSUQgZm9yIHdoaWNoIHRvIHJlbW92ZSBibG9jay1hY2sgc3VwcG9ydC4KLQkgKiBTZXQgbW9kaWZ5X21hc2sgYml0IFNUQV9NT0RJRllfREVMQkFfVElEX01TSyB0byB1c2UgdGhpcyBmaWVsZC4gKi8KLQl1OCByZW1vdmVfaW1tZWRpYXRlX2JhX3RpZDsKLQotCS8qIFN0YXJ0aW5nIFNlcXVlbmNlIE51bWJlciBmb3IgYWRkZWQgYmxvY2stYWNrIHN1cHBvcnQuCi0JICogU2V0IG1vZGlmeV9tYXNrIGJpdCBTVEFfTU9ESUZZX0FEREJBX1RJRF9NU0sgdG8gdXNlIHRoaXMgZmllbGQuICovCi0JX19sZTE2IGFkZF9pbW1lZGlhdGVfYmFfc3NuOwotCi0JLyoKLQkgKiBOdW1iZXIgb2YgcGFja2V0cyBPSyB0byB0cmFuc21pdCB0byBzdGF0aW9uIGV2ZW4gdGhvdWdoCi0JICogaXQgaXMgYXNsZWVwIC0tIHVzZWQgdG8gc3luY2hyb25pc2UgUFMtcG9sbCBhbmQgdS1BUFNECi0JICogcmVzcG9uc2VzIHdoaWxlIHVjb2RlIGtlZXBzIHRyYWNrIG9mIFNUQSBzbGVlcCBzdGF0ZS4KLQkgKi8KLQlfX2xlMTYgc2xlZXBfdHhfY291bnQ7Ci0KLQlfX2xlMTYgcmVzZXJ2ZWQyOwotfSBfX3BhY2tlZDsKLQotLyogYWduICovCiBzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgewogCXU4IG1vZGU7CQkvKiAxOiBtb2RpZnkgZXhpc3RpbmcsIDA6IGFkZCBuZXcgc3RhdGlvbiAqLwogCXU4IHJlc2VydmVkWzNdOwpAQCAtMTMzNyw2MiArMTA4OCw2IEBACiAjZGVmaW5lIFJYX01QRFVfUkVTX1NUQVRVU19ERUNfRE9ORV9NU0sJKDB4ODAwKQogCiAKLXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX3N0YXRzIHsKLQl1OCBwaHlfY291bnQ7Ci0JdTggaWQ7Ci0JdTggcnNzaTsKLQl1OCBhZ2M7Ci0JX19sZTE2IHNpZ19hdmc7Ci0JX19sZTE2IG5vaXNlX2RpZmY7Ci0JdTggcGF5bG9hZFswXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX2hkciB7Ci0JX19sZTE2IGNoYW5uZWw7Ci0JX19sZTE2IHBoeV9mbGFnczsKLQl1OCByZXNlcnZlZDE7Ci0JdTggcmF0ZTsKLQlfX2xlMTYgbGVuOwotCXU4IHBheWxvYWRbMF07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9lbmQgewotCV9fbGUzMiBzdGF0dXM7Ci0JX19sZTY0IHRpbWVzdGFtcDsKLQlfX2xlMzIgYmVhY29uX3RpbWVzdGFtcDsKLX0gX19wYWNrZWQ7Ci0KLS8qCi0gKiBSRVBMWV8zOTQ1X1JYID0gMHgxYiAocmVzcG9uc2Ugb25seSwgbm90IGEgY29tbWFuZCkKLSAqCi0gKiBOT1RFOiAgRE8gTk9UIGRlcmVmZXJlbmNlIGZyb20gY2FzdHMgdG8gdGhpcyBzdHJ1Y3R1cmUKLSAqIEl0IGlzIHByb3ZpZGVkIG9ubHkgZm9yIGNhbGN1bGF0aW5nIG1pbmltdW0gZGF0YSBzZXQgc2l6ZS4KLSAqIFRoZSBhY3R1YWwgb2Zmc2V0cyBvZiB0aGUgaGRyIGFuZCBlbmQgYXJlIGR5bmFtaWMgYmFzZWQgb24KLSAqIHN0YXRzLnBoeV9jb3VudAotICovCi1zdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZSB7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfc3RhdHMgc3RhdHM7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfaGRyIGhkcjsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9lbmQgZW5kOwotfSBfX3BhY2tlZDsKLQotI2RlZmluZSBJV0wzOV9SWF9GUkFNRV9TSVpFCSg0ICsgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lKSkKLQotLyogRml4ZWQgKG5vbi1jb25maWd1cmFibGUpIHJ4IGRhdGEgZnJvbSBwaHkgKi8KLQotI2RlZmluZSBJV0w0OV9SWF9SRVNfUEhZX0NOVCAxNAotI2RlZmluZSBJV0w0OV9SWF9QSFlfRkxBR1NfQU5URU5OQUVfT0ZGU0VUCSg0KQotI2RlZmluZSBJV0w0OV9SWF9QSFlfRkxBR1NfQU5URU5OQUVfTUFTSwkoMHg3MCkKLSNkZWZpbmUgSVdMNDlfQUdDX0RCX01BU0sJCQkoMHgzZjgwKQkvKiBNQVNLKDcsMTMpICovCi0jZGVmaW5lIElXTDQ5X0FHQ19EQl9QT1MJCQkoNykKLXN0cnVjdCBpd2w0OTY1X3J4X25vbl9jZmdfcGh5IHsKLQlfX2xlMTYgYW50X3NlbGVjdGlvbjsJLyogYW50IEEgYml0IDQsIGFudCBCIGJpdCA1LCBhbnQgQyBiaXQgNiAqLwotCV9fbGUxNiBhZ2NfaW5mbzsJLyogYWdjIGNvZGUgMDo2LCBhZ2MgZEIgNzoxMywgcmVzZXJ2ZWQgMTQ6MTUgKi8KLQl1OCByc3NpX2luZm9bNl07CS8qIHdlIHVzZSBldmVuIGVudHJpZXMsIDAvMi80IGZvciBBL0IvQyByc3NpICovCi0JdTggcGFkWzBdOwotfSBfX3BhY2tlZDsKLQotCiAjZGVmaW5lIElXTEFHTl9SWF9SRVNfUEhZX0NOVCA4CiAjZGVmaW5lIElXTEFHTl9SWF9SRVNfQUdDX0lEWCAgICAgMQogI2RlZmluZSBJV0xBR05fUlhfUkVTX1JTU0lfQUJfSURYIDIKQEAgLTE1NzYsODAgKzEyNzEsNiBAQAogICogUkVQTFlfVFggPSAweDFjIChjb21tYW5kKQogICovCiAKLXN0cnVjdCBpd2wzOTQ1X3R4X2NtZCB7Ci0JLyoKLQkgKiBNUERVIGJ5dGUgY291bnQ6Ci0JICogTUFDIGhlYWRlciAoMjQvMjYvMzAvMzIgYnl0ZXMpICsgMiBieXRlcyBwYWQgaWYgMjYvMzAgaGVhZGVyIHNpemUsCi0JICogKyA4IGJ5dGUgSVYgZm9yIENDTSBvciBUS0lQIChub3QgdXNlZCBmb3IgV0VQKQotCSAqICsgRGF0YSBwYXlsb2FkCi0JICogKyA4LWJ5dGUgTUlDIChub3QgdXNlZCBmb3IgQ0NNL1dFUCkKLQkgKiBOT1RFOiAgRG9lcyBub3QgaW5jbHVkZSBUeCBjb21tYW5kIGJ5dGVzLCBwb3N0LU1BQyBwYWQgYnl0ZXMsCi0JICogICAgICAgIE1JQyAoQ0NNKSA4IGJ5dGVzLCBJQ1YgKFdFUC9US0lQL0NLSVApIDQgYnl0ZXMsIENSQyA0IGJ5dGVzLmkKLQkgKiBSYW5nZTogMTQtMjM0MiBieXRlcy4KLQkgKi8KLQlfX2xlMTYgbGVuOwotCi0JLyoKLQkgKiBNUERVIG9yIE1TRFUgYnl0ZSBjb3VudCBmb3IgbmV4dCBmcmFtZS4KLQkgKiBVc2VkIGZvciBmcmFnbWVudGF0aW9uIGFuZCBidXJzdGluZywgYnV0IG5vdCAxMW4gYWdncmVnYXRpb24uCi0JICogU2FtZSBhcyAibGVuIiwgYnV0IGZvciBuZXh0IGZyYW1lLiAgU2V0IHRvIDAgaWYgbm90IGFwcGxpY2FibGUuCi0JICovCi0JX19sZTE2IG5leHRfZnJhbWVfbGVuOwotCi0JX19sZTMyIHR4X2ZsYWdzOwkvKiBUWF9DTURfRkxHXyogKi8KLQotCXU4IHJhdGU7Ci0KLQkvKiBJbmRleCBvZiByZWNpcGllbnQgc3RhdGlvbiBpbiB1Q29kZSdzIHN0YXRpb24gdGFibGUgKi8KLQl1OCBzdGFfaWQ7Ci0JdTggdGlkX3RzcGVjOwotCXU4IHNlY19jdGw7Ci0JdTgga2V5WzE2XTsKLQl1bmlvbiB7Ci0JCXU4IGJ5dGVbOF07Ci0JCV9fbGUxNiB3b3JkWzRdOwotCQlfX2xlMzIgZHdbMl07Ci0JfSB0a2lwX21pYzsKLQlfX2xlMzIgbmV4dF9mcmFtZV9pbmZvOwotCXVuaW9uIHsKLQkJX19sZTMyIGxpZmVfdGltZTsKLQkJX19sZTMyIGF0dGVtcHQ7Ci0JfSBzdG9wX3RpbWU7Ci0JdTggc3VwcF9yYXRlc1syXTsKLQl1OCBydHNfcmV0cnlfbGltaXQ7CS8qYnl0ZSA1MCAqLwotCXU4IGRhdGFfcmV0cnlfbGltaXQ7CS8qYnl0ZSA1MSAqLwotCXVuaW9uIHsKLQkJX19sZTE2IHBtX2ZyYW1lX3RpbWVvdXQ7Ci0JCV9fbGUxNiBhdHRlbXB0X2R1cmF0aW9uOwotCX0gdGltZW91dDsKLQotCS8qCi0JICogRHVyYXRpb24gb2YgRURDQSBidXJzdCBUeCBPcHBvcnR1bml0eSwgaW4gMzItdXNlYyB1bml0cy4KLQkgKiBTZXQgdGhpcyBpZiB0eG9wIHRpbWUgaXMgbm90IHNwZWNpZmllZCBieSBIQ0NBIHByb3RvY29sIChlLmcuIGJ5IEFQKS4KLQkgKi8KLQlfX2xlMTYgZHJpdmVyX3R4b3A7Ci0KLQkvKgotCSAqIE1BQyBoZWFkZXIgZ29lcyBoZXJlLCBmb2xsb3dlZCBieSAyIGJ5dGVzIHBhZGRpbmcgaWYgTUFDIGhlYWRlcgotCSAqIGxlbmd0aCBpcyAyNiBvciAzMCBieXRlcywgZm9sbG93ZWQgYnkgcGF5bG9hZCBkYXRhCi0JICovCi0JdTggcGF5bG9hZFswXTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciBoZHJbMF07Ci19IF9fcGFja2VkOwotCi0vKgotICogUkVQTFlfVFggPSAweDFjIChyZXNwb25zZSkKLSAqLwotc3RydWN0IGl3bDM5NDVfdHhfcmVzcCB7Ci0JdTggZmFpbHVyZV9ydHM7Ci0JdTggZmFpbHVyZV9mcmFtZTsKLQl1OCBidF9raWxsX2NvdW50OwotCXU4IHJhdGU7Ci0JX19sZTMyIHdpcmVsZXNzX21lZGlhX3RpbWU7Ci0JX19sZTMyIHN0YXR1czsJCS8qIFRYIHN0YXR1cyAqLwotfSBfX3BhY2tlZDsKLQotCiAvKgogICogNDk2NSB1Q29kZSB1cGRhdGVzIHRoZXNlIFR4IGF0dGVtcHQgY291bnQgdmFsdWVzIGluIGhvc3QgRFJBTS4KICAqIFVzZWQgZm9yIG1hbmFnaW5nIFR4IHJldHJpZXMgd2hlbiBleHBlY3RpbmcgYmxvY2stYWNrcy4KQEAgLTE3NDAsNTQgKzEzNjEsNiBAQAogCXN0cnVjdCBpZWVlODAyMTFfaGRyIGhkclswXTsKIH0gX19wYWNrZWQ7CiAKLS8qIFRYIGNvbW1hbmQgcmVzcG9uc2UgaXMgc2VudCBhZnRlciAqMzk0NSogdHJhbnNtaXNzaW9uIGF0dGVtcHRzLgotICoKLSAqIE5PVEVTOgotICoKLSAqIFRYX1NUQVRVU19GQUlMX05FWFRfRlJBRwotICoKLSAqIElmIHRoZSBmcmFnbWVudCBmbGFnIGluIHRoZSBNQUMgaGVhZGVyIGZvciB0aGUgZnJhbWUgYmVpbmcgdHJhbnNtaXR0ZWQKLSAqIGlzIHNldCBhbmQgdGhlcmUgaXMgaW5zdWZmaWNpZW50IHRpbWUgdG8gdHJhbnNtaXQgdGhlIG5leHQgZnJhbWUsIHRoZQotICogVFggc3RhdHVzIHdpbGwgYmUgcmV0dXJuZWQgd2l0aCAnVFhfU1RBVFVTX0ZBSUxfTkVYVF9GUkFHJy4KLSAqCi0gKiBUWF9TVEFUVVNfRklGT19VTkRFUlJVTgotICoKLSAqIEluZGljYXRlcyB0aGUgaG9zdCBkaWQgbm90IHByb3ZpZGUgYnl0ZXMgdG8gdGhlIEZJRk8gZmFzdCBlbm91Z2ggd2hpbGUKLSAqIGEgVFggd2FzIGluIHByb2dyZXNzLgotICoKLSAqIFRYX1NUQVRVU19GQUlMX01HTU5UX0FCT1JUCi0gKgotICogVGhpcyBzdGF0dXMgaXMgb25seSBwb3NzaWJsZSBpZiB0aGUgQUJPUlQgT04gTUdNVCBSWCBwYXJhbWV0ZXIgd2FzCi0gKiBzZXQgdG8gdHJ1ZSB3aXRoIHRoZSBUWCBjb21tYW5kLgotICoKLSAqIElmIHRoZSBNU0Igb2YgdGhlIHN0YXR1cyBwYXJhbWV0ZXIgaXMgc2V0IHRoZW4gYW4gYWJvcnQgc2VxdWVuY2UgaXMKLSAqIHJlcXVpcmVkLiAgVGhpcyBzZXF1ZW5jZSBjb25zaXN0cyBvZiB0aGUgaG9zdCBhY3RpdmF0aW5nIHRoZSBUWCBBYm9ydAotICogY29udHJvbCBsaW5lLCBhbmQgdGhlbiB3YWl0aW5nIGZvciB0aGUgVFggQWJvcnQgY29tbWFuZCByZXNwb25zZS4gIFRoaXMKLSAqIGluZGljYXRlcyB0aGF0IGEgdGhlIGRldmljZSBpcyBubyBsb25nZXIgaW4gYSB0cmFuc21pdCBzdGF0ZSwgYW5kIHRoYXQgdGhlCi0gKiBjb21tYW5kIEZJRk8gaGFzIGJlZW4gY2xlYXJlZC4gIFRoZSBob3N0IG11c3QgdGhlbiBkZWFjdGl2YXRlIHRoZSBUWCBBYm9ydAotICogY29udHJvbCBsaW5lLiAgUmVjZWl2aW5nIGlzIHN0aWxsIGFsbG93ZWQgaW4gdGhpcyBjYXNlLgotICovCi1lbnVtIHsKLQlUWF8zOTQ1X1NUQVRVU19TVUNDRVNTID0gMHgwMSwKLQlUWF8zOTQ1X1NUQVRVU19ESVJFQ1RfRE9ORSA9IDB4MDIsCi0JVFhfMzk0NV9TVEFUVVNfRkFJTF9TSE9SVF9MSU1JVCA9IDB4ODIsCi0JVFhfMzk0NV9TVEFUVVNfRkFJTF9MT05HX0xJTUlUID0gMHg4MywKLQlUWF8zOTQ1X1NUQVRVU19GQUlMX0ZJRk9fVU5ERVJSVU4gPSAweDg0LAotCVRYXzM5NDVfU1RBVFVTX0ZBSUxfTUdNTlRfQUJPUlQgPSAweDg1LAotCVRYXzM5NDVfU1RBVFVTX0ZBSUxfTkVYVF9GUkFHID0gMHg4NiwKLQlUWF8zOTQ1X1NUQVRVU19GQUlMX0xJRkVfRVhQSVJFID0gMHg4NywKLQlUWF8zOTQ1X1NUQVRVU19GQUlMX0RFU1RfUFMgPSAweDg4LAotCVRYXzM5NDVfU1RBVFVTX0ZBSUxfQUJPUlRFRCA9IDB4ODksCi0JVFhfMzk0NV9TVEFUVVNfRkFJTF9CVF9SRVRSWSA9IDB4OGEsCi0JVFhfMzk0NV9TVEFUVVNfRkFJTF9TVEFfSU5WQUxJRCA9IDB4OGIsCi0JVFhfMzk0NV9TVEFUVVNfRkFJTF9GUkFHX0RST1BQRUQgPSAweDhjLAotCVRYXzM5NDVfU1RBVFVTX0ZBSUxfVElEX0RJU0FCTEUgPSAweDhkLAotCVRYXzM5NDVfU1RBVFVTX0ZBSUxfRlJBTUVfRkxVU0hFRCA9IDB4OGUsCi0JVFhfMzk0NV9TVEFUVVNfRkFJTF9JTlNVRkZJQ0lFTlRfQ0ZfUE9MTCA9IDB4OGYsCi0JVFhfMzk0NV9TVEFUVVNfRkFJTF9UWF9MT0NLRUQgPSAweDkwLAotCVRYXzM5NDVfU1RBVFVTX0ZBSUxfTk9fQkVBQ09OX09OX1JBREFSID0gMHg5MSwKLX07Ci0KIC8qCiAgKiBUWCBjb21tYW5kIHJlc3BvbnNlIGlzIHNlbnQgYWZ0ZXIgKmFnbiogdHJhbnNtaXNzaW9uIGF0dGVtcHRzLgogICoKQEAgLTE5MDUsNDMgKzE0NzgsNiBAQAogCV9fbGUxNiBzZXF1ZW5jZTsKIH0gX19wYWNrZWQ7CiAKLXN0cnVjdCBpd2w0OTY1X3R4X3Jlc3AgewotCXU4IGZyYW1lX2NvdW50OwkJLyogMSBubyBhZ2dyZWdhdGlvbiwgPjEgYWdncmVnYXRpb24gKi8KLQl1OCBidF9raWxsX2NvdW50OwkvKiAjIGJsb2NrZWQgYnkgYmx1ZXRvb3RoICh1bnVzZWQgZm9yIGFnZykgKi8KLQl1OCBmYWlsdXJlX3J0czsJCS8qICMgZmFpbHVyZXMgZHVlIHRvIHVuc3VjY2Vzc2Z1bCBSVFMgKi8KLQl1OCBmYWlsdXJlX2ZyYW1lOwkvKiAjIGZhaWx1cmVzIGR1ZSB0byBubyBBQ0sgKHVudXNlZCBmb3IgYWdnKSAqLwotCi0JLyogRm9yIG5vbi1hZ2c6ICBSYXRlIGF0IHdoaWNoIGZyYW1lIHdhcyBzdWNjZXNzZnVsLgotCSAqIEZvciBhZ2c6ICBSYXRlIGF0IHdoaWNoIGFsbCBmcmFtZXMgd2VyZSB0cmFuc21pdHRlZC4gKi8KLQlfX2xlMzIgcmF0ZV9uX2ZsYWdzOwkvKiBSQVRFX01DU18qICAqLwotCi0JLyogRm9yIG5vbi1hZ2c6ICBSVFMgKyBDVFMgKyBmcmFtZSB0eCBhdHRlbXB0cyB0aW1lICsgQUNLLgotCSAqIEZvciBhZ2c6ICBSVFMgKyBDVFMgKyBhZ2dyZWdhdGlvbiB0eCB0aW1lICsgYmxvY2stYWNrIHRpbWUuICovCi0JX19sZTE2IHdpcmVsZXNzX21lZGlhX3RpbWU7CS8qIHVTZWNzICovCi0KLQlfX2xlMTYgcmVzZXJ2ZWQ7Ci0JX19sZTMyIHBhX3Bvd2VyMTsJLyogUkYgcG93ZXIgYW1wbGlmaWVyIG1lYXN1cmVtZW50IChub3QgdXNlZCkgKi8KLQlfX2xlMzIgcGFfcG93ZXIyOwotCi0JLyoKLQkgKiBGb3Igbm9uLWFnZzogIGZyYW1lIHN0YXR1cyBUWF9TVEFUVVNfKgotCSAqIEZvciBhZ2c6ICBzdGF0dXMgb2YgMXN0IGZyYW1lLCBBR0dfVFhfU1RBVEVfKjsgb3RoZXIgZnJhbWUgc3RhdHVzCi0JICogICAgICAgICAgIGZpZWxkcyBmb2xsb3cgdGhpcyBvbmUsIHVwIHRvIGZyYW1lX2NvdW50LgotCSAqICAgICAgICAgICBCaXQgZmllbGRzOgotCSAqICAgICAgICAgICAxMS0gMDogIEFHR19UWF9TVEFURV8qIHN0YXR1cyBjb2RlCi0JICogICAgICAgICAgIDE1LTEyOiAgUmV0cnkgY291bnQgZm9yIDFzdCBmcmFtZSBpbiBhZ2dyZWdhdGlvbiAocmV0cmllcwotCSAqICAgICAgICAgICAgICAgICAgIG9jY3VyIGlmIHR4IGZhaWxlZCBmb3IgdGhpcyBmcmFtZSB3aGVuIGl0IHdhcyBhCi0JICogICAgICAgICAgICAgICAgICAgbWVtYmVyIG9mIGEgcHJldmlvdXMgYWdncmVnYXRpb24gYmxvY2spLiAgSWYgcmF0ZQotCSAqICAgICAgICAgICAgICAgICAgIHNjYWxpbmcgaXMgdXNlZCwgcmV0cnkgY291bnQgaW5kaWNhdGVzIHRoZSByYXRlCi0JICogICAgICAgICAgICAgICAgICAgdGFibGUgZW50cnkgdXNlZCBmb3IgYWxsIGZyYW1lcyBpbiB0aGUgbmV3IGFnZy4KLQkgKiAgICAgICAgICAgMzEtMTY6ICBTZXF1ZW5jZSAjIGZvciB0aGlzIGZyYW1lJ3MgVHggY21kIChub3QgU1NOISkKLQkgKi8KLQl1bmlvbiB7Ci0JCV9fbGUzMiBzdGF0dXM7Ci0JCXN0cnVjdCBhZ2dfdHhfc3RhdHVzIGFnZ19zdGF0dXNbMF07IC8qIGZvciBlYWNoIGFnZyBmcmFtZSAqLwotCX0gdTsKLX0gX19wYWNrZWQ7Ci0KIC8qCiAgKiBkZWZpbml0aW9ucyBmb3IgaW5pdGlhbCByYXRlIGluZGV4IGZpZWxkCiAgKiBiaXRzIFszOjBdIGluaXRpYWwgcmF0ZSBpbmRleApAQCAtMjAzMCw1MiArMTU2Niw4IEBACiAvKgogICogUkVQTFlfVFhfUFdSX1RBQkxFX0NNRCA9IDB4OTcgKGNvbW1hbmQsIGhhcyBzaW1wbGUgZ2VuZXJpYyByZXNwb25zZSkKICAqCi0gKiBTZWUgZGV0YWlscyB1bmRlciAiVFhQT1dFUiIgaW4gaXdsLTQ5NjUtaHcuaC4KICAqLwogCi1zdHJ1Y3QgaXdsMzk0NV90eHBvd2VydGFibGVfY21kIHsKLQl1OCBiYW5kOwkJLyogMDogNSBHSHosIDE6IDIuNCBHSHogKi8KLQl1OCByZXNlcnZlZDsKLQlfX2xlMTYgY2hhbm5lbDsKLQlzdHJ1Y3QgaXdsMzk0NV9wb3dlcl9wZXJfcmF0ZSBwb3dlcltJV0xfTUFYX1JBVEVTXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBpd2w0OTY1X3R4cG93ZXJ0YWJsZV9jbWQgewotCXU4IGJhbmQ7CQkvKiAwOiA1IEdIeiwgMTogMi40IEdIeiAqLwotCXU4IHJlc2VydmVkOwotCV9fbGUxNiBjaGFubmVsOwotCXN0cnVjdCBpd2w0OTY1X3R4X3Bvd2VyX2RiIHR4X3Bvd2VyOwotfSBfX3BhY2tlZDsKLQotCi0vKioKLSAqIHN0cnVjdCBpd2wzOTQ1X3JhdGVfc2NhbGluZ19jbWQgLSBSYXRlIFNjYWxpbmcgQ29tbWFuZCAmIFJlc3BvbnNlCi0gKgotICogUkVQTFlfUkFURV9TQ0FMRSA9IDB4NDcgKGNvbW1hbmQsIGhhcyBzaW1wbGUgZ2VuZXJpYyByZXNwb25zZSkKLSAqCi0gKiBOT1RFOiBUaGUgdGFibGUgb2YgcmF0ZXMgcGFzc2VkIHRvIHRoZSB1Q29kZSB2aWEgdGhlCi0gKiBSQVRFX1NDQUxFIGNvbW1hbmQgc2V0cyB1cCB0aGUgY29ycmVzcG9uZGluZyBvcmRlciBvZgotICogcmF0ZXMgdXNlZCBmb3IgYWxsIHJlbGF0ZWQgY29tbWFuZHMsIGluY2x1ZGluZyByYXRlCi0gKiBtYXNrcywgZXRjLgotICoKLSAqIEZvciBleGFtcGxlLCBpZiB5b3Ugc2V0IDlNQiAoUExDUCAweDBmKSBhcyB0aGUgZmlyc3QKLSAqIHJhdGUgaW4gdGhlIHJhdGUgdGFibGUsIHRoZSBiaXQgbWFzayBmb3IgdGhhdCByYXRlCi0gKiB3aGVuIHBhc3NlZCB0aHJvdWdoIG9mZG1fYmFzaWNfcmF0ZXMgb24gdGhlIFJFUExZX1JYT04KLSAqIGNvbW1hbmQgd291bGQgYmUgYml0IDAgKDEgPDwgMCkKLSAqLwotc3RydWN0IGl3bDM5NDVfcmF0ZV9zY2FsaW5nX2luZm8gewotCV9fbGUxNiByYXRlX25fZmxhZ3M7Ci0JdTggdHJ5X2NudDsKLQl1OCBuZXh0X3JhdGVfaW5kZXg7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfY21kIHsKLQl1OCB0YWJsZV9pZDsKLQl1OCByZXNlcnZlZFszXTsKLQlzdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfaW5mbyB0YWJsZVtJV0xfTUFYX1JBVEVTXTsKLX0gX19wYWNrZWQ7Ci0KLQogLypSU19ORVdfQVBJOiBvbmx5IFRMQ19SVFMgcmVtYWlucyBhbmQgbW92ZWQgdG8gYml0IDAgKi8KICNkZWZpbmUgIExJTktfUVVBTF9GTEFHU19TRVRfU1RBX1RMQ19SVFNfTVNLCSgxIDw8IDApCiAKQEAgLTIxMzAsNyArMTYyMiw3IEBACiAjZGVmaW5lIExJTktfUVVBTF9BR0dfRElTQUJMRV9TVEFSVF9NQVgJKDI1NSkKICNkZWZpbmUgTElOS19RVUFMX0FHR19ESVNBQkxFX1NUQVJUX01JTgkoMCkKIAotI2RlZmluZSBMSU5LX1FVQUxfQUdHX0ZSQU1FX0xJTUlUX0RFRgkoMzEpCisjZGVmaW5lIExJTktfUVVBTF9BR0dfRlJBTUVfTElNSVRfREVGCSg2MykKICNkZWZpbmUgTElOS19RVUFMX0FHR19GUkFNRV9MSU1JVF9NQVgJKDYzKQogI2RlZmluZSBMSU5LX1FVQUxfQUdHX0ZSQU1FX0xJTUlUX01JTgkoMCkKIApAQCAtMjY5NiwxNCArMjE4OCw2IEBACiAjZGVmaW5lIElXTF9QT1dFUl9CVF9TQ09fRU5BCQkJY3B1X3RvX2xlMTYoQklUKDgpKQogI2RlZmluZSBJV0xfUE9XRVJfQURWQU5DRV9QTV9FTkFfTVNLCQljcHVfdG9fbGUxNihCSVQoOSkpCiAKLXN0cnVjdCBpd2wzOTQ1X3Bvd2VydGFibGVfY21kIHsKLQlfX2xlMTYgZmxhZ3M7Ci0JdTggcmVzZXJ2ZWRbMl07Ci0JX19sZTMyIHJ4X2RhdGFfdGltZW91dDsKLQlfX2xlMzIgdHhfZGF0YV90aW1lb3V0OwotCV9fbGUzMiBzbGVlcF9pbnRlcnZhbFtJV0xfUE9XRVJfVkVDX1NJWkVdOwotfSBfX3BhY2tlZDsKLQogc3RydWN0IGl3bF9wb3dlcnRhYmxlX2NtZCB7CiAJX19sZTE2IGZsYWdzOwogCXU4IGtlZXBfYWxpdmVfc2Vjb25kczsJCS8qIDM5NDUgcmVzZXJ2ZWQgKi8KQEAgLTI4MDYsMjUgKzIyOTAsNiBAQAogICogICAgIGFjdGl2ZV9kd2VsbCA8IG1heF9vdXRfdGltZQogICovCiAKLS8qIEZJWE1FOiByZW5hbWUgdG8gQVAxLCByZW1vdmUgdHBjICovCi1zdHJ1Y3QgaXdsMzk0NV9zY2FuX2NoYW5uZWwgewotCS8qCi0JICogdHlwZSBpcyBkZWZpbmVkIGFzOgotCSAqIDA6MCAxID0gYWN0aXZlLCAwID0gcGFzc2l2ZQotCSAqIDE6NCBTU0lEIGRpcmVjdCBiaXQgbWFwOyBpZiBhIGJpdCBpcyBzZXQsIHRoZW4gY29ycmVzcG9uZGluZwotCSAqICAgICBTU0lEIElFIGlzIHRyYW5zbWl0dGVkIGluIHByb2JlIHJlcXVlc3QuCi0JICogNTo3IHJlc2VydmVkCi0JICovCi0JdTggdHlwZTsKLQl1OCBjaGFubmVsOwkvKiBiYW5kIGlzIHNlbGVjdGVkIGJ5IGl3bDM5NDVfc2Nhbl9jbWQgImZsYWdzIiBmaWVsZCAqLwotCXN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHRwYzsKLQlfX2xlMTYgYWN0aXZlX2R3ZWxsOwkvKiBpbiAxMDI0LXVTZWMgVFUgKHRpbWUgdW5pdHMpLCB0eXAgNS01MCAqLwotCV9fbGUxNiBwYXNzaXZlX2R3ZWxsOwkvKiBpbiAxMDI0LXVTZWMgVFUgKHRpbWUgdW5pdHMpLCB0eXAgMjAtNTAwICovCi19IF9fcGFja2VkOwotCi0vKiBzZXQgbnVtYmVyIG9mIGRpcmVjdCBwcm9iZXMgdTggdHlwZSAqLwotI2RlZmluZSBJV0wzOV9TQ0FOX1BST0JFX01BU0sobikgKChCSVQobikgfCAoQklUKG4pIC0gQklUKDEpKSkpCi0KIHN0cnVjdCBpd2xfc2Nhbl9jaGFubmVsIHsKIAkvKgogCSAqIHR5cGUgaXMgZGVmaW5lZCBhczoKQEAgLTI5MjAsNTAgKzIzODUsNiBAQAogICogc3RydWN0IGl3bF9zY2FuX2NoYW5uZWwuCiAgKi8KIAotc3RydWN0IGl3bDM5NDVfc2Nhbl9jbWQgewotCV9fbGUxNiBsZW47Ci0JdTggcmVzZXJ2ZWQwOwotCXU4IGNoYW5uZWxfY291bnQ7CS8qICMgY2hhbm5lbHMgaW4gY2hhbm5lbCBsaXN0ICovCi0JX19sZTE2IHF1aWV0X3RpbWU7CS8qIGR3ZWxsIG9ubHkgdGhpcyAjIG1pbGxpc2VjcyBvbiBxdWlldCBjaGFubmVsCi0JCQkJICogKG9ubHkgZm9yIGFjdGl2ZSBzY2FuKSAqLwotCV9fbGUxNiBxdWlldF9wbGNwX3RoOwkvKiBxdWlldCBjaG5sIGlzIDwgdGhpcyAjIHBrdHMgKHR5cC4gMSkgKi8KLQlfX2xlMTYgZ29vZF9DUkNfdGg7CS8qIHBhc3NpdmUgLT4gYWN0aXZlIHByb21vdGlvbiB0aHJlc2hvbGQgKi8KLQlfX2xlMTYgcmVzZXJ2ZWQxOwotCV9fbGUzMiBtYXhfb3V0X3RpbWU7CS8qIG1heCB1c2VjIHRvIGJlIGF3YXkgZnJvbSBhc3NvY2lhdGVkIChzZXJ2aWNlKQotCQkJCSAqIGNoYW5uZWwgKi8KLQlfX2xlMzIgc3VzcGVuZF90aW1lOwkvKiBwYXVzZSBzY2FuIHRoaXMgbG9uZyAoaW4gImV4dGVuZGVkIGJlYWNvbgotCQkJCSAqIGZvcm1hdCIpIHdoZW4gcmV0dXJuaW5nIHRvIHNlcnZpY2UgY2hhbm5lbDoKLQkJCQkgKiAzOTQ1OyAzMToyNCAjIGJlYWNvbnMsIDE5OjAgYWRkaXRpb25hbCB1c2VjLAotCQkJCSAqIDQ5NjU7IDMxOjIyICMgYmVhY29ucywgMjE6MCBhZGRpdGlvbmFsIHVzZWMuCi0JCQkJICovCi0JX19sZTMyIGZsYWdzOwkJLyogUlhPTl9GTEdfKiAqLwotCV9fbGUzMiBmaWx0ZXJfZmxhZ3M7CS8qIFJYT05fRklMVEVSXyogKi8KLQotCS8qIEZvciBhY3RpdmUgc2NhbnMgKHNldCB0byBhbGwtMHMgZm9yIHBhc3NpdmUgc2NhbnMpLgotCSAqIERvZXMgbm90IGluY2x1ZGUgcGF5bG9hZC4gIE11c3Qgc3BlY2lmeSBUeCByYXRlOyBubyByYXRlIHNjYWxpbmcuICovCi0Jc3RydWN0IGl3bDM5NDVfdHhfY21kIHR4X2NtZDsKLQotCS8qIEZvciBkaXJlY3RlZCBhY3RpdmUgc2NhbnMgKHNldCB0byBhbGwtMHMgb3RoZXJ3aXNlKSAqLwotCXN0cnVjdCBpd2xfc3NpZF9pZSBkaXJlY3Rfc2NhbltQUk9CRV9PUFRJT05fTUFYXzM5NDVdOwotCi0JLyoKLQkgKiBQcm9iZSByZXF1ZXN0IGZyYW1lLCBmb2xsb3dlZCBieSBjaGFubmVsIGxpc3QuCi0JICoKLQkgKiBTaXplIG9mIHByb2JlIHJlcXVlc3QgZnJhbWUgaXMgc3BlY2lmaWVkIGJ5IGJ5dGUgY291bnQgaW4gdHhfY21kLgotCSAqIENoYW5uZWwgbGlzdCBmb2xsb3dzIGltbWVkaWF0ZWx5IGFmdGVyIHByb2JlIHJlcXVlc3QgZnJhbWUuCi0JICogTnVtYmVyIG9mIGNoYW5uZWxzIGluIGxpc3QgaXMgc3BlY2lmaWVkIGJ5IGNoYW5uZWxfY291bnQuCi0JICogRWFjaCBjaGFubmVsIGluIGxpc3QgaXMgb2YgdHlwZToKLQkgKgotCSAqIHN0cnVjdCBpd2wzOTQ1X3NjYW5fY2hhbm5lbCBjaGFubmVsc1swXTsKLQkgKgotCSAqIE5PVEU6ICBPbmx5IG9uZSBiYW5kIG9mIGNoYW5uZWxzIGNhbiBiZSBzY2FubmVkIHBlciBwYXNzLiAgWW91Ci0JICogbXVzdCBub3QgbWl4IDIuNEdIeiBjaGFubmVscyBhbmQgNS4yR0h6IGNoYW5uZWxzLCBhbmQgeW91IG11c3Qgd2FpdAotCSAqIGZvciBvbmUgc2NhbiB0byBjb21wbGV0ZSAoaS5lLiByZWNlaXZlIFNDQU5fQ09NUExFVEVfTk9USUZJQ0FUSU9OKQotCSAqIGJlZm9yZSByZXF1ZXN0aW5nIGFub3RoZXIgc2Nhbi4KLQkgKi8KLQl1OCBkYXRhWzBdOwotfSBfX3BhY2tlZDsKLQogZW51bSBpd2xfc2Nhbl9mbGFncyB7CiAJLyogQklUKDApIGN1cnJlbnRseSB1bnVzZWQgKi8KIAlJV0xfU0NBTl9GTEFHU19BQ1RJT05fRlJBTUVfVFgJPSBCSVQoMSksCkBAIC0zMDkwLDIwICsyNTExLDYgQEAKICAqIEJFQUNPTl9OT1RJRklDQVRJT04gPSAweDkwIChub3RpZmljYXRpb24gb25seSwgbm90IGEgY29tbWFuZCkKICAqLwogCi1zdHJ1Y3QgaXdsMzk0NV9iZWFjb25fbm90aWYgewotCXN0cnVjdCBpd2wzOTQ1X3R4X3Jlc3AgYmVhY29uX25vdGlmeV9oZHI7Ci0JX19sZTMyIGxvd190c2Y7Ci0JX19sZTMyIGhpZ2hfdHNmOwotCV9fbGUzMiBpYnNzX21ncl9zdGF0dXM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaXdsNDk2NV9iZWFjb25fbm90aWYgewotCXN0cnVjdCBpd2w0OTY1X3R4X3Jlc3AgYmVhY29uX25vdGlmeV9oZHI7Ci0JX19sZTMyIGxvd190c2Y7Ci0JX19sZTMyIGhpZ2hfdHNmOwotCV9fbGUzMiBpYnNzX21ncl9zdGF0dXM7Ci19IF9fcGFja2VkOwotCiBzdHJ1Y3QgaXdsYWduX2JlYWNvbl9ub3RpZiB7CiAJc3RydWN0IGl3bGFnbl90eF9yZXNwIGJlYWNvbl9ub3RpZnlfaGRyOwogCV9fbGUzMiBsb3dfdHNmOwpAQCAtMzExNSwxNCArMjUyMiw2IEBACiAgKiBSRVBMWV9UWF9CRUFDT04gPSAweDkxIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCiAgKi8KIAotc3RydWN0IGl3bDM5NDVfdHhfYmVhY29uX2NtZCB7Ci0Jc3RydWN0IGl3bDM5NDVfdHhfY21kIHR4OwotCV9fbGUxNiB0aW1faWR4OwotCXU4IHRpbV9zaXplOwotCXU4IHJlc2VydmVkMTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciBmcmFtZVswXTsJLyogYmVhY29uIGZyYW1lICovCi19IF9fcGFja2VkOwotCiBzdHJ1Y3QgaXdsX3R4X2JlYWNvbl9jbWQgewogCXN0cnVjdCBpd2xfdHhfY21kIHR4OwogCV9fbGUxNiB0aW1faWR4OwpAQCAtMzE1OSw1MyArMjU1OCw2IEBACiAKIC8qIHN0YXRpc3RpY3MgY29tbWFuZCByZXNwb25zZSAqLwogCi1zdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19yeF9waHkgewotCV9fbGUzMiBpbmFfY250OwotCV9fbGUzMiBmaW5hX2NudDsKLQlfX2xlMzIgcGxjcF9lcnI7Ci0JX19sZTMyIGNyYzMyX2VycjsKLQlfX2xlMzIgb3ZlcnJ1bl9lcnI7Ci0JX19sZTMyIGVhcmx5X292ZXJydW5fZXJyOwotCV9fbGUzMiBjcmMzMl9nb29kOwotCV9fbGUzMiBmYWxzZV9hbGFybV9jbnQ7Ci0JX19sZTMyIGZpbmFfc3luY19lcnJfY250OwotCV9fbGUzMiBzZmRfdGltZW91dDsKLQlfX2xlMzIgZmluYV90aW1lb3V0OwotCV9fbGUzMiB1bnJlc3BvbmRlZF9ydHM7Ci0JX19sZTMyIHJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuOwotCV9fbGUzMiBzZW50X2Fja19jbnQ7Ci0JX19sZTMyIHNlbnRfY3RzX2NudDsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBpd2wzOV9zdGF0aXN0aWNzX3J4X25vbl9waHkgewotCV9fbGUzMiBib2d1c19jdHM7CS8qIENUUyByZWNlaXZlZCB3aGVuIG5vdCBleHBlY3RpbmcgQ1RTICovCi0JX19sZTMyIGJvZ3VzX2FjazsJLyogQUNLIHJlY2VpdmVkIHdoZW4gbm90IGV4cGVjdGluZyBBQ0sgKi8KLQlfX2xlMzIgbm9uX2Jzc2lkX2ZyYW1lczsJLyogbnVtYmVyIG9mIGZyYW1lcyB3aXRoIEJTU0lEIHRoYXQKLQkJCQkJICogZG9lc24ndCBiZWxvbmcgdG8gdGhlIFNUQSBCU1NJRCAqLwotCV9fbGUzMiBmaWx0ZXJlZF9mcmFtZXM7CS8qIGNvdW50IGZyYW1lcyB0aGF0IHdlcmUgZHVtcGVkIGluIHRoZQotCQkJCSAqIGZpbHRlcmluZyBwcm9jZXNzICovCi0JX19sZTMyIG5vbl9jaGFubmVsX2JlYWNvbnM7CS8qIGJlYWNvbnMgd2l0aCBvdXIgYnNzIGlkIGJ1dCBub3Qgb24KLQkJCQkJICogb3VyIHNlcnZpbmcgY2hhbm5lbCAqLwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfcnggewotCXN0cnVjdCBpd2wzOV9zdGF0aXN0aWNzX3J4X3BoeSBvZmRtOwotCXN0cnVjdCBpd2wzOV9zdGF0aXN0aWNzX3J4X3BoeSBjY2s7Ci0Jc3RydWN0IGl3bDM5X3N0YXRpc3RpY3Nfcnhfbm9uX3BoeSBnZW5lcmFsOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfdHggewotCV9fbGUzMiBwcmVhbWJsZV9jbnQ7Ci0JX19sZTMyIHJ4X2RldGVjdGVkX2NudDsKLQlfX2xlMzIgYnRfcHJpb19kZWZlcl9jbnQ7Ci0JX19sZTMyIGJ0X3ByaW9fa2lsbF9jbnQ7Ci0JX19sZTMyIGZld19ieXRlc19jbnQ7Ci0JX19sZTMyIGN0c190aW1lb3V0OwotCV9fbGUzMiBhY2tfdGltZW91dDsKLQlfX2xlMzIgZXhwZWN0ZWRfYWNrX2NudDsKLQlfX2xlMzIgYWN0dWFsX2Fja19jbnQ7Ci19IF9fcGFja2VkOwotCiBzdHJ1Y3Qgc3RhdGlzdGljc19kYmcgewogCV9fbGUzMiBidXJzdF9jaGVjazsKIAlfX2xlMzIgYnVyc3RfY291bnQ7CkBAIC0zMjEzLDIzICsyNTY1LDYgQEAKIAlfX2xlMzIgcmVzZXJ2ZWRbM107CiB9IF9fcGFja2VkOwogCi1zdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19kaXYgewotCV9fbGUzMiB0eF9vbl9hOwotCV9fbGUzMiB0eF9vbl9iOwotCV9fbGUzMiBleGVjX3RpbWU7Ci0JX19sZTMyIHByb2JlX3RpbWU7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19nZW5lcmFsIHsKLQlfX2xlMzIgdGVtcGVyYXR1cmU7Ci0Jc3RydWN0IHN0YXRpc3RpY3NfZGJnIGRiZzsKLQlfX2xlMzIgc2xlZXBfdGltZTsKLQlfX2xlMzIgc2xvdHNfb3V0OwotCV9fbGUzMiBzbG90c19pZGxlOwotCV9fbGUzMiB0dGxfdGltZXN0YW1wOwotCXN0cnVjdCBpd2wzOV9zdGF0aXN0aWNzX2RpdiBkaXY7Ci19IF9fcGFja2VkOwotCiBzdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkgewogCV9fbGUzMiBpbmFfY250OwogCV9fbGUzMiBmaW5hX2NudDsKQEAgLTM0NzEsMTMgKzI4MDYsNiBAQAogI2RlZmluZSBTVEFUSVNUSUNTX1JFUExZX0ZMR19CQU5EXzI0R19NU0sgICAgICAgICBjcHVfdG9fbGUzMigweDIpCiAjZGVmaW5lIFNUQVRJU1RJQ1NfUkVQTFlfRkxHX0hUNDBfTU9ERV9NU0sgICAgICAgIGNwdV90b19sZTMyKDB4OCkKIAotc3RydWN0IGl3bDM5NDVfbm90aWZfc3RhdGlzdGljcyB7Ci0JX19sZTMyIGZsYWc7Ci0Jc3RydWN0IGl3bDM5X3N0YXRpc3RpY3Nfcnggcng7Ci0Jc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfdHggdHg7Ci0Jc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfZ2VuZXJhbCBnZW5lcmFsOwotfSBfX3BhY2tlZDsKLQogc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzIHsKIAlfX2xlMzIgZmxhZzsKIAlzdHJ1Y3Qgc3RhdGlzdGljc19yeCByeDsKQEAgLTQ0NTEsMTAgKzM3NzksNiBAQAogCV9fbGUzMiBsZW5fbl9mbGFnczsKIAlzdHJ1Y3QgaXdsX2NtZF9oZWFkZXIgaGRyOwogCXVuaW9uIHsKLQkJc3RydWN0IGl3bDM5NDVfcnhfZnJhbWUgcnhfZnJhbWU7Ci0JCXN0cnVjdCBpd2wzOTQ1X3R4X3Jlc3AgdHhfcmVzcDsKLQkJc3RydWN0IGl3bDM5NDVfYmVhY29uX25vdGlmIGJlYWNvbl9zdGF0dXM7Ci0KIAkJc3RydWN0IGl3bF9hbGl2ZV9yZXNwIGFsaXZlX2ZyYW1lOwogCQlzdHJ1Y3QgaXdsX3NwZWN0cnVtX25vdGlmaWNhdGlvbiBzcGVjdHJ1bV9ub3RpZjsKIAkJc3RydWN0IGl3bF9jc2Ffbm90aWZpY2F0aW9uIGNzYV9ub3RpZjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYwppbmRleCBiYWZiZTU3Li40NjUzZGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCkBAIC0yLDcgKzIsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiaXdsLXBvd2VyLmgiCiAjaW5jbHVkZSAiaXdsLXN0YS5oIgogI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCisjaW5jbHVkZSAiaXdsLWFnbi5oIgogCiAKIC8qCkBAIC02NywzMCArNjgsNiBAQAogCiBjb25zdCB1OCBpd2xfYmNhc3RfYWRkcltFVEhfQUxFTl0gPSB7IDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgfTsKIAotCi0vKiBUaGlzIGZ1bmN0aW9uIGJvdGggYWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyBodyBhbmQgcHJpdi4gKi8KLXN0cnVjdCBpZWVlODAyMTFfaHcgKml3bF9hbGxvY19hbGwoc3RydWN0IGl3bF9jZmcgKmNmZykKLXsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXY7Ci0JLyogbWFjODAyMTEgYWxsb2NhdGVzIG1lbW9yeSBmb3IgdGhpcyBkZXZpY2UgaW5zdGFuY2UsIGluY2x1ZGluZwotCSAqICAgc3BhY2UgZm9yIHRoaXMgZHJpdmVyJ3MgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKLQotCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZihzdHJ1Y3QgaXdsX3ByaXYpLAotCQkJCWNmZy0+b3BzLT5pZWVlODAyMTFfb3BzKTsKLQlpZiAoaHcgPT0gTlVMTCkgewotCQlwcl9lcnIoIiVzOiBDYW4gbm90IGFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlXG4iLAotCQkgICAgICAgY2ZnLT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcHJpdiA9IGh3LT5wcml2OwotCXByaXYtPmh3ID0gaHc7Ci0KLW91dDoKLQlyZXR1cm4gaHc7Ci19Ci0KICNkZWZpbmUgTUFYX0JJVF9SQVRFXzQwX01IWiAxNTAgLyogTWJwcyAqLwogI2RlZmluZSBNQVhfQklUX1JBVEVfMjBfTUhaIDcyIC8qIE1icHMgKi8KIHN0YXRpYyB2b2lkIGl3bGNvcmVfaW5pdF9odF9od19jYXBhYihjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCkBAIC0xMTgsNyArOTUsNyBAQAogCQltYXhfYml0X3JhdGUgPSBNQVhfQklUX1JBVEVfNDBfTUhaOwogCX0KIAotCWlmIChwcml2LT5jZmctPm1vZF9wYXJhbXMtPmFtc2R1X3NpemVfOEspCisJaWYgKGl3bGFnbl9tb2RfcGFyYW1zLmFtc2R1X3NpemVfOEspCiAJCWh0X2luZm8tPmNhcCB8PSBJRUVFODAyMTFfSFRfQ0FQX01BWF9BTVNEVTsKIAogCWh0X2luZm8tPmFtcGR1X2ZhY3RvciA9IENGR19IVF9SWF9BTVBEVV9GQUNUT1JfREVGOwpAQCAtMTU5LDYgKzEzNiw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpnZW9fY2g7CiAJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlczsKIAlpbnQgaSA9IDA7CisJczggbWF4X3R4X3Bvd2VyID0gSVdMQUdOX1RYX1BPV0VSX1RBUkdFVF9QT1dFUl9NSU47CiAKIAlpZiAocHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0ubl9iaXRyYXRlcyB8fAogCSAgICBwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2JpdHJhdGVzKSB7CkBAIC0yMzIsOCArMjEwLDggQEAKIAogCQkJZ2VvX2NoLT5mbGFncyB8PSBjaC0+aHQ0MF9leHRlbnNpb25fY2hhbm5lbDsKIAotCQkJaWYgKGNoLT5tYXhfcG93ZXJfYXZnID4gcHJpdi0+dHhfcG93ZXJfZGV2aWNlX2xtdCkKLQkJCQlwcml2LT50eF9wb3dlcl9kZXZpY2VfbG10ID0gY2gtPm1heF9wb3dlcl9hdmc7CisJCQlpZiAoY2gtPm1heF9wb3dlcl9hdmcgPiBtYXhfdHhfcG93ZXIpCisJCQkJbWF4X3R4X3Bvd2VyID0gY2gtPm1heF9wb3dlcl9hdmc7CiAJCX0gZWxzZSB7CiAJCQlnZW9fY2gtPmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEOwogCQl9CkBAIC0yNDYsNiArMjI0LDEwIEBACiAJCQkJIGdlb19jaC0+ZmxhZ3MpOwogCX0KIAorCXByaXYtPnR4X3Bvd2VyX2RldmljZV9sbXQgPSBtYXhfdHhfcG93ZXI7CisJcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPSBtYXhfdHhfcG93ZXI7CisJcHJpdi0+dHhfcG93ZXJfbmV4dCA9IG1heF90eF9wb3dlcjsKKwogCWlmICgocHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0ubl9jaGFubmVscyA9PSAwKSAmJgogCSAgICAgcHJpdi0+Y2ZnLT5za3UgJiBJV0xfU0tVX0EpIHsKIAkJSVdMX0lORk8ocHJpdiwgIkluY29ycmVjdGx5IGRldGVjdGVkIEJHIGNhcmQgYXMgQUJHLiAiCkBAIC00MzQsNzIgKzQxNiw3MiBAQAogaW50IGl3bF9jaGVja19yeG9uX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHgpCiB7CiAJc3RydWN0IGl3bF9yeG9uX2NtZCAqcnhvbiA9ICZjdHgtPnN0YWdpbmc7Ci0JYm9vbCBlcnJvciA9IGZhbHNlOworCXUzMiBlcnJvcnMgPSAwOwogCiAJaWYgKHJ4b24tPmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKSB7CiAJCWlmIChyeG9uLT5mbGFncyAmIFJYT05fRkxHX1RHSl9OQVJST1dfQkFORF9NU0spIHsKIAkJCUlXTF9XQVJOKHByaXYsICJjaGVjayAyLjRHOiB3cm9uZyBuYXJyb3dcbiIpOwotCQkJZXJyb3IgPSB0cnVlOworCQkJZXJyb3JzIHw9IEJJVCgwKTsKIAkJfQogCQlpZiAocnhvbi0+ZmxhZ3MgJiBSWE9OX0ZMR19SQURBUl9ERVRFQ1RfTVNLKSB7CiAJCQlJV0xfV0FSTihwcml2LCAiY2hlY2sgMi40Rzogd3JvbmcgcmFkYXJcbiIpOwotCQkJZXJyb3IgPSB0cnVlOworCQkJZXJyb3JzIHw9IEJJVCgxKTsKIAkJfQogCX0gZWxzZSB7CiAJCWlmICghKHJ4b24tPmZsYWdzICYgUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0spKSB7CiAJCQlJV0xfV0FSTihwcml2LCAiY2hlY2sgNS4yRzogbm90IHNob3J0IHNsb3QhXG4iKTsKLQkJCWVycm9yID0gdHJ1ZTsKKwkJCWVycm9ycyB8PSBCSVQoMik7CiAJCX0KIAkJaWYgKHJ4b24tPmZsYWdzICYgUlhPTl9GTEdfQ0NLX01TSykgewogCQkJSVdMX1dBUk4ocHJpdiwgImNoZWNrIDUuMkc6IENDSyFcbiIpOwotCQkJZXJyb3IgPSB0cnVlOworCQkJZXJyb3JzIHw9IEJJVCgzKTsKIAkJfQogCX0KIAlpZiAoKHJ4b24tPm5vZGVfYWRkclswXSB8IHJ4b24tPmJzc2lkX2FkZHJbMF0pICYgMHgxKSB7CiAJCUlXTF9XQVJOKHByaXYsICJtYWMvYnNzaWQgbWNhc3QhXG4iKTsKLQkJZXJyb3IgPSB0cnVlOworCQllcnJvcnMgfD0gQklUKDQpOwogCX0KIAogCS8qIG1ha2Ugc3VyZSBiYXNpYyByYXRlcyA2TWJwcyBhbmQgMU1icHMgYXJlIHN1cHBvcnRlZCAqLwogCWlmICgocnhvbi0+b2ZkbV9iYXNpY19yYXRlcyAmIElXTF9SQVRFXzZNX01BU0spID09IDAgJiYKIAkgICAgKHJ4b24tPmNja19iYXNpY19yYXRlcyAmIElXTF9SQVRFXzFNX01BU0spID09IDApIHsKIAkJSVdMX1dBUk4ocHJpdiwgIm5laXRoZXIgMSBub3IgNiBhcmUgYmFzaWNcbiIpOwotCQllcnJvciA9IHRydWU7CisJCWVycm9ycyB8PSBCSVQoNSk7CiAJfQogCiAJaWYgKGxlMTZfdG9fY3B1KHJ4b24tPmFzc29jX2lkKSA+IDIwMDcpIHsKIAkJSVdMX1dBUk4ocHJpdiwgImFpZCA+IDIwMDdcbiIpOwotCQllcnJvciA9IHRydWU7CisJCWVycm9ycyB8PSBCSVQoNik7CiAJfQogCiAJaWYgKChyeG9uLT5mbGFncyAmIChSWE9OX0ZMR19DQ0tfTVNLIHwgUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0spKQogCQkJPT0gKFJYT05fRkxHX0NDS19NU0sgfCBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSykpIHsKIAkJSVdMX1dBUk4ocHJpdiwgIkNDSyBhbmQgc2hvcnQgc2xvdFxuIik7Ci0JCWVycm9yID0gdHJ1ZTsKKwkJZXJyb3JzIHw9IEJJVCg3KTsKIAl9CiAKIAlpZiAoKHJ4b24tPmZsYWdzICYgKFJYT05fRkxHX0NDS19NU0sgfCBSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0spKQogCQkJPT0gKFJYT05fRkxHX0NDS19NU0sgfCBSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0spKSB7CiAJCUlXTF9XQVJOKHByaXYsICJDQ0sgYW5kIGF1dG8gZGV0ZWN0Iik7Ci0JCWVycm9yID0gdHJ1ZTsKKwkJZXJyb3JzIHw9IEJJVCg4KTsKIAl9CiAKIAlpZiAoKHJ4b24tPmZsYWdzICYgKFJYT05fRkxHX0FVVE9fREVURUNUX01TSyB8CiAJCQkgICAgUlhPTl9GTEdfVEdHX1BST1RFQ1RfTVNLKSkgPT0KIAkJCSAgICBSWE9OX0ZMR19UR0dfUFJPVEVDVF9NU0spIHsKIAkJSVdMX1dBUk4ocHJpdiwgIlRHZyBidXQgbm8gYXV0by1kZXRlY3RcbiIpOwotCQllcnJvciA9IHRydWU7CisJCWVycm9ycyB8PSBCSVQoOSk7CiAJfQogCi0JaWYgKGVycm9yKQotCQlJV0xfV0FSTihwcml2LCAiVHVuaW5nIHRvIGNoYW5uZWwgJWRcbiIsCi0JCQkgICAgbGUxNl90b19jcHUocnhvbi0+Y2hhbm5lbCkpOwotCi0JaWYgKGVycm9yKSB7Ci0JCUlXTF9FUlIocHJpdiwgIkludmFsaWQgUlhPTlxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCWlmIChyeG9uLT5jaGFubmVsID09IDApIHsKKwkJSVdMX1dBUk4ocHJpdiwgInplcm8gY2hhbm5lbCBpcyBpbnZhbGlkXG4iKTsKKwkJZXJyb3JzIHw9IEJJVCgxMCk7CiAJfQotCXJldHVybiAwOworCisJV0FSTihlcnJvcnMsICJJbnZhbGlkIFJYT04gKCUjeCksIGNoYW5uZWwgJWQiLAorCSAgICAgZXJyb3JzLCBsZTE2X3RvX2NwdShyeG9uLT5jaGFubmVsKSk7CisKKwlyZXR1cm4gZXJyb3JzID8gLUVJTlZBTCA6IDA7CiB9CiAKIC8qKgpAQCAtODkwLDEwICs4NzIsMjEgQEAKIAlJV0xfREVCVUdfUkFESU8ocHJpdiwgInUxNiBhc3NvY19pZDogMHgleFxuIiwgbGUxNl90b19jcHUocnhvbi0+YXNzb2NfaWQpKTsKIH0KICNlbmRpZgotLyoqCi0gKiBpd2xfaXJxX2hhbmRsZV9lcnJvciAtIGNhbGxlZCBmb3IgSFcgb3IgU1cgZXJyb3IgaW50ZXJydXB0IGZyb20gY2FyZAotICovCi12b2lkIGl3bF9pcnFfaGFuZGxlX2Vycm9yKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKKworc3RhdGljIHZvaWQgaXdsYWduX2Fib3J0X25vdGlmaWNhdGlvbl93YWl0cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaXdsX25vdGlmaWNhdGlvbl93YWl0ICp3YWl0X2VudHJ5OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPl9hZ24ubm90aWZfd2FpdF9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3YWl0X2VudHJ5LCAmcHJpdi0+X2Fnbi5ub3RpZl93YWl0cywgbGlzdCkKKwkJd2FpdF9lbnRyeS0+YWJvcnRlZCA9IHRydWU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+X2Fnbi5ub3RpZl93YWl0X2xvY2ssIGZsYWdzKTsKKworCXdha2VfdXBfYWxsKCZwcml2LT5fYWduLm5vdGlmX3dhaXRxKTsKK30KKwordm9pZCBpd2xhZ25fZndfZXJyb3Ioc3RydWN0IGl3bF9wcml2ICpwcml2LCBib29sIG9uZGVtYW5kKQogewogCXVuc2lnbmVkIGludCByZWxvYWRfbXNlYzsKIAl1bnNpZ25lZCBsb25nIHJlbG9hZF9qaWZmaWVzOwpAQCAtOTA0LDE4ICs4OTcsNjQgQEAKIAkvKiBDYW5jZWwgY3VycmVudGx5IHF1ZXVlZCBjb21tYW5kLiAqLwogCWNsZWFyX2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOwogCisJaXdsYWduX2Fib3J0X25vdGlmaWNhdGlvbl93YWl0cyhwcml2KTsKKworCS8qIEtlZXAgdGhlIHJlc3RhcnQgcHJvY2VzcyBmcm9tIHRyeWluZyB0byBzZW5kIGhvc3QKKwkgKiBjb21tYW5kcyBieSBjbGVhcmluZyB0aGUgcmVhZHkgYml0ICovCisJY2xlYXJfYml0KFNUQVRVU19SRUFEWSwgJnByaXYtPnN0YXR1cyk7CisKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CisKKwlpZiAoIW9uZGVtYW5kKSB7CisJCS8qCisJCSAqIElmIGZpcm13YXJlIGtlZXAgcmVsb2FkaW5nLCB0aGVuIGl0IGluZGljYXRlIHNvbWV0aGluZworCQkgKiBzZXJpb3VzIHdyb25nIGFuZCBmaXJtd2FyZSBoYXZpbmcgcHJvYmxlbSB0byByZWNvdmVyCisJCSAqIGZyb20gaXQuIEluc3RlYWQgb2Yga2VlcCB0cnlpbmcgd2hpY2ggd2lsbCBmaWxsIHRoZSBzeXNsb2cKKwkJICogYW5kIGhhbmcgdGhlIHN5c3RlbSwgbGV0J3MganVzdCBzdG9wIGl0CisJCSAqLworCQlyZWxvYWRfamlmZmllcyA9IGppZmZpZXM7CisJCXJlbG9hZF9tc2VjID0gamlmZmllc190b19tc2VjcygobG9uZykgcmVsb2FkX2ppZmZpZXMgLQorCQkJCQkobG9uZykgcHJpdi0+cmVsb2FkX2ppZmZpZXMpOworCQlwcml2LT5yZWxvYWRfamlmZmllcyA9IHJlbG9hZF9qaWZmaWVzOworCQlpZiAocmVsb2FkX21zZWMgPD0gSVdMX01JTl9SRUxPQURfRFVSQVRJT04pIHsKKwkJCXByaXYtPnJlbG9hZF9jb3VudCsrOworCQkJaWYgKHByaXYtPnJlbG9hZF9jb3VudCA+PSBJV0xfTUFYX0NPTlRJTlVFX1JFTE9BRF9DTlQpIHsKKwkJCQlJV0xfRVJSKHByaXYsICJCVUdfT04sIFN0b3AgcmVzdGFydGluZ1xuIik7CisJCQkJcmV0dXJuOworCQkJfQorCQl9IGVsc2UKKwkJCXByaXYtPnJlbG9hZF9jb3VudCA9IDA7CisJfQorCisJaWYgKCF0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkgeworCQlpZiAoaXdsYWduX21vZF9wYXJhbXMucmVzdGFydF9mdykgeworCQkJSVdMX0RFQlVHKHByaXYsIElXTF9ETF9GV19FUlJPUlMsCisJCQkJICAiUmVzdGFydGluZyBhZGFwdGVyIGR1ZSB0byB1Q29kZSBlcnJvci5cbiIpOworCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKKwkJfSBlbHNlCisJCQlJV0xfREVCVUcocHJpdiwgSVdMX0RMX0ZXX0VSUk9SUywKKwkJCQkgICJEZXRlY3RlZCBGVyBlcnJvciwgYnV0IG5vdCByZXN0YXJ0aW5nXG4iKTsKKwl9Cit9CisKKy8qKgorICogaXdsX2lycV9oYW5kbGVfZXJyb3IgLSBjYWxsZWQgZm9yIEhXIG9yIFNXIGVycm9yIGludGVycnVwdCBmcm9tIGNhcmQKKyAqLwordm9pZCBpd2xfaXJxX2hhbmRsZV9lcnJvcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CiAJLyogVy9BIGZvciBXaUZpL1dpTUFYIGNvZXggYW5kIFdpTUFYIG93biB0aGUgUkYgKi8KIAlpZiAocHJpdi0+Y2ZnLT5pbnRlcm5hbF93aW1heF9jb2V4ICYmCiAJICAgICghKGl3bF9yZWFkX3BycGgocHJpdiwgQVBNR19DTEtfQ1RSTF9SRUcpICYKIAkJCUFQTVNfQ0xLX1ZBTF9NUkJfRlVOQ19NT0RFKSB8fAogCSAgICAgKGl3bF9yZWFkX3BycGgocHJpdiwgQVBNR19QU19DVFJMX1JFRykgJgogCQkJQVBNR19QU19DVFJMX1ZBTF9SRVNFVF9SRVEpKSkgewotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CiAJCS8qCi0JCSAqS2VlcCB0aGUgcmVzdGFydCBwcm9jZXNzIGZyb20gdHJ5aW5nIHRvIHNlbmQgaG9zdAotCQkgKiBjb21tYW5kcyBieSBjbGVhcmluZyB0aGUgSU5JVCBzdGF0dXMgYml0CisJCSAqIEtlZXAgdGhlIHJlc3RhcnQgcHJvY2VzcyBmcm9tIHRyeWluZyB0byBzZW5kIGhvc3QKKwkJICogY29tbWFuZHMgYnkgY2xlYXJpbmcgdGhlIHJlYWR5IGJpdC4KIAkJICovCiAJCWNsZWFyX2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpOworCQljbGVhcl9iaXQoU1RBVFVTX0hDTURfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOwogCQlJV0xfRVJSKHByaXYsICJSRiBpcyB1c2VkIGJ5IFdpTUFYXG4iKTsKIAkJcmV0dXJuOwogCX0KQEAgLTkyMyw1MCArOTYyLDE3IEBACiAJSVdMX0VSUihwcml2LCAiTG9hZGVkIGZpcm13YXJlIHZlcnNpb246ICVzXG4iLAogCQlwcml2LT5ody0+d2lwaHktPmZ3X3ZlcnNpb24pOwogCi0JcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZHVtcF9uaWNfZXJyb3JfbG9nKHByaXYpOwotCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5kdW1wX2NzcikKLQkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZHVtcF9jc3IocHJpdik7Ci0JaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPmR1bXBfZmgpCi0JCXByaXYtPmNmZy0+b3BzLT5saWItPmR1bXBfZmgocHJpdiwgTlVMTCwgZmFsc2UpOwotCXByaXYtPmNmZy0+b3BzLT5saWItPmR1bXBfbmljX2V2ZW50X2xvZyhwcml2LCBmYWxzZSwgTlVMTCwgZmFsc2UpOworCWl3bF9kdW1wX25pY19lcnJvcl9sb2cocHJpdik7CisJaXdsX2R1bXBfY3NyKHByaXYpOworCWl3bF9kdW1wX2ZoKHByaXYsIE5VTEwsIGZhbHNlKTsKKwlpd2xfZHVtcF9uaWNfZXZlbnRfbG9nKHByaXYsIGZhbHNlLCBOVUxMLCBmYWxzZSk7CiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIAlpZiAoaXdsX2dldF9kZWJ1Z19sZXZlbChwcml2KSAmIElXTF9ETF9GV19FUlJPUlMpCiAJCWl3bF9wcmludF9yeF9jb25maWdfY21kKHByaXYsCiAJCQkJCSZwcml2LT5jb250ZXh0c1tJV0xfUlhPTl9DVFhfQlNTXSk7CiAjZW5kaWYKIAotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKLQotCS8qIEtlZXAgdGhlIHJlc3RhcnQgcHJvY2VzcyBmcm9tIHRyeWluZyB0byBzZW5kIGhvc3QKLQkgKiBjb21tYW5kcyBieSBjbGVhcmluZyB0aGUgSU5JVCBzdGF0dXMgYml0ICovCi0JY2xlYXJfYml0KFNUQVRVU19SRUFEWSwgJnByaXYtPnN0YXR1cyk7Ci0KLQkvKgotCSAqIElmIGZpcm13YXJlIGtlZXAgcmVsb2FkaW5nLCB0aGVuIGl0IGluZGljYXRlIHNvbWV0aGluZwotCSAqIHNlcmlvdXMgd3JvbmcgYW5kIGZpcm13YXJlIGhhdmluZyBwcm9ibGVtIHRvIHJlY292ZXIKLQkgKiBmcm9tIGl0LiBJbnN0ZWFkIG9mIGtlZXAgdHJ5aW5nIHdoaWNoIHdpbGwgZmlsbCB0aGUgc3lzbG9nCi0JICogYW5kIGhhbmcgdGhlIHN5c3RlbSwgbGV0J3MganVzdCBzdG9wIGl0Ci0JICovCi0JcmVsb2FkX2ppZmZpZXMgPSBqaWZmaWVzOwotCXJlbG9hZF9tc2VjID0gamlmZmllc190b19tc2VjcygobG9uZykgcmVsb2FkX2ppZmZpZXMgLQotCQkJCShsb25nKSBwcml2LT5yZWxvYWRfamlmZmllcyk7Ci0JcHJpdi0+cmVsb2FkX2ppZmZpZXMgPSByZWxvYWRfamlmZmllczsKLQlpZiAocmVsb2FkX21zZWMgPD0gSVdMX01JTl9SRUxPQURfRFVSQVRJT04pIHsKLQkJcHJpdi0+cmVsb2FkX2NvdW50Kys7Ci0JCWlmIChwcml2LT5yZWxvYWRfY291bnQgPj0gSVdMX01BWF9DT05USU5VRV9SRUxPQURfQ05UKSB7Ci0JCQlJV0xfRVJSKHByaXYsICJCVUdfT04sIFN0b3AgcmVzdGFydGluZ1xuIik7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9IGVsc2UKLQkJcHJpdi0+cmVsb2FkX2NvdW50ID0gMDsKLQotCWlmICghdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHKHByaXYsIElXTF9ETF9GV19FUlJPUlMsCi0JCQkgICJSZXN0YXJ0aW5nIGFkYXB0ZXIgZHVlIHRvIHVDb2RlIGVycm9yLlxuIik7Ci0KLQkJaWYgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+cmVzdGFydF9mdykKLQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7Ci0JfQorCWl3bGFnbl9md19lcnJvcihwcml2LCBmYWxzZSk7CiB9CiAKIHN0YXRpYyBpbnQgaXdsX2FwbV9zdG9wX21hc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCkBAIC05OTAsNiArOTk2LDggQEAKIHsKIAlJV0xfREVCVUdfSU5GTyhwcml2LCAiU3RvcCBjYXJkLCBwdXQgaW4gbG93IHBvd2VyIHN0YXRlXG4iKTsKIAorCWNsZWFyX2JpdChTVEFUVVNfREVWSUNFX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpOworCiAJLyogU3RvcCBkZXZpY2UncyBETUEgYWN0aXZpdHkgKi8KIAlpd2xfYXBtX3N0b3BfbWFzdGVyKHByaXYpOwogCkBAIC0xMDQwLDcgKzEwNDgsNiBAQAogCS8qCiAJICogRW5hYmxlIEhBUCBJTlRBIChpbnRlcnJ1cHQgZnJvbSBtYW5hZ2VtZW50IGJ1cykgdG8KIAkgKiB3YWtlIGRldmljZSdzIFBDSSBFeHByZXNzIGxpbmsgTDFhIC0+IEwwcwotCSAqIE5PVEU6ICBUaGlzIGlzIG5vLW9wIGZvciAzOTQ1IChub24tZXhpc3RlbnQgYml0KQogCSAqLwogCWl3bF9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAogCQkJCSAgICBDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRfSEFQX1dBS0VfTDFBKTsKQEAgLTEwNTMsMjAgKzEwNjAsMTggQEAKIAkgKiBJZiBub3QgKHVubGlrZWx5KSwgZW5hYmxlIEwwUywgc28gdGhlcmUgaXMgYXQgbGVhc3Qgc29tZQogCSAqICAgIHBvd2VyIHNhdmluZ3MsIGV2ZW4gd2l0aG91dCBMMS4KIAkgKi8KLQlpZiAocHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+c2V0X2wwcykgewotCQlsY3RsID0gaXdsX3BjaWVfbGlua19jdGwocHJpdik7Ci0JCWlmICgobGN0bCAmIFBDSV9DRkdfTElOS19DVFJMX1ZBTF9MMV9FTikgPT0KLQkJCQkJUENJX0NGR19MSU5LX0NUUkxfVkFMX0wxX0VOKSB7Ci0JCQkvKiBMMS1BU1BNIGVuYWJsZWQ7IGRpc2FibGUoISkgTDBTICAqLwotCQkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0dJT19SRUcsCi0JCQkJCUNTUl9HSU9fUkVHX1ZBTF9MMFNfRU5BQkxFRCk7Ci0JCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkwxIEVuYWJsZWQ7IERpc2FibGluZyBMMFNcbiIpOwotCQl9IGVsc2UgewotCQkJLyogTDEtQVNQTSBkaXNhYmxlZDsgZW5hYmxlKCEpIEwwUyAqLwotCQkJaXdsX2NsZWFyX2JpdChwcml2LCBDU1JfR0lPX1JFRywKLQkJCQkJQ1NSX0dJT19SRUdfVkFMX0wwU19FTkFCTEVEKTsKLQkJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiTDEgRGlzYWJsZWQ7IEVuYWJsaW5nIEwwU1xuIik7Ci0JCX0KKwlsY3RsID0gaXdsX3BjaWVfbGlua19jdGwocHJpdik7CisJaWYgKChsY3RsICYgUENJX0NGR19MSU5LX0NUUkxfVkFMX0wxX0VOKSA9PQorCQkJCVBDSV9DRkdfTElOS19DVFJMX1ZBTF9MMV9FTikgeworCQkvKiBMMS1BU1BNIGVuYWJsZWQ7IGRpc2FibGUoISkgTDBTICAqLworCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfR0lPX1JFRywKKwkJCQlDU1JfR0lPX1JFR19WQUxfTDBTX0VOQUJMRUQpOworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkwxIEVuYWJsZWQ7IERpc2FibGluZyBMMFNcbiIpOworCX0gZWxzZSB7CisJCS8qIEwxLUFTUE0gZGlzYWJsZWQ7IGVuYWJsZSghKSBMMFMgKi8KKwkJaXdsX2NsZWFyX2JpdChwcml2LCBDU1JfR0lPX1JFRywKKwkJCQlDU1JfR0lPX1JFR19WQUxfTDBTX0VOQUJMRUQpOworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkwxIERpc2FibGVkOyBFbmFibGluZyBMMFNcbiIpOwogCX0KIAogCS8qIENvbmZpZ3VyZSBhbmFsb2cgcGhhc2UtbG9jay1sb29wIGJlZm9yZSBhY3RpdmF0aW5nIHRvIEQwQSAqLwpAQCAtMTA5NCwyNyArMTA5OSwyMSBAQAogCX0KIAogCS8qCi0JICogRW5hYmxlIERNQSBhbmQgQlNNIChpZiB1c2VkKSBjbG9ja3MsIHdhaXQgZm9yIHRoZW0gdG8gc3RhYmlsaXplLgotCSAqIEJTTSAoQm9vc3RyYXAgU3RhdGUgTWFjaGluZSkgaXMgb25seSBpbiAzOTQ1IGFuZCA0OTY1OwotCSAqIGxhdGVyIGRldmljZXMgKGkuZS4gNTAwMCBhbmQgbGF0ZXIpIGhhdmUgbm9uLXZvbGF0aWxlIFNSQU0sCi0JICogYW5kIGRvbid0IG5lZWQgQlNNIHRvIHJlc3RvcmUgZGF0YSBhZnRlciBwb3dlci1zYXZpbmcgc2xlZXAuCisJICogRW5hYmxlIERNQSBjbG9jayBhbmQgd2FpdCBmb3IgaXQgdG8gc3RhYmlsaXplLgogCSAqCiAJICogV3JpdGUgdG8gIkNMS19FTl9SRUciOyAiMSIgYml0cyBlbmFibGUgY2xvY2tzLCB3aGlsZSAiMCIgYml0cwogCSAqIGRvIG5vdCBkaXNhYmxlIGNsb2Nrcy4gIFRoaXMgcHJlc2VydmVzIGFueSBoYXJkd2FyZSBiaXRzIGFscmVhZHkKIAkgKiBzZXQgYnkgZGVmYXVsdCBpbiAiQ0xLX0NUUkxfUkVHIiBhZnRlciByZXNldC4KIAkgKi8KLQlpZiAocHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+dXNlX2JzbSkKLQkJaXdsX3dyaXRlX3BycGgocHJpdiwgQVBNR19DTEtfRU5fUkVHLAotCQkJQVBNR19DTEtfVkFMX0RNQV9DTEtfUlFUIHwgQVBNR19DTEtfVkFMX0JTTV9DTEtfUlFUKTsKLQllbHNlCi0JCWl3bF93cml0ZV9wcnBoKHByaXYsIEFQTUdfQ0xLX0VOX1JFRywKLQkJCUFQTUdfQ0xLX1ZBTF9ETUFfQ0xLX1JRVCk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQVBNR19DTEtfRU5fUkVHLCBBUE1HX0NMS19WQUxfRE1BX0NMS19SUVQpOwogCXVkZWxheSgyMCk7CiAKIAkvKiBEaXNhYmxlIEwxLUFjdGl2ZSAqLwogCWl3bF9zZXRfYml0c19wcnBoKHByaXYsIEFQTUdfUENJREVWX1NUVF9SRUcsCiAJCQkgIEFQTUdfUENJREVWX1NUVF9WQUxfTDFfQUNUX0RJUyk7CiAKKwlzZXRfYml0KFNUQVRVU19ERVZJQ0VfRU5BQkxFRCwgJnByaXYtPnN0YXR1cyk7CisKIG91dDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTQzMCw3ICsxNDI5LDYgQEAKIAogCWl3bF90ZWFyZG93bl9pbnRlcmZhY2UocHJpdiwgdmlmLCBmYWxzZSk7CiAKLQltZW1zZXQocHJpdi0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAogCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwpAQCAtMTc1MCwyMSArMTc0OCwxMyBAQAogCQkgKiBkZXRlY3QgZmFpbHVyZSksIHRoZW4gZndfcmVzdGFydCBtb2R1bGUgcGFyYW1ldGVyCiAJCSAqIG5lZWQgdG8gYmUgY2hlY2sgYmVmb3JlIHBlcmZvcm1pbmcgZmlybXdhcmUgcmVsb2FkCiAJCSAqLwotCQlpZiAoIWV4dGVybmFsICYmICFwcml2LT5jZmctPm1vZF9wYXJhbXMtPnJlc3RhcnRfZncpIHsKKwkJaWYgKCFleHRlcm5hbCAmJiAhaXdsYWduX21vZF9wYXJhbXMucmVzdGFydF9mdykgewogCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNhbmNlbCBmaXJtd2FyZSByZWxvYWQgYmFzZWQgb24gIgogCQkJCSAgICAgICAibW9kdWxlIHBhcmFtZXRlciBzZXR0aW5nXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAJCUlXTF9FUlIocHJpdiwgIk9uIGRlbWFuZCBmaXJtd2FyZSByZWxvYWRcbiIpOwotCQkvKiBTZXQgdGhlIEZXIGVycm9yIGZsYWcgLS0gY2xlYXJlZCBvbiBpd2xfZG93biAqLwotCQlzZXRfYml0KFNUQVRVU19GV19FUlJPUiwgJnByaXYtPnN0YXR1cyk7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKLQkJLyoKLQkJICogS2VlcCB0aGUgcmVzdGFydCBwcm9jZXNzIGZyb20gdHJ5aW5nIHRvIHNlbmQgaG9zdAotCQkgKiBjb21tYW5kcyBieSBjbGVhcmluZyB0aGUgSU5JVCBzdGF0dXMgYml0Ci0JCSAqLwotCQljbGVhcl9iaXQoU1RBVFVTX1JFQURZLCAmcHJpdi0+c3RhdHVzKTsKLQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKKwkJaXdsYWduX2Z3X2Vycm9yKHByaXYsIHRydWUpOwogCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xNzc1LDYgKzE3NjUsNyBAQAogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCXN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHggPSBpd2xfcnhvbl9jdHhfZnJvbV92aWYodmlmKTsKKwlzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqYnNzX2N0eCA9ICZwcml2LT5jb250ZXh0c1tJV0xfUlhPTl9DVFhfQlNTXTsKIAlzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqdG1wOwogCXUzMiBpbnRlcmZhY2VfbW9kZXM7CiAJaW50IGVycjsKQEAgLTE3ODMsNiArMTc3NCwxNSBAQAogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCisJaWYgKCFjdHgtPnZpZiB8fCAhaXdsX2lzX3JlYWR5X3JmKHByaXYpKSB7CisJCS8qCisJCSAqIEh1aD8gQnV0IHdhaXQgLi4uIHRoaXMgY2FuIG1heWJlIGhhcHBlbiB3aGVuCisJCSAqIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgYSBmaXJtd2FyZSByZXN0YXJ0IQorCQkgKi8KKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKIAlpbnRlcmZhY2VfbW9kZXMgPSBjdHgtPmludGVyZmFjZV9tb2RlcyB8IGN0eC0+ZXhjbHVzaXZlX2ludGVyZmFjZV9tb2RlczsKIAogCWlmICghKGludGVyZmFjZV9tb2RlcyAmIEJJVChuZXd0eXBlKSkpIHsKQEAgLTE3OTAsNiArMTc5MCwxOSBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwkvKgorCSAqIFJlZnVzZSBhIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBkb25lIGJ5IG1vdmluZyBmcm9tIHRoZSBQQU4KKwkgKiBjb250ZXh0IHRvIHRoZSBCU1MgY29udGV4dCBpbnN0ZWFkLCBpZiB0aGUgQlNTIGNvbnRleHQgaXMKKwkgKiBhdmFpbGFibGUgYW5kIGNhbiBzdXBwb3J0IHRoZSBuZXcgaW50ZXJmYWNlIHR5cGUuCisJICovCisJaWYgKGN0eC0+Y3R4aWQgPT0gSVdMX1JYT05fQ1RYX1BBTiAmJiAhYnNzX2N0eC0+dmlmICYmCisJICAgIChic3NfY3R4LT5pbnRlcmZhY2VfbW9kZXMgJiBCSVQobmV3dHlwZSkgfHwKKwkgICAgIGJzc19jdHgtPmV4Y2x1c2l2ZV9pbnRlcmZhY2VfbW9kZXMgJiBCSVQobmV3dHlwZSkpKSB7CisJCUJVSUxEX0JVR19PTihOVU1fSVdMX1JYT05fQ1RYICE9IDIpOworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKwogCWlmIChjdHgtPmV4Y2x1c2l2ZV9pbnRlcmZhY2VfbW9kZXMgJiBCSVQobmV3dHlwZSkpIHsKIAkJZm9yX2VhY2hfY29udGV4dChwcml2LCB0bXApIHsKIAkJCWlmIChjdHggPT0gdG1wKQpAQCAtMTgxMCw2ICsxODIzLDcgQEAKIAkvKiBzdWNjZXNzICovCiAJaXdsX3RlYXJkb3duX2ludGVyZmFjZShwcml2LCB2aWYsIHRydWUpOwogCXZpZi0+dHlwZSA9IG5ld3R5cGU7CisJdmlmLT5wMnAgPSBuZXdwMnA7CiAJZXJyID0gaXdsX3NldHVwX2ludGVyZmFjZShwcml2LCBjdHgpOwogCVdBUk5fT04oZXJyKTsKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oCmluZGV4IGIzMTZkODMuLjViNWIwY2NlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNzMsNyArNzMsNyBAQAogCiAKICNkZWZpbmUgSVdMV0lGSV9WRVJTSU9OICJpbi10cmVlOiIKLSNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0KGMpIDIwMDMtMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbiIKKyNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0KGMpIDIwMDMtMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbiIKICNkZWZpbmUgRFJWX0FVVEhPUiAgICAgIjxpbHdAbGludXguaW50ZWwuY29tPiIKIAogI2RlZmluZSBJV0xfUENJX0RFVklDRShkZXYsIHN1YmRldiwgY2ZnKSBcCkBAIC05MCw3ICs5MCw2IEBACiAjZGVmaW5lIElXTF9DTUQoeCkgY2FzZSB4OiByZXR1cm4gI3gKIAogc3RydWN0IGl3bF9oY21kX29wcyB7Ci0JaW50ICgqcnhvbl9hc3NvYykoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4KTsKIAlpbnQgKCpjb21taXRfcnhvbikoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4KTsKIAl2b2lkICgqc2V0X3J4b25fY2hhaW4pKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgICBzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4KTsKQEAgLTEwMCw3ICs5OSw2IEBACiB9OwogCiBzdHJ1Y3QgaXdsX2hjbWRfdXRpbHNfb3BzIHsKLQl1MTYgKCpnZXRfaGNtZF9zaXplKSh1OCBjbWRfaWQsIHUxNiBsZW4pOwogCXUxNiAoKmJ1aWxkX2FkZHN0YV9oY21kKShjb25zdCBzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgKmNtZCwgdTggKmRhdGEpOwogCXZvaWQgKCpnYWluX2NvbXB1dGF0aW9uKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQl1MzIgKmF2ZXJhZ2Vfbm9pc2UsCkBAIC0xMjIsNDYgKzEyMCwxNCBAQAogCXZvaWQgKCpjb25maWcpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB9OwogCi1zdHJ1Y3QgaXdsX2lzcl9vcHMgewotCWlycXJldHVybl90ICgqaXNyKSAoaW50IGlycSwgdm9pZCAqZGF0YSk7Ci0Jdm9pZCAoKmZyZWUpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci0JaW50ICgqYWxsb2MpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci0JaW50ICgqcmVzZXQpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci0Jdm9pZCAoKmRpc2FibGUpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci19OwotCi1zdHJ1Y3QgaXdsX2RlYnVnZnNfb3BzIHsKLQlzc2l6ZV90ICgqcnhfc3RhdHNfcmVhZCkoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOwotCXNzaXplX3QgKCp0eF9zdGF0c19yZWFkKShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAotCQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyk7Ci0Jc3NpemVfdCAoKmdlbmVyYWxfc3RhdHNfcmVhZCkoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyk7Ci0Jc3NpemVfdCAoKmJ0X3N0YXRzX3JlYWQpKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCi0JCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKTsKLQlzc2l6ZV90ICgqcmVwbHlfdHhfZXJyb3IpKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCi0JCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKTsKLX07Ci0KIHN0cnVjdCBpd2xfdGVtcF9vcHMgewogCXZvaWQgKCp0ZW1wZXJhdHVyZSkoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIH07CiAKLXN0cnVjdCBpd2xfdHRfb3BzIHsKLQlib29sICgqbG93ZXJfcG93ZXJfZGV0ZWN0aW9uKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotCXU4ICgqdHRfcG93ZXJfbW9kZSkoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKLQlib29sICgqY3Rfa2lsbF9jaGVjaykoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKLX07Ci0KIHN0cnVjdCBpd2xfbGliX29wcyB7CiAJLyogc2V0IGh3IGRlcGVuZGVudCBwYXJhbWV0ZXJzICovCiAJaW50ICgqc2V0X2h3X3BhcmFtcykoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIAkvKiBIYW5kbGluZyBUWCAqLwotCXZvaWQgKCp0eHFfdXBkYXRlX2J5dGVfY250X3RibCkoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCQlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEsCi0JCQkJCXUxNiBieXRlX2NudCk7Ci0Jdm9pZCAoKnR4cV9pbnZhbF9ieXRlX2NudF90YmwpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICAgICAgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKTsKIAl2b2lkICgqdHhxX3NldF9zY2hlZCkoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgbWFzayk7CiAJaW50ICgqdHhxX2F0dGFjaF9idWZfdG9fdGZkKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJICAgICBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEsCkBAIC0xNzEsMzAgKzEzNywxNCBAQAogCQkJICAgICBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOwogCWludCAoKnR4cV9pbml0KShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOwotCS8qIGFnZ3JlZ2F0aW9ucyAqLwotCWludCAoKnR4cV9hZ2dfZW5hYmxlKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCB0eHFfaWQsIGludCB0eF9maWZvLAotCQkJICAgICAgaW50IHN0YV9pZCwgaW50IHRpZCwgdTE2IHNzbl9pZHgpOwotCWludCAoKnR4cV9hZ2dfZGlzYWJsZSkoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgdHhxX2lkLCB1MTYgc3NuX2lkeCwKLQkJCSAgICAgICB1OCB0eF9maWZvKTsKIAkvKiBzZXR1cCBSeCBoYW5kbGVyICovCiAJdm9pZCAoKnJ4X2hhbmRsZXJfc2V0dXApKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAJLyogc2V0dXAgZGVmZXJyZWQgd29yayAqLwogCXZvaWQgKCpzZXR1cF9kZWZlcnJlZF93b3JrKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCS8qIGNhbmNlbCBkZWZlcnJlZCB3b3JrICovCiAJdm9pZCAoKmNhbmNlbF9kZWZlcnJlZF93b3JrKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotCS8qIGFsaXZlIG5vdGlmaWNhdGlvbiBhZnRlciBpbml0IHVDb2RlIGxvYWQgKi8KLQl2b2lkICgqaW5pdF9hbGl2ZV9zdGFydCkoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKLQkvKiBhbGl2ZSBub3RpZmljYXRpb24gKi8KLQlpbnQgKCphbGl2ZV9ub3RpZnkpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAJLyogY2hlY2sgdmFsaWRpdHkgb2YgcnRjIGRhdGEgYWRkcmVzcyAqLwogCWludCAoKmlzX3ZhbGlkX3J0Y19kYXRhX2FkZHIpKHUzMiBhZGRyKTsKLQkvKiAxc3QgdWNvZGUgbG9hZCAqLwotCWludCAoKmxvYWRfdWNvZGUpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci0JaW50ICgqZHVtcF9uaWNfZXZlbnRfbG9nKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICBib29sIGZ1bGxfbG9nLCBjaGFyICoqYnVmLCBib29sIGRpc3BsYXkpOwotCXZvaWQgKCpkdW1wX25pY19lcnJvcl9sb2cpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci0Jdm9pZCAoKmR1bXBfY3NyKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotCWludCAoKmR1bXBfZmgpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY2hhciAqKmJ1ZiwgYm9vbCBkaXNwbGF5KTsKIAlpbnQgKCpzZXRfY2hhbm5lbF9zd2l0Y2gpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9zd2l0Y2ggKmNoX3N3aXRjaCk7CiAJLyogcG93ZXIgbWFuYWdlbWVudCAqLwpAQCAtMjA0LDkgKzE1NCw2IEBACiAJaW50ICgqc2VuZF90eF9wb3dlcikgKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAJdm9pZCAoKnVwZGF0ZV9jaGFpbl9mbGFncykoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIAotCS8qIGlzciAqLwotCXN0cnVjdCBpd2xfaXNyX29wcyBpc3Jfb3BzOwotCiAJLyogZWVwcm9tIG9wZXJhdGlvbnMgKGFzIGRlZmluZWQgaW4gaXdsLWVlcHJvbS5oKSAqLwogCXN0cnVjdCBpd2xfZWVwcm9tX29wcyBlZXByb21fb3BzOwogCkBAIC0yMTYsMTQgKzE2Myw2IEBACiAJaW50ICgqdHhmaWZvX2ZsdXNoKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBmbHVzaF9jb250cm9sKTsKIAl2b2lkICgqZGV2X3R4Zmlmb19mbHVzaCkoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgZmx1c2hfY29udHJvbCk7CiAKLQlzdHJ1Y3QgaXdsX2RlYnVnZnNfb3BzIGRlYnVnZnNfb3BzOwotCi0JLyogdGhlcm1hbCB0aHJvdHRsaW5nICovCi0Jc3RydWN0IGl3bF90dF9vcHMgdHRfb3BzOwotfTsKLQotc3RydWN0IGl3bF9sZWRfb3BzIHsKLQlpbnQgKCpjbWQpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9sZWRfY21kICpsZWRfY21kKTsKIH07CiAKIC8qIE5JQyBzcGVjaWZpYyBvcHMgKi8KQEAgLTIzMSwyOCArMTcwLDE1IEBACiAJdm9pZCAoKmFkZGl0aW9uYWxfbmljX2NvbmZpZykoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIH07CiAKLXN0cnVjdCBpd2xfbGVnYWN5X29wcyB7Ci0Jdm9pZCAoKnBvc3RfYXNzb2NpYXRlKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotCXZvaWQgKCpjb25maWdfYXApKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci0JLyogc3RhdGlvbiBtYW5hZ2VtZW50ICovCi0JaW50ICgqdXBkYXRlX2JjYXN0X3N0YXRpb25zKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotCWludCAoKm1hbmFnZV9pYnNzX3N0YXRpb24pKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBib29sIGFkZCk7Ci19OwotCiBzdHJ1Y3QgaXdsX29wcyB7CiAJY29uc3Qgc3RydWN0IGl3bF9saWJfb3BzICpsaWI7CiAJY29uc3Qgc3RydWN0IGl3bF9oY21kX29wcyAqaGNtZDsKIAljb25zdCBzdHJ1Y3QgaXdsX2hjbWRfdXRpbHNfb3BzICp1dGlsczsKLQljb25zdCBzdHJ1Y3QgaXdsX2xlZF9vcHMgKmxlZDsKIAljb25zdCBzdHJ1Y3QgaXdsX25pY19vcHMgKm5pYzsKLQljb25zdCBzdHJ1Y3QgaXdsX2xlZ2FjeV9vcHMgKmxlZ2FjeTsKLQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyAqaWVlZTgwMjExX29wczsKIH07CiAKIHN0cnVjdCBpd2xfbW9kX3BhcmFtcyB7CiAJaW50IHN3X2NyeXB0bzsJCS8qIGRlZjogMCA9IHVzaW5nIGhhcmR3YXJlIGVuY3J5cHRpb24gKi8KLQlpbnQgZGlzYWJsZV9od19zY2FuOwkvKiBkZWY6IDAgPSB1c2UgaC93IHNjYW4gKi8KIAlpbnQgbnVtX29mX3F1ZXVlczsJLyogZGVmOiBIVyBkZXBlbmRlbnQgKi8KIAlpbnQgZGlzYWJsZV8xMW47CS8qIGRlZjogMCA9IDExbiBjYXBhYmlsaXRpZXMgZW5hYmxlZCAqLwogCWludCBhbXNkdV9zaXplXzhLOwkvKiBkZWY6IDEgPSBlbmFibGUgOEsgYW1zZHUgc2l6ZSAqLwpAQCAtMjc4LDE2ICsyMDQsNyBAQAogICogQHdkX3RpbWVvdXQ6IFRYIHF1ZXVlcyB3YXRjaGRvZyB0aW1lb3V0CiAgKiBAdGVtcGVyYXR1cmVfa2VsdmluOiB0ZW1wZXJhdHVyZSByZXBvcnQgYnkgdUNvZGUgaW4ga2VsdmluCiAgKiBAbWF4X2V2ZW50X2xvZ19zaXplOiBzaXplIG9mIGV2ZW50IGxvZyBidWZmZXIgc2l6ZSBmb3IgdWNvZGUgZXZlbnQgbG9nZ2luZwotICogQHR4X3Bvd2VyX2J5X2RyaXZlcjogdHggcG93ZXIgY2FsaWJyYXRpb24gcGVyZm9ybWVkIGJ5IGRyaXZlcgotICoJaW5zdGVhZCBvZiB1Q29kZQotICogQHVjb2RlX3RyYWNpbmc6IHN1cHBvcnQgdWNvZGUgY29udGludW91cyB0cmFjaW5nCi0gKiBAc2Vuc2l0aXZpdHlfY2FsaWJfYnlfZHJpdmVyOiBkcml2ZXIgaGFzIHRoZSBjYXBhYmlsaXR5IHRvIHBlcmZvcm0KLSAqCXNlbnNpdGl2aXR5IGNhbGlicmF0aW9uIG9wZXJhdGlvbgotICogQGNoYWluX25vaXNlX2NhbGliX2J5X2RyaXZlcjogZHJpdmVyIGhhcyB0aGUgY2FwYWJpbGl0eSB0byBwZXJmb3JtCi0gKgljaGFpbiBub2lzZSBjYWxpYnJhdGlvbiBvcGVyYXRpb24KICAqIEBzaGFkb3dfcmVnX2VuYWJsZTogSFcgc2hhZGhvdyByZWdpc3RlciBiaXQKLSAqIEBub19hZ2dfZnJhbWVjbnRfaW5mbzogdUNvZGUgZG8gbm90IHByb3ZpZGUgYWdncmVnYXRpb24gZnJhbWUgY291bnQKLSAqCWluZm9ybWF0aW9uCiAgKi8KIHN0cnVjdCBpd2xfYmFzZV9wYXJhbXMgewogCWludCBlZXByb21fc2l6ZTsKQEAgLTI5NSwxNCArMjEyLDEwIEBACiAJaW50IG51bV9vZl9hbXBkdV9xdWV1ZXM7LyogZGVmOiBIVyBkZXBlbmRlbnQgKi8KIAkvKiBmb3IgaXdsX2FwbV9pbml0KCkgKi8KIAl1MzIgcGxsX2NmZ192YWw7Ci0JYm9vbCBzZXRfbDBzOwotCWJvb2wgdXNlX2JzbTsKIAotCWJvb2wgdXNlX2lzcl9sZWdhY3k7CiAJY29uc3QgdTE2IG1heF9sbF9pdGVtczsKIAljb25zdCBib29sIHNoYWRvd19yYW1fc3VwcG9ydDsKIAl1MTYgbGVkX2NvbXBlbnNhdGlvbjsKLQljb25zdCBib29sIGJyb2tlbl9wb3dlcnNhdmU7CiAJaW50IGNoYWluX25vaXNlX251bV9iZWFjb25zOwogCWJvb2wgYWR2X3RoZXJtYWxfdGhyb3R0bGU7CiAJYm9vbCBzdXBwb3J0X2N0X2tpbGxfZXhpdDsKQEAgLTMxMiwxOCArMjI1LDEyIEBACiAJdW5zaWduZWQgaW50IHdkX3RpbWVvdXQ7CiAJYm9vbCB0ZW1wZXJhdHVyZV9rZWx2aW47CiAJdTMyIG1heF9ldmVudF9sb2dfc2l6ZTsKLQljb25zdCBib29sIHR4X3Bvd2VyX2J5X2RyaXZlcjsKLQljb25zdCBib29sIHVjb2RlX3RyYWNpbmc7Ci0JY29uc3QgYm9vbCBzZW5zaXRpdml0eV9jYWxpYl9ieV9kcml2ZXI7Ci0JY29uc3QgYm9vbCBjaGFpbl9ub2lzZV9jYWxpYl9ieV9kcml2ZXI7CiAJY29uc3QgYm9vbCBzaGFkb3dfcmVnX2VuYWJsZTsKLQljb25zdCBib29sIG5vX2FnZ19mcmFtZWNudF9pbmZvOwogfTsKIC8qCiAgKiBAYWR2YW5jZWRfYnRfY29leGlzdDogc3VwcG9ydCBhZHZhbmNlZCBidCBjb2V4aXN0CiAgKiBAYnRfaW5pdF90cmFmZmljX2xvYWQ6IHNwZWNpZnkgaW5pdGlhbCBidCB0cmFmZmljIGxvYWQKICAqIEBidF9wcmlvX2Jvb3N0OiBkZWZhdWx0IGJ0IHByaW9yaXR5IGJvb3N0IHZhbHVlCi0gKiBAYnRfc3RhdGlzdGljczogdXNlIEJUIHZlcnNpb24gb2Ygc3RhdGlzdGljcyBub3RpZmljYXRpb24KICAqIEBhZ2dfdGltZV9saW1pdDogbWF4aW11bSBudW1iZXIgb2YgdVNlYyBpbiBhZ2dyZWdhdGlvbgogICogQGFtcGR1X2ZhY3RvcjogTWF4aW11bSBBLU1QRFUgbGVuZ3RoIGZhY3RvcgogICogQGFtcGR1X2RlbnNpdHk6IE1pbmltdW0gQS1NUERVIHNwYWNpbmcKQEAgLTMzMyw3ICsyNDAsNiBAQAogCWJvb2wgYWR2YW5jZWRfYnRfY29leGlzdDsKIAl1OCBidF9pbml0X3RyYWZmaWNfbG9hZDsKIAl1OCBidF9wcmlvX2Jvb3N0OwotCWNvbnN0IGJvb2wgYnRfc3RhdGlzdGljczsKIAl1MTYgYWdnX3RpbWVfbGltaXQ7CiAJdTggYW1wZHVfZmFjdG9yOwogCXU4IGFtcGR1X2RlbnNpdHk7CkBAIC0zNjQsNiArMjcwLDcgQEAKICAqIEByeF93aXRoX3Npc29fZGl2ZXJzaXR5OiAxeDEgZGV2aWNlIHdpdGggcnggYW50ZW5uYSBkaXZlcnNpdHkKICAqIEBpbnRlcm5hbF93aW1heF9jb2V4OiBpbnRlcm5hbCB3aWZpL3dpbWF4IGNvbWJvIGRldmljZQogICogQGlxX2ludmVydDogSS9RIGludmVyc2lvbgorICogQGRpc2FibGVfb3RwX3JlZnJlc2g6IGRpc2FibGUgT1RQIHJlZnJlc2ggY3VycmVudCBsaW1pdAogICoKICAqIFdlIGVuYWJsZSB0aGUgZHJpdmVyIHRvIGJlIGJhY2t3YXJkIGNvbXBhdGlibGUgd3J0IEFQSSB2ZXJzaW9uLiBUaGUKICAqIGRyaXZlciBzcGVjaWZpZXMgd2hpY2ggQVBJcyBpdCBzdXBwb3J0cyAod2l0aCBAdWNvZGVfYXBpX21heCBiZWluZyB0aGUKQEAgLTM5OCw4ICszMDUsNiBAQAogCXUxNiAgZWVwcm9tX3ZlcjsKIAl1MTYgIGVlcHJvbV9jYWxpYl92ZXI7CiAJY29uc3Qgc3RydWN0IGl3bF9vcHMgKm9wczsKLQkvKiBtb2R1bGUgYmFzZWQgcGFyYW1ldGVycyB3aGljaCBjYW4gYmUgc2V0IGZyb20gbW9kcHJvYmUgY21kICovCi0JY29uc3Qgc3RydWN0IGl3bF9tb2RfcGFyYW1zICptb2RfcGFyYW1zOwogCS8qIHBhcmFtcyBub3QgbGlrZWx5IHRvIGNoYW5nZSB3aXRoaW4gYSBkZXZpY2UgZmFtaWx5ICovCiAJc3RydWN0IGl3bF9iYXNlX3BhcmFtcyAqYmFzZV9wYXJhbXM7CiAJLyogcGFyYW1zIGxpa2VseSB0byBjaGFuZ2Ugd2l0aGluIGEgZGV2aWNlIGZhbWlseSAqLwpAQCAtNDE0LDEzICszMTksMTMgQEAKIAljb25zdCBib29sIHJ4X3dpdGhfc2lzb19kaXZlcnNpdHk7CiAJY29uc3QgYm9vbCBpbnRlcm5hbF93aW1heF9jb2V4OwogCWNvbnN0IGJvb2wgaXFfaW52ZXJ0OworCWNvbnN0IGJvb2wgZGlzYWJsZV9vdHBfcmVmcmVzaDsKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgTCBpIGIgICAgICAgICAgICAgICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0cnVjdCBpZWVlODAyMTFfaHcgKml3bF9hbGxvY19hbGwoc3RydWN0IGl3bF9jZmcgKmNmZyk7CiBpbnQgaXdsX21hY19jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgcXVldWUsCiAJCSAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKTsKIGludCBpd2xfbWFjX3R4X2xhc3RfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKQEAgLTYyNSw2ICs1MzAsOCBAQAogdm9pZCBpd2xfZHVtcF9uaWNfZXJyb3JfbG9nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX2R1bXBfbmljX2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICBib29sIGZ1bGxfbG9nLCBjaGFyICoqYnVmLCBib29sIGRpc3BsYXkpOwordm9pZCBpd2xfZHVtcF9jc3Ioc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2ludCBpd2xfZHVtcF9maChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNoYXIgKipidWYsIGJvb2wgZGlzcGxheSk7CiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIHZvaWQgaXdsX3ByaW50X3J4X2NvbmZpZ19jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJICAgICBzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4KTsKQEAgLTY2Miw2ICs1NjksNyBAQAogI2RlZmluZSBTVEFUVVNfU0NBTl9IVwkJMTUKICNkZWZpbmUgU1RBVFVTX1BPV0VSX1BNSQkxNgogI2RlZmluZSBTVEFUVVNfRldfRVJST1IJCTE3CisjZGVmaW5lIFNUQVRVU19ERVZJQ0VfRU5BQkxFRAkxOAogCiAKIHN0YXRpYyBpbmxpbmUgaW50IGl3bF9pc19yZWFkeShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCkBAIC03MTQsMTEgKzYyMiw2IEBACiBpbnQgaXdsX2FwbV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKIGludCBpd2xfc2VuZF9yeG9uX3RpbWluZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHgpOwotc3RhdGljIGlubGluZSBpbnQgaXdsX3NlbmRfcnhvbl9hc3NvYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgICAgc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCkKLXsKLQlyZXR1cm4gcHJpdi0+Y2ZnLT5vcHMtPmhjbWQtPnJ4b25fYXNzb2MocHJpdiwgY3R4KTsKLX0KIHN0YXRpYyBpbmxpbmUgaW50IGl3bGNvcmVfY29tbWl0X3J4b24oc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSAgICAgIHN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHgpCiB7CkBAIC03MzYsMTIgKzYzOSwxMCBAQAogCSAgICAgICBwcml2LT5jZmctPmJ0X3BhcmFtcy0+YWR2YW5jZWRfYnRfY29leGlzdDsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGl3bF9idF9zdGF0aXN0aWNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlyZXR1cm4gcHJpdi0+Y2ZnLT5idF9wYXJhbXMgJiYgcHJpdi0+Y2ZnLT5idF9wYXJhbXMtPmJ0X3N0YXRpc3RpY3M7Ci19Ci0KIGV4dGVybiBib29sIGJ0X2NvZXhfYWN0aXZlOwogZXh0ZXJuIGJvb2wgYnRfc2lzb19tb2RlOwogCisKK3ZvaWQgaXdsYWduX2Z3X2Vycm9yKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgYm9vbCBvbmRlbWFuZCk7CisKICNlbmRpZiAvKiBfX2l3bF9jb3JlX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY3NyLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jc3IuaAppbmRleCBmNTJiYzA0Li41YWI5MGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jc3IuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jc3IuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE1NSwxOCArMTU1LDEwIEBACiAjZGVmaW5lIENTUl9EQkdfTElOS19QV1JfTUdNVF9SRUcJKENTUl9CQVNFKzB4MjUwKQogCiAvKiBCaXRzIGZvciBDU1JfSFdfSUZfQ09ORklHX1JFRyAqLwotI2RlZmluZSBDU1I0OV9IV19JRl9DT05GSUdfUkVHX0JJVF80OTY1X1IJKDB4MDAwMDAwMTApCiAjZGVmaW5lIENTUl9IV19JRl9DT05GSUdfUkVHX01TS19CT0FSRF9WRVIJKDB4MDAwMDBDMDApCiAjZGVmaW5lIENTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9NQUNfU0kgCSgweDAwMDAwMTAwKQogI2RlZmluZSBDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRfUkFESU9fU0kJKDB4MDAwMDAyMDApCiAKLSNkZWZpbmUgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRfMzk0NV9NQiAgICAgICAgICgweDAwMDAwMTAwKQotI2RlZmluZSBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVF8zOTQ1X01NICAgICAgICAgKDB4MDAwMDAyMDApCi0jZGVmaW5lIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUX1NLVV9NUkMgICAgICAgICAgICAoMHgwMDAwMDQwMCkKLSNkZWZpbmUgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRfQk9BUkRfVFlQRSAgICAgICAgICgweDAwMDAwODAwKQotI2RlZmluZSBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVFNfU0lMSUNPTl9UWVBFX0EgICAgKDB4MDAwMDAwMDApCi0jZGVmaW5lIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUU19TSUxJQ09OX1RZUEVfQiAgICAoMHgwMDAwMTAwMCkKLQogI2RlZmluZSBDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRfSEFQX1dBS0VfTDFBCSgweDAwMDgwMDAwKQogI2RlZmluZSBDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRfRUVQUk9NX09XTl9TRU0JKDB4MDAyMDAwMDApCiAjZGVmaW5lIENTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9OSUNfUkVBRFkJKDB4MDA0MDAwMDApIC8qIFBDSV9PV05fU0VNICovCkBAIC0xODYsNyArMTc4LDcgQEAKICNkZWZpbmUgQ1NSX0lOVF9CSVRfU1dfRVJSICAgICAgICgxIDw8IDI1KSAvKiB1Q29kZSBlcnJvciAqLwogI2RlZmluZSBDU1JfSU5UX0JJVF9SRl9LSUxMICAgICAgKDEgPDwgNykgIC8qIEhXIFJGS0lMTCBzd2l0Y2ggR1BfQ05UUkxbMjddIHRvZ2dsZWQgKi8KICNkZWZpbmUgQ1NSX0lOVF9CSVRfQ1RfS0lMTCAgICAgICgxIDw8IDYpICAvKiBDcml0aWNhbCB0ZW1wIChjaGlwIHRvbyBob3QpIHJma2lsbCAqLwotI2RlZmluZSBDU1JfSU5UX0JJVF9TV19SWCAgICAgICAgKDEgPDwgMykgIC8qIFJ4LCBjb21tYW5kIHJlc3BvbnNlcywgMzk0NSAqLworI2RlZmluZSBDU1JfSU5UX0JJVF9TV19SWCAgICAgICAgKDEgPDwgMykgIC8qIFJ4LCBjb21tYW5kIHJlc3BvbnNlcyAqLwogI2RlZmluZSBDU1JfSU5UX0JJVF9XQUtFVVAgICAgICAgKDEgPDwgMSkgIC8qIE5JQyBjb250cm9sbGVyIHdha2luZyB1cCAocHdyIG1nbXQpICovCiAjZGVmaW5lIENTUl9JTlRfQklUX0FMSVZFICAgICAgICAoMSA8PCAwKSAgLyogdUNvZGUgaW50ZXJydXB0cyBvbmNlIGl0IGluaXRpYWxpemVzICovCiAKQEAgLTIwMiwyOSArMTk0LDE3IEBACiAvKiBpbnRlcnJ1cHQgZmxhZ3MgaW4gRkggKGZsb3cgaGFuZGxlcikgKFBDSSBidXNtYXN0ZXIgRE1BKSAqLwogI2RlZmluZSBDU1JfRkhfSU5UX0JJVF9FUlIgICAgICAgKDEgPDwgMzEpIC8qIEVycm9yICovCiAjZGVmaW5lIENTUl9GSF9JTlRfQklUX0hJX1BSSU9SICAoMSA8PCAzMCkgLyogSGlnaCBwcmlvcml0eSBSeCwgYnlwYXNzIGNvYWxlc2NpbmcgKi8KLSNkZWZpbmUgQ1NSMzlfRkhfSU5UX0JJVF9SWF9DSE5MMiAgKDEgPDwgMTgpIC8qIFJ4IGNoYW5uZWwgMiAoMzk0NSBvbmx5KSAqLwogI2RlZmluZSBDU1JfRkhfSU5UX0JJVF9SWF9DSE5MMSAgKDEgPDwgMTcpIC8qIFJ4IGNoYW5uZWwgMSAqLwogI2RlZmluZSBDU1JfRkhfSU5UX0JJVF9SWF9DSE5MMCAgKDEgPDwgMTYpIC8qIFJ4IGNoYW5uZWwgMCAqLwotI2RlZmluZSBDU1IzOV9GSF9JTlRfQklUX1RYX0NITkw2ICAoMSA8PCA2KSAgLyogVHggY2hhbm5lbCA2ICgzOTQ1IG9ubHkpICovCiAjZGVmaW5lIENTUl9GSF9JTlRfQklUX1RYX0NITkwxICAoMSA8PCAxKSAgLyogVHggY2hhbm5lbCAxICovCiAjZGVmaW5lIENTUl9GSF9JTlRfQklUX1RYX0NITkwwICAoMSA8PCAwKSAgLyogVHggY2hhbm5lbCAwICovCiAKLSNkZWZpbmUgQ1NSMzlfRkhfSU5UX1JYX01BU0sJKENTUl9GSF9JTlRfQklUX0hJX1BSSU9SIHwgXAotCQkJCSBDU1IzOV9GSF9JTlRfQklUX1JYX0NITkwyIHwgXAotCQkJCSBDU1JfRkhfSU5UX0JJVF9SWF9DSE5MMSB8IFwKLQkJCQkgQ1NSX0ZIX0lOVF9CSVRfUlhfQ0hOTDApCisjZGVmaW5lIENTUl9GSF9JTlRfUlhfTUFTSwkoQ1NSX0ZIX0lOVF9CSVRfSElfUFJJT1IgfCBcCisJCQkJQ1NSX0ZIX0lOVF9CSVRfUlhfQ0hOTDEgfCBcCisJCQkJQ1NSX0ZIX0lOVF9CSVRfUlhfQ0hOTDApCiAKLQotI2RlZmluZSBDU1IzOV9GSF9JTlRfVFhfTUFTSwkoQ1NSMzlfRkhfSU5UX0JJVF9UWF9DSE5MNiB8IFwKLQkJCQkgQ1NSX0ZIX0lOVF9CSVRfVFhfQ0hOTDEgfCBcCi0JCQkJIENTUl9GSF9JTlRfQklUX1RYX0NITkwwKQotCi0jZGVmaW5lIENTUjQ5X0ZIX0lOVF9SWF9NQVNLCShDU1JfRkhfSU5UX0JJVF9ISV9QUklPUiB8IFwKLQkJCQkgQ1NSX0ZIX0lOVF9CSVRfUlhfQ0hOTDEgfCBcCi0JCQkJIENTUl9GSF9JTlRfQklUX1JYX0NITkwwKQotCi0jZGVmaW5lIENTUjQ5X0ZIX0lOVF9UWF9NQVNLCShDU1JfRkhfSU5UX0JJVF9UWF9DSE5MMSB8IFwKLQkJCQkgQ1NSX0ZIX0lOVF9CSVRfVFhfQ0hOTDApCisjZGVmaW5lIENTUl9GSF9JTlRfVFhfTUFTSwkoQ1NSX0ZIX0lOVF9CSVRfVFhfQ0hOTDEgfCBcCisJCQkJQ1NSX0ZIX0lOVF9CSVRfVFhfQ0hOTDApCiAKIC8qIEdQSU8gKi8KICNkZWZpbmUgQ1NSX0dQSU9fSU5fQklUX0FVWF9QT1dFUiAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDIwMCkKQEAgLTI2OCw3ICsyNDgsNyBAQAogICogICAgICAgICBJbmRpY2F0ZXMgTUFDICh1Y29kZSBwcm9jZXNzb3IsIGV0Yy4pIGlzIHBvd2VyZWQgdXAgYW5kIGNhbiBydW4uCiAgKiAgICAgICAgIEludGVybmFsIHJlc291cmNlcyBhcmUgYWNjZXNzaWJsZS4KICAqICAgICAgICAgTk9URTogIFRoaXMgZG9lcyBub3QgaW5kaWNhdGUgdGhhdCB0aGUgcHJvY2Vzc29yIGlzIGFjdHVhbGx5IHJ1bm5pbmcuCi0gKiAgICAgICAgIE5PVEU6ICBUaGlzIGRvZXMgbm90IGluZGljYXRlIHRoYXQgNDk2NSBvciAzOTQ1IGhhcyBjb21wbGV0ZWQKKyAqICAgICAgICAgTk9URTogIFRoaXMgZG9lcyBub3QgaW5kaWNhdGUgdGhhdCBkZXZpY2UgaGFzIGNvbXBsZXRlZAogICogICAgICAgICAgICAgICAgaW5pdCBvciBwb3N0LXBvd2VyLWRvd24gcmVzdG9yZSBvZiBpbnRlcm5hbCBTUkFNIG1lbW9yeS4KICAqICAgICAgICAgICAgICAgIFVzZSBDU1JfVUNPREVfRFJWX0dQMV9CSVRfTUFDX1NMRUVQIGFzIGluZGljYXRpb24gdGhhdAogICogICAgICAgICAgICAgICAgU1JBTSBpcyByZXN0b3JlZCBhbmQgdUNvZGUgaXMgaW4gbm9ybWFsIG9wZXJhdGlvbiBtb2RlLgpAQCAtMjkxLDggKzI3MSw2IEBACiAKIC8qIEhXIFJFViAqLwogI2RlZmluZSBDU1JfSFdfUkVWX1RZUEVfTVNLICAgICAgICAgICAgKDB4MDAwMDFGMCkKLSNkZWZpbmUgQ1NSX0hXX1JFVl9UWVBFXzM5NDUgICAgICAgICAgICgweDAwMDAwRDApCi0jZGVmaW5lIENTUl9IV19SRVZfVFlQRV80OTY1ICAgICAgICAgICAoMHgwMDAwMDAwKQogI2RlZmluZSBDU1JfSFdfUkVWX1RZUEVfNTMwMCAgICAgICAgICAgKDB4MDAwMDAyMCkKICNkZWZpbmUgQ1NSX0hXX1JFVl9UWVBFXzUzNTAgICAgICAgICAgICgweDAwMDAwMzApCiAjZGVmaW5lIENTUl9IV19SRVZfVFlQRV81MTAwICAgICAgICAgICAoMHgwMDAwMDUwKQpAQCAtMzYzLDcgKzM0MSw3IEBACiAgKiAgICAgMDogIE1BQ19TTEVFUAogICogICAgICAgICB1Q29kZSBzZXRzIHRoaXMgd2hlbiBwcmVwYXJpbmcgYSBwb3dlci1zYXZpbmcgcG93ZXItZG93bi4KICAqICAgICAgICAgdUNvZGUgcmVzZXRzIHRoaXMgd2hlbiBwb3dlci11cCBpcyBjb21wbGV0ZSBhbmQgU1JBTSBpcyBzYW5lLgotICogICAgICAgICBOT1RFOiAgMzk0NS80OTY1IHNhdmVzIGludGVybmFsIFNSQU0gZGF0YSB0byBob3N0IHdoZW4gcG93ZXJpbmcgZG93biwKKyAqICAgICAgICAgTk9URTogIGRldmljZSBzYXZlcyBpbnRlcm5hbCBTUkFNIGRhdGEgdG8gaG9zdCB3aGVuIHBvd2VyaW5nIGRvd24sCiAgKiAgICAgICAgICAgICAgICBhbmQgbXVzdCByZXN0b3JlIHRoaXMgZGF0YSBhZnRlciBwb3dlcmluZyBiYWNrIHVwLgogICogICAgICAgICAgICAgICAgTUFDX1NMRUVQIGlzIHRoZSBiZXN0IGluZGljYXRpb24gdGhhdCByZXN0b3JlIGlzIGNvbXBsZXRlLgogICogICAgICAgICAgICAgICAgTGF0ZXIgZGV2aWNlcyAoNXh4eC82eHh4LzF4eHgpIHVzZSBub24tdm9sYXRpbGUgU1JBTSwgYW5kCkBAIC0zOTQsNyArMzcyLDYgQEAKICNkZWZpbmUgQ1NSX0xFRF9SRUdfVFJVTl9PRkYgKDB4MzgpCiAKIC8qIEFOQV9QTEwgKi8KLSNkZWZpbmUgQ1NSMzlfQU5BX1BMTF9DRkdfVkFMICAgICAgICAoMHgwMTAwMDAwMCkKICNkZWZpbmUgQ1NSNTBfQU5BX1BMTF9DRkdfVkFMICAgICAgICAoMHgwMDg4MDMwMCkKIAogLyogSFBFVCBNRU0gZGVidWcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Zy5oCmluZGV4IGViZGVhM2IuLjI4MjRjY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWcuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdC4KICAqCkBAIC0xNDYsNyArMTQ2LDYgQEAKICNkZWZpbmUgSVdMX0RMX1JYCQkoMSA8PCAyNCkKICNkZWZpbmUgSVdMX0RMX0lTUgkJKDEgPDwgMjUpCiAjZGVmaW5lIElXTF9ETF9IVAkJKDEgPDwgMjYpCi0jZGVmaW5lIElXTF9ETF9JTwkJKDEgPDwgMjcpCiAvKiAweEYwMDAwMDAwIC0gMHgxMDAwMDAwMCAqLwogI2RlZmluZSBJV0xfRExfMTFICQkoMSA8PCAyOCkKICNkZWZpbmUgSVdMX0RMX1NUQVRTCQkoMSA8PCAyOSkKQEAgLTE3NCw3ICsxNzMsNiBAQAogCQlJV0xfREVCVUdfTElNSVQocCwgSVdMX0RMX0RST1AsIGYsICMjIGEpCiAjZGVmaW5lIElXTF9ERUJVR19BUChwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX0FQLCBmLCAjIyBhKQogI2RlZmluZSBJV0xfREVCVUdfVFhQT1dFUihwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX1RYUE9XRVIsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19JTyhwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX0lPLCBmLCAjIyBhKQogI2RlZmluZSBJV0xfREVCVUdfUkFURShwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX1JBVEUsIGYsICMjIGEpCiAjZGVmaW5lIElXTF9ERUJVR19SQVRFX0xJTUlUKHAsIGYsIGEuLi4pCVwKIAkJSVdMX0RFQlVHX0xJTUlUKHAsIElXTF9ETF9SQVRFLCBmLCAjIyBhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWdmcy5jCmluZGV4IDg4NDI0MTEuLjBlNmEwNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnZnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Z2ZzLmMKQEAgLTIsNyArMiw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJpd2wtZGVidWcuaCIKICNpbmNsdWRlICJpd2wtY29yZS5oIgogI2luY2x1ZGUgIml3bC1pby5oIgorI2luY2x1ZGUgIml3bC1hZ24uaCIKIAogLyogY3JlYXRlIGFuZCByZW1vdmUgb2YgZmlsZXMgKi8KICNkZWZpbmUgREVCVUdGU19BRERfRklMRShuYW1lLCBwYXJlbnQsIG1vZGUpIGRvIHsJCQlcCkBAIC0yMjYsMTAgKzIyNywxMCBAQAogCS8qIGRlZmF1bHQgaXMgdG8gZHVtcCB0aGUgZW50aXJlIGRhdGEgc2VnbWVudCAqLwogCWlmICghcHJpdi0+ZGJnZnNfc3JhbV9vZmZzZXQgJiYgIXByaXYtPmRiZ2ZzX3NyYW1fbGVuKSB7CiAJCXByaXYtPmRiZ2ZzX3NyYW1fb2Zmc2V0ID0gMHg4MDAwMDA7Ci0JCWlmIChwcml2LT51Y29kZV90eXBlID09IFVDT0RFX0lOSVQpCi0JCQlwcml2LT5kYmdmc19zcmFtX2xlbiA9IHByaXYtPnVjb2RlX2luaXRfZGF0YS5sZW47CisJCWlmIChwcml2LT51Y29kZV90eXBlID09IFVDT0RFX1NVQlRZUEVfSU5JVCkKKwkJCXByaXYtPmRiZ2ZzX3NyYW1fbGVuID0gcHJpdi0+dWNvZGVfaW5pdC5kYXRhLmxlbjsKIAkJZWxzZQotCQkJcHJpdi0+ZGJnZnNfc3JhbV9sZW4gPSBwcml2LT51Y29kZV9kYXRhLmxlbjsKKwkJCXByaXYtPmRiZ2ZzX3NyYW1fbGVuID0gcHJpdi0+dWNvZGVfcnQuZGF0YS5sZW47CiAJfQogCWxlbiA9IHByaXYtPmRiZ2ZzX3NyYW1fbGVuOwogCkBAIC00MzcsOCArNDM4LDcgQEAKIAlpbnQgcG9zID0gMDsKIAlzc2l6ZV90IHJldCA9IC1FTk9NRU07CiAKLQlyZXQgPSBwb3MgPSBwcml2LT5jZmctPm9wcy0+bGliLT5kdW1wX25pY19ldmVudF9sb2coCi0JCQkJCXByaXYsIHRydWUsICZidWYsIHRydWUpOworCXJldCA9IHBvcyA9IGl3bF9kdW1wX25pY19ldmVudF9sb2cocHJpdiwgdHJ1ZSwgJmJ1ZiwgdHJ1ZSk7CiAJaWYgKGJ1ZikgewogCQlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKIAkJa2ZyZWUoYnVmKTsKQEAgLTQ2Miw4ICs0NjIsNyBAQAogCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmZXZlbnRfbG9nX2ZsYWcpICE9IDEpCiAJCXJldHVybiAtRUZBVUxUOwogCWlmIChldmVudF9sb2dfZmxhZyA9PSAxKQotCQlwcml2LT5jZmctPm9wcy0+bGliLT5kdW1wX25pY19ldmVudF9sb2cocHJpdiwgdHJ1ZSwKLQkJCQkJCQlOVUxMLCBmYWxzZSk7CisJCWl3bF9kdW1wX25pY19ldmVudF9sb2cocHJpdiwgdHJ1ZSwgTlVMTCwgZmFsc2UpOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMTAzOSwxMyArMTAzOCw0NjMgQEAKIAlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CiB9CiAKK3N0YXRpYyBjb25zdCBjaGFyICpmbXRfdmFsdWUgPSAiICAlLTMwcyAlMTB1XG4iOworc3RhdGljIGNvbnN0IGNoYXIgKmZtdF9oZXggICA9ICIgICUtMzBzICAgICAgIDB4JTAyWFxuIjsKK3N0YXRpYyBjb25zdCBjaGFyICpmbXRfdGFibGUgPSAiICAlLTMwcyAlMTB1ICAlMTB1ICAlMTB1ICAlMTB1XG4iOworc3RhdGljIGNvbnN0IGNoYXIgKmZtdF9oZWFkZXIgPQorCSIlLTMycyAgICBjdXJyZW50ICBjdW11bGF0aXZlICAgICAgIGRlbHRhICAgICAgICAgbWF4XG4iOworCitzdGF0aWMgaW50IGl3bF9zdGF0aXN0aWNzX2ZsYWcoc3RydWN0IGl3bF9wcml2ICpwcml2LCBjaGFyICpidWYsIGludCBidWZzeikKK3sKKwlpbnQgcCA9IDA7CisJdTMyIGZsYWc7CisKKwlmbGFnID0gbGUzMl90b19jcHUocHJpdi0+c3RhdGlzdGljcy5mbGFnKTsKKworCXAgKz0gc2NucHJpbnRmKGJ1ZiArIHAsIGJ1ZnN6IC0gcCwgIlN0YXRpc3RpY3MgRmxhZygweCVYKTpcbiIsIGZsYWcpOworCWlmIChmbGFnICYgVUNPREVfU1RBVElTVElDU19DTEVBUl9NU0spCisJCXAgKz0gc2NucHJpbnRmKGJ1ZiArIHAsIGJ1ZnN6IC0gcCwKKwkJIlx0U3RhdGlzdGljcyBoYXZlIGJlZW4gY2xlYXJlZFxuIik7CisJcCArPSBzY25wcmludGYoYnVmICsgcCwgYnVmc3ogLSBwLCAiXHRPcGVyYXRpb25hbCBGcmVxdWVuY3k6ICVzXG4iLAorCQkoZmxhZyAmIFVDT0RFX1NUQVRJU1RJQ1NfRlJFUVVFTkNZX01TSykKKwkJPyAiMi40IEdIeiIgOiAiNS4yIEdIeiIpOworCXAgKz0gc2NucHJpbnRmKGJ1ZiArIHAsIGJ1ZnN6IC0gcCwgIlx0VEdqIE5hcnJvdyBCYW5kOiAlc1xuIiwKKwkJKGZsYWcgJiBVQ09ERV9TVEFUSVNUSUNTX05BUlJPV19CQU5EX01TSykKKwkJID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7CisKKwlyZXR1cm4gcDsKK30KKwogc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX3Vjb2RlX3J4X3N0YXRzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKIAkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXJldHVybiBwcml2LT5jZmctPm9wcy0+bGliLT5kZWJ1Z2ZzX29wcy5yeF9zdGF0c19yZWFkKGZpbGUsCi0JCQl1c2VyX2J1ZiwgY291bnQsIHBwb3MpOworCWludCBwb3MgPSAwOworCWNoYXIgKmJ1ZjsKKwlpbnQgYnVmc3ogPSBzaXplb2Yoc3RydWN0IHN0YXRpc3RpY3NfcnhfcGh5KSAqIDQwICsKKwkJICAgIHNpemVvZihzdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5KSAqIDQwICsKKwkJICAgIHNpemVvZihzdHJ1Y3Qgc3RhdGlzdGljc19yeF9odF9waHkpICogNDAgKyA0MDA7CisJc3NpemVfdCByZXQ7CisJc3RydWN0IHN0YXRpc3RpY3NfcnhfcGh5ICpvZmRtLCAqYWNjdW1fb2ZkbSwgKmRlbHRhX29mZG0sICptYXhfb2ZkbTsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkgKmNjaywgKmFjY3VtX2NjaywgKmRlbHRhX2NjaywgKm1heF9jY2s7CisJc3RydWN0IHN0YXRpc3RpY3Nfcnhfbm9uX3BoeSAqZ2VuZXJhbCwgKmFjY3VtX2dlbmVyYWw7CisJc3RydWN0IHN0YXRpc3RpY3Nfcnhfbm9uX3BoeSAqZGVsdGFfZ2VuZXJhbCwgKm1heF9nZW5lcmFsOworCXN0cnVjdCBzdGF0aXN0aWNzX3J4X2h0X3BoeSAqaHQsICphY2N1bV9odCwgKmRlbHRhX2h0LCAqbWF4X2h0OworCisJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCisJCXJldHVybiAtRUFHQUlOOworCisJYnVmID0ga3phbGxvYyhidWZzeiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpIHsKKwkJSVdMX0VSUihwcml2LCAiQ2FuIG5vdCBhbGxvY2F0ZSBCdWZmZXJcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKgorCSAqIHRoZSBzdGF0aXN0aWMgaW5mb3JtYXRpb24gZGlzcGxheSBoZXJlIGlzIGJhc2VkIG9uCisJICogdGhlIGxhc3Qgc3RhdGlzdGljcyBub3RpZmljYXRpb24gZnJvbSB1Q29kZQorCSAqIG1pZ2h0IG5vdCByZWZsZWN0IHRoZSBjdXJyZW50IHVDb2RlIGFjdGl2aXR5CisJICovCisJb2ZkbSA9ICZwcml2LT5zdGF0aXN0aWNzLnJ4X29mZG07CisJY2NrID0gJnByaXYtPnN0YXRpc3RpY3MucnhfY2NrOworCWdlbmVyYWwgPSAmcHJpdi0+c3RhdGlzdGljcy5yeF9ub25fcGh5OworCWh0ID0gJnByaXYtPnN0YXRpc3RpY3Mucnhfb2ZkbV9odDsKKwlhY2N1bV9vZmRtID0gJnByaXYtPmFjY3VtX3N0YXRzLnJ4X29mZG07CisJYWNjdW1fY2NrID0gJnByaXYtPmFjY3VtX3N0YXRzLnJ4X2NjazsKKwlhY2N1bV9nZW5lcmFsID0gJnByaXYtPmFjY3VtX3N0YXRzLnJ4X25vbl9waHk7CisJYWNjdW1faHQgPSAmcHJpdi0+YWNjdW1fc3RhdHMucnhfb2ZkbV9odDsKKwlkZWx0YV9vZmRtID0gJnByaXYtPmRlbHRhX3N0YXRzLnJ4X29mZG07CisJZGVsdGFfY2NrID0gJnByaXYtPmRlbHRhX3N0YXRzLnJ4X2NjazsKKwlkZWx0YV9nZW5lcmFsID0gJnByaXYtPmRlbHRhX3N0YXRzLnJ4X25vbl9waHk7CisJZGVsdGFfaHQgPSAmcHJpdi0+ZGVsdGFfc3RhdHMucnhfb2ZkbV9odDsKKwltYXhfb2ZkbSA9ICZwcml2LT5tYXhfZGVsdGFfc3RhdHMucnhfb2ZkbTsKKwltYXhfY2NrID0gJnByaXYtPm1heF9kZWx0YV9zdGF0cy5yeF9jY2s7CisJbWF4X2dlbmVyYWwgPSAmcHJpdi0+bWF4X2RlbHRhX3N0YXRzLnJ4X25vbl9waHk7CisJbWF4X2h0ID0gJnByaXYtPm1heF9kZWx0YV9zdGF0cy5yeF9vZmRtX2h0OworCisJcG9zICs9IGl3bF9zdGF0aXN0aWNzX2ZsYWcocHJpdiwgYnVmLCBidWZzeik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF9oZWFkZXIsICJTdGF0aXN0aWNzX1J4IC0gT0ZETToiKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiaW5hX2NudDoiLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmluYV9jbnQpLAorCQkJIGFjY3VtX29mZG0tPmluYV9jbnQsCisJCQkgZGVsdGFfb2ZkbS0+aW5hX2NudCwgbWF4X29mZG0tPmluYV9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJmaW5hX2NudDoiLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmZpbmFfY250KSwgYWNjdW1fb2ZkbS0+ZmluYV9jbnQsCisJCQkgZGVsdGFfb2ZkbS0+ZmluYV9jbnQsIG1heF9vZmRtLT5maW5hX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgInBsY3BfZXJyOiIsCisJCQkgbGUzMl90b19jcHUob2ZkbS0+cGxjcF9lcnIpLCBhY2N1bV9vZmRtLT5wbGNwX2VyciwKKwkJCSBkZWx0YV9vZmRtLT5wbGNwX2VyciwgbWF4X29mZG0tPnBsY3BfZXJyKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiY3JjMzJfZXJyOiIsCisJCQkgbGUzMl90b19jcHUob2ZkbS0+Y3JjMzJfZXJyKSwgYWNjdW1fb2ZkbS0+Y3JjMzJfZXJyLAorCQkJIGRlbHRhX29mZG0tPmNyYzMyX2VyciwgbWF4X29mZG0tPmNyYzMyX2Vycik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgIm92ZXJydW5fZXJyOiIsCisJCQkgbGUzMl90b19jcHUob2ZkbS0+b3ZlcnJ1bl9lcnIpLAorCQkJIGFjY3VtX29mZG0tPm92ZXJydW5fZXJyLCBkZWx0YV9vZmRtLT5vdmVycnVuX2VyciwKKwkJCSBtYXhfb2ZkbS0+b3ZlcnJ1bl9lcnIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJlYXJseV9vdmVycnVuX2VycjoiLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmVhcmx5X292ZXJydW5fZXJyKSwKKwkJCSBhY2N1bV9vZmRtLT5lYXJseV9vdmVycnVuX2VyciwKKwkJCSBkZWx0YV9vZmRtLT5lYXJseV9vdmVycnVuX2VyciwKKwkJCSBtYXhfb2ZkbS0+ZWFybHlfb3ZlcnJ1bl9lcnIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJjcmMzMl9nb29kOiIsCisJCQkgbGUzMl90b19jcHUob2ZkbS0+Y3JjMzJfZ29vZCksCisJCQkgYWNjdW1fb2ZkbS0+Y3JjMzJfZ29vZCwgZGVsdGFfb2ZkbS0+Y3JjMzJfZ29vZCwKKwkJCSBtYXhfb2ZkbS0+Y3JjMzJfZ29vZCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImZhbHNlX2FsYXJtX2NudDoiLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmZhbHNlX2FsYXJtX2NudCksCisJCQkgYWNjdW1fb2ZkbS0+ZmFsc2VfYWxhcm1fY250LAorCQkJIGRlbHRhX29mZG0tPmZhbHNlX2FsYXJtX2NudCwKKwkJCSBtYXhfb2ZkbS0+ZmFsc2VfYWxhcm1fY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiZmluYV9zeW5jX2Vycl9jbnQ6IiwKKwkJCSBsZTMyX3RvX2NwdShvZmRtLT5maW5hX3N5bmNfZXJyX2NudCksCisJCQkgYWNjdW1fb2ZkbS0+ZmluYV9zeW5jX2Vycl9jbnQsCisJCQkgZGVsdGFfb2ZkbS0+ZmluYV9zeW5jX2Vycl9jbnQsCisJCQkgbWF4X29mZG0tPmZpbmFfc3luY19lcnJfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAic2ZkX3RpbWVvdXQ6IiwKKwkJCSBsZTMyX3RvX2NwdShvZmRtLT5zZmRfdGltZW91dCksCisJCQkgYWNjdW1fb2ZkbS0+c2ZkX3RpbWVvdXQsIGRlbHRhX29mZG0tPnNmZF90aW1lb3V0LAorCQkJIG1heF9vZmRtLT5zZmRfdGltZW91dCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImZpbmFfdGltZW91dDoiLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmZpbmFfdGltZW91dCksCisJCQkgYWNjdW1fb2ZkbS0+ZmluYV90aW1lb3V0LCBkZWx0YV9vZmRtLT5maW5hX3RpbWVvdXQsCisJCQkgbWF4X29mZG0tPmZpbmFfdGltZW91dCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgInVucmVzcG9uZGVkX3J0czoiLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPnVucmVzcG9uZGVkX3J0cyksCisJCQkgYWNjdW1fb2ZkbS0+dW5yZXNwb25kZWRfcnRzLAorCQkJIGRlbHRhX29mZG0tPnVucmVzcG9uZGVkX3J0cywKKwkJCSBtYXhfb2ZkbS0+dW5yZXNwb25kZWRfcnRzKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAicnhlX2ZyYW1lX2xtdF9vdnJ1bjoiLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPnJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuKSwKKwkJCSBhY2N1bV9vZmRtLT5yeGVfZnJhbWVfbGltaXRfb3ZlcnJ1biwKKwkJCSBkZWx0YV9vZmRtLT5yeGVfZnJhbWVfbGltaXRfb3ZlcnJ1biwKKwkJCSBtYXhfb2ZkbS0+cnhlX2ZyYW1lX2xpbWl0X292ZXJydW4pOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJzZW50X2Fja19jbnQ6IiwKKwkJCSBsZTMyX3RvX2NwdShvZmRtLT5zZW50X2Fja19jbnQpLAorCQkJIGFjY3VtX29mZG0tPnNlbnRfYWNrX2NudCwgZGVsdGFfb2ZkbS0+c2VudF9hY2tfY250LAorCQkJIG1heF9vZmRtLT5zZW50X2Fja19jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJzZW50X2N0c19jbnQ6IiwKKwkJCSBsZTMyX3RvX2NwdShvZmRtLT5zZW50X2N0c19jbnQpLAorCQkJIGFjY3VtX29mZG0tPnNlbnRfY3RzX2NudCwgZGVsdGFfb2ZkbS0+c2VudF9jdHNfY250LAorCQkJIG1heF9vZmRtLT5zZW50X2N0c19jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJzZW50X2JhX3JzcF9jbnQ6IiwKKwkJCSBsZTMyX3RvX2NwdShvZmRtLT5zZW50X2JhX3JzcF9jbnQpLAorCQkJIGFjY3VtX29mZG0tPnNlbnRfYmFfcnNwX2NudCwKKwkJCSBkZWx0YV9vZmRtLT5zZW50X2JhX3JzcF9jbnQsCisJCQkgbWF4X29mZG0tPnNlbnRfYmFfcnNwX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImRzcF9zZWxmX2tpbGw6IiwKKwkJCSBsZTMyX3RvX2NwdShvZmRtLT5kc3Bfc2VsZl9raWxsKSwKKwkJCSBhY2N1bV9vZmRtLT5kc3Bfc2VsZl9raWxsLAorCQkJIGRlbHRhX29mZG0tPmRzcF9zZWxmX2tpbGwsCisJCQkgbWF4X29mZG0tPmRzcF9zZWxmX2tpbGwpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJtaF9mb3JtYXRfZXJyOiIsCisJCQkgbGUzMl90b19jcHUob2ZkbS0+bWhfZm9ybWF0X2VyciksCisJCQkgYWNjdW1fb2ZkbS0+bWhfZm9ybWF0X2VyciwKKwkJCSBkZWx0YV9vZmRtLT5taF9mb3JtYXRfZXJyLAorCQkJIG1heF9vZmRtLT5taF9mb3JtYXRfZXJyKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAicmVfYWNxX21haW5fcnNzaV9zdW06IiwKKwkJCSBsZTMyX3RvX2NwdShvZmRtLT5yZV9hY3FfbWFpbl9yc3NpX3N1bSksCisJCQkgYWNjdW1fb2ZkbS0+cmVfYWNxX21haW5fcnNzaV9zdW0sCisJCQkgZGVsdGFfb2ZkbS0+cmVfYWNxX21haW5fcnNzaV9zdW0sCisJCQkgbWF4X29mZG0tPnJlX2FjcV9tYWluX3Jzc2lfc3VtKTsKKworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfaGVhZGVyLCAiU3RhdGlzdGljc19SeCAtIENDSzoiKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiaW5hX2NudDoiLAorCQkJIGxlMzJfdG9fY3B1KGNjay0+aW5hX2NudCksIGFjY3VtX2Njay0+aW5hX2NudCwKKwkJCSBkZWx0YV9jY2stPmluYV9jbnQsIG1heF9jY2stPmluYV9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJmaW5hX2NudDoiLAorCQkJIGxlMzJfdG9fY3B1KGNjay0+ZmluYV9jbnQpLCBhY2N1bV9jY2stPmZpbmFfY250LAorCQkJIGRlbHRhX2Njay0+ZmluYV9jbnQsIG1heF9jY2stPmZpbmFfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAicGxjcF9lcnI6IiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPnBsY3BfZXJyKSwgYWNjdW1fY2NrLT5wbGNwX2VyciwKKwkJCSBkZWx0YV9jY2stPnBsY3BfZXJyLCBtYXhfY2NrLT5wbGNwX2Vycik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImNyYzMyX2VycjoiLAorCQkJIGxlMzJfdG9fY3B1KGNjay0+Y3JjMzJfZXJyKSwgYWNjdW1fY2NrLT5jcmMzMl9lcnIsCisJCQkgZGVsdGFfY2NrLT5jcmMzMl9lcnIsIG1heF9jY2stPmNyYzMyX2Vycik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgIm92ZXJydW5fZXJyOiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5vdmVycnVuX2VyciksCisJCQkgYWNjdW1fY2NrLT5vdmVycnVuX2VyciwgZGVsdGFfY2NrLT5vdmVycnVuX2VyciwKKwkJCSBtYXhfY2NrLT5vdmVycnVuX2Vycik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImVhcmx5X292ZXJydW5fZXJyOiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5lYXJseV9vdmVycnVuX2VyciksCisJCQkgYWNjdW1fY2NrLT5lYXJseV9vdmVycnVuX2VyciwKKwkJCSBkZWx0YV9jY2stPmVhcmx5X292ZXJydW5fZXJyLAorCQkJIG1heF9jY2stPmVhcmx5X292ZXJydW5fZXJyKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiY3JjMzJfZ29vZDoiLAorCQkJIGxlMzJfdG9fY3B1KGNjay0+Y3JjMzJfZ29vZCksIGFjY3VtX2Njay0+Y3JjMzJfZ29vZCwKKwkJCSBkZWx0YV9jY2stPmNyYzMyX2dvb2QsIG1heF9jY2stPmNyYzMyX2dvb2QpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJmYWxzZV9hbGFybV9jbnQ6IiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPmZhbHNlX2FsYXJtX2NudCksCisJCQkgYWNjdW1fY2NrLT5mYWxzZV9hbGFybV9jbnQsCisJCQkgZGVsdGFfY2NrLT5mYWxzZV9hbGFybV9jbnQsIG1heF9jY2stPmZhbHNlX2FsYXJtX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImZpbmFfc3luY19lcnJfY250OiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5maW5hX3N5bmNfZXJyX2NudCksCisJCQkgYWNjdW1fY2NrLT5maW5hX3N5bmNfZXJyX2NudCwKKwkJCSBkZWx0YV9jY2stPmZpbmFfc3luY19lcnJfY250LAorCQkJIG1heF9jY2stPmZpbmFfc3luY19lcnJfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAic2ZkX3RpbWVvdXQ6IiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPnNmZF90aW1lb3V0KSwKKwkJCSBhY2N1bV9jY2stPnNmZF90aW1lb3V0LCBkZWx0YV9jY2stPnNmZF90aW1lb3V0LAorCQkJIG1heF9jY2stPnNmZF90aW1lb3V0KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiZmluYV90aW1lb3V0OiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5maW5hX3RpbWVvdXQpLAorCQkJIGFjY3VtX2Njay0+ZmluYV90aW1lb3V0LCBkZWx0YV9jY2stPmZpbmFfdGltZW91dCwKKwkJCSBtYXhfY2NrLT5maW5hX3RpbWVvdXQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJ1bnJlc3BvbmRlZF9ydHM6IiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPnVucmVzcG9uZGVkX3J0cyksCisJCQkgYWNjdW1fY2NrLT51bnJlc3BvbmRlZF9ydHMsIGRlbHRhX2Njay0+dW5yZXNwb25kZWRfcnRzLAorCQkJIG1heF9jY2stPnVucmVzcG9uZGVkX3J0cyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgInJ4ZV9mcmFtZV9sbXRfb3ZydW46IiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPnJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuKSwKKwkJCSBhY2N1bV9jY2stPnJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuLAorCQkJIGRlbHRhX2Njay0+cnhlX2ZyYW1lX2xpbWl0X292ZXJydW4sCisJCQkgbWF4X2Njay0+cnhlX2ZyYW1lX2xpbWl0X292ZXJydW4pOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJzZW50X2Fja19jbnQ6IiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPnNlbnRfYWNrX2NudCksCisJCQkgYWNjdW1fY2NrLT5zZW50X2Fja19jbnQsIGRlbHRhX2Njay0+c2VudF9hY2tfY250LAorCQkJIG1heF9jY2stPnNlbnRfYWNrX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgInNlbnRfY3RzX2NudDoiLAorCQkJIGxlMzJfdG9fY3B1KGNjay0+c2VudF9jdHNfY250KSwKKwkJCSBhY2N1bV9jY2stPnNlbnRfY3RzX2NudCwgZGVsdGFfY2NrLT5zZW50X2N0c19jbnQsCisJCQkgbWF4X2Njay0+c2VudF9jdHNfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAic2VudF9iYV9yc3BfY250OiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5zZW50X2JhX3JzcF9jbnQpLAorCQkJIGFjY3VtX2Njay0+c2VudF9iYV9yc3BfY250LAorCQkJIGRlbHRhX2Njay0+c2VudF9iYV9yc3BfY250LAorCQkJIG1heF9jY2stPnNlbnRfYmFfcnNwX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImRzcF9zZWxmX2tpbGw6IiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPmRzcF9zZWxmX2tpbGwpLAorCQkJIGFjY3VtX2Njay0+ZHNwX3NlbGZfa2lsbCwgZGVsdGFfY2NrLT5kc3Bfc2VsZl9raWxsLAorCQkJIG1heF9jY2stPmRzcF9zZWxmX2tpbGwpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJtaF9mb3JtYXRfZXJyOiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5taF9mb3JtYXRfZXJyKSwKKwkJCSBhY2N1bV9jY2stPm1oX2Zvcm1hdF9lcnIsIGRlbHRhX2Njay0+bWhfZm9ybWF0X2VyciwKKwkJCSBtYXhfY2NrLT5taF9mb3JtYXRfZXJyKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAicmVfYWNxX21haW5fcnNzaV9zdW06IiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPnJlX2FjcV9tYWluX3Jzc2lfc3VtKSwKKwkJCSBhY2N1bV9jY2stPnJlX2FjcV9tYWluX3Jzc2lfc3VtLAorCQkJIGRlbHRhX2Njay0+cmVfYWNxX21haW5fcnNzaV9zdW0sCisJCQkgbWF4X2Njay0+cmVfYWNxX21haW5fcnNzaV9zdW0pOworCisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF9oZWFkZXIsICJTdGF0aXN0aWNzX1J4IC0gR0VORVJBTDoiKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYm9ndXNfY3RzOiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+Ym9ndXNfY3RzKSwKKwkJCSBhY2N1bV9nZW5lcmFsLT5ib2d1c19jdHMsIGRlbHRhX2dlbmVyYWwtPmJvZ3VzX2N0cywKKwkJCSBtYXhfZ2VuZXJhbC0+Ym9ndXNfY3RzKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYm9ndXNfYWNrOiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+Ym9ndXNfYWNrKSwKKwkJCSBhY2N1bV9nZW5lcmFsLT5ib2d1c19hY2ssIGRlbHRhX2dlbmVyYWwtPmJvZ3VzX2FjaywKKwkJCSBtYXhfZ2VuZXJhbC0+Ym9ndXNfYWNrKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAibm9uX2Jzc2lkX2ZyYW1lczoiLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPm5vbl9ic3NpZF9mcmFtZXMpLAorCQkJIGFjY3VtX2dlbmVyYWwtPm5vbl9ic3NpZF9mcmFtZXMsCisJCQkgZGVsdGFfZ2VuZXJhbC0+bm9uX2Jzc2lkX2ZyYW1lcywKKwkJCSBtYXhfZ2VuZXJhbC0+bm9uX2Jzc2lkX2ZyYW1lcyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImZpbHRlcmVkX2ZyYW1lczoiLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmZpbHRlcmVkX2ZyYW1lcyksCisJCQkgYWNjdW1fZ2VuZXJhbC0+ZmlsdGVyZWRfZnJhbWVzLAorCQkJIGRlbHRhX2dlbmVyYWwtPmZpbHRlcmVkX2ZyYW1lcywKKwkJCSBtYXhfZ2VuZXJhbC0+ZmlsdGVyZWRfZnJhbWVzKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAibm9uX2NoYW5uZWxfYmVhY29uczoiLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPm5vbl9jaGFubmVsX2JlYWNvbnMpLAorCQkJIGFjY3VtX2dlbmVyYWwtPm5vbl9jaGFubmVsX2JlYWNvbnMsCisJCQkgZGVsdGFfZ2VuZXJhbC0+bm9uX2NoYW5uZWxfYmVhY29ucywKKwkJCSBtYXhfZ2VuZXJhbC0+bm9uX2NoYW5uZWxfYmVhY29ucyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImNoYW5uZWxfYmVhY29uczoiLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmNoYW5uZWxfYmVhY29ucyksCisJCQkgYWNjdW1fZ2VuZXJhbC0+Y2hhbm5lbF9iZWFjb25zLAorCQkJIGRlbHRhX2dlbmVyYWwtPmNoYW5uZWxfYmVhY29ucywKKwkJCSBtYXhfZ2VuZXJhbC0+Y2hhbm5lbF9iZWFjb25zKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAibnVtX21pc3NlZF9iY29uOiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+bnVtX21pc3NlZF9iY29uKSwKKwkJCSBhY2N1bV9nZW5lcmFsLT5udW1fbWlzc2VkX2Jjb24sCisJCQkgZGVsdGFfZ2VuZXJhbC0+bnVtX21pc3NlZF9iY29uLAorCQkJIG1heF9nZW5lcmFsLT5udW1fbWlzc2VkX2Jjb24pOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJhZGNfcnhfc2F0dXJhdGlvbl90aW1lOiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+YWRjX3J4X3NhdHVyYXRpb25fdGltZSksCisJCQkgYWNjdW1fZ2VuZXJhbC0+YWRjX3J4X3NhdHVyYXRpb25fdGltZSwKKwkJCSBkZWx0YV9nZW5lcmFsLT5hZGNfcnhfc2F0dXJhdGlvbl90aW1lLAorCQkJIG1heF9nZW5lcmFsLT5hZGNfcnhfc2F0dXJhdGlvbl90aW1lKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiaW5hX2RldGVjdF9zZWFyY2hfdG06IiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5pbmFfZGV0ZWN0aW9uX3NlYXJjaF90aW1lKSwKKwkJCSBhY2N1bV9nZW5lcmFsLT5pbmFfZGV0ZWN0aW9uX3NlYXJjaF90aW1lLAorCQkJIGRlbHRhX2dlbmVyYWwtPmluYV9kZXRlY3Rpb25fc2VhcmNoX3RpbWUsCisJCQkgbWF4X2dlbmVyYWwtPmluYV9kZXRlY3Rpb25fc2VhcmNoX3RpbWUpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJiZWFjb25fc2lsZW5jZV9yc3NpX2E6IiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2EpLAorCQkJIGFjY3VtX2dlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYSwKKwkJCSBkZWx0YV9nZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2EsCisJCQkgbWF4X2dlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImJlYWNvbl9zaWxlbmNlX3Jzc2lfYjoiLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYiksCisJCQkgYWNjdW1fZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9iLAorCQkJIGRlbHRhX2dlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYiwKKwkJCSBtYXhfZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9iKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYmVhY29uX3NpbGVuY2VfcnNzaV9jOiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9jKSwKKwkJCSBhY2N1bV9nZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2MsCisJCQkgZGVsdGFfZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9jLAorCQkJIG1heF9nZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2MpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJpbnRlcmZlcmVuY2VfZGF0YV9mbGFnOiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+aW50ZXJmZXJlbmNlX2RhdGFfZmxhZyksCisJCQkgYWNjdW1fZ2VuZXJhbC0+aW50ZXJmZXJlbmNlX2RhdGFfZmxhZywKKwkJCSBkZWx0YV9nZW5lcmFsLT5pbnRlcmZlcmVuY2VfZGF0YV9mbGFnLAorCQkJIG1heF9nZW5lcmFsLT5pbnRlcmZlcmVuY2VfZGF0YV9mbGFnKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiY2hhbm5lbF9sb2FkOiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+Y2hhbm5lbF9sb2FkKSwKKwkJCSBhY2N1bV9nZW5lcmFsLT5jaGFubmVsX2xvYWQsCisJCQkgZGVsdGFfZ2VuZXJhbC0+Y2hhbm5lbF9sb2FkLAorCQkJIG1heF9nZW5lcmFsLT5jaGFubmVsX2xvYWQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJkc3BfZmFsc2VfYWxhcm1zOiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+ZHNwX2ZhbHNlX2FsYXJtcyksCisJCQkgYWNjdW1fZ2VuZXJhbC0+ZHNwX2ZhbHNlX2FsYXJtcywKKwkJCSBkZWx0YV9nZW5lcmFsLT5kc3BfZmFsc2VfYWxhcm1zLAorCQkJIG1heF9nZW5lcmFsLT5kc3BfZmFsc2VfYWxhcm1zKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYmVhY29uX3Jzc2lfYToiLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJlYWNvbl9yc3NpX2EpLAorCQkJIGFjY3VtX2dlbmVyYWwtPmJlYWNvbl9yc3NpX2EsCisJCQkgZGVsdGFfZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYSwKKwkJCSBtYXhfZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImJlYWNvbl9yc3NpX2I6IiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5iZWFjb25fcnNzaV9iKSwKKwkJCSBhY2N1bV9nZW5lcmFsLT5iZWFjb25fcnNzaV9iLAorCQkJIGRlbHRhX2dlbmVyYWwtPmJlYWNvbl9yc3NpX2IsCisJCQkgbWF4X2dlbmVyYWwtPmJlYWNvbl9yc3NpX2IpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJiZWFjb25fcnNzaV9jOiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYyksCisJCQkgYWNjdW1fZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYywKKwkJCSBkZWx0YV9nZW5lcmFsLT5iZWFjb25fcnNzaV9jLAorCQkJIG1heF9nZW5lcmFsLT5iZWFjb25fcnNzaV9jKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYmVhY29uX2VuZXJneV9hOiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9hKSwKKwkJCSBhY2N1bV9nZW5lcmFsLT5iZWFjb25fZW5lcmd5X2EsCisJCQkgZGVsdGFfZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9hLAorCQkJIG1heF9nZW5lcmFsLT5iZWFjb25fZW5lcmd5X2EpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJiZWFjb25fZW5lcmd5X2I6IiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5iZWFjb25fZW5lcmd5X2IpLAorCQkJIGFjY3VtX2dlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYiwKKwkJCSBkZWx0YV9nZW5lcmFsLT5iZWFjb25fZW5lcmd5X2IsCisJCQkgbWF4X2dlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImJlYWNvbl9lbmVyZ3lfYzoiLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYyksCisJCQkgYWNjdW1fZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9jLAorCQkJIGRlbHRhX2dlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYywKKwkJCSBtYXhfZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9jKTsKKworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfaGVhZGVyLCAiU3RhdGlzdGljc19SeCAtIE9GRE1fSFQ6Iik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgInBsY3BfZXJyOiIsCisJCQkgbGUzMl90b19jcHUoaHQtPnBsY3BfZXJyKSwgYWNjdW1faHQtPnBsY3BfZXJyLAorCQkJIGRlbHRhX2h0LT5wbGNwX2VyciwgbWF4X2h0LT5wbGNwX2Vycik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgIm92ZXJydW5fZXJyOiIsCisJCQkgbGUzMl90b19jcHUoaHQtPm92ZXJydW5fZXJyKSwgYWNjdW1faHQtPm92ZXJydW5fZXJyLAorCQkJIGRlbHRhX2h0LT5vdmVycnVuX2VyciwgbWF4X2h0LT5vdmVycnVuX2Vycik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImVhcmx5X292ZXJydW5fZXJyOiIsCisJCQkgbGUzMl90b19jcHUoaHQtPmVhcmx5X292ZXJydW5fZXJyKSwKKwkJCSBhY2N1bV9odC0+ZWFybHlfb3ZlcnJ1bl9lcnIsCisJCQkgZGVsdGFfaHQtPmVhcmx5X292ZXJydW5fZXJyLAorCQkJIG1heF9odC0+ZWFybHlfb3ZlcnJ1bl9lcnIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJjcmMzMl9nb29kOiIsCisJCQkgbGUzMl90b19jcHUoaHQtPmNyYzMyX2dvb2QpLCBhY2N1bV9odC0+Y3JjMzJfZ29vZCwKKwkJCSBkZWx0YV9odC0+Y3JjMzJfZ29vZCwgbWF4X2h0LT5jcmMzMl9nb29kKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiY3JjMzJfZXJyOiIsCisJCQkgbGUzMl90b19jcHUoaHQtPmNyYzMyX2VyciksIGFjY3VtX2h0LT5jcmMzMl9lcnIsCisJCQkgZGVsdGFfaHQtPmNyYzMyX2VyciwgbWF4X2h0LT5jcmMzMl9lcnIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJtaF9mb3JtYXRfZXJyOiIsCisJCQkgbGUzMl90b19jcHUoaHQtPm1oX2Zvcm1hdF9lcnIpLAorCQkJIGFjY3VtX2h0LT5taF9mb3JtYXRfZXJyLAorCQkJIGRlbHRhX2h0LT5taF9mb3JtYXRfZXJyLCBtYXhfaHQtPm1oX2Zvcm1hdF9lcnIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJhZ2dfY3JjMzJfZ29vZDoiLAorCQkJIGxlMzJfdG9fY3B1KGh0LT5hZ2dfY3JjMzJfZ29vZCksCisJCQkgYWNjdW1faHQtPmFnZ19jcmMzMl9nb29kLAorCQkJIGRlbHRhX2h0LT5hZ2dfY3JjMzJfZ29vZCwgbWF4X2h0LT5hZ2dfY3JjMzJfZ29vZCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImFnZ19tcGR1X2NudDoiLAorCQkJIGxlMzJfdG9fY3B1KGh0LT5hZ2dfbXBkdV9jbnQpLAorCQkJIGFjY3VtX2h0LT5hZ2dfbXBkdV9jbnQsCisJCQkgZGVsdGFfaHQtPmFnZ19tcGR1X2NudCwgbWF4X2h0LT5hZ2dfbXBkdV9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJhZ2dfY250OiIsCisJCQkgbGUzMl90b19jcHUoaHQtPmFnZ19jbnQpLCBhY2N1bV9odC0+YWdnX2NudCwKKwkJCSBkZWx0YV9odC0+YWdnX2NudCwgbWF4X2h0LT5hZ2dfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAidW5zdXBwb3J0X21jczoiLAorCQkJIGxlMzJfdG9fY3B1KGh0LT51bnN1cHBvcnRfbWNzKSwKKwkJCSBhY2N1bV9odC0+dW5zdXBwb3J0X21jcywKKwkJCSBkZWx0YV9odC0+dW5zdXBwb3J0X21jcywgbWF4X2h0LT51bnN1cHBvcnRfbWNzKTsKKworCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX3Vjb2RlX3R4X3N0YXRzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCkBAIC0xMDUzLDggKzE1MDIsMTkwIEBACiAJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlyZXR1cm4gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZGVidWdmc19vcHMudHhfc3RhdHNfcmVhZChmaWxlLAotCQkJdXNlcl9idWYsIGNvdW50LCBwcG9zKTsKKwlpbnQgcG9zID0gMDsKKwljaGFyICpidWY7CisJaW50IGJ1ZnN6ID0gKHNpemVvZihzdHJ1Y3Qgc3RhdGlzdGljc190eCkgKiA0OCkgKyAyNTA7CisJc3NpemVfdCByZXQ7CisJc3RydWN0IHN0YXRpc3RpY3NfdHggKnR4LCAqYWNjdW1fdHgsICpkZWx0YV90eCwgKm1heF90eDsKKworCWlmICghaXdsX2lzX2FsaXZlKHByaXYpKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCWJ1ZiA9IGt6YWxsb2MoYnVmc3osIEdGUF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCUlXTF9FUlIocHJpdiwgIkNhbiBub3QgYWxsb2NhdGUgQnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogdGhlIHN0YXRpc3RpYyBpbmZvcm1hdGlvbiBkaXNwbGF5IGhlcmUgaXMgYmFzZWQgb24KKwkgKiB0aGUgbGFzdCBzdGF0aXN0aWNzIG5vdGlmaWNhdGlvbiBmcm9tIHVDb2RlCisJICogbWlnaHQgbm90IHJlZmxlY3QgdGhlIGN1cnJlbnQgdUNvZGUgYWN0aXZpdHkKKwkgKi8KKwl0eCA9ICZwcml2LT5zdGF0aXN0aWNzLnR4OworCWFjY3VtX3R4ID0gJnByaXYtPmFjY3VtX3N0YXRzLnR4OworCWRlbHRhX3R4ID0gJnByaXYtPmRlbHRhX3N0YXRzLnR4OworCW1heF90eCA9ICZwcml2LT5tYXhfZGVsdGFfc3RhdHMudHg7CisKKwlwb3MgKz0gaXdsX3N0YXRpc3RpY3NfZmxhZyhwcml2LCBidWYsIGJ1ZnN6KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X2hlYWRlciwgIlN0YXRpc3RpY3NfVHg6Iik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgInByZWFtYmxlOiIsCisJCQkgbGUzMl90b19jcHUodHgtPnByZWFtYmxlX2NudCksCisJCQkgYWNjdW1fdHgtPnByZWFtYmxlX2NudCwKKwkJCSBkZWx0YV90eC0+cHJlYW1ibGVfY250LCBtYXhfdHgtPnByZWFtYmxlX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgInJ4X2RldGVjdGVkX2NudDoiLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5yeF9kZXRlY3RlZF9jbnQpLAorCQkJIGFjY3VtX3R4LT5yeF9kZXRlY3RlZF9jbnQsCisJCQkgZGVsdGFfdHgtPnJ4X2RldGVjdGVkX2NudCwgbWF4X3R4LT5yeF9kZXRlY3RlZF9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJidF9wcmlvX2RlZmVyX2NudDoiLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5idF9wcmlvX2RlZmVyX2NudCksCisJCQkgYWNjdW1fdHgtPmJ0X3ByaW9fZGVmZXJfY250LAorCQkJIGRlbHRhX3R4LT5idF9wcmlvX2RlZmVyX2NudCwKKwkJCSBtYXhfdHgtPmJ0X3ByaW9fZGVmZXJfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYnRfcHJpb19raWxsX2NudDoiLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5idF9wcmlvX2tpbGxfY250KSwKKwkJCSBhY2N1bV90eC0+YnRfcHJpb19raWxsX2NudCwKKwkJCSBkZWx0YV90eC0+YnRfcHJpb19raWxsX2NudCwKKwkJCSBtYXhfdHgtPmJ0X3ByaW9fa2lsbF9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJmZXdfYnl0ZXNfY250OiIsCisJCQkgbGUzMl90b19jcHUodHgtPmZld19ieXRlc19jbnQpLAorCQkJIGFjY3VtX3R4LT5mZXdfYnl0ZXNfY250LAorCQkJIGRlbHRhX3R4LT5mZXdfYnl0ZXNfY250LCBtYXhfdHgtPmZld19ieXRlc19jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJjdHNfdGltZW91dDoiLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5jdHNfdGltZW91dCksIGFjY3VtX3R4LT5jdHNfdGltZW91dCwKKwkJCSBkZWx0YV90eC0+Y3RzX3RpbWVvdXQsIG1heF90eC0+Y3RzX3RpbWVvdXQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJhY2tfdGltZW91dDoiLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5hY2tfdGltZW91dCksCisJCQkgYWNjdW1fdHgtPmFja190aW1lb3V0LAorCQkJIGRlbHRhX3R4LT5hY2tfdGltZW91dCwgbWF4X3R4LT5hY2tfdGltZW91dCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImV4cGVjdGVkX2Fja19jbnQ6IiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+ZXhwZWN0ZWRfYWNrX2NudCksCisJCQkgYWNjdW1fdHgtPmV4cGVjdGVkX2Fja19jbnQsCisJCQkgZGVsdGFfdHgtPmV4cGVjdGVkX2Fja19jbnQsCisJCQkgbWF4X3R4LT5leHBlY3RlZF9hY2tfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYWN0dWFsX2Fja19jbnQ6IiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+YWN0dWFsX2Fja19jbnQpLAorCQkJIGFjY3VtX3R4LT5hY3R1YWxfYWNrX2NudCwKKwkJCSBkZWx0YV90eC0+YWN0dWFsX2Fja19jbnQsCisJCQkgbWF4X3R4LT5hY3R1YWxfYWNrX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImR1bXBfbXNkdV9jbnQ6IiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+ZHVtcF9tc2R1X2NudCksCisJCQkgYWNjdW1fdHgtPmR1bXBfbXNkdV9jbnQsCisJCQkgZGVsdGFfdHgtPmR1bXBfbXNkdV9jbnQsCisJCQkgbWF4X3R4LT5kdW1wX21zZHVfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYWJvcnRfbnh0X2ZyYW1lX21pc21hdGNoOiIsCisJCQkgbGUzMl90b19jcHUodHgtPmJ1cnN0X2Fib3J0X25leHRfZnJhbWVfbWlzbWF0Y2hfY250KSwKKwkJCSBhY2N1bV90eC0+YnVyc3RfYWJvcnRfbmV4dF9mcmFtZV9taXNtYXRjaF9jbnQsCisJCQkgZGVsdGFfdHgtPmJ1cnN0X2Fib3J0X25leHRfZnJhbWVfbWlzbWF0Y2hfY250LAorCQkJIG1heF90eC0+YnVyc3RfYWJvcnRfbmV4dF9mcmFtZV9taXNtYXRjaF9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJhYm9ydF9taXNzaW5nX254dF9mcmFtZToiLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5idXJzdF9hYm9ydF9taXNzaW5nX25leHRfZnJhbWVfY250KSwKKwkJCSBhY2N1bV90eC0+YnVyc3RfYWJvcnRfbWlzc2luZ19uZXh0X2ZyYW1lX2NudCwKKwkJCSBkZWx0YV90eC0+YnVyc3RfYWJvcnRfbWlzc2luZ19uZXh0X2ZyYW1lX2NudCwKKwkJCSBtYXhfdHgtPmJ1cnN0X2Fib3J0X21pc3NpbmdfbmV4dF9mcmFtZV9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJjdHNfdGltZW91dF9jb2xsaXNpb246IiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+Y3RzX3RpbWVvdXRfY29sbGlzaW9uKSwKKwkJCSBhY2N1bV90eC0+Y3RzX3RpbWVvdXRfY29sbGlzaW9uLAorCQkJIGRlbHRhX3R4LT5jdHNfdGltZW91dF9jb2xsaXNpb24sCisJCQkgbWF4X3R4LT5jdHNfdGltZW91dF9jb2xsaXNpb24pOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJhY2tfYmFfdGltZW91dF9jb2xsaXNpb246IiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+YWNrX29yX2JhX3RpbWVvdXRfY29sbGlzaW9uKSwKKwkJCSBhY2N1bV90eC0+YWNrX29yX2JhX3RpbWVvdXRfY29sbGlzaW9uLAorCQkJIGRlbHRhX3R4LT5hY2tfb3JfYmFfdGltZW91dF9jb2xsaXNpb24sCisJCQkgbWF4X3R4LT5hY2tfb3JfYmFfdGltZW91dF9jb2xsaXNpb24pOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJhZ2cgYmFfdGltZW91dDoiLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5hZ2cuYmFfdGltZW91dCksCisJCQkgYWNjdW1fdHgtPmFnZy5iYV90aW1lb3V0LAorCQkJIGRlbHRhX3R4LT5hZ2cuYmFfdGltZW91dCwKKwkJCSBtYXhfdHgtPmFnZy5iYV90aW1lb3V0KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYWdnIGJhX3Jlc2NoZWRfZnJhbWVzOiIsCisJCQkgbGUzMl90b19jcHUodHgtPmFnZy5iYV9yZXNjaGVkdWxlX2ZyYW1lcyksCisJCQkgYWNjdW1fdHgtPmFnZy5iYV9yZXNjaGVkdWxlX2ZyYW1lcywKKwkJCSBkZWx0YV90eC0+YWdnLmJhX3Jlc2NoZWR1bGVfZnJhbWVzLAorCQkJIG1heF90eC0+YWdnLmJhX3Jlc2NoZWR1bGVfZnJhbWVzKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYWdnIHNjZF9xdWVyeV9hZ2dfZnJhbWU6IiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+YWdnLnNjZF9xdWVyeV9hZ2dfZnJhbWVfY250KSwKKwkJCSBhY2N1bV90eC0+YWdnLnNjZF9xdWVyeV9hZ2dfZnJhbWVfY250LAorCQkJIGRlbHRhX3R4LT5hZ2cuc2NkX3F1ZXJ5X2FnZ19mcmFtZV9jbnQsCisJCQkgbWF4X3R4LT5hZ2cuc2NkX3F1ZXJ5X2FnZ19mcmFtZV9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJhZ2cgc2NkX3F1ZXJ5X25vX2FnZzoiLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5hZ2cuc2NkX3F1ZXJ5X25vX2FnZyksCisJCQkgYWNjdW1fdHgtPmFnZy5zY2RfcXVlcnlfbm9fYWdnLAorCQkJIGRlbHRhX3R4LT5hZ2cuc2NkX3F1ZXJ5X25vX2FnZywKKwkJCSBtYXhfdHgtPmFnZy5zY2RfcXVlcnlfbm9fYWdnKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYWdnIHNjZF9xdWVyeV9hZ2c6IiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+YWdnLnNjZF9xdWVyeV9hZ2cpLAorCQkJIGFjY3VtX3R4LT5hZ2cuc2NkX3F1ZXJ5X2FnZywKKwkJCSBkZWx0YV90eC0+YWdnLnNjZF9xdWVyeV9hZ2csCisJCQkgbWF4X3R4LT5hZ2cuc2NkX3F1ZXJ5X2FnZyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImFnZyBzY2RfcXVlcnlfbWlzbWF0Y2g6IiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+YWdnLnNjZF9xdWVyeV9taXNtYXRjaCksCisJCQkgYWNjdW1fdHgtPmFnZy5zY2RfcXVlcnlfbWlzbWF0Y2gsCisJCQkgZGVsdGFfdHgtPmFnZy5zY2RfcXVlcnlfbWlzbWF0Y2gsCisJCQkgbWF4X3R4LT5hZ2cuc2NkX3F1ZXJ5X21pc21hdGNoKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYWdnIGZyYW1lX25vdF9yZWFkeToiLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5hZ2cuZnJhbWVfbm90X3JlYWR5KSwKKwkJCSBhY2N1bV90eC0+YWdnLmZyYW1lX25vdF9yZWFkeSwKKwkJCSBkZWx0YV90eC0+YWdnLmZyYW1lX25vdF9yZWFkeSwKKwkJCSBtYXhfdHgtPmFnZy5mcmFtZV9ub3RfcmVhZHkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJhZ2cgdW5kZXJydW46IiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+YWdnLnVuZGVycnVuKSwKKwkJCSBhY2N1bV90eC0+YWdnLnVuZGVycnVuLAorCQkJIGRlbHRhX3R4LT5hZ2cudW5kZXJydW4sIG1heF90eC0+YWdnLnVuZGVycnVuKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYWdnIGJ0X3ByaW9fa2lsbDoiLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5hZ2cuYnRfcHJpb19raWxsKSwKKwkJCSBhY2N1bV90eC0+YWdnLmJ0X3ByaW9fa2lsbCwKKwkJCSBkZWx0YV90eC0+YWdnLmJ0X3ByaW9fa2lsbCwKKwkJCSBtYXhfdHgtPmFnZy5idF9wcmlvX2tpbGwpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJhZ2cgcnhfYmFfcnNwX2NudDoiLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5hZ2cucnhfYmFfcnNwX2NudCksCisJCQkgYWNjdW1fdHgtPmFnZy5yeF9iYV9yc3BfY250LAorCQkJIGRlbHRhX3R4LT5hZ2cucnhfYmFfcnNwX2NudCwKKwkJCSBtYXhfdHgtPmFnZy5yeF9iYV9yc3BfY250KTsKKworCWlmICh0eC0+dHhfcG93ZXIuYW50X2EgfHwgdHgtPnR4X3Bvd2VyLmFudF9iIHx8IHR4LT50eF9wb3dlci5hbnRfYykgeworCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkidHggcG93ZXI6ICgxLzIgZEIgc3RlcClcbiIpOworCQlpZiAoKHByaXYtPmNmZy0+dmFsaWRfdHhfYW50ICYgQU5UX0EpICYmIHR4LT50eF9wb3dlci5hbnRfYSkKKwkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkJZm10X2hleCwgImFudGVubmEgQToiLAorCQkJCQl0eC0+dHhfcG93ZXIuYW50X2EpOworCQlpZiAoKHByaXYtPmNmZy0+dmFsaWRfdHhfYW50ICYgQU5UX0IpICYmIHR4LT50eF9wb3dlci5hbnRfYikKKwkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkJZm10X2hleCwgImFudGVubmEgQjoiLAorCQkJCQl0eC0+dHhfcG93ZXIuYW50X2IpOworCQlpZiAoKHByaXYtPmNmZy0+dmFsaWRfdHhfYW50ICYgQU5UX0MpICYmIHR4LT50eF9wb3dlci5hbnRfYykKKwkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkJZm10X2hleCwgImFudGVubmEgQzoiLAorCQkJCQl0eC0+dHhfcG93ZXIuYW50X2MpOworCX0KKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc191Y29kZV9nZW5lcmFsX3N0YXRzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCkBAIC0xMDYyLDggKzE2OTMsMzQ3IEBACiAJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlyZXR1cm4gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZGVidWdmc19vcHMuZ2VuZXJhbF9zdGF0c19yZWFkKGZpbGUsCi0JCQl1c2VyX2J1ZiwgY291bnQsIHBwb3MpOworCWludCBwb3MgPSAwOworCWNoYXIgKmJ1ZjsKKwlpbnQgYnVmc3ogPSBzaXplb2Yoc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbCkgKiAxMCArIDMwMDsKKwlzc2l6ZV90IHJldDsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19nZW5lcmFsX2NvbW1vbiAqZ2VuZXJhbCwgKmFjY3VtX2dlbmVyYWw7CisJc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbF9jb21tb24gKmRlbHRhX2dlbmVyYWwsICptYXhfZ2VuZXJhbDsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19kYmcgKmRiZywgKmFjY3VtX2RiZywgKmRlbHRhX2RiZywgKm1heF9kYmc7CisJc3RydWN0IHN0YXRpc3RpY3NfZGl2ICpkaXYsICphY2N1bV9kaXYsICpkZWx0YV9kaXYsICptYXhfZGl2OworCisJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCisJCXJldHVybiAtRUFHQUlOOworCisJYnVmID0ga3phbGxvYyhidWZzeiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpIHsKKwkJSVdMX0VSUihwcml2LCAiQ2FuIG5vdCBhbGxvY2F0ZSBCdWZmZXJcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiB0aGUgc3RhdGlzdGljIGluZm9ybWF0aW9uIGRpc3BsYXkgaGVyZSBpcyBiYXNlZCBvbgorCSAqIHRoZSBsYXN0IHN0YXRpc3RpY3Mgbm90aWZpY2F0aW9uIGZyb20gdUNvZGUKKwkgKiBtaWdodCBub3QgcmVmbGVjdCB0aGUgY3VycmVudCB1Q29kZSBhY3Rpdml0eQorCSAqLworCWdlbmVyYWwgPSAmcHJpdi0+c3RhdGlzdGljcy5jb21tb247CisJZGJnID0gJnByaXYtPnN0YXRpc3RpY3MuY29tbW9uLmRiZzsKKwlkaXYgPSAmcHJpdi0+c3RhdGlzdGljcy5jb21tb24uZGl2OworCWFjY3VtX2dlbmVyYWwgPSAmcHJpdi0+YWNjdW1fc3RhdHMuY29tbW9uOworCWFjY3VtX2RiZyA9ICZwcml2LT5hY2N1bV9zdGF0cy5jb21tb24uZGJnOworCWFjY3VtX2RpdiA9ICZwcml2LT5hY2N1bV9zdGF0cy5jb21tb24uZGl2OworCWRlbHRhX2dlbmVyYWwgPSAmcHJpdi0+ZGVsdGFfc3RhdHMuY29tbW9uOworCW1heF9nZW5lcmFsID0gJnByaXYtPm1heF9kZWx0YV9zdGF0cy5jb21tb247CisJZGVsdGFfZGJnID0gJnByaXYtPmRlbHRhX3N0YXRzLmNvbW1vbi5kYmc7CisJbWF4X2RiZyA9ICZwcml2LT5tYXhfZGVsdGFfc3RhdHMuY29tbW9uLmRiZzsKKwlkZWx0YV9kaXYgPSAmcHJpdi0+ZGVsdGFfc3RhdHMuY29tbW9uLmRpdjsKKwltYXhfZGl2ID0gJnByaXYtPm1heF9kZWx0YV9zdGF0cy5jb21tb24uZGl2OworCisJcG9zICs9IGl3bF9zdGF0aXN0aWNzX2ZsYWcocHJpdiwgYnVmLCBidWZzeik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF9oZWFkZXIsICJTdGF0aXN0aWNzX0dlbmVyYWw6Iik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF92YWx1ZSwgInRlbXBlcmF0dXJlOiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+dGVtcGVyYXR1cmUpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3ZhbHVlLCAidGVtcGVyYXR1cmVfbToiLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPnRlbXBlcmF0dXJlX20pKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3ZhbHVlLCAidHRsX3RpbWVzdGFtcDoiLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPnR0bF90aW1lc3RhbXApKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYnVyc3RfY2hlY2s6IiwKKwkJCSBsZTMyX3RvX2NwdShkYmctPmJ1cnN0X2NoZWNrKSwKKwkJCSBhY2N1bV9kYmctPmJ1cnN0X2NoZWNrLAorCQkJIGRlbHRhX2RiZy0+YnVyc3RfY2hlY2ssIG1heF9kYmctPmJ1cnN0X2NoZWNrKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAiYnVyc3RfY291bnQ6IiwKKwkJCSBsZTMyX3RvX2NwdShkYmctPmJ1cnN0X2NvdW50KSwKKwkJCSBhY2N1bV9kYmctPmJ1cnN0X2NvdW50LAorCQkJIGRlbHRhX2RiZy0+YnVyc3RfY291bnQsIG1heF9kYmctPmJ1cnN0X2NvdW50KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAid2FpdF9mb3Jfc2lsZW5jZV90aW1lb3V0X2NvdW50OiIsCisJCQkgbGUzMl90b19jcHUoZGJnLT53YWl0X2Zvcl9zaWxlbmNlX3RpbWVvdXRfY250KSwKKwkJCSBhY2N1bV9kYmctPndhaXRfZm9yX3NpbGVuY2VfdGltZW91dF9jbnQsCisJCQkgZGVsdGFfZGJnLT53YWl0X2Zvcl9zaWxlbmNlX3RpbWVvdXRfY250LAorCQkJIG1heF9kYmctPndhaXRfZm9yX3NpbGVuY2VfdGltZW91dF9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJzbGVlcF90aW1lOiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+c2xlZXBfdGltZSksCisJCQkgYWNjdW1fZ2VuZXJhbC0+c2xlZXBfdGltZSwKKwkJCSBkZWx0YV9nZW5lcmFsLT5zbGVlcF90aW1lLCBtYXhfZ2VuZXJhbC0+c2xlZXBfdGltZSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgInNsb3RzX291dDoiLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPnNsb3RzX291dCksCisJCQkgYWNjdW1fZ2VuZXJhbC0+c2xvdHNfb3V0LAorCQkJIGRlbHRhX2dlbmVyYWwtPnNsb3RzX291dCwgbWF4X2dlbmVyYWwtPnNsb3RzX291dCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgInNsb3RzX2lkbGU6IiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5zbG90c19pZGxlKSwKKwkJCSBhY2N1bV9nZW5lcmFsLT5zbG90c19pZGxlLAorCQkJIGRlbHRhX2dlbmVyYWwtPnNsb3RzX2lkbGUsIG1heF9nZW5lcmFsLT5zbG90c19pZGxlKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAidHhfb25fYToiLAorCQkJIGxlMzJfdG9fY3B1KGRpdi0+dHhfb25fYSksIGFjY3VtX2Rpdi0+dHhfb25fYSwKKwkJCSBkZWx0YV9kaXYtPnR4X29uX2EsIG1heF9kaXYtPnR4X29uX2EpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSBmbXRfdGFibGUsICJ0eF9vbl9iOiIsCisJCQkgbGUzMl90b19jcHUoZGl2LT50eF9vbl9iKSwgYWNjdW1fZGl2LT50eF9vbl9iLAorCQkJIGRlbHRhX2Rpdi0+dHhfb25fYiwgbWF4X2Rpdi0+dHhfb25fYik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgImV4ZWNfdGltZToiLAorCQkJIGxlMzJfdG9fY3B1KGRpdi0+ZXhlY190aW1lKSwgYWNjdW1fZGl2LT5leGVjX3RpbWUsCisJCQkgZGVsdGFfZGl2LT5leGVjX3RpbWUsIG1heF9kaXYtPmV4ZWNfdGltZSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIGZtdF90YWJsZSwgInByb2JlX3RpbWU6IiwKKwkJCSBsZTMyX3RvX2NwdShkaXYtPnByb2JlX3RpbWUpLCBhY2N1bV9kaXYtPnByb2JlX3RpbWUsCisJCQkgZGVsdGFfZGl2LT5wcm9iZV90aW1lLCBtYXhfZGl2LT5wcm9iZV90aW1lKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAicnhfZW5hYmxlX2NvdW50ZXI6IiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5yeF9lbmFibGVfY291bnRlciksCisJCQkgYWNjdW1fZ2VuZXJhbC0+cnhfZW5hYmxlX2NvdW50ZXIsCisJCQkgZGVsdGFfZ2VuZXJhbC0+cnhfZW5hYmxlX2NvdW50ZXIsCisJCQkgbWF4X2dlbmVyYWwtPnJ4X2VuYWJsZV9jb3VudGVyKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgZm10X3RhYmxlLCAibnVtX29mX3Nvc19zdGF0ZXM6IiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5udW1fb2Zfc29zX3N0YXRlcyksCisJCQkgYWNjdW1fZ2VuZXJhbC0+bnVtX29mX3Nvc19zdGF0ZXMsCisJCQkgZGVsdGFfZ2VuZXJhbC0+bnVtX29mX3Nvc19zdGF0ZXMsCisJCQkgbWF4X2dlbmVyYWwtPm51bV9vZl9zb3Nfc3RhdGVzKTsKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc191Y29kZV9idF9zdGF0c19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IHBvcyA9IDA7CisJY2hhciAqYnVmOworCWludCBidWZzeiA9IChzaXplb2Yoc3RydWN0IHN0YXRpc3RpY3NfYnRfYWN0aXZpdHkpICogMjQpICsgMjAwOworCXNzaXplX3QgcmV0OworCXN0cnVjdCBzdGF0aXN0aWNzX2J0X2FjdGl2aXR5ICpidCwgKmFjY3VtX2J0OworCisJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCisJCXJldHVybiAtRUFHQUlOOworCisJaWYgKCFwcml2LT5idF9lbmFibGVfZmxhZykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBtYWtlIHJlcXVlc3QgdG8gdUNvZGUgdG8gcmV0cmlldmUgc3RhdGlzdGljcyBpbmZvcm1hdGlvbiAqLworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwlyZXQgPSBpd2xfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3QocHJpdiwgQ01EX1NZTkMsIGZhbHNlKTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKworCWlmIChyZXQpIHsKKwkJSVdMX0VSUihwcml2LAorCQkJIkVycm9yIHNlbmRpbmcgc3RhdGlzdGljcyByZXF1ZXN0OiAlemRcbiIsIHJldCk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKwlidWYgPSBremFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQlJV0xfRVJSKHByaXYsICJDYW4gbm90IGFsbG9jYXRlIEJ1ZmZlclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qCisJICogdGhlIHN0YXRpc3RpYyBpbmZvcm1hdGlvbiBkaXNwbGF5IGhlcmUgaXMgYmFzZWQgb24KKwkgKiB0aGUgbGFzdCBzdGF0aXN0aWNzIG5vdGlmaWNhdGlvbiBmcm9tIHVDb2RlCisJICogbWlnaHQgbm90IHJlZmxlY3QgdGhlIGN1cnJlbnQgdUNvZGUgYWN0aXZpdHkKKwkgKi8KKwlidCA9ICZwcml2LT5zdGF0aXN0aWNzLmJ0X2FjdGl2aXR5OworCWFjY3VtX2J0ID0gJnByaXYtPmFjY3VtX3N0YXRzLmJ0X2FjdGl2aXR5OworCisJcG9zICs9IGl3bF9zdGF0aXN0aWNzX2ZsYWcocHJpdiwgYnVmLCBidWZzeik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiU3RhdGlzdGljc19CVDpcbiIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSJcdFx0XHRjdXJyZW50XHRcdFx0YWNjdW11bGF0aXZlXG4iKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgImhpX3ByaW9yaXR5X3R4X3JlcV9jbnQ6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgbGUzMl90b19jcHUoYnQtPmhpX3ByaW9yaXR5X3R4X3JlcV9jbnQpLAorCQkJIGFjY3VtX2J0LT5oaV9wcmlvcml0eV90eF9yZXFfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgImhpX3ByaW9yaXR5X3R4X2RlbmllZF9jbnQ6XHQldVx0XHRcdCV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGJ0LT5oaV9wcmlvcml0eV90eF9kZW5pZWRfY250KSwKKwkJCSBhY2N1bV9idC0+aGlfcHJpb3JpdHlfdHhfZGVuaWVkX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJICJsb19wcmlvcml0eV90eF9yZXFfY250Olx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGJ0LT5sb19wcmlvcml0eV90eF9yZXFfY250KSwKKwkJCSBhY2N1bV9idC0+bG9fcHJpb3JpdHlfdHhfcmVxX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJICJsb19wcmlvcml0eV90eF9kZW5pZWRfY250Olx0JXVcdFx0XHQldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShidC0+bG9fcHJpb3JpdHlfdHhfZGVuaWVkX2NudCksCisJCQkgYWNjdW1fYnQtPmxvX3ByaW9yaXR5X3R4X2RlbmllZF9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSAiaGlfcHJpb3JpdHlfcnhfcmVxX2NudDpcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShidC0+aGlfcHJpb3JpdHlfcnhfcmVxX2NudCksCisJCQkgYWNjdW1fYnQtPmhpX3ByaW9yaXR5X3J4X3JlcV9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSAiaGlfcHJpb3JpdHlfcnhfZGVuaWVkX2NudDpcdCV1XHRcdFx0JXVcbiIsCisJCQkgbGUzMl90b19jcHUoYnQtPmhpX3ByaW9yaXR5X3J4X2RlbmllZF9jbnQpLAorCQkJIGFjY3VtX2J0LT5oaV9wcmlvcml0eV9yeF9kZW5pZWRfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgImxvX3ByaW9yaXR5X3J4X3JlcV9jbnQ6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgbGUzMl90b19jcHUoYnQtPmxvX3ByaW9yaXR5X3J4X3JlcV9jbnQpLAorCQkJIGFjY3VtX2J0LT5sb19wcmlvcml0eV9yeF9yZXFfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgImxvX3ByaW9yaXR5X3J4X2RlbmllZF9jbnQ6XHQldVx0XHRcdCV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGJ0LT5sb19wcmlvcml0eV9yeF9kZW5pZWRfY250KSwKKwkJCSBhY2N1bV9idC0+bG9fcHJpb3JpdHlfcnhfZGVuaWVkX2NudCk7CisKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgIihyeCludW1fYnRfa2lsbHM6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgbGUzMl90b19jcHUocHJpdi0+c3RhdGlzdGljcy5udW1fYnRfa2lsbHMpLAorCQkJIHByaXYtPnN0YXRpc3RpY3MuYWNjdW1fbnVtX2J0X2tpbGxzKTsKKworCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX3JlcGx5X3R4X2Vycm9yX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcG9zID0gMDsKKwljaGFyICpidWY7CisJaW50IGJ1ZnN6ID0gKHNpemVvZihzdHJ1Y3QgcmVwbHlfdHhfZXJyb3Jfc3RhdGlzdGljcykgKiAyNCkgKworCQkoc2l6ZW9mKHN0cnVjdCByZXBseV9hZ2dfdHhfZXJyb3Jfc3RhdGlzdGljcykgKiAyNCkgKyAyMDA7CisJc3NpemVfdCByZXQ7CisKKwlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlidWYgPSBremFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQlJV0xfRVJSKHByaXYsICJDYW4gbm90IGFsbG9jYXRlIEJ1ZmZlclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlN0YXRpc3RpY3NfVFhfRXJyb3I6XG4iKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlczpcdFx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX1BPU1RQT05FX0RFTEFZKSwKKwkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLnBwX2RlbGF5KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlczpcdFx0XHQldVxuIiwKKwkJCSBpd2xfZ2V0X3R4X2ZhaWxfcmVhc29uKFRYX1NUQVRVU19QT1NUUE9ORV9GRVdfQllURVMpLAorCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMucHBfZmV3X2J5dGVzKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlczpcdFx0XHQldVxuIiwKKwkJCSBpd2xfZ2V0X3R4X2ZhaWxfcmVhc29uKFRYX1NUQVRVU19QT1NUUE9ORV9CVF9QUklPKSwKKwkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLnBwX2J0X3ByaW8pOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX1BPU1RQT05FX1FVSUVUX1BFUklPRCksCisJCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy5wcF9xdWlldF9wZXJpb2QpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX1BPU1RQT05FX0NBTENfVFRBSyksCisJCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy5wcF9jYWxjX3R0YWspOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHQldVxuIiwKKwkJCSBpd2xfZ2V0X3R4X2ZhaWxfcmVhc29uKAorCQkJCVRYX1NUQVRVU19GQUlMX0lOVEVSTkFMX0NST1NTRURfUkVUUlkpLAorCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMuaW50X2Nyb3NzZWRfcmV0cnkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX0ZBSUxfU0hPUlRfTElNSVQpLAorCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMuc2hvcnRfbGltaXQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX0ZBSUxfTE9OR19MSU1JVCksCisJCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy5sb25nX2xpbWl0KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlczpcdFx0XHQldVxuIiwKKwkJCSBpd2xfZ2V0X3R4X2ZhaWxfcmVhc29uKFRYX1NUQVRVU19GQUlMX0ZJRk9fVU5ERVJSVU4pLAorCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMuZmlmb191bmRlcnJ1bik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCisJCQkgaXdsX2dldF90eF9mYWlsX3JlYXNvbihUWF9TVEFUVVNfRkFJTF9EUkFJTl9GTE9XKSwKKwkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLmRyYWluX2Zsb3cpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX0ZBSUxfUkZLSUxMX0ZMVVNIKSwKKwkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLnJma2lsbF9mbHVzaCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCisJCQkgaXdsX2dldF90eF9mYWlsX3JlYXNvbihUWF9TVEFUVVNfRkFJTF9MSUZFX0VYUElSRSksCisJCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy5saWZlX2V4cGlyZSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCisJCQkgaXdsX2dldF90eF9mYWlsX3JlYXNvbihUWF9TVEFUVVNfRkFJTF9ERVNUX1BTKSwKKwkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLmRlc3RfcHMpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX0ZBSUxfSE9TVF9BQk9SVEVEKSwKKwkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLmhvc3RfYWJvcnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX0ZBSUxfQlRfUkVUUlkpLAorCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMucHBfZGVsYXkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX0ZBSUxfU1RBX0lOVkFMSUQpLAorCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMuc3RhX2ludmFsaWQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX0ZBSUxfRlJBR19EUk9QUEVEKSwKKwkJCSBwcml2LT5fYWduLnJlcGx5X3R4X3N0YXRzLmZyYWdfZHJvcCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCisJCQkgaXdsX2dldF90eF9mYWlsX3JlYXNvbihUWF9TVEFUVVNfRkFJTF9USURfRElTQUJMRSksCisJCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy50aWRfZGlzYWJsZSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCisJCQkgaXdsX2dldF90eF9mYWlsX3JlYXNvbihUWF9TVEFUVVNfRkFJTF9GSUZPX0ZMVVNIRUQpLAorCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMuZmlmb19mbHVzaCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oCisJCQkJVFhfU1RBVFVTX0ZBSUxfSU5TVUZGSUNJRU5UX0NGX1BPTEwpLAorCQkJIHByaXYtPl9hZ24ucmVwbHlfdHhfc3RhdHMuaW5zdWZmX2NmX3BvbGwpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oVFhfU1RBVFVTX0ZBSUxfUEFTU0lWRV9OT19SWCksCisJCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy5mYWlsX2h3X2Ryb3ApOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHQldVxuIiwKKwkJCSBpd2xfZ2V0X3R4X2ZhaWxfcmVhc29uKAorCQkJCVRYX1NUQVRVU19GQUlMX05PX0JFQUNPTl9PTl9SQURBUiksCisJCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy5zdGFfY29sb3JfbWlzbWF0Y2gpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlVOS05PV046XHRcdFx0JXVcbiIsCisJCQkgcHJpdi0+X2Fnbi5yZXBseV90eF9zdGF0cy51bmtub3duKTsKKworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSAiXG5TdGF0aXN0aWNzX0FnZ19UWF9FcnJvcjpcbiIpOworCisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCisJCQkgaXdsX2dldF9hZ2dfdHhfZmFpbF9yZWFzb24oQUdHX1RYX1NUQVRFX1VOREVSUlVOX01TSyksCisJCQkgcHJpdi0+X2Fnbi5yZXBseV9hZ2dfdHhfc3RhdHMudW5kZXJydW4pOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfYWdnX3R4X2ZhaWxfcmVhc29uKEFHR19UWF9TVEFURV9CVF9QUklPX01TSyksCisJCQkgcHJpdi0+X2Fnbi5yZXBseV9hZ2dfdHhfc3RhdHMuYnRfcHJpbyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCisJCQkgaXdsX2dldF9hZ2dfdHhfZmFpbF9yZWFzb24oQUdHX1RYX1NUQVRFX0ZFV19CWVRFU19NU0spLAorCQkJIHByaXYtPl9hZ24ucmVwbHlfYWdnX3R4X3N0YXRzLmZld19ieXRlcyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiJXM6XHRcdFx0JXVcbiIsCisJCQkgaXdsX2dldF9hZ2dfdHhfZmFpbF9yZWFzb24oQUdHX1RYX1NUQVRFX0FCT1JUX01TSyksCisJCQkgcHJpdi0+X2Fnbi5yZXBseV9hZ2dfdHhfc3RhdHMuYWJvcnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHQldVxuIiwKKwkJCSBpd2xfZ2V0X2FnZ190eF9mYWlsX3JlYXNvbigKKwkJCQlBR0dfVFhfU1RBVEVfTEFTVF9TRU5UX1RUTF9NU0spLAorCQkJIHByaXYtPl9hZ24ucmVwbHlfYWdnX3R4X3N0YXRzLmxhc3Rfc2VudF90dGwpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHQldVxuIiwKKwkJCSBpd2xfZ2V0X2FnZ190eF9mYWlsX3JlYXNvbigKKwkJCQlBR0dfVFhfU1RBVEVfTEFTVF9TRU5UX1RSWV9DTlRfTVNLKSwKKwkJCSBwcml2LT5fYWduLnJlcGx5X2FnZ190eF9zdGF0cy5sYXN0X3NlbnRfdHJ5KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlczpcdFx0JXVcbiIsCisJCQkgaXdsX2dldF9hZ2dfdHhfZmFpbF9yZWFzb24oCisJCQkJQUdHX1RYX1NUQVRFX0xBU1RfU0VOVF9CVF9LSUxMX01TSyksCisJCQkgcHJpdi0+X2Fnbi5yZXBseV9hZ2dfdHhfc3RhdHMubGFzdF9zZW50X2J0X2tpbGwpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfYWdnX3R4X2ZhaWxfcmVhc29uKEFHR19UWF9TVEFURV9TQ0RfUVVFUllfTVNLKSwKKwkJCSBwcml2LT5fYWduLnJlcGx5X2FnZ190eF9zdGF0cy5zY2RfcXVlcnkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHQldVxuIiwKKwkJCSBpd2xfZ2V0X2FnZ190eF9mYWlsX3JlYXNvbigKKwkJCQlBR0dfVFhfU1RBVEVfVEVTVF9CQURfQ1JDMzJfTVNLKSwKKwkJCSBwcml2LT5fYWduLnJlcGx5X2FnZ190eF9zdGF0cy5iYWRfY3JjMzIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfYWdnX3R4X2ZhaWxfcmVhc29uKEFHR19UWF9TVEFURV9SRVNQT05TRV9NU0spLAorCQkJIHByaXYtPl9hZ24ucmVwbHlfYWdnX3R4X3N0YXRzLnJlc3BvbnNlKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlczpcdFx0XHQldVxuIiwKKwkJCSBpd2xfZ2V0X2FnZ190eF9mYWlsX3JlYXNvbihBR0dfVFhfU1RBVEVfRFVNUF9UWF9NU0spLAorCQkJIHByaXYtPl9hZ24ucmVwbHlfYWdnX3R4X3N0YXRzLmR1bXBfdHgpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiVzOlx0XHRcdCV1XG4iLAorCQkJIGl3bF9nZXRfYWdnX3R4X2ZhaWxfcmVhc29uKEFHR19UWF9TVEFURV9ERUxBWV9UWF9NU0spLAorCQkJIHByaXYtPl9hZ24ucmVwbHlfYWdnX3R4X3N0YXRzLmRlbGF5X3R4KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJVTktOT1dOOlx0XHRcdCV1XG4iLAorCQkJIHByaXYtPl9hZ24ucmVwbHlfYWdnX3R4X3N0YXRzLnVua25vd24pOworCisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfc2Vuc2l0aXZpdHlfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKQEAgLTEyNjgsOCArMjIzOCw3IEBACiAJaWYgKHNzY2FuZihidWYsICIlZCIsICZjc3IpICE9IDEpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPmR1bXBfY3NyKQotCQlwcml2LT5jZmctPm9wcy0+bGliLT5kdW1wX2Nzcihwcml2KTsKKwlpd2xfZHVtcF9jc3IocHJpdik7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0xMzU5LDEzICsyMzI4LDExIEBACiAJaW50IHBvcyA9IDA7CiAJc3NpemVfdCByZXQgPSAtRUZBVUxUOwogCi0JaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPmR1bXBfZmgpIHsKLQkJcmV0ID0gcG9zID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZHVtcF9maChwcml2LCAmYnVmLCB0cnVlKTsKLQkJaWYgKGJ1ZikgewotCQkJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsCi0JCQkJCQkgICAgICBjb3VudCwgcHBvcywgYnVmLCBwb3MpOwotCQkJa2ZyZWUoYnVmKTsKLQkJfQorCXJldCA9IHBvcyA9IGl3bF9kdW1wX2ZoKHByaXYsICZidWYsIHRydWUpOworCWlmIChidWYpIHsKKwkJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsCisJCQkJCSAgICAgIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CisJCWtmcmVlKGJ1Zik7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTE1MzEsMTYgKzI0OTgsNiBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX3Vjb2RlX2J0X3N0YXRzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQotCXJldHVybiBwcml2LT5jZmctPm9wcy0+bGliLT5kZWJ1Z2ZzX29wcy5idF9zdGF0c19yZWFkKGZpbGUsCi0JCQl1c2VyX2J1ZiwgY291bnQsIHBwb3MpOwotfQotCiBzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfd2RfdGltZW91dF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQkJY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAogCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykgewpAQCAtMTU3MiwxMiArMjUyOSwxMCBAQAogCWludCBwb3MgPSAwOwogCWNoYXIgYnVmWzIwMF07CiAJY29uc3Qgc2l6ZV90IGJ1ZnN6ID0gc2l6ZW9mKGJ1Zik7Ci0Jc3NpemVfdCByZXQ7CiAKIAlpZiAoIXByaXYtPmJ0X2VuYWJsZV9mbGFnKSB7CiAJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIkJUIGNvZXggZGlzYWJsZWRcbiIpOwotCQlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKLQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOwogCX0KIAlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJCVCBlbmFibGUgZmxhZzogMHgleFxuIiwKIAkJcHJpdi0+YnRfZW5hYmxlX2ZsYWcpOwpAQCAtMTYwOCw4ICsyNTYzLDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc19wcm90ZWN0aW9uX21vZGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKQEAgLTE2NTgsMTggKzI2MTIsNiBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX3JlcGx5X3R4X2Vycm9yX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0JaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPmRlYnVnZnNfb3BzLnJlcGx5X3R4X2Vycm9yKQotCQlyZXR1cm4gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZGVidWdmc19vcHMucmVwbHlfdHhfZXJyb3IoCi0JCQlmaWxlLCB1c2VyX2J1ZiwgY291bnQsIHBwb3MpOwotCWVsc2UKLQkJcmV0dXJuIC1FTk9EQVRBOwotfQogREVCVUdGU19SRUFEX0ZJTEVfT1BTKHJ4X3N0YXRpc3RpY3MpOwogREVCVUdGU19SRUFEX0ZJTEVfT1BTKHR4X3N0YXRpc3RpY3MpOwogREVCVUdGU19SRUFEX1dSSVRFX0ZJTEVfT1BTKHRyYWZmaWNfbG9nKTsKQEAgLTE3MzEsMTEgKzI2NzMsOCBAQAogCURFQlVHRlNfQUREX0ZJTEUoc3RhdHVzLCBkaXJfZGF0YSwgU19JUlVTUik7CiAJREVCVUdGU19BRERfRklMRShpbnRlcnJ1cHQsIGRpcl9kYXRhLCBTX0lXVVNSIHwgU19JUlVTUik7CiAJREVCVUdGU19BRERfRklMRShxb3MsIGRpcl9kYXRhLCBTX0lSVVNSKTsKLQlpZiAoIXByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPmJyb2tlbl9wb3dlcnNhdmUpIHsKLQkJREVCVUdGU19BRERfRklMRShzbGVlcF9sZXZlbF9vdmVycmlkZSwgZGlyX2RhdGEsCi0JCQkJIFNfSVdVU1IgfCBTX0lSVVNSKTsKLQkJREVCVUdGU19BRERfRklMRShjdXJyZW50X3NsZWVwX2NvbW1hbmQsIGRpcl9kYXRhLCBTX0lSVVNSKTsKLQl9CisJREVCVUdGU19BRERfRklMRShzbGVlcF9sZXZlbF9vdmVycmlkZSwgZGlyX2RhdGEsIFNfSVdVU1IgfCBTX0lSVVNSKTsKKwlERUJVR0ZTX0FERF9GSUxFKGN1cnJlbnRfc2xlZXBfY29tbWFuZCwgZGlyX2RhdGEsIFNfSVJVU1IpOwogCURFQlVHRlNfQUREX0ZJTEUodGhlcm1hbF90aHJvdHRsaW5nLCBkaXJfZGF0YSwgU19JUlVTUik7CiAJREVCVUdGU19BRERfRklMRShkaXNhYmxlX2h0NDAsIGRpcl9kYXRhLCBTX0lXVVNSIHwgU19JUlVTUik7CiAJREVCVUdGU19BRERfRklMRShyeF9zdGF0aXN0aWNzLCBkaXJfZGVidWcsIFNfSVJVU1IpOwpAQCAtMTc1OCwyOSArMjY5NywyMCBAQAogCQlERUJVR0ZTX0FERF9GSUxFKHR4Zmlmb19mbHVzaCwgZGlyX2RlYnVnLCBTX0lXVVNSKTsKIAlERUJVR0ZTX0FERF9GSUxFKHByb3RlY3Rpb25fbW9kZSwgZGlyX2RlYnVnLCBTX0lXVVNSIHwgU19JUlVTUik7CiAKLQlpZiAocHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+c2Vuc2l0aXZpdHlfY2FsaWJfYnlfZHJpdmVyKQotCQlERUJVR0ZTX0FERF9GSUxFKHNlbnNpdGl2aXR5LCBkaXJfZGVidWcsIFNfSVJVU1IpOwotCWlmIChwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5jaGFpbl9ub2lzZV9jYWxpYl9ieV9kcml2ZXIpCi0JCURFQlVHRlNfQUREX0ZJTEUoY2hhaW5fbm9pc2UsIGRpcl9kZWJ1ZywgU19JUlVTUik7Ci0JaWYgKHByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPnVjb2RlX3RyYWNpbmcpCi0JCURFQlVHRlNfQUREX0ZJTEUodWNvZGVfdHJhY2luZywgZGlyX2RlYnVnLCBTX0lXVVNSIHwgU19JUlVTUik7Ci0JaWYgKGl3bF9idF9zdGF0aXN0aWNzKHByaXYpKQotCQlERUJVR0ZTX0FERF9GSUxFKHVjb2RlX2J0X3N0YXRzLCBkaXJfZGVidWcsIFNfSVJVU1IpOworCURFQlVHRlNfQUREX0ZJTEUoc2Vuc2l0aXZpdHksIGRpcl9kZWJ1ZywgU19JUlVTUik7CisJREVCVUdGU19BRERfRklMRShjaGFpbl9ub2lzZSwgZGlyX2RlYnVnLCBTX0lSVVNSKTsKKwlERUJVR0ZTX0FERF9GSUxFKHVjb2RlX3RyYWNpbmcsIGRpcl9kZWJ1ZywgU19JV1VTUiB8IFNfSVJVU1IpOworCURFQlVHRlNfQUREX0ZJTEUodWNvZGVfYnRfc3RhdHMsIGRpcl9kZWJ1ZywgU19JUlVTUik7CiAJREVCVUdGU19BRERfRklMRShyZXBseV90eF9lcnJvciwgZGlyX2RlYnVnLCBTX0lSVVNSKTsKIAlERUJVR0ZTX0FERF9GSUxFKHJ4b25fZmxhZ3MsIGRpcl9kZWJ1ZywgU19JV1VTUik7CiAJREVCVUdGU19BRERfRklMRShyeG9uX2ZpbHRlcl9mbGFncywgZGlyX2RlYnVnLCBTX0lXVVNSKTsKIAlERUJVR0ZTX0FERF9GSUxFKHdkX3RpbWVvdXQsIGRpcl9kZWJ1ZywgU19JV1VTUik7CiAJaWYgKGl3bF9hZHZhbmNlZF9idF9jb2V4aXN0KHByaXYpKQogCQlERUJVR0ZTX0FERF9GSUxFKGJ0X3RyYWZmaWMsIGRpcl9kZWJ1ZywgU19JUlVTUik7Ci0JaWYgKHByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPnNlbnNpdGl2aXR5X2NhbGliX2J5X2RyaXZlcikKLQkJREVCVUdGU19BRERfQk9PTChkaXNhYmxlX3NlbnNpdGl2aXR5LCBkaXJfcmYsCi0JCQkJICZwcml2LT5kaXNhYmxlX3NlbnNfY2FsKTsKLQlpZiAocHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+Y2hhaW5fbm9pc2VfY2FsaWJfYnlfZHJpdmVyKQotCQlERUJVR0ZTX0FERF9CT09MKGRpc2FibGVfY2hhaW5fbm9pc2UsIGRpcl9yZiwKLQkJCQkgJnByaXYtPmRpc2FibGVfY2hhaW5fbm9pc2VfY2FsKTsKLQlpZiAocHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+dHhfcG93ZXJfYnlfZHJpdmVyKQotCQlERUJVR0ZTX0FERF9CT09MKGRpc2FibGVfdHhfcG93ZXIsIGRpcl9yZiwKLQkJCQkmcHJpdi0+ZGlzYWJsZV90eF9wb3dlcl9jYWwpOworCURFQlVHRlNfQUREX0JPT0woZGlzYWJsZV9zZW5zaXRpdml0eSwgZGlyX3JmLAorCQkJICZwcml2LT5kaXNhYmxlX3NlbnNfY2FsKTsKKwlERUJVR0ZTX0FERF9CT09MKGRpc2FibGVfY2hhaW5fbm9pc2UsIGRpcl9yZiwKKwkJCSAmcHJpdi0+ZGlzYWJsZV9jaGFpbl9ub2lzZV9jYWwpOwogCXJldHVybiAwOwogCiBlcnI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldi5oCmluZGV4IDY4Yjk1M2YuLjIxNGU0NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldi5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTI2LDcgKzI2LDYgQEAKIC8qCiAgKiBQbGVhc2UgdXNlIHRoaXMgZmlsZSAoaXdsLWRldi5oKSBmb3IgZHJpdmVyIGltcGxlbWVudGF0aW9uIGRlZmluaXRpb25zLgogICogUGxlYXNlIHVzZSBpd2wtY29tbWFuZHMuaCBmb3IgdUNvZGUgQVBJIGRlZmluaXRpb25zLgotICogUGxlYXNlIHVzZSBpd2wtNDk2NS1ody5oIGZvciBoYXJkd2FyZS1yZWxhdGVkIGRlZmluaXRpb25zLgogICovCiAKICNpZm5kZWYgX19pd2xfZGV2X2hfXwpAQCAtMTc5LDUzICsxNzgsMTIgQEAKIAogI2RlZmluZSBJV0xfTlVNX1NDQU5fUkFURVMgICAgICAgICAoMikKIAotc3RydWN0IGl3bDQ5NjVfY2hhbm5lbF90Z2RfaW5mbyB7Ci0JdTggdHlwZTsKLQlzOCBtYXhfcG93ZXI7Ci19OwotCi1zdHJ1Y3QgaXdsNDk2NV9jaGFubmVsX3RnaF9pbmZvIHsKLQlzNjQgbGFzdF9yYWRhcl90aW1lOwotfTsKLQotI2RlZmluZSBJV0w0OTY1X01BWF9SQVRFICgzMykKLQotc3RydWN0IGl3bDM5NDVfY2xpcF9ncm91cCB7Ci0JLyogbWF4aW11bSBwb3dlciBsZXZlbCB0byBwcmV2ZW50IGNsaXBwaW5nIGZvciBlYWNoIHJhdGUsIGRlcml2ZWQgYnkKLQkgKiAgIHVzIGZyb20gdGhpcyBiYW5kJ3Mgc2F0dXJhdGlvbiBwb3dlciBpbiBFRVBST00gKi8KLQljb25zdCBzOCBjbGlwX3Bvd2Vyc1tJV0xfTUFYX1JBVEVTXTsKLX07Ci0KLS8qIGN1cnJlbnQgVHggcG93ZXIgdmFsdWVzIHRvIHVzZSwgb25lIGZvciBlYWNoIHJhdGUgZm9yIGVhY2ggY2hhbm5lbC4KLSAqIHJlcXVlc3RlZCBwb3dlciBpcyBsaW1pdGVkIGJ5OgotICogLS0gcmVndWxhdG9yeSBFRVBST00gbGltaXRzIGZvciB0aGlzIGNoYW5uZWwKLSAqIC0tIGhhcmR3YXJlIGNhcGFiaWxpdGllcyAoY2xpcC1wb3dlcnMpCi0gKiAtLSBzcGVjdHJ1bSBtYW5hZ2VtZW50Ci0gKiAtLSB1c2VyIHByZWZlcmVuY2UgKGUuZy4gaXdjb25maWcpCi0gKiB3aGVuIHJlcXVlc3RlZCBwb3dlciBpcyBzZXQsIGJhc2UgcG93ZXIgaW5kZXggbXVzdCBhbHNvIGJlIHNldC4gKi8KLXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfcG93ZXJfaW5mbyB7Ci0Jc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIgdHBjOwkvKiBhY3R1YWwgcmFkaW8gYW5kIERTUCBnYWluIHNldHRpbmdzICovCi0JczggcG93ZXJfdGFibGVfaW5kZXg7CS8qIGFjdHVhbCAoY29tcGVuc3QnZCkgaW5kZXggaW50byBnYWluIHRhYmxlICovCi0JczggYmFzZV9wb3dlcl9pbmRleDsJLyogZ2FpbiBpbmRleCBmb3IgcG93ZXIgYXQgZmFjdG9yeSB0ZW1wLiAqLwotCXM4IHJlcXVlc3RlZF9wb3dlcjsJLyogcG93ZXIgKGRCbSkgcmVxdWVzdGVkIGZvciB0aGlzIGNobmwvcmF0ZSAqLwotfTsKLQotLyogY3VycmVudCBzY2FuIFR4IHBvd2VyIHZhbHVlcyB0byB1c2UsIG9uZSBmb3IgZWFjaCBzY2FuIHJhdGUgZm9yIGVhY2gKLSAqIGNoYW5uZWwuICovCi1zdHJ1Y3QgaXdsMzk0NV9zY2FuX3Bvd2VyX2luZm8gewotCXN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHRwYzsJLyogYWN0dWFsIHJhZGlvIGFuZCBEU1AgZ2FpbiBzZXR0aW5ncyAqLwotCXM4IHBvd2VyX3RhYmxlX2luZGV4OwkvKiBhY3R1YWwgKGNvbXBlbnN0J2QpIGluZGV4IGludG8gZ2FpbiB0YWJsZSAqLwotCXM4IHJlcXVlc3RlZF9wb3dlcjsJLyogc2NhbiBwd3IgKGRCbSkgcmVxdWVzdGVkIGZvciBjaG5sL3JhdGUgKi8KLX07Ci0KIC8qCiAgKiBPbmUgZm9yIGVhY2ggY2hhbm5lbCwgaG9sZHMgYWxsIGNoYW5uZWwgc2V0dXAgZGF0YQogICogU29tZSBvZiB0aGUgZmllbGRzIChlLmcuIGVlcHJvbSBhbmQgZmxhZ3MvbWF4X3Bvd2VyX2F2ZykgYXJlIHJlZHVuZGFudAogICogICAgIHdpdGggb25lIGFub3RoZXIhCiAgKi8KIHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvIHsKLQlzdHJ1Y3QgaXdsNDk2NV9jaGFubmVsX3RnZF9pbmZvIHRnZDsKLQlzdHJ1Y3QgaXdsNDk2NV9jaGFubmVsX3RnaF9pbmZvIHRnaDsKIAlzdHJ1Y3QgaXdsX2VlcHJvbV9jaGFubmVsIGVlcHJvbTsJLyogRUVQUk9NIHJlZ3VsYXRvcnkgbGltaXQgKi8KIAlzdHJ1Y3QgaXdsX2VlcHJvbV9jaGFubmVsIGh0NDBfZWVwcm9tOwkvKiBFRVBST00gcmVndWxhdG9yeSBsaW1pdCBmb3IKIAkJCQkJCSAqIEhUNDAgY2hhbm5lbCAqLwpAQCAtMjQ1LDE0ICsyMDMsNiBAQAogCXM4IGh0NDBfbWF4X3Bvd2VyX2F2ZzsJLyogKGRCbSkgcmVndWwuIGVlcHJvbSwgbm9ybWFsIFR4LCBhbnkgcmF0ZSAqLwogCXU4IGh0NDBfZmxhZ3M7CQkvKiBmbGFncyBjb3BpZWQgZnJvbSBFRVBST00gKi8KIAl1OCBodDQwX2V4dGVuc2lvbl9jaGFubmVsOyAvKiBIVF9JRV9FWFRfQ0hBTk5FTF8qICovCi0KLQkvKiBSYWRpby9EU1AgZ2FpbiBzZXR0aW5ncyBmb3IgZWFjaCAibm9ybWFsIiBkYXRhIFR4IHJhdGUuCi0JICogVGhlc2UgaW5jbHVkZSwgaW4gYWRkaXRpb24gdG8gUkYgYW5kIERTUCBnYWluLCBhIGZldyBmaWVsZHMgZm9yCi0JICogICByZW1lbWJlcmluZy9tb2RpZnlpbmcgZ2FpbiBzZXR0aW5ncyAoaW5kZXhlcykuICovCi0Jc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9wb3dlcl9pbmZvIHBvd2VyX2luZm9bSVdMNDk2NV9NQVhfUkFURV07Ci0KLQkvKiBSYWRpby9EU1AgZ2FpbiBzZXR0aW5ncyBmb3IgZWFjaCBzY2FuIHJhdGUsIGZvciBkaXJlY3RlZCBzY2Fucy4gKi8KLQlzdHJ1Y3QgaXdsMzk0NV9zY2FuX3Bvd2VyX2luZm8gc2Nhbl9wd3JfaW5mb1tJV0xfTlVNX1NDQU5fUkFURVNdOwogfTsKIAogI2RlZmluZSBJV0xfVFhfRklGT19CSwkJMAkvKiBzaGFyZWQgKi8KQEAgLTI4OCwxNSArMjM4LDYgQEAKICNkZWZpbmUgSUVFRTgwMjExX0hMRU4gICAgICAgICAgICAgICAgICAoSUVFRTgwMjExXzRBRERSX0xFTikKICNkZWZpbmUgSUVFRTgwMjExX0ZSQU1FX0xFTiAgICAgICAgICAgICAoSUVFRTgwMjExX0RBVEFfTEVOICsgSUVFRTgwMjExX0hMRU4pCiAKLXN0cnVjdCBpd2xfZnJhbWUgewotCXVuaW9uIHsKLQkJc3RydWN0IGllZWU4MDIxMV9oZHIgZnJhbWU7Ci0JCXN0cnVjdCBpd2xfdHhfYmVhY29uX2NtZCBiZWFjb247Ci0JCXU4IHJhd1tJRUVFODAyMTFfRlJBTUVfTEVOXTsKLQkJdTggY21kWzM2MF07Ci0JfSB1OwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLX07CiAKICNkZWZpbmUgU0VRX1RPX1NOKHNlcSkgKCgoc2VxKSAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNCkKICNkZWZpbmUgU05fVE9fU0VRKHNzbikgKCgoc3NuKSA8PCA0KSAmIElFRUU4MDIxMV9TQ1RMX1NFUSkKQEAgLTMwOSw2ICsyNTAsNyBAQAogCUNNRF9TSVpFX0hVR0UgPSAoMSA8PCAwKSwKIAlDTURfQVNZTkMgPSAoMSA8PCAxKSwKIAlDTURfV0FOVF9TS0IgPSAoMSA8PCAyKSwKKwlDTURfTUFQUEVEID0gKDEgPDwgMyksCiB9OwogCiAjZGVmaW5lIERFRl9DTURfUEFZTE9BRF9TSVpFIDMyMApAQCAtNDE2LDYgKzM1OCw3IEBACiAjZGVmaW5lIElXTF9FTVBUWUlOR19IV19RVUVVRV9BRERCQSAyCiAjZGVmaW5lIElXTF9FTVBUWUlOR19IV19RVUVVRV9ERUxCQSAzCiAJdTggc3RhdGU7CisJdTggdHhfZmlmbzsKIH07CiAKIApAQCAtNDk5LDkgKzQ0Miw2IEBACiAgKiBXaGVuIG1hYzgwMjExIGNyZWF0ZXMgYSBzdGF0aW9uIGl0IHJlc2VydmVzIHNvbWUgc3BhY2UgKGh3LT5zdGFfZGF0YV9zaXplKQogICogaW4gdGhlIHN0cnVjdHVyZSBmb3IgdXNlIGJ5IGRyaXZlci4gVGhpcyBzdHJ1Y3R1cmUgaXMgcGxhY2VzIGluIHRoYXQKICAqIHNwYWNlLgotICoKLSAqIFRoZSBjb21tb24gc3RydWN0IE1VU1QgYmUgZmlyc3QgYmVjYXVzZSBpdCBpcyBzaGFyZWQgYmV0d2VlbgotICogMzk0NSBhbmQgYWduIQogICovCiBzdHJ1Y3QgaXdsX3N0YXRpb25fcHJpdiB7CiAJc3RydWN0IGl3bF9zdGF0aW9uX3ByaXZfY29tbW9uIGNvbW1vbjsKQEAgLTUzMCw2ICs0NzAsMTAgQEAKIAl1MzIgbGVuOwkJLyogYnl0ZXMgKi8KIH07CiAKK3N0cnVjdCBmd19pbWcgeworCXN0cnVjdCBmd19kZXNjIGNvZGUsIGRhdGE7Cit9OworCiAvKiB2MS92MiB1Q29kZSBmaWxlIGxheW91dCAqLwogc3RydWN0IGl3bF91Y29kZV9oZWFkZXIgewogCV9fbGUzMiB2ZXI7CS8qIG1ham9yL21pbm9yL0FQSS9zZXJpYWwgKi8KQEAgLTU4Niw2ICs1MzAsMjIgQEAKIAlJV0xfVUNPREVfVExWX0lOSVRfRVJSTE9HX1BUUgk9IDEzLAogCUlXTF9VQ09ERV9UTFZfRU5IQU5DRV9TRU5TX1RCTAk9IDE0LAogCUlXTF9VQ09ERV9UTFZfUEhZX0NBTElCUkFUSU9OX1NJWkUgPSAxNSwKKwkvKiAxNiBhbmQgMTcgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KKwlJV0xfVUNPREVfVExWX0ZMQUdTCQk9IDE4LAorfTsKKworLyoqCisgKiBlbnVtIGl3bF91Y29kZV90bHZfZmxhZyAtIHVjb2RlIEFQSSBmbGFncworICogQElXTF9VQ09ERV9UTFZfRkxBR1NfUEFOOiBUaGlzIGlzIFBBTiBjYXBhYmxlIG1pY3JvY29kZTsgdGhpcyBwcmV2aW91c2x5CisgKgl3YXMgYSBzZXBhcmF0ZSBUTFYgYnV0IG1vdmVkIGhlcmUgdG8gc2F2ZSBzcGFjZS4KKyAqIEBJV0xfVUNPREVfVExWX0ZMQUdTX05FV1NDQU46IG5ldyB1Q29kZSBzY2FuIGJlaGF2aW91ciBvbiBoaWRkZW4gU1NJRCwKKyAqCXRyZWF0cyBnb29kIENSQyB0aHJlc2hvbGQgYXMgYSBib29sZWFuCisgKiBASVdMX1VDT0RFX1RMVl9GTEFHU19NRlA6IFRoaXMgdUNvZGUgaW1hZ2Ugc3VwcG9ydHMgTUZQICg4MDIuMTF3KS4KKyAqLworZW51bSBpd2xfdWNvZGVfdGx2X2ZsYWcgeworCUlXTF9VQ09ERV9UTFZfRkxBR1NfUEFOCQk9IEJJVCgwKSwKKwlJV0xfVUNPREVfVExWX0ZMQUdTX05FV1NDQU4JPSBCSVQoMSksCisJSVdMX1VDT0RFX1RMVl9GTEFHU19NRlAJCT0gQklUKDIpLAogfTsKIAogc3RydWN0IGl3bF91Y29kZV90bHYgewpAQCAtNjE5LDE0ICs1NzksNiBAQAogCXU4IGRhdGFbMF07CiB9OwogCi1zdHJ1Y3QgaXdsNDk2NV9pYnNzX3NlcSB7Ci0JdTggbWFjW0VUSF9BTEVOXTsKLQl1MTYgc2VxX251bTsKLQl1MTYgZnJhZ19udW07Ci0JdW5zaWduZWQgbG9uZyBwYWNrZXRfdGltZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci19OwotCiBzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X3JhbmdlcyB7CiAJdTE2IG1pbl9ucmdfY2NrOwogCXUxNiBtYXhfbnJnX2NjazsKQEAgLTcwMCw3ICs2NTIsNiBAQAogCXU4ICBtYXhfYmVhY29uX2l0cnZsOwkvKiBpbiAxMDI0IG1zICovCiAJdTMyIG1heF9pbnN0X3NpemU7CiAJdTMyIG1heF9kYXRhX3NpemU7Ci0JdTMyIG1heF9ic21fc2l6ZTsKIAl1MzIgY3Rfa2lsbF90aHJlc2hvbGQ7IC8qIHZhbHVlIGluIGh3LWRlcGVuZGVudCB1bml0cyAqLwogCXUzMiBjdF9raWxsX2V4aXRfdGhyZXNob2xkOyAvKiB2YWx1ZSBpbiBody1kZXBlbmRlbnQgdW5pdHMgKi8KIAkJCQkgICAgLyogZm9yIDEwMDAsIDYwMDAgc2VyaWVzIGFuZCB1cCAqLwpAQCAtNzIyLDggKzY3Myw2IEBACiAgKiBOYW1pbmcgY29udmVudGlvbiAtLQogICogaXdsXyAgICAgICAgIDwtLSBJcyBwYXJ0IG9mIGl3bHdpZmkKICAqIGl3bFhYWFhfICAgICA8LS0gSGFyZHdhcmUgc3BlY2lmaWMgKGltcGxlbWVudGVkIGluIGl3bC1YWFhYLmMgZm9yIFhYWFgpCi0gKiBpd2w0OTY1X2JnXyAgICAgIDwtLSBDYWxsZWQgZnJvbSB3b3JrIHF1ZXVlIGNvbnRleHQKLSAqIGl3bDQ5NjVfbWFjXyAgICAgPC0tIG1hYzgwMjExIGNhbGxiYWNrCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBleHRlcm4gdm9pZCBpd2xfdXBkYXRlX2NoYWluX2ZsYWdzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CkBAIC03NzIsNyArNzIxLDYgQEAKIAogLyogU2Vuc2l0aXZpdHkgYW5kIGNoYWluIG5vaXNlIGNhbGlicmF0aW9uICovCiAjZGVmaW5lIElOSVRJQUxJWkFUSU9OX1ZBTFVFCQkweEZGRkYKLSNkZWZpbmUgSVdMNDk2NV9DQUxfTlVNX0JFQUNPTlMJCTIwCiAjZGVmaW5lIElXTF9DQUxfTlVNX0JFQUNPTlMJCTE2CiAjZGVmaW5lIE1BWElNVU1fQUxMT1dFRF9QQVRITE9TUwkxNQogCkBAIC04MDYsMjQgKzc1NCwxOSBAQAogI2RlZmluZSBOUkdfTlVNX1BSRVZfU1RBVF9MICAgICAyMAogI2RlZmluZSBOVU1fUlhfQ0hBSU5TICAgICAgICAgICAzCiAKLWVudW0gaXdsNDk2NV9mYWxzZV9hbGFybV9zdGF0ZSB7CitlbnVtIGl3bGFnbl9mYWxzZV9hbGFybV9zdGF0ZSB7CiAJSVdMX0ZBX1RPT19NQU5ZID0gMCwKIAlJV0xfRkFfVE9PX0ZFVyA9IDEsCiAJSVdMX0ZBX0dPT0RfUkFOR0UgPSAyLAogfTsKIAotZW51bSBpd2w0OTY1X2NoYWluX25vaXNlX3N0YXRlIHsKK2VudW0gaXdsYWduX2NoYWluX25vaXNlX3N0YXRlIHsKIAlJV0xfQ0hBSU5fTk9JU0VfQUxJVkUgPSAwLCAgLyogbXVzdCBiZSAwICovCiAJSVdMX0NIQUlOX05PSVNFX0FDQ1VNVUxBVEUsCiAJSVdMX0NIQUlOX05PSVNFX0NBTElCUkFURUQsCiAJSVdMX0NIQUlOX05PSVNFX0RPTkUsCiB9OwogCi1lbnVtIGl3bDQ5NjVfY2FsaWJfZW5hYmxlZF9zdGF0ZSB7Ci0JSVdMX0NBTElCX0RJU0FCTEVEID0gMCwgIC8qIG11c3QgYmUgMCAqLwotCUlXTF9DQUxJQl9FTkFCTEVEID0gMSwKLX07Ci0KIAogLyoKICAqIGVudW0gaXdsX2NhbGliCkBAIC04NDcsMTIgKzc5MCw2IEBACiAJc2l6ZV90IGJ1Zl9sZW47CiB9OwogCi1lbnVtIHVjb2RlX3R5cGUgewotCVVDT0RFX05PTkUgPSAwLAotCVVDT0RFX0lOSVQsCi0JVUNPREVfUlQKLX07Ci0KIC8qIFNlbnNpdGl2aXR5IGNhbGliIGRhdGEgKi8KIHN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfZGF0YSB7CiAJdTMyIGF1dG9fY29ycl9vZmRtOwpAQCAtMTEzMSwxMiArMTA2OCw2IEBACiAKIC8qIGV4dGVuZCBiZWFjb24gdGltZSBmb3JtYXQgYml0IHNoaWZ0aW5nICAqLwogLyoKLSAqIGZvciBfMzk0NSBkZXZpY2VzCi0gKiBiaXRzIDMxOjI0IC0gZXh0ZW5kZWQKLSAqIGJpdHMgMjM6MCAgLSBpbnRlcnZhbAotICovCi0jZGVmaW5lIElXTDM5NDVfRVhUX0JFQUNPTl9USU1FX1BPUwkyNAotLyoKICAqIGZvciBfYWduIGRldmljZXMKICAqIGJpdHMgMzE6MjIgLSBleHRlbmRlZAogICogYml0cyAyMTowICAtIGludGVydmFsCkBAIC0xMTY0LDEwICsxMDk1LDEyIEBACiBzdHJ1Y3QgaXdsX25vdGlmaWNhdGlvbl93YWl0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAKLQl2b2lkICgqZm4pKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCk7CisJdm9pZCAoKmZuKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QsCisJCSAgIHZvaWQgKmRhdGEpOworCXZvaWQgKmZuX2RhdGE7CiAKIAl1OCBjbWQ7Ci0JYm9vbCB0cmlnZ2VyZWQ7CisJYm9vbCB0cmlnZ2VyZWQsIGFib3J0ZWQ7CiB9OwogCiBlbnVtIGl3bF9yeG9uX2NvbnRleHRfaWQgewpAQCAtMTIyOCw2ICsxMTYxLDggQEAKIAkJYm9vbCBlbmFibGVkLCBpc180MG1oejsKIAkJdTggZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0OwogCX0gaHQ7CisKKwlib29sIGxhc3RfdHhfcmVqZWN0ZWQ7CiB9OwogCiBlbnVtIGl3bF9zY2FuX3R5cGUgewpAQCAtMTI0NCwxMyArMTE3OSwxMCBAQAogCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqaWVlZV9yYXRlczsKIAlzdHJ1Y3QgaXdsX2NmZyAqY2ZnOwogCi0JLyogdGVtcG9yYXJ5IGZyYW1lIHN0b3JhZ2UgbGlzdCAqLwotCXN0cnVjdCBsaXN0X2hlYWQgZnJlZV9mcmFtZXM7Ci0JaW50IGZyYW1lc19jb3VudDsKLQogCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKLQlpbnQgYWxsb2NfcnhiX3BhZ2U7CiAKKwl2b2lkICgqcHJlX3J4X2hhbmRsZXIpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4Yik7CiAJdm9pZCAoKnJ4X2hhbmRsZXJzW1JFUExZX01BWF0pKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpOwogCkBAIC0xMzA1LDE2ICsxMjM3LDEyIEBACiAJc3BpbmxvY2tfdCBoY21kX2xvY2s7CS8qIHByb3RlY3QgaGNtZCAqLwogCXNwaW5sb2NrX3QgcmVnX2xvY2s7CS8qIHByb3RlY3QgaHcgcmVnaXN0ZXIgYWNjZXNzICovCiAJc3RydWN0IG11dGV4IG11dGV4OwotCXN0cnVjdCBtdXRleCBzeW5jX2NtZF9tdXRleDsgLyogZW5hYmxlIHNlcmlhbGl6YXRpb24gb2Ygc3luYyBjb21tYW5kcyAqLwogCiAJLyogYmFzaWMgcGNpLW5ldHdvcmsgZHJpdmVyIHN0dWZmICovCiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CiAKIAkvKiBwY2kgaGFyZHdhcmUgYWRkcmVzcyBzdXBwb3J0ICovCiAJdm9pZCBfX2lvbWVtICpod19iYXNlOwotCXUzMiAgaHdfcmV2OwotCXUzMiAgaHdfd2FfcmV2OwotCXU4ICAgcmV2X2lkOwogCiAJLyogbWljcm9jb2RlL2RldmljZSBzdXBwb3J0cyBtdWx0aXBsZSBjb250ZXh0cyAqLwogCXU4IHZhbGlkX2NvbnRleHRzOwpAQCAtMTMyNSw2ICsxMjUzLDggQEAKIAkvKiBtYXggbnVtYmVyIG9mIHN0YXRpb24ga2V5cyAqLwogCXU4IHN0YV9rZXlfbWF4X251bTsKIAorCWJvb2wgbmV3X3NjYW5fdGhyZXNob2xkX2JlaGF2aW91cjsKKwogCS8qIEVFUFJPTSBNQUMgYWRkcmVzc2VzICovCiAJc3RydWN0IG1hY19hZGRyZXNzIGFkZHJlc3Nlc1syXTsKIApAQCAtMTMzMiwxMyArMTI2MiwxMCBAQAogCWludCBmd19pbmRleDsJCQkvKiBmaXJtd2FyZSB3ZSdyZSB0cnlpbmcgdG8gbG9hZCAqLwogCXUzMiB1Y29kZV92ZXI7CQkJLyogdmVyc2lvbiBvZiB1Y29kZSwgY29weSBvZgogCQkJCQkgICBpd2xfdWNvZGUudmVyICovCi0Jc3RydWN0IGZ3X2Rlc2MgdWNvZGVfY29kZTsJLyogcnVudGltZSBpbnN0ICovCi0Jc3RydWN0IGZ3X2Rlc2MgdWNvZGVfZGF0YTsJLyogcnVudGltZSBkYXRhIG9yaWdpbmFsICovCi0Jc3RydWN0IGZ3X2Rlc2MgdWNvZGVfZGF0YV9iYWNrdXA7CS8qIHJ1bnRpbWUgZGF0YSBzYXZlL3Jlc3RvcmUgKi8KLQlzdHJ1Y3QgZndfZGVzYyB1Y29kZV9pbml0OwkvKiBpbml0aWFsaXphdGlvbiBpbnN0ICovCi0Jc3RydWN0IGZ3X2Rlc2MgdWNvZGVfaW5pdF9kYXRhOwkvKiBpbml0aWFsaXphdGlvbiBkYXRhICovCi0Jc3RydWN0IGZ3X2Rlc2MgdWNvZGVfYm9vdDsJLyogYm9vdHN0cmFwIGluc3QgKi8KLQllbnVtIHVjb2RlX3R5cGUgdWNvZGVfdHlwZTsKKwlzdHJ1Y3QgZndfaW1nIHVjb2RlX3J0OworCXN0cnVjdCBmd19pbWcgdWNvZGVfaW5pdDsKKworCWVudW0gaXdsYWduX3Vjb2RlX3N1YnR5cGUgdWNvZGVfdHlwZTsKIAl1OCB1Y29kZV93cml0ZV9jb21wbGV0ZTsJLyogdGhlIGltYWdlIHdyaXRlIGlzIGNvbXBsZXRlICovCiAJY2hhciBmaXJtd2FyZV9uYW1lWzI1XTsKIApAQCAtMTM0NiwxMCArMTI3MywxMCBAQAogCiAJc3RydWN0IGl3bF9zd2l0Y2hfcnhvbiBzd2l0Y2hfcnhvbjsKIAotCS8qIDFzdCByZXNwb25zZXMgZnJvbSBpbml0aWFsaXplIGFuZCBydW50aW1lIHVDb2RlIGltYWdlcy4KLQkgKiBfYWduJ3MgaW5pdGlhbGl6ZSBhbGl2ZSByZXNwb25zZSBjb250YWlucyBzb21lIGNhbGlicmF0aW9uIGRhdGEuICovCi0Jc3RydWN0IGl3bF9pbml0X2FsaXZlX3Jlc3AgY2FyZF9hbGl2ZV9pbml0OwotCXN0cnVjdCBpd2xfYWxpdmVfcmVzcCBjYXJkX2FsaXZlOworCXN0cnVjdCB7CisJCXUzMiBlcnJvcl9ldmVudF90YWJsZTsKKwkJdTMyIGxvZ19ldmVudF90YWJsZTsKKwl9IGRldmljZV9wb2ludGVyczsKIAogCXUxNiBhY3RpdmVfcmF0ZTsKIApAQCAtMTM5MCwxNSArMTMxNywxMiBAQAogCXN0cnVjdCBpd2xfcG93ZXJfbWdyIHBvd2VyX2RhdGE7CiAJc3RydWN0IGl3bF90dF9tZ210IHRoZXJtYWxfdGhyb3R0bGU7CiAKLQkvKiBjb250ZXh0IGluZm9ybWF0aW9uICovCi0JdTggYnNzaWRbRVRIX0FMRU5dOyAvKiB1c2VkIG9ubHkgb24gMzk0NSBidXQgZmlsbGVkIGJ5IGNvcmUgKi8KLQogCS8qIHN0YXRpb24gdGFibGUgdmFyaWFibGVzICovCiAKIAkvKiBOb3RlOiBpZiBsb2NrIGFuZCBzdGFfbG9jayBhcmUgbmVlZGVkLCBsb2NrIG11c3QgYmUgYWNxdWlyZWQgZmlyc3QgKi8KIAlzcGlubG9ja190IHN0YV9sb2NrOwogCWludCBudW1fc3RhdGlvbnM7Ci0Jc3RydWN0IGl3bF9zdGF0aW9uX2VudHJ5IHN0YXRpb25zW0lXTF9TVEFUSU9OX0NPVU5UXTsKKwlzdHJ1Y3QgaXdsX3N0YXRpb25fZW50cnkgc3RhdGlvbnNbSVdMQUdOX1NUQVRJT05fQ09VTlRdOwogCXVuc2lnbmVkIGxvbmcgdWNvZGVfa2V5X3RhYmxlOwogCiAJLyogcXVldWUgcmVmY291bnRzICovCkBAIC0xNDIyLDEwMSArMTM0Niw4MSBAQAogCS8qIExhc3QgUngnZCBiZWFjb24gdGltZXN0YW1wICovCiAJdTY0IHRpbWVzdGFtcDsKIAotCXVuaW9uIHsKLSNpZiBkZWZpbmVkKENPTkZJR19JV0wzOTQ1KSB8fCBkZWZpbmVkKENPTkZJR19JV0wzOTQ1X01PRFVMRSkKLQkJc3RydWN0IHsKLQkJCXZvaWQgKnNoYXJlZF92aXJ0OwotCQkJZG1hX2FkZHJfdCBzaGFyZWRfcGh5czsKLQotCQkJc3RydWN0IGRlbGF5ZWRfd29yayB0aGVybWFsX3BlcmlvZGljOwotCQkJc3RydWN0IGRlbGF5ZWRfd29yayByZmtpbGxfcG9sbDsKLQotCQkJc3RydWN0IGl3bDM5NDVfbm90aWZfc3RhdGlzdGljcyBzdGF0aXN0aWNzOworCXN0cnVjdCB7CisJCV9fbGUzMiBmbGFnOworCQlzdHJ1Y3Qgc3RhdGlzdGljc19nZW5lcmFsX2NvbW1vbiBjb21tb247CisJCXN0cnVjdCBzdGF0aXN0aWNzX3J4X25vbl9waHkgcnhfbm9uX3BoeTsKKwkJc3RydWN0IHN0YXRpc3RpY3NfcnhfcGh5IHJ4X29mZG07CisJCXN0cnVjdCBzdGF0aXN0aWNzX3J4X2h0X3BoeSByeF9vZmRtX2h0OworCQlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkgcnhfY2NrOworCQlzdHJ1Y3Qgc3RhdGlzdGljc190eCB0eDsKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVR0ZTCi0JCQlzdHJ1Y3QgaXdsMzk0NV9ub3RpZl9zdGF0aXN0aWNzIGFjY3VtX3N0YXRpc3RpY3M7Ci0JCQlzdHJ1Y3QgaXdsMzk0NV9ub3RpZl9zdGF0aXN0aWNzIGRlbHRhX3N0YXRpc3RpY3M7Ci0JCQlzdHJ1Y3QgaXdsMzk0NV9ub3RpZl9zdGF0aXN0aWNzIG1heF9kZWx0YTsKKwkJc3RydWN0IHN0YXRpc3RpY3NfYnRfYWN0aXZpdHkgYnRfYWN0aXZpdHk7CisJCV9fbGUzMiBudW1fYnRfa2lsbHMsIGFjY3VtX251bV9idF9raWxsczsKICNlbmRpZgotCi0JCQl1MzIgc3RhX3N1cHBfcmF0ZXM7Ci0JCQlpbnQgbGFzdF9yeF9yc3NpOwkvKiBGcm9tIFJ4IHBhY2tldCBzdGF0aXN0aWNzICovCi0KLQkJCS8qIFJ4J2QgcGFja2V0IHRpbWluZyBpbmZvcm1hdGlvbiAqLwotCQkJdTMyIGxhc3RfYmVhY29uX3RpbWU7Ci0JCQl1NjQgbGFzdF90c2Y7Ci0KLQkJCS8qCi0JCQkgKiBlYWNoIGNhbGlicmF0aW9uIGNoYW5uZWwgZ3JvdXAgaW4gdGhlCi0JCQkgKiBFRVBST00gaGFzIGEgZGVyaXZlZCBjbGlwIHNldHRpbmcgZm9yCi0JCQkgKiBlYWNoIHJhdGUuCi0JCQkgKi8KLQkJCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NsaXBfZ3JvdXAgY2xpcF9ncm91cHNbNV07Ci0KLQkJfSBfMzk0NTsKLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0lXTEFHTikgfHwgZGVmaW5lZChDT05GSUdfSVdMQUdOX01PRFVMRSkKLQkJc3RydWN0IHsKLQkJCS8qIElOVCBJQ1QgVGFibGUgKi8KLQkJCV9fbGUzMiAqaWN0X3RibDsKLQkJCXZvaWQgKmljdF90YmxfdmlyOwotCQkJZG1hX2FkZHJfdCBpY3RfdGJsX2RtYTsKLQkJCWRtYV9hZGRyX3QgYWxpZ25lZF9pY3RfdGJsX2RtYTsKLQkJCWludCBpY3RfaW5kZXg7Ci0JCQl1MzIgaW50YTsKLQkJCWJvb2wgdXNlX2ljdDsKLQkJCS8qCi0JCQkgKiByZXBvcnRpbmcgdGhlIG51bWJlciBvZiB0aWRzIGhhcyBBR0cgb24uIDAgbWVhbnMKLQkJCSAqIG5vIEFHR1JFR0FUSU9OCi0JCQkgKi8KLQkJCXU4IGFnZ190aWRzX2NvdW50OwotCi0JCQlzdHJ1Y3QgaXdsX3J4X3BoeV9yZXMgbGFzdF9waHlfcmVzOwotCQkJYm9vbCBsYXN0X3BoeV9yZXNfdmFsaWQ7Ci0KLQkJCXN0cnVjdCBjb21wbGV0aW9uIGZpcm13YXJlX2xvYWRpbmdfY29tcGxldGU7Ci0KLQkJCXUzMiBpbml0X2V2dGxvZ19wdHIsIGluaXRfZXZ0bG9nX3NpemUsIGluaXRfZXJybG9nX3B0cjsKLQkJCXUzMiBpbnN0X2V2dGxvZ19wdHIsIGluc3RfZXZ0bG9nX3NpemUsIGluc3RfZXJybG9nX3B0cjsKLQotCQkJLyoKLQkJCSAqIGNoYWluIG5vaXNlIHJlc2V0IGFuZCBnYWluIGNvbW1hbmRzIGFyZSB0aGUKLQkJCSAqIHR3byBleHRyYSBjYWxpYnJhdGlvbiBjb21tYW5kcyBmb2xsb3dzIHRoZSBzdGFuZGFyZAotCQkJICogcGh5IGNhbGlicmF0aW9uIGNvbW1hbmRzCi0JCQkgKi8KLQkJCXU4IHBoeV9jYWxpYl9jaGFpbl9ub2lzZV9yZXNldF9jbWQ7Ci0JCQl1OCBwaHlfY2FsaWJfY2hhaW5fbm9pc2VfZ2Fpbl9jbWQ7Ci0KLQkJCXN0cnVjdCBpd2xfbm90aWZfc3RhdGlzdGljcyBzdGF0aXN0aWNzOwotCQkJc3RydWN0IGl3bF9idF9ub3RpZl9zdGF0aXN0aWNzIHN0YXRpc3RpY3NfYnQ7Ci0JCQkvKiBjb3VudHMgcmVwbHlfdHggZXJyb3IgKi8KLQkJCXN0cnVjdCByZXBseV90eF9lcnJvcl9zdGF0aXN0aWNzIHJlcGx5X3R4X3N0YXRzOwotCQkJc3RydWN0IHJlcGx5X2FnZ190eF9lcnJvcl9zdGF0aXN0aWNzIHJlcGx5X2FnZ190eF9zdGF0czsKKwl9IHN0YXRpc3RpY3M7CiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUdGUwotCQkJc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzIGFjY3VtX3N0YXRpc3RpY3M7Ci0JCQlzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3MgZGVsdGFfc3RhdGlzdGljczsKLQkJCXN0cnVjdCBpd2xfbm90aWZfc3RhdGlzdGljcyBtYXhfZGVsdGE7Ci0JCQlzdHJ1Y3QgaXdsX2J0X25vdGlmX3N0YXRpc3RpY3MgYWNjdW1fc3RhdGlzdGljc19idDsKLQkJCXN0cnVjdCBpd2xfYnRfbm90aWZfc3RhdGlzdGljcyBkZWx0YV9zdGF0aXN0aWNzX2J0OwotCQkJc3RydWN0IGl3bF9idF9ub3RpZl9zdGF0aXN0aWNzIG1heF9kZWx0YV9idDsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3Qgc3RhdGlzdGljc19nZW5lcmFsX2NvbW1vbiBjb21tb247CisJCXN0cnVjdCBzdGF0aXN0aWNzX3J4X25vbl9waHkgcnhfbm9uX3BoeTsKKwkJc3RydWN0IHN0YXRpc3RpY3NfcnhfcGh5IHJ4X29mZG07CisJCXN0cnVjdCBzdGF0aXN0aWNzX3J4X2h0X3BoeSByeF9vZmRtX2h0OworCQlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkgcnhfY2NrOworCQlzdHJ1Y3Qgc3RhdGlzdGljc190eCB0eDsKKwkJc3RydWN0IHN0YXRpc3RpY3NfYnRfYWN0aXZpdHkgYnRfYWN0aXZpdHk7CisJfSBhY2N1bV9zdGF0cywgZGVsdGFfc3RhdHMsIG1heF9kZWx0YV9zdGF0czsKICNlbmRpZgogCi0JCQkvKiBub3RpZmljYXRpb24gd2FpdCBzdXBwb3J0ICovCi0JCQlzdHJ1Y3QgbGlzdF9oZWFkIG5vdGlmX3dhaXRzOwotCQkJc3BpbmxvY2tfdCBub3RpZl93YWl0X2xvY2s7Ci0JCQl3YWl0X3F1ZXVlX2hlYWRfdCBub3RpZl93YWl0cTsKKwlzdHJ1Y3QgeworCQkvKiBJTlQgSUNUIFRhYmxlICovCisJCV9fbGUzMiAqaWN0X3RibDsKKwkJdm9pZCAqaWN0X3RibF92aXI7CisJCWRtYV9hZGRyX3QgaWN0X3RibF9kbWE7CisJCWRtYV9hZGRyX3QgYWxpZ25lZF9pY3RfdGJsX2RtYTsKKwkJaW50IGljdF9pbmRleDsKKwkJdTMyIGludGE7CisJCWJvb2wgdXNlX2ljdDsKKwkJLyoKKwkJICogcmVwb3J0aW5nIHRoZSBudW1iZXIgb2YgdGlkcyBoYXMgQUdHIG9uLiAwIG1lYW5zCisJCSAqIG5vIEFHR1JFR0FUSU9OCisJCSAqLworCQl1OCBhZ2dfdGlkc19jb3VudDsKIAotCQkJLyogcmVtYWluLW9uLWNoYW5uZWwgb2ZmbG9hZCBzdXBwb3J0ICovCi0JCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmh3X3JvY19jaGFubmVsOwotCQkJc3RydWN0IGRlbGF5ZWRfd29yayBod19yb2Nfd29yazsKLQkJCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgaHdfcm9jX2NoYW50eXBlOwotCQkJaW50IGh3X3JvY19kdXJhdGlvbjsKKwkJc3RydWN0IGl3bF9yeF9waHlfcmVzIGxhc3RfcGh5X3JlczsKKwkJYm9vbCBsYXN0X3BoeV9yZXNfdmFsaWQ7CiAKLQkJCXN0cnVjdCBza19idWZmICpvZmZjaGFuX3R4X3NrYjsKLQkJCWludCBvZmZjaGFuX3R4X3RpbWVvdXQ7Ci0JCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKm9mZmNoYW5fdHhfY2hhbjsKLQkJfSBfYWduOwotI2VuZGlmCi0JfTsKKwkJc3RydWN0IGNvbXBsZXRpb24gZmlybXdhcmVfbG9hZGluZ19jb21wbGV0ZTsKKworCQl1MzIgaW5pdF9ldnRsb2dfcHRyLCBpbml0X2V2dGxvZ19zaXplLCBpbml0X2VycmxvZ19wdHI7CisJCXUzMiBpbnN0X2V2dGxvZ19wdHIsIGluc3RfZXZ0bG9nX3NpemUsIGluc3RfZXJybG9nX3B0cjsKKworCQkvKgorCQkgKiBjaGFpbiBub2lzZSByZXNldCBhbmQgZ2FpbiBjb21tYW5kcyBhcmUgdGhlCisJCSAqIHR3byBleHRyYSBjYWxpYnJhdGlvbiBjb21tYW5kcyBmb2xsb3dzIHRoZSBzdGFuZGFyZAorCQkgKiBwaHkgY2FsaWJyYXRpb24gY29tbWFuZHMKKwkJICovCisJCXU4IHBoeV9jYWxpYl9jaGFpbl9ub2lzZV9yZXNldF9jbWQ7CisJCXU4IHBoeV9jYWxpYl9jaGFpbl9ub2lzZV9nYWluX2NtZDsKKworCQkvKiBjb3VudHMgcmVwbHlfdHggZXJyb3IgKi8KKwkJc3RydWN0IHJlcGx5X3R4X2Vycm9yX3N0YXRpc3RpY3MgcmVwbHlfdHhfc3RhdHM7CisJCXN0cnVjdCByZXBseV9hZ2dfdHhfZXJyb3Jfc3RhdGlzdGljcyByZXBseV9hZ2dfdHhfc3RhdHM7CisJCS8qIG5vdGlmaWNhdGlvbiB3YWl0IHN1cHBvcnQgKi8KKwkJc3RydWN0IGxpc3RfaGVhZCBub3RpZl93YWl0czsKKwkJc3BpbmxvY2tfdCBub3RpZl93YWl0X2xvY2s7CisJCXdhaXRfcXVldWVfaGVhZF90IG5vdGlmX3dhaXRxOworCisJCS8qIHJlbWFpbi1vbi1jaGFubmVsIG9mZmxvYWQgc3VwcG9ydCAqLworCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmh3X3JvY19jaGFubmVsOworCQlzdHJ1Y3QgZGVsYXllZF93b3JrIGh3X3JvY193b3JrOworCQllbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGh3X3JvY19jaGFudHlwZTsKKwkJaW50IGh3X3JvY19kdXJhdGlvbjsKKwkJYm9vbCBod19yb2Nfc2V0dXA7CisKKwkJc3RydWN0IHNrX2J1ZmYgKm9mZmNoYW5fdHhfc2tiOworCQlpbnQgb2ZmY2hhbl90eF90aW1lb3V0OworCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKm9mZmNoYW5fdHhfY2hhbjsKKwl9IF9hZ247CiAKIAkvKiBidCBjb2V4ICovCiAJdTggYnRfZW5hYmxlX2ZsYWc7CkBAIC0xNTU5LDggKzE0NjMsNiBAQAogCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IGlycV90YXNrbGV0OwogCi0Jc3RydWN0IGRlbGF5ZWRfd29yayBpbml0X2FsaXZlX3N0YXJ0OwotCXN0cnVjdCBkZWxheWVkX3dvcmsgYWxpdmVfc3RhcnQ7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBzY2FuX2NoZWNrOwogCiAJLyogVFggUG93ZXIgKi8KQEAgLTE1ODksMTIgKzE0OTEsMTAgQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHhwb3dlcl93b3JrOwogCXUzMiBkaXNhYmxlX3NlbnNfY2FsOwogCXUzMiBkaXNhYmxlX2NoYWluX25vaXNlX2NhbDsKLQl1MzIgZGlzYWJsZV90eF9wb3dlcl9jYWw7CiAJc3RydWN0IHdvcmtfc3RydWN0IHJ1bl90aW1lX2NhbGliX3dvcms7CiAJc3RydWN0IHRpbWVyX2xpc3Qgc3RhdGlzdGljc19wZXJpb2RpYzsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB1Y29kZV90cmFjZTsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB3YXRjaGRvZzsKLQlib29sIGh3X3JlYWR5OwogCiAJc3RydWN0IGl3bF9ldmVudF9sb2cgZXZlbnRfbG9nOwogCkBAIC0xNjU4LDIxICsxNTU4LDI0IEBACiAJICAgICBjdHggPCAmcHJpdi0+Y29udGV4dHNbTlVNX0lXTF9SWE9OX0NUWF07IGN0eCsrKQlcCiAJCWlmIChwcml2LT52YWxpZF9jb250ZXh0cyAmIEJJVChjdHgtPmN0eGlkKSkKIAorc3RhdGljIGlubGluZSBpbnQgaXdsX2lzX2Fzc29jaWF0ZWRfY3R4KHN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHgpCit7CisJcmV0dXJuIChjdHgtPmFjdGl2ZS5maWx0ZXJfZmxhZ3MgJiBSWE9OX0ZJTFRFUl9BU1NPQ19NU0spID8gMSA6IDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGl3bF9pc19hc3NvY2lhdGVkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICAgZW51bSBpd2xfcnhvbl9jb250ZXh0X2lkIGN0eGlkKQogewotCXJldHVybiAocHJpdi0+Y29udGV4dHNbY3R4aWRdLmFjdGl2ZS5maWx0ZXJfZmxhZ3MgJgotCQkJUlhPTl9GSUxURVJfQVNTT0NfTVNLKSA/IDEgOiAwOworCXJldHVybiBpd2xfaXNfYXNzb2NpYXRlZF9jdHgoJnByaXYtPmNvbnRleHRzW2N0eGlkXSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGl3bF9pc19hbnlfYXNzb2NpYXRlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JcmV0dXJuIGl3bF9pc19hc3NvY2lhdGVkKHByaXYsIElXTF9SWE9OX0NUWF9CU1MpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpd2xfaXNfYXNzb2NpYXRlZF9jdHgoc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCkKLXsKLQlyZXR1cm4gKGN0eC0+YWN0aXZlLmZpbHRlcl9mbGFncyAmIFJYT05fRklMVEVSX0FTU09DX01TSykgPyAxIDogMDsKKwlzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4OworCWZvcl9lYWNoX2NvbnRleHQocHJpdiwgY3R4KQorCQlpZiAoaXdsX2lzX2Fzc29jaWF0ZWRfY3R4KGN0eCkpCisJCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX2NoYW5uZWxfdmFsaWQoY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm8pCkBAIC0xNzEwLDEyICsxNjEzLDEwIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgX19pd2xfZnJlZV9wYWdlcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBwYWdlICpwYWdlKQogewogCV9fZnJlZV9wYWdlcyhwYWdlLCBwcml2LT5od19wYXJhbXMucnhfcGFnZV9vcmRlcik7Ci0JcHJpdi0+YWxsb2NfcnhiX3BhZ2UtLTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGl3bF9mcmVlX3BhZ2VzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyBwYWdlKQogewogCWZyZWVfcGFnZXMocGFnZSwgcHJpdi0+aHdfcGFyYW1zLnJ4X3BhZ2Vfb3JkZXIpOwotCXByaXYtPmFsbG9jX3J4Yl9wYWdlLS07CiB9CiAjZW5kaWYJCQkJLyogX19pd2xfZGV2X2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2dHJhY2UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldnRyYWNlLmMKaW5kZXggNGE0ODc2My4uYTYzNWE3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2dHJhY2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXZ0cmFjZS5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDA5IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA5IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldnRyYWNlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXZ0cmFjZS5oCmluZGV4IDRjZjg2NGMuLmYwMDE3MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldnRyYWNlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2dHJhY2UuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOSAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCmluZGV4IDgzMzE5NGEuLmM4Mzk3OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTQyLDYgKzE0Miw0NSBAQAogICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorLyoKKyAqIFRoZSBkZXZpY2UncyBFRVBST00gc2VtYXBob3JlIHByZXZlbnRzIGNvbmZsaWN0cyBiZXR3ZWVuIGRyaXZlciBhbmQgdUNvZGUKKyAqIHdoZW4gYWNjZXNzaW5nIHRoZSBFRVBST007IGVhY2ggYWNjZXNzIGlzIGEgc2VyaWVzIG9mIHB1bHNlcyB0by9mcm9tIHRoZQorICogRUVQUk9NIGNoaXAsIG5vdCBhIHNpbmdsZSBldmVudCwgc28gZXZlbiByZWFkcyBjb3VsZCBjb25mbGljdCBpZiB0aGV5CisgKiB3ZXJlbid0IGFyYml0cmF0ZWQgYnkgdGhlIHNlbWFwaG9yZS4KKyAqLworc3RhdGljIGludCBpd2xfZWVwcm9tX2FjcXVpcmVfc2VtYXBob3JlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwl1MTYgY291bnQ7CisJaW50IHJldDsKKworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IEVFUFJPTV9TRU1fUkVUUllfTElNSVQ7IGNvdW50KyspIHsKKwkJLyogUmVxdWVzdCBzZW1hcGhvcmUgKi8KKwkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCisJCQkgICAgQ1NSX0hXX0lGX0NPTkZJR19SRUdfQklUX0VFUFJPTV9PV05fU0VNKTsKKworCQkvKiBTZWUgaWYgd2UgZ290IGl0ICovCisJCXJldCA9IGl3bF9wb2xsX2JpdChwcml2LCBDU1JfSFdfSUZfQ09ORklHX1JFRywKKwkJCQlDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRfRUVQUk9NX09XTl9TRU0sCisJCQkJQ1NSX0hXX0lGX0NPTkZJR19SRUdfQklUX0VFUFJPTV9PV05fU0VNLAorCQkJCUVFUFJPTV9TRU1fVElNRU9VVCk7CisJCWlmIChyZXQgPj0gMCkgeworCQkJSVdMX0RFQlVHX0VFUFJPTShwcml2LAorCQkJCSJBY3F1aXJlZCBzZW1hcGhvcmUgYWZ0ZXIgJWQgdHJpZXMuXG4iLAorCQkJCWNvdW50KzEpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGl3bF9lZXByb21fcmVsZWFzZV9zZW1hcGhvcmUoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWl3bF9jbGVhcl9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCisJCUNTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9FRVBST01fT1dOX1NFTSk7CisKK30KKwogc3RhdGljIGludCBpd2xfZWVwcm9tX3ZlcmlmeV9zaWduYXR1cmUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXUzMiBncCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0VFUFJPTV9HUCkgJiBDU1JfRUVQUk9NX0dQX1ZBTElEX01TSzsKQEAgLTE4OCwxOCArMjI3LDE2IEBACiAJCQkJQ1NSX09UUF9HUF9SRUdfT1RQX0FDQ0VTU19NT0RFKTsKIH0KIAotc3RhdGljIGludCBpd2xjb3JlX2dldF9udm1fdHlwZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bGNvcmVfZ2V0X252bV90eXBlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGh3X3JldikKIHsKIAl1MzIgb3RwZ3A7CiAJaW50IG52bV90eXBlOwogCiAJLyogT1RQIG9ubHkgdmFsaWQgZm9yIENQL1BQIGFuZCBhZnRlciAqLwotCXN3aXRjaCAocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgeworCXN3aXRjaCAoaHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgewogCWNhc2UgQ1NSX0hXX1JFVl9UWVBFX05PTkU6CiAJCUlXTF9FUlIocHJpdiwgIlVua25vd24gaGFyZHdhcmUgdHlwZVxuIik7CiAJCXJldHVybiAtRU5PRU5UOwotCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzM5NDU6Ci0JY2FzZSBDU1JfSFdfUkVWX1RZUEVfNDk2NToKIAljYXNlIENTUl9IV19SRVZfVFlQRV81MzAwOgogCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUzNTA6CiAJY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTEwMDoKQEAgLTIxNywyNiArMjU0LDIwIEBACiAJcmV0dXJuICBudm1fdHlwZTsKIH0KIAotY29uc3QgdTggKml3bGNvcmVfZWVwcm9tX3F1ZXJ5X2FkZHIoY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2LCBzaXplX3Qgb2Zmc2V0KQotewotCUJVR19PTihvZmZzZXQgPj0gcHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+ZWVwcm9tX3NpemUpOwotCXJldHVybiAmcHJpdi0+ZWVwcm9tW29mZnNldF07Ci19Ci0KIHN0YXRpYyBpbnQgaXdsX2luaXRfb3RwX2FjY2VzcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJldDsKIAogCS8qIEVuYWJsZSA0ME1IeiByYWRpbyBjbG9jayAqLwotCV9pd2xfd3JpdGUzMihwcml2LCBDU1JfR1BfQ05UUkwsCi0JCSAgICAgX2l3bF9yZWFkMzIocHJpdiwgQ1NSX0dQX0NOVFJMKSB8Ci0JCSAgICAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0lOSVRfRE9ORSk7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0dQX0NOVFJMLAorCQkgICAgaXdsX3JlYWQzMihwcml2LCBDU1JfR1BfQ05UUkwpIHwKKwkJICAgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19JTklUX0RPTkUpOwogCiAJLyogd2FpdCBmb3IgY2xvY2sgdG8gYmUgcmVhZHkgKi8KIAlyZXQgPSBpd2xfcG9sbF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAotCQkJCSAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwKLQkJCQkgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQ0xPQ0tfUkVBRFksCi0JCQkJICAyNTAwMCk7CisJCQkJIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQ0xPQ0tfUkVBRFksCisJCQkJIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQ0xPQ0tfUkVBRFksCisJCQkJIDI1MDAwKTsKIAlpZiAocmV0IDwgMCkKIAkJSVdMX0VSUihwcml2LCAiVGltZSBvdXQgYWNjZXNzIE9UUFxuIik7CiAJZWxzZSB7CkBAIC0yNjMsMTcgKzI5NCwxNyBAQAogCXUzMiByOwogCXUzMiBvdHBncDsKIAotCV9pd2xfd3JpdGUzMihwcml2LCBDU1JfRUVQUk9NX1JFRywKLQkJICAgICBDU1JfRUVQUk9NX1JFR19NU0tfQUREUiAmIChhZGRyIDw8IDEpKTsKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfRUVQUk9NX1JFRywKKwkJICAgIENTUl9FRVBST01fUkVHX01TS19BRERSICYgKGFkZHIgPDwgMSkpOwogCXJldCA9IGl3bF9wb2xsX2JpdChwcml2LCBDU1JfRUVQUk9NX1JFRywKLQkJCQkgIENTUl9FRVBST01fUkVHX1JFQURfVkFMSURfTVNLLAotCQkJCSAgQ1NSX0VFUFJPTV9SRUdfUkVBRF9WQUxJRF9NU0ssCi0JCQkJICBJV0xfRUVQUk9NX0FDQ0VTU19USU1FT1VUKTsKKwkJCQkgQ1NSX0VFUFJPTV9SRUdfUkVBRF9WQUxJRF9NU0ssCisJCQkJIENTUl9FRVBST01fUkVHX1JFQURfVkFMSURfTVNLLAorCQkJCSBJV0xfRUVQUk9NX0FDQ0VTU19USU1FT1VUKTsKIAlpZiAocmV0IDwgMCkgewogCQlJV0xfRVJSKHByaXYsICJUaW1lIG91dCByZWFkaW5nIE9UUFslZF1cbiIsIGFkZHIpOwogCQlyZXR1cm4gcmV0OwogCX0KLQlyID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIENTUl9FRVBST01fUkVHKTsKKwlyID0gaXdsX3JlYWQzMihwcml2LCBDU1JfRUVQUk9NX1JFRyk7CiAJLyogY2hlY2sgZm9yIEVDQyBlcnJvcnM6ICovCiAJb3RwZ3AgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9PVFBfR1BfUkVHKTsKIAlpZiAob3RwZ3AgJiBDU1JfT1RQX0dQX1JFR19FQ0NfVU5DT1JSX1NUQVRVU19NU0spIHsKQEAgLTM5Niw3ICs0MjcsNyBAQAogICoKICAqIE5PVEU6ICBUaGlzIHJvdXRpbmUgdXNlcyB0aGUgbm9uLWRlYnVnIElPIGFjY2VzcyBmdW5jdGlvbnMuCiAgKi8KLWludCBpd2xfZWVwcm9tX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQoraW50IGl3bF9lZXByb21faW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBod19yZXYpCiB7CiAJX19sZTE2ICplOwogCXUzMiBncCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0VFUFJPTV9HUCk7CkBAIC00MDYsNyArNDM3LDcgQEAKIAl1MTYgdmFsaWRibG9ja2FkZHIgPSAwOwogCXUxNiBjYWNoZV9hZGRyID0gMDsKIAotCXByaXYtPm52bV9kZXZpY2VfdHlwZSA9IGl3bGNvcmVfZ2V0X252bV90eXBlKHByaXYpOworCXByaXYtPm52bV9kZXZpY2VfdHlwZSA9IGl3bGNvcmVfZ2V0X252bV90eXBlKHByaXYsIGh3X3Jldik7CiAJaWYgKHByaXYtPm52bV9kZXZpY2VfdHlwZSA9PSAtRU5PRU5UKQogCQlyZXR1cm4gLUVOT0VOVDsKIAkvKiBhbGxvY2F0ZSBlZXByb20gKi8KQEAgLTQyOSw3ICs0NjAsNyBAQAogCX0KIAogCS8qIE1ha2Ugc3VyZSBkcml2ZXIgKGluc3RlYWQgb2YgdUNvZGUpIGlzIGFsbG93ZWQgdG8gcmVhZCBFRVBST00gKi8KLQlyZXQgPSBwcml2LT5jZmctPm9wcy0+bGliLT5lZXByb21fb3BzLmFjcXVpcmVfc2VtYXBob3JlKHByaXYpOworCXJldCA9IGl3bF9lZXByb21fYWNxdWlyZV9zZW1hcGhvcmUocHJpdik7CiAJaWYgKHJldCA8IDApIHsKIAkJSVdMX0VSUihwcml2LCAiRmFpbGVkIHRvIGFjcXVpcmUgRUVQUk9NIHNlbWFwaG9yZS5cbiIpOwogCQlyZXQgPSAtRU5PRU5UOwpAQCAtNDQ0LDkgKzQ3NSw5IEBACiAJCQlyZXQgPSAtRU5PRU5UOwogCQkJZ290byBkb25lOwogCQl9Ci0JCV9pd2xfd3JpdGUzMihwcml2LCBDU1JfRUVQUk9NX0dQLAotCQkJICAgICBpd2xfcmVhZDMyKHByaXYsIENTUl9FRVBST01fR1ApICYKLQkJCSAgICAgfkNTUl9FRVBST01fR1BfSUZfT1dORVJfTVNLKTsKKwkJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0VFUFJPTV9HUCwKKwkJCSAgICBpd2xfcmVhZDMyKHByaXYsIENTUl9FRVBST01fR1ApICYKKwkJCSAgICB+Q1NSX0VFUFJPTV9HUF9JRl9PV05FUl9NU0spOwogCiAJCWl3bF9zZXRfYml0KHByaXYsIENTUl9PVFBfR1BfUkVHLAogCQkJICAgICBDU1JfT1RQX0dQX1JFR19FQ0NfQ09SUl9TVEFUVVNfTVNLIHwKQEAgLTQ3Myw4ICs1MDQsOCBAQAogCQlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgc3o7IGFkZHIgKz0gc2l6ZW9mKHUxNikpIHsKIAkJCXUzMiByOwogCi0JCQlfaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0VFUFJPTV9SRUcsCi0JCQkJICAgICBDU1JfRUVQUk9NX1JFR19NU0tfQUREUiAmIChhZGRyIDw8IDEpKTsKKwkJCWl3bF93cml0ZTMyKHByaXYsIENTUl9FRVBST01fUkVHLAorCQkJCSAgICBDU1JfRUVQUk9NX1JFR19NU0tfQUREUiAmIChhZGRyIDw8IDEpKTsKIAogCQkJcmV0ID0gaXdsX3BvbGxfYml0KHByaXYsIENTUl9FRVBST01fUkVHLAogCQkJCQkJICBDU1JfRUVQUk9NX1JFR19SRUFEX1ZBTElEX01TSywKQEAgLTQ4NCw3ICs1MTUsNyBAQAogCQkJCUlXTF9FUlIocHJpdiwgIlRpbWUgb3V0IHJlYWRpbmcgRUVQUk9NWyVkXVxuIiwgYWRkcik7CiAJCQkJZ290byBkb25lOwogCQkJfQotCQkJciA9IF9pd2xfcmVhZF9kaXJlY3QzMihwcml2LCBDU1JfRUVQUk9NX1JFRyk7CisJCQlyID0gaXdsX3JlYWQzMihwcml2LCBDU1JfRUVQUk9NX1JFRyk7CiAJCQllW2FkZHIgLyAyXSA9IGNwdV90b19sZTE2KHIgPj4gMTYpOwogCQl9CiAJfQpAQCAtNDk2LDcgKzUyNyw3IEBACiAKIAlyZXQgPSAwOwogZG9uZToKLQlwcml2LT5jZmctPm9wcy0+bGliLT5lZXByb21fb3BzLnJlbGVhc2Vfc2VtYXBob3JlKHByaXYpOworCWl3bF9lZXByb21fcmVsZWFzZV9zZW1hcGhvcmUocHJpdik7CiAKIGVycjoKIAlpZiAocmV0KQpAQCAtNzE5LDEzICs3NTAsNiBAQAogCQkJCQkgICAgIGZsYWdzICYgRUVQUk9NX0NIQU5ORUxfUkFEQVIpKQogCQkJCSAgICAgICA/ICIiIDogIm5vdCAiKTsKIAotCQkJLyogU2V0IHRoZSB0eF9wb3dlcl91c2VyX2xtdCB0byB0aGUgaGlnaGVzdCBwb3dlcgotCQkJICogc3VwcG9ydGVkIGJ5IGFueSBjaGFubmVsICovCi0JCQlpZiAoZWVwcm9tX2NoX2luZm9bY2hdLm1heF9wb3dlcl9hdmcgPgotCQkJCQkJcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQpCi0JCQkJcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPQotCQkJCSAgICBlZXByb21fY2hfaW5mb1tjaF0ubWF4X3Bvd2VyX2F2ZzsKLQogCQkJY2hfaW5mbysrOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaAppbmRleCAyMGI2NjQ2Li5jOTYwYzZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTExMCwxMCArMTEwLDYgQEAKIH07CiAKIC8qIFNLVSBDYXBhYmlsaXRpZXMgKi8KLS8qIDM5NDUgb25seSAqLwotI2RlZmluZSBFRVBST01fU0tVX0NBUF9TV19SRl9LSUxMX0VOQUJMRSAgICAgICAgICAgICAgICAoMSA8PCAwKQotI2RlZmluZSBFRVBST01fU0tVX0NBUF9IV19SRl9LSUxMX0VOQUJMRSAgICAgICAgICAgICAgICAoMSA8PCAxKQotCiAvKiA1MDAwIGFuZCB1cCAqLwogI2RlZmluZSBFRVBST01fU0tVX0NBUF9CQU5EX1BPUwkJCQkoNCkKICNkZWZpbmUgRUVQUk9NX1NLVV9DQVBfQkFORF9TRUxFQ1RJT04JICAgICAgICAgICAgICAgIFwKQEAgLTE2OCwyOCArMTY0LDYgQEAKIAlzOCBtaW1vM19tYXg7CiB9IF9fcGFja2VkOwogCi0vKiAzOTQ1IFNwZWNpZmljICovCi0jZGVmaW5lIEVFUFJPTV8zOTQ1X0VFUFJPTV9WRVJTSU9OCSgweDJmKQotCi0vKiA0OTY1IGhhcyB0d28gcmFkaW8gdHJhbnNtaXR0ZXJzIChhbmQgMyByYWRpbyByZWNlaXZlcnMpICovCi0jZGVmaW5lIEVFUFJPTV9UWF9QT1dFUl9UWF9DSEFJTlMgICAgICAoMikKLQotLyogNDk2NSBoYXMgcm9vbSBmb3IgdXAgdG8gOCBzZXRzIG9mIHR4cG93ZXIgY2FsaWJyYXRpb24gZGF0YSAqLwotI2RlZmluZSBFRVBST01fVFhfUE9XRVJfQkFORFMgICAgICAgICAgKDgpCi0KLS8qIDQ5NjUgZmFjdG9yeSBjYWxpYnJhdGlvbiBtZWFzdXJlcyB0eHBvd2VyIGdhaW4gc2V0dGluZ3MgZm9yCi0gKiBlYWNoIG9mIDMgdGFyZ2V0IG91dHB1dCBsZXZlbHMgKi8KLSNkZWZpbmUgRUVQUk9NX1RYX1BPV0VSX01FQVNVUkVNRU5UUyAgICgzKQotCi0vKiA0OTY1IFNwZWNpZmljICovCi0vKiA0OTY1IGRyaXZlciBkb2VzIG5vdCB3b3JrIHdpdGggdHhwb3dlciBjYWxpYnJhdGlvbiB2ZXJzaW9uIDwgNSAqLwotI2RlZmluZSBFRVBST01fNDk2NV9UWF9QT1dFUl9WRVJTSU9OICAgICg1KQotI2RlZmluZSBFRVBST01fNDk2NV9FRVBST01fVkVSU0lPTgkoMHgyZikKLSNkZWZpbmUgRUVQUk9NXzQ5NjVfQ0FMSUJfVkVSU0lPTl9PRkZTRVQgICAgICAgKDIqMHhCNikgLyogMiBieXRlcyAqLwotI2RlZmluZSBFRVBST01fNDk2NV9DQUxJQl9UWFBPV0VSX09GRlNFVCAgICAgICAoMioweEU4KSAvKiA0OCAgYnl0ZXMgKi8KLSNkZWZpbmUgRUVQUk9NXzQ5NjVfQk9BUkRfUkVWSVNJT04gICAgICAgICAgICAgKDIqMHg0RikgLyogMiBieXRlcyAqLwotI2RlZmluZSBFRVBST01fNDk2NV9CT0FSRF9QQkEgICAgICAgICAgICAgICAgICAoMioweDU2KzEpIC8qIDkgYnl0ZXMgKi8KLQogLyogNTAwMCBTcGVjaWZpYyAqLwogI2RlZmluZSBFRVBST01fNTAwMF9UWF9QT1dFUl9WRVJTSU9OICAgICg0KQogI2RlZmluZSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTgkoMHgxMUEpCkBAIC0yODIsOTAgKzI1Niw2IEBACiAvKiAyLjQgR0h6ICovCiBleHRlcm4gY29uc3QgdTggaXdsX2VlcHJvbV9iYW5kXzFbMTRdOwogCi0vKgotICogZmFjdG9yeSBjYWxpYnJhdGlvbiBkYXRhIGZvciBvbmUgdHhwb3dlciBsZXZlbCwgb24gb25lIGNoYW5uZWwsCi0gKiBtZWFzdXJlZCBvbiBvbmUgb2YgdGhlIDIgdHggY2hhaW5zIChyYWRpbyB0cmFuc21pdHRlciBhbmQgYXNzb2NpYXRlZAotICogYW50ZW5uYSkuICBFRVBST00gY29udGFpbnM6Ci0gKgotICogMSkgIFRlbXBlcmF0dXJlIChkZWdyZWVzIENlbHNpdXMpIG9mIGRldmljZSB3aGVuIG1lYXN1cmVtZW50IHdhcyBtYWRlLgotICoKLSAqIDIpICBHYWluIHRhYmxlIGluZGV4IHVzZWQgdG8gYWNoaWV2ZSB0aGUgdGFyZ2V0IG1lYXN1cmVtZW50IHBvd2VyLgotICogICAgIFRoaXMgcmVmZXJzIHRvIHRoZSAid2VsbC1rbm93biIgZ2FpbiB0YWJsZXMgKHNlZSBpd2wtNDk2NS1ody5oKS4KLSAqCi0gKiAzKSAgQWN0dWFsIG1lYXN1cmVkIG91dHB1dCBwb3dlciwgaW4gaGFsZi1kQm0gKCIzNCIgPSAxNyBkQm0pLgotICoKLSAqIDQpICBSRiBwb3dlciBhbXBsaWZpZXIgZGV0ZWN0b3IgbGV2ZWwgbWVhc3VyZW1lbnQgKG5vdCB1c2VkKS4KLSAqLwotc3RydWN0IGl3bF9lZXByb21fY2FsaWJfbWVhc3VyZSB7Ci0JdTggdGVtcGVyYXR1cmU7CQkvKiBEZXZpY2UgdGVtcGVyYXR1cmUgKENlbHNpdXMpICovCi0JdTggZ2Fpbl9pZHg7CQkvKiBJbmRleCBpbnRvIGdhaW4gdGFibGUgKi8KLQl1OCBhY3R1YWxfcG93OwkJLyogTWVhc3VyZWQgUkYgb3V0cHV0IHBvd2VyLCBoYWxmLWRCbSAqLwotCXM4IHBhX2RldDsJCS8qIFBvd2VyIGFtcCBkZXRlY3RvciBsZXZlbCAobm90IHVzZWQpICovCi19IF9fcGFja2VkOwotCi0KLS8qCi0gKiBtZWFzdXJlbWVudCBzZXQgZm9yIG9uZSBjaGFubmVsLiAgRUVQUk9NIGNvbnRhaW5zOgotICoKLSAqIDEpICBDaGFubmVsIG51bWJlciBtZWFzdXJlZAotICoKLSAqIDIpICBNZWFzdXJlbWVudHMgZm9yIGVhY2ggb2YgMyBwb3dlciBsZXZlbHMgZm9yIGVhY2ggb2YgMiByYWRpbyB0cmFuc21pdHRlcnMKLSAqICAgICAoYS5rLmEuICJ0eCBjaGFpbnMiKSAoNiBtZWFzdXJlbWVudHMgYWx0b2dldGhlcikKLSAqLwotc3RydWN0IGl3bF9lZXByb21fY2FsaWJfY2hfaW5mbyB7Ci0JdTggY2hfbnVtOwotCXN0cnVjdCBpd2xfZWVwcm9tX2NhbGliX21lYXN1cmUKLQkJbWVhc3VyZW1lbnRzW0VFUFJPTV9UWF9QT1dFUl9UWF9DSEFJTlNdCi0JCQlbRUVQUk9NX1RYX1BPV0VSX01FQVNVUkVNRU5UU107Ci19IF9fcGFja2VkOwotCi0vKgotICogdHhwb3dlciBzdWJiYW5kIGluZm8uCi0gKgotICogRm9yIGVhY2ggZnJlcXVlbmN5IHN1YmJhbmQsIEVFUFJPTSBjb250YWlucyB0aGUgZm9sbG93aW5nOgotICoKLSAqIDEpICBGaXJzdCBhbmQgbGFzdCBjaGFubmVscyB3aXRoaW4gcmFuZ2Ugb2YgdGhlIHN1YmJhbmQuICAiMCIgdmFsdWVzCi0gKiAgICAgaW5kaWNhdGUgdGhhdCB0aGlzIHNhbXBsZSBzZXQgaXMgbm90IGJlaW5nIHVzZWQuCi0gKgotICogMikgIFNhbXBsZSBtZWFzdXJlbWVudCBzZXRzIGZvciAyIGNoYW5uZWxzIGNsb3NlIHRvIHRoZSByYW5nZSBlbmRwb2ludHMuCi0gKi8KLXN0cnVjdCBpd2xfZWVwcm9tX2NhbGliX3N1YmJhbmRfaW5mbyB7Ci0JdTggY2hfZnJvbTsJLyogY2hhbm5lbCBudW1iZXIgb2YgbG93ZXN0IGNoYW5uZWwgaW4gc3ViYmFuZCAqLwotCXU4IGNoX3RvOwkvKiBjaGFubmVsIG51bWJlciBvZiBoaWdoZXN0IGNoYW5uZWwgaW4gc3ViYmFuZCAqLwotCXN0cnVjdCBpd2xfZWVwcm9tX2NhbGliX2NoX2luZm8gY2gxOwotCXN0cnVjdCBpd2xfZWVwcm9tX2NhbGliX2NoX2luZm8gY2gyOwotfSBfX3BhY2tlZDsKLQotCi0vKgotICogdHhwb3dlciBjYWxpYnJhdGlvbiBpbmZvLiAgRUVQUk9NIGNvbnRhaW5zOgotICoKLSAqIDEpICBGYWN0b3J5LW1lYXN1cmVkIHNhdHVyYXRpb24gcG93ZXIgbGV2ZWxzIChtYXhpbXVtIGxldmVscyBhdCB3aGljaAotICogICAgIHR4IHBvd2VyIGFtcGxpZmllciBjYW4gb3V0cHV0IGEgc2lnbmFsIHdpdGhvdXQgdG9vIG11Y2ggZGlzdG9ydGlvbikuCi0gKiAgICAgVGhlcmUgaXMgb25lIGxldmVsIGZvciAyLjQgR0h6IGJhbmQgYW5kIG9uZSBmb3IgNSBHSHogYmFuZC4gIFRoZXNlCi0gKiAgICAgdmFsdWVzIGFwcGx5IHRvIGFsbCBjaGFubmVscyB3aXRoaW4gZWFjaCBvZiB0aGUgYmFuZHMuCi0gKgotICogMikgIEZhY3RvcnktbWVhc3VyZWQgcG93ZXIgc3VwcGx5IHZvbHRhZ2UgbGV2ZWwuICBUaGlzIGlzIGFzc3VtZWQgdG8gYmUKLSAqICAgICBjb25zdGFudCAoaS5lLiBzYW1lIHZhbHVlIGFwcGxpZXMgdG8gYWxsIGNoYW5uZWxzL2JhbmRzKSB3aGlsZSB0aGUKLSAqICAgICBmYWN0b3J5IG1lYXN1cmVtZW50cyBhcmUgYmVpbmcgbWFkZS4KLSAqCi0gKiAzKSAgVXAgdG8gOCBzZXRzIG9mIGZhY3RvcnktbWVhc3VyZWQgdHhwb3dlciBjYWxpYnJhdGlvbiB2YWx1ZXMuCi0gKiAgICAgVGhlc2UgYXJlIGZvciBkaWZmZXJlbnQgZnJlcXVlbmN5IHJhbmdlcywgc2luY2UgdHhwb3dlciBnYWluCi0gKiAgICAgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBhbmFsb2cgcmFkaW8gY2lyY3VpdHJ5IHZhcnkgd2l0aCBmcmVxdWVuY3kuCi0gKgotICogICAgIE5vdCBhbGwgc2V0cyBuZWVkIHRvIGJlIGZpbGxlZCB3aXRoIGRhdGE7Ci0gKiAgICAgc3RydWN0IGl3bF9lZXByb21fY2FsaWJfc3ViYmFuZF9pbmZvIGNvbnRhaW5zIHJhbmdlIG9mIGNoYW5uZWxzCi0gKiAgICAgKDAgaWYgdW51c2VkKSBmb3IgZWFjaCBzZXQgb2YgZGF0YS4KLSAqLwotc3RydWN0IGl3bF9lZXByb21fY2FsaWJfaW5mbyB7Ci0JdTggc2F0dXJhdGlvbl9wb3dlcjI0OwkvKiBoYWxmLWRCbSAoZS5nLiAiMzQiID0gMTcgZEJtKSAqLwotCXU4IHNhdHVyYXRpb25fcG93ZXI1MjsJLyogaGFsZi1kQm0gKi8KLQlfX2xlMTYgdm9sdGFnZTsJCS8qIHNpZ25lZCAqLwotCXN0cnVjdCBpd2xfZWVwcm9tX2NhbGliX3N1YmJhbmRfaW5mbwotCQliYW5kX2luZm9bRUVQUk9NX1RYX1BPV0VSX0JBTkRTXTsKLX0gX19wYWNrZWQ7Ci0KLQogI2RlZmluZSBBRERSRVNTX01TSyAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgogI2RlZmluZSBJTkRJUkVDVF9UWVBFX01TSyAgICAgICAgICAgMHgwMDBGMDAwMAogI2RlZmluZSBJTkRJUkVDVF9IT1NUICAgICAgICAgICAgICAgMHgwMDAxMDAwMApAQCAtMzk4LDEwMyArMjg4LDI0IEBACiAjZGVmaW5lIEVFUFJPTV9SRl9DRkdfVFhfQU5UX01TSyh4KSAoKHggPj4gOCkgICYgMHhGKSAvKiBiaXRzIDgtMTEgICovCiAjZGVmaW5lIEVFUFJPTV9SRl9DRkdfUlhfQU5UX01TSyh4KSAoKHggPj4gMTIpICYgMHhGKSAvKiBiaXRzIDEyLTE1ICovCiAKLSNkZWZpbmUgRUVQUk9NXzM5NDVfUkZfQ0ZHX1RZUEVfTUFYICAweDAKLSNkZWZpbmUgRUVQUk9NXzQ5NjVfUkZfQ0ZHX1RZUEVfTUFYICAweDEKLQotLyogUmFkaW8gQ29uZmlnIGZvciA1MDAwIGFuZCB1cCAqLwotI2RlZmluZSBFRVBST01fUkZfQ09ORklHX1RZUEVfUjN4MwkweDAKLSNkZWZpbmUgRUVQUk9NX1JGX0NPTkZJR19UWVBFX1IyeDIJMHgxCi0jZGVmaW5lIEVFUFJPTV9SRl9DT05GSUdfVFlQRV9SMXgyCTB4MgogI2RlZmluZSBFRVBST01fUkZfQ09ORklHX1RZUEVfTUFYCTB4MwogCi0vKgotICogUGVyLWNoYW5uZWwgcmVndWxhdG9yeSBkYXRhLgotICoKLSAqIEVhY2ggY2hhbm5lbCB0aGF0ICptaWdodCogYmUgc3VwcG9ydGVkIGJ5IGl3bCBoYXMgYSBmaXhlZCBsb2NhdGlvbgotICogaW4gRUVQUk9NIGNvbnRhaW5pbmcgRUVQUk9NX0NIQU5ORUxfKiB1c2FnZSBmbGFncyAoTFNCKSBhbmQgbWF4IHJlZ3VsYXRvcnkKLSAqIHR4cG93ZXIgKE1TQikuCi0gKgotICogRW50cmllcyBpbW1lZGlhdGVseSBiZWxvdyBhcmUgZm9yIDIwIE1IeiBjaGFubmVsIHdpZHRoLiAgSFQ0MCAoNDAgTUh6KQotICogY2hhbm5lbHMgKG9ubHkgZm9yIDQ5NjUsIG5vdCBzdXBwb3J0ZWQgYnkgMzk0NSkgYXBwZWFyIGxhdGVyIGluIHRoZSBFRVBST00uCi0gKgotICogMi40IEdIeiBjaGFubmVscyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQKLSAqLwotI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9TS1VfSUQgICAgICAgICAgICAoMioweDYwKSAgICAvKiA0ICBieXRlcyAqLwotI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9CQU5EXzEgICAgICAgICAgICAoMioweDYyKQkvKiAyICBieXRlcyAqLwotI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9CQU5EXzFfQ0hBTk5FTFMgICAoMioweDYzKQkvKiAyOCBieXRlcyAqLwotCi0vKgotICogNC45IEdIeiBjaGFubmVscyAxODMsIDE4NCwgMTg1LCAxODcsIDE4OCwgMTg5LCAxOTIsIDE5NiwKLSAqIDUuMCBHSHogY2hhbm5lbHMgNywgOCwgMTEsIDEyLCAxNgotICogKDQ5MTUtNTA4ME1IeikgKG5vbmUgb2YgdGhlc2UgaXMgZXZlciBzdXBwb3J0ZWQpCi0gKi8KLSNkZWZpbmUgRUVQUk9NX1JFR1VMQVRPUllfQkFORF8yICAgICAgICAgICAgKDIqMHg3MSkJLyogMiAgYnl0ZXMgKi8KLSNkZWZpbmUgRUVQUk9NX1JFR1VMQVRPUllfQkFORF8yX0NIQU5ORUxTICAgKDIqMHg3MikJLyogMjYgYnl0ZXMgKi8KLQotLyoKLSAqIDUuMiBHSHogY2hhbm5lbHMgMzQsIDM2LCAzOCwgNDAsIDQyLCA0NCwgNDYsIDQ4LCA1MiwgNTYsIDYwLCA2NAotICogKDUxNzAtNTMyME1IeikKLSAqLwotI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9CQU5EXzMgICAgICAgICAgICAoMioweDdGKQkvKiAyICBieXRlcyAqLwotI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9CQU5EXzNfQ0hBTk5FTFMgICAoMioweDgwKQkvKiAyNCBieXRlcyAqLwotCi0vKgotICogNS41IEdIeiBjaGFubmVscyAxMDAsIDEwNCwgMTA4LCAxMTIsIDExNiwgMTIwLCAxMjQsIDEyOCwgMTMyLCAxMzYsIDE0MAotICogKDU1MDAtNTcwME1IeikKLSAqLwotI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9CQU5EXzQgICAgICAgICAgICAoMioweDhDKQkvKiAyICBieXRlcyAqLwotI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9CQU5EXzRfQ0hBTk5FTFMgICAoMioweDhEKQkvKiAyMiBieXRlcyAqLwotCi0vKgotICogNS43IEdIeiBjaGFubmVscyAxNDUsIDE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1Ci0gKiAoNTcyNS01ODI1TUh6KQotICovCi0jZGVmaW5lIEVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfNSAgICAgICAgICAgICgyKjB4OTgpCS8qIDIgIGJ5dGVzICovCi0jZGVmaW5lIEVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfNV9DSEFOTkVMUyAgICgyKjB4OTkpCS8qIDEyIGJ5dGVzICovCi0KLS8qCi0gKiAyLjQgR0h6IEhUNDAgY2hhbm5lbHMgMSAoNSksIDIgKDYpLCAzICg3KSwgNCAoOCksIDUgKDkpLCA2ICgxMCksIDcgKDExKQotICoKLSAqIFRoZSBjaGFubmVsIGxpc3RlZCBpcyB0aGUgY2VudGVyIG9mIHRoZSBsb3dlciAyMCBNSHogaGFsZiBvZiB0aGUgY2hhbm5lbC4KLSAqIFRoZSBvdmVyYWxsIGNlbnRlciBmcmVxdWVuY3kgaXMgYWN0dWFsbHkgMiBjaGFubmVscyAoMTAgTUh6KSBhYm92ZSB0aGF0LAotICogYW5kIHRoZSB1cHBlciBoYWxmIG9mIGVhY2ggSFQ0MCBjaGFubmVsIGlzIGNlbnRlcmVkIDQgY2hhbm5lbHMgKDIwIE1IeikgYXdheQotICogZnJvbSB0aGUgbG93ZXIgaGFsZjsgZS5nLiB0aGUgdXBwZXIgaGFsZiBvZiBIVDQwIGNoYW5uZWwgMSBpcyBjaGFubmVsIDUsCi0gKiBhbmQgdGhlIG92ZXJhbGwgSFQ0MCBjaGFubmVsIHdpZHRoIGNlbnRlcnMgb24gY2hhbm5lbCAzLgotICoKLSAqIE5PVEU6ICBUaGUgUlhPTiBjb21tYW5kIHVzZXMgMjAgTUh6IGNoYW5uZWwgbnVtYmVycyB0byBzcGVjaWZ5IHRoZQotICogICAgICAgIGNvbnRyb2wgY2hhbm5lbCB0byB3aGljaCB0byB0dW5lLiAgUlhPTiBhbHNvIHNwZWNpZmllcyB3aGV0aGVyIHRoZQotICogICAgICAgIGNvbnRyb2wgY2hhbm5lbCBpcyB0aGUgdXBwZXIgb3IgbG93ZXIgaGFsZiBvZiBhIEhUNDAgY2hhbm5lbC4KLSAqCi0gKiBOT1RFOiAgNDk2NSBkb2VzIG5vdCBzdXBwb3J0IEhUNDAgY2hhbm5lbHMgb24gMi40IEdIei4KLSAqLwotI2RlZmluZSBFRVBST01fNDk2NV9SRUdVTEFUT1JZX0JBTkRfMjRfSFQ0MF9DSEFOTkVMUyAoMioweEEwKQkvKiAxNCBieXRlcyAqLwotCi0vKgotICogNS4yIEdIeiBIVDQwIGNoYW5uZWxzIDM2ICg0MCksIDQ0ICg0OCksIDUyICg1NiksIDYwICg2NCksCi0gKiAxMDAgKDEwNCksIDEwOCAoMTEyKSwgMTE2ICgxMjApLCAxMjQgKDEyOCksIDEzMiAoMTM2KSwgMTQ5ICgxNTMpLCAxNTcgKDE2MSkKLSAqLwotI2RlZmluZSBFRVBST01fNDk2NV9SRUdVTEFUT1JZX0JBTkRfNTJfSFQ0MF9DSEFOTkVMUyAoMioweEE4KQkvKiAyMiBieXRlcyAqLwotCiAjZGVmaW5lIEVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfTk9fSFQ0MAkJCSgwKQogCiBzdHJ1Y3QgaXdsX2VlcHJvbV9vcHMgewogCWNvbnN0IHUzMiByZWd1bGF0b3J5X2JhbmRzWzddOwotCWludCAoKmFjcXVpcmVfc2VtYXBob3JlKSAoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKLQl2b2lkICgqcmVsZWFzZV9zZW1hcGhvcmUpIChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotCXUxNiAoKmNhbGliX3ZlcnNpb24pIChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCWNvbnN0IHU4KiAoKnF1ZXJ5X2FkZHIpIChjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHNpemVfdCBvZmZzZXQpOwogCXZvaWQgKCp1cGRhdGVfZW5oYW5jZWRfdHhwb3dlcikgKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB9OwogCiAKLWludCBpd2xfZWVwcm9tX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2ludCBpd2xfZWVwcm9tX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgaHdfcmV2KTsKIHZvaWQgaXdsX2VlcHJvbV9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgIGl3bF9lZXByb21fY2hlY2tfdmVyc2lvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogaW50ICBpd2xfZWVwcm9tX2NoZWNrX3NrdShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogY29uc3QgdTggKml3bF9lZXByb21fcXVlcnlfYWRkcihjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHNpemVfdCBvZmZzZXQpOwogaW50IGl3bGNvcmVfZWVwcm9tX3ZlcmlmeV9zaWduYXR1cmUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHUxNiBpd2xfZWVwcm9tX3F1ZXJ5MTYoY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2LCBzaXplX3Qgb2Zmc2V0KTsKLWNvbnN0IHU4ICppd2xjb3JlX2VlcHJvbV9xdWVyeV9hZGRyKGNvbnN0IHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc2l6ZV90IG9mZnNldCk7CiBpbnQgaXdsX2luaXRfY2hhbm5lbF9tYXAoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHZvaWQgaXdsX2ZyZWVfY2hhbm5lbF9tYXAoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICppd2xfZ2V0X2NoYW5uZWxfaW5mbygKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZoLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1maC5oCmluZGV4IDQ3NDAwOWEuLjZkZmE4MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZoLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZmguaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTc3LDE0ICs3NywxNCBAQAogLyoqCiAgKiBLZWVwLVdhcm0gKEtXKSBidWZmZXIgYmFzZSBhZGRyZXNzLgogICoKLSAqIERyaXZlciBtdXN0IGFsbG9jYXRlIGEgNEtCeXRlIGJ1ZmZlciB0aGF0IGlzIHVzZWQgYnkgNDk2NSBmb3Iga2VlcGluZyB0aGUKKyAqIERyaXZlciBtdXN0IGFsbG9jYXRlIGEgNEtCeXRlIGJ1ZmZlciB0aGF0IGlzIGZvciBrZWVwaW5nIHRoZQogICogaG9zdCBEUkFNIHBvd2VyZWQgb24gKHZpYSBkdW1teSBhY2Nlc3NlcyB0byBEUkFNKSB0byBtYWludGFpbiBsb3ctbGF0ZW5jeQotICogRFJBTSBhY2Nlc3Mgd2hlbiA0OTY1IGlzIFR4aW5nIG9yIFJ4aW5nLiAgVGhlIGR1bW15IGFjY2Vzc2VzIHByZXZlbnQgaG9zdAorICogRFJBTSBhY2Nlc3Mgd2hlbiBkb2luZyBUeGluZyBvciBSeGluZy4gIFRoZSBkdW1teSBhY2Nlc3NlcyBwcmV2ZW50IGhvc3QKICAqIGZyb20gZ29pbmcgaW50byBhIHBvd2VyLXNhdmluZ3MgbW9kZSB0aGF0IHdvdWxkIGNhdXNlIGhpZ2hlciBEUkFNIGxhdGVuY3ksCiAgKiBhbmQgcG9zc2libGUgZGF0YSBvdmVyL3VuZGVyLXJ1bnMsIGJlZm9yZSBhbGwgVHgvUnggaXMgY29tcGxldGUuCiAgKgogICogRHJpdmVyIGxvYWRzIEZIX0tXX01FTV9BRERSX1JFRyB3aXRoIHRoZSBwaHlzaWNhbCBhZGRyZXNzIChiaXRzIDM1OjQpCi0gKiBvZiB0aGUgYnVmZmVyLCB3aGljaCBtdXN0IGJlIDRLIGFsaWduZWQuICBPbmNlIHRoaXMgaXMgc2V0IHVwLCB0aGUgNDk2NQorICogb2YgdGhlIGJ1ZmZlciwgd2hpY2ggbXVzdCBiZSA0SyBhbGlnbmVkLiAgT25jZSB0aGlzIGlzIHNldCB1cCwgdGhlIGRldmljZQogICogYXV0b21hdGljYWxseSBpbnZva2VzIGtlZXAtd2FybSBhY2Nlc3NlcyB3aGVuIG5vcm1hbCBhY2Nlc3NlcyBtaWdodCBub3QKICAqIGJlIHN1ZmZpY2llbnQgdG8gbWFpbnRhaW4gZmFzdCBEUkFNIHJlc3BvbnNlLgogICoKQEAgLTk3LDcgKzk3LDcgQEAKIC8qKgogICogVEZEIENpcmN1bGFyIEJ1ZmZlcnMgQmFzZSAoQ0JCQykgYWRkcmVzc2VzCiAgKgotICogNDk2NSBoYXMgMTYgYmFzZSBwb2ludGVyIHJlZ2lzdGVycywgb25lIGZvciBlYWNoIG9mIDE2IGhvc3QtRFJBTS1yZXNpZGVudAorICogRGV2aWNlIGhhcyAxNiBiYXNlIHBvaW50ZXIgcmVnaXN0ZXJzLCBvbmUgZm9yIGVhY2ggb2YgMTYgaG9zdC1EUkFNLXJlc2lkZW50CiAgKiBjaXJjdWxhciBidWZmZXJzIChDQnMvcXVldWVzKSBjb250YWluaW5nIFRyYW5zbWl0IEZyYW1lIERlc2NyaXB0b3JzIChURkRzKQogICogKHNlZSBzdHJ1Y3QgaXdsX3RmZF9mcmFtZSkuICBUaGVzZSAxNiBwb2ludGVyIHJlZ2lzdGVycyBhcmUgb2Zmc2V0IGJ5IDB4MDQKICAqIGJ5dGVzIGZyb20gb25lIGFub3RoZXIuICBFYWNoIFRGRCBjaXJjdWxhciBidWZmZXIgaW4gRFJBTSBtdXN0IGJlIDI1Ni1ieXRlCkBAIC0xMTYsMTYgKzExNiwxNiBAQAogLyoqCiAgKiBSeCBTUkFNIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlcnMgKFJTQ1NSKQogICoKLSAqIFRoZXNlIHJlZ2lzdGVycyBwcm92aWRlIGhhbmRzaGFrZSBiZXR3ZWVuIGRyaXZlciBhbmQgNDk2NSBmb3IgdGhlIFJ4IHF1ZXVlCisgKiBUaGVzZSByZWdpc3RlcnMgcHJvdmlkZSBoYW5kc2hha2UgYmV0d2VlbiBkcml2ZXIgYW5kIGRldmljZSBmb3IgdGhlIFJ4IHF1ZXVlCiAgKiAodGhpcyBxdWV1ZSBoYW5kbGVzICphbGwqIGNvbW1hbmQgcmVzcG9uc2VzLCBub3RpZmljYXRpb25zLCBSeCBkYXRhLCBldGMuCi0gKiBzZW50IGZyb20gNDk2NSB1Q29kZSB0byBob3N0IGRyaXZlcikuICBVbmxpa2UgVHgsIHRoZXJlIGlzIG9ubHkgb25lIFJ4CisgKiBzZW50IGZyb20gdUNvZGUgdG8gaG9zdCBkcml2ZXIpLiAgVW5saWtlIFR4LCB0aGVyZSBpcyBvbmx5IG9uZSBSeAogICogcXVldWUsIGFuZCBvbmx5IG9uZSBSeCBETUEvRklGTyBjaGFubmVsLiAgQWxzbyB1bmxpa2UgVHgsIHdoaWNoIGNhbgogICogY29uY2F0ZW5hdGUgdXAgdG8gMjAgRFJBTSBidWZmZXJzIHRvIGZvcm0gYSBUeCBmcmFtZSwgZWFjaCBSZWNlaXZlIEJ1ZmZlcgogICogRGVzY3JpcHRvciAoUkJEKSBwb2ludHMgdG8gb25seSBvbmUgUnggQnVmZmVyIChSQik7IHRoZXJlIGlzIGEgMToxCiAgKiBtYXBwaW5nIGJldHdlZW4gUkJEcyBhbmQgUkJzLgogICoKICAqIERyaXZlciBtdXN0IGFsbG9jYXRlIGhvc3QgRFJBTSBtZW1vcnkgZm9yIHRoZSBmb2xsb3dpbmcsIGFuZCBzZXQgdGhlCi0gKiBwaHlzaWNhbCBhZGRyZXNzIG9mIGVhY2ggaW50byA0OTY1IHJlZ2lzdGVyczoKKyAqIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZWFjaCBpbnRvIGRldmljZSByZWdpc3RlcnM6CiAgKgogICogMSkgIFJlY2VpdmUgQnVmZmVyIERlc2NyaXB0b3IgKFJCRCkgY2lyY3VsYXIgYnVmZmVyIChDQiksIHR5cGljYWxseSB3aXRoIDI1NgogICogICAgIGVudHJpZXMgKGFsdGhvdWdoIGFueSBwb3dlciBvZiAyLCB1cCB0byA0MDk2LCBpcyBzZWxlY3RhYmxlIGJ5IGRyaXZlcikuCkBAIC0xNDAsMjAgKzE0MCwyMCBAQAogICogICAgIERyaXZlciBzZXRzIHBoeXNpY2FsIGFkZHJlc3MgWzM1OjhdIG9mIGJhc2Ugb2YgUkJEIGNpcmN1bGFyIGJ1ZmZlcgogICogICAgIGludG8gRkhfUlNDU1JfQ0hOTDBfUkJEQ0JfQkFTRV9SRUcgWzI3OjBdLgogICoKLSAqIDIpICBSeCBzdGF0dXMgYnVmZmVyLCA4IGJ5dGVzLCBpbiB3aGljaCA0OTY1IGluZGljYXRlcyB3aGljaCBSeCBCdWZmZXJzCisgKiAyKSAgUnggc3RhdHVzIGJ1ZmZlciwgOCBieXRlcywgaW4gd2hpY2ggdUNvZGUgaW5kaWNhdGVzIHdoaWNoIFJ4IEJ1ZmZlcnMKICAqICAgICAoUkJzKSBoYXZlIGJlZW4gZmlsbGVkLCB2aWEgYSAid3JpdGUgcG9pbnRlciIsIGFjdHVhbGx5IHRoZSBpbmRleCBvZgogICogICAgIHRoZSBSQidzIGNvcnJlc3BvbmRpbmcgUkJEIHdpdGhpbiB0aGUgY2lyY3VsYXIgYnVmZmVyLiAgRHJpdmVyIHNldHMKICAqICAgICBwaHlzaWNhbCBhZGRyZXNzIFszNTo0XSBpbnRvIEZIX1JTQ1NSX0NITkwwX1NUVFNfV1BUUl9SRUcgWzMxOjBdLgogICoKICAqICAgICBCaXQgZmllbGRzIGluIGxvd2VyIGR3b3JkIG9mIFJ4IHN0YXR1cyBidWZmZXIgKHVwcGVyIGR3b3JkIG5vdCB1c2VkCi0gKiAgICAgYnkgZHJpdmVyOyBzZWUgc3RydWN0IGl3bDQ5NjVfc2hhcmVkLCB2YWwwKToKKyAqICAgICBieSBkcml2ZXI6CiAgKiAgICAgMzEtMTI6ICBOb3QgdXNlZCBieSBkcml2ZXIKICAqICAgICAxMS0gMDogIEluZGV4IG9mIGxhc3QgZmlsbGVkIFJ4IGJ1ZmZlciBkZXNjcmlwdG9yCi0gKiAgICAgICAgICAgICAoNDk2NSB3cml0ZXMsIGRyaXZlciByZWFkcyB0aGlzIHZhbHVlKQorICogICAgICAgICAgICAgKGRldmljZSB3cml0ZXMsIGRyaXZlciByZWFkcyB0aGlzIHZhbHVlKQogICoKLSAqIEFzIHRoZSBkcml2ZXIgcHJlcGFyZXMgUmVjZWl2ZSBCdWZmZXJzIChSQnMpIGZvciA0OTY1IHRvIGZpbGwsIGRyaXZlciBtdXN0CisgKiBBcyB0aGUgZHJpdmVyIHByZXBhcmVzIFJlY2VpdmUgQnVmZmVycyAoUkJzKSBmb3IgZGV2aWNlIHRvIGZpbGwsIGRyaXZlciBtdXN0CiAgKiBlbnRlciBwb2ludGVycyB0byB0aGVzZSBSQnMgaW50byBjb250aWd1b3VzIFJCRCBjaXJjdWxhciBidWZmZXIgZW50cmllcywKLSAqIGFuZCB1cGRhdGUgdGhlIDQ5NjUncyAid3JpdGUiIGluZGV4IHJlZ2lzdGVyLAorICogYW5kIHVwZGF0ZSB0aGUgZGV2aWNlJ3MgIndyaXRlIiBpbmRleCByZWdpc3RlciwKICAqIEZIX1JTQ1NSX0NITkwwX1JCRENCX1dQVFJfUkVHLgogICoKICAqIFRoaXMgIndyaXRlIiBpbmRleCBjb3JyZXNwb25kcyB0byB0aGUgKm5leHQqIFJCRCB0aGF0IHRoZSBkcml2ZXIgd2lsbCBtYWtlCkBAIC0xNjIsMTIgKzE2MiwxMiBAQAogICogUkJzKSwgc2hvdWxkIGJlIDggYWZ0ZXIgcHJlcGFyaW5nIHRoZSBmaXJzdCA4IFJCcyAoZm9yIGV4YW1wbGUpLCBhbmQgbXVzdAogICogd3JhcCBiYWNrIHRvIDAgYXQgdGhlIGVuZCBvZiB0aGUgY2lyY3VsYXIgYnVmZmVyIChidXQgZG9uJ3Qgd3JhcCBiZWZvcmUKICAqICJyZWFkIiBpbmRleCBoYXMgYWR2YW5jZWQgcGFzdCAxISAgU2VlIGJlbG93KS4KLSAqIE5PVEU6ICA0OTY1IEVYUEVDVFMgVEhFIFdSSVRFIElOREVYIFRPIEJFIElOQ1JFTUVOVEVEIElOIE1VTFRJUExFUyBPRiA4LgorICogTk9URTogIERFVklDRSBFWFBFQ1RTIFRIRSBXUklURSBJTkRFWCBUTyBCRSBJTkNSRU1FTlRFRCBJTiBNVUxUSVBMRVMgT0YgOC4KICAqCi0gKiBBcyB0aGUgNDk2NSBmaWxscyBSQnMgKHJlZmVyZW5jZWQgZnJvbSBjb250aWd1b3VzIFJCRHMgd2l0aGluIHRoZSBjaXJjdWxhcgorICogQXMgdGhlIGRldmljZSBmaWxscyBSQnMgKHJlZmVyZW5jZWQgZnJvbSBjb250aWd1b3VzIFJCRHMgd2l0aGluIHRoZSBjaXJjdWxhcgogICogYnVmZmVyKSwgaXQgdXBkYXRlcyB0aGUgUnggc3RhdHVzIGJ1ZmZlciBpbiBob3N0IERSQU0sIDIpIGRlc2NyaWJlZCBhYm92ZSwKICAqIHRvIHRlbGwgdGhlIGRyaXZlciB0aGUgaW5kZXggb2YgdGhlIGxhdGVzdCBmaWxsZWQgUkJELiAgVGhlIGRyaXZlciBtdXN0Ci0gKiByZWFkIHRoaXMgInJlYWQiIGluZGV4IGZyb20gRFJBTSBhZnRlciByZWNlaXZpbmcgYW4gUnggaW50ZXJydXB0IGZyb20gNDk2NS4KKyAqIHJlYWQgdGhpcyAicmVhZCIgaW5kZXggZnJvbSBEUkFNIGFmdGVyIHJlY2VpdmluZyBhbiBSeCBpbnRlcnJ1cHQgZnJvbSBkZXZpY2UKICAqCiAgKiBUaGUgZHJpdmVyIG11c3QgYWxzbyBpbnRlcm5hbGx5IGtlZXAgdHJhY2sgb2YgYSB0aGlyZCBpbmRleCwgd2hpY2ggaXMgdGhlCiAgKiBuZXh0IFJCRCB0byBwcm9jZXNzLiAgV2hlbiByZWNlaXZpbmcgYW4gUnggaW50ZXJydXB0LCBkcml2ZXIgc2hvdWxkIHByb2Nlc3MKQEAgLTE3Niw3ICsxNzYsNyBAQAogICogZHJpdmVyIG1heSBwcm9jZXNzIHRoZSBSQiBwb2ludGVkIHRvIGJ5IFJCRCAwLiAgRGVwZW5kaW5nIG9uIHZvbHVtZSBvZgogICogdHJhZmZpYywgdGhlcmUgbWF5IGJlIG1hbnkgUkJzIHRvIHByb2Nlc3MuCiAgKgotICogSWYgcmVhZCBpbmRleCA9PSB3cml0ZSBpbmRleCwgNDk2NSB0aGlua3MgdGhlcmUgaXMgbm8gcm9vbSB0byBwdXQgbmV3IGRhdGEuCisgKiBJZiByZWFkIGluZGV4ID09IHdyaXRlIGluZGV4LCBkZXZpY2UgdGhpbmtzIHRoZXJlIGlzIG5vIHJvb20gdG8gcHV0IG5ldyBkYXRhLgogICogRHVlIHRvIHRoaXMsIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmaWxsZWQgUkJzIGlzIDI1NSwgaW5zdGVhZCBvZiAyNTYuICBUbwogICogYmUgc2FmZSwgbWFrZSBzdXJlIHRoYXQgdGhlcmUgaXMgYSBnYXAgb2YgYXQgbGVhc3QgMiBSQkRzIGJldHdlZW4gIndyaXRlIgogICogYW5kICJyZWFkIiBpbmRleGVzOyB0aGF0IGlzLCBtYWtlIHN1cmUgdGhhdCB0aGVyZSBhcmUgbm8gbW9yZSB0aGFuIDI1NApAQCAtMzAzLDcgKzMwMyw3IEBACiAvKioKICAqIFRyYW5zbWl0IERNQSBDaGFubmVsIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVycyAoVENTUikKICAqCi0gKiA0OTY1IGhhcyBvbmUgY29uZmlndXJhdGlvbiByZWdpc3RlciBmb3IgZWFjaCBvZiA4IFR4IERNQS9GSUZPIGNoYW5uZWxzCisgKiBEZXZpY2UgaGFzIG9uZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGZvciBlYWNoIG9mIDggVHggRE1BL0ZJRk8gY2hhbm5lbHMKICAqIHN1cHBvcnRlZCBpbiBoYXJkd2FyZSAoZG9uJ3QgY29uZnVzZSB0aGVzZSB3aXRoIHRoZSAxNiBUeCBxdWV1ZXMgaW4gRFJBTSwKICAqIHdoaWNoIGZlZWQgdGhlIERNQS9GSUZPIGNoYW5uZWxzKTsgY29uZmlnIHJlZ3MgYXJlIHNlcGFyYXRlZCBieSAweDIwIGJ5dGVzLgogICoKQEAgLTMyNiw3ICszMjYsNiBAQAogI2RlZmluZSBGSF9UQ1NSX1VQUEVSX0JPVU5EICAoRkhfTUVNX0xPV0VSX0JPVU5EICsgMHhFNjApCiAKIC8qIEZpbmQgQ29udHJvbC9TdGF0dXMgcmVnIGZvciBnaXZlbiBUeCBETUEvRklGTyBjaGFubmVsICovCi0jZGVmaW5lIEZINDlfVENTUl9DSE5MX05VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNykKICNkZWZpbmUgRkg1MF9UQ1NSX0NITkxfTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICg4KQogCiAvKiBUQ1NSOiB0eF9jb25maWcgcmVnaXN0ZXIgdmFsdWVzICovCkBAIC00MjQsNyArNDIzLDYgQEAKICNkZWZpbmUgUlhfTE9XX1dBVEVSTUFSSyA4CiAKIC8qIFNpemUgb2Ygb25lIFJ4IGJ1ZmZlciBpbiBob3N0IERSQU0gKi8KLSNkZWZpbmUgSVdMX1JYX0JVRl9TSVpFXzNLICgzICogMTAwMCkgLyogMzk0NSBvbmx5ICovCiAjZGVmaW5lIElXTF9SWF9CVUZfU0laRV80SyAoNCAqIDEwMjQpCiAjZGVmaW5lIElXTF9SWF9CVUZfU0laRV84SyAoOCAqIDEwMjQpCiAKQEAgLTQ0Myw3ICs0NDEsNyBAQAogCV9fbGUxNiBjbG9zZWRfZnJfbnVtOwogCV9fbGUxNiBmaW5pc2hlZF9yYl9udW07CiAJX19sZTE2IGZpbmlzaGVkX2ZyX25hbTsKLQlfX2xlMzIgX191bnVzZWQ7IC8qIDM5NDUgb25seSAqLworCV9fbGUzMiBfX3VudXNlZDsKIH0gX19wYWNrZWQ7CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jCmluZGV4IDAyNDk5ZjYuLjhmMGJlYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oY21kLmMKQEAgLTIsNyArMiw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTUxLDkgKzUxLDcgQEAKIAkJSVdMX0NNRChSRVBMWV9SRU1PVkVfQUxMX1NUQSk7CiAJCUlXTF9DTUQoUkVQTFlfVFhGSUZPX0ZMVVNIKTsKIAkJSVdMX0NNRChSRVBMWV9XRVBLRVkpOwotCQlJV0xfQ01EKFJFUExZXzM5NDVfUlgpOwogCQlJV0xfQ01EKFJFUExZX1RYKTsKLQkJSVdMX0NNRChSRVBMWV9SQVRFX1NDQUxFKTsKIAkJSVdMX0NNRChSRVBMWV9MRURTX0NNRCk7CiAJCUlXTF9DTUQoUkVQTFlfVFhfTElOS19RVUFMSVRZX0NNRCk7CiAJCUlXTF9DTUQoQ09FWF9QUklPUklUWV9UQUJMRV9DTUQpOwpAQCAtMTQ1LDEwICsxNDMsMTIgQEAKIHsKIAlpbnQgcmV0OwogCi0JQlVHX09OKCEoY21kLT5mbGFncyAmIENNRF9BU1lOQykpOworCWlmIChXQVJOX09OKCEoY21kLT5mbGFncyAmIENNRF9BU1lOQykpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIEFuIGFzeW5jaHJvbm91cyBjb21tYW5kIGNhbiBub3QgZXhwZWN0IGFuIFNLQiB0byBiZSBzZXQuICovCi0JQlVHX09OKGNtZC0+ZmxhZ3MgJiBDTURfV0FOVF9TS0IpOworCWlmIChXQVJOX09OKGNtZC0+ZmxhZ3MgJiBDTURfV0FOVF9TS0IpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIEFzc2lnbiBhIGdlbmVyaWMgY2FsbGJhY2sgaWYgb25lIGlzIG5vdCBwcm92aWRlZCAqLwogCWlmICghY21kLT5jYWxsYmFjaykKQEAgLTE3MSwxNCArMTcxLDE1IEBACiAJaW50IGNtZF9pZHg7CiAJaW50IHJldDsKIAotCUJVR19PTihjbWQtPmZsYWdzICYgQ01EX0FTWU5DKTsKKwlpZiAoV0FSTl9PTihjbWQtPmZsYWdzICYgQ01EX0FTWU5DKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkgLyogQSBzeW5jaHJvbm91cyBjb21tYW5kIGNhbiBub3QgaGF2ZSBhIGNhbGxiYWNrIHNldC4gKi8KLQlCVUdfT04oY21kLT5jYWxsYmFjayk7CisJaWYgKFdBUk5fT04oY21kLT5jYWxsYmFjaykpCisJCXJldHVybiAtRUlOVkFMOwogCiAJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkF0dGVtcHRpbmcgdG8gc2VuZCBzeW5jIGNvbW1hbmQgJXNcbiIsCiAJCQlnZXRfY21kX3N0cmluZyhjbWQtPmlkKSk7Ci0JbXV0ZXhfbG9jaygmcHJpdi0+c3luY19jbWRfbXV0ZXgpOwogCiAJc2V0X2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOwogCUlXTF9ERUJVR19JTkZPKHByaXYsICJTZXR0aW5nIEhDTURfQUNUSVZFIGZvciBjb21tYW5kICVzXG4iLApAQCAtMTg5LDcgKzE5MCw3IEBACiAJCXJldCA9IGNtZF9pZHg7CiAJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNlbmRpbmcgJXM6IGVucXVldWVfaGNtZCBmYWlsZWQ6ICVkXG4iLAogCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSwgcmV0KTsKLQkJZ290byBvdXQ7CisJCXJldHVybiByZXQ7CiAJfQogCiAJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlLApAQCAtMjI5LDggKzIzMCw3IEBACiAJCWdvdG8gY2FuY2VsOwogCX0KIAotCXJldCA9IDA7Ci0JZ290byBvdXQ7CisJcmV0dXJuIDA7CiAKIGNhbmNlbDoKIAlpZiAoY21kLT5mbGFncyAmIENNRF9XQU5UX1NLQikgewpAQCAtMjQ4LDggKzI0OCw3IEBACiAJCWl3bF9mcmVlX3BhZ2VzKHByaXYsIGNtZC0+cmVwbHlfcGFnZSk7CiAJCWNtZC0+cmVwbHlfcGFnZSA9IDA7CiAJfQotb3V0OgotCW11dGV4X3VubG9jaygmcHJpdi0+c3luY19jbWRfbXV0ZXgpOworCiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGVscGVycy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGVscGVycy5oCmluZGV4IDg4MjFmMDguLjQxMjA3YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhlbHBlcnMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oZWxwZXJzLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTY0LDMwICs2NCw2IEBACiAJcmV0dXJuIC0taW5kZXggJiAobl9iZCAtIDEpOwogfQogCi0vKiBUT0RPOiBNb3ZlIGZ3X2Rlc2MgZnVuY3Rpb25zIHRvIGl3bC1wY2kua28gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfZnJlZV9md19kZXNjKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LAotCQkJCSAgICBzdHJ1Y3QgZndfZGVzYyAqZGVzYykKLXsKLQlpZiAoZGVzYy0+dl9hZGRyKQotCQlkbWFfZnJlZV9jb2hlcmVudCgmcGNpX2Rldi0+ZGV2LCBkZXNjLT5sZW4sCi0JCQkJICBkZXNjLT52X2FkZHIsIGRlc2MtPnBfYWRkcik7Ci0JZGVzYy0+dl9hZGRyID0gTlVMTDsKLQlkZXNjLT5sZW4gPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpd2xfYWxsb2NfZndfZGVzYyhzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwKLQkJCQkgICAgc3RydWN0IGZ3X2Rlc2MgKmRlc2MpCi17Ci0JaWYgKCFkZXNjLT5sZW4pIHsKLQkJZGVzYy0+dl9hZGRyID0gTlVMTDsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZGVzYy0+dl9hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwY2lfZGV2LT5kZXYsIGRlc2MtPmxlbiwKLQkJCQkJICAmZGVzYy0+cF9hZGRyLCBHRlBfS0VSTkVMKTsKLQlyZXR1cm4gKGRlc2MtPnZfYWRkciAhPSBOVUxMKSA/IDAgOiAtRU5PTUVNOwotfQotCiAvKgogICogd2UgaGF2ZSA4IGJpdHMgdXNlZCBsaWtlIHRoaXM6CiAgKgpAQCAtMTMxLDYgKzEwNywxOSBAQAogCQkJaWVlZTgwMjExX3N0b3BfcXVldWUocHJpdi0+aHcsIGFjKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGl3bF93YWtlX2FueV9xdWV1ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICAgc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCkKK3sKKwl1OCBhYzsKKworCWZvciAoYWMgPSAwOyBhYyA8IEFDX05VTTsgYWMrKykgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUXVldWUgU3RhdHVzOiBRWyVkXSAlc1xuIiwKKwkJCWFjLCAoYXRvbWljX3JlYWQoJnByaXYtPnF1ZXVlX3N0b3BfY291bnRbYWNdKSA+IDApCisJCQkgICAgICA/ICJzdG9wcGVkIiA6ICJhd2FrZSIpOworCQlpd2xfd2FrZV9xdWV1ZShwcml2LCAmcHJpdi0+dHhxW2N0eC0+YWNfdG9fcXVldWVbYWNdXSk7CisJfQorfQorCiAjZGVmaW5lIGllZWU4MDIxMV9zdG9wX3F1ZXVlIERPX05PVF9VU0VfaWVlZTgwMjExX3N0b3BfcXVldWUKICNkZWZpbmUgaWVlZTgwMjExX3dha2VfcXVldWUgRE9fTk9UX1VTRV9pZWVlODAyMTFfd2FrZV9xdWV1ZQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1pby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTRhOTA2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaW8uYwpAQCAtMCwwICsxLDI5NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgorICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIml3bC1pby5oIgorCisjZGVmaW5lIElXTF9QT0xMX0lOVEVSVkFMIDEwCS8qIG1pY3Jvc2Vjb25kcyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgX19pd2xfc2V0X2JpdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQoreworCWl3bF93cml0ZTMyKHByaXYsIHJlZywgaXdsX3JlYWQzMihwcml2LCByZWcpIHwgbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2l3bF9jbGVhcl9iaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKK3sKKwlpd2xfd3JpdGUzMihwcml2LCByZWcsIGl3bF9yZWFkMzIocHJpdiwgcmVnKSAmIH5tYXNrKTsKK30KKwordm9pZCBpd2xfc2V0X2JpdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cmVnX2xvY2ssIGZsYWdzKTsKKwlfX2l3bF9zZXRfYml0KHByaXYsIHJlZywgbWFzayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cmVnX2xvY2ssIGZsYWdzKTsKK30KKwordm9pZCBpd2xfY2xlYXJfYml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yZWdfbG9jaywgZmxhZ3MpOworCV9faXdsX2NsZWFyX2JpdChwcml2LCByZWcsIG1hc2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJlZ19sb2NrLCBmbGFncyk7Cit9CisKK2ludCBpd2xfcG9sbF9iaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgYWRkciwKKwkJIHUzMiBiaXRzLCB1MzIgbWFzaywgaW50IHRpbWVvdXQpCit7CisJaW50IHQgPSAwOworCisJZG8geworCQlpZiAoKGl3bF9yZWFkMzIocHJpdiwgYWRkcikgJiBtYXNrKSA9PSAoYml0cyAmIG1hc2spKQorCQkJcmV0dXJuIHQ7CisJCXVkZWxheShJV0xfUE9MTF9JTlRFUlZBTCk7CisJCXQgKz0gSVdMX1BPTExfSU5URVJWQUw7CisJfSB3aGlsZSAodCA8IHRpbWVvdXQpOworCisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisKK2ludCBpd2xfZ3JhYl9uaWNfYWNjZXNzX3NpbGVudChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnByaXYtPnJlZ19sb2NrKTsKKworCS8qIHRoaXMgYml0IHdha2VzIHVwIHRoZSBOSUMgKi8KKwlfX2l3bF9zZXRfYml0KHByaXYsIENTUl9HUF9DTlRSTCwgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKKworCS8qCisJICogVGhlc2UgYml0cyBzYXkgdGhlIGRldmljZSBpcyBydW5uaW5nLCBhbmQgc2hvdWxkIGtlZXAgcnVubmluZyBmb3IKKwkgKiBhdCBsZWFzdCBhIHNob3J0IHdoaWxlIChhdCBsZWFzdCBhcyBsb25nIGFzIE1BQ19BQ0NFU1NfUkVRIHN0YXlzIDEpLAorCSAqIGJ1dCB0aGV5IGRvIG5vdCBpbmRpY2F0ZSB0aGF0IGVtYmVkZGVkIFNSQU0gaXMgcmVzdG9yZWQgeWV0OworCSAqIDM5NDUgYW5kIDQ5NjUgaGF2ZSB2b2xhdGlsZSBTUkFNLCBhbmQgbXVzdCBzYXZlL3Jlc3RvcmUgY29udGVudHMKKwkgKiB0by9mcm9tIGhvc3QgRFJBTSB3aGVuIHNsZWVwaW5nL3dha2luZyBmb3IgcG93ZXItc2F2aW5nLgorCSAqIEVhY2ggZGlyZWN0aW9uIHRha2VzIGFwcHJveGltYXRlbHkgMS80IG1pbGxpc2Vjb25kOyB3aXRoIHRoaXMKKwkgKiBvdmVyaGVhZCwgaXQncyBhIGdvb2QgaWRlYSB0byBncmFiIGFuZCBob2xkIE1BQ19BQ0NFU1NfUkVRVUVTVCBpZiBhCisJICogc2VyaWVzIG9mIHJlZ2lzdGVyIGFjY2Vzc2VzIGFyZSBleHBlY3RlZCAoZS5nLiByZWFkaW5nIEV2ZW50IExvZyksCisJICogdG8ga2VlcCBkZXZpY2UgZnJvbSBzbGVlcGluZy4KKwkgKgorCSAqIENTUl9VQ09ERV9EUlZfR1AxIHJlZ2lzdGVyIGJpdCBNQUNfU0xFRVAgPT0gMCBpbmRpY2F0ZXMgdGhhdAorCSAqIFNSQU0gaXMgb2theS9yZXN0b3JlZC4gIFdlIGRvbid0IGNoZWNrIHRoYXQgaGVyZSBiZWNhdXNlIHRoaXMgY2FsbAorCSAqIGlzIGp1c3QgZm9yIGhhcmR3YXJlIHJlZ2lzdGVyIGFjY2VzczsgYnV0IEdQMSBNQUNfU0xFRVAgY2hlY2sgaXMgYQorCSAqIGdvb2QgaWRlYSBiZWZvcmUgYWNjZXNzaW5nIDM5NDUvNDk2NSBTUkFNIChlLmcuIHJlYWRpbmcgRXZlbnQgTG9nKS4KKwkgKgorCSAqIDUwMDAgc2VyaWVzIGFuZCBsYXRlciAoaW5jbHVkaW5nIDEwMDAgc2VyaWVzKSBoYXZlIG5vbi12b2xhdGlsZSBTUkFNLAorCSAqIGFuZCBkbyBub3Qgc2F2ZS9yZXN0b3JlIFNSQU0gd2hlbiBwb3dlciBjeWNsaW5nLgorCSAqLworCXJldCA9IGl3bF9wb2xsX2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCisJCQkgICBDU1JfR1BfQ05UUkxfUkVHX1ZBTF9NQUNfQUNDRVNTX0VOLAorCQkJICAgKENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQ0xPQ0tfUkVBRFkgfAorCQkJICAgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19HT0lOR19UT19TTEVFUCksIDE1MDAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlpd2xfd3JpdGUzMihwcml2LCBDU1JfUkVTRVQsIENTUl9SRVNFVF9SRUdfRkxBR19GT1JDRV9OTUkpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGl3bF9ncmFiX25pY19hY2Nlc3Moc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWludCByZXQgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzX3NpbGVudChwcml2KTsKKwlpZiAocmV0KSB7CisJCXUzMiB2YWwgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9HUF9DTlRSTCk7CisJCUlXTF9FUlIocHJpdiwKKwkJCSJNQUMgaXMgaW4gZGVlcCBzbGVlcCEuIENTUl9HUF9DTlRSTCA9IDB4JTA4WFxuIiwgdmFsKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGl3bF9yZWxlYXNlX25pY19hY2Nlc3Moc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnByaXYtPnJlZ19sb2NrKTsKKwlfX2l3bF9jbGVhcl9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAorCQkJQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKK30KKwordTMyIGl3bF9yZWFkX2RpcmVjdDMyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZykKK3sKKwl1MzIgdmFsdWU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yZWdfbG9jaywgZmxhZ3MpOworCWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJdmFsdWUgPSBpd2xfcmVhZDMyKHByaXYsIHJlZyk7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yZWdfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHZhbHVlOworfQorCit2b2lkIGl3bF93cml0ZV9kaXJlY3QzMihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJlZ19sb2NrLCBmbGFncyk7CisJaWYgKCFpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpKSB7CisJCWl3bF93cml0ZTMyKHByaXYsIHJlZywgdmFsdWUpOworCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yZWdfbG9jaywgZmxhZ3MpOworfQorCitpbnQgaXdsX3BvbGxfZGlyZWN0X2JpdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MzIgbWFzaywKKwkJCWludCB0aW1lb3V0KQoreworCWludCB0ID0gMDsKKworCWRvIHsKKwkJaWYgKChpd2xfcmVhZF9kaXJlY3QzMihwcml2LCBhZGRyKSAmIG1hc2spID09IG1hc2spCisJCQlyZXR1cm4gdDsKKwkJdWRlbGF5KElXTF9QT0xMX0lOVEVSVkFMKTsKKwkJdCArPSBJV0xfUE9MTF9JTlRFUlZBTDsKKwl9IHdoaWxlICh0IDwgdGltZW91dCk7CisKKwlyZXR1cm4gLUVUSU1FRE9VVDsKK30KKworc3RhdGljIGlubGluZSB1MzIgX19pd2xfcmVhZF9wcnBoKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZykKK3sKKwlpd2xfd3JpdGUzMihwcml2LCBIQlVTX1RBUkdfUFJQSF9SQUREUiwgcmVnIHwgKDMgPDwgMjQpKTsKKwlybWIoKTsKKwlyZXR1cm4gaXdsX3JlYWQzMihwcml2LCBIQlVTX1RBUkdfUFJQSF9SREFUKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9faXdsX3dyaXRlX3BycGgoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgYWRkciwgdTMyIHZhbCkKK3sKKwlpd2xfd3JpdGUzMihwcml2LCBIQlVTX1RBUkdfUFJQSF9XQUREUiwKKwkJICAgICgoYWRkciAmIDB4MDAwMEZGRkYpIHwgKDMgPDwgMjQpKSk7CisJd21iKCk7CisJaXdsX3dyaXRlMzIocHJpdiwgSEJVU19UQVJHX1BSUEhfV0RBVCwgdmFsKTsKK30KKwordTMyIGl3bF9yZWFkX3BycGgoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHZhbDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yZWdfbG9jaywgZmxhZ3MpOworCWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJdmFsID0gX19pd2xfcmVhZF9wcnBoKHByaXYsIHJlZyk7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yZWdfbG9jaywgZmxhZ3MpOworCXJldHVybiB2YWw7Cit9CisKK3ZvaWQgaXdsX3dyaXRlX3BycGgoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgYWRkciwgdTMyIHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJlZ19sb2NrLCBmbGFncyk7CisJaWYgKCFpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpKSB7CisJCV9faXdsX3dyaXRlX3BycGgocHJpdiwgYWRkciwgdmFsKTsKKwkJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cmVnX2xvY2ssIGZsYWdzKTsKK30KKwordm9pZCBpd2xfc2V0X2JpdHNfcHJwaChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cmVnX2xvY2ssIGZsYWdzKTsKKwlpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCV9faXdsX3dyaXRlX3BycGgocHJpdiwgcmVnLCBfX2l3bF9yZWFkX3BycGgocHJpdiwgcmVnKSB8IG1hc2spOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cmVnX2xvY2ssIGZsYWdzKTsKK30KKwordm9pZCBpd2xfc2V0X2JpdHNfbWFza19wcnBoKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZywKKwkJCSAgICB1MzIgYml0cywgdTMyIG1hc2spCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yZWdfbG9jaywgZmxhZ3MpOworCWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJX19pd2xfd3JpdGVfcHJwaChwcml2LCByZWcsCisJCQkgKF9faXdsX3JlYWRfcHJwaChwcml2LCByZWcpICYgbWFzaykgfCBiaXRzKTsKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJlZ19sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgaXdsX2NsZWFyX2JpdHNfcHJwaChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHZhbDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yZWdfbG9jaywgZmxhZ3MpOworCWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJdmFsID0gX19pd2xfcmVhZF9wcnBoKHByaXYsIHJlZyk7CisJX19pd2xfd3JpdGVfcHJwaChwcml2LCByZWcsICh2YWwgJiB+bWFzaykpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cmVnX2xvY2ssIGZsYWdzKTsKK30KKwordm9pZCBfaXdsX3JlYWRfdGFyZ19tZW1fd29yZHMoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgYWRkciwKKwkJCSAgICAgIHZvaWQgKmJ1ZiwgaW50IHdvcmRzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IG9mZnM7CisJdTMyICp2YWxzID0gYnVmOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJlZ19sb2NrLCBmbGFncyk7CisJaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKworCWl3bF93cml0ZTMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkFERFIsIGFkZHIpOworCXJtYigpOworCisJZm9yIChvZmZzID0gMDsgb2ZmcyA8IHdvcmRzOyBvZmZzKyspCisJCXZhbHNbb2Zmc10gPSBpd2xfcmVhZDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7CisKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJlZ19sb2NrLCBmbGFncyk7Cit9CisKK3UzMiBpd2xfcmVhZF90YXJnX21lbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBhZGRyKQoreworCXUzMiB2YWx1ZTsKKworCV9pd2xfcmVhZF90YXJnX21lbV93b3Jkcyhwcml2LCBhZGRyLCAmdmFsdWUsIDEpOworCisJcmV0dXJuIHZhbHVlOworfQorCit2b2lkIGl3bF93cml0ZV90YXJnX21lbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MzIgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cmVnX2xvY2ssIGZsYWdzKTsKKwlpZiAoIWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdikpIHsKKwkJaXdsX3dyaXRlMzIocHJpdiwgSEJVU19UQVJHX01FTV9XQUREUiwgYWRkcik7CisJCXdtYigpOworCQlpd2xfd3JpdGUzMihwcml2LCBIQlVTX1RBUkdfTUVNX1dEQVQsIHZhbCk7CisJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJlZ19sb2NrLCBmbGFncyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1pby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaW8uaAppbmRleCAwMjAzYTNiLi44NjllZGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1pby5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWlvLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QuCiAgKgpAQCAtMzUsNDk0ICszNSw1OCBAQAogI2luY2x1ZGUgIml3bC1kZWJ1Zy5oIgogI2luY2x1ZGUgIml3bC1kZXZ0cmFjZS5oIgogCi0vKgotICogSU8sIHJlZ2lzdGVyLCBhbmQgTklDIG1lbW9yeSBhY2Nlc3MgZnVuY3Rpb25zCi0gKgotICogTk9URSBvbiBuYW1pbmcgY29udmVudGlvbiBhbmQgbWFjcm8gdXNhZ2UgZm9yIHRoZXNlCi0gKgotICogQSBzaW5nbGUgXyBwcmVmaXggYmVmb3JlIGEgYW4gYWNjZXNzIGZ1bmN0aW9uIG1lYW5zIHRoYXQgbm8gc3RhdGUKLSAqIGNoZWNrIG9yIGRlYnVnIGluZm9ybWF0aW9uIGlzIHByaW50ZWQgd2hlbiB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZC4KLSAqCi0gKiBBIGRvdWJsZSBfXyBwcmVmaXggYmVmb3JlIGFuIGFjY2VzcyBmdW5jdGlvbiBtZWFucyB0aGF0IHN0YXRlIGlzIGNoZWNrZWQKLSAqIGFuZCB0aGUgY3VycmVudCBsaW5lIG51bWJlciBhbmQgY2FsbGVyIGZ1bmN0aW9uIG5hbWUgYXJlIHByaW50ZWQgaW4gYWRkaXRpb24KLSAqIHRvIGFueSBvdGhlciBkZWJ1ZyBvdXRwdXQuCi0gKgotICogVGhlIG5vbi1wcmVmaXhlZCBuYW1lIGlzIHRoZSAjZGVmaW5lIHRoYXQgbWFwcyB0aGUgY2FsbGVyIGludG8gYQotICogI2RlZmluZSB0aGF0IHByb3ZpZGVzIHRoZSBjYWxsZXIncyBuYW1lIGFuZCBfX0xJTkVfXyB0byB0aGUgZG91YmxlCi0gKiBwcmVmaXggdmVyc2lvbi4KLSAqCi0gKiBJZiB5b3Ugd2lzaCB0byBjYWxsIHRoZSBmdW5jdGlvbiB3aXRob3V0IGFueSBkZWJ1ZyBvciBzdGF0ZSBjaGVja2luZywKLSAqIHlvdSBzaG91bGQgdXNlIHRoZSBzaW5nbGUgXyBwcmVmaXggdmVyc2lvbiAoYXMgaXMgdXNlZCBieSBkZXBlbmRlbnQgSU8KLSAqIHJvdXRpbmVzLCBmb3IgZXhhbXBsZSBfaXdsX3JlYWRfZGlyZWN0MzIgY2FsbHMgdGhlIG5vbi1jaGVjayB2ZXJzaW9uIG9mCi0gKiBfaXdsX3JlYWQzMi4pCi0gKgotICogVGhlc2UgZGVjbGFyYXRpb25zIGFyZSAqZXh0cmVtZWx5KiB1c2VmdWwgaW4gcXVpY2tseSBpc29sYXRpbmcgY29kZSBkZWx0YXMKLSAqIHdoaWNoIHJlc3VsdCBpbiBtaXNjb25maWd1cmF0aW9uIG9mIHRoZSBoYXJkd2FyZSBJL08uICBJbiBjb21iaW5hdGlvbiB3aXRoCi0gKiBnaXQtYmlzZWN0IGFuZCB0aGUgSU8gZGVidWcgbGV2ZWwgeW91IGNhbiBxdWlja2x5IGRldGVybWluZSB0aGUgc3BlY2lmaWMKLSAqIGNvbW1pdCB3aGljaCBicmVha3MgdGhlIElPIHNlcXVlbmNlIHRvIHRoZSBoYXJkd2FyZS4KLSAqCi0gKi8KLQotc3RhdGljIGlubGluZSB2b2lkIF9pd2xfd3JpdGU4KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIG9mcywgdTggdmFsKQorc3RhdGljIGlubGluZSB2b2lkIGl3bF93cml0ZTgoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgb2ZzLCB1OCB2YWwpCiB7CiAJdHJhY2VfaXdsd2lmaV9kZXZfaW93cml0ZTgocHJpdiwgb2ZzLCB2YWwpOwogCWlvd3JpdGU4KHZhbCwgcHJpdi0+aHdfYmFzZSArIG9mcyk7CiB9CiAKLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotc3RhdGljIGlubGluZSB2b2lkIF9faXdsX3dyaXRlOChjb25zdCBjaGFyICpmLCB1MzIgbCwgc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSB1MzIgb2ZzLCB1OCB2YWwpCi17Ci0JSVdMX0RFQlVHX0lPKHByaXYsICJ3cml0ZTgoMHglMDhYLCAweCUwMlgpIC0gJXMgJWRcbiIsIG9mcywgdmFsLCBmLCBsKTsKLQlfaXdsX3dyaXRlOChwcml2LCBvZnMsIHZhbCk7Ci19Ci0jZGVmaW5lIGl3bF93cml0ZTgocHJpdiwgb2ZzLCB2YWwpIFwKLQlfX2l3bF93cml0ZTgoX19GSUxFX18sIF9fTElORV9fLCBwcml2LCBvZnMsIHZhbCkKLSNlbHNlCi0jZGVmaW5lIGl3bF93cml0ZTgocHJpdiwgb2ZzLCB2YWwpIF9pd2xfd3JpdGU4KHByaXYsIG9mcywgdmFsKQotI2VuZGlmCi0KLQotc3RhdGljIGlubGluZSB2b2lkIF9pd2xfd3JpdGUzMihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBvZnMsIHUzMiB2YWwpCitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX3dyaXRlMzIoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgb2ZzLCB1MzIgdmFsKQogewogCXRyYWNlX2l3bHdpZmlfZGV2X2lvd3JpdGUzMihwcml2LCBvZnMsIHZhbCk7CiAJaW93cml0ZTMyKHZhbCwgcHJpdi0+aHdfYmFzZSArIG9mcyk7CiB9CiAKLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotc3RhdGljIGlubGluZSB2b2lkIF9faXdsX3dyaXRlMzIoY29uc3QgY2hhciAqZiwgdTMyIGwsIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgdTMyIG9mcywgdTMyIHZhbCkKLXsKLQlJV0xfREVCVUdfSU8ocHJpdiwgIndyaXRlMzIoMHglMDhYLCAweCUwOFgpIC0gJXMgJWRcbiIsIG9mcywgdmFsLCBmLCBsKTsKLQlfaXdsX3dyaXRlMzIocHJpdiwgb2ZzLCB2YWwpOwotfQotI2RlZmluZSBpd2xfd3JpdGUzMihwcml2LCBvZnMsIHZhbCkgXAotCV9faXdsX3dyaXRlMzIoX19GSUxFX18sIF9fTElORV9fLCBwcml2LCBvZnMsIHZhbCkKLSNlbHNlCi0jZGVmaW5lIGl3bF93cml0ZTMyKHByaXYsIG9mcywgdmFsKSBfaXdsX3dyaXRlMzIocHJpdiwgb2ZzLCB2YWwpCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSB1MzIgX2l3bF9yZWFkMzIoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgb2ZzKQorc3RhdGljIGlubGluZSB1MzIgaXdsX3JlYWQzMihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBvZnMpCiB7CiAJdTMyIHZhbCA9IGlvcmVhZDMyKHByaXYtPmh3X2Jhc2UgKyBvZnMpOwogCXRyYWNlX2l3bHdpZmlfZGV2X2lvcmVhZDMyKHByaXYsIG9mcywgdmFsKTsKIAlyZXR1cm4gdmFsOwogfQogCi0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLXN0YXRpYyBpbmxpbmUgdTMyIF9faXdsX3JlYWQzMihjaGFyICpmLCB1MzIgbCwgc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgb2ZzKQotewotCUlXTF9ERUJVR19JTyhwcml2LCAicmVhZF9kaXJlY3QzMigweCUwOFgpIC0gJXMgJWRcbiIsIG9mcywgZiwgbCk7Ci0JcmV0dXJuIF9pd2xfcmVhZDMyKHByaXYsIG9mcyk7Ci19Ci0jZGVmaW5lIGl3bF9yZWFkMzIocHJpdiwgb2ZzKSBfX2l3bF9yZWFkMzIoX19GSUxFX18sIF9fTElORV9fLCBwcml2LCBvZnMpCi0jZWxzZQotI2RlZmluZSBpd2xfcmVhZDMyKHAsIG8pIF9pd2xfcmVhZDMyKHAsIG8pCi0jZW5kaWYKK3ZvaWQgaXdsX3NldF9iaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzayk7Cit2b2lkIGl3bF9jbGVhcl9iaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzayk7CiAKLSNkZWZpbmUgSVdMX1BPTExfSU5URVJWQUwgMTAJLyogbWljcm9zZWNvbmRzICovCi1zdGF0aWMgaW5saW5lIGludCBfaXdsX3BvbGxfYml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGFkZHIsCi0JCQkJdTMyIGJpdHMsIHUzMiBtYXNrLCBpbnQgdGltZW91dCkKLXsKLQlpbnQgdCA9IDA7CitpbnQgaXdsX3BvbGxfYml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGFkZHIsCisJCSB1MzIgYml0cywgdTMyIG1hc2ssIGludCB0aW1lb3V0KTsKK2ludCBpd2xfcG9sbF9kaXJlY3RfYml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGFkZHIsIHUzMiBtYXNrLAorCQkJaW50IHRpbWVvdXQpOwogCi0JZG8gewotCQlpZiAoKF9pd2xfcmVhZDMyKHByaXYsIGFkZHIpICYgbWFzaykgPT0gKGJpdHMgJiBtYXNrKSkKLQkJCXJldHVybiB0OwotCQl1ZGVsYXkoSVdMX1BPTExfSU5URVJWQUwpOwotCQl0ICs9IElXTF9QT0xMX0lOVEVSVkFMOwotCX0gd2hpbGUgKHQgPCB0aW1lb3V0KTsKK2ludCBpd2xfZ3JhYl9uaWNfYWNjZXNzX3NpbGVudChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaW50IGl3bF9ncmFiX25pY19hY2Nlc3Moc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsX3JlbGVhc2VfbmljX2FjY2VzcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCi0JcmV0dXJuIC1FVElNRURPVVQ7Ci19Ci0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLXN0YXRpYyBpbmxpbmUgaW50IF9faXdsX3BvbGxfYml0KGNvbnN0IGNoYXIgKmYsIHUzMiBsLAotCQkJCSBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBhZGRyLAotCQkJCSB1MzIgYml0cywgdTMyIG1hc2ssIGludCB0aW1lb3V0KQotewotCWludCByZXQgPSBfaXdsX3BvbGxfYml0KHByaXYsIGFkZHIsIGJpdHMsIG1hc2ssIHRpbWVvdXQpOwotCUlXTF9ERUJVR19JTyhwcml2LCAicG9sbF9iaXQoMHglMDhYLCAweCUwOFgsIDB4JTA4WCkgLSAlcy0gJXMgJWRcbiIsCi0JCSAgICAgYWRkciwgYml0cywgbWFzaywKLQkJICAgICB1bmxpa2VseShyZXQgID09IC1FVElNRURPVVQpID8gInRpbWVvdXQiIDogIiIsIGYsIGwpOwotCXJldHVybiByZXQ7Ci19Ci0jZGVmaW5lIGl3bF9wb2xsX2JpdChwcml2LCBhZGRyLCBiaXRzLCBtYXNrLCB0aW1lb3V0KSBcCi0JX19pd2xfcG9sbF9iaXQoX19GSUxFX18sIF9fTElORV9fLCBwcml2LCBhZGRyLCBiaXRzLCBtYXNrLCB0aW1lb3V0KQotI2Vsc2UKLSNkZWZpbmUgaXdsX3BvbGxfYml0KHAsIGEsIGIsIG0sIHQpIF9pd2xfcG9sbF9iaXQocCwgYSwgYiwgbSwgdCkKLSNlbmRpZgordTMyIGl3bF9yZWFkX2RpcmVjdDMyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZyk7Cit2b2lkIGl3bF93cml0ZV9kaXJlY3QzMihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWx1ZSk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfaXdsX3NldF9iaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQlfaXdsX3dyaXRlMzIocHJpdiwgcmVnLCBfaXdsX3JlYWQzMihwcml2LCByZWcpIHwgbWFzayk7Ci19Ci0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2l3bF9zZXRfYml0KGNvbnN0IGNoYXIgKmYsIHUzMiBsLAotCQkJCSBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQotewotCXUzMiB2YWwgPSBfaXdsX3JlYWQzMihwcml2LCByZWcpIHwgbWFzazsKLQlJV0xfREVCVUdfSU8ocHJpdiwgInNldF9iaXQoMHglMDhYLCAweCUwOFgpID0gMHglMDhYXG4iLCByZWcsIG1hc2ssIHZhbCk7Ci0JX2l3bF93cml0ZTMyKHByaXYsIHJlZywgdmFsKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfc2V0X2JpdChzdHJ1Y3QgaXdsX3ByaXYgKnAsIHUzMiByLCB1MzIgbSkKLXsKLQl1bnNpZ25lZCBsb25nIHJlZ19mbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5yZWdfbG9jaywgcmVnX2ZsYWdzKTsKLQlfX2l3bF9zZXRfYml0KF9fRklMRV9fLCBfX0xJTkVfXywgcCwgciwgbSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+cmVnX2xvY2ssIHJlZ19mbGFncyk7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGl3bF9zZXRfYml0KHN0cnVjdCBpd2xfcHJpdiAqcCwgdTMyIHIsIHUzMiBtKQotewotCXVuc2lnbmVkIGxvbmcgcmVnX2ZsYWdzOwordTMyIGl3bF9yZWFkX3BycGgoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnKTsKK3ZvaWQgaXdsX3dyaXRlX3BycGgoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgYWRkciwgdTMyIHZhbCk7Cit2b2lkIGl3bF9zZXRfYml0c19wcnBoKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spOwordm9pZCBpd2xfc2V0X2JpdHNfbWFza19wcnBoKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZywKKwkJCSAgICB1MzIgYml0cywgdTMyIG1hc2spOwordm9pZCBpd2xfY2xlYXJfYml0c19wcnBoKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnAtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotCV9pd2xfc2V0X2JpdChwLCByLCBtKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5yZWdfbG9jaywgcmVnX2ZsYWdzKTsKLX0KLSNlbmRpZgordm9pZCBfaXdsX3JlYWRfdGFyZ19tZW1fd29yZHMoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgYWRkciwKKwkJCSAgICAgIHZvaWQgKmJ1ZiwgaW50IHdvcmRzKTsKIAotc3RhdGljIGlubGluZSB2b2lkIF9pd2xfY2xlYXJfYml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCi17Ci0JX2l3bF93cml0ZTMyKHByaXYsIHJlZywgX2l3bF9yZWFkMzIocHJpdiwgcmVnKSAmIH5tYXNrKTsKLX0KLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotc3RhdGljIGlubGluZSB2b2lkIF9faXdsX2NsZWFyX2JpdChjb25zdCBjaGFyICpmLCB1MzIgbCwKLQkJCQkgICBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQotewotCXUzMiB2YWwgPSBfaXdsX3JlYWQzMihwcml2LCByZWcpICYgfm1hc2s7Ci0JSVdMX0RFQlVHX0lPKHByaXYsICJjbGVhcl9iaXQoMHglMDhYLCAweCUwOFgpID0gMHglMDhYXG4iLCByZWcsIG1hc2ssIHZhbCk7Ci0JX2l3bF93cml0ZTMyKHByaXYsIHJlZywgdmFsKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfY2xlYXJfYml0KHN0cnVjdCBpd2xfcHJpdiAqcCwgdTMyIHIsIHUzMiBtKQotewotCXVuc2lnbmVkIGxvbmcgcmVnX2ZsYWdzOworI2RlZmluZSBpd2xfcmVhZF90YXJnX21lbV93b3Jkcyhwcml2LCBhZGRyLCBidWYsIGJ1ZnNpemUpCVwKKwlkbyB7CQkJCQkJCVwKKwkJQlVJTERfQlVHX09OKChidWZzaXplKSAlIHNpemVvZih1MzIpKTsJCVwKKwkJX2l3bF9yZWFkX3RhcmdfbWVtX3dvcmRzKHByaXYsIGFkZHIsIGJ1ZiwJXAorCQkJCQkgKGJ1ZnNpemUpIC8gc2l6ZW9mKHUzMikpO1wKKwl9IHdoaWxlICgwKQogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnAtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotCV9faXdsX2NsZWFyX2JpdChfX0ZJTEVfXywgX19MSU5FX18sIHAsIHIsIG0pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfY2xlYXJfYml0KHN0cnVjdCBpd2xfcHJpdiAqcCwgdTMyIHIsIHUzMiBtKQotewotCXVuc2lnbmVkIGxvbmcgcmVnX2ZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnAtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotCV9pd2xfY2xlYXJfYml0KHAsIHIsIG0pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgaW50IF9pd2xfZ3JhYl9uaWNfYWNjZXNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlpbnQgcmV0OwotCXUzMiB2YWw7Ci0KLQkvKiB0aGlzIGJpdCB3YWtlcyB1cCB0aGUgTklDICovCi0JX2l3bF9zZXRfYml0KHByaXYsIENTUl9HUF9DTlRSTCwgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKLQotCS8qCi0JICogVGhlc2UgYml0cyBzYXkgdGhlIGRldmljZSBpcyBydW5uaW5nLCBhbmQgc2hvdWxkIGtlZXAgcnVubmluZyBmb3IKLQkgKiBhdCBsZWFzdCBhIHNob3J0IHdoaWxlIChhdCBsZWFzdCBhcyBsb25nIGFzIE1BQ19BQ0NFU1NfUkVRIHN0YXlzIDEpLAotCSAqIGJ1dCB0aGV5IGRvIG5vdCBpbmRpY2F0ZSB0aGF0IGVtYmVkZGVkIFNSQU0gaXMgcmVzdG9yZWQgeWV0OwotCSAqIDM5NDUgYW5kIDQ5NjUgaGF2ZSB2b2xhdGlsZSBTUkFNLCBhbmQgbXVzdCBzYXZlL3Jlc3RvcmUgY29udGVudHMKLQkgKiB0by9mcm9tIGhvc3QgRFJBTSB3aGVuIHNsZWVwaW5nL3dha2luZyBmb3IgcG93ZXItc2F2aW5nLgotCSAqIEVhY2ggZGlyZWN0aW9uIHRha2VzIGFwcHJveGltYXRlbHkgMS80IG1pbGxpc2Vjb25kOyB3aXRoIHRoaXMKLQkgKiBvdmVyaGVhZCwgaXQncyBhIGdvb2QgaWRlYSB0byBncmFiIGFuZCBob2xkIE1BQ19BQ0NFU1NfUkVRVUVTVCBpZiBhCi0JICogc2VyaWVzIG9mIHJlZ2lzdGVyIGFjY2Vzc2VzIGFyZSBleHBlY3RlZCAoZS5nLiByZWFkaW5nIEV2ZW50IExvZyksCi0JICogdG8ga2VlcCBkZXZpY2UgZnJvbSBzbGVlcGluZy4KLQkgKgotCSAqIENTUl9VQ09ERV9EUlZfR1AxIHJlZ2lzdGVyIGJpdCBNQUNfU0xFRVAgPT0gMCBpbmRpY2F0ZXMgdGhhdAotCSAqIFNSQU0gaXMgb2theS9yZXN0b3JlZC4gIFdlIGRvbid0IGNoZWNrIHRoYXQgaGVyZSBiZWNhdXNlIHRoaXMgY2FsbAotCSAqIGlzIGp1c3QgZm9yIGhhcmR3YXJlIHJlZ2lzdGVyIGFjY2VzczsgYnV0IEdQMSBNQUNfU0xFRVAgY2hlY2sgaXMgYQotCSAqIGdvb2QgaWRlYSBiZWZvcmUgYWNjZXNzaW5nIDM5NDUvNDk2NSBTUkFNIChlLmcuIHJlYWRpbmcgRXZlbnQgTG9nKS4KLQkgKgotCSAqIDUwMDAgc2VyaWVzIGFuZCBsYXRlciAoaW5jbHVkaW5nIDEwMDAgc2VyaWVzKSBoYXZlIG5vbi12b2xhdGlsZSBTUkFNLAotCSAqIGFuZCBkbyBub3Qgc2F2ZS9yZXN0b3JlIFNSQU0gd2hlbiBwb3dlciBjeWNsaW5nLgotCSAqLwotCXJldCA9IF9pd2xfcG9sbF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAotCQkJICAgQ1NSX0dQX0NOVFJMX1JFR19WQUxfTUFDX0FDQ0VTU19FTiwKLQkJCSAgIChDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0NMT0NLX1JFQURZIHwKLQkJCSAgICBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfR09JTkdfVE9fU0xFRVApLCAxNTAwMCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJdmFsID0gX2l3bF9yZWFkMzIocHJpdiwgQ1NSX0dQX0NOVFJMKTsKLQkJSVdMX0VSUihwcml2LCAiTUFDIGlzIGluIGRlZXAgc2xlZXAhLiAgQ1NSX0dQX0NOVFJMID0gMHglMDhYXG4iLCB2YWwpOwotCQlfaXdsX3dyaXRlMzIocHJpdiwgQ1NSX1JFU0VULCBDU1JfUkVTRVRfUkVHX0ZMQUdfRk9SQ0VfTk1JKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotc3RhdGljIGlubGluZSBpbnQgX19pd2xfZ3JhYl9uaWNfYWNjZXNzKGNvbnN0IGNoYXIgKmYsIHUzMiBsLAotCQkJCQkgICAgICAgc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCUlXTF9ERUJVR19JTyhwcml2LCAiZ3JhYmJpbmcgbmljIGFjY2VzcyAtICVzICVkXG4iLCBmLCBsKTsKLQlyZXR1cm4gX2l3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7Ci19Ci0jZGVmaW5lIGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdikgXAotCV9faXdsX2dyYWJfbmljX2FjY2VzcyhfX0ZJTEVfXywgX19MSU5FX18sIHByaXYpCi0jZWxzZQotI2RlZmluZSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpIFwKLQlfaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfaXdsX3JlbGVhc2VfbmljX2FjY2VzcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0JX2l3bF9jbGVhcl9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAotCQkJQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKLX0KLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotc3RhdGljIGlubGluZSB2b2lkIF9faXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhjb25zdCBjaGFyICpmLCB1MzIgbCwKLQkJCQkJICAgIHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQotCUlXTF9ERUJVR19JTyhwcml2LCAicmVsZWFzaW5nIG5pYyBhY2Nlc3MgLSAlcyAlZFxuIiwgZiwgbCk7Ci0JX2l3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci19Ci0jZGVmaW5lIGl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdikgXAotCV9faXdsX3JlbGVhc2VfbmljX2FjY2VzcyhfX0ZJTEVfXywgX19MSU5FX18sIHByaXYpCi0jZWxzZQotI2RlZmluZSBpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpIFwKLQlfaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdTMyIF9pd2xfcmVhZF9kaXJlY3QzMihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcpCi17Ci0JcmV0dXJuIF9pd2xfcmVhZDMyKHByaXYsIHJlZyk7Ci19Ci0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLXN0YXRpYyBpbmxpbmUgdTMyIF9faXdsX3JlYWRfZGlyZWN0MzIoY29uc3QgY2hhciAqZiwgdTMyIGwsCi0JCQkJCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZykKLXsKLQl1MzIgdmFsdWUgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgcmVnKTsKLQlJV0xfREVCVUdfSU8ocHJpdiwgInJlYWRfZGlyZWN0MzIoMHglNFgpID0gMHglMDh4IC0gJXMgJWRcbiIsIHJlZywgdmFsdWUsCi0JCSAgICAgZiwgbCk7Ci0JcmV0dXJuIHZhbHVlOwotfQotc3RhdGljIGlubGluZSB1MzIgaXdsX3JlYWRfZGlyZWN0MzIoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnKQotewotCXUzMiB2YWx1ZTsKLQl1bnNpZ25lZCBsb25nIHJlZ19mbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yZWdfbG9jaywgcmVnX2ZsYWdzKTsKLQlpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwotCXZhbHVlID0gX19pd2xfcmVhZF9kaXJlY3QzMihfX0ZJTEVfXywgX19MSU5FX18sIHByaXYsIHJlZyk7Ci0JaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yZWdfbG9jaywgcmVnX2ZsYWdzKTsKLQlyZXR1cm4gdmFsdWU7Ci19Ci0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHUzMiBpd2xfcmVhZF9kaXJlY3QzMihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcpCi17Ci0JdTMyIHZhbHVlOwotCXVuc2lnbmVkIGxvbmcgcmVnX2ZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotCWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7Ci0JdmFsdWUgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgcmVnKTsKLQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotCXJldHVybiB2YWx1ZTsKLQotfQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfaXdsX3dyaXRlX2RpcmVjdDMyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkJIHUzMiByZWcsIHUzMiB2YWx1ZSkKLXsKLQlfaXdsX3dyaXRlMzIocHJpdiwgcmVnLCB2YWx1ZSk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgaXdsX3dyaXRlX2RpcmVjdDMyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbHVlKQotewotCXVuc2lnbmVkIGxvbmcgcmVnX2ZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotCWlmICghaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KSkgewotCQlfaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIHJlZywgdmFsdWUpOwotCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yZWdfbG9jaywgcmVnX2ZsYWdzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGl3bF93cml0ZV9yZWdfYnVmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkJICAgICAgIHUzMiByZWcsIHUzMiBsZW4sIHUzMiAqdmFsdWVzKQotewotCXUzMiBjb3VudCA9IHNpemVvZih1MzIpOwotCi0JaWYgKChwcml2ICE9IE5VTEwpICYmICh2YWx1ZXMgIT0gTlVMTCkpIHsKLQkJZm9yICg7IDAgPCBsZW47IGxlbiAtPSBjb3VudCwgcmVnICs9IGNvdW50LCB2YWx1ZXMrKykKLQkJCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCByZWcsICp2YWx1ZXMpOwotCX0KLX0KLQotc3RhdGljIGlubGluZSBpbnQgX2l3bF9wb2xsX2RpcmVjdF9iaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgYWRkciwKLQkJCQkgICAgICAgdTMyIG1hc2ssIGludCB0aW1lb3V0KQotewotCWludCB0ID0gMDsKLQotCWRvIHsKLQkJaWYgKChpd2xfcmVhZF9kaXJlY3QzMihwcml2LCBhZGRyKSAmIG1hc2spID09IG1hc2spCi0JCQlyZXR1cm4gdDsKLQkJdWRlbGF5KElXTF9QT0xMX0lOVEVSVkFMKTsKLQkJdCArPSBJV0xfUE9MTF9JTlRFUlZBTDsKLQl9IHdoaWxlICh0IDwgdGltZW91dCk7Ci0KLQlyZXR1cm4gLUVUSU1FRE9VVDsKLX0KLQotI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi1zdGF0aWMgaW5saW5lIGludCBfX2l3bF9wb2xsX2RpcmVjdF9iaXQoY29uc3QgY2hhciAqZiwgdTMyIGwsCi0JCQkJCSAgICBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCSAgICB1MzIgYWRkciwgdTMyIG1hc2ssIGludCB0aW1lb3V0KQotewotCWludCByZXQgID0gX2l3bF9wb2xsX2RpcmVjdF9iaXQocHJpdiwgYWRkciwgbWFzaywgdGltZW91dCk7Ci0KLQlpZiAodW5saWtlbHkocmV0ID09IC1FVElNRURPVVQpKQotCQlJV0xfREVCVUdfSU8ocHJpdiwgInBvbGxfZGlyZWN0X2JpdCgweCUwOFgsIDB4JTA4WCkgLSAiCi0JCQkgICAgICJ0aW1lZG91dCAtICVzICVkXG4iLCBhZGRyLCBtYXNrLCBmLCBsKTsKLQllbHNlCi0JCUlXTF9ERUJVR19JTyhwcml2LCAicG9sbF9kaXJlY3RfYml0KDB4JTA4WCwgMHglMDhYKSA9IDB4JTA4WCAiCi0JCQkgICAgICItICVzICVkXG4iLCBhZGRyLCBtYXNrLCByZXQsIGYsIGwpOwotCXJldHVybiByZXQ7Ci19Ci0jZGVmaW5lIGl3bF9wb2xsX2RpcmVjdF9iaXQocHJpdiwgYWRkciwgbWFzaywgdGltZW91dCkgXAotCV9faXdsX3BvbGxfZGlyZWN0X2JpdChfX0ZJTEVfXywgX19MSU5FX18sIHByaXYsIGFkZHIsIG1hc2ssIHRpbWVvdXQpCi0jZWxzZQotI2RlZmluZSBpd2xfcG9sbF9kaXJlY3RfYml0IF9pd2xfcG9sbF9kaXJlY3RfYml0Ci0jZW5kaWYKLQotc3RhdGljIGlubGluZSB1MzIgX2l3bF9yZWFkX3BycGgoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnKQotewotCV9pd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX1BSUEhfUkFERFIsIHJlZyB8ICgzIDw8IDI0KSk7Ci0Jcm1iKCk7Ci0JcmV0dXJuIF9pd2xfcmVhZF9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfUFJQSF9SREFUKTsKLX0KLXN0YXRpYyBpbmxpbmUgdTMyIGl3bF9yZWFkX3BycGgoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnKQotewotCXVuc2lnbmVkIGxvbmcgcmVnX2ZsYWdzOwotCXUzMiB2YWw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cmVnX2xvY2ssIHJlZ19mbGFncyk7Ci0JaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKLQl2YWwgPSBfaXdsX3JlYWRfcHJwaChwcml2LCByZWcpOwotCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cmVnX2xvY2ssIHJlZ19mbGFncyk7Ci0JcmV0dXJuIHZhbDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9pd2xfd3JpdGVfcHJwaChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCSAgICAgdTMyIGFkZHIsIHUzMiB2YWwpCi17Ci0JX2l3bF93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfUFJQSF9XQUREUiwKLQkJCSAgICAgICgoYWRkciAmIDB4MDAwMEZGRkYpIHwgKDMgPDwgMjQpKSk7Ci0Jd21iKCk7Ci0JX2l3bF93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfUFJQSF9XREFULCB2YWwpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsX3dyaXRlX3BycGgoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgYWRkciwgdTMyIHZhbCkKLXsKLQl1bnNpZ25lZCBsb25nIHJlZ19mbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yZWdfbG9jaywgcmVnX2ZsYWdzKTsKLQlpZiAoIWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdikpIHsKLQkJX2l3bF93cml0ZV9wcnBoKHByaXYsIGFkZHIsIHZhbCk7Ci0JCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotfQotCi0jZGVmaW5lIF9pd2xfc2V0X2JpdHNfcHJwaChwcml2LCByZWcsIG1hc2spIFwKLQlfaXdsX3dyaXRlX3BycGgocHJpdiwgcmVnLCAoX2l3bF9yZWFkX3BycGgocHJpdiwgcmVnKSB8IG1hc2spKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsX3NldF9iaXRzX3BycGgoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQl1bnNpZ25lZCBsb25nIHJlZ19mbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yZWdfbG9jaywgcmVnX2ZsYWdzKTsKLQlpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwotCV9pd2xfc2V0X2JpdHNfcHJwaChwcml2LCByZWcsIG1hc2spOwotCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cmVnX2xvY2ssIHJlZ19mbGFncyk7Ci19Ci0KLSNkZWZpbmUgX2l3bF9zZXRfYml0c19tYXNrX3BycGgocHJpdiwgcmVnLCBiaXRzLCBtYXNrKSBcCi0JX2l3bF93cml0ZV9wcnBoKHByaXYsIHJlZywgKChfaXdsX3JlYWRfcHJwaChwcml2LCByZWcpICYgbWFzaykgfCBiaXRzKSkKLQotc3RhdGljIGlubGluZSB2b2lkIGl3bF9zZXRfYml0c19tYXNrX3BycGgoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnLAotCQkJCXUzMiBiaXRzLCB1MzIgbWFzaykKLXsKLQl1bnNpZ25lZCBsb25nIHJlZ19mbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yZWdfbG9jaywgcmVnX2ZsYWdzKTsKLQlpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwotCV9pd2xfc2V0X2JpdHNfbWFza19wcnBoKHByaXYsIHJlZywgYml0cywgbWFzayk7Ci0JaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yZWdfbG9jaywgcmVnX2ZsYWdzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGl3bF9jbGVhcl9iaXRzX3BycGgoc3RydWN0IGl3bF9wcml2Ci0JCQkJCQkgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQotewotCXVuc2lnbmVkIGxvbmcgcmVnX2ZsYWdzOwotCXUzMiB2YWw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cmVnX2xvY2ssIHJlZ19mbGFncyk7Ci0JaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKLQl2YWwgPSBfaXdsX3JlYWRfcHJwaChwcml2LCByZWcpOwotCV9pd2xfd3JpdGVfcHJwaChwcml2LCByZWcsICh2YWwgJiB+bWFzaykpOwotCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cmVnX2xvY2ssIHJlZ19mbGFncyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIGl3bF9yZWFkX3RhcmdfbWVtKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGFkZHIpCi17Ci0JdW5zaWduZWQgbG9uZyByZWdfZmxhZ3M7Ci0JdTMyIHZhbHVlOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotCWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7Ci0KLQlfaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkFERFIsIGFkZHIpOwotCXJtYigpOwotCXZhbHVlID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7Ci0KLQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotCXJldHVybiB2YWx1ZTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGl3bF93cml0ZV90YXJnX21lbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MzIgdmFsKQotewotCXVuc2lnbmVkIGxvbmcgcmVnX2ZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotCWlmICghaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KSkgewotCQlfaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fV0FERFIsIGFkZHIpOwotCQl3bWIoKTsKLQkJX2l3bF93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1dEQVQsIHZhbCk7Ci0JCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsX3dyaXRlX3RhcmdfbWVtX2J1ZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBhZGRyLAotCQkJCQkgIHUzMiBsZW4sIHUzMiAqdmFsdWVzKQotewotCXVuc2lnbmVkIGxvbmcgcmVnX2ZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotCWlmICghaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KSkgewotCQlfaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fV0FERFIsIGFkZHIpOwotCQl3bWIoKTsKLQkJZm9yICg7IDAgPCBsZW47IGxlbiAtPSBzaXplb2YodTMyKSwgdmFsdWVzKyspCi0JCQlfaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fV0RBVCwgKnZhbHVlcyk7Ci0KLQkJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cmVnX2xvY2ssIHJlZ19mbGFncyk7Ci19Cit1MzIgaXdsX3JlYWRfdGFyZ19tZW0oc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgYWRkcik7Cit2b2lkIGl3bF93cml0ZV90YXJnX21lbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MzIgdmFsKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWQuYwppbmRleCBkN2YyYTBiLi40MzkxODdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWQuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC00OCw4ICs0OCwyMSBAQAogTU9EVUxFX1BBUk1fREVTQyhsZWRfbW9kZSwgIjA9c3lzdGVtIGRlZmF1bHQsICIKIAkJIjE9T24oUkYgT24pL09mZihSRiBPZmYpLCAyPWJsaW5raW5nIik7CiAKKy8qIFRocm91Z2hwdXQJCU9GRiB0aW1lKG1zKQlPTiB0aW1lIChtcykKKyAqCT4zMDAJCQkyNQkJMjUKKyAqCT4yMDAgdG8gMzAwCQk0MAkJNDAKKyAqCT4xMDAgdG8gMjAwCQk1NQkJNTUKKyAqCT43MCB0byAxMDAJCTY1CQk2NQorICoJPjUwIHRvIDcwCQk3NQkJNzUKKyAqCT4yMCB0byA1MAkJODUJCTg1CisgKgk+MTAgdG8gMjAJCTk1CQk5NQorICoJPjUgdG8gMTAJCTExMAkJMTEwCisgKgk+MSB0byA1CQkJMTMwCQkxMzAKKyAqCT4wIHRvIDEJCQkxNjcJCTE2NworICoJPD0wCQkJCQlTT0xJRCBPTgorICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90cHRfYmxpbmsgaXdsX2JsaW5rW10gPSB7Ci0JeyAudGhyb3VnaHB1dCA9IDAgKiAxMDI0IC0gMSwgLmJsaW5rX3RpbWUgPSAzMzQgfSwKKwl7IC50aHJvdWdocHV0ID0gMCwgLmJsaW5rX3RpbWUgPSAzMzQgfSwKIAl7IC50aHJvdWdocHV0ID0gMSAqIDEwMjQgLSAxLCAuYmxpbmtfdGltZSA9IDI2MCB9LAogCXsgLnRocm91Z2hwdXQgPSA1ICogMTAyNCAtIDEsIC5ibGlua190aW1lID0gMjIwIH0sCiAJeyAudGhyb3VnaHB1dCA9IDEwICogMTAyNCAtIDEsIC5ibGlua190aW1lID0gMTkwIH0sCkBAIC02MSwxMCArNzQsMTYgQEAKIAl7IC50aHJvdWdocHV0ID0gMzAwICogMTAyNCAtIDEsIC5ibGlua190aW1lID0gNTAgfSwKIH07CiAKKy8qIFNldCBsZWQgcmVnaXN0ZXIgb2ZmICovCit2b2lkIGl3bGFnbl9sZWRfZW5hYmxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfTEVEX1JFRywgQ1NSX0xFRF9SRUdfVFJVTl9PTik7Cit9CisKIC8qCiAgKiBBZGp1c3QgbGVkIGJsaW5rIHJhdGUgdG8gY29tcGVuc2F0ZSBvbiBhIE1BQyBDbG9jayBkaWZmZXJlbmNlIG9uIGV2ZXJ5IEhXCi0gKiBMZWQgYmxpbmsgcmF0ZSBhbmFseXNpcyBzaG93ZWQgYW4gYXZlcmFnZSBkZXZpYXRpb24gb2YgMCUgb24gMzk0NSwKLSAqIDUlIG9uIDQ5NjUgSFcgYW5kIDIwJSBvbiA1MDAwIHNlcmllcyBhbmQgdXAuCisgKiBMZWQgYmxpbmsgcmF0ZSBhbmFseXNpcyBzaG93ZWQgYW4gYXZlcmFnZSBkZXZpYXRpb24gb2YgMjAlIG9uIDUwMDAgc2VyaWVzCisgKiBhbmQgdXAuCiAgKiBOZWVkIHRvIGNvbXBlbnNhdGUgb24gdGhlIGxlZCBvbi9vZmYgdGltZSBwZXIgSFcgYWNjb3JkaW5nIHRvIHRoZSBkZXZpYXRpb24KICAqIHRvIGFjaGlldmUgdGhlIGRlc2lyZWQgbGVkIGZyZXF1ZW5jeQogICogVGhlIGNhbGN1bGF0aW9uIGlzOiAoMTAwLWF2ZXJhZ2VEZXZpYXRpb24pLzEwMCAqIGJsaW5rVGltZQpAQCAtODQsNiArMTAzLDI0IEBACiAJcmV0dXJuICh1OCkoKHRpbWUgKiBjb21wZW5zYXRpb24pID4+IDYpOwogfQogCitzdGF0aWMgaW50IGl3bF9zZW5kX2xlZF9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX2xlZF9jbWQgKmxlZF9jbWQpCit7CisJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CisJCS5pZCA9IFJFUExZX0xFRFNfQ01ELAorCQkubGVuID0gc2l6ZW9mKHN0cnVjdCBpd2xfbGVkX2NtZCksCisJCS5kYXRhID0gbGVkX2NtZCwKKwkJLmZsYWdzID0gQ01EX0FTWU5DLAorCQkuY2FsbGJhY2sgPSBOVUxMLAorCX07CisJdTMyIHJlZzsKKworCXJlZyA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0xFRF9SRUcpOworCWlmIChyZWcgIT0gKHJlZyAmIENTUl9MRURfQlNNX0NUUkxfTVNLKSkKKwkJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0xFRF9SRUcsIHJlZyAmIENTUl9MRURfQlNNX0NUUkxfTVNLKTsKKworCXJldHVybiBpd2xfc2VuZF9jbWQocHJpdiwgJmNtZCk7Cit9CisKIC8qIFNldCBsZWQgcGF0dGVybiBjb21tYW5kICovCiBzdGF0aWMgaW50IGl3bF9sZWRfY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJICAgICAgIHVuc2lnbmVkIGxvbmcgb24sCkBAIC0xMDEsNiArMTM4LDExIEBACiAJaWYgKHByaXYtPmJsaW5rX29uID09IG9uICYmIHByaXYtPmJsaW5rX29mZiA9PSBvZmYpCiAJCXJldHVybiAwOwogCisJaWYgKG9mZiA9PSAwKSB7CisJCS8qIGxlZCBpcyBTT0xJRF9PTiAqLworCQlvbiA9IElXTF9MRURfU09MSUQ7CisJfQorCiAJSVdMX0RFQlVHX0xFRChwcml2LCAiTGVkIGJsaW5rIHRpbWUgY29tcGVuc2F0aW9uPSV1XG4iLAogCQkJcHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+bGVkX2NvbXBlbnNhdGlvbik7CiAJbGVkX2NtZC5vbiA9IGl3bF9ibGlua19jb21wZW5zYXRpb24ocHJpdiwgb24sCkBAIC0xMDgsNyArMTUwLDcgQEAKIAlsZWRfY21kLm9mZiA9IGl3bF9ibGlua19jb21wZW5zYXRpb24ocHJpdiwgb2ZmLAogCQkJCXByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPmxlZF9jb21wZW5zYXRpb24pOwogCi0JcmV0ID0gcHJpdi0+Y2ZnLT5vcHMtPmxlZC0+Y21kKHByaXYsICZsZWRfY21kKTsKKwlyZXQgPSBpd2xfc2VuZF9sZWRfY21kKHByaXYsICZsZWRfY21kKTsKIAlpZiAoIXJldCkgewogCQlwcml2LT5ibGlua19vbiA9IG9uOwogCQlwcml2LT5ibGlua19vZmYgPSBvZmY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5oCmluZGV4IDEwMWVlZjEuLjFjOTNkZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTUwLDYgKzUwLDcgQEAKIAlJV0xfTEVEX0JMSU5LLAogfTsKIAordm9pZCBpd2xhZ25fbGVkX2VuYWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogdm9pZCBpd2xfbGVkc19pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB2b2lkIGl3bF9sZWRzX2V4aXQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmMKaW5kZXggNTc2Nzk1ZS4uNTk1YzkzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCkBAIC0xODgsOSArMTg4LDEwIEBACiAJCQl0YWJsZSA9IHJhbmdlXzA7CiAJfQogCi0JQlVHX09OKGx2bCA8IDAgfHwgbHZsID49IElXTF9QT1dFUl9OVU0pOwotCi0JKmNtZCA9IHRhYmxlW2x2bF0uY21kOworCWlmIChXQVJOX09OKGx2bCA8IDAgfHwgbHZsID49IElXTF9QT1dFUl9OVU0pKQorCQltZW1zZXQoY21kLCAwLCBzaXplb2YoKmNtZCkpOworCWVsc2UKKwkJKmNtZCA9IHRhYmxlW2x2bF0uY21kOwogCiAJaWYgKHBlcmlvZCA9PSAwKSB7CiAJCXNraXAgPSAwOwpAQCAtMzU0LDE2ICszNTUsMTIgQEAKIAogCWR0aW1wZXIgPSBwcml2LT5ody0+Y29uZi5wc19kdGltX3BlcmlvZCA/OiAxOwogCi0JaWYgKHByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPmJyb2tlbl9wb3dlcnNhdmUpCi0JCWl3bF9wb3dlcl9zbGVlcF9jYW1fY21kKHByaXYsIGNtZCk7Ci0JZWxzZSBpZiAocHJpdi0+aHctPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9JRExFKQorCWlmIChwcml2LT5ody0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX0lETEUpCiAJCWl3bF9zdGF0aWNfc2xlZXBfY21kKHByaXYsIGNtZCwgSVdMX1BPV0VSX0lOREVYXzUsIDIwKTsKLQllbHNlIGlmIChwcml2LT5jZmctPm9wcy0+bGliLT50dF9vcHMubG93ZXJfcG93ZXJfZGV0ZWN0aW9uICYmCi0JCSBwcml2LT5jZmctPm9wcy0+bGliLT50dF9vcHMudHRfcG93ZXJfbW9kZSAmJgotCQkgcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHRfb3BzLmxvd2VyX3Bvd2VyX2RldGVjdGlvbihwcml2KSkgeworCWVsc2UgaWYgKGl3bF90dF9pc19sb3dfcG93ZXJfc3RhdGUocHJpdikpIHsKIAkJLyogaW4gdGhlcm1hbCB0aHJvdHRsaW5nIGxvdyBwb3dlciBzdGF0ZSAqLwogCQlpd2xfc3RhdGljX3NsZWVwX2NtZChwcml2LCBjbWQsCi0JCSAgICBwcml2LT5jZmctPm9wcy0+bGliLT50dF9vcHMudHRfcG93ZXJfbW9kZShwcml2KSwgZHRpbXBlcik7CisJCSAgICBpd2xfdHRfY3VycmVudF9wb3dlcl9tb2RlKHByaXYpLCBkdGltcGVyKTsKIAl9IGVsc2UgaWYgKCFlbmFibGVkKQogCQlpd2xfcG93ZXJfc2xlZXBfY2FtX2NtZChwcml2LCBjbWQpOwogCWVsc2UgaWYgKHByaXYtPnBvd2VyX2RhdGEuZGVidWdfc2xlZXBfbGV2ZWxfb3ZlcnJpZGUgPj0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5oCmluZGV4IGZlMDEyMDMuLjU5NjM1ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcHJwaC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcHJwaC5oCmluZGV4IDg2ZjUxMjMuLmYwMGQxODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBycGguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wcnBoLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC05MSw3ICs5MSw2IEBACiAjZGVmaW5lIEFQTUdfUFNfQ1RSTF9WQUxfUkVTRVRfUkVRCQkoMHgwNDAwMDAwMCkKICNkZWZpbmUgQVBNR19QU19DVFJMX01TS19QV1JfU1JDCQkoMHgwMzAwMDAwMCkKICNkZWZpbmUgQVBNR19QU19DVFJMX1ZBTF9QV1JfU1JDX1ZNQUlOCQkoMHgwMDAwMDAwMCkKLSNkZWZpbmUgQVBNR19QU19DVFJMX1ZBTF9QV1JfU1JDX01BWAkJKDB4MDEwMDAwMDApIC8qIDM5NDUgb25seSAqLwogI2RlZmluZSBBUE1HX1BTX0NUUkxfVkFMX1BXUl9TUkNfVkFVWAkJKDB4MDIwMDAwMDApCiAjZGVmaW5lIEFQTUdfU1ZSX1ZPTFRBR0VfQ09ORklHX0JJVF9NU0sJKDB4MDAwMDAxRTApIC8qIGJpdCA4OjUgKi8KICNkZWZpbmUgQVBNR19TVlJfRElHSVRBTF9WT0xUQUdFXzFfMzIJCSgweDAwMDAwMDYwKQpAQCAtOTksMTUyICs5OCw2IEBACiAjZGVmaW5lIEFQTUdfUENJREVWX1NUVF9WQUxfTDFfQUNUX0RJUwkJKDB4MDAwMDA4MDApCiAKIC8qKgotICogQlNNIChCb290c3RyYXAgU3RhdGUgTWFjaGluZSkKLSAqCi0gKiBUaGUgQm9vdHN0cmFwIFN0YXRlIE1hY2hpbmUgKEJTTSkgc3RvcmVzIGEgc2hvcnQgYm9vdHN0cmFwIHVDb2RlIHByb2dyYW0KLSAqIGluIHNwZWNpYWwgU1JBTSB0aGF0IGRvZXMgbm90IHBvd2VyIGRvd24gd2hlbiB0aGUgZW1iZWRkZWQgY29udHJvbAotICogcHJvY2Vzc29yIGlzIHNsZWVwaW5nIChlLmcuIGZvciBwZXJpb2RpYyBwb3dlci1zYXZpbmcgc2h1dGRvd25zIG9mIHJhZGlvKS4KLSAqCi0gKiBXaGVuIHBvd2VyaW5nIGJhY2sgdXAgYWZ0ZXIgc2xlZXBzIChvciBkdXJpbmcgaW5pdGlhbCB1Q29kZSBsb2FkKSwgdGhlIEJTTQotICogaW50ZXJuYWxseSBsb2FkcyB0aGUgc2hvcnQgYm9vdHN0cmFwIHByb2dyYW0gZnJvbSB0aGUgc3BlY2lhbCBTUkFNIGludG8gdGhlCi0gKiBlbWJlZGRlZCBwcm9jZXNzb3IncyBpbnN0cnVjdGlvbiBTUkFNLCBhbmQgc3RhcnRzIHRoZSBwcm9jZXNzb3Igc28gaXQgcnVucwotICogdGhlIGJvb3RzdHJhcCBwcm9ncmFtLgotICoKLSAqIFRoaXMgYm9vdHN0cmFwIHByb2dyYW0gbG9hZHMgKHZpYSBQQ0kgYnVzbWFzdGVyIERNQSkgaW5zdHJ1Y3Rpb25zIGFuZCBkYXRhCi0gKiBpbWFnZXMgZm9yIGEgdUNvZGUgcHJvZ3JhbSBmcm9tIGhvc3QgRFJBTSBsb2NhdGlvbnMuICBUaGUgaG9zdCBkcml2ZXIKLSAqIGluZGljYXRlcyBEUkFNIGxvY2F0aW9ucyBhbmQgc2l6ZXMgZm9yIGluc3RydWN0aW9uIGFuZCBkYXRhIGltYWdlcyB2aWEgdGhlCi0gKiBmb3VyIEJTTV9EUkFNXyogcmVnaXN0ZXJzLiAgT25jZSB0aGUgYm9vdHN0cmFwIHByb2dyYW0gbG9hZHMgdGhlIG5ldyBwcm9ncmFtLAotICogdGhlIG5ldyBwcm9ncmFtIHN0YXJ0cyBhdXRvbWF0aWNhbGx5LgotICoKLSAqIFRoZSB1Q29kZSB1c2VkIGZvciBvcGVuLXNvdXJjZSBkcml2ZXJzIGluY2x1ZGVzIHR3byBwcm9ncmFtczoKLSAqCi0gKiAxKSAgSW5pdGlhbGl6YXRpb24gLS0gcGVyZm9ybXMgaGFyZHdhcmUgY2FsaWJyYXRpb24gYW5kIHNldHMgdXAgc29tZQotICogICAgIGludGVybmFsIGRhdGEsIHRoZW4gbm90aWZpZXMgaG9zdCB2aWEgImluaXRpYWxpemUgYWxpdmUiIG5vdGlmaWNhdGlvbgotICogICAgIChzdHJ1Y3QgaXdsX2luaXRfYWxpdmVfcmVzcCkgdGhhdCBpdCBoYXMgY29tcGxldGVkIGFsbCBvZiBpdHMgd29yay4KLSAqICAgICBBZnRlciBzaWduYWwgZnJvbSBob3N0LCBpdCB0aGVuIGxvYWRzIGFuZCBzdGFydHMgdGhlIHJ1bnRpbWUgcHJvZ3JhbS4KLSAqICAgICBUaGUgaW5pdGlhbGl6YXRpb24gcHJvZ3JhbSBtdXN0IGJlIHVzZWQgd2hlbiBpbml0aWFsbHkgc2V0dGluZyB1cCB0aGUKLSAqICAgICBOSUMgYWZ0ZXIgbG9hZGluZyB0aGUgZHJpdmVyLgotICoKLSAqIDIpICBSdW50aW1lL1Byb3RvY29sIC0tIHBlcmZvcm1zIGFsbCBub3JtYWwgcnVudGltZSBvcGVyYXRpb25zLiAgVGhpcwotICogICAgIG5vdGlmaWVzIGhvc3QgdmlhICJhbGl2ZSIgbm90aWZpY2F0aW9uIChzdHJ1Y3QgaXdsX2FsaXZlX3Jlc3ApIHRoYXQgaXQKLSAqICAgICBpcyByZWFkeSB0byBiZSB1c2VkLgotICoKLSAqIFdoZW4gaW5pdGlhbGl6aW5nIHRoZSBOSUMsIHRoZSBob3N0IGRyaXZlciBkb2VzIHRoZSBmb2xsb3dpbmcgcHJvY2VkdXJlOgotICoKLSAqIDEpICBMb2FkIGJvb3RzdHJhcCBwcm9ncmFtIChpbnN0cnVjdGlvbnMgb25seSwgbm8gZGF0YSBpbWFnZSBmb3IgYm9vdHN0cmFwKQotICogICAgIGludG8gYm9vdHN0cmFwIG1lbW9yeS4gIFVzZSBkd29yZCB3cml0ZXMgc3RhcnRpbmcgYXQgQlNNX1NSQU1fTE9XRVJfQk9VTkQKLSAqCi0gKiAyKSAgUG9pbnQgKHZpYSBCU01fRFJBTV8qKSB0byB0aGUgImluaXRpYWxpemUiIHVDb2RlIGRhdGEgYW5kIGluc3RydWN0aW9uCi0gKiAgICAgaW1hZ2VzIGluIGhvc3QgRFJBTS4KLSAqCi0gKiAzKSAgU2V0IHVwIEJTTSB0byBjb3B5IGZyb20gQlNNIFNSQU0gaW50byB1Q29kZSBpbnN0cnVjdGlvbiBTUkFNIHdoZW4gYXNrZWQ6Ci0gKiAgICAgQlNNX1dSX01FTV9TUkNfUkVHID0gMAotICogICAgIEJTTV9XUl9NRU1fRFNUX1JFRyA9IFJUQ19JTlNUX0xPV0VSX0JPVU5ECi0gKiAgICAgQlNNX1dSX01FTV9EV0NPVU5UX1JFRyA9ICMgZHdvcmRzIGluIGJvb3RzdHJhcCBpbnN0cnVjdGlvbiBpbWFnZQotICoKLSAqIDQpICBMb2FkIGJvb3RzdHJhcCBpbnRvIGluc3RydWN0aW9uIFNSQU06Ci0gKiAgICAgQlNNX1dSX0NUUkxfUkVHID0gQlNNX1dSX0NUUkxfUkVHX0JJVF9TVEFSVAotICoKLSAqIDUpICBXYWl0IGZvciBsb2FkIGNvbXBsZXRpb246Ci0gKiAgICAgUG9sbCBCU01fV1JfQ1RSTF9SRUcgZm9yIEJTTV9XUl9DVFJMX1JFR19CSVRfU1RBUlQgPSAwCi0gKgotICogNikgIEVuYWJsZSBmdXR1cmUgYm9vdCBsb2FkcyB3aGVuZXZlciBOSUMncyBwb3dlciBtYW5hZ2VtZW50IHRyaWdnZXJzIGl0OgotICogICAgIEJTTV9XUl9DVFJMX1JFRyA9IEJTTV9XUl9DVFJMX1JFR19CSVRfU1RBUlRfRU4KLSAqCi0gKiA3KSAgU3RhcnQgdGhlIE5JQyBieSByZW1vdmluZyBhbGwgcmVzZXQgYml0czoKLSAqICAgICBDU1JfUkVTRVQgPSAwCi0gKgotICogICAgIFRoZSBib290c3RyYXAgdUNvZGUgKGFscmVhZHkgaW4gaW5zdHJ1Y3Rpb24gU1JBTSkgbG9hZHMgaW5pdGlhbGl6YXRpb24KLSAqICAgICB1Q29kZS4gIEluaXRpYWxpemF0aW9uIHVDb2RlIHBlcmZvcm1zIGRhdGEgaW5pdGlhbGl6YXRpb24sIHNlbmRzCi0gKiAgICAgImluaXRpYWxpemUgYWxpdmUiIG5vdGlmaWNhdGlvbiB0byBob3N0LCBhbmQgd2FpdHMgZm9yIGEgc2lnbmFsIGZyb20KLSAqICAgICBob3N0IHRvIGxvYWQgcnVudGltZSBjb2RlLgotICoKLSAqIDQpICBQb2ludCAodmlhIEJTTV9EUkFNXyopIHRvIHRoZSAicnVudGltZSIgdUNvZGUgZGF0YSBhbmQgaW5zdHJ1Y3Rpb24KLSAqICAgICBpbWFnZXMgaW4gaG9zdCBEUkFNLiAgVGhlIGxhc3QgcmVnaXN0ZXIgbG9hZGVkIG11c3QgYmUgdGhlIGluc3RydWN0aW9uCi0gKiAgICAgYnl0ZSBjb3VudCByZWdpc3RlciAoIjEiIGluIE1TYml0IHRlbGxzIGluaXRpYWxpemF0aW9uIHVDb2RlIHRvIGxvYWQKLSAqICAgICB0aGUgcnVudGltZSB1Q29kZSk6Ci0gKiAgICAgQlNNX0RSQU1fSU5TVF9CWVRFQ09VTlRfUkVHID0gYnl0ZSBjb3VudCB8IEJTTV9EUkFNX0lOU1RfTE9BRAotICoKLSAqIDUpICBXYWl0IGZvciAiYWxpdmUiIG5vdGlmaWNhdGlvbiwgdGhlbiBpc3N1ZSBub3JtYWwgcnVudGltZSBjb21tYW5kcy4KLSAqCi0gKiBEYXRhIGNhY2hpbmcgZHVyaW5nIHBvd2VyLWRvd25zOgotICoKLSAqIEp1c3QgYmVmb3JlIHRoZSBlbWJlZGRlZCBjb250cm9sbGVyIHBvd2VycyBkb3duIChlLmcgZm9yIGF1dG9tYXRpYwotICogcG93ZXItc2F2aW5nIG1vZGVzLCBvciBmb3IgUkZLSUxMKSwgdUNvZGUgc3RvcmVzICh2aWEgUENJIGJ1c21hc3RlciBETUEpCi0gKiBhIGN1cnJlbnQgc25hcHNob3Qgb2YgdGhlIGVtYmVkZGVkIHByb2Nlc3NvcidzIGRhdGEgU1JBTSBpbnRvIGhvc3QgRFJBTS4KLSAqIFRoaXMgY2FjaGVzIHRoZSBkYXRhIHdoaWxlIHRoZSBlbWJlZGRlZCBwcm9jZXNzb3IncyBtZW1vcnkgaXMgcG93ZXJlZCBkb3duLgotICogTG9jYXRpb24gYW5kIHNpemUgYXJlIGNvbnRyb2xsZWQgYnkgQlNNX0RSQU1fREFUQV8qIHJlZ2lzdGVycy4KLSAqCi0gKiBOT1RFOiAgSW5zdHJ1Y3Rpb24gU1JBTSBkb2VzIG5vdCBuZWVkIHRvIGJlIHNhdmVkLCBzaW5jZSB0aGF0IGRvZXNuJ3QKLSAqICAgICAgICBjaGFuZ2UgZHVyaW5nIG9wZXJhdGlvbjsgdGhlIG9yaWdpbmFsIGltYWdlIChmcm9tIHVDb2RlIGRpc3RyaWJ1dGlvbgotICogICAgICAgIGZpbGUpIGNhbiBiZSB1c2VkIGZvciByZWxvYWQuCi0gKgotICogV2hlbiBwb3dlcmluZyBiYWNrIHVwLCB0aGUgQlNNIGxvYWRzIHRoZSBib290c3RyYXAgcHJvZ3JhbS4gIEJvb3RzdHJhcCBsb29rcwotICogYXQgdGhlIEJTTV9EUkFNXyogcmVnaXN0ZXJzLCB3aGljaCBub3cgcG9pbnQgdG8gdGhlIHJ1bnRpbWUgaW5zdHJ1Y3Rpb24KLSAqIGltYWdlIGFuZCB0aGUgY2FjaGVkIChtb2RpZmllZCkgcnVudGltZSBkYXRhICgqbm90KiB0aGUgaW5pdGlhbGl6YXRpb24KLSAqIHVDb2RlKS4gIEJvb3RzdHJhcCByZWxvYWRzIHRoZXNlIHJ1bnRpbWUgaW1hZ2VzIGludG8gU1JBTSwgYW5kIHJlc3RhcnRzIHRoZQotICogdUNvZGUgZnJvbSB3aGVyZSBpdCBsZWZ0IG9mZiBiZWZvcmUgdGhlIHBvd2VyLWRvd24uCi0gKgotICogTk9URTogIEluaXRpYWxpemF0aW9uIHVDb2RlIGRvZXMgKm5vdCogcnVuIGFzIHBhcnQgb2YgdGhlIHNhdmUvcmVzdG9yZQotICogICAgICAgIHByb2NlZHVyZS4KLSAqCi0gKiBUaGlzIHNhdmUvcmVzdG9yZSBtZXRob2QgaXMgbW9zdGx5IGZvciBhdXRvbm9tb3VzIHBvd2VyIG1hbmFnZW1lbnQgZHVyaW5nCi0gKiBub3JtYWwgb3BlcmF0aW9uIChyZXN1bHQgb2YgUE9XRVJfVEFCTEVfQ01EKS4gIFBsYXRmb3JtIHN1c3BlbmQvcmVzdW1lIGFuZAotICogUkZLSUxMIHNob3VsZCB1c2UgY29tcGxldGUgcmVzdGFydHMgKHdpdGggdG90YWwgcmUtaW5pdGlhbGl6YXRpb24pIG9mIHVDb2RlLAotICogYWxsb3dpbmcgdG90YWwgc2h1dGRvd24gKGluY2x1ZGluZyBCU00gbWVtb3J5KS4KLSAqCi0gKiBOb3RlIHRoYXQsIGR1cmluZyBub3JtYWwgb3BlcmF0aW9uLCB0aGUgaG9zdCBEUkFNIHRoYXQgaGVsZCB0aGUgaW5pdGlhbAotICogc3RhcnR1cCBkYXRhIGZvciB0aGUgcnVudGltZSBjb2RlIGlzIG5vdyBiZWluZyB1c2VkIGFzIGEgYmFja3VwIGRhdGEgY2FjaGUKLSAqIGZvciBtb2RpZmllZCBkYXRhISAgSWYgeW91IG5lZWQgdG8gY29tcGxldGVseSByZS1pbml0aWFsaXplIHRoZSBOSUMsIG1ha2UKLSAqIHN1cmUgdGhhdCB5b3UgdXNlIHRoZSBydW50aW1lIGRhdGEgaW1hZ2UgZnJvbSB0aGUgdUNvZGUgZGlzdHJpYnV0aW9uIGZpbGUsCi0gKiBub3QgdGhlIG1vZGlmaWVkL3NhdmVkIHJ1bnRpbWUgZGF0YS4gIFlvdSBtYXkgd2FudCB0byBzdG9yZSBhIHNlcGFyYXRlCi0gKiAiY2xlYW4iIHJ1bnRpbWUgZGF0YSBpbWFnZSBpbiBEUkFNIHRvIGF2b2lkIGRpc2sgcmVhZHMgb2YgZGlzdHJpYnV0aW9uIGZpbGUuCi0gKi8KLQotLyogQlNNIGJpdCBmaWVsZHMgKi8KLSNkZWZpbmUgQlNNX1dSX0NUUkxfUkVHX0JJVF9TVEFSVCAgICAgKDB4ODAwMDAwMDApIC8qIHN0YXJ0IGJvb3QgbG9hZCBub3cgKi8KLSNkZWZpbmUgQlNNX1dSX0NUUkxfUkVHX0JJVF9TVEFSVF9FTiAgKDB4NDAwMDAwMDApIC8qIGVuYWJsZSBib290IGFmdGVyIHB3cnVwKi8KLSNkZWZpbmUgQlNNX0RSQU1fSU5TVF9MT0FEICAgICAgICAgICAgKDB4ODAwMDAwMDApIC8qIHN0YXJ0IHByb2dyYW0gbG9hZCBub3cgKi8KLQotLyogQlNNIGFkZHJlc3NlcyAqLwotI2RlZmluZSBCU01fQkFTRSAgICAgICAgICAgICAgICAgICAgIChQUlBIX0JBU0UgKyAweDM0MDApCi0jZGVmaW5lIEJTTV9FTkQgICAgICAgICAgICAgICAgICAgICAgKFBSUEhfQkFTRSArIDB4MzgwMCkKLQotI2RlZmluZSBCU01fV1JfQ1RSTF9SRUcgICAgICAgICAgICAgIChCU01fQkFTRSArIDB4MDAwKSAvKiBjdGwgYW5kIHN0YXR1cyAqLwotI2RlZmluZSBCU01fV1JfTUVNX1NSQ19SRUcgICAgICAgICAgIChCU01fQkFTRSArIDB4MDA0KSAvKiBzb3VyY2UgaW4gQlNNIG1lbSAqLwotI2RlZmluZSBCU01fV1JfTUVNX0RTVF9SRUcgICAgICAgICAgIChCU01fQkFTRSArIDB4MDA4KSAvKiBkZXN0IGluIFNSQU0gbWVtICovCi0jZGVmaW5lIEJTTV9XUl9EV0NPVU5UX1JFRyAgICAgICAgICAgKEJTTV9CQVNFICsgMHgwMEMpIC8qIGJ5dGVzICovCi0jZGVmaW5lIEJTTV9XUl9TVEFUVVNfUkVHICAgICAgICAgICAgKEJTTV9CQVNFICsgMHgwMTApIC8qIGJpdCAwOiAgMSA9PSBkb25lICovCi0KLS8qCi0gKiBQb2ludGVycyBhbmQgc2l6ZSByZWdzIGZvciBib290c3RyYXAgbG9hZCBhbmQgZGF0YSBTUkFNIHNhdmUvcmVzdG9yZS4KLSAqIE5PVEU6ICAzOTQ1IHBvaW50ZXJzIHVzZSBiaXRzIDMxOjAgb2YgRFJBTSBhZGRyZXNzLgotICogICAgICAgIDQ5NjUgcG9pbnRlcnMgdXNlIGJpdHMgMzU6NCBvZiBEUkFNIGFkZHJlc3MuCi0gKi8KLSNkZWZpbmUgQlNNX0RSQU1fSU5TVF9QVFJfUkVHICAgICAgICAoQlNNX0JBU0UgKyAweDA5MCkKLSNkZWZpbmUgQlNNX0RSQU1fSU5TVF9CWVRFQ09VTlRfUkVHICAoQlNNX0JBU0UgKyAweDA5NCkKLSNkZWZpbmUgQlNNX0RSQU1fREFUQV9QVFJfUkVHICAgICAgICAoQlNNX0JBU0UgKyAweDA5OCkKLSNkZWZpbmUgQlNNX0RSQU1fREFUQV9CWVRFQ09VTlRfUkVHICAoQlNNX0JBU0UgKyAweDA5QykKLQotLyoKLSAqIEJTTSBzcGVjaWFsIG1lbW9yeSwgc3RheXMgcG93ZXJlZCBvbiBkdXJpbmcgcG93ZXItc2F2ZSBzbGVlcHMuCi0gKiBSZWFkL3dyaXRlLCBhZGRyZXNzIHJhbmdlIGZyb20gTE9XRVJfQk9VTkQgdG8gKExPV0VSX0JPVU5EICsgU0laRSAtMSkKLSAqLwotI2RlZmluZSBCU01fU1JBTV9MT1dFUl9CT1VORCAgICAgICAgIChQUlBIX0JBU0UgKyAweDM4MDApCi0jZGVmaW5lIEJTTV9TUkFNX1NJWkUJCQkoMTAyNCkgLyogYnl0ZXMgKi8KLQotCi0vKiAzOTQ1IFR4IHNjaGVkdWxlciByZWdpc3RlcnMgKi8KLSNkZWZpbmUgQUxNX1NDRF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgKFBSUEhfQkFTRSArIDB4MkUwMCkKLSNkZWZpbmUgQUxNX1NDRF9NT0RFX1JFRyAgICAgICAgICAgICAgICAgICAgKEFMTV9TQ0RfQkFTRSArIDB4MDAwKQotI2RlZmluZSBBTE1fU0NEX0FSQVNUQVRfUkVHICAgICAgICAgICAgICAgICAoQUxNX1NDRF9CQVNFICsgMHgwMDQpCi0jZGVmaW5lIEFMTV9TQ0RfVFhGQUNUX1JFRyAgICAgICAgICAgICAgICAgIChBTE1fU0NEX0JBU0UgKyAweDAxMCkKLSNkZWZpbmUgQUxNX1NDRF9UWEY0TUZfUkVHICAgICAgICAgICAgICAgICAgKEFMTV9TQ0RfQkFTRSArIDB4MDE0KQotI2RlZmluZSBBTE1fU0NEX1RYRjVNRl9SRUcgICAgICAgICAgICAgICAgICAoQUxNX1NDRF9CQVNFICsgMHgwMjApCi0jZGVmaW5lIEFMTV9TQ0RfU0JZUF9NT0RFXzFfUkVHICAgICAgICAgICAgIChBTE1fU0NEX0JBU0UgKyAweDAyQykKLSNkZWZpbmUgQUxNX1NDRF9TQllQX01PREVfMl9SRUcgICAgICAgICAgICAgKEFMTV9TQ0RfQkFTRSArIDB4MDMwKQotCi0vKioKICAqIFR4IFNjaGVkdWxlcgogICoKICAqIFRoZSBUeCBTY2hlZHVsZXIgc2VsZWN0cyB0aGUgbmV4dCBmcmFtZSB0byBiZSB0cmFuc21pdHRlZCwgY2hvb3NpbmcgVEZEcwpAQCAtMjU0LDE3ICsxMDcsNyBAQAogICogZGV2aWNlLiAgQSBxdWV1ZSBtYXBzIHRvIG9ubHkgb25lIChzZWxlY3RhYmxlIGJ5IGRyaXZlcikgVHggRE1BIGNoYW5uZWwsCiAgKiBidXQgb25lIERNQSBjaGFubmVsIG1heSB0YWtlIGlucHV0IGZyb20gc2V2ZXJhbCBxdWV1ZXMuCiAgKgotICogVHggRE1BIEZJRk9zIGhhdmUgZGVkaWNhdGVkIHB1cnBvc2VzLiAgRm9yIDQ5NjUsIHRoZXkgYXJlIHVzZWQgYXMgZm9sbG93cwotICogKGNmLiBkZWZhdWx0X3F1ZXVlX3RvX3R4X2ZpZm8gaW4gaXdsLTQ5NjUuYyk6Ci0gKgotICogMCAtLSBFRENBIEJLIChiYWNrZ3JvdW5kKSBmcmFtZXMsIGxvd2VzdCBwcmlvcml0eQotICogMSAtLSBFRENBIEJFIChiZXN0IGVmZm9ydCkgZnJhbWVzLCBub3JtYWwgcHJpb3JpdHkKLSAqIDIgLS0gRURDQSBWSSAodmlkZW8pIGZyYW1lcywgaGlnaGVyIHByaW9yaXR5Ci0gKiAzIC0tIEVEQ0EgVk8gKHZvaWNlKSBhbmQgbWFuYWdlbWVudCBmcmFtZXMsIGhpZ2hlc3QgcHJpb3JpdHkKLSAqIDQgLS0gQ29tbWFuZHMgKGUuZy4gUlhPTiwgZXRjLikKLSAqIDUgLS0gdW51c2VkIChIQ0NBKQotICogNiAtLSB1bnVzZWQgKEhDQ0EpCi0gKiA3IC0tIG5vdCB1c2VkIGJ5IGRyaXZlciAoZGV2aWNlLWludGVybmFsIG9ubHkpCisgKiBUeCBETUEgRklGT3MgaGF2ZSBkZWRpY2F0ZWQgcHVycG9zZXMuCiAgKgogICogRm9yIDUwMDAgc2VyaWVzIGFuZCB1cCwgdGhleSBhcmUgdXNlZCBkaWZmZXJlbnRseQogICogKGNmLiBpd2w1MDAwX2RlZmF1bHRfcXVldWVfdG9fdHhfZmlmbyBpbiBpd2wtNTAwMC5jKToKQEAgLTI5OCw3ICsxNDEsNyBAQAogICogICAgIFR4IGNvbXBsZXRpb24gbWF5IGVuZCB1cCBiZWluZyBvdXQtb2Ytb3JkZXIpLgogICoKICAqICAgICBUaGUgZHJpdmVyIG11c3QgbWFpbnRhaW4gdGhlIHF1ZXVlJ3MgQnl0ZSBDb3VudCB0YWJsZSBpbiBob3N0IERSQU0KLSAqICAgICAoc3RydWN0IGl3bDQ5NjVfc2NoZWRfcXVldWVfYnl0ZV9jbnRfdGJsKSBmb3IgdGhpcyBtb2RlLgorICogICAgIGZvciB0aGlzIG1vZGUuCiAgKiAgICAgVGhpcyBtb2RlIGRvZXMgbm90IHN1cHBvcnQgZnJhZ21lbnRhdGlvbi4KICAqCiAgKiAyKSAgRklGTyAoYS5rLmEuIG5vbi1TY2hlZHVsZXItQUNLKSwgaW4gd2hpY2ggZWFjaCBURkQgaXMgcHJvY2Vzc2VkIGluIG9yZGVyLgpAQCAtMzExLDcgKzE1NCw3IEBACiAgKgogICogRHJpdmVyIGNvbnRyb2xzIHNjaGVkdWxlciBvcGVyYXRpb24gdmlhIDMgbWVhbnM6CiAgKiAxKSAgU2NoZWR1bGVyIHJlZ2lzdGVycwotICogMikgIFNoYXJlZCBzY2hlZHVsZXIgZGF0YSBiYXNlIGluIGludGVybmFsIDQ5NTYgU1JBTQorICogMikgIFNoYXJlZCBzY2hlZHVsZXIgZGF0YSBiYXNlIGluIGludGVybmFsIFNSQU0KICAqIDMpICBTaGFyZWQgZGF0YSBpbiBob3N0IERSQU0KICAqCiAgKiBJbml0aWFsaXphdGlvbjoKQEAgLTMzMCwyMDEgKzE3MywxMCBAQAogICogTWF4IFR4IHdpbmRvdyBzaXplIGlzIHRoZSBtYXggbnVtYmVyIG9mIGNvbnRpZ3VvdXMgVEZEcyB0aGF0IHRoZSBzY2hlZHVsZXIKICAqIGNhbiBrZWVwIHRyYWNrIG9mIGF0IG9uZSB0aW1lIHdoZW4gY3JlYXRpbmcgYmxvY2stYWNrIGNoYWlucyBvZiBmcmFtZXMuCiAgKiBOb3RlIHRoYXQgIjY0IiBtYXRjaGVzIHRoZSBudW1iZXIgb2YgYWNrIGJpdHMgaW4gYSBibG9jay1hY2sgcGFja2V0LgotICogRHJpdmVyIHNob3VsZCB1c2UgU0NEX1dJTl9TSVpFIGFuZCBTQ0RfRlJBTUVfTElNSVQgdmFsdWVzIHRvIGluaXRpYWxpemUKLSAqIElXTDQ5X1NDRF9DT05URVhUX1FVRVVFX09GRlNFVCh4KSB2YWx1ZXMuCiAgKi8KICNkZWZpbmUgU0NEX1dJTl9TSVpFCQkJCTY0CiAjZGVmaW5lIFNDRF9GUkFNRV9MSU1JVAkJCQk2NAogCi0vKiBTQ0QgcmVnaXN0ZXJzIGFyZSBpbnRlcm5hbCwgbXVzdCBiZSBhY2Nlc3NlZCB2aWEgSEJVU19UQVJHX1BSUEggcmVncyAqLwotI2RlZmluZSBJV0w0OV9TQ0RfU1RBUlRfT0ZGU0VUCQkweGEwMmMwMAotCi0vKgotICogNDk2NSB0ZWxscyBkcml2ZXIgU1JBTSBhZGRyZXNzIGZvciBpbnRlcm5hbCBzY2hlZHVsZXIgc3RydWN0cyB2aWEgdGhpcyByZWcuCi0gKiBWYWx1ZSBpcyB2YWxpZCBvbmx5IGFmdGVyICJBbGl2ZSIgcmVzcG9uc2UgZnJvbSB1Q29kZS4KLSAqLwotI2RlZmluZSBJV0w0OV9TQ0RfU1JBTV9CQVNFX0FERFIgICAgICAgICAgIChJV0w0OV9TQ0RfU1RBUlRfT0ZGU0VUICsgMHgwKQotCi0vKgotICogRHJpdmVyIG1heSBuZWVkIHRvIHVwZGF0ZSBxdWV1ZS1lbXB0eSBiaXRzIGFmdGVyIGNoYW5naW5nIHF1ZXVlJ3MKLSAqIHdyaXRlIGFuZCByZWFkIHBvaW50ZXJzIChpbmRleGVzKSBkdXJpbmcgKHJlLSlpbml0aWFsaXphdGlvbiAoaS5lLiB3aGVuCi0gKiBzY2hlZHVsZXIgaXMgbm90IHRyYWNraW5nIHdoYXQncyBoYXBwZW5pbmcpLgotICogQml0IGZpZWxkczoKLSAqIDMxLTE2OiAgV3JpdGUgbWFzayAtLSAxOiB1cGRhdGUgZW1wdHkgYml0LCAwOiBkb24ndCBjaGFuZ2UgZW1wdHkgYml0Ci0gKiAxNS0wMDogIEVtcHR5IHN0YXRlLCBvbmUgZm9yIGVhY2ggcXVldWUgLS0gMTogZW1wdHksIDA6IG5vbi1lbXB0eQotICogTk9URTogIFRoaXMgcmVnaXN0ZXIgaXMgbm90IHVzZWQgYnkgTGludXggZHJpdmVyLgotICovCi0jZGVmaW5lIElXTDQ5X1NDRF9FTVBUWV9CSVRTICAgICAgICAgICAgICAgKElXTDQ5X1NDRF9TVEFSVF9PRkZTRVQgKyAweDQpCi0KLS8qCi0gKiBQaHlzaWNhbCBiYXNlIGFkZHJlc3Mgb2YgYXJyYXkgb2YgYnl0ZSBjb3VudCAoQkMpIGNpcmN1bGFyIGJ1ZmZlcnMgKENCcykuCi0gKiBFYWNoIFR4IHF1ZXVlIGhhcyBhIEJDIENCIGluIGhvc3QgRFJBTSB0byBzdXBwb3J0IFNjaGVkdWxlci1BQ0sgbW9kZS4KLSAqIFRoaXMgcmVnaXN0ZXIgcG9pbnRzIHRvIEJDIENCIGZvciBxdWV1ZSAwLCBtdXN0IGJlIG9uIDEwMjQtYnl0ZSBib3VuZGFyeS4KLSAqIE90aGVycyBhcmUgc3BhY2VkIGJ5IDEwMjQgYnl0ZXMuCi0gKiBFYWNoIEJDIENCIGlzIDIgYnl0ZXMgKiAoMjU2ICsgNjQpID0gNzQwIGJ5dGVzLCBmb2xsb3dlZCBieSAzODQgYnl0ZXMgcGFkLgotICogKEluZGV4IGludG8gYSBxdWV1ZSdzIEJDIENCKSA9IChpbmRleCBpbnRvIHF1ZXVlJ3MgVEZEIENCKSA9IChTU04gJiAweGZmKS4KLSAqIEJpdCBmaWVsZHM6Ci0gKiAyNS0wMDogIEJ5dGUgQ291bnQgQ0IgcGh5c2ljYWwgYWRkcmVzcyBbMzU6MTBdLCBtdXN0IGJlIDEwMjQtYnl0ZSBhbGlnbmVkLgotICovCi0jZGVmaW5lIElXTDQ5X1NDRF9EUkFNX0JBU0VfQUREUiAgICAgICAgICAgKElXTDQ5X1NDRF9TVEFSVF9PRkZTRVQgKyAweDEwKQotCi0vKgotICogRW5hYmxlcyBhbnkvYWxsIFR4IERNQS9GSUZPIGNoYW5uZWxzLgotICogU2NoZWR1bGVyIGdlbmVyYXRlcyByZXF1ZXN0cyBmb3Igb25seSB0aGUgYWN0aXZlIGNoYW5uZWxzLgotICogU2V0IHRoaXMgdG8gMHhmZiB0byBlbmFibGUgYWxsIDggY2hhbm5lbHMgKG5vcm1hbCB1c2FnZSkuCi0gKiBCaXQgZmllbGRzOgotICogIDctIDA6ICBFbmFibGUgKDEpLCBkaXNhYmxlICgwKSwgb25lIGJpdCBmb3IgZWFjaCBjaGFubmVsIDAtNwotICovCi0jZGVmaW5lIElXTDQ5X1NDRF9UWEZBQ1QgICAgICAgICAgICAgICAgICAgKElXTDQ5X1NDRF9TVEFSVF9PRkZTRVQgKyAweDFjKQotLyoKLSAqIFF1ZXVlICh4KSBXcml0ZSBQb2ludGVycyAoaW5kZXhlcywgcmVhbGx5ISksIG9uZSBmb3IgZWFjaCBUeCBxdWV1ZS4KLSAqIEluaXRpYWxpemVkIGFuZCB1cGRhdGVkIGJ5IGRyaXZlciBhcyBuZXcgVEZEcyBhcmUgYWRkZWQgdG8gcXVldWUuCi0gKiBOT1RFOiAgSWYgdXNpbmcgQmxvY2sgQWNrLCBpbmRleCBtdXN0IGNvcnJlc3BvbmQgdG8gZnJhbWUncwotICogICAgICAgIFN0YXJ0IFNlcXVlbmNlIE51bWJlcjsgaW5kZXggPSAoU1NOICYgMHhmZikKLSAqIE5PVEU6ICBBbHRlcm5hdGl2ZSB0byBIQlVTX1RBUkdfV1JQVFIsIHdoaWNoIGlzIHdoYXQgTGludXggZHJpdmVyIHVzZXM/Ci0gKi8KLSNkZWZpbmUgSVdMNDlfU0NEX1FVRVVFX1dSUFRSKHgpICAoSVdMNDlfU0NEX1NUQVJUX09GRlNFVCArIDB4MjQgKyAoeCkgKiA0KQotCi0vKgotICogUXVldWUgKHgpIFJlYWQgUG9pbnRlcnMgKGluZGV4ZXMsIHJlYWxseSEpLCBvbmUgZm9yIGVhY2ggVHggcXVldWUuCi0gKiBGb3IgRklGTyBtb2RlLCBpbmRleCBpbmRpY2F0ZXMgbmV4dCBmcmFtZSB0byB0cmFuc21pdC4KLSAqIEZvciBTY2hlZHVsZXItQUNLIG1vZGUsIGluZGV4IGluZGljYXRlcyBmaXJzdCBmcmFtZSBpbiBUeCB3aW5kb3cuCi0gKiBJbml0aWFsaXplZCBieSBkcml2ZXIsIHVwZGF0ZWQgYnkgc2NoZWR1bGVyLgotICovCi0jZGVmaW5lIElXTDQ5X1NDRF9RVUVVRV9SRFBUUih4KSAgKElXTDQ5X1NDRF9TVEFSVF9PRkZTRVQgKyAweDY0ICsgKHgpICogNCkKLQotLyoKLSAqIFNlbGVjdCB3aGljaCBxdWV1ZXMgd29yayBpbiBjaGFpbiBtb2RlICgxKSB2cy4gbm90ICgwKS4KLSAqIFVzZSBjaGFpbiBtb2RlIHRvIGJ1aWxkIGNoYWlucyBvZiBhZ2dyZWdhdGVkIGZyYW1lcy4KLSAqIEJpdCBmaWVsZHM6Ci0gKiAzMS0xNjogIFJlc2VydmVkCi0gKiAxNS0wMDogIE1vZGUsIG9uZSBiaXQgZm9yIGVhY2ggcXVldWUgLS0gMTogQ2hhaW4gbW9kZSwgMDogb25lLWF0LWEtdGltZQotICogTk9URTogIElmIGRyaXZlciBzZXRzIHVwIHF1ZXVlIGZvciBjaGFpbiBtb2RlLCBpdCBzaG91bGQgYmUgYWxzbyBzZXQgdXAKLSAqICAgICAgICBTY2hlZHVsZXItQUNLIG1vZGUgYXMgd2VsbCwgdmlhIFNDRF9RVUVVRV9TVEFUVVNfQklUUyh4KS4KLSAqLwotI2RlZmluZSBJV0w0OV9TQ0RfUVVFVUVDSEFJTl9TRUwgIChJV0w0OV9TQ0RfU1RBUlRfT0ZGU0VUICsgMHhkMCkKLQotLyoKLSAqIFNlbGVjdCB3aGljaCBxdWV1ZXMgaW50ZXJydXB0IGRyaXZlciB3aGVuIHNjaGVkdWxlciBpbmNyZW1lbnRzCi0gKiBhIHF1ZXVlJ3MgcmVhZCBwb2ludGVyIChpbmRleCkuCi0gKiBCaXQgZmllbGRzOgotICogMzEtMTY6ICBSZXNlcnZlZAotICogMTUtMDA6ICBJbnRlcnJ1cHQgZW5hYmxlLCBvbmUgYml0IGZvciBlYWNoIHF1ZXVlIC0tIDE6IGVuYWJsZWQsIDA6IGRpc2FibGVkCi0gKiBOT1RFOiAgVGhpcyBmdW5jdGlvbmFsaXR5IGlzIGFwcGFyZW50bHkgYSBuby1vcDsgZHJpdmVyIHJlbGllcyBvbiBpbnRlcnJ1cHRzCi0gKiAgICAgICAgZnJvbSBSeCBxdWV1ZSB0byByZWFkIFR4IGNvbW1hbmQgcmVzcG9uc2VzIGFuZCB1cGRhdGUgVHggcXVldWVzLgotICovCi0jZGVmaW5lIElXTDQ5X1NDRF9JTlRFUlJVUFRfTUFTSyAgKElXTDQ5X1NDRF9TVEFSVF9PRkZTRVQgKyAweGU0KQotCi0vKgotICogUXVldWUgc2VhcmNoIHN0YXR1cyByZWdpc3RlcnMuICBPbmUgZm9yIGVhY2ggcXVldWUuCi0gKiBTZXRzIHVwIHF1ZXVlIG1vZGUgYW5kIGFzc2lnbnMgcXVldWUgdG8gVHggRE1BIGNoYW5uZWwuCi0gKiBCaXQgZmllbGRzOgotICogMTktMTA6IFdyaXRlIG1hc2svZW5hYmxlIGJpdHMgZm9yIGJpdHMgMC05Ci0gKiAgICAgOTogRHJpdmVyIHNob3VsZCBpbml0IHRvICIwIgotICogICAgIDg6IFNjaGVkdWxlci1BQ0sgbW9kZSAoMSksIG5vbi1TY2hlZHVsZXItQUNLIChpLmUuIEZJRk8pIG1vZGUgKDApLgotICogICAgICAgIERyaXZlciBzaG91bGQgaW5pdCB0byAiMSIgZm9yIGFnZ3JlZ2F0aW9uIG1vZGUsIG9yICIwIiBvdGhlcndpc2UuCi0gKiAgIDctNjogRHJpdmVyIHNob3VsZCBpbml0IHRvICIwIgotICogICAgIDU6IFdpbmRvdyBTaXplIExlZnQ7IGluZGljYXRlcyB3aGV0aGVyIHNjaGVkdWxlciBjYW4gcmVxdWVzdAotICogICAgICAgIGFub3RoZXIgVEZELCBiYXNlZCBvbiB3aW5kb3cgc2l6ZSwgZXRjLiAgRHJpdmVyIHNob3VsZCBpbml0Ci0gKiAgICAgICAgdGhpcyBiaXQgdG8gIjEiIGZvciBhZ2dyZWdhdGlvbiBtb2RlLCBvciAiMCIgZm9yIG5vbi1hZ2cuCi0gKiAgIDQtMTogVHggRklGTyB0byB1c2UgKHJhbmdlIDAtNykuCi0gKiAgICAgMDogUXVldWUgaXMgYWN0aXZlICgxKSwgbm90IGFjdGl2ZSAoMCkuCi0gKiBPdGhlciBiaXRzIHNob3VsZCBiZSB3cml0dGVuIGFzICIwIgotICoKLSAqIE5PVEU6ICBJZiBlbmFibGluZyBTY2hlZHVsZXItQUNLIG1vZGUsIGNoYWluIG1vZGUgc2hvdWxkIGFsc28gYmUgZW5hYmxlZAotICogICAgICAgIHZpYSBTQ0RfUVVFVUVDSEFJTl9TRUwuCi0gKi8KLSNkZWZpbmUgSVdMNDlfU0NEX1FVRVVFX1NUQVRVU19CSVRTKHgpXAotCShJV0w0OV9TQ0RfU1RBUlRfT0ZGU0VUICsgMHgxMDQgKyAoeCkgKiA0KQotCi0vKiBCaXQgZmllbGQgcG9zaXRpb25zICovCi0jZGVmaW5lIElXTDQ5X1NDRF9RVUVVRV9TVFRTX1JFR19QT1NfQUNUSVZFCSgwKQotI2RlZmluZSBJV0w0OV9TQ0RfUVVFVUVfU1RUU19SRUdfUE9TX1RYRgkoMSkKLSNkZWZpbmUgSVdMNDlfU0NEX1FVRVVFX1NUVFNfUkVHX1BPU19XU0wJKDUpCi0jZGVmaW5lIElXTDQ5X1NDRF9RVUVVRV9TVFRTX1JFR19QT1NfU0NEX0FDSwkoOCkKLQotLyogV3JpdGUgbWFza3MgKi8KLSNkZWZpbmUgSVdMNDlfU0NEX1FVRVVFX1NUVFNfUkVHX1BPU19TQ0RfQUNUX0VOCSgxMCkKLSNkZWZpbmUgSVdMNDlfU0NEX1FVRVVFX1NUVFNfUkVHX01TSwkJKDB4MDAwN0ZDMDApCi0KLS8qKgotICogNDk2NSBpbnRlcm5hbCBTUkFNIHN0cnVjdHVyZXMgZm9yIHNjaGVkdWxlciwgc2hhcmVkIHdpdGggZHJpdmVyIC4uLgotICoKLSAqIERyaXZlciBzaG91bGQgY2xlYXIgYW5kIGluaXRpYWxpemUgdGhlIGZvbGxvd2luZyBhcmVhcyBhZnRlciByZWNlaXZpbmcKLSAqICJBbGl2ZSIgcmVzcG9uc2UgZnJvbSA0OTY1IHVDb2RlLCBpLmUuIGFmdGVyIGluaXRpYWwKLSAqIHVDb2RlIGxvYWQsIG9yIGFmdGVyIGEgdUNvZGUgbG9hZCBkb25lIGZvciBlcnJvciByZWNvdmVyeToKLSAqCi0gKiBTQ0RfQ09OVEVYVF9EQVRBX09GRlNFVCAoc2l6ZSAxMjggYnl0ZXMpCi0gKiBTQ0RfVFhfU1RUU19CSVRNQVBfT0ZGU0VUIChzaXplIDI1NiBieXRlcykKLSAqIFNDRF9UUkFOU0xBVEVfVEJMX09GRlNFVCAoc2l6ZSAzMiBieXRlcykKLSAqCi0gKiBEcml2ZXIgYWNjZXNzZXMgU1JBTSB2aWEgSEJVU19UQVJHX01FTV8qIHJlZ2lzdGVycy4KLSAqIERyaXZlciByZWFkcyBiYXNlIGFkZHJlc3Mgb2YgdGhpcyBzY2hlZHVsZXIgYXJlYSBmcm9tIFNDRF9TUkFNX0JBU0VfQUREUi4KLSAqIEFsbCBPRkZTRVQgdmFsdWVzIG11c3QgYmUgYWRkZWQgdG8gdGhpcyBiYXNlIGFkZHJlc3MuCi0gKi8KLQotLyoKLSAqIFF1ZXVlIGNvbnRleHQuICBPbmUgOC1ieXRlIGVudHJ5IGZvciBlYWNoIG9mIDE2IHF1ZXVlcy4KLSAqCi0gKiBEcml2ZXIgc2hvdWxkIGNsZWFyIHRoaXMgZW50aXJlIGFyZWEgKHNpemUgMHg4MCkgdG8gMCBhZnRlciByZWNlaXZpbmcKLSAqICJBbGl2ZSIgbm90aWZpY2F0aW9uIGZyb20gdUNvZGUuICBBZGRpdGlvbmFsbHksIGRyaXZlciBzaG91bGQgaW5pdAotICogZWFjaCBxdWV1ZSdzIGVudHJ5IGFzIGZvbGxvd3M6Ci0gKgotICogTFMgRHdvcmQgYml0IGZpZWxkczoKLSAqICAwLTA2OiAgTWF4IFR4IHdpbmRvdyBzaXplIGZvciBTY2hlZHVsZXItQUNLLiAgRHJpdmVyIHNob3VsZCBpbml0IHRvIDY0LgotICoKLSAqIE1TIER3b3JkIGJpdCBmaWVsZHM6Ci0gKiAxNi0yMjogIEZyYW1lIGxpbWl0LiAgRHJpdmVyIHNob3VsZCBpbml0IHRvIDEwICgweGEpLgotICoKLSAqIERyaXZlciBzaG91bGQgaW5pdCBhbGwgb3RoZXIgYml0cyB0byAwLgotICoKLSAqIEluaXQgbXVzdCBiZSBkb25lIGFmdGVyIGRyaXZlciByZWNlaXZlcyAiQWxpdmUiIHJlc3BvbnNlIGZyb20gNDk2NSB1Q29kZSwKLSAqIGFuZCB3aGVuIHNldHRpbmcgdXAgcXVldWUgZm9yIGFnZ3JlZ2F0aW9uLgotICovCi0jZGVmaW5lIElXTDQ5X1NDRF9DT05URVhUX0RBVEFfT0ZGU0VUCQkJMHgzODAKLSNkZWZpbmUgSVdMNDlfU0NEX0NPTlRFWFRfUVVFVUVfT0ZGU0VUKHgpIFwKLQkJCShJV0w0OV9TQ0RfQ09OVEVYVF9EQVRBX09GRlNFVCArICgoeCkgKiA4KSkKLQotI2RlZmluZSBJV0w0OV9TQ0RfUVVFVUVfQ1RYX1JFRzFfV0lOX1NJWkVfUE9TCQkoMCkKLSNkZWZpbmUgSVdMNDlfU0NEX1FVRVVFX0NUWF9SRUcxX1dJTl9TSVpFX01TSwkJKDB4MDAwMDAwN0YpCi0jZGVmaW5lIElXTDQ5X1NDRF9RVUVVRV9DVFhfUkVHMl9GUkFNRV9MSU1JVF9QT1MJKDE2KQotI2RlZmluZSBJV0w0OV9TQ0RfUVVFVUVfQ1RYX1JFRzJfRlJBTUVfTElNSVRfTVNLCSgweDAwN0YwMDAwKQotCi0vKgotICogVHggU3RhdHVzIEJpdG1hcAotICoKLSAqIERyaXZlciBzaG91bGQgY2xlYXIgdGhpcyBlbnRpcmUgYXJlYSAoc2l6ZSAweDEwMCkgdG8gMCBhZnRlciByZWNlaXZpbmcKLSAqICJBbGl2ZSIgbm90aWZpY2F0aW9uIGZyb20gdUNvZGUuICBBcmVhIGlzIHVzZWQgb25seSBieSBkZXZpY2UgaXRzZWxmOwotICogbm8gb3RoZXIgc3VwcG9ydCAoYmVzaWRlcyBjbGVhcmluZykgaXMgcmVxdWlyZWQgZnJvbSBkcml2ZXIuCi0gKi8KLSNkZWZpbmUgSVdMNDlfU0NEX1RYX1NUVFNfQklUTUFQX09GRlNFVAkJMHg0MDAKLQotLyoKLSAqIFJBeFRJRCB0byBxdWV1ZSB0cmFuc2xhdGlvbiBtYXBwaW5nLgotICoKLSAqIFdoZW4gcXVldWUgaXMgaW4gU2NoZWR1bGVyLUFDSyBtb2RlLCBmcmFtZXMgcGxhY2VkIGluIGEgdGhhdCBxdWV1ZSBtdXN0IGJlCi0gKiBmb3Igb25seSBvbmUgY29tYmluYXRpb24gb2YgcmVjZWl2ZXIgYWRkcmVzcyAoUkEpIGFuZCB0cmFmZmljIElEIChUSUQpLCBpLmUuCi0gKiBvbmUgUU9TIHByaW9yaXR5IGxldmVsIGRlc3RpbmVkIGZvciBvbmUgc3RhdGlvbiAoZm9yIHRoaXMgd2lyZWxlc3MgbGluaywKLSAqIG5vdCBmaW5hbCBkZXN0aW5hdGlvbikuICBUaGUgU0NEX1RSQU5TTEFURV9UQUJMRSBhcmVhIHByb3ZpZGVzIDE2IDE2LWJpdAotICogbWFwcGluZ3MsIG9uZSBmb3IgZWFjaCBvZiB0aGUgMTYgcXVldWVzLiAgSWYgcXVldWUgaXMgbm90IGluIFNjaGVkdWxlci1BQ0sKLSAqIG1vZGUsIHRoZSBkZXZpY2UgaWdub3JlcyB0aGUgbWFwcGluZyB2YWx1ZS4KLSAqCi0gKiBCaXQgZmllbGRzLCBmb3IgZWFjaCAxNi1iaXQgbWFwOgotICogMTUtOTogIFJlc2VydmVkLCBzZXQgdG8gMAotICogIDgtNDogIEluZGV4IGludG8gZGV2aWNlJ3Mgc3RhdGlvbiB0YWJsZSBmb3IgcmVjaXBpZW50IHN0YXRpb24KLSAqICAzLTA6ICBUcmFmZmljIElEICh0aWQpLCByYW5nZSAwLTE1Ci0gKgotICogRHJpdmVyIHNob3VsZCBjbGVhciB0aGlzIGVudGlyZSBhcmVhIChzaXplIDMyIGJ5dGVzKSB0byAwIGFmdGVyIHJlY2VpdmluZwotICogIkFsaXZlIiBub3RpZmljYXRpb24gZnJvbSB1Q29kZS4gIFRvIHVwZGF0ZSBhIDE2LWJpdCBtYXAgdmFsdWUsIGRyaXZlcgotICogbXVzdCByZWFkIGEgZHdvcmQtYWxpZ25lZCB2YWx1ZSBmcm9tIGRldmljZSBTUkFNLCByZXBsYWNlIHRoZSAxNi1iaXQgbWFwCi0gKiB2YWx1ZSBvZiBpbnRlcmVzdCwgYW5kIHdyaXRlIHRoZSBkd29yZCB2YWx1ZSBiYWNrIGludG8gZGV2aWNlIFNSQU0uCi0gKi8KLSNkZWZpbmUgSVdMNDlfU0NEX1RSQU5TTEFURV9UQkxfT0ZGU0VUCQkweDUwMAotCi0vKiBGaW5kIHRyYW5zbGF0aW9uIHRhYmxlIGR3b3JkIHRvIHJlYWQvd3JpdGUgZm9yIGdpdmVuIHF1ZXVlICovCi0jZGVmaW5lIElXTDQ5X1NDRF9UUkFOU0xBVEVfVEJMX09GRlNFVF9RVUVVRSh4KSBcCi0JKChJV0w0OV9TQ0RfVFJBTlNMQVRFX1RCTF9PRkZTRVQgKyAoKHgpICogMikpICYgMHhmZmZmZmZmYykKLQogI2RlZmluZSBJV0xfU0NEX1RYRklGT19QT1NfVElECQkJKDApCiAjZGVmaW5lIElXTF9TQ0RfVFhGSUZPX1BPU19SQQkJCSg0KQogI2RlZmluZSBJV0xfU0NEX1FVRVVFX1JBX1RJRF9NQVBfUkFUSURfTVNLCSgweDAxRkYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYwppbmRleCA2ZjlhMmZhLi4wMDUzZTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJ4LmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTIyNSw1NSArMjI1LDYgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBpd2xfcnhfcmVwbHlfYWxpdmUoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJICAgICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSByeGJfYWRkcihyeGIpOwotCXN0cnVjdCBpd2xfYWxpdmVfcmVzcCAqcGFsaXZlOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgKnB3b3JrOwotCi0JcGFsaXZlID0gJnBrdC0+dS5hbGl2ZV9mcmFtZTsKLQotCUlXTF9ERUJVR19JTkZPKHByaXYsICJBbGl2ZSB1Y29kZSBzdGF0dXMgMHglMDhYIHJldmlzaW9uICIKLQkJICAgICAgICIweCUwMVggMHglMDFYXG4iLAotCQkgICAgICAgcGFsaXZlLT5pc192YWxpZCwgcGFsaXZlLT52ZXJfdHlwZSwKLQkJICAgICAgIHBhbGl2ZS0+dmVyX3N1YnR5cGUpOwotCi0JaWYgKHBhbGl2ZS0+dmVyX3N1YnR5cGUgPT0gSU5JVElBTElaRV9TVUJUWVBFKSB7Ci0JCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbml0aWFsaXphdGlvbiBBbGl2ZSByZWNlaXZlZC5cbiIpOwotCQltZW1jcHkoJnByaXYtPmNhcmRfYWxpdmVfaW5pdCwKLQkJICAgICAgICZwa3QtPnUuYWxpdmVfZnJhbWUsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9pbml0X2FsaXZlX3Jlc3ApKTsKLQkJcHdvcmsgPSAmcHJpdi0+aW5pdF9hbGl2ZV9zdGFydDsKLQl9IGVsc2UgewotCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUnVudGltZSBBbGl2ZSByZWNlaXZlZC5cbiIpOwotCQltZW1jcHkoJnByaXYtPmNhcmRfYWxpdmUsICZwa3QtPnUuYWxpdmVfZnJhbWUsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9hbGl2ZV9yZXNwKSk7Ci0JCXB3b3JrID0gJnByaXYtPmFsaXZlX3N0YXJ0OwotCX0KLQotCS8qIFdlIGRlbGF5IHRoZSBBTElWRSByZXNwb25zZSBieSA1bXMgdG8KLQkgKiBnaXZlIHRoZSBIVyBSRiBLaWxsIHRpbWUgdG8gYWN0aXZhdGUuLi4gKi8KLQlpZiAocGFsaXZlLT5pc192YWxpZCA9PSBVQ09ERV9WQUxJRF9PSykKLQkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwgcHdvcmssCi0JCQkJICAgbXNlY3NfdG9famlmZmllcyg1KSk7Ci0JZWxzZSB7Ci0JCUlXTF9XQVJOKHByaXYsICIlcyB1Q29kZSBkaWQgbm90IHJlc3BvbmQgT0suXG4iLAotCQkJKHBhbGl2ZS0+dmVyX3N1YnR5cGUgPT0gSU5JVElBTElaRV9TVUJUWVBFKSA/Ci0JCQkiaW5pdCIgOiAicnVudGltZSIpOwotCQkvKgotCQkgKiBJZiBmYWlsIHRvIGxvYWQgaW5pdCB1Q29kZSwKLQkJICogbGV0J3MgdHJ5IHRvIGxvYWQgdGhlIGluaXQgdUNvZGUgYWdhaW4uCi0JCSAqIFdlIHNob3VsZCBub3QgZ2V0IGludG8gdGhpcyBzaXR1YXRpb24sIGJ1dCBpZiBpdAotCQkgKiBkb2VzIGhhcHBlbiwgd2Ugc2hvdWxkIG5vdCBtb3ZlIG9uIGFuZCBsb2FkaW5nICJydW50aW1lIgotCQkgKiB3aXRob3V0IHByb3BlciBjYWxpYnJhdGUgdGhlIGRldmljZS4KLQkJICovCi0JCWlmIChwYWxpdmUtPnZlcl9zdWJ0eXBlID09IElOSVRJQUxJWkVfU1VCVFlQRSkKLQkJCXByaXYtPnVjb2RlX3R5cGUgPSBVQ09ERV9OT05FOwotCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJlc3RhcnQpOwotCX0KLX0KLQogc3RhdGljIHZvaWQgaXdsX3J4X3JlcGx5X2Vycm9yKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKIHsKQEAgLTM5MCwyMSArMzQxLDE2IEBACiAgKiB0aGUgQkFfVElNRU9VVF9NQVgsIHJlbG9hZCBmaXJtd2FyZSBhbmQgYnJpbmcgc3lzdGVtIGJhY2sgdG8gbm9ybWFsCiAgKiBvcGVyYXRpb24gc3RhdGUuCiAgKi8KLXN0YXRpYyBib29sIGl3bF9nb29kX2Fja19oZWFsdGgoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0KQorc3RhdGljIGJvb2wgaXdsX2dvb2RfYWNrX2hlYWx0aChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IHN0YXRpc3RpY3NfdHggKmN1cikKIHsKIAlpbnQgYWN0dWFsX2RlbHRhLCBleHBlY3RlZF9kZWx0YSwgYmFfdGltZW91dF9kZWx0YTsKLQlzdHJ1Y3Qgc3RhdGlzdGljc190eCAqY3VyLCAqb2xkOworCXN0cnVjdCBzdGF0aXN0aWNzX3R4ICpvbGQ7CiAKIAlpZiAocHJpdi0+X2Fnbi5hZ2dfdGlkc19jb3VudCkKIAkJcmV0dXJuIHRydWU7CiAKLQlpZiAoaXdsX2J0X3N0YXRpc3RpY3MocHJpdikpIHsKLQkJY3VyID0gJnBrdC0+dS5zdGF0c19idC50eDsKLQkJb2xkID0gJnByaXYtPl9hZ24uc3RhdGlzdGljc19idC50eDsKLQl9IGVsc2UgewotCQljdXIgPSAmcGt0LT51LnN0YXRzLnR4OwotCQlvbGQgPSAmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzLnR4OwotCX0KKwlvbGQgPSAmcHJpdi0+c3RhdGlzdGljcy50eDsKIAogCWFjdHVhbF9kZWx0YSA9IGxlMzJfdG9fY3B1KGN1ci0+YWN0dWFsX2Fja19jbnQpIC0KIAkJICAgICAgIGxlMzJfdG9fY3B1KG9sZC0+YWN0dWFsX2Fja19jbnQpOwpAQCAtNDMwLDEwICszNzYsMTAgQEAKIAkJICogREVCVUcgaXMgbm90LCB0aGVzZSB3aWxsIGp1c3QgY29tcGlsZSBvdXQuCiAJCSAqLwogCQlJV0xfREVCVUdfUkFESU8ocHJpdiwgInJ4X2RldGVjdGVkX2NudCBkZWx0YSAlZFxuIiwKLQkJCQlwcml2LT5fYWduLmRlbHRhX3N0YXRpc3RpY3MudHgucnhfZGV0ZWN0ZWRfY250KTsKKwkJCQlwcml2LT5kZWx0YV9zdGF0cy50eC5yeF9kZXRlY3RlZF9jbnQpOwogCQlJV0xfREVCVUdfUkFESU8ocHJpdiwKIAkJCQkiYWNrX29yX2JhX3RpbWVvdXRfY29sbGlzaW9uIGRlbHRhICVkXG4iLAotCQkJCXByaXYtPl9hZ24uZGVsdGFfc3RhdGlzdGljcy50eC5hY2tfb3JfYmFfdGltZW91dF9jb2xsaXNpb24pOworCQkJCXByaXYtPmRlbHRhX3N0YXRzLnR4LmFja19vcl9iYV90aW1lb3V0X2NvbGxpc2lvbik7CiAjZW5kaWYKIAogCQlpZiAoYmFfdGltZW91dF9kZWx0YSA+PSBCQV9USU1FT1VUX01BWCkKQEAgLTQ1MCw3ICszOTYsOSBAQAogICogdG8gaW1wcm92ZSB0aGUgdGhyb3VnaHB1dC4KICAqLwogc3RhdGljIGJvb2wgaXdsX2dvb2RfcGxjcF9oZWFsdGgoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSBzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0LCB1bnNpZ25lZCBpbnQgbXNlY3MpCisJCQkJIHN0cnVjdCBzdGF0aXN0aWNzX3J4X3BoeSAqY3VyX29mZG0sCisJCQkJIHN0cnVjdCBzdGF0aXN0aWNzX3J4X2h0X3BoeSAqY3VyX29mZG1faHQsCisJCQkJIHVuc2lnbmVkIGludCBtc2VjcykKIHsKIAlpbnQgZGVsdGE7CiAJaW50IHRocmVzaG9sZCA9IHByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPnBsY3BfZGVsdGFfdGhyZXNob2xkOwpAQCAtNDYwLDI5ICs0MDgsMTIgQEAKIAkJcmV0dXJuIHRydWU7CiAJfQogCi0JaWYgKGl3bF9idF9zdGF0aXN0aWNzKHByaXYpKSB7Ci0JCXN0cnVjdCBzdGF0aXN0aWNzX3J4X2J0ICpjdXIsICpvbGQ7CisJZGVsdGEgPSBsZTMyX3RvX2NwdShjdXJfb2ZkbS0+cGxjcF9lcnIpIC0KKwkJbGUzMl90b19jcHUocHJpdi0+c3RhdGlzdGljcy5yeF9vZmRtLnBsY3BfZXJyKSArCisJCWxlMzJfdG9fY3B1KGN1cl9vZmRtX2h0LT5wbGNwX2VycikgLQorCQlsZTMyX3RvX2NwdShwcml2LT5zdGF0aXN0aWNzLnJ4X29mZG1faHQucGxjcF9lcnIpOwogCi0JCWN1ciA9ICZwa3QtPnUuc3RhdHNfYnQucng7Ci0JCW9sZCA9ICZwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQucng7Ci0KLQkJZGVsdGEgPSBsZTMyX3RvX2NwdShjdXItPm9mZG0ucGxjcF9lcnIpIC0KLQkJCWxlMzJfdG9fY3B1KG9sZC0+b2ZkbS5wbGNwX2VycikgKwotCQkJbGUzMl90b19jcHUoY3VyLT5vZmRtX2h0LnBsY3BfZXJyKSAtCi0JCQlsZTMyX3RvX2NwdShvbGQtPm9mZG1faHQucGxjcF9lcnIpOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCBzdGF0aXN0aWNzX3J4ICpjdXIsICpvbGQ7Ci0KLQkJY3VyID0gJnBrdC0+dS5zdGF0cy5yeDsKLQkJb2xkID0gJnByaXYtPl9hZ24uc3RhdGlzdGljcy5yeDsKLQotCQlkZWx0YSA9IGxlMzJfdG9fY3B1KGN1ci0+b2ZkbS5wbGNwX2VycikgLQotCQkJbGUzMl90b19jcHUob2xkLT5vZmRtLnBsY3BfZXJyKSArCi0JCQlsZTMyX3RvX2NwdShjdXItPm9mZG1faHQucGxjcF9lcnIpIC0KLQkJCWxlMzJfdG9fY3B1KG9sZC0+b2ZkbV9odC5wbGNwX2Vycik7Ci0JfQotCi0JLyogQ2FuIGJlIG5lZ2F0aXZlIGlmIGZpcm13YXJlIHJlc2V0ZWQgc3RhdGlzdGljcyAqLworCS8qIENhbiBiZSBuZWdhdGl2ZSBpZiBmaXJtd2FyZSByZXNldCBzdGF0aXN0aWNzICovCiAJaWYgKGRlbHRhIDw9IDApCiAJCXJldHVybiB0cnVlOwogCkBAIC00OTcsNDQgKzQyOCwzNSBAQAogfQogCiBzdGF0aWMgdm9pZCBpd2xfcmVjb3Zlcl9mcm9tX3N0YXRpc3RpY3Moc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCQlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0KQorCQkJCQlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkgKmN1cl9vZmRtLAorCQkJCQlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9odF9waHkgKmN1cl9vZmRtX2h0LAorCQkJCQlzdHJ1Y3Qgc3RhdGlzdGljc190eCAqdHgsCisJCQkJCXVuc2lnbmVkIGxvbmcgc3RhbXApCiB7Ci0JY29uc3Qgc3RydWN0IGl3bF9tb2RfcGFyYW1zICptb2RfcGFyYW1zID0gcHJpdi0+Y2ZnLT5tb2RfcGFyYW1zOwogCXVuc2lnbmVkIGludCBtc2VjczsKLQl1bnNpZ25lZCBsb25nIHN0YW1wOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm47CiAKLQlzdGFtcCA9IGppZmZpZXM7CiAJbXNlY3MgPSBqaWZmaWVzX3RvX21zZWNzKHN0YW1wIC0gcHJpdi0+cnhfc3RhdGlzdGljc19qaWZmaWVzKTsKIAogCS8qIE9ubHkgZ2F0aGVyIHN0YXRpc3RpY3MgYW5kIHVwZGF0ZSB0aW1lIHN0YW1wIHdoZW4gbm90IGFzc29jaWF0ZWQgKi8KIAlpZiAoIWl3bF9pc19hbnlfYXNzb2NpYXRlZChwcml2KSkKLQkJZ290byBvdXQ7CisJCXJldHVybjsKIAogCS8qIERvIG5vdCBjaGVjay9yZWNvdmVyIHdoZW4gZG8gbm90IGhhdmUgZW5vdWdoIHN0YXRpc3RpY3MgZGF0YSAqLwogCWlmIChtc2VjcyA8IDk5KQogCQlyZXR1cm47CiAKLQlpZiAobW9kX3BhcmFtcy0+YWNrX2NoZWNrICYmICFpd2xfZ29vZF9hY2tfaGVhbHRoKHByaXYsIHBrdCkpIHsKKwlpZiAoaXdsYWduX21vZF9wYXJhbXMuYWNrX2NoZWNrICYmICFpd2xfZ29vZF9hY2tfaGVhbHRoKHByaXYsIHR4KSkgewogCQlJV0xfRVJSKHByaXYsICJsb3cgYWNrIGNvdW50IGRldGVjdGVkLCByZXN0YXJ0IGZpcm13YXJlXG4iKTsKIAkJaWYgKCFpd2xfZm9yY2VfcmVzZXQocHJpdiwgSVdMX0ZXX1JFU0VULCBmYWxzZSkpCiAJCQlyZXR1cm47CiAJfQogCi0JaWYgKG1vZF9wYXJhbXMtPnBsY3BfY2hlY2sgJiYgIWl3bF9nb29kX3BsY3BfaGVhbHRoKHByaXYsIHBrdCwgbXNlY3MpKQorCWlmIChpd2xhZ25fbW9kX3BhcmFtcy5wbGNwX2NoZWNrICYmCisJICAgICFpd2xfZ29vZF9wbGNwX2hlYWx0aChwcml2LCBjdXJfb2ZkbSwgY3VyX29mZG1faHQsIG1zZWNzKSkKIAkJaXdsX2ZvcmNlX3Jlc2V0KHByaXYsIElXTF9SRl9SRVNFVCwgZmFsc2UpOwotCi1vdXQ6Ci0JaWYgKGl3bF9idF9zdGF0aXN0aWNzKHByaXYpKQotCQltZW1jcHkoJnByaXYtPl9hZ24uc3RhdGlzdGljc19idCwgJnBrdC0+dS5zdGF0c19idCwKLQkJCXNpemVvZihwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQpKTsKLQllbHNlCi0JCW1lbWNweSgmcHJpdi0+X2Fnbi5zdGF0aXN0aWNzLCAmcGt0LT51LnN0YXRzLAotCQkJc2l6ZW9mKHByaXYtPl9hZ24uc3RhdGlzdGljcykpOwotCi0JcHJpdi0+cnhfc3RhdGlzdGljc19qaWZmaWVzID0gc3RhbXA7CiB9CiAKIC8qIENhbGN1bGF0ZSBub2lzZSBsZXZlbCwgYmFzZWQgb24gbWVhc3VyZW1lbnRzIGR1cmluZyBuZXR3b3JrIHNpbGVuY2UganVzdApAQCAtNTQ4LDEwICs0NzAsOCBAQAogCWludCBiY25fc2lsZW5jZV9hLCBiY25fc2lsZW5jZV9iLCBiY25fc2lsZW5jZV9jOwogCWludCBsYXN0X3J4X25vaXNlOwogCi0JaWYgKGl3bF9idF9zdGF0aXN0aWNzKHByaXYpKQotCQlyeF9pbmZvID0gJihwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQucnguZ2VuZXJhbC5jb21tb24pOwotCWVsc2UKLQkJcnhfaW5mbyA9ICYocHJpdi0+X2Fnbi5zdGF0aXN0aWNzLnJ4LmdlbmVyYWwpOworCXJ4X2luZm8gPSAmcHJpdi0+c3RhdGlzdGljcy5yeF9ub25fcGh5OworCiAJYmNuX3NpbGVuY2VfYSA9CiAJCWxlMzJfdG9fY3B1KHJ4X2luZm8tPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYSkgJiBJTl9CQU5EX0ZJTFRFUjsKIAliY25fc2lsZW5jZV9iID0KQEAgLTU4MywxMDUgKzUwMywxNTMgQEAKIAkJCWxhc3Rfcnhfbm9pc2UpOwogfQogCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUdGUwogLyoKICAqICBiYXNlZCBvbiB0aGUgYXNzdW1wdGlvbiBvZiBhbGwgc3RhdGlzdGljcyBjb3VudGVyIGFyZSBpbiBEV09SRAogICogIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGlzIGZvciBkZWJ1Z2dpbmcsIGRvIG5vdCBkZWFsIHdpdGgKICAqICB0aGUgY2FzZSBvZiBjb3VudGVycyByb2xsLW92ZXIuCiAgKi8KLXN0YXRpYyB2b2lkIGl3bF9hY2N1bXVsYXRpdmVfc3RhdGlzdGljcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCV9fbGUzMiAqc3RhdHMpCitzdGF0aWMgdm9pZCBhY2N1bV9zdGF0cyhfX2xlMzIgKnByZXYsIF9fbGUzMiAqY3VyLCBfX2xlMzIgKmRlbHRhLAorCQkJX19sZTMyICptYXhfZGVsdGEsIF9fbGUzMiAqYWNjdW0sIGludCBzaXplKQogewotI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHRlMKLQlpbnQgaSwgc2l6ZTsKLQlfX2xlMzIgKnByZXZfc3RhdHM7Ci0JdTMyICphY2N1bV9zdGF0czsKLQl1MzIgKmRlbHRhLCAqbWF4X2RlbHRhOwotCXN0cnVjdCBzdGF0aXN0aWNzX2dlbmVyYWxfY29tbW9uICpnZW5lcmFsLCAqYWNjdW1fZ2VuZXJhbDsKLQlzdHJ1Y3Qgc3RhdGlzdGljc190eCAqdHgsICphY2N1bV90eDsKKwlpbnQgaTsKIAotCWlmIChpd2xfYnRfc3RhdGlzdGljcyhwcml2KSkgewotCQlwcmV2X3N0YXRzID0gKF9fbGUzMiAqKSZwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQ7Ci0JCWFjY3VtX3N0YXRzID0gKHUzMiAqKSZwcml2LT5fYWduLmFjY3VtX3N0YXRpc3RpY3NfYnQ7Ci0JCXNpemUgPSBzaXplb2Yoc3RydWN0IGl3bF9idF9ub3RpZl9zdGF0aXN0aWNzKTsKLQkJZ2VuZXJhbCA9ICZwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQuZ2VuZXJhbC5jb21tb247Ci0JCWFjY3VtX2dlbmVyYWwgPSAmcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzX2J0LmdlbmVyYWwuY29tbW9uOwotCQl0eCA9ICZwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQudHg7Ci0JCWFjY3VtX3R4ID0gJnByaXYtPl9hZ24uYWNjdW1fc3RhdGlzdGljc19idC50eDsKLQkJZGVsdGEgPSAodTMyICopJnByaXYtPl9hZ24uZGVsdGFfc3RhdGlzdGljc19idDsKLQkJbWF4X2RlbHRhID0gKHUzMiAqKSZwcml2LT5fYWduLm1heF9kZWx0YV9idDsKLQl9IGVsc2UgewotCQlwcmV2X3N0YXRzID0gKF9fbGUzMiAqKSZwcml2LT5fYWduLnN0YXRpc3RpY3M7Ci0JCWFjY3VtX3N0YXRzID0gKHUzMiAqKSZwcml2LT5fYWduLmFjY3VtX3N0YXRpc3RpY3M7Ci0JCXNpemUgPSBzaXplb2Yoc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzKTsKLQkJZ2VuZXJhbCA9ICZwcml2LT5fYWduLnN0YXRpc3RpY3MuZ2VuZXJhbC5jb21tb247Ci0JCWFjY3VtX2dlbmVyYWwgPSAmcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzLmdlbmVyYWwuY29tbW9uOwotCQl0eCA9ICZwcml2LT5fYWduLnN0YXRpc3RpY3MudHg7Ci0JCWFjY3VtX3R4ID0gJnByaXYtPl9hZ24uYWNjdW1fc3RhdGlzdGljcy50eDsKLQkJZGVsdGEgPSAodTMyICopJnByaXYtPl9hZ24uZGVsdGFfc3RhdGlzdGljczsKLQkJbWF4X2RlbHRhID0gKHUzMiAqKSZwcml2LT5fYWduLm1heF9kZWx0YTsKLQl9Ci0JZm9yIChpID0gc2l6ZW9mKF9fbGUzMik7IGkgPCBzaXplOwotCSAgICAgaSArPSBzaXplb2YoX19sZTMyKSwgc3RhdHMrKywgcHJldl9zdGF0cysrLCBkZWx0YSsrLAotCSAgICAgbWF4X2RlbHRhKyssIGFjY3VtX3N0YXRzKyspIHsKLQkJaWYgKGxlMzJfdG9fY3B1KCpzdGF0cykgPiBsZTMyX3RvX2NwdSgqcHJldl9zdGF0cykpIHsKLQkJCSpkZWx0YSA9IChsZTMyX3RvX2NwdSgqc3RhdHMpIC0KLQkJCQlsZTMyX3RvX2NwdSgqcHJldl9zdGF0cykpOwotCQkJKmFjY3VtX3N0YXRzICs9ICpkZWx0YTsKLQkJCWlmICgqZGVsdGEgPiAqbWF4X2RlbHRhKQorCWZvciAoaSA9IDA7CisJICAgICBpIDwgc2l6ZSAvIHNpemVvZihfX2xlMzIpOworCSAgICAgaSsrLCBwcmV2KyssIGN1cisrLCBkZWx0YSsrLCBtYXhfZGVsdGErKywgYWNjdW0rKykgeworCQlpZiAobGUzMl90b19jcHUoKmN1cikgPiBsZTMyX3RvX2NwdSgqcHJldikpIHsKKwkJCSpkZWx0YSA9IGNwdV90b19sZTMyKAorCQkJCWxlMzJfdG9fY3B1KCpjdXIpIC0gbGUzMl90b19jcHUoKnByZXYpKTsKKwkJCWxlMzJfYWRkX2NwdShhY2N1bSwgbGUzMl90b19jcHUoKmRlbHRhKSk7CisJCQlpZiAobGUzMl90b19jcHUoKmRlbHRhKSA+IGxlMzJfdG9fY3B1KCptYXhfZGVsdGEpKQogCQkJCSptYXhfZGVsdGEgPSAqZGVsdGE7CiAJCX0KIAl9Ci0KLQkvKiByZXNldCBhY2N1bXVsYXRpdmUgc3RhdGlzdGljcyBmb3IgIm5vLWNvdW50ZXIiIHR5cGUgc3RhdGlzdGljcyAqLwotCWFjY3VtX2dlbmVyYWwtPnRlbXBlcmF0dXJlID0gZ2VuZXJhbC0+dGVtcGVyYXR1cmU7Ci0JYWNjdW1fZ2VuZXJhbC0+dGVtcGVyYXR1cmVfbSA9IGdlbmVyYWwtPnRlbXBlcmF0dXJlX207Ci0JYWNjdW1fZ2VuZXJhbC0+dHRsX3RpbWVzdGFtcCA9IGdlbmVyYWwtPnR0bF90aW1lc3RhbXA7Ci0JYWNjdW1fdHgtPnR4X3Bvd2VyLmFudF9hID0gdHgtPnR4X3Bvd2VyLmFudF9hOwotCWFjY3VtX3R4LT50eF9wb3dlci5hbnRfYiA9IHR4LT50eF9wb3dlci5hbnRfYjsKLQlhY2N1bV90eC0+dHhfcG93ZXIuYW50X2MgPSB0eC0+dHhfcG93ZXIuYW50X2M7Ci0jZW5kaWYKIH0KIAorc3RhdGljIHZvaWQKK2l3bF9hY2N1bXVsYXRpdmVfc3RhdGlzdGljcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbF9jb21tb24gKmNvbW1vbiwKKwkJCSAgICBzdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5ICpyeF9ub25fcGh5LAorCQkJICAgIHN0cnVjdCBzdGF0aXN0aWNzX3J4X3BoeSAqcnhfb2ZkbSwKKwkJCSAgICBzdHJ1Y3Qgc3RhdGlzdGljc19yeF9odF9waHkgKnJ4X29mZG1faHQsCisJCQkgICAgc3RydWN0IHN0YXRpc3RpY3NfcnhfcGh5ICpyeF9jY2ssCisJCQkgICAgc3RydWN0IHN0YXRpc3RpY3NfdHggKnR4LAorCQkJICAgIHN0cnVjdCBzdGF0aXN0aWNzX2J0X2FjdGl2aXR5ICpidF9hY3Rpdml0eSkKK3sKKyNkZWZpbmUgQUNDVU0oX25hbWUpCVwKKwlhY2N1bV9zdGF0cygoX19sZTMyICopJnByaXYtPnN0YXRpc3RpY3MuX25hbWUsCQlcCisJCSAgICAoX19sZTMyICopX25hbWUsCQkJCVwKKwkJICAgIChfX2xlMzIgKikmcHJpdi0+ZGVsdGFfc3RhdHMuX25hbWUsCQlcCisJCSAgICAoX19sZTMyICopJnByaXYtPm1heF9kZWx0YV9zdGF0cy5fbmFtZSwJXAorCQkgICAgKF9fbGUzMiAqKSZwcml2LT5hY2N1bV9zdGF0cy5fbmFtZSwJCVwKKwkJICAgIHNpemVvZigqX25hbWUpKTsKKworCUFDQ1VNKGNvbW1vbik7CisJQUNDVU0ocnhfbm9uX3BoeSk7CisJQUNDVU0ocnhfb2ZkbSk7CisJQUNDVU0ocnhfb2ZkbV9odCk7CisJQUNDVU0ocnhfY2NrKTsKKwlBQ0NVTSh0eCk7CisJaWYgKGJ0X2FjdGl2aXR5KQorCQlBQ0NVTShidF9hY3Rpdml0eSk7CisjdW5kZWYgQUNDVU0KK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQKK2l3bF9hY2N1bXVsYXRpdmVfc3RhdGlzdGljcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbF9jb21tb24gKmNvbW1vbiwKKwkJCSAgICBzdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5ICpyeF9ub25fcGh5LAorCQkJICAgIHN0cnVjdCBzdGF0aXN0aWNzX3J4X3BoeSAqcnhfb2ZkbSwKKwkJCSAgICBzdHJ1Y3Qgc3RhdGlzdGljc19yeF9odF9waHkgKnJ4X29mZG1faHQsCisJCQkgICAgc3RydWN0IHN0YXRpc3RpY3NfcnhfcGh5ICpyeF9jY2ssCisJCQkgICAgc3RydWN0IHN0YXRpc3RpY3NfdHggKnR4LAorCQkJICAgIHN0cnVjdCBzdGF0aXN0aWNzX2J0X2FjdGl2aXR5ICpidF9hY3Rpdml0eSkKK3sKK30KKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBpd2xfcnhfc3RhdGlzdGljcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKIHsKKwl1bnNpZ25lZCBsb25nIHN0YW1wID0gamlmZmllczsKIAljb25zdCBpbnQgcmVnX3JlY2FsaWJfcGVyaW9kID0gNjA7CiAJaW50IGNoYW5nZTsKIAlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gcnhiX2FkZHIocnhiKTsKKwl1MzIgbGVuID0gbGUzMl90b19jcHUocGt0LT5sZW5fbl9mbGFncykgJiBGSF9SU0NTUl9GUkFNRV9TSVpFX01TSzsKKwlfX2xlMzIgKmZsYWc7CisJc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbF9jb21tb24gKmNvbW1vbjsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5ICpyeF9ub25fcGh5OworCXN0cnVjdCBzdGF0aXN0aWNzX3J4X3BoeSAqcnhfb2ZkbTsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9odF9waHkgKnJ4X29mZG1faHQ7CisJc3RydWN0IHN0YXRpc3RpY3NfcnhfcGh5ICpyeF9jY2s7CisJc3RydWN0IHN0YXRpc3RpY3NfdHggKnR4OworCXN0cnVjdCBzdGF0aXN0aWNzX2J0X2FjdGl2aXR5ICpidF9hY3Rpdml0eTsKIAotCWlmIChpd2xfYnRfc3RhdGlzdGljcyhwcml2KSkgewotCQlJV0xfREVCVUdfUlgocHJpdiwKLQkJCSAgICAgIlN0YXRpc3RpY3Mgbm90aWZpY2F0aW9uIHJlY2VpdmVkICglZCB2cyAlZCkuXG4iLAotCQkJICAgICAoaW50KXNpemVvZihzdHJ1Y3QgaXdsX2J0X25vdGlmX3N0YXRpc3RpY3MpLAotCQkJICAgICBsZTMyX3RvX2NwdShwa3QtPmxlbl9uX2ZsYWdzKSAmCi0JCQkgICAgIEZIX1JTQ1NSX0ZSQU1FX1NJWkVfTVNLKTsKKwlsZW4gLT0gc2l6ZW9mKHN0cnVjdCBpd2xfY21kX2hlYWRlcik7IC8qIHNraXAgaGVhZGVyICovCiAKLQkJY2hhbmdlID0gKChwcml2LT5fYWduLnN0YXRpc3RpY3NfYnQuZ2VuZXJhbC5jb21tb24udGVtcGVyYXR1cmUgIT0KLQkJCSAgIHBrdC0+dS5zdGF0c19idC5nZW5lcmFsLmNvbW1vbi50ZW1wZXJhdHVyZSkgfHwKLQkJCSAgICgocHJpdi0+X2Fnbi5zdGF0aXN0aWNzX2J0LmZsYWcgJgotCQkJICAgU1RBVElTVElDU19SRVBMWV9GTEdfSFQ0MF9NT0RFX01TSykgIT0KLQkJCSAgIChwa3QtPnUuc3RhdHNfYnQuZmxhZyAmCi0JCQkgICBTVEFUSVNUSUNTX1JFUExZX0ZMR19IVDQwX01PREVfTVNLKSkpOworCUlXTF9ERUJVR19SWChwcml2LCAiU3RhdGlzdGljcyBub3RpZmljYXRpb24gcmVjZWl2ZWQgKCVkIGJ5dGVzKS5cbiIsCisJCSAgICAgbGVuKTsKIAotCQlpd2xfYWNjdW11bGF0aXZlX3N0YXRpc3RpY3MocHJpdiwgKF9fbGUzMiAqKSZwa3QtPnUuc3RhdHNfYnQpOworCWlmIChsZW4gPT0gc2l6ZW9mKHN0cnVjdCBpd2xfYnRfbm90aWZfc3RhdGlzdGljcykpIHsKKwkJc3RydWN0IGl3bF9idF9ub3RpZl9zdGF0aXN0aWNzICpzdGF0czsKKwkJc3RhdHMgPSAmcGt0LT51LnN0YXRzX2J0OworCQlmbGFnID0gJnN0YXRzLT5mbGFnOworCQljb21tb24gPSAmc3RhdHMtPmdlbmVyYWwuY29tbW9uOworCQlyeF9ub25fcGh5ID0gJnN0YXRzLT5yeC5nZW5lcmFsLmNvbW1vbjsKKwkJcnhfb2ZkbSA9ICZzdGF0cy0+cngub2ZkbTsKKwkJcnhfb2ZkbV9odCA9ICZzdGF0cy0+cngub2ZkbV9odDsKKwkJcnhfY2NrID0gJnN0YXRzLT5yeC5jY2s7CisJCXR4ID0gJnN0YXRzLT50eDsKKwkJYnRfYWN0aXZpdHkgPSAmc3RhdHMtPmdlbmVyYWwuYWN0aXZpdHk7CisKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVR0ZTCisJCS8qIGhhbmRsZSB0aGlzIGV4Y2VwdGlvbiBkaXJlY3RseSAqLworCQlwcml2LT5zdGF0aXN0aWNzLm51bV9idF9raWxscyA9IHN0YXRzLT5yeC5nZW5lcmFsLm51bV9idF9raWxsczsKKwkJbGUzMl9hZGRfY3B1KCZwcml2LT5zdGF0aXN0aWNzLmFjY3VtX251bV9idF9raWxscywKKwkJCSAgICAgbGUzMl90b19jcHUoc3RhdHMtPnJ4LmdlbmVyYWwubnVtX2J0X2tpbGxzKSk7CisjZW5kaWYKKwl9IGVsc2UgaWYgKGxlbiA9PSBzaXplb2Yoc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzKSkgeworCQlzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3MgKnN0YXRzOworCQlzdGF0cyA9ICZwa3QtPnUuc3RhdHM7CisJCWZsYWcgPSAmc3RhdHMtPmZsYWc7CisJCWNvbW1vbiA9ICZzdGF0cy0+Z2VuZXJhbC5jb21tb247CisJCXJ4X25vbl9waHkgPSAmc3RhdHMtPnJ4LmdlbmVyYWw7CisJCXJ4X29mZG0gPSAmc3RhdHMtPnJ4Lm9mZG07CisJCXJ4X29mZG1faHQgPSAmc3RhdHMtPnJ4Lm9mZG1faHQ7CisJCXJ4X2NjayA9ICZzdGF0cy0+cnguY2NrOworCQl0eCA9ICZzdGF0cy0+dHg7CisJCWJ0X2FjdGl2aXR5ID0gTlVMTDsKIAl9IGVsc2UgewotCQlJV0xfREVCVUdfUlgocHJpdiwKLQkJCSAgICAgIlN0YXRpc3RpY3Mgbm90aWZpY2F0aW9uIHJlY2VpdmVkICglZCB2cyAlZCkuXG4iLAotCQkJICAgICAoaW50KXNpemVvZihzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3MpLAotCQkJICAgICBsZTMyX3RvX2NwdShwa3QtPmxlbl9uX2ZsYWdzKSAmCi0JCQkgICAgIEZIX1JTQ1NSX0ZSQU1FX1NJWkVfTVNLKTsKLQotCQljaGFuZ2UgPSAoKHByaXYtPl9hZ24uc3RhdGlzdGljcy5nZW5lcmFsLmNvbW1vbi50ZW1wZXJhdHVyZSAhPQotCQkJICAgcGt0LT51LnN0YXRzLmdlbmVyYWwuY29tbW9uLnRlbXBlcmF0dXJlKSB8fAotCQkJICAgKChwcml2LT5fYWduLnN0YXRpc3RpY3MuZmxhZyAmCi0JCQkgICBTVEFUSVNUSUNTX1JFUExZX0ZMR19IVDQwX01PREVfTVNLKSAhPQotCQkJICAgKHBrdC0+dS5zdGF0cy5mbGFnICYKLQkJCSAgIFNUQVRJU1RJQ1NfUkVQTFlfRkxHX0hUNDBfTU9ERV9NU0spKSk7Ci0KLQkJaXdsX2FjY3VtdWxhdGl2ZV9zdGF0aXN0aWNzKHByaXYsIChfX2xlMzIgKikmcGt0LT51LnN0YXRzKTsKKwkJV0FSTl9PTkNFKDEsICJsZW4gJWQgZG9lc24ndCBtYXRjaCBCVCAoJXp1KSBvciBub3JtYWwgKCV6dSlcbiIsCisJCQkgIGxlbiwgc2l6ZW9mKHN0cnVjdCBpd2xfYnRfbm90aWZfc3RhdGlzdGljcyksCisJCQkgIHNpemVvZihzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3MpKTsKKwkJcmV0dXJuOwogCX0KIAotCWl3bF9yZWNvdmVyX2Zyb21fc3RhdGlzdGljcyhwcml2LCBwa3QpOworCWNoYW5nZSA9IGNvbW1vbi0+dGVtcGVyYXR1cmUgIT0gcHJpdi0+c3RhdGlzdGljcy5jb21tb24udGVtcGVyYXR1cmUgfHwKKwkJICgqZmxhZyAmIFNUQVRJU1RJQ1NfUkVQTFlfRkxHX0hUNDBfTU9ERV9NU0spICE9CisJCSAocHJpdi0+c3RhdGlzdGljcy5mbGFnICYgU1RBVElTVElDU19SRVBMWV9GTEdfSFQ0MF9NT0RFX01TSyk7CisKKwlpd2xfYWNjdW11bGF0aXZlX3N0YXRpc3RpY3MocHJpdiwgY29tbW9uLCByeF9ub25fcGh5LCByeF9vZmRtLAorCQkJCSAgICByeF9vZmRtX2h0LCByeF9jY2ssIHR4LCBidF9hY3Rpdml0eSk7CisKKwlpd2xfcmVjb3Zlcl9mcm9tX3N0YXRpc3RpY3MocHJpdiwgcnhfb2ZkbSwgcnhfb2ZkbV9odCwgdHgsIHN0YW1wKTsKKworCXByaXYtPnN0YXRpc3RpY3MuZmxhZyA9ICpmbGFnOworCW1lbWNweSgmcHJpdi0+c3RhdGlzdGljcy5jb21tb24sIGNvbW1vbiwgc2l6ZW9mKCpjb21tb24pKTsKKwltZW1jcHkoJnByaXYtPnN0YXRpc3RpY3Mucnhfbm9uX3BoeSwgcnhfbm9uX3BoeSwgc2l6ZW9mKCpyeF9ub25fcGh5KSk7CisJbWVtY3B5KCZwcml2LT5zdGF0aXN0aWNzLnJ4X29mZG0sIHJ4X29mZG0sIHNpemVvZigqcnhfb2ZkbSkpOworCW1lbWNweSgmcHJpdi0+c3RhdGlzdGljcy5yeF9vZmRtX2h0LCByeF9vZmRtX2h0LCBzaXplb2YoKnJ4X29mZG1faHQpKTsKKwltZW1jcHkoJnByaXYtPnN0YXRpc3RpY3MucnhfY2NrLCByeF9jY2ssIHNpemVvZigqcnhfY2NrKSk7CisJbWVtY3B5KCZwcml2LT5zdGF0aXN0aWNzLnR4LCB0eCwgc2l6ZW9mKCp0eCkpOworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHRlMKKwlpZiAoYnRfYWN0aXZpdHkpCisJCW1lbWNweSgmcHJpdi0+c3RhdGlzdGljcy5idF9hY3Rpdml0eSwgYnRfYWN0aXZpdHksCisJCQlzaXplb2YoKmJ0X2FjdGl2aXR5KSk7CisjZW5kaWYKKworCXByaXYtPnJ4X3N0YXRpc3RpY3NfamlmZmllcyA9IHN0YW1wOwogCiAJc2V0X2JpdChTVEFUVVNfU1RBVElTVElDUywgJnByaXYtPnN0YXR1cyk7CiAKQEAgLTcwOCwxOCArNjc2LDEyIEBACiAKIAlpZiAobGUzMl90b19jcHUocGt0LT51LnN0YXRzLmZsYWcpICYgVUNPREVfU1RBVElTVElDU19DTEVBUl9NU0spIHsKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVR0ZTCi0JCW1lbXNldCgmcHJpdi0+X2Fnbi5hY2N1bV9zdGF0aXN0aWNzLCAwLAotCQkJc2l6ZW9mKHN0cnVjdCBpd2xfbm90aWZfc3RhdGlzdGljcykpOwotCQltZW1zZXQoJnByaXYtPl9hZ24uZGVsdGFfc3RhdGlzdGljcywgMCwKLQkJCXNpemVvZihzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3MpKTsKLQkJbWVtc2V0KCZwcml2LT5fYWduLm1heF9kZWx0YSwgMCwKLQkJCXNpemVvZihzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3MpKTsKLQkJbWVtc2V0KCZwcml2LT5fYWduLmFjY3VtX3N0YXRpc3RpY3NfYnQsIDAsCi0JCQlzaXplb2Yoc3RydWN0IGl3bF9idF9ub3RpZl9zdGF0aXN0aWNzKSk7Ci0JCW1lbXNldCgmcHJpdi0+X2Fnbi5kZWx0YV9zdGF0aXN0aWNzX2J0LCAwLAotCQkJc2l6ZW9mKHN0cnVjdCBpd2xfYnRfbm90aWZfc3RhdGlzdGljcykpOwotCQltZW1zZXQoJnByaXYtPl9hZ24ubWF4X2RlbHRhX2J0LCAwLAotCQkJc2l6ZW9mKHN0cnVjdCBpd2xfYnRfbm90aWZfc3RhdGlzdGljcykpOworCQltZW1zZXQoJnByaXYtPmFjY3VtX3N0YXRzLCAwLAorCQkJc2l6ZW9mKHByaXYtPmFjY3VtX3N0YXRzKSk7CisJCW1lbXNldCgmcHJpdi0+ZGVsdGFfc3RhdHMsIDAsCisJCQlzaXplb2YocHJpdi0+ZGVsdGFfc3RhdHMpKTsKKwkJbWVtc2V0KCZwcml2LT5tYXhfZGVsdGFfc3RhdHMsIDAsCisJCQlzaXplb2YocHJpdi0+bWF4X2RlbHRhX3N0YXRzKSk7CiAjZW5kaWYKIAkJSVdMX0RFQlVHX1JYKHByaXYsICJTdGF0aXN0aWNzIGhhdmUgYmVlbiBjbGVhcmVkXG4iKTsKIAl9CkBAIC04NzMsNiArODM1LDcgQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKKwlzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4OwogCiAJLyogV2Ugb25seSBwcm9jZXNzIGRhdGEgcGFja2V0cyBpZiB0aGUgaW50ZXJmYWNlIGlzIG9wZW4gKi8KIAlpZiAodW5saWtlbHkoIXByaXYtPmlzX29wZW4pKSB7CkBAIC04ODIsNyArODQ1LDcgQEAKIAl9CiAKIAkvKiBJbiBjYXNlIG9mIEhXIGFjY2VsZXJhdGVkIGNyeXB0byBhbmQgYmFkIGRlY3J5cHRpb24sIGRyb3AgKi8KLQlpZiAoIXByaXYtPmNmZy0+bW9kX3BhcmFtcy0+c3dfY3J5cHRvICYmCisJaWYgKCFpd2xhZ25fbW9kX3BhcmFtcy5zd19jcnlwdG8gJiYKIAkgICAgaXdsX3NldF9kZWNyeXB0ZWRfZmxhZyhwcml2LCBoZHIsIGFtcGR1X3N0YXR1cywgc3RhdHMpKQogCQlyZXR1cm47CiAKQEAgLTg5NSwxMCArODU4LDI5IEBACiAJc2tiX2FkZF9yeF9mcmFnKHNrYiwgMCwgcnhiLT5wYWdlLCAodm9pZCAqKWhkciAtIHJ4Yl9hZGRyKHJ4YiksIGxlbik7CiAKIAlpd2xfdXBkYXRlX3N0YXRzKHByaXYsIGZhbHNlLCBmYywgbGVuKTsKKworCS8qCisJKiBXYWtlIGFueSBxdWV1ZXMgdGhhdCB3ZXJlIHN0b3BwZWQgZHVlIHRvIGEgcGFzc2l2ZSBjaGFubmVsIHR4CisJKiBmYWlsdXJlLiBUaGlzIGNhbiBoYXBwZW4gYmVjYXVzZSB0aGUgcmVndWxhdG9yeSBlbmZvcmNlbWVudCBpbgorCSogdGhlIGRldmljZSB3YWl0cyBmb3IgYSBiZWFjb24gYmVmb3JlIGFsbG93aW5nIHRyYW5zbWlzc2lvbiwKKwkqIHNvbWV0aW1lcyBldmVuIGFmdGVyIGFscmVhZHkgaGF2aW5nIHRyYW5zbWl0dGVkIGZyYW1lcyBmb3IgdGhlCisJKiBhc3NvY2lhdGlvbiBiZWNhdXNlIHRoZSBuZXcgUlhPTiBtYXkgcmVzZXQgdGhlIGluZm9ybWF0aW9uLgorCSovCisJaWYgKHVubGlrZWx5KGllZWU4MDIxMV9pc19iZWFjb24oZmMpKSkgeworCQlmb3JfZWFjaF9jb250ZXh0KHByaXYsIGN0eCkgeworCQkJaWYgKCFjdHgtPmxhc3RfdHhfcmVqZWN0ZWQpCisJCQkJY29udGludWU7CisJCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGhkci0+YWRkcjMsCisJCQkJCSAgICAgICBjdHgtPmFjdGl2ZS5ic3NpZF9hZGRyKSkKKwkJCQljb250aW51ZTsKKwkJCWN0eC0+bGFzdF90eF9yZWplY3RlZCA9IGZhbHNlOworCQkJaXdsX3dha2VfYW55X3F1ZXVlKHByaXYsIGN0eCk7CisJCX0KKwl9CisKIAltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksIHN0YXRzLCBzaXplb2YoKnN0YXRzKSk7CiAKIAlpZWVlODAyMTFfcngocHJpdi0+aHcsIHNrYik7Ci0JcHJpdi0+YWxsb2NfcnhiX3BhZ2UtLTsKIAlyeGItPnBhZ2UgPSBOVUxMOwogfQogCkBAIC0xMDkzLDcgKzEwNzUsNiBAQAogCiAJaGFuZGxlcnMgPSBwcml2LT5yeF9oYW5kbGVyczsKIAotCWhhbmRsZXJzW1JFUExZX0FMSVZFXQkJCT0gaXdsX3J4X3JlcGx5X2FsaXZlOwogCWhhbmRsZXJzW1JFUExZX0VSUk9SXQkJCT0gaXdsX3J4X3JlcGx5X2Vycm9yOwogCWhhbmRsZXJzW0NIQU5ORUxfU1dJVENIX05PVElGSUNBVElPTl0JPSBpd2xfcnhfY3NhOwogCWhhbmRsZXJzW1NQRUNUUlVNX01FQVNVUkVfTk9USUZJQ0FUSU9OXQk9IGl3bF9yeF9zcGVjdHJ1bV9tZWFzdXJlX25vdGlmOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc2Nhbi5jCmluZGV4IDkxNGM3N2UuLmQ2MGQ2MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNjYW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2FuLmMKQEAgLTIsNyArMiw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNwZWN0cnVtLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zcGVjdHJ1bS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGNhMGI1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNwZWN0cnVtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKLSAqCi0gKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKLSAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KLSAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgX19pd2xfc3BlY3RydW1faF9fCi0jZGVmaW5lIF9faXdsX3NwZWN0cnVtX2hfXwotZW51bSB7CQkJCS8qIGllZWU4MDIxMV9iYXNpY19yZXBvcnQubWFwICovCi0JSUVFRTgwMjExX0JBU0lDX01BUF9CU1MgPSAoMSA8PCAwKSwKLQlJRUVFODAyMTFfQkFTSUNfTUFQX09GRE0gPSAoMSA8PCAxKSwKLQlJRUVFODAyMTFfQkFTSUNfTUFQX1VOSURFTlRJRklFRCA9ICgxIDw8IDIpLAotCUlFRUU4MDIxMV9CQVNJQ19NQVBfUkFEQVIgPSAoMSA8PCAzKSwKLQlJRUVFODAyMTFfQkFTSUNfTUFQX1VOTUVBU1VSRUQgPSAoMSA8PCA0KSwKLQkvKiBCaXRzIDUtNyBhcmUgcmVzZXJ2ZWQgKi8KLQotfTsKLXN0cnVjdCBpZWVlODAyMTFfYmFzaWNfcmVwb3J0IHsKLQl1OCBjaGFubmVsOwotCV9fbGU2NCBzdGFydF90aW1lOwotCV9fbGUxNiBkdXJhdGlvbjsKLQl1OCBtYXA7Ci19IF9fcGFja2VkOwotCi1lbnVtIHsJCQkJLyogaWVlZTgwMjExX21lYXN1cmVtZW50X3JlcXVlc3QubW9kZSAqLwotCS8qIEJpdCAwIGlzIHJlc2VydmVkICovCi0JSUVFRTgwMjExX01FQVNVUkVNRU5UX0VOQUJMRSA9ICgxIDw8IDEpLAotCUlFRUU4MDIxMV9NRUFTVVJFTUVOVF9SRVFVRVNUID0gKDEgPDwgMiksCi0JSUVFRTgwMjExX01FQVNVUkVNRU5UX1JFUE9SVCA9ICgxIDw8IDMpLAotCS8qIEJpdHMgNC03IGFyZSByZXNlcnZlZCAqLwotfTsKLQotZW51bSB7Ci0JSUVFRTgwMjExX1JFUE9SVF9CQVNJQyA9IDAsCS8qIHJlcXVpcmVkICovCi0JSUVFRTgwMjExX1JFUE9SVF9DQ0EgPSAxLAkvKiBvcHRpb25hbCAqLwotCUlFRUU4MDIxMV9SRVBPUlRfUlBJID0gMiwJLyogb3B0aW9uYWwgKi8KLQkvKiAzLTI1NSByZXNlcnZlZCAqLwotfTsKLQotc3RydWN0IGllZWU4MDIxMV9tZWFzdXJlbWVudF9wYXJhbXMgewotCXU4IGNoYW5uZWw7Ci0JX19sZTY0IHN0YXJ0X3RpbWU7Ci0JX19sZTE2IGR1cmF0aW9uOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgewotCXU4IGlkOwotCXU4IGxlbjsKLQl1OCBkYXRhWzBdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGllZWU4MDIxMV9tZWFzdXJlbWVudF9yZXF1ZXN0IHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpZTsKLQl1OCB0b2tlbjsKLQl1OCBtb2RlOwotCXU4IHR5cGU7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZWFzdXJlbWVudF9wYXJhbXMgcGFyYW1zWzBdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGllZWU4MDIxMV9tZWFzdXJlbWVudF9yZXBvcnQgewotCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGllOwotCXU4IHRva2VuOwotCXU4IG1vZGU7Ci0JdTggdHlwZTsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfYmFzaWNfcmVwb3J0IGJhc2ljWzBdOwotCX0gdTsKLX0gX19wYWNrZWQ7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYwppbmRleCBiYzkwYTEyLi4zYzhjZWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpAQCAtMjMzLDcgKzIzMyw2IEBACiAJc3RydWN0IGl3bF9zdGF0aW9uX2VudHJ5ICpzdGF0aW9uOwogCWludCBpOwogCXU4IHN0YV9pZCA9IElXTF9JTlZBTElEX1NUQVRJT047Ci0JdTE2IHJhdGU7CiAKIAlpZiAoaXNfYXApCiAJCXN0YV9pZCA9IGN0eC0+YXBfc3RhX2lkOwpAQCAtMzA2LDEyICszMDUsNiBAQAogCSAqLwogCWl3bF9zZXRfaHRfYWRkX3N0YXRpb24ocHJpdiwgc3RhX2lkLCBzdGEsIGN0eCk7CiAKLQkvKiAzOTQ1IG9ubHkgKi8KLQlyYXRlID0gKHByaXYtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgPwotCQlJV0xfUkFURV82TV9QTENQIDogSVdMX1JBVEVfMU1fUExDUDsKLQkvKiBUdXJuIG9uIGJvdGggYW50ZW5uYXMgZm9yIHRoZSBzdGF0aW9uLi4uICovCi0Jc3RhdGlvbi0+c3RhLnJhdGVfbl9mbGFncyA9IGNwdV90b19sZTE2KHJhdGUgfCBSQVRFX01DU19BTlRfQUJfTVNLKTsKLQogCXJldHVybiBzdGFfaWQ7CiAKIH0KQEAgLTUwMSw3ICs0OTQsOCBAQAogCiAJcHJpdi0+bnVtX3N0YXRpb25zLS07CiAKLQlCVUdfT04ocHJpdi0+bnVtX3N0YXRpb25zIDwgMCk7CisJaWYgKFdBUk5fT04ocHJpdi0+bnVtX3N0YXRpb25zIDwgMCkpCisJCXByaXYtPm51bV9zdGF0aW9ucyA9IDA7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCkBAIC02ODYsNyArNjgwLDggQEAKIAogCQlwcml2LT5zdGF0aW9uc1tpXS51c2VkICY9IH5JV0xfU1RBX1VDT0RFX0FDVElWRTsKIAkJcHJpdi0+bnVtX3N0YXRpb25zLS07Ci0JCUJVR19PTihwcml2LT5udW1fc3RhdGlvbnMgPCAwKTsKKwkJaWYgKFdBUk5fT04ocHJpdi0+bnVtX3N0YXRpb25zIDwgMCkpCisJCQlwcml2LT5udW1fc3RhdGlvbnMgPSAwOwogCQlrZnJlZShwcml2LT5zdGF0aW9uc1tpXS5scSk7CiAJCXByaXYtPnN0YXRpb25zW2ldLmxxID0gTlVMTDsKIAl9CkBAIC03ODIsNyArNzc3LDggQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3Nfc3Bpbik7CiAKIAlpd2xfZHVtcF9scV9jbWQocHJpdiwgbHEpOwotCUJVR19PTihpbml0ICYmIChjbWQuZmxhZ3MgJiBDTURfQVNZTkMpKTsKKwlpZiAoV0FSTl9PTihpbml0ICYmIChjbWQuZmxhZ3MgJiBDTURfQVNZTkMpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoaXNfbHFfdGFibGVfdmFsaWQocHJpdiwgY3R4LCBscSkpCiAJCXJldCA9IGl3bF9zZW5kX2NtZChwcml2LCAmY21kKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmgKaW5kZXggMjA2ZjFlMS4uZmY2NDAyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN2LW9wZW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN2LW9wZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWI2Njk2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3Ytb3Blbi5jCkBAIC0wLDAgKzEsNDY5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVGhpcyBmaWxlIGlzIHByb3ZpZGVkIHVuZGVyIGEgZHVhbCBCU0QvR1BMdjIgbGljZW5zZS4gIFdoZW4gdXNpbmcgb3IKKyAqIHJlZGlzdHJpYnV0aW5nIHRoaXMgZmlsZSwgeW91IG1heSBkbyBzbyB1bmRlciBlaXRoZXIgbGljZW5zZS4KKyAqCisgKiBHUEwgTElDRU5TRSBTVU1NQVJZCisgKgorICogQ29weXJpZ2h0KGMpIDIwMTAgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsCisgKiBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgorICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuR1BMLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiAgSW50ZWwgTGludXggV2lyZWxlc3MgPGlsd0BsaW51eC5pbnRlbC5jb20+CisgKiBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisgKgorICogQlNEIExJQ0VOU0UKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAxMCAtIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAgKiBOZWl0aGVyIHRoZSBuYW1lIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgorCisKKyNpbmNsdWRlICJpd2wtZGV2LmgiCisjaW5jbHVkZSAiaXdsLWNvcmUuaCIKKyNpbmNsdWRlICJpd2wtZGVidWcuaCIKKyNpbmNsdWRlICJpd2wtZmguaCIKKyNpbmNsdWRlICJpd2wtaW8uaCIKKyNpbmNsdWRlICJpd2wtYWduLmgiCisjaW5jbHVkZSAiaXdsLXRlc3Rtb2RlLmgiCisKKworLyogVGhlIFRMVnMgdXNlZCBpbiB0aGUgZ25sIG1lc3NhZ2UgcG9saWN5IGJldHdlZW4gdGhlIGtlcm5lbCBtb2R1bGUgYW5kCisgKiB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uLiBpd2xfdGVzdG1vZGVfZ25sX21zZ19wb2xpY3kgaXMgdG8gYmUgY2FycmllZAorICogdGhyb3VnaCB0aGUgTkw4MDIxMV9DTURfVEVTVE1PREUgY2hhbm5lbCByZWd1bGF0ZWQgYnkgbmw4MDIxMS4KKyAqIFNlZSBpd2wtdGVzdG1vZGUuaAorICovCitzdGF0aWMKK3N0cnVjdCBubGFfcG9saWN5IGl3bF90ZXN0bW9kZV9nbmxfbXNnX3BvbGljeVtJV0xfVE1fQVRUUl9NQVhdID0geworCVtJV0xfVE1fQVRUUl9DT01NQU5EXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LAorCisJW0lXTF9UTV9BVFRSX1VDT0RFX0NNRF9JRF0gPSB7IC50eXBlID0gTkxBX1U4LCB9LAorCVtJV0xfVE1fQVRUUl9VQ09ERV9DTURfREFUQV0gPSB7IC50eXBlID0gTkxBX1VOU1BFQywgfSwKKworCVtJV0xfVE1fQVRUUl9SRUdfT0ZGU0VUXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LAorCVtJV0xfVE1fQVRUUl9SRUdfVkFMVUU4XSA9IHsgLnR5cGUgPSBOTEFfVTgsIH0sCisJW0lXTF9UTV9BVFRSX1JFR19WQUxVRTMyXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LAorCisJW0lXTF9UTV9BVFRSX1NZTkNfUlNQXSA9IHsgLnR5cGUgPSBOTEFfVU5TUEVDLCB9LAorCVtJV0xfVE1fQVRUUl9VQ09ERV9SWF9QS1RdID0geyAudHlwZSA9IE5MQV9VTlNQRUMsIH0sCit9OworCisvKgorICogU2VlIHRoZSBzdHJ1Y3QgaXdsX3J4X3BhY2tldCBpbiBpd2wtY29tbWFuZHMuaCBmb3IgdGhlIGZvcm1hdCBvZiB0aGUKKyAqIHJlY2VpdmVkIGV2ZW50cyBmcm9tIHRoZSBkZXZpY2UKKyAqLworc3RhdGljIGlubGluZSBpbnQgZ2V0X2V2ZW50X2xlbmd0aChzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKK3sKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gcnhiX2FkZHIocnhiKTsKKwlpZiAocGt0KQorCQlyZXR1cm4gbGUzMl90b19jcHUocGt0LT5sZW5fbl9mbGFncykgJiBGSF9SU0NTUl9GUkFNRV9TSVpFX01TSzsKKwllbHNlCisJCXJldHVybiAwOworfQorCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIG11bHRpY2FzdHMgdGhlIHNwb250YW5lb3VzIG1lc3NhZ2VzIGZyb20gdGhlIGRldmljZSB0byB0aGUKKyAqIHVzZXIgc3BhY2UuIEl0IGlzIGludm9rZWQgd2hlbmV2ZXIgdGhlcmUgaXMgYSByZWNlaXZlZCBtZXNzYWdlcworICogZnJvbSB0aGUgZGV2aWNlLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoaW4gdGhlIElTUiBvZiB0aGUgcnggaGFuZGxlcnMKKyAqIGluIGl3bGFnbiBkcml2ZXIuCisgKgorICogVGhlIHBhcnNpbmcgb2YgdGhlIG1lc3NhZ2UgY29udGVudCBpcyBsZWZ0IHRvIHRoZSB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uLAorICogVGhlIG1lc3NhZ2UgY29udGVudCBpcyB0cmVhdGVkIGFzIHVuYXR0YWNrZWQgcmF3IGRhdGEgYW5kIGlzIGVuY2Fwc3VsYXRlZAorICogd2l0aCBJV0xfVE1fQVRUUl9VQ09ERV9SWF9QS1QgbXVsdGljYXN0aW5nIHRvIHRoZSB1c2VyIHNwYWNlLgorICoKKyAqIEBwcml2OiB0aGUgaW5zdGFuY2Ugb2YgaXdsd2lmaSBkZXZpY2UKKyAqIEByeGI6IHBvaW50ZXIgdG8gcnggZGF0YSBjb250ZW50IHJlY2VpdmVkIGJ5IHRoZSBJU1IKKyAqCisgKiBTZWUgdGhlIG1lc3NhZ2UgcG9saWNpZXMgYW5kIFRMVnMgaW4gaXdsX3Rlc3Rtb2RlX2dubF9tc2dfcG9saWN5W10uCisgKiBGb3IgdGhlIG1lc3NhZ2VzIG11bHRpY2FzdGluZyB0byB0aGUgdXNlciBhcHBsaWNhdGlvbiwgdGhlIG1hbmRhdG9yeQorICogVExWIGZpZWxkcyBhcmUgOgorICoJSVdMX1RNX0FUVFJfQ09NTUFORCBtdXN0IGJlIElXTF9UTV9DTURfREVWMkFQUF9VQ09ERV9SWF9QS1QKKyAqCUlXTF9UTV9BVFRSX1VDT0RFX1JYX1BLVCBmb3IgY2FycnlpbmcgdGhlIG1lc3NhZ2UgY29udGVudAorICovCisKK3N0YXRpYyB2b2lkIGl3bF90ZXN0bW9kZV91Y29kZV9yeF9wa3Qoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcHJpdi0+aHc7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl2b2lkICpkYXRhOworCWludCBsZW5ndGg7CisKKwlkYXRhID0gKHZvaWQgKilyeGJfYWRkcihyeGIpOworCWxlbmd0aCA9IGdldF9ldmVudF9sZW5ndGgocnhiKTsKKworCWlmICghZGF0YSB8fCBsZW5ndGggPT0gMCkKKwkJcmV0dXJuOworCisJc2tiID0gY2ZnODAyMTFfdGVzdG1vZGVfYWxsb2NfZXZlbnRfc2tiKGh3LT53aXBoeSwgMjAgKyBsZW5ndGgsCisJCQkJCQkJCUdGUF9BVE9NSUMpOworCWlmIChza2IgPT0gTlVMTCkgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkJICJSdW4gb3V0IG9mIG1lbW9yeSBmb3IgbWVzc2FnZXMgdG8gdXNlciBzcGFjZSA/XG4iKTsKKwkJcmV0dXJuOworCX0KKwlOTEFfUFVUX1UzMihza2IsIElXTF9UTV9BVFRSX0NPTU1BTkQsIElXTF9UTV9DTURfREVWMkFQUF9VQ09ERV9SWF9QS1QpOworCU5MQV9QVVQoc2tiLCBJV0xfVE1fQVRUUl9VQ09ERV9SWF9QS1QsIGxlbmd0aCwgZGF0YSk7CisJY2ZnODAyMTFfdGVzdG1vZGVfZXZlbnQoc2tiLCBHRlBfQVRPTUlDKTsKKwlyZXR1cm47CisKK25sYV9wdXRfZmFpbHVyZToKKwlrZnJlZV9za2Ioc2tiKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiT3VjaCwgb3ZlcnJhbiBidWZmZXIsIGNoZWNrIGFsbG9jYXRpb24hXG4iKTsKK30KKwordm9pZCBpd2xfdGVzdG1vZGVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJcHJpdi0+cHJlX3J4X2hhbmRsZXIgPSBpd2xfdGVzdG1vZGVfdWNvZGVfcnhfcGt0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSB1c2VyIGFwcGxpY2F0aW9uIGNvbW1hbmRzIHRvIHRoZSB1Y29kZS4KKyAqCisgKiBJdCByZXRyaWV2ZXMgdGhlIG1hbmRhdG9yeSBmaWVsZHMgSVdMX1RNX0FUVFJfVUNPREVfQ01EX0lEIGFuZAorICogSVdMX1RNX0FUVFJfVUNPREVfQ01EX0RBVEEgYW5kIGNhbGxzIHRvIHRoZSBoYW5kbGVyIHRvIHNlbmQgdGhlCisgKiBob3N0IGNvbW1hbmQgdG8gdGhlIHVjb2RlLgorICoKKyAqIElmIGFueSBtYW5kYXRvcnkgZmllbGQgaXMgbWlzc2luZywgLUVOT01TRyBpcyByZXBsaWVkIHRvIHRoZSB1c2VyIHNwYWNlCisgKiBhcHBsaWNhdGlvbjsgb3RoZXJ3aXNlLCB0aGUgYWN0dWFsIGV4ZWN1dGlvbiByZXN1bHQgb2YgdGhlIGhvc3QgY29tbWFuZCB0bworICogdWNvZGUgaXMgcmVwbGllZC4KKyAqCisgKiBAaHc6IGllZWU4MDIxMV9odyBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSBkZXZpY2UKKyAqIEB0YjogZ25sIG1lc3NhZ2UgZmllbGRzIGZyb20gdGhlIHVzZXIgc3BhY2UKKyAqLworc3RhdGljIGludCBpd2xfdGVzdG1vZGVfdWNvZGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBubGF0dHIgKip0YikKK3sKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZDsKKworCW1lbXNldCgmY21kLCAwLCBzaXplb2Yoc3RydWN0IGl3bF9ob3N0X2NtZCkpOworCisJaWYgKCF0YltJV0xfVE1fQVRUUl9VQ09ERV9DTURfSURdIHx8CisJICAgICF0YltJV0xfVE1fQVRUUl9VQ09ERV9DTURfREFUQV0pIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJCSJFcnJvciBmaW5kaW5nIHVjb2RlIGNvbW1hbmQgbWFuZGF0b3J5IGZpZWxkc1xuIik7CisJCXJldHVybiAtRU5PTVNHOworCX0KKworCWNtZC5pZCA9IG5sYV9nZXRfdTgodGJbSVdMX1RNX0FUVFJfVUNPREVfQ01EX0lEXSk7CisJY21kLmRhdGEgPSBubGFfZGF0YSh0YltJV0xfVE1fQVRUUl9VQ09ERV9DTURfREFUQV0pOworCWNtZC5sZW4gPSBubGFfbGVuKHRiW0lXTF9UTV9BVFRSX1VDT0RFX0NNRF9EQVRBXSk7CisJSVdMX0lORk8ocHJpdiwgInRlc3Rtb2RlIHVjb2RlIGNvbW1hbmQgSUQgMHgleCwgZmxhZ3MgMHgleCwiCisJCQkJIiBsZW4gJWRcbiIsIGNtZC5pZCwgY21kLmZsYWdzLCBjbWQubGVuKTsKKwkvKiBvaywgbGV0J3Mgc3VibWl0IHRoZSBjb21tYW5kIHRvIHVjb2RlICovCisJcmV0dXJuIGl3bF9zZW5kX2NtZChwcml2LCAmY21kKTsKK30KKworCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSB1c2VyIGFwcGxpY2F0aW9uIGNvbW1hbmRzIGZvciByZWdpc3RlciBhY2Nlc3MuCisgKgorICogSXQgcmV0cmlldmVzIGNvbW1hbmQgSUQgY2FycmllZCB3aXRoIElXTF9UTV9BVFRSX0NPTU1BTkQgYW5kIGNhbGxzIHRvIHRoZQorICogaGFuZGxlcnMgcmVzcGVjdGl2ZWx5LgorICoKKyAqIElmIGl0J3MgYW4gdW5rbm93biBjb21tZG4gSUQsIC1FTk9TWVMgaXMgcmV0dXJuZWQ7IG9yIC1FTk9NU0cgaWYgdGhlCisgKiBtYW5kYXRvcnkgZmllbGRzKElXTF9UTV9BVFRSX1JFR19PRkZTRVQsSVdMX1RNX0FUVFJfUkVHX1ZBTFVFMzIsCisgKiBJV0xfVE1fQVRUUl9SRUdfVkFMVUU4KSBhcmUgbWlzc2luZzsgT3RoZXJ3aXNlIDAgaXMgcmVwbGllZCBpbmRpY2F0aW5nCisgKiB0aGUgc3VjY2VzcyBvZiB0aGUgY29tbWFuZCBleGVjdXRpb24uCisgKgorICogSWYgSVdMX1RNX0FUVFJfQ09NTUFORCBpcyBJV0xfVE1fQ01EX0FQUDJERVZfUkVHX1JFQUQzMiwgdGhlIHJlZ2lzdGVyIHJlYWQKKyAqIHZhbHVlIGlzIHJldHVybmVkIHdpdGggSVdMX1RNX0FUVFJfUkVHX1ZBTFVFMzIuCisgKgorICogQGh3OiBpZWVlODAyMTFfaHcgb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgZGV2aWNlCisgKiBAdGI6IGdubCBtZXNzYWdlIGZpZWxkcyBmcm9tIHRoZSB1c2VyIHNwYWNlCisgKi8KK3N0YXRpYyBpbnQgaXdsX3Rlc3Rtb2RlX3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IG5sYXR0ciAqKnRiKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXUzMiBvZnMsIHZhbDMyOworCXU4IHZhbDg7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgc3RhdHVzID0gMDsKKworCWlmICghdGJbSVdMX1RNX0FUVFJfUkVHX09GRlNFVF0pIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkVycm9yIGZpbmRpbmcgcmVnaXN0ZXIgb2Zmc2V0XG4iKTsKKwkJcmV0dXJuIC1FTk9NU0c7CisJfQorCW9mcyA9IG5sYV9nZXRfdTMyKHRiW0lXTF9UTV9BVFRSX1JFR19PRkZTRVRdKTsKKwlJV0xfSU5GTyhwcml2LCAidGVzdG1vZGUgcmVnaXN0ZXIgYWNjZXNzIGNvbW1hbmQgb2Zmc2V0IDB4JXhcbiIsIG9mcyk7CisKKwlzd2l0Y2ggKG5sYV9nZXRfdTMyKHRiW0lXTF9UTV9BVFRSX0NPTU1BTkRdKSkgeworCWNhc2UgSVdMX1RNX0NNRF9BUFAyREVWX1JFR19SRUFEMzI6CisJCXZhbDMyID0gaXdsX3JlYWQzMihwcml2LCBvZnMpOworCQlJV0xfSU5GTyhwcml2LCAiMzJiaXQgdmFsdWUgdG8gcmVhZCAweCV4XG4iLCB2YWwzMik7CisKKwkJc2tiID0gY2ZnODAyMTFfdGVzdG1vZGVfYWxsb2NfcmVwbHlfc2tiKGh3LT53aXBoeSwgMjApOworCQlpZiAoIXNrYikgeworCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkVycm9yIGFsbG9jYXRpbmcgbWVtb3J5XG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCU5MQV9QVVRfVTMyKHNrYiwgSVdMX1RNX0FUVFJfUkVHX1ZBTFVFMzIsIHZhbDMyKTsKKwkJc3RhdHVzID0gY2ZnODAyMTFfdGVzdG1vZGVfcmVwbHkoc2tiKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkJCSAgICAgICAiRXJyb3Igc2VuZGluZyBtc2cgOiAlZFxuIiwgc3RhdHVzKTsKKwkJYnJlYWs7CisJY2FzZSBJV0xfVE1fQ01EX0FQUDJERVZfUkVHX1dSSVRFMzI6CisJCWlmICghdGJbSVdMX1RNX0FUVFJfUkVHX1ZBTFVFMzJdKSB7CisJCQlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkJCSAgICAgICAiRXJyb3IgZmluZGluZyB2YWx1ZSB0byB3cml0ZVxuIik7CisJCQlyZXR1cm4gLUVOT01TRzsKKwkJfSBlbHNlIHsKKwkJCXZhbDMyID0gbmxhX2dldF91MzIodGJbSVdMX1RNX0FUVFJfUkVHX1ZBTFVFMzJdKTsKKwkJCUlXTF9JTkZPKHByaXYsICIzMmJpdCB2YWx1ZSB0byB3cml0ZSAweCV4XG4iLCB2YWwzMik7CisJCQlpd2xfd3JpdGUzMihwcml2LCBvZnMsIHZhbDMyKTsKKwkJfQorCQlicmVhazsKKwljYXNlIElXTF9UTV9DTURfQVBQMkRFVl9SRUdfV1JJVEU4OgorCQlpZiAoIXRiW0lXTF9UTV9BVFRSX1JFR19WQUxVRThdKSB7CisJCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiRXJyb3IgZmluZGluZyB2YWx1ZSB0byB3cml0ZVxuIik7CisJCQlyZXR1cm4gLUVOT01TRzsKKwkJfSBlbHNlIHsKKwkJCXZhbDggPSBubGFfZ2V0X3U4KHRiW0lXTF9UTV9BVFRSX1JFR19WQUxVRThdKTsKKwkJCUlXTF9JTkZPKHByaXYsICI4Yml0IHZhbHVlIHRvIHdyaXRlIDB4JXhcbiIsIHZhbDgpOworCQkJaXdsX3dyaXRlOChwcml2LCBvZnMsIHZhbDgpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJVbmtub3duIHRlc3Rtb2RlIHJlZ2lzdGVyIGNvbW1hbmQgSURcbiIpOworCQlyZXR1cm4gLUVOT1NZUzsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworCitubGFfcHV0X2ZhaWx1cmU6CisJa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIC1FTVNHU0laRTsKK30KKworCitzdGF0aWMgaW50IGl3bF90ZXN0bW9kZV9jZmdfaW5pdF9jYWxpYihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJc3RydWN0IGl3bF9ub3RpZmljYXRpb25fd2FpdCBjYWxpYl93YWl0OworCWludCByZXQ7CisKKwlpd2xhZ25faW5pdF9ub3RpZmljYXRpb25fd2FpdChwcml2LCAmY2FsaWJfd2FpdCwKKwkJCQkgICAgICBDQUxJQlJBVElPTl9DT01QTEVURV9OT1RJRklDQVRJT04sCisJCQkJICAgICAgTlVMTCwgTlVMTCk7CisJcmV0ID0gaXdsYWduX2luaXRfYWxpdmVfc3RhcnQocHJpdik7CisJaWYgKHJldCkgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkJIkVycm9yIGNvbmZpZ3VyaW5nIGluaXQgY2FsaWJyYXRpb246ICVkXG4iLCByZXQpOworCQlnb3RvIGNmZ19pbml0X2NhbGliX2Vycm9yOworCX0KKworCXJldCA9IGl3bGFnbl93YWl0X25vdGlmaWNhdGlvbihwcml2LCAmY2FsaWJfd2FpdCwgMiAqIEhaKTsKKwlpZiAocmV0KQorCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiRXJyb3IgZGV0ZWN0aW5nIgorCQkJIiBDQUxJQlJBVElPTl9DT01QTEVURV9OT1RJRklDQVRJT046ICVkXG4iLCByZXQpOworCXJldHVybiByZXQ7CisKK2NmZ19pbml0X2NhbGliX2Vycm9yOgorCWl3bGFnbl9yZW1vdmVfbm90aWZpY2F0aW9uKHByaXYsICZjYWxpYl93YWl0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSB1c2VyIGFwcGxpY2F0aW9uIGNvbW1hbmRzIGZvciBkcml2ZXIuCisgKgorICogSXQgcmV0cmlldmVzIGNvbW1hbmQgSUQgY2FycmllZCB3aXRoIElXTF9UTV9BVFRSX0NPTU1BTkQgYW5kIGNhbGxzIHRvIHRoZQorICogaGFuZGxlcnMgcmVzcGVjdGl2ZWx5LgorICoKKyAqIElmIGl0J3MgYW4gdW5rbm93biBjb21tZG4gSUQsIC1FTk9TWVMgaXMgcmVwbGllZDsgb3RoZXJ3aXNlLCB0aGUgcmV0dXJuZWQKKyAqIHZhbHVlIG9mIHRoZSBhY3R1YWwgY29tbWFuZCBleGVjdXRpb24gaXMgcmVwbGllZCB0byB0aGUgdXNlciBhcHBsaWNhdGlvbi4KKyAqCisgKiBJZiB0aGVyZSdzIGFueSBtZXNzYWdlIHJlc3BvbmRpbmcgdG8gdGhlIHVzZXIgc3BhY2UsIElXTF9UTV9BVFRSX1NZTkNfUlNQCisgKiBpcyB1c2VkIGZvciBjYXJyeSB0aGUgbWVzc2FnZSB3aGlsZSBJV0xfVE1fQVRUUl9DT01NQU5EIG11c3Qgc2V0IHRvCisgKiBJV0xfVE1fQ01EX0RFVjJBUFBfU1lOQ19SU1AuCisgKgorICogQGh3OiBpZWVlODAyMTFfaHcgb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgZGV2aWNlCisgKiBAdGI6IGdubCBtZXNzYWdlIGZpZWxkcyBmcm9tIHRoZSB1c2VyIHNwYWNlCisgKi8KK3N0YXRpYyBpbnQgaXdsX3Rlc3Rtb2RlX2RyaXZlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IG5sYXR0ciAqKnRiKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgY2hhciAqcnNwX2RhdGFfcHRyID0gTlVMTDsKKwlpbnQgc3RhdHVzID0gMCwgcnNwX2RhdGFfbGVuID0gMDsKKworCXN3aXRjaCAobmxhX2dldF91MzIodGJbSVdMX1RNX0FUVFJfQ09NTUFORF0pKSB7CisJY2FzZSBJV0xfVE1fQ01EX0FQUDJERVZfR0VUX0RFVklDRU5BTUU6CisJCXJzcF9kYXRhX3B0ciA9ICh1bnNpZ25lZCBjaGFyICopcHJpdi0+Y2ZnLT5uYW1lOworCQlyc3BfZGF0YV9sZW4gPSBzdHJsZW4ocHJpdi0+Y2ZnLT5uYW1lKTsKKwkJc2tiID0gY2ZnODAyMTFfdGVzdG1vZGVfYWxsb2NfcmVwbHlfc2tiKGh3LT53aXBoeSwKKwkJCQkJCQlyc3BfZGF0YV9sZW4gKyAyMCk7CisJCWlmICghc2tiKSB7CisJCQlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkJCSAgICAgICAiRXJyb3IgYWxsb2NhdGluZyBtZW1vcnlcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJTkxBX1BVVF9VMzIoc2tiLCBJV0xfVE1fQVRUUl9DT01NQU5ELAorCQkJICAgIElXTF9UTV9DTURfREVWMkFQUF9TWU5DX1JTUCk7CisJCU5MQV9QVVQoc2tiLCBJV0xfVE1fQVRUUl9TWU5DX1JTUCwKKwkJCXJzcF9kYXRhX2xlbiwgcnNwX2RhdGFfcHRyKTsKKwkJc3RhdHVzID0gY2ZnODAyMTFfdGVzdG1vZGVfcmVwbHkoc2tiKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiRXJyb3Igc2VuZGluZyBtc2cgOiAlZFxuIiwKKwkJCQkgICAgICAgc3RhdHVzKTsKKwkJYnJlYWs7CisKKwljYXNlIElXTF9UTV9DTURfQVBQMkRFVl9MT0FEX0lOSVRfRlc6CisJCXN0YXR1cyA9IGl3bGFnbl9sb2FkX3Vjb2RlX3dhaXRfYWxpdmUocHJpdiwgJnByaXYtPnVjb2RlX2luaXQsCisJCQkJCSAgIFVDT0RFX1NVQlRZUEVfSU5JVCwgLTEpOworCQlpZiAoc3RhdHVzKQorCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJCQkiRXJyb3IgbG9hZGluZyBpbml0IHVjb2RlOiAlZFxuIiwgc3RhdHVzKTsKKwkJYnJlYWs7CisKKwljYXNlIElXTF9UTV9DTURfQVBQMkRFVl9DRkdfSU5JVF9DQUxJQjoKKwkJaXdsX3Rlc3Rtb2RlX2NmZ19pbml0X2NhbGliKHByaXYpOworCQlpd2xhZ25fc3RvcF9kZXZpY2UocHJpdik7CisJCWJyZWFrOworCisJY2FzZSBJV0xfVE1fQ01EX0FQUDJERVZfTE9BRF9SVU5USU1FX0ZXOgorCQlzdGF0dXMgPSBpd2xhZ25fbG9hZF91Y29kZV93YWl0X2FsaXZlKHByaXYsCisJCQkJCSAgICZwcml2LT51Y29kZV9ydCwKKwkJCQkJICAgVUNPREVfU1VCVFlQRV9SRUdVTEFSLAorCQkJCQkgICBVQ09ERV9TVUJUWVBFX1JFR1VMQVJfTkVXKTsKKwkJaWYgKHN0YXR1cykgeworCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJCQkiRXJyb3IgbG9hZGluZyBydW50aW1lIHVjb2RlOiAlZFxuIiwgc3RhdHVzKTsKKwkJCWJyZWFrOworCQl9CisJCXN0YXR1cyA9IGl3bF9hbGl2ZV9zdGFydChwcml2KTsKKwkJaWYgKHN0YXR1cykKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsCisJCQkJIkVycm9yIHN0YXJ0aW5nIHRoZSBkZXZpY2U6ICVkXG4iLCBzdGF0dXMpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJVbmtub3duIHRlc3Rtb2RlIGRyaXZlciBjb21tYW5kIElEXG4iKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCXJldHVybiBzdGF0dXM7CisKK25sYV9wdXRfZmFpbHVyZToKKwlrZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gLUVNU0dTSVpFOworfQorCisvKiBUaGUgdGVzdG1vZGUgZ25sIG1lc3NhZ2UgaGFuZGxlciB0aGF0IHRha2VzIHRoZSBnbmwgbWVzc2FnZSBmcm9tIHRoZQorICogdXNlciBzcGFjZSBhbmQgcGFyc2VzIGl0IHBlciB0aGUgcG9saWN5IGl3bF90ZXN0bW9kZV9nbmxfbXNnX3BvbGljeSwgdGhlbgorICogaW52b2tlIHRoZSBjb3JyZXNwb25kaW5nIGhhbmRsZXJzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCB3aGVuIHRoZXJlIGlzIHVzZXIgc3BhY2UgYXBwbGljYXRpb24gc2VuZGluZworICogZ25sIG1lc3NhZ2UgdGhyb3VnaCB0aGUgdGVzdG1vZGUgdHVubmVsIE5MODAyMTFfQ01EX1RFU1RNT0RFIHJlZ3VsYXRlZAorICogYnkgbmw4MDIxMS4KKyAqCisgKiBJdCByZXRyaWV2ZXMgdGhlIG1hbmRhdG9yeSBmaWVsZCwgSVdMX1RNX0FUVFJfQ09NTUFORCwgYmVmb3JlCisgKiBkaXNwYXRjaGluZyBpdCB0byB0aGUgY29ycmVzcG9uZGluZyBoYW5kbGVyLgorICoKKyAqIElmIElXTF9UTV9BVFRSX0NPTU1BTkQgaXMgbWlzc2luZywgLUVOT01TRyBpcyByZXBsaWVkIHRvIHVzZXIgYXBwbGljYXRpb247CisgKiAtRU5PU1lTIGlzIHJlcGxpZWQgdG8gdGhlIHVzZXIgYXBwbGljYXRpb24gaWYgdGhlIGNvbW1hbmQgaXMgdW5rbm93bjsKKyAqIE90aGVyd2lzZSwgdGhlIGNvbW1hbmQgaXMgZGlzcGF0Y2hlZCB0byB0aGUgcmVzcGVjdGl2ZSBoYW5kbGVyLgorICoKKyAqIEBodzogaWVlZTgwMjExX2h3IG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlIGRldmljZQorICogQGRhdGE6IHBvaW50ZXIgdG8gdXNlciBzcGFjZSBtZXNzYWdlCisgKiBAbGVuOiBsZW5ndGggaW4gYnl0ZSBvZiBAZGF0YQorICovCitpbnQgaXdsX3Rlc3Rtb2RlX2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbmxhdHRyICp0YltJV0xfVE1fQVRUUl9NQVggLSAxXTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gbmxhX3BhcnNlKHRiLCBJV0xfVE1fQVRUUl9NQVggLSAxLCBkYXRhLCBsZW4sCisJCQlpd2xfdGVzdG1vZGVfZ25sX21zZ19wb2xpY3kpOworCWlmIChyZXN1bHQgIT0gMCkgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkJICAgICAgICJFcnJvciBwYXJzaW5nIHRoZSBnbmwgbWVzc2FnZSA6ICVkXG4iLCByZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qIElXTF9UTV9BVFRSX0NPTU1BTkQgaXMgYWJzb2x1dGVseSBtYW5kYXRvcnkgKi8KKwlpZiAoIXRiW0lXTF9UTV9BVFRSX0NPTU1BTkRdKSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJFcnJvciBmaW5kaW5nIHRlc3Rtb2RlIGNvbW1hbmQgdHlwZVxuIik7CisJCXJldHVybiAtRU5PTVNHOworCX0KKwkvKiBpbiBjYXNlIG11bHRpcGxlIGFjY2Vzc2VzIHRvIHRoZSBkZXZpY2UgaGFwcGVucyAqLworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKworCXN3aXRjaCAobmxhX2dldF91MzIodGJbSVdMX1RNX0FUVFJfQ09NTUFORF0pKSB7CisJY2FzZSBJV0xfVE1fQ01EX0FQUDJERVZfVUNPREU6CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJ0ZXN0bW9kZSBjbWQgdG8gdUNvZGVcbiIpOworCQlyZXN1bHQgPSBpd2xfdGVzdG1vZGVfdWNvZGUoaHcsIHRiKTsKKwkJYnJlYWs7CisJY2FzZSBJV0xfVE1fQ01EX0FQUDJERVZfUkVHX1JFQUQzMjoKKwljYXNlIElXTF9UTV9DTURfQVBQMkRFVl9SRUdfV1JJVEUzMjoKKwljYXNlIElXTF9UTV9DTURfQVBQMkRFVl9SRUdfV1JJVEU4OgorCQlJV0xfREVCVUdfSU5GTyhwcml2LCAidGVzdG1vZGUgY21kIHRvIHJlZ2lzdGVyXG4iKTsKKwkJcmVzdWx0ID0gaXdsX3Rlc3Rtb2RlX3JlZyhodywgdGIpOworCQlicmVhazsKKwljYXNlIElXTF9UTV9DTURfQVBQMkRFVl9HRVRfREVWSUNFTkFNRToKKwljYXNlIElXTF9UTV9DTURfQVBQMkRFVl9MT0FEX0lOSVRfRlc6CisJY2FzZSBJV0xfVE1fQ01EX0FQUDJERVZfQ0ZHX0lOSVRfQ0FMSUI6CisJY2FzZSBJV0xfVE1fQ01EX0FQUDJERVZfTE9BRF9SVU5USU1FX0ZXOgorCQlJV0xfREVCVUdfSU5GTyhwcml2LCAidGVzdG1vZGUgY21kIHRvIGRyaXZlclxuIik7CisJCXJlc3VsdCA9IGl3bF90ZXN0bW9kZV9kcml2ZXIoaHcsIHRiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlVua25vd24gdGVzdG1vZGUgY29tbWFuZFxuIik7CisJCXJlc3VsdCA9IC1FTk9TWVM7CisJCWJyZWFrOworCX0KKworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10ZXN0bW9kZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdGVzdG1vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWY4OTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdGVzdG1vZGUuaApAQCAtMCwwICsxLDE1MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFRoaXMgZmlsZSBpcyBwcm92aWRlZCB1bmRlciBhIGR1YWwgQlNEL0dQTHYyIGxpY2Vuc2UuICBXaGVuIHVzaW5nIG9yCisgKiByZWRpc3RyaWJ1dGluZyB0aGlzIGZpbGUsIHlvdSBtYXkgZG8gc28gdW5kZXIgZWl0aGVyIGxpY2Vuc2UuCisgKgorICogR1BMIExJQ0VOU0UgU1VNTUFSWQorICoKKyAqIENvcHlyaWdodChjKSAyMDEwIC0gMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLAorICogVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KKyAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLkdQTC4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgorICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworICoKKyAqIEJTRCBMSUNFTlNFCisgKgorICogQ29weXJpZ2h0KGMpIDIwMTAgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogICogTmVpdGhlciB0aGUgbmFtZSBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fSVdMX1RFU1RNT0RFX0hfXworI2RlZmluZSBfX0lXTF9URVNUTU9ERV9IX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKworLyogQ29tbWFuZHMgZnJvbSB1c2VyIHNwYWNlIHRvIGtlcm5lbCBzcGFjZShJV0xfVE1fQ01EX0lEX0FQUDJERVZfWFgpIGFuZAorICogZnJvbSBhbmQga2VybmVsIHNwYWNlIHRvIHVzZXIgc3BhY2UoSVdMX1RNX0NNRF9JRF9ERVYyQVBQX1hYKS4KKyAqIFRoZSBjb21tYW5kIElEIGlzIGNhcnJpZWQgd2l0aCBJV0xfVE1fQVRUUl9DT01NQU5ELiBUaGVyZSBhcmUgdGhyZWUgdHlwZXMgb2YKKyAqIG9mIGNvbW1hbmQgZnJvbSB1c2VyIHNwYWNlIGFuZCB0d28gdHlwZXMgb2YgY29tbWFuZCBmcm9tIGtlcm5lbCBzcGFjZS4KKyAqIFNlZSBiZWxvdy4KKyAqLworZW51bSBpd2xfdG1fY21kX3QgeworCS8qIGNvbW1hbmRzIGZyb20gdXNlciBhcHBsaWNhdGlvbiB0byB0aGUgdUNvZGUsCisJICogdGhlIGFjdHVhbCB1Q29kZSBob3N0IGNvbW1hbmQgSUQgaXMgY2FycmllZCB3aXRoCisJICogSVdMX1RNX0FUVFJfVUNPREVfQ01EX0lEICovCisJSVdMX1RNX0NNRF9BUFAyREVWX1VDT0RFID0gMSwKKworCS8qIGNvbW1hbmRzIGZyb20gdXNlciBhcHBsaWNhaXRvbiB0byBhY2Nlc3MgcmVnaXN0ZXIgKi8KKwlJV0xfVE1fQ01EX0FQUDJERVZfUkVHX1JFQUQzMiwKKwlJV0xfVE1fQ01EX0FQUDJERVZfUkVHX1dSSVRFMzIsCisJSVdMX1RNX0NNRF9BUFAyREVWX1JFR19XUklURTgsCisKKwkvKiBjb21tYW5kcyBmb20gdXNlciBzcGFjZSBmb3IgcHVyZSBkcml2ZXIgbGV2ZWwgb3BlcmF0aW9ucyAqLworCUlXTF9UTV9DTURfQVBQMkRFVl9HRVRfREVWSUNFTkFNRSwKKwlJV0xfVE1fQ01EX0FQUDJERVZfTE9BRF9JTklUX0ZXLAorCUlXTF9UTV9DTURfQVBQMkRFVl9DRkdfSU5JVF9DQUxJQiwKKwlJV0xfVE1fQ01EX0FQUDJERVZfTE9BRF9SVU5USU1FX0ZXLAorCS8qIGlmIHRoZXJlIGlzIG90aGVyIG5ldyBjb21tYW5kIGZvciB0aGUgZHJpdmVyIGxheWVyIG9wZXJhdGlvbiwKKwkgKiBhcHBlbmQgdGhlbSBoZXJlICovCisKKworCS8qIGNvbW1hbmRzIGZyb20ga2VybmVsIHNwYWNlIHRvIGNhcnJ5IHRoZSBzeW5jaHJvbm91cyByZXNwb25zZQorCSAqIHRvIHVzZXIgYXBwbGljYXRpb24gKi8KKwlJV0xfVE1fQ01EX0RFVjJBUFBfU1lOQ19SU1AsCisKKwkvKiBjb21tYW5kcyBmcm9tIGtlcm5lbCBzcGFjZSB0byBtdWx0aWNhc3QgdGhlIHNwb250YW5lb3VzIG1lc3NhZ2VzCisJICogdG8gdXNlciBhcHBsaWNhdGlvbiAqLworCUlXTF9UTV9DTURfREVWMkFQUF9VQ09ERV9SWF9QS1QsCisJSVdMX1RNX0NNRF9NQVgsCit9OworCitlbnVtIGl3bF90bV9hdHRyX3QgeworCUlXTF9UTV9BVFRSX05PVF9BUFBMSUNBQkxFID0gMCwKKworCS8qIEZyb20gdXNlciBzcGFjZSB0byBrZXJuZWwgc3BhY2U6CisJICogdGhlIGNvbW1hbmQgZWl0aGVyIGRlc3RpbmVzIHRvIHVjb2RlLCBkcml2ZXIsIG9yIHJlZ2lzdGVyOworCSAqIFNlZSBlbnVtIGl3bF90bV9jbWRfdC4KKwkgKgorCSAqIEZyb20ga2VybmVsIHNwYWNlIHRvIHVzZXIgc3BhY2U6CisJICogdGhlIGNvbW1hbmQgZWl0aGVyIGNhcnJpZXMgc3luY2hyb25vdXMgcmVzcG9uc2UsCisJICogb3IgdGhlIHNwb250YW5lb3VzIG1lc3NhZ2UgbXVsdGljYXN0IGZyb20gdGhlIGRldmljZTsKKwkgKiBTZWUgZW51bSBpd2xfdG1fY21kX3QuICovCisJSVdMX1RNX0FUVFJfQ09NTUFORCwKKworCS8qIFdoZW4gSVdMX1RNX0FUVFJfQ09NTUFORCBpcyBJV0xfVE1fQ01EX0FQUDJERVZfVUNPREUsCisJICogVGhlIG1hbmRhdG9yeSBmaWVsZHMgYXJlIDoKKwkgKiBJV0xfVE1fQVRUUl9VQ09ERV9DTURfSUQgZm9yIHJlY29nbml6YWJsZSBjb21tYW5kIElEOworCSAqIElXTF9UTV9BVFRSX0NPTU1BTkRfRkxBRyBmb3IgdGhlIGZsYWdzIG9mIHRoZSBjb21tYW5kczsKKwkgKiBUaGUgb3B0aW9uYWwgZmllbGRzIGFyZToKKwkgKiBJV0xfVE1fQVRUUl9VQ09ERV9DTURfREFUQSBmb3IgdGhlIGFjdHVhbCBjb21tYW5kIHBheWxvYWQKKwkgKiB0byB0aGUgdWNvZGUgKi8KKwlJV0xfVE1fQVRUUl9VQ09ERV9DTURfSUQsCisJSVdMX1RNX0FUVFJfVUNPREVfQ01EX0RBVEEsCisKKwkvKiBXaGVuIElXTF9UTV9BVFRSX0NPTU1BTkQgaXMgSVdMX1RNX0NNRF9BUFAyREVWX1JFR19YWFgsCisJICogVGhlIG1hbmRhdG9yeSBmaWVsZHMgYXJlOgorCSAqIElXTF9UTV9BVFRSX1JFR19PRkZTRVQgZm9yIHRoZSBvZmZzZXQgb2YgdGhlIHRhcmdldCByZWdpc3RlcjsKKwkgKiBJV0xfVE1fQVRUUl9SRUdfVkFMVUU4IG9yIElXTF9UTV9BVFRSX1JFR19WQUxVRTMyIGZvciB2YWx1ZSAqLworCUlXTF9UTV9BVFRSX1JFR19PRkZTRVQsCisJSVdMX1RNX0FUVFJfUkVHX1ZBTFVFOCwKKwlJV0xfVE1fQVRUUl9SRUdfVkFMVUUzMiwKKworCS8qIFdoZW4gSVdMX1RNX0FUVFJfQ09NTUFORCBpcyBJV0xfVE1fQ01EX0RFVjJBUFBfU1lOQ19SU1AsCisJICogVGhlIG1hbmRhdG9yeSBmaWVsZHMgYXJlOgorCSAqIElXTF9UTV9BVFRSX1NZTkNfUlNQIGZvciB0aGUgZGF0YSBjb250ZW50IHJlc3BvbmRpbmcgdG8gdGhlIHVzZXIKKwkgKiBhcHBsaWNhdGlvbiBjb21tYW5kICovCisJSVdMX1RNX0FUVFJfU1lOQ19SU1AsCisJLyogV2hlbiBJV0xfVE1fQVRUUl9DT01NQU5EIGlzIElXTF9UTV9DTURfREVWMkFQUF9VQ09ERV9SWF9QS1QsCisJICogVGhlIG1hbmRhdG9yeSBmaWVsZHMgYXJlOgorCSAqIElXTF9UTV9BVFRSX1VDT0RFX1JYX1BLVCBmb3IgdGhlIGRhdGEgY29udGVudCBtdWx0aWNhc3QgdG8gdGhlIHVzZXIKKwkgKiBhcHBsaWNhdGlvbiAqLworCUlXTF9UTV9BVFRSX1VDT0RFX1JYX1BLVCwKKworCUlXTF9UTV9BVFRSX01BWCwKK307CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYwppbmRleCAyNzdjOTE3Li5lNjk1OTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXR4LmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDExIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTE0OSwzMiArMTQ5LDMxIEBACiAJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVtwcml2LT5jbWRfcXVldWVdOwogCXN0cnVjdCBpd2xfcXVldWUgKnEgPSAmdHhxLT5xOwogCWludCBpOwotCWJvb2wgaHVnZSA9IGZhbHNlOwogCiAJaWYgKHEtPm5fYmQgPT0gMCkKIAkJcmV0dXJuOwogCiAJd2hpbGUgKHEtPnJlYWRfcHRyICE9IHEtPndyaXRlX3B0cikgewotCQkvKiB3ZSBoYXZlIG5vIHdheSB0byB0ZWxsIGlmIGl0IGlzIGEgaHVnZSBjbWQgQVRNICovCiAJCWkgPSBnZXRfY21kX2luZGV4KHEsIHEtPnJlYWRfcHRyLCAwKTsKIAotCQlpZiAodHhxLT5tZXRhW2ldLmZsYWdzICYgQ01EX1NJWkVfSFVHRSkKLQkJCWh1Z2UgPSB0cnVlOwotCQllbHNlCisJCWlmICh0eHEtPm1ldGFbaV0uZmxhZ3MgJiBDTURfTUFQUEVEKSB7CiAJCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsCiAJCQkJCSBkbWFfdW5tYXBfYWRkcigmdHhxLT5tZXRhW2ldLCBtYXBwaW5nKSwKIAkJCQkJIGRtYV91bm1hcF9sZW4oJnR4cS0+bWV0YVtpXSwgbGVuKSwKIAkJCQkJIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisJCQl0eHEtPm1ldGFbaV0uZmxhZ3MgPSAwOworCQl9CiAKLQkgICAgIHEtPnJlYWRfcHRyID0gaXdsX3F1ZXVlX2luY193cmFwKHEtPnJlYWRfcHRyLCBxLT5uX2JkKTsKKwkJcS0+cmVhZF9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+cmVhZF9wdHIsIHEtPm5fYmQpOwogCX0KIAotCWlmIChodWdlKSB7Ci0JCWkgPSBxLT5uX3dpbmRvdzsKKwlpID0gcS0+bl93aW5kb3c7CisJaWYgKHR4cS0+bWV0YVtpXS5mbGFncyAmIENNRF9NQVBQRUQpIHsKIAkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LAogCQkJCSBkbWFfdW5tYXBfYWRkcigmdHhxLT5tZXRhW2ldLCBtYXBwaW5nKSwKIAkJCQkgZG1hX3VubWFwX2xlbigmdHhxLT5tZXRhW2ldLCBsZW4pLAogCQkJCSBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCQl0eHEtPm1ldGFbaV0uZmxhZ3MgPSAwOwogCX0KIH0KIApAQCAtMjMzLDcgKzIzMiw2IEBACiAgKiByZWNsYWltaW5nIHBhY2tldHMgKG9uICd0eCBkb25lIElSUSksIGlmIGZyZWUgc3BhY2UgYmVjb21lID4gaGlnaCBtYXJrLAogICogVHggcXVldWUgcmVzdW1lZC4KICAqCi0gKiBTZWUgbW9yZSBkZXRhaWxlZCBpbmZvIGluIGl3bC00OTY1LWh3LmguCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBpbnQgaXdsX3F1ZXVlX3NwYWNlKGNvbnN0IHN0cnVjdCBpd2xfcXVldWUgKnEpCkBAIC0yNjUsMTEgKzI2MywxMyBAQAogCiAJLyogY291bnQgbXVzdCBiZSBwb3dlci1vZi10d28gc2l6ZSwgb3RoZXJ3aXNlIGl3bF9xdWV1ZV9pbmNfd3JhcAogCSAqIGFuZCBpd2xfcXVldWVfZGVjX3dyYXAgYXJlIGJyb2tlbi4gKi8KLQlCVUdfT04oIWlzX3Bvd2VyX29mXzIoY291bnQpKTsKKwlpZiAoV0FSTl9PTighaXNfcG93ZXJfb2ZfMihjb3VudCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIHNsb3RzX251bSBtdXN0IGJlIHBvd2VyLW9mLXR3byBzaXplLCBvdGhlcndpc2UKIAkgKiBnZXRfY21kX2luZGV4IGlzIGJyb2tlbi4gKi8KLQlCVUdfT04oIWlzX3Bvd2VyX29mXzIoc2xvdHNfbnVtKSk7CisJaWYgKFdBUk5fT04oIWlzX3Bvd2VyX29mXzIoc2xvdHNfbnVtKSkpCisJCXJldHVybiAtRUlOVkFMOwogCiAJcS0+bG93X21hcmsgPSBxLT5uX3dpbmRvdyAvIDQ7CiAJaWYgKHEtPmxvd19tYXJrIDwgNCkKQEAgLTM4Niw3ICszODYsOSBAQAogCUJVSUxEX0JVR19PTihURkRfUVVFVUVfU0laRV9NQVggJiAoVEZEX1FVRVVFX1NJWkVfTUFYIC0gMSkpOwogCiAJLyogSW5pdGlhbGl6ZSBxdWV1ZSdzIGhpZ2gvbG93LXdhdGVyIG1hcmtzLCBhbmQgaGVhZC90YWlsIGluZGV4ZXMgKi8KLQlpd2xfcXVldWVfaW5pdChwcml2LCAmdHhxLT5xLCBURkRfUVVFVUVfU0laRV9NQVgsIHNsb3RzX251bSwgdHhxX2lkKTsKKwlyZXQgPSBpd2xfcXVldWVfaW5pdChwcml2LCAmdHhxLT5xLCBURkRfUVVFVUVfU0laRV9NQVgsIHNsb3RzX251bSwgdHhxX2lkKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJLyogVGVsbCBkZXZpY2Ugd2hlcmUgdG8gZmluZCBxdWV1ZSAqLwogCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9pbml0KHByaXYsIHR4cSk7CkBAIC00NDAsMjIgKzQ0MiwyNSBAQAogCXN0cnVjdCBpd2xfY21kX21ldGEgKm91dF9tZXRhOwogCWRtYV9hZGRyX3QgcGh5c19hZGRyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGxlbjsKIAl1MzIgaWR4OwogCXUxNiBmaXhfc2l6ZTsKIAlib29sIGlzX2N0X2tpbGwgPSBmYWxzZTsKIAotCWNtZC0+bGVuID0gcHJpdi0+Y2ZnLT5vcHMtPnV0aWxzLT5nZXRfaGNtZF9zaXplKGNtZC0+aWQsIGNtZC0+bGVuKTsKIAlmaXhfc2l6ZSA9ICh1MTYpKGNtZC0+bGVuICsgc2l6ZW9mKG91dF9jbWQtPmhkcikpOwogCi0JLyogSWYgYW55IG9mIHRoZSBjb21tYW5kIHN0cnVjdHVyZXMgZW5kIHVwIGJlaW5nIGxhcmdlciB0aGFuCisJLyoKKwkgKiBJZiBhbnkgb2YgdGhlIGNvbW1hbmQgc3RydWN0dXJlcyBlbmQgdXAgYmVpbmcgbGFyZ2VyIHRoYW4KIAkgKiB0aGUgVEZEX01BWF9QQVlMT0FEX1NJWkUsIGFuZCBpdCBzZW50IGFzIGEgJ3NtYWxsJyBjb21tYW5kIHRoZW4KIAkgKiB3ZSB3aWxsIG5lZWQgdG8gaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIFRGRCBlbnRyaWVzCiAJICogQWxzbywgY2hlY2sgdG8gc2VlIGlmIGNvbW1hbmQgYnVmZmVyIHNob3VsZCBub3QgZXhjZWVkIHRoZSBzaXplCi0JICogb2YgZGV2aWNlX2NtZCBhbmQgbWF4X2NtZF9zaXplLiAqLwotCUJVR19PTigoZml4X3NpemUgPiBURkRfTUFYX1BBWUxPQURfU0laRSkgJiYKLQkgICAgICAgIShjbWQtPmZsYWdzICYgQ01EX1NJWkVfSFVHRSkpOwotCUJVR19PTihmaXhfc2l6ZSA+IElXTF9NQVhfQ01EX1NJWkUpOworCSAqIG9mIGRldmljZV9jbWQgYW5kIG1heF9jbWRfc2l6ZS4KKwkgKi8KKwlpZiAoV0FSTl9PTigoZml4X3NpemUgPiBURkRfTUFYX1BBWUxPQURfU0laRSkgJiYKKwkJICAgICEoY21kLT5mbGFncyAmIENNRF9TSVpFX0hVR0UpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoV0FSTl9PTihmaXhfc2l6ZSA+IElXTF9NQVhfQ01EX1NJWkUpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChpd2xfaXNfcmZraWxsKHByaXYpIHx8IGl3bF9pc19jdGtpbGwocHJpdikpIHsKIAkJSVdMX1dBUk4ocHJpdiwgIk5vdCBzZW5kaW5nIGNvbW1hbmQgLSAlcyBLSUxMXG4iLApAQCAtNDYzLDM1ICs0NjgsMzggQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JaWYgKGl3bF9xdWV1ZV9zcGFjZShxKSA8ICgoY21kLT5mbGFncyAmIENNRF9BU1lOQykgPyAyIDogMSkpIHsKLQkJSVdMX0VSUihwcml2LCAiTm8gc3BhY2UgaW4gY29tbWFuZCBxdWV1ZVxuIik7Ci0JCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT50dF9vcHMuY3Rfa2lsbF9jaGVjaykgewotCQkJaXNfY3Rfa2lsbCA9Ci0JCQkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHRfb3BzLmN0X2tpbGxfY2hlY2socHJpdik7Ci0JCX0KLQkJaWYgKCFpc19jdF9raWxsKSB7Ci0JCQlJV0xfRVJSKHByaXYsICJSZXN0YXJ0aW5nIGFkYXB0ZXIgZHVlIHRvIHF1ZXVlIGZ1bGxcbiIpOwotCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKLQkJfQotCQlyZXR1cm4gLUVOT1NQQzsKLQl9CisJLyoKKwkgKiBBcyB3ZSBvbmx5IGhhdmUgYSBzaW5nbGUgaHVnZSBidWZmZXIsIGNoZWNrIHRoYXQgdGhlIGNvbW1hbmQKKwkgKiBpcyBzeW5jaHJvbm91cyAob3RoZXJ3aXNlIGJ1ZmZlcnMgY291bGQgZW5kIHVwIGJlaW5nIHJldXNlZCkuCisJICovCisKKwlpZiAoV0FSTl9PTigoY21kLT5mbGFncyAmIENNRF9BU1lOQykgJiYgKGNtZC0+ZmxhZ3MgJiBDTURfU0laRV9IVUdFKSkpCisJCXJldHVybiAtRUlOVkFMOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmhjbWRfbG9jaywgZmxhZ3MpOwogCi0JLyogSWYgdGhpcyBpcyBhIGh1Z2UgY21kLCBtYXJrIHRoZSBodWdlIGZsYWcgYWxzbyBvbiB0aGUgbWV0YS5mbGFncwotCSAqIG9mIHRoZSBfb3JpZ2luYWxfIGNtZC4gVGhpcyBpcyB1c2VkIGZvciBETUEgbWFwcGluZyBjbGVhbiB1cC4KLQkgKi8KLQlpZiAoY21kLT5mbGFncyAmIENNRF9TSVpFX0hVR0UpIHsKLQkJaWR4ID0gZ2V0X2NtZF9pbmRleChxLCBxLT53cml0ZV9wdHIsIDApOwotCQl0eHEtPm1ldGFbaWR4XS5mbGFncyA9IENNRF9TSVpFX0hVR0U7CisJaWYgKGl3bF9xdWV1ZV9zcGFjZShxKSA8ICgoY21kLT5mbGFncyAmIENNRF9BU1lOQykgPyAyIDogMSkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+aGNtZF9sb2NrLCBmbGFncyk7CisKKwkJSVdMX0VSUihwcml2LCAiTm8gc3BhY2UgaW4gY29tbWFuZCBxdWV1ZVxuIik7CisJCWlzX2N0X2tpbGwgPSBpd2xfY2hlY2tfZm9yX2N0X2tpbGwocHJpdik7CisJCWlmICghaXNfY3Rfa2lsbCkgeworCQkJSVdMX0VSUihwcml2LCAiUmVzdGFydGluZyBhZGFwdGVyIGR1ZSB0byBxdWV1ZSBmdWxsXG4iKTsKKwkJCWl3bGFnbl9md19lcnJvcihwcml2LCBmYWxzZSk7CisJCX0KKwkJcmV0dXJuIC1FTk9TUEM7CiAJfQogCiAJaWR4ID0gZ2V0X2NtZF9pbmRleChxLCBxLT53cml0ZV9wdHIsIGNtZC0+ZmxhZ3MgJiBDTURfU0laRV9IVUdFKTsKIAlvdXRfY21kID0gdHhxLT5jbWRbaWR4XTsKIAlvdXRfbWV0YSA9ICZ0eHEtPm1ldGFbaWR4XTsKIAorCWlmIChXQVJOX09OKG91dF9tZXRhLT5mbGFncyAmIENNRF9NQVBQRUQpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmhjbWRfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVOT1NQQzsKKwl9CisKIAltZW1zZXQob3V0X21ldGEsIDAsIHNpemVvZigqb3V0X21ldGEpKTsJLyogcmUtaW5pdGlhbGl6ZSB0byBOVUxMICovCi0Jb3V0X21ldGEtPmZsYWdzID0gY21kLT5mbGFnczsKIAlpZiAoY21kLT5mbGFncyAmIENNRF9XQU5UX1NLQikKIAkJb3V0X21ldGEtPnNvdXJjZSA9IGNtZDsKIAlpZiAoY21kLT5mbGFncyAmIENNRF9BU1lOQykKQEAgLTUwOCw5ICs1MTYsNiBAQAogCQkJSU5ERVhfVE9fU0VRKHEtPndyaXRlX3B0cikpOwogCWlmIChjbWQtPmZsYWdzICYgQ01EX1NJWkVfSFVHRSkKIAkJb3V0X2NtZC0+aGRyLnNlcXVlbmNlIHw9IFNFUV9IVUdFX0ZSQU1FOwotCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsX2RldmljZV9jbWQpOwotCWlmIChpZHggPT0gVEZEX0NNRF9TTE9UUykKLQkJbGVuID0gSVdMX01BWF9DTURfU0laRTsKIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAJc3dpdGNoIChvdXRfY21kLT5oZHIuY21kKSB7CkBAIC01MzIsMTcgKzUzNywyMCBAQAogCQkJCXEtPndyaXRlX3B0ciwgaWR4LCBwcml2LT5jbWRfcXVldWUpOwogCX0KICNlbmRpZgotCXR4cS0+bmVlZF91cGRhdGUgPSAxOwotCi0JaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnR4cV91cGRhdGVfYnl0ZV9jbnRfdGJsKQotCQkvKiBTZXQgdXAgZW50cnkgaW4gcXVldWUncyBieXRlIGNvdW50IGNpcmN1bGFyIGJ1ZmZlciAqLwotCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfdXBkYXRlX2J5dGVfY250X3RibChwcml2LCB0eHEsIDApOwotCiAJcGh5c19hZGRyID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwgJm91dF9jbWQtPmhkciwKIAkJCQkgICBmaXhfc2l6ZSwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKwlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHByaXYtPnBjaV9kZXYsIHBoeXNfYWRkcikpKSB7CisJCWlkeCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwogCWRtYV91bm1hcF9hZGRyX3NldChvdXRfbWV0YSwgbWFwcGluZywgcGh5c19hZGRyKTsKIAlkbWFfdW5tYXBfbGVuX3NldChvdXRfbWV0YSwgbGVuLCBmaXhfc2l6ZSk7CiAKKwlvdXRfbWV0YS0+ZmxhZ3MgPSBjbWQtPmZsYWdzIHwgQ01EX01BUFBFRDsKKworCXR4cS0+bmVlZF91cGRhdGUgPSAxOworCiAJdHJhY2VfaXdsd2lmaV9kZXZfaGNtZChwcml2LCAmb3V0X2NtZC0+aGRyLCBmaXhfc2l6ZSwgY21kLT5mbGFncyk7CiAKIAlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdHhxLApAQCAtNTUzLDYgKzU2MSw3IEBACiAJcS0+d3JpdGVfcHRyID0gaXdsX3F1ZXVlX2luY193cmFwKHEtPndyaXRlX3B0ciwgcS0+bl9iZCk7CiAJaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHByaXYsIHR4cSk7CiAKKyBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+aGNtZF9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIGlkeDsKIH0KQEAgLTU4NCw3ICs1OTMsNyBAQAogCQlpZiAobmZyZWVkKysgPiAwKSB7CiAJCQlJV0xfRVJSKHByaXYsICJIQ01EIHNraXBwZWQ6IGluZGV4ICglZCkgJWQgJWRcbiIsIGlkeCwKIAkJCQkJcS0+d3JpdGVfcHRyLCBxLT5yZWFkX3B0cik7Ci0JCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJlc3RhcnQpOworCQkJaXdsYWduX2Z3X2Vycm9yKHByaXYsIGZhbHNlKTsKIAkJfQogCiAJfQpAQCAtNjA5LDYgKzYxOCw3IEBACiAJc3RydWN0IGl3bF9kZXZpY2VfY21kICpjbWQ7CiAJc3RydWN0IGl3bF9jbWRfbWV0YSAqbWV0YTsKIAlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW3ByaXYtPmNtZF9xdWV1ZV07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIElmIGEgVHggY29tbWFuZCBpcyBiZWluZyBoYW5kbGVkIGFuZCBpdCBpc24ndCBpbiB0aGUgYWN0dWFsCiAJICogY29tbWFuZCBxdWV1ZSB0aGVuIHRoZXJlIGEgY29tbWFuZCByb3V0aW5nIGJ1ZyBoYXMgYmVlbiBpbnRyb2R1Y2VkCkBAIC02MjIsMTQgKzYzMiw2IEBACiAJCXJldHVybjsKIAl9CiAKLQkvKiBJZiB0aGlzIGlzIGEgaHVnZSBjbWQsIGNsZWFyIHRoZSBodWdlIGZsYWcgb24gdGhlIG1ldGEuZmxhZ3MKLQkgKiBvZiB0aGUgX29yaWdpbmFsXyBjbWQuIFNvIHRoYXQgaXdsX2NtZF9xdWV1ZV9mcmVlIHdvbid0IHVubWFwCi0JICogdGhlIERNQSBidWZmZXIgZm9yIHRoZSBzY2FuIChodWdlKSBjb21tYW5kLgotCSAqLwotCWlmIChodWdlKSB7Ci0JCWNtZF9pbmRleCA9IGdldF9jbWRfaW5kZXgoJnR4cS0+cSwgaW5kZXgsIDApOwotCQl0eHEtPm1ldGFbY21kX2luZGV4XS5mbGFncyA9IDA7Ci0JfQogCWNtZF9pbmRleCA9IGdldF9jbWRfaW5kZXgoJnR4cS0+cSwgaW5kZXgsIGh1Z2UpOwogCWNtZCA9IHR4cS0+Y21kW2NtZF9pbmRleF07CiAJbWV0YSA9ICZ0eHEtPm1ldGFbY21kX2luZGV4XTsKQEAgLTY0Niw2ICs2NDgsOCBAQAogCX0gZWxzZSBpZiAobWV0YS0+Y2FsbGJhY2spCiAJCW1ldGEtPmNhbGxiYWNrKHByaXYsIGNtZCwgcGt0KTsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5oY21kX2xvY2ssIGZsYWdzKTsKKwogCWl3bF9oY21kX3F1ZXVlX3JlY2xhaW0ocHJpdiwgdHhxX2lkLCBpbmRleCwgY21kX2luZGV4KTsKIAogCWlmICghKG1ldGEtPmZsYWdzICYgQ01EX0FTWU5DKSkgewpAQCAtNjU0LDUgKzY1OCw5IEBACiAJCQkgICAgICAgZ2V0X2NtZF9zdHJpbmcoY21kLT5oZHIuY21kKSk7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKIAl9CisKKwkvKiBNYXJrIGFzIHVubWFwcGVkICovCiAJbWV0YS0+ZmxhZ3MgPSAwOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+aGNtZF9sb2NrLCBmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9yeC5jCmluZGV4IDlhNTdjZjYuLjU2NjVhMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9yeC5jCkBAIC0xNTc2LDcgKzE1NzYsOCBAQAogCUlXTV9IRVhEVU1QKGl3bSwgREJHLCBSWCwgIkEtTVNEVTogIiwgc2tiLT5kYXRhLCBza2ItPmxlbik7CiAKIAlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmxpc3QpOwotCWllZWU4MDIxMV9hbXNkdV90b184MDIzcyhza2IsICZsaXN0LCBuZGV2LT5kZXZfYWRkciwgd2Rldi0+aWZ0eXBlLCAwKTsKKwlpZWVlODAyMTFfYW1zZHVfdG9fODAyM3Moc2tiLCAmbGlzdCwgbmRldi0+ZGV2X2FkZHIsIHdkZXYtPmlmdHlwZSwgMCwKKwkJCQkJCQkJCXRydWUpOwogCiAJd2hpbGUgKChmcmFtZSA9IF9fc2tiX2RlcXVldWUoJmxpc3QpKSkgewogCQluZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jZmcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NmZy5jCmluZGV4IDVjYWEyYWMuLjVkNjM3YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NmZy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NmZy5jCkBAIC02LDYgKzYsOCBAQAogICoKICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC0xMjIsOCArMTI0LDEwIEBACiB9CiAKIAotLyogVmFyaW91cyBmaXJtd2FyZSBjb21tYW5kcyBuZWVkIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCByYXRlcywgYnV0IHdpdGgKLSAgIHRoZSBoaWdodC1iaXQgc2V0IGZvciBiYXNpYyByYXRlcyAqLworLyoKKyAqIFZhcmlvdXMgZmlybXdhcmUgY29tbWFuZHMgbmVlZCB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgcmF0ZXMsIGJ1dCB3aXRoCisgKiB0aGUgaGlnaHQtYml0IHNldCBmb3IgYmFzaWMgcmF0ZXMKKyAqLwogc3RhdGljIGludCBsYnNfYWRkX3JhdGVzKHU4ICpyYXRlcykKIHsKIAlzaXplX3QgaTsKQEAgLTQyNSw3ICs0MjksNyBAQAogCXJldHVybiBpZV9sZW4gKyAyOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKgogICogU2V0IENoYW5uZWwKICAqLwogCkBAIC00NTIsNyArNDU2LDcgQEAKIAogCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qCiAgKiBTY2FubmluZwogICovCiAKQEAgLTUzOCw4ICs1NDIsMTAgQEAKIAkJZ290byBkb25lOwogCX0KIAotCS8qIFZhbGlkaXR5IGNoZWNrOiB0aGUgVExWIGhvbGRzIFRTRiB2YWx1ZXMgd2l0aCA4IGJ5dGVzIGVhY2gsIHNvCi0JICogdGhlIHNpemUgaW4gdGhlIFRMViBtdXN0IG1hdGNoIHRoZSBucl9zZXRzIHZhbHVlICovCisJLyoKKwkgKiBWYWxpZGl0eSBjaGVjazogdGhlIFRMViBob2xkcyBUU0YgdmFsdWVzIHdpdGggOCBieXRlcyBlYWNoLCBzbworCSAqIHRoZSBzaXplIGluIHRoZSBUTFYgbXVzdCBtYXRjaCB0aGUgbnJfc2V0cyB2YWx1ZQorCSAqLwogCWkgPSBnZXRfdW5hbGlnbmVkX2xlMTYodHNmZGVzYyk7CiAJdHNmZGVzYyArPSAyOwogCWlmIChpIC8gOCAhPSBzY2FucmVzcC0+bnJfc2V0cykgewpAQCAtNTgxLDggKzU4NywxMCBAQAogCiAJCS8qIFRvIGZpbmQgb3V0IHRoZSBjaGFubmVsLCB3ZSBtdXN0IHBhcnNlIHRoZSBJRXMgKi8KIAkJaWUgPSBwb3M7Ci0JCS8qIDYrMSs4KzIrMjogc2l6ZSBvZiBCU1NJRCwgUlNTSSwgdGltZSBzdGFtcCwgYmVhY29uCi0JCSAgIGludGVydmFsLCBjYXBhYmlsaXRpZXMgKi8KKwkJLyoKKwkJICogNisxKzgrMisyOiBzaXplIG9mIEJTU0lELCBSU1NJLCB0aW1lIHN0YW1wLCBiZWFjb24KKwkJICogaW50ZXJ2YWwsIGNhcGFiaWxpdGllcworCQkgKi8KIAkJaWVsZW4gPSBsZWZ0ID0gbGVuIC0gKDYgKyAxICsgOCArIDIgKyAyKTsKIAkJd2hpbGUgKGxlZnQgPj0gMikgewogCQkJdTggaWQsIGVsZW47CkBAIC03OTAsNyArNzk4LDcgQEAKIAogCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qCiAgKiBFdmVudHMKICAqLwogCkBAIC04MjUsNyArODMzLDcgQEAKIAogCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qCiAgKiBDb25uZWN0L2Rpc2Nvbm5lY3QKICAqLwogCkBAIC05NTAsOCArOTU4LDEwIEBACiAgKiBTZXQgV1BBL1dQQSBrZXkgbWF0ZXJpYWwKICAqLwogCi0vKiBsaWtlICJzdHJ1Y3QgY21kX2RzXzgwMl8xMV9rZXlfbWF0ZXJpYWwiLCBidXQgd2l0aCBjbWRfaGVhZGVyLiBPbmNlIHdlCi0gKiBnZXQgcmlkIG9mIFdFWFQsIHRoaXMgc2hvdWxkIGdvIGludG8gaG9zdC5oICovCisvKgorICogbGlrZSAic3RydWN0IGNtZF9kc184MDJfMTFfa2V5X21hdGVyaWFsIiwgYnV0IHdpdGggY21kX2hlYWRlci4gT25jZSB3ZQorICogZ2V0IHJpZCBvZiBXRVhULCB0aGlzIHNob3VsZCBnbyBpbnRvIGhvc3QuaAorICovCiAKIHN0cnVjdCBjbWRfa2V5X21hdGVyaWFsIHsKIAlzdHJ1Y3QgY21kX2hlYWRlciBoZHI7CkBAIC0xMzE0LDggKzEzMjQsOCBAQAogCQlzbWUtPnNzaWQsIHNtZS0+c3NpZF9sZW4sCiAJCVdMQU5fQ0FQQUJJTElUWV9FU1MsIFdMQU5fQ0FQQUJJTElUWV9FU1MpOwogCWlmICghYnNzKSB7Ci0JCWxic19wcl9lcnIoImFzc29jOiBic3MgJXBNIG5vdCBpbiBzY2FuIHJlc3VsdHNcbiIsCi0JCQkgICBzbWUtPmJzc2lkKTsKKwkJd2lwaHlfZXJyKHdpcGh5LCAiYXNzb2M6IGJzcyAlcE0gbm90IGluIHNjYW4gcmVzdWx0c1xuIiwKKwkJCSAgc21lLT5ic3NpZCk7CiAJCXJldCA9IC1FTk9FTlQ7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0xMzcyLDggKzEzODIsOCBAQAogCQlsYnNfZW5hYmxlX3Jzbihwcml2LCBzbWUtPmNyeXB0by5jaXBoZXJfZ3JvdXAgIT0gMCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWxic19wcl9lcnIoInVuc3VwcG9ydGVkIGNpcGhlciBncm91cCAweCV4XG4iLAotCQkJICAgc21lLT5jcnlwdG8uY2lwaGVyX2dyb3VwKTsKKwkJd2lwaHlfZXJyKHdpcGh5LCAidW5zdXBwb3J0ZWQgY2lwaGVyIGdyb3VwIDB4JXhcbiIsCisJCQkgIHNtZS0+Y3J5cHRvLmNpcGhlcl9ncm91cCk7CiAJCXJldCA9IC1FTk9UU1VQUDsKIAkJZ290byBkb25lOwogCX0KQEAgLTE0OTEsNyArMTUwMSw3IEBACiAJCQkJICAgICBwYXJhbXMtPmtleSwgcGFyYW1zLT5rZXlfbGVuKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJbGJzX3ByX2VycigidW5oYW5kbGVkIGNpcGhlciAweCV4XG4iLCBwYXJhbXMtPmNpcGhlcik7CisJCXdpcGh5X2Vycih3aXBoeSwgInVuaGFuZGxlZCBjaXBoZXIgMHgleFxuIiwgcGFyYW1zLT5jaXBoZXIpOwogCQlyZXQgPSAtRU5PVFNVUFA7CiAJCWJyZWFrOwogCX0KQEAgLTE1MzYsNyArMTU0Niw3IEBACiB9CiAKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyoKICAqIEdldCBzdGF0aW9uCiAgKi8KIApAQCAtMTU4MSw3ICsxNTkxLDcgQEAKIAogCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qCiAgKiAiU2l0ZSBzdXJ2ZXkiLCBoZXJlIGp1c3QgY3VycmVudCBjaGFubmVsIGFuZCBub2lzZSBsZXZlbAogICovCiAKQEAgLTE2MTQsNyArMTYyNCw3IEBACiAKIAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKgogICogQ2hhbmdlIGludGVyZmFjZQogICovCiAKQEAgLTE2NTYsMTEgKzE2NjYsMTIgQEAKIAogCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qCiAgKiBJQlNTIChBZC1Ib2MpCiAgKi8KIAotLyogVGhlIGZpcm13YXJlIG5lZWRzIHRoZSBmb2xsb3dpbmcgYml0cyBtYXNrZWQgb3V0IG9mIHRoZSBiZWFjb24tZGVyaXZlZAorLyoKKyAqIFRoZSBmaXJtd2FyZSBuZWVkcyB0aGUgZm9sbG93aW5nIGJpdHMgbWFza2VkIG91dCBvZiB0aGUgYmVhY29uLWRlcml2ZWQKICAqIGNhcGFiaWxpdHkgZmllbGQgd2hlbiBhc3NvY2lhdGluZy9qb2luaW5nIHRvIGEgQlNTOgogICogIDkgKFFvUyksIDExIChBUFNEKSwgMTIgKHVudXNlZCksIDE0ICh1bnVzZWQpLCAxNSAodW51c2VkKQogICovCkBAIC0xOTk5LDcgKzIwMTAsNyBAQAogCiAKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyoKICAqIEluaXRpYWxpemF0aW9uCiAgKi8KIApAQCAtMjExOCwxMyArMjEyOSwxMyBAQAogCiAJcmV0ID0gd2lwaHlfcmVnaXN0ZXIod2Rldi0+d2lwaHkpOwogCWlmIChyZXQgPCAwKQotCQlsYnNfcHJfZXJyKCJjYW5ub3QgcmVnaXN0ZXIgd2lwaHkgZGV2aWNlXG4iKTsKKwkJcHJfZXJyKCJjYW5ub3QgcmVnaXN0ZXIgd2lwaHkgZGV2aWNlXG4iKTsKIAogCXByaXYtPndpcGh5X3JlZ2lzdGVyZWQgPSB0cnVlOwogCiAJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KHByaXYtPmRldik7CiAJaWYgKHJldCkKLQkJbGJzX3ByX2VycigiY2Fubm90IHJlZ2lzdGVyIG5ldHdvcmsgZGV2aWNlXG4iKTsKKwkJcHJfZXJyKCJjYW5ub3QgcmVnaXN0ZXIgbmV0d29yayBkZXZpY2VcbiIpOwogCiAJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPnNjYW5fd29yaywgbGJzX3NjYW5fd29ya2VyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYwppbmRleCA3ZThhNjU4Li44NDU2NmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYwpAQCAtMSw3ICsxLDcgQEAKLS8qKgotICAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaGFuZGxpbmcgb2YgY29tbWFuZC4KLSAgKiBJdCBwcmVwYXJlcyBjb21tYW5kIGFuZCBzZW5kcyBpdCB0byBmaXJtd2FyZSB3aGVuIGl0IGlzIHJlYWR5LgotICAqLworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaGFuZGxpbmcgb2YgY29tbWFuZC4KKyAqIEl0IHByZXBhcmVzIGNvbW1hbmQgYW5kIHNlbmRzIGl0IHRvIGZpcm13YXJlIHdoZW4gaXQgaXMgcmVhZHkuCisgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTE2LDE0ICsxNiwxNCBAQAogI2RlZmluZSBDQUxfUlNTSShzbnIsIG5mKQkoKHMzMikoKHMzMikoc25yKSArIENBTF9ORihuZikpKQogCiAvKioKLSAqICBAYnJpZWYgU2ltcGxlIGNhbGxiYWNrIHRoYXQgY29waWVzIHJlc3BvbnNlIGJhY2sgaW50byBjb21tYW5kCisgKiBsYnNfY21kX2NvcHliYWNrIC0gU2ltcGxlIGNhbGxiYWNrIHRoYXQgY29waWVzIHJlc3BvbnNlIGJhY2sgaW50byBjb21tYW5kCiAgKgotICogIEBwYXJhbSBwcml2ICAgIAlBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEBwYXJhbSBleHRyYSAgCUEgcG9pbnRlciB0byB0aGUgb3JpZ2luYWwgY29tbWFuZCBzdHJ1Y3R1cmUgZm9yIHdoaWNoCi0gKiAgICAgICAgICAgICAgICAgICAgICAncmVzcCcgaXMgYSByZXNwb25zZQotICogIEBwYXJhbSByZXNwICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIHJlc3BvbnNlCisgKiBAcHJpdjoJQSBwb2ludGVyIHRvICZzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKiBAZXh0cmE6CUEgcG9pbnRlciB0byB0aGUgb3JpZ2luYWwgY29tbWFuZCBzdHJ1Y3R1cmUgZm9yIHdoaWNoCisgKgkJJ3Jlc3AnIGlzIGEgcmVzcG9uc2UKKyAqIEByZXNwOglBIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgcmVzcG9uc2UKICAqCi0gKiAgQHJldHVybiAJICAgCTAgb24gc3VjY2VzcywgZXJyb3Igb24gZmFpbHVyZQorICogcmV0dXJuczoJMCBvbiBzdWNjZXNzLCBlcnJvciBvbiBmYWlsdXJlCiAgKi8KIGludCBsYnNfY21kX2NvcHliYWNrKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdW5zaWduZWQgbG9uZyBleHRyYSwKIAkJICAgICBzdHJ1Y3QgY21kX2hlYWRlciAqcmVzcCkKQEAgLTM4LDE1ICszOCwxNSBAQAogRVhQT1JUX1NZTUJPTF9HUEwobGJzX2NtZF9jb3B5YmFjayk7CiAKIC8qKgotICogIEBicmllZiBTaW1wbGUgY2FsbGJhY2sgdGhhdCBpZ25vcmVzIHRoZSByZXN1bHQuIFVzZSB0aGlzIGlmCi0gKiAgeW91IGp1c3Qgd2FudCB0byBzZW5kIGEgY29tbWFuZCB0byB0aGUgaGFyZHdhcmUsIGJ1dCBkb24ndAorICogIGxic19jbWRfYXN5bmNfY2FsbGJhY2sgLSBTaW1wbGUgY2FsbGJhY2sgdGhhdCBpZ25vcmVzIHRoZSByZXN1bHQuCisgKiAgVXNlIHRoaXMgaWYgeW91IGp1c3Qgd2FudCB0byBzZW5kIGEgY29tbWFuZCB0byB0aGUgaGFyZHdhcmUsIGJ1dCBkb24ndAogICogIGNhcmUgZm9yIHRoZSByZXN1bHQuCiAgKgotICogIEBwYXJhbSBwcml2ICAgICAgICAgaWdub3JlZAotICogIEBwYXJhbSBleHRyYSAgICAgICAgaWdub3JlZAotICogIEBwYXJhbSByZXNwICAgICAgICAgaWdub3JlZAorICogIEBwcml2OglpZ25vcmVkCisgKiAgQGV4dHJhOglpZ25vcmVkCisgKiAgQHJlc3A6CWlnbm9yZWQKICAqCi0gKiAgQHJldHVybiAJICAgCTAgZm9yIHN1Y2Nlc3MKKyAqICByZXR1cm5zOgkwIGZvciBzdWNjZXNzCiAgKi8KIHN0YXRpYyBpbnQgbGJzX2NtZF9hc3luY19jYWxsYmFjayhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHVuc2lnbmVkIGxvbmcgZXh0cmEsCiAJCSAgICAgc3RydWN0IGNtZF9oZWFkZXIgKnJlc3ApCkBAIC01NiwxMCArNTYsMTEgQEAKIAogCiAvKioKLSAqICBAYnJpZWYgQ2hlY2tzIHdoZXRoZXIgYSBjb21tYW5kIGlzIGFsbG93ZWQgaW4gUG93ZXIgU2F2ZSBtb2RlCisgKiAgaXNfY29tbWFuZF9hbGxvd2VkX2luX3BzIC0gdGVzdHMgaWYgYSBjb21tYW5kIGlzIGFsbG93ZWQgaW4gUG93ZXIgU2F2ZSBtb2RlCiAgKgotICogIEBwYXJhbSBjb21tYW5kIHRoZSBjb21tYW5kIElECi0gKiAgQHJldHVybiAJICAgMSBpZiBhbGxvd2VkLCAwIGlmIG5vdCBhbGxvd2VkCisgKiAgQGNtZDoJdGhlIGNvbW1hbmQgSUQKKyAqCisgKiAgcmV0dXJuczoJMSBpZiBhbGxvd2VkLCAwIGlmIG5vdCBhbGxvd2VkCiAgKi8KIHN0YXRpYyB1OCBpc19jb21tYW5kX2FsbG93ZWRfaW5fcHModTE2IGNtZCkKIHsKQEAgLTc1LDExICs3NiwxMiBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgVXBkYXRlcyB0aGUgaGFyZHdhcmUgZGV0YWlscyBsaWtlIE1BQyBhZGRyZXNzIGFuZCByZWd1bGF0b3J5IHJlZ2lvbgorICogIGxic191cGRhdGVfaHdfc3BlYyAtIFVwZGF0ZXMgdGhlIGhhcmR3YXJlIGRldGFpbHMgbGlrZSBNQUMgYWRkcmVzcworICogIGFuZCByZWd1bGF0b3J5IHJlZ2lvbgogICoKLSAqICBAcGFyYW0gcHJpdiAgICAJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqICBAcHJpdjoJQSBwb2ludGVyIHRvICZzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCiAgKgotICogIEByZXR1cm4gCSAgIAkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKKyAqICByZXR1cm5zOgkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKICAqLwogaW50IGxic191cGRhdGVfaHdfc3BlYyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCiB7CkBAIC0xMDgsNyArMTEwLDcgQEAKIAkgKiBDRiBjYXJkICAgIGZpcm13YXJlIDUuMC4xNnAwOiAgIGNhcCAweDAwMDAwMzAzCiAJICogVVNCIGRvbmdsZSBmaXJtd2FyZSA1LjExMC4xN3AyOiBjYXAgMHgwMDAwMDMwMwogCSAqLwotCWxic19wcl9pbmZvKCIlcE0sIGZ3ICV1LiV1LiV1cCV1LCBjYXAgMHglMDh4XG4iLAorCW5ldGRldl9pbmZvKHByaXYtPmRldiwgIiVwTSwgZncgJXUuJXUuJXVwJXUsIGNhcCAweCUwOHhcbiIsCiAJCWNtZC5wZXJtYW5lbnRhZGRyLAogCQlwcml2LT5md3JlbGVhc2UgPj4gMjQgJiAweGZmLAogCQlwcml2LT5md3JlbGVhc2UgPj4gMTYgJiAweGZmLApAQCAtMTM5LDcgKzE0MSw4IEBACiAJLyogaWYgaXQncyB1bmlkZW50aWZpZWQgcmVnaW9uIGNvZGUsIHVzZSB0aGUgZGVmYXVsdCAoVVNBKSAqLwogCWlmIChpID49IE1SVkRSVl9NQVhfUkVHSU9OX0NPREUpIHsKIAkJcHJpdi0+cmVnaW9uY29kZSA9IDB4MTA7Ci0JCWxic19wcl9pbmZvKCJ1bmlkZW50aWZpZWQgcmVnaW9uIGNvZGU7IHVzaW5nIHRoZSBkZWZhdWx0IChVU0EpXG4iKTsKKwkJbmV0ZGV2X2luZm8ocHJpdi0+ZGV2LAorCQkJICAgICJ1bmlkZW50aWZpZWQgcmVnaW9uIGNvZGU7IHVzaW5nIHRoZSBkZWZhdWx0IChVU0EpXG4iKTsKIAl9CiAKIAlpZiAocHJpdi0+Y3VycmVudF9hZGRyWzBdID09IDB4ZmYpCkBAIC0yMDksNyArMjEyLDcgQEAKIAkJCQkJKHVpbnQ4X3QgKikmY21kX2NvbmZpZy53b2xfY29uZiwKIAkJCQkJc2l6ZW9mKHN0cnVjdCB3b2xfY29uZmlnKSk7CiAJfSBlbHNlIHsKLQkJbGJzX3ByX2luZm8oIkhPU1RfU0xFRVBfQ0ZHIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJbmV0ZGV2X2luZm8ocHJpdi0+ZGV2LCAiSE9TVF9TTEVFUF9DRkcgZmFpbGVkICVkXG4iLCByZXQpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0yMTcsMTQgKzIyMCwxNCBAQAogRVhQT1JUX1NZTUJPTF9HUEwobGJzX2hvc3Rfc2xlZXBfY2ZnKTsKIAogLyoqCi0gKiAgQGJyaWVmIFNldHMgdGhlIFBvd2VyIFNhdmUgbW9kZQorICogIGxic19zZXRfcHNfbW9kZSAtIFNldHMgdGhlIFBvd2VyIFNhdmUgbW9kZQogICoKLSAqICBAcGFyYW0gcHJpdiAgICAJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gY21kX2FjdGlvbglUaGUgUG93ZXIgU2F2ZSBvcGVyYXRpb24gKFBTX01PREVfQUNUSU9OX0VOVEVSX1BTIG9yCisgKiAgQHByaXY6CUEgcG9pbnRlciB0byAmc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQorICogIEBjbWRfYWN0aW9uOiBUaGUgUG93ZXIgU2F2ZSBvcGVyYXRpb24gKFBTX01PREVfQUNUSU9OX0VOVEVSX1BTIG9yCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICBQU19NT0RFX0FDVElPTl9FWElUX1BTKQotICogIEBwYXJhbSBibG9jawlXaGV0aGVyIHRvIGJsb2NrIG9uIGEgcmVzcG9uc2Ugb3Igbm90CisgKiAgQGJsb2NrOglXaGV0aGVyIHRvIGJsb2NrIG9uIGEgcmVzcG9uc2Ugb3Igbm90CiAgKgotICogIEByZXR1cm4gCSAgIAkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKKyAqICByZXR1cm5zOgkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKICAqLwogaW50IGxic19zZXRfcHNfbW9kZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHUxNiBjbWRfYWN0aW9uLCBib29sIGJsb2NrKQogewpAQCAtMzEyLDcgKzMxNSw3IEBACiAJaWYgKHByaXYtPmlzX2RlZXBfc2xlZXApIHsKIAkJaWYgKCF3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChwcml2LT5kc19hd2FrZV9xLAogCQkJCQkhcHJpdi0+aXNfZGVlcF9zbGVlcCwgKDEwICogSFopKSkgewotCQkJbGJzX3ByX2VycigiZHNfYXdha2VfcTogdGltZXIgZXhwaXJlZFxuIik7CisJCQluZXRkZXZfZXJyKHByaXYtPmRldiwgImRzX2F3YWtlX3E6IHRpbWVyIGV4cGlyZWRcbiIpOwogCQkJcmV0ID0gLTE7CiAJCX0KIAl9CkBAIC0zMzcsNyArMzQwLDcgQEAKIAkJCQluZXRpZl9jYXJyaWVyX29mZihwcml2LT5kZXYpOwogCQkJfQogCQl9IGVsc2UgewotCQkJbGJzX3ByX2VycigiZGVlcCBzbGVlcDogYWxyZWFkeSBlbmFibGVkXG4iKTsKKwkJCW5ldGRldl9lcnIocHJpdi0+ZGV2LCAiZGVlcCBzbGVlcDogYWxyZWFkeSBlbmFibGVkXG4iKTsKIAkJfQogCX0gZWxzZSB7CiAJCWlmIChwcml2LT5pc19kZWVwX3NsZWVwKSB7CkBAIC0zNDcsOCArMzUwLDggQEAKIAkJCWlmICghcmV0KSB7CiAJCQkJcmV0ID0gbGJzX3dhaXRfZm9yX2RzX2F3YWtlKHByaXYpOwogCQkJCWlmIChyZXQpCi0JCQkJCWxic19wcl9lcnIoImRlZXAgc2xlZXA6IHdha2V1cCIKLQkJCQkJCQkiZmFpbGVkXG4iKTsKKwkJCQkJbmV0ZGV2X2Vycihwcml2LT5kZXYsCisJCQkJCQkgICAiZGVlcCBzbGVlcDogd2FrZXVwIGZhaWxlZFxuIik7CiAJCQl9CiAJCX0KIAl9CkBAIC0zODIsOCArMzg1LDkgQEAKIAkJCXJldCA9IGxic19ob3N0X3NsZWVwX2NmZyhwcml2LCBwcml2LT53b2xfY3JpdGVyaWEsCiAJCQkJCShzdHJ1Y3Qgd29sX2NvbmZpZyAqKU5VTEwpOwogCQkJaWYgKHJldCkgewotCQkJCWxic19wcl9pbmZvKCJIb3N0IHNsZWVwIGNvbmZpZ3VyYXRpb24gZmFpbGVkOiAiCi0JCQkJCQkiJWRcbiIsIHJldCk7CisJCQkJbmV0ZGV2X2luZm8ocHJpdi0+ZGV2LAorCQkJCQkgICAgIkhvc3Qgc2xlZXAgY29uZmlndXJhdGlvbiBmYWlsZWQ6ICVkXG4iLAorCQkJCQkgICAgcmV0KTsKIAkJCQlyZXR1cm4gcmV0OwogCQkJfQogCQkJaWYgKHByaXYtPnBzc3RhdGUgPT0gUFNfU1RBVEVfRlVMTF9QT1dFUikgewpAQCAtMzkzLDE5ICszOTcsMjEgQEAKIAkJCQkJCXNpemVvZihjbWQpLAogCQkJCQkJbGJzX3JldF9ob3N0X3NsZWVwX2FjdGl2YXRlLCAwKTsKIAkJCQlpZiAocmV0KQotCQkJCQlsYnNfcHJfaW5mbygiSE9TVF9TTEVFUF9BQ1RJVkFURSAiCi0JCQkJCQkJImZhaWxlZDogJWRcbiIsIHJldCk7CisJCQkJCW5ldGRldl9pbmZvKHByaXYtPmRldiwKKwkJCQkJCSAgICAiSE9TVF9TTEVFUF9BQ1RJVkFURSBmYWlsZWQ6ICVkXG4iLAorCQkJCQkJICAgIHJldCk7CiAJCQl9CiAKIAkJCWlmICghd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoCiAJCQkJCQlwcml2LT5ob3N0X3NsZWVwX3EsCiAJCQkJCQlwcml2LT5pc19ob3N0X3NsZWVwX2FjdGl2YXRlZCwKIAkJCQkJCSgxMCAqIEhaKSkpIHsKLQkJCQlsYnNfcHJfZXJyKCJob3N0X3NsZWVwX3E6IHRpbWVyIGV4cGlyZWRcbiIpOworCQkJCW5ldGRldl9lcnIocHJpdi0+ZGV2LAorCQkJCQkgICAiaG9zdF9zbGVlcF9xOiB0aW1lciBleHBpcmVkXG4iKTsKIAkJCQlyZXQgPSAtMTsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCWxic19wcl9lcnIoImhvc3Qgc2xlZXA6IGFscmVhZHkgZW5hYmxlZFxuIik7CisJCQluZXRkZXZfZXJyKHByaXYtPmRldiwgImhvc3Qgc2xlZXA6IGFscmVhZHkgZW5hYmxlZFxuIik7CiAJCX0KIAl9IGVsc2UgewogCQlpZiAocHJpdi0+aXNfaG9zdF9zbGVlcF9hY3RpdmF0ZWQpCkBAIC00MTcsMTMgKzQyMywxMyBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgU2V0IGFuIFNOTVAgTUlCIHZhbHVlCisgKiAgbGJzX3NldF9zbm1wX21pYiAtIFNldCBhbiBTTk1QIE1JQiB2YWx1ZQogICoKLSAqICBAcGFyYW0gcHJpdiAgICAJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gb2lkICAJVGhlIE9JRCB0byBzZXQgaW4gdGhlIGZpcm13YXJlCi0gKiAgQHBhcmFtIHZhbCAgCVZhbHVlIHRvIHNldCB0aGUgT0lEIHRvCisgKiAgQHByaXY6CUEgcG9pbnRlciB0byAmc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQorICogIEBvaWQ6CVRoZSBPSUQgdG8gc2V0IGluIHRoZSBmaXJtd2FyZQorICogIEB2YWw6CVZhbHVlIHRvIHNldCB0aGUgT0lEIHRvCiAgKgotICogIEByZXR1cm4gCSAgIAkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKKyAqICByZXR1cm5zOiAJICAgCTAgb24gc3VjY2VzcywgZXJyb3Igb24gZmFpbHVyZQogICovCiBpbnQgbGJzX3NldF9zbm1wX21pYihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHUzMiBvaWQsIHUxNiB2YWwpCiB7CkBAIC00NjcsMTMgKzQ3MywxMyBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgR2V0IGFuIFNOTVAgTUlCIHZhbHVlCisgKiAgbGJzX2dldF9zbm1wX21pYiAtIEdldCBhbiBTTk1QIE1JQiB2YWx1ZQogICoKLSAqICBAcGFyYW0gcHJpdiAgICAJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gb2lkICAJVGhlIE9JRCB0byByZXRyaWV2ZSBmcm9tIHRoZSBmaXJtd2FyZQotICogIEBwYXJhbSBvdXRfdmFsICAJTG9jYXRpb24gZm9yIHRoZSByZXR1cm5lZCB2YWx1ZQorICogIEBwcml2OglBIHBvaW50ZXIgdG8gJnN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqICBAb2lkOglUaGUgT0lEIHRvIHJldHJpZXZlIGZyb20gdGhlIGZpcm13YXJlCisgKiAgQG91dF92YWw6CUxvY2F0aW9uIGZvciB0aGUgcmV0dXJuZWQgdmFsdWUKICAqCi0gKiAgQHJldHVybiAJICAgCTAgb24gc3VjY2VzcywgZXJyb3Igb24gZmFpbHVyZQorICogIHJldHVybnM6CTAgb24gc3VjY2VzcywgZXJyb3Igb24gZmFpbHVyZQogICovCiBpbnQgbGJzX2dldF9zbm1wX21pYihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHUzMiBvaWQsIHUxNiAqb3V0X3ZhbCkKIHsKQEAgLTUxMCwxNCArNTE2LDE0IEBACiB9CiAKIC8qKgotICogIEBicmllZiBHZXQgdGhlIG1pbiwgbWF4LCBhbmQgY3VycmVudCBUWCBwb3dlcgorICogIGxic19nZXRfdHhfcG93ZXIgLSBHZXQgdGhlIG1pbiwgbWF4LCBhbmQgY3VycmVudCBUWCBwb3dlcgogICoKLSAqICBAcGFyYW0gcHJpdiAgICAJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gY3VybGV2ZWwgIAlDdXJyZW50IHBvd2VyIGxldmVsIGluIGRCbQotICogIEBwYXJhbSBtaW5sZXZlbCAgCU1pbmltdW0gc3VwcG9ydGVkIHBvd2VyIGxldmVsIGluIGRCbSAob3B0aW9uYWwpCi0gKiAgQHBhcmFtIG1heGxldmVsICAJTWF4aW11bSBzdXBwb3J0ZWQgcG93ZXIgbGV2ZWwgaW4gZEJtIChvcHRpb25hbCkKKyAqICBAcHJpdjoJQSBwb2ludGVyIHRvICZzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKiAgQGN1cmxldmVsOglDdXJyZW50IHBvd2VyIGxldmVsIGluIGRCbQorICogIEBtaW5sZXZlbDoJTWluaW11bSBzdXBwb3J0ZWQgcG93ZXIgbGV2ZWwgaW4gZEJtIChvcHRpb25hbCkKKyAqICBAbWF4bGV2ZWw6CU1heGltdW0gc3VwcG9ydGVkIHBvd2VyIGxldmVsIGluIGRCbSAob3B0aW9uYWwpCiAgKgotICogIEByZXR1cm4gCSAgIAkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKKyAqICByZXR1cm5zOgkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKICAqLwogaW50IGxic19nZXRfdHhfcG93ZXIoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBzMTYgKmN1cmxldmVsLCBzMTYgKm1pbmxldmVsLAogCQkgICAgIHMxNiAqbWF4bGV2ZWwpCkBAIC01NDUsMTIgKzU1MSwxMiBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgU2V0IHRoZSBUWCBwb3dlcgorICogIGxic19zZXRfdHhfcG93ZXIgLSBTZXQgdGhlIFRYIHBvd2VyCiAgKgotICogIEBwYXJhbSBwcml2ICAgIAlBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEBwYXJhbSBkYm0gIAlUaGUgZGVzaXJlZCBwb3dlciBsZXZlbCBpbiBkQm0KKyAqICBAcHJpdjoJQSBwb2ludGVyIHRvICZzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKiAgQGRibToJVGhlIGRlc2lyZWQgcG93ZXIgbGV2ZWwgaW4gZEJtCiAgKgotICogIEByZXR1cm4gCSAgIAkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKKyAqICByZXR1cm5zOiAJICAgCTAgb24gc3VjY2VzcywgZXJyb3Igb24gZmFpbHVyZQogICovCiBpbnQgbGJzX3NldF90eF9wb3dlcihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHMxNiBkYm0pCiB7CkBAIC01NzMsMTIgKzU3OSwxMyBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgRW5hYmxlIG9yIGRpc2FibGUgbW9uaXRvciBtb2RlIChvbmx5IGltcGxlbWVudGVkIG9uIE9MUEMgdXNiODM4OCBGVykKKyAqICBsYnNfc2V0X21vbml0b3JfbW9kZSAtIEVuYWJsZSBvciBkaXNhYmxlIG1vbml0b3IgbW9kZQorICogIChvbmx5IGltcGxlbWVudGVkIG9uIE9MUEMgdXNiODM4OCBGVykKICAqCi0gKiAgQHBhcmFtIHByaXYgICAgICAgIEEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHBhcmFtIGVuYWJsZSAgICAgIDEgdG8gZW5hYmxlIG1vbml0b3IgbW9kZSwgMCB0byBkaXNhYmxlCisgKiAgQHByaXY6CUEgcG9pbnRlciB0byAmc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQorICogIEBlbmFibGU6CTEgdG8gZW5hYmxlIG1vbml0b3IgbW9kZSwgMCB0byBkaXNhYmxlCiAgKgotICogIEByZXR1cm4gICAgICAgICAgICAwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKKyAqICByZXR1cm5zOgkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKICAqLwogaW50IGxic19zZXRfbW9uaXRvcl9tb2RlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgaW50IGVuYWJsZSkKIHsKQEAgLTYwNCwxMSArNjExLDExIEBACiB9CiAKIC8qKgotICogIEBicmllZiBHZXQgdGhlIHJhZGlvIGNoYW5uZWwKKyAqICBsYnNfZ2V0X2NoYW5uZWwgLSBHZXQgdGhlIHJhZGlvIGNoYW5uZWwKICAqCi0gKiAgQHBhcmFtIHByaXYgICAgCUEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKiAgQHByaXY6CUEgcG9pbnRlciB0byAmc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQogICoKLSAqICBAcmV0dXJuIAkgICAJVGhlIGNoYW5uZWwgb24gc3VjY2VzcywgZXJyb3Igb24gZmFpbHVyZQorICogIHJldHVybnM6CVRoZSBjaGFubmVsIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKICAqLwogc3RhdGljIGludCBsYnNfZ2V0X2NoYW5uZWwoc3RydWN0IGxic19wcml2YXRlICpwcml2KQogewpAQCAtNjUwLDEyICs2NTcsMTIgQEAKIH0KIAogLyoqCi0gKiAgQGJyaWVmIFNldCB0aGUgcmFkaW8gY2hhbm5lbAorICogIGxic19zZXRfY2hhbm5lbCAtIFNldCB0aGUgcmFkaW8gY2hhbm5lbAogICoKLSAqICBAcGFyYW0gcHJpdiAgICAJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gY2hhbm5lbCAgCVRoZSBkZXNpcmVkIGNoYW5uZWwsIG9yIDAgdG8gY2xlYXIgYSBsb2NrZWQgY2hhbm5lbAorICogIEBwcml2OglBIHBvaW50ZXIgdG8gJnN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqICBAY2hhbm5lbDoJVGhlIGRlc2lyZWQgY2hhbm5lbCwgb3IgMCB0byBjbGVhciBhIGxvY2tlZCBjaGFubmVsCiAgKgotICogIEByZXR1cm4gCSAgIAkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKKyAqICByZXR1cm5zOgkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKICAqLwogaW50IGxic19zZXRfY2hhbm5lbChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHU4IGNoYW5uZWwpCiB7CkBAIC02ODYsMTIgKzY5MywxMyBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgR2V0IGN1cnJlbnQgUlNTSSBhbmQgbm9pc2UgZmxvb3IKKyAqIGxic19nZXRfcnNzaSAtIEdldCBjdXJyZW50IFJTU0kgYW5kIG5vaXNlIGZsb29yCiAgKgotICogIEBwYXJhbSBwcml2CQlBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEBwYXJhbSByc3NpCQlPbiBzdWNjZXNzZnVsIHJldHVybiwgc2lnbmFsIGxldmVsIGluIG1CbQorICogQHByaXY6CUEgcG9pbnRlciB0byAmc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQorICogQHJzc2k6CU9uIHN1Y2Nlc3NmdWwgcmV0dXJuLCBzaWduYWwgbGV2ZWwgaW4gbUJtCisgKiBAbmY6CQlPbiBzdWNjZXNzZnVsIHJldHVybiwgTm9pc2UgZmxvb3IKICAqCi0gKiAgQHJldHVybiAJICAgCVRoZSBjaGFubmVsIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKKyAqIHJldHVybnM6CVRoZSBjaGFubmVsIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKICAqLwogaW50IGxic19nZXRfcnNzaShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHM4ICpyc3NpLCBzOCAqbmYpCiB7CkBAIC03MTksMTMgKzcyNywxNCBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgU2VuZCByZWd1bGF0b3J5IGFuZCA4MDIuMTFkIGRvbWFpbiBpbmZvcm1hdGlvbiB0byB0aGUgZmlybXdhcmUKKyAqICBsYnNfc2V0XzExZF9kb21haW5faW5mbyAtIFNlbmQgcmVndWxhdG9yeSBhbmQgODAyLjExZCBkb21haW4gaW5mb3JtYXRpb24KKyAqICB0byB0aGUgZmlybXdhcmUKICAqCi0gKiAgQHBhcmFtIHByaXYJCXBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlCi0gKiAgQHBhcmFtIHJlcXVlc3QJY2ZnODAyMTEgcmVndWxhdG9yeSByZXF1ZXN0IHN0cnVjdHVyZQotICogIEBwYXJhbSBiYW5kcwl0aGUgZGV2aWNlJ3Mgc3VwcG9ydGVkIGJhbmRzIGFuZCBjaGFubmVscworICogIEBwcml2Oglwb2ludGVyIHRvICZzdHJ1Y3QgbGJzX3ByaXZhdGUKKyAqICBAcmVxdWVzdDoJY2ZnODAyMTEgcmVndWxhdG9yeSByZXF1ZXN0IHN0cnVjdHVyZQorICogIEBiYW5kczoJdGhlIGRldmljZSdzIHN1cHBvcnRlZCBiYW5kcyBhbmQgY2hhbm5lbHMKICAqCi0gKiAgQHJldHVybgkJMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGZhaWx1cmUKKyAqICByZXR1cm5zOgkwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZQogKi8KIGludCBsYnNfc2V0XzExZF9kb21haW5faW5mbyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCiAJCQkgICAgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCwKQEAgLTg0MiwxNSArODUxLDE1IEBACiB9CiAKIC8qKgotICogIEBicmllZiBSZWFkIGEgTUFDLCBCYXNlYmFuZCwgb3IgUkYgcmVnaXN0ZXIKKyAqICBsYnNfZ2V0X3JlZyAtIFJlYWQgYSBNQUMsIEJhc2ViYW5kLCBvciBSRiByZWdpc3RlcgogICoKLSAqICBAcGFyYW0gcHJpdgkJcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUKLSAqICBAcGFyYW0gY21kCQlyZWdpc3RlciBjb21tYW5kLCBvbmUgb2YgQ01EX01BQ19SRUdfQUNDRVNTLAotICogICAgICAgICAgICAgICAgICAgICAgICBDTURfQkJQX1JFR19BQ0NFU1MsIG9yIENNRF9SRl9SRUdfQUNDRVNTCi0gKiAgQHBhcmFtIG9mZnNldCAgICAgICBieXRlIG9mZnNldCBvZiB0aGUgcmVnaXN0ZXIgdG8gZ2V0Ci0gKiAgQHBhcmFtIHZhbHVlICAgICAgICBvbiBzdWNjZXNzLCB0aGUgdmFsdWUgb2YgdGhlIHJlZ2lzdGVyIGF0ICdvZmZzZXQnCisgKiAgQHByaXY6CXBvaW50ZXIgdG8gJnN0cnVjdCBsYnNfcHJpdmF0ZQorICogIEByZWc6CXJlZ2lzdGVyIGNvbW1hbmQsIG9uZSBvZiBDTURfTUFDX1JFR19BQ0NFU1MsCisgKgkJQ01EX0JCUF9SRUdfQUNDRVNTLCBvciBDTURfUkZfUkVHX0FDQ0VTUworICogIEBvZmZzZXQ6CWJ5dGUgb2Zmc2V0IG9mIHRoZSByZWdpc3RlciB0byBnZXQKKyAqICBAdmFsdWU6CW9uIHN1Y2Nlc3MsIHRoZSB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgYXQgJ29mZnNldCcKICAqCi0gKiAgQHJldHVybgkJMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGZhaWx1cmUKKyAqICByZXR1cm5zOgkwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZQogKi8KIGludCBsYnNfZ2V0X3JlZyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHUxNiByZWcsIHUxNiBvZmZzZXQsIHUzMiAqdmFsdWUpCiB7CkBAIC04ODYsMTUgKzg5NSwxNSBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgV3JpdGUgYSBNQUMsIEJhc2ViYW5kLCBvciBSRiByZWdpc3RlcgorICogIGxic19zZXRfcmVnIC0gV3JpdGUgYSBNQUMsIEJhc2ViYW5kLCBvciBSRiByZWdpc3RlcgogICoKLSAqICBAcGFyYW0gcHJpdgkJcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUKLSAqICBAcGFyYW0gY21kCQlyZWdpc3RlciBjb21tYW5kLCBvbmUgb2YgQ01EX01BQ19SRUdfQUNDRVNTLAotICogICAgICAgICAgICAgICAgICAgICAgICBDTURfQkJQX1JFR19BQ0NFU1MsIG9yIENNRF9SRl9SRUdfQUNDRVNTCi0gKiAgQHBhcmFtIG9mZnNldCAgICAgICBieXRlIG9mZnNldCBvZiB0aGUgcmVnaXN0ZXIgdG8gc2V0Ci0gKiAgQHBhcmFtIHZhbHVlICAgICAgICB0aGUgdmFsdWUgdG8gd3JpdGUgdG8gdGhlIHJlZ2lzdGVyIGF0ICdvZmZzZXQnCisgKiAgQHByaXY6CXBvaW50ZXIgdG8gJnN0cnVjdCBsYnNfcHJpdmF0ZQorICogIEByZWc6CXJlZ2lzdGVyIGNvbW1hbmQsIG9uZSBvZiBDTURfTUFDX1JFR19BQ0NFU1MsCisgKgkJQ01EX0JCUF9SRUdfQUNDRVNTLCBvciBDTURfUkZfUkVHX0FDQ0VTUworICogIEBvZmZzZXQ6CWJ5dGUgb2Zmc2V0IG9mIHRoZSByZWdpc3RlciB0byBzZXQKKyAqICBAdmFsdWU6CXRoZSB2YWx1ZSB0byB3cml0ZSB0byB0aGUgcmVnaXN0ZXIgYXQgJ29mZnNldCcKICAqCi0gKiAgQHJldHVybgkJMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGZhaWx1cmUKKyAqICByZXR1cm5zOgkwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZQogKi8KIGludCBsYnNfc2V0X3JlZyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHUxNiByZWcsIHUxNiBvZmZzZXQsIHUzMiB2YWx1ZSkKIHsKQEAgLTEwMDIsNyArMTAxMSw4IEBACiAJcmV0ID0gcHJpdi0+aHdfaG9zdF90b19jYXJkKHByaXYsIE1WTVNfQ01ELCAodTggKikgY21kLCBjbWRzaXplKTsKIAogCWlmIChyZXQpIHsKLQkJbGJzX3ByX2luZm8oIkROTERfQ01EOiBod19ob3N0X3RvX2NhcmQgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJbmV0ZGV2X2luZm8ocHJpdi0+ZGV2LCAiRE5MRF9DTUQ6IGh3X2hvc3RfdG9fY2FyZCBmYWlsZWQ6ICVkXG4iLAorCQkJICAgIHJldCk7CiAJCS8qIExldCB0aGUgdGltZXIga2ljayBpbiBhbmQgcmV0cnksIGFuZCBwb3RlbnRpYWxseSByZXNldAogCQkgICB0aGUgd2hvbGUgdGhpbmcgaWYgdGhlIGNvbmRpdGlvbiBwZXJzaXN0cyAqLwogCQl0aW1lbyA9IEhaLzQ7CkBAIC0xMDIzLDcgKzEwMzMsNyBAQAogCWxic19kZWJfbGVhdmUoTEJTX0RFQl9IT1NUKTsKIH0KIAotLyoqCisvKgogICogIFRoaXMgZnVuY3Rpb24gaW5zZXJ0cyBjb21tYW5kIG5vZGUgdG8gY21kZnJlZXEKICAqICBhZnRlciBjbGVhbnMgaXQuIFJlcXVpcmVzIHByaXYtPmRyaXZlcl9sb2NrIGhlbGQuCiAgKi8KQEAgLTExMjUsMTEgKzExMzUsMTIgQEAKIH0KIAogLyoqCi0gKiAgQGJyaWVmIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIHRoZSBjb21tYW5kIGJ1ZmZlciBhbmQgbGluawotICogIGl0IHRvIGNvbW1hbmQgZnJlZSBxdWV1ZS4KKyAqICBsYnNfYWxsb2NhdGVfY21kX2J1ZmZlciAtIGFsbG9jYXRlcyB0aGUgY29tbWFuZCBidWZmZXIgYW5kIGxpbmtzCisgKiAgaXQgdG8gY29tbWFuZCBmcmVlIHF1ZXVlCiAgKgotICogIEBwYXJhbSBwcml2CQlBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEByZXR1cm4gCQkwIG9yIC0xCisgKiAgQHByaXY6CUEgcG9pbnRlciB0byAmc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQorICoKKyAqICByZXR1cm5zOgkwIGZvciBzdWNjZXNzIG9yIC0xIG9uIGVycm9yCiAgKi8KIGludCBsYnNfYWxsb2NhdGVfY21kX2J1ZmZlcihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCiB7CkBAIC0xMTcxLDEwICsxMTgyLDExIEBACiB9CiAKIC8qKgotICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIGZyZWVzIHRoZSBjb21tYW5kIGJ1ZmZlci4KKyAqICBsYnNfZnJlZV9jbWRfYnVmZmVyIC0gZnJlZSB0aGUgY29tbWFuZCBidWZmZXIKICAqCi0gKiAgQHBhcmFtIHByaXYJCUEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHJldHVybiAJCTAgb3IgLTEKKyAqICBAcHJpdjoJQSBwb2ludGVyIHRvICZzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKgorICogIHJldHVybnM6CTAgZm9yIHN1Y2Nlc3MKICAqLwogaW50IGxic19mcmVlX2NtZF9idWZmZXIoc3RydWN0IGxic19wcml2YXRlICpwcml2KQogewpAQCAtMTIxMSwxMSArMTIyMywxMyBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBnZXRzIGEgZnJlZSBjb21tYW5kIG5vZGUgaWYgYXZhaWxhYmxlIGluCi0gKiAgY29tbWFuZCBmcmVlIHF1ZXVlLgorICogIGxic19nZXRfZnJlZV9jbWRfbm9kZSAtIGdldHMgYSBmcmVlIGNvbW1hbmQgbm9kZSBpZiBhdmFpbGFibGUgaW4KKyAqICBjb21tYW5kIGZyZWUgcXVldWUKICAqCi0gKiAgQHBhcmFtIHByaXYJCUEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHJldHVybiBjbWRfY3RybF9ub2RlIEEgcG9pbnRlciB0byBjbWRfY3RybF9ub2RlIHN0cnVjdHVyZSBvciBOVUxMCisgKiAgQHByaXY6CUEgcG9pbnRlciB0byAmc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQorICoKKyAqICByZXR1cm5zOglBIHBvaW50ZXIgdG8gJmNtZF9jdHJsX25vZGUgc3RydWN0dXJlIG9uIHN1Y2Nlc3MKKyAqCQlvciAlTlVMTCBvbiBlcnJvcgogICovCiBzdGF0aWMgc3RydWN0IGNtZF9jdHJsX25vZGUgKmxic19nZXRfZnJlZV9jbWRfbm9kZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCiB7CkBAIC0xMjQ1LDEyICsxMjU5LDEyIEBACiB9CiAKIC8qKgotICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIGV4ZWN1dGVzIG5leHQgY29tbWFuZCBpbiBjb21tYW5kCi0gKiAgcGVuZGluZyBxdWV1ZS4gSXQgd2lsbCBwdXQgZmlybXdhcmUgYmFjayB0byBQUyBtb2RlCi0gKiAgaWYgYXBwbGljYWJsZS4KKyAqICBsYnNfZXhlY3V0ZV9uZXh0X2NvbW1hbmQgLSBleGVjdXRlIG5leHQgY29tbWFuZCBpbiBjb21tYW5kCisgKiAgcGVuZGluZyBxdWV1ZS4gV2lsbCBwdXQgZmlybXdhcmUgYmFjayB0byBQUyBtb2RlIGlmIGFwcGxpY2FibGUuCiAgKgotICogIEBwYXJhbSBwcml2ICAgICBBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEByZXR1cm4gCSAgIDAgb3IgLTEKKyAqICBAcHJpdjoJQSBwb2ludGVyIHRvICZzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKgorICogIHJldHVybnM6CTAgb24gc3VjY2VzcyBvciAtMSBvbiBlcnJvcgogICovCiBpbnQgbGJzX2V4ZWN1dGVfbmV4dF9jb21tYW5kKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKIHsKQEAgLTEyNjcsNyArMTI4MSw4IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CiAKIAlpZiAocHJpdi0+Y3VyX2NtZCkgewotCQlsYnNfcHJfYWxlcnQoICJFWEVDX05FWFRfQ01EOiBhbHJlYWR5IHByb2Nlc3NpbmcgY29tbWFuZCFcbiIpOworCQluZXRkZXZfYWxlcnQocHJpdi0+ZGV2LAorCQkJICAgICAiRVhFQ19ORVhUX0NNRDogYWxyZWFkeSBwcm9jZXNzaW5nIGNvbW1hbmQhXG4iKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAkJcmV0ID0gLTE7CiAJCWdvdG8gZG9uZTsKQEAgLTEzMzksOCArMTM1NCw4IEBACiAJCQkJICAgIGNwdV90b19sZTE2KFBTX01PREVfQUNUSU9OX0VYSVRfUFMpKSB7CiAJCQkJCWxic19kZWJfaG9zdCgKIAkJCQkJICAgICAgICJFWEVDX05FWFRfQ01EOiBpZ25vcmUgRU5URVJfUFMgY21kXG4iKTsKLQkJCQkJbGlzdF9kZWwoJmNtZG5vZGUtPmxpc3QpOwogCQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKKwkJCQkJbGlzdF9kZWwoJmNtZG5vZGUtPmxpc3QpOwogCQkJCQlsYnNfY29tcGxldGVfY29tbWFuZChwcml2LCBjbWRub2RlLCAwKTsKIAkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKIApAQCAtMTM1Miw4ICsxMzY3LDggQEAKIAkJCQkgICAgKHByaXYtPnBzc3RhdGUgPT0gUFNfU1RBVEVfUFJFX1NMRUVQKSkgewogCQkJCQlsYnNfZGViX2hvc3QoCiAJCQkJCSAgICAgICAiRVhFQ19ORVhUX0NNRDogaWdub3JlIEVYSVRfUFMgY21kIGluIHNsZWVwXG4iKTsKLQkJCQkJbGlzdF9kZWwoJmNtZG5vZGUtPmxpc3QpOwogCQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKKwkJCQkJbGlzdF9kZWwoJmNtZG5vZGUtPmxpc3QpOwogCQkJCQlsYnNfY29tcGxldGVfY29tbWFuZChwcml2LCBjbWRub2RlLCAwKTsKIAkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAkJCQkJcHJpdi0+bmVlZHRvd2FrZXVwID0gMTsKQEAgLTEzNjYsNyArMTM4MSw5IEBACiAJCQkJICAgICAgICJFWEVDX05FWFRfQ01EOiBzZW5kaW5nIEVYSVRfUFNcbiIpOwogCQkJfQogCQl9CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOwogCQlsaXN0X2RlbCgmY21kbm9kZS0+bGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CiAJCWxic19kZWJfaG9zdCgiRVhFQ19ORVhUX0NNRDogc2VuZGluZyBjb21tYW5kIDB4JTA0eFxuIiwKIAkJCSAgICBsZTE2X3RvX2NwdShjbWQtPmNvbW1hbmQpKTsKIAkJbGJzX3N1Ym1pdF9jb21tYW5kKHByaXYsIGNtZG5vZGUpOwpAQCAtMTQyOSw3ICsxNDQ2LDcgQEAKIAlyZXQgPSBwcml2LT5od19ob3N0X3RvX2NhcmQocHJpdiwgTVZNU19DTUQsICh1OCAqKSAmY29uZmlybV9zbGVlcCwKIAkJc2l6ZW9mKGNvbmZpcm1fc2xlZXApKTsKIAlpZiAocmV0KSB7Ci0JCWxic19wcl9hbGVydCgiY29uZmlybV9zbGVlcCBmYWlsZWRcbiIpOworCQluZXRkZXZfYWxlcnQocHJpdi0+ZGV2LCAiY29uZmlybV9zbGVlcCBmYWlsZWRcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTE0NTQsMTIgKzE0NzEsMTIgQEAKIH0KIAogLyoqCi0gKiAgQGJyaWVmIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGNvbmRpdGlvbiBhbmQgcHJlcGFyZXMgdG8KLSAqICBzZW5kIHNsZWVwIGNvbmZpcm0gY29tbWFuZCB0byBmaXJtd2FyZSBpZiBvay4KKyAqIGxic19wc19jb25maXJtX3NsZWVwIC0gY2hlY2tzIGNvbmRpdGlvbiBhbmQgcHJlcGFyZXMgdG8KKyAqIHNlbmQgc2xlZXAgY29uZmlybSBjb21tYW5kIHRvIGZpcm13YXJlIGlmIG9rCiAgKgotICogIEBwYXJhbSBwcml2ICAgIAlBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEBwYXJhbSBwc21vZGUgIAlQb3dlciBTYXZpbmcgbW9kZQotICogIEByZXR1cm4gCSAgIAluL2EKKyAqIEBwcml2OglBIHBvaW50ZXIgdG8gJnN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiByZXR1cm5zOgluL2EKICAqLwogdm9pZCBsYnNfcHNfY29uZmlybV9zbGVlcChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCiB7CkBAIC0xNDk5LDE2ICsxNTE2LDE2IEBACiAKIAogLyoqCi0gKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgdHJhbnNtaXNzaW9uIHBvd2VyIGNvbnRyb2wgZnVuY3Rpb25hbGl0eS4KKyAqIGxic19zZXRfdHBjX2NmZyAtIENvbmZpZ3VyZXMgdGhlIHRyYW5zbWlzc2lvbiBwb3dlciBjb250cm9sIGZ1bmN0aW9uYWxpdHkKICAqCi0gKiBAcGFyYW0gcHJpdgkJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqIEBwYXJhbSBlbmFibGUJVHJhbnNtaXNzaW9uIHBvd2VyIGNvbnRyb2wgZW5hYmxlCi0gKiBAcGFyYW0gcDAJCVBvd2VyIGxldmVsIHdoZW4gbGluayBxdWFsaXR5IGlzIGdvb2QgKGRCbSkuCi0gKiBAcGFyYW0gcDEJCVBvd2VyIGxldmVsIHdoZW4gbGluayBxdWFsaXR5IGlzIGZhaXIgKGRCbSkuCi0gKiBAcGFyYW0gcDIJCVBvd2VyIGxldmVsIHdoZW4gbGluayBxdWFsaXR5IGlzIHBvb3IgKGRCbSkuCi0gKiBAcGFyYW0gdXNlc25yCVVzZSBTaWduYWwgdG8gTm9pc2UgUmF0aW8gaW4gVFBDCisgKiBAcHJpdjoJQSBwb2ludGVyIHRvICZzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKiBAZW5hYmxlOglUcmFuc21pc3Npb24gcG93ZXIgY29udHJvbCBlbmFibGUKKyAqIEBwMDoJCVBvd2VyIGxldmVsIHdoZW4gbGluayBxdWFsaXR5IGlzIGdvb2QgKGRCbSkuCisgKiBAcDE6CQlQb3dlciBsZXZlbCB3aGVuIGxpbmsgcXVhbGl0eSBpcyBmYWlyIChkQm0pLgorICogQHAyOgkJUG93ZXIgbGV2ZWwgd2hlbiBsaW5rIHF1YWxpdHkgaXMgcG9vciAoZEJtKS4KKyAqIEB1c2VzbnI6CVVzZSBTaWduYWwgdG8gTm9pc2UgUmF0aW8gaW4gVFBDCiAgKgotICogQHJldHVybiAwIG9uIHN1Y2Nlc3MKKyAqIHJldHVybnM6CTAgb24gc3VjY2VzcwogICovCiBpbnQgbGJzX3NldF90cGNfY2ZnKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgaW50IGVuYWJsZSwgaW50OF90IHAwLCBpbnQ4X3QgcDEsCiAJCWludDhfdCBwMiwgaW50IHVzZXNucikKQEAgLTE1MzEsMTUgKzE1NDgsMTUgQEAKIH0KIAogLyoqCi0gKiBAYnJpZWYgQ29uZmlndXJlcyB0aGUgcG93ZXIgYWRhcHRhdGlvbiBzZXR0aW5ncy4KKyAqIGxic19zZXRfcG93ZXJfYWRhcHRfY2ZnIC0gQ29uZmlndXJlcyB0aGUgcG93ZXIgYWRhcHRhdGlvbiBzZXR0aW5ncwogICoKLSAqIEBwYXJhbSBwcml2CQlBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogQHBhcmFtIGVuYWJsZQlQb3dlciBhZGFwdGF0aW9uIGVuYWJsZQotICogQHBhcmFtIHAwCQlQb3dlciBsZXZlbCBmb3IgMSwgMiwgNS41IGFuZCAxMSBNYnBzIChkQm0pLgotICogQHBhcmFtIHAxCQlQb3dlciBsZXZlbCBmb3IgNiwgOSwgMTIsIDE4LCAyMiwgMjQgYW5kIDM2IE1icHMgKGRCbSkuCi0gKiBAcGFyYW0gcDIJCVBvd2VyIGxldmVsIGZvciA0OCBhbmQgNTQgTWJwcyAoZEJtKS4KKyAqIEBwcml2OglBIHBvaW50ZXIgdG8gJnN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqIEBlbmFibGU6CVBvd2VyIGFkYXB0YXRpb24gZW5hYmxlCisgKiBAcDA6CQlQb3dlciBsZXZlbCBmb3IgMSwgMiwgNS41IGFuZCAxMSBNYnBzIChkQm0pLgorICogQHAxOgkJUG93ZXIgbGV2ZWwgZm9yIDYsIDksIDEyLCAxOCwgMjIsIDI0IGFuZCAzNiBNYnBzIChkQm0pLgorICogQHAyOgkJUG93ZXIgbGV2ZWwgZm9yIDQ4IGFuZCA1NCBNYnBzIChkQm0pLgogICoKLSAqIEByZXR1cm4gMCBvbiBTdWNjZXNzCisgKiByZXR1cm5zOgkwIG9uIFN1Y2Nlc3MKICAqLwogCiBpbnQgbGJzX3NldF9wb3dlcl9hZGFwdF9jZmcoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBpbnQgZW5hYmxlLCBpbnQ4X3QgcDAsCkBAIC0xNjU1LDcgKzE2NzIsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOwogCXJldCA9IGNtZG5vZGUtPnJlc3VsdDsKIAlpZiAocmV0KQotCQlsYnNfcHJfaW5mbygiUFJFUF9DTUQ6IGNvbW1hbmQgMHglMDR4IGZhaWxlZDogJWRcbiIsCisJCW5ldGRldl9pbmZvKHByaXYtPmRldiwgIlBSRVBfQ01EOiBjb21tYW5kIDB4JTA0eCBmYWlsZWQ6ICVkXG4iLAogCQkJICAgIGNvbW1hbmQsIHJldCk7CiAKIAlfX2xic19jbGVhbnVwX2FuZF9pbnNlcnRfY21kKHByaXYsIGNtZG5vZGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kcmVzcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kcmVzcC5jCmluZGV4IDVlOTVkYTkuLjIwN2ZjMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZHJlc3AuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWRyZXNwLmMKQEAgLTEsNyArMSw4IEBACi0vKioKLSAgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGhhbmRsaW5nIG9mIGNvbW1hbmQKLSAgKiByZXNwb25zZXMgYXMgd2VsbCBhcyBldmVudHMgZ2VuZXJhdGVkIGJ5IGZpcm13YXJlLgotICAqLworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaGFuZGxpbmcgb2YgY29tbWFuZAorICogcmVzcG9uc2VzIGFzIHdlbGwgYXMgZXZlbnRzIGdlbmVyYXRlZCBieSBmaXJtd2FyZS4KKyAqLworCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTEyLDEyICsxMywxMyBAQAogI2luY2x1ZGUgImNtZC5oIgogCiAvKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBoYW5kbGVzIGRpc2Nvbm5lY3QgZXZlbnQuIGl0Ci0gKiAgcmVwb3J0cyBkaXNjb25uZWN0IHRvIHVwcGVyIGxheWVyLCBjbGVhbiB0eC9yeCBwYWNrZXRzLAotICogIHJlc2V0IGxpbmsgc3RhdGUgZXRjLgorICogbGJzX21hY19ldmVudF9kaXNjb25uZWN0ZWQgLSBoYW5kbGVzIGRpc2Nvbm5lY3QgZXZlbnQuIEl0CisgKiByZXBvcnRzIGRpc2Nvbm5lY3QgdG8gdXBwZXIgbGF5ZXIsIGNsZWFuIHR4L3J4IHBhY2tldHMsCisgKiByZXNldCBsaW5rIHN0YXRlIGV0Yy4KICAqCi0gKiAgQHBhcmFtIHByaXYgICAgQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcmV0dXJuIAkgICBuL2EKKyAqIEBwcml2OglBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQorICoKKyAqIHJldHVybnM6CW4vYQogICovCiB2b2lkIGxic19tYWNfZXZlbnRfZGlzY29ubmVjdGVkKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKIHsKQEAgLTg0LDE1ICs4NiwxOCBAQAogCWxic19kZWJfaGV4KExCU19ERUJfQ01ELCAiQ01EX1JFU1AiLCAodm9pZCAqKSByZXNwLCBsZW4pOwogCiAJaWYgKHJlc3AtPnNlcW51bSAhPSBwcml2LT5jdXJfY21kLT5jbWRidWYtPnNlcW51bSkgewotCQlsYnNfcHJfaW5mbygiUmVjZWl2ZWQgQ01EX1JFU1Agd2l0aCBpbnZhbGlkIHNlcXVlbmNlICVkIChleHBlY3RlZCAlZClcbiIsCi0JCQkgICAgbGUxNl90b19jcHUocmVzcC0+c2VxbnVtKSwgbGUxNl90b19jcHUocHJpdi0+Y3VyX2NtZC0+Y21kYnVmLT5zZXFudW0pKTsKKwkJbmV0ZGV2X2luZm8ocHJpdi0+ZGV2LAorCQkJICAgICJSZWNlaXZlZCBDTURfUkVTUCB3aXRoIGludmFsaWQgc2VxdWVuY2UgJWQgKGV4cGVjdGVkICVkKVxuIiwKKwkJCSAgICBsZTE2X3RvX2NwdShyZXNwLT5zZXFudW0pLAorCQkJICAgIGxlMTZfdG9fY3B1KHByaXYtPmN1cl9jbWQtPmNtZGJ1Zi0+c2VxbnVtKSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CiAJCXJldCA9IC0xOwogCQlnb3RvIGRvbmU7CiAJfQogCWlmIChyZXNwY21kICE9IENNRF9SRVQoY3VyY21kKSAmJgogCSAgICByZXNwY21kICE9IENNRF9SRVRfODAyXzExX0FTU09DSUFURSAmJiBjdXJjbWQgIT0gQ01EXzgwMl8xMV9BU1NPQ0lBVEUpIHsKLQkJbGJzX3ByX2luZm8oIkludmFsaWQgQ01EX1JFU1AgJXggdG8gY29tbWFuZCAleCFcbiIsIHJlc3BjbWQsIGN1cmNtZCk7CisJCW5ldGRldl9pbmZvKHByaXYtPmRldiwgIkludmFsaWQgQ01EX1JFU1AgJXggdG8gY29tbWFuZCAleCFcbiIsCisJCQkgICAgcmVzcGNtZCwgY3VyY21kKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAkJcmV0ID0gLTE7CiAJCWdvdG8gZG9uZTsKQEAgLTEwMSw3ICsxMDYsOCBAQAogCWlmIChyZXNwLT5yZXN1bHQgPT0gY3B1X3RvX2xlMTYoMHgwMDA0KSkgewogCQkvKiAweDAwMDQgbWVhbnMgLUVBR0FJTi4gRHJvcCB0aGUgcmVzcG9uc2UsIGxldCBpdCB0aW1lIG91dAogCQkgICBhbmQgYmUgcmVzdWJtaXR0ZWQgKi8KLQkJbGJzX3ByX2luZm8oIkZpcm13YXJlIHJldHVybnMgREVGRVIgdG8gY29tbWFuZCAleC4gV2lsbCBsZXQgaXQgdGltZSBvdXQuLi5cbiIsCisJCW5ldGRldl9pbmZvKHByaXYtPmRldiwKKwkJCSAgICAiRmlybXdhcmUgcmV0dXJucyBERUZFUiB0byBjb21tYW5kICV4LiBXaWxsIGxldCBpdCB0aW1lIG91dC4uLlxuIiwKIAkJCSAgICBsZTE2X3RvX2NwdShyZXNwLT5jb21tYW5kKSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CiAJCXJldCA9IC0xOwpAQCAtMzEzLDI4ICszMTksMjggQEAKIAkJbGJzX2RlYl9jbWQoIkVWRU5UOiBBREhPQyBiZWFjb24gbG9zdFxuIik7CiAJCWJyZWFrOwogCWNhc2UgTUFDUkVHX0lOVF9DT0RFX1JTU0lfTE9XOgotCQlsYnNfcHJfYWxlcnQoIkVWRU5UOiByc3NpIGxvd1xuIik7CisJCW5ldGRldl9hbGVydChwcml2LT5kZXYsICJFVkVOVDogcnNzaSBsb3dcbiIpOwogCQlicmVhazsKIAljYXNlIE1BQ1JFR19JTlRfQ09ERV9TTlJfTE9XOgotCQlsYnNfcHJfYWxlcnQoIkVWRU5UOiBzbnIgbG93XG4iKTsKKwkJbmV0ZGV2X2FsZXJ0KHByaXYtPmRldiwgIkVWRU5UOiBzbnIgbG93XG4iKTsKIAkJYnJlYWs7CiAJY2FzZSBNQUNSRUdfSU5UX0NPREVfTUFYX0ZBSUw6Ci0JCWxic19wcl9hbGVydCgiRVZFTlQ6IG1heCBmYWlsXG4iKTsKKwkJbmV0ZGV2X2FsZXJ0KHByaXYtPmRldiwgIkVWRU5UOiBtYXggZmFpbFxuIik7CiAJCWJyZWFrOwogCWNhc2UgTUFDUkVHX0lOVF9DT0RFX1JTU0lfSElHSDoKLQkJbGJzX3ByX2FsZXJ0KCJFVkVOVDogcnNzaSBoaWdoXG4iKTsKKwkJbmV0ZGV2X2FsZXJ0KHByaXYtPmRldiwgIkVWRU5UOiByc3NpIGhpZ2hcbiIpOwogCQlicmVhazsKIAljYXNlIE1BQ1JFR19JTlRfQ09ERV9TTlJfSElHSDoKLQkJbGJzX3ByX2FsZXJ0KCJFVkVOVDogc25yIGhpZ2hcbiIpOworCQluZXRkZXZfYWxlcnQocHJpdi0+ZGV2LCAiRVZFTlQ6IHNuciBoaWdoXG4iKTsKIAkJYnJlYWs7CiAKIAljYXNlIE1BQ1JFR19JTlRfQ09ERV9NRVNIX0FVVE9fU1RBUlRFRDoKIAkJLyogSWdub3JlIHNwdXJpb3VzIGF1dG9zdGFydCBldmVudHMgKi8KLQkJbGJzX3ByX2luZm8oIkVWRU5UOiBNRVNIX0FVVE9fU1RBUlRFRCAoaWdub3JpbmcpXG4iKTsKKwkJbmV0ZGV2X2luZm8ocHJpdi0+ZGV2LCAiRVZFTlQ6IE1FU0hfQVVUT19TVEFSVEVEIChpZ25vcmluZylcbiIpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCWxic19wcl9hbGVydCgiRVZFTlQ6IHVua25vd24gZXZlbnQgaWQgJWRcbiIsIGV2ZW50KTsKKwkJbmV0ZGV2X2FsZXJ0KHByaXYtPmRldiwgIkVWRU5UOiB1bmtub3duIGV2ZW50IGlkICVkXG4iLCBldmVudCk7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVidWdmcy5jCmluZGV4IGZiZjNiMDMzLi4yMzI1MGY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVidWdmcy5jCkBAIC0xNTEsMTMgKzE1MSwxNCBAQAogCQlyZXQgPSBsYnNfc2V0X2hvc3Rfc2xlZXAocHJpdiwgMCk7CiAJZWxzZSBpZiAoaG9zdF9zbGVlcCA9PSAxKSB7CiAJCWlmIChwcml2LT53b2xfY3JpdGVyaWEgPT0gRUhTX1JFTU9WRV9XQUtFVVApIHsKLQkJCWxic19wcl9pbmZvKCJ3YWtlIHBhcmFtZXRlcnMgbm90IGNvbmZpZ3VyZWQiKTsKKwkJCW5ldGRldl9pbmZvKHByaXYtPmRldiwKKwkJCQkgICAgIndha2UgcGFyYW1ldGVycyBub3QgY29uZmlndXJlZFxuIik7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CiAJCXJldCA9IGxic19zZXRfaG9zdF9zbGVlcChwcml2LCAxKTsKIAl9IGVsc2UgewotCQlsYnNfcHJfZXJyKCJpbnZhbGlkIG9wdGlvblxuIik7CisJCW5ldGRldl9lcnIocHJpdi0+ZGV2LCAiaW52YWxpZCBvcHRpb25cbiIpOwogCQlyZXQgPSAtRUlOVkFMOwogCX0KIApAQCAtODQ5LDE1ICs4NTAsMTQgQEAKIHN0YXRpYyBpbnQgbnVtX29mX2l0ZW1zID0gQVJSQVlfU0laRShpdGVtcyk7CiAKIC8qKgotICogIEBicmllZiBwcm9jIHJlYWQgZnVuY3Rpb24KKyAqIGxic19kZWJ1Z2ZzX3JlYWQgLSBwcm9jIHJlYWQgZnVuY3Rpb24KICAqCi0gKiAgQHBhcmFtIHBhZ2UJICAgcG9pbnRlciB0byBidWZmZXIKLSAqICBAcGFyYW0gcyAgICAgICByZWFkIGRhdGEgc3RhcnRpbmcgcG9zaXRpb24KLSAqICBAcGFyYW0gb2ZmICAgICBvZmZzZXQKLSAqICBAcGFyYW0gY250ICAgICBjb3VudGVyCi0gKiAgQHBhcmFtIGVvZiAgICAgZW5kIG9mIGZpbGUgZmxhZwotICogIEBwYXJhbSBkYXRhICAgIGRhdGEgdG8gb3V0cHV0Ci0gKiAgQHJldHVybiAJICAgbnVtYmVyIG9mIG91dHB1dCBkYXRhCisgKiBAZmlsZToJZmlsZSB0byByZWFkCisgKiBAdXNlcmJ1ZjoJcG9pbnRlciB0byBidWZmZXIKKyAqIEBjb3VudDoJbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQKKyAqIEBwcG9zOglyZWFkIGRhdGEgc3RhcnRpbmcgcG9zaXRpb24KKyAqCisgKiByZXR1cm5zOglhbW91bnQgb2YgZGF0YSByZWFkIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUKICAqLwogc3RhdGljIHNzaXplX3QgbGJzX2RlYnVnZnNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCiAJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKQEAgLTg5NywxMyArODk3LDE0IEBACiB9CiAKIC8qKgotICogIEBicmllZiBwcm9jIHdyaXRlIGZ1bmN0aW9uCisgKiBsYnNfZGVidWdmc193cml0ZSAtIHByb2Mgd3JpdGUgZnVuY3Rpb24KICAqCi0gKiAgQHBhcmFtIGYJICAgZmlsZSBwb2ludGVyCi0gKiAgQHBhcmFtIGJ1ZiAgICAgcG9pbnRlciB0byBkYXRhIGJ1ZmZlcgotICogIEBwYXJhbSBjbnQgICAgIGRhdGEgbnVtYmVyIHRvIHdyaXRlCi0gKiAgQHBhcmFtIGRhdGEgICAgZGF0YSB0byB3cml0ZQotICogIEByZXR1cm4gCSAgIG51bWJlciBvZiBkYXRhCisgKiBAZjoJCWZpbGUgcG9pbnRlcgorICogQGJ1ZjoJcG9pbnRlciB0byBkYXRhIGJ1ZmZlcgorICogQGNudDoJZGF0YSBudW1iZXIgdG8gd3JpdGUKKyAqIEBwcG9zOglmaWxlIHBvc2l0aW9uCisgKgorICogcmV0dXJuczoJYW1vdW50IG9mIGRhdGEgd3JpdHRlbgogICovCiBzdGF0aWMgc3NpemVfdCBsYnNfZGVidWdmc193cml0ZShzdHJ1Y3QgZmlsZSAqZiwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCSAgICBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCkBAIC05NjYsMTEgKzk2NywxMSBAQAogfTsKIAogLyoqCi0gKiAgQGJyaWVmIGNyZWF0ZSBkZWJ1ZyBwcm9jIGZpbGUKKyAqIGxic19kZWJ1Z19pbml0IC0gY3JlYXRlIGRlYnVnIHByb2MgZmlsZQogICoKLSAqICBAcGFyYW0gcHJpdgkgICBwb2ludGVyIHN0cnVjdCBsYnNfcHJpdmF0ZQotICogIEBwYXJhbSBkZXYgICAgIHBvaW50ZXIgbmV0X2RldmljZQotICogIEByZXR1cm4gCSAgIE4vQQorICogQHByaXY6CXBvaW50ZXIgdG8gJnN0cnVjdCBsYnNfcHJpdmF0ZQorICoKKyAqIHJldHVybnM6CU4vQQogICovCiBzdGF0aWMgdm9pZCBsYnNfZGVidWdfaW5pdChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWNsLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWNsLmgKaW5kZXggMmFlNzUyZC4uZGEwYjA1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVjbC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlY2wuaApAQCAtMSw4ICsxLDggQEAKIAotLyoqCi0gICogIFRoaXMgZmlsZSBjb250YWlucyBkZWNsYXJhdGlvbiByZWZlcnJpbmcgdG8KLSAgKiAgZnVuY3Rpb25zIGRlZmluZWQgaW4gb3RoZXIgc291cmNlIGZpbGVzCi0gICovCisvKgorICogIFRoaXMgZmlsZSBjb250YWlucyBkZWNsYXJhdGlvbiByZWZlcnJpbmcgdG8KKyAqICBmdW5jdGlvbnMgZGVmaW5lZCBpbiBvdGhlciBzb3VyY2UgZmlsZXMKKyAqLwogCiAjaWZuZGVmIF9MQlNfREVDTF9IXwogI2RlZmluZSBfTEJTX0RFQ0xfSF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlZnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlZnMuaAppbmRleCBkMDBjNzI4Li5hYjk2NmYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVmcy5oCkBAIC0xLDcgKzEsNyBAQAotLyoqCi0gICogVGhpcyBoZWFkZXIgZmlsZSBjb250YWlucyBnbG9iYWwgY29uc3RhbnQvZW51bSBkZWZpbml0aW9ucywKLSAgKiBnbG9iYWwgdmFyaWFibGUgZGVjbGFyYXRpb24uCi0gICovCisvKgorICogVGhpcyBoZWFkZXIgZmlsZSBjb250YWlucyBnbG9iYWwgY29uc3RhbnQvZW51bSBkZWZpbml0aW9ucywKKyAqIGdsb2JhbCB2YXJpYWJsZSBkZWNsYXJhdGlvbi4KKyAqLwogI2lmbmRlZiBfTEJTX0RFRlNfSF8KICNkZWZpbmUgX0xCU19ERUZTX0hfCiAKQEAgLTg5LDEzICs4OSw2IEBACiAjZGVmaW5lIGxic19kZWJfc3BpKGZtdCwgYXJncy4uLikgICAgICAgTEJTX0RFQl9MTChMQlNfREVCX1NQSSwgIiBzcGkiLCBmbXQsICMjYXJncykKICNkZWZpbmUgbGJzX2RlYl9jZmc4MDIxMShmbXQsIGFyZ3MuLi4pICBMQlNfREVCX0xMKExCU19ERUJfQ0ZHODAyMTEsICIgY2ZnODAyMTEiLCBmbXQsICMjYXJncykKIAotI2RlZmluZSBsYnNfcHJfaW5mbyhmb3JtYXQsIGFyZ3MuLi4pIFwKLQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FIjogIiBmb3JtYXQsICMjIGFyZ3MpCi0jZGVmaW5lIGxic19wcl9lcnIoZm9ybWF0LCBhcmdzLi4uKSBcCi0JcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FIjogIiBmb3JtYXQsICMjIGFyZ3MpCi0jZGVmaW5lIGxic19wcl9hbGVydChmb3JtYXQsIGFyZ3MuLi4pIFwKLQlwcmludGsoS0VSTl9BTEVSVCBEUlZfTkFNRSI6ICIgZm9ybWF0LCAjIyBhcmdzKQotCiAjaWZkZWYgREVCVUcKIHN0YXRpYyBpbmxpbmUgdm9pZCBsYnNfZGViX2hleCh1bnNpZ25lZCBpbnQgZ3JwLCBjb25zdCBjaGFyICpwcm9tcHQsIHU4ICpidWYsIGludCBsZW4pCiB7CkBAIC0xMjMsMTkgKzExNiwxOSBAQAogCiAKIAotLyoqIEJ1ZmZlciBDb25zdGFudHMgKi8KKy8qIEJ1ZmZlciBDb25zdGFudHMgKi8KIAogLyoJVGhlIHNpemUgb2YgU1EgbWVtb3J5IFBQQSwgRFBBIGFyZSA4IERXT1JEcywgdGhhdCBrZWVwIHRoZSBwaHlzaWNhbAotKglhZGRyZXNzZXMgb2YgVHhQRCBidWZmZXJzLiBTdGF0aW9uIGhhcyBvbmx5IDggVHhQRCBhdmFpbGFibGUsIFdoZXJlYXMKLSoJZHJpdmVyIGhhcyBtb3JlIGxvY2FsIFR4UERzLiBFYWNoIFR4UEQgb24gdGhlIGhvc3QgbWVtb3J5IGlzIGFzc29jaWF0ZWQKLSoJd2l0aCBhIFR4IGNvbnRyb2wgbm9kZS4gVGhlIGRyaXZlciBtYWludGFpbnMgOCBSeFBEIGRlc2NyaXB0b3JzIGZvcgotKglzdGF0aW9uIGZpcm13YXJlIHRvIHN0b3JlIFJ4IHBhY2tldCBpbmZvcm1hdGlvbi4KLSoKLSoJQ3VycmVudCB2ZXJzaW9uIG9mIE1BQyBoYXMgYSAzMng2IG11bHRpY2FzdCBhZGRyZXNzIGJ1ZmZlci4KLSoKLSoJODAyLjExYiBjYW4gaGF2ZSB1cCB0byAgMTQgY2hhbm5lbHMsIHRoZSBkcml2ZXIga2VlcHMgdGhlCi0qCUJTU0lEKE1BQyBhZGRyZXNzKSBvZiBlYWNoIEFQcyBvciBBZCBob2Mgc3RhdGlvbnMgaXQgaGFzIHNlbnNlZC4KLSovCisgKglhZGRyZXNzZXMgb2YgVHhQRCBidWZmZXJzLiBTdGF0aW9uIGhhcyBvbmx5IDggVHhQRCBhdmFpbGFibGUsIFdoZXJlYXMKKyAqCWRyaXZlciBoYXMgbW9yZSBsb2NhbCBUeFBEcy4gRWFjaCBUeFBEIG9uIHRoZSBob3N0IG1lbW9yeSBpcyBhc3NvY2lhdGVkCisgKgl3aXRoIGEgVHggY29udHJvbCBub2RlLiBUaGUgZHJpdmVyIG1haW50YWlucyA4IFJ4UEQgZGVzY3JpcHRvcnMgZm9yCisgKglzdGF0aW9uIGZpcm13YXJlIHRvIHN0b3JlIFJ4IHBhY2tldCBpbmZvcm1hdGlvbi4KKyAqCisgKglDdXJyZW50IHZlcnNpb24gb2YgTUFDIGhhcyBhIDMyeDYgbXVsdGljYXN0IGFkZHJlc3MgYnVmZmVyLgorICoKKyAqCTgwMi4xMWIgY2FuIGhhdmUgdXAgdG8gIDE0IGNoYW5uZWxzLCB0aGUgZHJpdmVyIGtlZXBzIHRoZQorICoJQlNTSUQoTUFDIGFkZHJlc3MpIG9mIGVhY2ggQVBzIG9yIEFkIGhvYyBzdGF0aW9ucyBpdCBoYXMgc2Vuc2VkLgorICovCiAKICNkZWZpbmUgTVJWRFJWX01BWF9NVUxUSUNBU1RfTElTVF9TSVpFCTMyCiAjZGVmaW5lIExCU19OVU1fQ01EX0JVRkZFUlMgICAgICAgICAgICAgMTAKQEAgLTE2Niw3ICsxNTksNyBAQAogI2RlZmluZSBXT0xfUkVTVUxUX05PU1BDX0VSUgkJMQogI2RlZmluZSBXT0xfUkVTVUxUX0VFWElTVF9FUlIJCTIKIAotLyoqIE1pc2MgY29uc3RhbnRzICovCisvKiBNaXNjIGNvbnN0YW50cyAqLwogLyogVGhpcyBzZWN0aW9uIGRlZmluZXMgODAyLjExIHNwZWNpZmljIGNvbnRhbnRzICovCiAKICNkZWZpbmUgTVJWRFJWX01BWF9CU1NfREVTQ1JJUFRTCQkxNgpAQCAtMTgzLDcgKzE3Niw4IEBACiAKICNkZWZpbmUgTUFSVkVMTF9NRVNIX0lFX0xFTkdUSAkJOQogCi0vKiBWYWx1ZXMgdXNlZCB0byBwb3B1bGF0ZSB0aGUgc3RydWN0IG1ydmxfbWVzaF9pZS4gIFRoZSBvbmx5IHRpbWUgeW91IG5lZWQgdGhpcworLyoKKyAqIFZhbHVlcyB1c2VkIHRvIHBvcHVsYXRlIHRoZSBzdHJ1Y3QgbXJ2bF9tZXNoX2llLiAgVGhlIG9ubHkgdGltZSB5b3UgbmVlZCB0aGlzCiAgKiBpcyB3aGVuIGVuYWJsaW5nIHRoZSBtZXNoIHVzaW5nIENNRF9NRVNIX0NPTkZJRy4KICAqLwogI2RlZmluZSBNQVJWRUxMX01FU0hfSUVfVFlQRQkJNApAQCAtMTkzLDcgKzE4Nyw3IEBACiAjZGVmaW5lIE1BUlZFTExfTUVTSF9NRVRSSUNfSUQJCTAKICNkZWZpbmUgTUFSVkVMTF9NRVNIX0NBUEFCSUxJVFkJCTAKIAotLyoqIElOVCBzdGF0dXMgQml0IERlZmluaXRpb24qLworLyogSU5UIHN0YXR1cyBCaXQgRGVmaW5pdGlvbiAqLwogI2RlZmluZSBNUlZEUlZfVFhfRE5MRF9SRFkJCTB4MDAwMQogI2RlZmluZSBNUlZEUlZfUlhfVVBMRF9SRFkJCTB4MDAwMgogI2RlZmluZSBNUlZEUlZfQ01EX0ROTERfUkRZCQkweDAwMDQKQEAgLTIwOCw1OSArMjAyLDYzIEBACiAjZGVmaW5lIFRQQ19ERUZBVUxUX1AxIDEwCiAjZGVmaW5lIFRQQ19ERUZBVUxUX1AyIDEzCiAKLS8qKiBUeFBEIHN0YXR1cyAqLworLyogVHhQRCBzdGF0dXMgKi8KIAotLyoJU3RhdGlvbiBmaXJtd2FyZSB1c2UgVHhQRCBzdGF0dXMgZmllbGQgdG8gcmVwb3J0IGZpbmFsIFR4IHRyYW5zbWl0Ci0qCXJlc3VsdCwgQml0IG1hc2tzIGFyZSB1c2VkIHRvIHByZXNlbnQgY29tYmluZWQgc2l0dWF0aW9ucy4KLSovCisvKgorICoJU3RhdGlvbiBmaXJtd2FyZSB1c2UgVHhQRCBzdGF0dXMgZmllbGQgdG8gcmVwb3J0IGZpbmFsIFR4IHRyYW5zbWl0CisgKglyZXN1bHQsIEJpdCBtYXNrcyBhcmUgdXNlZCB0byBwcmVzZW50IGNvbWJpbmVkIHNpdHVhdGlvbnMuCisgKi8KIAogI2RlZmluZSBNUlZEUlZfVHhQRF9QT1dFUl9NR01UX05VTExfUEFDS0VUIDB4MDEKICNkZWZpbmUgTVJWRFJWX1R4UERfUE9XRVJfTUdNVF9MQVNUX1BBQ0tFVCAweDA4CiAKLS8qKiBUeCBtZXNoIGZsYWcgKi8KLS8qIEN1cnJlbnRseSB3ZSBhcmUgdXNpbmcgbm9ybWFsIFdEUyBmbGFnIGFzIG1lc2ggZmxhZy4KKy8qIFR4IG1lc2ggZmxhZyAqLworLyoKKyAqIEN1cnJlbnRseSB3ZSBhcmUgdXNpbmcgbm9ybWFsIFdEUyBmbGFnIGFzIG1lc2ggZmxhZy4KICAqIFRPRE86IGNoYW5nZSB0byBwcm9wZXIgbWVzaCBmbGFnIHdoZW4gTUFDIHVuZGVyc3RhbmRzIGl0LgogICovCiAjZGVmaW5lIFR4UERfQ09OVFJPTF9XRFNfRlJBTUUgKDE8PDE3KQogI2RlZmluZSBUeFBEX01FU0hfRlJBTUUgVHhQRF9DT05UUk9MX1dEU19GUkFNRQogCi0vKiogTWVzaCBpbnRlcmZhY2UgSUQgKi8KKy8qIE1lc2ggaW50ZXJmYWNlIElEICovCiAjZGVmaW5lIE1FU0hfSUZBQ0VfSUQJCQkJCTB4MDAwMQotLyoqIE1lc2ggaWQgc2hvdWxkIGJlIGluIGJpdHMgMTQtMTMtMTIgKi8KKy8qIE1lc2ggaWQgc2hvdWxkIGJlIGluIGJpdHMgMTQtMTMtMTIgKi8KICNkZWZpbmUgTUVTSF9JRkFDRV9CSVRfT0ZGU0VUCQkJCTB4MDAwYwotLyoqIE1lc2ggZW5hYmxlIGJpdCBpbiBGVyBjYXBhYmlsaXR5ICovCisvKiBNZXNoIGVuYWJsZSBiaXQgaW4gRlcgY2FwYWJpbGl0eSAqLwogI2RlZmluZSBNRVNIX0NBUElORk9fRU5BQkxFX01BU0sJCQkoMTw8MTYpCiAKLS8qKiBGVyBkZWZpbml0aW9uIGZyb20gTWFydmVsbCB2NCAqLworLyogRlcgZGVmaW5pdGlvbiBmcm9tIE1hcnZlbGwgdjQgKi8KICNkZWZpbmUgTVJWTF9GV19WNAkJCQkJKDB4MDQpCi0vKiogRlcgZGVmaW5pdGlvbiBmcm9tIE1hcnZlbGwgdjUgKi8KKy8qIEZXIGRlZmluaXRpb24gZnJvbSBNYXJ2ZWxsIHY1ICovCiAjZGVmaW5lIE1SVkxfRldfVjUJCQkJCSgweDA1KQotLyoqIEZXIGRlZmluaXRpb24gZnJvbSBNYXJ2ZWxsIHYxMCAqLworLyogRlcgZGVmaW5pdGlvbiBmcm9tIE1hcnZlbGwgdjEwICovCiAjZGVmaW5lIE1SVkxfRldfVjEwCQkJCQkoMHgwYSkKLS8qKiBGVyBtYWpvciByZXZpc2lvbiBkZWZpbml0aW9uICovCisvKiBGVyBtYWpvciByZXZpc2lvbiBkZWZpbml0aW9uICovCiAjZGVmaW5lIE1SVkxfRldfTUFKT1JfUkVWKHgpCQkJCSgoeCk+PjI0KQogCi0vKiogUnhQRCBzdGF0dXMgKi8KKy8qIFJ4UEQgc3RhdHVzICovCiAKICNkZWZpbmUgTVJWRFJWX1JYUERfU1RBVFVTX09LICAgICAgICAgICAgICAgIDB4MDAwMQogCi0vKiogUnhQRCBzdGF0dXMgLSBSZWNlaXZlZCBwYWNrZXQgdHlwZXMgKi8KLS8qKiBSeCBtZXNoIGZsYWcgKi8KLS8qIEN1cnJlbnRseSB3ZSBhcmUgdXNpbmcgbm9ybWFsIFdEUyBmbGFnIGFzIG1lc2ggZmxhZy4KKy8qIFJ4UEQgc3RhdHVzIC0gUmVjZWl2ZWQgcGFja2V0IHR5cGVzICovCisvKiBSeCBtZXNoIGZsYWcgKi8KKy8qCisgKiBDdXJyZW50bHkgd2UgYXJlIHVzaW5nIG5vcm1hbCBXRFMgZmxhZyBhcyBtZXNoIGZsYWcuCiAgKiBUT0RPOiBjaGFuZ2UgdG8gcHJvcGVyIG1lc2ggZmxhZyB3aGVuIE1BQyB1bmRlcnN0YW5kcyBpdC4KICAqLwogI2RlZmluZSBSeFBEX0NPTlRST0xfV0RTX0ZSQU1FICgweDQwKQogI2RlZmluZSBSeFBEX01FU0hfRlJBTUUgUnhQRF9DT05UUk9MX1dEU19GUkFNRQogCi0vKiogUlNTSS1yZWxhdGVkIGRlZmluZXMgKi8KLS8qCVJTU0kgY29uc3RhbnRzIGFyZSB1c2VkIHRvIGltcGxlbWVudCA4MDIuMTEgUlNTSSB0aHJlc2hvbGQKLSoJaW5kaWNhdGlvbi4gaWYgdGhlIFJ4IHBhY2tldCBzaWduYWwgZ290IHRvbyB3ZWFrIGZvciA1IGNvbnNlY3V0aXZlCi0qCXRpbWVzLCBtaW5pcG9ydCBkcml2ZXIgKGRyaXZlcikgd2lsbCByZXBvcnQgdGhpcyBldmVudCB0byB3cmFwcGVyCi0qLworLyogUlNTSS1yZWxhdGVkIGRlZmluZXMgKi8KKy8qCisgKglSU1NJIGNvbnN0YW50cyBhcmUgdXNlZCB0byBpbXBsZW1lbnQgODAyLjExIFJTU0kgdGhyZXNob2xkCisgKglpbmRpY2F0aW9uLiBpZiB0aGUgUnggcGFja2V0IHNpZ25hbCBnb3QgdG9vIHdlYWsgZm9yIDUgY29uc2VjdXRpdmUKKyAqCXRpbWVzLCBtaW5pcG9ydCBkcml2ZXIgKGRyaXZlcikgd2lsbCByZXBvcnQgdGhpcyBldmVudCB0byB3cmFwcGVyCisgKi8KIAogI2RlZmluZSBNUlZEUlZfTkZfREVGQVVMVF9TQ0FOX1ZBTFVFCQkoLTk2KQogCi0vKiogUlRTL0ZSQUcgcmVsYXRlZCBkZWZpbmVzICovCisvKiBSVFMvRlJBRyByZWxhdGVkIGRlZmluZXMgKi8KICNkZWZpbmUgTVJWRFJWX1JUU19NSU5fVkFMVUUJCTAKICNkZWZpbmUgTVJWRFJWX1JUU19NQVhfVkFMVUUJCTIzNDcKICNkZWZpbmUgTVJWRFJWX0ZSQUdfTUlOX1ZBTFVFCQkyNTYKQEAgLTMwMCwzNiArMjk4LDM2IEBACiAKICNkZWZpbmUJTUFYX0xFRFMJCQk4CiAKLS8qKiBHbG9iYWwgVmFyaWFibGUgRGVjbGFyYXRpb24gKi8KKy8qIEdsb2JhbCBWYXJpYWJsZSBEZWNsYXJhdGlvbiAqLwogZXh0ZXJuIGNvbnN0IGNoYXIgbGJzX2RyaXZlcl92ZXJzaW9uW107CiBleHRlcm4gdTE2IGxic19yZWdpb25fY29kZV90b19pbmRleFtNUlZEUlZfTUFYX1JFR0lPTl9DT0RFXTsKIAogCi0vKiogRU5VTSBkZWZpbml0aW9uKi8KLS8qKiBTTlJORl9UWVBFICovCisvKiBFTlVNIGRlZmluaXRpb24gKi8KKy8qIFNOUk5GX1RZUEUgKi8KIGVudW0gU05STkZfVFlQRSB7CiAJVFlQRV9CRUFDT04gPSAwLAogCVRZUEVfUlhQRCwKIAlNQVhfVFlQRV9CCiB9OwogCi0vKiogU05STkZfREFUQSovCisvKiBTTlJORl9EQVRBICovCiBlbnVtIFNOUk5GX0RBVEEgewogCVRZUEVfTk9BVkcgPSAwLAogCVRZUEVfQVZHLAogCU1BWF9UWVBFX0FWRwogfTsKIAotLyoqIExCU184MDJfMTFfUE9XRVJfTU9ERSAqLworLyogTEJTXzgwMl8xMV9QT1dFUl9NT0RFICovCiBlbnVtIExCU184MDJfMTFfUE9XRVJfTU9ERSB7CiAJTEJTODAyXzExUE9XRVJNT0RFQ0FNLAogCUxCUzgwMl8xMVBPV0VSTU9ERU1BWF9QU1AsCiAJTEJTODAyXzExUE9XRVJNT0RFRkFTVF9QU1AsCi0JLypub3QgYSByZWFsIG1vZGUsIGRlZmluZWQgYXMgYW4gdXBwZXIgYm91bmQgKi8KKwkvKiBub3QgYSByZWFsIG1vZGUsIGRlZmluZWQgYXMgYW4gdXBwZXIgYm91bmQgKi8KIAlMQlM4MDJfMTFQT1dFTU9ERU1BWAogfTsKIAotLyoqIFBTX1NUQVRFICovCisvKiBQU19TVEFURSAqLwogZW51bSBQU19TVEFURSB7CiAJUFNfU1RBVEVfRlVMTF9QT1dFUiwKIAlQU19TVEFURV9BV0FLRSwKQEAgLTMzNyw3ICszMzUsNyBAQAogCVBTX1NUQVRFX1NMRUVQCiB9OwogCi0vKiogRE5MRF9TVEFURSAqLworLyogRE5MRF9TVEFURSAqLwogZW51bSBETkxEX1NUQVRFIHsKIAlETkxEX1JFU19SRUNFSVZFRCwKIAlETkxEX0RBVEFfU0VOVCwKQEAgLTM0NSwxOSArMzQzLDE5IEBACiAJRE5MRF9CT09UQ01EX1NFTlQsCiB9OwogCi0vKiogTEJTX01FRElBX1NUQVRFICovCisvKiBMQlNfTUVESUFfU1RBVEUgKi8KIGVudW0gTEJTX01FRElBX1NUQVRFIHsKIAlMQlNfQ09OTkVDVEVELAogCUxCU19ESVNDT05ORUNURUQKIH07CiAKLS8qKiBMQlNfODAyXzExX1BSSVZBQ1lfRklMVEVSICovCisvKiBMQlNfODAyXzExX1BSSVZBQ1lfRklMVEVSICovCiBlbnVtIExCU184MDJfMTFfUFJJVkFDWV9GSUxURVIgewogCUxCUzgwMl8xMVBSSVZGSUxURVJBQ0NFUFRBTEwsCiAJTEJTODAyXzExUFJJVkZJTFRFUjgwMjFYV0VQCiB9OwogCi0vKiogbXZfbXNfdHlwZSAqLworLyogbXZfbXNfdHlwZSAqLwogZW51bSBtdl9tc190eXBlIHsKIAlNVk1TX0RBVCA9IDAsCiAJTVZNU19DTUQgPSAxLApAQCAtMzY1LDE0ICszNjMsMTQgQEAKIAlNVk1TX0VWRU5UCiB9OwogCi0vKiogS0VZX1RZUEVfSUQgKi8KKy8qIEtFWV9UWVBFX0lEICovCiBlbnVtIEtFWV9UWVBFX0lEIHsKIAlLRVlfVFlQRV9JRF9XRVAgPSAwLAogCUtFWV9UWVBFX0lEX1RLSVAsCiAJS0VZX1RZUEVfSURfQUVTCiB9OwogCi0vKiogS0VZX0lORk9fV1BBIChhcHBsaWVzIHRvIGJvdGggVEtJUCBhbmQgQUVTL0NDTVApICovCisvKiBLRVlfSU5GT19XUEEgKGFwcGxpZXMgdG8gYm90aCBUS0lQIGFuZCBBRVMvQ0NNUCkgKi8KIGVudW0gS0VZX0lORk9fV1BBIHsKIAlLRVlfSU5GT19XUEFfTUNBU1QgPSAweDAxLAogCUtFWV9JTkZPX1dQQV9VTklDQVNUID0gMHgwMiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGV2LmgKaW5kZXggYmM0NjFlYi4uNzZkMDE4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGV2LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGV2LmgKQEAgLTEsOCArMSw4IEBACi0vKioKLSAgKiBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW5pdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyBzcGVjaWZpYwotICAqIHRvIE1hcnZlbGwgODAyLjExIE5JQy4gSXQgY29udGFpbnMgdGhlIERldmljZSBJbmZvcm1hdGlvbgotICAqIHN0cnVjdHVyZSBzdHJ1Y3QgbGJzX3ByaXZhdGUuLgotICAqLworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbml0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHNwZWNpZmljCisgKiB0byBNYXJ2ZWxsIDgwMi4xMSBOSUMuIEl0IGNvbnRhaW5zIHRoZSBEZXZpY2UgSW5mb3JtYXRpb24KKyAqIHN0cnVjdHVyZSBzdHJ1Y3QgbGJzX3ByaXZhdGUuLgorICovCiAjaWZuZGVmIF9MQlNfREVWX0hfCiAjZGVmaW5lIF9MQlNfREVWX0hfCiAKQEAgLTEyLDcgKzEyLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CiAKLS8qKiBzbGVlcF9wYXJhbXMgKi8KKy8qIHNsZWVwX3BhcmFtcyAqLwogc3RydWN0IHNsZWVwX3BhcmFtcyB7CiAJdWludDE2X3Qgc3BfZXJyb3I7CiAJdWludDE2X3Qgc3Bfb2Zmc2V0OwpAQCAtMjMsNyArMjMsNyBAQAogfTsKIAogCi0vKiogUHJpdmF0ZSBzdHJ1Y3R1cmUgZm9yIHRoZSBNViBkZXZpY2UgKi8KKy8qIFByaXZhdGUgc3RydWN0dXJlIGZvciB0aGUgTVYgZGV2aWNlICovCiBzdHJ1Y3QgbGJzX3ByaXZhdGUgewogCiAJLyogQmFzaWMgbmV0d29ya2luZyAqLwpAQCAtMTI1LDEyICsxMjUsMTIgQEAKIAkvKiBFdmVudHMgc2VudCBmcm9tIGhhcmR3YXJlIHRvIGRyaXZlciAqLwogCXN0cnVjdCBrZmlmbyBldmVudF9maWZvOwogCi0JLyoqIHRocmVhZCB0byBzZXJ2aWNlIGludGVycnVwdHMgKi8KKwkvKiB0aHJlYWQgdG8gc2VydmljZSBpbnRlcnJ1cHRzICovCiAJc3RydWN0IHRhc2tfc3RydWN0ICptYWluX3RocmVhZDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0cTsKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29ya190aHJlYWQ7CiAKLQkvKiogRW5jcnlwdGlvbiBzdHVmZiAqLworCS8qIEVuY3J5cHRpb24gc3R1ZmYgKi8KIAl1OCBhdXRodHlwZV9hdXRvOwogCXU4IHdlcF90eF9rZXk7CiAJdTggd2VwX2tleVs0XVtXTEFOX0tFWV9MRU5fV0VQMTA0XTsKQEAgLTE2Miw3ICsxNjIsNyBAQAogCXMxNiB0eHBvd2VyX21pbjsKIAlzMTYgdHhwb3dlcl9tYXg7CiAKLQkvKiogU2Nhbm5pbmcgKi8KKwkvKiBTY2FubmluZyAqLwogCXN0cnVjdCBkZWxheWVkX3dvcmsgc2Nhbl93b3JrOwogCWludCBzY2FuX2NoYW5uZWw7CiAJLyogUXVldWUgb2YgdGhpbmdzIHdhaXRpbmcgZm9yIHNjYW4gY29tcGxldGlvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZXRodG9vbC5jCmluZGV4IDUwMTkzYWEuLjI5ZGJjZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ldGh0b29sLmMKQEAgLTIwLDcgKzIwLDggQEAKIAlzdHJjcHkoaW5mby0+dmVyc2lvbiwgbGJzX2RyaXZlcl92ZXJzaW9uKTsKIH0KIAotLyogQWxsIDgzODggcGFydHMgaGF2ZSAxNktpQiBFRVBST00gc2l6ZSBhdCB0aGUgdGltZSBvZiB3cml0aW5nLgorLyoKKyAqIEFsbCA4Mzg4IHBhcnRzIGhhdmUgMTZLaUIgRUVQUk9NIHNpemUgYXQgdGhlIHRpbWUgb2Ygd3JpdGluZy4KICAqIEluIGNhc2UgdGhhdCBjaGFuZ2VzIHRoaXMgbmVlZHMgZml4aW5nLgogICovCiAjZGVmaW5lIExCU19FRVBST01fTEVOIDE2Mzg0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0LmgKaW5kZXggNmNiNjkzNS4uMmUyZGJmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaG9zdC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2hvc3QuaApAQCAtMSw3ICsxLDcgQEAKLS8qKgotICAqIFRoaXMgZmlsZSBmdW5jdGlvbiBwcm90b3R5cGVzLCBkYXRhIHN0cnVjdHVyZQotICAqIGFuZCAgZGVmaW5pdGlvbnMgZm9yIGFsbCB0aGUgaG9zdC9zdGF0aW9uIGNvbW1hbmRzCi0gICovCisvKgorICogVGhpcyBmaWxlIGZ1bmN0aW9uIHByb3RvdHlwZXMsIGRhdGEgc3RydWN0dXJlCisgKiBhbmQgIGRlZmluaXRpb25zIGZvciBhbGwgdGhlIGhvc3Qvc3RhdGlvbiBjb21tYW5kcworICovCiAKICNpZm5kZWYgX0xCU19IT1NUX0hfCiAjZGVmaW5lIF9MQlNfSE9TVF9IXwpAQCAtMTMsOSArMTMsMTAgQEAKIAogI2RlZmluZSBDTURfT1BUSU9OX1dBSVRGT1JSU1AgICAgICAgICAgICAgICAgICAgMHgwMDAyCiAKLS8qKiBIb3N0IGNvbW1hbmQgSURzICovCisvKiBIb3N0IGNvbW1hbmQgSURzICovCiAKLS8qIFJldHVybiBjb21tYW5kIGFyZSBhbG1vc3QgYWx3YXlzIHRoZSBzYW1lIGFzIHRoZSBob3N0IGNvbW1hbmQsIGJ1dCB3aXRoCisvKgorICogUmV0dXJuIGNvbW1hbmQgYXJlIGFsbW9zdCBhbHdheXMgdGhlIHNhbWUgYXMgdGhlIGhvc3QgY29tbWFuZCwgYnV0IHdpdGgKICAqIGJpdCAxNSBzZXQgaGlnaC4gIFRoZXJlIGFyZSBhIGZldyBleGNlcHRpb25zLCB0aG91Z2guLi4KICAqLwogI2RlZmluZSBDTURfUkVUKGNtZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ODAwMCB8IGNtZCkKQEAgLTI1MSw3ICsyNTIsNyBAQAogCUNNRF9UWVBFX01FU0hfR0VUX01FU0hfSUUsIC8qIEdFVF9ERUZBVUxUUyBpcyBzdXBlcnNldCBvZiBHRVRfTUVTSElFICovCiB9OwogCi0vKiogQ2FyZCBFdmVudCBkZWZpbml0aW9uICovCisvKiBDYXJkIEV2ZW50IGRlZmluaXRpb24gKi8KICNkZWZpbmUgTUFDUkVHX0lOVF9DT0RFX1RYX1BQQV9GUkVFCQkwCiAjZGVmaW5lIE1BQ1JFR19JTlRfQ09ERV9UWF9ETUFfRE9ORQkJMQogI2RlZmluZSBNQUNSRUdfSU5UX0NPREVfTElOS19MT1NUX1dfU0NBTgkyCkBAIC02MjQsMTIgKzYyNSwxNCBAQAogc3RydWN0IGNtZF9kc184MDJfMTFfcnNzaSB7CiAJc3RydWN0IGNtZF9oZWFkZXIgaGRyOwogCi0JLyogcmVxdWVzdDogIG51bWJlciBvZiBiZWFjb25zIChOKSB0byBhdmVyYWdlIHRoZSBTTlIgYW5kIE5GIG92ZXIKKwkvKgorCSAqIHJlcXVlc3Q6ICBudW1iZXIgb2YgYmVhY29ucyAoTikgdG8gYXZlcmFnZSB0aGUgU05SIGFuZCBORiBvdmVyCiAJICogcmVzcG9uc2U6IFNOUiBvZiBtb3N0IHJlY2VudCBiZWFjb24KIAkgKi8KIAlfX2xlMTYgbl9vcl9zbnI7CiAKLQkvKiBUaGUgZm9sbG93aW5nIGZpZWxkcyBhcmUgb25seSBzZXQgaW4gdGhlIHJlc3BvbnNlLgorCS8qCisJICogVGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIG9ubHkgc2V0IGluIHRoZSByZXNwb25zZS4KIAkgKiBJbiB0aGUgcmVxdWVzdCB0aGVzZSBhcmUgcmVzZXJ2ZWQgYW5kIHNob3VsZCBiZSBzZXQgdG8gMC4KIAkgKi8KIAlfX2xlMTYgbmY7ICAgICAgIC8qIG1vc3QgcmVjZW50IGJlYWNvbiBub2lzZSBmbG9vciAqLwpAQCAtNjgwLDE0ICs2ODMsMTYgQEAKIAogCV9fbGUxNiBhY3Rpb247CiAKLQkvKiBJbnRlcnZhbCBmb3Iga2VlcGFsaXZlIGluIFBTIG1vZGU6CisJLyoKKwkgKiBJbnRlcnZhbCBmb3Iga2VlcGFsaXZlIGluIFBTIG1vZGU6CiAJICogMHgwMDAwID0gZG9uJ3QgY2hhbmdlCiAJICogMHgwMDFFID0gZmlybXdhcmUgZGVmYXVsdAogCSAqIDB4RkZGRiA9IGRpc2FibGUKIAkgKi8KIAlfX2xlMTYgbnVsbHBrdGludGVydmFsOwogCi0JLyogTnVtYmVyIG9mIERUSU0gaW50ZXJ2YWxzIHRvIHdha2UgdXAgZm9yOgorCS8qCisJICogTnVtYmVyIG9mIERUSU0gaW50ZXJ2YWxzIHRvIHdha2UgdXAgZm9yOgogCSAqIDAgPSBkb24ndCBjaGFuZ2UKIAkgKiAxID0gZmlybXdhcmUgZGVmYXVsdAogCSAqIDUgPSBtYXgKQEAgLTY5Nyw3ICs3MDIsOCBAQAogCV9fbGUxNiByZXNlcnZlZDsKIAlfX2xlMTYgbG9jYWxsaXN0ZW5pbnRlcnZhbDsKIAotCS8qIEFkSG9jIGF3YWtlIHBlcmlvZCAoRlcgdjkrIG9ubHkpOgorCS8qCisJICogQWRIb2MgYXdha2UgcGVyaW9kIChGVyB2OSsgb25seSk6CiAJICogMCA9IGRvbid0IGNoYW5nZQogCSAqIDEgPSBhbHdheXMgYXdha2UgKElFRUUgc3RhbmRhcmQgYmVoYXZpb3IpCiAJICogMiAtIDMxID0gc2xlZXAgZm9yIChuIC0gMSkgcGVyaW9kcyBhbmQgYXdha2UgZm9yIDEgcGVyaW9kCkBAIC03NzEsNyArNzc3LDggQEAKIAlfX2xlMTYgY2FwYWJpbGl0eTsKIAl1OCByYXRlc1tNQVhfUkFURVNdOwogCi0JLyogRE8gTk9UIEFERCBBTlkgRklFTERTIFRPIFRISVMgU1RSVUNUVVJFLiBJdCBpcyB1c2VkIGJlbG93IGluIHRoZQorCS8qCisJICogRE8gTk9UIEFERCBBTlkgRklFTERTIFRPIFRISVMgU1RSVUNUVVJFLiBJdCBpcyB1c2VkIGJlbG93IGluIHRoZQogCSAqIEFkaG9jIGpvaW4gY29tbWFuZCBhbmQgd2lsbCBjYXVzZSBhIGJpbmFyeSBsYXlvdXQgbWlzbWF0Y2ggd2l0aAogCSAqIHRoZSBmaXJtd2FyZQogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX2NzLmMKaW5kZXggODcxMmNiMi4uNjNlZDU3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jCkBAIC0yMSw2ICsyMSw4IEBACiAKICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtMzEyLDcgKzMxNCw4IEBACiAjZGVmaW5lIENGODM4NV9NQU5GSUQJCTB4MDJkZgogI2RlZmluZSBDRjgzODVfQ0FSRElECQkweDgxMDMKIAotLyogRklYTUU6IGp1c3QgdXNlIHRoZSAnZHJpdmVyX2luZm8nIGZpZWxkIG9mICdzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCcgd2hlbgorLyoKKyAqIEZJWE1FOiBqdXN0IHVzZSB0aGUgJ2RyaXZlcl9pbmZvJyBmaWVsZCBvZiAnc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQnIHdoZW4KICAqIHRoYXQgZ2V0cyBmaXhlZC4gIEN1cnJlbnRseSB0aGVyZSdzIG5vIHdheSB0byBhY2Nlc3MgaXQgZnJvbSB0aGUgcHJvYmUgaG9vay4KICAqLwogc3RhdGljIGlubGluZSB1MzIgZ2V0X21vZGVsKHUxNiBtYW5mX2lkLCB1MTYgY2FyZF9pZCkKQEAgLTM2MSw3ICszNjQsNyBAQAogCQlpZiAoc3RhdHVzICYgSUZfQ1NfQklUX0NPTU1BTkQpCiAJCQlicmVhazsKIAkJaWYgKCsrbG9vcHMgPiAxMDApIHsKLQkJCWxic19wcl9lcnIoImNhcmQgbm90IHJlYWR5IGZvciBjb21tYW5kc1xuIik7CisJCQluZXRkZXZfZXJyKHByaXYtPmRldiwgImNhcmQgbm90IHJlYWR5IGZvciBjb21tYW5kc1xuIik7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIAkJbWRlbGF5KDEpOwpAQCAtNDMxLDE0ICs0MzQsMTYgQEAKIAkvKiBpcyBoYXJkd2FyZSByZWFkeT8gKi8KIAlzdGF0dXMgPSBpZl9jc19yZWFkMTYocHJpdi0+Y2FyZCwgSUZfQ1NfQ0FSRF9TVEFUVVMpOwogCWlmICgoc3RhdHVzICYgSUZfQ1NfQklUX1JFU1ApID09IDApIHsKLQkJbGJzX3ByX2Vycigibm8gY21kIHJlc3BvbnNlIGluIGNhcmRcbiIpOworCQluZXRkZXZfZXJyKHByaXYtPmRldiwgIm5vIGNtZCByZXNwb25zZSBpbiBjYXJkXG4iKTsKIAkJKmxlbiA9IDA7CiAJCWdvdG8gb3V0OwogCX0KIAogCSpsZW4gPSBpZl9jc19yZWFkMTYocHJpdi0+Y2FyZCwgSUZfQ1NfUkVTUF9MRU4pOwogCWlmICgoKmxlbiA9PSAwKSB8fCAoKmxlbiA+IExCU19DTURfQlVGRkVSX1NJWkUpKSB7Ci0JCWxic19wcl9lcnIoImNhcmQgY21kIGJ1ZmZlciBoYXMgaW52YWxpZCAjIG9mIGJ5dGVzICglZClcbiIsICpsZW4pOworCQluZXRkZXZfZXJyKHByaXYtPmRldiwKKwkJCSAgICJjYXJkIGNtZCBidWZmZXIgaGFzIGludmFsaWQgIyBvZiBieXRlcyAoJWQpXG4iLAorCQkJICAgKmxlbik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNDcyLDcgKzQ3Nyw5IEBACiAKIAlsZW4gPSBpZl9jc19yZWFkMTYocHJpdi0+Y2FyZCwgSUZfQ1NfUkVBRF9MRU4pOwogCWlmIChsZW4gPT0gMCB8fCBsZW4gPiBNUlZEUlZfRVRIX1JYX1BBQ0tFVF9CVUZGRVJfU0laRSkgewotCQlsYnNfcHJfZXJyKCJjYXJkIGRhdGEgYnVmZmVyIGhhcyBpbnZhbGlkICMgb2YgYnl0ZXMgKCVkKVxuIiwgbGVuKTsKKwkJbmV0ZGV2X2Vycihwcml2LT5kZXYsCisJCQkgICAiY2FyZCBkYXRhIGJ1ZmZlciBoYXMgaW52YWxpZCAjIG9mIGJ5dGVzICglZClcbiIsCisJCQkgICBsZW4pOwogCQlwcml2LT5kZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJZ290byBkYXRfZXJyOwogCX0KQEAgLTYyMSw4ICs2MjgsMTAgQEAKIAkJaWYgKHJlbWFpbiA8IGNvdW50KQogCQkJY291bnQgPSByZW1haW47CiAKLQkJLyogIndyaXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgc2VudCB0byB0aGUgSS9PIENvbW1hbmQKLQkJICogd3JpdGUgbGVuZ3RoIHJlZ2lzdGVyIiAqLworCQkvKgorCQkgKiAid3JpdGUgdGhlIG51bWJlciBvZiBieXRlcyB0byBiZSBzZW50IHRvIHRoZSBJL08gQ29tbWFuZAorCQkgKiB3cml0ZSBsZW5ndGggcmVnaXN0ZXIiCisJCSAqLwogCQlpZl9jc193cml0ZTE2KGNhcmQsIElGX0NTX0NNRF9MRU4sIGNvdW50KTsKIAogCQkvKiAid3JpdGUgdGhpcyB0byBJL08gQ29tbWFuZCBwb3J0IHJlZ2lzdGVyIGFzIDE2IGJpdCB3cml0ZXMgKi8KQEAgLTYzMSwyMSArNjQwLDI3IEBACiAJCQkJJmZ3LT5kYXRhW3NlbnRdLAogCQkJCWNvdW50ID4+IDEpOwogCi0JCS8qICJBc3NlcnQgdGhlIGRvd25sb2FkIG92ZXIgaW50ZXJydXB0IGNvbW1hbmQgaW4gdGhlIEhvc3QKLQkJICogc3RhdHVzIHJlZ2lzdGVyIiAqLworCQkvKgorCQkgKiAiQXNzZXJ0IHRoZSBkb3dubG9hZCBvdmVyIGludGVycnVwdCBjb21tYW5kIGluIHRoZSBIb3N0CisJCSAqIHN0YXR1cyByZWdpc3RlciIKKwkJICovCiAJCWlmX2NzX3dyaXRlOChjYXJkLCBJRl9DU19IT1NUX1NUQVRVUywgSUZfQ1NfQklUX0NPTU1BTkQpOwogCi0JCS8qICJBc3NlcnQgdGhlIGRvd25sb2FkIG92ZXIgaW50ZXJydXB0IGNvbW1hbmQgaW4gdGhlIENhcmQKLQkJICogaW50ZXJydXB0IGNhc2UgcmVnaXN0ZXIiICovCisJCS8qCisJCSAqICJBc3NlcnQgdGhlIGRvd25sb2FkIG92ZXIgaW50ZXJydXB0IGNvbW1hbmQgaW4gdGhlIENhcmQKKwkJICogaW50ZXJydXB0IGNhc2UgcmVnaXN0ZXIiCisJCSAqLwogCQlpZl9jc193cml0ZTE2KGNhcmQsIElGX0NTX0hPU1RfSU5UX0NBVVNFLCBJRl9DU19CSVRfQ09NTUFORCk7CiAKLQkJLyogIlRoZSBob3N0IHBvbGxzIHRoZSBDYXJkIFN0YXR1cyByZWdpc3RlciAuLi4gZm9yIDUwIG1zIGJlZm9yZQotCQkgICBkZWNsYXJpbmcgYSBmYWlsdXJlICovCisJCS8qCisJCSAqICJUaGUgaG9zdCBwb2xscyB0aGUgQ2FyZCBTdGF0dXMgcmVnaXN0ZXIgLi4uIGZvciA1MCBtcyBiZWZvcmUKKwkJICogZGVjbGFyaW5nIGEgZmFpbHVyZSIKKwkJICovCiAJCXJldCA9IGlmX2NzX3BvbGxfd2hpbGVfZndfZG93bmxvYWQoY2FyZCwgSUZfQ1NfQ0FSRF9TVEFUVVMsCiAJCQlJRl9DU19CSVRfQ09NTUFORCk7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQlsYnNfcHJfZXJyKCJjYW4ndCBkb3dubG9hZCBoZWxwZXIgYXQgMHgleCwgcmV0ICVkXG4iLAotCQkJCXNlbnQsIHJldCk7CisJCQlwcl9lcnIoImNhbid0IGRvd25sb2FkIGhlbHBlciBhdCAweCV4LCByZXQgJWRcbiIsCisJCQkgICAgICAgc2VudCwgcmV0KTsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCkBAIC02NzUsNyArNjkwLDcgQEAKIAlyZXQgPSBpZl9jc19wb2xsX3doaWxlX2Z3X2Rvd25sb2FkKGNhcmQsIElGX0NTX1NRX1JFQURfTE9XLAogCQlJRl9DU19TUV9IRUxQRVJfT0spOwogCWlmIChyZXQgPCAwKSB7Ci0JCWxic19wcl9lcnIoImhlbHBlciBmaXJtd2FyZSBkb2Vzbid0IGFuc3dlclxuIik7CisJCXByX2VycigiaGVscGVyIGZpcm13YXJlIGRvZXNuJ3QgYW5zd2VyXG4iKTsKIAkJZ290byBkb25lOwogCX0KIApAQCAtNjgzLDEzICs2OTgsMTMgQEAKIAkJbGVuID0gaWZfY3NfcmVhZDE2KGNhcmQsIElGX0NTX1NRX1JFQURfTE9XKTsKIAkJaWYgKGxlbiAmIDEpIHsKIAkJCXJldHJ5Kys7Ci0JCQlsYnNfcHJfaW5mbygib2RkLCBuZWVkIHRvIHJldHJ5IHRoaXMgZmlybXdhcmUgYmxvY2tcbiIpOworCQkJcHJfaW5mbygib2RkLCBuZWVkIHRvIHJldHJ5IHRoaXMgZmlybXdhcmUgYmxvY2tcbiIpOwogCQl9IGVsc2UgewogCQkJcmV0cnkgPSAwOwogCQl9CiAKIAkJaWYgKHJldHJ5ID4gMjApIHsKLQkJCWxic19wcl9lcnIoImNvdWxkIG5vdCBkb3dubG9hZCBmaXJtd2FyZVxuIik7CisJCQlwcl9lcnIoImNvdWxkIG5vdCBkb3dubG9hZCBmaXJtd2FyZVxuIik7CiAJCQlyZXQgPSAtRU5PREVWOwogCQkJZ290byBkb25lOwogCQl9CkBAIC03MDksMTQgKzcyNCwxNCBAQAogCQlyZXQgPSBpZl9jc19wb2xsX3doaWxlX2Z3X2Rvd25sb2FkKGNhcmQsIElGX0NTX0NBUkRfU1RBVFVTLAogCQkJSUZfQ1NfQklUX0NPTU1BTkQpOwogCQlpZiAocmV0IDwgMCkgewotCQkJbGJzX3ByX2VycigiY2FuJ3QgZG93bmxvYWQgZmlybXdhcmUgYXQgMHgleFxuIiwgc2VudCk7CisJCQlwcl9lcnIoImNhbid0IGRvd25sb2FkIGZpcm13YXJlIGF0IDB4JXhcbiIsIHNlbnQpOwogCQkJZ290byBkb25lOwogCQl9CiAJfQogCiAJcmV0ID0gaWZfY3NfcG9sbF93aGlsZV9md19kb3dubG9hZChjYXJkLCBJRl9DU19TQ1JBVENILCAweDVhKTsKIAlpZiAocmV0IDwgMCkKLQkJbGJzX3ByX2VycigiZmlybXdhcmUgZG93bmxvYWQgZmFpbGVkXG4iKTsKKwkJcHJfZXJyKCJmaXJtd2FyZSBkb3dubG9hZCBmYWlsZWRcbiIpOwogCiBkb25lOgogCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0NTLCAicmV0ICVkIiwgcmV0KTsKQEAgLTc1MCw3ICs3NjUsOCBAQAogCQlyZXQgPSBpZl9jc19zZW5kX2NtZChwcml2LCBidWYsIG5iKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJbGJzX3ByX2VycigiJXM6IHVuc3VwcG9ydGVkIHR5cGUgJWRcbiIsIF9fZnVuY19fLCB0eXBlKTsKKwkJbmV0ZGV2X2Vycihwcml2LT5kZXYsICIlczogdW5zdXBwb3J0ZWQgdHlwZSAlZFxuIiwKKwkJCSAgIF9fZnVuY19fLCB0eXBlKTsKIAl9CiAKIAlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9DUywgInJldCAlZCIsIHJldCk7CkBAIC03NzksNyArNzk1LDcgQEAKIAlwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwogCiAJaWYgKHBfZGV2LT5yZXNvdXJjZVsxXS0+ZW5kKSB7Ci0JCWxic19wcl9lcnIoIndyb25nIENJUyAoY2hlY2sgbnVtYmVyIG9mIElPIHdpbmRvd3MpXG4iKTsKKwkJcHJfZXJyKCJ3cm9uZyBDSVMgKGNoZWNrIG51bWJlciBvZiBJTyB3aW5kb3dzKVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtODAwLDcgKzgxNiw3IEBACiAKIAljYXJkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlmX2NzX2NhcmQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNhcmQpIHsKLQkJbGJzX3ByX2VycigiZXJyb3IgaW4ga3phbGxvY1xuIik7CisJCXByX2VycigiZXJyb3IgaW4ga3phbGxvY1xuIik7CiAJCWdvdG8gb3V0OwogCX0KIAljYXJkLT5wX2RldiA9IHBfZGV2OwpAQCAtODA5LDcgKzgyNSw3IEBACiAJcF9kZXYtPmNvbmZpZ19mbGFncyB8PSBDT05GX0VOQUJMRV9JUlEgfCBDT05GX0FVVE9fU0VUX0lPOwogCiAJaWYgKHBjbWNpYV9sb29wX2NvbmZpZyhwX2RldiwgaWZfY3NfaW9wcm9iZSwgTlVMTCkpIHsKLQkJbGJzX3ByX2VycigiZXJyb3IgaW4gcGNtY2lhX2xvb3BfY29uZmlnXG4iKTsKKwkJcHJfZXJyKCJlcnJvciBpbiBwY21jaWFfbG9vcF9jb25maWdcbiIpOwogCQlnb3RvIG91dDE7CiAJfQogCkBAIC04MjUsMTQgKzg0MSwxNCBAQAogCWNhcmQtPmlvYmFzZSA9IGlvcG9ydF9tYXAocF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCwKIAkJCQlyZXNvdXJjZV9zaXplKHBfZGV2LT5yZXNvdXJjZVswXSkpOwogCWlmICghY2FyZC0+aW9iYXNlKSB7Ci0JCWxic19wcl9lcnIoImVycm9yIGluIGlvcG9ydF9tYXBcbiIpOworCQlwcl9lcnIoImVycm9yIGluIGlvcG9ydF9tYXBcbiIpOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIG91dDE7CiAJfQogCiAJcmV0ID0gcGNtY2lhX2VuYWJsZV9kZXZpY2UocF9kZXYpOwogCWlmIChyZXQpIHsKLQkJbGJzX3ByX2VycigiZXJyb3IgaW4gcGNtY2lhX2VuYWJsZV9kZXZpY2VcbiIpOworCQlwcl9lcnIoImVycm9yIGluIHBjbWNpYV9lbmFibGVfZGV2aWNlXG4iKTsKIAkJZ290byBvdXQyOwogCX0KIApAQCAtODQxLDE0ICs4NTcsMTQgQEAKIAogCS8qCiAJICogTW9zdCBvZiB0aGUgbGliZXJ0YXMgY2FyZHMgY2FuIGRvIHVuYWxpZ25lZCByZWdpc3RlciBhY2Nlc3MsIGJ1dCBzb21lCi0JICogd2VpcmQgb25lcyBjYW4gbm90LiBUaGF0J3MgZXNwZWNpYWxseSB0cnVlIGZvciB0aGUgQ0Y4MzA1IGNhcmQuCisJICogd2VpcmQgb25lcyBjYW5ub3QuIFRoYXQncyBlc3BlY2lhbGx5IHRydWUgZm9yIHRoZSBDRjgzMDUgY2FyZC4KIAkgKi8KIAljYXJkLT5hbGlnbl9yZWdzID0gMDsKIAogCWNhcmQtPm1vZGVsID0gZ2V0X21vZGVsKHBfZGV2LT5tYW5mX2lkLCBwX2Rldi0+Y2FyZF9pZCk7CiAJaWYgKGNhcmQtPm1vZGVsID09IE1PREVMX1VOS05PV04pIHsKLQkJbGJzX3ByX2VycigidW5zdXBwb3J0ZWQgbWFuZl9pZCAweCUwNHggLyBjYXJkX2lkIDB4JTA0eFxuIiwKLQkJCSAgIHBfZGV2LT5tYW5mX2lkLCBwX2Rldi0+Y2FyZF9pZCk7CisJCXByX2VycigidW5zdXBwb3J0ZWQgbWFuZl9pZCAweCUwNHggLyBjYXJkX2lkIDB4JTA0eFxuIiwKKwkJICAgICAgIHBfZGV2LT5tYW5mX2lkLCBwX2Rldi0+Y2FyZF9pZCk7CiAJCWdvdG8gb3V0MjsKIAl9CiAKQEAgLTg1NywyMCArODczLDIwIEBACiAJaWYgKGNhcmQtPm1vZGVsID09IE1PREVMXzgzMDUpIHsKIAkJY2FyZC0+YWxpZ25fcmVncyA9IDE7CiAJCWlmIChwcm9kX2lkIDwgSUZfQ1NfQ0Y4MzA1X0IxX1JFVikgewotCQkJbGJzX3ByX2VycigiODMwNSByZXYgQjAgYW5kIG9sZGVyIGFyZSBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCXByX2VycigiODMwNSByZXYgQjAgYW5kIG9sZGVyIGFyZSBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJCXJldCA9IC1FTk9ERVY7CiAJCQlnb3RvIG91dDI7CiAJCX0KIAl9CiAKIAlpZiAoKGNhcmQtPm1vZGVsID09IE1PREVMXzgzODEpICYmIHByb2RfaWQgPCBJRl9DU19DRjgzODFfQjNfUkVWKSB7Ci0JCWxic19wcl9lcnIoIjgzODEgcmV2IEIyIGFuZCBvbGRlciBhcmUgbm90IHN1cHBvcnRlZFxuIik7CisJCXByX2VycigiODM4MSByZXYgQjIgYW5kIG9sZGVyIGFyZSBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBvdXQyOwogCX0KIAogCWlmICgoY2FyZC0+bW9kZWwgPT0gTU9ERUxfODM4NSkgJiYgcHJvZF9pZCA8IElGX0NTX0NGODM4NV9CMV9SRVYpIHsKLQkJbGJzX3ByX2VycigiODM4NSByZXYgQjAgYW5kIG9sZGVyIGFyZSBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcHJfZXJyKCI4Mzg1IHJldiBCMCBhbmQgb2xkZXIgYXJlIG5vdCBzdXBwb3J0ZWRcbiIpOwogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIG91dDI7CiAJfQpAQCAtODc4LDcgKzg5NCw3IEBACiAJcmV0ID0gbGJzX2dldF9maXJtd2FyZSgmcF9kZXYtPmRldiwgTlVMTCwgTlVMTCwgY2FyZC0+bW9kZWwsCiAJCQkJJmZ3X3RhYmxlWzBdLCAmaGVscGVyLCAmbWFpbmZ3KTsKIAlpZiAocmV0KSB7Ci0JCWxic19wcl9lcnIoImZhaWxlZCB0byBmaW5kIGZpcm13YXJlICglZClcbiIsIHJldCk7CisJCXByX2VycigiZmFpbGVkIHRvIGZpbmQgZmlybXdhcmUgKCVkKVxuIiwgcmV0KTsKIAkJZ290byBvdXQyOwogCX0KIApAQCAtOTA5LDE4ICs5MjUsMjAgQEAKIAlyZXQgPSByZXF1ZXN0X2lycShwX2Rldi0+aXJxLCBpZl9jc19pbnRlcnJ1cHQsCiAJCUlSUUZfU0hBUkVELCBEUlZfTkFNRSwgY2FyZCk7CiAJaWYgKHJldCkgewotCQlsYnNfcHJfZXJyKCJlcnJvciBpbiByZXF1ZXN0X2lycVxuIik7CisJCXByX2VycigiZXJyb3IgaW4gcmVxdWVzdF9pcnFcbiIpOwogCQlnb3RvIG91dDM7CiAJfQogCi0JLyogQ2xlYXIgYW55IGludGVycnVwdCBjYXVzZSB0aGF0IGhhcHBlbmVkIHdoaWxlIHNlbmRpbmcKLQkgKiBmaXJtd2FyZS9pbml0aWFsaXppbmcgY2FyZCAqLworCS8qCisJICogQ2xlYXIgYW55IGludGVycnVwdCBjYXVzZSB0aGF0IGhhcHBlbmVkIHdoaWxlIHNlbmRpbmcKKwkgKiBmaXJtd2FyZS9pbml0aWFsaXppbmcgY2FyZAorCSAqLwogCWlmX2NzX3dyaXRlMTYoY2FyZCwgSUZfQ1NfQ0FSRF9JTlRfQ0FVU0UsIElGX0NTX0JJVF9NQVNLKTsKIAlpZl9jc19lbmFibGVfaW50cyhjYXJkKTsKIAogCS8qIEFuZCBmaW5hbGx5IGJyaW5nIHRoZSBjYXJkIHVwICovCiAJaWYgKGxic19zdGFydF9jYXJkKHByaXYpICE9IDApIHsKLQkJbGJzX3ByX2VycigiY291bGQgbm90IGFjdGl2YXRlIGNhcmRcbiIpOworCQlwcl9lcnIoImNvdWxkIG5vdCBhY3RpdmF0ZSBjYXJkXG4iKTsKIAkJZ290byBvdXQzOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5jCmluZGV4IGI0ZGUwY2EuLmE3YjVjYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NkaW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zZGlvLmMKQEAgLTI2LDYgKzI2LDggQEAKICAqIGlmX3NkaW9fY2FyZF90b19ob3N0KCkgdG8gcGFkIHRoZSBkYXRhLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtNDA5LDcgKzQxMSw3IEBACiAKIG91dDoKIAlpZiAocmV0KQotCQlsYnNfcHJfZXJyKCJwcm9ibGVtIGZldGNoaW5nIHBhY2tldCBmcm9tIGZpcm13YXJlXG4iKTsKKwkJcHJfZXJyKCJwcm9ibGVtIGZldGNoaW5nIHBhY2tldCBmcm9tIGZpcm13YXJlXG4iKTsKIAogCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1NESU8sICJyZXQgJWQiLCByZXQpOwogCkBAIC00NDYsNyArNDQ4LDcgQEAKIAkJfQogCiAJCWlmIChyZXQpCi0JCQlsYnNfcHJfZXJyKCJlcnJvciAlZCBzZW5kaW5nIHBhY2tldCB0byBmaXJtd2FyZVxuIiwgcmV0KTsKKwkJCXByX2VycigiZXJyb3IgJWQgc2VuZGluZyBwYWNrZXQgdG8gZmlybXdhcmVcbiIsIHJldCk7CiAKIAkJc2Rpb19yZWxlYXNlX2hvc3QoY2FyZC0+ZnVuYyk7CiAKQEAgLTU1NSw3ICs1NTcsNyBAQAogCiBvdXQ6CiAJaWYgKHJldCkKLQkJbGJzX3ByX2VycigiZmFpbGVkIHRvIGxvYWQgaGVscGVyIGZpcm13YXJlXG4iKTsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gbG9hZCBoZWxwZXIgZmlybXdhcmVcbiIpOwogCiAJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfU0RJTywgInJldCAlZCIsIHJldCk7CiAJcmV0dXJuIHJldDsKQEAgLTY2OSw3ICs2NzEsNyBAQAogCiBvdXQ6CiAJaWYgKHJldCkKLQkJbGJzX3ByX2VycigiZmFpbGVkIHRvIGxvYWQgZmlybXdhcmVcbiIpOworCQlwcl9lcnIoImZhaWxlZCB0byBsb2FkIGZpcm13YXJlXG4iKTsKIAogCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1NESU8sICJyZXQgJWQiLCByZXQpOwogCXJldHVybiByZXQ7CkBAIC03MjMsNyArNzI1LDcgQEAKIAlyZXQgPSBsYnNfZ2V0X2Zpcm13YXJlKCZjYXJkLT5mdW5jLT5kZXYsIGxic19oZWxwZXJfbmFtZSwgbGJzX2Z3X25hbWUsCiAJCQkJY2FyZC0+bW9kZWwsICZmd190YWJsZVswXSwgJmhlbHBlciwgJm1haW5mdyk7CiAJaWYgKHJldCkgewotCQlsYnNfcHJfZXJyKCJmYWlsZWQgdG8gZmluZCBmaXJtd2FyZSAoJWQpXG4iLCByZXQpOworCQlwcl9lcnIoImZhaWxlZCB0byBmaW5kIGZpcm13YXJlICglZClcbiIsIHJldCk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtODQ5LDcgKzg1MSw3IEBACiAJcmV0ID0gX19sYnNfY21kKHByaXYsIENNRF84MDJfMTFfREVFUF9TTEVFUCwgJmNtZCwgc2l6ZW9mKGNtZCksCiAJCQlsYnNfY21kX2NvcHliYWNrLCAodW5zaWduZWQgbG9uZykgJmNtZCk7CiAJaWYgKHJldCkKLQkJbGJzX3ByX2VycigiREVFUF9TTEVFUCBjbWQgZmFpbGVkXG4iKTsKKwkJbmV0ZGV2X2Vycihwcml2LT5kZXYsICJERUVQX1NMRUVQIGNtZCBmYWlsZWRcbiIpOwogCiAJbWRlbGF5KDIwMCk7CiAJcmV0dXJuIHJldDsKQEAgLTg2NSw3ICs4NjcsNyBAQAogCiAJc2Rpb193cml0ZWIoY2FyZC0+ZnVuYywgSE9TVF9QT1dFUl9VUCwgQ09ORklHVVJBVElPTl9SRUcsICZyZXQpOwogCWlmIChyZXQpCi0JCWxic19wcl9lcnIoInNkaW9fd3JpdGViIGZhaWxlZCFcbiIpOworCQluZXRkZXZfZXJyKHByaXYtPmRldiwgInNkaW9fd3JpdGViIGZhaWxlZCFcbiIpOwogCiAJc2Rpb19yZWxlYXNlX2hvc3QoY2FyZC0+ZnVuYyk7CiAJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfU0RJTywgInJldCAlZCIsIHJldCk7CkBAIC04ODIsNyArODg0LDcgQEAKIAogCXNkaW9fd3JpdGViKGNhcmQtPmZ1bmMsIDAsIENPTkZJR1VSQVRJT05fUkVHLCAmcmV0KTsKIAlpZiAocmV0KQotCQlsYnNfcHJfZXJyKCJzZGlvX3dyaXRlYiBmYWlsZWQhXG4iKTsKKwkJbmV0ZGV2X2Vycihwcml2LT5kZXYsICJzZGlvX3dyaXRlYiBmYWlsZWQhXG4iKTsKIAogCXNkaW9fcmVsZWFzZV9ob3N0KGNhcmQtPmZ1bmMpOwogCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1NESU8sICJyZXQgJWQiLCByZXQpOwpAQCAtOTYxLDcgKzk2Myw3IEBACiAJfQogCiAJaWYgKGkgPT0gZnVuYy0+Y2FyZC0+bnVtX2luZm8pIHsKLQkJbGJzX3ByX2VycigidW5hYmxlIHRvIGlkZW50aWZ5IGNhcmQgbW9kZWxcbiIpOworCQlwcl9lcnIoInVuYWJsZSB0byBpZGVudGlmeSBjYXJkIG1vZGVsXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC05OTUsNyArOTk3LDcgQEAKIAkJCWJyZWFrOwogCX0KIAlpZiAoaSA9PSBBUlJBWV9TSVpFKGZ3X3RhYmxlKSkgewotCQlsYnNfcHJfZXJyKCJ1bmtub3duIGNhcmQgbW9kZWwgMHgleFxuIiwgY2FyZC0+bW9kZWwpOworCQlwcl9lcnIoInVua25vd24gY2FyZCBtb2RlbCAweCV4XG4iLCBjYXJkLT5tb2RlbCk7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gZnJlZTsKIAl9CkBAIC0xMTAxLDcgKzExMDMsNyBAQAogCQlsYnNfZGViX3NkaW8oInNlbmQgZnVuY3Rpb24gSU5JVCBjb21tYW5kXG4iKTsKIAkJaWYgKF9fbGJzX2NtZChwcml2LCBDTURfRlVOQ19JTklULCAmY21kLCBzaXplb2YoY21kKSwKIAkJCQlsYnNfY21kX2NvcHliYWNrLCAodW5zaWduZWQgbG9uZykgJmNtZCkpCi0JCQlsYnNfcHJfYWxlcnQoIkNNRF9GVU5DX0lOSVQgY21kIGZhaWxlZFxuIik7CisJCQluZXRkZXZfYWxlcnQocHJpdi0+ZGV2LCAiQ01EX0ZVTkNfSU5JVCBjbWQgZmFpbGVkXG4iKTsKIAl9CiAKIAlyZXQgPSBsYnNfc3RhcnRfY2FyZChwcml2KTsKQEAgLTExNjMsNyArMTE2NSw3IEBACiAJCWlmIChfX2xic19jbWQoY2FyZC0+cHJpdiwgQ01EX0ZVTkNfU0hVVERPV04sCiAJCQkJJmNtZCwgc2l6ZW9mKGNtZCksIGxic19jbWRfY29weWJhY2ssCiAJCQkJKHVuc2lnbmVkIGxvbmcpICZjbWQpKQotCQkJbGJzX3ByX2FsZXJ0KCJDTURfRlVOQ19TSFVURE9XTiBjbWQgZmFpbGVkXG4iKTsKKwkJCXByX2FsZXJ0KCJDTURfRlVOQ19TSFVURE9XTiBjbWQgZmFpbGVkXG4iKTsKIAl9CiAKIApAQCAtMTIwMiwyMCArMTIwNCwxOSBAQAogCiAJbW1jX3BtX2ZsYWdfdCBmbGFncyA9IHNkaW9fZ2V0X2hvc3RfcG1fY2FwcyhmdW5jKTsKIAotCWxic19wcl9pbmZvKCIlczogc3VzcGVuZDogUE0gZmxhZ3MgPSAweCV4XG4iLAotCQkJCQkJc2Rpb19mdW5jX2lkKGZ1bmMpLCBmbGFncyk7CisJZGV2X2luZm8oZGV2LCAiJXM6IHN1c3BlbmQ6IFBNIGZsYWdzID0gMHgleFxuIiwKKwkJIHNkaW9fZnVuY19pZChmdW5jKSwgZmxhZ3MpOwogCiAJLyogSWYgd2UgYXJlbid0IGJlaW5nIGFza2VkIHRvIHdha2Ugb24gYW55dGhpbmcsIHdlIHNob3VsZCBiYWlsIG91dAogCSAqIGFuZCBsZXQgdGhlIFNEIHN0YWNrIHBvd2VyIGRvd24gdGhlIGNhcmQuCiAJICovCiAJaWYgKGNhcmQtPnByaXYtPndvbF9jcml0ZXJpYSA9PSBFSFNfUkVNT1ZFX1dBS0VVUCkgewotCQlsYnNfcHJfaW5mbygiU3VzcGVuZCB3aXRob3V0IHdha2UgcGFyYW1zIC0tICIKLQkJCQkJCSJwb3dlcmluZyBkb3duIGNhcmQuIik7CisJCWRldl9pbmZvKGRldiwgIlN1c3BlbmQgd2l0aG91dCB3YWtlIHBhcmFtcyAtLSBwb3dlcmluZyBkb3duIGNhcmRcbiIpOwogCQlyZXR1cm4gLUVOT1NZUzsKIAl9CiAKIAlpZiAoIShmbGFncyAmIE1NQ19QTV9LRUVQX1BPV0VSKSkgewotCQlsYnNfcHJfZXJyKCIlczogY2Fubm90IHJlbWFpbiBhbGl2ZSB3aGlsZSBob3N0IGlzIHN1c3BlbmRlZFxuIiwKKwkJZGV2X2VycihkZXYsICIlczogY2Fubm90IHJlbWFpbiBhbGl2ZSB3aGlsZSBob3N0IGlzIHN1c3BlbmRlZFxuIiwKIAkJCXNkaW9fZnVuY19pZChmdW5jKSk7CiAJCXJldHVybiAtRU5PU1lTOwogCX0KQEAgLTEyMzcsNyArMTIzOCw3IEBACiAJc3RydWN0IGlmX3NkaW9fY2FyZCAqY2FyZCA9IHNkaW9fZ2V0X2RydmRhdGEoZnVuYyk7CiAJaW50IHJldDsKIAotCWxic19wcl9pbmZvKCIlczogcmVzdW1lOiB3ZSdyZSBiYWNrXG4iLCBzZGlvX2Z1bmNfaWQoZnVuYykpOworCWRldl9pbmZvKGRldiwgIiVzOiByZXN1bWU6IHdlJ3JlIGJhY2tcbiIsIHNkaW9fZnVuY19pZChmdW5jKSk7CiAKIAlyZXQgPSBsYnNfcmVzdW1lKGNhcmQtPnByaXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCmluZGV4IGY2YzJjZDYuLjQ2MzM1MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCkBAIC0xNyw2ICsxNyw4IEBACiAgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CkBAIC01Nyw2ICs1OSw3IEBACiAJLyogSGFuZGxlcyBhbGwgU1BJIGNvbW11bmljYXRpb24gKGV4Y2VwdCBmb3IgRlcgbG9hZCkgKi8KIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkJKndvcmtxdWV1ZTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCXBhY2tldF93b3JrOworCXN0cnVjdCB3b3JrX3N0cnVjdAkJcmVzdW1lX3dvcms7CiAKIAl1OAkJCQljbWRfYnVmZmVyW0lGX1NQSV9DTURfQlVGX1NJWkVdOwogCkBAIC02OCw2ICs3MSw5IEBACiAKIAkvKiBQcm90ZWN0cyBjbWRfcGFja2V0X2xpc3QgYW5kIGRhdGFfcGFja2V0X2xpc3QgKi8KIAlzcGlubG9ja190CQkJYnVmZmVyX2xvY2s7CisKKwkvKiBUcnVlIGlzIGNhcmQgc3VzcGVuZGVkICovCisJdTgJCQkJc3VzcGVuZGVkOwogfTsKIAogc3RhdGljIHZvaWQgZnJlZV9pZl9zcGlfY2FyZChzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQpCkBAIC0xMzksOCArMTQ1LDEwIEBACiAJY2FyZC0+cHJldl94ZmVyX3RpbWUgPSBqaWZmaWVzOwogfQogCi0vKiBXcml0ZSBvdXQgYSBieXRlIGJ1ZmZlciB0byBhbiBTUEkgcmVnaXN0ZXIsCi0gKiB1c2luZyBhIHNlcmllcyBvZiAxNi1iaXQgdHJhbnNmZXJzLiAqLworLyoKKyAqIFdyaXRlIG91dCBhIGJ5dGUgYnVmZmVyIHRvIGFuIFNQSSByZWdpc3RlciwKKyAqIHVzaW5nIGEgc2VyaWVzIG9mIDE2LWJpdCB0cmFuc2ZlcnMuCisgKi8KIHN0YXRpYyBpbnQgc3B1X3dyaXRlKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwgdTE2IHJlZywgY29uc3QgdTggKmJ1ZiwgaW50IGxlbikKIHsKIAlpbnQgZXJyID0gMDsKQEAgLTIwNCw4ICsyMTIsMTAgQEAKIAlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIGR1bW15X3RyYW5zOwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgZGF0YV90cmFuczsKIAotCS8qIFlvdSBtdXN0IHRha2UgYW4gZXZlbiBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUgU1BVLCBldmVuIGlmIHlvdQotCSAqIGRvbid0IGNhcmUgYWJvdXQgdGhlIGxhc3Qgb25lLiAgKi8KKwkvKgorCSAqIFlvdSBtdXN0IHRha2UgYW4gZXZlbiBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUgU1BVLCBldmVuIGlmIHlvdQorCSAqIGRvbid0IGNhcmUgYWJvdXQgdGhlIGxhc3Qgb25lLgorCSAqLwogCUJVR19PTihsZW4gJiAweDEpOwogCiAJc3B1X3RyYW5zYWN0aW9uX2luaXQoY2FyZCk7CkBAIC0yNTQsOCArMjY0LDEwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogUmVhZCAzMiBiaXRzIGZyb20gYW4gU1BJIHJlZ2lzdGVyLgotICogVGhlIGxvdyAxNiBiaXRzIGFyZSByZWFkIGZpcnN0LiAqLworLyoKKyAqIFJlYWQgMzIgYml0cyBmcm9tIGFuIFNQSSByZWdpc3Rlci4KKyAqIFRoZSBsb3cgMTYgYml0cyBhcmUgcmVhZCBmaXJzdC4KKyAqLwogc3RhdGljIGludCBzcHVfcmVhZF91MzIoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCB1MTYgcmVnLCB1MzIgKnZhbCkKIHsKIAlfX2xlMzIgYnVmOwpAQCAtMjY3LDEzICsyNzksMTUgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0vKiBLZWVwIHJlYWRpbmcgMTYgYml0cyBmcm9tIGFuIFNQSSByZWdpc3RlciB1bnRpbCB5b3UgZ2V0IHRoZSBjb3JyZWN0IHJlc3VsdC4KKy8qCisgKiBLZWVwIHJlYWRpbmcgMTYgYml0cyBmcm9tIGFuIFNQSSByZWdpc3RlciB1bnRpbCB5b3UgZ2V0IHRoZSBjb3JyZWN0IHJlc3VsdC4KICAqCiAgKiBJZiBtYXNrID0gMCwgdGhlIGNvcnJlY3QgcmVzdWx0IGlzIGFueSBub24temVybyBudW1iZXIuCiAgKiBJZiBtYXNrICE9IDAsIHRoZSBjb3JyZWN0IHJlc3VsdCBpcyBhbnkgbnVtYmVyIHdoZXJlCiAgKiBudW1iZXIgJiB0YXJnZXRfbWFzayA9PSB0YXJnZXQKICAqCi0gKiBSZXR1cm5zIC1FVElNRURPVVQgaWYgYSBzZWNvbmQgcGFzc2VzIHdpdGhvdXQgdGhlIGNvcnJlY3QgcmVzdWx0LiAqLworICogUmV0dXJucyAtRVRJTUVET1VUIGlmIGEgc2Vjb25kIHBhc3NlcyB3aXRob3V0IHRoZSBjb3JyZWN0IHJlc3VsdC4KKyAqLwogc3RhdGljIGludCBzcHVfd2FpdF9mb3JfdTE2KHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwgdTE2IHJlZywKIAkJCXUxNiB0YXJnZXRfbWFzaywgdTE2IHRhcmdldCkKIHsKQEAgLTI5MywxNiArMzA3LDE3IEBACiAJCX0KIAkJdWRlbGF5KDEwMCk7CiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7Ci0JCQlsYnNfcHJfZXJyKCIlczogdGltZW91dCB3aXRoIHZhbD0lMDJ4LCAiCi0JCQkgICAgICAgInRhcmdldF9tYXNrPSUwMngsIHRhcmdldD0lMDJ4XG4iLAorCQkJcHJfZXJyKCIlczogdGltZW91dCB3aXRoIHZhbD0lMDJ4LCB0YXJnZXRfbWFzaz0lMDJ4LCB0YXJnZXQ9JTAyeFxuIiwKIAkJCSAgICAgICBfX2Z1bmNfXywgdmFsLCB0YXJnZXRfbWFzaywgdGFyZ2V0KTsKIAkJCXJldHVybiAtRVRJTUVET1VUOwogCQl9CiAJfQogfQogCi0vKiBSZWFkIDE2IGJpdHMgZnJvbSBhbiBTUEkgcmVnaXN0ZXIgdW50aWwgeW91IHJlY2VpdmUgYSBzcGVjaWZpYyB2YWx1ZS4KLSAqIFJldHVybnMgLUVUSU1FRE9VVCBpZiBhIDQgdHJpZXMgcGFzcyB3aXRob3V0IHN1Y2Nlc3MuICovCisvKgorICogUmVhZCAxNiBiaXRzIGZyb20gYW4gU1BJIHJlZ2lzdGVyIHVudGlsIHlvdSByZWNlaXZlIGEgc3BlY2lmaWMgdmFsdWUuCisgKiBSZXR1cm5zIC1FVElNRURPVVQgaWYgYSA0IHRyaWVzIHBhc3Mgd2l0aG91dCBzdWNjZXNzLgorICovCiBzdGF0aWMgaW50IHNwdV93YWl0X2Zvcl91MzIoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCB1MzIgcmVnLCB1MzIgdGFyZ2V0KQogewogCWludCBlcnIsIHRyeTsKQEAgLTMyNCw4ICszMzksMTAgQEAKIHsKIAlpbnQgZXJyID0gMDsKIAotCS8qIFdlIGNhbiBzdXBwcmVzcyBhIGhvc3QgaW50ZXJydXB0IGJ5IGNsZWFyaW5nIHRoZSBhcHByb3ByaWF0ZQotCSAqIGJpdCBpbiB0aGUgImhvc3QgaW50ZXJydXB0IHN0YXR1cyBtYXNrIiByZWdpc3RlciAqLworCS8qCisJICogV2UgY2FuIHN1cHByZXNzIGEgaG9zdCBpbnRlcnJ1cHQgYnkgY2xlYXJpbmcgdGhlIGFwcHJvcHJpYXRlCisJICogYml0IGluIHRoZSAiaG9zdCBpbnRlcnJ1cHQgc3RhdHVzIG1hc2siIHJlZ2lzdGVyCisJICovCiAJaWYgKHN1cHByZXNzX2hvc3RfaW50KSB7CiAJCWVyciA9IHNwdV93cml0ZV91MTYoY2FyZCwgSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19NQVNLX1JFRywgMCk7CiAJCWlmIChlcnIpCkBAIC0zNDEsMTAgKzM1OCwxMiBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKLQkvKiBJZiBhdXRvLWludGVycnVwdHMgYXJlIG9uLCB0aGUgY29tcGxldGlvbiBvZiBjZXJ0YWluIHRyYW5zYWN0aW9ucworCS8qCisJICogSWYgYXV0by1pbnRlcnJ1cHRzIGFyZSBvbiwgdGhlIGNvbXBsZXRpb24gb2YgY2VydGFpbiB0cmFuc2FjdGlvbnMKIAkgKiB3aWxsIHRyaWdnZXIgYW4gaW50ZXJydXB0IGF1dG9tYXRpY2FsbHkuIElmIGF1dG8taW50ZXJydXB0cwogCSAqIGFyZSBvZmYsIHdlIG5lZWQgdG8gc2V0IHRoZSAiQ2FyZCBJbnRlcnJ1cHQgQ2F1c2UiIHJlZ2lzdGVyIHRvCi0JICogdHJpZ2dlciBhIGNhcmQgaW50ZXJydXB0LiAqLworCSAqIHRyaWdnZXIgYSBjYXJkIGludGVycnVwdC4KKwkgKi8KIAlpZiAoYXV0b19pbnQpIHsKIAkJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfSE9TVF9JTlRfQ1RSTF9SRUcsCiAJCQkJSUZfU1BJX0hJQ1RfVFhfRE9XTkxPQURfT1ZFUl9BVVRPIHwKQEAgLTM4Nyw3ICs0MDYsNyBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAJaWYgKChydmFsICYgMHhGKSAhPSBtb2RlKSB7Ci0JCWxic19wcl9lcnIoIkNhbid0IHJlYWQgYnVzIG1vZGUgcmVnaXN0ZXIuXG4iKTsKKwkJcHJfZXJyKCJDYW4ndCByZWFkIGJ1cyBtb2RlIHJlZ2lzdGVyXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCXJldHVybiAwOwpAQCAtMzk4LDggKzQxNywxMCBAQAogCWludCBlcnIgPSAwOwogCXUzMiBkZWxheTsKIAotCS8qIFdlIGhhdmUgdG8gc3RhcnQgdXAgaW4gdGltZWQgZGVsYXkgbW9kZSBzbyB0aGF0IHdlIGNhbiBzYWZlbHkKLQkgKiByZWFkIHRoZSBEZWxheSBSZWFkIFJlZ2lzdGVyLiAqLworCS8qCisJICogV2UgaGF2ZSB0byBzdGFydCB1cCBpbiB0aW1lZCBkZWxheSBtb2RlIHNvIHRoYXQgd2UgY2FuIHNhZmVseQorCSAqIHJlYWQgdGhlIERlbGF5IFJlYWQgUmVnaXN0ZXIuCisJICovCiAJY2FyZC0+dXNlX2R1bW15X3dyaXRlcyA9IDA7CiAJZXJyID0gc3B1X3NldF9idXNfbW9kZShjYXJkLAogCQkJCUlGX1NQSV9CVVNfTU9ERV9TUElfQ0xPQ0tfUEhBU0VfUklTSU5HIHwKQEAgLTQ1NSw4ICs0NzYsMTAgQEAKIAogCS8qIExvYWQgaGVscGVyIGZpcm13YXJlIGltYWdlICovCiAJd2hpbGUgKGJ5dGVzX3JlbWFpbmluZyA+IDApIHsKLQkJLyogU2NyYXRjaCBwYWQgMSBzaG91bGQgY29udGFpbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlCi0JCSAqIHdhbnQgdG8gZG93bmxvYWQgdG8gdGhlIGZpcm13YXJlICovCisJCS8qCisJCSAqIFNjcmF0Y2ggcGFkIDEgc2hvdWxkIGNvbnRhaW4gdGhlIG51bWJlciBvZiBieXRlcyB3ZQorCQkgKiB3YW50IHRvIGRvd25sb2FkIHRvIHRoZSBmaXJtd2FyZQorCQkgKi8KIAkJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfU0NSQVRDSF8xX1JFRywKIAkJCQkJSEVMUEVSX0ZXX0xPQURfQ0hVTktfU1opOwogCQlpZiAoZXJyKQpAQCAtNDY4LDggKzQ5MSwxMCBAQAogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7CiAKLQkJLyogRmVlZCB0aGUgZGF0YSBpbnRvIHRoZSBjb21tYW5kIHJlYWQvd3JpdGUgcG9ydCByZWcKLQkJICogaW4gY2h1bmtzIG9mIDY0IGJ5dGVzICovCisJCS8qCisJCSAqIEZlZWQgdGhlIGRhdGEgaW50byB0aGUgY29tbWFuZCByZWFkL3dyaXRlIHBvcnQgcmVnCisJCSAqIGluIGNodW5rcyBvZiA2NCBieXRlcworCQkgKi8KIAkJbWVtc2V0KHRlbXAsIDAsIHNpemVvZih0ZW1wKSk7CiAJCW1lbWNweSh0ZW1wLCBmdywKIAkJICAgICAgIG1pbihieXRlc19yZW1haW5pbmcsIEhFTFBFUl9GV19MT0FEX0NIVU5LX1NaKSk7CkBAIC00OTEsOSArNTE2LDExIEBACiAJCWZ3ICs9IEhFTFBFUl9GV19MT0FEX0NIVU5LX1NaOwogCX0KIAotCS8qIE9uY2UgdGhlIGhlbHBlciAvIHNpbmdsZSBzdGFnZSBmaXJtd2FyZSBkb3dubG9hZCBpcyBjb21wbGV0ZSwKKwkvKgorCSAqIE9uY2UgdGhlIGhlbHBlciAvIHNpbmdsZSBzdGFnZSBmaXJtd2FyZSBkb3dubG9hZCBpcyBjb21wbGV0ZSwKIAkgKiB3cml0ZSAwIHRvIHNjcmF0Y2ggcGFkIDEgYW5kIGludGVycnVwdCB0aGUKLQkgKiBib290bG9hZGVyLiBUaGlzIGNvbXBsZXRlcyB0aGUgaGVscGVyIGRvd25sb2FkLiAqLworCSAqIGJvb3Rsb2FkZXIuIFRoaXMgY29tcGxldGVzIHRoZSBoZWxwZXIgZG93bmxvYWQuCisJICovCiAJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfU0NSQVRDSF8xX1JFRywgRklSTVdBUkVfRE5MRF9PSyk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CkBAIC01MDgsMjYgKzUzNSwzMCBAQAogCiBvdXQ6CiAJaWYgKGVycikKLQkJbGJzX3ByX2VycigiZmFpbGVkIHRvIGxvYWQgaGVscGVyIGZpcm13YXJlIChlcnI9JWQpXG4iLCBlcnIpOworCQlwcl9lcnIoImZhaWxlZCB0byBsb2FkIGhlbHBlciBmaXJtd2FyZSAoZXJyPSVkKVxuIiwgZXJyKTsKIAlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TUEksICJlcnIgJWQiLCBlcnIpOwogCXJldHVybiBlcnI7CiB9CiAKLS8qIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgbmV4dCBwYWNrZXQgdGhlIGZpcm13YXJlIGV4cGVjdHMgdXMgdG8gc2VuZAotICogU2V0cyBjcmNfZXJyIGlmIHRoZSBwcmV2aW91cyB0cmFuc2ZlciBoYWQgYSBDUkMgZXJyb3IuICovCisvKgorICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBuZXh0IHBhY2tldCB0aGUgZmlybXdhcmUgZXhwZWN0cyB1cyB0byBzZW5kLgorICogU2V0cyBjcmNfZXJyIGlmIHRoZSBwcmV2aW91cyB0cmFuc2ZlciBoYWQgYSBDUkMgZXJyb3IuCisgKi8KIHN0YXRpYyBpbnQgaWZfc3BpX3Byb2dfbWFpbl9maXJtd2FyZV9jaGVja19sZW4oc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLAogCQkJCQkJaW50ICpjcmNfZXJyKQogewogCXUxNiBsZW47CiAJaW50IGVyciA9IDA7CiAKLQkvKiB3YWl0IHVudGlsIHRoZSBob3N0IGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgaW5kaWNhdGVzCi0JICogdGhhdCB3ZSBhcmUgcmVhZHkgdG8gZG93bmxvYWQgKi8KKwkvKgorCSAqIHdhaXQgdW50aWwgdGhlIGhvc3QgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciBpbmRpY2F0ZXMKKwkgKiB0aGF0IHdlIGFyZSByZWFkeSB0byBkb3dubG9hZAorCSAqLwogCWVyciA9IHNwdV93YWl0X2Zvcl91MTYoY2FyZCwgSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19SRUcsCiAJCQkJSUZfU1BJX0hJU1RfQ01EX0RPV05MT0FEX1JEWSwKIAkJCQlJRl9TUElfSElTVF9DTURfRE9XTkxPQURfUkRZKTsKIAlpZiAoZXJyKSB7Ci0JCWxic19wcl9lcnIoInRpbWVkIG91dCB3YWl0aW5nIGZvciBob3N0X2ludF9zdGF0dXNcbiIpOworCQlwcl9lcnIoInRpbWVkIG91dCB3YWl0aW5nIGZvciBob3N0X2ludF9zdGF0dXNcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtNTM3LDkgKzU2OCw4IEBACiAJCXJldHVybiBlcnI7CiAKIAlpZiAobGVuID4gSUZfU1BJX0NNRF9CVUZfU0laRSkgewotCQlsYnNfcHJfZXJyKCJmaXJtd2FyZSBsb2FkIGRldmljZSByZXF1ZXN0ZWQgYSBsYXJnZXIgIgotCQkJICAgInRyYW5mZXIgdGhhbiB3ZSBhcmUgcHJlcGFyZWQgdG8gIgotCQkJICAgImhhbmRsZS4gKGxlbiA9ICVkKVxuIiwgbGVuKTsKKwkJcHJfZXJyKCJmaXJtd2FyZSBsb2FkIGRldmljZSByZXF1ZXN0ZWQgYSBsYXJnZXIgdHJhbnNmZXIgdGhhbiB3ZSBhcmUgcHJlcGFyZWQgdG8gaGFuZGxlIChsZW4gPSAlZClcbiIsCisJCSAgICAgICBsZW4pOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJaWYgKGxlbiAmIDB4MSkgewpAQCAtNTU1LDYgKzU4NSw3IEBACiBzdGF0aWMgaW50IGlmX3NwaV9wcm9nX21haW5fZmlybXdhcmUoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLAogCQkJCQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlKQogeworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGNhcmQtPnByaXY7CiAJaW50IGxlbiwgcHJldl9sZW47CiAJaW50IGJ5dGVzLCBjcmNfZXJyID0gMCwgZXJyID0gMDsKIAljb25zdCB1OCAqZnc7CkBAIC01NjgsOCArNTk5LDkgQEAKIAogCWVyciA9IHNwdV93YWl0X2Zvcl91MTYoY2FyZCwgSUZfU1BJX1NDUkFUQ0hfMV9SRUcsIDAsIDApOwogCWlmIChlcnIpIHsKLQkJbGJzX3ByX2VycigiJXM6IHRpbWVkIG91dCB3YWl0aW5nIGZvciBpbml0aWFsICIKLQkJCSAgICJzY3JhdGNoIHJlZyA9IDBcbiIsIF9fZnVuY19fKTsKKwkJbmV0ZGV2X2Vycihwcml2LT5kZXYsCisJCQkgICAiJXM6IHRpbWVkIG91dCB3YWl0aW5nIGZvciBpbml0aWFsIHNjcmF0Y2ggcmVnID0gMFxuIiwKKwkJCSAgIF9fZnVuY19fKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC01ODMsMTcgKzYxNSwxOCBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAkJaWYgKGJ5dGVzIDwgMCkgewotCQkJLyogSWYgdGhlcmUgYXJlIG5vIG1vcmUgYnl0ZXMgbGVmdCwgd2Ugd291bGQgbm9ybWFsbHkKLQkJCSAqIGV4cGVjdCB0byBoYXZlIHRlcm1pbmF0ZWQgd2l0aCBsZW4gPSAwICovCi0JCQlsYnNfcHJfZXJyKCJGaXJtd2FyZSBsb2FkIHdhbnRzIG1vcmUgYnl0ZXMgIgotCQkJCSAgICJ0aGFuIHdlIGhhdmUgdG8gb2ZmZXIuXG4iKTsKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBieXRlcyBsZWZ0LCB3ZSB3b3VsZCBub3JtYWxseQorCQkJICogZXhwZWN0IHRvIGhhdmUgdGVybWluYXRlZCB3aXRoIGxlbiA9IDAKKwkJCSAqLworCQkJbmV0ZGV2X2Vycihwcml2LT5kZXYsCisJCQkJICAgIkZpcm13YXJlIGxvYWQgd2FudHMgbW9yZSBieXRlcyB0aGFuIHdlIGhhdmUgdG8gb2ZmZXIuXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChjcmNfZXJyKSB7CiAJCQkvKiBQcmV2aW91cyB0cmFuc2ZlciBmYWlsZWQuICovCiAJCQlpZiAoKytudW1fY3JjX2VycnMgPiBNQVhfTUFJTl9GV19MT0FEX0NSQ19FUlIpIHsKLQkJCQlsYnNfcHJfZXJyKCJUb28gbWFueSBDUkMgZXJyb3JzIGVuY291bnRlcmVkICIKLQkJCQkJICAgImluIGZpcm13YXJlIGxvYWQuXG4iKTsKKwkJCQlwcl9lcnIoIlRvbyBtYW55IENSQyBlcnJvcnMgZW5jb3VudGVyZWQgaW4gZmlybXdhcmUgbG9hZC5cbiIpOwogCQkJCWVyciA9IC1FSU87CiAJCQkJZ290byBvdXQ7CiAJCQl9CkBAIC02MjIsMjEgKzY1NSwyMCBAQAogCQlwcmV2X2xlbiA9IGxlbjsKIAl9CiAJaWYgKGJ5dGVzID4gcHJldl9sZW4pIHsKLQkJbGJzX3ByX2VycigiZmlybXdhcmUgbG9hZCB3YW50cyBmZXdlciBieXRlcyB0aGFuICIKLQkJCSAgICJ3ZSBoYXZlIHRvIG9mZmVyLlxuIik7CisJCXByX2VycigiZmlybXdhcmUgbG9hZCB3YW50cyBmZXdlciBieXRlcyB0aGFuIHdlIGhhdmUgdG8gb2ZmZXJcbiIpOwogCX0KIAogCS8qIENvbmZpcm0gZmlybXdhcmUgZG93bmxvYWQgKi8KIAllcnIgPSBzcHVfd2FpdF9mb3JfdTMyKGNhcmQsIElGX1NQSV9TQ1JBVENIXzRfUkVHLAogCQkJCQlTVUNDRVNTRlVMX0ZXX0RPV05MT0FEX01BR0lDKTsKIAlpZiAoZXJyKSB7Ci0JCWxic19wcl9lcnIoImZhaWxlZCB0byBjb25maXJtIHRoZSBmaXJtd2FyZSBkb3dubG9hZFxuIik7CisJCXByX2VycigiZmFpbGVkIHRvIGNvbmZpcm0gdGhlIGZpcm13YXJlIGRvd25sb2FkXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCiBvdXQ6CiAJaWYgKGVycikKLQkJbGJzX3ByX2VycigiZmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgKGVycj0lZClcbiIsIGVycik7CisJCXByX2VycigiZmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgKGVycj0lZClcbiIsIGVycik7CiAJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfU1BJLCAiZXJyICVkIiwgZXJyKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNjU2LDE0ICs2ODgsMTggQEAKIAl1MTYgbGVuOwogCXU4IGk7CiAKLQkvKiBXZSBuZWVkIGEgYnVmZmVyIGJpZyBlbm91Z2ggdG8gaGFuZGxlIHdoYXRldmVyIHBlb3BsZSBzZW5kIHRvCi0JICogaHdfaG9zdF90b19jYXJkICovCisJLyoKKwkgKiBXZSBuZWVkIGEgYnVmZmVyIGJpZyBlbm91Z2ggdG8gaGFuZGxlIHdoYXRldmVyIHBlb3BsZSBzZW5kIHRvCisJICogaHdfaG9zdF90b19jYXJkCisJICovCiAJQlVJTERfQlVHX09OKElGX1NQSV9DTURfQlVGX1NJWkUgPCBMQlNfQ01EX0JVRkZFUl9TSVpFKTsKIAlCVUlMRF9CVUdfT04oSUZfU1BJX0NNRF9CVUZfU0laRSA8IExCU19VUExEX1NJWkUpOwogCi0JLyogSXQncyBqdXN0IGFubm95aW5nIGlmIHRoZSBidWZmZXIgc2l6ZSBpc24ndCBhIG11bHRpcGxlIG9mIDQsIGJlY2F1c2UKLQkgKiB0aGVuIHdlIG1pZ2h0IGhhdmUgbGVuIDwgIElGX1NQSV9DTURfQlVGX1NJWkUgYnV0Ci0JICogQUxJR04obGVuLCA0KSA+IElGX1NQSV9DTURfQlVGX1NJWkUgKi8KKwkvKgorCSAqIEl0J3MganVzdCBhbm5veWluZyBpZiB0aGUgYnVmZmVyIHNpemUgaXNuJ3QgYSBtdWx0aXBsZSBvZiA0LCBiZWNhdXNlCisJICogdGhlbiB3ZSBtaWdodCBoYXZlIGxlbiA8IElGX1NQSV9DTURfQlVGX1NJWkUgYnV0CisJICogQUxJR04obGVuLCA0KSA+IElGX1NQSV9DTURfQlVGX1NJWkUKKwkgKi8KIAlCVUlMRF9CVUdfT04oSUZfU1BJX0NNRF9CVUZfU0laRSAlIDQgIT0gMCk7CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfU1BJKTsKQEAgLTY3MywxMyArNzA5LDEzIEBACiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAJaWYgKCFsZW4pIHsKLQkJbGJzX3ByX2VycigiJXM6IGVycm9yOiBjYXJkIGhhcyBubyBkYXRhIGZvciBob3N0XG4iLAorCQluZXRkZXZfZXJyKHByaXYtPmRldiwgIiVzOiBlcnJvcjogY2FyZCBoYXMgbm8gZGF0YSBmb3IgaG9zdFxuIiwKIAkJCSAgIF9fZnVuY19fKTsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfSBlbHNlIGlmIChsZW4gPiBJRl9TUElfQ01EX0JVRl9TSVpFKSB7Ci0JCWxic19wcl9lcnIoIiVzOiBlcnJvcjogcmVzcG9uc2UgcGFja2V0IHRvbyBsYXJnZTogIgotCQkJICAgIiVkIGJ5dGVzLCBidXQgbWF4aW11bSBpcyAlZFxuIiwKKwkJbmV0ZGV2X2Vycihwcml2LT5kZXYsCisJCQkgICAiJXM6IGVycm9yOiByZXNwb25zZSBwYWNrZXQgdG9vIGxhcmdlOiAlZCBieXRlcywgYnV0IG1heGltdW0gaXMgJWRcbiIsCiAJCQkgICBfX2Z1bmNfXywgbGVuLCBJRl9TUElfQ01EX0JVRl9TSVpFKTsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CkBAIC03MDEsNyArNzM3LDcgQEAKIAogb3V0OgogCWlmIChlcnIpCi0JCWxic19wcl9lcnIoIiVzOiBlcnI9JWRcbiIsIF9fZnVuY19fLCBlcnIpOworCQluZXRkZXZfZXJyKHByaXYtPmRldiwgIiVzOiBlcnI9JWRcbiIsIF9fZnVuY19fLCBlcnIpOwogCWxic19kZWJfbGVhdmUoTEJTX0RFQl9TUEkpOwogCXJldHVybiBlcnI7CiB9CkBAIC03MDksNiArNzQ1LDcgQEAKIC8qIE1vdmUgZGF0YSBmcm9tIHRoZSBjYXJkIHRvIHRoZSBob3N0ICovCiBzdGF0aWMgaW50IGlmX3NwaV9jMmhfZGF0YShzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQpCiB7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gY2FyZC0+cHJpdjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWNoYXIgKmRhdGE7CiAJdTE2IGxlbjsKQEAgLTcyMSwxMyArNzU4LDEzIEBACiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAJaWYgKCFsZW4pIHsKLQkJbGJzX3ByX2VycigiJXM6IGVycm9yOiBjYXJkIGhhcyBubyBkYXRhIGZvciBob3N0XG4iLAorCQluZXRkZXZfZXJyKHByaXYtPmRldiwgIiVzOiBlcnJvcjogY2FyZCBoYXMgbm8gZGF0YSBmb3IgaG9zdFxuIiwKIAkJCSAgIF9fZnVuY19fKTsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfSBlbHNlIGlmIChsZW4gPiBNUlZEUlZfRVRIX1JYX1BBQ0tFVF9CVUZGRVJfU0laRSkgewotCQlsYnNfcHJfZXJyKCIlczogZXJyb3I6IGNhcmQgaGFzICVkIGJ5dGVzIG9mIGRhdGEsIGJ1dCAiCi0JCQkgICAib3VyIG1heGltdW0gc2tiIHNpemUgaXMgJXp1XG4iLAorCQluZXRkZXZfZXJyKHByaXYtPmRldiwKKwkJCSAgICIlczogZXJyb3I6IGNhcmQgaGFzICVkIGJ5dGVzIG9mIGRhdGEsIGJ1dCBvdXIgbWF4aW11bSBza2Igc2l6ZSBpcyAlenVcbiIsCiAJCQkgICBfX2Z1bmNfXywgbGVuLCBNUlZEUlZfRVRIX1JYX1BBQ0tFVF9CVUZGRVJfU0laRSk7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwpAQCAtNzU5LDcgKzc5Niw3IEBACiAJZGV2X2tmcmVlX3NrYihza2IpOwogb3V0OgogCWlmIChlcnIpCi0JCWxic19wcl9lcnIoIiVzOiBlcnI9JWRcbiIsIF9fZnVuY19fLCBlcnIpOworCQluZXRkZXZfZXJyKHByaXYtPmRldiwgIiVzOiBlcnI9JWRcbiIsIF9fZnVuY19fLCBlcnIpOwogCWxic19kZWJfbGVhdmUoTEJTX0RFQl9TUEkpOwogCXJldHVybiBlcnI7CiB9CkBAIC03NjgsNiArODA1LDcgQEAKIHN0YXRpYyB2b2lkIGlmX3NwaV9oMmMoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLAogCQkJc3RydWN0IGlmX3NwaV9wYWNrZXQgKnBhY2tldCwgaW50IHR5cGUpCiB7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gY2FyZC0+cHJpdjsKIAlpbnQgZXJyID0gMDsKIAl1MTYgaW50X3R5cGUsIHBvcnRfcmVnOwogCkBAIC03ODEsNyArODE5LDggQEAKIAkJcG9ydF9yZWcgPSBJRl9TUElfQ01EX1JEV1JQT1JUX1JFRzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJbGJzX3ByX2VycigiY2FuJ3QgdHJhbnNmZXIgYnVmZmVyIG9mIHR5cGUgJWRcbiIsIHR5cGUpOworCQluZXRkZXZfZXJyKHByaXYtPmRldiwgImNhbid0IHRyYW5zZmVyIGJ1ZmZlciBvZiB0eXBlICVkXG4iLAorCQkJICAgdHlwZSk7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTc5NSw3ICs4MzQsNyBAQAogCWtmcmVlKHBhY2tldCk7CiAKIAlpZiAoZXJyKQotCQlsYnNfcHJfZXJyKCIlczogZXJyb3IgJWRcbiIsIF9fZnVuY19fLCBlcnIpOworCQluZXRkZXZfZXJyKHByaXYtPmRldiwgIiVzOiBlcnJvciAlZFxuIiwgX19mdW5jX18sIGVycik7CiB9CiAKIC8qIEluZm9ybSB0aGUgaG9zdCBhYm91dCBhIGNhcmQgZXZlbnQgKi8KQEAgLTgxOSw3ICs4NTgsNyBAQAogCWxic19xdWV1ZV9ldmVudChwcml2LCBjYXVzZSAmIDB4ZmYpOwogb3V0OgogCWlmIChlcnIpCi0JCWxic19wcl9lcnIoIiVzOiBlcnJvciAlZFxuIiwgX19mdW5jX18sIGVycik7CisJCW5ldGRldl9lcnIocHJpdi0+ZGV2LCAiJXM6IGVycm9yICVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKIH0KIAogc3RhdGljIHZvaWQgaWZfc3BpX2hvc3RfdG9fY2FyZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtODI5LDE3ICs4NjgsMjEgQEAKIAl1MTYgaGlTdGF0dXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgaWZfc3BpX3BhY2tldCAqcGFja2V0OworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdjsKIAogCWNhcmQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGlmX3NwaV9jYXJkLCBwYWNrZXRfd29yayk7CisJcHJpdiA9IGNhcmQtPnByaXY7CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfU1BJKTsKIAotCS8qIFJlYWQgdGhlIGhvc3QgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciB0byBzZWUgd2hhdCB3ZQotCSAqIGNhbiBkby4gKi8KKwkvKgorCSAqIFJlYWQgdGhlIGhvc3QgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciB0byBzZWUgd2hhdCB3ZQorCSAqIGNhbiBkby4KKwkgKi8KIAllcnIgPSBzcHVfcmVhZF91MTYoY2FyZCwgSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19SRUcsCiAJCQkJJmhpU3RhdHVzKTsKIAlpZiAoZXJyKSB7Ci0JCWxic19wcl9lcnIoIkkvTyBlcnJvclxuIik7CisJCW5ldGRldl9lcnIocHJpdi0+ZGV2LCAiSS9PIGVycm9yXG4iKTsKIAkJZ290byBlcnI7CiAJfQogCkBAIC04NTQsMTIgKzg5NywxNSBAQAogCQkJZ290byBlcnI7CiAJfQogCi0JLyogd29ya2Fyb3VuZDogaW4gUFMgbW9kZSwgdGhlIGNhcmQgZG9lcyBub3Qgc2V0IHRoZSBDb21tYW5kCi0JICogRG93bmxvYWQgUmVhZHkgYml0LCBidXQgaXQgc2V0cyBUWCBEb3dubG9hZCBSZWFkeS4gKi8KKwkvKgorCSAqIHdvcmthcm91bmQ6IGluIFBTIG1vZGUsIHRoZSBjYXJkIGRvZXMgbm90IHNldCB0aGUgQ29tbWFuZAorCSAqIERvd25sb2FkIFJlYWR5IGJpdCwgYnV0IGl0IHNldHMgVFggRG93bmxvYWQgUmVhZHkuCisJICovCiAJaWYgKGhpU3RhdHVzICYgSUZfU1BJX0hJU1RfQ01EX0RPV05MT0FEX1JEWSB8fAogCSAgIChjYXJkLT5wcml2LT5wc3N0YXRlICE9IFBTX1NUQVRFX0ZVTExfUE9XRVIgJiYKIAkgICAgKGhpU3RhdHVzICYgSUZfU1BJX0hJU1RfVFhfRE9XTkxPQURfUkRZKSkpIHsKLQkJLyogVGhpcyBtZWFucyB0d28gdGhpbmdzLiBGaXJzdCBvZiBhbGwsCisJCS8qCisJCSAqIFRoaXMgbWVhbnMgdHdvIHRoaW5ncy4gRmlyc3Qgb2YgYWxsLAogCQkgKiBpZiB0aGVyZSB3YXMgYSBwcmV2aW91cyBjb21tYW5kIHNlbnQsIHRoZSBjYXJkIGhhcwogCQkgKiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgaXQuCiAJCSAqIFNlY29uZGx5LCBpdCBpcyBub3cgcmVhZHkgdG8gZG93bmxvYWQgYW5vdGhlcgpAQCAtODY3LDggKzkxMyw3IEBACiAJCSAqLwogCQlsYnNfaG9zdF90b19jYXJkX2RvbmUoY2FyZC0+cHJpdik7CiAKLQkJLyogRG8gd2UgaGF2ZSBhbnkgY29tbWFuZCBwYWNrZXRzIGZyb20gdGhlIGhvc3QgdG8KLQkJICogc2VuZD8gKi8KKwkJLyogRG8gd2UgaGF2ZSBhbnkgY29tbWFuZCBwYWNrZXRzIGZyb20gdGhlIGhvc3QgdG8gc2VuZD8gKi8KIAkJcGFja2V0ID0gTlVMTDsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CiAJCWlmICghbGlzdF9lbXB0eSgmY2FyZC0+Y21kX3BhY2tldF9saXN0KSkgewpAQCAtODgyLDggKzkyNyw3IEBACiAJCQlpZl9zcGlfaDJjKGNhcmQsIHBhY2tldCwgTVZNU19DTUQpOwogCX0KIAlpZiAoaGlTdGF0dXMgJiBJRl9TUElfSElTVF9UWF9ET1dOTE9BRF9SRFkpIHsKLQkJLyogRG8gd2UgaGF2ZSBhbnkgZGF0YSBwYWNrZXRzIGZyb20gdGhlIGhvc3QgdG8KLQkJICogc2VuZD8gKi8KKwkJLyogRG8gd2UgaGF2ZSBhbnkgZGF0YSBwYWNrZXRzIGZyb20gdGhlIGhvc3QgdG8gc2VuZD8gKi8KIAkJcGFja2V0ID0gTlVMTDsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CiAJCWlmICghbGlzdF9lbXB0eSgmY2FyZC0+ZGF0YV9wYWNrZXRfbGlzdCkpIHsKQEAgLTkwMSw3ICs5NDUsNyBAQAogCiBlcnI6CiAJaWYgKGVycikKLQkJbGJzX3ByX2VycigiJXM6IGdvdCBlcnJvciAlZFxuIiwgX19mdW5jX18sIGVycik7CisJCW5ldGRldl9lcnIocHJpdi0+ZGV2LCAiJXM6IGdvdCBlcnJvciAlZFxuIiwgX19mdW5jX18sIGVycik7CiAKIAlsYnNfZGViX2xlYXZlKExCU19ERUJfU1BJKTsKIH0KQEAgLTkxMCw3ICs5NTQsOCBAQAogICogSG9zdCB0byBDYXJkCiAgKgogICogQ2FsbGVkIGZyb20gTGliZXJ0YXMgdG8gdHJhbnNmZXIgc29tZSBkYXRhIHRvIHRoZSBXTEFOIGRldmljZQotICogV2UgY2FuJ3Qgc2xlZXAgaGVyZS4gKi8KKyAqIFdlIGNhbid0IHNsZWVwIGhlcmUuCisgKi8KIHN0YXRpYyBpbnQgaWZfc3BpX2hvc3RfdG9fY2FyZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsCiAJCQkJdTggdHlwZSwgdTggKmJ1ZiwgdTE2IG5iKQogewpAQCAtOTIzLDcgKzk2OCw4IEBACiAJbGJzX2RlYl9lbnRlcl9hcmdzKExCU19ERUJfU1BJLCAidHlwZSAlZCwgYnl0ZXMgJWQiLCB0eXBlLCBuYik7CiAKIAlpZiAobmIgPT0gMCkgewotCQlsYnNfcHJfZXJyKCIlczogaW52YWxpZCBzaXplIHJlcXVlc3RlZDogJWRcbiIsIF9fZnVuY19fLCBuYik7CisJCW5ldGRldl9lcnIocHJpdi0+ZGV2LCAiJXM6IGludmFsaWQgc2l6ZSByZXF1ZXN0ZWQ6ICVkXG4iLAorCQkJICAgX19mdW5jX18sIG5iKTsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtOTUxLDcgKzk5Nyw4IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWxic19wcl9lcnIoImNhbid0IHRyYW5zZmVyIGJ1ZmZlciBvZiB0eXBlICVkIiwgdHlwZSk7CisJCW5ldGRldl9lcnIocHJpdi0+ZGV2LCAiY2FuJ3QgdHJhbnNmZXIgYnVmZmVyIG9mIHR5cGUgJWRcbiIsCisJCQkgICB0eXBlKTsKIAkJZXJyID0gLUVJTlZBTDsKIAkJYnJlYWs7CiAJfQpAQCAtOTg0LDYgKzEwMzEsNyBAQAogCiBzdGF0aWMgaW50IGlmX3NwaV9pbml0X2NhcmQoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkKQogeworCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGNhcmQtPnByaXY7CiAJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IGNhcmQtPnNwaTsKIAlpbnQgZXJyLCBpOwogCXUzMiBzY3JhdGNoOwpAQCAtMTAxMiw4ICsxMDYwLDggQEAKIAkJCQlicmVhazsKIAkJfQogCQlpZiAoaSA9PSBBUlJBWV9TSVpFKGZ3X3RhYmxlKSkgewotCQkJbGJzX3ByX2VycigiVW5zdXBwb3J0ZWQgY2hpcF9pZDogMHglMDJ4XG4iLAotCQkJCQljYXJkLT5jYXJkX2lkKTsKKwkJCW5ldGRldl9lcnIocHJpdi0+ZGV2LCAiVW5zdXBwb3J0ZWQgY2hpcF9pZDogMHglMDJ4XG4iLAorCQkJCSAgIGNhcmQtPmNhcmRfaWQpOwogCQkJZXJyID0gLUVOT0RFVjsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0xMDIyLDcgKzEwNzAsOCBAQAogCQkJCQljYXJkLT5jYXJkX2lkLCAmZndfdGFibGVbMF0sICZoZWxwZXIsCiAJCQkJCSZtYWluZncpOwogCQlpZiAoZXJyKSB7Ci0JCQlsYnNfcHJfZXJyKCJmYWlsZWQgdG8gZmluZCBmaXJtd2FyZSAoJWQpXG4iLCBlcnIpOworCQkJbmV0ZGV2X2Vycihwcml2LT5kZXYsICJmYWlsZWQgdG8gZmluZCBmaXJtd2FyZSAoJWQpXG4iLAorCQkJCSAgIGVycik7CiAJCQlnb3RvIG91dDsKIAkJfQogCkBAIC0xMDU3LDYgKzExMDYsMjggQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgdm9pZCBpZl9zcGlfcmVzdW1lX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkOworCisJY2FyZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWZfc3BpX2NhcmQsIHJlc3VtZV93b3JrKTsKKworCWlmIChjYXJkLT5zdXNwZW5kZWQpIHsKKwkJaWYgKGNhcmQtPnBkYXRhLT5zZXR1cCkKKwkJCWNhcmQtPnBkYXRhLT5zZXR1cChjYXJkLT5zcGkpOworCisJCS8qIEluaXQgY2FyZCAuLi4gKi8KKwkJaWZfc3BpX2luaXRfY2FyZChjYXJkKTsKKworCQllbmFibGVfaXJxKGNhcmQtPnNwaS0+aXJxKTsKKworCQkvKiBBbmQgcmVzdW1lIGl0IC4uLiAqLworCQlsYnNfcmVzdW1lKGNhcmQtPnByaXYpOworCisJCWNhcmQtPnN1c3BlbmRlZCA9IDA7CisJfQorfQorCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpZl9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQ7CkBAIC0xMDk5LDE0ICsxMTcwLDE3IEBACiAJaWYgKGVycikKIAkJZ290byBmcmVlX2NhcmQ7CiAKLQkvKiBSZWdpc3RlciBvdXIgY2FyZCB3aXRoIGxpYmVydGFzLgotCSAqIFRoaXMgd2lsbCBjYWxsIGFsbG9jX2V0aGVyZGV2ICovCisJLyoKKwkgKiBSZWdpc3RlciBvdXIgY2FyZCB3aXRoIGxpYmVydGFzLgorCSAqIFRoaXMgd2lsbCBjYWxsIGFsbG9jX2V0aGVyZGV2LgorCSAqLwogCXByaXYgPSBsYnNfYWRkX2NhcmQoY2FyZCwgJnNwaS0+ZGV2KTsKIAlpZiAoIXByaXYpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBmcmVlX2NhcmQ7CiAJfQogCWNhcmQtPnByaXYgPSBwcml2OworCXByaXYtPnNldHVwX2Z3X29uX3Jlc3VtZSA9IDE7CiAJcHJpdi0+Y2FyZCA9IGNhcmQ7CiAJcHJpdi0+aHdfaG9zdF90b19jYXJkID0gaWZfc3BpX2hvc3RfdG9fY2FyZDsKIAlwcml2LT5lbnRlcl9kZWVwX3NsZWVwID0gTlVMTDsKQEAgLTExMTcsMTcgKzExOTEsMjAgQEAKIAkvKiBJbml0aWFsaXplIGludGVycnVwdCBoYW5kbGluZyBzdHVmZi4gKi8KIAljYXJkLT53b3JrcXVldWUgPSBjcmVhdGVfd29ya3F1ZXVlKCJsaWJlcnRhc19zcGkiKTsKIAlJTklUX1dPUksoJmNhcmQtPnBhY2tldF93b3JrLCBpZl9zcGlfaG9zdF90b19jYXJkX3dvcmtlcik7CisJSU5JVF9XT1JLKCZjYXJkLT5yZXN1bWVfd29yaywgaWZfc3BpX3Jlc3VtZV93b3JrZXIpOwogCiAJZXJyID0gcmVxdWVzdF9pcnEoc3BpLT5pcnEsIGlmX3NwaV9ob3N0X2ludGVycnVwdCwKIAkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HLCAibGliZXJ0YXNfc3BpIiwgY2FyZCk7CiAJaWYgKGVycikgewotCQlsYnNfcHJfZXJyKCJjYW4ndCBnZXQgaG9zdCBpcnEgbGluZS0tIHJlcXVlc3RfaXJxIGZhaWxlZFxuIik7CisJCXByX2VycigiY2FuJ3QgZ2V0IGhvc3QgaXJxIGxpbmUtLSByZXF1ZXN0X2lycSBmYWlsZWRcbiIpOwogCQlnb3RvIHRlcm1pbmF0ZV93b3JrcXVldWU7CiAJfQogCi0JLyogU3RhcnQgdGhlIGNhcmQuCisJLyoKKwkgKiBTdGFydCB0aGUgY2FyZC4KIAkgKiBUaGlzIHdpbGwgY2FsbCByZWdpc3Rlcl9uZXRkZXYsIGFuZCB3ZSdsbCBzdGFydAotCSAqIGdldHRpbmcgaW50ZXJydXB0cy4uLiAqLworCSAqIGdldHRpbmcgaW50ZXJydXB0cy4uLgorCSAqLwogCWVyciA9IGxic19zdGFydF9jYXJkKHByaXYpOwogCWlmIChlcnIpCiAJCWdvdG8gcmVsZWFzZV9pcnE7CkBAIC0xMTYxLDYgKzEyMzgsOCBAQAogCWxic19kZWJfc3BpKCJsaWJlcnRhc19zcGlfcmVtb3ZlXG4iKTsKIAlsYnNfZGViX2VudGVyKExCU19ERUJfU1BJKTsKIAorCWNhbmNlbF93b3JrX3N5bmMoJmNhcmQtPnJlc3VtZV93b3JrKTsKKwogCWxic19zdG9wX2NhcmQocHJpdik7CiAJbGJzX3JlbW92ZV9jYXJkKHByaXYpOyAvKiB3aWxsIGNhbGwgZnJlZV9uZXRkZXYgKi8KIApAQCAtMTE3NCw2ICsxMjUzLDQwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaWZfc3BpX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSB0b19zcGlfZGV2aWNlKGRldik7CisJc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CisKKwlpZiAoIWNhcmQtPnN1c3BlbmRlZCkgeworCQlsYnNfc3VzcGVuZChjYXJkLT5wcml2KTsKKwkJZmx1c2hfd29ya3F1ZXVlKGNhcmQtPndvcmtxdWV1ZSk7CisJCWRpc2FibGVfaXJxKHNwaS0+aXJxKTsKKworCQlpZiAoY2FyZC0+cGRhdGEtPnRlYXJkb3duKQorCQkJY2FyZC0+cGRhdGEtPnRlYXJkb3duKHNwaSk7CisJCWNhcmQtPnN1c3BlbmRlZCA9IDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaWZfc3BpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHRvX3NwaV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKKworCS8qIFNjaGVkdWxlIGRlbGF5ZWQgd29yayAqLworCXNjaGVkdWxlX3dvcmsoJmNhcmQtPnJlc3VtZV93b3JrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgaWZfc3BpX3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IGlmX3NwaV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gaWZfc3BpX3Jlc3VtZSwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBsaWJlcnRhc19zcGlfZHJpdmVyID0gewogCS5wcm9iZQk9IGlmX3NwaV9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3AobGliZXJ0YXNfc3BpX3JlbW92ZSksCkBAIC0xMTgxLDYgKzEyOTQsNyBAQAogCQkubmFtZQk9ICJsaWJlcnRhc19zcGkiLAogCQkuYnVzCT0gJnNwaV9idXNfdHlwZSwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5wbQk9ICZpZl9zcGlfcG1fb3BzLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5oCmluZGV4IGQyYWMxZGMuLmU0NTBlMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5oCkBAIC04NiwzNCArODYsMzQgQEAKICNkZWZpbmUgSUZfU1BJX0RFVklDRUlEX0NUUkxfUkVHX1RPX0NBUkRfUkVWKGRjKSAoZGMgJiAweDAwMDAwMGZmKQogCiAvKioqKioqKioqKioqKioqKiogSUZfU1BJX0hPU1RfSU5UX0NUUkxfUkVHICoqKioqKioqKioqKioqKioqLwotLyoqIEhvc3QgSW50ZXJydXB0IENvbnRyb2wgYml0IDogV2FrZSB1cCAqLworLyogSG9zdCBJbnRlcnJ1cHQgQ29udHJvbCBiaXQgOiBXYWtlIHVwICovCiAjZGVmaW5lIElGX1NQSV9ISUNUX1dBS0VfVVAJCQkJKDE8PDApCi0vKiogSG9zdCBJbnRlcnJ1cHQgQ29udHJvbCBiaXQgOiBXTEFOIHJlYWR5ICovCisvKiBIb3N0IEludGVycnVwdCBDb250cm9sIGJpdCA6IFdMQU4gcmVhZHkgKi8KICNkZWZpbmUgSUZfU1BJX0hJQ1RfV0xBTl9SRUFEWQkJCQkoMTw8MSkKIC8qI2RlZmluZSBJRl9TUElfSElDVF9GSUZPX0ZJUlNUX0hBTEZfRU1QVFkJCSgxPDwyKSAqLwogLyojZGVmaW5lIElGX1NQSV9ISUNUX0ZJRk9fU0VDT05EX0hBTEZfRU1QVFkJCSgxPDwzKSAqLwogLyojZGVmaW5lIElGX1NQSV9ISUNUX0lSUVNSQ19XTEFOCQkJKDE8PDQpICovCi0vKiogSG9zdCBJbnRlcnJ1cHQgQ29udHJvbCBiaXQgOiBUeCBhdXRvIGRvd25sb2FkICovCisvKiBIb3N0IEludGVycnVwdCBDb250cm9sIGJpdCA6IFR4IGF1dG8gZG93bmxvYWQgKi8KICNkZWZpbmUgSUZfU1BJX0hJQ1RfVFhfRE9XTkxPQURfT1ZFUl9BVVRPCQkoMTw8NSkKLS8qKiBIb3N0IEludGVycnVwdCBDb250cm9sIGJpdCA6IFJ4IGF1dG8gdXBsb2FkICovCisvKiBIb3N0IEludGVycnVwdCBDb250cm9sIGJpdCA6IFJ4IGF1dG8gdXBsb2FkICovCiAjZGVmaW5lIElGX1NQSV9ISUNUX1JYX1VQTE9BRF9PVkVSX0FVVE8JCQkoMTw8NikKLS8qKiBIb3N0IEludGVycnVwdCBDb250cm9sIGJpdCA6IENvbW1hbmQgYXV0byBkb3dubG9hZCAqLworLyogSG9zdCBJbnRlcnJ1cHQgQ29udHJvbCBiaXQgOiBDb21tYW5kIGF1dG8gZG93bmxvYWQgKi8KICNkZWZpbmUgSUZfU1BJX0hJQ1RfQ01EX0RPV05MT0FEX09WRVJfQVVUTwkJKDE8PDcpCi0vKiogSG9zdCBJbnRlcnJ1cHQgQ29udHJvbCBiaXQgOiBDb21tYW5kIGF1dG8gdXBsb2FkICovCisvKiBIb3N0IEludGVycnVwdCBDb250cm9sIGJpdCA6IENvbW1hbmQgYXV0byB1cGxvYWQgKi8KICNkZWZpbmUgSUZfU1BJX0hJQ1RfQ01EX1VQTE9BRF9PVkVSX0FVVE8JCSgxPDw4KQogCiAvKioqKioqKioqKioqKioqKiogSUZfU1BJX0NBUkRfSU5UX0NBVVNFX1JFRyAqKioqKioqKioqKioqKioqKi8KLS8qKiBDYXJkIEludGVycnVwdCBDYXNlIGJpdCA6IFR4IGRvd25sb2FkIG92ZXIgKi8KKy8qIENhcmQgSW50ZXJydXB0IENhc2UgYml0IDogVHggZG93bmxvYWQgb3ZlciAqLwogI2RlZmluZSBJRl9TUElfQ0lDX1RYX0RPV05MT0FEX09WRVIJCQkoMTw8MCkKLS8qKiBDYXJkIEludGVycnVwdCBDYXNlIGJpdCA6IFJ4IHVwbG9hZCBvdmVyICovCisvKiBDYXJkIEludGVycnVwdCBDYXNlIGJpdCA6IFJ4IHVwbG9hZCBvdmVyICovCiAjZGVmaW5lIElGX1NQSV9DSUNfUlhfVVBMT0FEX09WRVIJCQkoMTw8MSkKLS8qKiBDYXJkIEludGVycnVwdCBDYXNlIGJpdCA6IENvbW1hbmQgZG93bmxvYWQgb3ZlciAqLworLyogQ2FyZCBJbnRlcnJ1cHQgQ2FzZSBiaXQgOiBDb21tYW5kIGRvd25sb2FkIG92ZXIgKi8KICNkZWZpbmUgSUZfU1BJX0NJQ19DTURfRE9XTkxPQURfT1ZFUgkJCSgxPDwyKQotLyoqIENhcmQgSW50ZXJydXB0IENhc2UgYml0IDogSG9zdCBldmVudCAqLworLyogQ2FyZCBJbnRlcnJ1cHQgQ2FzZSBiaXQgOiBIb3N0IGV2ZW50ICovCiAjZGVmaW5lIElGX1NQSV9DSUNfSE9TVF9FVkVOVAkJCQkoMTw8MykKLS8qKiBDYXJkIEludGVycnVwdCBDYXNlIGJpdCA6IENvbW1hbmQgdXBsb2FkIG92ZXIgKi8KKy8qIENhcmQgSW50ZXJydXB0IENhc2UgYml0IDogQ29tbWFuZCB1cGxvYWQgb3ZlciAqLwogI2RlZmluZSBJRl9TUElfQ0lDX0NNRF9VUExPQURfT1ZFUgkJCSgxPDw0KQotLyoqIENhcmQgSW50ZXJydXB0IENhc2UgYml0IDogUG93ZXIgZG93biAqLworLyogQ2FyZCBJbnRlcnJ1cHQgQ2FzZSBiaXQgOiBQb3dlciBkb3duICovCiAjZGVmaW5lIElGX1NQSV9DSUNfUE9XRVJfRE9XTgkJCQkoMTw8NSkKIAogLyoqKioqKioqKioqKioqKioqIElGX1NQSV9DQVJEX0lOVF9TVEFUVVNfUkVHICoqKioqKioqKioqKioqKioqLwpAQCAtMTM4LDUxICsxMzgsNTEgQEAKICNkZWZpbmUgSUZfU1BJX0hJQ1VfQ01EX1JEX0ZJRk9fVU5ERVJGTE9XCQkoMTw8MTApCiAKIC8qKioqKioqKioqKioqKioqKiBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX1JFRyAqKioqKioqKioqKioqKioqKi8KLS8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogVHggZG93bmxvYWQgcmVhZHkgKi8KKy8qIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBUeCBkb3dubG9hZCByZWFkeSAqLwogI2RlZmluZSBJRl9TUElfSElTVF9UWF9ET1dOTE9BRF9SRFkJCQkoMTw8MCkKLS8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogUnggdXBsb2FkIHJlYWR5ICovCisvKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogUnggdXBsb2FkIHJlYWR5ICovCiAjZGVmaW5lIElGX1NQSV9ISVNUX1JYX1VQTE9BRF9SRFkJCQkoMTw8MSkKLS8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogQ29tbWFuZCBkb3dubG9hZCByZWFkeSAqLworLyogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IENvbW1hbmQgZG93bmxvYWQgcmVhZHkgKi8KICNkZWZpbmUgSUZfU1BJX0hJU1RfQ01EX0RPV05MT0FEX1JEWQkJCSgxPDwyKQotLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBDYXJkIGV2ZW50ICovCisvKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogQ2FyZCBldmVudCAqLwogI2RlZmluZSBJRl9TUElfSElTVF9DQVJEX0VWRU5UCQkJCSgxPDwzKQotLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBDb21tYW5kIHVwbG9hZCByZWFkeSAqLworLyogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IENvbW1hbmQgdXBsb2FkIHJlYWR5ICovCiAjZGVmaW5lIElGX1NQSV9ISVNUX0NNRF9VUExPQURfUkRZCQkJKDE8PDQpCi0vKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IEkvTyB3cml0ZSBGSUZPIG92ZXJmbG93ICovCisvKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogSS9PIHdyaXRlIEZJRk8gb3ZlcmZsb3cgKi8KICNkZWZpbmUgSUZfU1BJX0hJU1RfSU9fV1JfRklGT19PVkVSRkxPVwkJCSgxPDw1KQotLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBJL08gcmVhZCBGSUZPIHVuZGVyZmxvdyAqLworLyogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IEkvTyByZWFkIEZJRk8gdW5kZXJmbG93ICovCiAjZGVmaW5lIElGX1NQSV9ISVNUX0lPX1JEX0ZJRk9fVU5EUkZMT1cJCQkoMTw8NikKLS8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogRGF0YSB3cml0ZSBGSUZPIG92ZXJmbG93ICovCisvKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogRGF0YSB3cml0ZSBGSUZPIG92ZXJmbG93ICovCiAjZGVmaW5lIElGX1NQSV9ISVNUX0RBVEFfV1JfRklGT19PVkVSRkxPVwkJKDE8PDcpCi0vKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IERhdGEgcmVhZCBGSUZPIHVuZGVyZmxvdyAqLworLyogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IERhdGEgcmVhZCBGSUZPIHVuZGVyZmxvdyAqLwogI2RlZmluZSBJRl9TUElfSElTVF9EQVRBX1JEX0ZJRk9fVU5ERVJGTE9XCQkoMTw8OCkKLS8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogQ29tbWFuZCB3cml0ZSBGSUZPIG92ZXJmbG93ICovCisvKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogQ29tbWFuZCB3cml0ZSBGSUZPIG92ZXJmbG93ICovCiAjZGVmaW5lIElGX1NQSV9ISVNUX0NNRF9XUl9GSUZPX09WRVJGTE9XCQkoMTw8OSkKLS8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogQ29tbWFuZCByZWFkIEZJRk8gdW5kZXJmbG93ICovCisvKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogQ29tbWFuZCByZWFkIEZJRk8gdW5kZXJmbG93ICovCiAjZGVmaW5lIElGX1NQSV9ISVNUX0NNRF9SRF9GSUZPX1VOREVSRkxPVwkJKDE8PDEwKQogCiAvKioqKioqKioqKioqKioqKiogSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19NQVNLX1JFRyAqKioqKioqKioqKioqKioqKi8KLS8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBUeCBkb3dubG9hZCByZWFkeSAqLworLyogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogVHggZG93bmxvYWQgcmVhZHkgKi8KICNkZWZpbmUgSUZfU1BJX0hJU01fVFhfRE9XTkxPQURfUkRZCQkJKDE8PDApCi0vKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogUnggdXBsb2FkIHJlYWR5ICovCisvKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBSeCB1cGxvYWQgcmVhZHkgKi8KICNkZWZpbmUgSUZfU1BJX0hJU01fUlhfVVBMT0FEX1JEWQkJCSgxPDwxKQotLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IENvbW1hbmQgZG93bmxvYWQgcmVhZHkgKi8KKy8qIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IENvbW1hbmQgZG93bmxvYWQgcmVhZHkgKi8KICNkZWZpbmUgSUZfU1BJX0hJU01fQ01EX0RPV05MT0FEX1JEWQkJCSgxPDwyKQotLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IENhcmQgZXZlbnQgKi8KKy8qIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IENhcmQgZXZlbnQgKi8KICNkZWZpbmUgSUZfU1BJX0hJU01fQ0FSREVWRU5UCQkJCSgxPDwzKQotLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IENvbW1hbmQgdXBsb2FkIHJlYWR5ICovCisvKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBDb21tYW5kIHVwbG9hZCByZWFkeSAqLwogI2RlZmluZSBJRl9TUElfSElTTV9DTURfVVBMT0FEX1JEWQkJCSgxPDw0KQotLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IEkvTyB3cml0ZSBGSUZPIG92ZXJmbG93ICovCisvKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBJL08gd3JpdGUgRklGTyBvdmVyZmxvdyAqLwogI2RlZmluZSBJRl9TUElfSElTTV9JT19XUl9GSUZPX09WRVJGTE9XCQkJKDE8PDUpCi0vKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogSS9PIHJlYWQgRklGTyB1bmRlcmZsb3cgKi8KKy8qIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IEkvTyByZWFkIEZJRk8gdW5kZXJmbG93ICovCiAjZGVmaW5lIElGX1NQSV9ISVNNX0lPX1JEX0ZJRk9fVU5ERVJGTE9XCQkoMTw8NikKLS8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBEYXRhIHdyaXRlIEZJRk8gb3ZlcmZsb3cgKi8KKy8qIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IERhdGEgd3JpdGUgRklGTyBvdmVyZmxvdyAqLwogI2RlZmluZSBJRl9TUElfSElTTV9EQVRBX1dSX0ZJRk9fT1ZFUkZMT1cJCSgxPDw3KQotLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IERhdGEgd3JpdGUgRklGTyB1bmRlcmZsb3cgKi8KKy8qIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IERhdGEgd3JpdGUgRklGTyB1bmRlcmZsb3cgKi8KICNkZWZpbmUgSUZfU1BJX0hJU01fREFUQV9SRF9GSUZPX1VOREVSRkxPVwkJKDE8PDgpCi0vKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogQ29tbWFuZCB3cml0ZSBGSUZPIG92ZXJmbG93ICovCisvKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBDb21tYW5kIHdyaXRlIEZJRk8gb3ZlcmZsb3cgKi8KICNkZWZpbmUgSUZfU1BJX0hJU01fQ01EX1dSX0ZJRk9fT1ZFUkZMT1cJCSgxPDw5KQotLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IENvbW1hbmQgd3JpdGUgRklGTyB1bmRlcmZsb3cgKi8KKy8qIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IENvbW1hbmQgd3JpdGUgRklGTyB1bmRlcmZsb3cgKi8KICNkZWZpbmUgSUZfU1BJX0hJU01fQ01EX1JEX0ZJRk9fVU5ERVJGTE9XCQkoMTw8MTApCiAKIC8qKioqKioqKioqKioqKioqKiBJRl9TUElfU1BVX0JVU19NT0RFX1JFRyAqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNiLmMKaW5kZXggNjUyNGM3MC4uYjVhY2MzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNiLmMKQEAgLTEsNiArMSw5IEBACi0vKioKLSAgKiBUaGlzIGZpbGUgY29udGFpbnMgZnVuY3Rpb25zIHVzZWQgaW4gVVNCIGludGVyZmFjZSBtb2R1bGUuCi0gICovCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGZ1bmN0aW9ucyB1c2VkIGluIFVTQiBpbnRlcmZhY2UgbW9kdWxlLgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgpAQCAtNjYsNyArNjksNyBAQAogCiAvKiBzeXNmcyBob29rcyAqLwogCi0vKioKKy8qCiAgKiAgU2V0IGZ1bmN0aW9uIHRvIHdyaXRlIGZpcm13YXJlIHRvIGRldmljZSdzIHBlcnNpc3RlbnQgbWVtb3J5CiAgKi8KIHN0YXRpYyBzc2l6ZV90IGlmX3VzYl9maXJtd2FyZV9zZXQoc3RydWN0IGRldmljZSAqZGV2LApAQCAtODUsNyArODgsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qKgorLyoKICAqIGxic19mbGFzaF9mdyBhdHRyaWJ1dGUgdG8gYmUgZXhwb3J0ZWQgcGVyIGV0aFggaW50ZXJmYWNlIHRocm91Z2ggc3lzZnMKICAqICgvc3lzL2NsYXNzL25ldC9ldGhYL2xic19mbGFzaF9mdykuICBVc2UgdGhpcyBsaWtlIHNvIHRvIHdyaXRlIGZpcm13YXJlIHRvCiAgKiB0aGUgZGV2aWNlJ3MgcGVyc2lzdGVudCBtZW1vcnk6CkBAIC05NCw3ICs5NywxNCBAQAogc3RhdGljIERFVklDRV9BVFRSKGxic19mbGFzaF9mdywgMDIwMCwgTlVMTCwgaWZfdXNiX2Zpcm13YXJlX3NldCk7CiAKIC8qKgotICogIFNldCBmdW5jdGlvbiB0byB3cml0ZSBmaXJtd2FyZSB0byBkZXZpY2UncyBwZXJzaXN0ZW50IG1lbW9yeQorICogaWZfdXNiX2Jvb3QyX3NldCAtIHdyaXRlIGZpcm13YXJlIHRvIGRldmljZSdzIHBlcnNpc3RlbnQgbWVtb3J5CisgKgorICogQGRldjogdGFyZ2V0IGRldmljZQorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGVzCisgKiBAYnVmOiBmaXJtd2FyZSBidWZmZXIgdG8gd3JpdGUKKyAqIEBjb3VudDogbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlCisgKgorICogcmV0dXJuczogbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gb3IgbmVnYXRpdmUgZXJyb3IgY29kZQogICovCiBzdGF0aWMgc3NpemVfdCBpZl91c2JfYm9vdDJfc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQpAQCAtMTEyLDcgKzEyMiw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyoqCisvKgogICogbGJzX2ZsYXNoX2Jvb3QyIGF0dHJpYnV0ZSB0byBiZSBleHBvcnRlZCBwZXIgZXRoWCBpbnRlcmZhY2UgdGhyb3VnaCBzeXNmcwogICogKC9zeXMvY2xhc3MvbmV0L2V0aFgvbGJzX2ZsYXNoX2Jvb3QyKS4gIFVzZSB0aGlzIGxpa2Ugc28gdG8gd3JpdGUgZmlybXdhcmUKICAqIHRvIHRoZSBkZXZpY2UncyBwZXJzaXN0ZW50IG1lbW9yeToKQEAgLTEyMSw5ICsxMzEsMTAgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihsYnNfZmxhc2hfYm9vdDIsIDAyMDAsIE5VTEwsIGlmX3VzYl9ib290Ml9zZXQpOwogCiAvKioKLSAqICBAYnJpZWYgIGNhbGwgYmFjayBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIHN0YXR1cyBvZiB0aGUgVVJCCi0gKiAgQHBhcmFtIHVyYiAJCXBvaW50ZXIgdG8gdXJiIHN0cnVjdHVyZQotICogIEByZXR1cm4gCSAgIAlOL0EKKyAqIGlmX3VzYl93cml0ZV9idWxrX2NhbGxiYWNrIC0gY2FsbGJhY2sgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBzdGF0dXMKKyAqIG9mIHRoZSBVUkIKKyAqIEB1cmI6CXBvaW50ZXIgdG8gJnVyYiBzdHJ1Y3R1cmUKKyAqIHJldHVybnM6CU4vQQogICovCiBzdGF0aWMgdm9pZCBpZl91c2Jfd3JpdGVfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCiB7CkBAIC0xNDUsMTQgKzE1NiwxNCBAQAogCQkJbGJzX2hvc3RfdG9fY2FyZF9kb25lKHByaXYpOwogCX0gZWxzZSB7CiAJCS8qIHByaW50IHRoZSBmYWlsdXJlIHN0YXR1cyBudW1iZXIgZm9yIGRlYnVnICovCi0JCWxic19wcl9pbmZvKCJVUkIgaW4gZmFpbHVyZSBzdGF0dXM6ICVkXG4iLCB1cmItPnN0YXR1cyk7CisJCXByX2luZm8oIlVSQiBpbiBmYWlsdXJlIHN0YXR1czogJWRcbiIsIHVyYi0+c3RhdHVzKTsKIAl9CiB9CiAKIC8qKgotICogIEBicmllZiAgZnJlZSB0eC9yeCB1cmIsIHNrYiBhbmQgcnggYnVmZmVyCi0gKiAgQHBhcmFtIGNhcmRwCXBvaW50ZXIgaWZfdXNiX2NhcmQKLSAqICBAcmV0dXJuIAkgICAJTi9BCisgKiBpZl91c2JfZnJlZSAtIGZyZWUgdHgvcnggdXJiLCBza2IgYW5kIHJ4IGJ1ZmZlcgorICogQGNhcmRwOglwb2ludGVyIHRvICZpZl91c2JfY2FyZAorICogcmV0dXJuczoJTi9BCiAgKi8KIHN0YXRpYyB2b2lkIGlmX3VzYl9mcmVlKHN0cnVjdCBpZl91c2JfY2FyZCAqY2FyZHApCiB7CkBAIC0xOTUsNyArMjA2LDcgQEAKIAl3YWtlX21ldGhvZC5oZHIuc2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZih3YWtlX21ldGhvZCkpOwogCXdha2VfbWV0aG9kLmFjdGlvbiA9IGNwdV90b19sZTE2KENNRF9BQ1RfR0VUKTsKIAlpZiAobGJzX2NtZF93aXRoX3Jlc3BvbnNlKHByaXYsIENNRF84MDJfMTFfRldfV0FLRV9NRVRIT0QsICZ3YWtlX21ldGhvZCkpIHsKLQkJbGJzX3ByX2luZm8oIkZpcm13YXJlIGRvZXMgbm90IHNlZW0gdG8gc3VwcG9ydCBQUyBtb2RlXG4iKTsKKwkJbmV0ZGV2X2luZm8ocHJpdi0+ZGV2LCAiRmlybXdhcmUgZG9lcyBub3Qgc2VlbSB0byBzdXBwb3J0IFBTIG1vZGVcbiIpOwogCQlwcml2LT5md2NhcGluZm8gJj0gfkZXX0NBUElORk9fUFM7CiAJfSBlbHNlIHsKIAkJaWYgKGxlMTZfdG9fY3B1KHdha2VfbWV0aG9kLm1ldGhvZCkgPT0gQ01EX1dBS0VfTUVUSE9EX0NPTU1BTkRfSU5UKSB7CkBAIC0yMDQsNyArMjE1LDggQEAKIAkJCS8qIFRoZSB2ZXJzaW9ucyB3aGljaCBib290IHVwIHRoaXMgd2F5IGRvbid0IHNlZW0gdG8KIAkJCSAgIHdvcmsgZXZlbiBpZiB3ZSBzZXQgaXQgdG8gdGhlIGNvbW1hbmQgaW50ZXJydXB0ICovCiAJCQlwcml2LT5md2NhcGluZm8gJj0gfkZXX0NBUElORk9fUFM7Ci0JCQlsYnNfcHJfaW5mbygiRmlybXdhcmUgZG9lc24ndCB3YWtlIHZpYSBjb21tYW5kIGludGVycnVwdDsgZGlzYWJsaW5nIFBTIG1vZGVcbiIpOworCQkJbmV0ZGV2X2luZm8ocHJpdi0+ZGV2LAorCQkJCSAgICAiRmlybXdhcmUgZG9lc24ndCB3YWtlIHZpYSBjb21tYW5kIGludGVycnVwdDsgZGlzYWJsaW5nIFBTIG1vZGVcbiIpOwogCQl9CiAJfQogfQpAQCAtMjE2LDcgKzIyOCw3IEBACiAJaWYgKGNhcmRwLT5md2RubGRvdmVyKSB7CiAJCWxic19kZWJfdXNiKCJEb3dubG9hZCBjb21wbGV0ZSwgbm8gZXZlbnQuIEFzc3VtaW5nIHN1Y2Nlc3NcbiIpOwogCX0gZWxzZSB7Ci0JCWxic19wcl9lcnIoIkRvd25sb2FkIHRpbWVkIG91dFxuIik7CisJCXByX2VycigiRG93bmxvYWQgdGltZWQgb3V0XG4iKTsKIAkJY2FyZHAtPnN1cnByaXNlX3JlbW92ZWQgPSAxOwogCX0KIAl3YWtlX3VwKCZjYXJkcC0+Zndfd3EpOwpAQCAtMjMxLDEwICsyNDMsMTAgQEAKICNlbmRpZgogCiAvKioKLSAqICBAYnJpZWYgc2V0cyB0aGUgY29uZmlndXJhdGlvbiB2YWx1ZXMKLSAqICBAcGFyYW0gaWZudW0JaW50ZXJmYWNlIG51bWJlcgotICogIEBwYXJhbSBpZAkJcG9pbnRlciB0byB1c2JfZGV2aWNlX2lkCi0gKiAgQHJldHVybiAJICAgCTAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvbiBmYWlsdXJlCisgKiBpZl91c2JfcHJvYmUgLSBzZXRzIHRoZSBjb25maWd1cmF0aW9uIHZhbHVlcworICogQGludGY6CSZ1c2JfaW50ZXJmYWNlIHBvaW50ZXIKKyAqIEBpZDoJcG9pbnRlciB0byB1c2JfZGV2aWNlX2lkCisgKiByZXR1cm5zOgkwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZQogICovCiBzdGF0aWMgaW50IGlmX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKQEAgLTI1MCw3ICsyNjIsNyBAQAogCiAJY2FyZHAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWZfdXNiX2NhcmQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNhcmRwKSB7Ci0JCWxic19wcl9lcnIoIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBwcml2YXRlIGRhdGEuXG4iKTsKKwkJcHJfZXJyKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgcHJpdmF0ZSBkYXRhXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTM0MCwxMCArMzUyLDEyIEBACiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBjYXJkcCk7CiAKIAlpZiAoZGV2aWNlX2NyZWF0ZV9maWxlKCZwcml2LT5kZXYtPmRldiwgJmRldl9hdHRyX2xic19mbGFzaF9mdykpCi0JCWxic19wcl9lcnIoImNhbm5vdCByZWdpc3RlciBsYnNfZmxhc2hfZncgYXR0cmlidXRlXG4iKTsKKwkJbmV0ZGV2X2Vycihwcml2LT5kZXYsCisJCQkgICAiY2Fubm90IHJlZ2lzdGVyIGxic19mbGFzaF9mdyBhdHRyaWJ1dGVcbiIpOwogCiAJaWYgKGRldmljZV9jcmVhdGVfZmlsZSgmcHJpdi0+ZGV2LT5kZXYsICZkZXZfYXR0cl9sYnNfZmxhc2hfYm9vdDIpKQotCQlsYnNfcHJfZXJyKCJjYW5ub3QgcmVnaXN0ZXIgbGJzX2ZsYXNoX2Jvb3QyIGF0dHJpYnV0ZVxuIik7CisJCW5ldGRldl9lcnIocHJpdi0+ZGV2LAorCQkJICAgImNhbm5vdCByZWdpc3RlciBsYnNfZmxhc2hfYm9vdDIgYXR0cmlidXRlXG4iKTsKIAogCS8qCiAJICogRUhTX1JFTU9WRV9XQUtFVVAgaXMgbm90IHN1cHBvcnRlZCBvbiBhbGwgdmVyc2lvbnMgb2YgdGhlIGZpcm13YXJlLgpAQCAtMzY2LDkgKzM4MCw5IEBACiB9CiAKIC8qKgotICogIEBicmllZiBmcmVlIHJlc291cmNlIGFuZCBjbGVhbnVwCi0gKiAgQHBhcmFtIGludGYJCVVTQiBpbnRlcmZhY2Ugc3RydWN0dXJlCi0gKiAgQHJldHVybiAJICAgCU4vQQorICogaWZfdXNiX2Rpc2Nvbm5lY3QgLSBmcmVlIHJlc291cmNlIGFuZCBjbGVhbnVwCisgKiBAaW50ZjoJVVNCIGludGVyZmFjZSBzdHJ1Y3R1cmUKKyAqIHJldHVybnM6CU4vQQogICovCiBzdGF0aWMgdm9pZCBpZl91c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKQEAgLTM5OCw5ICs0MTIsOSBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgIFRoaXMgZnVuY3Rpb24gZG93bmxvYWQgRlcKLSAqICBAcGFyYW0gcHJpdgkJcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUKLSAqICBAcmV0dXJuIAkgICAJMAorICogaWZfdXNiX3NlbmRfZndfcGt0IC0gZG93bmxvYWQgRlcKKyAqIEBjYXJkcDoJcG9pbnRlciB0byAmc3RydWN0IGlmX3VzYl9jYXJkCisgKiByZXR1cm5zOgkwCiAgKi8KIHN0YXRpYyBpbnQgaWZfdXNiX3NlbmRfZndfcGt0KHN0cnVjdCBpZl91c2JfY2FyZCAqY2FyZHApCiB7CkBAIC00ODYsMTEgKzUwMCwxMSBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiB0cmFuc2ZlciB0aGUgZGF0YSB0byB0aGUgZGV2aWNlLgotICogIEBwYXJhbSBwcml2IAlwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZQotICogIEBwYXJhbSBwYXlsb2FkCXBvaW50ZXIgdG8gcGF5bG9hZCBkYXRhCi0gKiAgQHBhcmFtIG5iCQlkYXRhIGxlbmd0aAotICogIEByZXR1cm4gCSAgIAkwIG9yIC0xCisgKiAgdXNiX3R4X2Jsb2NrIC0gdHJhbnNmZXIgdGhlIGRhdGEgdG8gdGhlIGRldmljZQorICogIEBjYXJkcDogCXBvaW50ZXIgdG8gJnN0cnVjdCBpZl91c2JfY2FyZAorICogIEBwYXlsb2FkOglwb2ludGVyIHRvIHBheWxvYWQgZGF0YQorICogIEBuYjoJZGF0YSBsZW5ndGgKKyAqICByZXR1cm5zOgkwIGZvciBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUKICAqLwogc3RhdGljIGludCB1c2JfdHhfYmxvY2soc3RydWN0IGlmX3VzYl9jYXJkICpjYXJkcCwgdWludDhfdCAqcGF5bG9hZCwgdWludDE2X3QgbmIpCiB7CkBAIC01MjgsNyArNTQyLDcgQEAKIAlpbnQgcmV0ID0gLTE7CiAKIAlpZiAoIShza2IgPSBkZXZfYWxsb2Nfc2tiKE1SVkRSVl9FVEhfUlhfUEFDS0VUX0JVRkZFUl9TSVpFKSkpIHsKLQkJbGJzX3ByX2VycigiTm8gZnJlZSBza2JcbiIpOworCQlwcl9lcnIoIk5vIGZyZWUgc2tiXG4iKTsKIAkJZ290byByeF9yZXQ7CiAJfQogCkBAIC01ODcsNyArNjAxLDcgQEAKIAogCQlpZiAodG1wWzBdID09IGNwdV90b19sZTMyKENNRF9UWVBFX0lORElDQVRJT04pICYmCiAJCSAgICB0bXBbMV0gPT0gY3B1X3RvX2xlMzIoTUFDUkVHX0lOVF9DT0RFX0ZJUk1XQVJFX1JFQURZKSkgewotCQkJbGJzX3ByX2luZm8oIkZpcm13YXJlIHJlYWR5IGV2ZW50IHJlY2VpdmVkXG4iKTsKKwkJCXByX2luZm8oIkZpcm13YXJlIHJlYWR5IGV2ZW50IHJlY2VpdmVkXG4iKTsKIAkJCXdha2VfdXAoJmNhcmRwLT5md193cSk7CiAJCX0gZWxzZSB7CiAJCQlsYnNfZGViX3VzYigiV2FpdGluZyBmb3IgY29uZmlybWF0aW9uOyBnb3QgJXggJXhcbiIsCkBAIC02MTQsMjAgKzYyOCwyMCBAQAogCQkJICAgIGJvb3RjbWRyZXNwLm1hZ2ljID09IGNwdV90b19sZTMyKENNRF9UWVBFX0RBVEEpIHx8CiAJCQkgICAgYm9vdGNtZHJlc3AubWFnaWMgPT0gY3B1X3RvX2xlMzIoQ01EX1RZUEVfSU5ESUNBVElPTikpIHsKIAkJCQlpZiAoIWNhcmRwLT5ib290Y21kcmVzcCkKLQkJCQkJbGJzX3ByX2luZm8oIkZpcm13YXJlIGFscmVhZHkgc2VlbXMgYWxpdmU7IHJlc2V0dGluZ1xuIik7CisJCQkJCXByX2luZm8oIkZpcm13YXJlIGFscmVhZHkgc2VlbXMgYWxpdmU7IHJlc2V0dGluZ1xuIik7CiAJCQkJY2FyZHAtPmJvb3RjbWRyZXNwID0gLTE7CiAJCQl9IGVsc2UgewotCQkJCWxic19wcl9pbmZvKCJib290IGNtZCByZXNwb25zZSB3cm9uZyBtYWdpYyBudW1iZXIgKDB4JXgpXG4iLAorCQkJCXByX2luZm8oImJvb3QgY21kIHJlc3BvbnNlIHdyb25nIG1hZ2ljIG51bWJlciAoMHgleClcbiIsCiAJCQkJCSAgICBsZTMyX3RvX2NwdShib290Y21kcmVzcC5tYWdpYykpOwogCQkJfQogCQl9IGVsc2UgaWYgKChib290Y21kcmVzcC5jbWQgIT0gQk9PVF9DTURfRldfQllfVVNCKSAmJgogCQkJICAgKGJvb3RjbWRyZXNwLmNtZCAhPSBCT09UX0NNRF9VUERBVEVfRlcpICYmCiAJCQkgICAoYm9vdGNtZHJlc3AuY21kICE9IEJPT1RfQ01EX1VQREFURV9CT09UMikpIHsKLQkJCWxic19wcl9pbmZvKCJib290IGNtZCByZXNwb25zZSBjbWRfdGFnIGVycm9yICglZClcbiIsCi0JCQkJICAgIGJvb3RjbWRyZXNwLmNtZCk7CisJCQlwcl9pbmZvKCJib290IGNtZCByZXNwb25zZSBjbWRfdGFnIGVycm9yICglZClcbiIsCisJCQkJYm9vdGNtZHJlc3AuY21kKTsKIAkJfSBlbHNlIGlmIChib290Y21kcmVzcC5yZXN1bHQgIT0gQk9PVF9DTURfUkVTUF9PSykgewotCQkJbGJzX3ByX2luZm8oImJvb3QgY21kIHJlc3BvbnNlIHJlc3VsdCBlcnJvciAoJWQpXG4iLAotCQkJCSAgICBib290Y21kcmVzcC5yZXN1bHQpOworCQkJcHJfaW5mbygiYm9vdCBjbWQgcmVzcG9uc2UgcmVzdWx0IGVycm9yICglZClcbiIsCisJCQkJYm9vdGNtZHJlc3AucmVzdWx0KTsKIAkJfSBlbHNlIHsKIAkJCWNhcmRwLT5ib290Y21kcmVzcCA9IDE7CiAJCQlsYnNfZGViX3VzYmQoJmNhcmRwLT51ZGV2LT5kZXYsCkBAIC03MjcsMTEgKzc0MSwxMSBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiByZWFkcyBvZiB0aGUgcGFja2V0IGludG8gdGhlIHVwbG9hZCBidWZmLAotICogIHdha2UgdXAgdGhlIG1haW4gdGhyZWFkIGFuZCBpbml0aWFsaXNlIHRoZSBSeCBjYWxsYWNrLgorICogIGlmX3VzYl9yZWNlaXZlIC0gcmVhZCB0aGUgcGFja2V0IGludG8gdGhlIHVwbG9hZCBidWZmZXIsCisgKiAgd2FrZSB1cCB0aGUgbWFpbiB0aHJlYWQgYW5kIGluaXRpYWxpc2UgdGhlIFJ4IGNhbGxhY2sKICAqCi0gKiAgQHBhcmFtIHVyYgkJcG9pbnRlciB0byBzdHJ1Y3QgdXJiCi0gKiAgQHJldHVybiAJICAgCU4vQQorICogIEB1cmI6CXBvaW50ZXIgdG8gJnN0cnVjdCB1cmIKKyAqICByZXR1cm5zOglOL0EKICAqLwogc3RhdGljIHZvaWQgaWZfdXNiX3JlY2VpdmUoc3RydWN0IHVyYiAqdXJiKQogewpAQCAtODAyLDEyICs4MTYsMTIgQEAKIH0KIAogLyoqCi0gKiAgQGJyaWVmIFRoaXMgZnVuY3Rpb24gZG93bmxvYWRzIGRhdGEgdG8gRlcKLSAqICBAcGFyYW0gcHJpdgkJcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHBhcmFtIHR5cGUJCXR5cGUgb2YgZGF0YQotICogIEBwYXJhbSBidWYJCXBvaW50ZXIgdG8gZGF0YSBidWZmZXIKLSAqICBAcGFyYW0gbGVuCQludW1iZXIgb2YgYnl0ZXMKLSAqICBAcmV0dXJuIAkgICAJMCBvciAtMQorICogIGlmX3VzYl9ob3N0X3RvX2NhcmQgLSBkb3dubG9hZHMgZGF0YSB0byBGVworICogIEBwcml2Oglwb2ludGVyIHRvICZzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKiAgQHR5cGU6CXR5cGUgb2YgZGF0YQorICogIEBwYXlsb2FkOglwb2ludGVyIHRvIGRhdGEgYnVmZmVyCisgKiAgQG5iOgludW1iZXIgb2YgYnl0ZXMKKyAqICByZXR1cm5zOgkwIGZvciBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUKICAqLwogc3RhdGljIGludCBpZl91c2JfaG9zdF90b19jYXJkKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdWludDhfdCB0eXBlLAogCQkJICAgICAgIHVpbnQ4X3QgKnBheWxvYWQsIHVpbnQxNl90IG5iKQpAQCAtODMxLDEwICs4NDUsMTEgQEAKIH0KIAogLyoqCi0gKiAgQGJyaWVmIFRoaXMgZnVuY3Rpb24gaXNzdWVzIEJvb3QgY29tbWFuZCB0byB0aGUgQm9vdDIgY29kZQotICogIEBwYXJhbSBpdmFsdWUgICAxOkJvb3QgZnJvbSBGVyBieSBVU0ItRG93bmxvYWQKLSAqICAgICAgICAgICAgICAgICAgMjpCb290IGZyb20gRlcgaW4gRUVQUk9NCi0gKiAgQHJldHVybiAJICAgCTAKKyAqICBpZl91c2JfaXNzdWVfYm9vdF9jb21tYW5kIC0gaXNzdWVzIEJvb3QgY29tbWFuZCB0byB0aGUgQm9vdDIgY29kZQorICogIEBjYXJkcDoJcG9pbnRlciB0byAmaWZfdXNiX2NhcmQKKyAqICBAaXZhbHVlOgkxOkJvb3QgZnJvbSBGVyBieSBVU0ItRG93bmxvYWQKKyAqCQkyOkJvb3QgZnJvbSBGVyBpbiBFRVBST00KKyAqICByZXR1cm5zOgkwIGZvciBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUKICAqLwogc3RhdGljIGludCBpZl91c2JfaXNzdWVfYm9vdF9jb21tYW5kKHN0cnVjdCBpZl91c2JfY2FyZCAqY2FyZHAsIGludCBpdmFsdWUpCiB7CkBAIC04NTMsMTEgKzg2OCwxMSBAQAogCiAKIC8qKgotICogIEBicmllZiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgdmFsaWRpdHkgb2YgQm9vdDIvRlcgaW1hZ2UuCisgKiAgY2hlY2tfZndmaWxlX2Zvcm1hdCAtIGNoZWNrIHRoZSB2YWxpZGl0eSBvZiBCb290Mi9GVyBpbWFnZQogICoKLSAqICBAcGFyYW0gZGF0YSAgICAgICAgICAgICAgcG9pbnRlciB0byBpbWFnZQotICogICAgICAgICBsZW4gICAgICAgICAgICAgICBpbWFnZSBsZW5ndGgKLSAqICBAcmV0dXJuICAgICAwIG9yIC0xCisgKiAgQGRhdGE6CXBvaW50ZXIgdG8gaW1hZ2UKKyAqICBAdG90bGVuOglpbWFnZSBsZW5ndGgKKyAqICByZXR1cm5zOiAgICAgMCAoZ29vZCkgb3IgMSAoZmFpbHVyZSkKICAqLwogc3RhdGljIGludCBjaGVja19md2ZpbGVfZm9ybWF0KGNvbnN0IHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IHRvdGxlbikKIHsKQEAgLTg5Miw3ICs5MDcsNyBAQAogCX0gd2hpbGUgKCFleGl0KTsKIAogCWlmIChyZXQpCi0JCWxic19wcl9lcnIoImZpcm13YXJlIGZpbGUgZm9ybWF0IGNoZWNrIEZBSUxcbiIpOworCQlwcl9lcnIoImZpcm13YXJlIGZpbGUgZm9ybWF0IGNoZWNrIEZBSUxcbiIpOwogCWVsc2UKIAkJbGJzX2RlYl9mdygiZmlybXdhcmUgZmlsZSBmb3JtYXQgY2hlY2sgUEFTU1xuIik7CiAKQEAgLTkwMSwxMyArOTE2LDEzIEBACiAKIAogLyoqCi0qICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBwcm9ncmFtcyB0aGUgZmlybXdhcmUgc3ViamVjdCB0byBjbWQKKyogIGlmX3VzYl9wcm9nX2Zpcm13YXJlIC0gcHJvZ3JhbXMgdGhlIGZpcm13YXJlIHN1YmplY3QgdG8gY21kCiAqCi0qICBAcGFyYW0gY2FyZHAgICAgICAgICAgICAgdGhlIGlmX3VzYl9jYXJkIGRlc2NyaXB0b3IKLSogICAgICAgICBmd25hbWUgICAgICAgICAgICBmaXJtd2FyZSBvciBib290MiBpbWFnZSBmaWxlIG5hbWUKLSogICAgICAgICBjbWQgICAgICAgICAgICAgICBlaXRoZXIgQk9PVF9DTURfRldfQllfVVNCLCBCT09UX0NNRF9VUERBVEVfRlcsCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgQk9PVF9DTURfVVBEQVRFX0JPT1QyLgotKiAgQHJldHVybiAgICAgMCBvciBlcnJvciBjb2RlCisqICBAY2FyZHA6CXRoZSBpZl91c2JfY2FyZCBkZXNjcmlwdG9yCisqICBAZnduYW1lOglmaXJtd2FyZSBvciBib290MiBpbWFnZSBmaWxlIG5hbWUKKyogIEBjbWQ6CWVpdGhlciBCT09UX0NNRF9GV19CWV9VU0IsIEJPT1RfQ01EX1VQREFURV9GVywKKyoJCW9yIEJPT1RfQ01EX1VQREFURV9CT09UMi4KKyogIHJldHVybnM6CTAgb3IgZXJyb3IgY29kZQogKi8KIHN0YXRpYyBpbnQgaWZfdXNiX3Byb2dfZmlybXdhcmUoc3RydWN0IGlmX3VzYl9jYXJkICpjYXJkcCwKIAkJCQljb25zdCBjaGFyICpmd25hbWUsIGludCBjbWQpCkBAIC05ODksNyArMTAwNCw3IEBACiAKIAlyZXQgPSBnZXRfZncoY2FyZHAsIGZ3bmFtZSk7CiAJaWYgKHJldCkgewotCQlsYnNfcHJfZXJyKCJmYWlsZWQgdG8gZmluZCBmaXJtd2FyZSAoJWQpXG4iLCByZXQpOworCQlwcl9lcnIoImZhaWxlZCB0byBmaW5kIGZpcm13YXJlICglZClcbiIsIHJldCk7CiAJCWdvdG8gZG9uZTsKIAl9CiAKQEAgLTEwNjQsMTMgKzEwNzksMTMgQEAKIAl1c2Jfa2lsbF91cmIoY2FyZHAtPnJ4X3VyYik7CiAKIAlpZiAoIWNhcmRwLT5md2RubGRvdmVyKSB7Ci0JCWxic19wcl9pbmZvKCJmYWlsZWQgdG8gbG9hZCBmdywgcmVzZXR0aW5nIGRldmljZSFcbiIpOworCQlwcl9pbmZvKCJmYWlsZWQgdG8gbG9hZCBmdywgcmVzZXR0aW5nIGRldmljZSFcbiIpOwogCQlpZiAoLS1yZXNldF9jb3VudCA+PSAwKSB7CiAJCQlpZl91c2JfcmVzZXRfZGV2aWNlKGNhcmRwKTsKIAkJCWdvdG8gcmVzdGFydDsKIAkJfQogCi0JCWxic19wcl9pbmZvKCJGVyBkb3dubG9hZCBmYWlsdXJlLCB0aW1lID0gJWQgbXNcbiIsIGkgKiAxMDApOworCQlwcl9pbmZvKCJGVyBkb3dubG9hZCBmYWlsdXJlLCB0aW1lID0gJWQgbXNcbiIsIGkgKiAxMDApOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIHJlbGVhc2VfZnc7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl91c2IuaAppbmRleCBkODE5ZTdlLi42ZTQyZWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl91c2IuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl91c2IuaApAQCAtNiw5ICs2LDkgQEAKIAogc3RydWN0IGxic19wcml2YXRlOwogCi0vKioKLSAgKiBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW5pdGlvbiBmb3IgVVNCIGludGVyZmFjZS4KLSAgKi8KKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW5pdGlvbiBmb3IgVVNCIGludGVyZmFjZS4KKyAqLwogI2RlZmluZSBDTURfVFlQRV9SRVFVRVNUCQkweEYwMERGQUNFCiAjZGVmaW5lIENNRF9UWVBFX0RBVEEJCQkweEJFQURDMERFCiAjZGVmaW5lIENNRF9UWVBFX0lORElDQVRJT04JCTB4QkVFRkZBQ0UKQEAgLTQwLDcgKzQwLDcgQEAKIAl1aW50OF90CXBhZFsyXTsKIH07CiAKLS8qKiBVU0IgY2FyZCBkZXNjcmlwdGlvbiBzdHJ1Y3R1cmUqLworLyogVVNCIGNhcmQgZGVzY3JpcHRpb24gc3RydWN0dXJlKi8KIHN0cnVjdCBpZl91c2JfY2FyZCB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CiAJdWludDMyX3QgbW9kZWw7ICAvKiBNT0RFTF8qICovCkBAIC03Nyw3ICs3Nyw3IEBACiAJX19sZTE2IGJvb3QyX3ZlcnNpb247CiB9OwogCi0vKiogZndoZWFkZXIgKi8KKy8qIGZ3aGVhZGVyICovCiBzdHJ1Y3QgZndoZWFkZXIgewogCV9fbGUzMiBkbmxkY21kOwogCV9fbGUzMiBiYXNlYWRkcjsKQEAgLTg2LDE0ICs4NiwxNCBAQAogfTsKIAogI2RlZmluZSBGV19NQVhfREFUQV9CTEtfU0laRQk2MDAKLS8qKiBGV0RhdGEgKi8KKy8qIEZXRGF0YSAqLwogc3RydWN0IGZ3ZGF0YSB7CiAJc3RydWN0IGZ3aGVhZGVyIGhkcjsKIAlfX2xlMzIgc2VxbnVtOwogCXVpbnQ4X3QgZGF0YVswXTsKIH07CiAKLS8qKiBmd3N5bmNoZWFkZXIgKi8KKy8qIGZ3c3luY2hlYWRlciAqLwogc3RydWN0IGZ3c3luY2hlYWRlciB7CiAJX19sZTMyIGNtZDsKIAlfX2xlMzIgc2VxbnVtOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jCmluZGV4IGNhODE0OWMuLjhjNDA5NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMKQEAgLTEsOCArMSwxMCBAQAotLyoqCi0gICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBtYWpvciBmdW5jdGlvbnMgaW4gV0xBTgotICAqIGRyaXZlci4gSXQgaW5jbHVkZXMgaW5pdCwgZXhpdCwgb3BlbiwgY2xvc2UgYW5kIG1haW4KLSAgKiB0aHJlYWQgZXRjLi4KLSAgKi8KKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIG1ham9yIGZ1bmN0aW9ucyBpbiBXTEFOCisgKiBkcml2ZXIuIEl0IGluY2x1ZGVzIGluaXQsIGV4aXQsIG9wZW4sIGNsb3NlIGFuZCBtYWluCisgKiB0aHJlYWQgZXRjLi4KKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC0zNCwxOSArMzYsMjUgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGxic19kZWJ1Zyk7CiBtb2R1bGVfcGFyYW1fbmFtZWQobGliZXJ0YXNfZGVidWcsIGxic19kZWJ1ZywgaW50LCAwNjQ0KTsKIAordW5zaWduZWQgaW50IGxic19kaXNhYmxlbWVzaDsKK0VYUE9SVF9TWU1CT0xfR1BMKGxic19kaXNhYmxlbWVzaCk7Cittb2R1bGVfcGFyYW1fbmFtZWQobGliZXJ0YXNfZGlzYWJsZW1lc2gsIGxic19kaXNhYmxlbWVzaCwgaW50LCAwNjQ0KTsKIAotLyogVGhpcyBnbG9iYWwgc3RydWN0dXJlIGlzIHVzZWQgdG8gc2VuZCB0aGUgY29uZmlybV9zbGVlcCBjb21tYW5kIGFzCi0gKiBmYXN0IGFzIHBvc3NpYmxlIGRvd24gdG8gdGhlIGZpcm13YXJlLiAqLworCisvKgorICogVGhpcyBnbG9iYWwgc3RydWN0dXJlIGlzIHVzZWQgdG8gc2VuZCB0aGUgY29uZmlybV9zbGVlcCBjb21tYW5kIGFzCisgKiBmYXN0IGFzIHBvc3NpYmxlIGRvd24gdG8gdGhlIGZpcm13YXJlLgorICovCiBzdHJ1Y3QgY21kX2NvbmZpcm1fc2xlZXAgY29uZmlybV9zbGVlcDsKIAogCi0vKioKKy8qCiAgKiB0aGUgdGFibGUgdG8ga2VlcCByZWdpb24gY29kZQogICovCiB1MTYgbGJzX3JlZ2lvbl9jb2RlX3RvX2luZGV4W01SVkRSVl9NQVhfUkVHSU9OX0NPREVdID0KICAgICB7IDB4MTAsIDB4MjAsIDB4MzAsIDB4MzEsIDB4MzIsIDB4NDAgfTsKIAotLyoqCisvKgogICogRlcgcmF0ZSB0YWJsZS4gIEZXIHJlZmVycyB0byByYXRlcyBieSB0aGVpciBpbmRleCBpbiB0aGlzIHRhYmxlLCBub3QgYnkgdGhlCiAgKiByYXRlIHZhbHVlIGl0c2VsZi4gIFZhbHVlcyBvZiAweDAwIGFyZQogICogcmVzZXJ2ZWQgcG9zaXRpb25zLgpAQCAtNTcsMTAgKzY1LDEwIEBACiB9OwogCiAvKioKLSAqICBAYnJpZWYgdXNlIGluZGV4IHRvIGdldCB0aGUgZGF0YSByYXRlCisgKiAgbGJzX2Z3X2luZGV4X3RvX2RhdGFfcmF0ZSAtIHVzZSBpbmRleCB0byBnZXQgdGhlIGRhdGEgcmF0ZQogICoKLSAqICBAcGFyYW0gaWR4ICAgICAgICAgICAgICAgIFRoZSBpbmRleCBvZiBkYXRhIHJhdGUKLSAqICBAcmV0dXJuIAkgICAJCWRhdGEgcmF0ZSBvciAwCisgKiAgQGlkeDoJVGhlIGluZGV4IG9mIGRhdGEgcmF0ZQorICogIHJldHVybnM6CWRhdGEgcmF0ZSBvciAwCiAgKi8KIHUzMiBsYnNfZndfaW5kZXhfdG9fZGF0YV9yYXRlKHU4IGlkeCkKIHsKQEAgLTcwLDEwICs3OCwxMCBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgdXNlIHJhdGUgdG8gZ2V0IHRoZSBpbmRleAorICogIGxic19kYXRhX3JhdGVfdG9fZndfaW5kZXggLSB1c2UgcmF0ZSB0byBnZXQgdGhlIGluZGV4CiAgKgotICogIEBwYXJhbSByYXRlICAgICAgICAgICAgICAgICBkYXRhIHJhdGUKLSAqICBAcmV0dXJuIAkgICAJCWluZGV4IG9yIDAKKyAqICBAcmF0ZToJZGF0YSByYXRlCisgKiAgcmV0dXJuczoJaW5kZXggb3IgMAogICovCiB1OCBsYnNfZGF0YV9yYXRlX3RvX2Z3X2luZGV4KHUzMiByYXRlKQogewpAQCAtOTEsMTAgKzk5LDEwIEBACiAKIAogLyoqCi0gKiAgQGJyaWVmIFRoaXMgZnVuY3Rpb24gb3BlbnMgdGhlIGV0aFggaW50ZXJmYWNlCisgKiAgbGJzX2Rldl9vcGVuIC0gb3BlbiB0aGUgZXRoWCBpbnRlcmZhY2UKICAqCi0gKiAgQHBhcmFtIGRldiAgICAgQSBwb2ludGVyIHRvIG5ldF9kZXZpY2Ugc3RydWN0dXJlCi0gKiAgQHJldHVybiAJICAgMCBvciAtRUJVU1kgaWYgbW9uaXRvciBtb2RlIGFjdGl2ZQorICogIEBkZXY6CUEgcG9pbnRlciB0byAmbmV0X2RldmljZSBzdHJ1Y3R1cmUKKyAqICByZXR1cm5zOgkwIG9yIC1FQlVTWSBpZiBtb25pdG9yIG1vZGUgYWN0aXZlCiAgKi8KIHN0YXRpYyBpbnQgbGJzX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0xMjAsMTAgKzEyOCwxMCBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBjbG9zZXMgdGhlIGV0aFggaW50ZXJmYWNlCisgKiAgbGJzX2V0aF9zdG9wIC0gY2xvc2UgdGhlIGV0aFggaW50ZXJmYWNlCiAgKgotICogIEBwYXJhbSBkZXYgICAgIEEgcG9pbnRlciB0byBuZXRfZGV2aWNlIHN0cnVjdHVyZQotICogIEByZXR1cm4gCSAgIDAKKyAqICBAZGV2OglBIHBvaW50ZXIgdG8gJm5ldF9kZXZpY2Ugc3RydWN0dXJlCisgKiAgcmV0dXJuczoJMAogICovCiBzdGF0aWMgaW50IGxic19ldGhfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMTQ3LDI4ICsxNTUsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBsYnNfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKLQotCWxic19kZWJfZW50ZXIoTEJTX0RFQl9UWCk7Ci0KLQlsYnNfcHJfZXJyKCJ0eCB3YXRjaCBkb2cgdGltZW91dFxuIik7Ci0KLQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsgLyogcHJldmVudCB0eCB0aW1lb3V0ICovCi0KLQlpZiAocHJpdi0+Y3VycmVudHR4c2tiKQotCQlsYnNfc2VuZF90eF9mZWVkYmFjayhwcml2LCAwKTsKLQotCS8qIFhYOiBTaG91bGRuJ3Qgd2UgYWxzbyBjYWxsIGludG8gdGhlIGh3LXNwZWNpZmljIGRyaXZlcgotCSAgIHRvIGtpY2sgaXQgc29tZWhvdz8gKi8KLQlsYnNfaG9zdF90b19jYXJkX2RvbmUocHJpdik7Ci0KLQkvKiBGSVhNRTogcmVzZXQgdGhlIGNhcmQgKi8KLQotCWxic19kZWJfbGVhdmUoTEJTX0RFQl9UWCk7Ci19Ci0KIHZvaWQgbGJzX2hvc3RfdG9fY2FyZF9kb25lKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMzM2LDEyICszMjIsMTIgQEAKIH0KIAogLyoqCi0gKiAgQGJyaWVmIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgbWFqb3Igam9icyBpbiB0aGUgTEJTIGRyaXZlci4KKyAqICBsYnNfdGhyZWFkIC0gaGFuZGxlcyB0aGUgbWFqb3Igam9icyBpbiB0aGUgTEJTIGRyaXZlci4KICAqICBJdCBoYW5kbGVzIGFsbCBldmVudHMgZ2VuZXJhdGVkIGJ5IGZpcm13YXJlLCBSWCBkYXRhIHJlY2VpdmVkCiAgKiAgZnJvbSBmaXJtd2FyZSBhbmQgVFggZGF0YSBzZW50IGZyb20ga2VybmVsLgogICoKLSAqICBAcGFyYW0gZGF0YSAgICBBIHBvaW50ZXIgdG8gbGJzX3RocmVhZCBzdHJ1Y3R1cmUKLSAqICBAcmV0dXJuIAkgICAwCisgKiAgQGRhdGE6CUEgcG9pbnRlciB0byAmbGJzX3RocmVhZCBzdHJ1Y3R1cmUKKyAqICByZXR1cm5zOgkwCiAgKi8KIHN0YXRpYyBpbnQgbGJzX3RocmVhZCh2b2lkICpkYXRhKQogewpAQCAtNDYyLDggKzQ0OCw4IEBACiAJCWlmIChwcml2LT5jbWRfdGltZWRfb3V0ICYmIHByaXYtPmN1cl9jbWQpIHsKIAkJCXN0cnVjdCBjbWRfY3RybF9ub2RlICpjbWRub2RlID0gcHJpdi0+Y3VyX2NtZDsKIAotCQkJbGJzX3ByX2luZm8oIlRpbWVvdXQgc3VibWl0dGluZyBjb21tYW5kIDB4JTA0eFxuIiwKLQkJCQlsZTE2X3RvX2NwdShjbWRub2RlLT5jbWRidWYtPmNvbW1hbmQpKTsKKwkJCW5ldGRldl9pbmZvKGRldiwgIlRpbWVvdXQgc3VibWl0dGluZyBjb21tYW5kIDB4JTA0eFxuIiwKKwkJCQkgICAgbGUxNl90b19jcHUoY21kbm9kZS0+Y21kYnVmLT5jb21tYW5kKSk7CiAJCQlsYnNfY29tcGxldGVfY29tbWFuZChwcml2LCBjbWRub2RlLCAtRVRJTUVET1VUKTsKIAkJCWlmIChwcml2LT5yZXNldF9jYXJkKQogCQkJCXByaXYtPnJlc2V0X2NhcmQocHJpdik7CkBAIC00OTAsOCArNDc2LDggQEAKIAkJCQkgKiBhZnRlciBmaXJtd2FyZSBmaXhlcyBpdAogCQkJCSAqLwogCQkJCXByaXYtPnBzc3RhdGUgPSBQU19TVEFURV9BV0FLRTsKLQkJCQlsYnNfcHJfYWxlcnQoImlnbm9yZSBQU19TbGVlcENvbmZpcm0gaW4gIgotCQkJCQkibm9uLWNvbm5lY3RlZCBzdGF0ZVxuIik7CisJCQkJbmV0ZGV2X2FsZXJ0KGRldiwKKwkJCQkJICAgICAiaWdub3JlIFBTX1NsZWVwQ29uZmlybSBpbiBub24tY29ubmVjdGVkIHN0YXRlXG4iKTsKIAkJCX0KIAkJfQogCkBAIC01NDAsMTEgKzUyNiwxMSBAQAogfQogCiAvKioKLSAqIEBicmllZiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIEhXIHNwZWMgZnJvbSB0aGUgZmlybXdhcmUgYW5kIHNldHMKLSAqICAgICAgICBzb21lIGJhc2ljIHBhcmFtZXRlcnMuCisgKiBsYnNfc2V0dXBfZmlybXdhcmUgLSBnZXRzIHRoZSBIVyBzcGVjIGZyb20gdGhlIGZpcm13YXJlIGFuZCBzZXRzCisgKiAgICAgICAgc29tZSBiYXNpYyBwYXJhbWV0ZXJzCiAgKgotICogIEBwYXJhbSBwcml2ICAgIEEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHJldHVybiAgICAgICAgMCBvciAtMQorICogIEBwcml2OglBIHBvaW50ZXIgdG8gJnN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqICByZXR1cm5zOgkwIG9yIC0xCiAgKi8KIHN0YXRpYyBpbnQgbGJzX3NldHVwX2Zpcm13YXJlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKIHsKQEAgLTU4NSw3ICs1NzEsOCBAQAogCWlmIChwcml2LT5pc19kZWVwX3NsZWVwKSB7CiAJCXJldCA9IGxic19zZXRfZGVlcF9zbGVlcChwcml2LCAwKTsKIAkJaWYgKHJldCkgewotCQkJbGJzX3ByX2VycigiZGVlcCBzbGVlcCBjYW5jZWxsYXRpb24gZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJCW5ldGRldl9lcnIocHJpdi0+ZGV2LAorCQkJCSAgICJkZWVwIHNsZWVwIGNhbmNlbGxhdGlvbiBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCQlwcml2LT5kZWVwX3NsZWVwX3JlcXVpcmVkID0gMTsKQEAgLTYxOCw3ICs2MDUsOCBAQAogCQlwcml2LT5kZWVwX3NsZWVwX3JlcXVpcmVkID0gMDsKIAkJcmV0ID0gbGJzX3NldF9kZWVwX3NsZWVwKHByaXYsIDEpOwogCQlpZiAocmV0KQotCQkJbGJzX3ByX2VycigiZGVlcCBzbGVlcCBhY3RpdmF0aW9uIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCQluZXRkZXZfZXJyKHByaXYtPmRldiwKKwkJCQkgICAiZGVlcCBzbGVlcCBhY3RpdmF0aW9uIGZhaWxlZDogJWRcbiIsIHJldCk7CiAJfQogCiAJaWYgKHByaXYtPnNldHVwX2Z3X29uX3Jlc3VtZSkKQEAgLTYzMCw4ICs2MTgsMTAgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGxic19yZXN1bWUpOwogCiAvKioKLSAqICBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIHRpbWVvdXQgb2YgY29tbWFuZCBzZW5kaW5nLgotICogIEl0IHdpbGwgcmUtc2VuZCB0aGUgc2FtZSBjb21tYW5kIGFnYWluLgorICogbGJzX2NtZF90aW1lb3V0X2hhbmRsZXIgLSBoYW5kbGVzIHRoZSB0aW1lb3V0IG9mIGNvbW1hbmQgc2VuZGluZy4KKyAqIEl0IHdpbGwgcmUtc2VuZCB0aGUgc2FtZSBjb21tYW5kIGFnYWluLgorICoKKyAqIEBkYXRhOiAmc3RydWN0IGxic19wcml2YXRlIHBvaW50ZXIKICAqLwogc3RhdGljIHZvaWQgbGJzX2NtZF90aW1lb3V0X2hhbmRsZXIodW5zaWduZWQgbG9uZyBkYXRhKQogewpAQCAtNjQ0LDggKzYzNCw4IEBACiAJaWYgKCFwcml2LT5jdXJfY21kKQogCQlnb3RvIG91dDsKIAotCWxic19wcl9pbmZvKCJjb21tYW5kIDB4JTA0eCB0aW1lZCBvdXRcbiIsCi0JCWxlMTZfdG9fY3B1KHByaXYtPmN1cl9jbWQtPmNtZGJ1Zi0+Y29tbWFuZCkpOworCW5ldGRldl9pbmZvKHByaXYtPmRldiwgImNvbW1hbmQgMHglMDR4IHRpbWVkIG91dFxuIiwKKwkJICAgIGxlMTZfdG9fY3B1KHByaXYtPmN1cl9jbWQtPmNtZGJ1Zi0+Y29tbWFuZCkpOwogCiAJcHJpdi0+Y21kX3RpbWVkX291dCA9IDE7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0cSk7CkBAIC02NTUsOCArNjQ1LDEwIEBACiB9CiAKIC8qKgotICogIFRoaXMgZnVuY3Rpb24gcHV0IHRoZSBkZXZpY2UgYmFjayB0byBkZWVwIHNsZWVwIG1vZGUgd2hlbiB0aW1lciBleHBpcmVzCi0gKiAgYW5kIG5vIGFjdGl2aXR5IChjb21tYW5kLCBldmVudCwgZGF0YSBldGMuKSBpcyBkZXRlY3RlZC4KKyAqIGF1dG9fZGVlcHNsZWVwX3RpbWVyX2ZuIC0gcHV0IHRoZSBkZXZpY2UgYmFjayB0byBkZWVwIHNsZWVwIG1vZGUgd2hlbgorICogdGltZXIgZXhwaXJlcyBhbmQgbm8gYWN0aXZpdHkgKGNvbW1hbmQsIGV2ZW50LCBkYXRhIGV0Yy4pIGlzIGRldGVjdGVkLgorICogQGRhdGE6CSZzdHJ1Y3QgbGJzX3ByaXZhdGUgcG9pbnRlcgorICogcmV0dXJuczoJTi9BCiAgKi8KIHN0YXRpYyB2b2lkIGF1dG9fZGVlcHNsZWVwX3RpbWVyX2ZuKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKQEAgLTc0OCw3ICs3NDAsNyBAQAogCiAJLyogQWxsb2NhdGUgdGhlIGNvbW1hbmQgYnVmZmVycyAqLwogCWlmIChsYnNfYWxsb2NhdGVfY21kX2J1ZmZlcihwcml2KSkgewotCQlsYnNfcHJfZXJyKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgY29tbWFuZCBidWZmZXJzXG4iKTsKKwkJcHJfZXJyKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgY29tbWFuZCBidWZmZXJzXG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNzU4LDcgKzc1MCw3IEBACiAJLyogQ3JlYXRlIHRoZSBldmVudCBGSUZPICovCiAJcmV0ID0ga2ZpZm9fYWxsb2MoJnByaXYtPmV2ZW50X2ZpZm8sIHNpemVvZih1MzIpICogMTYsIEdGUF9LRVJORUwpOwogCWlmIChyZXQpIHsKLQkJbGJzX3ByX2VycigiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGV2ZW50IEZJRk8gYnVmZmVyXG4iKTsKKwkJcHJfZXJyKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgZXZlbnQgRklGTyBidWZmZXJcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTc4NSwxOCArNzc3LDE4IEBACiAJLm5kb19zdG9wCQk9IGxic19ldGhfc3RvcCwKIAkubmRvX3N0YXJ0X3htaXQJCT0gbGJzX2hhcmRfc3RhcnRfeG1pdCwKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGxic19zZXRfbWFjX2FkZHJlc3MsCi0JLm5kb190eF90aW1lb3V0IAk9IGxic190eF90aW1lb3V0LAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gbGJzX3NldF9tdWx0aWNhc3RfbGlzdCwKIAkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiB9OwogCiAvKioKLSAqIEBicmllZiBUaGlzIGZ1bmN0aW9uIGFkZHMgdGhlIGNhcmQuIGl0IHdpbGwgcHJvYmUgdGhlCisgKiBsYnNfYWRkX2NhcmQgLSBhZGRzIHRoZSBjYXJkLiBJdCB3aWxsIHByb2JlIHRoZQogICogY2FyZCwgYWxsb2NhdGUgdGhlIGxic19wcml2IGFuZCBpbml0aWFsaXplIHRoZSBkZXZpY2UuCiAgKgotICogIEBwYXJhbSBjYXJkICAgIEEgcG9pbnRlciB0byBjYXJkCi0gKiAgQHJldHVybiAJICAgQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqIEBjYXJkOglBIHBvaW50ZXIgdG8gY2FyZAorICogQGRtZGV2OglBIHBvaW50ZXIgdG8gJnN0cnVjdCBkZXZpY2UKKyAqIHJldHVybnM6CUEgcG9pbnRlciB0byAmc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQogICovCiBzdHJ1Y3QgbGJzX3ByaXZhdGUgKmxic19hZGRfY2FyZCh2b2lkICpjYXJkLCBzdHJ1Y3QgZGV2aWNlICpkbWRldikKIHsKQEAgLTgwOSw3ICs4MDEsNyBAQAogCS8qIEFsbG9jYXRlIGFuIEV0aGVybmV0IGRldmljZSBhbmQgcmVnaXN0ZXIgaXQgKi8KIAl3ZGV2ID0gbGJzX2NmZ19hbGxvYyhkbWRldik7CiAJaWYgKElTX0VSUih3ZGV2KSkgewotCQlsYnNfcHJfZXJyKCJjZmc4MDIxMSBpbml0IGZhaWxlZFxuIik7CisJCXByX2VycigiY2ZnODAyMTEgaW5pdCBmYWlsZWRcbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCkBAIC04MTgsNyArODEwLDcgQEAKIAlwcml2LT53ZGV2ID0gd2RldjsKIAogCWlmIChsYnNfaW5pdF9hZGFwdGVyKHByaXYpKSB7Ci0JCWxic19wcl9lcnIoImZhaWxlZCB0byBpbml0aWFsaXplIGFkYXB0ZXIgc3RydWN0dXJlLlxuIik7CisJCXByX2VycigiZmFpbGVkIHRvIGluaXRpYWxpemUgYWRhcHRlciBzdHJ1Y3R1cmVcbiIpOwogCQlnb3RvIGVycl93ZGV2OwogCX0KIApAQCAtOTUwLDE3ICs5NDIsMjAgQEAKIAkJZ290byBkb25lOwogCiAJaWYgKGxic19jZmdfcmVnaXN0ZXIocHJpdikpIHsKLQkJbGJzX3ByX2VycigiY2Fubm90IHJlZ2lzdGVyIGRldmljZVxuIik7CisJCXByX2VycigiY2Fubm90IHJlZ2lzdGVyIGRldmljZVxuIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAlsYnNfdXBkYXRlX2NoYW5uZWwocHJpdik7CiAKLQlsYnNfaW5pdF9tZXNoKHByaXYpOworCWlmICghbGJzX2Rpc2FibGVtZXNoKQorCQlsYnNfaW5pdF9tZXNoKHByaXYpOworCWVsc2UKKwkJcHJfaW5mbygiJXM6IG1lc2ggZGlzYWJsZWRcbiIsIGRldi0+bmFtZSk7CiAKIAlsYnNfZGVidWdmc19pbml0X29uZShwcml2LCBkZXYpOwogCi0JbGJzX3ByX2luZm8oIiVzOiBNYXJ2ZWxsIFdMQU4gODAyLjExIGFkYXB0ZXJcbiIsIGRldi0+bmFtZSk7CisJbmV0ZGV2X2luZm8oZGV2LCAiTWFydmVsbCBXTEFOIDgwMi4xMSBhZGFwdGVyXG4iKTsKIAogCXJldCA9IDA7CiAKQEAgLTEwNTcsMTkgKzEwNTIsMTkgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGxic19ub3RpZnlfY29tbWFuZF9yZXNwb25zZSk7CiAKIC8qKgotICogIEBicmllZiBSZXRyaWV2ZXMgdHdvLXN0YWdlIGZpcm13YXJlCisgKiAgbGJzX2dldF9maXJtd2FyZSAtIFJldHJpZXZlcyB0d28tc3RhZ2UgZmlybXdhcmUKICAqCi0gKiAgQHBhcmFtIGRldiAgICAgCUEgcG9pbnRlciB0byBkZXZpY2Ugc3RydWN0dXJlCi0gKiAgQHBhcmFtIHVzZXJfaGVscGVyCVVzZXItZGVmaW5lZCBoZWxwZXIgZmlybXdhcmUgZmlsZQotICogIEBwYXJhbSB1c2VyX21haW5mdwlVc2VyLWRlZmluZWQgbWFpbiBmaXJtd2FyZSBmaWxlCi0gKiAgQHBhcmFtIGNhcmRfbW9kZWwJQnVzLXNwZWNpZmljIGNhcmQgbW9kZWwgSUQgdXNlZCB0byBmaWx0ZXIgZmlybXdhcmUgdGFibGUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzCi0gKiAgQHBhcmFtIGZ3X3RhYmxlCVRhYmxlIG9mIGZpcm13YXJlIGZpbGUgbmFtZXMgYW5kIGRldmljZSBtb2RlbCBudW1iZXJzCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkIGJ5IGFuIGVudHJ5IHdpdGggYSBOVUxMIGhlbHBlciBuYW1lCi0gKiAgQHBhcmFtIGhlbHBlcglPbiBzdWNjZXNzLCB0aGUgaGVscGVyIGZpcm13YXJlOyBjYWxsZXIgbXVzdCBmcmVlCi0gKiAgQHBhcmFtIG1haW5mdwlPbiBzdWNjZXNzLCB0aGUgbWFpbiBmaXJtd2FyZTsgY2FsbGVyIG11c3QgZnJlZQorICogIEBkZXY6ICAgICAJQSBwb2ludGVyIHRvICZkZXZpY2Ugc3RydWN0dXJlCisgKiAgQHVzZXJfaGVscGVyOiBVc2VyLWRlZmluZWQgaGVscGVyIGZpcm13YXJlIGZpbGUKKyAqICBAdXNlcl9tYWluZnc6IFVzZXItZGVmaW5lZCBtYWluIGZpcm13YXJlIGZpbGUKKyAqICBAY2FyZF9tb2RlbDogQnVzLXNwZWNpZmljIGNhcmQgbW9kZWwgSUQgdXNlZCB0byBmaWx0ZXIgZmlybXdhcmUgdGFibGUKKyAqCQllbGVtZW50cworICogIEBmd190YWJsZToJVGFibGUgb2YgZmlybXdhcmUgZmlsZSBuYW1lcyBhbmQgZGV2aWNlIG1vZGVsIG51bWJlcnMKKyAqCQl0ZXJtaW5hdGVkIGJ5IGFuIGVudHJ5IHdpdGggYSBOVUxMIGhlbHBlciBuYW1lCisgKiAgQGhlbHBlcjoJT24gc3VjY2VzcywgdGhlIGhlbHBlciBmaXJtd2FyZTsgY2FsbGVyIG11c3QgZnJlZQorICogIEBtYWluZnc6CU9uIHN1Y2Nlc3MsIHRoZSBtYWluIGZpcm13YXJlOyBjYWxsZXIgbXVzdCBmcmVlCiAgKgotICogIEByZXR1cm4JCTAgb24gc3VjY2Vzcywgbm9uLXplcm8gb24gZmFpbHVyZQorICogIHJldHVybnM6CQkwIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUKICAqLwogaW50IGxic19nZXRfZmlybXdhcmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICp1c2VyX2hlbHBlciwKIAkJCWNvbnN0IGNoYXIgKnVzZXJfbWFpbmZ3LCB1MzIgY2FyZF9tb2RlbCwKQEAgLTEwODcsMTYgKzEwODIsMTYgQEAKIAlpZiAodXNlcl9oZWxwZXIpIHsKIAkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZShoZWxwZXIsIHVzZXJfaGVscGVyLCBkZXYpOwogCQlpZiAocmV0KSB7Ci0JCQlsYnNfcHJfZXJyKCJjb3VsZG4ndCBmaW5kIGhlbHBlciBmaXJtd2FyZSAlcyIsCi0JCQkJCXVzZXJfaGVscGVyKTsKKwkJCWRldl9lcnIoZGV2LCAiY291bGRuJ3QgZmluZCBoZWxwZXIgZmlybXdhcmUgJXNcbiIsCisJCQkJdXNlcl9oZWxwZXIpOwogCQkJZ290byBmYWlsOwogCQl9CiAJfQogCWlmICh1c2VyX21haW5mdykgewogCQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKG1haW5mdywgdXNlcl9tYWluZncsIGRldik7CiAJCWlmIChyZXQpIHsKLQkJCWxic19wcl9lcnIoImNvdWxkbid0IGZpbmQgbWFpbiBmaXJtd2FyZSAlcyIsCi0JCQkJCXVzZXJfbWFpbmZ3KTsKKwkJCWRldl9lcnIoZGV2LCAiY291bGRuJ3QgZmluZCBtYWluIGZpcm13YXJlICVzXG4iLAorCQkJCXVzZXJfbWFpbmZ3KTsKIAkJCWdvdG8gZmFpbDsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21lc2guYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21lc2guYwppbmRleCA5ZDA5N2I5Li4yNGNmMDY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tZXNoLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWVzaC5jCkBAIC0xLDMgKzEsNSBAQAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgpAQCAtMTYsMTIgKzE4LDE1IEBACiAgKiBNZXNoIHN5c2ZzIHN1cHBvcnQKICAqLwogCi0vKioKKy8qCiAgKiBBdHRyaWJ1dGVzIGV4cG9ydGVkIHRocm91Z2ggc3lzZnMKICAqLwogCiAvKioKLSAqIEBicmllZiBHZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBhbnljYXN0X21hc2sKKyAqIGxic19hbnljYXN0X2dldCAtIEdldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIGFueWNhc3RfbWFzaworICogQGRldjogdGhlICZzdHJ1Y3QgZGV2aWNlCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZXMKKyAqIEBidWY6IGJ1ZmZlciB3aGVyZSBkYXRhIHdpbGwgYmUgcmV0dXJuZWQKICAqLwogc3RhdGljIHNzaXplX3QgbGJzX2FueWNhc3RfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKiBidWYpCkBAIC00MCw3ICs0NSwxMSBAQAogfQogCiAvKioKLSAqIEBicmllZiBTZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBhbnljYXN0X21hc2sKKyAqIGxic19hbnljYXN0X3NldCAtIFNldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIGFueWNhc3RfbWFzaworICogQGRldjogdGhlICZzdHJ1Y3QgZGV2aWNlCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZXMKKyAqIEBidWY6IGJ1ZmZlciB0aGF0IGNvbnRhaW5zIG5ldyBhdHRyaWJ1dGUgdmFsdWUKKyAqIEBjb3VudDogc2l6ZSBvZiBidWZmZXIKICAqLwogc3RhdGljIHNzaXplX3QgbGJzX2FueWNhc3Rfc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKiBidWYsIHNpemVfdCBjb3VudCkKQEAgLTYyLDcgKzcxLDEwIEBACiB9CiAKIC8qKgotICogQGJyaWVmIEdldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIHByYl9yc3BfbGltaXQKKyAqIGxic19wcmJfcnNwX2xpbWl0X2dldCAtIEdldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIHByYl9yc3BfbGltaXQKKyAqIEBkZXY6IHRoZSAmc3RydWN0IGRldmljZQorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGVzCisgKiBAYnVmOiBidWZmZXIgd2hlcmUgZGF0YSB3aWxsIGJlIHJldHVybmVkCiAgKi8KIHN0YXRpYyBzc2l6ZV90IGxic19wcmJfcnNwX2xpbWl0X2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCkBAIC04NSw3ICs5NywxMSBAQAogfQogCiAvKioKLSAqIEBicmllZiBTZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBwcmJfcnNwX2xpbWl0CisgKiBsYnNfcHJiX3JzcF9saW1pdF9zZXQgLSBTZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBwcmJfcnNwX2xpbWl0CisgKiBAZGV2OiB0aGUgJnN0cnVjdCBkZXZpY2UKKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlcworICogQGJ1ZjogYnVmZmVyIHRoYXQgY29udGFpbnMgbmV3IGF0dHJpYnV0ZSB2YWx1ZQorICogQGNvdW50OiBzaXplIG9mIGJ1ZmZlcgogICovCiBzdGF0aWMgc3NpemVfdCBsYnNfcHJiX3JzcF9saW1pdF9zZXQoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCkBAIC0xMTQsNyArMTMwLDEwIEBACiB9CiAKIC8qKgotICogR2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgbWVzaAorICogbGJzX21lc2hfZ2V0IC0gR2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgbWVzaAorICogQGRldjogdGhlICZzdHJ1Y3QgZGV2aWNlCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZXMKKyAqIEBidWY6IGJ1ZmZlciB3aGVyZSBkYXRhIHdpbGwgYmUgcmV0dXJuZWQKICAqLwogc3RhdGljIHNzaXplX3QgbGJzX21lc2hfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKiBidWYpCkBAIC0xMjQsNyArMTQzLDExIEBACiB9CiAKIC8qKgotICogIFNldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIG1lc2gKKyAqIGxic19tZXNoX3NldCAtIFNldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIG1lc2gKKyAqIEBkZXY6IHRoZSAmc3RydWN0IGRldmljZQorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGVzCisgKiBAYnVmOiBidWZmZXIgdGhhdCBjb250YWlucyBuZXcgYXR0cmlidXRlIHZhbHVlCisgKiBAY291bnQ6IHNpemUgb2YgYnVmZmVyCiAgKi8KIHN0YXRpYyBzc2l6ZV90IGxic19tZXNoX3NldChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICogYnVmLCBzaXplX3QgY291bnQpCkBAIC0xNTEsMTkgKzE3NCwxOSBAQAogCXJldHVybiBjb3VudDsKIH0KIAotLyoqCisvKgogICogbGJzX21lc2ggYXR0cmlidXRlIHRvIGJlIGV4cG9ydGVkIHBlciBldGhYIGludGVyZmFjZQogICogdGhyb3VnaCBzeXNmcyAoL3N5cy9jbGFzcy9uZXQvZXRoWC9sYnNfbWVzaCkKICAqLwogc3RhdGljIERFVklDRV9BVFRSKGxic19tZXNoLCAwNjQ0LCBsYnNfbWVzaF9nZXQsIGxic19tZXNoX3NldCk7CiAKLS8qKgorLyoKICAqIGFueWNhc3RfbWFzayBhdHRyaWJ1dGUgdG8gYmUgZXhwb3J0ZWQgcGVyIG1zaFggaW50ZXJmYWNlCiAgKiB0aHJvdWdoIHN5c2ZzICgvc3lzL2NsYXNzL25ldC9tc2hYL2FueWNhc3RfbWFzaykKICAqLwogc3RhdGljIERFVklDRV9BVFRSKGFueWNhc3RfbWFzaywgMDY0NCwgbGJzX2FueWNhc3RfZ2V0LCBsYnNfYW55Y2FzdF9zZXQpOwogCi0vKioKKy8qCiAgKiBwcmJfcnNwX2xpbWl0IGF0dHJpYnV0ZSB0byBiZSBleHBvcnRlZCBwZXIgbXNoWCBpbnRlcmZhY2UKICAqIHRocm91Z2ggc3lzZnMgKC9zeXMvY2xhc3MvbmV0L21zaFgvcHJiX3JzcF9saW1pdCkKICAqLwpAQCAtMjQ2LDcgKzI2OSw3IEBACiAJCWxic19hZGRfbWVzaChwcml2KTsKIAogCQlpZiAoZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX2xic19tZXNoKSkKLQkJCWxic19wcl9lcnIoImNhbm5vdCByZWdpc3RlciBsYnNfbWVzaCBhdHRyaWJ1dGVcbiIpOworCQkJbmV0ZGV2X2VycihkZXYsICJjYW5ub3QgcmVnaXN0ZXIgbGJzX21lc2ggYXR0cmlidXRlXG4iKTsKIAogCQlyZXQgPSAxOwogCX0KQEAgLTI3NCwxMCArMjk3LDEwIEBACiAKIAogLyoqCi0gKiAgQGJyaWVmIFRoaXMgZnVuY3Rpb24gY2xvc2VzIHRoZSBtc2hYIGludGVyZmFjZQorICogbGJzX21lc2hfc3RvcCAtIGNsb3NlIHRoZSBtc2hYIGludGVyZmFjZQogICoKLSAqICBAcGFyYW0gZGV2ICAgICBBIHBvaW50ZXIgdG8gbmV0X2RldmljZSBzdHJ1Y3R1cmUKLSAqICBAcmV0dXJuIAkgICAwCisgKiBAZGV2OglBIHBvaW50ZXIgdG8gJm5ldF9kZXZpY2Ugc3RydWN0dXJlCisgKiByZXR1cm5zOgkwCiAgKi8KIHN0YXRpYyBpbnQgbGJzX21lc2hfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMzAxLDEwICszMjQsMTAgQEAKIH0KIAogLyoqCi0gKiAgQGJyaWVmIFRoaXMgZnVuY3Rpb24gb3BlbnMgdGhlIG1zaFggaW50ZXJmYWNlCisgKiBsYnNfbWVzaF9kZXZfb3BlbiAtIG9wZW4gdGhlIG1zaFggaW50ZXJmYWNlCiAgKgotICogIEBwYXJhbSBkZXYgICAgIEEgcG9pbnRlciB0byBuZXRfZGV2aWNlIHN0cnVjdHVyZQotICogIEByZXR1cm4gCSAgIDAgb3IgLUVCVVNZIGlmIG1vbml0b3IgbW9kZSBhY3RpdmUKKyAqIEBkZXY6CUEgcG9pbnRlciB0byAmbmV0X2RldmljZSBzdHJ1Y3R1cmUKKyAqIHJldHVybnM6CTAgb3IgLUVCVVNZIGlmIG1vbml0b3IgbW9kZSBhY3RpdmUKICAqLwogc3RhdGljIGludCBsYnNfbWVzaF9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMzQyLDEwICszNjUsMTAgQEAKIH07CiAKIC8qKgotICogQGJyaWVmIFRoaXMgZnVuY3Rpb24gYWRkcyBtc2hYIGludGVyZmFjZQorICogbGJzX2FkZF9tZXNoIC0gYWRkIG1zaFggaW50ZXJmYWNlCiAgKgotICogIEBwYXJhbSBwcml2ICAgIEEgcG9pbnRlciB0byB0aGUgc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEByZXR1cm4gCSAgIDAgaWYgc3VjY2Vzc2Z1bCwgLVggb3RoZXJ3aXNlCisgKiBAcHJpdjoJQSBwb2ludGVyIHRvIHRoZSAmc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQorICogcmV0dXJuczoJMCBpZiBzdWNjZXNzZnVsLCAtWCBvdGhlcndpc2UKICAqLwogaW50IGxic19hZGRfbWVzaChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCiB7CkBAIC0zNzQsNyArMzk3LDcgQEAKIAkvKiBSZWdpc3RlciB2aXJ0dWFsIG1lc2ggaW50ZXJmYWNlICovCiAJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG1lc2hfZGV2KTsKIAlpZiAocmV0KSB7Ci0JCWxic19wcl9lcnIoImNhbm5vdCByZWdpc3RlciBtc2hYIHZpcnR1YWwgaW50ZXJmYWNlXG4iKTsKKwkJcHJfZXJyKCJjYW5ub3QgcmVnaXN0ZXIgbXNoWCB2aXJ0dWFsIGludGVyZmFjZVxuIik7CiAJCWdvdG8gZXJyX2ZyZWU7CiAJfQogCkBAIC00NTYsMTMgKzQ3OSwxMyBAQAogICovCiAKIC8qKgotICogIEBicmllZiBBZGQgb3IgZGVsZXRlIE1lc2ggQmxpbmRpbmcgVGFibGUgZW50cmllcworICogbGJzX21lc2hfYnRfYWRkX2RlbCAtIEFkZCBvciBkZWxldGUgTWVzaCBCbGluZGluZyBUYWJsZSBlbnRyaWVzCiAgKgotICogIEBwYXJhbSBwcml2ICAgIAlBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEBwYXJhbSBhZGQgIAlUUlVFIHRvIGFkZCB0aGUgZW50cnksIEZBTFNFIHRvIGRlbGV0ZSBpdAotICogIEBwYXJhbSBhZGRyMSAgICAgICAgRGVzdGluYXRpb24gYWRkcmVzcyB0byBibGluZCBvciB1bmJsaW5kCisgKiBAcHJpdjoJQSBwb2ludGVyIHRvICZzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKiBAYWRkOglUUlVFIHRvIGFkZCB0aGUgZW50cnksIEZBTFNFIHRvIGRlbGV0ZSBpdAorICogQGFkZHIxOglEZXN0aW5hdGlvbiBhZGRyZXNzIHRvIGJsaW5kIG9yIHVuYmxpbmQKICAqCi0gKiAgQHJldHVybiAJICAgCTAgb24gc3VjY2VzcywgZXJyb3Igb24gZmFpbHVyZQorICogcmV0dXJuczoJMCBvbiBzdWNjZXNzLCBlcnJvciBvbiBmYWlsdXJlCiAgKi8KIGludCBsYnNfbWVzaF9idF9hZGRfZGVsKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgYm9vbCBhZGQsIHU4ICphZGRyMSkKIHsKQEAgLTQ5MywxMSArNTE2LDExIEBACiB9CiAKIC8qKgotICogIEBicmllZiBSZXNldC9jbGVhciB0aGUgbWVzaCBibGluZGluZyB0YWJsZQorICogbGJzX21lc2hfYnRfcmVzZXQgLSBSZXNldC9jbGVhciB0aGUgbWVzaCBibGluZGluZyB0YWJsZQogICoKLSAqICBAcGFyYW0gcHJpdiAgICAJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqIEBwcml2OglBIHBvaW50ZXIgdG8gJnN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqCi0gKiAgQHJldHVybiAJICAgCTAgb24gc3VjY2VzcywgZXJyb3Igb24gZmFpbHVyZQorICogcmV0dXJuczoJMCBvbiBzdWNjZXNzLCBlcnJvciBvbiBmYWlsdXJlCiAgKi8KIGludCBsYnNfbWVzaF9idF9yZXNldChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCiB7CkBAIC01MTcsMTcgKzU0MCwxOCBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgR2V0cyB0aGUgaW52ZXJ0ZWQgc3RhdHVzIG9mIHRoZSBtZXNoIGJsaW5kaW5nIHRhYmxlCisgKiBsYnNfbWVzaF9idF9nZXRfaW52ZXJ0ZWQgLSBHZXRzIHRoZSBpbnZlcnRlZCBzdGF0dXMgb2YgdGhlIG1lc2gKKyAqIGJsaW5kaW5nIHRhYmxlCiAgKgotICogIE5vcm1hbGx5IHRoZSBmaXJtd2FyZSAiYmxpbmRzIiBvciBpZ25vcmVzIHRyYWZmaWMgZnJvbSBtZXNoIG5vZGVzIGluIHRoZQotICogIHRhYmxlLCBidXQgYW4gaW52ZXJ0ZWQgdGFibGUgYWxsb3dzICpvbmx5KiB0cmFmZmljIGZyb20gbm9kZXMgbGlzdGVkIGluCi0gKiAgdGhlIHRhYmxlLgorICogTm9ybWFsbHkgdGhlIGZpcm13YXJlICJibGluZHMiIG9yIGlnbm9yZXMgdHJhZmZpYyBmcm9tIG1lc2ggbm9kZXMgaW4gdGhlCisgKiB0YWJsZSwgYnV0IGFuIGludmVydGVkIHRhYmxlIGFsbG93cyAqb25seSogdHJhZmZpYyBmcm9tIG5vZGVzIGxpc3RlZCBpbgorICogdGhlIHRhYmxlLgogICoKLSAqICBAcGFyYW0gcHJpdiAgICAJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gaW52ZXJ0ICAJT24gc3VjY2VzcywgVFJVRSBpZiB0aGUgYmxpbmRpbmcgdGFibGUgaXMgaW52ZXJ0ZWQsCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFIGlmIGl0IGlzIG5vdCBpbnZlcnRlZAorICogQHByaXY6CUEgcG9pbnRlciB0byAmc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQorICogQGludmVydGVkOiAgCU9uIHN1Y2Nlc3MsIFRSVUUgaWYgdGhlIGJsaW5kaW5nIHRhYmxlIGlzIGludmVydGVkLAorICoJCUZBTFNFIGlmIGl0IGlzIG5vdCBpbnZlcnRlZAogICoKLSAqICBAcmV0dXJuIAkgICAJMCBvbiBzdWNjZXNzLCBlcnJvciBvbiBmYWlsdXJlCisgKiByZXR1cm5zOgkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKICAqLwogaW50IGxic19tZXNoX2J0X2dldF9pbnZlcnRlZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGJvb2wgKmludmVydGVkKQogewpAQCAtNTUxLDE4ICs1NzUsMTkgQEAKIH0KIAogLyoqCi0gKiAgQGJyaWVmIFNldHMgdGhlIGludmVydGVkIHN0YXR1cyBvZiB0aGUgbWVzaCBibGluZGluZyB0YWJsZQorICogbGJzX21lc2hfYnRfc2V0X2ludmVydGVkIC0gU2V0cyB0aGUgaW52ZXJ0ZWQgc3RhdHVzIG9mIHRoZSBtZXNoCisgKiBibGluZGluZyB0YWJsZQogICoKLSAqICBOb3JtYWxseSB0aGUgZmlybXdhcmUgImJsaW5kcyIgb3IgaWdub3JlcyB0cmFmZmljIGZyb20gbWVzaCBub2RlcyBpbiB0aGUKLSAqICB0YWJsZSwgYnV0IGFuIGludmVydGVkIHRhYmxlIGFsbG93cyAqb25seSogdHJhZmZpYyBmcm9tIG5vZGVzIGxpc3RlZCBpbgotICogIHRoZSB0YWJsZS4KKyAqIE5vcm1hbGx5IHRoZSBmaXJtd2FyZSAiYmxpbmRzIiBvciBpZ25vcmVzIHRyYWZmaWMgZnJvbSBtZXNoIG5vZGVzIGluIHRoZQorICogdGFibGUsIGJ1dCBhbiBpbnZlcnRlZCB0YWJsZSBhbGxvd3MgKm9ubHkqIHRyYWZmaWMgZnJvbSBub2RlcyBsaXN0ZWQgaW4KKyAqIHRoZSB0YWJsZS4KICAqCi0gKiAgQHBhcmFtIHByaXYgICAgCUEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHBhcmFtIGludmVydCAgCVRSVUUgdG8gaW52ZXJ0IHRoZSBibGluZGluZyB0YWJsZSAob25seSB0cmFmZmljIGZyb20KLSAqICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlZCBub2RlcyBhbGxvd2VkKSwgRkFMU0UgdG8gcmV0dXJuIGl0Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICB0byBub3JtYWwgc3RhdGUgKGxpc3RlZCBub2RlcyBpZ25vcmVkKQorICogQHByaXY6CUEgcG9pbnRlciB0byAmc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQorICogQGludmVydGVkOglUUlVFIHRvIGludmVydCB0aGUgYmxpbmRpbmcgdGFibGUgKG9ubHkgdHJhZmZpYyBmcm9tCisgKgkJbGlzdGVkIG5vZGVzIGFsbG93ZWQpLCBGQUxTRSB0byByZXR1cm4gaXQKKyAqCQl0byBub3JtYWwgc3RhdGUgKGxpc3RlZCBub2RlcyBpZ25vcmVkKQogICoKLSAqICBAcmV0dXJuIAkgICAJMCBvbiBzdWNjZXNzLCBlcnJvciBvbiBmYWlsdXJlCisgKiByZXR1cm5zOgkwIG9uIHN1Y2Nlc3MsIGVycm9yIG9uIGZhaWx1cmUKICAqLwogaW50IGxic19tZXNoX2J0X3NldF9pbnZlcnRlZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIGJvb2wgaW52ZXJ0ZWQpCiB7CkBAIC01ODMsMTMgKzYwOCwxMyBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgTGlzdCBhbiBlbnRyeSBpbiB0aGUgbWVzaCBibGluZGluZyB0YWJsZQorICogbGJzX21lc2hfYnRfZ2V0X2VudHJ5IC0gTGlzdCBhbiBlbnRyeSBpbiB0aGUgbWVzaCBibGluZGluZyB0YWJsZQogICoKLSAqICBAcGFyYW0gcHJpdiAgICAJQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcGFyYW0gaWQJCVRoZSBJRCBvZiB0aGUgZW50cnkgdG8gbGlzdAotICogIEBwYXJhbSBhZGRyMQlNQUMgYWRkcmVzcyBhc3NvY2lhdGVkIHdpdGggdGhlIHRhYmxlIGVudHJ5CisgKiBAcHJpdjoJQSBwb2ludGVyIHRvICZzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKiBAaWQ6CQlUaGUgSUQgb2YgdGhlIGVudHJ5IHRvIGxpc3QKKyAqIEBhZGRyMToJTUFDIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWJsZSBlbnRyeQogICoKLSAqICBAcmV0dXJuIAkgICAJMCBvbiBzdWNjZXNzLCBlcnJvciBvbiBmYWlsdXJlCisgKiByZXR1cm5zOiAJICAgCTAgb24gc3VjY2VzcywgZXJyb3Igb24gZmFpbHVyZQogICovCiBpbnQgbGJzX21lc2hfYnRfZ2V0X2VudHJ5KHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdTMyIGlkLCB1OCAqYWRkcjEpCiB7CkBAIC02MTQsMTQgKzYzOSwxNCBAQAogfQogCiAvKioKLSAqICBAYnJpZWYgQWNjZXNzIHRoZSBtZXNoIGZvcndhcmRpbmcgdGFibGUKKyAqIGxic19jbWRfZnd0X2FjY2VzcyAtIEFjY2VzcyB0aGUgbWVzaCBmb3J3YXJkaW5nIHRhYmxlCiAgKgotICogIEBwYXJhbSBwcml2ICAgIAlBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEBwYXJhbSBjbWRfYWN0aW9uCVRoZSBmb3J3YXJkaW5nIHRhYmxlIGFjdGlvbiB0byBwZXJmb3JtCi0gKiAgQHBhcmFtIGNtZAkJVGhlIHByZS1maWxsZWQgRldUX0FDQ0VTUyBjb21tYW5kCisgKiBAcHJpdjoJQSBwb2ludGVyIHRvICZzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKiBAY21kX2FjdGlvbjoJVGhlIGZvcndhcmRpbmcgdGFibGUgYWN0aW9uIHRvIHBlcmZvcm0KKyAqIEBjbWQ6CVRoZSBwcmUtZmlsbGVkIEZXVF9BQ0NFU1MgY29tbWFuZAogICoKLSAqICBAcmV0dXJuIAkgICAJMCBvbiBzdWNjZXNzIGFuZCAnY21kJyB3aWxsIGJlIGZpbGxlZCB3aXRoIHRoZQotICogICAgICAgICAgICAgICAgICAgICAgICBmaXJtd2FyZSdzIHJlc3BvbnNlCisgKiByZXR1cm5zOgkwIG9uIHN1Y2Nlc3MgYW5kICdjbWQnIHdpbGwgYmUgZmlsbGVkIHdpdGggdGhlCisgKgkJZmlybXdhcmUncyByZXNwb25zZQogICovCiBpbnQgbGJzX2NtZF9md3RfYWNjZXNzKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdTE2IGNtZF9hY3Rpb24sCiAJCQlzdHJ1Y3QgY21kX2RzX2Z3dF9hY2Nlc3MgKmNtZCkKQEAgLTc3NCw3ICs3OTksMTAgQEAKIH0KIAogLyoqCi0gKiBAYnJpZWYgR2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgYm9vdGZsYWcKKyAqIGJvb3RmbGFnX2dldCAtIEdldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIGJvb3RmbGFnCisgKiBAZGV2OiB0aGUgJnN0cnVjdCBkZXZpY2UKKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlcworICogQGJ1ZjogYnVmZmVyIHdoZXJlIGRhdGEgd2lsbCBiZSByZXR1cm5lZAogICovCiBzdGF0aWMgc3NpemVfdCBib290ZmxhZ19nZXQoc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCkBAIC03OTEsNyArODE5LDExIEBACiB9CiAKIC8qKgotICogQGJyaWVmIFNldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIGJvb3RmbGFnCisgKiBib290ZmxhZ19zZXQgLSBTZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBib290ZmxhZworICogQGRldjogdGhlICZzdHJ1Y3QgZGV2aWNlCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZXMKKyAqIEBidWY6IGJ1ZmZlciB0aGF0IGNvbnRhaW5zIG5ldyBhdHRyaWJ1dGUgdmFsdWUKKyAqIEBjb3VudDogc2l6ZSBvZiBidWZmZXIKICAqLwogc3RhdGljIHNzaXplX3QgYm9vdGZsYWdfc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCkBAIC04MTcsNyArODQ5LDEwIEBACiB9CiAKIC8qKgotICogQGJyaWVmIEdldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIGJvb3R0aW1lCisgKiBib290dGltZV9nZXQgLSBHZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBib290dGltZQorICogQGRldjogdGhlICZzdHJ1Y3QgZGV2aWNlCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZXMKKyAqIEBidWY6IGJ1ZmZlciB3aGVyZSBkYXRhIHdpbGwgYmUgcmV0dXJuZWQKICAqLwogc3RhdGljIHNzaXplX3QgYm9vdHRpbWVfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQpAQCAtODM0LDcgKzg2OSwxMSBAQAogfQogCiAvKioKLSAqIEBicmllZiBTZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBib290dGltZQorICogYm9vdHRpbWVfc2V0IC0gU2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgYm9vdHRpbWUKKyAqIEBkZXY6IHRoZSAmc3RydWN0IGRldmljZQorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGVzCisgKiBAYnVmOiBidWZmZXIgdGhhdCBjb250YWlucyBuZXcgYXR0cmlidXRlIHZhbHVlCisgKiBAY291bnQ6IHNpemUgb2YgYnVmZmVyCiAgKi8KIHN0YXRpYyBzc2l6ZV90IGJvb3R0aW1lX3NldChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKQEAgLTg2OSw3ICs5MDgsMTAgQEAKIH0KIAogLyoqCi0gKiBAYnJpZWYgR2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgY2hhbm5lbAorICogY2hhbm5lbF9nZXQgLSBHZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBjaGFubmVsCisgKiBAZGV2OiB0aGUgJnN0cnVjdCBkZXZpY2UKKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlcworICogQGJ1ZjogYnVmZmVyIHdoZXJlIGRhdGEgd2lsbCBiZSByZXR1cm5lZAogICovCiBzdGF0aWMgc3NpemVfdCBjaGFubmVsX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQpAQCAtODg2LDcgKzkyOCwxMSBAQAogfQogCiAvKioKLSAqIEBicmllZiBTZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBjaGFubmVsCisgKiBjaGFubmVsX3NldCAtIFNldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIGNoYW5uZWwKKyAqIEBkZXY6IHRoZSAmc3RydWN0IGRldmljZQorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGVzCisgKiBAYnVmOiBidWZmZXIgdGhhdCBjb250YWlucyBuZXcgYXR0cmlidXRlIHZhbHVlCisgKiBAY291bnQ6IHNpemUgb2YgYnVmZmVyCiAgKi8KIHN0YXRpYyBzc2l6ZV90IGNoYW5uZWxfc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKQEAgLTkxMiw3ICs5NTgsMTAgQEAKIH0KIAogLyoqCi0gKiBAYnJpZWYgR2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgbWVzaF9pZAorICogbWVzaF9pZF9nZXQgLSBHZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBtZXNoX2lkCisgKiBAZGV2OiB0aGUgJnN0cnVjdCBkZXZpY2UKKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlcworICogQGJ1ZjogYnVmZmVyIHdoZXJlIGRhdGEgd2lsbCBiZSByZXR1cm5lZAogICovCiBzdGF0aWMgc3NpemVfdCBtZXNoX2lkX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgY2hhciAqYnVmKQpAQCAtOTI2LDcgKzk3NSw3IEBACiAJCXJldHVybiByZXQ7CiAKIAlpZiAoZGVmcy5tZXNoaWUudmFsLm1lc2hfaWRfbGVuID4gSUVFRTgwMjExX01BWF9TU0lEX0xFTikgewotCQlsYnNfcHJfZXJyKCJpbmNvbnNpc3RlbnQgbWVzaCBJRCBsZW5ndGgiKTsKKwkJZGV2X2VycihkZXYsICJpbmNvbnNpc3RlbnQgbWVzaCBJRCBsZW5ndGhcbiIpOwogCQlkZWZzLm1lc2hpZS52YWwubWVzaF9pZF9sZW4gPSBJRUVFODAyMTFfTUFYX1NTSURfTEVOOwogCX0KIApAQCAtOTM4LDcgKzk4NywxMSBAQAogfQogCiAvKioKLSAqIEBicmllZiBTZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBtZXNoX2lkCisgKiBtZXNoX2lkX3NldCAtIFNldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIG1lc2hfaWQKKyAqIEBkZXY6IHRoZSAmc3RydWN0IGRldmljZQorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGVzCisgKiBAYnVmOiBidWZmZXIgdGhhdCBjb250YWlucyBuZXcgYXR0cmlidXRlIHZhbHVlCisgKiBAY291bnQ6IHNpemUgb2YgYnVmZmVyCiAgKi8KIHN0YXRpYyBzc2l6ZV90IG1lc2hfaWRfc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKQEAgLTk4MCw3ICsxMDMzLDEwIEBACiB9CiAKIC8qKgotICogQGJyaWVmIEdldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIHByb3RvY29sX2lkCisgKiBwcm90b2NvbF9pZF9nZXQgLSBHZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBwcm90b2NvbF9pZAorICogQGRldjogdGhlICZzdHJ1Y3QgZGV2aWNlCisgKiBAYXR0cjogZGV2aWNlIGF0dHJpYnV0ZXMKKyAqIEBidWY6IGJ1ZmZlciB3aGVyZSBkYXRhIHdpbGwgYmUgcmV0dXJuZWQKICAqLwogc3RhdGljIHNzaXplX3QgcHJvdG9jb2xfaWRfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQpAQCAtOTk3LDcgKzEwNTMsMTEgQEAKIH0KIAogLyoqCi0gKiBAYnJpZWYgU2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgcHJvdG9jb2xfaWQKKyAqIHByb3RvY29sX2lkX3NldCAtIFNldCBmdW5jdGlvbiBmb3Igc3lzZnMgYXR0cmlidXRlIHByb3RvY29sX2lkCisgKiBAZGV2OiB0aGUgJnN0cnVjdCBkZXZpY2UKKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlcworICogQGJ1ZjogYnVmZmVyIHRoYXQgY29udGFpbnMgbmV3IGF0dHJpYnV0ZSB2YWx1ZQorICogQGNvdW50OiBzaXplIG9mIGJ1ZmZlcgogICovCiBzdGF0aWMgc3NpemVfdCBwcm90b2NvbF9pZF9zZXQoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCkBAIC0xMDM0LDcgKzEwOTQsMTAgQEAKIH0KIAogLyoqCi0gKiBAYnJpZWYgR2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgbWV0cmljX2lkCisgKiBtZXRyaWNfaWRfZ2V0IC0gR2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgbWV0cmljX2lkCisgKiBAZGV2OiB0aGUgJnN0cnVjdCBkZXZpY2UKKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlcworICogQGJ1ZjogYnVmZmVyIHdoZXJlIGRhdGEgd2lsbCBiZSByZXR1cm5lZAogICovCiBzdGF0aWMgc3NpemVfdCBtZXRyaWNfaWRfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKQEAgLTEwNTEsNyArMTExNCwxMSBAQAogfQogCiAvKioKLSAqIEBicmllZiBTZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBtZXRyaWNfaWQKKyAqIG1ldHJpY19pZF9zZXQgLSBTZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBtZXRyaWNfaWQKKyAqIEBkZXY6IHRoZSAmc3RydWN0IGRldmljZQorICogQGF0dHI6IGRldmljZSBhdHRyaWJ1dGVzCisgKiBAYnVmOiBidWZmZXIgdGhhdCBjb250YWlucyBuZXcgYXR0cmlidXRlIHZhbHVlCisgKiBAY291bnQ6IHNpemUgb2YgYnVmZmVyCiAgKi8KIHN0YXRpYyBzc2l6ZV90IG1ldHJpY19pZF9zZXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCkBAIC0xMDg4LDcgKzExNTUsMTAgQEAKIH0KIAogLyoqCi0gKiBAYnJpZWYgR2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgY2FwYWJpbGl0eQorICogY2FwYWJpbGl0eV9nZXQgLSBHZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBjYXBhYmlsaXR5CisgKiBAZGV2OiB0aGUgJnN0cnVjdCBkZXZpY2UKKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlcworICogQGJ1ZjogYnVmZmVyIHdoZXJlIGRhdGEgd2lsbCBiZSByZXR1cm5lZAogICovCiBzdGF0aWMgc3NpemVfdCBjYXBhYmlsaXR5X2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCkBAIC0xMTA1LDcgKzExNzUsMTEgQEAKIH0KIAogLyoqCi0gKiBAYnJpZWYgU2V0IGZ1bmN0aW9uIGZvciBzeXNmcyBhdHRyaWJ1dGUgY2FwYWJpbGl0eQorICogY2FwYWJpbGl0eV9zZXQgLSBTZXQgZnVuY3Rpb24gZm9yIHN5c2ZzIGF0dHJpYnV0ZSBjYXBhYmlsaXR5CisgKiBAZGV2OiB0aGUgJnN0cnVjdCBkZXZpY2UKKyAqIEBhdHRyOiBkZXZpY2UgYXR0cmlidXRlcworICogQGJ1ZjogYnVmZmVyIHRoYXQgY29udGFpbnMgbmV3IGF0dHJpYnV0ZSB2YWx1ZQorICogQGNvdW50OiBzaXplIG9mIGJ1ZmZlcgogICovCiBzdGF0aWMgc3NpemVfdCBjYXBhYmlsaXR5X3NldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tZXNoLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tZXNoLmgKaW5kZXggYWZiMmU4ZC4uZWU5NWM3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWVzaC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21lc2guaApAQCAtMSw2ICsxLDYgQEAKLS8qKgotICAqIENvbnRhaW5zIGFsbCBkZWZpbml0aW9ucyBuZWVkZWQgZm9yIHRoZSBMaWJlcnRhcycgTUVTSCBpbXBsZW1lbnRhdGlvbi4KLSAgKi8KKy8qCisgKiBDb250YWlucyBhbGwgZGVmaW5pdGlvbnMgbmVlZGVkIGZvciB0aGUgTGliZXJ0YXMnIE1FU0ggaW1wbGVtZW50YXRpb24uCisgKi8KICNpZm5kZWYgX0xCU19NRVNIX0hfCiAjZGVmaW5lIF9MQlNfTUVTSF9IXwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvcnguYwppbmRleCBhMmIxZGYyLi5mZGIwNDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3J4LmMKQEAgLTEsNiArMSw5IEBACi0vKioKLSAgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGhhbmRsaW5nIG9mIFJYIGluIHdsYW4gZHJpdmVyLgotICAqLworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaGFuZGxpbmcgb2YgUlggaW4gd2xhbiBkcml2ZXIuCisgKi8KKworI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTQwLDEyICs0MywxMiBAQAogCXN0cnVjdCBza19idWZmICpza2IpOwogCiAvKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgcmVjZWl2ZWQgcGFja2V0IGFuZCBmb3J3YXJkcyBpdAotICogIHRvIGtlcm5lbC91cHBlciBsYXllcgorICogbGJzX3Byb2Nlc3NfcnhlZF9wYWNrZXQgLSBwcm9jZXNzZXMgcmVjZWl2ZWQgcGFja2V0IGFuZCBmb3J3YXJkcyBpdAorICogdG8ga2VybmVsL3VwcGVyIGxheWVyCiAgKgotICogIEBwYXJhbQlwcml2CUEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUKLSAqICBAcGFyYW0Jc2tiCQlBIHBvaW50ZXIgdG8gc2tiIHdoaWNoIGluY2x1ZGVzIHRoZSByZWNlaXZlZCBwYWNrZXQKLSAqICBAcmV0dXJuCTAgb3IgLTEKKyAqIEBwcml2OglBIHBvaW50ZXIgdG8gJnN0cnVjdCBsYnNfcHJpdmF0ZQorICogQHNrYjoJQSBwb2ludGVyIHRvIHNrYiB3aGljaCBpbmNsdWRlcyB0aGUgcmVjZWl2ZWQgcGFja2V0CisgKiByZXR1cm5zOgkwIG9yIC0xCiAgKi8KIGludCBsYnNfcHJvY2Vzc19yeGVkX3BhY2tldChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC0xNTYsMTEgKzE1OSwxMSBAQAogRVhQT1JUX1NZTUJPTF9HUEwobGJzX3Byb2Nlc3NfcnhlZF9wYWNrZXQpOwogCiAvKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBUeC9SeCByYXRlcyBmcm9tIHRoZSBNYXJ2ZWxsIFdMQU4gZm9ybWF0Ci0gKiAgKHNlZSBUYWJsZSAyIGluIFNlY3Rpb24gMy4xKSB0byBJRUVFODAyMTFfUkFESU9UQVBfUkFURSB1bml0cyAoNTAwIEtiL3MpCisgKiBjb252ZXJ0X212X3JhdGVfdG9fcmFkaW90YXAgLSBjb252ZXJ0cyBUeC9SeCByYXRlcyBmcm9tIE1hcnZlbGwgV0xBTiBmb3JtYXQKKyAqIChzZWUgVGFibGUgMiBpbiBTZWN0aW9uIDMuMSkgdG8gSUVFRTgwMjExX1JBRElPVEFQX1JBVEUgdW5pdHMgKDUwMCBLYi9zKQogICoKLSAqICBAcGFyYW0JcmF0ZQlJbnB1dCByYXRlCi0gKiAgQHJldHVybglPdXRwdXQgUmF0ZSAoMCBpZiBpbnZhbGlkKQorICogQHJhdGU6CUlucHV0IHJhdGUKKyAqIHJldHVybnM6CU91dHB1dCBSYXRlICgwIGlmIGludmFsaWQpCiAgKi8KIHN0YXRpYyB1OCBjb252ZXJ0X212X3JhdGVfdG9fcmFkaW90YXAodTggcmF0ZSkKIHsKQEAgLTE5MSwxNyArMTk0LDE3IEBACiAJY2FzZSAxMjoJCS8qICA1NCBNYnBzICovCiAJCXJldHVybiAxMDg7CiAJfQotCWxic19wcl9hbGVydCgiSW52YWxpZCBNYXJ2ZWxsIFdMQU4gcmF0ZSAlaVxuIiwgcmF0ZSk7CisJcHJfYWxlcnQoIkludmFsaWQgTWFydmVsbCBXTEFOIHJhdGUgJWlcbiIsIHJhdGUpOwogCXJldHVybiAwOwogfQogCiAvKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgYSByZWNlaXZlZCA4MDIuMTEgcGFja2V0IGFuZCBmb3J3YXJkcyBpdAotICogIHRvIGtlcm5lbC91cHBlciBsYXllcgorICogcHJvY2Vzc19yeGVkXzgwMl8xMV9wYWNrZXQgLSBwcm9jZXNzZXMgYSByZWNlaXZlZCA4MDIuMTEgcGFja2V0IGFuZCBmb3J3YXJkcworICogaXQgdG8ga2VybmVsL3VwcGVyIGxheWVyCiAgKgotICogIEBwYXJhbQlwcml2CUEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUKLSAqICBAcGFyYW0Jc2tiCQlBIHBvaW50ZXIgdG8gc2tiIHdoaWNoIGluY2x1ZGVzIHRoZSByZWNlaXZlZCBwYWNrZXQKLSAqICBAcmV0dXJuCTAgb3IgLTEKKyAqIEBwcml2OglBIHBvaW50ZXIgdG8gJnN0cnVjdCBsYnNfcHJpdmF0ZQorICogQHNrYjoJQSBwb2ludGVyIHRvIHNrYiB3aGljaCBpbmNsdWRlcyB0aGUgcmVjZWl2ZWQgcGFja2V0CisgKiByZXR1cm5zOgkwIG9yIC0xCiAgKi8KIHN0YXRpYyBpbnQgcHJvY2Vzc19yeGVkXzgwMl8xMV9wYWNrZXQoc3RydWN0IGxic19wcml2YXRlICpwcml2LAogCXN0cnVjdCBza19idWZmICpza2IpCkBAIC0yNDgsNyArMjUxLDcgQEAKIAkvKiBhZGQgc3BhY2UgZm9yIHRoZSBuZXcgcmFkaW8gaGVhZGVyICovCiAJaWYgKChza2JfaGVhZHJvb20oc2tiKSA8IHNpemVvZihzdHJ1Y3QgcnhfcmFkaW90YXBfaGRyKSkgJiYKIAkgICAgcHNrYl9leHBhbmRfaGVhZChza2IsIHNpemVvZihzdHJ1Y3QgcnhfcmFkaW90YXBfaGRyKSwgMCwgR0ZQX0FUT01JQykpIHsKLQkJbGJzX3ByX2FsZXJ0KCIlczogY291bGRuJ3QgcHNrYl9leHBhbmRfaGVhZFxuIiwgX19mdW5jX18pOworCQluZXRkZXZfYWxlcnQoZGV2LCAiJXM6IGNvdWxkbid0IHBza2JfZXhwYW5kX2hlYWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0ID0gLUVOT01FTTsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZG9uZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eC5jCmluZGV4IDgwMDBjYTYuLmJiYjk1ZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYwpAQCAtMSw2ICsxLDYgQEAKLS8qKgotICAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaGFuZGxpbmcgb2YgVFggaW4gd2xhbiBkcml2ZXIuCi0gICovCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBoYW5kbGluZyBvZiBUWCBpbiB3bGFuIGRyaXZlci4KKyAqLwogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTEzLDExICsxMywxMSBAQAogI2luY2x1ZGUgImRldi5oIgogCiAvKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBUeC9SeCByYXRlcyBmcm9tIElFRUU4MDIxMV9SQURJT1RBUF9SQVRFCi0gKiAgdW5pdHMgKDUwMCBLYi9zKSBpbnRvIE1hcnZlbGwgV0xBTiBmb3JtYXQgKHNlZSBUYWJsZSA4IGluIFNlY3Rpb24gMy4yLjEpCisgKiBjb252ZXJ0X3JhZGlvdGFwX3JhdGVfdG9fbXYgLSBjb252ZXJ0cyBUeC9SeCByYXRlcyBmcm9tIElFRUU4MDIxMV9SQURJT1RBUF9SQVRFCisgKiB1bml0cyAoNTAwIEtiL3MpIGludG8gTWFydmVsbCBXTEFOIGZvcm1hdCAoc2VlIFRhYmxlIDggaW4gU2VjdGlvbiAzLjIuMSkKICAqCi0gKiAgQHBhcmFtIHJhdGUgICAgSW5wdXQgcmF0ZQotICogIEByZXR1cm4gICAgICBPdXRwdXQgUmF0ZSAoMCBpZiBpbnZhbGlkKQorICogQHJhdGU6CUlucHV0IHJhdGUKKyAqIHJldHVybnM6CU91dHB1dCBSYXRlICgwIGlmIGludmFsaWQpCiAgKi8KIHN0YXRpYyB1MzIgY29udmVydF9yYWRpb3RhcF9yYXRlX3RvX212KHU4IHJhdGUpCiB7CkBAIC01MSwxMiArNTEsMTIgQEAKIH0KIAogLyoqCi0gKiAgQGJyaWVmIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoZSBjb25kaXRpb25zIGFuZCBzZW5kcyBwYWNrZXQgdG8gSUYKLSAqICBsYXllciBpZiBldmVyeXRoaW5nIGlzIG9rLgorICogbGJzX2hhcmRfc3RhcnRfeG1pdCAtIGNoZWNrcyB0aGUgY29uZGl0aW9ucyBhbmQgc2VuZHMgcGFja2V0IHRvIElGCisgKiBsYXllciBpZiBldmVyeXRoaW5nIGlzIG9rCiAgKgotICogIEBwYXJhbSBwcml2ICAgIEEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCi0gKiAgQHBhcmFtIHNrYiAgICAgQSBwb2ludGVyIHRvIHNrYiB3aGljaCBpbmNsdWRlcyBUWCBwYWNrZXQKLSAqICBAcmV0dXJuIAkgICAwIG9yIC0xCisgKiBAc2tiOglBIHBvaW50ZXIgdG8gc2tiIHdoaWNoIGluY2x1ZGVzIFRYIHBhY2tldAorICogQGRldjoJQSBwb2ludGVyIHRvIHRoZSAmc3RydWN0IG5ldF9kZXZpY2UKKyAqIHJldHVybnM6CTAgb3IgLTEKICAqLwogbmV0ZGV2X3R4X3QgbGJzX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMTY4LDEzICsxNjgsMTMgQEAKIH0KIAogLyoqCi0gKiAgQGJyaWVmIFRoaXMgZnVuY3Rpb24gc2VuZHMgdG8gdGhlIGhvc3QgdGhlIGxhc3QgdHJhbnNtaXR0ZWQgcGFja2V0LAotICogIGZpbGxpbmcgdGhlIHJhZGlvdGFwIGhlYWRlcnMgd2l0aCB0cmFuc21pc3Npb24gaW5mb3JtYXRpb24uCisgKiBsYnNfc2VuZF90eF9mZWVkYmFjayAtIHNlbmRzIHRvIHRoZSBob3N0IHRoZSBsYXN0IHRyYW5zbWl0dGVkIHBhY2tldCwKKyAqIGZpbGxpbmcgdGhlIHJhZGlvdGFwIGhlYWRlcnMgd2l0aCB0cmFuc21pc3Npb24gaW5mb3JtYXRpb24uCiAgKgotICogIEBwYXJhbSBwcml2ICAgICBBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQotICogIEBwYXJhbSBzdGF0dXMgICBBIDMyIGJpdCB2YWx1ZSBjb250YWluaW5nIHRyYW5zbWlzc2lvbiBzdGF0dXMuCisgKiBAcHJpdjoJQSBwb2ludGVyIHRvICZzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCisgKiBAdHJ5X2NvdW50OglBIDMyLWJpdCB2YWx1ZSBjb250YWluaW5nIHRyYW5zbWlzc2lvbiByZXRyeSBzdGF0dXMuCiAgKgotICogIEByZXR1cm5zIHZvaWQKKyAqIHJldHVybnM6CXZvaWQKICAqLwogdm9pZCBsYnNfc2VuZF90eF9mZWVkYmFjayhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHUzMiB0cnlfY291bnQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eXBlcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHlwZXMuaAppbmRleCA0NjJmYmI0Li5jZjFkOWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eXBlcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R5cGVzLmgKQEAgLTEsNiArMSw2IEBACi0vKioKLSAgKiBUaGlzIGhlYWRlciBmaWxlIGNvbnRhaW5zIGRlZmluaXRpb24gZm9yIGdsb2JhbCB0eXBlcwotICAqLworLyoKKyAqIFRoaXMgaGVhZGVyIGZpbGUgY29udGFpbnMgZGVmaW5pdGlvbiBmb3IgZ2xvYmFsIHR5cGVzCisgKi8KICNpZm5kZWYgX0xCU19UWVBFU19IXwogI2RlZmluZSBfTEJTX1RZUEVTX0hfCiAKQEAgLTU0LDcgKzU0LDcgQEAKIAlzdHJ1Y3QgaWVlZV9pZV9kc19wYXJhbV9zZXQgZHM7CiB9IF9fcGFja2VkOwogCi0vKiogVExWICB0eXBlIElEIGRlZmluaXRpb24gKi8KKy8qIFRMViAgdHlwZSBJRCBkZWZpbml0aW9uICovCiAjZGVmaW5lIFBST1BSSUVUQVJZX1RMVl9CQVNFX0lECQkweDAxMDAKIAogLyogVGVybWluYXRpbmcgVExWIHR5cGUgKi8KQEAgLTk2LDcgKzk2LDcgQEAKICNkZWZpbmUgVExWX1RZUEVfTUVTSF9JRCAgICAgICAgICAgIChQUk9QUklFVEFSWV9UTFZfQkFTRV9JRCArIDM3KQogI2RlZmluZSBUTFZfVFlQRV9PTERfTUVTSF9JRCAgICAgICAgKFBST1BSSUVUQVJZX1RMVl9CQVNFX0lEICsgMjkxKQogCi0vKiogVExWIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzKi8KKy8qIFRMViByZWxhdGVkIGRhdGEgc3RydWN0dXJlcyAqLwogc3RydWN0IG1ydmxfaWVfaGVhZGVyIHsKIAlfX2xlMTYgdHlwZTsKIAlfX2xlMTYgbGVuOwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJX19sZTE2IGF1dGg7CiB9IF9fcGFja2VkOwogCi0vKiogIExvY2FsIFBvd2VyIGNhcGFiaWxpdHkgKi8KKy8qICBMb2NhbCBQb3dlciBjYXBhYmlsaXR5ICovCiBzdHJ1Y3QgbXJ2bF9pZV9wb3dlcl9jYXBhYmlsaXR5IHsKIAlzdHJ1Y3QgbXJ2bF9pZV9oZWFkZXIgaGVhZGVyOwogCXM4IG1pbnBvd2VyOwpAQCAtMjM1LDkgKzIzNSwxMSBAQAogCXN0cnVjdCBsZWRfYmh2IGxlZGJodlsxXTsKIH0gX19wYWNrZWQ7CiAKLS8qIE1lYW50IHRvIGJlIHBhY2tlZCBhcyB0aGUgdmFsdWUgbWVtYmVyIG9mIGEgc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQuCisvKgorICogTWVhbnQgdG8gYmUgcGFja2VkIGFzIHRoZSB2YWx1ZSBtZW1iZXIgb2YgYSBzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudC4KICAqIE5vdGUgdGhhdCB0aGUgbGVuIG1lbWJlciBvZiB0aGUgaWVlZTgwMjExX2luZm9fZWxlbWVudCB2YXJpZXMgZGVwZW5kaW5nIG9uCi0gKiB0aGUgbWVzaF9pZF9sZW4gKi8KKyAqIHRoZSBtZXNoX2lkX2xlbgorICovCiBzdHJ1Y3QgbXJ2bF9tZXNoaWVfdmFsIHsKIAl1aW50OF90IG91aVszXTsKIAl1aW50OF90IHR5cGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYwppbmRleCBmNGY0MjU3Li45ZDRhNDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMKQEAgLTE1MTUsMTkgKzE1MTUsMTAgQEAKIAlpZiAoaHdzaW1fbW9uID09IE5VTEwpCiAJCWdvdG8gZmFpbGVkOwogCi0JcnRubF9sb2NrKCk7Ci0KLQllcnIgPSBkZXZfYWxsb2NfbmFtZShod3NpbV9tb24sIGh3c2ltX21vbi0+bmFtZSk7CisJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGh3c2ltX21vbik7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZmFpbGVkX21vbjsKIAotCi0JZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKGh3c2ltX21vbik7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gZmFpbGVkX21vbjsKLQotCXJ0bmxfdW5sb2NrKCk7Ci0KIAlyZXR1cm4gMDsKIAogZmFpbGVkX21vbjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvMTFuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4LzExbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNjE4M2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4LzExbi5jCkBAIC0wLDAgKzEsNzQ0IEBACisvKgorICogTWFydmVsbCBXaXJlbGVzcyBMQU4gZGV2aWNlIGRyaXZlcjogODAyLjExbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQKKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKyAqLworCisjaW5jbHVkZSAiZGVjbC5oIgorI2luY2x1ZGUgImlvY3RsLmgiCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgImZ3LmgiCisjaW5jbHVkZSAibWFpbi5oIgorI2luY2x1ZGUgIndtbS5oIgorI2luY2x1ZGUgIjExbi5oIgorCisvKgorICogRmlsbHMgSFQgY2FwYWJpbGl0eSBpbmZvcm1hdGlvbiBmaWVsZCwgQU1QRFUgUGFyYW1ldGVycyBmaWVsZCwgSFQgZXh0ZW5kZWQKKyAqIGNhcGFiaWxpdHkgZmllbGQsIGFuZCBzdXBwb3J0ZWQgTUNTIHNldCBmaWVsZHMuCisgKgorICogSFQgY2FwYWJpbGl0eSBpbmZvcm1hdGlvbiBmaWVsZCwgQU1QRFUgUGFyYW1ldGVycyBmaWVsZCwgc3VwcG9ydGVkIE1DUyBzZXQKKyAqIGZpZWxkcyBhcmUgcmV0cmlldmVkIGZyb20gY2ZnODAyMTEgc3RhY2sKKyAqCisgKiBSRCByZXNwb25kZXIgYml0IHRvIHNldCB0byBjbGVhciBpbiB0aGUgZXh0ZW5kZWQgY2FwYWJpbGl0eSBoZWFkZXIuCisgKi8KK3ZvaWQKK213aWZpZXhfZmlsbF9jYXBfaW5mbyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCByYWRpb190eXBlLAorCQkgICAgICBzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGNhcCAqaHRfY2FwKQoreworCXVpbnQxNl90IGh0X2V4dF9jYXAgPSBsZTE2X3RvX2NwdShodF9jYXAtPmh0X2NhcC5leHRlbmRlZF9odF9jYXBfaW5mbyk7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQgPQorCQkJCQlwcml2LT53ZGV2LT53aXBoeS0+YmFuZHNbcmFkaW9fdHlwZV07CisKKwlodF9jYXAtPmh0X2NhcC5hbXBkdV9wYXJhbXNfaW5mbyA9CisJCShzYmFuZC0+aHRfY2FwLmFtcGR1X2ZhY3RvciAmCisJCSBJRUVFODAyMTFfSFRfQU1QRFVfUEFSTV9GQUNUT1IpfAorCQkoKHNiYW5kLT5odF9jYXAuYW1wZHVfZGVuc2l0eSA8PAorCQkgSUVFRTgwMjExX0hUX0FNUERVX1BBUk1fREVOU0lUWV9TSElGVCkgJgorCQkgSUVFRTgwMjExX0hUX0FNUERVX1BBUk1fREVOU0lUWSk7CisKKwltZW1jcHkoKHU4ICopICZodF9jYXAtPmh0X2NhcC5tY3MsICZzYmFuZC0+aHRfY2FwLm1jcywKKwkJCQkJCXNpemVvZihzYmFuZC0+aHRfY2FwLm1jcykpOworCisJaWYgKHByaXYtPmJzc19tb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKKwkJCShzYmFuZC0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwKSkKKwkJLyogU2V0IE1DUzMyIGZvciBpbmZyYSBtb2RlIG9yIGFkLWhvYyBtb2RlIHdpdGggNDBNSHogc3VwcG9ydCAqLworCQlTRVRIVF9NQ1MzMihodF9jYXAtPmh0X2NhcC5tY3MucnhfbWFzayk7CisKKwkvKiBDbGVhciBSRCByZXNwb25kZXIgYml0ICovCisJaHRfZXh0X2NhcCAmPSB+SUVFRTgwMjExX0hUX0VYVF9DQVBfUkRfUkVTUE9OREVSOworCisJaHRfY2FwLT5odF9jYXAuY2FwX2luZm8gPSBjcHVfdG9fbGUxNihzYmFuZC0+aHRfY2FwLmNhcCk7CisJaHRfY2FwLT5odF9jYXAuZXh0ZW5kZWRfaHRfY2FwX2luZm8gPSBjcHVfdG9fbGUxNihodF9leHRfY2FwKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcG9pbnRlciB0byBhbiBlbnRyeSBpbiBCQSBTdHJlYW0KKyAqIHRhYmxlIHdoaWNoIG1hdGNoZXMgdGhlIHJlcXVlc3RlZCBCQSBzdGF0dXMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbXdpZmlleF90eF9iYV9zdHJlYW1fdGJsICoKK213aWZpZXhfMTFuX2dldF90eF9iYV9zdHJlYW1fc3RhdHVzKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJICBlbnVtIG13aWZpZXhfYmFfc3RhdHVzIGJhX3N0YXR1cykKK3sKKwlzdHJ1Y3QgbXdpZmlleF90eF9iYV9zdHJlYW1fdGJsICp0eF9iYV90c3JfdGJsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfYmFfc3RyZWFtX3RibF9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0eF9iYV90c3JfdGJsLCAmcHJpdi0+dHhfYmFfc3RyZWFtX3RibF9wdHIsIGxpc3QpIHsKKwkJaWYgKHR4X2JhX3Rzcl90YmwtPmJhX3N0YXR1cyA9PSBiYV9zdGF0dXMpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X2JhX3N0cmVhbV90YmxfbG9jaywKKwkJCQkJICAgICAgIGZsYWdzKTsKKwkJCXJldHVybiB0eF9iYV90c3JfdGJsOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X2JhX3N0cmVhbV90YmxfbG9jaywgZmxhZ3MpOworCXJldHVybiBOVUxMOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjb21tYW5kIHJlc3BvbnNlIG9mIGRlbGV0ZSBhIGJsb2NrCisgKiBhY2sgcmVxdWVzdC4KKyAqCisgKiBUaGUgZnVuY3Rpb24gY2hlY2tzIHRoZSByZXNwb25zZSBzdWNjZXNzIHN0YXR1cyBhbmQgdGFrZXMgYWN0aW9uCisgKiBhY2NvcmRpbmdseSAoc2VuZCBhbiBhZGQgQkEgcmVxdWVzdCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIG9yIHJlY3JlYXRlCisgKiB0aGUgZGVsZXRlZCBzdHJlYW0gaW4gY2FzZSBvZiBmYWlsdXJlLCBpZiB0aGUgYWRkIEJBIHdhcyBhbHNvCisgKiBpbml0aWF0ZWQgYnkgdXMpLgorICovCitpbnQgbXdpZmlleF9yZXRfMTFuX2RlbGJhKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwKQoreworCWludCB0aWQ7CisJc3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCAqdHhfYmFfdGJsOworCXN0cnVjdCBob3N0X2NtZF9kc18xMW5fZGVsYmEgKmRlbF9iYSA9CisJCShzdHJ1Y3QgaG9zdF9jbWRfZHNfMTFuX2RlbGJhICopICZyZXNwLT5wYXJhbXMuZGVsX2JhOworCXVpbnQxNl90IGRlbF9iYV9wYXJhbV9zZXQgPSBsZTE2X3RvX2NwdShkZWxfYmEtPmRlbF9iYV9wYXJhbV9zZXQpOworCisJdGlkID0gZGVsX2JhX3BhcmFtX3NldCA+PiBERUxCQV9USURfUE9TOworCWlmIChkZWxfYmEtPmRlbF9yZXN1bHQgPT0gQkFfUkVTVUxUX1NVQ0NFU1MpIHsKKwkJbXdpZmlleF8xMW5fZGVsZXRlX2JhX3N0cmVhbV90YmwocHJpdiwgdGlkLAorCQkJCWRlbF9iYS0+cGVlcl9tYWNfYWRkciwgVFlQRV9ERUxCQV9TRU5ULAorCQkJCUlOSVRJQVRPUl9CSVQoZGVsX2JhX3BhcmFtX3NldCkpOworCisJCXR4X2JhX3RibCA9IG13aWZpZXhfMTFuX2dldF90eF9iYV9zdHJlYW1fc3RhdHVzKHByaXYsCisJCQkJCQlCQV9TVFJFQU1fU0VUVVBfSU5QUk9HUkVTUyk7CisJCWlmICh0eF9iYV90YmwpCisJCQltd2lmaWV4X3NlbmRfYWRkYmEocHJpdiwgdHhfYmFfdGJsLT50aWQsCisJCQkJCSAgIHR4X2JhX3RibC0+cmEpOworCX0gZWxzZSB7IC8qCisJCSAgKiBJbiBjYXNlIG9mIGZhaWx1cmUsIHJlY3JlYXRlIHRoZSBkZWxldGVkIHN0cmVhbSBpbiBjYXNlCisJCSAgKiB3ZSBpbml0aWF0ZWQgdGhlIEFEREJBCisJCSAgKi8KKwkJaWYgKElOSVRJQVRPUl9CSVQoZGVsX2JhX3BhcmFtX3NldCkpIHsKKwkJCW13aWZpZXhfMTFuX2NyZWF0ZV90eF9iYV9zdHJlYW1fdGJsKHByaXYsCisJCQkJCWRlbF9iYS0+cGVlcl9tYWNfYWRkciwgdGlkLAorCQkJCQlCQV9TVFJFQU1fU0VUVVBfSU5QUk9HUkVTUyk7CisKKwkJCXR4X2JhX3RibCA9IG13aWZpZXhfMTFuX2dldF90eF9iYV9zdHJlYW1fc3RhdHVzKHByaXYsCisJCQkJCUJBX1NUUkVBTV9TRVRVUF9JTlBST0dSRVNTKTsKKwkJCWlmICh0eF9iYV90YmwpCisJCQkJbXdpZmlleF8xMW5fZGVsZXRlX2JhX3N0cmVhbV90YmwocHJpdiwKKwkJCQkJCXR4X2JhX3RibC0+dGlkLCB0eF9iYV90YmwtPnJhLAorCQkJCQkJVFlQRV9ERUxCQV9TRU5ULCB0cnVlKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjb21tYW5kIHJlc3BvbnNlIG9mIGFkZCBhIGJsb2NrCisgKiBhY2sgcmVxdWVzdC4KKyAqCisgKiBIYW5kbGluZyBpbmNsdWRlcyBjaGFuZ2luZyB0aGUgaGVhZGVyIGZpZWxkcyB0byBDUFUgZm9ybWF0cywgY2hlY2tpbmcKKyAqIHRoZSByZXNwb25zZSBzdWNjZXNzIHN0YXR1cyBhbmQgdGFraW5nIGFjdGlvbnMgYWNjb3JkaW5nbHkgKGRlbGV0ZSB0aGUKKyAqIEJBIHN0cmVhbSB0YWJsZSBpbiBjYXNlIG9mIGZhaWx1cmUpLgorICovCitpbnQgbXdpZmlleF9yZXRfMTFuX2FkZGJhX3JlcShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3ApCit7CisJaW50IHRpZDsKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfMTFuX2FkZGJhX3JzcCAqYWRkX2JhX3JzcCA9CisJCShzdHJ1Y3QgaG9zdF9jbWRfZHNfMTFuX2FkZGJhX3JzcCAqKSAmcmVzcC0+cGFyYW1zLmFkZF9iYV9yc3A7CisJc3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCAqdHhfYmFfdGJsOworCisJYWRkX2JhX3JzcC0+c3NuID0gY3B1X3RvX2xlMTYoKGxlMTZfdG9fY3B1KGFkZF9iYV9yc3AtPnNzbikpCisJCQkmIFNTTl9NQVNLKTsKKworCXRpZCA9IChsZTE2X3RvX2NwdShhZGRfYmFfcnNwLT5ibG9ja19hY2tfcGFyYW1fc2V0KQorCQkmIElFRUU4MDIxMV9BRERCQV9QQVJBTV9USURfTUFTSykKKwkJPj4gQkxPQ0tBQ0tQQVJBTV9USURfUE9TOworCWlmIChsZTE2X3RvX2NwdShhZGRfYmFfcnNwLT5zdGF0dXNfY29kZSkgPT0gQkFfUkVTVUxUX1NVQ0NFU1MpIHsKKwkJdHhfYmFfdGJsID0gbXdpZmlleF8xMW5fZ2V0X3R4X2JhX3N0cmVhbV90YmwocHJpdiwgdGlkLAorCQkJCQkJYWRkX2JhX3JzcC0+cGVlcl9tYWNfYWRkcik7CisJCWlmICh0eF9iYV90YmwpIHsKKwkJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogQkEgc3RyZWFtIGNvbXBsZXRlXG4iKTsKKwkJCXR4X2JhX3RibC0+YmFfc3RhdHVzID0gQkFfU1RSRUFNX1NFVFVQX0NPTVBMRVRFOworCQl9IGVsc2UgeworCQkJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsICJCQSBzdHJlYW0gbm90IGNyZWF0ZWRcbiIpOworCQl9CisJfSBlbHNlIHsKKwkJbXdpZmlleF8xMW5fZGVsZXRlX2JhX3N0cmVhbV90YmwocHJpdiwgdGlkLAorCQkJCQkJYWRkX2JhX3JzcC0+cGVlcl9tYWNfYWRkciwKKwkJCQkJCVRZUEVfREVMQkFfU0VOVCwgdHJ1ZSk7CisJCWlmIChhZGRfYmFfcnNwLT5hZGRfcnNwX3Jlc3VsdCAhPSBCQV9SRVNVTFRfVElNRU9VVCkKKwkJCXByaXYtPmFnZ3JfcHJpb190YmxbdGlkXS5hbXBkdV9hcCA9CisJCQkJQkFfU1RSRUFNX05PVF9BTExPV0VEOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjb21tYW5kIHJlc3BvbnNlIG9mIDExbiBjb25maWd1cmF0aW9uIHJlcXVlc3QuCisgKgorICogSGFuZGxpbmcgaW5jbHVkZXMgY2hhbmdpbmcgdGhlIGhlYWRlciBmaWVsZHMgaW50byBDUFUgZm9ybWF0LgorICovCitpbnQgbXdpZmlleF9yZXRfMTFuX2NmZyhzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqcmVzcCwgdm9pZCAqZGF0YV9idWYpCit7CisJc3RydWN0IG13aWZpZXhfZHNfMTFuX3R4X2NmZyAqdHhfY2ZnOworCXN0cnVjdCBob3N0X2NtZF9kc18xMW5fY2ZnICpodGNmZyA9ICZyZXNwLT5wYXJhbXMuaHRjZmc7CisKKwlpZiAoZGF0YV9idWYpIHsKKwkJdHhfY2ZnID0gKHN0cnVjdCBtd2lmaWV4X2RzXzExbl90eF9jZmcgKikgZGF0YV9idWY7CisJCXR4X2NmZy0+dHhfaHRjYXAgPSBsZTE2X3RvX2NwdShodGNmZy0+aHRfdHhfY2FwKTsKKwkJdHhfY2ZnLT50eF9odGluZm8gPSBsZTE2X3RvX2NwdShodGNmZy0+aHRfdHhfaW5mbyk7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBjb21tYW5kIG9mIHJlY29uZmlndXJlIFR4IGJ1ZmZlci4KKyAqCisgKiBQcmVwYXJhdGlvbiBpbmNsdWRlcyAtCisgKiAgICAgIC0gU2V0dGluZyBjb21tYW5kIElELCBhY3Rpb24gYW5kIHByb3BlciBzaXplCisgKiAgICAgIC0gU2V0dGluZyBUeCBidWZmZXIgc2l6ZSAoZm9yIFNFVCBvbmx5KQorICogICAgICAtIEVuc3VyaW5nIGNvcnJlY3QgZW5kaWFuLW5lc3MKKyAqLworaW50IG13aWZpZXhfY21kX3JlY2ZnX3R4X2J1ZihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLCBpbnQgY21kX2FjdGlvbiwKKwkJCSAgICAgdm9pZCAqZGF0YV9idWYpCit7CisJc3RydWN0IGhvc3RfY21kX2RzX3R4YnVmX2NmZyAqdHhfYnVmID0gJmNtZC0+cGFyYW1zLnR4X2J1ZjsKKwl1MTYgYWN0aW9uID0gKHUxNikgY21kX2FjdGlvbjsKKwl1MTYgYnVmX3NpemUgPSAqKCh1MTYgKikgZGF0YV9idWYpOworCisJY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoSG9zdENtZF9DTURfUkVDT05GSUdVUkVfVFhfQlVGRik7CisJY21kLT5zaXplID0KKwkJY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc190eGJ1Zl9jZmcpICsgU19EU19HRU4pOworCXR4X2J1Zi0+YWN0aW9uID0gY3B1X3RvX2xlMTYoYWN0aW9uKTsKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgSG9zdENtZF9BQ1RfR0VOX1NFVDoKKwkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJjbWQ6IHNldCB0eF9idWY9JWRcbiIsIGJ1Zl9zaXplKTsKKwkJdHhfYnVmLT5idWZmX3NpemUgPSBjcHVfdG9fbGUxNihidWZfc2l6ZSk7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9BQ1RfR0VOX0dFVDoKKwlkZWZhdWx0OgorCQl0eF9idWYtPmJ1ZmZfc2l6ZSA9IDA7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgY29tbWFuZCBvZiBBTVNEVSBhZ2dyZWdhdGlvbiBjb250cm9sLgorICoKKyAqIFByZXBhcmF0aW9uIGluY2x1ZGVzIC0KKyAqICAgICAgLSBTZXR0aW5nIGNvbW1hbmQgSUQsIGFjdGlvbiBhbmQgcHJvcGVyIHNpemUKKyAqICAgICAgLSBTZXR0aW5nIEFNU0RVIGNvbnRyb2wgcGFyYW1ldGVycyAoZm9yIFNFVCBvbmx5KQorICogICAgICAtIEVuc3VyaW5nIGNvcnJlY3QgZW5kaWFuLW5lc3MKKyAqLworaW50IG13aWZpZXhfY21kX2Ftc2R1X2FnZ3JfY3RybChzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLAorCQkJCWludCBjbWRfYWN0aW9uLCB2b2lkICpkYXRhX2J1ZikKK3sKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfYW1zZHVfYWdncl9jdHJsICphbXNkdV9jdHJsID0KKwkJJmNtZC0+cGFyYW1zLmFtc2R1X2FnZ3JfY3RybDsKKwl1MTYgYWN0aW9uID0gKHUxNikgY21kX2FjdGlvbjsKKwlzdHJ1Y3QgbXdpZmlleF9kc18xMW5fYW1zZHVfYWdncl9jdHJsICphYV9jdHJsID0KKwkJKHN0cnVjdCBtd2lmaWV4X2RzXzExbl9hbXNkdV9hZ2dyX2N0cmwgKikgZGF0YV9idWY7CisKKwljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihIb3N0Q21kX0NNRF9BTVNEVV9BR0dSX0NUUkwpOworCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZHNfYW1zZHVfYWdncl9jdHJsKQorCQkJCSsgU19EU19HRU4pOworCWFtc2R1X2N0cmwtPmFjdGlvbiA9IGNwdV90b19sZTE2KGFjdGlvbik7CisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIEhvc3RDbWRfQUNUX0dFTl9TRVQ6CisJCWFtc2R1X2N0cmwtPmVuYWJsZSA9IGNwdV90b19sZTE2KGFhX2N0cmwtPmVuYWJsZSk7CisJCWFtc2R1X2N0cmwtPmN1cnJfYnVmX3NpemUgPSAwOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQUNUX0dFTl9HRVQ6CisJZGVmYXVsdDoKKwkJYW1zZHVfY3RybC0+Y3Vycl9idWZfc2l6ZSA9IDA7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgY29tbWFuZCByZXNwb25zZSBvZiBBTVNEVSBhZ2dyZWdhdGlvbgorICogY29udHJvbCByZXF1ZXN0LgorICoKKyAqIEhhbmRsaW5nIGluY2x1ZGVzIGNoYW5naW5nIHRoZSBoZWFkZXIgZmllbGRzIGludG8gQ1BVIGZvcm1hdC4KKyAqLworaW50IG13aWZpZXhfcmV0X2Ftc2R1X2FnZ3JfY3RybChzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqcmVzcCwKKwkJCQl2b2lkICpkYXRhX2J1ZikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9kc18xMW5fYW1zZHVfYWdncl9jdHJsICphbXNkdV9hZ2dyX2N0cmw7CisJc3RydWN0IGhvc3RfY21kX2RzX2Ftc2R1X2FnZ3JfY3RybCAqYW1zZHVfY3RybCA9CisJCSZyZXNwLT5wYXJhbXMuYW1zZHVfYWdncl9jdHJsOworCisJaWYgKGRhdGFfYnVmKSB7CisJCWFtc2R1X2FnZ3JfY3RybCA9CisJCQkoc3RydWN0IG13aWZpZXhfZHNfMTFuX2Ftc2R1X2FnZ3JfY3RybCAqKSBkYXRhX2J1ZjsKKwkJYW1zZHVfYWdncl9jdHJsLT5lbmFibGUgPSBsZTE2X3RvX2NwdShhbXNkdV9jdHJsLT5lbmFibGUpOworCQlhbXNkdV9hZ2dyX2N0cmwtPmN1cnJfYnVmX3NpemUgPQorCQkJbGUxNl90b19jcHUoYW1zZHVfY3RybC0+Y3Vycl9idWZfc2l6ZSk7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyAxMW4gY29uZmlndXJhdGlvbiBjb21tYW5kLgorICoKKyAqIFByZXBhcmF0aW9uIGluY2x1ZGVzIC0KKyAqICAgICAgLSBTZXR0aW5nIGNvbW1hbmQgSUQsIGFjdGlvbiBhbmQgcHJvcGVyIHNpemUKKyAqICAgICAgLSBTZXR0aW5nIEhUIFR4IGNhcGFiaWxpdHkgYW5kIEhUIFR4IGluZm9ybWF0aW9uIGZpZWxkcworICogICAgICAtIEVuc3VyaW5nIGNvcnJlY3QgZW5kaWFuLW5lc3MKKyAqLworaW50IG13aWZpZXhfY21kXzExbl9jZmcoc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwKKwkJCXUxNiBjbWRfYWN0aW9uLCB2b2lkICpkYXRhX2J1ZikKK3sKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfMTFuX2NmZyAqaHRjZmcgPSAmY21kLT5wYXJhbXMuaHRjZmc7CisJc3RydWN0IG13aWZpZXhfZHNfMTFuX3R4X2NmZyAqdHhjZmcgPQorCQkoc3RydWN0IG13aWZpZXhfZHNfMTFuX3R4X2NmZyAqKSBkYXRhX2J1ZjsKKworCWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KEhvc3RDbWRfQ01EXzExTl9DRkcpOworCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZHNfMTFuX2NmZykgKyBTX0RTX0dFTik7CisJaHRjZmctPmFjdGlvbiA9IGNwdV90b19sZTE2KGNtZF9hY3Rpb24pOworCWh0Y2ZnLT5odF90eF9jYXAgPSBjcHVfdG9fbGUxNih0eGNmZy0+dHhfaHRjYXApOworCWh0Y2ZnLT5odF90eF9pbmZvID0gY3B1X3RvX2xlMTYodHhjZmctPnR4X2h0aW5mbyk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGFwcGVuZHMgYW4gMTFuIFRMViB0byBhIGJ1ZmZlci4KKyAqCisgKiBCdWZmZXIgYWxsb2NhdGlvbiBpcyByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGluZworICogZnVuY3Rpb24uIE5vIHNpemUgdmFsaWRhdGlvbiBpcyBtYWRlIGhlcmUuCisgKgorICogVGhlIGZ1bmN0aW9uIGZpbGxzIHVwIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMsIGlmIGFwcGxpY2FibGUgLQorICogICAgICAtIEhUIGNhcGFiaWxpdHkgSUUKKyAqICAgICAgLSBIVCBpbmZvcm1hdGlvbiBJRSAod2l0aCBjaGFubmVsIGxpc3QpCisgKiAgICAgIC0gMjAvNDAgQlNTIENvZXhpc3RlbmNlIElFCisgKiAgICAgIC0gSFQgRXh0ZW5kZWQgQ2FwYWJpbGl0aWVzIElFCisgKi8KK2ludAorbXdpZmlleF9jbWRfYXBwZW5kXzExbl90bHYoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgIHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjLAorCQkJICAgdTggKipidWZmZXIpCit7CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRjYXAgKmh0X2NhcDsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19odGluZm8gKmh0X2luZm87CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfY2hhbl9saXN0X3BhcmFtX3NldCAqY2hhbl9saXN0OworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzXzIwNDBic3NjbyAqYnNzX2NvXzIwNDA7CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfZXh0Y2FwICpleHRfY2FwOworCWludCByZXRfbGVuID0gMDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwl1OCByYWRpb190eXBlOworCisJaWYgKCFidWZmZXIgfHwgISpidWZmZXIpCisJCXJldHVybiByZXRfbGVuOworCisJcmFkaW9fdHlwZSA9IG13aWZpZXhfYmFuZF90b19yYWRpb190eXBlKCh1OCkgYnNzX2Rlc2MtPmJzc19iYW5kKTsKKwlzYmFuZCA9IHByaXYtPndkZXYtPndpcGh5LT5iYW5kc1tyYWRpb190eXBlXTsKKworCWlmIChic3NfZGVzYy0+YmNuX2h0X2NhcCkgeworCQlodF9jYXAgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRjYXAgKikgKmJ1ZmZlcjsKKwkJbWVtc2V0KGh0X2NhcCwgMCwgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2h0Y2FwKSk7CisJCWh0X2NhcC0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihXTEFOX0VJRF9IVF9DQVBBQklMSVRZKTsKKwkJaHRfY2FwLT5oZWFkZXIubGVuID0KKwkJCQljcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApKTsKKwkJbWVtY3B5KCh1OCAqKSBodF9jYXAgKyBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyKSwKKwkJICAgICAgICh1OCAqKSBic3NfZGVzYy0+YmNuX2h0X2NhcCArCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKSwKKwkJICAgICAgIGxlMTZfdG9fY3B1KGh0X2NhcC0+aGVhZGVyLmxlbikpOworCisJCW13aWZpZXhfZmlsbF9jYXBfaW5mbyhwcml2LCByYWRpb190eXBlLCBodF9jYXApOworCisJCSpidWZmZXIgKz0gc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2h0Y2FwKTsKKwkJcmV0X2xlbiArPSBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRjYXApOworCX0KKworCWlmIChic3NfZGVzYy0+YmNuX2h0X2luZm8pIHsKKwkJaWYgKHByaXYtPmJzc19tb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCQlodF9pbmZvID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2h0aW5mbyAqKSAqYnVmZmVyOworCQkJbWVtc2V0KGh0X2luZm8sIDAsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2h0aW5mbykpOworCQkJaHRfaW5mby0+aGVhZGVyLnR5cGUgPQorCQkJCQljcHVfdG9fbGUxNihXTEFOX0VJRF9IVF9JTkZPUk1BVElPTik7CisJCQlodF9pbmZvLT5oZWFkZXIubGVuID0KKwkJCQljcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9pbmZvKSk7CisKKwkJCW1lbWNweSgodTggKikgaHRfaW5mbyArCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciksCisJCQkgICAgICAgKHU4ICopIGJzc19kZXNjLT5iY25faHRfaW5mbyArCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpZWVlX3R5cGVzX2hlYWRlciksCisJCQkgICAgICAgbGUxNl90b19jcHUoaHRfaW5mby0+aGVhZGVyLmxlbikpOworCisJCQlpZiAoIShzYmFuZC0+aHRfY2FwLmNhcCAmCisJCQkJCUlFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwKSkKKwkJCQlodF9pbmZvLT5odF9pbmZvLmh0X3BhcmFtICY9CisJCQkJCX4oSUVFRTgwMjExX0hUX1BBUkFNX0NIQU5fV0lEVEhfQU5ZIHwKKwkJCQkJSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfT0ZGU0VUKTsKKworCQkJKmJ1ZmZlciArPSBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRpbmZvKTsKKwkJCXJldF9sZW4gKz0gc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2h0aW5mbyk7CisJCX0KKworCQljaGFuX2xpc3QgPQorCQkJKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2NoYW5fbGlzdF9wYXJhbV9zZXQgKikgKmJ1ZmZlcjsKKwkJbWVtc2V0KGNoYW5fbGlzdCwgMCwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19jaGFuX2xpc3RfcGFyYW1fc2V0KSk7CisJCWNoYW5fbGlzdC0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihUTFZfVFlQRV9DSEFOTElTVCk7CisJCWNoYW5fbGlzdC0+aGVhZGVyLmxlbiA9IGNwdV90b19sZTE2KAorCQkJc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2NoYW5fbGlzdF9wYXJhbV9zZXQpIC0KKwkJCXNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIpKTsKKwkJY2hhbl9saXN0LT5jaGFuX3NjYW5fcGFyYW1bMF0uY2hhbl9udW1iZXIgPQorCQkJYnNzX2Rlc2MtPmJjbl9odF9pbmZvLT5jb250cm9sX2NoYW47CisJCWNoYW5fbGlzdC0+Y2hhbl9zY2FuX3BhcmFtWzBdLnJhZGlvX3R5cGUgPQorCQkJbXdpZmlleF9iYW5kX3RvX3JhZGlvX3R5cGUoKHU4KSBic3NfZGVzYy0+YnNzX2JhbmQpOworCisJCWlmICgoc2JhbmQtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCkKKwkJCSYmIChic3NfZGVzYy0+YmNuX2h0X2luZm8tPmh0X3BhcmFtICYKKwkJCQlJRUVFODAyMTFfSFRfUEFSQU1fQ0hBTl9XSURUSF9BTlkpKQorCQkJU0VUX1NFQ09OREFSWUNIQU4oY2hhbl9saXN0LT5jaGFuX3NjYW5fcGFyYW1bMF0uCisJCQkJCSAgcmFkaW9fdHlwZSwKKwkJCQkJICAoYnNzX2Rlc2MtPmJjbl9odF9pbmZvLT5odF9wYXJhbSAmCisJCQkJCSAgSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfT0ZGU0VUKSk7CisKKwkJKmJ1ZmZlciArPSBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfY2hhbl9saXN0X3BhcmFtX3NldCk7CisJCXJldF9sZW4gKz0gc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2NoYW5fbGlzdF9wYXJhbV9zZXQpOworCX0KKworCWlmIChic3NfZGVzYy0+YmNuX2Jzc19jb18yMDQwKSB7CisJCWJzc19jb18yMDQwID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzXzIwNDBic3NjbyAqKSAqYnVmZmVyOworCQltZW1zZXQoYnNzX2NvXzIwNDAsIDAsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfMjA0MGJzc2NvKSk7CisJCWJzc19jb18yMDQwLT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFdMQU5fRUlEX0JTU19DT0VYXzIwNDApOworCQlic3NfY29fMjA0MC0+aGVhZGVyLmxlbiA9CisJCSAgICAgICBjcHVfdG9fbGUxNihzaXplb2YoYnNzX2NvXzIwNDAtPmJzc19jb18yMDQwKSk7CisKKwkJbWVtY3B5KCh1OCAqKSBic3NfY29fMjA0MCArCisJCSAgICAgICBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyKSwKKwkJICAgICAgICh1OCAqKSBic3NfZGVzYy0+YmNuX2Jzc19jb18yMDQwICsKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpLAorCQkgICAgICAgbGUxNl90b19jcHUoYnNzX2NvXzIwNDAtPmhlYWRlci5sZW4pKTsKKworCQkqYnVmZmVyICs9IHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc18yMDQwYnNzY28pOworCQlyZXRfbGVuICs9IHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc18yMDQwYnNzY28pOworCX0KKworCWlmIChic3NfZGVzYy0+YmNuX2V4dF9jYXApIHsKKwkJZXh0X2NhcCA9IChzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19leHRjYXAgKikgKmJ1ZmZlcjsKKwkJbWVtc2V0KGV4dF9jYXAsIDAsIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19leHRjYXApKTsKKwkJZXh0X2NhcC0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihXTEFOX0VJRF9FWFRfQ0FQQUJJTElUWSk7CisJCWV4dF9jYXAtPmhlYWRlci5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoZXh0X2NhcC0+ZXh0X2NhcCkpOworCisJCW1lbWNweSgodTggKikgZXh0X2NhcCArCisJCSAgICAgICBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyKSwKKwkJICAgICAgICh1OCAqKSBic3NfZGVzYy0+YmNuX2V4dF9jYXAgKworCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpZWVlX3R5cGVzX2hlYWRlciksCisJCSAgICAgICBsZTE2X3RvX2NwdShleHRfY2FwLT5oZWFkZXIubGVuKSk7CisKKwkJKmJ1ZmZlciArPSBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfZXh0Y2FwKTsKKwkJcmV0X2xlbiArPSBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfZXh0Y2FwKTsKKwl9CisKKwlyZXR1cm4gcmV0X2xlbjsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmVjb25maWd1cmVzIHRoZSBUeCBidWZmZXIgc2l6ZSBpbiBmaXJtd2FyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGEgZmlybXdhcmUgY29tbWFuZCBhbmQgaXNzdWVzIGl0LCBpZgorICogdGhlIGN1cnJlbnQgVHggYnVmZmVyIHNpemUgaXMgZGlmZmVyZW50IGZyb20gdGhlIG9uZSByZXF1ZXN0ZWQuCisgKiBNYXhpbXVtIGNvbmZpZ3VyYWJsZSBUeCBidWZmZXIgc2l6ZSBpcyBsaW1pdGVkIGJ5IHRoZSBIVCBjYXBhYmlsaXR5CisgKiBmaWVsZCB2YWx1ZS4KKyAqLwordm9pZAorbXdpZmlleF9jZmdfdHhfYnVmKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCSAgIHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjKQoreworCXUxNiBtYXhfYW1zZHUgPSBNV0lGSUVYX1RYX0RBVEFfQlVGX1NJWkVfMks7CisJdTE2IHR4X2J1ZiwgY3Vycl90eF9idWZfc2l6ZSA9IDA7CisKKwlpZiAoYnNzX2Rlc2MtPmJjbl9odF9jYXApIHsKKwkJaWYgKGxlMTZfdG9fY3B1KGJzc19kZXNjLT5iY25faHRfY2FwLT5jYXBfaW5mbykgJgorCQkJCUlFRUU4MDIxMV9IVF9DQVBfTUFYX0FNU0RVKQorCQkJbWF4X2Ftc2R1ID0gTVdJRklFWF9UWF9EQVRBX0JVRl9TSVpFXzhLOworCQllbHNlCisJCQltYXhfYW1zZHUgPSBNV0lGSUVYX1RYX0RBVEFfQlVGX1NJWkVfNEs7CisJfQorCisJdHhfYnVmID0gbWluKHByaXYtPmFkYXB0ZXItPm1heF90eF9idWZfc2l6ZSwgbWF4X2Ftc2R1KTsKKworCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogbWF4X2Ftc2R1PSVkLCBtYXhfdHhfYnVmPSVkXG4iLAorCQkJbWF4X2Ftc2R1LCBwcml2LT5hZGFwdGVyLT5tYXhfdHhfYnVmX3NpemUpOworCisJaWYgKHByaXYtPmFkYXB0ZXItPmN1cnJfdHhfYnVmX3NpemUgPD0gTVdJRklFWF9UWF9EQVRBX0JVRl9TSVpFXzJLKQorCQljdXJyX3R4X2J1Zl9zaXplID0gTVdJRklFWF9UWF9EQVRBX0JVRl9TSVpFXzJLOworCWVsc2UgaWYgKHByaXYtPmFkYXB0ZXItPmN1cnJfdHhfYnVmX3NpemUgPD0gTVdJRklFWF9UWF9EQVRBX0JVRl9TSVpFXzRLKQorCQljdXJyX3R4X2J1Zl9zaXplID0gTVdJRklFWF9UWF9EQVRBX0JVRl9TSVpFXzRLOworCWVsc2UgaWYgKHByaXYtPmFkYXB0ZXItPmN1cnJfdHhfYnVmX3NpemUgPD0gTVdJRklFWF9UWF9EQVRBX0JVRl9TSVpFXzhLKQorCQljdXJyX3R4X2J1Zl9zaXplID0gTVdJRklFWF9UWF9EQVRBX0JVRl9TSVpFXzhLOworCWlmIChjdXJyX3R4X2J1Zl9zaXplICE9IHR4X2J1ZikKKwkJbXdpZmlleF9zZW5kX2NtZF9hc3luYyhwcml2LCBIb3N0Q21kX0NNRF9SRUNPTkZJR1VSRV9UWF9CVUZGLAorCQkJCSAgICAgICBIb3N0Q21kX0FDVF9HRU5fU0VULCAwLCAmdHhfYnVmKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBnaXZlbiBwb2ludGVyIGlzIHZhbGlkIGVudHJ5IG9mCisgKiBUeCBCQSBTdHJlYW0gdGFibGUuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9pc190eF9iYV9zdHJlYW1fcHRyX3ZhbGlkKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJc3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCAqdHhfdGJsX3B0cikKK3sKKwlzdHJ1Y3QgbXdpZmlleF90eF9iYV9zdHJlYW1fdGJsICp0eF9iYV90c3JfdGJsOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0eF9iYV90c3JfdGJsLCAmcHJpdi0+dHhfYmFfc3RyZWFtX3RibF9wdHIsIGxpc3QpIHsKKwkJaWYgKHR4X2JhX3Rzcl90YmwgPT0gdHhfdGJsX3B0cikKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZGVsZXRlcyB0aGUgZ2l2ZW4gZW50cnkgaW4gVHggQkEgU3RyZWFtIHRhYmxlLgorICoKKyAqIFRoZSBmdW5jdGlvbiBhbHNvIHBlcmZvcm1zIGEgdmFsaWRpdHkgY2hlY2sgb24gdGhlIHN1cHBsaWVkCisgKiBwb2ludGVyIGJlZm9yZSB0cnlpbmcgdG8gZGVsZXRlLgorICovCit2b2lkIG13aWZpZXhfMTFuX2RlbGV0ZV90eF9iYV9zdHJlYW1fdGJsX2VudHJ5KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJc3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCAqdHhfYmFfdHNyX3RibCkKK3sKKwlpZiAoIXR4X2JhX3Rzcl90YmwgJiYKKwkJCW13aWZpZXhfaXNfdHhfYmFfc3RyZWFtX3B0cl92YWxpZChwcml2LCB0eF9iYV90c3JfdGJsKSkKKwkJcmV0dXJuOworCisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiB0eF9iYV90c3JfdGJsICVwXG4iLCB0eF9iYV90c3JfdGJsKTsKKworCWxpc3RfZGVsKCZ0eF9iYV90c3JfdGJsLT5saXN0KTsKKworCWtmcmVlKHR4X2JhX3Rzcl90YmwpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBkZWxldGVzIGFsbCB0aGUgZW50cmllcyBpbiBUeCBCQSBTdHJlYW0gdGFibGUuCisgKi8KK3ZvaWQgbXdpZmlleF8xMW5fZGVsZXRlX2FsbF90eF9iYV9zdHJlYW1fdGJsKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpCit7CisJaW50IGk7CisJc3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCAqZGVsX3RibF9wdHIsICp0bXBfbm9kZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4X2JhX3N0cmVhbV90YmxfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZWxfdGJsX3B0ciwgdG1wX25vZGUsCisJCQkJICZwcml2LT50eF9iYV9zdHJlYW1fdGJsX3B0ciwgbGlzdCkKKwkJbXdpZmlleF8xMW5fZGVsZXRlX3R4X2JhX3N0cmVhbV90YmxfZW50cnkocHJpdiwgZGVsX3RibF9wdHIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X2JhX3N0cmVhbV90YmxfbG9jaywgZmxhZ3MpOworCisJSU5JVF9MSVNUX0hFQUQoJnByaXYtPnR4X2JhX3N0cmVhbV90YmxfcHRyKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNX1RJRDsgKytpKQorCQlwcml2LT5hZ2dyX3ByaW9fdGJsW2ldLmFtcGR1X2FwID0KKwkJCXByaXYtPmFnZ3JfcHJpb190YmxbaV0uYW1wZHVfdXNlcjsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcG9pbnRlciB0byBhbiBlbnRyeSBpbiBCQSBTdHJlYW0KKyAqIHRhYmxlIHdoaWNoIG1hdGNoZXMgdGhlIGdpdmVuIFJBL1RJRCBwYWlyLgorICovCitzdHJ1Y3QgbXdpZmlleF90eF9iYV9zdHJlYW1fdGJsICoKK213aWZpZXhfMTFuX2dldF90eF9iYV9zdHJlYW1fdGJsKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJIGludCB0aWQsIHU4ICpyYSkKK3sKKwlzdHJ1Y3QgbXdpZmlleF90eF9iYV9zdHJlYW1fdGJsICp0eF9iYV90c3JfdGJsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfYmFfc3RyZWFtX3RibF9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0eF9iYV90c3JfdGJsLCAmcHJpdi0+dHhfYmFfc3RyZWFtX3RibF9wdHIsIGxpc3QpIHsKKwkJaWYgKCghbWVtY21wKHR4X2JhX3Rzcl90YmwtPnJhLCByYSwgRVRIX0FMRU4pKQorCQkgICAgJiYgKHR4X2JhX3Rzcl90YmwtPnRpZCA9PSB0aWQpKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9iYV9zdHJlYW1fdGJsX2xvY2ssCisJCQkJCSAgICAgICBmbGFncyk7CisJCQlyZXR1cm4gdHhfYmFfdHNyX3RibDsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9iYV9zdHJlYW1fdGJsX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbiBlbnRyeSBpbiBUeCBCQSBzdHJlYW0gdGFibGUgZm9yIHRoZQorICogZ2l2ZW4gUkEvVElEIHBhaXIuCisgKi8KK3ZvaWQgbXdpZmlleF8xMW5fY3JlYXRlX3R4X2JhX3N0cmVhbV90Ymwoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkJIHU4ICpyYSwgaW50IHRpZCwKKwkJCQkJIGVudW0gbXdpZmlleF9iYV9zdGF0dXMgYmFfc3RhdHVzKQoreworCXN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKm5ld19ub2RlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIW13aWZpZXhfMTFuX2dldF90eF9iYV9zdHJlYW1fdGJsKHByaXYsIHRpZCwgcmEpKSB7CisJCW5ld19ub2RlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG13aWZpZXhfdHhfYmFfc3RyZWFtX3RibCksCisJCQkJICAgR0ZQX0FUT01JQyk7CisJCWlmICghbmV3X25vZGUpIHsKKwkJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJCSIlczogZmFpbGVkIHRvIGFsbG9jIG5ld19ub2RlXG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm47CisJCX0KKworCQlJTklUX0xJU1RfSEVBRCgmbmV3X25vZGUtPmxpc3QpOworCisJCW5ld19ub2RlLT50aWQgPSB0aWQ7CisJCW5ld19ub2RlLT5iYV9zdGF0dXMgPSBiYV9zdGF0dXM7CisJCW1lbWNweShuZXdfbm9kZS0+cmEsIHJhLCBFVEhfQUxFTik7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4X2JhX3N0cmVhbV90YmxfbG9jaywgZmxhZ3MpOworCQlsaXN0X2FkZF90YWlsKCZuZXdfbm9kZS0+bGlzdCwgJnByaXYtPnR4X2JhX3N0cmVhbV90YmxfcHRyKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfYmFfc3RyZWFtX3RibF9sb2NrLCBmbGFncyk7CisJfQorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBzZW5kcyBhbiBhZGQgQkEgcmVxdWVzdCB0byB0aGUgZ2l2ZW4gVElEL1JBIHBhaXIuCisgKi8KK2ludCBtd2lmaWV4X3NlbmRfYWRkYmEoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgaW50IHRpZCwgdTggKnBlZXJfbWFjKQoreworCXN0cnVjdCBob3N0X2NtZF9kc18xMW5fYWRkYmFfcmVxIGFkZF9iYV9yZXE7CisJc3RhdGljIHU4IGRpYWxvZ190b2s7CisJaW50IHJldDsKKworCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiY21kOiAlczogdGlkICVkXG4iLCBfX2Z1bmNfXywgdGlkKTsKKworCWFkZF9iYV9yZXEuYmxvY2tfYWNrX3BhcmFtX3NldCA9IGNwdV90b19sZTE2KAorCQkodTE2KSAoKHRpZCA8PCBCTE9DS0FDS1BBUkFNX1RJRF9QT1MpIHwKKwkJCSAocHJpdi0+YWRkX2JhX3BhcmFtLgorCQkJICB0eF93aW5fc2l6ZSA8PCBCTE9DS0FDS1BBUkFNX1dJTlNJWkVfUE9TKSB8CisJCQkgSU1NRURJQVRFX0JMT0NLX0FDSykpOworCWFkZF9iYV9yZXEuYmxvY2tfYWNrX3RtbyA9IGNwdV90b19sZTE2KCh1MTYpcHJpdi0+YWRkX2JhX3BhcmFtLnRpbWVvdXQpOworCisJKytkaWFsb2dfdG9rOworCisJaWYgKGRpYWxvZ190b2sgPT0gMCkKKwkJZGlhbG9nX3RvayA9IDE7CisKKwlhZGRfYmFfcmVxLmRpYWxvZ190b2tlbiA9IGRpYWxvZ190b2s7CisJbWVtY3B5KCZhZGRfYmFfcmVxLnBlZXJfbWFjX2FkZHIsIHBlZXJfbWFjLCBFVEhfQUxFTik7CisKKwkvKiBXZSBkb24ndCB3YWl0IGZvciB0aGUgcmVzcG9uc2Ugb2YgdGhpcyBjb21tYW5kICovCisJcmV0ID0gbXdpZmlleF9zZW5kX2NtZF9hc3luYyhwcml2LCBIb3N0Q21kX0NNRF8xMU5fQUREQkFfUkVRLAorCQkJCSAgICAgMCwgMCwgJmFkZF9iYV9yZXEpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgYSBkZWxldGUgQkEgcmVxdWVzdCB0byB0aGUgZ2l2ZW4gVElEL1JBIHBhaXIuCisgKi8KK2ludCBtd2lmaWV4X3NlbmRfZGVsYmEoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgaW50IHRpZCwgdTggKnBlZXJfbWFjLAorCQkgICAgICAgaW50IGluaXRpYXRvcikKK3sKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfMTFuX2RlbGJhIGRlbGJhOworCWludCByZXQ7CisJdWludDE2X3QgZGVsX2JhX3BhcmFtX3NldDsKKworCW1lbXNldCgmZGVsYmEsIDAsIHNpemVvZihkZWxiYSkpOworCWRlbGJhLmRlbF9iYV9wYXJhbV9zZXQgPSBjcHVfdG9fbGUxNih0aWQgPDwgREVMQkFfVElEX1BPUyk7CisKKwlkZWxfYmFfcGFyYW1fc2V0ID0gbGUxNl90b19jcHUoZGVsYmEuZGVsX2JhX3BhcmFtX3NldCk7CisJaWYgKGluaXRpYXRvcikKKwkJZGVsX2JhX3BhcmFtX3NldCB8PSBJRUVFODAyMTFfREVMQkFfUEFSQU1fSU5JVElBVE9SX01BU0s7CisJZWxzZQorCQlkZWxfYmFfcGFyYW1fc2V0ICY9IH5JRUVFODAyMTFfREVMQkFfUEFSQU1fSU5JVElBVE9SX01BU0s7CisKKwltZW1jcHkoJmRlbGJhLnBlZXJfbWFjX2FkZHIsIHBlZXJfbWFjLCBFVEhfQUxFTik7CisKKwkvKiBXZSBkb24ndCB3YWl0IGZvciB0aGUgcmVzcG9uc2Ugb2YgdGhpcyBjb21tYW5kICovCisJcmV0ID0gbXdpZmlleF9zZW5kX2NtZF9hc3luYyhwcml2LCBIb3N0Q21kX0NNRF8xMU5fREVMQkEsCisJCQkJICAgICBIb3N0Q21kX0FDVF9HRU5fU0VULCAwLCAmZGVsYmEpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgY29tbWFuZCByZXNwb25zZSBvZiBhIGRlbGV0ZSBCQSByZXF1ZXN0LgorICovCit2b2lkIG13aWZpZXhfMTFuX2RlbGV0ZV9iYV9zdHJlYW0oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggKmRlbF9iYSkKK3sKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfMTFuX2RlbGJhICpjbWRfZGVsX2JhID0KKwkJKHN0cnVjdCBob3N0X2NtZF9kc18xMW5fZGVsYmEgKikgZGVsX2JhOworCXVpbnQxNl90IGRlbF9iYV9wYXJhbV9zZXQgPSBsZTE2X3RvX2NwdShjbWRfZGVsX2JhLT5kZWxfYmFfcGFyYW1fc2V0KTsKKwlpbnQgdGlkOworCisJdGlkID0gZGVsX2JhX3BhcmFtX3NldCA+PiBERUxCQV9USURfUE9TOworCisJbXdpZmlleF8xMW5fZGVsZXRlX2JhX3N0cmVhbV90YmwocHJpdiwgdGlkLCBjbWRfZGVsX2JhLT5wZWVyX21hY19hZGRyLAorCQkJCQkgVFlQRV9ERUxCQV9SRUNFSVZFLAorCQkJCQkgSU5JVElBVE9SX0JJVChkZWxfYmFfcGFyYW1fc2V0KSk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgUnggcmVvcmRlcmluZyB0YWJsZS4KKyAqLworaW50IG13aWZpZXhfZ2V0X3J4X3Jlb3JkZXJfdGJsKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgICAgc3RydWN0IG13aWZpZXhfZHNfcnhfcmVvcmRlcl90YmwgKmJ1ZikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgbXdpZmlleF9kc19yeF9yZW9yZGVyX3RibCAqcnhfcmVvX3RibCA9IGJ1ZjsKKwlzdHJ1Y3QgbXdpZmlleF9yeF9yZW9yZGVyX3RibCAqcnhfcmVvcmRlcl90YmxfcHRyOworCWludCBjb3VudCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeF9yZW9yZGVyX3RibF9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyeF9yZW9yZGVyX3RibF9wdHIsICZwcml2LT5yeF9yZW9yZGVyX3RibF9wdHIsCisJCQkgICAgbGlzdCkgeworCQlyeF9yZW9fdGJsLT50aWQgPSAodTE2KSByeF9yZW9yZGVyX3RibF9wdHItPnRpZDsKKwkJbWVtY3B5KHJ4X3Jlb190YmwtPnRhLCByeF9yZW9yZGVyX3RibF9wdHItPnRhLCBFVEhfQUxFTik7CisJCXJ4X3Jlb190YmwtPnN0YXJ0X3dpbiA9IHJ4X3Jlb3JkZXJfdGJsX3B0ci0+c3RhcnRfd2luOworCQlyeF9yZW9fdGJsLT53aW5fc2l6ZSA9IHJ4X3Jlb3JkZXJfdGJsX3B0ci0+d2luX3NpemU7CisJCWZvciAoaSA9IDA7IGkgPCByeF9yZW9yZGVyX3RibF9wdHItPndpbl9zaXplOyArK2kpIHsKKwkJCWlmIChyeF9yZW9yZGVyX3RibF9wdHItPnJ4X3Jlb3JkZXJfcHRyW2ldKQorCQkJCXJ4X3Jlb190YmwtPmJ1ZmZlcltpXSA9IHRydWU7CisJCQllbHNlCisJCQkJcnhfcmVvX3RibC0+YnVmZmVyW2ldID0gZmFsc2U7CisJCX0KKwkJcnhfcmVvX3RibCsrOworCQljb3VudCsrOworCisJCWlmIChjb3VudCA+PSBNV0lGSUVYX01BWF9SWF9CQVNUUkVBTV9TVVBQT1JURUQpCisJCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cnhfcmVvcmRlcl90YmxfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGNvdW50OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIFR4IEJBIHN0cmVhbSB0YWJsZS4KKyAqLworaW50IG13aWZpZXhfZ2V0X3R4X2JhX3N0cmVhbV90Ymwoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgc3RydWN0IG13aWZpZXhfZHNfdHhfYmFfc3RyZWFtX3RibCAqYnVmKQoreworCXN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKnR4X2JhX3Rzcl90Ymw7CisJc3RydWN0IG13aWZpZXhfZHNfdHhfYmFfc3RyZWFtX3RibCAqcnhfcmVvX3RibCA9IGJ1ZjsKKwlpbnQgY291bnQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfYmFfc3RyZWFtX3RibF9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0eF9iYV90c3JfdGJsLCAmcHJpdi0+dHhfYmFfc3RyZWFtX3RibF9wdHIsIGxpc3QpIHsKKwkJcnhfcmVvX3RibC0+dGlkID0gKHUxNikgdHhfYmFfdHNyX3RibC0+dGlkOworCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImRhdGE6ICVzIHRpZD0lZFxuIiwKKwkJCQkJCV9fZnVuY19fLCByeF9yZW9fdGJsLT50aWQpOworCQltZW1jcHkocnhfcmVvX3RibC0+cmEsIHR4X2JhX3Rzcl90YmwtPnJhLCBFVEhfQUxFTik7CisJCXJ4X3Jlb190YmwrKzsKKwkJY291bnQrKzsKKwkJaWYgKGNvdW50ID49IE1XSUZJRVhfTUFYX1RYX0JBU1RSRUFNX1NVUFBPUlRFRCkKKwkJCWJyZWFrOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9iYV9zdHJlYW1fdGJsX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBjb3VudDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvMTFuLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4LzExbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MzkwYTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4LzExbi5oCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogTWFydmVsbCBXaXJlbGVzcyBMQU4gZGV2aWNlIGRyaXZlcjogODAyLjExbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQKKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKyAqLworCisjaWZuZGVmIF9NV0lGSUVYXzExTl9IXworI2RlZmluZSBfTVdJRklFWF8xMU5fSF8KKworI2luY2x1ZGUgIjExbl9hZ2dyLmgiCisjaW5jbHVkZSAiMTFuX3J4cmVvcmRlci5oIgorI2luY2x1ZGUgIndtbS5oIgorCitpbnQgbXdpZmlleF9yZXRfMTFuX2RlbGJhKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwKTsKK2ludCBtd2lmaWV4X3JldF8xMW5fYWRkYmFfcmVxKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqcmVzcCk7CitpbnQgbXdpZmlleF9yZXRfMTFuX2NmZyhzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqcmVzcCwKKwkJCXZvaWQgKmRhdGFfYnVmKTsKK2ludCBtd2lmaWV4X2NtZF8xMW5fY2ZnKHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQsCisJCQl1MTYgY21kX2FjdGlvbiwgdm9pZCAqZGF0YV9idWYpOworCitpbnQgbXdpZmlleF9jbWRfYXBwZW5kXzExbl90bHYoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYywKKwkJCSAgICAgICB1OCAqKmJ1ZmZlcik7Cit2b2lkIG13aWZpZXhfY2ZnX3R4X2J1ZihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MpOwordm9pZCBtd2lmaWV4X2ZpbGxfY2FwX2luZm8oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqLCB1OCByYWRpb190eXBlLAorCQkJICAgc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRjYXAgKik7CitpbnQgbXdpZmlleF9zZXRfZ2V0XzExbl9odGNhcF9jZmcoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgIHUxNiBhY3Rpb24sIGludCAqaHRjYXBfY2ZnKTsKK3ZvaWQgbXdpZmlleF8xMW5fZGVsZXRlX3R4X2JhX3N0cmVhbV90YmxfZW50cnkoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkJICAgICBzdHJ1Y3QgbXdpZmlleF90eF9iYV9zdHJlYW1fdGJsCisJCQkJCSAgICAgKnR4X3RibCk7Cit2b2lkIG13aWZpZXhfMTFuX2RlbGV0ZV9hbGxfdHhfYmFfc3RyZWFtX3RibChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KTsKK3N0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKm13aWZpZXhfMTFuX2dldF90eF9iYV9zdHJlYW1fdGJsKHN0cnVjdAorCQkJCQkJCSAgICAgbXdpZmlleF9wcml2YXRlCisJCQkJCQkJICAgICAqcHJpdiwgaW50IHRpZCwKKwkJCQkJCQkgICAgIHU4ICpyYSk7Cit2b2lkIG13aWZpZXhfMTFuX2NyZWF0ZV90eF9iYV9zdHJlYW1fdGJsKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHU4ICpyYSwKKwkJCQkgICAgICAgaW50IHRpZCwKKwkJCQkgICAgICAgZW51bSBtd2lmaWV4X2JhX3N0YXR1cyBiYV9zdGF0dXMpOworaW50IG13aWZpZXhfc2VuZF9hZGRiYShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBpbnQgdGlkLCB1OCAqcGVlcl9tYWMpOworaW50IG13aWZpZXhfc2VuZF9kZWxiYShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBpbnQgdGlkLCB1OCAqcGVlcl9tYWMsCisJCSAgICAgICBpbnQgaW5pdGlhdG9yKTsKK3ZvaWQgbXdpZmlleF8xMW5fZGVsZXRlX2JhX3N0cmVhbShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqZGVsX2JhKTsKK2ludCBtd2lmaWV4X2dldF9yeF9yZW9yZGVyX3RibChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICAgc3RydWN0IG13aWZpZXhfZHNfcnhfcmVvcmRlcl90YmwgKmJ1Zik7CitpbnQgbXdpZmlleF9nZXRfdHhfYmFfc3RyZWFtX3RibChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICAgIHN0cnVjdCBtd2lmaWV4X2RzX3R4X2JhX3N0cmVhbV90YmwgKmJ1Zik7CitpbnQgbXdpZmlleF9yZXRfYW1zZHVfYWdncl9jdHJsKHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwLAorCQkJCXZvaWQgKmRhdGFfYnVmKTsKK2ludCBtd2lmaWV4X2NtZF9yZWNmZ190eF9idWYoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwKKwkJCSAgICAgaW50IGNtZF9hY3Rpb24sIHZvaWQgKmRhdGFfYnVmKTsKK2ludCBtd2lmaWV4X2NtZF9hbXNkdV9hZ2dyX2N0cmwoc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwKKwkJCQlpbnQgY21kX2FjdGlvbiwgdm9pZCAqZGF0YV9idWYpOworCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciBBTVBEVSBpcyBhbGxvd2VkIG9yIG5vdCBmb3IgYSBwYXJ0aWN1bGFyIFRJRC4KKyAqLworc3RhdGljIGlubGluZSB1OAorbXdpZmlleF9pc19hbXBkdV9hbGxvd2VkKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIGludCB0aWQpCit7CisJcmV0dXJuICgocHJpdi0+YWdncl9wcmlvX3RibFt0aWRdLmFtcGR1X2FwICE9IEJBX1NUUkVBTV9OT1RfQUxMT1dFRCkKKwkJPyB0cnVlIDogZmFsc2UpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciBBTVNEVSBpcyBhbGxvd2VkIG9yIG5vdCBmb3IgYSBwYXJ0aWN1bGFyIFRJRC4KKyAqLworc3RhdGljIGlubGluZSB1OAorbXdpZmlleF9pc19hbXNkdV9hbGxvd2VkKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIGludCB0aWQpCit7CisJcmV0dXJuICgoKHByaXYtPmFnZ3JfcHJpb190YmxbdGlkXS5hbXNkdSAhPSBCQV9TVFJFQU1fTk9UX0FMTE9XRUQpCisJCQkmJiAoKHByaXYtPmlzX2RhdGFfcmF0ZV9hdXRvKQorCQkJfHwgISgocHJpdi0+Yml0bWFwX3JhdGVzWzJdKSAmIDB4MDMpKSkKKwkJPyB0cnVlIDogZmFsc2UpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciBhIHNwYWNlIGlzIGF2YWlsYWJsZSBmb3IgbmV3IEJBIHN0cmVhbSBvciBub3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTggbXdpZmlleF9zcGFjZV9hdmFpbF9mb3JfbmV3X2JhX3N0cmVhbSgKKwkJCQkJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2OworCXU4IGk7CisJdTMyIGJhX3N0cmVhbV9udW0gPSAwOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPnByaXZfbnVtOyBpKyspIHsKKwkJcHJpdiA9IGFkYXB0ZXItPnByaXZbaV07CisJCWlmIChwcml2KQorCQkJYmFfc3RyZWFtX251bSArPSBtd2lmaWV4X3dtbV9saXN0X2xlbigKKwkJCQkJCShzdHJ1Y3QgbGlzdF9oZWFkICopCisJCQkJCQkmcHJpdi0+dHhfYmFfc3RyZWFtX3RibF9wdHIpOworCX0KKworCXJldHVybiAoKGJhX3N0cmVhbV9udW0gPAorCQkgTVdJRklFWF9NQVhfVFhfQkFTVFJFQU1fU1VQUE9SVEVEKSA/IHRydWUgOiBmYWxzZSk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZSBjb3JyZWN0IFR4IEJBIHN0cmVhbSB0byBkZWxldGUuCisgKgorICogVXBvbiBzdWNjZXNzZnVsbHkgbG9jYXRpbmcsIGJvdGggdGhlIFRJRCBhbmQgdGhlIFJBIGFyZSByZXR1cm5lZC4KKyAqLworc3RhdGljIGlubGluZSB1OAorbXdpZmlleF9maW5kX3N0cmVhbV90b19kZWxldGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgaW50IHB0cl90aWQsCisJCQkgICAgICBpbnQgKnB0aWQsIHU4ICpyYSkKK3sKKwlpbnQgdGlkOworCXU4IHJldCA9IGZhbHNlOworCXN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKnR4X3RibDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJdGlkID0gcHJpdi0+YWdncl9wcmlvX3RibFtwdHJfdGlkXS5hbXBkdV91c2VyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4X2JhX3N0cmVhbV90YmxfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkodHhfdGJsLCAmcHJpdi0+dHhfYmFfc3RyZWFtX3RibF9wdHIsIGxpc3QpIHsKKwkJaWYgKHRpZCA+IHByaXYtPmFnZ3JfcHJpb190YmxbdHhfdGJsLT50aWRdLmFtcGR1X3VzZXIpIHsKKwkJCXRpZCA9IHByaXYtPmFnZ3JfcHJpb190YmxbdHhfdGJsLT50aWRdLmFtcGR1X3VzZXI7CisJCQkqcHRpZCA9IHR4X3RibC0+dGlkOworCQkJbWVtY3B5KHJhLCB0eF90YmwtPnJhLCBFVEhfQUxFTik7CisJCQlyZXQgPSB0cnVlOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X2JhX3N0cmVhbV90YmxfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHdoZXRoZXIgQkEgc3RyZWFtIGlzIHNldCB1cCBvciBub3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Cittd2lmaWV4X2lzX2JhX3N0cmVhbV9zZXR1cChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICBzdHJ1Y3QgbXdpZmlleF9yYV9saXN0X3RibCAqcHRyLCBpbnQgdGlkKQoreworCXN0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgKnR4X3RibDsKKworCXR4X3RibCA9IG13aWZpZXhfMTFuX2dldF90eF9iYV9zdHJlYW1fdGJsKHByaXYsIHRpZCwgcHRyLT5yYSk7CisJaWYgKHR4X3RibCAmJiBJU19CQVNUUkVBTV9TRVRVUCh0eF90YmwpKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKyNlbmRpZiAvKiAhX01XSUZJRVhfMTFOX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4LzExbl9hZ2dyLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4LzExbl9hZ2dyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNkNWUwOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvMTFuX2FnZ3IuYwpAQCAtMCwwICsxLDI5OCBAQAorLyoKKyAqIE1hcnZlbGwgV2lyZWxlc3MgTEFOIGRldmljZSBkcml2ZXI6IDgwMi4xMW4gQWdncmVnYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwKKyAqIEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MQorICogKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbgorICogYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoCisgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQSBvciBvbiB0aGUKKyAqIHdvcmxkd2lkZSB3ZWIgYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dC4KKyAqCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0CisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuCisgKi8KKworI2luY2x1ZGUgImRlY2wuaCIKKyNpbmNsdWRlICJpb2N0bC5oIgorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJmdy5oIgorI2luY2x1ZGUgIm1haW4uaCIKKyNpbmNsdWRlICJ3bW0uaCIKKyNpbmNsdWRlICIxMW4uaCIKKyNpbmNsdWRlICIxMW5fYWdnci5oIgorCisvKgorICogQ3JlYXRlcyBhbiBBTVNEVSBzdWJmcmFtZSBmb3IgYWdncmVnYXRpb24gaW50byBvbmUgQU1TRFUgcGFja2V0LgorICoKKyAqIFRoZSByZXN1bHRhbnQgQU1TRFUgc3ViZnJhbWUgZm9ybWF0IGlzIC0KKyAqCisgKiArLS0tLSB+IC0tLS0tKy0tLS0gfiAtLS0tLS0rLS0tLSB+IC0tLS0tKy0tLS0tIH4gLS0tLS0rLS0tLSB+IC0tLS0tKworICogfCAgICAgREEgICAgIHwgICAgIFNBICAgICAgfCAgIExlbmd0aCAgIHwgU05BUCBoZWFkZXIgfCAgIE1TRFUgICAgIHwKKyAqIHwgZGF0YVswLi41XSB8IGRhdGFbNi4uMTFdIHwgICAgICAgICAgICB8ICAgICAgICAgICAgIHwgZGF0YVsxNC4uXSB8CisgKiArLS0tLSB+IC0tLS0tKy0tLS0gfiAtLS0tLS0rLS0tLSB+IC0tLS0tKy0tLS0tIH4gLS0tLS0rLS0tLSB+IC0tLS0tKworICogPC0tNi1ieXRlcy0tPiA8LS02LWJ5dGVzLS0+IDwtLTItYnl0ZXMtLT48LS04LWJ5dGVzLS0+IDwtLW4tYnl0ZXMtLT4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsc28gY29tcHV0ZXMgdGhlIGFtb3VudCBvZiBwYWRkaW5nIHJlcXVpcmVkIHRvIG1ha2UgdGhlCisgKiBidWZmZXIgbGVuZ3RoIG11bHRpcGxlIG9mIDQgYnl0ZXMuCisgKgorICogRGF0YSA9PiB8REF8U0F8U05BUC1UWVBFfC4uLi4uLi4uICAgIC58CisgKiBNU0RVID0+IHxEQXxTQXxMZW5ndGh8U05BUHwuLi4uLi4gICAuLnwKKyAqLworc3RhdGljIGludAorbXdpZmlleF8xMW5fZm9ybV9hbXNkdV9wa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYl9hZ2dyLAorCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYl9zcmMsIGludCAqcGFkKQorCit7CisJaW50IGR0X29mZnNldDsKKwlzdHJ1Y3QgcmZjXzEwNDJfaGRyIHNuYXAgPSB7CisJCTB4YWEsCQkvKiBMTEMgRFNBUCAqLworCQkweGFhLAkJLyogTExDIFNTQVAgKi8KKwkJMHgwMywJCS8qIExMQyBDVFJMICovCisJCXsweDAwLCAweDAwLCAweDAwfSwJLyogU05BUCBPVUkgKi8KKwkJMHgwMDAwCQkvKiBTTkFQIHR5cGUgKi8KKwkJCS8qCisJCQkgKiBUaGlzIGZpZWxkIHdpbGwgYmUgb3ZlcndyaXR0ZW4KKwkJCSAqIGxhdGVyIHdpdGggZXRoZXJ0eXBlCisJCQkgKi8KKwl9OworCXN0cnVjdCB0eF9wYWNrZXRfaGRyICp0eF9oZWFkZXI7CisKKwlza2JfcHV0KHNrYl9hZ2dyLCBzaXplb2YoKnR4X2hlYWRlcikpOworCisJdHhfaGVhZGVyID0gKHN0cnVjdCB0eF9wYWNrZXRfaGRyICopIHNrYl9hZ2dyLT5kYXRhOworCisJLyogQ29weSBEQSBhbmQgU0EgKi8KKwlkdF9vZmZzZXQgPSAyICogRVRIX0FMRU47CisJbWVtY3B5KCZ0eF9oZWFkZXItPmV0aDgwM19oZHIsIHNrYl9zcmMtPmRhdGEsIGR0X29mZnNldCk7CisKKwkvKiBDb3B5IFNOQVAgaGVhZGVyICovCisJc25hcC5zbmFwX3R5cGUgPSAqKHUxNiAqKSAoKHU4ICopc2tiX3NyYy0+ZGF0YSArIGR0X29mZnNldCk7CisJZHRfb2Zmc2V0ICs9IHNpemVvZih1MTYpOworCisJbWVtY3B5KCZ0eF9oZWFkZXItPnJmYzEwNDJfaGRyLCAmc25hcCwgc2l6ZW9mKHN0cnVjdCByZmNfMTA0Ml9oZHIpKTsKKworCXNrYl9wdWxsKHNrYl9zcmMsIGR0X29mZnNldCk7CisKKwkvKiBVcGRhdGUgTGVuZ3RoIGZpZWxkICovCisJdHhfaGVhZGVyLT5ldGg4MDNfaGRyLmhfcHJvdG8gPSBodG9ucyhza2Jfc3JjLT5sZW4gKyBMTENfU05BUF9MRU4pOworCisJLyogQWRkIHBheWxvYWQgKi8KKwlza2JfcHV0KHNrYl9hZ2dyLCBza2Jfc3JjLT5sZW4pOworCW1lbWNweShza2JfYWdnci0+ZGF0YSArIHNpemVvZigqdHhfaGVhZGVyKSwgc2tiX3NyYy0+ZGF0YSwKKwkJCQkJCQlza2Jfc3JjLT5sZW4pOworCSpwYWQgPSAoKChza2Jfc3JjLT5sZW4gKyBMTENfU05BUF9MRU4pICYgMykpID8gKDQgLSAoKChza2Jfc3JjLT5sZW4gKworCQkJCQkJICAgICAgTExDX1NOQVBfTEVOKSkgJiAzKSkgOiAwOworCXNrYl9wdXQoc2tiX2FnZ3IsICpwYWQpOworCisJcmV0dXJuIHNrYl9hZ2dyLT5sZW4gKyAqcGFkOworfQorCisvKgorICogQWRkcyBUeFBEIHRvIEFNU0RVIGhlYWRlci4KKyAqCisgKiBFYWNoIEFNU0RVIHBhY2tldCB3aWxsIGNvbnRhaW4gb25lIFR4UEQgYXQgdGhlIGJlZ2lubmluZywKKyAqIGZvbGxvd2VkIGJ5IG11bHRpcGxlIEFNU0RVIHN1YmZyYW1lcy4KKyAqLworc3RhdGljIHZvaWQKK213aWZpZXhfMTFuX2Zvcm1fYW1zZHVfdHhwZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHR4cGQgKmxvY2FsX3R4X3BkOworCisJc2tiX3B1c2goc2tiLCBzaXplb2YoKmxvY2FsX3R4X3BkKSk7CisKKwlsb2NhbF90eF9wZCA9IChzdHJ1Y3QgdHhwZCAqKSBza2ItPmRhdGE7CisJbWVtc2V0KGxvY2FsX3R4X3BkLCAwLCBzaXplb2Yoc3RydWN0IHR4cGQpKTsKKworCS8qIE9yaWdpbmFsIHByaW9yaXR5IGhhcyBiZWVuIG92ZXJ3cml0dGVuICovCisJbG9jYWxfdHhfcGQtPnByaW9yaXR5ID0gKHU4KSBza2ItPnByaW9yaXR5OworCWxvY2FsX3R4X3BkLT5wa3RfZGVsYXlfMm1zID0KKwkJbXdpZmlleF93bW1fY29tcHV0ZV9kcnZfcGt0X2RlbGF5KHByaXYsIHNrYik7CisJbG9jYWxfdHhfcGQtPmJzc19udW0gPSBwcml2LT5ic3NfbnVtOworCWxvY2FsX3R4X3BkLT5ic3NfdHlwZSA9IHByaXYtPmJzc190eXBlOworCS8qIEFsd2F5cyB6ZXJvIGFzIHRoZSBkYXRhIGlzIGZvbGxvd2VkIGJ5IHN0cnVjdCB0eHBkICovCisJbG9jYWxfdHhfcGQtPnR4X3BrdF9vZmZzZXQgPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IHR4cGQpKTsKKwlsb2NhbF90eF9wZC0+dHhfcGt0X3R5cGUgPSBjcHVfdG9fbGUxNihQS1RfVFlQRV9BTVNEVSk7CisJbG9jYWxfdHhfcGQtPnR4X3BrdF9sZW5ndGggPSBjcHVfdG9fbGUxNihza2ItPmxlbiAtCisJCQlzaXplb2YoKmxvY2FsX3R4X3BkKSk7CisKKwlpZiAobG9jYWxfdHhfcGQtPnR4X2NvbnRyb2wgPT0gMCkKKwkJLyogVHhDdHJsIHNldCBieSB1c2VyIG9yIGRlZmF1bHQgKi8KKwkJbG9jYWxfdHhfcGQtPnR4X2NvbnRyb2wgPSBjcHVfdG9fbGUzMihwcml2LT5wa3RfdHhfY3RybCk7CisKKwlpZiAoKEdFVF9CU1NfUk9MRShwcml2KSA9PSBNV0lGSUVYX0JTU19ST0xFX1NUQSkgJiYKKwkJKHByaXYtPmFkYXB0ZXItPnBwc191YXBzZF9tb2RlKSkgeworCQlpZiAodHJ1ZSA9PSBtd2lmaWV4X2NoZWNrX2xhc3RfcGFja2V0X2luZGljYXRpb24ocHJpdikpIHsKKwkJCXByaXYtPmFkYXB0ZXItPnR4X2xvY2tfZmxhZyA9IHRydWU7CisJCQlsb2NhbF90eF9wZC0+ZmxhZ3MgPQorCQkJCU1XSUZJRVhfVHhQRF9QT1dFUl9NR01UX0xBU1RfUEFDS0VUOworCQl9CisJfQorfQorCisvKgorICogQ3JlYXRlIGFnZ3JlZ2F0ZWQgcGFja2V0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbiBhZ2dyZWdhdGVkIE1TRFUgcGFja2V0LCBieSBjb21iaW5pbmcgYnVmZmVycworICogZnJvbSB0aGUgUkEgbGlzdC4gRWFjaCBpbmRpdmlkdWFsIGJ1ZmZlciBpcyBlbmNhcHN1bGF0ZWQgYXMgYW4gQU1TRFUKKyAqIHN1YmZyYW1lIGFuZCBhbGwgc3VjaCBzdWJmcmFtZXMgYXJlIGNvbmNhdGVuYXRlZCB0b2dldGhlciB0byBmb3JtIHRoZQorICogQU1TRFUgcGFja2V0LgorICoKKyAqIEEgVHhQRCBpcyBhbHNvIGFkZGVkIHRvIHRoZSBmcm9udCBvZiB0aGUgcmVzdWx0YW50IEFNU0RVIHBhY2tldHMgZm9yCisgKiB0cmFuc21pc3Npb24uIFRoZSByZXN1bHRhbnQgcGFja2V0cyBmb3JtYXQgaXMgLQorICoKKyAqICstLS0tIH4gLS0tLSstLS0tLS0gfiAtLS0tLS0rLS0tLS0tIH4gLS0tLS0tKy0uLi0rLS0tLS0tIH4gLS0tLS0tKworICogfCAgICBUeFBEICAgfEFNU0RVIHN1Yi1mcmFtZXxBTVNEVSBzdWItZnJhbWV8IC4uIHxBTVNEVSBzdWItZnJhbWV8CisgKiB8ICAgICAgICAgICB8ICAgICAgIDEgICAgICAgfCAgICAgICAyICAgICAgIHwgLi4gfCAgICAgICBuICAgICAgIHwKKyAqICstLS0tIH4gLS0tLSstLS0tLS0gfiAtLS0tLS0rLS0tLS0tIH4gLS0tLS0tKyAuLiArLS0tLS0tIH4gLS0tLS0tKworICovCitpbnQKK213aWZpZXhfMTFuX2FnZ3JlZ2F0ZV9wa3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgc3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwgKnByYV9saXN0LCBpbnQgaGVhZHJvb20sCisJCQkgIGludCBwdHJpbmRleCwgdW5zaWduZWQgbG9uZyByYV9saXN0X2ZsYWdzKQorCQkJICBfX3JlbGVhc2VzKCZwcml2LT53bW0ucmFfbGlzdF9zcGlubG9jaykKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2FnZ3IsICpza2Jfc3JjOworCXN0cnVjdCBtd2lmaWV4X3R4aW5mbyAqdHhfaW5mb19hZ2dyLCAqdHhfaW5mb19zcmM7CisJaW50IHBhZCA9IDAsIHJldDsKKwlzdHJ1Y3QgbXdpZmlleF90eF9wYXJhbSB0eF9wYXJhbTsKKwlzdHJ1Y3QgdHhwZCAqcHR4X3BkID0gTlVMTDsKKworCWlmIChza2JfcXVldWVfZW1wdHkoJnByYV9saXN0LT5za2JfaGVhZCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+d21tLnJhX2xpc3Rfc3BpbmxvY2ssCisJCQkJICAgICAgIHJhX2xpc3RfZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJc2tiX3NyYyA9IHNrYl9wZWVrKCZwcmFfbGlzdC0+c2tiX2hlYWQpOworCXR4X2luZm9fc3JjID0gTVdJRklFWF9TS0JfVFhDQihza2Jfc3JjKTsKKwlza2JfYWdnciA9IGRldl9hbGxvY19za2IoYWRhcHRlci0+dHhfYnVmX3NpemUpOworCWlmICghc2tiX2FnZ3IpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICIlczogYWxsb2Mgc2tiX2FnZ3JcbiIsIF9fZnVuY19fKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+d21tLnJhX2xpc3Rfc3BpbmxvY2ssCisJCQkJICAgICAgIHJhX2xpc3RfZmxhZ3MpOworCQlyZXR1cm4gLTE7CisJfQorCXNrYl9yZXNlcnZlKHNrYl9hZ2dyLCBoZWFkcm9vbSArIHNpemVvZihzdHJ1Y3QgdHhwZCkpOworCXR4X2luZm9fYWdnciA9ICBNV0lGSUVYX1NLQl9UWENCKHNrYl9hZ2dyKTsKKworCXR4X2luZm9fYWdnci0+YnNzX2luZGV4ID0gdHhfaW5mb19zcmMtPmJzc19pbmRleDsKKwlza2JfYWdnci0+cHJpb3JpdHkgPSBza2Jfc3JjLT5wcmlvcml0eTsKKworCXdoaWxlIChza2Jfc3JjICYmICgoc2tiX2hlYWRyb29tKHNrYl9hZ2dyKSArIHNrYl9zcmMtPmxlbgorCQkJCQkrIExMQ19TTkFQX0xFTikKKwkJCQk8PSBhZGFwdGVyLT50eF9idWZfc2l6ZSkpIHsKKworCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmcHJhX2xpc3QtPnNrYl9oZWFkKSkKKwkJCXNrYl9zcmMgPSBza2JfZGVxdWV1ZSgmcHJhX2xpc3QtPnNrYl9oZWFkKTsKKwkJZWxzZQorCQkJc2tiX3NyYyA9IE5VTEw7CisKKwkJaWYgKHNrYl9zcmMpCisJCQlwcmFfbGlzdC0+dG90YWxfcGt0c19zaXplIC09IHNrYl9zcmMtPmxlbjsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT53bW0ucmFfbGlzdF9zcGlubG9jaywKKwkJCQkgICAgICAgcmFfbGlzdF9mbGFncyk7CisJCW13aWZpZXhfMTFuX2Zvcm1fYW1zZHVfcGt0KHNrYl9hZ2dyLCBza2Jfc3JjLCAmcGFkKTsKKworCQltd2lmaWV4X3dyaXRlX2RhdGFfY29tcGxldGUoYWRhcHRlciwgc2tiX3NyYywgMCk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPndtbS5yYV9saXN0X3NwaW5sb2NrLCByYV9saXN0X2ZsYWdzKTsKKworCQlpZiAoIW13aWZpZXhfaXNfcmFsaXN0X3ZhbGlkKHByaXYsIHByYV9saXN0LCBwdHJpbmRleCkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPndtbS5yYV9saXN0X3NwaW5sb2NrLAorCQkJCQkgICAgICAgcmFfbGlzdF9mbGFncyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmcHJhX2xpc3QtPnNrYl9oZWFkKSkKKwkJCXNrYl9zcmMgPSBza2JfcGVlaygmcHJhX2xpc3QtPnNrYl9oZWFkKTsKKwkJZWxzZQorCQkJc2tiX3NyYyA9IE5VTEw7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+d21tLnJhX2xpc3Rfc3BpbmxvY2ssIHJhX2xpc3RfZmxhZ3MpOworCisJLyogTGFzdCBBTVNEVSBwYWNrZXQgZG9lcyBub3QgbmVlZCBwYWRkaW5nICovCisJc2tiX3RyaW0oc2tiX2FnZ3IsIHNrYl9hZ2dyLT5sZW4gLSBwYWQpOworCisJLyogRm9ybSBBTVNEVSAqLworCW13aWZpZXhfMTFuX2Zvcm1fYW1zZHVfdHhwZChwcml2LCBza2JfYWdncik7CisJaWYgKEdFVF9CU1NfUk9MRShwcml2KSA9PSBNV0lGSUVYX0JTU19ST0xFX1NUQSkKKwkJcHR4X3BkID0gKHN0cnVjdCB0eHBkICopc2tiX2FnZ3ItPmRhdGE7CisKKwlza2JfcHVzaChza2JfYWdnciwgaGVhZHJvb20pOworCisJdHhfcGFyYW0ubmV4dF9wa3RfbGVuID0gKChwcmFfbGlzdC0+dG90YWxfcGt0c19zaXplKSA/CisJCQkJICgoKHByYV9saXN0LT50b3RhbF9wa3RzX3NpemUpID4KKwkJCQkgICBhZGFwdGVyLT50eF9idWZfc2l6ZSkgPyBhZGFwdGVyLT4KKwkJCQkgIHR4X2J1Zl9zaXplIDogcHJhX2xpc3QtPnRvdGFsX3BrdHNfc2l6ZSArCisJCQkJICBMTENfU05BUF9MRU4gKyBzaXplb2Yoc3RydWN0IHR4cGQpKSA6IDApOworCXJldCA9IGFkYXB0ZXItPmlmX29wcy5ob3N0X3RvX2NhcmQoYWRhcHRlciwgTVdJRklFWF9UWVBFX0RBVEEsCisJCQkJCSAgICAgc2tiX2FnZ3ItPmRhdGEsCisJCQkJCSAgICAgc2tiX2FnZ3ItPmxlbiwgJnR4X3BhcmFtKTsKKwlzd2l0Y2ggKHJldCkgeworCWNhc2UgLUVCVVNZOgorCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+d21tLnJhX2xpc3Rfc3BpbmxvY2ssIHJhX2xpc3RfZmxhZ3MpOworCQlpZiAoIW13aWZpZXhfaXNfcmFsaXN0X3ZhbGlkKHByaXYsIHByYV9saXN0LCBwdHJpbmRleCkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPndtbS5yYV9saXN0X3NwaW5sb2NrLAorCQkJCQkgICAgICAgcmFfbGlzdF9mbGFncyk7CisJCQltd2lmaWV4X3dyaXRlX2RhdGFfY29tcGxldGUoYWRhcHRlciwgc2tiX2FnZ3IsIC0xKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlpZiAoKEdFVF9CU1NfUk9MRShwcml2KSA9PSBNV0lGSUVYX0JTU19ST0xFX1NUQSkgJiYKKwkJCShhZGFwdGVyLT5wcHNfdWFwc2RfbW9kZSkgJiYKKwkJCShhZGFwdGVyLT50eF9sb2NrX2ZsYWcpKSB7CisJCQkJcHJpdi0+YWRhcHRlci0+dHhfbG9ja19mbGFnID0gZmFsc2U7CisJCQkJaWYgKHB0eF9wZCkKKwkJCQkJcHR4X3BkLT5mbGFncyA9IDA7CisJCX0KKworCQlza2JfcXVldWVfdGFpbCgmcHJhX2xpc3QtPnNrYl9oZWFkLCBza2JfYWdncik7CisKKwkJcHJhX2xpc3QtPnRvdGFsX3BrdHNfc2l6ZSArPSBza2JfYWdnci0+bGVuOworCisJCXR4X2luZm9fYWdnci0+ZmxhZ3MgfD0gTVdJRklFWF9CVUZfRkxBR19SRVFVRVVFRF9QS1Q7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPndtbS5yYV9saXN0X3NwaW5sb2NrLAorCQkJCSAgICAgICByYV9saXN0X2ZsYWdzKTsKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJkYXRhOiAtRUJVU1kgaXMgcmV0dXJuZWRcbiIpOworCQlicmVhazsKKwljYXNlIC0xOgorCQlhZGFwdGVyLT5kYXRhX3NlbnQgPSBmYWxzZTsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICIlczogaG9zdF90b19jYXJkIGZhaWxlZDogJSN4XG4iLAorCQkJCQkJX19mdW5jX18sIHJldCk7CisJCWFkYXB0ZXItPmRiZy5udW1fdHhfaG9zdF90b19jYXJkX2ZhaWx1cmUrKzsKKwkJbXdpZmlleF93cml0ZV9kYXRhX2NvbXBsZXRlKGFkYXB0ZXIsIHNrYl9hZ2dyLCByZXQpOworCQlyZXR1cm4gMDsKKwljYXNlIC1FSU5QUk9HUkVTUzoKKwkJYWRhcHRlci0+ZGF0YV9zZW50ID0gZmFsc2U7CisJCWJyZWFrOworCWNhc2UgMDoKKwkJbXdpZmlleF93cml0ZV9kYXRhX2NvbXBsZXRlKGFkYXB0ZXIsIHNrYl9hZ2dyLCByZXQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJaWYgKHJldCAhPSAtRUJVU1kpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPndtbS5yYV9saXN0X3NwaW5sb2NrLCByYV9saXN0X2ZsYWdzKTsKKwkJaWYgKG13aWZpZXhfaXNfcmFsaXN0X3ZhbGlkKHByaXYsIHByYV9saXN0LCBwdHJpbmRleCkpIHsKKwkJCXByaXYtPndtbS5wYWNrZXRzX291dFtwdHJpbmRleF0rKzsKKwkJCXByaXYtPndtbS50aWRfdGJsX3B0cltwdHJpbmRleF0ucmFfbGlzdF9jdXJyID0gcHJhX2xpc3Q7CisJCX0KKwkJLyogTm93IGJzc19wcmlvX2N1ciBwb2ludGVyIHBvaW50cyB0byBuZXh0IG5vZGUgKi8KKwkJYWRhcHRlci0+YnNzX3ByaW9fdGJsW3ByaXYtPmJzc19wcmlvcml0eV0uYnNzX3ByaW9fY3VyID0KKwkJCWxpc3RfZmlyc3RfZW50cnkoCisJCQkJJmFkYXB0ZXItPmJzc19wcmlvX3RibFtwcml2LT5ic3NfcHJpb3JpdHldCisJCQkJLmJzc19wcmlvX2N1ci0+bGlzdCwKKwkJCQlzdHJ1Y3QgbXdpZmlleF9ic3NfcHJpb19ub2RlLCBsaXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+d21tLnJhX2xpc3Rfc3BpbmxvY2ssCisJCQkJICAgICAgIHJhX2xpc3RfZmxhZ3MpOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC8xMW5fYWdnci5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC8xMW5fYWdnci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNmRjYTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4LzExbl9hZ2dyLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIE1hcnZlbGwgV2lyZWxlc3MgTEFOIGRldmljZSBkcml2ZXI6IDgwMi4xMW4gQWdncmVnYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwKKyAqIEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MQorICogKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbgorICogYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoCisgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQSBvciBvbiB0aGUKKyAqIHdvcmxkd2lkZSB3ZWIgYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dC4KKyAqCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0CisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuCisgKi8KKworI2lmbmRlZiBfTVdJRklFWF8xMU5fQUdHUl9IXworI2RlZmluZSBfTVdJRklFWF8xMU5fQUdHUl9IXworCisjZGVmaW5lIFBLVF9UWVBFX0FNU0RVCTB4RTYKKworaW50IG13aWZpZXhfMTFuX2RlYWdncmVnYXRlX3BrdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCXN0cnVjdCBza19idWZmICpza2IpOworaW50IG13aWZpZXhfMTFuX2FnZ3JlZ2F0ZV9wa3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsICpwdHIsIGludCBoZWFkcm9vbSwKKwkJCSAgICAgIGludCBwdHJfaW5kZXgsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCisJCQkgICAgICBfX3JlbGVhc2VzKCZwcml2LT53bW0ucmFfbGlzdF9zcGlubG9jayk7CisKKyNlbmRpZiAvKiAhX01XSUZJRVhfMTFOX0FHR1JfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvMTFuX3J4cmVvcmRlci5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVkZmRjMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvMTFuX3J4cmVvcmRlci5jCkBAIC0wLDAgKzEsNjE2IEBACisvKgorICogTWFydmVsbCBXaXJlbGVzcyBMQU4gZGV2aWNlIGRyaXZlcjogODAyLjExbiBSWCBSZS1vcmRlcmluZworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQKKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKyAqLworCisjaW5jbHVkZSAiZGVjbC5oIgorI2luY2x1ZGUgImlvY3RsLmgiCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgImZ3LmgiCisjaW5jbHVkZSAibWFpbi5oIgorI2luY2x1ZGUgIndtbS5oIgorI2luY2x1ZGUgIjExbi5oIgorI2luY2x1ZGUgIjExbl9yeHJlb3JkZXIuaCIKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZGlzcGF0Y2hlcyBhbGwgcGFja2V0cyBpbiB0aGUgUnggcmVvcmRlciB0YWJsZS4KKyAqCisgKiBUaGVyZSBjb3VsZCBiZSBob2xlcyBpbiB0aGUgYnVmZmVyLCB3aGljaCBhcmUgc2tpcHBlZCBieSB0aGUgZnVuY3Rpb24uCisgKiBTaW5jZSB0aGUgYnVmZmVyIGlzIGxpbmVhciwgdGhlIGZ1bmN0aW9uIHVzZXMgcm90YXRpb24gdG8gc2ltdWxhdGUKKyAqIGNpcmN1bGFyIGJ1ZmZlci4KKyAqLworc3RhdGljIGludAorbXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0X3VudGlsX3N0YXJ0X3dpbihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCQkgc3RydWN0IG13aWZpZXhfcnhfcmVvcmRlcl90YmwKKwkJCQkJICpyeF9yZW9yX3RibF9wdHIsIGludCBzdGFydF93aW4pCit7CisJaW50IG5vX3BrdF90b19zZW5kLCBpOworCXZvaWQgKnJ4X3RtcF9wdHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW5vX3BrdF90b19zZW5kID0gKHN0YXJ0X3dpbiA+IHJ4X3Jlb3JfdGJsX3B0ci0+c3RhcnRfd2luKSA/CisJCW1pbigoc3RhcnRfd2luIC0gcnhfcmVvcl90YmxfcHRyLT5zdGFydF93aW4pLAorCQkgICAgcnhfcmVvcl90YmxfcHRyLT53aW5fc2l6ZSkgOiByeF9yZW9yX3RibF9wdHItPndpbl9zaXplOworCisJZm9yIChpID0gMDsgaSA8IG5vX3BrdF90b19zZW5kOyArK2kpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4X3BrdF9sb2NrLCBmbGFncyk7CisJCXJ4X3RtcF9wdHIgPSBOVUxMOworCQlpZiAocnhfcmVvcl90YmxfcHRyLT5yeF9yZW9yZGVyX3B0cltpXSkgeworCQkJcnhfdG1wX3B0ciA9IHJ4X3Jlb3JfdGJsX3B0ci0+cnhfcmVvcmRlcl9wdHJbaV07CisJCQlyeF9yZW9yX3RibF9wdHItPnJ4X3Jlb3JkZXJfcHRyW2ldID0gTlVMTDsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9wa3RfbG9jaywgZmxhZ3MpOworCQlpZiAocnhfdG1wX3B0cikKKwkJCW13aWZpZXhfcHJvY2Vzc19yeF9wYWNrZXQocHJpdi0+YWRhcHRlciwgcnhfdG1wX3B0cik7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4X3BrdF9sb2NrLCBmbGFncyk7CisJLyoKKwkgKiBXZSBkb24ndCBoYXZlIGEgY2lyY3VsYXIgYnVmZmVyLCBoZW5jZSB1c2Ugcm90YXRpb24gdG8gc2ltdWxhdGUKKwkgKiBjaXJjdWxhciBidWZmZXIKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcnhfcmVvcl90YmxfcHRyLT53aW5fc2l6ZSAtIG5vX3BrdF90b19zZW5kOyArK2kpIHsKKwkJcnhfcmVvcl90YmxfcHRyLT5yeF9yZW9yZGVyX3B0cltpXSA9CisJCQlyeF9yZW9yX3RibF9wdHItPnJ4X3Jlb3JkZXJfcHRyW25vX3BrdF90b19zZW5kICsgaV07CisJCXJ4X3Jlb3JfdGJsX3B0ci0+cnhfcmVvcmRlcl9wdHJbbm9fcGt0X3RvX3NlbmQgKyBpXSA9IE5VTEw7CisJfQorCisJcnhfcmVvcl90YmxfcHRyLT5zdGFydF93aW4gPSBzdGFydF93aW47CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cnhfcGt0X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBkaXNwYXRjaGVzIGFsbCBwYWNrZXRzIGluIHRoZSBSeCByZW9yZGVyIHRhYmxlIHVudGlsCisgKiBhIGhvbGUgaXMgZm91bmQuCisgKgorICogVGhlIHN0YXJ0IHdpbmRvdyBpcyBhZGp1c3RlZCBhdXRvbWF0aWNhbGx5IHdoZW4gYSBob2xlIGlzIGxvY2F0ZWQuCisgKiBTaW5jZSB0aGUgYnVmZmVyIGlzIGxpbmVhciwgdGhlIGZ1bmN0aW9uIHVzZXMgcm90YXRpb24gdG8gc2ltdWxhdGUKKyAqIGNpcmN1bGFyIGJ1ZmZlci4KKyAqLworc3RhdGljIGludAorbXdpZmlleF8xMW5fc2Nhbl9hbmRfZGlzcGF0Y2goc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCBtd2lmaWV4X3J4X3Jlb3JkZXJfdGJsICpyeF9yZW9yX3RibF9wdHIpCit7CisJaW50IGksIGosIHhjaGc7CisJdm9pZCAqcnhfdG1wX3B0cjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZm9yIChpID0gMDsgaSA8IHJ4X3Jlb3JfdGJsX3B0ci0+d2luX3NpemU7ICsraSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfcGt0X2xvY2ssIGZsYWdzKTsKKwkJaWYgKCFyeF9yZW9yX3RibF9wdHItPnJ4X3Jlb3JkZXJfcHRyW2ldKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9wa3RfbG9jaywgZmxhZ3MpOworCQkJYnJlYWs7CisJCX0KKwkJcnhfdG1wX3B0ciA9IHJ4X3Jlb3JfdGJsX3B0ci0+cnhfcmVvcmRlcl9wdHJbaV07CisJCXJ4X3Jlb3JfdGJsX3B0ci0+cnhfcmVvcmRlcl9wdHJbaV0gPSBOVUxMOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9wa3RfbG9jaywgZmxhZ3MpOworCQltd2lmaWV4X3Byb2Nlc3NfcnhfcGFja2V0KHByaXYtPmFkYXB0ZXIsIHJ4X3RtcF9wdHIpOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeF9wa3RfbG9jaywgZmxhZ3MpOworCS8qCisJICogV2UgZG9uJ3QgaGF2ZSBhIGNpcmN1bGFyIGJ1ZmZlciwgaGVuY2UgdXNlIHJvdGF0aW9uIHRvIHNpbXVsYXRlCisJICogY2lyY3VsYXIgYnVmZmVyCisJICovCisJaWYgKGkgPiAwKSB7CisJCXhjaGcgPSByeF9yZW9yX3RibF9wdHItPndpbl9zaXplIC0gaTsKKwkJZm9yIChqID0gMDsgaiA8IHhjaGc7ICsraikgeworCQkJcnhfcmVvcl90YmxfcHRyLT5yeF9yZW9yZGVyX3B0cltqXSA9CisJCQkJcnhfcmVvcl90YmxfcHRyLT5yeF9yZW9yZGVyX3B0cltpICsgal07CisJCQlyeF9yZW9yX3RibF9wdHItPnJ4X3Jlb3JkZXJfcHRyW2kgKyBqXSA9IE5VTEw7CisJCX0KKwl9CisJcnhfcmVvcl90YmxfcHRyLT5zdGFydF93aW4gPSAocnhfcmVvcl90YmxfcHRyLT5zdGFydF93aW4gKyBpKQorCQkmKE1BWF9USURfVkFMVUUgLSAxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9wa3RfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBkZWxldGVzIHRoZSBSeCByZW9yZGVyIHRhYmxlIGFuZCBmcmVlcyB0aGUgbWVtb3J5LgorICoKKyAqIFRoZSBmdW5jdGlvbiBzdG9wcyB0aGUgYXNzb2NpYXRlZCB0aW1lciBhbmQgZGlzcGF0Y2hlcyBhbGwgdGhlCisgKiBwZW5kaW5nIHBhY2tldHMgaW4gdGhlIFJ4IHJlb3JkZXIgdGFibGUgYmVmb3JlIGRlbGV0aW9uLgorICovCitzdGF0aWMgdm9pZAorbXdpZmlleF8xMW5fZGVsZXRlX3J4X3Jlb3JkZXJfdGJsX2VudHJ5KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJICAgICAgIHN0cnVjdCBtd2lmaWV4X3J4X3Jlb3JkZXJfdGJsCisJCQkJICAgICAgICpyeF9yZW9yX3RibF9wdHIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghcnhfcmVvcl90YmxfcHRyKQorCQlyZXR1cm47CisKKwltd2lmaWV4XzExbl9kaXNwYXRjaF9wa3RfdW50aWxfc3RhcnRfd2luKHByaXYsIHJ4X3Jlb3JfdGJsX3B0ciwKKwkJCQkJCSAocnhfcmVvcl90YmxfcHRyLT5zdGFydF93aW4gKworCQkJCQkJICByeF9yZW9yX3RibF9wdHItPndpbl9zaXplKQorCQkJCQkJICYoTUFYX1RJRF9WQUxVRSAtIDEpKTsKKworCWRlbF90aW1lcigmcnhfcmVvcl90YmxfcHRyLT50aW1lcl9jb250ZXh0LnRpbWVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeF9yZW9yZGVyX3RibF9sb2NrLCBmbGFncyk7CisJbGlzdF9kZWwoJnJ4X3Jlb3JfdGJsX3B0ci0+bGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cnhfcmVvcmRlcl90YmxfbG9jaywgZmxhZ3MpOworCisJa2ZyZWUocnhfcmVvcl90YmxfcHRyLT5yeF9yZW9yZGVyX3B0cik7CisJa2ZyZWUocnhfcmVvcl90YmxfcHRyKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcG9pbnRlciB0byBhbiBlbnRyeSBpbiBSeCByZW9yZGVyaW5nCisgKiB0YWJsZSB3aGljaCBtYXRjaGVzIHRoZSBnaXZlbiBUQS9USUQgcGFpci4KKyAqLworc3RhdGljIHN0cnVjdCBtd2lmaWV4X3J4X3Jlb3JkZXJfdGJsICoKK213aWZpZXhfMTFuX2dldF9yeF9yZW9yZGVyX3RibChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBpbnQgdGlkLCB1OCAqdGEpCit7CisJc3RydWN0IG13aWZpZXhfcnhfcmVvcmRlcl90YmwgKnJ4X3Jlb3JfdGJsX3B0cjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4X3Jlb3JkZXJfdGJsX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJ4X3Jlb3JfdGJsX3B0ciwgJnByaXYtPnJ4X3Jlb3JkZXJfdGJsX3B0ciwgbGlzdCkgeworCQlpZiAoKCFtZW1jbXAocnhfcmVvcl90YmxfcHRyLT50YSwgdGEsIEVUSF9BTEVOKSkKKwkJICAgICYmIChyeF9yZW9yX3RibF9wdHItPnRpZCA9PSB0aWQpKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9yZW9yZGVyX3RibF9sb2NrLAorCQkJCQkgICAgICAgZmxhZ3MpOworCQkJcmV0dXJuIHJ4X3Jlb3JfdGJsX3B0cjsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9yZW9yZGVyX3RibF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZmluZHMgdGhlIGxhc3Qgc2VxdWVuY2UgbnVtYmVyIHVzZWQgaW4gdGhlIHBhY2tldHMKKyAqIGJ1ZmZlcmVkIGluIFJ4IHJlb3JkZXJpbmcgdGFibGUuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfMTFuX2ZpbmRfbGFzdF9zZXFfbnVtKHN0cnVjdCBtd2lmaWV4X3J4X3Jlb3JkZXJfdGJsICpyeF9yZW9yZGVyX3RibF9wdHIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAocnhfcmVvcmRlcl90YmxfcHRyLT53aW5fc2l6ZSAtIDEpOyBpID49IDA7IC0taSkKKwkJaWYgKHJ4X3Jlb3JkZXJfdGJsX3B0ci0+cnhfcmVvcmRlcl9wdHJbaV0pCisJCQlyZXR1cm4gaTsKKworCXJldHVybiAtMTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZmx1c2hlcyBhbGwgdGhlIHBhY2tldHMgaW4gUnggcmVvcmRlcmluZyB0YWJsZS4KKyAqCisgKiBUaGUgZnVuY3Rpb24gY2hlY2tzIGlmIGFueSBwYWNrZXRzIGFyZSBjdXJyZW50bHkgYnVmZmVyZWQgaW4gdGhlCisgKiB0YWJsZSBvciBub3QuIEluIGNhc2UgdGhlcmUgYXJlIHBhY2tldHMgYXZhaWxhYmxlLCBpdCBkaXNwYXRjaGVzCisgKiB0aGVtIGFuZCB0aGVuIGR1bXBzIHRoZSBSeCByZW9yZGVyaW5nIHRhYmxlLgorICovCitzdGF0aWMgdm9pZAorbXdpZmlleF9mbHVzaF9kYXRhKHVuc2lnbmVkIGxvbmcgY29udGV4dCkKK3sKKwlzdHJ1Y3QgcmVvcmRlcl90bXJfY254dCAqcmVvcmRlcl9jbnh0ID0KKwkJKHN0cnVjdCByZW9yZGVyX3Rtcl9jbnh0ICopIGNvbnRleHQ7CisJaW50IHN0YXJ0X3dpbjsKKworCXN0YXJ0X3dpbiA9IG13aWZpZXhfMTFuX2ZpbmRfbGFzdF9zZXFfbnVtKHJlb3JkZXJfY254dC0+cHRyKTsKKwlpZiAoc3RhcnRfd2luID49IDApIHsKKwkJZGV2X2RiZyhyZW9yZGVyX2NueHQtPnByaXYtPmFkYXB0ZXItPmRldiwKKwkJCQkiaW5mbzogZmx1c2ggZGF0YSAlZFxuIiwgc3RhcnRfd2luKTsKKwkJbXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0X3VudGlsX3N0YXJ0X3dpbihyZW9yZGVyX2NueHQtPnByaXYsCisJCQkJcmVvcmRlcl9jbnh0LT5wdHIsCisJCQkJKChyZW9yZGVyX2NueHQtPnB0ci0+c3RhcnRfd2luICsKKwkJCQkgIHN0YXJ0X3dpbiArIDEpICYgKE1BWF9USURfVkFMVUUgLSAxKSkpOworCX0KK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbiBlbnRyeSBpbiBSeCByZW9yZGVyaW5nIHRhYmxlIGZvciB0aGUKKyAqIGdpdmVuIFRBL1RJRC4KKyAqCisgKiBUaGUgZnVuY3Rpb24gYWxzbyBpbml0aWFsaXplcyB0aGUgZW50cnkgd2l0aCBzZXF1ZW5jZSBudW1iZXIsIHdpbmRvdworICogc2l6ZSBhcyB3ZWxsIGFzIGluaXRpYWxpemVzIHRoZSB0aW1lci4KKyAqCisgKiBJZiB0aGUgcmVjZWl2ZWQgVEEvVElEIHBhaXIgaXMgYWxyZWFkeSBwcmVzZW50LCBhbGwgdGhlIHBhY2tldHMgYXJlCisgKiBkaXNwYXRjaGVkIGFuZCB0aGUgd2luZG93IHNpemUgaXMgbW92ZWQgdW50aWwgdGhlIFNTTi4KKyAqLworc3RhdGljIHZvaWQKK213aWZpZXhfMTFuX2NyZWF0ZV9yeF9yZW9yZGVyX3RibChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqdGEsCisJCQkJIGludCB0aWQsIGludCB3aW5fc2l6ZSwgaW50IHNlcV9udW0pCit7CisJaW50IGk7CisJc3RydWN0IG13aWZpZXhfcnhfcmVvcmRlcl90YmwgKnJ4X3Jlb3JfdGJsX3B0ciwgKm5ld19ub2RlOworCXUxNiBsYXN0X3NlcSA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qCisJICogSWYgd2UgZ2V0IGEgVElELCB0YSBwYWlyIHdoaWNoIGlzIGFscmVhZHkgcHJlc2VudCBkaXNwYXRjaCBhbGwgdGhlCisJICogdGhlIHBhY2tldHMgYW5kIG1vdmUgdGhlIHdpbmRvdyBzaXplIHVudGlsIHRoZSBzc24KKwkgKi8KKwlyeF9yZW9yX3RibF9wdHIgPSBtd2lmaWV4XzExbl9nZXRfcnhfcmVvcmRlcl90YmwocHJpdiwgdGlkLCB0YSk7CisJaWYgKHJ4X3Jlb3JfdGJsX3B0cikgeworCQltd2lmaWV4XzExbl9kaXNwYXRjaF9wa3RfdW50aWxfc3RhcnRfd2luKHByaXYsIHJ4X3Jlb3JfdGJsX3B0ciwKKwkJCQkJCQkgc2VxX251bSk7CisJCXJldHVybjsKKwl9CisJLyogaWYgIXJ4X3Jlb3JfdGJsX3B0ciB0aGVuIGNyZWF0ZSBvbmUgKi8KKwluZXdfbm9kZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X3J4X3Jlb3JkZXJfdGJsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXdfbm9kZSkgeworCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgIiVzOiBmYWlsZWQgdG8gYWxsb2MgbmV3X25vZGVcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmbmV3X25vZGUtPmxpc3QpOworCW5ld19ub2RlLT50aWQgPSB0aWQ7CisJbWVtY3B5KG5ld19ub2RlLT50YSwgdGEsIEVUSF9BTEVOKTsKKwluZXdfbm9kZS0+c3RhcnRfd2luID0gc2VxX251bTsKKwlpZiAobXdpZmlleF9xdWV1aW5nX3JhX2Jhc2VkKHByaXYpKQorCQkvKiBUT0RPIGZvciBhZGhvYyAqLworCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwKKwkJCSJpbmZvOiBBREhPQzpsYXN0X3NlcT0lZCBzdGFydF93aW49JWRcbiIsCisJCQlsYXN0X3NlcSwgbmV3X25vZGUtPnN0YXJ0X3dpbik7CisJZWxzZQorCQlsYXN0X3NlcSA9IHByaXYtPnJ4X3NlcVt0aWRdOworCisJaWYgKGxhc3Rfc2VxID49IG5ld19ub2RlLT5zdGFydF93aW4pCisJCW5ld19ub2RlLT5zdGFydF93aW4gPSBsYXN0X3NlcSArIDE7CisKKwluZXdfbm9kZS0+d2luX3NpemUgPSB3aW5fc2l6ZTsKKworCW5ld19ub2RlLT5yeF9yZW9yZGVyX3B0ciA9IGt6YWxsb2Moc2l6ZW9mKHZvaWQgKikgKiB3aW5fc2l6ZSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXdfbm9kZS0+cnhfcmVvcmRlcl9wdHIpIHsKKwkJa2ZyZWUoKHU4ICopIG5ld19ub2RlKTsKKwkJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkiJXM6IGZhaWxlZCB0byBhbGxvYyByZW9yZGVyX3B0clxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJbmV3X25vZGUtPnRpbWVyX2NvbnRleHQucHRyID0gbmV3X25vZGU7CisJbmV3X25vZGUtPnRpbWVyX2NvbnRleHQucHJpdiA9IHByaXY7CisKKwlpbml0X3RpbWVyKCZuZXdfbm9kZS0+dGltZXJfY29udGV4dC50aW1lcik7CisJbmV3X25vZGUtPnRpbWVyX2NvbnRleHQudGltZXIuZnVuY3Rpb24gPSBtd2lmaWV4X2ZsdXNoX2RhdGE7CisJbmV3X25vZGUtPnRpbWVyX2NvbnRleHQudGltZXIuZGF0YSA9CisJCQkodW5zaWduZWQgbG9uZykgJm5ld19ub2RlLT50aW1lcl9jb250ZXh0OworCisJZm9yIChpID0gMDsgaSA8IHdpbl9zaXplOyArK2kpCisJCW5ld19ub2RlLT5yeF9yZW9yZGVyX3B0cltpXSA9IE5VTEw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfcmVvcmRlcl90YmxfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJm5ld19ub2RlLT5saXN0LCAmcHJpdi0+cnhfcmVvcmRlcl90YmxfcHRyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9yZW9yZGVyX3RibF9sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGNvbW1hbmQgZm9yIGFkZGluZyBhIEJBIHJlcXVlc3QuCisgKgorICogUHJlcGFyYXRpb24gaW5jbHVkZXMgLQorICogICAgICAtIFNldHRpbmcgY29tbWFuZCBJRCBhbmQgcHJvcGVyIHNpemUKKyAqICAgICAgLSBTZXR0aW5nIGFkZCBCQSByZXF1ZXN0IGJ1ZmZlcgorICogICAgICAtIEVuc3VyaW5nIGNvcnJlY3QgZW5kaWFuLW5lc3MKKyAqLworaW50IG13aWZpZXhfY21kXzExbl9hZGRiYV9yZXEoc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwgdm9pZCAqZGF0YV9idWYpCit7CisJc3RydWN0IGhvc3RfY21kX2RzXzExbl9hZGRiYV9yZXEgKmFkZF9iYV9yZXEgPQorCQkoc3RydWN0IGhvc3RfY21kX2RzXzExbl9hZGRiYV9yZXEgKikKKwkJJmNtZC0+cGFyYW1zLmFkZF9iYV9yZXE7CisKKwljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihIb3N0Q21kX0NNRF8xMU5fQUREQkFfUkVRKTsKKwljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoKmFkZF9iYV9yZXEpICsgU19EU19HRU4pOworCW1lbWNweShhZGRfYmFfcmVxLCBkYXRhX2J1Ziwgc2l6ZW9mKCphZGRfYmFfcmVxKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgY29tbWFuZCBmb3IgYWRkaW5nIGEgQkEgcmVzcG9uc2UuCisgKgorICogUHJlcGFyYXRpb24gaW5jbHVkZXMgLQorICogICAgICAtIFNldHRpbmcgY29tbWFuZCBJRCBhbmQgcHJvcGVyIHNpemUKKyAqICAgICAgLSBTZXR0aW5nIGFkZCBCQSByZXNwb25zZSBidWZmZXIKKyAqICAgICAgLSBFbnN1cmluZyBjb3JyZWN0IGVuZGlhbi1uZXNzCisgKi8KK2ludCBtd2lmaWV4X2NtZF8xMW5fYWRkYmFfcnNwX2dlbihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCSAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwKKwkJCQkgIHZvaWQgKmRhdGFfYnVmKQoreworCXN0cnVjdCBob3N0X2NtZF9kc18xMW5fYWRkYmFfcnNwICphZGRfYmFfcnNwID0KKwkJKHN0cnVjdCBob3N0X2NtZF9kc18xMW5fYWRkYmFfcnNwICopCisJCSZjbWQtPnBhcmFtcy5hZGRfYmFfcnNwOworCXN0cnVjdCBob3N0X2NtZF9kc18xMW5fYWRkYmFfcmVxICpjbWRfYWRkYmFfcmVxID0KKwkJKHN0cnVjdCBob3N0X2NtZF9kc18xMW5fYWRkYmFfcmVxICopIGRhdGFfYnVmOworCXU4IHRpZDsKKwlpbnQgd2luX3NpemU7CisJdWludDE2X3QgYmxvY2tfYWNrX3BhcmFtX3NldDsKKworCWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KEhvc3RDbWRfQ01EXzExTl9BRERCQV9SU1ApOworCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZigqYWRkX2JhX3JzcCkgKyBTX0RTX0dFTik7CisKKwltZW1jcHkoYWRkX2JhX3JzcC0+cGVlcl9tYWNfYWRkciwgY21kX2FkZGJhX3JlcS0+cGVlcl9tYWNfYWRkciwKKwkgICAgICAgRVRIX0FMRU4pOworCWFkZF9iYV9yc3AtPmRpYWxvZ190b2tlbiA9IGNtZF9hZGRiYV9yZXEtPmRpYWxvZ190b2tlbjsKKwlhZGRfYmFfcnNwLT5ibG9ja19hY2tfdG1vID0gY21kX2FkZGJhX3JlcS0+YmxvY2tfYWNrX3RtbzsKKwlhZGRfYmFfcnNwLT5zc24gPSBjbWRfYWRkYmFfcmVxLT5zc247CisKKwlibG9ja19hY2tfcGFyYW1fc2V0ID0gbGUxNl90b19jcHUoY21kX2FkZGJhX3JlcS0+YmxvY2tfYWNrX3BhcmFtX3NldCk7CisJdGlkID0gKGJsb2NrX2Fja19wYXJhbV9zZXQgJiBJRUVFODAyMTFfQUREQkFfUEFSQU1fVElEX01BU0spCisJCT4+IEJMT0NLQUNLUEFSQU1fVElEX1BPUzsKKwlhZGRfYmFfcnNwLT5zdGF0dXNfY29kZSA9IGNwdV90b19sZTE2KEFEREJBX1JTUF9TVEFUVVNfQUNDRVBUKTsKKwlibG9ja19hY2tfcGFyYW1fc2V0ICY9IH5JRUVFODAyMTFfQUREQkFfUEFSQU1fQlVGX1NJWkVfTUFTSzsKKwkvKiBXZSBkb25vdCBzdXBwb3J0IEFNU0RVIGluc2lkZSBBTVBEVSwgaGVuY2UgcmVzZXQgdGhlIGJpdCAqLworCWJsb2NrX2Fja19wYXJhbV9zZXQgJj0gfkJMT0NLQUNLUEFSQU1fQU1TRFVfU1VQUF9NQVNLOworCWJsb2NrX2Fja19wYXJhbV9zZXQgfD0gKHByaXYtPmFkZF9iYV9wYXJhbS5yeF93aW5fc2l6ZSA8PAorCQkJCQkgICAgIEJMT0NLQUNLUEFSQU1fV0lOU0laRV9QT1MpOworCWFkZF9iYV9yc3AtPmJsb2NrX2Fja19wYXJhbV9zZXQgPSBjcHVfdG9fbGUxNihibG9ja19hY2tfcGFyYW1fc2V0KTsKKwl3aW5fc2l6ZSA9IChsZTE2X3RvX2NwdShhZGRfYmFfcnNwLT5ibG9ja19hY2tfcGFyYW1fc2V0KQorCQkJCQkmIElFRUU4MDIxMV9BRERCQV9QQVJBTV9CVUZfU0laRV9NQVNLKQorCQkJCQk+PiBCTE9DS0FDS1BBUkFNX1dJTlNJWkVfUE9TOworCWNtZF9hZGRiYV9yZXEtPmJsb2NrX2Fja19wYXJhbV9zZXQgPSBjcHVfdG9fbGUxNihibG9ja19hY2tfcGFyYW1fc2V0KTsKKworCW13aWZpZXhfMTFuX2NyZWF0ZV9yeF9yZW9yZGVyX3RibChwcml2LCBjbWRfYWRkYmFfcmVxLT5wZWVyX21hY19hZGRyLAorCQkJICAgIHRpZCwgd2luX3NpemUsIGxlMTZfdG9fY3B1KGNtZF9hZGRiYV9yZXEtPnNzbikpOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBjb21tYW5kIGZvciBkZWxldGluZyBhIEJBIHJlcXVlc3QuCisgKgorICogUHJlcGFyYXRpb24gaW5jbHVkZXMgLQorICogICAgICAtIFNldHRpbmcgY29tbWFuZCBJRCBhbmQgcHJvcGVyIHNpemUKKyAqICAgICAgLSBTZXR0aW5nIGRlbCBCQSByZXF1ZXN0IGJ1ZmZlcgorICogICAgICAtIEVuc3VyaW5nIGNvcnJlY3QgZW5kaWFuLW5lc3MKKyAqLworaW50IG13aWZpZXhfY21kXzExbl9kZWxiYShzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLCB2b2lkICpkYXRhX2J1ZikKK3sKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfMTFuX2RlbGJhICpkZWxfYmEgPSAoc3RydWN0IGhvc3RfY21kX2RzXzExbl9kZWxiYSAqKQorCQkmY21kLT5wYXJhbXMuZGVsX2JhOworCisJY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoSG9zdENtZF9DTURfMTFOX0RFTEJBKTsKKwljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoKmRlbF9iYSkgKyBTX0RTX0dFTik7CisJbWVtY3B5KGRlbF9iYSwgZGF0YV9idWYsIHNpemVvZigqZGVsX2JhKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaWRlbnRpZmllcyBpZiBSeCByZW9yZGVyaW5nIGlzIG5lZWRlZCBmb3IgYSByZWNlaXZlZCBwYWNrZXQuCisgKgorICogSW4gY2FzZSByZW9yZGVyaW5nIGlzIHJlcXVpcmVkLCB0aGUgZnVuY3Rpb24gd2lsbCBkbyB0aGUgcmVvcmRlcmluZworICogYmVmb3JlIHNlbmRpbmcgaXQgdG8ga2VybmVsLgorICoKKyAqIFRoZSBSeCByZW9yZGVyIHRhYmxlIGlzIGNoZWNrZWQgZmlyc3Qgd2l0aCB0aGUgcmVjZWl2ZWQgVElEL1RBIHBhaXIuIElmCisgKiBub3QgZm91bmQsIHRoZSByZWNlaXZlZCBwYWNrZXQgaXMgZGlzcGF0Y2hlZCBpbW1lZGlhdGVseS4gQnV0IGlmIGZvdW5kLAorICogdGhlIHBhY2tldCBpcyByZW9yZGVyZWQgYW5kIGFsbCB0aGUgcGFja2V0cyBpbiB0aGUgdXBkYXRlZCBSeCByZW9yZGVyaW5nCisgKiB0YWJsZSBpcyBkaXNwYXRjaGVkIHVudGlsIGEgaG9sZSBpcyBmb3VuZC4KKyAqCisgKiBGb3Igc2VxdWVuY2UgbnVtYmVyIGxlc3MgdGhhbiB0aGUgc3RhcnRpbmcgd2luZG93LCB0aGUgcGFja2V0IGlzIGRyb3BwZWQuCisgKi8KK2ludCBtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCXUxNiBzZXFfbnVtLCB1MTYgdGlkLAorCQkJCXU4ICp0YSwgdTggcGt0X3R5cGUsIHZvaWQgKnBheWxvYWQpCit7CisJc3RydWN0IG13aWZpZXhfcnhfcmVvcmRlcl90YmwgKnJ4X3Jlb3JfdGJsX3B0cjsKKwlpbnQgc3RhcnRfd2luLCBlbmRfd2luLCB3aW5fc2l6ZSwgcmV0OworCXUxNiBwa3RfaW5kZXg7CisKKwlyeF9yZW9yX3RibF9wdHIgPQorCQltd2lmaWV4XzExbl9nZXRfcnhfcmVvcmRlcl90YmwoKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKikgcHJpdiwKKwkJCQkJCXRpZCwgdGEpOworCWlmICghcnhfcmVvcl90YmxfcHRyKSB7CisJCWlmIChwa3RfdHlwZSAhPSBQS1RfVFlQRV9CQVIpCisJCQltd2lmaWV4X3Byb2Nlc3NfcnhfcGFja2V0KHByaXYtPmFkYXB0ZXIsIHBheWxvYWQpOworCQlyZXR1cm4gMDsKKwl9CisJc3RhcnRfd2luID0gcnhfcmVvcl90YmxfcHRyLT5zdGFydF93aW47CisJd2luX3NpemUgPSByeF9yZW9yX3RibF9wdHItPndpbl9zaXplOworCWVuZF93aW4gPSAoKHN0YXJ0X3dpbiArIHdpbl9zaXplKSAtIDEpICYgKE1BWF9USURfVkFMVUUgLSAxKTsKKwlkZWxfdGltZXIoJnJ4X3Jlb3JfdGJsX3B0ci0+dGltZXJfY29udGV4dC50aW1lcik7CisJbW9kX3RpbWVyKCZyeF9yZW9yX3RibF9wdHItPnRpbWVyX2NvbnRleHQudGltZXIsIGppZmZpZXMKKwkJCSsgKE1JTl9GTFVTSF9USU1FUl9NUyAqIHdpbl9zaXplICogSFopIC8gMTAwMCk7CisKKwkvKgorCSAqIElmIHNlcV9udW0gaXMgbGVzcyB0aGVuIHN0YXJ0aW5nIHdpbiB0aGVuIGlnbm9yZSBhbmQgZHJvcCB0aGUKKwkgKiBwYWNrZXQKKwkgKi8KKwlpZiAoKHN0YXJ0X3dpbiArIFRXT1BPVzExKSA+IChNQVhfVElEX1ZBTFVFIC0gMSkpIHsvKiBXcmFwICovCisJCWlmIChzZXFfbnVtID49ICgoc3RhcnRfd2luICsgKFRXT1BPVzExKSkgJiAoTUFYX1RJRF9WQUxVRSAtIDEpKQorCQkJCSYmIChzZXFfbnVtIDwgc3RhcnRfd2luKSkKKwkJCXJldHVybiAtMTsKKwl9IGVsc2UgaWYgKChzZXFfbnVtIDwgc3RhcnRfd2luKQorCQkJfHwgKHNlcV9udW0gPiAoc3RhcnRfd2luICsgKFRXT1BPVzExKSkpKSB7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIElmIHRoaXMgcGFja2V0IGlzIGEgQkFSIHdlIGFkanVzdCBzZXFfbnVtIGFzCisJICogV2luU3RhcnQgPSBzZXFfbnVtCisJICovCisJaWYgKHBrdF90eXBlID09IFBLVF9UWVBFX0JBUikKKwkJc2VxX251bSA9ICgoc2VxX251bSArIHdpbl9zaXplKSAtIDEpICYgKE1BWF9USURfVkFMVUUgLSAxKTsKKworCWlmICgoKGVuZF93aW4gPCBzdGFydF93aW4pCisJICAgICAmJiAoc2VxX251bSA8IChUV09QT1cxMSAtIChNQVhfVElEX1ZBTFVFIC0gc3RhcnRfd2luKSkpCisJICAgICAmJiAoc2VxX251bSA+IGVuZF93aW4pKSB8fCAoKGVuZF93aW4gPiBzdGFydF93aW4pCisJICAgICAmJiAoKHNlcV9udW0gPiBlbmRfd2luKSB8fCAoc2VxX251bSA8IHN0YXJ0X3dpbikpKSkgeworCQllbmRfd2luID0gc2VxX251bTsKKwkJaWYgKCgoc2VxX251bSAtIHdpbl9zaXplKSArIDEpID49IDApCisJCQlzdGFydF93aW4gPSAoZW5kX3dpbiAtIHdpbl9zaXplKSArIDE7CisJCWVsc2UKKwkJCXN0YXJ0X3dpbiA9IChNQVhfVElEX1ZBTFVFIC0gKHdpbl9zaXplIC0gc2VxX251bSkpICsgMTsKKwkJcmV0ID0gbXdpZmlleF8xMW5fZGlzcGF0Y2hfcGt0X3VudGlsX3N0YXJ0X3dpbihwcml2LAorCQkJCQkJcnhfcmVvcl90YmxfcHRyLCBzdGFydF93aW4pOworCisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChwa3RfdHlwZSAhPSBQS1RfVFlQRV9CQVIpIHsKKwkJaWYgKHNlcV9udW0gPj0gc3RhcnRfd2luKQorCQkJcGt0X2luZGV4ID0gc2VxX251bSAtIHN0YXJ0X3dpbjsKKwkJZWxzZQorCQkJcGt0X2luZGV4ID0gKHNlcV9udW0rTUFYX1RJRF9WQUxVRSkgLSBzdGFydF93aW47CisKKwkJaWYgKHJ4X3Jlb3JfdGJsX3B0ci0+cnhfcmVvcmRlcl9wdHJbcGt0X2luZGV4XSkKKwkJCXJldHVybiAtMTsKKworCQlyeF9yZW9yX3RibF9wdHItPnJ4X3Jlb3JkZXJfcHRyW3BrdF9pbmRleF0gPSBwYXlsb2FkOworCX0KKworCS8qCisJICogRGlzcGF0Y2ggYWxsIHBhY2tldHMgc2VxdWVudGlhbGx5IGZyb20gc3RhcnRfd2luIHVudGlsIGEKKwkgKiBob2xlIGlzIGZvdW5kIGFuZCBhZGp1c3QgdGhlIHN0YXJ0X3dpbiBhcHByb3ByaWF0ZWx5CisJICovCisJcmV0ID0gbXdpZmlleF8xMW5fc2Nhbl9hbmRfZGlzcGF0Y2gocHJpdiwgcnhfcmVvcl90YmxfcHRyKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGRlbGV0ZXMgYW4gZW50cnkgZm9yIGEgZ2l2ZW4gVElEL1RBIHBhaXIuCisgKgorICogVGhlIFRJRC9UQSBhcmUgdGFrZW4gZnJvbSBkZWwgQkEgZXZlbnQgYm9keS4KKyAqLwordm9pZAorbXdpZmlleF8xMW5fZGVsZXRlX2JhX3N0cmVhbV90Ymwoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgaW50IHRpZCwKKwkJCQl1OCAqcGVlcl9tYWMsIHU4IHR5cGUsIGludCBpbml0aWF0b3IpCit7CisJc3RydWN0IG13aWZpZXhfcnhfcmVvcmRlcl90YmwgKnJ4X3Jlb3JfdGJsX3B0cjsKKwlzdHJ1Y3QgbXdpZmlleF90eF9iYV9zdHJlYW1fdGJsICpwdHhfdGJsOworCXU4IGNsZWFudXBfcnhfcmVvcmRlcl90Ymw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICh0eXBlID09IFRZUEVfREVMQkFfUkVDRUlWRSkKKwkJY2xlYW51cF9yeF9yZW9yZGVyX3RibCA9IChpbml0aWF0b3IpID8gdHJ1ZSA6IGZhbHNlOworCWVsc2UKKwkJY2xlYW51cF9yeF9yZW9yZGVyX3RibCA9IChpbml0aWF0b3IpID8gZmFsc2UgOiB0cnVlOworCisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJldmVudDogREVMQkE6ICVwTSB0aWQ9JWQsICIKKwkgICAgICAgImluaXRpYXRvcj0lZFxuIiwgcGVlcl9tYWMsIHRpZCwgaW5pdGlhdG9yKTsKKworCWlmIChjbGVhbnVwX3J4X3Jlb3JkZXJfdGJsKSB7CisJCXJ4X3Jlb3JfdGJsX3B0ciA9IG13aWZpZXhfMTFuX2dldF9yeF9yZW9yZGVyX3RibChwcml2LCB0aWQsCisJCQkJCQkJCSBwZWVyX21hYyk7CisJCWlmICghcnhfcmVvcl90YmxfcHRyKSB7CisJCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwKKwkJCQkJImV2ZW50OiBUSUQsIFRBIG5vdCBmb3VuZCBpbiB0YWJsZVxuIik7CisJCQlyZXR1cm47CisJCX0KKwkJbXdpZmlleF8xMW5fZGVsZXRlX3J4X3Jlb3JkZXJfdGJsX2VudHJ5KHByaXYsIHJ4X3Jlb3JfdGJsX3B0cik7CisJfSBlbHNlIHsKKwkJcHR4X3RibCA9IG13aWZpZXhfMTFuX2dldF90eF9iYV9zdHJlYW1fdGJsKHByaXYsIHRpZCwgcGVlcl9tYWMpOworCQlpZiAoIXB0eF90YmwpIHsKKwkJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJCQkiZXZlbnQ6IFRJRCwgUkEgbm90IGZvdW5kIGluIHRhYmxlXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eF9iYV9zdHJlYW1fdGJsX2xvY2ssIGZsYWdzKTsKKwkJbXdpZmlleF8xMW5fZGVsZXRlX3R4X2JhX3N0cmVhbV90YmxfZW50cnkocHJpdiwgcHR4X3RibCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X2JhX3N0cmVhbV90YmxfbG9jaywgZmxhZ3MpOworCX0KK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgY29tbWFuZCByZXNwb25zZSBvZiBhbiBhZGQgQkEgcmVzcG9uc2UuCisgKgorICogSGFuZGxpbmcgaW5jbHVkZXMgY2hhbmdpbmcgdGhlIGhlYWRlciBmaWVsZHMgaW50byBDUFUgZm9ybWF0IGFuZAorICogY3JlYXRpbmcgdGhlIHN0cmVhbSwgcHJvdmlkZWQgdGhlIGFkZCBCQSBpcyBhY2NlcHRlZC4KKyAqLworaW50IG13aWZpZXhfcmV0XzExbl9hZGRiYV9yZXNwKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3ApCit7CisJc3RydWN0IGhvc3RfY21kX2RzXzExbl9hZGRiYV9yc3AgKmFkZF9iYV9yc3AgPQorCQkoc3RydWN0IGhvc3RfY21kX2RzXzExbl9hZGRiYV9yc3AgKikKKwkJJnJlc3AtPnBhcmFtcy5hZGRfYmFfcnNwOworCWludCB0aWQsIHdpbl9zaXplOworCXN0cnVjdCBtd2lmaWV4X3J4X3Jlb3JkZXJfdGJsICpyeF9yZW9yX3RibF9wdHI7CisJdWludDE2X3QgYmxvY2tfYWNrX3BhcmFtX3NldDsKKworCWJsb2NrX2Fja19wYXJhbV9zZXQgPSBsZTE2X3RvX2NwdShhZGRfYmFfcnNwLT5ibG9ja19hY2tfcGFyYW1fc2V0KTsKKworCXRpZCA9IChibG9ja19hY2tfcGFyYW1fc2V0ICYgSUVFRTgwMjExX0FEREJBX1BBUkFNX1RJRF9NQVNLKQorCQk+PiBCTE9DS0FDS1BBUkFNX1RJRF9QT1M7CisJLyoKKwkgKiBDaGVjayBpZiB3ZSBoYWQgcmVqZWN0ZWQgdGhlIEFEREJBLCBpZiB5ZXMgdGhlbiBkbyBub3QgY3JlYXRlCisJICogdGhlIHN0cmVhbQorCSAqLworCWlmIChsZTE2X3RvX2NwdShhZGRfYmFfcnNwLT5zdGF0dXNfY29kZSkgPT0gQkFfUkVTVUxUX1NVQ0NFU1MpIHsKKwkJd2luX3NpemUgPSAoYmxvY2tfYWNrX3BhcmFtX3NldCAmCisJCQlJRUVFODAyMTFfQUREQkFfUEFSQU1fQlVGX1NJWkVfTUFTSykKKwkJCT4+IEJMT0NLQUNLUEFSQU1fV0lOU0laRV9QT1M7CisKKwkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJjbWQ6IEFEREJBIFJTUDogJXBNIgorCQkgICAgICAgIiB0aWQ9JWQgc3NuPSVkIHdpbl9zaXplPSVkXG4iLAorCQkgICAgICAgYWRkX2JhX3JzcC0+cGVlcl9tYWNfYWRkciwKKwkJICAgICAgIHRpZCwgYWRkX2JhX3JzcC0+c3NuLCB3aW5fc2l6ZSk7CisJfSBlbHNlIHsKKwkJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsICJBRERCQSBSU1A6IGZhaWxlZCAlcE0gdGlkPSVkKVxuIiwKKwkJCQkJYWRkX2JhX3JzcC0+cGVlcl9tYWNfYWRkciwgdGlkKTsKKworCQlyeF9yZW9yX3RibF9wdHIgPSBtd2lmaWV4XzExbl9nZXRfcnhfcmVvcmRlcl90YmwocHJpdiwKKwkJCQkJdGlkLCBhZGRfYmFfcnNwLT5wZWVyX21hY19hZGRyKTsKKwkJaWYgKHJ4X3Jlb3JfdGJsX3B0cikKKwkJCW13aWZpZXhfMTFuX2RlbGV0ZV9yeF9yZW9yZGVyX3RibF9lbnRyeShwcml2LAorCQkJCXJ4X3Jlb3JfdGJsX3B0cik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgQkEgc3RyZWFtIHRpbWVvdXQgZXZlbnQgYnkgcHJlcGFyaW5nIGFuZCBzZW5kaW5nCisgKiBhIGNvbW1hbmQgdG8gdGhlIGZpcm13YXJlLgorICovCit2b2lkIG13aWZpZXhfMTFuX2JhX3N0cmVhbV90aW1lb3V0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJICAgc3RydWN0IGhvc3RfY21kX2RzXzExbl9iYXRpbWVvdXQgKmV2ZW50KQoreworCXN0cnVjdCBob3N0X2NtZF9kc18xMW5fZGVsYmEgZGVsYmE7CisKKwltZW1zZXQoJmRlbGJhLCAwLCBzaXplb2Yoc3RydWN0IGhvc3RfY21kX2RzXzExbl9kZWxiYSkpOworCW1lbWNweShkZWxiYS5wZWVyX21hY19hZGRyLCBldmVudC0+cGVlcl9tYWNfYWRkciwgRVRIX0FMRU4pOworCisJZGVsYmEuZGVsX2JhX3BhcmFtX3NldCB8PQorCQljcHVfdG9fbGUxNigodTE2KSBldmVudC0+dGlkIDw8IERFTEJBX1RJRF9QT1MpOworCWRlbGJhLmRlbF9iYV9wYXJhbV9zZXQgfD0gY3B1X3RvX2xlMTYoCisJCSh1MTYpIGV2ZW50LT5vcmlnbmluYXRvciA8PCBERUxCQV9JTklUSUFUT1JfUE9TKTsKKwlkZWxiYS5yZWFzb25fY29kZSA9IGNwdV90b19sZTE2KFdMQU5fUkVBU09OX1FTVEFfVElNRU9VVCk7CisJbXdpZmlleF9zZW5kX2NtZF9hc3luYyhwcml2LCBIb3N0Q21kX0NNRF8xMU5fREVMQkEsIDAsIDAsICZkZWxiYSk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNsZWFucyB1cCB0aGUgUnggcmVvcmRlciB0YWJsZSBieSBkZWxldGluZyBhbGwgdGhlIGVudHJpZXMKKyAqIGFuZCByZS1pbml0aWFsaXppbmcuCisgKi8KK3ZvaWQgbXdpZmlleF8xMW5fY2xlYW51cF9yZW9yZGVyX3RibChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KQoreworCXN0cnVjdCBtd2lmaWV4X3J4X3Jlb3JkZXJfdGJsICpkZWxfdGJsX3B0ciwgKnRtcF9ub2RlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfcmVvcmRlcl90YmxfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZWxfdGJsX3B0ciwgdG1wX25vZGUsCisJCQkJICZwcml2LT5yeF9yZW9yZGVyX3RibF9wdHIsIGxpc3QpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cnhfcmVvcmRlcl90YmxfbG9jaywgZmxhZ3MpOworCQltd2lmaWV4XzExbl9kZWxldGVfcnhfcmVvcmRlcl90YmxfZW50cnkocHJpdiwgZGVsX3RibF9wdHIpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfcmVvcmRlcl90YmxfbG9jaywgZmxhZ3MpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9yZW9yZGVyX3RibF9sb2NrLCBmbGFncyk7CisKKwlJTklUX0xJU1RfSEVBRCgmcHJpdi0+cnhfcmVvcmRlcl90YmxfcHRyKTsKKwltZW1zZXQocHJpdi0+cnhfc2VxLCAwLCBzaXplb2YocHJpdi0+cnhfc2VxKSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4LzExbl9yeHJlb3JkZXIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvMTFuX3J4cmVvcmRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzY2E4YzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4LzExbl9yeHJlb3JkZXIuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogTWFydmVsbCBXaXJlbGVzcyBMQU4gZGV2aWNlIGRyaXZlcjogODAyLjExbiBSWCBSZS1vcmRlcmluZworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQKKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKyAqLworCisjaWZuZGVmIF9NV0lGSUVYXzExTl9SWFJFT1JERVJfSF8KKyNkZWZpbmUgX01XSUZJRVhfMTFOX1JYUkVPUkRFUl9IXworCisjZGVmaW5lIE1JTl9GTFVTSF9USU1FUl9NUwkJNTAKKworI2RlZmluZSBQS1RfVFlQRV9CQVIgMHhFNworI2RlZmluZSBNQVhfVElEX1ZBTFVFCQkJKDIgPDwgMTEpCisjZGVmaW5lIFRXT1BPVzExCQkJKDIgPDwgMTApCisKKyNkZWZpbmUgQkxPQ0tBQ0tQQVJBTV9USURfUE9TCQkyCisjZGVmaW5lIEJMT0NLQUNLUEFSQU1fQU1TRFVfU1VQUF9NQVNLCTB4MQorI2RlZmluZSBCTE9DS0FDS1BBUkFNX1dJTlNJWkVfUE9TCTYKKyNkZWZpbmUgREVMQkFfVElEX1BPUwkJCTEyCisjZGVmaW5lIERFTEJBX0lOSVRJQVRPUl9QT1MJCTExCisjZGVmaW5lIFRZUEVfREVMQkFfU0VOVAkJCTEKKyNkZWZpbmUgVFlQRV9ERUxCQV9SRUNFSVZFCQkyCisjZGVmaW5lIElNTUVESUFURV9CTE9DS19BQ0sJCTB4MgorCisjZGVmaW5lIEFEREJBX1JTUF9TVEFUVVNfQUNDRVBUIDAKKworaW50IG13aWZpZXhfMTFuX3J4X3Jlb3JkZXJfcGt0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKiwKKwkJCSAgICAgICB1MTYgc2VxTnVtLAorCQkJICAgICAgIHUxNiB0aWQsIHU4ICp0YSwKKwkJCSAgICAgICB1OCBwa3R0eXBlLCB2b2lkICpwYXlsb2FkKTsKK3ZvaWQgbXdpZmlleF8xMW5fZGVsZXRlX2JhX3N0cmVhbV90Ymwoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgaW50IFRpZCwKKwkJCQkgICAgIHU4ICpQZWVyTUFDQWRkciwgdTggdHlwZSwKKwkJCQkgICAgIGludCBpbml0aWF0b3IpOwordm9pZCBtd2lmaWV4XzExbl9iYV9zdHJlYW1fdGltZW91dChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCSAgIHN0cnVjdCBob3N0X2NtZF9kc18xMW5fYmF0aW1lb3V0ICpldmVudCk7CitpbnQgbXdpZmlleF9yZXRfMTFuX2FkZGJhX3Jlc3Aoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZAorCQkJICAgICAgICpyZXNwKTsKK2ludCBtd2lmaWV4X2NtZF8xMW5fZGVsYmEoc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwKKwkJCSAgdm9pZCAqZGF0YV9idWYpOworaW50IG13aWZpZXhfY21kXzExbl9hZGRiYV9yc3BfZ2VuKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZAorCQkJCSAgKmNtZCwgdm9pZCAqZGF0YV9idWYpOworaW50IG13aWZpZXhfY21kXzExbl9hZGRiYV9yZXEoc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwKKwkJCSAgICAgIHZvaWQgKmRhdGFfYnVmKTsKK3ZvaWQgbXdpZmlleF8xMW5fY2xlYW51cF9yZW9yZGVyX3RibChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KTsKK3N0cnVjdCBtd2lmaWV4X3J4X3Jlb3JkZXJfdGJsICptd2lmaWV4XzExbl9nZXRfcnhyZW9yZGVyX3RibChzdHJ1Y3QKKwkJCQkJCQkgICBtd2lmaWV4X3ByaXZhdGUKKwkJCQkJCQkgICAqcHJpdiwgaW50IHRpZCwKKwkJCQkJCQkgICB1OCAqdGEpOworCisjZW5kaWYgLyogX01XSUZJRVhfMTFOX1JYUkVPUkRFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2OTYyOTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L0tjb25maWcKQEAgLTAsMCArMSwyMSBAQAorY29uZmlnIE1XSUZJRVgKKwl0cmlzdGF0ZSAiTWFydmVsbCBXaUZpLUV4IERyaXZlciIKKwlkZXBlbmRzIG9uIENGRzgwMjExCisJc2VsZWN0IExJQjgwMjExCisJLS0taGVscC0tLQorCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uIE1hcnZlbGwKKwkgIDgwMi4xMW4gY2hpcHNldHMuCisKKwkgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkCisJICBtd2lmaWV4LgorCitjb25maWcgTVdJRklFWF9TRElPCisJdHJpc3RhdGUgIk1hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIFNEODc4NyIKKwlkZXBlbmRzIG9uIE1XSUZJRVggJiYgTU1DCisJc2VsZWN0IEZXX0xPQURFUgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBNYXJ2ZWxsCisJICA4Nzg3IGNoaXBzZXQgd2l0aCBTRElPIGludGVyZmFjZS4KKworCSAgSWYgeW91IGNob29zZSB0byBidWlsZCBpdCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWQKKwkgIG13aWZpZXhfc2Rpby4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyY2I3MzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L01ha2VmaWxlCkBAIC0wLDAgKzEsNDEgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExLCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorIworIyBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorIyBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKyMgKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbgorIyBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyMgaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQSBvciBvbiB0aGUKKyMgd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorIworIyBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNlIHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dAorIyB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuCisKKworbXdpZmlleC15ICs9IG1haW4ubworbXdpZmlleC15ICs9IGluaXQubworbXdpZmlleC15ICs9IGNmcC5vCittd2lmaWV4LXkgKz0gY21kZXZ0Lm8KK213aWZpZXgteSArPSB1dGlsLm8KK213aWZpZXgteSArPSB0eHJ4Lm8KK213aWZpZXgteSArPSB3bW0ubworbXdpZmlleC15ICs9IDExbi5vCittd2lmaWV4LXkgKz0gMTFuX2FnZ3IubworbXdpZmlleC15ICs9IDExbl9yeHJlb3JkZXIubworbXdpZmlleC15ICs9IHNjYW4ubworbXdpZmlleC15ICs9IGpvaW4ubworbXdpZmlleC15ICs9IHN0YV9pb2N0bC5vCittd2lmaWV4LXkgKz0gc3RhX2NtZC5vCittd2lmaWV4LXkgKz0gc3RhX2NtZHJlc3AubworbXdpZmlleC15ICs9IHN0YV9ldmVudC5vCittd2lmaWV4LXkgKz0gc3RhX3R4Lm8KK213aWZpZXgteSArPSBzdGFfcngubworbXdpZmlleC15ICs9IGNmZzgwMjExLm8KK213aWZpZXgtJChDT05GSUdfREVCVUdfRlMpICs9IGRlYnVnZnMubworb2JqLSQoQ09ORklHX01XSUZJRVgpICs9IG13aWZpZXgubworCittd2lmaWV4X3NkaW8teSArPSBzZGlvLm8KK29iai0kKENPTkZJR19NV0lGSUVYX1NESU8pICs9IG13aWZpZXhfc2Rpby5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L1JFQURNRSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NWJhZGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L1JFQURNRQpAQCAtMCwwICsxLDIwNCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTEsIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisjCisjIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5hdGlvbmFsCisjIEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MQorIyAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisjIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBvZiB3aGljaAorIyBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorIyB3b3JsZHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQuCisjCisjIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0CisjIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCQlVIFMgRSBSICBNIEEgTiBVIEEgTAorCisxKSBGT1IgRFJJVkVSIElOU1RBTEwKKworCWEpIENvcHkgc2Q4Nzg3LmJpbiB0byAvbGliL2Zpcm13YXJlL21ydmwvIGRpcmVjdG9yeSwKKwkgICBjcmVhdGUgdGhlIGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0IGV4aXN0LgorCWIpIEluc3RhbGwgV0xBTiBkcml2ZXIsCisJCWluc21vZCBtd2lmaWV4LmtvCisJYykgVW5pbnN0YWxsIFdMQU4gZHJpdmVyLAorCQlpZmNvbmZpZyBtbGFuWCBkb3duCisJCXJtbW9kIG13aWZpZXgKKworCisyKSBGT1IgRFJJVkVSIENPTkZJR1VSQVRJT04gQU5EIElORk8KKwlUaGUgY29uZmlndXJhdGlvbnMgY2FuIGJlIGRvbmUgZWl0aGVyIHVzaW5nIHRoZSAnaXcnIHVzZXIgc3BhY2UKKwl1dGlsaXR5IG9yIGRlYnVnZnMuCisKKwlhKSAnaXcnIHV0aWxpdHkgY29tbWFuZHMKKworCUZvbGxvd2luZyBhcmUgc29tZSB1c2VmdWwgaXcgY29tbWFuZHM6LQorCitpdyBkZXYgbWxhbjAgc2NhbgorCisJVGhpcyBjb21tYW5kIHdpbGwgdHJpZ2dlciBhIHNjYW4uCisJVGhlIGNvbW1hbmQgd2lsbCB0aGVuIGRpc3BsYXkgdGhlIHNjYW4gdGFibGUgZW50cmllcworCitpdyBkZXYgbWxhbjAgY29ubmVjdCAtdyA8U1NJRD4gWzxmcmVxIGluIE1Iej5dIFs8YnNzaWQ+XSBba2V5IDA6YWJjZGUgZDoxMTIzNDU2Nzg5YV0KKwlUaGUgYWJvdmUgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBjb25uZWN0IHRvIGFuIEFQIHdpdGggYSBwYXJ0aWN1bGFyIFNTSUQuCisJQXAncyBvcGVyYXRpbmcgZnJlcXVlbmN5IGNhbiBiZSBzcGVjaWZpZWQgb3IgZXZlbiB0aGUgYnNzaWQuIElmIHRoZSBBUCBpcyB1c2luZworCVdFUCBlbmNyeXB0aW9uLCB3ZXAga2V5cyBjYW4gYmUgc3BlY2lmaWVkIGluIHRoZSBjb21tYW5kLgorCU5vdGU6IEV2ZXJ5IHRpbWUgYmVmb3JlIGNvbm5lY3RpbmcgdG8gYW4gQVAgc2NhbiBjb21tYW5kIChpdyBkZXYgbWxhbjAgc2Nhbikgc2hvdWxkIGJlIHVzZWQgYnkgdXNlci4KKworaXcgZGV2IG1sYW4wIGRpc2Nvbm5lY3QKKwlUaGlzIGNvbW1hbmQgd2lsbCBiZSB1c2VkIHRvIGRpc2Nvbm5lY3QgZnJvbSBhbiBBUC4KKworCitpdyBkZXYgbWxhbjAgaWJzcyBqb2luIDxTU0lEPiA8ZnJlcSBpbiBNSHo+IFtmaXhlZC1mcmVxXSBbZml4ZWQtYnNzaWRdIFtrZXkgMDphYmNkZV0KKwlUaGUgY29tbWFuZCB3aWxsIGJlIHVzZWQgdG8gam9pbiBvciBjcmVhdGUgYW4gaWJzcy4gT3B0aW9uYWxseSwgb3BlcmF0aW5nIGZyZXF1ZW5jeSwKKwlic3NpZCBhbmQgdGhlIHNlY3VyaXR5IHJlbGF0ZWQgcGFyYW1ldGVycyBjYW4gYmUgc3BlY2lmaWVkIHdoaWxlIGpvaW5pbmcvY3JlYXRpbmcKKwlhbmQgaWJzcy4KKworaXcgZGV2IG1sYW4wIGlic3MgbGVhdmUKKwlUaGUgY29tbWFuZCB3aWxsIGJlIHVzZWQgdG8gbGVhdmUgYW4gaWJzcyBuZXR3b3JrLgorCitpdyBkZXYgbWxhbjAgbGluaworCVRoZSBjb21tYW5kIHdpbGwgYmUgdXNlZCB0byBnZXQgdGhlIGNvbm5lY3Rpb24gc3RhdHVzLiBUaGUgY29tbWFuZCB3aWxsIHJldHVybiBwYXJhbWV0ZXJzCisJc3VjaCBhcyBTU0lELCBvcGVyYXRpbmcgZnJlcXVlbmN5LCByeC90eCBwYWNrZXRzLCBzaWduYWwgc3RyZW5ndGgsIHR4IGJpdHJhdGUuCisKKwlBcGFydCBmcm9tIHRoZSBpdyB1dGlsaXR5IGFsbCBzdGFuZGFyZCBjb25maWd1cmF0aW9ucyB1c2luZyB0aGUgJ2l3Y29uZmlnJyB1dGlsaXR5IGFyZSBhbHNvIHN1cHBvcnRlZC4KKworCWIpIERlYnVnZnMgaW50ZXJmYWNlCisKKwlUaGUgZGVidWdmcyBpbnRlcmZhY2UgY2FuIGJlIHVzZWQgZm9yIGNvbmZpZ3VyYXRpb25zIGFuZCBmb3IgZ2V0dGluZworCXNvbWUgdXNlZnVsIGluZm9ybWF0aW9uIGZyb20gdGhlIGRyaXZlci4KKwlUaGUgc2VjdGlvbiBiZWxvdyBleHBsYWlucyB0aGUgY29uZmlndXJhdGlvbnMgdGhhdCBjYW4gYmUKKwlkb25lLgorCisJTW91bnQgZGVidWdmcyB0byAvZGVidWdmcyBtb3VudCBwb2ludDoKKworCQlta2RpciAvZGVidWdmcworCQltb3VudCAtdCBkZWJ1Z2ZzIGRlYnVnZnMgL2RlYnVnZnMKKworCVRoZSBpbmZvcm1hdGlvbiBpcyBwcm92aWRlZCBpbiAvZGVidWdmcy9td2lmaWV4L21sYW5YLzoKKworaXcgcmVnIHNldCA8Y291bnRyeSBjb2RlPgorCVRoZSBjb21tYW5kIHdpbGwgYmUgdXNlZCB0byBjaGFuZ2UgdGhlIHJlZ3VsYXRvcnkgZG9tYWluLgorCitpdyByZWcgZ2V0CisJVGhlIGNvbW1hbmQgd2lsbCBiZSB1c2VkIHRvIGdldCBjdXJyZW50IHJlZ3VsYXRvcnkgZG9tYWluLgorCitpbmZvCisJVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gZ2V0IGRyaXZlciBpbmZvLgorCisJVXNhZ2U6CisJCWNhdCBpbmZvCisKKwlkcml2ZXJfbmFtZSA9ICJtd2lmaWV4IgorCWRyaXZlcl92ZXJzaW9uID0gPGRyaXZlcl9uYW1lLCBkcml2ZXJfdmVyc2lvbiwgKGZpcm13YXJlX3ZlcnNpb24pPgorCWludGVyZmFjZV9uYW1lID0gIm1sYW5YIgorCWJzc19tb2RlID0gIkFkLWhvYyIgfCAiTWFuYWdlZCIgfCAiQXV0byIgfCAiVW5rbm93biIKKwltZWRpYV9zdGF0ZSA9ICJEaXNjb25uZWN0ZWQiIHwgIkNvbm5lY3RlZCIKKwltYWNfYWRkcmVzcyA9IDw2LWJ5dGUgYWRhcHRlciBNQUMgYWRkcmVzcz4KKwltdWx0aWNhc2VfY291bnQgPSA8bXVsdGljYXN0IGFkZHJlc3MgY291bnQ+CisJZXNzaWQgPSA8Y3VycmVudCBTU0lEPgorCWJzc2lkID0gPGN1cnJlbnQgQlNTSUQ+CisJY2hhbm5lbCA9IDxjdXJyZW50IGNoYW5uZWw+CisJcmVnaW9uX2NvZGUgPSA8Y3VycmVudCByZWdpb24gY29kZT4KKwltdWx0aWNhc3JfYWRkcmVzc1tuXSA9IDxtdWx0aWNhc3QgYWRkcmVzcz4KKwludW1fdHhfYnl0ZXMgPSA8bnVtYmVyIG9mIGJ5dGVzIHNlbnQgdG8gZGV2aWNlPgorCW51bV9yeF9ieXRlcyA9IDxudW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgZnJvbSBkZXZpY2UgYW5kIHNlbnQgdG8ga2VybmVsPgorCW51bV90eF9wa3RzID0gPG51bWJlciBvZiBwYWNrZXRzIHNlbnQgdG8gZGV2aWNlPgorCW51bV9yeF9wa3RzID0gPG51bWJlciBvZiBwYWNrZXRzIHJlY2VpdmVkIGZyb20gZGV2aWNlIGFuZCBzZW50IHRvIGtlcm5lbD4KKwludW1fdHhfcGt0c19kcm9wcGVkID0gPG51bWJlciBvZiBUeCBwYWNrZXRzIGRyb3BwZWQgYnkgZHJpdmVyPgorCW51bV9yeF9wa3RzX2Ryb3BwZWQgPSA8bnVtYmVyIG9mIFJ4IHBhY2tldHMgZHJvcHBlZCBieSBkcml2ZXI+CisJbnVtX3R4X3BrdHNfZXJyID0gPG51bWJlciBvZiBUeCBwYWNrZXRzIGZhaWxlZCB0byBzZW5kIHRvIGRldmljZT4KKwludW1fcnhfcGt0c19lcnIgPSA8bnVtYmVyIG9mIFJ4IHBhY2tldHMgZmFpbGVkIHRvIHJlY2VpdmUgZnJvbSBkZXZpY2U+CisJY2FycmllciAib24iIHwgIm9mZiIKKwl0eCBxdWV1ZSAic3RvcHBlZCIgfCAic3RhcnRlZCIKKworCVRoZSBmb2xsb3dpbmcgZGVidWcgaW5mbyBhcmUgcHJvdmlkZWQgaW4gL2RlYnVnZnMvbXdpZmlleC9tbGFuWC9kZWJ1ZzoKKworCWludF9jb3VudGVyID0gPGludGVycnVwdCBjb3VudCwgY2xlYXJlZCB3aGVuIGludGVycnVwdCBoYW5kbGVkPgorCXdtbV9hY192byA9IDxudW1iZXIgb2YgcGFja2V0cyBzZW50IHRvIGRldmljZSBmcm9tIFdNTSBBY1ZvIHF1ZXVlPgorCXdtbV9hY192aSA9IDxudW1iZXIgb2YgcGFja2V0cyBzZW50IHRvIGRldmljZSBmcm9tIFdNTSBBY1ZpIHF1ZXVlPgorCXdtbV9hY19iZSA9IDxudW1iZXIgb2YgcGFja2V0cyBzZW50IHRvIGRldmljZSBmcm9tIFdNTSBBY0JFIHF1ZXVlPgorCXdtbV9hY19iayA9IDxudW1iZXIgb2YgcGFja2V0cyBzZW50IHRvIGRldmljZSBmcm9tIFdNTSBBY0JLIHF1ZXVlPgorCW1heF90eF9idWZfc2l6ZSA9IDxtYXhpbXVtIFR4IGJ1ZmZlciBzaXplPgorCXR4X2J1Zl9zaXplID0gPGN1cnJlbnQgVHggYnVmZmVyIHNpemU+CisJY3Vycl90eF9idWZfc2l6ZSA9IDxjdXJyZW50IFR4IGJ1ZmZlciBzaXplPgorCXBzX21vZGUgPSA8MC8xLCBDQU0gbW9kZS9QUyBtb2RlPgorCXBzX3N0YXRlID0gPDAvMS8yLzMsIGZ1bGwgcG93ZXIgc3RhdGUvYXdha2Ugc3RhdGUvcHJlLXNsZWVwIHN0YXRlL3NsZWVwIHN0YXRlPgorCWlzX2RlZXBfc2xlZXAgPSA8MC8xLCBub3QgZGVlcCBzbGVlcCBzdGF0ZS9kZWVwIHNsZWVwIHN0YXRlPgorCXdha2V1cF9kZXZfcmVxID0gPDAvMSwgd2FrZXVwIGRldmljZSBub3QgcmVxdWlyZWQvcmVxdWlyZWQ+CisJd2FrZXVwX3RyaWVzID0gPHdha2V1cCBkZXZpY2UgY291bnQsIGNsZWFyZWQgd2hlbiBkZXZpY2UgYXdha2U+CisJaHNfY29uZmlndXJlZCA9IDwwLzEsIGhvc3Qgc2xlZXAgbm90IGNvbmZpZ3VyZWQvY29uZmlndXJlZD4KKwloc19hY3RpdmF0ZWQgPSA8MC8xLCBleHRlbmRlZCBob3N0IHNsZWVwIG5vdCBhY3RpdmF0ZWQvYWN0aXZhdGVkPgorCW51bV90eF90aW1lb3V0ID0gPG51bWJlciBvZiBUeCB0aW1lb3V0PgorCW51bV9jbWRfdGltZW91dCA9IDxudW1iZXIgb2YgdGltZW91dCBjb21tYW5kcz4KKwl0aW1lb3V0X2NtZF9pZCA9IDxjb21tYW5kIGlkIG9mIHRoZSBsYXN0IHRpbWVvdXQgY29tbWFuZD4KKwl0aW1lb3V0X2NtZF9hY3QgPSA8Y29tbWFuZCBhY3Rpb24gb2YgdGhlIGxhc3QgdGltZW91dCBjb21tYW5kPgorCWxhc3RfY21kX2lkID0gPGNvbW1hbmQgaWQgb2YgdGhlIGxhc3Qgc2V2ZXJhbCBjb21tYW5kcyBzZW50IHRvIGRldmljZT4KKwlsYXN0X2NtZF9hY3QgPSA8Y29tbWFuZCBhY3Rpb24gb2YgdGhlIGxhc3Qgc2V2ZXJhbCBjb21tYW5kcyBzZW50IHRvIGRldmljZT4KKwlsYXN0X2NtZF9pbmRleCA9IDwwIGJhc2VkIGxhc3QgY29tbWFuZCBpbmRleD4KKwlsYXN0X2NtZF9yZXNwX2lkID0gPGNvbW1hbmQgaWQgb2YgdGhlIGxhc3Qgc2V2ZXJhbCBjb21tYW5kIHJlc3BvbnNlcyByZWNlaXZlZCBmcm9tIGRldmljZT4KKwlsYXN0X2NtZF9yZXNwX2luZGV4ID0gPDAgYmFzZWQgbGFzdCBjb21tYW5kIHJlc3BvbnNlIGluZGV4PgorCWxhc3RfZXZlbnQgPSA8ZXZlbnQgaWQgb2YgdGhlIGxhc3Qgc2V2ZXJhbCBldmVudHMgcmVjZWl2ZWQgZnJvbSBkZXZpY2U+CisJbGFzdF9ldmVudF9pbmRleCA9IDwwIGJhc2VkIGxhc3QgZXZlbnQgaW5kZXg+CisJbnVtX2NtZF9oMmNfZmFpbCA9IDxudW1iZXIgb2YgY29tbWFuZHMgZmFpbGVkIHRvIHNlbmQgdG8gZGV2aWNlPgorCW51bV9jbWRfc2xlZXBfY2ZtX2ZhaWwgPSA8bnVtYmVyIG9mIHNsZWVwIGNvbmZpcm0gZmFpbGVkIHRvIHNlbmQgdG8gZGV2aWNlPgorCW51bV90eF9oMmNfZmFpbCA9IDxudW1iZXIgb2YgZGF0YSBwYWNrZXRzIGZhaWxlZCB0byBzZW5kIHRvIGRldmljZT4KKwludW1fZXZ0X2RlYXV0aCA9IDxudW1iZXIgb2YgZGVhdXRoZW50aWNhdGVkIGV2ZW50cyByZWNlaXZlZCBmcm9tIGRldmljZT4KKwludW1fZXZ0X2Rpc2Fzc29jID0gPG51bWJlciBvZiBkaXNhc3NvY2lhdGVkIGV2ZW50cyByZWNlaXZlZCBmcm9tIGRldmljZT4KKwludW1fZXZ0X2xpbmtfbG9zdCA9IDxudW1iZXIgb2YgbGluayBsb3N0IGV2ZW50cyByZWNlaXZlZCBmcm9tIGRldmljZT4KKwludW1fY21kX2RlYXV0aCA9IDxudW1iZXIgb2YgZGVhdXRoZW50aWNhdGUgY29tbWFuZHMgc2VudCB0byBkZXZpY2U+CisJbnVtX2NtZF9hc3NvY19vayA9IDxudW1iZXIgb2YgYXNzb2NpYXRlIGNvbW1hbmRzIHdpdGggc3VjY2VzcyByZXR1cm4+CisJbnVtX2NtZF9hc3NvY19mYWlsID0gPG51bWJlciBvZiBhc3NvY2lhdGUgY29tbWFuZHMgd2l0aCBmYWlsdXJlIHJldHVybj4KKwljbWRfc2VudCA9IDwwLzEsIHNlbmQgY29tbWFuZCByZXNvdXJjZXMgYXZhaWxhYmxlL3NlbmRpbmcgY29tbWFuZCB0byBkZXZpY2U+CisJZGF0YV9zZW50ID0gPDAvMSwgc2VuZCBkYXRhIHJlc291cmNlcyBhdmFpbGFibGUvc2VuZGluZyBkYXRhIHRvIGRldmljZT4KKwltcF9yZF9iaXRtYXAgPSA8U0RJTyBtdWx0aS1wb3J0IHJlYWQgYml0bWFwPgorCW1wX3dyX2JpdG1hcCA9IDxTRElPIG11bHRpLXBvcnQgd3JpdGUgYml0bWFwPgorCWNtZF9yZXNwX3JlY2VpdmVkID0gPDAvMSwgbm8gY21kIHJlc3BvbnNlIHRvIHByb2Nlc3MvcmVzcG9uc2UgcmVjZWl2ZWQgYW5kIHlldCB0byBwcm9jZXNzPgorCWV2ZW50X3JlY2VpdmVkID0gPDAvMSwgbm8gZXZlbnQgdG8gcHJvY2Vzcy9ldmVudCByZWNlaXZlZCBhbmQgeWV0IHRvIHByb2Nlc3M+CisJY21kX3BlbmRpbmcgPSA8bnVtYmVyIG9mIGNtZCBwZW5kaW5nPgorCXR4X3BlbmRpbmcgPSA8bnVtYmVyIG9mIFR4IHBhY2tldCBwZW5kaW5nPgorCXJ4X3BlbmRpbmcgPSA8bnVtYmVyIG9mIFJ4IHBhY2tldCBwZW5kaW5nPgorCisKKzMpIEZPUiBEUklWRVIgQ09ORklHVVJBVElPTgorCityZWdyZHdyCisJVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gcmVhZC93cml0ZSB0aGUgYWRhcHRlciByZWdpc3Rlci4KKworCVVzYWdlOgorCQllY2hvICIgPHR5cGU+IDxvZmZzZXQ+IFt2YWx1ZV0iID4gcmVncmR3cgorCQljYXQgcmVncmR3cgorCisJd2hlcmUgdGhlIHBhcmFtZXRlcnMgYXJlLAorCQk8dHlwZT46ICAgICAxOk1BQy9TT0MsIDI6QkJQLCAzOlJGLCA0OlBNSUMsIDU6Q0FVCisJCTxvZmZzZXQ+OiAgIG9mZnNldCBvZiByZWdpc3RlcgorCQlbdmFsdWVdOiAgICB2YWx1ZSB0byBiZSB3cml0dGVuCisKKwlFeGFtcGxlczoKKwkJZWNobyAiMSAweGEwNjAiID4gcmVncmR3ciAgICAgICAgICAgOiBSZWFkIHRoZSBNQUMgcmVnaXN0ZXIKKwkJZWNobyAiMSAweGEwNjAgMHgxMiIgPiByZWdyZHdyICAgICAgOiBXcml0ZSB0aGUgTUFDIHJlZ2lzdGVyCisJCWVjaG8gIjEgMHhhNzk0IDB4ODAwMDAwMDAiID4gcmVncmR3cgorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFdyaXRlIDB4ODAwMDAwMDAgdG8gTUFDIHJlZ2lzdGVyCityZGVlcHJvbQorCVRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHJlYWQgdGhlIEVFUFJPTSBjb250ZW50cyBvZiB0aGUgY2FyZC4KKworCVVzYWdlOgorCQllY2hvICI8b2Zmc2V0PiA8bGVuZ3RoPiIgPiByZGVlcHJvbQorCQljYXQgcmRlZXByb20KKworCXdoZXJlIHRoZSBwYXJhbWV0ZXJzIGFyZSwKKwkJPG9mZnNldD46ICAgbXVsdGlwbGVzIG9mIDQKKwkJPGxlbmd0aD46ICAgNC0yMCwgbXVsdGlwbGVzIG9mIDQKKworCUV4YW1wbGU6CisJCWVjaG8gIjAgMjAiID4gcmRlZXByb20gICAgICA6IFJlYWQgMjAgYnl0ZXMgb2YgRUVQUk9NIGRhdGEgZnJvbSBvZmZzZXQgMAorCitnZXRsb2cKKyAgICAgICAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gZ2V0IHRoZSBzdGF0aXN0aWNzIGF2YWlsYWJsZSBpbiB0aGUgc3RhdGlvbi4KKwlVc2FnZToKKworCWNhdCBnZXRsb2cKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9jZmc4MDIxMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MDgzMWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2NmZzgwMjExLmMKQEAgLTAsMCArMSwxNDE3IEBACisvKgorICogTWFydmVsbCBXaXJlbGVzcyBMQU4gZGV2aWNlIGRyaXZlcjogQ0ZHODAyMTEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwKKyAqIEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MQorICogKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbgorICogYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoCisgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQSBvciBvbiB0aGUKKyAqIHdvcmxkd2lkZSB3ZWIgYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dC4KKyAqCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0CisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuCisgKi8KKworI2luY2x1ZGUgImNmZzgwMjExLmgiCisjaW5jbHVkZSAibWFpbi5oIgorCisvKgorICogVGhpcyBmdW5jdGlvbiBtYXBzIHRoZSBubDgwMi4xMSBjaGFubmVsIHR5cGUgaW50byBkcml2ZXIgY2hhbm5lbCB0eXBlLgorICoKKyAqIFRoZSBtYXBwaW5nIGlzIGFzIGZvbGxvd3MgLQorICogICAgICBOTDgwMjExX0NIQU5fTk9fSFQgICAgIC0+IE5PX1NFQ19DSEFOTkVMCisgKiAgICAgIE5MODAyMTFfQ0hBTl9IVDIwICAgICAgLT4gTk9fU0VDX0NIQU5ORUwKKyAqICAgICAgTkw4MDIxMV9DSEFOX0hUNDBQTFVTICAtPiBTRUNfQ0hBTk5FTF9BQk9WRQorICogICAgICBOTDgwMjExX0NIQU5fSFQ0ME1JTlVTIC0+IFNFQ19DSEFOTkVMX0JFTE9XCisgKiAgICAgIE90aGVycyAgICAgICAgICAgICAgICAgLT4gTk9fU0VDX0NIQU5ORUwKKyAqLworc3RhdGljIGludAorbXdpZmlleF9jZmc4MDIxMV9jaGFubmVsX3R5cGVfdG9fbXdpZmlleF9jaGFubmVscyhlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlCisJCQkJCQkgIGNoYW5uZWxfdHlwZSkKK3sKKwlzd2l0Y2ggKGNoYW5uZWxfdHlwZSkgeworCWNhc2UgTkw4MDIxMV9DSEFOX05PX0hUOgorCWNhc2UgTkw4MDIxMV9DSEFOX0hUMjA6CisJCXJldHVybiBOT19TRUNfQ0hBTk5FTDsKKwljYXNlIE5MODAyMTFfQ0hBTl9IVDQwUExVUzoKKwkJcmV0dXJuIFNFQ19DSEFOTkVMX0FCT1ZFOworCWNhc2UgTkw4MDIxMV9DSEFOX0hUNDBNSU5VUzoKKwkJcmV0dXJuIFNFQ19DSEFOTkVMX0JFTE9XOworCWRlZmF1bHQ6CisJCXJldHVybiBOT19TRUNfQ0hBTk5FTDsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIG1hcHMgdGhlIGRyaXZlciBjaGFubmVsIHR5cGUgaW50byBubDgwMi4xMSBjaGFubmVsIHR5cGUuCisgKgorICogVGhlIG1hcHBpbmcgaXMgYXMgZm9sbG93cyAtCisgKiAgICAgIE5PX1NFQ19DSEFOTkVMICAgICAgLT4gTkw4MDIxMV9DSEFOX0hUMjAKKyAqICAgICAgU0VDX0NIQU5ORUxfQUJPVkUgICAtPiBOTDgwMjExX0NIQU5fSFQ0MFBMVVMKKyAqICAgICAgU0VDX0NIQU5ORUxfQkVMT1cgICAtPiBOTDgwMjExX0NIQU5fSFQ0ME1JTlVTCisgKiAgICAgIE90aGVycyAgICAgICAgICAgICAgLT4gTkw4MDIxMV9DSEFOX0hUMjAKKyAqLworc3RhdGljIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUKK213aWZpZXhfY2hhbm5lbHNfdG9fY2ZnODAyMTFfY2hhbm5lbF90eXBlKGludCBjaGFubmVsX3R5cGUpCit7CisJc3dpdGNoIChjaGFubmVsX3R5cGUpIHsKKwljYXNlIE5PX1NFQ19DSEFOTkVMOgorCQlyZXR1cm4gTkw4MDIxMV9DSEFOX0hUMjA7CisJY2FzZSBTRUNfQ0hBTk5FTF9BQk9WRToKKwkJcmV0dXJuIE5MODAyMTFfQ0hBTl9IVDQwUExVUzsKKwljYXNlIFNFQ19DSEFOTkVMX0JFTE9XOgorCQlyZXR1cm4gTkw4MDIxMV9DSEFOX0hUNDBNSU5VUzsKKwlkZWZhdWx0OgorCQlyZXR1cm4gTkw4MDIxMV9DSEFOX0hUMjA7CisJfQorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciBXRVAgaXMgc2V0LgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X2lzX2FsZ193ZXAodTMyIGNpcGhlcikKK3sKKwlzd2l0Y2ggKGNpcGhlcikgeworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ6CisJCXJldHVybiAxOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIHByaXZhdGUgc3RydWN0dXJlIGZyb20ga2VybmVsIHdpcGh5IHN0cnVjdHVyZS4KKyAqLworc3RhdGljIHZvaWQgKm13aWZpZXhfY2ZnODAyMTFfZ2V0X3ByaXYoc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwlyZXR1cm4gKHZvaWQgKikgKCoodW5zaWduZWQgbG9uZyAqKSB3aXBoeV9wcml2KHdpcGh5KSk7Cit9CisKKy8qCisgKiBDRkc4MDIuMTEgb3BlcmF0aW9uIGhhbmRsZXIgdG8gZGVsZXRlIGEgbmV0d29yayBrZXkuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfY2ZnODAyMTFfZGVsX2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJIHU4IGtleV9pbmRleCwgYm9vbCBwYWlyd2lzZSwgY29uc3QgdTggKm1hY19hZGRyKQoreworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBtd2lmaWV4X2NmZzgwMjExX2dldF9wcml2KHdpcGh5KTsKKworCWlmIChtd2lmaWV4X3NldF9lbmNvZGUocHJpdiwgTlVMTCwgMCwga2V5X2luZGV4LCAxKSkgeworCQl3aXBoeV9lcnIod2lwaHksICJkZWxldGluZyB0aGUgY3J5cHRvIGtleXNcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwl3aXBoeV9kYmcod2lwaHksICJpbmZvOiBjcnlwdG8ga2V5cyBkZWxldGVkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENGRzgwMi4xMSBvcGVyYXRpb24gaGFuZGxlciB0byBzZXQgVHggcG93ZXIuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfY2ZnODAyMTFfc2V0X3R4X3Bvd2VyKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgICAgICBlbnVtIG5sODAyMTFfdHhfcG93ZXJfc2V0dGluZyB0eXBlLAorCQkJICAgICAgaW50IGRibSkKK3sKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0gbXdpZmlleF9jZmc4MDIxMV9nZXRfcHJpdih3aXBoeSk7CisJc3RydWN0IG13aWZpZXhfcG93ZXJfY2ZnIHBvd2VyX2NmZzsKKworCWlmICh0eXBlID09IE5MODAyMTFfVFhfUE9XRVJfRklYRUQpIHsKKwkJcG93ZXJfY2ZnLmlzX3Bvd2VyX2F1dG8gPSAwOworCQlwb3dlcl9jZmcucG93ZXJfbGV2ZWwgPSBkYm07CisJfSBlbHNlIHsKKwkJcG93ZXJfY2ZnLmlzX3Bvd2VyX2F1dG8gPSAxOworCX0KKworCXJldHVybiBtd2lmaWV4X3NldF90eF9wb3dlcihwcml2LCAmcG93ZXJfY2ZnKTsKK30KKworLyoKKyAqIENGRzgwMi4xMSBvcGVyYXRpb24gaGFuZGxlciB0byBzZXQgUG93ZXIgU2F2ZSBvcHRpb24uCisgKgorICogVGhlIHRpbWVvdXQgdmFsdWUsIGlmIHByb3ZpZGVkLCBpcyBjdXJyZW50bHkgaWdub3JlZC4KKyAqLworc3RhdGljIGludAorbXdpZmlleF9jZmc4MDIxMV9zZXRfcG93ZXJfbWdtdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJYm9vbCBlbmFibGVkLCBpbnQgdGltZW91dCkKK3sKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0gbXdpZmlleF9jZmc4MDIxMV9nZXRfcHJpdih3aXBoeSk7CisJdTMyIHBzX21vZGU7CisKKwlpZiAodGltZW91dCkKKwkJd2lwaHlfZGJnKHdpcGh5LAorCQkJImluZm86IGlnbm9yaW5nIHRoZSB0aW1lb3V0IHZhbHVlIgorCQkJIiBmb3IgSUVFRSBwb3dlciBzYXZlXG4iKTsKKworCXBzX21vZGUgPSBlbmFibGVkOworCisJcmV0dXJuIG13aWZpZXhfZHJ2X3NldF9wb3dlcihwcml2LCAmcHNfbW9kZSk7Cit9CisKKy8qCisgKiBDRkc4MDIuMTEgb3BlcmF0aW9uIGhhbmRsZXIgdG8gc2V0IHRoZSBkZWZhdWx0IG5ldHdvcmsga2V5LgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X2NmZzgwMjExX3NldF9kZWZhdWx0X2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSB1OCBrZXlfaW5kZXgsIGJvb2wgdW5pY2FzdCwKKwkJCQkgYm9vbCBtdWx0aWNhc3QpCit7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9IG13aWZpZXhfY2ZnODAyMTFfZ2V0X3ByaXYod2lwaHkpOworCisJLyogUmV0dXJuIGlmIFdFUCBrZXkgbm90IGNvbmZpZ3VyZWQgKi8KKwlpZiAocHJpdi0+c2VjX2luZm8ud2VwX3N0YXR1cyA9PSBNV0lGSUVYXzgwMl8xMV9XRVBfRElTQUJMRUQpCisJCXJldHVybiAwOworCisJaWYgKG13aWZpZXhfc2V0X2VuY29kZShwcml2LCBOVUxMLCAwLCBrZXlfaW5kZXgsIDApKSB7CisJCXdpcGh5X2Vycih3aXBoeSwgInNldCBkZWZhdWx0IFR4IGtleSBpbmRleFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogQ0ZHODAyLjExIG9wZXJhdGlvbiBoYW5kbGVyIHRvIGFkZCBhIG5ldHdvcmsga2V5LgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSB1OCBrZXlfaW5kZXgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkciwKKwkJCSBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBtd2lmaWV4X2NmZzgwMjExX2dldF9wcml2KHdpcGh5KTsKKworCWlmIChtd2lmaWV4X3NldF9lbmNvZGUocHJpdiwgcGFyYW1zLT5rZXksIHBhcmFtcy0+a2V5X2xlbiwKKwkJCQkJCQlrZXlfaW5kZXgsIDApKSB7CisJCXdpcGh5X2Vycih3aXBoeSwgImNyeXB0byBrZXlzIGFkZGVkXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGRvbWFpbiBpbmZvcm1hdGlvbiB0byB0aGUgZmlybXdhcmUuCisgKgorICogVGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhcmUgcGFzc2VkIHRvIHRoZSBmaXJtd2FyZSAtCisgKiAgICAgIC0gQ291bnRyeSBjb2RlcworICogICAgICAtIFN1YiBiYW5kcyAoZmlyc3QgY2hhbm5lbCwgbnVtYmVyIG9mIGNoYW5uZWxzLCBtYXhpbXVtIFR4IHBvd2VyKQorICovCitzdGF0aWMgaW50IG13aWZpZXhfc2VuZF9kb21haW5faW5mb19jbWRfZncoc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwl1OCBub19vZl90cmlwbGV0ID0gMDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvdW50cnlfaWVfdHJpcGxldCAqdDsKKwl1OCBub19vZl9wYXJzZWRfY2hhbiA9IDA7CisJdTggZmlyc3RfY2hhbiA9IDAsIG5leHRfY2hhbiA9IDAsIG1heF9wd3IgPSAwOworCXU4IGksIGZsYWcgPSAwOworCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoOworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBtd2lmaWV4X2NmZzgwMjExX2dldF9wcml2KHdpcGh5KTsKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3QgbXdpZmlleF84MDJfMTFkX2RvbWFpbl9yZWcgKmRvbWFpbl9pbmZvID0gJmFkYXB0ZXItPmRvbWFpbl9yZWc7CisKKwkvKiBTZXQgY291bnRyeSBjb2RlICovCisJZG9tYWluX2luZm8tPmNvdW50cnlfY29kZVswXSA9IHByaXYtPmNvdW50cnlfY29kZVswXTsKKwlkb21haW5faW5mby0+Y291bnRyeV9jb2RlWzFdID0gcHJpdi0+Y291bnRyeV9jb2RlWzFdOworCWRvbWFpbl9pbmZvLT5jb3VudHJ5X2NvZGVbMl0gPSAnICc7CisKKwliYW5kID0gbXdpZmlleF9iYW5kX3RvX3JhZGlvX3R5cGUoYWRhcHRlci0+Y29uZmlnX2JhbmRzKTsKKwlpZiAoIXdpcGh5LT5iYW5kc1tiYW5kXSkgeworCQl3aXBoeV9lcnIod2lwaHksICIxMUQ6IHNldHRpbmcgZG9tYWluIGluZm8gaW4gRldcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJc2JhbmQgPSB3aXBoeS0+YmFuZHNbYmFuZF07CisKKwlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHMgOyBpKyspIHsKKwkJY2ggPSAmc2JhbmQtPmNoYW5uZWxzW2ldOworCQlpZiAoY2gtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpCisJCQljb250aW51ZTsKKworCQlpZiAoIWZsYWcpIHsKKwkJCWZsYWcgPSAxOworCQkJZmlyc3RfY2hhbiA9ICh1MzIpIGNoLT5od192YWx1ZTsKKwkJCW5leHRfY2hhbiA9IGZpcnN0X2NoYW47CisJCQltYXhfcHdyID0gY2gtPm1heF9wb3dlcjsKKwkJCW5vX29mX3BhcnNlZF9jaGFuID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGNoLT5od192YWx1ZSA9PSBuZXh0X2NoYW4gKyAxICYmCisJCQkJY2gtPm1heF9wb3dlciA9PSBtYXhfcHdyKSB7CisJCQluZXh0X2NoYW4rKzsKKwkJCW5vX29mX3BhcnNlZF9jaGFuKys7CisJCX0gZWxzZSB7CisJCQl0ID0gJmRvbWFpbl9pbmZvLT50cmlwbGV0W25vX29mX3RyaXBsZXRdOworCQkJdC0+Y2hhbnMuZmlyc3RfY2hhbm5lbCA9IGZpcnN0X2NoYW47CisJCQl0LT5jaGFucy5udW1fY2hhbm5lbHMgPSBub19vZl9wYXJzZWRfY2hhbjsKKwkJCXQtPmNoYW5zLm1heF9wb3dlciA9IG1heF9wd3I7CisJCQlub19vZl90cmlwbGV0Kys7CisJCQlmaXJzdF9jaGFuID0gKHUzMikgY2gtPmh3X3ZhbHVlOworCQkJbmV4dF9jaGFuID0gZmlyc3RfY2hhbjsKKwkJCW1heF9wd3IgPSBjaC0+bWF4X3Bvd2VyOworCQkJbm9fb2ZfcGFyc2VkX2NoYW4gPSAxOworCQl9CisJfQorCisJaWYgKGZsYWcpIHsKKwkJdCA9ICZkb21haW5faW5mby0+dHJpcGxldFtub19vZl90cmlwbGV0XTsKKwkJdC0+Y2hhbnMuZmlyc3RfY2hhbm5lbCA9IGZpcnN0X2NoYW47CisJCXQtPmNoYW5zLm51bV9jaGFubmVscyA9IG5vX29mX3BhcnNlZF9jaGFuOworCQl0LT5jaGFucy5tYXhfcG93ZXIgPSBtYXhfcHdyOworCQlub19vZl90cmlwbGV0Kys7CisJfQorCisJZG9tYWluX2luZm8tPm5vX29mX3RyaXBsZXQgPSBub19vZl90cmlwbGV0OworCisJaWYgKG13aWZpZXhfc2VuZF9jbWRfYXN5bmMocHJpdiwgSG9zdENtZF9DTURfODAyXzExRF9ET01BSU5fSU5GTywKKwkJCQkgICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsIE5VTEwpKSB7CisJCXdpcGh5X2Vycih3aXBoeSwgIjExRDogc2V0dGluZyBkb21haW4gaW5mbyBpbiBGV1xuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENGRzgwMi4xMSByZWd1bGF0b3J5IGRvbWFpbiBjYWxsYmFjayBmdW5jdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZWd1bGF0b3J5IGRvbWFpbiBpcyBjaGFuZ2VkIGR1ZSB0byB0aGUKKyAqIGZvbGxvd2luZyByZWFzb25zIC0KKyAqICAgICAgLSBTZXQgYnkgZHJpdmVyCisgKiAgICAgIC0gU2V0IGJ5IHN5c3RlbSBjb3JlCisgKiAgICAgIC0gU2V0IGJ5IHVzZXIKKyAqICAgICAgLSBTZXQgYnQgQ291bnRyeSBJRQorICovCitzdGF0aWMgaW50IG13aWZpZXhfcmVnX25vdGlmaWVyKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9IG13aWZpZXhfY2ZnODAyMTFfZ2V0X3ByaXYod2lwaHkpOworCisJd2lwaHlfZGJnKHdpcGh5LCAiaW5mbzogY2ZnODAyMTEgcmVndWxhdG9yeSBkb21haW4gY2FsbGJhY2sgZm9yIGRvbWFpbiIKKwkJCSIgJWMlY1xuIiwgcmVxdWVzdC0+YWxwaGEyWzBdLCByZXF1ZXN0LT5hbHBoYTJbMV0pOworCisJbWVtY3B5KHByaXYtPmNvdW50cnlfY29kZSwgcmVxdWVzdC0+YWxwaGEyLCBzaXplb2YocmVxdWVzdC0+YWxwaGEyKSk7CisKKwlzd2l0Y2ggKHJlcXVlc3QtPmluaXRpYXRvcikgeworCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUjoKKwljYXNlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1JFOgorCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX1VTRVI6CisJCWJyZWFrOworCQkvKiBUb2RvOiBhcHBseSBkcml2ZXIgc3BlY2lmaWMgY2hhbmdlcyBpbiBjaGFubmVsIGZsYWdzIGJhc2VkCisJCSAgIG9uIHRoZSByZXF1ZXN0IGluaXRpYXRvciBpZiBuZWNlc3NhcnkuICovCisJY2FzZSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRToKKwkJYnJlYWs7CisJfQorCW13aWZpZXhfc2VuZF9kb21haW5faW5mb19jbWRfZncod2lwaHkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIFJGIGNoYW5uZWwuCisgKgorICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIG11bHRpcGxlIElPQ1RMIHJlcXVlc3RzLCBwb3B1bGF0ZXMgdGhlbSBhY2NvcmRpbmdseQorICogYW5kIGlzc3VlcyB0aGVtIHRvIHNldCB0aGUgYmFuZC9jaGFubmVsIGFuZCBmcmVxdWVuY3kuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfc2V0X3JmX2NoYW5uZWwoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJICAgICAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlKQoreworCXN0cnVjdCBtd2lmaWV4X2NoYW5fZnJlcV9wb3dlciBjZnA7CisJc3RydWN0IG13aWZpZXhfZHNfYmFuZF9jZmcgYmFuZF9jZmc7CisJdTMyIGNvbmZpZ19iYW5kcyA9IDA7CisJc3RydWN0IHdpcGh5ICp3aXBoeSA9IHByaXYtPndkZXYtPndpcGh5OworCisJaWYgKGNoYW4pIHsKKwkJbWVtc2V0KCZiYW5kX2NmZywgMCwgc2l6ZW9mKGJhbmRfY2ZnKSk7CisJCS8qIFNldCBhcHByb3ByaWF0ZSBiYW5kcyAqLworCQlpZiAoY2hhbi0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKQorCQkJY29uZmlnX2JhbmRzID0gQkFORF9CIHwgQkFORF9HIHwgQkFORF9HTjsKKwkJZWxzZQorCQkJY29uZmlnX2JhbmRzID0gQkFORF9BTiB8IEJBTkRfQTsKKwkJaWYgKHByaXYtPmJzc19tb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04KKwkJICAgIHx8IHByaXYtPmJzc19tb2RlID09IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKSB7CisJCQliYW5kX2NmZy5jb25maWdfYmFuZHMgPSBjb25maWdfYmFuZHM7CisJCX0gZWxzZSBpZiAocHJpdi0+YnNzX21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJCWJhbmRfY2ZnLmNvbmZpZ19iYW5kcyA9IGNvbmZpZ19iYW5kczsKKwkJCWJhbmRfY2ZnLmFkaG9jX3N0YXJ0X2JhbmQgPSBjb25maWdfYmFuZHM7CisJCX0KKworCQliYW5kX2NmZy5zZWNfY2hhbl9vZmZzZXQgPQorCQkJbXdpZmlleF9jZmc4MDIxMV9jaGFubmVsX3R5cGVfdG9fbXdpZmlleF9jaGFubmVscworCQkJKGNoYW5uZWxfdHlwZSk7CisKKwkJaWYgKG13aWZpZXhfc2V0X3JhZGlvX2JhbmRfY2ZnKHByaXYsICZiYW5kX2NmZykpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQltd2lmaWV4X3NlbmRfZG9tYWluX2luZm9fY21kX2Z3KHdpcGh5KTsKKwl9CisKKwl3aXBoeV9kYmcod2lwaHksICJpbmZvOiBzZXR0aW5nIGJhbmQgJWQsIGNoYW5uZWwgb2Zmc2V0ICVkIGFuZCAiCisJCSJtb2RlICVkXG4iLCBjb25maWdfYmFuZHMsIGJhbmRfY2ZnLnNlY19jaGFuX29mZnNldCwKKwkJcHJpdi0+YnNzX21vZGUpOworCWlmICghY2hhbikKKwkJcmV0dXJuIDA7CisKKwltZW1zZXQoJmNmcCwgMCwgc2l6ZW9mKGNmcCkpOworCWNmcC5mcmVxID0gY2hhbi0+Y2VudGVyX2ZyZXE7CisJY2ZwLmNoYW5uZWwgPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoY2hhbi0+Y2VudGVyX2ZyZXEpOworCisJaWYgKG13aWZpZXhfYnNzX3NldF9jaGFubmVsKHByaXYsICZjZnApKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiBtd2lmaWV4X2Rydl9jaGFuZ2VfYWRob2NfY2hhbihwcml2LCBjZnAuY2hhbm5lbCk7Cit9CisKKy8qCisgKiBDRkc4MDIuMTEgb3BlcmF0aW9uIGhhbmRsZXIgdG8gc2V0IGNoYW5uZWwuCisgKgorICogVGhpcyBmdW5jdGlvbiBjYW4gb25seSBiZSB1c2VkIHdoZW4gc3RhdGlvbiBpcyBub3QgY29ubmVjdGVkLgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X2NmZzgwMjExX3NldF9jaGFubmVsKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJCSAgICAgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUpCit7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9IG13aWZpZXhfY2ZnODAyMTFfZ2V0X3ByaXYod2lwaHkpOworCisJaWYgKHByaXYtPm1lZGlhX2Nvbm5lY3RlZCkgeworCQl3aXBoeV9lcnIod2lwaHksICJUaGlzIHNldHRpbmcgaXMgdmFsaWQgb25seSB3aGVuIHN0YXRpb24gIgorCQkJCSJpcyBub3QgY29ubmVjdGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIG13aWZpZXhfc2V0X3JmX2NoYW5uZWwocHJpdiwgY2hhbiwgY2hhbm5lbF90eXBlKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgZnJhZ21lbnRhdGlvbiB0aHJlc2hvbGQuCisgKgorICogVGhlIGZyYWdtZW50YXRpb24gdGhyZXNob2xkIHZhbHVlIG11c3QgbGllIGJldHdlZW4gTVdJRklFWF9GUkFHX01JTl9WQUxVRQorICogYW5kIE1XSUZJRVhfRlJBR19NQVhfVkFMVUUuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfc2V0X2ZyYWcoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTMyIGZyYWdfdGhyKQoreworCWludCByZXQ7CisKKwlpZiAoZnJhZ190aHIgPCBNV0lGSUVYX0ZSQUdfTUlOX1ZBTFVFCisJICAgIHx8IGZyYWdfdGhyID4gTVdJRklFWF9GUkFHX01BWF9WQUxVRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBTZW5kIHJlcXVlc3QgdG8gZmlybXdhcmUgKi8KKwlyZXQgPSBtd2lmaWV4X3NlbmRfY21kX3N5bmMocHJpdiwgSG9zdENtZF9DTURfODAyXzExX1NOTVBfTUlCLAorCQkJCSAgICBIb3N0Q21kX0FDVF9HRU5fU0VULCBGUkFHX1RIUkVTSF9JLAorCQkJCSAgICAmZnJhZ190aHIpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgUlRTIHRocmVzaG9sZC4KKworICogVGhlIHJ0cyB2YWx1ZSBtdXN0IGxpZSBiZXR3ZWVuIE1XSUZJRVhfUlRTX01JTl9WQUxVRQorICogYW5kIE1XSUZJRVhfUlRTX01BWF9WQUxVRS4KKyAqLworc3RhdGljIGludAorbXdpZmlleF9zZXRfcnRzKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHUzMiBydHNfdGhyKQoreworCWlmIChydHNfdGhyIDwgTVdJRklFWF9SVFNfTUlOX1ZBTFVFIHx8IHJ0c190aHIgPiBNV0lGSUVYX1JUU19NQVhfVkFMVUUpCisJCXJ0c190aHIgPSBNV0lGSUVYX1JUU19NQVhfVkFMVUU7CisKKwlyZXR1cm4gbXdpZmlleF9zZW5kX2NtZF9zeW5jKHByaXYsIEhvc3RDbWRfQ01EXzgwMl8xMV9TTk1QX01JQiwKKwkJCQkgICAgSG9zdENtZF9BQ1RfR0VOX1NFVCwgUlRTX1RIUkVTSF9JLAorCQkJCSAgICAmcnRzX3Rocik7Cit9CisKKy8qCisgKiBDRkc4MDIuMTEgb3BlcmF0aW9uIGhhbmRsZXIgdG8gc2V0IHdpcGh5IHBhcmFtZXRlcnMuCisgKgorICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIFJUUyB0aHJlc2hvbGQgYW5kIHRoZQorICogRnJhZ21lbnRhdGlvbiB0aHJlc2hvbGQgb2YgdGhlIGRyaXZlci4KKyAqLworc3RhdGljIGludAorbXdpZmlleF9jZmc4MDIxMV9zZXRfd2lwaHlfcGFyYW1zKHN0cnVjdCB3aXBoeSAqd2lwaHksIHUzMiBjaGFuZ2VkKQoreworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBtd2lmaWV4X2NmZzgwMjExX2dldF9wcml2KHdpcGh5KTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChjaGFuZ2VkICYgV0lQSFlfUEFSQU1fUlRTX1RIUkVTSE9MRCkgeworCQlyZXQgPSBtd2lmaWV4X3NldF9ydHMocHJpdiwgd2lwaHktPnJ0c190aHJlc2hvbGQpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoY2hhbmdlZCAmIFdJUEhZX1BBUkFNX0ZSQUdfVEhSRVNIT0xEKQorCQlyZXQgPSBtd2lmaWV4X3NldF9mcmFnKHByaXYsIHdpcGh5LT5mcmFnX3RocmVzaG9sZCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQ0ZHODAyLjExIG9wZXJhdGlvbiBoYW5kbGVyIHRvIGNoYW5nZSBpbnRlcmZhY2UgdHlwZS4KKyAqLworc3RhdGljIGludAorbXdpZmlleF9jZmc4MDIxMV9jaGFuZ2VfdmlydHVhbF9pbnRmKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlLCB1MzIgKmZsYWdzLAorCQkJCSAgICAgc3RydWN0IHZpZl9wYXJhbXMgKnBhcmFtcykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBtd2lmaWV4X25ldGRldl9nZXRfcHJpdihkZXYpOworCisJaWYgKHByaXYtPmJzc19tb2RlID09IHR5cGUpIHsKKwkJd2lwaHlfd2Fybih3aXBoeSwgImFscmVhZHkgc2V0IHRvIHJlcXVpcmVkIHR5cGVcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlwcml2LT5ic3NfbW9kZSA9IHR5cGU7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQlkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSA9IE5MODAyMTFfSUZUWVBFX0FESE9DOworCQl3aXBoeV9kYmcod2lwaHksICJpbmZvOiBzZXR0aW5nIGludGVyZmFjZSB0eXBlIHRvIGFkaG9jXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CisJCXdpcGh5X2RiZyh3aXBoeSwgImluZm86IHNldHRpbmcgaW50ZXJmYWNlIHR5cGUgdG8gbWFuYWdlZFxuIik7CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ6CisJCWRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlID0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTjsKKwkJd2lwaHlfZGJnKHdpcGh5LCAiaW5mbzogc2V0dGluZyBpbnRlcmZhY2UgdHlwZSB0byBhdXRvXG4iKTsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJd2lwaHlfZXJyKHdpcGh5LCAidW5rbm93biBpbnRlcmZhY2UgdHlwZTogJWRcbiIsIHR5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltd2lmaWV4X2RlYXV0aGVudGljYXRlKHByaXYsIE5VTEwpOworCisJcHJpdi0+c2VjX2luZm8uYXV0aGVudGljYXRpb25fbW9kZSA9IE5MODAyMTFfQVVUSFRZUEVfT1BFTl9TWVNURU07CisKKwlyZXQgPSBtd2lmaWV4X3NlbmRfY21kX3N5bmMocHJpdiwgSG9zdENtZF9DTURfU0VUX0JTU19NT0RFLAorCQkJCSAgICBIb3N0Q21kX0FDVF9HRU5fU0VULCAwLCBOVUxMKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGR1bXBzIHRoZSBzdGF0aW9uIGluZm9ybWF0aW9uIG9uIGEgYnVmZmVyLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYXJlIHNob3duIC0KKyAqICAgICAgLSBUb3RhbCBieXRlcyB0cmFuc21pdHRlZAorICogICAgICAtIFRvdGFsIGJ5dGVzIHJlY2VpdmVkCisgKiAgICAgIC0gVG90YWwgcGFja2V0cyB0cmFuc21pdHRlZAorICogICAgICAtIFRvdGFsIHBhY2tldHMgcmVjZWl2ZWQKKyAqICAgICAgLSBTaWduYWwgcXVhbGl0eSBsZXZlbAorICogICAgICAtIFRyYW5zbWlzc2lvbiByYXRlCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfZHVtcF9zdGF0aW9uX2luZm8oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8pCit7CisJc3RydWN0IG13aWZpZXhfZHNfZ2V0X3NpZ25hbCBzaWduYWw7CisJc3RydWN0IG13aWZpZXhfcmF0ZV9jZmcgcmF0ZTsKKwlpbnQgcmV0ID0gMDsKKworCXNpbmZvLT5maWxsZWQgPSBTVEFUSU9OX0lORk9fUlhfQllURVMgfCBTVEFUSU9OX0lORk9fVFhfQllURVMgfAorCQlTVEFUSU9OX0lORk9fUlhfUEFDS0VUUyB8CisJCVNUQVRJT05fSU5GT19UWF9QQUNLRVRTCisJCXwgU1RBVElPTl9JTkZPX1NJR05BTCB8IFNUQVRJT05fSU5GT19UWF9CSVRSQVRFOworCisJLyogR2V0IHNpZ25hbCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBmaXJtd2FyZSAqLworCW1lbXNldCgmc2lnbmFsLCAwLCBzaXplb2Yoc3RydWN0IG13aWZpZXhfZHNfZ2V0X3NpZ25hbCkpOworCWlmIChtd2lmaWV4X2dldF9zaWduYWxfaW5mbyhwcml2LCAmc2lnbmFsKSkgeworCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgImdldHRpbmcgc2lnbmFsIGluZm9ybWF0aW9uXG4iKTsKKwkJcmV0ID0gLUVGQVVMVDsKKwl9CisKKwlpZiAobXdpZmlleF9kcnZfZ2V0X2RhdGFfcmF0ZShwcml2LCAmcmF0ZSkpIHsKKwkJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsICJnZXR0aW5nIGRhdGEgcmF0ZVxuIik7CisJCXJldCA9IC1FRkFVTFQ7CisJfQorCisJc2luZm8tPnJ4X2J5dGVzID0gcHJpdi0+c3RhdHMucnhfYnl0ZXM7CisJc2luZm8tPnR4X2J5dGVzID0gcHJpdi0+c3RhdHMudHhfYnl0ZXM7CisJc2luZm8tPnJ4X3BhY2tldHMgPSBwcml2LT5zdGF0cy5yeF9wYWNrZXRzOworCXNpbmZvLT50eF9wYWNrZXRzID0gcHJpdi0+c3RhdHMudHhfcGFja2V0czsKKwlzaW5mby0+c2lnbmFsID0gcHJpdi0+d19zdGF0cy5xdWFsLmxldmVsOworCXNpbmZvLT50eHJhdGUubGVnYWN5ID0gcmF0ZS5yYXRlOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIENGRzgwMi4xMSBvcGVyYXRpb24gaGFuZGxlciB0byBnZXQgc3RhdGlvbiBpbmZvcm1hdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG9ubHkgd29ya3MgaW4gY29ubmVjdGVkIG1vZGUsIGFuZCBkdW1wcyB0aGUKKyAqIHJlcXVlc3RlZCBzdGF0aW9uIGluZm9ybWF0aW9uLCBpZiBhdmFpbGFibGUuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfY2ZnODAyMTFfZ2V0X3N0YXRpb24oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgdTggKm1hYywgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8pCit7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9IG13aWZpZXhfbmV0ZGV2X2dldF9wcml2KGRldik7CisKKwltd2lmaWV4X2R1bXBfc3RhdGlvbl9pbmZvKHByaXYsIHNpbmZvKTsKKworCWlmICghcHJpdi0+bWVkaWFfY29ubmVjdGVkKQorCQlyZXR1cm4gLUVOT0VOVDsKKwlpZiAobWVtY21wKG1hYywgcHJpdi0+Y2ZnX2Jzc2lkLCBFVEhfQUxFTikpCisJCXJldHVybiAtRU5PRU5UOworCisJcmV0dXJuIG13aWZpZXhfZHVtcF9zdGF0aW9uX2luZm8ocHJpdiwgc2luZm8pOworfQorCisvKiBTdXBwb3J0ZWQgcmF0ZXMgdG8gYmUgYWR2ZXJ0aXNlZCB0byB0aGUgY2ZnODAyMTEgKi8KKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBtd2lmaWV4X3JhdGVzW10gPSB7CisJey5iaXRyYXRlID0gMTAsIC5od192YWx1ZSA9IDIsIH0sCisJey5iaXRyYXRlID0gMjAsIC5od192YWx1ZSA9IDQsIH0sCisJey5iaXRyYXRlID0gNTUsIC5od192YWx1ZSA9IDExLCB9LAorCXsuYml0cmF0ZSA9IDExMCwgLmh3X3ZhbHVlID0gMjIsIH0sCisJey5iaXRyYXRlID0gMjIwLCAuaHdfdmFsdWUgPSA0NCwgfSwKKwl7LmJpdHJhdGUgPSA2MCwgLmh3X3ZhbHVlID0gMTIsIH0sCisJey5iaXRyYXRlID0gOTAsIC5od192YWx1ZSA9IDE4LCB9LAorCXsuYml0cmF0ZSA9IDEyMCwgLmh3X3ZhbHVlID0gMjQsIH0sCisJey5iaXRyYXRlID0gMTgwLCAuaHdfdmFsdWUgPSAzNiwgfSwKKwl7LmJpdHJhdGUgPSAyNDAsIC5od192YWx1ZSA9IDQ4LCB9LAorCXsuYml0cmF0ZSA9IDM2MCwgLmh3X3ZhbHVlID0gNzIsIH0sCisJey5iaXRyYXRlID0gNDgwLCAuaHdfdmFsdWUgPSA5NiwgfSwKKwl7LmJpdHJhdGUgPSA1NDAsIC5od192YWx1ZSA9IDEwOCwgfSwKKwl7LmJpdHJhdGUgPSA3MjAsIC5od192YWx1ZSA9IDE0NCwgfSwKK307CisKKy8qIENoYW5uZWwgZGVmaW5pdGlvbnMgdG8gYmUgYWR2ZXJ0aXNlZCB0byBjZmc4MDIxMSAqLworCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIG13aWZpZXhfY2hhbm5lbHNfMmdoeltdID0geworCXsuY2VudGVyX2ZyZXEgPSAyNDEyLCAuaHdfdmFsdWUgPSAxLCB9LAorCXsuY2VudGVyX2ZyZXEgPSAyNDE3LCAuaHdfdmFsdWUgPSAyLCB9LAorCXsuY2VudGVyX2ZyZXEgPSAyNDIyLCAuaHdfdmFsdWUgPSAzLCB9LAorCXsuY2VudGVyX2ZyZXEgPSAyNDI3LCAuaHdfdmFsdWUgPSA0LCB9LAorCXsuY2VudGVyX2ZyZXEgPSAyNDMyLCAuaHdfdmFsdWUgPSA1LCB9LAorCXsuY2VudGVyX2ZyZXEgPSAyNDM3LCAuaHdfdmFsdWUgPSA2LCB9LAorCXsuY2VudGVyX2ZyZXEgPSAyNDQyLCAuaHdfdmFsdWUgPSA3LCB9LAorCXsuY2VudGVyX2ZyZXEgPSAyNDQ3LCAuaHdfdmFsdWUgPSA4LCB9LAorCXsuY2VudGVyX2ZyZXEgPSAyNDUyLCAuaHdfdmFsdWUgPSA5LCB9LAorCXsuY2VudGVyX2ZyZXEgPSAyNDU3LCAuaHdfdmFsdWUgPSAxMCwgfSwKKwl7LmNlbnRlcl9mcmVxID0gMjQ2MiwgLmh3X3ZhbHVlID0gMTEsIH0sCisJey5jZW50ZXJfZnJlcSA9IDI0NjcsIC5od192YWx1ZSA9IDEyLCB9LAorCXsuY2VudGVyX2ZyZXEgPSAyNDcyLCAuaHdfdmFsdWUgPSAxMywgfSwKKwl7LmNlbnRlcl9mcmVxID0gMjQ4NCwgLmh3X3ZhbHVlID0gMTQsIH0sCit9OworCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBtd2lmaWV4X2JhbmRfMmdoeiA9IHsKKwkuY2hhbm5lbHMgPSBtd2lmaWV4X2NoYW5uZWxzXzJnaHosCisJLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG13aWZpZXhfY2hhbm5lbHNfMmdoeiksCisJLmJpdHJhdGVzID0gbXdpZmlleF9yYXRlcywKKwkubl9iaXRyYXRlcyA9IDE0LAorfTsKKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBtd2lmaWV4X2NoYW5uZWxzXzVnaHpbXSA9IHsKKwl7LmNlbnRlcl9mcmVxID0gNTA0MCwgLmh3X3ZhbHVlID0gOCwgfSwKKwl7LmNlbnRlcl9mcmVxID0gNTA2MCwgLmh3X3ZhbHVlID0gMTIsIH0sCisJey5jZW50ZXJfZnJlcSA9IDUwODAsIC5od192YWx1ZSA9IDE2LCB9LAorCXsuY2VudGVyX2ZyZXEgPSA1MTcwLCAuaHdfdmFsdWUgPSAzNCwgfSwKKwl7LmNlbnRlcl9mcmVxID0gNTE5MCwgLmh3X3ZhbHVlID0gMzgsIH0sCisJey5jZW50ZXJfZnJlcSA9IDUyMTAsIC5od192YWx1ZSA9IDQyLCB9LAorCXsuY2VudGVyX2ZyZXEgPSA1MjMwLCAuaHdfdmFsdWUgPSA0NiwgfSwKKwl7LmNlbnRlcl9mcmVxID0gNTE4MCwgLmh3X3ZhbHVlID0gMzYsIH0sCisJey5jZW50ZXJfZnJlcSA9IDUyMDAsIC5od192YWx1ZSA9IDQwLCB9LAorCXsuY2VudGVyX2ZyZXEgPSA1MjIwLCAuaHdfdmFsdWUgPSA0NCwgfSwKKwl7LmNlbnRlcl9mcmVxID0gNTI0MCwgLmh3X3ZhbHVlID0gNDgsIH0sCisJey5jZW50ZXJfZnJlcSA9IDUyNjAsIC5od192YWx1ZSA9IDUyLCB9LAorCXsuY2VudGVyX2ZyZXEgPSA1MjgwLCAuaHdfdmFsdWUgPSA1NiwgfSwKKwl7LmNlbnRlcl9mcmVxID0gNTMwMCwgLmh3X3ZhbHVlID0gNjAsIH0sCisJey5jZW50ZXJfZnJlcSA9IDUzMjAsIC5od192YWx1ZSA9IDY0LCB9LAorCXsuY2VudGVyX2ZyZXEgPSA1NTAwLCAuaHdfdmFsdWUgPSAxMDAsIH0sCisJey5jZW50ZXJfZnJlcSA9IDU1MjAsIC5od192YWx1ZSA9IDEwNCwgfSwKKwl7LmNlbnRlcl9mcmVxID0gNTU0MCwgLmh3X3ZhbHVlID0gMTA4LCB9LAorCXsuY2VudGVyX2ZyZXEgPSA1NTYwLCAuaHdfdmFsdWUgPSAxMTIsIH0sCisJey5jZW50ZXJfZnJlcSA9IDU1ODAsIC5od192YWx1ZSA9IDExNiwgfSwKKwl7LmNlbnRlcl9mcmVxID0gNTYwMCwgLmh3X3ZhbHVlID0gMTIwLCB9LAorCXsuY2VudGVyX2ZyZXEgPSA1NjIwLCAuaHdfdmFsdWUgPSAxMjQsIH0sCisJey5jZW50ZXJfZnJlcSA9IDU2NDAsIC5od192YWx1ZSA9IDEyOCwgfSwKKwl7LmNlbnRlcl9mcmVxID0gNTY2MCwgLmh3X3ZhbHVlID0gMTMyLCB9LAorCXsuY2VudGVyX2ZyZXEgPSA1NjgwLCAuaHdfdmFsdWUgPSAxMzYsIH0sCisJey5jZW50ZXJfZnJlcSA9IDU3MDAsIC5od192YWx1ZSA9IDE0MCwgfSwKKwl7LmNlbnRlcl9mcmVxID0gNTc0NSwgLmh3X3ZhbHVlID0gMTQ5LCB9LAorCXsuY2VudGVyX2ZyZXEgPSA1NzY1LCAuaHdfdmFsdWUgPSAxNTMsIH0sCisJey5jZW50ZXJfZnJlcSA9IDU3ODUsIC5od192YWx1ZSA9IDE1NywgfSwKKwl7LmNlbnRlcl9mcmVxID0gNTgwNSwgLmh3X3ZhbHVlID0gMTYxLCB9LAorCXsuY2VudGVyX2ZyZXEgPSA1ODI1LCAuaHdfdmFsdWUgPSAxNjUsIH0sCit9OworCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBtd2lmaWV4X2JhbmRfNWdoeiA9IHsKKwkuY2hhbm5lbHMgPSBtd2lmaWV4X2NoYW5uZWxzXzVnaHosCisJLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKG13aWZpZXhfY2hhbm5lbHNfNWdoeiksCisJLmJpdHJhdGVzID0gbXdpZmlleF9yYXRlcyAtIDQsCisJLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKG13aWZpZXhfcmF0ZXMpICsgNCwKK307CisKKworLyogU3VwcG9ydGVkIGNyeXB0byBjaXBoZXIgc3VpdHMgdG8gYmUgYWR2ZXJ0aXNlZCB0byBjZmc4MDIxMSAqLworCitzdGF0aWMgY29uc3QgdTMyIG13aWZpZXhfY2lwaGVyX3N1aXRlc1tdID0geworCVdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwLAorCVdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNCwKKwlXTEFOX0NJUEhFUl9TVUlURV9US0lQLAorCVdMQU5fQ0lQSEVSX1NVSVRFX0NDTVAsCit9OworCisvKgorICogQ0ZHODAyLjExIG9wZXJhdGlvbiBoYW5kbGVyIGZvciBkaXNjb25uZWN0aW9uIHJlcXVlc3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB3b3JrIHdoZW4gdGhlcmUgaXMgYWxyZWFkeSBhIGRpc2Nvbm5lY3Rpb24KKyAqIHByb2NlZHVyZSBnb2luZyBvbi4KKyAqLworc3RhdGljIGludAorbXdpZmlleF9jZmc4MDIxMV9kaXNjb25uZWN0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgdTE2IHJlYXNvbl9jb2RlKQoreworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBtd2lmaWV4X25ldGRldl9nZXRfcHJpdihkZXYpOworCisJaWYgKHByaXYtPmRpc2Nvbm5lY3QpCisJCXJldHVybiAtRUJVU1k7CisKKwlwcml2LT5kaXNjb25uZWN0ID0gMTsKKwlpZiAobXdpZmlleF9kZWF1dGhlbnRpY2F0ZShwcml2LCBOVUxMKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwl3aXBoeV9kYmcod2lwaHksICJpbmZvOiBzdWNjZXNzZnVsbHkgZGlzY29ubmVjdGVkIGZyb20gJXBNOiIKKwkJIiByZWFzb24gY29kZSAlZFxuIiwgcHJpdi0+Y2ZnX2Jzc2lkLCByZWFzb25fY29kZSk7CisKKwlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmNmZ193b3JrcXVldWUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGluZm9ybXMgdGhlIENGRzgwMi4xMSBzdWJzeXN0ZW0gb2YgYSBuZXcgSUJTUy4KKyAqCisgKiBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFyZSBzZW50IHRvIHRoZSBDRkc4MDIuMTEgc3Vic3lzdGVtCisgKiB0byByZWdpc3RlciB0aGUgbmV3IElCU1MuIElmIHdlIGRvIG5vdCByZWdpc3RlciB0aGUgbmV3IElCU1MsCisgKiBhIGtlcm5lbCBwYW5pYyB3aWxsIHJlc3VsdC4KKyAqICAgICAgLSBTU0lECisgKiAgICAgIC0gU1NJRCBsZW5ndGgKKyAqICAgICAgLSBCU1NJRAorICogICAgICAtIENoYW5uZWwKKyAqLworc3RhdGljIGludCBtd2lmaWV4X2NmZzgwMjExX2luZm9ybV9pYnNzX2JzcyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KQoreworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKKwlzdHJ1Y3QgbXdpZmlleF9ic3NfaW5mbyBic3NfaW5mbzsKKwlpbnQgaWVfbGVuOworCXU4IGllX2J1ZltJRUVFODAyMTFfTUFYX1NTSURfTEVOICsgc2l6ZW9mKHN0cnVjdCBpZWVlX3R5cGVzX2hlYWRlcildOworCisJaWYgKG13aWZpZXhfZ2V0X2Jzc19pbmZvKHByaXYsICZic3NfaW5mbykpCisJCXJldHVybiAtMTsKKworCWllX2J1ZlswXSA9IFdMQU5fRUlEX1NTSUQ7CisJaWVfYnVmWzFdID0gYnNzX2luZm8uc3NpZC5zc2lkX2xlbjsKKworCW1lbWNweSgmaWVfYnVmW3NpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpXSwKKwkJCSZic3NfaW5mby5zc2lkLnNzaWQsCisJCQlic3NfaW5mby5zc2lkLnNzaWRfbGVuKTsKKwlpZV9sZW4gPSBpZV9idWZbMV0gKyBzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKTsKKworCWNoYW4gPSBfX2llZWU4MDIxMV9nZXRfY2hhbm5lbChwcml2LT53ZGV2LT53aXBoeSwKKwkJCWllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShic3NfaW5mby5ic3NfY2hhbiwKKwkJCQkJCXByaXYtPmN1cnJfYnNzX3BhcmFtcy5iYW5kKSk7CisKKwljZmc4MDIxMV9pbmZvcm1fYnNzKHByaXYtPndkZXYtPndpcGh5LCBjaGFuLAorCQlic3NfaW5mby5ic3NpZCwgMCwgV0xBTl9DQVBBQklMSVRZX0lCU1MsCisJCTAsIGllX2J1ZiwgaWVfbGVuLCAwLCBHRlBfS0VSTkVMKTsKKwltZW1jcHkocHJpdi0+Y2ZnX2Jzc2lkLCBic3NfaW5mby5ic3NpZCwgRVRIX0FMRU4pOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGluZm9ybXMgdGhlIENGRzgwMi4xMSBzdWJzeXN0ZW0gb2YgYSBuZXcgQlNTIGNvbm5lY3Rpb24uCisgKgorICogVGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhcmUgc2VudCB0byB0aGUgQ0ZHODAyLjExIHN1YnN5c3RlbQorICogdG8gcmVnaXN0ZXIgdGhlIG5ldyBCU1MgY29ubmVjdGlvbi4gSWYgd2UgZG8gbm90IHJlZ2lzdGVyIHRoZSBuZXcgQlNTLAorICogYSBrZXJuZWwgcGFuaWMgd2lsbCByZXN1bHQuCisgKiAgICAgIC0gTUFDIGFkZHJlc3MKKyAqICAgICAgLSBDYXBhYmlsaXRpZXMKKyAqICAgICAgLSBCZWFjb24gcGVyaW9kCisgKiAgICAgIC0gUlNTSSB2YWx1ZQorICogICAgICAtIENoYW5uZWwKKyAqICAgICAgLSBTdXBwb3J0ZWQgcmF0ZXMgSUUKKyAqICAgICAgLSBFeHRlbmRlZCBjYXBhYmlsaXRpZXMgSUUKKyAqICAgICAgLSBEUyBwYXJhbWV0ZXIgc2V0IElFCisgKiAgICAgIC0gSFQgQ2FwYWJpbGl0eSBJRQorICogICAgICAtIFZlbmRvciBTcGVjaWZpYyBJRSAoMjIxKQorICogICAgICAtIFdQQSBJRQorICogICAgICAtIFJTTiBJRQorICovCitzdGF0aWMgaW50IG13aWZpZXhfaW5mb3JtX2Jzc19mcm9tX3NjYW5fcmVzdWx0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJCSAgICAgICBzdHJ1Y3QgbXdpZmlleF84MDJfMTFfc3NpZCAqc3NpZCkKK3sKKwlzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpzY2FuX3RhYmxlOworCWludCBpLCBqOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKKwl1OCAqaWUsICppZV9idWY7CisJdTMyIGllX2xlbjsKKwl1OCAqYmVhY29uOworCWludCBiZWFjb25fc2l6ZTsKKwl1OCBlbGVtZW50X2lkLCBlbGVtZW50X2xlbjsKKworI2RlZmluZSBNQVhfSUVfQlVGCTIwNDgKKwlpZV9idWYgPSBremFsbG9jKE1BWF9JRV9CVUYsIEdGUF9LRVJORUwpOworCWlmICghaWVfYnVmKSB7CisJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LCAiJXM6IGZhaWxlZCB0byBhbGxvYyBpZV9idWZcbiIsCisJCQkJCQlfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXNjYW5fdGFibGUgPSBwcml2LT5hZGFwdGVyLT5zY2FuX3RhYmxlOworCWZvciAoaSA9IDA7IGkgPCBwcml2LT5hZGFwdGVyLT5udW1faW5fc2Nhbl90YWJsZTsgaSsrKSB7CisJCWlmIChzc2lkKSB7CisJCQkvKiBJbmZvcm0gc3BlY2lmaWMgQlNTIG9ubHkgKi8KKwkJCWlmIChtZW1jbXAoc3NpZC0+c3NpZCwgc2Nhbl90YWJsZVtpXS5zc2lkLnNzaWQsCisJCQkJCSAgIHNzaWQtPnNzaWRfbGVuKSkKKwkJCQljb250aW51ZTsKKwkJfQorCQltZW1zZXQoaWVfYnVmLCAwLCBNQVhfSUVfQlVGKTsKKwkJaWVfYnVmWzBdID0gV0xBTl9FSURfU1NJRDsKKwkJaWVfYnVmWzFdID0gc2Nhbl90YWJsZVtpXS5zc2lkLnNzaWRfbGVuOworCQltZW1jcHkoJmllX2J1ZltzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKV0sCisJCSAgICAgICBzY2FuX3RhYmxlW2ldLnNzaWQuc3NpZCwgaWVfYnVmWzFdKTsKKworCQlpZSA9IGllX2J1ZiArIGllX2J1ZlsxXSArIHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpOworCQlpZV9sZW4gPSBpZV9idWZbMV0gKyBzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKTsKKworCQlpZVswXSA9IFdMQU5fRUlEX1NVUFBfUkFURVM7CisKKwkJZm9yIChqID0gMDsgaiA8IHNpemVvZihzY2FuX3RhYmxlW2ldLnN1cHBvcnRlZF9yYXRlcyk7IGorKykgeworCQkJaWYgKCFzY2FuX3RhYmxlW2ldLnN1cHBvcnRlZF9yYXRlc1tqXSkKKwkJCQlicmVhazsKKwkJCWVsc2UKKwkJCQlpZVtqICsgc2l6ZW9mKHN0cnVjdCBpZWVlX3R5cGVzX2hlYWRlcildID0KKwkJCQkJc2Nhbl90YWJsZVtpXS5zdXBwb3J0ZWRfcmF0ZXNbal07CisJCX0KKworCQlpZVsxXSA9IGo7CisJCWllX2xlbiArPSBpZVsxXSArIHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpOworCisJCWJlYWNvbiA9IHNjYW5fdGFibGVbaV0uYmVhY29uX2J1ZjsKKwkJYmVhY29uX3NpemUgPSBzY2FuX3RhYmxlW2ldLmJlYWNvbl9idWZfc2l6ZTsKKworCQkvKiBTa2lwIHRpbWUgc3RhbXAsIGJlYWNvbiBpbnRlcnZhbCBhbmQgY2FwYWJpbGl0eSAqLworCisJCWlmIChiZWFjb24pIHsKKwkJCWJlYWNvbiArPSBzaXplb2Yoc2Nhbl90YWJsZVtpXS5iZWFjb25fcGVyaW9kKQorCQkJCSsgc2l6ZW9mKHNjYW5fdGFibGVbaV0udGltZV9zdGFtcCkgKworCQkJCStzaXplb2Yoc2Nhbl90YWJsZVtpXS5jYXBfaW5mb19iaXRtYXApOworCisJCQliZWFjb25fc2l6ZSAtPSBzaXplb2Yoc2Nhbl90YWJsZVtpXS5iZWFjb25fcGVyaW9kKQorCQkJCSsgc2l6ZW9mKHNjYW5fdGFibGVbaV0udGltZV9zdGFtcCkKKwkJCQkrIHNpemVvZihzY2FuX3RhYmxlW2ldLmNhcF9pbmZvX2JpdG1hcCk7CisJCX0KKworCQl3aGlsZSAoYmVhY29uX3NpemUgPj0gc2l6ZW9mKHN0cnVjdCBpZWVlX3R5cGVzX2hlYWRlcikpIHsKKwkJCWllID0gaWVfYnVmICsgaWVfbGVuOworCQkJZWxlbWVudF9pZCA9ICpiZWFjb247CisJCQllbGVtZW50X2xlbiA9ICooYmVhY29uICsgMSk7CisJCQlpZiAoYmVhY29uX3NpemUgPCAoaW50KSBlbGVtZW50X2xlbiArCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBpZWVlX3R5cGVzX2hlYWRlcikpIHsKKwkJCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgIiVzOiBpbiBwcm9jZXNzaW5nIgorCQkJCQkiIElFLCBieXRlcyBsZWZ0IDwgSUUgbGVuZ3RoXG4iLAorCQkJCQlfX2Z1bmNfXyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlzd2l0Y2ggKGVsZW1lbnRfaWQpIHsKKwkJCWNhc2UgV0xBTl9FSURfRVhUX0NBUEFCSUxJVFk6CisJCQljYXNlIFdMQU5fRUlEX0RTX1BBUkFNUzoKKwkJCWNhc2UgV0xBTl9FSURfSFRfQ0FQQUJJTElUWToKKwkJCWNhc2UgV0xBTl9FSURfVkVORE9SX1NQRUNJRklDOgorCQkJY2FzZSBXTEFOX0VJRF9SU046CisJCQljYXNlIFdMQU5fRUlEX0JTU19BQ19BQ0NFU1NfREVMQVk6CisJCQkJaWVbMF0gPSBlbGVtZW50X2lkOworCQkJCWllWzFdID0gZWxlbWVudF9sZW47CisJCQkJbWVtY3B5KCZpZVtzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKV0sCisJCQkJICAgICAgICh1OCAqKSBiZWFjb24KKwkJCQkgICAgICAgKyBzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKSwKKwkJCQkgICAgICAgZWxlbWVudF9sZW4pOworCQkJCWllX2xlbiArPSBpZVsxXSArCisJCQkJCXNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJlYWNvbiArPSBlbGVtZW50X2xlbiArCisJCQkJCXNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpOworCQkJYmVhY29uX3NpemUgLT0gZWxlbWVudF9sZW4gKworCQkJCQlzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKTsKKwkJfQorCQljaGFuID0gaWVlZTgwMjExX2dldF9jaGFubmVsKHByaXYtPndkZXYtPndpcGh5LAorCQkJCQkJc2Nhbl90YWJsZVtpXS5mcmVxKTsKKwkJY2ZnODAyMTFfaW5mb3JtX2Jzcyhwcml2LT53ZGV2LT53aXBoeSwgY2hhbiwKKwkJCQkJc2Nhbl90YWJsZVtpXS5tYWNfYWRkcmVzcywKKwkJCQkJMCwgc2Nhbl90YWJsZVtpXS5jYXBfaW5mb19iaXRtYXAsCisJCQkJCXNjYW5fdGFibGVbaV0uYmVhY29uX3BlcmlvZCwKKwkJCQkJaWVfYnVmLCBpZV9sZW4sCisJCQkJCXNjYW5fdGFibGVbaV0ucnNzaSwgR0ZQX0tFUk5FTCk7CisJfQorCisJa2ZyZWUoaWVfYnVmKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY29ubmVjdHMgd2l0aCBhIEJTUy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgYm90aCBJbmZyYSBhbmQgQWQtSG9jIG1vZGVzLiBJdCBhbHNvIHBlcmZvcm1zCisgKiB2YWxpZGl0eSBjaGVja2luZyBvbiB0aGUgcHJvdmlkZWQgcGFyYW1ldGVycywgZGlzY29ubmVjdHMgZnJvbSB0aGUKKyAqIGN1cnJlbnQgQlNTIChpZiBhbnkpLCBzZXRzIHVwIHRoZSBhc3NvY2lhdGlvbi9zY2FuIHBhcmFtZXRlcnMsCisgKiBpbmNsdWRpbmcgc2VjdXJpdHkgc2V0dGluZ3MsIGFuZCBwZXJmb3JtcyBzcGVjaWZpYyBTU0lEIHNjYW4gYmVmb3JlCisgKiB0cnlpbmcgdG8gY29ubmVjdC4KKyAqCisgKiBGb3IgSW5mcmEgbW9kZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFpbHVyZSBpZiB0aGUgc3BlY2lmaWVkIFNTSUQKKyAqIGlzIG5vdCBmb3VuZCBpbiBzY2FuIHRhYmxlLiBIb3dldmVyLCBmb3IgQWQtSG9jIG1vZGUsIGl0IGNhbiBjcmVhdGUKKyAqIHRoZSBJQlNTIGlmIGl0IGRvZXMgbm90IGV4aXN0LiBPbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24gaW4gZWl0aGVyIGNhc2UsCisgKiB0aGUgZnVuY3Rpb24gbm90aWZpZXMgdGhlIENGRzgwMi4xMSBzdWJzeXN0ZW0gb2YgdGhlIG5ldyBCU1MgY29ubmVjdGlvbiwKKyAqIG90aGVyd2lzZSB0aGUga2VybmVsIHdpbGwgcGFuaWMuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfY2ZnODAyMTFfYXNzb2Moc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgc2l6ZV90IHNzaWRfbGVuLCB1OCAqc3NpZCwKKwkJICAgICAgIHU4ICpic3NpZCwgaW50IG1vZGUsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJICAgICAgIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lLCBib29sIHByaXZhY3kpCit7CisJc3RydWN0IG13aWZpZXhfODAyXzExX3NzaWQgcmVxX3NzaWQ7CisJc3RydWN0IG13aWZpZXhfc3NpZF9ic3NpZCBzc2lkX2Jzc2lkOworCWludCByZXQsIGF1dGhfdHlwZSA9IDA7CisKKwltZW1zZXQoJnJlcV9zc2lkLCAwLCBzaXplb2Yoc3RydWN0IG13aWZpZXhfODAyXzExX3NzaWQpKTsKKwltZW1zZXQoJnNzaWRfYnNzaWQsIDAsIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9zc2lkX2Jzc2lkKSk7CisKKwlyZXFfc3NpZC5zc2lkX2xlbiA9IHNzaWRfbGVuOworCWlmIChzc2lkX2xlbiA+IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pIHsKKwkJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsICJpbnZhbGlkIFNTSUQgLSBhYm9ydGluZ1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1lbWNweShyZXFfc3NpZC5zc2lkLCBzc2lkLCBzc2lkX2xlbik7CisJaWYgKCFyZXFfc3NpZC5zc2lkX2xlbiB8fCByZXFfc3NpZC5zc2lkWzBdIDwgMHgyMCkgeworCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgImludmFsaWQgU1NJRCAtIGFib3J0aW5nXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogZGlzY29ubmVjdCBiZWZvcmUgdHJ5IHRvIGFzc29jaWF0ZSAqLworCW13aWZpZXhfZGVhdXRoZW50aWNhdGUocHJpdiwgTlVMTCk7CisKKwlpZiAoY2hhbm5lbCkKKwkJcmV0ID0gbXdpZmlleF9zZXRfcmZfY2hhbm5lbChwcml2LCBjaGFubmVsLAorCQkJCW13aWZpZXhfY2hhbm5lbHNfdG9fY2ZnODAyMTFfY2hhbm5lbF90eXBlCisJCQkJKHByaXYtPmFkYXB0ZXItPmNoYW5fb2Zmc2V0KSk7CisKKwlyZXQgPSBtd2lmaWV4X3NldF9lbmNvZGUocHJpdiwgTlVMTCwgMCwgMCwgMSk7CS8qIERpc2FibGUga2V5cyAqLworCisJaWYgKG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJLyogInByaXZhY3kiIGlzIHNldCBvbmx5IGZvciBhZC1ob2MgbW9kZSAqLworCQlpZiAocHJpdmFjeSkgeworCQkJLyoKKwkJCSAqIEtlZXAgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0IGZvciBub3cgc28gdGhhdAorCQkJICogdGhlIGZpcm13YXJlIGNhbiBmaW5kIGEgbWF0Y2hpbmcgbmV0d29yayBmcm9tIHRoZQorCQkJICogc2Nhbi4gVGhlIGNmZzgwMjExIGRvZXMgbm90IGdpdmUgdXMgdGhlIGVuY3J5cHRpb24KKwkJCSAqIG1vZGUgYXQgdGhpcyBzdGFnZSBzbyBqdXN0IHNldHRpbmcgaXQgdG8gV0VQIGhlcmUuCisJCQkgKi8KKwkJCXByaXYtPnNlY19pbmZvLmVuY3J5cHRpb25fbW9kZSA9CisJCQkJCVdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDsKKwkJCXByaXYtPnNlY19pbmZvLmF1dGhlbnRpY2F0aW9uX21vZGUgPQorCQkJCQlOTDgwMjExX0FVVEhUWVBFX09QRU5fU1lTVEVNOworCQl9CisKKwkJZ290byBkb25lOworCX0KKworCS8qIE5vdyBoYW5kbGUgaW5mcmEgbW9kZS4gInNtZSIgaXMgdmFsaWQgZm9yIGluZnJhIG1vZGUgb25seSAqLworCWlmIChzbWUtPmF1dGhfdHlwZSA9PSBOTDgwMjExX0FVVEhUWVBFX0FVVE9NQVRJQworCQkJfHwgc21lLT5hdXRoX3R5cGUgPT0gTkw4MDIxMV9BVVRIVFlQRV9PUEVOX1NZU1RFTSkKKwkJYXV0aF90eXBlID0gTkw4MDIxMV9BVVRIVFlQRV9PUEVOX1NZU1RFTTsKKwllbHNlIGlmIChzbWUtPmF1dGhfdHlwZSA9PSBOTDgwMjExX0FVVEhUWVBFX1NIQVJFRF9LRVkpCisJCWF1dGhfdHlwZSA9IE5MODAyMTFfQVVUSFRZUEVfU0hBUkVEX0tFWTsKKworCWlmIChzbWUtPmNyeXB0by5uX2NpcGhlcnNfcGFpcndpc2UpIHsKKwkJcHJpdi0+c2VjX2luZm8uZW5jcnlwdGlvbl9tb2RlID0KKwkJCQkJCXNtZS0+Y3J5cHRvLmNpcGhlcnNfcGFpcndpc2VbMF07CisJCXByaXYtPnNlY19pbmZvLmF1dGhlbnRpY2F0aW9uX21vZGUgPSBhdXRoX3R5cGU7CisJfQorCisJaWYgKHNtZS0+Y3J5cHRvLmNpcGhlcl9ncm91cCkgeworCQlwcml2LT5zZWNfaW5mby5lbmNyeXB0aW9uX21vZGUgPSBzbWUtPmNyeXB0by5jaXBoZXJfZ3JvdXA7CisJCXByaXYtPnNlY19pbmZvLmF1dGhlbnRpY2F0aW9uX21vZGUgPSBhdXRoX3R5cGU7CisJfQorCWlmIChzbWUtPmllKQorCQlyZXQgPSBtd2lmaWV4X3NldF9nZW5faWUocHJpdiwgc21lLT5pZSwgc21lLT5pZV9sZW4pOworCisJaWYgKHNtZS0+a2V5KSB7CisJCWlmIChtd2lmaWV4X2lzX2FsZ193ZXAoMCkgfCBtd2lmaWV4X2lzX2FsZ193ZXAoMCkpIHsKKwkJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJCSJpbmZvOiBzZXR0aW5nIHdlcCBlbmNyeXB0aW9uIgorCQkJCSIgd2l0aCBrZXkgbGVuICVkXG4iLCBzbWUtPmtleV9sZW4pOworCQkJcmV0ID0gbXdpZmlleF9zZXRfZW5jb2RlKHByaXYsIHNtZS0+a2V5LCBzbWUtPmtleV9sZW4sCisJCQkJCQkJc21lLT5rZXlfaWR4LCAwKTsKKwkJfQorCX0KK2RvbmU6CisJLyogRG8gc3BlY2lmaWMgU1NJRCBzY2FubmluZyAqLworCWlmIChtd2lmaWV4X3JlcXVlc3Rfc2Nhbihwcml2LCAmcmVxX3NzaWQpKSB7CisJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LCAic2NhbiBlcnJvclxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCisJbWVtY3B5KCZzc2lkX2Jzc2lkLnNzaWQsICZyZXFfc3NpZCwgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4XzgwMl8xMV9zc2lkKSk7CisKKwlpZiAobW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQlpZiAobXdpZmlleF9maW5kX2Jlc3RfYnNzKHByaXYsICZzc2lkX2Jzc2lkKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQkvKiBJbmZvcm0gdGhlIEJTUyBpbmZvcm1hdGlvbiB0byBrZXJuZWwsIG90aGVyd2lzZQorCQkgKiBrZXJuZWwgd2lsbCBnaXZlIGEgcGFuaWMgYWZ0ZXIgc3VjY2Vzc2Z1bCBhc3NvYyAqLworCQlpZiAobXdpZmlleF9pbmZvcm1fYnNzX2Zyb21fc2Nhbl9yZXN1bHQocHJpdiwgJnJlcV9zc2lkKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKworCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogdHJ5aW5nIHRvIGFzc29jaWF0ZSB0byAlcyBhbmQgYnNzaWQgJXBNXG4iLAorCSAgICAgICAoY2hhciAqKSByZXFfc3NpZC5zc2lkLCBzc2lkX2Jzc2lkLmJzc2lkKTsKKworCW1lbWNweSgmcHJpdi0+Y2ZnX2Jzc2lkLCBzc2lkX2Jzc2lkLmJzc2lkLCA2KTsKKworCS8qIENvbm5lY3QgdG8gQlNTIGJ5IEVTU0lEICovCisJbWVtc2V0KCZzc2lkX2Jzc2lkLmJzc2lkLCAwLCBFVEhfQUxFTik7CisKKwlpZiAoIW5ldGlmX3F1ZXVlX3N0b3BwZWQocHJpdi0+bmV0ZGV2KSkKKwkJbmV0aWZfc3RvcF9xdWV1ZShwcml2LT5uZXRkZXYpOworCisJaWYgKG13aWZpZXhfYnNzX3N0YXJ0KHByaXYsICZzc2lkX2Jzc2lkKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAobW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQkvKiBJbmZvcm0gdGhlIEJTUyBpbmZvcm1hdGlvbiB0byBrZXJuZWwsIG90aGVyd2lzZQorCQkgKiBrZXJuZWwgd2lsbCBnaXZlIGEgcGFuaWMgYWZ0ZXIgc3VjY2Vzc2Z1bCBhc3NvYyAqLworCQlpZiAobXdpZmlleF9jZmc4MDIxMV9pbmZvcm1faWJzc19ic3MocHJpdikpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQ0ZHODAyLjExIG9wZXJhdGlvbiBoYW5kbGVyIGZvciBhc3NvY2lhdGlvbiByZXF1ZXN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgd29yayB3aGVuIHRoZSBjdXJyZW50IG1vZGUgaXMgc2V0IHRvIEFkLUhvYywgb3IKKyAqIHdoZW4gdGhlcmUgaXMgYWxyZWFkeSBhbiBhc3NvY2lhdGlvbiBwcm9jZWR1cmUgZ29pbmcgb24uIFRoZSBnaXZlbiBCU1MKKyAqIGluZm9ybWF0aW9uIGlzIHVzZWQgdG8gYXNzb2NpYXRlLgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X2NmZzgwMjExX2Nvbm5lY3Qoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSkKK3sKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0gbXdpZmlleF9uZXRkZXZfZ2V0X3ByaXYoZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChwcml2LT5hc3NvY19yZXF1ZXN0KQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKHByaXYtPmJzc19tb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCXdpcGh5X2Vycih3aXBoeSwgInJlY2VpdmVkIGluZnJhIGFzc29jIHJlcXVlc3QgIgorCQkJCSJ3aGVuIHN0YXRpb24gaXMgaW4gaWJzcyBtb2RlXG4iKTsKKwkJZ290byBkb25lOworCX0KKworCXByaXYtPmFzc29jX3JlcXVlc3QgPSAtRUlOUFJPR1JFU1M7CisKKwl3aXBoeV9kYmcod2lwaHksICJpbmZvOiBUcnlpbmcgdG8gYXNzb2NpYXRlIHRvICVzIGFuZCBic3NpZCAlcE1cbiIsCisJICAgICAgIChjaGFyICopIHNtZS0+c3NpZCwgc21lLT5ic3NpZCk7CisKKwlyZXQgPSBtd2lmaWV4X2NmZzgwMjExX2Fzc29jKHByaXYsIHNtZS0+c3NpZF9sZW4sIHNtZS0+c3NpZCwgc21lLT5ic3NpZCwKKwkJCQkgICAgIHByaXYtPmJzc19tb2RlLCBzbWUtPmNoYW5uZWwsIHNtZSwgMCk7CisKKwlwcml2LT5hc3NvY19yZXF1ZXN0ID0gMTsKK2RvbmU6CisJcHJpdi0+YXNzb2NfcmVzdWx0ID0gcmV0OworCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+Y2ZnX3dvcmtxdWV1ZSk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIENGRzgwMi4xMSBvcGVyYXRpb24gaGFuZGxlciB0byBqb2luIGFuIElCU1MuCisgKgorICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB3b3JrIGluIGFueSBtb2RlIG90aGVyIHRoYW4gQWQtSG9jLCBvciBpZgorICogYSBqb2luIG9wZXJhdGlvbiBpcyBhbHJlYWR5IGluIHByb2dyZXNzLgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X2NmZzgwMjExX2pvaW5faWJzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGNmZzgwMjExX2lic3NfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9IG13aWZpZXhfY2ZnODAyMTFfZ2V0X3ByaXYod2lwaHkpOworCWludCByZXQgPSAwOworCisJaWYgKHByaXYtPmlic3Nfam9pbl9yZXF1ZXN0KQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKHByaXYtPmJzc19tb2RlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCXdpcGh5X2Vycih3aXBoeSwgInJlcXVlc3QgdG8gam9pbiBpYnNzIHJlY2VpdmVkICIKKwkJCQkid2hlbiBzdGF0aW9uIGlzIG5vdCBpbiBpYnNzIG1vZGVcbiIpOworCQlnb3RvIGRvbmU7CisJfQorCisJcHJpdi0+aWJzc19qb2luX3JlcXVlc3QgPSAtRUlOUFJPR1JFU1M7CisKKwl3aXBoeV9kYmcod2lwaHksICJpbmZvOiB0cnlpbmcgdG8gam9pbiB0byAlcyBhbmQgYnNzaWQgJXBNXG4iLAorCSAgICAgICAoY2hhciAqKSBwYXJhbXMtPnNzaWQsIHBhcmFtcy0+YnNzaWQpOworCisJcmV0ID0gbXdpZmlleF9jZmc4MDIxMV9hc3NvYyhwcml2LCBwYXJhbXMtPnNzaWRfbGVuLCBwYXJhbXMtPnNzaWQsCisJCQkJcGFyYW1zLT5ic3NpZCwgcHJpdi0+YnNzX21vZGUsCisJCQkJcGFyYW1zLT5jaGFubmVsLCBOVUxMLCBwYXJhbXMtPnByaXZhY3kpOworCisJcHJpdi0+aWJzc19qb2luX3JlcXVlc3QgPSAxOworZG9uZToKKwlwcml2LT5pYnNzX2pvaW5fcmVzdWx0ID0gcmV0OworCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+Y2ZnX3dvcmtxdWV1ZSk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIENGRzgwMi4xMSBvcGVyYXRpb24gaGFuZGxlciB0byBsZWF2ZSBhbiBJQlNTLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgd29yayBpZiBhIGxlYXZlIG9wZXJhdGlvbiBpcworICogYWxyZWFkeSBpbiBwcm9ncmVzcy4KKyAqLworc3RhdGljIGludAorbXdpZmlleF9jZmc4MDIxMV9sZWF2ZV9pYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9IG13aWZpZXhfY2ZnODAyMTFfZ2V0X3ByaXYod2lwaHkpOworCisJaWYgKHByaXYtPmRpc2Nvbm5lY3QpCisJCXJldHVybiAtRUJVU1k7CisKKwlwcml2LT5kaXNjb25uZWN0ID0gMTsKKworCXdpcGh5X2RiZyh3aXBoeSwgImluZm86IGRpc2Nvbm5lY3RpbmcgZnJvbSBlc3NpZCAlcE1cbiIsCisJCQlwcml2LT5jZmdfYnNzaWQpOworCWlmIChtd2lmaWV4X2RlYXV0aGVudGljYXRlKHByaXYsIE5VTEwpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+Y2ZnX3dvcmtxdWV1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENGRzgwMi4xMSBvcGVyYXRpb24gaGFuZGxlciBmb3Igc2NhbiByZXF1ZXN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXNzdWVzIGEgc2NhbiByZXF1ZXN0IHRvIHRoZSBmaXJtd2FyZSBiYXNlZCB1cG9uCisgKiB0aGUgdXNlciBzcGVjaWZpZWQgc2NhbiBjb25maWd1cmF0aW9uLiBPbiBzdWNjZXNzZnVsbCBjb21wbGV0aW9uLAorICogaXQgYWxzbyBpbmZvcm1zIHRoZSByZXN1bHRzLgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X2NmZzgwMjExX3NjYW4oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICAgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0gbXdpZmlleF9uZXRkZXZfZ2V0X3ByaXYoZGV2KTsKKworCXdpcGh5X2RiZyh3aXBoeSwgImluZm86IHJlY2VpdmVkIHNjYW4gcmVxdWVzdCBvbiAlc1xuIiwgZGV2LT5uYW1lKTsKKworCWlmIChwcml2LT5zY2FuX3JlcXVlc3QgJiYgcHJpdi0+c2Nhbl9yZXF1ZXN0ICE9IHJlcXVlc3QpCisJCXJldHVybiAtRUJVU1k7CisKKwlwcml2LT5zY2FuX3JlcXVlc3QgPSByZXF1ZXN0OworCisJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5jZmdfd29ya3F1ZXVlKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB1cCB0aGUgQ0ZHODAyLjExIHNwZWNpZmljIEhUIGNhcGFiaWxpdHkgZmllbGRzCisgKiB3aXRoIGRlZmF1bHQgdmFsdWVzLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgZGVmYXVsdCB2YWx1ZXMgYXJlIHNldCAtCisgKiAgICAgIC0gSFQgU3VwcG9ydGVkID0gVHJ1ZQorICogICAgICAtIE1heGltdW0gQU1QRFUgbGVuZ3RoIGZhY3RvciA9IElFRUU4MDIxMV9IVF9NQVhfQU1QRFVfNjRLCisgKiAgICAgIC0gTWluaW11bSBBTVBEVSBzcGFjaW5nID0gSUVFRTgwMjExX0hUX01QRFVfREVOU0lUWV9OT05FCisgKiAgICAgIC0gSFQgQ2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBieSBmaXJtd2FyZQorICogICAgICAtIE1DUyBpbmZvcm1hdGlvbiwgUnggbWFzayA9IDB4ZmYKKyAqICAgICAgLSBNQ0QgaW5mb3JtYXRpb24sIFR4IHBhcmFtZXRlcnMgPSBJRUVFODAyMTFfSFRfTUNTX1RYX0RFRklORUQgKDB4MDEpCisgKi8KK3N0YXRpYyB2b2lkCittd2lmaWV4X3NldHVwX2h0X2NhcHMoc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwICpodF9pbmZvLAorCQkgICAgICBzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KQoreworCWludCByeF9tY3Nfc3VwcDsKKwlzdHJ1Y3QgaWVlZTgwMjExX21jc19pbmZvIG1jc19zZXQ7CisJdTggKm1jcyA9ICh1OCAqKSZtY3Nfc2V0OworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCisJaHRfaW5mby0+aHRfc3VwcG9ydGVkID0gdHJ1ZTsKKwlodF9pbmZvLT5hbXBkdV9mYWN0b3IgPSBJRUVFODAyMTFfSFRfTUFYX0FNUERVXzY0SzsKKwlodF9pbmZvLT5hbXBkdV9kZW5zaXR5ID0gSUVFRTgwMjExX0hUX01QRFVfREVOU0lUWV9OT05FOworCisJbWVtc2V0KCZodF9pbmZvLT5tY3MsIDAsIHNpemVvZihodF9pbmZvLT5tY3MpKTsKKworCS8qIEZpbGwgSFQgY2FwYWJpbGl0eSBpbmZvcm1hdGlvbiAqLworCWlmIChJU1NVUFBfQ0hBTldJRFRINDAoYWRhcHRlci0+aHdfZG90XzExbl9kZXZfY2FwKSkKKwkJaHRfaW5mby0+Y2FwIHw9IElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwOworCWVsc2UKKwkJaHRfaW5mby0+Y2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MDsKKworCWlmIChJU1NVUFBfU0hPUlRHSTIwKGFkYXB0ZXItPmh3X2RvdF8xMW5fZGV2X2NhcCkpCisJCWh0X2luZm8tPmNhcCB8PSBJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMDsKKwllbHNlCisJCWh0X2luZm8tPmNhcCAmPSB+SUVFRTgwMjExX0hUX0NBUF9TR0lfMjA7CisKKwlpZiAoSVNTVVBQX1NIT1JUR0k0MChhZGFwdGVyLT5od19kb3RfMTFuX2Rldl9jYXApKQorCQlodF9pbmZvLT5jYXAgfD0gSUVFRTgwMjExX0hUX0NBUF9TR0lfNDA7CisJZWxzZQorCQlodF9pbmZvLT5jYXAgJj0gfklFRUU4MDIxMV9IVF9DQVBfU0dJXzQwOworCisJaWYgKElTU1VQUF9SWFNUQkMoYWRhcHRlci0+aHdfZG90XzExbl9kZXZfY2FwKSkKKwkJaHRfaW5mby0+Y2FwIHw9IDEgPDwgSUVFRTgwMjExX0hUX0NBUF9SWF9TVEJDX1NISUZUOworCWVsc2UKKwkJaHRfaW5mby0+Y2FwICY9IH4oMyA8PCBJRUVFODAyMTFfSFRfQ0FQX1JYX1NUQkNfU0hJRlQpOworCisJaWYgKElTU1VQUF9UWFNUQkMoYWRhcHRlci0+aHdfZG90XzExbl9kZXZfY2FwKSkKKwkJaHRfaW5mby0+Y2FwIHw9IElFRUU4MDIxMV9IVF9DQVBfVFhfU1RCQzsKKwllbHNlCisJCWh0X2luZm8tPmNhcCAmPSB+SUVFRTgwMjExX0hUX0NBUF9UWF9TVEJDOworCisJaHRfaW5mby0+Y2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX01BWF9BTVNEVTsKKwlodF9pbmZvLT5jYXAgfD0gSUVFRTgwMjExX0hUX0NBUF9TTV9QUzsKKworCXJ4X21jc19zdXBwID0gR0VUX1JYTUNTU1VQUChhZGFwdGVyLT5od19kZXZfbWNzX3N1cHBvcnQpOworCS8qIFNldCBNQ1MgZm9yIDF4MSAqLworCW1lbXNldChtY3MsIDB4ZmYsIHJ4X21jc19zdXBwKTsKKwkvKiBDbGVhciBhbGwgdGhlIG90aGVyIHZhbHVlcyAqLworCW1lbXNldCgmbWNzW3J4X21jc19zdXBwXSwgMCwKKwkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX21jc19pbmZvKSAtIHJ4X21jc19zdXBwKTsKKwlpZiAocHJpdi0+YnNzX21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAorCQkJSVNTVVBQX0NIQU5XSURUSDQwKGFkYXB0ZXItPmh3X2RvdF8xMW5fZGV2X2NhcCkpCisJCS8qIFNldCBNQ1MzMiBmb3IgaW5mcmEgbW9kZSBvciBhZC1ob2MgbW9kZSB3aXRoIDQwTUh6IHN1cHBvcnQgKi8KKwkJU0VUSFRfTUNTMzIobWNzX3NldC5yeF9tYXNrKTsKKworCW1lbWNweSgodTggKikgJmh0X2luZm8tPm1jcywgbWNzLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tY3NfaW5mbykpOworCisJaHRfaW5mby0+bWNzLnR4X3BhcmFtcyA9IElFRUU4MDIxMV9IVF9NQ1NfVFhfREVGSU5FRDsKK30KKworLyogc3RhdGlvbiBjZmc4MDIxMSBvcGVyYXRpb25zICovCitzdGF0aWMgc3RydWN0IGNmZzgwMjExX29wcyBtd2lmaWV4X2NmZzgwMjExX29wcyA9IHsKKwkuY2hhbmdlX3ZpcnR1YWxfaW50ZiA9IG13aWZpZXhfY2ZnODAyMTFfY2hhbmdlX3ZpcnR1YWxfaW50ZiwKKwkuc2NhbiA9IG13aWZpZXhfY2ZnODAyMTFfc2NhbiwKKwkuY29ubmVjdCA9IG13aWZpZXhfY2ZnODAyMTFfY29ubmVjdCwKKwkuZGlzY29ubmVjdCA9IG13aWZpZXhfY2ZnODAyMTFfZGlzY29ubmVjdCwKKwkuZ2V0X3N0YXRpb24gPSBtd2lmaWV4X2NmZzgwMjExX2dldF9zdGF0aW9uLAorCS5zZXRfd2lwaHlfcGFyYW1zID0gbXdpZmlleF9jZmc4MDIxMV9zZXRfd2lwaHlfcGFyYW1zLAorCS5zZXRfY2hhbm5lbCA9IG13aWZpZXhfY2ZnODAyMTFfc2V0X2NoYW5uZWwsCisJLmpvaW5faWJzcyA9IG13aWZpZXhfY2ZnODAyMTFfam9pbl9pYnNzLAorCS5sZWF2ZV9pYnNzID0gbXdpZmlleF9jZmc4MDIxMV9sZWF2ZV9pYnNzLAorCS5hZGRfa2V5ID0gbXdpZmlleF9jZmc4MDIxMV9hZGRfa2V5LAorCS5kZWxfa2V5ID0gbXdpZmlleF9jZmc4MDIxMV9kZWxfa2V5LAorCS5zZXRfZGVmYXVsdF9rZXkgPSBtd2lmaWV4X2NmZzgwMjExX3NldF9kZWZhdWx0X2tleSwKKwkuc2V0X3Bvd2VyX21nbXQgPSBtd2lmaWV4X2NmZzgwMjExX3NldF9wb3dlcl9tZ210LAorCS5zZXRfdHhfcG93ZXIgPSBtd2lmaWV4X2NmZzgwMjExX3NldF90eF9wb3dlciwKK307CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyB0aGUgZGV2aWNlIHdpdGggQ0ZHODAyLjExIHN1YnN5c3RlbS4KKyAqCisgKiBUaGUgZnVuY3Rpb24gY3JlYXRlcyB0aGUgd2lyZWxlc3MgZGV2aWNlL3dpcGh5LCBwb3B1bGF0ZXMgaXQgd2l0aAorICogZGVmYXVsdCBwYXJhbWV0ZXJzIGFuZCBoYW5kbGVyIGZ1bmN0aW9uIHBvaW50ZXJzLCBhbmQgZmluYWxseQorICogcmVnaXN0ZXJzIHRoZSBkZXZpY2UuCisgKi8KK2ludCBtd2lmaWV4X3JlZ2lzdGVyX2NmZzgwMjExKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICptYWMsCisJCQkgICAgICBzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KQoreworCWludCByZXQ7CisJdm9pZCAqd2Rldl9wcml2OworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7CisKKwl3ZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdpcmVsZXNzX2RldiksIEdGUF9LRVJORUwpOworCWlmICghd2RldikgeworCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgIiVzOiBhbGxvY2F0aW5nIHdpcmVsZXNzIGRldmljZVxuIiwKKwkJCQkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXdkZXYtPndpcGh5ID0KKwkJd2lwaHlfbmV3KCZtd2lmaWV4X2NmZzgwMjExX29wcywKKwkJCSAgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKikpOworCWlmICghd2Rldi0+d2lwaHkpIHsKKwkJa2ZyZWUod2Rldik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwl3ZGV2LT5pZnR5cGUgPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOworCXdkZXYtPndpcGh5LT5tYXhfc2Nhbl9zc2lkcyA9IDEwOworCXdkZXYtPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPQorCQlCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfCBCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpOworCisJd2Rldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJm13aWZpZXhfYmFuZF8yZ2h6OworCW13aWZpZXhfc2V0dXBfaHRfY2FwcygKKwkJJndkZXYtPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS0+aHRfY2FwLCBwcml2KTsKKworCWlmIChwcml2LT5hZGFwdGVyLT5jb25maWdfYmFuZHMgJiBCQU5EX0EpIHsKKwkJd2Rldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0gJm13aWZpZXhfYmFuZF81Z2h6OworCQltd2lmaWV4X3NldHVwX2h0X2NhcHMoCisJCQkmd2Rldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLT5odF9jYXAsIHByaXYpOworCX0gZWxzZSB7CisJCXdkZXYtPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSA9IE5VTEw7CisJfQorCisJLyogSW5pdGlhbGl6ZSBjaXBoZXIgc3VpdHMgKi8KKwl3ZGV2LT53aXBoeS0+Y2lwaGVyX3N1aXRlcyA9IG13aWZpZXhfY2lwaGVyX3N1aXRlczsKKwl3ZGV2LT53aXBoeS0+bl9jaXBoZXJfc3VpdGVzID0gQVJSQVlfU0laRShtd2lmaWV4X2NpcGhlcl9zdWl0ZXMpOworCisJbWVtY3B5KHdkZXYtPndpcGh5LT5wZXJtX2FkZHIsIG1hYywgNik7CisJd2Rldi0+d2lwaHktPnNpZ25hbF90eXBlID0gQ0ZHODAyMTFfU0lHTkFMX1RZUEVfTUJNOworCisJLyogV2UgYXJlIHVzaW5nIGN1c3RvbSBkb21haW5zICovCisJd2Rldi0+d2lwaHktPmZsYWdzIHw9IFdJUEhZX0ZMQUdfQ1VTVE9NX1JFR1VMQVRPUlk7CisKKwl3ZGV2LT53aXBoeS0+cmVnX25vdGlmaWVyID0gbXdpZmlleF9yZWdfbm90aWZpZXI7CisKKwkvKiBTZXQgc3RydWN0IG13aWZpZXhfcHJpdmF0ZSBwb2ludGVyIGluIHdpcGh5X3ByaXYgKi8KKwl3ZGV2X3ByaXYgPSB3aXBoeV9wcml2KHdkZXYtPndpcGh5KTsKKworCSoodW5zaWduZWQgbG9uZyAqKSB3ZGV2X3ByaXYgPSAodW5zaWduZWQgbG9uZykgcHJpdjsKKworCXJldCA9IHdpcGh5X3JlZ2lzdGVyKHdkZXYtPndpcGh5KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgIiVzOiByZWdpc3RlcmluZyBjZmc4MDIxMSBkZXZpY2VcbiIsCisJCQkJCQlfX2Z1bmNfXyk7CisJCXdpcGh5X2ZyZWUod2Rldi0+d2lwaHkpOworCQlrZnJlZSh3ZGV2KTsKKwkJcmV0dXJuIHJldDsKKwl9IGVsc2UgeworCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwKKwkJCQkiaW5mbzogc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQgd2lwaHkgZGV2aWNlXG4iKTsKKwl9CisKKwlkZXZfbmV0X3NldChkZXYsIHdpcGh5X25ldCh3ZGV2LT53aXBoeSkpOworCWRldi0+aWVlZTgwMjExX3B0ciA9IHdkZXY7CisJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIHdkZXYtPndpcGh5LT5wZXJtX2FkZHIsIDYpOworCW1lbWNweShkZXYtPnBlcm1fYWRkciwgd2Rldi0+d2lwaHktPnBlcm1fYWRkciwgNik7CisJU0VUX05FVERFVl9ERVYoZGV2LCB3aXBoeV9kZXYod2Rldi0+d2lwaHkpKTsKKwlwcml2LT53ZGV2ID0gd2RldjsKKworCWRldi0+ZmxhZ3MgfD0gSUZGX0JST0FEQ0FTVCB8IElGRl9NVUxUSUNBU1Q7CisJZGV2LT53YXRjaGRvZ190aW1lbyA9IE1XSUZJRVhfREVGQVVMVF9XQVRDSERPR19USU1FT1VUOworCWRldi0+aGFyZF9oZWFkZXJfbGVuICs9IE1XSUZJRVhfTUlOX0RBVEFfSEVBREVSX0xFTjsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIHJlc3VsdCBvZiBkaWZmZXJlbnQgcGVuZGluZyBuZXR3b3JrIG9wZXJhdGlvbnMuCisgKgorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSBoYW5kbGVkIGFuZCBDRkc4MDIuMTEgc3Vic3lzdGVtIGlzCisgKiBub3RpZmllZCBhY2NvcmRpbmdseSAtCisgKiAgICAgIC0gU2NhbiByZXF1ZXN0IGNvbXBsZXRpb24KKyAqICAgICAgLSBBc3NvY2lhdGlvbiByZXF1ZXN0IGNvbXBsZXRpb24KKyAqICAgICAgLSBJQlNTIGpvaW4gcmVxdWVzdCBjb21wbGV0aW9uCisgKiAgICAgIC0gRGlzY29ubmVjdCByZXF1ZXN0IGNvbXBsZXRpb24KKyAqLwordm9pZAorbXdpZmlleF9jZmc4MDIxMV9yZXN1bHRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUsIGNmZ193b3JrcXVldWUpOworCXN0cnVjdCBtd2lmaWV4X3VzZXJfc2Nhbl9jZmcgKnNjYW5fcmVxOworCWludCByZXQgPSAwLCBpOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKKworCWlmIChwcml2LT5zY2FuX3JlcXVlc3QpIHsKKwkJc2Nhbl9yZXEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXdpZmlleF91c2VyX3NjYW5fY2ZnKSwKKwkJCQkgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFzY2FuX3JlcSkgeworCQkJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsICJmYWlsZWQgdG8gYWxsb2MgIgorCQkJCQkJICAgICJzY2FuX3JlcVxuIik7CisJCQlyZXR1cm47CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IHByaXYtPnNjYW5fcmVxdWVzdC0+bl9zc2lkczsgaSsrKSB7CisJCQltZW1jcHkoc2Nhbl9yZXEtPnNzaWRfbGlzdFtpXS5zc2lkLAorCQkJCQlwcml2LT5zY2FuX3JlcXVlc3QtPnNzaWRzW2ldLnNzaWQsCisJCQkJCXByaXYtPnNjYW5fcmVxdWVzdC0+c3NpZHNbaV0uc3NpZF9sZW4pOworCQkJc2Nhbl9yZXEtPnNzaWRfbGlzdFtpXS5tYXhfbGVuID0KKwkJCQkJcHJpdi0+c2Nhbl9yZXF1ZXN0LT5zc2lkc1tpXS5zc2lkX2xlbjsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+c2Nhbl9yZXF1ZXN0LT5uX2NoYW5uZWxzOyBpKyspIHsKKwkJCWNoYW4gPSBwcml2LT5zY2FuX3JlcXVlc3QtPmNoYW5uZWxzW2ldOworCQkJc2Nhbl9yZXEtPmNoYW5fbGlzdFtpXS5jaGFuX251bWJlciA9IGNoYW4tPmh3X3ZhbHVlOworCQkJc2Nhbl9yZXEtPmNoYW5fbGlzdFtpXS5yYWRpb190eXBlID0gY2hhbi0+YmFuZDsKKwkJCWlmIChjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKQorCQkJCXNjYW5fcmVxLT5jaGFuX2xpc3RbaV0uc2Nhbl90eXBlID0KKwkJCQkJTVdJRklFWF9TQ0FOX1RZUEVfUEFTU0lWRTsKKwkJCWVsc2UKKwkJCQlzY2FuX3JlcS0+Y2hhbl9saXN0W2ldLnNjYW5fdHlwZSA9CisJCQkJCU1XSUZJRVhfU0NBTl9UWVBFX0FDVElWRTsKKwkJCXNjYW5fcmVxLT5jaGFuX2xpc3RbaV0uc2Nhbl90aW1lID0gMDsKKwkJfQorCQlpZiAobXdpZmlleF9zZXRfdXNlcl9zY2FuX2lvY3RsKHByaXYsIHNjYW5fcmVxKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlpZiAobXdpZmlleF9pbmZvcm1fYnNzX2Zyb21fc2Nhbl9yZXN1bHQocHJpdiwgTlVMTCkpCisJCQlyZXQgPSAtRUZBVUxUOworZG9uZToKKwkJcHJpdi0+c2Nhbl9yZXN1bHRfc3RhdHVzID0gcmV0OworCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86ICVzOiBzZW5kaW5nIHNjYW4gcmVzdWx0c1xuIiwKKwkJCQkJCQlfX2Z1bmNfXyk7CisJCWNmZzgwMjExX3NjYW5fZG9uZShwcml2LT5zY2FuX3JlcXVlc3QsCisJCQkJKHByaXYtPnNjYW5fcmVzdWx0X3N0YXR1cyA8IDApKTsKKwkJcHJpdi0+c2Nhbl9yZXF1ZXN0ID0gTlVMTDsKKwkJa2ZyZWUoc2Nhbl9yZXEpOworCX0KKworCWlmIChwcml2LT5hc3NvY19yZXF1ZXN0ID09IDEpIHsKKwkJaWYgKCFwcml2LT5hc3NvY19yZXN1bHQpIHsKKwkJCWNmZzgwMjExX2Nvbm5lY3RfcmVzdWx0KHByaXYtPm5ldGRldiwgcHJpdi0+Y2ZnX2Jzc2lkLAorCQkJCQkJTlVMTCwgMCwgTlVMTCwgMCwKKwkJCQkJCVdMQU5fU1RBVFVTX1NVQ0NFU1MsCisJCQkJCQlHRlBfS0VSTkVMKTsKKwkJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJCSJpbmZvOiBhc3NvY2lhdGVkIHRvIGJzc2lkICVwTSBzdWNjZXNzZnVsbHlcbiIsCisJCQkgICAgICAgcHJpdi0+Y2ZnX2Jzc2lkKTsKKwkJfSBlbHNlIHsKKwkJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJCSJpbmZvOiBhc3NvY2lhdGlvbiB0byBic3NpZCAlcE0gZmFpbGVkXG4iLAorCQkJICAgICAgIHByaXYtPmNmZ19ic3NpZCk7CisJCQltZW1zZXQocHJpdi0+Y2ZnX2Jzc2lkLCAwLCBFVEhfQUxFTik7CisJCX0KKwkJcHJpdi0+YXNzb2NfcmVxdWVzdCA9IDA7CisJCXByaXYtPmFzc29jX3Jlc3VsdCA9IDA7CisJfQorCisJaWYgKHByaXYtPmlic3Nfam9pbl9yZXF1ZXN0ID09IDEpIHsKKwkJaWYgKCFwcml2LT5pYnNzX2pvaW5fcmVzdWx0KSB7CisJCQljZmc4MDIxMV9pYnNzX2pvaW5lZChwcml2LT5uZXRkZXYsIHByaXYtPmNmZ19ic3NpZCwKKwkJCQkJICAgICBHRlBfS0VSTkVMKTsKKwkJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJCSJpbmZvOiBqb2luZWQvY3JlYXRlZCBhZGhvYyBuZXR3b3JrIHdpdGggYnNzaWQiCisJCQkJCSIgJXBNIHN1Y2Nlc3NmdWxseVxuIiwgcHJpdi0+Y2ZnX2Jzc2lkKTsKKwkJfSBlbHNlIHsKKwkJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJCSJpbmZvOiBmYWlsZWQgY3JlYXRpbmcvam9pbmluZyBhZGhvYyBuZXR3b3JrXG4iKTsKKwkJfQorCQlwcml2LT5pYnNzX2pvaW5fcmVxdWVzdCA9IDA7CisJCXByaXYtPmlic3Nfam9pbl9yZXN1bHQgPSAwOworCX0KKworCWlmIChwcml2LT5kaXNjb25uZWN0KSB7CisJCW1lbXNldChwcml2LT5jZmdfYnNzaWQsIDAsIEVUSF9BTEVOKTsKKwkJcHJpdi0+ZGlzY29ubmVjdCA9IDA7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9jZmc4MDIxMS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9jZmc4MDIxMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZGI4ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2NmZzgwMjExLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIE1hcnZlbGwgV2lyZWxlc3MgTEFOIGRldmljZSBkcml2ZXI6IENGRzgwMjExCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5hdGlvbmFsCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4KKyAqIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBvZiB3aGljaAorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0Egb3Igb24gdGhlCisgKiB3b3JsZHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQuCisgKgorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNlIHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dAorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLgorICovCisKKyNpZm5kZWYgX19NV0lGSUVYX0NGRzgwMjExX18KKyNkZWZpbmUgX19NV0lGSUVYX0NGRzgwMjExX18KKworI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgorCisjaW5jbHVkZSAibWFpbi5oIgorCitpbnQgbXdpZmlleF9yZWdpc3Rlcl9jZmc4MDIxMShzdHJ1Y3QgbmV0X2RldmljZSAqLCB1OCAqLAorCQkJCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKik7CisKK3ZvaWQgbXdpZmlleF9jZmc4MDIxMV9yZXN1bHRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvY2ZwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2NmcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwY2FkYTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2NmcC5jCkBAIC0wLDAgKzEsMzYwIEBACisvKgorICogTWFydmVsbCBXaXJlbGVzcyBMQU4gZGV2aWNlIGRyaXZlcjogQ2hhbm5lbCwgRnJlcXVlbmNlIGFuZCBQb3dlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQKKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKyAqLworCisjaW5jbHVkZSAiZGVjbC5oIgorI2luY2x1ZGUgImlvY3RsLmgiCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgImZ3LmgiCisjaW5jbHVkZSAibWFpbi5oIgorI2luY2x1ZGUgImNmZzgwMjExLmgiCisKKy8qIDEwMG1XICovCisjZGVmaW5lIE1XSUZJRVhfVFhfUFdSX0RFRkFVTFQgICAgIDIwCisvKiAxMDBtVyAqLworI2RlZmluZSBNV0lGSUVYX1RYX1BXUl9VU19ERUZBVUxUICAgICAgMjAKKy8qIDUwbVcgKi8KKyNkZWZpbmUgTVdJRklFWF9UWF9QV1JfSlBfREVGQVVMVCAgICAgIDE2CisvKiAxMDBtVyAqLworI2RlZmluZSBNV0lGSUVYX1RYX1BXUl9GUl8xMDBNVyAgICAgICAgMjAKKy8qIDEwbVcgKi8KKyNkZWZpbmUgTVdJRklFWF9UWF9QV1JfRlJfMTBNVyAgICAgICAgIDEwCisvKiAxMDBtVyAqLworI2RlZmluZSBNV0lGSUVYX1RYX1BXUl9FTUVBX0RFRkFVTFQgICAgMjAKKworc3RhdGljIHU4IGFkaG9jX3JhdGVzX2JbQl9TVVBQT1JURURfUkFURVNdID0geyAweDgyLCAweDg0LCAweDhiLCAweDk2LCAwIH07CisKK3N0YXRpYyB1OCBhZGhvY19yYXRlc19nW0dfU1VQUE9SVEVEX1JBVEVTXSA9IHsgMHg4YywgMHgxMiwgMHg5OCwgMHgyNCwKKwkJCQkJICAgICAgIDB4YjAsIDB4NDgsIDB4NjAsIDB4NmMsIDAgfTsKKworc3RhdGljIHU4IGFkaG9jX3JhdGVzX2JnW0JHX1NVUFBPUlRFRF9SQVRFU10gPSB7IDB4ODIsIDB4ODQsIDB4OGIsIDB4OTYsCisJCQkJCQkgMHgwYywgMHgxMiwgMHgxOCwgMHgyNCwKKwkJCQkJCSAweDMwLCAweDQ4LCAweDYwLCAweDZjLCAwIH07CisKK3N0YXRpYyB1OCBhZGhvY19yYXRlc19hW0FfU1VQUE9SVEVEX1JBVEVTXSA9IHsgMHg4YywgMHgxMiwgMHg5OCwgMHgyNCwKKwkJCQkJICAgICAgIDB4YjAsIDB4NDgsIDB4NjAsIDB4NmMsIDAgfTsKK3U4IHN1cHBvcnRlZF9yYXRlc19hW0FfU1VQUE9SVEVEX1JBVEVTXSA9IHsgMHgwYywgMHgxMiwgMHgxOCwgMHgyNCwKKwkJCQkJMHhiMCwgMHg0OCwgMHg2MCwgMHg2YywgMCB9Oworc3RhdGljIHUxNiBtd2lmaWV4X2RhdGFfcmF0ZXNbTVdJRklFWF9TVVBQT1JURURfUkFURVNfRVhUXSA9IHsgMHgwMiwgMHgwNCwKKwkJCQkJMHgwQiwgMHgxNiwgMHgwMCwgMHgwQywgMHgxMiwgMHgxOCwKKwkJCQkJMHgyNCwgMHgzMCwgMHg0OCwgMHg2MCwgMHg2QywgMHg5MCwKKwkJCQkJMHgwRCwgMHgxQSwgMHgyNywgMHgzNCwgMHg0RSwgMHg2OCwKKwkJCQkJMHg3NSwgMHg4MiwgMHgwQywgMHgxQiwgMHgzNiwgMHg1MSwKKwkJCQkJMHg2QywgMHhBMiwgMHhEOCwgMHhGMywgMHgxMEUsIDB4MDAgfTsKKwordTggc3VwcG9ydGVkX3JhdGVzX2JbQl9TVVBQT1JURURfUkFURVNdID0geyAweDAyLCAweDA0LCAweDBiLCAweDE2LCAwIH07CisKK3U4IHN1cHBvcnRlZF9yYXRlc19nW0dfU1VQUE9SVEVEX1JBVEVTXSA9IHsgMHgwYywgMHgxMiwgMHgxOCwgMHgyNCwKKwkJCQkJMHgzMCwgMHg0OCwgMHg2MCwgMHg2YywgMCB9OworCit1OCBzdXBwb3J0ZWRfcmF0ZXNfYmdbQkdfU1VQUE9SVEVEX1JBVEVTXSA9IHsgMHgwMiwgMHgwNCwgMHgwYiwgMHgwYywKKwkJCQkJMHgxMiwgMHgxNiwgMHgxOCwgMHgyNCwgMHgzMCwgMHg0OCwKKwkJCQkJMHg2MCwgMHg2YywgMCB9OworCit1MTYgcmVnaW9uX2NvZGVfaW5kZXhbTVdJRklFWF9NQVhfUkVHSU9OX0NPREVdID0geyAweDEwLCAweDIwLCAweDMwLAorCQkJCQkJMHgzMiwgMHg0MCwgMHg0MSwgMHhmZiB9OworCit1OCBzdXBwb3J0ZWRfcmF0ZXNfbltOX1NVUFBPUlRFRF9SQVRFU10gPSB7IDB4MDIsIDB4MDQsIDAgfTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gbWFwcyBhbiBpbmRleCBpbiBzdXBwb3J0ZWQgcmF0ZXMgdGFibGUgaW50bworICogdGhlIGNvcnJlc3BvbmRpbmcgZGF0YSByYXRlLgorICovCit1MzIgbXdpZmlleF9pbmRleF90b19kYXRhX3JhdGUodTggaW5kZXgsIHU4IGh0X2luZm8pCit7CisJdTE2IG1jc19yYXRlWzRdWzhdID0geworCQl7MHgxYiwgMHgzNiwgMHg1MSwgMHg2YywgMHhhMiwgMHhkOCwgMHhmMywgMHgxMGV9CisJLAkJCS8qIExHIDQwTSAqLworCXsweDFlLCAweDNjLCAweDVhLCAweDc4LCAweGI0LCAweGYwLCAweDEwZSwgMHgxMmN9CisJLAkJCS8qIFNHIDQwTSAqLworCXsweDBkLCAweDFhLCAweDI3LCAweDM0LCAweDRlLCAweDY4LCAweDc1LCAweDgyfQorCSwJCQkvKiBMRyAyME0gKi8KKwl7MHgwZSwgMHgxYywgMHgyYiwgMHgzOSwgMHg1NiwgMHg3MywgMHg4MiwgMHg5MH0KKwl9OwkJCS8qIFNHIDIwTSAqLworCisJdTMyIHJhdGU7CisKKwlpZiAoaHRfaW5mbyAmIEJJVCgwKSkgeworCQlpZiAoaW5kZXggPT0gTVdJRklFWF9SQVRFX0JJVE1BUF9NQ1MwKSB7CisJCQlpZiAoaHRfaW5mbyAmIEJJVCgyKSkKKwkJCQlyYXRlID0gMHgwRDsJLyogTUNTIDMyIFNHSSByYXRlICovCisJCQllbHNlCisJCQkJcmF0ZSA9IDB4MEM7CS8qIE1DUyAzMiBMR0kgcmF0ZSAqLworCQl9IGVsc2UgaWYgKGluZGV4IDwgOCkgeworCQkJaWYgKGh0X2luZm8gJiBCSVQoMSkpIHsKKwkJCQlpZiAoaHRfaW5mbyAmIEJJVCgyKSkKKwkJCQkJLyogU0dJLCA0ME0gKi8KKwkJCQkJcmF0ZSA9IG1jc19yYXRlWzFdW2luZGV4XTsKKwkJCQllbHNlCisJCQkJCS8qIExHSSwgNDBNICovCisJCQkJCXJhdGUgPSBtY3NfcmF0ZVswXVtpbmRleF07CisJCQl9IGVsc2UgeworCQkJCWlmIChodF9pbmZvICYgQklUKDIpKQorCQkJCQkvKiBTR0ksIDIwTSAqLworCQkJCQlyYXRlID0gbWNzX3JhdGVbM11baW5kZXhdOworCQkJCWVsc2UKKwkJCQkJLyogTEdJLCAyME0gKi8KKwkJCQkJcmF0ZSA9IG1jc19yYXRlWzJdW2luZGV4XTsKKwkJCX0KKwkJfSBlbHNlCisJCQlyYXRlID0gbXdpZmlleF9kYXRhX3JhdGVzWzBdOworCX0gZWxzZSB7CisJCWlmIChpbmRleCA+PSBNV0lGSUVYX1NVUFBPUlRFRF9SQVRFU19FWFQpCisJCQlpbmRleCA9IDA7CisJCXJhdGUgPSBtd2lmaWV4X2RhdGFfcmF0ZXNbaW5kZXhdOworCX0KKwlyZXR1cm4gcmF0ZTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gbWFwcyBhIGRhdGEgcmF0ZSB2YWx1ZSBpbnRvIGNvcnJlc3BvbmRpbmcgaW5kZXggaW4gc3VwcG9ydGVkCisgKiByYXRlcyB0YWJsZS4KKyAqLwordTggbXdpZmlleF9kYXRhX3JhdGVfdG9faW5kZXgodTMyIHJhdGUpCit7CisJdTE2ICpwdHI7CisKKwlpZiAocmF0ZSkgeworCQlwdHIgPSBtZW1jaHIobXdpZmlleF9kYXRhX3JhdGVzLCByYXRlLAorCQkJCXNpemVvZihtd2lmaWV4X2RhdGFfcmF0ZXMpKTsKKwkJaWYgKHB0cikKKwkJCXJldHVybiAodTgpIChwdHIgLSBtd2lmaWV4X2RhdGFfcmF0ZXMpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY3VycmVudCBhY3RpdmUgZGF0YSByYXRlcy4KKyAqCisgKiBUaGUgcmVzdWx0IG1heSB2YXJ5IGRlcGVuZGluZyB1cG9uIGNvbm5lY3Rpb24gc3RhdHVzLgorICovCit1MzIgbXdpZmlleF9nZXRfYWN0aXZlX2RhdGFfcmF0ZXMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggKnJhdGVzKQoreworCWlmICghcHJpdi0+bWVkaWFfY29ubmVjdGVkKQorCQlyZXR1cm4gbXdpZmlleF9nZXRfc3VwcG9ydGVkX3JhdGVzKHByaXYsIHJhdGVzKTsKKwllbHNlCisJCXJldHVybiBtd2lmaWV4X2NvcHlfcmF0ZXMocmF0ZXMsIDAsCisJCQkJICAgICAgIHByaXYtPmN1cnJfYnNzX3BhcmFtcy5kYXRhX3JhdGVzLAorCQkJCSAgICAgICBwcml2LT5jdXJyX2Jzc19wYXJhbXMubnVtX29mX3JhdGVzKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gbG9jYXRlcyB0aGUgQ2hhbm5lbC1GcmVxdWVuY3ktUG93ZXIgdHJpcGxldCBiYXNlZCB1cG9uCisgKiBiYW5kIGFuZCBjaGFubmVsIHBhcmFtZXRlcnMuCisgKi8KK3N0cnVjdCBtd2lmaWV4X2NoYW5fZnJlcV9wb3dlciAqCittd2lmaWV4X2dldF9jZnBfYnlfYmFuZF9hbmRfY2hhbm5lbF9mcm9tX2NmZzgwMjExKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUKKwkJCQkJCSAgKnByaXYsIHU4IGJhbmQsIHUxNiBjaGFubmVsKQoreworCXN0cnVjdCBtd2lmaWV4X2NoYW5fZnJlcV9wb3dlciAqY2ZwID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoOworCWludCBpOworCisJaWYgKG13aWZpZXhfYmFuZF90b19yYWRpb190eXBlKGJhbmQpID09IEhvc3RDbWRfU0NBTl9SQURJT19UWVBFX0JHKQorCQlzYmFuZCA9IHByaXYtPndkZXYtPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKKwllbHNlCisJCXNiYW5kID0gcHJpdi0+d2Rldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOworCisJaWYgKCFzYmFuZCkgeworCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgIiVzOiBjYW5ub3QgZmluZCBjZnAgYnkgYmFuZCAlZCIKKwkJCQkiICYgY2hhbm5lbCAlZFxuIiwgX19mdW5jX18sIGJhbmQsIGNoYW5uZWwpOworCQlyZXR1cm4gY2ZwOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9jaGFubmVsczsgaSsrKSB7CisJCWNoID0gJnNiYW5kLT5jaGFubmVsc1tpXTsKKwkJaWYgKCgoY2gtPmh3X3ZhbHVlID09IGNoYW5uZWwpIHx8CisJCQkoY2hhbm5lbCA9PSBGSVJTVF9WQUxJRF9DSEFOTkVMKSkKKwkJCSYmICEoY2gtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpKSB7CisJCQlwcml2LT5jZnAuY2hhbm5lbCA9IGNoYW5uZWw7CisJCQlwcml2LT5jZnAuZnJlcSA9IGNoLT5jZW50ZXJfZnJlcTsKKwkJCXByaXYtPmNmcC5tYXhfdHhfcG93ZXIgPSBjaC0+bWF4X3Bvd2VyOworCQkJY2ZwID0gJnByaXYtPmNmcDsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChpID09IHNiYW5kLT5uX2NoYW5uZWxzKQorCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgIiVzOiBjYW5ub3QgZmluZCBjZnAgYnkgYmFuZCAlZCIKKwkJCQkiICYgY2hhbm5lbCAlZFxuIiwgX19mdW5jX18sIGJhbmQsIGNoYW5uZWwpOworCisJcmV0dXJuIGNmcDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gbG9jYXRlcyB0aGUgQ2hhbm5lbC1GcmVxdWVuY3ktUG93ZXIgdHJpcGxldCBiYXNlZCB1cG9uCisgKiBiYW5kIGFuZCBmcmVxdWVuY3kgcGFyYW1ldGVycy4KKyAqLworc3RydWN0IG13aWZpZXhfY2hhbl9mcmVxX3Bvd2VyICoKK213aWZpZXhfZ2V0X2NmcF9ieV9iYW5kX2FuZF9mcmVxX2Zyb21fY2ZnODAyMTEoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkJICAgICAgIHU4IGJhbmQsIHUzMiBmcmVxKQoreworCXN0cnVjdCBtd2lmaWV4X2NoYW5fZnJlcV9wb3dlciAqY2ZwID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoOworCWludCBpOworCisJaWYgKG13aWZpZXhfYmFuZF90b19yYWRpb190eXBlKGJhbmQpID09IEhvc3RDbWRfU0NBTl9SQURJT19UWVBFX0JHKQorCQlzYmFuZCA9IHByaXYtPndkZXYtPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKKwllbHNlCisJCXNiYW5kID0gcHJpdi0+d2Rldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOworCisJaWYgKCFzYmFuZCkgeworCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgIiVzOiBjYW5ub3QgZmluZCBjZnAgYnkgYmFuZCAlZCIKKwkJCQkiICYgZnJlcSAlZFxuIiwgX19mdW5jX18sIGJhbmQsIGZyZXEpOworCQlyZXR1cm4gY2ZwOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9jaGFubmVsczsgaSsrKSB7CisJCWNoID0gJnNiYW5kLT5jaGFubmVsc1tpXTsKKwkJaWYgKChjaC0+Y2VudGVyX2ZyZXEgPT0gZnJlcSkgJiYKKwkJCSEoY2gtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpKSB7CisJCQlwcml2LT5jZnAuY2hhbm5lbCA9IGNoLT5od192YWx1ZTsKKwkJCXByaXYtPmNmcC5mcmVxID0gZnJlcTsKKwkJCXByaXYtPmNmcC5tYXhfdHhfcG93ZXIgPSBjaC0+bWF4X3Bvd2VyOworCQkJY2ZwID0gJnByaXYtPmNmcDsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChpID09IHNiYW5kLT5uX2NoYW5uZWxzKQorCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgIiVzOiBjYW5ub3QgZmluZCBjZnAgYnkgYmFuZCAlZCIKKwkJCQkiICYgZnJlcSAlZFxuIiwgX19mdW5jX18sIGJhbmQsIGZyZXEpOworCisJcmV0dXJuIGNmcDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBkYXRhIHJhdGUgaXMgc2V0IHRvIGF1dG8uCisgKi8KK3U4Cittd2lmaWV4X2lzX3JhdGVfYXV0byhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KQoreworCXUzMiBpOworCWludCByYXRlX251bSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcml2LT5iaXRtYXBfcmF0ZXMpOyBpKyspCisJCWlmIChwcml2LT5iaXRtYXBfcmF0ZXNbaV0pCisJCQlyYXRlX251bSsrOworCisJaWYgKHJhdGVfbnVtID4gMSkKKwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHJhdGUgYml0bWFwIGludG8gcmF0ZSBpbmRleC4KKyAqLworaW50IG13aWZpZXhfZ2V0X3JhdGVfaW5kZXgodTE2ICpyYXRlX2JpdG1hcCwgaW50IHNpemUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZSAqIDg7IGkrKykKKwkJaWYgKHJhdGVfYml0bWFwW2kgLyAxNl0gJiAoMSA8PCAoaSAlIDE2KSkpCisJCQlyZXR1cm4gaTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBzdXBwb3J0ZWQgZGF0YSByYXRlcy4KKyAqCisgKiBUaGUgZnVuY3Rpb24gd29ya3MgaW4gYm90aCBBZC1Ib2MgYW5kIGluZnJhIG1vZGUgYnkgcHJpbnRpbmcgdGhlCisgKiBiYW5kIGFuZCByZXR1cm5pbmcgdGhlIGRhdGEgcmF0ZXMuCisgKi8KK3UzMiBtd2lmaWV4X2dldF9zdXBwb3J0ZWRfcmF0ZXMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggKnJhdGVzKQoreworCXUzMiBrID0gMDsKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlpZiAocHJpdi0+YnNzX21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQlzd2l0Y2ggKGFkYXB0ZXItPmNvbmZpZ19iYW5kcykgeworCQljYXNlIEJBTkRfQjoKKwkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogaW5mcmEgYmFuZD0lZCAiCisJCQkJInN1cHBvcnRlZF9yYXRlc19iXG4iLCBhZGFwdGVyLT5jb25maWdfYmFuZHMpOworCQkJayA9IG13aWZpZXhfY29weV9yYXRlcyhyYXRlcywgaywgc3VwcG9ydGVkX3JhdGVzX2IsCisJCQkJCSAgICAgICBzaXplb2Yoc3VwcG9ydGVkX3JhdGVzX2IpKTsKKwkJCWJyZWFrOworCQljYXNlIEJBTkRfRzoKKwkJY2FzZSBCQU5EX0cgfCBCQU5EX0dOOgorCQkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBpbmZyYSBiYW5kPSVkICIKKwkJCQkic3VwcG9ydGVkX3JhdGVzX2dcbiIsIGFkYXB0ZXItPmNvbmZpZ19iYW5kcyk7CisJCQlrID0gbXdpZmlleF9jb3B5X3JhdGVzKHJhdGVzLCBrLCBzdXBwb3J0ZWRfcmF0ZXNfZywKKwkJCQkJICAgICAgIHNpemVvZihzdXBwb3J0ZWRfcmF0ZXNfZykpOworCQkJYnJlYWs7CisJCWNhc2UgQkFORF9CIHwgQkFORF9HOgorCQljYXNlIEJBTkRfQSB8IEJBTkRfQiB8IEJBTkRfRzoKKwkJY2FzZSBCQU5EX0EgfCBCQU5EX0I6CisJCWNhc2UgQkFORF9BIHwgQkFORF9CIHwgQkFORF9HIHwgQkFORF9HTiB8IEJBTkRfQU46CisJCWNhc2UgQkFORF9CIHwgQkFORF9HIHwgQkFORF9HTjoKKwkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogaW5mcmEgYmFuZD0lZCAiCisJCQkJInN1cHBvcnRlZF9yYXRlc19iZ1xuIiwgYWRhcHRlci0+Y29uZmlnX2JhbmRzKTsKKwkJCWsgPSBtd2lmaWV4X2NvcHlfcmF0ZXMocmF0ZXMsIGssIHN1cHBvcnRlZF9yYXRlc19iZywKKwkJCQkJICAgICAgIHNpemVvZihzdXBwb3J0ZWRfcmF0ZXNfYmcpKTsKKwkJCWJyZWFrOworCQljYXNlIEJBTkRfQToKKwkJY2FzZSBCQU5EX0EgfCBCQU5EX0c6CisJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IGluZnJhIGJhbmQ9JWQgIgorCQkJCSJzdXBwb3J0ZWRfcmF0ZXNfYVxuIiwgYWRhcHRlci0+Y29uZmlnX2JhbmRzKTsKKwkJCWsgPSBtd2lmaWV4X2NvcHlfcmF0ZXMocmF0ZXMsIGssIHN1cHBvcnRlZF9yYXRlc19hLAorCQkJCQkgICAgICAgc2l6ZW9mKHN1cHBvcnRlZF9yYXRlc19hKSk7CisJCQlicmVhazsKKwkJY2FzZSBCQU5EX0EgfCBCQU5EX0FOOgorCQljYXNlIEJBTkRfQSB8IEJBTkRfRyB8IEJBTkRfQU4gfCBCQU5EX0dOOgorCQkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBpbmZyYSBiYW5kPSVkICIKKwkJCQkic3VwcG9ydGVkX3JhdGVzX2FcbiIsIGFkYXB0ZXItPmNvbmZpZ19iYW5kcyk7CisJCQlrID0gbXdpZmlleF9jb3B5X3JhdGVzKHJhdGVzLCBrLCBzdXBwb3J0ZWRfcmF0ZXNfYSwKKwkJCQkJICAgICAgIHNpemVvZihzdXBwb3J0ZWRfcmF0ZXNfYSkpOworCQkJYnJlYWs7CisJCWNhc2UgQkFORF9HTjoKKwkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogaW5mcmEgYmFuZD0lZCAiCisJCQkJInN1cHBvcnRlZF9yYXRlc19uXG4iLCBhZGFwdGVyLT5jb25maWdfYmFuZHMpOworCQkJayA9IG13aWZpZXhfY29weV9yYXRlcyhyYXRlcywgaywgc3VwcG9ydGVkX3JhdGVzX24sCisJCQkJCSAgICAgICBzaXplb2Yoc3VwcG9ydGVkX3JhdGVzX24pKTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJLyogQWQtaG9jIG1vZGUgKi8KKwkJc3dpdGNoIChhZGFwdGVyLT5hZGhvY19zdGFydF9iYW5kKSB7CisJCWNhc2UgQkFORF9COgorCQkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBhZGhvYyBCXG4iKTsKKwkJCWsgPSBtd2lmaWV4X2NvcHlfcmF0ZXMocmF0ZXMsIGssIGFkaG9jX3JhdGVzX2IsCisJCQkJCSAgICAgICBzaXplb2YoYWRob2NfcmF0ZXNfYikpOworCQkJYnJlYWs7CisJCWNhc2UgQkFORF9HOgorCQljYXNlIEJBTkRfRyB8IEJBTkRfR046CisJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IGFkaG9jIEcgb25seVxuIik7CisJCQlrID0gbXdpZmlleF9jb3B5X3JhdGVzKHJhdGVzLCBrLCBhZGhvY19yYXRlc19nLAorCQkJCQkgICAgICAgc2l6ZW9mKGFkaG9jX3JhdGVzX2cpKTsKKwkJCWJyZWFrOworCQljYXNlIEJBTkRfQiB8IEJBTkRfRzoKKwkJY2FzZSBCQU5EX0IgfCBCQU5EX0cgfCBCQU5EX0dOOgorCQkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBhZGhvYyBCR1xuIik7CisJCQlrID0gbXdpZmlleF9jb3B5X3JhdGVzKHJhdGVzLCBrLCBhZGhvY19yYXRlc19iZywKKwkJCQkJICAgICAgIHNpemVvZihhZGhvY19yYXRlc19iZykpOworCQkJYnJlYWs7CisJCWNhc2UgQkFORF9BOgorCQljYXNlIEJBTkRfQSB8IEJBTkRfQU46CisJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IGFkaG9jIEFcbiIpOworCQkJayA9IG13aWZpZXhfY29weV9yYXRlcyhyYXRlcywgaywgYWRob2NfcmF0ZXNfYSwKKwkJCQkJICAgICAgIHNpemVvZihhZGhvY19yYXRlc19hKSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBrOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9jbWRldnQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvY21kZXZ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q4OWZlZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvY21kZXZ0LmMKQEAgLTAsMCArMSwxNDE0IEBACisvKgorICogTWFydmVsbCBXaXJlbGVzcyBMQU4gZGV2aWNlIGRyaXZlcjogY29tbWFuZHMgYW5kIGV2ZW50cworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQKKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKyAqLworCisjaW5jbHVkZSAiZGVjbC5oIgorI2luY2x1ZGUgImlvY3RsLmgiCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgImZ3LmgiCisjaW5jbHVkZSAibWFpbi5oIgorI2luY2x1ZGUgIndtbS5oIgorI2luY2x1ZGUgIjExbi5oIgorCisvKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBhIGNvbW1hbmQgbm9kZS4KKyAqCisgKiBUaGUgYWN0dWFsIGFsbG9jYXRpb24gb2YgdGhlIG5vZGUgaXMgbm90IGRvbmUgYnkgdGhpcyBmdW5jdGlvbi4gSXQgb25seQorICogaW5pdGlhdGVzIGEgbm9kZSBieSBmaWxsaW5nIGl0IHdpdGggZGVmYXVsdCBwYXJhbWV0ZXJzLiBTaW1pbGFybHksCisgKiBhbGxvY2F0aW9uIG9mIHRoZSBkaWZmZXJlbnQgYnVmZmVycyB1c2VkIChJT0NUTCBidWZmZXIsIGRhdGEgYnVmZmVyKSBhcmUKKyAqIG5vdCBkb25lIGJ5IHRoaXMgZnVuY3Rpb24gZWl0aGVyLgorICovCitzdGF0aWMgdm9pZAorbXdpZmlleF9pbml0X2NtZF9ub2RlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCSAgICAgIHN0cnVjdCBjbWRfY3RybF9ub2RlICpjbWRfbm9kZSwKKwkJICAgICAgdTMyIGNtZF9vaWQsIHZvaWQgKmRhdGFfYnVmKQoreworCWNtZF9ub2RlLT5wcml2ID0gcHJpdjsKKwljbWRfbm9kZS0+Y21kX29pZCA9IGNtZF9vaWQ7CisJY21kX25vZGUtPndhaXRfcV9lbmFibGVkID0gcHJpdi0+YWRhcHRlci0+Y21kX3dhaXRfcV9yZXF1aXJlZDsKKwlwcml2LT5hZGFwdGVyLT5jbWRfd2FpdF9xX3JlcXVpcmVkID0gZmFsc2U7CisJY21kX25vZGUtPmRhdGFfYnVmID0gZGF0YV9idWY7CisJY21kX25vZGUtPmNtZF9za2IgPSBjbWRfbm9kZS0+c2tiOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgY29tbWFuZCBub2RlIGZyb20gdGhlIGZyZWUgcXVldWUgZGVwZW5kaW5nIHVwb24KKyAqIGF2YWlsYWJpbGl0eS4KKyAqLworc3RhdGljIHN0cnVjdCBjbWRfY3RybF9ub2RlICoKK213aWZpZXhfZ2V0X2NtZF9ub2RlKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGNtZF9jdHJsX25vZGUgKmNtZF9ub2RlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Y21kX2ZyZWVfcV9sb2NrLCBmbGFncyk7CisJaWYgKGxpc3RfZW1wdHkoJmFkYXB0ZXItPmNtZF9mcmVlX3EpKSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiR0VUX0NNRF9OT0RFOiBjbWQgbm9kZSBub3QgYXZhaWxhYmxlXG4iKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kX2ZyZWVfcV9sb2NrLCBmbGFncyk7CisJCXJldHVybiBOVUxMOworCX0KKwljbWRfbm9kZSA9IGxpc3RfZmlyc3RfZW50cnkoJmFkYXB0ZXItPmNtZF9mcmVlX3EsCisJCQlzdHJ1Y3QgY21kX2N0cmxfbm9kZSwgbGlzdCk7CisJbGlzdF9kZWwoJmNtZF9ub2RlLT5saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5jbWRfZnJlZV9xX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBjbWRfbm9kZTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2xlYW5zIHVwIGEgY29tbWFuZCBub2RlLgorICoKKyAqIFRoZSBmdW5jdGlvbiByZXNldHMgdGhlIGZpZWxkcyBpbmNsdWRpbmcgdGhlIGJ1ZmZlciBwb2ludGVycy4KKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdHJ5IHRvIGZyZWUgdGhlIGJ1ZmZlcnMuIFRoZXkgbXVzdCBiZQorICogZnJlZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgaG93ZXZlciBjYWxsIHRoZSByZWNlaXZlIGNvbXBsZXRpb24gY2FsbGJhY2sKKyAqIGluIGNhc2UgYSByZXNwb25zZSBidWZmZXIgaXMgc3RpbGwgYXZhaWxhYmxlIGJlZm9yZSByZXNldHRpbmcKKyAqIHRoZSBwb2ludGVyLgorICovCitzdGF0aWMgdm9pZAorbXdpZmlleF9jbGVhbl9jbWRfbm9kZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAorCQkgICAgICAgc3RydWN0IGNtZF9jdHJsX25vZGUgKmNtZF9ub2RlKQoreworCWNtZF9ub2RlLT5jbWRfb2lkID0gMDsKKwljbWRfbm9kZS0+Y21kX2ZsYWcgPSAwOworCWNtZF9ub2RlLT5kYXRhX2J1ZiA9IE5VTEw7CisJY21kX25vZGUtPndhaXRfcV9lbmFibGVkID0gZmFsc2U7CisKKwlpZiAoY21kX25vZGUtPnJlc3Bfc2tiKSB7CisJCWRldl9rZnJlZV9za2JfYW55KGNtZF9ub2RlLT5yZXNwX3NrYik7CisJCWNtZF9ub2RlLT5yZXNwX3NrYiA9IE5VTEw7CisJfQorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBzZW5kcyBhIGhvc3QgY29tbWFuZCB0byB0aGUgZmlybXdhcmUuCisgKgorICogVGhlIGZ1bmN0aW9uIGNvcGllcyB0aGUgaG9zdCBjb21tYW5kIGludG8gdGhlIGRyaXZlciBjb21tYW5kCisgKiBidWZmZXIsIHdoaWNoIHdpbGwgYmUgdHJhbnNmZXJyZWQgdG8gdGhlIGZpcm13YXJlIGxhdGVyIGJ5IHRoZQorICogbWFpbiB0aHJlYWQuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9jbWRfaG9zdF9jbWQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLCB2b2lkICpkYXRhX2J1ZikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9kc19taXNjX2NtZCAqcGNtZF9wdHIgPQorCQkoc3RydWN0IG13aWZpZXhfZHNfbWlzY19jbWQgKikgZGF0YV9idWY7CisKKwkvKiBDb3B5IHRoZSBIT1NUIGNvbW1hbmQgdG8gY29tbWFuZCBidWZmZXIgKi8KKwltZW1jcHkoKHZvaWQgKikgY21kLCBwY21kX3B0ci0+Y21kLCBwY21kX3B0ci0+bGVuKTsKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImNtZDogaG9zdCBjbWQgc2l6ZSA9ICVkXG4iLCBwY21kX3B0ci0+bGVuKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZG93bmxvYWRzIGEgY29tbWFuZCB0byB0aGUgZmlybXdhcmUuCisgKgorICogVGhlIGZ1bmN0aW9uIHBlcmZvcm1zIHNhbml0eSB0ZXN0cywgc2V0cyB0aGUgY29tbWFuZCBzZXF1ZW5jZQorICogbnVtYmVyIGFuZCBzaXplLCBjb252ZXJ0cyB0aGUgaGVhZGVyIGZpZWxkcyB0byBDUFUgZm9ybWF0IGJlZm9yZQorICogc2VuZGluZy4gQWZ0ZXJ3YXJkcywgaXQgbG9ncyB0aGUgY29tbWFuZCBJRCBhbmQgYWN0aW9uIGZvciBkZWJ1Z2dpbmcKKyAqIGFuZCBzZXRzIHVwIHRoZSBjb21tYW5kIHRpbWVvdXQgdGltZXIuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9kbmxkX2NtZF90b19mdyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCSAgc3RydWN0IGNtZF9jdHJsX25vZGUgKmNtZF9ub2RlKQoreworCisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJaW50IHJldDsKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqaG9zdF9jbWQ7CisJdWludDE2X3QgY21kX2NvZGU7CisJdWludDE2X3QgY21kX3NpemU7CisJc3RydWN0IHRpbWV2YWwgdHN0YW1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIWFkYXB0ZXIgfHwgIWNtZF9ub2RlKQorCQlyZXR1cm4gLTE7CisKKwlob3N0X2NtZCA9IChzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqKSAoY21kX25vZGUtPmNtZF9za2ItPmRhdGEpOworCisJLyogU2FuaXR5IHRlc3QgKi8KKwlpZiAoaG9zdF9jbWQgPT0gTlVMTCB8fCBob3N0X2NtZC0+c2l6ZSA9PSAwKSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiRE5MRF9DTUQ6IGhvc3RfY21kIGlzIG51bGwiCisJCQkiIG9yIGNtZCBzaXplIGlzIDAsIG5vdCBzZW5kaW5nXG4iKTsKKwkJaWYgKGNtZF9ub2RlLT53YWl0X3FfZW5hYmxlZCkKKwkJCWFkYXB0ZXItPmNtZF93YWl0X3Euc3RhdHVzID0gLTE7CisJCW13aWZpZXhfaW5zZXJ0X2NtZF90b19mcmVlX3EoYWRhcHRlciwgY21kX25vZGUpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogU2V0IGNvbW1hbmQgc2VxdWVuY2UgbnVtYmVyICovCisJYWRhcHRlci0+c2VxX251bSsrOworCWhvc3RfY21kLT5zZXFfbnVtID0gY3B1X3RvX2xlMTYoSG9zdENtZF9TRVRfU0VRX05PX0JTU19JTkZPCisJCQkgICAgKGFkYXB0ZXItPnNlcV9udW0sIGNtZF9ub2RlLT5wcml2LT5ic3NfbnVtLAorCQkJICAgICBjbWRfbm9kZS0+cHJpdi0+YnNzX3R5cGUpKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5td2lmaWV4X2NtZF9sb2NrLCBmbGFncyk7CisJYWRhcHRlci0+Y3Vycl9jbWQgPSBjbWRfbm9kZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5td2lmaWV4X2NtZF9sb2NrLCBmbGFncyk7CisKKwljbWRfY29kZSA9IGxlMTZfdG9fY3B1KGhvc3RfY21kLT5jb21tYW5kKTsKKwljbWRfc2l6ZSA9IGxlMTZfdG9fY3B1KGhvc3RfY21kLT5zaXplKTsKKworCXNrYl90cmltKGNtZF9ub2RlLT5jbWRfc2tiLCBjbWRfc2l6ZSk7CisKKwlkb19nZXR0aW1lb2ZkYXkoJnRzdGFtcCk7CisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJjbWQ6IEROTERfQ01EOiAoJWx1LiVsdSk6ICUjeCwgYWN0ICUjeCwgbGVuICVkLCIKKwkJIiBzZXFubyAlI3hcbiIsCisJCXRzdGFtcC50dl9zZWMsIHRzdGFtcC50dl91c2VjLCBjbWRfY29kZSwKKwkgICAgICAgbGUxNl90b19jcHUoKihfX2xlMTYgKikgKCh1OCAqKSBob3N0X2NtZCArIFNfRFNfR0VOKSksIGNtZF9zaXplLAorCSAgICAgICBsZTE2X3RvX2NwdShob3N0X2NtZC0+c2VxX251bSkpOworCisJc2tiX3B1c2goY21kX25vZGUtPmNtZF9za2IsIElOVEZfSEVBREVSX0xFTik7CisKKwlyZXQgPSBhZGFwdGVyLT5pZl9vcHMuaG9zdF90b19jYXJkKGFkYXB0ZXIsIE1XSUZJRVhfVFlQRV9DTUQsCisJCQkJCSAgICAgY21kX25vZGUtPmNtZF9za2ItPmRhdGEsCisJCQkJCSAgICAgY21kX25vZGUtPmNtZF9za2ItPmxlbiwgTlVMTCk7CisKKwlza2JfcHVsbChjbWRfbm9kZS0+Y21kX3NrYiwgSU5URl9IRUFERVJfTEVOKTsKKworCWlmIChyZXQgPT0gLTEpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJETkxEX0NNRDogaG9zdCB0byBjYXJkIGZhaWxlZFxuIik7CisJCWlmIChjbWRfbm9kZS0+d2FpdF9xX2VuYWJsZWQpCisJCQlhZGFwdGVyLT5jbWRfd2FpdF9xLnN0YXR1cyA9IC0xOworCQltd2lmaWV4X2luc2VydF9jbWRfdG9fZnJlZV9xKGFkYXB0ZXIsIGFkYXB0ZXItPmN1cnJfY21kKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+bXdpZmlleF9jbWRfbG9jaywgZmxhZ3MpOworCQlhZGFwdGVyLT5jdXJyX2NtZCA9IE5VTEw7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPm13aWZpZXhfY21kX2xvY2ssIGZsYWdzKTsKKworCQlhZGFwdGVyLT5kYmcubnVtX2NtZF9ob3N0X3RvX2NhcmRfZmFpbHVyZSsrOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogU2F2ZSB0aGUgbGFzdCBjb21tYW5kIGlkIGFuZCBhY3Rpb24gdG8gZGVidWcgbG9nICovCisJYWRhcHRlci0+ZGJnLmxhc3RfY21kX2luZGV4ID0KKwkJKGFkYXB0ZXItPmRiZy5sYXN0X2NtZF9pbmRleCArIDEpICUgREJHX0NNRF9OVU07CisJYWRhcHRlci0+ZGJnLmxhc3RfY21kX2lkW2FkYXB0ZXItPmRiZy5sYXN0X2NtZF9pbmRleF0gPSBjbWRfY29kZTsKKwlhZGFwdGVyLT5kYmcubGFzdF9jbWRfYWN0W2FkYXB0ZXItPmRiZy5sYXN0X2NtZF9pbmRleF0gPQorCQlsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSAoKHU4ICopIGhvc3RfY21kICsgU19EU19HRU4pKTsKKworCS8qIENsZWFyIEJTU19OT19CSVRTIGZyb20gSG9zdENtZCAqLworCWNtZF9jb2RlICY9IEhvc3RDbWRfQ01EX0lEX01BU0s7CisKKwkvKiBTZXR1cCB0aGUgdGltZXIgYWZ0ZXIgdHJhbnNtaXQgY29tbWFuZCAqLworCW1vZF90aW1lcigmYWRhcHRlci0+Y21kX3RpbWVyLAorCQlqaWZmaWVzICsgKE1XSUZJRVhfVElNRVJfMTBTICogSFopIC8gMTAwMCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZG93bmxvYWRzIGEgc2xlZXAgY29uZmlybSBjb21tYW5kIHRvIHRoZSBmaXJtd2FyZS4KKyAqCisgKiBUaGUgZnVuY3Rpb24gcGVyZm9ybXMgc2FuaXR5IHRlc3RzLCBzZXRzIHRoZSBjb21tYW5kIHNlcXVlbmNlCisgKiBudW1iZXIgYW5kIHNpemUsIGNvbnZlcnRzIHRoZSBoZWFkZXIgZmllbGRzIHRvIENQVSBmb3JtYXQgYmVmb3JlCisgKiBzZW5kaW5nLgorICoKKyAqIE5vIHJlc3BvbnNlcyBhcmUgbmVlZGVkIGZvciBzbGVlcCBjb25maXJtIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9kbmxkX3NsZWVwX2NvbmZpcm1fY21kKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2OworCXN0cnVjdCBtd2lmaWV4X29wdF9zbGVlcF9jb25maXJtICpzbGVlcF9jZm1fYnVmID0KKwkJCQkoc3RydWN0IG13aWZpZXhfb3B0X3NsZWVwX2NvbmZpcm0gKikKKwkJCQlhZGFwdGVyLT5zbGVlcF9jZm0tPmRhdGE7CisJcHJpdiA9IG13aWZpZXhfZ2V0X3ByaXYoYWRhcHRlciwgTVdJRklFWF9CU1NfUk9MRV9BTlkpOworCisJc2xlZXBfY2ZtX2J1Zi0+c2VxX251bSA9CisJCWNwdV90b19sZTE2KChIb3N0Q21kX1NFVF9TRVFfTk9fQlNTX0lORk8KKwkJCQkJKGFkYXB0ZXItPnNlcV9udW0sIHByaXYtPmJzc19udW0sCisJCQkJCSBwcml2LT5ic3NfdHlwZSkpKTsKKwlhZGFwdGVyLT5zZXFfbnVtKys7CisKKwlza2JfcHVzaChhZGFwdGVyLT5zbGVlcF9jZm0sIElOVEZfSEVBREVSX0xFTik7CisJcmV0ID0gYWRhcHRlci0+aWZfb3BzLmhvc3RfdG9fY2FyZChhZGFwdGVyLCBNV0lGSUVYX1RZUEVfQ01ELAorCQkJCQkgICAgIGFkYXB0ZXItPnNsZWVwX2NmbS0+ZGF0YSwKKwkJCQkJICAgICBhZGFwdGVyLT5zbGVlcF9jZm0tPmxlbiwgTlVMTCk7CisJc2tiX3B1bGwoYWRhcHRlci0+c2xlZXBfY2ZtLCBJTlRGX0hFQURFUl9MRU4pOworCisJaWYgKHJldCA9PSAtMSkgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIlNMRUVQX0NGTTogZmFpbGVkXG4iKTsKKwkJYWRhcHRlci0+ZGJnLm51bV9jbWRfc2xlZXBfY2ZtX2hvc3RfdG9fY2FyZF9mYWlsdXJlKys7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKEdFVF9CU1NfUk9MRShtd2lmaWV4X2dldF9wcml2KGFkYXB0ZXIsIE1XSUZJRVhfQlNTX1JPTEVfQU5ZKSkKKwkJCT09IE1XSUZJRVhfQlNTX1JPTEVfU1RBKSB7CisJCWlmICghc2xlZXBfY2ZtX2J1Zi0+cmVzcF9jdHJsKQorCQkJLyogUmVzcG9uc2UgaXMgbm90IG5lZWRlZCBmb3Igc2xlZXAKKwkJCSAgIGNvbmZpcm0gY29tbWFuZCAqLworCQkJYWRhcHRlci0+cHNfc3RhdGUgPSBQU19TVEFURV9TTEVFUDsKKwkJZWxzZQorCQkJYWRhcHRlci0+cHNfc3RhdGUgPSBQU19TVEFURV9TTEVFUF9DRk07CisKKwkJaWYgKCFzbGVlcF9jZm1fYnVmLT5yZXNwX2N0cmwKKwkJCQkmJiAoYWRhcHRlci0+aXNfaHNfY29uZmlndXJlZAorCQkJCQkmJiAhYWRhcHRlci0+c2xlZXBfcGVyaW9kLnBlcmlvZCkpIHsKKwkJCWFkYXB0ZXItPnBtX3dha2V1cF9jYXJkX3JlcSA9IHRydWU7CisJCQltd2lmaWV4X2hzX2FjdGl2YXRlZF9ldmVudChtd2lmaWV4X2dldF9wcml2KGFkYXB0ZXIsCisJCQkJCQlNV0lGSUVYX0JTU19ST0xFX1NUQSksIHRydWUpOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIHRoZSBjb21tYW5kIGJ1ZmZlcnMgYW5kIGxpbmtzIHRoZW0gdG8KKyAqIHRoZSBjb21tYW5kIGZyZWUgcXVldWUuCisgKgorICogVGhlIGRyaXZlciB1c2VzIGEgcHJlIGFsbG9jYXRlZCBudW1iZXIgb2YgY29tbWFuZCBidWZmZXJzLCB3aGljaAorICogYXJlIGNyZWF0ZWQgYXQgZHJpdmVyIGluaXRpYWxpemF0aW9ucyBhbmQgZnJlZWQgYXQgZHJpdmVyIGNsZWFudXAuCisgKiBFdmVyeSBjb21tYW5kIG5lZWRzIHRvIG9idGFpbiBhIGNvbW1hbmQgYnVmZmVyIGZyb20gdGhpcyBwb29sIGJlZm9yZQorICogaXQgY2FuIGJlIGlzc3VlZC4gVGhlIGNvbW1hbmQgZnJlZSBxdWV1ZSBsaXN0cyB0aGUgY29tbWFuZCBidWZmZXJzCisgKiBjdXJyZW50bHkgZnJlZSB0byB1c2UsIHdoaWxlIHRoZSBjb21tYW5kIHBlbmRpbmcgcXVldWUgbGlzdHMgdGhlCisgKiBjb21tYW5kIGJ1ZmZlcnMgYWxyZWFkeSBpbiB1c2UgYW5kIGF3YWl0aW5nIGhhbmRsaW5nLiBDb21tYW5kIGJ1ZmZlcnMKKyAqIGFyZSByZXR1cm5lZCB0byB0aGUgZnJlZSBxdWV1ZSBhZnRlciB1c2UuCisgKi8KK2ludCBtd2lmaWV4X2FsbG9jX2NtZF9idWZmZXIoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgY21kX2N0cmxfbm9kZSAqY21kX2FycmF5OworCXUzMiBidWZfc2l6ZTsKKwl1MzIgaTsKKworCS8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHN0cnVjdCBjbWRfY3RybF9ub2RlICovCisJYnVmX3NpemUgPSBzaXplb2Yoc3RydWN0IGNtZF9jdHJsX25vZGUpICogTVdJRklFWF9OVU1fT0ZfQ01EX0JVRkZFUjsKKwljbWRfYXJyYXkgPSBremFsbG9jKGJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNtZF9hcnJheSkgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIiVzOiBmYWlsZWQgdG8gYWxsb2MgY21kX2FycmF5XG4iLAorCQkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYWRhcHRlci0+Y21kX3Bvb2wgPSBjbWRfYXJyYXk7CisJbWVtc2V0KGFkYXB0ZXItPmNtZF9wb29sLCAwLCBidWZfc2l6ZSk7CisKKwkvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBjb21tYW5kIGJ1ZmZlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTVdJRklFWF9OVU1fT0ZfQ01EX0JVRkZFUjsgaSsrKSB7CisJCWNtZF9hcnJheVtpXS5za2IgPSBkZXZfYWxsb2Nfc2tiKE1XSUZJRVhfU0laRV9PRl9DTURfQlVGRkVSKTsKKwkJaWYgKCFjbWRfYXJyYXlbaV0uc2tiKSB7CisJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIkFMTE9DX0NNRF9CVUY6IG91dCBvZiBtZW1vcnlcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IE1XSUZJRVhfTlVNX09GX0NNRF9CVUZGRVI7IGkrKykKKwkJbXdpZmlleF9pbnNlcnRfY21kX3RvX2ZyZWVfcShhZGFwdGVyLCAmY21kX2FycmF5W2ldKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBmcmVlcyB0aGUgY29tbWFuZCBidWZmZXJzLgorICoKKyAqIFRoZSBmdW5jdGlvbiBjYWxscyB0aGUgY29tcGxldGlvbiBjYWxsYmFjayBmb3IgYWxsIHRoZSBjb21tYW5kCisgKiBidWZmZXJzIHRoYXQgc3RpbGwgaGF2ZSByZXNwb25zZSBidWZmZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGVtLgorICovCitpbnQgbXdpZmlleF9mcmVlX2NtZF9idWZmZXIoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgY21kX2N0cmxfbm9kZSAqY21kX2FycmF5OworCXUzMiBpOworCisJLyogTmVlZCB0byBjaGVjayBpZiBjbWQgcG9vbCBpcyBhbGxvY2F0ZWQgb3Igbm90ICovCisJaWYgKCFhZGFwdGVyLT5jbWRfcG9vbCkgeworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IEZSRUVfQ01EX0JVRjogY21kX3Bvb2wgaXMgbnVsbFxuIik7CisJCXJldHVybiAwOworCX0KKworCWNtZF9hcnJheSA9IGFkYXB0ZXItPmNtZF9wb29sOworCisJLyogUmVsZWFzZSBzaGFyZWQgbWVtb3J5IGJ1ZmZlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTVdJRklFWF9OVU1fT0ZfQ01EX0JVRkZFUjsgaSsrKSB7CisJCWlmIChjbWRfYXJyYXlbaV0uc2tiKSB7CisJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImNtZDogZnJlZSBjbWQgYnVmZmVyICVkXG4iLCBpKTsKKwkJCWRldl9rZnJlZV9za2JfYW55KGNtZF9hcnJheVtpXS5za2IpOworCQl9CisJCWlmICghY21kX2FycmF5W2ldLnJlc3Bfc2tiKQorCQkJY29udGludWU7CisJCWRldl9rZnJlZV9za2JfYW55KGNtZF9hcnJheVtpXS5yZXNwX3NrYik7CisJfQorCS8qIFJlbGVhc2Ugc3RydWN0IGNtZF9jdHJsX25vZGUgKi8KKwlpZiAoYWRhcHRlci0+Y21kX3Bvb2wpIHsKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJjbWQ6IGZyZWUgY21kIHBvb2xcbiIpOworCQlrZnJlZShhZGFwdGVyLT5jbWRfcG9vbCk7CisJCWFkYXB0ZXItPmNtZF9wb29sID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBldmVudHMgZ2VuZXJhdGVkIGJ5IGZpcm13YXJlLgorICoKKyAqIEV2ZW50IGJvZHkgb2YgZXZlbnRzIHJlY2VpdmVkIGZyb20gZmlybXdhcmUgYXJlIG5vdCB1c2VkICh0aG91Z2ggdGhleSBhcmUKKyAqIHNhdmVkKSwgb25seSB0aGUgZXZlbnQgSUQgaXMgdXNlZC4gU29tZSBldmVudHMgYXJlIHJlLWludm9rZWQgYnkKKyAqIHRoZSBkcml2ZXIsIHdpdGggYSBuZXcgZXZlbnQgYm9keS4KKyAqCisgKiBBZnRlciBwcm9jZXNzaW5nLCB0aGUgZnVuY3Rpb24gY2FsbHMgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2sKKyAqIGZvciBjbGVhbnVwLgorICovCitpbnQgbXdpZmlleF9wcm9jZXNzX2V2ZW50KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0KKwkJbXdpZmlleF9nZXRfcHJpdihhZGFwdGVyLCBNV0lGSUVYX0JTU19ST0xFX0FOWSk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGFkYXB0ZXItPmV2ZW50X3NrYjsKKwl1MzIgZXZlbnRjYXVzZSA9IGFkYXB0ZXItPmV2ZW50X2NhdXNlOworCXN0cnVjdCB0aW1ldmFsIHRzdGFtcDsKKwlzdHJ1Y3QgbXdpZmlleF9yeGluZm8gKnJ4X2luZm87CisKKwkvKiBTYXZlIHRoZSBsYXN0IGV2ZW50IHRvIGRlYnVnIGxvZyAqLworCWFkYXB0ZXItPmRiZy5sYXN0X2V2ZW50X2luZGV4ID0KKwkJKGFkYXB0ZXItPmRiZy5sYXN0X2V2ZW50X2luZGV4ICsgMSkgJSBEQkdfQ01EX05VTTsKKwlhZGFwdGVyLT5kYmcubGFzdF9ldmVudFthZGFwdGVyLT5kYmcubGFzdF9ldmVudF9pbmRleF0gPQorCQkodTE2KSBldmVudGNhdXNlOworCisJLyogR2V0IEJTUyBudW1iZXIgYW5kIGNvcnJlc3BvbmRpbmcgcHJpdiAqLworCXByaXYgPSBtd2lmaWV4X2dldF9wcml2X2J5X2lkKGFkYXB0ZXIsIEVWRU5UX0dFVF9CU1NfTlVNKGV2ZW50Y2F1c2UpLAorCQkJCSAgICAgIEVWRU5UX0dFVF9CU1NfVFlQRShldmVudGNhdXNlKSk7CisJaWYgKCFwcml2KQorCQlwcml2ID0gbXdpZmlleF9nZXRfcHJpdihhZGFwdGVyLCBNV0lGSUVYX0JTU19ST0xFX0FOWSk7CisJLyogQ2xlYXIgQlNTX05PX0JJVFMgZnJvbSBldmVudCAqLworCWV2ZW50Y2F1c2UgJj0gRVZFTlRfSURfTUFTSzsKKwlhZGFwdGVyLT5ldmVudF9jYXVzZSA9IGV2ZW50Y2F1c2U7CisKKwlpZiAoc2tiKSB7CisJCXJ4X2luZm8gPSBNV0lGSUVYX1NLQl9SWENCKHNrYik7CisJCXJ4X2luZm8tPmJzc19pbmRleCA9IHByaXYtPmJzc19pbmRleDsKKwl9CisKKwlpZiAoZXZlbnRjYXVzZSAhPSBFVkVOVF9QU19TTEVFUCAmJiBldmVudGNhdXNlICE9IEVWRU5UX1BTX0FXQUtFKSB7CisJCWRvX2dldHRpbWVvZmRheSgmdHN0YW1wKTsKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogJWx1LiVsdTogY2F1c2U6ICUjeFxuIiwKKwkJICAgICAgIHRzdGFtcC50dl9zZWMsIHRzdGFtcC50dl91c2VjLCBldmVudGNhdXNlKTsKKwl9CisKKwlyZXQgPSBtd2lmaWV4X3Byb2Nlc3Nfc3RhX2V2ZW50KHByaXYpOworCisJYWRhcHRlci0+ZXZlbnRfY2F1c2UgPSAwOworCWFkYXB0ZXItPmV2ZW50X3NrYiA9IE5VTEw7CisKKwlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZW5kIHN5bmNocm9ub3VzIGNvbW1hbmQgdG8gdGhlIGZpcm13YXJlLgorICoKKyAqIGl0IGFsbG9jYXRlcyBhIHdhaXQgcXVldWUgZm9yIHRoZSBjb21tYW5kIGFuZCB3YWl0IGZvciB0aGUgY29tbWFuZAorICogcmVzcG9uc2UuCisgKi8KK2ludCBtd2lmaWV4X3NlbmRfY21kX3N5bmMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdWludDE2X3QgY21kX25vLAorCQkJICB1MTYgY21kX2FjdGlvbiwgdTMyIGNtZF9vaWQsIHZvaWQgKmRhdGFfYnVmKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCisJYWRhcHRlci0+Y21kX3dhaXRfcV9yZXF1aXJlZCA9IHRydWU7CisJYWRhcHRlci0+Y21kX3dhaXRfcS5jb25kaXRpb24gPSBmYWxzZTsKKworCXJldCA9IG13aWZpZXhfc2VuZF9jbWRfYXN5bmMocHJpdiwgY21kX25vLCBjbWRfYWN0aW9uLCBjbWRfb2lkLAorCQkJCSAgICAgZGF0YV9idWYpOworCWlmICghcmV0KQorCQlyZXQgPSBtd2lmaWV4X3dhaXRfcXVldWVfY29tcGxldGUoYWRhcHRlcik7CisKKwlyZXR1cm4gcmV0OworfQorCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGEgY29tbWFuZCBhbmQgYXN5bmNocm9ub3VzbHkgc2VuZCBpdCB0byB0aGUgZmlybXdhcmUuCisgKgorICogUHJlcGFyYXRpb24gaW5jbHVkZXMgLQorICogICAgICAtIFNhbml0eSB0ZXN0cyB0byBtYWtlIHN1cmUgdGhlIGNhcmQgaXMgc3RpbGwgcHJlc2VudCBvciB0aGUgRlcKKyAqICAgICAgICBpcyBub3QgcmVzZXQKKyAqICAgICAgLSBHZXR0aW5nIGEgbmV3IGNvbW1hbmQgbm9kZSBmcm9tIHRoZSBjb21tYW5kIGZyZWUgcXVldWUKKyAqICAgICAgLSBJbml0aWFsaXppbmcgdGhlIGNvbW1hbmQgbm9kZSBmb3IgZGVmYXVsdCBwYXJhbWV0ZXJzCisgKiAgICAgIC0gRmlsbCB1cCB0aGUgbm9uLWRlZmF1bHQgcGFyYW1ldGVycyBhbmQgYnVmZmVyIHBvaW50ZXJzCisgKiAgICAgIC0gQWRkIHRoZSBjb21tYW5kIHRvIHBlbmRpbmcgcXVldWUKKyAqLworaW50IG13aWZpZXhfc2VuZF9jbWRfYXN5bmMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdWludDE2X3QgY21kX25vLAorCQkJICAgdTE2IGNtZF9hY3Rpb24sIHUzMiBjbWRfb2lkLCB2b2lkICpkYXRhX2J1ZikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBjbWRfY3RybF9ub2RlICpjbWRfbm9kZTsKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kX3B0cjsKKworCWlmICghYWRhcHRlcikgeworCQlwcl9lcnIoIlBSRVBfQ01EOiBhZGFwdGVyIGlzIE5VTExcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGFkYXB0ZXItPmlzX3N1c3BlbmRlZCkgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIlBSRVBfQ01EOiBkZXZpY2UgaW4gc3VzcGVuZGVkIHN0YXRlXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChhZGFwdGVyLT5zdXJwcmlzZV9yZW1vdmVkKSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiUFJFUF9DTUQ6IGNhcmQgaXMgcmVtb3ZlZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoYWRhcHRlci0+aHdfc3RhdHVzID09IE1XSUZJRVhfSFdfU1RBVFVTX1JFU0VUKSB7CisJCWlmIChjbWRfbm8gIT0gSG9zdENtZF9DTURfRlVOQ19JTklUKSB7CisJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIlBSRVBfQ01EOiBGVyBpbiByZXNldCBzdGF0ZVxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwkvKiBHZXQgYSBuZXcgY29tbWFuZCBub2RlICovCisJY21kX25vZGUgPSBtd2lmaWV4X2dldF9jbWRfbm9kZShhZGFwdGVyKTsKKworCWlmICghY21kX25vZGUpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJQUkVQX0NNRDogbm8gZnJlZSBjbWQgbm9kZVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBJbml0aWFsaXplIHRoZSBjb21tYW5kIG5vZGUgKi8KKwltd2lmaWV4X2luaXRfY21kX25vZGUocHJpdiwgY21kX25vZGUsIGNtZF9vaWQsIGRhdGFfYnVmKTsKKworCWlmICghY21kX25vZGUtPmNtZF9za2IpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJQUkVQX0NNRDogbm8gZnJlZSBjbWQgYnVmXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCW1lbXNldChza2JfcHV0KGNtZF9ub2RlLT5jbWRfc2tiLCBzaXplb2Yoc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQpKSwKKwkgICAgICAgMCwgc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kKSk7CisKKwljbWRfcHRyID0gKHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICopIChjbWRfbm9kZS0+Y21kX3NrYi0+ZGF0YSk7CisJY21kX3B0ci0+Y29tbWFuZCA9IGNwdV90b19sZTE2KGNtZF9ubyk7CisJY21kX3B0ci0+cmVzdWx0ID0gMDsKKworCS8qIFByZXBhcmUgY29tbWFuZCAqLworCWlmIChjbWRfbm8pIHsKKwkJcmV0ID0gbXdpZmlleF9zdGFfcHJlcGFyZV9jbWQocHJpdiwgY21kX25vLCBjbWRfYWN0aW9uLAorCQkJCQkgICAgICBjbWRfb2lkLCBkYXRhX2J1ZiwgY21kX3B0cik7CisJfSBlbHNlIHsKKwkJcmV0ID0gbXdpZmlleF9jbWRfaG9zdF9jbWQocHJpdiwgY21kX3B0ciwgZGF0YV9idWYpOworCQljbWRfbm9kZS0+Y21kX2ZsYWcgfD0gQ01EX0ZfSE9TVENNRDsKKwl9CisKKwkvKiBSZXR1cm4gZXJyb3IsIHNpbmNlIHRoZSBjb21tYW5kIHByZXBhcmF0aW9uIGZhaWxlZCAqLworCWlmIChyZXQpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJQUkVQX0NNRDogY21kICUjeCBwcmVwYXJhdGlvbiBmYWlsZWRcbiIsCisJCQkJCQkJY21kX25vKTsKKwkJbXdpZmlleF9pbnNlcnRfY21kX3RvX2ZyZWVfcShhZGFwdGVyLCBjbWRfbm9kZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBTZW5kIGNvbW1hbmQgKi8KKwlpZiAoY21kX25vID09IEhvc3RDbWRfQ01EXzgwMl8xMV9TQ0FOKQorCQltd2lmaWV4X3F1ZXVlX3NjYW5fY21kKHByaXYsIGNtZF9ub2RlKTsKKwllbHNlCisJCW13aWZpZXhfaW5zZXJ0X2NtZF90b19wZW5kaW5nX3EoYWRhcHRlciwgY21kX25vZGUsIHRydWUpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGNvbW1hbmQgdG8gdGhlIGNvbW1hbmQgZnJlZSBxdWV1ZS4KKyAqCisgKiBUaGUgZnVuY3Rpb24gYWxzbyBjYWxscyB0aGUgY29tcGxldGlvbiBjYWxsYmFjayBpZiByZXF1aXJlZCwgYmVmb3JlCisgKiBjbGVhbmluZyB0aGUgY29tbWFuZCBub2RlIGFuZCByZS1pbnNlcnRpbmcgaXQgaW50byB0aGUgZnJlZSBxdWV1ZS4KKyAqLwordm9pZAorbXdpZmlleF9pbnNlcnRfY21kX3RvX2ZyZWVfcShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICBzdHJ1Y3QgY21kX2N0cmxfbm9kZSAqY21kX25vZGUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghY21kX25vZGUpCisJCXJldHVybjsKKworCWlmIChjbWRfbm9kZS0+d2FpdF9xX2VuYWJsZWQpCisJCW13aWZpZXhfY29tcGxldGVfY21kKGFkYXB0ZXIpOworCS8qIENsZWFuIHRoZSBub2RlICovCisJbXdpZmlleF9jbGVhbl9jbWRfbm9kZShhZGFwdGVyLCBjbWRfbm9kZSk7CisKKwkvKiBJbnNlcnQgbm9kZSBpbnRvIGNtZF9mcmVlX3EgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Y21kX2ZyZWVfcV9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmY21kX25vZGUtPmxpc3QsICZhZGFwdGVyLT5jbWRfZnJlZV9xKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5jbWRfZnJlZV9xX2xvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcXVldWVzIGEgY29tbWFuZCB0byB0aGUgY29tbWFuZCBwZW5kaW5nIHF1ZXVlLgorICoKKyAqIFRoaXMgaW4gZWZmZWN0IGFkZHMgdGhlIGNvbW1hbmQgdG8gdGhlIGNvbW1hbmQgbGlzdCB0byBiZSBleGVjdXRlZC4KKyAqIEV4aXQgUFMgY29tbWFuZCBpcyBoYW5kbGVkIHNwZWNpYWxseSwgYnkgcGxhY2luZyBpdCBhbHdheXMgdG8gdGhlCisgKiBmcm9udCBvZiB0aGUgY29tbWFuZCBxdWV1ZS4KKyAqLwordm9pZAorbXdpZmlleF9pbnNlcnRfY21kX3RvX3BlbmRpbmdfcShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAorCQkJCXN0cnVjdCBjbWRfY3RybF9ub2RlICpjbWRfbm9kZSwgdTMyIGFkZF90YWlsKQoreworCXN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpob3N0X2NtZCA9IE5VTEw7CisJdTE2IGNvbW1hbmQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWhvc3RfY21kID0gKHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICopIChjbWRfbm9kZS0+Y21kX3NrYi0+ZGF0YSk7CisJaWYgKCFob3N0X2NtZCkgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIlFVRVVFX0NNRDogaG9zdF9jbWQgaXMgTlVMTFxuIik7CisJCXJldHVybjsKKwl9CisKKwljb21tYW5kID0gbGUxNl90b19jcHUoaG9zdF9jbWQtPmNvbW1hbmQpOworCisJLyogRXhpdF9QUyBjb21tYW5kIG5lZWRzIHRvIGJlIHF1ZXVlZCBpbiB0aGUgaGVhZGVyIGFsd2F5cy4gKi8KKwlpZiAoY29tbWFuZCA9PSBIb3N0Q21kX0NNRF84MDJfMTFfUFNfTU9ERV9FTkgpIHsKKwkJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9wc19tb2RlX2VuaCAqcG0gPQorCQkJJmhvc3RfY21kLT5wYXJhbXMucHNtb2RlX2VuaDsKKwkJaWYgKChsZTE2X3RvX2NwdShwbS0+YWN0aW9uKSA9PSBESVNfUFMpCisJCSAgICB8fCAobGUxNl90b19jcHUocG0tPmFjdGlvbikgPT0gRElTX0FVVE9fUFMpKSB7CisJCQlpZiAoYWRhcHRlci0+cHNfc3RhdGUgIT0gUFNfU1RBVEVfQVdBS0UpCisJCQkJYWRkX3RhaWwgPSBmYWxzZTsKKwkJfQorCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5jbWRfcGVuZGluZ19xX2xvY2ssIGZsYWdzKTsKKwlpZiAoYWRkX3RhaWwpCisJCWxpc3RfYWRkX3RhaWwoJmNtZF9ub2RlLT5saXN0LCAmYWRhcHRlci0+Y21kX3BlbmRpbmdfcSk7CisJZWxzZQorCQlsaXN0X2FkZCgmY21kX25vZGUtPmxpc3QsICZhZGFwdGVyLT5jbWRfcGVuZGluZ19xKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5jbWRfcGVuZGluZ19xX2xvY2ssIGZsYWdzKTsKKworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiY21kOiBRVUVVRV9DTUQ6IGNtZD0lI3ggaXMgcXVldWVkXG4iLCBjb21tYW5kKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZXhlY3V0ZXMgdGhlIG5leHQgY29tbWFuZCBpbiBjb21tYW5kIHBlbmRpbmcgcXVldWUuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwgaWYgYSBjb21tYW5kIGlzIGFscmVhZHkgaW4gcHJvY2Vzc2luZyBzdGFnZSwKKyAqIG90aGVyd2lzZSBpdCB3aWxsIGRlcXVldWUgdGhlIGZpcnN0IGNvbW1hbmQgZnJvbSB0aGUgY29tbWFuZCBwZW5kaW5nCisgKiBxdWV1ZSBhbmQgc2VuZCB0byB0aGUgZmlybXdhcmUuCisgKgorICogSWYgdGhlIGRldmljZSBpcyBjdXJyZW50bHkgaW4gaG9zdCBzbGVlcCBtb2RlLCBhbnkgY29tbWFuZHMsIGV4Y2VwdCB0aGUKKyAqIGhvc3Qgc2xlZXAgY29uZmlndXJhdGlvbiBjb21tYW5kIHdpbGwgZGUtYWN0aXZhdGUgdGhlIGhvc3Qgc2xlZXAuIEZvciBQUworICogbW9kZSwgdGhlIGZ1bmN0aW9uIHdpbGwgcHV0IHRoZSBmaXJtd2FyZSBiYWNrIHRvIHNsZWVwIGlmIGFwcGxpY2FibGUuCisgKi8KK2ludCBtd2lmaWV4X2V4ZWNfbmV4dF9jbWQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2OworCXN0cnVjdCBjbWRfY3RybF9ub2RlICpjbWRfbm9kZTsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqaG9zdF9jbWQ7CisJdW5zaWduZWQgbG9uZyBjbWRfZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBjbWRfcGVuZGluZ19xX2ZsYWdzOworCisJLyogQ2hlY2sgaWYgYWxyZWFkeSBpbiBwcm9jZXNzaW5nICovCisJaWYgKGFkYXB0ZXItPmN1cnJfY21kKSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiRVhFQ19ORVhUX0NNRDogY21kIGluIHByb2Nlc3NpbmdcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPm13aWZpZXhfY21kX2xvY2ssIGNtZF9mbGFncyk7CisJLyogQ2hlY2sgaWYgYW55IGNvbW1hbmQgaXMgcGVuZGluZyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5jbWRfcGVuZGluZ19xX2xvY2ssIGNtZF9wZW5kaW5nX3FfZmxhZ3MpOworCWlmIChsaXN0X2VtcHR5KCZhZGFwdGVyLT5jbWRfcGVuZGluZ19xKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5jbWRfcGVuZGluZ19xX2xvY2ssCisJCQkJICAgICAgIGNtZF9wZW5kaW5nX3FfZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5td2lmaWV4X2NtZF9sb2NrLCBjbWRfZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJY21kX25vZGUgPSBsaXN0X2ZpcnN0X2VudHJ5KCZhZGFwdGVyLT5jbWRfcGVuZGluZ19xLAorCQkJCSAgICBzdHJ1Y3QgY21kX2N0cmxfbm9kZSwgbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kX3BlbmRpbmdfcV9sb2NrLAorCQkJICAgICAgIGNtZF9wZW5kaW5nX3FfZmxhZ3MpOworCisJaG9zdF9jbWQgPSAoc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKikgKGNtZF9ub2RlLT5jbWRfc2tiLT5kYXRhKTsKKwlwcml2ID0gY21kX25vZGUtPnByaXY7CisKKwlpZiAoYWRhcHRlci0+cHNfc3RhdGUgIT0gUFNfU1RBVEVfQVdBS0UpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICIlczogY2Fubm90IHNlbmQgY21kIGluIHNsZWVwIHN0YXRlLCIKKwkJCQkiIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW5cbiIsIF9fZnVuY19fKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+bXdpZmlleF9jbWRfbG9jaywgY21kX2ZsYWdzKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Y21kX3BlbmRpbmdfcV9sb2NrLCBjbWRfcGVuZGluZ19xX2ZsYWdzKTsKKwlsaXN0X2RlbCgmY21kX25vZGUtPmxpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmNtZF9wZW5kaW5nX3FfbG9jaywKKwkJCSAgICAgICBjbWRfcGVuZGluZ19xX2ZsYWdzKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPm13aWZpZXhfY21kX2xvY2ssIGNtZF9mbGFncyk7CisJcmV0ID0gbXdpZmlleF9kbmxkX2NtZF90b19mdyhwcml2LCBjbWRfbm9kZSk7CisJcHJpdiA9IG13aWZpZXhfZ2V0X3ByaXYoYWRhcHRlciwgTVdJRklFWF9CU1NfUk9MRV9BTlkpOworCS8qIEFueSBjb21tYW5kIHNlbnQgdG8gdGhlIGZpcm13YXJlIHdoZW4gaG9zdCBpcyBpbiBzbGVlcAorCSAqIG1vZGUgc2hvdWxkIGRlLWNvbmZpZ3VyZSBob3N0IHNsZWVwLiBXZSBzaG91bGQgc2tpcCB0aGUKKwkgKiBob3N0IHNsZWVwIGNvbmZpZ3VyYXRpb24gY29tbWFuZCBpdHNlbGYgdGhvdWdoCisJICovCisJaWYgKHByaXYgJiYgKGhvc3RfY21kLT5jb21tYW5kICE9CisJICAgICBjcHVfdG9fbGUxNihIb3N0Q21kX0NNRF84MDJfMTFfSFNfQ0ZHX0VOSCkpKSB7CisJCWlmIChhZGFwdGVyLT5oc19hY3RpdmF0ZWQpIHsKKwkJCWFkYXB0ZXItPmlzX2hzX2NvbmZpZ3VyZWQgPSBmYWxzZTsKKwkJCW13aWZpZXhfaHNfYWN0aXZhdGVkX2V2ZW50KHByaXYsIGZhbHNlKTsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNvbW1hbmQgcmVzcG9uc2UuCisgKgorICogQWZ0ZXIgcHJvY2Vzc2luZywgdGhlIGZ1bmN0aW9uIGNsZWFucyB0aGUgY29tbWFuZCBub2RlIGFuZCBwdXRzCisgKiBpdCBiYWNrIHRvIHRoZSBjb21tYW5kIGZyZWUgcXVldWUuCisgKi8KK2ludCBtd2lmaWV4X3Byb2Nlc3NfY21kcmVzcChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwOworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPQorCQltd2lmaWV4X2dldF9wcml2KGFkYXB0ZXIsIE1XSUZJRVhfQlNTX1JPTEVfQU5ZKTsKKwlpbnQgcmV0ID0gMDsKKwl1aW50MTZfdCBvcmlnX2NtZHJlc3Bfbm87CisJdWludDE2X3QgY21kcmVzcF9ubzsKKwl1aW50MTZfdCBjbWRyZXNwX3Jlc3VsdDsKKwlzdHJ1Y3QgdGltZXZhbCB0c3RhbXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIE5vdyB3ZSBnb3QgcmVzcG9uc2UgZnJvbSBGVywgY2FuY2VsIHRoZSBjb21tYW5kIHRpbWVyICovCisJZGVsX3RpbWVyKCZhZGFwdGVyLT5jbWRfdGltZXIpOworCisJaWYgKCFhZGFwdGVyLT5jdXJyX2NtZCB8fCAhYWRhcHRlci0+Y3Vycl9jbWQtPnJlc3Bfc2tiKSB7CisJCXJlc3AgPSAoc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKikgYWRhcHRlci0+dXBsZF9idWY7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiQ01EX1JFU1A6IE5VTEwgY3Vycl9jbWQsICUjeFxuIiwKKwkJICAgICAgIGxlMTZfdG9fY3B1KHJlc3AtPmNvbW1hbmQpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWFkYXB0ZXItPm51bV9jbWRfdGltZW91dCA9IDA7CisKKwlyZXNwID0gKHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICopIGFkYXB0ZXItPmN1cnJfY21kLT5yZXNwX3NrYi0+ZGF0YTsKKwlpZiAoYWRhcHRlci0+Y3Vycl9jbWQtPmNtZF9mbGFnICYgQ01EX0ZfQ0FOQ0VMRUQpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJDTURfUkVTUDogJSN4IGJlZW4gY2FuY2VsZWRcbiIsCisJCQkJbGUxNl90b19jcHUocmVzcC0+Y29tbWFuZCkpOworCQltd2lmaWV4X2luc2VydF9jbWRfdG9fZnJlZV9xKGFkYXB0ZXIsIGFkYXB0ZXItPmN1cnJfY21kKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPm13aWZpZXhfY21kX2xvY2ssIGZsYWdzKTsKKwkJYWRhcHRlci0+Y3Vycl9jbWQgPSBOVUxMOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5td2lmaWV4X2NtZF9sb2NrLCBmbGFncyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoYWRhcHRlci0+Y3Vycl9jbWQtPmNtZF9mbGFnICYgQ01EX0ZfSE9TVENNRCkgeworCQkvKiBDb3B5IG9yaWdpbmFsIHJlc3BvbnNlIGJhY2sgdG8gcmVzcG9uc2UgYnVmZmVyICovCisJCXN0cnVjdCBtd2lmaWV4X2RzX21pc2NfY21kICpob3N0Y21kID0gTlVMTDsKKwkJdWludDE2X3Qgc2l6ZSA9IGxlMTZfdG9fY3B1KHJlc3AtPnNpemUpOworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IGhvc3QgY21kIHJlc3Agc2l6ZSA9ICVkXG4iLCBzaXplKTsKKwkJc2l6ZSA9IG1pbl90KHUxNiwgc2l6ZSwgTVdJRklFWF9TSVpFX09GX0NNRF9CVUZGRVIpOworCQlpZiAoYWRhcHRlci0+Y3Vycl9jbWQtPmRhdGFfYnVmKSB7CisJCQlob3N0Y21kID0gKHN0cnVjdCBtd2lmaWV4X2RzX21pc2NfY21kICopCisJCQkJCQlhZGFwdGVyLT5jdXJyX2NtZC0+ZGF0YV9idWY7CisJCQlob3N0Y21kLT5sZW4gPSBzaXplOworCQkJbWVtY3B5KGhvc3RjbWQtPmNtZCwgKHZvaWQgKikgcmVzcCwgc2l6ZSk7CisJCX0KKwl9CisJb3JpZ19jbWRyZXNwX25vID0gbGUxNl90b19jcHUocmVzcC0+Y29tbWFuZCk7CisKKwkvKiBHZXQgQlNTIG51bWJlciBhbmQgY29ycmVzcG9uZGluZyBwcml2ICovCisJcHJpdiA9IG13aWZpZXhfZ2V0X3ByaXZfYnlfaWQoYWRhcHRlciwKKwkJCUhvc3RDbWRfR0VUX0JTU19OTyhsZTE2X3RvX2NwdShyZXNwLT5zZXFfbnVtKSksCisJCQlIb3N0Q21kX0dFVF9CU1NfVFlQRShsZTE2X3RvX2NwdShyZXNwLT5zZXFfbnVtKSkpOworCWlmICghcHJpdikKKwkJcHJpdiA9IG13aWZpZXhfZ2V0X3ByaXYoYWRhcHRlciwgTVdJRklFWF9CU1NfUk9MRV9BTlkpOworCS8qIENsZWFyIFJFVF9CSVQgZnJvbSBIb3N0Q21kICovCisJcmVzcC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KG9yaWdfY21kcmVzcF9ubyAmIEhvc3RDbWRfQ01EX0lEX01BU0spOworCisJY21kcmVzcF9ubyA9IGxlMTZfdG9fY3B1KHJlc3AtPmNvbW1hbmQpOworCWNtZHJlc3BfcmVzdWx0ID0gbGUxNl90b19jcHUocmVzcC0+cmVzdWx0KTsKKworCS8qIFNhdmUgdGhlIGxhc3QgY29tbWFuZCByZXNwb25zZSB0byBkZWJ1ZyBsb2cgKi8KKwlhZGFwdGVyLT5kYmcubGFzdF9jbWRfcmVzcF9pbmRleCA9CisJCShhZGFwdGVyLT5kYmcubGFzdF9jbWRfcmVzcF9pbmRleCArIDEpICUgREJHX0NNRF9OVU07CisJYWRhcHRlci0+ZGJnLmxhc3RfY21kX3Jlc3BfaWRbYWRhcHRlci0+ZGJnLmxhc3RfY21kX3Jlc3BfaW5kZXhdID0KKwkJb3JpZ19jbWRyZXNwX25vOworCisJZG9fZ2V0dGltZW9mZGF5KCZ0c3RhbXApOworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiY21kOiBDTURfUkVTUDogKCVsdS4lbHUpOiAweCV4LCByZXN1bHQgJWQsIgorCQkiIGxlbiAlZCwgc2Vxbm8gMHgleFxuIiwKKwkgICAgICAgdHN0YW1wLnR2X3NlYywgdHN0YW1wLnR2X3VzZWMsIG9yaWdfY21kcmVzcF9ubywgY21kcmVzcF9yZXN1bHQsCisJICAgICAgIGxlMTZfdG9fY3B1KHJlc3AtPnNpemUpLCBsZTE2X3RvX2NwdShyZXNwLT5zZXFfbnVtKSk7CisKKwlpZiAoIShvcmlnX2NtZHJlc3Bfbm8gJiBIb3N0Q21kX1JFVF9CSVQpKSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiQ01EX1JFU1A6IGludmFsaWQgY21kIHJlc3BcbiIpOworCQlpZiAoYWRhcHRlci0+Y3Vycl9jbWQtPndhaXRfcV9lbmFibGVkKQorCQkJYWRhcHRlci0+Y21kX3dhaXRfcS5zdGF0dXMgPSAtMTsKKworCQltd2lmaWV4X2luc2VydF9jbWRfdG9fZnJlZV9xKGFkYXB0ZXIsIGFkYXB0ZXItPmN1cnJfY21kKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPm13aWZpZXhfY21kX2xvY2ssIGZsYWdzKTsKKwkJYWRhcHRlci0+Y3Vycl9jbWQgPSBOVUxMOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5td2lmaWV4X2NtZF9sb2NrLCBmbGFncyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoYWRhcHRlci0+Y3Vycl9jbWQtPmNtZF9mbGFnICYgQ01EX0ZfSE9TVENNRCkgeworCQlhZGFwdGVyLT5jdXJyX2NtZC0+Y21kX2ZsYWcgJj0gfkNNRF9GX0hPU1RDTUQ7CisJCWlmICgoY21kcmVzcF9yZXN1bHQgPT0gSG9zdENtZF9SRVNVTFRfT0spCisJCSAgICAmJiAoY21kcmVzcF9ubyA9PSBIb3N0Q21kX0NNRF84MDJfMTFfSFNfQ0ZHX0VOSCkpCisJCQlyZXQgPSBtd2lmaWV4X3JldF84MDJfMTFfaHNfY2ZnKHByaXYsIHJlc3ApOworCX0gZWxzZSB7CisJCS8qIGhhbmRsZSByZXNwb25zZSAqLworCQlyZXQgPSBtd2lmaWV4X3Byb2Nlc3Nfc3RhX2NtZHJlc3AocHJpdiwgY21kcmVzcF9ubywgcmVzcCk7CisJfQorCisJLyogQ2hlY2sgaW5pdCBjb21tYW5kIHJlc3BvbnNlICovCisJaWYgKGFkYXB0ZXItPmh3X3N0YXR1cyA9PSBNV0lGSUVYX0hXX1NUQVRVU19JTklUSUFMSVpJTkcpIHsKKwkJaWYgKHJldCA9PSAtMSkgeworCQkJZGV2X2VycihhZGFwdGVyLT5kZXYsICIlczogY21kICUjeCBmYWlsZWQgZHVyaW5nICIKKwkJCQkiaW5pdGlhbGl6YXRpb25cbiIsIF9fZnVuY19fLCBjbWRyZXNwX25vKTsKKwkJCW13aWZpZXhfaW5pdF9md19jb21wbGV0ZShhZGFwdGVyKTsKKwkJCXJldHVybiAtMTsKKwkJfSBlbHNlIGlmIChhZGFwdGVyLT5sYXN0X2luaXRfY21kID09IGNtZHJlc3Bfbm8pCisJCQlhZGFwdGVyLT5od19zdGF0dXMgPSBNV0lGSUVYX0hXX1NUQVRVU19JTklUX0RPTkU7CisJfQorCisJaWYgKGFkYXB0ZXItPmN1cnJfY21kKSB7CisJCWlmIChhZGFwdGVyLT5jdXJyX2NtZC0+d2FpdF9xX2VuYWJsZWQgJiYgKCFyZXQpKQorCQkJYWRhcHRlci0+Y21kX3dhaXRfcS5zdGF0dXMgPSAwOworCQllbHNlIGlmIChhZGFwdGVyLT5jdXJyX2NtZC0+d2FpdF9xX2VuYWJsZWQgJiYgKHJldCA9PSAtMSkpCisJCQlhZGFwdGVyLT5jbWRfd2FpdF9xLnN0YXR1cyA9IC0xOworCisJCS8qIENsZWFuIHVwIGFuZCBwdXQgY3VycmVudCBjb21tYW5kIGJhY2sgdG8gY21kX2ZyZWVfcSAqLworCQltd2lmaWV4X2luc2VydF9jbWRfdG9fZnJlZV9xKGFkYXB0ZXIsIGFkYXB0ZXItPmN1cnJfY21kKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+bXdpZmlleF9jbWRfbG9jaywgZmxhZ3MpOworCQlhZGFwdGVyLT5jdXJyX2NtZCA9IE5VTEw7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPm13aWZpZXhfY21kX2xvY2ssIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSB0aW1lb3V0IG9mIGNvbW1hbmQgc2VuZGluZy4KKyAqCisgKiBJdCB3aWxsIHJlLXNlbmQgdGhlIHNhbWUgY29tbWFuZCBhZ2Fpbi4KKyAqLwordm9pZAorbXdpZmlleF9jbWRfdGltZW91dF9mdW5jKHVuc2lnbmVkIGxvbmcgZnVuY3Rpb25fY29udGV4dCkKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0KKwkJKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKikgZnVuY3Rpb25fY29udGV4dDsKKwlzdHJ1Y3QgY21kX2N0cmxfbm9kZSAqY21kX25vZGU7CisJc3RydWN0IHRpbWV2YWwgdHN0YW1wOworCisJYWRhcHRlci0+bnVtX2NtZF90aW1lb3V0Kys7CisJYWRhcHRlci0+ZGJnLm51bV9jbWRfdGltZW91dCsrOworCWlmICghYWRhcHRlci0+Y3Vycl9jbWQpIHsKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJjbWQ6IGVtcHR5IGN1cnJfY21kXG4iKTsKKwkJcmV0dXJuOworCX0KKwljbWRfbm9kZSA9IGFkYXB0ZXItPmN1cnJfY21kOworCWlmIChjbWRfbm9kZS0+d2FpdF9xX2VuYWJsZWQpCisJCWFkYXB0ZXItPmNtZF93YWl0X3Euc3RhdHVzID0gLUVUSU1FRE9VVDsKKworCWlmIChjbWRfbm9kZSkgeworCQlhZGFwdGVyLT5kYmcudGltZW91dF9jbWRfaWQgPQorCQkJYWRhcHRlci0+ZGJnLmxhc3RfY21kX2lkW2FkYXB0ZXItPmRiZy5sYXN0X2NtZF9pbmRleF07CisJCWFkYXB0ZXItPmRiZy50aW1lb3V0X2NtZF9hY3QgPQorCQkJYWRhcHRlci0+ZGJnLmxhc3RfY21kX2FjdFthZGFwdGVyLT5kYmcubGFzdF9jbWRfaW5kZXhdOworCQlkb19nZXR0aW1lb2ZkYXkoJnRzdGFtcCk7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiJXM6IFRpbWVvdXQgY21kIGlkICglbHUuJWx1KSA9ICUjeCwiCisJCQkiIGFjdCA9ICUjeFxuIiwgX19mdW5jX18sCisJCSAgICAgICB0c3RhbXAudHZfc2VjLCB0c3RhbXAudHZfdXNlYywKKwkJICAgICAgIGFkYXB0ZXItPmRiZy50aW1lb3V0X2NtZF9pZCwKKwkJICAgICAgIGFkYXB0ZXItPmRiZy50aW1lb3V0X2NtZF9hY3QpOworCisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAibnVtX2RhdGFfaDJjX2ZhaWx1cmUgPSAlZFxuIiwKKwkJICAgICAgIGFkYXB0ZXItPmRiZy5udW1fdHhfaG9zdF90b19jYXJkX2ZhaWx1cmUpOworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIm51bV9jbWRfaDJjX2ZhaWx1cmUgPSAlZFxuIiwKKwkJICAgICAgIGFkYXB0ZXItPmRiZy5udW1fY21kX2hvc3RfdG9fY2FyZF9mYWlsdXJlKTsKKworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIm51bV9jbWRfdGltZW91dCA9ICVkXG4iLAorCQkgICAgICAgYWRhcHRlci0+ZGJnLm51bV9jbWRfdGltZW91dCk7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAibnVtX3R4X3RpbWVvdXQgPSAlZFxuIiwKKwkJICAgICAgIGFkYXB0ZXItPmRiZy5udW1fdHhfdGltZW91dCk7CisKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJsYXN0X2NtZF9pbmRleCA9ICVkXG4iLAorCQkgICAgICAgYWRhcHRlci0+ZGJnLmxhc3RfY21kX2luZGV4KTsKKwkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoImxhc3RfY21kX2lkOiAiLCBEVU1QX1BSRUZJWF9PRkZTRVQsCisJCQkJYWRhcHRlci0+ZGJnLmxhc3RfY21kX2lkLCBEQkdfQ01EX05VTSk7CisJCXByaW50X2hleF9kdW1wX2J5dGVzKCJsYXN0X2NtZF9hY3Q6ICIsIERVTVBfUFJFRklYX09GRlNFVCwKKwkJCQlhZGFwdGVyLT5kYmcubGFzdF9jbWRfYWN0LCBEQkdfQ01EX05VTSk7CisKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJsYXN0X2NtZF9yZXNwX2luZGV4ID0gJWRcbiIsCisJCSAgICAgICBhZGFwdGVyLT5kYmcubGFzdF9jbWRfcmVzcF9pbmRleCk7CisJCXByaW50X2hleF9kdW1wX2J5dGVzKCJsYXN0X2NtZF9yZXNwX2lkOiAiLCBEVU1QX1BSRUZJWF9PRkZTRVQsCisJCQkJYWRhcHRlci0+ZGJnLmxhc3RfY21kX3Jlc3BfaWQsIERCR19DTURfTlVNKTsKKworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgImxhc3RfZXZlbnRfaW5kZXggPSAlZFxuIiwKKwkJICAgICAgIGFkYXB0ZXItPmRiZy5sYXN0X2V2ZW50X2luZGV4KTsKKwkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoImxhc3RfZXZlbnQ6ICIsIERVTVBfUFJFRklYX09GRlNFVCwKKwkJCQlhZGFwdGVyLT5kYmcubGFzdF9ldmVudCwgREJHX0NNRF9OVU0pOworCisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiZGF0YV9zZW50PSVkIGNtZF9zZW50PSVkXG4iLAorCQkgICAgICAgYWRhcHRlci0+ZGF0YV9zZW50LCBhZGFwdGVyLT5jbWRfc2VudCk7CisKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJwc19tb2RlPSVkIHBzX3N0YXRlPSVkXG4iLAorCQkJCWFkYXB0ZXItPnBzX21vZGUsIGFkYXB0ZXItPnBzX3N0YXRlKTsKKwl9CisJaWYgKGFkYXB0ZXItPmh3X3N0YXR1cyA9PSBNV0lGSUVYX0hXX1NUQVRVU19JTklUSUFMSVpJTkcpCisJCW13aWZpZXhfaW5pdF9md19jb21wbGV0ZShhZGFwdGVyKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuY2VscyBhbGwgdGhlIHBlbmRpbmcgY29tbWFuZHMuCisgKgorICogVGhlIGN1cnJlbnQgY29tbWFuZCwgYWxsIGNvbW1hbmRzIGluIGNvbW1hbmQgcGVuZGluZyBxdWV1ZSBhbmQgYWxsIHNjYW4KKyAqIGNvbW1hbmRzIGluIHNjYW4gcGVuZGluZyBxdWV1ZSBhcmUgY2FuY2VsbGVkLiBBbGwgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2tzCisgKiBhcmUgY2FsbGVkIHdpdGggZmFpbHVyZSBzdGF0dXMgdG8gZW5zdXJlIGNsZWFudXAuCisgKi8KK3ZvaWQKK213aWZpZXhfY2FuY2VsX2FsbF9wZW5kaW5nX2NtZChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBjbWRfY3RybF9ub2RlICpjbWRfbm9kZSA9IE5VTEwsICp0bXBfbm9kZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogQ2FuY2VsIGN1cnJlbnQgY21kICovCisJaWYgKChhZGFwdGVyLT5jdXJyX2NtZCkgJiYgKGFkYXB0ZXItPmN1cnJfY21kLT53YWl0X3FfZW5hYmxlZCkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPm13aWZpZXhfY21kX2xvY2ssIGZsYWdzKTsKKwkJYWRhcHRlci0+Y3Vycl9jbWQtPndhaXRfcV9lbmFibGVkID0gZmFsc2U7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPm13aWZpZXhfY21kX2xvY2ssIGZsYWdzKTsKKwkJYWRhcHRlci0+Y21kX3dhaXRfcS5zdGF0dXMgPSAtMTsKKwkJbXdpZmlleF9jb21wbGV0ZV9jbWQoYWRhcHRlcik7CisJfQorCS8qIENhbmNlbCBhbGwgcGVuZGluZyBjb21tYW5kICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmNtZF9wZW5kaW5nX3FfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjbWRfbm9kZSwgdG1wX25vZGUsCisJCQkJICZhZGFwdGVyLT5jbWRfcGVuZGluZ19xLCBsaXN0KSB7CisJCWxpc3RfZGVsKCZjbWRfbm9kZS0+bGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmNtZF9wZW5kaW5nX3FfbG9jaywgZmxhZ3MpOworCisJCWlmIChjbWRfbm9kZS0+d2FpdF9xX2VuYWJsZWQpIHsKKwkJCWFkYXB0ZXItPmNtZF93YWl0X3Euc3RhdHVzID0gLTE7CisJCQltd2lmaWV4X2NvbXBsZXRlX2NtZChhZGFwdGVyKTsKKwkJCWNtZF9ub2RlLT53YWl0X3FfZW5hYmxlZCA9IGZhbHNlOworCQl9CisJCW13aWZpZXhfaW5zZXJ0X2NtZF90b19mcmVlX3EoYWRhcHRlciwgY21kX25vZGUpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Y21kX3BlbmRpbmdfcV9sb2NrLCBmbGFncyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmNtZF9wZW5kaW5nX3FfbG9jaywgZmxhZ3MpOworCisJLyogQ2FuY2VsIGFsbCBwZW5kaW5nIHNjYW4gY29tbWFuZCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5zY2FuX3BlbmRpbmdfcV9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNtZF9ub2RlLCB0bXBfbm9kZSwKKwkJCQkgJmFkYXB0ZXItPnNjYW5fcGVuZGluZ19xLCBsaXN0KSB7CisJCWxpc3RfZGVsKCZjbWRfbm9kZS0+bGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnNjYW5fcGVuZGluZ19xX2xvY2ssIGZsYWdzKTsKKworCQljbWRfbm9kZS0+d2FpdF9xX2VuYWJsZWQgPSBmYWxzZTsKKwkJbXdpZmlleF9pbnNlcnRfY21kX3RvX2ZyZWVfcShhZGFwdGVyLCBjbWRfbm9kZSk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5zY2FuX3BlbmRpbmdfcV9sb2NrLCBmbGFncyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnNjYW5fcGVuZGluZ19xX2xvY2ssIGZsYWdzKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5td2lmaWV4X2NtZF9sb2NrLCBmbGFncyk7CisJYWRhcHRlci0+c2Nhbl9wcm9jZXNzaW5nID0gZmFsc2U7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+bXdpZmlleF9jbWRfbG9jaywgZmxhZ3MpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjYW5jZWxzIGFsbCBwZW5kaW5nIGNvbW1hbmRzIHRoYXQgbWF0Y2hlcyB3aXRoCisgKiB0aGUgZ2l2ZW4gSU9DVEwgcmVxdWVzdC4KKyAqCisgKiBCb3RoIHRoZSBjdXJyZW50IGNvbW1hbmQgYnVmZmVyIGFuZCB0aGUgcGVuZGluZyBjb21tYW5kIHF1ZXVlIGFyZQorICogc2VhcmNoZWQgZm9yIG1hdGNoaW5nIElPQ1RMIHJlcXVlc3QuIFRoZSBjb21wbGV0aW9uIGNhbGxiYWNrIG9mCisgKiB0aGUgbWF0Y2hlZCBjb21tYW5kIGlzIGNhbGxlZCB3aXRoIGZhaWx1cmUgc3RhdHVzIHRvIGVuc3VyZSBjbGVhbnVwLgorICogSW4gY2FzZSBvZiBzY2FuIGNvbW1hbmRzLCBhbGwgcGVuZGluZyBjb21tYW5kcyBpbiBzY2FuIHBlbmRpbmcgcXVldWUKKyAqIGFyZSBjYW5jZWxsZWQuCisgKi8KK3ZvaWQKK213aWZpZXhfY2FuY2VsX3BlbmRpbmdfaW9jdGwoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgY21kX2N0cmxfbm9kZSAqY21kX25vZGUgPSBOVUxMLCAqdG1wX25vZGUgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgY21kX2ZsYWdzOworCXVuc2lnbmVkIGxvbmcgY21kX3BlbmRpbmdfcV9mbGFnczsKKwl1bnNpZ25lZCBsb25nIHNjYW5fcGVuZGluZ19xX2ZsYWdzOworCXVpbnQxNl90IGNhbmNlbF9zY2FuX2NtZCA9IGZhbHNlOworCisJaWYgKChhZGFwdGVyLT5jdXJyX2NtZCkgJiYKKwkgICAgIChhZGFwdGVyLT5jdXJyX2NtZC0+d2FpdF9xX2VuYWJsZWQpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5td2lmaWV4X2NtZF9sb2NrLCBjbWRfZmxhZ3MpOworCQljbWRfbm9kZSA9IGFkYXB0ZXItPmN1cnJfY21kOworCQljbWRfbm9kZS0+d2FpdF9xX2VuYWJsZWQgPSBmYWxzZTsKKwkJY21kX25vZGUtPmNtZF9mbGFnIHw9IENNRF9GX0NBTkNFTEVEOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Y21kX3BlbmRpbmdfcV9sb2NrLAorCQkJCSAgY21kX3BlbmRpbmdfcV9mbGFncyk7CisJCWxpc3RfZGVsKCZjbWRfbm9kZS0+bGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmNtZF9wZW5kaW5nX3FfbG9jaywKKwkJCQkgICAgICAgY21kX3BlbmRpbmdfcV9mbGFncyk7CisJCW13aWZpZXhfaW5zZXJ0X2NtZF90b19mcmVlX3EoYWRhcHRlciwgY21kX25vZGUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5td2lmaWV4X2NtZF9sb2NrLCBjbWRfZmxhZ3MpOworCX0KKworCS8qIENhbmNlbCBhbGwgcGVuZGluZyBzY2FuIGNvbW1hbmQgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+c2Nhbl9wZW5kaW5nX3FfbG9jaywKKwkJCSAgc2Nhbl9wZW5kaW5nX3FfZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjbWRfbm9kZSwgdG1wX25vZGUsCisJCQkJICZhZGFwdGVyLT5zY2FuX3BlbmRpbmdfcSwgbGlzdCkgeworCQlsaXN0X2RlbCgmY21kX25vZGUtPmxpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5zY2FuX3BlbmRpbmdfcV9sb2NrLAorCQkJCSAgICAgICBzY2FuX3BlbmRpbmdfcV9mbGFncyk7CisJCWNtZF9ub2RlLT53YWl0X3FfZW5hYmxlZCA9IGZhbHNlOworCQltd2lmaWV4X2luc2VydF9jbWRfdG9fZnJlZV9xKGFkYXB0ZXIsIGNtZF9ub2RlKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnNjYW5fcGVuZGluZ19xX2xvY2ssCisJCQkJICBzY2FuX3BlbmRpbmdfcV9mbGFncyk7CisJCWNhbmNlbF9zY2FuX2NtZCA9IHRydWU7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnNjYW5fcGVuZGluZ19xX2xvY2ssCisJCQkgICAgICAgc2Nhbl9wZW5kaW5nX3FfZmxhZ3MpOworCisJaWYgKGNhbmNlbF9zY2FuX2NtZCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+bXdpZmlleF9jbWRfbG9jaywgY21kX2ZsYWdzKTsKKwkJYWRhcHRlci0+c2Nhbl9wcm9jZXNzaW5nID0gZmFsc2U7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPm13aWZpZXhfY21kX2xvY2ssIGNtZF9mbGFncyk7CisJfQorCWFkYXB0ZXItPmNtZF93YWl0X3Euc3RhdHVzID0gLTE7CisJbXdpZmlleF9jb21wbGV0ZV9jbWQoYWRhcHRlcik7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIHRoZSBzbGVlcCBjb25maXJtIGNvbW1hbmQgdG8gZmlybXdhcmUsIGlmCisgKiBwb3NzaWJsZS4KKyAqCisgKiBUaGUgc2xlZXAgY29uZmlybSBjb21tYW5kIGNhbm5vdCBiZSBpc3N1ZWQgaWYgY29tbWFuZCByZXNwb25zZSwKKyAqIGRhdGEgcmVzcG9uc2Ugb3IgZXZlbnQgcmVzcG9uc2UgaXMgYXdhaXRpbmcgaGFuZGxpbmcsIG9yIGlmIHdlCisgKiBhcmUgaW4gdGhlIG1pZGRsZSBvZiBzZW5kaW5nIGEgY29tbWFuZCwgb3IgZXhwZWN0aW5nIGEgY29tbWFuZAorICogcmVzcG9uc2UuCisgKi8KK3ZvaWQKK213aWZpZXhfY2hlY2tfcHNfY29uZChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCWlmICghYWRhcHRlci0+Y21kX3NlbnQgJiYKKwkgICAgIWFkYXB0ZXItPmN1cnJfY21kICYmICFJU19DQVJEX1JYX1JDVkQoYWRhcHRlcikpCisJCW13aWZpZXhfZG5sZF9zbGVlcF9jb25maXJtX2NtZChhZGFwdGVyKTsKKwllbHNlCisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LAorCQkJImNtZDogRGVsYXkgU2xlZXAgQ29uZmlybSAoJXMlcyVzKVxuIiwKKwkJICAgICAgIChhZGFwdGVyLT5jbWRfc2VudCkgPyAiRCIgOiAiIiwKKwkJICAgICAgIChhZGFwdGVyLT5jdXJyX2NtZCkgPyAiQyIgOiAiIiwKKwkJICAgICAgIChJU19DQVJEX1JYX1JDVkQoYWRhcHRlcikpID8gIlIiIDogIiIpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBzZW5kcyBhIEhvc3QgU2xlZXAgYWN0aXZhdGVkIGV2ZW50IHRvIGFwcGxpY2F0aW9ucy4KKyAqCisgKiBUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCBieSB0aGUgZHJpdmVyLCB3aXRoIGEgYmxhbmsgZXZlbnQgYm9keS4KKyAqLwordm9pZAorbXdpZmlleF9oc19hY3RpdmF0ZWRfZXZlbnQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggYWN0aXZhdGVkKQoreworCWlmIChhY3RpdmF0ZWQpIHsKKwkJaWYgKHByaXYtPmFkYXB0ZXItPmlzX2hzX2NvbmZpZ3VyZWQpIHsKKwkJCXByaXYtPmFkYXB0ZXItPmhzX2FjdGl2YXRlZCA9IHRydWU7CisJCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImV2ZW50OiBoc19hY3RpdmF0ZWRcbiIpOworCQkJcHJpdi0+YWRhcHRlci0+aHNfYWN0aXZhdGVfd2FpdF9xX3dva2VuID0gdHJ1ZTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgKKwkJCQkmcHJpdi0+YWRhcHRlci0+aHNfYWN0aXZhdGVfd2FpdF9xKTsKKwkJfSBlbHNlIHsKKwkJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiZXZlbnQ6IEhTIG5vdCBjb25maWd1cmVkXG4iKTsKKwkJfQorCX0gZWxzZSB7CisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiZXZlbnQ6IGhzX2RlYWN0aXZhdGVkXG4iKTsKKwkJcHJpdi0+YWRhcHRlci0+aHNfYWN0aXZhdGVkID0gZmFsc2U7CisJfQorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjb21tYW5kIHJlc3BvbnNlIG9mIGEgSG9zdCBTbGVlcCBjb25maWd1cmF0aW9uCisgKiBjb21tYW5kLgorICoKKyAqIEhhbmRsaW5nIGluY2x1ZGVzIGNoYW5naW5nIHRoZSBoZWFkZXIgZmllbGRzIGludG8gQ1BVIGZvcm1hdAorICogYW5kIHNldHRpbmcgdGhlIGN1cnJlbnQgaG9zdCBzbGVlcCBhY3RpdmF0aW9uIHN0YXR1cyBpbiBkcml2ZXIuCisgKgorICogSW4gY2FzZSBob3N0IHNsZWVwIHN0YXR1cyBjaGFuZ2UsIHRoZSBmdW5jdGlvbiBnZW5lcmF0ZXMgYW4gZXZlbnQgdG8KKyAqIG5vdGlmeSB0aGUgYXBwbGljYXRpb25zLgorICovCitpbnQgbXdpZmlleF9yZXRfODAyXzExX2hzX2NmZyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3ApCit7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9oc19jZmdfZW5oICpwaHNfY2ZnID0KKwkJJnJlc3AtPnBhcmFtcy5vcHRfaHNfY2ZnOworCXVpbnQzMl90IGNvbmRpdGlvbnMgPSBsZTMyX3RvX2NwdShwaHNfY2ZnLT5wYXJhbXMuaHNfY29uZmlnLmNvbmRpdGlvbnMpOworCisJaWYgKHBoc19jZmctPmFjdGlvbiA9PSBjcHVfdG9fbGUxNihIU19BQ1RJVkFURSkpIHsKKwkJbXdpZmlleF9oc19hY3RpdmF0ZWRfZXZlbnQocHJpdiwgdHJ1ZSk7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiY21kOiBDTURfUkVTUDogSFNfQ0ZHIGNtZCByZXBseSIKKwkJCSIgcmVzdWx0PSUjeCwgY29uZGl0aW9ucz0weCV4IGdwaW89MHgleCBnYXA9MHgleFxuIiwKKwkJCXJlc3AtPnJlc3VsdCwgY29uZGl0aW9ucywKKwkJICAgICAgIHBoc19jZmctPnBhcmFtcy5oc19jb25maWcuZ3BpbywKKwkJICAgICAgIHBoc19jZmctPnBhcmFtcy5oc19jb25maWcuZ2FwKTsKKwl9CisJaWYgKGNvbmRpdGlvbnMgIT0gSE9TVF9TTEVFUF9DRkdfQ0FOQ0VMKSB7CisJCWFkYXB0ZXItPmlzX2hzX2NvbmZpZ3VyZWQgPSB0cnVlOworCX0gZWxzZSB7CisJCWFkYXB0ZXItPmlzX2hzX2NvbmZpZ3VyZWQgPSBmYWxzZTsKKwkJaWYgKGFkYXB0ZXItPmhzX2FjdGl2YXRlZCkKKwkJCW13aWZpZXhfaHNfYWN0aXZhdGVkX2V2ZW50KHByaXYsIGZhbHNlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gd2FrZXMgdXAgdGhlIGFkYXB0ZXIgYW5kIGdlbmVyYXRlcyBhIEhvc3QgU2xlZXAKKyAqIGNhbmNlbCBldmVudCBvbiByZWNlaXZpbmcgdGhlIHBvd2VyIHVwIGludGVycnVwdC4KKyAqLwordm9pZAorbXdpZmlleF9wcm9jZXNzX2hzX2NvbmZpZyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogJXM6IGF1dG8gY2FuY2VsbGluZyBob3N0IHNsZWVwIgorCQkiIHNpbmNlIHRoZXJlIGlzIGludGVycnVwdCBmcm9tIHRoZSBmaXJtd2FyZVxuIiwgX19mdW5jX18pOworCisJYWRhcHRlci0+aWZfb3BzLndha2V1cChhZGFwdGVyKTsKKwlhZGFwdGVyLT5oc19hY3RpdmF0ZWQgPSBmYWxzZTsKKwlhZGFwdGVyLT5pc19oc19jb25maWd1cmVkID0gZmFsc2U7CisJbXdpZmlleF9oc19hY3RpdmF0ZWRfZXZlbnQobXdpZmlleF9nZXRfcHJpdihhZGFwdGVyLAorCQkJCSAgIE1XSUZJRVhfQlNTX1JPTEVfQU5ZKSwgZmFsc2UpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjb21tYW5kIHJlc3BvbnNlIG9mIGEgc2xlZXAgY29uZmlybSBjb21tYW5kLgorICoKKyAqIFRoZSBmdW5jdGlvbiBzZXRzIHRoZSBjYXJkIHN0YXRlIHRvIFNMRUVQIGlmIHRoZSByZXNwb25zZSBpbmRpY2F0ZXMgc3VjY2Vzcy4KKyAqLwordm9pZAorbXdpZmlleF9wcm9jZXNzX3NsZWVwX2NvbmZpcm1fcmVzcChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgIHU4ICpwYnVmLCB1MzIgdXBsZF9sZW4pCit7CisJc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCA9IChzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqKSBwYnVmOworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPQorCQltd2lmaWV4X2dldF9wcml2KGFkYXB0ZXIsIE1XSUZJRVhfQlNTX1JPTEVfQU5ZKTsKKwl1aW50MTZfdCByZXN1bHQgPSBsZTE2X3RvX2NwdShjbWQtPnJlc3VsdCk7CisJdWludDE2X3QgY29tbWFuZCA9IGxlMTZfdG9fY3B1KGNtZC0+Y29tbWFuZCk7CisJdWludDE2X3Qgc2VxX251bSA9IGxlMTZfdG9fY3B1KGNtZC0+c2VxX251bSk7CisKKwlpZiAoIXVwbGRfbGVuKSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiJXM6IGNtZCBzaXplIGlzIDBcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEdldCBCU1MgbnVtYmVyIGFuZCBjb3JyZXNwb25kaW5nIHByaXYgKi8KKwlwcml2ID0gbXdpZmlleF9nZXRfcHJpdl9ieV9pZChhZGFwdGVyLCBIb3N0Q21kX0dFVF9CU1NfTk8oc2VxX251bSksCisJCQkJICAgICAgSG9zdENtZF9HRVRfQlNTX1RZUEUoc2VxX251bSkpOworCWlmICghcHJpdikKKwkJcHJpdiA9IG13aWZpZXhfZ2V0X3ByaXYoYWRhcHRlciwgTVdJRklFWF9CU1NfUk9MRV9BTlkpOworCisJLyogVXBkYXRlIHNlcXVlbmNlIG51bWJlciAqLworCXNlcV9udW0gPSBIb3N0Q21kX0dFVF9TRVFfTk8oc2VxX251bSk7CisJLyogQ2xlYXIgUkVUX0JJVCBmcm9tIEhvc3RDbWQgKi8KKwljb21tYW5kICY9IEhvc3RDbWRfQ01EX0lEX01BU0s7CisKKwlpZiAoY29tbWFuZCAhPSBIb3N0Q21kX0NNRF84MDJfMTFfUFNfTU9ERV9FTkgpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICIlczogcmVjZWl2ZWQgdW5leHBlY3RlZCByZXNwb25zZSBmb3IiCisJCQkiIGNtZCAleCwgcmVzdWx0ID0gJXhcbiIsIF9fZnVuY19fLCBjb21tYW5kLCByZXN1bHQpOworCQlyZXR1cm47CisJfQorCisJaWYgKHJlc3VsdCkgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIiVzOiBzbGVlcCBjb25maXJtIGNtZCBmYWlsZWRcbiIsCisJCQkJCQlfX2Z1bmNfXyk7CisJCWFkYXB0ZXItPnBtX3dha2V1cF9jYXJkX3JlcSA9IGZhbHNlOworCQlhZGFwdGVyLT5wc19zdGF0ZSA9IFBTX1NUQVRFX0FXQUtFOworCQlyZXR1cm47CisJfQorCWFkYXB0ZXItPnBtX3dha2V1cF9jYXJkX3JlcSA9IHRydWU7CisJaWYgKGFkYXB0ZXItPmlzX2hzX2NvbmZpZ3VyZWQpCisJCW13aWZpZXhfaHNfYWN0aXZhdGVkX2V2ZW50KG13aWZpZXhfZ2V0X3ByaXYoYWRhcHRlciwKKwkJCQkJICAgTVdJRklFWF9CU1NfUk9MRV9BTlkpLCB0cnVlKTsKKwlhZGFwdGVyLT5wc19zdGF0ZSA9IFBTX1NUQVRFX1NMRUVQOworCWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KGNvbW1hbmQpOworCWNtZC0+c2VxX251bSA9IGNwdV90b19sZTE2KHNlcV9udW0pOworfQorRVhQT1JUX1NZTUJPTF9HUEwobXdpZmlleF9wcm9jZXNzX3NsZWVwX2NvbmZpcm1fcmVzcCk7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGFuIGVuaGFuY2VkIHBvd2VyIG1vZGUgY29tbWFuZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGRpc2FibGUgcG93ZXIgc2F2ZSBvciB0byBjb25maWd1cmUKKyAqIHBvd2VyIHNhdmUgd2l0aCBhdXRvIFBTIG9yIFNUQSBQUyBvciBhdXRvIGRlZXAgc2xlZXAuCisgKgorICogUHJlcGFyYXRpb24gaW5jbHVkZXMgLQorICogICAgICAtIFNldHRpbmcgY29tbWFuZCBJRCwgYWN0aW9uIGFuZCBwcm9wZXIgc2l6ZQorICogICAgICAtIFNldHRpbmcgUG93ZXIgU2F2ZSBiaXRtYXAsIFBTIHBhcmFtZXRlcnMgVExWLCBQUyBtb2RlIFRMViwKKyAqICAgICAgICBhdXRvIGRlZXAgc2xlZXAgVExWIChhcyByZXF1aXJlZCkKKyAqICAgICAgLSBFbnN1cmluZyBjb3JyZWN0IGVuZGlhbi1uZXNzCisgKi8KK2ludCBtd2lmaWV4X2NtZF9lbmhfcG93ZXJfbW9kZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQsCisJCQkgICAgICAgdTE2IGNtZF9hY3Rpb24sIHVpbnQxNl90IHBzX2JpdG1hcCwKKwkJCSAgICAgICB2b2lkICpkYXRhX2J1ZikKK3sKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX3BzX21vZGVfZW5oICpwc21vZGVfZW5oID0KKwkJJmNtZC0+cGFyYW1zLnBzbW9kZV9lbmg7CisJdTggKnRsdjsKKwl1MTYgY21kX3NpemUgPSAwOworCisJY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoSG9zdENtZF9DTURfODAyXzExX1BTX01PREVfRU5IKTsKKwlpZiAoY21kX2FjdGlvbiA9PSBESVNfQVVUT19QUykgeworCQlwc21vZGVfZW5oLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihESVNfQVVUT19QUyk7CisJCXBzbW9kZV9lbmgtPnBhcmFtcy5wc19iaXRtYXAgPSBjcHVfdG9fbGUxNihwc19iaXRtYXApOworCQljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihTX0RTX0dFTiArIHNpemVvZihwc21vZGVfZW5oLT5hY3Rpb24pICsKKwkJCQlzaXplb2YocHNtb2RlX2VuaC0+cGFyYW1zLnBzX2JpdG1hcCkpOworCX0gZWxzZSBpZiAoY21kX2FjdGlvbiA9PSBHRVRfUFMpIHsKKwkJcHNtb2RlX2VuaC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoR0VUX1BTKTsKKwkJcHNtb2RlX2VuaC0+cGFyYW1zLnBzX2JpdG1hcCA9IGNwdV90b19sZTE2KHBzX2JpdG1hcCk7CisJCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KFNfRFNfR0VOICsgc2l6ZW9mKHBzbW9kZV9lbmgtPmFjdGlvbikgKworCQkJCXNpemVvZihwc21vZGVfZW5oLT5wYXJhbXMucHNfYml0bWFwKSk7CisJfSBlbHNlIGlmIChjbWRfYWN0aW9uID09IEVOX0FVVE9fUFMpIHsKKwkJcHNtb2RlX2VuaC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoRU5fQVVUT19QUyk7CisJCXBzbW9kZV9lbmgtPnBhcmFtcy5wc19iaXRtYXAgPSBjcHVfdG9fbGUxNihwc19iaXRtYXApOworCQljbWRfc2l6ZSA9IFNfRFNfR0VOICsgc2l6ZW9mKHBzbW9kZV9lbmgtPmFjdGlvbikgKworCQkJCXNpemVvZihwc21vZGVfZW5oLT5wYXJhbXMucHNfYml0bWFwKTsKKwkJdGx2ID0gKHU4ICopIGNtZCArIGNtZF9zaXplOworCQlpZiAocHNfYml0bWFwICYgQklUTUFQX1NUQV9QUykgeworCQkJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJCQlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19wc19wYXJhbSAqcHNfdGx2ID0KKwkJCQkoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfcHNfcGFyYW0gKikgdGx2OworCQkJc3RydWN0IG13aWZpZXhfcHNfcGFyYW0gKnBzX21vZGUgPSAmcHNfdGx2LT5wYXJhbTsKKwkJCXBzX3Rsdi0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihUTFZfVFlQRV9QU19QQVJBTSk7CisJCQlwc190bHYtPmhlYWRlci5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnBzX3RsdikgLQorCQkJCQlzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyKSk7CisJCQljbWRfc2l6ZSArPSBzaXplb2YoKnBzX3Rsdik7CisJCQl0bHYgKz0gc2l6ZW9mKCpwc190bHYpOworCQkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJjbWQ6IFBTIENvbW1hbmQ6IEVudGVyIFBTXG4iKTsKKwkJCXBzX21vZGUtPm51bGxfcGt0X2ludGVydmFsID0KKwkJCQljcHVfdG9fbGUxNihhZGFwdGVyLT5udWxsX3BrdF9pbnRlcnZhbCk7CisJCQlwc19tb2RlLT5tdWx0aXBsZV9kdGltcyA9CisJCQkJY3B1X3RvX2xlMTYoYWRhcHRlci0+bXVsdGlwbGVfZHRpbSk7CisJCQlwc19tb2RlLT5iY25fbWlzc190aW1lb3V0ID0KKwkJCQljcHVfdG9fbGUxNihhZGFwdGVyLT5iY25fbWlzc190aW1lX291dCk7CisJCQlwc19tb2RlLT5sb2NhbF9saXN0ZW5faW50ZXJ2YWwgPQorCQkJCWNwdV90b19sZTE2KGFkYXB0ZXItPmxvY2FsX2xpc3Rlbl9pbnRlcnZhbCk7CisJCQlwc19tb2RlLT5hZGhvY193YWtlX3BlcmlvZCA9CisJCQkJY3B1X3RvX2xlMTYoYWRhcHRlci0+YWRob2NfYXdha2VfcGVyaW9kKTsKKwkJCXBzX21vZGUtPmRlbGF5X3RvX3BzID0KKwkJCQljcHVfdG9fbGUxNihhZGFwdGVyLT5kZWxheV90b19wcyk7CisJCQlwc19tb2RlLT5tb2RlID0KKwkJCQljcHVfdG9fbGUxNihhZGFwdGVyLT5lbmhhbmNlZF9wc19tb2RlKTsKKworCQl9CisJCWlmIChwc19iaXRtYXAgJiBCSVRNQVBfQVVUT19EUykgeworCQkJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfYXV0b19kc19wYXJhbSAqYXV0b19kc190bHYgPQorCQkJCShzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19hdXRvX2RzX3BhcmFtICopIHRsdjsKKwkJCXUxNiBpZGxldGltZSA9IDA7CisKKwkJCWF1dG9fZHNfdGx2LT5oZWFkZXIudHlwZSA9CisJCQkJY3B1X3RvX2xlMTYoVExWX1RZUEVfQVVUT19EU19QQVJBTSk7CisJCQlhdXRvX2RzX3Rsdi0+aGVhZGVyLmxlbiA9CisJCQkJY3B1X3RvX2xlMTYoc2l6ZW9mKCphdXRvX2RzX3RsdikgLQorCQkJCQlzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyKSk7CisJCQljbWRfc2l6ZSArPSBzaXplb2YoKmF1dG9fZHNfdGx2KTsKKwkJCXRsdiArPSBzaXplb2YoKmF1dG9fZHNfdGx2KTsKKwkJCWlmIChkYXRhX2J1ZikKKwkJCQlpZGxldGltZSA9ICgoc3RydWN0IG13aWZpZXhfZHNfYXV0b19kcyAqKQorCQkJCQkgICAgIGRhdGFfYnVmKS0+aWRsZV90aW1lOworCQkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkJCSJjbWQ6IFBTIENvbW1hbmQ6IEVudGVyIEF1dG8gRGVlcCBTbGVlcFxuIik7CisJCQlhdXRvX2RzX3Rsdi0+ZGVlcF9zbGVlcF90aW1lb3V0ID0gY3B1X3RvX2xlMTYoaWRsZXRpbWUpOworCQl9CisJCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KGNtZF9zaXplKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNvbW1hbmQgcmVzcG9uc2Ugb2YgYW4gZW5oYW5jZWQgcG93ZXIgbW9kZQorICogY29tbWFuZC4KKyAqCisgKiBIYW5kbGluZyBpbmNsdWRlcyBjaGFuZ2luZyB0aGUgaGVhZGVyIGZpZWxkcyBpbnRvIENQVSBmb3JtYXQKKyAqIGFuZCBzZXR0aW5nIHRoZSBjdXJyZW50IGVuaGFuY2VkIHBvd2VyIG1vZGUgaW4gZHJpdmVyLgorICovCitpbnQgbXdpZmlleF9yZXRfZW5oX3Bvd2VyX21vZGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqcmVzcCwKKwkJCSAgICAgICB2b2lkICpkYXRhX2J1ZikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX3BzX21vZGVfZW5oICpwc19tb2RlID0KKwkJJnJlc3AtPnBhcmFtcy5wc21vZGVfZW5oOworCXVpbnQxNl90IGFjdGlvbiA9IGxlMTZfdG9fY3B1KHBzX21vZGUtPmFjdGlvbik7CisJdWludDE2X3QgcHNfYml0bWFwID0gbGUxNl90b19jcHUocHNfbW9kZS0+cGFyYW1zLnBzX2JpdG1hcCk7CisJdWludDE2X3QgYXV0b19wc19iaXRtYXAgPQorCQlsZTE2X3RvX2NwdShwc19tb2RlLT5wYXJhbXMucHNfYml0bWFwKTsKKworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogJXM6IFBTX01PREUgY21kIHJlcGx5IHJlc3VsdD0lI3ggYWN0aW9uPSUjWFxuIiwKKwkJCQkJX19mdW5jX18sIHJlc3AtPnJlc3VsdCwgYWN0aW9uKTsKKwlpZiAoYWN0aW9uID09IEVOX0FVVE9fUFMpIHsKKwkJaWYgKGF1dG9fcHNfYml0bWFwICYgQklUTUFQX0FVVE9fRFMpIHsKKwkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiY21kOiBFbmFibGVkIGF1dG8gZGVlcCBzbGVlcFxuIik7CisJCQlwcml2LT5hZGFwdGVyLT5pc19kZWVwX3NsZWVwID0gdHJ1ZTsKKwkJfQorCQlpZiAoYXV0b19wc19iaXRtYXAgJiBCSVRNQVBfU1RBX1BTKSB7CisJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImNtZDogRW5hYmxlZCBTVEEgcG93ZXIgc2F2ZVxuIik7CisJCQlpZiAoYWRhcHRlci0+c2xlZXBfcGVyaW9kLnBlcmlvZCkKKwkJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImNtZDogc2V0IHRvIHVhcHNkL3BwcyBtb2RlXG4iKTsKKwkJfQorCX0gZWxzZSBpZiAoYWN0aW9uID09IERJU19BVVRPX1BTKSB7CisJCWlmIChwc19iaXRtYXAgJiBCSVRNQVBfQVVUT19EUykgeworCQkJcHJpdi0+YWRhcHRlci0+aXNfZGVlcF9zbGVlcCA9IGZhbHNlOworCQkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJjbWQ6IERpc2FibGVkIGF1dG8gZGVlcCBzbGVlcFxuIik7CisJCX0KKwkJaWYgKHBzX2JpdG1hcCAmIEJJVE1BUF9TVEFfUFMpIHsKKwkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiY21kOiBEaXNhYmxlZCBTVEEgcG93ZXIgc2F2ZVxuIik7CisJCQlpZiAoYWRhcHRlci0+c2xlZXBfcGVyaW9kLnBlcmlvZCkgeworCQkJCWFkYXB0ZXItPmRlbGF5X251bGxfcGt0ID0gZmFsc2U7CisJCQkJYWRhcHRlci0+dHhfbG9ja19mbGFnID0gZmFsc2U7CisJCQkJYWRhcHRlci0+cHBzX3VhcHNkX21vZGUgPSBmYWxzZTsKKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAoYWN0aW9uID09IEdFVF9QUykgeworCQlpZiAocHNfYml0bWFwICYgQklUTUFQX1NUQV9QUykKKwkJCWFkYXB0ZXItPnBzX21vZGUgPSBNV0lGSUVYXzgwMl8xMV9QT1dFUl9NT0RFX1BTUDsKKwkJZWxzZQorCQkJYWRhcHRlci0+cHNfbW9kZSA9IE1XSUZJRVhfODAyXzExX1BPV0VSX01PREVfQ0FNOworCisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiY21kOiBwc19iaXRtYXA9JSN4XG4iLCBwc19iaXRtYXApOworCisJCWlmIChkYXRhX2J1ZikgeworCQkJLyogVGhpcyBzZWN0aW9uIGlzIGZvciBnZXQgcG93ZXIgc2F2ZSBtb2RlICovCisJCQlzdHJ1Y3QgbXdpZmlleF9kc19wbV9jZmcgKnBtX2NmZyA9CisJCQkJCShzdHJ1Y3QgbXdpZmlleF9kc19wbV9jZmcgKilkYXRhX2J1ZjsKKwkJCWlmIChwc19iaXRtYXAgJiBCSVRNQVBfU1RBX1BTKQorCQkJCXBtX2NmZy0+cGFyYW0ucHNfbW9kZSA9IDE7CisJCQllbHNlCisJCQkJcG1fY2ZnLT5wYXJhbS5wc19tb2RlID0gMDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgY29tbWFuZCB0byBnZXQgaGFyZHdhcmUgc3BlY2lmaWNhdGlvbnMuCisgKgorICogUHJlcGFyYXRpb24gaW5jbHVkZXMgLQorICogICAgICAtIFNldHRpbmcgY29tbWFuZCBJRCwgYWN0aW9uIGFuZCBwcm9wZXIgc2l6ZQorICogICAgICAtIFNldHRpbmcgcGVybWFuZW50IGFkZHJlc3MgcGFyYW1ldGVyCisgKiAgICAgIC0gRW5zdXJpbmcgY29ycmVjdCBlbmRpYW4tbmVzcworICovCitpbnQgbXdpZmlleF9jbWRfZ2V0X2h3X3NwZWMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kKQoreworCXN0cnVjdCBob3N0X2NtZF9kc19nZXRfaHdfc3BlYyAqaHdfc3BlYyA9ICZjbWQtPnBhcmFtcy5od19zcGVjOworCisJY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoSG9zdENtZF9DTURfR0VUX0hXX1NQRUMpOworCWNtZC0+c2l6ZSA9CisJCWNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZHNfZ2V0X2h3X3NwZWMpICsgU19EU19HRU4pOworCW1lbWNweShod19zcGVjLT5wZXJtYW5lbnRfYWRkciwgcHJpdi0+Y3Vycl9hZGRyLCBFVEhfQUxFTik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgY29tbWFuZCByZXNwb25zZSBvZiBnZXQgaGFyZHdhcmUKKyAqIHNwZWNpZmljYXRpb25zLgorICoKKyAqIEhhbmRsaW5nIGluY2x1ZGVzIGNoYW5naW5nIHRoZSBoZWFkZXIgZmllbGRzIGludG8gQ1BVIGZvcm1hdAorICogYW5kIHNhdmluZy91cGRhdGluZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgaW4gZHJpdmVyIC0KKyAqICAgICAgLSBGaXJtd2FyZSBjYXBhYmlsaXR5IGluZm9ybWF0aW9uCisgKiAgICAgIC0gRmlybXdhcmUgYmFuZCBzZXR0aW5ncworICogICAgICAtIEFkLWhvYyBzdGFydCBiYW5kIGFuZCBjaGFubmVsCisgKiAgICAgIC0gQWQtaG9jIDExbiBhY3RpdmF0aW9uIHN0YXR1cworICogICAgICAtIEZpcm13YXJlIHJlbGVhc2UgbnVtYmVyCisgKiAgICAgIC0gTnVtYmVyIG9mIGFudGVubmFzCisgKiAgICAgIC0gSGFyZHdhcmUgYWRkcmVzcworICogICAgICAtIEhhcmR3YXJlIGludGVyZmFjZSB2ZXJzaW9uCisgKiAgICAgIC0gRmlybXdhcmUgdmVyc2lvbgorICogICAgICAtIFJlZ2lvbiBjb2RlCisgKiAgICAgIC0gMTFuIGNhcGFiaWxpdGllcworICogICAgICAtIE1DUyBzdXBwb3J0IGZpZWxkcworICogICAgICAtIE1QIGVuZCBwb3J0CisgKi8KK2ludCBtd2lmaWV4X3JldF9nZXRfaHdfc3BlYyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwKQoreworCXN0cnVjdCBob3N0X2NtZF9kc19nZXRfaHdfc3BlYyAqaHdfc3BlYyA9ICZyZXNwLT5wYXJhbXMuaHdfc3BlYzsKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlpbnQgaTsKKworCWFkYXB0ZXItPmZ3X2NhcF9pbmZvID0gbGUzMl90b19jcHUoaHdfc3BlYy0+ZndfY2FwX2luZm8pOworCisJaWYgKElTX1NVUFBPUlRfTVVMVElfQkFORFMoYWRhcHRlcikpCisJCWFkYXB0ZXItPmZ3X2JhbmRzID0gKHU4KSBHRVRfRldfREVGQVVMVF9CQU5EUyhhZGFwdGVyKTsKKwllbHNlCisJCWFkYXB0ZXItPmZ3X2JhbmRzID0gQkFORF9COworCisJYWRhcHRlci0+Y29uZmlnX2JhbmRzID0gYWRhcHRlci0+ZndfYmFuZHM7CisKKwlpZiAoYWRhcHRlci0+ZndfYmFuZHMgJiBCQU5EX0EpIHsKKwkJaWYgKGFkYXB0ZXItPmZ3X2JhbmRzICYgQkFORF9HTikgeworCQkJYWRhcHRlci0+Y29uZmlnX2JhbmRzIHw9IEJBTkRfQU47CisJCQlhZGFwdGVyLT5md19iYW5kcyB8PSBCQU5EX0FOOworCQl9CisJCWlmIChhZGFwdGVyLT5md19iYW5kcyAmIEJBTkRfQU4pIHsKKwkJCWFkYXB0ZXItPmFkaG9jX3N0YXJ0X2JhbmQgPSBCQU5EX0EgfCBCQU5EX0FOOworCQkJYWRhcHRlci0+YWRob2NfMTFuX2VuYWJsZWQgPSB0cnVlOworCQl9IGVsc2UgeworCQkJYWRhcHRlci0+YWRob2Nfc3RhcnRfYmFuZCA9IEJBTkRfQTsKKwkJfQorCQlwcml2LT5hZGhvY19jaGFubmVsID0gREVGQVVMVF9BRF9IT0NfQ0hBTk5FTF9BOworCX0gZWxzZSBpZiAoYWRhcHRlci0+ZndfYmFuZHMgJiBCQU5EX0dOKSB7CisJCWFkYXB0ZXItPmFkaG9jX3N0YXJ0X2JhbmQgPSBCQU5EX0cgfCBCQU5EX0IgfCBCQU5EX0dOOworCQlwcml2LT5hZGhvY19jaGFubmVsID0gREVGQVVMVF9BRF9IT0NfQ0hBTk5FTDsKKwkJYWRhcHRlci0+YWRob2NfMTFuX2VuYWJsZWQgPSB0cnVlOworCX0gZWxzZSBpZiAoYWRhcHRlci0+ZndfYmFuZHMgJiBCQU5EX0cpIHsKKwkJYWRhcHRlci0+YWRob2Nfc3RhcnRfYmFuZCA9IEJBTkRfRyB8IEJBTkRfQjsKKwkJcHJpdi0+YWRob2NfY2hhbm5lbCA9IERFRkFVTFRfQURfSE9DX0NIQU5ORUw7CisJfSBlbHNlIGlmIChhZGFwdGVyLT5md19iYW5kcyAmIEJBTkRfQikgeworCQlhZGFwdGVyLT5hZGhvY19zdGFydF9iYW5kID0gQkFORF9COworCQlwcml2LT5hZGhvY19jaGFubmVsID0gREVGQVVMVF9BRF9IT0NfQ0hBTk5FTDsKKwl9CisKKwlhZGFwdGVyLT5md19yZWxlYXNlX251bWJlciA9IGxlMzJfdG9fY3B1KGh3X3NwZWMtPmZ3X3JlbGVhc2VfbnVtYmVyKTsKKwlhZGFwdGVyLT5udW1iZXJfb2ZfYW50ZW5uYSA9IGxlMTZfdG9fY3B1KGh3X3NwZWMtPm51bWJlcl9vZl9hbnRlbm5hKTsKKworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogR0VUX0hXX1NQRUM6IGZ3X3JlbGVhc2VfbnVtYmVyLSAlI3hcbiIsCisJICAgICAgIGFkYXB0ZXItPmZ3X3JlbGVhc2VfbnVtYmVyKTsKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IEdFVF9IV19TUEVDOiBwZXJtYW5lbnQgYWRkcjogJXBNXG4iLAorCQkJCQlod19zcGVjLT5wZXJtYW5lbnRfYWRkcik7CisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBHRVRfSFdfU1BFQzogaHdfaWZfdmVyc2lvbj0lI3ggIHZlcnNpb249JSN4XG4iLAorCQlsZTE2X3RvX2NwdShod19zcGVjLT5od19pZl92ZXJzaW9uKSwKKwkgICAgICAgbGUxNl90b19jcHUoaHdfc3BlYy0+dmVyc2lvbikpOworCisJaWYgKHByaXYtPmN1cnJfYWRkclswXSA9PSAweGZmKQorCQltZW1tb3ZlKHByaXYtPmN1cnJfYWRkciwgaHdfc3BlYy0+cGVybWFuZW50X2FkZHIsIEVUSF9BTEVOKTsKKworCWFkYXB0ZXItPnJlZ2lvbl9jb2RlID0gbGUxNl90b19jcHUoaHdfc3BlYy0+cmVnaW9uX2NvZGUpOworCisJZm9yIChpID0gMDsgaSA8IE1XSUZJRVhfTUFYX1JFR0lPTl9DT0RFOyBpKyspCisJCS8qIFVzZSB0aGUgcmVnaW9uIGNvZGUgdG8gc2VhcmNoIGZvciB0aGUgaW5kZXggKi8KKwkJaWYgKGFkYXB0ZXItPnJlZ2lvbl9jb2RlID09IHJlZ2lvbl9jb2RlX2luZGV4W2ldKQorCQkJYnJlYWs7CisKKwkvKiBJZiBpdCdzIHVuaWRlbnRpZmllZCByZWdpb24gY29kZSwgdXNlIHRoZSBkZWZhdWx0IChVU0EpICovCisJaWYgKGkgPj0gTVdJRklFWF9NQVhfUkVHSU9OX0NPREUpIHsKKwkJYWRhcHRlci0+cmVnaW9uX2NvZGUgPSAweDEwOworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImNtZDogdW5rbm93biByZWdpb24gY29kZSwgdXNlIGRlZmF1bHQgKFVTQSlcbiIpOworCX0KKworCWFkYXB0ZXItPmh3X2RvdF8xMW5fZGV2X2NhcCA9IGxlMzJfdG9fY3B1KGh3X3NwZWMtPmRvdF8xMW5fZGV2X2NhcCk7CisJYWRhcHRlci0+aHdfZGV2X21jc19zdXBwb3J0ID0gaHdfc3BlYy0+ZGV2X21jc19zdXBwb3J0OworCisJaWYgKGFkYXB0ZXItPmlmX29wcy51cGRhdGVfbXBfZW5kX3BvcnQpCisJCWFkYXB0ZXItPmlmX29wcy51cGRhdGVfbXBfZW5kX3BvcnQoYWRhcHRlciwKKwkJCQkJbGUxNl90b19jcHUoaHdfc3BlYy0+bXBfZW5kX3BvcnQpKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2RlYnVnZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmQ2NWUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9kZWJ1Z2ZzLmMKQEAgLTAsMCArMSw3NzAgQEAKKy8qCisgKiBNYXJ2ZWxsIFdpcmVsZXNzIExBTiBkZXZpY2UgZHJpdmVyOiBkZWJ1Z2ZzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5hdGlvbmFsCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4KKyAqIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBvZiB3aGljaAorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0Egb3Igb24gdGhlCisgKiB3b3JsZHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQuCisgKgorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNlIHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dAorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisKKyNpbmNsdWRlICJtYWluLmgiCisjaW5jbHVkZSAiMTFuLmgiCisKKworc3RhdGljIHN0cnVjdCBkZW50cnkgKm13aWZpZXhfZGZzX2RpcjsKKworc3RhdGljIGNoYXIgKmJzc19tb2Rlc1tdID0geworCSJVbmtub3duIiwKKwkiTWFuYWdlZCIsCisJIkFkLWhvYyIsCisJIkF1dG8iCit9OworCisvKiBzaXplL2FkZHIgZm9yIG13aWZpZXhfZGVidWdfaW5mbyAqLworI2RlZmluZSBpdGVtX3NpemUobikJCShGSUVMRF9TSVpFT0Yoc3RydWN0IG13aWZpZXhfZGVidWdfaW5mbywgbikpCisjZGVmaW5lIGl0ZW1fYWRkcihuKQkJKG9mZnNldG9mKHN0cnVjdCBtd2lmaWV4X2RlYnVnX2luZm8sIG4pKQorCisvKiBzaXplL2FkZHIgZm9yIHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKi8KKyNkZWZpbmUgYWRhcHRlcl9pdGVtX3NpemUobikJKEZJRUxEX1NJWkVPRihzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyLCBuKSkKKyNkZWZpbmUgYWRhcHRlcl9pdGVtX2FkZHIobikJKG9mZnNldG9mKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIsIG4pKQorCitzdHJ1Y3QgbXdpZmlleF9kZWJ1Z19kYXRhIHsKKwljaGFyIG5hbWVbMzJdOwkJLyogdmFyaWFibGUvYXJyYXkgbmFtZSAqLworCXUzMiBzaXplOwkJLyogc2l6ZSBvZiB0aGUgdmFyaWFibGUvYXJyYXkgKi8KKwlzaXplX3QgYWRkcjsJCS8qIGFkZHJlc3Mgb2YgdGhlIHZhcmlhYmxlL2FycmF5ICovCisJaW50IG51bTsJCS8qIG51bWJlciBvZiB2YXJpYWJsZXMgaW4gYW4gYXJyYXkgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgbXdpZmlleF9kZWJ1Z19kYXRhIGl0ZW1zW10gPSB7CisJeyJpbnRfY291bnRlciIsIGl0ZW1fc2l6ZShpbnRfY291bnRlciksCisJIGl0ZW1fYWRkcihpbnRfY291bnRlciksIDF9LAorCXsid21tX2FjX3ZvIiwgaXRlbV9zaXplKHBhY2tldHNfb3V0W1dNTV9BQ19WT10pLAorCSBpdGVtX2FkZHIocGFja2V0c19vdXRbV01NX0FDX1ZPXSksIDF9LAorCXsid21tX2FjX3ZpIiwgaXRlbV9zaXplKHBhY2tldHNfb3V0W1dNTV9BQ19WSV0pLAorCSBpdGVtX2FkZHIocGFja2V0c19vdXRbV01NX0FDX1ZJXSksIDF9LAorCXsid21tX2FjX2JlIiwgaXRlbV9zaXplKHBhY2tldHNfb3V0W1dNTV9BQ19CRV0pLAorCSBpdGVtX2FkZHIocGFja2V0c19vdXRbV01NX0FDX0JFXSksIDF9LAorCXsid21tX2FjX2JrIiwgaXRlbV9zaXplKHBhY2tldHNfb3V0W1dNTV9BQ19CS10pLAorCSBpdGVtX2FkZHIocGFja2V0c19vdXRbV01NX0FDX0JLXSksIDF9LAorCXsibWF4X3R4X2J1Zl9zaXplIiwgaXRlbV9zaXplKG1heF90eF9idWZfc2l6ZSksCisJIGl0ZW1fYWRkcihtYXhfdHhfYnVmX3NpemUpLCAxfSwKKwl7InR4X2J1Zl9zaXplIiwgaXRlbV9zaXplKHR4X2J1Zl9zaXplKSwKKwkgaXRlbV9hZGRyKHR4X2J1Zl9zaXplKSwgMX0sCisJeyJjdXJyX3R4X2J1Zl9zaXplIiwgaXRlbV9zaXplKGN1cnJfdHhfYnVmX3NpemUpLAorCSBpdGVtX2FkZHIoY3Vycl90eF9idWZfc2l6ZSksIDF9LAorCXsicHNfbW9kZSIsIGl0ZW1fc2l6ZShwc19tb2RlKSwKKwkgaXRlbV9hZGRyKHBzX21vZGUpLCAxfSwKKwl7InBzX3N0YXRlIiwgaXRlbV9zaXplKHBzX3N0YXRlKSwKKwkgaXRlbV9hZGRyKHBzX3N0YXRlKSwgMX0sCisJeyJpc19kZWVwX3NsZWVwIiwgaXRlbV9zaXplKGlzX2RlZXBfc2xlZXApLAorCSBpdGVtX2FkZHIoaXNfZGVlcF9zbGVlcCksIDF9LAorCXsid2FrZXVwX2Rldl9yZXEiLCBpdGVtX3NpemUocG1fd2FrZXVwX2NhcmRfcmVxKSwKKwkgaXRlbV9hZGRyKHBtX3dha2V1cF9jYXJkX3JlcSksIDF9LAorCXsid2FrZXVwX3RyaWVzIiwgaXRlbV9zaXplKHBtX3dha2V1cF9md190cnkpLAorCSBpdGVtX2FkZHIocG1fd2FrZXVwX2Z3X3RyeSksIDF9LAorCXsiaHNfY29uZmlndXJlZCIsIGl0ZW1fc2l6ZShpc19oc19jb25maWd1cmVkKSwKKwkgaXRlbV9hZGRyKGlzX2hzX2NvbmZpZ3VyZWQpLCAxfSwKKwl7ImhzX2FjdGl2YXRlZCIsIGl0ZW1fc2l6ZShoc19hY3RpdmF0ZWQpLAorCSBpdGVtX2FkZHIoaHNfYWN0aXZhdGVkKSwgMX0sCisJeyJudW1fdHhfdGltZW91dCIsIGl0ZW1fc2l6ZShudW1fdHhfdGltZW91dCksCisJIGl0ZW1fYWRkcihudW1fdHhfdGltZW91dCksIDF9LAorCXsibnVtX2NtZF90aW1lb3V0IiwgaXRlbV9zaXplKG51bV9jbWRfdGltZW91dCksCisJIGl0ZW1fYWRkcihudW1fY21kX3RpbWVvdXQpLCAxfSwKKwl7InRpbWVvdXRfY21kX2lkIiwgaXRlbV9zaXplKHRpbWVvdXRfY21kX2lkKSwKKwkgaXRlbV9hZGRyKHRpbWVvdXRfY21kX2lkKSwgMX0sCisJeyJ0aW1lb3V0X2NtZF9hY3QiLCBpdGVtX3NpemUodGltZW91dF9jbWRfYWN0KSwKKwkgaXRlbV9hZGRyKHRpbWVvdXRfY21kX2FjdCksIDF9LAorCXsibGFzdF9jbWRfaWQiLCBpdGVtX3NpemUobGFzdF9jbWRfaWQpLAorCSBpdGVtX2FkZHIobGFzdF9jbWRfaWQpLCBEQkdfQ01EX05VTX0sCisJeyJsYXN0X2NtZF9hY3QiLCBpdGVtX3NpemUobGFzdF9jbWRfYWN0KSwKKwkgaXRlbV9hZGRyKGxhc3RfY21kX2FjdCksIERCR19DTURfTlVNfSwKKwl7Imxhc3RfY21kX2luZGV4IiwgaXRlbV9zaXplKGxhc3RfY21kX2luZGV4KSwKKwkgaXRlbV9hZGRyKGxhc3RfY21kX2luZGV4KSwgMX0sCisJeyJsYXN0X2NtZF9yZXNwX2lkIiwgaXRlbV9zaXplKGxhc3RfY21kX3Jlc3BfaWQpLAorCSBpdGVtX2FkZHIobGFzdF9jbWRfcmVzcF9pZCksIERCR19DTURfTlVNfSwKKwl7Imxhc3RfY21kX3Jlc3BfaW5kZXgiLCBpdGVtX3NpemUobGFzdF9jbWRfcmVzcF9pbmRleCksCisJIGl0ZW1fYWRkcihsYXN0X2NtZF9yZXNwX2luZGV4KSwgMX0sCisJeyJsYXN0X2V2ZW50IiwgaXRlbV9zaXplKGxhc3RfZXZlbnQpLAorCSBpdGVtX2FkZHIobGFzdF9ldmVudCksIERCR19DTURfTlVNfSwKKwl7Imxhc3RfZXZlbnRfaW5kZXgiLCBpdGVtX3NpemUobGFzdF9ldmVudF9pbmRleCksCisJIGl0ZW1fYWRkcihsYXN0X2V2ZW50X2luZGV4KSwgMX0sCisJeyJudW1fY21kX2gyY19mYWlsIiwgaXRlbV9zaXplKG51bV9jbWRfaG9zdF90b19jYXJkX2ZhaWx1cmUpLAorCSBpdGVtX2FkZHIobnVtX2NtZF9ob3N0X3RvX2NhcmRfZmFpbHVyZSksIDF9LAorCXsibnVtX2NtZF9zbGVlcF9jZm1fZmFpbCIsCisJIGl0ZW1fc2l6ZShudW1fY21kX3NsZWVwX2NmbV9ob3N0X3RvX2NhcmRfZmFpbHVyZSksCisJIGl0ZW1fYWRkcihudW1fY21kX3NsZWVwX2NmbV9ob3N0X3RvX2NhcmRfZmFpbHVyZSksIDF9LAorCXsibnVtX3R4X2gyY19mYWlsIiwgaXRlbV9zaXplKG51bV90eF9ob3N0X3RvX2NhcmRfZmFpbHVyZSksCisJIGl0ZW1fYWRkcihudW1fdHhfaG9zdF90b19jYXJkX2ZhaWx1cmUpLCAxfSwKKwl7Im51bV9ldnRfZGVhdXRoIiwgaXRlbV9zaXplKG51bV9ldmVudF9kZWF1dGgpLAorCSBpdGVtX2FkZHIobnVtX2V2ZW50X2RlYXV0aCksIDF9LAorCXsibnVtX2V2dF9kaXNhc3NvYyIsIGl0ZW1fc2l6ZShudW1fZXZlbnRfZGlzYXNzb2MpLAorCSBpdGVtX2FkZHIobnVtX2V2ZW50X2Rpc2Fzc29jKSwgMX0sCisJeyJudW1fZXZ0X2xpbmtfbG9zdCIsIGl0ZW1fc2l6ZShudW1fZXZlbnRfbGlua19sb3N0KSwKKwkgaXRlbV9hZGRyKG51bV9ldmVudF9saW5rX2xvc3QpLCAxfSwKKwl7Im51bV9jbWRfZGVhdXRoIiwgaXRlbV9zaXplKG51bV9jbWRfZGVhdXRoKSwKKwkgaXRlbV9hZGRyKG51bV9jbWRfZGVhdXRoKSwgMX0sCisJeyJudW1fY21kX2Fzc29jX29rIiwgaXRlbV9zaXplKG51bV9jbWRfYXNzb2Nfc3VjY2VzcyksCisJIGl0ZW1fYWRkcihudW1fY21kX2Fzc29jX3N1Y2Nlc3MpLCAxfSwKKwl7Im51bV9jbWRfYXNzb2NfZmFpbCIsIGl0ZW1fc2l6ZShudW1fY21kX2Fzc29jX2ZhaWx1cmUpLAorCSBpdGVtX2FkZHIobnVtX2NtZF9hc3NvY19mYWlsdXJlKSwgMX0sCisJeyJjbWRfc2VudCIsIGl0ZW1fc2l6ZShjbWRfc2VudCksCisJIGl0ZW1fYWRkcihjbWRfc2VudCksIDF9LAorCXsiZGF0YV9zZW50IiwgaXRlbV9zaXplKGRhdGFfc2VudCksCisJIGl0ZW1fYWRkcihkYXRhX3NlbnQpLCAxfSwKKwl7ImNtZF9yZXNwX3JlY2VpdmVkIiwgaXRlbV9zaXplKGNtZF9yZXNwX3JlY2VpdmVkKSwKKwkgaXRlbV9hZGRyKGNtZF9yZXNwX3JlY2VpdmVkKSwgMX0sCisJeyJldmVudF9yZWNlaXZlZCIsIGl0ZW1fc2l6ZShldmVudF9yZWNlaXZlZCksCisJIGl0ZW1fYWRkcihldmVudF9yZWNlaXZlZCksIDF9LAorCisJLyogdmFyaWFibGVzIGRlZmluZWQgaW4gc3RydWN0IG13aWZpZXhfYWRhcHRlciAqLworCXsiY21kX3BlbmRpbmciLCBhZGFwdGVyX2l0ZW1fc2l6ZShjbWRfcGVuZGluZyksCisJIGFkYXB0ZXJfaXRlbV9hZGRyKGNtZF9wZW5kaW5nKSwgMX0sCisJeyJ0eF9wZW5kaW5nIiwgYWRhcHRlcl9pdGVtX3NpemUodHhfcGVuZGluZyksCisJIGFkYXB0ZXJfaXRlbV9hZGRyKHR4X3BlbmRpbmcpLCAxfSwKKwl7InJ4X3BlbmRpbmciLCBhZGFwdGVyX2l0ZW1fc2l6ZShyeF9wZW5kaW5nKSwKKwkgYWRhcHRlcl9pdGVtX2FkZHIocnhfcGVuZGluZyksIDF9LAorfTsKKworc3RhdGljIGludCBudW1fb2ZfaXRlbXMgPSBBUlJBWV9TSVpFKGl0ZW1zKTsKKworLyoKKyAqIEdlbmVyaWMgcHJvYyBmaWxlIG9wZW4gaGFuZGxlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBldmVyeSB0aW1lIGEgZmlsZSBpcyBhY2Nlc3NlZCBmb3IgcmVhZCBvciB3cml0ZS4KKyAqLworc3RhdGljIGludAorbXdpZmlleF9vcGVuX2dlbmVyaWMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFByb2MgaW5mbyBmaWxlIHJlYWQgaGFuZGxlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSAnaW5mbycgZmlsZSBpcyBvcGVuZWQgZm9yIHJlYWRpbmcuCisgKiBJdCBwcmludHMgdGhlIGZvbGxvd2luZyBkcml2ZXIgcmVsYXRlZCBpbmZvcm1hdGlvbiAtCisgKiAgICAgIC0gRHJpdmVyIG5hbWUKKyAqICAgICAgLSBEcml2ZXIgdmVyc2lvbgorICogICAgICAtIERyaXZlciBleHRlbmRlZCB2ZXJzaW9uCisgKiAgICAgIC0gSW50ZXJmYWNlIG5hbWUKKyAqICAgICAgLSBCU1MgbW9kZQorICogICAgICAtIE1lZGlhIHN0YXRlIChjb25uZWN0ZWQgb3IgZGlzY29ubmVjdGVkKQorICogICAgICAtIE1BQyBhZGRyZXNzCisgKiAgICAgIC0gVG90YWwgbnVtYmVyIG9mIFR4IGJ5dGVzCisgKiAgICAgIC0gVG90YWwgbnVtYmVyIG9mIFJ4IGJ5dGVzCisgKiAgICAgIC0gVG90YWwgbnVtYmVyIG9mIFR4IHBhY2tldHMKKyAqICAgICAgLSBUb3RhbCBudW1iZXIgb2YgUnggcGFja2V0cworICogICAgICAtIFRvdGFsIG51bWJlciBvZiBkcm9wcGVkIFR4IHBhY2tldHMKKyAqICAgICAgLSBUb3RhbCBudW1iZXIgb2YgZHJvcHBlZCBSeCBwYWNrZXRzCisgKiAgICAgIC0gVG90YWwgbnVtYmVyIG9mIGNvcnJ1cHRlZCBUeCBwYWNrZXRzCisgKiAgICAgIC0gVG90YWwgbnVtYmVyIG9mIGNvcnJ1cHRlZCBSeCBwYWNrZXRzCisgKiAgICAgIC0gQ2FycmllciBzdGF0dXMgKG9uIG9yIG9mZikKKyAqICAgICAgLSBUeCBxdWV1ZSBzdGF0dXMgKHN0YXJ0ZWQgb3Igc3RvcHBlZCkKKyAqCisgKiBGb3IgU1RBIG1vZGUgZHJpdmVycywgaXQgYWxzbyBwcmludHMgdGhlIGZvbGxvd2luZyBleHRyYSAtCisgKiAgICAgIC0gRVNTSUQKKyAqICAgICAgLSBCU1NJRAorICogICAgICAtIENoYW5uZWwKKyAqICAgICAgLSBSZWdpb24gY29kZQorICogICAgICAtIE11bHRpY2FzdCBjb3VudAorICogICAgICAtIE11bHRpY2FzdCBhZGRyZXNzZXMKKyAqLworc3RhdGljIHNzaXplX3QKK213aWZpZXhfaW5mb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0KKwkJKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwcml2LT5uZXRkZXY7CisJc3RydWN0IG5ldGRldl9od19hZGRyICpoYTsKKwl1bnNpZ25lZCBsb25nIHBhZ2UgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJY2hhciAqcCA9IChjaGFyICopIHBhZ2UsIGZtdFs2NF07CisJc3RydWN0IG13aWZpZXhfYnNzX2luZm8gaW5mbzsKKwlzc2l6ZV90IHJldDsKKwlpbnQgaSA9IDA7CisKKwlpZiAoIXApCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOworCXJldCA9IG13aWZpZXhfZ2V0X2Jzc19pbmZvKHByaXYsICZpbmZvKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfYW5kX2V4aXQ7CisKKwltd2lmaWV4X2Rydl9nZXRfZHJpdmVyX3ZlcnNpb24ocHJpdi0+YWRhcHRlciwgZm10LCBzaXplb2YoZm10KSAtIDEpOworCisJaWYgKCFwcml2LT52ZXJzaW9uX3N0clswXSkKKwkJbXdpZmlleF9nZXRfdmVyX2V4dChwcml2KTsKKworCXAgKz0gc3ByaW50ZihwLCAiZHJpdmVyX25hbWUgPSAiICJcIm13aWZpZXhcIlxuIik7CisJcCArPSBzcHJpbnRmKHAsICJkcml2ZXJfdmVyc2lvbiA9ICVzIiwgZm10KTsKKwlwICs9IHNwcmludGYocCwgIlxudmVyZXh0ID0gJXMiLCBwcml2LT52ZXJzaW9uX3N0cik7CisJcCArPSBzcHJpbnRmKHAsICJcbmludGVyZmFjZV9uYW1lPVwiJXNcIlxuIiwgbmV0ZGV2LT5uYW1lKTsKKwlwICs9IHNwcmludGYocCwgImJzc19tb2RlPVwiJXNcIlxuIiwgYnNzX21vZGVzW2luZm8uYnNzX21vZGVdKTsKKwlwICs9IHNwcmludGYocCwgIm1lZGlhX3N0YXRlPVwiJXNcIlxuIiwKKwkJICAgICAoIXByaXYtPm1lZGlhX2Nvbm5lY3RlZCA/ICJEaXNjb25uZWN0ZWQiIDogIkNvbm5lY3RlZCIpKTsKKwlwICs9IHNwcmludGYocCwgIm1hY19hZGRyZXNzPVwiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcIlxuIiwKKwkJICAgICBuZXRkZXYtPmRldl9hZGRyWzBdLCBuZXRkZXYtPmRldl9hZGRyWzFdLAorCQkgICAgIG5ldGRldi0+ZGV2X2FkZHJbMl0sIG5ldGRldi0+ZGV2X2FkZHJbM10sCisJCSAgICAgbmV0ZGV2LT5kZXZfYWRkcls0XSwgbmV0ZGV2LT5kZXZfYWRkcls1XSk7CisKKwlpZiAoR0VUX0JTU19ST0xFKHByaXYpID09IE1XSUZJRVhfQlNTX1JPTEVfU1RBKSB7CisJCXAgKz0gc3ByaW50ZihwLCAibXVsdGljYXN0X2NvdW50PVwiJWRcIlxuIiwKKwkJCSAgICAgbmV0ZGV2X21jX2NvdW50KG5ldGRldikpOworCQlwICs9IHNwcmludGYocCwgImVzc2lkPVwiJXNcIlxuIiwgaW5mby5zc2lkLnNzaWQpOworCQlwICs9IHNwcmludGYocCwgImJzc2lkPVwiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcIlxuIiwKKwkJCSAgICAgaW5mby5ic3NpZFswXSwgaW5mby5ic3NpZFsxXSwKKwkJCSAgICAgaW5mby5ic3NpZFsyXSwgaW5mby5ic3NpZFszXSwKKwkJCSAgICAgaW5mby5ic3NpZFs0XSwgaW5mby5ic3NpZFs1XSk7CisJCXAgKz0gc3ByaW50ZihwLCAiY2hhbm5lbD1cIiVkXCJcbiIsIChpbnQpIGluZm8uYnNzX2NoYW4pOworCQlwICs9IHNwcmludGYocCwgInJlZ2lvbl9jb2RlID0gXCIlMDJ4XCJcbiIsIGluZm8ucmVnaW9uX2NvZGUpOworCisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBuZXRkZXYpCisJCQlwICs9IHNwcmludGYocCwgIm11bHRpY2FzdF9hZGRyZXNzWyVkXT0iCisJCQkJICAgICAiXCIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFwiXG4iLCBpKyssCisJCQkJICAgICBoYS0+YWRkclswXSwgaGEtPmFkZHJbMV0sCisJCQkJICAgICBoYS0+YWRkclsyXSwgaGEtPmFkZHJbM10sCisJCQkJICAgICBoYS0+YWRkcls0XSwgaGEtPmFkZHJbNV0pOworCX0KKworCXAgKz0gc3ByaW50ZihwLCAibnVtX3R4X2J5dGVzID0gJWx1XG4iLCBwcml2LT5zdGF0cy50eF9ieXRlcyk7CisJcCArPSBzcHJpbnRmKHAsICJudW1fcnhfYnl0ZXMgPSAlbHVcbiIsIHByaXYtPnN0YXRzLnJ4X2J5dGVzKTsKKwlwICs9IHNwcmludGYocCwgIm51bV90eF9wa3RzID0gJWx1XG4iLCBwcml2LT5zdGF0cy50eF9wYWNrZXRzKTsKKwlwICs9IHNwcmludGYocCwgIm51bV9yeF9wa3RzID0gJWx1XG4iLCBwcml2LT5zdGF0cy5yeF9wYWNrZXRzKTsKKwlwICs9IHNwcmludGYocCwgIm51bV90eF9wa3RzX2Ryb3BwZWQgPSAlbHVcbiIsIHByaXYtPnN0YXRzLnR4X2Ryb3BwZWQpOworCXAgKz0gc3ByaW50ZihwLCAibnVtX3J4X3BrdHNfZHJvcHBlZCA9ICVsdVxuIiwgcHJpdi0+c3RhdHMucnhfZHJvcHBlZCk7CisJcCArPSBzcHJpbnRmKHAsICJudW1fdHhfcGt0c19lcnIgPSAlbHVcbiIsIHByaXYtPnN0YXRzLnR4X2Vycm9ycyk7CisJcCArPSBzcHJpbnRmKHAsICJudW1fcnhfcGt0c19lcnIgPSAlbHVcbiIsIHByaXYtPnN0YXRzLnJ4X2Vycm9ycyk7CisJcCArPSBzcHJpbnRmKHAsICJjYXJyaWVyICVzXG4iLCAoKG5ldGlmX2NhcnJpZXJfb2socHJpdi0+bmV0ZGV2KSkKKwkJCQkJID8gIm9uIiA6ICJvZmYiKSk7CisJcCArPSBzcHJpbnRmKHAsICJ0eCBxdWV1ZSAlc1xuIiwgKChuZXRpZl9xdWV1ZV9zdG9wcGVkKHByaXYtPm5ldGRldikpCisJCQkJCSAgPyAic3RvcHBlZCIgOiAic3RhcnRlZCIpKTsKKworCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNvdW50LCBwcG9zLCAoY2hhciAqKSBwYWdlLAorCQkJCSAgICAgICh1bnNpZ25lZCBsb25nKSBwIC0gcGFnZSk7CisKK2ZyZWVfYW5kX2V4aXQ6CisJZnJlZV9wYWdlKHBhZ2UpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBQcm9jIGdldGxvZyBmaWxlIHJlYWQgaGFuZGxlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSAnZ2V0bG9nJyBmaWxlIGlzIG9wZW5lZCBmb3IgcmVhZGluZworICogSXQgcHJpbnRzIHRoZSBmb2xsb3dpbmcgbG9nIGluZm9ybWF0aW9uIC0KKyAqICAgICAgLSBOdW1iZXIgb2YgbXVsdGljYXN0IFR4IGZyYW1lcworICogICAgICAtIE51bWJlciBvZiBmYWlsZWQgcGFja2V0cworICogICAgICAtIE51bWJlciBvZiBUeCByZXRyaWVzCisgKiAgICAgIC0gTnVtYmVyIG9mIG11bHRpY2FzdCBUeCByZXRyaWVzCisgKiAgICAgIC0gTnVtYmVyIG9mIGR1cGxpY2F0ZSBmcmFtZXMKKyAqICAgICAgLSBOdW1iZXIgb2YgUlRTIHN1Y2Nlc3NlcworICogICAgICAtIE51bWJlciBvZiBSVFMgZmFpbHVyZXMKKyAqICAgICAgLSBOdW1iZXIgb2YgQUNLIGZhaWx1cmVzCisgKiAgICAgIC0gTnVtYmVyIG9mIGZyYWdtZW50ZWQgUnggZnJhbWVzCisgKiAgICAgIC0gTnVtYmVyIG9mIG11bHRpY2FzdCBSeCBmcmFtZXMKKyAqICAgICAgLSBOdW1iZXIgb2YgRkNTIGVycm9ycworICogICAgICAtIE51bWJlciBvZiBUeCBmcmFtZXMKKyAqICAgICAgLSBXRVAgSUNWIGVycm9yIGNvdW50cworICovCitzdGF0aWMgc3NpemVfdAorbXdpZmlleF9nZXRsb2dfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVidWYsCisJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0KKwkJKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgcGFnZSA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwljaGFyICpwID0gKGNoYXIgKikgcGFnZTsKKwlzc2l6ZV90IHJldDsKKwlzdHJ1Y3QgbXdpZmlleF9kc19nZXRfc3RhdHMgc3RhdHM7CisKKwlpZiAoIXApCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtc2V0KCZzdGF0cywgMCwgc2l6ZW9mKHN0YXRzKSk7CisJcmV0ID0gbXdpZmlleF9nZXRfc3RhdHNfaW5mbyhwcml2LCAmc3RhdHMpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9hbmRfZXhpdDsKKworCXAgKz0gc3ByaW50ZihwLCAiXG4iCisJCSAgICAgIm1jYXN0dHhmcmFtZSAgICAgJXVcbiIKKwkJICAgICAiZmFpbGVkICAgICAgICAgICAldVxuIgorCQkgICAgICJyZXRyeSAgICAgICAgICAgICV1XG4iCisJCSAgICAgIm11bHRpcmV0cnkgICAgICAgJXVcbiIKKwkJICAgICAiZnJhbWVkdXAgICAgICAgICAldVxuIgorCQkgICAgICJydHNzdWNjZXNzICAgICAgICV1XG4iCisJCSAgICAgInJ0c2ZhaWx1cmUgICAgICAgJXVcbiIKKwkJICAgICAiYWNrZmFpbHVyZSAgICAgICAldVxuIgorCQkgICAgICJyeGZyYWcgICAgICAgICAgICV1XG4iCisJCSAgICAgIm1jYXN0cnhmcmFtZSAgICAgJXVcbiIKKwkJICAgICAiZmNzZXJyb3IgICAgICAgICAldVxuIgorCQkgICAgICJ0eGZyYW1lICAgICAgICAgICV1XG4iCisJCSAgICAgIndlcGljdmVycmNudC0xICAgJXVcbiIKKwkJICAgICAid2VwaWN2ZXJyY250LTIgICAldVxuIgorCQkgICAgICJ3ZXBpY3ZlcnJjbnQtMyAgICV1XG4iCisJCSAgICAgIndlcGljdmVycmNudC00ICAgJXVcbiIsCisJCSAgICAgc3RhdHMubWNhc3RfdHhfZnJhbWUsCisJCSAgICAgc3RhdHMuZmFpbGVkLAorCQkgICAgIHN0YXRzLnJldHJ5LAorCQkgICAgIHN0YXRzLm11bHRpX3JldHJ5LAorCQkgICAgIHN0YXRzLmZyYW1lX2R1cCwKKwkJICAgICBzdGF0cy5ydHNfc3VjY2VzcywKKwkJICAgICBzdGF0cy5ydHNfZmFpbHVyZSwKKwkJICAgICBzdGF0cy5hY2tfZmFpbHVyZSwKKwkJICAgICBzdGF0cy5yeF9mcmFnLAorCQkgICAgIHN0YXRzLm1jYXN0X3J4X2ZyYW1lLAorCQkgICAgIHN0YXRzLmZjc19lcnJvciwKKwkJICAgICBzdGF0cy50eF9mcmFtZSwKKwkJICAgICBzdGF0cy53ZXBfaWN2X2Vycm9yWzBdLAorCQkgICAgIHN0YXRzLndlcF9pY3ZfZXJyb3JbMV0sCisJCSAgICAgc3RhdHMud2VwX2ljdl9lcnJvclsyXSwKKwkJICAgICBzdGF0cy53ZXBfaWN2X2Vycm9yWzNdKTsKKworCisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY291bnQsIHBwb3MsIChjaGFyICopIHBhZ2UsCisJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcpIHAgLSBwYWdlKTsKKworZnJlZV9hbmRfZXhpdDoKKwlmcmVlX3BhZ2UocGFnZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBtd2lmaWV4X2RlYnVnX2luZm8gaW5mbzsKKworLyoKKyAqIFByb2MgZGVidWcgZmlsZSByZWFkIGhhbmRsZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgJ2RlYnVnJyBmaWxlIGlzIG9wZW5lZCBmb3IgcmVhZGluZworICogSXQgcHJpbnRzIHRoZSBmb2xsb3dpbmcgbG9nIGluZm9ybWF0aW9uIC0KKyAqICAgICAgLSBJbnRlcnJ1cHQgY291bnQKKyAqICAgICAgLSBXTU0gQUMgVk8gcGFja2V0cyBjb3VudAorICogICAgICAtIFdNTSBBQyBWSSBwYWNrZXRzIGNvdW50CisgKiAgICAgIC0gV01NIEFDIEJFIHBhY2tldHMgY291bnQKKyAqICAgICAgLSBXTU0gQUMgQksgcGFja2V0cyBjb3VudAorICogICAgICAtIE1heGltdW0gVHggYnVmZmVyIHNpemUKKyAqICAgICAgLSBUeCBidWZmZXIgc2l6ZQorICogICAgICAtIEN1cnJlbnQgVHggYnVmZmVyIHNpemUKKyAqICAgICAgLSBQb3dlciBTYXZlIG1vZGUKKyAqICAgICAgLSBQb3dlciBTYXZlIHN0YXRlCisgKiAgICAgIC0gRGVlcCBTbGVlcCBzdGF0dXMKKyAqICAgICAgLSBEZXZpY2Ugd2FrZXVwIHJlcXVpcmVkIHN0YXR1cworICogICAgICAtIE51bWJlciBvZiB3YWtldXAgdHJpZXMKKyAqICAgICAgLSBIb3N0IFNsZWVwIGNvbmZpZ3VyZWQgc3RhdHVzCisgKiAgICAgIC0gSG9zdCBTbGVlcCBhY3RpdmF0ZWQgc3RhdHVzCisgKiAgICAgIC0gTnVtYmVyIG9mIFR4IHRpbWVvdXRzCisgKiAgICAgIC0gTnVtYmVyIG9mIGNvbW1hbmQgdGltZW91dHMKKyAqICAgICAgLSBMYXN0IHRpbWVkIG91dCBjb21tYW5kIElECisgKiAgICAgIC0gTGFzdCB0aW1lZCBvdXQgY29tbWFuZCBhY3Rpb24KKyAqICAgICAgLSBMYXN0IGNvbW1hbmQgSUQKKyAqICAgICAgLSBMYXN0IGNvbW1hbmQgYWN0aW9uCisgKiAgICAgIC0gTGFzdCBjb21tYW5kIGluZGV4CisgKiAgICAgIC0gTGFzdCBjb21tYW5kIHJlc3BvbnNlIElECisgKiAgICAgIC0gTGFzdCBjb21tYW5kIHJlc3BvbnNlIGluZGV4CisgKiAgICAgIC0gTGFzdCBldmVudAorICogICAgICAtIExhc3QgZXZlbnQgaW5kZXgKKyAqICAgICAgLSBOdW1iZXIgb2YgaG9zdCB0byBjYXJkIGNvbW1hbmQgZmFpbHVyZXMKKyAqICAgICAgLSBOdW1iZXIgb2Ygc2xlZXAgY29uZmlybSBjb21tYW5kIGZhaWx1cmVzCisgKiAgICAgIC0gTnVtYmVyIG9mIGhvc3QgdG8gY2FyZCBkYXRhIGZhaWx1cmUKKyAqICAgICAgLSBOdW1iZXIgb2YgZGVhdXRoZW50aWNhdGlvbiBldmVudHMKKyAqICAgICAgLSBOdW1iZXIgb2YgZGlzYXNzb2NpYXRpb24gZXZlbnRzCisgKiAgICAgIC0gTnVtYmVyIG9mIGxpbmsgbG9zdCBldmVudHMKKyAqICAgICAgLSBOdW1iZXIgb2YgZGVhdXRoZW50aWNhdGlvbiBjb21tYW5kcworICogICAgICAtIE51bWJlciBvZiBhc3NvY2lhdGlvbiBzdWNjZXNzIGNvbW1hbmRzCisgKiAgICAgIC0gTnVtYmVyIG9mIGFzc29jaWF0aW9uIGZhaWx1cmUgY29tbWFuZHMKKyAqICAgICAgLSBOdW1iZXIgb2YgY29tbWFuZHMgc2VudAorICogICAgICAtIE51bWJlciBvZiBkYXRhIHBhY2tldHMgc2VudAorICogICAgICAtIE51bWJlciBvZiBjb21tYW5kIHJlc3BvbnNlcyByZWNlaXZlZAorICogICAgICAtIE51bWJlciBvZiBldmVudHMgcmVjZWl2ZWQKKyAqICAgICAgLSBUeCBCQSBzdHJlYW0gdGFibGUgKFRJRCwgUkEpCisgKiAgICAgIC0gUnggcmVvcmRlciB0YWJsZSAoVElELCBUQSwgU3RhcnQgd2luZG93LCBXaW5kb3cgc2l6ZSwgQnVmZmVyKQorICovCitzdGF0aWMgc3NpemVfdAorbXdpZmlleF9kZWJ1Z19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9CisJCShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICopIGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbXdpZmlleF9kZWJ1Z19kYXRhICpkID0gJml0ZW1zWzBdOworCXVuc2lnbmVkIGxvbmcgcGFnZSA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwljaGFyICpwID0gKGNoYXIgKikgcGFnZTsKKwlzc2l6ZV90IHJldDsKKwlzaXplX3Qgc2l6ZSwgYWRkcjsKKwlsb25nIHZhbDsKKwlpbnQgaSwgajsKKworCWlmICghcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBtd2lmaWV4X2dldF9kZWJ1Z19pbmZvKHByaXYsICZpbmZvKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfYW5kX2V4aXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX29mX2l0ZW1zOyBpKyspIHsKKwkJcCArPSBzcHJpbnRmKHAsICIlcz0iLCBkW2ldLm5hbWUpOworCisJCXNpemUgPSBkW2ldLnNpemUgLyBkW2ldLm51bTsKKworCQlpZiAoaSA8IChudW1fb2ZfaXRlbXMgLSAzKSkKKwkJCWFkZHIgPSBkW2ldLmFkZHIgKyAoc2l6ZV90KSAmaW5mbzsKKwkJZWxzZSAvKiBUaGUgbGFzdCAzIGl0ZW1zIGFyZSBzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyIHZhcmlhYmxlcyAqLworCQkJYWRkciA9IGRbaV0uYWRkciArIChzaXplX3QpIHByaXYtPmFkYXB0ZXI7CisKKwkJZm9yIChqID0gMDsgaiA8IGRbaV0ubnVtOyBqKyspIHsKKwkJCXN3aXRjaCAoc2l6ZSkgeworCQkJY2FzZSAxOgorCQkJCXZhbCA9ICooKHU4ICopIGFkZHIpOworCQkJCWJyZWFrOworCQkJY2FzZSAyOgorCQkJCXZhbCA9ICooKHUxNiAqKSBhZGRyKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgNDoKKwkJCQl2YWwgPSAqKCh1MzIgKikgYWRkcik7CisJCQkJYnJlYWs7CisJCQljYXNlIDg6CisJCQkJdmFsID0gKigobG9uZyBsb25nICopIGFkZHIpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQl2YWwgPSAtMTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJcCArPSBzcHJpbnRmKHAsICIlI2x4ICIsIHZhbCk7CisJCQlhZGRyICs9IHNpemU7CisJCX0KKworCQlwICs9IHNwcmludGYocCwgIlxuIik7CisJfQorCisJaWYgKGluZm8udHhfdGJsX251bSkgeworCQlwICs9IHNwcmludGYocCwgIlR4IEJBIHN0cmVhbSB0YWJsZTpcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgaW5mby50eF90YmxfbnVtOyBpKyspCisJCQlwICs9IHNwcmludGYocCwgInRpZCA9ICVkLCAiCisJCQkJICAgICAicmEgPSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJCQkgICAgIGluZm8udHhfdGJsW2ldLnRpZCwgaW5mby50eF90YmxbaV0ucmFbMF0sCisJCQkJICAgICBpbmZvLnR4X3RibFtpXS5yYVsxXSwgaW5mby50eF90YmxbaV0ucmFbMl0sCisJCQkJICAgICBpbmZvLnR4X3RibFtpXS5yYVszXSwgaW5mby50eF90YmxbaV0ucmFbNF0sCisJCQkJICAgICBpbmZvLnR4X3RibFtpXS5yYVs1XSk7CisJfQorCisJaWYgKGluZm8ucnhfdGJsX251bSkgeworCQlwICs9IHNwcmludGYocCwgIlJ4IHJlb3JkZXIgdGFibGU6XG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IGluZm8ucnhfdGJsX251bTsgaSsrKSB7CisKKwkJCXAgKz0gc3ByaW50ZihwLCAidGlkID0gJWQsICIKKwkJCQkgICAgICJ0YSA9ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4LCAiCisJCQkJICAgICAic3RhcnRfd2luID0gJWQsICIKKwkJCQkgICAgICJ3aW5fc2l6ZSA9ICVkLCBidWZmZXI6ICIsCisJCQkJICAgICBpbmZvLnJ4X3RibFtpXS50aWQsCisJCQkJICAgICBpbmZvLnJ4X3RibFtpXS50YVswXSwgaW5mby5yeF90YmxbaV0udGFbMV0sCisJCQkJICAgICBpbmZvLnJ4X3RibFtpXS50YVsyXSwgaW5mby5yeF90YmxbaV0udGFbM10sCisJCQkJICAgICBpbmZvLnJ4X3RibFtpXS50YVs0XSwgaW5mby5yeF90YmxbaV0udGFbNV0sCisJCQkJICAgICBpbmZvLnJ4X3RibFtpXS5zdGFydF93aW4sCisJCQkJICAgICBpbmZvLnJ4X3RibFtpXS53aW5fc2l6ZSk7CisKKwkJCWZvciAoaiA9IDA7IGogPCBpbmZvLnJ4X3RibFtpXS53aW5fc2l6ZTsgaisrKQorCQkJCXAgKz0gc3ByaW50ZihwLCAiJWMgIiwKKwkJCQkJICAgICBpbmZvLnJ4X3RibFtpXS5idWZmZXJbal0gPworCQkJCQkgICAgICcxJyA6ICcwJyk7CisKKwkJCXAgKz0gc3ByaW50ZihwLCAiXG4iKTsKKwkJfQorCX0KKworCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNvdW50LCBwcG9zLCAoY2hhciAqKSBwYWdlLAorCQkJCSAgICAgICh1bnNpZ25lZCBsb25nKSBwIC0gcGFnZSk7CisKK2ZyZWVfYW5kX2V4aXQ6CisJZnJlZV9wYWdlKHBhZ2UpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1MzIgc2F2ZWRfcmVnX3R5cGUsIHNhdmVkX3JlZ19vZmZzZXQsIHNhdmVkX3JlZ192YWx1ZTsKKworLyoKKyAqIFByb2MgcmVncmR3ciBmaWxlIHdyaXRlIGhhbmRsZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgJ3JlZ3Jkd3InIGZpbGUgaXMgb3BlbmVkIGZvciB3cml0aW5nCisgKgorICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byB3cml0ZSB0byBhIHJlZ2lzdGVyLgorICovCitzdGF0aWMgc3NpemVfdAorbXdpZmlleF9yZWdyZHdyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkgICAgICBjb25zdCBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCWNoYXIgKmJ1ZiA9IChjaGFyICopIGFkZHI7CisJc2l6ZV90IGJ1Zl9zaXplID0gbWluKGNvdW50LCAoc2l6ZV90KSAoUEFHRV9TSVpFIC0gMSkpOworCWludCByZXQ7CisJdTMyIHJlZ190eXBlID0gMCwgcmVnX29mZnNldCA9IDAsIHJlZ192YWx1ZSA9IFVJTlRfTUFYOworCisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1YnVmLCBidWZfc2l6ZSkpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBkb25lOworCX0KKworCXNzY2FuZihidWYsICIldSAleCAleCIsICZyZWdfdHlwZSwgJnJlZ19vZmZzZXQsICZyZWdfdmFsdWUpOworCisJaWYgKHJlZ190eXBlID09IDAgfHwgcmVnX29mZnNldCA9PSAwKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZG9uZTsKKwl9IGVsc2UgeworCQlzYXZlZF9yZWdfdHlwZSA9IHJlZ190eXBlOworCQlzYXZlZF9yZWdfb2Zmc2V0ID0gcmVnX29mZnNldDsKKwkJc2F2ZWRfcmVnX3ZhbHVlID0gcmVnX3ZhbHVlOworCQlyZXQgPSBjb3VudDsKKwl9Citkb25lOgorCWZyZWVfcGFnZShhZGRyKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUHJvYyByZWdyZHdyIGZpbGUgcmVhZCBoYW5kbGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlICdyZWdyZHdyJyBmaWxlIGlzIG9wZW5lZCBmb3IgcmVhZGluZworICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gcmVhZCBmcm9tIGEgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyBzc2l6ZV90Cittd2lmaWV4X3JlZ3Jkd3JfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVidWYsCisJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9CisJCShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICopIGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJY2hhciAqYnVmID0gKGNoYXIgKikgYWRkcjsKKwlpbnQgcG9zID0gMCwgcmV0ID0gMDsKKwl1MzIgcmVnX3ZhbHVlOworCisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKCFzYXZlZF9yZWdfdHlwZSkgeworCQkvKiBObyBjb21tYW5kIGhhcyBiZWVuIGdpdmVuICovCisJCXBvcyArPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjAiKTsKKwkJZ290byBkb25lOworCX0KKwkvKiBTZXQgY29tbWFuZCBoYXMgYmVlbiBnaXZlbiAqLworCWlmIChzYXZlZF9yZWdfdmFsdWUgIT0gVUlOVF9NQVgpIHsKKwkJcmV0ID0gbXdpZmlleF9yZWdfd3JpdGUocHJpdiwgc2F2ZWRfcmVnX3R5cGUsIHNhdmVkX3JlZ19vZmZzZXQsCisJCQkJCXNhdmVkX3JlZ192YWx1ZSk7CisKKwkJcG9zICs9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXUgMHgleCAweCV4XG4iLAorCQkJCXNhdmVkX3JlZ190eXBlLCBzYXZlZF9yZWdfb2Zmc2V0LAorCQkJCXNhdmVkX3JlZ192YWx1ZSk7CisKKwkJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKKworCQlnb3RvIGRvbmU7CisJfQorCS8qIEdldCBjb21tYW5kIGhhcyBiZWVuIGdpdmVuICovCisJcmV0ID0gbXdpZmlleF9yZWdfcmVhZChwcml2LCBzYXZlZF9yZWdfdHlwZSwKKwkJCSAgICAgICBzYXZlZF9yZWdfb2Zmc2V0LCAmcmVnX3ZhbHVlKTsKKwlpZiAocmV0KSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlwb3MgKz0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldSAweCV4IDB4JXhcbiIsIHNhdmVkX3JlZ190eXBlLAorCQkJc2F2ZWRfcmVnX29mZnNldCwgcmVnX3ZhbHVlKTsKKworCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CisKK2RvbmU6CisJZnJlZV9wYWdlKGFkZHIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1MzIgc2F2ZWRfb2Zmc2V0ID0gLTEsIHNhdmVkX2J5dGVzID0gLTE7CisKKy8qCisgKiBQcm9jIHJkZWVwcm9tIGZpbGUgd3JpdGUgaGFuZGxlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSAncmRlZXByb20nIGZpbGUgaXMgb3BlbmVkIGZvciB3cml0aW5nCisgKgorICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byB3cml0ZSB0byBhIFJERUVQUk9NIGxvY2F0aW9uLgorICovCitzdGF0aWMgc3NpemVfdAorbXdpZmlleF9yZGVlcHJvbV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJICAgICAgIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJY2hhciAqYnVmID0gKGNoYXIgKikgYWRkcjsKKwlzaXplX3QgYnVmX3NpemUgPSBtaW4oY291bnQsIChzaXplX3QpIChQQUdFX1NJWkUgLSAxKSk7CisJaW50IHJldCA9IDA7CisJaW50IG9mZnNldCA9IC0xLCBieXRlcyA9IC0xOworCisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1YnVmLCBidWZfc2l6ZSkpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBkb25lOworCX0KKworCXNzY2FuZihidWYsICIlZCAlZCIsICZvZmZzZXQsICZieXRlcyk7CisKKwlpZiAob2Zmc2V0ID09IC0xIHx8IGJ5dGVzID09IC0xKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZG9uZTsKKwl9IGVsc2UgeworCQlzYXZlZF9vZmZzZXQgPSBvZmZzZXQ7CisJCXNhdmVkX2J5dGVzID0gYnl0ZXM7CisJCXJldCA9IGNvdW50OworCX0KK2RvbmU6CisJZnJlZV9wYWdlKGFkZHIpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBQcm9jIHJkZWVwcm9tIHJlYWQgd3JpdGUgaGFuZGxlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSAncmRlZXByb20nIGZpbGUgaXMgb3BlbmVkIGZvciByZWFkaW5nCisgKgorICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byByZWFkIGZyb20gYSBSREVFUFJPTSBsb2NhdGlvbi4KKyAqLworc3RhdGljIHNzaXplX3QKK213aWZpZXhfcmRlZXByb21fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVidWYsCisJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPQorCQkoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqKSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCWNoYXIgKmJ1ZiA9IChjaGFyICopIGFkZHI7CisJaW50IHBvcyA9IDAsIHJldCA9IDAsIGk7CisJdTggdmFsdWVbTUFYX0VFUFJPTV9EQVRBXTsKKworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChzYXZlZF9vZmZzZXQgPT0gLTEpIHsKKwkJLyogTm8gY29tbWFuZCBoYXMgYmVlbiBnaXZlbiAqLworCQlwb3MgKz0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIwIik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBHZXQgY29tbWFuZCBoYXMgYmVlbiBnaXZlbiAqLworCXJldCA9IG13aWZpZXhfZWVwcm9tX3JlYWQocHJpdiwgKHUxNikgc2F2ZWRfb2Zmc2V0LAorCQkJCSAgKHUxNikgc2F2ZWRfYnl0ZXMsIHZhbHVlKTsKKwlpZiAocmV0KSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlwb3MgKz0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZCAlZCAiLCBzYXZlZF9vZmZzZXQsIHNhdmVkX2J5dGVzKTsKKworCWZvciAoaSA9IDA7IGkgPCBzYXZlZF9ieXRlczsgaSsrKQorCQlwb3MgKz0gc25wcmludGYoYnVmICsgc3RybGVuKGJ1ZiksIFBBR0VfU0laRSwgIiVkICIsIHZhbHVlW2ldKTsKKworCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CisKK2RvbmU6CisJZnJlZV9wYWdlKGFkZHIpOworCXJldHVybiByZXQ7Cit9CisKKworI2RlZmluZSBNV0lGSUVYX0RGU19BRERfRklMRShuYW1lKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmICghZGVidWdmc19jcmVhdGVfZmlsZSgjbmFtZSwgMDY0NCwgcHJpdi0+ZGZzX2Rldl9kaXIsICAgICAgICBcCisJCQlwcml2LCAmbXdpZmlleF9kZnNfIyNuYW1lIyNfZm9wcykpICAgICAgICAgICAgICBcCisJCXJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCk7CisKKyNkZWZpbmUgTVdJRklFWF9ERlNfRklMRV9PUFMobmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG13aWZpZXhfZGZzXyMjbmFtZSMjX2ZvcHMgPSB7ICAgICAgIFwKKwkucmVhZCA9IG13aWZpZXhfIyNuYW1lIyNfcmVhZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS53cml0ZSA9IG13aWZpZXhfIyNuYW1lIyNfd3JpdGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJLm9wZW4gPSBtd2lmaWV4X29wZW5fZ2VuZXJpYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK307CisKKyNkZWZpbmUgTVdJRklFWF9ERlNfRklMRV9SRUFEX09QUyhuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG13aWZpZXhfZGZzXyMjbmFtZSMjX2ZvcHMgPSB7ICAgICAgIFwKKwkucmVhZCA9IG13aWZpZXhfIyNuYW1lIyNfcmVhZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS5vcGVuID0gbXdpZmlleF9vcGVuX2dlbmVyaWMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9OworCisjZGVmaW5lIE1XSUZJRVhfREZTX0ZJTEVfV1JJVEVfT1BTKG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtd2lmaWV4X2Rmc18jI25hbWUjI19mb3BzID0geyAgICAgICBcCisJLndyaXRlID0gbXdpZmlleF8jI25hbWUjI193cml0ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkub3BlbiA9IG13aWZpZXhfb3Blbl9nZW5lcmljLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfTsKKworCitNV0lGSUVYX0RGU19GSUxFX1JFQURfT1BTKGluZm8pOworTVdJRklFWF9ERlNfRklMRV9SRUFEX09QUyhkZWJ1Zyk7CitNV0lGSUVYX0RGU19GSUxFX1JFQURfT1BTKGdldGxvZyk7CitNV0lGSUVYX0RGU19GSUxFX09QUyhyZWdyZHdyKTsKK01XSUZJRVhfREZTX0ZJTEVfT1BTKHJkZWVwcm9tKTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyB0aGUgZGVidWcgRlMgZGlyZWN0b3J5IHN0cnVjdHVyZSBhbmQgdGhlIGZpbGVzLgorICovCit2b2lkCittd2lmaWV4X2Rldl9kZWJ1Z2ZzX2luaXQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdikKK3sKKwlpZiAoIW13aWZpZXhfZGZzX2RpciB8fCAhcHJpdikKKwkJcmV0dXJuOworCisJcHJpdi0+ZGZzX2Rldl9kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIocHJpdi0+bmV0ZGV2LT5uYW1lLAorCQkJCQkgICAgICAgbXdpZmlleF9kZnNfZGlyKTsKKworCWlmICghcHJpdi0+ZGZzX2Rldl9kaXIpCisJCXJldHVybjsKKworCU1XSUZJRVhfREZTX0FERF9GSUxFKGluZm8pOworCU1XSUZJRVhfREZTX0FERF9GSUxFKGRlYnVnKTsKKwlNV0lGSUVYX0RGU19BRERfRklMRShnZXRsb2cpOworCU1XSUZJRVhfREZTX0FERF9GSUxFKHJlZ3Jkd3IpOworCU1XSUZJRVhfREZTX0FERF9GSUxFKHJkZWVwcm9tKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgZGVidWcgRlMgZGlyZWN0b3J5IHN0cnVjdHVyZSBhbmQgdGhlIGZpbGVzLgorICovCit2b2lkCittd2lmaWV4X2Rldl9kZWJ1Z2ZzX3JlbW92ZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KQoreworCWlmICghcHJpdikKKwkJcmV0dXJuOworCisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHByaXYtPmRmc19kZXZfZGlyKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyB0aGUgdG9wIGxldmVsIHByb2MgZGlyZWN0b3J5LgorICovCit2b2lkCittd2lmaWV4X2RlYnVnZnNfaW5pdCh2b2lkKQoreworCWlmICghbXdpZmlleF9kZnNfZGlyKQorCQltd2lmaWV4X2Rmc19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoIm13aWZpZXgiLCBOVUxMKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgdG9wIGxldmVsIHByb2MgZGlyZWN0b3J5LgorICovCit2b2lkCittd2lmaWV4X2RlYnVnZnNfcmVtb3ZlKHZvaWQpCit7CisJaWYgKG13aWZpZXhfZGZzX2RpcikKKwkJZGVidWdmc19yZW1vdmUobXdpZmlleF9kZnNfZGlyKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvZGVjbC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9kZWNsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU5MGIwOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvZGVjbC5oCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogTWFydmVsbCBXaXJlbGVzcyBMQU4gZGV2aWNlIGRyaXZlcjogZ2VuZXJpYyBkYXRhIHN0cnVjdHVyZXMgYW5kIEFQSXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwKKyAqIEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MQorICogKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbgorICogYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoCisgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQSBvciBvbiB0aGUKKyAqIHdvcmxkd2lkZSB3ZWIgYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dC4KKyAqCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0CisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuCisgKi8KKworI2lmbmRlZiBfTVdJRklFWF9ERUNMX0hfCisjZGVmaW5lIF9NV0lGSUVYX0RFQ0xfSF8KKworI3VuZGVmIHByX2ZtdAorI2RlZmluZSBwcl9mbXQoZm10KQlLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CisKKworI2RlZmluZSBNV0lGSUVYX01BWF9CU1NfTlVNICAgICAgICAgKDEpCisKKyNkZWZpbmUgTVdJRklFWF9NSU5fREFUQV9IRUFERVJfTEVOIDMyCS8qIChzaXplb2YobXdpZmlleF90eHBkKSkgKi8KKworI2RlZmluZSBNV0lGSUVYX01BWF9UWF9CQVNUUkVBTV9TVVBQT1JURUQJMgorI2RlZmluZSBNV0lGSUVYX01BWF9SWF9CQVNUUkVBTV9TVVBQT1JURUQJMTYKKworI2RlZmluZSBNV0lGSUVYX0FNUERVX0RFRl9UWFdJTlNJWkUgICAgICAgIDMyCisjZGVmaW5lIE1XSUZJRVhfQU1QRFVfREVGX1JYV0lOU0laRSAgICAgICAgMTYKKyNkZWZpbmUgTVdJRklFWF9ERUZBVUxUX0JMT0NLX0FDS19USU1FT1VUICAweGZmZmYKKworI2RlZmluZSBNV0lGSUVYX1JBVEVfSU5ERVhfSFJEU1NTMCAwCisjZGVmaW5lIE1XSUZJRVhfUkFURV9JTkRFWF9IUkRTU1MzIDMKKyNkZWZpbmUgTVdJRklFWF9SQVRFX0lOREVYX09GRE0wICAgNAorI2RlZmluZSBNV0lGSUVYX1JBVEVfSU5ERVhfT0ZETTcgICAxMQorI2RlZmluZSBNV0lGSUVYX1JBVEVfSU5ERVhfTUNTMCAgICAxMgorCisjZGVmaW5lIE1XSUZJRVhfUkFURV9CSVRNQVBfT0ZETTAgIDE2CisjZGVmaW5lIE1XSUZJRVhfUkFURV9CSVRNQVBfT0ZETTcgIDIzCisjZGVmaW5lIE1XSUZJRVhfUkFURV9CSVRNQVBfTUNTMCAgIDMyCisjZGVmaW5lIE1XSUZJRVhfUkFURV9CSVRNQVBfTUNTMTI3IDE1OQorCisjZGVmaW5lIE1XSUZJRVhfUlhfREFUQV9CVUZfU0laRSAgICAgKDQgKiAxMDI0KQorCisjZGVmaW5lIE1XSUZJRVhfUlRTX01JTl9WQUxVRSAgICAgICAgICAgICAgKDApCisjZGVmaW5lIE1XSUZJRVhfUlRTX01BWF9WQUxVRSAgICAgICAgICAgICAgKDIzNDcpCisjZGVmaW5lIE1XSUZJRVhfRlJBR19NSU5fVkFMVUUgICAgICAgICAgICAgKDI1NikKKyNkZWZpbmUgTVdJRklFWF9GUkFHX01BWF9WQUxVRSAgICAgICAgICAgICAoMjM0NikKKworI2RlZmluZSBNV0lGSUVYX1NESU9fQkxPQ0tfU0laRSAgICAgICAgICAgIDI1NgorCisjZGVmaW5lIE1XSUZJRVhfQlVGX0ZMQUdfUkVRVUVVRURfUEtUICAgICAgQklUKDApCisKK2VudW0gbXdpZmlleF9ic3NfdHlwZSB7CisJTVdJRklFWF9CU1NfVFlQRV9TVEEgPSAwLAorCU1XSUZJRVhfQlNTX1RZUEVfVUFQID0gMSwKKwlNV0lGSUVYX0JTU19UWVBFX0FOWSA9IDB4ZmYsCit9OworCitlbnVtIG13aWZpZXhfYnNzX3JvbGUgeworCU1XSUZJRVhfQlNTX1JPTEVfU1RBID0gMCwKKwlNV0lGSUVYX0JTU19ST0xFX1VBUCA9IDEsCisJTVdJRklFWF9CU1NfUk9MRV9BTlkgPSAweGZmLAorfTsKKworI2RlZmluZSBCU1NfUk9MRV9CSVRfTUFTSyAgICBCSVQoMCkKKworI2RlZmluZSBHRVRfQlNTX1JPTEUocHJpdikgICAoKHByaXYpLT5ic3Nfcm9sZSAmIEJTU19ST0xFX0JJVF9NQVNLKQorCitlbnVtIG13aWZpZXhfZGF0YV9mcmFtZV90eXBlIHsKKwlNV0lGSUVYX0RBVEFfRlJBTUVfVFlQRV9FVEhfSUkgPSAwLAorCU1XSUZJRVhfREFUQV9GUkFNRV9UWVBFXzgwMl8xMSwKK307CisKK3N0cnVjdCBtd2lmaWV4X2Z3X2ltYWdlIHsKKwl1OCAqaGVscGVyX2J1ZjsKKwl1MzIgaGVscGVyX2xlbjsKKwl1OCAqZndfYnVmOworCXUzMiBmd19sZW47Cit9OworCitzdHJ1Y3QgbXdpZmlleF84MDJfMTFfc3NpZCB7CisJdTMyIHNzaWRfbGVuOworCXU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07Cit9OworCitzdHJ1Y3QgbXdpZmlleF93YWl0X3F1ZXVlIHsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworCXUxNiBjb25kaXRpb247CisJaW50IHN0YXR1czsKK307CisKK3N0cnVjdCBtd2lmaWV4X3J4aW5mbyB7CisJdTggYnNzX2luZGV4OworCXN0cnVjdCBza19idWZmICpwYXJlbnQ7CisJdTggdXNlX2NvdW50OworfTsKKworc3RydWN0IG13aWZpZXhfdHhpbmZvIHsKKwl1MzIgc3RhdHVzX2NvZGU7CisJdTggZmxhZ3M7CisJdTggYnNzX2luZGV4OworfTsKKworc3RydWN0IG13aWZpZXhfYnNzX2F0dHIgeworCXU4IGJzc190eXBlOworCXU4IGZyYW1lX3R5cGU7CisJdTggYWN0aXZlOworCXU4IGJzc19wcmlvcml0eTsKKwl1OCBic3NfbnVtOworfTsKKworZW51bSBtd2lmaWV4X3dtbV9hY19lIHsKKwlXTU1fQUNfQkssCisJV01NX0FDX0JFLAorCVdNTV9BQ19WSSwKKwlXTU1fQUNfVk8KK30gX19wYWNrZWQ7CisjZW5kaWYgLyogIV9NV0lGSUVYX0RFQ0xfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvZncuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmRkMTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9mdy5oCkBAIC0wLDAgKzEsMTE4NyBAQAorLyoKKyAqIE1hcnZlbGwgV2lyZWxlc3MgTEFOIGRldmljZSBkcml2ZXI6IEZpcm13YXJlIHNwZWNpZmljIG1hY3JvcyAmIHN0cnVjdHVyZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwKKyAqIEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MQorICogKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbgorICogYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoCisgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQSBvciBvbiB0aGUKKyAqIHdvcmxkd2lkZSB3ZWIgYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dC4KKyAqCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0CisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuCisgKi8KKworI2lmbmRlZiBfTVdJRklFWF9GV19IXworI2RlZmluZSBfTVdJRklFWF9GV19IXworCisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKworCisjZGVmaW5lIElOVEZfSEVBREVSX0xFTiAgICAgNAorCitzdHJ1Y3QgcmZjXzEwNDJfaGRyIHsKKwl1OCBsbGNfZHNhcDsKKwl1OCBsbGNfc3NhcDsKKwl1OCBsbGNfY3RybDsKKwl1OCBzbmFwX291aVszXTsKKwl1MTYgc25hcF90eXBlOworfTsKKworc3RydWN0IHJ4X3BhY2tldF9oZHIgeworCXN0cnVjdCBldGhoZHIgZXRoODAzX2hkcjsKKwlzdHJ1Y3QgcmZjXzEwNDJfaGRyIHJmYzEwNDJfaGRyOworfTsKKworc3RydWN0IHR4X3BhY2tldF9oZHIgeworCXN0cnVjdCBldGhoZHIgZXRoODAzX2hkcjsKKwlzdHJ1Y3QgcmZjXzEwNDJfaGRyIHJmYzEwNDJfaGRyOworfTsKKworI2RlZmluZSBCX1NVUFBPUlRFRF9SQVRFUyAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgR19TVVBQT1JURURfUkFURVMgICAgICAgICAgICAgICA5CisjZGVmaW5lIEJHX1NVUFBPUlRFRF9SQVRFUyAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgQV9TVVBQT1JURURfUkFURVMgICAgICAgICAgICAgICA5CisjZGVmaW5lIEhPU1RDTURfU1VQUE9SVEVEX1JBVEVTICAgICAgICAgMTQKKyNkZWZpbmUgTl9TVVBQT1JURURfUkFURVMgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFMTF84MDJfMTFfQkFORFMgICAgICAgICAgIChCQU5EX0EgfCBCQU5EX0IgfCBCQU5EX0cgfCBCQU5EX0dOKQorCisjZGVmaW5lIEZXX01VTFRJX0JBTkRTX1NVUFBPUlQgIChCSVQoOCkgfCBCSVQoOSkgfCBCSVQoMTApIHwgQklUKDExKSkKKyNkZWZpbmUgSVNfU1VQUE9SVF9NVUxUSV9CQU5EUyhhZGFwdGVyKSAgICAgICAgXAorCShhZGFwdGVyLT5md19jYXBfaW5mbyAmIEZXX01VTFRJX0JBTkRTX1NVUFBPUlQpCisjZGVmaW5lIEdFVF9GV19ERUZBVUxUX0JBTkRTKGFkYXB0ZXIpICBcCisJKChhZGFwdGVyLT5md19jYXBfaW5mbyA+PiA4KSAmIEFMTF84MDJfMTFfQkFORFMpCisKK2V4dGVybiB1OCBzdXBwb3J0ZWRfcmF0ZXNfYltCX1NVUFBPUlRFRF9SQVRFU107CitleHRlcm4gdTggc3VwcG9ydGVkX3JhdGVzX2dbR19TVVBQT1JURURfUkFURVNdOworZXh0ZXJuIHU4IHN1cHBvcnRlZF9yYXRlc19iZ1tCR19TVVBQT1JURURfUkFURVNdOworZXh0ZXJuIHU4IHN1cHBvcnRlZF9yYXRlc19hW0FfU1VQUE9SVEVEX1JBVEVTXTsKK2V4dGVybiB1OCBzdXBwb3J0ZWRfcmF0ZXNfbltOX1NVUFBPUlRFRF9SQVRFU107CisKKyNkZWZpbmUgSG9zdENtZF9XRVBfS0VZX0lOREVYX01BU0sgICAgICAgICAgICAgIDB4M2ZmZgorCisjZGVmaW5lIEtFWV9JTkZPX0VOQUJMRUQgICAgICAgIDB4MDEKK2VudW0gS0VZX1RZUEVfSUQgeworCUtFWV9UWVBFX0lEX1dFUCA9IDAsCisJS0VZX1RZUEVfSURfVEtJUCwKKwlLRVlfVFlQRV9JRF9BRVMsCisJS0VZX1RZUEVfSURfV0FQSSwKK307CisjZGVmaW5lIEtFWV9NQ0FTVAlCSVQoMCkKKyNkZWZpbmUgS0VZX1VOSUNBU1QJQklUKDEpCisjZGVmaW5lIEtFWV9FTkFCTEVECUJJVCgyKQorCisjZGVmaW5lIFdBUElfS0VZX0xFTgkJCTUwCisKKyNkZWZpbmUgTUFYX1BPTExfVFJJRVMJCQkxMDAKKworI2RlZmluZSBNQVhfTVVMVElfSU5URVJGQUNFX1BPTExfVFJJRVMgIDEwMDAKKworI2RlZmluZSBNQVhfRklSTVdBUkVfUE9MTF9UUklFUwkJCTEwMAorCisjZGVmaW5lIEZJUk1XQVJFX1JFQURZCQkJCTB4ZmVkYworCitlbnVtIE1XSUZJRVhfODAyXzExX1BSSVZBQ1lfRklMVEVSIHsKKwlNV0lGSUVYXzgwMl8xMV9QUklWX0ZJTFRFUl9BQ0NFUFRfQUxMLAorCU1XSUZJRVhfODAyXzExX1BSSVZfRklMVEVSXzgwMjFYX1dFUAorfTsKKworZW51bSBNV0lGSUVYXzgwMl8xMV9XRVBfU1RBVFVTIHsKKwlNV0lGSUVYXzgwMl8xMV9XRVBfRU5BQkxFRCwKKwlNV0lGSUVYXzgwMl8xMV9XRVBfRElTQUJMRUQsCit9OworCisjZGVmaW5lIENBTF9TTlIoUlNTSSwgTkYpCQkoKHMxNikoKHMxNikoUlNTSSktKHMxNikoTkYpKSkKKworI2RlZmluZSBQUk9QUklFVEFSWV9UTFZfQkFTRV9JRCAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFRMVl9UWVBFX0tFWV9NQVRFUklBTCAgICAgICAoUFJPUFJJRVRBUllfVExWX0JBU0VfSUQgKyAwKQorI2RlZmluZSBUTFZfVFlQRV9DSEFOTElTVCAgICAgICAgICAgKFBST1BSSUVUQVJZX1RMVl9CQVNFX0lEICsgMSkKKyNkZWZpbmUgVExWX1RZUEVfTlVNUFJPQkVTICAgICAgICAgIChQUk9QUklFVEFSWV9UTFZfQkFTRV9JRCArIDIpCisjZGVmaW5lIFRMVl9UWVBFX1BBU1NUSFJPVUdIICAgICAgICAoUFJPUFJJRVRBUllfVExWX0JBU0VfSUQgKyAxMCkKKyNkZWZpbmUgVExWX1RZUEVfV01NUVNUQVRVUyAgICAgICAgIChQUk9QUklFVEFSWV9UTFZfQkFTRV9JRCArIDE2KQorI2RlZmluZSBUTFZfVFlQRV9XSUxEQ0FSRFNTSUQgICAgICAgKFBST1BSSUVUQVJZX1RMVl9CQVNFX0lEICsgMTgpCisjZGVmaW5lIFRMVl9UWVBFX1RTRlRJTUVTVEFNUCAgICAgICAoUFJPUFJJRVRBUllfVExWX0JBU0VfSUQgKyAxOSkKKyNkZWZpbmUgVExWX1RZUEVfQVVUSF9UWVBFICAgICAgICAgIChQUk9QUklFVEFSWV9UTFZfQkFTRV9JRCArIDMxKQorI2RlZmluZSBUTFZfVFlQRV9DSEFOTkVMQkFORExJU1QgICAgKFBST1BSSUVUQVJZX1RMVl9CQVNFX0lEICsgNDIpCisjZGVmaW5lIFRMVl9UWVBFX1JBVEVfRFJPUF9DT05UUk9MICAoUFJPUFJJRVRBUllfVExWX0JBU0VfSUQgKyA4MikKKyNkZWZpbmUgVExWX1RZUEVfUkFURV9TQ09QRSAgICAgICAgIChQUk9QUklFVEFSWV9UTFZfQkFTRV9JRCArIDgzKQorI2RlZmluZSBUTFZfVFlQRV9QT1dFUl9HUk9VUCAgICAgICAgKFBST1BSSUVUQVJZX1RMVl9CQVNFX0lEICsgODQpCisjZGVmaW5lIFRMVl9UWVBFX1dBUElfSUUgICAgICAgICAgICAoUFJPUFJJRVRBUllfVExWX0JBU0VfSUQgKyA5NCkKKyNkZWZpbmUgVExWX1RZUEVfQVVUT19EU19QQVJBTSAgICAgIChQUk9QUklFVEFSWV9UTFZfQkFTRV9JRCArIDExMykKKyNkZWZpbmUgVExWX1RZUEVfUFNfUEFSQU0gICAgICAgICAgIChQUk9QUklFVEFSWV9UTFZfQkFTRV9JRCArIDExNCkKKworI2RlZmluZSBNV0lGSUVYX1RYX0RBVEFfQlVGX1NJWkVfMksgICAgICAgIDIwNDgKKworI2RlZmluZSBTU05fTUFTSyAgICAgICAgIDB4ZmZmMAorCisjZGVmaW5lIEJBX1JFU1VMVF9TVUNDRVNTICAgICAgICAweDAKKyNkZWZpbmUgQkFfUkVTVUxUX1RJTUVPVVQgICAgICAgIDB4MgorCisjZGVmaW5lIElTX0JBU1RSRUFNX1NFVFVQKHB0cikgIChwdHItPmJhX3N0YXR1cykKKworI2RlZmluZSBCQV9TVFJFQU1fTk9UX0FMTE9XRUQgICAweGZmCisKKyNkZWZpbmUgSVNfMTFOX0VOQUJMRUQocHJpdikgKChwcml2LT5hZGFwdGVyLT5jb25maWdfYmFuZHMgJiBCQU5EX0dOIHx8IFwKKwkJCXByaXYtPmFkYXB0ZXItPmNvbmZpZ19iYW5kcyAmIEJBTkRfQU4pIFwKKwkJCSYmIHByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5iY25faHRfY2FwKQorI2RlZmluZSBJTklUSUFUT1JfQklUKERlbEJBUGFyYW1TZXQpICgoKERlbEJBUGFyYW1TZXQpICZcCisJCQlCSVQoREVMQkFfSU5JVElBVE9SX1BPUykpID4+IERFTEJBX0lOSVRJQVRPUl9QT1MpCisKKyNkZWZpbmUgTVdJRklFWF9UWF9EQVRBX0JVRl9TSVpFXzRLICAgICAgICA0MDk2CisjZGVmaW5lIE1XSUZJRVhfVFhfREFUQV9CVUZfU0laRV84SyAgICAgICAgODE5MgorCisjZGVmaW5lIElTU1VQUF8xMU5FTkFCTEVEKEZ3Q2FwSW5mbykgKEZ3Q2FwSW5mbyAmIEJJVCgxMSkpCisKKy8qIGRldl9jYXAgYml0bWFwCisgKiBCSVQKKyAqIDAtMTYJCXJlc2VydmVkCisgKiAxNwkJSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDAKKyAqIDE4LTIyCXJlc2VydmVkCisgKiAyMwkJSUVFRTgwMjExX0hUX0NBUF9TR0lfMjAKKyAqIDI0CQlJRUVFODAyMTFfSFRfQ0FQX1NHSV80MAorICogMjUJCUlFRUU4MDIxMV9IVF9DQVBfVFhfU1RCQworICogMjYJCUlFRUU4MDIxMV9IVF9DQVBfUlhfU1RCQworICogMjctMjgJcmVzZXJ2ZWQKKyAqIDI5CQlJRUVFODAyMTFfSFRfQ0FQX0dSTl9GTEQKKyAqIDMwLTMxCXJlc2VydmVkCisgKi8KKyNkZWZpbmUgSVNTVVBQX0NIQU5XSURUSDQwKERvdDExbkRldkNhcCkgKERvdDExbkRldkNhcCAmIEJJVCgxNykpCisjZGVmaW5lIElTU1VQUF9TSE9SVEdJMjAoRG90MTFuRGV2Q2FwKSAoRG90MTFuRGV2Q2FwICYgQklUKDIzKSkKKyNkZWZpbmUgSVNTVVBQX1NIT1JUR0k0MChEb3QxMW5EZXZDYXApIChEb3QxMW5EZXZDYXAgJiBCSVQoMjQpKQorI2RlZmluZSBJU1NVUFBfVFhTVEJDKERvdDExbkRldkNhcCkgKERvdDExbkRldkNhcCAmIEJJVCgyNSkpCisjZGVmaW5lIElTU1VQUF9SWFNUQkMoRG90MTFuRGV2Q2FwKSAoRG90MTFuRGV2Q2FwICYgQklUKDI2KSkKKyNkZWZpbmUgSVNTVVBQX0dSRUVORklFTEQoRG90MTFuRGV2Q2FwKSAoRG90MTFuRGV2Q2FwICYgQklUKDI5KSkKKworI2RlZmluZSBHRVRfUlhNQ1NTVVBQKERldk1DU1N1cHBvcnRlZCkgKERldk1DU1N1cHBvcnRlZCAmIDB4MGYpCisjZGVmaW5lIFNFVEhUX01DUzMyKHgpICh4WzRdIHw9IDEpCisKKyNkZWZpbmUgU0VUX1NFQ09OREFSWUNIQU4oUmFkaW9UeXBlLCBTRUNDSEFOKSAoUmFkaW9UeXBlIHw9IChTRUNDSEFOIDw8IDQpKQorCisjZGVmaW5lIExMQ19TTkFQX0xFTiAgICA4CisKKyNkZWZpbmUgTU9EX0NMQVNTX0hSX0RTU1MgICAgICAgMHgwMworI2RlZmluZSBNT0RfQ0xBU1NfT0ZETSAgICAgICAgICAweDA3CisjZGVmaW5lIE1PRF9DTEFTU19IVCAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgSFRfQldfMjAgICAgMAorI2RlZmluZSBIVF9CV180MCAgICAxCisKKyNkZWZpbmUgSG9zdENtZF9DTURfR0VUX0hXX1NQRUMgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMworI2RlZmluZSBIb3N0Q21kX0NNRF84MDJfMTFfU0NBTiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA2CisjZGVmaW5lIEhvc3RDbWRfQ01EXzgwMl8xMV9HRVRfTE9HICAgICAgICAgICAgICAgICAgICAweDAwMGIKKyNkZWZpbmUgSG9zdENtZF9DTURfTUFDX01VTFRJQ0FTVF9BRFIgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBIb3N0Q21kX0NNRF84MDJfMTFfRUVQUk9NX0FDQ0VTUyAgICAgICAgICAgICAgMHgwMDU5CisjZGVmaW5lIEhvc3RDbWRfQ01EXzgwMl8xMV9BU1NPQ0lBVEUgICAgICAgICAgICAgICAgICAweDAwMTIKKyNkZWZpbmUgSG9zdENtZF9DTURfODAyXzExX1NOTVBfTUlCICAgICAgICAgICAgICAgICAgIDB4MDAxNgorI2RlZmluZSBIb3N0Q21kX0NNRF9NQUNfUkVHX0FDQ0VTUyAgICAgICAgICAgICAgICAgICAgMHgwMDE5CisjZGVmaW5lIEhvc3RDbWRfQ01EX0JCUF9SRUdfQUNDRVNTICAgICAgICAgICAgICAgICAgICAweDAwMWEKKyNkZWZpbmUgSG9zdENtZF9DTURfUkZfUkVHX0FDQ0VTUyAgICAgICAgICAgICAgICAgICAgIDB4MDAxYgorI2RlZmluZSBIb3N0Q21kX0NNRF9QTUlDX1JFR19BQ0NFU1MgICAgICAgICAgICAgICAgICAgMHgwMGFkCisjZGVmaW5lIEhvc3RDbWRfQ01EXzgwMl8xMV9SRl9DSEFOTkVMICAgICAgICAgICAgICAgICAweDAwMWQKKyNkZWZpbmUgSG9zdENtZF9DTURfODAyXzExX0RFQVVUSEVOVElDQVRFICAgICAgICAgICAgIDB4MDAyNAorI2RlZmluZSBIb3N0Q21kX0NNRF9NQUNfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDI4CisjZGVmaW5lIEhvc3RDbWRfQ01EXzgwMl8xMV9BRF9IT0NfU1RBUlQgICAgICAgICAgICAgICAweDAwMmIKKyNkZWZpbmUgSG9zdENtZF9DTURfODAyXzExX0FEX0hPQ19KT0lOICAgICAgICAgICAgICAgIDB4MDAyYworI2RlZmluZSBIb3N0Q21kX0NNRF84MDJfMTFfQURfSE9DX1NUT1AgICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIEhvc3RDbWRfQ01EXzgwMl8xMV9NQUNfQUREUkVTUyAgICAgICAgICAgICAgICAweDAwNEQKKyNkZWZpbmUgSG9zdENtZF9DTURfODAyXzExRF9ET01BSU5fSU5GTyAgICAgICAgICAgICAgIDB4MDA1YgorI2RlZmluZSBIb3N0Q21kX0NNRF84MDJfMTFfS0VZX01BVEVSSUFMICAgICAgICAgICAgICAgMHgwMDVlCisjZGVmaW5lIEhvc3RDbWRfQ01EXzgwMl8xMV9CR19TQ0FOX1FVRVJZICAgICAgICAgICAgICAweDAwNmMKKyNkZWZpbmUgSG9zdENtZF9DTURfV01NX0dFVF9TVEFUVVMgICAgICAgICAgICAgICAgICAgIDB4MDA3MQorI2RlZmluZSBIb3N0Q21kX0NNRF84MDJfMTFfVFhfUkFURV9RVUVSWSAgICAgICAgICAgICAgMHgwMDdmCisjZGVmaW5lIEhvc3RDbWRfQ01EXzgwMl8xMV9JQlNTX0NPQUxFU0NJTkdfU1RBVFVTICAgICAweDAwODMKKyNkZWZpbmUgSG9zdENtZF9DTURfVkVSU0lPTl9FWFQgICAgICAgICAgICAgICAgICAgICAgIDB4MDA5NworI2RlZmluZSBIb3N0Q21kX0NNRF9SU1NJX0lORk8gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGE0CisjZGVmaW5lIEhvc3RDbWRfQ01EX0ZVTkNfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwYTkKKyNkZWZpbmUgSG9zdENtZF9DTURfRlVOQ19TSFVURE9XTiAgICAgICAgICAgICAgICAgICAgIDB4MDBhYQorI2RlZmluZSBIb3N0Q21kX0NNRF8xMU5fQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGNkCisjZGVmaW5lIEhvc3RDbWRfQ01EXzExTl9BRERCQV9SRVEgICAgICAgICAgICAgICAgICAgICAweDAwY2UKKyNkZWZpbmUgSG9zdENtZF9DTURfMTFOX0FEREJBX1JTUCAgICAgICAgICAgICAgICAgICAgIDB4MDBjZgorI2RlZmluZSBIb3N0Q21kX0NNRF8xMU5fREVMQkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGQwCisjZGVmaW5lIEhvc3RDbWRfQ01EX1JFQ09ORklHVVJFX1RYX0JVRkYgICAgICAgICAgICAgICAweDAwZDkKKyNkZWZpbmUgSG9zdENtZF9DTURfQU1TRFVfQUdHUl9DVFJMICAgICAgICAgICAgICAgICAgIDB4MDBkZgorI2RlZmluZSBIb3N0Q21kX0NNRF9UWFBXUl9DRkcgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGQxCisjZGVmaW5lIEhvc3RDbWRfQ01EX1RYX1JBVEVfQ0ZHICAgICAgICAgICAgICAgICAgICAgICAweDAwZDYKKyNkZWZpbmUgSG9zdENtZF9DTURfODAyXzExX1BTX01PREVfRU5IICAgICAgICAgICAgICAgIDB4MDBlNAorI2RlZmluZSBIb3N0Q21kX0NNRF84MDJfMTFfSFNfQ0ZHX0VOSCAgICAgICAgICAgICAgICAgMHgwMGU1CisjZGVmaW5lIEhvc3RDbWRfQ01EX0NBVV9SRUdfQUNDRVNTICAgICAgICAgICAgICAgICAgICAweDAwZWQKKyNkZWZpbmUgSG9zdENtZF9DTURfU0VUX0JTU19NT0RFICAgICAgICAgICAgICAgICAgICAgIDB4MDBmNworCisKK2VudW0gRU5IX1BTX01PREVTIHsKKwlFTl9QUyA9IDEsCisJRElTX1BTID0gMiwKKwlFTl9BVVRPX0RTID0gMywKKwlESVNfQVVUT19EUyA9IDQsCisJU0xFRVBfQ09ORklSTSA9IDUsCisJR0VUX1BTID0gMCwKKwlFTl9BVVRPX1BTID0gMHhmZiwKKwlESVNfQVVUT19QUyA9IDB4ZmUsCit9OworCisjZGVmaW5lIEhvc3RDbWRfUkVUX0JJVCAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwCisjZGVmaW5lIEhvc3RDbWRfQUNUX0dFTl9HRVQgICAgICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIEhvc3RDbWRfQUNUX0dFTl9TRVQgICAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIEhvc3RDbWRfUkVTVUxUX09LICAgICAgICAgICAgICAgICAgICAgMHgwMDAwCisKKyNkZWZpbmUgSG9zdENtZF9BQ1RfTUFDX1JYX09OICAgICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgSG9zdENtZF9BQ1RfTUFDX1RYX09OICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgSG9zdENtZF9BQ1RfTUFDX1dFUF9FTkFCTEUgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgSG9zdENtZF9BQ1RfTUFDX0VUSEVSTkVUSUlfRU5BQkxFICAgICAweDAwMTAKKyNkZWZpbmUgSG9zdENtZF9BQ1RfTUFDX1BST01JU0NVT1VTX0VOQUJMRSAgICAweDAwODAKKyNkZWZpbmUgSG9zdENtZF9BQ1RfTUFDX0FMTF9NVUxUSUNBU1RfRU5BQkxFICAweDAxMDAKKyNkZWZpbmUgSG9zdENtZF9BQ1RfTUFDX0FESE9DX0dfUFJPVEVDVElPTl9PTiAgICAgMHgyMDAwCisKKyNkZWZpbmUgSG9zdENtZF9CU1NfTU9ERV9JQlNTICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIEhvc3RDbWRfQlNTX01PREVfQU5ZICAgICAgICAgICAgICAgIDB4MDAwMworCisjZGVmaW5lIEhvc3RDbWRfU0NBTl9SQURJT19UWVBFX0JHICAgICAgICAgIDAKKyNkZWZpbmUgSG9zdENtZF9TQ0FOX1JBRElPX1RZUEVfQSAgICAgICAgICAgMQorCisjZGVmaW5lIEhPU1RfU0xFRVBfQ0ZHX0NBTkNFTAkJMHhmZmZmZmZmZgorI2RlZmluZSBIT1NUX1NMRUVQX0NGR19DT05EX0RFRgkJMHgwMDAwMDAwZgorI2RlZmluZSBIT1NUX1NMRUVQX0NGR19HUElPX0RFRgkJMHhmZgorI2RlZmluZSBIT1NUX1NMRUVQX0NGR19HQVBfREVGCQkwCisKKyNkZWZpbmUgQ01EX0ZfSE9TVENNRCAgICAgICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgQ01EX0ZfQ0FOQ0VMRUQgICAgICAgICAgKDEgPDwgMSkKKworI2RlZmluZSBIb3N0Q21kX0NNRF9JRF9NQVNLICAgICAgICAgICAgIDB4MGZmZgorCisjZGVmaW5lIEhvc3RDbWRfU0VRX05VTV9NQVNLICAgICAgICAgICAgMHgwMGZmCisKKyNkZWZpbmUgSG9zdENtZF9CU1NfTlVNX01BU0sgICAgICAgICAgICAweDBmMDAKKworI2RlZmluZSBIb3N0Q21kX0JTU19UWVBFX01BU0sgICAgICAgICAgIDB4ZjAwMAorCisjZGVmaW5lIEhvc3RDbWRfU0VUX1NFUV9OT19CU1NfSU5GTyhzZXEsIG51bSwgdHlwZSkgeyAgIFwKKwkoKChzZXEpICYgMHgwMGZmKSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICgoKG51bSkgJiAweDAwMGYpIDw8IDgpKSB8ICAgICAgICAgICAgICAgICAgICAgXAorCSgoKHR5cGUpICYgMHgwMDBmKSA8PCAxMik7ICAgICAgICAgICAgICAgICAgfQorCisjZGVmaW5lIEhvc3RDbWRfR0VUX1NFUV9OTyhzZXEpICAgICAgIFwKKwkoKHNlcSkgJiBIb3N0Q21kX1NFUV9OVU1fTUFTSykKKworI2RlZmluZSBIb3N0Q21kX0dFVF9CU1NfTk8oc2VxKSAgICAgICAgIFwKKwkoKChzZXEpICYgSG9zdENtZF9CU1NfTlVNX01BU0spID4+IDgpCisKKyNkZWZpbmUgSG9zdENtZF9HRVRfQlNTX1RZUEUoc2VxKSAgICAgICBcCisJKCgoc2VxKSAmIEhvc3RDbWRfQlNTX1RZUEVfTUFTSykgPj4gMTIpCisKKyNkZWZpbmUgRVZFTlRfRFVNTVlfSE9TVF9XQUtFVVBfU0lHTkFMICAweDAwMDAwMDAxCisjZGVmaW5lIEVWRU5UX0xJTktfTE9TVCAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBFVkVOVF9MSU5LX1NFTlNFRCAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRVZFTlRfTUlCX0NIQU5HRUQgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIEVWRU5UX0lOSVRfRE9ORSAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSBFVkVOVF9ERUFVVEhFTlRJQ0FURUQgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgRVZFTlRfRElTQVNTT0NJQVRFRCAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIEVWRU5UX1BTX0FXQUtFICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwYQorI2RlZmluZSBFVkVOVF9QU19TTEVFUCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGIKKyNkZWZpbmUgRVZFTlRfTUlDX0VSUl9NVUxUSUNBU1QgICAgICAgICAweDAwMDAwMDBkCisjZGVmaW5lIEVWRU5UX01JQ19FUlJfVU5JQ0FTVCAgICAgICAgICAgMHgwMDAwMDAwZQorI2RlZmluZSBFVkVOVF9ERUVQX1NMRUVQX0FXQUtFICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgRVZFTlRfQURIT0NfQkNOX0xPU1QgICAgICAgICAgICAweDAwMDAwMDExCisKKyNkZWZpbmUgRVZFTlRfV01NX1NUQVRVU19DSEFOR0UgICAgICAgICAweDAwMDAwMDE3CisjZGVmaW5lIEVWRU5UX0JHX1NDQU5fUkVQT1JUICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBFVkVOVF9SU1NJX0xPVyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgRVZFTlRfU05SX0xPVyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFhCisjZGVmaW5lIEVWRU5UX01BWF9GQUlMICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxYgorI2RlZmluZSBFVkVOVF9SU1NJX0hJR0ggICAgICAgICAgICAgICAgIDB4MDAwMDAwMWMKKyNkZWZpbmUgRVZFTlRfU05SX0hJR0ggICAgICAgICAgICAgICAgICAweDAwMDAwMDFkCisjZGVmaW5lIEVWRU5UX0lCU1NfQ09BTEVTQ0VEICAgICAgICAgICAgMHgwMDAwMDAxZQorI2RlZmluZSBFVkVOVF9EQVRBX1JTU0lfTE9XICAgICAgICAgICAgIDB4MDAwMDAwMjQKKyNkZWZpbmUgRVZFTlRfREFUQV9TTlJfTE9XICAgICAgICAgICAgICAweDAwMDAwMDI1CisjZGVmaW5lIEVWRU5UX0RBVEFfUlNTSV9ISUdIICAgICAgICAgICAgMHgwMDAwMDAyNgorI2RlZmluZSBFVkVOVF9EQVRBX1NOUl9ISUdIICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgRVZFTlRfTElOS19RVUFMSVRZICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lIEVWRU5UX1BPUlRfUkVMRUFTRSAgICAgICAgICAgICAgMHgwMDAwMDAyYgorI2RlZmluZSBFVkVOVF9QUkVfQkVBQ09OX0xPU1QgICAgICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgRVZFTlRfQUREQkEgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCisjZGVmaW5lIEVWRU5UX0RFTEJBICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAorI2RlZmluZSBFVkVOVF9CQV9TVFJFQU1fVElFTU9VVCAgICAgICAgIDB4MDAwMDAwMzcKKyNkZWZpbmUgRVZFTlRfQU1TRFVfQUdHUl9DVFJMICAgICAgICAgICAweDAwMDAwMDQyCisjZGVmaW5lIEVWRU5UX1dFUF9JQ1ZfRVJSICAgICAgICAgICAgICAgMHgwMDAwMDA0NgorI2RlZmluZSBFVkVOVF9IU19BQ1RfUkVRICAgICAgICAgICAgICAgIDB4MDAwMDAwNDcKKyNkZWZpbmUgRVZFTlRfQldfQ0hBTkdFICAgICAgICAgICAgICAgICAweDAwMDAwMDQ4CisKKyNkZWZpbmUgRVZFTlRfSE9TVFdBS0VfU1RBSUUJCTB4MDAwMDAwNGQKKworI2RlZmluZSBFVkVOVF9JRF9NQVNLICAgICAgICAgICAgICAgICAgIDB4ZmZmZgorI2RlZmluZSBCU1NfTlVNX01BU0sgICAgICAgICAgICAgICAgICAgIDB4ZgorCisjZGVmaW5lIEVWRU5UX0dFVF9CU1NfTlVNKGV2ZW50X2NhdXNlKSAgICAgICAgICBcCisJKCgoZXZlbnRfY2F1c2UpID4+IDE2KSAmIEJTU19OVU1fTUFTSykKKworI2RlZmluZSBFVkVOVF9HRVRfQlNTX1RZUEUoZXZlbnRfY2F1c2UpICAgICAgICAgXAorCSgoKGV2ZW50X2NhdXNlKSA+PiAyNCkgJiAweDAwZmYpCisKK3N0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciB7CisJX19sZTE2IHR5cGU7CisJX19sZTE2IGxlbjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2RhdGEgeworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciBoZWFkZXI7CisJdTggZGF0YVsxXTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgTVdJRklFWF9UeFBEX1BPV0VSX01HTVRfTlVMTF9QQUNLRVQgMHgwMQorI2RlZmluZSBNV0lGSUVYX1R4UERfUE9XRVJfTUdNVF9MQVNUX1BBQ0tFVCAweDA4CisKK3N0cnVjdCB0eHBkIHsKKwl1OCBic3NfdHlwZTsKKwl1OCBic3NfbnVtOworCV9fbGUxNiB0eF9wa3RfbGVuZ3RoOworCV9fbGUxNiB0eF9wa3Rfb2Zmc2V0OworCV9fbGUxNiB0eF9wa3RfdHlwZTsKKwlfX2xlMzIgdHhfY29udHJvbDsKKwl1OCBwcmlvcml0eTsKKwl1OCBmbGFnczsKKwl1OCBwa3RfZGVsYXlfMm1zOworCXU4IHJlc2VydmVkMTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCByeHBkIHsKKwl1OCBic3NfdHlwZTsKKwl1OCBic3NfbnVtOworCXUxNiByeF9wa3RfbGVuZ3RoOworCXUxNiByeF9wa3Rfb2Zmc2V0OworCXUxNiByeF9wa3RfdHlwZTsKKwl1MTYgc2VxX251bTsKKwl1OCBwcmlvcml0eTsKKwl1OCByeF9yYXRlOworCXM4IHNucjsKKwlzOCBuZjsKKwkvKiBIdCBJbmZvIFtCaXQgMF0gUnhSYXRlIGZvcm1hdDogTEc9MCwgSFQ9MQorCSAqIFtCaXQgMV0gIEhUIEJhbmR3aWR0aDogQlcyMCA9IDAsIEJXNDAgPSAxCisJICogW0JpdCAyXSAgSFQgR3VhcmQgSW50ZXJ2YWw6IExHSSA9IDAsIFNHSSA9IDEgKi8KKwl1OCBodF9pbmZvOworCXU4IHJlc2VydmVkOworfSBfX3BhY2tlZDsKKworZW51bSBtd2lmaWV4X2NoYW5fc2Nhbl9tb2RlX2JpdG1hc2tzIHsKKwlNV0lGSUVYX1BBU1NJVkVfU0NBTiA9IEJJVCgwKSwKKwlNV0lGSUVYX0RJU0FCTEVfQ0hBTl9GSUxUID0gQklUKDEpLAorfTsKKworI2RlZmluZSBTRUNPTkRfQ0hBTk5FTF9CRUxPVyAgICAweDMwCisjZGVmaW5lIFNFQ09ORF9DSEFOTkVMX0FCT1ZFICAgIDB4MTAKK3N0cnVjdCBtd2lmaWV4X2NoYW5fc2Nhbl9wYXJhbV9zZXQgeworCXU4IHJhZGlvX3R5cGU7CisJdTggY2hhbl9udW1iZXI7CisJdTggY2hhbl9zY2FuX21vZGVfYml0bWFwOworCV9fbGUxNiBtaW5fc2Nhbl90aW1lOworCV9fbGUxNiBtYXhfc2Nhbl90aW1lOworfSBfX3BhY2tlZDsKKworc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfY2hhbl9saXN0X3BhcmFtX3NldCB7CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyIGhlYWRlcjsKKwlzdHJ1Y3QgbXdpZmlleF9jaGFuX3NjYW5fcGFyYW1fc2V0IGNoYW5fc2Nhbl9wYXJhbVsxXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBjaGFuX2JhbmRfcGFyYW1fc2V0IHsKKwl1OCByYWRpb190eXBlOworCXU4IGNoYW5fbnVtYmVyOworfTsKKworc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfY2hhbl9iYW5kX2xpc3RfcGFyYW1fc2V0IHsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIgaGVhZGVyOworCXN0cnVjdCBjaGFuX2JhbmRfcGFyYW1fc2V0IGNoYW5fYmFuZF9wYXJhbVsxXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3JhdGVzX3BhcmFtX3NldCB7CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyIGhlYWRlcjsKKwl1OCByYXRlc1sxXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3NzaWRfcGFyYW1fc2V0IHsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIgaGVhZGVyOworCXU4IHNzaWRbMV07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19udW1fcHJvYmVzIHsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIgaGVhZGVyOworCV9fbGUxNiBudW1fcHJvYmVzOworfSBfX3BhY2tlZDsKKworc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfd2lsZGNhcmRfc3NpZF9wYXJhbXMgeworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciBoZWFkZXI7CisJdTggbWF4X3NzaWRfbGVuZ3RoOworCXU4IHNzaWRbMV07Cit9IF9fcGFja2VkOworCisjZGVmaW5lIFRTRl9EQVRBX1NJWkUgICAgICAgICAgICA4CitzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc190c2ZfdGltZXN0YW1wIHsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIgaGVhZGVyOworCXU4IHRzZl9kYXRhWzFdOworfSBfX3BhY2tlZDsKKworc3RydWN0IG13aWZpZXhfY2ZfcGFyYW1fc2V0IHsKKwl1OCBjZnBfY250OworCXU4IGNmcF9wZXJpb2Q7CisJdTE2IGNmcF9tYXhfZHVyYXRpb247CisJdTE2IGNmcF9kdXJhdGlvbl9yZW1haW5pbmc7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbXdpZmlleF9pYnNzX3BhcmFtX3NldCB7CisJdTE2IGF0aW1fd2luZG93OworfSBfX3BhY2tlZDsKKworc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfc3NfcGFyYW1fc2V0IHsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIgaGVhZGVyOworCXVuaW9uIHsKKwkJc3RydWN0IG13aWZpZXhfY2ZfcGFyYW1fc2V0IGNmX3BhcmFtX3NldFsxXTsKKwkJc3RydWN0IG13aWZpZXhfaWJzc19wYXJhbV9zZXQgaWJzc19wYXJhbV9zZXRbMV07CisJfSBjZl9pYnNzOworfSBfX3BhY2tlZDsKKworc3RydWN0IG13aWZpZXhfZmhfcGFyYW1fc2V0IHsKKwl1MTYgZHdlbGxfdGltZTsKKwl1OCBob3Bfc2V0OworCXU4IGhvcF9wYXR0ZXJuOworCXU4IGhvcF9pbmRleDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtd2lmaWV4X2RzX3BhcmFtX3NldCB7CisJdTggY3VycmVudF9jaGFuOworfSBfX3BhY2tlZDsKKworc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfcGh5X3BhcmFtX3NldCB7CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyIGhlYWRlcjsKKwl1bmlvbiB7CisJCXN0cnVjdCBtd2lmaWV4X2ZoX3BhcmFtX3NldCBmaF9wYXJhbV9zZXRbMV07CisJCXN0cnVjdCBtd2lmaWV4X2RzX3BhcmFtX3NldCBkc19wYXJhbV9zZXRbMV07CisJfSBmaF9kczsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2F1dGhfdHlwZSB7CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyIGhlYWRlcjsKKwlfX2xlMTYgYXV0aF90eXBlOworfSBfX3BhY2tlZDsKKworc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfdmVuZG9yX3BhcmFtX3NldCB7CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyIGhlYWRlcjsKKwl1OCBpZVtNV0lGSUVYX01BWF9WU0lFX0xFTl07Cit9OworCitzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19yc25fcGFyYW1fc2V0IHsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIgaGVhZGVyOworCXU4IHJzbl9pZVsxXTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgS0VZUEFSQU1TRVRfRklYRURfTEVOIDYKKworc3RydWN0IG13aWZpZXhfaWVfdHlwZV9rZXlfcGFyYW1fc2V0IHsKKwlfX2xlMTYgdHlwZTsKKwlfX2xlMTYgbGVuZ3RoOworCV9fbGUxNiBrZXlfdHlwZV9pZDsKKwlfX2xlMTYga2V5X2luZm87CisJX19sZTE2IGtleV9sZW47CisJdTgga2V5WzUwXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfa2V5X21hdGVyaWFsIHsKKwlfX2xlMTYgYWN0aW9uOworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVfa2V5X3BhcmFtX3NldCBrZXlfcGFyYW1fc2V0OworfSBfX3BhY2tlZDsKKworc3RydWN0IGhvc3RfY21kX2RzX2dlbiB7CisJdTE2IGNvbW1hbmQ7CisJdTE2IHNpemU7CisJdTE2IHNlcV9udW07CisJdTE2IHJlc3VsdDsKK307CisKKyNkZWZpbmUgU19EU19HRU4gICAgICAgIHNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZHNfZ2VuKQorCitlbnVtIHNsZWVwX3Jlc3BfY3RybCB7CisJUkVTUF9OT1RfTkVFREVEID0gMCwKKwlSRVNQX05FRURFRCwKK307CisKK3N0cnVjdCBtd2lmaWV4X3BzX3BhcmFtIHsKKwlfX2xlMTYgbnVsbF9wa3RfaW50ZXJ2YWw7CisJX19sZTE2IG11bHRpcGxlX2R0aW1zOworCV9fbGUxNiBiY25fbWlzc190aW1lb3V0OworCV9fbGUxNiBsb2NhbF9saXN0ZW5faW50ZXJ2YWw7CisJX19sZTE2IGFkaG9jX3dha2VfcGVyaW9kOworCV9fbGUxNiBtb2RlOworCV9fbGUxNiBkZWxheV90b19wczsKK307CisKKyNkZWZpbmUgQklUTUFQX0FVVE9fRFMgICAgICAgICAweDAxCisjZGVmaW5lIEJJVE1BUF9TVEFfUFMgICAgICAgICAgMHgxMAorCitzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19hdXRvX2RzX3BhcmFtIHsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIgaGVhZGVyOworCV9fbGUxNiBkZWVwX3NsZWVwX3RpbWVvdXQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19wc19wYXJhbSB7CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyIGhlYWRlcjsKKwlzdHJ1Y3QgbXdpZmlleF9wc19wYXJhbSBwYXJhbTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfcHNfbW9kZV9lbmggeworCV9fbGUxNiBhY3Rpb247CisKKwl1bmlvbiB7CisJCXN0cnVjdCBtd2lmaWV4X3BzX3BhcmFtIG9wdF9wczsKKwkJX19sZTE2IHBzX2JpdG1hcDsKKwl9IHBhcmFtczsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBob3N0X2NtZF9kc19nZXRfaHdfc3BlYyB7CisJX19sZTE2IGh3X2lmX3ZlcnNpb247CisJX19sZTE2IHZlcnNpb247CisJX19sZTE2IHJlc2VydmVkOworCV9fbGUxNiBudW1fb2ZfbWNhc3RfYWRyOworCXU4IHBlcm1hbmVudF9hZGRyW0VUSF9BTEVOXTsKKwlfX2xlMTYgcmVnaW9uX2NvZGU7CisJX19sZTE2IG51bWJlcl9vZl9hbnRlbm5hOworCV9fbGUzMiBmd19yZWxlYXNlX251bWJlcjsKKwlfX2xlMzIgcmVzZXJ2ZWRfMTsKKwlfX2xlMzIgcmVzZXJ2ZWRfMjsKKwlfX2xlMzIgcmVzZXJ2ZWRfMzsKKwlfX2xlMzIgZndfY2FwX2luZm87CisJX19sZTMyIGRvdF8xMW5fZGV2X2NhcDsKKwl1OCBkZXZfbWNzX3N1cHBvcnQ7CisJX19sZTE2IG1wX2VuZF9wb3J0OwkvKiBTRElPIG9ubHksIHJlc2VydmVkIGZvciBvdGhlciBpbnRlcmZhY2NlcyAqLworCV9fbGUxNiByZXNlcnZlZF80OworfSBfX3BhY2tlZDsKKworc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9yc3NpX2luZm8geworCV9fbGUxNiBhY3Rpb247CisJX19sZTE2IG5kYXRhOworCV9fbGUxNiBuYmNuOworCV9fbGUxNiByZXNlcnZlZFs5XTsKKwlsb25nIGxvbmcgcmVzZXJ2ZWRfMTsKK307CisKK3N0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfcnNzaV9pbmZvX3JzcCB7CisJX19sZTE2IGFjdGlvbjsKKwlfX2xlMTYgbmRhdGE7CisJX19sZTE2IG5iY247CisJX19sZTE2IGRhdGFfcnNzaV9sYXN0OworCV9fbGUxNiBkYXRhX25mX2xhc3Q7CisJX19sZTE2IGRhdGFfcnNzaV9hdmc7CisJX19sZTE2IGRhdGFfbmZfYXZnOworCV9fbGUxNiBiY25fcnNzaV9sYXN0OworCV9fbGUxNiBiY25fbmZfbGFzdDsKKwlfX2xlMTYgYmNuX3Jzc2lfYXZnOworCV9fbGUxNiBiY25fbmZfYXZnOworCWxvbmcgbG9uZyB0c2ZfYmNuOworfTsKKworc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9tYWNfYWRkcmVzcyB7CisJX19sZTE2IGFjdGlvbjsKKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07Cit9OworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfbWFjX2NvbnRyb2wgeworCV9fbGUxNiBhY3Rpb247CisJX19sZTE2IHJlc2VydmVkOworfTsKKworc3RydWN0IGhvc3RfY21kX2RzX21hY19tdWx0aWNhc3RfYWRyIHsKKwlfX2xlMTYgYWN0aW9uOworCV9fbGUxNiBudW1fb2ZfYWRyczsKKwl1OCBtYWNfbGlzdFtNV0lGSUVYX01BWF9NVUxUSUNBU1RfTElTVF9TSVpFXVtFVEhfQUxFTl07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2RlYXV0aGVudGljYXRlIHsKKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisJX19sZTE2IHJlYXNvbl9jb2RlOworfSBfX3BhY2tlZDsKKworc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9hc3NvY2lhdGUgeworCXU4IHBlZXJfc3RhX2FkZHJbRVRIX0FMRU5dOworCV9fbGUxNiBjYXBfaW5mb19iaXRtYXA7CisJX19sZTE2IGxpc3Rlbl9pbnRlcnZhbDsKKwlfX2xlMTYgYmVhY29uX3BlcmlvZDsKKwl1OCBkdGltX3BlcmlvZDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBpZWVlX3R5cGVzX2Fzc29jX3JzcCB7CisJX19sZTE2IGNhcF9pbmZvX2JpdG1hcDsKKwlfX2xlMTYgc3RhdHVzX2NvZGU7CisJX19sZTE2IGFfaWQ7CisJdTggaWVfYnVmZmVyWzFdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9hc3NvY2lhdGVfcnNwIHsKKwlzdHJ1Y3QgaWVlZV90eXBlc19hc3NvY19yc3AgYXNzb2NfcnNwOworfSBfX3BhY2tlZDsKKworc3RydWN0IGllZWVfdHlwZXNfY2ZfcGFyYW1fc2V0IHsKKwl1OCBlbGVtZW50X2lkOworCXU4IGxlbjsKKwl1OCBjZnBfY250OworCXU4IGNmcF9wZXJpb2Q7CisJdTE2IGNmcF9tYXhfZHVyYXRpb247CisJdTE2IGNmcF9kdXJhdGlvbl9yZW1haW5pbmc7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaWVlZV90eXBlc19pYnNzX3BhcmFtX3NldCB7CisJdTggZWxlbWVudF9pZDsKKwl1OCBsZW47CisJX19sZTE2IGF0aW1fd2luZG93OworfSBfX3BhY2tlZDsKKwordW5pb24gaWVlZV90eXBlc19zc19wYXJhbV9zZXQgeworCXN0cnVjdCBpZWVlX3R5cGVzX2NmX3BhcmFtX3NldCBjZl9wYXJhbV9zZXQ7CisJc3RydWN0IGllZWVfdHlwZXNfaWJzc19wYXJhbV9zZXQgaWJzc19wYXJhbV9zZXQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaWVlZV90eXBlc19maF9wYXJhbV9zZXQgeworCXU4IGVsZW1lbnRfaWQ7CisJdTggbGVuOworCV9fbGUxNiBkd2VsbF90aW1lOworCXU4IGhvcF9zZXQ7CisJdTggaG9wX3BhdHRlcm47CisJdTggaG9wX2luZGV4OworfSBfX3BhY2tlZDsKKworc3RydWN0IGllZWVfdHlwZXNfZHNfcGFyYW1fc2V0IHsKKwl1OCBlbGVtZW50X2lkOworCXU4IGxlbjsKKwl1OCBjdXJyZW50X2NoYW47Cit9IF9fcGFja2VkOworCit1bmlvbiBpZWVlX3R5cGVzX3BoeV9wYXJhbV9zZXQgeworCXN0cnVjdCBpZWVlX3R5cGVzX2ZoX3BhcmFtX3NldCBmaF9wYXJhbV9zZXQ7CisJc3RydWN0IGllZWVfdHlwZXNfZHNfcGFyYW1fc2V0IGRzX3BhcmFtX3NldDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfYWRfaG9jX3N0YXJ0IHsKKwl1OCBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOworCXU4IGJzc19tb2RlOworCV9fbGUxNiBiZWFjb25fcGVyaW9kOworCXU4IGR0aW1fcGVyaW9kOworCXVuaW9uIGllZWVfdHlwZXNfc3NfcGFyYW1fc2V0IHNzX3BhcmFtX3NldDsKKwl1bmlvbiBpZWVlX3R5cGVzX3BoeV9wYXJhbV9zZXQgcGh5X3BhcmFtX3NldDsKKwl1MTYgcmVzZXJ2ZWQxOworCV9fbGUxNiBjYXBfaW5mb19iaXRtYXA7CisJdTggRGF0YVJhdGVbSE9TVENNRF9TVVBQT1JURURfUkFURVNdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9hZF9ob2NfcmVzdWx0IHsKKwl1OCBwYWRbM107CisJdTggYnNzaWRbRVRIX0FMRU5dOworfSBfX3BhY2tlZDsKKworc3RydWN0IGFkaG9jX2Jzc19kZXNjIHsKKwl1OCBic3NpZFtFVEhfQUxFTl07CisJdTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKKwl1OCBic3NfbW9kZTsKKwlfX2xlMTYgYmVhY29uX3BlcmlvZDsKKwl1OCBkdGltX3BlcmlvZDsKKwl1OCB0aW1lX3N0YW1wWzhdOworCXU4IGxvY2FsX3RpbWVbOF07CisJdW5pb24gaWVlZV90eXBlc19waHlfcGFyYW1fc2V0IHBoeV9wYXJhbV9zZXQ7CisJdW5pb24gaWVlZV90eXBlc19zc19wYXJhbV9zZXQgc3NfcGFyYW1fc2V0OworCV9fbGUxNiBjYXBfaW5mb19iaXRtYXA7CisJdTggZGF0YV9yYXRlc1tIT1NUQ01EX1NVUFBPUlRFRF9SQVRFU107CisKKwkvKgorCSAqICBETyBOT1QgQUREIEFOWSBGSUVMRFMgVE8gVEhJUyBTVFJVQ1RVUkUuCisJICogIEl0IGlzIHVzZWQgaW4gdGhlIEFkaG9jIGpvaW4gY29tbWFuZCBhbmQgd2lsbCBjYXVzZSBhCisJICogIGJpbmFyeSBsYXlvdXQgbWlzbWF0Y2ggd2l0aCB0aGUgZmlybXdhcmUKKwkgKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfYWRfaG9jX2pvaW4geworCXN0cnVjdCBhZGhvY19ic3NfZGVzYyBic3NfZGVzY3JpcHRvcjsKKwl1MTYgcmVzZXJ2ZWQxOworCXUxNiByZXNlcnZlZDI7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2dldF9sb2cgeworCV9fbGUzMiBtY2FzdF90eF9mcmFtZTsKKwlfX2xlMzIgZmFpbGVkOworCV9fbGUzMiByZXRyeTsKKwlfX2xlMzIgbXVsdGlfcmV0cnk7CisJX19sZTMyIGZyYW1lX2R1cDsKKwlfX2xlMzIgcnRzX3N1Y2Nlc3M7CisJX19sZTMyIHJ0c19mYWlsdXJlOworCV9fbGUzMiBhY2tfZmFpbHVyZTsKKwlfX2xlMzIgcnhfZnJhZzsKKwlfX2xlMzIgbWNhc3RfcnhfZnJhbWU7CisJX19sZTMyIGZjc19lcnJvcjsKKwlfX2xlMzIgdHhfZnJhbWU7CisJX19sZTMyIHJlc2VydmVkOworCV9fbGUzMiB3ZXBfaWN2X2Vycl9jbnRbNF07Cit9OworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfdHhfcmF0ZV9xdWVyeSB7CisJdTggdHhfcmF0ZTsKKwkvKiBIdCBJbmZvIFtCaXQgMF0gUnhSYXRlIGZvcm1hdDogTEc9MCwgSFQ9MQorCSAqIFtCaXQgMV0gIEhUIEJhbmR3aWR0aDogQlcyMCA9IDAsIEJXNDAgPSAxCisJICogW0JpdCAyXSAgSFQgR3VhcmQgSW50ZXJ2YWw6IExHSSA9IDAsIFNHSSA9IDEgKi8KKwl1OCBodF9pbmZvOworfSBfX3BhY2tlZDsKKworZW51bSBIb3N0X1NsZWVwX0FjdGlvbiB7CisJSFNfQ09ORklHVVJFID0gMHgwMDAxLAorCUhTX0FDVElWQVRFICA9IDB4MDAwMiwKK307CisKK3N0cnVjdCBtd2lmaWV4X2hzX2NvbmZpZ19wYXJhbSB7CisJX19sZTMyIGNvbmRpdGlvbnM7CisJdTggZ3BpbzsKKwl1OCBnYXA7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaHNfYWN0aXZhdGVfcGFyYW0geworCXUxNiByZXNwX2N0cmw7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2hzX2NmZ19lbmggeworCV9fbGUxNiBhY3Rpb247CisKKwl1bmlvbiB7CisJCXN0cnVjdCBtd2lmaWV4X2hzX2NvbmZpZ19wYXJhbSBoc19jb25maWc7CisJCXN0cnVjdCBoc19hY3RpdmF0ZV9wYXJhbSBoc19hY3RpdmF0ZTsKKwl9IHBhcmFtczsKK30gX19wYWNrZWQ7CisKK2VudW0gU05NUF9NSUJfSU5ERVggeworCU9QX1JBVEVfU0VUX0kgPSAxLAorCURUSU1fUEVSSU9EX0kgPSAzLAorCVJUU19USFJFU0hfSSA9IDUsCisJU0hPUlRfUkVUUllfTElNX0kgPSA2LAorCUxPTkdfUkVUUllfTElNX0kgPSA3LAorCUZSQUdfVEhSRVNIX0kgPSA4LAorCURPVDExRF9JID0gOSwKK307CisKKyNkZWZpbmUgTUFYX1NOTVBfQlVGX1NJWkUgICAxMjgKKworc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9zbm1wX21pYiB7CisJX19sZTE2IHF1ZXJ5X3R5cGU7CisJX19sZTE2IG9pZDsKKwlfX2xlMTYgYnVmX3NpemU7CisJdTggdmFsdWVbMV07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbXdpZmlleF9yYXRlX3Njb3BlIHsKKwlfX2xlMTYgdHlwZTsKKwlfX2xlMTYgbGVuZ3RoOworCV9fbGUxNiBocl9kc3NzX3JhdGVfYml0bWFwOworCV9fbGUxNiBvZmRtX3JhdGVfYml0bWFwOworCV9fbGUxNiBodF9tY3NfcmF0ZV9iaXRtYXBbOF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbXdpZmlleF9yYXRlX2Ryb3BfcGF0dGVybiB7CisJX19sZTE2IHR5cGU7CisJX19sZTE2IGxlbmd0aDsKKwlfX2xlMzIgcmF0ZV9kcm9wX21vZGU7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfdHhfcmF0ZV9jZmcgeworCV9fbGUxNiBhY3Rpb247CisJX19sZTE2IGNmZ19pbmRleDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtd2lmaWV4X3Bvd2VyX2dyb3VwIHsKKwl1OCBtb2R1bGF0aW9uX2NsYXNzOworCXU4IGZpcnN0X3JhdGVfY29kZTsKKwl1OCBsYXN0X3JhdGVfY29kZTsKKwlzOCBwb3dlcl9zdGVwOworCXM4IHBvd2VyX21pbjsKKwlzOCBwb3dlcl9tYXg7CisJdTggaHRfYmFuZHdpZHRoOworCXU4IHJlc2VydmVkOworfSBfX3BhY2tlZDsKKworc3RydWN0IG13aWZpZXhfdHlwZXNfcG93ZXJfZ3JvdXAgeworCXUxNiB0eXBlOworCXUxNiBsZW5ndGg7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfdHhwd3JfY2ZnIHsKKwlfX2xlMTYgYWN0aW9uOworCV9fbGUxNiBjZmdfaW5kZXg7CisJX19sZTMyIG1vZGU7Cit9IF9fcGFja2VkOworCisjZGVmaW5lIE1XSUZJRVhfVVNFUl9TQ0FOX0NIQU5fTUFYICAgICAgICAgICAgIDUwCisKKyNkZWZpbmUgTVdJRklFWF9NQVhfU1NJRF9MSVNUX0xFTkdUSCAgICAgICAgIDEwCisKK3N0cnVjdCBtd2lmaWV4X3NjYW5fY21kX2NvbmZpZyB7CisJLyoKKwkgKiAgQlNTIG1vZGUgdG8gYmUgc2VudCBpbiB0aGUgZmlybXdhcmUgY29tbWFuZAorCSAqLworCXU4IGJzc19tb2RlOworCisJLyogU3BlY2lmaWMgQlNTSUQgdXNlZCB0byBmaWx0ZXIgc2NhbiByZXN1bHRzIGluIHRoZSBmaXJtd2FyZSAqLworCXU4IHNwZWNpZmljX2Jzc2lkW0VUSF9BTEVOXTsKKworCS8qIExlbmd0aCBvZiBUTFZzIHNlbnQgaW4gY29tbWFuZCBzdGFydGluZyBhdCB0bHZCdWZmZXIgKi8KKwl1MzIgdGx2X2J1Zl9sZW47CisKKwkvKgorCSAqICBTU0lEIFRMVihzKSBhbmQgQ2hhbkxpc3QgVExWcyB0byBiZSBzZW50IGluIHRoZSBmaXJtd2FyZSBjb21tYW5kCisJICoKKwkgKiAgVExWX1RZUEVfQ0hBTkxJU1QsIG13aWZpZXhfaWVfdHlwZXNfY2hhbl9saXN0X3BhcmFtX3NldAorCSAqICBXTEFOX0VJRF9TU0lELCBtd2lmaWV4X2llX3R5cGVzX3NzaWRfcGFyYW1fc2V0CisJICovCisJdTggdGx2X2J1ZlsxXTsJLyogU1NJRCBUTFYocykgYW5kIENoYW5MaXN0IFRMVnMgYXJlIHN0b3JlZAorCQkJCSAgIGhlcmUgKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtd2lmaWV4X3VzZXJfc2Nhbl9jaGFuIHsKKwl1OCBjaGFuX251bWJlcjsKKwl1OCByYWRpb190eXBlOworCXU4IHNjYW5fdHlwZTsKKwl1OCByZXNlcnZlZDsKKwl1MzIgc2Nhbl90aW1lOworfSBfX3BhY2tlZDsKKworc3RydWN0IG13aWZpZXhfdXNlcl9zY2FuX3NzaWQgeworCXU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTiArIDFdOworCXU4IG1heF9sZW47Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbXdpZmlleF91c2VyX3NjYW5fY2ZnIHsKKwkvKgorCSAqICBGbGFnIHNldCB0byBrZWVwIHRoZSBwcmV2aW91cyBzY2FuIHRhYmxlIGludGFjdAorCSAqCisJICogIElmIHNldCwgdGhlIHNjYW4gcmVzdWx0cyB3aWxsIGFjY3VtdWxhdGUsIHJlcGxhY2luZyBhbnkgcHJldmlvdXMKKwkgKiAgIG1hdGNoZWQgZW50cmllcyBmb3IgYSBCU1Mgd2l0aCB0aGUgbmV3IHNjYW4gZGF0YQorCSAqLworCXU4IGtlZXBfcHJldmlvdXNfc2NhbjsKKwkvKgorCSAqICBCU1MgbW9kZSB0byBiZSBzZW50IGluIHRoZSBmaXJtd2FyZSBjb21tYW5kCisJICovCisJdTggYnNzX21vZGU7CisJLyogQ29uZmlndXJlIHRoZSBudW1iZXIgb2YgcHJvYmUgcmVxdWVzdHMgZm9yIGFjdGl2ZSBjaGFuIHNjYW5zICovCisJdTggbnVtX3Byb2JlczsKKwl1OCByZXNlcnZlZDsKKwkvKiBCU1NJRCBmaWx0ZXIgc2VudCBpbiB0aGUgZmlybXdhcmUgY29tbWFuZCB0byBsaW1pdCB0aGUgcmVzdWx0cyAqLworCXU4IHNwZWNpZmljX2Jzc2lkW0VUSF9BTEVOXTsKKwkvKiBTU0lEIGZpbHRlciBsaXN0IHVzZWQgaW4gdGhlIHRvIGxpbWl0IHRoZSBzY2FuIHJlc3VsdHMgKi8KKwlzdHJ1Y3QgbXdpZmlleF91c2VyX3NjYW5fc3NpZCBzc2lkX2xpc3RbTVdJRklFWF9NQVhfU1NJRF9MSVNUX0xFTkdUSF07CisJLyogVmFyaWFibGUgbnVtYmVyIChmaXhlZCBtYXhpbXVtKSBvZiBjaGFubmVscyB0byBzY2FuIHVwICovCisJc3RydWN0IG13aWZpZXhfdXNlcl9zY2FuX2NoYW4gY2hhbl9saXN0W01XSUZJRVhfVVNFUl9TQ0FOX0NIQU5fTUFYXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBpZV9ib2R5IHsKKwl1OCBncnBfa2V5X291aVs0XTsKKwl1OCBwdGtfY250WzJdOworCXU4IHB0a19ib2R5WzRdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9zY2FuIHsKKwl1OCBic3NfbW9kZTsKKwl1OCBic3NpZFtFVEhfQUxFTl07CisJdTggdGx2X2J1ZmZlclsxXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfc2Nhbl9yc3AgeworCV9fbGUxNiBic3NfZGVzY3JpcHRfc2l6ZTsKKwl1OCBudW1iZXJfb2Zfc2V0czsKKwl1OCBic3NfZGVzY19hbmRfdGx2X2J1ZmZlclsxXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfYmdfc2Nhbl9xdWVyeSB7CisJdTggZmx1c2g7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2JnX3NjYW5fcXVlcnlfcnNwIHsKKwl1MzIgcmVwb3J0X2NvbmRpdGlvbjsKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX3NjYW5fcnNwIHNjYW5fcmVzcDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtd2lmaWV4X2lldHlwZXNfZG9tYWluX3BhcmFtX3NldCB7CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyIGhlYWRlcjsKKwl1OCBjb3VudHJ5X2NvZGVbSUVFRTgwMjExX0NPVU5UUllfU1RSSU5HX0xFTl07CisJc3RydWN0IGllZWU4MDIxMV9jb3VudHJ5X2llX3RyaXBsZXQgdHJpcGxldFsxXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBob3N0X2NtZF9kc184MDJfMTFkX2RvbWFpbl9pbmZvIHsKKwlfX2xlMTYgYWN0aW9uOworCXN0cnVjdCBtd2lmaWV4X2lldHlwZXNfZG9tYWluX3BhcmFtX3NldCBkb21haW47Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExZF9kb21haW5faW5mb19yc3AgeworCV9fbGUxNiBhY3Rpb247CisJc3RydWN0IG13aWZpZXhfaWV0eXBlc19kb21haW5fcGFyYW1fc2V0IGRvbWFpbjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBob3N0X2NtZF9kc18xMW5fYWRkYmFfcmVxIHsKKwl1OCBhZGRfcmVxX3Jlc3VsdDsKKwl1OCBwZWVyX21hY19hZGRyW0VUSF9BTEVOXTsKKwl1OCBkaWFsb2dfdG9rZW47CisJX19sZTE2IGJsb2NrX2Fja19wYXJhbV9zZXQ7CisJX19sZTE2IGJsb2NrX2Fja190bW87CisJX19sZTE2IHNzbjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBob3N0X2NtZF9kc18xMW5fYWRkYmFfcnNwIHsKKwl1OCBhZGRfcnNwX3Jlc3VsdDsKKwl1OCBwZWVyX21hY19hZGRyW0VUSF9BTEVOXTsKKwl1OCBkaWFsb2dfdG9rZW47CisJX19sZTE2IHN0YXR1c19jb2RlOworCV9fbGUxNiBibG9ja19hY2tfcGFyYW1fc2V0OworCV9fbGUxNiBibG9ja19hY2tfdG1vOworCV9fbGUxNiBzc247Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfMTFuX2RlbGJhIHsKKwl1OCBkZWxfcmVzdWx0OworCXU4IHBlZXJfbWFjX2FkZHJbRVRIX0FMRU5dOworCV9fbGUxNiBkZWxfYmFfcGFyYW1fc2V0OworCV9fbGUxNiByZWFzb25fY29kZTsKKwl1OCByZXNlcnZlZDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBob3N0X2NtZF9kc18xMW5fYmF0aW1lb3V0IHsKKwl1OCB0aWQ7CisJdTggcGVlcl9tYWNfYWRkcltFVEhfQUxFTl07CisJdTggb3JpZ25pbmF0b3I7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfMTFuX2NmZyB7CisJX19sZTE2IGFjdGlvbjsKKwlfX2xlMTYgaHRfdHhfY2FwOworCV9fbGUxNiBodF90eF9pbmZvOworfSBfX3BhY2tlZDsKKworc3RydWN0IGhvc3RfY21kX2RzX3R4YnVmX2NmZyB7CisJX19sZTE2IGFjdGlvbjsKKwlfX2xlMTYgYnVmZl9zaXplOworCV9fbGUxNiBtcF9lbmRfcG9ydDsJLyogU0RJTyBvbmx5LCByZXNlcnZlZCBmb3Igb3RoZXIgaW50ZXJmYWNjZXMgKi8KKwlfX2xlMTYgcmVzZXJ2ZWQzOworfSBfX3BhY2tlZDsKKworc3RydWN0IGhvc3RfY21kX2RzX2Ftc2R1X2FnZ3JfY3RybCB7CisJX19sZTE2IGFjdGlvbjsKKwlfX2xlMTYgZW5hYmxlOworCV9fbGUxNiBjdXJyX2J1Zl9zaXplOworfSBfX3BhY2tlZDsKKworc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfd21tX3BhcmFtX3NldCB7CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyIGhlYWRlcjsKKwl1OCB3bW1faWVbMV07Cit9OworCitzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc193bW1fcXVldWVfc3RhdHVzIHsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIgaGVhZGVyOworCXU4IHF1ZXVlX2luZGV4OworCXU4IGRpc2FibGVkOworCXUxNiBtZWRpdW1fdGltZTsKKwl1OCBmbG93X3JlcXVpcmVkOworCXU4IGZsb3dfY3JlYXRlZDsKKwl1MzIgcmVzZXJ2ZWQ7Cit9OworCitzdHJ1Y3QgaWVlZV90eXBlc192ZW5kb3JfaGVhZGVyIHsKKwl1OCBlbGVtZW50X2lkOworCXU4IGxlbjsKKwl1OCBvdWlbM107CisJdTggb3VpX3R5cGU7CisJdTggb3VpX3N1YnR5cGU7CisJdTggdmVyc2lvbjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBpZWVlX3R5cGVzX3dtbV9hY19wYXJhbWV0ZXJzIHsKKwl1OCBhY2lfYWlmc25fYml0bWFwOworCXU4IGVjd19iaXRtYXA7CisJX19sZTE2IHR4X29wX2xpbWl0OworfSBfX3BhY2tlZDsKKworc3RydWN0IGllZWVfdHlwZXNfd21tX3BhcmFtZXRlciB7CisJLyoKKwkgKiBXTU0gUGFyYW1ldGVyIElFIC0gVmVuZG9yIFNwZWNpZmljIEhlYWRlcjoKKwkgKiAgIGVsZW1lbnRfaWQgIFsyMjEvMHhkZF0KKwkgKiAgIExlbiAgICAgICAgIFsyNF0KKwkgKiAgIE91aSAgICAgICAgIFswMDo1MDpmMl0KKwkgKiAgIE91aVR5cGUgICAgIFsyXQorCSAqICAgT3VpU3ViVHlwZSAgWzFdCisJICogICBWZXJzaW9uICAgICBbMV0KKwkgKi8KKwlzdHJ1Y3QgaWVlZV90eXBlc192ZW5kb3JfaGVhZGVyIHZlbmRfaGRyOworCXU4IHFvc19pbmZvX2JpdG1hcDsKKwl1OCByZXNlcnZlZDsKKwlzdHJ1Y3QgaWVlZV90eXBlc193bW1fYWNfcGFyYW1ldGVycyBhY19wYXJhbXNbSUVFRTgwMjExX01BWF9RVUVVRVNdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGllZWVfdHlwZXNfd21tX2luZm8geworCisJLyoKKwkgKiBXTU0gSW5mbyBJRSAtIFZlbmRvciBTcGVjaWZpYyBIZWFkZXI6CisJICogICBlbGVtZW50X2lkICBbMjIxLzB4ZGRdCisJICogICBMZW4gICAgICAgICBbN10KKwkgKiAgIE91aSAgICAgICAgIFswMDo1MDpmMl0KKwkgKiAgIE91aVR5cGUgICAgIFsyXQorCSAqICAgT3VpU3ViVHlwZSAgWzBdCisJICogICBWZXJzaW9uICAgICBbMV0KKwkgKi8KKwlzdHJ1Y3QgaWVlZV90eXBlc192ZW5kb3JfaGVhZGVyIHZlbmRfaGRyOworCisJdTggcW9zX2luZm9fYml0bWFwOworfSBfX3BhY2tlZDsKKworc3RydWN0IGhvc3RfY21kX2RzX3dtbV9nZXRfc3RhdHVzIHsKKwl1OCBxdWV1ZV9zdGF0dXNfdGx2W3NpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc193bW1fcXVldWVfc3RhdHVzKSAqCisJCQkgICAgICBJRUVFODAyMTFfTUFYX1FVRVVFU107CisJdTggd21tX3BhcmFtX3RsdltzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfd21tX3BhcmFtZXRlcikgKyAyXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtd2lmaWV4X3dtbV9hY19zdGF0dXMgeworCXU4IGRpc2FibGVkOworCXU4IGZsb3dfcmVxdWlyZWQ7CisJdTggZmxvd19jcmVhdGVkOworfTsKKworc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRjYXAgeworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciBoZWFkZXI7CisJc3RydWN0IGllZWU4MDIxMV9odF9jYXAgaHRfY2FwOworfSBfX3BhY2tlZDsKKworc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRpbmZvIHsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIgaGVhZGVyOworCXN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyBodF9pbmZvOworfSBfX3BhY2tlZDsKKworc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfMjA0MGJzc2NvIHsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIgaGVhZGVyOworCXU4IGJzc19jb18yMDQwOworfSBfX3BhY2tlZDsKKworc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfZXh0Y2FwIHsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIgaGVhZGVyOworCXU4IGV4dF9jYXA7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfbWFjX3JlZ19hY2Nlc3MgeworCV9fbGUxNiBhY3Rpb247CisJX19sZTE2IG9mZnNldDsKKwlfX2xlMzIgdmFsdWU7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfYmJwX3JlZ19hY2Nlc3MgeworCV9fbGUxNiBhY3Rpb247CisJX19sZTE2IG9mZnNldDsKKwl1OCB2YWx1ZTsKKwl1OCByZXNlcnZlZFszXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBob3N0X2NtZF9kc19yZl9yZWdfYWNjZXNzIHsKKwlfX2xlMTYgYWN0aW9uOworCV9fbGUxNiBvZmZzZXQ7CisJdTggdmFsdWU7CisJdTggcmVzZXJ2ZWRbM107Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfcG1pY19yZWdfYWNjZXNzIHsKKwlfX2xlMTYgYWN0aW9uOworCV9fbGUxNiBvZmZzZXQ7CisJdTggdmFsdWU7CisJdTggcmVzZXJ2ZWRbM107Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2VlcHJvbV9hY2Nlc3MgeworCV9fbGUxNiBhY3Rpb247CisKKwlfX2xlMTYgb2Zmc2V0OworCV9fbGUxNiBieXRlX2NvdW50OworCXU4IHZhbHVlOworfSBfX3BhY2tlZDsKKworc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9yZl9jaGFubmVsIHsKKwlfX2xlMTYgYWN0aW9uOworCV9fbGUxNiBjdXJyZW50X2NoYW5uZWw7CisJX19sZTE2IHJmX3R5cGU7CisJX19sZTE2IHJlc2VydmVkOworCXU4IHJlc2VydmVkXzFbMzJdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGhvc3RfY21kX2RzX3ZlcnNpb25fZXh0IHsKKwl1OCB2ZXJzaW9uX3N0cl9zZWw7CisJY2hhciB2ZXJzaW9uX3N0clsxMjhdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9pYnNzX3N0YXR1cyB7CisJX19sZTE2IGFjdGlvbjsKKwlfX2xlMTYgZW5hYmxlOworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwlfX2xlMTYgYmVhY29uX2ludGVydmFsOworCV9fbGUxNiBhdGltX3dpbmRvdzsKKwlfX2xlMTYgdXNlX2dfcmF0ZV9wcm90ZWN0OworfSBfX3BhY2tlZDsKKworI2RlZmluZSBDT05ORUNUSU9OX1RZUEVfSU5GUkEgICAwCisjZGVmaW5lIENPTk5FQ1RJT05fVFlQRV9BREhPQyAgIDEKKworc3RydWN0IGhvc3RfY21kX2RzX3NldF9ic3NfbW9kZSB7CisJdTggY29uX3R5cGU7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCB7CisJX19sZTE2IGNvbW1hbmQ7CisJX19sZTE2IHNpemU7CisJX19sZTE2IHNlcV9udW07CisJX19sZTE2IHJlc3VsdDsKKwl1bmlvbiB7CisJCXN0cnVjdCBob3N0X2NtZF9kc19nZXRfaHdfc3BlYyBod19zcGVjOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfbWFjX2NvbnRyb2wgbWFjX2N0cmw7CisJCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfbWFjX2FkZHJlc3MgbWFjX2FkZHI7CisJCXN0cnVjdCBob3N0X2NtZF9kc19tYWNfbXVsdGljYXN0X2FkciBtY19hZGRyOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2dldF9sb2cgZ2V0X2xvZzsKKwkJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9yc3NpX2luZm8gcnNzaV9pbmZvOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX3Jzc2lfaW5mb19yc3AgcnNzaV9pbmZvX3JzcDsKKwkJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9zbm1wX21pYiBzbWliOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX3JmX2NoYW5uZWwgcmZfY2hhbm5lbDsKKwkJc3RydWN0IGhvc3RfY21kX2RzX3R4X3JhdGVfcXVlcnkgdHhfcmF0ZTsKKwkJc3RydWN0IGhvc3RfY21kX2RzX3R4X3JhdGVfY2ZnIHR4X3JhdGVfY2ZnOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfdHhwd3JfY2ZnIHR4cF9jZmc7CisJCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfcHNfbW9kZV9lbmggcHNtb2RlX2VuaDsKKwkJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9oc19jZmdfZW5oIG9wdF9oc19jZmc7CisJCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfc2NhbiBzY2FuOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX3NjYW5fcnNwIHNjYW5fcmVzcDsKKwkJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9iZ19zY2FuX3F1ZXJ5IGJnX3NjYW5fcXVlcnk7CisJCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfYmdfc2Nhbl9xdWVyeV9yc3AgYmdfc2Nhbl9xdWVyeV9yZXNwOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2Fzc29jaWF0ZSBhc3NvY2lhdGU7CisJCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfYXNzb2NpYXRlX3JzcCBhc3NvY2lhdGVfcnNwOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2RlYXV0aGVudGljYXRlIGRlYXV0aDsKKwkJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9hZF9ob2Nfc3RhcnQgYWRob2Nfc3RhcnQ7CisJCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfYWRfaG9jX3Jlc3VsdCBhZGhvY19yZXN1bHQ7CisJCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfYWRfaG9jX2pvaW4gYWRob2Nfam9pbjsKKwkJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMWRfZG9tYWluX2luZm8gZG9tYWluX2luZm87CisJCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFkX2RvbWFpbl9pbmZvX3JzcCBkb21haW5faW5mb19yZXNwOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfMTFuX2FkZGJhX3JlcSBhZGRfYmFfcmVxOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfMTFuX2FkZGJhX3JzcCBhZGRfYmFfcnNwOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfMTFuX2RlbGJhIGRlbF9iYTsKKwkJc3RydWN0IGhvc3RfY21kX2RzX3R4YnVmX2NmZyB0eF9idWY7CisJCXN0cnVjdCBob3N0X2NtZF9kc19hbXNkdV9hZ2dyX2N0cmwgYW1zZHVfYWdncl9jdHJsOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfMTFuX2NmZyBodGNmZzsKKwkJc3RydWN0IGhvc3RfY21kX2RzX3dtbV9nZXRfc3RhdHVzIGdldF93bW1fc3RhdHVzOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2tleV9tYXRlcmlhbCBrZXlfbWF0ZXJpYWw7CisJCXN0cnVjdCBob3N0X2NtZF9kc192ZXJzaW9uX2V4dCB2ZXJleHQ7CisJCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfaWJzc19zdGF0dXMgaWJzc19jb2FsZXNjaW5nOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfbWFjX3JlZ19hY2Nlc3MgbWFjX3JlZzsKKwkJc3RydWN0IGhvc3RfY21kX2RzX2JicF9yZWdfYWNjZXNzIGJicF9yZWc7CisJCXN0cnVjdCBob3N0X2NtZF9kc19yZl9yZWdfYWNjZXNzIHJmX3JlZzsKKwkJc3RydWN0IGhvc3RfY21kX2RzX3BtaWNfcmVnX2FjY2VzcyBwbWljX3JlZzsKKwkJc3RydWN0IGhvc3RfY21kX2RzX3NldF9ic3NfbW9kZSBic3NfbW9kZTsKKwkJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9lZXByb21fYWNjZXNzIGVlcHJvbTsKKwl9IHBhcmFtczsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtd2lmaWV4X29wdF9zbGVlcF9jb25maXJtIHsKKwlfX2xlMTYgY29tbWFuZDsKKwlfX2xlMTYgc2l6ZTsKKwlfX2xlMTYgc2VxX251bTsKKwlfX2xlMTYgcmVzdWx0OworCV9fbGUxNiBhY3Rpb247CisJX19sZTE2IHJlc3BfY3RybDsKK30gX19wYWNrZWQ7CisjZW5kaWYgLyogIV9NV0lGSUVYX0ZXX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2luaXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMTU1OWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2luaXQuYwpAQCAtMCwwICsxLDY0NSBAQAorLyoKKyAqIE1hcnZlbGwgV2lyZWxlc3MgTEFOIGRldmljZSBkcml2ZXI6IEhXL0ZXIEluaXRpYWxpemF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5hdGlvbmFsCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4KKyAqIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBvZiB3aGljaAorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0Egb3Igb24gdGhlCisgKiB3b3JsZHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQuCisgKgorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNlIHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dAorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLgorICovCisKKyNpbmNsdWRlICJkZWNsLmgiCisjaW5jbHVkZSAiaW9jdGwuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAiZncuaCIKKyNpbmNsdWRlICJtYWluLmgiCisjaW5jbHVkZSAid21tLmgiCisjaW5jbHVkZSAiMTFuLmgiCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGFkZHMgYSBCU1MgcHJpb3JpdHkgdGFibGUgdG8gdGhlIHRhYmxlIGxpc3QuCisgKgorICogVGhlIGZ1bmN0aW9uIGFsbG9jYXRlcyBhIG5ldyBCU1MgcHJpb3JpdHkgdGFibGUgbm9kZSBhbmQgYWRkcyBpdCB0bworICogdGhlIGVuZCBvZiBCU1MgcHJpb3JpdHkgdGFibGUgbGlzdCwga2VwdCBpbiBkcml2ZXIgbWVtb3J5LgorICovCitzdGF0aWMgaW50IG13aWZpZXhfYWRkX2Jzc19wcmlvX3RibChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KQoreworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBtd2lmaWV4X2Jzc19wcmlvX25vZGUgKmJzc19wcmlvOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlic3NfcHJpbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2Jzc19wcmlvX25vZGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJzc19wcmlvKSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiJXM6IGZhaWxlZCB0byBhbGxvYyBic3NfcHJpb1xuIiwKKwkJCQkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYnNzX3ByaW8tPnByaXYgPSBwcml2OworCUlOSVRfTElTVF9IRUFEKCZic3NfcHJpby0+bGlzdCk7CisJaWYgKCFhZGFwdGVyLT5ic3NfcHJpb190YmxbcHJpdi0+YnNzX3ByaW9yaXR5XS5ic3NfcHJpb19jdXIpCisJCWFkYXB0ZXItPmJzc19wcmlvX3RibFtwcml2LT5ic3NfcHJpb3JpdHldLmJzc19wcmlvX2N1ciA9CisJCQlic3NfcHJpbzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5ic3NfcHJpb190YmxbcHJpdi0+YnNzX3ByaW9yaXR5XQorCQkJLmJzc19wcmlvX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZic3NfcHJpby0+bGlzdCwKKwkJCSZhZGFwdGVyLT5ic3NfcHJpb190YmxbcHJpdi0+YnNzX3ByaW9yaXR5XQorCQkJLmJzc19wcmlvX2hlYWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmJzc19wcmlvX3RibFtwcml2LT5ic3NfcHJpb3JpdHldCisJCQkuYnNzX3ByaW9fbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBhbmQgc2V0cyBkZWZhdWx0CisgKiB2YWx1ZXMgdG8gdGhlIG1lbWJlcnMuCisgKgorICogQWRkaXRpb25hbGx5LCBpdCBhbHNvIGluaXRpYWxpemVzIGFsbCB0aGUgbG9ja3MgYW5kIHNldHMgdXAgYWxsIHRoZQorICogbGlzdHMuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9pbml0X3ByaXYoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdikKK3sKKwl1MzIgaTsKKworCXByaXYtPm1lZGlhX2Nvbm5lY3RlZCA9IGZhbHNlOworCW1lbXNldChwcml2LT5jdXJyX2FkZHIsIDB4ZmYsIEVUSF9BTEVOKTsKKworCXByaXYtPnBrdF90eF9jdHJsID0gMDsKKwlwcml2LT5ic3NfbW9kZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CisJcHJpdi0+ZGF0YV9yYXRlID0gMDsJLyogSW5pdGlhbGx5IGluZGljYXRlIHRoZSByYXRlIGFzIGF1dG8gKi8KKwlwcml2LT5pc19kYXRhX3JhdGVfYXV0byA9IHRydWU7CisJcHJpdi0+YmNuX2F2Z19mYWN0b3IgPSBERUZBVUxUX0JDTl9BVkdfRkFDVE9SOworCXByaXYtPmRhdGFfYXZnX2ZhY3RvciA9IERFRkFVTFRfREFUQV9BVkdfRkFDVE9SOworCisJcHJpdi0+c2VjX2luZm8ud2VwX3N0YXR1cyA9IE1XSUZJRVhfODAyXzExX1dFUF9ESVNBQkxFRDsKKwlwcml2LT5zZWNfaW5mby5hdXRoZW50aWNhdGlvbl9tb2RlID0gTkw4MDIxMV9BVVRIVFlQRV9PUEVOX1NZU1RFTTsKKwlwcml2LT5zZWNfaW5mby5lbmNyeXB0aW9uX21vZGUgPSAwOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByaXYtPndlcF9rZXkpOyBpKyspCisJCW1lbXNldCgmcHJpdi0+d2VwX2tleVtpXSwgMCwgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X3dlcF9rZXkpKTsKKwlwcml2LT53ZXBfa2V5X2N1cnJfaW5kZXggPSAwOworCXByaXYtPmN1cnJfcGt0X2ZpbHRlciA9IEhvc3RDbWRfQUNUX01BQ19SWF9PTiB8IEhvc3RDbWRfQUNUX01BQ19UWF9PTiB8CisJCQkJSG9zdENtZF9BQ1RfTUFDX0VUSEVSTkVUSUlfRU5BQkxFOworCisJcHJpdi0+YmVhY29uX3BlcmlvZCA9IDEwMDsgLyogYmVhY29uIGludGVydmFsICovIDsKKwlwcml2LT5hdHRlbXB0ZWRfYnNzX2Rlc2MgPSBOVUxMOworCW1lbXNldCgmcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLCAwLCBzaXplb2YocHJpdi0+Y3Vycl9ic3NfcGFyYW1zKSk7CisJcHJpdi0+bGlzdGVuX2ludGVydmFsID0gTVdJRklFWF9ERUZBVUxUX0xJU1RFTl9JTlRFUlZBTDsKKworCW1lbXNldCgmcHJpdi0+cHJldl9zc2lkLCAwLCBzaXplb2YocHJpdi0+cHJldl9zc2lkKSk7CisJbWVtc2V0KCZwcml2LT5wcmV2X2Jzc2lkLCAwLCBzaXplb2YocHJpdi0+cHJldl9ic3NpZCkpOworCW1lbXNldCgmcHJpdi0+YXNzb2NfcnNwX2J1ZiwgMCwgc2l6ZW9mKHByaXYtPmFzc29jX3JzcF9idWYpKTsKKwlwcml2LT5hc3NvY19yc3Bfc2l6ZSA9IDA7CisJcHJpdi0+YWRob2NfY2hhbm5lbCA9IERFRkFVTFRfQURfSE9DX0NIQU5ORUw7CisJcHJpdi0+YXRpbV93aW5kb3cgPSAwOworCXByaXYtPmFkaG9jX3N0YXRlID0gQURIT0NfSURMRTsKKwlwcml2LT50eF9wb3dlcl9sZXZlbCA9IDA7CisJcHJpdi0+bWF4X3R4X3Bvd2VyX2xldmVsID0gMDsKKwlwcml2LT5taW5fdHhfcG93ZXJfbGV2ZWwgPSAwOworCXByaXYtPnR4X3JhdGUgPSAwOworCXByaXYtPnJ4cGRfaHRpbmZvID0gMDsKKwlwcml2LT5yeHBkX3JhdGUgPSAwOworCXByaXYtPnJhdGVfYml0bWFwID0gMDsKKwlwcml2LT5kYXRhX3Jzc2lfbGFzdCA9IDA7CisJcHJpdi0+ZGF0YV9yc3NpX2F2ZyA9IDA7CisJcHJpdi0+ZGF0YV9uZl9hdmcgPSAwOworCXByaXYtPmRhdGFfbmZfbGFzdCA9IDA7CisJcHJpdi0+YmNuX3Jzc2lfbGFzdCA9IDA7CisJcHJpdi0+YmNuX3Jzc2lfYXZnID0gMDsKKwlwcml2LT5iY25fbmZfYXZnID0gMDsKKwlwcml2LT5iY25fbmZfbGFzdCA9IDA7CisJbWVtc2V0KCZwcml2LT53cGFfaWUsIDAsIHNpemVvZihwcml2LT53cGFfaWUpKTsKKwltZW1zZXQoJnByaXYtPmFlc19rZXksIDAsIHNpemVvZihwcml2LT5hZXNfa2V5KSk7CisJcHJpdi0+d3BhX2llX2xlbiA9IDA7CisJcHJpdi0+d3BhX2lzX2d0a19zZXQgPSBmYWxzZTsKKworCW1lbXNldCgmcHJpdi0+YXNzb2NfdGx2X2J1ZiwgMCwgc2l6ZW9mKHByaXYtPmFzc29jX3Rsdl9idWYpKTsKKwlwcml2LT5hc3NvY190bHZfYnVmX2xlbiA9IDA7CisJbWVtc2V0KCZwcml2LT53cHMsIDAsIHNpemVvZihwcml2LT53cHMpKTsKKwltZW1zZXQoJnByaXYtPmdlbl9pZV9idWYsIDAsIHNpemVvZihwcml2LT5nZW5faWVfYnVmKSk7CisJcHJpdi0+Z2VuX2llX2J1Zl9sZW4gPSAwOworCW1lbXNldChwcml2LT52c19pZSwgMCwgc2l6ZW9mKHByaXYtPnZzX2llKSk7CisKKwlwcml2LT53bW1fcmVxdWlyZWQgPSB0cnVlOworCXByaXYtPndtbV9lbmFibGVkID0gZmFsc2U7CisJcHJpdi0+d21tX3Fvc2luZm8gPSAwOworCXByaXYtPmN1cnJfYmNuX2J1ZiA9IE5VTEw7CisJcHJpdi0+Y3Vycl9iY25fc2l6ZSA9IDA7CisKKwlwcml2LT5zY2FuX2Jsb2NrID0gZmFsc2U7CisKKwlyZXR1cm4gbXdpZmlleF9hZGRfYnNzX3ByaW9fdGJsKHByaXYpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgYnVmZmVycyBmb3IgbWVtYmVycyBvZiB0aGUgYWRhcHRlcgorICogc3RydWN0dXJlLgorICoKKyAqIFRoZSBtZW1vcnkgYWxsb2NhdGVkIGluY2x1ZGVzIHNjYW4gdGFibGUsIGNvbW1hbmQgYnVmZmVycywgYW5kCisgKiBzbGVlcCBjb25maXJtIGNvbW1hbmQgYnVmZmVyLiBJbiBhZGRpdGlvbiwgdGhlIHF1ZXVlcyBhcmUKKyAqIGFsc28gaW5pdGlhbGl6ZWQuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9hbGxvY2F0ZV9hZGFwdGVyKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHJldDsKKwl1MzIgYnVmX3NpemU7CisJc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqdGVtcF9zY2FuX3RhYmxlOworCisJLyogQWxsb2NhdGUgYnVmZmVyIHRvIHN0b3JlIHRoZSBCU1NJRCBsaXN0ICovCisJYnVmX3NpemUgPSBzaXplb2Yoc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvcikgKiBJV19NQVhfQVA7CisJdGVtcF9zY2FuX3RhYmxlID0ga3phbGxvYyhidWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0ZW1wX3NjYW5fdGFibGUpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICIlczogZmFpbGVkIHRvIGFsbG9jIHRlbXBfc2Nhbl90YWJsZVxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYWRhcHRlci0+c2Nhbl90YWJsZSA9IHRlbXBfc2Nhbl90YWJsZTsKKworCS8qIEFsbG9jYXRlIGNvbW1hbmQgYnVmZmVyICovCisJcmV0ID0gbXdpZmlleF9hbGxvY19jbWRfYnVmZmVyKGFkYXB0ZXIpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICIlczogZmFpbGVkIHRvIGFsbG9jIGNtZCBidWZmZXJcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlhZGFwdGVyLT5zbGVlcF9jZm0gPQorCQlkZXZfYWxsb2Nfc2tiKHNpemVvZihzdHJ1Y3QgbXdpZmlleF9vcHRfc2xlZXBfY29uZmlybSkKKwkJCQkrIElOVEZfSEVBREVSX0xFTik7CisKKwlpZiAoIWFkYXB0ZXItPnNsZWVwX2NmbSkgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIiVzOiBmYWlsZWQgdG8gYWxsb2Mgc2xlZXAgY2ZtIgorCQkJIiBjbWQgYnVmZmVyXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtMTsKKwl9CisJc2tiX3Jlc2VydmUoYWRhcHRlci0+c2xlZXBfY2ZtLCBJTlRGX0hFQURFUl9MRU4pOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBhZGFwdGVyIHN0cnVjdHVyZSBhbmQgc2V0cyBkZWZhdWx0CisgKiB2YWx1ZXMgdG8gdGhlIG1lbWJlcnMgb2YgYWRhcHRlci4KKyAqCisgKiBUaGlzIGFsc28gaW5pdGlhbGl6ZXMgdGhlIFdNTSByZWxhdGVkIHBhcmFtZXRlcnMgaW4gdGhlIGRyaXZlciBwcml2YXRlCisgKiBzdHJ1Y3R1cmVzLgorICovCitzdGF0aWMgdm9pZCBtd2lmaWV4X2luaXRfYWRhcHRlcihzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBtd2lmaWV4X29wdF9zbGVlcF9jb25maXJtICpzbGVlcF9jZm1fYnVmID0gTlVMTDsKKworCXNrYl9wdXQoYWRhcHRlci0+c2xlZXBfY2ZtLCBzaXplb2Yoc3RydWN0IG13aWZpZXhfb3B0X3NsZWVwX2NvbmZpcm0pKTsKKwlzbGVlcF9jZm1fYnVmID0gKHN0cnVjdCBtd2lmaWV4X29wdF9zbGVlcF9jb25maXJtICopCisJCQkJCQkoYWRhcHRlci0+c2xlZXBfY2ZtLT5kYXRhKTsKKworCWFkYXB0ZXItPmNtZF9zZW50ID0gZmFsc2U7CisJYWRhcHRlci0+ZGF0YV9zZW50ID0gdHJ1ZTsKKwlhZGFwdGVyLT5jbWRfcmVzcF9yZWNlaXZlZCA9IGZhbHNlOworCWFkYXB0ZXItPmV2ZW50X3JlY2VpdmVkID0gZmFsc2U7CisJYWRhcHRlci0+ZGF0YV9yZWNlaXZlZCA9IGZhbHNlOworCisJYWRhcHRlci0+c3VycHJpc2VfcmVtb3ZlZCA9IGZhbHNlOworCisJYWRhcHRlci0+aHdfc3RhdHVzID0gTVdJRklFWF9IV19TVEFUVVNfSU5JVElBTElaSU5HOworCisJYWRhcHRlci0+cHNfbW9kZSA9IE1XSUZJRVhfODAyXzExX1BPV0VSX01PREVfQ0FNOworCWFkYXB0ZXItPnBzX3N0YXRlID0gUFNfU1RBVEVfQVdBS0U7CisJYWRhcHRlci0+bmVlZF90b193YWtldXAgPSBmYWxzZTsKKworCWFkYXB0ZXItPnNjYW5fbW9kZSA9IEhvc3RDbWRfQlNTX01PREVfQU5ZOworCWFkYXB0ZXItPnNwZWNpZmljX3NjYW5fdGltZSA9IE1XSUZJRVhfU1BFQ0lGSUNfU0NBTl9DSEFOX1RJTUU7CisJYWRhcHRlci0+YWN0aXZlX3NjYW5fdGltZSA9IE1XSUZJRVhfQUNUSVZFX1NDQU5fQ0hBTl9USU1FOworCWFkYXB0ZXItPnBhc3NpdmVfc2Nhbl90aW1lID0gTVdJRklFWF9QQVNTSVZFX1NDQU5fQ0hBTl9USU1FOworCisJYWRhcHRlci0+bnVtX2luX3NjYW5fdGFibGUgPSAwOworCW1lbXNldChhZGFwdGVyLT5zY2FuX3RhYmxlLCAwLAorCSAgICAgICAoc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IpICogSVdfTUFYX0FQKSk7CisJYWRhcHRlci0+c2Nhbl9wcm9iZXMgPSAxOworCisJbWVtc2V0KGFkYXB0ZXItPmJjbl9idWYsIDAsIHNpemVvZihhZGFwdGVyLT5iY25fYnVmKSk7CisJYWRhcHRlci0+YmNuX2J1Zl9lbmQgPSBhZGFwdGVyLT5iY25fYnVmOworCisJYWRhcHRlci0+bXVsdGlwbGVfZHRpbSA9IDE7CisKKwlhZGFwdGVyLT5sb2NhbF9saXN0ZW5faW50ZXJ2YWwgPSAwOwkvKiBkZWZhdWx0IHZhbHVlIGluIGZpcm13YXJlCisJCQkJCQkgICB3aWxsIGJlIHVzZWQgKi8KKworCWFkYXB0ZXItPmlzX2RlZXBfc2xlZXAgPSBmYWxzZTsKKworCWFkYXB0ZXItPmRlbGF5X251bGxfcGt0ID0gZmFsc2U7CisJYWRhcHRlci0+ZGVsYXlfdG9fcHMgPSAxMDAwOworCWFkYXB0ZXItPmVuaGFuY2VkX3BzX21vZGUgPSBQU19NT0RFX0FVVE87CisKKwlhZGFwdGVyLT5nZW5fbnVsbF9wa3QgPSBmYWxzZTsJLyogRGlzYWJsZSBOVUxMIFBrZyBnZW5lcmF0aW9uIGJ5CisJCQkJCSAgIGRlZmF1bHQgKi8KKwlhZGFwdGVyLT5wcHNfdWFwc2RfbW9kZSA9IGZhbHNlOyAvKiBEaXNhYmxlIHBwcy91YXBzZCBtb2RlIGJ5CisJCQkJCSAgIGRlZmF1bHQgKi8KKwlhZGFwdGVyLT5wbV93YWtldXBfY2FyZF9yZXEgPSBmYWxzZTsKKworCWFkYXB0ZXItPnBtX3dha2V1cF9md190cnkgPSBmYWxzZTsKKworCWFkYXB0ZXItPm1heF90eF9idWZfc2l6ZSA9IE1XSUZJRVhfVFhfREFUQV9CVUZfU0laRV8ySzsKKwlhZGFwdGVyLT50eF9idWZfc2l6ZSA9IE1XSUZJRVhfVFhfREFUQV9CVUZfU0laRV8ySzsKKwlhZGFwdGVyLT5jdXJyX3R4X2J1Zl9zaXplID0gTVdJRklFWF9UWF9EQVRBX0JVRl9TSVpFXzJLOworCisJYWRhcHRlci0+aXNfaHNfY29uZmlndXJlZCA9IGZhbHNlOworCWFkYXB0ZXItPmhzX2NmZy5jb25kaXRpb25zID0gY3B1X3RvX2xlMzIoSE9TVF9TTEVFUF9DRkdfQ09ORF9ERUYpOworCWFkYXB0ZXItPmhzX2NmZy5ncGlvID0gSE9TVF9TTEVFUF9DRkdfR1BJT19ERUY7CisJYWRhcHRlci0+aHNfY2ZnLmdhcCA9IEhPU1RfU0xFRVBfQ0ZHX0dBUF9ERUY7CisJYWRhcHRlci0+aHNfYWN0aXZhdGVkID0gZmFsc2U7CisKKwltZW1zZXQoYWRhcHRlci0+ZXZlbnRfYm9keSwgMCwgc2l6ZW9mKGFkYXB0ZXItPmV2ZW50X2JvZHkpKTsKKwlhZGFwdGVyLT5od19kb3RfMTFuX2Rldl9jYXAgPSAwOworCWFkYXB0ZXItPmh3X2Rldl9tY3Nfc3VwcG9ydCA9IDA7CisJYWRhcHRlci0+Y2hhbl9vZmZzZXQgPSAwOworCWFkYXB0ZXItPmFkaG9jXzExbl9lbmFibGVkID0gZmFsc2U7CisKKwltd2lmaWV4X3dtbV9pbml0KGFkYXB0ZXIpOworCisJaWYgKGFkYXB0ZXItPnNsZWVwX2NmbSkgeworCQltZW1zZXQoc2xlZXBfY2ZtX2J1ZiwgMCwgYWRhcHRlci0+c2xlZXBfY2ZtLT5sZW4pOworCQlzbGVlcF9jZm1fYnVmLT5jb21tYW5kID0KKwkJCQljcHVfdG9fbGUxNihIb3N0Q21kX0NNRF84MDJfMTFfUFNfTU9ERV9FTkgpOworCQlzbGVlcF9jZm1fYnVmLT5zaXplID0KKwkJCQljcHVfdG9fbGUxNihhZGFwdGVyLT5zbGVlcF9jZm0tPmxlbik7CisJCXNsZWVwX2NmbV9idWYtPnJlc3VsdCA9IDA7CisJCXNsZWVwX2NmbV9idWYtPmFjdGlvbiA9IGNwdV90b19sZTE2KFNMRUVQX0NPTkZJUk0pOworCQlzbGVlcF9jZm1fYnVmLT5yZXNwX2N0cmwgPSBjcHVfdG9fbGUxNihSRVNQX05FRURFRCk7CisJfQorCW1lbXNldCgmYWRhcHRlci0+c2xlZXBfcGFyYW1zLCAwLCBzaXplb2YoYWRhcHRlci0+c2xlZXBfcGFyYW1zKSk7CisJbWVtc2V0KCZhZGFwdGVyLT5zbGVlcF9wZXJpb2QsIDAsIHNpemVvZihhZGFwdGVyLT5zbGVlcF9wZXJpb2QpKTsKKwlhZGFwdGVyLT50eF9sb2NrX2ZsYWcgPSBmYWxzZTsKKwlhZGFwdGVyLT5udWxsX3BrdF9pbnRlcnZhbCA9IDA7CisJYWRhcHRlci0+ZndfYmFuZHMgPSAwOworCWFkYXB0ZXItPmNvbmZpZ19iYW5kcyA9IDA7CisJYWRhcHRlci0+YWRob2Nfc3RhcnRfYmFuZCA9IDA7CisJYWRhcHRlci0+c2Nhbl9jaGFubmVscyA9IE5VTEw7CisJYWRhcHRlci0+ZndfcmVsZWFzZV9udW1iZXIgPSAwOworCWFkYXB0ZXItPmZ3X2NhcF9pbmZvID0gMDsKKwltZW1zZXQoJmFkYXB0ZXItPnVwbGRfYnVmLCAwLCBzaXplb2YoYWRhcHRlci0+dXBsZF9idWYpKTsKKwlhZGFwdGVyLT5ldmVudF9jYXVzZSA9IDA7CisJYWRhcHRlci0+cmVnaW9uX2NvZGUgPSAwOworCWFkYXB0ZXItPmJjbl9taXNzX3RpbWVfb3V0ID0gREVGQVVMVF9CQ05fTUlTU19USU1FT1VUOworCWFkYXB0ZXItPmFkaG9jX2F3YWtlX3BlcmlvZCA9IDA7CisJbWVtc2V0KCZhZGFwdGVyLT5hcnBfZmlsdGVyLCAwLCBzaXplb2YoYWRhcHRlci0+YXJwX2ZpbHRlcikpOworCWFkYXB0ZXItPmFycF9maWx0ZXJfc2l6ZSA9IDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGZyZWVzIHRoZSBhZGFwdGVyIHN0cnVjdHVyZS4KKyAqCisgKiBUaGUgZnJlZWluZyBvcGVyYXRpb24gaXMgZG9uZSByZWN1cnNpdmVseSwgYnkgY2FuY2VsaW5nIGFsbAorICogcGVuZGluZyBjb21tYW5kcywgZnJlZWluZyB0aGUgbWVtYmVyIGJ1ZmZlcnMgcHJldmlvdXNseQorICogYWxsb2NhdGVkIChjb21tYW5kIGJ1ZmZlcnMsIHNjYW4gdGFibGUgYnVmZmVyLCBzbGVlcCBjb25maXJtCisgKiBjb21tYW5kIGJ1ZmZlciksIHN0b3BwaW5nIHRoZSB0aW1lcnMgYW5kIGNhbGxpbmcgdGhlIGNsZWFudXAKKyAqIHJvdXRpbmVzIGZvciBldmVyeSBpbnRlcmZhY2UsIGJlZm9yZSB0aGUgYWN0dWFsIGFkYXB0ZXIKKyAqIHN0cnVjdHVyZSBpcyBmcmVlZC4KKyAqLworc3RhdGljIHZvaWQKK213aWZpZXhfZnJlZV9hZGFwdGVyKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKCFhZGFwdGVyKSB7CisJCXByX2VycigiJXM6IGFkYXB0ZXIgaXMgTlVMTFxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJbXdpZmlleF9jYW5jZWxfYWxsX3BlbmRpbmdfY21kKGFkYXB0ZXIpOworCisJLyogRnJlZSBsb2NrIHZhcmlhYmxlcyAqLworCW13aWZpZXhfZnJlZV9sb2NrX2xpc3QoYWRhcHRlcik7CisKKwkvKiBGcmVlIGNvbW1hbmQgYnVmZmVyICovCisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBmcmVlIGNtZCBidWZmZXJcbiIpOworCW13aWZpZXhfZnJlZV9jbWRfYnVmZmVyKGFkYXB0ZXIpOworCisJZGVsX3RpbWVyKCZhZGFwdGVyLT5jbWRfdGltZXIpOworCisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBmcmVlIHNjYW4gdGFibGVcbiIpOworCWtmcmVlKGFkYXB0ZXItPnNjYW5fdGFibGUpOworCWFkYXB0ZXItPnNjYW5fdGFibGUgPSBOVUxMOworCisJYWRhcHRlci0+aWZfb3BzLmNsZWFudXBfaWYoYWRhcHRlcik7CisKKwlkZXZfa2ZyZWVfc2tiX2FueShhZGFwdGVyLT5zbGVlcF9jZm0pOworfQorCisvKgorICogIFRoaXMgZnVuY3Rpb24gaW50aWFsaXplcyB0aGUgbG9jayB2YXJpYWJsZXMgYW5kCisgKiAgdGhlIGxpc3QgaGVhZHMuCisgKi8KK2ludCBtd2lmaWV4X2luaXRfbG9ja19saXN0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdjsKKwlzMzIgaSwgajsKKworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5td2lmaWV4X2xvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5pbnRfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPm1haW5fcHJvY19sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+bXdpZmlleF9jbWRfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPnByaXZfbnVtOyBpKyspIHsKKwkJaWYgKGFkYXB0ZXItPnByaXZbaV0pIHsKKwkJCXByaXYgPSBhZGFwdGVyLT5wcml2W2ldOworCQkJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnJ4X3BrdF9sb2NrKTsKKwkJCXNwaW5fbG9ja19pbml0KCZwcml2LT53bW0ucmFfbGlzdF9zcGlubG9jayk7CisJCQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+Y3Vycl9iY25fYnVmX2xvY2spOworCQl9CisJfQorCisJLyogSW5pdGlhbGl6ZSBjbWRfZnJlZV9xICovCisJSU5JVF9MSVNUX0hFQUQoJmFkYXB0ZXItPmNtZF9mcmVlX3EpOworCS8qIEluaXRpYWxpemUgY21kX3BlbmRpbmdfcSAqLworCUlOSVRfTElTVF9IRUFEKCZhZGFwdGVyLT5jbWRfcGVuZGluZ19xKTsKKwkvKiBJbml0aWFsaXplIHNjYW5fcGVuZGluZ19xICovCisJSU5JVF9MSVNUX0hFQUQoJmFkYXB0ZXItPnNjYW5fcGVuZGluZ19xKTsKKworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5jbWRfZnJlZV9xX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5jbWRfcGVuZGluZ19xX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5zY2FuX3BlbmRpbmdfcV9sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5wcml2X251bTsgKytpKSB7CisJCUlOSVRfTElTVF9IRUFEKCZhZGFwdGVyLT5ic3NfcHJpb190YmxbaV0uYnNzX3ByaW9faGVhZCk7CisJCWFkYXB0ZXItPmJzc19wcmlvX3RibFtpXS5ic3NfcHJpb19jdXIgPSBOVUxMOworCQlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+YnNzX3ByaW9fdGJsW2ldLmJzc19wcmlvX2xvY2spOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5wcml2X251bTsgaSsrKSB7CisJCWlmICghYWRhcHRlci0+cHJpdltpXSkKKwkJCWNvbnRpbnVlOworCQlwcml2ID0gYWRhcHRlci0+cHJpdltpXTsKKwkJZm9yIChqID0gMDsgaiA8IE1BWF9OVU1fVElEOyArK2opIHsKKwkJCUlOSVRfTElTVF9IRUFEKCZwcml2LT53bW0udGlkX3RibF9wdHJbal0ucmFfbGlzdCk7CisJCQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+d21tLnRpZF90YmxfcHRyW2pdLnRpZF90YmxfbG9jayk7CisJCX0KKwkJSU5JVF9MSVNUX0hFQUQoJnByaXYtPnR4X2JhX3N0cmVhbV90YmxfcHRyKTsKKwkJSU5JVF9MSVNUX0hFQUQoJnByaXYtPnJ4X3Jlb3JkZXJfdGJsX3B0cik7CisKKwkJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnR4X2JhX3N0cmVhbV90YmxfbG9jayk7CisJCXNwaW5fbG9ja19pbml0KCZwcml2LT5yeF9yZW9yZGVyX3RibF9sb2NrKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICBUaGlzIGZ1bmN0aW9uIHJlbGVhc2VzIHRoZSBsb2NrIHZhcmlhYmxlcyBhbmQgZnJlZXMgdGhlIGxvY2tzIGFuZAorICogIGFzc29jaWF0ZWQgbG9ja3MuCisgKi8KK3ZvaWQgbXdpZmlleF9mcmVlX2xvY2tfbGlzdChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXY7CisJczMyIGksIGo7CisKKwkvKiBGcmVlIGxpc3RzICovCisJbGlzdF9kZWwoJmFkYXB0ZXItPmNtZF9mcmVlX3EpOworCWxpc3RfZGVsKCZhZGFwdGVyLT5jbWRfcGVuZGluZ19xKTsKKwlsaXN0X2RlbCgmYWRhcHRlci0+c2Nhbl9wZW5kaW5nX3EpOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPnByaXZfbnVtOyBpKyspCisJCWxpc3RfZGVsKCZhZGFwdGVyLT5ic3NfcHJpb190YmxbaV0uYnNzX3ByaW9faGVhZCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+cHJpdl9udW07IGkrKykgeworCQlpZiAoYWRhcHRlci0+cHJpdltpXSkgeworCQkJcHJpdiA9IGFkYXB0ZXItPnByaXZbaV07CisJCQlmb3IgKGogPSAwOyBqIDwgTUFYX05VTV9USUQ7ICsraikKKwkJCQlsaXN0X2RlbCgmcHJpdi0+d21tLnRpZF90YmxfcHRyW2pdLnJhX2xpc3QpOworCQkJbGlzdF9kZWwoJnByaXYtPnR4X2JhX3N0cmVhbV90YmxfcHRyKTsKKwkJCWxpc3RfZGVsKCZwcml2LT5yeF9yZW9yZGVyX3RibF9wdHIpOworCQl9CisJfQorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgZmlybXdhcmUuCisgKgorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQgc2VxdWVudGlhbGx5IC0KKyAqICAgICAgLSBBbGxvY2F0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICogICAgICAtIEluaXRpYWxpemUgdGhlIGFkYXB0ZXIgc3RydWN0dXJlCisgKiAgICAgIC0gSW5pdGlhbGl6ZSB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqICAgICAgLSBBZGQgQlNTIHByaW9yaXR5IHRhYmxlcyB0byB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqICAgICAgLSBGb3IgZWFjaCBpbnRlcmZhY2UsIHNlbmQgdGhlIGluaXQgY29tbWFuZHMgdG8gZmlybXdhcmUKKyAqICAgICAgLSBTZW5kIHRoZSBmaXJzdCBjb21tYW5kIGluIGNvbW1hbmQgcGVuZGluZyBxdWV1ZSwgaWYgYXZhaWxhYmxlCisgKi8KK2ludCBtd2lmaWV4X2luaXRfZncoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXY7CisJdTggaSwgZmlyc3Rfc3RhID0gdHJ1ZTsKKwlpbnQgaXNfY21kX3BlbmRfcV9lbXB0eTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJYWRhcHRlci0+aHdfc3RhdHVzID0gTVdJRklFWF9IV19TVEFUVVNfSU5JVElBTElaSU5HOworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBtZW1iZXIgb2YgYWRhcHRlciBzdHJ1Y3R1cmUgKi8KKwlyZXQgPSBtd2lmaWV4X2FsbG9jYXRlX2FkYXB0ZXIoYWRhcHRlcik7CisJaWYgKHJldCkKKwkJcmV0dXJuIC0xOworCisJLyogSW5pdGlhbGl6ZSBhZGFwdGVyIHN0cnVjdHVyZSAqLworCW13aWZpZXhfaW5pdF9hZGFwdGVyKGFkYXB0ZXIpOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPnByaXZfbnVtOyBpKyspIHsKKwkJaWYgKGFkYXB0ZXItPnByaXZbaV0pIHsKKwkJCXByaXYgPSBhZGFwdGVyLT5wcml2W2ldOworCisJCQkvKiBJbml0aWFsaXplIHByaXZhdGUgc3RydWN0dXJlICovCisJCQlyZXQgPSBtd2lmaWV4X2luaXRfcHJpdihwcml2KTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIC0xOworCQl9CisJfQorCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5wcml2X251bTsgaSsrKSB7CisJCWlmIChhZGFwdGVyLT5wcml2W2ldKSB7CisJCQlyZXQgPSBtd2lmaWV4X3N0YV9pbml0X2NtZChhZGFwdGVyLT5wcml2W2ldLCBmaXJzdF9zdGEpOworCQkJaWYgKHJldCA9PSAtMSkKKwkJCQlyZXR1cm4gLTE7CisKKwkJCWZpcnN0X3N0YSA9IGZhbHNlOworCQl9CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmNtZF9wZW5kaW5nX3FfbG9jaywgZmxhZ3MpOworCWlzX2NtZF9wZW5kX3FfZW1wdHkgPSBsaXN0X2VtcHR5KCZhZGFwdGVyLT5jbWRfcGVuZGluZ19xKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5jbWRfcGVuZGluZ19xX2xvY2ssIGZsYWdzKTsKKwlpZiAoIWlzX2NtZF9wZW5kX3FfZW1wdHkpIHsKKwkJLyogU2VuZCB0aGUgZmlyc3QgY29tbWFuZCBpbiBxdWV1ZSBhbmQgcmV0dXJuICovCisJCWlmIChtd2lmaWV4X21haW5fcHJvY2VzcyhhZGFwdGVyKSAhPSAtMSkKKwkJCXJldCA9IC1FSU5QUk9HUkVTUzsKKwl9IGVsc2UgeworCQlhZGFwdGVyLT5od19zdGF0dXMgPSBNV0lGSUVYX0hXX1NUQVRVU19SRUFEWTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBkZWxldGVzIHRoZSBCU1MgcHJpb3JpdHkgdGFibGVzLgorICoKKyAqIFRoZSBmdW5jdGlvbiB0cmF2ZXJzZXMgdGhyb3VnaCBhbGwgdGhlIGFsbG9jYXRlZCBCU1MgcHJpb3JpdHkgbm9kZXMKKyAqIGluIGV2ZXJ5IEJTUyBwcmlvcml0eSB0YWJsZSBhbmQgZnJlZXMgdGhlbS4KKyAqLworc3RhdGljIHZvaWQgbXdpZmlleF9kZWxldGVfYnNzX3ByaW9fdGJsKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpCit7CisJaW50IGk7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IG13aWZpZXhfYnNzX3ByaW9fbm9kZSAqYnNzcHJpb19ub2RlLCAqdG1wX25vZGUsICoqY3VyOworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CisJc3BpbmxvY2tfdCAqbG9jazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPnByaXZfbnVtOyArK2kpIHsKKwkJaGVhZCA9ICZhZGFwdGVyLT5ic3NfcHJpb190YmxbaV0uYnNzX3ByaW9faGVhZDsKKwkJY3VyID0gJmFkYXB0ZXItPmJzc19wcmlvX3RibFtpXS5ic3NfcHJpb19jdXI7CisJCWxvY2sgPSAmYWRhcHRlci0+YnNzX3ByaW9fdGJsW2ldLmJzc19wcmlvX2xvY2s7CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogZGVsZXRlIEJTUyBwcmlvcml0eSB0YWJsZSwiCisJCQkJIiBpbmRleCA9ICVkLCBpID0gJWQsIGhlYWQgPSAlcCwgY3VyID0gJXBcbiIsCisJCQkgICAgICBwcml2LT5ic3NfaW5kZXgsIGksIGhlYWQsICpjdXIpOworCQlpZiAoKmN1cikgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpOworCQkJaWYgKGxpc3RfZW1wdHkoaGVhZCkpIHsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWJzc3ByaW9fbm9kZSA9IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwKKwkJCQkJc3RydWN0IG13aWZpZXhfYnNzX3ByaW9fbm9kZSwgbGlzdCk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKTsKKworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJzc3ByaW9fbm9kZSwgdG1wX25vZGUsIGhlYWQsCisJCQkJCQkgbGlzdCkgeworCQkJCWlmIChic3NwcmlvX25vZGUtPnByaXYgPT0gcHJpdikgeworCQkJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IERlbGV0ZSAiCisJCQkJCQkibm9kZSAlcCwgbmV4dCA9ICVwXG4iLAorCQkJCQkJYnNzcHJpb19ub2RlLCB0bXBfbm9kZSk7CisJCQkJCXNwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKTsKKwkJCQkJbGlzdF9kZWwoJmJzc3ByaW9fbm9kZS0+bGlzdCk7CisJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpOworCQkJCQlrZnJlZShic3NwcmlvX25vZGUpOworCQkJCX0KKwkJCX0KKwkJCSpjdXIgPSAoc3RydWN0IG13aWZpZXhfYnNzX3ByaW9fbm9kZSAqKWhlYWQ7CisJCX0KKwl9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2h1dGRvd24gdGhlIGRyaXZlci4KKyAqCisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCBzZXF1ZW50aWFsbHkgLQorICogICAgICAtIENoZWNrIGlmIGFscmVhZHkgc2h1dCBkb3duCisgKiAgICAgIC0gTWFrZSBzdXJlIHRoZSBtYWluIHByb2Nlc3MgaGFzIHN0b3BwZWQKKyAqICAgICAgLSBDbGVhbiB1cCB0aGUgVHggYW5kIFJ4IHF1ZXVlcworICogICAgICAtIERlbGV0ZSBCU1MgcHJpb3JpdHkgdGFibGVzCisgKiAgICAgIC0gRnJlZSB0aGUgYWRhcHRlcgorICogICAgICAtIE5vdGlmeSBjb21wbGV0aW9uCisgKi8KK2ludAorbXdpZmlleF9zaHV0ZG93bl9kcnYoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgcmV0ID0gLUVJTlBST0dSRVNTOworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXY7CisJczMyIGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIG13aWZpZXggYWxyZWFkeSBzaHV0ZG93biAqLworCWlmIChhZGFwdGVyLT5od19zdGF0dXMgPT0gTVdJRklFWF9IV19TVEFUVVNfTk9UX1JFQURZKQorCQlyZXR1cm4gMDsKKworCWFkYXB0ZXItPmh3X3N0YXR1cyA9IE1XSUZJRVhfSFdfU1RBVFVTX0NMT1NJTkc7CisJLyogd2FpdCBmb3IgbXdpZmlleF9wcm9jZXNzIHRvIGNvbXBsZXRlICovCisJaWYgKGFkYXB0ZXItPm13aWZpZXhfcHJvY2Vzc2luZykgeworCQlkZXZfd2FybihhZGFwdGVyLT5kZXYsICJtYWluIHByb2Nlc3MgaXMgc3RpbGwgcnVubmluZ1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogc2h1dCBkb3duIG13aWZpZXggKi8KKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IHNodXRkb3duIG13aWZpZXguLi5cbiIpOworCisJLyogQ2xlYW4gdXAgVHgvUnggcXVldWVzIGFuZCBkZWxldGUgQlNTIHByaW9yaXR5IHRhYmxlICovCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPnByaXZfbnVtOyBpKyspIHsKKwkJaWYgKGFkYXB0ZXItPnByaXZbaV0pIHsKKwkJCXByaXYgPSBhZGFwdGVyLT5wcml2W2ldOworCisJCQltd2lmaWV4X2NsZWFuX3R4cngocHJpdik7CisJCQltd2lmaWV4X2RlbGV0ZV9ic3NfcHJpb190YmwocHJpdik7CisJCX0KKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+bXdpZmlleF9sb2NrLCBmbGFncyk7CisKKwkvKiBGcmVlIGFkYXB0ZXIgc3RydWN0dXJlICovCisJbXdpZmlleF9mcmVlX2FkYXB0ZXIoYWRhcHRlcik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5td2lmaWV4X2xvY2ssIGZsYWdzKTsKKworCS8qIE5vdGlmeSBjb21wbGV0aW9uICovCisJcmV0ID0gbXdpZmlleF9zaHV0ZG93bl9md19jb21wbGV0ZShhZGFwdGVyKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGRvd25sb2FkcyB0aGUgZmlybXdhcmUgdG8gdGhlIGNhcmQuCisgKgorICogVGhlIGFjdHVhbCBkb3dubG9hZCBpcyBwcmVjZWRlZCBieSB0d28gc2FuaXR5IGNoZWNrcyAtCisgKiAgICAgIC0gQ2hlY2sgaWYgZmlybXdhcmUgaXMgYWxyZWFkeSBydW5uaW5nCisgKiAgICAgIC0gQ2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyB0aGUgd2lubmVyIHRvIGRvd25sb2FkIHRoZSBmaXJtd2FyZQorICoKKyAqIC4uLmFuZCBmb2xsb3dlZCBieSBhbm90aGVyIC0KKyAqICAgICAgLSBDaGVjayBpZiB0aGUgZmlybXdhcmUgaXMgZG93bmxvYWRlZCBzdWNjZXNzZnVsbHkKKyAqCisgKiBBZnRlciBkb3dubG9hZCBpcyBzdWNjZXNzZnVsbHkgY29tcGxldGVkLCB0aGUgaG9zdCBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkLgorICovCitpbnQgbXdpZmlleF9kbmxkX2Z3KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCSAgICBzdHJ1Y3QgbXdpZmlleF9md19pbWFnZSAqcG1mdykKK3sKKwlpbnQgcmV0LCB3aW5uZXI7CisJdTMyIHBvbGxfbnVtID0gMTsKKworCS8qIENoZWNrIGlmIGZpcm13YXJlIGlzIGFscmVhZHkgcnVubmluZyAqLworCXJldCA9IGFkYXB0ZXItPmlmX29wcy5jaGVja19md19zdGF0dXMoYWRhcHRlciwgcG9sbF9udW0sICZ3aW5uZXIpOworCWlmICghcmV0KSB7CisJCWRldl9ub3RpY2UoYWRhcHRlci0+ZGV2LAorCQkJCSJXTEFOIEZXIGFscmVhZHkgcnVubmluZyEgU2tpcCBGVyBkb3dubG9hZFxuIik7CisJCWdvdG8gZG9uZTsKKwl9CisJcG9sbF9udW0gPSBNQVhfRklSTVdBUkVfUE9MTF9UUklFUzsKKworCS8qIENoZWNrIGlmIHdlIGFyZSB0aGUgd2lubmVyIGZvciBkb3dubG9hZGluZyBGVyAqLworCWlmICghd2lubmVyKSB7CisJCWRldl9ub3RpY2UoYWRhcHRlci0+ZGV2LAorCQkJCSJPdGhlciBpbnRlcmZhY2UgYWxyZWFkeSBydW5uaW5nISIKKwkJCQkiIFNraXAgRlcgZG93bmxvYWRcbiIpOworCQlwb2xsX251bSA9IE1BWF9NVUxUSV9JTlRFUkZBQ0VfUE9MTF9UUklFUzsKKwkJZ290byBwb2xsX2Z3OworCX0KKwlpZiAocG1mdykgeworCQkvKiBEb3dubG9hZCBmaXJtd2FyZSB3aXRoIGhlbHBlciAqLworCQlyZXQgPSBhZGFwdGVyLT5pZl9vcHMucHJvZ19mdyhhZGFwdGVyLCBwbWZ3KTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJwcm9nX2Z3IGZhaWxlZCByZXQ9JSN4XG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworcG9sbF9mdzoKKwkvKiBDaGVjayBpZiB0aGUgZmlybXdhcmUgaXMgZG93bmxvYWRlZCBzdWNjZXNzZnVsbHkgb3Igbm90ICovCisJcmV0ID0gYWRhcHRlci0+aWZfb3BzLmNoZWNrX2Z3X3N0YXR1cyhhZGFwdGVyLCBwb2xsX251bSwgTlVMTCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIkZXIGZhaWxlZCB0byBiZSBhY3RpdmUgaW4gdGltZVxuIik7CisJCXJldHVybiAtMTsKKwl9Citkb25lOgorCS8qIHJlLWVuYWJsZSBob3N0IGludGVycnVwdCBmb3IgbXdpZmlleCBhZnRlciBmdyBkbmxkIGlzIHN1Y2Nlc3NmdWwgKi8KKwlhZGFwdGVyLT5pZl9vcHMuZW5hYmxlX2ludChhZGFwdGVyKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9pb2N0bC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9pb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMWM1ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2lvY3RsLmgKQEAgLTAsMCArMSwzMzEgQEAKKy8qCisgKiBNYXJ2ZWxsIFdpcmVsZXNzIExBTiBkZXZpY2UgZHJpdmVyOiBpb2N0bCBkYXRhIHN0cnVjdHVyZXMgJiBBUElzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5hdGlvbmFsCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4KKyAqIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBvZiB3aGljaAorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0Egb3Igb24gdGhlCisgKiB3b3JsZHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQuCisgKgorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNlIHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dAorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLgorICovCisKKyNpZm5kZWYgX01XSUZJRVhfSU9DVExfSF8KKyNkZWZpbmUgX01XSUZJRVhfSU9DVExfSF8KKworI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorCitlbnVtIHsKKwlNV0lGSUVYX1NDQU5fVFlQRV9VTkNIQU5HRUQgPSAwLAorCU1XSUZJRVhfU0NBTl9UWVBFX0FDVElWRSwKKwlNV0lGSUVYX1NDQU5fVFlQRV9QQVNTSVZFCit9OworCitzdHJ1Y3QgbXdpZmlleF91c2VyX3NjYW4geworCXUzMiBzY2FuX2NmZ19sZW47CisJdTggc2Nhbl9jZmdfYnVmWzFdOworfTsKKworI2RlZmluZSBNV0lGSUVYX1BST01JU0NfTU9ERSAgICAgICAgICAgIDEKKyNkZWZpbmUgTVdJRklFWF9NVUxUSUNBU1RfTU9ERQkJMgorI2RlZmluZQlNV0lGSUVYX0FMTF9NVUxUSV9NT0RFCQk0CisjZGVmaW5lIE1XSUZJRVhfTUFYX01VTFRJQ0FTVF9MSVNUX1NJWkUJMzIKKworc3RydWN0IG13aWZpZXhfbXVsdGljYXN0X2xpc3QgeworCXUzMiBtb2RlOworCXUzMiBudW1fbXVsdGljYXN0X2FkZHI7CisJdTggbWFjX2xpc3RbTVdJRklFWF9NQVhfTVVMVElDQVNUX0xJU1RfU0laRV1bRVRIX0FMRU5dOworfTsKKworc3RydWN0IG13aWZpZXhfY2hhbl9mcmVxIHsKKwl1MzIgY2hhbm5lbDsKKwl1MzIgZnJlcTsKK307CisKK3N0cnVjdCBtd2lmaWV4X3NzaWRfYnNzaWQgeworCXN0cnVjdCBtd2lmaWV4XzgwMl8xMV9zc2lkIHNzaWQ7CisJdTggYnNzaWRbRVRIX0FMRU5dOworfTsKKworZW51bSB7CisJQkFORF9CID0gMSwKKwlCQU5EX0cgPSAyLAorCUJBTkRfQSA9IDQsCisJQkFORF9HTiA9IDgsCisJQkFORF9BTiA9IDE2LAorfTsKKworI2RlZmluZSBOT19TRUNfQ0hBTk5FTCAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU0VDX0NIQU5ORUxfQUJPVkUgICAgICAgICAgICAxCisjZGVmaW5lIFNFQ19DSEFOTkVMX0JFTE9XICAgICAgICAgICAgMworCitzdHJ1Y3QgbXdpZmlleF9kc19iYW5kX2NmZyB7CisJdTMyIGNvbmZpZ19iYW5kczsKKwl1MzIgYWRob2Nfc3RhcnRfYmFuZDsKKwl1MzIgYWRob2NfY2hhbm5lbDsKKwl1MzIgc2VjX2NoYW5fb2Zmc2V0OworfTsKKworZW51bSB7CisJQURIT0NfSURMRSwKKwlBREhPQ19TVEFSVEVELAorCUFESE9DX0pPSU5FRCwKKwlBREhPQ19DT0FMRVNDRUQKK307CisKK3N0cnVjdCBtd2lmaWV4X2RzX2dldF9zdGF0cyB7CisJdTMyIG1jYXN0X3R4X2ZyYW1lOworCXUzMiBmYWlsZWQ7CisJdTMyIHJldHJ5OworCXUzMiBtdWx0aV9yZXRyeTsKKwl1MzIgZnJhbWVfZHVwOworCXUzMiBydHNfc3VjY2VzczsKKwl1MzIgcnRzX2ZhaWx1cmU7CisJdTMyIGFja19mYWlsdXJlOworCXUzMiByeF9mcmFnOworCXUzMiBtY2FzdF9yeF9mcmFtZTsKKwl1MzIgZmNzX2Vycm9yOworCXUzMiB0eF9mcmFtZTsKKwl1MzIgd2VwX2ljdl9lcnJvcls0XTsKK307CisKKyNkZWZpbmUgQkNOX1JTU0lfQVZHX01BU0sgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEJDTl9ORl9BVkdfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBBTExfUlNTSV9JTkZPX01BU0sgICAgICAgICAgICAgIDB4MDAwMDBmZmYKKworc3RydWN0IG13aWZpZXhfZHNfZ2V0X3NpZ25hbCB7CisJLyoKKwkgKiBCaXQwOiAgTGFzdCBCZWFjb24gUlNTSSwgIEJpdDE6ICBBdmVyYWdlIEJlYWNvbiBSU1NJLAorCSAqIEJpdDI6ICBMYXN0IERhdGEgUlNTSSwgICAgQml0MzogIEF2ZXJhZ2UgRGF0YSBSU1NJLAorCSAqIEJpdDQ6ICBMYXN0IEJlYWNvbiBTTlIsICAgQml0NTogIEF2ZXJhZ2UgQmVhY29uIFNOUiwKKwkgKiBCaXQ2OiAgTGFzdCBEYXRhIFNOUiwgICAgIEJpdDc6ICBBdmVyYWdlIERhdGEgU05SLAorCSAqIEJpdDg6ICBMYXN0IEJlYWNvbiBORiwgICAgQml0OTogIEF2ZXJhZ2UgQmVhY29uIE5GLAorCSAqIEJpdDEwOiBMYXN0IERhdGEgTkYsICAgICAgQml0MTE6IEF2ZXJhZ2UgRGF0YSBORgorCSAqLworCXUxNiBzZWxlY3RvcjsKKwlzMTYgYmNuX3Jzc2lfbGFzdDsKKwlzMTYgYmNuX3Jzc2lfYXZnOworCXMxNiBkYXRhX3Jzc2lfbGFzdDsKKwlzMTYgZGF0YV9yc3NpX2F2ZzsKKwlzMTYgYmNuX3Nucl9sYXN0OworCXMxNiBiY25fc25yX2F2ZzsKKwlzMTYgZGF0YV9zbnJfbGFzdDsKKwlzMTYgZGF0YV9zbnJfYXZnOworCXMxNiBiY25fbmZfbGFzdDsKKwlzMTYgYmNuX25mX2F2ZzsKKwlzMTYgZGF0YV9uZl9sYXN0OworCXMxNiBkYXRhX25mX2F2ZzsKK307CisKKyNkZWZpbmUgTVdJRklFWF9NQVhfVkVSX1NUUl9MRU4gICAgMTI4CisKK3N0cnVjdCBtd2lmaWV4X3Zlcl9leHQgeworCXUzMiB2ZXJzaW9uX3N0cl9zZWw7CisJY2hhciB2ZXJzaW9uX3N0cltNV0lGSUVYX01BWF9WRVJfU1RSX0xFTl07Cit9OworCitzdHJ1Y3QgbXdpZmlleF9ic3NfaW5mbyB7CisJdTMyIGJzc19tb2RlOworCXN0cnVjdCBtd2lmaWV4XzgwMl8xMV9zc2lkIHNzaWQ7CisJdTMyIHNjYW5fdGFibGVfaWR4OworCXUzMiBic3NfY2hhbjsKKwl1MzIgcmVnaW9uX2NvZGU7CisJdTMyIG1lZGlhX2Nvbm5lY3RlZDsKKwl1MzIgbWF4X3Bvd2VyX2xldmVsOworCXUzMiBtaW5fcG93ZXJfbGV2ZWw7CisJdTMyIGFkaG9jX3N0YXRlOworCXNpZ25lZCBpbnQgYmNuX25mX2xhc3Q7CisJdTMyIHdlcF9zdGF0dXM7CisJdTMyIGlzX2hzX2NvbmZpZ3VyZWQ7CisJdTMyIGlzX2RlZXBfc2xlZXA7CisJdTggYnNzaWRbRVRIX0FMRU5dOworfTsKKworI2RlZmluZSBNQVhfTlVNX1RJRCAgICAgOAorCisjZGVmaW5lIE1BWF9SWF9XSU5TSVpFICA2NAorCitzdHJ1Y3QgbXdpZmlleF9kc19yeF9yZW9yZGVyX3RibCB7CisJdTE2IHRpZDsKKwl1OCB0YVtFVEhfQUxFTl07CisJdTMyIHN0YXJ0X3dpbjsKKwl1MzIgd2luX3NpemU7CisJdTMyIGJ1ZmZlcltNQVhfUlhfV0lOU0laRV07Cit9OworCitzdHJ1Y3QgbXdpZmlleF9kc190eF9iYV9zdHJlYW1fdGJsIHsKKwl1MTYgdGlkOworCXU4IHJhW0VUSF9BTEVOXTsKK307CisKKyNkZWZpbmUgREJHX0NNRF9OVU0JNQorCitzdHJ1Y3QgbXdpZmlleF9kZWJ1Z19pbmZvIHsKKwl1MzIgaW50X2NvdW50ZXI7CisJdTMyIHBhY2tldHNfb3V0W01BWF9OVU1fVElEXTsKKwl1MzIgbWF4X3R4X2J1Zl9zaXplOworCXUzMiB0eF9idWZfc2l6ZTsKKwl1MzIgY3Vycl90eF9idWZfc2l6ZTsKKwl1MzIgdHhfdGJsX251bTsKKwlzdHJ1Y3QgbXdpZmlleF9kc190eF9iYV9zdHJlYW1fdGJsCisJCXR4X3RibFtNV0lGSUVYX01BWF9UWF9CQVNUUkVBTV9TVVBQT1JURURdOworCXUzMiByeF90YmxfbnVtOworCXN0cnVjdCBtd2lmaWV4X2RzX3J4X3Jlb3JkZXJfdGJsIHJ4X3RibAorCQlbTVdJRklFWF9NQVhfUlhfQkFTVFJFQU1fU1VQUE9SVEVEXTsKKwl1MTYgcHNfbW9kZTsKKwl1MzIgcHNfc3RhdGU7CisJdTggaXNfZGVlcF9zbGVlcDsKKwl1OCBwbV93YWtldXBfY2FyZF9yZXE7CisJdTMyIHBtX3dha2V1cF9md190cnk7CisJdTggaXNfaHNfY29uZmlndXJlZDsKKwl1OCBoc19hY3RpdmF0ZWQ7CisJdTMyIG51bV9jbWRfaG9zdF90b19jYXJkX2ZhaWx1cmU7CisJdTMyIG51bV9jbWRfc2xlZXBfY2ZtX2hvc3RfdG9fY2FyZF9mYWlsdXJlOworCXUzMiBudW1fdHhfaG9zdF90b19jYXJkX2ZhaWx1cmU7CisJdTMyIG51bV9ldmVudF9kZWF1dGg7CisJdTMyIG51bV9ldmVudF9kaXNhc3NvYzsKKwl1MzIgbnVtX2V2ZW50X2xpbmtfbG9zdDsKKwl1MzIgbnVtX2NtZF9kZWF1dGg7CisJdTMyIG51bV9jbWRfYXNzb2Nfc3VjY2VzczsKKwl1MzIgbnVtX2NtZF9hc3NvY19mYWlsdXJlOworCXUzMiBudW1fdHhfdGltZW91dDsKKwl1MzIgbnVtX2NtZF90aW1lb3V0OworCXUxNiB0aW1lb3V0X2NtZF9pZDsKKwl1MTYgdGltZW91dF9jbWRfYWN0OworCXUxNiBsYXN0X2NtZF9pZFtEQkdfQ01EX05VTV07CisJdTE2IGxhc3RfY21kX2FjdFtEQkdfQ01EX05VTV07CisJdTE2IGxhc3RfY21kX2luZGV4OworCXUxNiBsYXN0X2NtZF9yZXNwX2lkW0RCR19DTURfTlVNXTsKKwl1MTYgbGFzdF9jbWRfcmVzcF9pbmRleDsKKwl1MTYgbGFzdF9ldmVudFtEQkdfQ01EX05VTV07CisJdTE2IGxhc3RfZXZlbnRfaW5kZXg7CisJdTggZGF0YV9zZW50OworCXU4IGNtZF9zZW50OworCXU4IGNtZF9yZXNwX3JlY2VpdmVkOworCXU4IGV2ZW50X3JlY2VpdmVkOworfTsKKworI2RlZmluZSBNV0lGSUVYX0tFWV9JTkRFWF9VTklDQVNUCTB4NDAwMDAwMDAKKyNkZWZpbmUgV0FQSV9SWFBOX0xFTgkJCTE2CisKK3N0cnVjdCBtd2lmaWV4X2RzX2VuY3J5cHRfa2V5IHsKKwl1MzIga2V5X2Rpc2FibGU7CisJdTMyIGtleV9pbmRleDsKKwl1MzIga2V5X2xlbjsKKwl1OCBrZXlfbWF0ZXJpYWxbV0xBTl9NQVhfS0VZX0xFTl07CisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOworCXUzMiBpc193YXBpX2tleTsKKwl1OCB3YXBpX3J4cG5bV0FQSV9SWFBOX0xFTl07Cit9OworCitzdHJ1Y3QgbXdpZmlleF9yYXRlX2NmZyB7CisJdTMyIGFjdGlvbjsKKwl1MzIgaXNfcmF0ZV9hdXRvOworCXUzMiByYXRlOworfTsKKworc3RydWN0IG13aWZpZXhfcG93ZXJfY2ZnIHsKKwl1MzIgaXNfcG93ZXJfYXV0bzsKKwl1MzIgcG93ZXJfbGV2ZWw7Cit9OworCitzdHJ1Y3QgbXdpZmlleF9kc19oc19jZmcgeworCXUzMiBpc19pbnZva2VfaG9zdGNtZDsKKwkvKiAgQml0MDogbm9uLXVuaWNhc3QgZGF0YQorCSAqICBCaXQxOiB1bmljYXN0IGRhdGEKKwkgKiAgQml0MjogbWFjIGV2ZW50cworCSAqICBCaXQzOiBtYWdpYyBwYWNrZXQKKwkgKi8KKwl1MzIgY29uZGl0aW9uczsKKwl1MzIgZ3BpbzsKKwl1MzIgZ2FwOworfTsKKworI2RlZmluZSBERUVQX1NMRUVQX09OICAxCisjZGVmaW5lIERFRVBfU0xFRVBfSURMRV9USU1FCTEwMAorI2RlZmluZSBQU19NT0RFX0FVVE8JCTEKKworc3RydWN0IG13aWZpZXhfZHNfYXV0b19kcyB7CisJdTE2IGF1dG9fZHM7CisJdTE2IGlkbGVfdGltZTsKK307CisKK3N0cnVjdCBtd2lmaWV4X2RzX3BtX2NmZyB7CisJdW5pb24geworCQl1MzIgcHNfbW9kZTsKKwkJc3RydWN0IG13aWZpZXhfZHNfaHNfY2ZnIGhzX2NmZzsKKwkJc3RydWN0IG13aWZpZXhfZHNfYXV0b19kcyBhdXRvX2RlZXBfc2xlZXA7CisJCXUzMiBzbGVlcF9wZXJpb2Q7CisJfSBwYXJhbTsKK307CisKK3N0cnVjdCBtd2lmaWV4X2RzXzExbl90eF9jZmcgeworCXUxNiB0eF9odGNhcDsKKwl1MTYgdHhfaHRpbmZvOworfTsKKworc3RydWN0IG13aWZpZXhfZHNfMTFuX2Ftc2R1X2FnZ3JfY3RybCB7CisJdTE2IGVuYWJsZTsKKwl1MTYgY3Vycl9idWZfc2l6ZTsKK307CisKKyNkZWZpbmUgTVdJRklFWF9OVU1fT0ZfQ01EX0JVRkZFUgkyMAorI2RlZmluZSBNV0lGSUVYX1NJWkVfT0ZfQ01EX0JVRkZFUgkyMDQ4CisKK2VudW0geworCU1XSUZJRVhfSUVfVFlQRV9HRU5fSUUgPSAwLAorCU1XSUZJRVhfSUVfVFlQRV9BUlBfRklMVEVSLAorfTsKKworZW51bSB7CisJTVdJRklFWF9SRUdfTUFDID0gMSwKKwlNV0lGSUVYX1JFR19CQlAsCisJTVdJRklFWF9SRUdfUkYsCisJTVdJRklFWF9SRUdfUE1JQywKKwlNV0lGSUVYX1JFR19DQVUsCit9OworCitzdHJ1Y3QgbXdpZmlleF9kc19yZWdfcncgeworCV9fbGUzMiB0eXBlOworCV9fbGUzMiBvZmZzZXQ7CisJX19sZTMyIHZhbHVlOworfTsKKworI2RlZmluZSBNQVhfRUVQUk9NX0RBVEEgMjU2CisKK3N0cnVjdCBtd2lmaWV4X2RzX3JlYWRfZWVwcm9tIHsKKwlfX2xlMTYgb2Zmc2V0OworCV9fbGUxNiBieXRlX2NvdW50OworCXU4IHZhbHVlW01BWF9FRVBST01fREFUQV07Cit9OworCitzdHJ1Y3QgbXdpZmlleF9kc19taXNjX2dlbl9pZSB7CisJdTMyIHR5cGU7CisJdTMyIGxlbjsKKwl1OCBpZV9kYXRhW0lXX0NVU1RPTV9NQVhdOworfTsKKworc3RydWN0IG13aWZpZXhfZHNfbWlzY19jbWQgeworCXUzMiBsZW47CisJdTggY21kW01XSUZJRVhfU0laRV9PRl9DTURfQlVGRkVSXTsKK307CisKKyNkZWZpbmUgTVdJRklFWF9NQVhfVlNJRV9MRU4gICAgICAgKDI1NikKKyNkZWZpbmUgTVdJRklFWF9NQVhfVlNJRV9OVU0gICAgICAgKDgpCisjZGVmaW5lIE1XSUZJRVhfVlNJRV9NQVNLX1NDQU4gICAgIDB4MDEKKyNkZWZpbmUgTVdJRklFWF9WU0lFX01BU0tfQVNTT0MgICAgMHgwMgorI2RlZmluZSBNV0lGSUVYX1ZTSUVfTUFTS19BREhPQyAgICAweDA0CisKK2VudW0geworCU1XSUZJRVhfRlVOQ19JTklUID0gMSwKKwlNV0lGSUVYX0ZVTkNfU0hVVERPV04sCit9OworCisjZW5kaWYgLyogIV9NV0lGSUVYX0lPQ1RMX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2pvaW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvam9pbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYWIzZGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2pvaW4uYwpAQCAtMCwwICsxLDE0MjMgQEAKKy8qCisgKiBNYXJ2ZWxsIFdpcmVsZXNzIExBTiBkZXZpY2UgZHJpdmVyOiBhc3NvY2lhdGlvbiBhbmQgYWQtaG9jIHN0YXJ0L2pvaW4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwKKyAqIEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MQorICogKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbgorICogYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoCisgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQSBvciBvbiB0aGUKKyAqIHdvcmxkd2lkZSB3ZWIgYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dC4KKyAqCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0CisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuCisgKi8KKworI2luY2x1ZGUgImRlY2wuaCIKKyNpbmNsdWRlICJpb2N0bC5oIgorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJmdy5oIgorI2luY2x1ZGUgIm1haW4uaCIKKyNpbmNsdWRlICJ3bW0uaCIKKyNpbmNsdWRlICIxMW4uaCIKKworI2RlZmluZSBDQVBJTkZPX01BU0sgICAgKH4oQklUKDE1KSB8IEJJVCgxNCkgfCBCSVQoMTIpIHwgQklUKDExKSB8IEJJVCg5KSkpCisKKy8qCisgKiBBcHBlbmQgYSBnZW5lcmljIElFIGFzIGEgcGFzcyB0aHJvdWdoIFRMViB0byBhIFRMViBidWZmZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgbmV0d29yayBqb2luIGNvbW1hbmQgcHJlcGFyYXRpb24gcm91dGluZS4KKyAqCisgKiBJZiB0aGUgSUUgYnVmZmVyIGhhcyBiZWVuIHNldHVwIGJ5IHRoZSBhcHBsaWNhdGlvbiwgdGhpcyByb3V0aW5lIGFwcGVuZHMKKyAqIHRoZSBidWZmZXIgYXMgYSBwYXNzIHRocm91Z2ggVExWIHR5cGUgdG8gdGhlIHJlcXVlc3QuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfY21kX2FwcGVuZF9nZW5lcmljX2llKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHU4ICoqYnVmZmVyKQoreworCWludCByZXRfbGVuID0gMDsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIgaWVfaGVhZGVyOworCisJLyogTnVsbCBDaGVja3MgKi8KKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIDA7CisJaWYgKCEoKmJ1ZmZlcikpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBhIGdlbmVyaWMgaWUgYnVmZmVyIHNldHVwLCBhcHBlbmQgaXQgdG8gdGhlIHJldHVybgorCSAqICAgcGFyYW1ldGVyIGJ1ZmZlciBwb2ludGVyLgorCSAqLworCWlmIChwcml2LT5nZW5faWVfYnVmX2xlbikgeworCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86ICVzOiBhcHBlbmQgZ2VuZXJpYyAlZCB0byAlcFxuIiwKKwkJCQlfX2Z1bmNfXywgcHJpdi0+Z2VuX2llX2J1Zl9sZW4sICpidWZmZXIpOworCisJCS8qIFdyYXAgdGhlIGdlbmVyaWMgSUUgYnVmZmVyIHdpdGggYSBwYXNzIHRocm91Z2ggVExWIHR5cGUgKi8KKwkJaWVfaGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihUTFZfVFlQRV9QQVNTVEhST1VHSCk7CisJCWllX2hlYWRlci5sZW4gPSBjcHVfdG9fbGUxNihwcml2LT5nZW5faWVfYnVmX2xlbik7CisJCW1lbWNweSgqYnVmZmVyLCAmaWVfaGVhZGVyLCBzaXplb2YoaWVfaGVhZGVyKSk7CisKKwkJLyogSW5jcmVtZW50IHRoZSByZXR1cm4gc2l6ZSBhbmQgdGhlIHJldHVybiBidWZmZXIgcG9pbnRlcgorCQkgICBwYXJhbSAqLworCQkqYnVmZmVyICs9IHNpemVvZihpZV9oZWFkZXIpOworCQlyZXRfbGVuICs9IHNpemVvZihpZV9oZWFkZXIpOworCisJCS8qIENvcHkgdGhlIGdlbmVyaWMgSUUgYnVmZmVyIHRvIHRoZSBvdXRwdXQgYnVmZmVyLCBhZHZhbmNlCisJCSAgIHBvaW50ZXIgKi8KKwkJbWVtY3B5KCpidWZmZXIsIHByaXYtPmdlbl9pZV9idWYsIHByaXYtPmdlbl9pZV9idWZfbGVuKTsKKworCQkvKiBJbmNyZW1lbnQgdGhlIHJldHVybiBzaXplIGFuZCB0aGUgcmV0dXJuIGJ1ZmZlciBwb2ludGVyCisJCSAgIHBhcmFtICovCisJCSpidWZmZXIgKz0gcHJpdi0+Z2VuX2llX2J1Zl9sZW47CisJCXJldF9sZW4gKz0gcHJpdi0+Z2VuX2llX2J1Zl9sZW47CisKKwkJLyogUmVzZXQgdGhlIGdlbmVyaWMgSUUgYnVmZmVyICovCisJCXByaXYtPmdlbl9pZV9idWZfbGVuID0gMDsKKwl9CisKKwkvKiByZXR1cm4gdGhlIGxlbmd0aCBhcHBlbmRlZCB0byB0aGUgYnVmZmVyICovCisJcmV0dXJuIHJldF9sZW47Cit9CisKKy8qCisgKiBBcHBlbmQgVFNGIHRyYWNraW5nIGluZm8gZnJvbSB0aGUgc2NhbiB0YWJsZSBmb3IgdGhlIHRhcmdldCBBUC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBuZXR3b3JrIGpvaW4gY29tbWFuZCBwcmVwYXJhdGlvbiByb3V0aW5lLgorICoKKyAqIFRoZSBUU0YgdGFibGUgVFNGIHNlbnQgdG8gdGhlIGZpcm13YXJlIGNvbnRhaW5zIHR3byBUU0YgdmFsdWVzOgorICogICAgICAtIFRoZSBUU0Ygb2YgdGhlIHRhcmdldCBBUCBmcm9tIGl0cyBwcmV2aW91cyBiZWFjb24vcHJvYmUgcmVzcG9uc2UKKyAqICAgICAgLSBUaGUgVFNGIHRpbWVzdGFtcCBvZiBvdXIgbG9jYWwgTUFDIGF0IHRoZSB0aW1lIHdlIG9ic2VydmVkIHRoZQorICogICAgICAgIGJlYWNvbi9wcm9iZSByZXNwb25zZS4KKyAqCisgKiBUaGUgZmlybXdhcmUgdXNlcyB0aGUgdGltZXN0YW1wIHZhbHVlcyB0byBzZXQgYW4gaW5pdGlhbCBUU0YgdmFsdWUKKyAqIGluIHRoZSBNQUMgZm9yIHRoZSBuZXcgYXNzb2NpYXRpb24gYWZ0ZXIgYSByZWFzc29jaWF0aW9uIGF0dGVtcHQuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfY21kX2FwcGVuZF90c2ZfdGx2KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHU4ICoqYnVmZmVyLAorCQkJICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MpCit7CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfdHNmX3RpbWVzdGFtcCB0c2ZfdGx2OworCV9fbGU2NCB0c2ZfdmFsOworCisJLyogTnVsbCBDaGVja3MgKi8KKwlpZiAoYnVmZmVyID09IE5VTEwpCisJCXJldHVybiAwOworCWlmICgqYnVmZmVyID09IE5VTEwpCisJCXJldHVybiAwOworCisJbWVtc2V0KCZ0c2ZfdGx2LCAweDAwLCBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfdHNmX3RpbWVzdGFtcCkpOworCisJdHNmX3Rsdi5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFRMVl9UWVBFX1RTRlRJTUVTVEFNUCk7CisJdHNmX3Rsdi5oZWFkZXIubGVuID0gY3B1X3RvX2xlMTYoMiAqIHNpemVvZih0c2ZfdmFsKSk7CisKKwltZW1jcHkoKmJ1ZmZlciwgJnRzZl90bHYsIHNpemVvZih0c2ZfdGx2LmhlYWRlcikpOworCSpidWZmZXIgKz0gc2l6ZW9mKHRzZl90bHYuaGVhZGVyKTsKKworCS8qIFRTRiBhdCB0aGUgdGltZSB3aGVuIGJlYWNvbi9wcm9iZV9yZXNwb25zZSB3YXMgcmVjZWl2ZWQgKi8KKwl0c2ZfdmFsID0gY3B1X3RvX2xlNjQoYnNzX2Rlc2MtPm5ldHdvcmtfdHNmKTsKKwltZW1jcHkoKmJ1ZmZlciwgJnRzZl92YWwsIHNpemVvZih0c2ZfdmFsKSk7CisJKmJ1ZmZlciArPSBzaXplb2YodHNmX3ZhbCk7CisKKwltZW1jcHkoJnRzZl92YWwsIGJzc19kZXNjLT50aW1lX3N0YW1wLCBzaXplb2YodHNmX3ZhbCkpOworCisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiAlczogVFNGIG9mZnNldCBjYWxjOiAlMDE2bGx4IC0gIgorCQkJIiUwMTZsbHhcbiIsIF9fZnVuY19fLCB0c2ZfdmFsLCBic3NfZGVzYy0+bmV0d29ya190c2YpOworCisJbWVtY3B5KCpidWZmZXIsICZ0c2ZfdmFsLCBzaXplb2YodHNmX3ZhbCkpOworCSpidWZmZXIgKz0gc2l6ZW9mKHRzZl92YWwpOworCisJcmV0dXJuIHNpemVvZih0c2ZfdGx2LmhlYWRlcikgKyAoMiAqIHNpemVvZih0c2ZfdmFsKSk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGZpbmRzIG91dCB0aGUgY29tbW9uIHJhdGVzIGJldHdlZW4gcmF0ZTEgYW5kIHJhdGUyLgorICoKKyAqIEl0IHdpbGwgZmlsbCBjb21tb24gcmF0ZXMgaW4gcmF0ZTEgYXMgb3V0cHV0IGlmIGZvdW5kLgorICoKKyAqIE5PVEU6IFNldHRpbmcgdGhlIE1TQiBvZiB0aGUgYmFzaWMgcmF0ZXMgbmVlZHMgdG8gYmUgdGFrZW4KKyAqIGNhcmUgb2YsIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICovCitzdGF0aWMgaW50IG13aWZpZXhfZ2V0X2NvbW1vbl9yYXRlcyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqcmF0ZTEsCisJCQkJICAgIHUzMiByYXRlMV9zaXplLCB1OCAqcmF0ZTIsIHUzMiByYXRlMl9zaXplKQoreworCWludCByZXQ7CisJdTggKnB0ciA9IHJhdGUxLCAqdG1wOworCXUzMiBpLCBqOworCisJdG1wID0ga21hbGxvYyhyYXRlMV9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRtcCkgeworCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgImZhaWxlZCB0byBhbGxvYyB0bXAgYnVmXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtY3B5KHRtcCwgcmF0ZTEsIHJhdGUxX3NpemUpOworCW1lbXNldChyYXRlMSwgMCwgcmF0ZTFfc2l6ZSk7CisKKwlmb3IgKGkgPSAwOyByYXRlMltpXSAmJiBpIDwgcmF0ZTJfc2l6ZTsgaSsrKSB7CisJCWZvciAoaiA9IDA7IHRtcFtqXSAmJiBqIDwgcmF0ZTFfc2l6ZTsgaisrKSB7CisJCQkvKiBDaGVjayBjb21tb24gcmF0ZSwgZXhjbHVkaW5nIHRoZSBiaXQgZm9yCisJCQkgICBiYXNpYyByYXRlICovCisJCQlpZiAoKHJhdGUyW2ldICYgMHg3RikgPT0gKHRtcFtqXSAmIDB4N0YpKSB7CisJCQkJKnJhdGUxKysgPSB0bXBbal07CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IFR4IGRhdGEgcmF0ZSBzZXQgdG8gJSN4XG4iLAorCQkJCQkJcHJpdi0+ZGF0YV9yYXRlKTsKKworCWlmICghcHJpdi0+aXNfZGF0YV9yYXRlX2F1dG8pIHsKKwkJd2hpbGUgKCpwdHIpIHsKKwkJCWlmICgoKnB0ciAmIDB4N2YpID09IHByaXYtPmRhdGFfcmF0ZSkgeworCQkJCXJldCA9IDA7CisJCQkJZ290byBkb25lOworCQkJfQorCQkJcHRyKys7CisJCX0KKwkJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsICJwcmV2aW91c2x5IHNldCBmaXhlZCBkYXRhIHJhdGUgJSN4IgorCQkJIiBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBuZXR3b3JrXG4iLAorCQkJcHJpdi0+ZGF0YV9yYXRlKTsKKworCQlyZXQgPSAtMTsKKwkJZ290byBkb25lOworCX0KKworCXJldCA9IDA7Citkb25lOgorCWtmcmVlKHRtcCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSByYXRlcyBzdXBwb3J0ZWQgYnkgYQorICogdGFyZ2V0IEJTUyBhbmQgb3VyIGFkYXB0ZXIgc2V0dGluZ3MgZm9yIHVzZSBpbiBhbiBhc3NvYy9qb2luIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfc2V0dXBfcmF0ZXNfZnJvbV9ic3NkZXNjKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJIHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjLAorCQkJCSB1OCAqb3V0X3JhdGVzLCB1MzIgKm91dF9yYXRlc19zaXplKQoreworCXU4IGNhcmRfcmF0ZXNbTVdJRklFWF9TVVBQT1JURURfUkFURVNdOworCXUzMiBjYXJkX3JhdGVzX3NpemU7CisKKwkvKiBDb3B5IEFQIHN1cHBvcnRlZCByYXRlcyAqLworCW1lbWNweShvdXRfcmF0ZXMsIGJzc19kZXNjLT5zdXBwb3J0ZWRfcmF0ZXMsIE1XSUZJRVhfU1VQUE9SVEVEX1JBVEVTKTsKKwkvKiBHZXQgdGhlIFNUQSBzdXBwb3J0ZWQgcmF0ZXMgKi8KKwljYXJkX3JhdGVzX3NpemUgPSBtd2lmaWV4X2dldF9hY3RpdmVfZGF0YV9yYXRlcyhwcml2LCBjYXJkX3JhdGVzKTsKKwkvKiBHZXQgdGhlIGNvbW1vbiByYXRlcyBiZXR3ZWVuIEFQIGFuZCBTVEEgc3VwcG9ydGVkIHJhdGVzICovCisJaWYgKG13aWZpZXhfZ2V0X2NvbW1vbl9yYXRlcyhwcml2LCBvdXRfcmF0ZXMsIE1XSUZJRVhfU1VQUE9SVEVEX1JBVEVTLAorCQkJCSAgICAgY2FyZF9yYXRlcywgY2FyZF9yYXRlc19zaXplKSkgeworCQkqb3V0X3JhdGVzX3NpemUgPSAwOworCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgIiVzOiBjYW5ub3QgZ2V0IGNvbW1vbiByYXRlc1xuIiwKKwkJCQkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCSpvdXRfcmF0ZXNfc2l6ZSA9CisJCW1pbl90KHNpemVfdCwgc3RybGVuKG91dF9yYXRlcyksIE1XSUZJRVhfU1VQUE9SVEVEX1JBVEVTKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiB1cGRhdGVzIHRoZSBzY2FuIGVudHJ5IFRTRiB0aW1lc3RhbXBzIHRvIHJlZmxlY3QKKyAqIGEgbmV3IGFzc29jaWF0aW9uLgorICovCitzdGF0aWMgdm9pZAorbXdpZmlleF91cGRhdGVfdHNmX3RpbWVzdGFtcHMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKm5ld19ic3NfZGVzYykKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwl1MzIgdGFibGVfaWR4OworCWxvbmcgbG9uZyBuZXdfdHNmX2Jhc2U7CisJc2lnbmVkIGxvbmcgbG9uZyB0c2ZfZGVsdGE7CisKKwltZW1jcHkoJm5ld190c2ZfYmFzZSwgbmV3X2Jzc19kZXNjLT50aW1lX3N0YW1wLCBzaXplb2YobmV3X3RzZl9iYXNlKSk7CisKKwl0c2ZfZGVsdGEgPSBuZXdfdHNmX2Jhc2UgLSBuZXdfYnNzX2Rlc2MtPm5ldHdvcmtfdHNmOworCisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBUU0Y6IHVwZGF0ZSBUU0YgdGltZXN0YW1wcywgIgorCQkiMHglMDE2bGx4IC0+IDB4JTAxNmxseFxuIiwKKwkgICAgICAgbmV3X2Jzc19kZXNjLT5uZXR3b3JrX3RzZiwgbmV3X3RzZl9iYXNlKTsKKworCWZvciAodGFibGVfaWR4ID0gMDsgdGFibGVfaWR4IDwgYWRhcHRlci0+bnVtX2luX3NjYW5fdGFibGU7CisJICAgICB0YWJsZV9pZHgrKykKKwkJYWRhcHRlci0+c2Nhbl90YWJsZVt0YWJsZV9pZHhdLm5ldHdvcmtfdHNmICs9IHRzZl9kZWx0YTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gYXBwZW5kcyBhIFdBUEkgSUUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgbmV0d29yayBqb2luIGNvbW1hbmQgcHJlcGFyYXRpb24gcm91dGluZS4KKyAqCisgKiBJZiB0aGUgSUUgYnVmZmVyIGhhcyBiZWVuIHNldHVwIGJ5IHRoZSBhcHBsaWNhdGlvbiwgdGhpcyByb3V0aW5lIGFwcGVuZHMKKyAqIHRoZSBidWZmZXIgYXMgYSBXQVBJIFRMViB0eXBlIHRvIHRoZSByZXF1ZXN0LgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X2NtZF9hcHBlbmRfd2FwaV9pZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqKmJ1ZmZlcikKK3sKKwlpbnQgcmV0TGVuID0gMDsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIgaWVfaGVhZGVyOworCisJLyogTnVsbCBDaGVja3MgKi8KKwlpZiAoYnVmZmVyID09IE5VTEwpCisJCXJldHVybiAwOworCWlmICgqYnVmZmVyID09IE5VTEwpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBhIHdhcGkgaWUgYnVmZmVyIHNldHVwLCBhcHBlbmQgaXQgdG8gdGhlIHJldHVybgorCSAqICAgcGFyYW1ldGVyIGJ1ZmZlciBwb2ludGVyLgorCSAqLworCWlmIChwcml2LT53YXBpX2llX2xlbikgeworCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImNtZDogYXBwZW5kIHdhcGkgaWUgJWQgdG8gJXBcbiIsCisJCQkJcHJpdi0+d2FwaV9pZV9sZW4sICpidWZmZXIpOworCisJCS8qIFdyYXAgdGhlIGdlbmVyaWMgSUUgYnVmZmVyIHdpdGggYSBwYXNzIHRocm91Z2ggVExWIHR5cGUgKi8KKwkJaWVfaGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihUTFZfVFlQRV9XQVBJX0lFKTsKKwkJaWVfaGVhZGVyLmxlbiA9IGNwdV90b19sZTE2KHByaXYtPndhcGlfaWVfbGVuKTsKKwkJbWVtY3B5KCpidWZmZXIsICZpZV9oZWFkZXIsIHNpemVvZihpZV9oZWFkZXIpKTsKKworCQkvKiBJbmNyZW1lbnQgdGhlIHJldHVybiBzaXplIGFuZCB0aGUgcmV0dXJuIGJ1ZmZlciBwb2ludGVyCisJCSAgIHBhcmFtICovCisJCSpidWZmZXIgKz0gc2l6ZW9mKGllX2hlYWRlcik7CisJCXJldExlbiArPSBzaXplb2YoaWVfaGVhZGVyKTsKKworCQkvKiBDb3B5IHRoZSB3YXBpIElFIGJ1ZmZlciB0byB0aGUgb3V0cHV0IGJ1ZmZlciwgYWR2YW5jZQorCQkgICBwb2ludGVyICovCisJCW1lbWNweSgqYnVmZmVyLCBwcml2LT53YXBpX2llLCBwcml2LT53YXBpX2llX2xlbik7CisKKwkJLyogSW5jcmVtZW50IHRoZSByZXR1cm4gc2l6ZSBhbmQgdGhlIHJldHVybiBidWZmZXIgcG9pbnRlcgorCQkgICBwYXJhbSAqLworCQkqYnVmZmVyICs9IHByaXYtPndhcGlfaWVfbGVuOworCQlyZXRMZW4gKz0gcHJpdi0+d2FwaV9pZV9sZW47CisKKwl9CisJLyogcmV0dXJuIHRoZSBsZW5ndGggYXBwZW5kZWQgdG8gdGhlIGJ1ZmZlciAqLworCXJldHVybiByZXRMZW47Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGFwcGVuZHMgcnNuIGllIHRsdiBmb3Igd3BhL3dwYTIgc2VjdXJpdHkgbW9kZXMuCisgKiBJdCBpcyBjYWxsZWQgZnJvbSB0aGUgbmV0d29yayBqb2luIGNvbW1hbmQgcHJlcGFyYXRpb24gcm91dGluZS4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X2FwcGVuZF9yc25faWVfd3BhX3dwYTIoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkJICB1OCAqKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19yc25fcGFyYW1fc2V0ICpyc25faWVfdGx2OworCWludCByc25faWVfbGVuOworCisJaWYgKCFidWZmZXIgfHwgISgqYnVmZmVyKSkKKwkJcmV0dXJuIDA7CisKKwlyc25faWVfdGx2ID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3Jzbl9wYXJhbV9zZXQgKikgKCpidWZmZXIpOworCXJzbl9pZV90bHYtPmhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoKHUxNikgcHJpdi0+d3BhX2llWzBdKTsKKwlyc25faWVfdGx2LT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KAorCQkJCSBsZTE2X3RvX2NwdShyc25faWVfdGx2LT5oZWFkZXIudHlwZSkgJiAweDAwRkYpOworCXJzbl9pZV90bHYtPmhlYWRlci5sZW4gPSBjcHVfdG9fbGUxNigodTE2KSBwcml2LT53cGFfaWVbMV0pOworCXJzbl9pZV90bHYtPmhlYWRlci5sZW4gPSBjcHVfdG9fbGUxNihsZTE2X3RvX2NwdShyc25faWVfdGx2LT5oZWFkZXIubGVuKQorCQkJCQkJCSYgMHgwMEZGKTsKKwlpZiAobGUxNl90b19jcHUocnNuX2llX3Rsdi0+aGVhZGVyLmxlbikgPD0gKHNpemVvZihwcml2LT53cGFfaWUpIC0gMikpCisJCW1lbWNweShyc25faWVfdGx2LT5yc25faWUsICZwcml2LT53cGFfaWVbMl0sCisJCQkJCWxlMTZfdG9fY3B1KHJzbl9pZV90bHYtPmhlYWRlci5sZW4pKTsKKwllbHNlCisJCXJldHVybiAtMTsKKworCXJzbl9pZV9sZW4gPSBzaXplb2YocnNuX2llX3Rsdi0+aGVhZGVyKSArCisJCQkJCWxlMTZfdG9fY3B1KHJzbl9pZV90bHYtPmhlYWRlci5sZW4pOworCSpidWZmZXIgKz0gcnNuX2llX2xlbjsKKworCXJldHVybiByc25faWVfbGVuOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBjb21tYW5kIGZvciBhc3NvY2lhdGlvbi4KKyAqCisgKiBUaGlzIHNldHMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIC0KKyAqICAgICAgLSBQZWVyIE1BQyBhZGRyZXNzCisgKiAgICAgIC0gTGlzdGVuIGludGVydmFsCisgKiAgICAgIC0gQmVhY29uIGludGVydmFsCisgKiAgICAgIC0gQ2FwYWJpbGl0eSBpbmZvcm1hdGlvbgorICoKKyAqIC4uLmFuZCB0aGUgZm9sbG93aW5nIFRMVnMsIGFzIHJlcXVpcmVkIC0KKyAqICAgICAgLSBTU0lEIFRMVgorICogICAgICAtIFBIWSBUTFYKKyAqICAgICAgLSBTUyBUTFYKKyAqICAgICAgLSBSYXRlcyBUTFYKKyAqICAgICAgLSBBdXRoZW50aWNhdGlvbiBUTFYKKyAqICAgICAgLSBDaGFubmVsIFRMVgorICogICAgICAtIFdQQS9XUEEyIElFCisgKiAgICAgIC0gMTFuIFRMVgorICogICAgICAtIFZlbmRvciBzcGVjaWZpYyBUTFYKKyAqICAgICAgLSBXTU0gVExWCisgKiAgICAgIC0gV0FQSSBJRQorICogICAgICAtIEdlbmVyaWMgSUUKKyAqICAgICAgLSBUU0YgVExWCisgKgorICogUHJlcGFyYXRpb24gYWxzbyBpbmNsdWRlcyAtCisgKiAgICAgIC0gU2V0dGluZyBjb21tYW5kIElEIGFuZCBwcm9wZXIgc2l6ZQorICogICAgICAtIEVuc3VyaW5nIGNvcnJlY3QgZW5kaWFuLW5lc3MKKyAqLworaW50IG13aWZpZXhfY21kXzgwMl8xMV9hc3NvY2lhdGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwKKwkJCQkgdm9pZCAqZGF0YV9idWYpCit7CisJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9hc3NvY2lhdGUgKmFzc29jID0gJmNtZC0+cGFyYW1zLmFzc29jaWF0ZTsKKwlzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYzsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19zc2lkX3BhcmFtX3NldCAqc3NpZF90bHY7CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfcGh5X3BhcmFtX3NldCAqcGh5X3RsdjsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19zc19wYXJhbV9zZXQgKnNzX3RsdjsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19yYXRlc19wYXJhbV9zZXQgKnJhdGVzX3RsdjsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19hdXRoX3R5cGUgKmF1dGhfdGx2OworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2NoYW5fbGlzdF9wYXJhbV9zZXQgKmNoYW5fdGx2OworCXU4IHJhdGVzW01XSUZJRVhfU1VQUE9SVEVEX1JBVEVTXTsKKwl1MzIgcmF0ZXNfc2l6ZTsKKwl1MTYgdG1wX2NhcDsKKwl1OCAqcG9zOworCWludCByc25faWVfbGVuID0gMDsKKworCWJzc19kZXNjID0gKHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKikgZGF0YV9idWY7CisJcG9zID0gKHU4ICopIGFzc29jOworCisJbXdpZmlleF9jZmdfdHhfYnVmKHByaXYsIGJzc19kZXNjKTsKKworCWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KEhvc3RDbWRfQ01EXzgwMl8xMV9BU1NPQ0lBVEUpOworCisJLyogU2F2ZSBzbyB3ZSBrbm93IHdoaWNoIEJTUyBEZXNjIHRvIHVzZSBpbiB0aGUgcmVzcG9uc2UgaGFuZGxlciAqLworCXByaXYtPmF0dGVtcHRlZF9ic3NfZGVzYyA9IGJzc19kZXNjOworCisJbWVtY3B5KGFzc29jLT5wZWVyX3N0YV9hZGRyLAorCSAgICAgICBic3NfZGVzYy0+bWFjX2FkZHJlc3MsIHNpemVvZihhc3NvYy0+cGVlcl9zdGFfYWRkcikpOworCXBvcyArPSBzaXplb2YoYXNzb2MtPnBlZXJfc3RhX2FkZHIpOworCisJLyogU2V0IHRoZSBsaXN0ZW4gaW50ZXJ2YWwgKi8KKwlhc3NvYy0+bGlzdGVuX2ludGVydmFsID0gY3B1X3RvX2xlMTYocHJpdi0+bGlzdGVuX2ludGVydmFsKTsKKwkvKiBTZXQgdGhlIGJlYWNvbiBwZXJpb2QgKi8KKwlhc3NvYy0+YmVhY29uX3BlcmlvZCA9IGNwdV90b19sZTE2KGJzc19kZXNjLT5iZWFjb25fcGVyaW9kKTsKKworCXBvcyArPSBzaXplb2YoYXNzb2MtPmNhcF9pbmZvX2JpdG1hcCk7CisJcG9zICs9IHNpemVvZihhc3NvYy0+bGlzdGVuX2ludGVydmFsKTsKKwlwb3MgKz0gc2l6ZW9mKGFzc29jLT5iZWFjb25fcGVyaW9kKTsKKwlwb3MgKz0gc2l6ZW9mKGFzc29jLT5kdGltX3BlcmlvZCk7CisKKwlzc2lkX3RsdiA9IChzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19zc2lkX3BhcmFtX3NldCAqKSBwb3M7CisJc3NpZF90bHYtPmhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoV0xBTl9FSURfU1NJRCk7CisJc3NpZF90bHYtPmhlYWRlci5sZW4gPSBjcHVfdG9fbGUxNigodTE2KSBic3NfZGVzYy0+c3NpZC5zc2lkX2xlbik7CisJbWVtY3B5KHNzaWRfdGx2LT5zc2lkLCBic3NfZGVzYy0+c3NpZC5zc2lkLAorCQlsZTE2X3RvX2NwdShzc2lkX3Rsdi0+aGVhZGVyLmxlbikpOworCXBvcyArPSBzaXplb2Yoc3NpZF90bHYtPmhlYWRlcikgKyBsZTE2X3RvX2NwdShzc2lkX3Rsdi0+aGVhZGVyLmxlbik7CisKKwlwaHlfdGx2ID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3BoeV9wYXJhbV9zZXQgKikgcG9zOworCXBoeV90bHYtPmhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoV0xBTl9FSURfRFNfUEFSQU1TKTsKKwlwaHlfdGx2LT5oZWFkZXIubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHBoeV90bHYtPmZoX2RzLmRzX3BhcmFtX3NldCkpOworCW1lbWNweSgmcGh5X3Rsdi0+ZmhfZHMuZHNfcGFyYW1fc2V0LAorCSAgICAgICAmYnNzX2Rlc2MtPnBoeV9wYXJhbV9zZXQuZHNfcGFyYW1fc2V0LmN1cnJlbnRfY2hhbiwKKwkgICAgICAgc2l6ZW9mKHBoeV90bHYtPmZoX2RzLmRzX3BhcmFtX3NldCkpOworCXBvcyArPSBzaXplb2YocGh5X3Rsdi0+aGVhZGVyKSArIGxlMTZfdG9fY3B1KHBoeV90bHYtPmhlYWRlci5sZW4pOworCisJc3NfdGx2ID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3NzX3BhcmFtX3NldCAqKSBwb3M7CisJc3NfdGx2LT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFdMQU5fRUlEX0NGX1BBUkFNUyk7CisJc3NfdGx2LT5oZWFkZXIubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHNzX3Rsdi0+Y2ZfaWJzcy5jZl9wYXJhbV9zZXQpKTsKKwlwb3MgKz0gc2l6ZW9mKHNzX3Rsdi0+aGVhZGVyKSArIGxlMTZfdG9fY3B1KHNzX3Rsdi0+aGVhZGVyLmxlbik7CisKKwkvKiBHZXQgdGhlIGNvbW1vbiByYXRlcyBzdXBwb3J0ZWQgYmV0d2VlbiB0aGUgZHJpdmVyIGFuZCB0aGUgQlNTIERlc2MgKi8KKwlpZiAobXdpZmlleF9zZXR1cF9yYXRlc19mcm9tX2Jzc2Rlc2MKKwkgICAgKHByaXYsIGJzc19kZXNjLCByYXRlcywgJnJhdGVzX3NpemUpKQorCQlyZXR1cm4gLTE7CisKKwkvKiBTYXZlIHRoZSBkYXRhIHJhdGVzIGludG8gQ3VycmVudCBCU1Mgc3RhdGUgc3RydWN0dXJlICovCisJcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLm51bV9vZl9yYXRlcyA9IHJhdGVzX3NpemU7CisJbWVtY3B5KCZwcml2LT5jdXJyX2Jzc19wYXJhbXMuZGF0YV9yYXRlcywgcmF0ZXMsIHJhdGVzX3NpemUpOworCisJLyogU2V0dXAgdGhlIFJhdGVzIFRMViBpbiB0aGUgYXNzb2NpYXRpb24gY29tbWFuZCAqLworCXJhdGVzX3RsdiA9IChzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19yYXRlc19wYXJhbV9zZXQgKikgcG9zOworCXJhdGVzX3Rsdi0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihXTEFOX0VJRF9TVVBQX1JBVEVTKTsKKwlyYXRlc190bHYtPmhlYWRlci5sZW4gPSBjcHVfdG9fbGUxNigodTE2KSByYXRlc19zaXplKTsKKwltZW1jcHkocmF0ZXNfdGx2LT5yYXRlcywgcmF0ZXMsIHJhdGVzX3NpemUpOworCXBvcyArPSBzaXplb2YocmF0ZXNfdGx2LT5oZWFkZXIpICsgcmF0ZXNfc2l6ZTsKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IEFTU09DX0NNRDogcmF0ZXMgc2l6ZSA9ICVkXG4iLAorCQkJCQlyYXRlc19zaXplKTsKKworCS8qIEFkZCB0aGUgQXV0aGVudGljYXRpb24gdHlwZSB0byBiZSB1c2VkIGZvciBBdXRoIGZyYW1lcyAqLworCWF1dGhfdGx2ID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2F1dGhfdHlwZSAqKSBwb3M7CisJYXV0aF90bHYtPmhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoVExWX1RZUEVfQVVUSF9UWVBFKTsKKwlhdXRoX3Rsdi0+aGVhZGVyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZihhdXRoX3Rsdi0+YXV0aF90eXBlKSk7CisJaWYgKHByaXYtPnNlY19pbmZvLndlcF9zdGF0dXMgPT0gTVdJRklFWF84MDJfMTFfV0VQX0VOQUJMRUQpCisJCWF1dGhfdGx2LT5hdXRoX3R5cGUgPSBjcHVfdG9fbGUxNigKKwkJCQkodTE2KSBwcml2LT5zZWNfaW5mby5hdXRoZW50aWNhdGlvbl9tb2RlKTsKKwllbHNlCisJCWF1dGhfdGx2LT5hdXRoX3R5cGUgPSBjcHVfdG9fbGUxNihOTDgwMjExX0FVVEhUWVBFX09QRU5fU1lTVEVNKTsKKworCXBvcyArPSBzaXplb2YoYXV0aF90bHYtPmhlYWRlcikgKyBsZTE2X3RvX2NwdShhdXRoX3Rsdi0+aGVhZGVyLmxlbik7CisKKwlpZiAoSVNfU1VQUE9SVF9NVUxUSV9CQU5EUyhwcml2LT5hZGFwdGVyKQorCSAgICAmJiAhKElTU1VQUF8xMU5FTkFCTEVEKHByaXYtPmFkYXB0ZXItPmZ3X2NhcF9pbmZvKQorCQkmJiAoIWJzc19kZXNjLT5kaXNhYmxlXzExbikKKwkJICYmIChwcml2LT5hZGFwdGVyLT5jb25maWdfYmFuZHMgJiBCQU5EX0dOCisJCSAgICAgfHwgcHJpdi0+YWRhcHRlci0+Y29uZmlnX2JhbmRzICYgQkFORF9BTikKKwkJICYmIChic3NfZGVzYy0+YmNuX2h0X2NhcCkKKwkgICAgKQorCQkpIHsKKwkJLyogQXBwZW5kIGEgY2hhbm5lbCBUTFYgZm9yIHRoZSBjaGFubmVsIHRoZSBhdHRlbXB0ZWQgQVAgd2FzCisJCSAgIGZvdW5kIG9uICovCisJCWNoYW5fdGx2ID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2NoYW5fbGlzdF9wYXJhbV9zZXQgKikgcG9zOworCQljaGFuX3Rsdi0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihUTFZfVFlQRV9DSEFOTElTVCk7CisJCWNoYW5fdGx2LT5oZWFkZXIubGVuID0KKwkJCWNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgbXdpZmlleF9jaGFuX3NjYW5fcGFyYW1fc2V0KSk7CisKKwkJbWVtc2V0KGNoYW5fdGx2LT5jaGFuX3NjYW5fcGFyYW0sIDB4MDAsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IG13aWZpZXhfY2hhbl9zY2FuX3BhcmFtX3NldCkpOworCQljaGFuX3Rsdi0+Y2hhbl9zY2FuX3BhcmFtWzBdLmNoYW5fbnVtYmVyID0KKwkJCShic3NfZGVzYy0+cGh5X3BhcmFtX3NldC5kc19wYXJhbV9zZXQuY3VycmVudF9jaGFuKTsKKwkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiBBc3NvYzogVExWIENoYW4gPSAlZFxuIiwKKwkJICAgICAgIGNoYW5fdGx2LT5jaGFuX3NjYW5fcGFyYW1bMF0uY2hhbl9udW1iZXIpOworCisJCWNoYW5fdGx2LT5jaGFuX3NjYW5fcGFyYW1bMF0ucmFkaW9fdHlwZSA9CisJCQltd2lmaWV4X2JhbmRfdG9fcmFkaW9fdHlwZSgodTgpIGJzc19kZXNjLT5ic3NfYmFuZCk7CisKKwkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiBBc3NvYzogVExWIEJhbmQgPSAlZFxuIiwKKwkJICAgICAgIGNoYW5fdGx2LT5jaGFuX3NjYW5fcGFyYW1bMF0ucmFkaW9fdHlwZSk7CisJCXBvcyArPSBzaXplb2YoY2hhbl90bHYtPmhlYWRlcikgKworCQkJc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2NoYW5fc2Nhbl9wYXJhbV9zZXQpOworCX0KKworCWlmICghcHJpdi0+d3BzLnNlc3Npb25fZW5hYmxlKSB7CisJCWlmIChwcml2LT5zZWNfaW5mby53cGFfZW5hYmxlZCB8fCBwcml2LT5zZWNfaW5mby53cGEyX2VuYWJsZWQpCisJCQlyc25faWVfbGVuID0gbXdpZmlleF9hcHBlbmRfcnNuX2llX3dwYV93cGEyKHByaXYsICZwb3MpOworCisJCWlmIChyc25faWVfbGVuID09IC0xKQorCQkJcmV0dXJuIC0xOworCX0KKworCWlmIChJU1NVUFBfMTFORU5BQkxFRChwcml2LT5hZGFwdGVyLT5md19jYXBfaW5mbykKKwkJJiYgKCFic3NfZGVzYy0+ZGlzYWJsZV8xMW4pCisJICAgICYmIChwcml2LT5hZGFwdGVyLT5jb25maWdfYmFuZHMgJiBCQU5EX0dOCisJCXx8IHByaXYtPmFkYXB0ZXItPmNvbmZpZ19iYW5kcyAmIEJBTkRfQU4pKQorCQltd2lmaWV4X2NtZF9hcHBlbmRfMTFuX3Rsdihwcml2LCBic3NfZGVzYywgJnBvcyk7CisKKwkvKiBBcHBlbmQgdmVuZG9yIHNwZWNpZmljIElFIFRMViAqLworCW13aWZpZXhfY21kX2FwcGVuZF92c2llX3Rsdihwcml2LCBNV0lGSUVYX1ZTSUVfTUFTS19BU1NPQywgJnBvcyk7CisKKwltd2lmaWV4X3dtbV9wcm9jZXNzX2Fzc29jaWF0aW9uX3JlcShwcml2LCAmcG9zLCAmYnNzX2Rlc2MtPndtbV9pZSwKKwkJCQkJICAgIGJzc19kZXNjLT5iY25faHRfY2FwKTsKKwlpZiAocHJpdi0+c2VjX2luZm8ud2FwaV9lbmFibGVkICYmIHByaXYtPndhcGlfaWVfbGVuKQorCQltd2lmaWV4X2NtZF9hcHBlbmRfd2FwaV9pZShwcml2LCAmcG9zKTsKKworCisJbXdpZmlleF9jbWRfYXBwZW5kX2dlbmVyaWNfaWUocHJpdiwgJnBvcyk7CisKKwltd2lmaWV4X2NtZF9hcHBlbmRfdHNmX3Rsdihwcml2LCAmcG9zLCBic3NfZGVzYyk7CisKKwljbWQtPnNpemUgPSBjcHVfdG9fbGUxNigodTE2KSAocG9zIC0gKHU4ICopIGFzc29jKSArIFNfRFNfR0VOKTsKKworCS8qIFNldCB0aGUgQ2FwYWJpbGl0eSBpbmZvIGF0IGxhc3QgKi8KKwl0bXBfY2FwID0gYnNzX2Rlc2MtPmNhcF9pbmZvX2JpdG1hcDsKKworCWlmIChwcml2LT5hZGFwdGVyLT5jb25maWdfYmFuZHMgPT0gQkFORF9CKQorCQl0bXBfY2FwICY9IH5XTEFOX0NBUEFCSUxJVFlfU0hPUlRfU0xPVF9USU1FOworCisJdG1wX2NhcCAmPSBDQVBJTkZPX01BU0s7CisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiBBU1NPQ19DTUQ6IHRtcF9jYXA9JTRYIENBUElORk9fTUFTSz0lNGxYXG4iLAorCSAgICAgICB0bXBfY2FwLCBDQVBJTkZPX01BU0spOworCWFzc29jLT5jYXBfaW5mb19iaXRtYXAgPSBjcHVfdG9fbGUxNih0bXBfY2FwKTsKKworCXJldHVybiAwOworfQorCisvKgorICogQXNzb2NpYXRpb24gZmlybXdhcmUgY29tbWFuZCByZXNwb25zZSBoYW5kbGVyCisgKgorICogVGhlIHJlc3BvbnNlIGJ1ZmZlciBmb3IgdGhlIGFzc29jaWF0aW9uIGNvbW1hbmQgaGFzIHRoZSBmb2xsb3dpbmcKKyAqIG1lbW9yeSBsYXlvdXQuCisgKgorICogRm9yIGNhc2VzIHdoZXJlIGFuIGFzc29jaWF0aW9uIHJlc3BvbnNlIHdhcyBub3QgcmVjZWl2ZWQgKGluZGljYXRlZAorICogYnkgdGhlIENhcEluZm8gYW5kIEFJZCBmaWVsZCk6CisgKgorICogICAgIC4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisgKiAgICAgfCAgSGVhZGVyKDQgKiBzaXplb2YodF91MTYpKTogIFN0YW5kYXJkIGNvbW1hbmQgcmVzcG9uc2UgaGRyIHwKKyAqICAgICAuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorICogICAgIHwgIGNhcF9pbmZvL0Vycm9yIFJldHVybih0X3UxNik6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgfCAgICAgICAgICAgMHhGRkZGKC0xKTogSW50ZXJuYWwgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICB8ICAgICAgICAgICAweEZGRkUoLTIpOiBBdXRoZW50aWNhdGlvbiB1bmhhbmRsZWQgbWVzc2FnZSAgICAgfAorICogICAgIHwgICAgICAgICAgIDB4RkZGRCgtMyk6IEF1dGhlbnRpY2F0aW9uIHJlZnVzZWQgICAgICAgICAgICAgICB8CisgKiAgICAgfCAgICAgICAgICAgMHhGRkZDKC00KTogVGltZW91dCB3YWl0aW5nIGZvciBBUCByZXNwb25zZSAgICAgIHwKKyAqICAgICAuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorICogICAgIHwgIHN0YXR1c19jb2RlKHRfdTE2KTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgfCAgICAgICAgSWYgY2FwX2luZm8gaXMgLTE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICB8ICAgICAgICAgICBBbiBpbnRlcm5hbCBmaXJtd2FyZSBmYWlsdXJlIHByZXZlbnRlZCB0aGUgICAgICAgfAorICogICAgIHwgICAgICAgICAgIGNvbW1hbmQgZnJvbSBiZWluZyBwcm9jZXNzZWQuICBUaGUgc3RhdHVzX2NvZGUgICB8CisgKiAgICAgfCAgICAgICAgICAgd2lsbCBiZSBzZXQgdG8gMS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgIHwgICAgICAgIElmIGNhcF9pbmZvIGlzIC0yOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgfCAgICAgICAgICAgQW4gYXV0aGVudGljYXRpb24gZnJhbWUgd2FzIHJlY2VpdmVkIGJ1dCB3YXMgICAgIHwKKyAqICAgICB8ICAgICAgICAgICBub3QgaGFuZGxlZCBieSB0aGUgZmlybXdhcmUuICBJRUVFIFN0YXR1cyAgICAgICAgfAorICogICAgIHwgICAgICAgICAgIGNvZGUgZm9yIHRoZSBmYWlsdXJlIGlzIHJldHVybmVkLiAgICAgICAgICAgICAgICB8CisgKiAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICB8ICAgICAgICBJZiBjYXBfaW5mbyBpcyAtMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgIHwgICAgICAgICAgIEFuIGF1dGhlbnRpY2F0aW9uIGZyYW1lIHdhcyByZWNlaXZlZCBhbmQgdGhlICAgICB8CisgKiAgICAgfCAgICAgICAgICAgc3RhdHVzX2NvZGUgaXMgdGhlIElFRUUgU3RhdHVzIHJlcG9ydGVkIGluIHRoZSAgIHwKKyAqICAgICB8ICAgICAgICAgICByZXNwb25zZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgfCAgICAgICAgSWYgY2FwX2luZm8gaXMgLTQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICB8ICAgICAgICAgICAoMSkgQXNzb2NpYXRpb24gcmVzcG9uc2UgdGltZW91dCAgICAgICAgICAgICAgICAgfAorICogICAgIHwgICAgICAgICAgICgyKSBBdXRoZW50aWNhdGlvbiByZXNwb25zZSB0aW1lb3V0ICAgICAgICAgICAgICB8CisgKiAgICAgLi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyAqICAgICB8ICBhX2lkKHRfdTE2KTogMHhGRkZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgIC4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisgKgorICoKKyAqIEZvciBjYXNlcyB3aGVyZSBhbiBhc3NvY2lhdGlvbiByZXNwb25zZSB3YXMgcmVjZWl2ZWQsIHRoZSBJRUVFCisgKiBzdGFuZGFyZCBhc3NvY2lhdGlvbiByZXNwb25zZSBmcmFtZSBpcyByZXR1cm5lZDoKKyAqCisgKiAgICAgLi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyAqICAgICB8ICBIZWFkZXIoNCAqIHNpemVvZih0X3UxNikpOiAgU3RhbmRhcmQgY29tbWFuZCByZXNwb25zZSBoZHIgfAorICogICAgIC4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisgKiAgICAgfCAgY2FwX2luZm8odF91MTYpOiBJRUVFIENhcGFiaWxpdHkgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorICogICAgIHwgIHN0YXR1c19jb2RlKHRfdTE2KTogSUVFRSBTdGF0dXMgQ29kZSAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgLi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyAqICAgICB8ICBhX2lkKHRfdTE2KTogSUVFRSBBc3NvY2lhdGlvbiBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgIC4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisgKiAgICAgfCAgSUVFRSBJRXModmFyaWFibGUpOiBBbnkgcmVjZWl2ZWQgSUVzIGNvbXByaXNpbmcgdGhlICAgICAgIHwKKyAqICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZyBwb3J0aW9uIG9mIGEgcmVjZWl2ZWQgICAgICAgfAorICogICAgIHwgICAgICAgICAgICAgICAgICAgICAgYXNzb2NpYXRpb24gcmVzcG9uc2UgZnJhbWUuICAgICAgICAgICB8CisgKiAgICAgLi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyAqCisgKiBGb3Igc2ltcGxpc3RpYyBoYW5kbGluZywgdGhlIHN0YXR1c19jb2RlIGZpZWxkIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZQorICogYW4gYXNzb2NpYXRpb24gc3VjY2VzcyAoMCkgb3IgZmFpbHVyZSAobm9uLXplcm8pLgorICovCitpbnQgbXdpZmlleF9yZXRfODAyXzExX2Fzc29jaWF0ZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqcmVzcCkKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgaWVlZV90eXBlc19hc3NvY19yc3AgKmFzc29jX3JzcDsKKwlzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYzsKKwl1OCBlbmFibGVfZGF0YSA9IHRydWU7CisKKwlhc3NvY19yc3AgPSAoc3RydWN0IGllZWVfdHlwZXNfYXNzb2NfcnNwICopICZyZXNwLT5wYXJhbXM7CisKKwlwcml2LT5hc3NvY19yc3Bfc2l6ZSA9IG1pbihsZTE2X3RvX2NwdShyZXNwLT5zaXplKSAtIFNfRFNfR0VOLAorCQkJCSAgICAgc2l6ZW9mKHByaXYtPmFzc29jX3JzcF9idWYpKTsKKworCW1lbWNweShwcml2LT5hc3NvY19yc3BfYnVmLCAmcmVzcC0+cGFyYW1zLCBwcml2LT5hc3NvY19yc3Bfc2l6ZSk7CisKKwlpZiAobGUxNl90b19jcHUoYXNzb2NfcnNwLT5zdGF0dXNfY29kZSkpIHsKKwkJcHJpdi0+YWRhcHRlci0+ZGJnLm51bV9jbWRfYXNzb2NfZmFpbHVyZSsrOworCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgIkFTU09DX1JFU1A6IGFzc29jaWF0aW9uIGZhaWxlZCwgIgorCQkgICAgICAgInN0YXR1cyBjb2RlID0gJWQsIGVycm9yID0gMHgleCwgYV9pZCA9IDB4JXhcbiIsCisJCSAgICAgICBsZTE2X3RvX2NwdShhc3NvY19yc3AtPnN0YXR1c19jb2RlKSwKKwkJICAgICAgIGxlMTZfdG9fY3B1KGFzc29jX3JzcC0+Y2FwX2luZm9fYml0bWFwKSwKKwkJICAgICAgIGxlMTZfdG9fY3B1KGFzc29jX3JzcC0+YV9pZCkpOworCisJCXJldCA9IC0xOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogU2VuZCBhIE1lZGlhIENvbm5lY3RlZCBldmVudCwgYWNjb3JkaW5nIHRvIHRoZSBTcGVjICovCisJcHJpdi0+bWVkaWFfY29ubmVjdGVkID0gdHJ1ZTsKKworCXByaXYtPmFkYXB0ZXItPnBzX3N0YXRlID0gUFNfU1RBVEVfQVdBS0U7CisJcHJpdi0+YWRhcHRlci0+cHBzX3VhcHNkX21vZGUgPSBmYWxzZTsKKwlwcml2LT5hZGFwdGVyLT50eF9sb2NrX2ZsYWcgPSBmYWxzZTsKKworCS8qIFNldCB0aGUgYXR0ZW1wdGVkIEJTU0lEIEluZGV4IHRvIGN1cnJlbnQgKi8KKwlic3NfZGVzYyA9IHByaXYtPmF0dGVtcHRlZF9ic3NfZGVzYzsKKworCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogQVNTT0NfUkVTUDogJXNcbiIsCisJCQkJCQlic3NfZGVzYy0+c3NpZC5zc2lkKTsKKworCS8qIE1ha2UgYSBjb3B5IG9mIGN1cnJlbnQgQlNTSUQgZGVzY3JpcHRvciAqLworCW1lbWNweSgmcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLAorCSAgICAgICBic3NfZGVzYywgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IpKTsKKworCS8qIFVwZGF0ZSBjdXJyX2Jzc19wYXJhbXMgKi8KKwlwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IuY2hhbm5lbAorCQk9IGJzc19kZXNjLT5waHlfcGFyYW1fc2V0LmRzX3BhcmFtX3NldC5jdXJyZW50X2NoYW47CisKKwlwcml2LT5jdXJyX2Jzc19wYXJhbXMuYmFuZCA9ICh1OCkgYnNzX2Rlc2MtPmJzc19iYW5kOworCisJLyoKKwkgKiBBZGp1c3QgdGhlIHRpbWVzdGFtcHMgaW4gdGhlIHNjYW4gdGFibGUgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIG5ld2x5CisJICogYXNzb2NpYXRlZCBBUCdzIFRTRgorCSAqLworCW13aWZpZXhfdXBkYXRlX3RzZl90aW1lc3RhbXBzKHByaXYsIGJzc19kZXNjKTsKKworCWlmIChic3NfZGVzYy0+d21tX2llLnZlbmRfaGRyLmVsZW1lbnRfaWQgPT0gV0xBTl9FSURfVkVORE9SX1NQRUNJRklDKQorCQlwcml2LT5jdXJyX2Jzc19wYXJhbXMud21tX2VuYWJsZWQgPSB0cnVlOworCWVsc2UKKwkJcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLndtbV9lbmFibGVkID0gZmFsc2U7CisKKwlpZiAoKHByaXYtPndtbV9yZXF1aXJlZCB8fCBic3NfZGVzYy0+YmNuX2h0X2NhcCkKKwkJCSYmIHByaXYtPmN1cnJfYnNzX3BhcmFtcy53bW1fZW5hYmxlZCkKKwkJcHJpdi0+d21tX2VuYWJsZWQgPSB0cnVlOworCWVsc2UKKwkJcHJpdi0+d21tX2VuYWJsZWQgPSBmYWxzZTsKKworCXByaXYtPmN1cnJfYnNzX3BhcmFtcy53bW1fdWFwc2RfZW5hYmxlZCA9IGZhbHNlOworCisJaWYgKHByaXYtPndtbV9lbmFibGVkKQorCQlwcml2LT5jdXJyX2Jzc19wYXJhbXMud21tX3VhcHNkX2VuYWJsZWQKKwkJCT0gKChic3NfZGVzYy0+d21tX2llLnFvc19pbmZvX2JpdG1hcCAmCisJCQkJSUVFRTgwMjExX1dNTV9JRV9BUF9RT1NJTkZPX1VBUFNEKSA/IDEgOiAwKTsKKworCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogQVNTT0NfUkVTUDogY3Vycl9wa3RfZmlsdGVyIGlzICUjeFxuIiwKKwkgICAgICAgcHJpdi0+Y3Vycl9wa3RfZmlsdGVyKTsKKwlpZiAocHJpdi0+c2VjX2luZm8ud3BhX2VuYWJsZWQgfHwgcHJpdi0+c2VjX2luZm8ud3BhMl9lbmFibGVkKQorCQlwcml2LT53cGFfaXNfZ3RrX3NldCA9IGZhbHNlOworCisJaWYgKHByaXYtPndtbV9lbmFibGVkKSB7CisJCS8qIERvbid0IHJlLWVuYWJsZSBjYXJyaWVyIHVudGlsIHdlIGdldCB0aGUgV01NX0dFVF9TVEFUVVMKKwkJICAgZXZlbnQgKi8KKwkJZW5hYmxlX2RhdGEgPSBmYWxzZTsKKwl9IGVsc2UgeworCQkvKiBTaW5jZSBXTU0gaXMgbm90IGVuYWJsZWQsIHNldHVwIHRoZSBxdWV1ZXMgd2l0aCB0aGUKKwkJICAgZGVmYXVsdHMgKi8KKwkJbXdpZmlleF93bW1fc2V0dXBfcXVldWVfcHJpb3JpdGllcyhwcml2LCBOVUxMKTsKKwkJbXdpZmlleF93bW1fc2V0dXBfYWNfZG93bmdyYWRlKHByaXYpOworCX0KKworCWlmIChlbmFibGVfZGF0YSkKKwkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkiaW5mbzogcG9zdCBhc3NvY2lhdGlvbiwgcmUtZW5hYmxpbmcgZGF0YSBmbG93XG4iKTsKKworCS8qIFJlc2V0IFNOUi9ORi9SU1NJIHZhbHVlcyAqLworCXByaXYtPmRhdGFfcnNzaV9sYXN0ID0gMDsKKwlwcml2LT5kYXRhX25mX2xhc3QgPSAwOworCXByaXYtPmRhdGFfcnNzaV9hdmcgPSAwOworCXByaXYtPmRhdGFfbmZfYXZnID0gMDsKKwlwcml2LT5iY25fcnNzaV9sYXN0ID0gMDsKKwlwcml2LT5iY25fbmZfbGFzdCA9IDA7CisJcHJpdi0+YmNuX3Jzc2lfYXZnID0gMDsKKwlwcml2LT5iY25fbmZfYXZnID0gMDsKKwlwcml2LT5yeHBkX3JhdGUgPSAwOworCXByaXYtPnJ4cGRfaHRpbmZvID0gMDsKKworCW13aWZpZXhfc2F2ZV9jdXJyX2Jjbihwcml2KTsKKworCXByaXYtPmFkYXB0ZXItPmRiZy5udW1fY21kX2Fzc29jX3N1Y2Nlc3MrKzsKKworCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogQVNTT0NfUkVTUDogYXNzb2NpYXRlZFxuIik7CisKKwkvKiBBZGQgdGhlIHJhX2xpc3QgaGVyZSBmb3IgaW5mcmEgbW9kZSBhcyB0aGVyZSB3aWxsIGJlIG9ubHkgMSByYQorCSAgIGFsd2F5cyAqLworCW13aWZpZXhfcmFsaXN0X2FkZChwcml2LAorCQkJICAgcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLm1hY19hZGRyZXNzKTsKKworCWlmICghbmV0aWZfY2Fycmllcl9vayhwcml2LT5uZXRkZXYpKQorCQluZXRpZl9jYXJyaWVyX29uKHByaXYtPm5ldGRldik7CisJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQocHJpdi0+bmV0ZGV2KSkKKwkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5uZXRkZXYpOworCisJaWYgKHByaXYtPnNlY19pbmZvLndwYV9lbmFibGVkIHx8IHByaXYtPnNlY19pbmZvLndwYTJfZW5hYmxlZCkKKwkJcHJpdi0+c2Nhbl9ibG9jayA9IHRydWU7CisKK2RvbmU6CisJLyogTmVlZCB0byBpbmRpY2F0ZSBJT0NUTCBjb21wbGV0ZSAqLworCWlmIChhZGFwdGVyLT5jdXJyX2NtZC0+d2FpdF9xX2VuYWJsZWQpIHsKKwkJaWYgKHJldCkKKwkJCWFkYXB0ZXItPmNtZF93YWl0X3Euc3RhdHVzID0gLTE7CisJCWVsc2UKKwkJCWFkYXB0ZXItPmNtZF93YWl0X3Euc3RhdHVzID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBjb21tYW5kIGZvciBhZC1ob2Mgc3RhcnQuCisgKgorICogRHJpdmVyIHdpbGwgZmlsbCB1cCBTU0lELCBCU1MgbW9kZSwgSUJTUyBwYXJhbWV0ZXJzLCBwaHlzaWNhbAorICogcGFyYW1ldGVycywgcHJvYmUgZGVsYXksIGFuZCBjYXBhYmlsaXR5IGluZm9ybWF0aW9uLiBGaXJtd2FyZQorICogd2lsbCBmaWxsIHVwIGJlYWNvbiBwZXJpb2QsIGJhc2ljIHJhdGVzIGFuZCBvcGVyYXRpb25hbCByYXRlcy4KKyAqCisgKiBJbiBhZGRpdGlvbiwgdGhlIGZvbGxvd2luZyBUTFZzIGFyZSBhZGRlZCAtCisgKiAgICAgIC0gQ2hhbm5lbCBUTFYKKyAqICAgICAgLSBWZW5kb3Igc3BlY2lmaWMgSUUKKyAqICAgICAgLSBXUEEvV1BBMiBJRQorICogICAgICAtIEhUIENhcGFiaWxpdGllcyBJRQorICogICAgICAtIEhUIEluZm9ybWF0aW9uIElFCisgKgorICogUHJlcGFyYXRpb24gYWxzbyBpbmNsdWRlcyAtCisgKiAgICAgIC0gU2V0dGluZyBjb21tYW5kIElEIGFuZCBwcm9wZXIgc2l6ZQorICogICAgICAtIEVuc3VyaW5nIGNvcnJlY3QgZW5kaWFuLW5lc3MKKyAqLworaW50Cittd2lmaWV4X2NtZF84MDJfMTFfYWRfaG9jX3N0YXJ0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwgdm9pZCAqZGF0YV9idWYpCit7CisJaW50IHJzbl9pZV9sZW4gPSAwOworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfYWRfaG9jX3N0YXJ0ICphZGhvY19zdGFydCA9CisJCSZjbWQtPnBhcmFtcy5hZGhvY19zdGFydDsKKwlzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYzsKKwl1MzIgY21kX2FwcGVuZF9zaXplID0gMDsKKwl1MzIgaTsKKwl1MTYgdG1wX2NhcDsKKwl1aW50MTZfdCBodF9jYXBfaW5mbzsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19jaGFuX2xpc3RfcGFyYW1fc2V0ICpjaGFuX3RsdjsKKworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2h0Y2FwICpodF9jYXA7CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRpbmZvICpodF9pbmZvOworCXU4ICpwb3MgPSAodTggKikgYWRob2Nfc3RhcnQgKworCQkJc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfYWRfaG9jX3N0YXJ0KTsKKworCWlmICghYWRhcHRlcikKKwkJcmV0dXJuIC0xOworCisJY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoSG9zdENtZF9DTURfODAyXzExX0FEX0hPQ19TVEFSVCk7CisKKwlic3NfZGVzYyA9ICZwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3I7CisJcHJpdi0+YXR0ZW1wdGVkX2Jzc19kZXNjID0gYnNzX2Rlc2M7CisKKwkvKgorCSAqIEZpbGwgaW4gdGhlIHBhcmFtZXRlcnMgZm9yIDIgZGF0YSBzdHJ1Y3R1cmVzOgorCSAqICAgMS4gc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9hZF9ob2Nfc3RhcnQgY29tbWFuZAorCSAqICAgMi4gYnNzX2Rlc2MKKwkgKiBEcml2ZXIgd2lsbCBmaWxsIHVwIFNTSUQsIGJzc19tb2RlLElCU1MgcGFyYW0sIFBoeXNpY2FsIFBhcmFtLAorCSAqIHByb2JlIGRlbGF5LCBhbmQgQ2FwIGluZm8uCisJICogRmlybXdhcmUgd2lsbCBmaWxsIHVwIGJlYWNvbiBwZXJpb2QsIEJhc2ljIHJhdGVzCisJICogYW5kIG9wZXJhdGlvbmFsIHJhdGVzLgorCSAqLworCisJbWVtc2V0KGFkaG9jX3N0YXJ0LT5zc2lkLCAwLCBJRUVFODAyMTFfTUFYX1NTSURfTEVOKTsKKworCW1lbWNweShhZGhvY19zdGFydC0+c3NpZCwKKwkgICAgICAgKChzdHJ1Y3QgbXdpZmlleF84MDJfMTFfc3NpZCAqKSBkYXRhX2J1ZiktPnNzaWQsCisJICAgICAgICgoc3RydWN0IG13aWZpZXhfODAyXzExX3NzaWQgKikgZGF0YV9idWYpLT5zc2lkX2xlbik7CisKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IEFESE9DX1NfQ01EOiBTU0lEID0gJXNcbiIsCisJCQkJYWRob2Nfc3RhcnQtPnNzaWQpOworCisJbWVtc2V0KGJzc19kZXNjLT5zc2lkLnNzaWQsIDAsIElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pOworCW1lbWNweShic3NfZGVzYy0+c3NpZC5zc2lkLAorCSAgICAgICAoKHN0cnVjdCBtd2lmaWV4XzgwMl8xMV9zc2lkICopIGRhdGFfYnVmKS0+c3NpZCwKKwkgICAgICAgKChzdHJ1Y3QgbXdpZmlleF84MDJfMTFfc3NpZCAqKSBkYXRhX2J1ZiktPnNzaWRfbGVuKTsKKworCWJzc19kZXNjLT5zc2lkLnNzaWRfbGVuID0KKwkJKChzdHJ1Y3QgbXdpZmlleF84MDJfMTFfc3NpZCAqKSBkYXRhX2J1ZiktPnNzaWRfbGVuOworCisJLyogU2V0IHRoZSBCU1MgbW9kZSAqLworCWFkaG9jX3N0YXJ0LT5ic3NfbW9kZSA9IEhvc3RDbWRfQlNTX01PREVfSUJTUzsKKwlic3NfZGVzYy0+YnNzX21vZGUgPSBOTDgwMjExX0lGVFlQRV9BREhPQzsKKwlhZGhvY19zdGFydC0+YmVhY29uX3BlcmlvZCA9IGNwdV90b19sZTE2KHByaXYtPmJlYWNvbl9wZXJpb2QpOworCWJzc19kZXNjLT5iZWFjb25fcGVyaW9kID0gcHJpdi0+YmVhY29uX3BlcmlvZDsKKworCS8qIFNldCBQaHlzaWNhbCBwYXJhbSBzZXQgKi8KKy8qIFBhcmFtZXRlciBJRSBJZCAqLworI2RlZmluZSBEU19QQVJBX0lFX0lEICAgMworLyogUGFyYW1ldGVyIElFIGxlbmd0aCAqLworI2RlZmluZSBEU19QQVJBX0lFX0xFTiAgMQorCisJYWRob2Nfc3RhcnQtPnBoeV9wYXJhbV9zZXQuZHNfcGFyYW1fc2V0LmVsZW1lbnRfaWQgPSBEU19QQVJBX0lFX0lEOworCWFkaG9jX3N0YXJ0LT5waHlfcGFyYW1fc2V0LmRzX3BhcmFtX3NldC5sZW4gPSBEU19QQVJBX0lFX0xFTjsKKworCWlmICghbXdpZmlleF9nZXRfY2ZwX2J5X2JhbmRfYW5kX2NoYW5uZWxfZnJvbV9jZmc4MDIxMQorCQkJKHByaXYsIGFkYXB0ZXItPmFkaG9jX3N0YXJ0X2JhbmQsICh1MTYpCisJCQkJcHJpdi0+YWRob2NfY2hhbm5lbCkpIHsKKwkJc3RydWN0IG13aWZpZXhfY2hhbl9mcmVxX3Bvd2VyICpjZnA7CisJCWNmcCA9IG13aWZpZXhfZ2V0X2NmcF9ieV9iYW5kX2FuZF9jaGFubmVsX2Zyb21fY2ZnODAyMTEocHJpdiwKKwkJCQlhZGFwdGVyLT5hZGhvY19zdGFydF9iYW5kLCBGSVJTVF9WQUxJRF9DSEFOTkVMKTsKKwkJaWYgKGNmcCkKKwkJCXByaXYtPmFkaG9jX2NoYW5uZWwgPSAodTgpIGNmcC0+Y2hhbm5lbDsKKwl9CisKKwlpZiAoIXByaXYtPmFkaG9jX2NoYW5uZWwpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJBREhPQ19TX0NNRDogYWRob2NfY2hhbm5lbCBjYW5ub3QgYmUgMFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IEFESE9DX1NfQ01EOiBjcmVhdGluZyBBREhPQyBvbiBjaGFubmVsICVkXG4iLAorCQkJCXByaXYtPmFkaG9jX2NoYW5uZWwpOworCisJcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLmNoYW5uZWwgPSBwcml2LT5hZGhvY19jaGFubmVsOworCXByaXYtPmN1cnJfYnNzX3BhcmFtcy5iYW5kID0gYWRhcHRlci0+YWRob2Nfc3RhcnRfYmFuZDsKKworCWJzc19kZXNjLT5jaGFubmVsID0gcHJpdi0+YWRob2NfY2hhbm5lbDsKKwlhZGhvY19zdGFydC0+cGh5X3BhcmFtX3NldC5kc19wYXJhbV9zZXQuY3VycmVudF9jaGFuID0KKwkJcHJpdi0+YWRob2NfY2hhbm5lbDsKKworCW1lbWNweSgmYnNzX2Rlc2MtPnBoeV9wYXJhbV9zZXQsICZhZGhvY19zdGFydC0+cGh5X3BhcmFtX3NldCwKKwkgICAgICAgc2l6ZW9mKHVuaW9uIGllZWVfdHlwZXNfcGh5X3BhcmFtX3NldCkpOworCisJLyogU2V0IElCU1MgcGFyYW0gc2V0ICovCisvKiBJQlNTIHBhcmFtZXRlciBJRSBJZCAqLworI2RlZmluZSBJQlNTX1BBUkFfSUVfSUQgICA2CisvKiBJQlNTIHBhcmFtZXRlciBJRSBsZW5ndGggKi8KKyNkZWZpbmUgSUJTU19QQVJBX0lFX0xFTiAgMgorCisJYWRob2Nfc3RhcnQtPnNzX3BhcmFtX3NldC5pYnNzX3BhcmFtX3NldC5lbGVtZW50X2lkID0gSUJTU19QQVJBX0lFX0lEOworCWFkaG9jX3N0YXJ0LT5zc19wYXJhbV9zZXQuaWJzc19wYXJhbV9zZXQubGVuID0gSUJTU19QQVJBX0lFX0xFTjsKKwlhZGhvY19zdGFydC0+c3NfcGFyYW1fc2V0Lmlic3NfcGFyYW1fc2V0LmF0aW1fd2luZG93CisJCT0gY3B1X3RvX2xlMTYocHJpdi0+YXRpbV93aW5kb3cpOworCW1lbWNweSgmYnNzX2Rlc2MtPnNzX3BhcmFtX3NldCwgJmFkaG9jX3N0YXJ0LT5zc19wYXJhbV9zZXQsCisJICAgICAgIHNpemVvZih1bmlvbiBpZWVlX3R5cGVzX3NzX3BhcmFtX3NldCkpOworCisJLyogU2V0IENhcGFiaWxpdHkgaW5mbyAqLworCWJzc19kZXNjLT5jYXBfaW5mb19iaXRtYXAgfD0gV0xBTl9DQVBBQklMSVRZX0lCU1M7CisJdG1wX2NhcCA9IGxlMTZfdG9fY3B1KGFkaG9jX3N0YXJ0LT5jYXBfaW5mb19iaXRtYXApOworCXRtcF9jYXAgJj0gfldMQU5fQ0FQQUJJTElUWV9FU1M7CisJdG1wX2NhcCB8PSBXTEFOX0NBUEFCSUxJVFlfSUJTUzsKKworCS8qIFNldCB1cCBwcml2YWN5IGluIGJzc19kZXNjICovCisJaWYgKHByaXYtPnNlY19pbmZvLmVuY3J5cHRpb25fbW9kZSkgeworCQkvKiBBZC1Ib2MgY2FwYWJpbGl0eSBwcml2YWN5IG9uICovCisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LAorCQkJImluZm86IEFESE9DX1NfQ01EOiB3ZXBfc3RhdHVzIHNldCBwcml2YWN5IHRvIFdFUFxuIik7CisJCWJzc19kZXNjLT5wcml2YWN5ID0gTVdJRklFWF84MDJfMTFfUFJJVl9GSUxURVJfODAyMVhfV0VQOworCQl0bXBfY2FwIHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOworCX0gZWxzZSB7CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogQURIT0NfU19DTUQ6IHdlcF9zdGF0dXMgTk9UIHNldCwiCisJCQkJIiBzZXR0aW5nIHByaXZhY3kgdG8gQUNDRVBUIEFMTFxuIik7CisJCWJzc19kZXNjLT5wcml2YWN5ID0gTVdJRklFWF84MDJfMTFfUFJJVl9GSUxURVJfQUNDRVBUX0FMTDsKKwl9CisKKwltZW1zZXQoYWRob2Nfc3RhcnQtPkRhdGFSYXRlLCAwLCBzaXplb2YoYWRob2Nfc3RhcnQtPkRhdGFSYXRlKSk7CisJbXdpZmlleF9nZXRfYWN0aXZlX2RhdGFfcmF0ZXMocHJpdiwgYWRob2Nfc3RhcnQtPkRhdGFSYXRlKTsKKwlpZiAoKGFkYXB0ZXItPmFkaG9jX3N0YXJ0X2JhbmQgJiBCQU5EX0cpICYmCisJICAgIChwcml2LT5jdXJyX3BrdF9maWx0ZXIgJiBIb3N0Q21kX0FDVF9NQUNfQURIT0NfR19QUk9URUNUSU9OX09OKSkgeworCQlpZiAobXdpZmlleF9zZW5kX2NtZF9hc3luYyhwcml2LCBIb3N0Q21kX0NNRF9NQUNfQ09OVFJPTCwKKwkJCQkJICAgICBIb3N0Q21kX0FDVF9HRU5fU0VULCAwLAorCQkJCQkgICAgICZwcml2LT5jdXJyX3BrdF9maWx0ZXIpKSB7CisJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwKKwkJCSAgICAgICAiQURIT0NfU19DTUQ6IEcgUHJvdGVjdGlvbiBjb25maWcgZmFpbGVkXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwkvKiBGaW5kIHRoZSBsYXN0IG5vbiB6ZXJvICovCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihhZGhvY19zdGFydC0+RGF0YVJhdGUpICYmCisJCQlhZGhvY19zdGFydC0+RGF0YVJhdGVbaV07CisJCQlpKyspCisJCQk7CisKKwlwcml2LT5jdXJyX2Jzc19wYXJhbXMubnVtX29mX3JhdGVzID0gaTsKKworCS8qIENvcHkgdGhlIGFkLWhvYyBjcmVhdGluZyByYXRlcyBpbnRvIEN1cnJlbnQgQlNTIHJhdGUgc3RydWN0dXJlICovCisJbWVtY3B5KCZwcml2LT5jdXJyX2Jzc19wYXJhbXMuZGF0YV9yYXRlcywKKwkgICAgICAgJmFkaG9jX3N0YXJ0LT5EYXRhUmF0ZSwgcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLm51bV9vZl9yYXRlcyk7CisKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IEFESE9DX1NfQ01EOiByYXRlcz0lMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCSAgICAgICBhZGhvY19zdGFydC0+RGF0YVJhdGVbMF0sIGFkaG9jX3N0YXJ0LT5EYXRhUmF0ZVsxXSwKKwkgICAgICAgYWRob2Nfc3RhcnQtPkRhdGFSYXRlWzJdLCBhZGhvY19zdGFydC0+RGF0YVJhdGVbM10pOworCisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBBREhPQ19TX0NNRDogQUQtSE9DIFN0YXJ0IGNvbW1hbmQgaXMgcmVhZHlcbiIpOworCisJaWYgKElTX1NVUFBPUlRfTVVMVElfQkFORFMoYWRhcHRlcikpIHsKKwkJLyogQXBwZW5kIGEgY2hhbm5lbCBUTFYgKi8KKwkJY2hhbl90bHYgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfY2hhbl9saXN0X3BhcmFtX3NldCAqKSBwb3M7CisJCWNoYW5fdGx2LT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFRMVl9UWVBFX0NIQU5MSVNUKTsKKwkJY2hhbl90bHYtPmhlYWRlci5sZW4gPQorCQkJY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2NoYW5fc2Nhbl9wYXJhbV9zZXQpKTsKKworCQltZW1zZXQoY2hhbl90bHYtPmNoYW5fc2Nhbl9wYXJhbSwgMHgwMCwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9jaGFuX3NjYW5fcGFyYW1fc2V0KSk7CisJCWNoYW5fdGx2LT5jaGFuX3NjYW5fcGFyYW1bMF0uY2hhbl9udW1iZXIgPQorCQkJKHU4KSBwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IuY2hhbm5lbDsKKworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IEFESE9DX1NfQ01EOiBUTFYgQ2hhbiA9ICVkXG4iLAorCQkgICAgICAgY2hhbl90bHYtPmNoYW5fc2Nhbl9wYXJhbVswXS5jaGFuX251bWJlcik7CisKKwkJY2hhbl90bHYtPmNoYW5fc2Nhbl9wYXJhbVswXS5yYWRpb190eXBlCisJCSAgICAgICA9IG13aWZpZXhfYmFuZF90b19yYWRpb190eXBlKHByaXYtPmN1cnJfYnNzX3BhcmFtcy5iYW5kKTsKKwkJaWYgKGFkYXB0ZXItPmFkaG9jX3N0YXJ0X2JhbmQgJiBCQU5EX0dOCisJCSAgICB8fCBhZGFwdGVyLT5hZGhvY19zdGFydF9iYW5kICYgQkFORF9BTikgeworCQkJaWYgKGFkYXB0ZXItPmNoYW5fb2Zmc2V0ID09IFNFQ19DSEFOTkVMX0FCT1ZFKQorCQkJCWNoYW5fdGx2LT5jaGFuX3NjYW5fcGFyYW1bMF0ucmFkaW9fdHlwZSB8PQorCQkJCQlTRUNPTkRfQ0hBTk5FTF9BQk9WRTsKKwkJCWVsc2UgaWYgKGFkYXB0ZXItPmNoYW5fb2Zmc2V0ID09IFNFQ19DSEFOTkVMX0JFTE9XKQorCQkJCWNoYW5fdGx2LT5jaGFuX3NjYW5fcGFyYW1bMF0ucmFkaW9fdHlwZSB8PQorCQkJCQlTRUNPTkRfQ0hBTk5FTF9CRUxPVzsKKwkJfQorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IEFESE9DX1NfQ01EOiBUTFYgQmFuZCA9ICVkXG4iLAorCQkgICAgICAgY2hhbl90bHYtPmNoYW5fc2Nhbl9wYXJhbVswXS5yYWRpb190eXBlKTsKKwkJcG9zICs9IHNpemVvZihjaGFuX3Rsdi0+aGVhZGVyKSArCisJCQlzaXplb2Yoc3RydWN0IG13aWZpZXhfY2hhbl9zY2FuX3BhcmFtX3NldCk7CisJCWNtZF9hcHBlbmRfc2l6ZSArPQorCQkJc2l6ZW9mKGNoYW5fdGx2LT5oZWFkZXIpICsKKwkJCXNpemVvZihzdHJ1Y3QgbXdpZmlleF9jaGFuX3NjYW5fcGFyYW1fc2V0KTsKKwl9CisKKwkvKiBBcHBlbmQgdmVuZG9yIHNwZWNpZmljIElFIFRMViAqLworCWNtZF9hcHBlbmRfc2l6ZSArPSBtd2lmaWV4X2NtZF9hcHBlbmRfdnNpZV90bHYocHJpdiwKKwkJCQlNV0lGSUVYX1ZTSUVfTUFTS19BREhPQywgJnBvcyk7CisKKwlpZiAocHJpdi0+c2VjX2luZm8ud3BhX2VuYWJsZWQpIHsKKwkJcnNuX2llX2xlbiA9IG13aWZpZXhfYXBwZW5kX3Jzbl9pZV93cGFfd3BhMihwcml2LCAmcG9zKTsKKwkJaWYgKHJzbl9pZV9sZW4gPT0gLTEpCisJCQlyZXR1cm4gLTE7CisJCWNtZF9hcHBlbmRfc2l6ZSArPSByc25faWVfbGVuOworCX0KKworCWlmIChhZGFwdGVyLT5hZGhvY18xMW5fZW5hYmxlZCkgeworCQl7CisJCQlodF9jYXAgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRjYXAgKikgcG9zOworCQkJbWVtc2V0KGh0X2NhcCwgMCwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRjYXApKTsKKwkJCWh0X2NhcC0+aGVhZGVyLnR5cGUgPQorCQkJCWNwdV90b19sZTE2KFdMQU5fRUlEX0hUX0NBUEFCSUxJVFkpOworCQkJaHRfY2FwLT5oZWFkZXIubGVuID0KKwkJCSAgICAgICBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApKTsKKwkJCWh0X2NhcF9pbmZvID0gbGUxNl90b19jcHUoaHRfY2FwLT5odF9jYXAuY2FwX2luZm8pOworCisJCQlodF9jYXBfaW5mbyB8PSBJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMDsKKwkJCWlmIChhZGFwdGVyLT5jaGFuX29mZnNldCkgeworCQkJCWh0X2NhcF9pbmZvIHw9IElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwOworCQkJCWh0X2NhcF9pbmZvIHw9IElFRUU4MDIxMV9IVF9DQVBfRFNTU0NDSzQwOworCQkJCWh0X2NhcF9pbmZvIHw9IElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwOworCQkJCVNFVEhUX01DUzMyKGh0X2NhcC0+aHRfY2FwLm1jcy5yeF9tYXNrKTsKKwkJCX0KKworCQkJaHRfY2FwLT5odF9jYXAuYW1wZHVfcGFyYW1zX2luZm8KKwkJCQkJPSBJRUVFODAyMTFfSFRfTUFYX0FNUERVXzY0SzsKKwkJCWh0X2NhcC0+aHRfY2FwLm1jcy5yeF9tYXNrWzBdID0gMHhmZjsKKwkJCXBvcyArPSBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRjYXApOworCQkJY21kX2FwcGVuZF9zaXplICs9CisJCQkJc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2h0Y2FwKTsKKwkJfQorCQl7CisJCQlodF9pbmZvID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2h0aW5mbyAqKSBwb3M7CisJCQltZW1zZXQoaHRfaW5mbywgMCwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRpbmZvKSk7CisJCQlodF9pbmZvLT5oZWFkZXIudHlwZSA9CisJCQkJY3B1X3RvX2xlMTYoV0xBTl9FSURfSFRfSU5GT1JNQVRJT04pOworCQkJaHRfaW5mby0+aGVhZGVyLmxlbiA9CisJCQkJY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbykpOworCQkJaHRfaW5mby0+aHRfaW5mby5jb250cm9sX2NoYW4gPQorCQkJCSh1OCkgcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLgorCQkJCWNoYW5uZWw7CisJCQlpZiAoYWRhcHRlci0+Y2hhbl9vZmZzZXQpIHsKKwkJCQlodF9pbmZvLT5odF9pbmZvLmh0X3BhcmFtID0KKwkJCQkJYWRhcHRlci0+Y2hhbl9vZmZzZXQ7CisJCQkJaHRfaW5mby0+aHRfaW5mby5odF9wYXJhbSB8PQorCQkJCQlJRUVFODAyMTFfSFRfUEFSQU1fQ0hBTl9XSURUSF9BTlk7CisJCQl9CisJCQlodF9pbmZvLT5odF9pbmZvLm9wZXJhdGlvbl9tb2RlID0KKwkJCSAgICAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0hUX09QX01PREVfTk9OX0dGX1NUQV9QUlNOVCk7CisJCQlodF9pbmZvLT5odF9pbmZvLmJhc2ljX3NldFswXSA9IDB4ZmY7CisJCQlwb3MgKz0gc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2h0aW5mbyk7CisJCQljbWRfYXBwZW5kX3NpemUgKz0KKwkJCQlzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRpbmZvKTsKKwkJfQorCX0KKworCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KCh1MTYpCisJCQkgICAgKHNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2FkX2hvY19zdGFydCkKKwkJCSAgICAgKyBTX0RTX0dFTiArIGNtZF9hcHBlbmRfc2l6ZSkpOworCisJaWYgKGFkYXB0ZXItPmFkaG9jX3N0YXJ0X2JhbmQgPT0gQkFORF9CKQorCQl0bXBfY2FwICY9IH5XTEFOX0NBUEFCSUxJVFlfU0hPUlRfU0xPVF9USU1FOworCWVsc2UKKwkJdG1wX2NhcCB8PSBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfU0xPVF9USU1FOworCisJYWRob2Nfc3RhcnQtPmNhcF9pbmZvX2JpdG1hcCA9IGNwdV90b19sZTE2KHRtcF9jYXApOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGNvbW1hbmQgZm9yIGFkLWhvYyBqb2luLgorICoKKyAqIE1vc3Qgb2YgdGhlIHBhcmFtZXRlcnMgYXJlIHNldCB1cCBieSBjb3B5aW5nIGZyb20gdGhlIHRhcmdldCBCU1MgZGVzY3JpcHRvcgorICogZnJvbSB0aGUgc2NhbiByZXNwb25zZS4KKyAqCisgKiBJbiBhZGRpdGlvbiwgdGhlIGZvbGxvd2luZyBUTFZzIGFyZSBhZGRlZCAtCisgKiAgICAgIC0gQ2hhbm5lbCBUTFYKKyAqICAgICAgLSBWZW5kb3Igc3BlY2lmaWMgSUUKKyAqICAgICAgLSBXUEEvV1BBMiBJRQorICogICAgICAtIDExbiBJRQorICoKKyAqIFByZXBhcmF0aW9uIGFsc28gaW5jbHVkZXMgLQorICogICAgICAtIFNldHRpbmcgY29tbWFuZCBJRCBhbmQgcHJvcGVyIHNpemUKKyAqICAgICAgLSBFbnN1cmluZyBjb3JyZWN0IGVuZGlhbi1uZXNzCisgKi8KK2ludAorbXdpZmlleF9jbWRfODAyXzExX2FkX2hvY19qb2luKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwgdm9pZCAqZGF0YV9idWYpCit7CisJaW50IHJzbl9pZV9sZW4gPSAwOworCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfYWRfaG9jX2pvaW4gKmFkaG9jX2pvaW4gPQorCQkmY21kLT5wYXJhbXMuYWRob2Nfam9pbjsKKwlzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYyA9CisJCShzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICopIGRhdGFfYnVmOworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2NoYW5fbGlzdF9wYXJhbV9zZXQgKmNoYW5fdGx2OworCXUzMiBjbWRfYXBwZW5kX3NpemUgPSAwOworCXUxNiB0bXBfY2FwOworCXUzMiBpLCByYXRlc19zaXplID0gMDsKKwl1MTYgY3Vycl9wa3RfZmlsdGVyOworCXU4ICpwb3MgPQorCQkodTggKikgYWRob2Nfam9pbiArCisJCXNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2FkX2hvY19qb2luKTsKKworLyogVXNlIEcgcHJvdGVjdGlvbiAqLworI2RlZmluZSBVU0VfR19QUk9URUNUSU9OICAgICAgICAweDAyCisJaWYgKGJzc19kZXNjLT5lcnBfZmxhZ3MgJiBVU0VfR19QUk9URUNUSU9OKSB7CisJCWN1cnJfcGt0X2ZpbHRlciA9CisJCQlwcml2LT4KKwkJCWN1cnJfcGt0X2ZpbHRlciB8IEhvc3RDbWRfQUNUX01BQ19BREhPQ19HX1BST1RFQ1RJT05fT047CisKKwkJaWYgKG13aWZpZXhfc2VuZF9jbWRfYXN5bmMocHJpdiwgSG9zdENtZF9DTURfTUFDX0NPTlRST0wsCisJCQkJCSAgICAgSG9zdENtZF9BQ1RfR0VOX1NFVCwgMCwKKwkJCQkJICAgICAmY3Vycl9wa3RfZmlsdGVyKSkgeworCQkJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkgICAgICAgIkFESE9DX0pfQ01EOiBHIFByb3RlY3Rpb24gY29uZmlnIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlwcml2LT5hdHRlbXB0ZWRfYnNzX2Rlc2MgPSBic3NfZGVzYzsKKworCWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KEhvc3RDbWRfQ01EXzgwMl8xMV9BRF9IT0NfSk9JTik7CisKKwlhZGhvY19qb2luLT5ic3NfZGVzY3JpcHRvci5ic3NfbW9kZSA9IEhvc3RDbWRfQlNTX01PREVfSUJTUzsKKworCWFkaG9jX2pvaW4tPmJzc19kZXNjcmlwdG9yLmJlYWNvbl9wZXJpb2QKKwkJPSBjcHVfdG9fbGUxNihic3NfZGVzYy0+YmVhY29uX3BlcmlvZCk7CisKKwltZW1jcHkoJmFkaG9jX2pvaW4tPmJzc19kZXNjcmlwdG9yLmJzc2lkLAorCSAgICAgICAmYnNzX2Rlc2MtPm1hY19hZGRyZXNzLCBFVEhfQUxFTik7CisKKwltZW1jcHkoJmFkaG9jX2pvaW4tPmJzc19kZXNjcmlwdG9yLnNzaWQsCisJICAgICAgICZic3NfZGVzYy0+c3NpZC5zc2lkLCBic3NfZGVzYy0+c3NpZC5zc2lkX2xlbik7CisKKwltZW1jcHkoJmFkaG9jX2pvaW4tPmJzc19kZXNjcmlwdG9yLnBoeV9wYXJhbV9zZXQsCisJICAgICAgICZic3NfZGVzYy0+cGh5X3BhcmFtX3NldCwKKwkgICAgICAgc2l6ZW9mKHVuaW9uIGllZWVfdHlwZXNfcGh5X3BhcmFtX3NldCkpOworCisJbWVtY3B5KCZhZGhvY19qb2luLT5ic3NfZGVzY3JpcHRvci5zc19wYXJhbV9zZXQsCisJICAgICAgICZic3NfZGVzYy0+c3NfcGFyYW1fc2V0LCBzaXplb2YodW5pb24gaWVlZV90eXBlc19zc19wYXJhbV9zZXQpKTsKKworCXRtcF9jYXAgPSBic3NfZGVzYy0+Y2FwX2luZm9fYml0bWFwOworCisJdG1wX2NhcCAmPSBDQVBJTkZPX01BU0s7CisKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IEFESE9DX0pfQ01EOiB0bXBfY2FwPSU0WCIKKwkJCSIgQ0FQSU5GT19NQVNLPSU0bFhcbiIsIHRtcF9jYXAsIENBUElORk9fTUFTSyk7CisKKwkvKiBJbmZvcm1hdGlvbiBvbiBCU1NJRCBkZXNjcmlwdG9yIHBhc3NlZCB0byBGVyAqLworCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogQURIT0NfSl9DTUQ6IEJTU0lEID0gJXBNLCBTU0lEID0gJXNcbiIsCisJCQkJYWRob2Nfam9pbi0+YnNzX2Rlc2NyaXB0b3IuYnNzaWQsCisJCQkJYWRob2Nfam9pbi0+YnNzX2Rlc2NyaXB0b3Iuc3NpZCk7CisKKwlmb3IgKGkgPSAwOyBic3NfZGVzYy0+c3VwcG9ydGVkX3JhdGVzW2ldICYmCisJCQlpIDwgTVdJRklFWF9TVVBQT1JURURfUkFURVM7CisJCQlpKyspCisJCQk7CisJcmF0ZXNfc2l6ZSA9IGk7CisKKwkvKiBDb3B5IERhdGEgUmF0ZXMgZnJvbSB0aGUgUmF0ZXMgcmVjb3JkZWQgaW4gc2NhbiByZXNwb25zZSAqLworCW1lbXNldChhZGhvY19qb2luLT5ic3NfZGVzY3JpcHRvci5kYXRhX3JhdGVzLCAwLAorCSAgICAgICBzaXplb2YoYWRob2Nfam9pbi0+YnNzX2Rlc2NyaXB0b3IuZGF0YV9yYXRlcykpOworCW1lbWNweShhZGhvY19qb2luLT5ic3NfZGVzY3JpcHRvci5kYXRhX3JhdGVzLAorCSAgICAgICBic3NfZGVzYy0+c3VwcG9ydGVkX3JhdGVzLCByYXRlc19zaXplKTsKKworCS8qIENvcHkgdGhlIGFkaG9jIGpvaW4gcmF0ZXMgaW50byBDdXJyZW50IEJTUyBzdGF0ZSBzdHJ1Y3R1cmUgKi8KKwlwcml2LT5jdXJyX2Jzc19wYXJhbXMubnVtX29mX3JhdGVzID0gcmF0ZXNfc2l6ZTsKKwltZW1jcHkoJnByaXYtPmN1cnJfYnNzX3BhcmFtcy5kYXRhX3JhdGVzLCBic3NfZGVzYy0+c3VwcG9ydGVkX3JhdGVzLAorCSAgICAgICByYXRlc19zaXplKTsKKworCS8qIENvcHkgdGhlIGNoYW5uZWwgaW5mb3JtYXRpb24gKi8KKwlwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IuY2hhbm5lbCA9IGJzc19kZXNjLT5jaGFubmVsOworCXByaXYtPmN1cnJfYnNzX3BhcmFtcy5iYW5kID0gKHU4KSBic3NfZGVzYy0+YnNzX2JhbmQ7CisKKwlpZiAocHJpdi0+c2VjX2luZm8ud2VwX3N0YXR1cyA9PSBNV0lGSUVYXzgwMl8xMV9XRVBfRU5BQkxFRAorCSAgICB8fCBwcml2LT5zZWNfaW5mby53cGFfZW5hYmxlZCkKKwkJdG1wX2NhcCB8PSBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWTsKKworCWlmIChJU19TVVBQT1JUX01VTFRJX0JBTkRTKHByaXYtPmFkYXB0ZXIpKSB7CisJCS8qIEFwcGVuZCBhIGNoYW5uZWwgVExWICovCisJCWNoYW5fdGx2ID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2NoYW5fbGlzdF9wYXJhbV9zZXQgKikgcG9zOworCQljaGFuX3Rsdi0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihUTFZfVFlQRV9DSEFOTElTVCk7CisJCWNoYW5fdGx2LT5oZWFkZXIubGVuID0KKwkJCWNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgbXdpZmlleF9jaGFuX3NjYW5fcGFyYW1fc2V0KSk7CisKKwkJbWVtc2V0KGNoYW5fdGx2LT5jaGFuX3NjYW5fcGFyYW0sIDB4MDAsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IG13aWZpZXhfY2hhbl9zY2FuX3BhcmFtX3NldCkpOworCQljaGFuX3Rsdi0+Y2hhbl9zY2FuX3BhcmFtWzBdLmNoYW5fbnVtYmVyID0KKwkJCShic3NfZGVzYy0+cGh5X3BhcmFtX3NldC5kc19wYXJhbV9zZXQuY3VycmVudF9jaGFuKTsKKwkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiBBREhPQ19KX0NNRDogVExWIENoYW4gPSAlZFxuIiwKKwkJICAgICAgIGNoYW5fdGx2LT5jaGFuX3NjYW5fcGFyYW1bMF0uY2hhbl9udW1iZXIpOworCisJCWNoYW5fdGx2LT5jaGFuX3NjYW5fcGFyYW1bMF0ucmFkaW9fdHlwZSA9CisJCQltd2lmaWV4X2JhbmRfdG9fcmFkaW9fdHlwZSgodTgpIGJzc19kZXNjLT5ic3NfYmFuZCk7CisKKwkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiBBREhPQ19KX0NNRDogVExWIEJhbmQgPSAlZFxuIiwKKwkJICAgICAgIGNoYW5fdGx2LT5jaGFuX3NjYW5fcGFyYW1bMF0ucmFkaW9fdHlwZSk7CisJCXBvcyArPSBzaXplb2YoY2hhbl90bHYtPmhlYWRlcikgKworCQkJc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2NoYW5fc2Nhbl9wYXJhbV9zZXQpOworCQljbWRfYXBwZW5kX3NpemUgKz0gc2l6ZW9mKGNoYW5fdGx2LT5oZWFkZXIpICsKKwkJCXNpemVvZihzdHJ1Y3QgbXdpZmlleF9jaGFuX3NjYW5fcGFyYW1fc2V0KTsKKwl9CisKKwlpZiAocHJpdi0+c2VjX2luZm8ud3BhX2VuYWJsZWQpCisJCXJzbl9pZV9sZW4gPSBtd2lmaWV4X2FwcGVuZF9yc25faWVfd3BhX3dwYTIocHJpdiwgJnBvcyk7CisJaWYgKHJzbl9pZV9sZW4gPT0gLTEpCisJCXJldHVybiAtMTsKKwljbWRfYXBwZW5kX3NpemUgKz0gcnNuX2llX2xlbjsKKworCWlmIChJU1NVUFBfMTFORU5BQkxFRChwcml2LT5hZGFwdGVyLT5md19jYXBfaW5mbykpCisJCWNtZF9hcHBlbmRfc2l6ZSArPSBtd2lmaWV4X2NtZF9hcHBlbmRfMTFuX3Rsdihwcml2LAorCQkJYnNzX2Rlc2MsICZwb3MpOworCisJLyogQXBwZW5kIHZlbmRvciBzcGVjaWZpYyBJRSBUTFYgKi8KKwljbWRfYXBwZW5kX3NpemUgKz0gbXdpZmlleF9jbWRfYXBwZW5kX3ZzaWVfdGx2KHByaXYsCisJCQlNV0lGSUVYX1ZTSUVfTUFTS19BREhPQywgJnBvcyk7CisKKwljbWQtPnNpemUgPSBjcHVfdG9fbGUxNigodTE2KQorCQkJICAgIChzaXplb2Yoc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9hZF9ob2Nfam9pbikKKwkJCSAgICAgKyBTX0RTX0dFTiArIGNtZF9hcHBlbmRfc2l6ZSkpOworCisJYWRob2Nfam9pbi0+YnNzX2Rlc2NyaXB0b3IuY2FwX2luZm9fYml0bWFwID0gY3B1X3RvX2xlMTYodG1wX2NhcCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgY29tbWFuZCByZXNwb25zZSBvZiBhZC1ob2Mgc3RhcnQgYW5kCisgKiBhZC1ob2Mgam9pbi4KKyAqCisgKiBUaGUgZnVuY3Rpb24gZ2VuZXJhdGVzIGEgZGV2aWNlLWNvbm5lY3RlZCBldmVudCB0byBub3RpZnkKKyAqIHRoZSBhcHBsaWNhdGlvbnMsIGluIGNhc2Ugb2Ygc3VjY2Vzc2Z1bCBhZC1ob2Mgc3RhcnQvam9pbiwgYW5kCisgKiBzYXZlcyB0aGUgYmVhY29uIGJ1ZmZlci4KKyAqLworaW50IG13aWZpZXhfcmV0XzgwMl8xMV9hZF9ob2Moc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfYWRfaG9jX3Jlc3VsdCAqYWRob2NfcmVzdWx0OworCXN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjOworCisJYWRob2NfcmVzdWx0ID0gJnJlc3AtPnBhcmFtcy5hZGhvY19yZXN1bHQ7CisKKwlic3NfZGVzYyA9IHByaXYtPmF0dGVtcHRlZF9ic3NfZGVzYzsKKworCS8qIEpvaW4gcmVzdWx0IGNvZGUgMCAtLT4gU1VDQ0VTUyAqLworCWlmIChsZTE2X3RvX2NwdShyZXNwLT5yZXN1bHQpKSB7CisJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LCAiQURIT0NfUkVTUDogZmFpbGVkXG4iKTsKKwkJaWYgKHByaXYtPm1lZGlhX2Nvbm5lY3RlZCkKKwkJCW13aWZpZXhfcmVzZXRfY29ubmVjdF9zdGF0ZShwcml2KTsKKworCQltZW1zZXQoJnByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvciwKKwkJICAgICAgIDB4MDAsIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yKSk7CisKKwkJcmV0ID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBTZW5kIGEgTWVkaWEgQ29ubmVjdGVkIGV2ZW50LCBhY2NvcmRpbmcgdG8gdGhlIFNwZWMgKi8KKwlwcml2LT5tZWRpYV9jb25uZWN0ZWQgPSB0cnVlOworCisJaWYgKGxlMTZfdG9fY3B1KHJlc3AtPmNvbW1hbmQpID09IEhvc3RDbWRfQ01EXzgwMl8xMV9BRF9IT0NfU1RBUlQpIHsKKwkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiBBREhPQ19TX1JFU1AgJXNcbiIsCisJCQkJYnNzX2Rlc2MtPnNzaWQuc3NpZCk7CisKKwkJLyogVXBkYXRlIHRoZSBjcmVhdGVkIG5ldHdvcmsgZGVzY3JpcHRvciB3aXRoIHRoZSBuZXcgQlNTSUQgKi8KKwkJbWVtY3B5KGJzc19kZXNjLT5tYWNfYWRkcmVzcywKKwkJICAgICAgIGFkaG9jX3Jlc3VsdC0+YnNzaWQsIEVUSF9BTEVOKTsKKworCQlwcml2LT5hZGhvY19zdGF0ZSA9IEFESE9DX1NUQVJURUQ7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogTm93IHRoZSBqb2luIGNtZCBzaG91bGQgYmUgc3VjY2Vzc2Z1bC4KKwkJICogSWYgQlNTSUQgaGFzIGNoYW5nZWQgdXNlIFNTSUQgdG8gY29tcGFyZSBpbnN0ZWFkIG9mIEJTU0lECisJCSAqLworCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IEFESE9DX0pfUkVTUCAlc1xuIiwKKwkJCQlic3NfZGVzYy0+c3NpZC5zc2lkKTsKKworCQkvKgorCQkgKiBNYWtlIGEgY29weSBvZiBjdXJyZW50IEJTU0lEIGRlc2NyaXB0b3IsIG9ubHkgbmVlZGVkIGZvcgorCQkgKiBqb2luIHNpbmNlIHRoZSBjdXJyZW50IGRlc2NyaXB0b3IgaXMgYWxyZWFkeSBiZWluZyB1c2VkCisJCSAqIGZvciBhZGhvYyBzdGFydAorCQkgKi8KKwkJbWVtY3B5KCZwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IsCisJCSAgICAgICBic3NfZGVzYywgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IpKTsKKworCQlwcml2LT5hZGhvY19zdGF0ZSA9IEFESE9DX0pPSU5FRDsKKwl9CisKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IEFESE9DX1JFU1A6IGNoYW5uZWwgPSAlZFxuIiwKKwkJCQlwcml2LT5hZGhvY19jaGFubmVsKTsKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IEFESE9DX1JFU1A6IEJTU0lEID0gJXBNXG4iLAorCSAgICAgICBwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IubWFjX2FkZHJlc3MpOworCisJaWYgKCFuZXRpZl9jYXJyaWVyX29rKHByaXYtPm5ldGRldikpCisJCW5ldGlmX2NhcnJpZXJfb24ocHJpdi0+bmV0ZGV2KTsKKwlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChwcml2LT5uZXRkZXYpKQorCQluZXRpZl93YWtlX3F1ZXVlKHByaXYtPm5ldGRldik7CisKKwltd2lmaWV4X3NhdmVfY3Vycl9iY24ocHJpdik7CisKK2RvbmU6CisJLyogTmVlZCB0byBpbmRpY2F0ZSBJT0NUTCBjb21wbGV0ZSAqLworCWlmIChhZGFwdGVyLT5jdXJyX2NtZC0+d2FpdF9xX2VuYWJsZWQpIHsKKwkJaWYgKHJldCkKKwkJCWFkYXB0ZXItPmNtZF93YWl0X3Euc3RhdHVzID0gLTE7CisJCWVsc2UKKwkJCWFkYXB0ZXItPmNtZF93YWl0X3Euc3RhdHVzID0gMDsKKworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGFzc29jaWF0ZXMgdG8gYSBzcGVjaWZpYyBCU1MgZGlzY292ZXJlZCBpbiBhIHNjYW4uCisgKgorICogSXQgY2xlYXJzIGFueSBwYXN0IGFzc29jaWF0aW9uIHJlc3BvbnNlIHN0b3JlZCBmb3IgYXBwbGljYXRpb24KKyAqIHJldHJpZXZhbCBhbmQgY2FsbHMgdGhlIGNvbW1hbmQgcHJlcGFyYXRpb24gcm91dGluZSB0byBzZW5kIHRoZQorICogY29tbWFuZCB0byBmaXJtd2FyZS4KKyAqLworaW50IG13aWZpZXhfYXNzb2NpYXRlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCSAgICAgIHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjKQoreworCXU4IGN1cnJlbnRfYnNzaWRbRVRIX0FMRU5dOworCisJLyogUmV0dXJuIGVycm9yIGlmIHRoZSBhZGFwdGVyIG9yIHRhYmxlIGVudHJ5IGlzIG5vdCBtYXJrZWQgYXMgaW5mcmEgKi8KKwlpZiAoKHByaXYtPmJzc19tb2RlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHx8CisJICAgIChic3NfZGVzYy0+YnNzX21vZGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpCisJCXJldHVybiAtMTsKKworCW1lbWNweSgmY3VycmVudF9ic3NpZCwKKwkgICAgICAgJnByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5tYWNfYWRkcmVzcywKKwkgICAgICAgc2l6ZW9mKGN1cnJlbnRfYnNzaWQpKTsKKworCS8qIENsZWFyIGFueSBwYXN0IGFzc29jaWF0aW9uIHJlc3BvbnNlIHN0b3JlZCBmb3IgYXBwbGljYXRpb24KKwkgICByZXRyaWV2YWwgKi8KKwlwcml2LT5hc3NvY19yc3Bfc2l6ZSA9IDA7CisKKwlyZXR1cm4gbXdpZmlleF9zZW5kX2NtZF9zeW5jKHByaXYsIEhvc3RDbWRfQ01EXzgwMl8xMV9BU1NPQ0lBVEUsCisJCQkJICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsIGJzc19kZXNjKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc3RhcnRzIGFuIGFkLWhvYyBuZXR3b3JrLgorICoKKyAqIEl0IGNhbGxzIHRoZSBjb21tYW5kIHByZXBhcmF0aW9uIHJvdXRpbmUgdG8gc2VuZCB0aGUgY29tbWFuZCB0byBmaXJtd2FyZS4KKyAqLworaW50Cittd2lmaWV4X2FkaG9jX3N0YXJ0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCSAgICBzdHJ1Y3QgbXdpZmlleF84MDJfMTFfc3NpZCAqYWRob2Nfc3NpZCkKK3sKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IEFkaG9jIENoYW5uZWwgPSAlZFxuIiwKKwkJcHJpdi0+YWRob2NfY2hhbm5lbCk7CisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiBjdXJyX2Jzc19wYXJhbXMuY2hhbm5lbCA9ICVkXG4iLAorCSAgICAgICBwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IuY2hhbm5lbCk7CisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiBjdXJyX2Jzc19wYXJhbXMuYmFuZCA9ICVkXG4iLAorCSAgICAgICBwcml2LT5jdXJyX2Jzc19wYXJhbXMuYmFuZCk7CisKKwlyZXR1cm4gbXdpZmlleF9zZW5kX2NtZF9zeW5jKHByaXYsIEhvc3RDbWRfQ01EXzgwMl8xMV9BRF9IT0NfU1RBUlQsCisJCQkJICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsIGFkaG9jX3NzaWQpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBqb2lucyBhbiBhZC1ob2MgbmV0d29yayBmb3VuZCBpbiBhIHByZXZpb3VzIHNjYW4uCisgKgorICogSXQgY2FsbHMgdGhlIGNvbW1hbmQgcHJlcGFyYXRpb24gcm91dGluZSB0byBzZW5kIHRoZSBjb21tYW5kIHRvIGZpcm13YXJlLAorICogaWYgYWxyZWFkeSBub3QgY29ubmVjdGVkIHRvIHRoZSByZXF1ZXN0ZWQgU1NJRC4KKyAqLworaW50IG13aWZpZXhfYWRob2Nfam9pbihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkgICAgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MpCit7CisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiBhZGhvYyBqb2luOiBjdXJyX2JzcyBzc2lkID0lc1xuIiwKKwkgICAgICAgcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLnNzaWQuc3NpZCk7CisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiBhZGhvYyBqb2luOiBjdXJyX2JzcyBzc2lkX2xlbiA9JXVcbiIsCisJICAgICAgIHByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5zc2lkLnNzaWRfbGVuKTsKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IGFkaG9jIGpvaW46IHNzaWQgPSVzXG4iLAorCQlic3NfZGVzYy0+c3NpZC5zc2lkKTsKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IGFkaG9jIGpvaW46IHNzaWRfbGVuID0ldVxuIiwKKwkgICAgICAgYnNzX2Rlc2MtPnNzaWQuc3NpZF9sZW4pOworCisJLyogQ2hlY2sgaWYgdGhlIHJlcXVlc3RlZCBTU0lEIGlzIGFscmVhZHkgam9pbmVkICovCisJaWYgKHByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5zc2lkLnNzaWRfbGVuICYmCisJICAgICFtd2lmaWV4X3NzaWRfY21wKCZic3NfZGVzYy0+c3NpZCwKKwkJCSAgICAgICZwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3Iuc3NpZCkgJiYKKwkgICAgKHByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5ic3NfbW9kZSA9PQorCQkJCQkJCU5MODAyMTFfSUZUWVBFX0FESE9DKSkgeworCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IEFESE9DX0pfQ01EOiBuZXcgYWQtaG9jIFNTSUQiCisJCQkiIGlzIHRoZSBzYW1lIGFzIGN1cnJlbnQ7IG5vdCBhdHRlbXB0aW5nIHRvIHJlLWpvaW5cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiBjdXJyX2Jzc19wYXJhbXMuY2hhbm5lbCA9ICVkXG4iLAorCSAgICAgICBwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IuY2hhbm5lbCk7CisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiBjdXJyX2Jzc19wYXJhbXMuYmFuZCA9ICVjXG4iLAorCSAgICAgICBwcml2LT5jdXJyX2Jzc19wYXJhbXMuYmFuZCk7CisKKwlyZXR1cm4gbXdpZmlleF9zZW5kX2NtZF9zeW5jKHByaXYsIEhvc3RDbWRfQ01EXzgwMl8xMV9BRF9IT0NfSk9JTiwKKwkJCQkgICAgSG9zdENtZF9BQ1RfR0VOX1NFVCwgMCwgYnNzX2Rlc2MpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBkZWF1dGhlbnRpY2F0ZXMvZGlzY29ubmVjdHMgZnJvbSBpbmZyYSBuZXR3b3JrIGJ5IHNlbmRpbmcKKyAqIGRlYXV0aGVudGljYXRpb24gcmVxdWVzdC4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X2RlYXV0aGVudGljYXRlX2luZnJhKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHU4ICptYWMpCit7CisJdTggbWFjX2FkZHJlc3NbRVRIX0FMRU5dOworCWludCByZXQ7CisJdTggemVyb19tYWNbRVRIX0FMRU5dID0geyAwLCAwLCAwLCAwLCAwLCAwIH07CisKKwlpZiAobWFjKSB7CisJCWlmICghbWVtY21wKG1hYywgemVyb19tYWMsIHNpemVvZih6ZXJvX21hYykpKQorCQkJbWVtY3B5KCh1OCAqKSAmbWFjX2FkZHJlc3MsCisJCQkgICAgICAgKHU4ICopICZwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IuCisJCQkgICAgICAgbWFjX2FkZHJlc3MsIEVUSF9BTEVOKTsKKwkJZWxzZQorCQkJbWVtY3B5KCh1OCAqKSAmbWFjX2FkZHJlc3MsICh1OCAqKSBtYWMsIEVUSF9BTEVOKTsKKwl9IGVsc2UgeworCQltZW1jcHkoKHU4ICopICZtYWNfYWRkcmVzcywgKHU4ICopICZwcml2LT5jdXJyX2Jzc19wYXJhbXMuCisJCSAgICAgICBic3NfZGVzY3JpcHRvci5tYWNfYWRkcmVzcywgRVRIX0FMRU4pOworCX0KKworCXJldCA9IG13aWZpZXhfc2VuZF9jbWRfc3luYyhwcml2LCBIb3N0Q21kX0NNRF84MDJfMTFfREVBVVRIRU5USUNBVEUsCisJCQkJICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsICZtYWNfYWRkcmVzcyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBkZWF1dGhlbnRpY2F0ZXMvZGlzY29ubmVjdHMgZnJvbSBhIEJTUy4KKyAqCisgKiBJbiBjYXNlIG9mIGluZnJhIG1hZGUsIGl0IHNlbmRzIGRlYXV0aGVudGljYXRpb24gcmVxdWVzdCwgYW5kCisgKiBpbiBjYXNlIG9mIGFkLWhvYyBtb2RlLCBhIHN0b3AgbmV0d29yayByZXF1ZXN0IGlzIHNlbnQgdG8gdGhlIGZpcm13YXJlLgorICovCitpbnQgbXdpZmlleF9kZWF1dGhlbnRpY2F0ZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqbWFjKQoreworCWludCByZXQgPSAwOworCisJaWYgKHByaXYtPm1lZGlhX2Nvbm5lY3RlZCkgeworCQlpZiAocHJpdi0+YnNzX21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQkJcmV0ID0gbXdpZmlleF9kZWF1dGhlbnRpY2F0ZV9pbmZyYShwcml2LCBtYWMpOworCQl9IGVsc2UgaWYgKHByaXYtPmJzc19tb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCQlyZXQgPSBtd2lmaWV4X3NlbmRfY21kX3N5bmMocHJpdiwKKwkJCQkJCUhvc3RDbWRfQ01EXzgwMl8xMV9BRF9IT0NfU1RPUCwKKwkJCQkJCUhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsIE5VTEwpOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG13aWZpZXhfZGVhdXRoZW50aWNhdGUpOworCisvKgorICogVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBiYW5kIHRvIHJhZGlvIHR5cGUgdXNlZCBpbiBjaGFubmVsIFRMVi4KKyAqLwordTgKK213aWZpZXhfYmFuZF90b19yYWRpb190eXBlKHU4IGJhbmQpCit7CisJc3dpdGNoIChiYW5kKSB7CisJY2FzZSBCQU5EX0E6CisJY2FzZSBCQU5EX0FOOgorCWNhc2UgQkFORF9BIHwgQkFORF9BTjoKKwkJcmV0dXJuIEhvc3RDbWRfU0NBTl9SQURJT19UWVBFX0E7CisJY2FzZSBCQU5EX0I6CisJY2FzZSBCQU5EX0c6CisJY2FzZSBCQU5EX0IgfCBCQU5EX0c6CisJZGVmYXVsdDoKKwkJcmV0dXJuIEhvc3RDbWRfU0NBTl9SQURJT19UWVBFX0JHOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA1ODIyNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvbWFpbi5jCkBAIC0wLDAgKzEsMTA1NSBAQAorLyoKKyAqIE1hcnZlbGwgV2lyZWxlc3MgTEFOIGRldmljZSBkcml2ZXI6IG1ham9yIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQKKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKyAqLworCisjaW5jbHVkZSAibWFpbi5oIgorI2luY2x1ZGUgIndtbS5oIgorI2luY2x1ZGUgImNmZzgwMjExLmgiCisjaW5jbHVkZSAiMTFuLmgiCisKKyNkZWZpbmUgVkVSU0lPTgkiMS4wIgorCitjb25zdCBjaGFyIGRyaXZlcl92ZXJzaW9uW10gPSAibXdpZmlleCAiIFZFUlNJT04gIiAoJXMpICI7CisKK3N0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmdfYWRhcHRlcjsKK0VYUE9SVF9TWU1CT0xfR1BMKGdfYWRhcHRlcik7CisKK3N0YXRpYyBzdHJ1Y3QgbXdpZmlleF9ic3NfYXR0ciBtd2lmaWV4X2Jzc19zdGFbXSA9IHsKKwl7TVdJRklFWF9CU1NfVFlQRV9TVEEsIE1XSUZJRVhfREFUQV9GUkFNRV9UWVBFX0VUSF9JSSwgdHJ1ZSwgMCwgMH0sCit9OworCitzdGF0aWMgaW50IGRydl9tb2RlID0gRFJWX01PREVfU1RBOworCitzdGF0aWMgY2hhciBmd19uYW1lWzMyXSA9IERFRkFVTFRfRldfTkFNRTsKKworLyogU3VwcG9ydGVkIGRydl9tb2RlIHRhYmxlICovCitzdGF0aWMgc3RydWN0IG13aWZpZXhfZHJ2X21vZGUgbXdpZmlleF9kcnZfbW9kZV90YmxbXSA9IHsKKwl7CisJCS5kcnZfbW9kZSA9IERSVl9NT0RFX1NUQSwKKwkJLmludGZfbnVtID0gQVJSQVlfU0laRShtd2lmaWV4X2Jzc19zdGEpLAorCQkuYnNzX2F0dHIgPSBtd2lmaWV4X2Jzc19zdGEsCisJfSwKK307CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyB0aGUgZGV2aWNlIGFuZCBwZXJmb3JtcyBhbGwgdGhlIG5lY2Vzc2FyeQorICogaW5pdGlhbGl6YXRpb25zLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgaW5pdGlhbGl6YXRpb24gb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIC0KKyAqICAgICAgLSBBbGxvY2F0ZSBhZGFwdGVyIHN0cnVjdHVyZQorICogICAgICAtIFNhdmUgaW50ZXJmYWNlIHNwZWNpZmljIG9wZXJhdGlvbnMgdGFibGUgaW4gYWRhcHRlcgorICogICAgICAtIENhbGwgaW50ZXJmYWNlIHNwZWNpZmljIGluaXRpYWxpemF0aW9uIHJvdXRpbmUKKyAqICAgICAgLSBBbGxvY2F0ZSBwcml2YXRlIHN0cnVjdHVyZXMKKyAqICAgICAgLSBTZXQgZGVmYXVsdCBhZGFwdGVyIHN0cnVjdHVyZSBwYXJhbWV0ZXJzCisgKiAgICAgIC0gSW5pdGlhbGl6ZSBsb2NrcworICoKKyAqIEluIGNhc2Ugb2YgYW55IGVycm9ycyBkdXJpbmcgaW5pdHRpYWxpemF0aW9uLCB0aGlzIGZ1bmN0aW9uIGFsc28gZW5zdXJlcworICogcHJvcGVyIGNsZWFudXAgYmVmb3JlIGV4aXRpbmcuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9yZWdpc3Rlcih2b2lkICpjYXJkLCBzdHJ1Y3QgbXdpZmlleF9pZl9vcHMgKmlmX29wcywKKwkJCSAgICBzdHJ1Y3QgbXdpZmlleF9kcnZfbW9kZSAqZHJ2X21vZGVfcHRyKQoreworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXI7CisJaW50IGk7CisKKwlhZGFwdGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG13aWZpZXhfYWRhcHRlciksIEdGUF9LRVJORUwpOworCWlmICghYWRhcHRlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlnX2FkYXB0ZXIgPSBhZGFwdGVyOworCWFkYXB0ZXItPmNhcmQgPSBjYXJkOworCisJLyogU2F2ZSBpbnRlcmZhY2Ugc3BlY2lmaWMgb3BlcmF0aW9ucyBpbiBhZGFwdGVyICovCisJbWVtbW92ZSgmYWRhcHRlci0+aWZfb3BzLCBpZl9vcHMsIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZl9vcHMpKTsKKworCS8qIGNhcmQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gaGFzIGJlZW4gZGVmZXJyZWQgdW50aWwgbm93IC4uICovCisJaWYgKGFkYXB0ZXItPmlmX29wcy5pbml0X2lmKGFkYXB0ZXIpKQorCQlnb3RvIGVycm9yOworCisJYWRhcHRlci0+cHJpdl9udW0gPSAwOworCWZvciAoaSA9IDA7IGkgPCBkcnZfbW9kZV9wdHItPmludGZfbnVtOyBpKyspIHsKKwkJYWRhcHRlci0+cHJpdltpXSA9IE5VTEw7CisKKwkJaWYgKCFkcnZfbW9kZV9wdHItPmJzc19hdHRyW2ldLmFjdGl2ZSkKKwkJCWNvbnRpbnVlOworCisJCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KKwkJYWRhcHRlci0+cHJpdltpXSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUpLAorCQkJCUdGUF9LRVJORUwpOworCQlpZiAoIWFkYXB0ZXItPnByaXZbaV0pIHsKKwkJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiJXM6IGZhaWxlZCB0byBhbGxvYyBwcml2WyVkXVxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgaSk7CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJYWRhcHRlci0+cHJpdl9udW0rKzsKKwkJYWRhcHRlci0+cHJpdltpXS0+YWRhcHRlciA9IGFkYXB0ZXI7CisJCS8qIFNhdmUgYnNzX3R5cGUsIGZyYW1lX3R5cGUgJiBic3NfcHJpb3JpdHkgKi8KKwkJYWRhcHRlci0+cHJpdltpXS0+YnNzX3R5cGUgPSBkcnZfbW9kZV9wdHItPmJzc19hdHRyW2ldLmJzc190eXBlOworCQlhZGFwdGVyLT5wcml2W2ldLT5mcmFtZV90eXBlID0KKwkJCQkJZHJ2X21vZGVfcHRyLT5ic3NfYXR0cltpXS5mcmFtZV90eXBlOworCQlhZGFwdGVyLT5wcml2W2ldLT5ic3NfcHJpb3JpdHkgPQorCQkJCQlkcnZfbW9kZV9wdHItPmJzc19hdHRyW2ldLmJzc19wcmlvcml0eTsKKworCQlpZiAoZHJ2X21vZGVfcHRyLT5ic3NfYXR0cltpXS5ic3NfdHlwZSA9PSBNV0lGSUVYX0JTU19UWVBFX1NUQSkKKwkJCWFkYXB0ZXItPnByaXZbaV0tPmJzc19yb2xlID0gTVdJRklFWF9CU1NfUk9MRV9TVEE7CisJCWVsc2UgaWYgKGRydl9tb2RlX3B0ci0+YnNzX2F0dHJbaV0uYnNzX3R5cGUgPT0KKwkJCQkJCQlNV0lGSUVYX0JTU19UWVBFX1VBUCkKKwkJCWFkYXB0ZXItPnByaXZbaV0tPmJzc19yb2xlID0gTVdJRklFWF9CU1NfUk9MRV9VQVA7CisKKwkJLyogU2F2ZSBic3NfaW5kZXggJiBic3NfbnVtICovCisJCWFkYXB0ZXItPnByaXZbaV0tPmJzc19pbmRleCA9IGk7CisJCWFkYXB0ZXItPnByaXZbaV0tPmJzc19udW0gPSBkcnZfbW9kZV9wdHItPmJzc19hdHRyW2ldLmJzc19udW07CisJfQorCWFkYXB0ZXItPmRydl9tb2RlID0gZHJ2X21vZGVfcHRyOworCisJaWYgKG13aWZpZXhfaW5pdF9sb2NrX2xpc3QoYWRhcHRlcikpCisJCWdvdG8gZXJyb3I7CisKKwlpbml0X3RpbWVyKCZhZGFwdGVyLT5jbWRfdGltZXIpOworCWFkYXB0ZXItPmNtZF90aW1lci5mdW5jdGlvbiA9IG13aWZpZXhfY21kX3RpbWVvdXRfZnVuYzsKKwlhZGFwdGVyLT5jbWRfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBhZGFwdGVyOworCisJcmV0dXJuIDA7CisKK2Vycm9yOgorCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogbGVhdmUgbXdpZmlleF9yZWdpc3RlciB3aXRoIGVycm9yXG4iKTsKKworCW13aWZpZXhfZnJlZV9sb2NrX2xpc3QoYWRhcHRlcik7CisJZm9yIChpID0gMDsgaSA8IGRydl9tb2RlX3B0ci0+aW50Zl9udW07IGkrKykKKwkJa2ZyZWUoYWRhcHRlci0+cHJpdltpXSk7CisJa2ZyZWUoYWRhcHRlcik7CisKKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHVucmVnaXN0ZXJzIHRoZSBkZXZpY2UgYW5kIHBlcmZvcm1zIGFsbCB0aGUgbmVjZXNzYXJ5CisgKiBjbGVhbnVwcy4KKyAqCisgKiBUaGUgZm9sbG93aW5nIGNsZWFudXAgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIC0KKyAqICAgICAgLSBGcmVlIHRoZSB0aW1lcnMKKyAqICAgICAgLSBGcmVlIGJlYWNvbiBidWZmZXJzCisgKiAgICAgIC0gRnJlZSBwcml2YXRlIHN0cnVjdHVyZXMKKyAqICAgICAgLSBGcmVlIGFkYXB0ZXIgc3RydWN0dXJlCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF91bnJlZ2lzdGVyKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJczMyIGk7CisKKwlkZWxfdGltZXIoJmFkYXB0ZXItPmNtZF90aW1lcik7CisKKwkvKiBGcmVlIHByaXZhdGUgc3RydWN0dXJlcyAqLworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5wcml2X251bTsgaSsrKSB7CisJCWlmIChhZGFwdGVyLT5wcml2W2ldKSB7CisJCQltd2lmaWV4X2ZyZWVfY3Vycl9iY24oYWRhcHRlci0+cHJpdltpXSk7CisJCQlrZnJlZShhZGFwdGVyLT5wcml2W2ldKTsKKwkJfQorCX0KKworCWtmcmVlKGFkYXB0ZXIpOworCXJldHVybiAwOworfQorCisvKgorICogVGhlIG1haW4gcHJvY2Vzcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBtYWluIHByb2NlZHVyZSBvZiB0aGUgZHJpdmVyIGFuZCBoYW5kbGVzIHZhcmlvdXMgZHJpdmVyCisgKiBvcGVyYXRpb25zLiBJdCBydW5zIGluIGEgbG9vcCBhbmQgcHJvdmlkZXMgdGhlIGNvcmUgZnVuY3Rpb25hbGl0aWVzLgorICoKKyAqIFRoZSBtYWluIHJlc3BvbnNpYmlsaXRpZXMgb2YgdGhpcyBmdW5jdGlvbiBhcmUgLQorICogICAgICAtIEVuc3VyZSBjb25jdXJyZW5jeSBjb250cm9sCisgKiAgICAgIC0gSGFuZGxlIHBlbmRpbmcgaW50ZXJydXB0cyBhbmQgY2FsbCBpbnRlcnJ1cHQgaGFuZGxlcnMKKyAqICAgICAgLSBXYWtlIHVwIHRoZSBjYXJkIGlmIHJlcXVpcmVkCisgKiAgICAgIC0gSGFuZGxlIGNvbW1hbmQgcmVzcG9uc2VzIGFuZCBjYWxsIHJlc3BvbnNlIGhhbmRsZXJzCisgKiAgICAgIC0gSGFuZGxlIGV2ZW50cyBhbmQgY2FsbCBldmVudCBoYW5kbGVycworICogICAgICAtIEV4ZWN1dGUgcGVuZGluZyBjb21tYW5kcworICogICAgICAtIFRyYW5zbWl0IHBlbmRpbmcgZGF0YSBwYWNrZXRzCisgKi8KK2ludCBtd2lmaWV4X21haW5fcHJvY2VzcyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+bWFpbl9wcm9jX2xvY2ssIGZsYWdzKTsKKworCS8qIENoZWNrIGlmIGFscmVhZHkgcHJvY2Vzc2luZyAqLworCWlmIChhZGFwdGVyLT5td2lmaWV4X3Byb2Nlc3NpbmcpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+bWFpbl9wcm9jX2xvY2ssIGZsYWdzKTsKKwkJZ290byBleGl0X21haW5fcHJvYzsKKwl9IGVsc2UgeworCQlhZGFwdGVyLT5td2lmaWV4X3Byb2Nlc3NpbmcgPSB0cnVlOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5tYWluX3Byb2NfbG9jaywgZmxhZ3MpOworCX0KK3Byb2Nlc3Nfc3RhcnQ6CisJZG8geworCQlpZiAoKGFkYXB0ZXItPmh3X3N0YXR1cyA9PSBNV0lGSUVYX0hXX1NUQVRVU19DTE9TSU5HKSB8fAorCQkgICAgKGFkYXB0ZXItPmh3X3N0YXR1cyA9PSBNV0lGSUVYX0hXX1NUQVRVU19OT1RfUkVBRFkpKQorCQkJYnJlYWs7CisKKwkJLyogSGFuZGxlIHBlbmRpbmcgaW50ZXJydXB0IGlmIGFueSAqLworCQlpZiAoYWRhcHRlci0+aW50X3N0YXR1cykgeworCQkJaWYgKGFkYXB0ZXItPmhzX2FjdGl2YXRlZCkKKwkJCQltd2lmaWV4X3Byb2Nlc3NfaHNfY29uZmlnKGFkYXB0ZXIpOworCQkJYWRhcHRlci0+aWZfb3BzLnByb2Nlc3NfaW50X3N0YXR1cyhhZGFwdGVyKTsKKwkJfQorCisJCS8qIE5lZWQgdG8gd2FrZSB1cCB0aGUgY2FyZCA/ICovCisJCWlmICgoYWRhcHRlci0+cHNfc3RhdGUgPT0gUFNfU1RBVEVfU0xFRVApICYmCisJCSAgICAoYWRhcHRlci0+cG1fd2FrZXVwX2NhcmRfcmVxICYmCisJCSAgICAgIWFkYXB0ZXItPnBtX3dha2V1cF9md190cnkpICYmCisJCSAgICAoaXNfY29tbWFuZF9wZW5kaW5nKGFkYXB0ZXIpCisJCSAgICAgfHwgIW13aWZpZXhfd21tX2xpc3RzX2VtcHR5KGFkYXB0ZXIpKSkgeworCQkJYWRhcHRlci0+cG1fd2FrZXVwX2Z3X3RyeSA9IHRydWU7CisJCQlhZGFwdGVyLT5pZl9vcHMud2FrZXVwKGFkYXB0ZXIpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKElTX0NBUkRfUlhfUkNWRChhZGFwdGVyKSkgeworCQkJYWRhcHRlci0+cG1fd2FrZXVwX2Z3X3RyeSA9IGZhbHNlOworCQkJaWYgKGFkYXB0ZXItPnBzX3N0YXRlID09IFBTX1NUQVRFX1NMRUVQKQorCQkJCWFkYXB0ZXItPnBzX3N0YXRlID0gUFNfU1RBVEVfQVdBS0U7CisJCX0gZWxzZSB7CisJCQkvKiBXZSBoYXZlIHRyaWVkIHRvIHdha2V1cCB0aGUgY2FyZCBhbHJlYWR5ICovCisJCQlpZiAoYWRhcHRlci0+cG1fd2FrZXVwX2Z3X3RyeSkKKwkJCQlicmVhazsKKwkJCWlmIChhZGFwdGVyLT5wc19zdGF0ZSAhPSBQU19TVEFURV9BV0FLRSB8fAorCQkJICAgIGFkYXB0ZXItPnR4X2xvY2tfZmxhZykKKwkJCQlicmVhazsKKworCQkJaWYgKGFkYXB0ZXItPnNjYW5fcHJvY2Vzc2luZyB8fCBhZGFwdGVyLT5kYXRhX3NlbnQKKwkJCSAgICB8fCBtd2lmaWV4X3dtbV9saXN0c19lbXB0eShhZGFwdGVyKSkgeworCQkJCWlmIChhZGFwdGVyLT5jbWRfc2VudCB8fCBhZGFwdGVyLT5jdXJyX2NtZAorCQkJCSAgICB8fCAoIWlzX2NvbW1hbmRfcGVuZGluZyhhZGFwdGVyKSkpCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJLyogQ2hlY2sgZm9yIENtZCBSZXNwICovCisJCWlmIChhZGFwdGVyLT5jbWRfcmVzcF9yZWNlaXZlZCkgeworCQkJYWRhcHRlci0+Y21kX3Jlc3BfcmVjZWl2ZWQgPSBmYWxzZTsKKwkJCW13aWZpZXhfcHJvY2Vzc19jbWRyZXNwKGFkYXB0ZXIpOworCisJCQkvKiBjYWxsIG13aWZpZXggYmFjayB3aGVuIGluaXRfZncgaXMgZG9uZSAqLworCQkJaWYgKGFkYXB0ZXItPmh3X3N0YXR1cyA9PSBNV0lGSUVYX0hXX1NUQVRVU19JTklUX0RPTkUpIHsKKwkJCQlhZGFwdGVyLT5od19zdGF0dXMgPSBNV0lGSUVYX0hXX1NUQVRVU19SRUFEWTsKKwkJCQltd2lmaWV4X2luaXRfZndfY29tcGxldGUoYWRhcHRlcik7CisJCQl9CisJCX0KKworCQkvKiBDaGVjayBmb3IgZXZlbnQgKi8KKwkJaWYgKGFkYXB0ZXItPmV2ZW50X3JlY2VpdmVkKSB7CisJCQlhZGFwdGVyLT5ldmVudF9yZWNlaXZlZCA9IGZhbHNlOworCQkJbXdpZmlleF9wcm9jZXNzX2V2ZW50KGFkYXB0ZXIpOworCQl9CisKKwkJLyogQ2hlY2sgaWYgd2UgbmVlZCB0byBjb25maXJtIFNsZWVwIFJlcXVlc3QKKwkJICAgcmVjZWl2ZWQgcHJldmlvdXNseSAqLworCQlpZiAoYWRhcHRlci0+cHNfc3RhdGUgPT0gUFNfU1RBVEVfUFJFX1NMRUVQKSB7CisJCQlpZiAoIWFkYXB0ZXItPmNtZF9zZW50ICYmICFhZGFwdGVyLT5jdXJyX2NtZCkKKwkJCQltd2lmaWV4X2NoZWNrX3BzX2NvbmQoYWRhcHRlcik7CisJCX0KKworCQkvKiAqIFRoZSBwc19zdGF0ZSBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQgZHVyaW5nIHByb2Nlc3Npbmcgb2YKKwkJICogU2xlZXAgUmVxdWVzdCBldmVudC4KKwkJICovCisJCWlmICgoYWRhcHRlci0+cHNfc3RhdGUgPT0gUFNfU1RBVEVfU0xFRVApCisJCSAgICB8fCAoYWRhcHRlci0+cHNfc3RhdGUgPT0gUFNfU1RBVEVfUFJFX1NMRUVQKQorCQkgICAgfHwgKGFkYXB0ZXItPnBzX3N0YXRlID09IFBTX1NUQVRFX1NMRUVQX0NGTSkKKwkJICAgIHx8IGFkYXB0ZXItPnR4X2xvY2tfZmxhZykKKwkJCWNvbnRpbnVlOworCisJCWlmICghYWRhcHRlci0+Y21kX3NlbnQgJiYgIWFkYXB0ZXItPmN1cnJfY21kKSB7CisJCQlpZiAobXdpZmlleF9leGVjX25leHRfY21kKGFkYXB0ZXIpID09IC0xKSB7CisJCQkJcmV0ID0gLTE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoIWFkYXB0ZXItPnNjYW5fcHJvY2Vzc2luZyAmJiAhYWRhcHRlci0+ZGF0YV9zZW50ICYmCisJCSAgICAhbXdpZmlleF93bW1fbGlzdHNfZW1wdHkoYWRhcHRlcikpIHsKKwkJCW13aWZpZXhfd21tX3Byb2Nlc3NfdHgoYWRhcHRlcik7CisJCQlpZiAoYWRhcHRlci0+aHNfYWN0aXZhdGVkKSB7CisJCQkJYWRhcHRlci0+aXNfaHNfY29uZmlndXJlZCA9IGZhbHNlOworCQkJCW13aWZpZXhfaHNfYWN0aXZhdGVkX2V2ZW50CisJCQkJCShtd2lmaWV4X2dldF9wcml2CisJCQkJCSAoYWRhcHRlciwgTVdJRklFWF9CU1NfUk9MRV9BTlkpLAorCQkJCQkgZmFsc2UpOworCQkJfQorCQl9CisKKwkJaWYgKGFkYXB0ZXItPmRlbGF5X251bGxfcGt0ICYmICFhZGFwdGVyLT5jbWRfc2VudCAmJgorCQkgICAgIWFkYXB0ZXItPmN1cnJfY21kICYmICFpc19jb21tYW5kX3BlbmRpbmcoYWRhcHRlcikKKwkJICAgICYmIG13aWZpZXhfd21tX2xpc3RzX2VtcHR5KGFkYXB0ZXIpKSB7CisJCQlpZiAoIW13aWZpZXhfc2VuZF9udWxsX3BhY2tldAorCQkJICAgIChtd2lmaWV4X2dldF9wcml2KGFkYXB0ZXIsIE1XSUZJRVhfQlNTX1JPTEVfU1RBKSwKKwkJCSAgICAgTVdJRklFWF9UeFBEX1BPV0VSX01HTVRfTlVMTF9QQUNLRVQgfAorCQkJICAgICBNV0lGSUVYX1R4UERfUE9XRVJfTUdNVF9MQVNUX1BBQ0tFVCkpIHsKKwkJCQlhZGFwdGVyLT5kZWxheV9udWxsX3BrdCA9IGZhbHNlOworCQkJCWFkYXB0ZXItPnBzX3N0YXRlID0gUFNfU1RBVEVfU0xFRVA7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKHRydWUpOworCisJaWYgKChhZGFwdGVyLT5pbnRfc3RhdHVzKSB8fCBJU19DQVJEX1JYX1JDVkQoYWRhcHRlcikpCisJCWdvdG8gcHJvY2Vzc19zdGFydDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5tYWluX3Byb2NfbG9jaywgZmxhZ3MpOworCWFkYXB0ZXItPm13aWZpZXhfcHJvY2Vzc2luZyA9IGZhbHNlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPm1haW5fcHJvY19sb2NrLCBmbGFncyk7CisKK2V4aXRfbWFpbl9wcm9jOgorCWlmIChhZGFwdGVyLT5od19zdGF0dXMgPT0gTVdJRklFWF9IV19TVEFUVVNfQ0xPU0lORykKKwkJbXdpZmlleF9zaHV0ZG93bl9kcnYoYWRhcHRlcik7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHNvZnR3YXJlLgorICoKKyAqIFRoZSBtYWluIHdvcmsgaW5jbHVkZXMgYWxsb2NhdGluZyBhbmQgaW5pdGlhbGl6aW5nIHRoZSBhZGFwdGVyIHN0cnVjdHVyZQorICogYW5kIGluaXRpYWxpemluZyB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmVzLgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X2luaXRfc3codm9pZCAqY2FyZCwgc3RydWN0IG13aWZpZXhfaWZfb3BzICppZl9vcHMpCit7CisJaW50IGk7CisJc3RydWN0IG13aWZpZXhfZHJ2X21vZGUgKmRydl9tb2RlX3B0cjsKKworCS8qIGZpbmQgbXdpZmlleF9kcnZfbW9kZSBlbnRyeSBmcm9tIG13aWZpZXhfZHJ2X21vZGVfdGJsICovCisJZHJ2X21vZGVfcHRyID0gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtd2lmaWV4X2Rydl9tb2RlX3RibCk7IGkrKykgeworCQlpZiAobXdpZmlleF9kcnZfbW9kZV90YmxbaV0uZHJ2X21vZGUgPT0gZHJ2X21vZGUpIHsKKwkJCWRydl9tb2RlX3B0ciA9ICZtd2lmaWV4X2Rydl9tb2RlX3RibFtpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFkcnZfbW9kZV9wdHIpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIGRydl9tb2RlPSVkXG4iLCBkcnZfbW9kZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAobXdpZmlleF9yZWdpc3RlcihjYXJkLCBpZl9vcHMsIGRydl9tb2RlX3B0cikpCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBmcmVlcyB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUuCisgKgorICogQWRkaXRpb25hbGx5LCB0aGlzIGNsb3NlcyB0aGUgbmV0bGluayBzb2NrZXQsIGZyZWVzIHRoZSB0aW1lcnMKKyAqIGFuZCBwcml2YXRlIHN0cnVjdHVyZXMuCisgKi8KK3N0YXRpYyB2b2lkIG13aWZpZXhfZnJlZV9hZGFwdGVyKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKCFhZGFwdGVyKSB7CisJCXByX2VycigiJXM6IGFkYXB0ZXIgaXMgTlVMTFxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJbXdpZmlleF91bnJlZ2lzdGVyKGFkYXB0ZXIpOworCXByX2RlYnVnKCJpbmZvOiAlczogZnJlZSBhZGFwdGVyXG4iLCBfX2Z1bmNfXyk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBoYXJkd2FyZSBhbmQgZmlybXdhcmUuCisgKgorICogVGhlIG1haW4gaW5pdGlhbGl6YXRpb24gc3RlcHMgZm9sbG93ZWQgYXJlIC0KKyAqICAgICAgLSBEb3dubG9hZCB0aGUgY29ycmVjdCBmaXJtd2FyZSB0byBjYXJkCisgKiAgICAgIC0gQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIGFkYXB0ZXIgc3RydWN0dXJlCisgKiAgICAgIC0gSW5pdGlhbGl6ZSB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmVzCisgKiAgICAgIC0gSXNzdWUgdGhlIGluaXQgY29tbWFuZHMgdG8gZmlybXdhcmUKKyAqLworc3RhdGljIGludCBtd2lmaWV4X2luaXRfaHdfZncoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgcmV0LCBlcnI7CisJc3RydWN0IG13aWZpZXhfZndfaW1hZ2UgZnc7CisKKwltZW1zZXQoJmZ3LCAwLCBzaXplb2Yoc3RydWN0IG13aWZpZXhfZndfaW1hZ2UpKTsKKworCXN3aXRjaCAoYWRhcHRlci0+cmV2aXNpb25faWQpIHsKKwljYXNlIFNEODc4N19XMDoKKwljYXNlIFNEODc4N19XMToKKwkJc3RyY3B5KGZ3X25hbWUsIFNEODc4N19XMV9GV19OQU1FKTsKKwkJYnJlYWs7CisJY2FzZSBTRDg3ODdfQTA6CisJY2FzZSBTRDg3ODdfQTE6CisJCXN0cmNweShmd19uYW1lLCBTRDg3ODdfQVhfRldfTkFNRSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmFkYXB0ZXItPmZpcm13YXJlLCBmd19uYW1lLCBhZGFwdGVyLT5kZXYpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAicmVxdWVzdF9maXJtd2FyZSgpIHJldHVybmVkIgorCQkJCSIgZXJyb3IgY29kZSAlI3hcbiIsIGVycik7CisJCXJldCA9IC0xOworCQlnb3RvIGRvbmU7CisJfQorCWZ3LmZ3X2J1ZiA9ICh1OCAqKSBhZGFwdGVyLT5maXJtd2FyZS0+ZGF0YTsKKwlmdy5md19sZW4gPSBhZGFwdGVyLT5maXJtd2FyZS0+c2l6ZTsKKworCXJldCA9IG13aWZpZXhfZG5sZF9mdyhhZGFwdGVyLCAmZncpOworCWlmIChyZXQgPT0gLTEpCisJCWdvdG8gZG9uZTsKKworCWRldl9ub3RpY2UoYWRhcHRlci0+ZGV2LCAiV0xBTiBGVyBpcyBhY3RpdmVcbiIpOworCisJYWRhcHRlci0+aW5pdF93YWl0X3Ffd29rZW4gPSBmYWxzZTsKKwlyZXQgPSBtd2lmaWV4X2luaXRfZncoYWRhcHRlcik7CisJaWYgKHJldCA9PSAtMSkgeworCQlnb3RvIGRvbmU7CisJfSBlbHNlIGlmICghcmV0KSB7CisJCWFkYXB0ZXItPmh3X3N0YXR1cyA9IE1XSUZJRVhfSFdfU1RBVFVTX1JFQURZOworCQlnb3RvIGRvbmU7CisJfQorCS8qIFdhaXQgZm9yIG13aWZpZXhfaW5pdCB0byBjb21wbGV0ZSAqLworCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShhZGFwdGVyLT5pbml0X3dhaXRfcSwKKwkJCQkgYWRhcHRlci0+aW5pdF93YWl0X3Ffd29rZW4pOworCWlmIChhZGFwdGVyLT5od19zdGF0dXMgIT0gTVdJRklFWF9IV19TVEFUVVNfUkVBRFkpIHsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9CisJcmV0ID0gMDsKKworZG9uZToKKwlpZiAoYWRhcHRlci0+ZmlybXdhcmUpCisJCXJlbGVhc2VfZmlybXdhcmUoYWRhcHRlci0+ZmlybXdhcmUpOworCWlmIChyZXQpCisJCXJldCA9IC0xOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGZpbGxzIGEgZHJpdmVyIGJ1ZmZlci4KKyAqCisgKiBUaGUgZnVuY3Rpb24gYXNzb2NpYXRlcyBhIGdpdmVuIFNLQiB3aXRoIHRoZSBwcm92aWRlZCBkcml2ZXIgYnVmZmVyCisgKiBhbmQgYWxzbyB1cGRhdGVzIHNvbWUgb2YgdGhlIFNLQiBwYXJhbWV0ZXJzLCBpbmNsdWRpbmcgSVAgaGVhZGVyLAorICogcHJpb3JpdHkgYW5kIHRpbWVzdGFtcC4KKyAqLworc3RhdGljIHZvaWQKK213aWZpZXhfZmlsbF9idWZmZXIoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgZXRoaGRyICpldGg7CisJc3RydWN0IGlwaGRyICppcGg7CisJc3RydWN0IHRpbWV2YWwgdHY7CisJdTggdGlkID0gMDsKKworCWV0aCA9IChzdHJ1Y3QgZXRoaGRyICopIHNrYi0+ZGF0YTsKKwlzd2l0Y2ggKGV0aC0+aF9wcm90bykgeworCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk6CisJCWlwaCA9IGlwX2hkcihza2IpOworCQl0aWQgPSBJUFRPU19QUkVDKGlwaC0+dG9zKTsKKwkJcHJfZGVidWcoImRhdGE6IHBhY2tldCB0eXBlIEVUSF9QX0lQOiAlMDR4LCB0aWQ9JSN4IHByaW89JSN4XG4iLAorCQkgICAgICAgZXRoLT5oX3Byb3RvLCB0aWQsIHNrYi0+cHJpb3JpdHkpOworCQlicmVhazsKKwljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQVJQKToKKwkJcHJfZGVidWcoImRhdGE6IEFSUCBwYWNrZXQ6ICUwNHhcbiIsIGV0aC0+aF9wcm90byk7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorLyogT2Zmc2V0IGZvciBUT1MgZmllbGQgaW4gdGhlIElQIGhlYWRlciAqLworI2RlZmluZSBJUFRPU19PRkZTRVQgNQorCXRpZCA9ICh0aWQgPj4gSVBUT1NfT0ZGU0VUKTsKKwlza2ItPnByaW9yaXR5ID0gdGlkOworCS8qIFJlY29yZCB0aGUgY3VycmVudCB0aW1lIHRoZSBwYWNrZXQgd2FzIHF1ZXVlZDsgdXNlZCB0bworCSAgIGRldGVybWluZSB0aGUgYW1vdW50IG9mIHRpbWUgdGhlIHBhY2tldCB3YXMgcXVldWVkIGluCisJICAgdGhlIGRyaXZlciBiZWZvcmUgaXQgd2FzIHNlbnQgdG8gdGhlIGZpcm13YXJlLgorCSAgIFRoZSBkZWxheSBpcyB0aGVuIHNlbnQgYWxvbmcgd2l0aCB0aGUgcGFja2V0IHRvIHRoZQorCSAgIGZpcm13YXJlIGZvciBhZ2dyZWdhdGUgZGVsYXkgY2FsY3VsYXRpb24gZm9yIHN0YXRzIGFuZAorCSAgIE1TRFUgbGlmZXRpbWUgZXhwaXJ5LgorCSAqLworCWRvX2dldHRpbWVvZmRheSgmdHYpOworCXNrYi0+dHN0YW1wID0gdGltZXZhbF90b19rdGltZSh0dik7Cit9CisKKy8qCisgKiBDRkc4MDIuMTEgbmV0d29yayBkZXZpY2UgaGFuZGxlciBmb3Igb3Blbi4KKyAqCisgKiBTdGFydHMgdGhlIGRhdGEgcXVldWUuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDRkc4MDIuMTEgbmV0d29yayBkZXZpY2UgaGFuZGxlciBmb3IgY2xvc2UuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENGRzgwMi4xMSBuZXR3b3JrIGRldmljZSBoYW5kbGVyIGZvciBkYXRhIHRyYW5zbWlzc2lvbi4KKyAqLworc3RhdGljIGludAorbXdpZmlleF9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0gbXdpZmlleF9uZXRkZXZfZ2V0X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjsKKwlzdHJ1Y3QgbXdpZmlleF90eGluZm8gKnR4X2luZm87CisKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImRhdGE6ICVsdSBCU1MoJWQpOiBEYXRhIDw9IGtlcm5lbFxuIiwKKwkJCQlqaWZmaWVzLCBwcml2LT5ic3NfaW5kZXgpOworCisJaWYgKHByaXYtPmFkYXB0ZXItPnN1cnByaXNlX3JlbW92ZWQpIHsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc2tiLT5sZW4gfHwgKHNrYi0+bGVuID4gRVRIX0ZSQU1FX0xFTikpIHsKKwkJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsICJUeDogYmFkIHNrYiBsZW4gJWRcbiIsIHNrYi0+bGVuKTsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IE1XSUZJRVhfTUlOX0RBVEFfSEVBREVSX0xFTikgeworCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwKKwkJCSJkYXRhOiBUeDogaW5zdWZmaWNpZW50IHNrYiBoZWFkcm9vbSAlZFxuIiwKKwkJICAgICAgIHNrYl9oZWFkcm9vbShza2IpKTsKKwkJLyogSW5zdWZmaWNpZW50IHNrYiBoZWFkcm9vbSAtIGFsbG9jYXRlIGEgbmV3IHNrYiAqLworCQluZXdfc2tiID0KKwkJCXNrYl9yZWFsbG9jX2hlYWRyb29tKHNrYiwgTVdJRklFWF9NSU5fREFUQV9IRUFERVJfTEVOKTsKKwkJaWYgKHVubGlrZWx5KCFuZXdfc2tiKSkgeworCQkJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsICJUeDogY2Fubm90IGFsbG9jYSBuZXdfc2tiXG4iKTsKKwkJCWtmcmVlX3NrYihza2IpOworCQkJcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQkJcmV0dXJuIDA7CisJCX0KKwkJa2ZyZWVfc2tiKHNrYik7CisJCXNrYiA9IG5ld19za2I7CisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogbmV3IHNrYiBoZWFkcm9vbWQgJWRcbiIsCisJCQkJc2tiX2hlYWRyb29tKHNrYikpOworCX0KKworCXR4X2luZm8gPSBNV0lGSUVYX1NLQl9UWENCKHNrYik7CisJdHhfaW5mby0+YnNzX2luZGV4ID0gcHJpdi0+YnNzX2luZGV4OworCW13aWZpZXhfZmlsbF9idWZmZXIoc2tiKTsKKworCW13aWZpZXhfd21tX2FkZF9idWZfdHhxdWV1ZShwcml2LT5hZGFwdGVyLCBza2IpOworCWF0b21pY19pbmMoJnByaXYtPmFkYXB0ZXItPnR4X3BlbmRpbmcpOworCisJaWYgKGF0b21pY19yZWFkKCZwcml2LT5hZGFwdGVyLT50eF9wZW5kaW5nKSA+PSBNQVhfVFhfUEVORElORykgeworCQluZXRpZl9zdG9wX3F1ZXVlKHByaXYtPm5ldGRldik7CisJCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCX0KKworCXF1ZXVlX3dvcmsocHJpdi0+YWRhcHRlci0+d29ya3F1ZXVlLCAmcHJpdi0+YWRhcHRlci0+bWFpbl93b3JrKTsKKworCXJldHVybiAwOworfQorCisvKgorICogQ0ZHODAyLjExIG5ldHdvcmsgZGV2aWNlIGhhbmRsZXIgZm9yIHNldHRpbmcgTUFDIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpCit7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9IG13aWZpZXhfbmV0ZGV2X2dldF9wcml2KGRldik7CisJc3RydWN0IHNvY2thZGRyICpod19hZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSBhZGRyOworCWludCByZXQ7CisKKwltZW1jcHkocHJpdi0+Y3Vycl9hZGRyLCBod19hZGRyLT5zYV9kYXRhLCBFVEhfQUxFTik7CisKKwkvKiBTZW5kIHJlcXVlc3QgdG8gZmlybXdhcmUgKi8KKwlyZXQgPSBtd2lmaWV4X3NlbmRfY21kX3N5bmMocHJpdiwgSG9zdENtZF9DTURfODAyXzExX01BQ19BRERSRVNTLAorCQkJCSAgICBIb3N0Q21kX0FDVF9HRU5fU0VULCAwLCBOVUxMKTsKKworCWlmICghcmV0KQorCQltZW1jcHkocHJpdi0+bmV0ZGV2LT5kZXZfYWRkciwgcHJpdi0+Y3Vycl9hZGRyLCBFVEhfQUxFTik7CisJZWxzZQorCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgInNldCBtYWMgYWRkcmVzcyBmYWlsZWQ6IHJldD0lZCIKKwkJCQkJICAgICJcbiIsIHJldCk7CisKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgcHJpdi0+Y3Vycl9hZGRyLCBFVEhfQUxFTik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQ0ZHODAyLjExIG5ldHdvcmsgZGV2aWNlIGhhbmRsZXIgZm9yIHNldHRpbmcgbXVsdGljYXN0IGxpc3QuCisgKi8KK3N0YXRpYyB2b2lkIG13aWZpZXhfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9IG13aWZpZXhfbmV0ZGV2X2dldF9wcml2KGRldik7CisJc3RydWN0IG13aWZpZXhfbXVsdGljYXN0X2xpc3QgbWNhc3RfbGlzdDsKKworCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKKwkJbWNhc3RfbGlzdC5tb2RlID0gTVdJRklFWF9QUk9NSVNDX01PREU7CisJfSBlbHNlIGlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJIHx8CisJCSAgIG5ldGRldl9tY19jb3VudChkZXYpID4gTVdJRklFWF9NQVhfTVVMVElDQVNUX0xJU1RfU0laRSkgeworCQltY2FzdF9saXN0Lm1vZGUgPSBNV0lGSUVYX0FMTF9NVUxUSV9NT0RFOworCX0gZWxzZSB7CisJCW1jYXN0X2xpc3QubW9kZSA9IE1XSUZJRVhfTVVMVElDQVNUX01PREU7CisJCWlmIChuZXRkZXZfbWNfY291bnQoZGV2KSkKKwkJCW1jYXN0X2xpc3QubnVtX211bHRpY2FzdF9hZGRyID0KKwkJCQltd2lmaWV4X2NvcHlfbWNhc3RfYWRkcigmbWNhc3RfbGlzdCwgZGV2KTsKKwl9CisJbXdpZmlleF9yZXF1ZXN0X3NldF9tdWx0aWNhc3RfbGlzdChwcml2LCAmbWNhc3RfbGlzdCk7Cit9CisKKy8qCisgKiBDRkc4MDIuMTEgbmV0d29yayBkZXZpY2UgaGFuZGxlciBmb3IgdHJhbnNtaXNzaW9uIHRpbWVvdXQuCisgKi8KK3N0YXRpYyB2b2lkCittd2lmaWV4X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0gbXdpZmlleF9uZXRkZXZfZ2V0X3ByaXYoZGV2KTsKKworCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LCAiJWx1IDogVHggdGltZW91dCwgYnNzX2luZGV4PSVkXG4iLAorCQkJCWppZmZpZXMsIHByaXYtPmJzc19pbmRleCk7CisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJcHJpdi0+bnVtX3R4X3RpbWVvdXQrKzsKK30KKworLyoKKyAqIENGRzgwMi4xMSBuZXR3b3JrIGRldmljZSBoYW5kbGVyIGZvciBzdGF0aXN0aWNzIHJldHJpZXZhbC4KKyAqLworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICptd2lmaWV4X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBtd2lmaWV4X25ldGRldl9nZXRfcHJpdihkZXYpOworCisJcmV0dXJuICZwcml2LT5zdGF0czsKK30KKworLyogTmV0d29yayBkZXZpY2UgaGFuZGxlcnMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbXdpZmlleF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiA9IG13aWZpZXhfb3BlbiwKKwkubmRvX3N0b3AgPSBtd2lmaWV4X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCA9IG13aWZpZXhfaGFyZF9zdGFydF94bWl0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzID0gbXdpZmlleF9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb190eF90aW1lb3V0ID0gbXdpZmlleF90eF90aW1lb3V0LAorCS5uZG9fZ2V0X3N0YXRzID0gbXdpZmlleF9nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBtd2lmaWV4X3NldF9tdWx0aWNhc3RfbGlzdCwKK307CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBwYXJhbWV0ZXJzLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgd2FpdCBxdWV1ZXMgYXJlIGluaXRpYWxpemVkIC0KKyAqICAgICAgLSBJT0NUTCB3YWl0IHF1ZXVlCisgKiAgICAgIC0gQ29tbWFuZCB3YWl0IHF1ZXVlCisgKiAgICAgIC0gU3RhdGlzdGljcyB3YWl0IHF1ZXVlCisgKgorICogLi4uYW5kIHRoZSBmb2xsb3dpbmcgZGVmYXVsdCBwYXJhbWV0ZXJzIGFyZSBzZXQgLQorICogICAgICAtIEN1cnJlbnQga2V5IGluZGV4ICAgICA6IFNldCB0byAwCisgKiAgICAgIC0gUmF0ZSBpbmRleCAgICAgICAgICAgIDogU2V0IHRvIGF1dG8KKyAqICAgICAgLSBNZWRpYSBjb25uZWN0ZWQgICAgICAgOiBTZXQgdG8gZGlzY29ubmVjdGVkCisgKiAgICAgIC0gQWRob2MgbGluayBzZW5zZWQgICAgIDogU2V0IHRvIGZhbHNlCisgKiAgICAgIC0gTmljayBuYW1lICAgICAgICAgICAgIDogU2V0IHRvIG51bGwKKyAqICAgICAgLSBOdW1iZXIgb2YgVHggdGltZW91dCAgOiBTZXQgdG8gMAorICogICAgICAtIERldmljZSBhZGRyZXNzICAgICAgICA6IFNldCB0byBjdXJyZW50IGFkZHJlc3MKKyAqCisgKiBJbiBhZGRpdGlvbiwgdGhlIENGRzgwMjExIHdvcmsgcXVldWUgaXMgYWxzbyBjcmVhdGVkLgorICovCitzdGF0aWMgdm9pZAorbXdpZmlleF9pbml0X3ByaXZfcGFyYW1zKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJZGV2LT5uZXRkZXZfb3BzID0gJm13aWZpZXhfbmV0ZGV2X29wczsKKwkvKiBJbml0aWFsaXplIHByaXZhdGUgc3RydWN0dXJlICovCisJcHJpdi0+Y3VycmVudF9rZXlfaW5kZXggPSAwOworCXByaXYtPm1lZGlhX2Nvbm5lY3RlZCA9IGZhbHNlOworCW1lbXNldCgmcHJpdi0+bmlja19uYW1lLCAwLCBzaXplb2YocHJpdi0+bmlja19uYW1lKSk7CisJcHJpdi0+bnVtX3R4X3RpbWVvdXQgPSAwOworCXByaXYtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJjZmc4MDIxMV93cSIpOworCUlOSVRfV09SSygmcHJpdi0+Y2ZnX3dvcmtxdWV1ZSwgbXdpZmlleF9jZmc4MDIxMV9yZXN1bHRzKTsKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgcHJpdi0+Y3Vycl9hZGRyLCBFVEhfQUxFTik7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGFkZHMgYSBuZXcgbG9naWNhbCBpbnRlcmZhY2UuCisgKgorICogSXQgYWxsb2NhdGVzLCBpbml0aWFsaXplcyBhbmQgcmVnaXN0ZXJzIHRoZSBpbnRlcmZhY2UgYnkgcGVyZm9ybWluZworICogdGhlIGZvbGxvd2luZyBvcGVhcmF0aW9ucyAtCisgKiAgICAgIC0gQWxsb2NhdGUgYSBuZXcgbmV0IGRldmljZSBzdHJ1Y3R1cmUKKyAqICAgICAgLSBBc3NpZ24gZGV2aWNlIG5hbWUKKyAqICAgICAgLSBSZWdpc3RlciB0aGUgbmV3IGRldmljZSB3aXRoIENGRzgwMjExIHN1YnN5c3RlbQorICogICAgICAtIEluaXRpYWxpemUgc2VtYXBob3JlIGFuZCBwcml2YXRlIHN0cnVjdHVyZQorICogICAgICAtIFJlZ2lzdGVyIHRoZSBuZXcgZGV2aWNlIHdpdGgga2VybmVsCisgKiAgICAgIC0gQ3JlYXRlIHRoZSBjb21wbGV0ZSBkZWJ1ZyBGUyBzdHJ1Y3R1cmUgaWYgY29uZmlndXJlZAorICovCitzdGF0aWMgc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqbXdpZmlleF9hZGRfaW50ZXJmYWNlKAorCQkJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCXU4IGJzc19pbmRleCwgdTggYnNzX3R5cGUpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2OworCXZvaWQgKm1kZXZfcHJpdjsKKworCWRldiA9IGFsbG9jX25ldGRldl9tcShzaXplb2Yoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqKSwgIm1sYW4lZCIsCisJCQkgICAgICBldGhlcl9zZXR1cCwgMSk7CisJaWYgKCFkZXYpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJubyBtZW1vcnkgYXZhaWxhYmxlIGZvciBuZXRkZXZpY2VcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCWlmIChtd2lmaWV4X3JlZ2lzdGVyX2NmZzgwMjExKGRldiwgYWRhcHRlci0+cHJpdltic3NfaW5kZXhdLT5jdXJyX2FkZHIsCisJCQkJICAgICAgYWRhcHRlci0+cHJpdltic3NfaW5kZXhdKSAhPSAwKSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiY2Fubm90IHJlZ2lzdGVyIG5ldGRldmljZSB3aXRoIGNmZzgwMjExXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisJLyogU2F2ZSB0aGUgcHJpdiBwb2ludGVyIGluIG5ldGRldiAqLworCXByaXYgPSBhZGFwdGVyLT5wcml2W2Jzc19pbmRleF07CisJbWRldl9wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwkqKCh1bnNpZ25lZCBsb25nICopIG1kZXZfcHJpdikgPSAodW5zaWduZWQgbG9uZykgcHJpdjsKKworCXByaXYtPm5ldGRldiA9IGRldjsKKworCXNlbWFfaW5pdCgmcHJpdi0+YXN5bmNfc2VtLCAxKTsKKwlwcml2LT5zY2FuX3BlbmRpbmdfb25fYmxvY2sgPSBmYWxzZTsKKworCW13aWZpZXhfaW5pdF9wcml2X3BhcmFtcyhwcml2LCBkZXYpOworCisJU0VUX05FVERFVl9ERVYoZGV2LCBhZGFwdGVyLT5kZXYpOworCisJLyogUmVnaXN0ZXIgbmV0d29yayBkZXZpY2UgKi8KKwlpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJjYW5ub3QgcmVnaXN0ZXIgdmlydHVhbCBuZXR3b3JrIGRldmljZVxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiAlczogTWFydmVsbCA4MDIuMTEgQWRhcHRlclxuIiwgZGV2LT5uYW1lKTsKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwltd2lmaWV4X2Rldl9kZWJ1Z2ZzX2luaXQocHJpdik7CisjZW5kaWYKKwlyZXR1cm4gcHJpdjsKK2Vycm9yOgorCWlmIChkZXYpCisJCWZyZWVfbmV0ZGV2KGRldik7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgYSBsb2dpY2FsIGludGVyZmFjZS4KKyAqCisgKiBJdCBkZXJlZ2lzdGVycywgcmVzZXRzIGFuZCBmcmVlcyB0aGUgaW50ZXJmYWNlIGJ5IHBlcmZvcm1pbmcKKyAqIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyAtCisgKiAgICAgIC0gRGlzY29ubmVjdCB0aGUgZGV2aWNlIGlmIGNvbm5lY3RlZCwgc2VuZCB3aXJlbGVzcyBldmVudCB0bworICogICAgICAgIG5vdGlmeSBhcHBsaWNhdGlvbnMuCisgKiAgICAgIC0gUmVtb3ZlIHRoZSBkZWJ1ZyBGUyBzdHJ1Y3R1cmUgaWYgY29uZmlndXJlZAorICogICAgICAtIFVucmVnaXN0ZXIgdGhlIGRldmljZSBmcm9tIGtlcm5lbAorICogICAgICAtIEZyZWUgdGhlIG5ldCBkZXZpY2Ugc3RydWN0dXJlCisgKiAgICAgIC0gQ2FuY2VsIGFsbCB3b3JrcyBhbmQgZGVzdHJveSB3b3JrIHF1ZXVlCisgKiAgICAgIC0gVW5yZWdpc3RlciBhbmQgZnJlZSB0aGUgd2lyZWxlc3MgZGV2aWNlIGZyb20gQ0ZHODAyMTEgc3Vic3lzdGVtCisgKi8KK3N0YXRpYyB2b2lkCittd2lmaWV4X3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwgdTggYnNzX2luZGV4KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9IGFkYXB0ZXItPnByaXZbYnNzX2luZGV4XTsKKworCWlmICghcHJpdikKKwkJcmV0dXJuOworCWRldiA9IHByaXYtPm5ldGRldjsKKworCWlmIChwcml2LT5tZWRpYV9jb25uZWN0ZWQpCisJCXByaXYtPm1lZGlhX2Nvbm5lY3RlZCA9IGZhbHNlOworCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJbXdpZmlleF9kZXZfZGVidWdmc19yZW1vdmUocHJpdik7CisjZW5kaWYKKwkvKiBMYXN0IHJlZmVyZW5jZSBpcyBvdXIgb25lICovCisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiAlczogcmVmY250ID0gJWRcbiIsCisJCQkJZGV2LT5uYW1lLCBuZXRkZXZfcmVmY250X3JlYWQoZGV2KSk7CisKKwlpZiAoZGV2LT5yZWdfc3RhdGUgPT0gTkVUUkVHX1JFR0lTVEVSRUQpCisJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisKKwkvKiBDbGVhciB0aGUgcHJpdiBpbiBhZGFwdGVyICovCisJcHJpdi0+bmV0ZGV2ID0gTlVMTDsKKwlpZiAoZGV2KQorCQlmcmVlX25ldGRldihkZXYpOworCisJY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+Y2ZnX3dvcmtxdWV1ZSk7CisJZmx1c2hfd29ya3F1ZXVlKHByaXYtPndvcmtxdWV1ZSk7CisJZGVzdHJveV93b3JrcXVldWUocHJpdi0+d29ya3F1ZXVlKTsKKwl3aXBoeV91bnJlZ2lzdGVyKHByaXYtPndkZXYtPndpcGh5KTsKKwl3aXBoeV9mcmVlKHByaXYtPndkZXYtPndpcGh5KTsKKwlrZnJlZShwcml2LT53ZGV2KTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2sgaWYgY29tbWFuZCBpcyBwZW5kaW5nLgorICovCitpbnQgaXNfY29tbWFuZF9wZW5kaW5nKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaXNfY21kX3BlbmRfcV9lbXB0eTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5jbWRfcGVuZGluZ19xX2xvY2ssIGZsYWdzKTsKKwlpc19jbWRfcGVuZF9xX2VtcHR5ID0gbGlzdF9lbXB0eSgmYWRhcHRlci0+Y21kX3BlbmRpbmdfcSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kX3BlbmRpbmdfcV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gIWlzX2NtZF9wZW5kX3FfZW1wdHk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNvcnJlY3QgcHJpdmF0ZSBzdHJ1Y3R1cmUgcG9pbnRlciBiYXNlZAorICogdXBvbiB0aGUgQlNTIG51bWJlci4KKyAqLworc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqCittd2lmaWV4X2Jzc19pbmRleF90b19wcml2KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IGJzc19pbmRleCkKK3sKKwlpZiAoIWFkYXB0ZXIgfHwgKGJzc19pbmRleCA+PSBhZGFwdGVyLT5wcml2X251bSkpCisJCXJldHVybiBOVUxMOworCXJldHVybiBhZGFwdGVyLT5wcml2W2Jzc19pbmRleF07Cit9CisKKy8qCisgKiBUaGlzIGlzIHRoZSBtYWluIHdvcmsgcXVldWUgZnVuY3Rpb24uCisgKgorICogSXQgaGFuZGxlcyB0aGUgbWFpbiBwcm9jZXNzLCB3aGljaCBpbiB0dXJuIGhhbmRsZXMgdGhlIGNvbXBsZXRlCisgKiBkcml2ZXIgb3BlcmF0aW9ucy4KKyAqLworc3RhdGljIHZvaWQgbXdpZmlleF9tYWluX3dvcmtfcXVldWUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG13aWZpZXhfYWRhcHRlciwgbWFpbl93b3JrKTsKKworCWlmIChhZGFwdGVyLT5zdXJwcmlzZV9yZW1vdmVkKQorCQlyZXR1cm47CisJbXdpZmlleF9tYWluX3Byb2Nlc3MoYWRhcHRlcik7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNhbmNlbHMgYWxsIHdvcmtzIGluIHRoZSBxdWV1ZSBhbmQgZGVzdHJveXMKKyAqIHRoZSBtYWluIHdvcmtxdWV1ZS4KKyAqLworc3RhdGljIHZvaWQKK213aWZpZXhfdGVybWluYXRlX3dvcmtxdWV1ZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCWZsdXNoX3dvcmtxdWV1ZShhZGFwdGVyLT53b3JrcXVldWUpOworCWRlc3Ryb3lfd29ya3F1ZXVlKGFkYXB0ZXItPndvcmtxdWV1ZSk7CisJYWRhcHRlci0+d29ya3F1ZXVlID0gTlVMTDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gYWRkcyB0aGUgY2FyZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGZvbGxvd3MgdGhlIGZvbGxvd2luZyBtYWpvciBzdGVwcyB0byBzZXQgdXAgdGhlIGRldmljZSAtCisgKiAgICAgIC0gSW5pdGlhbGl6ZSBzb2Z0d2FyZS4gVGhpcyBpbmNsdWRlcyBwcm9iaW5nIHRoZSBjYXJkLCByZWdpc3RlcmluZworICogICAgICAgIHRoZSBpbnRlcmZhY2Ugb3BlcmF0aW9ucyB0YWJsZSwgYW5kIGFsbG9jYXRpbmcvaW5pdGlhbGl6aW5nIHRoZQorICogICAgICAgIGFkYXB0ZXIgc3RydWN0dXJlCisgKiAgICAgIC0gU2V0IHVwIHRoZSBuZXRsaW5rIHNvY2tldAorICogICAgICAtIENyZWF0ZSBhbmQgc3RhcnQgdGhlIG1haW4gd29yayBxdWV1ZQorICogICAgICAtIFJlZ2lzdGVyIHRoZSBkZXZpY2UKKyAqICAgICAgLSBJbml0aWFsaXplIGZpcm13YXJlIGFuZCBoYXJkd2FyZQorICogICAgICAtIEFkZCBsb2dpY2FsIGludGVyZmFjZXMKKyAqLworaW50Cittd2lmaWV4X2FkZF9jYXJkKHZvaWQgKmNhcmQsIHN0cnVjdCBzZW1hcGhvcmUgKnNlbSwKKwkJIHN0cnVjdCBtd2lmaWV4X2lmX29wcyAqaWZfb3BzKQoreworCWludCBpOworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXI7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKHNlbSkpCisJCWdvdG8gZXhpdF9zZW1fZXJyOworCisJaWYgKG13aWZpZXhfaW5pdF9zdyhjYXJkLCBpZl9vcHMpKSB7CisJCXByX2VycigiJXM6IHNvZnR3YXJlIGluaXQgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyX2luaXRfc3c7CisJfQorCisJYWRhcHRlciA9IGdfYWRhcHRlcjsKKworCWFkYXB0ZXItPmh3X3N0YXR1cyA9IE1XSUZJRVhfSFdfU1RBVFVTX0lOSVRJQUxJWklORzsKKwlhZGFwdGVyLT5zdXJwcmlzZV9yZW1vdmVkID0gZmFsc2U7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmYWRhcHRlci0+aW5pdF93YWl0X3EpOworCWFkYXB0ZXItPmlzX3N1c3BlbmRlZCA9IGZhbHNlOworCWFkYXB0ZXItPmhzX2FjdGl2YXRlZCA9IGZhbHNlOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFkYXB0ZXItPmhzX2FjdGl2YXRlX3dhaXRfcSk7CisJYWRhcHRlci0+Y21kX3dhaXRfcV9yZXF1aXJlZCA9IGZhbHNlOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFkYXB0ZXItPmNtZF93YWl0X3Eud2FpdCk7CisJYWRhcHRlci0+Y21kX3dhaXRfcS5jb25kaXRpb24gPSBmYWxzZTsKKwlhZGFwdGVyLT5jbWRfd2FpdF9xLnN0YXR1cyA9IDA7CisKKwlhZGFwdGVyLT53b3JrcXVldWUgPSBjcmVhdGVfd29ya3F1ZXVlKCJNV0lGSUVYX1dPUktfUVVFVUUiKTsKKwlpZiAoIWFkYXB0ZXItPndvcmtxdWV1ZSkKKwkJZ290byBlcnJfa21hbGxvYzsKKworCUlOSVRfV09SSygmYWRhcHRlci0+bWFpbl93b3JrLCBtd2lmaWV4X21haW5fd29ya19xdWV1ZSk7CisKKwkvKiBSZWdpc3RlciB0aGUgZGV2aWNlLiBGaWxsIHVwIHRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlIHdpdGggcmVsZXZhbnQKKwkgICBpbmZvcm1hdGlvbiBmcm9tIHRoZSBjYXJkIGFuZCByZXF1ZXN0IGZvciB0aGUgcmVxdWlyZWQgSVJRLiAqLworCWlmIChhZGFwdGVyLT5pZl9vcHMucmVnaXN0ZXJfZGV2KGFkYXB0ZXIpKSB7CisJCXByX2VycigiJXM6IGZhaWxlZCB0byByZWdpc3RlciBtd2lmaWV4IGRldmljZVxuIiwgX19mdW5jX18pOworCQlnb3RvIGVycl9yZWdpc3RlcmRldjsKKwl9CisKKwlpZiAobXdpZmlleF9pbml0X2h3X2Z3KGFkYXB0ZXIpKSB7CisJCXByX2VycigiJXM6IGZpcm13YXJlIGluaXQgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyX2luaXRfZnc7CisJfQorCisJLyogQWRkIGludGVyZmFjZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+ZHJ2X21vZGUtPmludGZfbnVtOyBpKyspIHsKKwkJaWYgKCFtd2lmaWV4X2FkZF9pbnRlcmZhY2UoYWRhcHRlciwgaSwKKwkJCQlhZGFwdGVyLT5kcnZfbW9kZS0+YnNzX2F0dHJbaV0uYnNzX3R5cGUpKSB7CisJCQlnb3RvIGVycl9hZGRfaW50ZjsKKwkJfQorCX0KKworCXVwKHNlbSk7CisKKwlyZXR1cm4gMDsKKworZXJyX2FkZF9pbnRmOgorCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5wcml2X251bTsgaSsrKQorCQltd2lmaWV4X3JlbW92ZV9pbnRlcmZhY2UoYWRhcHRlciwgaSk7CitlcnJfaW5pdF9mdzoKKwlwcl9kZWJ1ZygiaW5mbzogJXM6IHVucmVnaXN0ZXIgZGV2aWNlXG4iLCBfX2Z1bmNfXyk7CisJYWRhcHRlci0+aWZfb3BzLnVucmVnaXN0ZXJfZGV2KGFkYXB0ZXIpOworZXJyX3JlZ2lzdGVyZGV2OgorCWFkYXB0ZXItPnN1cnByaXNlX3JlbW92ZWQgPSB0cnVlOworCW13aWZpZXhfdGVybWluYXRlX3dvcmtxdWV1ZShhZGFwdGVyKTsKK2Vycl9rbWFsbG9jOgorCWlmICgoYWRhcHRlci0+aHdfc3RhdHVzID09IE1XSUZJRVhfSFdfU1RBVFVTX0ZXX1JFQURZKSB8fAorCSAgICAoYWRhcHRlci0+aHdfc3RhdHVzID09IE1XSUZJRVhfSFdfU1RBVFVTX1JFQURZKSkgeworCQlwcl9kZWJ1ZygiaW5mbzogJXM6IHNodXRkb3duIG13aWZpZXhcbiIsIF9fZnVuY19fKTsKKwkJYWRhcHRlci0+aW5pdF93YWl0X3Ffd29rZW4gPSBmYWxzZTsKKworCQlpZiAobXdpZmlleF9zaHV0ZG93bl9kcnYoYWRhcHRlcikgPT0gLUVJTlBST0dSRVNTKQorCQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGFkYXB0ZXItPmluaXRfd2FpdF9xLAorCQkJCQkJIGFkYXB0ZXItPmluaXRfd2FpdF9xX3dva2VuKTsKKwl9CisKKwltd2lmaWV4X2ZyZWVfYWRhcHRlcihhZGFwdGVyKTsKKworZXJyX2luaXRfc3c6CisJdXAoc2VtKTsKKworZXhpdF9zZW1fZXJyOgorCXJldHVybiAtMTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG13aWZpZXhfYWRkX2NhcmQpOworCisvKgorICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIHRoZSBjYXJkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZm9sbG93cyB0aGUgZm9sbG93aW5nIG1ham9yIHN0ZXBzIHRvIHJlbW92ZSB0aGUgZGV2aWNlIC0KKyAqICAgICAgLSBTdG9wIGRhdGEgdHJhZmZpYworICogICAgICAtIFNodXRkb3duIGZpcm13YXJlCisgKiAgICAgIC0gUmVtb3ZlIHRoZSBsb2dpY2FsIGludGVyZmFjZXMKKyAqICAgICAgLSBUZXJtaW5hdGUgdGhlIHdvcmsgcXVldWUKKyAqICAgICAgLSBVbnJlZ2lzdGVyIHRoZSBkZXZpY2UKKyAqICAgICAgLSBGcmVlIHRoZSBhZGFwdGVyIHN0cnVjdHVyZQorICovCitpbnQgbXdpZmlleF9yZW1vdmVfY2FyZChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9IE5VTEw7CisJaW50IGk7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKHNlbSkpCisJCWdvdG8gZXhpdF9zZW1fZXJyOworCisJaWYgKCFhZGFwdGVyKQorCQlnb3RvIGV4aXRfcmVtb3ZlOworCisJYWRhcHRlci0+c3VycHJpc2VfcmVtb3ZlZCA9IHRydWU7CisKKwkvKiBTdG9wIGRhdGEgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+cHJpdl9udW07IGkrKykgeworCQlwcml2ID0gYWRhcHRlci0+cHJpdltpXTsKKwkJaWYgKHByaXYpIHsKKwkJCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChwcml2LT5uZXRkZXYpKQorCQkJCW5ldGlmX3N0b3BfcXVldWUocHJpdi0+bmV0ZGV2KTsKKwkJCWlmIChuZXRpZl9jYXJyaWVyX29rKHByaXYtPm5ldGRldikpCisJCQkJbmV0aWZfY2Fycmllcl9vZmYocHJpdi0+bmV0ZGV2KTsKKwkJfQorCX0KKworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiY21kOiBjYWxsaW5nIG13aWZpZXhfc2h1dGRvd25fZHJ2Li4uXG4iKTsKKwlhZGFwdGVyLT5pbml0X3dhaXRfcV93b2tlbiA9IGZhbHNlOworCisJaWYgKG13aWZpZXhfc2h1dGRvd25fZHJ2KGFkYXB0ZXIpID09IC1FSU5QUk9HUkVTUykKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGFkYXB0ZXItPmluaXRfd2FpdF9xLAorCQkJCQkgYWRhcHRlci0+aW5pdF93YWl0X3Ffd29rZW4pOworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiY21kOiBtd2lmaWV4X3NodXRkb3duX2RydiBkb25lXG4iKTsKKwlpZiAoYXRvbWljX3JlYWQoJmFkYXB0ZXItPnJ4X3BlbmRpbmcpIHx8CisJICAgIGF0b21pY19yZWFkKCZhZGFwdGVyLT50eF9wZW5kaW5nKSB8fAorCSAgICBhdG9taWNfcmVhZCgmYWRhcHRlci0+Y21kX3BlbmRpbmcpKSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAicnhfcGVuZGluZz0lZCwgdHhfcGVuZGluZz0lZCwgIgorCQkgICAgICAgImNtZF9wZW5kaW5nPSVkXG4iLAorCQkgICAgICAgYXRvbWljX3JlYWQoJmFkYXB0ZXItPnJ4X3BlbmRpbmcpLAorCQkgICAgICAgYXRvbWljX3JlYWQoJmFkYXB0ZXItPnR4X3BlbmRpbmcpLAorCQkgICAgICAgYXRvbWljX3JlYWQoJmFkYXB0ZXItPmNtZF9wZW5kaW5nKSk7CisJfQorCisJLyogUmVtb3ZlIGludGVyZmFjZSAqLworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5wcml2X251bTsgaSsrKQorCQltd2lmaWV4X3JlbW92ZV9pbnRlcmZhY2UoYWRhcHRlciwgaSk7CisKKwltd2lmaWV4X3Rlcm1pbmF0ZV93b3JrcXVldWUoYWRhcHRlcik7CisKKwkvKiBVbnJlZ2lzdGVyIGRldmljZSAqLworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogdW5yZWdpc3RlciBkZXZpY2VcbiIpOworCWFkYXB0ZXItPmlmX29wcy51bnJlZ2lzdGVyX2RldihhZGFwdGVyKTsKKwkvKiBGcmVlIGFkYXB0ZXIgc3RydWN0dXJlICovCisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBmcmVlIGFkYXB0ZXJcbiIpOworCW13aWZpZXhfZnJlZV9hZGFwdGVyKGFkYXB0ZXIpOworCitleGl0X3JlbW92ZToKKwl1cChzZW0pOworZXhpdF9zZW1fZXJyOgorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwobXdpZmlleF9yZW1vdmVfY2FyZCk7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBtb2R1bGUuCisgKgorICogVGhlIGRlYnVnIEZTIGlzIGFsc28gaW5pdGlhbGl6ZWQgaWYgY29uZmlndXJlZC4KKyAqLworc3RhdGljIGludAorbXdpZmlleF9pbml0X21vZHVsZSh2b2lkKQoreworI2lmZGVmIENPTkZJR19ERUJVR19GUworCW13aWZpZXhfZGVidWdmc19pbml0KCk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2xlYW5zIHVwIHRoZSBtb2R1bGUuCisgKgorICogVGhlIGRlYnVnIEZTIGlzIHJlbW92ZWQgaWYgYXZhaWxhYmxlLgorICovCitzdGF0aWMgdm9pZAorbXdpZmlleF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworI2lmZGVmIENPTkZJR19ERUJVR19GUworCW13aWZpZXhfZGVidWdmc19yZW1vdmUoKTsKKyNlbmRpZgorfQorCittb2R1bGVfaW5pdChtd2lmaWV4X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KG13aWZpZXhfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIHZlcnNpb24gIiBWRVJTSU9OKTsKK01PRFVMRV9WRVJTSU9OKFZFUlNJT04pOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L21haW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzI3MDFkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9tYWluLmgKQEAgLTAsMCArMSwxMDA0IEBACisvKgorICogTWFydmVsbCBXaXJlbGVzcyBMQU4gZGV2aWNlIGRyaXZlcjogbWFqb3IgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBwcm90b3R5cGVzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5hdGlvbmFsCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4KKyAqIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBvZiB3aGljaAorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0Egb3Igb24gdGhlCisgKiB3b3JsZHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQuCisgKgorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNlIHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dAorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLgorICovCisKKyNpZm5kZWYgX01XSUZJRVhfTUFJTl9IXworI2RlZmluZSBfTVdJRklFWF9NQUlOX0hfCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgPG5ldC9saWI4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKworI2luY2x1ZGUgImRlY2wuaCIKKyNpbmNsdWRlICJpb2N0bC5oIgorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJmdy5oIgorCitleHRlcm4gY29uc3QgY2hhciBkcml2ZXJfdmVyc2lvbltdOworZXh0ZXJuIHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmdfYWRhcHRlcjsKKworZW51bSB7CisJTVdJRklFWF9BU1lOQ19DTUQsCisJTVdJRklFWF9TWU5DX0NNRAorfTsKKworI2RlZmluZSBEUlZfTU9ERV9TVEEgICAgICAgMHgxCisKKyNkZWZpbmUgU0Q4Nzg3X1cwICAgMHgzMAorI2RlZmluZSBTRDg3ODdfVzEgICAweDMxCisjZGVmaW5lIFNEODc4N19BMCAgIDB4NDAKKyNkZWZpbmUgU0Q4Nzg3X0ExICAgMHg0MQorCisjZGVmaW5lIERFRkFVTFRfRldfTkFNRSAibXJ2bC9zZDg3ODdfdWFwc3RhLmJpbiIKKyNkZWZpbmUgU0Q4Nzg3X1cxX0ZXX05BTUUgIm1ydmwvc2Q4Nzg3X3VhcHN0YV93MS5iaW4iCisjZGVmaW5lIFNEODc4N19BWF9GV19OQU1FICJtcnZsL3NkODc4N191YXBzdGEuYmluIgorCitzdHJ1Y3QgbXdpZmlleF9kcnZfbW9kZSB7CisJdTE2IGRydl9tb2RlOworCXUxNiBpbnRmX251bTsKKwlzdHJ1Y3QgbXdpZmlleF9ic3NfYXR0ciAqYnNzX2F0dHI7Cit9OworCisKKyNkZWZpbmUgTVdJRklFWF9ERUZBVUxUX1dBVENIRE9HX1RJTUVPVVQJKDUgKiBIWikKKworI2RlZmluZSBNV0lGSUVYX1RJTUVSXzEwUwkJCTEwMDAwCisjZGVmaW5lIE1XSUZJRVhfVElNRVJfMVMJCQkxMDAwCisKKyNkZWZpbmUgTUFYX1RYX1BFTkRJTkcgICAgICA2MAorCisjZGVmaW5lIE1XSUZJRVhfVVBMRF9TSVpFICAgICAgICAgICAgICAgKDIzMTIpCisKKyNkZWZpbmUgTUFYX0VWRU5UX1NJWkUgICAgICAgICAgICAgICAgICAxMDI0CisKKyNkZWZpbmUgQVJQX0ZJTFRFUl9NQVhfQlVGX1NJWkUgICAgICAgICA2OAorCisjZGVmaW5lIE1XSUZJRVhfS0VZX0JVRkZFUl9TSVpFCQkJMTYKKyNkZWZpbmUgTVdJRklFWF9ERUZBVUxUX0xJU1RFTl9JTlRFUlZBTCAxMAorI2RlZmluZSBNV0lGSUVYX01BWF9SRUdJT05fQ09ERSAgICAgICAgIDcKKworI2RlZmluZSBERUZBVUxUX0JDTl9BVkdfRkFDVE9SICAgICAgICAgIDgKKyNkZWZpbmUgREVGQVVMVF9EQVRBX0FWR19GQUNUT1IgICAgICAgICA4CisKKyNkZWZpbmUgRklSU1RfVkFMSURfQ0hBTk5FTAkJCQkweGZmCisjZGVmaW5lIERFRkFVTFRfQURfSE9DX0NIQU5ORUwJCQk2CisjZGVmaW5lIERFRkFVTFRfQURfSE9DX0NIQU5ORUxfQQkJMzYKKworI2RlZmluZSBERUZBVUxUX0JDTl9NSVNTX1RJTUVPVVQJCTUKKworI2RlZmluZSBNQVhfU0NBTl9CRUFDT05fQlVGRkVSCQkJODAwMAorCisjZGVmaW5lIFNDQU5fQkVBQ09OX0VOVFJZX1BBRAkJCTYKKworI2RlZmluZSBNV0lGSUVYX1BBU1NJVkVfU0NBTl9DSEFOX1RJTUUJMjAwCisjZGVmaW5lIE1XSUZJRVhfQUNUSVZFX1NDQU5fQ0hBTl9USU1FCTIwMAorI2RlZmluZSBNV0lGSUVYX1NQRUNJRklDX1NDQU5fQ0hBTl9USU1FCTExMAorCisjZGVmaW5lIFNDQU5fUlNTSShSU1NJKQkJCQkJKDB4MTAwIC0gKCh1OCkoUlNTSSkpKQorCisjZGVmaW5lIE1XSUZJRVhfTUFYX1RPVEFMX1NDQU5fVElNRQkoTVdJRklFWF9USU1FUl8xMFMgLSBNV0lGSUVYX1RJTUVSXzFTKQorCisjZGVmaW5lIFJTTl9HVEtfT1VJX09GRlNFVAkJCQkyCisKKyNkZWZpbmUgTVdJRklFWF9PVUlfTk9UX1BSRVNFTlQJCQkwCisjZGVmaW5lIE1XSUZJRVhfT1VJX1BSRVNFTlQJCQkJMQorCisjZGVmaW5lIElTX0NBUkRfUlhfUkNWRChhZGFwdGVyKSAoYWRhcHRlci0+Y21kX3Jlc3BfcmVjZWl2ZWQgfHwgXAorCQkJCQlhZGFwdGVyLT5ldmVudF9yZWNlaXZlZCB8fCBcCisJCQkJCWFkYXB0ZXItPmRhdGFfcmVjZWl2ZWQpCisKKyNkZWZpbmUgTVdJRklFWF9UWVBFX0NNRAkJCQkxCisjZGVmaW5lIE1XSUZJRVhfVFlQRV9EQVRBCQkJCTAKKyNkZWZpbmUgTVdJRklFWF9UWVBFX0VWRU5UCQkJCTMKKworI2RlZmluZSBEQkdfQ01EX05VTQkJCQkJCTUKKworI2RlZmluZSBNQVhfQklUTUFQX1JBVEVTX1NJWkUJCQkxMAorCisjZGVmaW5lIE1BWF9DSEFOTkVMX0JBTkRfQkcgICAgIDE0CisKKyNkZWZpbmUgTUFYX0ZSRVFVRU5DWV9CQU5EX0JHICAgMjQ4NAorCitzdHJ1Y3QgbXdpZmlleF9kYmcgeworCXUzMiBudW1fY21kX2hvc3RfdG9fY2FyZF9mYWlsdXJlOworCXUzMiBudW1fY21kX3NsZWVwX2NmbV9ob3N0X3RvX2NhcmRfZmFpbHVyZTsKKwl1MzIgbnVtX3R4X2hvc3RfdG9fY2FyZF9mYWlsdXJlOworCXUzMiBudW1fZXZlbnRfZGVhdXRoOworCXUzMiBudW1fZXZlbnRfZGlzYXNzb2M7CisJdTMyIG51bV9ldmVudF9saW5rX2xvc3Q7CisJdTMyIG51bV9jbWRfZGVhdXRoOworCXUzMiBudW1fY21kX2Fzc29jX3N1Y2Nlc3M7CisJdTMyIG51bV9jbWRfYXNzb2NfZmFpbHVyZTsKKwl1MzIgbnVtX3R4X3RpbWVvdXQ7CisJdTMyIG51bV9jbWRfdGltZW91dDsKKwl1MTYgdGltZW91dF9jbWRfaWQ7CisJdTE2IHRpbWVvdXRfY21kX2FjdDsKKwl1MTYgbGFzdF9jbWRfaWRbREJHX0NNRF9OVU1dOworCXUxNiBsYXN0X2NtZF9hY3RbREJHX0NNRF9OVU1dOworCXUxNiBsYXN0X2NtZF9pbmRleDsKKwl1MTYgbGFzdF9jbWRfcmVzcF9pZFtEQkdfQ01EX05VTV07CisJdTE2IGxhc3RfY21kX3Jlc3BfaW5kZXg7CisJdTE2IGxhc3RfZXZlbnRbREJHX0NNRF9OVU1dOworCXUxNiBsYXN0X2V2ZW50X2luZGV4OworfTsKKworZW51bSBNV0lGSUVYX0hBUkRXQVJFX1NUQVRVUyB7CisJTVdJRklFWF9IV19TVEFUVVNfUkVBRFksCisJTVdJRklFWF9IV19TVEFUVVNfSU5JVElBTElaSU5HLAorCU1XSUZJRVhfSFdfU1RBVFVTX0ZXX1JFQURZLAorCU1XSUZJRVhfSFdfU1RBVFVTX0lOSVRfRE9ORSwKKwlNV0lGSUVYX0hXX1NUQVRVU19SRVNFVCwKKwlNV0lGSUVYX0hXX1NUQVRVU19DTE9TSU5HLAorCU1XSUZJRVhfSFdfU1RBVFVTX05PVF9SRUFEWQorfTsKKworZW51bSBNV0lGSUVYXzgwMl8xMV9QT1dFUl9NT0RFIHsKKwlNV0lGSUVYXzgwMl8xMV9QT1dFUl9NT0RFX0NBTSwKKwlNV0lGSUVYXzgwMl8xMV9QT1dFUl9NT0RFX1BTUAorfTsKKworc3RydWN0IG13aWZpZXhfdHhfcGFyYW0geworCXUzMiBuZXh0X3BrdF9sZW47Cit9OworCitlbnVtIE1XSUZJRVhfUFNfU1RBVEUgeworCVBTX1NUQVRFX0FXQUtFLAorCVBTX1NUQVRFX1BSRV9TTEVFUCwKKwlQU19TVEFURV9TTEVFUF9DRk0sCisJUFNfU1RBVEVfU0xFRVAKK307CisKK3N0cnVjdCBtd2lmaWV4X2FkZF9iYV9wYXJhbSB7CisJdTMyIHR4X3dpbl9zaXplOworCXUzMiByeF93aW5fc2l6ZTsKKwl1MzIgdGltZW91dDsKK307CisKK3N0cnVjdCBtd2lmaWV4X3R4X2FnZ3IgeworCXU4IGFtcGR1X3VzZXI7CisJdTggYW1wZHVfYXA7CisJdTggYW1zZHU7Cit9OworCitzdHJ1Y3QgbXdpZmlleF9yYV9saXN0X3RibCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBza19idWZmX2hlYWQgc2tiX2hlYWQ7CisJdTggcmFbRVRIX0FMRU5dOworCXUzMiB0b3RhbF9wa3RzX3NpemU7CisJdTMyIGlzXzExbl9lbmFibGVkOworfTsKKworc3RydWN0IG13aWZpZXhfdGlkX3RibCB7CisJc3RydWN0IGxpc3RfaGVhZCByYV9saXN0OworCS8qIHNwaW4gbG9jayBmb3IgdGlkIHRhYmxlICovCisJc3BpbmxvY2tfdCB0aWRfdGJsX2xvY2s7CisJc3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwgKnJhX2xpc3RfY3VycjsKK307CisKKyNkZWZpbmUgV01NX0hJR0hFU1RfUFJJT1JJVFkJCTcKKyNkZWZpbmUgSElHSF9QUklPX1RJRAkJCQk3CisjZGVmaW5lIExPV19QUklPX1RJRAkJCQkwCisKK3N0cnVjdCBtd2lmaWV4X3dtbV9kZXNjIHsKKwlzdHJ1Y3QgbXdpZmlleF90aWRfdGJsIHRpZF90YmxfcHRyW01BWF9OVU1fVElEXTsKKwl1MzIgcGFja2V0c19vdXRbTUFYX05VTV9USURdOworCS8qIHNwaW4gbG9jayB0byBwcm90ZWN0IHJhX2xpc3QgKi8KKwlzcGlubG9ja190IHJhX2xpc3Rfc3BpbmxvY2s7CisJc3RydWN0IG13aWZpZXhfd21tX2FjX3N0YXR1cyBhY19zdGF0dXNbSUVFRTgwMjExX01BWF9RVUVVRVNdOworCWVudW0gbXdpZmlleF93bW1fYWNfZSBhY19kb3duX2dyYWRlZF92YWxzW0lFRUU4MDIxMV9NQVhfUVVFVUVTXTsKKwl1MzIgZHJ2X3BrdF9kZWxheV9tYXg7CisJdTggcXVldWVfcHJpb3JpdHlbSUVFRTgwMjExX01BWF9RVUVVRVNdOworCXUzMiB1c2VyX3ByaV9wa3RfdHhfY3RybFtXTU1fSElHSEVTVF9QUklPUklUWSArIDFdOwkvKiBVUDogMCB0byA3ICovCisKK307CisKK3N0cnVjdCBtd2lmaWV4XzgwMl8xMV9zZWN1cml0eSB7CisJdTggd3BhX2VuYWJsZWQ7CisJdTggd3BhMl9lbmFibGVkOworCXU4IHdhcGlfZW5hYmxlZDsKKwl1OCB3YXBpX2tleV9vbjsKKwllbnVtIE1XSUZJRVhfODAyXzExX1dFUF9TVEFUVVMgd2VwX3N0YXR1czsKKwl1MzIgYXV0aGVudGljYXRpb25fbW9kZTsKKwl1MzIgZW5jcnlwdGlvbl9tb2RlOworfTsKKworc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyIHsKKwl1OCBlbGVtZW50X2lkOworCXU4IGxlbjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBpZWVlX29ic3Nfc2Nhbl9wYXJhbSB7CisJdTE2IG9ic3Nfc2Nhbl9wYXNzaXZlX2R3ZWxsOworCXUxNiBvYnNzX3NjYW5fYWN0aXZlX2R3ZWxsOworCXUxNiBic3NfY2hhbl93aWR0aF90cmlnZ2VyX3NjYW5faW50OworCXUxNiBvYnNzX3NjYW5fcGFzc2l2ZV90b3RhbDsKKwl1MTYgb2Jzc19zY2FuX2FjdGl2ZV90b3RhbDsKKwl1MTYgYnNzX3dpZHRoX2NoYW5fdHJhbnNfZGVsYXk7CisJdTE2IG9ic3Nfc2Nhbl9hY3RpdmVfdGhyZXNob2xkOworfSBfX3BhY2tlZDsKKworc3RydWN0IGllZWVfdHlwZXNfb2Jzc19zY2FuX3BhcmFtIHsKKwlzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIgaWVlZV9oZHI7CisJc3RydWN0IGllZWVfb2Jzc19zY2FuX3BhcmFtIG9ic3Nfc2NhbjsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgTVdJRklFWF9TVVBQT1JURURfUkFURVMgICAgICAgICAgICAgICAgIDE0CisKKyNkZWZpbmUgTVdJRklFWF9TVVBQT1JURURfUkFURVNfRVhUICAgICAgICAgICAgIDMyCisKKyNkZWZpbmUgSUVFRV9NQVhfSUVfU0laRQkJCTI1NgorCitzdHJ1Y3QgaWVlZV90eXBlc192ZW5kb3Jfc3BlY2lmaWMgeworCXN0cnVjdCBpZWVlX3R5cGVzX3ZlbmRvcl9oZWFkZXIgdmVuZF9oZHI7CisJdTggZGF0YVtJRUVFX01BWF9JRV9TSVpFIC0gc2l6ZW9mKHN0cnVjdCBpZWVlX3R5cGVzX3ZlbmRvcl9oZWFkZXIpXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBpZWVlX3R5cGVzX2dlbmVyaWMgeworCXN0cnVjdCBpZWVlX3R5cGVzX2hlYWRlciBpZWVlX2hkcjsKKwl1OCBkYXRhW0lFRUVfTUFYX0lFX1NJWkUgLSBzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKV07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yIHsKKwl1OCBtYWNfYWRkcmVzc1tFVEhfQUxFTl07CisJc3RydWN0IG13aWZpZXhfODAyXzExX3NzaWQgc3NpZDsKKwl1MzIgcHJpdmFjeTsKKwlzMzIgcnNzaTsKKwl1MzIgY2hhbm5lbDsKKwl1MzIgZnJlcTsKKwl1MTYgYmVhY29uX3BlcmlvZDsKKwl1OCBlcnBfZmxhZ3M7CisJdTMyIGJzc19tb2RlOworCXU4IHN1cHBvcnRlZF9yYXRlc1tNV0lGSUVYX1NVUFBPUlRFRF9SQVRFU107CisJdTggZGF0YV9yYXRlc1tNV0lGSUVYX1NVUFBPUlRFRF9SQVRFU107CisJLyogTmV0d29yayBiYW5kLgorCSAqIEJBTkRfQigweDAxKTogJ2InIGJhbmQKKwkgKiBCQU5EX0coMHgwMik6ICdnJyBiYW5kCisJICogQkFORF9BKDBYMDQpOiAnYScgYmFuZAorCSAqLworCXUxNiBic3NfYmFuZDsKKwl1NjQgbmV0d29ya190c2Y7CisJdTggdGltZV9zdGFtcFs4XTsKKwl1bmlvbiBpZWVlX3R5cGVzX3BoeV9wYXJhbV9zZXQgcGh5X3BhcmFtX3NldDsKKwl1bmlvbiBpZWVlX3R5cGVzX3NzX3BhcmFtX3NldCBzc19wYXJhbV9zZXQ7CisJdTE2IGNhcF9pbmZvX2JpdG1hcDsKKwlzdHJ1Y3QgaWVlZV90eXBlc193bW1fcGFyYW1ldGVyIHdtbV9pZTsKKwl1OCAgZGlzYWJsZV8xMW47CisJc3RydWN0IGllZWU4MDIxMV9odF9jYXAgKmJjbl9odF9jYXA7CisJdTE2IGh0X2NhcF9vZmZzZXQ7CisJc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICpiY25faHRfaW5mbzsKKwl1MTYgaHRfaW5mb19vZmZzZXQ7CisJdTggKmJjbl9ic3NfY29fMjA0MDsKKwl1MTYgYnNzX2NvXzIwNDBfb2Zmc2V0OworCXU4ICpiY25fZXh0X2NhcDsKKwl1MTYgZXh0X2NhcF9vZmZzZXQ7CisJc3RydWN0IGllZWVfdHlwZXNfb2Jzc19zY2FuX3BhcmFtICpiY25fb2Jzc19zY2FuOworCXUxNiBvdmVybGFwX2Jzc19vZmZzZXQ7CisJc3RydWN0IGllZWVfdHlwZXNfdmVuZG9yX3NwZWNpZmljICpiY25fd3BhX2llOworCXUxNiB3cGFfb2Zmc2V0OworCXN0cnVjdCBpZWVlX3R5cGVzX2dlbmVyaWMgKmJjbl9yc25faWU7CisJdTE2IHJzbl9vZmZzZXQ7CisJc3RydWN0IGllZWVfdHlwZXNfZ2VuZXJpYyAqYmNuX3dhcGlfaWU7CisJdTE2IHdhcGlfb2Zmc2V0OworCXU4ICpiZWFjb25fYnVmOworCXUzMiBiZWFjb25fYnVmX3NpemU7CisJdTMyIGJlYWNvbl9idWZfc2l6ZV9tYXg7CisKK307CisKK3N0cnVjdCBtd2lmaWV4X2N1cnJlbnRfYnNzX3BhcmFtcyB7CisJc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciBic3NfZGVzY3JpcHRvcjsKKwl1OCB3bW1fZW5hYmxlZDsKKwl1OCB3bW1fdWFwc2RfZW5hYmxlZDsKKwl1OCBiYW5kOworCXUzMiBudW1fb2ZfcmF0ZXM7CisJdTggZGF0YV9yYXRlc1tNV0lGSUVYX1NVUFBPUlRFRF9SQVRFU107Cit9OworCitzdHJ1Y3QgbXdpZmlleF9zbGVlcF9wYXJhbXMgeworCXUxNiBzcF9lcnJvcjsKKwl1MTYgc3Bfb2Zmc2V0OworCXUxNiBzcF9zdGFibGVfdGltZTsKKwl1OCBzcF9jYWxfY29udHJvbDsKKwl1OCBzcF9leHRfc2xlZXBfY2xrOworCXUxNiBzcF9yZXNlcnZlZDsKK307CisKK3N0cnVjdCBtd2lmaWV4X3NsZWVwX3BlcmlvZCB7CisJdTE2IHBlcmlvZDsKKwl1MTYgcmVzZXJ2ZWQ7Cit9OworCitzdHJ1Y3QgbXdpZmlleF93ZXBfa2V5IHsKKwl1MzIgbGVuZ3RoOworCXUzMiBrZXlfaW5kZXg7CisJdTMyIGtleV9sZW5ndGg7CisJdTgga2V5X21hdGVyaWFsW01XSUZJRVhfS0VZX0JVRkZFUl9TSVpFXTsKK307CisKKyNkZWZpbmUgTUFYX1JFR0lPTl9DSEFOTkVMX05VTSAgMgorCitzdHJ1Y3QgbXdpZmlleF9jaGFuX2ZyZXFfcG93ZXIgeworCXUxNiBjaGFubmVsOworCXUzMiBmcmVxOworCXUxNiBtYXhfdHhfcG93ZXI7CisJdTggdW5zdXBwb3J0ZWQ7Cit9OworCitlbnVtIHN0YXRlXzExZF90IHsKKwlESVNBQkxFXzExRCA9IDAsCisJRU5BQkxFXzExRCA9IDEsCit9OworCisjZGVmaW5lIE1XSUZJRVhfTUFYX1RSSVBMRVRfODAyXzExRAkJODMKKworc3RydWN0IG13aWZpZXhfODAyXzExZF9kb21haW5fcmVnIHsKKwl1OCBjb3VudHJ5X2NvZGVbSUVFRTgwMjExX0NPVU5UUllfU1RSSU5HX0xFTl07CisJdTggbm9fb2ZfdHJpcGxldDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvdW50cnlfaWVfdHJpcGxldAorCQl0cmlwbGV0W01XSUZJRVhfTUFYX1RSSVBMRVRfODAyXzExRF07Cit9OworCitzdHJ1Y3QgbXdpZmlleF92ZW5kb3Jfc3BlY19jZmdfaWUgeworCXUxNiBtYXNrOworCXUxNiBmbGFnOworCXU4IGllW01XSUZJRVhfTUFYX1ZTSUVfTEVOXTsKK307CisKK3N0cnVjdCB3cHMgeworCXU4IHNlc3Npb25fZW5hYmxlOworfTsKKworc3RydWN0IG13aWZpZXhfYWRhcHRlcjsKK3N0cnVjdCBtd2lmaWV4X3ByaXZhdGU7CisKK3N0cnVjdCBtd2lmaWV4X3ByaXZhdGUgeworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXI7CisJdTggYnNzX2luZGV4OworCXU4IGJzc190eXBlOworCXU4IGJzc19yb2xlOworCXU4IGJzc19wcmlvcml0eTsKKwl1OCBic3NfbnVtOworCXU4IGZyYW1lX3R5cGU7CisJdTggY3Vycl9hZGRyW0VUSF9BTEVOXTsKKwl1OCBtZWRpYV9jb25uZWN0ZWQ7CisJdTMyIG51bV90eF90aW1lb3V0OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CisJdTE2IGN1cnJfcGt0X2ZpbHRlcjsKKwl1MzIgYnNzX21vZGU7CisJdTMyIHBrdF90eF9jdHJsOworCXUxNiB0eF9wb3dlcl9sZXZlbDsKKwl1OCBtYXhfdHhfcG93ZXJfbGV2ZWw7CisJdTggbWluX3R4X3Bvd2VyX2xldmVsOworCXU4IHR4X3JhdGU7CisJdTggdHhfaHRpbmZvOworCXU4IHJ4cGRfaHRpbmZvOworCXU4IHJ4cGRfcmF0ZTsKKwl1MTYgcmF0ZV9iaXRtYXA7CisJdTE2IGJpdG1hcF9yYXRlc1tNQVhfQklUTUFQX1JBVEVTX1NJWkVdOworCXUzMiBkYXRhX3JhdGU7CisJdTggaXNfZGF0YV9yYXRlX2F1dG87CisJdTE2IGJjbl9hdmdfZmFjdG9yOworCXUxNiBkYXRhX2F2Z19mYWN0b3I7CisJczE2IGRhdGFfcnNzaV9sYXN0OworCXMxNiBkYXRhX25mX2xhc3Q7CisJczE2IGRhdGFfcnNzaV9hdmc7CisJczE2IGRhdGFfbmZfYXZnOworCXMxNiBiY25fcnNzaV9sYXN0OworCXMxNiBiY25fbmZfbGFzdDsKKwlzMTYgYmNuX3Jzc2lfYXZnOworCXMxNiBiY25fbmZfYXZnOworCXN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmF0dGVtcHRlZF9ic3NfZGVzYzsKKwlzdHJ1Y3QgbXdpZmlleF84MDJfMTFfc3NpZCBwcmV2X3NzaWQ7CisJdTggcHJldl9ic3NpZFtFVEhfQUxFTl07CisJc3RydWN0IG13aWZpZXhfY3VycmVudF9ic3NfcGFyYW1zIGN1cnJfYnNzX3BhcmFtczsKKwl1MTYgYmVhY29uX3BlcmlvZDsKKwl1MTYgbGlzdGVuX2ludGVydmFsOworCXUxNiBhdGltX3dpbmRvdzsKKwl1OCBhZGhvY19jaGFubmVsOworCXU4IGFkaG9jX2lzX2xpbmtfc2Vuc2VkOworCXU4IGFkaG9jX3N0YXRlOworCXN0cnVjdCBtd2lmaWV4XzgwMl8xMV9zZWN1cml0eSBzZWNfaW5mbzsKKwlzdHJ1Y3QgbXdpZmlleF93ZXBfa2V5IHdlcF9rZXlbTlVNX1dFUF9LRVlTXTsKKwl1MTYgd2VwX2tleV9jdXJyX2luZGV4OworCXU4IHdwYV9pZVsyNTZdOworCXU4IHdwYV9pZV9sZW47CisJdTggd3BhX2lzX2d0a19zZXQ7CisJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9rZXlfbWF0ZXJpYWwgYWVzX2tleTsKKwl1OCB3YXBpX2llWzI1Nl07CisJdTggd2FwaV9pZV9sZW47CisJdTggd21tX3JlcXVpcmVkOworCXU4IHdtbV9lbmFibGVkOworCXU4IHdtbV9xb3NpbmZvOworCXN0cnVjdCBtd2lmaWV4X3dtbV9kZXNjIHdtbTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHR4X2JhX3N0cmVhbV90YmxfcHRyOworCS8qIHNwaW4gbG9jayBmb3IgdHhfYmFfc3RyZWFtX3RibF9wdHIgcXVldWUgKi8KKwlzcGlubG9ja190IHR4X2JhX3N0cmVhbV90YmxfbG9jazsKKwlzdHJ1Y3QgbXdpZmlleF90eF9hZ2dyIGFnZ3JfcHJpb190YmxbTUFYX05VTV9USURdOworCXN0cnVjdCBtd2lmaWV4X2FkZF9iYV9wYXJhbSBhZGRfYmFfcGFyYW07CisJdTE2IHJ4X3NlcVtNQVhfTlVNX1RJRF07CisJc3RydWN0IGxpc3RfaGVhZCByeF9yZW9yZGVyX3RibF9wdHI7CisJLyogc3BpbiBsb2NrIGZvciByeF9yZW9yZGVyX3RibF9wdHIgcXVldWUgKi8KKwlzcGlubG9ja190IHJ4X3Jlb3JkZXJfdGJsX2xvY2s7CisJLyogc3BpbiBsb2NrIGZvciBSeCBwYWNrZXRzICovCisJc3BpbmxvY2tfdCByeF9wa3RfbG9jazsKKworI2RlZmluZSBNV0lGSUVYX0FTU09DX1JTUF9CVUZfU0laRSAgNTAwCisJdTggYXNzb2NfcnNwX2J1ZltNV0lGSUVYX0FTU09DX1JTUF9CVUZfU0laRV07CisJdTMyIGFzc29jX3JzcF9zaXplOworCisjZGVmaW5lIE1XSUZJRVhfR0VOSUVfQlVGX1NJWkUgICAgICAyNTYKKwl1OCBnZW5faWVfYnVmW01XSUZJRVhfR0VOSUVfQlVGX1NJWkVdOworCXU4IGdlbl9pZV9idWZfbGVuOworCisJc3RydWN0IG13aWZpZXhfdmVuZG9yX3NwZWNfY2ZnX2llIHZzX2llW01XSUZJRVhfTUFYX1ZTSUVfTlVNXTsKKworI2RlZmluZSBNV0lGSUVYX0FTU09DX1RMVl9CVUZfU0laRSAgMjU2CisJdTggYXNzb2NfdGx2X2J1ZltNV0lGSUVYX0FTU09DX1RMVl9CVUZfU0laRV07CisJdTggYXNzb2NfdGx2X2J1Zl9sZW47CisKKwl1OCAqY3Vycl9iY25fYnVmOworCXUzMiBjdXJyX2Jjbl9zaXplOworCS8qIHNwaW4gbG9jayBmb3IgYmVhY29uIGJ1ZmZlciAqLworCXNwaW5sb2NrX3QgY3Vycl9iY25fYnVmX2xvY2s7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjsKKwlzdHJ1Y3QgbXdpZmlleF9jaGFuX2ZyZXFfcG93ZXIgY2ZwOworCWNoYXIgdmVyc2lvbl9zdHJbMTI4XTsKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwlzdHJ1Y3QgZGVudHJ5ICpkZnNfZGV2X2RpcjsKKyNlbmRpZgorCXU4IG5pY2tfbmFtZVsxNl07CisJc3RydWN0IGl3X3N0YXRpc3RpY3Mgd19zdGF0czsKKwl1MTYgY3VycmVudF9rZXlfaW5kZXg7CisJc3RydWN0IHNlbWFwaG9yZSBhc3luY19zZW07CisJdTggc2Nhbl9wZW5kaW5nX29uX2Jsb2NrOworCXU4IHJlcG9ydF9zY2FuX3Jlc3VsdDsKKwlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpzY2FuX3JlcXVlc3Q7CisJaW50IHNjYW5fcmVzdWx0X3N0YXR1czsKKwlpbnQgYXNzb2NfcmVxdWVzdDsKKwl1MTYgYXNzb2NfcmVzdWx0OworCWludCBpYnNzX2pvaW5fcmVxdWVzdDsKKwl1MTYgaWJzc19qb2luX3Jlc3VsdDsKKwlib29sIGRpc2Nvbm5lY3Q7CisJdTggY2ZnX2Jzc2lkWzZdOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcXVldWU7CisJc3RydWN0IHdvcmtfc3RydWN0IGNmZ193b3JrcXVldWU7CisJdTggY291bnRyeV9jb2RlW0lFRUU4MDIxMV9DT1VOVFJZX1NUUklOR19MRU5dOworCXN0cnVjdCB3cHMgd3BzOworCXU4IHNjYW5fYmxvY2s7Cit9OworCitlbnVtIG13aWZpZXhfYmFfc3RhdHVzIHsKKwlCQV9TVFJFQU1fTk9UX1NFVFVQID0gMCwKKwlCQV9TVFJFQU1fU0VUVVBfSU5QUk9HUkVTUywKKwlCQV9TVFJFQU1fU0VUVVBfQ09NUExFVEUKK307CisKK3N0cnVjdCBtd2lmaWV4X3R4X2JhX3N0cmVhbV90YmwgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlpbnQgdGlkOworCXU4IHJhW0VUSF9BTEVOXTsKKwllbnVtIG13aWZpZXhfYmFfc3RhdHVzIGJhX3N0YXR1czsKK307CisKK3N0cnVjdCBtd2lmaWV4X3J4X3Jlb3JkZXJfdGJsOworCitzdHJ1Y3QgcmVvcmRlcl90bXJfY254dCB7CisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJc3RydWN0IG13aWZpZXhfcnhfcmVvcmRlcl90YmwgKnB0cjsKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2OworfTsKKworc3RydWN0IG13aWZpZXhfcnhfcmVvcmRlcl90YmwgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlpbnQgdGlkOworCXU4IHRhW0VUSF9BTEVOXTsKKwlpbnQgc3RhcnRfd2luOworCWludCB3aW5fc2l6ZTsKKwl2b2lkICoqcnhfcmVvcmRlcl9wdHI7CisJc3RydWN0IHJlb3JkZXJfdG1yX2NueHQgdGltZXJfY29udGV4dDsKK307CisKK3N0cnVjdCBtd2lmaWV4X2Jzc19wcmlvX25vZGUgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2OworfTsKKworc3RydWN0IG13aWZpZXhfYnNzX3ByaW9fdGJsIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGJzc19wcmlvX2hlYWQ7CisJLyogc3BpbiBsb2NrIGZvciBic3MgcHJpb3JpdHkgICovCisJc3BpbmxvY2tfdCBic3NfcHJpb19sb2NrOworCXN0cnVjdCBtd2lmaWV4X2Jzc19wcmlvX25vZGUgKmJzc19wcmlvX2N1cjsKK307CisKK3N0cnVjdCBjbWRfY3RybF9ub2RlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdjsKKwl1MzIgY21kX29pZDsKKwl1MzIgY21kX2ZsYWc7CisJc3RydWN0IHNrX2J1ZmYgKmNtZF9za2I7CisJc3RydWN0IHNrX2J1ZmYgKnJlc3Bfc2tiOworCXZvaWQgKmRhdGFfYnVmOworCXUzMiB3YWl0X3FfZW5hYmxlZDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworfTsKKworc3RydWN0IG13aWZpZXhfaWZfb3BzIHsKKwlpbnQgKCppbml0X2lmKSAoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqKTsKKwl2b2lkICgqY2xlYW51cF9pZikgKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKik7CisJaW50ICgqY2hlY2tfZndfc3RhdHVzKSAoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqLCB1MzIsIGludCAqKTsKKwlpbnQgKCpwcm9nX2Z3KSAoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqLCBzdHJ1Y3QgbXdpZmlleF9md19pbWFnZSAqKTsKKwlpbnQgKCpyZWdpc3Rlcl9kZXYpIChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICopOworCXZvaWQgKCp1bnJlZ2lzdGVyX2RldikgKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKik7CisJaW50ICgqZW5hYmxlX2ludCkgKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKik7CisJaW50ICgqcHJvY2Vzc19pbnRfc3RhdHVzKSAoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqKTsKKwlpbnQgKCpob3N0X3RvX2NhcmQpIChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICosIHU4LAorCQkJICAgICB1OCAqcGF5bG9hZCwgdTMyIHBrdF9sZW4sCisJCQkgICAgIHN0cnVjdCBtd2lmaWV4X3R4X3BhcmFtICopOworCWludCAoKndha2V1cCkgKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKik7CisJaW50ICgqd2FrZXVwX2NvbXBsZXRlKSAoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqKTsKKworCXZvaWQgKCp1cGRhdGVfbXBfZW5kX3BvcnQpIChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICosIHUxNik7CisJdm9pZCAoKmNsZWFudXBfbXBhX2J1ZikgKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKik7Cit9OworCitzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyIHsKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2W01XSUZJRVhfTUFYX0JTU19OVU1dOworCXU4IHByaXZfbnVtOworCXN0cnVjdCBtd2lmaWV4X2Rydl9tb2RlICpkcnZfbW9kZTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlib29sIHN1cnByaXNlX3JlbW92ZWQ7CisJdTMyIGZ3X3JlbGVhc2VfbnVtYmVyOworCXUzMiByZXZpc2lvbl9pZDsKKwl1MTYgaW5pdF93YWl0X3Ffd29rZW47CisJd2FpdF9xdWV1ZV9oZWFkX3QgaW5pdF93YWl0X3E7CisJdm9pZCAqY2FyZDsKKwlzdHJ1Y3QgbXdpZmlleF9pZl9vcHMgaWZfb3BzOworCWF0b21pY190IHJ4X3BlbmRpbmc7CisJYXRvbWljX3QgdHhfcGVuZGluZzsKKwlhdG9taWNfdCBjbWRfcGVuZGluZzsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29ya3F1ZXVlOworCXN0cnVjdCB3b3JrX3N0cnVjdCBtYWluX3dvcms7CisJc3RydWN0IG13aWZpZXhfYnNzX3ByaW9fdGJsIGJzc19wcmlvX3RibFtNV0lGSUVYX01BWF9CU1NfTlVNXTsKKwkvKiBzcGluIGxvY2sgZm9yIGluaXQvc2h1dGRvd24gKi8KKwlzcGlubG9ja190IG13aWZpZXhfbG9jazsKKwkvKiBzcGluIGxvY2sgZm9yIG1haW4gcHJvY2VzcyAqLworCXNwaW5sb2NrX3QgbWFpbl9wcm9jX2xvY2s7CisJdTMyIG13aWZpZXhfcHJvY2Vzc2luZzsKKwl1MTYgbWF4X3R4X2J1Zl9zaXplOworCXUxNiB0eF9idWZfc2l6ZTsKKwl1MTYgY3Vycl90eF9idWZfc2l6ZTsKKwl1MzIgaW9wb3J0OworCWVudW0gTVdJRklFWF9IQVJEV0FSRV9TVEFUVVMgaHdfc3RhdHVzOworCXUxNiBudW1iZXJfb2ZfYW50ZW5uYTsKKwl1MzIgZndfY2FwX2luZm87CisJLyogc3BpbiBsb2NrIGZvciBpbnRlcnJ1cHQgaGFuZGxpbmcgKi8KKwlzcGlubG9ja190IGludF9sb2NrOworCXU4IGludF9zdGF0dXM7CisJdTMyIGV2ZW50X2NhdXNlOworCXN0cnVjdCBza19idWZmICpldmVudF9za2I7CisJdTggdXBsZF9idWZbTVdJRklFWF9VUExEX1NJWkVdOworCXU4IGRhdGFfc2VudDsKKwl1OCBjbWRfc2VudDsKKwl1OCBjbWRfcmVzcF9yZWNlaXZlZDsKKwl1OCBldmVudF9yZWNlaXZlZDsKKwl1OCBkYXRhX3JlY2VpdmVkOworCXUxNiBzZXFfbnVtOworCXN0cnVjdCBjbWRfY3RybF9ub2RlICpjbWRfcG9vbDsKKwlzdHJ1Y3QgY21kX2N0cmxfbm9kZSAqY3Vycl9jbWQ7CisJLyogc3BpbiBsb2NrIGZvciBjb21tYW5kICovCisJc3BpbmxvY2tfdCBtd2lmaWV4X2NtZF9sb2NrOworCXUzMiBudW1fY21kX3RpbWVvdXQ7CisJdTE2IGxhc3RfaW5pdF9jbWQ7CisJc3RydWN0IHRpbWVyX2xpc3QgY21kX3RpbWVyOworCXN0cnVjdCBsaXN0X2hlYWQgY21kX2ZyZWVfcTsKKwkvKiBzcGluIGxvY2sgZm9yIGNtZF9mcmVlX3EgKi8KKwlzcGlubG9ja190IGNtZF9mcmVlX3FfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGNtZF9wZW5kaW5nX3E7CisJLyogc3BpbiBsb2NrIGZvciBjbWRfcGVuZGluZ19xICovCisJc3BpbmxvY2tfdCBjbWRfcGVuZGluZ19xX2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBzY2FuX3BlbmRpbmdfcTsKKwkvKiBzcGluIGxvY2sgZm9yIHNjYW5fcGVuZGluZ19xICovCisJc3BpbmxvY2tfdCBzY2FuX3BlbmRpbmdfcV9sb2NrOworCXUzMiBzY2FuX3Byb2Nlc3Npbmc7CisJdTE2IHJlZ2lvbl9jb2RlOworCXN0cnVjdCBtd2lmaWV4XzgwMl8xMWRfZG9tYWluX3JlZyBkb21haW5fcmVnOworCXN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKnNjYW5fdGFibGU7CisJdTMyIG51bV9pbl9zY2FuX3RhYmxlOworCXUxNiBzY2FuX3Byb2JlczsKKwl1MzIgc2Nhbl9tb2RlOworCXUxNiBzcGVjaWZpY19zY2FuX3RpbWU7CisJdTE2IGFjdGl2ZV9zY2FuX3RpbWU7CisJdTE2IHBhc3NpdmVfc2Nhbl90aW1lOworCXU4IGJjbl9idWZbTUFYX1NDQU5fQkVBQ09OX0JVRkZFUl07CisJdTggKmJjbl9idWZfZW5kOworCXU4IGZ3X2JhbmRzOworCXU4IGFkaG9jX3N0YXJ0X2JhbmQ7CisJdTggY29uZmlnX2JhbmRzOworCXN0cnVjdCBtd2lmaWV4X2NoYW5fc2Nhbl9wYXJhbV9zZXQgKnNjYW5fY2hhbm5lbHM7CisJdTggdHhfbG9ja19mbGFnOworCXN0cnVjdCBtd2lmaWV4X3NsZWVwX3BhcmFtcyBzbGVlcF9wYXJhbXM7CisJc3RydWN0IG13aWZpZXhfc2xlZXBfcGVyaW9kIHNsZWVwX3BlcmlvZDsKKwl1MTYgcHNfbW9kZTsKKwl1MzIgcHNfc3RhdGU7CisJdTggbmVlZF90b193YWtldXA7CisJdTE2IG11bHRpcGxlX2R0aW07CisJdTE2IGxvY2FsX2xpc3Rlbl9pbnRlcnZhbDsKKwl1MTYgbnVsbF9wa3RfaW50ZXJ2YWw7CisJc3RydWN0IHNrX2J1ZmYgKnNsZWVwX2NmbTsKKwl1MTYgYmNuX21pc3NfdGltZV9vdXQ7CisJdTE2IGFkaG9jX2F3YWtlX3BlcmlvZDsKKwl1OCBpc19kZWVwX3NsZWVwOworCXU4IGRlbGF5X251bGxfcGt0OworCXUxNiBkZWxheV90b19wczsKKwl1MTYgZW5oYW5jZWRfcHNfbW9kZTsKKwl1OCBwbV93YWtldXBfY2FyZF9yZXE7CisJdTE2IGdlbl9udWxsX3BrdDsKKwl1MTYgcHBzX3VhcHNkX21vZGU7CisJdTMyIHBtX3dha2V1cF9md190cnk7CisJdTggaXNfaHNfY29uZmlndXJlZDsKKwlzdHJ1Y3QgbXdpZmlleF9oc19jb25maWdfcGFyYW0gaHNfY2ZnOworCXU4IGhzX2FjdGl2YXRlZDsKKwl1MTYgaHNfYWN0aXZhdGVfd2FpdF9xX3dva2VuOworCXdhaXRfcXVldWVfaGVhZF90IGhzX2FjdGl2YXRlX3dhaXRfcTsKKwlib29sIGlzX3N1c3BlbmRlZDsKKwl1OCBldmVudF9ib2R5W01BWF9FVkVOVF9TSVpFXTsKKwl1MzIgaHdfZG90XzExbl9kZXZfY2FwOworCXU4IGh3X2Rldl9tY3Nfc3VwcG9ydDsKKwl1OCBhZGhvY18xMW5fZW5hYmxlZDsKKwl1OCBjaGFuX29mZnNldDsKKwlzdHJ1Y3QgbXdpZmlleF9kYmcgZGJnOworCXU4IGFycF9maWx0ZXJbQVJQX0ZJTFRFUl9NQVhfQlVGX1NJWkVdOworCXUzMiBhcnBfZmlsdGVyX3NpemU7CisJdTE2IGNtZF93YWl0X3FfcmVxdWlyZWQ7CisJc3RydWN0IG13aWZpZXhfd2FpdF9xdWV1ZSBjbWRfd2FpdF9xOworfTsKKworaW50IG13aWZpZXhfaW5pdF9sb2NrX2xpc3Qoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIG13aWZpZXhfZnJlZV9sb2NrX2xpc3Qoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcik7CisKK2ludCBtd2lmaWV4X2luaXRfZncoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcik7CisKK2ludCBtd2lmaWV4X2luaXRfZndfY29tcGxldGUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcik7CisKK2ludCBtd2lmaWV4X3NodXRkb3duX2RydihzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKTsKKworaW50IG13aWZpZXhfc2h1dGRvd25fZndfY29tcGxldGUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcik7CisKK2ludCBtd2lmaWV4X2RubGRfZncoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqLCBzdHJ1Y3QgbXdpZmlleF9md19pbWFnZSAqKTsKKworaW50IG13aWZpZXhfcmVjdl9wYWNrZXQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworaW50IG13aWZpZXhfcHJvY2Vzc19ldmVudChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKTsKKworaW50IG13aWZpZXhfY29tcGxldGVfY21kKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpOworCitpbnQgbXdpZmlleF9zZW5kX2NtZF9hc3luYyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1aW50MTZfdCBjbWRfbm8sCisJCQkgICB1MTYgY21kX2FjdGlvbiwgdTMyIGNtZF9vaWQsIHZvaWQgKmRhdGFfYnVmKTsKKworaW50IG13aWZpZXhfc2VuZF9jbWRfc3luYyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1aW50MTZfdCBjbWRfbm8sCisJCQkgIHUxNiBjbWRfYWN0aW9uLCB1MzIgY21kX29pZCwgdm9pZCAqZGF0YV9idWYpOworCit2b2lkIG13aWZpZXhfY21kX3RpbWVvdXRfZnVuYyh1bnNpZ25lZCBsb25nIGZ1bmN0aW9uX2NvbnRleHQpOworCitpbnQgbXdpZmlleF9nZXRfZGVidWdfaW5mbyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICosCisJCQkgICBzdHJ1Y3QgbXdpZmlleF9kZWJ1Z19pbmZvICopOworCitpbnQgbXdpZmlleF9hbGxvY19jbWRfYnVmZmVyKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IG13aWZpZXhfZnJlZV9jbWRfYnVmZmVyKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBtd2lmaWV4X2NhbmNlbF9hbGxfcGVuZGluZ19jbWQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIG13aWZpZXhfY2FuY2VsX3BlbmRpbmdfaW9jdGwoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcik7CisKK3ZvaWQgbXdpZmlleF9pbnNlcnRfY21kX3RvX2ZyZWVfcShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgc3RydWN0IGNtZF9jdHJsX25vZGUgKmNtZF9ub2RlKTsKKwordm9pZCBtd2lmaWV4X2luc2VydF9jbWRfdG9fcGVuZGluZ19xKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICAgICBzdHJ1Y3QgY21kX2N0cmxfbm9kZSAqY21kX25vZGUsCisJCQkJICAgICB1MzIgYWRkdGFpbCk7CisKK2ludCBtd2lmaWV4X2V4ZWNfbmV4dF9jbWQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcik7CitpbnQgbXdpZmlleF9wcm9jZXNzX2NtZHJlc3Aoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcik7CitpbnQgbXdpZmlleF9oYW5kbGVfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpOworaW50IG13aWZpZXhfcHJvY2Vzc190eChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgICAgc3RydWN0IG13aWZpZXhfdHhfcGFyYW0gKnR4X3BhcmFtKTsKK2ludCBtd2lmaWV4X3NlbmRfbnVsbF9wYWNrZXQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggZmxhZ3MpOworaW50IG13aWZpZXhfd3JpdGVfZGF0YV9jb21wbGV0ZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAorCQkJCXN0cnVjdCBza19idWZmICpza2IsIGludCBzdGF0dXMpOworaW50IG13aWZpZXhfcmVjdl9wYWNrZXRfY29tcGxldGUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqLAorCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc3RhdHVzKTsKK3ZvaWQgbXdpZmlleF9jbGVhbl90eHJ4KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpOwordTggbXdpZmlleF9jaGVja19sYXN0X3BhY2tldF9pbmRpY2F0aW9uKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpOwordm9pZCBtd2lmaWV4X2NoZWNrX3BzX2NvbmQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIG13aWZpZXhfcHJvY2Vzc19zbGVlcF9jb25maXJtX3Jlc3Aoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqLCB1OCAqLAorCQkJCQl1MzIpOworaW50IG13aWZpZXhfY21kX2VuaF9wb3dlcl9tb2RlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwKKwkJCSAgICAgICB1MTYgY21kX2FjdGlvbiwgdWludDE2X3QgcHNfYml0bWFwLAorCQkJICAgICAgIHZvaWQgKmRhdGFfYnVmKTsKK2ludCBtd2lmaWV4X3JldF9lbmhfcG93ZXJfbW9kZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwLAorCQkJICAgICAgIHZvaWQgKmRhdGFfYnVmKTsKK3ZvaWQgbXdpZmlleF9wcm9jZXNzX2hzX2NvbmZpZyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgbXdpZmlleF9oc19hY3RpdmF0ZWRfZXZlbnQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkJdTggYWN0aXZhdGVkKTsKK2ludCBtd2lmaWV4X3JldF84MDJfMTFfaHNfY2ZnKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqcmVzcCk7CitpbnQgbXdpZmlleF9wcm9jZXNzX3J4X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgbXdpZmlleF9zdGFfcHJlcGFyZV9jbWQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqLCB1aW50MTZfdCBjbWRfbm8sCisJCQkgICAgdTE2IGNtZF9hY3Rpb24sIHUzMiBjbWRfb2lkLAorCQkJICAgIHZvaWQgKmRhdGFfYnVmLCB2b2lkICpjbWRfYnVmKTsKK2ludCBtd2lmaWV4X3Byb2Nlc3Nfc3RhX2NtZHJlc3Aoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqLCB1MTYgY21kcmVzcF9ubywKKwkJCQl2b2lkICpjbWRfYnVmKTsKK2ludCBtd2lmaWV4X3Byb2Nlc3Nfc3RhX3J4X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICosCisJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBtd2lmaWV4X3Byb2Nlc3Nfc3RhX2V2ZW50KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKik7Cit2b2lkICptd2lmaWV4X3Byb2Nlc3Nfc3RhX3R4cGQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBtd2lmaWV4X3N0YV9pbml0X2NtZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICosIHU4IGZpcnN0X3N0YSk7CitpbnQgbXdpZmlleF9zY2FuX25ldHdvcmtzKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgIGNvbnN0IHN0cnVjdCBtd2lmaWV4X3VzZXJfc2Nhbl9jZmcgKnVzZXJfc2Nhbl9pbik7CitpbnQgbXdpZmlleF9jbWRfODAyXzExX3NjYW4oc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwKKwkJCSAgICB2b2lkICpkYXRhX2J1Zik7Cit2b2lkIG13aWZpZXhfcXVldWVfc2Nhbl9jbWQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgY21kX2N0cmxfbm9kZSAqY21kX25vZGUpOworaW50IG13aWZpZXhfcmV0XzgwMl8xMV9zY2FuKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3ApOworczMyIG13aWZpZXhfZmluZF9zc2lkX2luX2xpc3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQlzdHJ1Y3QgbXdpZmlleF84MDJfMTFfc3NpZCAqc3NpZCwgdTggKmJzc2lkLAorCQkJCXUzMiBtb2RlKTsKK3MzMiBtd2lmaWV4X2ZpbmRfYnNzaWRfaW5fbGlzdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqYnNzaWQsCisJCQkJIHUzMiBtb2RlKTsKK2ludCBtd2lmaWV4X2ZpbmRfYmVzdF9uZXR3b3JrKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgbXdpZmlleF9zc2lkX2Jzc2lkICpyZXFfc3NpZF9ic3NpZCk7CitzMzIgbXdpZmlleF9zc2lkX2NtcChzdHJ1Y3QgbXdpZmlleF84MDJfMTFfc3NpZCAqc3NpZDEsCisJCSAgICAgICBzdHJ1Y3QgbXdpZmlleF84MDJfMTFfc3NpZCAqc3NpZDIpOworaW50IG13aWZpZXhfYXNzb2NpYXRlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCSAgICAgIHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjKTsKK2ludCBtd2lmaWV4X2NtZF84MDJfMTFfYXNzb2NpYXRlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kCisJCQkJICpjbWQsIHZvaWQgKmRhdGFfYnVmKTsKK2ludCBtd2lmaWV4X3JldF84MDJfMTFfYXNzb2NpYXRlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwKTsKK3ZvaWQgbXdpZmlleF9yZXNldF9jb25uZWN0X3N0YXRlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpOwordm9pZCBtd2lmaWV4XzIwNDBfY29leF9ldmVudChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KTsKK3U4IG13aWZpZXhfYmFuZF90b19yYWRpb190eXBlKHU4IGJhbmQpOworaW50IG13aWZpZXhfZGVhdXRoZW50aWNhdGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggKm1hYyk7CitpbnQgbXdpZmlleF9hZGhvY19zdGFydChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJc3RydWN0IG13aWZpZXhfODAyXzExX3NzaWQgKmFkaG9jX3NzaWQpOworaW50IG13aWZpZXhfYWRob2Nfam9pbihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkgICAgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MpOworaW50IG13aWZpZXhfY21kXzgwMl8xMV9hZF9ob2Nfc3RhcnQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwKKwkJCQkgICAgdm9pZCAqZGF0YV9idWYpOworaW50IG13aWZpZXhfY21kXzgwMl8xMV9hZF9ob2Nfam9pbihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCSAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQsCisJCQkJICAgdm9pZCAqZGF0YV9idWYpOworaW50IG13aWZpZXhfcmV0XzgwMl8xMV9hZF9ob2Moc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwKTsKK2ludCBtd2lmaWV4X2NtZF84MDJfMTFfYmdfc2Nhbl9xdWVyeShzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kKTsKK3N0cnVjdCBtd2lmaWV4X2NoYW5fZnJlcV9wb3dlciAqCisJCQltd2lmaWV4X2dldF9jZnBfYnlfYmFuZF9hbmRfY2hhbm5lbF9mcm9tX2NmZzgwMjExKAorCQkJCQkJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkJCXU4IGJhbmQsIHUxNiBjaGFubmVsKTsKK3N0cnVjdCBtd2lmaWV4X2NoYW5fZnJlcV9wb3dlciAqbXdpZmlleF9nZXRfY2ZwX2J5X2JhbmRfYW5kX2ZyZXFfZnJvbV9jZmc4MDIxMSgKKwkJCQkJCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJCQl1OCBiYW5kLCB1MzIgZnJlcSk7Cit1MzIgbXdpZmlleF9pbmRleF90b19kYXRhX3JhdGUodTggaW5kZXgsIHU4IGh0X2luZm8pOwordTMyIG13aWZpZXhfZmluZF9mcmVxX2Zyb21fYmFuZF9jaGFuKHU4LCB1OCk7CitpbnQgbXdpZmlleF9jbWRfYXBwZW5kX3ZzaWVfdGx2KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHUxNiB2c2llX21hc2ssCisJCQkJdTggKipidWZmZXIpOwordTMyIG13aWZpZXhfZ2V0X2FjdGl2ZV9kYXRhX3JhdGVzKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJICAgIHU4ICpyYXRlcyk7Cit1MzIgbXdpZmlleF9nZXRfc3VwcG9ydGVkX3JhdGVzKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHU4ICpyYXRlcyk7Cit1OCBtd2lmaWV4X2RhdGFfcmF0ZV90b19pbmRleCh1MzIgcmF0ZSk7Cit1OCBtd2lmaWV4X2lzX3JhdGVfYXV0byhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KTsKK2ludCBtd2lmaWV4X2dldF9yYXRlX2luZGV4KHUxNiAqcmF0ZUJpdG1hcCwgaW50IHNpemUpOworZXh0ZXJuIHUxNiByZWdpb25fY29kZV9pbmRleFtNV0lGSUVYX01BWF9SRUdJT05fQ09ERV07Cit2b2lkIG13aWZpZXhfc2F2ZV9jdXJyX2JjbihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KTsKK3ZvaWQgbXdpZmlleF9mcmVlX2N1cnJfYmNuKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpOworaW50IG13aWZpZXhfY21kX2dldF9od19zcGVjKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCk7CitpbnQgbXdpZmlleF9yZXRfZ2V0X2h3X3NwZWMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqcmVzcCk7CitpbnQgaXNfY29tbWFuZF9wZW5kaW5nKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpOworCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIHF1ZXVpbmcgaXMgUkEgYmFzZWQgb3Igbm90LgorICovCitzdGF0aWMgaW5saW5lIHU4Cittd2lmaWV4X3F1ZXVpbmdfcmFfYmFzZWQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdikKK3sKKwkvKgorCSAqIEN1cnJlbnRseSB3ZSBhc3N1bWUgaWYgd2UgYXJlIGluIEluZnJhLCB0aGVuIERBPVJBLiBUaGlzIG1pZ2h0IG5vdCBiZQorCSAqIHRydWUgaW4gdGhlIGZ1dHVyZQorCSAqLworCWlmICgocHJpdi0+YnNzX21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgJiYKKwkgICAgKEdFVF9CU1NfUk9MRShwcml2KSA9PSBNV0lGSUVYX0JTU19ST0xFX1NUQSkpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgcmF0ZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyCittd2lmaWV4X2NvcHlfcmF0ZXModTggKmRlc3QsIHUzMiBwb3MsIHU4ICpzcmMsIGludCBsZW4pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuICYmIHNyY1tpXTsgaSsrLCBwb3MrKykgeworCQlpZiAocG9zID49IE1XSUZJRVhfU1VQUE9SVEVEX1JBVEVTKQorCQkJYnJlYWs7CisJCWRlc3RbcG9zXSA9IHNyY1tpXTsKKwl9CisKKwlyZXR1cm4gcG9zOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjb3JyZWN0IHByaXZhdGUgc3RydWN0dXJlIHBvaW50ZXIgYmFzZWQKKyAqIHVwb24gdGhlIEJTUyB0eXBlIGFuZCBCU1MgbnVtYmVyLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKgorbXdpZmlleF9nZXRfcHJpdl9ieV9pZChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAorCQkgICAgICAgdTggYnNzX251bSwgdTggYnNzX3R5cGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+cHJpdl9udW07IGkrKykgeworCQlpZiAoYWRhcHRlci0+cHJpdltpXSkgeworCQkJaWYgKChhZGFwdGVyLT5wcml2W2ldLT5ic3NfbnVtID09IGJzc19udW0pCisJCQkgICAgJiYgKGFkYXB0ZXItPnByaXZbaV0tPmJzc190eXBlID09IGJzc190eXBlKSkKKwkJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gKChpIDwgYWRhcHRlci0+cHJpdl9udW0pID8gYWRhcHRlci0+cHJpdltpXSA6IE5VTEwpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBmaXJzdCBhdmFpbGFibGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgcG9pbnRlcgorICogYmFzZWQgdXBvbiB0aGUgQlNTIHJvbGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqCittd2lmaWV4X2dldF9wcml2KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCSBlbnVtIG13aWZpZXhfYnNzX3JvbGUgYnNzX3JvbGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+cHJpdl9udW07IGkrKykgeworCQlpZiAoYWRhcHRlci0+cHJpdltpXSkgeworCQkJaWYgKGJzc19yb2xlID09IE1XSUZJRVhfQlNTX1JPTEVfQU5ZIHx8CisJCQkgICAgR0VUX0JTU19ST0xFKGFkYXB0ZXItPnByaXZbaV0pID09IGJzc19yb2xlKQorCQkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuICgoaSA8IGFkYXB0ZXItPnByaXZfbnVtKSA/IGFkYXB0ZXItPnByaXZbaV0gOiBOVUxMKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlIG9mIGEgbmV0d29yayBkZXZpY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqCittd2lmaWV4X25ldGRldl9nZXRfcHJpdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiAoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqKSAoKih1bnNpZ25lZCBsb25nICopIG5ldGRldl9wcml2KGRldikpOworfQorCitzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICptd2lmaWV4X2Jzc19pbmRleF90b19wcml2KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIKKwkJCQkJCSphZGFwdGVyLCB1OCBic3NfaW5kZXgpOworaW50IG13aWZpZXhfaW5pdF9zaHV0ZG93bl9mdyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICB1MzIgZnVuY19pbml0X3NodXRkb3duKTsKK2ludCBtd2lmaWV4X2FkZF9jYXJkKHZvaWQgKiwgc3RydWN0IHNlbWFwaG9yZSAqLCBzdHJ1Y3QgbXdpZmlleF9pZl9vcHMgKik7CitpbnQgbXdpZmlleF9yZW1vdmVfY2FyZChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICosIHN0cnVjdCBzZW1hcGhvcmUgKik7CisKK3ZvaWQgbXdpZmlleF9nZXRfdmVyc2lvbihzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLCBjaGFyICp2ZXJzaW9uLAorCQkJIGludCBtYXhsZW4pOworaW50IG13aWZpZXhfcmVxdWVzdF9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCXN0cnVjdCBtd2lmaWV4X211bHRpY2FzdF9saXN0ICptY2FzdF9saXN0KTsKK2ludCBtd2lmaWV4X2NvcHlfbWNhc3RfYWRkcihzdHJ1Y3QgbXdpZmlleF9tdWx0aWNhc3RfbGlzdCAqbWxpc3QsCisJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitpbnQgbXdpZmlleF93YWl0X3F1ZXVlX2NvbXBsZXRlKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IG13aWZpZXhfYnNzX3N0YXJ0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCSAgICAgIHN0cnVjdCBtd2lmaWV4X3NzaWRfYnNzaWQgKnNzaWRfYnNzaWQpOworaW50IG13aWZpZXhfc2V0X2hzX3BhcmFtcyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICAgdTE2IGFjdGlvbiwgaW50IGNtZF90eXBlLAorCQkJICAgICAgc3RydWN0IG13aWZpZXhfZHNfaHNfY2ZnICpoc2NmZyk7CitpbnQgbXdpZmlleF9jYW5jZWxfaHMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgaW50IGNtZF90eXBlKTsKK2ludCBtd2lmaWV4X2VuYWJsZV9ocyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKTsKK2ludCBtd2lmaWV4X2dldF9zaWduYWxfaW5mbyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgIHN0cnVjdCBtd2lmaWV4X2RzX2dldF9zaWduYWwgKnNpZ25hbCk7CitpbnQgbXdpZmlleF9kcnZfZ2V0X2RhdGFfcmF0ZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICAgc3RydWN0IG13aWZpZXhfcmF0ZV9jZmcgKnJhdGUpOworaW50IG13aWZpZXhfZmluZF9iZXN0X2JzcyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICBzdHJ1Y3QgbXdpZmlleF9zc2lkX2Jzc2lkICpzc2lkX2Jzc2lkKTsKK2ludCBtd2lmaWV4X3JlcXVlc3Rfc2NhbihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJIHN0cnVjdCBtd2lmaWV4XzgwMl8xMV9zc2lkICpyZXFfc3NpZCk7CitpbnQgbXdpZmlleF9zZXRfdXNlcl9zY2FuX2lvY3RsKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJc3RydWN0IG13aWZpZXhfdXNlcl9zY2FuX2NmZyAqc2Nhbl9yZXEpOworaW50IG13aWZpZXhfY2hhbmdlX2FkaG9jX2NoYW4oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgaW50IGNoYW5uZWwpOworaW50IG13aWZpZXhfc2V0X3JhZGlvKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHU4IG9wdGlvbik7CisKK2ludCBtd2lmaWV4X2Rydl9jaGFuZ2VfYWRob2NfY2hhbihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBpbnQgY2hhbm5lbCk7CisKK2ludCBtd2lmaWV4X3NldF9lbmNvZGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgY29uc3QgdTggKmtleSwKKwkJICAgICAgIGludCBrZXlfbGVuLCB1OCBrZXlfaW5kZXgsIGludCBkaXNhYmxlKTsKKworaW50IG13aWZpZXhfc2V0X2dlbl9pZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqaWUsIGludCBpZV9sZW4pOworCitpbnQgbXdpZmlleF9nZXRfdmVyX2V4dChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KTsKKworaW50IG13aWZpZXhfZ2V0X3N0YXRzX2luZm8oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgIHN0cnVjdCBtd2lmaWV4X2RzX2dldF9zdGF0cyAqbG9nKTsKKworaW50IG13aWZpZXhfcmVnX3dyaXRlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHUzMiByZWdfdHlwZSwKKwkJICAgICAgdTMyIHJlZ19vZmZzZXQsIHUzMiByZWdfdmFsdWUpOworCitpbnQgbXdpZmlleF9yZWdfcmVhZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1MzIgcmVnX3R5cGUsCisJCSAgICAgdTMyIHJlZ19vZmZzZXQsIHUzMiAqdmFsdWUpOworCitpbnQgbXdpZmlleF9lZXByb21fcmVhZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1MTYgb2Zmc2V0LCB1MTYgYnl0ZXMsCisJCQl1OCAqdmFsdWUpOworCitpbnQgbXdpZmlleF9zZXRfMTFuX2h0dHhfY2ZnKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIGludCBkYXRhKTsKKworaW50IG13aWZpZXhfZ2V0XzExbl9odHR4X2NmZyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBpbnQgKmRhdGEpOworCitpbnQgbXdpZmlleF9zZXRfdHhfcmF0ZV9jZmcoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgaW50IHR4X3JhdGVfaW5kZXgpOworCitpbnQgbXdpZmlleF9nZXRfdHhfcmF0ZV9jZmcoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgaW50ICp0eF9yYXRlX2luZGV4KTsKKworaW50IG13aWZpZXhfZHJ2X3NldF9wb3dlcihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1MzIgKnBzX21vZGUpOworCitpbnQgbXdpZmlleF9kcnZfZ2V0X2RyaXZlcl92ZXJzaW9uKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICAgY2hhciAqdmVyc2lvbiwgaW50IG1heF9sZW4pOworCitpbnQgbXdpZmlleF9zZXRfdHhfcG93ZXIoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSBzdHJ1Y3QgbXdpZmlleF9wb3dlcl9jZmcgKnBvd2VyX2NmZyk7CisKK2ludCBtd2lmaWV4X21haW5fcHJvY2VzcyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICopOworCitpbnQgbXdpZmlleF9ic3Nfc2V0X2NoYW5uZWwoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqLAorCQkJICAgIHN0cnVjdCBtd2lmaWV4X2NoYW5fZnJlcV9wb3dlciAqY2ZwKTsKK2ludCBtd2lmaWV4X2Jzc19pb2N0bF9maW5kX2JzcyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICosCisJCQkgICAgICAgc3RydWN0IG13aWZpZXhfc3NpZF9ic3NpZCAqKTsKK2ludCBtd2lmaWV4X3NldF9yYWRpb19iYW5kX2NmZyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICosCisJCQkgc3RydWN0IG13aWZpZXhfZHNfYmFuZF9jZmcgKik7CitpbnQgbXdpZmlleF9nZXRfYnNzX2luZm8oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqLAorCQkJIHN0cnVjdCBtd2lmaWV4X2Jzc19pbmZvICopOworCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCit2b2lkIG13aWZpZXhfZGVidWdmc19pbml0KHZvaWQpOwordm9pZCBtd2lmaWV4X2RlYnVnZnNfcmVtb3ZlKHZvaWQpOworCit2b2lkIG13aWZpZXhfZGV2X2RlYnVnZnNfaW5pdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KTsKK3ZvaWQgbXdpZmlleF9kZXZfZGVidWdmc19yZW1vdmUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdik7CisjZW5kaWYKKyNlbmRpZiAvKiAhX01XSUZJRVhfTUFJTl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zY2FuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3NjYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzIyODYwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zY2FuLmMKQEAgLTAsMCArMSwzMDI1IEBACisvKgorICogTWFydmVsbCBXaXJlbGVzcyBMQU4gZGV2aWNlIGRyaXZlcjogc2NhbiBpb2N0bCBhbmQgY29tbWFuZCBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQKKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKyAqLworCisjaW5jbHVkZSAiZGVjbC5oIgorI2luY2x1ZGUgImlvY3RsLmgiCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgImZ3LmgiCisjaW5jbHVkZSAibWFpbi5oIgorI2luY2x1ZGUgIjExbi5oIgorI2luY2x1ZGUgImNmZzgwMjExLmgiCisKKy8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFubmVscyB0aGUgZmlybXdhcmUgY2FuIHNjYW4gcGVyIGNvbW1hbmQgKi8KKyNkZWZpbmUgTVdJRklFWF9NQVhfQ0hBTk5FTFNfUEVSX1NQRUNJRklDX1NDQU4gICAxNAorCisjZGVmaW5lIE1XSUZJRVhfQ0hBTk5FTFNfUEVSX1NDQU5fQ01EICAgICAgICAgICAgNAorCisvKiBNZW1vcnkgbmVlZGVkIHRvIHN0b3JlIGEgbWF4IHNpemVkIENoYW5uZWwgTGlzdCBUTFYgZm9yIGEgZmlybXdhcmUgc2NhbiAqLworI2RlZmluZSBDSEFOX1RMVl9NQVhfU0laRSAgKHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIpICAgICAgICAgXAorCQkJCSsgKE1XSUZJRVhfTUFYX0NIQU5ORUxTX1BFUl9TUEVDSUZJQ19TQ0FOICAgICBcCisJCQkJKnNpemVvZihzdHJ1Y3QgbXdpZmlleF9jaGFuX3NjYW5fcGFyYW1fc2V0KSkpCisKKy8qIE1lbW9yeSBuZWVkZWQgdG8gc3RvcmUgc3VwcG9ydGVkIHJhdGUgKi8KKyNkZWZpbmUgUkFURV9UTFZfTUFYX1NJWkUgICAoc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3JhdGVzX3BhcmFtX3NldCkgXAorCQkJCSsgSE9TVENNRF9TVVBQT1JURURfUkFURVMpCisKKy8qIE1lbW9yeSBuZWVkZWQgdG8gc3RvcmUgYSBtYXggbnVtYmVyL3NpemUgV2lsZENhcmQgU1NJRCBUTFYgZm9yIGEgZmlybXdhcmUKKwlzY2FuICovCisjZGVmaW5lIFdJTERDQVJEX1NTSURfVExWX01BWF9TSVpFICBcCisJKE1XSUZJRVhfTUFYX1NTSURfTElTVF9MRU5HVEggKgkJCQkJXAorCQkoc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3dpbGRjYXJkX3NzaWRfcGFyYW1zKQlcCisJCQkrIElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pKQorCisvKiBNYXhpbXVtIG1lbW9yeSBuZWVkZWQgZm9yIGEgbXdpZmlleF9zY2FuX2NtZF9jb25maWcgd2l0aCBhbGwgVExWcyBhdCBtYXggKi8KKyNkZWZpbmUgTUFYX1NDQU5fQ0ZHX0FMTE9DIChzaXplb2Yoc3RydWN0IG13aWZpZXhfc2Nhbl9jbWRfY29uZmlnKSAgICAgICAgXAorCQkJCSsgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX251bV9wcm9iZXMpICAgXAorCQkJCSsgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2h0Y2FwKSAgICAgICBcCisJCQkJKyBDSEFOX1RMVl9NQVhfU0laRSAgICAgICAgICAgICAgICAgXAorCQkJCSsgUkFURV9UTFZfTUFYX1NJWkUgICAgICAgICAgICAgICAgIFwKKwkJCQkrIFdJTERDQVJEX1NTSURfVExWX01BWF9TSVpFKQorCisKK3VuaW9uIG13aWZpZXhfc2Nhbl9jbWRfY29uZmlnX3RsdiB7CisJLyogU2NhbiBjb25maWd1cmF0aW9uICh2YXJpYWJsZSBsZW5ndGgpICovCisJc3RydWN0IG13aWZpZXhfc2Nhbl9jbWRfY29uZmlnIGNvbmZpZzsKKwkvKiBNYXggYWxsb2NhdGVkIGJsb2NrICovCisJdTggY29uZmlnX2FsbG9jX2J1ZltNQVhfU0NBTl9DRkdfQUxMT0NdOworfTsKKworZW51bSBjaXBoZXJfc3VpdGUgeworCUNJUEhFUl9TVUlURV9US0lQLAorCUNJUEhFUl9TVUlURV9DQ01QLAorCUNJUEhFUl9TVUlURV9NQVgKK307CitzdGF0aWMgdTggbXdpZmlleF93cGFfb3VpW0NJUEhFUl9TVUlURV9NQVhdWzRdID0geworCXsgMHgwMCwgMHg1MCwgMHhmMiwgMHgwMiB9LAkvKiBUS0lQICovCisJeyAweDAwLCAweDUwLCAweGYyLCAweDA0IH0sCS8qIEFFUyAgKi8KK307CitzdGF0aWMgdTggbXdpZmlleF9yc25fb3VpW0NJUEhFUl9TVUlURV9NQVhdWzRdID0geworCXsgMHgwMCwgMHgwZiwgMHhhYywgMHgwMiB9LAkvKiBUS0lQICovCisJeyAweDAwLCAweDBmLCAweGFjLCAweDA0IH0sCS8qIEFFUyAgKi8KK307CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHBhcnNlcyBhIGdpdmVuIElFIGZvciBhIGdpdmVuIE9VSS4KKyAqCisgKiBUaGlzIGlzIHVzZWQgdG8gcGFyc2UgYSBXUEEvUlNOIElFIHRvIGZpbmQgaWYgaXQgaGFzCisgKiBhIGdpdmVuIG91aSBpbiBQVEsuCisgKi8KK3N0YXRpYyB1OAorbXdpZmlleF9zZWFyY2hfb3VpX2luX2llKHN0cnVjdCBpZV9ib2R5ICppZWJvZHksIHU4ICpvdWkpCit7CisJdTggY291bnQ7CisKKwljb3VudCA9IGllYm9keS0+cHRrX2NudFswXTsKKworCS8qIFRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIE9VSXMgZm9yIFBUSyBoZW5jZQorCSAgIDEpIFRha2UgdGhlIGxlbmd0aC4KKwkgICAyKSBDaGVjayBhbGwgdGhlIE9VSXMgZm9yIEFFUy4KKwkgICAzKSBJZiBvbmUgb2YgdGhlbSBpcyBBRVMgdGhlbiBwYXNzIHN1Y2Nlc3MuICovCisJd2hpbGUgKGNvdW50KSB7CisJCWlmICghbWVtY21wKGllYm9keS0+cHRrX2JvZHksIG91aSwgc2l6ZW9mKGllYm9keS0+cHRrX2JvZHkpKSkKKwkJCXJldHVybiBNV0lGSUVYX09VSV9QUkVTRU5UOworCisJCS0tY291bnQ7CisJCWlmIChjb3VudCkKKwkJCWllYm9keSA9IChzdHJ1Y3QgaWVfYm9keSAqKSAoKHU4ICopIGllYm9keSArCisJCQkJCQlzaXplb2YoaWVib2R5LT5wdGtfYm9keSkpOworCX0KKworCXByX2RlYnVnKCJpbmZvOiAlczogT1VJIGlzIG5vdCBmb3VuZCBpbiBQVEtcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTVdJRklFWF9PVUlfTk9UX1BSRVNFTlQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBhIGdpdmVuIE9VSSBpcyBwcmVzZW50IGluIGEgUlNOIElFLgorICoKKyAqIFRoZSBmdW5jdGlvbiBmaXJzdCBjaGVja3MgaWYgYSBSU04gSUUgaXMgcHJlc2VudCBvciBub3QgaW4gdGhlCisgKiBCU1MgZGVzY3JpcHRvci4gSXQgdHJpZXMgdG8gbG9jYXRlIHRoZSBPVUkgb25seSBpZiBzdWNoIGFuIElFIGlzCisgKiBwcmVzZW50LgorICovCitzdGF0aWMgdTgKK213aWZpZXhfaXNfcnNuX291aV9wcmVzZW50KHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjLCB1MzIgY2lwaGVyKQoreworCXU4ICpvdWk7CisJc3RydWN0IGllX2JvZHkgKmllYm9keTsKKwl1OCByZXQgPSBNV0lGSUVYX09VSV9OT1RfUFJFU0VOVDsKKworCWlmICgoKGJzc19kZXNjLT5iY25fcnNuX2llKSAmJiAoKCooYnNzX2Rlc2MtPmJjbl9yc25faWUpKS4KKwkJCQkJaWVlZV9oZHIuZWxlbWVudF9pZCA9PSBXTEFOX0VJRF9SU04pKSkgeworCQlpZWJvZHkgPSAoc3RydWN0IGllX2JvZHkgKikKKwkJCSAoKCh1OCAqKSBic3NfZGVzYy0+YmNuX3Jzbl9pZS0+ZGF0YSkgKworCQkJIFJTTl9HVEtfT1VJX09GRlNFVCk7CisJCW91aSA9ICZtd2lmaWV4X3Jzbl9vdWlbY2lwaGVyXVswXTsKKwkJcmV0ID0gbXdpZmlleF9zZWFyY2hfb3VpX2luX2llKGllYm9keSwgb3VpKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBhIGdpdmVuIE9VSSBpcyBwcmVzZW50IGluIGEgV1BBIElFLgorICoKKyAqIFRoZSBmdW5jdGlvbiBmaXJzdCBjaGVja3MgaWYgYSBXUEEgSUUgaXMgcHJlc2VudCBvciBub3QgaW4gdGhlCisgKiBCU1MgZGVzY3JpcHRvci4gSXQgdHJpZXMgdG8gbG9jYXRlIHRoZSBPVUkgb25seSBpZiBzdWNoIGFuIElFIGlzCisgKiBwcmVzZW50LgorICovCitzdGF0aWMgdTgKK213aWZpZXhfaXNfd3BhX291aV9wcmVzZW50KHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjLCB1MzIgY2lwaGVyKQoreworCXU4ICpvdWk7CisJc3RydWN0IGllX2JvZHkgKmllYm9keTsKKwl1OCByZXQgPSBNV0lGSUVYX09VSV9OT1RfUFJFU0VOVDsKKworCWlmICgoKGJzc19kZXNjLT5iY25fd3BhX2llKSAmJiAoKCooYnNzX2Rlc2MtPmJjbl93cGFfaWUpKS4KKwkJCQkgICAgICB2ZW5kX2hkci5lbGVtZW50X2lkID09IFdMQU5fRUlEX1dQQSkpKSB7CisJCWllYm9keSA9IChzdHJ1Y3QgaWVfYm9keSAqKSBic3NfZGVzYy0+YmNuX3dwYV9pZS0+ZGF0YTsKKwkJb3VpID0gJm13aWZpZXhfd3BhX291aVtjaXBoZXJdWzBdOworCQlyZXQgPSBtd2lmaWV4X3NlYXJjaF9vdWlfaW5faWUoaWVib2R5LCBvdWkpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY29tcGFyZXMgdHdvIFNTSURzIGFuZCBjaGVja3MgaWYgdGhleSBtYXRjaC4KKyAqLworczMyCittd2lmaWV4X3NzaWRfY21wKHN0cnVjdCBtd2lmaWV4XzgwMl8xMV9zc2lkICpzc2lkMSwKKwkJIHN0cnVjdCBtd2lmaWV4XzgwMl8xMV9zc2lkICpzc2lkMikKK3sKKwlpZiAoIXNzaWQxIHx8ICFzc2lkMiB8fCAoc3NpZDEtPnNzaWRfbGVuICE9IHNzaWQyLT5zc2lkX2xlbikpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gbWVtY21wKHNzaWQxLT5zc2lkLCBzc2lkMi0+c3NpZCwgc3NpZDEtPnNzaWRfbGVuKTsKK30KKworLyoKKyAqIFNlbmRzIElPQ1RMIHJlcXVlc3QgdG8gZ2V0IHRoZSBiZXN0IEJTUy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyB0aGUgSU9DVEwgcmVxdWVzdCBidWZmZXIsIGZpbGxzIGl0CisgKiB3aXRoIHJlcXVpc2l0ZSBwYXJhbWV0ZXJzIGFuZCBjYWxscyB0aGUgSU9DVEwgaGFuZGxlci4KKyAqLworaW50IG13aWZpZXhfZmluZF9iZXN0X2JzcyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICBzdHJ1Y3QgbXdpZmlleF9zc2lkX2Jzc2lkICpzc2lkX2Jzc2lkKQoreworCXN0cnVjdCBtd2lmaWV4X3NzaWRfYnNzaWQgdG1wX3NzaWRfYnNzaWQ7CisJdTggKm1hYzsKKworCWlmICghc3NpZF9ic3NpZCkKKwkJcmV0dXJuIC0xOworCisJbWVtY3B5KCZ0bXBfc3NpZF9ic3NpZCwgc3NpZF9ic3NpZCwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X3NzaWRfYnNzaWQpKTsKKworCWlmICghbXdpZmlleF9ic3NfaW9jdGxfZmluZF9ic3MocHJpdiwgJnRtcF9zc2lkX2Jzc2lkKSkgeworCQltZW1jcHkoc3NpZF9ic3NpZCwgJnRtcF9zc2lkX2Jzc2lkLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X3NzaWRfYnNzaWQpKTsKKwkJbWFjID0gKHU4ICopICZzc2lkX2Jzc2lkLT5ic3NpZDsKKwkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJjbWQ6IGZvdW5kIG5ldHdvcms6IHNzaWQ9JXMsIgorCQkJCSIgJXBNXG4iLCBzc2lkX2Jzc2lkLT5zc2lkLnNzaWQsIG1hYyk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtMTsKK30KKworLyoKKyAqIFNlbmRzIElPQ1RMIHJlcXVlc3QgdG8gc3RhcnQgYSBzY2FuIHdpdGggdXNlciBjb25maWd1cmF0aW9ucy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyB0aGUgSU9DVEwgcmVxdWVzdCBidWZmZXIsIGZpbGxzIGl0CisgKiB3aXRoIHJlcXVpc2l0ZSBwYXJhbWV0ZXJzIGFuZCBjYWxscyB0aGUgSU9DVEwgaGFuZGxlci4KKyAqCisgKiBVcG9uIGNvbXBsZXRpb24sIGl0IGFsc28gZ2VuZXJhdGVzIGEgd2lyZWxlc3MgZXZlbnQgdG8gbm90aWZ5CisgKiBhcHBsaWNhdGlvbnMuCisgKi8KK2ludCBtd2lmaWV4X3NldF91c2VyX3NjYW5faW9jdGwoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQlzdHJ1Y3QgbXdpZmlleF91c2VyX3NjYW5fY2ZnICpzY2FuX3JlcSkKK3sKKwlpbnQgc3RhdHVzOworCisJcHJpdi0+YWRhcHRlci0+Y21kX3dhaXRfcS5jb25kaXRpb24gPSBmYWxzZTsKKworCXN0YXR1cyA9IG13aWZpZXhfc2Nhbl9uZXR3b3Jrcyhwcml2LCBzY2FuX3JlcSk7CisJaWYgKCFzdGF0dXMpCisJCXN0YXR1cyA9IG13aWZpZXhfd2FpdF9xdWV1ZV9jb21wbGV0ZShwcml2LT5hZGFwdGVyKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB3YXBpIGlzIGVuYWJsZWQgaW4gZHJpdmVyIGFuZCBzY2FubmVkIG5ldHdvcmsgaXMKKyAqIGNvbXBhdGlibGUgd2l0aCBpdC4KKyAqLworc3RhdGljIGJvb2wKK213aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlX2Zvcl93YXBpKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJICAgICAgIHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjKQoreworCWlmIChwcml2LT5zZWNfaW5mby53YXBpX2VuYWJsZWQgJiYKKwkgICAgKGJzc19kZXNjLT5iY25fd2FwaV9pZSAmJgorCSAgICAgKCgqKGJzc19kZXNjLT5iY25fd2FwaV9pZSkpLmllZWVfaGRyLmVsZW1lbnRfaWQgPT0KKwkJCVdMQU5fRUlEX0JTU19BQ19BQ0NFU1NfREVMQVkpKSkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgZHJpdmVyIGlzIGNvbmZpZ3VyZWQgd2l0aCBubyBzZWN1cml0eSBtb2RlIGFuZAorICogc2Nhbm5lZCBuZXR3b3JrIGlzIGNvbXBhdGlibGUgd2l0aCBpdC4KKyAqLworc3RhdGljIGJvb2wKK213aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlX2Zvcl9ub19zZWMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgICAgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MpCit7CisJaWYgKHByaXYtPnNlY19pbmZvLndlcF9zdGF0dXMgPT0gTVdJRklFWF84MDJfMTFfV0VQX0RJU0FCTEVECisJICAgICYmICFwcml2LT5zZWNfaW5mby53cGFfZW5hYmxlZCAmJiAhcHJpdi0+c2VjX2luZm8ud3BhMl9lbmFibGVkCisJICAgICYmICgoIWJzc19kZXNjLT5iY25fd3BhX2llKSB8fAorCQkoKCooYnNzX2Rlc2MtPmJjbl93cGFfaWUpKS52ZW5kX2hkci5lbGVtZW50X2lkICE9CisJICAgIFdMQU5fRUlEX1dQQSkpCisJICAgICYmICgoIWJzc19kZXNjLT5iY25fcnNuX2llKSB8fAorCQkoKCooYnNzX2Rlc2MtPmJjbl9yc25faWUpKS5pZWVlX2hkci5lbGVtZW50X2lkICE9CisJICAgIFdMQU5fRUlEX1JTTikpCisJICAgICYmICFwcml2LT5zZWNfaW5mby5lbmNyeXB0aW9uX21vZGUKKwkgICAgJiYgIWJzc19kZXNjLT5wcml2YWN5KSB7CisJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBzdGF0aWMgV0VQIGlzIGVuYWJsZWQgaW4gZHJpdmVyIGFuZCBzY2FubmVkIG5ldHdvcmsKKyAqIGlzIGNvbXBhdGlibGUgd2l0aCBpdC4KKyAqLworc3RhdGljIGJvb2wKK213aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlX2Zvcl9zdGF0aWNfd2VwKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJICAgICAgIHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjKQoreworCWlmIChwcml2LT5zZWNfaW5mby53ZXBfc3RhdHVzID09IE1XSUZJRVhfODAyXzExX1dFUF9FTkFCTEVECisJICAgICYmICFwcml2LT5zZWNfaW5mby53cGFfZW5hYmxlZCAmJiAhcHJpdi0+c2VjX2luZm8ud3BhMl9lbmFibGVkCisJICAgICYmIGJzc19kZXNjLT5wcml2YWN5KSB7CisJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB3cGEgaXMgZW5hYmxlZCBpbiBkcml2ZXIgYW5kIHNjYW5uZWQgbmV0d29yayBpcworICogY29tcGF0aWJsZSB3aXRoIGl0LgorICovCitzdGF0aWMgYm9vbAorbXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVfZm9yX3dwYShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCSAgICAgIHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjLAorCQkJCSAgICAgIGludCBpbmRleCkKK3sKKwlpZiAocHJpdi0+c2VjX2luZm8ud2VwX3N0YXR1cyA9PSBNV0lGSUVYXzgwMl8xMV9XRVBfRElTQUJMRUQKKwkgICAgJiYgcHJpdi0+c2VjX2luZm8ud3BhX2VuYWJsZWQgJiYgIXByaXYtPnNlY19pbmZvLndwYTJfZW5hYmxlZAorCSAgICAmJiAoKGJzc19kZXNjLT5iY25fd3BhX2llKSAmJiAoKCooYnNzX2Rlc2MtPmJjbl93cGFfaWUpKS52ZW5kX2hkci4KKwkJCQkJCWVsZW1lbnRfaWQgPT0gV0xBTl9FSURfV1BBKSkKKwkgICAvKgorCSAgICAqIFByaXZhY3kgYml0IG1heSBOT1QgYmUgc2V0IGluIHNvbWUgQVBzIGxpa2UKKwkgICAgKiBMaW5rU3lzIFdSVDU0RyAmJiBic3NfZGVzYy0+cHJpdmFjeQorCSAgICAqLworCSApIHsKKwkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiAlczogV1BBOiBpbmRleD0lZCIKKwkJCSIgd3BhX2llPSUjeCB3cGEyX2llPSUjeCBXRVA9JXMgV1BBPSVzIFdQQTI9JXMgIgorCQkJIkVuY01vZGU9JSN4IHByaXZhY3k9JSN4XG4iLCBfX2Z1bmNfXywgaW5kZXgsCisJCQkoYnNzX2Rlc2MtPmJjbl93cGFfaWUpID8KKwkJCSgqKGJzc19kZXNjLT5iY25fd3BhX2llKSkuCisJCQl2ZW5kX2hkci5lbGVtZW50X2lkIDogMCwKKwkJCShic3NfZGVzYy0+YmNuX3Jzbl9pZSkgPworCQkJKCooYnNzX2Rlc2MtPmJjbl9yc25faWUpKS4KKwkJCWllZWVfaGRyLmVsZW1lbnRfaWQgOiAwLAorCQkJKHByaXYtPnNlY19pbmZvLndlcF9zdGF0dXMgPT0KKwkJCU1XSUZJRVhfODAyXzExX1dFUF9FTkFCTEVEKSA/ICJlIiA6ICJkIiwKKwkJCShwcml2LT5zZWNfaW5mby53cGFfZW5hYmxlZCkgPyAiZSIgOiAiZCIsCisJCQkocHJpdi0+c2VjX2luZm8ud3BhMl9lbmFibGVkKSA/ICJlIiA6ICJkIiwKKwkJCXByaXYtPnNlY19pbmZvLmVuY3J5cHRpb25fbW9kZSwKKwkJCWJzc19kZXNjLT5wcml2YWN5KTsKKwkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHdwYTIgaXMgZW5hYmxlZCBpbiBkcml2ZXIgYW5kIHNjYW5uZWQgbmV0d29yayBpcworICogY29tcGF0aWJsZSB3aXRoIGl0LgorICovCitzdGF0aWMgYm9vbAorbXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVfZm9yX3dwYTIoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgICAgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MsCisJCQkJICAgICAgIGludCBpbmRleCkKK3sKKwlpZiAocHJpdi0+c2VjX2luZm8ud2VwX3N0YXR1cyA9PSBNV0lGSUVYXzgwMl8xMV9XRVBfRElTQUJMRUQKKwkgICAmJiAhcHJpdi0+c2VjX2luZm8ud3BhX2VuYWJsZWQgJiYgcHJpdi0+c2VjX2luZm8ud3BhMl9lbmFibGVkCisJICAgJiYgKChic3NfZGVzYy0+YmNuX3Jzbl9pZSkgJiYgKCgqKGJzc19kZXNjLT5iY25fcnNuX2llKSkuaWVlZV9oZHIuCisJCQkJCQllbGVtZW50X2lkID09IFdMQU5fRUlEX1JTTikpCisJICAgLyoKKwkgICAgKiBQcml2YWN5IGJpdCBtYXkgTk9UIGJlIHNldCBpbiBzb21lIEFQcyBsaWtlCisJICAgICogTGlua1N5cyBXUlQ1NEcgJiYgYnNzX2Rlc2MtPnByaXZhY3kKKwkgICAgKi8KKwkgKSB7CisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogJXM6IFdQQTI6IGluZGV4PSVkIgorCQkJIiB3cGFfaWU9JSN4IHdwYTJfaWU9JSN4IFdFUD0lcyBXUEE9JXMgV1BBMj0lcyAiCisJCQkiRW5jTW9kZT0lI3ggcHJpdmFjeT0lI3hcbiIsIF9fZnVuY19fLCBpbmRleCwKKwkJCShic3NfZGVzYy0+YmNuX3dwYV9pZSkgPworCQkJKCooYnNzX2Rlc2MtPmJjbl93cGFfaWUpKS4KKwkJCXZlbmRfaGRyLmVsZW1lbnRfaWQgOiAwLAorCQkJKGJzc19kZXNjLT5iY25fcnNuX2llKSA/CisJCQkoKihic3NfZGVzYy0+YmNuX3Jzbl9pZSkpLgorCQkJaWVlZV9oZHIuZWxlbWVudF9pZCA6IDAsCisJCQkocHJpdi0+c2VjX2luZm8ud2VwX3N0YXR1cyA9PQorCQkJTVdJRklFWF84MDJfMTFfV0VQX0VOQUJMRUQpID8gImUiIDogImQiLAorCQkJKHByaXYtPnNlY19pbmZvLndwYV9lbmFibGVkKSA/ICJlIiA6ICJkIiwKKwkJCShwcml2LT5zZWNfaW5mby53cGEyX2VuYWJsZWQpID8gImUiIDogImQiLAorCQkJcHJpdi0+c2VjX2luZm8uZW5jcnlwdGlvbl9tb2RlLAorCQkJYnNzX2Rlc2MtPnByaXZhY3kpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgYWRob2MgQUVTIGlzIGVuYWJsZWQgaW4gZHJpdmVyIGFuZCBzY2FubmVkIG5ldHdvcmsgaXMKKyAqIGNvbXBhdGlibGUgd2l0aCBpdC4KKyAqLworc3RhdGljIGJvb2wKK213aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlX2Zvcl9hZGhvY19hZXMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgICAgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MpCit7CisJaWYgKHByaXYtPnNlY19pbmZvLndlcF9zdGF0dXMgPT0gTVdJRklFWF84MDJfMTFfV0VQX0RJU0FCTEVECisJICAgICYmICFwcml2LT5zZWNfaW5mby53cGFfZW5hYmxlZCAmJiAhcHJpdi0+c2VjX2luZm8ud3BhMl9lbmFibGVkCisJICAgICYmICgoIWJzc19kZXNjLT5iY25fd3BhX2llKSB8fCAoKCooYnNzX2Rlc2MtPmJjbl93cGFfaWUpKS52ZW5kX2hkci4KKwkJICAgZWxlbWVudF9pZCAhPSBXTEFOX0VJRF9XUEEpKQorCSAgICAmJiAoKCFic3NfZGVzYy0+YmNuX3Jzbl9pZSkgfHwgKCgqKGJzc19kZXNjLT5iY25fcnNuX2llKSkuaWVlZV9oZHIuCisJCSAgIGVsZW1lbnRfaWQgIT0gV0xBTl9FSURfUlNOKSkKKwkgICAgJiYgIXByaXYtPnNlY19pbmZvLmVuY3J5cHRpb25fbW9kZQorCSAgICAmJiBic3NfZGVzYy0+cHJpdmFjeSkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgZHluYW1pYyBXRVAgaXMgZW5hYmxlZCBpbiBkcml2ZXIgYW5kIHNjYW5uZWQgbmV0d29yaworICogaXMgY29tcGF0aWJsZSB3aXRoIGl0LgorICovCitzdGF0aWMgYm9vbAorbXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVfZm9yX2R5bmFtaWNfd2VwKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJICAgICAgIHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjLAorCQkJCSAgICAgICBpbnQgaW5kZXgpCit7CisJaWYgKHByaXYtPnNlY19pbmZvLndlcF9zdGF0dXMgPT0gTVdJRklFWF84MDJfMTFfV0VQX0RJU0FCTEVECisJICAgICYmICFwcml2LT5zZWNfaW5mby53cGFfZW5hYmxlZCAmJiAhcHJpdi0+c2VjX2luZm8ud3BhMl9lbmFibGVkCisJICAgICYmICgoIWJzc19kZXNjLT5iY25fd3BhX2llKSB8fCAoKCooYnNzX2Rlc2MtPmJjbl93cGFfaWUpKS52ZW5kX2hkci4KKwkJICAgZWxlbWVudF9pZCAhPSBXTEFOX0VJRF9XUEEpKQorCSAgICAmJiAoKCFic3NfZGVzYy0+YmNuX3Jzbl9pZSkgfHwgKCgqKGJzc19kZXNjLT5iY25fcnNuX2llKSkuaWVlZV9oZHIuCisJCSAgIGVsZW1lbnRfaWQgIT0gV0xBTl9FSURfUlNOKSkKKwkgICAgJiYgcHJpdi0+c2VjX2luZm8uZW5jcnlwdGlvbl9tb2RlCisJICAgICYmIGJzc19kZXNjLT5wcml2YWN5KSB7CisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogJXM6IGR5bmFtaWMgIgorCQkJIldFUDogaW5kZXg9JWQgd3BhX2llPSUjeCB3cGEyX2llPSUjeCAiCisJCQkiRW5jTW9kZT0lI3ggcHJpdmFjeT0lI3hcbiIsCisJCQlfX2Z1bmNfXywgaW5kZXgsCisJCQkoYnNzX2Rlc2MtPmJjbl93cGFfaWUpID8KKwkJCSgqKGJzc19kZXNjLT5iY25fd3BhX2llKSkuCisJCQl2ZW5kX2hkci5lbGVtZW50X2lkIDogMCwKKwkJCShic3NfZGVzYy0+YmNuX3Jzbl9pZSkgPworCQkJKCooYnNzX2Rlc2MtPmJjbl9yc25faWUpKS4KKwkJCWllZWVfaGRyLmVsZW1lbnRfaWQgOiAwLAorCQkJcHJpdi0+c2VjX2luZm8uZW5jcnlwdGlvbl9tb2RlLAorCQkJYnNzX2Rlc2MtPnByaXZhY3kpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgYSBzY2FubmVkIG5ldHdvcmsgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBkcml2ZXIKKyAqIHNldHRpbmdzLgorICoKKyAqICAgV0VQICAgICBXUEEgICAgV1BBMiAgIGFkLWhvYyBlbmNyeXB0ICAgICAgICAgICAgICAgICAgTmV0d29yaworICogZW5hYmxlZCBlbmFibGVkIGVuYWJsZWQgIEFFUyAgICBtb2RlICAgUHJpdmFjeSBXUEEgV1BBMiBDb21wYXRpYmxlCisgKiAgICAwICAgICAgIDAgICAgICAgMCAgICAgIDAgICAgIE5PTkUgICAgICAwICAgICAwICAgMCAgIHllcyBObyBzZWN1cml0eQorICogICAgMCAgICAgICAxICAgICAgIDAgICAgICAwICAgICAgeCAgICAgICAgMXggICAgMSAgIHggICB5ZXMgV1BBIChkaXNhYmxlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhUIGlmIG5vIEFFUykKKyAqICAgIDAgICAgICAgMCAgICAgICAxICAgICAgMCAgICAgIHggICAgICAgIDF4ICAgIHggICAxICAgeWVzIFdQQTIgKGRpc2FibGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFQgaWYgbm8gQUVTKQorICogICAgMCAgICAgICAwICAgICAgIDAgICAgICAxICAgICBOT05FICAgICAgMSAgICAgMCAgIDAgICB5ZXMgQWQtaG9jIEFFUworICogICAgMSAgICAgICAwICAgICAgIDAgICAgICAwICAgICBOT05FICAgICAgMSAgICAgMCAgIDAgICB5ZXMgU3RhdGljIFdFUAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGlzYWJsZSBIVCkKKyAqICAgIDAgICAgICAgMCAgICAgICAwICAgICAgMCAgICAhPU5PTkUgICAgIDEgICAgIDAgICAwICAgeWVzIER5bmFtaWMgV0VQCisgKgorICogQ29tcGF0aWJpbGl0eSBpcyBub3QgbWF0Y2hlZCB3aGlsZSByb2FtaW5nLCBleGNlcHQgZm9yIG1vZGUuCisgKi8KK3N0YXRpYyBzMzIKK213aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHUzMiBpbmRleCwgdTMyIG1vZGUpCit7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2M7CisKKwlic3NfZGVzYyA9ICZhZGFwdGVyLT5zY2FuX3RhYmxlW2luZGV4XTsKKwlic3NfZGVzYy0+ZGlzYWJsZV8xMW4gPSBmYWxzZTsKKworCS8qIERvbid0IGNoZWNrIGZvciBjb21wYXRpYmlsaXR5IGlmIHJvYW1pbmcgKi8KKwlpZiAocHJpdi0+bWVkaWFfY29ubmVjdGVkICYmIChwcml2LT5ic3NfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCSAgICAmJiAoYnNzX2Rlc2MtPmJzc19tb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pKQorCQlyZXR1cm4gaW5kZXg7CisKKwlpZiAocHJpdi0+d3BzLnNlc3Npb25fZW5hYmxlKSB7CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LAorCQkJImluZm86IHJldHVybiBzdWNjZXNzIGRpcmVjdGx5IGluIFdQUyBwZXJpb2RcbiIpOworCQlyZXR1cm4gaW5kZXg7CisJfQorCisJaWYgKG13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlX2Zvcl93YXBpKHByaXYsIGJzc19kZXNjKSkgeworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IHJldHVybiBzdWNjZXNzIGZvciBXQVBJIEFQXG4iKTsKKwkJcmV0dXJuIGluZGV4OworCX0KKworCWlmIChic3NfZGVzYy0+YnNzX21vZGUgPT0gbW9kZSkgeworCQlpZiAobXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVfZm9yX25vX3NlYyhwcml2LCBic3NfZGVzYykpIHsKKwkJCS8qIE5vIHNlY3VyaXR5ICovCisJCQlyZXR1cm4gaW5kZXg7CisJCX0gZWxzZSBpZiAobXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVfZm9yX3N0YXRpY193ZXAocHJpdiwKKwkJCQkJCQkJYnNzX2Rlc2MpKSB7CisJCQkvKiBTdGF0aWMgV0VQIGVuYWJsZWQgKi8KKwkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogRGlzYWJsZSAxMW4gaW4gV0VQIG1vZGUuXG4iKTsKKwkJCWJzc19kZXNjLT5kaXNhYmxlXzExbiA9IHRydWU7CisJCQlyZXR1cm4gaW5kZXg7CisJCX0gZWxzZSBpZiAobXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVfZm9yX3dwYShwcml2LCBic3NfZGVzYywKKwkJCQkJCQkJIGluZGV4KSkgeworCQkJLyogV1BBIGVuYWJsZWQgKi8KKwkJCWlmICgoKHByaXYtPmFkYXB0ZXItPmNvbmZpZ19iYW5kcyAmIEJBTkRfR04KKwkJCSAgICAgIHx8IHByaXYtPmFkYXB0ZXItPmNvbmZpZ19iYW5kcyAmIEJBTkRfQU4pCisJCQkgICAgICAmJiBic3NfZGVzYy0+YmNuX2h0X2NhcCkKKwkJCSAgICAgICYmICFtd2lmaWV4X2lzX3dwYV9vdWlfcHJlc2VudChic3NfZGVzYywKKwkJCQkJQ0lQSEVSX1NVSVRFX0NDTVApKSB7CisKKwkJCQlpZiAobXdpZmlleF9pc193cGFfb3VpX3ByZXNlbnQoYnNzX2Rlc2MsCisJCQkJCSAgICBDSVBIRVJfU1VJVEVfVEtJUCkpIHsKKwkJCQkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsCisJCQkJCQkiaW5mbzogRGlzYWJsZSAxMW4gaWYgQUVTICIKKwkJCQkJCSJpcyBub3Qgc3VwcG9ydGVkIGJ5IEFQXG4iKTsKKwkJCQkJYnNzX2Rlc2MtPmRpc2FibGVfMTFuID0gdHJ1ZTsKKwkJCQl9IGVsc2UgeworCQkJCQlyZXR1cm4gLTE7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIGluZGV4OworCQl9IGVsc2UgaWYgKG13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlX2Zvcl93cGEyKHByaXYsCisJCQkJCQkJYnNzX2Rlc2MsIGluZGV4KSkgeworCQkJLyogV1BBMiBlbmFibGVkICovCisJCQlpZiAoKChwcml2LT5hZGFwdGVyLT5jb25maWdfYmFuZHMgJiBCQU5EX0dOCisJCQkgICAgICB8fCBwcml2LT5hZGFwdGVyLT5jb25maWdfYmFuZHMgJiBCQU5EX0FOKQorCQkJICAgICAgJiYgYnNzX2Rlc2MtPmJjbl9odF9jYXApCisJCQkgICAgICAmJiAhbXdpZmlleF9pc19yc25fb3VpX3ByZXNlbnQoYnNzX2Rlc2MsCisJCQkJCUNJUEhFUl9TVUlURV9DQ01QKSkgeworCisJCQkJaWYgKG13aWZpZXhfaXNfcnNuX291aV9wcmVzZW50KGJzc19kZXNjLAorCQkJCQkgICAgQ0lQSEVSX1NVSVRFX1RLSVApKSB7CisJCQkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LAorCQkJCQkJImluZm86IERpc2FibGUgMTFuIGlmIEFFUyAiCisJCQkJCQkiaXMgbm90IHN1cHBvcnRlZCBieSBBUFxuIik7CisJCQkJCWJzc19kZXNjLT5kaXNhYmxlXzExbiA9IHRydWU7CisJCQkJfSBlbHNlIHsKKwkJCQkJcmV0dXJuIC0xOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiBpbmRleDsKKwkJfSBlbHNlIGlmIChtd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZV9mb3JfYWRob2NfYWVzKHByaXYsCisJCQkJCQkJCWJzc19kZXNjKSkgeworCQkJLyogQWQtaG9jIEFFUyBlbmFibGVkICovCisJCQlyZXR1cm4gaW5kZXg7CisJCX0gZWxzZSBpZiAobXdpZmlleF9pc19uZXR3b3JrX2NvbXBhdGlibGVfZm9yX2R5bmFtaWNfd2VwKHByaXYsCisJCQkJCQkJYnNzX2Rlc2MsIGluZGV4KSkgeworCQkJLyogRHluYW1pYyBXRVAgZW5hYmxlZCAqLworCQkJcmV0dXJuIGluZGV4OworCQl9CisKKwkJLyogU2VjdXJpdHkgZG9lc24ndCBtYXRjaCAqLworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86ICVzOiBmYWlsZWQ6IGluZGV4PSVkICIKKwkJICAgICAgICJ3cGFfaWU9JSN4IHdwYTJfaWU9JSN4IFdFUD0lcyBXUEE9JXMgV1BBMj0lcyBFbmNNb2RlIgorCQkgICAgICAgIj0lI3ggcHJpdmFjeT0lI3hcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgaW5kZXgsCisJCSAgICAgICAoYnNzX2Rlc2MtPmJjbl93cGFfaWUpID8KKwkJICAgICAgICgqKGJzc19kZXNjLT5iY25fd3BhX2llKSkudmVuZF9oZHIuCisJCSAgICAgICBlbGVtZW50X2lkIDogMCwKKwkJICAgICAgIChic3NfZGVzYy0+YmNuX3Jzbl9pZSkgPworCQkgICAgICAgKCooYnNzX2Rlc2MtPmJjbl9yc25faWUpKS5pZWVlX2hkci4KKwkJICAgICAgIGVsZW1lbnRfaWQgOiAwLAorCQkgICAgICAgKHByaXYtPnNlY19pbmZvLndlcF9zdGF0dXMgPT0KKwkJCQlNV0lGSUVYXzgwMl8xMV9XRVBfRU5BQkxFRCkgPyAiZSIgOiAiZCIsCisJCSAgICAgICAocHJpdi0+c2VjX2luZm8ud3BhX2VuYWJsZWQpID8gImUiIDogImQiLAorCQkgICAgICAgKHByaXYtPnNlY19pbmZvLndwYTJfZW5hYmxlZCkgPyAiZSIgOiAiZCIsCisJCSAgICAgICBwcml2LT5zZWNfaW5mby5lbmNyeXB0aW9uX21vZGUsIGJzc19kZXNjLT5wcml2YWN5KTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIE1vZGUgZG9lc24ndCBtYXRjaCAqLworCXJldHVybiAtMTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZmluZHMgdGhlIGJlc3QgU1NJRCBpbiB0aGUgc2NhbiBsaXN0LgorICoKKyAqIEl0IHNlYXJjaGVzIHRoZSBzY2FuIHRhYmxlIGZvciB0aGUgYmVzdCBTU0lEIHRoYXQgYWxzbyBtYXRjaGVzIHRoZSBjdXJyZW50CisgKiBhZGFwdGVyIG5ldHdvcmsgcHJlZmVyZW5jZSAobW9kZSwgc2VjdXJpdHkgZXRjLikuCisgKi8KK3N0YXRpYyBzMzIKK213aWZpZXhfZmluZF9iZXN0X25ldHdvcmtfaW5fbGlzdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KQoreworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXUzMiBtb2RlID0gcHJpdi0+YnNzX21vZGU7CisJczMyIGJlc3RfbmV0ID0gLTE7CisJczMyIGJlc3RfcnNzaSA9IDA7CisJdTMyIGk7CisKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IG51bSBvZiBCU1NJRHMgPSAlZFxuIiwKKwkJCQlhZGFwdGVyLT5udW1faW5fc2Nhbl90YWJsZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX2luX3NjYW5fdGFibGU7IGkrKykgeworCQlzd2l0Y2ggKG1vZGUpIHsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQkJaWYgKG13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlKHByaXYsIGksIG1vZGUpID49IDApIHsKKwkJCQlpZiAoU0NBTl9SU1NJKGFkYXB0ZXItPnNjYW5fdGFibGVbaV0ucnNzaSkgPgorCQkJCSAgICBiZXN0X3Jzc2kpIHsKKwkJCQkJYmVzdF9yc3NpID0gU0NBTl9SU1NJKGFkYXB0ZXItPgorCQkJCQkJCSAgc2Nhbl90YWJsZVtpXS5yc3NpKTsKKwkJCQkJYmVzdF9uZXQgPSBpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOgorCQlkZWZhdWx0OgorCQkJaWYgKFNDQU5fUlNTSShhZGFwdGVyLT5zY2FuX3RhYmxlW2ldLnJzc2kpID4KKwkJCSAgICBiZXN0X3Jzc2kpIHsKKwkJCQliZXN0X3Jzc2kgPSBTQ0FOX1JTU0koYWRhcHRlci0+c2Nhbl90YWJsZVtpXS4KKwkJCQkJCSAgICAgIHJzc2kpOworCQkJCWJlc3RfbmV0ID0gaTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIGJlc3RfbmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgY2hhbm5lbCBsaXN0IGZvciB0aGUgZHJpdmVyIHRvIHNjYW4sIGJhc2VkCisgKiBvbiByZWdpb24vYmFuZCBpbmZvcm1hdGlvbi4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCBmb3IgYW55IHNjYW4gdGhhdCBpcyBub3QgcHJvdmlkZWQgd2l0aCBhCisgKiBzcGVjaWZpYyBjaGFubmVsIGxpc3QgdG8gc2Nhbi4KKyAqLworc3RhdGljIHZvaWQKK213aWZpZXhfc2Nhbl9jcmVhdGVfY2hhbm5lbF9saXN0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJY29uc3Qgc3RydWN0IG13aWZpZXhfdXNlcl9zY2FuX2NmZworCQkJCSp1c2VyX3NjYW5faW4sCisJCQkJc3RydWN0IG13aWZpZXhfY2hhbl9zY2FuX3BhcmFtX3NldAorCQkJCSpzY2FuX2NoYW5fbGlzdCwKKwkJCQl1OCBmaWx0ZXJlZF9zY2FuKQoreworCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoOworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCWludCBjaGFuX2lkeCA9IDAsIGk7CisJdTggc2Nhbl90eXBlOworCisJZm9yIChiYW5kID0gMDsgKGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTKSA7IGJhbmQrKykgeworCisJCWlmICghcHJpdi0+d2Rldi0+d2lwaHktPmJhbmRzW2JhbmRdKQorCQkJY29udGludWU7CisKKwkJc2JhbmQgPSBwcml2LT53ZGV2LT53aXBoeS0+YmFuZHNbYmFuZF07CisKKwkJZm9yIChpID0gMDsgKGkgPCBzYmFuZC0+bl9jaGFubmVscykgOyBpKyssIGNoYW5faWR4KyspIHsKKwkJCWNoID0gJnNiYW5kLT5jaGFubmVsc1tpXTsKKwkJCWlmIChjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkKKwkJCQljb250aW51ZTsKKwkJCXNjYW5fY2hhbl9saXN0W2NoYW5faWR4XS5yYWRpb190eXBlID0gYmFuZDsKKwkJCXNjYW5fdHlwZSA9IGNoLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTjsKKwkJCWlmICh1c2VyX3NjYW5faW4gJiYKKwkJCQl1c2VyX3NjYW5faW4tPmNoYW5fbGlzdFswXS5zY2FuX3RpbWUpCisJCQkJc2Nhbl9jaGFuX2xpc3RbY2hhbl9pZHhdLm1heF9zY2FuX3RpbWUgPQorCQkJCQljcHVfdG9fbGUxNigodTE2KSB1c2VyX3NjYW5faW4tPgorCQkJCQljaGFuX2xpc3RbMF0uc2Nhbl90aW1lKTsKKwkJCWVsc2UgaWYgKHNjYW5fdHlwZSA9PSBNV0lGSUVYX1NDQU5fVFlQRV9QQVNTSVZFKQorCQkJCXNjYW5fY2hhbl9saXN0W2NoYW5faWR4XS5tYXhfc2Nhbl90aW1lID0KKwkJCQkJY3B1X3RvX2xlMTYoYWRhcHRlci0+cGFzc2l2ZV9zY2FuX3RpbWUpOworCQkJZWxzZQorCQkJCXNjYW5fY2hhbl9saXN0W2NoYW5faWR4XS5tYXhfc2Nhbl90aW1lID0KKwkJCQkJY3B1X3RvX2xlMTYoYWRhcHRlci0+YWN0aXZlX3NjYW5fdGltZSk7CisJCQlpZiAoc2Nhbl90eXBlID09IE1XSUZJRVhfU0NBTl9UWVBFX1BBU1NJVkUpCisJCQkJc2Nhbl9jaGFuX2xpc3RbY2hhbl9pZHhdLmNoYW5fc2Nhbl9tb2RlX2JpdG1hcAorCQkJCQl8PSBNV0lGSUVYX1BBU1NJVkVfU0NBTjsKKwkJCWVsc2UKKwkJCQlzY2FuX2NoYW5fbGlzdFtjaGFuX2lkeF0uY2hhbl9zY2FuX21vZGVfYml0bWFwCisJCQkJCSY9IH5NV0lGSUVYX1BBU1NJVkVfU0NBTjsKKwkJCXNjYW5fY2hhbl9saXN0W2NoYW5faWR4XS5jaGFuX251bWJlciA9CisJCQkJCQkJKHUzMikgY2gtPmh3X3ZhbHVlOworCQkJaWYgKGZpbHRlcmVkX3NjYW4pIHsKKwkJCQlzY2FuX2NoYW5fbGlzdFtjaGFuX2lkeF0ubWF4X3NjYW5fdGltZSA9CisJCQkJY3B1X3RvX2xlMTYoYWRhcHRlci0+c3BlY2lmaWNfc2Nhbl90aW1lKTsKKwkJCQlzY2FuX2NoYW5fbGlzdFtjaGFuX2lkeF0uY2hhbl9zY2FuX21vZGVfYml0bWFwCisJCQkJCXw9IE1XSUZJRVhfRElTQUJMRV9DSEFOX0ZJTFQ7CisJCQl9CisJCX0KKworCX0KK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY29uc3RydWN0cyBhbmQgc2VuZHMgbXVsdGlwbGUgc2NhbiBjb25maWcgY29tbWFuZHMgdG8KKyAqIHRoZSBmaXJtd2FyZS4KKyAqCisgKiBQcmV2aW91cyByb3V0aW5lcyBpbiB0aGUgY29kZSBmbG93IGhhdmUgY3JlYXRlZCBhIHNjYW4gY29tbWFuZCBjb25maWd1cmF0aW9uCisgKiB3aXRoIGFueSByZXF1ZXN0ZWQgVExWcy4gIFRoaXMgZnVuY3Rpb24gc3BsaXRzIHRoZSBjaGFubmVsIFRMViBpbnRvIG1heGltdW0KKyAqIGNoYW5uZWxzIHN1cHBvcnRlZCBwZXIgc2NhbiBsaXN0cyBhbmQgc2VuZHMgdGhlIHBvcnRpb24gb2YgdGhlIGNoYW5uZWwgVExWLAorICogYWxvbmcgd2l0aCB0aGUgb3RoZXIgVExWcywgdG8gdGhlIGZpcm13YXJlLgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X3NjYW5fY2hhbm5lbF9saXN0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgIHUzMiBtYXhfY2hhbl9wZXJfc2NhbiwgdTggZmlsdGVyZWRfc2NhbiwKKwkJCSAgc3RydWN0IG13aWZpZXhfc2Nhbl9jbWRfY29uZmlnICpzY2FuX2NmZ19vdXQsCisJCQkgIHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2NoYW5fbGlzdF9wYXJhbV9zZXQKKwkJCSAgKmNoYW5fdGx2X291dCwKKwkJCSAgc3RydWN0IG13aWZpZXhfY2hhbl9zY2FuX3BhcmFtX3NldCAqc2Nhbl9jaGFuX2xpc3QpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IG13aWZpZXhfY2hhbl9zY2FuX3BhcmFtX3NldCAqdG1wX2NoYW5fbGlzdDsKKwlzdHJ1Y3QgbXdpZmlleF9jaGFuX3NjYW5fcGFyYW1fc2V0ICpzdGFydF9jaGFuOworCisJdTMyIHRsdl9pZHg7CisJdTMyIHRvdGFsX3NjYW5fdGltZTsKKwl1MzIgZG9uZV9lYXJseTsKKworCWlmICghc2Nhbl9jZmdfb3V0IHx8ICFjaGFuX3Rsdl9vdXQgfHwgIXNjYW5fY2hhbl9saXN0KSB7CisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJImluZm86IFNjYW46IE51bGwgZGV0ZWN0OiAlcCwgJXAsICVwXG4iLAorCQkgICAgICAgc2Nhbl9jZmdfb3V0LCBjaGFuX3Rsdl9vdXQsIHNjYW5fY2hhbl9saXN0KTsKKwkJcmV0dXJuIC0xOworCX0KKworCWNoYW5fdGx2X291dC0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihUTFZfVFlQRV9DSEFOTElTVCk7CisKKwkvKiBTZXQgdGhlIHRlbXAgY2hhbm5lbCBzdHJ1Y3QgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIGRlc2lyZWQKKwkgICBsaXN0ICovCisJdG1wX2NoYW5fbGlzdCA9IHNjYW5fY2hhbl9saXN0OworCisJLyogTG9vcCB0aHJvdWdoIHRoZSBkZXNpcmVkIGNoYW5uZWwgbGlzdCwgc2VuZGluZyBhIG5ldyBmaXJtd2FyZSBzY2FuCisJICAgY29tbWFuZHMgZm9yIGVhY2ggbWF4X2NoYW5fcGVyX3NjYW4gY2hhbm5lbHMgKG9yIGZvciAxLDYsMTEKKwkgICBpbmRpdmlkdWFsbHkgaWYgY29uZmlndXJlZCBhY2NvcmRpbmdseSkgKi8KKwl3aGlsZSAodG1wX2NoYW5fbGlzdC0+Y2hhbl9udW1iZXIpIHsKKworCQl0bHZfaWR4ID0gMDsKKwkJdG90YWxfc2Nhbl90aW1lID0gMDsKKwkJY2hhbl90bHZfb3V0LT5oZWFkZXIubGVuID0gMDsKKwkJc3RhcnRfY2hhbiA9IHRtcF9jaGFuX2xpc3Q7CisJCWRvbmVfZWFybHkgPSBmYWxzZTsKKworCQkvKgorCQkgKiBDb25zdHJ1Y3QgdGhlIENoYW5uZWwgVExWIGZvciB0aGUgc2NhbiBjb21tYW5kLiAgQ29udGludWUgdG8KKwkJICogaW5zZXJ0IGNoYW5uZWwgVExWcyB1bnRpbDoKKwkJICogICAtIHRoZSB0bHZfaWR4IGhpdHMgdGhlIG1heGltdW0gY29uZmlndXJlZCBwZXIgc2NhbiBjb21tYW5kCisJCSAqICAgLSB0aGUgbmV4dCBjaGFubmVsIHRvIGluc2VydCBpcyAwIChlbmQgb2YgZGVzaXJlZCBjaGFubmVsCisJCSAqICAgICBsaXN0KQorCQkgKiAgIC0gZG9uZV9lYXJseSBpcyBzZXQgKGNvbnRyb2xsaW5nIGluZGl2aWR1YWwgc2Nhbm5pbmcgb2YKKwkJICogICAgIDEsNiwxMSkKKwkJICovCisJCXdoaWxlICh0bHZfaWR4IDwgbWF4X2NoYW5fcGVyX3NjYW4KKwkJICAgICAgICYmIHRtcF9jaGFuX2xpc3QtPmNoYW5fbnVtYmVyICYmICFkb25lX2Vhcmx5KSB7CisKKwkJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJCSJpbmZvOiBTY2FuOiBDaGFuKCUzZCksIFJhZGlvKCVkKSwiCisJCQkJIiBNb2RlKCVkLCAlZCksIER1ciglZClcbiIsCisJCQkgICAgICAgdG1wX2NoYW5fbGlzdC0+Y2hhbl9udW1iZXIsCisJCQkgICAgICAgdG1wX2NoYW5fbGlzdC0+cmFkaW9fdHlwZSwKKwkJCSAgICAgICB0bXBfY2hhbl9saXN0LT5jaGFuX3NjYW5fbW9kZV9iaXRtYXAKKwkJCSAgICAgICAmIE1XSUZJRVhfUEFTU0lWRV9TQ0FOLAorCQkJICAgICAgICh0bXBfY2hhbl9saXN0LT5jaGFuX3NjYW5fbW9kZV9iaXRtYXAKKwkJCSAgICAgICAmIE1XSUZJRVhfRElTQUJMRV9DSEFOX0ZJTFQpID4+IDEsCisJCQkgICAgICAgbGUxNl90b19jcHUodG1wX2NoYW5fbGlzdC0+bWF4X3NjYW5fdGltZSkpOworCisJCQkvKiBDb3B5IHRoZSBjdXJyZW50IGNoYW5uZWwgVExWIHRvIHRoZSBjb21tYW5kIGJlaW5nCisJCQkgICBwcmVwYXJlZCAqLworCQkJbWVtY3B5KGNoYW5fdGx2X291dC0+Y2hhbl9zY2FuX3BhcmFtICsgdGx2X2lkeCwKKwkJCSAgICAgICB0bXBfY2hhbl9saXN0LAorCQkJICAgICAgIHNpemVvZihjaGFuX3Rsdl9vdXQtPmNoYW5fc2Nhbl9wYXJhbSkpOworCisJCQkvKiBJbmNyZW1lbnQgdGhlIFRMViBoZWFkZXIgbGVuZ3RoIGJ5IHRoZSBzaXplCisJCQkgICBhcHBlbmRlZCAqLworCQkJY2hhbl90bHZfb3V0LT5oZWFkZXIubGVuID0KKwkJCWNwdV90b19sZTE2KGxlMTZfdG9fY3B1KGNoYW5fdGx2X291dC0+aGVhZGVyLmxlbikgKworCQkJKHNpemVvZihjaGFuX3Rsdl9vdXQtPmNoYW5fc2Nhbl9wYXJhbSkpKTsKKworCQkJLyoKKwkJCSAqIFRoZSB0bHYgYnVmZmVyIGxlbmd0aCBpcyBzZXQgdG8gdGhlIG51bWJlciBvZiBieXRlcworCQkJICogb2YgdGhlIGJldHdlZW4gdGhlIGNoYW5uZWwgdGx2IHBvaW50ZXIgYW5kIHRoZSBzdGFydAorCQkJICogb2YgdGhlIHRsdiBidWZmZXIuICBUaGlzIGNvbXBlbnNhdGVzIGZvciBhbnkgVExWcworCQkJICogdGhhdCB3ZXJlIGFwcGVuZGVkIGJlZm9yZSB0aGUgY2hhbm5lbCBsaXN0LgorCQkJICovCisJCQlzY2FuX2NmZ19vdXQtPnRsdl9idWZfbGVuID0gKHUzMikgKCh1OCAqKSBjaGFuX3Rsdl9vdXQgLQorCQkJCQkJCXNjYW5fY2ZnX291dC0+dGx2X2J1Zik7CisKKwkJCS8qIEFkZCB0aGUgc2l6ZSBvZiB0aGUgY2hhbm5lbCB0bHYgaGVhZGVyIGFuZCB0aGUgZGF0YQorCQkJICAgbGVuZ3RoICovCisJCQlzY2FuX2NmZ19vdXQtPnRsdl9idWZfbGVuICs9CisJCQkJKHNpemVvZihjaGFuX3Rsdl9vdXQtPmhlYWRlcikKKwkJCQkgKyBsZTE2X3RvX2NwdShjaGFuX3Rsdl9vdXQtPmhlYWRlci5sZW4pKTsKKworCQkJLyogSW5jcmVtZW50IHRoZSBpbmRleCB0byB0aGUgY2hhbm5lbCB0bHYgd2UgYXJlCisJCQkgICBjb25zdHJ1Y3RpbmcgKi8KKwkJCXRsdl9pZHgrKzsKKworCQkJLyogQ291bnQgdGhlIHRvdGFsIHNjYW4gdGltZSBwZXIgY29tbWFuZCAqLworCQkJdG90YWxfc2Nhbl90aW1lICs9CisJCQkJbGUxNl90b19jcHUodG1wX2NoYW5fbGlzdC0+bWF4X3NjYW5fdGltZSk7CisKKwkJCWRvbmVfZWFybHkgPSBmYWxzZTsKKworCQkJLyogU3RvcCB0aGUgbG9vcCBpZiB0aGUgKmN1cnJlbnQqIGNoYW5uZWwgaXMgaW4gdGhlCisJCQkgICAxLDYsMTEgc2V0IGFuZCB3ZSBhcmUgbm90IGZpbHRlcmluZyBvbiBhIEJTU0lECisJCQkgICBvciBTU0lELiAqLworCQkJaWYgKCFmaWx0ZXJlZF9zY2FuICYmICh0bXBfY2hhbl9saXN0LT5jaGFuX251bWJlciA9PSAxCisJCQkJfHwgdG1wX2NoYW5fbGlzdC0+Y2hhbl9udW1iZXIgPT0gNgorCQkJCXx8IHRtcF9jaGFuX2xpc3QtPmNoYW5fbnVtYmVyID09IDExKSkKKwkJCQlkb25lX2Vhcmx5ID0gdHJ1ZTsKKworCQkJLyogSW5jcmVtZW50IHRoZSB0bXAgcG9pbnRlciB0byB0aGUgbmV4dCBjaGFubmVsIHRvCisJCQkgICBiZSBzY2FubmVkICovCisJCQl0bXBfY2hhbl9saXN0Kys7CisKKwkJCS8qIFN0b3AgdGhlIGxvb3AgaWYgdGhlICpuZXh0KiBjaGFubmVsIGlzIGluIHRoZSAxLDYsMTEKKwkJCSAgIHNldC4gIFRoaXMgd2lsbCBjYXVzZSBpdCB0byBiZSB0aGUgb25seSBjaGFubmVsCisJCQkgICBzY2FubmVkIG9uIHRoZSBuZXh0IGludGVyYXRpb24gKi8KKwkJCWlmICghZmlsdGVyZWRfc2NhbiAmJiAodG1wX2NoYW5fbGlzdC0+Y2hhbl9udW1iZXIgPT0gMQorCQkJCXx8IHRtcF9jaGFuX2xpc3QtPmNoYW5fbnVtYmVyID09IDYKKwkJCQl8fCB0bXBfY2hhbl9saXN0LT5jaGFuX251bWJlciA9PSAxMSkpCisJCQkJZG9uZV9lYXJseSA9IHRydWU7CisJCX0KKworCQkvKiBUaGUgdG90YWwgc2NhbiB0aW1lIHNob3VsZCBiZSBsZXNzIHRoYW4gc2NhbiBjb21tYW5kIHRpbWVvdXQKKwkJICAgdmFsdWUgKi8KKwkJaWYgKHRvdGFsX3NjYW5fdGltZSA+IE1XSUZJRVhfTUFYX1RPVEFMX1NDQU5fVElNRSkgeworCQkJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsICJ0b3RhbCBzY2FuIHRpbWUgJWRtcyIKKwkJCQkiIGlzIG92ZXIgbGltaXQgKCVkbXMpLCBzY2FuIHNraXBwZWRcbiIsCisJCQkJdG90YWxfc2Nhbl90aW1lLCBNV0lGSUVYX01BWF9UT1RBTF9TQ0FOX1RJTUUpOworCQkJcmV0ID0gLTE7CisJCQlicmVhazsKKwkJfQorCisJCXByaXYtPmFkYXB0ZXItPnNjYW5fY2hhbm5lbHMgPSBzdGFydF9jaGFuOworCisJCS8qIFNlbmQgdGhlIHNjYW4gY29tbWFuZCB0byB0aGUgZmlybXdhcmUgd2l0aCB0aGUgc3BlY2lmaWVkCisJCSAgIGNmZyAqLworCQlyZXQgPSBtd2lmaWV4X3NlbmRfY21kX2FzeW5jKHByaXYsIEhvc3RDbWRfQ01EXzgwMl8xMV9TQ0FOLAorCQkJCQkgICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsCisJCQkJCSAgICAgc2Nhbl9jZmdfb3V0KTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCX0KKworCWlmIChyZXQpCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjb25zdHJ1Y3RzIGEgc2NhbiBjb21tYW5kIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIHRvIHVzZQorICogaW4gc2NhbiBjb21tYW5kcy4KKyAqCisgKiBBcHBsaWNhdGlvbiBsYXllciBvciBvdGhlciBmdW5jdGlvbnMgY2FuIGludm9rZSBuZXR3b3JrIHNjYW5uaW5nCisgKiB3aXRoIGEgc2NhbiBjb25maWd1cmF0aW9uIHN1cHBsaWVkIGluIGEgdXNlciBzY2FuIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBhcyB0aGUgYmFzaXMgb2Ygb25lIG9yIG1hbnkgc2NhbiBjb21tYW5kIGNvbmZpZ3VyYXRpb24KKyAqIGNvbW1hbmRzIHRoYXQgYXJlIHNlbnQgdG8gdGhlIGNvbW1hbmQgcHJvY2Vzc2luZyBtb2R1bGUgYW5kIGV2ZW50dWFsbHkgdG8gdGhlCisgKiBmaXJtd2FyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBzY2FuIGNvbW1hbmQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgIGJhc2VkIG9uIHRoZQorICogZm9sbG93aW5nIHVzZXIgc3VwcGxpZWQgcGFyYW1ldGVycyAoaWYgcHJlc2VudCk6CisgKiAgICAgIC0gU1NJRCBmaWx0ZXIKKyAqICAgICAgLSBCU1NJRCBmaWx0ZXIKKyAqICAgICAgLSBOdW1iZXIgb2YgUHJvYmVzIHRvIGJlIHNlbnQKKyAqICAgICAgLSBDaGFubmVsIGxpc3QKKyAqCisgKiBJZiB0aGUgU1NJRCBvciBCU1NJRCBmaWx0ZXIgaXMgbm90IHByZXNlbnQsIHRoZSBmaWx0ZXIgaXMgZGlzYWJsZWQvY2xlYXJlZC4KKyAqIElmIHRoZSBudW1iZXIgb2YgcHJvYmVzIGlzIG5vdCBzZXQsIGFkYXB0ZXIgZGVmYXVsdCBzZXR0aW5nIGlzIHVzZWQuCisgKi8KK3N0YXRpYyB2b2lkCittd2lmaWV4X3NjYW5fc2V0dXBfc2Nhbl9jb25maWcoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbXdpZmlleF91c2VyX3NjYW5fY2ZnICp1c2VyX3NjYW5faW4sCisJCQkgICAgICAgc3RydWN0IG13aWZpZXhfc2Nhbl9jbWRfY29uZmlnICpzY2FuX2NmZ19vdXQsCisJCQkgICAgICAgc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfY2hhbl9saXN0X3BhcmFtX3NldAorCQkJICAgICAgICoqY2hhbl9saXN0X291dCwKKwkJCSAgICAgICBzdHJ1Y3QgbXdpZmlleF9jaGFuX3NjYW5fcGFyYW1fc2V0CisJCQkgICAgICAgKnNjYW5fY2hhbl9saXN0LAorCQkJICAgICAgIHU4ICptYXhfY2hhbl9wZXJfc2NhbiwgdTggKmZpbHRlcmVkX3NjYW4sCisJCQkgICAgICAgdTggKnNjYW5fY3VycmVudF9vbmx5KQoreworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX251bV9wcm9iZXMgKm51bV9wcm9iZXNfdGx2OworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3dpbGRjYXJkX3NzaWRfcGFyYW1zICp3aWxkY2FyZF9zc2lkX3RsdjsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19yYXRlc19wYXJhbV9zZXQgKnJhdGVzX3RsdjsKKwljb25zdCB1OCB6ZXJvX21hY1tFVEhfQUxFTl0gPSB7IDAsIDAsIDAsIDAsIDAsIDAgfTsKKwl1OCAqdGx2X3BvczsKKwl1MzIgbnVtX3Byb2JlczsKKwl1MzIgc3NpZF9sZW47CisJdTMyIGNoYW5faWR4OworCXUzMiBzY2FuX3R5cGU7CisJdTE2IHNjYW5fZHVyOworCXU4IGNoYW5uZWw7CisJdTggcmFkaW9fdHlwZTsKKwl1MzIgc3NpZF9pZHg7CisJdTggc3NpZF9maWx0ZXI7CisJdTggcmF0ZXNbTVdJRklFWF9TVVBQT1JURURfUkFURVNdOworCXUzMiByYXRlc19zaXplOworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2h0Y2FwICpodF9jYXA7CisKKwkvKiBUaGUgdGx2X2J1Zl9sZW4gaXMgY2FsY3VsYXRlZCBmb3IgZWFjaCBzY2FuIGNvbW1hbmQuICBUaGUgVExWcyBhZGRlZAorCSAgIGluIHRoaXMgcm91dGluZSB3aWxsIGJlIHByZXNlcnZlZCBzaW5jZSB0aGUgcm91dGluZSB0aGF0IHNlbmRzIHRoZQorCSAgIGNvbW1hbmQgd2lsbCBhcHBlbmQgY2hhbm5lbFRMVnMgYXQgKmNoYW5fbGlzdF9vdXQuICBUaGUgZGlmZmVyZW5jZQorCSAgIGJldHdlZW4gdGhlICpjaGFuX2xpc3Rfb3V0IGFuZCB0aGUgdGx2X2J1ZiBzdGFydCB3aWxsIGJlIHVzZWQgdG8KKwkgICBjYWxjdWxhdGUgdGhlIHNpemUgb2YgYW55dGhpbmcgd2UgYWRkIGluIHRoaXMgcm91dGluZS4gKi8KKwlzY2FuX2NmZ19vdXQtPnRsdl9idWZfbGVuID0gMDsKKworCS8qIFJ1bm5pbmcgdGx2IHBvaW50ZXIuICBBc3NpZ25lZCB0byBjaGFuX2xpc3Rfb3V0IGF0IGVuZCBvZiBmdW5jdGlvbgorCSAgIHNvIGxhdGVyIHJvdXRpbmVzIGtub3cgd2hlcmUgY2hhbm5lbHMgY2FuIGJlIGFkZGVkIHRvIHRoZSBjb21tYW5kCisJICAgYnVmICovCisJdGx2X3BvcyA9IHNjYW5fY2ZnX291dC0+dGx2X2J1ZjsKKworCS8qIEluaXRpYWxpemUgdGhlIHNjYW4gYXMgdW4tZmlsdGVyZWQ7IHRoZSBmbGFnIGlzIGxhdGVyIHNldCB0byBUUlVFCisJICAgYmVsb3cgaWYgYSBTU0lEIG9yIEJTU0lEIGZpbHRlciBpcyBzZW50IGluIHRoZSBjb21tYW5kICovCisJKmZpbHRlcmVkX3NjYW4gPSBmYWxzZTsKKworCS8qIEluaXRpYWxpemUgdGhlIHNjYW4gYXMgbm90IGJlaW5nIG9ubHkgb24gdGhlIGN1cnJlbnQgY2hhbm5lbC4gIElmCisJICAgdGhlIGNoYW5uZWwgbGlzdCBpcyBjdXN0b21pemVkLCBvbmx5IGNvbnRhaW5zIG9uZSBjaGFubmVsLCBhbmQgaXMKKwkgICB0aGUgYWN0aXZlIGNoYW5uZWwsIHRoaXMgaXMgc2V0IHRydWUgYW5kIGRhdGEgZmxvdyBpcyBub3QgaGFsdGVkLiAqLworCSpzY2FuX2N1cnJlbnRfb25seSA9IGZhbHNlOworCisJaWYgKHVzZXJfc2Nhbl9pbikgeworCisJCS8qIERlZmF1bHQgdGhlIHNzaWRfZmlsdGVyIGZsYWcgdG8gVFJVRSwgc2V0IGZhbHNlIHVuZGVyCisJCSAgIGNlcnRhaW4gd2lsZGNhcmQgY29uZGl0aW9ucyBhbmQgcXVhbGlmaWVkIGJ5IHRoZSBleGlzdGVuY2UKKwkJICAgb2YgYW4gU1NJRCBsaXN0IGJlZm9yZSBtYXJraW5nIHRoZSBzY2FuIGFzIGZpbHRlcmVkICovCisJCXNzaWRfZmlsdGVyID0gdHJ1ZTsKKworCQkvKiBTZXQgdGhlIEJTUyB0eXBlIHNjYW4gZmlsdGVyLCB1c2UgQWRhcHRlciBzZXR0aW5nIGlmCisJCSAgIHVuc2V0ICovCisJCXNjYW5fY2ZnX291dC0+YnNzX21vZGUgPQorCQkJKHVzZXJfc2Nhbl9pbi0+YnNzX21vZGUgPyAodTgpIHVzZXJfc2Nhbl9pbi0+CisJCQkgYnNzX21vZGUgOiAodTgpIGFkYXB0ZXItPnNjYW5fbW9kZSk7CisKKwkJLyogU2V0IHRoZSBudW1iZXIgb2YgcHJvYmVzIHRvIHNlbmQsIHVzZSBBZGFwdGVyIHNldHRpbmcKKwkJICAgaWYgdW5zZXQgKi8KKwkJbnVtX3Byb2JlcyA9CisJCQkodXNlcl9zY2FuX2luLT5udW1fcHJvYmVzID8gdXNlcl9zY2FuX2luLT4KKwkJCSBudW1fcHJvYmVzIDogYWRhcHRlci0+c2Nhbl9wcm9iZXMpOworCisJCS8qCisJCSAqIFNldCB0aGUgQlNTSUQgZmlsdGVyIHRvIHRoZSBpbmNvbWluZyBjb25maWd1cmF0aW9uLAorCQkgKiBpZiBub24temVyby4gIElmIG5vdCBzZXQsIGl0IHdpbGwgcmVtYWluIGRpc2FibGVkCisJCSAqIChhbGwgemVyb3MpLgorCQkgKi8KKwkJbWVtY3B5KHNjYW5fY2ZnX291dC0+c3BlY2lmaWNfYnNzaWQsCisJCSAgICAgICB1c2VyX3NjYW5faW4tPnNwZWNpZmljX2Jzc2lkLAorCQkgICAgICAgc2l6ZW9mKHNjYW5fY2ZnX291dC0+c3BlY2lmaWNfYnNzaWQpKTsKKworCQlmb3IgKHNzaWRfaWR4ID0gMDsKKwkJICAgICAoKHNzaWRfaWR4IDwgQVJSQVlfU0laRSh1c2VyX3NjYW5faW4tPnNzaWRfbGlzdCkpCisJCSAgICAgICYmICgqdXNlcl9zY2FuX2luLT5zc2lkX2xpc3Rbc3NpZF9pZHhdLnNzaWQKKwkJCSAgfHwgdXNlcl9zY2FuX2luLT5zc2lkX2xpc3Rbc3NpZF9pZHhdLm1heF9sZW4pKTsKKwkJICAgICBzc2lkX2lkeCsrKSB7CisKKwkJCXNzaWRfbGVuID0gc3RybGVuKHVzZXJfc2Nhbl9pbi0+c3NpZF9saXN0W3NzaWRfaWR4XS4KKwkJCQkJICBzc2lkKSArIDE7CisKKwkJCXdpbGRjYXJkX3NzaWRfdGx2ID0KKwkJCQkoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfd2lsZGNhcmRfc3NpZF9wYXJhbXMgKikKKwkJCQl0bHZfcG9zOworCQkJd2lsZGNhcmRfc3NpZF90bHYtPmhlYWRlci50eXBlID0KKwkJCQljcHVfdG9fbGUxNihUTFZfVFlQRV9XSUxEQ0FSRFNTSUQpOworCQkJd2lsZGNhcmRfc3NpZF90bHYtPmhlYWRlci5sZW4gPSBjcHVfdG9fbGUxNigKKwkJCQkodTE2KSAoc3NpZF9sZW4gKyBzaXplb2Yod2lsZGNhcmRfc3NpZF90bHYtPgorCQkJCQkJCSBtYXhfc3NpZF9sZW5ndGgpKSk7CisJCQl3aWxkY2FyZF9zc2lkX3Rsdi0+bWF4X3NzaWRfbGVuZ3RoID0KKwkJCQl1c2VyX3NjYW5faW4tPnNzaWRfbGlzdFtzc2lkX2lkeF0ubWF4X2xlbjsKKworCQkJbWVtY3B5KHdpbGRjYXJkX3NzaWRfdGx2LT5zc2lkLAorCQkJICAgICAgIHVzZXJfc2Nhbl9pbi0+c3NpZF9saXN0W3NzaWRfaWR4XS5zc2lkLAorCQkJICAgICAgIHNzaWRfbGVuKTsKKworCQkJdGx2X3BvcyArPSAoc2l6ZW9mKHdpbGRjYXJkX3NzaWRfdGx2LT5oZWFkZXIpCisJCQkJKyBsZTE2X3RvX2NwdSh3aWxkY2FyZF9zc2lkX3Rsdi0+aGVhZGVyLmxlbikpOworCisJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IHNjYW46IHNzaWRfbGlzdFslZF06ICVzLCAlZFxuIiwKKwkJCQlzc2lkX2lkeCwgd2lsZGNhcmRfc3NpZF90bHYtPnNzaWQsCisJCQkJd2lsZGNhcmRfc3NpZF90bHYtPm1heF9zc2lkX2xlbmd0aCk7CisKKwkJCS8qIEVtcHR5IHdpbGRjYXJkIHNzaWQgd2l0aCBhIG1heGxlbiB3aWxsIG1hdGNoIG1hbnkgb3IKKwkJCSAgIHBvdGVudGlhbGx5IGFsbCBTU0lEcyAobWF4bGVuID09IDMyKSwgdGhlcmVmb3JlIGRvCisJCQkgICBub3QgdHJlYXQgdGhlIHNjYW4gYXMKKwkJCSAgIGZpbHRlcmVkLiAqLworCQkJaWYgKCFzc2lkX2xlbiAmJiB3aWxkY2FyZF9zc2lkX3Rsdi0+bWF4X3NzaWRfbGVuZ3RoKQorCQkJCXNzaWRfZmlsdGVyID0gZmFsc2U7CisKKwkJfQorCisJCS8qCisJCSAqICBUaGUgZGVmYXVsdCBudW1iZXIgb2YgY2hhbm5lbHMgc2VudCBpbiB0aGUgY29tbWFuZCBpcyBsb3cgdG8KKwkJICogIGVuc3VyZSB0aGUgcmVzcG9uc2UgYnVmZmVyIGZyb20gdGhlIGZpcm13YXJlIGRvZXMgbm90CisJCSAqICB0cnVuY2F0ZSBzY2FuIHJlc3VsdHMuICBUaGF0IGlzIG5vdCBhbiBpc3N1ZSB3aXRoIGFuIFNTSUQKKwkJICogIG9yIEJTU0lEIGZpbHRlciBhcHBsaWVkIHRvIHRoZSBzY2FuIHJlc3VsdHMgaW4gdGhlIGZpcm13YXJlLgorCQkgKi8KKwkJaWYgKChzc2lkX2lkeCAmJiBzc2lkX2ZpbHRlcikKKwkJICAgIHx8IG1lbWNtcChzY2FuX2NmZ19vdXQtPnNwZWNpZmljX2Jzc2lkLCAmemVyb19tYWMsCisJCQkgICAgICBzaXplb2YoemVyb19tYWMpKSkKKwkJCSpmaWx0ZXJlZF9zY2FuID0gdHJ1ZTsKKwl9IGVsc2UgeworCQlzY2FuX2NmZ19vdXQtPmJzc19tb2RlID0gKHU4KSBhZGFwdGVyLT5zY2FuX21vZGU7CisJCW51bV9wcm9iZXMgPSBhZGFwdGVyLT5zY2FuX3Byb2JlczsKKwl9CisKKwkvKgorCSAqICBJZiBhIHNwZWNpZmljIEJTU0lEIG9yIFNTSUQgaXMgdXNlZCwgdGhlIG51bWJlciBvZiBjaGFubmVscyBpbiB0aGUKKwkgKiAgc2NhbiBjb21tYW5kIHdpbGwgYmUgaW5jcmVhc2VkIHRvIHRoZSBhYnNvbHV0ZSBtYXhpbXVtLgorCSAqLworCWlmICgqZmlsdGVyZWRfc2NhbikKKwkJKm1heF9jaGFuX3Blcl9zY2FuID0gTVdJRklFWF9NQVhfQ0hBTk5FTFNfUEVSX1NQRUNJRklDX1NDQU47CisJZWxzZQorCQkqbWF4X2NoYW5fcGVyX3NjYW4gPSBNV0lGSUVYX0NIQU5ORUxTX1BFUl9TQ0FOX0NNRDsKKworCS8qIElmIHRoZSBpbnB1dCBjb25maWcgb3IgYWRhcHRlciBoYXMgdGhlIG51bWJlciBvZiBQcm9iZXMgc2V0LAorCSAgIGFkZCB0bHYgKi8KKwlpZiAobnVtX3Byb2JlcykgeworCisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogc2NhbjogbnVtX3Byb2JlcyA9ICVkXG4iLAorCQkJCQkJbnVtX3Byb2Jlcyk7CisKKwkJbnVtX3Byb2Jlc190bHYgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfbnVtX3Byb2JlcyAqKSB0bHZfcG9zOworCQludW1fcHJvYmVzX3Rsdi0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihUTFZfVFlQRV9OVU1QUk9CRVMpOworCQludW1fcHJvYmVzX3Rsdi0+aGVhZGVyLmxlbiA9CisJCQljcHVfdG9fbGUxNihzaXplb2YobnVtX3Byb2Jlc190bHYtPm51bV9wcm9iZXMpKTsKKwkJbnVtX3Byb2Jlc190bHYtPm51bV9wcm9iZXMgPSBjcHVfdG9fbGUxNigodTE2KSBudW1fcHJvYmVzKTsKKworCQl0bHZfcG9zICs9IHNpemVvZihudW1fcHJvYmVzX3Rsdi0+aGVhZGVyKSArCisJCQlsZTE2X3RvX2NwdShudW1fcHJvYmVzX3Rsdi0+aGVhZGVyLmxlbik7CisKKwl9CisKKwkvKiBBcHBlbmQgcmF0ZXMgdGx2ICovCisJbWVtc2V0KHJhdGVzLCAwLCBzaXplb2YocmF0ZXMpKTsKKworCXJhdGVzX3NpemUgPSBtd2lmaWV4X2dldF9zdXBwb3J0ZWRfcmF0ZXMocHJpdiwgcmF0ZXMpOworCisJcmF0ZXNfdGx2ID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX3JhdGVzX3BhcmFtX3NldCAqKSB0bHZfcG9zOworCXJhdGVzX3Rsdi0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihXTEFOX0VJRF9TVVBQX1JBVEVTKTsKKwlyYXRlc190bHYtPmhlYWRlci5sZW4gPSBjcHVfdG9fbGUxNigodTE2KSByYXRlc19zaXplKTsKKwltZW1jcHkocmF0ZXNfdGx2LT5yYXRlcywgcmF0ZXMsIHJhdGVzX3NpemUpOworCXRsdl9wb3MgKz0gc2l6ZW9mKHJhdGVzX3Rsdi0+aGVhZGVyKSArIHJhdGVzX3NpemU7CisKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IFNDQU5fQ01EOiBSYXRlcyBzaXplID0gJWRcbiIsIHJhdGVzX3NpemUpOworCisJaWYgKElTU1VQUF8xMU5FTkFCTEVEKHByaXYtPmFkYXB0ZXItPmZ3X2NhcF9pbmZvKQorCSAgICAmJiAocHJpdi0+YWRhcHRlci0+Y29uZmlnX2JhbmRzICYgQkFORF9HTgorCQl8fCBwcml2LT5hZGFwdGVyLT5jb25maWdfYmFuZHMgJiBCQU5EX0FOKSkgeworCQlodF9jYXAgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRjYXAgKikgdGx2X3BvczsKKwkJbWVtc2V0KGh0X2NhcCwgMCwgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2h0Y2FwKSk7CisJCWh0X2NhcC0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihXTEFOX0VJRF9IVF9DQVBBQklMSVRZKTsKKwkJaHRfY2FwLT5oZWFkZXIubGVuID0KKwkJCQljcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApKTsKKwkJcmFkaW9fdHlwZSA9CisJCQltd2lmaWV4X2JhbmRfdG9fcmFkaW9fdHlwZShwcml2LT5hZGFwdGVyLT5jb25maWdfYmFuZHMpOworCQltd2lmaWV4X2ZpbGxfY2FwX2luZm8ocHJpdiwgcmFkaW9fdHlwZSwgaHRfY2FwKTsKKwkJdGx2X3BvcyArPSBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaHRjYXApOworCX0KKworCS8qIEFwcGVuZCB2ZW5kb3Igc3BlY2lmaWMgSUUgVExWICovCisJbXdpZmlleF9jbWRfYXBwZW5kX3ZzaWVfdGx2KHByaXYsIE1XSUZJRVhfVlNJRV9NQVNLX1NDQU4sICZ0bHZfcG9zKTsKKworCS8qCisJICogU2V0IHRoZSBvdXRwdXQgZm9yIHRoZSBjaGFubmVsIFRMViB0byB0aGUgYWRkcmVzcyBpbiB0aGUgdGx2IGJ1ZmZlcgorCSAqICAgcGFzdCBhbnkgVExWcyB0aGF0IHdlcmUgYWRkZWQgaW4gdGhpcyBmdW5jdGlvbiAoU1NJRCwgbnVtX3Byb2JlcykuCisJICogICBDaGFubmVsIFRMVnMgd2lsbCBiZSBhZGRlZCBwYXN0IHRoaXMgZm9yIGVhY2ggc2NhbiBjb21tYW5kLAorCSAqICAgcHJlc2VydmluZyB0aGUgVExWcyB0aGF0IHdlcmUgcHJldmlvdXNseSBhZGRlZC4KKwkgKi8KKwkqY2hhbl9saXN0X291dCA9CisJCShzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19jaGFuX2xpc3RfcGFyYW1fc2V0ICopIHRsdl9wb3M7CisKKwlpZiAodXNlcl9zY2FuX2luICYmIHVzZXJfc2Nhbl9pbi0+Y2hhbl9saXN0WzBdLmNoYW5fbnVtYmVyKSB7CisKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBTY2FuOiBVc2luZyBzdXBwbGllZCBjaGFubmVsIGxpc3RcbiIpOworCisJCWZvciAoY2hhbl9pZHggPSAwOworCQkgICAgIGNoYW5faWR4IDwgTVdJRklFWF9VU0VSX1NDQU5fQ0hBTl9NQVgKKwkJICAgICAmJiB1c2VyX3NjYW5faW4tPmNoYW5fbGlzdFtjaGFuX2lkeF0uY2hhbl9udW1iZXI7CisJCSAgICAgY2hhbl9pZHgrKykgeworCisJCQljaGFubmVsID0gdXNlcl9zY2FuX2luLT5jaGFuX2xpc3RbY2hhbl9pZHhdLmNoYW5fbnVtYmVyOworCQkJKHNjYW5fY2hhbl9saXN0ICsgY2hhbl9pZHgpLT5jaGFuX251bWJlciA9IGNoYW5uZWw7CisKKwkJCXJhZGlvX3R5cGUgPQorCQkJCXVzZXJfc2Nhbl9pbi0+Y2hhbl9saXN0W2NoYW5faWR4XS5yYWRpb190eXBlOworCQkJKHNjYW5fY2hhbl9saXN0ICsgY2hhbl9pZHgpLT5yYWRpb190eXBlID0gcmFkaW9fdHlwZTsKKworCQkJc2Nhbl90eXBlID0gdXNlcl9zY2FuX2luLT5jaGFuX2xpc3RbY2hhbl9pZHhdLnNjYW5fdHlwZTsKKworCQkJaWYgKHNjYW5fdHlwZSA9PSBNV0lGSUVYX1NDQU5fVFlQRV9QQVNTSVZFKQorCQkJCShzY2FuX2NoYW5fbGlzdCArCisJCQkJIGNoYW5faWR4KS0+Y2hhbl9zY2FuX21vZGVfYml0bWFwCisJCQkJCXw9IE1XSUZJRVhfUEFTU0lWRV9TQ0FOOworCQkJZWxzZQorCQkJCShzY2FuX2NoYW5fbGlzdCArCisJCQkJIGNoYW5faWR4KS0+Y2hhbl9zY2FuX21vZGVfYml0bWFwCisJCQkJCSY9IH5NV0lGSUVYX1BBU1NJVkVfU0NBTjsKKworCQkJaWYgKHVzZXJfc2Nhbl9pbi0+Y2hhbl9saXN0W2NoYW5faWR4XS5zY2FuX3RpbWUpIHsKKwkJCQlzY2FuX2R1ciA9ICh1MTYpIHVzZXJfc2Nhbl9pbi0+CisJCQkJCWNoYW5fbGlzdFtjaGFuX2lkeF0uc2Nhbl90aW1lOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoc2Nhbl90eXBlID09IE1XSUZJRVhfU0NBTl9UWVBFX1BBU1NJVkUpCisJCQkJCXNjYW5fZHVyID0gYWRhcHRlci0+cGFzc2l2ZV9zY2FuX3RpbWU7CisJCQkJZWxzZSBpZiAoKmZpbHRlcmVkX3NjYW4pCisJCQkJCXNjYW5fZHVyID0gYWRhcHRlci0+c3BlY2lmaWNfc2Nhbl90aW1lOworCQkJCWVsc2UKKwkJCQkJc2Nhbl9kdXIgPSBhZGFwdGVyLT5hY3RpdmVfc2Nhbl90aW1lOworCQkJfQorCisJCQkoc2Nhbl9jaGFuX2xpc3QgKyBjaGFuX2lkeCktPm1pbl9zY2FuX3RpbWUgPQorCQkJCWNwdV90b19sZTE2KHNjYW5fZHVyKTsKKwkJCShzY2FuX2NoYW5fbGlzdCArIGNoYW5faWR4KS0+bWF4X3NjYW5fdGltZSA9CisJCQkJY3B1X3RvX2xlMTYoc2Nhbl9kdXIpOworCQl9CisKKwkJLyogQ2hlY2sgaWYgd2UgYXJlIG9ubHkgc2Nhbm5pbmcgdGhlIGN1cnJlbnQgY2hhbm5lbCAqLworCQlpZiAoKGNoYW5faWR4ID09IDEpCisJCSAgICAmJiAodXNlcl9zY2FuX2luLT5jaGFuX2xpc3RbMF0uY2hhbl9udW1iZXIKKwkJCT09IHByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5jaGFubmVsKSkgeworCQkJKnNjYW5fY3VycmVudF9vbmx5ID0gdHJ1ZTsKKwkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LAorCQkJCSJpbmZvOiBTY2FuOiBTY2FubmluZyBjdXJyZW50IGNoYW5uZWwgb25seVxuIik7CisJCX0KKworCX0gZWxzZSB7CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LAorCQkJCSJpbmZvOiBTY2FuOiBDcmVhdGluZyBmdWxsIHJlZ2lvbiBjaGFubmVsIGxpc3RcbiIpOworCQltd2lmaWV4X3NjYW5fY3JlYXRlX2NoYW5uZWxfbGlzdChwcml2LCB1c2VyX3NjYW5faW4sCisJCQkJCQkgc2Nhbl9jaGFuX2xpc3QsCisJCQkJCQkgKmZpbHRlcmVkX3NjYW4pOworCX0KK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW5zcGVjdHMgdGhlIHNjYW4gcmVzcG9uc2UgYnVmZmVyIGZvciBwb2ludGVycyB0bworICogZXhwZWN0ZWQgVExWcy4KKyAqCisgKiBUTFZzIGNhbiBiZSBpbmNsdWRlZCBhdCB0aGUgZW5kIG9mIHRoZSBzY2FuIHJlc3BvbnNlIEJTUyBpbmZvcm1hdGlvbi4KKyAqCisgKiBEYXRhIGluIHRoZSBidWZmZXIgaXMgcGFyc2VkIHBvaW50ZXJzIHRvIFRMVnMgdGhhdCBjYW4gcG90ZW50aWFsbHkKKyAqIGJlIHBhc3NlZCBiYWNrIGluIHRoZSByZXNwb25zZS4KKyAqLworc3RhdGljIHZvaWQKK213aWZpZXhfcmV0XzgwMl8xMV9zY2FuX2dldF90bHZfcHRycyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgICAgc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfZGF0YSAqdGx2LAorCQkJCSAgICAgdTMyIHRsdl9idWZfc2l6ZSwgdTMyIHJlcV90bHZfdHlwZSwKKwkJCQkgICAgIHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2RhdGEgKip0bHZfZGF0YSkKK3sKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19kYXRhICpjdXJyZW50X3RsdjsKKwl1MzIgdGx2X2J1Zl9sZWZ0OworCXUzMiB0bHZfdHlwZTsKKwl1MzIgdGx2X2xlbjsKKworCWN1cnJlbnRfdGx2ID0gdGx2OworCXRsdl9idWZfbGVmdCA9IHRsdl9idWZfc2l6ZTsKKwkqdGx2X2RhdGEgPSBOVUxMOworCisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBTQ0FOX1JFU1A6IHRsdl9idWZfc2l6ZSA9ICVkXG4iLAorCQkJCQkJdGx2X2J1Zl9zaXplKTsKKworCXdoaWxlICh0bHZfYnVmX2xlZnQgPj0gc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlcikpIHsKKworCQl0bHZfdHlwZSA9IGxlMTZfdG9fY3B1KGN1cnJlbnRfdGx2LT5oZWFkZXIudHlwZSk7CisJCXRsdl9sZW4gPSBsZTE2X3RvX2NwdShjdXJyZW50X3Rsdi0+aGVhZGVyLmxlbik7CisKKwkJaWYgKHNpemVvZih0bHYtPmhlYWRlcikgKyB0bHZfbGVuID4gdGx2X2J1Zl9sZWZ0KSB7CisJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIlNDQU5fUkVTUDogVExWIGJ1ZmZlciBjb3JydXB0XG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHJlcV90bHZfdHlwZSA9PSB0bHZfdHlwZSkgeworCQkJc3dpdGNoICh0bHZfdHlwZSkgeworCQkJY2FzZSBUTFZfVFlQRV9UU0ZUSU1FU1RBTVA6CisJCQkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBTQ0FOX1JFU1A6IFRTRiAiCisJCQkJCSJ0aW1lc3RhbXAgVExWLCBsZW4gPSAlZFxuIiwgdGx2X2xlbik7CisJCQkJKnRsdl9kYXRhID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2RhdGEgKikKKwkJCQkJY3VycmVudF90bHY7CisJCQkJYnJlYWs7CisJCQljYXNlIFRMVl9UWVBFX0NIQU5ORUxCQU5ETElTVDoKKwkJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IFNDQU5fUkVTUDogY2hhbm5lbCIKKwkJCQkJIiBiYW5kIGxpc3QgVExWLCBsZW4gPSAlZFxuIiwgdGx2X2xlbik7CisJCQkJKnRsdl9kYXRhID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2RhdGEgKikKKwkJCQkJY3VycmVudF90bHY7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWRldl9lcnIoYWRhcHRlci0+ZGV2LAorCQkJCQkiU0NBTl9SRVNQOiB1bmhhbmRsZWQgVExWID0gJWRcbiIsCisJCQkJICAgICAgIHRsdl90eXBlKTsKKwkJCQkvKiBHaXZlIHVwLCB0aGlzIHNlZW1zIGNvcnJ1cHRlZCAqLworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCisJCWlmICgqdGx2X2RhdGEpCisJCQlicmVhazsKKworCisJCXRsdl9idWZfbGVmdCAtPSAoc2l6ZW9mKHRsdi0+aGVhZGVyKSArIHRsdl9sZW4pOworCQljdXJyZW50X3RsdiA9CisJCQkoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfZGF0YSAqKSAoY3VycmVudF90bHYtPmRhdGEgKworCQkJCQkJCSAgdGx2X2xlbik7CisKKwl9CQkJLyogd2hpbGUgKi8KK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW50ZXJwcmV0cyBhIEJTUyBzY2FuIHJlc3BvbnNlIHJldHVybmVkIGZyb20gdGhlIGZpcm13YXJlLgorICoKKyAqIFRoZSB2YXJpb3VzIGZpeGVkIGZpZWxkcyBhbmQgSUVzIGFyZSBwYXJzZWQgYW5kIHBhc3NlZCBiYWNrIGZvciBhIEJTUworICogcHJvYmUgcmVzcG9uc2Ugb3IgYmVhY29uIGZyb20gc2NhbiBjb21tYW5kLiBJbmZvcm1hdGlvbiBpcyByZWNvcmRlZCBhcworICogbmVlZGVkIGluIHRoZSBzY2FuIHRhYmxlIGZvciB0aGF0IGVudHJ5LgorICoKKyAqIFRoZSBmb2xsb3dpbmcgSUUgdHlwZXMgYXJlIHJlY29nbml6ZWQgYW5kIHBhcnNlZCAtCisgKiAgICAgIC0gU1NJRAorICogICAgICAtIFN1cHBvcnRlZCByYXRlcworICogICAgICAtIEZIIHBhcmFtZXRlcnMgc2V0CisgKiAgICAgIC0gRFMgcGFyYW1ldGVycyBzZXQKKyAqICAgICAgLSBDRiBwYXJhbWV0ZXJzIHNldAorICogICAgICAtIElCU1MgcGFyYW1ldGVycyBzZXQKKyAqICAgICAgLSBFUlAgaW5mb3JtYXRpb24KKyAqICAgICAgLSBFeHRlbmRlZCBzdXBwb3J0ZWQgcmF0ZXMKKyAqICAgICAgLSBWZW5kb3Igc3BlY2lmaWMgKDIyMSkKKyAqICAgICAgLSBSU04gSUUKKyAqICAgICAgLSBXQVBJIElFCisgKiAgICAgIC0gSFQgY2FwYWJpbGl0eQorICogICAgICAtIEhUIG9wZXJhdGlvbgorICogICAgICAtIEJTUyBDb2V4aXN0ZW5jZSAyMC80MAorICogICAgICAtIEV4dGVuZGVkIGNhcGFiaWxpdHkKKyAqICAgICAgLSBPdmVybGFwcGluZyBCU1Mgc2NhbiBwYXJhbWV0ZXJzCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfaW50ZXJwcmV0X2Jzc19kZXNjX3dpdGhfaWUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgICBzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZW50cnksCisJCQkJICAgdTggKipiZWFjb25faW5mbywgdTMyICpieXRlc19sZWZ0KQoreworCWludCByZXQgPSAwOworCXU4IGVsZW1lbnRfaWQ7CisJc3RydWN0IGllZWVfdHlwZXNfZmhfcGFyYW1fc2V0ICpmaF9wYXJhbV9zZXQ7CisJc3RydWN0IGllZWVfdHlwZXNfZHNfcGFyYW1fc2V0ICpkc19wYXJhbV9zZXQ7CisJc3RydWN0IGllZWVfdHlwZXNfY2ZfcGFyYW1fc2V0ICpjZl9wYXJhbV9zZXQ7CisJc3RydWN0IGllZWVfdHlwZXNfaWJzc19wYXJhbV9zZXQgKmlic3NfcGFyYW1fc2V0OworCV9fbGUxNiBiZWFjb25faW50ZXJ2YWw7CisJX19sZTE2IGNhcGFiaWxpdGllczsKKwl1OCAqY3VycmVudF9wdHI7CisJdTggKnJhdGU7CisJdTggZWxlbWVudF9sZW47CisJdTE2IHRvdGFsX2llX2xlbjsKKwl1OCBieXRlc190b19jb3B5OworCXU4IHJhdGVfc2l6ZTsKKwl1MTYgYmVhY29uX3NpemU7CisJdTggZm91bmRfZGF0YV9yYXRlX2llOworCXUzMiBieXRlc19sZWZ0X2Zvcl9jdXJyZW50X2JlYWNvbjsKKwlzdHJ1Y3QgaWVlZV90eXBlc192ZW5kb3Jfc3BlY2lmaWMgKnZlbmRvcl9pZTsKKwljb25zdCB1OCB3cGFfb3VpWzRdID0geyAweDAwLCAweDUwLCAweGYyLCAweDAxIH07CisJY29uc3QgdTggd21tX291aVs0XSA9IHsgMHgwMCwgMHg1MCwgMHhmMiwgMHgwMiB9OworCisJZm91bmRfZGF0YV9yYXRlX2llID0gZmFsc2U7CisJcmF0ZV9zaXplID0gMDsKKwliZWFjb25fc2l6ZSA9IDA7CisKKwlpZiAoKmJ5dGVzX2xlZnQgPj0gc2l6ZW9mKGJlYWNvbl9zaXplKSkgeworCQkvKiBFeHRyYWN0ICYgY29udmVydCBiZWFjb24gc2l6ZSBmcm9tIHRoZSBjb21tYW5kIGJ1ZmZlciAqLworCQltZW1jcHkoJmJlYWNvbl9zaXplLCAqYmVhY29uX2luZm8sIHNpemVvZihiZWFjb25fc2l6ZSkpOworCQkqYnl0ZXNfbGVmdCAtPSBzaXplb2YoYmVhY29uX3NpemUpOworCQkqYmVhY29uX2luZm8gKz0gc2l6ZW9mKGJlYWNvbl9zaXplKTsKKwl9CisKKwlpZiAoIWJlYWNvbl9zaXplIHx8IGJlYWNvbl9zaXplID4gKmJ5dGVzX2xlZnQpIHsKKwkJKmJlYWNvbl9pbmZvICs9ICpieXRlc19sZWZ0OworCQkqYnl0ZXNfbGVmdCA9IDA7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBJbml0aWFsaXplIHRoZSBjdXJyZW50IHdvcmtpbmcgYmVhY29uIHBvaW50ZXIgZm9yIHRoaXMgQlNTCisJICAgaXRlcmF0aW9uICovCisJY3VycmVudF9wdHIgPSAqYmVhY29uX2luZm87CisKKwkvKiBBZHZhbmNlIHRoZSByZXR1cm4gYmVhY29uIHBvaW50ZXIgcGFzdCB0aGUgY3VycmVudCBiZWFjb24gKi8KKwkqYmVhY29uX2luZm8gKz0gYmVhY29uX3NpemU7CisJKmJ5dGVzX2xlZnQgLT0gYmVhY29uX3NpemU7CisKKwlieXRlc19sZWZ0X2Zvcl9jdXJyZW50X2JlYWNvbiA9IGJlYWNvbl9zaXplOworCisJbWVtY3B5KGJzc19lbnRyeS0+bWFjX2FkZHJlc3MsIGN1cnJlbnRfcHRyLCBFVEhfQUxFTik7CisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBJbnRlcnByZXRJRTogQVAgTUFDIEFkZHI6ICVwTVxuIiwKKwkJCQkJCWJzc19lbnRyeS0+bWFjX2FkZHJlc3MpOworCisJY3VycmVudF9wdHIgKz0gRVRIX0FMRU47CisJYnl0ZXNfbGVmdF9mb3JfY3VycmVudF9iZWFjb24gLT0gRVRIX0FMRU47CisKKwlpZiAoYnl0ZXNfbGVmdF9mb3JfY3VycmVudF9iZWFjb24gPCAxMikgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIkludGVycHJldElFOiBub3QgZW5vdWdoIGJ5dGVzIGxlZnRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyoKKwkgKiBOZXh0IDQgZmllbGRzIGFyZSBSU1NJLCB0aW1lIHN0YW1wLCBiZWFjb24gaW50ZXJ2YWwsCisJICogICBhbmQgY2FwYWJpbGl0eSBpbmZvcm1hdGlvbgorCSAqLworCisJLyogUlNTSSBpcyAxIGJ5dGUgbG9uZyAqLworCWJzc19lbnRyeS0+cnNzaSA9IChzMzIpICgqY3VycmVudF9wdHIpOworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogSW50ZXJwcmV0SUU6IFJTU0k9JTAyWFxuIiwgKmN1cnJlbnRfcHRyKTsKKwljdXJyZW50X3B0ciArPSAxOworCWJ5dGVzX2xlZnRfZm9yX2N1cnJlbnRfYmVhY29uIC09IDE7CisKKwkvKgorCSAqICBUaGUgUlNTSSBpcyBub3QgcGFydCBvZiB0aGUgYmVhY29uL3Byb2JlIHJlc3BvbnNlLiAgQWZ0ZXIgd2UgaGF2ZQorCSAqICAgIGFkdmFuY2VkIGN1cnJlbnRfcHRyIHBhc3QgdGhlIFJTU0kgZmllbGQsIHNhdmUgdGhlIHJlbWFpbmluZworCSAqICAgIGRhdGEgZm9yIHVzZSBhdCB0aGUgYXBwbGljYXRpb24gbGF5ZXIKKwkgKi8KKwlic3NfZW50cnktPmJlYWNvbl9idWYgPSBjdXJyZW50X3B0cjsKKwlic3NfZW50cnktPmJlYWNvbl9idWZfc2l6ZSA9IGJ5dGVzX2xlZnRfZm9yX2N1cnJlbnRfYmVhY29uOworCisJLyogVGltZSBzdGFtcCBpcyA4IGJ5dGVzIGxvbmcgKi8KKwltZW1jcHkoYnNzX2VudHJ5LT50aW1lX3N0YW1wLCBjdXJyZW50X3B0ciwgOCk7CisJY3VycmVudF9wdHIgKz0gODsKKwlieXRlc19sZWZ0X2Zvcl9jdXJyZW50X2JlYWNvbiAtPSA4OworCisJLyogQmVhY29uIGludGVydmFsIGlzIDIgYnl0ZXMgbG9uZyAqLworCW1lbWNweSgmYmVhY29uX2ludGVydmFsLCBjdXJyZW50X3B0ciwgMik7CisJYnNzX2VudHJ5LT5iZWFjb25fcGVyaW9kID0gbGUxNl90b19jcHUoYmVhY29uX2ludGVydmFsKTsKKwljdXJyZW50X3B0ciArPSAyOworCWJ5dGVzX2xlZnRfZm9yX2N1cnJlbnRfYmVhY29uIC09IDI7CisKKwkvKiBDYXBhYmlsaXR5IGluZm9ybWF0aW9uIGlzIDIgYnl0ZXMgbG9uZyAqLworCW1lbWNweSgmY2FwYWJpbGl0aWVzLCBjdXJyZW50X3B0ciwgMik7CisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBJbnRlcnByZXRJRTogY2FwYWJpbGl0aWVzPTB4JVhcbiIsCisJICAgICAgIGNhcGFiaWxpdGllcyk7CisJYnNzX2VudHJ5LT5jYXBfaW5mb19iaXRtYXAgPSBsZTE2X3RvX2NwdShjYXBhYmlsaXRpZXMpOworCWN1cnJlbnRfcHRyICs9IDI7CisJYnl0ZXNfbGVmdF9mb3JfY3VycmVudF9iZWFjb24gLT0gMjsKKworCS8qIFJlc3Qgb2YgdGhlIGN1cnJlbnQgYnVmZmVyIGFyZSBJRSdzICovCisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBJbnRlcnByZXRJRTogSUVMZW5ndGggZm9yIHRoaXMgQVAgPSAlZFxuIiwKKwkgICAgICAgYnl0ZXNfbGVmdF9mb3JfY3VycmVudF9iZWFjb24pOworCisJaWYgKGJzc19lbnRyeS0+Y2FwX2luZm9fYml0bWFwICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpIHsKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBJbnRlcnByZXRJRTogQVAgV0VQIGVuYWJsZWRcbiIpOworCQlic3NfZW50cnktPnByaXZhY3kgPSBNV0lGSUVYXzgwMl8xMV9QUklWX0ZJTFRFUl84MDIxWF9XRVA7CisJfSBlbHNlIHsKKwkJYnNzX2VudHJ5LT5wcml2YWN5ID0gTVdJRklFWF84MDJfMTFfUFJJVl9GSUxURVJfQUNDRVBUX0FMTDsKKwl9CisKKwlpZiAoYnNzX2VudHJ5LT5jYXBfaW5mb19iaXRtYXAgJiBXTEFOX0NBUEFCSUxJVFlfSUJTUykKKwkJYnNzX2VudHJ5LT5ic3NfbW9kZSA9IE5MODAyMTFfSUZUWVBFX0FESE9DOworCWVsc2UKKwkJYnNzX2VudHJ5LT5ic3NfbW9kZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CisKKworCS8qIFByb2Nlc3MgdmFyaWFibGUgSUUgKi8KKwl3aGlsZSAoYnl0ZXNfbGVmdF9mb3JfY3VycmVudF9iZWFjb24gPj0gMikgeworCQllbGVtZW50X2lkID0gKmN1cnJlbnRfcHRyOworCQllbGVtZW50X2xlbiA9ICooY3VycmVudF9wdHIgKyAxKTsKKwkJdG90YWxfaWVfbGVuID0gZWxlbWVudF9sZW4gKyBzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKTsKKworCQlpZiAoYnl0ZXNfbGVmdF9mb3JfY3VycmVudF9iZWFjb24gPCB0b3RhbF9pZV9sZW4pIHsKKwkJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiZXJyOiBJbnRlcnByZXRJRTogaW4gcHJvY2Vzc2luZyIKKwkJCQkiIElFLCBieXRlcyBsZWZ0IDwgSUUgbGVuZ3RoXG4iKTsKKwkJCWJ5dGVzX2xlZnRfZm9yX2N1cnJlbnRfYmVhY29uID0gMDsKKwkJCXJldCA9IC0xOworCQkJY29udGludWU7CisJCX0KKwkJc3dpdGNoIChlbGVtZW50X2lkKSB7CisJCWNhc2UgV0xBTl9FSURfU1NJRDoKKwkJCWJzc19lbnRyeS0+c3NpZC5zc2lkX2xlbiA9IGVsZW1lbnRfbGVuOworCQkJbWVtY3B5KGJzc19lbnRyeS0+c3NpZC5zc2lkLCAoY3VycmVudF9wdHIgKyAyKSwKKwkJCSAgICAgICBlbGVtZW50X2xlbik7CisJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IEludGVycHJldElFOiBzc2lkOiAlLTMyc1xuIiwKKwkJCSAgICAgICBic3NfZW50cnktPnNzaWQuc3NpZCk7CisJCQlicmVhazsKKworCQljYXNlIFdMQU5fRUlEX1NVUFBfUkFURVM6CisJCQltZW1jcHkoYnNzX2VudHJ5LT5kYXRhX3JhdGVzLCBjdXJyZW50X3B0ciArIDIsCisJCQkgICAgICAgZWxlbWVudF9sZW4pOworCQkJbWVtY3B5KGJzc19lbnRyeS0+c3VwcG9ydGVkX3JhdGVzLCBjdXJyZW50X3B0ciArIDIsCisJCQkgICAgICAgZWxlbWVudF9sZW4pOworCQkJcmF0ZV9zaXplID0gZWxlbWVudF9sZW47CisJCQlmb3VuZF9kYXRhX3JhdGVfaWUgPSB0cnVlOworCQkJYnJlYWs7CisKKwkJY2FzZSBXTEFOX0VJRF9GSF9QQVJBTVM6CisJCQlmaF9wYXJhbV9zZXQgPQorCQkJCShzdHJ1Y3QgaWVlZV90eXBlc19maF9wYXJhbV9zZXQgKikgY3VycmVudF9wdHI7CisJCQltZW1jcHkoJmJzc19lbnRyeS0+cGh5X3BhcmFtX3NldC5maF9wYXJhbV9zZXQsCisJCQkgICAgICAgZmhfcGFyYW1fc2V0LAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19maF9wYXJhbV9zZXQpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgV0xBTl9FSURfRFNfUEFSQU1TOgorCQkJZHNfcGFyYW1fc2V0ID0KKwkJCQkoc3RydWN0IGllZWVfdHlwZXNfZHNfcGFyYW1fc2V0ICopIGN1cnJlbnRfcHRyOworCisJCQlic3NfZW50cnktPmNoYW5uZWwgPSBkc19wYXJhbV9zZXQtPmN1cnJlbnRfY2hhbjsKKworCQkJbWVtY3B5KCZic3NfZW50cnktPnBoeV9wYXJhbV9zZXQuZHNfcGFyYW1fc2V0LAorCQkJICAgICAgIGRzX3BhcmFtX3NldCwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfZHNfcGFyYW1fc2V0KSk7CisJCQlicmVhazsKKworCQljYXNlIFdMQU5fRUlEX0NGX1BBUkFNUzoKKwkJCWNmX3BhcmFtX3NldCA9CisJCQkJKHN0cnVjdCBpZWVlX3R5cGVzX2NmX3BhcmFtX3NldCAqKSBjdXJyZW50X3B0cjsKKwkJCW1lbWNweSgmYnNzX2VudHJ5LT5zc19wYXJhbV9zZXQuY2ZfcGFyYW1fc2V0LAorCQkJICAgICAgIGNmX3BhcmFtX3NldCwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfY2ZfcGFyYW1fc2V0KSk7CisJCQlicmVhazsKKworCQljYXNlIFdMQU5fRUlEX0lCU1NfUEFSQU1TOgorCQkJaWJzc19wYXJhbV9zZXQgPQorCQkJCShzdHJ1Y3QgaWVlZV90eXBlc19pYnNzX3BhcmFtX3NldCAqKQorCQkJCWN1cnJlbnRfcHRyOworCQkJbWVtY3B5KCZic3NfZW50cnktPnNzX3BhcmFtX3NldC5pYnNzX3BhcmFtX3NldCwKKwkJCSAgICAgICBpYnNzX3BhcmFtX3NldCwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaWJzc19wYXJhbV9zZXQpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgV0xBTl9FSURfRVJQX0lORk86CisJCQlic3NfZW50cnktPmVycF9mbGFncyA9ICooY3VycmVudF9wdHIgKyAyKTsKKwkJCWJyZWFrOworCisJCWNhc2UgV0xBTl9FSURfRVhUX1NVUFBfUkFURVM6CisJCQkvKgorCQkJICogT25seSBwcm9jZXNzIGV4dGVuZGVkIHN1cHBvcnRlZCByYXRlCisJCQkgKiBpZiBkYXRhIHJhdGUgaXMgYWxyZWFkeSBmb3VuZC4KKwkJCSAqIERhdGEgcmF0ZSBJRSBzaG91bGQgY29tZSBiZWZvcmUKKwkJCSAqIGV4dGVuZGVkIHN1cHBvcnRlZCByYXRlIElFCisJCQkgKi8KKwkJCWlmIChmb3VuZF9kYXRhX3JhdGVfaWUpIHsKKwkJCQlpZiAoKGVsZW1lbnRfbGVuICsgcmF0ZV9zaXplKSA+CisJCQkJICAgIE1XSUZJRVhfU1VQUE9SVEVEX1JBVEVTKQorCQkJCQlieXRlc190b19jb3B5ID0KKwkJCQkJCShNV0lGSUVYX1NVUFBPUlRFRF9SQVRFUyAtCisJCQkJCQkgcmF0ZV9zaXplKTsKKwkJCQllbHNlCisJCQkJCWJ5dGVzX3RvX2NvcHkgPSBlbGVtZW50X2xlbjsKKworCQkJCXJhdGUgPSAodTggKikgYnNzX2VudHJ5LT5kYXRhX3JhdGVzOworCQkJCXJhdGUgKz0gcmF0ZV9zaXplOworCQkJCW1lbWNweShyYXRlLCBjdXJyZW50X3B0ciArIDIsIGJ5dGVzX3RvX2NvcHkpOworCisJCQkJcmF0ZSA9ICh1OCAqKSBic3NfZW50cnktPnN1cHBvcnRlZF9yYXRlczsKKwkJCQlyYXRlICs9IHJhdGVfc2l6ZTsKKwkJCQltZW1jcHkocmF0ZSwgY3VycmVudF9wdHIgKyAyLCBieXRlc190b19jb3B5KTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgV0xBTl9FSURfVkVORE9SX1NQRUNJRklDOgorCQkJdmVuZG9yX2llID0gKHN0cnVjdCBpZWVlX3R5cGVzX3ZlbmRvcl9zcGVjaWZpYyAqKQorCQkJCQljdXJyZW50X3B0cjsKKworCQkJaWYgKCFtZW1jbXAKKwkJCSAgICAodmVuZG9yX2llLT52ZW5kX2hkci5vdWksIHdwYV9vdWksCisJCQkgICAgIHNpemVvZih3cGFfb3VpKSkpIHsKKwkJCQlic3NfZW50cnktPmJjbl93cGFfaWUgPQorCQkJCQkoc3RydWN0IGllZWVfdHlwZXNfdmVuZG9yX3NwZWNpZmljICopCisJCQkJCWN1cnJlbnRfcHRyOworCQkJCWJzc19lbnRyeS0+d3BhX29mZnNldCA9ICh1MTYpIChjdXJyZW50X3B0ciAtCisJCQkJCQkJYnNzX2VudHJ5LT5iZWFjb25fYnVmKTsKKwkJCX0gZWxzZSBpZiAoIW1lbWNtcCh2ZW5kb3JfaWUtPnZlbmRfaGRyLm91aSwgd21tX291aSwKKwkJCQkgICAgc2l6ZW9mKHdtbV9vdWkpKSkgeworCQkJCWlmICh0b3RhbF9pZV9sZW4gPT0KKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBpZWVlX3R5cGVzX3dtbV9wYXJhbWV0ZXIpCisJCQkJICAgIHx8IHRvdGFsX2llX2xlbiA9PQorCQkJCSAgICBzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfd21tX2luZm8pKQorCQkJCQkvKgorCQkJCQkgKiBPbmx5IGFjY2VwdCBhbmQgY29weSB0aGUgV01NIElFIGlmCisJCQkJCSAqIGl0IG1hdGNoZXMgdGhlIHNpemUgZXhwZWN0ZWQgZm9yIHRoZQorCQkJCQkgKiBXTU0gSW5mbyBJRSBvciB0aGUgV01NIFBhcmFtZXRlciBJRS4KKwkJCQkJICovCisJCQkJCW1lbWNweSgodTggKikgJmJzc19lbnRyeS0+d21tX2llLAorCQkJCQkgICAgICAgY3VycmVudF9wdHIsIHRvdGFsX2llX2xlbik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0VJRF9SU046CisJCQlic3NfZW50cnktPmJjbl9yc25faWUgPQorCQkJCShzdHJ1Y3QgaWVlZV90eXBlc19nZW5lcmljICopIGN1cnJlbnRfcHRyOworCQkJYnNzX2VudHJ5LT5yc25fb2Zmc2V0ID0gKHUxNikgKGN1cnJlbnRfcHRyIC0KKwkJCQkJCQlic3NfZW50cnktPmJlYWNvbl9idWYpOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9FSURfQlNTX0FDX0FDQ0VTU19ERUxBWToKKwkJCWJzc19lbnRyeS0+YmNuX3dhcGlfaWUgPQorCQkJCShzdHJ1Y3QgaWVlZV90eXBlc19nZW5lcmljICopIGN1cnJlbnRfcHRyOworCQkJYnNzX2VudHJ5LT53YXBpX29mZnNldCA9ICh1MTYpIChjdXJyZW50X3B0ciAtCisJCQkJCQkJYnNzX2VudHJ5LT5iZWFjb25fYnVmKTsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRUlEX0hUX0NBUEFCSUxJVFk6CisJCQlic3NfZW50cnktPmJjbl9odF9jYXAgPSAoc3RydWN0IGllZWU4MDIxMV9odF9jYXAgKikKKwkJCQkJKGN1cnJlbnRfcHRyICsKKwkJCQkJc2l6ZW9mKHN0cnVjdCBpZWVlX3R5cGVzX2hlYWRlcikpOworCQkJYnNzX2VudHJ5LT5odF9jYXBfb2Zmc2V0ID0gKHUxNikgKGN1cnJlbnRfcHRyICsKKwkJCQkJc2l6ZW9mKHN0cnVjdCBpZWVlX3R5cGVzX2hlYWRlcikgLQorCQkJCQlic3NfZW50cnktPmJlYWNvbl9idWYpOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9FSURfSFRfSU5GT1JNQVRJT046CisJCQlic3NfZW50cnktPmJjbl9odF9pbmZvID0gKHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAqKQorCQkJCQkoY3VycmVudF9wdHIgKworCQkJCQlzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKSk7CisJCQlic3NfZW50cnktPmh0X2luZm9fb2Zmc2V0ID0gKHUxNikgKGN1cnJlbnRfcHRyICsKKwkJCQkJc2l6ZW9mKHN0cnVjdCBpZWVlX3R5cGVzX2hlYWRlcikgLQorCQkJCQlic3NfZW50cnktPmJlYWNvbl9idWYpOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9FSURfQlNTX0NPRVhfMjA0MDoKKwkJCWJzc19lbnRyeS0+YmNuX2Jzc19jb18yMDQwID0gKHU4ICopIChjdXJyZW50X3B0ciArCisJCQkJCXNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpKTsKKwkJCWJzc19lbnRyeS0+YnNzX2NvXzIwNDBfb2Zmc2V0ID0gKHUxNikgKGN1cnJlbnRfcHRyICsKKwkJCQkJc2l6ZW9mKHN0cnVjdCBpZWVlX3R5cGVzX2hlYWRlcikgLQorCQkJCQkJYnNzX2VudHJ5LT5iZWFjb25fYnVmKTsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRUlEX0VYVF9DQVBBQklMSVRZOgorCQkJYnNzX2VudHJ5LT5iY25fZXh0X2NhcCA9ICh1OCAqKSAoY3VycmVudF9wdHIgKworCQkJCQlzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKSk7CisJCQlic3NfZW50cnktPmV4dF9jYXBfb2Zmc2V0ID0gKHUxNikgKGN1cnJlbnRfcHRyICsKKwkJCQkJc2l6ZW9mKHN0cnVjdCBpZWVlX3R5cGVzX2hlYWRlcikgLQorCQkJCQlic3NfZW50cnktPmJlYWNvbl9idWYpOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9FSURfT1ZFUkxBUF9CU1NfU0NBTl9QQVJBTToKKwkJCWJzc19lbnRyeS0+YmNuX29ic3Nfc2NhbiA9CisJCQkJKHN0cnVjdCBpZWVlX3R5cGVzX29ic3Nfc2Nhbl9wYXJhbSAqKQorCQkJCWN1cnJlbnRfcHRyOworCQkJYnNzX2VudHJ5LT5vdmVybGFwX2Jzc19vZmZzZXQgPSAodTE2KSAoY3VycmVudF9wdHIgLQorCQkJCQkJCWJzc19lbnRyeS0+YmVhY29uX2J1Zik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJY3VycmVudF9wdHIgKz0gZWxlbWVudF9sZW4gKyAyOworCisJCS8qIE5lZWQgdG8gYWNjb3VudCBmb3IgSUUgSUQgYW5kIElFIExlbiAqLworCQlieXRlc19sZWZ0X2Zvcl9jdXJyZW50X2JlYWNvbiAtPSAoZWxlbWVudF9sZW4gKyAyKTsKKworCX0JLyogd2hpbGUgKGJ5dGVzX2xlZnRfZm9yX2N1cnJlbnRfYmVhY29uID4gMikgKi8KKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBhZGp1c3RzIHRoZSBwb2ludGVycyB1c2VkIGluIGJlYWNvbiBidWZmZXJzIHRvIHJlZmxlY3QKKyAqIHNoaWZ0cy4KKyAqCisgKiBUaGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgYmVhY29uIGJ1ZmZlcnMgaXMgb2YgZml4ZWQgc2l6ZXMgd2hlcmUgYWxsIHRoZQorICogc2F2ZWQgYmVhY29ucyBtdXN0IGJlIHN0b3JlZC4gTmV3IGJlYWNvbnMgYXJlIGFkZGVkIGluIHRoZSBmcmVlIHBvcnRpb24KKyAqIG9mIHRoaXMgbWVtb3J5LCBzcGFjZSBwZXJtaXR0aW5nOyB3aGlsZSBkdXBsaWNhdGUgYmVhY29uIGJ1ZmZlcnMgYXJlCisgKiBwbGFjZWQgYXQgdGhlIHNhbWUgc3RhcnQgbG9jYXRpb24uIEhvd2V2ZXIsIHNpbmNlIGR1cGxpY2F0ZSBiZWFjb24KKyAqIGJ1ZmZlcnMgbWF5IG5vdCBtYXRjaCB0aGUgc2l6ZSBvZiB0aGUgb2xkIG9uZSwgYWxsIHRoZSBmb2xsb3dpbmcgYnVmZmVycworICogaW4gdGhlIG1lbW9yeSBtdXN0IGJlIHNoaWZ0ZWQgdG8gZWl0aGVyIG1ha2Ugc3BhY2UsIG9yIHRvIGZpbGwgdXAgZnJlZWQKKyAqIHVwIHNwYWNlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB1cGRhdGUgdGhlIGJlYWNvbiBidWZmZXIgcG9pbnRlcnMgdGhhdCBhcmUgcGFzdAorICogYW4gZXhpc3RpbmcgYmVhY29uIGJ1ZmZlciB0aGF0IGlzIHVwZGF0ZWQgd2l0aCBhIG5ldyBvbmUgb2YgZGlmZmVyZW50CisgKiBzaXplLiBUaGUgcG9pbnRlcnMgYXJlIHNoaWZ0ZWQgYnkgYSBmaXhlZCBhbW91bnQsIGVpdGhlciBmb3J3YXJkIG9yCisgKiBiYWNrd2FyZC4KKyAqCisgKiB0aGUgZm9sbG93aW5nIHBvaW50ZXJzIGluIGV2ZXJ5IGFmZmVjdGVkIGJlYWNvbiBidWZmZXJzIGFyZSBjaGFuZ2VkLCBpZgorICogcHJlc2VudCAtCisgKiAgICAgIC0gV1BBIElFIHBvaW50ZXIKKyAqICAgICAgLSBSU04gSUUgcG9pbnRlcgorICogICAgICAtIFdBUEkgSUUgcG9pbnRlcgorICogICAgICAtIEhUIGNhcGFiaWxpdHkgSUUgcG9pbnRlcgorICogICAgICAtIEhUIGluZm9ybWF0aW9uIElFIHBvaW50ZXIKKyAqICAgICAgLSBCU1MgY29leGlzdGVuY2UgMjAvNDAgSUUgcG9pbnRlcgorICogICAgICAtIEV4dGVuZGVkIGNhcGFiaWxpdHkgSUUgcG9pbnRlcgorICogICAgICAtIE92ZXJsYXBwaW5nIEJTUyBzY2FuIHBhcmFtZXRlciBJRSBwb2ludGVyCisgKi8KK3N0YXRpYyB2b2lkCittd2lmaWV4X2FkanVzdF9iZWFjb25fYnVmZmVyX3B0cnMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggYWR2YW5jZSwKKwkJCQkgIHU4ICpiY25fc3RvcmUsIHUzMiByZW1fYmNuX3NpemUsCisJCQkJICB1MzIgbnVtX29mX2VudCkKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwl1MzIgYWRqX2lkeDsKKwlmb3IgKGFkal9pZHggPSAwOyBhZGpfaWR4IDwgbnVtX29mX2VudDsgYWRqX2lkeCsrKSB7CisJCWlmIChhZGFwdGVyLT5zY2FuX3RhYmxlW2Fkal9pZHhdLmJlYWNvbl9idWYgPiBiY25fc3RvcmUpIHsKKworCQkJaWYgKGFkdmFuY2UpCisJCQkJYWRhcHRlci0+c2Nhbl90YWJsZVthZGpfaWR4XS5iZWFjb25fYnVmICs9CisJCQkJCXJlbV9iY25fc2l6ZTsKKwkJCWVsc2UKKwkJCQlhZGFwdGVyLT5zY2FuX3RhYmxlW2Fkal9pZHhdLmJlYWNvbl9idWYgLT0KKwkJCQkJcmVtX2Jjbl9zaXplOworCisJCQlpZiAoYWRhcHRlci0+c2Nhbl90YWJsZVthZGpfaWR4XS5iY25fd3BhX2llKQorCQkJCWFkYXB0ZXItPnNjYW5fdGFibGVbYWRqX2lkeF0uYmNuX3dwYV9pZSA9CisJCQkJKHN0cnVjdCBpZWVlX3R5cGVzX3ZlbmRvcl9zcGVjaWZpYyAqKQorCQkJCShhZGFwdGVyLT5zY2FuX3RhYmxlW2Fkal9pZHhdLmJlYWNvbl9idWYgKworCQkJCSBhZGFwdGVyLT5zY2FuX3RhYmxlW2Fkal9pZHhdLndwYV9vZmZzZXQpOworCQkJaWYgKGFkYXB0ZXItPnNjYW5fdGFibGVbYWRqX2lkeF0uYmNuX3Jzbl9pZSkKKwkJCQlhZGFwdGVyLT5zY2FuX3RhYmxlW2Fkal9pZHhdLmJjbl9yc25faWUgPQorCQkJCShzdHJ1Y3QgaWVlZV90eXBlc19nZW5lcmljICopCisJCQkJKGFkYXB0ZXItPnNjYW5fdGFibGVbYWRqX2lkeF0uYmVhY29uX2J1ZiArCisJCQkJIGFkYXB0ZXItPnNjYW5fdGFibGVbYWRqX2lkeF0ucnNuX29mZnNldCk7CisJCQlpZiAoYWRhcHRlci0+c2Nhbl90YWJsZVthZGpfaWR4XS5iY25fd2FwaV9pZSkKKwkJCQlhZGFwdGVyLT5zY2FuX3RhYmxlW2Fkal9pZHhdLmJjbl93YXBpX2llID0KKwkJCQkoc3RydWN0IGllZWVfdHlwZXNfZ2VuZXJpYyAqKQorCQkJCShhZGFwdGVyLT5zY2FuX3RhYmxlW2Fkal9pZHhdLmJlYWNvbl9idWYgKworCQkJCSBhZGFwdGVyLT5zY2FuX3RhYmxlW2Fkal9pZHhdLndhcGlfb2Zmc2V0KTsKKwkJCWlmIChhZGFwdGVyLT5zY2FuX3RhYmxlW2Fkal9pZHhdLmJjbl9odF9jYXApCisJCQkJYWRhcHRlci0+c2Nhbl90YWJsZVthZGpfaWR4XS5iY25faHRfY2FwID0KKwkJCQkoc3RydWN0IGllZWU4MDIxMV9odF9jYXAgKikKKwkJCQkoYWRhcHRlci0+c2Nhbl90YWJsZVthZGpfaWR4XS5iZWFjb25fYnVmICsKKwkJCQkgYWRhcHRlci0+c2Nhbl90YWJsZVthZGpfaWR4XS5odF9jYXBfb2Zmc2V0KTsKKworCQkJaWYgKGFkYXB0ZXItPnNjYW5fdGFibGVbYWRqX2lkeF0uYmNuX2h0X2luZm8pCisJCQkJYWRhcHRlci0+c2Nhbl90YWJsZVthZGpfaWR4XS5iY25faHRfaW5mbyA9CisJCQkJKHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAqKQorCQkJCShhZGFwdGVyLT5zY2FuX3RhYmxlW2Fkal9pZHhdLmJlYWNvbl9idWYgKworCQkJCSBhZGFwdGVyLT5zY2FuX3RhYmxlW2Fkal9pZHhdLmh0X2luZm9fb2Zmc2V0KTsKKwkJCWlmIChhZGFwdGVyLT5zY2FuX3RhYmxlW2Fkal9pZHhdLmJjbl9ic3NfY29fMjA0MCkKKwkJCQlhZGFwdGVyLT5zY2FuX3RhYmxlW2Fkal9pZHhdLmJjbl9ic3NfY29fMjA0MCA9CisJCQkJKHU4ICopCisJCQkJKGFkYXB0ZXItPnNjYW5fdGFibGVbYWRqX2lkeF0uYmVhY29uX2J1ZiArCisJCQkgICAgICAgYWRhcHRlci0+c2Nhbl90YWJsZVthZGpfaWR4XS5ic3NfY29fMjA0MF9vZmZzZXQpOworCQkJaWYgKGFkYXB0ZXItPnNjYW5fdGFibGVbYWRqX2lkeF0uYmNuX2V4dF9jYXApCisJCQkJYWRhcHRlci0+c2Nhbl90YWJsZVthZGpfaWR4XS5iY25fZXh0X2NhcCA9CisJCQkJKHU4ICopCisJCQkJKGFkYXB0ZXItPnNjYW5fdGFibGVbYWRqX2lkeF0uYmVhY29uX2J1ZiArCisJCQkJIGFkYXB0ZXItPnNjYW5fdGFibGVbYWRqX2lkeF0uZXh0X2NhcF9vZmZzZXQpOworCQkJaWYgKGFkYXB0ZXItPnNjYW5fdGFibGVbYWRqX2lkeF0uYmNuX29ic3Nfc2NhbikKKwkJCQlhZGFwdGVyLT5zY2FuX3RhYmxlW2Fkal9pZHhdLmJjbl9vYnNzX3NjYW4gPQorCQkJCShzdHJ1Y3QgaWVlZV90eXBlc19vYnNzX3NjYW5fcGFyYW0gKikKKwkJCQkoYWRhcHRlci0+c2Nhbl90YWJsZVthZGpfaWR4XS5iZWFjb25fYnVmICsKKwkJCSAgICAgICBhZGFwdGVyLT5zY2FuX3RhYmxlW2Fkal9pZHhdLm92ZXJsYXBfYnNzX29mZnNldCk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHVwZGF0ZXMgdGhlIHBvaW50ZXJzIHVzZWQgaW4gYmVhY29uIGJ1ZmZlciBmb3IgZ2l2ZW4gYnNzCisgKiBkZXNjcmlwdG9yIHRvIHJlZmxlY3Qgc2hpZnRzCisgKgorICogRm9sbG93aW5nIHBvaW50ZXJzIGFyZSB1cGRhdGVkCisgKiAgICAgIC0gV1BBIElFIHBvaW50ZXIKKyAqICAgICAgLSBSU04gSUUgcG9pbnRlcgorICogICAgICAtIFdBUEkgSUUgcG9pbnRlcgorICogICAgICAtIEhUIGNhcGFiaWxpdHkgSUUgcG9pbnRlcgorICogICAgICAtIEhUIGluZm9ybWF0aW9uIElFIHBvaW50ZXIKKyAqICAgICAgLSBCU1MgY29leGlzdGVuY2UgMjAvNDAgSUUgcG9pbnRlcgorICogICAgICAtIEV4dGVuZGVkIGNhcGFiaWxpdHkgSUUgcG9pbnRlcgorICogICAgICAtIE92ZXJsYXBwaW5nIEJTUyBzY2FuIHBhcmFtZXRlciBJRSBwb2ludGVyCisgKi8KK3N0YXRpYyB2b2lkCittd2lmaWV4X3VwZGF0ZV9iZWFjb25fYnVmZmVyX3B0cnMoc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYmVhY29uKQoreworCWlmIChiZWFjb24tPmJjbl93cGFfaWUpCisJCWJlYWNvbi0+YmNuX3dwYV9pZSA9IChzdHJ1Y3QgaWVlZV90eXBlc192ZW5kb3Jfc3BlY2lmaWMgKikKKwkJCShiZWFjb24tPmJlYWNvbl9idWYgKyBiZWFjb24tPndwYV9vZmZzZXQpOworCWlmIChiZWFjb24tPmJjbl9yc25faWUpCisJCWJlYWNvbi0+YmNuX3Jzbl9pZSA9IChzdHJ1Y3QgaWVlZV90eXBlc19nZW5lcmljICopCisJCQkoYmVhY29uLT5iZWFjb25fYnVmICsgYmVhY29uLT5yc25fb2Zmc2V0KTsKKwlpZiAoYmVhY29uLT5iY25fd2FwaV9pZSkKKwkJYmVhY29uLT5iY25fd2FwaV9pZSA9IChzdHJ1Y3QgaWVlZV90eXBlc19nZW5lcmljICopCisJCQkoYmVhY29uLT5iZWFjb25fYnVmICsgYmVhY29uLT53YXBpX29mZnNldCk7CisJaWYgKGJlYWNvbi0+YmNuX2h0X2NhcCkKKwkJYmVhY29uLT5iY25faHRfY2FwID0gKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwICopCisJCQkoYmVhY29uLT5iZWFjb25fYnVmICsgYmVhY29uLT5odF9jYXBfb2Zmc2V0KTsKKwlpZiAoYmVhY29uLT5iY25faHRfaW5mbykKKwkJYmVhY29uLT5iY25faHRfaW5mbyA9IChzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKikKKwkJCShiZWFjb24tPmJlYWNvbl9idWYgKyBiZWFjb24tPmh0X2luZm9fb2Zmc2V0KTsKKwlpZiAoYmVhY29uLT5iY25fYnNzX2NvXzIwNDApCisJCWJlYWNvbi0+YmNuX2Jzc19jb18yMDQwID0gKHU4ICopIChiZWFjb24tPmJlYWNvbl9idWYgKworCQkJYmVhY29uLT5ic3NfY29fMjA0MF9vZmZzZXQpOworCWlmIChiZWFjb24tPmJjbl9leHRfY2FwKQorCQliZWFjb24tPmJjbl9leHRfY2FwID0gKHU4ICopIChiZWFjb24tPmJlYWNvbl9idWYgKworCQkJYmVhY29uLT5leHRfY2FwX29mZnNldCk7CisJaWYgKGJlYWNvbi0+YmNuX29ic3Nfc2NhbikKKwkJYmVhY29uLT5iY25fb2Jzc19zY2FuID0gKHN0cnVjdCBpZWVlX3R5cGVzX29ic3Nfc2Nhbl9wYXJhbSAqKQorCQkJKGJlYWNvbi0+YmVhY29uX2J1ZiArIGJlYWNvbi0+b3ZlcmxhcF9ic3Nfb2Zmc2V0KTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc3RvcmVzIGEgYmVhY29uIG9yIHByb2JlIHJlc3BvbnNlIGZvciBhIEJTUyByZXR1cm5lZAorICogaW4gdGhlIHNjYW4uCisgKgorICogVGhpcyBzdG9yZXMgYSBuZXcgc2NhbiByZXNwb25zZSBvciBhbiB1cGRhdGUgZm9yIGEgcHJldmlvdXMgc2NhbiByZXNwb25zZS4KKyAqIE5ldyBlbnRyaWVzIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhleSBkbyBub3QgZXhjZWVkIHRoZSB0b3RhbCBhbW91bnQgb2YKKyAqIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZSB0YWJsZS4KKyAqCisgKiBSZXBsYWNlbWVudCBlbnRyaWVzIG5lZWQgdG8gdGFrZSBpbnRvIGNvbnNpZGVyYXRpb24gdGhlIGFtb3VudCBvZiBzcGFjZQorICogY3VycmVudGx5IGFsbG9jYXRlZCBmb3IgdGhlIGJlYWNvbi9wcm9iZSByZXNwb25zZSBhbmQgYWRqdXN0IHRoZSBlbnRyeQorICogYXMgbmVlZGVkLgorICoKKyAqIEEgc21hbGwgYW1vdW50IG9mIGV4dHJhIHBhZCAoU0NBTl9CRUFDT05fRU5UUllfUEFEKSBpcyBnZW5lcmFsbHkgcmVzZXJ2ZWQKKyAqIGZvciBhbiBlbnRyeSBpbiBjYXNlIGl0IGlzIGEgYmVhY29uIHNpbmNlIGEgcHJvYmUgcmVzcG9uc2UgZm9yIHRoZQorICogbmV0d29yayB3aWxsIGJ5IGxhcmdlciBwZXIgdGhlIHN0YW5kYXJkLiAgVGhpcyBoZWxwcyB0byByZWR1Y2UgdGhlCisgKiBhbW91bnQgb2YgbWVtb3J5IGNvcHlpbmcgdG8gZml0IGEgbmV3IHByb2JlIHJlc3BvbnNlIGludG8gYW4gZW50cnkKKyAqIGFscmVhZHkgb2NjdXBpZWQgYnkgYSBuZXR3b3JrJ3MgcHJldmlvdXNseSBzdG9yZWQgYmVhY29uLgorICovCitzdGF0aWMgdm9pZAorbXdpZmlleF9yZXRfODAyXzExX3NjYW5fc3RvcmVfYmVhY29uKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJICAgICB1MzIgYmVhY29uX2lkeCwgdTMyIG51bV9vZl9lbnQsCisJCQkJICAgICBzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpuZXdfYmVhY29uKQoreworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXU4ICpiY25fc3RvcmU7CisJdTMyIG5ld19iY25fc2l6ZTsKKwl1MzIgb2xkX2Jjbl9zaXplOworCXUzMiBiY25fc3BhY2U7CisKKwlpZiAoYWRhcHRlci0+c2Nhbl90YWJsZVtiZWFjb25faWR4XS5iZWFjb25fYnVmKSB7CisKKwkJbmV3X2Jjbl9zaXplID0gbmV3X2JlYWNvbi0+YmVhY29uX2J1Zl9zaXplOworCQlvbGRfYmNuX3NpemUgPSBhZGFwdGVyLT5zY2FuX3RhYmxlW2JlYWNvbl9pZHhdLmJlYWNvbl9idWZfc2l6ZTsKKwkJYmNuX3NwYWNlID0gYWRhcHRlci0+c2Nhbl90YWJsZVtiZWFjb25faWR4XS5iZWFjb25fYnVmX3NpemVfbWF4OworCQliY25fc3RvcmUgPSBhZGFwdGVyLT5zY2FuX3RhYmxlW2JlYWNvbl9pZHhdLmJlYWNvbl9idWY7CisKKwkJLyogU2V0IHRoZSBtYXggdG8gYmUgdGhlIHNhbWUgYXMgY3VycmVudCBlbnRyeSB1bmxlc3MgY2hhbmdlZAorCQkgICBiZWxvdyAqLworCQluZXdfYmVhY29uLT5iZWFjb25fYnVmX3NpemVfbWF4ID0gYmNuX3NwYWNlOworCQlpZiAobmV3X2Jjbl9zaXplID09IG9sZF9iY25fc2l6ZSkgeworCQkJLyoKKwkJCSAqIEJlYWNvbiBpcyB0aGUgc2FtZSBzaXplIGFzIHRoZSBwcmV2aW91cyBlbnRyeS4KKwkJCSAqICAgUmVwbGFjZSB0aGUgcHJldmlvdXMgY29udGVudHMgd2l0aCB0aGUgc2NhbiByZXN1bHQKKwkJCSAqLworCQkJbWVtY3B5KGJjbl9zdG9yZSwgbmV3X2JlYWNvbi0+YmVhY29uX2J1ZiwKKwkJCSAgICAgICBuZXdfYmVhY29uLT5iZWFjb25fYnVmX3NpemUpOworCisJCX0gZWxzZSBpZiAobmV3X2Jjbl9zaXplIDw9IGJjbl9zcGFjZSkgeworCQkJLyoKKwkJCSAqIE5ldyBiZWFjb24gc2l6ZSB3aWxsIGZpdCBpbiB0aGUgYW1vdW50IG9mIHNwYWNlCisJCQkgKiAgIHdlIGhhdmUgcHJldmlvdXNseSBhbGxvY2F0ZWQgZm9yIGl0CisJCQkgKi8KKworCQkJLyogQ29weSB0aGUgbmV3IGJlYWNvbiBidWZmZXIgZW50cnkgb3ZlciB0aGUgb2xkIG9uZSAqLworCQkJbWVtY3B5KGJjbl9zdG9yZSwgbmV3X2JlYWNvbi0+YmVhY29uX2J1ZiwgbmV3X2Jjbl9zaXplKTsKKworCQkJLyoKKwkJCSAqICBJZiB0aGUgb2xkIGJlYWNvbiBzaXplIHdhcyBsZXNzIHRoYW4gdGhlIG1heGltdW0KKwkJCSAqICB3ZSBoYWQgYWxsb3RlZCBmb3IgdGhlIGVudHJ5LCBhbmQgdGhlIG5ldyBlbnRyeQorCQkJICogIGlzIGV2ZW4gc21hbGxlciwgcmVzZXQgdGhlIG1heCBzaXplIHRvIHRoZSBvbGQKKwkJCSAqICBiZWFjb24gZW50cnkgYW5kIGNvbXByZXNzIHRoZSBzdG9yYWdlIHNwYWNlCisJCQkgKiAgKGxlYXZpbmcgYSBuZXcgcGFkIHNwYWNlIG9mIChvbGRfYmNuX3NpemUgLQorCQkJICogIG5ld19iY25fc2l6ZSkuCisJCQkgKi8KKwkJCWlmIChvbGRfYmNuX3NpemUgPCBiY25fc3BhY2UKKwkJCSAgICAmJiBuZXdfYmNuX3NpemUgPD0gb2xkX2Jjbl9zaXplKSB7CisJCQkJLyoKKwkJCQkgKiBPbGQgQmVhY29uIHNpemUgaXMgc21hbGxlciB0aGFuIHRoZSBhbGxvdGVkCisJCQkJICogc3RvcmFnZSBzaXplLiBTaHJpbmsgdGhlIGFsbG90ZWQgc3RvcmFnZQorCQkJCSAqIHNwYWNlLgorCQkJCSAqLworCQkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogQXBwQ29udHJvbDoiCisJCQkJCSIgc21hbGxlciBkdXBsaWNhdGUgYmVhY29uICIKKwkJCQkgICAgICAgIiglZCksIG9sZCA9ICVkLCBuZXcgPSAlZCwgc3BhY2UgPSAlZCwiCisJCQkJICAgICAgICJsZWZ0ID0gJWRcbiIsCisJCQkJICAgICAgIGJlYWNvbl9pZHgsIG9sZF9iY25fc2l6ZSwgbmV3X2Jjbl9zaXplLAorCQkJCSAgICAgICBiY25fc3BhY2UsCisJCQkJICAgICAgIChpbnQpKHNpemVvZihhZGFwdGVyLT5iY25fYnVmKSAtCisJCQkJCShhZGFwdGVyLT5iY25fYnVmX2VuZCAtCisJCQkJCSBhZGFwdGVyLT5iY25fYnVmKSkpOworCisJCQkJLyoKKwkJCQkgKiAgbWVtbW92ZSAoc2luY2UgdGhlIG1lbW9yeSBvdmVybGFwcykgdGhlCisJCQkJICogIGRhdGEgYWZ0ZXIgdGhlIGJlYWNvbiB3ZSBqdXN0IHN0b3JlZCB0byB0aGUKKwkJCQkgKiAgZW5kIG9mIHRoZSBjdXJyZW50IGJlYWNvbi4gIFRoaXMgY2xlYW5zIHVwCisJCQkJICogIGFueSB1bnVzZWQgc3BhY2UgdGhlIG9sZCBsYXJnZXIgYmVhY29uIHdhcworCQkJCSAqICB1c2luZyBpbiB0aGUgYnVmZmVyCisJCQkJICovCisJCQkJbWVtbW92ZShiY25fc3RvcmUgKyBvbGRfYmNuX3NpemUsCisJCQkJCWJjbl9zdG9yZSArIGJjbl9zcGFjZSwKKwkJCQkJYWRhcHRlci0+YmNuX2J1Zl9lbmQgLSAoYmNuX3N0b3JlICsKKwkJCQkJCQkJICAgYmNuX3NwYWNlKSk7CisKKwkJCQkvKgorCQkJCSAqIERlY3JlbWVudCB0aGUgZW5kIHBvaW50ZXIgYnkgdGhlIGRpZmZlcmVuY2UKKwkJCQkgKiBiZXR3ZWVuIHRoZSBvbGQgbGFyZ2VyIHNpemUgYW5kIHRoZSBuZXcKKwkJCQkgKiBzbWFsbGVyIHNpemUgc2luY2Ugd2UgYXJlIHVzaW5nIGxlc3Mgc3BhY2UKKwkJCQkgKiBkdWUgdG8gdGhlIG5ldyBiZWFjb24gYmVpbmcgc21hbGxlcgorCQkJCSAqLworCQkJCWFkYXB0ZXItPmJjbl9idWZfZW5kIC09CisJCQkJCShiY25fc3BhY2UgLSBvbGRfYmNuX3NpemUpOworCisJCQkJLyogU2V0IHRoZSBtYXhpbXVtIHN0b3JhZ2Ugc2l6ZSB0byB0aGUgb2xkCisJCQkJICAgYmVhY29uIHNpemUgKi8KKwkJCQluZXdfYmVhY29uLT5iZWFjb25fYnVmX3NpemVfbWF4ID0gb2xkX2Jjbl9zaXplOworCisJCQkJLyogQWRqdXN0IGJlYWNvbiBidWZmZXIgcG9pbnRlcnMgdGhhdCBhcmUgcGFzdAorCQkJCSAgIHRoZSBjdXJyZW50ICovCisJCQkJbXdpZmlleF9hZGp1c3RfYmVhY29uX2J1ZmZlcl9wdHJzKHByaXYsIDAsCisJCQkJCWJjbl9zdG9yZSwgKGJjbl9zcGFjZSAtIG9sZF9iY25fc2l6ZSksCisJCQkJCW51bV9vZl9lbnQpOworCQkJfQorCQl9IGVsc2UgaWYgKGFkYXB0ZXItPmJjbl9idWZfZW5kICsgKG5ld19iY25fc2l6ZSAtIGJjbl9zcGFjZSkKKwkJCSAgIDwgKGFkYXB0ZXItPmJjbl9idWYgKyBzaXplb2YoYWRhcHRlci0+YmNuX2J1ZikpKSB7CisJCQkvKgorCQkJICogQmVhY29uIGlzIGxhcmdlciB0aGFuIHNwYWNlIHByZXZpb3VzbHkgYWxsb2NhdGVkCisJCQkgKiAoYmNuX3NwYWNlKSBhbmQgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGxlZnQgaW4gdGhlCisJCQkgKiBiZWFjb25CdWZmZXIgdG8gc3RvcmUgdGhlIGFkZGl0aW9uYWwgZGF0YQorCQkJICovCisJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IEFwcENvbnRyb2w6IgorCQkJCSIgbGFyZ2VyIGR1cGxpY2F0ZSBiZWFjb24gKCVkKSwgIgorCQkJICAgICAgICJvbGQgPSAlZCwgbmV3ID0gJWQsIHNwYWNlID0gJWQsIGxlZnQgPSAlZFxuIiwKKwkJCSAgICAgICBiZWFjb25faWR4LCBvbGRfYmNuX3NpemUsIG5ld19iY25fc2l6ZSwKKwkJCSAgICAgICBiY25fc3BhY2UsCisJCQkgICAgICAgKGludCkoc2l6ZW9mKGFkYXB0ZXItPmJjbl9idWYpIC0KKwkJCQkoYWRhcHRlci0+YmNuX2J1Zl9lbmQgLQorCQkJCSBhZGFwdGVyLT5iY25fYnVmKSkpOworCisJCQkvKgorCQkJICogbWVtbW92ZSAoc2luY2UgdGhlIG1lbW9yeSBvdmVybGFwcykgdGhlIGRhdGEKKwkJCSAqICBhZnRlciB0aGUgYmVhY29uIHdlIGp1c3Qgc3RvcmVkIHRvIHRoZSBlbmQgb2YKKwkJCSAqICB0aGUgY3VycmVudCBiZWFjb24uICBUaGlzIG1vdmVzIHRoZSBkYXRhIGZvcgorCQkJICogIHRoZSBiZWFjb25zIGFmdGVyIHRoaXMgZnVydGhlciBpbiBtZW1vcnkgdG8KKwkJCSAqICBtYWtlIHNwYWNlIGZvciB0aGUgbmV3IGxhcmdlciBiZWFjb24gd2UgYXJlCisJCQkgKiAgYWJvdXQgdG8gY29weSBpbi4KKwkJCSAqLworCQkJbWVtbW92ZShiY25fc3RvcmUgKyBuZXdfYmNuX3NpemUsCisJCQkJYmNuX3N0b3JlICsgYmNuX3NwYWNlLAorCQkJCWFkYXB0ZXItPmJjbl9idWZfZW5kIC0gKGJjbl9zdG9yZSArIGJjbl9zcGFjZSkpOworCisJCQkvKiBDb3B5IHRoZSBuZXcgYmVhY29uIGJ1ZmZlciBlbnRyeSBvdmVyIHRoZSBvbGQgb25lICovCisJCQltZW1jcHkoYmNuX3N0b3JlLCBuZXdfYmVhY29uLT5iZWFjb25fYnVmLCBuZXdfYmNuX3NpemUpOworCisJCQkvKiBNb3ZlIHRoZSBiZWFjb24gZW5kIHBvaW50ZXIgYnkgdGhlIGFtb3VudCBvZiBuZXcKKwkJCSAgIGJlYWNvbiBkYXRhIHdlIGFyZSBhZGRpbmcgKi8KKwkJCWFkYXB0ZXItPmJjbl9idWZfZW5kICs9IChuZXdfYmNuX3NpemUgLSBiY25fc3BhY2UpOworCisJCQkvKgorCQkJICogVGhpcyBlbnRyeSBpcyBiaWdnZXIgdGhhbiB0aGUgYWxsb3RlZCBtYXggc3BhY2UKKwkJCSAqICBwcmV2aW91c2x5IHJlc2VydmVkLiAgSW5jcmVhc2UgdGhlIG1heCBzcGFjZSB0bworCQkJICogIGJlIGVxdWFsIHRvIHRoZSBuZXcgYmVhY29uIHNpemUKKwkJCSAqLworCQkJbmV3X2JlYWNvbi0+YmVhY29uX2J1Zl9zaXplX21heCA9IG5ld19iY25fc2l6ZTsKKworCQkJLyogQWRqdXN0IGJlYWNvbiBidWZmZXIgcG9pbnRlcnMgdGhhdCBhcmUgcGFzdCB0aGUKKwkJCSAgIGN1cnJlbnQgKi8KKwkJCW13aWZpZXhfYWRqdXN0X2JlYWNvbl9idWZmZXJfcHRycyhwcml2LCAxLCBiY25fc3RvcmUsCisJCQkJCQkobmV3X2Jjbl9zaXplIC0gYmNuX3NwYWNlKSwKKwkJCQkJCW51bV9vZl9lbnQpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIEJlYWNvbiBpcyBsYXJnZXIgdGhhbiB0aGUgcHJldmlvdXNseSBhbGxvY2F0ZWQgc3BhY2UsCisJCQkgKiBidXQgdGhlcmUgaXMgbm90IGVub3VnaCBmcmVlIHNwYWNlIHRvIHN0b3JlIHRoZQorCQkJICogYWRkaXRpb25hbCBkYXRhLgorCQkJICovCisJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIkFwcENvbnRyb2w6IGxhcmdlciBkdXBsaWNhdGUgIgorCQkJCSIgYmVhY29uICglZCksIG9sZCA9ICVkIG5ldyA9ICVkLCBzcGFjZSA9ICVkLCIKKwkJCQkiIGxlZnQgPSAlZFxuIiwgYmVhY29uX2lkeCwgb2xkX2Jjbl9zaXplLAorCQkJCW5ld19iY25fc2l6ZSwgYmNuX3NwYWNlLAorCQkJCShpbnQpKHNpemVvZihhZGFwdGVyLT5iY25fYnVmKSAtCisJCQkJKGFkYXB0ZXItPmJjbl9idWZfZW5kIC0gYWRhcHRlci0+YmNuX2J1ZikpKTsKKworCQkJLyogU3RvcmFnZSBmYWlsdXJlLCBrZWVwIG9sZCBiZWFjb24gaW50YWN0ICovCisJCQluZXdfYmVhY29uLT5iZWFjb25fYnVmX3NpemUgPSBvbGRfYmNuX3NpemU7CisJCQlpZiAobmV3X2JlYWNvbi0+YmNuX3dwYV9pZSkKKwkJCQluZXdfYmVhY29uLT53cGFfb2Zmc2V0ID0KKwkJCQkJYWRhcHRlci0+c2Nhbl90YWJsZVtiZWFjb25faWR4XS4KKwkJCQkJd3BhX29mZnNldDsKKwkJCWlmIChuZXdfYmVhY29uLT5iY25fcnNuX2llKQorCQkJCW5ld19iZWFjb24tPnJzbl9vZmZzZXQgPQorCQkJCQlhZGFwdGVyLT5zY2FuX3RhYmxlW2JlYWNvbl9pZHhdLgorCQkJCQlyc25fb2Zmc2V0OworCQkJaWYgKG5ld19iZWFjb24tPmJjbl93YXBpX2llKQorCQkJCW5ld19iZWFjb24tPndhcGlfb2Zmc2V0ID0KKwkJCQkJYWRhcHRlci0+c2Nhbl90YWJsZVtiZWFjb25faWR4XS4KKwkJCQkJd2FwaV9vZmZzZXQ7CisJCQlpZiAobmV3X2JlYWNvbi0+YmNuX2h0X2NhcCkKKwkJCQluZXdfYmVhY29uLT5odF9jYXBfb2Zmc2V0ID0KKwkJCQkJYWRhcHRlci0+c2Nhbl90YWJsZVtiZWFjb25faWR4XS4KKwkJCQkJaHRfY2FwX29mZnNldDsKKwkJCWlmIChuZXdfYmVhY29uLT5iY25faHRfaW5mbykKKwkJCQluZXdfYmVhY29uLT5odF9pbmZvX29mZnNldCA9CisJCQkJCWFkYXB0ZXItPnNjYW5fdGFibGVbYmVhY29uX2lkeF0uCisJCQkJCWh0X2luZm9fb2Zmc2V0OworCQkJaWYgKG5ld19iZWFjb24tPmJjbl9ic3NfY29fMjA0MCkKKwkJCQluZXdfYmVhY29uLT5ic3NfY29fMjA0MF9vZmZzZXQgPQorCQkJCQlhZGFwdGVyLT5zY2FuX3RhYmxlW2JlYWNvbl9pZHhdLgorCQkJCQlic3NfY29fMjA0MF9vZmZzZXQ7CisJCQlpZiAobmV3X2JlYWNvbi0+YmNuX2V4dF9jYXApCisJCQkJbmV3X2JlYWNvbi0+ZXh0X2NhcF9vZmZzZXQgPQorCQkJCQlhZGFwdGVyLT5zY2FuX3RhYmxlW2JlYWNvbl9pZHhdLgorCQkJCQlleHRfY2FwX29mZnNldDsKKwkJCWlmIChuZXdfYmVhY29uLT5iY25fb2Jzc19zY2FuKQorCQkJCW5ld19iZWFjb24tPm92ZXJsYXBfYnNzX29mZnNldCA9CisJCQkJCWFkYXB0ZXItPnNjYW5fdGFibGVbYmVhY29uX2lkeF0uCisJCQkJCW92ZXJsYXBfYnNzX29mZnNldDsKKwkJfQorCQkvKiBQb2ludCB0aGUgbmV3IGVudHJ5IHRvIGl0cyBwZXJtYW5lbnQgc3RvcmFnZSBzcGFjZSAqLworCQluZXdfYmVhY29uLT5iZWFjb25fYnVmID0gYmNuX3N0b3JlOworCQltd2lmaWV4X3VwZGF0ZV9iZWFjb25fYnVmZmVyX3B0cnMobmV3X2JlYWNvbik7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogTm8gZXhpc3RpbmcgYmVhY29uIGRhdGEgZXhpc3RzIGZvciB0aGlzIGVudHJ5LCBjaGVjayB0byBzZWUKKwkJICogICBpZiB3ZSBjYW4gZml0IGl0IGluIHRoZSByZW1haW5pbmcgc3BhY2UKKwkJICovCisJCWlmIChhZGFwdGVyLT5iY25fYnVmX2VuZCArIG5ld19iZWFjb24tPmJlYWNvbl9idWZfc2l6ZSArCisJCSAgICBTQ0FOX0JFQUNPTl9FTlRSWV9QQUQgPCAoYWRhcHRlci0+YmNuX2J1ZiArCisJCQkJCSAgICAgc2l6ZW9mKGFkYXB0ZXItPmJjbl9idWYpKSkgeworCisJCQkvKgorCQkJICogQ29weSB0aGUgYmVhY29uIGJ1ZmZlciBkYXRhIGZyb20gdGhlIGxvY2FsIGVudHJ5IHRvCisJCQkgKiB0aGUgYWRhcHRlciBkZXYgc3RydWN0IGJ1ZmZlciBzcGFjZSB1c2VkIHRvIHN0b3JlCisJCQkgKiB0aGUgcmF3IGJlYWNvbiBkYXRhIGZvciBlYWNoIGVudHJ5IGluIHRoZSBzY2FuIHRhYmxlCisJCQkgKi8KKwkJCW1lbWNweShhZGFwdGVyLT5iY25fYnVmX2VuZCwgbmV3X2JlYWNvbi0+YmVhY29uX2J1ZiwKKwkJCSAgICAgICBuZXdfYmVhY29uLT5iZWFjb25fYnVmX3NpemUpOworCisJCQkvKiBVcGRhdGUgdGhlIGJlYWNvbiBwdHIgdG8gcG9pbnQgdG8gdGhlIHRhYmxlIHNhdmUKKwkJCSAgIGFyZWEgKi8KKwkJCW5ld19iZWFjb24tPmJlYWNvbl9idWYgPSBhZGFwdGVyLT5iY25fYnVmX2VuZDsKKwkJCW5ld19iZWFjb24tPmJlYWNvbl9idWZfc2l6ZV9tYXggPQorCQkJCShuZXdfYmVhY29uLT5iZWFjb25fYnVmX3NpemUgKworCQkJCSBTQ0FOX0JFQUNPTl9FTlRSWV9QQUQpOworCisJCQltd2lmaWV4X3VwZGF0ZV9iZWFjb25fYnVmZmVyX3B0cnMobmV3X2JlYWNvbik7CisKKwkJCS8qIEluY3JlbWVudCB0aGUgZW5kIHBvaW50ZXIgYnkgdGhlIHNpemUgcmVzZXJ2ZWQgKi8KKwkJCWFkYXB0ZXItPmJjbl9idWZfZW5kICs9IG5ld19iZWFjb24tPmJlYWNvbl9idWZfc2l6ZV9tYXg7CisKKwkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogQXBwQ29udHJvbDogYmVhY29uWyUwMmRdIgorCQkJCSIgc3o9JTAzZCwgdXNlZCA9ICUwNGQsIGxlZnQgPSAlMDRkXG4iLAorCQkJICAgICAgIGJlYWNvbl9pZHgsCisJCQkgICAgICAgbmV3X2JlYWNvbi0+YmVhY29uX2J1Zl9zaXplLAorCQkJICAgICAgIChpbnQpKGFkYXB0ZXItPmJjbl9idWZfZW5kIC0gYWRhcHRlci0+YmNuX2J1ZiksCisJCQkgICAgICAgKGludCkoc2l6ZW9mKGFkYXB0ZXItPmJjbl9idWYpIC0KKwkJCQkoYWRhcHRlci0+YmNuX2J1Zl9lbmQgLQorCQkJCSBhZGFwdGVyLT5iY25fYnVmKSkpOworCQl9IGVsc2UgeworCQkJLyogTm8gc3BhY2UgZm9yIG5ldyBiZWFjb24gKi8KKwkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogQXBwQ29udHJvbDogbm8gc3BhY2UgZm9yIgorCQkJCSIgYmVhY29uICglZCk6ICVwTSBzej0lMDNkLCBsZWZ0PSUwM2RcbiIsCisJCQkgICAgICAgYmVhY29uX2lkeCwgbmV3X2JlYWNvbi0+bWFjX2FkZHJlc3MsCisJCQkgICAgICAgbmV3X2JlYWNvbi0+YmVhY29uX2J1Zl9zaXplLAorCQkJICAgICAgIChpbnQpKHNpemVvZihhZGFwdGVyLT5iY25fYnVmKSAtCisJCQkJKGFkYXB0ZXItPmJjbl9idWZfZW5kIC0KKwkJCQkgYWRhcHRlci0+YmNuX2J1ZikpKTsKKworCQkJLyogU3RvcmFnZSBmYWlsdXJlOyBjbGVhciBzdG9yYWdlIHJlY29yZHMgZm9yIHRoaXMKKwkJCSAgIGJjbiAqLworCQkJbmV3X2JlYWNvbi0+YmVhY29uX2J1ZiA9IE5VTEw7CisJCQluZXdfYmVhY29uLT5iZWFjb25fYnVmX3NpemUgPSAwOworCQkJbmV3X2JlYWNvbi0+YmVhY29uX2J1Zl9zaXplX21heCA9IDA7CisJCQluZXdfYmVhY29uLT5iY25fd3BhX2llID0gTlVMTDsKKwkJCW5ld19iZWFjb24tPndwYV9vZmZzZXQgPSAwOworCQkJbmV3X2JlYWNvbi0+YmNuX3Jzbl9pZSA9IE5VTEw7CisJCQluZXdfYmVhY29uLT5yc25fb2Zmc2V0ID0gMDsKKwkJCW5ld19iZWFjb24tPmJjbl93YXBpX2llID0gTlVMTDsKKwkJCW5ld19iZWFjb24tPndhcGlfb2Zmc2V0ID0gMDsKKwkJCW5ld19iZWFjb24tPmJjbl9odF9jYXAgPSBOVUxMOworCQkJbmV3X2JlYWNvbi0+aHRfY2FwX29mZnNldCA9IDA7CisJCQluZXdfYmVhY29uLT5iY25faHRfaW5mbyA9IE5VTEw7CisJCQluZXdfYmVhY29uLT5odF9pbmZvX29mZnNldCA9IDA7CisJCQluZXdfYmVhY29uLT5iY25fYnNzX2NvXzIwNDAgPSBOVUxMOworCQkJbmV3X2JlYWNvbi0+YnNzX2NvXzIwNDBfb2Zmc2V0ID0gMDsKKwkJCW5ld19iZWFjb24tPmJjbl9leHRfY2FwID0gTlVMTDsKKwkJCW5ld19iZWFjb24tPmV4dF9jYXBfb2Zmc2V0ID0gMDsKKwkJCW5ld19iZWFjb24tPmJjbl9vYnNzX3NjYW4gPSBOVUxMOworCQkJbmV3X2JlYWNvbi0+b3ZlcmxhcF9ic3Nfb2Zmc2V0ID0gMDsKKwkJfQorCX0KK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmVzdG9yZXMgYSBiZWFjb24gYnVmZmVyIG9mIHRoZSBjdXJyZW50IEJTUyBkZXNjcmlwdG9yLgorICovCitzdGF0aWMgdm9pZCBtd2lmaWV4X3Jlc3RvcmVfY3Vycl9iY24oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpjdXJyX2JzcyA9CisJCSZwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3I7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChwcml2LT5jdXJyX2Jjbl9idWYgJiYKKwkgICAgKChhZGFwdGVyLT5iY25fYnVmX2VuZCArIHByaXYtPmN1cnJfYmNuX3NpemUpIDwKKwkgICAgIChhZGFwdGVyLT5iY25fYnVmICsgc2l6ZW9mKGFkYXB0ZXItPmJjbl9idWYpKSkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmN1cnJfYmNuX2J1Zl9sb2NrLCBmbGFncyk7CisKKwkJLyogcmVzdG9yZSB0aGUgY3VycmVudCBiZWFjb24gYnVmZmVyICovCisJCW1lbWNweShhZGFwdGVyLT5iY25fYnVmX2VuZCwgcHJpdi0+Y3Vycl9iY25fYnVmLAorCQkgICAgICAgcHJpdi0+Y3Vycl9iY25fc2l6ZSk7CisJCWN1cnJfYnNzLT5iZWFjb25fYnVmID0gYWRhcHRlci0+YmNuX2J1Zl9lbmQ7CisJCWN1cnJfYnNzLT5iZWFjb25fYnVmX3NpemUgPSBwcml2LT5jdXJyX2Jjbl9zaXplOworCQlhZGFwdGVyLT5iY25fYnVmX2VuZCArPSBwcml2LT5jdXJyX2Jjbl9zaXplOworCisJCS8qIGFkanVzdCB0aGUgcG9pbnRlcnMgaW4gdGhlIGN1cnJlbnQgQlNTIGRlc2NyaXB0b3IgKi8KKwkJaWYgKGN1cnJfYnNzLT5iY25fd3BhX2llKQorCQkJY3Vycl9ic3MtPmJjbl93cGFfaWUgPQorCQkJCShzdHJ1Y3QgaWVlZV90eXBlc192ZW5kb3Jfc3BlY2lmaWMgKikKKwkJCQkoY3Vycl9ic3MtPmJlYWNvbl9idWYgKworCQkJCSBjdXJyX2Jzcy0+d3BhX29mZnNldCk7CisKKwkJaWYgKGN1cnJfYnNzLT5iY25fcnNuX2llKQorCQkJY3Vycl9ic3MtPmJjbl9yc25faWUgPSAoc3RydWN0IGllZWVfdHlwZXNfZ2VuZXJpYyAqKQorCQkJCShjdXJyX2Jzcy0+YmVhY29uX2J1ZiArCisJCQkJIGN1cnJfYnNzLT5yc25fb2Zmc2V0KTsKKworCQlpZiAoY3Vycl9ic3MtPmJjbl9odF9jYXApCisJCQljdXJyX2Jzcy0+YmNuX2h0X2NhcCA9IChzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCAqKQorCQkJCShjdXJyX2Jzcy0+YmVhY29uX2J1ZiArCisJCQkJIGN1cnJfYnNzLT5odF9jYXBfb2Zmc2V0KTsKKworCQlpZiAoY3Vycl9ic3MtPmJjbl9odF9pbmZvKQorCQkJY3Vycl9ic3MtPmJjbl9odF9pbmZvID0gKHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAqKQorCQkJCShjdXJyX2Jzcy0+YmVhY29uX2J1ZiArCisJCQkJIGN1cnJfYnNzLT5odF9pbmZvX29mZnNldCk7CisKKwkJaWYgKGN1cnJfYnNzLT5iY25fYnNzX2NvXzIwNDApCisJCQljdXJyX2Jzcy0+YmNuX2Jzc19jb18yMDQwID0KKwkJCQkodTggKikgKGN1cnJfYnNzLT5iZWFjb25fYnVmICsKKwkJCQkgY3Vycl9ic3MtPmJzc19jb18yMDQwX29mZnNldCk7CisKKwkJaWYgKGN1cnJfYnNzLT5iY25fZXh0X2NhcCkKKwkJCWN1cnJfYnNzLT5iY25fZXh0X2NhcCA9ICh1OCAqKSAoY3Vycl9ic3MtPmJlYWNvbl9idWYgKworCQkJCSBjdXJyX2Jzcy0+ZXh0X2NhcF9vZmZzZXQpOworCisJCWlmIChjdXJyX2Jzcy0+YmNuX29ic3Nfc2NhbikKKwkJCWN1cnJfYnNzLT5iY25fb2Jzc19zY2FuID0KKwkJCQkoc3RydWN0IGllZWVfdHlwZXNfb2Jzc19zY2FuX3BhcmFtICopCisJCQkJKGN1cnJfYnNzLT5iZWFjb25fYnVmICsKKwkJCQkgY3Vycl9ic3MtPm92ZXJsYXBfYnNzX29mZnNldCk7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+Y3Vycl9iY25fYnVmX2xvY2ssIGZsYWdzKTsKKworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IGN1cnJlbnQgYmVhY29uIHJlc3RvcmVkICVkXG4iLAorCQkgICAgICAgcHJpdi0+Y3Vycl9iY25fc2l6ZSk7CisJfSBlbHNlIHsKKwkJZGV2X3dhcm4oYWRhcHRlci0+ZGV2LAorCQkJImN1cnJfYmNuX2J1ZiBub3Qgc2F2ZWQgb3IgYmNuX2J1ZiBoYXMgbm8gc3BhY2VcbiIpOworCX0KK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcG9zdCBwcm9jZXNzZXMgdGhlIHNjYW4gdGFibGUgYWZ0ZXIgYSBuZXcgc2NhbiBjb21tYW5kIGhhcworICogY29tcGxldGVkLgorICoKKyAqIEl0IGluc3BlY3RzIGVhY2ggZW50cnkgb2YgdGhlIHNjYW4gdGFibGUgYW5kIHRyaWVzIHRvIGZpbmQgYW4gZW50cnkgdGhhdAorICogbWF0Y2hlcyB3aXRoIG91ciBjdXJyZW50IGFzc29jaWF0ZWQvam9pbmVkIG5ldHdvcmsgZnJvbSB0aGUgc2Nhbi4gSWYKKyAqIG9uZSBpcyBmb3VuZCwgdGhlIHN0b3JlZCBjb3B5IG9mIHRoZSBCU1MgZGVzY3JpcHRvciBvZiBvdXIgY3VycmVudCBuZXR3b3JrCisgKiBpcyB1cGRhdGVkLgorICoKKyAqIEl0IGFsc28gZGVidWcgZHVtcHMgdGhlIGN1cnJlbnQgc2NhbiB0YWJsZSBjb250ZW50cyBhZnRlciBwcm9jZXNzaW5nIGlzIG92ZXIuCisgKi8KK3N0YXRpYyB2b2lkCittd2lmaWV4X3Byb2Nlc3Nfc2Nhbl9yZXN1bHRzKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpCit7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJczMyIGo7CisJdTMyIGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChwcml2LT5tZWRpYV9jb25uZWN0ZWQpIHsKKworCQlqID0gbXdpZmlleF9maW5kX3NzaWRfaW5fbGlzdChwcml2LCAmcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLgorCQkJCQkgICAgICBic3NfZGVzY3JpcHRvci5zc2lkLAorCQkJCQkgICAgICBwcml2LT5jdXJyX2Jzc19wYXJhbXMuCisJCQkJCSAgICAgIGJzc19kZXNjcmlwdG9yLm1hY19hZGRyZXNzLAorCQkJCQkgICAgICBwcml2LT5ic3NfbW9kZSk7CisKKwkJaWYgKGogPj0gMCkgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmN1cnJfYmNuX2J1Zl9sb2NrLCBmbGFncyk7CisJCQlwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IuYmNuX3dwYV9pZSA9IE5VTEw7CisJCQlwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3Iud3BhX29mZnNldCA9IDA7CisJCQlwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IuYmNuX3Jzbl9pZSA9IE5VTEw7CisJCQlwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IucnNuX29mZnNldCA9IDA7CisJCQlwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IuYmNuX3dhcGlfaWUgPSBOVUxMOworCQkJcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLndhcGlfb2Zmc2V0ID0gMDsKKwkJCXByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5iY25faHRfY2FwID0gTlVMTDsKKwkJCXByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5odF9jYXBfb2Zmc2V0ID0KKwkJCQkwOworCQkJcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLmJjbl9odF9pbmZvID0gTlVMTDsKKwkJCXByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5odF9pbmZvX29mZnNldCA9CisJCQkJMDsKKwkJCXByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5iY25fYnNzX2NvXzIwNDAgPQorCQkJCU5VTEw7CisJCQlwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IuCisJCQkJYnNzX2NvXzIwNDBfb2Zmc2V0ID0gMDsKKwkJCXByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5iY25fZXh0X2NhcCA9IE5VTEw7CisJCQlwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IuZXh0X2NhcF9vZmZzZXQgPSAwOworCQkJcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLgorCQkJCWJjbl9vYnNzX3NjYW4gPSBOVUxMOworCQkJcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLgorCQkJCW92ZXJsYXBfYnNzX29mZnNldCA9IDA7CisJCQlwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IuYmVhY29uX2J1ZiA9IE5VTEw7CisJCQlwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IuYmVhY29uX2J1Zl9zaXplID0KKwkJCQkwOworCQkJcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLgorCQkJCWJlYWNvbl9idWZfc2l6ZV9tYXggPSAwOworCisJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IEZvdW5kIGN1cnJlbnQgc3NpZC9ic3NpZCIKKwkJCQkiIGluIGxpc3QgQCBpbmRleCAjJWRcbiIsIGopOworCQkJLyogTWFrZSBhIGNvcHkgb2YgY3VycmVudCBCU1NJRCBkZXNjcmlwdG9yICovCisJCQltZW1jcHkoJnByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvciwKKwkJCSAgICAgICAmYWRhcHRlci0+c2Nhbl90YWJsZVtqXSwKKwkJCSAgICAgICBzaXplb2YocHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yKSk7CisKKwkJCW13aWZpZXhfc2F2ZV9jdXJyX2Jjbihwcml2KTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmN1cnJfYmNuX2J1Zl9sb2NrLCBmbGFncyk7CisKKwkJfSBlbHNlIHsKKwkJCW13aWZpZXhfcmVzdG9yZV9jdXJyX2Jjbihwcml2KTsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1faW5fc2Nhbl90YWJsZTsgaSsrKQorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IHNjYW46KCUwMmQpICVwTSAiCisJCSAgICAgICAiUlNTSVslMDNkXSwgU1NJRFslc11cbiIsCisJCSAgICAgICBpLCBhZGFwdGVyLT5zY2FuX3RhYmxlW2ldLm1hY19hZGRyZXNzLAorCQkgICAgICAgKHMzMikgYWRhcHRlci0+c2Nhbl90YWJsZVtpXS5yc3NpLAorCQkgICAgICAgYWRhcHRlci0+c2Nhbl90YWJsZVtpXS5zc2lkLnNzaWQpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyByYWRpbyB0eXBlIHNjYW4gcGFyYW1ldGVyIHRvIGEgYmFuZCBjb25maWd1cmF0aW9uCisgKiB0byBiZSB1c2VkIGluIGpvaW4gY29tbWFuZC4KKyAqLworc3RhdGljIHU4Cittd2lmaWV4X3JhZGlvX3R5cGVfdG9fYmFuZCh1OCByYWRpb190eXBlKQoreworCXN3aXRjaCAocmFkaW9fdHlwZSkgeworCWNhc2UgSG9zdENtZF9TQ0FOX1JBRElPX1RZUEVfQToKKwkJcmV0dXJuIEJBTkRfQTsKKwljYXNlIEhvc3RDbWRfU0NBTl9SQURJT19UWVBFX0JHOgorCWRlZmF1bHQ6CisJCXJldHVybiBCQU5EX0c7CisJfQorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBkZWxldGVzIGEgc3BlY2lmaWMgaW5kZXhlZCBlbnRyeSBmcm9tIHRoZSBzY2FuIHRhYmxlLgorICoKKyAqIFRoaXMgYWxzbyBjb21wYWN0cyB0aGUgcmVtYWluaW5nIGVudHJpZXMgYW5kIGFkanVzdHMgYW55IGJ1ZmZlcmluZworICogb2YgYmVhY29uL3Byb2JlIHJlc3BvbnNlIGRhdGEgaWYgbmVlZGVkLgorICovCitzdGF0aWMgdm9pZAorbXdpZmlleF9zY2FuX2RlbGV0ZV90YWJsZV9lbnRyeShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBzMzIgdGFibGVfaWR4KQoreworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXUzMiBkZWxfaWR4OworCXUzMiBiZWFjb25fYnVmX2FkajsKKwl1OCAqYmVhY29uX2J1ZjsKKworCS8qCisJICogU2hpZnQgdGhlIHNhdmVkIGJlYWNvbiBidWZmZXIgZGF0YSBmb3IgdGhlIHNjYW4gdGFibGUgYmFjayBvdmVyIHRoZQorCSAqICAgZW50cnkgYmVpbmcgcmVtb3ZlZC4gIFVwZGF0ZSB0aGUgZW5kIG9mIGJ1ZmZlciBwb2ludGVyLiAgU2F2ZSB0aGUKKwkgKiAgIGRlbGV0ZWQgYnVmZmVyIGFsbG9jYXRpb24gc2l6ZSBmb3IgcG9pbnRlciBhZGp1c3RtZW50cyBmb3IgZW50cmllcworCSAqICAgY29tcGFjdGVkIGFmdGVyIHRoZSBkZWxldGVkIGluZGV4LgorCSAqLworCWJlYWNvbl9idWZfYWRqID0gYWRhcHRlci0+c2Nhbl90YWJsZVt0YWJsZV9pZHhdLmJlYWNvbl9idWZfc2l6ZV9tYXg7CisKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IFNjYW46IERlbGV0ZSBFbnRyeSAlZCwgYmVhY29uIGJ1ZmZlciAiCisJCSJyZW1vdmFsID0gJWQgYnl0ZXNcbiIsIHRhYmxlX2lkeCwgYmVhY29uX2J1Zl9hZGopOworCisJLyogQ2hlY2sgaWYgdGhlIHRhYmxlIGVudHJ5IGhhZCBzdG9yYWdlIGFsbG9jYXRlZCBmb3IgaXRzIGJlYWNvbiAqLworCWlmIChiZWFjb25fYnVmX2FkaikgeworCQliZWFjb25fYnVmID0gYWRhcHRlci0+c2Nhbl90YWJsZVt0YWJsZV9pZHhdLmJlYWNvbl9idWY7CisKKwkJLyoKKwkJICogUmVtb3ZlIHRoZSBlbnRyeSdzIGJ1ZmZlciBzcGFjZSwgZGVjcmVtZW50IHRoZSB0YWJsZSBlbmQKKwkJICogcG9pbnRlciBieSB0aGUgYW1vdW50IHdlIGFyZSByZW1vdmluZworCQkgKi8KKwkJYWRhcHRlci0+YmNuX2J1Zl9lbmQgLT0gYmVhY29uX2J1Zl9hZGo7CisKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBzY2FuOiBkZWxldGUgZW50cnkgJWQsIgorCQkJIiBjb21wYWN0IGRhdGE6ICVwIDwtICVwIChzeiA9ICVkKVxuIiwKKwkJICAgICAgIHRhYmxlX2lkeCwgYmVhY29uX2J1ZiwKKwkJICAgICAgIGJlYWNvbl9idWYgKyBiZWFjb25fYnVmX2FkaiwKKwkJICAgICAgIChpbnQpKGFkYXB0ZXItPmJjbl9idWZfZW5kIC0gYmVhY29uX2J1ZikpOworCisJCS8qCisJCSAqIENvbXBhY3QgZGF0YSBzdG9yYWdlLiAgQ29weSBhbGwgZGF0YSBhZnRlciB0aGUgZGVsZXRlZAorCQkgKiBlbnRyeSdzIGVuZCBhZGRyZXNzIChiZWFjb25fYnVmICsgYmVhY29uX2J1Zl9hZGopIGJhY2sKKwkJICogdG8gdGhlIG9yaWdpbmFsIHN0YXJ0IGFkZHJlc3MgKGJlYWNvbl9idWYpLgorCQkgKgorCQkgKiBTY2FuIHRhYmxlIGVudHJpZXMgYWZmZWN0ZWQgYnkgdGhlIG1vdmUgd2lsbCBoYXZlIHRoZWlyCisJCSAqIGVudHJ5IHBvaW50ZXIgYWRqdXN0ZWQgYmVsb3cuCisJCSAqCisJCSAqIFVzZSBtZW1tb3ZlIHNpbmNlIHRoZSBkZXN0L3NyYyBtZW1vcnkgcmVnaW9ucyBvdmVybGFwLgorCQkgKi8KKwkJbWVtbW92ZShiZWFjb25fYnVmLCBiZWFjb25fYnVmICsgYmVhY29uX2J1Zl9hZGosCisJCQlhZGFwdGVyLT5iY25fYnVmX2VuZCAtIGJlYWNvbl9idWYpOworCX0KKworCWRldl9kYmcoYWRhcHRlci0+ZGV2LAorCQkiaW5mbzogU2NhbjogRGVsZXRlIEVudHJ5ICVkLCBudW1faW5fc2Nhbl90YWJsZSA9ICVkXG4iLAorCSAgICAgICB0YWJsZV9pZHgsIGFkYXB0ZXItPm51bV9pbl9zY2FuX3RhYmxlKTsKKworCS8qIFNoaWZ0IGFsbCBvZiB0aGUgZW50cmllcyBhZnRlciB0aGUgdGFibGVfaWR4IGJhY2sgYnkgb25lLCBjb21wYWN0aW5nCisJICAgdGhlIHRhYmxlIGFuZCByZW1vdmluZyB0aGUgcmVxdWVzdGVkIGVudHJ5ICovCisJZm9yIChkZWxfaWR4ID0gdGFibGVfaWR4OyAoZGVsX2lkeCArIDEpIDwgYWRhcHRlci0+bnVtX2luX3NjYW5fdGFibGU7CisJICAgICBkZWxfaWR4KyspIHsKKwkJLyogQ29weSB0aGUgbmV4dCBlbnRyeSBvdmVyIHRoaXMgb25lICovCisJCW1lbWNweShhZGFwdGVyLT5zY2FuX3RhYmxlICsgZGVsX2lkeCwKKwkJICAgICAgIGFkYXB0ZXItPnNjYW5fdGFibGUgKyBkZWxfaWR4ICsgMSwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yKSk7CisKKwkJLyoKKwkJICogQWRqdXN0IHRoaXMgZW50cnkncyBwb2ludGVyIHRvIGl0cyBiZWFjb24gYnVmZmVyIGJhc2VkIG9uCisJCSAqIHRoZSByZW1vdmVkL2NvbXBhY3RlZCBlbnRyeSBmcm9tIHRoZSBkZWxldGVkIGluZGV4LiAgRG9uJ3QKKwkJICogZGVjcmVtZW50IGlmIHRoZSBidWZmZXIgcG9pbnRlciBpcyBOVUxMIChubyBkYXRhIHN0b3JlZCBmb3IKKwkJICogdGhpcyBlbnRyeSkuCisJCSAqLworCQlpZiAoYWRhcHRlci0+c2Nhbl90YWJsZVtkZWxfaWR4XS5iZWFjb25fYnVmKSB7CisJCQlhZGFwdGVyLT5zY2FuX3RhYmxlW2RlbF9pZHhdLmJlYWNvbl9idWYgLT0KKwkJCQliZWFjb25fYnVmX2FkajsKKwkJCWlmIChhZGFwdGVyLT5zY2FuX3RhYmxlW2RlbF9pZHhdLmJjbl93cGFfaWUpCisJCQkJYWRhcHRlci0+c2Nhbl90YWJsZVtkZWxfaWR4XS5iY25fd3BhX2llID0KKwkJCQkJKHN0cnVjdCBpZWVlX3R5cGVzX3ZlbmRvcl9zcGVjaWZpYyAqKQorCQkJCQkoYWRhcHRlci0+c2Nhbl90YWJsZVtkZWxfaWR4XS4KKwkJCQkJIGJlYWNvbl9idWYgKworCQkJCQkgYWRhcHRlci0+c2Nhbl90YWJsZVtkZWxfaWR4XS4KKwkJCQkJIHdwYV9vZmZzZXQpOworCQkJaWYgKGFkYXB0ZXItPnNjYW5fdGFibGVbZGVsX2lkeF0uYmNuX3Jzbl9pZSkKKwkJCQlhZGFwdGVyLT5zY2FuX3RhYmxlW2RlbF9pZHhdLmJjbl9yc25faWUgPQorCQkJCQkoc3RydWN0IGllZWVfdHlwZXNfZ2VuZXJpYyAqKQorCQkJCQkoYWRhcHRlci0+c2Nhbl90YWJsZVtkZWxfaWR4XS4KKwkJCQkJIGJlYWNvbl9idWYgKworCQkJCQkgYWRhcHRlci0+c2Nhbl90YWJsZVtkZWxfaWR4XS4KKwkJCQkJIHJzbl9vZmZzZXQpOworCQkJaWYgKGFkYXB0ZXItPnNjYW5fdGFibGVbZGVsX2lkeF0uYmNuX3dhcGlfaWUpCisJCQkJYWRhcHRlci0+c2Nhbl90YWJsZVtkZWxfaWR4XS5iY25fd2FwaV9pZSA9CisJCQkJCShzdHJ1Y3QgaWVlZV90eXBlc19nZW5lcmljICopCisJCQkJCShhZGFwdGVyLT5zY2FuX3RhYmxlW2RlbF9pZHhdLmJlYWNvbl9idWYKKwkJCQkJICsgYWRhcHRlci0+c2Nhbl90YWJsZVtkZWxfaWR4XS4KKwkJCQkJIHdhcGlfb2Zmc2V0KTsKKwkJCWlmIChhZGFwdGVyLT5zY2FuX3RhYmxlW2RlbF9pZHhdLmJjbl9odF9jYXApCisJCQkJYWRhcHRlci0+c2Nhbl90YWJsZVtkZWxfaWR4XS5iY25faHRfY2FwID0KKwkJCQkJKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwICopCisJCQkJCShhZGFwdGVyLT5zY2FuX3RhYmxlW2RlbF9pZHhdLmJlYWNvbl9idWYKKwkJCQkJICsgYWRhcHRlci0+c2Nhbl90YWJsZVtkZWxfaWR4XS4KKwkJCQkJICBodF9jYXBfb2Zmc2V0KTsKKworCQkJaWYgKGFkYXB0ZXItPnNjYW5fdGFibGVbZGVsX2lkeF0uYmNuX2h0X2luZm8pCisJCQkJYWRhcHRlci0+c2Nhbl90YWJsZVtkZWxfaWR4XS5iY25faHRfaW5mbyA9CisJCQkJCShzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKikKKwkJCQkJKGFkYXB0ZXItPnNjYW5fdGFibGVbZGVsX2lkeF0uYmVhY29uX2J1ZgorCQkJCQkgKyBhZGFwdGVyLT5zY2FuX3RhYmxlW2RlbF9pZHhdLgorCQkJCQkgIGh0X2luZm9fb2Zmc2V0KTsKKwkJCWlmIChhZGFwdGVyLT5zY2FuX3RhYmxlW2RlbF9pZHhdLmJjbl9ic3NfY29fMjA0MCkKKwkJCQlhZGFwdGVyLT5zY2FuX3RhYmxlW2RlbF9pZHhdLmJjbl9ic3NfY29fMjA0MCA9CisJCQkJCSh1OCAqKQorCQkJCQkoYWRhcHRlci0+c2Nhbl90YWJsZVtkZWxfaWR4XS5iZWFjb25fYnVmCisJCQkJCSArIGFkYXB0ZXItPnNjYW5fdGFibGVbZGVsX2lkeF0uCisJCQkJCSAgIGJzc19jb18yMDQwX29mZnNldCk7CisJCQlpZiAoYWRhcHRlci0+c2Nhbl90YWJsZVtkZWxfaWR4XS5iY25fZXh0X2NhcCkKKwkJCQlhZGFwdGVyLT5zY2FuX3RhYmxlW2RlbF9pZHhdLmJjbl9leHRfY2FwID0KKwkJCQkJKHU4ICopCisJCQkJCShhZGFwdGVyLT5zY2FuX3RhYmxlW2RlbF9pZHhdLmJlYWNvbl9idWYKKwkJCQkJICsgYWRhcHRlci0+c2Nhbl90YWJsZVtkZWxfaWR4XS4KKwkJCQkJICAgICBleHRfY2FwX29mZnNldCk7CisJCQlpZiAoYWRhcHRlci0+c2Nhbl90YWJsZVtkZWxfaWR4XS5iY25fb2Jzc19zY2FuKQorCQkJCWFkYXB0ZXItPnNjYW5fdGFibGVbZGVsX2lkeF0uCisJCQkJCWJjbl9vYnNzX3NjYW4gPQorCQkJCQkoc3RydWN0IGllZWVfdHlwZXNfb2Jzc19zY2FuX3BhcmFtICopCisJCQkJCShhZGFwdGVyLT5zY2FuX3RhYmxlW2RlbF9pZHhdLmJlYWNvbl9idWYKKwkJCQkJICsgYWRhcHRlci0+c2Nhbl90YWJsZVtkZWxfaWR4XS4KKwkJCQkJICAgICBvdmVybGFwX2Jzc19vZmZzZXQpOworCQl9CisJfQorCisJLyogVGhlIGxhc3QgZW50cnkgaXMgaW52YWxpZCBub3cgdGhhdCBpdCBoYXMgYmVlbiBkZWxldGVkIG9yIG1vdmVkCisJICAgYmFjayAqLworCW1lbXNldChhZGFwdGVyLT5zY2FuX3RhYmxlICsgYWRhcHRlci0+bnVtX2luX3NjYW5fdGFibGUgLSAxLAorCSAgICAgICAweDAwLCBzaXplb2Yoc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvcikpOworCisJYWRhcHRlci0+bnVtX2luX3NjYW5fdGFibGUtLTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZGVsZXRlcyBhbGwgb2NjdXJyZW5jZXMgb2YgYSBnaXZlbiBTU0lEIGZyb20gdGhlIHNjYW4gdGFibGUuCisgKgorICogVGhpcyBpdGVyYXRlcyB0aHJvdWdoIHRoZSBzY2FuIHRhYmxlIGFuZCBkZWxldGVzIGFsbCBlbnRyaWVzIHRoYXQgbWF0Y2gKKyAqIHRoZSBnaXZlbiBTU0lELiBJdCBhbHNvIGNvbXBhY3RzIHRoZSByZW1haW5pbmcgc2NhbiB0YWJsZSBlbnRyaWVzLgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X3NjYW5fZGVsZXRlX3NzaWRfdGFibGVfZW50cnkoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgICAgIHN0cnVjdCBtd2lmaWV4XzgwMl8xMV9zc2lkICpkZWxfc3NpZCkKK3sKKwlzMzIgdGFibGVfaWR4ID0gLTE7CisKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IHNjYW46IGRlbGV0ZSBzc2lkIGVudHJ5OiAlLTMyc1xuIiwKKwkJCWRlbF9zc2lkLT5zc2lkKTsKKworCS8qIElmIHRoZSByZXF1ZXN0ZWQgU1NJRCBpcyBmb3VuZCBpbiB0aGUgdGFibGUsIGRlbGV0ZSBpdC4gIFRoZW4ga2VlcAorCSAgIHNlYXJjaGluZyB0aGUgdGFibGUgZm9yIG11bHRpcGxlIGVudGlyZXMgZm9yIHRoZSBTU0lEIHVudGlsIG5vCisJICAgbW9yZSBhcmUgZm91bmQgKi8KKwl3aGlsZSAoKHRhYmxlX2lkeCA9IG13aWZpZXhfZmluZF9zc2lkX2luX2xpc3QocHJpdiwgZGVsX3NzaWQsIE5VTEwsCisJCQkJCU5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKSkgPj0gMCkgeworCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwKKwkJCSJpbmZvOiBTY2FuOiBEZWxldGUgU1NJRCBFbnRyeTogRm91bmQgSWR4ID0gJWRcbiIsCisJCSAgICAgICB0YWJsZV9pZHgpOworCQltd2lmaWV4X3NjYW5fZGVsZXRlX3RhYmxlX2VudHJ5KHByaXYsIHRhYmxlX2lkeCk7CisJfQorCisJcmV0dXJuIHRhYmxlX2lkeCA9PSAtMSA/IC0xIDogMDsKK30KKworLyoKKyAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24gdXNlZCB0byBzdGFydCBhIHNjYW4gYmFzZWQgb24gYW4gaW5wdXQKKyAqIGNvbmZpZ3VyYXRpb24uCisgKgorICogVGhpcyB1c2VzIHRoZSBpbnB1dCB1c2VyIHNjYW4gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiB3aGVuIHByb3ZpZGVkIGluCisgKiBvcmRlciB0byBzZW5kIHRoZSBhcHByb3ByaWF0ZSBzY2FuIGNvbW1hbmRzIHRvIGZpcm13YXJlIHRvIHBvcHVsYXRlIG9yCisgKiB1cGRhdGUgdGhlIGludGVybmFsIGRyaXZlciBzY2FuIHRhYmxlLgorICovCitpbnQgbXdpZmlleF9zY2FuX25ldHdvcmtzKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgIGNvbnN0IHN0cnVjdCBtd2lmaWV4X3VzZXJfc2Nhbl9jZmcgKnVzZXJfc2Nhbl9pbikKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3QgY21kX2N0cmxfbm9kZSAqY21kX25vZGU7CisJdW5pb24gbXdpZmlleF9zY2FuX2NtZF9jb25maWdfdGx2ICpzY2FuX2NmZ19vdXQ7CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfY2hhbl9saXN0X3BhcmFtX3NldCAqY2hhbl9saXN0X291dDsKKwl1MzIgYnVmX3NpemU7CisJc3RydWN0IG13aWZpZXhfY2hhbl9zY2FuX3BhcmFtX3NldCAqc2Nhbl9jaGFuX2xpc3Q7CisJdTgga2VlcF9wcmV2aW91c19zY2FuOworCXU4IGZpbHRlcmVkX3NjYW47CisJdTggc2Nhbl9jdXJyZW50X2NoYW5fb25seTsKKwl1OCBtYXhfY2hhbl9wZXJfc2NhbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGFkYXB0ZXItPnNjYW5fcHJvY2Vzc2luZykgeworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImNtZDogU2NhbiBhbHJlYWR5IGluIHByb2Nlc3MuLi5cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5td2lmaWV4X2NtZF9sb2NrLCBmbGFncyk7CisJYWRhcHRlci0+c2Nhbl9wcm9jZXNzaW5nID0gdHJ1ZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5td2lmaWV4X2NtZF9sb2NrLCBmbGFncyk7CisKKwlpZiAocHJpdi0+c2Nhbl9ibG9jaykgeworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwKKwkJCSJjbWQ6IFNjYW4gaXMgYmxvY2tlZCBkdXJpbmcgYXNzb2NpYXRpb24uLi5cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXNjYW5fY2ZnX291dCA9IGt6YWxsb2Moc2l6ZW9mKHVuaW9uIG13aWZpZXhfc2Nhbl9jbWRfY29uZmlnX3RsdiksCisJCQkJCUdGUF9LRVJORUwpOworCWlmICghc2Nhbl9jZmdfb3V0KSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jIHNjYW5fY2ZnX291dFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWJ1Zl9zaXplID0gc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2NoYW5fc2Nhbl9wYXJhbV9zZXQpICoKKwkJCU1XSUZJRVhfVVNFUl9TQ0FOX0NIQU5fTUFYOworCXNjYW5fY2hhbl9saXN0ID0ga3phbGxvYyhidWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzY2FuX2NoYW5fbGlzdCkgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgImZhaWxlZCB0byBhbGxvYyBzY2FuX2NoYW5fbGlzdFxuIik7CisJCWtmcmVlKHNjYW5fY2ZnX291dCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWtlZXBfcHJldmlvdXNfc2NhbiA9IGZhbHNlOworCisJbXdpZmlleF9zY2FuX3NldHVwX3NjYW5fY29uZmlnKHByaXYsIHVzZXJfc2Nhbl9pbiwKKwkJCQkgICAgICAgJnNjYW5fY2ZnX291dC0+Y29uZmlnLCAmY2hhbl9saXN0X291dCwKKwkJCQkgICAgICAgc2Nhbl9jaGFuX2xpc3QsICZtYXhfY2hhbl9wZXJfc2NhbiwKKwkJCQkgICAgICAgJmZpbHRlcmVkX3NjYW4sICZzY2FuX2N1cnJlbnRfY2hhbl9vbmx5KTsKKworCWlmICh1c2VyX3NjYW5faW4pCisJCWtlZXBfcHJldmlvdXNfc2NhbiA9IHVzZXJfc2Nhbl9pbi0+a2VlcF9wcmV2aW91c19zY2FuOworCisKKwlpZiAoIWtlZXBfcHJldmlvdXNfc2NhbikgeworCQltZW1zZXQoYWRhcHRlci0+c2Nhbl90YWJsZSwgMHgwMCwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yKSAqIElXX01BWF9BUCk7CisJCWFkYXB0ZXItPm51bV9pbl9zY2FuX3RhYmxlID0gMDsKKwkJYWRhcHRlci0+YmNuX2J1Zl9lbmQgPSBhZGFwdGVyLT5iY25fYnVmOworCX0KKworCXJldCA9IG13aWZpZXhfc2Nhbl9jaGFubmVsX2xpc3QocHJpdiwgbWF4X2NoYW5fcGVyX3NjYW4sIGZpbHRlcmVkX3NjYW4sCisJCQkJCSZzY2FuX2NmZ19vdXQtPmNvbmZpZywgY2hhbl9saXN0X291dCwKKwkJCQkJc2Nhbl9jaGFuX2xpc3QpOworCisJLyogR2V0IHNjYW4gY29tbWFuZCBmcm9tIHNjYW5fcGVuZGluZ19xIGFuZCBwdXQgdG8gY21kX3BlbmRpbmdfcSAqLworCWlmICghcmV0KSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5zY2FuX3BlbmRpbmdfcV9sb2NrLCBmbGFncyk7CisJCWlmICghbGlzdF9lbXB0eSgmYWRhcHRlci0+c2Nhbl9wZW5kaW5nX3EpKSB7CisJCQljbWRfbm9kZSA9IGxpc3RfZmlyc3RfZW50cnkoJmFkYXB0ZXItPnNjYW5fcGVuZGluZ19xLAorCQkJCQkJc3RydWN0IGNtZF9jdHJsX25vZGUsIGxpc3QpOworCQkJbGlzdF9kZWwoJmNtZF9ub2RlLT5saXN0KTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnNjYW5fcGVuZGluZ19xX2xvY2ssCisJCQkJCQkJCQlmbGFncyk7CisJCQltd2lmaWV4X2luc2VydF9jbWRfdG9fcGVuZGluZ19xKGFkYXB0ZXIsIGNtZF9ub2RlLAorCQkJCQkJCXRydWUpOworCQl9IGVsc2UgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+c2Nhbl9wZW5kaW5nX3FfbG9jaywKKwkJCQkJICAgICAgIGZsYWdzKTsKKwkJfQorCX0gZWxzZSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5td2lmaWV4X2NtZF9sb2NrLCBmbGFncyk7CisJCWFkYXB0ZXItPnNjYW5fcHJvY2Vzc2luZyA9IHRydWU7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPm13aWZpZXhfY21kX2xvY2ssIGZsYWdzKTsKKwl9CisKKwlrZnJlZShzY2FuX2NmZ19vdXQpOworCWtmcmVlKHNjYW5fY2hhbl9saXN0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBhIHNjYW4gY29tbWFuZCB0byBiZSBzZW50IHRvIHRoZSBmaXJtd2FyZS4KKyAqCisgKiBUaGlzIHVzZXMgdGhlIHNjYW4gY29tbWFuZCBjb25maWd1cmF0aW9uIHNlbnQgdG8gdGhlIGNvbW1hbmQgcHJvY2Vzc2luZworICogbW9kdWxlIGluIGNvbW1hbmQgcHJlcGFyYXRpb24gc3RhZ2UgdG8gY29uZmlndXJlIGEgc2NhbiBjb21tYW5kIHN0cnVjdHVyZQorICogdG8gc2VuZCB0byBmaXJtd2FyZS4KKyAqCisgKiBUaGUgZml4ZWQgZmllbGRzIHNwZWNpZnlpbmcgdGhlIEJTUyB0eXBlIGFuZCBCU1NJRCBmaWx0ZXJzIGFzIHdlbGwgYXMgYQorICogdmFyaWFibGUgbnVtYmVyL2xlbmd0aCBvZiBUTFZzIGFyZSBzZW50IGluIHRoZSBjb21tYW5kIHRvIGZpcm13YXJlLgorICoKKyAqIFByZXBhcmF0aW9uIGFsc28gaW5jbHVkZXMgLQorICogICAgICAtIFNldHRpbmcgY29tbWFuZCBJRCwgYW5kIHByb3BlciBzaXplCisgKiAgICAgIC0gRW5zdXJpbmcgY29ycmVjdCBlbmRpYW4tbmVzcworICovCitpbnQgbXdpZmlleF9jbWRfODAyXzExX3NjYW4oc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwgdm9pZCAqZGF0YV9idWYpCit7CisJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9zY2FuICpzY2FuX2NtZCA9ICZjbWQtPnBhcmFtcy5zY2FuOworCXN0cnVjdCBtd2lmaWV4X3NjYW5fY21kX2NvbmZpZyAqc2Nhbl9jZmc7CisKKwlzY2FuX2NmZyA9IChzdHJ1Y3QgbXdpZmlleF9zY2FuX2NtZF9jb25maWcgKikgZGF0YV9idWY7CisKKwkvKiBTZXQgZml4ZWQgZmllbGQgdmFyaWFibGVzIGluIHNjYW4gY29tbWFuZCAqLworCXNjYW5fY21kLT5ic3NfbW9kZSA9IHNjYW5fY2ZnLT5ic3NfbW9kZTsKKwltZW1jcHkoc2Nhbl9jbWQtPmJzc2lkLCBzY2FuX2NmZy0+c3BlY2lmaWNfYnNzaWQsCisJICAgICAgIHNpemVvZihzY2FuX2NtZC0+YnNzaWQpKTsKKwltZW1jcHkoc2Nhbl9jbWQtPnRsdl9idWZmZXIsIHNjYW5fY2ZnLT50bHZfYnVmLCBzY2FuX2NmZy0+dGx2X2J1Zl9sZW4pOworCisJY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoSG9zdENtZF9DTURfODAyXzExX1NDQU4pOworCisJLyogU2l6ZSBpcyBlcXVhbCB0byB0aGUgc2l6ZW9mKGZpeGVkIHBvcnRpb25zKSArIHRoZSBUTFYgbGVuICsgaGVhZGVyICovCisJY21kLT5zaXplID0gY3B1X3RvX2xlMTYoKHUxNikgKHNpemVvZihzY2FuX2NtZC0+YnNzX21vZGUpCisJCQkJCSAgKyBzaXplb2Yoc2Nhbl9jbWQtPmJzc2lkKQorCQkJCQkgICsgc2Nhbl9jZmctPnRsdl9idWZfbGVuICsgU19EU19HRU4pKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjb21tYW5kIHJlc3BvbnNlIG9mIHNjYW4uCisgKgorICogVGhlIHJlc3BvbnNlIGJ1ZmZlciBmb3IgdGhlIHNjYW4gY29tbWFuZCBoYXMgdGhlIGZvbGxvd2luZworICogbWVtb3J5IGxheW91dDoKKyAqCisgKiAgICAgIC4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorICogICAgICB8ICBIZWFkZXIgKDQgKiBzaXplb2YodF91MTYpKTogIFN0YW5kYXJkIGNvbW1hbmQgcmVzcG9uc2UgaGRyIHwKKyAqICAgICAgLi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisgKiAgICAgIHwgIEJ1ZlNpemUgKHRfdTE2KSA6IHNpemVvZiB0aGUgQlNTIERlc2NyaXB0aW9uIGRhdGEgICAgICAgICAgfAorICogICAgICAuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyAqICAgICAgfCAgTnVtT2ZTZXQgKHRfdTgpIDogTnVtYmVyIG9mIEJTUyBEZXNjcyByZXR1cm5lZCAgICAgICAgICAgICB8CisgKiAgICAgIC4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorICogICAgICB8ICBCU1NEZXNjcmlwdGlvbiBkYXRhICh2YXJpYWJsZSwgc2l6ZSBnaXZlbiBpbiBCdWZTaXplKSAgICAgIHwKKyAqICAgICAgLi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisgKiAgICAgIHwgIFRMViBkYXRhICh2YXJpYWJsZSwgc2l6ZSBjYWxjdWxhdGVkIHVzaW5nIEhlYWRlci0+U2l6ZSwgICAgfAorICogICAgICB8ICAgICAgICAgICAgQnVmU2l6ZSBhbmQgc2l6ZW9mIHRoZSBmaXhlZCBmaWVsZHMgYWJvdmUpICAgICAgIHwKKyAqICAgICAgLi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisgKi8KK2ludCBtd2lmaWV4X3JldF84MDJfMTFfc2NhbihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBjbWRfY3RybF9ub2RlICpjbWRfbm9kZTsKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX3NjYW5fcnNwICpzY2FuX3JzcDsKKwlzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfbmV3X2VudHJ5ID0gTlVMTDsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19kYXRhICp0bHZfZGF0YTsKKwlzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc190c2ZfdGltZXN0YW1wICp0c2ZfdGx2OworCXU4ICpic3NfaW5mbzsKKwl1MzIgc2Nhbl9yZXNwX3NpemU7CisJdTMyIGJ5dGVzX2xlZnQ7CisJdTMyIG51bV9pbl90YWJsZTsKKwl1MzIgYnNzX2lkeDsKKwl1MzIgaWR4OworCXUzMiB0bHZfYnVmX3NpemU7CisJbG9uZyBsb25nIHRzZl92YWw7CisJc3RydWN0IG13aWZpZXhfY2hhbl9mcmVxX3Bvd2VyICpjZnA7CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfY2hhbl9iYW5kX2xpc3RfcGFyYW1fc2V0ICpjaGFuX2JhbmRfdGx2OworCXN0cnVjdCBjaGFuX2JhbmRfcGFyYW1fc2V0ICpjaGFuX2JhbmQ7CisJdTggYmFuZDsKKwl1OCBpc19iZ3NjYW5fcmVzcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaXNfYmdzY2FuX3Jlc3AgPSAobGUxNl90b19jcHUocmVzcC0+Y29tbWFuZCkKKwkJPT0gSG9zdENtZF9DTURfODAyXzExX0JHX1NDQU5fUVVFUlkpOworCWlmIChpc19iZ3NjYW5fcmVzcCkKKwkJc2Nhbl9yc3AgPSAmcmVzcC0+cGFyYW1zLmJnX3NjYW5fcXVlcnlfcmVzcC5zY2FuX3Jlc3A7CisJZWxzZQorCQlzY2FuX3JzcCA9ICZyZXNwLT5wYXJhbXMuc2Nhbl9yZXNwOworCisKKwlpZiAoc2Nhbl9yc3AtPm51bWJlcl9vZl9zZXRzID4gSVdfTUFYX0FQKSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiU0NBTl9SRVNQOiB0b28gbWFueSBBUCByZXR1cm5lZCAoJWQpXG4iLAorCQkgICAgICAgc2Nhbl9yc3AtPm51bWJlcl9vZl9zZXRzKTsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlieXRlc19sZWZ0ID0gbGUxNl90b19jcHUoc2Nhbl9yc3AtPmJzc19kZXNjcmlwdF9zaXplKTsKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IFNDQU5fUkVTUDogYnNzX2Rlc2NyaXB0X3NpemUgJWRcbiIsCisJCQkJCQlieXRlc19sZWZ0KTsKKworCXNjYW5fcmVzcF9zaXplID0gbGUxNl90b19jcHUocmVzcC0+c2l6ZSk7CisKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwKKwkJImluZm86IFNDQU5fUkVTUDogcmV0dXJuZWQgJWQgQVBzIGJlZm9yZSBwYXJzaW5nXG4iLAorCSAgICAgICBzY2FuX3JzcC0+bnVtYmVyX29mX3NldHMpOworCisJbnVtX2luX3RhYmxlID0gYWRhcHRlci0+bnVtX2luX3NjYW5fdGFibGU7CisJYnNzX2luZm8gPSBzY2FuX3JzcC0+YnNzX2Rlc2NfYW5kX3Rsdl9idWZmZXI7CisKKwkvKgorCSAqIFRoZSBzaXplIG9mIHRoZSBUTFYgYnVmZmVyIGlzIGVxdWFsIHRvIHRoZSBlbnRpcmUgY29tbWFuZCByZXNwb25zZQorCSAqICAgc2l6ZSAoc2Nhbl9yZXNwX3NpemUpIG1pbnVzIHRoZSBmaXhlZCBmaWVsZHMgKHNpemVvZigpJ3MpLCB0aGUKKwkgKiAgIEJTUyBEZXNjcmlwdGlvbnMgKGJzc19kZXNjcmlwdF9zaXplIGFzIGJ5dGVzTGVmKSBhbmQgdGhlIGNvbW1hbmQKKwkgKiAgIHJlc3BvbnNlIGhlYWRlciAoU19EU19HRU4pCisJICovCisJdGx2X2J1Zl9zaXplID0gc2Nhbl9yZXNwX3NpemUgLSAoYnl0ZXNfbGVmdAorCQkJCQkgKyBzaXplb2Yoc2Nhbl9yc3AtPmJzc19kZXNjcmlwdF9zaXplKQorCQkJCQkgKyBzaXplb2Yoc2Nhbl9yc3AtPm51bWJlcl9vZl9zZXRzKQorCQkJCQkgKyBTX0RTX0dFTik7CisKKwl0bHZfZGF0YSA9IChzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19kYXRhICopIChzY2FuX3JzcC0+CisJCQkJCQkgYnNzX2Rlc2NfYW5kX3Rsdl9idWZmZXIgKworCQkJCQkJIGJ5dGVzX2xlZnQpOworCisJLyogU2VhcmNoIHRoZSBUTFYgYnVmZmVyIHNwYWNlIGluIHRoZSBzY2FuIHJlc3BvbnNlIGZvciBhbnkgdmFsaWQKKwkgICBUTFZzICovCisJbXdpZmlleF9yZXRfODAyXzExX3NjYW5fZ2V0X3Rsdl9wdHJzKGFkYXB0ZXIsIHRsdl9kYXRhLCB0bHZfYnVmX3NpemUsCisJCQkJCSAgICAgVExWX1RZUEVfVFNGVElNRVNUQU1QLAorCQkJCQkgICAgIChzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19kYXRhICoqKQorCQkJCQkgICAgICZ0c2ZfdGx2KTsKKworCS8qIFNlYXJjaCB0aGUgVExWIGJ1ZmZlciBzcGFjZSBpbiB0aGUgc2NhbiByZXNwb25zZSBmb3IgYW55IHZhbGlkCisJICAgVExWcyAqLworCW13aWZpZXhfcmV0XzgwMl8xMV9zY2FuX2dldF90bHZfcHRycyhhZGFwdGVyLCB0bHZfZGF0YSwgdGx2X2J1Zl9zaXplLAorCQkJCQkgICAgIFRMVl9UWVBFX0NIQU5ORUxCQU5ETElTVCwKKwkJCQkJICAgICAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfZGF0YSAqKikKKwkJCQkJICAgICAmY2hhbl9iYW5kX3Rsdik7CisKKwkvKgorCSAqICBQcm9jZXNzIGVhY2ggc2NhbiByZXNwb25zZSByZXR1cm5lZCAoc2Nhbl9yc3AtPm51bWJlcl9vZl9zZXRzKS4KKwkgKiAgU2F2ZSB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIGJzc19uZXdfZW50cnkgYW5kIHRoZW4gaW5zZXJ0IGludG8gdGhlCisJICogIGRyaXZlciBzY2FuIHRhYmxlIGVpdGhlciBhcyBhbiB1cGRhdGUgdG8gYW4gZXhpc3RpbmcgZW50cnkKKwkgKiAgb3IgYXMgYW4gYWRkaXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgdGFibGUKKwkgKi8KKwlic3NfbmV3X2VudHJ5ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciksCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFic3NfbmV3X2VudHJ5KSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiIGZhaWxlZCB0byBhbGxvYyBic3NfbmV3X2VudHJ5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZm9yIChpZHggPSAwOyBpZHggPCBzY2FuX3JzcC0+bnVtYmVyX29mX3NldHMgJiYgYnl0ZXNfbGVmdDsgaWR4KyspIHsKKwkJLyogWmVybyBvdXQgdGhlIGJzc19uZXdfZW50cnkgd2UgYXJlIGFib3V0IHRvIHN0b3JlIGluZm8gaW4gKi8KKwkJbWVtc2V0KGJzc19uZXdfZW50cnksIDB4MDAsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvcikpOworCisJCWlmIChtd2lmaWV4X2ludGVycHJldF9ic3NfZGVzY193aXRoX2llKGFkYXB0ZXIsIGJzc19uZXdfZW50cnksCisJCQkJCQkJJmJzc19pbmZvLAorCQkJCQkJCSZieXRlc19sZWZ0KSkgeworCQkJLyogRXJyb3IgcGFyc2luZy9pbnRlcnByZXRpbmcgc2NhbiByZXNwb25zZSwgc2tpcHBlZCAqLworCQkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJTQ0FOX1JFU1A6ICIKKwkJCSAgICAgICAibXdpZmlleF9pbnRlcnByZXRfYnNzX2Rlc2Nfd2l0aF9pZSAiCisJCQkgICAgICAgInJldHVybmVkIEVSUk9SXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogUHJvY2VzcyB0aGUgZGF0YSBmaWVsZHMgYW5kIElFcyByZXR1cm5lZCBmb3IgdGhpcyBCU1MgKi8KKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBTQ0FOX1JFU1A6IEJTU0lEID0gJXBNXG4iLAorCQkgICAgICAgYnNzX25ld19lbnRyeS0+bWFjX2FkZHJlc3MpOworCisJCS8qIFNlYXJjaCB0aGUgc2NhbiB0YWJsZSBmb3IgdGhlIHNhbWUgYnNzaWQgKi8KKwkJZm9yIChic3NfaWR4ID0gMDsgYnNzX2lkeCA8IG51bV9pbl90YWJsZTsgYnNzX2lkeCsrKSB7CisJCQlpZiAobWVtY21wKGJzc19uZXdfZW50cnktPm1hY19hZGRyZXNzLAorCQkJCWFkYXB0ZXItPnNjYW5fdGFibGVbYnNzX2lkeF0ubWFjX2FkZHJlc3MsCisJCQkJc2l6ZW9mKGJzc19uZXdfZW50cnktPm1hY19hZGRyZXNzKSkpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qCisJCQkgKiBJZiB0aGUgU1NJRCBtYXRjaGVzIGFzIHdlbGwsIGl0IGlzIGEKKwkJCSAqIGR1cGxpY2F0ZSBvZiB0aGlzIGVudHJ5LiAgS2VlcCB0aGUgYnNzX2lkeAorCQkJICogc2V0IHRvIHRoaXMgZW50cnkgc28gd2UgcmVwbGFjZSB0aGUgb2xkCisJCQkgKiBjb250ZW50cyBpbiB0aGUgdGFibGUKKwkJCSAqLworCQkJaWYgKChic3NfbmV3X2VudHJ5LT5zc2lkLnNzaWRfbGVuCisJCQkJPT0gYWRhcHRlci0+c2Nhbl90YWJsZVtic3NfaWR4XS4gc3NpZC5zc2lkX2xlbikKKwkJCQkJJiYgKCFtZW1jbXAoYnNzX25ld19lbnRyeS0+c3NpZC5zc2lkLAorCQkJCQlhZGFwdGVyLT5zY2FuX3RhYmxlW2Jzc19pZHhdLnNzaWQuc3NpZCwKKwkJCQkJYnNzX25ld19lbnRyeS0+c3NpZC5zc2lkX2xlbikpKSB7CisJCQkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBTQ0FOX1JFU1A6IgorCQkJCQkiIGR1cGxpY2F0ZSBvZiBpbmRleDogJWRcbiIsIGJzc19pZHgpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCS8qCisJCSAqIElmIHRoZSBic3NfaWR4IGlzIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbgorCQkgKiB0aGUgdGFibGUsIHRoZSBuZXcgZW50cnkgd2FzIG5vdCBhIGR1cGxpY2F0ZTsgYXBwZW5kCisJCSAqIGl0IHRvIHRoZSBzY2FuIHRhYmxlCisJCSAqLworCQlpZiAoYnNzX2lkeCA9PSBudW1faW5fdGFibGUpIHsKKwkJCS8qIFJhbmdlIGNoZWNrIHRoZSBic3NfaWR4LCBrZWVwIGl0IGxpbWl0ZWQgdG8KKwkJCSAgIHRoZSBsYXN0IGVudHJ5ICovCisJCQlpZiAoYnNzX2lkeCA9PSBJV19NQVhfQVApCisJCQkJYnNzX2lkeC0tOworCQkJZWxzZQorCQkJCW51bV9pbl90YWJsZSsrOworCQl9CisKKwkJLyoKKwkJICogU2F2ZSB0aGUgYmVhY29uL3Byb2JlIHJlc3BvbnNlIHJldHVybmVkIGZvciBsYXRlciBhcHBsaWNhdGlvbgorCQkgKiByZXRyaWV2YWwuICBEdXBsaWNhdGUgYmVhY29uL3Byb2JlIHJlc3BvbnNlcyBhcmUgdXBkYXRlZCBpZgorCQkgKiBwb3NzaWJsZQorCQkgKi8KKwkJbXdpZmlleF9yZXRfODAyXzExX3NjYW5fc3RvcmVfYmVhY29uKHByaXYsIGJzc19pZHgsCisJCQkJCQludW1faW5fdGFibGUsIGJzc19uZXdfZW50cnkpOworCQkvKgorCQkgKiBJZiB0aGUgVFNGIFRMViB3YXMgYXBwZW5kZWQgdG8gdGhlIHNjYW4gcmVzdWx0cywgc2F2ZSB0aGlzCisJCSAqIGVudHJ5J3MgVFNGIHZhbHVlIGluIHRoZSBuZXR3b3JrVFNGIGZpZWxkLlRoZSBuZXR3b3JrVFNGIGlzCisJCSAqIHRoZSBmaXJtd2FyZSdzIFRTRiB2YWx1ZSBhdCB0aGUgdGltZSB0aGUgYmVhY29uIG9yIHByb2JlCisJCSAqIHJlc3BvbnNlIHdhcyByZWNlaXZlZC4KKwkJICovCisJCWlmICh0c2ZfdGx2KSB7CisJCQltZW1jcHkoJnRzZl92YWwsICZ0c2ZfdGx2LT50c2ZfZGF0YVtpZHggKiBUU0ZfREFUQV9TSVpFXQorCQkJCQksIHNpemVvZih0c2ZfdmFsKSk7CisJCQltZW1jcHkoJmJzc19uZXdfZW50cnktPm5ldHdvcmtfdHNmLCAmdHNmX3ZhbCwKKwkJCQkJc2l6ZW9mKGJzc19uZXdfZW50cnktPm5ldHdvcmtfdHNmKSk7CisJCX0KKwkJYmFuZCA9IEJBTkRfRzsKKwkJaWYgKGNoYW5fYmFuZF90bHYpIHsKKwkJCWNoYW5fYmFuZCA9ICZjaGFuX2JhbmRfdGx2LT5jaGFuX2JhbmRfcGFyYW1baWR4XTsKKwkJCWJhbmQgPSBtd2lmaWV4X3JhZGlvX3R5cGVfdG9fYmFuZChjaGFuX2JhbmQtPnJhZGlvX3R5cGUKKwkJCQkJJiAoQklUKDApIHwgQklUKDEpKSk7CisJCX0KKworCQkvKiBTYXZlIHRoZSBiYW5kIGRlc2lnbmF0aW9uIGZvciB0aGlzIGVudHJ5IGZvciB1c2UgaW4gam9pbiAqLworCQlic3NfbmV3X2VudHJ5LT5ic3NfYmFuZCA9IGJhbmQ7CisJCWNmcCA9IG13aWZpZXhfZ2V0X2NmcF9ieV9iYW5kX2FuZF9jaGFubmVsX2Zyb21fY2ZnODAyMTEocHJpdiwKKwkJCQkJKHU4KSBic3NfbmV3X2VudHJ5LT5ic3NfYmFuZCwKKwkJCQkJKHUxNilic3NfbmV3X2VudHJ5LT5jaGFubmVsKTsKKworCQlpZiAoY2ZwKQorCQkJYnNzX25ld19lbnRyeS0+ZnJlcSA9IGNmcC0+ZnJlcTsKKwkJZWxzZQorCQkJYnNzX25ld19lbnRyeS0+ZnJlcSA9IDA7CisKKwkJLyogQ29weSB0aGUgbG9jYWxseSBjcmVhdGVkIGJzc19uZXdfZW50cnkgdG8gdGhlIHNjYW4gdGFibGUgKi8KKwkJbWVtY3B5KCZhZGFwdGVyLT5zY2FuX3RhYmxlW2Jzc19pZHhdLCBic3NfbmV3X2VudHJ5LAorCQkgICAgICAgc2l6ZW9mKGFkYXB0ZXItPnNjYW5fdGFibGVbYnNzX2lkeF0pKTsKKworCX0KKworCWRldl9kYmcoYWRhcHRlci0+ZGV2LAorCQkiaW5mbzogU0NBTl9SRVNQOiBTY2FubmVkICUyZCBBUHMsICVkIHZhbGlkLCAlZCB0b3RhbFxuIiwKKwkgICAgICAgc2Nhbl9yc3AtPm51bWJlcl9vZl9zZXRzLAorCSAgICAgICBudW1faW5fdGFibGUgLSBhZGFwdGVyLT5udW1faW5fc2Nhbl90YWJsZSwgbnVtX2luX3RhYmxlKTsKKworCS8qIFVwZGF0ZSB0aGUgdG90YWwgbnVtYmVyIG9mIEJTU0lEcyBpbiB0aGUgc2NhbiB0YWJsZSAqLworCWFkYXB0ZXItPm51bV9pbl9zY2FuX3RhYmxlID0gbnVtX2luX3RhYmxlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnNjYW5fcGVuZGluZ19xX2xvY2ssIGZsYWdzKTsKKwlpZiAobGlzdF9lbXB0eSgmYWRhcHRlci0+c2Nhbl9wZW5kaW5nX3EpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnNjYW5fcGVuZGluZ19xX2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPm13aWZpZXhfY21kX2xvY2ssIGZsYWdzKTsKKwkJYWRhcHRlci0+c2Nhbl9wcm9jZXNzaW5nID0gZmFsc2U7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPm13aWZpZXhfY21kX2xvY2ssIGZsYWdzKTsKKwkJLyoKKwkJICogUHJvY2VzcyB0aGUgcmVzdWx0aW5nIHNjYW4gdGFibGU6CisJCSAqICAgLSBSZW1vdmUgYW55IGJhZCBzc2lkcworCQkgKiAgIC0gVXBkYXRlIG91ciBjdXJyZW50IEJTUyBpbmZvcm1hdGlvbiBmcm9tIHNjYW4gZGF0YQorCQkgKi8KKwkJbXdpZmlleF9wcm9jZXNzX3NjYW5fcmVzdWx0cyhwcml2KTsKKworCQkvKiBOZWVkIHRvIGluZGljYXRlIElPQ1RMIGNvbXBsZXRlICovCisJCWlmIChhZGFwdGVyLT5jdXJyX2NtZC0+d2FpdF9xX2VuYWJsZWQpIHsKKwkJCWFkYXB0ZXItPmNtZF93YWl0X3Euc3RhdHVzID0gMDsKKwkJCW13aWZpZXhfY29tcGxldGVfY21kKGFkYXB0ZXIpOworCQl9CisJCWlmIChwcml2LT5yZXBvcnRfc2Nhbl9yZXN1bHQpCisJCQlwcml2LT5yZXBvcnRfc2Nhbl9yZXN1bHQgPSBmYWxzZTsKKwkJaWYgKHByaXYtPnNjYW5fcGVuZGluZ19vbl9ibG9jaykgeworCQkJcHJpdi0+c2Nhbl9wZW5kaW5nX29uX2Jsb2NrID0gZmFsc2U7CisJCQl1cCgmcHJpdi0+YXN5bmNfc2VtKTsKKwkJfQorCisJfSBlbHNlIHsKKwkJLyogR2V0IHNjYW4gY29tbWFuZCBmcm9tIHNjYW5fcGVuZGluZ19xIGFuZCBwdXQgdG8KKwkJICAgY21kX3BlbmRpbmdfcSAqLworCQljbWRfbm9kZSA9IGxpc3RfZmlyc3RfZW50cnkoJmFkYXB0ZXItPnNjYW5fcGVuZGluZ19xLAorCQkJCQkgICAgc3RydWN0IGNtZF9jdHJsX25vZGUsIGxpc3QpOworCQlsaXN0X2RlbCgmY21kX25vZGUtPmxpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5zY2FuX3BlbmRpbmdfcV9sb2NrLCBmbGFncyk7CisKKwkJbXdpZmlleF9pbnNlcnRfY21kX3RvX3BlbmRpbmdfcShhZGFwdGVyLCBjbWRfbm9kZSwgdHJ1ZSk7CisJfQorCitkb25lOgorCWtmcmVlKCh1OCAqKSBic3NfbmV3X2VudHJ5KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBjb21tYW5kIGZvciBiYWNrZ3JvdW5kIHNjYW4gcXVlcnkuCisgKgorICogUHJlcGFyYXRpb24gaW5jbHVkZXMgLQorICogICAgICAtIFNldHRpbmcgY29tbWFuZCBJRCBhbmQgcHJvcGVyIHNpemUKKyAqICAgICAgLSBTZXR0aW5nIGJhY2tncm91bmQgc2NhbiBmbHVzaCBwYXJhbWV0ZXIKKyAqICAgICAgLSBFbnN1cmluZyBjb3JyZWN0IGVuZGlhbi1uZXNzCisgKi8KK2ludCBtd2lmaWV4X2NtZF84MDJfMTFfYmdfc2Nhbl9xdWVyeShzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kKQoreworCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfYmdfc2Nhbl9xdWVyeSAqYmdfcXVlcnkgPQorCQkmY21kLT5wYXJhbXMuYmdfc2Nhbl9xdWVyeTsKKworCWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KEhvc3RDbWRfQ01EXzgwMl8xMV9CR19TQ0FOX1FVRVJZKTsKKwljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9iZ19zY2FuX3F1ZXJ5KQorCQkJCSsgU19EU19HRU4pOworCisJYmdfcXVlcnktPmZsdXNoID0gMTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBmaW5kcyBhIFNTSUQgaW4gdGhlIHNjYW4gdGFibGUuCisgKgorICogQSBCU1NJRCBtYXkgb3B0aW9uYWxseSBiZSBwcm92aWRlZCB0byBxdWFsaWZ5IHRoZSBTU0lELgorICogRm9yIG5vbi1BdXRvIG1vZGUsIGZ1cnRoZXIgY2hlY2sgaXMgbWFkZSB0byBtYWtlIHN1cmUgdGhlCisgKiBCU1MgZm91bmQgaW4gdGhlIHNjYW4gdGFibGUgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50CisgKiBzZXR0aW5ncyBvZiB0aGUgZHJpdmVyLgorICovCitzMzIKK213aWZpZXhfZmluZF9zc2lkX2luX2xpc3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgc3RydWN0IG13aWZpZXhfODAyXzExX3NzaWQgKnNzaWQsIHU4ICpic3NpZCwKKwkJCSAgdTMyIG1vZGUpCit7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJczMyIG5ldCA9IC0xLCBqOworCXU4IGJlc3RfcnNzaSA9IDA7CisJdTMyIGk7CisKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IG51bSBvZiBlbnRyaWVzIGluIHRhYmxlID0gJWRcbiIsCisJICAgICAgIGFkYXB0ZXItPm51bV9pbl9zY2FuX3RhYmxlKTsKKworCS8qCisJICogTG9vcCB0aHJvdWdoIHRoZSB0YWJsZSB1bnRpbCB0aGUgbWF4aW11bSBpcyByZWFjaGVkIG9yIHVudGlsIGEgbWF0Y2gKKwkgKiAgIGlzIGZvdW5kIGJhc2VkIG9uIHRoZSBic3NpZCBmaWVsZCBjb21wYXJpc29uCisJICovCisJZm9yIChpID0gMDsKKwkgICAgIGkgPCBhZGFwdGVyLT5udW1faW5fc2Nhbl90YWJsZSAmJiAoIWJzc2lkIHx8IChic3NpZCAmJiBuZXQgPCAwKSk7CisJICAgICBpKyspIHsKKwkJaWYgKCFtd2lmaWV4X3NzaWRfY21wKCZhZGFwdGVyLT5zY2FuX3RhYmxlW2ldLnNzaWQsIHNzaWQpICYmCisJCSAgICAoIWJzc2lkCisJCSAgICAgfHwgIW1lbWNtcChhZGFwdGVyLT5zY2FuX3RhYmxlW2ldLm1hY19hZGRyZXNzLCBic3NpZCwKKwkJCQlFVEhfQUxFTikpCisJCSAgICAmJgorCQkgICAgKG13aWZpZXhfZ2V0X2NmcF9ieV9iYW5kX2FuZF9jaGFubmVsX2Zyb21fY2ZnODAyMTEKKwkJICAgICAocHJpdiwgKHU4KSBhZGFwdGVyLT5zY2FuX3RhYmxlW2ldLmJzc19iYW5kLAorCQkgICAgICAodTE2KSBhZGFwdGVyLT5zY2FuX3RhYmxlW2ldLmNoYW5uZWwpKSkgeworCQkJc3dpdGNoIChtb2RlKSB7CisJCQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQkJCWogPSBtd2lmaWV4X2lzX25ldHdvcmtfY29tcGF0aWJsZShwcml2LCBpLAorCQkJCQkJCQkgIG1vZGUpOworCisJCQkJaWYgKGogPj0gMCkgeworCQkJCQlpZiAoU0NBTl9SU1NJCisJCQkJCSAgICAoYWRhcHRlci0+c2Nhbl90YWJsZVtpXS5yc3NpKSA+CisJCQkJCSAgICBiZXN0X3Jzc2kpIHsKKwkJCQkJCWJlc3RfcnNzaSA9IFNDQU5fUlNTSShhZGFwdGVyLT4KKwkJCQkJCQkJICBzY2FuX3RhYmxlCisJCQkJCQkJCSAgW2ldLnJzc2kpOworCQkJCQkJbmV0ID0gaTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWlmIChuZXQgPT0gLTEpCisJCQkJCQluZXQgPSBqOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ6CisJCQlkZWZhdWx0OgorCQkJCS8qCisJCQkJICogRG8gbm90IGNoZWNrIGNvbXBhdGliaWxpdHkgaWYgdGhlIG1vZGUKKwkJCQkgKiByZXF1ZXN0ZWQgaXMgQXV0by9Vbmtub3duLiAgQWxsb3dzIGdlbmVyaWMKKwkJCQkgKiBmaW5kIHRvIHdvcmsgd2l0aG91dCB2ZXJpZnlpbmcgYWdhaW5zdCB0aGUKKwkJCQkgKiBBZGFwdGVyIHNlY3VyaXR5IHNldHRpbmdzCisJCQkJICovCisJCQkJaWYgKFNDQU5fUlNTSShhZGFwdGVyLT5zY2FuX3RhYmxlW2ldLnJzc2kpID4KKwkJCQkgICAgYmVzdF9yc3NpKSB7CisJCQkJCWJlc3RfcnNzaSA9IFNDQU5fUlNTSShhZGFwdGVyLT4KKwkJCQkJCQkgIHNjYW5fdGFibGVbaV0ucnNzaSk7CisJCQkJCW5ldCA9IGk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIG5ldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZmluZHMgYSBzcGVjaWZpYyBjb21wYXRpYmxlIEJTU0lEIGluIHRoZSBzY2FuIGxpc3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBsb29wcyB0aHJvdWdoIHRoZSBzY2FuIHRhYmxlIGxvb2tpbmcgZm9yIGEgY29tcGF0aWJsZQorICogbWF0Y2guIElmIGEgQlNTSUQgbWF0Y2hlcywgYnV0IHRoZSBCU1MgaXMgZm91bmQgdG8gYmUgbm90IGNvbXBhdGlibGUKKyAqIHRoZSBmdW5jdGlvbiBpZ25vcmVzIGl0IGFuZCBjb250aW51ZXMgdG8gc2VhcmNoIHRocm91Z2ggdGhlIHJlc3Qgb2YKKyAqIHRoZSBlbnRyaWVzIGluIGNhc2UgdGhlcmUgaXMgYW4gQVAgd2l0aCBtdWx0aXBsZSBTU0lEcyBhc3NpZ25lZCB0bworICogdGhlIHNhbWUgQlNTSUQuCisgKi8KK3MzMgorbXdpZmlleF9maW5kX2Jzc2lkX2luX2xpc3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggKmJzc2lkLAorCQkJICAgdTMyIG1vZGUpCit7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJczMyIG5ldCA9IC0xOworCXUzMiBpOworCisJaWYgKCFic3NpZCkKKwkJcmV0dXJuIC0xOworCisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBGaW5kQlNTSUQ6IE51bSBvZiBCU1NJRHMgPSAlZFxuIiwKKwkgICAgICAgYWRhcHRlci0+bnVtX2luX3NjYW5fdGFibGUpOworCisJLyoKKwkgKiBMb29rIHRocm91Z2ggdGhlIHNjYW4gdGFibGUgZm9yIGEgY29tcGF0aWJsZSBtYXRjaC4gVGhlIHJldCByZXR1cm4KKwkgKiAgIHZhcmlhYmxlIHdpbGwgYmUgZXF1YWwgdG8gdGhlIGluZGV4IGluIHRoZSBzY2FuIHRhYmxlIChncmVhdGVyCisJICogICB0aGFuIHplcm8pIGlmIHRoZSBuZXR3b3JrIGlzIGNvbXBhdGlibGUuICBUaGUgbG9vcCB3aWxsIGNvbnRpbnVlCisJICogICBwYXN0IGEgbWF0Y2hlZCBic3NpZCB0aGF0IGlzIG5vdCBjb21wYXRpYmxlIGluIGNhc2UgdGhlcmUgaXMgYW4KKwkgKiAgIEFQIHdpdGggbXVsdGlwbGUgU1NJRHMgYXNzaWduZWQgdG8gdGhlIHNhbWUgQlNTSUQKKwkgKi8KKwlmb3IgKGkgPSAwOyBuZXQgPCAwICYmIGkgPCBhZGFwdGVyLT5udW1faW5fc2Nhbl90YWJsZTsgaSsrKSB7CisJCWlmICghbWVtY21wCisJCSAgICAoYWRhcHRlci0+c2Nhbl90YWJsZVtpXS5tYWNfYWRkcmVzcywgYnNzaWQsIEVUSF9BTEVOKQorCQkJJiYgbXdpZmlleF9nZXRfY2ZwX2J5X2JhbmRfYW5kX2NoYW5uZWxfZnJvbV9jZmc4MDIxMQorCQkJCQkJCQkocHJpdiwKKwkJCQkJCQkgICAgKHU4KSBhZGFwdGVyLT4KKwkJCQkJCQkgICAgc2Nhbl90YWJsZVtpXS4KKwkJCQkJCQkgICAgYnNzX2JhbmQsCisJCQkJCQkJICAgICh1MTYpIGFkYXB0ZXItPgorCQkJCQkJCSAgICBzY2FuX3RhYmxlW2ldLgorCQkJCQkJCSAgICBjaGFubmVsKSkgeworCQkJc3dpdGNoIChtb2RlKSB7CisJCQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQkJCW5ldCA9IG13aWZpZXhfaXNfbmV0d29ya19jb21wYXRpYmxlKHByaXYsIGksCisJCQkJCQkJCSAgICBtb2RlKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJbmV0ID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBuZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGluc2VydHMgc2NhbiBjb21tYW5kIG5vZGUgdG8gdGhlIHNjYW4gcGVuZGluZyBxdWV1ZS4KKyAqLwordm9pZAorbXdpZmlleF9xdWV1ZV9zY2FuX2NtZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkgICAgICAgc3RydWN0IGNtZF9jdHJsX25vZGUgKmNtZF9ub2RlKQoreworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljbWRfbm9kZS0+d2FpdF9xX2VuYWJsZWQgPSB0cnVlOworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5zY2FuX3BlbmRpbmdfcV9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmY21kX25vZGUtPmxpc3QsICZhZGFwdGVyLT5zY2FuX3BlbmRpbmdfcSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+c2Nhbl9wZW5kaW5nX3FfbG9jaywgZmxhZ3MpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBmaW5kcyBhbiBBUCB3aXRoIHNwZWNpZmljIHNzaWQgaW4gdGhlIHNjYW4gbGlzdC4KKyAqLworaW50IG13aWZpZXhfZmluZF9iZXN0X25ldHdvcmsoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCBtd2lmaWV4X3NzaWRfYnNzaWQgKnJlcV9zc2lkX2Jzc2lkKQoreworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKnJlcV9ic3M7CisJczMyIGk7CisKKwltZW1zZXQocmVxX3NzaWRfYnNzaWQsIDAsIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9zc2lkX2Jzc2lkKSk7CisKKwlpID0gbXdpZmlleF9maW5kX2Jlc3RfbmV0d29ya19pbl9saXN0KHByaXYpOworCisJaWYgKGkgPj0gMCkgeworCQlyZXFfYnNzID0gJmFkYXB0ZXItPnNjYW5fdGFibGVbaV07CisJCW1lbWNweSgmcmVxX3NzaWRfYnNzaWQtPnNzaWQsICZyZXFfYnNzLT5zc2lkLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4XzgwMl8xMV9zc2lkKSk7CisJCW1lbWNweSgodTggKikgJnJlcV9zc2lkX2Jzc2lkLT5ic3NpZCwKKwkJICAgICAgICh1OCAqKSAmcmVxX2Jzcy0+bWFjX2FkZHJlc3MsIEVUSF9BTEVOKTsKKworCQkvKiBNYWtlIHN1cmUgd2UgYXJlIGluIHRoZSByaWdodCBtb2RlICovCisJCWlmIChwcml2LT5ic3NfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCkKKwkJCXByaXYtPmJzc19tb2RlID0gcmVxX2Jzcy0+YnNzX21vZGU7CisJfQorCisJaWYgKCFyZXFfc3NpZF9ic3NpZC0+c3NpZC5zc2lkX2xlbikKKwkJcmV0dXJuIC0xOworCisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBCZXN0IG5ldHdvcmsgZm91bmQgPSBbJXNdLCAiCisJICAgICAgICJbJXBNXVxuIiwgcmVxX3NzaWRfYnNzaWQtPnNzaWQuc3NpZCwKKwkgICAgICAgcmVxX3NzaWRfYnNzaWQtPmJzc2lkKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBzZW5kcyBhIHNjYW4gY29tbWFuZCBmb3IgYWxsIGF2YWlsYWJsZSBjaGFubmVscyB0byB0aGUKKyAqIGZpcm13YXJlLCBmaWx0ZXJlZCBvbiBhIHNwZWNpZmljIFNTSUQuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9zY2FuX3NwZWNpZmljX3NzaWQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgICAgICBzdHJ1Y3QgbXdpZmlleF84MDJfMTFfc3NpZCAqcmVxX3NzaWQpCit7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJaW50IHJldCA9IDA7CisJc3RydWN0IG13aWZpZXhfdXNlcl9zY2FuX2NmZyAqc2Nhbl9jZmc7CisKKwlpZiAoIXJlcV9zc2lkKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoYWRhcHRlci0+c2Nhbl9wcm9jZXNzaW5nKSB7CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiY21kOiBTY2FuIGFscmVhZHkgaW4gcHJvY2Vzcy4uLlxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKHByaXYtPnNjYW5fYmxvY2spIHsKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsCisJCQkiY21kOiBTY2FuIGlzIGJsb2NrZWQgZHVyaW5nIGFzc29jaWF0aW9uLi4uXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwltd2lmaWV4X3NjYW5fZGVsZXRlX3NzaWRfdGFibGVfZW50cnkocHJpdiwgcmVxX3NzaWQpOworCisJc2Nhbl9jZmcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXdpZmlleF91c2VyX3NjYW5fY2ZnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzY2FuX2NmZykgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgImZhaWxlZCB0byBhbGxvYyBzY2FuX2NmZ1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbWNweShzY2FuX2NmZy0+c3NpZF9saXN0WzBdLnNzaWQsIHJlcV9zc2lkLT5zc2lkLAorCSAgICAgICByZXFfc3NpZC0+c3NpZF9sZW4pOworCXNjYW5fY2ZnLT5rZWVwX3ByZXZpb3VzX3NjYW4gPSB0cnVlOworCisJcmV0ID0gbXdpZmlleF9zY2FuX25ldHdvcmtzKHByaXYsIHNjYW5fY2ZnKTsKKworCWtmcmVlKHNjYW5fY2ZnKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogU2VuZHMgSU9DVEwgcmVxdWVzdCB0byBzdGFydCBhIHNjYW4uCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgdGhlIElPQ1RMIHJlcXVlc3QgYnVmZmVyLCBmaWxscyBpdAorICogd2l0aCByZXF1aXNpdGUgcGFyYW1ldGVycyBhbmQgY2FsbHMgdGhlIElPQ1RMIGhhbmRsZXIuCisgKgorICogU2NhbiBjb21tYW5kIGNhbiBiZSBpc3N1ZWQgZm9yIGJvdGggbm9ybWFsIHNjYW4gYW5kIHNwZWNpZmljIFNTSUQKKyAqIHNjYW4sIGRlcGVuZGluZyB1cG9uIHdoZXRoZXIgYW4gU1NJRCBpcyBwcm92aWRlZCBvciBub3QuCisgKi8KK2ludCBtd2lmaWV4X3JlcXVlc3Rfc2NhbihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJIHN0cnVjdCBtd2lmaWV4XzgwMl8xMV9zc2lkICpyZXFfc3NpZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmcHJpdi0+YXN5bmNfc2VtKSkgeworCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgIiVzOiBhY3F1aXJlIHNlbWFwaG9yZVxuIiwKKwkJCQkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOworCX0KKwlwcml2LT5zY2FuX3BlbmRpbmdfb25fYmxvY2sgPSB0cnVlOworCisJcHJpdi0+YWRhcHRlci0+Y21kX3dhaXRfcS5jb25kaXRpb24gPSBmYWxzZTsKKworCWlmIChyZXFfc3NpZCAmJiByZXFfc3NpZC0+c3NpZF9sZW4gIT0gMCkKKwkJLyogU3BlY2lmaWMgU1NJRCBzY2FuICovCisJCXJldCA9IG13aWZpZXhfc2Nhbl9zcGVjaWZpY19zc2lkKHByaXYsIHJlcV9zc2lkKTsKKwllbHNlCisJCS8qIE5vcm1hbCBzY2FuICovCisJCXJldCA9IG13aWZpZXhfc2Nhbl9uZXR3b3Jrcyhwcml2LCBOVUxMKTsKKworCWlmICghcmV0KQorCQlyZXQgPSBtd2lmaWV4X3dhaXRfcXVldWVfY29tcGxldGUocHJpdi0+YWRhcHRlcik7CisKKwlpZiAocmV0ID09IC0xKSB7CisJCXByaXYtPnNjYW5fcGVuZGluZ19vbl9ibG9jayA9IGZhbHNlOworCQl1cCgmcHJpdi0+YXN5bmNfc2VtKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBhcHBlbmRzIHRoZSB2ZW5kb3Igc3BlY2lmaWMgSUUgVExWIHRvIGEgYnVmZmVyLgorICovCitpbnQKK213aWZpZXhfY21kX2FwcGVuZF92c2llX3RsdihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgIHUxNiB2c2llX21hc2ssIHU4ICoqYnVmZmVyKQoreworCWludCBpZCwgcmV0X2xlbiA9IDA7CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfdmVuZG9yX3BhcmFtX3NldCAqdnNfcGFyYW1fc2V0OworCisJaWYgKCFidWZmZXIpCisJCXJldHVybiAwOworCWlmICghKCpidWZmZXIpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogVHJhdmVyc2UgdGhyb3VnaCB0aGUgc2F2ZWQgdmVuZG9yIHNwZWNpZmljIElFIGFycmF5IGFuZCBhcHBlbmQKKwkgKiB0aGUgc2VsZWN0ZWQoc2Nhbi9hc3NvYy9hZGhvYykgSUUgYXMgVExWIHRvIHRoZSBjb21tYW5kCisJICovCisJZm9yIChpZCA9IDA7IGlkIDwgTVdJRklFWF9NQVhfVlNJRV9OVU07IGlkKyspIHsKKwkJaWYgKHByaXYtPnZzX2llW2lkXS5tYXNrICYgdnNpZV9tYXNrKSB7CisJCQl2c19wYXJhbV9zZXQgPQorCQkJCShzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc192ZW5kb3JfcGFyYW1fc2V0ICopCisJCQkJKmJ1ZmZlcjsKKwkJCXZzX3BhcmFtX3NldC0+aGVhZGVyLnR5cGUgPQorCQkJCWNwdV90b19sZTE2KFRMVl9UWVBFX1BBU1NUSFJPVUdIKTsKKwkJCXZzX3BhcmFtX3NldC0+aGVhZGVyLmxlbiA9CisJCQkJY3B1X3RvX2xlMTYoKCgodTE2KSBwcml2LT52c19pZVtpZF0uaWVbMV0pCisJCQkJJiAweDAwRkYpICsgMik7CisJCQltZW1jcHkodnNfcGFyYW1fc2V0LT5pZSwgcHJpdi0+dnNfaWVbaWRdLmllLAorCQkJICAgICAgIGxlMTZfdG9fY3B1KHZzX3BhcmFtX3NldC0+aGVhZGVyLmxlbikpOworCQkJKmJ1ZmZlciArPSBsZTE2X3RvX2NwdSh2c19wYXJhbV9zZXQtPmhlYWRlci5sZW4pICsKKwkJCQkgICBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyKTsKKwkJCXJldF9sZW4gKz0gbGUxNl90b19jcHUodnNfcGFyYW1fc2V0LT5oZWFkZXIubGVuKSArCisJCQkJICAgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlcik7CisJCX0KKwl9CisJcmV0dXJuIHJldF9sZW47Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNhdmVzIGEgYmVhY29uIGJ1ZmZlciBvZiB0aGUgY3VycmVudCBCU1MgZGVzY3JpcHRvci4KKyAqCisgKiBUaGUgY3VycmVudCBiZWFjb24gYnVmZmVyIGlzIHNhdmVkIHNvIHRoYXQgaXQgY2FuIGJlIHJlc3RvcmVkIGluIHRoZQorICogZm9sbG93aW5nIGNhc2VzIHRoYXQgbWFrZXMgdGhlIGJlYWNvbiBidWZmZXIgbm90IHRvIGNvbnRhaW4gdGhlIGN1cnJlbnQKKyAqIHNzaWQncyBiZWFjb24gYnVmZmVyLgorICogICAgICAtIFRoZSBjdXJyZW50IHNzaWQgd2FzIG5vdCBmb3VuZCBzb21laG93IGluIHRoZSBsYXN0IHNjYW4uCisgKiAgICAgIC0gVGhlIGN1cnJlbnQgc3NpZCB3YXMgdGhlIGxhc3QgZW50cnkgb2YgdGhlIHNjYW4gdGFibGUgYW5kIG92ZXJsb2FkZWQuCisgKi8KK3ZvaWQKK213aWZpZXhfc2F2ZV9jdXJyX2JjbihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KQoreworCXN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmN1cnJfYnNzID0KKwkJJnByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvcjsKKworCWlmICghY3Vycl9ic3MtPmJlYWNvbl9idWZfc2l6ZSkKKwkJcmV0dXJuOworCisJLyogYWxsb2NhdGUgYmVhY29uIGJ1ZmZlciBhdCAxc3QgdGltZTsgb3IgaWYgaXQncyBzaXplIGhhcyBjaGFuZ2VkICovCisJaWYgKCFwcml2LT5jdXJyX2Jjbl9idWYgfHwKKwkJCXByaXYtPmN1cnJfYmNuX3NpemUgIT0gY3Vycl9ic3MtPmJlYWNvbl9idWZfc2l6ZSkgeworCQlwcml2LT5jdXJyX2Jjbl9zaXplID0gY3Vycl9ic3MtPmJlYWNvbl9idWZfc2l6ZTsKKworCQlrZnJlZShwcml2LT5jdXJyX2Jjbl9idWYpOworCQlwcml2LT5jdXJyX2Jjbl9idWYgPSBremFsbG9jKGN1cnJfYnNzLT5iZWFjb25fYnVmX3NpemUsCisJCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKCFwcml2LT5jdXJyX2Jjbl9idWYpIHsKKwkJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJCQkiZmFpbGVkIHRvIGFsbG9jIGN1cnJfYmNuX2J1ZlxuIik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwltZW1jcHkocHJpdi0+Y3Vycl9iY25fYnVmLCBjdXJyX2Jzcy0+YmVhY29uX2J1ZiwKKwkJY3Vycl9ic3MtPmJlYWNvbl9idWZfc2l6ZSk7CisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiBjdXJyZW50IGJlYWNvbiBzYXZlZCAlZFxuIiwKKwkJcHJpdi0+Y3Vycl9iY25fc2l6ZSk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGZyZWVzIHRoZSBjdXJyZW50IEJTUyBkZXNjcmlwdG9yIGJlYWNvbiBidWZmZXIuCisgKi8KK3ZvaWQKK213aWZpZXhfZnJlZV9jdXJyX2JjbihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KQoreworCWtmcmVlKHByaXYtPmN1cnJfYmNuX2J1Zik7CisJcHJpdi0+Y3Vycl9iY25fYnVmID0gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvc2Rpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQyNWRiZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvc2Rpby5jCkBAIC0wLDAgKzEsMTc1NCBAQAorLyoKKyAqIE1hcnZlbGwgV2lyZWxlc3MgTEFOIGRldmljZSBkcml2ZXI6IFNESU8gc3BlY2lmaWMgaGFuZGxpbmcKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwKKyAqIEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MQorICogKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbgorICogYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoCisgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQSBvciBvbiB0aGUKKyAqIHdvcmxkd2lkZSB3ZWIgYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dC4KKyAqCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0CisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisKKyNpbmNsdWRlICJkZWNsLmgiCisjaW5jbHVkZSAiaW9jdGwuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAiZncuaCIKKyNpbmNsdWRlICJtYWluLmgiCisjaW5jbHVkZSAid21tLmgiCisjaW5jbHVkZSAiMTFuLmgiCisjaW5jbHVkZSAic2Rpby5oIgorCisKKyNkZWZpbmUgU0RJT19WRVJTSU9OCSIxLjAiCisKK3N0YXRpYyBzdHJ1Y3QgbXdpZmlleF9pZl9vcHMgc2Rpb19vcHM7CisKK3N0YXRpYyBzdHJ1Y3Qgc2VtYXBob3JlIGFkZF9yZW1vdmVfY2FyZF9zZW07CisKKy8qCisgKiBTRElPIHByb2JlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcHJvYmVzIGFuIG13aWZpZXggZGV2aWNlIGFuZCByZWdpc3RlcnMgaXQuIEl0IGFsbG9jYXRlcworICogdGhlIGNhcmQgc3RydWN0dXJlLCBlbmFibGVzIFNESU8gZnVuY3Rpb24gbnVtYmVyIGFuZCBpbml0aWF0ZXMgdGhlCisgKiBkZXZpY2UgcmVnaXN0cmF0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBwcm9jZWR1cmUgYnkgYWRkaW5nIGEgbG9naWNhbAorICogaW50ZXJmYWNlLgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X3NkaW9fcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqZnVuYywgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzZGlvX21tY19jYXJkICpjYXJkID0gTlVMTDsKKworCXByX2RlYnVnKCJpbmZvOiB2ZW5kb3I9MHglNC4wNFggZGV2aWNlPTB4JTQuMDRYIGNsYXNzPSVkIGZ1bmN0aW9uPSVkXG4iLAorCSAgICAgICBmdW5jLT52ZW5kb3IsIGZ1bmMtPmRldmljZSwgZnVuYy0+Y2xhc3MsIGZ1bmMtPm51bSk7CisKKwljYXJkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNkaW9fbW1jX2NhcmQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNhcmQpIHsKKwkJcHJfZXJyKCIlczogZmFpbGVkIHRvIGFsbG9jIG1lbW9yeVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljYXJkLT5mdW5jID0gZnVuYzsKKworCWZ1bmMtPmNhcmQtPnF1aXJrcyB8PSBNTUNfUVVJUktfQkxLU1pfRk9SX0JZVEVfTU9ERTsKKworCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKKwlyZXQgPSBzZGlvX2VuYWJsZV9mdW5jKGZ1bmMpOworCXNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpOworCisJaWYgKHJldCkgeworCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gZW5hYmxlIGZ1bmN0aW9uXG4iLCBfX2Z1bmNfXyk7CisJCWtmcmVlKGNhcmQpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAobXdpZmlleF9hZGRfY2FyZChjYXJkLCAmYWRkX3JlbW92ZV9jYXJkX3NlbSwgJnNkaW9fb3BzKSkgeworCQlwcl9lcnIoIiVzOiBhZGQgY2FyZCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJa2ZyZWUoY2FyZCk7CisJCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKKwkJcmV0ID0gc2Rpb19kaXNhYmxlX2Z1bmMoZnVuYyk7CisJCXNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpOworCQlyZXQgPSAtMTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogU0RJTyByZW1vdmUuCisgKgorICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIHRoZSBpbnRlcmZhY2UgYW5kIGZyZWVzIHVwIHRoZSBjYXJkIHN0cnVjdHVyZS4KKyAqLworc3RhdGljIHZvaWQKK213aWZpZXhfc2Rpb19yZW1vdmUoc3RydWN0IHNkaW9fZnVuYyAqZnVuYykKK3sKKwlzdHJ1Y3Qgc2Rpb19tbWNfY2FyZCAqY2FyZDsKKworCXByX2RlYnVnKCJpbmZvOiBTRElPIGZ1bmMgbnVtPSVkXG4iLCBmdW5jLT5udW0pOworCisJaWYgKGZ1bmMpIHsKKwkJY2FyZCA9IHNkaW9fZ2V0X2RydmRhdGEoZnVuYyk7CisJCWlmIChjYXJkKSB7CisJCQltd2lmaWV4X3JlbW92ZV9jYXJkKGNhcmQtPmFkYXB0ZXIsCisJCQkJCSZhZGRfcmVtb3ZlX2NhcmRfc2VtKTsKKwkJCWtmcmVlKGNhcmQpOworCQl9CisJfQorfQorCisvKgorICogU0RJTyBzdXNwZW5kLgorICoKKyAqIEtlcm5lbCBuZWVkcyB0byBzdXNwZW5kIGFsbCBmdW5jdGlvbnMgc2VwYXJhdGVseS4gVGhlcmVmb3JlIGFsbAorICogcmVnaXN0ZXJlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIGRyaXZlcnMgd2l0aCBzdXNwZW5kIGFuZCByZXN1bWUKKyAqIG1ldGhvZHMuIEZhaWxpbmcgdGhhdCB0aGUga2VybmVsIHNpbXBseSByZW1vdmVzIHRoZSB3aG9sZSBjYXJkLgorICoKKyAqIElmIGFscmVhZHkgbm90IHN1c3BlbmRlZCwgdGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgYW5kIHNlbmRzIGEgaG9zdAorICogc2xlZXAgYWN0aXZhdGUgcmVxdWVzdCB0byB0aGUgZmlybXdhcmUgYW5kIHR1cm5zIG9mZiB0aGUgdHJhZmZpYy4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X3NkaW9fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNkaW9fZnVuYyAqZnVuYyA9IGRldl90b19zZGlvX2Z1bmMoZGV2KTsKKwlzdHJ1Y3Qgc2Rpb19tbWNfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyOworCW1tY19wbV9mbGFnX3QgcG1fZmxhZyA9IDA7CisJaW50IGhzX2FjdGl2ZWQgPSAwOworCWludCBpOworCWludCByZXQgPSAwOworCisJaWYgKGZ1bmMpIHsKKwkJcG1fZmxhZyA9IHNkaW9fZ2V0X2hvc3RfcG1fY2FwcyhmdW5jKTsKKwkJcHJfZGVidWcoImNtZDogJXM6IHN1c3BlbmQ6IFBNIGZsYWcgPSAweCV4XG4iLAorCQkgICAgICAgc2Rpb19mdW5jX2lkKGZ1bmMpLCBwbV9mbGFnKTsKKwkJaWYgKCEocG1fZmxhZyAmIE1NQ19QTV9LRUVQX1BPV0VSKSkgeworCQkJcHJfZXJyKCIlczogY2Fubm90IHJlbWFpbiBhbGl2ZSB3aGlsZSBob3N0IGlzIgorCQkJCSIgc3VzcGVuZGVkXG4iLCBzZGlvX2Z1bmNfaWQoZnVuYykpOworCQkJcmV0dXJuIC1FTk9TWVM7CisJCX0KKworCQljYXJkID0gc2Rpb19nZXRfZHJ2ZGF0YShmdW5jKTsKKwkJaWYgKCFjYXJkIHx8ICFjYXJkLT5hZGFwdGVyKSB7CisJCQlwcl9lcnIoInN1c3BlbmQ6IGludmFsaWQgY2FyZCBvciBhZGFwdGVyXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJfSBlbHNlIHsKKwkJcHJfZXJyKCJzdXNwZW5kOiBzZGlvX2Z1bmMgaXMgbm90IHNwZWNpZmllZFxuIik7CisJCXJldHVybiAwOworCX0KKworCWFkYXB0ZXIgPSBjYXJkLT5hZGFwdGVyOworCisJLyogRW5hYmxlIHRoZSBIb3N0IFNsZWVwICovCisJaHNfYWN0aXZlZCA9IG13aWZpZXhfZW5hYmxlX2hzKGFkYXB0ZXIpOworCWlmIChoc19hY3RpdmVkKSB7CisJCXByX2RlYnVnKCJjbWQ6IHN1c3BlbmQgd2l0aCBNTUNfUE1fS0VFUF9QT1dFUlxuIik7CisJCXJldCA9IHNkaW9fc2V0X2hvc3RfcG1fZmxhZ3MoZnVuYywgTU1DX1BNX0tFRVBfUE9XRVIpOworCX0KKworCS8qIEluZGljYXRlIGRldmljZSBzdXNwZW5kZWQgKi8KKwlhZGFwdGVyLT5pc19zdXNwZW5kZWQgPSB0cnVlOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPnByaXZfbnVtOyBpKyspCisJCW5ldGlmX2NhcnJpZXJfb2ZmKGFkYXB0ZXItPnByaXZbaV0tPm5ldGRldik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogU0RJTyByZXN1bWUuCisgKgorICogS2VybmVsIG5lZWRzIHRvIHN1c3BlbmQgYWxsIGZ1bmN0aW9ucyBzZXBhcmF0ZWx5LiBUaGVyZWZvcmUgYWxsCisgKiByZWdpc3RlcmVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgZHJpdmVycyB3aXRoIHN1c3BlbmQgYW5kIHJlc3VtZQorICogbWV0aG9kcy4gRmFpbGluZyB0aGF0IHRoZSBrZXJuZWwgc2ltcGx5IHJlbW92ZXMgdGhlIHdob2xlIGNhcmQuCisgKgorICogSWYgYWxyZWFkeSBub3QgcmVzdW1lZCwgdGhpcyBmdW5jdGlvbiB0dXJucyBvbiB0aGUgdHJhZmZpYyBhbmQKKyAqIHNlbmRzIGEgaG9zdCBzbGVlcCBjYW5jZWwgcmVxdWVzdCB0byB0aGUgZmlybXdhcmUuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9zZGlvX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNkaW9fZnVuYyAqZnVuYyA9IGRldl90b19zZGlvX2Z1bmMoZGV2KTsKKwlzdHJ1Y3Qgc2Rpb19tbWNfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyOworCW1tY19wbV9mbGFnX3QgcG1fZmxhZyA9IDA7CisJaW50IGk7CisKKwlpZiAoZnVuYykgeworCQlwbV9mbGFnID0gc2Rpb19nZXRfaG9zdF9wbV9jYXBzKGZ1bmMpOworCQljYXJkID0gc2Rpb19nZXRfZHJ2ZGF0YShmdW5jKTsKKwkJaWYgKCFjYXJkIHx8ICFjYXJkLT5hZGFwdGVyKSB7CisJCQlwcl9lcnIoInJlc3VtZTogaW52YWxpZCBjYXJkIG9yIGFkYXB0ZXJcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgeworCQlwcl9lcnIoInJlc3VtZTogc2Rpb19mdW5jIGlzIG5vdCBzcGVjaWZpZWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlhZGFwdGVyID0gY2FyZC0+YWRhcHRlcjsKKworCWlmICghYWRhcHRlci0+aXNfc3VzcGVuZGVkKSB7CisJCWRldl93YXJuKGFkYXB0ZXItPmRldiwgImRldmljZSBhbHJlYWR5IHJlc3VtZWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlhZGFwdGVyLT5pc19zdXNwZW5kZWQgPSBmYWxzZTsKKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5wcml2X251bTsgaSsrKQorCQlpZiAoYWRhcHRlci0+cHJpdltpXS0+bWVkaWFfY29ubmVjdGVkKQorCQkJbmV0aWZfY2Fycmllcl9vbihhZGFwdGVyLT5wcml2W2ldLT5uZXRkZXYpOworCisJLyogRGlzYWJsZSBIb3N0IFNsZWVwICovCisJbXdpZmlleF9jYW5jZWxfaHMobXdpZmlleF9nZXRfcHJpdihhZGFwdGVyLCBNV0lGSUVYX0JTU19ST0xFX1NUQSksCisJCQkgIE1XSUZJRVhfQVNZTkNfQ01EKTsKKworCXJldHVybiAwOworfQorCisvKiBEZXZpY2UgSUQgZm9yIFNEODc4NyAqLworI2RlZmluZSBTRElPX0RFVklDRV9JRF9NQVJWRUxMXzg3ODcgICAoMHg5MTE5KQorCisvKiBXTEFOIElEcyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCBtd2lmaWV4X2lkc1tdID0geworCXtTRElPX0RFVklDRShTRElPX1ZFTkRPUl9JRF9NQVJWRUxMLCBTRElPX0RFVklDRV9JRF9NQVJWRUxMXzg3ODcpfSwKKwl7fSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoc2RpbywgbXdpZmlleF9pZHMpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgbXdpZmlleF9zZGlvX3BtX29wcyA9IHsKKwkuc3VzcGVuZCA9IG13aWZpZXhfc2Rpb19zdXNwZW5kLAorCS5yZXN1bWUgPSBtd2lmaWV4X3NkaW9fcmVzdW1lLAorfTsKKworc3RhdGljIHN0cnVjdCBzZGlvX2RyaXZlciBtd2lmaWV4X3NkaW8gPSB7CisJLm5hbWUgPSAibXdpZmlleF9zZGlvIiwKKwkuaWRfdGFibGUgPSBtd2lmaWV4X2lkcywKKwkucHJvYmUgPSBtd2lmaWV4X3NkaW9fcHJvYmUsCisJLnJlbW92ZSA9IG13aWZpZXhfc2Rpb19yZW1vdmUsCisJLmRydiA9IHsKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5wbSA9ICZtd2lmaWV4X3NkaW9fcG1fb3BzLAorCX0KK307CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHdyaXRlcyBkYXRhIGludG8gU0RJTyBjYXJkIHJlZ2lzdGVyLgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X3dyaXRlX3JlZyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLCB1MzIgcmVnLCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3Qgc2Rpb19tbWNfY2FyZCAqY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisJaW50IHJldCA9IC0xOworCisJc2Rpb19jbGFpbV9ob3N0KGNhcmQtPmZ1bmMpOworCXNkaW9fd3JpdGViKGNhcmQtPmZ1bmMsICh1OCkgZGF0YSwgcmVnLCAmcmV0KTsKKwlzZGlvX3JlbGVhc2VfaG9zdChjYXJkLT5mdW5jKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIGRhdGEgZnJvbSBTRElPIGNhcmQgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfcmVhZF9yZWcoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwgdTMyIHJlZywgdTMyICpkYXRhKQoreworCXN0cnVjdCBzZGlvX21tY19jYXJkICpjYXJkID0gYWRhcHRlci0+Y2FyZDsKKwlpbnQgcmV0ID0gLTE7CisJdTggdmFsOworCisJc2Rpb19jbGFpbV9ob3N0KGNhcmQtPmZ1bmMpOworCXZhbCA9IHNkaW9fcmVhZGIoY2FyZC0+ZnVuYywgcmVnLCAmcmV0KTsKKwlzZGlvX3JlbGVhc2VfaG9zdChjYXJkLT5mdW5jKTsKKworCSpkYXRhID0gdmFsOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gd3JpdGVzIG11bHRpcGxlIGRhdGEgaW50byBTRElPIGNhcmQgbWVtb3J5LgorICoKKyAqIFRoaXMgZG9lcyBub3Qgd29yayBpbiBzdXNwZW5kZWQgbW9kZS4KKyAqLworc3RhdGljIGludAorbXdpZmlleF93cml0ZV9kYXRhX3N5bmMoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCXU4ICpidWZmZXIsIHUzMiBwa3RfbGVuLCB1MzIgcG9ydCkKK3sKKwlzdHJ1Y3Qgc2Rpb19tbWNfY2FyZCAqY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisJaW50IHJldCA9IC0xOworCXU4IGJsa19tb2RlID0KKwkJKHBvcnQgJiBNV0lGSUVYX1NESU9fQllURV9NT0RFX01BU0spID8gQllURV9NT0RFIDogQkxPQ0tfTU9ERTsKKwl1MzIgYmxrX3NpemUgPSAoYmxrX21vZGUgPT0gQkxPQ0tfTU9ERSkgPyBNV0lGSUVYX1NESU9fQkxPQ0tfU0laRSA6IDE7CisJdTMyIGJsa19jbnQgPQorCQkoYmxrX21vZGUgPT0KKwkJIEJMT0NLX01PREUpID8gKHBrdF9sZW4gLworCQkJCU1XSUZJRVhfU0RJT19CTE9DS19TSVpFKSA6IHBrdF9sZW47CisJdTMyIGlvcG9ydCA9IChwb3J0ICYgTVdJRklFWF9TRElPX0lPX1BPUlRfTUFTSyk7CisKKwlpZiAoYWRhcHRlci0+aXNfc3VzcGVuZGVkKSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LAorCQkJIiVzOiBub3QgYWxsb3dlZCB3aGlsZSBzdXNwZW5kZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXNkaW9fY2xhaW1faG9zdChjYXJkLT5mdW5jKTsKKworCWlmICghc2Rpb193cml0ZXNiKGNhcmQtPmZ1bmMsIGlvcG9ydCwgYnVmZmVyLCBibGtfY250ICogYmxrX3NpemUpKQorCQlyZXQgPSAwOworCisJc2Rpb19yZWxlYXNlX2hvc3QoY2FyZC0+ZnVuYyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZWFkcyBtdWx0aXBsZSBkYXRhIGZyb20gU0RJTyBjYXJkIG1lbW9yeS4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X3JlYWRfZGF0YV9zeW5jKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICpidWZmZXIsCisJCQkJICB1MzIgbGVuLCB1MzIgcG9ydCwgdTggY2xhaW0pCit7CisJc3RydWN0IHNkaW9fbW1jX2NhcmQgKmNhcmQgPSBhZGFwdGVyLT5jYXJkOworCWludCByZXQgPSAtMTsKKwl1OCBibGtfbW9kZSA9CisJCShwb3J0ICYgTVdJRklFWF9TRElPX0JZVEVfTU9ERV9NQVNLKSA/IEJZVEVfTU9ERSA6IEJMT0NLX01PREU7CisJdTMyIGJsa19zaXplID0gKGJsa19tb2RlID09IEJMT0NLX01PREUpID8gTVdJRklFWF9TRElPX0JMT0NLX1NJWkUgOiAxOworCXUzMiBibGtfY250ID0KKwkJKGJsa19tb2RlID09CisJCSBCTE9DS19NT0RFKSA/IChsZW4gLyBNV0lGSUVYX1NESU9fQkxPQ0tfU0laRSkgOiBsZW47CisJdTMyIGlvcG9ydCA9IChwb3J0ICYgTVdJRklFWF9TRElPX0lPX1BPUlRfTUFTSyk7CisKKwlpZiAoY2xhaW0pCisJCXNkaW9fY2xhaW1faG9zdChjYXJkLT5mdW5jKTsKKworCWlmICghc2Rpb19yZWFkc2IoY2FyZC0+ZnVuYywgYnVmZmVyLCBpb3BvcnQsIGJsa19jbnQgKiBibGtfc2l6ZSkpCisJCXJldCA9IDA7CisKKwlpZiAoY2xhaW0pCisJCXNkaW9fcmVsZWFzZV9ob3N0KGNhcmQtPmZ1bmMpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gd2FrZXMgdXAgdGhlIGNhcmQuCisgKgorICogQSBob3N0IHBvd2VyIHVwIGNvbW1hbmQgaXMgd3JpdHRlbiB0byB0aGUgY2FyZCBjb25maWd1cmF0aW9uCisgKiByZWdpc3RlciB0byB3YWtlIHVwIHRoZSBjYXJkLgorICovCitzdGF0aWMgaW50IG13aWZpZXhfcG1fd2FrZXVwX2NhcmQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImV2ZW50OiB3YWtldXAgZGV2aWNlLi4uXG4iKTsKKworCXJldHVybiBtd2lmaWV4X3dyaXRlX3JlZyhhZGFwdGVyLCBDT05GSUdVUkFUSU9OX1JFRywgSE9TVF9QT1dFUl9VUCk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciB0aGUgY2FyZCBoYXMgd29rZW4gdXAuCisgKgorICogVGhlIGNhcmQgY29uZmlndXJhdGlvbiByZWdpc3RlciBpcyByZXNldC4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X3BtX3dha2V1cF9jYXJkX2NvbXBsZXRlKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJjbWQ6IHdha2V1cCBkZXZpY2UgY29tcGxldGVkXG4iKTsKKworCXJldHVybiBtd2lmaWV4X3dyaXRlX3JlZyhhZGFwdGVyLCBDT05GSUdVUkFUSU9OX1JFRywgMCk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBJTyBwb3J0cy4KKyAqCisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCAtCisgKiAgICAgIC0gUmVhZCB0aGUgSU8gcG9ydHMgKDAsIDEgYW5kIDIpCisgKiAgICAgIC0gU2V0IGhvc3QgaW50ZXJydXB0IFJlc2V0LVRvLVJlYWQgdG8gY2xlYXIKKyAqICAgICAgLSBTZXQgYXV0byByZS1lbmFibGUgaW50ZXJydXB0CisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9pbml0X3NkaW9faW9wb3J0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIHJlZzsKKworCWFkYXB0ZXItPmlvcG9ydCA9IDA7CisKKwkvKiBSZWFkIHRoZSBJTyBwb3J0ICovCisJaWYgKCFtd2lmaWV4X3JlYWRfcmVnKGFkYXB0ZXIsIElPX1BPUlRfMF9SRUcsICZyZWcpKQorCQlhZGFwdGVyLT5pb3BvcnQgfD0gKHJlZyAmIDB4ZmYpOworCWVsc2UKKwkJcmV0dXJuIC0xOworCisJaWYgKCFtd2lmaWV4X3JlYWRfcmVnKGFkYXB0ZXIsIElPX1BPUlRfMV9SRUcsICZyZWcpKQorCQlhZGFwdGVyLT5pb3BvcnQgfD0gKChyZWcgJiAweGZmKSA8PCA4KTsKKwllbHNlCisJCXJldHVybiAtMTsKKworCWlmICghbXdpZmlleF9yZWFkX3JlZyhhZGFwdGVyLCBJT19QT1JUXzJfUkVHLCAmcmVnKSkKKwkJYWRhcHRlci0+aW9wb3J0IHw9ICgocmVnICYgMHhmZikgPDwgMTYpOworCWVsc2UKKwkJcmV0dXJuIC0xOworCisJcHJfZGVidWcoImluZm86IFNESU8gRlVOQzEgSU8gcG9ydDogJSN4XG4iLCBhZGFwdGVyLT5pb3BvcnQpOworCisJLyogU2V0IEhvc3QgaW50ZXJydXB0IHJlc2V0IHRvIHJlYWQgdG8gY2xlYXIgKi8KKwlpZiAoIW13aWZpZXhfcmVhZF9yZWcoYWRhcHRlciwgSE9TVF9JTlRfUlNSX1JFRywgJnJlZykpCisJCW13aWZpZXhfd3JpdGVfcmVnKGFkYXB0ZXIsIEhPU1RfSU5UX1JTUl9SRUcsCisJCQkJICByZWcgfCBTRElPX0lOVF9NQVNLKTsKKwllbHNlCisJCXJldHVybiAtMTsKKworCS8qIERubGQvVXBsZCByZWFkeSBzZXQgdG8gYXV0byByZXNldCAqLworCWlmICghbXdpZmlleF9yZWFkX3JlZyhhZGFwdGVyLCBDQVJEX01JU0NfQ0ZHX1JFRywgJnJlZykpCisJCW13aWZpZXhfd3JpdGVfcmVnKGFkYXB0ZXIsIENBUkRfTUlTQ19DRkdfUkVHLAorCQkJCSAgcmVnIHwgQVVUT19SRV9FTkFCTEVfSU5UKTsKKwllbHNlCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBzZW5kcyBkYXRhIHRvIHRoZSBjYXJkLgorICovCitzdGF0aWMgaW50IG13aWZpZXhfd3JpdGVfZGF0YV90b19jYXJkKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICAgICAgdTggKnBheWxvYWQsIHUzMiBwa3RfbGVuLCB1MzIgcG9ydCkKK3sKKwl1MzIgaSA9IDA7CisJaW50IHJldDsKKworCWRvIHsKKwkJcmV0ID0gbXdpZmlleF93cml0ZV9kYXRhX3N5bmMoYWRhcHRlciwgcGF5bG9hZCwgcGt0X2xlbiwgcG9ydCk7CisJCWlmIChyZXQpIHsKKwkJCWkrKzsKKwkJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiaG9zdF90b19jYXJkLCB3cml0ZSBpb21lbSIKKwkJCQkJIiAoJWQpIGZhaWxlZDogJWRcbiIsIGksIHJldCk7CisJCQlpZiAobXdpZmlleF93cml0ZV9yZWcoYWRhcHRlciwKKwkJCQkJQ09ORklHVVJBVElPTl9SRUcsIDB4MDQpKQorCQkJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAid3JpdGUgQ0ZHIHJlZyBmYWlsZWRcbiIpOworCisJCQlyZXQgPSAtMTsKKwkJCWlmIChpID4gTUFYX1dSSVRFX0lPTUVNX1JFVFJZKQorCQkJCXJldHVybiByZXQ7CisJCX0KKwl9IHdoaWxlIChyZXQgPT0gLTEpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgcmVhZCBwb3J0LgorICoKKyAqIElmIGNvbnRyb2wgcG9ydCBiaXQgaXMgc2V0IGluIE1QIHJlYWQgYml0bWFwLCB0aGUgY29udHJvbCBwb3J0CisgKiBpcyByZXR1cm5lZCwgb3RoZXJ3aXNlIHRoZSBjdXJyZW50IHJlYWQgcG9ydCBpcyByZXR1cm5lZCBhbmQKKyAqIHRoZSB2YWx1ZSBpcyBpbmNyZWFzZWQgKHByb3ZpZGVkIGl0IGRvZXMgbm90IHJlYWNoIHRoZSBtYXhpbXVtCisgKiBsaW1pdCwgaW4gd2hpY2ggY2FzZSBpdCBpcyByZXNldCB0byAxKQorICovCitzdGF0aWMgaW50IG13aWZpZXhfZ2V0X3JkX3BvcnQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwgdTggKnBvcnQpCit7CisJc3RydWN0IHNkaW9fbW1jX2NhcmQgKmNhcmQgPSBhZGFwdGVyLT5jYXJkOworCXUxNiByZF9iaXRtYXAgPSBjYXJkLT5tcF9yZF9iaXRtYXA7CisKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImRhdGE6IG1wX3JkX2JpdG1hcD0weCUwNHhcbiIsIHJkX2JpdG1hcCk7CisKKwlpZiAoIShyZF9iaXRtYXAgJiAoQ1RSTF9QT1JUX01BU0sgfCBEQVRBX1BPUlRfTUFTSykpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoY2FyZC0+bXBfcmRfYml0bWFwICYgQ1RSTF9QT1JUX01BU0spIHsKKwkJY2FyZC0+bXBfcmRfYml0bWFwICY9ICh1MTYpICh+Q1RSTF9QT1JUX01BU0spOworCQkqcG9ydCA9IENUUkxfUE9SVDsKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJkYXRhOiBwb3J0PSVkIG1wX3JkX2JpdG1hcD0weCUwNHhcbiIsCisJCSAgICAgICAqcG9ydCwgY2FyZC0+bXBfcmRfYml0bWFwKTsKKwl9IGVsc2UgeworCQlpZiAoY2FyZC0+bXBfcmRfYml0bWFwICYgKDEgPDwgY2FyZC0+Y3Vycl9yZF9wb3J0KSkgeworCQkJY2FyZC0+bXBfcmRfYml0bWFwICY9CisJCQkJKHUxNikgKH4oMSA8PCBjYXJkLT5jdXJyX3JkX3BvcnQpKTsKKwkJCSpwb3J0ID0gY2FyZC0+Y3Vycl9yZF9wb3J0OworCisJCQlpZiAoKytjYXJkLT5jdXJyX3JkX3BvcnQgPT0gTUFYX1BPUlQpCisJCQkJY2FyZC0+Y3Vycl9yZF9wb3J0ID0gMTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LAorCQkJImRhdGE6IHBvcnQ9JWQgbXBfcmRfYml0bWFwPTB4JTA0eCAtPiAweCUwNHhcbiIsCisJCSAgICAgICAqcG9ydCwgcmRfYml0bWFwLCBjYXJkLT5tcF9yZF9iaXRtYXApOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgd3JpdGUgcG9ydCBmb3IgZGF0YS4KKyAqCisgKiBUaGUgY3VycmVudCB3cml0ZSBwb3J0IGlzIHJldHVybmVkIGlmIGF2YWlsYWJsZSBhbmQgdGhlIHZhbHVlIGlzCisgKiBpbmNyZWFzZWQgKHByb3ZpZGVkIGl0IGRvZXMgbm90IHJlYWNoIHRoZSBtYXhpbXVtIGxpbWl0LCBpbiB3aGljaAorICogY2FzZSBpdCBpcyByZXNldCB0byAxKQorICovCitzdGF0aWMgaW50IG13aWZpZXhfZ2V0X3dyX3BvcnRfZGF0YShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLCB1OCAqcG9ydCkKK3sKKwlzdHJ1Y3Qgc2Rpb19tbWNfY2FyZCAqY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisJdTE2IHdyX2JpdG1hcCA9IGNhcmQtPm1wX3dyX2JpdG1hcDsKKworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZGF0YTogbXBfd3JfYml0bWFwPTB4JTA0eFxuIiwgd3JfYml0bWFwKTsKKworCWlmICghKHdyX2JpdG1hcCAmIGNhcmQtPm1wX2RhdGFfcG9ydF9tYXNrKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKGNhcmQtPm1wX3dyX2JpdG1hcCAmICgxIDw8IGNhcmQtPmN1cnJfd3JfcG9ydCkpIHsKKwkJY2FyZC0+bXBfd3JfYml0bWFwICY9ICh1MTYpICh+KDEgPDwgY2FyZC0+Y3Vycl93cl9wb3J0KSk7CisJCSpwb3J0ID0gY2FyZC0+Y3Vycl93cl9wb3J0OworCQlpZiAoKytjYXJkLT5jdXJyX3dyX3BvcnQgPT0gY2FyZC0+bXBfZW5kX3BvcnQpCisJCQljYXJkLT5jdXJyX3dyX3BvcnQgPSAxOworCX0gZWxzZSB7CisJCWFkYXB0ZXItPmRhdGFfc2VudCA9IHRydWU7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKCpwb3J0ID09IENUUkxfUE9SVCkgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgImludmFsaWQgZGF0YSBwb3J0PSVkIGN1ciBwb3J0PSVkIgorCQkJCSIgbXBfd3JfYml0bWFwPTB4JTA0eCAtPiAweCUwNHhcbiIsCisJCQkJKnBvcnQsIGNhcmQtPmN1cnJfd3JfcG9ydCwgd3JfYml0bWFwLAorCQkJCWNhcmQtPm1wX3dyX2JpdG1hcCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImRhdGE6IHBvcnQ9JWQgbXBfd3JfYml0bWFwPTB4JTA0eCAtPiAweCUwNHhcbiIsCisJICAgICAgICpwb3J0LCB3cl9iaXRtYXAsIGNhcmQtPm1wX3dyX2JpdG1hcCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcG9sbHMgdGhlIGNhcmQgc3RhdHVzLgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X3NkaW9fcG9sbF9jYXJkX3N0YXR1cyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLCB1OCBiaXRzKQoreworCXUzMiB0cmllczsKKwl1MzIgY3M7CisKKwlmb3IgKHRyaWVzID0gMDsgdHJpZXMgPCBNQVhfUE9MTF9UUklFUzsgdHJpZXMrKykgeworCQlpZiAobXdpZmlleF9yZWFkX3JlZyhhZGFwdGVyLCBDQVJEX1NUQVRVU19SRUcsICZjcykpCisJCQlicmVhazsKKwkJZWxzZSBpZiAoKGNzICYgYml0cykgPT0gYml0cykKKwkJCXJldHVybiAwOworCisJCXVkZWxheSgxMCk7CisJfQorCisJZGV2X2VycihhZGFwdGVyLT5kZXYsICJwb2xsIGNhcmQgc3RhdHVzIGZhaWxlZCwgdHJpZXMgPSAlZFxuIiwKKwkgICAgICAgdHJpZXMpOworCXJldHVybiAtMTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIGZpcm13YXJlIHN0YXR1cy4KKyAqLworc3RhdGljIGludAorbXdpZmlleF9zZGlvX3JlYWRfZndfc3RhdHVzKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiAqZGF0KQoreworCXUzMiBmd3MwLCBmd3MxOworCisJaWYgKG13aWZpZXhfcmVhZF9yZWcoYWRhcHRlciwgQ0FSRF9GV19TVEFUVVMwX1JFRywgJmZ3czApKQorCQlyZXR1cm4gLTE7CisKKwlpZiAobXdpZmlleF9yZWFkX3JlZyhhZGFwdGVyLCBDQVJEX0ZXX1NUQVRVUzFfUkVHLCAmZndzMSkpCisJCXJldHVybiAtMTsKKworCSpkYXQgPSAodTE2KSAoKGZ3czEgPDwgOCkgfCBmd3MwKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyB0aGUgaG9zdCBpbnRlcnJ1cHQuCisgKgorICogVGhlIGhvc3QgaW50ZXJydXB0IG1hc2sgaXMgcmVhZCwgdGhlIGRpc2FibGUgYml0IGlzIHJlc2V0IGFuZAorICogd3JpdHRlbiBiYWNrIHRvIHRoZSBjYXJkIGhvc3QgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9zZGlvX2Rpc2FibGVfaG9zdF9pbnQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgaG9zdF9pbnRfbWFzazsKKworCS8qIFJlYWQgYmFjayB0aGUgaG9zdF9pbnRfbWFzayByZWdpc3RlciAqLworCWlmIChtd2lmaWV4X3JlYWRfcmVnKGFkYXB0ZXIsIEhPU1RfSU5UX01BU0tfUkVHLCAmaG9zdF9pbnRfbWFzaykpCisJCXJldHVybiAtMTsKKworCS8qIFVwZGF0ZSB3aXRoIHRoZSBtYXNrIGFuZCB3cml0ZSBiYWNrIHRvIHRoZSByZWdpc3RlciAqLworCWhvc3RfaW50X21hc2sgJj0gfkhPU1RfSU5UX0RJU0FCTEU7CisKKwlpZiAobXdpZmlleF93cml0ZV9yZWcoYWRhcHRlciwgSE9TVF9JTlRfTUFTS19SRUcsIGhvc3RfaW50X21hc2spKSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiZGlzYWJsZSBob3N0IGludGVycnVwdCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIGhvc3QgaW50ZXJydXB0LgorICoKKyAqIFRoZSBob3N0IGludGVycnVwdCBlbmFibGUgbWFzayBpcyB3cml0dGVuIHRvIHRoZSBjYXJkCisgKiBob3N0IGludGVycnVwdCBtYXNrIHJlZ2lzdGVyLgorICovCitzdGF0aWMgaW50IG13aWZpZXhfc2Rpb19lbmFibGVfaG9zdF9pbnQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwkvKiBTaW1wbHkgd3JpdGUgdGhlIG1hc2sgdG8gdGhlIHJlZ2lzdGVyICovCisJaWYgKG13aWZpZXhfd3JpdGVfcmVnKGFkYXB0ZXIsIEhPU1RfSU5UX01BU0tfUkVHLCBIT1NUX0lOVF9FTkFCTEUpKSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiZW5hYmxlIGhvc3QgaW50ZXJydXB0IGZhaWxlZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgZGF0YSBidWZmZXIgdG8gdGhlIGNhcmQuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9zZGlvX2NhcmRfdG9faG9zdChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgICAgdTMyICp0eXBlLCB1OCAqYnVmZmVyLAorCQkJCSAgICAgdTMyIG5wYXlsb2FkLCB1MzIgaW9wb3J0KQoreworCWludCByZXQ7CisJdTMyIG5iOworCisJaWYgKCFidWZmZXIpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICIlczogYnVmZmVyIGlzIE5VTExcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldCA9IG13aWZpZXhfcmVhZF9kYXRhX3N5bmMoYWRhcHRlciwgYnVmZmVyLCBucGF5bG9hZCwgaW9wb3J0LCAxKTsKKworCWlmIChyZXQpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICIlczogcmVhZCBpb21lbSBmYWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywKKwkJCQlyZXQpOworCQlyZXR1cm4gLTE7CisJfQorCisJbmIgPSBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSAoYnVmZmVyKSk7CisJaWYgKG5iID4gbnBheWxvYWQpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICIlczogaW52YWxpZCBwYWNrZXQsIG5iPSVkLCBucGF5bG9hZD0lZFxuIiwKKwkJCQlfX2Z1bmNfXywgbmIsIG5wYXlsb2FkKTsKKwkJcmV0dXJuIC0xOworCX0KKworCSp0eXBlID0gbGUxNl90b19jcHUoKihfX2xlMTYgKikgKGJ1ZmZlciArIDIpKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGRvd25sb2FkcyB0aGUgZmlybXdhcmUgdG8gdGhlIGNhcmQuCisgKgorICogRmlybXdhcmUgaXMgZG93bmxvYWRlZCB0byB0aGUgY2FyZCBpbiBibG9ja3MuIEV2ZXJ5IGJsb2NrIGRvd25sb2FkCisgKiBpcyB0ZXN0ZWQgZm9yIENSQyBlcnJvcnMsIGFuZCByZXRyaWVkIGEgbnVtYmVyIG9mIHRpbWVzIGJlZm9yZQorICogcmV0dXJuaW5nIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9wcm9nX2Z3X3dfaGVscGVyKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICAgIHN0cnVjdCBtd2lmaWV4X2Z3X2ltYWdlICpmdykKK3sKKwlpbnQgcmV0OworCXU4ICpmaXJtd2FyZSA9IGZ3LT5md19idWY7CisJdTMyIGZpcm13YXJlX2xlbiA9IGZ3LT5md19sZW47CisJdTMyIG9mZnNldCA9IDA7CisJdTMyIGJhc2UwLCBiYXNlMTsKKwl1OCAqZndidWY7CisJdTE2IGxlbiA9IDA7CisJdTMyIHR4bGVuLCB0eF9ibG9ja3MgPSAwLCB0cmllczsKKwl1MzIgaSA9IDA7CisKKwlpZiAoIWZpcm13YXJlX2xlbikgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgImZpcm13YXJlIGltYWdlIG5vdCBmb3VuZCEiCisJCQkJIiBUZXJtaW5hdGluZyBkb3dubG9hZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IGRvd25sb2FkaW5nIEZXIGltYWdlICglZCBieXRlcylcbiIsCisJCQlmaXJtd2FyZV9sZW4pOworCisJLyogQXNzdW1lIHRoYXQgdGhlIGFsbG9jYXRlZCBidWZmZXIgaXMgOC1ieXRlIGFsaWduZWQgKi8KKwlmd2J1ZiA9IGt6YWxsb2MoTVdJRklFWF9VUExEX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghZndidWYpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJ1bmFibGUgdG8gYWxsb2MgYnVmZmVyIGZvciBmaXJtd2FyZS4iCisJCQkJIiBUZXJtaW5hdGluZyBkb3dubG9hZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIFBlcmZvcm0gZmlybXdhcmUgZGF0YSB0cmFuc2ZlciAqLworCWRvIHsKKwkJLyogVGhlIGhvc3QgcG9sbHMgZm9yIHRoZSBETl9MRF9DQVJEX1JEWSBhbmQgQ0FSRF9JT19SRUFEWQorCQkgICBiaXRzICovCisJCXJldCA9IG13aWZpZXhfc2Rpb19wb2xsX2NhcmRfc3RhdHVzKGFkYXB0ZXIsIENBUkRfSU9fUkVBRFkgfAorCQkJCQkJICAgIEROX0xEX0NBUkRfUkRZKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJGVyBkb3dubG9hZCB3aXRoIGhlbHBlcjoiCisJCQkJCSIgcG9sbCBzdGF0dXMgdGltZW91dCBAICVkXG4iLCBvZmZzZXQpOworCQkJZ290byBkb25lOworCQl9CisKKwkJLyogTW9yZSBkYXRhPyAqLworCQlpZiAob2Zmc2V0ID49IGZpcm13YXJlX2xlbikKKwkJCWJyZWFrOworCisJCWZvciAodHJpZXMgPSAwOyB0cmllcyA8IE1BWF9QT0xMX1RSSUVTOyB0cmllcysrKSB7CisJCQlyZXQgPSBtd2lmaWV4X3JlYWRfcmVnKGFkYXB0ZXIsIEhPU1RfRjFfUkRfQkFTRV8wLAorCQkJCQkgICAgICAgJmJhc2UwKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgImRldiBCQVNFMCByZWdpc3RlciByZWFkIgorCQkJCQkiIGZhaWxlZDogYmFzZTA9MHglMDRYKCVkKS4gVGVybWluYXRpbmcgIgorCQkJCSAgICAgICAiZG93bmxvYWRcbiIsIGJhc2UwLCBiYXNlMCk7CisJCQkJZ290byBkb25lOworCQkJfQorCQkJcmV0ID0gbXdpZmlleF9yZWFkX3JlZyhhZGFwdGVyLCBIT1NUX0YxX1JEX0JBU0VfMSwKKwkJCQkJICAgICAgICZiYXNlMSk7CisJCQlpZiAocmV0KSB7CisJCQkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJkZXYgQkFTRTEgcmVnaXN0ZXIgcmVhZCIKKwkJCQkJIiBmYWlsZWQ6IGJhc2UxPTB4JTA0WCglZCkuIFRlcm1pbmF0aW5nICIKKwkJCQkgICAgICAgImRvd25sb2FkXG4iLCBiYXNlMSwgYmFzZTEpOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJCWxlbiA9ICh1MTYpICgoKGJhc2UxICYgMHhmZikgPDwgOCkgfCAoYmFzZTAgJiAweGZmKSk7CisKKwkJCWlmIChsZW4pCisJCQkJYnJlYWs7CisKKwkJCXVkZWxheSgxMCk7CisJCX0KKworCQlpZiAoIWxlbikgeworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAobGVuID4gTVdJRklFWF9VUExEX1NJWkUpIHsKKwkJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiRlcgZG93bmxvYWQgZmFpbGVkIEAgJWQsIgorCQkJCSIgaW52YWxpZCBsZW5ndGggJWRcbiIsIG9mZnNldCwgbGVuKTsKKwkJCXJldCA9IC0xOworCQkJZ290byBkb25lOworCQl9CisKKwkJdHhsZW4gPSBsZW47CisKKwkJaWYgKGxlbiAmIEJJVCgwKSkgeworCQkJaSsrOworCQkJaWYgKGkgPiBNQVhfV1JJVEVfSU9NRU1fUkVUUlkpIHsKKwkJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIkZXIGRvd25sb2FkIGZhaWxlZCBAIgorCQkJCQkiICVkLCBvdmVyIG1heCByZXRyeSBjb3VudFxuIiwgb2Zmc2V0KTsKKwkJCQlyZXQgPSAtMTsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIkNSQyBpbmRpY2F0ZWQgYnkgdGhlIGhlbHBlcjoiCisJCQkgICAgICAgIiBsZW4gPSAweCUwNFgsIHR4bGVuID0gJWRcbiIsIGxlbiwgdHhsZW4pOworCQkJbGVuICY9IH5CSVQoMCk7CisJCQkvKiBTZXR0aW5nIHRoaXMgdG8gMCB0byByZXNlbmQgZnJvbSBzYW1lIG9mZnNldCAqLworCQkJdHhsZW4gPSAwOworCQl9IGVsc2UgeworCQkJaSA9IDA7CisKKwkJCS8qIFNldCBibG9ja3NpemUgdG8gdHJhbnNmZXIgLSBjaGVja2luZyBmb3IgbGFzdAorCQkJICAgYmxvY2sgKi8KKwkJCWlmIChmaXJtd2FyZV9sZW4gLSBvZmZzZXQgPCB0eGxlbikKKwkJCQl0eGxlbiA9IGZpcm13YXJlX2xlbiAtIG9mZnNldDsKKworCQkJdHhfYmxvY2tzID0gKHR4bGVuICsgTVdJRklFWF9TRElPX0JMT0NLX1NJWkUgLQorCQkJCQkxKSAvIE1XSUZJRVhfU0RJT19CTE9DS19TSVpFOworCisJCQkvKiBDb3B5IHBheWxvYWQgdG8gYnVmZmVyICovCisJCQltZW1tb3ZlKGZ3YnVmLCAmZmlybXdhcmVbb2Zmc2V0XSwgdHhsZW4pOworCQl9CisKKwkJcmV0ID0gbXdpZmlleF93cml0ZV9kYXRhX3N5bmMoYWRhcHRlciwgZndidWYsIHR4X2Jsb2NrcyAqCisJCQkJCSAgICAgIE1XSUZJRVhfU0RJT19CTE9DS19TSVpFLAorCQkJCQkgICAgICBhZGFwdGVyLT5pb3BvcnQpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIkZXIGRvd25sb2FkLCB3cml0ZSBpb21lbSAoJWQpIgorCQkJCQkiIGZhaWxlZCBAICVkXG4iLCBpLCBvZmZzZXQpOworCQkJaWYgKG13aWZpZXhfd3JpdGVfcmVnKGFkYXB0ZXIsIENPTkZJR1VSQVRJT05fUkVHLCAweDA0KSkKKwkJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIndyaXRlIENGRyByZWcgZmFpbGVkXG4iKTsKKworCQkJcmV0ID0gLTE7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQlvZmZzZXQgKz0gdHhsZW47CisJfSB3aGlsZSAodHJ1ZSk7CisKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IEZXIGRvd25sb2FkIG92ZXIsIHNpemUgJWQgYnl0ZXNcbiIsCisJCQkJCQlvZmZzZXQpOworCisJcmV0ID0gMDsKK2RvbmU6CisJa2ZyZWUoZndidWYpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgZmlybXdhcmUgc3RhdHVzIGluIGNhcmQuCisgKgorICogVGhlIHdpbm5lciBpbnRlcmZhY2UgaXMgYWxzbyBkZXRlcm1pbmVkIGJ5IHRoaXMgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9jaGVja19md19zdGF0dXMoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgICB1MzIgcG9sbF9udW0sIGludCAqd2lubmVyKQoreworCWludCByZXQgPSAwOworCXUxNiBmaXJtd2FyZV9zdGF0OworCXUzMiB0cmllczsKKwl1MzIgd2lubmVyX3N0YXR1czsKKworCS8qIFdhaXQgZm9yIGZpcm13YXJlIGluaXRpYWxpemF0aW9uIGV2ZW50ICovCisJZm9yICh0cmllcyA9IDA7IHRyaWVzIDwgcG9sbF9udW07IHRyaWVzKyspIHsKKwkJcmV0ID0gbXdpZmlleF9zZGlvX3JlYWRfZndfc3RhdHVzKGFkYXB0ZXIsICZmaXJtd2FyZV9zdGF0KTsKKwkJaWYgKHJldCkKKwkJCWNvbnRpbnVlOworCQlpZiAoZmlybXdhcmVfc3RhdCA9PSBGSVJNV0FSRV9SRUFEWSkgeworCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJbWRlbGF5KDEwMCk7CisJCQlyZXQgPSAtMTsKKwkJfQorCX0KKworCWlmICh3aW5uZXIgJiYgcmV0KSB7CisJCWlmIChtd2lmaWV4X3JlYWRfcmVnCisJCSAgICAoYWRhcHRlciwgQ0FSRF9GV19TVEFUVVMwX1JFRywgJndpbm5lcl9zdGF0dXMpKQorCQkJd2lubmVyX3N0YXR1cyA9IDA7CisKKwkJaWYgKHdpbm5lcl9zdGF0dXMpCisJCQkqd2lubmVyID0gMDsKKwkJZWxzZQorCQkJKndpbm5lciA9IDE7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIGZyb20gY2FyZC4KKyAqLworc3RhdGljIHZvaWQgbXdpZmlleF9pbnRlcnJ1cHRfc3RhdHVzKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNkaW9fbW1jX2NhcmQgKmNhcmQgPSBhZGFwdGVyLT5jYXJkOworCXUzMiBzZGlvX2lyZWc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChtd2lmaWV4X3JlYWRfZGF0YV9zeW5jKGFkYXB0ZXIsIGNhcmQtPm1wX3JlZ3MsIE1BWF9NUF9SRUdTLAorCQkJCSAgIFJFR19QT1JUIHwgTVdJRklFWF9TRElPX0JZVEVfTU9ERV9NQVNLLAorCQkJCSAgIDApKSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAicmVhZCBtcF9yZWdzIGZhaWxlZFxuIik7CisJCXJldHVybjsKKwl9CisKKwlzZGlvX2lyZWcgPSBjYXJkLT5tcF9yZWdzW0hPU1RfSU5UU1RBVFVTX1JFR107CisJaWYgKHNkaW9faXJlZykgeworCQkvKgorCQkgKiBETl9MRF9IT1NUX0lOVF9TVEFUVVMgYW5kL29yIFVQX0xEX0hPU1RfSU5UX1NUQVRVUworCQkgKiBDbGVhciB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcgorCQkgKi8KKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbnQ6IHNkaW9faXJlZyA9ICUjeFxuIiwgc2Rpb19pcmVnKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmludF9sb2NrLCBmbGFncyk7CisJCWFkYXB0ZXItPmludF9zdGF0dXMgfD0gc2Rpb19pcmVnOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5pbnRfbG9jaywgZmxhZ3MpOworCX0KK30KKworLyoKKyAqIFNESU8gaW50ZXJydXB0IGhhbmRsZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgaW50ZXJydXB0IHN0YXR1cyBmcm9tIGZpcm13YXJlIGFuZCBhc3NpZ25zCisgKiB0aGUgbWFpbiBwcm9jZXNzIGluIHdvcmtxdWV1ZSB3aGljaCB3aWxsIGhhbmRsZSB0aGUgaW50ZXJydXB0LgorICovCitzdGF0aWMgdm9pZAorbXdpZmlleF9zZGlvX2ludGVycnVwdChzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKQoreworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXI7CisJc3RydWN0IHNkaW9fbW1jX2NhcmQgKmNhcmQ7CisKKwljYXJkID0gc2Rpb19nZXRfZHJ2ZGF0YShmdW5jKTsKKwlpZiAoIWNhcmQgfHwgIWNhcmQtPmFkYXB0ZXIpIHsKKwkJcHJfZGVidWcoImludDogZnVuYz0lcCBjYXJkPSVwIGFkYXB0ZXI9JXBcbiIsCisJCSAgICAgICBmdW5jLCBjYXJkLCBjYXJkID8gY2FyZC0+YWRhcHRlciA6IE5VTEwpOworCQlyZXR1cm47CisJfQorCWFkYXB0ZXIgPSBjYXJkLT5hZGFwdGVyOworCisJaWYgKGFkYXB0ZXItPnN1cnByaXNlX3JlbW92ZWQpCisJCXJldHVybjsKKworCWlmICghYWRhcHRlci0+cHBzX3VhcHNkX21vZGUgJiYgYWRhcHRlci0+cHNfc3RhdGUgPT0gUFNfU1RBVEVfU0xFRVApCisJCWFkYXB0ZXItPnBzX3N0YXRlID0gUFNfU1RBVEVfQVdBS0U7CisKKwltd2lmaWV4X2ludGVycnVwdF9zdGF0dXMoYWRhcHRlcik7CisJcXVldWVfd29yayhhZGFwdGVyLT53b3JrcXVldWUsICZhZGFwdGVyLT5tYWluX3dvcmspOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBkZWNvZGVzIGEgcmVjZWl2ZWQgcGFja2V0LgorICoKKyAqIEJhc2VkIG9uIHRoZSB0eXBlLCB0aGUgcGFja2V0IGlzIHRyZWF0ZWQgYXMgZWl0aGVyIGEgZGF0YSwgb3IKKyAqIGEgY29tbWFuZCByZXNwb25zZSwgb3IgYW4gZXZlbnQsIGFuZCB0aGUgY29ycmVjdCBoYW5kbGVyCisgKiBmdW5jdGlvbiBpcyBpbnZva2VkLgorICovCitzdGF0aWMgaW50IG13aWZpZXhfZGVjb2RlX3J4X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgdXBsZF90eXApCit7CisJdTggKmNtZF9idWY7CisKKwlza2JfcHVsbChza2IsIElOVEZfSEVBREVSX0xFTik7CisKKwlzd2l0Y2ggKHVwbGRfdHlwKSB7CisJY2FzZSBNV0lGSUVYX1RZUEVfREFUQToKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiAtLS0gUng6IERhdGEgcGFja2V0IC0tLVxuIik7CisJCW13aWZpZXhfaGFuZGxlX3J4X3BhY2tldChhZGFwdGVyLCBza2IpOworCQlicmVhazsKKworCWNhc2UgTVdJRklFWF9UWVBFX0NNRDoKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiAtLS0gUng6IENtZCBSZXNwb25zZSAtLS1cbiIpOworCQkvKiB0YWtlIGNhcmUgb2YgY3Vycl9jbWQgPSBOVUxMIGNhc2UgKi8KKwkJaWYgKCFhZGFwdGVyLT5jdXJyX2NtZCkgeworCQkJY21kX2J1ZiA9IGFkYXB0ZXItPnVwbGRfYnVmOworCisJCQlpZiAoYWRhcHRlci0+cHNfc3RhdGUgPT0gUFNfU1RBVEVfU0xFRVBfQ0ZNKQorCQkJCW13aWZpZXhfcHJvY2Vzc19zbGVlcF9jb25maXJtX3Jlc3AoYWRhcHRlciwKKwkJCQkJCQlza2ItPmRhdGEsIHNrYi0+bGVuKTsKKworCQkJbWVtY3B5KGNtZF9idWYsIHNrYi0+ZGF0YSwgbWluX3QodTMyLAorCQkJCSAgICAgICBNV0lGSUVYX1NJWkVfT0ZfQ01EX0JVRkZFUiwgc2tiLT5sZW4pKTsKKworCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJfSBlbHNlIHsKKwkJCWFkYXB0ZXItPmNtZF9yZXNwX3JlY2VpdmVkID0gdHJ1ZTsKKwkJCWFkYXB0ZXItPmN1cnJfY21kLT5yZXNwX3NrYiA9IHNrYjsKKwkJfQorCQlicmVhazsKKworCWNhc2UgTVdJRklFWF9UWVBFX0VWRU5UOgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IC0tLSBSeDogRXZlbnQgLS0tXG4iKTsKKwkJYWRhcHRlci0+ZXZlbnRfY2F1c2UgPSAqKHUzMiAqKSBza2ItPmRhdGE7CisKKwkJc2tiX3B1bGwoc2tiLCBNV0lGSUVYX0VWRU5UX0hFQURFUl9MRU4pOworCisJCWlmICgoc2tiLT5sZW4gPiAwKSAmJiAoc2tiLT5sZW4gIDwgTUFYX0VWRU5UX1NJWkUpKQorCQkJbWVtY3B5KGFkYXB0ZXItPmV2ZW50X2JvZHksIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCisJCS8qIGV2ZW50IGNhdXNlIGhhcyBiZWVuIHNhdmVkIHRvIGFkYXB0ZXItPmV2ZW50X2NhdXNlICovCisJCWFkYXB0ZXItPmV2ZW50X3JlY2VpdmVkID0gdHJ1ZTsKKwkJYWRhcHRlci0+ZXZlbnRfc2tiID0gc2tiOworCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJ1bmtub3duIHVwbG9hZCB0eXBlICUjeFxuIiwgdXBsZF90eXApOworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gdHJhbnNmZXJzIHJlY2VpdmVkIHBhY2tldHMgZnJvbSBjYXJkIHRvIGRyaXZlciwgcGVyZm9ybWluZworICogYWdncmVnYXRpb24gaWYgcmVxdWlyZWQuCisgKgorICogRm9yIGRhdGEgcmVjZWl2ZWQgb24gY29udHJvbCBwb3J0LCBvciBpZiBhZ2dyZWdhdGlvbiBpcyBkaXNhYmxlZCwgdGhlCisgKiByZWNlaXZlZCBidWZmZXJzIGFyZSB1cGxvYWRlZCBhcyBzZXBhcmF0ZSBwYWNrZXRzLiBIb3dldmVyLCBpZiBhZ2dyZWdhdGlvbgorICogaXMgZW5hYmxlZCBhbmQgcmVxdWlyZWQsIHRoZSBidWZmZXJzIGFyZSBjb3BpZWQgb250byBhbiBhZ2dyZWdhdGlvbiBidWZmZXIsCisgKiBwcm92aWRlZCB0aGVyZSBpcyBzcGFjZSBsZWZ0LCBwcm9jZXNzZWQgYW5kIGZpbmFsbHkgdXBsb2FkZWQuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9zZGlvX2NhcmRfdG9faG9zdF9tcF9hZ2dyKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggcG9ydCkKK3sKKwlzdHJ1Y3Qgc2Rpb19tbWNfY2FyZCAqY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisJczMyIGZfZG9fcnhfYWdnciA9IDA7CisJczMyIGZfZG9fcnhfY3VyID0gMDsKKwlzMzIgZl9hZ2dyX2N1ciA9IDA7CisJc3RydWN0IHNrX2J1ZmYgKnNrYl9kZWFnZ3I7CisJdTMyIHBpbmQ7CisJdTMyIHBrdF9sZW4sIHBrdF90eXBlID0gMDsKKwl1OCAqY3Vycl9wdHI7CisJdTMyIHJ4X2xlbiA9IHNrYi0+bGVuOworCisJaWYgKHBvcnQgPT0gQ1RSTF9QT1JUKSB7CisJCS8qIFJlYWQgdGhlIGNvbW1hbmQgUmVzcCB3aXRob3V0IGFnZ3IgKi8KKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiAlczogbm8gYWdncmVnYXRpb24gZm9yIGNtZCAiCisJCQkJInJlc3BvbnNlXG4iLCBfX2Z1bmNfXyk7CisKKwkJZl9kb19yeF9jdXIgPSAxOworCQlnb3RvIHJ4X2N1cnJfc2luZ2xlOworCX0KKworCWlmICghY2FyZC0+bXBhX3J4LmVuYWJsZWQpIHsKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiAlczogcnggYWdncmVnYXRpb24gZGlzYWJsZWRcbiIsCisJCQkJCQlfX2Z1bmNfXyk7CisKKwkJZl9kb19yeF9jdXIgPSAxOworCQlnb3RvIHJ4X2N1cnJfc2luZ2xlOworCX0KKworCWlmIChjYXJkLT5tcF9yZF9iaXRtYXAgJiAofigodTE2KSBDVFJMX1BPUlRfTUFTSykpKSB7CisJCS8qIFNvbWUgbW9yZSBkYXRhIFJYIHBlbmRpbmcgKi8KKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiAlczogbm90IGxhc3QgcGFja2V0XG4iLCBfX2Z1bmNfXyk7CisKKwkJaWYgKE1QX1JYX0FHR1JfSU5fUFJPR1JFU1MoY2FyZCkpIHsKKwkJCWlmIChNUF9SWF9BR0dSX0JVRl9IQVNfUk9PTShjYXJkLCBza2ItPmxlbikpIHsKKwkJCQlmX2FnZ3JfY3VyID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJLyogTm8gcm9vbSBpbiBBZ2dyIGJ1ZiwgZG8gcnggYWdnciBub3cgKi8KKwkJCQlmX2RvX3J4X2FnZ3IgPSAxOworCQkJCWZfZG9fcnhfY3VyID0gMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIFJ4IGFnZ3Igbm90IGluIHByb2dyZXNzICovCisJCQlmX2FnZ3JfY3VyID0gMTsKKwkJfQorCisJfSBlbHNlIHsKKwkJLyogTm8gbW9yZSBkYXRhIFJYIHBlbmRpbmcgKi8KKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiAlczogbGFzdCBwYWNrZXRcbiIsIF9fZnVuY19fKTsKKworCQlpZiAoTVBfUlhfQUdHUl9JTl9QUk9HUkVTUyhjYXJkKSkgeworCQkJZl9kb19yeF9hZ2dyID0gMTsKKwkJCWlmIChNUF9SWF9BR0dSX0JVRl9IQVNfUk9PTShjYXJkLCBza2ItPmxlbikpCisJCQkJZl9hZ2dyX2N1ciA9IDE7CisJCQllbHNlCisJCQkJLyogTm8gcm9vbSBpbiBBZ2dyIGJ1ZiwgZG8gcnggYWdnciBub3cgKi8KKwkJCQlmX2RvX3J4X2N1ciA9IDE7CisJCX0gZWxzZSB7CisJCQlmX2RvX3J4X2N1ciA9IDE7CisJCX0KKwl9CisKKwlpZiAoZl9hZ2dyX2N1cikgeworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IGN1cnJlbnQgcGFja2V0IGFnZ3JlZ2F0aW9uXG4iKTsKKwkJLyogQ3VyciBwa3QgY2FuIGJlIGFnZ3JlZ2F0ZWQgKi8KKwkJTVBfUlhfQUdHUl9TRVRVUChjYXJkLCBza2IsIHBvcnQpOworCisJCWlmIChNUF9SWF9BR0dSX1BLVF9MSU1JVF9SRUFDSEVEKGNhcmQpIHx8CisJCSAgICBNUF9SWF9BR0dSX1BPUlRfTElNSVRfUkVBQ0hFRChjYXJkKSkgeworCQkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiAlczogYWdncmVnYXRlZCBwYWNrZXQgIgorCQkJCQkibGltaXQgcmVhY2hlZFxuIiwgX19mdW5jX18pOworCQkJLyogTm8gbW9yZSBwa3RzIGFsbG93ZWQgaW4gQWdnciBidWYsIHJ4IGl0ICovCisJCQlmX2RvX3J4X2FnZ3IgPSAxOworCQl9CisJfQorCisJaWYgKGZfZG9fcnhfYWdncikgeworCQkvKiBkbyBhZ2dyIFJYIG5vdyAqLworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IGRvX3J4X2FnZ3I6IG51bSBvZiBwYWNrZXRzOiAlZFxuIiwKKwkJICAgICAgIGNhcmQtPm1wYV9yeC5wa3RfY250KTsKKworCQlpZiAobXdpZmlleF9yZWFkX2RhdGFfc3luYyhhZGFwdGVyLCBjYXJkLT5tcGFfcnguYnVmLAorCQkJCQkgICBjYXJkLT5tcGFfcnguYnVmX2xlbiwKKwkJCQkJICAgKGFkYXB0ZXItPmlvcG9ydCB8IDB4MTAwMCB8CisJCQkJCSAgICAoY2FyZC0+bXBhX3J4LnBvcnRzIDw8IDQpKSArCisJCQkJCSAgIGNhcmQtPm1wYV9yeC5zdGFydF9wb3J0LCAxKSkKKwkJCXJldHVybiAtMTsKKworCQljdXJyX3B0ciA9IGNhcmQtPm1wYV9yeC5idWY7CisKKwkJZm9yIChwaW5kID0gMDsgcGluZCA8IGNhcmQtPm1wYV9yeC5wa3RfY250OyBwaW5kKyspIHsKKworCQkJLyogZ2V0IGN1cnIgUEtUIGxlbiAmIHR5cGUgKi8KKwkJCXBrdF9sZW4gPSAqKHUxNiAqKSAmY3Vycl9wdHJbMF07CisJCQlwa3RfdHlwZSA9ICoodTE2ICopICZjdXJyX3B0clsyXTsKKworCQkJLyogY29weSBwa3QgdG8gZGVhZ2dyIGJ1ZiAqLworCQkJc2tiX2RlYWdnciA9IGNhcmQtPm1wYV9yeC5za2JfYXJyW3BpbmRdOworCisJCQlpZiAoKHBrdF90eXBlID09IE1XSUZJRVhfVFlQRV9EQVRBKSAmJiAocGt0X2xlbiA8PQorCQkJCQkgY2FyZC0+bXBhX3J4Lmxlbl9hcnJbcGluZF0pKSB7CisKKwkJCQltZW1jcHkoc2tiX2RlYWdnci0+ZGF0YSwgY3Vycl9wdHIsIHBrdF9sZW4pOworCisJCQkJc2tiX3RyaW0oc2tiX2RlYWdnciwgcGt0X2xlbik7CisKKwkJCQkvKiBQcm9jZXNzIGRlLWFnZ3IgcGFja2V0ICovCisJCQkJbXdpZmlleF9kZWNvZGVfcnhfcGFja2V0KGFkYXB0ZXIsIHNrYl9kZWFnZ3IsCisJCQkJCQkJIHBrdF90eXBlKTsKKwkJCX0gZWxzZSB7CisJCQkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJ3cm9uZyBhZ2dyIHBrdDoiCisJCQkJCSIgdHlwZT0lZCBsZW49JWQgbWF4X2xlbj0lZFxuIiwKKwkJCQkJcGt0X3R5cGUsIHBrdF9sZW4sCisJCQkJCWNhcmQtPm1wYV9yeC5sZW5fYXJyW3BpbmRdKTsKKwkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2JfZGVhZ2dyKTsKKwkJCX0KKwkJCWN1cnJfcHRyICs9IGNhcmQtPm1wYV9yeC5sZW5fYXJyW3BpbmRdOworCQl9CisJCU1QX1JYX0FHR1JfQlVGX1JFU0VUKGNhcmQpOworCX0KKworcnhfY3Vycl9zaW5nbGU6CisJaWYgKGZfZG9fcnhfY3VyKSB7CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogUlg6IHBvcnQ6ICVkLCByeF9sZW46ICVkXG4iLAorCQkJcG9ydCwgcnhfbGVuKTsKKworCQlpZiAobXdpZmlleF9zZGlvX2NhcmRfdG9faG9zdChhZGFwdGVyLCAmcGt0X3R5cGUsCisJCQkJCSAgICAgIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCisJCQkJCSAgICAgIGFkYXB0ZXItPmlvcG9ydCArIHBvcnQpKQorCQkJcmV0dXJuIC0xOworCisJCW13aWZpZXhfZGVjb2RlX3J4X3BhY2tldChhZGFwdGVyLCBza2IsIHBrdF90eXBlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoZSBjdXJyZW50IGludGVycnVwdCBzdGF0dXMuCisgKgorICogVGhlIGZvbGxvd2luZyBpbnRlcnJ1cHRzIGFyZSBjaGVja2VkIGFuZCBoYW5kbGVkIGJ5IHRoaXMgZnVuY3Rpb24gLQorICogICAgICAtIERhdGEgc2VudAorICogICAgICAtIENvbW1hbmQgc2VudAorICogICAgICAtIFBhY2tldHMgcmVjZWl2ZWQKKyAqCisgKiBTaW5jZSB0aGUgZmlybXdhcmUgZG9lcyBub3QgZ2VuZXJhdGUgZG93bmxvYWQgcmVhZHkgaW50ZXJydXB0IGlmIHRoZQorICogcG9ydCB1cGRhdGVkIGlzIGNvbW1hbmQgcG9ydCBvbmx5LCBjb21tYW5kIHNlbnQgaW50ZXJydXB0IGNoZWNraW5nCisgKiBzaG91bGQgYmUgZG9uZSBtYW51YWxseSwgYW5kIGZvciBldmVyeSBTRElPIGludGVycnVwdC4KKyAqCisgKiBJbiBjYXNlIG9mIFJ4IHBhY2tldHMgcmVjZWl2ZWQsIHRoZSBwYWNrZXRzIGFyZSB1cGxvYWRlZCBmcm9tIGNhcmQgdG8KKyAqIGhvc3QgYW5kIHByb2Nlc3NlZCBhY2NvcmRpbmdseS4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X3Byb2Nlc3NfaW50X3N0YXR1cyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBzZGlvX21tY19jYXJkICpjYXJkID0gYWRhcHRlci0+Y2FyZDsKKwlpbnQgcmV0ID0gMDsKKwl1OCBzZGlvX2lyZWc7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1OCBwb3J0ID0gQ1RSTF9QT1JUOworCXUzMiBsZW5fcmVnX2wsIGxlbl9yZWdfdTsKKwl1MzIgcnhfYmxvY2tzOworCXUxNiByeF9sZW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5pbnRfbG9jaywgZmxhZ3MpOworCXNkaW9faXJlZyA9IGFkYXB0ZXItPmludF9zdGF0dXM7CisJYWRhcHRlci0+aW50X3N0YXR1cyA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+aW50X2xvY2ssIGZsYWdzKTsKKworCWlmICghc2Rpb19pcmVnKQorCQlyZXR1cm4gcmV0OworCisJaWYgKHNkaW9faXJlZyAmIEROX0xEX0hPU1RfSU5UX1NUQVRVUykgeworCQljYXJkLT5tcF93cl9iaXRtYXAgPSAoKHUxNikgY2FyZC0+bXBfcmVnc1tXUl9CSVRNQVBfVV0pIDw8IDg7CisJCWNhcmQtPm1wX3dyX2JpdG1hcCB8PSAodTE2KSBjYXJkLT5tcF9yZWdzW1dSX0JJVE1BUF9MXTsKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbnQ6IEROTEQ6IHdyX2JpdG1hcD0weCUwNHhcbiIsCisJCQkJY2FyZC0+bXBfd3JfYml0bWFwKTsKKwkJaWYgKGFkYXB0ZXItPmRhdGFfc2VudCAmJgorCQkgICAgKGNhcmQtPm1wX3dyX2JpdG1hcCAmIGNhcmQtPm1wX2RhdGFfcG9ydF9tYXNrKSkgeworCQkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsCisJCQkJImluZm86ICA8LS0tIFR4IERPTkUgSW50ZXJydXB0IC0tLT5cbiIpOworCQkJYWRhcHRlci0+ZGF0YV9zZW50ID0gZmFsc2U7CisJCX0KKwl9CisKKwkvKiBBcyBmaXJtd2FyZSB3aWxsIG5vdCBnZW5lcmF0ZSBkb3dubG9hZCByZWFkeSBpbnRlcnJ1cHQgaWYgdGhlIHBvcnQKKwkgICB1cGRhdGVkIGlzIGNvbW1hbmQgcG9ydCBvbmx5LCBjbWRfc2VudCBzaG91bGQgYmUgZG9uZSBmb3IgYW55IFNESU8KKwkgICBpbnRlcnJ1cHQuICovCisJaWYgKGFkYXB0ZXItPmNtZF9zZW50KSB7CisJCS8qIENoZWNrIGlmIGZpcm13YXJlIGhhcyBhdHRhY2ggYnVmZmVyIGF0IGNvbW1hbmQgcG9ydCBhbmQKKwkJICAgdXBkYXRlIGp1c3QgdGhhdCBpbiB3cl9iaXRfbWFwLiAqLworCQljYXJkLT5tcF93cl9iaXRtYXAgfD0KKwkJCSh1MTYpIGNhcmQtPm1wX3JlZ3NbV1JfQklUTUFQX0xdICYgQ1RSTF9QT1JUX01BU0s7CisJCWlmIChjYXJkLT5tcF93cl9iaXRtYXAgJiBDVFJMX1BPUlRfTUFTSykKKwkJCWFkYXB0ZXItPmNtZF9zZW50ID0gZmFsc2U7CisJfQorCisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBjbWRfc2VudD0lZCBkYXRhX3NlbnQ9JWRcbiIsCisJICAgICAgIGFkYXB0ZXItPmNtZF9zZW50LCBhZGFwdGVyLT5kYXRhX3NlbnQpOworCWlmIChzZGlvX2lyZWcgJiBVUF9MRF9IT1NUX0lOVF9TVEFUVVMpIHsKKwkJY2FyZC0+bXBfcmRfYml0bWFwID0gKCh1MTYpIGNhcmQtPm1wX3JlZ3NbUkRfQklUTUFQX1VdKSA8PCA4OworCQljYXJkLT5tcF9yZF9iaXRtYXAgfD0gKHUxNikgY2FyZC0+bXBfcmVnc1tSRF9CSVRNQVBfTF07CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW50OiBVUExEOiByZF9iaXRtYXA9MHglMDR4XG4iLAorCQkJCWNhcmQtPm1wX3JkX2JpdG1hcCk7CisKKwkJd2hpbGUgKHRydWUpIHsKKwkJCXJldCA9IG13aWZpZXhfZ2V0X3JkX3BvcnQoYWRhcHRlciwgJnBvcnQpOworCQkJaWYgKHJldCkgeworCQkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LAorCQkJCQkiaW5mbzogbm8gbW9yZSByZF9wb3J0IGF2YWlsYWJsZVxuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCQlsZW5fcmVnX2wgPSBSRF9MRU5fUDBfTCArIChwb3J0IDw8IDEpOworCQkJbGVuX3JlZ191ID0gUkRfTEVOX1AwX1UgKyAocG9ydCA8PCAxKTsKKwkJCXJ4X2xlbiA9ICgodTE2KSBjYXJkLT5tcF9yZWdzW2xlbl9yZWdfdV0pIDw8IDg7CisJCQlyeF9sZW4gfD0gKHUxNikgY2FyZC0+bXBfcmVnc1tsZW5fcmVnX2xdOworCQkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBSWDogcG9ydD0lZCByeF9sZW49JXVcbiIsCisJCQkJCXBvcnQsIHJ4X2xlbik7CisJCQlyeF9ibG9ja3MgPQorCQkJCShyeF9sZW4gKyBNV0lGSUVYX1NESU9fQkxPQ0tfU0laRSAtCisJCQkJIDEpIC8gTVdJRklFWF9TRElPX0JMT0NLX1NJWkU7CisJCQlpZiAocnhfbGVuIDw9IElOVEZfSEVBREVSX0xFTgorCQkJICAgIHx8IChyeF9ibG9ja3MgKiBNV0lGSUVYX1NESU9fQkxPQ0tfU0laRSkgPgorCQkJICAgIE1XSUZJRVhfUlhfREFUQV9CVUZfU0laRSkgeworCQkJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiaW52YWxpZCByeF9sZW49JWRcbiIsCisJCQkJCQlyeF9sZW4pOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCXJ4X2xlbiA9ICh1MTYpIChyeF9ibG9ja3MgKiBNV0lGSUVYX1NESU9fQkxPQ0tfU0laRSk7CisKKwkJCXNrYiA9IGRldl9hbGxvY19za2IocnhfbGVuKTsKKworCQkJaWYgKCFza2IpIHsKKwkJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIiVzOiBmYWlsZWQgdG8gYWxsb2Mgc2tiIiwKKwkJCQkJCQkJX19mdW5jX18pOworCQkJCXJldHVybiAtMTsKKwkJCX0KKworCQkJc2tiX3B1dChza2IsIHJ4X2xlbik7CisKKwkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogcnhfbGVuID0gJWQgc2tiLT5sZW4gPSAlZFxuIiwKKwkJCQkJcnhfbGVuLCBza2ItPmxlbik7CisKKwkJCWlmIChtd2lmaWV4X3NkaW9fY2FyZF90b19ob3N0X21wX2FnZ3IoYWRhcHRlciwgc2tiLAorCQkJCQkJCSAgICAgIHBvcnQpKSB7CisJCQkJdTMyIGNyID0gMDsKKworCQkJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiY2FyZF90b19ob3N0X21wYSBmYWlsZWQ6IgorCQkJCQkJIiBpbnQgc3RhdHVzPSUjeFxuIiwgc2Rpb19pcmVnKTsKKwkJCQlpZiAobXdpZmlleF9yZWFkX3JlZyhhZGFwdGVyLAorCQkJCQkJICAgICBDT05GSUdVUkFUSU9OX1JFRywgJmNyKSkKKwkJCQkJZGV2X2VycihhZGFwdGVyLT5kZXYsCisJCQkJCQkJInJlYWQgQ0ZHIHJlZyBmYWlsZWRcbiIpOworCisJCQkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsCisJCQkJCQkiaW5mbzogQ0ZHIHJlZyB2YWwgPSAlZFxuIiwgY3IpOworCQkJCWlmIChtd2lmaWV4X3dyaXRlX3JlZyhhZGFwdGVyLAorCQkJCQkJICAgICAgQ09ORklHVVJBVElPTl9SRUcsCisJCQkJCQkgICAgICAoY3IgfCAweDA0KSkpCisJCQkJCWRldl9lcnIoYWRhcHRlci0+ZGV2LAorCQkJCQkJCSJ3cml0ZSBDRkcgcmVnIGZhaWxlZFxuIik7CisKKwkJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IHdyaXRlIHN1Y2Nlc3NcbiIpOworCQkJCWlmIChtd2lmaWV4X3JlYWRfcmVnKGFkYXB0ZXIsCisJCQkJCQkgICAgIENPTkZJR1VSQVRJT05fUkVHLCAmY3IpKQorCQkJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwKKwkJCQkJCQkicmVhZCBDRkcgcmVnIGZhaWxlZFxuIik7CisKKwkJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwKKwkJCQkJCSJpbmZvOiBDRkcgcmVnIHZhbCA9JXhcbiIsIGNyKTsKKwkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBhZ2dyZWdhdGVzIHRyYW5zbWlzc2lvbiBidWZmZXJzIGluIGRyaXZlciBhbmQgZG93bmxvYWRzCisgKiB0aGUgYWdncmVnYXRlZCBwYWNrZXQgdG8gY2FyZC4KKyAqCisgKiBUaGUgaW5kaXZpZHVhbCBwYWNrZXRzIGFyZSBhZ2dyZWdhdGVkIGJ5IGNvcHlpbmcgaW50byBhbiBhZ2dyZWdhdGlvbgorICogYnVmZmVyIGFuZCB0aGVuIGRvd25sb2FkZWQgdG8gdGhlIGNhcmQuIFByZXZpb3VzIHVuc2VudCBwYWNrZXRzIGluIHRoZQorICogYWdncmVnYXRpb24gYnVmZmVyIGFyZSBwcmUtY29waWVkIGZpcnN0IGJlZm9yZSBuZXcgcGFja2V0cyBhcmUgYWRkZWQuCisgKiBBZ2dyZWdhdGlvbiBpcyBkb25lIHRpbGwgdGhlcmUgaXMgc3BhY2UgbGVmdCBpbiB0aGUgYWdncmVnYXRpb24gYnVmZmVyLAorICogb3IgdGlsbCBuZXcgcGFja2V0cyBhcmUgYXZhaWxhYmxlLgorICoKKyAqIFRoZSBmdW5jdGlvbiB3aWxsIG9ubHkgZG93bmxvYWQgdGhlIHBhY2tldCB0byB0aGUgY2FyZCB3aGVuIGFnZ3JlZ2F0aW9uCisgKiBzdG9wcywgb3RoZXJ3aXNlIGl0IHdpbGwganVzdCBhZ2dyZWdhdGUgdGhlIHBhY2tldCBpbiBhZ2dyZWdhdGlvbiBidWZmZXIKKyAqIGFuZCByZXR1cm4uCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9ob3N0X3RvX2NhcmRfbXBfYWdncihzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAorCQkJCQl1OCAqcGF5bG9hZCwgdTMyIHBrdF9sZW4sIHU4IHBvcnQsCisJCQkJCXUzMiBuZXh0X3BrdF9sZW4pCit7CisJc3RydWN0IHNkaW9fbW1jX2NhcmQgKmNhcmQgPSBhZGFwdGVyLT5jYXJkOworCWludCByZXQgPSAwOworCXMzMiBmX3NlbmRfYWdncl9idWYgPSAwOworCXMzMiBmX3NlbmRfY3VyX2J1ZiA9IDA7CisJczMyIGZfcHJlY29weV9jdXJfYnVmID0gMDsKKwlzMzIgZl9wb3N0Y29weV9jdXJfYnVmID0gMDsKKworCWlmICgoIWNhcmQtPm1wYV90eC5lbmFibGVkKSB8fCAocG9ydCA9PSBDVFJMX1BPUlQpKSB7CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogJXM6IHR4IGFnZ3JlZ2F0aW9uIGRpc2FibGVkXG4iLAorCQkJCQkJX19mdW5jX18pOworCisJCWZfc2VuZF9jdXJfYnVmID0gMTsKKwkJZ290byB0eF9jdXJyX3NpbmdsZTsKKwl9CisKKwlpZiAobmV4dF9wa3RfbGVuKSB7CisJCS8qIE1vcmUgcGt0IGluIFRYIHF1ZXVlICovCisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogJXM6IG1vcmUgcGFja2V0cyBpbiBxdWV1ZS5cbiIsCisJCQkJCQlfX2Z1bmNfXyk7CisKKwkJaWYgKE1QX1RYX0FHR1JfSU5fUFJPR1JFU1MoY2FyZCkpIHsKKwkJCWlmICghTVBfVFhfQUdHUl9QT1JUX0xJTUlUX1JFQUNIRUQoY2FyZCkgJiYKKwkJCSAgICBNUF9UWF9BR0dSX0JVRl9IQVNfUk9PTShjYXJkLCBwa3RfbGVuKSkgeworCQkJCWZfcHJlY29weV9jdXJfYnVmID0gMTsKKworCQkJCWlmICghKGNhcmQtPm1wX3dyX2JpdG1hcCAmCisJCQkJCQkoMSA8PCBjYXJkLT5jdXJyX3dyX3BvcnQpKQorCQkJCQkJfHwgIU1QX1RYX0FHR1JfQlVGX0hBU19ST09NKAorCQkJCQkJCWNhcmQsIG5leHRfcGt0X2xlbikpCisJCQkJCWZfc2VuZF9hZ2dyX2J1ZiA9IDE7CisJCQl9IGVsc2UgeworCQkJCS8qIE5vIHJvb20gaW4gQWdnciBidWYsIHNlbmQgaXQgKi8KKwkJCQlmX3NlbmRfYWdncl9idWYgPSAxOworCisJCQkJaWYgKE1QX1RYX0FHR1JfUE9SVF9MSU1JVF9SRUFDSEVEKGNhcmQpIHx8CisJCQkJICAgICEoY2FyZC0+bXBfd3JfYml0bWFwICYKKwkJCQkgICAgICAoMSA8PCBjYXJkLT5jdXJyX3dyX3BvcnQpKSkKKwkJCQkJZl9zZW5kX2N1cl9idWYgPSAxOworCQkJCWVsc2UKKwkJCQkJZl9wb3N0Y29weV9jdXJfYnVmID0gMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChNUF9UWF9BR0dSX0JVRl9IQVNfUk9PTShjYXJkLCBwa3RfbGVuKQorCQkJICAgICYmIChjYXJkLT5tcF93cl9iaXRtYXAgJiAoMSA8PCBjYXJkLT5jdXJyX3dyX3BvcnQpKSkKKwkJCQlmX3ByZWNvcHlfY3VyX2J1ZiA9IDE7CisJCQllbHNlCisJCQkJZl9zZW5kX2N1cl9idWYgPSAxOworCQl9CisJfSBlbHNlIHsKKwkJLyogTGFzdCBwa3QgaW4gVFggcXVldWUgKi8KKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiAlczogTGFzdCBwYWNrZXQgaW4gVHggUXVldWUuXG4iLAorCQkJCQkJX19mdW5jX18pOworCisJCWlmIChNUF9UWF9BR0dSX0lOX1BST0dSRVNTKGNhcmQpKSB7CisJCQkvKiBzb21lIHBhY2tzIGluIEFnZ3IgYnVmIGFscmVhZHkgKi8KKwkJCWZfc2VuZF9hZ2dyX2J1ZiA9IDE7CisKKwkJCWlmIChNUF9UWF9BR0dSX0JVRl9IQVNfUk9PTShjYXJkLCBwa3RfbGVuKSkKKwkJCQlmX3ByZWNvcHlfY3VyX2J1ZiA9IDE7CisJCQllbHNlCisJCQkJLyogTm8gcm9vbSBpbiBBZ2dyIGJ1Ziwgc2VuZCBpdCAqLworCQkJCWZfc2VuZF9jdXJfYnVmID0gMTsKKwkJfSBlbHNlIHsKKwkJCWZfc2VuZF9jdXJfYnVmID0gMTsKKwkJfQorCX0KKworCWlmIChmX3ByZWNvcHlfY3VyX2J1ZikgeworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImRhdGE6ICVzOiBwcmVjb3B5IGN1cnJlbnQgYnVmZmVyXG4iLAorCQkJCQkJX19mdW5jX18pOworCQlNUF9UWF9BR0dSX0JVRl9QVVQoY2FyZCwgcGF5bG9hZCwgcGt0X2xlbiwgcG9ydCk7CisKKwkJaWYgKE1QX1RYX0FHR1JfUEtUX0xJTUlUX1JFQUNIRUQoY2FyZCkgfHwKKwkJICAgIE1QX1RYX0FHR1JfUE9SVF9MSU1JVF9SRUFDSEVEKGNhcmQpKQorCQkJLyogTm8gbW9yZSBwa3RzIGFsbG93ZWQgaW4gQWdnciBidWYsIHNlbmQgaXQgKi8KKwkJCWZfc2VuZF9hZ2dyX2J1ZiA9IDE7CisJfQorCisJaWYgKGZfc2VuZF9hZ2dyX2J1ZikgeworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImRhdGE6ICVzOiBzZW5kIGFnZ3IgYnVmZmVyOiAlZCAlZFxuIiwKKwkJCQlfX2Z1bmNfXywKKwkJCQljYXJkLT5tcGFfdHguc3RhcnRfcG9ydCwgY2FyZC0+bXBhX3R4LnBvcnRzKTsKKwkJcmV0ID0gbXdpZmlleF93cml0ZV9kYXRhX3RvX2NhcmQoYWRhcHRlciwgY2FyZC0+bXBhX3R4LmJ1ZiwKKwkJCQkJCSBjYXJkLT5tcGFfdHguYnVmX2xlbiwKKwkJCQkJCSAoYWRhcHRlci0+aW9wb3J0IHwgMHgxMDAwIHwKKwkJCQkJCSAoY2FyZC0+bXBhX3R4LnBvcnRzIDw8IDQpKSArCisJCQkJCQkgIGNhcmQtPm1wYV90eC5zdGFydF9wb3J0KTsKKworCQlNUF9UWF9BR0dSX0JVRl9SRVNFVChjYXJkKTsKKwl9CisKK3R4X2N1cnJfc2luZ2xlOgorCWlmIChmX3NlbmRfY3VyX2J1ZikgeworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImRhdGE6ICVzOiBzZW5kIGN1cnJlbnQgYnVmZmVyICVkXG4iLAorCQkJCQkJX19mdW5jX18sIHBvcnQpOworCQlyZXQgPSBtd2lmaWV4X3dyaXRlX2RhdGFfdG9fY2FyZChhZGFwdGVyLCBwYXlsb2FkLCBwa3RfbGVuLAorCQkJCQkJIGFkYXB0ZXItPmlvcG9ydCArIHBvcnQpOworCX0KKworCWlmIChmX3Bvc3Rjb3B5X2N1cl9idWYpIHsKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJkYXRhOiAlczogcG9zdGNvcHkgY3VycmVudCBidWZmZXJcbiIsCisJCQkJCQlfX2Z1bmNfXyk7CisJCU1QX1RYX0FHR1JfQlVGX1BVVChjYXJkLCBwYXlsb2FkLCBwa3RfbGVuLCBwb3J0KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBkb3dubG9hZHMgZGF0YSBmcm9tIGRyaXZlciB0byBjYXJkLgorICoKKyAqIEJvdGggY29tbWFuZHMgYW5kIGRhdGEgcGFja2V0cyBhcmUgdHJhbnNmZXJyZWQgdG8gdGhlIGNhcmQgYnkgdGhpcworICogZnVuY3Rpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBhZGRzIHRoZSBTRElPIHNwZWNpZmljIGhlYWRlciB0byB0aGUgZnJvbnQgb2YgdGhlIGJ1ZmZlcgorICogYmVmb3JlIHRyYW5zZmVycmluZy4gVGhlIGhlYWRlciBjb250YWlucyB0aGUgbGVuZ3RoIG9mIHRoZSBwYWNrZXQgYW5kCisgKiB0aGUgdHlwZS4gVGhlIGZpcm13YXJlIGhhbmRsZXMgdGhlIHBhY2tldHMgYmFzZWQgdXBvbiB0aGlzIHNldCB0eXBlLgorICovCitzdGF0aWMgaW50IG13aWZpZXhfc2Rpb19ob3N0X3RvX2NhcmQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgICAgIHU4IHR5cGUsIHU4ICpwYXlsb2FkLCB1MzIgcGt0X2xlbiwKKwkJCQkgICAgIHN0cnVjdCBtd2lmaWV4X3R4X3BhcmFtICp0eF9wYXJhbSkKK3sKKwlzdHJ1Y3Qgc2Rpb19tbWNfY2FyZCAqY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisJaW50IHJldDsKKwl1MzIgYnVmX2Jsb2NrX2xlbjsKKwl1MzIgYmxrX3NpemU7CisJdTggcG9ydCA9IENUUkxfUE9SVDsKKworCS8qIEFsbG9jYXRlIGJ1ZmZlciBhbmQgY29weSBwYXlsb2FkICovCisJYmxrX3NpemUgPSBNV0lGSUVYX1NESU9fQkxPQ0tfU0laRTsKKwlidWZfYmxvY2tfbGVuID0gKHBrdF9sZW4gKyBibGtfc2l6ZSAtIDEpIC8gYmxrX3NpemU7CisJKih1MTYgKikgJnBheWxvYWRbMF0gPSAodTE2KSBwa3RfbGVuOworCSoodTE2ICopICZwYXlsb2FkWzJdID0gdHlwZTsKKworCS8qCisJICogVGhpcyBpcyBTRElPIHNwZWNpZmljIGhlYWRlcgorCSAqICB1MTYgbGVuZ3RoLAorCSAqICB1MTYgdHlwZSAoTVdJRklFWF9UWVBFX0RBVEEgPSAwLCBNV0lGSUVYX1RZUEVfQ01EID0gMSwKKwkgKiAgTVdJRklFWF9UWVBFX0VWRU5UID0gMykKKwkgKi8KKwlpZiAodHlwZSA9PSBNV0lGSUVYX1RZUEVfREFUQSkgeworCQlyZXQgPSBtd2lmaWV4X2dldF93cl9wb3J0X2RhdGEoYWRhcHRlciwgJnBvcnQpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIiVzOiBubyB3cl9wb3J0IGF2YWlsYWJsZVxuIiwKKwkJCQkJCV9fZnVuY19fKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9IGVsc2UgeworCQlhZGFwdGVyLT5jbWRfc2VudCA9IHRydWU7CisJCS8qIFR5cGUgbXVzdCBiZSBNV0lGSUVYX1RZUEVfQ01EICovCisKKwkJaWYgKHBrdF9sZW4gPD0gSU5URl9IRUFERVJfTEVOIHx8CisJCSAgICBwa3RfbGVuID4gTVdJRklFWF9VUExEX1NJWkUpCisJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIiVzOiBwYXlsb2FkPSVwLCBuYj0lZFxuIiwKKwkJCQkJX19mdW5jX18sIHBheWxvYWQsIHBrdF9sZW4pOworCX0KKworCS8qIFRyYW5zZmVyIGRhdGEgdG8gY2FyZCAqLworCXBrdF9sZW4gPSBidWZfYmxvY2tfbGVuICogYmxrX3NpemU7CisKKwlpZiAodHhfcGFyYW0pCisJCXJldCA9IG13aWZpZXhfaG9zdF90b19jYXJkX21wX2FnZ3IoYWRhcHRlciwgcGF5bG9hZCwgcGt0X2xlbiwKKwkJCQlwb3J0LCB0eF9wYXJhbS0+bmV4dF9wa3RfbGVuKTsKKwllbHNlCisJCXJldCA9IG13aWZpZXhfaG9zdF90b19jYXJkX21wX2FnZ3IoYWRhcHRlciwgcGF5bG9hZCwgcGt0X2xlbiwKKwkJCQlwb3J0LCAwKTsKKworCWlmIChyZXQpIHsKKwkJaWYgKHR5cGUgPT0gTVdJRklFWF9UWVBFX0NNRCkKKwkJCWFkYXB0ZXItPmNtZF9zZW50ID0gZmFsc2U7CisJCWlmICh0eXBlID09IE1XSUZJRVhfVFlQRV9EQVRBKQorCQkJYWRhcHRlci0+ZGF0YV9zZW50ID0gZmFsc2U7CisJfSBlbHNlIHsKKwkJaWYgKHR5cGUgPT0gTVdJRklFWF9UWVBFX0RBVEEpIHsKKwkJCWlmICghKGNhcmQtPm1wX3dyX2JpdG1hcCAmICgxIDw8IGNhcmQtPmN1cnJfd3JfcG9ydCkpKQorCQkJCWFkYXB0ZXItPmRhdGFfc2VudCA9IHRydWU7CisJCQllbHNlCisJCQkJYWRhcHRlci0+ZGF0YV9zZW50ID0gZmFsc2U7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgdGhlIE1QQSBUeCBhbmQgUnggYnVmZmVycy4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X2FsbG9jX3NkaW9fbXBhX2J1ZmZlcnMoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgICB1MzIgbXBhX3R4X2J1Zl9zaXplLCB1MzIgbXBhX3J4X2J1Zl9zaXplKQoreworCXN0cnVjdCBzZGlvX21tY19jYXJkICpjYXJkID0gYWRhcHRlci0+Y2FyZDsKKwlpbnQgcmV0ID0gMDsKKworCWNhcmQtPm1wYV90eC5idWYgPSBremFsbG9jKG1wYV90eF9idWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjYXJkLT5tcGFfdHguYnVmKSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiY291bGQgbm90IGFsbG9jIGJ1ZmZlciBmb3IgTVAtQSBUWFxuIik7CisJCXJldCA9IC0xOworCQlnb3RvIGVycm9yOworCX0KKworCWNhcmQtPm1wYV90eC5idWZfc2l6ZSA9IG1wYV90eF9idWZfc2l6ZTsKKworCWNhcmQtPm1wYV9yeC5idWYgPSBremFsbG9jKG1wYV9yeF9idWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjYXJkLT5tcGFfcnguYnVmKSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiY291bGQgbm90IGFsbG9jIGJ1ZmZlciBmb3IgTVAtQSBSWFxuIik7CisJCXJldCA9IC0xOworCQlnb3RvIGVycm9yOworCX0KKworCWNhcmQtPm1wYV9yeC5idWZfc2l6ZSA9IG1wYV9yeF9idWZfc2l6ZTsKKworZXJyb3I6CisJaWYgKHJldCkgeworCQlrZnJlZShjYXJkLT5tcGFfdHguYnVmKTsKKwkJa2ZyZWUoY2FyZC0+bXBhX3J4LmJ1Zik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gdW5yZWdpc3RlcnMgdGhlIFNESU8gZGV2aWNlLgorICoKKyAqIFRoZSBTRElPIElSUSBpcyByZWxlYXNlZCwgdGhlIGZ1bmN0aW9uIGlzIGRpc2FibGVkIGFuZCBkcml2ZXIKKyAqIGRhdGEgaXMgc2V0IHRvIG51bGwuCisgKi8KK3N0YXRpYyB2b2lkCittd2lmaWV4X3VucmVnaXN0ZXJfZGV2KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNkaW9fbW1jX2NhcmQgKmNhcmQgPSBhZGFwdGVyLT5jYXJkOworCisJaWYgKGFkYXB0ZXItPmNhcmQpIHsKKwkJLyogUmVsZWFzZSB0aGUgU0RJTyBJUlEgKi8KKwkJc2Rpb19jbGFpbV9ob3N0KGNhcmQtPmZ1bmMpOworCQlzZGlvX3JlbGVhc2VfaXJxKGNhcmQtPmZ1bmMpOworCQlzZGlvX2Rpc2FibGVfZnVuYyhjYXJkLT5mdW5jKTsKKwkJc2Rpb19yZWxlYXNlX2hvc3QoY2FyZC0+ZnVuYyk7CisJCXNkaW9fc2V0X2RydmRhdGEoY2FyZC0+ZnVuYywgTlVMTCk7CisJfQorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgdGhlIFNESU8gZGV2aWNlLgorICoKKyAqIFNESU8gSVJRIGlzIGNsYWltZWQsIGJsb2NrIHNpemUgaXMgc2V0IGFuZCBkcml2ZXIgZGF0YSBpcyBpbml0aWFsaXplZC4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X3JlZ2lzdGVyX2RldihzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBzZGlvX21tY19jYXJkICpjYXJkID0gYWRhcHRlci0+Y2FyZDsKKwlzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jID0gY2FyZC0+ZnVuYzsKKworCS8qIHNhdmUgYWRhcHRlciBwb2ludGVyIGluIGNhcmQgKi8KKwljYXJkLT5hZGFwdGVyID0gYWRhcHRlcjsKKworCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKKworCS8qIFJlcXVlc3QgdGhlIFNESU8gSVJRICovCisJcmV0ID0gc2Rpb19jbGFpbV9pcnEoZnVuYywgbXdpZmlleF9zZGlvX2ludGVycnVwdCk7CisJaWYgKHJldCkgeworCQlwcl9lcnIoImNsYWltIGlycSBmYWlsZWQ6IHJldD0lZFxuIiwgcmV0KTsKKwkJZ290byBkaXNhYmxlX2Z1bmM7CisJfQorCisJLyogU2V0IGJsb2NrIHNpemUgKi8KKwlyZXQgPSBzZGlvX3NldF9ibG9ja19zaXplKGNhcmQtPmZ1bmMsIE1XSUZJRVhfU0RJT19CTE9DS19TSVpFKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiY2Fubm90IHNldCBTRElPIGJsb2NrIHNpemVcbiIpOworCQlyZXQgPSAtMTsKKwkJZ290byByZWxlYXNlX2lycTsKKwl9CisKKwlzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTsKKwlzZGlvX3NldF9kcnZkYXRhKGZ1bmMsIGNhcmQpOworCisJYWRhcHRlci0+ZGV2ID0gJmZ1bmMtPmRldjsKKworCXJldHVybiAwOworCityZWxlYXNlX2lycToKKwlzZGlvX3JlbGVhc2VfaXJxKGZ1bmMpOworZGlzYWJsZV9mdW5jOgorCXNkaW9fZGlzYWJsZV9mdW5jKGZ1bmMpOworCXNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpOworCWFkYXB0ZXItPmNhcmQgPSBOVUxMOworCisJcmV0dXJuIC0xOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgU0RJTyBkcml2ZXIuCisgKgorICogVGhlIGZvbGxvd2luZyBpbml0aWFsaXphdGlvbnMgc3RlcHMgYXJlIGZvbGxvd2VkIC0KKyAqICAgICAgLSBSZWFkIHRoZSBIb3N0IGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgdG8gYWNrbm93bGVkZ2UKKyAqICAgICAgICB0aGUgZmlyc3QgaW50ZXJydXB0IGdvdCBmcm9tIGJvb3Rsb2FkZXIKKyAqICAgICAgLSBEaXNhYmxlIGhvc3QgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIKKyAqICAgICAgLSBHZXQgU0RJTyBwb3J0CisgKiAgICAgIC0gR2V0IHJldmlzaW9uIElECisgKiAgICAgIC0gSW5pdGlhbGl6ZSBTRElPIHZhcmlhYmxlcyBpbiBjYXJkCisgKiAgICAgIC0gQWxsb2NhdGUgTVAgcmVnaXN0ZXJzCisgKiAgICAgIC0gQWxsb2NhdGUgTVBBIFR4IGFuZCBSeCBidWZmZXJzCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9pbml0X3NkaW8oc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2Rpb19tbWNfY2FyZCAqY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisJaW50IHJldDsKKwl1MzIgc2Rpb19pcmVnOworCisJLyoKKwkgKiBSZWFkIHRoZSBIT1NUX0lOVF9TVEFUVVNfUkVHIGZvciBBQ0sgdGhlIGZpcnN0IGludGVycnVwdCBnb3QKKwkgKiBmcm9tIHRoZSBib290bG9hZGVyLiBJZiB3ZSBkb24ndCBkbyB0aGlzIHdlIGdldCBhIGludGVycnVwdAorCSAqIGFzIHNvb24gYXMgd2UgcmVnaXN0ZXIgdGhlIGlycS4KKwkgKi8KKwltd2lmaWV4X3JlYWRfcmVnKGFkYXB0ZXIsIEhPU1RfSU5UU1RBVFVTX1JFRywgJnNkaW9faXJlZyk7CisKKwkvKiBEaXNhYmxlIGhvc3QgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgZm9yIFNESU8gKi8KKwltd2lmaWV4X3NkaW9fZGlzYWJsZV9ob3N0X2ludChhZGFwdGVyKTsKKworCS8qIEdldCBTRElPIGlvcG9ydCAqLworCW13aWZpZXhfaW5pdF9zZGlvX2lvcG9ydChhZGFwdGVyKTsKKworCS8qIEdldCByZXZpc2lvbiBJRCAqLworI2RlZmluZSBSRVZfSURfUkVHCTB4NWMKKwltd2lmaWV4X3JlYWRfcmVnKGFkYXB0ZXIsIFJFVl9JRF9SRUcsICZhZGFwdGVyLT5yZXZpc2lvbl9pZCk7CisKKwkvKiBJbml0aWFsaXplIFNESU8gdmFyaWFibGVzIGluIGNhcmQgKi8KKwljYXJkLT5tcF9yZF9iaXRtYXAgPSAwOworCWNhcmQtPm1wX3dyX2JpdG1hcCA9IDA7CisJY2FyZC0+Y3Vycl9yZF9wb3J0ID0gMTsKKwljYXJkLT5jdXJyX3dyX3BvcnQgPSAxOworCisJY2FyZC0+bXBfZGF0YV9wb3J0X21hc2sgPSBEQVRBX1BPUlRfTUFTSzsKKworCWNhcmQtPm1wYV90eC5idWZfbGVuID0gMDsKKwljYXJkLT5tcGFfdHgucGt0X2NudCA9IDA7CisJY2FyZC0+bXBhX3R4LnN0YXJ0X3BvcnQgPSAwOworCisJY2FyZC0+bXBhX3R4LmVuYWJsZWQgPSAwOworCWNhcmQtPm1wYV90eC5wa3RfYWdncl9saW1pdCA9IFNESU9fTVBfQUdHUl9ERUZfUEtUX0xJTUlUOworCisJY2FyZC0+bXBhX3J4LmJ1Zl9sZW4gPSAwOworCWNhcmQtPm1wYV9yeC5wa3RfY250ID0gMDsKKwljYXJkLT5tcGFfcnguc3RhcnRfcG9ydCA9IDA7CisKKwljYXJkLT5tcGFfcnguZW5hYmxlZCA9IDA7CisJY2FyZC0+bXBhX3J4LnBrdF9hZ2dyX2xpbWl0ID0gU0RJT19NUF9BR0dSX0RFRl9QS1RfTElNSVQ7CisKKwkvKiBBbGxvY2F0ZSBidWZmZXJzIGZvciBTRElPIE1QLUEgKi8KKwljYXJkLT5tcF9yZWdzID0ga3phbGxvYyhNQVhfTVBfUkVHUywgR0ZQX0tFUk5FTCk7CisJaWYgKCFjYXJkLT5tcF9yZWdzKSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jIG1wX3JlZ3NcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXQgPSBtd2lmaWV4X2FsbG9jX3NkaW9fbXBhX2J1ZmZlcnMoYWRhcHRlciwKKwkJCQkJICAgICBTRElPX01QX1RYX0FHR1JfREVGX0JVRl9TSVpFLAorCQkJCQkgICAgIFNESU9fTVBfUlhfQUdHUl9ERUZfQlVGX1NJWkUpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJmYWlsZWQgdG8gYWxsb2Mgc2RpbyBtcC1hIGJ1ZmZlcnNcbiIpOworCQlrZnJlZShjYXJkLT5tcF9yZWdzKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJlc2V0cyB0aGUgTVBBIFR4IGFuZCBSeCBidWZmZXJzLgorICovCitzdGF0aWMgdm9pZCBtd2lmaWV4X2NsZWFudXBfbXBhX2J1ZihzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBzZGlvX21tY19jYXJkICpjYXJkID0gYWRhcHRlci0+Y2FyZDsKKworCU1QX1RYX0FHR1JfQlVGX1JFU0VUKGNhcmQpOworCU1QX1JYX0FHR1JfQlVGX1JFU0VUKGNhcmQpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjbGVhbnMgdXAgdGhlIGFsbG9jYXRlZCBjYXJkIGJ1ZmZlcnMuCisgKgorICogVGhlIGZvbGxvd2luZyBhcmUgZnJlZWQgYnkgdGhpcyBmdW5jdGlvbiAtCisgKiAgICAgIC0gTVAgcmVnaXN0ZXJzCisgKiAgICAgIC0gTVBBIFR4IGJ1ZmZlcgorICogICAgICAtIE1QQSBSeCBidWZmZXIKKyAqLworc3RhdGljIHZvaWQgbXdpZmlleF9jbGVhbnVwX3NkaW8oc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2Rpb19tbWNfY2FyZCAqY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisKKwlrZnJlZShjYXJkLT5tcF9yZWdzKTsKKwlrZnJlZShjYXJkLT5tcGFfdHguYnVmKTsKKwlrZnJlZShjYXJkLT5tcGFfcnguYnVmKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgTVAgZW5kIHBvcnQgaW4gY2FyZC4KKyAqLworc3RhdGljIHZvaWQKK213aWZpZXhfdXBkYXRlX21wX2VuZF9wb3J0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBwb3J0KQoreworCXN0cnVjdCBzZGlvX21tY19jYXJkICpjYXJkID0gYWRhcHRlci0+Y2FyZDsKKwlpbnQgaTsKKworCWNhcmQtPm1wX2VuZF9wb3J0ID0gcG9ydDsKKworCWNhcmQtPm1wX2RhdGFfcG9ydF9tYXNrID0gREFUQV9QT1JUX01BU0s7CisKKwlmb3IgKGkgPSAxOyBpIDw9IE1BWF9QT1JUIC0gY2FyZC0+bXBfZW5kX3BvcnQ7IGkrKykKKwkJY2FyZC0+bXBfZGF0YV9wb3J0X21hc2sgJj0gfigxIDw8IChNQVhfUE9SVCAtIGkpKTsKKworCWNhcmQtPmN1cnJfd3JfcG9ydCA9IDE7CisKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImNtZDogbXBfZW5kX3BvcnQgJWQsIGRhdGEgcG9ydCBtYXNrIDB4JXhcbiIsCisJICAgICAgIHBvcnQsIGNhcmQtPm1wX2RhdGFfcG9ydF9tYXNrKTsKK30KKworc3RhdGljIHN0cnVjdCBtd2lmaWV4X2lmX29wcyBzZGlvX29wcyA9IHsKKwkuaW5pdF9pZiA9IG13aWZpZXhfaW5pdF9zZGlvLAorCS5jbGVhbnVwX2lmID0gbXdpZmlleF9jbGVhbnVwX3NkaW8sCisJLmNoZWNrX2Z3X3N0YXR1cyA9IG13aWZpZXhfY2hlY2tfZndfc3RhdHVzLAorCS5wcm9nX2Z3ID0gbXdpZmlleF9wcm9nX2Z3X3dfaGVscGVyLAorCS5yZWdpc3Rlcl9kZXYgPSBtd2lmaWV4X3JlZ2lzdGVyX2RldiwKKwkudW5yZWdpc3Rlcl9kZXYgPSBtd2lmaWV4X3VucmVnaXN0ZXJfZGV2LAorCS5lbmFibGVfaW50ID0gbXdpZmlleF9zZGlvX2VuYWJsZV9ob3N0X2ludCwKKwkucHJvY2Vzc19pbnRfc3RhdHVzID0gbXdpZmlleF9wcm9jZXNzX2ludF9zdGF0dXMsCisJLmhvc3RfdG9fY2FyZCA9IG13aWZpZXhfc2Rpb19ob3N0X3RvX2NhcmQsCisJLndha2V1cCA9IG13aWZpZXhfcG1fd2FrZXVwX2NhcmQsCisJLndha2V1cF9jb21wbGV0ZSA9IG13aWZpZXhfcG1fd2FrZXVwX2NhcmRfY29tcGxldGUsCisKKwkvKiBTRElPIHNwZWNpZmljICovCisJLnVwZGF0ZV9tcF9lbmRfcG9ydCA9IG13aWZpZXhfdXBkYXRlX21wX2VuZF9wb3J0LAorCS5jbGVhbnVwX21wYV9idWYgPSBtd2lmaWV4X2NsZWFudXBfbXBhX2J1ZiwKK307CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBTRElPIGRyaXZlci4KKyAqCisgKiBUaGlzIGluaXRpYXRlcyB0aGUgc2VtYXBob3JlIGFuZCByZWdpc3RlcnMgdGhlIGRldmljZSB3aXRoCisgKiBTRElPIGJ1cy4KKyAqLworc3RhdGljIGludAorbXdpZmlleF9zZGlvX2luaXRfbW9kdWxlKHZvaWQpCit7CisJc2VtYV9pbml0KCZhZGRfcmVtb3ZlX2NhcmRfc2VtLCAxKTsKKworCXJldHVybiBzZGlvX3JlZ2lzdGVyX2RyaXZlcigmbXdpZmlleF9zZGlvKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2xlYW5zIHVwIHRoZSBTRElPIGRyaXZlci4KKyAqCisgKiBUaGUgZm9sbG93aW5nIG1ham9yIHN0ZXBzIGFyZSBmb2xsb3dlZCBmb3IgY2xlYW51cCAtCisgKiAgICAgIC0gUmVzdW1lIHRoZSBkZXZpY2UgaWYgaXRzIHN1c3BlbmRlZAorICogICAgICAtIERpc2Nvbm5lY3QgdGhlIGRldmljZSBpZiBjb25uZWN0ZWQKKyAqICAgICAgLSBTaHV0ZG93biB0aGUgZmlybXdhcmUKKyAqICAgICAgLSBVbnJlZ2lzdGVyIHRoZSBkZXZpY2UgZnJvbSBTRElPIGJ1cy4KKyAqLworc3RhdGljIHZvaWQKK213aWZpZXhfc2Rpb19jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBnX2FkYXB0ZXI7CisJaW50IGk7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZhZGRfcmVtb3ZlX2NhcmRfc2VtKSkKKwkJZ290byBleGl0X3NlbV9lcnI7CisKKwlpZiAoIWFkYXB0ZXIgfHwgIWFkYXB0ZXItPnByaXZfbnVtKQorCQlnb3RvIGV4aXQ7CisKKwlpZiAoYWRhcHRlci0+aXNfc3VzcGVuZGVkKQorCQltd2lmaWV4X3NkaW9fcmVzdW1lKGFkYXB0ZXItPmRldik7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+cHJpdl9udW07IGkrKykKKwkJaWYgKChHRVRfQlNTX1JPTEUoYWRhcHRlci0+cHJpdltpXSkgPT0gTVdJRklFWF9CU1NfUk9MRV9TVEEpICYmCisJCSAgICBhZGFwdGVyLT5wcml2W2ldLT5tZWRpYV9jb25uZWN0ZWQpCisJCQltd2lmaWV4X2RlYXV0aGVudGljYXRlKGFkYXB0ZXItPnByaXZbaV0sIE5VTEwpOworCisJaWYgKCFhZGFwdGVyLT5zdXJwcmlzZV9yZW1vdmVkKQorCQltd2lmaWV4X2luaXRfc2h1dGRvd25fZncobXdpZmlleF9nZXRfcHJpdihhZGFwdGVyLAorCQkJCQkJCSAgTVdJRklFWF9CU1NfUk9MRV9BTlkpLAorCQkJCQkgTVdJRklFWF9GVU5DX1NIVVRET1dOKTsKKworZXhpdDoKKwl1cCgmYWRkX3JlbW92ZV9jYXJkX3NlbSk7CisKK2V4aXRfc2VtX2VycjoKKwlzZGlvX3VucmVnaXN0ZXJfZHJpdmVyKCZtd2lmaWV4X3NkaW8pOworfQorCittb2R1bGVfaW5pdChtd2lmaWV4X3NkaW9faW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQobXdpZmlleF9zZGlvX2NsZWFudXBfbW9kdWxlKTsKKworTU9EVUxFX0FVVEhPUigiTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWFydmVsbCBXaUZpLUV4IFNESU8gRHJpdmVyIHZlcnNpb24gIiBTRElPX1ZFUlNJT04pOworTU9EVUxFX1ZFUlNJT04oU0RJT19WRVJTSU9OKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9GSVJNV0FSRSgic2Q4Nzg3LmJpbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zZGlvLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3NkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGU5YmM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zZGlvLmgKQEAgLTAsMCArMSwzMDUgQEAKKy8qCisgKiBNYXJ2ZWxsIFdpcmVsZXNzIExBTiBkZXZpY2UgZHJpdmVyOiBTRElPIHNwZWNpZmljIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5hdGlvbmFsCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4KKyAqIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBvZiB3aGljaAorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0Egb3Igb24gdGhlCisgKiB3b3JsZHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQuCisgKgorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNlIHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dAorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLgorICovCisKKyNpZm5kZWYJX01XSUZJRVhfU0RJT19ICisjZGVmaW5lCV9NV0lGSUVYX1NESU9fSAorCisKKyNpbmNsdWRlIDxsaW51eC9tbWMvc2Rpby5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9zZGlvX2lkcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9zZGlvX2Z1bmMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvY2FyZC5oPgorCisjaW5jbHVkZSAibWFpbi5oIgorCisjZGVmaW5lIEJMT0NLX01PREUJMQorI2RlZmluZSBCWVRFX01PREUJMAorCisjZGVmaW5lIFJFR19QT1JUCQkJMAorI2RlZmluZSBSRF9CSVRNQVBfTAkJCTB4MDQKKyNkZWZpbmUgUkRfQklUTUFQX1UJCQkweDA1CisjZGVmaW5lIFdSX0JJVE1BUF9MCQkJMHgwNgorI2RlZmluZSBXUl9CSVRNQVBfVQkJCTB4MDcKKyNkZWZpbmUgUkRfTEVOX1AwX0wJCQkweDA4CisjZGVmaW5lIFJEX0xFTl9QMF9VCQkJMHgwOQorCisjZGVmaW5lIE1XSUZJRVhfU0RJT19JT19QT1JUX01BU0sJCTB4ZmZmZmYKKworI2RlZmluZSBNV0lGSUVYX1NESU9fQllURV9NT0RFX01BU0sJMHg4MDAwMDAwMAorCisjZGVmaW5lIENUUkxfUE9SVAkJCTAKKyNkZWZpbmUgQ1RSTF9QT1JUX01BU0sJCQkweDAwMDEKKyNkZWZpbmUgREFUQV9QT1JUX01BU0sJCQkweGZmZmUKKworI2RlZmluZSBNQVhfTVBfUkVHUwkJCTY0CisjZGVmaW5lIE1BWF9QT1JUCQkJMTYKKworI2RlZmluZSBTRElPX01QX0FHR1JfREVGX1BLVF9MSU1JVAk4CisKKyNkZWZpbmUgU0RJT19NUF9UWF9BR0dSX0RFRl9CVUZfU0laRSAgICAgICAgKDQwOTYpCS8qIDRLICovCisKKy8qIE11bHRpIHBvcnQgUlggYWdncmVnYXRpb24gYnVmZmVyIHNpemUgKi8KKyNkZWZpbmUgU0RJT19NUF9SWF9BR0dSX0RFRl9CVUZfU0laRSAgICAgICAgKDQwOTYpCS8qIDRLICovCisKKy8qIE1pc2MuIENvbmZpZyBSZWdpc3RlciA6IEF1dG8gUmUtZW5hYmxlIGludGVycnVwdHMgKi8KKyNkZWZpbmUgQVVUT19SRV9FTkFCTEVfSU5UICAgICAgICAgICAgICBCSVQoNCkKKworLyogSG9zdCBDb250cm9sIFJlZ2lzdGVycyAqLworLyogSG9zdCBDb250cm9sIFJlZ2lzdGVycyA6IEkvTyBwb3J0IDAgKi8KKyNkZWZpbmUgSU9fUE9SVF8wX1JFRwkJCTB4NzgKKy8qIEhvc3QgQ29udHJvbCBSZWdpc3RlcnMgOiBJL08gcG9ydCAxICovCisjZGVmaW5lIElPX1BPUlRfMV9SRUcJCQkweDc5CisvKiBIb3N0IENvbnRyb2wgUmVnaXN0ZXJzIDogSS9PIHBvcnQgMiAqLworI2RlZmluZSBJT19QT1JUXzJfUkVHCQkJMHg3QQorCisvKiBIb3N0IENvbnRyb2wgUmVnaXN0ZXJzIDogQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBDT05GSUdVUkFUSU9OX1JFRwkJMHgwMAorLyogSG9zdCBDb250cm9sIFJlZ2lzdGVycyA6IEhvc3Qgd2l0aG91dCBDb21tYW5kIDUzIGZpbmlzaCBob3N0Ki8KKyNkZWZpbmUgSE9TVF9UT19DQVJEX0VWRU5UICAgICAgICgweDFVIDw8IDMpCisvKiBIb3N0IENvbnRyb2wgUmVnaXN0ZXJzIDogSG9zdCB3aXRob3V0IENvbW1hbmQgNTMgZmluaXNoIGhvc3QgKi8KKyNkZWZpbmUgSE9TVF9XT19DTUQ1M19GSU5JU0hfSE9TVAkoMHgxVSA8PCAyKQorLyogSG9zdCBDb250cm9sIFJlZ2lzdGVycyA6IEhvc3QgcG93ZXIgdXAgKi8KKyNkZWZpbmUgSE9TVF9QT1dFUl9VUAkJCSgweDFVIDw8IDEpCisvKiBIb3N0IENvbnRyb2wgUmVnaXN0ZXJzIDogSG9zdCBwb3dlciBkb3duICovCisjZGVmaW5lIEhPU1RfUE9XRVJfRE9XTgkJCSgweDFVIDw8IDApCisKKy8qIEhvc3QgQ29udHJvbCBSZWdpc3RlcnMgOiBIb3N0IGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIEhPU1RfSU5UX01BU0tfUkVHCQkweDAyCisvKiBIb3N0IENvbnRyb2wgUmVnaXN0ZXJzIDogVXBsb2FkIGhvc3QgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgVVBfTERfSE9TVF9JTlRfTUFTSwkJKDB4MVUpCisvKiBIb3N0IENvbnRyb2wgUmVnaXN0ZXJzIDogRG93bmxvYWQgaG9zdCBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBETl9MRF9IT1NUX0lOVF9NQVNLCQkoMHgyVSkKKy8qIEVuYWJsZSBIb3N0IGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIEhPU1RfSU5UX0VOQUJMRQkoVVBfTERfSE9TVF9JTlRfTUFTSyB8IEROX0xEX0hPU1RfSU5UX01BU0spCisvKiBEaXNhYmxlIEhvc3QgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUJSE9TVF9JTlRfRElTQUJMRQkJMHhmZgorCisvKiBIb3N0IENvbnRyb2wgUmVnaXN0ZXJzIDogSG9zdCBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lIEhPU1RfSU5UU1RBVFVTX1JFRwkJMHgwMworLyogSG9zdCBDb250cm9sIFJlZ2lzdGVycyA6IFVwbG9hZCBob3N0IGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgVVBfTERfSE9TVF9JTlRfU1RBVFVTCQkoMHgxVSkKKy8qIEhvc3QgQ29udHJvbCBSZWdpc3RlcnMgOiBEb3dubG9hZCBob3N0IGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgRE5fTERfSE9TVF9JTlRfU1RBVFVTCQkoMHgyVSkKKworLyogSG9zdCBDb250cm9sIFJlZ2lzdGVycyA6IEhvc3QgaW50ZXJydXB0IFJTUiAqLworI2RlZmluZSBIT1NUX0lOVF9SU1JfUkVHCQkweDAxCisvKiBIb3N0IENvbnRyb2wgUmVnaXN0ZXJzIDogVXBsb2FkIGhvc3QgaW50ZXJydXB0IFJTUiAqLworI2RlZmluZSBVUF9MRF9IT1NUX0lOVF9SU1IJCSgweDFVKQorI2RlZmluZSBTRElPX0lOVF9NQVNLCQkJMHgzRgorCisvKiBIb3N0IENvbnRyb2wgUmVnaXN0ZXJzIDogSG9zdCBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lIEhPU1RfSU5UX1NUQVRVU19SRUcJCTB4MjgKKy8qIEhvc3QgQ29udHJvbCBSZWdpc3RlcnMgOiBVcGxvYWQgQ1JDIGVycm9yICovCisjZGVmaW5lIFVQX0xEX0NSQ19FUlIJCQkoMHgxVSA8PCAyKQorLyogSG9zdCBDb250cm9sIFJlZ2lzdGVycyA6IFVwbG9hZCByZXN0YXJ0ICovCisjZGVmaW5lIFVQX0xEX1JFU1RBUlQgICAgICAgICAgICAgICAgICAgKDB4MVUgPDwgMSkKKy8qIEhvc3QgQ29udHJvbCBSZWdpc3RlcnMgOiBEb3dubG9hZCByZXN0YXJ0ICovCisjZGVmaW5lIEROX0xEX1JFU1RBUlQgICAgICAgICAgICAgICAgICAgKDB4MVUgPDwgMCkKKworLyogQ2FyZCBDb250cm9sIFJlZ2lzdGVycyA6IENhcmQgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIENBUkRfU1RBVFVTX1JFRyAgICAgICAgICAgICAgICAgMHgzMAorLyogQ2FyZCBDb250cm9sIFJlZ2lzdGVycyA6IENhcmQgSS9PIHJlYWR5ICovCisjZGVmaW5lIENBUkRfSU9fUkVBRFkgICAgICAgICAgICAgICAgICAgKDB4MVUgPDwgMykKKy8qIENhcmQgQ29udHJvbCBSZWdpc3RlcnMgOiBDSVMgY2FyZCByZWFkeSAqLworI2RlZmluZSBDSVNfQ0FSRF9SRFkgICAgICAgICAgICAgICAgICAgICgweDFVIDw8IDIpCisvKiBDYXJkIENvbnRyb2wgUmVnaXN0ZXJzIDogVXBsb2FkIGNhcmQgcmVhZHkgKi8KKyNkZWZpbmUgVVBfTERfQ0FSRF9SRFkgICAgICAgICAgICAgICAgICAoMHgxVSA8PCAxKQorLyogQ2FyZCBDb250cm9sIFJlZ2lzdGVycyA6IERvd25sb2FkIGNhcmQgcmVhZHkgKi8KKyNkZWZpbmUgRE5fTERfQ0FSRF9SRFkgICAgICAgICAgICAgICAgICAoMHgxVSA8PCAwKQorCisvKiBDYXJkIENvbnRyb2wgUmVnaXN0ZXJzIDogSG9zdCBpbnRlcnJ1cHQgbWFzayByZWdpc3RlciAqLworI2RlZmluZSBIT1NUX0lOVEVSUlVQVF9NQVNLX1JFRyAgICAgICAgIDB4MzQKKy8qIENhcmQgQ29udHJvbCBSZWdpc3RlcnMgOiBIb3N0IHBvd2VyIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIEhPU1RfUE9XRVJfSU5UX01BU0sgICAgICAgICAgICAgKDB4MVUgPDwgMykKKy8qIENhcmQgQ29udHJvbCBSZWdpc3RlcnMgOiBBYm9ydCBjYXJkIGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIEFCT1JUX0NBUkRfSU5UX01BU0sgICAgICAgICAgICAgKDB4MVUgPDwgMikKKy8qIENhcmQgQ29udHJvbCBSZWdpc3RlcnMgOiBVcGxvYWQgY2FyZCBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBVUF9MRF9DQVJEX0lOVF9NQVNLICAgICAgICAgICAgICgweDFVIDw8IDEpCisvKiBDYXJkIENvbnRyb2wgUmVnaXN0ZXJzIDogRG93bmxvYWQgY2FyZCBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBETl9MRF9DQVJEX0lOVF9NQVNLICAgICAgICAgICAgICgweDFVIDw8IDApCisKKy8qIENhcmQgQ29udHJvbCBSZWdpc3RlcnMgOiBDYXJkIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0FSRF9JTlRFUlJVUFRfU1RBVFVTX1JFRyAgICAgICAweDM4CisvKiBDYXJkIENvbnRyb2wgUmVnaXN0ZXJzIDogUG93ZXIgdXAgaW50ZXJydXB0ICovCisjZGVmaW5lIFBPV0VSX1VQX0lOVCAgICAgICAgICAgICAgICAgICAgKDB4MVUgPDwgNCkKKy8qIENhcmQgQ29udHJvbCBSZWdpc3RlcnMgOiBQb3dlciBkb3duIGludGVycnVwdCAqLworI2RlZmluZSBQT1dFUl9ET1dOX0lOVCAgICAgICAgICAgICAgICAgICgweDFVIDw8IDMpCisKKy8qIENhcmQgQ29udHJvbCBSZWdpc3RlcnMgOiBDYXJkIGludGVycnVwdCBSU1IgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0FSRF9JTlRFUlJVUFRfUlNSX1JFRyAgICAgICAgICAweDNjCisvKiBDYXJkIENvbnRyb2wgUmVnaXN0ZXJzIDogUG93ZXIgdXAgUlNSICovCisjZGVmaW5lIFBPV0VSX1VQX1JTUiAgICAgICAgICAgICAgICAgICAgKDB4MVUgPDwgNCkKKy8qIENhcmQgQ29udHJvbCBSZWdpc3RlcnMgOiBQb3dlciBkb3duIFJTUiAqLworI2RlZmluZSBQT1dFUl9ET1dOX1JTUiAgICAgICAgICAgICAgICAgICgweDFVIDw8IDMpCisKKy8qIENhcmQgQ29udHJvbCBSZWdpc3RlcnMgOiBNaXNjZWxsYW5lb3VzIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0FSRF9NSVNDX0NGR19SRUcgICAgICAgICAgICAgICAweDZDCisKKy8qIEhvc3QgRjEgcmVhZCBiYXNlIDAgKi8KKyNkZWZpbmUgSE9TVF9GMV9SRF9CQVNFXzAJCTB4MDA0MAorLyogSG9zdCBGMSByZWFkIGJhc2UgMSAqLworI2RlZmluZSBIT1NUX0YxX1JEX0JBU0VfMQkJMHgwMDQxCisvKiBIb3N0IEYxIGNhcmQgcmVhZHkgKi8KKyNkZWZpbmUgSE9TVF9GMV9DQVJEX1JEWQkJMHgwMDIwCisKKy8qIEZpcm13YXJlIHN0YXR1cyAwIHJlZ2lzdGVyICovCisjZGVmaW5lIENBUkRfRldfU1RBVFVTMF9SRUcJCTB4NjAKKy8qIEZpcm13YXJlIHN0YXR1cyAxIHJlZ2lzdGVyICovCisjZGVmaW5lIENBUkRfRldfU1RBVFVTMV9SRUcJCTB4NjEKKy8qIFJ4IGxlbmd0aCByZWdpc3RlciAqLworI2RlZmluZSBDQVJEX1JYX0xFTl9SRUcJCQkweDYyCisvKiBSeCB1bml0IHJlZ2lzdGVyICovCisjZGVmaW5lIENBUkRfUlhfVU5JVF9SRUcJCTB4NjMKKworLyogRXZlbnQgaGVhZGVyIExlbiovCisjZGVmaW5lIE1XSUZJRVhfRVZFTlRfSEVBREVSX0xFTiAgICAgICAgICAgOAorCisvKiBNYXggcmV0cnkgbnVtYmVyIG9mIENNRDUzIHdyaXRlICovCisjZGVmaW5lIE1BWF9XUklURV9JT01FTV9SRVRSWQkJMgorCisvKiBTRElPIFR4IGFnZ3JlZ2F0aW9uIGluIHByb2dyZXNzID8gKi8KKyNkZWZpbmUgTVBfVFhfQUdHUl9JTl9QUk9HUkVTUyhhKSAoYS0+bXBhX3R4LnBrdF9jbnQgPiAwKQorCisvKiBTRElPIFR4IGFnZ3JlZ2F0aW9uIGJ1ZmZlciByb29tIGZvciBuZXh0IHBhY2tldCA/ICovCisjZGVmaW5lIE1QX1RYX0FHR1JfQlVGX0hBU19ST09NKGEsIGxlbikgKChhLT5tcGFfdHguYnVmX2xlbitsZW4pCVwKKwkJCQkJCTw9IGEtPm1wYV90eC5idWZfc2l6ZSkKKworLyogQ29weSBjdXJyZW50IHBhY2tldCAoU0RJTyBUeCBhZ2dyZWdhdGlvbiBidWZmZXIpIHRvIFNESU8gYnVmZmVyICovCisjZGVmaW5lIE1QX1RYX0FHR1JfQlVGX1BVVChhLCBwYXlsb2FkLCBwa3RfbGVuLCBwb3J0KSBkbyB7CQlcCisJbWVtbW92ZSgmYS0+bXBhX3R4LmJ1ZlthLT5tcGFfdHguYnVmX2xlbl0sCQkJXAorCQkJcGF5bG9hZCwgcGt0X2xlbik7CQkJCVwKKwlhLT5tcGFfdHguYnVmX2xlbiArPSBwa3RfbGVuOwkJCQkJXAorCWlmICghYS0+bXBhX3R4LnBrdF9jbnQpCQkJCQkJXAorCQlhLT5tcGFfdHguc3RhcnRfcG9ydCA9IHBvcnQ7CQkJCVwKKwlpZiAoYS0+bXBhX3R4LnN0YXJ0X3BvcnQgPD0gcG9ydCkJCQkJXAorCQlhLT5tcGFfdHgucG9ydHMgfD0gKDE8PChhLT5tcGFfdHgucGt0X2NudCkpOwkJXAorCWVsc2UJCQkJCQkJCVwKKwkJYS0+bXBhX3R4LnBvcnRzIHw9ICgxPDwoYS0+bXBhX3R4LnBrdF9jbnQrMSsoTUFYX1BPUlQgLQlcCisJCQkJCQlhLT5tcF9lbmRfcG9ydCkpKTsJXAorCWEtPm1wYV90eC5wa3RfY250Kys7CQkJCQkJXAorfSB3aGlsZSAoMCk7CisKKy8qIFNESU8gVHggYWdncmVnYXRpb24gbGltaXQgPyAqLworI2RlZmluZSBNUF9UWF9BR0dSX1BLVF9MSU1JVF9SRUFDSEVEKGEpCQkJCQlcCisJCQkoYS0+bXBhX3R4LnBrdF9jbnQgPT0gYS0+bXBhX3R4LnBrdF9hZ2dyX2xpbWl0KQorCisvKiBTRElPIFR4IGFnZ3JlZ2F0aW9uIHBvcnQgbGltaXQgPyAqLworI2RlZmluZSBNUF9UWF9BR0dSX1BPUlRfTElNSVRfUkVBQ0hFRChhKSAoKGEtPmN1cnJfd3JfcG9ydCA8CQlcCisJCQlhLT5tcGFfdHguc3RhcnRfcG9ydCkgJiYgKCgoTUFYX1BPUlQgLQkJXAorCQkJYS0+bXBhX3R4LnN0YXJ0X3BvcnQpICsgYS0+Y3Vycl93cl9wb3J0KSA+PQlcCisJCQkJU0RJT19NUF9BR0dSX0RFRl9QS1RfTElNSVQpKQorCisvKiBSZXNldCBTRElPIFR4IGFnZ3JlZ2F0aW9uIGJ1ZmZlciBwYXJhbWV0ZXJzICovCisjZGVmaW5lIE1QX1RYX0FHR1JfQlVGX1JFU0VUKGEpIGRvIHsJCQkJCVwKKwlhLT5tcGFfdHgucGt0X2NudCA9IDA7CQkJCQkJXAorCWEtPm1wYV90eC5idWZfbGVuID0gMDsJCQkJCQlcCisJYS0+bXBhX3R4LnBvcnRzID0gMDsJCQkJCQlcCisJYS0+bXBhX3R4LnN0YXJ0X3BvcnQgPSAwOwkJCQkJXAorfSB3aGlsZSAoMCk7CisKKy8qIFNESU8gUnggYWdncmVnYXRpb24gbGltaXQgPyAqLworI2RlZmluZSBNUF9SWF9BR0dSX1BLVF9MSU1JVF9SRUFDSEVEKGEpCQkJCQlcCisJCQkoYS0+bXBhX3J4LnBrdF9jbnQgPT0gYS0+bXBhX3J4LnBrdF9hZ2dyX2xpbWl0KQorCisvKiBTRElPIFR4IGFnZ3JlZ2F0aW9uIHBvcnQgbGltaXQgPyAqLworI2RlZmluZSBNUF9SWF9BR0dSX1BPUlRfTElNSVRfUkVBQ0hFRChhKSAoKGEtPmN1cnJfcmRfcG9ydCA8CQlcCisJCQlhLT5tcGFfcnguc3RhcnRfcG9ydCkgJiYgKCgoTUFYX1BPUlQgLQkJXAorCQkJYS0+bXBhX3J4LnN0YXJ0X3BvcnQpICsgYS0+Y3Vycl9yZF9wb3J0KSA+PQlcCisJCQlTRElPX01QX0FHR1JfREVGX1BLVF9MSU1JVCkpCisKKy8qIFNESU8gUnggYWdncmVnYXRpb24gaW4gcHJvZ3Jlc3MgPyAqLworI2RlZmluZSBNUF9SWF9BR0dSX0lOX1BST0dSRVNTKGEpIChhLT5tcGFfcngucGt0X2NudCA+IDApCisKKy8qIFNESU8gUnggYWdncmVnYXRpb24gYnVmZmVyIHJvb20gZm9yIG5leHQgcGFja2V0ID8gKi8KKyNkZWZpbmUgTVBfUlhfQUdHUl9CVUZfSEFTX1JPT00oYSwgcnhfbGVuKQkJCQlcCisJCQkoKGEtPm1wYV9yeC5idWZfbGVuK3J4X2xlbikgPD0gYS0+bXBhX3J4LmJ1Zl9zaXplKQorCisvKiBQcmVwYXJlIHRvIGNvcHkgY3VycmVudCBwYWNrZXQgZnJvbSBjYXJkIHRvIFNESU8gUnggYWdncmVnYXRpb24gYnVmZmVyICovCisjZGVmaW5lIE1QX1JYX0FHR1JfU0VUVVAoYSwgc2tiLCBwb3J0KSBkbyB7CQkJCVwKKwlhLT5tcGFfcnguYnVmX2xlbiArPSBza2ItPmxlbjsJCQkJCVwKKwlpZiAoIWEtPm1wYV9yeC5wa3RfY250KQkJCQkJCVwKKwkJYS0+bXBhX3J4LnN0YXJ0X3BvcnQgPSBwb3J0OwkJCQlcCisJaWYgKGEtPm1wYV9yeC5zdGFydF9wb3J0IDw9IHBvcnQpCQkJCVwKKwkJYS0+bXBhX3J4LnBvcnRzIHw9ICgxPDwoYS0+bXBhX3J4LnBrdF9jbnQpKTsJCVwKKwllbHNlCQkJCQkJCQlcCisJCWEtPm1wYV9yeC5wb3J0cyB8PSAoMTw8KGEtPm1wYV9yeC5wa3RfY250KzEpKTsJCVwKKwlhLT5tcGFfcnguc2tiX2FyclthLT5tcGFfcngucGt0X2NudF0gPSBza2I7CQkJXAorCWEtPm1wYV9yeC5sZW5fYXJyW2EtPm1wYV9yeC5wa3RfY250XSA9IHNrYi0+bGVuOwkJXAorCWEtPm1wYV9yeC5wa3RfY250Kys7CQkJCQkJXAorfSB3aGlsZSAoMCk7CisKKy8qIFJlc2V0IFNESU8gUnggYWdncmVnYXRpb24gYnVmZmVyIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgTVBfUlhfQUdHUl9CVUZfUkVTRVQoYSkgZG8gewkJCQkJXAorCWEtPm1wYV9yeC5wa3RfY250ID0gMDsJCQkJCQlcCisJYS0+bXBhX3J4LmJ1Zl9sZW4gPSAwOwkJCQkJCVwKKwlhLT5tcGFfcngucG9ydHMgPSAwOwkJCQkJCVwKKwlhLT5tcGFfcnguc3RhcnRfcG9ydCA9IDA7CQkJCQlcCit9IHdoaWxlICgwKTsKKworCisvKiBkYXRhIHN0cnVjdHVyZSBmb3IgU0RJTyBNUEEgVFggKi8KK3N0cnVjdCBtd2lmaWV4X3NkaW9fbXBhX3R4IHsKKwkvKiBtdWx0aXBvcnQgdHggYWdncmVnYXRpb24gYnVmZmVyIHBvaW50ZXIgKi8KKwl1OCAqYnVmOworCXUzMiBidWZfbGVuOworCXUzMiBwa3RfY250OworCXUxNiBwb3J0czsKKwl1MTYgc3RhcnRfcG9ydDsKKwl1OCBlbmFibGVkOworCXUzMiBidWZfc2l6ZTsKKwl1MzIgcGt0X2FnZ3JfbGltaXQ7Cit9OworCitzdHJ1Y3QgbXdpZmlleF9zZGlvX21wYV9yeCB7CisJdTggKmJ1ZjsKKwl1MzIgYnVmX2xlbjsKKwl1MzIgcGt0X2NudDsKKwl1MTYgcG9ydHM7CisJdTE2IHN0YXJ0X3BvcnQ7CisKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2FycltTRElPX01QX0FHR1JfREVGX1BLVF9MSU1JVF07CisJdTMyIGxlbl9hcnJbU0RJT19NUF9BR0dSX0RFRl9QS1RfTElNSVRdOworCisJdTggZW5hYmxlZDsKKwl1MzIgYnVmX3NpemU7CisJdTMyIHBrdF9hZ2dyX2xpbWl0OworfTsKKworaW50IG13aWZpZXhfYnVzX3JlZ2lzdGVyKHZvaWQpOwordm9pZCBtd2lmaWV4X2J1c191bnJlZ2lzdGVyKHZvaWQpOworCitzdHJ1Y3Qgc2Rpb19tbWNfY2FyZCB7CisJc3RydWN0IHNkaW9fZnVuYyAqZnVuYzsKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyOworCisJdTE2IG1wX3JkX2JpdG1hcDsKKwl1MTYgbXBfd3JfYml0bWFwOworCisJdTE2IG1wX2VuZF9wb3J0OworCXUxNiBtcF9kYXRhX3BvcnRfbWFzazsKKworCXU4IGN1cnJfcmRfcG9ydDsKKwl1OCBjdXJyX3dyX3BvcnQ7CisKKwl1OCAqbXBfcmVnczsKKworCXN0cnVjdCBtd2lmaWV4X3NkaW9fbXBhX3R4IG1wYV90eDsKKwlzdHJ1Y3QgbXdpZmlleF9zZGlvX21wYV9yeCBtcGFfcng7Cit9OworI2VuZGlmIC8qIF9NV0lGSUVYX1NESU9fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zdGFfY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3N0YV9jbWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWYzYTc4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zdGFfY21kLmMKQEAgLTAsMCArMSwxMjE5IEBACisvKgorICogTWFydmVsbCBXaXJlbGVzcyBMQU4gZGV2aWNlIGRyaXZlcjogc3RhdGlvbiBjb21tYW5kIGhhbmRsaW5nCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5hdGlvbmFsCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4KKyAqIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBvZiB3aGljaAorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0Egb3Igb24gdGhlCisgKiB3b3JsZHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQuCisgKgorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNlIHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dAorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLgorICovCisKKyNpbmNsdWRlICJkZWNsLmgiCisjaW5jbHVkZSAiaW9jdGwuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAiZncuaCIKKyNpbmNsdWRlICJtYWluLmgiCisjaW5jbHVkZSAid21tLmgiCisjaW5jbHVkZSAiMTFuLmgiCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGNvbW1hbmQgdG8gc2V0L2dldCBSU1NJIGluZm9ybWF0aW9uLgorICoKKyAqIFByZXBhcmF0aW9uIGluY2x1ZGVzIC0KKyAqICAgICAgLSBTZXR0aW5nIGNvbW1hbmQgSUQsIGFjdGlvbiBhbmQgcHJvcGVyIHNpemUKKyAqICAgICAgLSBTZXR0aW5nIGRhdGEvYmVhY29uIGF2ZXJhZ2UgZmFjdG9ycworICogICAgICAtIFJlc2V0dGluZyBTTlIvTkYvUlNTSSB2YWx1ZXMgaW4gcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqICAgICAgLSBFbnN1cmluZyBjb3JyZWN0IGVuZGlhbi1uZXNzCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfY21kXzgwMl8xMV9yc3NpX2luZm8oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwgdTE2IGNtZF9hY3Rpb24pCit7CisJY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoSG9zdENtZF9DTURfUlNTSV9JTkZPKTsKKwljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9yc3NpX2luZm8pICsKKwkJCQlTX0RTX0dFTik7CisJY21kLT5wYXJhbXMucnNzaV9pbmZvLmFjdGlvbiA9IGNwdV90b19sZTE2KGNtZF9hY3Rpb24pOworCWNtZC0+cGFyYW1zLnJzc2lfaW5mby5uZGF0YSA9IGNwdV90b19sZTE2KHByaXYtPmRhdGFfYXZnX2ZhY3Rvcik7CisJY21kLT5wYXJhbXMucnNzaV9pbmZvLm5iY24gPSBjcHVfdG9fbGUxNihwcml2LT5iY25fYXZnX2ZhY3Rvcik7CisKKwkvKiBSZXNldCBTTlIvTkYvUlNTSSB2YWx1ZXMgaW4gcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KKwlwcml2LT5kYXRhX3Jzc2lfbGFzdCA9IDA7CisJcHJpdi0+ZGF0YV9uZl9sYXN0ID0gMDsKKwlwcml2LT5kYXRhX3Jzc2lfYXZnID0gMDsKKwlwcml2LT5kYXRhX25mX2F2ZyA9IDA7CisJcHJpdi0+YmNuX3Jzc2lfbGFzdCA9IDA7CisJcHJpdi0+YmNuX25mX2xhc3QgPSAwOworCXByaXYtPmJjbl9yc3NpX2F2ZyA9IDA7CisJcHJpdi0+YmNuX25mX2F2ZyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgY29tbWFuZCB0byBzZXQgTUFDIGNvbnRyb2wuCisgKgorICogUHJlcGFyYXRpb24gaW5jbHVkZXMgLQorICogICAgICAtIFNldHRpbmcgY29tbWFuZCBJRCwgYWN0aW9uIGFuZCBwcm9wZXIgc2l6ZQorICogICAgICAtIEVuc3VyaW5nIGNvcnJlY3QgZW5kaWFuLW5lc3MKKyAqLworc3RhdGljIGludCBtd2lmaWV4X2NtZF9tYWNfY29udHJvbChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCSAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQsCisJCQkJICAgdTE2IGNtZF9hY3Rpb24sIHZvaWQgKmRhdGFfYnVmKQoreworCXN0cnVjdCBob3N0X2NtZF9kc19tYWNfY29udHJvbCAqbWFjX2N0cmwgPSAmY21kLT5wYXJhbXMubWFjX2N0cmw7CisJdTE2IGFjdGlvbiA9ICooKHUxNiAqKSBkYXRhX2J1Zik7CisKKwlpZiAoY21kX2FjdGlvbiAhPSBIb3N0Q21kX0FDVF9HRU5fU0VUKSB7CisJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJIm1hY19jb250cm9sOiBvbmx5IHN1cHBvcnQgc2V0IGNtZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihIb3N0Q21kX0NNRF9NQUNfQ09OVFJPTCk7CisJY21kLT5zaXplID0KKwkJY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc19tYWNfY29udHJvbCkgKyBTX0RTX0dFTik7CisJbWFjX2N0cmwtPmFjdGlvbiA9IGNwdV90b19sZTE2KGFjdGlvbik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgY29tbWFuZCB0byBzZXQvZ2V0IFNOTVAgTUlCLgorICoKKyAqIFByZXBhcmF0aW9uIGluY2x1ZGVzIC0KKyAqICAgICAgLSBTZXR0aW5nIGNvbW1hbmQgSUQsIGFjdGlvbiBhbmQgcHJvcGVyIHNpemUKKyAqICAgICAgLSBTZXR0aW5nIFNOTVAgTUlCIE9JRCBudW1iZXIgYW5kIHZhbHVlCisgKiAgICAgICAgKGFzIHJlcXVpcmVkKQorICogICAgICAtIEVuc3VyaW5nIGNvcnJlY3QgZW5kaWFuLW5lc3MKKyAqCisgKiBUaGUgZm9sbG93aW5nIFNOTVAgTUlCIE9JRHMgYXJlIHN1cHBvcnRlZCAtCisgKiAgICAgIC0gRlJBR19USFJFU0hfSSAgICAgOiBGcmFnbWVudGF0aW9uIHRocmVzaG9sZAorICogICAgICAtIFJUU19USFJFU0hfSSAgICAgIDogUlRTIHRocmVzaG9sZAorICogICAgICAtIFNIT1JUX1JFVFJZX0xJTV9JIDogU2hvcnQgcmV0cnkgbGltaXQKKyAqICAgICAgLSBET1QxMURfSSAgICAgICAgICA6IDExZCBzdXBwb3J0CisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9jbWRfODAyXzExX3NubXBfbWliKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJICAgICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQsCisJCQkJICAgICAgIHUxNiBjbWRfYWN0aW9uLCB1MzIgY21kX29pZCwKKwkJCQkgICAgICAgdm9pZCAqZGF0YV9idWYpCit7CisJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9zbm1wX21pYiAqc25tcF9taWIgPSAmY21kLT5wYXJhbXMuc21pYjsKKwl1MzIgdWxfdGVtcDsKKworCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiY21kOiBTTk1QX0NNRDogY21kX29pZCA9IDB4JXhcbiIsIGNtZF9vaWQpOworCWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KEhvc3RDbWRfQ01EXzgwMl8xMV9TTk1QX01JQik7CisJY21kLT5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfc25tcF9taWIpCisJCS0gMSArIFNfRFNfR0VOKTsKKworCWlmIChjbWRfYWN0aW9uID09IEhvc3RDbWRfQUNUX0dFTl9HRVQpIHsKKwkJc25tcF9taWItPnF1ZXJ5X3R5cGUgPSBjcHVfdG9fbGUxNihIb3N0Q21kX0FDVF9HRU5fR0VUKTsKKwkJc25tcF9taWItPmJ1Zl9zaXplID0gY3B1X3RvX2xlMTYoTUFYX1NOTVBfQlVGX1NJWkUpOworCQljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihsZTE2X3RvX2NwdShjbWQtPnNpemUpCisJCQkrIE1BWF9TTk1QX0JVRl9TSVpFKTsKKwl9CisKKwlzd2l0Y2ggKGNtZF9vaWQpIHsKKwljYXNlIEZSQUdfVEhSRVNIX0k6CisJCXNubXBfbWliLT5vaWQgPSBjcHVfdG9fbGUxNigodTE2KSBGUkFHX1RIUkVTSF9JKTsKKwkJaWYgKGNtZF9hY3Rpb24gPT0gSG9zdENtZF9BQ1RfR0VOX1NFVCkgeworCQkJc25tcF9taWItPnF1ZXJ5X3R5cGUgPSBjcHVfdG9fbGUxNihIb3N0Q21kX0FDVF9HRU5fU0VUKTsKKwkJCXNubXBfbWliLT5idWZfc2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZih1MTYpKTsKKwkJCXVsX3RlbXAgPSAqKCh1MzIgKikgZGF0YV9idWYpOworCQkJKigoX19sZTE2ICopIChzbm1wX21pYi0+dmFsdWUpKSA9CisJCQkJY3B1X3RvX2xlMTYoKHUxNikgdWxfdGVtcCk7CisJCQljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihsZTE2X3RvX2NwdShjbWQtPnNpemUpCisJCQkJKyBzaXplb2YodTE2KSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBSVFNfVEhSRVNIX0k6CisJCXNubXBfbWliLT5vaWQgPSBjcHVfdG9fbGUxNigodTE2KSBSVFNfVEhSRVNIX0kpOworCQlpZiAoY21kX2FjdGlvbiA9PSBIb3N0Q21kX0FDVF9HRU5fU0VUKSB7CisJCQlzbm1wX21pYi0+cXVlcnlfdHlwZSA9IGNwdV90b19sZTE2KEhvc3RDbWRfQUNUX0dFTl9TRVQpOworCQkJc25tcF9taWItPmJ1Zl9zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHUxNikpOworCQkJdWxfdGVtcCA9ICooKHUzMiAqKSBkYXRhX2J1Zik7CisJCQkqKF9fbGUxNiAqKSAoc25tcF9taWItPnZhbHVlKSA9CisJCQkJY3B1X3RvX2xlMTYoKHUxNikgdWxfdGVtcCk7CisJCQljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihsZTE2X3RvX2NwdShjbWQtPnNpemUpCisJCQkJKyBzaXplb2YodTE2KSk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFNIT1JUX1JFVFJZX0xJTV9JOgorCQlzbm1wX21pYi0+b2lkID0gY3B1X3RvX2xlMTYoKHUxNikgU0hPUlRfUkVUUllfTElNX0kpOworCQlpZiAoY21kX2FjdGlvbiA9PSBIb3N0Q21kX0FDVF9HRU5fU0VUKSB7CisJCQlzbm1wX21pYi0+cXVlcnlfdHlwZSA9IGNwdV90b19sZTE2KEhvc3RDbWRfQUNUX0dFTl9TRVQpOworCQkJc25tcF9taWItPmJ1Zl9zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHUxNikpOworCQkJdWxfdGVtcCA9ICgqKHUzMiAqKSBkYXRhX2J1Zik7CisJCQkqKChfX2xlMTYgKikgKHNubXBfbWliLT52YWx1ZSkpID0KKwkJCQljcHVfdG9fbGUxNigodTE2KSB1bF90ZW1wKTsKKwkJCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KGxlMTZfdG9fY3B1KGNtZC0+c2l6ZSkKKwkJCQkrIHNpemVvZih1MTYpKTsKKwkJfQorCQlicmVhazsKKwljYXNlIERPVDExRF9JOgorCQlzbm1wX21pYi0+b2lkID0gY3B1X3RvX2xlMTYoKHUxNikgRE9UMTFEX0kpOworCQlpZiAoY21kX2FjdGlvbiA9PSBIb3N0Q21kX0FDVF9HRU5fU0VUKSB7CisJCQlzbm1wX21pYi0+cXVlcnlfdHlwZSA9IGNwdV90b19sZTE2KEhvc3RDbWRfQUNUX0dFTl9TRVQpOworCQkJc25tcF9taWItPmJ1Zl9zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHUxNikpOworCQkJdWxfdGVtcCA9ICoodTMyICopIGRhdGFfYnVmOworCQkJKigoX19sZTE2ICopIChzbm1wX21pYi0+dmFsdWUpKSA9CisJCQkJY3B1X3RvX2xlMTYoKHUxNikgdWxfdGVtcCk7CisJCQljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihsZTE2X3RvX2NwdShjbWQtPnNpemUpCisJCQkJKyBzaXplb2YodTE2KSk7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkiY21kOiBTTk1QX0NNRDogQWN0aW9uPTB4JXgsIE9JRD0weCV4LCBPSURTaXplPTB4JXgsIgorCQkiIFZhbHVlPTB4JXhcbiIsCisJICAgICAgIGNtZF9hY3Rpb24sIGNtZF9vaWQsIGxlMTZfdG9fY3B1KHNubXBfbWliLT5idWZfc2l6ZSksCisJICAgICAgIGxlMTZfdG9fY3B1KCooX19sZTE2ICopIHNubXBfbWliLT52YWx1ZSkpOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBjb21tYW5kIHRvIGdldCBsb2cuCisgKgorICogUHJlcGFyYXRpb24gaW5jbHVkZXMgLQorICogICAgICAtIFNldHRpbmcgY29tbWFuZCBJRCBhbmQgcHJvcGVyIHNpemUKKyAqICAgICAgLSBFbnN1cmluZyBjb3JyZWN0IGVuZGlhbi1uZXNzCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfY21kXzgwMl8xMV9nZXRfbG9nKHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQpCit7CisJY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoSG9zdENtZF9DTURfODAyXzExX0dFVF9MT0cpOworCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2dldF9sb2cpICsKKwkJCQlTX0RTX0dFTik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGNvbW1hbmQgdG8gc2V0L2dldCBUeCBkYXRhIHJhdGUgY29uZmlndXJhdGlvbi4KKyAqCisgKiBQcmVwYXJhdGlvbiBpbmNsdWRlcyAtCisgKiAgICAgIC0gU2V0dGluZyBjb21tYW5kIElELCBhY3Rpb24gYW5kIHByb3BlciBzaXplCisgKiAgICAgIC0gU2V0dGluZyBjb25maWd1cmF0aW9uIGluZGV4LCByYXRlIHNjb3BlIGFuZCByYXRlIGRyb3AgcGF0dGVybgorICogICAgICAgIHBhcmFtZXRlcnMgKGFzIHJlcXVpcmVkKQorICogICAgICAtIEVuc3VyaW5nIGNvcnJlY3QgZW5kaWFuLW5lc3MKKyAqLworc3RhdGljIGludCBtd2lmaWV4X2NtZF90eF9yYXRlX2NmZyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCSAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQsCisJCQkJICAgdTE2IGNtZF9hY3Rpb24sIHZvaWQgKmRhdGFfYnVmKQoreworCXN0cnVjdCBob3N0X2NtZF9kc190eF9yYXRlX2NmZyAqcmF0ZV9jZmcgPSAmY21kLT5wYXJhbXMudHhfcmF0ZV9jZmc7CisJc3RydWN0IG13aWZpZXhfcmF0ZV9zY29wZSAqcmF0ZV9zY29wZTsKKwlzdHJ1Y3QgbXdpZmlleF9yYXRlX2Ryb3BfcGF0dGVybiAqcmF0ZV9kcm9wOworCXUxNiAqcGJpdG1hcF9yYXRlcyA9ICh1MTYgKikgZGF0YV9idWY7CisKKwl1MzIgaTsKKworCWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KEhvc3RDbWRfQ01EX1RYX1JBVEVfQ0ZHKTsKKworCXJhdGVfY2ZnLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihjbWRfYWN0aW9uKTsKKwlyYXRlX2NmZy0+Y2ZnX2luZGV4ID0gMDsKKworCXJhdGVfc2NvcGUgPSAoc3RydWN0IG13aWZpZXhfcmF0ZV9zY29wZSAqKSAoKHU4ICopIHJhdGVfY2ZnICsKKwkJICAgICAgc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc190eF9yYXRlX2NmZykpOworCXJhdGVfc2NvcGUtPnR5cGUgPSBjcHVfdG9fbGUxNihUTFZfVFlQRV9SQVRFX1NDT1BFKTsKKwlyYXRlX3Njb3BlLT5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IG13aWZpZXhfcmF0ZV9zY29wZSkgLQorCQkJc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlcikpOworCWlmIChwYml0bWFwX3JhdGVzICE9IE5VTEwpIHsKKwkJcmF0ZV9zY29wZS0+aHJfZHNzc19yYXRlX2JpdG1hcCA9IGNwdV90b19sZTE2KHBiaXRtYXBfcmF0ZXNbMF0pOworCQlyYXRlX3Njb3BlLT5vZmRtX3JhdGVfYml0bWFwID0gY3B1X3RvX2xlMTYocGJpdG1hcF9yYXRlc1sxXSk7CisJCWZvciAoaSA9IDA7CisJCSAgICAgaSA8IHNpemVvZihyYXRlX3Njb3BlLT5odF9tY3NfcmF0ZV9iaXRtYXApIC8gc2l6ZW9mKHUxNik7CisJCSAgICAgaSsrKQorCQkJcmF0ZV9zY29wZS0+aHRfbWNzX3JhdGVfYml0bWFwW2ldID0KKwkJCQljcHVfdG9fbGUxNihwYml0bWFwX3JhdGVzWzIgKyBpXSk7CisJfSBlbHNlIHsKKwkJcmF0ZV9zY29wZS0+aHJfZHNzc19yYXRlX2JpdG1hcCA9CisJCQljcHVfdG9fbGUxNihwcml2LT5iaXRtYXBfcmF0ZXNbMF0pOworCQlyYXRlX3Njb3BlLT5vZmRtX3JhdGVfYml0bWFwID0KKwkJCWNwdV90b19sZTE2KHByaXYtPmJpdG1hcF9yYXRlc1sxXSk7CisJCWZvciAoaSA9IDA7CisJCSAgICAgaSA8IHNpemVvZihyYXRlX3Njb3BlLT5odF9tY3NfcmF0ZV9iaXRtYXApIC8gc2l6ZW9mKHUxNik7CisJCSAgICAgaSsrKQorCQkJcmF0ZV9zY29wZS0+aHRfbWNzX3JhdGVfYml0bWFwW2ldID0KKwkJCQljcHVfdG9fbGUxNihwcml2LT5iaXRtYXBfcmF0ZXNbMiArIGldKTsKKwl9CisKKwlyYXRlX2Ryb3AgPSAoc3RydWN0IG13aWZpZXhfcmF0ZV9kcm9wX3BhdHRlcm4gKikgKCh1OCAqKSByYXRlX3Njb3BlICsKKwkJCXNpemVvZihzdHJ1Y3QgbXdpZmlleF9yYXRlX3Njb3BlKSk7CisJcmF0ZV9kcm9wLT50eXBlID0gY3B1X3RvX2xlMTYoVExWX1RZUEVfUkFURV9EUk9QX0NPTlRST0wpOworCXJhdGVfZHJvcC0+bGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHJhdGVfZHJvcC0+cmF0ZV9kcm9wX21vZGUpKTsKKwlyYXRlX2Ryb3AtPnJhdGVfZHJvcF9tb2RlID0gMDsKKworCWNtZC0+c2l6ZSA9CisJCWNwdV90b19sZTE2KFNfRFNfR0VOICsgc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc190eF9yYXRlX2NmZykgKworCQkJICAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9yYXRlX3Njb3BlKSArCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X3JhdGVfZHJvcF9wYXR0ZXJuKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgY29tbWFuZCB0byBzZXQvZ2V0IFR4IHBvd2VyIGNvbmZpZ3VyYXRpb24uCisgKgorICogUHJlcGFyYXRpb24gaW5jbHVkZXMgLQorICogICAgICAtIFNldHRpbmcgY29tbWFuZCBJRCwgYWN0aW9uIGFuZCBwcm9wZXIgc2l6ZQorICogICAgICAtIFNldHRpbmcgVHggcG93ZXIgbW9kZSwgcG93ZXIgZ3JvdXAgVExWCisgKiAgICAgICAgKGFzIHJlcXVpcmVkKQorICogICAgICAtIEVuc3VyaW5nIGNvcnJlY3QgZW5kaWFuLW5lc3MKKyAqLworc3RhdGljIGludCBtd2lmaWV4X2NtZF90eF9wb3dlcl9jZmcoc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwKKwkJCQkgICAgdTE2IGNtZF9hY3Rpb24sIHZvaWQgKmRhdGFfYnVmKQoreworCXN0cnVjdCBtd2lmaWV4X3R5cGVzX3Bvd2VyX2dyb3VwICpwZ190bHY7CisJc3RydWN0IGhvc3RfY21kX2RzX3R4cHdyX2NmZyAqdHhwOworCXN0cnVjdCBob3N0X2NtZF9kc190eHB3cl9jZmcgKmNtZF90eHBfY2ZnID0gJmNtZC0+cGFyYW1zLnR4cF9jZmc7CisKKwljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihIb3N0Q21kX0NNRF9UWFBXUl9DRkcpOworCWNtZC0+c2l6ZSA9CisJCWNwdV90b19sZTE2KFNfRFNfR0VOICsgc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc190eHB3cl9jZmcpKTsKKwlzd2l0Y2ggKGNtZF9hY3Rpb24pIHsKKwljYXNlIEhvc3RDbWRfQUNUX0dFTl9TRVQ6CisJCXR4cCA9IChzdHJ1Y3QgaG9zdF9jbWRfZHNfdHhwd3JfY2ZnICopIGRhdGFfYnVmOworCQlpZiAodHhwLT5tb2RlKSB7CisJCQlwZ190bHYgPSAoc3RydWN0IG13aWZpZXhfdHlwZXNfcG93ZXJfZ3JvdXAKKwkJCQkgICopICgodW5zaWduZWQgbG9uZykgZGF0YV9idWYgKworCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc190eHB3cl9jZmcpKTsKKwkJCW1lbW1vdmUoY21kX3R4cF9jZmcsIGRhdGFfYnVmLAorCQkJCXNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZHNfdHhwd3JfY2ZnKSArCisJCQkJc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X3R5cGVzX3Bvd2VyX2dyb3VwKSArCisJCQkJcGdfdGx2LT5sZW5ndGgpOworCisJCQlwZ190bHYgPSAoc3RydWN0IG13aWZpZXhfdHlwZXNfcG93ZXJfZ3JvdXAgKikgKCh1OCAqKQorCQkJCSAgY21kX3R4cF9jZmcgKworCQkJCSAgc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc190eHB3cl9jZmcpKTsKKwkJCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KGxlMTZfdG9fY3B1KGNtZC0+c2l6ZSkgKworCQkJCSAgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X3R5cGVzX3Bvd2VyX2dyb3VwKSArCisJCQkJICBwZ190bHYtPmxlbmd0aCk7CisJCX0gZWxzZSB7CisJCQltZW1tb3ZlKGNtZF90eHBfY2ZnLCBkYXRhX2J1ZiwKKwkJCQlzaXplb2Yoc3RydWN0IGhvc3RfY21kX2RzX3R4cHdyX2NmZykpOworCQl9CisJCWNtZF90eHBfY2ZnLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihjbWRfYWN0aW9uKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0FDVF9HRU5fR0VUOgorCQljbWRfdHhwX2NmZy0+YWN0aW9uID0gY3B1X3RvX2xlMTYoY21kX2FjdGlvbik7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBjb21tYW5kIHRvIHNldCBIb3N0IFNsZWVwIGNvbmZpZ3VyYXRpb24uCisgKgorICogUHJlcGFyYXRpb24gaW5jbHVkZXMgLQorICogICAgICAtIFNldHRpbmcgY29tbWFuZCBJRCBhbmQgcHJvcGVyIHNpemUKKyAqICAgICAgLSBTZXR0aW5nIEhvc3QgU2xlZXAgYWN0aW9uLCBjb25kaXRpb25zLCBBUlAgZmlsdGVycworICogICAgICAgIChhcyByZXF1aXJlZCkKKyAqICAgICAgLSBFbnN1cmluZyBjb3JyZWN0IGVuZGlhbi1uZXNzCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9jbWRfODAyXzExX2hzX2NmZyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCSAgICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwKKwkJCQkgICAgIHUxNiBjbWRfYWN0aW9uLAorCQkJCSAgICAgc3RydWN0IG13aWZpZXhfaHNfY29uZmlnX3BhcmFtICpkYXRhX2J1ZikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2hzX2NmZ19lbmggKmhzX2NmZyA9ICZjbWQtPnBhcmFtcy5vcHRfaHNfY2ZnOworCXUxNiBoc19hY3RpdmF0ZSA9IGZhbHNlOworCisJaWYgKGRhdGFfYnVmID09IE5VTEwpCisJCS8qIE5ldyBBY3RpdmF0ZSBjb21tYW5kICovCisJCWhzX2FjdGl2YXRlID0gdHJ1ZTsKKwljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihIb3N0Q21kX0NNRF84MDJfMTFfSFNfQ0ZHX0VOSCk7CisKKwlpZiAoIWhzX2FjdGl2YXRlICYmCisJICAgIChkYXRhX2J1Zi0+Y29uZGl0aW9ucworCSAgICAhPSBjcHVfdG9fbGUzMihIT1NUX1NMRUVQX0NGR19DQU5DRUwpKQorCSAgICAmJiAoKGFkYXB0ZXItPmFycF9maWx0ZXJfc2l6ZSA+IDApCisJCSYmIChhZGFwdGVyLT5hcnBfZmlsdGVyX3NpemUgPD0gQVJQX0ZJTFRFUl9NQVhfQlVGX1NJWkUpKSkgeworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwKKwkJCSJjbWQ6IEF0dGFjaCAlZCBieXRlcyBBcnBGaWx0ZXIgdG8gSFNDZmcgY21kXG4iLAorCQkgICAgICAgYWRhcHRlci0+YXJwX2ZpbHRlcl9zaXplKTsKKwkJbWVtY3B5KCgodTggKikgaHNfY2ZnKSArCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9oc19jZmdfZW5oKSwKKwkJICAgICAgIGFkYXB0ZXItPmFycF9maWx0ZXIsIGFkYXB0ZXItPmFycF9maWx0ZXJfc2l6ZSk7CisJCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KGFkYXB0ZXItPmFycF9maWx0ZXJfc2l6ZSArCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2hzX2NmZ19lbmgpCisJCQkJICAgICsgU19EU19HRU4pOworCX0gZWxzZSB7CisJCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KFNfRFNfR0VOICsgc2l6ZW9mKHN0cnVjdAorCQkJCQkgICBob3N0X2NtZF9kc184MDJfMTFfaHNfY2ZnX2VuaCkpOworCX0KKwlpZiAoaHNfYWN0aXZhdGUpIHsKKwkJaHNfY2ZnLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihIU19BQ1RJVkFURSk7CisJCWhzX2NmZy0+cGFyYW1zLmhzX2FjdGl2YXRlLnJlc3BfY3RybCA9IFJFU1BfTkVFREVEOworCX0gZWxzZSB7CisJCWhzX2NmZy0+YWN0aW9uID0gY3B1X3RvX2xlMTYoSFNfQ09ORklHVVJFKTsKKwkJaHNfY2ZnLT5wYXJhbXMuaHNfY29uZmlnLmNvbmRpdGlvbnMgPSBkYXRhX2J1Zi0+Y29uZGl0aW9uczsKKwkJaHNfY2ZnLT5wYXJhbXMuaHNfY29uZmlnLmdwaW8gPSBkYXRhX2J1Zi0+Z3BpbzsKKwkJaHNfY2ZnLT5wYXJhbXMuaHNfY29uZmlnLmdhcCA9IGRhdGFfYnVmLT5nYXA7CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LAorCQkJImNtZDogSFNfQ0ZHX0NNRDogY29uZGl0aW9uOjB4JXggZ3BpbzoweCV4IGdhcDoweCV4XG4iLAorCQkgICAgICAgaHNfY2ZnLT5wYXJhbXMuaHNfY29uZmlnLmNvbmRpdGlvbnMsCisJCSAgICAgICBoc19jZmctPnBhcmFtcy5oc19jb25maWcuZ3BpbywKKwkJICAgICAgIGhzX2NmZy0+cGFyYW1zLmhzX2NvbmZpZy5nYXApOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBjb21tYW5kIHRvIHNldC9nZXQgTUFDIGFkZHJlc3MuCisgKgorICogUHJlcGFyYXRpb24gaW5jbHVkZXMgLQorICogICAgICAtIFNldHRpbmcgY29tbWFuZCBJRCwgYWN0aW9uIGFuZCBwcm9wZXIgc2l6ZQorICogICAgICAtIFNldHRpbmcgTUFDIGFkZHJlc3MgKGZvciBTRVQgb25seSkKKyAqICAgICAgLSBFbnN1cmluZyBjb3JyZWN0IGVuZGlhbi1uZXNzCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9jbWRfODAyXzExX21hY19hZGRyZXNzKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJCSAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwKKwkJCQkJICB1MTYgY21kX2FjdGlvbikKK3sKKwljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihIb3N0Q21kX0NNRF84MDJfMTFfTUFDX0FERFJFU1MpOworCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX21hY19hZGRyZXNzKSArCisJCQkJU19EU19HRU4pOworCWNtZC0+cmVzdWx0ID0gMDsKKworCWNtZC0+cGFyYW1zLm1hY19hZGRyLmFjdGlvbiA9IGNwdV90b19sZTE2KGNtZF9hY3Rpb24pOworCisJaWYgKGNtZF9hY3Rpb24gPT0gSG9zdENtZF9BQ1RfR0VOX1NFVCkKKwkJbWVtY3B5KGNtZC0+cGFyYW1zLm1hY19hZGRyLm1hY19hZGRyLCBwcml2LT5jdXJyX2FkZHIsCisJCSAgICAgICBFVEhfQUxFTik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGNvbW1hbmQgdG8gc2V0IE1BQyBtdWx0aWNhc3QgYWRkcmVzcy4KKyAqCisgKiBQcmVwYXJhdGlvbiBpbmNsdWRlcyAtCisgKiAgICAgIC0gU2V0dGluZyBjb21tYW5kIElELCBhY3Rpb24gYW5kIHByb3BlciBzaXplCisgKiAgICAgIC0gU2V0dGluZyBNQUMgbXVsdGljYXN0IGFkZHJlc3MKKyAqICAgICAgLSBFbnN1cmluZyBjb3JyZWN0IGVuZGlhbi1uZXNzCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9jbWRfbWFjX211bHRpY2FzdF9hZHIoc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwKKwkJCQkJIHUxNiBjbWRfYWN0aW9uLCB2b2lkICpkYXRhX2J1ZikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9tdWx0aWNhc3RfbGlzdCAqbWNhc3RfbGlzdCA9CisJCShzdHJ1Y3QgbXdpZmlleF9tdWx0aWNhc3RfbGlzdCAqKSBkYXRhX2J1ZjsKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfbWFjX211bHRpY2FzdF9hZHIgKm1jYXN0X2FkZHIgPSAmY21kLT5wYXJhbXMubWNfYWRkcjsKKworCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZHNfbWFjX211bHRpY2FzdF9hZHIpICsKKwkJCQlTX0RTX0dFTik7CisJY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoSG9zdENtZF9DTURfTUFDX01VTFRJQ0FTVF9BRFIpOworCisJbWNhc3RfYWRkci0+YWN0aW9uID0gY3B1X3RvX2xlMTYoY21kX2FjdGlvbik7CisJbWNhc3RfYWRkci0+bnVtX29mX2FkcnMgPQorCQljcHVfdG9fbGUxNigodTE2KSBtY2FzdF9saXN0LT5udW1fbXVsdGljYXN0X2FkZHIpOworCW1lbWNweShtY2FzdF9hZGRyLT5tYWNfbGlzdCwgbWNhc3RfbGlzdC0+bWFjX2xpc3QsCisJICAgICAgIG1jYXN0X2xpc3QtPm51bV9tdWx0aWNhc3RfYWRkciAqIEVUSF9BTEVOKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBjb21tYW5kIHRvIGRlYXV0aGVudGljYXRlLgorICoKKyAqIFByZXBhcmF0aW9uIGluY2x1ZGVzIC0KKyAqICAgICAgLSBTZXR0aW5nIGNvbW1hbmQgSUQgYW5kIHByb3BlciBzaXplCisgKiAgICAgIC0gU2V0dGluZyBBUCBNQUMgYWRkcmVzcyBhbmQgcmVhc29uIGNvZGUKKyAqICAgICAgLSBFbnN1cmluZyBjb3JyZWN0IGVuZGlhbi1uZXNzCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9jbWRfODAyXzExX2RlYXV0aGVudGljYXRlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJCSAgICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwKKwkJCQkJICAgICB2b2lkICpkYXRhX2J1ZikKK3sKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2RlYXV0aGVudGljYXRlICpkZWF1dGggPSAmY21kLT5wYXJhbXMuZGVhdXRoOworCisJY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoSG9zdENtZF9DTURfODAyXzExX0RFQVVUSEVOVElDQVRFKTsKKwljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9kZWF1dGhlbnRpY2F0ZSkKKwkJCQkrIFNfRFNfR0VOKTsKKworCS8qIFNldCBBUCBNQUMgYWRkcmVzcyAqLworCW1lbWNweShkZWF1dGgtPm1hY19hZGRyLCAodTggKikgZGF0YV9idWYsIEVUSF9BTEVOKTsKKworCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiY21kOiBEZWF1dGg6ICVwTVxuIiwgZGVhdXRoLT5tYWNfYWRkcik7CisKKwlkZWF1dGgtPnJlYXNvbl9jb2RlID0gY3B1X3RvX2xlMTYoV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGNvbW1hbmQgdG8gc3RvcCBBZC1Ib2MgbmV0d29yay4KKyAqCisgKiBQcmVwYXJhdGlvbiBpbmNsdWRlcyAtCisgKiAgICAgIC0gU2V0dGluZyBjb21tYW5kIElEIGFuZCBwcm9wZXIgc2l6ZQorICogICAgICAtIEVuc3VyaW5nIGNvcnJlY3QgZW5kaWFuLW5lc3MKKyAqLworc3RhdGljIGludCBtd2lmaWV4X2NtZF84MDJfMTFfYWRfaG9jX3N0b3Aoc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCkKK3sKKwljbWQtPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihIb3N0Q21kX0NNRF84MDJfMTFfQURfSE9DX1NUT1ApOworCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KFNfRFNfR0VOKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyBXRVAga2V5KHMpIHRvIGtleSBwYXJhbWV0ZXIgVExWKHMpLgorICoKKyAqIE11bHRpLWtleSBwYXJhbWV0ZXIgVExWcyBhcmUgc3VwcG9ydGVkLCBzbyB3ZSBjYW4gc2VuZCBtdWx0aXBsZQorICogV0VQIGtleXMgaW4gYSBzaW5nbGUgYnVmZmVyLgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X3NldF9rZXlwYXJhbXNldF93ZXAoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgbXdpZmlleF9pZV90eXBlX2tleV9wYXJhbV9zZXQgKmtleV9wYXJhbV9zZXQsCisJCQkgICAgdTE2ICprZXlfcGFyYW1fbGVuKQoreworCWludCBjdXJfa2V5X3BhcmFtX2xlbjsKKwl1OCBpOworCisJLyogTXVsdGkta2V5X3BhcmFtX3NldCBUTFYgaXMgc3VwcG9ydGVkICovCisJZm9yIChpID0gMDsgaSA8IE5VTV9XRVBfS0VZUzsgaSsrKSB7CisJCWlmICgocHJpdi0+d2VwX2tleVtpXS5rZXlfbGVuZ3RoID09IFdMQU5fS0VZX0xFTl9XRVA0MCkgfHwKKwkJICAgIChwcml2LT53ZXBfa2V5W2ldLmtleV9sZW5ndGggPT0gV0xBTl9LRVlfTEVOX1dFUDEwNCkpIHsKKwkJCWtleV9wYXJhbV9zZXQtPnR5cGUgPQorCQkJCWNwdV90b19sZTE2KFRMVl9UWVBFX0tFWV9NQVRFUklBTCk7CisvKiBLZXlfcGFyYW1fc2V0IFdFUCBmaXhlZCBsZW5ndGggKi8KKyNkZWZpbmUgS0VZUEFSQU1TRVRfV0VQX0ZJWEVEX0xFTiA4CisJCQlrZXlfcGFyYW1fc2V0LT5sZW5ndGggPSBjcHVfdG9fbGUxNigodTE2KQorCQkJCQkocHJpdi0+d2VwX2tleVtpXS4KKwkJCQkJIGtleV9sZW5ndGggKworCQkJCQkgS0VZUEFSQU1TRVRfV0VQX0ZJWEVEX0xFTikpOworCQkJa2V5X3BhcmFtX3NldC0+a2V5X3R5cGVfaWQgPQorCQkJCWNwdV90b19sZTE2KEtFWV9UWVBFX0lEX1dFUCk7CisJCQlrZXlfcGFyYW1fc2V0LT5rZXlfaW5mbyA9CisJCQkJY3B1X3RvX2xlMTYoS0VZX0VOQUJMRUQgfCBLRVlfVU5JQ0FTVCB8CisJCQkJCSAgICBLRVlfTUNBU1QpOworCQkJa2V5X3BhcmFtX3NldC0+a2V5X2xlbiA9CisJCQkJY3B1X3RvX2xlMTYocHJpdi0+d2VwX2tleVtpXS5rZXlfbGVuZ3RoKTsKKwkJCS8qIFNldCBXRVAga2V5IGluZGV4ICovCisJCQlrZXlfcGFyYW1fc2V0LT5rZXlbMF0gPSBpOworCQkJLyogU2V0IGRlZmF1bHQgVHgga2V5IGZsYWcgKi8KKwkJCWlmIChpID09CisJCQkgICAgKHByaXYtPgorCQkJICAgICB3ZXBfa2V5X2N1cnJfaW5kZXggJiBIb3N0Q21kX1dFUF9LRVlfSU5ERVhfTUFTSykpCisJCQkJa2V5X3BhcmFtX3NldC0+a2V5WzFdID0gMTsKKwkJCWVsc2UKKwkJCQlrZXlfcGFyYW1fc2V0LT5rZXlbMV0gPSAwOworCQkJbWVtbW92ZSgma2V5X3BhcmFtX3NldC0+a2V5WzJdLAorCQkJCXByaXYtPndlcF9rZXlbaV0ua2V5X21hdGVyaWFsLAorCQkJCXByaXYtPndlcF9rZXlbaV0ua2V5X2xlbmd0aCk7CisKKwkJCWN1cl9rZXlfcGFyYW1fbGVuID0gcHJpdi0+d2VwX2tleVtpXS5rZXlfbGVuZ3RoICsKKwkJCQlLRVlQQVJBTVNFVF9XRVBfRklYRURfTEVOICsKKwkJCQlzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyKTsKKwkJCSprZXlfcGFyYW1fbGVuICs9ICh1MTYpIGN1cl9rZXlfcGFyYW1fbGVuOworCQkJa2V5X3BhcmFtX3NldCA9CisJCQkJKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVfa2V5X3BhcmFtX3NldCAqKQorCQkJCQkJKCh1OCAqKWtleV9wYXJhbV9zZXQgKworCQkJCQkJY3VyX2tleV9wYXJhbV9sZW4pOworCQl9IGVsc2UgaWYgKCFwcml2LT53ZXBfa2V5W2ldLmtleV9sZW5ndGgpIHsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkJImtleSVkIExlbmd0aCA9ICVkIGlzIGluY29ycmVjdFxuIiwKKwkJCSAgICAgICAoaSArIDEpLCBwcml2LT53ZXBfa2V5W2ldLmtleV9sZW5ndGgpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGNvbW1hbmQgdG8gc2V0L2dldC9yZXNldCBuZXR3b3JrIGtleShzKS4KKyAqCisgKiBQcmVwYXJhdGlvbiBpbmNsdWRlcyAtCisgKiAgICAgIC0gU2V0dGluZyBjb21tYW5kIElELCBhY3Rpb24gYW5kIHByb3BlciBzaXplCisgKiAgICAgIC0gU2V0dGluZyBXRVAga2V5cywgV0FQSSBrZXlzIG9yIFdQQSBrZXlzIGFsb25nIHdpdGggcmVxdWlyZWQKKyAqICAgICAgICBlbmNyeXB0aW9uIChUS0lQLCBBRVMpIChhcyByZXF1aXJlZCkKKyAqICAgICAgLSBFbnN1cmluZyBjb3JyZWN0IGVuZGlhbi1uZXNzCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9jbWRfODAyXzExX2tleV9tYXRlcmlhbChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCQkgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLAorCQkJCQkgICB1MTYgY21kX2FjdGlvbiwKKwkJCQkJICAgdTMyIGNtZF9vaWQsIHZvaWQgKmRhdGFfYnVmKQoreworCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfa2V5X21hdGVyaWFsICprZXlfbWF0ZXJpYWwgPQorCQkmY21kLT5wYXJhbXMua2V5X21hdGVyaWFsOworCXN0cnVjdCBtd2lmaWV4X2RzX2VuY3J5cHRfa2V5ICplbmNfa2V5ID0KKwkJKHN0cnVjdCBtd2lmaWV4X2RzX2VuY3J5cHRfa2V5ICopIGRhdGFfYnVmOworCXUxNiBrZXlfcGFyYW1fbGVuID0gMDsKKwlpbnQgcmV0ID0gMDsKKwljb25zdCB1OCBiY19tYWNbXSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OworCisJY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoSG9zdENtZF9DTURfODAyXzExX0tFWV9NQVRFUklBTCk7CisJa2V5X21hdGVyaWFsLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihjbWRfYWN0aW9uKTsKKworCWlmIChjbWRfYWN0aW9uID09IEhvc3RDbWRfQUNUX0dFTl9HRVQpIHsKKwkJY21kLT5zaXplID0KKwkJCWNwdV90b19sZTE2KHNpemVvZihrZXlfbWF0ZXJpYWwtPmFjdGlvbikgKyBTX0RTX0dFTik7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKCFlbmNfa2V5KSB7CisJCW1lbXNldCgma2V5X21hdGVyaWFsLT5rZXlfcGFyYW1fc2V0LCAwLAorCQkgICAgICAgKE5VTV9XRVBfS0VZUyAqCisJCQlzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZV9rZXlfcGFyYW1fc2V0KSkpOworCQlyZXQgPSBtd2lmaWV4X3NldF9rZXlwYXJhbXNldF93ZXAocHJpdiwKKwkJCQkJCSAgJmtleV9tYXRlcmlhbC0+a2V5X3BhcmFtX3NldCwKKwkJCQkJCSAgJmtleV9wYXJhbV9sZW4pOworCQljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihrZXlfcGFyYW1fbGVuICsKKwkJCQkgICAgc2l6ZW9mKGtleV9tYXRlcmlhbC0+YWN0aW9uKSArIFNfRFNfR0VOKTsKKwkJcmV0dXJuIHJldDsKKwl9IGVsc2UKKwkJbWVtc2V0KCZrZXlfbWF0ZXJpYWwtPmtleV9wYXJhbV9zZXQsIDAsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZV9rZXlfcGFyYW1fc2V0KSk7CisJaWYgKGVuY19rZXktPmlzX3dhcGlfa2V5KSB7CisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogU2V0IFdBUEkgS2V5XG4iKTsKKwkJa2V5X21hdGVyaWFsLT5rZXlfcGFyYW1fc2V0LmtleV90eXBlX2lkID0KKwkJCWNwdV90b19sZTE2KEtFWV9UWVBFX0lEX1dBUEkpOworCQlpZiAoY21kX29pZCA9PSBLRVlfSU5GT19FTkFCTEVEKQorCQkJa2V5X21hdGVyaWFsLT5rZXlfcGFyYW1fc2V0LmtleV9pbmZvID0KKwkJCQljcHVfdG9fbGUxNihLRVlfRU5BQkxFRCk7CisJCWVsc2UKKwkJCWtleV9tYXRlcmlhbC0+a2V5X3BhcmFtX3NldC5rZXlfaW5mbyA9CisJCQkJY3B1X3RvX2xlMTYoIUtFWV9FTkFCTEVEKTsKKworCQlrZXlfbWF0ZXJpYWwtPmtleV9wYXJhbV9zZXQua2V5WzBdID0gZW5jX2tleS0+a2V5X2luZGV4OworCQlpZiAoIXByaXYtPnNlY19pbmZvLndhcGlfa2V5X29uKQorCQkJa2V5X21hdGVyaWFsLT5rZXlfcGFyYW1fc2V0LmtleVsxXSA9IDE7CisJCWVsc2UKKwkJCS8qIHNldCAwIHdoZW4gcmUta2V5ICovCisJCQlrZXlfbWF0ZXJpYWwtPmtleV9wYXJhbV9zZXQua2V5WzFdID0gMDsKKworCQlpZiAoMCAhPSBtZW1jbXAoZW5jX2tleS0+bWFjX2FkZHIsIGJjX21hYywgc2l6ZW9mKGJjX21hYykpKSB7CisJCQkvKiBXQVBJIHBhaXJ3aXNlIGtleTogdW5pY2FzdCAqLworCQkJa2V5X21hdGVyaWFsLT5rZXlfcGFyYW1fc2V0LmtleV9pbmZvIHw9CisJCQkJY3B1X3RvX2xlMTYoS0VZX1VOSUNBU1QpOworCQl9IGVsc2UgewkvKiBXQVBJIGdyb3VwIGtleTogbXVsdGljYXN0ICovCisJCQlrZXlfbWF0ZXJpYWwtPmtleV9wYXJhbV9zZXQua2V5X2luZm8gfD0KKwkJCQljcHVfdG9fbGUxNihLRVlfTUNBU1QpOworCQkJcHJpdi0+c2VjX2luZm8ud2FwaV9rZXlfb24gPSB0cnVlOworCQl9CisKKwkJa2V5X21hdGVyaWFsLT5rZXlfcGFyYW1fc2V0LnR5cGUgPQorCQkJY3B1X3RvX2xlMTYoVExWX1RZUEVfS0VZX01BVEVSSUFMKTsKKwkJa2V5X21hdGVyaWFsLT5rZXlfcGFyYW1fc2V0LmtleV9sZW4gPQorCQkJY3B1X3RvX2xlMTYoV0FQSV9LRVlfTEVOKTsKKwkJbWVtY3B5KCZrZXlfbWF0ZXJpYWwtPmtleV9wYXJhbV9zZXQua2V5WzJdLAorCQkgICAgICAgZW5jX2tleS0+a2V5X21hdGVyaWFsLCBlbmNfa2V5LT5rZXlfbGVuKTsKKwkJbWVtY3B5KCZrZXlfbWF0ZXJpYWwtPmtleV9wYXJhbV9zZXQua2V5WzIgKyBlbmNfa2V5LT5rZXlfbGVuXSwKKwkJICAgICAgIGVuY19rZXktPndhcGlfcnhwbiwgV0FQSV9SWFBOX0xFTik7CisJCWtleV9tYXRlcmlhbC0+a2V5X3BhcmFtX3NldC5sZW5ndGggPQorCQkJY3B1X3RvX2xlMTYoV0FQSV9LRVlfTEVOICsgS0VZUEFSQU1TRVRfRklYRURfTEVOKTsKKworCQlrZXlfcGFyYW1fbGVuID0gKFdBUElfS0VZX0xFTiArIEtFWVBBUkFNU0VUX0ZJWEVEX0xFTikgKworCQkJCSBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyKTsKKwkJY21kLT5zaXplID0gY3B1X3RvX2xlMTYoa2V5X3BhcmFtX2xlbiArCisJCQkJc2l6ZW9mKGtleV9tYXRlcmlhbC0+YWN0aW9uKSArIFNfRFNfR0VOKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaWYgKGVuY19rZXktPmtleV9sZW4gPT0gV0xBTl9LRVlfTEVOX0NDTVApIHsKKwkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJjbWQ6IFdQQV9BRVNcbiIpOworCQlrZXlfbWF0ZXJpYWwtPmtleV9wYXJhbV9zZXQua2V5X3R5cGVfaWQgPQorCQkJY3B1X3RvX2xlMTYoS0VZX1RZUEVfSURfQUVTKTsKKwkJaWYgKGNtZF9vaWQgPT0gS0VZX0lORk9fRU5BQkxFRCkKKwkJCWtleV9tYXRlcmlhbC0+a2V5X3BhcmFtX3NldC5rZXlfaW5mbyA9CisJCQkJY3B1X3RvX2xlMTYoS0VZX0VOQUJMRUQpOworCQllbHNlCisJCQlrZXlfbWF0ZXJpYWwtPmtleV9wYXJhbV9zZXQua2V5X2luZm8gPQorCQkJCWNwdV90b19sZTE2KCFLRVlfRU5BQkxFRCk7CisKKwkJaWYgKGVuY19rZXktPmtleV9pbmRleCAmIE1XSUZJRVhfS0VZX0lOREVYX1VOSUNBU1QpCisJCQkJLyogQUVTIHBhaXJ3aXNlIGtleTogdW5pY2FzdCAqLworCQkJa2V5X21hdGVyaWFsLT5rZXlfcGFyYW1fc2V0LmtleV9pbmZvIHw9CisJCQkJY3B1X3RvX2xlMTYoS0VZX1VOSUNBU1QpOworCQllbHNlCQkvKiBBRVMgZ3JvdXAga2V5OiBtdWx0aWNhc3QgKi8KKwkJCWtleV9tYXRlcmlhbC0+a2V5X3BhcmFtX3NldC5rZXlfaW5mbyB8PQorCQkJCWNwdV90b19sZTE2KEtFWV9NQ0FTVCk7CisJfSBlbHNlIGlmIChlbmNfa2V5LT5rZXlfbGVuID09IFdMQU5fS0VZX0xFTl9US0lQKSB7CisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiY21kOiBXUEFfVEtJUFxuIik7CisJCWtleV9tYXRlcmlhbC0+a2V5X3BhcmFtX3NldC5rZXlfdHlwZV9pZCA9CisJCQljcHVfdG9fbGUxNihLRVlfVFlQRV9JRF9US0lQKTsKKwkJa2V5X21hdGVyaWFsLT5rZXlfcGFyYW1fc2V0LmtleV9pbmZvID0KKwkJCWNwdV90b19sZTE2KEtFWV9FTkFCTEVEKTsKKworCQlpZiAoZW5jX2tleS0+a2V5X2luZGV4ICYgTVdJRklFWF9LRVlfSU5ERVhfVU5JQ0FTVCkKKwkJCQkvKiBUS0lQIHBhaXJ3aXNlIGtleTogdW5pY2FzdCAqLworCQkJa2V5X21hdGVyaWFsLT5rZXlfcGFyYW1fc2V0LmtleV9pbmZvIHw9CisJCQkJY3B1X3RvX2xlMTYoS0VZX1VOSUNBU1QpOworCQllbHNlCQkvKiBUS0lQIGdyb3VwIGtleTogbXVsdGljYXN0ICovCisJCQlrZXlfbWF0ZXJpYWwtPmtleV9wYXJhbV9zZXQua2V5X2luZm8gfD0KKwkJCQljcHVfdG9fbGUxNihLRVlfTUNBU1QpOworCX0KKworCWlmIChrZXlfbWF0ZXJpYWwtPmtleV9wYXJhbV9zZXQua2V5X3R5cGVfaWQpIHsKKwkJa2V5X21hdGVyaWFsLT5rZXlfcGFyYW1fc2V0LnR5cGUgPQorCQkJY3B1X3RvX2xlMTYoVExWX1RZUEVfS0VZX01BVEVSSUFMKTsKKwkJa2V5X21hdGVyaWFsLT5rZXlfcGFyYW1fc2V0LmtleV9sZW4gPQorCQkJY3B1X3RvX2xlMTYoKHUxNikgZW5jX2tleS0+a2V5X2xlbik7CisJCW1lbWNweShrZXlfbWF0ZXJpYWwtPmtleV9wYXJhbV9zZXQua2V5LCBlbmNfa2V5LT5rZXlfbWF0ZXJpYWwsCisJCSAgICAgICBlbmNfa2V5LT5rZXlfbGVuKTsKKwkJa2V5X21hdGVyaWFsLT5rZXlfcGFyYW1fc2V0Lmxlbmd0aCA9CisJCQljcHVfdG9fbGUxNigodTE2KSBlbmNfa2V5LT5rZXlfbGVuICsKKwkJCQkgICAgS0VZUEFSQU1TRVRfRklYRURfTEVOKTsKKworCQlrZXlfcGFyYW1fbGVuID0gKHUxNikgKGVuY19rZXktPmtleV9sZW4gKyBLRVlQQVJBTVNFVF9GSVhFRF9MRU4pCisJCQkJICAgICAgKyBzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyKTsKKworCQljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihrZXlfcGFyYW1fbGVuICsKKwkJCQkgICAgc2l6ZW9mKGtleV9tYXRlcmlhbC0+YWN0aW9uKSArIFNfRFNfR0VOKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBjb21tYW5kIHRvIHNldC9nZXQgMTFkIGRvbWFpbiBpbmZvcm1hdGlvbi4KKyAqCisgKiBQcmVwYXJhdGlvbiBpbmNsdWRlcyAtCisgKiAgICAgIC0gU2V0dGluZyBjb21tYW5kIElELCBhY3Rpb24gYW5kIHByb3BlciBzaXplCisgKiAgICAgIC0gU2V0dGluZyBkb21haW4gaW5mb3JtYXRpb24gZmllbGRzIChmb3IgU0VUIG9ubHkpCisgKiAgICAgIC0gRW5zdXJpbmcgY29ycmVjdCBlbmRpYW4tbmVzcworICovCitzdGF0aWMgaW50IG13aWZpZXhfY21kXzgwMl8xMWRfZG9tYWluX2luZm8oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkJICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwKKwkJCQkJICAgdTE2IGNtZF9hY3Rpb24pCit7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMWRfZG9tYWluX2luZm8gKmRvbWFpbl9pbmZvID0KKwkJJmNtZC0+cGFyYW1zLmRvbWFpbl9pbmZvOworCXN0cnVjdCBtd2lmaWV4X2lldHlwZXNfZG9tYWluX3BhcmFtX3NldCAqZG9tYWluID0KKwkJJmRvbWFpbl9pbmZvLT5kb21haW47CisJdTggbm9fb2ZfdHJpcGxldCA9IGFkYXB0ZXItPmRvbWFpbl9yZWcubm9fb2ZfdHJpcGxldDsKKworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogMTFEOiBub19vZl90cmlwbGV0PTB4JXhcbiIsIG5vX29mX3RyaXBsZXQpOworCisJY21kLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoSG9zdENtZF9DTURfODAyXzExRF9ET01BSU5fSU5GTyk7CisJZG9tYWluX2luZm8tPmFjdGlvbiA9IGNwdV90b19sZTE2KGNtZF9hY3Rpb24pOworCWlmIChjbWRfYWN0aW9uID09IEhvc3RDbWRfQUNUX0dFTl9HRVQpIHsKKwkJY21kLT5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGRvbWFpbl9pbmZvLT5hY3Rpb24pICsgU19EU19HRU4pOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBTZXQgZG9tYWluIGluZm8gZmllbGRzICovCisJZG9tYWluLT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFdMQU5fRUlEX0NPVU5UUlkpOworCW1lbWNweShkb21haW4tPmNvdW50cnlfY29kZSwgYWRhcHRlci0+ZG9tYWluX3JlZy5jb3VudHJ5X2NvZGUsCisJCQlzaXplb2YoZG9tYWluLT5jb3VudHJ5X2NvZGUpKTsKKworCWRvbWFpbi0+aGVhZGVyLmxlbiA9IGNwdV90b19sZTE2KChub19vZl90cmlwbGV0ICoKKwkJCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jb3VudHJ5X2llX3RyaXBsZXQpKSArCisJCQkJc2l6ZW9mKGRvbWFpbi0+Y291bnRyeV9jb2RlKSk7CisKKwlpZiAobm9fb2ZfdHJpcGxldCkgeworCQltZW1jcHkoZG9tYWluLT50cmlwbGV0LCBhZGFwdGVyLT5kb21haW5fcmVnLnRyaXBsZXQsCisJCQkJbm9fb2ZfdHJpcGxldCAqCisJCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY291bnRyeV9pZV90cmlwbGV0KSk7CisKKwkJY21kLT5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGRvbWFpbl9pbmZvLT5hY3Rpb24pICsKKwkJCQlsZTE2X3RvX2NwdShkb21haW4tPmhlYWRlci5sZW4pICsKKwkJCQlzaXplb2Yoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyKQorCQkJCSsgU19EU19HRU4pOworCX0gZWxzZSB7CisJCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihkb21haW5faW5mby0+YWN0aW9uKSArIFNfRFNfR0VOKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgY29tbWFuZCB0byBzZXQvZ2V0IFJGIGNoYW5uZWwuCisgKgorICogUHJlcGFyYXRpb24gaW5jbHVkZXMgLQorICogICAgICAtIFNldHRpbmcgY29tbWFuZCBJRCwgYWN0aW9uIGFuZCBwcm9wZXIgc2l6ZQorICogICAgICAtIFNldHRpbmcgUkYgdHlwZSBhbmQgY3VycmVudCBSRiBjaGFubmVsIChmb3IgU0VUIG9ubHkpCisgKiAgICAgIC0gRW5zdXJpbmcgY29ycmVjdCBlbmRpYW4tbmVzcworICovCitzdGF0aWMgaW50IG13aWZpZXhfY21kXzgwMl8xMV9yZl9jaGFubmVsKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJCSBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLAorCQkJCQkgdTE2IGNtZF9hY3Rpb24sIHZvaWQgKmRhdGFfYnVmKQoreworCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfcmZfY2hhbm5lbCAqcmZfY2hhbiA9CisJCSZjbWQtPnBhcmFtcy5yZl9jaGFubmVsOworCXVpbnQxNl90IHJmX3R5cGUgPSBsZTE2X3RvX2NwdShyZl9jaGFuLT5yZl90eXBlKTsKKworCWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KEhvc3RDbWRfQ01EXzgwMl8xMV9SRl9DSEFOTkVMKTsKKwljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9yZl9jaGFubmVsKQorCQkJCSsgU19EU19HRU4pOworCisJaWYgKGNtZF9hY3Rpb24gPT0gSG9zdENtZF9BQ1RfR0VOX1NFVCkgeworCQlpZiAoKHByaXYtPmFkYXB0ZXItPmFkaG9jX3N0YXJ0X2JhbmQgJiBCQU5EX0EpCisJCSAgICB8fCAocHJpdi0+YWRhcHRlci0+YWRob2Nfc3RhcnRfYmFuZCAmIEJBTkRfQU4pKQorCQkJcmZfY2hhbi0+cmZfdHlwZSA9CisJCQkJY3B1X3RvX2xlMTYoSG9zdENtZF9TQ0FOX1JBRElPX1RZUEVfQSk7CisKKwkJcmZfdHlwZSA9IGxlMTZfdG9fY3B1KHJmX2NoYW4tPnJmX3R5cGUpOworCQlTRVRfU0VDT05EQVJZQ0hBTihyZl90eXBlLCBwcml2LT5hZGFwdGVyLT5jaGFuX29mZnNldCk7CisJCXJmX2NoYW4tPmN1cnJlbnRfY2hhbm5lbCA9IGNwdV90b19sZTE2KCooKHUxNiAqKSBkYXRhX2J1ZikpOworCX0KKwlyZl9jaGFuLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihjbWRfYWN0aW9uKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgY29tbWFuZCB0byBzZXQvZ2V0IElCU1MgY29hbGVzY2luZyBzdGF0dXMuCisgKgorICogUHJlcGFyYXRpb24gaW5jbHVkZXMgLQorICogICAgICAtIFNldHRpbmcgY29tbWFuZCBJRCwgYWN0aW9uIGFuZCBwcm9wZXIgc2l6ZQorICogICAgICAtIFNldHRpbmcgc3RhdHVzIHRvIGVuYWJsZSBvciBkaXNhYmxlIChmb3IgU0VUIG9ubHkpCisgKiAgICAgIC0gRW5zdXJpbmcgY29ycmVjdCBlbmRpYW4tbmVzcworICovCitzdGF0aWMgaW50IG13aWZpZXhfY21kX2lic3NfY29hbGVzY2luZ19zdGF0dXMoc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwKKwkJCQkJICAgICAgdTE2IGNtZF9hY3Rpb24sIHZvaWQgKmRhdGFfYnVmKQoreworCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfaWJzc19zdGF0dXMgKmlic3NfY29hbCA9CisJCSYoY21kLT5wYXJhbXMuaWJzc19jb2FsZXNjaW5nKTsKKwl1MTYgZW5hYmxlID0gMDsKKworCWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KEhvc3RDbWRfQ01EXzgwMl8xMV9JQlNTX0NPQUxFU0NJTkdfU1RBVFVTKTsKKwljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9pYnNzX3N0YXR1cykgKworCQkJCVNfRFNfR0VOKTsKKwljbWQtPnJlc3VsdCA9IDA7CisJaWJzc19jb2FsLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihjbWRfYWN0aW9uKTsKKworCXN3aXRjaCAoY21kX2FjdGlvbikgeworCWNhc2UgSG9zdENtZF9BQ1RfR0VOX1NFVDoKKwkJaWYgKGRhdGFfYnVmICE9IE5VTEwpCisJCQllbmFibGUgPSAqKHUxNiAqKSBkYXRhX2J1ZjsKKwkJaWJzc19jb2FsLT5lbmFibGUgPSBjcHVfdG9fbGUxNihlbmFibGUpOworCQlicmVhazsKKworCQkvKiBJbiBvdGhlciBjYXNlLi4gTm90aGluZyB0byBkbyAqLworCWNhc2UgSG9zdENtZF9BQ1RfR0VOX0dFVDoKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgY29tbWFuZCB0byBzZXQvZ2V0IHJlZ2lzdGVyIHZhbHVlLgorICoKKyAqIFByZXBhcmF0aW9uIGluY2x1ZGVzIC0KKyAqICAgICAgLSBTZXR0aW5nIGNvbW1hbmQgSUQsIGFjdGlvbiBhbmQgcHJvcGVyIHNpemUKKyAqICAgICAgLSBTZXR0aW5nIHJlZ2lzdGVyIG9mZnNldCAoZm9yIGJvdGggR0VUIGFuZCBTRVQpIGFuZAorICogICAgICAgIHJlZ2lzdGVyIHZhbHVlIChmb3IgU0VUIG9ubHkpCisgKiAgICAgIC0gRW5zdXJpbmcgY29ycmVjdCBlbmRpYW4tbmVzcworICoKKyAqIFRoZSBmb2xsb3dpbmcgdHlwZSBvZiByZWdpc3RlcnMgY2FuIGJlIGFjY2Vzc2VkIHdpdGggdGhpcyBmdW5jdGlvbiAtCisgKiAgICAgIC0gTUFDIHJlZ2lzdGVyCisgKiAgICAgIC0gQkJQIHJlZ2lzdGVyCisgKiAgICAgIC0gUkYgcmVnaXN0ZXIKKyAqICAgICAgLSBQTUlDIHJlZ2lzdGVyCisgKiAgICAgIC0gQ0FVIHJlZ2lzdGVyCisgKiAgICAgIC0gRUVQUk9NCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9jbWRfcmVnX2FjY2VzcyhzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kLAorCQkJCSAgdTE2IGNtZF9hY3Rpb24sIHZvaWQgKmRhdGFfYnVmKQoreworCXN0cnVjdCBtd2lmaWV4X2RzX3JlZ19ydyAqcmVnX3J3OworCisJcmVnX3J3ID0gKHN0cnVjdCBtd2lmaWV4X2RzX3JlZ19ydyAqKSBkYXRhX2J1ZjsKKwlzd2l0Y2ggKGxlMTZfdG9fY3B1KGNtZC0+Y29tbWFuZCkpIHsKKwljYXNlIEhvc3RDbWRfQ01EX01BQ19SRUdfQUNDRVNTOgorCXsKKwkJc3RydWN0IGhvc3RfY21kX2RzX21hY19yZWdfYWNjZXNzICptYWNfcmVnOworCisJCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZigqbWFjX3JlZykgKyBTX0RTX0dFTik7CisJCW1hY19yZWcgPSAoc3RydWN0IGhvc3RfY21kX2RzX21hY19yZWdfYWNjZXNzICopICZjbWQtPgorCQkJcGFyYW1zLm1hY19yZWc7CisJCW1hY19yZWctPmFjdGlvbiA9IGNwdV90b19sZTE2KGNtZF9hY3Rpb24pOworCQltYWNfcmVnLT5vZmZzZXQgPQorCQkJY3B1X3RvX2xlMTYoKHUxNikgbGUzMl90b19jcHUocmVnX3J3LT5vZmZzZXQpKTsKKwkJbWFjX3JlZy0+dmFsdWUgPSByZWdfcnctPnZhbHVlOworCQlicmVhazsKKwl9CisJY2FzZSBIb3N0Q21kX0NNRF9CQlBfUkVHX0FDQ0VTUzoKKwl7CisJCXN0cnVjdCBob3N0X2NtZF9kc19iYnBfcmVnX2FjY2VzcyAqYmJwX3JlZzsKKworCQljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoKmJicF9yZWcpICsgU19EU19HRU4pOworCQliYnBfcmVnID0gKHN0cnVjdCBob3N0X2NtZF9kc19iYnBfcmVnX2FjY2VzcyAqKSAmY21kLT4KKwkJCXBhcmFtcy5iYnBfcmVnOworCQliYnBfcmVnLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihjbWRfYWN0aW9uKTsKKwkJYmJwX3JlZy0+b2Zmc2V0ID0KKwkJCWNwdV90b19sZTE2KCh1MTYpIGxlMzJfdG9fY3B1KHJlZ19ydy0+b2Zmc2V0KSk7CisJCWJicF9yZWctPnZhbHVlID0gKHU4KSBsZTMyX3RvX2NwdShyZWdfcnctPnZhbHVlKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgSG9zdENtZF9DTURfUkZfUkVHX0FDQ0VTUzoKKwl7CisJCXN0cnVjdCBob3N0X2NtZF9kc19yZl9yZWdfYWNjZXNzICpyZl9yZWc7CisKKwkJY21kLT5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpyZl9yZWcpICsgU19EU19HRU4pOworCQlyZl9yZWcgPSAoc3RydWN0IGhvc3RfY21kX2RzX3JmX3JlZ19hY2Nlc3MgKikgJmNtZC0+CisJCQlwYXJhbXMucmZfcmVnOworCQlyZl9yZWctPmFjdGlvbiA9IGNwdV90b19sZTE2KGNtZF9hY3Rpb24pOworCQlyZl9yZWctPm9mZnNldCA9CisJCQljcHVfdG9fbGUxNigodTE2KSBsZTMyX3RvX2NwdShyZWdfcnctPm9mZnNldCkpOworCQlyZl9yZWctPnZhbHVlID0gKHU4KSBsZTMyX3RvX2NwdShyZWdfcnctPnZhbHVlKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgSG9zdENtZF9DTURfUE1JQ19SRUdfQUNDRVNTOgorCXsKKwkJc3RydWN0IGhvc3RfY21kX2RzX3BtaWNfcmVnX2FjY2VzcyAqcG1pY19yZWc7CisKKwkJY21kLT5zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpwbWljX3JlZykgKyBTX0RTX0dFTik7CisJCXBtaWNfcmVnID0gKHN0cnVjdCBob3N0X2NtZF9kc19wbWljX3JlZ19hY2Nlc3MgKikgJmNtZC0+CisJCQkJcGFyYW1zLnBtaWNfcmVnOworCQlwbWljX3JlZy0+YWN0aW9uID0gY3B1X3RvX2xlMTYoY21kX2FjdGlvbik7CisJCXBtaWNfcmVnLT5vZmZzZXQgPQorCQkJY3B1X3RvX2xlMTYoKHUxNikgbGUzMl90b19jcHUocmVnX3J3LT5vZmZzZXQpKTsKKwkJcG1pY19yZWctPnZhbHVlID0gKHU4KSBsZTMyX3RvX2NwdShyZWdfcnctPnZhbHVlKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgSG9zdENtZF9DTURfQ0FVX1JFR19BQ0NFU1M6CisJeworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfcmZfcmVnX2FjY2VzcyAqY2F1X3JlZzsKKworCQljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoKmNhdV9yZWcpICsgU19EU19HRU4pOworCQljYXVfcmVnID0gKHN0cnVjdCBob3N0X2NtZF9kc19yZl9yZWdfYWNjZXNzICopICZjbWQtPgorCQkJCXBhcmFtcy5yZl9yZWc7CisJCWNhdV9yZWctPmFjdGlvbiA9IGNwdV90b19sZTE2KGNtZF9hY3Rpb24pOworCQljYXVfcmVnLT5vZmZzZXQgPQorCQkJY3B1X3RvX2xlMTYoKHUxNikgbGUzMl90b19jcHUocmVnX3J3LT5vZmZzZXQpKTsKKwkJY2F1X3JlZy0+dmFsdWUgPSAodTgpIGxlMzJfdG9fY3B1KHJlZ19ydy0+dmFsdWUpOworCQlicmVhazsKKwl9CisJY2FzZSBIb3N0Q21kX0NNRF84MDJfMTFfRUVQUk9NX0FDQ0VTUzoKKwl7CisJCXN0cnVjdCBtd2lmaWV4X2RzX3JlYWRfZWVwcm9tICpyZF9lZXByb20gPQorCQkJKHN0cnVjdCBtd2lmaWV4X2RzX3JlYWRfZWVwcm9tICopIGRhdGFfYnVmOworCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2VlcHJvbV9hY2Nlc3MgKmNtZF9lZXByb20gPQorCQkJKHN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfZWVwcm9tX2FjY2VzcyAqKQorCQkJJmNtZC0+cGFyYW1zLmVlcHJvbTsKKworCQljbWQtPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZF9lZXByb20pICsgU19EU19HRU4pOworCQljbWRfZWVwcm9tLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihjbWRfYWN0aW9uKTsKKwkJY21kX2VlcHJvbS0+b2Zmc2V0ID0gcmRfZWVwcm9tLT5vZmZzZXQ7CisJCWNtZF9lZXByb20tPmJ5dGVfY291bnQgPSByZF9lZXByb20tPmJ5dGVfY291bnQ7CisJCWNtZF9lZXByb20tPnZhbHVlID0gMDsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgdGhlIGNvbW1hbmRzIGJlZm9yZSBzZW5kaW5nIHRoZW0gdG8gdGhlIGZpcm13YXJlLgorICoKKyAqIFRoaXMgaXMgYSBnZW5lcmljIGZ1bmN0aW9uIHdoaWNoIGNhbGxzIHNwZWNpZmljIGNvbW1hbmQgcHJlcGFyYXRpb24KKyAqIHJvdXRpbmVzIGJhc2VkIHVwb24gdGhlIGNvbW1hbmQgbnVtYmVyLgorICovCitpbnQgbXdpZmlleF9zdGFfcHJlcGFyZV9jbWQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdWludDE2X3QgY21kX25vLAorCQkJICAgIHUxNiBjbWRfYWN0aW9uLCB1MzIgY21kX29pZCwKKwkJCSAgICB2b2lkICpkYXRhX2J1Ziwgdm9pZCAqY21kX2J1ZikKK3sKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqY21kX3B0ciA9CisJCShzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqKSBjbWRfYnVmOworCWludCByZXQgPSAwOworCisJLyogUHJlcGFyZSBjb21tYW5kICovCisJc3dpdGNoIChjbWRfbm8pIHsKKwljYXNlIEhvc3RDbWRfQ01EX0dFVF9IV19TUEVDOgorCQlyZXQgPSBtd2lmaWV4X2NtZF9nZXRfaHdfc3BlYyhwcml2LCBjbWRfcHRyKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF9NQUNfQ09OVFJPTDoKKwkJcmV0ID0gbXdpZmlleF9jbWRfbWFjX2NvbnRyb2wocHJpdiwgY21kX3B0ciwgY21kX2FjdGlvbiwKKwkJCQkJICAgICAgZGF0YV9idWYpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzgwMl8xMV9NQUNfQUREUkVTUzoKKwkJcmV0ID0gbXdpZmlleF9jbWRfODAyXzExX21hY19hZGRyZXNzKHByaXYsIGNtZF9wdHIsCisJCQkJCQkgICAgIGNtZF9hY3Rpb24pOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EX01BQ19NVUxUSUNBU1RfQURSOgorCQlyZXQgPSBtd2lmaWV4X2NtZF9tYWNfbXVsdGljYXN0X2FkcihjbWRfcHRyLCBjbWRfYWN0aW9uLAorCQkJCQkJICAgIGRhdGFfYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF9UWF9SQVRFX0NGRzoKKwkJcmV0ID0gbXdpZmlleF9jbWRfdHhfcmF0ZV9jZmcocHJpdiwgY21kX3B0ciwgY21kX2FjdGlvbiwKKwkJCQkJICAgICAgZGF0YV9idWYpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EX1RYUFdSX0NGRzoKKwkJcmV0ID0gbXdpZmlleF9jbWRfdHhfcG93ZXJfY2ZnKGNtZF9wdHIsIGNtZF9hY3Rpb24sCisJCQkJCSAgICAgICBkYXRhX2J1Zik7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfODAyXzExX1BTX01PREVfRU5IOgorCQlyZXQgPSBtd2lmaWV4X2NtZF9lbmhfcG93ZXJfbW9kZShwcml2LCBjbWRfcHRyLCBjbWRfYWN0aW9uLAorCQkJCQkJICh1aW50MTZfdCljbWRfb2lkLCBkYXRhX2J1Zik7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfODAyXzExX0hTX0NGR19FTkg6CisJCXJldCA9IG13aWZpZXhfY21kXzgwMl8xMV9oc19jZmcocHJpdiwgY21kX3B0ciwgY21kX2FjdGlvbiwKKwkJCQkoc3RydWN0IG13aWZpZXhfaHNfY29uZmlnX3BhcmFtICopIGRhdGFfYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF84MDJfMTFfU0NBTjoKKwkJcmV0ID0gbXdpZmlleF9jbWRfODAyXzExX3NjYW4oY21kX3B0ciwgZGF0YV9idWYpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzgwMl8xMV9CR19TQ0FOX1FVRVJZOgorCQlyZXQgPSBtd2lmaWV4X2NtZF84MDJfMTFfYmdfc2Nhbl9xdWVyeShjbWRfcHRyKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF84MDJfMTFfQVNTT0NJQVRFOgorCQlyZXQgPSBtd2lmaWV4X2NtZF84MDJfMTFfYXNzb2NpYXRlKHByaXYsIGNtZF9wdHIsIGRhdGFfYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF84MDJfMTFfREVBVVRIRU5USUNBVEU6CisJCXJldCA9IG13aWZpZXhfY21kXzgwMl8xMV9kZWF1dGhlbnRpY2F0ZShwcml2LCBjbWRfcHRyLAorCQkJCQkJCWRhdGFfYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF84MDJfMTFfQURfSE9DX1NUQVJUOgorCQlyZXQgPSBtd2lmaWV4X2NtZF84MDJfMTFfYWRfaG9jX3N0YXJ0KHByaXYsIGNtZF9wdHIsCisJCQkJCQkgICAgICBkYXRhX2J1Zik7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfODAyXzExX0dFVF9MT0c6CisJCXJldCA9IG13aWZpZXhfY21kXzgwMl8xMV9nZXRfbG9nKGNtZF9wdHIpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzgwMl8xMV9BRF9IT0NfSk9JTjoKKwkJcmV0ID0gbXdpZmlleF9jbWRfODAyXzExX2FkX2hvY19qb2luKHByaXYsIGNtZF9wdHIsCisJCQkJCQkgICAgIGRhdGFfYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF84MDJfMTFfQURfSE9DX1NUT1A6CisJCXJldCA9IG13aWZpZXhfY21kXzgwMl8xMV9hZF9ob2Nfc3RvcChjbWRfcHRyKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF9SU1NJX0lORk86CisJCXJldCA9IG13aWZpZXhfY21kXzgwMl8xMV9yc3NpX2luZm8ocHJpdiwgY21kX3B0ciwgY21kX2FjdGlvbik7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfODAyXzExX1NOTVBfTUlCOgorCQlyZXQgPSBtd2lmaWV4X2NtZF84MDJfMTFfc25tcF9taWIocHJpdiwgY21kX3B0ciwgY21kX2FjdGlvbiwKKwkJCQkJCSAgY21kX29pZCwgZGF0YV9idWYpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzgwMl8xMV9UWF9SQVRFX1FVRVJZOgorCQljbWRfcHRyLT5jb21tYW5kID0KKwkJCWNwdV90b19sZTE2KEhvc3RDbWRfQ01EXzgwMl8xMV9UWF9SQVRFX1FVRVJZKTsKKwkJY21kX3B0ci0+c2l6ZSA9CisJCQljcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGhvc3RfY21kX2RzX3R4X3JhdGVfcXVlcnkpICsKKwkJCQkgICAgU19EU19HRU4pOworCQlwcml2LT50eF9yYXRlID0gMDsKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF9WRVJTSU9OX0VYVDoKKwkJY21kX3B0ci0+Y29tbWFuZCA9IGNwdV90b19sZTE2KGNtZF9ubyk7CisJCWNtZF9wdHItPnBhcmFtcy52ZXJleHQudmVyc2lvbl9zdHJfc2VsID0KKwkJCSh1OCkgKCooKHUzMiAqKSBkYXRhX2J1ZikpOworCQltZW1jcHkoJmNtZF9wdHItPnBhcmFtcywgZGF0YV9idWYsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGhvc3RfY21kX2RzX3ZlcnNpb25fZXh0KSk7CisJCWNtZF9wdHItPnNpemUgPQorCQkJY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc192ZXJzaW9uX2V4dCkgKworCQkJCSAgICBTX0RTX0dFTik7CisJCXJldCA9IDA7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfODAyXzExX1JGX0NIQU5ORUw6CisJCXJldCA9IG13aWZpZXhfY21kXzgwMl8xMV9yZl9jaGFubmVsKHByaXYsIGNtZF9wdHIsIGNtZF9hY3Rpb24sCisJCQkJCQkgICAgZGF0YV9idWYpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EX0ZVTkNfSU5JVDoKKwkJaWYgKHByaXYtPmFkYXB0ZXItPmh3X3N0YXR1cyA9PSBNV0lGSUVYX0hXX1NUQVRVU19SRVNFVCkKKwkJCXByaXYtPmFkYXB0ZXItPmh3X3N0YXR1cyA9IE1XSUZJRVhfSFdfU1RBVFVTX1JFQURZOworCQljbWRfcHRyLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoY21kX25vKTsKKwkJY21kX3B0ci0+c2l6ZSA9IGNwdV90b19sZTE2KFNfRFNfR0VOKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF9GVU5DX1NIVVRET1dOOgorCQlwcml2LT5hZGFwdGVyLT5od19zdGF0dXMgPSBNV0lGSUVYX0hXX1NUQVRVU19SRVNFVDsKKwkJY21kX3B0ci0+Y29tbWFuZCA9IGNwdV90b19sZTE2KGNtZF9ubyk7CisJCWNtZF9wdHItPnNpemUgPSBjcHVfdG9fbGUxNihTX0RTX0dFTik7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfMTFOX0FEREJBX1JFUToKKwkJcmV0ID0gbXdpZmlleF9jbWRfMTFuX2FkZGJhX3JlcShjbWRfcHRyLCBkYXRhX2J1Zik7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfMTFOX0RFTEJBOgorCQlyZXQgPSBtd2lmaWV4X2NtZF8xMW5fZGVsYmEoY21kX3B0ciwgZGF0YV9idWYpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzExTl9BRERCQV9SU1A6CisJCXJldCA9IG13aWZpZXhfY21kXzExbl9hZGRiYV9yc3BfZ2VuKHByaXYsIGNtZF9wdHIsIGRhdGFfYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF84MDJfMTFfS0VZX01BVEVSSUFMOgorCQlyZXQgPSBtd2lmaWV4X2NtZF84MDJfMTFfa2V5X21hdGVyaWFsKHByaXYsIGNtZF9wdHIsCisJCQkJCQljbWRfYWN0aW9uLCBjbWRfb2lkLAorCQkJCQkJZGF0YV9idWYpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzgwMl8xMURfRE9NQUlOX0lORk86CisJCXJldCA9IG13aWZpZXhfY21kXzgwMl8xMWRfZG9tYWluX2luZm8ocHJpdiwgY21kX3B0ciwKKwkJCQkJCWNtZF9hY3Rpb24pOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EX1JFQ09ORklHVVJFX1RYX0JVRkY6CisJCXJldCA9IG13aWZpZXhfY21kX3JlY2ZnX3R4X2J1Zihwcml2LCBjbWRfcHRyLCBjbWRfYWN0aW9uLAorCQkJCQkgICAgICAgZGF0YV9idWYpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EX0FNU0RVX0FHR1JfQ1RSTDoKKwkJcmV0ID0gbXdpZmlleF9jbWRfYW1zZHVfYWdncl9jdHJsKGNtZF9wdHIsIGNtZF9hY3Rpb24sCisJCQkJCQkgIGRhdGFfYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF8xMU5fQ0ZHOgorCQlyZXQgPSBtd2lmaWV4X2NtZF8xMW5fY2ZnKGNtZF9wdHIsIGNtZF9hY3Rpb24sCisJCQkJCSAgZGF0YV9idWYpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EX1dNTV9HRVRfU1RBVFVTOgorCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwKKwkJCSJjbWQ6IFdNTTogV01NX0dFVF9TVEFUVVMgY21kIHNlbnRcbiIpOworCQljbWRfcHRyLT5jb21tYW5kID0gY3B1X3RvX2xlMTYoSG9zdENtZF9DTURfV01NX0dFVF9TVEFUVVMpOworCQljbWRfcHRyLT5zaXplID0KKwkJCWNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZHNfd21tX2dldF9zdGF0dXMpICsKKwkJCQkgICAgU19EU19HRU4pOworCQlyZXQgPSAwOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzgwMl8xMV9JQlNTX0NPQUxFU0NJTkdfU1RBVFVTOgorCQlyZXQgPSBtd2lmaWV4X2NtZF9pYnNzX2NvYWxlc2Npbmdfc3RhdHVzKGNtZF9wdHIsIGNtZF9hY3Rpb24sCisJCQkJCQkJIGRhdGFfYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF9NQUNfUkVHX0FDQ0VTUzoKKwljYXNlIEhvc3RDbWRfQ01EX0JCUF9SRUdfQUNDRVNTOgorCWNhc2UgSG9zdENtZF9DTURfUkZfUkVHX0FDQ0VTUzoKKwljYXNlIEhvc3RDbWRfQ01EX1BNSUNfUkVHX0FDQ0VTUzoKKwljYXNlIEhvc3RDbWRfQ01EX0NBVV9SRUdfQUNDRVNTOgorCWNhc2UgSG9zdENtZF9DTURfODAyXzExX0VFUFJPTV9BQ0NFU1M6CisJCXJldCA9IG13aWZpZXhfY21kX3JlZ19hY2Nlc3MoY21kX3B0ciwgY21kX2FjdGlvbiwgZGF0YV9idWYpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EX1NFVF9CU1NfTU9ERToKKwkJY21kX3B0ci0+Y29tbWFuZCA9IGNwdV90b19sZTE2KGNtZF9ubyk7CisJCWlmIChwcml2LT5ic3NfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJCWNtZF9wdHItPnBhcmFtcy5ic3NfbW9kZS5jb25fdHlwZSA9CisJCQkJQ09OTkVDVElPTl9UWVBFX0FESE9DOworCQllbHNlIGlmIChwcml2LT5ic3NfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJY21kX3B0ci0+cGFyYW1zLmJzc19tb2RlLmNvbl90eXBlID0KKwkJCQlDT05ORUNUSU9OX1RZUEVfSU5GUkE7CisJCWNtZF9wdHItPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0CisJCQkJaG9zdF9jbWRfZHNfc2V0X2Jzc19tb2RlKSArIFNfRFNfR0VOKTsKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkiUFJFUF9DTUQ6IHVua25vd24gY21kLSAlI3hcbiIsIGNtZF9ubyk7CisJCXJldCA9IC0xOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXNzdWVzIGNvbW1hbmRzIHRvIGluaXRpYWxpemUgZmlybXdhcmUuCisgKgorICogVGhpcyBpcyBjYWxsZWQgYWZ0ZXIgZmlybXdhcmUgZG93bmxvYWQgdG8gYnJpbmcgdGhlIGNhcmQgdG8KKyAqIHdvcmtpbmcgc3RhdGUuCisgKgorICogVGhlIGZvbGxvd2luZyBjb21tYW5kcyBhcmUgaXNzdWVkIHNlcXVlbnRpYWxseSAtCisgKiAgICAgIC0gRnVuY3Rpb24gaW5pdCAoZm9yIGZpcnN0IGludGVyZmFjZSBvbmx5KQorICogICAgICAtIFJlYWQgTUFDIGFkZHJlc3MgKGZvciBmaXJzdCBpbnRlcmZhY2Ugb25seSkKKyAqICAgICAgLSBSZWNvbmZpZ3VyZSBUeCBidWZmZXIgc2l6ZSAoZm9yIGZpcnN0IGludGVyZmFjZSBvbmx5KQorICogICAgICAtIEVuYWJsZSBhdXRvIGRlZXAgc2xlZXAgKGZvciBmaXJzdCBpbnRlcmZhY2Ugb25seSkKKyAqICAgICAgLSBHZXQgVHggcmF0ZQorICogICAgICAtIEdldCBUeCBwb3dlcgorICogICAgICAtIFNldCBJQlNTIGNvYWxlc2Npbmcgc3RhdHVzCisgKiAgICAgIC0gU2V0IEFNU0RVIGFnZ3JlZ2F0aW9uIGNvbnRyb2wKKyAqICAgICAgLSBTZXQgMTFkIGNvbnRyb2wKKyAqICAgICAgLSBTZXQgTUFDIGNvbnRyb2wgKHRoaXMgbXVzdCBiZSB0aGUgbGFzdCBjb21tYW5kIHRvIGluaXRpYWxpemUgZmlybXdhcmUpCisgKi8KK2ludCBtd2lmaWV4X3N0YV9pbml0X2NtZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCBmaXJzdF9zdGEpCit7CisJaW50IHJldDsKKwl1MTYgZW5hYmxlID0gdHJ1ZTsKKwlzdHJ1Y3QgbXdpZmlleF9kc18xMW5fYW1zZHVfYWdncl9jdHJsIGFtc2R1X2FnZ3JfY3RybDsKKwlzdHJ1Y3QgbXdpZmlleF9kc19hdXRvX2RzIGF1dG9fZHM7CisJZW51bSBzdGF0ZV8xMWRfdCBzdGF0ZV8xMWQ7CisKKwlpZiAoZmlyc3Rfc3RhKSB7CisKKwkJcmV0ID0gbXdpZmlleF9zZW5kX2NtZF9hc3luYyhwcml2LCBIb3N0Q21kX0NNRF9GVU5DX0lOSVQsCisJCQkJCSAgICAgSG9zdENtZF9BQ1RfR0VOX1NFVCwgMCwgTlVMTCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gLTE7CisJCS8qIFJlYWQgTUFDIGFkZHJlc3MgZnJvbSBIVyAqLworCQlyZXQgPSBtd2lmaWV4X3NlbmRfY21kX2FzeW5jKHByaXYsIEhvc3RDbWRfQ01EX0dFVF9IV19TUEVDLAorCQkJCQkgICAgIEhvc3RDbWRfQUNUX0dFTl9HRVQsIDAsIE5VTEwpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIC0xOworCisJCS8qIFJlY29uZmlndXJlIHR4IGJ1ZiBzaXplICovCisJCXJldCA9IG13aWZpZXhfc2VuZF9jbWRfYXN5bmMocHJpdiwKKwkJCQkJICAgICBIb3N0Q21kX0NNRF9SRUNPTkZJR1VSRV9UWF9CVUZGLAorCQkJCQkgICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsCisJCQkJCSAgICAgJnByaXYtPmFkYXB0ZXItPnR4X2J1Zl9zaXplKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiAtMTsKKworCQkvKiBFbmFibGUgSUVFRSBQUyBieSBkZWZhdWx0ICovCisJCXByaXYtPmFkYXB0ZXItPnBzX21vZGUgPSBNV0lGSUVYXzgwMl8xMV9QT1dFUl9NT0RFX1BTUDsKKwkJcmV0ID0gbXdpZmlleF9zZW5kX2NtZF9hc3luYyhwcml2LAorCQkJCQkgICAgIEhvc3RDbWRfQ01EXzgwMl8xMV9QU19NT0RFX0VOSCwKKwkJCQkJICAgICBFTl9BVVRPX1BTLCBCSVRNQVBfU1RBX1BTLCBOVUxMKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiAtMTsKKwl9CisKKwkvKiBnZXQgdHggcmF0ZSAqLworCXJldCA9IG13aWZpZXhfc2VuZF9jbWRfYXN5bmMocHJpdiwgSG9zdENtZF9DTURfVFhfUkFURV9DRkcsCisJCQkJICAgICBIb3N0Q21kX0FDVF9HRU5fR0VULCAwLCBOVUxMKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLTE7CisJcHJpdi0+ZGF0YV9yYXRlID0gMDsKKworCS8qIGdldCB0eCBwb3dlciAqLworCXJldCA9IG13aWZpZXhfc2VuZF9jbWRfYXN5bmMocHJpdiwgSG9zdENtZF9DTURfVFhQV1JfQ0ZHLAorCQkJCSAgICAgSG9zdENtZF9BQ1RfR0VOX0dFVCwgMCwgTlVMTCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIC0xOworCisJLyogc2V0IGlic3MgY29hbGVzY2luZ19zdGF0dXMgKi8KKwlyZXQgPSBtd2lmaWV4X3NlbmRfY21kX2FzeW5jKHByaXYsCisJCQkJICAgICBIb3N0Q21kX0NNRF84MDJfMTFfSUJTU19DT0FMRVNDSU5HX1NUQVRVUywKKwkJCQkgICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsICZlbmFibGUpOworCWlmIChyZXQpCisJCXJldHVybiAtMTsKKworCW1lbXNldCgmYW1zZHVfYWdncl9jdHJsLCAwLCBzaXplb2YoYW1zZHVfYWdncl9jdHJsKSk7CisJYW1zZHVfYWdncl9jdHJsLmVuYWJsZSA9IHRydWU7CisJLyogU2VuZCByZXF1ZXN0IHRvIGZpcm13YXJlICovCisJcmV0ID0gbXdpZmlleF9zZW5kX2NtZF9hc3luYyhwcml2LCBIb3N0Q21kX0NNRF9BTVNEVV9BR0dSX0NUUkwsCisJCQkJICAgICBIb3N0Q21kX0FDVF9HRU5fU0VULCAwLAorCQkJCSAgICAgKHZvaWQgKikgJmFtc2R1X2FnZ3JfY3RybCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIC0xOworCS8qIE1BQyBDb250cm9sIG11c3QgYmUgdGhlIGxhc3QgY29tbWFuZCBpbiBpbml0X2Z3ICovCisJLyogc2V0IE1BQyBDb250cm9sICovCisJcmV0ID0gbXdpZmlleF9zZW5kX2NtZF9hc3luYyhwcml2LCBIb3N0Q21kX0NNRF9NQUNfQ09OVFJPTCwKKwkJCQkgICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsCisJCQkJICAgICAmcHJpdi0+Y3Vycl9wa3RfZmlsdGVyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLTE7CisKKwlpZiAoZmlyc3Rfc3RhKSB7CisJCS8qIEVuYWJsZSBhdXRvIGRlZXAgc2xlZXAgKi8KKwkJYXV0b19kcy5hdXRvX2RzID0gREVFUF9TTEVFUF9PTjsKKwkJYXV0b19kcy5pZGxlX3RpbWUgPSBERUVQX1NMRUVQX0lETEVfVElNRTsKKwkJcmV0ID0gbXdpZmlleF9zZW5kX2NtZF9hc3luYyhwcml2LAorCQkJCQkgICAgIEhvc3RDbWRfQ01EXzgwMl8xMV9QU19NT0RFX0VOSCwKKwkJCQkJICAgICBFTl9BVVRPX1BTLCBCSVRNQVBfQVVUT19EUywKKwkJCQkJICAgICAmYXV0b19kcyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gLTE7CisJfQorCisJLyogU2VuZCBjbWQgdG8gRlcgdG8gZW5hYmxlL2Rpc2FibGUgMTFEIGZ1bmN0aW9uICovCisJc3RhdGVfMTFkID0gRU5BQkxFXzExRDsKKwlyZXQgPSBtd2lmaWV4X3NlbmRfY21kX2FzeW5jKHByaXYsIEhvc3RDbWRfQ01EXzgwMl8xMV9TTk1QX01JQiwKKwkJCQkgICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIERPVDExRF9JLCAmc3RhdGVfMTFkKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgIjExRDogZmFpbGVkIHRvIGVuYWJsZSAxMURcbiIpOworCisJLyogc2V0IGxhc3RfaW5pdF9jbWQgKi8KKwlwcml2LT5hZGFwdGVyLT5sYXN0X2luaXRfY21kID0gSG9zdENtZF9DTURfODAyXzExX1NOTVBfTUlCOworCXJldCA9IC1FSU5QUk9HUkVTUzsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3N0YV9jbWRyZXNwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3N0YV9jbWRyZXNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA4Zjc2NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvc3RhX2NtZHJlc3AuYwpAQCAtMCwwICsxLDk3MiBAQAorLyoKKyAqIE1hcnZlbGwgV2lyZWxlc3MgTEFOIGRldmljZSBkcml2ZXI6IHN0YXRpb24gY29tbWFuZCByZXNwb25zZSBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQKKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKyAqLworCisjaW5jbHVkZSAiZGVjbC5oIgorI2luY2x1ZGUgImlvY3RsLmgiCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgImZ3LmgiCisjaW5jbHVkZSAibWFpbi5oIgorI2luY2x1ZGUgIndtbS5oIgorI2luY2x1ZGUgIjExbi5oIgorCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNvbW1hbmQgcmVzcG9uc2UgZXJyb3IgY2FzZS4KKyAqCisgKiBGb3Igc2NhbiByZXNwb25zZSBlcnJvciwgdGhlIGZ1bmN0aW9uIGNhbmNlbHMgYWxsIHRoZSBwZW5kaW5nCisgKiBzY2FuIGNvbW1hbmRzIGFuZCBnZW5lcmF0ZXMgYW4gZXZlbnQgdG8gaW5mb3JtIHRoZSBhcHBsaWNhdGlvbnMKKyAqIG9mIHRoZSBzY2FuIGNvbXBsZXRpb24uCisgKgorICogRm9yIFBvd2VyIFNhdmUgY29tbWFuZCBmYWlsdXJlLCB3ZSBkbyBub3QgcmV0cnkgZW50ZXIgUFMKKyAqIGNvbW1hbmQgaW4gY2FzZSBvZiBBZC1ob2MgbW9kZS4KKyAqCisgKiBGb3IgYWxsIG90aGVyIHJlc3BvbnNlIGVycm9ycywgdGhlIGN1cnJlbnQgY29tbWFuZCBidWZmZXIgaXMgZnJlZWQKKyAqIGFuZCByZXR1cm5lZCB0byB0aGUgZnJlZSBjb21tYW5kIHF1ZXVlLgorICovCitzdGF0aWMgdm9pZAorbXdpZmlleF9wcm9jZXNzX2NtZHJlc3BfZXJyb3Ioc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwKQoreworCXN0cnVjdCBjbWRfY3RybF9ub2RlICpjbWRfbm9kZSA9IE5VTEwsICp0bXBfbm9kZTsKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX3BzX21vZGVfZW5oICpwbTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGV2X2VycihhZGFwdGVyLT5kZXYsICJDTURfUkVTUDogY21kICUjeCBlcnJvciwgcmVzdWx0PSUjeFxuIiwKKwkJCXJlc3AtPmNvbW1hbmQsIHJlc3AtPnJlc3VsdCk7CisKKwlpZiAoYWRhcHRlci0+Y3Vycl9jbWQtPndhaXRfcV9lbmFibGVkKQorCQlhZGFwdGVyLT5jbWRfd2FpdF9xLnN0YXR1cyA9IC0xOworCisJc3dpdGNoIChsZTE2X3RvX2NwdShyZXNwLT5jb21tYW5kKSkgeworCWNhc2UgSG9zdENtZF9DTURfODAyXzExX1BTX01PREVfRU5IOgorCQlwbSA9ICZyZXNwLT5wYXJhbXMucHNtb2RlX2VuaDsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJQU19NT0RFX0VOSCBjbWQgZmFpbGVkOiAiCisJCQkJCSJyZXN1bHQ9MHgleCBhY3Rpb249MHglWFxuIiwKKwkJCQlyZXNwLT5yZXN1bHQsIGxlMTZfdG9fY3B1KHBtLT5hY3Rpb24pKTsKKwkJLyogV2UgZG8gbm90IHJlLXRyeSBlbnRlci1wcyBjb21tYW5kIGluIGFkLWhvYyBtb2RlLiAqLworCQlpZiAobGUxNl90b19jcHUocG0tPmFjdGlvbikgPT0gRU5fQVVUT19QUyAmJgorCQkJKGxlMTZfdG9fY3B1KHBtLT5wYXJhbXMucHNfYml0bWFwKSAmIEJJVE1BUF9TVEFfUFMpICYmCisJCQkJcHJpdi0+YnNzX21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCQlhZGFwdGVyLT5wc19tb2RlID0gTVdJRklFWF84MDJfMTFfUE9XRVJfTU9ERV9DQU07CisKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF84MDJfMTFfU0NBTjoKKwkJLyogQ2FuY2VsIGFsbCBwZW5kaW5nIHNjYW4gY29tbWFuZCAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+c2Nhbl9wZW5kaW5nX3FfbG9jaywgZmxhZ3MpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY21kX25vZGUsIHRtcF9ub2RlLAorCQkJCQkgJmFkYXB0ZXItPnNjYW5fcGVuZGluZ19xLCBsaXN0KSB7CisJCQlsaXN0X2RlbCgmY21kX25vZGUtPmxpc3QpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+c2Nhbl9wZW5kaW5nX3FfbG9jaywKKwkJCQkJICAgICAgIGZsYWdzKTsKKwkJCW13aWZpZXhfaW5zZXJ0X2NtZF90b19mcmVlX3EoYWRhcHRlciwgY21kX25vZGUpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnNjYW5fcGVuZGluZ19xX2xvY2ssIGZsYWdzKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5zY2FuX3BlbmRpbmdfcV9sb2NrLCBmbGFncyk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPm13aWZpZXhfY21kX2xvY2ssIGZsYWdzKTsKKwkJYWRhcHRlci0+c2Nhbl9wcm9jZXNzaW5nID0gZmFsc2U7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPm13aWZpZXhfY21kX2xvY2ssIGZsYWdzKTsKKwkJaWYgKHByaXYtPnJlcG9ydF9zY2FuX3Jlc3VsdCkKKwkJCXByaXYtPnJlcG9ydF9zY2FuX3Jlc3VsdCA9IGZhbHNlOworCQlpZiAocHJpdi0+c2Nhbl9wZW5kaW5nX29uX2Jsb2NrKSB7CisJCQlwcml2LT5zY2FuX3BlbmRpbmdfb25fYmxvY2sgPSBmYWxzZTsKKwkJCXVwKCZwcml2LT5hc3luY19zZW0pOworCQl9CisJCWJyZWFrOworCisJY2FzZSBIb3N0Q21kX0NNRF9NQUNfQ09OVFJPTDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJLyogSGFuZGxpbmcgZXJyb3JzIGhlcmUgKi8KKwltd2lmaWV4X2luc2VydF9jbWRfdG9fZnJlZV9xKGFkYXB0ZXIsIGFkYXB0ZXItPmN1cnJfY21kKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5td2lmaWV4X2NtZF9sb2NrLCBmbGFncyk7CisJYWRhcHRlci0+Y3Vycl9jbWQgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPm13aWZpZXhfY21kX2xvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgY29tbWFuZCByZXNwb25zZSBvZiBnZXQgUlNTSSBpbmZvLgorICoKKyAqIEhhbmRsaW5nIGluY2x1ZGVzIGNoYW5naW5nIHRoZSBoZWFkZXIgZmllbGRzIGludG8gQ1BVIGZvcm1hdAorICogYW5kIHNhdmluZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgaW4gZHJpdmVyIC0KKyAqICAgICAgLSBMYXN0IGRhdGEgYW5kIGJlYWNvbiBSU1NJIHZhbHVlCisgKiAgICAgIC0gQXZlcmFnZSBkYXRhIGFuZCBiZWFjb24gUlNTSSB2YWx1ZQorICogICAgICAtIExhc3QgZGF0YSBhbmQgYmVhY29uIE5GIHZhbHVlCisgKiAgICAgIC0gQXZlcmFnZSBkYXRhIGFuZCBiZWFjb24gTkYgdmFsdWUKKyAqCisgKiBUaGUgcGFyYW1ldGVycyBhcmUgc2VuZCB0byB0aGUgYXBwbGljYXRpb24gYXMgd2VsbCwgYWxvbmcgd2l0aAorICogY2FsY3VsYXRlZCBTTlIgdmFsdWVzLgorICovCitzdGF0aWMgaW50IG13aWZpZXhfcmV0XzgwMl8xMV9yc3NpX2luZm8oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkJc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3AsCisJCQkJCXZvaWQgKmRhdGFfYnVmKQoreworCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfcnNzaV9pbmZvX3JzcCAqcnNzaV9pbmZvX3JzcCA9CisJCSZyZXNwLT5wYXJhbXMucnNzaV9pbmZvX3JzcDsKKwlzdHJ1Y3QgbXdpZmlleF9kc19nZXRfc2lnbmFsICpzaWduYWw7CisKKwlwcml2LT5kYXRhX3Jzc2lfbGFzdCA9IGxlMTZfdG9fY3B1KHJzc2lfaW5mb19yc3AtPmRhdGFfcnNzaV9sYXN0KTsKKwlwcml2LT5kYXRhX25mX2xhc3QgPSBsZTE2X3RvX2NwdShyc3NpX2luZm9fcnNwLT5kYXRhX25mX2xhc3QpOworCisJcHJpdi0+ZGF0YV9yc3NpX2F2ZyA9IGxlMTZfdG9fY3B1KHJzc2lfaW5mb19yc3AtPmRhdGFfcnNzaV9hdmcpOworCXByaXYtPmRhdGFfbmZfYXZnID0gbGUxNl90b19jcHUocnNzaV9pbmZvX3JzcC0+ZGF0YV9uZl9hdmcpOworCisJcHJpdi0+YmNuX3Jzc2lfbGFzdCA9IGxlMTZfdG9fY3B1KHJzc2lfaW5mb19yc3AtPmJjbl9yc3NpX2xhc3QpOworCXByaXYtPmJjbl9uZl9sYXN0ID0gbGUxNl90b19jcHUocnNzaV9pbmZvX3JzcC0+YmNuX25mX2xhc3QpOworCisJcHJpdi0+YmNuX3Jzc2lfYXZnID0gbGUxNl90b19jcHUocnNzaV9pbmZvX3JzcC0+YmNuX3Jzc2lfYXZnKTsKKwlwcml2LT5iY25fbmZfYXZnID0gbGUxNl90b19jcHUocnNzaV9pbmZvX3JzcC0+YmNuX25mX2F2Zyk7CisKKwkvKiBOZWVkIHRvIGluZGljYXRlIElPQ1RMIGNvbXBsZXRlICovCisJaWYgKGRhdGFfYnVmKSB7CisJCXNpZ25hbCA9IChzdHJ1Y3QgbXdpZmlleF9kc19nZXRfc2lnbmFsICopIGRhdGFfYnVmOworCQltZW1zZXQoc2lnbmFsLCAwLCBzaXplb2Yoc3RydWN0IG13aWZpZXhfZHNfZ2V0X3NpZ25hbCkpOworCisJCXNpZ25hbC0+c2VsZWN0b3IgPSBBTExfUlNTSV9JTkZPX01BU0s7CisKKwkJLyogUlNTSSAqLworCQlzaWduYWwtPmJjbl9yc3NpX2xhc3QgPSBwcml2LT5iY25fcnNzaV9sYXN0OworCQlzaWduYWwtPmJjbl9yc3NpX2F2ZyA9IHByaXYtPmJjbl9yc3NpX2F2ZzsKKwkJc2lnbmFsLT5kYXRhX3Jzc2lfbGFzdCA9IHByaXYtPmRhdGFfcnNzaV9sYXN0OworCQlzaWduYWwtPmRhdGFfcnNzaV9hdmcgPSBwcml2LT5kYXRhX3Jzc2lfYXZnOworCisJCS8qIFNOUiAqLworCQlzaWduYWwtPmJjbl9zbnJfbGFzdCA9CisJCQlDQUxfU05SKHByaXYtPmJjbl9yc3NpX2xhc3QsIHByaXYtPmJjbl9uZl9sYXN0KTsKKwkJc2lnbmFsLT5iY25fc25yX2F2ZyA9CisJCQlDQUxfU05SKHByaXYtPmJjbl9yc3NpX2F2ZywgcHJpdi0+YmNuX25mX2F2Zyk7CisJCXNpZ25hbC0+ZGF0YV9zbnJfbGFzdCA9CisJCQlDQUxfU05SKHByaXYtPmRhdGFfcnNzaV9sYXN0LCBwcml2LT5kYXRhX25mX2xhc3QpOworCQlzaWduYWwtPmRhdGFfc25yX2F2ZyA9CisJCQlDQUxfU05SKHByaXYtPmRhdGFfcnNzaV9hdmcsIHByaXYtPmRhdGFfbmZfYXZnKTsKKworCQkvKiBORiAqLworCQlzaWduYWwtPmJjbl9uZl9sYXN0ID0gcHJpdi0+YmNuX25mX2xhc3Q7CisJCXNpZ25hbC0+YmNuX25mX2F2ZyA9IHByaXYtPmJjbl9uZl9hdmc7CisJCXNpZ25hbC0+ZGF0YV9uZl9sYXN0ID0gcHJpdi0+ZGF0YV9uZl9sYXN0OworCQlzaWduYWwtPmRhdGFfbmZfYXZnID0gcHJpdi0+ZGF0YV9uZl9hdmc7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNvbW1hbmQgcmVzcG9uc2Ugb2Ygc2V0L2dldCBTTk1QCisgKiBNSUIgcGFyYW1ldGVycy4KKyAqCisgKiBIYW5kbGluZyBpbmNsdWRlcyBjaGFuZ2luZyB0aGUgaGVhZGVyIGZpZWxkcyBpbnRvIENQVSBmb3JtYXQKKyAqIGFuZCBzYXZpbmcgdGhlIHBhcmFtZXRlciBpbiBkcml2ZXIuCisgKgorICogVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBzdXBwb3J0ZWQgLQorICogICAgICAtIEZyYWdtZW50YXRpb24gdGhyZXNob2xkCisgKiAgICAgIC0gUlRTIHRocmVzaG9sZAorICogICAgICAtIFNob3J0IHJldHJ5IGxpbWl0CisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9yZXRfODAyXzExX3NubXBfbWliKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJICAgICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwLAorCQkJCSAgICAgICB2b2lkICpkYXRhX2J1ZikKK3sKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX3NubXBfbWliICpzbWliID0gJnJlc3AtPnBhcmFtcy5zbWliOworCXUxNiBvaWQgPSBsZTE2X3RvX2NwdShzbWliLT5vaWQpOworCXUxNiBxdWVyeV90eXBlID0gbGUxNl90b19jcHUoc21pYi0+cXVlcnlfdHlwZSk7CisJdTMyIHVsX3RlbXA7CisKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IFNOTVBfUkVTUDogb2lkIHZhbHVlID0gJSN4LCIKKwkJCSIgcXVlcnlfdHlwZSA9ICUjeCwgYnVmIHNpemUgPSAlI3hcbiIsCisJCQlvaWQsIHF1ZXJ5X3R5cGUsIGxlMTZfdG9fY3B1KHNtaWItPmJ1Zl9zaXplKSk7CisJaWYgKHF1ZXJ5X3R5cGUgPT0gSG9zdENtZF9BQ1RfR0VOX0dFVCkgeworCQl1bF90ZW1wID0gbGUxNl90b19jcHUoKigoX19sZTE2ICopIChzbWliLT52YWx1ZSkpKTsKKwkJaWYgKGRhdGFfYnVmKQorCQkJKih1MzIgKilkYXRhX2J1ZiA9IHVsX3RlbXA7CisJCXN3aXRjaCAob2lkKSB7CisJCWNhc2UgRlJBR19USFJFU0hfSToKKwkJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJCSJpbmZvOiBTTk1QX1JFU1A6IEZyYWdUaHNkID0ldVxuIiwgdWxfdGVtcCk7CisJCQlicmVhazsKKwkJY2FzZSBSVFNfVEhSRVNIX0k6CisJCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwKKwkJCQkiaW5mbzogU05NUF9SRVNQOiBSVFNUaHNkID0ldVxuIiwgdWxfdGVtcCk7CisJCQlicmVhazsKKwkJY2FzZSBTSE9SVF9SRVRSWV9MSU1fSToKKwkJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJCSJpbmZvOiBTTk1QX1JFU1A6IFR4UmV0cnlDb3VudD0ldVxuIiwgdWxfdGVtcCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNvbW1hbmQgcmVzcG9uc2Ugb2YgZ2V0IGxvZyByZXF1ZXN0CisgKgorICogSGFuZGxpbmcgaW5jbHVkZXMgY2hhbmdpbmcgdGhlIGhlYWRlciBmaWVsZHMgaW50byBDUFUgZm9ybWF0CisgKiBhbmQgc2VuZGluZyB0aGUgcmVjZWl2ZWQgcGFyYW1ldGVycyB0byBhcHBsaWNhdGlvbi4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X3JldF9nZXRfbG9nKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3AsCisJCQkgICAgICAgdm9pZCAqZGF0YV9idWYpCit7CisJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9nZXRfbG9nICpnZXRfbG9nID0KKwkJKHN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfZ2V0X2xvZyAqKSAmcmVzcC0+cGFyYW1zLmdldF9sb2c7CisJc3RydWN0IG13aWZpZXhfZHNfZ2V0X3N0YXRzICpzdGF0czsKKworCWlmIChkYXRhX2J1ZikgeworCQlzdGF0cyA9IChzdHJ1Y3QgbXdpZmlleF9kc19nZXRfc3RhdHMgKikgZGF0YV9idWY7CisJCXN0YXRzLT5tY2FzdF90eF9mcmFtZSA9IGxlMzJfdG9fY3B1KGdldF9sb2ctPm1jYXN0X3R4X2ZyYW1lKTsKKwkJc3RhdHMtPmZhaWxlZCA9IGxlMzJfdG9fY3B1KGdldF9sb2ctPmZhaWxlZCk7CisJCXN0YXRzLT5yZXRyeSA9IGxlMzJfdG9fY3B1KGdldF9sb2ctPnJldHJ5KTsKKwkJc3RhdHMtPm11bHRpX3JldHJ5ID0gbGUzMl90b19jcHUoZ2V0X2xvZy0+bXVsdGlfcmV0cnkpOworCQlzdGF0cy0+ZnJhbWVfZHVwID0gbGUzMl90b19jcHUoZ2V0X2xvZy0+ZnJhbWVfZHVwKTsKKwkJc3RhdHMtPnJ0c19zdWNjZXNzID0gbGUzMl90b19jcHUoZ2V0X2xvZy0+cnRzX3N1Y2Nlc3MpOworCQlzdGF0cy0+cnRzX2ZhaWx1cmUgPSBsZTMyX3RvX2NwdShnZXRfbG9nLT5ydHNfZmFpbHVyZSk7CisJCXN0YXRzLT5hY2tfZmFpbHVyZSA9IGxlMzJfdG9fY3B1KGdldF9sb2ctPmFja19mYWlsdXJlKTsKKwkJc3RhdHMtPnJ4X2ZyYWcgPSBsZTMyX3RvX2NwdShnZXRfbG9nLT5yeF9mcmFnKTsKKwkJc3RhdHMtPm1jYXN0X3J4X2ZyYW1lID0gbGUzMl90b19jcHUoZ2V0X2xvZy0+bWNhc3RfcnhfZnJhbWUpOworCQlzdGF0cy0+ZmNzX2Vycm9yID0gbGUzMl90b19jcHUoZ2V0X2xvZy0+ZmNzX2Vycm9yKTsKKwkJc3RhdHMtPnR4X2ZyYW1lID0gbGUzMl90b19jcHUoZ2V0X2xvZy0+dHhfZnJhbWUpOworCQlzdGF0cy0+d2VwX2ljdl9lcnJvclswXSA9CisJCQlsZTMyX3RvX2NwdShnZXRfbG9nLT53ZXBfaWN2X2Vycl9jbnRbMF0pOworCQlzdGF0cy0+d2VwX2ljdl9lcnJvclsxXSA9CisJCQlsZTMyX3RvX2NwdShnZXRfbG9nLT53ZXBfaWN2X2Vycl9jbnRbMV0pOworCQlzdGF0cy0+d2VwX2ljdl9lcnJvclsyXSA9CisJCQlsZTMyX3RvX2NwdShnZXRfbG9nLT53ZXBfaWN2X2Vycl9jbnRbMl0pOworCQlzdGF0cy0+d2VwX2ljdl9lcnJvclszXSA9CisJCQlsZTMyX3RvX2NwdShnZXRfbG9nLT53ZXBfaWN2X2Vycl9jbnRbM10pOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjb21tYW5kIHJlc3BvbnNlIG9mIHNldC9nZXQgVHggcmF0ZQorICogY29uZmlndXJhdGlvbnMuCisgKgorICogSGFuZGxpbmcgaW5jbHVkZXMgY2hhbmdpbmcgdGhlIGhlYWRlciBmaWVsZHMgaW50byBDUFUgZm9ybWF0CisgKiBhbmQgc2F2aW5nIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBpbiBkcml2ZXIgLQorICogICAgICAtIERTU1MgcmF0ZSBiaXRtYXAKKyAqICAgICAgLSBPRkRNIHJhdGUgYml0bWFwCisgKiAgICAgIC0gSFQgTUNTIHJhdGUgYml0bWFwcworICoKKyAqIEJhc2VkIG9uIHRoZSBuZXcgcmF0ZSBiaXRtYXBzLCB0aGUgZnVuY3Rpb24gcmUtZXZhbHVhdGVzIGlmCisgKiBhdXRvIGRhdGEgcmF0ZSBoYXMgYmVlbiBhY3RpdmF0ZWQuIElmIG5vdCwgaXQgc2VuZHMgYW5vdGhlcgorICogcXVlcnkgdG8gdGhlIGZpcm13YXJlIHRvIGdldCB0aGUgY3VycmVudCBUeCBkYXRhIHJhdGUgYW5kIHVwZGF0ZXMKKyAqIHRoZSBkcml2ZXIgdmFsdWUuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9yZXRfdHhfcmF0ZV9jZmcoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqcmVzcCwKKwkJCQkgICB2b2lkICpkYXRhX2J1ZikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9yYXRlX2NmZyAqZHNfcmF0ZTsKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfdHhfcmF0ZV9jZmcgKnJhdGVfY2ZnID0gJnJlc3AtPnBhcmFtcy50eF9yYXRlX2NmZzsKKwlzdHJ1Y3QgbXdpZmlleF9yYXRlX3Njb3BlICpyYXRlX3Njb3BlOworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciAqaGVhZDsKKwl1MTYgdGx2LCB0bHZfYnVmX2xlbjsKKwl1OCAqdGx2X2J1ZjsKKwl1MzIgaTsKKwlpbnQgcmV0ID0gMDsKKworCXRsdl9idWYgPSAodTggKikgKCh1OCAqKSByYXRlX2NmZykgKworCQkJc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc190eF9yYXRlX2NmZyk7CisJdGx2X2J1Zl9sZW4gPSAqKHUxNiAqKSAodGx2X2J1ZiArIHNpemVvZih1MTYpKTsKKworCXdoaWxlICh0bHZfYnVmICYmIHRsdl9idWZfbGVuID4gMCkgeworCQl0bHYgPSAoKnRsdl9idWYpOworCQl0bHYgPSB0bHYgfCAoKih0bHZfYnVmICsgMSkgPDwgOCk7CisKKwkJc3dpdGNoICh0bHYpIHsKKwkJY2FzZSBUTFZfVFlQRV9SQVRFX1NDT1BFOgorCQkJcmF0ZV9zY29wZSA9IChzdHJ1Y3QgbXdpZmlleF9yYXRlX3Njb3BlICopIHRsdl9idWY7CisJCQlwcml2LT5iaXRtYXBfcmF0ZXNbMF0gPQorCQkJCWxlMTZfdG9fY3B1KHJhdGVfc2NvcGUtPmhyX2Rzc3NfcmF0ZV9iaXRtYXApOworCQkJcHJpdi0+Yml0bWFwX3JhdGVzWzFdID0KKwkJCQlsZTE2X3RvX2NwdShyYXRlX3Njb3BlLT5vZmRtX3JhdGVfYml0bWFwKTsKKwkJCWZvciAoaSA9IDA7CisJCQkgICAgIGkgPAorCQkJICAgICBzaXplb2YocmF0ZV9zY29wZS0+aHRfbWNzX3JhdGVfYml0bWFwKSAvCisJCQkgICAgIHNpemVvZih1MTYpOyBpKyspCisJCQkJcHJpdi0+Yml0bWFwX3JhdGVzWzIgKyBpXSA9CisJCQkJCWxlMTZfdG9fY3B1KHJhdGVfc2NvcGUtPgorCQkJCQkJICAgIGh0X21jc19yYXRlX2JpdG1hcFtpXSk7CisJCQlicmVhazsKKwkJCS8qIEFkZCBSQVRFX0RST1AgdGx2IGhlcmUgKi8KKwkJfQorCisJCWhlYWQgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyICopIHRsdl9idWY7CisJCXRsdl9idWYgKz0gbGUxNl90b19jcHUoaGVhZC0+bGVuKSArIHNpemVvZigqaGVhZCk7CisJCXRsdl9idWZfbGVuIC09IGxlMTZfdG9fY3B1KGhlYWQtPmxlbik7CisJfQorCisJcHJpdi0+aXNfZGF0YV9yYXRlX2F1dG8gPSBtd2lmaWV4X2lzX3JhdGVfYXV0byhwcml2KTsKKworCWlmIChwcml2LT5pc19kYXRhX3JhdGVfYXV0bykKKwkJcHJpdi0+ZGF0YV9yYXRlID0gMDsKKwllbHNlCisJCXJldCA9IG13aWZpZXhfc2VuZF9jbWRfYXN5bmMocHJpdiwKKwkJCQkJICBIb3N0Q21kX0NNRF84MDJfMTFfVFhfUkFURV9RVUVSWSwKKwkJCQkJICBIb3N0Q21kX0FDVF9HRU5fR0VULCAwLCBOVUxMKTsKKworCWlmIChkYXRhX2J1ZikgeworCQlkc19yYXRlID0gKHN0cnVjdCBtd2lmaWV4X3JhdGVfY2ZnICopIGRhdGFfYnVmOworCQlpZiAobGUxNl90b19jcHUocmF0ZV9jZmctPmFjdGlvbikgPT0gSG9zdENtZF9BQ1RfR0VOX0dFVCkgeworCQkJaWYgKHByaXYtPmlzX2RhdGFfcmF0ZV9hdXRvKSB7CisJCQkJZHNfcmF0ZS0+aXNfcmF0ZV9hdXRvID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJZHNfcmF0ZS0+cmF0ZSA9IG13aWZpZXhfZ2V0X3JhdGVfaW5kZXgocHJpdi0+CisJCQkJCQkJICAgICAgIGJpdG1hcF9yYXRlcywKKwkJCQkJCQkgICAgICAgc2l6ZW9mKHByaXYtPgorCQkJCQkJCSAgICAgICBiaXRtYXBfcmF0ZXMpKTsKKwkJCQlpZiAoZHNfcmF0ZS0+cmF0ZSA+PQorCQkJCSAgICBNV0lGSUVYX1JBVEVfQklUTUFQX09GRE0wCisJCQkJICAgICYmIGRzX3JhdGUtPnJhdGUgPD0KKwkJCQkgICAgTVdJRklFWF9SQVRFX0JJVE1BUF9PRkRNNykKKwkJCQkJZHNfcmF0ZS0+cmF0ZSAtPQorCQkJCQkJKE1XSUZJRVhfUkFURV9CSVRNQVBfT0ZETTAgLQorCQkJCQkJIE1XSUZJRVhfUkFURV9JTkRFWF9PRkRNMCk7CisJCQkJaWYgKGRzX3JhdGUtPnJhdGUgPj0KKwkJCQkgICAgTVdJRklFWF9SQVRFX0JJVE1BUF9NQ1MwCisJCQkJICAgICYmIGRzX3JhdGUtPnJhdGUgPD0KKwkJCQkgICAgTVdJRklFWF9SQVRFX0JJVE1BUF9NQ1MxMjcpCisJCQkJCWRzX3JhdGUtPnJhdGUgLT0KKwkJCQkJCShNV0lGSUVYX1JBVEVfQklUTUFQX01DUzAgLQorCQkJCQkJIE1XSUZJRVhfUkFURV9JTkRFWF9NQ1MwKTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNvbW1hbmQgcmVzcG9uc2Ugb2YgZ2V0IFR4IHBvd2VyIGxldmVsLgorICoKKyAqIEhhbmRsaW5nIGluY2x1ZGVzIHNhdmluZyB0aGUgbWF4aW11bSBhbmQgbWluaW11bSBUeCBwb3dlciBsZXZlbHMKKyAqIGluIGRyaXZlciwgYXMgd2VsbCBhcyBzZW5kaW5nIHRoZSB2YWx1ZXMgdG8gdXNlci4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X2dldF9wb3dlcl9sZXZlbChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB2b2lkICpkYXRhX2J1ZikKK3sKKwlpbnQgbGVuZ3RoLCBtYXhfcG93ZXIgPSAtMSwgbWluX3Bvd2VyID0gLTE7CisJc3RydWN0IG13aWZpZXhfdHlwZXNfcG93ZXJfZ3JvdXAgKnBnX3Rsdl9oZHI7CisJc3RydWN0IG13aWZpZXhfcG93ZXJfZ3JvdXAgKnBnOworCisJaWYgKGRhdGFfYnVmKSB7CisJCXBnX3Rsdl9oZHIgPQorCQkJKHN0cnVjdCBtd2lmaWV4X3R5cGVzX3Bvd2VyX2dyb3VwICopICgodTggKikgZGF0YV9idWYKKwkJCQkJKyBzaXplb2Yoc3RydWN0IGhvc3RfY21kX2RzX3R4cHdyX2NmZykpOworCQlwZyA9IChzdHJ1Y3QgbXdpZmlleF9wb3dlcl9ncm91cCAqKSAoKHU4ICopIHBnX3Rsdl9oZHIgKworCQkJCXNpemVvZihzdHJ1Y3QgbXdpZmlleF90eXBlc19wb3dlcl9ncm91cCkpOworCQlsZW5ndGggPSBwZ190bHZfaGRyLT5sZW5ndGg7CisJCWlmIChsZW5ndGggPiAwKSB7CisJCQltYXhfcG93ZXIgPSBwZy0+cG93ZXJfbWF4OworCQkJbWluX3Bvd2VyID0gcGctPnBvd2VyX21pbjsKKwkJCWxlbmd0aCAtPSBzaXplb2Yoc3RydWN0IG13aWZpZXhfcG93ZXJfZ3JvdXApOworCQl9CisJCXdoaWxlIChsZW5ndGgpIHsKKwkJCXBnKys7CisJCQlpZiAobWF4X3Bvd2VyIDwgcGctPnBvd2VyX21heCkKKwkJCQltYXhfcG93ZXIgPSBwZy0+cG93ZXJfbWF4OworCisJCQlpZiAobWluX3Bvd2VyID4gcGctPnBvd2VyX21pbikKKwkJCQltaW5fcG93ZXIgPSBwZy0+cG93ZXJfbWluOworCisJCQlsZW5ndGggLT0gc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X3Bvd2VyX2dyb3VwKTsKKwkJfQorCQlpZiAocGdfdGx2X2hkci0+bGVuZ3RoID4gMCkgeworCQkJcHJpdi0+bWluX3R4X3Bvd2VyX2xldmVsID0gKHU4KSBtaW5fcG93ZXI7CisJCQlwcml2LT5tYXhfdHhfcG93ZXJfbGV2ZWwgPSAodTgpIG1heF9wb3dlcjsKKwkJfQorCX0gZWxzZSB7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgY29tbWFuZCByZXNwb25zZSBvZiBzZXQvZ2V0IFR4IHBvd2VyCisgKiBjb25maWd1cmF0aW9ucy4KKyAqCisgKiBIYW5kbGluZyBpbmNsdWRlcyBjaGFuZ2luZyB0aGUgaGVhZGVyIGZpZWxkcyBpbnRvIENQVSBmb3JtYXQKKyAqIGFuZCBzYXZpbmcgdGhlIGN1cnJlbnQgVHggcG93ZXIgbGV2ZWwgaW4gZHJpdmVyLgorICovCitzdGF0aWMgaW50IG13aWZpZXhfcmV0X3R4X3Bvd2VyX2NmZyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCSAgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqcmVzcCwKKwkJCQkgICAgdm9pZCAqZGF0YV9idWYpCit7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IGhvc3RfY21kX2RzX3R4cHdyX2NmZyAqdHhwX2NmZyA9ICZyZXNwLT5wYXJhbXMudHhwX2NmZzsKKwlzdHJ1Y3QgbXdpZmlleF90eXBlc19wb3dlcl9ncm91cCAqcGdfdGx2X2hkcjsKKwlzdHJ1Y3QgbXdpZmlleF9wb3dlcl9ncm91cCAqcGc7CisJdTE2IGFjdGlvbiA9IGxlMTZfdG9fY3B1KHR4cF9jZmctPmFjdGlvbik7CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgSG9zdENtZF9BQ1RfR0VOX0dFVDoKKwkJeworCQkJcGdfdGx2X2hkciA9CisJCQkJKHN0cnVjdCBtd2lmaWV4X3R5cGVzX3Bvd2VyX2dyb3VwICopICgodTggKikKKwkJCQkJCXR4cF9jZmcgKworCQkJCQkJc2l6ZW9mCisJCQkJCQkoc3RydWN0CisJCQkJCQkgaG9zdF9jbWRfZHNfdHhwd3JfY2ZnKSk7CisJCQlwZyA9IChzdHJ1Y3QgbXdpZmlleF9wb3dlcl9ncm91cCAqKSAoKHU4ICopCisJCQkJCQlwZ190bHZfaGRyICsKKwkJCQkJCXNpemVvZihzdHJ1Y3QKKwkJCQkJCW13aWZpZXhfdHlwZXNfcG93ZXJfZ3JvdXApKTsKKwkJCWlmIChhZGFwdGVyLT5od19zdGF0dXMgPT0KKwkJCSAgICBNV0lGSUVYX0hXX1NUQVRVU19JTklUSUFMSVpJTkcpCisJCQkJbXdpZmlleF9nZXRfcG93ZXJfbGV2ZWwocHJpdiwgdHhwX2NmZyk7CisJCQlwcml2LT50eF9wb3dlcl9sZXZlbCA9ICh1MTYpIHBnLT5wb3dlcl9taW47CisJCQlicmVhazsKKwkJfQorCWNhc2UgSG9zdENtZF9BQ1RfR0VOX1NFVDoKKwkJaWYgKGxlMzJfdG9fY3B1KHR4cF9jZmctPm1vZGUpKSB7CisJCQlwZ190bHZfaGRyID0KKwkJCQkoc3RydWN0IG13aWZpZXhfdHlwZXNfcG93ZXJfZ3JvdXAgKikgKCh1OCAqKQorCQkJCQkJdHhwX2NmZyArCisJCQkJCQlzaXplb2YKKwkJCQkJCShzdHJ1Y3QKKwkJCQkJCSBob3N0X2NtZF9kc190eHB3cl9jZmcpKTsKKwkJCXBnID0gKHN0cnVjdCBtd2lmaWV4X3Bvd2VyX2dyb3VwICopICgodTggKikgcGdfdGx2X2hkcgorCQkJCQkJKworCQkJCQkJc2l6ZW9mKHN0cnVjdAorCQkJCQkJbXdpZmlleF90eXBlc19wb3dlcl9ncm91cCkpOworCQkJaWYgKHBnLT5wb3dlcl9tYXggPT0gcGctPnBvd2VyX21pbikKKwkJCQlwcml2LT50eF9wb3dlcl9sZXZlbCA9ICh1MTYpIHBnLT5wb3dlcl9taW47CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJDTURfUkVTUDogdW5rbm93biBjbWQgYWN0aW9uICVkXG4iLAorCQkJCWFjdGlvbik7CisJCXJldHVybiAwOworCX0KKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwKKwkJImluZm86IEN1cnJlbnQgVHhQb3dlciBMZXZlbCA9ICVkLCBNYXggUG93ZXI9JWQsIE1pbiBQb3dlcj0lZFxuIiwKKwkgICAgICAgcHJpdi0+dHhfcG93ZXJfbGV2ZWwsIHByaXYtPm1heF90eF9wb3dlcl9sZXZlbCwKKwkgICAgICAgcHJpdi0+bWluX3R4X3Bvd2VyX2xldmVsKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjb21tYW5kIHJlc3BvbnNlIG9mIHNldC9nZXQgTUFDIGFkZHJlc3MuCisgKgorICogSGFuZGxpbmcgaW5jbHVkZXMgc2F2aW5nIHRoZSBNQUMgYWRkcmVzcyBpbiBkcml2ZXIuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9yZXRfODAyXzExX21hY19hZGRyZXNzKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJCSAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3ApCit7CisJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9tYWNfYWRkcmVzcyAqY21kX21hY19hZGRyID0KKwkJJnJlc3AtPnBhcmFtcy5tYWNfYWRkcjsKKworCW1lbWNweShwcml2LT5jdXJyX2FkZHIsIGNtZF9tYWNfYWRkci0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKKworCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkiaW5mbzogc2V0IG1hYyBhZGRyZXNzOiAlcE1cbiIsIHByaXYtPmN1cnJfYWRkcik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgY29tbWFuZCByZXNwb25zZSBvZiBzZXQvZ2V0IE1BQyBtdWx0aWNhc3QKKyAqIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9yZXRfbWFjX211bHRpY2FzdF9hZHIoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkJIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwKQoreworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjb21tYW5kIHJlc3BvbnNlIG9mIGdldCBUeCByYXRlIHF1ZXJ5LgorICoKKyAqIEhhbmRsaW5nIGluY2x1ZGVzIGNoYW5naW5nIHRoZSBoZWFkZXIgZmllbGRzIGludG8gQ1BVIGZvcm1hdAorICogYW5kIHNhdmluZyB0aGUgVHggcmF0ZSBhbmQgSFQgaW5mb3JtYXRpb24gcGFyYW1ldGVycyBpbiBkcml2ZXIuCisgKgorICogQm90aCByYXRlIGNvbmZpZ3VyYXRpb24gYW5kIGN1cnJlbnQgZGF0YSByYXRlIGNhbiBiZSByZXRyaWV2ZWQKKyAqIHdpdGggdGhpcyByZXF1ZXN0LgorICovCitzdGF0aWMgaW50IG13aWZpZXhfcmV0XzgwMl8xMV90eF9yYXRlX3F1ZXJ5KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJCSAgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqcmVzcCkKK3sKKwlwcml2LT50eF9yYXRlID0gcmVzcC0+cGFyYW1zLnR4X3JhdGUudHhfcmF0ZTsKKwlwcml2LT50eF9odGluZm8gPSByZXNwLT5wYXJhbXMudHhfcmF0ZS5odF9pbmZvOworCWlmICghcHJpdi0+aXNfZGF0YV9yYXRlX2F1dG8pCisJCXByaXYtPmRhdGFfcmF0ZSA9CisJCQltd2lmaWV4X2luZGV4X3RvX2RhdGFfcmF0ZShwcml2LT50eF9yYXRlLAorCQkJCQkJICAgcHJpdi0+dHhfaHRpbmZvKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjb21tYW5kIHJlc3BvbnNlIG9mIGEgZGVhdXRoZW50aWNhdGUKKyAqIGNvbW1hbmQuCisgKgorICogSWYgdGhlIGRlYXV0aGVudGljYXRlZCBNQUMgbWF0Y2hlcyB0aGUgY3VycmVudCBCU1MgTUFDLCB0aGUgY29ubmVjdGlvbgorICogc3RhdGUgaXMgcmVzZXQuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9yZXRfODAyXzExX2RlYXV0aGVudGljYXRlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJCSAgICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3ApCit7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisKKwlhZGFwdGVyLT5kYmcubnVtX2NtZF9kZWF1dGgrKzsKKwlpZiAoIW1lbWNtcChyZXNwLT5wYXJhbXMuZGVhdXRoLm1hY19hZGRyLAorCQkgICAgJnByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5tYWNfYWRkcmVzcywKKwkJICAgIHNpemVvZihyZXNwLT5wYXJhbXMuZGVhdXRoLm1hY19hZGRyKSkpCisJCW13aWZpZXhfcmVzZXRfY29ubmVjdF9zdGF0ZShwcml2KTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjb21tYW5kIHJlc3BvbnNlIG9mIGFkLWhvYyBzdG9wLgorICoKKyAqIFRoZSBmdW5jdGlvbiByZXNldHMgdGhlIGNvbm5lY3Rpb24gc3RhdGUgaW4gZHJpdmVyLgorICovCitzdGF0aWMgaW50IG13aWZpZXhfcmV0XzgwMl8xMV9hZF9ob2Nfc3RvcChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCQkgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwKQoreworCW13aWZpZXhfcmVzZXRfY29ubmVjdF9zdGF0ZShwcml2KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgY29tbWFuZCByZXNwb25zZSBvZiBzZXQvZ2V0IGtleSBtYXRlcmlhbC4KKyAqCisgKiBIYW5kbGluZyBpbmNsdWRlcyB1cGRhdGluZyB0aGUgZHJpdmVyIHBhcmFtZXRlcnMgdG8gcmVmbGVjdCB0aGUKKyAqIGNoYW5nZXMuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9yZXRfODAyXzExX2tleV9tYXRlcmlhbChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCQkgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqcmVzcCkKK3sKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2tleV9tYXRlcmlhbCAqa2V5ID0KKwkJJnJlc3AtPnBhcmFtcy5rZXlfbWF0ZXJpYWw7CisKKwlpZiAobGUxNl90b19jcHUoa2V5LT5hY3Rpb24pID09IEhvc3RDbWRfQUNUX0dFTl9TRVQpIHsKKwkJaWYgKChsZTE2X3RvX2NwdShrZXktPmtleV9wYXJhbV9zZXQua2V5X2luZm8pICYgS0VZX01DQVNUKSkgeworCQkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiBrZXk6IEdUSyBpcyBzZXRcbiIpOworCQkJcHJpdi0+d3BhX2lzX2d0a19zZXQgPSB0cnVlOworCQkJcHJpdi0+c2Nhbl9ibG9jayA9IGZhbHNlOworCQl9CisJfQorCisJbWVtc2V0KHByaXYtPmFlc19rZXkua2V5X3BhcmFtX3NldC5rZXksIDAsCisJICAgICAgIHNpemVvZihrZXktPmtleV9wYXJhbV9zZXQua2V5KSk7CisJcHJpdi0+YWVzX2tleS5rZXlfcGFyYW1fc2V0LmtleV9sZW4gPSBrZXktPmtleV9wYXJhbV9zZXQua2V5X2xlbjsKKwltZW1jcHkocHJpdi0+YWVzX2tleS5rZXlfcGFyYW1fc2V0LmtleSwga2V5LT5rZXlfcGFyYW1fc2V0LmtleSwKKwkgICAgICAgbGUxNl90b19jcHUocHJpdi0+YWVzX2tleS5rZXlfcGFyYW1fc2V0LmtleV9sZW4pKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjb21tYW5kIHJlc3BvbnNlIG9mIGdldCAxMWQgZG9tYWluIGluZm9ybWF0aW9uLgorICovCitzdGF0aWMgaW50IG13aWZpZXhfcmV0XzgwMl8xMWRfZG9tYWluX2luZm8oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkJICAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKnJlc3ApCit7CisJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMWRfZG9tYWluX2luZm9fcnNwICpkb21haW5faW5mbyA9CisJCSZyZXNwLT5wYXJhbXMuZG9tYWluX2luZm9fcmVzcDsKKwlzdHJ1Y3QgbXdpZmlleF9pZXR5cGVzX2RvbWFpbl9wYXJhbV9zZXQgKmRvbWFpbiA9ICZkb21haW5faW5mby0+ZG9tYWluOworCXUxNiBhY3Rpb24gPSBsZTE2X3RvX2NwdShkb21haW5faW5mby0+YWN0aW9uKTsKKwl1OCBub19vZl90cmlwbGV0OworCisJbm9fb2ZfdHJpcGxldCA9ICh1OCkgKChsZTE2X3RvX2NwdShkb21haW4tPmhlYWRlci5sZW4pIC0KKwkJCQkJSUVFRTgwMjExX0NPVU5UUllfU1RSSU5HX0xFTikgLworCQkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NvdW50cnlfaWVfdHJpcGxldCkpOworCisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiAxMUQgRG9tYWluIEluZm8gUmVzcDoiCisJCQkiIG5vX29mX3RyaXBsZXQ9JWRcbiIsIG5vX29mX3RyaXBsZXQpOworCisJaWYgKG5vX29mX3RyaXBsZXQgPiBNV0lGSUVYX01BWF9UUklQTEVUXzgwMl8xMUQpIHsKKwkJZGV2X3dhcm4ocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJIjExRDogaW52YWxpZCBudW1iZXIgb2YgdHJpcGxldHMgJWQgIgorCQkJInJldHVybmVkISFcbiIsIG5vX29mX3RyaXBsZXQpOworCQlyZXR1cm4gLTE7CisJfQorCisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIEhvc3RDbWRfQUNUX0dFTl9TRVQ6ICAvKiBQcm9jIFNldCBBY3Rpb24gKi8KKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0FDVF9HRU5fR0VUOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwKKwkJCSIxMUQ6IGludmFsaWQgYWN0aW9uOiVkXG4iLCBkb21haW5faW5mby0+YWN0aW9uKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjb21tYW5kIHJlc3BvbnNlIG9mIGdldCBSRiBjaGFubmVsLgorICoKKyAqIEhhbmRsaW5nIGluY2x1ZGVzIGNoYW5naW5nIHRoZSBoZWFkZXIgZmllbGRzIGludG8gQ1BVIGZvcm1hdAorICogYW5kIHNhdmluZyB0aGUgbmV3IGNoYW5uZWwgaW4gZHJpdmVyLgorICovCitzdGF0aWMgaW50IG13aWZpZXhfcmV0XzgwMl8xMV9yZl9jaGFubmVsKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJCSBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqcmVzcCwKKwkJCQkJIHZvaWQgKmRhdGFfYnVmKQoreworCXN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfcmZfY2hhbm5lbCAqcmZfY2hhbm5lbCA9CisJCSZyZXNwLT5wYXJhbXMucmZfY2hhbm5lbDsKKwl1MTYgbmV3X2NoYW5uZWwgPSBsZTE2X3RvX2NwdShyZl9jaGFubmVsLT5jdXJyZW50X2NoYW5uZWwpOworCisJaWYgKHByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5jaGFubmVsICE9IG5ld19jaGFubmVsKSB7CisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiY21kOiBDaGFubmVsIFN3aXRjaDogJWQgdG8gJWRcbiIsCisJCSAgICAgICBwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IuY2hhbm5lbCwKKwkJICAgICAgIG5ld19jaGFubmVsKTsKKwkJLyogVXBkYXRlIHRoZSBjaGFubmVsIGFnYWluICovCisJCXByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5jaGFubmVsID0gbmV3X2NoYW5uZWw7CisJfQorCWlmIChkYXRhX2J1ZikKKwkJKigodTE2ICopZGF0YV9idWYpID0gbmV3X2NoYW5uZWw7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgY29tbWFuZCByZXNwb25zZSBvZiBnZXQgZXh0ZW5kZWQgdmVyc2lvbi4KKyAqCisgKiBIYW5kbGluZyBpbmNsdWRlcyBmb3JtaW5nIHRoZSBleHRlbmRlZCB2ZXJzaW9uIHN0cmluZyBhbmQgc2VuZGluZyBpdAorICogdG8gYXBwbGljYXRpb24uCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9yZXRfdmVyX2V4dChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICAgIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwLAorCQkJICAgICAgIHZvaWQgKmRhdGFfYnVmKQoreworCXN0cnVjdCBob3N0X2NtZF9kc192ZXJzaW9uX2V4dCAqdmVyX2V4dCA9ICZyZXNwLT5wYXJhbXMudmVyZXh0OworCXN0cnVjdCBob3N0X2NtZF9kc192ZXJzaW9uX2V4dCAqdmVyc2lvbl9leHQ7CisKKwlpZiAoZGF0YV9idWYpIHsKKwkJdmVyc2lvbl9leHQgPSAoc3RydWN0IGhvc3RfY21kX2RzX3ZlcnNpb25fZXh0ICopZGF0YV9idWY7CisJCXZlcnNpb25fZXh0LT52ZXJzaW9uX3N0cl9zZWwgPSB2ZXJfZXh0LT52ZXJzaW9uX3N0cl9zZWw7CisJCW1lbWNweSh2ZXJzaW9uX2V4dC0+dmVyc2lvbl9zdHIsIHZlcl9leHQtPnZlcnNpb25fc3RyLAorCQkgICAgICAgc2l6ZW9mKGNoYXIpICogMTI4KTsKKwkJbWVtY3B5KHByaXYtPnZlcnNpb25fc3RyLCB2ZXJfZXh0LT52ZXJzaW9uX3N0ciwgMTI4KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNvbW1hbmQgcmVzcG9uc2Ugb2YgcmVnaXN0ZXIgYWNjZXNzLgorICoKKyAqIFRoZSByZWdpc3RlciB2YWx1ZSBhbmQgb2Zmc2V0IGFyZSByZXR1cm5lZCB0byB0aGUgdXNlci4gRm9yIEVFUFJPTQorICogYWNjZXNzLCB0aGUgYnl0ZSBjb3VudCBpcyBhbHNvIHJldHVybmVkLgorICovCitzdGF0aWMgaW50IG13aWZpZXhfcmV0X3JlZ19hY2Nlc3ModTE2IHR5cGUsIHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwLAorCQkJCSAgdm9pZCAqZGF0YV9idWYpCit7CisJc3RydWN0IG13aWZpZXhfZHNfcmVnX3J3ICpyZWdfcnc7CisJc3RydWN0IG13aWZpZXhfZHNfcmVhZF9lZXByb20gKmVlcHJvbTsKKworCWlmIChkYXRhX2J1ZikgeworCQlyZWdfcncgPSAoc3RydWN0IG13aWZpZXhfZHNfcmVnX3J3ICopIGRhdGFfYnVmOworCQllZXByb20gPSAoc3RydWN0IG13aWZpZXhfZHNfcmVhZF9lZXByb20gKikgZGF0YV9idWY7CisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIEhvc3RDbWRfQ01EX01BQ19SRUdfQUNDRVNTOgorCQkJeworCQkJCXN0cnVjdCBob3N0X2NtZF9kc19tYWNfcmVnX2FjY2VzcyAqcmVnOworCQkJCXJlZyA9IChzdHJ1Y3QgaG9zdF9jbWRfZHNfbWFjX3JlZ19hY2Nlc3MgKikKKwkJCQkJJnJlc3AtPnBhcmFtcy5tYWNfcmVnOworCQkJCXJlZ19ydy0+b2Zmc2V0ID0gY3B1X3RvX2xlMzIoCisJCQkJCSh1MzIpIGxlMTZfdG9fY3B1KHJlZy0+b2Zmc2V0KSk7CisJCQkJcmVnX3J3LT52YWx1ZSA9IHJlZy0+dmFsdWU7CisJCQkJYnJlYWs7CisJCQl9CisJCWNhc2UgSG9zdENtZF9DTURfQkJQX1JFR19BQ0NFU1M6CisJCQl7CisJCQkJc3RydWN0IGhvc3RfY21kX2RzX2JicF9yZWdfYWNjZXNzICpyZWc7CisJCQkJcmVnID0gKHN0cnVjdCBob3N0X2NtZF9kc19iYnBfcmVnX2FjY2VzcyAqKQorCQkJCQkmcmVzcC0+cGFyYW1zLmJicF9yZWc7CisJCQkJcmVnX3J3LT5vZmZzZXQgPSBjcHVfdG9fbGUzMigKKwkJCQkJKHUzMikgbGUxNl90b19jcHUocmVnLT5vZmZzZXQpKTsKKwkJCQlyZWdfcnctPnZhbHVlID0gY3B1X3RvX2xlMzIoKHUzMikgcmVnLT52YWx1ZSk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJY2FzZSBIb3N0Q21kX0NNRF9SRl9SRUdfQUNDRVNTOgorCQkJeworCQkJCXN0cnVjdCBob3N0X2NtZF9kc19yZl9yZWdfYWNjZXNzICpyZWc7CisJCQkJcmVnID0gKHN0cnVjdCBob3N0X2NtZF9kc19yZl9yZWdfYWNjZXNzICopCisJCQkJCSZyZXNwLT5wYXJhbXMucmZfcmVnOworCQkJCXJlZ19ydy0+b2Zmc2V0ID0gY3B1X3RvX2xlMzIoCisJCQkJCSh1MzIpIGxlMTZfdG9fY3B1KHJlZy0+b2Zmc2V0KSk7CisJCQkJcmVnX3J3LT52YWx1ZSA9IGNwdV90b19sZTMyKCh1MzIpIHJlZy0+dmFsdWUpOworCQkJCWJyZWFrOworCQkJfQorCQljYXNlIEhvc3RDbWRfQ01EX1BNSUNfUkVHX0FDQ0VTUzoKKwkJCXsKKwkJCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfcG1pY19yZWdfYWNjZXNzICpyZWc7CisJCQkJcmVnID0gKHN0cnVjdCBob3N0X2NtZF9kc19wbWljX3JlZ19hY2Nlc3MgKikKKwkJCQkJJnJlc3AtPnBhcmFtcy5wbWljX3JlZzsKKwkJCQlyZWdfcnctPm9mZnNldCA9IGNwdV90b19sZTMyKAorCQkJCQkodTMyKSBsZTE2X3RvX2NwdShyZWctPm9mZnNldCkpOworCQkJCXJlZ19ydy0+dmFsdWUgPSBjcHVfdG9fbGUzMigodTMyKSByZWctPnZhbHVlKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJY2FzZSBIb3N0Q21kX0NNRF9DQVVfUkVHX0FDQ0VTUzoKKwkJCXsKKwkJCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfcmZfcmVnX2FjY2VzcyAqcmVnOworCQkJCXJlZyA9IChzdHJ1Y3QgaG9zdF9jbWRfZHNfcmZfcmVnX2FjY2VzcyAqKQorCQkJCQkmcmVzcC0+cGFyYW1zLnJmX3JlZzsKKwkJCQlyZWdfcnctPm9mZnNldCA9IGNwdV90b19sZTMyKAorCQkJCQkodTMyKSBsZTE2X3RvX2NwdShyZWctPm9mZnNldCkpOworCQkJCXJlZ19ydy0+dmFsdWUgPSBjcHVfdG9fbGUzMigodTMyKSByZWctPnZhbHVlKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJY2FzZSBIb3N0Q21kX0NNRF84MDJfMTFfRUVQUk9NX0FDQ0VTUzoKKwkJCXsKKwkJCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2VlcHJvbV9hY2Nlc3MKKwkJCQkJKmNtZF9lZXByb20gPQorCQkJCQkoc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9lZXByb21fYWNjZXNzCisJCQkJCSAqKSAmcmVzcC0+cGFyYW1zLmVlcHJvbTsKKwkJCQlwcl9kZWJ1ZygiaW5mbzogRUVQUk9NIHJlYWQgbGVuPSV4XG4iLAorCQkJCSAgICAgICBjbWRfZWVwcm9tLT5ieXRlX2NvdW50KTsKKwkJCQlpZiAobGUxNl90b19jcHUoZWVwcm9tLT5ieXRlX2NvdW50KSA8CisJCQkJCQlsZTE2X3RvX2NwdSgKKwkJCQkJCWNtZF9lZXByb20tPmJ5dGVfY291bnQpKSB7CisJCQkJCWVlcHJvbS0+Ynl0ZV9jb3VudCA9IGNwdV90b19sZTE2KDApOworCQkJCQlwcl9kZWJ1ZygiaW5mbzogRUVQUk9NIHJlYWQgIgorCQkJCQkJCSJsZW5ndGggaXMgdG9vIGJpZ1xuIik7CisJCQkJCXJldHVybiAtMTsKKwkJCQl9CisJCQkJZWVwcm9tLT5vZmZzZXQgPSBjbWRfZWVwcm9tLT5vZmZzZXQ7CisJCQkJZWVwcm9tLT5ieXRlX2NvdW50ID0gY21kX2VlcHJvbS0+Ynl0ZV9jb3VudDsKKwkJCQlpZiAobGUxNl90b19jcHUoZWVwcm9tLT5ieXRlX2NvdW50KSA+IDApCisJCQkJCW1lbWNweSgmZWVwcm9tLT52YWx1ZSwKKwkJCQkJICAgICAgICZjbWRfZWVwcm9tLT52YWx1ZSwKKwkJCQkJICAgICAgIGxlMTZfdG9fY3B1KGVlcHJvbS0+Ynl0ZV9jb3VudCkpOworCisJCQkJYnJlYWs7CisJCQl9CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNvbW1hbmQgcmVzcG9uc2Ugb2YgZ2V0IElCU1MgY29hbGVzY2luZyBzdGF0dXMuCisgKgorICogSWYgdGhlIHJlY2VpdmVkIEJTU0lEIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBjdXJyZW50IG9uZSwgdGhlIGN1cnJlbnQgQlNTSUQsCisgKiBiZWFjb24gaW50ZXJ2YWwsIEFUSU0gd2luZG93IGFuZCBFUlAgaW5mb3JtYXRpb24gYXJlIHVwZGF0ZWQsIGFsb25nIHdpdGgKKyAqIGNoYW5naW5nIHRoZSBhZC1ob2Mgc3RhdGUgYWNjb3JkaW5nbHkuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9yZXRfaWJzc19jb2FsZXNjaW5nX3N0YXR1cyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCQkgICAgICBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqcmVzcCkKK3sKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX2lic3Nfc3RhdHVzICppYnNzX2NvYWxfcmVzcCA9CisJCSYocmVzcC0+cGFyYW1zLmlic3NfY29hbGVzY2luZyk7CisJdTggemVyb19tYWNbRVRIX0FMRU5dID0geyAwLCAwLCAwLCAwLCAwLCAwIH07CisKKwlpZiAobGUxNl90b19jcHUoaWJzc19jb2FsX3Jlc3AtPmFjdGlvbikgPT0gSG9zdENtZF9BQ1RfR0VOX1NFVCkKKwkJcmV0dXJuIDA7CisKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwKKwkJImluZm86IG5ldyBCU1NJRCAlcE1cbiIsIGlic3NfY29hbF9yZXNwLT5ic3NpZCk7CisKKwkvKiBJZiByc3AgaGFzIE5VTEwgQlNTSUQsIEp1c3QgcmV0dXJuLi4uLi4gTm8gQWN0aW9uICovCisJaWYgKCFtZW1jbXAoaWJzc19jb2FsX3Jlc3AtPmJzc2lkLCB6ZXJvX21hYywgRVRIX0FMRU4pKSB7CisJCWRldl93YXJuKHByaXYtPmFkYXB0ZXItPmRldiwgIm5ldyBCU1NJRCBpcyBOVUxMXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogSWYgQlNTSUQgaXMgZGlmZiwgbW9kaWZ5IGN1cnJlbnQgQlNTIHBhcmFtZXRlcnMgKi8KKwlpZiAobWVtY21wKHByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5tYWNfYWRkcmVzcywKKwkJICAgaWJzc19jb2FsX3Jlc3AtPmJzc2lkLCBFVEhfQUxFTikpIHsKKwkJLyogQlNTSUQgKi8KKwkJbWVtY3B5KHByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5tYWNfYWRkcmVzcywKKwkJICAgICAgIGlic3NfY29hbF9yZXNwLT5ic3NpZCwgRVRIX0FMRU4pOworCisJCS8qIEJlYWNvbiBJbnRlcnZhbCAqLworCQlwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IuYmVhY29uX3BlcmlvZAorCQkJPSBsZTE2X3RvX2NwdShpYnNzX2NvYWxfcmVzcC0+YmVhY29uX2ludGVydmFsKTsKKworCQkvKiBFUlAgSW5mb3JtYXRpb24gKi8KKwkJcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLmVycF9mbGFncyA9CisJCQkodTgpIGxlMTZfdG9fY3B1KGlic3NfY29hbF9yZXNwLT51c2VfZ19yYXRlX3Byb3RlY3QpOworCisJCXByaXYtPmFkaG9jX3N0YXRlID0gQURIT0NfQ09BTEVTQ0VEOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBjb21tYW5kIHJlc3BvbnNlcy4KKyAqCisgKiBUaGlzIGlzIGEgZ2VuZXJpYyBmdW5jdGlvbiwgd2hpY2ggY2FsbHMgY29tbWFuZCBzcGVjaWZpYworICogcmVzcG9uc2UgaGFuZGxlcnMgYmFzZWQgb24gdGhlIGNvbW1hbmQgSUQuCisgKi8KK2ludCBtd2lmaWV4X3Byb2Nlc3Nfc3RhX2NtZHJlc3Aoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQl1MTYgY21kcmVzcF9ubywgdm9pZCAqY21kX2J1ZikKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqcmVzcCA9CisJCShzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqKSBjbWRfYnVmOworCXZvaWQgKmRhdGFfYnVmID0gYWRhcHRlci0+Y3Vycl9jbWQtPmRhdGFfYnVmOworCisJLyogSWYgdGhlIGNvbW1hbmQgaXMgbm90IHN1Y2Nlc3NmdWwsIGNsZWFudXAgYW5kIHJldHVybiBmYWlsdXJlICovCisJaWYgKHJlc3AtPnJlc3VsdCAhPSBIb3N0Q21kX1JFU1VMVF9PSykgeworCQltd2lmaWV4X3Byb2Nlc3NfY21kcmVzcF9lcnJvcihwcml2LCByZXNwKTsKKwkJcmV0dXJuIC0xOworCX0KKwkvKiBDb21tYW5kIHN1Y2Nlc3NmdWwsIGhhbmRsZSByZXNwb25zZSAqLworCXN3aXRjaCAoY21kcmVzcF9ubykgeworCWNhc2UgSG9zdENtZF9DTURfR0VUX0hXX1NQRUM6CisJCXJldCA9IG13aWZpZXhfcmV0X2dldF9od19zcGVjKHByaXYsIHJlc3ApOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EX01BQ19DT05UUk9MOgorCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzgwMl8xMV9NQUNfQUREUkVTUzoKKwkJcmV0ID0gbXdpZmlleF9yZXRfODAyXzExX21hY19hZGRyZXNzKHByaXYsIHJlc3ApOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EX01BQ19NVUxUSUNBU1RfQURSOgorCQlyZXQgPSBtd2lmaWV4X3JldF9tYWNfbXVsdGljYXN0X2Fkcihwcml2LCByZXNwKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF9UWF9SQVRFX0NGRzoKKwkJcmV0ID0gbXdpZmlleF9yZXRfdHhfcmF0ZV9jZmcocHJpdiwgcmVzcCwgZGF0YV9idWYpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzgwMl8xMV9TQ0FOOgorCQlyZXQgPSBtd2lmaWV4X3JldF84MDJfMTFfc2Nhbihwcml2LCByZXNwKTsKKwkJYWRhcHRlci0+Y3Vycl9jbWQtPndhaXRfcV9lbmFibGVkID0gZmFsc2U7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfODAyXzExX0JHX1NDQU5fUVVFUlk6CisJCXJldCA9IG13aWZpZXhfcmV0XzgwMl8xMV9zY2FuKHByaXYsIHJlc3ApOworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwKKwkJCSJpbmZvOiBDTURfUkVTUDogQkdfU0NBTiByZXN1bHQgaXMgcmVhZHkhXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF9UWFBXUl9DRkc6CisJCXJldCA9IG13aWZpZXhfcmV0X3R4X3Bvd2VyX2NmZyhwcml2LCByZXNwLCBkYXRhX2J1Zik7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfODAyXzExX1BTX01PREVfRU5IOgorCQlyZXQgPSBtd2lmaWV4X3JldF9lbmhfcG93ZXJfbW9kZShwcml2LCByZXNwLCBkYXRhX2J1Zik7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfODAyXzExX0hTX0NGR19FTkg6CisJCXJldCA9IG13aWZpZXhfcmV0XzgwMl8xMV9oc19jZmcocHJpdiwgcmVzcCk7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfODAyXzExX0FTU09DSUFURToKKwkJcmV0ID0gbXdpZmlleF9yZXRfODAyXzExX2Fzc29jaWF0ZShwcml2LCByZXNwKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF84MDJfMTFfREVBVVRIRU5USUNBVEU6CisJCXJldCA9IG13aWZpZXhfcmV0XzgwMl8xMV9kZWF1dGhlbnRpY2F0ZShwcml2LCByZXNwKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF84MDJfMTFfQURfSE9DX1NUQVJUOgorCWNhc2UgSG9zdENtZF9DTURfODAyXzExX0FEX0hPQ19KT0lOOgorCQlyZXQgPSBtd2lmaWV4X3JldF84MDJfMTFfYWRfaG9jKHByaXYsIHJlc3ApOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzgwMl8xMV9BRF9IT0NfU1RPUDoKKwkJcmV0ID0gbXdpZmlleF9yZXRfODAyXzExX2FkX2hvY19zdG9wKHByaXYsIHJlc3ApOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzgwMl8xMV9HRVRfTE9HOgorCQlyZXQgPSBtd2lmaWV4X3JldF9nZXRfbG9nKHByaXYsIHJlc3AsIGRhdGFfYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF9SU1NJX0lORk86CisJCXJldCA9IG13aWZpZXhfcmV0XzgwMl8xMV9yc3NpX2luZm8ocHJpdiwgcmVzcCwgZGF0YV9idWYpOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzgwMl8xMV9TTk1QX01JQjoKKwkJcmV0ID0gbXdpZmlleF9yZXRfODAyXzExX3NubXBfbWliKHByaXYsIHJlc3AsIGRhdGFfYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF84MDJfMTFfVFhfUkFURV9RVUVSWToKKwkJcmV0ID0gbXdpZmlleF9yZXRfODAyXzExX3R4X3JhdGVfcXVlcnkocHJpdiwgcmVzcCk7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfODAyXzExX1JGX0NIQU5ORUw6CisJCXJldCA9IG13aWZpZXhfcmV0XzgwMl8xMV9yZl9jaGFubmVsKHByaXYsIHJlc3AsIGRhdGFfYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF9WRVJTSU9OX0VYVDoKKwkJcmV0ID0gbXdpZmlleF9yZXRfdmVyX2V4dChwcml2LCByZXNwLCBkYXRhX2J1Zik7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfRlVOQ19JTklUOgorCWNhc2UgSG9zdENtZF9DTURfRlVOQ19TSFVURE9XTjoKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF84MDJfMTFfS0VZX01BVEVSSUFMOgorCQlyZXQgPSBtd2lmaWV4X3JldF84MDJfMTFfa2V5X21hdGVyaWFsKHByaXYsIHJlc3ApOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzgwMl8xMURfRE9NQUlOX0lORk86CisJCXJldCA9IG13aWZpZXhfcmV0XzgwMl8xMWRfZG9tYWluX2luZm8ocHJpdiwgcmVzcCk7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfMTFOX0FEREJBX1JFUToKKwkJcmV0ID0gbXdpZmlleF9yZXRfMTFuX2FkZGJhX3JlcShwcml2LCByZXNwKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF8xMU5fREVMQkE6CisJCXJldCA9IG13aWZpZXhfcmV0XzExbl9kZWxiYShwcml2LCByZXNwKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF8xMU5fQUREQkFfUlNQOgorCQlyZXQgPSBtd2lmaWV4X3JldF8xMW5fYWRkYmFfcmVzcChwcml2LCByZXNwKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF9SRUNPTkZJR1VSRV9UWF9CVUZGOgorCQlhZGFwdGVyLT50eF9idWZfc2l6ZSA9ICh1MTYpIGxlMTZfdG9fY3B1KHJlc3AtPnBhcmFtcy4KKwkJCQkJCQkgICAgIHR4X2J1Zi5idWZmX3NpemUpOworCQlhZGFwdGVyLT50eF9idWZfc2l6ZSA9IChhZGFwdGVyLT50eF9idWZfc2l6ZSAvCisJCQkJCQlNV0lGSUVYX1NESU9fQkxPQ0tfU0laRSkgKgorCQkJCQkJTVdJRklFWF9TRElPX0JMT0NLX1NJWkU7CisJCWFkYXB0ZXItPmN1cnJfdHhfYnVmX3NpemUgPSBhZGFwdGVyLT50eF9idWZfc2l6ZTsKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsCisJCQkiY21kOiBtYXhfdHhfYnVmX3NpemU9JWQsIHR4X2J1Zl9zaXplPSVkXG4iLAorCQkgICAgICAgYWRhcHRlci0+bWF4X3R4X2J1Zl9zaXplLCBhZGFwdGVyLT50eF9idWZfc2l6ZSk7CisKKwkJaWYgKGFkYXB0ZXItPmlmX29wcy51cGRhdGVfbXBfZW5kX3BvcnQpCisJCQlhZGFwdGVyLT5pZl9vcHMudXBkYXRlX21wX2VuZF9wb3J0KGFkYXB0ZXIsCisJCQkJCWxlMTZfdG9fY3B1KHJlc3AtPgorCQkJCQkJcGFyYW1zLgorCQkJCQkJdHhfYnVmLgorCQkJCQkJbXBfZW5kX3BvcnQpKTsKKwkJYnJlYWs7CisJY2FzZSBIb3N0Q21kX0NNRF9BTVNEVV9BR0dSX0NUUkw6CisJCXJldCA9IG13aWZpZXhfcmV0X2Ftc2R1X2FnZ3JfY3RybChyZXNwLCBkYXRhX2J1Zik7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfV01NX0dFVF9TVEFUVVM6CisJCXJldCA9IG13aWZpZXhfcmV0X3dtbV9nZXRfc3RhdHVzKHByaXYsIHJlc3ApOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzgwMl8xMV9JQlNTX0NPQUxFU0NJTkdfU1RBVFVTOgorCQlyZXQgPSBtd2lmaWV4X3JldF9pYnNzX2NvYWxlc2Npbmdfc3RhdHVzKHByaXYsIHJlc3ApOworCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EX01BQ19SRUdfQUNDRVNTOgorCWNhc2UgSG9zdENtZF9DTURfQkJQX1JFR19BQ0NFU1M6CisJY2FzZSBIb3N0Q21kX0NNRF9SRl9SRUdfQUNDRVNTOgorCWNhc2UgSG9zdENtZF9DTURfUE1JQ19SRUdfQUNDRVNTOgorCWNhc2UgSG9zdENtZF9DTURfQ0FVX1JFR19BQ0NFU1M6CisJY2FzZSBIb3N0Q21kX0NNRF84MDJfMTFfRUVQUk9NX0FDQ0VTUzoKKwkJcmV0ID0gbXdpZmlleF9yZXRfcmVnX2FjY2VzcyhjbWRyZXNwX25vLCByZXNwLCBkYXRhX2J1Zik7CisJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfU0VUX0JTU19NT0RFOgorCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EXzExTl9DRkc6CisJCXJldCA9IG13aWZpZXhfcmV0XzExbl9jZmcocmVzcCwgZGF0YV9idWYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIkNNRF9SRVNQOiB1bmtub3duIGNtZCByZXNwb25zZSAlI3hcbiIsCisJCSAgICAgICByZXNwLT5jb21tYW5kKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvc3RhX2V2ZW50LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3N0YV9ldmVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMjY1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3N0YV9ldmVudC5jCkBAIC0wLDAgKzEsNDA2IEBACisvKgorICogTWFydmVsbCBXaXJlbGVzcyBMQU4gZGV2aWNlIGRyaXZlcjogc3RhdGlvbiBldmVudCBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQKKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKyAqLworCisjaW5jbHVkZSAiZGVjbC5oIgorI2luY2x1ZGUgImlvY3RsLmgiCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgImZ3LmgiCisjaW5jbHVkZSAibWFpbi5oIgorI2luY2x1ZGUgIndtbS5oIgorI2luY2x1ZGUgIjExbi5oIgorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXNldHMgdGhlIGNvbm5lY3Rpb24gc3RhdGUuCisgKgorICogVGhlIGZ1bmN0aW9uIGlzIGludm9rZWQgYWZ0ZXIgcmVjZWl2aW5nIGEgZGlzY29ubmVjdCBldmVudCBmcm9tIGZpcm13YXJlLAorICogYW5kIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyAtCisgKiAgICAgIC0gU2V0IG1lZGlhIHN0YXR1cyB0byBkaXNjb25uZWN0ZWQKKyAqICAgICAgLSBDbGVhbiB1cCBUeCBhbmQgUnggcGFja2V0cworICogICAgICAtIFJlc2V0cyBTTlIvTkYvUlNTSSB2YWx1ZSBpbiBkcml2ZXIKKyAqICAgICAgLSBSZXNldHMgc2VjdXJpdHkgY29uZmlndXJhdGlvbnMgaW4gZHJpdmVyCisgKiAgICAgIC0gRW5hYmxlcyBhdXRvIGRhdGEgcmF0ZQorICogICAgICAtIFNhdmVzIHRoZSBwcmV2aW91cyBTU0lEIGFuZCBCU1NJRCBzbyB0aGF0IHRoZXkgY2FuCisgKiAgICAgICAgYmUgdXNlZCBmb3IgcmUtYXNzb2NpYXRpb24sIGlmIHJlcXVpcmVkCisgKiAgICAgIC0gRXJhc2VzIGN1cnJlbnQgU1NJRCBhbmQgQlNTSUQgaW5mb3JtYXRpb24KKyAqICAgICAgLSBTZW5kcyBhIGRpc2Nvbm5lY3QgZXZlbnQgdG8gdXBwZXIgbGF5ZXJzL2FwcGxpY2F0aW9ucy4KKyAqLwordm9pZAorbXdpZmlleF9yZXNldF9jb25uZWN0X3N0YXRlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpCit7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisKKwlpZiAoIXByaXYtPm1lZGlhX2Nvbm5lY3RlZCkKKwkJcmV0dXJuOworCisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBoYW5kbGVzIGRpc2Nvbm5lY3QgZXZlbnRcbiIpOworCisJcHJpdi0+bWVkaWFfY29ubmVjdGVkID0gZmFsc2U7CisKKwlwcml2LT5zY2FuX2Jsb2NrID0gZmFsc2U7CisKKwkvKiBGcmVlIFR4IGFuZCBSeCBwYWNrZXRzLCByZXBvcnQgZGlzY29ubmVjdCB0byB1cHBlciBsYXllciAqLworCW13aWZpZXhfY2xlYW5fdHhyeChwcml2KTsKKworCS8qIFJlc2V0IFNOUi9ORi9SU1NJIHZhbHVlcyAqLworCXByaXYtPmRhdGFfcnNzaV9sYXN0ID0gMDsKKwlwcml2LT5kYXRhX25mX2xhc3QgPSAwOworCXByaXYtPmRhdGFfcnNzaV9hdmcgPSAwOworCXByaXYtPmRhdGFfbmZfYXZnID0gMDsKKwlwcml2LT5iY25fcnNzaV9sYXN0ID0gMDsKKwlwcml2LT5iY25fbmZfbGFzdCA9IDA7CisJcHJpdi0+YmNuX3Jzc2lfYXZnID0gMDsKKwlwcml2LT5iY25fbmZfYXZnID0gMDsKKwlwcml2LT5yeHBkX3JhdGUgPSAwOworCXByaXYtPnJ4cGRfaHRpbmZvID0gMDsKKwlwcml2LT5zZWNfaW5mby53cGFfZW5hYmxlZCA9IGZhbHNlOworCXByaXYtPnNlY19pbmZvLndwYTJfZW5hYmxlZCA9IGZhbHNlOworCXByaXYtPndwYV9pZV9sZW4gPSAwOworCisJcHJpdi0+c2VjX2luZm8ud2FwaV9lbmFibGVkID0gZmFsc2U7CisJcHJpdi0+d2FwaV9pZV9sZW4gPSAwOworCXByaXYtPnNlY19pbmZvLndhcGlfa2V5X29uID0gZmFsc2U7CisKKwlwcml2LT5zZWNfaW5mby5lbmNyeXB0aW9uX21vZGUgPSAwOworCisJLyogRW5hYmxlIGF1dG8gZGF0YSByYXRlICovCisJcHJpdi0+aXNfZGF0YV9yYXRlX2F1dG8gPSB0cnVlOworCXByaXYtPmRhdGFfcmF0ZSA9IDA7CisKKwlpZiAocHJpdi0+YnNzX21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJcHJpdi0+YWRob2Nfc3RhdGUgPSBBREhPQ19JRExFOworCQlwcml2LT5hZGhvY19pc19saW5rX3NlbnNlZCA9IGZhbHNlOworCX0KKworCS8qCisJICogTWVtb3JpemUgdGhlIHByZXZpb3VzIFNTSUQgYW5kIEJTU0lEIHNvCisJICogaXQgY291bGQgYmUgdXNlZCBmb3IgcmUtYXNzb2MKKwkgKi8KKworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogcHJldmlvdXMgU1NJRD0lcywgU1NJRCBsZW49JXVcbiIsCisJICAgICAgIHByaXYtPnByZXZfc3NpZC5zc2lkLCBwcml2LT5wcmV2X3NzaWQuc3NpZF9sZW4pOworCisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBjdXJyZW50IFNTSUQ9JXMsIFNTSUQgbGVuPSV1XG4iLAorCSAgICAgICBwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3Iuc3NpZC5zc2lkLAorCSAgICAgICBwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3Iuc3NpZC5zc2lkX2xlbik7CisKKwltZW1jcHkoJnByaXYtPnByZXZfc3NpZCwKKwkgICAgICAgJnByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5zc2lkLAorCSAgICAgICBzaXplb2Yoc3RydWN0IG13aWZpZXhfODAyXzExX3NzaWQpKTsKKworCW1lbWNweShwcml2LT5wcmV2X2Jzc2lkLAorCSAgICAgICBwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IubWFjX2FkZHJlc3MsIEVUSF9BTEVOKTsKKworCS8qIE5lZWQgdG8gZXJhc2UgdGhlIGN1cnJlbnQgU1NJRCBhbmQgQlNTSUQgaW5mbyAqLworCW1lbXNldCgmcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLCAweDAwLCBzaXplb2YocHJpdi0+Y3Vycl9ic3NfcGFyYW1zKSk7CisKKwlhZGFwdGVyLT50eF9sb2NrX2ZsYWcgPSBmYWxzZTsKKwlhZGFwdGVyLT5wcHNfdWFwc2RfbW9kZSA9IGZhbHNlOworCisJaWYgKGFkYXB0ZXItPm51bV9jbWRfdGltZW91dCAmJiBhZGFwdGVyLT5jdXJyX2NtZCkKKwkJcmV0dXJuOworCXByaXYtPm1lZGlhX2Nvbm5lY3RlZCA9IGZhbHNlOworCWlmICghcHJpdi0+ZGlzY29ubmVjdCkgeworCQlwcml2LT5kaXNjb25uZWN0ID0gMTsKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBzdWNjZXNzZnVsbHkgZGlzY29ubmVjdGVkIGZyb20iCisJCQkJIiAlcE06IHJlYXNvbiBjb2RlICVkXG4iLCBwcml2LT5jZmdfYnNzaWQsCisJCQkJV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcpOworCQljZmc4MDIxMV9kaXNjb25uZWN0ZWQocHJpdi0+bmV0ZGV2LAorCQkJCVdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HLCBOVUxMLCAwLAorCQkJCUdGUF9LRVJORUwpOworCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmNmZ193b3JrcXVldWUpOworCX0KKwlpZiAoIW5ldGlmX3F1ZXVlX3N0b3BwZWQocHJpdi0+bmV0ZGV2KSkKKwkJbmV0aWZfc3RvcF9xdWV1ZShwcml2LT5uZXRkZXYpOworCWlmIChuZXRpZl9jYXJyaWVyX29rKHByaXYtPm5ldGRldikpCisJCW5ldGlmX2NhcnJpZXJfb2ZmKHByaXYtPm5ldGRldik7CisJLyogUmVzZXQgd2lyZWxlc3Mgc3RhdHMgc2lnbmFsIGluZm8gKi8KKwlwcml2LT53X3N0YXRzLnF1YWwubGV2ZWwgPSAwOworCXByaXYtPndfc3RhdHMucXVhbC5ub2lzZSA9IDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgZXZlbnRzIGdlbmVyYXRlZCBieSBmaXJtd2FyZS4KKyAqCisgKiBUaGlzIGlzIGEgZ2VuZXJpYyBmdW5jdGlvbiBhbmQgaGFuZGxlcyBhbGwgZXZlbnRzLgorICoKKyAqIEV2ZW50IHNwZWNpZmljIHJvdXRpbmVzIGFyZSBjYWxsZWQgYnkgdGhpcyBmdW5jdGlvbiBiYXNlZAorICogdXBvbiB0aGUgZ2VuZXJhdGVkIGV2ZW50IGNhdXNlLgorICoKKyAqIEZvciB0aGUgZm9sbG93aW5nIGV2ZW50cywgdGhlIGZ1bmN0aW9uIGp1c3QgZm9yd2FyZHMgdGhlbSB0byB1cHBlcgorICogbGF5ZXJzLCBvcHRpb25hbGx5IHJlY29yZGluZyB0aGUgY2hhbmdlIC0KKyAqICAgICAgLSBFVkVOVF9MSU5LX1NFTlNFRAorICogICAgICAtIEVWRU5UX01JQ19FUlJfVU5JQ0FTVAorICogICAgICAtIEVWRU5UX01JQ19FUlJfTVVMVElDQVNUCisgKiAgICAgIC0gRVZFTlRfUE9SVF9SRUxFQVNFCisgKiAgICAgIC0gRVZFTlRfUlNTSV9MT1cKKyAqICAgICAgLSBFVkVOVF9TTlJfTE9XCisgKiAgICAgIC0gRVZFTlRfTUFYX0ZBSUwKKyAqICAgICAgLSBFVkVOVF9SU1NJX0hJR0gKKyAqICAgICAgLSBFVkVOVF9TTlJfSElHSAorICogICAgICAtIEVWRU5UX0RBVEFfUlNTSV9MT1cKKyAqICAgICAgLSBFVkVOVF9EQVRBX1NOUl9MT1cKKyAqICAgICAgLSBFVkVOVF9EQVRBX1JTU0lfSElHSAorICogICAgICAtIEVWRU5UX0RBVEFfU05SX0hJR0gKKyAqICAgICAgLSBFVkVOVF9MSU5LX1FVQUxJVFkKKyAqICAgICAgLSBFVkVOVF9QUkVfQkVBQ09OX0xPU1QKKyAqICAgICAgLSBFVkVOVF9JQlNTX0NPQUxFU0NFRAorICogICAgICAtIEVWRU5UX1dFUF9JQ1ZfRVJSCisgKiAgICAgIC0gRVZFTlRfQldfQ0hBTkdFCisgKiAgICAgIC0gRVZFTlRfSE9TVFdBS0VfU1RBSUUKKyAgKgorICogRm9yIHRoZSBmb2xsb3dpbmcgZXZlbnRzLCBubyBhY3Rpb24gaXMgdGFrZW4gLQorICogICAgICAtIEVWRU5UX01JQl9DSEFOR0VECisgKiAgICAgIC0gRVZFTlRfSU5JVF9ET05FCisgKiAgICAgIC0gRVZFTlRfRFVNTVlfSE9TVF9XQUtFVVBfU0lHTkFMCisgKgorICogUmVzdCBvZiB0aGUgc3VwcG9ydGVkIGV2ZW50cyByZXF1aXJlcyBkcml2ZXIgaGFuZGxpbmcgLQorICogICAgICAtIEVWRU5UX0RFQVVUSEVOVElDQVRFRAorICogICAgICAtIEVWRU5UX0RJU0FTU09DSUFURUQKKyAqICAgICAgLSBFVkVOVF9MSU5LX0xPU1QKKyAqICAgICAgLSBFVkVOVF9QU19TTEVFUAorICogICAgICAtIEVWRU5UX1BTX0FXQUtFCisgKiAgICAgIC0gRVZFTlRfREVFUF9TTEVFUF9BV0FLRQorICogICAgICAtIEVWRU5UX0hTX0FDVF9SRVEKKyAqICAgICAgLSBFVkVOVF9BREhPQ19CQ05fTE9TVAorICogICAgICAtIEVWRU5UX0JHX1NDQU5fUkVQT1JUCisgKiAgICAgIC0gRVZFTlRfV01NX1NUQVRVU19DSEFOR0UKKyAqICAgICAgLSBFVkVOVF9BRERCQQorICogICAgICAtIEVWRU5UX0RFTEJBCisgKiAgICAgIC0gRVZFTlRfQkFfU1RSRUFNX1RJRU1PVVQKKyAqICAgICAgLSBFVkVOVF9BTVNEVV9BR0dSX0NUUkwKKyAqLworaW50IG13aWZpZXhfcHJvY2Vzc19zdGFfZXZlbnQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlpbnQgcmV0ID0gMDsKKwl1MzIgZXZlbnRjYXVzZSA9IGFkYXB0ZXItPmV2ZW50X2NhdXNlOworCisJc3dpdGNoIChldmVudGNhdXNlKSB7CisJY2FzZSBFVkVOVF9EVU1NWV9IT1NUX1dBS0VVUF9TSUdOQUw6CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiaW52YWxpZCBFVkVOVDogRFVNTVlfSE9TVF9XQUtFVVBfU0lHTkFMLCIKKwkJCQkiIGlnbm9yaW5nIGl0XG4iKTsKKwkJYnJlYWs7CisJY2FzZSBFVkVOVF9MSU5LX1NFTlNFRDoKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogTElOS19TRU5TRURcbiIpOworCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2socHJpdi0+bmV0ZGV2KSkKKwkJCW5ldGlmX2NhcnJpZXJfb24ocHJpdi0+bmV0ZGV2KTsKKwkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQocHJpdi0+bmV0ZGV2KSkKKwkJCW5ldGlmX3dha2VfcXVldWUocHJpdi0+bmV0ZGV2KTsKKwkJYnJlYWs7CisKKwljYXNlIEVWRU5UX0RFQVVUSEVOVElDQVRFRDoKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogRGVhdXRoZW50aWNhdGVkXG4iKTsKKwkJYWRhcHRlci0+ZGJnLm51bV9ldmVudF9kZWF1dGgrKzsKKwkJaWYgKHByaXYtPm1lZGlhX2Nvbm5lY3RlZCkKKwkJCW13aWZpZXhfcmVzZXRfY29ubmVjdF9zdGF0ZShwcml2KTsKKwkJYnJlYWs7CisKKwljYXNlIEVWRU5UX0RJU0FTU09DSUFURUQ6CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZXZlbnQ6IERpc2Fzc29jaWF0ZWRcbiIpOworCQlhZGFwdGVyLT5kYmcubnVtX2V2ZW50X2Rpc2Fzc29jKys7CisJCWlmIChwcml2LT5tZWRpYV9jb25uZWN0ZWQpCisJCQltd2lmaWV4X3Jlc2V0X2Nvbm5lY3Rfc3RhdGUocHJpdik7CisJCWJyZWFrOworCisJY2FzZSBFVkVOVF9MSU5LX0xPU1Q6CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZXZlbnQ6IExpbmsgbG9zdFxuIik7CisJCWFkYXB0ZXItPmRiZy5udW1fZXZlbnRfbGlua19sb3N0Kys7CisJCWlmIChwcml2LT5tZWRpYV9jb25uZWN0ZWQpCisJCQltd2lmaWV4X3Jlc2V0X2Nvbm5lY3Rfc3RhdGUocHJpdik7CisJCWJyZWFrOworCisJY2FzZSBFVkVOVF9QU19TTEVFUDoKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBFVkVOVDogU0xFRVBcbiIpOworCisJCWFkYXB0ZXItPnBzX3N0YXRlID0gUFNfU1RBVEVfUFJFX1NMRUVQOworCisJCW13aWZpZXhfY2hlY2tfcHNfY29uZChhZGFwdGVyKTsKKwkJYnJlYWs7CisKKwljYXNlIEVWRU5UX1BTX0FXQUtFOgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IEVWRU5UOiBBV0FLRVxuIik7CisJCWlmICghYWRhcHRlci0+cHBzX3VhcHNkX21vZGUgJiYKKwkJCXByaXYtPm1lZGlhX2Nvbm5lY3RlZCAmJgorCQkJYWRhcHRlci0+c2xlZXBfcGVyaW9kLnBlcmlvZCkgeworCQkJCWFkYXB0ZXItPnBwc191YXBzZF9tb2RlID0gdHJ1ZTsKKwkJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwKKwkJCQkJImV2ZW50OiBQUFMvVUFQU0QgbW9kZSBhY3RpdmF0ZWRcbiIpOworCQl9CisJCWFkYXB0ZXItPnR4X2xvY2tfZmxhZyA9IGZhbHNlOworCQlpZiAoYWRhcHRlci0+cHBzX3VhcHNkX21vZGUgJiYgYWRhcHRlci0+Z2VuX251bGxfcGt0KSB7CisJCQlpZiAobXdpZmlleF9jaGVja19sYXN0X3BhY2tldF9pbmRpY2F0aW9uKHByaXYpKSB7CisJCQkJaWYgKCFhZGFwdGVyLT5kYXRhX3NlbnQpIHsKKwkJCQkJaWYgKCFtd2lmaWV4X3NlbmRfbnVsbF9wYWNrZXQocHJpdiwKKwkJCQkJTVdJRklFWF9UeFBEX1BPV0VSX01HTVRfTlVMTF9QQUNLRVQKKwkJCQkJfAorCQkJCQlNV0lGSUVYX1R4UERfUE9XRVJfTUdNVF9MQVNUX1BBQ0tFVCkpCisJCQkJCQlhZGFwdGVyLT5wc19zdGF0ZSA9CisJCQkJCQkJUFNfU1RBVEVfU0xFRVA7CisJCQkJCXJldHVybiAwOworCQkJCX0KKwkJCX0KKwkJfQorCQlhZGFwdGVyLT5wc19zdGF0ZSA9IFBTX1NUQVRFX0FXQUtFOworCQlhZGFwdGVyLT5wbV93YWtldXBfY2FyZF9yZXEgPSBmYWxzZTsKKwkJYWRhcHRlci0+cG1fd2FrZXVwX2Z3X3RyeSA9IGZhbHNlOworCisJCWJyZWFrOworCisJY2FzZSBFVkVOVF9ERUVQX1NMRUVQX0FXQUtFOgorCQlhZGFwdGVyLT5pZl9vcHMud2FrZXVwX2NvbXBsZXRlKGFkYXB0ZXIpOworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImV2ZW50OiBEU19BV0FLRVxuIik7CisJCWlmIChhZGFwdGVyLT5pc19kZWVwX3NsZWVwKQorCQkJYWRhcHRlci0+aXNfZGVlcF9zbGVlcCA9IGZhbHNlOworCQlicmVhazsKKworCWNhc2UgRVZFTlRfSFNfQUNUX1JFUToKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogSFNfQUNUX1JFUVxuIik7CisJCXJldCA9IG13aWZpZXhfc2VuZF9jbWRfYXN5bmMocHJpdiwKKwkJCQkJICAgICBIb3N0Q21kX0NNRF84MDJfMTFfSFNfQ0ZHX0VOSCwKKwkJCQkJICAgICAwLCAwLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIEVWRU5UX01JQ19FUlJfVU5JQ0FTVDoKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogVU5JQ0FTVCBNSUMgRVJST1JcbiIpOworCQlicmVhazsKKworCWNhc2UgRVZFTlRfTUlDX0VSUl9NVUxUSUNBU1Q6CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZXZlbnQ6IE1VTFRJQ0FTVCBNSUMgRVJST1JcbiIpOworCQlicmVhazsKKwljYXNlIEVWRU5UX01JQl9DSEFOR0VEOgorCWNhc2UgRVZFTlRfSU5JVF9ET05FOgorCQlicmVhazsKKworCWNhc2UgRVZFTlRfQURIT0NfQkNOX0xPU1Q6CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZXZlbnQ6IEFESE9DX0JDTl9MT1NUXG4iKTsKKwkJcHJpdi0+YWRob2NfaXNfbGlua19zZW5zZWQgPSBmYWxzZTsKKwkJbXdpZmlleF9jbGVhbl90eHJ4KHByaXYpOworCQlpZiAoIW5ldGlmX3F1ZXVlX3N0b3BwZWQocHJpdi0+bmV0ZGV2KSkKKwkJCW5ldGlmX3N0b3BfcXVldWUocHJpdi0+bmV0ZGV2KTsKKwkJaWYgKG5ldGlmX2NhcnJpZXJfb2socHJpdi0+bmV0ZGV2KSkKKwkJCW5ldGlmX2NhcnJpZXJfb2ZmKHByaXYtPm5ldGRldik7CisJCWJyZWFrOworCisJY2FzZSBFVkVOVF9CR19TQ0FOX1JFUE9SVDoKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogQkdTX1JFUE9SVFxuIik7CisJCS8qIENsZWFyIHRoZSBwcmV2aW91cyBzY2FuIHJlc3VsdCAqLworCQltZW1zZXQoYWRhcHRlci0+c2Nhbl90YWJsZSwgMHgwMCwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yKSAqIElXX01BWF9BUCk7CisJCWFkYXB0ZXItPm51bV9pbl9zY2FuX3RhYmxlID0gMDsKKwkJYWRhcHRlci0+YmNuX2J1Zl9lbmQgPSBhZGFwdGVyLT5iY25fYnVmOworCQlyZXQgPSBtd2lmaWV4X3NlbmRfY21kX2FzeW5jKHByaXYsCisJCQkJCSAgICAgSG9zdENtZF9DTURfODAyXzExX0JHX1NDQU5fUVVFUlksCisJCQkJCSAgICAgSG9zdENtZF9BQ1RfR0VOX0dFVCwgMCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBFVkVOVF9QT1JUX1JFTEVBU0U6CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZXZlbnQ6IFBPUlQgUkVMRUFTRVxuIik7CisJCWJyZWFrOworCisJY2FzZSBFVkVOVF9XTU1fU1RBVFVTX0NIQU5HRToKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogV01NIHN0YXR1cyBjaGFuZ2VkXG4iKTsKKwkJcmV0ID0gbXdpZmlleF9zZW5kX2NtZF9hc3luYyhwcml2LCBIb3N0Q21kX0NNRF9XTU1fR0VUX1NUQVRVUywKKwkJCQkJICAgICAwLCAwLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIEVWRU5UX1JTU0lfTE9XOgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImV2ZW50OiBCZWFjb24gUlNTSV9MT1dcbiIpOworCQlicmVhazsKKwljYXNlIEVWRU5UX1NOUl9MT1c6CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZXZlbnQ6IEJlYWNvbiBTTlJfTE9XXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBFVkVOVF9NQVhfRkFJTDoKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogTUFYX0ZBSUxcbiIpOworCQlicmVhazsKKwljYXNlIEVWRU5UX1JTU0lfSElHSDoKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogQmVhY29uIFJTU0lfSElHSFxuIik7CisJCWJyZWFrOworCWNhc2UgRVZFTlRfU05SX0hJR0g6CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZXZlbnQ6IEJlYWNvbiBTTlJfSElHSFxuIik7CisJCWJyZWFrOworCWNhc2UgRVZFTlRfREFUQV9SU1NJX0xPVzoKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogRGF0YSBSU1NJX0xPV1xuIik7CisJCWJyZWFrOworCWNhc2UgRVZFTlRfREFUQV9TTlJfTE9XOgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImV2ZW50OiBEYXRhIFNOUl9MT1dcbiIpOworCQlicmVhazsKKwljYXNlIEVWRU5UX0RBVEFfUlNTSV9ISUdIOgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImV2ZW50OiBEYXRhIFJTU0lfSElHSFxuIik7CisJCWJyZWFrOworCWNhc2UgRVZFTlRfREFUQV9TTlJfSElHSDoKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogRGF0YSBTTlJfSElHSFxuIik7CisJCWJyZWFrOworCWNhc2UgRVZFTlRfTElOS19RVUFMSVRZOgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImV2ZW50OiBMaW5rIFF1YWxpdHlcbiIpOworCQlicmVhazsKKwljYXNlIEVWRU5UX1BSRV9CRUFDT05fTE9TVDoKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogUHJlLUJlYWNvbiBMb3N0XG4iKTsKKwkJYnJlYWs7CisJY2FzZSBFVkVOVF9JQlNTX0NPQUxFU0NFRDoKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogSUJTU19DT0FMRVNDRURcbiIpOworCQlyZXQgPSBtd2lmaWV4X3NlbmRfY21kX2FzeW5jKHByaXYsCisJCQkJSG9zdENtZF9DTURfODAyXzExX0lCU1NfQ09BTEVTQ0lOR19TVEFUVVMsCisJCQkJSG9zdENtZF9BQ1RfR0VOX0dFVCwgMCwgTlVMTCk7CisJCWJyZWFrOworCWNhc2UgRVZFTlRfQUREQkE6CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZXZlbnQ6IEFEREJBIFJlcXVlc3RcbiIpOworCQltd2lmaWV4X3NlbmRfY21kX2FzeW5jKHByaXYsIEhvc3RDbWRfQ01EXzExTl9BRERCQV9SU1AsCisJCQkJICAgICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsCisJCQkJICAgICAgIGFkYXB0ZXItPmV2ZW50X2JvZHkpOworCQlicmVhazsKKwljYXNlIEVWRU5UX0RFTEJBOgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImV2ZW50OiBERUxCQSBSZXF1ZXN0XG4iKTsKKwkJbXdpZmlleF8xMW5fZGVsZXRlX2JhX3N0cmVhbShwcml2LCBhZGFwdGVyLT5ldmVudF9ib2R5KTsKKwkJYnJlYWs7CisJY2FzZSBFVkVOVF9CQV9TVFJFQU1fVElFTU9VVDoKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogIEJBIFN0cmVhbSB0aW1lb3V0XG4iKTsKKwkJbXdpZmlleF8xMW5fYmFfc3RyZWFtX3RpbWVvdXQocHJpdiwKKwkJCQkJICAgICAgKHN0cnVjdCBob3N0X2NtZF9kc18xMW5fYmF0aW1lb3V0CisJCQkJCSAgICAgICAqKQorCQkJCQkgICAgICBhZGFwdGVyLT5ldmVudF9ib2R5KTsKKwkJYnJlYWs7CisJY2FzZSBFVkVOVF9BTVNEVV9BR0dSX0NUUkw6CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZXZlbnQ6ICBBTVNEVV9BR0dSX0NUUkwgJWRcbiIsCisJCSAgICAgICAqKHUxNiAqKSBhZGFwdGVyLT5ldmVudF9ib2R5KTsKKwkJYWRhcHRlci0+dHhfYnVmX3NpemUgPQorCQkJbWluKGFkYXB0ZXItPmN1cnJfdHhfYnVmX3NpemUsCisJCQkgICAgbGUxNl90b19jcHUoKihfX2xlMTYgKikgYWRhcHRlci0+ZXZlbnRfYm9keSkpOworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImV2ZW50OiB0eF9idWZfc2l6ZSAlZFxuIiwKKwkJCQlhZGFwdGVyLT50eF9idWZfc2l6ZSk7CisJCWJyZWFrOworCisJY2FzZSBFVkVOVF9XRVBfSUNWX0VSUjoKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogV0VQIElDViBlcnJvclxuIik7CisJCWJyZWFrOworCisJY2FzZSBFVkVOVF9CV19DSEFOR0U6CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZXZlbnQ6IEJXIENoYW5nZVxuIik7CisJCWJyZWFrOworCisJY2FzZSBFVkVOVF9IT1NUV0FLRV9TVEFJRToKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogSE9TVFdBS0VfU1RBSUUgJWRcbiIsIGV2ZW50Y2F1c2UpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImV2ZW50OiB1bmtub3duIGV2ZW50IGlkOiAlI3hcbiIsCisJCQkJCQlldmVudGNhdXNlKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvc3RhX2lvY3RsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3N0YV9pb2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNTkwN2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3N0YV9pb2N0bC5jCkBAIC0wLDAgKzEsMTU5MyBAQAorLyoKKyAqIE1hcnZlbGwgV2lyZWxlc3MgTEFOIGRldmljZSBkcml2ZXI6IGZ1bmN0aW9ucyBmb3Igc3RhdGlvbiBpb2N0bAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQKKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKyAqLworCisjaW5jbHVkZSAiZGVjbC5oIgorI2luY2x1ZGUgImlvY3RsLmgiCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgImZ3LmgiCisjaW5jbHVkZSAibWFpbi5oIgorI2luY2x1ZGUgIndtbS5oIgorI2luY2x1ZGUgIjExbi5oIgorI2luY2x1ZGUgImNmZzgwMjExLmgiCisKKy8qCisgKiBDb3BpZXMgdGhlIG11bHRpY2FzdCBhZGRyZXNzIGxpc3QgZnJvbSBkZXZpY2UgdG8gZHJpdmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdmFsaWRhdGUgdGhlIGRlc3RpbmF0aW9uIG1lbW9yeSBmb3IKKyAqIHNpemUsIGFuZCB0aGUgY2FsbGluZyBmdW5jdGlvbiBtdXN0IGVuc3VyZSBlbm91Z2ggbWVtb3J5IGlzCisgKiBhdmFpbGFibGUuCisgKi8KK2ludCBtd2lmaWV4X2NvcHlfbWNhc3RfYWRkcihzdHJ1Y3QgbXdpZmlleF9tdWx0aWNhc3RfbGlzdCAqbWxpc3QsCisJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpbnQgaSA9IDA7CisJc3RydWN0IG5ldGRldl9od19hZGRyICpoYTsKKworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBkZXYpCisJCW1lbWNweSgmbWxpc3QtPm1hY19saXN0W2krK10sIGhhLT5hZGRyLCBFVEhfQUxFTik7CisKKwlyZXR1cm4gaTsKK30KKworLyoKKyAqIFdhaXQgcXVldWUgY29tcGxldGlvbiBoYW5kbGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2FpdHMgb24gYSBjbWQgd2FpdCBxdWV1ZS4gSXQgYWxzbyBjYW5jZWxzIHRoZSBwZW5kaW5nCisgKiByZXF1ZXN0IGFmdGVyIHdha2luZyB1cCwgaW4gY2FzZSBvZiBlcnJvcnMuCisgKi8KK2ludCBtd2lmaWV4X3dhaXRfcXVldWVfY29tcGxldGUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlib29sIGNhbmNlbF9mbGFnID0gZmFsc2U7CisJaW50IHN0YXR1cyA9IGFkYXB0ZXItPmNtZF93YWl0X3Euc3RhdHVzOworCisJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJjbWQgcGVuZGluZ1xuIik7CisJYXRvbWljX2luYygmYWRhcHRlci0+Y21kX3BlbmRpbmcpOworCisJLyogU3RhdHVzIHBlbmRpbmcsIHdha2UgdXAgbWFpbiBwcm9jZXNzICovCisJcXVldWVfd29yayhhZGFwdGVyLT53b3JrcXVldWUsICZhZGFwdGVyLT5tYWluX3dvcmspOworCisJLyogV2FpdCBmb3IgY29tcGxldGlvbiAqLworCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShhZGFwdGVyLT5jbWRfd2FpdF9xLndhaXQsCisJCQkJCWFkYXB0ZXItPmNtZF93YWl0X3EuY29uZGl0aW9uKTsKKwlpZiAoIWFkYXB0ZXItPmNtZF93YWl0X3EuY29uZGl0aW9uKQorCQljYW5jZWxfZmxhZyA9IHRydWU7CisKKwlpZiAoY2FuY2VsX2ZsYWcpIHsKKwkJbXdpZmlleF9jYW5jZWxfcGVuZGluZ19pb2N0bChhZGFwdGVyKTsKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJjbWQgY2FuY2VsXG4iKTsKKwl9CisJYWRhcHRlci0+Y21kX3dhaXRfcS5zdGF0dXMgPSAwOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgdGhlIGNvcnJlY3QgZmlybXdhcmUgY29tbWFuZCBhbmQKKyAqIGlzc3VlcyBpdCB0byBzZXQgdGhlIG11bHRpY2FzdCBsaXN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gZW5hYmxlIHByb21pc2N1b3VzIG1vZGUsIG9yIGVuYWJsZSBhbGwKKyAqIG11bHRpY2FzdCBwYWNrZXRzLCBvciB0byBlbmFibGUgc2VsZWN0aXZlIG11bHRpY2FzdC4KKyAqLworaW50IG13aWZpZXhfcmVxdWVzdF9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQlzdHJ1Y3QgbXdpZmlleF9tdWx0aWNhc3RfbGlzdCAqbWNhc3RfbGlzdCkKK3sKKwlpbnQgcmV0ID0gMDsKKwl1MTYgb2xkX3BrdF9maWx0ZXI7CisKKwlvbGRfcGt0X2ZpbHRlciA9IHByaXYtPmN1cnJfcGt0X2ZpbHRlcjsKKworCWlmIChtY2FzdF9saXN0LT5tb2RlID09IE1XSUZJRVhfUFJPTUlTQ19NT0RFKSB7CisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogRW5hYmxlIFByb21pc2N1b3VzIG1vZGVcbiIpOworCQlwcml2LT5jdXJyX3BrdF9maWx0ZXIgfD0gSG9zdENtZF9BQ1RfTUFDX1BST01JU0NVT1VTX0VOQUJMRTsKKwkJcHJpdi0+Y3Vycl9wa3RfZmlsdGVyICY9CisJCQl+SG9zdENtZF9BQ1RfTUFDX0FMTF9NVUxUSUNBU1RfRU5BQkxFOworCX0gZWxzZSB7CisJCS8qIE11bHRpY2FzdCAqLworCQlwcml2LT5jdXJyX3BrdF9maWx0ZXIgJj0gfkhvc3RDbWRfQUNUX01BQ19QUk9NSVNDVU9VU19FTkFCTEU7CisJCWlmIChtY2FzdF9saXN0LT5tb2RlID09IE1XSUZJRVhfTVVMVElDQVNUX01PREUpIHsKKwkJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJCSJpbmZvOiBFbmFibGluZyBBbGwgTXVsdGljYXN0IVxuIik7CisJCQlwcml2LT5jdXJyX3BrdF9maWx0ZXIgfD0KKwkJCQlIb3N0Q21kX0FDVF9NQUNfQUxMX01VTFRJQ0FTVF9FTkFCTEU7CisJCX0gZWxzZSB7CisJCQlwcml2LT5jdXJyX3BrdF9maWx0ZXIgJj0KKwkJCQl+SG9zdENtZF9BQ1RfTUFDX0FMTF9NVUxUSUNBU1RfRU5BQkxFOworCQkJaWYgKG1jYXN0X2xpc3QtPm51bV9tdWx0aWNhc3RfYWRkcikgeworCQkJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJCQkiaW5mbzogU2V0IG11bHRpY2FzdCBsaXN0PSVkXG4iLAorCQkJCSAgICAgICBtY2FzdF9saXN0LT5udW1fbXVsdGljYXN0X2FkZHIpOworCQkJCS8qIFNldCBtdWx0aWNhc3QgYWRkcmVzc2VzIHRvIGZpcm13YXJlICovCisJCQkJaWYgKG9sZF9wa3RfZmlsdGVyID09IHByaXYtPmN1cnJfcGt0X2ZpbHRlcikgeworCQkJCQkvKiBTZW5kIHJlcXVlc3QgdG8gZmlybXdhcmUgKi8KKwkJCQkJcmV0ID0gbXdpZmlleF9zZW5kX2NtZF9hc3luYyhwcml2LAorCQkJCQkJSG9zdENtZF9DTURfTUFDX01VTFRJQ0FTVF9BRFIsCisJCQkJCQlIb3N0Q21kX0FDVF9HRU5fU0VULCAwLAorCQkJCQkJbWNhc3RfbGlzdCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogU2VuZCByZXF1ZXN0IHRvIGZpcm13YXJlICovCisJCQkJCXJldCA9IG13aWZpZXhfc2VuZF9jbWRfYXN5bmMocHJpdiwKKwkJCQkJCUhvc3RDbWRfQ01EX01BQ19NVUxUSUNBU1RfQURSLAorCQkJCQkJSG9zdENtZF9BQ1RfR0VOX1NFVCwgMCwKKwkJCQkJCW1jYXN0X2xpc3QpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwKKwkJImluZm86IG9sZF9wa3RfZmlsdGVyPSUjeCwgY3Vycl9wa3RfZmlsdGVyPSUjeFxuIiwKKwkgICAgICAgb2xkX3BrdF9maWx0ZXIsIHByaXYtPmN1cnJfcGt0X2ZpbHRlcik7CisJaWYgKG9sZF9wa3RfZmlsdGVyICE9IHByaXYtPmN1cnJfcGt0X2ZpbHRlcikgeworCQlyZXQgPSBtd2lmaWV4X3NlbmRfY21kX2FzeW5jKHByaXYsIEhvc3RDbWRfQ01EX01BQ19DT05UUk9MLAorCQkJCQkgICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsCisJCQkJCSAgICAgMCwgJnByaXYtPmN1cnJfcGt0X2ZpbHRlcik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEluIEFkLUhvYyBtb2RlLCB0aGUgSUJTUyBpcyBjcmVhdGVkIGlmIG5vdCBmb3VuZCBpbiBzY2FuIGxpc3QuCisgKiBJbiBib3RoIEFkLUhvYyBhbmQgaW5mcmEgbW9kZSwgYW4gZGVhdXRoZW50aWNhdGlvbiBpcyBwZXJmb3JtZWQKKyAqIGZpcnN0LgorICovCitpbnQgbXdpZmlleF9ic3Nfc3RhcnQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJICAgICAgc3RydWN0IG13aWZpZXhfc3NpZF9ic3NpZCAqc3NpZF9ic3NpZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXMzMiBpID0gLTE7CisKKwlwcml2LT5zY2FuX2Jsb2NrID0gZmFsc2U7CisJaWYgKCFzc2lkX2Jzc2lkKQorCQlyZXR1cm4gLTE7CisKKwlpZiAocHJpdi0+YnNzX21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQkvKiBJbmZyYSBtb2RlICovCisJCXJldCA9IG13aWZpZXhfZGVhdXRoZW50aWNhdGUocHJpdiwgTlVMTCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCS8qIFNlYXJjaCBmb3IgdGhlIHJlcXVlc3RlZCBTU0lEIGluIHRoZSBzY2FuIHRhYmxlICovCisJCWlmIChzc2lkX2Jzc2lkLT5zc2lkLnNzaWRfbGVuKQorCQkJaSA9IG13aWZpZXhfZmluZF9zc2lkX2luX2xpc3QocHJpdiwgJnNzaWRfYnNzaWQtPnNzaWQsCisJCQkJCQlOVUxMLCBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKTsKKwkJZWxzZQorCQkJaSA9IG13aWZpZXhfZmluZF9ic3NpZF9pbl9saXN0KHByaXYsCisJCQkJCQkodTggKikgJnNzaWRfYnNzaWQtPmJzc2lkLAorCQkJCQkJTkw4MDIxMV9JRlRZUEVfU1RBVElPTik7CisJCWlmIChpIDwgMCkKKwkJCXJldHVybiAtMTsKKworCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwKKwkJCSJpbmZvOiBTU0lEIGZvdW5kIGluIHNjYW4gbGlzdCAuLi4gYXNzb2NpYXRpbmcuLi5cbiIpOworCisJCS8qIENsZWFyIGFueSBwYXN0IGFzc29jaWF0aW9uIHJlc3BvbnNlIHN0b3JlZCBmb3IKKwkJICogYXBwbGljYXRpb24gcmV0cmlldmFsICovCisJCXByaXYtPmFzc29jX3JzcF9zaXplID0gMDsKKwkJcmV0ID0gbXdpZmlleF9hc3NvY2lhdGUocHJpdiwgJmFkYXB0ZXItPnNjYW5fdGFibGVbaV0pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9IGVsc2UgeworCQkvKiBBZGhvYyBtb2RlICovCisJCS8qIElmIHRoZSByZXF1ZXN0ZWQgU1NJRCBtYXRjaGVzIGN1cnJlbnQgU1NJRCwgcmV0dXJuICovCisJCWlmIChzc2lkX2Jzc2lkLT5zc2lkLnNzaWRfbGVuICYmCisJCSAgICAoIW13aWZpZXhfc3NpZF9jbXAKKwkJICAgICAoJnByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvci5zc2lkLAorCQkgICAgICAmc3NpZF9ic3NpZC0+c3NpZCkpKQorCQkJcmV0dXJuIDA7CisKKwkJLyogRXhpdCBBZGhvYyBtb2RlIGZpcnN0ICovCisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogU2VuZGluZyBBZGhvYyBTdG9wXG4iKTsKKwkJcmV0ID0gbXdpZmlleF9kZWF1dGhlbnRpY2F0ZShwcml2LCBOVUxMKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcHJpdi0+YWRob2NfaXNfbGlua19zZW5zZWQgPSBmYWxzZTsKKworCQkvKiBTZWFyY2ggZm9yIHRoZSByZXF1ZXN0ZWQgbmV0d29yayBpbiB0aGUgc2NhbiB0YWJsZSAqLworCQlpZiAoc3NpZF9ic3NpZC0+c3NpZC5zc2lkX2xlbikKKwkJCWkgPSBtd2lmaWV4X2ZpbmRfc3NpZF9pbl9saXN0KHByaXYsCisJCQkJCQkgICAgICAmc3NpZF9ic3NpZC0+c3NpZCwgTlVMTCwKKwkJCQkJCSAgICAgIE5MODAyMTFfSUZUWVBFX0FESE9DKTsKKwkJZWxzZQorCQkJaSA9IG13aWZpZXhfZmluZF9ic3NpZF9pbl9saXN0KHByaXYsCisJCQkJCQkgICAgICAgKHU4ICopJnNzaWRfYnNzaWQtPmJzc2lkLAorCQkJCQkJICAgICAgIE5MODAyMTFfSUZUWVBFX0FESE9DKTsKKworCQlpZiAoaSA+PSAwKSB7CisJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IG5ldHdvcmsgZm91bmQgaW4gc2NhbiIKKwkJCQkJCQkiIGxpc3QuIEpvaW5pbmcuLi5cbiIpOworCQkJcmV0ID0gbXdpZmlleF9hZGhvY19qb2luKHByaXYsICZhZGFwdGVyLT5zY2FuX3RhYmxlW2ldKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJfSBlbHNlIHsKKwkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogTmV0d29yayBub3QgZm91bmQgaW4gIgorCQkJCSJ0aGUgbGlzdCwgY3JlYXRpbmcgYWRob2Mgd2l0aCBzc2lkID0gJXNcbiIsCisJCQkgICAgICAgc3NpZF9ic3NpZC0+c3NpZC5zc2lkKTsKKwkJCXJldCA9IG13aWZpZXhfYWRob2Nfc3RhcnQocHJpdiwgJnNzaWRfYnNzaWQtPnNzaWQpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIElPQ1RMIHJlcXVlc3QgaGFuZGxlciB0byBzZXQgaG9zdCBzbGVlcCBjb25maWd1cmF0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgdGhlIGNvcnJlY3QgZmlybXdhcmUgY29tbWFuZCBhbmQKKyAqIGlzc3VlcyBpdC4KKyAqLworaW50IG13aWZpZXhfc2V0X2hzX3BhcmFtcyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1MTYgYWN0aW9uLAorCQkJICBpbnQgY21kX3R5cGUsIHN0cnVjdCBtd2lmaWV4X2RzX2hzX2NmZyAqaHNfY2ZnKQorCit7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJaW50IHN0YXR1cyA9IDA7CisJdTMyIHByZXZfY29uZCA9IDA7CisKKwlpZiAoIWhzX2NmZykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgSG9zdENtZF9BQ1RfR0VOX1NFVDoKKwkJaWYgKGFkYXB0ZXItPnBwc191YXBzZF9tb2RlKSB7CisJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IEhvc3QgU2xlZXAgSU9DVEwiCisJCQkJIiBpcyBibG9ja2VkIGluIFVBUFNEL1BQUyBtb2RlXG4iKTsKKwkJCXN0YXR1cyA9IC0xOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGhzX2NmZy0+aXNfaW52b2tlX2hvc3RjbWQpIHsKKwkJCWlmIChoc19jZmctPmNvbmRpdGlvbnMgPT0gSE9TVF9TTEVFUF9DRkdfQ0FOQ0VMKSB7CisJCQkJaWYgKCFhZGFwdGVyLT5pc19oc19jb25maWd1cmVkKQorCQkJCQkvKiBBbHJlYWR5IGNhbmNlbGxlZCAqLworCQkJCQlicmVhazsKKwkJCQkvKiBTYXZlIHByZXZpb3VzIGNvbmRpdGlvbiAqLworCQkJCXByZXZfY29uZCA9IGxlMzJfdG9fY3B1KGFkYXB0ZXItPmhzX2NmZworCQkJCQkJCS5jb25kaXRpb25zKTsKKwkJCQlhZGFwdGVyLT5oc19jZmcuY29uZGl0aW9ucyA9CisJCQkJCQljcHVfdG9fbGUzMihoc19jZmctPmNvbmRpdGlvbnMpOworCQkJfSBlbHNlIGlmIChoc19jZmctPmNvbmRpdGlvbnMpIHsKKwkJCQlhZGFwdGVyLT5oc19jZmcuY29uZGl0aW9ucyA9CisJCQkJCQljcHVfdG9fbGUzMihoc19jZmctPmNvbmRpdGlvbnMpOworCQkJCWFkYXB0ZXItPmhzX2NmZy5ncGlvID0gKHU4KWhzX2NmZy0+Z3BpbzsKKwkJCQlpZiAoaHNfY2ZnLT5nYXApCisJCQkJCWFkYXB0ZXItPmhzX2NmZy5nYXAgPSAodTgpaHNfY2ZnLT5nYXA7CisJCQl9IGVsc2UgaWYgKGFkYXB0ZXItPmhzX2NmZy5jb25kaXRpb25zID09CisJCQkJCQljcHVfdG9fbGUzMigKKwkJCQkJCUhPU1RfU0xFRVBfQ0ZHX0NBTkNFTCkpIHsKKwkJCQkvKiBSZXR1cm4gZmFpbHVyZSBpZiBubyBwYXJhbWV0ZXJzIGZvciBIUworCQkJCSAgIGVuYWJsZSAqLworCQkJCXN0YXR1cyA9IC0xOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGNtZF90eXBlID09IE1XSUZJRVhfU1lOQ19DTUQpCisJCQkJc3RhdHVzID0gbXdpZmlleF9zZW5kX2NtZF9zeW5jKHByaXYsCisJCQkJCQlIb3N0Q21kX0NNRF84MDJfMTFfSFNfQ0ZHX0VOSCwKKwkJCQkJCUhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsCisJCQkJCQkmYWRhcHRlci0+aHNfY2ZnKTsKKwkJCWVsc2UKKwkJCQlzdGF0dXMgPSBtd2lmaWV4X3NlbmRfY21kX2FzeW5jKHByaXYsCisJCQkJCQlIb3N0Q21kX0NNRF84MDJfMTFfSFNfQ0ZHX0VOSCwKKwkJCQkJCUhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsCisJCQkJCQkmYWRhcHRlci0+aHNfY2ZnKTsKKwkJCWlmIChoc19jZmctPmNvbmRpdGlvbnMgPT0gSE9TVF9TTEVFUF9DRkdfQ0FOQ0VMKQorCQkJCS8qIFJlc3RvcmUgcHJldmlvdXMgY29uZGl0aW9uICovCisJCQkJYWRhcHRlci0+aHNfY2ZnLmNvbmRpdGlvbnMgPQorCQkJCQkJY3B1X3RvX2xlMzIocHJldl9jb25kKTsKKwkJfSBlbHNlIHsKKwkJCWFkYXB0ZXItPmhzX2NmZy5jb25kaXRpb25zID0KKwkJCQljcHVfdG9fbGUzMihoc19jZmctPmNvbmRpdGlvbnMpOworCQkJYWRhcHRlci0+aHNfY2ZnLmdwaW8gPSAodTgpaHNfY2ZnLT5ncGlvOworCQkJYWRhcHRlci0+aHNfY2ZnLmdhcCA9ICh1OCloc19jZmctPmdhcDsKKwkJfQorCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQUNUX0dFTl9HRVQ6CisJCWhzX2NmZy0+Y29uZGl0aW9ucyA9IGxlMzJfdG9fY3B1KGFkYXB0ZXItPmhzX2NmZy5jb25kaXRpb25zKTsKKwkJaHNfY2ZnLT5ncGlvID0gYWRhcHRlci0+aHNfY2ZnLmdwaW87CisJCWhzX2NmZy0+Z2FwID0gYWRhcHRlci0+aHNfY2ZnLmdhcDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3RhdHVzID0gLTE7CisJCWJyZWFrOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBTZW5kcyBJT0NUTCByZXF1ZXN0IHRvIGNhbmNlbCB0aGUgZXhpc3RpbmcgSG9zdCBTbGVlcCBjb25maWd1cmF0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIHRoZSBJT0NUTCByZXF1ZXN0IGJ1ZmZlciwgZmlsbHMgaXQKKyAqIHdpdGggcmVxdWlzaXRlIHBhcmFtZXRlcnMgYW5kIGNhbGxzIHRoZSBJT0NUTCBoYW5kbGVyLgorICovCitpbnQgbXdpZmlleF9jYW5jZWxfaHMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgaW50IGNtZF90eXBlKQoreworCXN0cnVjdCBtd2lmaWV4X2RzX2hzX2NmZyBoc2NmZzsKKworCWhzY2ZnLmNvbmRpdGlvbnMgPSBIT1NUX1NMRUVQX0NGR19DQU5DRUw7CisJaHNjZmcuaXNfaW52b2tlX2hvc3RjbWQgPSB0cnVlOworCisJcmV0dXJuIG13aWZpZXhfc2V0X2hzX3BhcmFtcyhwcml2LCBIb3N0Q21kX0FDVF9HRU5fU0VULAorCQkJCSAgICBjbWRfdHlwZSwgJmhzY2ZnKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG13aWZpZXhfY2FuY2VsX2hzKTsKKworLyoKKyAqIFNlbmRzIElPQ1RMIHJlcXVlc3QgdG8gY2FuY2VsIHRoZSBleGlzdGluZyBIb3N0IFNsZWVwIGNvbmZpZ3VyYXRpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgdGhlIElPQ1RMIHJlcXVlc3QgYnVmZmVyLCBmaWxscyBpdAorICogd2l0aCByZXF1aXNpdGUgcGFyYW1ldGVycyBhbmQgY2FsbHMgdGhlIElPQ1RMIGhhbmRsZXIuCisgKi8KK2ludCBtd2lmaWV4X2VuYWJsZV9ocyhzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBtd2lmaWV4X2RzX2hzX2NmZyBoc2NmZzsKKworCWlmIChhZGFwdGVyLT5oc19hY3RpdmF0ZWQpIHsKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJjbWQ6IEhTIEFscmVhZHkgYWN0aXZlZFxuIik7CisJCXJldHVybiB0cnVlOworCX0KKworCWFkYXB0ZXItPmhzX2FjdGl2YXRlX3dhaXRfcV93b2tlbiA9IGZhbHNlOworCisJbWVtc2V0KCZoc2NmZywgMCwgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2hzX2NvbmZpZ19wYXJhbSkpOworCWhzY2ZnLmlzX2ludm9rZV9ob3N0Y21kID0gdHJ1ZTsKKworCWlmIChtd2lmaWV4X3NldF9oc19wYXJhbXMobXdpZmlleF9nZXRfcHJpdihhZGFwdGVyLAorCQkJCQkJICAgICAgIE1XSUZJRVhfQlNTX1JPTEVfU1RBKSwKKwkJCQkgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIE1XSUZJRVhfU1lOQ19DTUQsCisJCQkJICAmaHNjZmcpKSB7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiSU9DVEwgcmVxdWVzdCBIUyBlbmFibGUgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShhZGFwdGVyLT5oc19hY3RpdmF0ZV93YWl0X3EsCisJCQlhZGFwdGVyLT5oc19hY3RpdmF0ZV93YWl0X3Ffd29rZW4pOworCisJcmV0dXJuIHRydWU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtd2lmaWV4X2VuYWJsZV9ocyk7CisKKy8qCisgKiBJT0NUTCByZXF1ZXN0IGhhbmRsZXIgdG8gZ2V0IEJTUyBpbmZvcm1hdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbGxhdGVzIHRoZSBpbmZvcm1hdGlvbiBmcm9tIGRpZmZlcmVudCBkcml2ZXIgc3RydWN0dXJlcworICogdG8gc2VuZCB0byB0aGUgdXNlci4KKyAqLworaW50IG13aWZpZXhfZ2V0X2Jzc19pbmZvKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgc3RydWN0IG13aWZpZXhfYnNzX2luZm8gKmluZm8pCit7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2M7CisJczMyIHRibF9pZHg7CisKKwlpZiAoIWluZm8pCisJCXJldHVybiAtMTsKKworCWJzc19kZXNjID0gJnByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvcjsKKworCWluZm8tPmJzc19tb2RlID0gcHJpdi0+YnNzX21vZGU7CisKKwltZW1jcHkoJmluZm8tPnNzaWQsICZic3NfZGVzYy0+c3NpZCwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4XzgwMl8xMV9zc2lkKSk7CisKKwltZW1jcHkoJmluZm8tPmJzc2lkLCAmYnNzX2Rlc2MtPm1hY19hZGRyZXNzLCBFVEhfQUxFTik7CisKKwlpbmZvLT5ic3NfY2hhbiA9IGJzc19kZXNjLT5jaGFubmVsOworCisJaW5mby0+cmVnaW9uX2NvZGUgPSBhZGFwdGVyLT5yZWdpb25fY29kZTsKKworCS8qIFNjYW4gdGFibGUgaW5kZXggaWYgY29ubmVjdGVkICovCisJaW5mby0+c2Nhbl90YWJsZV9pZHggPSAwOworCWlmIChwcml2LT5tZWRpYV9jb25uZWN0ZWQpIHsKKwkJdGJsX2lkeCA9CisJCQltd2lmaWV4X2ZpbmRfc3NpZF9pbl9saXN0KHByaXYsICZic3NfZGVzYy0+c3NpZCwKKwkJCQkJCSAgYnNzX2Rlc2MtPm1hY19hZGRyZXNzLAorCQkJCQkJICBwcml2LT5ic3NfbW9kZSk7CisJCWlmICh0YmxfaWR4ID49IDApCisJCQlpbmZvLT5zY2FuX3RhYmxlX2lkeCA9IHRibF9pZHg7CisJfQorCisJaW5mby0+bWVkaWFfY29ubmVjdGVkID0gcHJpdi0+bWVkaWFfY29ubmVjdGVkOworCisJaW5mby0+bWF4X3Bvd2VyX2xldmVsID0gcHJpdi0+bWF4X3R4X3Bvd2VyX2xldmVsOworCWluZm8tPm1pbl9wb3dlcl9sZXZlbCA9IHByaXYtPm1pbl90eF9wb3dlcl9sZXZlbDsKKworCWluZm8tPmFkaG9jX3N0YXRlID0gcHJpdi0+YWRob2Nfc3RhdGU7CisKKwlpbmZvLT5iY25fbmZfbGFzdCA9IHByaXYtPmJjbl9uZl9sYXN0OworCisJaWYgKHByaXYtPnNlY19pbmZvLndlcF9zdGF0dXMgPT0gTVdJRklFWF84MDJfMTFfV0VQX0VOQUJMRUQpCisJCWluZm8tPndlcF9zdGF0dXMgPSB0cnVlOworCWVsc2UKKwkJaW5mby0+d2VwX3N0YXR1cyA9IGZhbHNlOworCisJaW5mby0+aXNfaHNfY29uZmlndXJlZCA9IGFkYXB0ZXItPmlzX2hzX2NvbmZpZ3VyZWQ7CisJaW5mby0+aXNfZGVlcF9zbGVlcCA9IGFkYXB0ZXItPmlzX2RlZXBfc2xlZXA7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoZSBmdW5jdGlvbiBzZXRzIGJhbmQgY29uZmlndXJhdGlvbnMuCisgKgorICogaXQgcGVyZm9ybXMgZXh0cmEgY2hlY2tzIHRvIG1ha2Ugc3VyZSB0aGUgQWQtSG9jCisgKiBiYW5kIGFuZCBjaGFubmVsIGFyZSBjb21wYXRpYmxlLiBPdGhlcndpc2UgaXQgcmV0dXJucyBhbiBlcnJvci4KKyAqCisgKi8KK2ludCBtd2lmaWV4X3NldF9yYWRpb19iYW5kX2NmZyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICAgIHN0cnVjdCBtd2lmaWV4X2RzX2JhbmRfY2ZnICpyYWRpb19jZmcpCit7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJdTggaW5mcmFfYmFuZCwgYWRob2NfYmFuZDsKKwl1MzIgYWRob2NfY2hhbm5lbDsKKworCWluZnJhX2JhbmQgPSAodTgpIHJhZGlvX2NmZy0+Y29uZmlnX2JhbmRzOworCWFkaG9jX2JhbmQgPSAodTgpIHJhZGlvX2NmZy0+YWRob2Nfc3RhcnRfYmFuZDsKKwlhZGhvY19jaGFubmVsID0gcmFkaW9fY2ZnLT5hZGhvY19jaGFubmVsOworCisJLyogU0VUIEluZnJhIGJhbmQgKi8KKwlpZiAoKGluZnJhX2JhbmQgfCBhZGFwdGVyLT5md19iYW5kcykgJiB+YWRhcHRlci0+ZndfYmFuZHMpCisJCXJldHVybiAtMTsKKworCWFkYXB0ZXItPmNvbmZpZ19iYW5kcyA9IGluZnJhX2JhbmQ7CisKKwkvKiBTRVQgQWQtaG9jIEJhbmQgKi8KKwlpZiAoKGFkaG9jX2JhbmQgfCBhZGFwdGVyLT5md19iYW5kcykgJiB+YWRhcHRlci0+ZndfYmFuZHMpCisJCXJldHVybiAtMTsKKworCWlmIChhZGhvY19iYW5kKQorCQlhZGFwdGVyLT5hZGhvY19zdGFydF9iYW5kID0gYWRob2NfYmFuZDsKKwlhZGFwdGVyLT5jaGFuX29mZnNldCA9ICh1OCkgcmFkaW9fY2ZnLT5zZWNfY2hhbl9vZmZzZXQ7CisJLyoKKwkgKiBJZiBubyBhZGhvY19jaGFubmVsIGlzIHN1cHBsaWVkIHZlcmlmeSBpZiB0aGUgZXhpc3RpbmcgYWRob2MKKwkgKiBjaGFubmVsIGNvbXBpbGVzIHdpdGggbmV3IGFkaG9jX2JhbmQKKwkgKi8KKwlpZiAoIWFkaG9jX2NoYW5uZWwpIHsKKwkJaWYgKCFtd2lmaWV4X2dldF9jZnBfYnlfYmFuZF9hbmRfY2hhbm5lbF9mcm9tX2NmZzgwMjExCisJCSAgICAgKHByaXYsIGFkYXB0ZXItPmFkaG9jX3N0YXJ0X2JhbmQsCisJCSAgICAgcHJpdi0+YWRob2NfY2hhbm5lbCkpIHsKKwkJCS8qIFBhc3MgYmFjayB0aGUgZGVmYXVsdCBjaGFubmVsICovCisJCQlyYWRpb19jZmctPmFkaG9jX2NoYW5uZWwgPSBERUZBVUxUX0FEX0hPQ19DSEFOTkVMOworCQkJaWYgKChhZGFwdGVyLT5hZGhvY19zdGFydF9iYW5kICYgQkFORF9BKQorCQkJICAgIHx8IChhZGFwdGVyLT5hZGhvY19zdGFydF9iYW5kICYgQkFORF9BTikpCisJCQkJcmFkaW9fY2ZnLT5hZGhvY19jaGFubmVsID0KKwkJCQkJREVGQVVMVF9BRF9IT0NfQ0hBTk5FTF9BOworCQl9CisJfSBlbHNlIHsJLyogUmV0cnVybiBlcnJvciBpZiBhZGhvY19iYW5kIGFuZAorCQkJICAgYWRob2NfY2hhbm5lbCBjb21iaW5hdGlvbiBpcyBpbnZhbGlkICovCisJCWlmICghbXdpZmlleF9nZXRfY2ZwX2J5X2JhbmRfYW5kX2NoYW5uZWxfZnJvbV9jZmc4MDIxMQorCQkgICAgKHByaXYsIGFkYXB0ZXItPmFkaG9jX3N0YXJ0X2JhbmQsICh1MTYpIGFkaG9jX2NoYW5uZWwpKQorCQkJcmV0dXJuIC0xOworCQlwcml2LT5hZGhvY19jaGFubmVsID0gKHU4KSBhZGhvY19jaGFubmVsOworCX0KKwlpZiAoKGFkaG9jX2JhbmQgJiBCQU5EX0dOKSB8fCAoYWRob2NfYmFuZCAmIEJBTkRfQU4pKQorCQlhZGFwdGVyLT5hZGhvY18xMW5fZW5hYmxlZCA9IHRydWU7CisJZWxzZQorCQlhZGFwdGVyLT5hZGhvY18xMW5fZW5hYmxlZCA9IGZhbHNlOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJT0NUTCByZXF1ZXN0IGhhbmRsZXIgdG8gc2V0L2dldCBhY3RpdmUgY2hhbm5lbC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHZhbGlkaXR5IGNoZWNraW5nIG9uIGNoYW5uZWwvZnJlcXVlbmN5CisgKiBjb21wYXRpYmlsaXR5IGFuZCByZXR1cm5zIGZhaWx1cmUgaWYgbm90IHZhbGlkLgorICovCitpbnQgbXdpZmlleF9ic3Nfc2V0X2NoYW5uZWwoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgbXdpZmlleF9jaGFuX2ZyZXFfcG93ZXIgKmNoYW4pCit7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IG13aWZpZXhfY2hhbl9mcmVxX3Bvd2VyICpjZnAgPSBOVUxMOworCisJaWYgKCFjaGFuKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIWNoYW4tPmNoYW5uZWwgJiYgIWNoYW4tPmZyZXEpCisJCXJldHVybiAtMTsKKwlpZiAoYWRhcHRlci0+YWRob2Nfc3RhcnRfYmFuZCAmIEJBTkRfQU4pCisJCWFkYXB0ZXItPmFkaG9jX3N0YXJ0X2JhbmQgPSBCQU5EX0cgfCBCQU5EX0IgfCBCQU5EX0dOOworCWVsc2UgaWYgKGFkYXB0ZXItPmFkaG9jX3N0YXJ0X2JhbmQgJiBCQU5EX0EpCisJCWFkYXB0ZXItPmFkaG9jX3N0YXJ0X2JhbmQgPSBCQU5EX0cgfCBCQU5EX0I7CisJaWYgKGNoYW4tPmNoYW5uZWwpIHsKKwkJaWYgKGNoYW4tPmNoYW5uZWwgPD0gTUFYX0NIQU5ORUxfQkFORF9CRykKKwkJCWNmcCA9IG13aWZpZXhfZ2V0X2NmcF9ieV9iYW5kX2FuZF9jaGFubmVsX2Zyb21fY2ZnODAyMTEKKwkJCQkJKHByaXYsIDAsICh1MTYpIGNoYW4tPmNoYW5uZWwpOworCQlpZiAoIWNmcCkgeworCQkJY2ZwID0gbXdpZmlleF9nZXRfY2ZwX2J5X2JhbmRfYW5kX2NoYW5uZWxfZnJvbV9jZmc4MDIxMQorCQkJCQkocHJpdiwgQkFORF9BLCAodTE2KSBjaGFuLT5jaGFubmVsKTsKKwkJCWlmIChjZnApIHsKKwkJCQlpZiAoYWRhcHRlci0+YWRob2NfMTFuX2VuYWJsZWQpCisJCQkJCWFkYXB0ZXItPmFkaG9jX3N0YXJ0X2JhbmQgPSBCQU5EX0EKKwkJCQkJCXwgQkFORF9BTjsKKwkJCQllbHNlCisJCQkJCWFkYXB0ZXItPmFkaG9jX3N0YXJ0X2JhbmQgPSBCQU5EX0E7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlpZiAoY2hhbi0+ZnJlcSA8PSBNQVhfRlJFUVVFTkNZX0JBTkRfQkcpCisJCQljZnAgPSBtd2lmaWV4X2dldF9jZnBfYnlfYmFuZF9hbmRfZnJlcV9mcm9tX2NmZzgwMjExKAorCQkJCQkJCXByaXYsIDAsIGNoYW4tPmZyZXEpOworCQlpZiAoIWNmcCkgeworCQkJY2ZwID0gbXdpZmlleF9nZXRfY2ZwX2J5X2JhbmRfYW5kX2ZyZXFfZnJvbV9jZmc4MDIxMQorCQkJCQkJICAocHJpdiwgQkFORF9BLCBjaGFuLT5mcmVxKTsKKwkJCWlmIChjZnApIHsKKwkJCQlpZiAoYWRhcHRlci0+YWRob2NfMTFuX2VuYWJsZWQpCisJCQkJCWFkYXB0ZXItPmFkaG9jX3N0YXJ0X2JhbmQgPSBCQU5EX0EKKwkJCQkJCXwgQkFORF9BTjsKKwkJCQllbHNlCisJCQkJCWFkYXB0ZXItPmFkaG9jX3N0YXJ0X2JhbmQgPSBCQU5EX0E7CisJCQl9CisJCX0KKwl9CisJaWYgKCFjZnAgfHwgIWNmcC0+Y2hhbm5lbCkgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgImludmFsaWQgY2hhbm5lbC9mcmVxXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlwcml2LT5hZGhvY19jaGFubmVsID0gKHU4KSBjZnAtPmNoYW5uZWw7CisJY2hhbi0+Y2hhbm5lbCA9IGNmcC0+Y2hhbm5lbDsKKwljaGFuLT5mcmVxID0gY2ZwLT5mcmVxOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJT0NUTCByZXF1ZXN0IGhhbmRsZXIgdG8gc2V0L2dldCBBZC1Ib2MgY2hhbm5lbC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIHRoZSBjb3JyZWN0IGZpcm13YXJlIGNvbW1hbmQgYW5kCisgKiBpc3N1ZXMgaXQgdG8gc2V0IG9yIGdldCB0aGUgYWQtaG9jIGNoYW5uZWwuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9ic3NfaW9jdGxfaWJzc19jaGFubmVsKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJCSAgdTE2IGFjdGlvbiwgdTE2ICpjaGFubmVsKQoreworCWlmIChhY3Rpb24gPT0gSG9zdENtZF9BQ1RfR0VOX0dFVCkgeworCQlpZiAoIXByaXYtPm1lZGlhX2Nvbm5lY3RlZCkgeworCQkJKmNoYW5uZWwgPSBwcml2LT5hZGhvY19jaGFubmVsOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgeworCQlwcml2LT5hZGhvY19jaGFubmVsID0gKHU4KSAqY2hhbm5lbDsKKwl9CisKKwlyZXR1cm4gbXdpZmlleF9zZW5kX2NtZF9zeW5jKHByaXYsIEhvc3RDbWRfQ01EXzgwMl8xMV9SRl9DSEFOTkVMLAorCQkJCSAgICBhY3Rpb24sIDAsIGNoYW5uZWwpOworfQorCisvKgorICogSU9DVEwgcmVxdWVzdCBoYW5kbGVyIHRvIGZpbmQgYSBwYXJ0aWN1bGFyIEJTUy4KKyAqCisgKiBUaGUgQlNTIGNhbiBiZSBzZWFyY2hlZCB3aXRoIGVpdGhlciBhIEJTU0lEIG9yIGEgU1NJRC4gSWYgbm9uZSBvZgorICogdGhlc2UgYXJlIHByb3ZpZGVkLCBqdXN0IHRoZSBiZXN0IEJTUyAoYmVzdCBSU1NJKSBpcyByZXR1cm5lZC4KKyAqLworaW50IG13aWZpZXhfYnNzX2lvY3RsX2ZpbmRfYnNzKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgICAgc3RydWN0IG13aWZpZXhfc3NpZF9ic3NpZCAqc3NpZF9ic3NpZCkKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3QgbXdpZmlleF9ic3NkZXNjcmlwdG9yICpic3NfZGVzYzsKKwl1OCB6ZXJvX21hY1tFVEhfQUxFTl0gPSB7IDAsIDAsIDAsIDAsIDAsIDAgfTsKKwl1OCBtYWNbRVRIX0FMRU5dOworCWludCBpID0gMDsKKworCWlmIChtZW1jbXAoc3NpZF9ic3NpZC0+YnNzaWQsIHplcm9fbWFjLCBzaXplb2YoemVyb19tYWMpKSkgeworCQlpID0gbXdpZmlleF9maW5kX2Jzc2lkX2luX2xpc3QocHJpdiwKKwkJCQkJICAgICAgICh1OCAqKSBzc2lkX2Jzc2lkLT5ic3NpZCwKKwkJCQkJICAgICAgIHByaXYtPmJzc19tb2RlKTsKKwkJaWYgKGkgPCAwKSB7CisJCQltZW1jcHkobWFjLCBzc2lkX2Jzc2lkLT5ic3NpZCwgc2l6ZW9mKG1hYykpOworCQkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJjYW5ub3QgZmluZCBic3NpZCAlcE1cbiIsIG1hYyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJYnNzX2Rlc2MgPSAmYWRhcHRlci0+c2Nhbl90YWJsZVtpXTsKKwkJbWVtY3B5KCZzc2lkX2Jzc2lkLT5zc2lkLCAmYnNzX2Rlc2MtPnNzaWQsCisJCQkJc2l6ZW9mKHN0cnVjdCBtd2lmaWV4XzgwMl8xMV9zc2lkKSk7CisJfSBlbHNlIGlmIChzc2lkX2Jzc2lkLT5zc2lkLnNzaWRfbGVuKSB7CisJCWkgPSBtd2lmaWV4X2ZpbmRfc3NpZF9pbl9saXN0KHByaXYsICZzc2lkX2Jzc2lkLT5zc2lkLCBOVUxMLAorCQkJCQkgICAgICBwcml2LT5ic3NfbW9kZSk7CisJCWlmIChpIDwgMCkgeworCQkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJjYW5ub3QgZmluZCBzc2lkICVzXG4iLAorCQkJCQlzc2lkX2Jzc2lkLT5zc2lkLnNzaWQpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWJzc19kZXNjID0gJmFkYXB0ZXItPnNjYW5fdGFibGVbaV07CisJCW1lbWNweShzc2lkX2Jzc2lkLT5ic3NpZCwgYnNzX2Rlc2MtPm1hY19hZGRyZXNzLCBFVEhfQUxFTik7CisJfSBlbHNlIHsKKwkJcmV0dXJuIG13aWZpZXhfZmluZF9iZXN0X25ldHdvcmsocHJpdiwgc3NpZF9ic3NpZCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJT0NUTCByZXF1ZXN0IGhhbmRsZXIgdG8gY2hhbmdlIEFkLUhvYyBjaGFubmVsLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIHRoZSBJT0NUTCByZXF1ZXN0IGJ1ZmZlciwgZmlsbHMgaXQKKyAqIHdpdGggcmVxdWlzaXRlIHBhcmFtZXRlcnMgYW5kIGNhbGxzIHRoZSBJT0NUTCBoYW5kbGVyLgorICoKKyAqIFRoZSBmdW5jdGlvbiBmb2xsb3dzIHRoZSBmb2xsb3dpbmcgc3RlcHMgdG8gcGVyZm9ybSB0aGUgY2hhbmdlIC0KKyAqICAgICAgLSBHZXQgY3VycmVudCBJQlNTIGluZm9ybWF0aW9uCisgKiAgICAgIC0gR2V0IGN1cnJlbnQgY2hhbm5lbAorICogICAgICAtIElmIG5vIGNoYW5nZSBpcyByZXF1aXJlZCwgcmV0dXJuCisgKiAgICAgIC0gSWYgbm90IGNvbm5lY3RlZCwgY2hhbmdlIGNoYW5uZWwgYW5kIHJldHVybgorICogICAgICAtIElmIGNvbm5lY3RlZCwKKyAqICAgICAgICAgIC0gRGlzY29ubmVjdAorICogICAgICAgICAgLSBDaGFuZ2UgY2hhbm5lbAorICogICAgICAgICAgLSBQZXJmb3JtIHNwZWNpZmljIFNTSUQgc2NhbiB3aXRoIHNhbWUgU1NJRAorICogICAgICAgICAgLSBTdGFydC9Kb2luIHRoZSBJQlNTCisgKi8KK2ludAorbXdpZmlleF9kcnZfY2hhbmdlX2FkaG9jX2NoYW4oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgaW50IGNoYW5uZWwpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbXdpZmlleF9ic3NfaW5mbyBic3NfaW5mbzsKKwlzdHJ1Y3QgbXdpZmlleF9zc2lkX2Jzc2lkIHNzaWRfYnNzaWQ7CisJdTE2IGN1cnJfY2hhbiA9IDA7CisKKwltZW1zZXQoJmJzc19pbmZvLCAwLCBzaXplb2YoYnNzX2luZm8pKTsKKworCS8qIEdldCBCU1MgaW5mb3JtYXRpb24gKi8KKwlpZiAobXdpZmlleF9nZXRfYnNzX2luZm8ocHJpdiwgJmJzc19pbmZvKSkKKwkJcmV0dXJuIC0xOworCisJLyogR2V0IGN1cnJlbnQgY2hhbm5lbCAqLworCXJldCA9IG13aWZpZXhfYnNzX2lvY3RsX2lic3NfY2hhbm5lbChwcml2LCBIb3N0Q21kX0FDVF9HRU5fR0VULAorCQkJCQkgICAgICZjdXJyX2NoYW4pOworCisJaWYgKGN1cnJfY2hhbiA9PSBjaGFubmVsKSB7CisJCXJldCA9IDA7CisJCWdvdG8gZG9uZTsKKwl9CisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJjbWQ6IHVwZGF0aW5nIGNoYW5uZWwgZnJvbSAlZCB0byAlZFxuIiwKKwkJCWN1cnJfY2hhbiwgY2hhbm5lbCk7CisKKwlpZiAoIWJzc19pbmZvLm1lZGlhX2Nvbm5lY3RlZCkgeworCQlyZXQgPSAwOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogRG8gZGlzb25uZWN0ICovCisJbWVtc2V0KCZzc2lkX2Jzc2lkLCAwLCBFVEhfQUxFTik7CisJcmV0ID0gbXdpZmlleF9kZWF1dGhlbnRpY2F0ZShwcml2LCBzc2lkX2Jzc2lkLmJzc2lkKTsKKworCXJldCA9IG13aWZpZXhfYnNzX2lvY3RsX2lic3NfY2hhbm5lbChwcml2LCBIb3N0Q21kX0FDVF9HRU5fU0VULAorCQkJCQkgICAgICh1MTYgKikgJmNoYW5uZWwpOworCisJLyogRG8gc3BlY2lmaWMgU1NJRCBzY2FubmluZyAqLworCWlmIChtd2lmaWV4X3JlcXVlc3Rfc2Nhbihwcml2LCAmYnNzX2luZm8uc3NpZCkpIHsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9CisJLyogU3RhcnQvSm9pbiBBZGhvYyBuZXR3b3JrICovCisJbWVtc2V0KCZzc2lkX2Jzc2lkLCAwLCBzaXplb2Yoc3RydWN0IG13aWZpZXhfc3NpZF9ic3NpZCkpOworCW1lbWNweSgmc3NpZF9ic3NpZC5zc2lkLCAmYnNzX2luZm8uc3NpZCwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4XzgwMl8xMV9zc2lkKSk7CisKKwlyZXQgPSBtd2lmaWV4X2Jzc19zdGFydChwcml2LCAmc3NpZF9ic3NpZCk7Citkb25lOgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBJT0NUTCByZXF1ZXN0IGhhbmRsZXIgdG8gZ2V0IHJhdGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyB0aGUgY29ycmVjdCBmaXJtd2FyZSBjb21tYW5kIGFuZAorICogaXNzdWVzIGl0IHRvIGdldCB0aGUgY3VycmVudCByYXRlIGlmIGl0IGlzIGNvbm5lY3RlZCwKKyAqIG90aGVyd2lzZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxvd2VzdCBzdXBwb3J0ZWQgcmF0ZQorICogZm9yIHRoZSBiYW5kLgorICovCitzdGF0aWMgaW50IG13aWZpZXhfcmF0ZV9pb2N0bF9nZXRfcmF0ZV92YWx1ZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCQkgICAgIHN0cnVjdCBtd2lmaWV4X3JhdGVfY2ZnICpyYXRlX2NmZykKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKworCXJhdGVfY2ZnLT5pc19yYXRlX2F1dG8gPSBwcml2LT5pc19kYXRhX3JhdGVfYXV0bzsKKwlpZiAoIXByaXYtPm1lZGlhX2Nvbm5lY3RlZCkgeworCQlzd2l0Y2ggKGFkYXB0ZXItPmNvbmZpZ19iYW5kcykgeworCQljYXNlIEJBTkRfQjoKKwkJCS8qIFJldHVybiB0aGUgbG93ZXN0IHN1cHBvcnRlZCByYXRlIGZvciBCIGJhbmQgKi8KKwkJCXJhdGVfY2ZnLT5yYXRlID0gc3VwcG9ydGVkX3JhdGVzX2JbMF0gJiAweDdmOworCQkJYnJlYWs7CisJCWNhc2UgQkFORF9HOgorCQljYXNlIEJBTkRfRyB8IEJBTkRfR046CisJCQkvKiBSZXR1cm4gdGhlIGxvd2VzdCBzdXBwb3J0ZWQgcmF0ZSBmb3IgRyBiYW5kICovCisJCQlyYXRlX2NmZy0+cmF0ZSA9IHN1cHBvcnRlZF9yYXRlc19nWzBdICYgMHg3ZjsKKwkJCWJyZWFrOworCQljYXNlIEJBTkRfQiB8IEJBTkRfRzoKKwkJY2FzZSBCQU5EX0EgfCBCQU5EX0IgfCBCQU5EX0c6CisJCWNhc2UgQkFORF9BIHwgQkFORF9COgorCQljYXNlIEJBTkRfQSB8IEJBTkRfQiB8IEJBTkRfRyB8IEJBTkRfQU4gfCBCQU5EX0dOOgorCQljYXNlIEJBTkRfQiB8IEJBTkRfRyB8IEJBTkRfR046CisJCQkvKiBSZXR1cm4gdGhlIGxvd2VzdCBzdXBwb3J0ZWQgcmF0ZSBmb3IgQkcgYmFuZCAqLworCQkJcmF0ZV9jZmctPnJhdGUgPSBzdXBwb3J0ZWRfcmF0ZXNfYmdbMF0gJiAweDdmOworCQkJYnJlYWs7CisJCWNhc2UgQkFORF9BOgorCQljYXNlIEJBTkRfQSB8IEJBTkRfRzoKKwkJY2FzZSBCQU5EX0EgfCBCQU5EX0cgfCBCQU5EX0FOIHwgQkFORF9HTjoKKwkJY2FzZSBCQU5EX0EgfCBCQU5EX0FOOgorCQkJLyogUmV0dXJuIHRoZSBsb3dlc3Qgc3VwcG9ydGVkIHJhdGUgZm9yIEEgYmFuZCAqLworCQkJcmF0ZV9jZmctPnJhdGUgPSBzdXBwb3J0ZWRfcmF0ZXNfYVswXSAmIDB4N2Y7CisJCQlicmVhazsKKwkJY2FzZSBCQU5EX0dOOgorCQkJLyogUmV0dXJuIHRoZSBsb3dlc3Qgc3VwcG9ydGVkIHJhdGUgZm9yIE4gYmFuZCAqLworCQkJcmF0ZV9jZmctPnJhdGUgPSBzdXBwb3J0ZWRfcmF0ZXNfblswXSAmIDB4N2Y7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl93YXJuKGFkYXB0ZXItPmRldiwgImludmFsaWQgYmFuZCAlI3hcbiIsCisJCQkgICAgICAgYWRhcHRlci0+Y29uZmlnX2JhbmRzKTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJcmV0dXJuIG13aWZpZXhfc2VuZF9jbWRfc3luYyhwcml2LAorCQkJCQkgICAgSG9zdENtZF9DTURfODAyXzExX1RYX1JBVEVfUVVFUlksCisJCQkJCSAgICBIb3N0Q21kX0FDVF9HRU5fR0VULCAwLCBOVUxMKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIElPQ1RMIHJlcXVlc3QgaGFuZGxlciB0byBzZXQgcmF0ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIHRoZSBjb3JyZWN0IGZpcm13YXJlIGNvbW1hbmQgYW5kCisgKiBpc3N1ZXMgaXQgdG8gc2V0IHRoZSBjdXJyZW50IHJhdGUuCisgKgorICogVGhlIGZ1bmN0aW9uIGFsc28gcGVyZm9ybXMgdmFsaWRhdGlvbiBjaGVja2luZyBvbiB0aGUgc3VwcGxpZWQgdmFsdWUuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9yYXRlX2lvY3RsX3NldF9yYXRlX3ZhbHVlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJCSAgICAgc3RydWN0IG13aWZpZXhfcmF0ZV9jZmcgKnJhdGVfY2ZnKQoreworCXU4IHJhdGVzW01XSUZJRVhfU1VQUE9SVEVEX1JBVEVTXTsKKwl1OCAqcmF0ZTsKKwlpbnQgcmF0ZV9pbmRleCwgcmV0OworCXUxNiBiaXRtYXBfcmF0ZXNbTUFYX0JJVE1BUF9SQVRFU19TSVpFXTsKKwl1MzIgaTsKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKworCWlmIChyYXRlX2NmZy0+aXNfcmF0ZV9hdXRvKSB7CisJCW1lbXNldChiaXRtYXBfcmF0ZXMsIDAsIHNpemVvZihiaXRtYXBfcmF0ZXMpKTsKKwkJLyogU3VwcG9ydCBhbGwgSFIvRFNTUyByYXRlcyAqLworCQliaXRtYXBfcmF0ZXNbMF0gPSAweDAwMEY7CisJCS8qIFN1cHBvcnQgYWxsIE9GRE0gcmF0ZXMgKi8KKwkJYml0bWFwX3JhdGVzWzFdID0gMHgwMEZGOworCQkvKiBTdXBwb3J0IGFsbCBIVC1NQ1NzIHJhdGUgKi8KKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJpdi0+Yml0bWFwX3JhdGVzKSAtIDM7IGkrKykKKwkJCWJpdG1hcF9yYXRlc1tpICsgMl0gPSAweEZGRkY7CisJCWJpdG1hcF9yYXRlc1s5XSA9IDB4M0ZGRjsKKwl9IGVsc2UgeworCQltZW1zZXQocmF0ZXMsIDAsIHNpemVvZihyYXRlcykpOworCQltd2lmaWV4X2dldF9hY3RpdmVfZGF0YV9yYXRlcyhwcml2LCByYXRlcyk7CisJCXJhdGUgPSByYXRlczsKKwkJZm9yIChpID0gMDsgKHJhdGVbaV0gJiYgaSA8IE1XSUZJRVhfU1VQUE9SVEVEX1JBVEVTKTsgaSsrKSB7CisJCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IHJhdGU9JSN4IHdhbnRlZD0lI3hcbiIsCisJCQkJcmF0ZVtpXSwgcmF0ZV9jZmctPnJhdGUpOworCQkJaWYgKChyYXRlW2ldICYgMHg3ZikgPT0gKHJhdGVfY2ZnLT5yYXRlICYgMHg3ZikpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKCFyYXRlW2ldIHx8IChpID09IE1XSUZJRVhfU1VQUE9SVEVEX1JBVEVTKSkgeworCQkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJmaXhlZCBkYXRhIHJhdGUgJSN4IGlzIG91dCAiCisJCQkgICAgICAgIm9mIHJhbmdlXG4iLCByYXRlX2NmZy0+cmF0ZSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJbWVtc2V0KGJpdG1hcF9yYXRlcywgMCwgc2l6ZW9mKGJpdG1hcF9yYXRlcykpOworCisJCXJhdGVfaW5kZXggPSBtd2lmaWV4X2RhdGFfcmF0ZV90b19pbmRleChyYXRlX2NmZy0+cmF0ZSk7CisKKwkJLyogT25seSBhbGxvdyBiL2cgcmF0ZXMgdG8gYmUgc2V0ICovCisJCWlmIChyYXRlX2luZGV4ID49IE1XSUZJRVhfUkFURV9JTkRFWF9IUkRTU1MwICYmCisJCSAgICByYXRlX2luZGV4IDw9IE1XSUZJRVhfUkFURV9JTkRFWF9IUkRTU1MzKSB7CisJCQliaXRtYXBfcmF0ZXNbMF0gPSAxIDw8IHJhdGVfaW5kZXg7CisJCX0gZWxzZSB7CisJCQlyYXRlX2luZGV4IC09IDE7IC8qIFRoZXJlIGlzIGEgMHgwMCBpbiB0aGUgdGFibGUgKi8KKwkJCWlmIChyYXRlX2luZGV4ID49IE1XSUZJRVhfUkFURV9JTkRFWF9PRkRNMCAmJgorCQkJICAgIHJhdGVfaW5kZXggPD0gTVdJRklFWF9SQVRFX0lOREVYX09GRE03KQorCQkJCWJpdG1hcF9yYXRlc1sxXSA9IDEgPDwgKHJhdGVfaW5kZXggLQorCQkJCQkJICAgTVdJRklFWF9SQVRFX0lOREVYX09GRE0wKTsKKwkJfQorCX0KKworCXJldCA9IG13aWZpZXhfc2VuZF9jbWRfc3luYyhwcml2LCBIb3N0Q21kX0NNRF9UWF9SQVRFX0NGRywKKwkJCQkgICAgSG9zdENtZF9BQ1RfR0VOX1NFVCwgMCwgYml0bWFwX3JhdGVzKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBJT0NUTCByZXF1ZXN0IGhhbmRsZXIgdG8gc2V0L2dldCByYXRlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gc2V0L2dldCBlaXRoZXIgdGhlIHJhdGUgdmFsdWUgb3IgdGhlCisgKiByYXRlIGluZGV4LgorICovCitzdGF0aWMgaW50IG13aWZpZXhfcmF0ZV9pb2N0bF9jZmcoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgIHN0cnVjdCBtd2lmaWV4X3JhdGVfY2ZnICpyYXRlX2NmZykKK3sKKwlpbnQgc3RhdHVzOworCisJaWYgKCFyYXRlX2NmZykKKwkJcmV0dXJuIC0xOworCisJaWYgKHJhdGVfY2ZnLT5hY3Rpb24gPT0gSG9zdENtZF9BQ1RfR0VOX0dFVCkKKwkJc3RhdHVzID0gbXdpZmlleF9yYXRlX2lvY3RsX2dldF9yYXRlX3ZhbHVlKHByaXYsIHJhdGVfY2ZnKTsKKwllbHNlCisJCXN0YXR1cyA9IG13aWZpZXhfcmF0ZV9pb2N0bF9zZXRfcmF0ZV92YWx1ZShwcml2LCByYXRlX2NmZyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogU2VuZHMgSU9DVEwgcmVxdWVzdCB0byBnZXQgdGhlIGRhdGEgcmF0ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyB0aGUgSU9DVEwgcmVxdWVzdCBidWZmZXIsIGZpbGxzIGl0CisgKiB3aXRoIHJlcXVpc2l0ZSBwYXJhbWV0ZXJzIGFuZCBjYWxscyB0aGUgSU9DVEwgaGFuZGxlci4KKyAqLworaW50IG13aWZpZXhfZHJ2X2dldF9kYXRhX3JhdGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCBtd2lmaWV4X3JhdGVfY2ZnICpyYXRlKQoreworCWludCByZXQ7CisKKwltZW1zZXQocmF0ZSwgMCwgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X3JhdGVfY2ZnKSk7CisJcmF0ZS0+YWN0aW9uID0gSG9zdENtZF9BQ1RfR0VOX0dFVDsKKwlyZXQgPSBtd2lmaWV4X3JhdGVfaW9jdGxfY2ZnKHByaXYsIHJhdGUpOworCisJaWYgKCFyZXQpIHsKKwkJaWYgKHJhdGUgJiYgcmF0ZS0+aXNfcmF0ZV9hdXRvKQorCQkJcmF0ZS0+cmF0ZSA9IG13aWZpZXhfaW5kZXhfdG9fZGF0YV9yYXRlKHByaXYtPnR4X3JhdGUsCisJCQkJCQkJcHJpdi0+dHhfaHRpbmZvKTsKKwkJZWxzZSBpZiAocmF0ZSkKKwkJCXJhdGUtPnJhdGUgPSBwcml2LT5kYXRhX3JhdGU7CisJfSBlbHNlIHsKKwkJcmV0ID0gLTE7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIElPQ1RMIHJlcXVlc3QgaGFuZGxlciB0byBzZXQgdHggcG93ZXIgY29uZmlndXJhdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIHRoZSBjb3JyZWN0IGZpcm13YXJlIGNvbW1hbmQgYW5kCisgKiBpc3N1ZXMgaXQuCisgKgorICogRm9yIG5vbi1hdXRvIHBvd2VyIG1vZGUsIGFsbCB0aGUgZm9sbG93aW5nIHBvd2VyIGdyb3VwcyBhcmUgc2V0IC0KKyAqICAgICAgLSBNb2R1bGF0aW9uIGNsYXNzIEhSL0RTU1MKKyAqICAgICAgLSBNb2R1bGF0aW9uIGNsYXNzIE9GRE0KKyAqICAgICAgLSBNb2R1bGF0aW9uIGNsYXNzIEhUQlcyMAorICogICAgICAtIE1vZHVsYXRpb24gY2xhc3MgSFRCVzQwCisgKi8KK2ludCBtd2lmaWV4X3NldF90eF9wb3dlcihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJIHN0cnVjdCBtd2lmaWV4X3Bvd2VyX2NmZyAqcG93ZXJfY2ZnKQoreworCWludCByZXQ7CisJc3RydWN0IGhvc3RfY21kX2RzX3R4cHdyX2NmZyAqdHhwX2NmZzsKKwlzdHJ1Y3QgbXdpZmlleF90eXBlc19wb3dlcl9ncm91cCAqcGdfdGx2OworCXN0cnVjdCBtd2lmaWV4X3Bvd2VyX2dyb3VwICpwZzsKKwl1OCAqYnVmOworCXUxNiBkYm0gPSAwOworCisJaWYgKCFwb3dlcl9jZmctPmlzX3Bvd2VyX2F1dG8pIHsKKwkJZGJtID0gKHUxNikgcG93ZXJfY2ZnLT5wb3dlcl9sZXZlbDsKKwkJaWYgKChkYm0gPCBwcml2LT5taW5fdHhfcG93ZXJfbGV2ZWwpIHx8CisJCSAgICAoZGJtID4gcHJpdi0+bWF4X3R4X3Bvd2VyX2xldmVsKSkgeworCQkJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsICJ0eHBvd2VyIHZhbHVlICVkIGRCbSIKKwkJCQkJIiBpcyBvdXQgb2YgcmFuZ2UgKCVkIGRCbS0lZCBkQm0pXG4iLAorCQkJCQlkYm0sIHByaXYtPm1pbl90eF9wb3dlcl9sZXZlbCwKKwkJCQkJcHJpdi0+bWF4X3R4X3Bvd2VyX2xldmVsKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlidWYgPSBremFsbG9jKE1XSUZJRVhfU0laRV9PRl9DTURfQlVGRkVSLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgIiVzOiBmYWlsZWQgdG8gYWxsb2MgY21kIGJ1ZmZlclxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXR4cF9jZmcgPSAoc3RydWN0IGhvc3RfY21kX2RzX3R4cHdyX2NmZyAqKSBidWY7CisJdHhwX2NmZy0+YWN0aW9uID0gY3B1X3RvX2xlMTYoSG9zdENtZF9BQ1RfR0VOX1NFVCk7CisJaWYgKCFwb3dlcl9jZmctPmlzX3Bvd2VyX2F1dG8pIHsKKwkJdHhwX2NmZy0+bW9kZSA9IGNwdV90b19sZTMyKDEpOworCQlwZ190bHYgPSAoc3RydWN0IG13aWZpZXhfdHlwZXNfcG93ZXJfZ3JvdXAgKikgKGJ1ZiArCisJCQkJc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc190eHB3cl9jZmcpKTsKKwkJcGdfdGx2LT50eXBlID0gVExWX1RZUEVfUE9XRVJfR1JPVVA7CisJCXBnX3Rsdi0+bGVuZ3RoID0gNCAqIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9wb3dlcl9ncm91cCk7CisJCXBnID0gKHN0cnVjdCBtd2lmaWV4X3Bvd2VyX2dyb3VwICopIChidWYgKworCQkJCXNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZHNfdHhwd3JfY2ZnKSArCisJCQkJc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X3R5cGVzX3Bvd2VyX2dyb3VwKSk7CisJCS8qIFBvd2VyIGdyb3VwIGZvciBtb2R1bGF0aW9uIGNsYXNzIEhSL0RTU1MgKi8KKwkJcGctPmZpcnN0X3JhdGVfY29kZSA9IDB4MDA7CisJCXBnLT5sYXN0X3JhdGVfY29kZSA9IDB4MDM7CisJCXBnLT5tb2R1bGF0aW9uX2NsYXNzID0gTU9EX0NMQVNTX0hSX0RTU1M7CisJCXBnLT5wb3dlcl9zdGVwID0gMDsKKwkJcGctPnBvd2VyX21pbiA9IChzOCkgZGJtOworCQlwZy0+cG93ZXJfbWF4ID0gKHM4KSBkYm07CisJCXBnKys7CisJCS8qIFBvd2VyIGdyb3VwIGZvciBtb2R1bGF0aW9uIGNsYXNzIE9GRE0gKi8KKwkJcGctPmZpcnN0X3JhdGVfY29kZSA9IDB4MDA7CisJCXBnLT5sYXN0X3JhdGVfY29kZSA9IDB4MDc7CisJCXBnLT5tb2R1bGF0aW9uX2NsYXNzID0gTU9EX0NMQVNTX09GRE07CisJCXBnLT5wb3dlcl9zdGVwID0gMDsKKwkJcGctPnBvd2VyX21pbiA9IChzOCkgZGJtOworCQlwZy0+cG93ZXJfbWF4ID0gKHM4KSBkYm07CisJCXBnKys7CisJCS8qIFBvd2VyIGdyb3VwIGZvciBtb2R1bGF0aW9uIGNsYXNzIEhUQlcyMCAqLworCQlwZy0+Zmlyc3RfcmF0ZV9jb2RlID0gMHgwMDsKKwkJcGctPmxhc3RfcmF0ZV9jb2RlID0gMHgyMDsKKwkJcGctPm1vZHVsYXRpb25fY2xhc3MgPSBNT0RfQ0xBU1NfSFQ7CisJCXBnLT5wb3dlcl9zdGVwID0gMDsKKwkJcGctPnBvd2VyX21pbiA9IChzOCkgZGJtOworCQlwZy0+cG93ZXJfbWF4ID0gKHM4KSBkYm07CisJCXBnLT5odF9iYW5kd2lkdGggPSBIVF9CV18yMDsKKwkJcGcrKzsKKwkJLyogUG93ZXIgZ3JvdXAgZm9yIG1vZHVsYXRpb24gY2xhc3MgSFRCVzQwICovCisJCXBnLT5maXJzdF9yYXRlX2NvZGUgPSAweDAwOworCQlwZy0+bGFzdF9yYXRlX2NvZGUgPSAweDIwOworCQlwZy0+bW9kdWxhdGlvbl9jbGFzcyA9IE1PRF9DTEFTU19IVDsKKwkJcGctPnBvd2VyX3N0ZXAgPSAwOworCQlwZy0+cG93ZXJfbWluID0gKHM4KSBkYm07CisJCXBnLT5wb3dlcl9tYXggPSAoczgpIGRibTsKKwkJcGctPmh0X2JhbmR3aWR0aCA9IEhUX0JXXzQwOworCX0KKwlyZXQgPSBtd2lmaWV4X3NlbmRfY21kX3N5bmMocHJpdiwgSG9zdENtZF9DTURfVFhQV1JfQ0ZHLAorCQkJCSAgICBIb3N0Q21kX0FDVF9HRU5fU0VULCAwLCBidWYpOworCisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogSU9DVEwgcmVxdWVzdCBoYW5kbGVyIHRvIGdldCBwb3dlciBzYXZlIG1vZGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyB0aGUgY29ycmVjdCBmaXJtd2FyZSBjb21tYW5kIGFuZAorICogaXNzdWVzIGl0LgorICovCitpbnQgbXdpZmlleF9kcnZfc2V0X3Bvd2VyKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHUzMiAqcHNfbW9kZSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXUxNiBzdWJfY21kOworCisJaWYgKCpwc19tb2RlKQorCQlhZGFwdGVyLT5wc19tb2RlID0gTVdJRklFWF84MDJfMTFfUE9XRVJfTU9ERV9QU1A7CisJZWxzZQorCQlhZGFwdGVyLT5wc19tb2RlID0gTVdJRklFWF84MDJfMTFfUE9XRVJfTU9ERV9DQU07CisJc3ViX2NtZCA9ICgqcHNfbW9kZSkgPyBFTl9BVVRPX1BTIDogRElTX0FVVE9fUFM7CisJcmV0ID0gbXdpZmlleF9zZW5kX2NtZF9zeW5jKHByaXYsIEhvc3RDbWRfQ01EXzgwMl8xMV9QU19NT0RFX0VOSCwKKwkJCQkgICAgc3ViX2NtZCwgQklUTUFQX1NUQV9QUywgTlVMTCk7CisJaWYgKCghcmV0KSAmJiAoc3ViX2NtZCA9PSBESVNfQVVUT19QUykpCisJCXJldCA9IG13aWZpZXhfc2VuZF9jbWRfYXN5bmMocHJpdiwKKwkJCQlIb3N0Q21kX0NNRF84MDJfMTFfUFNfTU9ERV9FTkgsIEdFVF9QUywKKwkJCQkwLCBOVUxMKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBJT0NUTCByZXF1ZXN0IGhhbmRsZXIgdG8gc2V0L3Jlc2V0IFdQQSBJRS4KKyAqCisgKiBUaGUgc3VwcGxpZWQgV1BBIElFIGlzIHRyZWF0ZWQgYXMgYSBvcGFxdWUgYnVmZmVyLiBPbmx5IHRoZSBmaXJzdCBmaWVsZAorICogaXMgY2hlY2tlZCB0byBkZXRlcm1pbmUgV1BBIHZlcnNpb24uIElmIGJ1ZmZlciBsZW5ndGggaXMgemVybywgdGhlIGV4aXN0aW5nCisgKiBXUEEgSUUgaXMgcmVzZXQuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9zZXRfd3BhX2llX2hlbHBlcihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCSAgICAgdTggKmllX2RhdGFfcHRyLCB1MTYgaWVfbGVuKQoreworCWlmIChpZV9sZW4pIHsKKwkJaWYgKGllX2xlbiA+IHNpemVvZihwcml2LT53cGFfaWUpKSB7CisJCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwKKwkJCQkiZmFpbGVkIHRvIGNvcHkgV1BBIElFLCB0b28gYmlnXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQltZW1jcHkocHJpdi0+d3BhX2llLCBpZV9kYXRhX3B0ciwgaWVfbGVuKTsKKwkJcHJpdi0+d3BhX2llX2xlbiA9ICh1OCkgaWVfbGVuOworCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImNtZDogU2V0IFdwYV9pZV9sZW49JWQgSUU9JSN4XG4iLAorCQkJCXByaXYtPndwYV9pZV9sZW4sIHByaXYtPndwYV9pZVswXSk7CisKKwkJaWYgKHByaXYtPndwYV9pZVswXSA9PSBXTEFOX0VJRF9XUEEpIHsKKwkJCXByaXYtPnNlY19pbmZvLndwYV9lbmFibGVkID0gdHJ1ZTsKKwkJfSBlbHNlIGlmIChwcml2LT53cGFfaWVbMF0gPT0gV0xBTl9FSURfUlNOKSB7CisJCQlwcml2LT5zZWNfaW5mby53cGEyX2VuYWJsZWQgPSB0cnVlOworCQl9IGVsc2UgeworCQkJcHJpdi0+c2VjX2luZm8ud3BhX2VuYWJsZWQgPSBmYWxzZTsKKwkJCXByaXYtPnNlY19pbmZvLndwYTJfZW5hYmxlZCA9IGZhbHNlOworCQl9CisJfSBlbHNlIHsKKwkJbWVtc2V0KHByaXYtPndwYV9pZSwgMCwgc2l6ZW9mKHByaXYtPndwYV9pZSkpOworCQlwcml2LT53cGFfaWVfbGVuID0gMDsKKwkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiByZXNldCB3cGFfaWVfbGVuPSVkIElFPSUjeFxuIiwKKwkJCXByaXYtPndwYV9pZV9sZW4sIHByaXYtPndwYV9pZVswXSk7CisJCXByaXYtPnNlY19pbmZvLndwYV9lbmFibGVkID0gZmFsc2U7CisJCXByaXYtPnNlY19pbmZvLndwYTJfZW5hYmxlZCA9IGZhbHNlOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogSU9DVEwgcmVxdWVzdCBoYW5kbGVyIHRvIHNldC9yZXNldCBXQVBJIElFLgorICoKKyAqIFRoZSBzdXBwbGllZCBXQVBJIElFIGlzIHRyZWF0ZWQgYXMgYSBvcGFxdWUgYnVmZmVyLiBPbmx5IHRoZSBmaXJzdCBmaWVsZAorICogaXMgY2hlY2tlZCB0byBpbnRlcm5hbGx5IGVuYWJsZSBXQVBJLiBJZiBidWZmZXIgbGVuZ3RoIGlzIHplcm8sIHRoZSBleGlzdGluZworICogV0FQSSBJRSBpcyByZXNldC4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X3NldF93YXBpX2llKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgICAgdTggKmllX2RhdGFfcHRyLCB1MTYgaWVfbGVuKQoreworCWlmIChpZV9sZW4pIHsKKwkJaWYgKGllX2xlbiA+IHNpemVvZihwcml2LT53YXBpX2llKSkgeworCQkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkJImluZm86IGZhaWxlZCB0byBjb3B5IFdBUEkgSUUsIHRvbyBiaWdcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCW1lbWNweShwcml2LT53YXBpX2llLCBpZV9kYXRhX3B0ciwgaWVfbGVuKTsKKwkJcHJpdi0+d2FwaV9pZV9sZW4gPSBpZV9sZW47CisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiY21kOiBTZXQgd2FwaV9pZV9sZW49JWQgSUU9JSN4XG4iLAorCQkJCXByaXYtPndhcGlfaWVfbGVuLCBwcml2LT53YXBpX2llWzBdKTsKKworCQlpZiAocHJpdi0+d2FwaV9pZVswXSA9PSBXTEFOX0VJRF9CU1NfQUNfQUNDRVNTX0RFTEFZKQorCQkJcHJpdi0+c2VjX2luZm8ud2FwaV9lbmFibGVkID0gdHJ1ZTsKKwl9IGVsc2UgeworCQltZW1zZXQocHJpdi0+d2FwaV9pZSwgMCwgc2l6ZW9mKHByaXYtPndhcGlfaWUpKTsKKwkJcHJpdi0+d2FwaV9pZV9sZW4gPSBpZV9sZW47CisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJImluZm86IFJlc2V0IHdhcGlfaWVfbGVuPSVkIElFPSUjeFxuIiwKKwkJICAgICAgIHByaXYtPndhcGlfaWVfbGVuLCBwcml2LT53YXBpX2llWzBdKTsKKwkJcHJpdi0+c2VjX2luZm8ud2FwaV9lbmFibGVkID0gZmFsc2U7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogSU9DVEwgcmVxdWVzdCBoYW5kbGVyIHRvIHNldCBXQVBJIGtleS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIHRoZSBjb3JyZWN0IGZpcm13YXJlIGNvbW1hbmQgYW5kCisgKiBpc3N1ZXMgaXQuCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9zZWNfaW9jdGxfc2V0X3dhcGlfa2V5KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgICAgc3RydWN0IG13aWZpZXhfZHNfZW5jcnlwdF9rZXkgKmVuY3J5cHRfa2V5KQoreworCisJcmV0dXJuIG13aWZpZXhfc2VuZF9jbWRfc3luYyhwcml2LCBIb3N0Q21kX0NNRF84MDJfMTFfS0VZX01BVEVSSUFMLAorCQkJCSAgICBIb3N0Q21kX0FDVF9HRU5fU0VULCBLRVlfSU5GT19FTkFCTEVELAorCQkJCSAgICBlbmNyeXB0X2tleSk7Cit9CisKKy8qCisgKiBJT0NUTCByZXF1ZXN0IGhhbmRsZXIgdG8gc2V0IFdFUCBuZXR3b3JrIGtleS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIHRoZSBjb3JyZWN0IGZpcm13YXJlIGNvbW1hbmQgYW5kCisgKiBpc3N1ZXMgaXQsIGFmdGVyIHZhbGlkYXRpb24gY2hlY2tzLgorICovCitzdGF0aWMgaW50IG13aWZpZXhfc2VjX2lvY3RsX3NldF93ZXBfa2V5KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgbXdpZmlleF9kc19lbmNyeXB0X2tleSAqZW5jcnlwdF9rZXkpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbXdpZmlleF93ZXBfa2V5ICp3ZXBfa2V5OworCWludCBpbmRleDsKKworCWlmIChwcml2LT53ZXBfa2V5X2N1cnJfaW5kZXggPj0gTlVNX1dFUF9LRVlTKQorCQlwcml2LT53ZXBfa2V5X2N1cnJfaW5kZXggPSAwOworCXdlcF9rZXkgPSAmcHJpdi0+d2VwX2tleVtwcml2LT53ZXBfa2V5X2N1cnJfaW5kZXhdOworCWluZGV4ID0gZW5jcnlwdF9rZXktPmtleV9pbmRleDsKKwlpZiAoZW5jcnlwdF9rZXktPmtleV9kaXNhYmxlKSB7CisJCXByaXYtPnNlY19pbmZvLndlcF9zdGF0dXMgPSBNV0lGSUVYXzgwMl8xMV9XRVBfRElTQUJMRUQ7CisJfSBlbHNlIGlmICghZW5jcnlwdF9rZXktPmtleV9sZW4pIHsKKwkJLyogQ29weSB0aGUgcmVxdWlyZWQga2V5IGFzIHRoZSBjdXJyZW50IGtleSAqLworCQl3ZXBfa2V5ID0gJnByaXYtPndlcF9rZXlbaW5kZXhdOworCQlpZiAoIXdlcF9rZXktPmtleV9sZW5ndGgpIHsKKwkJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJCSJrZXkgbm90IHNldCwgc28gY2Fubm90IGVuYWJsZSBpdFxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJcHJpdi0+d2VwX2tleV9jdXJyX2luZGV4ID0gKHUxNikgaW5kZXg7CisJCXByaXYtPnNlY19pbmZvLndlcF9zdGF0dXMgPSBNV0lGSUVYXzgwMl8xMV9XRVBfRU5BQkxFRDsKKwl9IGVsc2UgeworCQl3ZXBfa2V5ID0gJnByaXYtPndlcF9rZXlbaW5kZXhdOworCQltZW1zZXQod2VwX2tleSwgMCwgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X3dlcF9rZXkpKTsKKwkJLyogQ29weSB0aGUga2V5IGluIHRoZSBkcml2ZXIgKi8KKwkJbWVtY3B5KHdlcF9rZXktPmtleV9tYXRlcmlhbCwKKwkJICAgICAgIGVuY3J5cHRfa2V5LT5rZXlfbWF0ZXJpYWwsCisJCSAgICAgICBlbmNyeXB0X2tleS0+a2V5X2xlbik7CisJCXdlcF9rZXktPmtleV9pbmRleCA9IGluZGV4OworCQl3ZXBfa2V5LT5rZXlfbGVuZ3RoID0gZW5jcnlwdF9rZXktPmtleV9sZW47CisJCXByaXYtPnNlY19pbmZvLndlcF9zdGF0dXMgPSBNV0lGSUVYXzgwMl8xMV9XRVBfRU5BQkxFRDsKKwl9CisJaWYgKHdlcF9rZXktPmtleV9sZW5ndGgpIHsKKwkJLyogU2VuZCByZXF1ZXN0IHRvIGZpcm13YXJlICovCisJCXJldCA9IG13aWZpZXhfc2VuZF9jbWRfYXN5bmMocHJpdiwKKwkJCQkJICAgICBIb3N0Q21kX0NNRF84MDJfMTFfS0VZX01BVEVSSUFMLAorCQkJCQkgICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsIE5VTEwpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisJaWYgKHByaXYtPnNlY19pbmZvLndlcF9zdGF0dXMgPT0gTVdJRklFWF84MDJfMTFfV0VQX0VOQUJMRUQpCisJCXByaXYtPmN1cnJfcGt0X2ZpbHRlciB8PSBIb3N0Q21kX0FDVF9NQUNfV0VQX0VOQUJMRTsKKwllbHNlCisJCXByaXYtPmN1cnJfcGt0X2ZpbHRlciAmPSB+SG9zdENtZF9BQ1RfTUFDX1dFUF9FTkFCTEU7CisKKwlyZXQgPSBtd2lmaWV4X3NlbmRfY21kX3N5bmMocHJpdiwgSG9zdENtZF9DTURfTUFDX0NPTlRST0wsCisJCQkJICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsCisJCQkJICAgICZwcml2LT5jdXJyX3BrdF9maWx0ZXIpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIElPQ1RMIHJlcXVlc3QgaGFuZGxlciB0byBzZXQgV1BBIGtleS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIHRoZSBjb3JyZWN0IGZpcm13YXJlIGNvbW1hbmQgYW5kCisgKiBpc3N1ZXMgaXQsIGFmdGVyIHZhbGlkYXRpb24gY2hlY2tzLgorICoKKyAqIEN1cnJlbnQgZHJpdmVyIG9ubHkgc3VwcG9ydHMga2V5IGxlbmd0aCBvZiB1cCB0byAzMiBieXRlcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBhbHNvIGJlIHVzZWQgdG8gZGlzYWJsZSBhIGN1cnJlbnRseSBzZXQga2V5LgorICovCitzdGF0aWMgaW50IG13aWZpZXhfc2VjX2lvY3RsX3NldF93cGFfa2V5KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgbXdpZmlleF9kc19lbmNyeXB0X2tleSAqZW5jcnlwdF9rZXkpCit7CisJaW50IHJldDsKKwl1OCByZW1vdmVfa2V5ID0gZmFsc2U7CisJc3RydWN0IGhvc3RfY21kX2RzXzgwMl8xMV9rZXlfbWF0ZXJpYWwgKmlic3Nfa2V5OworCisJLyogQ3VycmVudCBkcml2ZXIgb25seSBzdXBwb3J0cyBrZXkgbGVuZ3RoIG9mIHVwIHRvIDMyIGJ5dGVzICovCisJaWYgKGVuY3J5cHRfa2V5LT5rZXlfbGVuID4gV0xBTl9NQVhfS0VZX0xFTikgeworCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgImtleSBsZW5ndGggdG9vIGxvbmdcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHByaXYtPmJzc19tb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCS8qCisJCSAqIElCU1MvV1BBLU5vbmUgdXNlcyBvbmx5IG9uZSBrZXkgKEdyb3VwKSBmb3IgYm90aCByZWNlaXZpbmcKKwkJICogYW5kIHNlbmRpbmcgdW5pY2FzdCBhbmQgbXVsdGljYXN0IHBhY2tldHMuCisJCSAqLworCQkvKiBTZW5kIHRoZSBrZXkgYXMgUFRLIHRvIGZpcm13YXJlICovCisJCWVuY3J5cHRfa2V5LT5rZXlfaW5kZXggPSBNV0lGSUVYX0tFWV9JTkRFWF9VTklDQVNUOworCQlyZXQgPSBtd2lmaWV4X3NlbmRfY21kX2FzeW5jKHByaXYsCisJCQkJCUhvc3RDbWRfQ01EXzgwMl8xMV9LRVlfTUFURVJJQUwsCisJCQkJCUhvc3RDbWRfQUNUX0dFTl9TRVQsIEtFWV9JTkZPX0VOQUJMRUQsCisJCQkJCWVuY3J5cHRfa2V5KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJaWJzc19rZXkgPSAmcHJpdi0+YWVzX2tleTsKKwkJbWVtc2V0KGlic3Nfa2V5LCAwLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc184MDJfMTFfa2V5X21hdGVyaWFsKSk7CisJCS8qIENvcHkgdGhlIGtleSBpbiB0aGUgZHJpdmVyICovCisJCW1lbWNweShpYnNzX2tleS0+a2V5X3BhcmFtX3NldC5rZXksIGVuY3J5cHRfa2V5LT5rZXlfbWF0ZXJpYWwsCisJCSAgICAgICBlbmNyeXB0X2tleS0+a2V5X2xlbik7CisJCW1lbWNweSgmaWJzc19rZXktPmtleV9wYXJhbV9zZXQua2V5X2xlbiwgJmVuY3J5cHRfa2V5LT5rZXlfbGVuLAorCQkgICAgICAgc2l6ZW9mKGlic3Nfa2V5LT5rZXlfcGFyYW1fc2V0LmtleV9sZW4pKTsKKwkJaWJzc19rZXktPmtleV9wYXJhbV9zZXQua2V5X3R5cGVfaWQKKwkJCT0gY3B1X3RvX2xlMTYoS0VZX1RZUEVfSURfVEtJUCk7CisJCWlic3Nfa2V5LT5rZXlfcGFyYW1fc2V0LmtleV9pbmZvID0gY3B1X3RvX2xlMTYoS0VZX0VOQUJMRUQpOworCisJCS8qIFNlbmQgdGhlIGtleSBhcyBHVEsgdG8gZmlybXdhcmUgKi8KKwkJZW5jcnlwdF9rZXktPmtleV9pbmRleCA9IH5NV0lGSUVYX0tFWV9JTkRFWF9VTklDQVNUOworCX0KKworCWlmICghZW5jcnlwdF9rZXktPmtleV9pbmRleCkKKwkJZW5jcnlwdF9rZXktPmtleV9pbmRleCA9IE1XSUZJRVhfS0VZX0lOREVYX1VOSUNBU1Q7CisKKwlpZiAocmVtb3ZlX2tleSkKKwkJcmV0ID0gbXdpZmlleF9zZW5kX2NtZF9zeW5jKHByaXYsCisJCQkJICAgICAgIEhvc3RDbWRfQ01EXzgwMl8xMV9LRVlfTUFURVJJQUwsCisJCQkJICAgICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsICEoS0VZX0lORk9fRU5BQkxFRCksCisJCQkJICAgICAgIGVuY3J5cHRfa2V5KTsKKwllbHNlCisJCXJldCA9IG13aWZpZXhfc2VuZF9jbWRfc3luYyhwcml2LAorCQkJCQlIb3N0Q21kX0NNRF84MDJfMTFfS0VZX01BVEVSSUFMLAorCQkJCQlIb3N0Q21kX0FDVF9HRU5fU0VULCBLRVlfSU5GT19FTkFCTEVELAorCQkJCQllbmNyeXB0X2tleSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogSU9DVEwgcmVxdWVzdCBoYW5kbGVyIHRvIHNldC9nZXQgbmV0d29yayBrZXlzLgorICoKKyAqIFRoaXMgaXMgYSBnZW5lcmljIGtleSBoYW5kbGluZyBmdW5jdGlvbiB3aGljaCBzdXBwb3J0cyBXRVAsIFdQQQorICogYW5kIFdBUEkuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfc2VjX2lvY3RsX2VuY3J5cHRfa2V5KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgbXdpZmlleF9kc19lbmNyeXB0X2tleSAqZW5jcnlwdF9rZXkpCit7CisJaW50IHN0YXR1czsKKworCWlmIChlbmNyeXB0X2tleS0+aXNfd2FwaV9rZXkpCisJCXN0YXR1cyA9IG13aWZpZXhfc2VjX2lvY3RsX3NldF93YXBpX2tleShwcml2LCBlbmNyeXB0X2tleSk7CisJZWxzZSBpZiAoZW5jcnlwdF9rZXktPmtleV9sZW4gPiBXTEFOX0tFWV9MRU5fV0VQMTA0KQorCQlzdGF0dXMgPSBtd2lmaWV4X3NlY19pb2N0bF9zZXRfd3BhX2tleShwcml2LCBlbmNyeXB0X2tleSk7CisJZWxzZQorCQlzdGF0dXMgPSBtd2lmaWV4X3NlY19pb2N0bF9zZXRfd2VwX2tleShwcml2LCBlbmNyeXB0X2tleSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZHJpdmVyIHZlcnNpb24uCisgKi8KK2ludAorbXdpZmlleF9kcnZfZ2V0X2RyaXZlcl92ZXJzaW9uKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsIGNoYXIgKnZlcnNpb24sCisJCQkgICAgICAgaW50IG1heF9sZW4pCit7CisJdW5pb24geworCQl1MzIgbDsKKwkJdTggY1s0XTsKKwl9IHZlcjsKKwljaGFyIGZ3X3ZlclszMl07CisKKwl2ZXIubCA9IGFkYXB0ZXItPmZ3X3JlbGVhc2VfbnVtYmVyOworCXNwcmludGYoZndfdmVyLCAiJXUuJXUuJXUucCV1IiwgdmVyLmNbMl0sIHZlci5jWzFdLCB2ZXIuY1swXSwgdmVyLmNbM10pOworCisJc25wcmludGYodmVyc2lvbiwgbWF4X2xlbiwgZHJpdmVyX3ZlcnNpb24sIGZ3X3Zlcik7CisKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IE1XSUZJRVggVkVSU0lPTjogJXNcbiIsIHZlcnNpb24pOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZW5kcyBJT0NUTCByZXF1ZXN0IHRvIGdldCBzaWduYWwgaW5mb3JtYXRpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgdGhlIElPQ1RMIHJlcXVlc3QgYnVmZmVyLCBmaWxscyBpdAorICogd2l0aCByZXF1aXNpdGUgcGFyYW1ldGVycyBhbmQgY2FsbHMgdGhlIElPQ1RMIGhhbmRsZXIuCisgKi8KK2ludCBtd2lmaWV4X2dldF9zaWduYWxfaW5mbyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgIHN0cnVjdCBtd2lmaWV4X2RzX2dldF9zaWduYWwgKnNpZ25hbCkKK3sKKwlpbnQgc3RhdHVzOworCisJc2lnbmFsLT5zZWxlY3RvciA9IEFMTF9SU1NJX0lORk9fTUFTSzsKKworCS8qIFNpZ25hbCBpbmZvIGNhbiBiZSBvYnRhaW5lZCBvbmx5IGlmIGNvbm5lY3RlZCAqLworCWlmICghcHJpdi0+bWVkaWFfY29ubmVjdGVkKSB7CisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJImluZm86IENhbiBub3QgZ2V0IHNpZ25hbCBpbiBkaXNjb25uZWN0ZWQgc3RhdGVcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJc3RhdHVzID0gbXdpZmlleF9zZW5kX2NtZF9zeW5jKHByaXYsIEhvc3RDbWRfQ01EX1JTU0lfSU5GTywKKwkJCQkgICAgICAgSG9zdENtZF9BQ1RfR0VOX0dFVCwgMCwgc2lnbmFsKTsKKworCWlmICghc3RhdHVzKSB7CisJCWlmIChzaWduYWwtPnNlbGVjdG9yICYgQkNOX1JTU0lfQVZHX01BU0spCisJCQlwcml2LT53X3N0YXRzLnF1YWwubGV2ZWwgPSBzaWduYWwtPmJjbl9yc3NpX2F2ZzsKKwkJaWYgKHNpZ25hbC0+c2VsZWN0b3IgJiBCQ05fTkZfQVZHX01BU0spCisJCQlwcml2LT53X3N0YXRzLnF1YWwubm9pc2UgPSBzaWduYWwtPmJjbl9uZl9hdmc7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIFNlbmRzIElPQ1RMIHJlcXVlc3QgdG8gc2V0IGVuY29kaW5nIHBhcmFtZXRlcnMuCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgdGhlIElPQ1RMIHJlcXVlc3QgYnVmZmVyLCBmaWxscyBpdAorICogd2l0aCByZXF1aXNpdGUgcGFyYW1ldGVycyBhbmQgY2FsbHMgdGhlIElPQ1RMIGhhbmRsZXIuCisgKi8KK2ludCBtd2lmaWV4X3NldF9lbmNvZGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgY29uc3QgdTggKmtleSwKKwkJCWludCBrZXlfbGVuLCB1OCBrZXlfaW5kZXgsIGludCBkaXNhYmxlKQoreworCXN0cnVjdCBtd2lmaWV4X2RzX2VuY3J5cHRfa2V5IGVuY3J5cHRfa2V5OworCisJbWVtc2V0KCZlbmNyeXB0X2tleSwgMCwgc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X2RzX2VuY3J5cHRfa2V5KSk7CisJZW5jcnlwdF9rZXkua2V5X2xlbiA9IGtleV9sZW47CisJaWYgKCFkaXNhYmxlKSB7CisJCWVuY3J5cHRfa2V5LmtleV9pbmRleCA9IGtleV9pbmRleDsKKwkJaWYgKGtleV9sZW4pCisJCQltZW1jcHkoZW5jcnlwdF9rZXkua2V5X21hdGVyaWFsLCBrZXksIGtleV9sZW4pOworCX0gZWxzZSB7CisJCWVuY3J5cHRfa2V5LmtleV9kaXNhYmxlID0gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gbXdpZmlleF9zZWNfaW9jdGxfZW5jcnlwdF9rZXkocHJpdiwgJmVuY3J5cHRfa2V5KTsKK30KKworLyoKKyAqIFNlbmRzIElPQ1RMIHJlcXVlc3QgdG8gZ2V0IGV4dGVuZGVkIHZlcnNpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgdGhlIElPQ1RMIHJlcXVlc3QgYnVmZmVyLCBmaWxscyBpdAorICogd2l0aCByZXF1aXNpdGUgcGFyYW1ldGVycyBhbmQgY2FsbHMgdGhlIElPQ1RMIGhhbmRsZXIuCisgKi8KK2ludAorbXdpZmlleF9nZXRfdmVyX2V4dChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KQoreworCXN0cnVjdCBtd2lmaWV4X3Zlcl9leHQgdmVyX2V4dDsKKworCW1lbXNldCgmdmVyX2V4dCwgMCwgc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc192ZXJzaW9uX2V4dCkpOworCWlmIChtd2lmaWV4X3NlbmRfY21kX3N5bmMocHJpdiwgSG9zdENtZF9DTURfVkVSU0lPTl9FWFQsCisJCQkJICAgIEhvc3RDbWRfQUNUX0dFTl9HRVQsIDAsICZ2ZXJfZXh0KSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZW5kcyBJT0NUTCByZXF1ZXN0IHRvIGdldCBzdGF0aXN0aWNzIGluZm9ybWF0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIHRoZSBJT0NUTCByZXF1ZXN0IGJ1ZmZlciwgZmlsbHMgaXQKKyAqIHdpdGggcmVxdWlzaXRlIHBhcmFtZXRlcnMgYW5kIGNhbGxzIHRoZSBJT0NUTCBoYW5kbGVyLgorICovCitpbnQKK213aWZpZXhfZ2V0X3N0YXRzX2luZm8oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJICAgICAgIHN0cnVjdCBtd2lmaWV4X2RzX2dldF9zdGF0cyAqbG9nKQoreworCWludCByZXQ7CisKKwlyZXQgPSBtd2lmaWV4X3NlbmRfY21kX3N5bmMocHJpdiwgSG9zdENtZF9DTURfODAyXzExX0dFVF9MT0csCisJCQkJICAgIEhvc3RDbWRfQUNUX0dFTl9HRVQsIDAsIGxvZyk7CisKKwlpZiAoIXJldCkgeworCQlwcml2LT53X3N0YXRzLmRpc2NhcmQuZnJhZ21lbnQgPSBsb2ctPmZjc19lcnJvcjsKKwkJcHJpdi0+d19zdGF0cy5kaXNjYXJkLnJldHJpZXMgPSBsb2ctPnJldHJ5OworCQlwcml2LT53X3N0YXRzLmRpc2NhcmQubWlzYyA9IGxvZy0+YWNrX2ZhaWx1cmU7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIElPQ1RMIHJlcXVlc3QgaGFuZGxlciB0byByZWFkL3dyaXRlIHJlZ2lzdGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgdGhlIGNvcnJlY3QgZmlybXdhcmUgY29tbWFuZCBhbmQKKyAqIGlzc3VlcyBpdC4KKyAqCisgKiBBY2Nlc3MgdG8gdGhlIGZvbGxvd2luZyByZWdpc3RlcnMgYXJlIHN1cHBvcnRlZCAtCisgKiAgICAgIC0gTUFDCisgKiAgICAgIC0gQkJQCisgKiAgICAgIC0gUkYKKyAqICAgICAgLSBQTUlDCisgKiAgICAgIC0gQ0FVCisgKi8KK3N0YXRpYyBpbnQgbXdpZmlleF9yZWdfbWVtX2lvY3RsX3JlZ19ydyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCQlzdHJ1Y3QgbXdpZmlleF9kc19yZWdfcncgKnJlZ19ydywKKwkJCQkJdTE2IGFjdGlvbikKK3sKKwl1MTYgY21kX25vOworCisJc3dpdGNoIChsZTMyX3RvX2NwdShyZWdfcnctPnR5cGUpKSB7CisJY2FzZSBNV0lGSUVYX1JFR19NQUM6CisJCWNtZF9ubyA9IEhvc3RDbWRfQ01EX01BQ19SRUdfQUNDRVNTOworCQlicmVhazsKKwljYXNlIE1XSUZJRVhfUkVHX0JCUDoKKwkJY21kX25vID0gSG9zdENtZF9DTURfQkJQX1JFR19BQ0NFU1M7CisJCWJyZWFrOworCWNhc2UgTVdJRklFWF9SRUdfUkY6CisJCWNtZF9ubyA9IEhvc3RDbWRfQ01EX1JGX1JFR19BQ0NFU1M7CisJCWJyZWFrOworCWNhc2UgTVdJRklFWF9SRUdfUE1JQzoKKwkJY21kX25vID0gSG9zdENtZF9DTURfUE1JQ19SRUdfQUNDRVNTOworCQlicmVhazsKKwljYXNlIE1XSUZJRVhfUkVHX0NBVToKKwkJY21kX25vID0gSG9zdENtZF9DTURfQ0FVX1JFR19BQ0NFU1M7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gbXdpZmlleF9zZW5kX2NtZF9zeW5jKHByaXYsIGNtZF9ubywgYWN0aW9uLCAwLCByZWdfcncpOworCit9CisKKy8qCisgKiBTZW5kcyBJT0NUTCByZXF1ZXN0IHRvIHdyaXRlIHRvIGEgcmVnaXN0ZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgdGhlIElPQ1RMIHJlcXVlc3QgYnVmZmVyLCBmaWxscyBpdAorICogd2l0aCByZXF1aXNpdGUgcGFyYW1ldGVycyBhbmQgY2FsbHMgdGhlIElPQ1RMIGhhbmRsZXIuCisgKi8KK2ludAorbXdpZmlleF9yZWdfd3JpdGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTMyIHJlZ190eXBlLAorCQkgIHUzMiByZWdfb2Zmc2V0LCB1MzIgcmVnX3ZhbHVlKQoreworCXN0cnVjdCBtd2lmaWV4X2RzX3JlZ19ydyByZWdfcnc7CisKKwlyZWdfcncudHlwZSA9IGNwdV90b19sZTMyKHJlZ190eXBlKTsKKwlyZWdfcncub2Zmc2V0ID0gY3B1X3RvX2xlMzIocmVnX29mZnNldCk7CisJcmVnX3J3LnZhbHVlID0gY3B1X3RvX2xlMzIocmVnX3ZhbHVlKTsKKworCXJldHVybiBtd2lmaWV4X3JlZ19tZW1faW9jdGxfcmVnX3J3KHByaXYsICZyZWdfcncsIEhvc3RDbWRfQUNUX0dFTl9TRVQpOworfQorCisvKgorICogU2VuZHMgSU9DVEwgcmVxdWVzdCB0byByZWFkIGZyb20gYSByZWdpc3Rlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyB0aGUgSU9DVEwgcmVxdWVzdCBidWZmZXIsIGZpbGxzIGl0CisgKiB3aXRoIHJlcXVpc2l0ZSBwYXJhbWV0ZXJzIGFuZCBjYWxscyB0aGUgSU9DVEwgaGFuZGxlci4KKyAqLworaW50Cittd2lmaWV4X3JlZ19yZWFkKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHUzMiByZWdfdHlwZSwKKwkJIHUzMiByZWdfb2Zmc2V0LCB1MzIgKnZhbHVlKQoreworCWludCByZXQ7CisJc3RydWN0IG13aWZpZXhfZHNfcmVnX3J3IHJlZ19ydzsKKworCXJlZ19ydy50eXBlID0gY3B1X3RvX2xlMzIocmVnX3R5cGUpOworCXJlZ19ydy5vZmZzZXQgPSBjcHVfdG9fbGUzMihyZWdfb2Zmc2V0KTsKKwlyZXQgPSBtd2lmaWV4X3JlZ19tZW1faW9jdGxfcmVnX3J3KHByaXYsICZyZWdfcncsIEhvc3RDbWRfQUNUX0dFTl9HRVQpOworCisJaWYgKHJldCkKKwkJZ290byBkb25lOworCisJKnZhbHVlID0gbGUzMl90b19jcHUocmVnX3J3LnZhbHVlKTsKKworZG9uZToKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogU2VuZHMgSU9DVEwgcmVxdWVzdCB0byByZWFkIGZyb20gRUVQUk9NLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIHRoZSBJT0NUTCByZXF1ZXN0IGJ1ZmZlciwgZmlsbHMgaXQKKyAqIHdpdGggcmVxdWlzaXRlIHBhcmFtZXRlcnMgYW5kIGNhbGxzIHRoZSBJT0NUTCBoYW5kbGVyLgorICovCitpbnQKK213aWZpZXhfZWVwcm9tX3JlYWQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTE2IG9mZnNldCwgdTE2IGJ5dGVzLAorCQkgICAgdTggKnZhbHVlKQoreworCWludCByZXQ7CisJc3RydWN0IG13aWZpZXhfZHNfcmVhZF9lZXByb20gcmRfZWVwcm9tOworCisJcmRfZWVwcm9tLm9mZnNldCA9IGNwdV90b19sZTE2KCh1MTYpIG9mZnNldCk7CisJcmRfZWVwcm9tLmJ5dGVfY291bnQgPSBjcHVfdG9fbGUxNigodTE2KSBieXRlcyk7CisKKwkvKiBTZW5kIHJlcXVlc3QgdG8gZmlybXdhcmUgKi8KKwlyZXQgPSBtd2lmaWV4X3NlbmRfY21kX3N5bmMocHJpdiwgSG9zdENtZF9DTURfODAyXzExX0VFUFJPTV9BQ0NFU1MsCisJCQkJICAgIEhvc3RDbWRfQUNUX0dFTl9HRVQsIDAsICZyZF9lZXByb20pOworCisJaWYgKCFyZXQpCisJCW1lbWNweSh2YWx1ZSwgcmRfZWVwcm9tLnZhbHVlLCBNQVhfRUVQUk9NX0RBVEEpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgYSBnZW5lcmljIElFLiBJbiBhZGRpdGlvbiB0byBnZW5lcmljIElFLCBpdCBjYW4KKyAqIGFsc28gaGFuZGxlIFdQQSwgV1BBMiBhbmQgV0FQSSBJRXMuCisgKi8KK3N0YXRpYyBpbnQKK213aWZpZXhfc2V0X2dlbl9pZV9oZWxwZXIoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggKmllX2RhdGFfcHRyLAorCQkJICB1MTYgaWVfbGVuKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBpZWVlX3R5cGVzX3ZlbmRvcl9oZWFkZXIgKnB2ZW5kb3JfaWU7CisJY29uc3QgdTggd3BhX291aVtdID0geyAweDAwLCAweDUwLCAweGYyLCAweDAxIH07CisJY29uc3QgdTggd3BzX291aVtdID0geyAweDAwLCAweDUwLCAweGYyLCAweDA0IH07CisKKwkvKiBJZiB0aGUgcGFzc2VkIGxlbmd0aCBpcyB6ZXJvLCByZXNldCB0aGUgYnVmZmVyICovCisJaWYgKCFpZV9sZW4pIHsKKwkJcHJpdi0+Z2VuX2llX2J1Zl9sZW4gPSAwOworCQlwcml2LT53cHMuc2Vzc2lvbl9lbmFibGUgPSBmYWxzZTsKKworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKCFpZV9kYXRhX3B0cikgeworCQlyZXR1cm4gLTE7CisJfQorCXB2ZW5kb3JfaWUgPSAoc3RydWN0IGllZWVfdHlwZXNfdmVuZG9yX2hlYWRlciAqKSBpZV9kYXRhX3B0cjsKKwkvKiBUZXN0IHRvIHNlZSBpZiBpdCBpcyBhIFdQQSBJRSwgaWYgbm90LCB0aGVuIGl0IGlzIGEgZ2VuIElFICovCisJaWYgKCgocHZlbmRvcl9pZS0+ZWxlbWVudF9pZCA9PSBXTEFOX0VJRF9XUEEpCisJICAgICAmJiAoIW1lbWNtcChwdmVuZG9yX2llLT5vdWksIHdwYV9vdWksIHNpemVvZih3cGFfb3VpKSkpKQorCQkJfHwgKHB2ZW5kb3JfaWUtPmVsZW1lbnRfaWQgPT0gV0xBTl9FSURfUlNOKSkgeworCisJCS8qIElFIGlzIGEgV1BBL1dQQTIgSUUgc28gY2FsbCBzZXRfd3BhIGZ1bmN0aW9uICovCisJCXJldCA9IG13aWZpZXhfc2V0X3dwYV9pZV9oZWxwZXIocHJpdiwgaWVfZGF0YV9wdHIsIGllX2xlbik7CisJCXByaXYtPndwcy5zZXNzaW9uX2VuYWJsZSA9IGZhbHNlOworCisJCXJldHVybiByZXQ7CisJfSBlbHNlIGlmIChwdmVuZG9yX2llLT5lbGVtZW50X2lkID09IFdMQU5fRUlEX0JTU19BQ19BQ0NFU1NfREVMQVkpIHsKKwkJLyogSUUgaXMgYSBXQVBJIElFIHNvIGNhbGwgc2V0X3dhcGkgZnVuY3Rpb24gKi8KKwkJcmV0ID0gbXdpZmlleF9zZXRfd2FwaV9pZShwcml2LCBpZV9kYXRhX3B0ciwgaWVfbGVuKTsKKworCQlyZXR1cm4gcmV0OworCX0KKwkvKgorCSAqIFZlcmlmeSB0aGF0IHRoZSBwYXNzZWQgbGVuZ3RoIGlzIG5vdCBsYXJnZXIgdGhhbiB0aGUKKwkgKiBhdmFpbGFibGUgc3BhY2UgcmVtYWluaW5nIGluIHRoZSBidWZmZXIKKwkgKi8KKwlpZiAoaWVfbGVuIDwgKHNpemVvZihwcml2LT5nZW5faWVfYnVmKSAtIHByaXYtPmdlbl9pZV9idWZfbGVuKSkgeworCisJCS8qIFRlc3QgdG8gc2VlIGlmIGl0IGlzIGEgV1BTIElFLCBpZiBzbywgZW5hYmxlCisJCSAqIHdwcyBzZXNzaW9uIGZsYWcKKwkJICovCisJCXB2ZW5kb3JfaWUgPSAoc3RydWN0IGllZWVfdHlwZXNfdmVuZG9yX2hlYWRlciAqKSBpZV9kYXRhX3B0cjsKKwkJaWYgKChwdmVuZG9yX2llLT5lbGVtZW50X2lkID09IFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQykKKwkJCQkmJiAoIW1lbWNtcChwdmVuZG9yX2llLT5vdWksIHdwc19vdWksCisJCQkJCQlzaXplb2Yod3BzX291aSkpKSkgeworCQkJcHJpdi0+d3BzLnNlc3Npb25fZW5hYmxlID0gdHJ1ZTsKKwkJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJCSJpbmZvOiBXUFMgU2Vzc2lvbiBFbmFibGVkLlxuIik7CisJCX0KKworCQkvKiBBcHBlbmQgdGhlIHBhc3NlZCBkYXRhIHRvIHRoZSBlbmQgb2YgdGhlCisJCSAgIGdlbkllQnVmZmVyICovCisJCW1lbWNweShwcml2LT5nZW5faWVfYnVmICsgcHJpdi0+Z2VuX2llX2J1Zl9sZW4sIGllX2RhdGFfcHRyLAorCQkJCQkJCQkJaWVfbGVuKTsKKwkJLyogSW5jcmVtZW50IHRoZSBzdG9yZWQgYnVmZmVyIGxlbmd0aCBieSB0aGUKKwkJICAgc2l6ZSBwYXNzZWQgKi8KKwkJcHJpdi0+Z2VuX2llX2J1Zl9sZW4gKz0gaWVfbGVuOworCX0gZWxzZSB7CisJCS8qIFBhc3NlZCBkYXRhIGRvZXMgbm90IGZpdCBpbiB0aGUgcmVtYWluaW5nCisJCSAgIGJ1ZmZlciBzcGFjZSAqLworCQlyZXQgPSAtMTsKKwl9CisKKwkvKiBSZXR1cm4gMCwgb3IgLTEgZm9yIGVycm9yIGNhc2UgKi8KKwlyZXR1cm4gcmV0OworfQorCisvKgorICogSU9DVEwgcmVxdWVzdCBoYW5kbGVyIHRvIHNldC9nZXQgZ2VuZXJpYyBJRS4KKyAqCisgKiBJbiBhZGRpdGlvbiB0byB2YXJpb3VzIGdlbmVyaWMgSUVzLCB0aGlzIGZ1bmN0aW9uIGNhbiBhbHNvIGJlCisgKiB1c2VkIHRvIHNldCB0aGUgQVJQIGZpbHRlci4KKyAqLworc3RhdGljIGludCBtd2lmaWV4X21pc2NfaW9jdGxfZ2VuX2llKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJICAgICBzdHJ1Y3QgbXdpZmlleF9kc19taXNjX2dlbl9pZSAqZ2VuX2llLAorCQkJCSAgICAgdTE2IGFjdGlvbikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKworCXN3aXRjaCAoZ2VuX2llLT50eXBlKSB7CisJY2FzZSBNV0lGSUVYX0lFX1RZUEVfR0VOX0lFOgorCQlpZiAoYWN0aW9uID09IEhvc3RDbWRfQUNUX0dFTl9HRVQpIHsKKwkJCWdlbl9pZS0+bGVuID0gcHJpdi0+d3BhX2llX2xlbjsKKwkJCW1lbWNweShnZW5faWUtPmllX2RhdGEsIHByaXYtPndwYV9pZSwgZ2VuX2llLT5sZW4pOworCQl9IGVsc2UgeworCQkJbXdpZmlleF9zZXRfZ2VuX2llX2hlbHBlcihwcml2LCBnZW5faWUtPmllX2RhdGEsCisJCQkJCQkgICh1MTYpIGdlbl9pZS0+bGVuKTsKKwkJfQorCQlicmVhazsKKwljYXNlIE1XSUZJRVhfSUVfVFlQRV9BUlBfRklMVEVSOgorCQltZW1zZXQoYWRhcHRlci0+YXJwX2ZpbHRlciwgMCwgc2l6ZW9mKGFkYXB0ZXItPmFycF9maWx0ZXIpKTsKKwkJaWYgKGdlbl9pZS0+bGVuID4gQVJQX0ZJTFRFUl9NQVhfQlVGX1NJWkUpIHsKKwkJCWFkYXB0ZXItPmFycF9maWx0ZXJfc2l6ZSA9IDA7CisJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgImludmFsaWQgQVJQIGZpbHRlciBzaXplXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfSBlbHNlIHsKKwkJCW1lbWNweShhZGFwdGVyLT5hcnBfZmlsdGVyLCBnZW5faWUtPmllX2RhdGEsCisJCQkJCQkJCWdlbl9pZS0+bGVuKTsKKwkJCWFkYXB0ZXItPmFycF9maWx0ZXJfc2l6ZSA9IGdlbl9pZS0+bGVuOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiaW52YWxpZCBJRSB0eXBlXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNlbmRzIElPQ1RMIHJlcXVlc3QgdG8gc2V0IGEgZ2VuZXJpYyBJRS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyB0aGUgSU9DVEwgcmVxdWVzdCBidWZmZXIsIGZpbGxzIGl0CisgKiB3aXRoIHJlcXVpc2l0ZSBwYXJhbWV0ZXJzIGFuZCBjYWxscyB0aGUgSU9DVEwgaGFuZGxlci4KKyAqLworaW50Cittd2lmaWV4X3NldF9nZW5faWUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggKmllLCBpbnQgaWVfbGVuKQoreworCXN0cnVjdCBtd2lmaWV4X2RzX21pc2NfZ2VuX2llIGdlbl9pZTsKKworCWlmIChpZV9sZW4gPiBJV19DVVNUT01fTUFYKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWdlbl9pZS50eXBlID0gTVdJRklFWF9JRV9UWVBFX0dFTl9JRTsKKwlnZW5faWUubGVuID0gaWVfbGVuOworCW1lbWNweShnZW5faWUuaWVfZGF0YSwgaWUsIGllX2xlbik7CisJaWYgKG13aWZpZXhfbWlzY19pb2N0bF9nZW5faWUocHJpdiwgJmdlbl9pZSwgSG9zdENtZF9BQ1RfR0VOX1NFVCkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3N0YV9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zdGFfcnguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmRkZGVjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zdGFfcnguYwpAQCAtMCwwICsxLDIwMCBAQAorLyoKKyAqIE1hcnZlbGwgV2lyZWxlc3MgTEFOIGRldmljZSBkcml2ZXI6IHN0YXRpb24gUlggZGF0YSBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuICBUaGUgTGljZW5zZSBwcm92aWRlcyBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQKKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4KKyAqLworCisjaW5jbHVkZSAiZGVjbC5oIgorI2luY2x1ZGUgImlvY3RsLmgiCisjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgImZ3LmgiCisjaW5jbHVkZSAibWFpbi5oIgorI2luY2x1ZGUgIjExbl9hZ2dyLmgiCisjaW5jbHVkZSAiMTFuX3J4cmVvcmRlci5oIgorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgdGhlIHJlY2VpdmVkIHBhY2tldCBhbmQgZm9yd2FyZHMgaXQKKyAqIHRvIGtlcm5lbC91cHBlciBsYXllci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHBhcnNlcyB0aHJvdWdoIHRoZSByZWNlaXZlZCBwYWNrZXQgYW5kIGRldGVybWluZXMKKyAqIGlmIGl0IGlzIGEgZGVidWcgcGFja2V0IG9yIG5vcm1hbCBwYWNrZXQuCisgKgorICogRm9yIG5vbi1kZWJ1ZyBwYWNrZXRzLCB0aGUgZnVuY3Rpb24gY2hvcHMgb2ZmIHVubmVjZXNzYXJ5IGxlYWRpbmcKKyAqIGhlYWRlciBieXRlcywgcmVjb25zdHJ1Y3RzIHRoZSBwYWNrZXQgYXMgYW4gZXRoZXJuZXQgZnJhbWUgb3IKKyAqIDgwMi4yL2xsYy9zbmFwIGZyYW1lIGFzIHJlcXVpcmVkLCBhbmQgc2VuZHMgaXQgdG8ga2VybmVsL3VwcGVyIGxheWVyLgorICoKKyAqIFRoZSBjb21wbGV0aW9uIGNhbGxiYWNrIGlzIGNhbGxlZCBhZnRlciBwcm9jZXNzaW5nIGluIGNvbXBsZXRlLgorICovCitpbnQgbXdpZmlleF9wcm9jZXNzX3J4X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtd2lmaWV4X3J4aW5mbyAqcnhfaW5mbyA9IE1XSUZJRVhfU0tCX1JYQ0Ioc2tiKTsKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0gYWRhcHRlci0+cHJpdltyeF9pbmZvLT5ic3NfaW5kZXhdOworCXN0cnVjdCByeF9wYWNrZXRfaGRyICpyeF9wa3RfaGRyOworCXN0cnVjdCByeHBkICpsb2NhbF9yeF9wZDsKKwlpbnQgaGRyX2Nob3A7CisJc3RydWN0IGV0aGhkciAqZXRoX2hkcjsKKwl1OCByZmMxMDQyX2V0aF9oZHJbRVRIX0FMRU5dID0geyAweGFhLCAweGFhLCAweDAzLCAweDAwLCAweDAwLCAweDAwIH07CisKKwlsb2NhbF9yeF9wZCA9IChzdHJ1Y3QgcnhwZCAqKSAoc2tiLT5kYXRhKTsKKworCXJ4X3BrdF9oZHIgPSAoc3RydWN0IHJ4X3BhY2tldF9oZHIgKikgKCh1OCAqKSBsb2NhbF9yeF9wZCArCisJCQkJbG9jYWxfcnhfcGQtPnJ4X3BrdF9vZmZzZXQpOworCisJaWYgKCFtZW1jbXAoJnJ4X3BrdF9oZHItPnJmYzEwNDJfaGRyLAorCQkgICAgcmZjMTA0Ml9ldGhfaGRyLCBzaXplb2YocmZjMTA0Ml9ldGhfaGRyKSkpIHsKKwkJLyoKKwkJICogIFJlcGxhY2UgdGhlIDgwMyBoZWFkZXIgYW5kIHJmYzEwNDIgaGVhZGVyIChsbGMvc25hcCkgd2l0aCBhbgorCQkgKiAgICBFdGhlcm5ldElJIGhlYWRlciwga2VlcCB0aGUgc3JjL2RzdCBhbmQgc25hcF90eXBlCisJCSAqICAgIChldGhlcnR5cGUpLgorCQkgKiAgVGhlIGZpcm13YXJlIG9ubHkgcGFzc2VzIHVwIFNOQVAgZnJhbWVzIGNvbnZlcnRpbmcKKwkJICogICAgYWxsIFJYIERhdGEgZnJvbSA4MDIuMTEgdG8gODAyLjIvTExDL1NOQVAgZnJhbWVzLgorCQkgKiAgVG8gY3JlYXRlIHRoZSBFdGhlcm5ldCBJSSwganVzdCBtb3ZlIHRoZSBzcmMsIGRzdCBhZGRyZXNzCisJCSAqICAgIHJpZ2h0IGJlZm9yZSB0aGUgc25hcF90eXBlLgorCQkgKi8KKwkJZXRoX2hkciA9IChzdHJ1Y3QgZXRoaGRyICopCisJCQkoKHU4ICopICZyeF9wa3RfaGRyLT5ldGg4MDNfaGRyCisJCQkgKyBzaXplb2YocnhfcGt0X2hkci0+ZXRoODAzX2hkcikgKworCQkJIHNpemVvZihyeF9wa3RfaGRyLT5yZmMxMDQyX2hkcikKKwkJCSAtIHNpemVvZihyeF9wa3RfaGRyLT5ldGg4MDNfaGRyLmhfZGVzdCkKKwkJCSAtIHNpemVvZihyeF9wa3RfaGRyLT5ldGg4MDNfaGRyLmhfc291cmNlKQorCQkJIC0gc2l6ZW9mKHJ4X3BrdF9oZHItPnJmYzEwNDJfaGRyLnNuYXBfdHlwZSkpOworCisJCW1lbWNweShldGhfaGRyLT5oX3NvdXJjZSwgcnhfcGt0X2hkci0+ZXRoODAzX2hkci5oX3NvdXJjZSwKKwkJICAgICAgIHNpemVvZihldGhfaGRyLT5oX3NvdXJjZSkpOworCQltZW1jcHkoZXRoX2hkci0+aF9kZXN0LCByeF9wa3RfaGRyLT5ldGg4MDNfaGRyLmhfZGVzdCwKKwkJICAgICAgIHNpemVvZihldGhfaGRyLT5oX2Rlc3QpKTsKKworCQkvKiBDaG9wIG9mZiB0aGUgcnhwZCArIHRoZSBleGNlc3MgbWVtb3J5IGZyb20gdGhlIDgwMi4yL2xsYy9zbmFwCisJCSAgIGhlYWRlciB0aGF0IHdhcyByZW1vdmVkLiAqLworCQloZHJfY2hvcCA9ICh1OCAqKSBldGhfaGRyIC0gKHU4ICopIGxvY2FsX3J4X3BkOworCX0gZWxzZSB7CisJCS8qIENob3Agb2ZmIHRoZSByeHBkICovCisJCWhkcl9jaG9wID0gKHU4ICopICZyeF9wa3RfaGRyLT5ldGg4MDNfaGRyIC0KKwkJCSh1OCAqKSBsb2NhbF9yeF9wZDsKKwl9CisKKwkvKiBDaG9wIG9mZiB0aGUgbGVhZGluZyBoZWFkZXIgYnl0ZXMgc28gdGhlIGl0IHBvaW50cyB0byB0aGUgc3RhcnQgb2YKKwkgICBlaXRoZXIgdGhlIHJlY29uc3RydWN0ZWQgRXRoSUkgZnJhbWUgb3IgdGhlIDgwMi4yL2xsYy9zbmFwIGZyYW1lICovCisJc2tiX3B1bGwoc2tiLCBoZHJfY2hvcCk7CisKKwlwcml2LT5yeHBkX3JhdGUgPSBsb2NhbF9yeF9wZC0+cnhfcmF0ZTsKKworCXByaXYtPnJ4cGRfaHRpbmZvID0gbG9jYWxfcnhfcGQtPmh0X2luZm87CisKKwlyZXQgPSBtd2lmaWV4X3JlY3ZfcGFja2V0KGFkYXB0ZXIsIHNrYik7CisJaWYgKHJldCA9PSAtMSkKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJyZWN2IHBhY2tldCBmYWlsZWRcbiIpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcHJvY2Vzc2VzIHRoZSByZWNlaXZlZCBidWZmZXIuCisgKgorICogVGhlIGZ1bmN0aW9uIGxvb2tzIGludG8gdGhlIFJ4UEQgYW5kIHBlcmZvcm1zIHNhbml0eSB0ZXN0cyBvbiB0aGUKKyAqIHJlY2VpdmVkIGJ1ZmZlciB0byBlbnN1cmUgaXRzIGEgdmFsaWQgcGFja2V0LCBiZWZvcmUgcHJvY2Vzc2luZyBpdAorICogZnVydGhlci4gSWYgdGhlIHBhY2tldCBpcyBkZXRlcm1pbmVkIHRvIGJlIGFnZ3JlZ2F0ZWQsIGl0IGlzCisgKiBkZS1hZ2dyZWdhdGVkIGFjY29yZGluZ2x5LiBOb24tdW5pY2FzdCBwYWNrZXRzIGFyZSBzZW50IGRpcmVjdGx5IHRvCisgKiB0aGUga2VybmVsL3VwcGVyIGxheWVycy4gVW5pY2FzdCBwYWNrZXRzIGFyZSBoYW5kZWQgb3ZlciB0byB0aGUKKyAqIFJ4IHJlb3JkZXJpbmcgcm91dGluZSBpZiAxMW4gaXMgZW5hYmxlZC4KKyAqCisgKiBUaGUgY29tcGxldGlvbiBjYWxsYmFjayBpcyBjYWxsZWQgYWZ0ZXIgcHJvY2Vzc2luZyBpbiBjb21wbGV0ZS4KKyAqLworaW50IG13aWZpZXhfcHJvY2Vzc19zdGFfcnhfcGFja2V0KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCByeHBkICpsb2NhbF9yeF9wZDsKKwlzdHJ1Y3QgbXdpZmlleF9yeGluZm8gKnJ4X2luZm8gPSBNV0lGSUVYX1NLQl9SWENCKHNrYik7CisJc3RydWN0IHJ4X3BhY2tldF9oZHIgKnJ4X3BrdF9oZHI7CisJdTggdGFbRVRIX0FMRU5dOworCXUxNiByeF9wa3RfdHlwZTsKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0gYWRhcHRlci0+cHJpdltyeF9pbmZvLT5ic3NfaW5kZXhdOworCisJbG9jYWxfcnhfcGQgPSAoc3RydWN0IHJ4cGQgKikgKHNrYi0+ZGF0YSk7CisJcnhfcGt0X3R5cGUgPSBsb2NhbF9yeF9wZC0+cnhfcGt0X3R5cGU7CisKKwlyeF9wa3RfaGRyID0gKHN0cnVjdCByeF9wYWNrZXRfaGRyICopICgodTggKikgbG9jYWxfcnhfcGQgKworCQkJCQlsb2NhbF9yeF9wZC0+cnhfcGt0X29mZnNldCk7CisKKwlpZiAoKGxvY2FsX3J4X3BkLT5yeF9wa3Rfb2Zmc2V0ICsgbG9jYWxfcnhfcGQtPnJ4X3BrdF9sZW5ndGgpID4KKwkgICAgKHUxNikgc2tiLT5sZW4pIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJ3cm9uZyByeCBwYWNrZXQ6IGxlbj0lZCwiCisJCQkiIHJ4X3BrdF9vZmZzZXQ9JWQsIHJ4X3BrdF9sZW5ndGg9JWRcbiIsIHNrYi0+bGVuLAorCQkgICAgICAgbG9jYWxfcnhfcGQtPnJ4X3BrdF9vZmZzZXQsIGxvY2FsX3J4X3BkLT5yeF9wa3RfbGVuZ3RoKTsKKwkJcHJpdi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChsb2NhbF9yeF9wZC0+cnhfcGt0X3R5cGUgPT0gUEtUX1RZUEVfQU1TRFUpIHsKKwkJc3RydWN0IHNrX2J1ZmZfaGVhZCBsaXN0OworCQlzdHJ1Y3Qgc2tfYnVmZiAqcnhfc2tiOworCisJCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbGlzdCk7CisKKwkJc2tiX3B1bGwoc2tiLCBsb2NhbF9yeF9wZC0+cnhfcGt0X29mZnNldCk7CisJCXNrYl90cmltKHNrYiwgbG9jYWxfcnhfcGQtPnJ4X3BrdF9sZW5ndGgpOworCisJCWllZWU4MDIxMV9hbXNkdV90b184MDIzcyhza2IsICZsaXN0LCBwcml2LT5jdXJyX2FkZHIsCisJCQkJcHJpdi0+d2Rldi0+aWZ0eXBlLCAwLCBmYWxzZSk7CisKKwkJd2hpbGUgKCFza2JfcXVldWVfZW1wdHkoJmxpc3QpKSB7CisJCQlyeF9za2IgPSBfX3NrYl9kZXF1ZXVlKCZsaXN0KTsKKwkJCXJldCA9IG13aWZpZXhfcmVjdl9wYWNrZXQoYWRhcHRlciwgcnhfc2tiKTsKKwkJCWlmIChyZXQgPT0gLTEpCisJCQkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJSeCBvZiBBLU1TRFUgZmFpbGVkIik7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgcGFja2V0IGlzIG5vdCBhbiB1bmljYXN0IHBhY2tldCB0aGVuIHNlbmQgdGhlIHBhY2tldAorCSAqIGRpcmVjdGx5IHRvIG9zLiBEb24ndCBwYXNzIHRocnUgcnggcmVvcmRlcmluZworCSAqLworCWlmICghSVNfMTFOX0VOQUJMRUQocHJpdikgfHwKKwkgICAgbWVtY21wKHByaXYtPmN1cnJfYWRkciwgcnhfcGt0X2hkci0+ZXRoODAzX2hkci5oX2Rlc3QsIEVUSF9BTEVOKSkgeworCQltd2lmaWV4X3Byb2Nlc3NfcnhfcGFja2V0KGFkYXB0ZXIsIHNrYik7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKG13aWZpZXhfcXVldWluZ19yYV9iYXNlZChwcml2KSkgeworCQltZW1jcHkodGEsIHJ4X3BrdF9oZHItPmV0aDgwM19oZHIuaF9zb3VyY2UsIEVUSF9BTEVOKTsKKwl9IGVsc2UgeworCQlpZiAocnhfcGt0X3R5cGUgIT0gUEtUX1RZUEVfQkFSKQorCQkJcHJpdi0+cnhfc2VxW2xvY2FsX3J4X3BkLT5wcmlvcml0eV0gPQorCQkJCQkJbG9jYWxfcnhfcGQtPnNlcV9udW07CisJCW1lbWNweSh0YSwgcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLm1hY19hZGRyZXNzLAorCQkgICAgICAgRVRIX0FMRU4pOworCX0KKworCS8qIFJlb3JkZXIgYW5kIHNlbmQgdG8gT1MgKi8KKwlyZXQgPSBtd2lmaWV4XzExbl9yeF9yZW9yZGVyX3BrdChwcml2LCBsb2NhbF9yeF9wZC0+c2VxX251bSwKKwkJCQkJICAgICBsb2NhbF9yeF9wZC0+cHJpb3JpdHksIHRhLAorCQkJCQkgICAgICh1OCkgbG9jYWxfcnhfcGQtPnJ4X3BrdF90eXBlLAorCQkJCQkJKHZvaWQgKikgc2tiKTsKKworCWlmIChyZXQgfHwgKHJ4X3BrdF90eXBlID09IFBLVF9UWVBFX0JBUikpIHsKKwkJaWYgKHByaXYgJiYgKHJldCA9PSAtMSkpCisJCQlwcml2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zdGFfdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvc3RhX3R4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE2MjIxYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvc3RhX3R4LmMKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiBNYXJ2ZWxsIFdpcmVsZXNzIExBTiBkZXZpY2UgZHJpdmVyOiBzdGF0aW9uIFRYIGRhdGEgaGFuZGxpbmcKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwKKyAqIEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MQorICogKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbgorICogYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoCisgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQSBvciBvbiB0aGUKKyAqIHdvcmxkd2lkZSB3ZWIgYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dC4KKyAqCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0CisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuCisgKi8KKworI2luY2x1ZGUgImRlY2wuaCIKKyNpbmNsdWRlICJpb2N0bC5oIgorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJmdy5oIgorI2luY2x1ZGUgIm1haW4uaCIKKyNpbmNsdWRlICJ3bW0uaCIKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZmlsbHMgdGhlIFR4UEQgZm9yIHR4IHBhY2tldHMuCisgKgorICogVGhlIFR4IGJ1ZmZlciByZWNlaXZlZCBieSB0aGlzIGZ1bmN0aW9uIHNob3VsZCBhbHJlYWR5IGhhdmUgdGhlCisgKiBoZWFkZXIgc3BhY2UgYWxsb2NhdGVkIGZvciBUeFBELgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5zZXJ0cyB0aGUgVHhQRCBpbiBiZXR3ZWVuIGludGVyZmFjZSBoZWFkZXIgYW5kIGFjdHVhbAorICogZGF0YSBhbmQgYWRqdXN0cyB0aGUgYnVmZmVyIHBvaW50ZXJzIGFjY29yZGluZ2x5LgorICoKKyAqIFRoZSBmb2xsb3dpbmcgVHhQRCBmaWVsZHMgYXJlIHNldCBieSB0aGlzIGZ1bmN0aW9uLCBhcyByZXF1aXJlZCAtCisgKiAgICAgIC0gQlNTIG51bWJlcgorICogICAgICAtIFR4IHBhY2tldCBsZW5ndGggYW5kIG9mZnNldAorICogICAgICAtIFByaW9yaXR5CisgKiAgICAgIC0gUGFja2V0IGRlbGF5CisgKiAgICAgIC0gUHJpb3JpdHkgc3BlY2lmaWMgVHggY29udHJvbAorICogICAgICAtIEZsYWdzCisgKi8KK3ZvaWQgKm13aWZpZXhfcHJvY2Vzc19zdGFfdHhwZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCXN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IHR4cGQgKmxvY2FsX3R4X3BkOworCXN0cnVjdCBtd2lmaWV4X3R4aW5mbyAqdHhfaW5mbyA9IE1XSUZJRVhfU0tCX1RYQ0Ioc2tiKTsKKworCWlmICghc2tiLT5sZW4pIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJUeDogYmFkIHBhY2tldCBsZW5ndGg6ICVkXG4iLAorCQkgICAgICAgc2tiLT5sZW4pOworCQl0eF9pbmZvLT5zdGF0dXNfY29kZSA9IC0xOworCQlyZXR1cm4gc2tiLT5kYXRhOworCX0KKworCUJVR19PTihza2JfaGVhZHJvb20oc2tiKSA8IChzaXplb2YoKmxvY2FsX3R4X3BkKSArIElOVEZfSEVBREVSX0xFTikpOworCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpsb2NhbF90eF9wZCkpOworCisJbG9jYWxfdHhfcGQgPSAoc3RydWN0IHR4cGQgKikgc2tiLT5kYXRhOworCW1lbXNldChsb2NhbF90eF9wZCwgMCwgc2l6ZW9mKHN0cnVjdCB0eHBkKSk7CisJbG9jYWxfdHhfcGQtPmJzc19udW0gPSBwcml2LT5ic3NfbnVtOworCWxvY2FsX3R4X3BkLT5ic3NfdHlwZSA9IHByaXYtPmJzc190eXBlOworCWxvY2FsX3R4X3BkLT50eF9wa3RfbGVuZ3RoID0gY3B1X3RvX2xlMTYoKHUxNikgKHNrYi0+bGVuIC0KKwkJCQkJCQlzaXplb2Yoc3RydWN0IHR4cGQpKSk7CisKKwlsb2NhbF90eF9wZC0+cHJpb3JpdHkgPSAodTgpIHNrYi0+cHJpb3JpdHk7CisJbG9jYWxfdHhfcGQtPnBrdF9kZWxheV8ybXMgPQorCQltd2lmaWV4X3dtbV9jb21wdXRlX2Rydl9wa3RfZGVsYXkocHJpdiwgc2tiKTsKKworCWlmIChsb2NhbF90eF9wZC0+cHJpb3JpdHkgPAorCSAgICBBUlJBWV9TSVpFKHByaXYtPndtbS51c2VyX3ByaV9wa3RfdHhfY3RybCkpCisJCS8qCisJCSAqIFNldCB0aGUgcHJpb3JpdHkgc3BlY2lmaWMgdHhfY29udHJvbCBmaWVsZCwgc2V0dGluZyBvZiAwIHdpbGwKKwkJICogICBjYXVzZSB0aGUgZGVmYXVsdCB2YWx1ZSB0byBiZSB1c2VkIGxhdGVyIGluIHRoaXMgZnVuY3Rpb24KKwkJICovCisJCWxvY2FsX3R4X3BkLT50eF9jb250cm9sID0KKwkJCWNwdV90b19sZTMyKHByaXYtPndtbS51c2VyX3ByaV9wa3RfdHhfY3RybFtsb2NhbF90eF9wZC0+CisJCQkJCQkJIHByaW9yaXR5XSk7CisKKwlpZiAoYWRhcHRlci0+cHBzX3VhcHNkX21vZGUpIHsKKwkJaWYgKG13aWZpZXhfY2hlY2tfbGFzdF9wYWNrZXRfaW5kaWNhdGlvbihwcml2KSkgeworCQkJYWRhcHRlci0+dHhfbG9ja19mbGFnID0gdHJ1ZTsKKwkJCWxvY2FsX3R4X3BkLT5mbGFncyA9CisJCQkJTVdJRklFWF9UeFBEX1BPV0VSX01HTVRfTEFTVF9QQUNLRVQ7CisJCX0KKwl9CisKKwkvKiBPZmZzZXQgb2YgYWN0dWFsIGRhdGEgKi8KKwlsb2NhbF90eF9wZC0+dHhfcGt0X29mZnNldCA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgdHhwZCkpOworCisJLyogbWFrZSBzcGFjZSBmb3IgSU5URl9IRUFERVJfTEVOICovCisJc2tiX3B1c2goc2tiLCBJTlRGX0hFQURFUl9MRU4pOworCisJaWYgKCFsb2NhbF90eF9wZC0+dHhfY29udHJvbCkKKwkJLyogVHhDdHJsIHNldCBieSB1c2VyIG9yIGRlZmF1bHQgKi8KKwkJbG9jYWxfdHhfcGQtPnR4X2NvbnRyb2wgPSBjcHVfdG9fbGUzMihwcml2LT5wa3RfdHhfY3RybCk7CisKKwlyZXR1cm4gc2tiLT5kYXRhOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiB0ZWxscyBmaXJtd2FyZSB0byBzZW5kIGEgTlVMTCBkYXRhIHBhY2tldC4KKyAqCisgKiBUaGUgZnVuY3Rpb24gY3JlYXRlcyBhIE5VTEwgZGF0YSBwYWNrZXQgd2l0aCBUeFBEIGFuZCBzZW5kcyB0byB0aGUKKyAqIGZpcm13YXJlIGZvciB0cmFuc21pc3Npb24sIHdpdGggaGlnaGVzdCBwcmlvcml0eSBzZXR0aW5nLgorICovCitpbnQgbXdpZmlleF9zZW5kX251bGxfcGFja2V0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHU4IGZsYWdzKQoreworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCB0eHBkICpsb2NhbF90eF9wZDsKKy8qIHNpemVvZihzdHJ1Y3QgdHhwZCkgKyBJbnRlcmZhY2Ugc3BlY2lmaWMgaGVhZGVyICovCisjZGVmaW5lIE5VTExfUEFDS0VUX0hEUiA2NAorCXUzMiBkYXRhX2xlbiA9IE5VTExfUEFDS0VUX0hEUjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCByZXQ7CisJc3RydWN0IG13aWZpZXhfdHhpbmZvICp0eF9pbmZvID0gTlVMTDsKKworCWlmIChhZGFwdGVyLT5zdXJwcmlzZV9yZW1vdmVkKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIXByaXYtPm1lZGlhX2Nvbm5lY3RlZCkKKwkJcmV0dXJuIC0xOworCisJaWYgKGFkYXB0ZXItPmRhdGFfc2VudCkKKwkJcmV0dXJuIC0xOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihkYXRhX2xlbik7CisJaWYgKCFza2IpCisJCXJldHVybiAtMTsKKworCXR4X2luZm8gPSBNV0lGSUVYX1NLQl9UWENCKHNrYik7CisJdHhfaW5mby0+YnNzX2luZGV4ID0gcHJpdi0+YnNzX2luZGV4OworCXNrYl9yZXNlcnZlKHNrYiwgc2l6ZW9mKHN0cnVjdCB0eHBkKSArIElOVEZfSEVBREVSX0xFTik7CisJc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IHR4cGQpKTsKKworCWxvY2FsX3R4X3BkID0gKHN0cnVjdCB0eHBkICopIHNrYi0+ZGF0YTsKKwlsb2NhbF90eF9wZC0+dHhfY29udHJvbCA9IGNwdV90b19sZTMyKHByaXYtPnBrdF90eF9jdHJsKTsKKwlsb2NhbF90eF9wZC0+ZmxhZ3MgPSBmbGFnczsKKwlsb2NhbF90eF9wZC0+cHJpb3JpdHkgPSBXTU1fSElHSEVTVF9QUklPUklUWTsKKwlsb2NhbF90eF9wZC0+dHhfcGt0X29mZnNldCA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgdHhwZCkpOworCWxvY2FsX3R4X3BkLT5ic3NfbnVtID0gcHJpdi0+YnNzX251bTsKKwlsb2NhbF90eF9wZC0+YnNzX3R5cGUgPSBwcml2LT5ic3NfdHlwZTsKKworCXNrYl9wdXNoKHNrYiwgSU5URl9IRUFERVJfTEVOKTsKKworCXJldCA9IGFkYXB0ZXItPmlmX29wcy5ob3N0X3RvX2NhcmQoYWRhcHRlciwgTVdJRklFWF9UWVBFX0RBVEEsCisJCQkJCSAgICAgc2tiLT5kYXRhLCBza2ItPmxlbiwgTlVMTCk7CisJc3dpdGNoIChyZXQpIHsKKwljYXNlIC1FQlVTWToKKwkJYWRhcHRlci0+ZGF0YV9zZW50ID0gdHJ1ZTsKKwkJLyogRmFsbCB0aHJvdWdoIEZBSUxVUkUgaGFuZGxpbmcgKi8KKwljYXNlIC0xOgorCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIiVzOiBob3N0X3RvX2NhcmQgZmFpbGVkOiByZXQ9JWRcbiIsCisJCQkJCQlfX2Z1bmNfXywgcmV0KTsKKwkJYWRhcHRlci0+ZGJnLm51bV90eF9ob3N0X3RvX2NhcmRfZmFpbHVyZSsrOworCQlicmVhazsKKwljYXNlIDA6CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZGF0YTogJXM6IGhvc3RfdG9fY2FyZCBzdWNjZWVkZWRcbiIsCisJCQkJCQlfX2Z1bmNfXyk7CisJCWFkYXB0ZXItPnR4X2xvY2tfZmxhZyA9IHRydWU7CisJCWJyZWFrOworCWNhc2UgLUVJTlBST0dSRVNTOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgd2UgbmVlZCB0byBzZW5kIGxhc3QgcGFja2V0IGluZGljYXRpb24uCisgKi8KK3U4Cittd2lmaWV4X2NoZWNrX2xhc3RfcGFja2V0X2luZGljYXRpb24oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwl1OCByZXQgPSBmYWxzZTsKKworCWlmICghYWRhcHRlci0+c2xlZXBfcGVyaW9kLnBlcmlvZCkKKwkJcmV0dXJuIHJldDsKKwlpZiAobXdpZmlleF93bW1fbGlzdHNfZW1wdHkoYWRhcHRlcikpCisJCQlyZXQgPSB0cnVlOworCisJaWYgKHJldCAmJiAhYWRhcHRlci0+Y21kX3NlbnQgJiYgIWFkYXB0ZXItPmN1cnJfY21kCisJICAgICYmICFpc19jb21tYW5kX3BlbmRpbmcoYWRhcHRlcikpIHsKKwkJYWRhcHRlci0+ZGVsYXlfbnVsbF9wa3QgPSBmYWxzZTsKKwkJcmV0ID0gdHJ1ZTsKKwl9IGVsc2UgeworCQlyZXQgPSBmYWxzZTsKKwkJYWRhcHRlci0+ZGVsYXlfbnVsbF9wa3QgPSB0cnVlOworCX0KKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC90eHJ4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3R4cnguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTAxMjA4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC90eHJ4LmMKQEAgLTAsMCArMSwyMDAgQEAKKy8qCisgKiBNYXJ2ZWxsIFdpcmVsZXNzIExBTiBkZXZpY2UgZHJpdmVyOiBnZW5lcmljIFRYL1JYIGRhdGEgaGFuZGxpbmcKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwKKyAqIEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MQorICogKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbgorICogYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoCisgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQSBvciBvbiB0aGUKKyAqIHdvcmxkd2lkZSB3ZWIgYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dC4KKyAqCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0CisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuCisgKi8KKworI2luY2x1ZGUgImRlY2wuaCIKKyNpbmNsdWRlICJpb2N0bC5oIgorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJmdy5oIgorI2luY2x1ZGUgIm1haW4uaCIKKyNpbmNsdWRlICJ3bW0uaCIKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcHJvY2Vzc2VzIHRoZSByZWNlaXZlZCBidWZmZXIuCisgKgorICogTWFpbiByZXNwb25zaWJpbGl0eSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIHBhcnNlIHRoZSBSeFBEIHRvCisgKiBpZGVudGlmeSB0aGUgY29ycmVjdCBpbnRlcmZhY2UgdGhpcyBwYWNrZXQgaXMgaGVhZGVkIGZvciBhbmQKKyAqIGZvcndhcmRpbmcgaXQgdG8gdGhlIGFzc29jaWF0ZWQgaGFuZGxpbmcgZnVuY3Rpb24sIHdoZXJlIHRoZQorICogcGFja2V0IHdpbGwgYmUgZnVydGhlciBwcm9jZXNzZWQgYW5kIHNlbnQgdG8ga2VybmVsL3VwcGVyIGxheWVyCisgKiBpZiByZXF1aXJlZC4KKyAqLworaW50IG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPQorCQltd2lmaWV4X2dldF9wcml2KGFkYXB0ZXIsIE1XSUZJRVhfQlNTX1JPTEVfQU5ZKTsKKwlzdHJ1Y3QgcnhwZCAqbG9jYWxfcnhfcGQ7CisJc3RydWN0IG13aWZpZXhfcnhpbmZvICpyeF9pbmZvID0gTVdJRklFWF9TS0JfUlhDQihza2IpOworCisJbG9jYWxfcnhfcGQgPSAoc3RydWN0IHJ4cGQgKikgKHNrYi0+ZGF0YSk7CisJLyogR2V0IHRoZSBCU1MgbnVtYmVyIGZyb20gcnhwZCwgZ2V0IGNvcnJlc3BvbmRpbmcgcHJpdiAqLworCXByaXYgPSBtd2lmaWV4X2dldF9wcml2X2J5X2lkKGFkYXB0ZXIsIGxvY2FsX3J4X3BkLT5ic3NfbnVtICYKKwkJCQkgICAgICBCU1NfTlVNX01BU0ssIGxvY2FsX3J4X3BkLT5ic3NfdHlwZSk7CisJaWYgKCFwcml2KQorCQlwcml2ID0gbXdpZmlleF9nZXRfcHJpdihhZGFwdGVyLCBNV0lGSUVYX0JTU19ST0xFX0FOWSk7CisKKwlyeF9pbmZvLT5ic3NfaW5kZXggPSBwcml2LT5ic3NfaW5kZXg7CisKKwlyZXR1cm4gbXdpZmlleF9wcm9jZXNzX3N0YV9yeF9wYWNrZXQoYWRhcHRlciwgc2tiKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG13aWZpZXhfaGFuZGxlX3J4X3BhY2tldCk7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgcGFja2V0IHRvIGRldmljZS4KKyAqCisgKiBJdCBwcm9jZXNzZXMgdGhlIHBhY2tldCB0byBhZGQgdGhlIFR4UEQsIGNoZWNrcyBjb25kaXRpb24gYW5kCisgKiBzZW5kcyB0aGUgcHJvY2Vzc2VkIHBhY2tldCB0byBmaXJtd2FyZSBmb3IgdHJhbnNtaXNzaW9uLgorICoKKyAqIE9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwgdGhlIGZ1bmN0aW9uIGNhbGxzIHRoZSBjb21wbGV0aW9uIGNhbGxiYWNrCisgKiBhbmQgbG9ncyB0aGUgdGltZS4KKyAqLworaW50IG13aWZpZXhfcHJvY2Vzc190eChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgICAgc3RydWN0IG13aWZpZXhfdHhfcGFyYW0gKnR4X3BhcmFtKQoreworCWludCByZXQgPSAtMTsKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwl1OCAqaGVhZF9wdHI7CisJc3RydWN0IHR4cGQgKmxvY2FsX3R4X3BkID0gTlVMTDsKKworCWhlYWRfcHRyID0gKHU4ICopIG13aWZpZXhfcHJvY2Vzc19zdGFfdHhwZChwcml2LCBza2IpOworCWlmIChoZWFkX3B0cikgeworCQlpZiAoR0VUX0JTU19ST0xFKHByaXYpID09IE1XSUZJRVhfQlNTX1JPTEVfU1RBKQorCQkJbG9jYWxfdHhfcGQgPQorCQkJCShzdHJ1Y3QgdHhwZCAqKSAoaGVhZF9wdHIgKyBJTlRGX0hFQURFUl9MRU4pOworCisJCXJldCA9IGFkYXB0ZXItPmlmX29wcy5ob3N0X3RvX2NhcmQoYWRhcHRlciwgTVdJRklFWF9UWVBFX0RBVEEsCisJCQkJCSAgICAgc2tiLT5kYXRhLCBza2ItPmxlbiwgdHhfcGFyYW0pOworCX0KKworCXN3aXRjaCAocmV0KSB7CisJY2FzZSAtRUJVU1k6CisJCWlmICgoR0VUX0JTU19ST0xFKHByaXYpID09IE1XSUZJRVhfQlNTX1JPTEVfU1RBKSAmJgorCQkJKGFkYXB0ZXItPnBwc191YXBzZF9tb2RlKSAmJgorCQkJKGFkYXB0ZXItPnR4X2xvY2tfZmxhZykpIHsKKwkJCQlwcml2LT5hZGFwdGVyLT50eF9sb2NrX2ZsYWcgPSBmYWxzZTsKKwkJCQlsb2NhbF90eF9wZC0+ZmxhZ3MgPSAwOworCQl9CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZGF0YTogLUVCVVNZIGlzIHJldHVybmVkXG4iKTsKKwkJYnJlYWs7CisJY2FzZSAtMToKKwkJYWRhcHRlci0+ZGF0YV9zZW50ID0gZmFsc2U7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAibXdpZmlleF93cml0ZV9kYXRhX2FzeW5jIGZhaWxlZDogMHglWFxuIiwKKwkJICAgICAgIHJldCk7CisJCWFkYXB0ZXItPmRiZy5udW1fdHhfaG9zdF90b19jYXJkX2ZhaWx1cmUrKzsKKwkJbXdpZmlleF93cml0ZV9kYXRhX2NvbXBsZXRlKGFkYXB0ZXIsIHNrYiwgcmV0KTsKKwkJYnJlYWs7CisJY2FzZSAtRUlOUFJPR1JFU1M6CisJCWFkYXB0ZXItPmRhdGFfc2VudCA9IGZhbHNlOworCQlicmVhazsKKwljYXNlIDA6CisJCW13aWZpZXhfd3JpdGVfZGF0YV9jb21wbGV0ZShhZGFwdGVyLCBza2IsIHJldCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBQYWNrZXQgc2VuZCBjb21wbGV0aW9uIGNhbGxiYWNrIGhhbmRsZXIuCisgKgorICogSXQgZWl0aGVyIGZyZWVzIHRoZSBidWZmZXIgZGlyZWN0bHkgb3IgZm9yd2FyZHMgaXQgdG8gYW5vdGhlcgorICogY29tcGxldGlvbiBjYWxsYmFjayB3aGljaCBjaGVja3MgY29uZGl0aW9ucywgdXBkYXRlcyBzdGF0aXN0aWNzLAorICogd2FrZXMgdXAgc3RhbGxlZCB0cmFmZmljIHF1ZXVlIGlmIHJlcXVpcmVkLCBhbmQgdGhlbiBmcmVlcyB0aGUgYnVmZmVyLgorICovCitpbnQgbXdpZmlleF93cml0ZV9kYXRhX2NvbXBsZXRlKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCAqdHByaXY7CisJc3RydWN0IG13aWZpZXhfdHhpbmZvICp0eF9pbmZvOworCWludCBpOworCisJaWYgKCFza2IpCisJCXJldHVybiAwOworCisJdHhfaW5mbyA9IE1XSUZJRVhfU0tCX1RYQ0Ioc2tiKTsKKwlwcml2ID0gbXdpZmlleF9ic3NfaW5kZXhfdG9fcHJpdihhZGFwdGVyLCB0eF9pbmZvLT5ic3NfaW5kZXgpOworCWlmICghcHJpdikKKwkJZ290byBkb25lOworCisJcHJpdi0+bmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJaWYgKCFzdGF0dXMpIHsKKwkJcHJpdi0+c3RhdHMudHhfcGFja2V0cysrOworCQlwcml2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwl9IGVsc2UgeworCQlwcml2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwl9CisJYXRvbWljX2RlYygmYWRhcHRlci0+dHhfcGVuZGluZyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+cHJpdl9udW07IGkrKykgeworCisJCXRwcml2ID0gYWRhcHRlci0+cHJpdltpXTsKKworCQlpZiAoKEdFVF9CU1NfUk9MRSh0cHJpdikgPT0gTVdJRklFWF9CU1NfUk9MRV9TVEEpCisJCQkJJiYgKHRwcml2LT5tZWRpYV9jb25uZWN0ZWQpKSB7CisJCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZCh0cHJpdi0+bmV0ZGV2KSkKKwkJCQluZXRpZl93YWtlX3F1ZXVlKHRwcml2LT5uZXRkZXYpOworCQl9CisJfQorZG9uZToKKwlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBQYWNrZXQgcmVjZWl2ZSBjb21wbGV0aW9uIGNhbGxiYWNrIGhhbmRsZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBjYWxscyBhbm90aGVyIGNvbXBsZXRpb24gY2FsbGJhY2sgaGFuZGxlciB3aGljaAorICogdXBkYXRlcyB0aGUgc3RhdGlzdGljcywgYW5kIG9wdGlvbmFsbHkgdXBkYXRlcyB0aGUgcGFyZW50IGJ1ZmZlcgorICogdXNlIGNvdW50IGJlZm9yZSBmcmVlaW5nIHRoZSByZWNlaXZlZCBwYWNrZXQuCisgKi8KK2ludCBtd2lmaWV4X3JlY3ZfcGFja2V0X2NvbXBsZXRlKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJIHN0cnVjdCBza19idWZmICpza2IsIGludCBzdGF0dXMpCit7CisJc3RydWN0IG13aWZpZXhfcnhpbmZvICpyeF9pbmZvID0gTVdJRklFWF9TS0JfUlhDQihza2IpOworCXN0cnVjdCBtd2lmaWV4X3J4aW5mbyAqcnhfaW5mb19wYXJlbnQ7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3BhcmVudDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcHJpdiA9IGFkYXB0ZXItPnByaXZbcnhfaW5mby0+YnNzX2luZGV4XTsKKworCWlmIChwcml2ICYmIChzdGF0dXMgPT0gLTEpKQorCQlwcml2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisKKwlpZiAocnhfaW5mby0+cGFyZW50KSB7CisJCXNrYl9wYXJlbnQgPSByeF9pbmZvLT5wYXJlbnQ7CisJCXJ4X2luZm9fcGFyZW50ID0gTVdJRklFWF9TS0JfUlhDQihza2JfcGFyZW50KTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfcGt0X2xvY2ssIGZsYWdzKTsKKwkJLS1yeF9pbmZvX3BhcmVudC0+dXNlX2NvdW50OworCisJCWlmICghcnhfaW5mb19wYXJlbnQtPnVzZV9jb3VudCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cnhfcGt0X2xvY2ssIGZsYWdzKTsKKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYl9wYXJlbnQpOworCQl9IGVsc2UgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cnhfcGt0X2xvY2ssIGZsYWdzKTsKKwkJfQorCX0gZWxzZSB7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3V0aWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvdXRpbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MTI5MTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3V0aWwuYwpAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAqIE1hcnZlbGwgV2lyZWxlc3MgTEFOIGRldmljZSBkcml2ZXI6IHV0aWxpdHkgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0ZWQgYnkgTWFydmVsbCBJbnRlcm5hdGlvbmFsCisgKiBMdGQuIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKyAqICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgdXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgaW4KKyAqIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBvZiB3aGljaAorICogaXMgYXZhaWxhYmxlIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0Egb3Igb24gdGhlCisgKiB3b3JsZHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQuCisgKgorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNlIHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dAorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLgorICovCisKKyNpbmNsdWRlICJkZWNsLmgiCisjaW5jbHVkZSAiaW9jdGwuaCIKKyNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAiZncuaCIKKyNpbmNsdWRlICJtYWluLmgiCisjaW5jbHVkZSAid21tLmgiCisjaW5jbHVkZSAiMTFuLmgiCisKKy8qCisgKiBGaXJtd2FyZSBpbml0aWFsaXphdGlvbiBjb21wbGV0ZSBjYWxsYmFjayBoYW5kbGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2FrZXMgdXAgdGhlIGZ1bmN0aW9uIHdhaXRpbmcgb24gdGhlIGluaXQKKyAqIHdhaXQgcXVldWUgZm9yIHRoZSBmaXJtd2FyZSBpbml0aWFsaXphdGlvbiB0byBjb21wbGV0ZS4KKyAqLworaW50IG13aWZpZXhfaW5pdF9md19jb21wbGV0ZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCisJYWRhcHRlci0+aW5pdF93YWl0X3Ffd29rZW4gPSB0cnVlOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYWRhcHRlci0+aW5pdF93YWl0X3EpOworCXJldHVybiAwOworfQorCisvKgorICogRmlybXdhcmUgc2h1dGRvd24gY29tcGxldGUgY2FsbGJhY2sgaGFuZGxlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGhhcmR3YXJlIHN0YXR1cyB0byBub3QgcmVhZHkgYW5kIHdha2VzIHVwCisgKiB0aGUgZnVuY3Rpb24gd2FpdGluZyBvbiB0aGUgaW5pdCB3YWl0IHF1ZXVlIGZvciB0aGUgZmlybXdhcmUKKyAqIHNodXRkb3duIHRvIGNvbXBsZXRlLgorICovCitpbnQgbXdpZmlleF9zaHV0ZG93bl9md19jb21wbGV0ZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCWFkYXB0ZXItPmh3X3N0YXR1cyA9IE1XSUZJRVhfSFdfU1RBVFVTX05PVF9SRUFEWTsKKwlhZGFwdGVyLT5pbml0X3dhaXRfcV93b2tlbiA9IHRydWU7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhZGFwdGVyLT5pbml0X3dhaXRfcSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGluaXQvc2h1dGRvd24gY29tbWFuZAorICogdG8gZmlybXdhcmUuCisgKi8KK2ludCBtd2lmaWV4X2luaXRfc2h1dGRvd25fZncoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgdTMyIGZ1bmNfaW5pdF9zaHV0ZG93bikKK3sKKwl1MTYgY21kOworCisJaWYgKGZ1bmNfaW5pdF9zaHV0ZG93biA9PSBNV0lGSUVYX0ZVTkNfSU5JVCkgeworCQljbWQgPSBIb3N0Q21kX0NNRF9GVU5DX0lOSVQ7CisJfSBlbHNlIGlmIChmdW5jX2luaXRfc2h1dGRvd24gPT0gTVdJRklFWF9GVU5DX1NIVVRET1dOKSB7CisJCWNtZCA9IEhvc3RDbWRfQ01EX0ZVTkNfU0hVVERPV047CisJfSBlbHNlIHsKKwkJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsICJ1bnN1cHBvcnRlZCBwYXJhbWV0ZXJcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIG13aWZpZXhfc2VuZF9jbWRfc3luYyhwcml2LCBjbWQsIEhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsIE5VTEwpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobXdpZmlleF9pbml0X3NodXRkb3duX2Z3KTsKKworLyoKKyAqIElPQ1RMIHJlcXVlc3QgaGFuZGxlciB0byBzZXQvZ2V0IGRlYnVnIGluZm9ybWF0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29sbGF0ZXMvc2V0cyB0aGUgaW5mb3JtYXRpb24gZnJvbS90byBkaWZmZXJlbnQgZHJpdmVyCisgKiBzdHJ1Y3R1cmVzLgorICovCitpbnQgbXdpZmlleF9nZXRfZGVidWdfaW5mbyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgc3RydWN0IG13aWZpZXhfZGVidWdfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKworCWlmIChpbmZvKSB7CisJCW1lbWNweShpbmZvLT5wYWNrZXRzX291dCwKKwkJICAgICAgIHByaXYtPndtbS5wYWNrZXRzX291dCwKKwkJICAgICAgIHNpemVvZihwcml2LT53bW0ucGFja2V0c19vdXQpKTsKKwkJaW5mby0+bWF4X3R4X2J1Zl9zaXplID0gKHUzMikgYWRhcHRlci0+bWF4X3R4X2J1Zl9zaXplOworCQlpbmZvLT50eF9idWZfc2l6ZSA9ICh1MzIpIGFkYXB0ZXItPnR4X2J1Zl9zaXplOworCQlpbmZvLT5yeF90YmxfbnVtID0gbXdpZmlleF9nZXRfcnhfcmVvcmRlcl90YmwoCisJCQkJCXByaXYsIGluZm8tPnJ4X3RibCk7CisJCWluZm8tPnR4X3RibF9udW0gPSBtd2lmaWV4X2dldF90eF9iYV9zdHJlYW1fdGJsKAorCQkJCQlwcml2LCBpbmZvLT50eF90YmwpOworCQlpbmZvLT5wc19tb2RlID0gYWRhcHRlci0+cHNfbW9kZTsKKwkJaW5mby0+cHNfc3RhdGUgPSBhZGFwdGVyLT5wc19zdGF0ZTsKKwkJaW5mby0+aXNfZGVlcF9zbGVlcCA9IGFkYXB0ZXItPmlzX2RlZXBfc2xlZXA7CisJCWluZm8tPnBtX3dha2V1cF9jYXJkX3JlcSA9IGFkYXB0ZXItPnBtX3dha2V1cF9jYXJkX3JlcTsKKwkJaW5mby0+cG1fd2FrZXVwX2Z3X3RyeSA9IGFkYXB0ZXItPnBtX3dha2V1cF9md190cnk7CisJCWluZm8tPmlzX2hzX2NvbmZpZ3VyZWQgPSBhZGFwdGVyLT5pc19oc19jb25maWd1cmVkOworCQlpbmZvLT5oc19hY3RpdmF0ZWQgPSBhZGFwdGVyLT5oc19hY3RpdmF0ZWQ7CisJCWluZm8tPm51bV9jbWRfaG9zdF90b19jYXJkX2ZhaWx1cmUKKwkJCT0gYWRhcHRlci0+ZGJnLm51bV9jbWRfaG9zdF90b19jYXJkX2ZhaWx1cmU7CisJCWluZm8tPm51bV9jbWRfc2xlZXBfY2ZtX2hvc3RfdG9fY2FyZF9mYWlsdXJlCisJCQk9IGFkYXB0ZXItPmRiZy5udW1fY21kX3NsZWVwX2NmbV9ob3N0X3RvX2NhcmRfZmFpbHVyZTsKKwkJaW5mby0+bnVtX3R4X2hvc3RfdG9fY2FyZF9mYWlsdXJlCisJCQk9IGFkYXB0ZXItPmRiZy5udW1fdHhfaG9zdF90b19jYXJkX2ZhaWx1cmU7CisJCWluZm8tPm51bV9ldmVudF9kZWF1dGggPSBhZGFwdGVyLT5kYmcubnVtX2V2ZW50X2RlYXV0aDsKKwkJaW5mby0+bnVtX2V2ZW50X2Rpc2Fzc29jID0gYWRhcHRlci0+ZGJnLm51bV9ldmVudF9kaXNhc3NvYzsKKwkJaW5mby0+bnVtX2V2ZW50X2xpbmtfbG9zdCA9IGFkYXB0ZXItPmRiZy5udW1fZXZlbnRfbGlua19sb3N0OworCQlpbmZvLT5udW1fY21kX2RlYXV0aCA9IGFkYXB0ZXItPmRiZy5udW1fY21kX2RlYXV0aDsKKwkJaW5mby0+bnVtX2NtZF9hc3NvY19zdWNjZXNzID0KKwkJCWFkYXB0ZXItPmRiZy5udW1fY21kX2Fzc29jX3N1Y2Nlc3M7CisJCWluZm8tPm51bV9jbWRfYXNzb2NfZmFpbHVyZSA9CisJCQlhZGFwdGVyLT5kYmcubnVtX2NtZF9hc3NvY19mYWlsdXJlOworCQlpbmZvLT5udW1fdHhfdGltZW91dCA9IGFkYXB0ZXItPmRiZy5udW1fdHhfdGltZW91dDsKKwkJaW5mby0+bnVtX2NtZF90aW1lb3V0ID0gYWRhcHRlci0+ZGJnLm51bV9jbWRfdGltZW91dDsKKwkJaW5mby0+dGltZW91dF9jbWRfaWQgPSBhZGFwdGVyLT5kYmcudGltZW91dF9jbWRfaWQ7CisJCWluZm8tPnRpbWVvdXRfY21kX2FjdCA9IGFkYXB0ZXItPmRiZy50aW1lb3V0X2NtZF9hY3Q7CisJCW1lbWNweShpbmZvLT5sYXN0X2NtZF9pZCwgYWRhcHRlci0+ZGJnLmxhc3RfY21kX2lkLAorCQkgICAgICAgc2l6ZW9mKGFkYXB0ZXItPmRiZy5sYXN0X2NtZF9pZCkpOworCQltZW1jcHkoaW5mby0+bGFzdF9jbWRfYWN0LCBhZGFwdGVyLT5kYmcubGFzdF9jbWRfYWN0LAorCQkgICAgICAgc2l6ZW9mKGFkYXB0ZXItPmRiZy5sYXN0X2NtZF9hY3QpKTsKKwkJaW5mby0+bGFzdF9jbWRfaW5kZXggPSBhZGFwdGVyLT5kYmcubGFzdF9jbWRfaW5kZXg7CisJCW1lbWNweShpbmZvLT5sYXN0X2NtZF9yZXNwX2lkLCBhZGFwdGVyLT5kYmcubGFzdF9jbWRfcmVzcF9pZCwKKwkJICAgICAgIHNpemVvZihhZGFwdGVyLT5kYmcubGFzdF9jbWRfcmVzcF9pZCkpOworCQlpbmZvLT5sYXN0X2NtZF9yZXNwX2luZGV4ID0gYWRhcHRlci0+ZGJnLmxhc3RfY21kX3Jlc3BfaW5kZXg7CisJCW1lbWNweShpbmZvLT5sYXN0X2V2ZW50LCBhZGFwdGVyLT5kYmcubGFzdF9ldmVudCwKKwkJICAgICAgIHNpemVvZihhZGFwdGVyLT5kYmcubGFzdF9ldmVudCkpOworCQlpbmZvLT5sYXN0X2V2ZW50X2luZGV4ID0gYWRhcHRlci0+ZGJnLmxhc3RfZXZlbnRfaW5kZXg7CisJCWluZm8tPmRhdGFfc2VudCA9IGFkYXB0ZXItPmRhdGFfc2VudDsKKwkJaW5mby0+Y21kX3NlbnQgPSBhZGFwdGVyLT5jbWRfc2VudDsKKwkJaW5mby0+Y21kX3Jlc3BfcmVjZWl2ZWQgPSBhZGFwdGVyLT5jbWRfcmVzcF9yZWNlaXZlZDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcHJvY2Vzc2VzIHRoZSByZWNlaXZlZCBwYWNrZXQgYmVmb3JlIHNlbmRpbmcgaXQgdG8gdGhlCisgKiBrZXJuZWwuCisgKgorICogSXQgZXh0cmFjdHMgdGhlIFNLQiBmcm9tIHRoZSByZWNlaXZlZCBidWZmZXIgYW5kIHNlbmRzIGl0IHRvIGtlcm5lbC4KKyAqIEluIGNhc2UgdGhlIHJlY2VpdmVkIGJ1ZmZlciBkb2VzIG5vdCBjb250YWluIHRoZSBkYXRhIGluIFNLQiBmb3JtYXQsCisgKiB0aGUgZnVuY3Rpb24gY3JlYXRlcyBhIGJsYW5rIFNLQiwgZmlsbHMgaXQgd2l0aCB0aGUgZGF0YSBmcm9tIHRoZQorICogcmVjZWl2ZWQgYnVmZmVyIGFuZCB0aGVuIHNlbmRzIHRoaXMgbmV3IFNLQiB0byB0aGUga2VybmVsLgorICovCitpbnQgbXdpZmlleF9yZWN2X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBtd2lmaWV4X3J4aW5mbyAqcnhfaW5mbzsKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2OworCisJaWYgKCFza2IpCisJCXJldHVybiAtMTsKKworCXJ4X2luZm8gPSBNV0lGSUVYX1NLQl9SWENCKHNrYik7CisJcHJpdiA9IG13aWZpZXhfYnNzX2luZGV4X3RvX3ByaXYoYWRhcHRlciwgcnhfaW5mby0+YnNzX2luZGV4KTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtMTsKKworCXNrYi0+ZGV2ID0gcHJpdi0+bmV0ZGV2OworCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHByaXYtPm5ldGRldik7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCXByaXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCXByaXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlpZiAoaW5faW50ZXJydXB0KCkpCisJCW5ldGlmX3J4KHNrYik7CisJZWxzZQorCQluZXRpZl9yeF9uaShza2IpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJT0NUTCBjb21wbGV0aW9uIGNhbGxiYWNrIGhhbmRsZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIHBlbmRpbmcgSU9DVEwgaXMgY29tcGxldGVkLgorICoKKyAqIElmIHdvcmsgcXVldWUgc3VwcG9ydCBpcyBlbmFibGVkLCB0aGUgZnVuY3Rpb24gd2FrZXMgdXAgdGhlCisgKiBjb3JyZXNwb25kaW5nIHdhaXRpbmcgZnVuY3Rpb24uIE90aGVyd2lzZSwgaXQgcHJvY2Vzc2VzIHRoZQorICogSU9DVEwgcmVzcG9uc2UgYW5kIGZyZWVzIHRoZSByZXNwb25zZSBidWZmZXIuCisgKi8KK2ludCBtd2lmaWV4X2NvbXBsZXRlX2NtZChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCWF0b21pY19kZWMoJmFkYXB0ZXItPmNtZF9wZW5kaW5nKTsKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImNtZCBjb21wbGV0ZWQ6IHN0YXR1cz0lZFxuIiwKKwkJCQkJYWRhcHRlci0+Y21kX3dhaXRfcS5zdGF0dXMpOworCisJYWRhcHRlci0+Y21kX3dhaXRfcS5jb25kaXRpb24gPSB0cnVlOworCisJaWYgKGFkYXB0ZXItPmNtZF93YWl0X3Euc3RhdHVzID09IC1FVElNRURPVVQpCisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiY21kIHRpbWVvdXRcbiIpOworCWVsc2UKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhZGFwdGVyLT5jbWRfd2FpdF9xLndhaXQpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3V0aWwuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvdXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MDZhZmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3V0aWwuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogTWFydmVsbCBXaXJlbGVzcyBMQU4gZGV2aWNlIGRyaXZlcjogdXRpbGl0eSBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwKKyAqIEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MQorICogKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbgorICogYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoCisgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQSBvciBvbiB0aGUKKyAqIHdvcmxkd2lkZSB3ZWIgYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dC4KKyAqCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0CisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuCisgKi8KKworI2lmbmRlZiBfTVdJRklFWF9VVElMX0hfCisjZGVmaW5lIF9NV0lGSUVYX1VUSUxfSF8KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXdpZmlleF9yeGluZm8gKk1XSUZJRVhfU0tCX1JYQ0Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gKHN0cnVjdCBtd2lmaWV4X3J4aW5mbyAqKXNrYi0+Y2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG13aWZpZXhfdHhpbmZvICpNV0lGSUVYX1NLQl9UWENCKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIChzdHJ1Y3QgbXdpZmlleF90eGluZm8gKilza2ItPmNiOworfQorI2VuZGlmIC8qICFfTVdJRklFWF9VVElMX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3dtbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC93bW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWEwOWUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC93bW0uYwpAQCAtMCwwICsxLDEyMzEgQEAKKy8qCisgKiBNYXJ2ZWxsIFdpcmVsZXNzIExBTiBkZXZpY2UgZHJpdmVyOiBXTU0KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwKKyAqIEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MQorICogKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbgorICogYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoCisgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQSBvciBvbiB0aGUKKyAqIHdvcmxkd2lkZSB3ZWIgYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dC4KKyAqCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0CisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuCisgKi8KKworI2luY2x1ZGUgImRlY2wuaCIKKyNpbmNsdWRlICJpb2N0bC5oIgorI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJmdy5oIgorI2luY2x1ZGUgIm1haW4uaCIKKyNpbmNsdWRlICJ3bW0uaCIKKyNpbmNsdWRlICIxMW4uaCIKKworCisvKiBNYXhpbXVtIHZhbHVlIEZXIGNhbiBhY2NlcHQgZm9yIGRyaXZlciBkZWxheSBpbiBwYWNrZXQgdHJhbnNtaXNzaW9uICovCisjZGVmaW5lIERSVl9QS1RfREVMQVlfVE9fRldfTUFYICAgNTEyCisKKworI2RlZmluZSBXTU1fUVVFVUVEX1BBQ0tFVF9MT1dFUl9MSU1JVCAgIDE4MAorCisjZGVmaW5lIFdNTV9RVUVVRURfUEFDS0VUX1VQUEVSX0xJTUlUICAgMjAwCisKKy8qIE9mZnNldCBmb3IgVE9TIGZpZWxkIGluIHRoZSBJUCBoZWFkZXIgKi8KKyNkZWZpbmUgSVBUT1NfT0ZGU0VUIDUKKworLyogV01NIGluZm9ybWF0aW9uIElFICovCitzdGF0aWMgY29uc3QgdTggd21tX2luZm9faWVbXSA9IHsgV0xBTl9FSURfVkVORE9SX1NQRUNJRklDLCAweDA3LAorCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDIsCisJMHgwMCwgMHgwMSwgMHgwMAorfTsKKworc3RhdGljIGNvbnN0IHU4IHdtbV9hY2lfdG9fcWlkeF9tYXBbXSA9IHsgV01NX0FDX0JFLAorCVdNTV9BQ19CSywKKwlXTU1fQUNfVkksCisJV01NX0FDX1ZPCit9OworCitzdGF0aWMgdTggdG9zX3RvX3RpZFtdID0geworCS8qIFRJRCBEU0NQX1AyIERTQ1BfUDEgRFNDUF9QMCBXTU1fQUMgKi8KKwkweDAxLAkJCS8qIDAgMSAwIEFDX0JLICovCisJMHgwMiwJCQkvKiAwIDAgMCBBQ19CSyAqLworCTB4MDAsCQkJLyogMCAwIDEgQUNfQkUgKi8KKwkweDAzLAkJCS8qIDAgMSAxIEFDX0JFICovCisJMHgwNCwJCQkvKiAxIDAgMCBBQ19WSSAqLworCTB4MDUsCQkJLyogMSAwIDEgQUNfVkkgKi8KKwkweDA2LAkJCS8qIDEgMSAwIEFDX1ZPICovCisJMHgwNwkJCS8qIDEgMSAxIEFDX1ZPICovCit9OworCisvKgorICogVGhpcyB0YWJsZSBpbnZlcnNlcyB0aGUgdG9zX3RvX3RpZCBvcGVyYXRpb24gdG8gZ2V0IGEgcHJpb3JpdHkKKyAqIHdoaWNoIGlzIGluIHNlcXVlbnRpYWwgb3JkZXIsIGFuZCBjYW4gYmUgY29tcGFyZWQuCisgKiBVc2UgdGhpcyB0byBjb21wYXJlIHRoZSBwcmlvcml0eSBvZiB0d28gZGlmZmVyZW50IFRJRHMuCisgKi8KK3N0YXRpYyB1OCB0b3NfdG9fdGlkX2ludltdID0geworCTB4MDIsICAvKiBmcm9tIHRvc190b190aWRbMl0gPSAwICovCisJMHgwMCwgIC8qIGZyb20gdG9zX3RvX3RpZFswXSA9IDEgKi8KKwkweDAxLCAgLyogZnJvbSB0b3NfdG9fdGlkWzFdID0gMiAqLworCTB4MDMsCisJMHgwNCwKKwkweDA1LAorCTB4MDYsCisJMHgwN307CisKK3N0YXRpYyB1OCBhY190b190aWRbNF1bMl0gPSB7IHsxLCAyfSwgezAsIDN9LCB7NCwgNX0sIHs2LCA3fSB9OworCisvKgorICogVGhpcyBmdW5jdGlvbiBkZWJ1ZyBwcmludHMgdGhlIHByaW9yaXR5IHBhcmFtZXRlcnMgZm9yIGEgV01NIEFDLgorICovCitzdGF0aWMgdm9pZAorbXdpZmlleF93bW1fYWNfZGVidWdfcHJpbnQoY29uc3Qgc3RydWN0IGllZWVfdHlwZXNfd21tX2FjX3BhcmFtZXRlcnMgKmFjX3BhcmFtKQoreworCWNvbnN0IGNoYXIgKmFjX3N0cltdID0geyAiQksiLCAiQkUiLCAiVkkiLCAiVk8iIH07CisKKwlwcl9kZWJ1ZygiaW5mbzogV01NIEFDXyVzOiBBQ0k9JWQsIEFDTT0lZCwgQWlmc249JWQsICIKKwkgICAgICAgIkVjd01pbj0lZCwgRWN3TWF4PSVkLCBUeG9wTGltaXQ9JWRcbiIsCisJICAgICAgIGFjX3N0clt3bW1fYWNpX3RvX3FpZHhfbWFwWyhhY19wYXJhbS0+YWNpX2FpZnNuX2JpdG1hcAorCSAgICAgICAmIE1XSUZJRVhfQUNJKSA+PiA1XV0sCisJICAgICAgIChhY19wYXJhbS0+YWNpX2FpZnNuX2JpdG1hcCAmIE1XSUZJRVhfQUNJKSA+PiA1LAorCSAgICAgICAoYWNfcGFyYW0tPmFjaV9haWZzbl9iaXRtYXAgJiBNV0lGSUVYX0FDTSkgPj4gNCwKKwkgICAgICAgYWNfcGFyYW0tPmFjaV9haWZzbl9iaXRtYXAgJiBNV0lGSUVYX0FJRlNOLAorCSAgICAgICBhY19wYXJhbS0+ZWN3X2JpdG1hcCAmIE1XSUZJRVhfRUNXX01JTiwKKwkgICAgICAgKGFjX3BhcmFtLT5lY3dfYml0bWFwICYgTVdJRklFWF9FQ1dfTUFYKSA+PiA0LAorCSAgICAgICBsZTE2X3RvX2NwdShhY19wYXJhbS0+dHhfb3BfbGltaXQpKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIGEgcm91dGUgYWRkcmVzcyBsaXN0LgorICoKKyAqIFRoZSBmdW5jdGlvbiBhbHNvIGluaXRpYWxpemVzIHRoZSBsaXN0IHdpdGggdGhlIHByb3ZpZGVkIFJBLgorICovCitzdGF0aWMgc3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwgKgorbXdpZmlleF93bW1fYWxsb2NhdGVfcmFsaXN0X25vZGUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwgdTggKnJhKQoreworCXN0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsICpyYV9saXN0OworCisJcmFfbGlzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsKSwgR0ZQX0FUT01JQyk7CisKKwlpZiAoIXJhX2xpc3QpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICIlczogZmFpbGVkIHRvIGFsbG9jIHJhX2xpc3RcbiIsCisJCQkJCQlfX2Z1bmNfXyk7CisJCXJldHVybiBOVUxMOworCX0KKwlJTklUX0xJU1RfSEVBRCgmcmFfbGlzdC0+bGlzdCk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcmFfbGlzdC0+c2tiX2hlYWQpOworCisJbWVtY3B5KHJhX2xpc3QtPnJhLCByYSwgRVRIX0FMRU4pOworCisJcmFfbGlzdC0+dG90YWxfcGt0c19zaXplID0gMDsKKworCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogYWxsb2NhdGVkIHJhX2xpc3QgJXBcbiIsIHJhX2xpc3QpOworCisJcmV0dXJuIHJhX2xpc3Q7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBhbmQgYWRkcyBhIFJBIGxpc3QgZm9yIGFsbCBUSURzCisgKiB3aXRoIHRoZSBnaXZlbiBSQS4KKyAqLwordm9pZAorbXdpZmlleF9yYWxpc3RfYWRkKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHU4ICpyYSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgbXdpZmlleF9yYV9saXN0X3RibCAqcmFfbGlzdDsKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNX1RJRDsgKytpKSB7CisJCXJhX2xpc3QgPSBtd2lmaWV4X3dtbV9hbGxvY2F0ZV9yYWxpc3Rfbm9kZShhZGFwdGVyLCByYSk7CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiaW5mbzogY3JlYXRlZCByYV9saXN0ICVwXG4iLCByYV9saXN0KTsKKworCQlpZiAoIXJhX2xpc3QpCisJCQlicmVhazsKKworCQlpZiAoIW13aWZpZXhfcXVldWluZ19yYV9iYXNlZChwcml2KSkKKwkJCXJhX2xpc3QtPmlzXzExbl9lbmFibGVkID0gSVNfMTFOX0VOQUJMRUQocHJpdik7CisJCWVsc2UKKwkJCXJhX2xpc3QtPmlzXzExbl9lbmFibGVkID0gZmFsc2U7CisKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJkYXRhOiByYWxpc3QgJXA6IGlzXzExbl9lbmFibGVkPSVkXG4iLAorCQkJcmFfbGlzdCwgcmFfbGlzdC0+aXNfMTFuX2VuYWJsZWQpOworCisJCWxpc3RfYWRkX3RhaWwoJnJhX2xpc3QtPmxpc3QsCisJCQkJJnByaXYtPndtbS50aWRfdGJsX3B0cltpXS5yYV9saXN0KTsKKworCQlpZiAoIXByaXYtPndtbS50aWRfdGJsX3B0cltpXS5yYV9saXN0X2N1cnIpCisJCQlwcml2LT53bW0udGlkX3RibF9wdHJbaV0ucmFfbGlzdF9jdXJyID0gcmFfbGlzdDsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIFdNTSBxdWV1ZSBwcmlvcml0aWVzIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgorICovCitzdGF0aWMgdm9pZCBtd2lmaWV4X3dtbV9kZWZhdWx0X3F1ZXVlX3ByaW9yaXRpZXMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdikKK3sKKwkvKiBEZWZhdWx0IHF1ZXVlIHByaW9yaXRpZXM6IFZPLT5WSS0+QkUtPkJLICovCisJcHJpdi0+d21tLnF1ZXVlX3ByaW9yaXR5WzBdID0gV01NX0FDX1ZPOworCXByaXYtPndtbS5xdWV1ZV9wcmlvcml0eVsxXSA9IFdNTV9BQ19WSTsKKwlwcml2LT53bW0ucXVldWVfcHJpb3JpdHlbMl0gPSBXTU1fQUNfQkU7CisJcHJpdi0+d21tLnF1ZXVlX3ByaW9yaXR5WzNdID0gV01NX0FDX0JLOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBtYXAgQUNzIHRvIFRJRHMuCisgKi8KK3N0YXRpYyB2b2lkCittd2lmaWV4X3dtbV9xdWV1ZV9wcmlvcml0aWVzX3RpZCh1OCBxdWV1ZV9wcmlvcml0eVtdKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkgeworCQl0b3NfdG9fdGlkWzcgLSAoaSAqIDIpXSA9IGFjX3RvX3RpZFtxdWV1ZV9wcmlvcml0eVtpXV1bMV07CisJCXRvc190b190aWRbNiAtIChpICogMildID0gYWNfdG9fdGlkW3F1ZXVlX3ByaW9yaXR5W2ldXVswXTsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIFdNTSBwcmlvcml0eSBxdWV1ZXMuCisgKi8KK3ZvaWQKK213aWZpZXhfd21tX3NldHVwX3F1ZXVlX3ByaW9yaXRpZXMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgICBzdHJ1Y3QgaWVlZV90eXBlc193bW1fcGFyYW1ldGVyICp3bW1faWUpCit7CisJdTE2IGN3X21pbiwgYXZnX2JhY2tfb2ZmLCB0bXBbNF07CisJdTMyIGksIGosIG51bV9hYzsKKwl1OCBhY19pZHg7CisKKwlpZiAoIXdtbV9pZSB8fCAhcHJpdi0+d21tX2VuYWJsZWQpIHsKKwkJLyogV01NIGlzIG5vdCBlbmFibGVkLCBqdXN0IHNldCB0aGUgZGVmYXVsdHMgYW5kIHJldHVybiAqLworCQltd2lmaWV4X3dtbV9kZWZhdWx0X3F1ZXVlX3ByaW9yaXRpZXMocHJpdik7CisJCXJldHVybjsKKwl9CisKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IFdNTSBQYXJhbWV0ZXIgSUU6IHZlcnNpb249JWQsICIKKwkJInFvc19pbmZvIFBhcmFtZXRlciBTZXQgQ291bnQ9JWQsIFJlc2VydmVkPSUjeFxuIiwKKwkJd21tX2llLT52ZW5kX2hkci52ZXJzaW9uLCB3bW1faWUtPnFvc19pbmZvX2JpdG1hcCAmCisJCUlFRUU4MDIxMV9XTU1fSUVfQVBfUU9TSU5GT19QQVJBTV9TRVRfQ05UX01BU0ssCisJCXdtbV9pZS0+cmVzZXJ2ZWQpOworCisJZm9yIChudW1fYWMgPSAwOyBudW1fYWMgPCBBUlJBWV9TSVpFKHdtbV9pZS0+YWNfcGFyYW1zKTsgbnVtX2FjKyspIHsKKwkJY3dfbWluID0gKDEgPDwgKHdtbV9pZS0+YWNfcGFyYW1zW251bV9hY10uZWN3X2JpdG1hcCAmCisJCQlNV0lGSUVYX0VDV19NSU4pKSAtIDE7CisJCWF2Z19iYWNrX29mZiA9IChjd19taW4gPj4gMSkgKworCQkJKHdtbV9pZS0+YWNfcGFyYW1zW251bV9hY10uYWNpX2FpZnNuX2JpdG1hcCAmCisJCQlNV0lGSUVYX0FJRlNOKTsKKworCQlhY19pZHggPSB3bW1fYWNpX3RvX3FpZHhfbWFwWyh3bW1faWUtPmFjX3BhcmFtc1tudW1fYWNdLgorCQkJCQkgICAgIGFjaV9haWZzbl9iaXRtYXAgJgorCQkJCQkgICAgIE1XSUZJRVhfQUNJKSA+PiA1XTsKKwkJcHJpdi0+d21tLnF1ZXVlX3ByaW9yaXR5W2FjX2lkeF0gPSBhY19pZHg7CisJCXRtcFthY19pZHhdID0gYXZnX2JhY2tfb2ZmOworCisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogV01NOiBDV21heD0lZCBDV21pbj0lZCBBdmcgQmFjay1vZmY9JWRcbiIsCisJCSAgICAgICAoMSA8PCAoKHdtbV9pZS0+YWNfcGFyYW1zW251bV9hY10uZWN3X2JpdG1hcCAmCisJCSAgICAgICBNV0lGSUVYX0VDV19NQVgpID4+IDQpKSAtIDEsCisJCSAgICAgICBjd19taW4sIGF2Z19iYWNrX29mZik7CisJCW13aWZpZXhfd21tX2FjX2RlYnVnX3ByaW50KCZ3bW1faWUtPmFjX3BhcmFtc1tudW1fYWNdKTsKKwl9CisKKwkvKiBCdWJibGUgc29ydCAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fYWM7IGkrKykgeworCQlmb3IgKGogPSAxOyBqIDwgbnVtX2FjIC0gaTsgaisrKSB7CisJCQlpZiAodG1wW2ogLSAxXSA+IHRtcFtqXSkgeworCQkJCXN3YXAodG1wW2ogLSAxXSwgdG1wW2pdKTsKKwkJCQlzd2FwKHByaXYtPndtbS5xdWV1ZV9wcmlvcml0eVtqIC0gMV0sCisJCQkJICAgICBwcml2LT53bW0ucXVldWVfcHJpb3JpdHlbal0pOworCQkJfSBlbHNlIGlmICh0bXBbaiAtIDFdID09IHRtcFtqXSkgeworCQkJCWlmIChwcml2LT53bW0ucXVldWVfcHJpb3JpdHlbaiAtIDFdCisJCQkJICAgIDwgcHJpdi0+d21tLnF1ZXVlX3ByaW9yaXR5W2pdKQorCQkJCQlzd2FwKHByaXYtPndtbS5xdWV1ZV9wcmlvcml0eVtqIC0gMV0sCisJCQkJCSAgICAgcHJpdi0+d21tLnF1ZXVlX3ByaW9yaXR5W2pdKTsKKwkJCX0KKwkJfQorCX0KKworCW13aWZpZXhfd21tX3F1ZXVlX3ByaW9yaXRpZXNfdGlkKHByaXYtPndtbS5xdWV1ZV9wcmlvcml0eSk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGV2YWx1YXRlcyB3aGV0aGVyIG9yIG5vdCBhbiBBQyBpcyB0byBiZSBkb3duZ3JhZGVkLgorICoKKyAqIEluIGNhc2UgdGhlIEFDIGlzIG5vdCBlbmFibGVkLCB0aGUgaGlnaGVzdCBBQyBpcyByZXR1cm5lZCB0aGF0IGlzCisgKiBlbmFibGVkIGFuZCBkb2VzIG5vdCByZXF1aXJlIGFkbWlzc2lvbiBjb250cm9sLgorICovCitzdGF0aWMgZW51bSBtd2lmaWV4X3dtbV9hY19lCittd2lmaWV4X3dtbV9ldmFsX2Rvd25ncmFkZV9hYyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICAgZW51bSBtd2lmaWV4X3dtbV9hY19lIGV2YWxfYWMpCit7CisJaW50IGRvd25fYWM7CisJZW51bSBtd2lmaWV4X3dtbV9hY19lIHJldF9hYzsKKwlzdHJ1Y3QgbXdpZmlleF93bW1fYWNfc3RhdHVzICphY19zdGF0dXM7CisKKwlhY19zdGF0dXMgPSAmcHJpdi0+d21tLmFjX3N0YXR1c1tldmFsX2FjXTsKKworCWlmICghYWNfc3RhdHVzLT5kaXNhYmxlZCkKKwkJLyogT2theSB0byB1c2UgdGhpcyBBQywgaXRzIGVuYWJsZWQgKi8KKwkJcmV0dXJuIGV2YWxfYWM7CisKKwkvKiBTZXR1cCBhIGRlZmF1bHQgcmV0dXJuIHZhbHVlIG9mIHRoZSBsb3dlc3QgcHJpb3JpdHkgKi8KKwlyZXRfYWMgPSBXTU1fQUNfQks7CisKKwkvKgorCSAqICBGaW5kIHRoZSBoaWdoZXN0IEFDIHRoYXQgaXMgZW5hYmxlZCBhbmQgZG9lcyBub3QgcmVxdWlyZQorCSAqICBhZG1pc3Npb24gY29udHJvbC4gVGhlIHNwZWMgZGlzYWxsb3dzIGRvd25ncmFkaW5nIHRvIGFuIEFDLAorCSAqICB3aGljaCBpcyBlbmFibGVkIGR1ZSB0byBhIGNvbXBsZXRlZCBhZG1pc3Npb24gY29udHJvbC4KKwkgKiAgVW5hZG1pdHRlZCB0cmFmZmljIGlzIG5vdCB0byBiZSBzZW50IG9uIGFuIEFDIHdpdGggYWRtaXR0ZWQKKwkgKiAgdHJhZmZpYy4KKwkgKi8KKwlmb3IgKGRvd25fYWMgPSBXTU1fQUNfQks7IGRvd25fYWMgPCBldmFsX2FjOyBkb3duX2FjKyspIHsKKwkJYWNfc3RhdHVzID0gJnByaXYtPndtbS5hY19zdGF0dXNbZG93bl9hY107CisKKwkJaWYgKCFhY19zdGF0dXMtPmRpc2FibGVkICYmICFhY19zdGF0dXMtPmZsb3dfcmVxdWlyZWQpCisJCQkvKiBBQyBpcyBlbmFibGVkIGFuZCBkb2VzIG5vdCByZXF1aXJlIGFkbWlzc2lvbgorCQkJICAgY29udHJvbCAqLworCQkJcmV0X2FjID0gKGVudW0gbXdpZmlleF93bW1fYWNfZSkgZG93bl9hYzsKKwl9CisKKwlyZXR1cm4gcmV0X2FjOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBkb3duZ3JhZGVzIFdNTSBwcmlvcml0eSBxdWV1ZS4KKyAqLwordm9pZAorbXdpZmlleF93bW1fc2V0dXBfYWNfZG93bmdyYWRlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpCit7CisJaW50IGFjX3ZhbDsKKworCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiaW5mbzogV01NOiBBQyBQcmlvcml0aWVzOiIKKwkJCSJCSygwKSwgQkUoMSksIFZJKDIpLCBWTygzKVxuIik7CisKKwlpZiAoIXByaXYtPndtbV9lbmFibGVkKSB7CisJCS8qIFdNTSBpcyBub3QgZW5hYmxlZCwgZGVmYXVsdCBwcmlvcml0aWVzICovCisJCWZvciAoYWNfdmFsID0gV01NX0FDX0JLOyBhY192YWwgPD0gV01NX0FDX1ZPOyBhY192YWwrKykKKwkJCXByaXYtPndtbS5hY19kb3duX2dyYWRlZF92YWxzW2FjX3ZhbF0gPQorCQkJCShlbnVtIG13aWZpZXhfd21tX2FjX2UpIGFjX3ZhbDsKKwl9IGVsc2UgeworCQlmb3IgKGFjX3ZhbCA9IFdNTV9BQ19CSzsgYWNfdmFsIDw9IFdNTV9BQ19WTzsgYWNfdmFsKyspIHsKKwkJCXByaXYtPndtbS5hY19kb3duX2dyYWRlZF92YWxzW2FjX3ZhbF0KKwkJCQk9IG13aWZpZXhfd21tX2V2YWxfZG93bmdyYWRlX2FjKHByaXYsCisJCQkJCQkoZW51bSBtd2lmaWV4X3dtbV9hY19lKSBhY192YWwpOworCQkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiBXTU06IEFDIFBSSU8gJWQgbWFwcyB0byAlZFxuIiwKKwkJCQlhY192YWwsIHByaXYtPndtbS5hY19kb3duX2dyYWRlZF92YWxzW2FjX3ZhbF0pOworCQl9CisJfQorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyB0aGUgSVAgVE9TIGZpZWxkIHRvIGFuIFdNTSBBQworICogUXVldWUgYXNzaWdubWVudC4KKyAqLworc3RhdGljIGVudW0gbXdpZmlleF93bW1fYWNfZQorbXdpZmlleF93bW1fY29udmVydF90b3NfdG9fYWMoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwgdTMyIHRvcykKK3sKKwkvKiBNYXAgb2YgVE9TIFVQIHZhbHVlcyB0byBXTU0gQUMgKi8KKwljb25zdCBlbnVtIG13aWZpZXhfd21tX2FjX2UgdG9zX3RvX2FjW10gPSB7IFdNTV9BQ19CRSwKKwkJV01NX0FDX0JLLAorCQlXTU1fQUNfQkssCisJCVdNTV9BQ19CRSwKKwkJV01NX0FDX1ZJLAorCQlXTU1fQUNfVkksCisJCVdNTV9BQ19WTywKKwkJV01NX0FDX1ZPCisJfTsKKworCWlmICh0b3MgPj0gQVJSQVlfU0laRSh0b3NfdG9fYWMpKQorCQlyZXR1cm4gV01NX0FDX0JFOworCisJcmV0dXJuIHRvc190b19hY1t0b3NdOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBldmFsdWF0ZXMgYSBnaXZlbiBUSUQgYW5kIGRvd25ncmFkZXMgaXQgdG8gYSBsb3dlcgorICogVElEIGlmIHRoZSBXTU0gUGFyYW1ldGVyIElFIHJlY2VpdmVkIGZyb20gdGhlIEFQIGluZGljYXRlcyB0aGF0IHRoZQorICogQVAgaXMgZGlzYWJsZWQgKGR1ZSB0byBjYWxsIGFkbWlzc2lvbiBjb250cm9sIChBQ00gYml0KS4gTWFwcGluZworICogb2YgVElEIHRvIEFDIGlzIHRha2VuIGNhcmUgb2YgaW50ZXJuYWxseS4KKyAqLworc3RhdGljIHU4Cittd2lmaWV4X3dtbV9kb3duZ3JhZGVfdGlkKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHUzMiB0aWQpCit7CisJZW51bSBtd2lmaWV4X3dtbV9hY19lIGFjLCBhY19kb3duOworCXU4IG5ld190aWQ7CisKKwlhYyA9IG13aWZpZXhfd21tX2NvbnZlcnRfdG9zX3RvX2FjKHByaXYtPmFkYXB0ZXIsIHRpZCk7CisJYWNfZG93biA9IHByaXYtPndtbS5hY19kb3duX2dyYWRlZF92YWxzW2FjXTsKKworCS8qIFNlbmQgdGhlIGluZGV4IHRvIHRpZCBhcnJheSwgcGlja2luZyBmcm9tIHRoZSBhcnJheSB3aWxsIGJlCisJICogdGFrZW4gY2FyZSBieSBkZXF1ZXVpbmcgZnVuY3Rpb24KKwkgKi8KKwluZXdfdGlkID0gYWNfdG9fdGlkW2FjX2Rvd25dW3RpZCAlIDJdOworCisJcmV0dXJuIG5ld190aWQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBXTU0gc3RhdGUgaW5mb3JtYXRpb24gYW5kIHRoZQorICogV01NIGRhdGEgcGF0aCBxdWV1ZXMuCisgKi8KK3ZvaWQKK213aWZpZXhfd21tX2luaXQoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaSwgajsKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2OworCisJZm9yIChqID0gMDsgaiA8IGFkYXB0ZXItPnByaXZfbnVtOyArK2opIHsKKwkJcHJpdiA9IGFkYXB0ZXItPnByaXZbal07CisJCWlmICghcHJpdikKKwkJCWNvbnRpbnVlOworCisJCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNX1RJRDsgKytpKSB7CisJCQlwcml2LT5hZ2dyX3ByaW9fdGJsW2ldLmFtc2R1ID0gdG9zX3RvX3RpZF9pbnZbaV07CisJCQlwcml2LT5hZ2dyX3ByaW9fdGJsW2ldLmFtcGR1X2FwID0gdG9zX3RvX3RpZF9pbnZbaV07CisJCQlwcml2LT5hZ2dyX3ByaW9fdGJsW2ldLmFtcGR1X3VzZXIgPSB0b3NfdG9fdGlkX2ludltpXTsKKwkJCXByaXYtPndtbS50aWRfdGJsX3B0cltpXS5yYV9saXN0X2N1cnIgPSBOVUxMOworCQl9CisKKwkJcHJpdi0+YWdncl9wcmlvX3RibFs2XS5hbXNkdQorCQkJPSBwcml2LT5hZ2dyX3ByaW9fdGJsWzZdLmFtcGR1X2FwCisJCQk9IHByaXYtPmFnZ3JfcHJpb190YmxbNl0uYW1wZHVfdXNlcgorCQkJPSBCQV9TVFJFQU1fTk9UX0FMTE9XRUQ7CisKKwkJcHJpdi0+YWdncl9wcmlvX3RibFs3XS5hbXNkdSA9IHByaXYtPmFnZ3JfcHJpb190YmxbN10uYW1wZHVfYXAKKwkJCT0gcHJpdi0+YWdncl9wcmlvX3RibFs3XS5hbXBkdV91c2VyCisJCQk9IEJBX1NUUkVBTV9OT1RfQUxMT1dFRDsKKworCQlwcml2LT5hZGRfYmFfcGFyYW0udGltZW91dCA9IE1XSUZJRVhfREVGQVVMVF9CTE9DS19BQ0tfVElNRU9VVDsKKwkJcHJpdi0+YWRkX2JhX3BhcmFtLnR4X3dpbl9zaXplID0gTVdJRklFWF9BTVBEVV9ERUZfVFhXSU5TSVpFOworCQlwcml2LT5hZGRfYmFfcGFyYW0ucnhfd2luX3NpemUgPSBNV0lGSUVYX0FNUERVX0RFRl9SWFdJTlNJWkU7CisJfQorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgV01NIFR4IHF1ZXVlIGlzIGVtcHR5LgorICovCitpbnQKK213aWZpZXhfd21tX2xpc3RzX2VtcHR5KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGksIGo7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdjsKKworCWZvciAoaiA9IDA7IGogPCBhZGFwdGVyLT5wcml2X251bTsgKytqKSB7CisJCXByaXYgPSBhZGFwdGVyLT5wcml2W2pdOworCQlpZiAocHJpdikgeworCQkJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1fVElEOyBpKyspCisJCQkJaWYgKCFtd2lmaWV4X3dtbV9pc19yYV9saXN0X2VtcHR5KAorCQkJCQkgICAgICZwcml2LT53bW0udGlkX3RibF9wdHJbaV0ucmFfbGlzdCkpCisJCQkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCXJldHVybiB0cnVlOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBkZWxldGVzIGFsbCBwYWNrZXRzIGluIGFuIFJBIGxpc3Qgbm9kZS4KKyAqCisgKiBUaGUgcGFja2V0IHNlbnQgY29tcGxldGlvbiBjYWxsYmFjayBoYW5kbGVyIGFyZSBjYWxsZWQgd2l0aAorICogc3RhdHVzIGZhaWx1cmUsIGFmdGVyIHRoZXkgYXJlIGRlcXVldWVkIHRvIGVuc3VyZSBwcm9wZXIKKyAqIGNsZWFudXAuIFRoZSBSQSBsaXN0IG5vZGUgaXRzZWxmIGlzIGZyZWVkIGF0IHRoZSBlbmQuCisgKi8KK3N0YXRpYyB2b2lkCittd2lmaWV4X3dtbV9kZWxfcGt0c19pbl9yYWxpc3Rfbm9kZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCSAgICBzdHJ1Y3QgbXdpZmlleF9yYV9saXN0X3RibCAqcmFfbGlzdCkKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdG1wOworCisJc2tiX3F1ZXVlX3dhbGtfc2FmZSgmcmFfbGlzdC0+c2tiX2hlYWQsIHNrYiwgdG1wKQorCQltd2lmaWV4X3dyaXRlX2RhdGFfY29tcGxldGUoYWRhcHRlciwgc2tiLCAtMSk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGRlbGV0ZXMgYWxsIHBhY2tldHMgaW4gYW4gUkEgbGlzdC4KKyAqCisgKiBFYWNoIG5vZGVzIGluIHRoZSBSQSBsaXN0IGFyZSBmcmVlZCBpbmRpdmlkdWFsbHkgZmlyc3QsIGFuZCB0aGVuCisgKiB0aGUgUkEgbGlzdCBpdHNlbGYgaXMgZnJlZWQuCisgKi8KK3N0YXRpYyB2b2lkCittd2lmaWV4X3dtbV9kZWxfcGt0c19pbl9yYWxpc3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpyYV9saXN0X2hlYWQpCit7CisJc3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwgKnJhX2xpc3Q7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJhX2xpc3QsIHJhX2xpc3RfaGVhZCwgbGlzdCkKKwkJbXdpZmlleF93bW1fZGVsX3BrdHNfaW5fcmFsaXN0X25vZGUocHJpdiwgcmFfbGlzdCk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGRlbGV0ZXMgYWxsIHBhY2tldHMgaW4gYWxsIFJBIGxpc3RzLgorICovCitzdGF0aWMgdm9pZCBtd2lmaWV4X3dtbV9jbGVhbnVwX3F1ZXVlcyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1fVElEOyBpKyspCisJCW13aWZpZXhfd21tX2RlbF9wa3RzX2luX3JhbGlzdChwcml2LCAmcHJpdi0+d21tLnRpZF90YmxfcHRyW2ldLgorCQkJCQkJICAgICByYV9saXN0KTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZGVsZXRlcyBhbGwgcm91dGUgYWRkcmVzc2VzIGZyb20gYWxsIFJBIGxpc3RzLgorICovCitzdGF0aWMgdm9pZCBtd2lmaWV4X3dtbV9kZWxldGVfYWxsX3JhbGlzdChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KQoreworCXN0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsICpyYV9saXN0LCAqdG1wX25vZGU7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX05VTV9USUQ7ICsraSkgeworCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwKKwkJCQkiaW5mbzogcmFfbGlzdDogZnJlZWluZyBidWYgZm9yIHRpZCAlZFxuIiwgaSk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyYV9saXN0LCB0bXBfbm9kZSwKKwkJCQkmcHJpdi0+d21tLnRpZF90YmxfcHRyW2ldLnJhX2xpc3QsIGxpc3QpIHsKKwkJCWxpc3RfZGVsKCZyYV9saXN0LT5saXN0KTsKKwkJCWtmcmVlKHJhX2xpc3QpOworCQl9CisKKwkJSU5JVF9MSVNUX0hFQUQoJnByaXYtPndtbS50aWRfdGJsX3B0cltpXS5yYV9saXN0KTsKKworCQlwcml2LT53bW0udGlkX3RibF9wdHJbaV0ucmFfbGlzdF9jdXJyID0gTlVMTDsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNsZWFucyB1cCB0aGUgVHggYW5kIFJ4IHF1ZXVlcy4KKyAqCisgKiBDbGVhbnVwIGluY2x1ZGVzIC0KKyAqICAgICAgLSBBbGwgcGFja2V0cyBpbiBSQSBsaXN0cworICogICAgICAtIEFsbCBlbnRyaWVzIGluIFJ4IHJlb3JkZXIgdGFibGUKKyAqICAgICAgLSBBbGwgZW50cmllcyBpbiBUeCBCQSBzdHJlYW0gdGFibGUKKyAqICAgICAgLSBNUEEgYnVmZmVyIChpZiByZXF1aXJlZCkKKyAqICAgICAgLSBBbGwgUkEgbGlzdHMKKyAqLwordm9pZAorbXdpZmlleF9jbGVhbl90eHJ4KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW13aWZpZXhfMTFuX2NsZWFudXBfcmVvcmRlcl90YmwocHJpdik7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPndtbS5yYV9saXN0X3NwaW5sb2NrLCBmbGFncyk7CisKKwltd2lmaWV4X3dtbV9jbGVhbnVwX3F1ZXVlcyhwcml2KTsKKwltd2lmaWV4XzExbl9kZWxldGVfYWxsX3R4X2JhX3N0cmVhbV90YmwocHJpdik7CisKKwlpZiAocHJpdi0+YWRhcHRlci0+aWZfb3BzLmNsZWFudXBfbXBhX2J1ZikKKwkJcHJpdi0+YWRhcHRlci0+aWZfb3BzLmNsZWFudXBfbXBhX2J1Zihwcml2LT5hZGFwdGVyKTsKKworCW13aWZpZXhfd21tX2RlbGV0ZV9hbGxfcmFsaXN0KHByaXYpOworCW1lbWNweSh0b3NfdG9fdGlkLCBhY190b190aWQsIHNpemVvZih0b3NfdG9fdGlkKSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT53bW0ucmFfbGlzdF9zcGlubG9jaywgZmxhZ3MpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgYSBwYXJ0aWN1bGFyIFJBIGxpc3Qgbm9kZSwgbWF0Y2hpbmcgd2l0aCB0aGUKKyAqIGdpdmVuIFRJRCBhbmQgUkEgYWRkcmVzcy4KKyAqLworc3RhdGljIHN0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsICoKK213aWZpZXhfd21tX2dldF9yYWxpc3Rfbm9kZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCB0aWQsCisJCQkgICAgdTggKnJhX2FkZHIpCit7CisJc3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwgKnJhX2xpc3Q7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJhX2xpc3QsICZwcml2LT53bW0udGlkX3RibF9wdHJbdGlkXS5yYV9saXN0LAorCQkJICAgIGxpc3QpIHsKKwkJaWYgKCFtZW1jbXAocmFfbGlzdC0+cmEsIHJhX2FkZHIsIEVUSF9BTEVOKSkKKwkJCXJldHVybiByYV9saXN0OworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgYW4gUkEgbGlzdCBub2RlIGZvciBhIGdpdmVuIFRJRCBhbmQKKyAqIFJBIGFkZHJlc3MgcGFpci4KKyAqCisgKiBJZiBubyBzdWNoIG5vZGUgaXMgZm91bmQsIGEgbmV3IG5vZGUgaXMgYWRkZWQgZmlyc3QgYW5kIHRoZW4KKyAqIHJldHJpZXZlZC4KKyAqLworc3RhdGljIHN0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsICoKK213aWZpZXhfd21tX2dldF9xdWV1ZV9yYXB0cihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCB0aWQsIHU4ICpyYV9hZGRyKQoreworCXN0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsICpyYV9saXN0OworCisJcmFfbGlzdCA9IG13aWZpZXhfd21tX2dldF9yYWxpc3Rfbm9kZShwcml2LCB0aWQsIHJhX2FkZHIpOworCWlmIChyYV9saXN0KQorCQlyZXR1cm4gcmFfbGlzdDsKKwltd2lmaWV4X3JhbGlzdF9hZGQocHJpdiwgcmFfYWRkcik7CisKKwlyZXR1cm4gbXdpZmlleF93bW1fZ2V0X3JhbGlzdF9ub2RlKHByaXYsIHRpZCwgcmFfYWRkcik7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBhIHBhcnRpY3VsYXIgUkEgbGlzdCBub2RlIGV4aXN0cyBpbiBhIGdpdmVuIFRJRAorICogdGFibGUgaW5kZXguCisgKi8KK2ludAorbXdpZmlleF9pc19yYWxpc3RfdmFsaWQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCXN0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsICpyYV9saXN0LCBpbnQgcHRyX2luZGV4KQoreworCXN0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsICpybGlzdDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocmxpc3QsICZwcml2LT53bW0udGlkX3RibF9wdHJbcHRyX2luZGV4XS5yYV9saXN0LAorCQkJICAgIGxpc3QpIHsKKwkJaWYgKHJsaXN0ID09IHJhX2xpc3QpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGFkZHMgYSBwYWNrZXQgdG8gV01NIHF1ZXVlLgorICoKKyAqIEluIGRpc2Nvbm5lY3RlZCBzdGF0ZSB0aGUgcGFja2V0IGlzIGltbWVkaWF0ZWx5IGRyb3BwZWQgYW5kIHRoZQorICogcGFja2V0IHNlbmQgY29tcGxldGlvbiBjYWxsYmFjayBpcyBjYWxsZWQgd2l0aCBzdGF0dXMgZmFpbHVyZS4KKyAqCisgKiBPdGhlcndpc2UsIHRoZSBjb3JyZWN0IFJBIGxpc3Qgbm9kZSBpcyBsb2NhdGVkIGFuZCB0aGUgcGFja2V0CisgKiBpcyBxdWV1ZWQgYXQgdGhlIGxpc3QgdGFpbC4KKyAqLwordm9pZAorbXdpZmlleF93bW1fYWRkX2J1Zl90eHF1ZXVlKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgbXdpZmlleF90eGluZm8gKnR4X2luZm8gPSBNV0lGSUVYX1NLQl9UWENCKHNrYik7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9IGFkYXB0ZXItPnByaXZbdHhfaW5mby0+YnNzX2luZGV4XTsKKwl1MzIgdGlkOworCXN0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsICpyYV9saXN0OworCXU4IHJhW0VUSF9BTEVOXSwgdGlkX2Rvd247CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghcHJpdi0+bWVkaWFfY29ubmVjdGVkKSB7CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZGF0YTogZHJvcCBwYWNrZXQgaW4gZGlzY29ubmVjdFxuIik7CisJCW13aWZpZXhfd3JpdGVfZGF0YV9jb21wbGV0ZShhZGFwdGVyLCBza2IsIC0xKTsKKwkJcmV0dXJuOworCX0KKworCXRpZCA9IHNrYi0+cHJpb3JpdHk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+d21tLnJhX2xpc3Rfc3BpbmxvY2ssIGZsYWdzKTsKKworCXRpZF9kb3duID0gbXdpZmlleF93bW1fZG93bmdyYWRlX3RpZChwcml2LCB0aWQpOworCisJLyogSW4gY2FzZSBvZiBpbmZyYSBhcyB3ZSBoYXZlIGFscmVhZHkgY3JlYXRlZCB0aGUgbGlzdCBkdXJpbmcKKwkgICBhc3NvY2lhdGlvbiB3ZSBqdXN0IGRvbid0IGhhdmUgdG8gY2FsbCBnZXRfcXVldWVfcmFwdHIsIHdlIHdpbGwKKwkgICBoYXZlIG9ubHkgMSByYXB0ciBmb3IgYSB0aWQgaW4gY2FzZSBvZiBpbmZyYSAqLworCWlmICghbXdpZmlleF9xdWV1aW5nX3JhX2Jhc2VkKHByaXYpKSB7CisJCWlmICghbGlzdF9lbXB0eSgmcHJpdi0+d21tLnRpZF90YmxfcHRyW3RpZF9kb3duXS5yYV9saXN0KSkKKwkJCXJhX2xpc3QgPSBsaXN0X2ZpcnN0X2VudHJ5KAorCQkJCSZwcml2LT53bW0udGlkX3RibF9wdHJbdGlkX2Rvd25dLnJhX2xpc3QsCisJCQkJc3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwsIGxpc3QpOworCQllbHNlCisJCQlyYV9saXN0ID0gTlVMTDsKKwl9IGVsc2UgeworCQltZW1jcHkocmEsIHNrYi0+ZGF0YSwgRVRIX0FMRU4pOworCQlyYV9saXN0ID0gbXdpZmlleF93bW1fZ2V0X3F1ZXVlX3JhcHRyKHByaXYsIHRpZF9kb3duLCByYSk7CisJfQorCisJaWYgKCFyYV9saXN0KSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPndtbS5yYV9saXN0X3NwaW5sb2NrLCBmbGFncyk7CisJCW13aWZpZXhfd3JpdGVfZGF0YV9jb21wbGV0ZShhZGFwdGVyLCBza2IsIC0xKTsKKwkJcmV0dXJuOworCX0KKworCXNrYl9xdWV1ZV90YWlsKCZyYV9saXN0LT5za2JfaGVhZCwgc2tiKTsKKworCXJhX2xpc3QtPnRvdGFsX3BrdHNfc2l6ZSArPSBza2ItPmxlbjsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPndtbS5yYV9saXN0X3NwaW5sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgZ2V0IFdNTSBzdGF0dXMgY29tbWFuZCByZXNwb25zZSBmcm9tIGZpcm13YXJlLgorICoKKyAqIFRoZSByZXNwb25zZSBtYXkgY29udGFpbiBtdWx0aXBsZSBUTFZzIC0KKyAqICAgICAgLSBBQyBRdWV1ZSBzdGF0dXMgVExWcworICogICAgICAtIEN1cnJlbnQgV01NIFBhcmFtZXRlciBJRSBUTFYKKyAqICAgICAgLSBBZG1pc3Npb24gQ29udHJvbCBhY3Rpb24gZnJhbWUgVExWcworICoKKyAqIFRoaXMgZnVuY3Rpb24gcGFyc2VzIHRoZSBUTFZzIGFuZCB0aGVuIGNhbGxzIGZ1cnRoZXIgc3BlY2lmaWMgZnVuY3Rpb25zCisgKiB0byBwcm9jZXNzIGFueSBjaGFuZ2VzIGluIHRoZSBxdWV1ZSBwcmlvcml0aXplIG9yIHN0YXRlLgorICovCitpbnQgbXdpZmlleF9yZXRfd21tX2dldF9zdGF0dXMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaG9zdF9jbWRfZHNfY29tbWFuZCAqcmVzcCkKK3sKKwl1OCAqY3VyciA9ICh1OCAqKSAmcmVzcC0+cGFyYW1zLmdldF93bW1fc3RhdHVzOworCXVpbnQxNl90IHJlc3BfbGVuID0gbGUxNl90b19jcHUocmVzcC0+c2l6ZSksIHRsdl9sZW47CisJaW50IHZhbGlkID0gdHJ1ZTsKKworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2RhdGEgKnRsdl9oZHI7CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfd21tX3F1ZXVlX3N0YXR1cyAqdGx2X3dtbV9xc3RhdHVzOworCXN0cnVjdCBpZWVlX3R5cGVzX3dtbV9wYXJhbWV0ZXIgKndtbV9wYXJhbV9pZSA9IE5VTEw7CisJc3RydWN0IG13aWZpZXhfd21tX2FjX3N0YXR1cyAqYWNfc3RhdHVzOworCisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiBXTU06IFdNTV9HRVRfU1RBVFVTIGNtZHJlc3AgcmVjZWl2ZWQ6ICVkXG4iLAorCQkJcmVzcF9sZW4pOworCisJd2hpbGUgKChyZXNwX2xlbiA+PSBzaXplb2YodGx2X2hkci0+aGVhZGVyKSkgJiYgdmFsaWQpIHsKKwkJdGx2X2hkciA9IChzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19kYXRhICopIGN1cnI7CisJCXRsdl9sZW4gPSBsZTE2X3RvX2NwdSh0bHZfaGRyLT5oZWFkZXIubGVuKTsKKworCQlzd2l0Y2ggKGxlMTZfdG9fY3B1KHRsdl9oZHItPmhlYWRlci50eXBlKSkgeworCQljYXNlIFRMVl9UWVBFX1dNTVFTVEFUVVM6CisJCQl0bHZfd21tX3FzdGF0dXMgPQorCQkJCShzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc193bW1fcXVldWVfc3RhdHVzICopCisJCQkJdGx2X2hkcjsKKwkJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJCSJpbmZvOiBDTURfUkVTUDogV01NX0dFVF9TVEFUVVM6IgorCQkJCSIgUVNUQVRVUyBUTFY6ICVkLCAlZCwgJWRcbiIsCisJCQkgICAgICAgdGx2X3dtbV9xc3RhdHVzLT5xdWV1ZV9pbmRleCwKKwkJCSAgICAgICB0bHZfd21tX3FzdGF0dXMtPmZsb3dfcmVxdWlyZWQsCisJCQkgICAgICAgdGx2X3dtbV9xc3RhdHVzLT5kaXNhYmxlZCk7CisKKwkJCWFjX3N0YXR1cyA9ICZwcml2LT53bW0uYWNfc3RhdHVzW3Rsdl93bW1fcXN0YXR1cy0+CisJCQkJCQkJIHF1ZXVlX2luZGV4XTsKKwkJCWFjX3N0YXR1cy0+ZGlzYWJsZWQgPSB0bHZfd21tX3FzdGF0dXMtPmRpc2FibGVkOworCQkJYWNfc3RhdHVzLT5mbG93X3JlcXVpcmVkID0KKwkJCQl0bHZfd21tX3FzdGF0dXMtPmZsb3dfcmVxdWlyZWQ7CisJCQlhY19zdGF0dXMtPmZsb3dfY3JlYXRlZCA9IHRsdl93bW1fcXN0YXR1cy0+Zmxvd19jcmVhdGVkOworCQkJYnJlYWs7CisKKwkJY2FzZSBXTEFOX0VJRF9WRU5ET1JfU1BFQ0lGSUM6CisJCQkvKgorCQkJICogUG9pbnQgdGhlIHJlZ3VsYXIgSUVFRSBJRSAyIGJ5dGVzIGludG8gdGhlIE1hcnZlbGwgSUUKKwkJCSAqICAgYW5kIHNldHVwIHRoZSBJRUVFIElFIHR5cGUgYW5kIGxlbmd0aCBieXRlIGZpZWxkcworCQkJICovCisKKwkJCXdtbV9wYXJhbV9pZSA9CisJCQkJKHN0cnVjdCBpZWVlX3R5cGVzX3dtbV9wYXJhbWV0ZXIgKikgKGN1cnIgKworCQkJCQkJCQkgICAgMik7CisJCQl3bW1fcGFyYW1faWUtPnZlbmRfaGRyLmxlbiA9ICh1OCkgdGx2X2xlbjsKKwkJCXdtbV9wYXJhbV9pZS0+dmVuZF9oZHIuZWxlbWVudF9pZCA9CisJCQkJCQlXTEFOX0VJRF9WRU5ET1JfU1BFQ0lGSUM7CisKKwkJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJCSJpbmZvOiBDTURfUkVTUDogV01NX0dFVF9TVEFUVVM6IgorCQkJCSIgV01NIFBhcmFtZXRlciBTZXQgQ291bnQ6ICVkXG4iLAorCQkJCXdtbV9wYXJhbV9pZS0+cW9zX2luZm9fYml0bWFwICYKKwkJCQlJRUVFODAyMTFfV01NX0lFX0FQX1FPU0lORk9fUEFSQU1fU0VUX0NOVF9NQVNLKTsKKworCQkJbWVtY3B5KCh1OCAqKSAmcHJpdi0+Y3Vycl9ic3NfcGFyYW1zLmJzc19kZXNjcmlwdG9yLgorCQkJICAgICAgIHdtbV9pZSwgd21tX3BhcmFtX2llLAorCQkJICAgICAgIHdtbV9wYXJhbV9pZS0+dmVuZF9oZHIubGVuICsgMik7CisKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQl2YWxpZCA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKworCQljdXJyICs9ICh0bHZfbGVuICsgc2l6ZW9mKHRsdl9oZHItPmhlYWRlcikpOworCQlyZXNwX2xlbiAtPSAodGx2X2xlbiArIHNpemVvZih0bHZfaGRyLT5oZWFkZXIpKTsKKwl9CisKKwltd2lmaWV4X3dtbV9zZXR1cF9xdWV1ZV9wcmlvcml0aWVzKHByaXYsIHdtbV9wYXJhbV9pZSk7CisJbXdpZmlleF93bW1fc2V0dXBfYWNfZG93bmdyYWRlKHByaXYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDYWxsYmFjayBoYW5kbGVyIGZyb20gdGhlIGNvbW1hbmQgbW9kdWxlIHRvIGFsbG93IGluc2VydGlvbiBvZiBhIFdNTSBUTFYuCisgKgorICogSWYgdGhlIEJTUyB3ZSBhcmUgYXNzb2NpYXRpbmcgdG8gc3VwcG9ydHMgV01NLCB0aGlzIGZ1bmN0aW9uIGFkZHMgdGhlCisgKiByZXF1aXJlZCBXTU0gSW5mb3JtYXRpb24gSUUgdG8gdGhlIGFzc29jaWF0aW9uIHJlcXVlc3QgY29tbWFuZCBidWZmZXIgaW4KKyAqIHRoZSBmb3JtIG9mIGEgTWFydmVsbCBleHRlbmRlZCBJRUVFIElFLgorICovCit1MzIKK213aWZpZXhfd21tX3Byb2Nlc3NfYXNzb2NpYXRpb25fcmVxKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJICAgIHU4ICoqYXNzb2NfYnVmLAorCQkJCSAgICBzdHJ1Y3QgaWVlZV90eXBlc193bW1fcGFyYW1ldGVyICp3bW1faWUsCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwICpodF9jYXApCit7CisJc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfd21tX3BhcmFtX3NldCAqd21tX3RsdjsKKwl1MzIgcmV0X2xlbiA9IDA7CisKKwkvKiBOdWxsIGNoZWNrcyAqLworCWlmICghYXNzb2NfYnVmKQorCQlyZXR1cm4gMDsKKwlpZiAoISgqYXNzb2NfYnVmKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXdtbV9pZSkKKwkJcmV0dXJuIDA7CisKKwlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwgImluZm86IFdNTTogcHJvY2VzcyBhc3NvYyByZXE6IgorCQkJImJzcy0+d21tSWU9MHgleFxuIiwKKwkJCXdtbV9pZS0+dmVuZF9oZHIuZWxlbWVudF9pZCk7CisKKwlpZiAoKHByaXYtPndtbV9yZXF1aXJlZAorCSAgICAgfHwgKGh0X2NhcCAmJiAocHJpdi0+YWRhcHRlci0+Y29uZmlnX2JhbmRzICYgQkFORF9HTgorCQkgICAgIHx8IHByaXYtPmFkYXB0ZXItPmNvbmZpZ19iYW5kcyAmIEJBTkRfQU4pKQorCSAgICApCisJICAgICYmIHdtbV9pZS0+dmVuZF9oZHIuZWxlbWVudF9pZCA9PSBXTEFOX0VJRF9WRU5ET1JfU1BFQ0lGSUMpIHsKKwkJd21tX3RsdiA9IChzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc193bW1fcGFyYW1fc2V0ICopICphc3NvY19idWY7CisJCXdtbV90bHYtPmhlYWRlci50eXBlID0gY3B1X3RvX2xlMTYoKHUxNikgd21tX2luZm9faWVbMF0pOworCQl3bW1fdGx2LT5oZWFkZXIubGVuID0gY3B1X3RvX2xlMTYoKHUxNikgd21tX2luZm9faWVbMV0pOworCQltZW1jcHkod21tX3Rsdi0+d21tX2llLCAmd21tX2luZm9faWVbMl0sCisJCQlsZTE2X3RvX2NwdSh3bW1fdGx2LT5oZWFkZXIubGVuKSk7CisJCWlmICh3bW1faWUtPnFvc19pbmZvX2JpdG1hcCAmIElFRUU4MDIxMV9XTU1fSUVfQVBfUU9TSU5GT19VQVBTRCkKKwkJCW1lbWNweSgodTggKikgKHdtbV90bHYtPndtbV9pZQorCQkJCQkrIGxlMTZfdG9fY3B1KHdtbV90bHYtPmhlYWRlci5sZW4pCisJCQkJCSAtIHNpemVvZihwcml2LT53bW1fcW9zaW5mbykpLAorCQkJCQkmcHJpdi0+d21tX3Fvc2luZm8sCisJCQkJCXNpemVvZihwcml2LT53bW1fcW9zaW5mbykpOworCisJCXJldF9sZW4gPSBzaXplb2Yod21tX3Rsdi0+aGVhZGVyKQorCQkJKyBsZTE2X3RvX2NwdSh3bW1fdGx2LT5oZWFkZXIubGVuKTsKKworCQkqYXNzb2NfYnVmICs9IHJldF9sZW47CisJfQorCisJcmV0dXJuIHJldF9sZW47Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNvbXB1dGVzIHRoZSB0aW1lIGRlbGF5IGluIHRoZSBkcml2ZXIgcXVldWVzIGZvciBhCisgKiBnaXZlbiBwYWNrZXQuCisgKgorICogV2hlbiB0aGUgcGFja2V0IGlzIHJlY2VpdmVkIGF0IHRoZSBPUy9Ecml2ZXIgaW50ZXJmYWNlLCB0aGUgY3VycmVudAorICogdGltZSBpcyBzZXQgaW4gdGhlIHBhY2tldCBzdHJ1Y3R1cmUuIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHByZXNlbnQKKyAqIHRpbWUgYW5kIHRoYXQgcmVjZWl2ZWQgdGltZSBpcyBjb21wdXRlZCBpbiB0aGlzIGZ1bmN0aW9uIGFuZCBsaW1pdGVkCisgKiBiYXNlZCBvbiBwcmUtY29tcGlsZWQgbGltaXRzIGluIHRoZSBkcml2ZXIuCisgKi8KK3U4Cittd2lmaWV4X3dtbV9jb21wdXRlX2Rydl9wa3RfZGVsYXkoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkJY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwl1OCByZXRfdmFsOworCXN0cnVjdCB0aW1ldmFsIG91dF90c3RhbXAsIGluX3RzdGFtcDsKKwl1MzIgcXVldWVfZGVsYXk7CisKKwlkb19nZXR0aW1lb2ZkYXkoJm91dF90c3RhbXApOworCWluX3RzdGFtcCA9IGt0aW1lX3RvX3RpbWV2YWwoc2tiLT50c3RhbXApOworCisJcXVldWVfZGVsYXkgPSAob3V0X3RzdGFtcC50dl9zZWMgLSBpbl90c3RhbXAudHZfc2VjKSAqIDEwMDA7CisJcXVldWVfZGVsYXkgKz0gKG91dF90c3RhbXAudHZfdXNlYyAtIGluX3RzdGFtcC50dl91c2VjKSAvIDEwMDA7CisKKwkvKgorCSAqIFF1ZXVlIGRlbGF5IGlzIHBhc3NlZCBhcyBhIHVpbnQ4IGluIHVuaXRzIG9mIDJtcyAobXMgc2hpZnRlZAorCSAqICBieSAxKS4gTWluIHZhbHVlIChvdGhlciB0aGFuIDApIGlzIHRoZXJlZm9yZSAybXMsIG1heCBpcyA1MTBtcy4KKwkgKgorCSAqIFBhc3MgbWF4IHZhbHVlIGlmIHF1ZXVlX2RlbGF5IGlzIGJleW9uZCB0aGUgdWludDggcmFuZ2UKKwkgKi8KKwlyZXRfdmFsID0gKHU4KSAobWluKHF1ZXVlX2RlbGF5LCBwcml2LT53bW0uZHJ2X3BrdF9kZWxheV9tYXgpID4+IDEpOworCisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJkYXRhOiBXTU06IFBrdCBEZWxheTogJWQgbXMsIgorCQkJCSIgJWQgbXMgc2VudCB0byBGV1xuIiwgcXVldWVfZGVsYXksIHJldF92YWwpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgaGlnaGVzdCBwcmlvcml0eSBSQSBsaXN0IHRhYmxlIHBvaW50ZXIuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbXdpZmlleF9yYV9saXN0X3RibCAqCittd2lmaWV4X3dtbV9nZXRfaGlnaGVzdF9wcmlvbGlzdF9wdHIoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgICAgIHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKipwcml2LCBpbnQgKnRpZCkKK3sKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2X3RtcDsKKwlzdHJ1Y3QgbXdpZmlleF9yYV9saXN0X3RibCAqcHRyLCAqaGVhZDsKKwlzdHJ1Y3QgbXdpZmlleF9ic3NfcHJpb19ub2RlICpic3NwcmlvX25vZGUsICpic3NwcmlvX2hlYWQ7CisJc3RydWN0IG13aWZpZXhfdGlkX3RibCAqdGlkX3B0cjsKKwlpbnQgaXNfbGlzdF9lbXB0eTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpLCBqOworCisJZm9yIChqID0gYWRhcHRlci0+cHJpdl9udW0gLSAxOyBqID49IDA7IC0taikgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+YnNzX3ByaW9fdGJsW2pdLmJzc19wcmlvX2xvY2ssCisJCQkJZmxhZ3MpOworCQlpc19saXN0X2VtcHR5ID0gbGlzdF9lbXB0eSgmYWRhcHRlci0+YnNzX3ByaW9fdGJsW2pdCisJCQkJLmJzc19wcmlvX2hlYWQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5ic3NfcHJpb190Ymxbal0uYnNzX3ByaW9fbG9jaywKKwkJCQlmbGFncyk7CisJCWlmIChpc19saXN0X2VtcHR5KQorCQkJY29udGludWU7CisKKwkJaWYgKGFkYXB0ZXItPmJzc19wcmlvX3RibFtqXS5ic3NfcHJpb19jdXIgPT0KKwkJICAgIChzdHJ1Y3QgbXdpZmlleF9ic3NfcHJpb19ub2RlICopCisJCSAgICAmYWRhcHRlci0+YnNzX3ByaW9fdGJsW2pdLmJzc19wcmlvX2hlYWQpIHsKKwkJCWJzc3ByaW9fbm9kZSA9CisJCQkJbGlzdF9maXJzdF9lbnRyeSgmYWRhcHRlci0+YnNzX3ByaW9fdGJsW2pdCisJCQkJCQkgLmJzc19wcmlvX2hlYWQsCisJCQkJCQkgc3RydWN0IG13aWZpZXhfYnNzX3ByaW9fbm9kZSwKKwkJCQkJCSBsaXN0KTsKKwkJCWJzc3ByaW9faGVhZCA9IGJzc3ByaW9fbm9kZTsKKwkJfSBlbHNlIHsKKwkJCWJzc3ByaW9fbm9kZSA9IGFkYXB0ZXItPmJzc19wcmlvX3RibFtqXS5ic3NfcHJpb19jdXI7CisJCQlic3NwcmlvX2hlYWQgPSBic3NwcmlvX25vZGU7CisJCX0KKworCQlkbyB7CisJCQlwcml2X3RtcCA9IGJzc3ByaW9fbm9kZS0+cHJpdjsKKworCQkJZm9yIChpID0gSElHSF9QUklPX1RJRDsgaSA+PSBMT1dfUFJJT19USUQ7IC0taSkgeworCisJCQkJdGlkX3B0ciA9ICYocHJpdl90bXApLT53bW0uCisJCQkJCXRpZF90YmxfcHRyW3Rvc190b190aWRbaV1dOworCisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnRpZF9wdHItPnRpZF90YmxfbG9jaywKKwkJCQkJCSAgZmxhZ3MpOworCQkJCWlzX2xpc3RfZW1wdHkgPQorCQkJCQlsaXN0X2VtcHR5KCZhZGFwdGVyLT5ic3NfcHJpb190Ymxbal0KKwkJCQkJCSAgIC5ic3NfcHJpb19oZWFkKTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aWRfcHRyLT50aWRfdGJsX2xvY2ssCisJCQkJCQkgICAgICAgZmxhZ3MpOworCQkJCWlmIChpc19saXN0X2VtcHR5KQorCQkJCQljb250aW51ZTsKKworCQkJCS8qCisJCQkJICogQWx3YXlzIGNob29zZSB0aGUgbmV4dCByYSB3ZSB0cmFuc21pdHRlZAorCQkJCSAqIGxhc3QgdGltZSwgdGhpcyB3YXkgd2UgcGljayB0aGUgcmEncyBpbgorCQkJCSAqIHJvdW5kIHJvYmluIGZhc2hpb24uCisJCQkJICovCisJCQkJcHRyID0gbGlzdF9maXJzdF9lbnRyeSgKKwkJCQkJCSZ0aWRfcHRyLT5yYV9saXN0X2N1cnItPmxpc3QsCisJCQkJCQlzdHJ1Y3QgbXdpZmlleF9yYV9saXN0X3RibCwKKwkJCQkJCWxpc3QpOworCisJCQkJaGVhZCA9IHB0cjsKKwkJCQlpZiAocHRyID09IChzdHJ1Y3QgbXdpZmlleF9yYV9saXN0X3RibCAqKQorCQkJCQkJJnRpZF9wdHItPnJhX2xpc3QpIHsKKwkJCQkJLyogR2V0IG5leHQgcmEgKi8KKwkJCQkJcHRyID0gbGlzdF9maXJzdF9lbnRyeSgmcHRyLT5saXN0LAorCQkJCQkgICAgc3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwsIGxpc3QpOworCQkJCQloZWFkID0gcHRyOworCQkJCX0KKworCQkJCWRvIHsKKwkJCQkJaXNfbGlzdF9lbXB0eSA9CisJCQkJCQlza2JfcXVldWVfZW1wdHkoJnB0ci0+c2tiX2hlYWQpOworCQkJCQlpZiAoIWlzX2xpc3RfZW1wdHkpIHsKKwkJCQkJCSpwcml2ID0gcHJpdl90bXA7CisJCQkJCQkqdGlkID0gdG9zX3RvX3RpZFtpXTsKKwkJCQkJCXJldHVybiBwdHI7CisJCQkJCX0KKwkJCQkJLyogR2V0IG5leHQgcmEgKi8KKwkJCQkJcHRyID0gbGlzdF9maXJzdF9lbnRyeSgmcHRyLT5saXN0LAorCQkJCQkJIHN0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsLAorCQkJCQkJIGxpc3QpOworCQkJCQlpZiAocHRyID09CisJCQkJCSAgICAoc3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwgKikKKwkJCQkJICAgICZ0aWRfcHRyLT5yYV9saXN0KQorCQkJCQkJcHRyID0gbGlzdF9maXJzdF9lbnRyeSgKKwkJCQkJCSAgICAmcHRyLT5saXN0LAorCQkJCQkJICAgIHN0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsLAorCQkJCQkJICAgIGxpc3QpOworCQkJCX0gd2hpbGUgKHB0ciAhPSBoZWFkKTsKKwkJCX0KKworCQkJLyogR2V0IG5leHQgYnNzIHByaW9yaXR5IG5vZGUgKi8KKwkJCWJzc3ByaW9fbm9kZSA9IGxpc3RfZmlyc3RfZW50cnkoJmJzc3ByaW9fbm9kZS0+bGlzdCwKKwkJCQkJCXN0cnVjdCBtd2lmaWV4X2Jzc19wcmlvX25vZGUsCisJCQkJCQlsaXN0KTsKKworCQkJaWYgKGJzc3ByaW9fbm9kZSA9PQorCQkJICAgIChzdHJ1Y3QgbXdpZmlleF9ic3NfcHJpb19ub2RlICopCisJCQkgICAgJmFkYXB0ZXItPmJzc19wcmlvX3RibFtqXS5ic3NfcHJpb19oZWFkKQorCQkJCS8qIEdldCBuZXh0IGJzcyBwcmlvcml0eSBub2RlICovCisJCQkJYnNzcHJpb19ub2RlID0gbGlzdF9maXJzdF9lbnRyeSgKKwkJCQkJCSZic3NwcmlvX25vZGUtPmxpc3QsCisJCQkJCQlzdHJ1Y3QgbXdpZmlleF9ic3NfcHJpb19ub2RlLAorCQkJCQkJbGlzdCk7CisJCX0gd2hpbGUgKGJzc3ByaW9fbm9kZSAhPSBic3NwcmlvX2hlYWQpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgbnVtYmVyIG9mIHBhY2tldHMgaW4gdGhlIFR4IHF1ZXVlIG9mIGEKKyAqIHBhcnRpY3VsYXIgUkEgbGlzdC4KKyAqLworc3RhdGljIGludAorbXdpZmlleF9udW1fcGt0c19pbl90eHEoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCXN0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsICpwdHIsIGludCBtYXhfYnVmX3NpemUpCit7CisJaW50IGNvdW50ID0gMCwgdG90YWxfc2l6ZSA9IDA7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKnRtcDsKKworCXNrYl9xdWV1ZV93YWxrX3NhZmUoJnB0ci0+c2tiX2hlYWQsIHNrYiwgdG1wKSB7CisJCXRvdGFsX3NpemUgKz0gc2tiLT5sZW47CisJCWlmICh0b3RhbF9zaXplIDwgbWF4X2J1Zl9zaXplKQorCQkJKytjb3VudDsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBzZW5kcyBhIHNpbmdsZSBwYWNrZXQgdG8gZmlybXdhcmUgZm9yIHRyYW5zbWlzc2lvbi4KKyAqLworc3RhdGljIHZvaWQKK213aWZpZXhfc2VuZF9zaW5nbGVfcGFja2V0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICBzdHJ1Y3QgbXdpZmlleF9yYV9saXN0X3RibCAqcHRyLCBpbnQgcHRyX2luZGV4LAorCQkJICAgdW5zaWduZWQgbG9uZyByYV9saXN0X2ZsYWdzKQorCQkJICAgX19yZWxlYXNlcygmcHJpdi0+d21tLnJhX2xpc3Rfc3BpbmxvY2spCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKnNrYl9uZXh0OworCXN0cnVjdCBtd2lmaWV4X3R4X3BhcmFtIHR4X3BhcmFtOworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBtd2lmaWV4X3R4aW5mbyAqdHhfaW5mbzsKKworCWlmIChza2JfcXVldWVfZW1wdHkoJnB0ci0+c2tiX2hlYWQpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPndtbS5yYV9saXN0X3NwaW5sb2NrLAorCQkJCSAgICAgICByYV9saXN0X2ZsYWdzKTsKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJkYXRhOiBub3RoaW5nIHRvIHNlbmRcbiIpOworCQlyZXR1cm47CisJfQorCisJc2tiID0gc2tiX2RlcXVldWUoJnB0ci0+c2tiX2hlYWQpOworCisJdHhfaW5mbyA9IE1XSUZJRVhfU0tCX1RYQ0Ioc2tiKTsKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImRhdGE6IGRlcXVldWluZyB0aGUgcGFja2V0ICVwICVwXG4iLCBwdHIsIHNrYik7CisKKwlwdHItPnRvdGFsX3BrdHNfc2l6ZSAtPSBza2ItPmxlbjsKKworCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZwdHItPnNrYl9oZWFkKSkKKwkJc2tiX25leHQgPSBza2JfcGVlaygmcHRyLT5za2JfaGVhZCk7CisJZWxzZQorCQlza2JfbmV4dCA9IE5VTEw7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT53bW0ucmFfbGlzdF9zcGlubG9jaywgcmFfbGlzdF9mbGFncyk7CisKKwl0eF9wYXJhbS5uZXh0X3BrdF9sZW4gPSAoKHNrYl9uZXh0KSA/IHNrYl9uZXh0LT5sZW4gKworCQkJCXNpemVvZihzdHJ1Y3QgdHhwZCkgOiAwKTsKKworCWlmIChtd2lmaWV4X3Byb2Nlc3NfdHgocHJpdiwgc2tiLCAmdHhfcGFyYW0pID09IC1FQlVTWSkgeworCQkvKiBRdWV1ZSB0aGUgcGFja2V0IGJhY2sgYXQgdGhlIGhlYWQgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPndtbS5yYV9saXN0X3NwaW5sb2NrLCByYV9saXN0X2ZsYWdzKTsKKworCQlpZiAoIW13aWZpZXhfaXNfcmFsaXN0X3ZhbGlkKHByaXYsIHB0ciwgcHRyX2luZGV4KSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+d21tLnJhX2xpc3Rfc3BpbmxvY2ssCisJCQkJCSAgICAgICByYV9saXN0X2ZsYWdzKTsKKwkJCW13aWZpZXhfd3JpdGVfZGF0YV9jb21wbGV0ZShhZGFwdGVyLCBza2IsIC0xKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXNrYl9xdWV1ZV90YWlsKCZwdHItPnNrYl9oZWFkLCBza2IpOworCisJCXB0ci0+dG90YWxfcGt0c19zaXplICs9IHNrYi0+bGVuOworCQl0eF9pbmZvLT5mbGFncyB8PSBNV0lGSUVYX0JVRl9GTEFHX1JFUVVFVUVEX1BLVDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+d21tLnJhX2xpc3Rfc3BpbmxvY2ssCisJCQkJICAgICAgIHJhX2xpc3RfZmxhZ3MpOworCX0gZWxzZSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT53bW0ucmFfbGlzdF9zcGlubG9jaywgcmFfbGlzdF9mbGFncyk7CisJCWlmIChtd2lmaWV4X2lzX3JhbGlzdF92YWxpZChwcml2LCBwdHIsIHB0cl9pbmRleCkpIHsKKwkJCXByaXYtPndtbS5wYWNrZXRzX291dFtwdHJfaW5kZXhdKys7CisJCQlwcml2LT53bW0udGlkX3RibF9wdHJbcHRyX2luZGV4XS5yYV9saXN0X2N1cnIgPSBwdHI7CisJCX0KKwkJYWRhcHRlci0+YnNzX3ByaW9fdGJsW3ByaXYtPmJzc19wcmlvcml0eV0uYnNzX3ByaW9fY3VyID0KKwkJCWxpc3RfZmlyc3RfZW50cnkoCisJCQkJJmFkYXB0ZXItPmJzc19wcmlvX3RibFtwcml2LT5ic3NfcHJpb3JpdHldCisJCQkJLmJzc19wcmlvX2N1ci0+bGlzdCwKKwkJCQlzdHJ1Y3QgbXdpZmlleF9ic3NfcHJpb19ub2RlLAorCQkJCWxpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT53bW0ucmFfbGlzdF9zcGlubG9jaywKKwkJCQkgICAgICAgcmFfbGlzdF9mbGFncyk7CisJfQorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIGZpcnN0IHBhY2tldCBpbiB0aGUgZ2l2ZW4gUkEgbGlzdAorICogaXMgYWxyZWFkeSBwcm9jZXNzZWQgb3Igbm90LgorICovCitzdGF0aWMgaW50Cittd2lmaWV4X2lzX3B0cl9wcm9jZXNzZWQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSBzdHJ1Y3QgbXdpZmlleF9yYV9saXN0X3RibCAqcHRyKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IG13aWZpZXhfdHhpbmZvICp0eF9pbmZvOworCisJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmcHRyLT5za2JfaGVhZCkpCisJCXJldHVybiBmYWxzZTsKKworCXNrYiA9IHNrYl9wZWVrKCZwdHItPnNrYl9oZWFkKTsKKworCXR4X2luZm8gPSBNV0lGSUVYX1NLQl9UWENCKHNrYik7CisJaWYgKHR4X2luZm8tPmZsYWdzICYgTVdJRklFWF9CVUZfRkxBR19SRVFVRVVFRF9QS1QpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBzZW5kcyBhIHNpbmdsZSBwcm9jZXNzZWQgcGFja2V0IHRvIGZpcm13YXJlIGZvcgorICogdHJhbnNtaXNzaW9uLgorICovCitzdGF0aWMgdm9pZAorbXdpZmlleF9zZW5kX3Byb2Nlc3NlZF9wYWNrZXQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsICpwdHIsIGludCBwdHJfaW5kZXgsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIHJhX2xpc3RfZmxhZ3MpCisJCQkJX19yZWxlYXNlcygmcHJpdi0+d21tLnJhX2xpc3Rfc3BpbmxvY2spCit7CisJc3RydWN0IG13aWZpZXhfdHhfcGFyYW0gdHhfcGFyYW07CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJaW50IHJldCA9IC0xOworCXN0cnVjdCBza19idWZmICpza2IsICpza2JfbmV4dDsKKwlzdHJ1Y3QgbXdpZmlleF90eGluZm8gKnR4X2luZm87CisKKwlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZwdHItPnNrYl9oZWFkKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT53bW0ucmFfbGlzdF9zcGlubG9jaywKKwkJCQkgICAgICAgcmFfbGlzdF9mbGFncyk7CisJCXJldHVybjsKKwl9CisKKwlza2IgPSBza2JfZGVxdWV1ZSgmcHRyLT5za2JfaGVhZCk7CisKKwlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmcHRyLT5za2JfaGVhZCkpCisJCXNrYl9uZXh0ID0gc2tiX3BlZWsoJnB0ci0+c2tiX2hlYWQpOworCWVsc2UKKwkJc2tiX25leHQgPSBOVUxMOworCisJdHhfaW5mbyA9IE1XSUZJRVhfU0tCX1RYQ0Ioc2tiKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPndtbS5yYV9saXN0X3NwaW5sb2NrLCByYV9saXN0X2ZsYWdzKTsKKwl0eF9wYXJhbS5uZXh0X3BrdF9sZW4gPQorCQkoKHNrYl9uZXh0KSA/IHNrYl9uZXh0LT5sZW4gKworCQkgc2l6ZW9mKHN0cnVjdCB0eHBkKSA6IDApOworCXJldCA9IGFkYXB0ZXItPmlmX29wcy5ob3N0X3RvX2NhcmQoYWRhcHRlciwgTVdJRklFWF9UWVBFX0RBVEEsCisJCQkJCSAgIHNrYi0+ZGF0YSwgc2tiLT5sZW4sICZ0eF9wYXJhbSk7CisJc3dpdGNoIChyZXQpIHsKKwljYXNlIC1FQlVTWToKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJkYXRhOiAtRUJVU1kgaXMgcmV0dXJuZWRcbiIpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+d21tLnJhX2xpc3Rfc3BpbmxvY2ssIHJhX2xpc3RfZmxhZ3MpOworCisJCWlmICghbXdpZmlleF9pc19yYWxpc3RfdmFsaWQocHJpdiwgcHRyLCBwdHJfaW5kZXgpKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT53bW0ucmFfbGlzdF9zcGlubG9jaywKKwkJCQkJICAgICAgIHJhX2xpc3RfZmxhZ3MpOworCQkJbXdpZmlleF93cml0ZV9kYXRhX2NvbXBsZXRlKGFkYXB0ZXIsIHNrYiwgLTEpOworCQkJcmV0dXJuOworCQl9CisKKwkJc2tiX3F1ZXVlX3RhaWwoJnB0ci0+c2tiX2hlYWQsIHNrYik7CisKKwkJdHhfaW5mby0+ZmxhZ3MgfD0gTVdJRklFWF9CVUZfRkxBR19SRVFVRVVFRF9QS1Q7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPndtbS5yYV9saXN0X3NwaW5sb2NrLAorCQkJCSAgICAgICByYV9saXN0X2ZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSAtMToKKwkJYWRhcHRlci0+ZGF0YV9zZW50ID0gZmFsc2U7CisJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiaG9zdF90b19jYXJkIGZhaWxlZDogJSN4XG4iLCByZXQpOworCQlhZGFwdGVyLT5kYmcubnVtX3R4X2hvc3RfdG9fY2FyZF9mYWlsdXJlKys7CisJCW13aWZpZXhfd3JpdGVfZGF0YV9jb21wbGV0ZShhZGFwdGVyLCBza2IsIHJldCk7CisJCWJyZWFrOworCWNhc2UgLUVJTlBST0dSRVNTOgorCQlhZGFwdGVyLT5kYXRhX3NlbnQgPSBmYWxzZTsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJaWYgKHJldCAhPSAtRUJVU1kpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPndtbS5yYV9saXN0X3NwaW5sb2NrLCByYV9saXN0X2ZsYWdzKTsKKwkJaWYgKG13aWZpZXhfaXNfcmFsaXN0X3ZhbGlkKHByaXYsIHB0ciwgcHRyX2luZGV4KSkgeworCQkJcHJpdi0+d21tLnBhY2tldHNfb3V0W3B0cl9pbmRleF0rKzsKKwkJCXByaXYtPndtbS50aWRfdGJsX3B0cltwdHJfaW5kZXhdLnJhX2xpc3RfY3VyciA9IHB0cjsKKwkJfQorCQlhZGFwdGVyLT5ic3NfcHJpb190YmxbcHJpdi0+YnNzX3ByaW9yaXR5XS5ic3NfcHJpb19jdXIgPQorCQkJbGlzdF9maXJzdF9lbnRyeSgKKwkJCQkmYWRhcHRlci0+YnNzX3ByaW9fdGJsW3ByaXYtPmJzc19wcmlvcml0eV0KKwkJCQkuYnNzX3ByaW9fY3VyLT5saXN0LAorCQkJCXN0cnVjdCBtd2lmaWV4X2Jzc19wcmlvX25vZGUsCisJCQkJbGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPndtbS5yYV9saXN0X3NwaW5sb2NrLAorCQkJCSAgICAgICByYV9saXN0X2ZsYWdzKTsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGRlcXVldWVzIGEgcGFja2V0IGZyb20gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgbGlzdAorICogYW5kIHRyYW5zbWl0cyBpdC4KKyAqLworc3RhdGljIGludAorbXdpZmlleF9kZXF1ZXVlX3R4X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBtd2lmaWV4X3JhX2xpc3RfdGJsICpwdHI7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9IE5VTEw7CisJaW50IHB0cl9pbmRleCA9IDA7CisJdTggcmFbRVRIX0FMRU5dOworCWludCB0aWRfZGVsID0gMCwgdGlkID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcHRyID0gbXdpZmlleF93bW1fZ2V0X2hpZ2hlc3RfcHJpb2xpc3RfcHRyKGFkYXB0ZXIsICZwcml2LCAmcHRyX2luZGV4KTsKKwlpZiAoIXB0cikKKwkJcmV0dXJuIC0xOworCisJdGlkID0gbXdpZmlleF9nZXRfdGlkKHB0cik7CisKKwlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImRhdGE6IHRpZD0lZFxuIiwgdGlkKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT53bW0ucmFfbGlzdF9zcGlubG9jaywgZmxhZ3MpOworCWlmICghbXdpZmlleF9pc19yYWxpc3RfdmFsaWQocHJpdiwgcHRyLCBwdHJfaW5kZXgpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPndtbS5yYV9saXN0X3NwaW5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAobXdpZmlleF9pc19wdHJfcHJvY2Vzc2VkKHByaXYsIHB0cikpIHsKKwkJbXdpZmlleF9zZW5kX3Byb2Nlc3NlZF9wYWNrZXQocHJpdiwgcHRyLCBwdHJfaW5kZXgsIGZsYWdzKTsKKwkJLyogcmFfbGlzdF9zcGlubG9jayBoYXMgYmVlbiBmcmVlZCBpbgorCQkgICBtd2lmaWV4X3NlbmRfcHJvY2Vzc2VkX3BhY2tldCgpICovCisJCXJldHVybiAwOworCX0KKworCWlmICghcHRyLT5pc18xMW5fZW5hYmxlZCB8fCBtd2lmaWV4X2lzX2JhX3N0cmVhbV9zZXR1cChwcml2LCBwdHIsIHRpZCkKKwkgICAgfHwgKChwcml2LT5zZWNfaW5mby53cGFfZW5hYmxlZAorCQkgIHx8IHByaXYtPnNlY19pbmZvLndwYTJfZW5hYmxlZCkgJiYgIXByaXYtPndwYV9pc19ndGtfc2V0KQorCQkpIHsKKwkJbXdpZmlleF9zZW5kX3NpbmdsZV9wYWNrZXQocHJpdiwgcHRyLCBwdHJfaW5kZXgsIGZsYWdzKTsKKwkJLyogcmFfbGlzdF9zcGlubG9jayBoYXMgYmVlbiBmcmVlZCBpbgorCQkgICBtd2lmaWV4X3NlbmRfc2luZ2xlX3BhY2tldCgpICovCisJfSBlbHNlIHsKKwkJaWYgKG13aWZpZXhfaXNfYW1wZHVfYWxsb3dlZChwcml2LCB0aWQpKSB7CisJCQlpZiAobXdpZmlleF9zcGFjZV9hdmFpbF9mb3JfbmV3X2JhX3N0cmVhbShhZGFwdGVyKSkgeworCQkJCW13aWZpZXhfMTFuX2NyZWF0ZV90eF9iYV9zdHJlYW1fdGJsKHByaXYsCisJCQkJCQlwdHItPnJhLCB0aWQsCisJCQkJCQlCQV9TVFJFQU1fU0VUVVBfSU5QUk9HUkVTUyk7CisJCQkJbXdpZmlleF9zZW5kX2FkZGJhKHByaXYsIHRpZCwgcHRyLT5yYSk7CisJCQl9IGVsc2UgaWYgKG13aWZpZXhfZmluZF9zdHJlYW1fdG9fZGVsZXRlCisJCQkJICAgKHByaXYsIHRpZCwgJnRpZF9kZWwsIHJhKSkgeworCQkJCW13aWZpZXhfMTFuX2NyZWF0ZV90eF9iYV9zdHJlYW1fdGJsKHByaXYsCisJCQkJCQlwdHItPnJhLCB0aWQsCisJCQkJCQlCQV9TVFJFQU1fU0VUVVBfSU5QUk9HUkVTUyk7CisJCQkJbXdpZmlleF9zZW5kX2RlbGJhKHByaXYsIHRpZF9kZWwsIHJhLCAxKTsKKwkJCX0KKwkJfQorLyogTWluaW11bSBudW1iZXIgb2YgQU1TRFUgKi8KKyNkZWZpbmUgTUlOX05VTV9BTVNEVSAyCisJCWlmIChtd2lmaWV4X2lzX2Ftc2R1X2FsbG93ZWQocHJpdiwgdGlkKSAmJgorCQkgICAgKG13aWZpZXhfbnVtX3BrdHNfaW5fdHhxKHByaXYsIHB0ciwgYWRhcHRlci0+dHhfYnVmX3NpemUpID49CisJCSAgICAgTUlOX05VTV9BTVNEVSkpCisJCQltd2lmaWV4XzExbl9hZ2dyZWdhdGVfcGt0KHByaXYsIHB0ciwgSU5URl9IRUFERVJfTEVOLAorCQkJCQkJICBwdHJfaW5kZXgsIGZsYWdzKTsKKwkJCS8qIHJhX2xpc3Rfc3BpbmxvY2sgaGFzIGJlZW4gZnJlZWQgaW4KKwkJCSAgIG13aWZpZXhfMTFuX2FnZ3JlZ2F0ZV9wa3QoKSAqLworCQllbHNlCisJCQltd2lmaWV4X3NlbmRfc2luZ2xlX3BhY2tldChwcml2LCBwdHIsIHB0cl9pbmRleCwgZmxhZ3MpOworCQkJLyogcmFfbGlzdF9zcGlubG9jayBoYXMgYmVlbiBmcmVlZCBpbgorCQkJICAgbXdpZmlleF9zZW5kX3NpbmdsZV9wYWNrZXQoKSAqLworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gdHJhbnNtaXRzIHRoZSBoaWdoZXN0IHByaW9yaXR5IHBhY2tldCBhd2FpdGluZyBpbiB0aGUKKyAqIFdNTSBRdWV1ZXMuCisgKi8KK3ZvaWQKK213aWZpZXhfd21tX3Byb2Nlc3NfdHgoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlkbyB7CisJCS8qIENoZWNrIGlmIGJ1c3kgKi8KKwkJaWYgKGFkYXB0ZXItPmRhdGFfc2VudCB8fCBhZGFwdGVyLT50eF9sb2NrX2ZsYWcpCisJCQlicmVhazsKKworCQlpZiAobXdpZmlleF9kZXF1ZXVlX3R4X3BhY2tldChhZGFwdGVyKSkKKwkJCWJyZWFrOworCX0gd2hpbGUgKHRydWUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC93bW0uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvd21tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNlYTFmNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvd21tLmgKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBNYXJ2ZWxsIFdpcmVsZXNzIExBTiBkZXZpY2UgZHJpdmVyOiBXTU0KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwKKyAqIEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MQorICogKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbgorICogYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoCisgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQSBvciBvbiB0aGUKKyAqIHdvcmxkd2lkZSB3ZWIgYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dC4KKyAqCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0CisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuCisgKi8KKworI2lmbmRlZiBfTVdJRklFWF9XTU1fSF8KKyNkZWZpbmUgX01XSUZJRVhfV01NX0hfCisKK2VudW0gaWVlZV90eXBlc193bW1fYWNpYWlmc25fYml0bWFza3MgeworCU1XSUZJRVhfQUlGU04gPSAoQklUKDApIHwgQklUKDEpIHwgQklUKDIpIHwgQklUKDMpKSwKKwlNV0lGSUVYX0FDTSA9IEJJVCg0KSwKKwlNV0lGSUVYX0FDSSA9IChCSVQoNSkgfCBCSVQoNikpLAorfTsKKworZW51bSBpZWVlX3R5cGVzX3dtbV9lY3dfYml0bWFza3MgeworCU1XSUZJRVhfRUNXX01JTiA9IChCSVQoMCkgfCBCSVQoMSkgfCBCSVQoMikgfCBCSVQoMykpLAorCU1XSUZJRVhfRUNXX01BWCA9IChCSVQoNCkgfCBCSVQoNSkgfCBCSVQoNikgfCBCSVQoNykpLAorfTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBUSUQgb2YgdGhlIGdpdmVuIFJBIGxpc3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Cittd2lmaWV4X2dldF90aWQoc3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwgKnB0cikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmcHRyLT5za2JfaGVhZCkpCisJCXJldHVybiAwOworCisJc2tiID0gc2tiX3BlZWsoJnB0ci0+c2tiX2hlYWQpOworCisJcmV0dXJuIHNrYi0+cHJpb3JpdHk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIGxlbmd0aCBvZiBhIGxpc3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Cittd2lmaWV4X3dtbV9saXN0X2xlbihzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlpbnQgY291bnQgPSAwOworCisJbGlzdF9mb3JfZWFjaChwb3MsIGhlYWQpCisJCSsrY291bnQ7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBhIFJBIGxpc3QgaXMgZW1wdHkgb3Igbm90LgorICovCitzdGF0aWMgaW5saW5lIHU4Cittd2lmaWV4X3dtbV9pc19yYV9saXN0X2VtcHR5KHN0cnVjdCBsaXN0X2hlYWQgKnJhX2xpc3RfaGhlYWQpCit7CisJc3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwgKnJhX2xpc3Q7CisJaW50IGlzX2xpc3RfZW1wdHk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJhX2xpc3QsIHJhX2xpc3RfaGhlYWQsIGxpc3QpIHsKKwkJaXNfbGlzdF9lbXB0eSA9IHNrYl9xdWV1ZV9lbXB0eSgmcmFfbGlzdC0+c2tiX2hlYWQpOworCQlpZiAoIWlzX2xpc3RfZW1wdHkpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgbXdpZmlleF93bW1fYWRkX2J1Zl90eHF1ZXVlKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBtd2lmaWV4X3JhbGlzdF9hZGQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggKnJhKTsKKworaW50IG13aWZpZXhfd21tX2xpc3RzX2VtcHR5KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBtd2lmaWV4X3dtbV9wcm9jZXNzX3R4KHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IG13aWZpZXhfaXNfcmFsaXN0X3ZhbGlkKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgc3RydWN0IG13aWZpZXhfcmFfbGlzdF90YmwgKnJhX2xpc3QsIGludCB0aWQpOworCit1OCBtd2lmaWV4X3dtbV9jb21wdXRlX2Rydl9wa3RfZGVsYXkoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkJICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgbXdpZmlleF93bW1faW5pdChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKTsKKworZXh0ZXJuIHUzMiBtd2lmaWV4X3dtbV9wcm9jZXNzX2Fzc29jaWF0aW9uX3JlcShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCQkJIHU4ICoqYXNzb2NfYnVmLAorCQkJCQkJIHN0cnVjdCBpZWVlX3R5cGVzX3dtbV9wYXJhbWV0ZXIKKwkJCQkJCSAqd21taWUsCisJCQkJCQkgc3RydWN0IGllZWU4MDIxMV9odF9jYXAKKwkJCQkJCSAqaHRjYXApOworCit2b2lkIG13aWZpZXhfd21tX3NldHVwX3F1ZXVlX3ByaW9yaXRpZXMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkJc3RydWN0IGllZWVfdHlwZXNfd21tX3BhcmFtZXRlcgorCQkJCQkqd21tX2llKTsKK3ZvaWQgbXdpZmlleF93bW1fc2V0dXBfYWNfZG93bmdyYWRlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpOworZXh0ZXJuIGludCBtd2lmaWV4X3JldF93bW1fZ2V0X3N0YXR1cyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpyZXNwKTsKKworI2VuZGlmIC8qICFfTVdJRklFWF9XTU1fSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jCmluZGV4IGMxY2ViNGIuLjMyMjYxMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYwpAQCAtNjMsNiArNjMsNyBAQAogI2RlZmluZSBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9DTEVBUl9TRUwJMHgwMDAwMGMzOAogI2RlZmluZSBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVNfTUFTSwkweDAwMDAwYzNjCiAjZGVmaW5lICBNV0w4S19BMkhfSU5UX0RVTU1ZCQkJICgxIDw8IDIwKQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9CQV9XQVRDSERPRwkJICgxIDw8IDE0KQogI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9DSE5MX1NXSVRDSEVECQkgKDEgPDwgMTEpCiAjZGVmaW5lICBNV0w4S19BMkhfSU5UX1FVRVVFX0VNUFRZCQkgKDEgPDwgMTApCiAjZGVmaW5lICBNV0w4S19BMkhfSU5UX1JBREFSX0RFVEVDVAkJICgxIDw8IDcpCkBAIC03Myw2ICs3NCwxNCBAQAogI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9SWF9SRUFEWQkJCSAoMSA8PCAxKQogI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9UWF9ET05FCQkJICgxIDw8IDApCiAKKy8qIEhXIG1pY3JvIHNlY29uZCB0aW1lciByZWdpc3RlcgorICogbG9jYXRlZCBhdCBvZmZzZXQgMHhBNjAwLiBUaGlzCisgKiB3aWxsIGJlIHVzZWQgdG8gdGltZXN0YW1wIHR4CisgKiBwYWNrZXRzLgorICovCisKKyNkZWZpbmUJTVdMOEtfSFdfVElNRVJfUkVHSVNURVIJCQkweDAwMDBhNjAwCisKICNkZWZpbmUgTVdMOEtfQTJIX0VWRU5UUwkoTVdMOEtfQTJIX0lOVF9EVU1NWSB8IFwKIAkJCQkgTVdMOEtfQTJIX0lOVF9DSE5MX1NXSVRDSEVEIHwgXAogCQkJCSBNV0w4S19BMkhfSU5UX1FVRVVFX0VNUFRZIHwgXApAQCAtODIsMTAgKzkxLDE0IEBACiAJCQkJIE1XTDhLX0EySF9JTlRfTUFDX0VWRU5UIHwgXAogCQkJCSBNV0w4S19BMkhfSU5UX09QQ19ET05FIHwgXAogCQkJCSBNV0w4S19BMkhfSU5UX1JYX1JFQURZIHwgXAotCQkJCSBNV0w4S19BMkhfSU5UX1RYX0RPTkUpCisJCQkJIE1XTDhLX0EySF9JTlRfVFhfRE9ORSB8IFwKKwkJCQkgTVdMOEtfQTJIX0lOVF9CQV9XQVRDSERPRykKIAogI2RlZmluZSBNV0w4S19SWF9RVUVVRVMJCTEKLSNkZWZpbmUgTVdMOEtfVFhfUVVFVUVTCQk0CisjZGVmaW5lIE1XTDhLX1RYX1dNTV9RVUVVRVMJNAorI2RlZmluZSBNV0w4S19NQVhfQU1QRFVfUVVFVUVTCTgKKyNkZWZpbmUgTVdMOEtfTUFYX1RYX1FVRVVFUwkoTVdMOEtfVFhfV01NX1FVRVVFUyArIE1XTDhLX01BWF9BTVBEVV9RVUVVRVMpCisjZGVmaW5lIG13bDhrX3R4X3F1ZXVlcyhwcml2KQkoTVdMOEtfVFhfV01NX1FVRVVFUyArIChwcml2KS0+bnVtX2FtcGR1X3F1ZXVlcykKIAogc3RydWN0IHJ4ZF9vcHMgewogCWludCByeGRfc2l6ZTsKQEAgLTEzNCw2ICsxNDcsMjEgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqKnNrYjsKIH07CiAKK2VudW0geworCUFNUERVX05PX1NUUkVBTSwKKwlBTVBEVV9TVFJFQU1fTkVXLAorCUFNUERVX1NUUkVBTV9JTl9QUk9HUkVTUywKKwlBTVBEVV9TVFJFQU1fQUNUSVZFLAorfTsKKworc3RydWN0IG13bDhrX2FtcGR1X3N0cmVhbSB7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKKwl1OCB0aWQ7CisJdTggc3RhdGU7CisJdTggaWR4OworCXU4IHR4cV9pZHg7IC8qIGluZGV4IG9mIHRoaXMgc3RyZWFtIGluIHByaXYtPnR4cSAqLworfTsKKwogc3RydWN0IG13bDhrX3ByaXYgewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwpAQCAtMTYwLDYgKzE4OCwxMiBAQAogCXUzMiBhcF9tYWNpZHNfc3VwcG9ydGVkOwogCXUzMiBzdGFfbWFjaWRzX3N1cHBvcnRlZDsKIAorCS8qIEFtcGR1IHN0cmVhbSBpbmZvcm1hdGlvbiAqLworCXU4IG51bV9hbXBkdV9xdWV1ZXM7CisJc3BpbmxvY2tfdCBzdHJlYW1fbG9jazsKKwlzdHJ1Y3QgbXdsOGtfYW1wZHVfc3RyZWFtIGFtcGR1W01XTDhLX01BWF9BTVBEVV9RVUVVRVNdOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3YXRjaGRvZ19iYV9oYW5kbGU7CisKIAkvKiBmaXJtd2FyZSBhY2Nlc3MgKi8KIAlzdHJ1Y3QgbXV0ZXggZndfbXV0ZXg7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpmd19tdXRleF9vd25lcjsKQEAgLTE5MSw3ICsyMjUsOCBAQAogCWludCBwZW5kaW5nX3R4X3BrdHM7CiAKIAlzdHJ1Y3QgbXdsOGtfcnhfcXVldWUgcnhxW01XTDhLX1JYX1FVRVVFU107Ci0Jc3RydWN0IG13bDhrX3R4X3F1ZXVlIHR4cVtNV0w4S19UWF9RVUVVRVNdOworCXN0cnVjdCBtd2w4a190eF9xdWV1ZSB0eHFbTVdMOEtfTUFYX1RYX1FVRVVFU107CisJdTMyIHR4cV9vZmZzZXRbTVdMOEtfTUFYX1RYX1FVRVVFU107CiAKIAlib29sIHJhZGlvX29uOwogCWJvb2wgcmFkaW9fc2hvcnRfcHJlYW1ibGU7CkBAIC0yMjQsNyArMjU5LDcgQEAKIAkgKiBwcmVzZXJ2ZSB0aGUgcXVldWUgY29uZmlndXJhdGlvbnMgc28gdGhleSBjYW4gYmUgcmVzdG9yZWQgaWYvd2hlbgogCSAqIHRoZSBmaXJtd2FyZSBpbWFnZSBpcyBzd2FwcGVkLgogCSAqLwotCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zIHdtbV9wYXJhbXNbTVdMOEtfVFhfUVVFVUVTXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyB3bW1fcGFyYW1zW01XTDhLX1RYX1dNTV9RVUVVRVNdOwogCiAJLyogYXN5bmMgZmlybXdhcmUgbG9hZGluZyBzdGF0ZSAqLwogCXVuc2lnbmVkIGZ3X3N0YXRlOwpAQCAtMjYyLDkgKzI5NywxNyBAQAogI2RlZmluZSBNV0w4S19WSUYoX3ZpZikgKChzdHJ1Y3QgbXdsOGtfdmlmICopJigoX3ZpZiktPmRydl9wcml2KSkKICNkZWZpbmUgSUVFRTgwMjExX0tFWV9DT05GKF91OCkgKChzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICopKF91OCkpCiAKK3N0cnVjdCB0eF90cmFmZmljX2luZm8geworCXUzMiBzdGFydF90aW1lOworCXUzMiBwa3RzOworfTsKKworI2RlZmluZSBNV0w4S19NQVhfVElEIDgKIHN0cnVjdCBtd2w4a19zdGEgewogCS8qIEluZGV4IGludG8gc3RhdGlvbiBkYXRhYmFzZS4gUmV0dXJuZWQgYnkgVVBEQVRFX1NUQURCLiAgKi8KIAl1OCBwZWVyX2lkOworCXU4IGlzX2FtcGR1X2FsbG93ZWQ7CisJc3RydWN0IHR4X3RyYWZmaWNfaW5mbyB0eF9zdGF0c1tNV0w4S19NQVhfVElEXTsKIH07CiAjZGVmaW5lIE1XTDhLX1NUQShfc3RhKSAoKHN0cnVjdCBtd2w4a19zdGEgKikmKChfc3RhKS0+ZHJ2X3ByaXYpKQogCkBAIC0zNTIsMTAgKzM5NSwxMiBAQAogI2RlZmluZSBNV0w4S19DTURfRU5BQkxFX1NOSUZGRVIJMHgwMTUwCiAjZGVmaW5lIE1XTDhLX0NNRF9TRVRfTUFDX0FERFIJCTB4MDIwMgkJLyogcGVyLXZpZiAqLwogI2RlZmluZSBNV0w4S19DTURfU0VUX1JBVEVBREFQVF9NT0RFCTB4MDIwMworI2RlZmluZSBNV0w4S19DTURfR0VUX1dBVENIRE9HX0JJVE1BUAkweDAyMDUKICNkZWZpbmUgTVdMOEtfQ01EX0JTU19TVEFSVAkJMHgxMTAwCQkvKiBwZXItdmlmICovCiAjZGVmaW5lIE1XTDhLX0NNRF9TRVRfTkVXX1NUTgkJMHgxMTExCQkvKiBwZXItdmlmICovCiAjZGVmaW5lIE1XTDhLX0NNRF9VUERBVEVfRU5DUllQVElPTgkweDExMjIJCS8qIHBlci12aWYgKi8KICNkZWZpbmUgTVdMOEtfQ01EX1VQREFURV9TVEFEQgkJMHgxMTIzCisjZGVmaW5lIE1XTDhLX0NNRF9CQVNUUkVBTQkJMHgxMTI1CiAKIHN0YXRpYyBjb25zdCBjaGFyICptd2w4a19jbWRfbmFtZShfX2xlMTYgY21kLCBjaGFyICpidWYsIGludCBidWZzaXplKQogewpAQCAtMzk1LDYgKzQ0MCw4IEBACiAJCU1XTDhLX0NNRE5BTUUoU0VUX05FV19TVE4pOwogCQlNV0w4S19DTUROQU1FKFVQREFURV9FTkNSWVBUSU9OKTsKIAkJTVdMOEtfQ01ETkFNRShVUERBVEVfU1RBREIpOworCQlNV0w4S19DTUROQU1FKEJBU1RSRUFNKTsKKwkJTVdMOEtfQ01ETkFNRShHRVRfV0FUQ0hET0dfQklUTUFQKTsKIAlkZWZhdWx0OgogCQlzbnByaW50ZihidWYsIGJ1ZnNpemUsICIweCV4IiwgY21kKTsKIAl9CkBAIC02NjksNyArNzE2LDcgQEAKIAkJCSAgICAgICAiaGVscGVyIGltYWdlXG4iLCBwY2lfbmFtZShwcml2LT5wZGV2KSk7CiAJCQlyZXR1cm4gcmM7CiAJCX0KLQkJbXNsZWVwKDUpOworCQltc2xlZXAoMjApOwogCiAJCXJjID0gbXdsOGtfZmVlZF9md19pbWFnZShwcml2LCBmdy0+ZGF0YSwgZnctPnNpemUpOwogCX0gZWxzZSB7CkBAIC03MzQsOCArNzgxLDExIEBACiAJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCp0cikgLSBoZHJsZW4pOwogfQogCisjZGVmaW5lIFJFRFVDRURfVFhfSEVBRFJPT00JOAorCiBzdGF0aWMgdm9pZAotbXdsOGtfYWRkX2RtYV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRhaWxfcGFkKQorbXdsOGtfYWRkX2RtYV9oZWFkZXIoc3RydWN0IG13bDhrX3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQlpbnQgaGVhZF9wYWQsIGludCB0YWlsX3BhZCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqd2g7CiAJaW50IGhkcmxlbjsKQEAgLTc1MSw3ICs4MDEsMjMgQEAKIAl3aCA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAogCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4od2gtPmZyYW1lX2NvbnRyb2wpOwotCXJlcWRfaGRybGVuID0gc2l6ZW9mKCp0cik7CisKKwkvKgorCSAqIENoZWNrIGlmIHNrYl9yZXNpemUgaXMgcmVxdWlyZWQgYmVjYXVzZSBvZgorCSAqIHR4X2hlYWRyb29tIGFkanVzdG1lbnQuCisJICovCisJaWYgKHByaXYtPmFwX2Z3ICYmIChoZHJsZW4gPCAoc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY3RzKQorCQkJCQkJKyBSRURVQ0VEX1RYX0hFQURST09NKSkpIHsKKwkJaWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCBSRURVQ0VEX1RYX0hFQURST09NLCAwLCBHRlBfQVRPTUlDKSkgeworCisJCQl3aXBoeV9lcnIocHJpdi0+aHctPndpcGh5LAorCQkJCQkiRmFpbGVkIHRvIHJlYWxsb2NhdGUgVFggYnVmZmVyXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCQlza2ItPnRydWVzaXplICs9IFJFRFVDRURfVFhfSEVBRFJPT007CisJfQorCisJcmVxZF9oZHJsZW4gPSBzaXplb2YoKnRyKSArIGhlYWRfcGFkOwogCiAJaWYgKGhkcmxlbiAhPSByZXFkX2hkcmxlbikKIAkJc2tiX3B1c2goc2tiLCByZXFkX2hkcmxlbiAtIGhkcmxlbik7CkBAIC03NzMsMTIgKzgzOSwxNCBAQAogCXRyLT5md2xlbiA9IGNwdV90b19sZTE2KHNrYi0+bGVuIC0gc2l6ZW9mKCp0cikgKyB0YWlsX3BhZCk7CiB9CiAKLXN0YXRpYyB2b2lkIG13bDhrX2VuY2Fwc3VsYXRlX3R4X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgdm9pZCBtd2w4a19lbmNhcHN1bGF0ZV90eF9mcmFtZShzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiwKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqd2g7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvOwogCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleV9jb25mOwogCWludCBkYXRhX3BhZDsKKwlpbnQgaGVhZF9wYWQgPSAwOwogCiAJd2ggPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CiAKQEAgLTc5MCw5ICs4NTgsNyBAQAogCiAJLyoKIAkgKiBNYWtlIHN1cmUgdGhlIHBhY2tldCBoZWFkZXIgaXMgaW4gdGhlIERNQSBoZWFkZXIgZm9ybWF0ICg0LWFkZHJlc3MKLQkgKiB3aXRob3V0IFFvUyksIHRoZSBuZWNlc3NhcnkgY3J5cHRvIHBhZGRpbmcgYmV0d2VlbiB0aGUgaGVhZGVyIGFuZCB0aGUKLQkgKiBwYXlsb2FkIGhhcyBhbHJlYWR5IGJlZW4gcHJvdmlkZWQgYnkgbWFjODAyMTEsIGJ1dCBpdCBkb2Vzbid0IGFkZCB0YWlsCi0JICogcGFkZGluZyB3aGVuIEhXIGNyeXB0byBpcyBlbmFibGVkLgorCSAqIHdpdGhvdXQgUW9TKSwgYW5kIGFkZCBoZWFkICYgdGFpbCBwYWRkaW5nIHdoZW4gSFcgY3J5cHRvIGlzIGVuYWJsZWQuCiAJICoKIAkgKiBXZSBoYXZlIHRoZSBmb2xsb3dpbmcgdHJhaWxlciBwYWRkaW5nIHJlcXVpcmVtZW50czoKIAkgKiAtIFdFUDogNCB0cmFpbGVyIGJ5dGVzIChJQ1YpCkBAIC04MDEsNiArODY3LDcgQEAKIAkgKi8KIAlkYXRhX3BhZCA9IDA7CiAJaWYgKGtleV9jb25mICE9IE5VTEwpIHsKKwkJaGVhZF9wYWQgPSBrZXlfY29uZi0+aXZfbGVuOwogCQlzd2l0Y2ggKGtleV9jb25mLT5jaXBoZXIpIHsKIAkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDoKIAkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ6CkBAIC04MTQsNyArODgxLDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQotCW13bDhrX2FkZF9kbWFfaGVhZGVyKHNrYiwgZGF0YV9wYWQpOworCW13bDhrX2FkZF9kbWFfaGVhZGVyKHByaXYsIHNrYiwgaGVhZF9wYWQsIGRhdGFfcGFkKTsKIH0KIAogLyoKQEAgLTExMjcsNiArMTE5NCw5IEBACiAJc3RydWN0IG13bDhrX3J4X3F1ZXVlICpyeHEgPSBwcml2LT5yeHEgKyBpbmRleDsKIAlpbnQgaTsKIAorCWlmIChyeHEtPnJ4ZCA9PSBOVUxMKQorCQlyZXR1cm47CisKIAlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfUlhfREVTQ1M7IGkrKykgewogCQlpZiAocnhxLT5idWZbaV0uc2tiICE9IE5VTEwpIHsKIAkJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwKQEAgLTEzMTksNyArMTM4OSw3IEBACiAJX19sZTE2IHBrdF9sZW47CiAJX191OCBkZXN0X01BQ19hZGRyW0VUSF9BTEVOXTsKIAlfX2xlMzIgbmV4dF90eGRfcGh5c19hZGRyOwotCV9fbGUzMiByZXNlcnZlZDsKKwlfX2xlMzIgdGltZXN0YW1wOwogCV9fbGUxNiByYXRlX2luZm87CiAJX191OCBwZWVyX2lkOwogCV9fdTggdHhfZnJhZ19jbnQ7CkBAIC0xMzgzLDcgKzE0NTMsNyBAQAogCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbXdsOGtfdHhfcXVldWVzKHByaXYpOyBpKyspIHsKIAkJc3RydWN0IG13bDhrX3R4X3F1ZXVlICp0eHEgPSBwcml2LT50eHEgKyBpOwogCQlpbnQgZndfb3duZWQgPSAwOwogCQlpbnQgZHJ2X293bmVkID0gMDsKQEAgLTE0NTIsOSArMTUyMiw4IEBACiAKIAkJaWYgKHRpbWVvdXQpIHsKIAkJCVdBUk5fT04ocHJpdi0+cGVuZGluZ190eF9wa3RzKTsKLQkJCWlmIChyZXRyeSkgeworCQkJaWYgKHJldHJ5KQogCQkJCXdpcGh5X25vdGljZShody0+d2lwaHksICJ0eCByaW5ncyBkcmFpbmVkXG4iKTsKLQkJCX0KIAkJCWJyZWFrOwogCQl9CiAKQEAgLTE0ODQsNiArMTU1Myw0MSBAQAogCQkgICAgIE1XTDhLX1RYRF9TVEFUVVNfT0tfUkVUUlkgfAkJXAogCQkgICAgIE1XTDhLX1RYRF9TVEFUVVNfT0tfTU9SRV9SRVRSWSkpCiAKK3N0YXRpYyBpbnQgbXdsOGtfdGlkX3F1ZXVlX21hcHBpbmcodTggdGlkKQoreworCUJVR19PTih0aWQgPiA3KTsKKworCXN3aXRjaCAodGlkKSB7CisJY2FzZSAwOgorCWNhc2UgMzoKKwkJcmV0dXJuIElFRUU4MDIxMV9BQ19CRTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCWNhc2UgMjoKKwkJcmV0dXJuIElFRUU4MDIxMV9BQ19CSzsKKwkJYnJlYWs7CisJY2FzZSA0OgorCWNhc2UgNToKKwkJcmV0dXJuIElFRUU4MDIxMV9BQ19WSTsKKwkJYnJlYWs7CisJY2FzZSA2OgorCWNhc2UgNzoKKwkJcmV0dXJuIElFRUU4MDIxMV9BQ19WTzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOworCQlicmVhazsKKwl9Cit9CisKKy8qIFRoZSBmaXJtd2FyZSB3aWxsIGZpbGwgaW4gdGhlIHJhdGUgaW5mb3JtYXRpb24KKyAqIGZvciBlYWNoIHBhY2tldCB0aGF0IGdldHMgcXVldWVkIGluIHRoZSBoYXJkd2FyZQorICogYW5kIHRoZXNlIG1hY3JvcyB3aWxsIGludGVycHJldCB0aGF0IGluZm8uCisgKi8KKworI2RlZmluZSBSSV9GT1JNQVQoYSkJCSAgKGEgJiAweDAwMDEpCisjZGVmaW5lIFJJX1JBVEVfSURfTUNTKGEpCSAoKGEgJiAweDAxZjgpID4+IDMpCisKIHN0YXRpYyBpbnQKIG13bDhrX3R4cV9yZWNsYWltKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaW5kZXgsIGludCBsaW1pdCwgaW50IGZvcmNlKQogewpAQCAtMTUwMCw2ICsxNjA0LDEwIEBACiAJCXN0cnVjdCBza19idWZmICpza2I7CiAJCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKIAkJdTMyIHN0YXR1czsKKwkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKKwkJc3RydWN0IG13bDhrX3N0YSAqc3RhX2luZm8gPSBOVUxMOworCQl1MTYgcmF0ZV9pbmZvOworCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqd2g7CiAKIAkJdHggPSB0eHEtPmhlYWQ7CiAJCXR4X2Rlc2MgPSB0eHEtPnR4ZCArIHR4OwpAQCAtMTUyOCwxOCArMTYzNiw0MCBAQAogCiAJCW13bDhrX3JlbW92ZV9kbWFfaGVhZGVyKHNrYiwgdHhfZGVzYy0+cW9zX2NvbnRyb2wpOwogCisJCXdoID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwogCQkvKiBNYXJrIGRlc2NyaXB0b3IgYXMgdW51c2VkICovCiAJCXR4X2Rlc2MtPnBrdF9waHlzX2FkZHIgPSAwOwogCQl0eF9kZXNjLT5wa3RfbGVuID0gMDsKIAogCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCQlpZiAoaWVlZTgwMjExX2lzX2RhdGEod2gtPmZyYW1lX2NvbnRyb2wpKSB7CisJCQlzdGEgPSBpbmZvLT5jb250cm9sLnN0YTsKKwkJCWlmIChzdGEpIHsKKwkJCQlzdGFfaW5mbyA9IE1XTDhLX1NUQShzdGEpOworCQkJCUJVR19PTihzdGFfaW5mbyA9PSBOVUxMKTsKKwkJCQlyYXRlX2luZm8gPSBsZTE2X3RvX2NwdSh0eF9kZXNjLT5yYXRlX2luZm8pOworCQkJCS8qIElmIHJhdGUgaXMgPCA2LjUgTXBicyBmb3IgYW4gaHQgc3RhdGlvbgorCQkJCSAqIGRvIG5vdCBmb3JtIGFuIGFtcGR1LiBJZiB0aGUgc3RhdGlvbiBpcyBhCisJCQkJICogbGVnYWN5IHN0YXRpb24gKGZvcm1hdCA9IDApLCBkbyBub3QgZm9ybSBhbgorCQkJCSAqIGFtcGR1CisJCQkJICovCisJCQkJaWYgKFJJX1JBVEVfSURfTUNTKHJhdGVfaW5mbykgPCAxIHx8CisJCQkJICAgIFJJX0ZPUk1BVChyYXRlX2luZm8pID09IDApIHsKKwkJCQkJc3RhX2luZm8tPmlzX2FtcGR1X2FsbG93ZWQgPSBmYWxzZTsKKwkJCQl9IGVsc2UgeworCQkJCQlzdGFfaW5mby0+aXNfYW1wZHVfYWxsb3dlZCA9IHRydWU7CisJCQkJfQorCQkJfQorCQl9CisKIAkJaWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzKGluZm8pOwogCiAJCS8qIFJhdGUgY29udHJvbCBpcyBoYXBwZW5pbmcgaW4gdGhlIGZpcm13YXJlLgogCQkgKiBFbnN1cmUgbm8gdHggcmF0ZSBpcyBiZWluZyByZXBvcnRlZC4KIAkJICovCi0gICAgICAgICAgICAgICAgaW5mby0+c3RhdHVzLnJhdGVzWzBdLmlkeCA9IC0xOwotICAgICAgICAgICAgICAgIGluZm8tPnN0YXR1cy5yYXRlc1swXS5jb3VudCA9IDE7CisJCWluZm8tPnN0YXR1cy5yYXRlc1swXS5pZHggPSAtMTsKKwkJaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50ID0gMTsKIAogCQlpZiAoTVdMOEtfVFhEX1NVQ0NFU1Moc3RhdHVzKSkKIAkJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKQEAgLTE1NDksOSArMTY3OSw2IEBACiAJCXByb2Nlc3NlZCsrOwogCX0KIAotCWlmIChwcm9jZXNzZWQgJiYgcHJpdi0+cmFkaW9fb24gJiYgIW11dGV4X2lzX2xvY2tlZCgmcHJpdi0+ZndfbXV0ZXgpKQotCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShodywgaW5kZXgpOwotCiAJcmV0dXJuIHByb2Nlc3NlZDsKIH0KIApAQCAtMTU2MSw2ICsxNjg4LDkgQEAKIAlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCXN0cnVjdCBtd2w4a190eF9xdWV1ZSAqdHhxID0gcHJpdi0+dHhxICsgaW5kZXg7CiAKKwlpZiAodHhxLT50eGQgPT0gTlVMTCkKKwkJcmV0dXJuOworCiAJbXdsOGtfdHhxX3JlY2xhaW0oaHcsIGluZGV4LCBJTlRfTUFYLCAxKTsKIAogCWtmcmVlKHR4cS0+c2tiKTsKQEAgLTE1NzIsMTIgKzE3MDIsMTE2IEBACiAJdHhxLT50eGQgPSBOVUxMOwogfQogCisvKiBjYWxsZXIgbXVzdCBob2xkIHByaXYtPnN0cmVhbV9sb2NrIHdoZW4gY2FsbGluZyB0aGUgc3RyZWFtIGZ1bmN0aW9ucyAqLworc3RhdGljIHN0cnVjdCBtd2w4a19hbXBkdV9zdHJlYW0gKgorbXdsOGtfYWRkX3N0cmVhbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTggdGlkKQoreworCXN0cnVjdCBtd2w4a19hbXBkdV9zdHJlYW0gKnN0cmVhbTsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHByaXYtPm51bV9hbXBkdV9xdWV1ZXM7IGkrKykgeworCQlzdHJlYW0gPSAmcHJpdi0+YW1wZHVbaV07CisJCWlmIChzdHJlYW0tPnN0YXRlID09IEFNUERVX05PX1NUUkVBTSkgeworCQkJc3RyZWFtLT5zdGEgPSBzdGE7CisJCQlzdHJlYW0tPnN0YXRlID0gQU1QRFVfU1RSRUFNX05FVzsKKwkJCXN0cmVhbS0+dGlkID0gdGlkOworCQkJc3RyZWFtLT5pZHggPSBpOworCQkJc3RyZWFtLT50eHFfaWR4ID0gTVdMOEtfVFhfV01NX1FVRVVFUyArIGk7CisJCQl3aXBoeV9kZWJ1Zyhody0+d2lwaHksICJBZGRlZCBhIG5ldyBzdHJlYW0gZm9yICVwTSAlZCIsCisJCQkJICAgIHN0YS0+YWRkciwgdGlkKTsKKwkJCXJldHVybiBzdHJlYW07CisJCX0KKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK213bDhrX3N0YXJ0X3N0cmVhbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IG13bDhrX2FtcGR1X3N0cmVhbSAqc3RyZWFtKQoreworCWludCByZXQ7CisKKwkvKiBpZiB0aGUgc3RyZWFtIGhhcyBhbHJlYWR5IGJlZW4gc3RhcnRlZCwgZG9uJ3Qgc3RhcnQgaXQgYWdhaW4gKi8KKwlpZiAoc3RyZWFtLT5zdGF0ZSAhPSBBTVBEVV9TVFJFQU1fTkVXKQorCQlyZXR1cm4gMDsKKwlyZXQgPSBpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbihzdHJlYW0tPnN0YSwgc3RyZWFtLT50aWQsIDApOworCWlmIChyZXQpCisJCXdpcGh5X2RlYnVnKGh3LT53aXBoeSwgIkZhaWxlZCB0byBzdGFydCBzdHJlYW0gZm9yICVwTSAlZDogIgorCQkJICAgICIlZFxuIiwgc3RyZWFtLT5zdGEtPmFkZHIsIHN0cmVhbS0+dGlkLCByZXQpOworCWVsc2UKKwkJd2lwaHlfZGVidWcoaHctPndpcGh5LCAiU3RhcnRlZCBzdHJlYW0gZm9yICVwTSAlZFxuIiwKKwkJCSAgICBzdHJlYW0tPnN0YS0+YWRkciwgc3RyZWFtLT50aWQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCittd2w4a19yZW1vdmVfc3RyZWFtKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgbXdsOGtfYW1wZHVfc3RyZWFtICpzdHJlYW0pCit7CisJd2lwaHlfZGVidWcoaHctPndpcGh5LCAiUmVtb3ZlIHN0cmVhbSBmb3IgJXBNICVkXG4iLCBzdHJlYW0tPnN0YS0+YWRkciwKKwkJICAgIHN0cmVhbS0+dGlkKTsKKwltZW1zZXQoc3RyZWFtLCAwLCBzaXplb2YoKnN0cmVhbSkpOworfQorCitzdGF0aWMgc3RydWN0IG13bDhrX2FtcGR1X3N0cmVhbSAqCittd2w4a19sb29rdXBfc3RyZWFtKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqYWRkciwgdTggdGlkKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwIDsgaSA8IHByaXYtPm51bV9hbXBkdV9xdWV1ZXM7IGkrKykgeworCQlzdHJ1Y3QgbXdsOGtfYW1wZHVfc3RyZWFtICpzdHJlYW07CisJCXN0cmVhbSA9ICZwcml2LT5hbXBkdVtpXTsKKwkJaWYgKHN0cmVhbS0+c3RhdGUgPT0gQU1QRFVfTk9fU1RSRUFNKQorCQkJY29udGludWU7CisJCWlmICghbWVtY21wKHN0cmVhbS0+c3RhLT5hZGRyLCBhZGRyLCBFVEhfQUxFTikgJiYKKwkJICAgIHN0cmVhbS0+dGlkID09IHRpZCkKKwkJCXJldHVybiBzdHJlYW07CisJfQorCXJldHVybiBOVUxMOworfQorCisjZGVmaW5lIE1XTDhLX0FNUERVX1BBQ0tFVF9USFJFU0hPTEQgNjQKK3N0YXRpYyBpbmxpbmUgYm9vbCBtd2w4a19hbXBkdV9hbGxvd2VkKHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHU4IHRpZCkKK3sKKwlzdHJ1Y3QgbXdsOGtfc3RhICpzdGFfaW5mbyA9IE1XTDhLX1NUQShzdGEpOworCXN0cnVjdCB0eF90cmFmZmljX2luZm8gKnR4X3N0YXRzOworCisJQlVHX09OKHRpZCA+PSBNV0w4S19NQVhfVElEKTsKKwl0eF9zdGF0cyA9ICZzdGFfaW5mby0+dHhfc3RhdHNbdGlkXTsKKworCXJldHVybiBzdGFfaW5mby0+aXNfYW1wZHVfYWxsb3dlZCAmJgorCQl0eF9zdGF0cy0+cGt0cyA+IE1XTDhLX0FNUERVX1BBQ0tFVF9USFJFU0hPTEQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtd2w4a190eF9jb3VudF9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTggdGlkKQoreworCXN0cnVjdCBtd2w4a19zdGEgKnN0YV9pbmZvID0gTVdMOEtfU1RBKHN0YSk7CisJc3RydWN0IHR4X3RyYWZmaWNfaW5mbyAqdHhfc3RhdHM7CisKKwlCVUdfT04odGlkID49IE1XTDhLX01BWF9USUQpOworCXR4X3N0YXRzID0gJnN0YV9pbmZvLT50eF9zdGF0c1t0aWRdOworCisJaWYgKHR4X3N0YXRzLT5zdGFydF90aW1lID09IDApCisJCXR4X3N0YXRzLT5zdGFydF90aW1lID0gamlmZmllczsKKworCS8qIHJlc2V0IHRoZSBwYWNrZXQgY291bnQgYWZ0ZXIgZWFjaCBzZWNvbmQgZWxhcHNlcy4gIElmIHRoZSBudW1iZXIgb2YKKwkgKiBwYWNrZXRzIGV2ZXIgZXhjZWVkcyB0aGUgYW1wZHVfbWluX3RyYWZmaWMgdGhyZXNob2xkLCB3ZSB3aWxsIGFsbG93CisJICogYW4gYW1wZHUgc3RyZWFtIHRvIGJlIHN0YXJ0ZWQuCisJICovCisJaWYgKGppZmZpZXMgLSB0eF9zdGF0cy0+c3RhcnRfdGltZSA+IEhaKSB7CisJCXR4X3N0YXRzLT5wa3RzID0gMDsKKwkJdHhfc3RhdHMtPnN0YXJ0X3RpbWUgPSAwOworCX0gZWxzZQorCQl0eF9zdGF0cy0+cGt0cysrOworfQorCiBzdGF0aWMgdm9pZAogbXdsOGtfdHhxX3htaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBpbmRleCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbzsKIAlzdHJ1Y3QgbXdsOGtfdmlmICptd2w4a192aWY7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqd2g7CiAJc3RydWN0IG13bDhrX3R4X3F1ZXVlICp0eHE7CiAJc3RydWN0IG13bDhrX3R4X2Rlc2MgKnR4OwpAQCAtMTU4NSw2ICsxODE5LDEyIEBACiAJdTMyIHR4c3RhdHVzOwogCXU4IHR4ZGF0YXJhdGU7CiAJdTE2IHFvczsKKwlpbnQgdHhwcmlvcml0eTsKKwl1OCB0aWQgPSAwOworCXN0cnVjdCBtd2w4a19hbXBkdV9zdHJlYW0gKnN0cmVhbSA9IE5VTEw7CisJYm9vbCBzdGFydF9iYV9zZXNzaW9uID0gZmFsc2U7CisJYm9vbCBtZ210ZnJhbWUgPSBmYWxzZTsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopc2tiLT5kYXRhOwogCiAJd2ggPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CiAJaWYgKGllZWU4MDIxMV9pc19kYXRhX3Fvcyh3aC0+ZnJhbWVfY29udHJvbCkpCkBAIC0xNTkyLDE0ICsxODMyLDE4IEBACiAJZWxzZQogCQlxb3MgPSAwOwogCisJaWYgKGllZWU4MDIxMV9pc19tZ210KHdoLT5mcmFtZV9jb250cm9sKSkKKwkJbWdtdGZyYW1lID0gdHJ1ZTsKKwogCWlmIChwcml2LT5hcF9mdykKLQkJbXdsOGtfZW5jYXBzdWxhdGVfdHhfZnJhbWUoc2tiKTsKKwkJbXdsOGtfZW5jYXBzdWxhdGVfdHhfZnJhbWUocHJpdiwgc2tiKTsKIAllbHNlCi0JCW13bDhrX2FkZF9kbWFfaGVhZGVyKHNrYiwgMCk7CisJCW13bDhrX2FkZF9kbWFfaGVhZGVyKHByaXYsIHNrYiwgMCwgMCk7CiAKIAl3aCA9ICYoKHN0cnVjdCBtd2w4a19kbWFfZGF0YSAqKXNrYi0+ZGF0YSktPndoOwogCiAJdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdGEgPSB0eF9pbmZvLT5jb250cm9sLnN0YTsKIAltd2w4a192aWYgPSBNV0w4S19WSUYodHhfaW5mby0+Y29udHJvbC52aWYpOwogCiAJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BU1NJR05fU0VRKSB7CkBAIC0xNjI3LDEyICsxODcxLDkxIEBACiAJCQlxb3MgfD0gTVdMOEtfUU9TX0FDS19QT0xJQ1lfTk9STUFMOwogCX0KIAorCS8qIFF1ZXVlIEFEREJBIHJlcXVlc3QgaW4gdGhlIHJlc3BlY3RpdmUgZGF0YSBxdWV1ZS4gIFdoaWxlIHNldHRpbmcgdXAKKwkgKiB0aGUgYW1wZHUgc3RyZWFtLCBtYWM4MDIxMSBxdWV1ZXMgZnVydGhlciBwYWNrZXRzIGZvciB0aGF0CisJICogcGFydGljdWxhciByYS90aWQgcGFpci4gIEhvd2V2ZXIsIHBhY2tldHMgcGlsZWQgdXAgaW4gdGhlIGhhcmR3YXJlCisJICogZm9yIHRoYXQgcmEvdGlkIHBhaXIgd2lsbCBzdGlsbCBnbyBvdXQuIEFEREJBIHJlcXVlc3QgYW5kIHRoZQorCSAqIHJlbGF0ZWQgZGF0YSBwYWNrZXRzIGdvaW5nIG91dCBmcm9tIGRpZmZlcmVudCBxdWV1ZXMgYXN5bmNocm9ub3VzbHkKKwkgKiB3aWxsIGNhdXNlIGEgc2hpZnQgaW4gdGhlIHJlY2VpdmVyIHdpbmRvdyB3aGljaCBtaWdodCByZXN1bHQgaW4KKwkgKiBhbXBkdSBwYWNrZXRzIGdldHRpbmcgZHJvcHBlZCBhdCB0aGUgcmVjZWl2ZXIgYWZ0ZXIgdGhlIHN0cmVhbSBoYXMKKwkgKiBiZWVuIHNldHVwLgorCSAqLworCWlmICh1bmxpa2VseShpZWVlODAyMTFfaXNfYWN0aW9uKHdoLT5mcmFtZV9jb250cm9sKSAmJgorCSAgICBtZ210LT51LmFjdGlvbi5jYXRlZ29yeSA9PSBXTEFOX0NBVEVHT1JZX0JBQ0sgJiYKKwkgICAgbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuYWN0aW9uX2NvZGUgPT0gV0xBTl9BQ1RJT05fQUREQkFfUkVRICYmCisJICAgIHByaXYtPmFwX2Z3KSkgeworCQl1MTYgY2FwYWIgPSBsZTE2X3RvX2NwdShtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5jYXBhYik7CisJCXRpZCA9IChjYXBhYiAmIElFRUU4MDIxMV9BRERCQV9QQVJBTV9USURfTUFTSykgPj4gMjsKKwkJaW5kZXggPSBtd2w4a190aWRfcXVldWVfbWFwcGluZyh0aWQpOworCX0KKworCXR4cHJpb3JpdHkgPSBpbmRleDsKKworCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3Mod2gtPmZyYW1lX2NvbnRyb2wpICYmCisJICAgIHNrYi0+cHJvdG9jb2wgIT0gY3B1X3RvX2JlMTYoRVRIX1BfUEFFKSAmJgorCSAgICBzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQgJiYgcHJpdi0+YXBfZncpIHsKKwkJdGlkID0gcW9zICYgMHhmOworCQltd2w4a190eF9jb3VudF9wYWNrZXQoc3RhLCB0aWQpOworCQlzcGluX2xvY2soJnByaXYtPnN0cmVhbV9sb2NrKTsKKwkJc3RyZWFtID0gbXdsOGtfbG9va3VwX3N0cmVhbShodywgc3RhLT5hZGRyLCB0aWQpOworCQlpZiAoc3RyZWFtICE9IE5VTEwpIHsKKwkJCWlmIChzdHJlYW0tPnN0YXRlID09IEFNUERVX1NUUkVBTV9BQ1RJVkUpIHsKKwkJCQl0eHByaW9yaXR5ID0gc3RyZWFtLT50eHFfaWR4OworCQkJCWluZGV4ID0gc3RyZWFtLT50eHFfaWR4OworCQkJfSBlbHNlIGlmIChzdHJlYW0tPnN0YXRlID09IEFNUERVX1NUUkVBTV9ORVcpIHsKKwkJCQkvKiBXZSBnZXQgaGVyZSBpZiB0aGUgZHJpdmVyIHNlbmRzIHVzIHBhY2tldHMKKwkJCQkgKiBhZnRlciB3ZSd2ZSBpbml0aWF0ZWQgYSBzdHJlYW0sIGJ1dCBiZWZvcmUKKwkJCQkgKiBvdXIgYW1wZHVfYWN0aW9uIHJvdXRpbmUgaGFzIGJlZW4gY2FsbGVkCisJCQkJICogd2l0aCBJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQgdG8gZ2V0IHRoZSBTU04KKwkJCQkgKiBmb3IgdGhlIEFEREJBIHJlcXVlc3QuICBTbyB0aGlzIHBhY2tldCBjYW4KKwkJCQkgKiBnbyBvdXQgd2l0aCBubyByaXNrIG9mIHNlcXVlbmNlIG51bWJlcgorCQkJCSAqIG1pc21hdGNoLiAgTm8gc3BlY2lhbCBoYW5kbGluZyBpcyByZXF1aXJlZC4KKwkJCQkgKi8KKwkJCX0gZWxzZSB7CisJCQkJLyogRHJvcCBwYWNrZXRzIHRoYXQgd291bGQgZ28gb3V0IGFmdGVyIHRoZQorCQkJCSAqIEFEREJBIHJlcXVlc3Qgd2FzIHNlbnQgYnV0IGJlZm9yZSB0aGUgQUREQkEKKwkJCQkgKiByZXNwb25zZSBpcyByZWNlaXZlZC4gIElmIHdlIGRvbid0IGRvIHRoaXMsCisJCQkJICogdGhlIHJlY2lwaWVudCB3b3VsZCBwcm9iYWJseSByZWNlaXZlIGl0CisJCQkJICogYWZ0ZXIgdGhlIEFEREJBIHJlcXVlc3Qgd2l0aCBTU04gMC4gIFRoaXMKKwkJCQkgKiB3aWxsIGNhdXNlIHRoZSByZWNpcGllbnQncyBCQSByZWNlaXZlIHdpbmRvdworCQkJCSAqIHRvIHNoaWZ0LCB3aGljaCB3b3VsZCBjYXVzZSB0aGUgc3Vic2VxdWVudAorCQkJCSAqIHBhY2tldHMgaW4gdGhlIEJBIHN0cmVhbSB0byBiZSBkaXNjYXJkZWQuCisJCQkJICogbWFjODAyMTEgcXVldWVzIG91ciBwYWNrZXRzIGZvciB1cyBpbiB0aGlzCisJCQkJICogY2FzZSwgc28gdGhpcyBpcyByZWFsbHkganVzdCBhIHNhZmV0eSBjaGVjay4KKwkJCQkgKi8KKwkJCQl3aXBoeV93YXJuKGh3LT53aXBoeSwKKwkJCQkJICAgIkNhbm5vdCBzZW5kIHBhY2tldCB3aGlsZSBBRERCQSAiCisJCQkJCSAgICJkaWFsb2cgaXMgdW5kZXJ3YXkuXG4iKTsKKwkJCQlzcGluX3VubG9jaygmcHJpdi0+c3RyZWFtX2xvY2spOworCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBEZWZlciBjYWxsaW5nIG13bDhrX3N0YXJ0X3N0cmVhbSBzbyB0aGF0IHRoZSBjdXJyZW50CisJCQkgKiBza2IgY2FuIGdvIG91dCBiZWZvcmUgdGhlIEFEREJBIHJlcXVlc3QuICBUaGlzCisJCQkgKiBwcmV2ZW50cyBzZXF1ZW5jZSBudW1iZXIgbWlzbWF0Y2ggYXQgdGhlIHJlY2VwaWVudAorCQkJICogYXMgZGVzY3JpYmVkIGFib3ZlLgorCQkJICovCisJCQlpZiAobXdsOGtfYW1wZHVfYWxsb3dlZChzdGEsIHRpZCkpIHsKKwkJCQlzdHJlYW0gPSBtd2w4a19hZGRfc3RyZWFtKGh3LCBzdGEsIHRpZCk7CisJCQkJaWYgKHN0cmVhbSAhPSBOVUxMKQorCQkJCQlzdGFydF9iYV9zZXNzaW9uID0gdHJ1ZTsKKwkJCX0KKwkJfQorCQlzcGluX3VubG9jaygmcHJpdi0+c3RyZWFtX2xvY2spOworCX0KKwogCWRtYSA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBkZXYsIHNrYi0+ZGF0YSwKIAkJCQlza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CiAKIAlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHByaXYtPnBkZXYsIGRtYSkpIHsKIAkJd2lwaHlfZGVidWcoaHctPndpcGh5LAogCQkJICAgICJmYWlsZWQgdG8gZG1hIG1hcCBza2IsIGRyb3BwaW5nIFRYIGZyYW1lLlxuIik7CisJCWlmIChzdGFydF9iYV9zZXNzaW9uKSB7CisJCQlzcGluX2xvY2soJnByaXYtPnN0cmVhbV9sb2NrKTsKKwkJCW13bDhrX3JlbW92ZV9zdHJlYW0oaHcsIHN0cmVhbSk7CisJCQlzcGluX3VubG9jaygmcHJpdi0+c3RyZWFtX2xvY2spOworCQl9CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuOwogCX0KQEAgLTE2NDEsMTIgKzE5NjQsMzQgQEAKIAogCXR4cSA9IHByaXYtPnR4cSArIGluZGV4OwogCisJLyogTWdtdCBmcmFtZXMgdGhhdCBnbyBvdXQgZnJlcXVlbnRseSBhcmUgcHJvYmUKKwkgKiByZXNwb25zZXMuIE90aGVyIG1nbXQgZnJhbWVzIGdvdCBvdXQgcmVsYXRpdmVseQorCSAqIGluZnJlcXVlbnRseS4gSGVuY2UgcmVzZXJ2ZSAyIGJ1ZmZlcnMgc28gdGhhdAorCSAqIG90aGVyIG1nbXQgZnJhbWVzIGRvIG5vdCBnZXQgZHJvcHBlZCBkdWUgdG8gYW4KKwkgKiBhbHJlYWR5IHF1ZXVlZCBwcm9iZSByZXNwb25zZSBpbiBvbmUgb2YgdGhlCisJICogcmVzZXJ2ZWQgYnVmZmVycy4KKwkgKi8KKworCWlmICh0eHEtPmxlbiA+PSBNV0w4S19UWF9ERVNDUyAtIDIpIHsKKwkJaWYgKG1nbXRmcmFtZSA9PSBmYWxzZSB8fAorCQkJdHhxLT5sZW4gPT0gTVdMOEtfVFhfREVTQ1MpIHsKKwkJCWlmIChzdGFydF9iYV9zZXNzaW9uKSB7CisJCQkJc3Bpbl9sb2NrKCZwcml2LT5zdHJlYW1fbG9jayk7CisJCQkJbXdsOGtfcmVtb3ZlX3N0cmVhbShodywgc3RyZWFtKTsKKwkJCQlzcGluX3VubG9jaygmcHJpdi0+c3RyZWFtX2xvY2spOworCQkJfQorCQkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJcmV0dXJuOworCQl9CisJfQorCiAJQlVHX09OKHR4cS0+c2tiW3R4cS0+dGFpbF0gIT0gTlVMTCk7CiAJdHhxLT5za2JbdHhxLT50YWlsXSA9IHNrYjsKIAogCXR4ID0gdHhxLT50eGQgKyB0eHEtPnRhaWw7CiAJdHgtPmRhdGFfcmF0ZSA9IHR4ZGF0YXJhdGU7Ci0JdHgtPnR4X3ByaW9yaXR5ID0gaW5kZXg7CisJdHgtPnR4X3ByaW9yaXR5ID0gdHhwcmlvcml0eTsKIAl0eC0+cW9zX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihxb3MpOwogCXR4LT5wa3RfcGh5c19hZGRyID0gY3B1X3RvX2xlMzIoZG1hKTsKIAl0eC0+cGt0X2xlbiA9IGNwdV90b19sZTE2KHNrYi0+bGVuKTsKQEAgLTE2NTUsNiArMjAwMCwxMSBAQAogCQl0eC0+cGVlcl9pZCA9IE1XTDhLX1NUQSh0eF9pbmZvLT5jb250cm9sLnN0YSktPnBlZXJfaWQ7CiAJZWxzZQogCQl0eC0+cGVlcl9pZCA9IDA7CisKKwlpZiAocHJpdi0+YXBfZncpCisJCXR4LT50aW1lc3RhbXAgPSBjcHVfdG9fbGUzMihpb3JlYWQzMihwcml2LT5yZWdzICsKKwkJCQkJCU1XTDhLX0hXX1RJTUVSX1JFR0lTVEVSKSk7CisKIAl3bWIoKTsKIAl0eC0+c3RhdHVzID0gY3B1X3RvX2xlMzIoTVdMOEtfVFhEX1NUQVRVU19GV19PV05FRCB8IHR4c3RhdHVzKTsKIApAQCAtMTY2NSwxMiArMjAxNSwxNyBAQAogCWlmICh0eHEtPnRhaWwgPT0gTVdMOEtfVFhfREVTQ1MpCiAJCXR4cS0+dGFpbCA9IDA7CiAKLQlpZiAodHhxLT5oZWFkID09IHR4cS0+dGFpbCkKLQkJaWVlZTgwMjExX3N0b3BfcXVldWUoaHcsIGluZGV4KTsKLQogCW13bDhrX3R4X3N0YXJ0KHByaXYpOwogCiAJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCisJLyogSW5pdGlhdGUgdGhlIGFtcGR1IHNlc3Npb24gaGVyZSAqLworCWlmIChzdGFydF9iYV9zZXNzaW9uKSB7CisJCXNwaW5fbG9jaygmcHJpdi0+c3RyZWFtX2xvY2spOworCQlpZiAobXdsOGtfc3RhcnRfc3RyZWFtKGh3LCBzdHJlYW0pKQorCQkJbXdsOGtfcmVtb3ZlX3N0cmVhbShodywgc3RyZWFtKTsKKwkJc3Bpbl91bmxvY2soJnByaXYtPnN0cmVhbV9sb2NrKTsKKwl9CiB9CiAKIApAQCAtMTg2OCw3ICsyMjIzLDcgQEAKIAlfX3U4IG1jc19iaXRtYXBbMTZdOwogCV9fbGUzMiByeF9xdWV1ZV9wdHI7CiAJX19sZTMyIG51bV90eF9xdWV1ZXM7Ci0JX19sZTMyIHR4X3F1ZXVlX3B0cnNbTVdMOEtfVFhfUVVFVUVTXTsKKwlfX2xlMzIgdHhfcXVldWVfcHRyc1tNV0w4S19UWF9XTU1fUVVFVUVTXTsKIAlfX2xlMzIgY2FwczI7CiAJX19sZTMyIG51bV90eF9kZXNjX3Blcl9xdWV1ZTsKIAlfX2xlMzIgdG90YWxfcnhkOwpAQCAtMTk3NCw4ICsyMzI5LDggQEAKIAltZW1zZXQoY21kLT5wZXJtX2FkZHIsIDB4ZmYsIHNpemVvZihjbWQtPnBlcm1fYWRkcikpOwogCWNtZC0+cHNfY29va2llID0gY3B1X3RvX2xlMzIocHJpdi0+Y29va2llX2RtYSk7CiAJY21kLT5yeF9xdWV1ZV9wdHIgPSBjcHVfdG9fbGUzMihwcml2LT5yeHFbMF0ucnhkX2RtYSk7Ci0JY21kLT5udW1fdHhfcXVldWVzID0gY3B1X3RvX2xlMzIoTVdMOEtfVFhfUVVFVUVTKTsKLQlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspCisJY21kLT5udW1fdHhfcXVldWVzID0gY3B1X3RvX2xlMzIobXdsOGtfdHhfcXVldWVzKHByaXYpKTsKKwlmb3IgKGkgPSAwOyBpIDwgbXdsOGtfdHhfcXVldWVzKHByaXYpOyBpKyspCiAJCWNtZC0+dHhfcXVldWVfcHRyc1tpXSA9IGNwdV90b19sZTMyKHByaXYtPnR4cVtpXS50eGRfZG1hKTsKIAljbWQtPm51bV90eF9kZXNjX3Blcl9xdWV1ZSA9IGNwdV90b19sZTMyKE1XTDhLX1RYX0RFU0NTKTsKIAljbWQtPnRvdGFsX3J4ZCA9IGNwdV90b19sZTMyKE1XTDhLX1JYX0RFU0NTKTsKQEAgLTIwMTcsMTMgKzIzNzIsMTYgQEAKIAlfX2xlMzIgd2NiYmFzZTI7CiAJX19sZTMyIHdjYmJhc2UzOwogCV9fbGUzMiBmd19hcGlfdmVyc2lvbjsKKwlfX2xlMzIgY2FwczsKKwlfX2xlMzIgbnVtX29mX2FtcGR1X3F1ZXVlczsKKwlfX2xlMzIgd2NiYmFzZV9hbXBkdVtNV0w4S19NQVhfQU1QRFVfUVVFVUVTXTsKIH0gX19wYWNrZWQ7CiAKIHN0YXRpYyBpbnQgbXdsOGtfY21kX2dldF9od19zcGVjX2FwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CiAJc3RydWN0IG13bDhrX2NtZF9nZXRfaHdfc3BlY19hcCAqY21kOwotCWludCByYzsKKwlpbnQgcmMsIGk7CiAJdTMyIGFwaV92ZXJzaW9uOwogCiAJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOwpAQCAtMjA1NSwyNyArMjQxMywzMSBAQAogCQlwcml2LT5udW1fbWNhZGRycyA9IGxlMTZfdG9fY3B1KGNtZC0+bnVtX21jYWRkcnMpOwogCQlwcml2LT5md19yZXYgPSBsZTMyX3RvX2NwdShjbWQtPmZ3X3Jldik7CiAJCXByaXYtPmh3X3JldiA9IGNtZC0+aHdfcmV2OwotCQltd2w4a19zZXR1cF8yZ2h6X2JhbmQoaHcpOworCQltd2w4a19zZXRfY2FwcyhodywgbGUzMl90b19jcHUoY21kLT5jYXBzKSk7CiAJCXByaXYtPmFwX21hY2lkc19zdXBwb3J0ZWQgPSAweDAwMDAwMGZmOwogCQlwcml2LT5zdGFfbWFjaWRzX3N1cHBvcnRlZCA9IDB4MDAwMDAwMDA7Ci0KLQkJb2ZmID0gbGUzMl90b19jcHUoY21kLT53Y2JiYXNlMCkgJiAweGZmZmY7Ci0JCWlvd3JpdGUzMihwcml2LT50eHFbMF0udHhkX2RtYSwgcHJpdi0+c3JhbSArIG9mZik7Ci0KKwkJcHJpdi0+bnVtX2FtcGR1X3F1ZXVlcyA9IGxlMzJfdG9fY3B1KGNtZC0+bnVtX29mX2FtcGR1X3F1ZXVlcyk7CisJCWlmIChwcml2LT5udW1fYW1wZHVfcXVldWVzID4gTVdMOEtfTUFYX0FNUERVX1FVRVVFUykgeworCQkJd2lwaHlfd2Fybihody0+d2lwaHksICJmdyByZXBvcnRlZCAlZCBhbXBkdSBxdWV1ZXMiCisJCQkJICAgIiBidXQgd2Ugb25seSBzdXBwb3J0ICVkLlxuIiwKKwkJCQkgICBwcml2LT5udW1fYW1wZHVfcXVldWVzLAorCQkJCSAgIE1XTDhLX01BWF9BTVBEVV9RVUVVRVMpOworCQkJcHJpdi0+bnVtX2FtcGR1X3F1ZXVlcyA9IE1XTDhLX01BWF9BTVBEVV9RVUVVRVM7CisJCX0KIAkJb2ZmID0gbGUzMl90b19jcHUoY21kLT5yeHdycHRyKSAmIDB4ZmZmZjsKIAkJaW93cml0ZTMyKHByaXYtPnJ4cVswXS5yeGRfZG1hLCBwcml2LT5zcmFtICsgb2ZmKTsKIAogCQlvZmYgPSBsZTMyX3RvX2NwdShjbWQtPnJ4cmRwdHIpICYgMHhmZmZmOwogCQlpb3dyaXRlMzIocHJpdi0+cnhxWzBdLnJ4ZF9kbWEsIHByaXYtPnNyYW0gKyBvZmYpOwogCi0JCW9mZiA9IGxlMzJfdG9fY3B1KGNtZC0+d2NiYmFzZTEpICYgMHhmZmZmOwotCQlpb3dyaXRlMzIocHJpdi0+dHhxWzFdLnR4ZF9kbWEsIHByaXYtPnNyYW0gKyBvZmYpOworCQlwcml2LT50eHFfb2Zmc2V0WzBdID0gbGUzMl90b19jcHUoY21kLT53Y2JiYXNlMCkgJiAweGZmZmY7CisJCXByaXYtPnR4cV9vZmZzZXRbMV0gPSBsZTMyX3RvX2NwdShjbWQtPndjYmJhc2UxKSAmIDB4ZmZmZjsKKwkJcHJpdi0+dHhxX29mZnNldFsyXSA9IGxlMzJfdG9fY3B1KGNtZC0+d2NiYmFzZTIpICYgMHhmZmZmOworCQlwcml2LT50eHFfb2Zmc2V0WzNdID0gbGUzMl90b19jcHUoY21kLT53Y2JiYXNlMykgJiAweGZmZmY7CiAKLQkJb2ZmID0gbGUzMl90b19jcHUoY21kLT53Y2JiYXNlMikgJiAweGZmZmY7Ci0JCWlvd3JpdGUzMihwcml2LT50eHFbMl0udHhkX2RtYSwgcHJpdi0+c3JhbSArIG9mZik7Ci0KLQkJb2ZmID0gbGUzMl90b19jcHUoY21kLT53Y2JiYXNlMykgJiAweGZmZmY7Ci0JCWlvd3JpdGUzMihwcml2LT50eHFbM10udHhkX2RtYSwgcHJpdi0+c3JhbSArIG9mZik7CisJCWZvciAoaSA9IDA7IGkgPCBwcml2LT5udW1fYW1wZHVfcXVldWVzOyBpKyspCisJCQlwcml2LT50eHFfb2Zmc2V0W2kgKyBNV0w4S19UWF9XTU1fUVVFVUVTXSA9CisJCQkJbGUzMl90b19jcHUoY21kLT53Y2JiYXNlX2FtcGR1W2ldKSAmIDB4ZmZmZjsKIAl9CiAKIGRvbmU6CkBAIC0yMDk4LDEyICsyNDYwLDIwIEBACiAJX19sZTMyIGNhcHM7CiAJX19sZTMyIHJ4X3F1ZXVlX3B0cjsKIAlfX2xlMzIgbnVtX3R4X3F1ZXVlczsKLQlfX2xlMzIgdHhfcXVldWVfcHRyc1tNV0w4S19UWF9RVUVVRVNdOworCV9fbGUzMiB0eF9xdWV1ZV9wdHJzW01XTDhLX01BWF9UWF9RVUVVRVNdOwogCV9fbGUzMiBmbGFnczsKIAlfX2xlMzIgbnVtX3R4X2Rlc2NfcGVyX3F1ZXVlOwogCV9fbGUzMiB0b3RhbF9yeGQ7CiB9IF9fcGFja2VkOwogCisvKiBJZiBlbmFibGVkLCBNV0w4S19TRVRfSFdfU1BFQ19GTEFHX0VOQUJMRV9MSUZFX1RJTUVfRVhQSVJZIHdpbGwgY2F1c2UKKyAqIHBhY2tldHMgdG8gZXhwaXJlIDUwMCBtcyBhZnRlciB0aGUgdGltZXN0YW1wIGluIHRoZSB0eCBkZXNjcmlwdG9yLiAgVGhhdCBpcywKKyAqIHRoZSBwYWNrZXRzIHRoYXQgYXJlIHF1ZXVlZCBmb3IgbW9yZSB0aGFuIDUwMG1zLCB3aWxsIGJlIGRyb3BwZWQgaW4gdGhlCisgKiBoYXJkd2FyZS4gVGhpcyBoZWxwcyBtaW5pbWl6aW5nIHRoZSBpc3N1ZXMgY2F1c2VkIGR1ZSB0byBoZWFkLW9mLWxpbmUKKyAqIGJsb2NraW5nIHdoZXJlIGEgc2xvdyBjbGllbnQgY2FuIGhvZyB0aGUgYmFuZHdpZHRoIGFuZCBhZmZlY3QgdHJhZmZpYyB0byBhCisgKiBmYXN0ZXIgY2xpZW50LgorICovCisjZGVmaW5lIE1XTDhLX1NFVF9IV19TUEVDX0ZMQUdfRU5BQkxFX0xJRkVfVElNRV9FWFBJUlkJMHgwMDAwMDQwMAogI2RlZmluZSBNV0w4S19TRVRfSFdfU1BFQ19GTEFHX0hPU1RfREVDUl9NR01UCQkweDAwMDAwMDgwCiAjZGVmaW5lIE1XTDhLX1NFVF9IV19TUEVDX0ZMQUdfSE9TVEZPUk1fUFJPQkVSRVNQCTB4MDAwMDAwMjAKICNkZWZpbmUgTVdMOEtfU0VUX0hXX1NQRUNfRkxBR19IT1NURk9STV9CRUFDT04JCTB4MDAwMDAwMTAKQEAgLTIxMjQsNyArMjQ5NCw3IEBACiAKIAljbWQtPnBzX2Nvb2tpZSA9IGNwdV90b19sZTMyKHByaXYtPmNvb2tpZV9kbWEpOwogCWNtZC0+cnhfcXVldWVfcHRyID0gY3B1X3RvX2xlMzIocHJpdi0+cnhxWzBdLnJ4ZF9kbWEpOwotCWNtZC0+bnVtX3R4X3F1ZXVlcyA9IGNwdV90b19sZTMyKE1XTDhLX1RYX1FVRVVFUyk7CisJY21kLT5udW1fdHhfcXVldWVzID0gY3B1X3RvX2xlMzIobXdsOGtfdHhfcXVldWVzKHByaXYpKTsKIAogCS8qCiAJICogTWFjODAyMTEgc3RhY2sgaGFzIFEwIGFzIGhpZ2hlc3QgcHJpb3JpdHkgYW5kIFEzIGFzIGxvd2VzdCBpbgpAQCAtMjEzMiwxNCArMjUwMiwxNSBAQAogCSAqIGluIHRoYXQgb3JkZXIuIE1hcCBRMyBvZiBtYWM4MDIxMSB0byBRMCBvZiBmaXJtd2FyZSBzbyB0aGF0IHRoZQogCSAqIHByaW9yaXR5IGlzIGludGVycHJldGVkIHRoZSByaWdodCB3YXkgaW4gZmlybXdhcmUuCiAJICovCi0JZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1FVRVVFUzsgaSsrKSB7Ci0JCWludCBqID0gTVdMOEtfVFhfUVVFVUVTIC0gMSAtIGk7CisJZm9yIChpID0gMDsgaSA8IG13bDhrX3R4X3F1ZXVlcyhwcml2KTsgaSsrKSB7CisJCWludCBqID0gbXdsOGtfdHhfcXVldWVzKHByaXYpIC0gMSAtIGk7CiAJCWNtZC0+dHhfcXVldWVfcHRyc1tpXSA9IGNwdV90b19sZTMyKHByaXYtPnR4cVtqXS50eGRfZG1hKTsKIAl9CiAKIAljbWQtPmZsYWdzID0gY3B1X3RvX2xlMzIoTVdMOEtfU0VUX0hXX1NQRUNfRkxBR19IT1NUX0RFQ1JfTUdNVCB8CiAJCQkJIE1XTDhLX1NFVF9IV19TUEVDX0ZMQUdfSE9TVEZPUk1fUFJPQkVSRVNQIHwKLQkJCQkgTVdMOEtfU0VUX0hXX1NQRUNfRkxBR19IT1NURk9STV9CRUFDT04pOworCQkJCSBNV0w4S19TRVRfSFdfU1BFQ19GTEFHX0hPU1RGT1JNX0JFQUNPTiB8CisJCQkJIE1XTDhLX1NFVF9IV19TUEVDX0ZMQUdfRU5BQkxFX0xJRkVfVElNRV9FWFBJUlkpOwogCWNtZC0+bnVtX3R4X2Rlc2NfcGVyX3F1ZXVlID0gY3B1X3RvX2xlMzIoTVdMOEtfVFhfREVTQ1MpOwogCWNtZC0+dG90YWxfcnhkID0gY3B1X3RvX2xlMzIoTVdMOEtfUlhfREVTQ1MpOwogCkBAIC0yMzU2LDcgKzI3MjcsNyBAQAogCV9fbGUxNiBidzsKIAlfX2xlMTYgc3ViX2NoOwogCV9fbGUxNiBwb3dlcl9sZXZlbF9saXN0W01XTDhLX1RYX1BPV0VSX0xFVkVMX1RPVEFMXTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdGF0aWMgaW50IG13bDhrX2NtZF90eF9wb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiwKQEAgLTMxMjMsNiArMzQ5NCw2NSBAQAogfQogCiAvKgorICogQ01EX0dFVF9XQVRDSERPR19CSVRNQVAuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfZ2V0X3dhdGNoZG9nX2JpdG1hcCB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCXU4CWJpdG1hcDsKK30gX19wYWNrZWQ7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kX2dldF93YXRjaGRvZ19iaXRtYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpiaXRtYXApCit7CisJc3RydWN0IG13bDhrX2NtZF9nZXRfd2F0Y2hkb2dfYml0bWFwICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX0dFVF9XQVRDSERPR19CSVRNQVApOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWlmICghcmMpCisJCSpiaXRtYXAgPSBjbWQtPmJpdG1hcDsKKworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKyNkZWZpbmUgSU5WQUxJRF9CQQkweEFBCitzdGF0aWMgdm9pZCBtd2w4a193YXRjaGRvZ19iYV9ldmVudHMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWludCByYzsKKwl1OCBiaXRtYXAgPSAwLCBzdHJlYW1faW5kZXg7CisJc3RydWN0IG13bDhrX2FtcGR1X3N0cmVhbSAqc3RyZWFtczsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbXdsOGtfcHJpdiwgd2F0Y2hkb2dfYmFfaGFuZGxlKTsKKworCXJjID0gbXdsOGtfY21kX2dldF93YXRjaGRvZ19iaXRtYXAocHJpdi0+aHcsICZiaXRtYXApOworCWlmIChyYykKKwkJcmV0dXJuOworCisJaWYgKGJpdG1hcCA9PSBJTlZBTElEX0JBKQorCQlyZXR1cm47CisKKwkvKiB0aGUgYml0bWFwIGlzIHRoZSBodyBxdWV1ZSBudW1iZXIuICBNYXAgaXQgdG8gdGhlIGFtcGR1IHF1ZXVlLiAqLworCXN0cmVhbV9pbmRleCA9IGJpdG1hcCAtIE1XTDhLX1RYX1dNTV9RVUVVRVM7CisKKwlCVUdfT04oc3RyZWFtX2luZGV4ID49IHByaXYtPm51bV9hbXBkdV9xdWV1ZXMpOworCisJc3RyZWFtcyA9ICZwcml2LT5hbXBkdVtzdHJlYW1faW5kZXhdOworCisJaWYgKHN0cmVhbXMtPnN0YXRlID09IEFNUERVX1NUUkVBTV9BQ1RJVkUpCisJCWllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RyZWFtcy0+c3RhLCBzdHJlYW1zLT50aWQpOworCisJcmV0dXJuOworfQorCisKKy8qCiAgKiBDTURfQlNTX1NUQVJULgogICovCiBzdHJ1Y3QgbXdsOGtfY21kX2Jzc19zdGFydCB7CkBAIC0zMTUxLDYgKzM1ODEsMTUyIEBACiB9CiAKIC8qCisgKiBDTURfQkFTVFJFQU0uCisgKi8KKworLyoKKyAqIFVQU1RSRUFNIGlzIHR4IGRpcmVjdGlvbgorICovCisjZGVmaW5lIEJBU1RSRUFNX0ZMQUdfRElSRUNUSU9OX1VQU1RSRUFNCTB4MDAKKyNkZWZpbmUgQkFTVFJFQU1fRkxBR19JTU1FRElBVEVfVFlQRQkJMHgwMQorCitlbnVtIGJhX3N0cmVhbV9hY3Rpb25fdHlwZSB7CisJTVdMOEtfQkFfQ1JFQVRFLAorCU1XTDhLX0JBX1VQREFURSwKKwlNV0w4S19CQV9ERVNUUk9ZLAorCU1XTDhLX0JBX0ZMVVNILAorCU1XTDhLX0JBX0NIRUNLLAorfTsKKworCitzdHJ1Y3QgbXdsOGtfY3JlYXRlX2JhX3N0cmVhbSB7CisJX19sZTMyCWZsYWdzOworCV9fbGUzMglpZGxlX3RocnM7CisJX19sZTMyCWJhcl90aHJzOworCV9fbGUzMgl3aW5kb3dfc2l6ZTsKKwl1OAlwZWVyX21hY19hZGRyWzZdOworCXU4CWRpYWxvZ190b2tlbjsKKwl1OAl0aWQ7CisJdTgJcXVldWVfaWQ7CisJdTgJcGFyYW1faW5mbzsKKwlfX2xlMzIJYmFfY29udGV4dDsKKwl1OAlyZXNldF9zZXFfbm9fZmxhZzsKKwlfX2xlMTYJY3Vycl9zZXFfbm87CisJdTgJc3RhX3NyY19tYWNfYWRkcls2XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtd2w4a19kZXN0cm95X2JhX3N0cmVhbSB7CisJX19sZTMyCWZsYWdzOworCV9fbGUzMgliYV9jb250ZXh0OworfSBfX3BhY2tlZDsKKworc3RydWN0IG13bDhrX2NtZF9iYXN0cmVhbSB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QJaGVhZGVyOworCV9fbGUzMglhY3Rpb247CisJdW5pb24geworCQlzdHJ1Y3QgbXdsOGtfY3JlYXRlX2JhX3N0cmVhbQljcmVhdGVfcGFyYW1zOworCQlzdHJ1Y3QgbXdsOGtfZGVzdHJveV9iYV9zdHJlYW0JZGVzdHJveV9wYXJhbXM7CisJfTsKK30gX19wYWNrZWQ7CisKK3N0YXRpYyBpbnQKK213bDhrX2NoZWNrX2JhKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgbXdsOGtfYW1wZHVfc3RyZWFtICpzdHJlYW0pCit7CisJc3RydWN0IG13bDhrX2NtZF9iYXN0cmVhbSAqY21kOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9CQVNUUkVBTSk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMzIoTVdMOEtfQkFfQ0hFQ0spOworCisJY21kLT5jcmVhdGVfcGFyYW1zLnF1ZXVlX2lkID0gc3RyZWFtLT5pZHg7CisJbWVtY3B5KCZjbWQtPmNyZWF0ZV9wYXJhbXMucGVlcl9tYWNfYWRkclswXSwgc3RyZWFtLT5zdGEtPmFkZHIsCisJICAgICAgIEVUSF9BTEVOKTsKKwljbWQtPmNyZWF0ZV9wYXJhbXMudGlkID0gc3RyZWFtLT50aWQ7CisKKwljbWQtPmNyZWF0ZV9wYXJhbXMuZmxhZ3MgPQorCQljcHVfdG9fbGUzMihCQVNUUkVBTV9GTEFHX0lNTUVESUFURV9UWVBFKSB8CisJCWNwdV90b19sZTMyKEJBU1RSRUFNX0ZMQUdfRElSRUNUSU9OX1VQU1RSRUFNKTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50Cittd2w4a19jcmVhdGVfYmEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBtd2w4a19hbXBkdV9zdHJlYW0gKnN0cmVhbSwKKwkJdTggYnVmX3NpemUpCit7CisJc3RydWN0IG13bDhrX2NtZF9iYXN0cmVhbSAqY21kOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX0JBU1RSRUFNKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUzMihNV0w4S19CQV9DUkVBVEUpOworCisJY21kLT5jcmVhdGVfcGFyYW1zLmJhcl90aHJzID0gY3B1X3RvX2xlMzIoKHUzMilidWZfc2l6ZSk7CisJY21kLT5jcmVhdGVfcGFyYW1zLndpbmRvd19zaXplID0gY3B1X3RvX2xlMzIoKHUzMilidWZfc2l6ZSk7CisJY21kLT5jcmVhdGVfcGFyYW1zLnF1ZXVlX2lkID0gc3RyZWFtLT5pZHg7CisKKwltZW1jcHkoY21kLT5jcmVhdGVfcGFyYW1zLnBlZXJfbWFjX2FkZHIsIHN0cmVhbS0+c3RhLT5hZGRyLCBFVEhfQUxFTik7CisJY21kLT5jcmVhdGVfcGFyYW1zLnRpZCA9IHN0cmVhbS0+dGlkOworCWNtZC0+Y3JlYXRlX3BhcmFtcy5jdXJyX3NlcV9ubyA9IGNwdV90b19sZTE2KDApOworCWNtZC0+Y3JlYXRlX3BhcmFtcy5yZXNldF9zZXFfbm9fZmxhZyA9IDE7CisKKwljbWQtPmNyZWF0ZV9wYXJhbXMucGFyYW1faW5mbyA9CisJCShzdHJlYW0tPnN0YS0+aHRfY2FwLmFtcGR1X2ZhY3RvciAmCisJCSBJRUVFODAyMTFfSFRfQU1QRFVfUEFSTV9GQUNUT1IpIHwKKwkJKChzdHJlYW0tPnN0YS0+aHRfY2FwLmFtcGR1X2RlbnNpdHkgPDwgMikgJgorCQkgSUVFRTgwMjExX0hUX0FNUERVX1BBUk1fREVOU0lUWSk7CisKKwljbWQtPmNyZWF0ZV9wYXJhbXMuZmxhZ3MgPQorCQljcHVfdG9fbGUzMihCQVNUUkVBTV9GTEFHX0lNTUVESUFURV9UWVBFIHwKKwkJCQkJQkFTVFJFQU1fRkxBR19ESVJFQ1RJT05fVVBTVFJFQU0pOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKworCXdpcGh5X2RlYnVnKGh3LT53aXBoeSwgIkNyZWF0ZWQgYSBCQSBzdHJlYW0gZm9yICVwTSA6IHRpZCAlZFxuIiwKKwkJc3RyZWFtLT5zdGEtPmFkZHIsIHN0cmVhbS0+dGlkKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBtd2w4a19kZXN0cm95X2JhKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICBzdHJ1Y3QgbXdsOGtfYW1wZHVfc3RyZWFtICpzdHJlYW0pCit7CisJc3RydWN0IG13bDhrX2NtZF9iYXN0cmVhbSAqY21kOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9CQVNUUkVBTSk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTMyKE1XTDhLX0JBX0RFU1RST1kpOworCisJY21kLT5kZXN0cm95X3BhcmFtcy5iYV9jb250ZXh0ID0gY3B1X3RvX2xlMzIoc3RyZWFtLT5pZHgpOworCW13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCisJd2lwaHlfZGVidWcoaHctPndpcGh5LCAiRGVsZXRlZCBCQSBzdHJlYW0gaW5kZXggJWRcbiIsIHN0cmVhbS0+aWR4KTsKKworCWtmcmVlKGNtZCk7Cit9CisKKy8qCiAgKiBDTURfU0VUX05FV19TVE4uCiAgKi8KIHN0cnVjdCBtd2w4a19jbWRfc2V0X25ld19zdG4gewpAQCAtMzI3NCw3ICszODUwLDcgQEAKIAlfX3U4IG1hY19hZGRyWzZdOwogCV9fdTggZW5jcl90eXBlOwogCi19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfSBfX3BhY2tlZDsKIAogc3RydWN0IG13bDhrX2NtZF9zZXRfa2V5IHsKIAlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CkBAIC0zMjk0LDcgKzM4NzAsNyBAQAogCV9fbGUxNiB0a2lwX3RzY19sb3c7CiAJX19sZTMyIHRraXBfdHNjX2hpZ2g7CiAJX191OCBtYWNfYWRkcls2XTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBlbnVtIHsKIAlNV0w4S19FTkNSX0VOQUJMRSwKQEAgLTM0MjIsNyArMzk5OCw3IEBACiAJCQltd2w4a192aWYtPndlcF9rZXlfY29uZltpZHhdLmVuYWJsZWQgPSAxOwogCQl9CiAKLQkJa2V5bWxlbiA9IDA7CisJCWtleW1sZW4gPSBrZXktPmtleWxlbjsKIAkJYWN0aW9uID0gTVdMOEtfRU5DUl9TRVRfS0VZOwogCQlicmVhazsKIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVA6CkBAIC0zNDk2LDcgKzQwNzIsNiBAQAogCQlhZGRyID0gc3RhLT5hZGRyOwogCiAJaWYgKGNtZF9wYXJhbSA9PSBTRVRfS0VZKSB7Ci0JCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWOwogCQlyYyA9IG13bDhrX2NtZF9lbmNyeXB0aW9uX3NldF9rZXkoaHcsIHZpZiwgYWRkciwga2V5KTsKIAkJaWYgKHJjKQogCQkJZ290byBvdXQ7CkBAIC0zNjcxLDYgKzQyNDYsMTEgQEAKIAkJdGFza2xldF9zY2hlZHVsZSgmcHJpdi0+cG9sbF9yeF90YXNrKTsKIAl9CiAKKwlpZiAoc3RhdHVzICYgTVdMOEtfQTJIX0lOVF9CQV9XQVRDSERPRykgeworCQlzdGF0dXMgJj0gfk1XTDhLX0EySF9JTlRfQkFfV0FUQ0hET0c7CisJCWllZWU4MDIxMV9xdWV1ZV93b3JrKGh3LCAmcHJpdi0+d2F0Y2hkb2dfYmFfaGFuZGxlKTsKKwl9CisKIAlpZiAoc3RhdHVzKQogCQlpb3dyaXRlMzIofnN0YXR1cywgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVUyk7CiAKQEAgLTM2OTksNyArNDI3OSw3IEBACiAKIAlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOwogCi0JZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1FVRVVFUzsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBtd2w4a190eF9xdWV1ZXMocHJpdik7IGkrKykKIAkJbGltaXQgLT0gbXdsOGtfdHhxX3JlY2xhaW0oaHcsIGksIGxpbWl0LCAwKTsKIAogCWlmICghcHJpdi0+cGVuZGluZ190eF9wa3RzICYmIHByaXYtPnR4X3dhaXQgIT0gTlVMTCkgewpAQCAtMzc3NCw2ICs0MzU0LDggQEAKIAogCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCiAJaW93cml0ZTMyKE1XTDhLX0EySF9FVkVOVFMsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKKwlpb3dyaXRlMzIoTVdMOEtfQTJIX0VWRU5UUywKKwkJICBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTX01BU0spOwogCiAJcmMgPSBtd2w4a19md19sb2NrKGh3KTsKIAlpZiAoIXJjKSB7CkBAIC0zODI5LDYgKzQ0MTEsNyBAQAogCiAJLyogU3RvcCBmaW5hbGl6ZSBqb2luIHdvcmtlciAqLwogCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPmZpbmFsaXplX2pvaW5fd29ya2VyKTsKKwljYW5jZWxfd29ya19zeW5jKCZwcml2LT53YXRjaGRvZ19iYV9oYW5kbGUpOwogCWlmIChwcml2LT5iZWFjb25fc2tiICE9IE5VTEwpCiAJCWRldl9rZnJlZV9za2IocHJpdi0+YmVhY29uX3NrYik7CiAKQEAgLTM4MzcsNyArNDQyMCw3IEBACiAJdGFza2xldF9kaXNhYmxlKCZwcml2LT5wb2xsX3J4X3Rhc2spOwogCiAJLyogUmV0dXJuIGFsbCBza2JzIHRvIG1hYzgwMjExICovCi0JZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1FVRVVFUzsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBtd2w4a190eF9xdWV1ZXMocHJpdik7IGkrKykKIAkJbXdsOGtfdHhxX3JlY2xhaW0oaHcsIGksIElOVF9NQVgsIDEpOwogfQogCkBAIC0zOTU4LDkgKzQ1NDEsMTIgQEAKIAkJY29uZi0+cG93ZXJfbGV2ZWwgPSAxODsKIAogCWlmIChwcml2LT5hcF9mdykgewotCQlyYyA9IG13bDhrX2NtZF90eF9wb3dlcihodywgY29uZiwgY29uZi0+cG93ZXJfbGV2ZWwpOwotCQlpZiAocmMpCi0JCQlnb3RvIG91dDsKKworCQlpZiAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUE9XRVIpIHsKKwkJCXJjID0gbXdsOGtfY21kX3R4X3Bvd2VyKGh3LCBjb25mLCBjb25mLT5wb3dlcl9sZXZlbCk7CisJCQlpZiAocmMpCisJCQkJZ290byBvdXQ7CisJCX0KIAogCQlyYyA9IG13bDhrX2NtZF9yZl9hbnRlbm5hKGh3LCBNV0w4S19SRl9BTlRFTk5BX1JYLCAweDMpOwogCQlpZiAocmMpCkBAIC0zOTg3LDcgKzQ1NzMsNyBAQAogCQkJICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywgdTMyIGNoYW5nZWQpCiB7CiAJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQl1MzIgYXBfbGVnYWN5X3JhdGVzOworCXUzMiBhcF9sZWdhY3lfcmF0ZXMgPSAwOwogCXU4IGFwX21jc19yYXRlc1sxNl07CiAJaW50IHJjOwogCkBAIC00MzEyLDYgKzQ4OTgsOCBAQAogCQlyZXQgPSBtd2w4a19jbWRfdXBkYXRlX3N0YWRiX2FkZChodywgdmlmLCBzdGEpOwogCQlpZiAocmV0ID49IDApIHsKIAkJCU1XTDhLX1NUQShzdGEpLT5wZWVyX2lkID0gcmV0OworCQkJaWYgKHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkKKwkJCQlNV0w4S19TVEEoc3RhKS0+aXNfYW1wZHVfYWxsb3dlZCA9IHRydWU7CiAJCQlyZXQgPSAwOwogCQl9CiAKQEAgLTQzMzUsMTQgKzQ5MjMsMTQgQEAKIAogCXJjID0gbXdsOGtfZndfbG9jayhodyk7CiAJaWYgKCFyYykgewotCQlCVUdfT04ocXVldWUgPiBNV0w4S19UWF9RVUVVRVMgLSAxKTsKKwkJQlVHX09OKHF1ZXVlID4gTVdMOEtfVFhfV01NX1FVRVVFUyAtIDEpOwogCQltZW1jcHkoJnByaXYtPndtbV9wYXJhbXNbcXVldWVdLCBwYXJhbXMsIHNpemVvZigqcGFyYW1zKSk7CiAKIAkJaWYgKCFwcml2LT53bW1fZW5hYmxlZCkKIAkJCXJjID0gbXdsOGtfY21kX3NldF93bW1fbW9kZShodywgMSk7CiAKIAkJaWYgKCFyYykgewotCQkJaW50IHEgPSBNV0w4S19UWF9RVUVVRVMgLSAxIC0gcXVldWU7CisJCQlpbnQgcSA9IE1XTDhLX1RYX1dNTV9RVUVVRVMgLSAxIC0gcXVldWU7CiAJCQlyYyA9IG13bDhrX2NtZF9zZXRfZWRjYV9wYXJhbXMoaHcsIHEsCiAJCQkJCQkgICAgICAgcGFyYW1zLT5jd19taW4sCiAJCQkJCQkgICAgICAgcGFyYW1zLT5jd19tYXgsCkBAIC00Mzc4LDIxICs0OTY2LDExOCBAQAogCXJldHVybiAwOwogfQogCisjZGVmaW5lIE1BWF9BTVBEVV9BVFRFTVBUUyA1CisKIHN0YXRpYyBpbnQKIG13bDhrX2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJICAgZW51bSBpZWVlODAyMTFfYW1wZHVfbWxtZV9hY3Rpb24gYWN0aW9uLAogCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkLCB1MTYgKnNzbiwKIAkJICAgdTggYnVmX3NpemUpCiB7CisKKwlpbnQgaSwgcmMgPSAwOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX2FtcGR1X3N0cmVhbSAqc3RyZWFtOworCXU4ICphZGRyID0gc3RhLT5hZGRyOworCisJaWYgKCEoaHctPmZsYWdzICYgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OKSkKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKworCXNwaW5fbG9jaygmcHJpdi0+c3RyZWFtX2xvY2spOworCXN0cmVhbSA9IG13bDhrX2xvb2t1cF9zdHJlYW0oaHcsIGFkZHIsIHRpZCk7CisKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUQVJUOgogCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUT1A6Ci0JCWlmICghKGh3LT5mbGFncyAmIElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTikpCi0JCQlyZXR1cm4gLUVOT1RTVVBQOwotCQlyZXR1cm4gMDsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQ6CisJCS8qIEJ5IHRoZSB0aW1lIHdlIGdldCBoZXJlIHRoZSBodyBxdWV1ZXMgbWF5IGNvbnRhaW4gb3V0Z29pbmcKKwkJICogcGFja2V0cyBmb3IgdGhpcyBSQS9USUQgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhpcyBCQQorCQkgKiBzZXNzaW9uLiAgVGhlIGh3IHdpbGwgYXNzaWduIHNlcXVlbmNlIG51bWJlcnMgdG8gdGhlc2UKKwkJICogcGFja2V0cyBhcyB0aGV5IGdvIG91dC4gIFNvIGlmIHdlIHF1ZXJ5IHRoZSBodyBmb3IgaXRzIG5leHQKKwkJICogc2VxdWVuY2UgbnVtYmVyIGFuZCB1c2UgdGhhdCBmb3IgdGhlIFNTTiBoZXJlLCBpdCBtYXkgZW5kIHVwCisJCSAqIGJlaW5nIHdyb25nLCB3aGljaCB3aWxsIGxlYWQgdG8gc2VxdWVuY2UgbnVtYmVyIG1pc21hdGNoIGF0CisJCSAqIHRoZSByZWNpcGllbnQuICBUbyBhdm9pZCB0aGlzLCB3ZSByZXNldCB0aGUgc2VxdWVuY2UgbnVtYmVyCisJCSAqIHRvIE8gZm9yIHRoZSBmaXJzdCBNUERVIGluIHRoaXMgQkEgc3RyZWFtLgorCQkgKi8KKwkJKnNzbiA9IDA7CisJCWlmIChzdHJlYW0gPT0gTlVMTCkgeworCQkJLyogVGhpcyBtZWFucyB0aGF0IHNvbWVib2R5IG91dHNpZGUgdGhpcyBkcml2ZXIgY2FsbGVkCisJCQkgKiBpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbi4gIFRoaXMgaXMgdW5leHBlY3RlZAorCQkJICogYmVjYXVzZSB3ZSBkbyBvdXIgb3duIHJhdGUgY29udHJvbC4gIEp1c3Qgd2FybiBhbmQKKwkJCSAqIG1vdmUgb24uCisJCQkgKi8KKwkJCXdpcGh5X3dhcm4oaHctPndpcGh5LCAiVW5leHBlY3RlZCBjYWxsIHRvICVzLiAgIgorCQkJCSAgICJQcm9jZWVkaW5nIGFueXdheS5cbiIsIF9fZnVuY19fKTsKKwkJCXN0cmVhbSA9IG13bDhrX2FkZF9zdHJlYW0oaHcsIHN0YSwgdGlkKTsKKwkJfQorCQlpZiAoc3RyZWFtID09IE5VTEwpIHsKKwkJCXdpcGh5X2RlYnVnKGh3LT53aXBoeSwgIm5vIGZyZWUgQU1QRFUgc3RyZWFtc1xuIik7CisJCQlyYyA9IC1FQlVTWTsKKwkJCWJyZWFrOworCQl9CisJCXN0cmVhbS0+c3RhdGUgPSBBTVBEVV9TVFJFQU1fSU5fUFJPR1JFU1M7CisKKwkJLyogUmVsZWFzZSB0aGUgbG9jayBiZWZvcmUgd2UgZG8gdGhlIHRpbWUgY29uc3VtaW5nIHN0dWZmICovCisJCXNwaW5fdW5sb2NrKCZwcml2LT5zdHJlYW1fbG9jayk7CisJCWZvciAoaSA9IDA7IGkgPCBNQVhfQU1QRFVfQVRURU1QVFM7IGkrKykgeworCQkJcmMgPSBtd2w4a19jaGVja19iYShodywgc3RyZWFtKTsKKworCQkJaWYgKCFyYykKKwkJCQlicmVhazsKKwkJCS8qCisJCQkgKiBIVyBxdWV1ZXMgdGFrZSB0aW1lIHRvIGJlIGZsdXNoZWQsIGdpdmUgdGhlbQorCQkJICogc3VmZmljaWVudCB0aW1lCisJCQkgKi8KKworCQkJbXNsZWVwKDEwMDApOworCQl9CisJCXNwaW5fbG9jaygmcHJpdi0+c3RyZWFtX2xvY2spOworCQlpZiAocmMpIHsKKwkJCXdpcGh5X2Vycihody0+d2lwaHksICJTdHJlYW0gZm9yIHRpZCAlZCBidXN5IGFmdGVyICVkIgorCQkJCSIgYXR0ZW1wdHNcbiIsIHRpZCwgTUFYX0FNUERVX0FUVEVNUFRTKTsKKwkJCW13bDhrX3JlbW92ZV9zdHJlYW0oaHcsIHN0cmVhbSk7CisJCQlyYyA9IC1FQlVTWTsKKwkJCWJyZWFrOworCQl9CisJCWllZWU4MDIxMV9zdGFydF90eF9iYV9jYl9pcnFzYWZlKHZpZiwgYWRkciwgdGlkKTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfU1RPUDoKKwkJaWYgKHN0cmVhbSA9PSBOVUxMKQorCQkJYnJlYWs7CisJCWlmIChzdHJlYW0tPnN0YXRlID09IEFNUERVX1NUUkVBTV9BQ1RJVkUpIHsKKwkJCXNwaW5fdW5sb2NrKCZwcml2LT5zdHJlYW1fbG9jayk7CisJCQltd2w4a19kZXN0cm95X2JhKGh3LCBzdHJlYW0pOworCQkJc3Bpbl9sb2NrKCZwcml2LT5zdHJlYW1fbG9jayk7CisJCX0KKwkJbXdsOGtfcmVtb3ZlX3N0cmVhbShodywgc3RyZWFtKTsKKwkJaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZSh2aWYsIGFkZHIsIHRpZCk7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX09QRVJBVElPTkFMOgorCQlCVUdfT04oc3RyZWFtID09IE5VTEwpOworCQlCVUdfT04oc3RyZWFtLT5zdGF0ZSAhPSBBTVBEVV9TVFJFQU1fSU5fUFJPR1JFU1MpOworCQlzcGluX3VubG9jaygmcHJpdi0+c3RyZWFtX2xvY2spOworCQlyYyA9IG13bDhrX2NyZWF0ZV9iYShodywgc3RyZWFtLCBidWZfc2l6ZSk7CisJCXNwaW5fbG9jaygmcHJpdi0+c3RyZWFtX2xvY2spOworCQlpZiAoIXJjKQorCQkJc3RyZWFtLT5zdGF0ZSA9IEFNUERVX1NUUkVBTV9BQ1RJVkU7CisJCWVsc2UgeworCQkJc3Bpbl91bmxvY2soJnByaXYtPnN0cmVhbV9sb2NrKTsKKwkJCW13bDhrX2Rlc3Ryb3lfYmEoaHcsIHN0cmVhbSk7CisJCQlzcGluX2xvY2soJnByaXYtPnN0cmVhbV9sb2NrKTsKKwkJCXdpcGh5X2RlYnVnKGh3LT53aXBoeSwKKwkJCQkiRmFpbGVkIGFkZGluZyBzdHJlYW0gZm9yIHN0YSAlcE0gdGlkICVkXG4iLAorCQkJCWFkZHIsIHRpZCk7CisJCQltd2w4a19yZW1vdmVfc3RyZWFtKGh3LCBzdHJlYW0pOworCQl9CisJCWJyZWFrOworCiAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9UU1VQUDsKKwkJcmMgPSAtRU5PVFNVUFA7CiAJfQorCisJc3Bpbl91bmxvY2soJnByaXYtPnN0cmVhbV9sb2NrKTsKKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBtd2w4a19vcHMgPSB7CkBAIC00NDQxLDcgKzUxMjYsNyBAQAogCU1XTDgzNjYsCiB9OwogCi0jZGVmaW5lIE1XTDhLXzgzNjZfQVBfRldfQVBJIDEKKyNkZWZpbmUgTVdMOEtfODM2Nl9BUF9GV19BUEkgMgogI2RlZmluZSBfTVdMOEtfODM2Nl9BUF9GVyhhcGkpICJtd2w4ay9mbWltYWdlXzgzNjZfYXAtIiAjYXBpICIuZnciCiAjZGVmaW5lIE1XTDhLXzgzNjZfQVBfRlcoYXBpKSBfTVdMOEtfODM2Nl9BUF9GVyhhcGkpCiAKQEAgLTQ2MDcsNiArNTI5MiwyMyBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGludCBtd2w4a19pbml0X3R4cXMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgcmMgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG13bDhrX3R4X3F1ZXVlcyhwcml2KTsgaSsrKSB7CisJCXJjID0gbXdsOGtfdHhxX2luaXQoaHcsIGkpOworCQlpZiAocmMpCisJCQlicmVhazsKKwkJaWYgKHByaXYtPmFwX2Z3KQorCQkJaW93cml0ZTMyKHByaXYtPnR4cVtpXS50eGRfZG1hLAorCQkJCSAgcHJpdi0+c3JhbSArIHByaXYtPnR4cV9vZmZzZXRbaV0pOworCX0KKwlyZXR1cm4gcmM7Cit9CisKIC8qIGluaXRpYWxpemUgaHcgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IGxvYWRpbmcgYSBmaXJtd2FyZSBpbWFnZSAqLwogc3RhdGljIGludCBtd2w4a19wcm9iZV9odyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKQEAgLTQ2MzQsMTcgKzUzMzYsMjYgQEAKIAkJZ290byBlcnJfc3RvcF9maXJtd2FyZTsKIAlyeHFfcmVmaWxsKGh3LCAwLCBJTlRfTUFYKTsKIAotCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykgewotCQlyYyA9IG13bDhrX3R4cV9pbml0KGh3LCBpKTsKKwkvKiBGb3IgdGhlIHN0YSBmaXJtd2FyZSwgd2UgbmVlZCB0byBrbm93IHRoZSBkbWEgYWRkcmVzc2VzIG9mIHR4IHF1ZXVlcworCSAqIGJlZm9yZSBzZW5kaW5nIE1XTDhLX0NNRF9HRVRfSFdfU1BFQy4gIFNvIHdlIG11c3QgaW5pdGlhbGl6ZSB0aGVtCisJICogcHJpb3IgdG8gaXNzdWluZyB0aGlzIGNvbW1hbmQuICBCdXQgZm9yIHRoZSBBUCBjYXNlLCB3ZSBsZWFybiB0aGUKKwkgKiB0b3RhbCBudW1iZXIgb2YgcXVldWVzIGZyb20gdGhlIHJlc3VsdCBDTURfR0VUX0hXX1NQRUMsIHNvIGZvciB0aGlzCisJICogY2FzZSB3ZSBtdXN0IGluaXRpYWxpemUgdGhlIHR4IHF1ZXVlcyBhZnRlci4KKwkgKi8KKwlwcml2LT5udW1fYW1wZHVfcXVldWVzID0gMDsKKwlpZiAoIXByaXYtPmFwX2Z3KSB7CisJCXJjID0gbXdsOGtfaW5pdF90eHFzKGh3KTsKIAkJaWYgKHJjKQogCQkJZ290byBlcnJfZnJlZV9xdWV1ZXM7CiAJfQogCiAJaW93cml0ZTMyKDAsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVMpOwogCWlvd3JpdGUzMigwLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7Ci0JaW93cml0ZTMyKE1XTDhLX0EySF9JTlRfVFhfRE9ORSB8IE1XTDhLX0EySF9JTlRfUlhfUkVBRFksCisJaW93cml0ZTMyKE1XTDhLX0EySF9JTlRfVFhfRE9ORXxNV0w4S19BMkhfSU5UX1JYX1JFQURZfAorCQkgIE1XTDhLX0EySF9JTlRfQkFfV0FUQ0hET0csCiAJCSAgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX0NMRUFSX1NFTCk7Ci0JaW93cml0ZTMyKDB4ZmZmZmZmZmYsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVNfTUFTSyk7CisJaW93cml0ZTMyKE1XTDhLX0EySF9JTlRfT1BDX0RPTkUsCisJCSAgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVU19NQVNLKTsKIAogCXJjID0gcmVxdWVzdF9pcnEocHJpdi0+cGRldi0+aXJxLCBtd2w4a19pbnRlcnJ1cHQsCiAJCQkgSVJRRl9TSEFSRUQsIE1XTDhLX05BTUUsIGh3KTsKQEAgLTQ2NTMsNiArNTM2NCw4IEBACiAJCWdvdG8gZXJyX2ZyZWVfcXVldWVzOwogCX0KIAorCW1lbXNldChwcml2LT5hbXBkdSwgMCwgc2l6ZW9mKHByaXYtPmFtcGR1KSk7CisKIAkvKgogCSAqIFRlbXBvcmFyaWx5IGVuYWJsZSBpbnRlcnJ1cHRzLiAgSW5pdGlhbCBmaXJtd2FyZSBob3N0CiAJICogY29tbWFuZHMgdXNlIGludGVycnVwdHMgYW5kIGF2b2lkIHBvbGxpbmcuICBEaXNhYmxlCkBAIC00NjY0LDYgKzUzNzcsOCBAQAogCWlmIChwcml2LT5hcF9mdykgewogCQlyYyA9IG13bDhrX2NtZF9nZXRfaHdfc3BlY19hcChodyk7CiAJCWlmICghcmMpCisJCQlyYyA9IG13bDhrX2luaXRfdHhxcyhodyk7CisJCWlmICghcmMpCiAJCQlyYyA9IG13bDhrX2NtZF9zZXRfaHdfc3BlYyhodyk7CiAJfSBlbHNlIHsKIAkJcmMgPSBtd2w4a19jbWRfZ2V0X2h3X3NwZWNfc3RhKGh3KTsKQEAgLTQ3MDUsNyArNTQyMCw3IEBACiAJZnJlZV9pcnEocHJpdi0+cGRldi0+aXJxLCBodyk7CiAKIGVycl9mcmVlX3F1ZXVlczoKLQlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspCisJZm9yIChpID0gMDsgaSA8IG13bDhrX3R4X3F1ZXVlcyhwcml2KTsgaSsrKQogCQltd2w4a190eHFfZGVpbml0KGh3LCBpKTsKIAltd2w4a19yeHFfZGVpbml0KGh3LCAwKTsKIApAQCAtNDcyNyw3ICs1NDQyLDcgQEAKIAltd2w4a19zdG9wKGh3KTsKIAltd2w4a19yeHFfZGVpbml0KGh3LCAwKTsKIAotCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgbXdsOGtfdHhfcXVldWVzKHByaXYpOyBpKyspCiAJCW13bDhrX3R4cV9kZWluaXQoaHcsIGkpOwogCiAJcmMgPSBtd2w4a19pbml0X2Zpcm13YXJlKGh3LCBmd19pbWFnZSwgZmFsc2UpOwpAQCAtNDc0Niw3ICs1NDYxLDcgQEAKIAlpZiAocmMpCiAJCWdvdG8gZmFpbDsKIAotCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9XTU1fUVVFVUVTOyBpKyspIHsKIAkJcmMgPSBtd2w4a19jb25mX3R4KGh3LCBpLCAmcHJpdi0+d21tX3BhcmFtc1tpXSk7CiAJCWlmIChyYykKIAkJCWdvdG8gZmFpbDsKQEAgLTQ3NzgsOSArNTQ5MywxMSBAQAogCWh3LT5leHRyYV90eF9oZWFkcm9vbSA9CiAJCXNpemVvZihzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEpIC0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY3RzKTsKIAorCWh3LT5leHRyYV90eF9oZWFkcm9vbSAtPSBwcml2LT5hcF9mdyA/IFJFRFVDRURfVFhfSEVBRFJPT00gOiAwOworCiAJaHctPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSAxMDsKIAotCWh3LT5xdWV1ZXMgPSBNV0w4S19UWF9RVUVVRVM7CisJaHctPnF1ZXVlcyA9IE1XTDhLX1RYX1dNTV9RVUVVRVM7CiAKIAkvKiBTZXQgcnNzaSB2YWx1ZXMgdG8gZEJtICovCiAJaHctPmZsYWdzIHw9IElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwgSUVFRTgwMjExX0hXX0hBU19SQVRFX0NPTlRST0w7CkBAIC00Nzk2LDYgKzU1MTMsOCBAQAogCiAJLyogRmluYWxpemUgam9pbiB3b3JrZXIgKi8KIAlJTklUX1dPUksoJnByaXYtPmZpbmFsaXplX2pvaW5fd29ya2VyLCBtd2w4a19maW5hbGl6ZV9qb2luX3dvcmtlcik7CisJLyogSGFuZGxlIHdhdGNoZG9nIGJhIGV2ZW50cyAqLworCUlOSVRfV09SSygmcHJpdi0+d2F0Y2hkb2dfYmFfaGFuZGxlLCBtd2w4a193YXRjaGRvZ19iYV9ldmVudHMpOwogCiAJLyogVFggcmVjbGFpbSBhbmQgUlggdGFza2xldHMuICAqLwogCXRhc2tsZXRfaW5pdCgmcHJpdi0+cG9sbF90eF90YXNrLCBtd2w4a190eF9wb2xsLCAodW5zaWduZWQgbG9uZylodyk7CkBAIC00ODE1LDYgKzU1MzQsOCBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnR4X2xvY2spOwogCisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnN0cmVhbV9sb2NrKTsKKwogCXByaXYtPnR4X3dhaXQgPSBOVUxMOwogCiAJcmMgPSBtd2w4a19wcm9iZV9odyhodyk7CkBAIC00ODM2LDcgKzU1NTcsNyBAQAogCXJldHVybiAwOwogCiBlcnJfdW5wcm9iZV9odzoKLQlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspCisJZm9yIChpID0gMDsgaSA8IG13bDhrX3R4X3F1ZXVlcyhwcml2KTsgaSsrKQogCQltd2w4a190eHFfZGVpbml0KGh3LCBpKTsKIAltd2w4a19yeHFfZGVpbml0KGh3LCAwKTsKIApAQCAtNDk5NSwxMCArNTcxNiwxMCBAQAogCW13bDhrX2h3X3Jlc2V0KHByaXYpOwogCiAJLyogUmV0dXJuIGFsbCBza2JzIHRvIG1hYzgwMjExICovCi0JZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1FVRVVFUzsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBtd2w4a190eF9xdWV1ZXMocHJpdik7IGkrKykKIAkJbXdsOGtfdHhxX3JlY2xhaW0oaHcsIGksIElOVF9NQVgsIDEpOwogCi0JZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1FVRVVFUzsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBtd2w4a190eF9xdWV1ZXMocHJpdik7IGkrKykKIAkJbXdsOGtfdHhxX2RlaW5pdChodywgaSk7CiAKIAltd2w4a19yeHFfZGVpbml0KGh3LCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9lZXByb20uYwppbmRleCAxM2Q3NTBkLi41NGNjMGJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L2VlcHJvbS5jCkBAIC00OTEsNyArNDkxLDcgQEAKIAkJc3RydWN0IHBkYV9yc3NpX2NhbF9lbnRyeSAqY2FsID0gKHZvaWQgKikgJmRhdGFbb2Zmc2V0XTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgZW50cmllczsgaSsrKSB7Ci0JCQl1MTYgZnJlcTsKKwkJCXUxNiBmcmVxID0gMDsKIAkJCXN3aXRjaCAoaSkgewogCQkJY2FzZSBJRUVFODAyMTFfQkFORF8yR0haOgogCQkJCWZyZXEgPSAyNDM3OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L2Z3aW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9md2lvLmMKaW5kZXggMmZhYjdkMi4uYjZhMDYxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L2Z3aW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvZndpby5jCkBAIC03MjcsMyArNzI3LDM0IEBACiAJcDU0X3R4KHByaXYsIHNrYik7CiAJcmV0dXJuIDA7CiB9CisKK2ludCBwNTRfc2V0X2dyb3VwZmlsdGVyKHN0cnVjdCBwNTRfY29tbW9uICpwcml2KQoreworCXN0cnVjdCBwNTRfZ3JvdXBfYWRkcmVzc190YWJsZSAqZ3JwOworCXN0cnVjdCBza19idWZmICpza2I7CisJYm9vbCBvbiA9IGZhbHNlOworCisJc2tiID0gcDU0X2FsbG9jX3NrYihwcml2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpncnApLAorCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfR1JPVVBfQUREUkVTU19UQUJMRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOworCisJZ3JwID0gKHN0cnVjdCBwNTRfZ3JvdXBfYWRkcmVzc190YWJsZSAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKmdycCkpOworCisJb24gPSAhKHByaXYtPmZpbHRlcl9mbGFncyAmIEZJRl9BTExNVUxUSSkgJiYKKwkgICAgIChwcml2LT5tY19tYWNsaXN0X251bSA+IDAgJiYKKwkgICAgICBwcml2LT5tY19tYWNsaXN0X251bSA8PSBNQ19GSUxURVJfQUREUkVTU19OVU0pOworCisJaWYgKG9uKSB7CisJCWdycC0+ZmlsdGVyX2VuYWJsZSA9IGNwdV90b19sZTE2KDEpOworCQlncnAtPm51bV9hZGRyZXNzID0gY3B1X3RvX2xlMTYocHJpdi0+bWNfbWFjbGlzdF9udW0pOworCQltZW1jcHkoZ3JwLT5tYWNfbGlzdCwgcHJpdi0+bWNfbWFjbGlzdCwgc2l6ZW9mKGdycC0+bWFjX2xpc3QpKTsKKwl9IGVsc2UgeworCQlncnAtPmZpbHRlcl9lbmFibGUgPSBjcHVfdG9fbGUxNigwKTsKKwkJZ3JwLT5udW1fYWRkcmVzcyA9IGNwdV90b19sZTE2KDApOworCQltZW1zZXQoZ3JwLT5tYWNfbGlzdCwgMCwgc2l6ZW9mKGdycC0+bWFjX2xpc3QpKTsKKwl9CisKKwlwNTRfdHgocHJpdiwgc2tiKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9sbWFjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbG1hYy5oCmluZGV4IGViNTgxYWIuLjNkOGQ2MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9sbWFjLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L2xtYWMuaApAQCAtNTQwLDYgKzU0MCw3IEBACiBpbnQgcDU0X3NldHVwX21hYyhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdik7CiBpbnQgcDU0X3NldF9wcyhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdik7CiBpbnQgcDU0X2ZldGNoX3N0YXRpc3RpY3Moc3RydWN0IHA1NF9jb21tb24gKnByaXYpOworaW50IHA1NF9zZXRfZ3JvdXBmaWx0ZXIoc3RydWN0IHA1NF9jb21tb24gKnByaXYpOwogCiAvKiBlL3YgRENGIHNldHVwICovCiBpbnQgcDU0X3NldF9lZGNmKHN0cnVjdCBwNTRfY29tbW9uICpwcml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbWFpbi5jCmluZGV4IGE5NDY5OTEuLmE1YTZkOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L21haW4uYwpAQCAtMzA4LDYgKzMwOCwzMSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB1NjQgcDU0X3ByZXBhcmVfbXVsdGljYXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCQkgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jX2xpc3QpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IG5ldGRldl9od19hZGRyICpoYTsKKwlpbnQgaTsKKworCUJVSUxEX0JVR19PTihBUlJBWV9TSVpFKHByaXYtPm1jX21hY2xpc3QpICE9CisJCUFSUkFZX1NJWkUoKChzdHJ1Y3QgcDU0X2dyb3VwX2FkZHJlc3NfdGFibGUgKilOVUxMKS0+bWFjX2xpc3QpKTsKKwkvKgorCSAqIFRoZSBmaXJzdCBlbnRyeSBpcyByZXNlcnZlZCBmb3IgdGhlIGdsb2JhbCBicm9hZGNhc3QgTUFDLgorCSAqIE90aGVyd2lzZSB0aGUgZmlybXdhcmUgd2lsbCBkcm9wIGl0IGFuZCBBUlAgd2lsbCBubyBsb25nZXIgd29yay4KKwkgKi8KKwlpID0gMTsKKwlwcml2LT5tY19tYWNsaXN0X251bSA9IG5ldGRldl9od19hZGRyX2xpc3RfY291bnQobWNfbGlzdCkgKyBpOworCW5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIG1jX2xpc3QpIHsKKwkJbWVtY3B5KCZwcml2LT5tY19tYWNsaXN0W2ldLCBoYS0+YWRkciwgRVRIX0FMRU4pOworCQlpKys7CisJCWlmIChpID49IEFSUkFZX1NJWkUocHJpdi0+bWNfbWFjbGlzdCkpCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMTsgLyogdXBkYXRlICovCit9CisKIHN0YXRpYyB2b2lkIHA1NF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKIAkJCQkgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCiAJCQkJIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCkBAIC0zMTYsMTIgKzM0MSwxNiBAQAogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwogCiAJKnRvdGFsX2ZsYWdzICY9IEZJRl9QUk9NSVNDX0lOX0JTUyB8CisJCQlGSUZfQUxMTVVMVEkgfAogCQkJRklGX09USEVSX0JTUzsKIAogCXByaXYtPmZpbHRlcl9mbGFncyA9ICp0b3RhbF9mbGFnczsKIAogCWlmIChjaGFuZ2VkX2ZsYWdzICYgKEZJRl9QUk9NSVNDX0lOX0JTUyB8IEZJRl9PVEhFUl9CU1MpKQogCQlwNTRfc2V0dXBfbWFjKHByaXYpOworCisJaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQUxMTVVMVEkgfHwgbXVsdGljYXN0KQorCQlwNTRfc2V0X2dyb3VwZmlsdGVyKHByaXYpOwogfQogCiBzdGF0aWMgaW50IHA1NF9jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTE2IHF1ZXVlLApAQCAtNTkxLDYgKzYyMCw3IEBACiAJLmNvbmZpZwkJCT0gcDU0X2NvbmZpZywKIAkuZmx1c2gJCQk9IHA1NF9mbHVzaCwKIAkuYnNzX2luZm9fY2hhbmdlZAk9IHA1NF9ic3NfaW5mb19jaGFuZ2VkLAorCS5wcmVwYXJlX211bHRpY2FzdAk9IHA1NF9wcmVwYXJlX211bHRpY2FzdCwKIAkuY29uZmlndXJlX2ZpbHRlcgk9IHA1NF9jb25maWd1cmVfZmlsdGVyLAogCS5jb25mX3R4CQk9IHA1NF9jb25mX3R4LAogCS5nZXRfc3RhdHMJCT0gcDU0X2dldF9zdGF0cywKQEAgLTY2MCw2ICs2OTAsNyBAQAogCWluaXRfY29tcGxldGlvbigmcHJpdi0+YmVhY29uX2NvbXApOwogCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT53b3JrLCBwNTRfd29yayk7CiAKKwltZW1zZXQoJnByaXYtPm1jX21hY2xpc3RbMF0sIH4wLCBFVEhfQUxFTik7CiAJcmV0dXJuIGRldjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHA1NF9pbml0X2NvbW1vbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0LmgKaW5kZXggNTA3MzBmYy4uNzk5ZDA1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTQuaApAQCAtMjExLDggKzIxMSwxMCBAQAogCS8qIEJCUC9NQUMgc3RhdGUgKi8KIAl1OCBtYWNfYWRkcltFVEhfQUxFTl07CiAJdTggYnNzaWRbRVRIX0FMRU5dOworCXU4IG1jX21hY2xpc3RbNF1bRVRIX0FMRU5dOwogCXUxNiB3YWtldXBfdGltZXI7CiAJdW5zaWduZWQgaW50IGZpbHRlcl9mbGFnczsKKwlpbnQgbWNfbWFjbGlzdF9udW07CiAJaW50IG1vZGU7CiAJdTMyIHRzZl9sb3czMiwgdHNmX2hpZ2gzMjsKIAl1MzIgYmFzaWNfcmF0ZV9tYXNrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jCmluZGV4IDA0OTRkN2IuLjFiNzUzMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMKQEAgLTMzMSwxMCArMzMxLDkgQEAKIAlzdHJ1Y3QgcDU0cF9yaW5nX2NvbnRyb2wgKnJpbmdfY29udHJvbCA9IHByaXYtPnJpbmdfY29udHJvbDsKIAlzdHJ1Y3QgcDU0cF9kZXNjICpkZXNjOwogCWRtYV9hZGRyX3QgbWFwcGluZzsKLQl1MzIgZGV2aWNlX2lkeCwgaWR4LCBpOworCXUzMiBpZHgsIGk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWRldmljZV9pZHggPSBsZTMyX3RvX2NwdShyaW5nX2NvbnRyb2wtPmRldmljZV9pZHhbMV0pOwogCWlkeCA9IGxlMzJfdG9fY3B1KHJpbmdfY29udHJvbC0+aG9zdF9pZHhbMV0pOwogCWkgPSBpZHggJSBBUlJBWV9TSVpFKHJpbmdfY29udHJvbC0+dHhfZGF0YSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL0tjb25maWcKaW5kZXggZjYzMDU1Mi4uOWRlZjFlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL0tjb25maWcKQEAgLTU5LDcgKzU5LDYgQEAKIAlzZWxlY3QgUlQyODAwX0xJQgogCXNlbGVjdCBSVDJYMDBfTElCX1BDSSBpZiBQQ0kKIAlzZWxlY3QgUlQyWDAwX0xJQl9TT0MgaWYgUkFMSU5LX1JUMjg4WCB8fCBSQUxJTktfUlQzMDVYCi0Jc2VsZWN0IFJUMlgwMF9MSUJfSFQKIAlzZWxlY3QgUlQyWDAwX0xJQl9GSVJNV0FSRQogCXNlbGVjdCBSVDJYMDBfTElCX0NSWVBUTwogCXNlbGVjdCBDUkNfQ0NJVFQKQEAgLTc0LDE3ICs3MywxMyBAQAogaWYgUlQyODAwUENJCiAKIGNvbmZpZyBSVDI4MDBQQ0lfUlQzM1hYCi0JYm9vbCAicnQyODAwcGNpIC0gSW5jbHVkZSBzdXBwb3J0IGZvciBydDMzeHggZGV2aWNlcyAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAotCWRlZmF1bHQgbgorCWJvb2wgInJ0MjgwMHBjaSAtIEluY2x1ZGUgc3VwcG9ydCBmb3IgcnQzM3h4IGRldmljZXMiCisJZGVmYXVsdCB5CiAJLS0taGVscC0tLQogCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHJ0MzN4eCB3aXJlbGVzcyBjaGlwc2V0IGZhbWlseSB0byB0aGUKIAkgIHJ0MjgwMHBjaSBkcml2ZXIuCiAJICBTdXBwb3J0ZWQgY2hpcHM6IFJUMzM5MAogCi0JICBTdXBwb3J0IGZvciB0aGVzZSBkZXZpY2VzIGlzIG5vbi1mdW5jdGlvbmFsIGF0IHRoZSBtb21lbnQgYW5kIGlzCi0JICBpbnRlbmRlZCBmb3IgdGVzdGVycyBhbmQgZGV2ZWxvcGVycy4KLQogY29uZmlnIFJUMjgwMFBDSV9SVDM1WFgKIAlib29sICJydDI4MDBwY2kgLSBJbmNsdWRlIHN1cHBvcnQgZm9yIHJ0MzV4eCBkZXZpY2VzIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCkBAIC05OCwxNyArOTMsMTQgQEAKIAkgIGludGVuZGVkIGZvciB0ZXN0ZXJzIGFuZCBkZXZlbG9wZXJzLgogCiBjb25maWcgUlQyODAwUENJX1JUNTNYWAotICAgICAgIGJvb2wgInJ0MjgwMC1wY2kgLSBJbmNsdWRlIHN1cHBvcnQgZm9yIHJ0NTN4eCBkZXZpY2VzIChFWFBFUklNRU5UQUwpIgorICAgICAgIGJvb2wgInJ0MjgwMHBjaSAtIEluY2x1ZGUgc3VwcG9ydCBmb3IgcnQ1M3h4IGRldmljZXMgKEVYUEVSSU1FTlRBTCkiCiAgICAgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKLSAgICAgICBkZWZhdWx0IG4KKyAgICAgICBkZWZhdWx0IHkKICAgICAgICAtLS1oZWxwLS0tCiAgICAgICAgICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgcnQ1M3h4IHdpcmVsZXNzIGNoaXBzZXQgZmFtaWx5IHRvIHRoZQogICAgICAgICAgcnQyODAwcGNpIGRyaXZlci4KICAgICAgICAgIFN1cHBvcnRlZCBjaGlwczogUlQ1MzkwCiAKLSAgICAgICAgIFN1cHBvcnQgZm9yIHRoZXNlIGRldmljZXMgaXMgbm9uLWZ1bmN0aW9uYWwgYXQgdGhlIG1vbWVudCBhbmQgaXMKLSAgICAgICAgIGludGVuZGVkIGZvciB0ZXN0ZXJzIGFuZCBkZXZlbG9wZXJzLgotCiBlbmRpZgogCiBjb25maWcgUlQyNTAwVVNCCkBAIC0xNDAsNyArMTMyLDYgQEAKIAlkZXBlbmRzIG9uIFVTQgogCXNlbGVjdCBSVDI4MDBfTElCCiAJc2VsZWN0IFJUMlgwMF9MSUJfVVNCCi0Jc2VsZWN0IFJUMlgwMF9MSUJfSFQKIAlzZWxlY3QgUlQyWDAwX0xJQl9GSVJNV0FSRQogCXNlbGVjdCBSVDJYMDBfTElCX0NSWVBUTwogCXNlbGVjdCBDUkNfQ0NJVFQKQEAgLTE1MywxNyArMTQ0LDEzIEBACiBpZiBSVDI4MDBVU0IKIAogY29uZmlnIFJUMjgwMFVTQl9SVDMzWFgKLQlib29sICJydDI4MDB1c2IgLSBJbmNsdWRlIHN1cHBvcnQgZm9yIHJ0MzN4eCBkZXZpY2VzIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCi0JZGVmYXVsdCBuCisJYm9vbCAicnQyODAwdXNiIC0gSW5jbHVkZSBzdXBwb3J0IGZvciBydDMzeHggZGV2aWNlcyIKKwlkZWZhdWx0IHkKIAktLS1oZWxwLS0tCiAJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgcnQzM3h4IHdpcmVsZXNzIGNoaXBzZXQgZmFtaWx5IHRvIHRoZQogCSAgcnQyODAwdXNiIGRyaXZlci4KIAkgIFN1cHBvcnRlZCBjaGlwczogUlQzMzcwCiAKLQkgIFN1cHBvcnQgZm9yIHRoZXNlIGRldmljZXMgaXMgbm9uLWZ1bmN0aW9uYWwgYXQgdGhlIG1vbWVudCBhbmQgaXMKLQkgIGludGVuZGVkIGZvciB0ZXN0ZXJzIGFuZCBkZXZlbG9wZXJzLgotCiBjb25maWcgUlQyODAwVVNCX1JUMzVYWAogCWJvb2wgInJ0MjgwMHVzYiAtIEluY2x1ZGUgc3VwcG9ydCBmb3IgcnQzNXh4IGRldmljZXMgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKQEAgLTE3Niw2ICsxNjMsMTUgQEAKIAkgIFN1cHBvcnQgZm9yIHRoZXNlIGRldmljZXMgaXMgbm9uLWZ1bmN0aW9uYWwgYXQgdGhlIG1vbWVudCBhbmQgaXMKIAkgIGludGVuZGVkIGZvciB0ZXN0ZXJzIGFuZCBkZXZlbG9wZXJzLgogCitjb25maWcgUlQyODAwVVNCX1JUNTNYWAorICAgICAgIGJvb2wgInJ0MjgwMHVzYiAtIEluY2x1ZGUgc3VwcG9ydCBmb3IgcnQ1M3h4IGRldmljZXMgKEVYUEVSSU1FTlRBTCkiCisgICAgICAgZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKyAgICAgICBkZWZhdWx0IHkKKyAgICAgICAtLS1oZWxwLS0tCisgICAgICAgICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgcnQ1M3h4IHdpcmVsZXNzIGNoaXBzZXQgZmFtaWx5IHRvIHRoZQorICAgICAgICAgcnQyODAwcGNpIGRyaXZlci4KKyAgICAgICAgIFN1cHBvcnRlZCBjaGlwczogUlQ1MzcwCisKIGNvbmZpZyBSVDI4MDBVU0JfVU5LTk9XTgogCWJvb2wgInJ0MjgwMHVzYiAtIEluY2x1ZGUgc3VwcG9ydCBmb3IgdW5rbm93biAoVVNCKSBkZXZpY2VzIgogCWRlZmF1bHQgbgpAQCAtMjA3LDkgKzIwMyw2IEBACiBjb25maWcgUlQyWDAwX0xJQgogCXRyaXN0YXRlCiAKLWNvbmZpZyBSVDJYMDBfTElCX0hUCi0JYm9vbGVhbgotCiBjb25maWcgUlQyWDAwX0xJQl9GSVJNV0FSRQogCWJvb2xlYW4KIAlzZWxlY3QgRldfTE9BREVSCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvTWFrZWZpbGUKaW5kZXggOTcxMzM5OC4uMzQ5ZDViOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9NYWtlZmlsZQpAQCAtNyw3ICs3LDYgQEAKIHJ0MngwMGxpYi0kKENPTkZJR19SVDJYMDBfTElCX0NSWVBUTykJKz0gcnQyeDAwY3J5cHRvLm8KIHJ0MngwMGxpYi0kKENPTkZJR19SVDJYMDBfTElCX0ZJUk1XQVJFKQkrPSBydDJ4MDBmaXJtd2FyZS5vCiBydDJ4MDBsaWItJChDT05GSUdfUlQyWDAwX0xJQl9MRURTKQkrPSBydDJ4MDBsZWRzLm8KLXJ0MngwMGxpYi0kKENPTkZJR19SVDJYMDBfTElCX0hUKQkrPSBydDJ4MDBodC5vCiAKIG9iai0kKENPTkZJR19SVDJYMDBfTElCKQkJKz0gcnQyeDAwbGliLm8KIG9iai0kKENPTkZJR19SVDJYMDBfTElCX1BDSSkJCSs9IHJ0MngwMHBjaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmMKaW5kZXggMzI5ZjMyOC4uOTM3ZjllOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuYwpAQCAtMTMxNCw4ICsxMzE0LDggQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHJ0MjQwMHBjaV9lbmFibGVfaW50ZXJydXB0KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkJICAgICAgIHN0cnVjdCBydDJ4MDBfZmllbGQzMiBpcnFfZmllbGQpCitzdGF0aWMgaW5saW5lIHZvaWQgcnQyNDAwcGNpX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkJICAgICAgc3RydWN0IHJ0MngwMF9maWVsZDMyIGlycV9maWVsZCkKIHsKIAl1MzIgcmVnOwogCkBAIC0xMzY4LDggKzEzNjgsMTAgQEAKIHN0YXRpYyB2b2lkIHJ0MjQwMHBjaV9yeGRvbmVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IChzdHJ1Y3QgcnQyeDAwX2RldiAqKWRhdGE7Ci0JcnQyeDAwcGNpX3J4ZG9uZShydDJ4MDBkZXYpOwotCXJ0MjQwMHBjaV9lbmFibGVfaW50ZXJydXB0KHJ0MngwMGRldiwgQ1NSOF9SWERPTkUpOworCWlmIChydDJ4MDBwY2lfcnhkb25lKHJ0MngwMGRldikpCisJCXRhc2tsZXRfc2NoZWR1bGUoJnJ0MngwMGRldi0+cnhkb25lX3Rhc2tsZXQpOworCWVsc2UKKwkJcnQyNDAwcGNpX2VuYWJsZV9pbnRlcnJ1cHQocnQyeDAwZGV2LCBDU1I4X1JYRE9ORSk7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBydDI0MDBwY2lfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKQEAgLTE1MzQsMTMgKzE1MzYsMTMgQEAKIAkgKiBEZXRlY3QgaWYgdGhpcyBkZXZpY2UgaGFzIGFuIGhhcmR3YXJlIGNvbnRyb2xsZWQgcmFkaW8uCiAJICovCiAJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX0hBUkRXQVJFX1JBRElPKSkKLQkJX19zZXRfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpOworCQlfX3NldF9iaXQoQ0FQQUJJTElUWV9IV19CVVRUT04sICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CiAKIAkvKgogCSAqIENoZWNrIGlmIHRoZSBCQlAgdHVuaW5nIHNob3VsZCBiZSBlbmFibGVkLgogCSAqLwogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9SWF9BR0NWR0NfVFVOSU5HKSkKLQkJX19zZXRfYml0KERSSVZFUl9TVVBQT1JUX0xJTktfVFVOSU5HLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJCV9fc2V0X2JpdChDQVBBQklMSVRZX0xJTktfVFVOSU5HLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNjM4LDkgKzE2NDAsOSBAQAogCS8qCiAJICogVGhpcyBkZXZpY2UgcmVxdWlyZXMgdGhlIGF0aW0gcXVldWUgYW5kIERNQS1tYXBwZWQgc2ticy4KIAkgKi8KLQlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfQVRJTV9RVUVVRSwgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9ETUEsICZydDJ4MDBkZXYtPmZsYWdzKTsKLQlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfU1dfU0VRTk8sICZydDJ4MDBkZXYtPmZsYWdzKTsKKwlfX3NldF9iaXQoUkVRVUlSRV9BVElNX1FVRVVFLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOworCV9fc2V0X2JpdChSRVFVSVJFX0RNQSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKKwlfX3NldF9iaXQoUkVRVUlSRV9TV19TRVFOTywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKIAogCS8qCiAJICogU2V0IHRoZSByc3NpIG9mZnNldC4KQEAgLTE3MTgsNiArMTcyMCw5IEBACiAJLnR4X2xhc3RfYmVhY29uCQk9IHJ0MjQwMHBjaV90eF9sYXN0X2JlYWNvbiwKIAkucmZraWxsX3BvbGwJCT0gcnQyeDAwbWFjX3Jma2lsbF9wb2xsLAogCS5mbHVzaAkJCT0gcnQyeDAwbWFjX2ZsdXNoLAorCS5zZXRfYW50ZW5uYQkJPSBydDJ4MDBtYWNfc2V0X2FudGVubmEsCisJLmdldF9hbnRlbm5hCQk9IHJ0MngwMG1hY19nZXRfYW50ZW5uYSwKKwkuZ2V0X3JpbmdwYXJhbQkJPSBydDJ4MDBtYWNfZ2V0X3JpbmdwYXJhbSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnQyeDAwbGliX29wcyBydDI0MDBwY2lfcnQyeDAwX29wcyA9IHsKQEAgLTE3MzgsNiArMTc0Myw3IEBACiAJLnN0YXJ0X3F1ZXVlCQk9IHJ0MjQwMHBjaV9zdGFydF9xdWV1ZSwKIAkua2lja19xdWV1ZQkJPSBydDI0MDBwY2lfa2lja19xdWV1ZSwKIAkuc3RvcF9xdWV1ZQkJPSBydDI0MDBwY2lfc3RvcF9xdWV1ZSwKKwkuZmx1c2hfcXVldWUJCT0gcnQyeDAwcGNpX2ZsdXNoX3F1ZXVlLAogCS53cml0ZV90eF9kZXNjCQk9IHJ0MjQwMHBjaV93cml0ZV90eF9kZXNjLAogCS53cml0ZV9iZWFjb24JCT0gcnQyNDAwcGNpX3dyaXRlX2JlYWNvbiwKIAkuZmlsbF9yeGRvbmUJCT0gcnQyNDAwcGNpX2ZpbGxfcnhkb25lLApAQCAtMTc5OSwxMCArMTgwNSwxMSBAQAogICogUlQyNDAwcGNpIG1vZHVsZSBpbmZvcm1hdGlvbi4KICAqLwogc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHJ0MjQwMHBjaV9kZXZpY2VfdGFibGUpID0gewotCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MDEwMSksIFBDSV9ERVZJQ0VfREFUQSgmcnQyNDAwcGNpX29wcykgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDAxMDEpIH0sCiAJeyAwLCB9CiB9OwogCisKIE1PRFVMRV9BVVRIT1IoRFJWX1BST0pFQ1QpOwogTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJSYWxpbmsgUlQyNDAwIFBDSSAmIFBDTUNJQSBXaXJlbGVzcyBMQU4gZHJpdmVyLiIpOwpAQCAtMTgxMCwxMCArMTgxNywxNiBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHJ0MjQwMHBjaV9kZXZpY2VfdGFibGUpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCitzdGF0aWMgaW50IHJ0MjQwMHBjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwKKwkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gcnQyeDAwcGNpX3Byb2JlKHBjaV9kZXYsICZydDI0MDBwY2lfb3BzKTsKK30KKwogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJ0MjQwMHBjaV9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gS0JVSUxEX01PRE5BTUUsCiAJLmlkX3RhYmxlCT0gcnQyNDAwcGNpX2RldmljZV90YWJsZSwKLQkucHJvYmUJCT0gcnQyeDAwcGNpX3Byb2JlLAorCS5wcm9iZQkJPSBydDI0MDBwY2lfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChydDJ4MDBwY2lfcmVtb3ZlKSwKIAkuc3VzcGVuZAk9IHJ0MngwMHBjaV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gcnQyeDAwcGNpX3Jlc3VtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuYwppbmRleCA1ODI3Nzg3Li5kMjdkN2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5jCkBAIC0xNDQ2LDggKzE0NDYsOCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgcnQyNTAwcGNpX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCQkgICAgICAgc3RydWN0IHJ0MngwMF9maWVsZDMyIGlycV9maWVsZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBydDI1MDBwY2lfZW5hYmxlX2ludGVycnVwdChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCQkgICAgICBzdHJ1Y3QgcnQyeDAwX2ZpZWxkMzIgaXJxX2ZpZWxkKQogewogCXUzMiByZWc7CiAKQEAgLTE1MDAsOCArMTUwMCwxMCBAQAogc3RhdGljIHZvaWQgcnQyNTAwcGNpX3J4ZG9uZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gKHN0cnVjdCBydDJ4MDBfZGV2ICopZGF0YTsKLQlydDJ4MDBwY2lfcnhkb25lKHJ0MngwMGRldik7Ci0JcnQyNTAwcGNpX2VuYWJsZV9pbnRlcnJ1cHQocnQyeDAwZGV2LCBDU1I4X1JYRE9ORSk7CisJaWYgKHJ0MngwMHBjaV9yeGRvbmUocnQyeDAwZGV2KSkKKwkJdGFza2xldF9zY2hlZHVsZSgmcnQyeDAwZGV2LT5yeGRvbmVfdGFza2xldCk7CisJZWxzZQorCQlydDI1MDBwY2lfZW5hYmxlX2ludGVycnVwdChydDJ4MDBkZXYsIENTUjhfUlhET05FKTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IHJ0MjUwMHBjaV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQpAQCAtMTY4NSwxNCArMTY4NywxNCBAQAogCSAqIERldGVjdCBpZiB0aGlzIGRldmljZSBoYXMgYW4gaGFyZHdhcmUgY29udHJvbGxlZCByYWRpby4KIAkgKi8KIAlpZiAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfSEFSRFdBUkVfUkFESU8pKQotCQlfX3NldF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJCV9fc2V0X2JpdChDQVBBQklMSVRZX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKIAogCS8qCiAJICogQ2hlY2sgaWYgdGhlIEJCUCB0dW5pbmcgc2hvdWxkIGJlIGVuYWJsZWQuCiAJICovCiAJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX05JQywgJmVlcHJvbSk7CiAJaWYgKCFydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTklDX0RZTl9CQlBfVFVORSkpCi0JCV9fc2V0X2JpdChEUklWRVJfU1VQUE9SVF9MSU5LX1RVTklORywgJnJ0MngwMGRldi0+ZmxhZ3MpOworCQlfX3NldF9iaXQoQ0FQQUJJTElUWV9MSU5LX1RVTklORywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKIAogCS8qCiAJICogUmVhZCB0aGUgUlNTSSA8LT4gZEJtIG9mZnNldCBpbmZvcm1hdGlvbi4KQEAgLTE5NTYsOSArMTk1OCw5IEBACiAJLyoKIAkgKiBUaGlzIGRldmljZSByZXF1aXJlcyB0aGUgYXRpbSBxdWV1ZSBhbmQgRE1BLW1hcHBlZCBza2JzLgogCSAqLwotCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9BVElNX1FVRVVFLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0JX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX0RNQSwgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9TV19TRVFOTywgJnJ0MngwMGRldi0+ZmxhZ3MpOworCV9fc2V0X2JpdChSRVFVSVJFX0FUSU1fUVVFVUUsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CisJX19zZXRfYml0KFJFUVVJUkVfRE1BLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOworCV9fc2V0X2JpdChSRVFVSVJFX1NXX1NFUU5PLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOwogCiAJLyoKIAkgKiBTZXQgdGhlIHJzc2kgb2Zmc2V0LgpAQCAtMjAxMSw2ICsyMDEzLDkgQEAKIAkudHhfbGFzdF9iZWFjb24JCT0gcnQyNTAwcGNpX3R4X2xhc3RfYmVhY29uLAogCS5yZmtpbGxfcG9sbAkJPSBydDJ4MDBtYWNfcmZraWxsX3BvbGwsCiAJLmZsdXNoCQkJPSBydDJ4MDBtYWNfZmx1c2gsCisJLnNldF9hbnRlbm5hCQk9IHJ0MngwMG1hY19zZXRfYW50ZW5uYSwKKwkuZ2V0X2FudGVubmEJCT0gcnQyeDAwbWFjX2dldF9hbnRlbm5hLAorCS5nZXRfcmluZ3BhcmFtCQk9IHJ0MngwMG1hY19nZXRfcmluZ3BhcmFtLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydDJ4MDBsaWJfb3BzIHJ0MjUwMHBjaV9ydDJ4MDBfb3BzID0gewpAQCAtMjAzMSw2ICsyMDM2LDcgQEAKIAkuc3RhcnRfcXVldWUJCT0gcnQyNTAwcGNpX3N0YXJ0X3F1ZXVlLAogCS5raWNrX3F1ZXVlCQk9IHJ0MjUwMHBjaV9raWNrX3F1ZXVlLAogCS5zdG9wX3F1ZXVlCQk9IHJ0MjUwMHBjaV9zdG9wX3F1ZXVlLAorCS5mbHVzaF9xdWV1ZQkJPSBydDJ4MDBwY2lfZmx1c2hfcXVldWUsCiAJLndyaXRlX3R4X2Rlc2MJCT0gcnQyNTAwcGNpX3dyaXRlX3R4X2Rlc2MsCiAJLndyaXRlX2JlYWNvbgkJPSBydDI1MDBwY2lfd3JpdGVfYmVhY29uLAogCS5maWxsX3J4ZG9uZQkJPSBydDI1MDBwY2lfZmlsbF9yeGRvbmUsCkBAIC0yMDkyLDcgKzIwOTgsNyBAQAogICogUlQyNTAwcGNpIG1vZHVsZSBpbmZvcm1hdGlvbi4KICAqLwogc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHJ0MjUwMHBjaV9kZXZpY2VfdGFibGUpID0gewotCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MDIwMSksIFBDSV9ERVZJQ0VfREFUQSgmcnQyNTAwcGNpX29wcykgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDAyMDEpIH0sCiAJeyAwLCB9CiB9OwogCkBAIC0yMTAzLDEwICsyMTA5LDE2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcnQyNTAwcGNpX2RldmljZV90YWJsZSk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKK3N0YXRpYyBpbnQgcnQyNTAwcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LAorCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBydDJ4MDBwY2lfcHJvYmUocGNpX2RldiwgJnJ0MjUwMHBjaV9vcHMpOworfQorCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcnQyNTAwcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSBLQlVJTERfTU9ETkFNRSwKIAkuaWRfdGFibGUJPSBydDI1MDBwY2lfZGV2aWNlX3RhYmxlLAotCS5wcm9iZQkJPSBydDJ4MDBwY2lfcHJvYmUsCisJLnByb2JlCQk9IHJ0MjUwMHBjaV9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHJ0MngwMHBjaV9yZW1vdmUpLAogCS5zdXNwZW5kCT0gcnQyeDAwcGNpX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBydDJ4MDBwY2lfcmVzdW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5jCmluZGV4IDk3OWZlNjUuLjE1MjM3YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmMKQEAgLTE1MTksNyArMTUxOSw3IEBACiAJICogRGV0ZWN0IGlmIHRoaXMgZGV2aWNlIGhhcyBhbiBoYXJkd2FyZSBjb250cm9sbGVkIHJhZGlvLgogCSAqLwogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9IQVJEV0FSRV9SQURJTykpCi0JCV9fc2V0X2JpdChDT05GSUdfU1VQUE9SVF9IV19CVVRUT04sICZydDJ4MDBkZXYtPmZsYWdzKTsKKwkJX19zZXRfYml0KENBUEFCSUxJVFlfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOwogCiAJLyoKIAkgKiBSZWFkIHRoZSBSU1NJIDwtPiBkQm0gb2Zmc2V0IGluZm9ybWF0aW9uLgpAQCAtMTc5MCwxNCArMTc5MCwxNCBAQAogCS8qCiAJICogVGhpcyBkZXZpY2UgcmVxdWlyZXMgdGhlIGF0aW0gcXVldWUKIAkgKi8KLQlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfQVRJTV9RVUVVRSwgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9CRUFDT05fR1VBUkQsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwlfX3NldF9iaXQoUkVRVUlSRV9BVElNX1FVRVVFLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOworCV9fc2V0X2JpdChSRVFVSVJFX0JFQUNPTl9HVUFSRCwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKIAlpZiAoIW1vZHBhcmFtX25vaHdjcnlwdCkgewotCQlfX3NldF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0JCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9DT1BZX0lWLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJCV9fc2V0X2JpdChDQVBBQklMSVRZX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKKwkJX19zZXRfYml0KFJFUVVJUkVfQ09QWV9JViwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKIAl9Ci0JX19zZXRfYml0KERSSVZFUl9TVVBQT1JUX1dBVENIRE9HLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0JX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX1NXX1NFUU5PLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJX19zZXRfYml0KFJFUVVJUkVfU1dfU0VRTk8sICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CisJX19zZXRfYml0KFJFUVVJUkVfUFNfQVVUT1dBS0UsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CiAKIAkvKgogCSAqIFNldCB0aGUgcnNzaSBvZmZzZXQuCkBAIC0xODI0LDYgKzE4MjQsOSBAQAogCS5jb25mX3R4CQk9IHJ0MngwMG1hY19jb25mX3R4LAogCS5yZmtpbGxfcG9sbAkJPSBydDJ4MDBtYWNfcmZraWxsX3BvbGwsCiAJLmZsdXNoCQkJPSBydDJ4MDBtYWNfZmx1c2gsCisJLnNldF9hbnRlbm5hCQk9IHJ0MngwMG1hY19zZXRfYW50ZW5uYSwKKwkuZ2V0X2FudGVubmEJCT0gcnQyeDAwbWFjX2dldF9hbnRlbm5hLAorCS5nZXRfcmluZ3BhcmFtCQk9IHJ0MngwMG1hY19nZXRfcmluZ3BhcmFtLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydDJ4MDBsaWJfb3BzIHJ0MjUwMHVzYl9ydDJ4MDBfb3BzID0gewpAQCAtMTkwNSw1OCArMTkwOCw1NCBAQAogICovCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgcnQyNTAwdXNiX2RldmljZV90YWJsZVtdID0gewogCS8qIEFTVVMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3MDYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzA3KSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTcwNikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3MDcpIH0sCiAJLyogQmVsa2luICovCi0JeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg3MDUwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4NzA1MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDcwNWEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg3MDUwKSB9LAorCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4NzA1MSkgfSwKIAkvKiBDaXNjbyBTeXN0ZW1zICovCi0JeyBVU0JfREVWSUNFKDB4MTNiMSwgMHgwMDBkKSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDEzYjEsIDB4MDAxMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxM2IxLCAweDAwMWEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCi0JLyogQ05ldCAqLwotCXsgVVNCX0RFVklDRSgweDEzNzEsIDB4OTAyMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxM2IxLCAweDAwMGQpIH0sCisJeyBVU0JfREVWSUNFKDB4MTNiMSwgMHgwMDExKSB9LAorCXsgVVNCX0RFVklDRSgweDEzYjEsIDB4MDAxYSkgfSwKIAkvKiBDb25jZXB0cm9uaWMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMDIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzAyKSB9LAogCS8qIEQtTElOSyAqLwotCXsgVVNCX0RFVklDRSgweDIwMDEsIDB4M2MwMCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDAxLCAweDNjMDApIH0sCiAJLyogR2lnYWJ5dGUgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMDQ0LCAweDgwMDEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTA0NCwgMHg4MDA3KSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDEwNDQsIDB4ODAwMSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxMDQ0LCAweDgwMDcpIH0sCiAJLyogSGVyY3VsZXMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNmY4LCAweGUwMDApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDZmOCwgMHhlMDAwKSB9LAogCS8qIE1lbGNvICovCi0JeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMDVlKSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDA2NiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAwNjcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMDhiKSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDA5NyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAwNWUpIH0sCisJeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMDY2KSB9LAorCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDA2NykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAwOGIpIH0sCisJeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMDk3KSB9LAogCS8qIE1TSSAqLwotCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4Njg2MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDY4NjUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg2ODY5KSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4Njg2MSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDY4NjUpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg2ODY5KSB9LAogCS8qIFJhbGluayAqLwotCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MTcwNiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDI1NzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgyNTczKSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4OTAyMCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDE3MDYpIH0sCisJeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgyNTcwKSB9LAorCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4OTAyMCkgfSwKIAkvKiBTYWdlbSAqLwotCXsgVVNCX0RFVklDRSgweDA3OWIsIDB4MDA0YiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNzliLCAweDAwNGIpIH0sCiAJLyogU2llbWVucyAqLwotCXsgVVNCX0RFVklDRSgweDA2ODEsIDB4M2MwNiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNjgxLCAweDNjMDYpIH0sCiAJLyogU01DICovCi0JeyBVU0JfREVWSUNFKDB4MDcwNywgMHhlZTEzKSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA3MDcsIDB4ZWUxMykgfSwKIAkvKiBTcGFpcm9uICovCi0JeyBVU0JfREVWSUNFKDB4MTE0YiwgMHgwMTEwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDExNGIsIDB4MDExMCkgfSwKIAkvKiBTVVJFQ09NICovCi0JeyBVU0JfREVWSUNFKDB4MDc2OSwgMHgxMWYzKSwgVVNCX0RFVklDRV9EQVRBKCZydDI1MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA3NjksIDB4MTFmMykgfSwKIAkvKiBUcnVzdCAqLwotCXsgVVNCX0RFVklDRSgweDBlYjAsIDB4OTAyMCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyNTAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZWIwLCAweDkwMjApIH0sCiAJLyogVlRlY2ggKi8KLQl7IFVTQl9ERVZJQ0UoMHgwZjg4LCAweDMwMTIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGY4OCwgMHgzMDEyKSB9LAogCS8qIFppbndlbGwgKi8KLQl7IFVTQl9ERVZJQ0UoMHg1YTU3LCAweDAyNjApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjUwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4NWE1NywgMHgwMjYwKSB9LAogCXsgMCwgfQogfTsKIApAQCAtMTk2NywxMCArMTk2NiwxNiBAQAogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHJ0MjUwMHVzYl9kZXZpY2VfdGFibGUpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCitzdGF0aWMgaW50IHJ0MjUwMHVzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdXNiX2ludGYsCisJCQkgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIHJ0MngwMHVzYl9wcm9iZSh1c2JfaW50ZiwgJnJ0MjUwMHVzYl9vcHMpOworfQorCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgcnQyNTAwdXNiX2RyaXZlciA9IHsKIAkubmFtZQkJPSBLQlVJTERfTU9ETkFNRSwKIAkuaWRfdGFibGUJPSBydDI1MDB1c2JfZGV2aWNlX3RhYmxlLAotCS5wcm9iZQkJPSBydDJ4MDB1c2JfcHJvYmUsCisJLnByb2JlCQk9IHJ0MjUwMHVzYl9wcm9iZSwKIAkuZGlzY29ubmVjdAk9IHJ0MngwMHVzYl9kaXNjb25uZWN0LAogCS5zdXNwZW5kCT0gcnQyeDAwdXNiX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBydDJ4MDB1c2JfcmVzdW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMC5oCmluZGV4IDhmYmM1ZmEuLmY2N2JjOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwLmgKQEAgLTUxLDYgKzUxLDcgQEAKICAqIFJGMzMyMCAyLjRHIDFUMVIoUlQzMzUwL1JUMzM3MC9SVDMzOTApCiAgKiBSRjMzMjIgMi40RyAyVDJSKFJUMzM1Mi9SVDMzNzEvUlQzMzcyL1JUMzM5MS9SVDMzOTIpCiAgKiBSRjM4NTMgMi40Ry81RyAzVDNSKFJUMzg4My9SVDM1NjMvUlQzNTczL1JUMzU5My9SVDM2NjIpCisgKiBSRjUzNzAgMi40RyAxVDFSCiAgKiBSRjUzOTAgMi40RyAxVDFSCiAgKi8KICNkZWZpbmUgUkYyODIwCQkJCTB4MDAwMQpAQCAtNjYsNiArNjcsNyBAQAogI2RlZmluZSBSRjMzMjAJCQkJMHgwMDBiCiAjZGVmaW5lIFJGMzMyMgkJCQkweDAwMGMKICNkZWZpbmUgUkYzODUzCQkJCTB4MDAwZAorI2RlZmluZSBSRjUzNzAJCQkJMHg1MzcwCiAjZGVmaW5lIFJGNTM5MAkJCQkweDUzOTAKIAogLyoKQEAgLTIxMDQsNiArMjEwNiw1OSBAQAogI2RlZmluZSBFRVBST01fVFhQT1dFUl9CR18yCQlGSUVMRDE2KDB4ZmYwMCkKIAogLyoKKyAqIEVFUFJPTSB0ZW1wZXJhdHVyZSBjb21wZW5zYXRpb24gYm91bmRhcmllcyA4MDIuMTFCRworICogTUlOVVM0OiBJZiB0aGUgYWN0dWFsIFRTU0kgaXMgYmVsb3cgdGhpcyBib3VuZGFyeSwgdHggcG93ZXIgbmVlZHMgdG8gYmUKKyAqICAgICAgICAgcmVkdWNlZCBieSAoYWdjX3N0ZXAgKiAtNCkKKyAqIE1JTlVTMzogSWYgdGhlIGFjdHVhbCBUU1NJIGlzIGJlbG93IHRoaXMgYm91bmRhcnksIHR4IHBvd2VyIG5lZWRzIHRvIGJlCisgKiAgICAgICAgIHJlZHVjZWQgYnkgKGFnY19zdGVwICogLTMpCisgKi8KKyNkZWZpbmUgRUVQUk9NX1RTU0lfQk9VTkRfQkcxCQkweDAwMzcKKyNkZWZpbmUgRUVQUk9NX1RTU0lfQk9VTkRfQkcxX01JTlVTNAlGSUVMRDE2KDB4MDBmZikKKyNkZWZpbmUgRUVQUk9NX1RTU0lfQk9VTkRfQkcxX01JTlVTMwlGSUVMRDE2KDB4ZmYwMCkKKworLyoKKyAqIEVFUFJPTSB0ZW1wZXJhdHVyZSBjb21wZW5zYXRpb24gYm91bmRhcmllcyA4MDIuMTFCRworICogTUlOVVMyOiBJZiB0aGUgYWN0dWFsIFRTU0kgaXMgYmVsb3cgdGhpcyBib3VuZGFyeSwgdHggcG93ZXIgbmVlZHMgdG8gYmUKKyAqICAgICAgICAgcmVkdWNlZCBieSAoYWdjX3N0ZXAgKiAtMikKKyAqIE1JTlVTMTogSWYgdGhlIGFjdHVhbCBUU1NJIGlzIGJlbG93IHRoaXMgYm91bmRhcnksIHR4IHBvd2VyIG5lZWRzIHRvIGJlCisgKiAgICAgICAgIHJlZHVjZWQgYnkgKGFnY19zdGVwICogLTEpCisgKi8KKyNkZWZpbmUgRUVQUk9NX1RTU0lfQk9VTkRfQkcyCQkweDAwMzgKKyNkZWZpbmUgRUVQUk9NX1RTU0lfQk9VTkRfQkcyX01JTlVTMglGSUVMRDE2KDB4MDBmZikKKyNkZWZpbmUgRUVQUk9NX1RTU0lfQk9VTkRfQkcyX01JTlVTMQlGSUVMRDE2KDB4ZmYwMCkKKworLyoKKyAqIEVFUFJPTSB0ZW1wZXJhdHVyZSBjb21wZW5zYXRpb24gYm91bmRhcmllcyA4MDIuMTFCRworICogUkVGOiBSZWZlcmVuY2UgVFNTSSB2YWx1ZSwgbm8gdHggcG93ZXIgY2hhbmdlcyBuZWVkZWQKKyAqIFBMVVMxOiBJZiB0aGUgYWN0dWFsIFRTU0kgaXMgYWJvdmUgdGhpcyBib3VuZGFyeSwgdHggcG93ZXIgbmVlZHMgdG8gYmUKKyAqICAgICAgICBpbmNyZWFzZWQgYnkgKGFnY19zdGVwICogMSkKKyAqLworI2RlZmluZSBFRVBST01fVFNTSV9CT1VORF9CRzMJCTB4MDAzOQorI2RlZmluZSBFRVBST01fVFNTSV9CT1VORF9CRzNfUkVGCUZJRUxEMTYoMHgwMGZmKQorI2RlZmluZSBFRVBST01fVFNTSV9CT1VORF9CRzNfUExVUzEJRklFTEQxNigweGZmMDApCisKKy8qCisgKiBFRVBST00gdGVtcGVyYXR1cmUgY29tcGVuc2F0aW9uIGJvdW5kYXJpZXMgODAyLjExQkcKKyAqIFBMVVMyOiBJZiB0aGUgYWN0dWFsIFRTU0kgaXMgYWJvdmUgdGhpcyBib3VuZGFyeSwgdHggcG93ZXIgbmVlZHMgdG8gYmUKKyAqICAgICAgICBpbmNyZWFzZWQgYnkgKGFnY19zdGVwICogMikKKyAqIFBMVVMzOiBJZiB0aGUgYWN0dWFsIFRTU0kgaXMgYWJvdmUgdGhpcyBib3VuZGFyeSwgdHggcG93ZXIgbmVlZHMgdG8gYmUKKyAqICAgICAgICBpbmNyZWFzZWQgYnkgKGFnY19zdGVwICogMykKKyAqLworI2RlZmluZSBFRVBST01fVFNTSV9CT1VORF9CRzQJCTB4MDAzYQorI2RlZmluZSBFRVBST01fVFNTSV9CT1VORF9CRzRfUExVUzIJRklFTEQxNigweDAwZmYpCisjZGVmaW5lIEVFUFJPTV9UU1NJX0JPVU5EX0JHNF9QTFVTMwlGSUVMRDE2KDB4ZmYwMCkKKworLyoKKyAqIEVFUFJPTSB0ZW1wZXJhdHVyZSBjb21wZW5zYXRpb24gYm91bmRhcmllcyA4MDIuMTFCRworICogUExVUzQ6IElmIHRoZSBhY3R1YWwgVFNTSSBpcyBhYm92ZSB0aGlzIGJvdW5kYXJ5LCB0eCBwb3dlciBuZWVkcyB0byBiZQorICogICAgICAgIGluY3JlYXNlZCBieSAoYWdjX3N0ZXAgKiA0KQorICogQUdDX1NURVA6IFRlbXBlcmF0dXJlIGNvbXBlbnNhdGlvbiBzdGVwLgorICovCisjZGVmaW5lIEVFUFJPTV9UU1NJX0JPVU5EX0JHNQkJMHgwMDNiCisjZGVmaW5lIEVFUFJPTV9UU1NJX0JPVU5EX0JHNV9QTFVTNAlGSUVMRDE2KDB4MDBmZikKKyNkZWZpbmUgRUVQUk9NX1RTU0lfQk9VTkRfQkc1X0FHQ19TVEVQCUZJRUxEMTYoMHhmZjAwKQorCisvKgogICogRUVQUk9NIFRYUE9XRVIgODAyLjExQQogICovCiAjZGVmaW5lIEVFUFJPTV9UWFBPV0VSX0ExCQkweDAwM2MKQEAgLTIxMTMsNiArMjE2OCw1OSBAQAogI2RlZmluZSBFRVBST01fVFhQT1dFUl9BXzIJCUZJRUxEMTYoMHhmZjAwKQogCiAvKgorICogRUVQUk9NIHRlbXBlcmF0dXJlIGNvbXBlbnNhdGlvbiBib3VuZGFyaWVzIDgwMi4xMUEKKyAqIE1JTlVTNDogSWYgdGhlIGFjdHVhbCBUU1NJIGlzIGJlbG93IHRoaXMgYm91bmRhcnksIHR4IHBvd2VyIG5lZWRzIHRvIGJlCisgKiAgICAgICAgIHJlZHVjZWQgYnkgKGFnY19zdGVwICogLTQpCisgKiBNSU5VUzM6IElmIHRoZSBhY3R1YWwgVFNTSSBpcyBiZWxvdyB0aGlzIGJvdW5kYXJ5LCB0eCBwb3dlciBuZWVkcyB0byBiZQorICogICAgICAgICByZWR1Y2VkIGJ5IChhZ2Nfc3RlcCAqIC0zKQorICovCisjZGVmaW5lIEVFUFJPTV9UU1NJX0JPVU5EX0ExCQkweDAwNmEKKyNkZWZpbmUgRUVQUk9NX1RTU0lfQk9VTkRfQTFfTUlOVVM0CUZJRUxEMTYoMHgwMGZmKQorI2RlZmluZSBFRVBST01fVFNTSV9CT1VORF9BMV9NSU5VUzMJRklFTEQxNigweGZmMDApCisKKy8qCisgKiBFRVBST00gdGVtcGVyYXR1cmUgY29tcGVuc2F0aW9uIGJvdW5kYXJpZXMgODAyLjExQQorICogTUlOVVMyOiBJZiB0aGUgYWN0dWFsIFRTU0kgaXMgYmVsb3cgdGhpcyBib3VuZGFyeSwgdHggcG93ZXIgbmVlZHMgdG8gYmUKKyAqICAgICAgICAgcmVkdWNlZCBieSAoYWdjX3N0ZXAgKiAtMikKKyAqIE1JTlVTMTogSWYgdGhlIGFjdHVhbCBUU1NJIGlzIGJlbG93IHRoaXMgYm91bmRhcnksIHR4IHBvd2VyIG5lZWRzIHRvIGJlCisgKiAgICAgICAgIHJlZHVjZWQgYnkgKGFnY19zdGVwICogLTEpCisgKi8KKyNkZWZpbmUgRUVQUk9NX1RTU0lfQk9VTkRfQTIJCTB4MDA2YgorI2RlZmluZSBFRVBST01fVFNTSV9CT1VORF9BMl9NSU5VUzIJRklFTEQxNigweDAwZmYpCisjZGVmaW5lIEVFUFJPTV9UU1NJX0JPVU5EX0EyX01JTlVTMQlGSUVMRDE2KDB4ZmYwMCkKKworLyoKKyAqIEVFUFJPTSB0ZW1wZXJhdHVyZSBjb21wZW5zYXRpb24gYm91bmRhcmllcyA4MDIuMTFBCisgKiBSRUY6IFJlZmVyZW5jZSBUU1NJIHZhbHVlLCBubyB0eCBwb3dlciBjaGFuZ2VzIG5lZWRlZAorICogUExVUzE6IElmIHRoZSBhY3R1YWwgVFNTSSBpcyBhYm92ZSB0aGlzIGJvdW5kYXJ5LCB0eCBwb3dlciBuZWVkcyB0byBiZQorICogICAgICAgIGluY3JlYXNlZCBieSAoYWdjX3N0ZXAgKiAxKQorICovCisjZGVmaW5lIEVFUFJPTV9UU1NJX0JPVU5EX0EzCQkweDAwNmMKKyNkZWZpbmUgRUVQUk9NX1RTU0lfQk9VTkRfQTNfUkVGCUZJRUxEMTYoMHgwMGZmKQorI2RlZmluZSBFRVBST01fVFNTSV9CT1VORF9BM19QTFVTMQlGSUVMRDE2KDB4ZmYwMCkKKworLyoKKyAqIEVFUFJPTSB0ZW1wZXJhdHVyZSBjb21wZW5zYXRpb24gYm91bmRhcmllcyA4MDIuMTFBCisgKiBQTFVTMjogSWYgdGhlIGFjdHVhbCBUU1NJIGlzIGFib3ZlIHRoaXMgYm91bmRhcnksIHR4IHBvd2VyIG5lZWRzIHRvIGJlCisgKiAgICAgICAgaW5jcmVhc2VkIGJ5IChhZ2Nfc3RlcCAqIDIpCisgKiBQTFVTMzogSWYgdGhlIGFjdHVhbCBUU1NJIGlzIGFib3ZlIHRoaXMgYm91bmRhcnksIHR4IHBvd2VyIG5lZWRzIHRvIGJlCisgKiAgICAgICAgaW5jcmVhc2VkIGJ5IChhZ2Nfc3RlcCAqIDMpCisgKi8KKyNkZWZpbmUgRUVQUk9NX1RTU0lfQk9VTkRfQTQJCTB4MDA2ZAorI2RlZmluZSBFRVBST01fVFNTSV9CT1VORF9BNF9QTFVTMglGSUVMRDE2KDB4MDBmZikKKyNkZWZpbmUgRUVQUk9NX1RTU0lfQk9VTkRfQTRfUExVUzMJRklFTEQxNigweGZmMDApCisKKy8qCisgKiBFRVBST00gdGVtcGVyYXR1cmUgY29tcGVuc2F0aW9uIGJvdW5kYXJpZXMgODAyLjExQQorICogUExVUzQ6IElmIHRoZSBhY3R1YWwgVFNTSSBpcyBhYm92ZSB0aGlzIGJvdW5kYXJ5LCB0eCBwb3dlciBuZWVkcyB0byBiZQorICogICAgICAgIGluY3JlYXNlZCBieSAoYWdjX3N0ZXAgKiA0KQorICogQUdDX1NURVA6IFRlbXBlcmF0dXJlIGNvbXBlbnNhdGlvbiBzdGVwLgorICovCisjZGVmaW5lIEVFUFJPTV9UU1NJX0JPVU5EX0E1CQkweDAwNmUKKyNkZWZpbmUgRUVQUk9NX1RTU0lfQk9VTkRfQTVfUExVUzQJRklFTEQxNigweDAwZmYpCisjZGVmaW5lIEVFUFJPTV9UU1NJX0JPVU5EX0E1X0FHQ19TVEVQCUZJRUxEMTYoMHhmZjAwKQorCisvKgogICogRUVQUk9NIFRYUE9XRVIgYnkgcmF0ZTogdHggcG93ZXIgcGVyIHR4IHJhdGUgZm9yIEhUMjAgbW9kZQogICovCiAjZGVmaW5lIEVFUFJPTV9UWFBPV0VSX0JZUkFURQkJMHgwMDZmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwbGliLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwbGliLmMKaW5kZXggZGJmNzRkMC4uMmE2YWE4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMGxpYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBsaWIuYwpAQCAtNjg3LDYgKzY4Nyw5IEBACiAJCW1jcyA9IHJlYWxfbWNzOwogCX0KIAorCWlmIChhZ2dyID09IDEgfHwgYW1wZHUgPT0gMSkKKwkJX19zZXRfYml0KFRYRE9ORV9BTVBEVSwgJnR4ZGVzYy5mbGFncyk7CisKIAkvKgogCSAqIFJhbGluayBoYXMgYSByZXRyeSBtZWNoYW5pc20gdXNpbmcgYSBnbG9iYWwgZmFsbGJhY2sKIAkgKiB0YWJsZS4gV2Ugc2V0dXAgdGhpcyBmYWxsYmFjayB0YWJsZSB0byB0cnkgdGhlIGltbWVkaWF0ZQpAQCAtNzI3LDM0ICs3MzAsMjAgQEAKIAlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWU7CiAJc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeTsKIAl1MzIgcmVnOwotCXU4IHBpZDsKLQlpbnQgaTsKKwl1OCBxaWQ7CiAKLQkvKgotCSAqIFRYX1NUQV9GSUZPIGlzIGEgc3RhY2sgb2YgWCBlbnRyaWVzLCBoZW5jZSByZWFkIFRYX1NUQV9GSUZPCi0JICogYXQgbW9zdCBYIHRpbWVzIGFuZCBhbHNvIHN0b3AgcHJvY2Vzc2luZyBvbmNlIHRoZSBUWF9TVEFfRklGT19WQUxJRAotCSAqIGZsYWcgaXMgbm90IHNldCBhbnltb3JlLgotCSAqCi0JICogVGhlIGxlZ2FjeSBkcml2ZXJzIHVzZSBYPVRYX1JJTkdfU0laRSBidXQgc3RhdGUgaW4gYSBjb21tZW50Ci0JICogdGhhdCB0aGUgVFhfU1RBX0ZJRk8gc3RhY2sgaGFzIGEgc2l6ZSBvZiAxNi4gV2Ugc3RpY2sgdG8gb3VyCi0JICogdHggcmluZyBzaXplIGZvciBub3cuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IHJ0MngwMGRldi0+b3BzLT50eC0+ZW50cnlfbnVtOyBpKyspIHsKLQkJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWF9TVEFfRklGTywgJnJlZyk7Ci0JCWlmICghcnQyeDAwX2dldF9maWVsZDMyKHJlZywgVFhfU1RBX0ZJRk9fVkFMSUQpKQotCQkJYnJlYWs7CisJd2hpbGUgKGtmaWZvX2dldCgmcnQyeDAwZGV2LT50eHN0YXR1c19maWZvLCAmcmVnKSkgewogCi0JCS8qCi0JCSAqIFNraXAgdGhpcyBlbnRyeSB3aGVuIGl0IGNvbnRhaW5zIGFuIGludmFsaWQKLQkJICogcXVldWUgaWRlbnRpY2F0aW9uIG51bWJlci4KKwkJLyogVFhfU1RBX0ZJRk9fUElEX1FVRVVFIGlzIGEgMi1iaXQgZmllbGQsIHRodXMKKwkJICogcWlkIGlzIGd1YXJhbnRlZWQgdG8gYmUgb25lIG9mIHRoZSBUWCBRSURzCiAJCSAqLwotCQlwaWQgPSBydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBUWF9TVEFfRklGT19QSURfUVVFVUUpOwotCQlpZiAocGlkID49IFFJRF9SWCkKKwkJcWlkID0gcnQyeDAwX2dldF9maWVsZDMyKHJlZywgVFhfU1RBX0ZJRk9fUElEX1FVRVVFKTsKKwkJcXVldWUgPSBydDJ4MDBxdWV1ZV9nZXRfdHhfcXVldWUocnQyeDAwZGV2LCBxaWQpOworCQlpZiAodW5saWtlbHkoIXF1ZXVlKSkgeworCQkJV0FSTklORyhydDJ4MDBkZXYsICJHb3QgVFggc3RhdHVzIGZvciBhbiB1bmF2YWlsYWJsZSAiCisJCQkJCSAgICJxdWV1ZSAldSwgZHJvcHBpbmdcbiIsIHFpZCk7CiAJCQljb250aW51ZTsKLQotCQlxdWV1ZSA9IHJ0MngwMHF1ZXVlX2dldF90eF9xdWV1ZShydDJ4MDBkZXYsIHBpZCk7Ci0JCWlmICh1bmxpa2VseSghcXVldWUpKQotCQkJY29udGludWU7CisJCX0KIAogCQkvKgogCQkgKiBJbnNpZGUgZWFjaCBxdWV1ZSwgd2UgcHJvY2VzcyBlYWNoIGVudHJ5IGluIGEgY2hyb25vbG9naWNhbApAQCAtOTQ2LDI1ICs5MzUsNDkgQEAKIAl1bnNpZ25lZCBpbnQgbGVkbW9kZSA9CiAJCXJ0MngwMF9nZXRfZmllbGQxNihsZWQtPnJ0MngwMGRldi0+bGVkX21jdV9yZWcsCiAJCQkJICAgRUVQUk9NX0ZSRVFfTEVEX01PREUpOworCXUzMiByZWc7CiAKLQlpZiAobGVkLT50eXBlID09IExFRF9UWVBFX1JBRElPKSB7Ci0JCXJ0MjgwMF9tY3VfcmVxdWVzdChsZWQtPnJ0MngwMGRldiwgTUNVX0xFRCwgMHhmZiwgbGVkbW9kZSwKLQkJCQkgICAgICBlbmFibGVkID8gMHgyMCA6IDApOwotCX0gZWxzZSBpZiAobGVkLT50eXBlID09IExFRF9UWVBFX0FTU09DKSB7Ci0JCXJ0MjgwMF9tY3VfcmVxdWVzdChsZWQtPnJ0MngwMGRldiwgTUNVX0xFRCwgMHhmZiwgbGVkbW9kZSwKLQkJCQkgICAgICBlbmFibGVkID8gKGJnX21vZGUgPyAweDYwIDogMHhhMCkgOiAweDIwKTsKLQl9IGVsc2UgaWYgKGxlZC0+dHlwZSA9PSBMRURfVFlQRV9RVUFMSVRZKSB7Ci0JCS8qCi0JCSAqIFRoZSBicmlnaHRuZXNzIGlzIGRpdmlkZWQgaW50byA2IGxldmVscyAoMCAtIDUpLAotCQkgKiBUaGUgc3BlY3MgdGVsbCB1cyB0aGUgZm9sbG93aW5nIGxldmVsczoKLQkJICoJMCwgMSAsMywgNywgMTUsIDMxCi0JCSAqIHRvIGRldGVybWluZSB0aGUgbGV2ZWwgaW4gYSBzaW1wbGUgd2F5IHdlIGNhbiBzaW1wbHkKLQkJICogd29yayB3aXRoIGJpdHNoaWZ0aW5nOgotCQkgKgkoMSA8PCBsZXZlbCkgLSAxCi0JCSAqLwotCQlydDI4MDBfbWN1X3JlcXVlc3QobGVkLT5ydDJ4MDBkZXYsIE1DVV9MRURfU1RSRU5HVEgsIDB4ZmYsCi0JCQkJICAgICAgKDEgPDwgYnJpZ2h0bmVzcyAvIChMRURfRlVMTCAvIDYpKSAtIDEsCi0JCQkJICAgICAgcG9sYXJpdHkpOworCS8qIENoZWNrIGZvciBTb0MgKFNPQyBkZXZpY2VzIGRvbid0IHN1cHBvcnQgTUNVIHJlcXVlc3RzKSAqLworCWlmIChydDJ4MDBfaXNfc29jKGxlZC0+cnQyeDAwZGV2KSkgeworCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChsZWQtPnJ0MngwMGRldiwgTEVEX0NGRywgJnJlZyk7CisKKwkJLyogU2V0IExFRCBQb2xhcml0eSAqLworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTEVEX0NGR19MRURfUE9MQVIsIHBvbGFyaXR5KTsKKworCQkvKiBTZXQgTEVEIE1vZGUgKi8KKwkJaWYgKGxlZC0+dHlwZSA9PSBMRURfVFlQRV9SQURJTykgeworCQkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIExFRF9DRkdfR19MRURfTU9ERSwKKwkJCQkJICAgZW5hYmxlZCA/IDMgOiAwKTsKKwkJfSBlbHNlIGlmIChsZWQtPnR5cGUgPT0gTEVEX1RZUEVfQVNTT0MpIHsKKwkJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBMRURfQ0ZHX1lfTEVEX01PREUsCisJCQkJCSAgIGVuYWJsZWQgPyAzIDogMCk7CisJCX0gZWxzZSBpZiAobGVkLT50eXBlID09IExFRF9UWVBFX1FVQUxJVFkpIHsKKwkJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBMRURfQ0ZHX1JfTEVEX01PREUsCisJCQkJCSAgIGVuYWJsZWQgPyAzIDogMCk7CisJCX0KKworCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUobGVkLT5ydDJ4MDBkZXYsIExFRF9DRkcsIHJlZyk7CisKKwl9IGVsc2UgeworCQlpZiAobGVkLT50eXBlID09IExFRF9UWVBFX1JBRElPKSB7CisJCQlydDI4MDBfbWN1X3JlcXVlc3QobGVkLT5ydDJ4MDBkZXYsIE1DVV9MRUQsIDB4ZmYsIGxlZG1vZGUsCisJCQkJCSAgICAgIGVuYWJsZWQgPyAweDIwIDogMCk7CisJCX0gZWxzZSBpZiAobGVkLT50eXBlID09IExFRF9UWVBFX0FTU09DKSB7CisJCQlydDI4MDBfbWN1X3JlcXVlc3QobGVkLT5ydDJ4MDBkZXYsIE1DVV9MRUQsIDB4ZmYsIGxlZG1vZGUsCisJCQkJCSAgICAgIGVuYWJsZWQgPyAoYmdfbW9kZSA/IDB4NjAgOiAweGEwKSA6IDB4MjApOworCQl9IGVsc2UgaWYgKGxlZC0+dHlwZSA9PSBMRURfVFlQRV9RVUFMSVRZKSB7CisJCQkvKgorCQkJICogVGhlIGJyaWdodG5lc3MgaXMgZGl2aWRlZCBpbnRvIDYgbGV2ZWxzICgwIC0gNSksCisJCQkgKiBUaGUgc3BlY3MgdGVsbCB1cyB0aGUgZm9sbG93aW5nIGxldmVsczoKKwkJCSAqCTAsIDEgLDMsIDcsIDE1LCAzMQorCQkJICogdG8gZGV0ZXJtaW5lIHRoZSBsZXZlbCBpbiBhIHNpbXBsZSB3YXkgd2UgY2FuIHNpbXBseQorCQkJICogd29yayB3aXRoIGJpdHNoaWZ0aW5nOgorCQkJICoJKDEgPDwgbGV2ZWwpIC0gMQorCQkJICovCisJCQlydDI4MDBfbWN1X3JlcXVlc3QobGVkLT5ydDJ4MDBkZXYsIE1DVV9MRURfU1RSRU5HVEgsIDB4ZmYsCisJCQkJCSAgICAgICgxIDw8IGJyaWdodG5lc3MgLyAoTEVEX0ZVTEwgLyA2KSkgLSAxLAorCQkJCQkgICAgICBwb2xhcml0eSk7CisJCX0KIAl9CiB9CiAKQEAgLTEyMTgsNiArMTIzMSwyNSBAQAogCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEJDTl9USU1FX0NGRywgJnJlZyk7CiAJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQ05fVElNRV9DRkdfVFNGX1NZTkMsIGNvbmYtPnN5bmMpOwogCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBCQ05fVElNRV9DRkcsIHJlZyk7CisKKwkJaWYgKGNvbmYtPnN5bmMgPT0gVFNGX1NZTkNfQVBfTk9ORSkgeworCQkJLyoKKwkJCSAqIFR1bmUgYmVhY29uIHF1ZXVlIHRyYW5zbWl0IHBhcmFtZXRlcnMgZm9yIEFQIG1vZGUKKwkJCSAqLworCQkJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUQlRUX1NZTkNfQ0ZHLCAmcmVnKTsKKwkJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUQlRUX1NZTkNfQ0ZHX0JDTl9DV01JTiwgMCk7CisJCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVEJUVF9TWU5DX0NGR19CQ05fQUlGU04sIDEpOworCQkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRCVFRfU1lOQ19DRkdfQkNOX0VYUF9XSU4sIDMyKTsKKwkJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUQlRUX1NZTkNfQ0ZHX1RCVFRfQURKVVNULCAwKTsKKwkJCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRCVFRfU1lOQ19DRkcsIHJlZyk7CisJCX0gZWxzZSB7CisJCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRCVFRfU1lOQ19DRkcsICZyZWcpOworCQkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRCVFRfU1lOQ19DRkdfQkNOX0NXTUlOLCA0KTsKKwkJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUQlRUX1NZTkNfQ0ZHX0JDTl9BSUZTTiwgMik7CisJCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVEJUVF9TWU5DX0NGR19CQ05fRVhQX1dJTiwgMzIpOworCQkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRCVFRfU1lOQ19DRkdfVEJUVF9BREpVU1QsIDE2KTsKKwkJCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRCVFRfU1lOQ19DRkcsIHJlZyk7CisJCX0KIAl9CiAKIAlpZiAoZmxhZ3MgJiBDT05GSUdfVVBEQVRFX01BQykgewpAQCAtMTYwOCw3ICsxNjQwLDYgQEAKIAkJCQkJIHN0cnVjdCBjaGFubmVsX2luZm8gKmluZm8pCiB7CiAJdTggcmZjc3I7Ci0JdTE2IGVlcHJvbTsKIAogCXJ0MjgwMF9yZmNzcl93cml0ZShydDJ4MDBkZXYsIDgsIHJmLT5yZjEpOwogCXJ0MjgwMF9yZmNzcl93cml0ZShydDJ4MDBkZXYsIDksIHJmLT5yZjMpOwpAQCAtMTYzOCwxMSArMTY2OSwxMCBAQAogCQlydDJ4MDBfc2V0X2ZpZWxkOCgmcmZjc3IsIFJGQ1NSMTdfQ09ERSwgcnQyeDAwZGV2LT5mcmVxX29mZnNldCk7CiAJcnQyODAwX3JmY3NyX3dyaXRlKHJ0MngwMGRldiwgMTcsIHJmY3NyKTsKIAotCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9OSUNfQ09ORjEsICZlZXByb20pOwogCWlmIChyZi0+Y2hhbm5lbCA8PSAxNCkgewogCQlpbnQgaWR4ID0gcmYtPmNoYW5uZWwtMTsKIAotCQlpZiAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX05JQ19DT05GMV9CVF9DT0VYSVNUKSkgeworCQlpZiAodGVzdF9iaXQoQ0FQQUJJTElUWV9CVF9DT0VYSVNULCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKSB7CiAJCQlpZiAocnQyeDAwX3J0X3Jldl9ndGUocnQyeDAwZGV2LCBSVDUzOTAsIFJFVl9SVDUzOTBGKSkgewogCQkJCS8qIHI1NS9yNTkgdmFsdWUgYXJyYXkgb2YgY2hhbm5lbCAxfjE0ICovCiAJCQkJc3RhdGljIGNvbnN0IGNoYXIgcjU1X2J0X3JldltdID0gezB4ODMsIDB4ODMsCkBAIC0xNzIxLDcgKzE3NTEsOCBAQAogCSAgICBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMwNTIpIHx8CiAJICAgIHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMzMyMCkpCiAJCXJ0MjgwMF9jb25maWdfY2hhbm5lbF9yZjN4eHgocnQyeDAwZGV2LCBjb25mLCByZiwgaW5mbyk7Ci0JZWxzZSBpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MzkwKSkKKwllbHNlIGlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjUzNzApIHx8CisJCSBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjUzOTApKQogCQlydDI4MDBfY29uZmlnX2NoYW5uZWxfcmY1M3h4KHJ0MngwMGRldiwgY29uZiwgcmYsIGluZm8pOwogCWVsc2UKIAkJcnQyODAwX2NvbmZpZ19jaGFubmVsX3JmMnh4eChydDJ4MDBkZXYsIGNvbmYsIHJmLCBpbmZvKTsKQEAgLTE3MzYsOCArMTc2Nyw4IEBACiAKIAlpZiAocmYtPmNoYW5uZWwgPD0gMTQpIHsKIAkJaWYgKCFydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDUzOTApKSB7Ci0JCQlpZiAodGVzdF9iaXQoQ09ORklHX0VYVEVSTkFMX0xOQV9CRywKLQkJCQkgICAgICZydDJ4MDBkZXYtPmZsYWdzKSkgeworCQkJaWYgKHRlc3RfYml0KENBUEFCSUxJVFlfRVhURVJOQUxfTE5BX0JHLAorCQkJCSAgICAgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkgewogCQkJCXJ0MjgwMF9iYnBfd3JpdGUocnQyeDAwZGV2LCA4MiwgMHg2Mik7CiAJCQkJcnQyODAwX2JicF93cml0ZShydDJ4MDBkZXYsIDc1LCAweDQ2KTsKIAkJCX0gZWxzZSB7CkBAIC0xNzQ4LDcgKzE3NzksNyBAQAogCX0gZWxzZSB7CiAJCXJ0MjgwMF9iYnBfd3JpdGUocnQyeDAwZGV2LCA4MiwgMHhmMik7CiAKLQkJaWYgKHRlc3RfYml0KENPTkZJR19FWFRFUk5BTF9MTkFfQSwgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlpZiAodGVzdF9iaXQoQ0FQQUJJTElUWV9FWFRFUk5BTF9MTkFfQSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkKIAkJCXJ0MjgwMF9iYnBfd3JpdGUocnQyeDAwZGV2LCA3NSwgMHg0Nik7CiAJCWVsc2UKIAkJCXJ0MjgwMF9iYnBfd3JpdGUocnQyeDAwZGV2LCA3NSwgMHg1MCk7CkBAIC0xODEzLDE3ICsxODQ0LDEzMSBAQAogCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQ0hfQlVTWV9TVEFfU0VDLCAmcmVnKTsKIH0KIAorc3RhdGljIGludCBydDI4MDBfZ2V0X2dhaW5fY2FsaWJyYXRpb25fZGVsdGEoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwl1OCB0c3NpX2JvdW5kc1s5XTsKKwl1OCBjdXJyZW50X3Rzc2k7CisJdTE2IGVlcHJvbTsKKwl1OCBzdGVwOworCWludCBpOworCisJLyoKKwkgKiBSZWFkIFRTU0kgYm91bmRhcmllcyBmb3IgdGVtcGVyYXR1cmUgY29tcGVuc2F0aW9uIGZyb20KKwkgKiB0aGUgRUVQUk9NLgorCSAqCisJICogQXJyYXkgaWR4ICAgICAgICAgICAgICAgMCAgICAxICAgIDIgICAgMyAgICA0ICAgIDUgICAgNiAgICA3ICAgIDgKKwkgKiBNYXRjaGluZyBEZWx0YSB2YWx1ZSAgIC00ICAgLTMgICAtMiAgIC0xICAgIDAgICArMSAgICsyICAgKzMgICArNAorCSAqIEV4YW1wbGUgVFNTSSBib3VuZHMgIDB4RjAgMHhEMCAweEI1IDB4QTAgMHg4OCAweDQ1IDB4MjUgMHgxNSAweDAwCisJICovCisJaWYgKHJ0MngwMGRldi0+Y3Vycl9iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKKwkJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX1RTU0lfQk9VTkRfQkcxLCAmZWVwcm9tKTsKKwkJdHNzaV9ib3VuZHNbMF0gPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLAorCQkJCQlFRVBST01fVFNTSV9CT1VORF9CRzFfTUlOVVM0KTsKKwkJdHNzaV9ib3VuZHNbMV0gPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLAorCQkJCQlFRVBST01fVFNTSV9CT1VORF9CRzFfTUlOVVMzKTsKKworCQlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fVFNTSV9CT1VORF9CRzIsICZlZXByb20pOworCQl0c3NpX2JvdW5kc1syXSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sCisJCQkJCUVFUFJPTV9UU1NJX0JPVU5EX0JHMl9NSU5VUzIpOworCQl0c3NpX2JvdW5kc1szXSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sCisJCQkJCUVFUFJPTV9UU1NJX0JPVU5EX0JHMl9NSU5VUzEpOworCisJCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9UU1NJX0JPVU5EX0JHMywgJmVlcHJvbSk7CisJCXRzc2lfYm91bmRzWzRdID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKKwkJCQkJRUVQUk9NX1RTU0lfQk9VTkRfQkczX1JFRik7CisJCXRzc2lfYm91bmRzWzVdID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKKwkJCQkJRUVQUk9NX1RTU0lfQk9VTkRfQkczX1BMVVMxKTsKKworCQlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fVFNTSV9CT1VORF9CRzQsICZlZXByb20pOworCQl0c3NpX2JvdW5kc1s2XSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sCisJCQkJCUVFUFJPTV9UU1NJX0JPVU5EX0JHNF9QTFVTMik7CisJCXRzc2lfYm91bmRzWzddID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKKwkJCQkJRUVQUk9NX1RTU0lfQk9VTkRfQkc0X1BMVVMzKTsKKworCQlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fVFNTSV9CT1VORF9CRzUsICZlZXByb20pOworCQl0c3NpX2JvdW5kc1s4XSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sCisJCQkJCUVFUFJPTV9UU1NJX0JPVU5EX0JHNV9QTFVTNCk7CisKKwkJc3RlcCA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sCisJCQkJCSAgRUVQUk9NX1RTU0lfQk9VTkRfQkc1X0FHQ19TVEVQKTsKKwl9IGVsc2UgeworCQlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fVFNTSV9CT1VORF9BMSwgJmVlcHJvbSk7CisJCXRzc2lfYm91bmRzWzBdID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKKwkJCQkJRUVQUk9NX1RTU0lfQk9VTkRfQTFfTUlOVVM0KTsKKwkJdHNzaV9ib3VuZHNbMV0gPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLAorCQkJCQlFRVBST01fVFNTSV9CT1VORF9BMV9NSU5VUzMpOworCisJCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9UU1NJX0JPVU5EX0EyLCAmZWVwcm9tKTsKKwkJdHNzaV9ib3VuZHNbMl0gPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLAorCQkJCQlFRVBST01fVFNTSV9CT1VORF9BMl9NSU5VUzIpOworCQl0c3NpX2JvdW5kc1szXSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sCisJCQkJCUVFUFJPTV9UU1NJX0JPVU5EX0EyX01JTlVTMSk7CisKKwkJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX1RTU0lfQk9VTkRfQTMsICZlZXByb20pOworCQl0c3NpX2JvdW5kc1s0XSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sCisJCQkJCUVFUFJPTV9UU1NJX0JPVU5EX0EzX1JFRik7CisJCXRzc2lfYm91bmRzWzVdID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKKwkJCQkJRUVQUk9NX1RTU0lfQk9VTkRfQTNfUExVUzEpOworCisJCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9UU1NJX0JPVU5EX0E0LCAmZWVwcm9tKTsKKwkJdHNzaV9ib3VuZHNbNl0gPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLAorCQkJCQlFRVBST01fVFNTSV9CT1VORF9BNF9QTFVTMik7CisJCXRzc2lfYm91bmRzWzddID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKKwkJCQkJRUVQUk9NX1RTU0lfQk9VTkRfQTRfUExVUzMpOworCisJCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9UU1NJX0JPVU5EX0E1LCAmZWVwcm9tKTsKKwkJdHNzaV9ib3VuZHNbOF0gPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLAorCQkJCQlFRVBST01fVFNTSV9CT1VORF9BNV9QTFVTNCk7CisKKwkJc3RlcCA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sCisJCQkJCSAgRUVQUk9NX1RTU0lfQk9VTkRfQTVfQUdDX1NURVApOworCX0KKworCS8qCisJICogQ2hlY2sgaWYgdGVtcGVyYXR1cmUgY29tcGVuc2F0aW9uIGlzIHN1cHBvcnRlZC4KKwkgKi8KKwlpZiAodHNzaV9ib3VuZHNbNF0gPT0gMHhmZikKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFJlYWQgY3VycmVudCBUU1NJIChCQlAgNDkpLgorCSAqLworCXJ0MjgwMF9iYnBfcmVhZChydDJ4MDBkZXYsIDQ5LCAmY3VycmVudF90c3NpKTsKKworCS8qCisJICogQ29tcGFyZSBUU1NJIHZhbHVlIChCQlA0OSkgd2l0aCB0aGUgY29tcGVuc2F0aW9uIGJvdW5kYXJpZXMKKwkgKiBmcm9tIHRoZSBFRVBST00gYW5kIGluY3JlYXNlIG9yIGRlY3JlYXNlIHR4IHBvd2VyLgorCSAqLworCWZvciAoaSA9IDA7IGkgPD0gMzsgaSsrKSB7CisJCWlmIChjdXJyZW50X3Rzc2kgPiB0c3NpX2JvdW5kc1tpXSkKKwkJCWJyZWFrOworCX0KKworCWlmIChpID09IDQpIHsKKwkJZm9yIChpID0gODsgaSA+PSA1OyBpLS0pIHsKKwkJCWlmIChjdXJyZW50X3Rzc2kgPCB0c3NpX2JvdW5kc1tpXSkKKwkJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiAoaSAtIDQpICogc3RlcDsKK30KKwogc3RhdGljIGludCBydDI4MDBfZ2V0X3R4cG93ZXJfYndfY29tcChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJCSAgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKIHsKIAl1MTYgZWVwcm9tOwogCXU4IGNvbXBfZW47CiAJdTggY29tcF90eXBlOwotCWludCBjb21wX3ZhbHVlOworCWludCBjb21wX3ZhbHVlID0gMDsKIAogCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9UWFBPV0VSX0RFTFRBLCAmZWVwcm9tKTsKIAotCWlmIChlZXByb20gPT0gMHhmZmZmKQorCS8qCisJICogSFQ0MCBjb21wZW5zYXRpb24gbm90IHJlcXVpcmVkLgorCSAqLworCWlmIChlZXByb20gPT0gMHhmZmZmIHx8CisJICAgICF0ZXN0X2JpdChDT05GSUdfQ0hBTk5FTF9IVDQwLCAmcnQyeDAwZGV2LT5mbGFncykpCiAJCXJldHVybiAwOwogCiAJaWYgKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgewpAQCAtMTg1MywxMSArMTk5OCw5IEBACiAJcmV0dXJuIGNvbXBfdmFsdWU7CiB9CiAKLXN0YXRpYyB1OCBydDI4MDBfY29tcGVzYXRlX3R4cG93ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCQkgICAgIGludCBpc19yYXRlX2IsCi0JCQkJICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCi0JCQkJICAgICBpbnQgcG93ZXJfbGV2ZWwsCi0JCQkJICAgICB1OCB0eHBvd2VyKQorc3RhdGljIHU4IHJ0MjgwMF9jb21wZW5zYXRlX3R4cG93ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgaW50IGlzX3JhdGVfYiwKKwkJCQkgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsIGludCBwb3dlcl9sZXZlbCwKKwkJCQkgICB1OCB0eHBvd2VyLCBpbnQgZGVsdGEpCiB7CiAJdTMyIHJlZzsKIAl1MTYgZWVwcm9tOwpAQCAtMTg2NSwxNSArMjAwOCwxMSBAQAogCXU4IGVpcnBfdHhwb3dlcjsKIAl1OCBlaXJwX3R4cG93ZXJfY3JpdGVyaW9uOwogCXU4IHJlZ19saW1pdDsKLQlpbnQgYndfY29tcCA9IDA7CiAKIAlpZiAoISgoYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSAmJiBpc19yYXRlX2IpKQogCQlyZXR1cm4gdHhwb3dlcjsKIAotCWlmICh0ZXN0X2JpdChDT05GSUdfQ0hBTk5FTF9IVDQwLCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCWJ3X2NvbXAgPSBydDI4MDBfZ2V0X3R4cG93ZXJfYndfY29tcChydDJ4MDBkZXYsIGJhbmQpOwotCi0JaWYgKHRlc3RfYml0KENPTkZJR19TVVBQT1JUX1BPV0VSX0xJTUlULCAmcnQyeDAwZGV2LT5mbGFncykpIHsKKwlpZiAodGVzdF9iaXQoQ0FQQUJJTElUWV9QT1dFUl9MSU1JVCwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkgewogCQkvKgogCQkgKiBDaGVjayBpZiBlaXJwIHR4cG93ZXIgZXhjZWVkIHR4cG93ZXJfbGltaXQuCiAJCSAqIFdlIHVzZSBPRkRNIDZNIGFzIGNyaXRlcmlvbiBhbmQgaXRzIGVpcnAgdHhwb3dlcgpAQCAtMTg5NSwxOCArMjAzNCwxOSBAQAogCQkJCQkJIEVFUFJPTV9FSVJQX01BWF9UWF9QT1dFUl81R0haKTsKIAogCQllaXJwX3R4cG93ZXIgPSBlaXJwX3R4cG93ZXJfY3JpdGVyaW9uICsgKHR4cG93ZXIgLSBjcml0ZXJpb24pICsKLQkJCQkgICAgICAgKGlzX3JhdGVfYiA/IDQgOiAwKSArIGJ3X2NvbXA7CisJCQkgICAgICAgKGlzX3JhdGVfYiA/IDQgOiAwKSArIGRlbHRhOwogCiAJCXJlZ19saW1pdCA9IChlaXJwX3R4cG93ZXIgPiBwb3dlcl9sZXZlbCkgPwogCQkJCQkoZWlycF90eHBvd2VyIC0gcG93ZXJfbGV2ZWwpIDogMDsKIAl9IGVsc2UKIAkJcmVnX2xpbWl0ID0gMDsKIAotCXJldHVybiB0eHBvd2VyICsgYndfY29tcCAtIHJlZ19saW1pdDsKKwlyZXR1cm4gdHhwb3dlciArIGRlbHRhIC0gcmVnX2xpbWl0OwogfQogCiBzdGF0aWMgdm9pZCBydDI4MDBfY29uZmlnX3R4cG93ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZikKKwkJCQkgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKKwkJCQkgIGludCBwb3dlcl9sZXZlbCkKIHsKIAl1OCB0eHBvd2VyOwogCXUxNiBlZXByb207CkBAIC0xOTE0LDggKzIwNTQsMTcgQEAKIAl1MzIgcmVnOwogCXU4IHIxOwogCXUzMiBvZmZzZXQ7Ci0JZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kID0gY29uZi0+Y2hhbm5lbC0+YmFuZDsKLQlpbnQgcG93ZXJfbGV2ZWwgPSBjb25mLT5wb3dlcl9sZXZlbDsKKwlpbnQgZGVsdGE7CisKKwkvKgorCSAqIENhbGN1bGF0ZSBIVDQwIGNvbXBlbnNhdGlvbiBkZWx0YQorCSAqLworCWRlbHRhID0gcnQyODAwX2dldF90eHBvd2VyX2J3X2NvbXAocnQyeDAwZGV2LCBiYW5kKTsKKworCS8qCisJICogY2FsY3VsYXRlIHRlbXBlcmF0dXJlIGNvbXBlbnNhdGlvbiBkZWx0YQorCSAqLworCWRlbHRhICs9IHJ0MjgwMF9nZXRfZ2Fpbl9jYWxpYnJhdGlvbl9kZWx0YShydDJ4MDBkZXYpOwogCiAJLyoKIAkgKiBzZXQgdG8gbm9ybWFsIGJicCB0eCBwb3dlciBjb250cm9sIG1vZGU6ICsvLSAwZEJtCkBAIC0xOTQ0LDggKzIwOTMsOCBAQAogCQkgKi8KIAkJdHhwb3dlciA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sCiAJCQkJCSAgICAgRUVQUk9NX1RYUE9XRVJfQllSQVRFX1JBVEUwKTsKLQkJdHhwb3dlciA9IHJ0MjgwMF9jb21wZXNhdGVfdHhwb3dlcihydDJ4MDBkZXYsIGlzX3JhdGVfYiwgYmFuZCwKLQkJCQkJICAgICBwb3dlcl9sZXZlbCwgdHhwb3dlcik7CisJCXR4cG93ZXIgPSBydDI4MDBfY29tcGVuc2F0ZV90eHBvd2VyKHJ0MngwMGRldiwgaXNfcmF0ZV9iLCBiYW5kLAorCQkJCQkgICAgIHBvd2VyX2xldmVsLCB0eHBvd2VyLCBkZWx0YSk7CiAJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHX1JBVEUwLCB0eHBvd2VyKTsKIAogCQkvKgpAQCAtMTk1NSw4ICsyMTA0LDggQEAKIAkJICovCiAJCXR4cG93ZXIgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLAogCQkJCQkgICAgIEVFUFJPTV9UWFBPV0VSX0JZUkFURV9SQVRFMSk7Ci0JCXR4cG93ZXIgPSBydDI4MDBfY29tcGVzYXRlX3R4cG93ZXIocnQyeDAwZGV2LCBpc19yYXRlX2IsIGJhbmQsCi0JCQkJCSAgICAgcG93ZXJfbGV2ZWwsIHR4cG93ZXIpOworCQl0eHBvd2VyID0gcnQyODAwX2NvbXBlbnNhdGVfdHhwb3dlcihydDJ4MDBkZXYsIGlzX3JhdGVfYiwgYmFuZCwKKwkJCQkJICAgICBwb3dlcl9sZXZlbCwgdHhwb3dlciwgZGVsdGEpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfUFdSX0NGR19SQVRFMSwgdHhwb3dlcik7CiAKIAkJLyoKQEAgLTE5NjYsOCArMjExNSw4IEBACiAJCSAqLwogCQl0eHBvd2VyID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKIAkJCQkJICAgICBFRVBST01fVFhQT1dFUl9CWVJBVEVfUkFURTIpOwotCQl0eHBvd2VyID0gcnQyODAwX2NvbXBlc2F0ZV90eHBvd2VyKHJ0MngwMGRldiwgaXNfcmF0ZV9iLCBiYW5kLAotCQkJCQkgICAgIHBvd2VyX2xldmVsLCB0eHBvd2VyKTsKKwkJdHhwb3dlciA9IHJ0MjgwMF9jb21wZW5zYXRlX3R4cG93ZXIocnQyeDAwZGV2LCBpc19yYXRlX2IsIGJhbmQsCisJCQkJCSAgICAgcG93ZXJfbGV2ZWwsIHR4cG93ZXIsIGRlbHRhKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX1BXUl9DRkdfUkFURTIsIHR4cG93ZXIpOwogCiAJCS8qCkBAIC0xOTc3LDggKzIxMjYsOCBAQAogCQkgKi8KIAkJdHhwb3dlciA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sCiAJCQkJCSAgICAgRUVQUk9NX1RYUE9XRVJfQllSQVRFX1JBVEUzKTsKLQkJdHhwb3dlciA9IHJ0MjgwMF9jb21wZXNhdGVfdHhwb3dlcihydDJ4MDBkZXYsIGlzX3JhdGVfYiwgYmFuZCwKLQkJCQkJICAgICBwb3dlcl9sZXZlbCwgdHhwb3dlcik7CisJCXR4cG93ZXIgPSBydDI4MDBfY29tcGVuc2F0ZV90eHBvd2VyKHJ0MngwMGRldiwgaXNfcmF0ZV9iLCBiYW5kLAorCQkJCQkgICAgIHBvd2VyX2xldmVsLCB0eHBvd2VyLCBkZWx0YSk7CiAJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHX1JBVEUzLCB0eHBvd2VyKTsKIAogCQkvKiByZWFkIHRoZSBuZXh0IGZvdXIgdHhwb3dlciB2YWx1ZXMgKi8KQEAgLTE5OTMsOCArMjE0Miw4IEBACiAJCSAqLwogCQl0eHBvd2VyID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKIAkJCQkJICAgICBFRVBST01fVFhQT1dFUl9CWVJBVEVfUkFURTApOwotCQl0eHBvd2VyID0gcnQyODAwX2NvbXBlc2F0ZV90eHBvd2VyKHJ0MngwMGRldiwgaXNfcmF0ZV9iLCBiYW5kLAotCQkJCQkgICAgIHBvd2VyX2xldmVsLCB0eHBvd2VyKTsKKwkJdHhwb3dlciA9IHJ0MjgwMF9jb21wZW5zYXRlX3R4cG93ZXIocnQyeDAwZGV2LCBpc19yYXRlX2IsIGJhbmQsCisJCQkJCSAgICAgcG93ZXJfbGV2ZWwsIHR4cG93ZXIsIGRlbHRhKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX1BXUl9DRkdfUkFURTQsIHR4cG93ZXIpOwogCiAJCS8qCkBAIC0yMDA0LDggKzIxNTMsOCBAQAogCQkgKi8KIAkJdHhwb3dlciA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sCiAJCQkJCSAgICAgRUVQUk9NX1RYUE9XRVJfQllSQVRFX1JBVEUxKTsKLQkJdHhwb3dlciA9IHJ0MjgwMF9jb21wZXNhdGVfdHhwb3dlcihydDJ4MDBkZXYsIGlzX3JhdGVfYiwgYmFuZCwKLQkJCQkJICAgICBwb3dlcl9sZXZlbCwgdHhwb3dlcik7CisJCXR4cG93ZXIgPSBydDI4MDBfY29tcGVuc2F0ZV90eHBvd2VyKHJ0MngwMGRldiwgaXNfcmF0ZV9iLCBiYW5kLAorCQkJCQkgICAgIHBvd2VyX2xldmVsLCB0eHBvd2VyLCBkZWx0YSk7CiAJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9QV1JfQ0ZHX1JBVEU1LCB0eHBvd2VyKTsKIAogCQkvKgpAQCAtMjAxNSw4ICsyMTY0LDggQEAKIAkJICovCiAJCXR4cG93ZXIgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLAogCQkJCQkgICAgIEVFUFJPTV9UWFBPV0VSX0JZUkFURV9SQVRFMik7Ci0JCXR4cG93ZXIgPSBydDI4MDBfY29tcGVzYXRlX3R4cG93ZXIocnQyeDAwZGV2LCBpc19yYXRlX2IsIGJhbmQsCi0JCQkJCSAgICAgcG93ZXJfbGV2ZWwsIHR4cG93ZXIpOworCQl0eHBvd2VyID0gcnQyODAwX2NvbXBlbnNhdGVfdHhwb3dlcihydDJ4MDBkZXYsIGlzX3JhdGVfYiwgYmFuZCwKKwkJCQkJICAgICBwb3dlcl9sZXZlbCwgdHhwb3dlciwgZGVsdGEpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfUFdSX0NGR19SQVRFNiwgdHhwb3dlcik7CiAKIAkJLyoKQEAgLTIwMjYsOCArMjE3NSw4IEBACiAJCSAqLwogCQl0eHBvd2VyID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwKIAkJCQkJICAgICBFRVBST01fVFhQT1dFUl9CWVJBVEVfUkFURTMpOwotCQl0eHBvd2VyID0gcnQyODAwX2NvbXBlc2F0ZV90eHBvd2VyKHJ0MngwMGRldiwgaXNfcmF0ZV9iLCBiYW5kLAotCQkJCQkgICAgIHBvd2VyX2xldmVsLCB0eHBvd2VyKTsKKwkJdHhwb3dlciA9IHJ0MjgwMF9jb21wZW5zYXRlX3R4cG93ZXIocnQyeDAwZGV2LCBpc19yYXRlX2IsIGJhbmQsCisJCQkJCSAgICAgcG93ZXJfbGV2ZWwsIHR4cG93ZXIsIGRlbHRhKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX1BXUl9DRkdfUkFURTcsIHR4cG93ZXIpOwogCiAJCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIG9mZnNldCwgcmVnKTsKQEAgLTIwMzcsNiArMjE4NiwxMyBAQAogCX0KIH0KIAordm9pZCBydDI4MDBfZ2Fpbl9jYWxpYnJhdGlvbihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXJ0MjgwMF9jb25maWdfdHhwb3dlcihydDJ4MDBkZXYsIHJ0MngwMGRldi0+Y3Vycl9iYW5kLAorCQkJICAgICAgcnQyeDAwZGV2LT50eF9wb3dlcik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydDI4MDBfZ2Fpbl9jYWxpYnJhdGlvbik7CisKIHN0YXRpYyB2b2lkIHJ0MjgwMF9jb25maWdfcmV0cnlfbGltaXQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCQkgICAgICBzdHJ1Y3QgcnQyeDAwbGliX2NvbmYgKmxpYmNvbmYpCiB7CkBAIC0yMDkwLDEwICsyMjQ2LDEyIEBACiAJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpIHsKIAkJcnQyODAwX2NvbmZpZ19jaGFubmVsKHJ0MngwMGRldiwgbGliY29uZi0+Y29uZiwKIAkJCQkgICAgICAmbGliY29uZi0+cmYsICZsaWJjb25mLT5jaGFubmVsKTsKLQkJcnQyODAwX2NvbmZpZ190eHBvd2VyKHJ0MngwMGRldiwgbGliY29uZi0+Y29uZik7CisJCXJ0MjgwMF9jb25maWdfdHhwb3dlcihydDJ4MDBkZXYsIGxpYmNvbmYtPmNvbmYtPmNoYW5uZWwtPmJhbmQsCisJCQkJICAgICAgbGliY29uZi0+Y29uZi0+cG93ZXJfbGV2ZWwpOwogCX0KIAlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUE9XRVIpCi0JCXJ0MjgwMF9jb25maWdfdHhwb3dlcihydDJ4MDBkZXYsIGxpYmNvbmYtPmNvbmYpOworCQlydDI4MDBfY29uZmlnX3R4cG93ZXIocnQyeDAwZGV2LCBsaWJjb25mLT5jb25mLT5jaGFubmVsLT5iYW5kLAorCQkJCSAgICAgIGxpYmNvbmYtPmNvbmYtPnBvd2VyX2xldmVsKTsKIAlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUkVUUllfTElNSVRTKQogCQlydDI4MDBfY29uZmlnX3JldHJ5X2xpbWl0KHJ0MngwMGRldiwgbGliY29uZik7CiAJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKQpAQCAtMjI1NCw3ICsyNDEyLDcgQEAKIAl9IGVsc2UgaWYgKHJ0MjgwMF9pc18zMDV4X3NvYyhydDJ4MDBkZXYpKSB7CiAJCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX1NXX0NGRzAsIDB4MDAwMDA0MDApOwogCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9TV19DRkcxLCAweDAwMDAwMDAwKTsKLQkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfU1dfQ0ZHMiwgMHgwMDAwMDAxZik7CisJCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX1NXX0NGRzIsIDB4MDAwMDAwMzApOwogCX0gZWxzZSBpZiAocnQyeDAwX3J0KHJ0MngwMGRldiwgUlQ1MzkwKSkgewogCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9TV19DRkcwLCAweDAwMDAwNDA0KTsKIAkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfU1dfQ0ZHMSwgMHgwMDA4MDYwNik7CkBAIC0yNzU4LDggKzI5MTYsNyBAQAogCQlhbnQgPSAoZGl2X21vZGUgPT0gMykgPyAxIDogMDsKIAogCQkvKiBjaGVjayBpZiB0aGlzIGlzIGEgQmx1ZXRvb3RoIGNvbWJvIGNhcmQgKi8KLQkJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX05JQ19DT05GMSwgJmVlcHJvbSk7Ci0JCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTklDX0NPTkYxX0JUX0NPRVhJU1QpKSB7CisJCWlmICh0ZXN0X2JpdChDQVBBQklMSVRZX0JUX0NPRVhJU1QsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpIHsKIAkJCXUzMiByZWc7CiAKIAkJCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgR1BJT19DVFJMX0NGRywgJnJlZyk7CkBAIC0zMTU1LDggKzMzMTIsOCBAQAogCQkgICAgcnQyeDAwX3J0X3Jldl9sdChydDJ4MDBkZXYsIFJUMzA3MSwgUkVWX1JUMzA3MUUpIHx8CiAJCSAgICBydDJ4MDBfcnRfcmV2X2x0KHJ0MngwMGRldiwgUlQzMDkwLCBSRVZfUlQzMDkwRSkgfHwKIAkJICAgIHJ0MngwMF9ydF9yZXZfbHQocnQyeDAwZGV2LCBSVDMzOTAsIFJFVl9SVDMzOTBFKSkgewotCQkJaWYgKCF0ZXN0X2JpdChDT05GSUdfRVhURVJOQUxfTE5BX0JHLAotCQkJCSAgICAgICZydDJ4MDBkZXYtPmZsYWdzKSkKKwkJCWlmICghdGVzdF9iaXQoQ0FQQUJJTElUWV9FWFRFUk5BTF9MTkFfQkcsCisJCQkJICAgICAgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkKIAkJCQlydDJ4MDBfc2V0X2ZpZWxkOCgmcmZjc3IsIFJGQ1NSMTdfUiwgMSk7CiAJCX0KIAkJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX1RYTUlYRVJfR0FJTl9CRywgJmVlcHJvbSk7CkBAIC0zNTMwLDYgKzM2ODcsNyBAQAogCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMDIyKSAmJgogCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMDUyKSAmJgogCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMzIwKSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MzcwKSAmJgogCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MzkwKSkgewogCQlFUlJPUihydDJ4MDBkZXYsICJJbnZhbGlkIFJGIGNoaXBzZXQgZGV0ZWN0ZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0zNTY4LDI2ICszNzI2LDMwIEBACiAJfQogCiAJLyoKLQkgKiBSZWFkIGZyZXF1ZW5jeSBvZmZzZXQgYW5kIFJGIHByb2dyYW1taW5nIHNlcXVlbmNlLgorCSAqIERldGVybWluZSBleHRlcm5hbCBMTkEgaW5mb3JtYXRpb25zLgogCSAqLwotCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9GUkVRLCAmZWVwcm9tKTsKLQlydDJ4MDBkZXYtPmZyZXFfb2Zmc2V0ID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0ZSRVFfT0ZGU0VUKTsKLQotCS8qCi0JICogUmVhZCBleHRlcm5hbCBMTkEgaW5mb3JtYXRpb25zLgotCSAqLwotCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9OSUNfQ09ORjEsICZlZXByb20pOwotCiAJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9OSUNfQ09ORjFfRVhURVJOQUxfTE5BXzVHKSkKLQkJX19zZXRfYml0KENPTkZJR19FWFRFUk5BTF9MTkFfQSwgJnJ0MngwMGRldi0+ZmxhZ3MpOworCQlfX3NldF9iaXQoQ0FQQUJJTElUWV9FWFRFUk5BTF9MTkFfQSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKIAlpZiAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX05JQ19DT05GMV9FWFRFUk5BTF9MTkFfMkcpKQotCQlfX3NldF9iaXQoQ09ORklHX0VYVEVSTkFMX0xOQV9CRywgJnJ0MngwMGRldi0+ZmxhZ3MpOworCQlfX3NldF9iaXQoQ0FQQUJJTElUWV9FWFRFUk5BTF9MTkFfQkcsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CiAKIAkvKgogCSAqIERldGVjdCBpZiB0aGlzIGRldmljZSBoYXMgYW4gaGFyZHdhcmUgY29udHJvbGxlZCByYWRpby4KIAkgKi8KIAlpZiAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX05JQ19DT05GMV9IV19SQURJTykpCi0JCV9fc2V0X2JpdChDT05GSUdfU1VQUE9SVF9IV19CVVRUT04sICZydDJ4MDBkZXYtPmZsYWdzKTsKKwkJX19zZXRfYml0KENBUEFCSUxJVFlfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOworCisJLyoKKwkgKiBEZXRlY3QgaWYgdGhpcyBkZXZpY2UgaGFzIEJsdWV0b290aCBjby1leGlzdGVuY2UuCisJICovCisJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9OSUNfQ09ORjFfQlRfQ09FWElTVCkpCisJCV9fc2V0X2JpdChDQVBBQklMSVRZX0JUX0NPRVhJU1QsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CisKKwkvKgorCSAqIFJlYWQgZnJlcXVlbmN5IG9mZnNldCBhbmQgUkYgcHJvZ3JhbW1pbmcgc2VxdWVuY2UuCisJICovCisJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX0ZSRVEsICZlZXByb20pOworCXJ0MngwMGRldi0+ZnJlcV9vZmZzZXQgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fRlJFUV9PRkZTRVQpOwogCiAJLyoKIAkgKiBTdG9yZSBsZWQgc2V0dGluZ3MsIGZvciBjb3JyZWN0IGxlZCBiZWhhdmlvdXIuCkBAIC0zNTk3LDcgKzM3NTksNyBAQAogCXJ0MjgwMF9pbml0X2xlZChydDJ4MDBkZXYsICZydDJ4MDBkZXYtPmxlZF9hc3NvYywgTEVEX1RZUEVfQVNTT0MpOwogCXJ0MjgwMF9pbml0X2xlZChydDJ4MDBkZXYsICZydDJ4MDBkZXYtPmxlZF9xdWFsLCBMRURfVFlQRV9RVUFMSVRZKTsKIAotCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9GUkVRLCAmcnQyeDAwZGV2LT5sZWRfbWN1X3JlZyk7CisJcnQyeDAwZGV2LT5sZWRfbWN1X3JlZyA9IGVlcHJvbTsKICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9MRURTICovCiAKIAkvKgpAQCAtMzYwNyw3ICszNzY5LDcgQEAKIAogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fRUlSUF9NQVhfVFhfUE9XRVJfMkdIWikgPAogCQkJCQlFSVJQX01BWF9UWF9QT1dFUl9MSU1JVCkKLQkJX19zZXRfYml0KENPTkZJR19TVVBQT1JUX1BPV0VSX0xJTUlULCAmcnQyeDAwZGV2LT5mbGFncyk7CisJCV9fc2V0X2JpdChDQVBBQklMSVRZX1BPV0VSX0xJTUlULCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zODI4LDYgKzM5OTAsNyBAQAogCQkgICBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMwMjEpIHx8CiAJCSAgIHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMzAyMikgfHwKIAkJICAgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMzIwKSB8fAorCQkgICBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjUzNzApIHx8CiAJCSAgIHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGNTM5MCkpIHsKIAkJc3BlYy0+bnVtX2NoYW5uZWxzID0gMTQ7CiAJCXNwZWMtPmNoYW5uZWxzID0gcmZfdmFsc18zeDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBsaWIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBsaWIuaAppbmRleCAwYzkyZDg2Li5mMmQxNTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwbGliLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMGxpYi5oCkBAIC0xODEsNiArMTgxLDcgQEAKIHZvaWQgcnQyODAwX3Jlc2V0X3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwpOwogdm9pZCBydDI4MDBfbGlua190dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBzdHJ1Y3QgbGlua19xdWFsICpxdWFsLAogCQkgICAgICAgY29uc3QgdTMyIGNvdW50KTsKK3ZvaWQgcnQyODAwX2dhaW5fY2FsaWJyYXRpb24oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CiAKIGludCBydDI4MDBfZW5hYmxlX3JhZGlvKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogdm9pZCBydDI4MDBfZGlzYWJsZV9yYWRpbyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBwY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBwY2kuYwppbmRleCA4MDgwNzNhLi5jYzRhNTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHBjaS5jCkBAIC02Niw3ICs2Niw3IEBACiAJCXJldHVybjsKIAogCWZvciAoaSA9IDA7IGkgPCAyMDA7IGkrKykgewotCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEgyTV9NQUlMQk9YX0NJRCwgJnJlZyk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgSDJNX01BSUxCT1hfQ0lELCAmcmVnKTsKIAogCQlpZiAoKHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIEgyTV9NQUlMQk9YX0NJRF9DTUQwKSA9PSB0b2tlbikgfHwKIAkJICAgIChydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBIMk1fTUFJTEJPWF9DSURfQ01EMSkgPT0gdG9rZW4pIHx8CkBAIC04MCw4ICs4MCw4IEBACiAJaWYgKGkgPT0gMjAwKQogCQlFUlJPUihydDJ4MDBkZXYsICJNQ1UgcmVxdWVzdCBmYWlsZWQsIG5vIHJlc3BvbnNlIGZyb20gaGFyZHdhcmVcbiIpOwogCi0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSDJNX01BSUxCT1hfU1RBVFVTLCB+MCk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSDJNX01BSUxCT1hfQ0lELCB+MCk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSDJNX01BSUxCT1hfU1RBVFVTLCB+MCk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSDJNX01BSUxCT1hfQ0lELCB+MCk7CiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19SQUxJTktfUlQyODhYKSB8fCBkZWZpbmVkKENPTkZJR19SQUxJTktfUlQzMDVYKQpAQCAtMTA1LDcgKzEwNSw3IEBACiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGVlcHJvbS0+ZGF0YTsKIAl1MzIgcmVnOwogCi0JcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBFMlBST01fQ1NSLCAmcmVnKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEUyUFJPTV9DU1IsICZyZWcpOwogCiAJZWVwcm9tLT5yZWdfZGF0YV9pbiA9ICEhcnQyeDAwX2dldF9maWVsZDMyKHJlZywgRTJQUk9NX0NTUl9EQVRBX0lOKTsKIAllZXByb20tPnJlZ19kYXRhX291dCA9ICEhcnQyeDAwX2dldF9maWVsZDMyKHJlZywgRTJQUk9NX0NTUl9EQVRBX09VVCk7CkBAIC0xMjcsNyArMTI3LDcgQEAKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgRTJQUk9NX0NTUl9DSElQX1NFTEVDVCwKIAkJCSAgICEhZWVwcm9tLT5yZWdfY2hpcF9zZWxlY3QpOwogCi0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgRTJQUk9NX0NTUiwgcmVnKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBFMlBST01fQ1NSLCByZWcpOwogfQogCiBzdGF0aWMgdm9pZCBydDI4MDBwY2lfcmVhZF9lZXByb21fcGNpKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCkBAIC0xMzUsNyArMTM1LDcgQEAKIAlzdHJ1Y3QgZWVwcm9tXzkzY3g2IGVlcHJvbTsKIAl1MzIgcmVnOwogCi0JcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBFMlBST01fQ1NSLCAmcmVnKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEUyUFJPTV9DU1IsICZyZWcpOwogCiAJZWVwcm9tLmRhdGEgPSBydDJ4MDBkZXY7CiAJZWVwcm9tLnJlZ2lzdGVyX3JlYWQgPSBydDI4MDBwY2lfZWVwcm9tcmVnaXN0ZXJfcmVhZDsKQEAgLTE5NSw5ICsxOTUsOSBAQAogCiAJc3dpdGNoIChxdWV1ZS0+cWlkKSB7CiAJY2FzZSBRSURfUlg6Ci0JCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCAmcmVnKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfU1lTX0NUUkwsICZyZWcpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX1NZU19DVFJMX0VOQUJMRV9SWCwgMSk7Ci0JCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgcmVnKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCByZWcpOwogCQlicmVhazsKIAljYXNlIFFJRF9CRUFDT046CiAJCS8qCkBAIC0yMDcsMTUgKzIwNywxNSBAQAogCQl0YXNrbGV0X2VuYWJsZSgmcnQyeDAwZGV2LT50YnR0X3Rhc2tsZXQpOwogCQl0YXNrbGV0X2VuYWJsZSgmcnQyeDAwZGV2LT5wcmV0YnR0X3Rhc2tsZXQpOwogCi0JCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQkNOX1RJTUVfQ0ZHLCAmcmVnKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBCQ05fVElNRV9DRkcsICZyZWcpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkNOX1RJTUVfQ0ZHX1RTRl9USUNLSU5HLCAxKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJDTl9USU1FX0NGR19UQlRUX0VOQUJMRSwgMSk7CiAJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQ05fVElNRV9DRkdfQkVBQ09OX0dFTiwgMSk7Ci0JCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEJDTl9USU1FX0NGRywgcmVnKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQkNOX1RJTUVfQ0ZHLCByZWcpOwogCi0JCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgSU5UX1RJTUVSX0VOLCAmcmVnKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBJTlRfVElNRVJfRU4sICZyZWcpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgSU5UX1RJTUVSX0VOX1BSRV9UQlRUX1RJTUVSLCAxKTsKLQkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSU5UX1RJTUVSX0VOLCByZWcpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBJTlRfVElNRVJfRU4sIHJlZyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMjMzLDExICsyMzMsMTMgQEAKIAljYXNlIFFJRF9BQ19CRToKIAljYXNlIFFJRF9BQ19CSzoKIAkJZW50cnkgPSBydDJ4MDBxdWV1ZV9nZXRfZW50cnkocXVldWUsIFFfSU5ERVgpOwotCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9DVFhfSURYKHF1ZXVlLT5xaWQpLCBlbnRyeS0+ZW50cnlfaWR4KTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQ1RYX0lEWChxdWV1ZS0+cWlkKSwKKwkJCQkJIGVudHJ5LT5lbnRyeV9pZHgpOwogCQlicmVhazsKIAljYXNlIFFJRF9NR01UOgogCQllbnRyeSA9IHJ0MngwMHF1ZXVlX2dldF9lbnRyeShxdWV1ZSwgUV9JTkRFWCk7Ci0JCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX0NUWF9JRFgoNSksIGVudHJ5LT5lbnRyeV9pZHgpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9DVFhfSURYKDUpLAorCQkJCQkgZW50cnktPmVudHJ5X2lkeCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMjUxLDIwICsyNTMsMjAgQEAKIAogCXN3aXRjaCAocXVldWUtPnFpZCkgewogCWNhc2UgUUlEX1JYOgotCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgJnJlZyk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCAmcmVnKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19TWVNfQ1RSTF9FTkFCTEVfUlgsIDApOwotCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfU1lTX0NUUkwsIHJlZyk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgcmVnKTsKIAkJYnJlYWs7CiAJY2FzZSBRSURfQkVBQ09OOgotCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEJDTl9USU1FX0NGRywgJnJlZyk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQkNOX1RJTUVfQ0ZHLCAmcmVnKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJDTl9USU1FX0NGR19UU0ZfVElDS0lORywgMCk7CiAJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQ05fVElNRV9DRkdfVEJUVF9FTkFCTEUsIDApOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkNOX1RJTUVfQ0ZHX0JFQUNPTl9HRU4sIDApOwotCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBCQ05fVElNRV9DRkcsIHJlZyk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEJDTl9USU1FX0NGRywgcmVnKTsKIAotCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIElOVF9USU1FUl9FTiwgJnJlZyk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgSU5UX1RJTUVSX0VOLCAmcmVnKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIElOVF9USU1FUl9FTl9QUkVfVEJUVF9USU1FUiwgMCk7Ci0JCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIElOVF9USU1FUl9FTiwgcmVnKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSU5UX1RJTUVSX0VOLCByZWcpOwogCiAJCS8qCiAJCSAqIFdhaXQgZm9yIHRidHQgdGFza2xldHMgdG8gZmluaXNoLgpAQCAtMjk1LDE5ICsyOTcsMTkgQEAKIAkgKi8KIAlyZWcgPSAwOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBQQkZfU1lTX0NUUkxfSE9TVF9SQU1fV1JJVEUsIDEpOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBCRl9TWVNfQ1RSTCwgcmVnKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQQkZfU1lTX0NUUkwsIHJlZyk7CiAKIAkvKgogCSAqIFdyaXRlIGZpcm13YXJlIHRvIGRldmljZS4KIAkgKi8KLQlydDI4MDBfcmVnaXN0ZXJfbXVsdGl3cml0ZShydDJ4MDBkZXYsIEZJUk1XQVJFX0lNQUdFX0JBU0UsCi0JCQkJICAgZGF0YSwgbGVuKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfbXVsdGl3cml0ZShydDJ4MDBkZXYsIEZJUk1XQVJFX0lNQUdFX0JBU0UsCisJCQkJICAgICAgZGF0YSwgbGVuKTsKIAotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBCRl9TWVNfQ1RSTCwgMHgwMDAwMCk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUEJGX1NZU19DVFJMLCAweDAwMDAxKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQQkZfU1lTX0NUUkwsIDB4MDAwMDApOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBCRl9TWVNfQ1RSTCwgMHgwMDAwMSk7CiAKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIMk1fQkJQX0FHRU5ULCAwKTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIMk1fTUFJTEJPWF9DU1IsIDApOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEgyTV9CQlBfQUdFTlQsIDApOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEgyTV9NQUlMQk9YX0NTUiwgMCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM1MSw3ICszNTMsNyBAQAogCQkgKiBTZXQgUlggSURYIGluIHJlZ2lzdGVyIHRvIGluZm9ybSBoYXJkd2FyZSB0aGF0IHdlIGhhdmUKIAkJICogaGFuZGxlZCB0aGlzIGVudHJ5IGFuZCBpdCBpcyBhdmFpbGFibGUgZm9yIHJldXNlIGFnYWluLgogCQkgKi8KLQkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUlhfQ1JYX0lEWCwKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUlhfQ1JYX0lEWCwKIAkJCQkgICAgICBlbnRyeS0+ZW50cnlfaWR4KTsKIAl9IGVsc2UgewogCQlydDJ4MDBfZGVzY19yZWFkKGVudHJ5X3ByaXYtPmRlc2MsIDEsICZ3b3JkKTsKQEAgLTM2OSw0NSArMzcxLDUxIEBACiAJICogSW5pdGlhbGl6ZSByZWdpc3RlcnMuCiAJICovCiAJZW50cnlfcHJpdiA9IHJ0MngwMGRldi0+dHhbMF0uZW50cmllc1swXS5wcml2X2RhdGE7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQkFTRV9QVFIwLCBlbnRyeV9wcml2LT5kZXNjX2RtYSk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfTUFYX0NOVDAsIHJ0MngwMGRldi0+dHhbMF0ubGltaXQpOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX0NUWF9JRFgwLCAwKTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9EVFhfSURYMCwgMCk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQkFTRV9QVFIwLCBlbnRyeV9wcml2LT5kZXNjX2RtYSk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfTUFYX0NOVDAsCisJCQkJIHJ0MngwMGRldi0+dHhbMF0ubGltaXQpOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX0NUWF9JRFgwLCAwKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9EVFhfSURYMCwgMCk7CiAKIAllbnRyeV9wcml2ID0gcnQyeDAwZGV2LT50eFsxXS5lbnRyaWVzWzBdLnByaXZfZGF0YTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9CQVNFX1BUUjEsIGVudHJ5X3ByaXYtPmRlc2NfZG1hKTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9NQVhfQ05UMSwgcnQyeDAwZGV2LT50eFsxXS5saW1pdCk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQ1RYX0lEWDEsIDApOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX0RUWF9JRFgxLCAwKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9CQVNFX1BUUjEsIGVudHJ5X3ByaXYtPmRlc2NfZG1hKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9NQVhfQ05UMSwKKwkJCQkgcnQyeDAwZGV2LT50eFsxXS5saW1pdCk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQ1RYX0lEWDEsIDApOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX0RUWF9JRFgxLCAwKTsKIAogCWVudHJ5X3ByaXYgPSBydDJ4MDBkZXYtPnR4WzJdLmVudHJpZXNbMF0ucHJpdl9kYXRhOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX0JBU0VfUFRSMiwgZW50cnlfcHJpdi0+ZGVzY19kbWEpOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX01BWF9DTlQyLCBydDJ4MDBkZXYtPnR4WzJdLmxpbWl0KTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9DVFhfSURYMiwgMCk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfRFRYX0lEWDIsIDApOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX0JBU0VfUFRSMiwgZW50cnlfcHJpdi0+ZGVzY19kbWEpOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX01BWF9DTlQyLAorCQkJCSBydDJ4MDBkZXYtPnR4WzJdLmxpbWl0KTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9DVFhfSURYMiwgMCk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfRFRYX0lEWDIsIDApOwogCiAJZW50cnlfcHJpdiA9IHJ0MngwMGRldi0+dHhbM10uZW50cmllc1swXS5wcml2X2RhdGE7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQkFTRV9QVFIzLCBlbnRyeV9wcml2LT5kZXNjX2RtYSk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfTUFYX0NOVDMsIHJ0MngwMGRldi0+dHhbM10ubGltaXQpOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX0NUWF9JRFgzLCAwKTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9EVFhfSURYMywgMCk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfQkFTRV9QVFIzLCBlbnRyeV9wcml2LT5kZXNjX2RtYSk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfTUFYX0NOVDMsCisJCQkJIHJ0MngwMGRldi0+dHhbM10ubGltaXQpOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX0NUWF9JRFgzLCAwKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9EVFhfSURYMywgMCk7CiAKIAllbnRyeV9wcml2ID0gcnQyeDAwZGV2LT5yeC0+ZW50cmllc1swXS5wcml2X2RhdGE7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUlhfQkFTRV9QVFIsIGVudHJ5X3ByaXYtPmRlc2NfZG1hKTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBSWF9NQVhfQ05ULCBydDJ4MDBkZXYtPnJ4WzBdLmxpbWl0KTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBSWF9DUlhfSURYLCBydDJ4MDBkZXYtPnJ4WzBdLmxpbWl0IC0gMSk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUlhfRFJYX0lEWCwgMCk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUlhfQkFTRV9QVFIsIGVudHJ5X3ByaXYtPmRlc2NfZG1hKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBSWF9NQVhfQ05ULAorCQkJCSBydDJ4MDBkZXYtPnJ4WzBdLmxpbWl0KTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBSWF9DUlhfSURYLAorCQkJCSBydDJ4MDBkZXYtPnJ4WzBdLmxpbWl0IC0gMSk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUlhfRFJYX0lEWCwgMCk7CiAKIAkvKgogCSAqIEVuYWJsZSBnbG9iYWwgRE1BIGNvbmZpZ3VyYXRpb24KIAkgKi8KLQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFdQRE1BX0dMT19DRkcsICZyZWcpOworCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgV1BETUFfR0xPX0NGRywgJnJlZyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFdQRE1BX0dMT19DRkdfRU5BQkxFX1RYX0RNQSwgMCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFdQRE1BX0dMT19DRkdfRU5BQkxFX1JYX0RNQSwgMCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFdQRE1BX0dMT19DRkdfVFhfV1JJVEVCQUNLX0RPTkUsIDEpOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFdQRE1BX0dMT19DRkcsIHJlZyk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgV1BETUFfR0xPX0NGRywgcmVnKTsKIAotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIERFTEFZX0lOVF9DRkcsIDApOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIERFTEFZX0lOVF9DRkcsIDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00MjcsOCArNDM1LDggQEAKIAkgKiBzaG91bGQgY2xlYXIgdGhlIHJlZ2lzdGVyIHRvIGFzc3VyZSBhIGNsZWFuIHN0YXRlLgogCSAqLwogCWlmIChzdGF0ZSA9PSBTVEFURV9SQURJT19JUlFfT04pIHsKLQkJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBJTlRfU09VUkNFX0NTUiwgJnJlZyk7Ci0JCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIElOVF9TT1VSQ0VfQ1NSLCByZWcpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIElOVF9TT1VSQ0VfQ1NSLCAmcmVnKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSU5UX1NPVVJDRV9DU1IsIHJlZyk7CiAKIAkJLyoKIAkJICogRW5hYmxlIHRhc2tsZXRzLiBUaGUgYmVhY29uIHJlbGF0ZWQgdGFza2xldHMgYXJlCkBAIC00NDAsNyArNDQ4LDcgQEAKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnQyeDAwZGV2LT5pcnFtYXNrX2xvY2ssIGZsYWdzKTsKLQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIElOVF9NQVNLX0NTUiwgJnJlZyk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBJTlRfTUFTS19DU1IsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBJTlRfTUFTS19DU1JfUlhERUxBWUlOVCwgMCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIElOVF9NQVNLX0NTUl9UWERFTEFZSU5ULCAwKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgSU5UX01BU0tfQ1NSX1JYX0RPTkUsIG1hc2spOwpAQCAtNDU5LDcgKzQ2Nyw3IEBACiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIElOVF9NQVNLX0NTUl9HUFRJTUVSLCAwKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgSU5UX01BU0tfQ1NSX1JYX0NPSEVSRU5ULCAwKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgSU5UX01BU0tfQ1NSX1RYX0NPSEVSRU5ULCAwKTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBJTlRfTUFTS19DU1IsIHJlZyk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSU5UX01BU0tfQ1NSLCByZWcpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0MngwMGRldi0+aXJxbWFza19sb2NrLCBmbGFncyk7CiAKIAlpZiAoc3RhdGUgPT0gU1RBVEVfUkFESU9fSVJRX09GRikgewpAQCAtNDgwLDcgKzQ4OCw3IEBACiAJLyoKIAkgKiBSZXNldCBETUEgaW5kZXhlcwogCSAqLwotCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgV1BETUFfUlNUX0lEWCwgJnJlZyk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBXUERNQV9SU1RfSURYLCAmcmVnKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgV1BETUFfUlNUX0lEWF9EVFhfSURYMCwgMSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFdQRE1BX1JTVF9JRFhfRFRYX0lEWDEsIDEpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBXUERNQV9SU1RfSURYX0RUWF9JRFgyLCAxKTsKQEAgLTQ4OCwyNiArNDk2LDI2IEBACiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFdQRE1BX1JTVF9JRFhfRFRYX0lEWDQsIDEpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBXUERNQV9SU1RfSURYX0RUWF9JRFg1LCAxKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgV1BETUFfUlNUX0lEWF9EUlhfSURYMCwgMSk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgV1BETUFfUlNUX0lEWCwgcmVnKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBXUERNQV9SU1RfSURYLCByZWcpOwogCi0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUEJGX1NZU19DVFJMLCAweDAwMDAwZTFmKTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQQkZfU1lTX0NUUkwsIDB4MDAwMDBlMDApOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBCRl9TWVNfQ1RSTCwgMHgwMDAwMGUxZik7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUEJGX1NZU19DVFJMLCAweDAwMDAwZTAwKTsKIAogCWlmIChydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDUzOTApKSB7Ci0JCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQVVYX0NUUkwsICZyZWcpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEFVWF9DVFJMLCAmcmVnKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEFVWF9DVFJMX0ZPUkNFX1BDSUVfQ0xLLCAxKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEFVWF9DVFJMX1dBS0VfUENJRV9FTiwgMSk7Ci0JCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEFVWF9DVFJMLCByZWcpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBBVVhfQ1RSTCwgcmVnKTsKIAl9CiAKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQV1JfUElOX0NGRywgMHgwMDAwMDAwMyk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUFdSX1BJTl9DRkcsIDB4MDAwMDAwMDMpOwogCi0JcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfU1lTX0NUUkwsICZyZWcpOworCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCAmcmVnKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX1NZU19DVFJMX1JFU0VUX0NTUiwgMSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19TWVNfQ1RSTF9SRVNFVF9CQlAsIDEpOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgcmVnKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfU1lTX0NUUkwsIHJlZyk7CiAKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfU1lTX0NUUkwsIDB4MDAwMDAwMDApOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgMHgwMDAwMDAwMCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUyNSw4ICs1MzMsOCBAQAogewogCWlmIChydDJ4MDBfaXNfc29jKHJ0MngwMGRldikpIHsKIAkJcnQyODAwX2Rpc2FibGVfcmFkaW8ocnQyeDAwZGV2KTsKLQkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUFdSX1BJTl9DRkcsIDApOwotCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9QSU5fQ0ZHLCAwKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUFdSX1BJTl9DRkcsIDApOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9QSU5fQ0ZHLCAwKTsKIAl9CiB9CiAKQEAgLTUzNyw4ICs1NDUsMTAgQEAKIAkJcnQyODAwX21jdV9yZXF1ZXN0KHJ0MngwMGRldiwgTUNVX1dBS0VVUCwgVE9LRU5fV0FLVVAsIDAsIDB4MDIpOwogCQlydDI4MDBwY2lfbWN1X3N0YXR1cyhydDJ4MDBkZXYsIFRPS0VOX1dBS1VQKTsKIAl9IGVsc2UgaWYgKHN0YXRlID09IFNUQVRFX1NMRUVQKSB7Ci0JCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEgyTV9NQUlMQk9YX1NUQVRVUywgMHhmZmZmZmZmZik7Ci0JCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEgyTV9NQUlMQk9YX0NJRCwgMHhmZmZmZmZmZik7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEgyTV9NQUlMQk9YX1NUQVRVUywKKwkJCQkJIDB4ZmZmZmZmZmYpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIMk1fTUFJTEJPWF9DSUQsCisJCQkJCSAweGZmZmZmZmZmKTsKIAkJcnQyODAwX21jdV9yZXF1ZXN0KHJ0MngwMGRldiwgTUNVX1NMRUVQLCAweDAxLCAweGZmLCAweDAxKTsKIAl9CiAKQEAgLTcxNywxMiArNzI3LDEzIEBACiAJcnQyODAwX2NvbmZpZyhydDJ4MDBkZXYsICZsaWJjb25mLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOwogfQogCi1zdGF0aWMgdm9pZCBydDI4MDBwY2lfdHhkb25lKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCitzdGF0aWMgYm9vbCBydDI4MDBwY2lfdHhkb25lKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CiAJc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlOwogCXN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnk7CiAJdTMyIHN0YXR1czsKIAl1OCBxaWQ7CisJaW50IG1heF90eF9kb25lID0gMTY7CiAKIAl3aGlsZSAoa2ZpZm9fZ2V0KCZydDJ4MDBkZXYtPnR4c3RhdHVzX2ZpZm8sICZzdGF0dXMpKSB7CiAJCXFpZCA9IHJ0MngwMF9nZXRfZmllbGQzMihzdGF0dXMsIFRYX1NUQV9GSUZPX1BJRF9RVUVVRSk7CkBAIC03NTksMTEgKzc3MCwxNiBAQAogCiAJCWVudHJ5ID0gcnQyeDAwcXVldWVfZ2V0X2VudHJ5KHF1ZXVlLCBRX0lOREVYX0RPTkUpOwogCQlydDI4MDBfdHhkb25lX2VudHJ5KGVudHJ5LCBzdGF0dXMpOworCisJCWlmICgtLW1heF90eF9kb25lID09IDApCisJCQlicmVhazsKIAl9CisKKwlyZXR1cm4gIW1heF90eF9kb25lOwogfQogCi1zdGF0aWMgdm9pZCBydDI4MDBwY2lfZW5hYmxlX2ludGVycnVwdChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJCSAgICAgICBzdHJ1Y3QgcnQyeDAwX2ZpZWxkMzIgaXJxX2ZpZWxkKQorc3RhdGljIGlubGluZSB2b2lkIHJ0MjgwMHBjaV9lbmFibGVfaW50ZXJydXB0KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJCSAgICAgIHN0cnVjdCBydDJ4MDBfZmllbGQzMiBpcnFfZmllbGQpCiB7CiAJdTMyIHJlZzsKIApAQCAtNzcyLDE1ICs3ODgsMTcgQEAKIAkgKiBhY2Nlc3MgbmVlZHMgbG9ja2luZy4KIAkgKi8KIAlzcGluX2xvY2tfaXJxKCZydDJ4MDBkZXYtPmlycW1hc2tfbG9jayk7Ci0JcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBJTlRfTUFTS19DU1IsICZyZWcpOworCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgSU5UX01BU0tfQ1NSLCAmcmVnKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgaXJxX2ZpZWxkLCAxKTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBJTlRfTUFTS19DU1IsIHJlZyk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSU5UX01BU0tfQ1NSLCByZWcpOwogCXNwaW5fdW5sb2NrX2lycSgmcnQyeDAwZGV2LT5pcnFtYXNrX2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBydDI4MDBwY2lfdHhzdGF0dXNfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0JcnQyODAwcGNpX3R4ZG9uZSgoc3RydWN0IHJ0MngwMF9kZXYgKilkYXRhKTsKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gKHN0cnVjdCBydDJ4MDBfZGV2ICopZGF0YTsKKwlpZiAocnQyODAwcGNpX3R4ZG9uZShydDJ4MDBkZXYpKQorCQl0YXNrbGV0X3NjaGVkdWxlKCZydDJ4MDBkZXYtPnR4c3RhdHVzX3Rhc2tsZXQpOwogCiAJLyoKIAkgKiBObyBuZWVkIHRvIGVuYWJsZSB0aGUgdHggc3RhdHVzIGludGVycnVwdCBoZXJlIGFzIHdlIGFsd2F5cwpAQCAtODA2LDggKzgyNCwxMCBAQAogc3RhdGljIHZvaWQgcnQyODAwcGNpX3J4ZG9uZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gKHN0cnVjdCBydDJ4MDBfZGV2ICopZGF0YTsKLQlydDJ4MDBwY2lfcnhkb25lKHJ0MngwMGRldik7Ci0JcnQyODAwcGNpX2VuYWJsZV9pbnRlcnJ1cHQocnQyeDAwZGV2LCBJTlRfTUFTS19DU1JfUlhfRE9ORSk7CisJaWYgKHJ0MngwMHBjaV9yeGRvbmUocnQyeDAwZGV2KSkKKwkJdGFza2xldF9zY2hlZHVsZSgmcnQyeDAwZGV2LT5yeGRvbmVfdGFza2xldCk7CisJZWxzZQorCQlydDI4MDBwY2lfZW5hYmxlX2ludGVycnVwdChydDJ4MDBkZXYsIElOVF9NQVNLX0NTUl9SWF9ET05FKTsKIH0KIAogc3RhdGljIHZvaWQgcnQyODAwcGNpX2F1dG93YWtlX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQpAQCAtODQxLDcgKzg2MSw3IEBACiAJICogbmVlZCB0byBsb2NrIHRoZSBrZmlmby4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgcnQyeDAwZGV2LT5vcHMtPnR4LT5lbnRyeV9udW07IGkrKykgewotCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYX1NUQV9GSUZPLCAmc3RhdHVzKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWF9TVEFfRklGTywgJnN0YXR1cyk7CiAKIAkJaWYgKCFydDJ4MDBfZ2V0X2ZpZWxkMzIoc3RhdHVzLCBUWF9TVEFfRklGT19WQUxJRCkpCiAJCQlicmVhazsKQEAgLTg2Myw4ICs4ODMsOCBAQAogCXUzMiByZWcsIG1hc2s7CiAKIAkvKiBSZWFkIHN0YXR1cyBhbmQgQUNLIGFsbCBpbnRlcnJ1cHRzICovCi0JcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBJTlRfU09VUkNFX0NTUiwgJnJlZyk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSU5UX1NPVVJDRV9DU1IsIHJlZyk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBJTlRfU09VUkNFX0NTUiwgJnJlZyk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSU5UX1NPVVJDRV9DU1IsIHJlZyk7CiAKIAlpZiAoIXJlZykKIAkJcmV0dXJuIElSUV9OT05FOwpAQCAtOTA0LDkgKzkyNCw5IEBACiAJICogdGhlIHRhc2tsZXQgd2lsbCByZWVuYWJsZSB0aGUgYXBwcm9wcmlhdGUgaW50ZXJydXB0cy4KIAkgKi8KIAlzcGluX2xvY2soJnJ0MngwMGRldi0+aXJxbWFza19sb2NrKTsKLQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIElOVF9NQVNLX0NTUiwgJnJlZyk7CisJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBJTlRfTUFTS19DU1IsICZyZWcpOwogCXJlZyAmPSBtYXNrOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIElOVF9NQVNLX0NTUiwgcmVnKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBJTlRfTUFTS19DU1IsIHJlZyk7CiAJc3Bpbl91bmxvY2soJnJ0MngwMGRldi0+aXJxbWFza19sb2NrKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTk1NiwyOCArOTc2LDI4IEBACiAJICogVGhpcyBkZXZpY2UgaGFzIG11bHRpcGxlIGZpbHRlcnMgZm9yIGNvbnRyb2wgZnJhbWVzCiAJICogYW5kIGhhcyBhIHNlcGFyYXRlIGZpbHRlciBmb3IgUFMgUG9sbCBmcmFtZXMuCiAJICovCi0JX19zZXRfYml0KERSSVZFUl9TVVBQT1JUX0NPTlRST0xfRklMVEVSUywgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCV9fc2V0X2JpdChEUklWRVJfU1VQUE9SVF9DT05UUk9MX0ZJTFRFUl9QU1BPTEwsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwlfX3NldF9iaXQoQ0FQQUJJTElUWV9DT05UUk9MX0ZJTFRFUlMsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CisJX19zZXRfYml0KENBUEFCSUxJVFlfQ09OVFJPTF9GSUxURVJfUFNQT0xMLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOwogCiAJLyoKIAkgKiBUaGlzIGRldmljZSBoYXMgYSBwcmUgdGJ0dCBpbnRlcnJ1cHQgYW5kIHRodXMgZmV0Y2hlcwogCSAqIGEgbmV3IGJlYWNvbiBkaXJlY3RseSBwcmlvciB0byB0cmFuc21pc3Npb24uCiAJICovCi0JX19zZXRfYml0KERSSVZFUl9TVVBQT1JUX1BSRV9UQlRUX0lOVEVSUlVQVCwgJnJ0MngwMGRldi0+ZmxhZ3MpOworCV9fc2V0X2JpdChDQVBBQklMSVRZX1BSRV9UQlRUX0lOVEVSUlVQVCwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKIAogCS8qCiAJICogVGhpcyBkZXZpY2UgcmVxdWlyZXMgZmlybXdhcmUuCiAJICovCiAJaWYgKCFydDJ4MDBfaXNfc29jKHJ0MngwMGRldikpCi0JCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9GSVJNV0FSRSwgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9ETUEsICZydDJ4MDBkZXYtPmZsYWdzKTsKLQlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfTDJQQUQsICZydDJ4MDBkZXYtPmZsYWdzKTsKLQlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfVFhTVEFUVVNfRklGTywgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9UQVNLTEVUX0NPTlRFWFQsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwkJX19zZXRfYml0KFJFUVVJUkVfRklSTVdBUkUsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CisJX19zZXRfYml0KFJFUVVJUkVfRE1BLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOworCV9fc2V0X2JpdChSRVFVSVJFX0wyUEFELCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOworCV9fc2V0X2JpdChSRVFVSVJFX1RYU1RBVFVTX0ZJRk8sICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CisJX19zZXRfYml0KFJFUVVJUkVfVEFTS0xFVF9DT05URVhULCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOwogCWlmICghbW9kcGFyYW1fbm9od2NyeXB0KQotCQlfX3NldF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0JX19zZXRfYml0KERSSVZFUl9TVVBQT1JUX0xJTktfVFVOSU5HLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0JX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX0hUX1RYX0RFU0MsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwkJX19zZXRfYml0KENBUEFCSUxJVFlfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOworCV9fc2V0X2JpdChDQVBBQklMSVRZX0xJTktfVFVOSU5HLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOworCV9fc2V0X2JpdChSRVFVSVJFX0hUX1RYX0RFU0MsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CiAKIAkvKgogCSAqIFNldCB0aGUgcnNzaSBvZmZzZXQuCkBAIC0xMDA4LDYgKzEwMjgsNyBAQAogCS5hbXBkdV9hY3Rpb24JCT0gcnQyODAwX2FtcGR1X2FjdGlvbiwKIAkuZmx1c2gJCQk9IHJ0MngwMG1hY19mbHVzaCwKIAkuZ2V0X3N1cnZleQkJPSBydDI4MDBfZ2V0X3N1cnZleSwKKwkuZ2V0X3JpbmdwYXJhbQkJPSBydDJ4MDBtYWNfZ2V0X3JpbmdwYXJhbSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnQyODAwX29wcyBydDI4MDBwY2lfcnQyODAwX29wcyA9IHsKQEAgLTEwNDMsOSArMTA2NCwxMSBAQAogCS5saW5rX3N0YXRzCQk9IHJ0MjgwMF9saW5rX3N0YXRzLAogCS5yZXNldF90dW5lcgkJPSBydDI4MDBfcmVzZXRfdHVuZXIsCiAJLmxpbmtfdHVuZXIJCT0gcnQyODAwX2xpbmtfdHVuZXIsCisJLmdhaW5fY2FsaWJyYXRpb24JPSBydDI4MDBfZ2Fpbl9jYWxpYnJhdGlvbiwKIAkuc3RhcnRfcXVldWUJCT0gcnQyODAwcGNpX3N0YXJ0X3F1ZXVlLAogCS5raWNrX3F1ZXVlCQk9IHJ0MjgwMHBjaV9raWNrX3F1ZXVlLAogCS5zdG9wX3F1ZXVlCQk9IHJ0MjgwMHBjaV9zdG9wX3F1ZXVlLAorCS5mbHVzaF9xdWV1ZQkJPSBydDJ4MDBwY2lfZmx1c2hfcXVldWUsCiAJLndyaXRlX3R4X2Rlc2MJCT0gcnQyODAwcGNpX3dyaXRlX3R4X2Rlc2MsCiAJLndyaXRlX3R4X2RhdGEJCT0gcnQyODAwX3dyaXRlX3R4X2RhdGEsCiAJLndyaXRlX2JlYWNvbgkJPSBydDI4MDBfd3JpdGVfYmVhY29uLApAQCAtMTEwNSwzNiArMTEyOCwzNiBAQAogICovCiAjaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHJ0MjgwMHBjaV9kZXZpY2VfdGFibGUpID0gewotCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MDYwMSksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDA2ODEpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgwNzAxKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAotCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MDc4MSksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDMwOTApLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgzMDkxKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAotCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MzA5MiksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxNDMyLCAweDc3MDgpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTQzMiwgMHg3NzI3KSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAotCXsgUENJX0RFVklDRSgweDE0MzIsIDB4NzcyOCksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxNDMyLCAweDc3MzgpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTQzMiwgMHg3NzQ4KSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAotCXsgUENJX0RFVklDRSgweDE0MzIsIDB4Nzc1OCksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxNDMyLCAweDc3NjgpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTQ2MiwgMHg4OTFhKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAotCXsgUENJX0RFVklDRSgweDFhM2IsIDB4MTA1OSksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDA2MDEpIH0sCisJeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgwNjgxKSB9LAorCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MDcwMSkgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDA3ODEpIH0sCisJeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgzMDkwKSB9LAorCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MzA5MSkgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDMwOTIpIH0sCisJeyBQQ0lfREVWSUNFKDB4MTQzMiwgMHg3NzA4KSB9LAorCXsgUENJX0RFVklDRSgweDE0MzIsIDB4NzcyNykgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxNDMyLCAweDc3MjgpIH0sCisJeyBQQ0lfREVWSUNFKDB4MTQzMiwgMHg3NzM4KSB9LAorCXsgUENJX0RFVklDRSgweDE0MzIsIDB4Nzc0OCkgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxNDMyLCAweDc3NTgpIH0sCisJeyBQQ0lfREVWSUNFKDB4MTQzMiwgMHg3NzY4KSB9LAorCXsgUENJX0RFVklDRSgweDE0NjIsIDB4ODkxYSkgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxYTNiLCAweDEwNTkpIH0sCiAjaWZkZWYgQ09ORklHX1JUMjgwMFBDSV9SVDMzWFgKLQl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDMzOTApLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCisJeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgzMzkwKSB9LAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1JUMjgwMFBDSV9SVDM1WFgKLQl7IFBDSV9ERVZJQ0UoMHgxNDMyLCAweDc3MTEpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTQzMiwgMHg3NzIyKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAotCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MzA2MCksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDMwNjIpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgzNTYyKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAotCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MzU5MiksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDM1OTMpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCisJeyBQQ0lfREVWSUNFKDB4MTQzMiwgMHg3NzExKSB9LAorCXsgUENJX0RFVklDRSgweDE0MzIsIDB4NzcyMikgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDMwNjApIH0sCisJeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgzMDYyKSB9LAorCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MzU2MikgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDM1OTIpIH0sCisJeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgzNTkzKSB9LAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1JUMjgwMFBDSV9SVDUzWFgKLQl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDUzOTApLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCisJeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHg1MzkwKSB9LAogI2VuZGlmCiAJeyAwLCB9CiB9OwpAQCAtMTE3MCwxMCArMTE5MywxNiBAQAogI2VuZGlmIC8qIENPTkZJR19SQUxJTktfUlQyODhYIHx8IENPTkZJR19SQUxJTktfUlQzMDVYICovCiAKICNpZmRlZiBDT05GSUdfUENJCitzdGF0aWMgaW50IHJ0MjgwMHBjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwKKwkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gcnQyeDAwcGNpX3Byb2JlKHBjaV9kZXYsICZydDI4MDBwY2lfb3BzKTsKK30KKwogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJ0MjgwMHBjaV9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gS0JVSUxEX01PRE5BTUUsCiAJLmlkX3RhYmxlCT0gcnQyODAwcGNpX2RldmljZV90YWJsZSwKLQkucHJvYmUJCT0gcnQyeDAwcGNpX3Byb2JlLAorCS5wcm9iZQkJPSBydDI4MDBwY2lfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChydDJ4MDBwY2lfcmVtb3ZlKSwKIAkuc3VzcGVuZAk9IHJ0MngwMHBjaV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gcnQyeDAwcGNpX3Jlc3VtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuYwppbmRleCAzNzUwOWQwLi5iYTgyYzk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5jCkBAIC01OSwxNiArNTksMTYgQEAKIAogCXN3aXRjaCAocXVldWUtPnFpZCkgewogCWNhc2UgUUlEX1JYOgotCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgJnJlZyk7CisJCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCAmcmVnKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19TWVNfQ1RSTF9FTkFCTEVfUlgsIDEpOwotCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfU1lTX0NUUkwsIHJlZyk7CisJCXJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgcmVnKTsKIAkJYnJlYWs7CiAJY2FzZSBRSURfQkVBQ09OOgotCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEJDTl9USU1FX0NGRywgJnJlZyk7CisJCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQkNOX1RJTUVfQ0ZHLCAmcmVnKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJDTl9USU1FX0NGR19UU0ZfVElDS0lORywgMSk7CiAJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQ05fVElNRV9DRkdfVEJUVF9FTkFCTEUsIDEpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkNOX1RJTUVfQ0ZHX0JFQUNPTl9HRU4sIDEpOwotCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBCQ05fVElNRV9DRkcsIHJlZyk7CisJCXJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEJDTl9USU1FX0NGRywgcmVnKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC04MiwxNiArODIsMTYgQEAKIAogCXN3aXRjaCAocXVldWUtPnFpZCkgewogCWNhc2UgUUlEX1JYOgotCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgJnJlZyk7CisJCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCAmcmVnKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19TWVNfQ1RSTF9FTkFCTEVfUlgsIDApOwotCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfU1lTX0NUUkwsIHJlZyk7CisJCXJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgcmVnKTsKIAkJYnJlYWs7CiAJY2FzZSBRSURfQkVBQ09OOgotCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEJDTl9USU1FX0NGRywgJnJlZyk7CisJCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQkNOX1RJTUVfQ0ZHLCAmcmVnKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJDTl9USU1FX0NGR19UU0ZfVElDS0lORywgMCk7CiAJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQ05fVElNRV9DRkdfVEJUVF9FTkFCTEUsIDApOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkNOX1RJTUVfQ0ZHX0JFQUNPTl9HRU4sIDApOwotCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBCQ05fVElNRV9DRkcsIHJlZyk7CisJCXJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEJDTl9USU1FX0NGRywgcmVnKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC05OSw2ICs5OSw2MyBAQAogfQogCiAvKgorICogdGVzdCBpZiB0aGVyZSBpcyBhbiBlbnRyeSBpbiBhbnkgVFggcXVldWUgZm9yIHdoaWNoIERNQSBpcyBkb25lCisgKiBidXQgdGhlIFRYIHN0YXR1cyBoYXMgbm90IGJlZW4gcmV0dXJuZWQgeWV0CisgKi8KK3N0YXRpYyBib29sIHJ0MjgwMHVzYl90eHN0YXR1c19wZW5kaW5nKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlOworCisJdHhfcXVldWVfZm9yX2VhY2gocnQyeDAwZGV2LCBxdWV1ZSkgeworCQlpZiAocnQyeDAwcXVldWVfZ2V0X2VudHJ5KHF1ZXVlLCBRX0lOREVYX0RNQV9ET05FKSAhPQorCQkgICAgcnQyeDAwcXVldWVfZ2V0X2VudHJ5KHF1ZXVlLCBRX0lOREVYX0RPTkUpKQorCQkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgcnQyODAwdXNiX3R4X3N0YV9maWZvX3JlYWRfY29tcGxldGVkKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJCQkgaW50IHVyYl9zdGF0dXMsIHUzMiB0eF9zdGF0dXMpCit7CisJaWYgKHVyYl9zdGF0dXMpIHsKKwkJV0FSTklORyhydDJ4MDBkZXYsICJydDJ4MDB1c2JfcmVnaXN0ZXJfcmVhZF9hc3luYyBmYWlsZWQ6ICVkXG4iLCB1cmJfc3RhdHVzKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIHRyeSB0byByZWFkIGFsbCBUWF9TVEFfRklGTyBlbnRyaWVzIGJlZm9yZSBzY2hlZHVsaW5nIHR4ZG9uZV93b3JrICovCisJaWYgKHJ0MngwMF9nZXRfZmllbGQzMih0eF9zdGF0dXMsIFRYX1NUQV9GSUZPX1ZBTElEKSkgeworCQlpZiAoIWtmaWZvX3B1dCgmcnQyeDAwZGV2LT50eHN0YXR1c19maWZvLCAmdHhfc3RhdHVzKSkgeworCQkJV0FSTklORyhydDJ4MDBkZXYsICJUWCBzdGF0dXMgRklGTyBvdmVycnVuLCAiCisJCQkJImRyb3AgdHggc3RhdHVzIHJlcG9ydC5cbiIpOworCQkJcXVldWVfd29yayhydDJ4MDBkZXYtPndvcmtxdWV1ZSwgJnJ0MngwMGRldi0+dHhkb25lX3dvcmspOworCQl9IGVsc2UKKwkJCXJldHVybiB0cnVlOworCX0gZWxzZSBpZiAoIWtmaWZvX2lzX2VtcHR5KCZydDJ4MDBkZXYtPnR4c3RhdHVzX2ZpZm8pKSB7CisJCXF1ZXVlX3dvcmsocnQyeDAwZGV2LT53b3JrcXVldWUsICZydDJ4MDBkZXYtPnR4ZG9uZV93b3JrKTsKKwl9IGVsc2UgaWYgKHJ0MjgwMHVzYl90eHN0YXR1c19wZW5kaW5nKHJ0MngwMGRldikpIHsKKwkJbW9kX3RpbWVyKCZydDJ4MDBkZXYtPnR4c3RhdHVzX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyKSk7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBydDI4MDB1c2JfdHhfZG1hX2RvbmUoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZW50cnktPnF1ZXVlLT5ydDJ4MDBkZXY7CisKKwlydDJ4MDB1c2JfcmVnaXN0ZXJfcmVhZF9hc3luYyhydDJ4MDBkZXYsIFRYX1NUQV9GSUZPLAorCQkJCSAgICAgIHJ0MjgwMHVzYl90eF9zdGFfZmlmb19yZWFkX2NvbXBsZXRlZCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0MjgwMHVzYl90eF9zdGFfZmlmb190aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gKHN0cnVjdCBydDJ4MDBfZGV2ICopZGF0YTsKKworCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkX2FzeW5jKHJ0MngwMGRldiwgVFhfU1RBX0ZJRk8sCisJCQkJICAgICAgcnQyODAwdXNiX3R4X3N0YV9maWZvX3JlYWRfY29tcGxldGVkKTsKK30KKworLyoKICAqIEZpcm13YXJlIGZ1bmN0aW9ucwogICovCiBzdGF0aWMgY2hhciAqcnQyODAwdXNiX2dldF9maXJtd2FyZV9uYW1lKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCkBAIC0xMjksMTEgKzE4NiwxMSBAQAogCS8qCiAJICogV3JpdGUgZmlybXdhcmUgdG8gZGV2aWNlLgogCSAqLwotCXJ0MjgwMF9yZWdpc3Rlcl9tdWx0aXdyaXRlKHJ0MngwMGRldiwgRklSTVdBUkVfSU1BR0VfQkFTRSwKLQkJCQkgICBkYXRhICsgb2Zmc2V0LCBsZW5ndGgpOworCXJ0MngwMHVzYl9yZWdpc3Rlcl9tdWx0aXdyaXRlKHJ0MngwMGRldiwgRklSTVdBUkVfSU1BR0VfQkFTRSwKKwkJCQkgICAgICBkYXRhICsgb2Zmc2V0LCBsZW5ndGgpOwogCi0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSDJNX01BSUxCT1hfQ0lELCB+MCk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSDJNX01BSUxCT1hfU1RBVFVTLCB+MCk7CisJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSDJNX01BSUxCT1hfQ0lELCB+MCk7CisJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSDJNX01BSUxCT1hfU1RBVFVTLCB+MCk7CiAKIAkvKgogCSAqIFNlbmQgZmlybXdhcmUgcmVxdWVzdCB0byBkZXZpY2UgdG8gbG9hZCBmaXJtd2FyZSwKQEAgLTE0OCw3ICsyMDUsNyBAQAogCX0KIAogCW1zbGVlcCgxMCk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSDJNX01BSUxCT1hfQ1NSLCAwKTsKKwlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIMk1fTUFJTEJPWF9DU1IsIDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNjYsMjIgKzIyMywyMiBAQAogCWlmIChydDI4MDBfd2FpdF9jc3JfcmVhZHkocnQyeDAwZGV2KSkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgUEJGX1NZU19DVFJMLCAmcmVnKTsKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQQkZfU1lTX0NUUkwsIHJlZyAmIH4weDAwMDAyMDAwKTsKKwlydDJ4MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFBCRl9TWVNfQ1RSTCwgJnJlZyk7CisJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUEJGX1NZU19DVFJMLCByZWcgJiB+MHgwMDAwMjAwMCk7CiAKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQV1JfUElOX0NGRywgMHgwMDAwMDAwMyk7CisJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUFdSX1BJTl9DRkcsIDB4MDAwMDAwMDMpOwogCi0JcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfU1lTX0NUUkwsICZyZWcpOworCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCAmcmVnKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX1NZU19DVFJMX1JFU0VUX0NTUiwgMSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19TWVNfQ1RSTF9SRVNFVF9CQlAsIDEpOwotCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgcmVnKTsKKwlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfU1lTX0NUUkwsIHJlZyk7CiAKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBVU0JfRE1BX0NGRywgMHgwMDAwMDAwMCk7CisJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVVNCX0RNQV9DRkcsIDB4MDAwMDAwMDApOwogCiAJcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0X3N3KHJ0MngwMGRldiwgVVNCX0RFVklDRV9NT0RFLCAwLAogCQkJCSAgICBVU0JfTU9ERV9SRVNFVCwgUkVHSVNURVJfVElNRU9VVCk7CiAKLQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfU1lTX0NUUkwsIDB4MDAwMDAwMDApOworCXJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgMHgwMDAwMDAwMCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE5Myw3ICsyNTAsNyBAQAogCWlmICh1bmxpa2VseShydDI4MDBfd2FpdF93cGRtYV9yZWFkeShydDJ4MDBkZXYpKSkKIAkJcmV0dXJuIC1FSU87CiAKLQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFVTQl9ETUFfQ0ZHLCAmcmVnKTsKKwlydDJ4MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFVTQl9ETUFfQ0ZHLCAmcmVnKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVVNCX0RNQV9DRkdfUEhZX0NMRUFSLCAwKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVVNCX0RNQV9DRkdfUlhfQlVMS19BR0dfRU4sIDApOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBVU0JfRE1BX0NGR19SWF9CVUxLX0FHR19USU1FT1VULCAxMjgpOwpAQCAtMjA2LDcgKzI2Myw3IEBACiAJCQkgICAgLyAxMDI0KSAtIDMpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBVU0JfRE1BX0NGR19SWF9CVUxLX0VOLCAxKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVVNCX0RNQV9DRkdfVFhfQlVMS19FTiwgMSk7Ci0JcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVVNCX0RNQV9DRkcsIHJlZyk7CisJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVVNCX0RNQV9DRkcsIHJlZyk7CiAKIAlyZXR1cm4gcnQyODAwX2VuYWJsZV9yYWRpbyhydDJ4MDBkZXYpOwogfQpAQCAtMjgyLDEyICszMzksMTIgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAl1MzIgcmVnOwogCi0JcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWFJYUV9QQ05ULCAmcmVnKTsKKwlydDJ4MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhRX1BDTlQsICZyZWcpOwogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBUWFJYUV9QQ05UX1RYMFEpKSB7CiAJCVdBUk5JTkcocnQyeDAwZGV2LCAiVFggSFcgcXVldWUgMCB0aW1lZCBvdXQsIgogCQkJIiBpbnZva2UgZm9yY2VkIGtpY2tcbiIpOwogCi0JCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBCRl9DRkcsIDB4ZjQwMDEyKTsKKwkJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUEJGX0NGRywgMHhmNDAwMTIpOwogCiAJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CiAJCQl1ZGVsYXkoMTApOwpAQCAtMjk1LDE1ICszNTIsMTUgQEAKIAkJCQlicmVhazsKIAkJfQogCi0JCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBCRl9DRkcsIDB4ZjQwMDA2KTsKKwkJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUEJGX0NGRywgMHhmNDAwMDYpOwogCX0KIAotCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWFFfUENOVCwgJnJlZyk7CisJcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWFJYUV9QQ05ULCAmcmVnKTsKIAlpZiAocnQyeDAwX2dldF9maWVsZDMyKHJlZywgVFhSWFFfUENOVF9UWDFRKSkgewogCQlXQVJOSU5HKHJ0MngwMGRldiwgIlRYIEhXIHF1ZXVlIDEgdGltZWQgb3V0LCIKIAkJCSIgaW52b2tlIGZvcmNlZCBraWNrXG4iKTsKIAotCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQQkZfQ0ZHLCAweGY0MDAwYSk7CisJCXJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBCRl9DRkcsIDB4ZjQwMDBhKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewogCQkJdWRlbGF5KDEwKTsKQEAgLTMxMSw3ICszNjgsNyBAQAogCQkJCWJyZWFrOwogCQl9CiAKLQkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUEJGX0NGRywgMHhmNDAwMDYpOworCQlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQQkZfQ0ZHLCAweGY0MDAwNik7CiAJfQogCiAJcnQyeDAwdXNiX3dhdGNoZG9nKHJ0MngwMGRldik7CkBAIC00MjAsMTMgKzQ3NywyNCBAQAogCQl3aGlsZSAoIXJ0MngwMHF1ZXVlX2VtcHR5KHF1ZXVlKSkgewogCQkJZW50cnkgPSBydDJ4MDBxdWV1ZV9nZXRfZW50cnkocXVldWUsIFFfSU5ERVhfRE9ORSk7CiAKLQkJCWlmICh0ZXN0X2JpdChFTlRSWV9PV05FUl9ERVZJQ0VfREFUQSwgJmVudHJ5LT5mbGFncykgfHwKLQkJCSAgICAhdGVzdF9iaXQoRU5UUllfREFUQV9JT19GQUlMRUQsICZlbnRyeS0+ZmxhZ3MpKQorCQkJaWYgKHRlc3RfYml0KEVOVFJZX09XTkVSX0RFVklDRV9EQVRBLCAmZW50cnktPmZsYWdzKSkKIAkJCQlicmVhazsKLQotCQkJcnQyeDAwbGliX3R4ZG9uZV9ub2luZm8oZW50cnksIFRYRE9ORV9GQUlMVVJFKTsKKwkJCWlmICh0ZXN0X2JpdChFTlRSWV9EQVRBX0lPX0ZBSUxFRCwgJmVudHJ5LT5mbGFncykpCisJCQkJcnQyeDAwbGliX3R4ZG9uZV9ub2luZm8oZW50cnksIFRYRE9ORV9GQUlMVVJFKTsKKwkJCWVsc2UgaWYgKHJ0MngwMHF1ZXVlX3N0YXR1c190aW1lb3V0KGVudHJ5KSkKKwkJCQlydDJ4MDBsaWJfdHhkb25lX25vaW5mbyhlbnRyeSwgVFhET05FX1VOS05PV04pOworCQkJZWxzZQorCQkJCWJyZWFrOwogCQl9CiAJfQorCisJLyoKKwkgKiBUaGUgaHcgbWF5IGRlbGF5IHNlbmRpbmcgdGhlIHBhY2tldCBhZnRlciBETUEgY29tcGxldGUKKwkgKiBpZiB0aGUgbWVkaXVtIGlzIGJ1c3ksIHRodXMgdGhlIFRYX1NUQV9GSUZPIGVudHJ5IGlzCisJICogYWxzbyBkZWxheWVkIC0+IHVzZSBhIHRpbWVyIHRvIHJldHJpZXZlIGl0LgorCSAqLworCWlmIChydDI4MDB1c2JfdHhzdGF0dXNfcGVuZGluZyhydDJ4MDBkZXYpKQorCQltb2RfdGltZXIoJnJ0MngwMGRldi0+dHhzdGF0dXNfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDIpKTsKIH0KIAogLyoKQEAgLTU1MywxOSArNjIxLDI0IEBACiAJICogVGhpcyBkZXZpY2UgaGFzIG11bHRpcGxlIGZpbHRlcnMgZm9yIGNvbnRyb2wgZnJhbWVzCiAJICogYW5kIGhhcyBhIHNlcGFyYXRlIGZpbHRlciBmb3IgUFMgUG9sbCBmcmFtZXMuCiAJICovCi0JX19zZXRfYml0KERSSVZFUl9TVVBQT1JUX0NPTlRST0xfRklMVEVSUywgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCV9fc2V0X2JpdChEUklWRVJfU1VQUE9SVF9DT05UUk9MX0ZJTFRFUl9QU1BPTEwsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwlfX3NldF9iaXQoQ0FQQUJJTElUWV9DT05UUk9MX0ZJTFRFUlMsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CisJX19zZXRfYml0KENBUEFCSUxJVFlfQ09OVFJPTF9GSUxURVJfUFNQT0xMLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOwogCiAJLyoKIAkgKiBUaGlzIGRldmljZSByZXF1aXJlcyBmaXJtd2FyZS4KIAkgKi8KLQlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfRklSTVdBUkUsICZydDJ4MDBkZXYtPmZsYWdzKTsKLQlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfTDJQQUQsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwlfX3NldF9iaXQoUkVRVUlSRV9GSVJNV0FSRSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKKwlfX3NldF9iaXQoUkVRVUlSRV9MMlBBRCwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKIAlpZiAoIW1vZHBhcmFtX25vaHdjcnlwdCkKLQkJX19zZXRfYml0KENPTkZJR19TVVBQT1JUX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCV9fc2V0X2JpdChEUklWRVJfU1VQUE9SVF9MSU5LX1RVTklORywgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCV9fc2V0X2JpdChEUklWRVJfU1VQUE9SVF9XQVRDSERPRywgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9IVF9UWF9ERVNDLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJCV9fc2V0X2JpdChDQVBBQklMSVRZX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKKwlfX3NldF9iaXQoQ0FQQUJJTElUWV9MSU5LX1RVTklORywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKKwlfX3NldF9iaXQoUkVRVUlSRV9IVF9UWF9ERVNDLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOworCV9fc2V0X2JpdChSRVFVSVJFX1RYU1RBVFVTX0ZJRk8sICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CisJX19zZXRfYml0KFJFUVVJUkVfUFNfQVVUT1dBS0UsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CisKKwlzZXR1cF90aW1lcigmcnQyeDAwZGV2LT50eHN0YXR1c190aW1lciwKKwkJICAgIHJ0MjgwMHVzYl90eF9zdGFfZmlmb190aW1lb3V0LAorCQkgICAgKHVuc2lnbmVkIGxvbmcpIHJ0MngwMGRldik7CiAKIAkvKgogCSAqIFNldCB0aGUgcnNzaSBvZmZzZXQuCkBAIC02MDIsNiArNjc1LDcgQEAKIAkuYW1wZHVfYWN0aW9uCQk9IHJ0MjgwMF9hbXBkdV9hY3Rpb24sCiAJLmZsdXNoCQkJPSBydDJ4MDBtYWNfZmx1c2gsCiAJLmdldF9zdXJ2ZXkJCT0gcnQyODAwX2dldF9zdXJ2ZXksCisJLmdldF9yaW5ncGFyYW0JCT0gcnQyeDAwbWFjX2dldF9yaW5ncGFyYW0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0MjgwMF9vcHMgcnQyODAwdXNiX3J0MjgwMF9vcHMgPSB7CkBAIC02MzAsMTEgKzcwNCwxMyBAQAogCS5saW5rX3N0YXRzCQk9IHJ0MjgwMF9saW5rX3N0YXRzLAogCS5yZXNldF90dW5lcgkJPSBydDI4MDBfcmVzZXRfdHVuZXIsCiAJLmxpbmtfdHVuZXIJCT0gcnQyODAwX2xpbmtfdHVuZXIsCisJLmdhaW5fY2FsaWJyYXRpb24JPSBydDI4MDBfZ2Fpbl9jYWxpYnJhdGlvbiwKIAkud2F0Y2hkb2cJCT0gcnQyODAwdXNiX3dhdGNoZG9nLAogCS5zdGFydF9xdWV1ZQkJPSBydDI4MDB1c2Jfc3RhcnRfcXVldWUsCiAJLmtpY2tfcXVldWUJCT0gcnQyeDAwdXNiX2tpY2tfcXVldWUsCiAJLnN0b3BfcXVldWUJCT0gcnQyODAwdXNiX3N0b3BfcXVldWUsCiAJLmZsdXNoX3F1ZXVlCQk9IHJ0MngwMHVzYl9mbHVzaF9xdWV1ZSwKKwkudHhfZG1hX2RvbmUJCT0gcnQyODAwdXNiX3R4X2RtYV9kb25lLAogCS53cml0ZV90eF9kZXNjCQk9IHJ0MjgwMHVzYl93cml0ZV90eF9kZXNjLAogCS53cml0ZV90eF9kYXRhCQk9IHJ0MjgwMHVzYl93cml0ZV90eF9kYXRhLAogCS53cml0ZV9iZWFjb24JCT0gcnQyODAwX3dyaXRlX2JlYWNvbiwKQEAgLTY5NSwyOTQgKzc3MSwzNDAgQEAKICAqLwogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHJ0MjgwMHVzYl9kZXZpY2VfdGFibGVbXSA9IHsKIAkvKiBBYm9jb20gKi8KLQl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweDI4NzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdiOCwgMHgyNzcwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4MzA3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweDMwNzEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdiOCwgMHgzMDcyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE0ODIsIDB4M2MwOSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweDI4NzApIH0sCisJeyBVU0JfREVWSUNFKDB4MDdiOCwgMHgyNzcwKSB9LAorCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4MzA3MCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweDMwNzEpIH0sCisJeyBVU0JfREVWSUNFKDB4MDdiOCwgMHgzMDcyKSB9LAorCXsgVVNCX0RFVklDRSgweDE0ODIsIDB4M2MwOSkgfSwKIAkvKiBBaXJUaWVzICovCi0JeyBVU0JfREVWSUNFKDB4MWVkYSwgMHgyMzEwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDFlZGEsIDB4MjAxMikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxZWRhLCAweDIzMTApIH0sCiAJLyogQWxsd2luICovCi0JeyBVU0JfREVWSUNFKDB4ODUxNiwgMHgyMDcwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDg1MTYsIDB4Mjc3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHg4NTE2LCAweDI4NzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4ODUxNiwgMHgzMDcwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDg1MTYsIDB4MzA3MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHg4NTE2LCAweDMwNzIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4ODUxNiwgMHgyMDcwKSB9LAorCXsgVVNCX0RFVklDRSgweDg1MTYsIDB4Mjc3MCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHg4NTE2LCAweDI4NzApIH0sCisJeyBVU0JfREVWSUNFKDB4ODUxNiwgMHgzMDcwKSB9LAorCXsgVVNCX0RFVklDRSgweDg1MTYsIDB4MzA3MSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHg4NTE2LCAweDMwNzIpIH0sCisJLyogQWxwaGEgTmV0d29ya3MgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMDYpIH0sCisJeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzA3KSB9LAorCXsgVVNCX0RFVklDRSgweDE0YjIsIDB4M2MwOSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMTIpIH0sCisJeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzIzKSB9LAorCXsgVVNCX0RFVklDRSgweDE0YjIsIDB4M2MyNSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMjcpIH0sCisJeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzI4KSB9LAorCXsgVVNCX0RFVklDRSgweDE0YjIsIDB4M2MyYykgfSwKIAkvKiBBbWl0ICovCi0JeyBVU0JfREVWSUNFKDB4MTVjNSwgMHgwMDA4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE1YzUsIDB4MDAwOCkgfSwKIAkvKiBBc2tleSAqLwotCXsgVVNCX0RFVklDRSgweDE2OTAsIDB4MDc0MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNjkwLCAweDA3NDApIH0sCiAJLyogQVNVUyAqLwotCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTczMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3MzIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzQyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTc4NCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNzYxLCAweDBiMDUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzMxKSB9LAorCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTczMikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3NDIpIH0sCisJeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzg0KSB9LAorCXsgVVNCX0RFVklDRSgweDE3NjEsIDB4MGIwNSkgfSwKIAkvKiBBenVyZVdhdmUgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMyNDcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzMjczKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzMwNSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMzMDcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzMzIxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzI0NykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMyNzMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzMzA1KSB9LAorCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzMwNykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMzMjEpIH0sCiAJLyogQmVsa2luICovCi0JeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg4MDUzKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4ODA1YyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDgxNWMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg4MjViKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4OTM1YSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDkzNWIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg4MDUzKSB9LAorCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4ODA1YykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDgxNWMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg4MjViKSB9LAorCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4OTM1YSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDkzNWIpIH0sCiAJLyogQnVmZmFsbyAqLwotCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDBlOCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAxNmYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JLyogQ29uY2VwdHJvbmljICovCi0JeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzA2KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE0YjIsIDB4M2MwNyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMDkpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzEyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE0YjIsIDB4M2MyMyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMjUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzI3KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE0YjIsIDB4M2MyOCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAwZTgpIH0sCisJeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMTZmKSB9LAorCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDFhMikgfSwKIAkvKiBDb3JlZ2EgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwN2FhLCAweDAwMmYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdhYSwgMHgwMDNjKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA3YWEsIDB4MDAzZiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxOGM1LCAweDAwMTIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDdhYSwgMHgwMDJmKSB9LAorCXsgVVNCX0RFVklDRSgweDA3YWEsIDB4MDAzYykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2FhLCAweDAwM2YpIH0sCisJeyBVU0JfREVWSUNFKDB4MThjNSwgMHgwMDEyKSB9LAogCS8qIEQtTGluayAqLwotCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MwOSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMGEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzBkKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MwZSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMGYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzExKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MxNiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMDkpIH0sCisJeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzBhKSB9LAorCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MwZCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMGUpIH0sCisJeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzBmKSB9LAorCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MxMSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMTYpIH0sCiAJLyogRHJheXRlayAqLwotCXsgVVNCX0RFVklDRSgweDA3ZmEsIDB4NzcxMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2ZhLCAweDc3MTIpIH0sCiAJLyogRWRpbWF4ICovCi0JeyBVU0JfREVWSUNFKDB4NzM5MiwgMHg3NzExKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDczOTIsIDB4NzcxNyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHg3MzkyLCAweDc3MTgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4NzM5MiwgMHg3NzExKSB9LAorCXsgVVNCX0RFVklDRSgweDczOTIsIDB4NzcxNykgfSwKKwl7IFVTQl9ERVZJQ0UoMHg3MzkyLCAweDc3MTgpIH0sCiAJLyogRW5jb3JlICovCi0JeyBVU0JfREVWSUNFKDB4MjAzZCwgMHgxNDgwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDIwM2QsIDB4MTRhOSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDNkLCAweDE0ODApIH0sCisJeyBVU0JfREVWSUNFKDB4MjAzZCwgMHgxNGE5KSB9LAogCS8qIEVuR2VuaXVzICovCi0JeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg5NzAxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4OTcwMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDk3MDMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg5NzA1KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4OTcwNiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDk3MDcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg5NzA4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4OTcwOSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDk3MDEpIH0sCisJeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg5NzAyKSB9LAorCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4OTcwMykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDk3MDUpIH0sCisJeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg5NzA2KSB9LAorCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4OTcwNykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDk3MDgpIH0sCisJeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg5NzA5KSB9LAorCS8qIEdlbXRlayAqLworCXsgVVNCX0RFVklDRSgweDE1YTksIDB4MDAxMikgfSwKIAkvKiBHaWdhYnl0ZSAqLwotCXsgVVNCX0RFVklDRSgweDEwNDQsIDB4ODAwYiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxMDQ0LCAweDgwMGQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTA0NCwgMHg4MDBiKSB9LAorCXsgVVNCX0RFVklDRSgweDEwNDQsIDB4ODAwZCkgfSwKIAkvKiBIYXdraW5nICovCi0JeyBVU0JfREVWSUNFKDB4MGU2NiwgMHgwMDAxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBlNjYsIDB4MDAwMyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZTY2LCAweDAwMDkpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGU2NiwgMHgwMDBiKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBlNjYsIDB4MDAxMyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZTY2LCAweDAwMTcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGU2NiwgMHgwMDE4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBlNjYsIDB4MDAwMSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZTY2LCAweDAwMDMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGU2NiwgMHgwMDA5KSB9LAorCXsgVVNCX0RFVklDRSgweDBlNjYsIDB4MDAwYikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZTY2LCAweDAwMTMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGU2NiwgMHgwMDE3KSB9LAorCXsgVVNCX0RFVklDRSgweDBlNjYsIDB4MDAxOCkgfSwKIAkvKiBJLU8gREFUQSAqLwotCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDk0NSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNGJiLCAweDA5NDcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwOTQ4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDk0NSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNGJiLCAweDA5NDcpIH0sCisJeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwOTQ4KSB9LAogCS8qIExpbmtzeXMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNzM3LCAweDAwNzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTczNywgMHgwMDcxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDEzYjEsIDB4MDAzMSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNzM3LCAweDAwNzApIH0sCisJeyBVU0JfREVWSUNFKDB4MTczNywgMHgwMDcxKSB9LAogCS8qIExvZ2l0ZWMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNzg5LCAweDAxNjIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDc4OSwgMHgwMTYzKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA3ODksIDB4MDE2NCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNzg5LCAweDAxNjYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDc4OSwgMHgwMTYyKSB9LAorCXsgVVNCX0RFVklDRSgweDA3ODksIDB4MDE2MykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNzg5LCAweDAxNjQpIH0sCisJeyBVU0JfREVWSUNFKDB4MDc4OSwgMHgwMTY2KSB9LAogCS8qIE1vdG9yb2xhICovCi0JeyBVU0JfREVWSUNFKDB4MTAwZCwgMHg5MDMxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDEwMGQsIDB4OTAzMSkgfSwKIAkvKiBNU0kgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDM4MjApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRiMCwgMHgzODIxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4MzgyMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDM4NzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRiMCwgMHgzODcxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4Njg5OSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDgyMWEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg4MjJhKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4ODIyYiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDgyMmMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg4NzBhKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4ODcxYSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDg3MWIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg4NzFjKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4ODk5YSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDM4MjApIH0sCisJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHgzODIxKSB9LAorCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4MzgyMikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDM4NzApIH0sCisJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHgzODcxKSB9LAorCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4Njg5OSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDgyMWEpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg4MjJhKSB9LAorCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4ODIyYikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDgyMmMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg4NzBhKSB9LAorCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4ODcxYSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDg3MWIpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg4NzFjKSB9LAorCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4ODk5YSkgfSwKIAkvKiBQYXJhICovCi0JeyBVU0JfREVWSUNFKDB4MjBiOCwgMHg4ODg4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDIwYjgsIDB4ODg4OCkgfSwKIAkvKiBQZWdhdHJvbiAqLwotCXsgVVNCX0RFVklDRSgweDFkNGQsIDB4MDAwYyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxZDRkLCAweDAwMGUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MWQ0ZCwgMHgwMDExKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDFkNGQsIDB4MDAwYykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxZDRkLCAweDAwMGUpIH0sCisJeyBVU0JfREVWSUNFKDB4MWQ0ZCwgMHgwMDExKSB9LAogCS8qIFBoaWxpcHMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNDcxLCAweDIwMGYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDQ3MSwgMHgyMDBmKSB9LAogCS8qIFBsYW5leCAqLwotCXsgVVNCX0RFVklDRSgweDIwMTksIDB4YWIyNSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMDE5LCAweGVkMDYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MjAxOSwgMHhhYjI1KSB9LAorCXsgVVNCX0RFVklDRSgweDIwMTksIDB4ZWQwNikgfSwKIAkvKiBRdWFudGEgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxYTMyLCAweDAzMDQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MWEzMiwgMHgwMzA0KSB9LAogCS8qIFJhbGluayAqLwotCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MjA3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDI3NzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgyODcwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MzA3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDMwNzEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgzMDcyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MjA3MCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDI3NzApIH0sCisJeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgyODcwKSB9LAorCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MzA3MCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDMwNzEpIH0sCisJeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgzMDcyKSB9LAogCS8qIFNhbXN1bmcgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNGU4LCAweDIwMTgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDRlOCwgMHgyMDE4KSB9LAogCS8qIFNpZW1lbnMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMjliLCAweDE4MjgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTI5YiwgMHgxODI4KSB9LAogCS8qIFNpdGVjb20gKi8KLQl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwMTcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDJiKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAyYyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwMmQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDM5KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAzYiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwM2QpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDNlKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAzZiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwNDApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDQyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDA0NyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwNDgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDE3KSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAyYikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwMmMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDJkKSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAzOSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwM2IpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDNkKSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAzZSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwM2YpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDQwKSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDA0MikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwNDcpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDQ4KSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDA1MSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwNWYpIH0sCiAJLyogU01DICovCi0JeyBVU0JfREVWSUNFKDB4MDgzYSwgMHg2NjE4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4NzUxMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweDc1MTIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDgzYSwgMHg3NTIyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4ODUyMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGE2MTgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDgzYSwgMHhhNzAxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4YTcwMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGE3MDMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDgzYSwgMHhiNTIyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4NjYxOCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweDc1MTEpIH0sCisJeyBVU0JfREVWSUNFKDB4MDgzYSwgMHg3NTEyKSB9LAorCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4NzUyMikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweDg1MjIpIH0sCisJeyBVU0JfREVWSUNFKDB4MDgzYSwgMHhhNjE4KSB9LAorCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4YTcwMSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGE3MDIpIH0sCisJeyBVU0JfREVWSUNFKDB4MDgzYSwgMHhhNzAzKSB9LAorCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4YjUyMikgfSwKIAkvKiBTcGFya2xhbiAqLwotCXsgVVNCX0RFVklDRSgweDE1YTksIDB4MDAwNiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNWE5LCAweDAwMDYpIH0sCiAJLyogU3dlZXggKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNzdmLCAweDAzMDIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JLyogVS1NZWRpYSovCi0JeyBVU0JfREVWSUNFKDB4MTU3ZSwgMHgzMDBlKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE3N2YsIDB4MDMwMikgfSwKKwkvKiBVLU1lZGlhICovCisJeyBVU0JfREVWSUNFKDB4MTU3ZSwgMHgzMDBlKSB9LAorCXsgVVNCX0RFVklDRSgweDE1N2UsIDB4MzAxMykgfSwKIAkvKiBaQ09NICovCi0JeyBVU0JfREVWSUNFKDB4MGNkZSwgMHgwMDIyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBjZGUsIDB4MDAyNSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwY2RlLCAweDAwMjIpIH0sCisJeyBVU0JfREVWSUNFKDB4MGNkZSwgMHgwMDI1KSB9LAogCS8qIFppbndlbGwgKi8KLQl7IFVTQl9ERVZJQ0UoMHg1YTU3LCAweDAyODApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4NWE1NywgMHgwMjgyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDVhNTcsIDB4MDI4MyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHg1YTU3LCAweDUyNTcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4NWE1NywgMHgwMjgwKSB9LAorCXsgVVNCX0RFVklDRSgweDVhNTcsIDB4MDI4MikgfSwKKwl7IFVTQl9ERVZJQ0UoMHg1YTU3LCAweDAyODMpIH0sCisJeyBVU0JfREVWSUNFKDB4NWE1NywgMHg1MjU3KSB9LAogCS8qIFp5eGVsICovCi0JeyBVU0JfREVWSUNFKDB4MDU4NiwgMHgzNDE2KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA1ODYsIDB4MzQxNikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTg2LCAweDM0MTgpIH0sCisJeyBVU0JfREVWSUNFKDB4MDU4NiwgMHgzNDFlKSB9LAorCXsgVVNCX0RFVklDRSgweDA1ODYsIDB4MzQzZSkgfSwKICNpZmRlZiBDT05GSUdfUlQyODAwVVNCX1JUMzNYWAogCS8qIFJhbGluayAqLwotCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MzM3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDgwNzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgzMzcwKSB9LAorCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4ODA3MCkgfSwKIAkvKiBTaXRlY29tICovCi0JeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDUwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDA1MCkgfSwKICNlbmRpZgogI2lmZGVmIENPTkZJR19SVDI4MDBVU0JfUlQzNVhYCiAJLyogQWxsd2luICovCi0JeyBVU0JfREVWSUNFKDB4ODUxNiwgMHgzNTcyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDg1MTYsIDB4MzU3MikgfSwKIAkvKiBBc2tleSAqLwotCXsgVVNCX0RFVklDRSgweDE2OTAsIDB4MDc0NCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNjkwLCAweDA3NDQpIH0sCiAJLyogQ2lzY28gKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNjdiLCAweDQwMDEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTY3YiwgMHg0MDAxKSB9LAogCS8qIEVuR2VuaXVzICovCi0JeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg5ODAxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4OTgwMSkgfSwKIAkvKiBJLU8gREFUQSAqLwotCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDk0NCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNGJiLCAweDA5NDQpIH0sCisJLyogTGlua3N5cyAqLworCXsgVVNCX0RFVklDRSgweDEzYjEsIDB4MDAyZikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNzM3LCAweDAwNzkpIH0sCiAJLyogUmFsaW5rICovCi0JeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgzNTcyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MzU3MikgfSwKIAkvKiBTaXRlY29tICovCi0JeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDQxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDA0MSkgfSwKIAkvKiBUb3NoaWJhICovCi0JeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwYTA3KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MGEwNykgfSwKIAkvKiBaaW53ZWxsICovCi0JeyBVU0JfREVWSUNFKDB4NWE1NywgMHgwMjg0KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDVhNTcsIDB4MDI4NCkgfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19SVDI4MDBVU0JfUlQ1M1hYCisJLyogQXp1cmV3YXZlICovCisJeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzMzI5KSB9LAorCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzM2NSkgfSwKKwkvKiBSYWxpbmsgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDUzNzApIH0sCisJeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHg1MzcyKSB9LAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1JUMjgwMFVTQl9VTktOT1dOCiAJLyoKIAkgKiBVbmNsZWFyIHdoYXQga2luZCBvZiBkZXZpY2VzIHRoZXNlIGFyZSAodGhleSBhcmVuJ3Qgc3VwcG9ydGVkIGJ5IHRoZQogCSAqIHZlbmRvciBsaW51eCBkcml2ZXIpLgogCSAqLworCS8qIEFib2NvbSAqLworCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4MzA3MykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweDMwNzQpIH0sCisJLyogQWxwaGEgTmV0d29ya3MgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMDgpIH0sCisJeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzExKSB9LAogCS8qIEFtaWdvICovCi0JeyBVU0JfREVWSUNFKDB4MGUwYiwgMHg5MDMxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBlMGIsIDB4OTA0MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZTBiLCAweDkwMzEpIH0sCisJeyBVU0JfREVWSUNFKDB4MGUwYiwgMHg5MDQxKSB9LAogCS8qIEFTVVMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3NjApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzYxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTc5MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE2NmEpIH0sCisJeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzYwKSB9LAorCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTc2MSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3OTApIH0sCisJeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzlkKSB9LAogCS8qIEF6dXJlV2F2ZSAqLwotCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzI2MiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMyODQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzMzIyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzI2MikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMyODQpIH0sCisJeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzMzIyKSB9LAogCS8qIEJlbGtpbiAqLwotCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4ODI1YSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDEwMDMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg4MjVhKSB9LAogCS8qIEJ1ZmZhbG8gKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAxMmUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMTQ4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDE1MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAxNWQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JLyogQ29uY2VwdHJvbmljICovCi0JeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzA4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE0YjIsIDB4M2MxMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAxMmUpIH0sCisJeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMTQ4KSB9LAorCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDE1MCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAxNWQpIH0sCiAJLyogQ29yZWdhICovCi0JeyBVU0JfREVWSUNFKDB4MDdhYSwgMHgwMDQxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA3YWEsIDB4MDA0MiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxOGM1LCAweDAwMDgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDdhYSwgMHgwMDQxKSB9LAorCXsgVVNCX0RFVklDRSgweDA3YWEsIDB4MDA0MikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxOGM1LCAweDAwMDgpIH0sCiAJLyogRC1MaW5rICovCi0JeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzBiKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MxMyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMTUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzE3KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MwYikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMTMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzE1KSB9LAorCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MxNykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDAxLCAweDNjMTcpIH0sCiAJLyogRWRpbWF4ICovCi0JeyBVU0JfREVWSUNFKDB4NzM5MiwgMHg0MDg1KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDczOTIsIDB4NDA4NSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHg3MzkyLCAweDc3MjIpIH0sCiAJLyogRW5jb3JlICovCi0JeyBVU0JfREVWSUNFKDB4MjAzZCwgMHgxNGExKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDIwM2QsIDB4MTRhMSkgfSwKIAkvKiBHZW10ZWsgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNWE5LCAweDAwMTApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTVhOSwgMHgwMDEwKSB9LAogCS8qIEdpZ2FieXRlICovCi0JeyBVU0JfREVWSUNFKDB4MTA0NCwgMHg4MDBjKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDEwNDQsIDB4ODAwYykgfSwKKwkvKiBIdWF3ZWkgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweGYxMDEpIH0sCisJLyogSS1PIERBVEEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNGJiLCAweDA5NGIpIH0sCiAJLyogTGV2ZWxPbmUgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDA2MDUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTc0MCwgMHgwNjE1KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4MDYwNSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDA2MTUpIH0sCiAJLyogTGlua3N5cyAqLwotCXsgVVNCX0RFVklDRSgweDE3MzcsIDB4MDA3NyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNzM3LCAweDAwNzgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTczNywgMHgwMDc5KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE3MzcsIDB4MDA3NykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNzM3LCAweDAwNzgpIH0sCisJLyogTG9naXRlYyAqLworCXsgVVNCX0RFVklDRSgweDA3ODksIDB4MDE2OCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNzg5LCAweDAxNjkpIH0sCiAJLyogTW90b3JvbGEgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMDBkLCAweDkwMzIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTAwZCwgMHg5MDMyKSB9LAogCS8qIE92aXNsaW5rICovCi0JeyBVU0JfREVWSUNFKDB4MWI3NSwgMHgzMDcxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDFiNzUsIDB4MzA3MiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxYjc1LCAweDMwNzEpIH0sCisJeyBVU0JfREVWSUNFKDB4MWI3NSwgMHgzMDcyKSB9LAogCS8qIFBlZ2F0cm9uICovCi0JeyBVU0JfREVWSUNFKDB4MDVhNiwgMHgwMTAxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDFkNGQsIDB4MDAwMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxZDRkLCAweDAwMTApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDVhNiwgMHgwMTAxKSB9LAorCXsgVVNCX0RFVklDRSgweDFkNGQsIDB4MDAwMikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxZDRkLCAweDAwMTApIH0sCiAJLyogUGxhbmV4ICovCi0JeyBVU0JfREVWSUNFKDB4MjAxOSwgMHg1MjAxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDIwMTksIDB4YWIyNCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDE5LCAweDUyMDEpIH0sCisJeyBVU0JfREVWSUNFKDB4MjAxOSwgMHhhYjI0KSB9LAogCS8qIFFjb20gKi8KLQl7IFVTQl9ERVZJQ0UoMHgxOGU4LCAweDYyNTkpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MThlOCwgMHg2MjU5KSB9LAorCS8qIFJhZGlvU2hhY2sgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwOGI5LCAweDExOTcpIH0sCisJLyogU2l0ZWNvbSAqLworCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAzYykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwNGEpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDRkKSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDA1MykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwNjApIH0sCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDYyKSB9LAogCS8qIFNNQyAqLwotCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4YTUxMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGM1MjIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDgzYSwgMHhkNTIyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4ZjUxMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGE1MTIpIH0sCisJeyBVU0JfREVWSUNFKDB4MDgzYSwgMHhjNTIyKSB9LAorCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4ZDUyMikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGY1MTEpIH0sCiAJLyogU3dlZXggKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNzdmLCAweDAxNTMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTc3ZiwgMHgwMzEzKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE3N2YsIDB4MDE1MykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNzdmLCAweDAzMTMpIH0sCiAJLyogWnl4ZWwgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNTg2LCAweDM0MWEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDU4NiwgMHgzNDFhKSB9LAogI2VuZGlmCiAJeyAwLCB9CiB9OwpAQCAtOTk1LDEwICsxMTE3LDE2IEBACiBNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfUlQyODcwKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorc3RhdGljIGludCBydDI4MDB1c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVzYl9pbnRmLAorCQkJICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBydDJ4MDB1c2JfcHJvYmUodXNiX2ludGYsICZydDI4MDB1c2Jfb3BzKTsKK30KKwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHJ0MjgwMHVzYl9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gS0JVSUxEX01PRE5BTUUsCiAJLmlkX3RhYmxlCT0gcnQyODAwdXNiX2RldmljZV90YWJsZSwKLQkucHJvYmUJCT0gcnQyeDAwdXNiX3Byb2JlLAorCS5wcm9iZQkJPSBydDI4MDB1c2JfcHJvYmUsCiAJLmRpc2Nvbm5lY3QJPSBydDJ4MDB1c2JfZGlzY29ubmVjdCwKIAkuc3VzcGVuZAk9IHJ0MngwMHVzYl9zdXNwZW5kLAogCS5yZXN1bWUJCT0gcnQyeDAwdXNiX3Jlc3VtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaAppbmRleCA3ZjEwMjM5Li5jNDQ2ZGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMC5oCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC1wb2xsZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgva2ZpZm8uaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogCiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAKQEAgLTM0OCw2ICszNDksMTEgQEAKIAkgKiB0byBicmluZyB0aGUgZGV2aWNlL2RyaXZlciBiYWNrIGludG8gdGhlIGRlc2lyZWQgc3RhdGUuCiAJICovCiAJc3RydWN0IGRlbGF5ZWRfd29yayB3YXRjaGRvZ193b3JrOworCisJLyoKKwkgKiBXb3JrIHN0cnVjdHVyZSBmb3Igc2NoZWR1bGluZyBwZXJpb2RpYyBBR0MgYWRqdXN0bWVudHMuCisJICovCisJc3RydWN0IGRlbGF5ZWRfd29yayBhZ2Nfd29yazsKIH07CiAKIGVudW0gcnQyeDAwX2RlbGF5ZWRfZmxhZ3MgewpAQCAtNTU2LDYgKzU2Miw3IEBACiAJCQkgICAgIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwpOwogCXZvaWQgKCpsaW5rX3R1bmVyKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgICBzdHJ1Y3QgbGlua19xdWFsICpxdWFsLCBjb25zdCB1MzIgY291bnQpOworCXZvaWQgKCpnYWluX2NhbGlicmF0aW9uKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CiAKIAkvKgogCSAqIERhdGEgcXVldWUgaGFuZGxlcnMuCkBAIC01NjQsNyArNTcxLDggQEAKIAl2b2lkICgqc3RhcnRfcXVldWUpIChzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpOwogCXZvaWQgKCpraWNrX3F1ZXVlKSAoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKTsKIAl2b2lkICgqc3RvcF9xdWV1ZSkgKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSk7Ci0Jdm9pZCAoKmZsdXNoX3F1ZXVlKSAoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKTsKKwl2b2lkICgqZmx1c2hfcXVldWUpIChzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUsIGJvb2wgZHJvcCk7CisJdm9pZCAoKnR4X2RtYV9kb25lKSAoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSk7CiAKIAkvKgogCSAqIFRYIGNvbnRyb2wgaGFuZGxlcnMKQEAgLTYzNywxMSArNjQ1LDExIEBACiB9OwogCiAvKgotICogcnQyeDAwIGRldmljZSBmbGFncworICogcnQyeDAwIHN0YXRlIGZsYWdzCiAgKi8KLWVudW0gcnQyeDAwX2ZsYWdzIHsKK2VudW0gcnQyeDAwX3N0YXRlX2ZsYWdzIHsKIAkvKgotCSAqIERldmljZSBzdGF0ZSBmbGFncworCSAqIERldmljZSBmbGFncwogCSAqLwogCURFVklDRV9TVEFURV9QUkVTRU5ULAogCURFVklDRV9TVEFURV9SRUdJU1RFUkVEX0hXLApAQCAtNjUxLDQwICs2NTksNDcgQEAKIAlERVZJQ0VfU1RBVEVfU0NBTk5JTkcsCiAKIAkvKgotCSAqIERyaXZlciByZXF1aXJlbWVudHMKLQkgKi8KLQlEUklWRVJfUkVRVUlSRV9GSVJNV0FSRSwKLQlEUklWRVJfUkVRVUlSRV9CRUFDT05fR1VBUkQsCi0JRFJJVkVSX1JFUVVJUkVfQVRJTV9RVUVVRSwKLQlEUklWRVJfUkVRVUlSRV9ETUEsCi0JRFJJVkVSX1JFUVVJUkVfQ09QWV9JViwKLQlEUklWRVJfUkVRVUlSRV9MMlBBRCwKLQlEUklWRVJfUkVRVUlSRV9UWFNUQVRVU19GSUZPLAotCURSSVZFUl9SRVFVSVJFX1RBU0tMRVRfQ09OVEVYVCwKLQlEUklWRVJfUkVRVUlSRV9TV19TRVFOTywKLQlEUklWRVJfUkVRVUlSRV9IVF9UWF9ERVNDLAotCi0JLyoKLQkgKiBEcml2ZXIgZmVhdHVyZXMKLQkgKi8KLQlDT05GSUdfU1VQUE9SVF9IV19CVVRUT04sCi0JQ09ORklHX1NVUFBPUlRfSFdfQ1JZUFRPLAotCUNPTkZJR19TVVBQT1JUX1BPV0VSX0xJTUlULAotCURSSVZFUl9TVVBQT1JUX0NPTlRST0xfRklMVEVSUywKLQlEUklWRVJfU1VQUE9SVF9DT05UUk9MX0ZJTFRFUl9QU1BPTEwsCi0JRFJJVkVSX1NVUFBPUlRfUFJFX1RCVFRfSU5URVJSVVBULAotCURSSVZFUl9TVVBQT1JUX0xJTktfVFVOSU5HLAotCURSSVZFUl9TVVBQT1JUX1dBVENIRE9HLAotCi0JLyoKIAkgKiBEcml2ZXIgY29uZmlndXJhdGlvbgogCSAqLwotCUNPTkZJR19GUkFNRV9UWVBFLAotCUNPTkZJR19SRl9TRVFVRU5DRSwKLQlDT05GSUdfRVhURVJOQUxfTE5BX0EsCi0JQ09ORklHX0VYVEVSTkFMX0xOQV9CRywKLQlDT05GSUdfRE9VQkxFX0FOVEVOTkEsCiAJQ09ORklHX0NIQU5ORUxfSFQ0MCwKKwlDT05GSUdfUE9XRVJTQVZJTkcsCit9OworCisvKgorICogcnQyeDAwIGNhcGFiaWxpdHkgZmxhZ3MKKyAqLworZW51bSBydDJ4MDBfY2FwYWJpbGl0eV9mbGFncyB7CisJLyoKKwkgKiBSZXF1aXJlbWVudHMKKwkgKi8KKwlSRVFVSVJFX0ZJUk1XQVJFLAorCVJFUVVJUkVfQkVBQ09OX0dVQVJELAorCVJFUVVJUkVfQVRJTV9RVUVVRSwKKwlSRVFVSVJFX0RNQSwKKwlSRVFVSVJFX0NPUFlfSVYsCisJUkVRVUlSRV9MMlBBRCwKKwlSRVFVSVJFX1RYU1RBVFVTX0ZJRk8sCisJUkVRVUlSRV9UQVNLTEVUX0NPTlRFWFQsCisJUkVRVUlSRV9TV19TRVFOTywKKwlSRVFVSVJFX0hUX1RYX0RFU0MsCisJUkVRVUlSRV9QU19BVVRPV0FLRSwKKworCS8qCisJICogQ2FwYWJpbGl0aWVzCisJICovCisJQ0FQQUJJTElUWV9IV19CVVRUT04sCisJQ0FQQUJJTElUWV9IV19DUllQVE8sCisJQ0FQQUJJTElUWV9QT1dFUl9MSU1JVCwKKwlDQVBBQklMSVRZX0NPTlRST0xfRklMVEVSUywKKwlDQVBBQklMSVRZX0NPTlRST0xfRklMVEVSX1BTUE9MTCwKKwlDQVBBQklMSVRZX1BSRV9UQlRUX0lOVEVSUlVQVCwKKwlDQVBBQklMSVRZX0xJTktfVFVOSU5HLAorCUNBUEFCSUxJVFlfRlJBTUVfVFlQRSwKKwlDQVBBQklMSVRZX1JGX1NFUVVFTkNFLAorCUNBUEFCSUxJVFlfRVhURVJOQUxfTE5BX0EsCisJQ0FQQUJJTElUWV9FWFRFUk5BTF9MTkFfQkcsCisJQ0FQQUJJTElUWV9ET1VCTEVfQU5URU5OQSwKKwlDQVBBQklMSVRZX0JUX0NPRVhJU1QsCiB9OwogCiAvKgpAQCAtNzMzLDEzICs3NDgsMjAgQEAKICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9MRURTICovCiAKIAkvKgotCSAqIERldmljZSBmbGFncy4KLQkgKiBJbiB0aGVzZSBmbGFncyB0aGUgY3VycmVudCBzdGF0dXMgYW5kIHNvbWUKLQkgKiBvZiB0aGUgZGV2aWNlIGNhcGFiaWxpdGllcyBhcmUgc3RvcmVkLgorCSAqIERldmljZSBzdGF0ZSBmbGFncy4KKwkgKiBJbiB0aGVzZSBmbGFncyB0aGUgY3VycmVudCBzdGF0dXMgaXMgc3RvcmVkLgorCSAqIEFjY2VzcyB0byB0aGVzZSBmbGFncyBzaG91bGQgb2NjdXIgYXRvbWljYWxseS4KIAkgKi8KIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyoKKwkgKiBEZXZpY2UgY2FwYWJpbHRpeSBmbGFncy4KKwkgKiBJbiB0aGVzZSBmbGFncyB0aGUgZGV2aWNlL2RyaXZlciBjYXBhYmlsaXRpZXMgYXJlIHN0b3JlZC4KKwkgKiBBY2Nlc3MgdG8gdGhlc2UgZmxhZ3Mgc2hvdWxkIG9jY3VyIG5vbi1hdG9taWNhbGx5LgorCSAqLworCXVuc2lnbmVkIGxvbmcgY2FwX2ZsYWdzOworCisJLyoKIAkgKiBEZXZpY2UgaW5mb3JtYXRpb24sIEJ1cyBJUlEgYW5kIG5hbWUgKFBDSSwgU29DKQogCSAqLwogCWludCBpcnE7CkBAIC04NTUsMTAgKzg3NywyMCBAQAogCXU4IGNhbGlicmF0aW9uWzJdOwogCiAJLyoKKwkgKiBBc3NvY2lhdGlvbiBpZC4KKwkgKi8KKwl1MTYgYWlkOworCisJLyoKIAkgKiBCZWFjb24gaW50ZXJ2YWwuCiAJICovCiAJdTE2IGJlYWNvbl9pbnQ7CiAKKwkvKioKKwkgKiBUaW1lc3RhbXAgb2YgbGFzdCByZWNlaXZlZCBiZWFjb24KKwkgKi8KKwl1bnNpZ25lZCBsb25nIGxhc3RfYmVhY29uOworCiAJLyoKIAkgKiBMb3cgbGV2ZWwgc3RhdGlzdGljcyB3aGljaCB3aWxsIGhhdmUKIAkgKiB0byBiZSBrZXB0IHVwIHRvIGRhdGUgd2hpbGUgZGV2aWNlIGlzIHJ1bm5pbmcuCkBAIC04ODcsNiArOTE5LDExIEBACiAJc3RydWN0IHdvcmtfc3RydWN0IHR4ZG9uZV93b3JrOwogCiAJLyoKKwkgKiBQb3dlcnNhdmluZyB3b3JrCisJICovCisJc3RydWN0IGRlbGF5ZWRfd29yayBhdXRvd2FrZXVwX3dvcms7CisKKwkvKgogCSAqIERhdGEgcXVldWUgYXJyYXlzIGZvciBSWCwgVFgsIEJlYWNvbiBhbmQgQVRJTS4KIAkgKi8KIAl1bnNpZ25lZCBpbnQgZGF0YV9xdWV1ZXM7CkBAIC05MDYsNiArOTQzLDExIEBACiAJREVDTEFSRV9LRklGT19QVFIodHhzdGF0dXNfZmlmbywgdTMyKTsKIAogCS8qCisJICogVGltZXIgdG8gZW5zdXJlIHR4IHN0YXR1cyByZXBvcnRzIGFyZSByZWFkIChydDI4MDB1c2IpLgorCSAqLworCXN0cnVjdCB0aW1lcl9saXN0IHR4c3RhdHVzX3RpbWVyOworCisJLyoKIAkgKiBUYXNrbGV0IGZvciBwcm9jZXNzaW5nIHR4IHN0YXR1cyByZXBvcnRzIChydDI4MDBwY2kpLgogCSAqLwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0eHN0YXR1c190YXNrbGV0OwpAQCAtMTIzMCw2ICsxMjcyLDEwIEBACiAJCSAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpOwogdm9pZCBydDJ4MDBtYWNfcmZraWxsX3BvbGwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBydDJ4MDBtYWNfZmx1c2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgZHJvcCk7CitpbnQgcnQyeDAwbWFjX3NldF9hbnRlbm5hKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgdHhfYW50LCB1MzIgcnhfYW50KTsKK2ludCBydDJ4MDBtYWNfZ2V0X2FudGVubmEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiAqdHhfYW50LCB1MzIgKnJ4X2FudCk7Cit2b2lkIHJ0MngwMG1hY19nZXRfcmluZ3BhcmFtKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICB1MzIgKnR4LCB1MzIgKnR4X21heCwgdTMyICpyeCwgdTMyICpyeF9tYXgpOwogCiAvKgogICogRHJpdmVyIGFsbG9jYXRpb24gaGFuZGxlcnMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY29uZmlnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY29uZmlnLmMKaW5kZXggOTQxNmUzNi4uNTU1MTgwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNvbmZpZy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYwpAQCAtMTAwLDYgKzEwMCwxMCBAQAogCWVycC5iYXNpY19yYXRlcyA9IGJzc19jb25mLT5iYXNpY19yYXRlczsKIAllcnAuYmVhY29uX2ludCA9IGJzc19jb25mLT5iZWFjb25faW50OwogCisJLyogVXBkYXRlIHRoZSBBSUQsIHRoaXMgaXMgbmVlZGVkIGZvciBkeW5hbWljIFBTIHN1cHBvcnQgKi8KKwlydDJ4MDBkZXYtPmFpZCA9IGJzc19jb25mLT5hc3NvYyA/IGJzc19jb25mLT5haWQgOiAwOworCXJ0MngwMGRldi0+bGFzdF9iZWFjb24gPSBic3NfY29uZi0+dGltZXN0YW1wOworCiAJLyogVXBkYXRlIGdsb2JhbCBiZWFjb24gaW50ZXJ2YWwgdGltZSwgdGhpcyBpcyBuZWVkZWQgZm9yIFBTIHN1cHBvcnQgKi8KIAlydDJ4MDBkZXYtPmJlYWNvbl9pbnQgPSBic3NfY29uZi0+YmVhY29uX2ludDsKIApAQCAtMTA5LDE1ICsxMTMsNiBAQAogCXJ0MngwMGRldi0+b3BzLT5saWItPmNvbmZpZ19lcnAocnQyeDAwZGV2LCAmZXJwLCBjaGFuZ2VkKTsKIH0KIAotc3RhdGljIGlubGluZQotZW51bSBhbnRlbm5hIHJ0MngwMGxpYl9jb25maWdfYW50ZW5uYV9jaGVjayhlbnVtIGFudGVubmEgY3VycmVudF9hbnQsCi0JCQkJCSAgICBlbnVtIGFudGVubmEgZGVmYXVsdF9hbnQpCi17Ci0JaWYgKGN1cnJlbnRfYW50ICE9IEFOVEVOTkFfU1dfRElWRVJTSVRZKQotCQlyZXR1cm4gY3VycmVudF9hbnQ7Ci0JcmV0dXJuIChkZWZhdWx0X2FudCAhPSBBTlRFTk5BX1NXX0RJVkVSU0lUWSkgPyBkZWZhdWx0X2FudCA6IEFOVEVOTkFfQjsKLX0KLQogdm9pZCBydDJ4MDBsaWJfY29uZmlnX2FudGVubmEoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgICAgIHN0cnVjdCBhbnRlbm5hX3NldHVwIGNvbmZpZykKIHsKQEAgLTEyNiwxOSArMTIxLDM1IEBACiAJc3RydWN0IGFudGVubmFfc2V0dXAgKmFjdGl2ZSA9ICZydDJ4MDBkZXYtPmxpbmsuYW50LmFjdGl2ZTsKIAogCS8qCi0JICogRmFpbHNhZmU6IE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHNlbmRpbmcgdGhlCi0JICogQU5URU5OQV9TV19ESVZFUlNJVFkgc3RhdGUgdG8gdGhlIGRyaXZlci4KLQkgKiBJZiB0aGF0IGhhcHBlbnMsIGZhbGxiYWNrIHRvIGhhcmR3YXJlIGRlZmF1bHRzLAotCSAqIG9yIG91ciBvd24gZGVmYXVsdC4KKwkgKiBXaGVuIHRoZSBjYWxsZXIgdHJpZXMgdG8gc2VuZCB0aGUgU1cgZGl2ZXJzaXR5LAorCSAqIHdlIG11c3QgdXBkYXRlIHRoZSBBTlRFTk5BX1JYX0RJVkVSU0lUWSBmbGFnIHRvCisJICogZW5hYmxlIHRoZSBhbnRlbm5hIGRpdmVyc2l0eSBpbiB0aGUgbGluayB0dW5lci4KKwkgKgorCSAqIFNlY29uZGx5LCB3ZSBtdXN0IGd1YXJlbnRlZSB3ZSBuZXZlciBzZW5kIHRoZQorCSAqIHNvZnR3YXJlIGFudGVubmEgZGl2ZXJzaXR5IGNvbW1hbmQgdG8gdGhlIGRyaXZlci4KIAkgKi8KLQlpZiAoIShhbnQtPmZsYWdzICYgQU5URU5OQV9SWF9ESVZFUlNJVFkpKQotCQljb25maWcucnggPSBydDJ4MDBsaWJfY29uZmlnX2FudGVubmFfY2hlY2soY29uZmlnLnJ4LCBkZWYtPnJ4KTsKLQllbHNlIGlmIChjb25maWcucnggPT0gQU5URU5OQV9TV19ESVZFUlNJVFkpCisJaWYgKCEoYW50LT5mbGFncyAmIEFOVEVOTkFfUlhfRElWRVJTSVRZKSkgeworCQlpZiAoY29uZmlnLnJ4ID09IEFOVEVOTkFfU1dfRElWRVJTSVRZKSB7CisJCQlhbnQtPmZsYWdzIHw9IEFOVEVOTkFfUlhfRElWRVJTSVRZOworCisJCQlpZiAoZGVmLT5yeCA9PSBBTlRFTk5BX1NXX0RJVkVSU0lUWSkKKwkJCQljb25maWcucnggPSBBTlRFTk5BX0I7CisJCQllbHNlCisJCQkJY29uZmlnLnJ4ID0gZGVmLT5yeDsKKwkJfQorCX0gZWxzZSBpZiAoY29uZmlnLnJ4ID09IEFOVEVOTkFfU1dfRElWRVJTSVRZKQogCQljb25maWcucnggPSBhY3RpdmUtPnJ4OwogCi0JaWYgKCEoYW50LT5mbGFncyAmIEFOVEVOTkFfVFhfRElWRVJTSVRZKSkKLQkJY29uZmlnLnR4ID0gcnQyeDAwbGliX2NvbmZpZ19hbnRlbm5hX2NoZWNrKGNvbmZpZy50eCwgZGVmLT50eCk7Ci0JZWxzZSBpZiAoY29uZmlnLnR4ID09IEFOVEVOTkFfU1dfRElWRVJTSVRZKQorCWlmICghKGFudC0+ZmxhZ3MgJiBBTlRFTk5BX1RYX0RJVkVSU0lUWSkpIHsKKwkJaWYgKGNvbmZpZy50eCA9PSBBTlRFTk5BX1NXX0RJVkVSU0lUWSkgeworCQkJYW50LT5mbGFncyB8PSBBTlRFTk5BX1RYX0RJVkVSU0lUWTsKKworCQkJaWYgKGRlZi0+dHggPT0gQU5URU5OQV9TV19ESVZFUlNJVFkpCisJCQkJY29uZmlnLnR4ID0gQU5URU5OQV9COworCQkJZWxzZQorCQkJCWNvbmZpZy50eCA9IGRlZi0+dHg7CisJCX0KKwl9IGVsc2UgaWYgKGNvbmZpZy50eCA9PSBBTlRFTk5BX1NXX0RJVkVSU0lUWSkKIAkJY29uZmlnLnR4ID0gYWN0aXZlLT50eDsKIAogCS8qCkBAIC0xNjMsMTIgKzE3NCw0MyBAQAogCQlydDJ4MDBxdWV1ZV9zdGFydF9xdWV1ZShydDJ4MDBkZXYtPnJ4KTsKIH0KIAorc3RhdGljIHUxNiBydDJ4MDBodF9jZW50ZXJfY2hhbm5lbChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3QgaHdfbW9kZV9zcGVjICpzcGVjID0gJnJ0MngwMGRldi0+c3BlYzsKKwlpbnQgY2VudGVyX2NoYW5uZWw7CisJdTE2IGk7CisKKwkvKgorCSAqIEluaXRpYWxpemUgY2VudGVyIGNoYW5uZWwgdG8gY3VycmVudCBjaGFubmVsLgorCSAqLworCWNlbnRlcl9jaGFubmVsID0gc3BlYy0+Y2hhbm5lbHNbY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWVdLmNoYW5uZWw7CisKKwkvKgorCSAqIEFkanVzdCBjZW50ZXIgY2hhbm5lbCB0byBIVDQwKyBhbmQgSFQ0MC0gb3BlcmF0aW9uLgorCSAqLworCWlmIChjb25mX2lzX2h0NDBfcGx1cyhjb25mKSkKKwkJY2VudGVyX2NoYW5uZWwgKz0gMjsKKwllbHNlIGlmIChjb25mX2lzX2h0NDBfbWludXMoY29uZikpCisJCWNlbnRlcl9jaGFubmVsIC09IChjZW50ZXJfY2hhbm5lbCA9PSAxNCkgPyAxIDogMjsKKworCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fY2hhbm5lbHM7IGkrKykKKwkJaWYgKHNwZWMtPmNoYW5uZWxzW2ldLmNoYW5uZWwgPT0gY2VudGVyX2NoYW5uZWwpCisJCQlyZXR1cm4gaTsKKworCVdBUk5fT04oMSk7CisJcmV0dXJuIGNvbmYtPmNoYW5uZWwtPmh3X3ZhbHVlOworfQorCiB2b2lkIHJ0MngwMGxpYl9jb25maWcoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJICAgICAgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mLAogCQkgICAgICB1bnNpZ25lZCBpbnQgaWVlZTgwMjExX2ZsYWdzKQogewogCXN0cnVjdCBydDJ4MDBsaWJfY29uZiBsaWJjb25mOwogCXUxNiBod192YWx1ZTsKKwl1MTYgYXV0b3dha2VfdGltZW91dDsKKwl1MTYgYmVhY29uX2ludDsKKwl1MTYgYmVhY29uX2RpZmY7CiAKIAltZW1zZXQoJmxpYmNvbmYsIDAsIHNpemVvZihsaWJjb25mKSk7CiAKQEAgLTE3NiwxMCArMjE4LDEwIEBACiAKIAlpZiAoaWVlZTgwMjExX2ZsYWdzICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpIHsKIAkJaWYgKGNvbmZfaXNfaHQ0MChjb25mKSkgewotCQkJX19zZXRfYml0KENPTkZJR19DSEFOTkVMX0hUNDAsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwkJCXNldF9iaXQoQ09ORklHX0NIQU5ORUxfSFQ0MCwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCQkJaHdfdmFsdWUgPSBydDJ4MDBodF9jZW50ZXJfY2hhbm5lbChydDJ4MDBkZXYsIGNvbmYpOwogCQl9IGVsc2UgewotCQkJX19jbGVhcl9iaXQoQ09ORklHX0NIQU5ORUxfSFQ0MCwgJnJ0MngwMGRldi0+ZmxhZ3MpOworCQkJY2xlYXJfYml0KENPTkZJR19DSEFOTkVMX0hUNDAsICZydDJ4MDBkZXYtPmZsYWdzKTsKIAkJCWh3X3ZhbHVlID0gY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWU7CiAJCX0KIApAQCAtMTkyLDYgKzIzNCwxMCBAQAogCQkgICAgICAgc2l6ZW9mKGxpYmNvbmYuY2hhbm5lbCkpOwogCX0KIAorCWlmICh0ZXN0X2JpdChSRVFVSVJFX1BTX0FVVE9XQUtFLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpICYmCisJICAgIChpZWVlODAyMTFfZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpKQorCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnJ0MngwMGRldi0+YXV0b3dha2V1cF93b3JrKTsKKwogCS8qCiAJICogU3RhcnQgY29uZmlndXJhdGlvbi4KIAkgKi8KQEAgLTIwNCw2ICsyNTAsMjYgQEAKIAlpZiAoaWVlZTgwMjExX2ZsYWdzICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpCiAJCXJ0MngwMGxpbmtfcmVzZXRfdHVuZXIocnQyeDAwZGV2LCBmYWxzZSk7CiAKKwlpZiAodGVzdF9iaXQoUkVRVUlSRV9QU19BVVRPV0FLRSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSAmJgorCSAgICAoaWVlZTgwMjExX2ZsYWdzICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKSAmJgorCSAgICAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykpIHsKKwkJYmVhY29uX2RpZmYgPSAobG9uZylqaWZmaWVzIC0gKGxvbmcpcnQyeDAwZGV2LT5sYXN0X2JlYWNvbjsKKwkJYmVhY29uX2ludCA9IG1zZWNzX3RvX2ppZmZpZXMocnQyeDAwZGV2LT5iZWFjb25faW50KTsKKworCQlpZiAoYmVhY29uX2RpZmYgPiBiZWFjb25faW50KQorCQkJYmVhY29uX2RpZmYgPSAwOworCisJCWF1dG93YWtlX3RpbWVvdXQgPSAoY29uZi0+bWF4X3NsZWVwX3BlcmlvZCAqIGJlYWNvbl9pbnQpIC0gYmVhY29uX2RpZmY7CisJCXF1ZXVlX2RlbGF5ZWRfd29yayhydDJ4MDBkZXYtPndvcmtxdWV1ZSwKKwkJCQkgICAmcnQyeDAwZGV2LT5hdXRvd2FrZXVwX3dvcmssCisJCQkJICAgYXV0b3dha2VfdGltZW91dCAtIDE1KTsKKwl9CisKKwlpZiAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykKKwkJc2V0X2JpdChDT05GSUdfUE9XRVJTQVZJTkcsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwllbHNlCisJCWNsZWFyX2JpdChDT05GSUdfUE9XRVJTQVZJTkcsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwogCXJ0MngwMGRldi0+Y3Vycl9iYW5kID0gY29uZi0+Y2hhbm5lbC0+YmFuZDsKIAlydDJ4MDBkZXYtPmN1cnJfZnJlcSA9IGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxOwogCXJ0MngwMGRldi0+dHhfcG93ZXIgPSBjb25mLT5wb3dlcl9sZXZlbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjcnlwdG8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjcnlwdG8uYwppbmRleCAzZjU2ODhmLi4xYmI5ZDQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY3J5cHRvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNyeXB0by5jCkBAIC01Miw3ICs1Miw3IEBACiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihlbnRyeS0+c2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpod19rZXkgPSB0eF9pbmZvLT5jb250cm9sLmh3X2tleTsKIAotCWlmICghdGVzdF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5mbGFncykgfHwgIWh3X2tleSkKKwlpZiAoIXRlc3RfYml0KENBUEFCSUxJVFlfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpIHx8ICFod19rZXkpCiAJCXJldHVybjsKIAogCV9fc2V0X2JpdChFTlRSWV9UWERfRU5DUllQVCwgJnR4ZGVzYy0+ZmxhZ3MpOwpAQCAtODAsNyArODAsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSA9IHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5OwogCXVuc2lnbmVkIGludCBvdmVyaGVhZCA9IDA7CiAKLQlpZiAoIXRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+ZmxhZ3MpIHx8ICFrZXkpCisJaWYgKCF0ZXN0X2JpdChDQVBBQklMSVRZX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSB8fCAha2V5KQogCQlyZXR1cm4gb3ZlcmhlYWQ7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuYwppbmRleCBjOTJkYjMyLi43ODc4N2ZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuYwpAQCAtNjMsNyArNjMsOCBAQAogCSAqIC0gZHJpdmVyIGZvbGRlcgogCSAqICAgLSBkcml2ZXIgZmlsZQogCSAqICAgLSBjaGlwc2V0IGZpbGUKLQkgKiAgIC0gZGV2aWNlIGZsYWdzIGZpbGUKKwkgKiAgIC0gZGV2aWNlIHN0YXRlIGZsYWdzIGZpbGUKKwkgKiAgIC0gZGV2aWNlIGNhcGFiaWxpdHkgZmxhZ3MgZmlsZQogCSAqICAgLSByZWdpc3RlciBmb2xkZXIKIAkgKiAgICAgLSBjc3Igb2Zmc2V0L3ZhbHVlIGZpbGVzCiAJICogICAgIC0gZWVwcm9tIG9mZnNldC92YWx1ZSBmaWxlcwpAQCAtNzgsNiArNzksNyBAQAogCXN0cnVjdCBkZW50cnkgKmRyaXZlcl9lbnRyeTsKIAlzdHJ1Y3QgZGVudHJ5ICpjaGlwc2V0X2VudHJ5OwogCXN0cnVjdCBkZW50cnkgKmRldl9mbGFnczsKKwlzdHJ1Y3QgZGVudHJ5ICpjYXBfZmxhZ3M7CiAJc3RydWN0IGRlbnRyeSAqcmVnaXN0ZXJfZm9sZGVyOwogCXN0cnVjdCBkZW50cnkgKmNzcl9vZmZfZW50cnk7CiAJc3RydWN0IGRlbnRyeSAqY3NyX3ZhbF9lbnRyeTsKQEAgLTU1Myw2ICs1NTUsMzUgQEAKIAkubGxzZWVrCQk9IGRlZmF1bHRfbGxzZWVrLAogfTsKIAorc3RhdGljIHNzaXplX3QgcnQyeDAwZGVidWdfcmVhZF9jYXBfZmxhZ3Moc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCSAgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkJICBzaXplX3QgbGVuZ3RoLAorCQkJCQkgIGxvZmZfdCAqb2Zmc2V0KQoreworCXN0cnVjdCBydDJ4MDBkZWJ1Z19pbnRmICppbnRmID0JZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgbGluZVsxNl07CisJc2l6ZV90IHNpemU7CisKKwlpZiAoKm9mZnNldCkKKwkJcmV0dXJuIDA7CisKKwlzaXplID0gc3ByaW50ZihsaW5lLCAiMHglLjh4XG4iLCAodW5zaWduZWQgaW50KWludGYtPnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKKworCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBsaW5lLCBzaXplKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkqb2Zmc2V0ICs9IHNpemU7CisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJ0MngwMGRlYnVnX2ZvcF9jYXBfZmxhZ3MgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5yZWFkCQk9IHJ0MngwMGRlYnVnX3JlYWRfY2FwX2ZsYWdzLAorCS5vcGVuCQk9IHJ0MngwMGRlYnVnX2ZpbGVfb3BlbiwKKwkucmVsZWFzZQk9IHJ0MngwMGRlYnVnX2ZpbGVfcmVsZWFzZSwKKwkubGxzZWVrCQk9IGRlZmF1bHRfbGxzZWVrLAorfTsKKwogc3RhdGljIHN0cnVjdCBkZW50cnkgKnJ0MngwMGRlYnVnX2NyZWF0ZV9maWxlX2RyaXZlcihjb25zdCBjaGFyICpuYW1lLAogCQkJCQkJICAgICBzdHJ1Y3QgcnQyeDAwZGVidWdfaW50ZgogCQkJCQkJICAgICAqaW50ZiwKQEAgLTU2OCw3ICs1OTksNiBAQAogCWJsb2ItPmRhdGEgPSBkYXRhOwogCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAiZHJpdmVyOlx0JXNcbiIsIGludGYtPnJ0MngwMGRldi0+b3BzLT5uYW1lKTsKIAlkYXRhICs9IHNwcmludGYoZGF0YSwgInZlcnNpb246XHQlc1xuIiwgRFJWX1ZFUlNJT04pOwotCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAiY29tcGlsZWQ6XHQlcyAlc1xuIiwgX19EQVRFX18sIF9fVElNRV9fKTsKIAlibG9iLT5zaXplID0gc3RybGVuKGJsb2ItPmRhdGEpOwogCiAJcmV0dXJuIGRlYnVnZnNfY3JlYXRlX2Jsb2IobmFtZSwgU19JUlVTUiwgaW50Zi0+ZHJpdmVyX2ZvbGRlciwgYmxvYik7CkBAIC02NTMsNiArNjgzLDEyIEBACiAJaWYgKElTX0VSUihpbnRmLT5kZXZfZmxhZ3MpIHx8ICFpbnRmLT5kZXZfZmxhZ3MpCiAJCWdvdG8gZXhpdDsKIAorCWludGYtPmNhcF9mbGFncyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImNhcF9mbGFncyIsIFNfSVJVU1IsCisJCQkJCSAgICAgIGludGYtPmRyaXZlcl9mb2xkZXIsIGludGYsCisJCQkJCSAgICAgICZydDJ4MDBkZWJ1Z19mb3BfY2FwX2ZsYWdzKTsKKwlpZiAoSVNfRVJSKGludGYtPmNhcF9mbGFncykgfHwgIWludGYtPmNhcF9mbGFncykKKwkJZ290byBleGl0OworCiAJaW50Zi0+cmVnaXN0ZXJfZm9sZGVyID0KIAkgICAgZGVidWdmc19jcmVhdGVfZGlyKCJyZWdpc3RlciIsIGludGYtPmRyaXZlcl9mb2xkZXIpOwogCWlmIChJU19FUlIoaW50Zi0+cmVnaXN0ZXJfZm9sZGVyKSB8fCAhaW50Zi0+cmVnaXN0ZXJfZm9sZGVyKQpAQCAtNzA2LDcgKzc0Miw3IEBACiAJCQkJaW50ZiwgJnJ0MngwMGRlYnVnX2ZvcF9xdWV1ZV9zdGF0cyk7CiAKICNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9DUllQVE8KLQlpZiAodGVzdF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5mbGFncykpCisJaWYgKHRlc3RfYml0KENBUEFCSUxJVFlfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKQogCQlpbnRmLT5jcnlwdG9fc3RhdHNfZW50cnkgPQogCQkgICAgZGVidWdmc19jcmVhdGVfZmlsZSgiY3J5cHRvIiwgU19JUlVHTywgaW50Zi0+cXVldWVfZm9sZGVyLAogCQkJCQlpbnRmLCAmcnQyeDAwZGVidWdfZm9wX2NyeXB0b19zdGF0cyk7CkBAIC03NDQsNiArNzgwLDcgQEAKIAlkZWJ1Z2ZzX3JlbW92ZShpbnRmLT5jc3Jfb2ZmX2VudHJ5KTsKIAlkZWJ1Z2ZzX3JlbW92ZShpbnRmLT5yZWdpc3Rlcl9mb2xkZXIpOwogCWRlYnVnZnNfcmVtb3ZlKGludGYtPmRldl9mbGFncyk7CisJZGVidWdmc19yZW1vdmUoaW50Zi0+Y2FwX2ZsYWdzKTsKIAlkZWJ1Z2ZzX3JlbW92ZShpbnRmLT5jaGlwc2V0X2VudHJ5KTsKIAlkZWJ1Z2ZzX3JlbW92ZShpbnRmLT5kcml2ZXJfZW50cnkpOwogCWRlYnVnZnNfcmVtb3ZlKGludGYtPmRyaXZlcl9mb2xkZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jCmluZGV4IDg0ZWI2YWQuLmMwMThkNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogCiAjaW5jbHVkZSAicnQyeDAwLmgiCiAjaW5jbHVkZSAicnQyeDAwbGliLmgiCkBAIC03MCw2ICs3MSw3IEBACiAJICovCiAJcnQyeDAwcXVldWVfc3RhcnRfcXVldWVzKHJ0MngwMGRldik7CiAJcnQyeDAwbGlua19zdGFydF90dW5lcihydDJ4MDBkZXYpOworCXJ0MngwMGxpbmtfc3RhcnRfYWdjKHJ0MngwMGRldik7CiAKIAkvKgogCSAqIFN0YXJ0IHdhdGNoZG9nIG1vbml0b3JpbmcuCkBAIC05Miw2ICs5NCw3IEBACiAJLyoKIAkgKiBTdG9wIGFsbCBxdWV1ZXMKIAkgKi8KKwlydDJ4MDBsaW5rX3N0b3BfYWdjKHJ0MngwMGRldik7CiAJcnQyeDAwbGlua19zdG9wX3R1bmVyKHJ0MngwMGRldik7CiAJcnQyeDAwcXVldWVfc3RvcF9xdWV1ZXMocnQyeDAwZGV2KTsKIAlydDJ4MDBxdWV1ZV9mbHVzaF9xdWV1ZXMocnQyeDAwZGV2LCB0cnVlKTsKQEAgLTEzOCw2ICsxNDEsMTYgQEAKIAkJCQkJICAgIHJ0MngwMGRldik7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0MngwMGxpYl9hdXRvd2FrZXVwKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0KKwkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydDJ4MDBfZGV2LCBhdXRvd2FrZXVwX3dvcmsud29yayk7CisKKwlpZiAocnQyeDAwZGV2LT5vcHMtPmxpYi0+c2V0X2RldmljZV9zdGF0ZShydDJ4MDBkZXYsIFNUQVRFX0FXQUtFKSkKKwkJRVJST1IocnQyeDAwZGV2LCAiRGV2aWNlIGZhaWxlZCB0byB3YWtldXAuXG4iKTsKKwljbGVhcl9iaXQoQ09ORklHX1BPV0VSU0FWSU5HLCAmcnQyeDAwZGV2LT5mbGFncyk7Cit9CisKIC8qCiAgKiBJbnRlcnJ1cHQgY29udGV4dCBoYW5kbGVycy4KICAqLwpAQCAtMTk3LDcgKzIxMCw3IEBACiAJICogaGVyZSBhcyB0aGV5IHdpbGwgZmV0Y2ggdGhlIG5leHQgYmVhY29uIGRpcmVjdGx5IHByaW9yIHRvCiAJICogdHJhbnNtaXNzaW9uLgogCSAqLwotCWlmICh0ZXN0X2JpdChEUklWRVJfU1VQUE9SVF9QUkVfVEJUVF9JTlRFUlJVUFQsICZydDJ4MDBkZXYtPmZsYWdzKSkKKwlpZiAodGVzdF9iaXQoQ0FQQUJJTElUWV9QUkVfVEJUVF9JTlRFUlJVUFQsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpCiAJCXJldHVybjsKIAogCS8qIGZldGNoIG5leHQgYmVhY29uICovCkBAIC0yMjIsNyArMjM1LDcgQEAKIHZvaWQgcnQyeDAwbGliX2RtYXN0YXJ0KHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnkpCiB7CiAJc2V0X2JpdChFTlRSWV9PV05FUl9ERVZJQ0VfREFUQSwgJmVudHJ5LT5mbGFncyk7Ci0JcnQyeDAwcXVldWVfaW5kZXhfaW5jKGVudHJ5LT5xdWV1ZSwgUV9JTkRFWCk7CisJcnQyeDAwcXVldWVfaW5kZXhfaW5jKGVudHJ5LCBRX0lOREVYKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMGxpYl9kbWFzdGFydCk7CiAKQEAgLTIzMCw3ICsyNDMsNyBAQAogewogCXNldF9iaXQoRU5UUllfREFUQV9TVEFUVVNfUEVORElORywgJmVudHJ5LT5mbGFncyk7CiAJY2xlYXJfYml0KEVOVFJZX09XTkVSX0RFVklDRV9EQVRBLCAmZW50cnktPmZsYWdzKTsKLQlydDJ4MDBxdWV1ZV9pbmRleF9pbmMoZW50cnktPnF1ZXVlLCBRX0lOREVYX0RNQV9ET05FKTsKKwlydDJ4MDBxdWV1ZV9pbmRleF9pbmMoZW50cnksIFFfSU5ERVhfRE1BX0RPTkUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbGliX2RtYWRvbmUpOwogCkBAIC0yNjgsNyArMjgxLDcgQEAKIAkvKgogCSAqIFJlbW92ZSBMMiBwYWRkaW5nIHdoaWNoIHdhcyBhZGRlZCBkdXJpbmcKIAkgKi8KLQlpZiAodGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfTDJQQUQsICZydDJ4MDBkZXYtPmZsYWdzKSkKKwlpZiAodGVzdF9iaXQoUkVRVUlSRV9MMlBBRCwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkKIAkJcnQyeDAwcXVldWVfcmVtb3ZlX2wycGFkKGVudHJ5LT5za2IsIGhlYWRlcl9sZW5ndGgpOwogCiAJLyoKQEAgLTI3Nyw3ICsyOTAsNyBAQAogCSAqIG1hYzgwMjExIHdpbGwgZXhwZWN0IHRoZSBzYW1lIGRhdGEgdG8gYmUgcHJlc2VudCBpdCB0aGUKIAkgKiBmcmFtZSBhcyBpdCB3YXMgcGFzc2VkIHRvIHVzLgogCSAqLwotCWlmICh0ZXN0X2JpdChDT05GSUdfU1VQUE9SVF9IV19DUllQVE8sICZydDJ4MDBkZXYtPmZsYWdzKSkKKwlpZiAodGVzdF9iaXQoQ0FQQUJJTElUWV9IV19DUllQVE8sICZydDJ4MDBkZXYtPmNhcF9mbGFncykpCiAJCXJ0MngwMGNyeXB0b190eF9pbnNlcnRfaXYoZW50cnktPnNrYiwgaGVhZGVyX2xlbmd0aCk7CiAKIAkvKgpAQCAtMzUwLDEwICszNjMsMTQgQEAKIAkgKiB3aGljaCB3b3VsZCBhbGxvdyB0aGUgcmMgYWxnb3JpdGhtIHRvIGJldHRlciBkZWNpZGUgb24KIAkgKiB3aGljaCByYXRlcyBhcmUgc3VpdGFibGUuCiAJICovCi0JaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkgeworCWlmICh0ZXN0X2JpdChUWERPTkVfQU1QRFUsICZ0eGRlc2MtPmZsYWdzKSB8fAorCSAgICB0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpIHsKIAkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQU1QRFU7CiAJCXR4X2luZm8tPnN0YXR1cy5hbXBkdV9sZW4gPSAxOwogCQl0eF9pbmZvLT5zdGF0dXMuYW1wZHVfYWNrX2xlbiA9IHN1Y2Nlc3MgPyAxIDogMDsKKworCQlpZiAoIXN1Y2Nlc3MpCisJCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVV9OT19CQUNLOwogCX0KIAogCWlmIChyYXRlX2ZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKSB7CkBAIC0zNzAsNyArMzg3LDcgQEAKIAkgKiBzZW5kIHRoZSBzdGF0dXMgcmVwb3J0IGJhY2suCiAJICovCiAJaWYgKCEoc2tiZGVzY19mbGFncyAmIFNLQkRFU0NfTk9UX01BQzgwMjExKSkgewotCQlpZiAodGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfVEFTS0xFVF9DT05URVhULCAmcnQyeDAwZGV2LT5mbGFncykpCisJCWlmICh0ZXN0X2JpdChSRVFVSVJFX1RBU0tMRVRfQ09OVEVYVCwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkKIAkJCWllZWU4MDIxMV90eF9zdGF0dXMocnQyeDAwZGV2LT5odywgZW50cnktPnNrYik7CiAJCWVsc2UKIAkJCWllZWU4MDIxMV90eF9zdGF0dXNfbmkocnQyeDAwZGV2LT5odywgZW50cnktPnNrYik7CkBAIC0zODUsNyArNDAyLDcgQEAKIAogCXJ0MngwMGRldi0+b3BzLT5saWItPmNsZWFyX2VudHJ5KGVudHJ5KTsKIAotCXJ0MngwMHF1ZXVlX2luZGV4X2luYyhlbnRyeS0+cXVldWUsIFFfSU5ERVhfRE9ORSk7CisJcnQyeDAwcXVldWVfaW5kZXhfaW5jKGVudHJ5LCBRX0lOREVYX0RPTkUpOwogCiAJLyoKIAkgKiBJZiB0aGUgZGF0YSBxdWV1ZSB3YXMgYmVsb3cgdGhlIHRocmVzaG9sZCBiZWZvcmUgdGhlIHR4ZG9uZQpAQCAtNDA5LDYgKzQyNiw3NyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbGliX3R4ZG9uZV9ub2luZm8pOwogCitzdGF0aWMgdTggKnJ0MngwMGxpYl9maW5kX2llKHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuLCB1OCBpZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQgPSAodm9pZCAqKWRhdGE7CisJdTggKnBvcywgKmVuZDsKKworCXBvcyA9ICh1OCAqKW1nbXQtPnUuYmVhY29uLnZhcmlhYmxlOworCWVuZCA9IGRhdGEgKyBsZW47CisJd2hpbGUgKHBvcyA8IGVuZCkgeworCQlpZiAocG9zICsgMiArIHBvc1sxXSA+IGVuZCkKKwkJCXJldHVybiBOVUxMOworCisJCWlmIChwb3NbMF0gPT0gaWUpCisJCQlyZXR1cm4gcG9zOworCisJCXBvcyArPSAyICsgcG9zWzFdOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBydDJ4MDBsaWJfcnhkb25lX2NoZWNrX3BzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICBzdHJ1Y3Qgcnhkb25lX2VudHJ5X2Rlc2MgKnJ4ZGVzYykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKikgc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfdGltX2llICp0aW1faWU7CisJdTggKnRpbTsKKwl1OCB0aW1fbGVuOworCWJvb2wgY2FtOworCisJLyogSWYgdGhpcyBpcyBub3QgYSBiZWFjb24sIG9yIGlmIG1hYzgwMjExIGhhcyBubyBwb3dlcnNhdmluZworCSAqIGNvbmZpZ3VyZWQsIG9yIGlmIHRoZSBkZXZpY2UgaXMgYWxyZWFkeSBpbiBwb3dlcnNhdmluZyBtb2RlCisJICogd2UgY2FuIGV4aXQgbm93LiAqLworCWlmIChsaWtlbHkoIWllZWU4MDIxMV9pc19iZWFjb24oaGRyLT5mcmFtZV9jb250cm9sKSB8fAorCQkgICAhKHJ0MngwMGRldi0+aHctPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykpKQorCQlyZXR1cm47CisKKwkvKiBtaW4uIGJlYWNvbiBsZW5ndGggKyBGQ1NfTEVOICovCisJaWYgKHNrYi0+bGVuIDw9IDQwICsgRkNTX0xFTikKKwkJcmV0dXJuOworCisJLyogYW5kIG9ubHkgYmVhY29ucyBmcm9tIHRoZSBhc3NvY2lhdGVkIEJTU0lELCBwbGVhc2UgKi8KKwlpZiAoIShyeGRlc2MtPmRldl9mbGFncyAmIFJYRE9ORV9NWV9CU1MpIHx8CisJICAgICFydDJ4MDBkZXYtPmFpZCkKKwkJcmV0dXJuOworCisJcnQyeDAwZGV2LT5sYXN0X2JlYWNvbiA9IGppZmZpZXM7CisKKwl0aW0gPSBydDJ4MDBsaWJfZmluZF9pZShza2ItPmRhdGEsIHNrYi0+bGVuIC0gRkNTX0xFTiwgV0xBTl9FSURfVElNKTsKKwlpZiAoIXRpbSkKKwkJcmV0dXJuOworCisJaWYgKHRpbVsxXSA8IHNpemVvZigqdGltX2llKSkKKwkJcmV0dXJuOworCisJdGltX2xlbiA9IHRpbVsxXTsKKwl0aW1faWUgPSAoc3RydWN0IGllZWU4MDIxMV90aW1faWUgKikgJnRpbVsyXTsKKworCS8qIENoZWNrIHdoZW5ldmVyIHRoZSBQSFkgY2FuIGJlIHR1cm5lZCBvZmYgYWdhaW4uICovCisKKwkvKiAxLiBXaGF0IGFib3V0IGJ1ZmZlcmVkIHVuaWNhc3QgdHJhZmZpYyBmb3Igb3VyIEFJRD8gKi8KKwljYW0gPSBpZWVlODAyMTFfY2hlY2tfdGltKHRpbV9pZSwgdGltX2xlbiwgcnQyeDAwZGV2LT5haWQpOworCisJLyogMi4gTWF5YmUgdGhlIEFQIHdhbnRzIHRvIHNlbmQgbXVsdGljYXN0L2Jyb2FkY2FzdCBkYXRhPyAqLworCWNhbSB8PSAodGltX2llLT5iaXRtYXBfY3RybCAmIDB4MDEpOworCisJaWYgKCFjYW0gJiYgIXRlc3RfYml0KENPTkZJR19QT1dFUlNBVklORywgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlydDJ4MDBsaWJfY29uZmlnKHJ0MngwMGRldiwgJnJ0MngwMGRldi0+aHctPmNvbmYsCisJCQkJIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUyk7Cit9CisKIHN0YXRpYyBpbnQgcnQyeDAwbGliX3J4ZG9uZV9yZWFkX3NpZ25hbChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJCQlzdHJ1Y3Qgcnhkb25lX2VudHJ5X2Rlc2MgKnJ4ZGVzYykKIHsKQEAgLTUxMSw4ICs1OTksNiBAQAogCQkgKHJ4ZGVzYy5zaXplID4gaGVhZGVyX2xlbmd0aCkgJiYKIAkJIChyeGRlc2MuZGV2X2ZsYWdzICYgUlhET05FX0wyUEFEKSkKIAkJcnQyeDAwcXVldWVfcmVtb3ZlX2wycGFkKGVudHJ5LT5za2IsIGhlYWRlcl9sZW5ndGgpOwotCWVsc2UKLQkJcnQyeDAwcXVldWVfYWxpZ25fcGF5bG9hZChlbnRyeS0+c2tiLCBoZWFkZXJfbGVuZ3RoKTsKIAogCS8qIFRyaW0gYnVmZmVyIHRvIGNvcnJlY3Qgc2l6ZSAqLwogCXNrYl90cmltKGVudHJ5LT5za2IsIHJ4ZGVzYy5zaXplKTsKQEAgLTUyNiw2ICs2MTIsMTIgQEAKIAkJcnhkZXNjLmZsYWdzIHw9IFJYX0ZMQUdfSFQ7CiAKIAkvKgorCSAqIENoZWNrIGlmIHRoaXMgaXMgYSBiZWFjb24sIGFuZCBtb3JlIGZyYW1lcyBoYXZlIGJlZW4KKwkgKiBidWZmZXJlZCB3aGlsZSB3ZSB3ZXJlIGluIHBvd2Vyc2F2aW5nIG1vZGUuCisJICovCisJcnQyeDAwbGliX3J4ZG9uZV9jaGVja19wcyhydDJ4MDBkZXYsIGVudHJ5LT5za2IsICZyeGRlc2MpOworCisJLyoKIAkgKiBVcGRhdGUgZXh0cmEgY29tcG9uZW50cwogCSAqLwogCXJ0MngwMGxpbmtfdXBkYXRlX3N0YXRzKHJ0MngwMGRldiwgZW50cnktPnNrYiwgJnJ4ZGVzYyk7CkBAIC01NTQsNyArNjQ2LDcgQEAKIAogc3VibWl0X2VudHJ5OgogCWVudHJ5LT5mbGFncyA9IDA7Ci0JcnQyeDAwcXVldWVfaW5kZXhfaW5jKGVudHJ5LT5xdWV1ZSwgUV9JTkRFWF9ET05FKTsKKwlydDJ4MDBxdWV1ZV9pbmRleF9pbmMoZW50cnksIFFfSU5ERVhfRE9ORSk7CiAJaWYgKHRlc3RfYml0KERFVklDRV9TVEFURV9QUkVTRU5ULCAmcnQyeDAwZGV2LT5mbGFncykgJiYKIAkgICAgdGVzdF9iaXQoREVWSUNFX1NUQVRFX0VOQUJMRURfUkFESU8sICZydDJ4MDBkZXYtPmZsYWdzKSkKIAkJcnQyeDAwZGV2LT5vcHMtPmxpYi0+Y2xlYXJfZW50cnkoZW50cnkpOwpAQCAtODAxLDIzICs4OTMsMjggQEAKIAkvKgogCSAqIFRha2UgVFggaGVhZHJvb20gcmVxdWlyZWQgZm9yIGFsaWdubWVudCBpbnRvIGFjY291bnQuCiAJICovCi0JaWYgKHRlc3RfYml0KERSSVZFUl9SRVFVSVJFX0wyUEFELCAmcnQyeDAwZGV2LT5mbGFncykpCisJaWYgKHRlc3RfYml0KFJFUVVJUkVfTDJQQUQsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpCiAJCXJ0MngwMGRldi0+aHctPmV4dHJhX3R4X2hlYWRyb29tICs9IFJUMlgwMF9MMlBBRF9TSVpFOwotCWVsc2UgaWYgKHRlc3RfYml0KERSSVZFUl9SRVFVSVJFX0RNQSwgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCWVsc2UgaWYgKHRlc3RfYml0KFJFUVVJUkVfRE1BLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKQogCQlydDJ4MDBkZXYtPmh3LT5leHRyYV90eF9oZWFkcm9vbSArPSBSVDJYMDBfQUxJR05fU0laRTsKIAogCS8qCiAJICogQWxsb2NhdGUgdHggc3RhdHVzIEZJRk8gZm9yIGRyaXZlciB1c2UuCiAJICovCi0JaWYgKHRlc3RfYml0KERSSVZFUl9SRVFVSVJFX1RYU1RBVFVTX0ZJRk8sICZydDJ4MDBkZXYtPmZsYWdzKSkgeworCWlmICh0ZXN0X2JpdChSRVFVSVJFX1RYU1RBVFVTX0ZJRk8sICZydDJ4MDBkZXYtPmNhcF9mbGFncykpIHsKIAkJLyoKLQkJICogQWxsb2NhdGUgdHhzdGF0dXMgZmlmbyBhbmQgdGFza2xldCwgd2UgdXNlIGEgc2l6ZSBvZiA1MTIKLQkJICogZm9yIHRoZSBrZmlmbyB3aGljaCBpcyBiaWcgZW5vdWdoIHRvIHN0b3JlIDUxMi80PTEyOCB0eAotCQkgKiBzdGF0dXMgcmVwb3J0cy4gSW4gdGhlIHdvcnN0IGNhc2UgKHR4IHN0YXR1cyBmb3IgYWxsIHR4Ci0JCSAqIHF1ZXVlcyBnZXRzIHJlcG9ydGVkIGJlZm9yZSB3ZSd2ZSBnb3QgYSBjaGFuY2UgdG8gaGFuZGxlCi0JCSAqIHRoZW0pIDI0KjQ9Mzg0IHR4IHN0YXR1cyByZXBvcnRzIG5lZWQgdG8gYmUgY2FjaGVkLgorCQkgKiBBbGxvY2F0ZSB0aGUgdHhzdGF0dXMgZmlmby4gSW4gdGhlIHdvcnN0IGNhc2UgdGhlIHR4CisJCSAqIHN0YXR1cyBmaWZvIGhhcyB0byBob2xkIHRoZSB0eCBzdGF0dXMgb2YgYWxsIGVudHJpZXMKKwkJICogaW4gYWxsIHR4IHF1ZXVlcy4gSGVuY2UsIGNhbGN1bGF0ZSB0aGUga2ZpZm8gc2l6ZSBhcworCQkgKiB0eF9xdWV1ZXMgKiBlbnRyeV9udW0gYW5kIHJvdW5kIHVwIHRvIHRoZSBuZWFyZXN0CisJCSAqIHBvd2VyIG9mIDIuCiAJCSAqLwotCQlzdGF0dXMgPSBrZmlmb19hbGxvYygmcnQyeDAwZGV2LT50eHN0YXR1c19maWZvLCA1MTIsCisJCWludCBrZmlmb19zaXplID0KKwkJCXJvdW5kdXBfcG93X29mX3R3byhydDJ4MDBkZXYtPm9wcy0+dHhfcXVldWVzICoKKwkJCQkJICAgcnQyeDAwZGV2LT5vcHMtPnR4LT5lbnRyeV9udW0gKgorCQkJCQkgICBzaXplb2YodTMyKSk7CisKKwkJc3RhdHVzID0ga2ZpZm9fYWxsb2MoJnJ0MngwMGRldi0+dHhzdGF0dXNfZmlmbywga2ZpZm9fc2l6ZSwKIAkJCQkgICAgIEdGUF9LRVJORUwpOwogCQlpZiAoc3RhdHVzKQogCQkJcmV0dXJuIHN0YXR1czsKQEAgLTEwMDcsNiArMTEwNCw3IEBACiAJfQogCiAJSU5JVF9XT1JLKCZydDJ4MDBkZXYtPmludGZfd29yaywgcnQyeDAwbGliX2ludGZfc2NoZWR1bGVkKTsKKwlJTklUX0RFTEFZRURfV09SSygmcnQyeDAwZGV2LT5hdXRvd2FrZXVwX3dvcmssIHJ0MngwMGxpYl9hdXRvd2FrZXVwKTsKIAogCS8qCiAJICogTGV0IHRoZSBkcml2ZXIgcHJvYmUgdGhlIGRldmljZSB0byBkZXRlY3QgdGhlIGNhcGFiaWxpdGllcy4KQEAgLTEwNjMsNiArMTE2MSw3IEBACiAJICovCiAJY2FuY2VsX3dvcmtfc3luYygmcnQyeDAwZGV2LT5pbnRmX3dvcmspOwogCWlmIChydDJ4MDBfaXNfdXNiKHJ0MngwMGRldikpIHsKKwkJZGVsX3RpbWVyX3N5bmMoJnJ0MngwMGRldi0+dHhzdGF0dXNfdGltZXIpOwogCQljYW5jZWxfd29ya19zeW5jKCZydDJ4MDBkZXYtPnJ4ZG9uZV93b3JrKTsKIAkJY2FuY2VsX3dvcmtfc3luYygmcnQyeDAwZGV2LT50eGRvbmVfd29yayk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGZpcm13YXJlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZmlybXdhcmUuYwppbmRleCBiZTBmZjc4Li5mMzE2YWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZmlybXdhcmUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZmlybXdhcmUuYwpAQCAtOTksNyArOTksNyBAQAogewogCWludCByZXR2YWw7CiAKLQlpZiAoIXRlc3RfYml0KERSSVZFUl9SRVFVSVJFX0ZJUk1XQVJFLCAmcnQyeDAwZGV2LT5mbGFncykpCisJaWYgKCF0ZXN0X2JpdChSRVFVSVJFX0ZJUk1XQVJFLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKQogCQlyZXR1cm4gMDsKIAogCWlmICghcnQyeDAwZGV2LT5mdykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGh0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwaHQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUxMjE5ZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwaHQuYworKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgSXZvIHZhbiBEb29ybiA8SXZEb29ybkBnbWFpbC5jb20+Ci0JPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KLQotCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0JaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLQl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLQlUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLQlidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotCU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQotCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLQlZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZQotCUZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLQk1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICovCi0KLS8qCi0JTW9kdWxlOiBydDJ4MDBsaWIKLQlBYnN0cmFjdDogcnQyeDAwIEhUIHNwZWNpZmljIHJvdXRpbmVzLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQotI2luY2x1ZGUgInJ0MngwMC5oIgotI2luY2x1ZGUgInJ0MngwMGxpYi5oIgotCi12b2lkIHJ0MngwMGh0X2NyZWF0ZV90eF9kZXNjcmlwdG9yKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCi0JCQkJICAgc3RydWN0IHR4ZW50cnlfZGVzYyAqdHhkZXNjLAotCQkJCSAgIGNvbnN0IHN0cnVjdCBydDJ4MDBfcmF0ZSAqaHdyYXRlKQotewotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IoZW50cnktPnNrYik7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICp0eHJhdGUgPSAmdHhfaW5mby0+Y29udHJvbC5yYXRlc1swXTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopZW50cnktPnNrYi0+ZGF0YTsKLQotCWlmICh0eF9pbmZvLT5jb250cm9sLnN0YSkKLQkJdHhkZXNjLT51Lmh0Lm1wZHVfZGVuc2l0eSA9Ci0JCSAgICB0eF9pbmZvLT5jb250cm9sLnN0YS0+aHRfY2FwLmFtcGR1X2RlbnNpdHk7Ci0KLQl0eGRlc2MtPnUuaHQuYmFfc2l6ZSA9IDc7CS8qIEZJWE1FOiBXaGF0IHZhbHVlIGlzIG5lZWRlZD8gKi8KLQotCXR4ZGVzYy0+dS5odC5zdGJjID0KLQkgICAgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9TVEJDKSA+PiBJRUVFODAyMTFfVFhfQ1RMX1NUQkNfU0hJRlQ7Ci0KLQkvKgotCSAqIElmIElFRUU4MDIxMV9UWF9SQ19NQ1MgaXMgc2V0IHR4cmF0ZS0+aWR4IGp1c3QgY29udGFpbnMgdGhlCi0JICogbWNzIHJhdGUgdG8gYmUgdXNlZAotCSAqLwotCWlmICh0eHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX01DUykgewotCQl0eGRlc2MtPnUuaHQubWNzID0gdHhyYXRlLT5pZHg7Ci0KLQkJLyoKLQkJICogTUlNTyBQUyBzaG91bGQgYmUgc2V0IHRvIDEgZm9yIFNUQSdzIHVzaW5nIGR5bmFtaWMgU00gUFMKLQkJICogd2hlbiB1c2luZyBtb3JlIHRoZW4gb25lIHR4IHN0cmVhbSAoPk1DUzcpLgotCQkgKi8KLQkJaWYgKHR4X2luZm8tPmNvbnRyb2wuc3RhICYmIHR4ZGVzYy0+dS5odC5tY3MgPiA3ICYmCi0JCSAgICAoKHR4X2luZm8tPmNvbnRyb2wuc3RhLT5odF9jYXAuY2FwICYKLQkJICAgICAgSUVFRTgwMjExX0hUX0NBUF9TTV9QUykgPj4KLQkJICAgICBJRUVFODAyMTFfSFRfQ0FQX1NNX1BTX1NISUZUKSA9PQotCQkgICAgV0xBTl9IVF9DQVBfU01fUFNfRFlOQU1JQykKLQkJCV9fc2V0X2JpdChFTlRSWV9UWERfSFRfTUlNT19QUywgJnR4ZGVzYy0+ZmxhZ3MpOwotCX0gZWxzZSB7Ci0JCXR4ZGVzYy0+dS5odC5tY3MgPSBydDJ4MDBfZ2V0X3JhdGVfbWNzKGh3cmF0ZS0+bWNzKTsKLQkJaWYgKHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFKQotCQkJdHhkZXNjLT51Lmh0Lm1jcyB8PSAweDA4OwotCX0KLQotCS8qCi0JICogVGhpcyBmcmFtZSBpcyBlbGlnaWJsZSBmb3IgYW4gQU1QRFUsIGhvd2V2ZXIsIGRvbid0IGFnZ3JlZ2F0ZQotCSAqIGZyYW1lcyB0aGF0IGFyZSBpbnRlbmRlZCB0byBwcm9iZSBhIHNwZWNpZmljIHR4IHJhdGUuCi0JICovCi0JaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSAmJgotCSAgICAhKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9SQVRFX0NUUkxfUFJPQkUpKQotCQlfX3NldF9iaXQoRU5UUllfVFhEX0hUX0FNUERVLCAmdHhkZXNjLT5mbGFncyk7Ci0KLQkvKgotCSAqIFNldCA0ME1oeiBtb2RlIGlmIG5lY2Vzc2FyeSAoZm9yIGxlZ2FjeSByYXRlcyB0aGlzIHdpbGwKLQkgKiBkdXBsaWNhdGUgdGhlIGZyYW1lIHRvIGJvdGggY2hhbm5lbHMpLgotCSAqLwotCWlmICh0eHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSCB8fAotCSAgICB0eHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX0RVUF9EQVRBKQotCQlfX3NldF9iaXQoRU5UUllfVFhEX0hUX0JXXzQwLCAmdHhkZXNjLT5mbGFncyk7Ci0JaWYgKHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0kpCi0JCV9fc2V0X2JpdChFTlRSWV9UWERfSFRfU0hPUlRfR0ksICZ0eGRlc2MtPmZsYWdzKTsKLQotCS8qCi0JICogRGV0ZXJtaW5lIElGUyB2YWx1ZXMKLQkgKiAtIFVzZSBUWE9QX0JBQ0tPRkYgZm9yIG1hbmFnZW1lbnQgZnJhbWVzCi0JICogLSBVc2UgVFhPUF9TSUZTIGZvciBmcmFnbWVudCBidXJzdHMKLQkgKiAtIFVzZSBUWE9QX0hUVFhPUCBmb3IgZXZlcnl0aGluZyBlbHNlCi0JICoKLQkgKiBOb3RlOiBydDI4MDAgZGV2aWNlcyB3b24ndCB1c2UgQ1RTIHByb3RlY3Rpb24gKGlmIHVzZWQpCi0JICogZm9yIGZyYW1lcyBub3QgdHJhbnNtaXR0ZWQgd2l0aCBUWE9QX0hUVFhPUAotCSAqLwotCWlmIChpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpKQotCQl0eGRlc2MtPnUuaHQudHhvcCA9IFRYT1BfQkFDS09GRjsKLQllbHNlIGlmICghKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9GSVJTVF9GUkFHTUVOVCkpCi0JCXR4ZGVzYy0+dS5odC50eG9wID0gVFhPUF9TSUZTOwotCWVsc2UKLQkJdHhkZXNjLT51Lmh0LnR4b3AgPSBUWE9QX0hUVFhPUDsKLX0KLQotdTE2IHJ0MngwMGh0X2NlbnRlcl9jaGFubmVsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkgICAgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQotewotCXN0cnVjdCBod19tb2RlX3NwZWMgKnNwZWMgPSAmcnQyeDAwZGV2LT5zcGVjOwotCWludCBjZW50ZXJfY2hhbm5lbDsKLQl1MTYgaTsKLQotCS8qCi0JICogSW5pdGlhbGl6ZSBjZW50ZXIgY2hhbm5lbCB0byBjdXJyZW50IGNoYW5uZWwuCi0JICovCi0JY2VudGVyX2NoYW5uZWwgPSBzcGVjLT5jaGFubmVsc1tjb25mLT5jaGFubmVsLT5od192YWx1ZV0uY2hhbm5lbDsKLQotCS8qCi0JICogQWRqdXN0IGNlbnRlciBjaGFubmVsIHRvIEhUNDArIGFuZCBIVDQwLSBvcGVyYXRpb24uCi0JICovCi0JaWYgKGNvbmZfaXNfaHQ0MF9wbHVzKGNvbmYpKQotCQljZW50ZXJfY2hhbm5lbCArPSAyOwotCWVsc2UgaWYgKGNvbmZfaXNfaHQ0MF9taW51cyhjb25mKSkKLQkJY2VudGVyX2NoYW5uZWwgLT0gKGNlbnRlcl9jaGFubmVsID09IDE0KSA/IDEgOiAyOwotCi0JZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9jaGFubmVsczsgaSsrKQotCQlpZiAoc3BlYy0+Y2hhbm5lbHNbaV0uY2hhbm5lbCA9PSBjZW50ZXJfY2hhbm5lbCkKLQkJCXJldHVybiBpOwotCi0JV0FSTl9PTigxKTsKLQlyZXR1cm4gY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWU7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGliLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGliLmgKaW5kZXggMmQ5NGNiYS4uMzIyY2M0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaWIuaApAQCAtMzIsNiArMzIsNyBAQAogICovCiAjZGVmaW5lIFdBVENIRE9HX0lOVEVSVkFMCXJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoSFopCiAjZGVmaW5lIExJTktfVFVORV9JTlRFUlZBTAlyb3VuZF9qaWZmaWVzX3JlbGF0aXZlKEhaKQorI2RlZmluZSBBR0NfSU5URVJWQUwJCXJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoNCAqIEhaKQogCiAvKgogICogcnQyeDAwX3JhdGU6IFBlciByYXRlIGRldmljZSBpbmZvcm1hdGlvbgpAQCAtMTE5LDE2ICsxMjAsNiBAQAogdm9pZCBydDJ4MDBxdWV1ZV9hbGlnbl9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogLyoqCi0gKiBydDJ4MDBxdWV1ZV9hbGlnbl9wYXlsb2FkIC0gQWxpZ24gODAyLjExIHBheWxvYWQgdG8gNC1ieXRlIGJvdW5kYXJ5Ci0gKiBAc2tiOiBUaGUgc2tiIHRvIGFsaWduCi0gKiBAaGVhZGVyX2xlbmd0aDogTGVuZ3RoIG9mIDgwMi4xMSBoZWFkZXIKLSAqCi0gKiBBbGlnbiB0aGUgODAyLjExIHBheWxvYWQgdG8gYSA0LWJ5dGUgYm91bmRhcnksIHRoaXMgY291bGQKLSAqIG1lYW4gdGhlIGhlYWRlciBpcyBub3QgYWxpZ25lZCBwcm9wZXJseSB0aG91Z2guCi0gKi8KLXZvaWQgcnQyeDAwcXVldWVfYWxpZ25fcGF5bG9hZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZGVyX2xlbmd0aCk7Ci0KLS8qKgogICogcnQyeDAwcXVldWVfaW5zZXJ0X2wycGFkIC0gQWxpZ24gODAyLjExIGhlYWRlciAmIHBheWxvYWQgdG8gNC1ieXRlIGJvdW5kYXJ5CiAgKiBAc2tiOiBUaGUgc2tiIHRvIGFsaWduCiAgKiBAaGVhZGVyX2xlbmd0aDogTGVuZ3RoIG9mIDgwMi4xMSBoZWFkZXIKQEAgLTE4NCwxNCArMTc1LDE0IEBACiAKIC8qKgogICogcnQyeDAwcXVldWVfaW5kZXhfaW5jIC0gSW5kZXggaW5jcmVtZW50YXRpb24gZnVuY3Rpb24KLSAqIEBxdWV1ZTogUXVldWUgKCZzdHJ1Y3QgZGF0YV9xdWV1ZSkgdG8gcGVyZm9ybSB0aGUgYWN0aW9uIG9uLgorICogQGVudHJ5OiBRdWV1ZSBlbnRyeSAoJnN0cnVjdCBxdWV1ZV9lbnRyeSkgdG8gcGVyZm9ybSB0aGUgYWN0aW9uIG9uLgogICogQGluZGV4OiBJbmRleCB0eXBlICgmZW51bSBxdWV1ZV9pbmRleCkgdG8gcGVyZm9ybSB0aGUgYWN0aW9uIG9uLgogICoKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBpbmNyZWFzZSB0aGUgcmVxdWVzdGVkIGluZGV4IG9uIHRoZSBxdWV1ZSwKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBpbmNyZWFzZSB0aGUgcmVxdWVzdGVkIGluZGV4IG9uIHRoZSBlbnRyeSdzIHF1ZXVlLAogICogaXQgd2lsbCBncmFiIHRoZSBhcHByb3ByaWF0ZSBsb2NrcyBhbmQgaGFuZGxlIHF1ZXVlIG92ZXJmbG93IGV2ZW50cyBieQogICogcmVzZXR0aW5nIHRoZSBpbmRleCB0byB0aGUgc3RhcnQgb2YgdGhlIHF1ZXVlLgogICovCi12b2lkIHJ0MngwMHF1ZXVlX2luZGV4X2luYyhzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUsIGVudW0gcXVldWVfaW5kZXggaW5kZXgpOwordm9pZCBydDJ4MDBxdWV1ZV9pbmRleF9pbmMoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwgZW51bSBxdWV1ZV9pbmRleCBpbmRleCk7CiAKIC8qKgogICogcnQyeDAwcXVldWVfaW5pdF9xdWV1ZXMgLSBJbml0aWFsaXplIGFsbCBkYXRhIHF1ZXVlcwpAQCAtMjgxLDYgKzI3MiwxOCBAQAogdm9pZCBydDJ4MDBsaW5rX3N0b3Bfd2F0Y2hkb2coc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CiAKIC8qKgorICogcnQyeDAwbGlua19zdGFydF9hZ2MgLSBTdGFydCBwZXJpb2RpYyBnYWluIGNhbGlicmF0aW9uCisgKiBAcnQyeDAwZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2Rldi4KKyAqLwordm9pZCBydDJ4MDBsaW5rX3N0YXJ0X2FnYyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKKworLyoqCisgKiBydDJ4MDBsaW5rX3N0b3BfYWdjIC0gU3RvcCBwZXJpb2RpYyBnYWluIGNhbGlicmF0aW9uCisgKiBAcnQyeDAwZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2Rldi4KKyAqLwordm9pZCBydDJ4MDBsaW5rX3N0b3BfYWdjKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOworCisvKioKICAqIHJ0MngwMGxpbmtfcmVnaXN0ZXIgLSBJbml0aWFsaXplIGxpbmsgdHVuaW5nICYgd2F0Y2hkb2cgZnVuY3Rpb25hbGl0eQogICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYuCiAgKgpAQCAtMzg1LDQxICszODgsMTcgQEAKICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9DUllQVE8gKi8KIAogLyoKLSAqIEhUIGhhbmRsZXJzLgotICovCi0jaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfSFQKLXZvaWQgcnQyeDAwaHRfY3JlYXRlX3R4X2Rlc2NyaXB0b3Ioc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwKLQkJCQkgICBzdHJ1Y3QgdHhlbnRyeV9kZXNjICp0eGRlc2MsCi0JCQkJICAgY29uc3Qgc3RydWN0IHJ0MngwMF9yYXRlICpod3JhdGUpOwotCi11MTYgcnQyeDAwaHRfY2VudGVyX2NoYW5uZWwoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBydDJ4MDBodF9jcmVhdGVfdHhfZGVzY3JpcHRvcihzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAotCQkJCQkJIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYywKLQkJCQkJCSBjb25zdCBzdHJ1Y3QgcnQyeDAwX3JhdGUgKmh3cmF0ZSkKLXsKLX0KLQotc3RhdGljIGlubGluZSB1MTYgcnQyeDAwaHRfY2VudGVyX2NoYW5uZWwoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCi17Ci0JcmV0dXJuIGNvbmYtPmNoYW5uZWwtPmh3X3ZhbHVlOwotfQotI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX0hUICovCi0KLS8qCiAgKiBSRmtpbGwgaGFuZGxlcnMuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBydDJ4MDByZmtpbGxfcmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlpZiAodGVzdF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5mbGFncykpCisJaWYgKHRlc3RfYml0KENBUEFCSUxJVFlfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKQogCQl3aXBoeV9yZmtpbGxfc3RhcnRfcG9sbGluZyhydDJ4MDBkZXYtPmh3LT53aXBoeSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBydDJ4MDByZmtpbGxfdW5yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewotCWlmICh0ZXN0X2JpdChDT05GSUdfU1VQUE9SVF9IV19CVVRUT04sICZydDJ4MDBkZXYtPmZsYWdzKSkKKwlpZiAodGVzdF9iaXQoQ0FQQUJJTElUWV9IV19CVVRUT04sICZydDJ4MDBkZXYtPmNhcF9mbGFncykpCiAJCXdpcGh5X3Jma2lsbF9zdG9wX3BvbGxpbmcocnQyeDAwZGV2LT5ody0+d2lwaHkpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGluay5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpbmsuYwppbmRleCAyOWFiZmRlLi5lYTEwYjAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGluay5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaW5rLmMKQEAgLTE5MiwxNyArMTkyLDcgQEAKIAkvKgogCSAqIERldGVybWluZSBpZiBzb2Z0d2FyZSBkaXZlcnNpdHkgaXMgZW5hYmxlZCBmb3IKIAkgKiBlaXRoZXIgdGhlIFRYIG9yIFJYIGFudGVubmEgKG9yIGJvdGgpLgotCSAqIEFsd2F5cyBwZXJmb3JtIHRoaXMgY2hlY2sgc2luY2Ugd2l0aGluIHRoZSBsaW5rCi0JICogdHVuZXIgaW50ZXJ2YWwgdGhlIGNvbmZpZ3VyYXRpb24gbWlnaHQgaGF2ZSBjaGFuZ2VkLgogCSAqLwotCWFudC0+ZmxhZ3MgJj0gfkFOVEVOTkFfUlhfRElWRVJTSVRZOwotCWFudC0+ZmxhZ3MgJj0gfkFOVEVOTkFfVFhfRElWRVJTSVRZOwotCi0JaWYgKHJ0MngwMGRldi0+ZGVmYXVsdF9hbnQucnggPT0gQU5URU5OQV9TV19ESVZFUlNJVFkpCi0JCWFudC0+ZmxhZ3MgfD0gQU5URU5OQV9SWF9ESVZFUlNJVFk7Ci0JaWYgKHJ0MngwMGRldi0+ZGVmYXVsdF9hbnQudHggPT0gQU5URU5OQV9TV19ESVZFUlNJVFkpCi0JCWFudC0+ZmxhZ3MgfD0gQU5URU5OQV9UWF9ESVZFUlNJVFk7Ci0KIAlpZiAoIShhbnQtPmZsYWdzICYgQU5URU5OQV9SWF9ESVZFUlNJVFkpICYmCiAJICAgICEoYW50LT5mbGFncyAmIEFOVEVOTkFfVFhfRElWRVJTSVRZKSkgewogCQlhbnQtPmZsYWdzID0gMDsKQEAgLTM4Myw3ICszNzMsNyBAQAogCSAqIGRvIG5vdCBzdXBwb3J0IGxpbmsgdHVuaW5nIGF0IGFsbCwgd2hpbGUgb3RoZXIgZGV2aWNlcyBjYW4gZGlzYWJsZQogCSAqIHRoZSBmZWF0dXJlIGZyb20gdGhlIEVFUFJPTS4KIAkgKi8KLQlpZiAodGVzdF9iaXQoRFJJVkVSX1NVUFBPUlRfTElOS19UVU5JTkcsICZydDJ4MDBkZXYtPmZsYWdzKSkKKwlpZiAodGVzdF9iaXQoQ0FQQUJJTElUWV9MSU5LX1RVTklORywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkKIAkJcnQyeDAwZGV2LT5vcHMtPmxpYi0+bGlua190dW5lcihydDJ4MDBkZXYsIHF1YWwsIGxpbmstPmNvdW50KTsKIAogCS8qCkBAIC00MTMsMTIgKzQwMywxMSBAQAogewogCXN0cnVjdCBsaW5rICpsaW5rID0gJnJ0MngwMGRldi0+bGluazsKIAotCWlmICghdGVzdF9iaXQoREVWSUNFX1NUQVRFX1BSRVNFTlQsICZydDJ4MDBkZXYtPmZsYWdzKSB8fAotCSAgICAhdGVzdF9iaXQoRFJJVkVSX1NVUFBPUlRfV0FUQ0hET0csICZydDJ4MDBkZXYtPmZsYWdzKSkKLQkJcmV0dXJuOwotCi0JaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhydDJ4MDBkZXYtPmh3LAotCQkJCSAgICAgJmxpbmstPndhdGNoZG9nX3dvcmssIFdBVENIRE9HX0lOVEVSVkFMKTsKKwlpZiAodGVzdF9iaXQoREVWSUNFX1NUQVRFX1BSRVNFTlQsICZydDJ4MDBkZXYtPmZsYWdzKSAmJgorCSAgICBydDJ4MDBkZXYtPm9wcy0+bGliLT53YXRjaGRvZykKKwkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhydDJ4MDBkZXYtPmh3LAorCQkJCQkgICAgICZsaW5rLT53YXRjaGRvZ193b3JrLAorCQkJCQkgICAgIFdBVENIRE9HX0lOVEVSVkFMKTsKIH0KIAogdm9pZCBydDJ4MDBsaW5rX3N0b3Bfd2F0Y2hkb2coc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKQEAgLTQ0Nyw4ICs0MzYsNDYgQEAKIAkJCQkJICAgICBXQVRDSERPR19JTlRFUlZBTCk7CiB9CiAKK3ZvaWQgcnQyeDAwbGlua19zdGFydF9hZ2Moc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwlzdHJ1Y3QgbGluayAqbGluayA9ICZydDJ4MDBkZXYtPmxpbms7CisKKwlpZiAodGVzdF9iaXQoREVWSUNFX1NUQVRFX1BSRVNFTlQsICZydDJ4MDBkZXYtPmZsYWdzKSAmJgorCSAgICBydDJ4MDBkZXYtPm9wcy0+bGliLT5nYWluX2NhbGlicmF0aW9uKQorCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHJ0MngwMGRldi0+aHcsCisJCQkJCSAgICAgJmxpbmstPmFnY193b3JrLAorCQkJCQkgICAgIEFHQ19JTlRFUlZBTCk7Cit9CisKK3ZvaWQgcnQyeDAwbGlua19zdG9wX2FnYyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcnQyeDAwZGV2LT5saW5rLmFnY193b3JrKTsKK30KKworc3RhdGljIHZvaWQgcnQyeDAwbGlua19hZ2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPQorCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0MngwMF9kZXYsIGxpbmsuYWdjX3dvcmsud29yayk7CisJc3RydWN0IGxpbmsgKmxpbmsgPSAmcnQyeDAwZGV2LT5saW5rOworCisJLyoKKwkgKiBXaGVuIHRoZSByYWRpbyBpcyBzaHV0dGluZyBkb3duIHdlIHNob3VsZAorCSAqIGltbWVkaWF0ZWx5IGNlYXNlIHRoZSB3YXRjaGRvZyBtb25pdG9yaW5nLgorCSAqLworCWlmICghdGVzdF9iaXQoREVWSUNFX1NUQVRFX0VOQUJMRURfUkFESU8sICZydDJ4MDBkZXYtPmZsYWdzKSkKKwkJcmV0dXJuOworCisJcnQyeDAwZGV2LT5vcHMtPmxpYi0+Z2Fpbl9jYWxpYnJhdGlvbihydDJ4MDBkZXYpOworCisJaWYgKHRlc3RfYml0KERFVklDRV9TVEFURV9QUkVTRU5ULCAmcnQyeDAwZGV2LT5mbGFncykpCisJCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsocnQyeDAwZGV2LT5odywKKwkJCQkJICAgICAmbGluay0+YWdjX3dvcmssCisJCQkJCSAgICAgQUdDX0lOVEVSVkFMKTsKK30KKwogdm9pZCBydDJ4MDBsaW5rX3JlZ2lzdGVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CisJSU5JVF9ERUxBWUVEX1dPUksoJnJ0MngwMGRldi0+bGluay5hZ2Nfd29yaywgcnQyeDAwbGlua19hZ2MpOwogCUlOSVRfREVMQVlFRF9XT1JLKCZydDJ4MDBkZXYtPmxpbmsud2F0Y2hkb2dfd29yaywgcnQyeDAwbGlua193YXRjaGRvZyk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnJ0MngwMGRldi0+bGluay53b3JrLCBydDJ4MDBsaW5rX3R1bmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBtYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBtYWMuYwppbmRleCA2NjFjNmJhLi45M2JlYzE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1hYy5jCkBAIC0xMTksNyArMTE5LDcgQEAKIAkgKiBVc2UgdGhlIEFUSU0gcXVldWUgaWYgYXBwcm9wcmlhdGUgYW5kIHByZXNlbnQuCiAJICovCiAJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9TRU5EX0FGVEVSX0RUSU0gJiYKLQkgICAgdGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfQVRJTV9RVUVVRSwgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCSAgICB0ZXN0X2JpdChSRVFVSVJFX0FUSU1fUVVFVUUsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpCiAJCXFpZCA9IFFJRF9BVElNOwogCiAJcXVldWUgPSBydDJ4MDBxdWV1ZV9nZXRfdHhfcXVldWUocnQyeDAwZGV2LCBxaWQpOwpAQCAtMTU4LDcgKzE1OCw3IEBACiAJcmV0dXJuOwogCiAgZXhpdF9mYWlsOgotCWllZWU4MDIxMV9zdG9wX3F1ZXVlKHJ0MngwMGRldi0+aHcsIHFpZCk7CisJcnQyeDAwcXVldWVfcGF1c2VfcXVldWUocXVldWUpOwogCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBtYWNfdHgpOwpAQCAtNDExLDExICs0MTEsMTEgQEAKIAkgKiBvZiBkaWZmZXJlbnQgdHlwZXMsIGJ1dCBoYXMgbm8gYSBzZXBhcmF0ZSBmaWx0ZXIgZm9yIFBTIFBvbGwgZnJhbWVzLAogCSAqIEZJRl9DT05UUk9MIGZsYWcgaW1wbGllcyBGSUZfUFNQT0xMLgogCSAqLwotCWlmICghdGVzdF9iaXQoRFJJVkVSX1NVUFBPUlRfQ09OVFJPTF9GSUxURVJTLCAmcnQyeDAwZGV2LT5mbGFncykpIHsKKwlpZiAoIXRlc3RfYml0KENBUEFCSUxJVFlfQ09OVFJPTF9GSUxURVJTLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKSB7CiAJCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQ09OVFJPTCB8fCAqdG90YWxfZmxhZ3MgJiBGSUZfUFNQT0xMKQogCQkJKnRvdGFsX2ZsYWdzIHw9IEZJRl9DT05UUk9MIHwgRklGX1BTUE9MTDsKIAl9Ci0JaWYgKCF0ZXN0X2JpdChEUklWRVJfU1VQUE9SVF9DT05UUk9MX0ZJTFRFUl9QU1BPTEwsICZydDJ4MDBkZXYtPmZsYWdzKSkgeworCWlmICghdGVzdF9iaXQoQ0FQQUJJTElUWV9DT05UUk9MX0ZJTFRFUl9QU1BPTEwsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpIHsKIAkJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9DT05UUk9MKQogCQkJKnRvdGFsX2ZsYWdzIHw9IEZJRl9QU1BPTEw7CiAJfQpAQCAtNDk2LDcgKzQ5Niw3IEBACiAKIAlpZiAoIXRlc3RfYml0KERFVklDRV9TVEFURV9QUkVTRU5ULCAmcnQyeDAwZGV2LT5mbGFncykpCiAJCXJldHVybiAwOwotCWVsc2UgaWYgKCF0ZXN0X2JpdChDT05GSUdfU1VQUE9SVF9IV19DUllQVE8sICZydDJ4MDBkZXYtPmZsYWdzKSkKKwllbHNlIGlmICghdGVzdF9iaXQoQ0FQQUJJTElUWV9IV19DUllQVE8sICZydDJ4MDBkZXYtPmNhcF9mbGFncykpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAllbHNlIGlmIChrZXktPmtleWxlbiA+IDMyKQogCQlyZXR1cm4gLUVOT1NQQzsKQEAgLTU2Miw3ICs1NjIsNyBAQAogdm9pZCBydDJ4MDBtYWNfc3dfc2Nhbl9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gaHctPnByaXY7Ci0JX19zZXRfYml0KERFVklDRV9TVEFURV9TQ0FOTklORywgJnJ0MngwMGRldi0+ZmxhZ3MpOworCXNldF9iaXQoREVWSUNFX1NUQVRFX1NDQU5OSU5HLCAmcnQyeDAwZGV2LT5mbGFncyk7CiAJcnQyeDAwbGlua19zdG9wX3R1bmVyKHJ0MngwMGRldik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBtYWNfc3dfc2Nhbl9zdGFydCk7CkBAIC01NzAsNyArNTcwLDcgQEAKIHZvaWQgcnQyeDAwbWFjX3N3X3NjYW5fY29tcGxldGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGh3LT5wcml2OwotCV9fY2xlYXJfYml0KERFVklDRV9TVEFURV9TQ0FOTklORywgJnJ0MngwMGRldi0+ZmxhZ3MpOworCWNsZWFyX2JpdChERVZJQ0VfU1RBVEVfU0NBTk5JTkcsICZydDJ4MDBkZXYtPmZsYWdzKTsKIAlydDJ4MDBsaW5rX3N0YXJ0X3R1bmVyKHJ0MngwMGRldik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBtYWNfc3dfc2Nhbl9jb21wbGV0ZSk7CkBAIC03MzcsMyArNzM3LDg0IEBACiAJCXJ0MngwMHF1ZXVlX2ZsdXNoX3F1ZXVlKHF1ZXVlLCBkcm9wKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMG1hY19mbHVzaCk7CisKK2ludCBydDJ4MDBtYWNfc2V0X2FudGVubmEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB0eF9hbnQsIHUzMiByeF9hbnQpCit7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGh3LT5wcml2OworCXN0cnVjdCBsaW5rX2FudCAqYW50ID0gJnJ0MngwMGRldi0+bGluay5hbnQ7CisJc3RydWN0IGFudGVubmFfc2V0dXAgKmRlZiA9ICZydDJ4MDBkZXYtPmRlZmF1bHRfYW50OworCXN0cnVjdCBhbnRlbm5hX3NldHVwIHNldHVwOworCisJLy8gVGhlIGFudGVubmEgdmFsdWUgaXMgbm90IHN1cHBvc2VkIHRvIGJlIDAsCisJLy8gb3IgZXhjZWVkIHRoZSBtYXhpbXVtIG51bWJlciBvZiBhbnRlbm5hJ3MuCisJaWYgKCF0eF9hbnQgfHwgKHR4X2FudCAmIH4zKSB8fCAhcnhfYW50IHx8IChyeF9hbnQgJiB+MykpCisJCXJldHVybiAtRUlOVkFMOworCisJLy8gV2hlbiB0aGUgY2xpZW50IHRyaWVkIHRvIGNvbmZpZ3VyZSB0aGUgYW50ZW5uYSB0byBvciBmcm9tCisJLy8gZGl2ZXJzaXR5IG1vZGUsIHdlIG11c3QgcmVzZXQgdGhlIGRlZmF1bHQgYW50ZW5uYSBhcyB3ZWxsCisJLy8gYXMgdGhhdCBjb250cm9scyB0aGUgZGl2ZXJzaXR5IHN3aXRjaC4KKwlpZiAoYW50LT5mbGFncyAmIEFOVEVOTkFfVFhfRElWRVJTSVRZICYmIHR4X2FudCAhPSAzKQorCQlhbnQtPmZsYWdzICY9IH5BTlRFTk5BX1RYX0RJVkVSU0lUWTsKKwlpZiAoYW50LT5mbGFncyAmIEFOVEVOTkFfUlhfRElWRVJTSVRZICYmIHJ4X2FudCAhPSAzKQorCQlhbnQtPmZsYWdzICY9IH5BTlRFTk5BX1JYX0RJVkVSU0lUWTsKKworCS8vIElmIGRpdmVyc2l0eSBpcyBiZWluZyBlbmFibGVkLCBjaGVjayBpZiB3ZSBuZWVkIGhhcmR3YXJlCisJLy8gb3Igc29mdHdhcmUgZGl2ZXJzaXR5LiBJbiB0aGUgbGF0dGVyIGNhc2UsIHJlc2V0IHRoZSB2YWx1ZSwKKwkvLyBhbmQgbWFrZSBzdXJlIHdlIHVwZGF0ZSB0aGUgYW50ZW5uYSBmbGFncyB0byBoYXZlIHRoZQorCS8vIGxpbmsgdHVuZXIgcGljayB1cCB0aGUgZGl2ZXJzaXR5IHR1bmluZy4KKwlpZiAodHhfYW50ID09IDMgJiYgZGVmLT50eCA9PSBBTlRFTk5BX1NXX0RJVkVSU0lUWSkgeworCQl0eF9hbnQgPSBBTlRFTk5BX1NXX0RJVkVSU0lUWTsKKwkJYW50LT5mbGFncyB8PSBBTlRFTk5BX1RYX0RJVkVSU0lUWTsKKwl9CisKKwlpZiAocnhfYW50ID09IDMgJiYgZGVmLT5yeCA9PSBBTlRFTk5BX1NXX0RJVkVSU0lUWSkgeworCQlyeF9hbnQgPSBBTlRFTk5BX1NXX0RJVkVSU0lUWTsKKwkJYW50LT5mbGFncyB8PSBBTlRFTk5BX1JYX0RJVkVSU0lUWTsKKwl9CisKKwlzZXR1cC50eCA9IHR4X2FudDsKKwlzZXR1cC5yeCA9IHJ4X2FudDsKKworCXJ0MngwMGxpYl9jb25maWdfYW50ZW5uYShydDJ4MDBkZXYsIHNldHVwKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbWFjX3NldF9hbnRlbm5hKTsKKworaW50IHJ0MngwMG1hY19nZXRfYW50ZW5uYShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyICp0eF9hbnQsIHUzMiAqcnhfYW50KQoreworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbGlua19hbnQgKmFudCA9ICZydDJ4MDBkZXYtPmxpbmsuYW50OworCXN0cnVjdCBhbnRlbm5hX3NldHVwICphY3RpdmUgPSAmcnQyeDAwZGV2LT5saW5rLmFudC5hY3RpdmU7CisKKwkvLyBXaGVuIHNvZnR3YXJlIGRpdmVyc2l0eSBpcyBhY3RpdmUsIHdlIG11c3QgcmVwb3J0IHRoaXMgdG8gdGhlCisJLy8gY2xpZW50IGFuZCBub3QgdGhlIGN1cnJlbnQgYWN0aXZlIGFudGVubmEgc3RhdGUuCisJaWYgKGFudC0+ZmxhZ3MgJiBBTlRFTk5BX1RYX0RJVkVSU0lUWSkKKwkJKnR4X2FudCA9IEFOVEVOTkFfSFdfRElWRVJTSVRZOworCWVsc2UKKwkJKnR4X2FudCA9IGFjdGl2ZS0+dHg7CisKKwlpZiAoYW50LT5mbGFncyAmIEFOVEVOTkFfUlhfRElWRVJTSVRZKQorCQkqcnhfYW50ID0gQU5URU5OQV9IV19ESVZFUlNJVFk7CisJZWxzZQorCQkqcnhfYW50ID0gYWN0aXZlLT5yeDsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbWFjX2dldF9hbnRlbm5hKTsKKwordm9pZCBydDJ4MDBtYWNfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgdTMyICp0eCwgdTMyICp0eF9tYXgsIHUzMiAqcngsIHUzMiAqcnhfbWF4KQoreworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWU7CisKKwl0eF9xdWV1ZV9mb3JfZWFjaChydDJ4MDBkZXYsIHF1ZXVlKSB7CisJCSp0eCArPSBxdWV1ZS0+bGVuZ3RoOworCQkqdHhfbWF4ICs9IHF1ZXVlLT5saW1pdDsKKwl9CisKKwkqcnggPSBydDJ4MDBkZXYtPnJ4LT5sZW5ndGg7CisJKnJ4X21heCA9IHJ0MngwMGRldi0+cngtPmxpbWl0OworfQorRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbWFjX2dldF9yaW5ncGFyYW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5jCmluZGV4IDRkZDgyYjAuLjE3MTQ4YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmMKQEAgLTYwLDE0ICs2MCwxNSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwcGNpX3JlZ2J1c3lfcmVhZCk7CiAKLXZvaWQgcnQyeDAwcGNpX3J4ZG9uZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQorYm9vbCBydDJ4MDBwY2lfcnhkb25lKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CiAJc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlID0gcnQyeDAwZGV2LT5yeDsKIAlzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5OwogCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3BjaSAqZW50cnlfcHJpdjsKIAlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2M7CisJaW50IG1heF9yeCA9IDE2OwogCi0Jd2hpbGUgKDEpIHsKKwl3aGlsZSAoLS1tYXhfcngpIHsKIAkJZW50cnkgPSBydDJ4MDBxdWV1ZV9nZXRfZW50cnkocXVldWUsIFFfSU5ERVgpOwogCQllbnRyeV9wcml2ID0gZW50cnktPnByaXZfZGF0YTsKIApAQCAtOTMsOSArOTQsMjAgQEAKIAkJICovCiAJCXJ0MngwMGxpYl9yeGRvbmUoZW50cnkpOwogCX0KKworCXJldHVybiAhbWF4X3J4OwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwcGNpX3J4ZG9uZSk7CiAKK3ZvaWQgcnQyeDAwcGNpX2ZsdXNoX3F1ZXVlKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSwgYm9vbCBkcm9wKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgIXJ0MngwMHF1ZXVlX2VtcHR5KHF1ZXVlKSAmJiBpIDwgMTA7IGkrKykKKwkJbXNsZWVwKDEwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMHBjaV9mbHVzaF9xdWV1ZSk7CisKIC8qCiAgKiBEZXZpY2UgaW5pdGlhbGl6YXRpb24gaGFuZGxlcnMuCiAgKi8KQEAgLTIzOSw5ICsyNTEsOCBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCi1pbnQgcnQyeDAwcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCitpbnQgcnQyeDAwcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LCBjb25zdCBzdHJ1Y3QgcnQyeDAwX29wcyAqb3BzKQogewotCXN0cnVjdCBydDJ4MDBfb3BzICpvcHMgPSAoc3RydWN0IHJ0MngwMF9vcHMgKilpZC0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldjsKIAlpbnQgcmV0dmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5oCmluZGV4IDc0NmNlOGYuLmUyYzk5ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmgKQEAgLTEwMSw4ICsxMDEsMjEgQEAKIC8qKgogICogcnQyeDAwcGNpX3J4ZG9uZSAtIEhhbmRsZSBSWCBkb25lIGV2ZW50cwogICogQHJ0MngwMGRldjogRGV2aWNlIHBvaW50ZXIsIHNlZSAmc3RydWN0IHJ0MngwMF9kZXYuCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGFyZSBzdGlsbCByeCBmcmFtZXMgcGVuZGluZyBhbmQgZmFsc2UgaWYgYWxsCisgKiBwZW5kaW5nIHJ4IGZyYW1lcyB3ZXJlIHByb2Nlc3NlZC4KICAqLwotdm9pZCBydDJ4MDBwY2lfcnhkb25lKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOworYm9vbCBydDJ4MDBwY2lfcnhkb25lKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOworCisvKioKKyAqIHJ0MngwMHBjaV9mbHVzaF9xdWV1ZSAtIEZsdXNoIGRhdGEgcXVldWUKKyAqIEBxdWV1ZTogRGF0YSBxdWV1ZSB0byBzdG9wCisgKiBAZHJvcDogVHJ1ZSB0byBkcm9wIGFsbCBwZW5kaW5nIGZyYW1lcy4KKyAqCisgKiBUaGlzIHdpbGwgd2FpdCBmb3IgYSBtYXhpbXVtIG9mIDEwMG1zLCB3YWl0aW5nIGZvciB0aGUgcXVldWVzCisgKiB0byBiZWNvbWUgZW1wdHkuCisgKi8KK3ZvaWQgcnQyeDAwcGNpX2ZsdXNoX3F1ZXVlKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSwgYm9vbCBkcm9wKTsKIAogLyoKICAqIERldmljZSBpbml0aWFsaXphdGlvbiBoYW5kbGVycy4KQEAgLTExMyw3ICsxMjYsNyBAQAogLyoKICAqIFBDSSBkcml2ZXIgaGFuZGxlcnMuCiAgKi8KLWludCBydDJ4MDBwY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCk7CitpbnQgcnQyeDAwcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LCBjb25zdCBzdHJ1Y3QgcnQyeDAwX29wcyAqb3BzKTsKIHZvaWQgcnQyeDAwcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2Rldik7CiAjaWZkZWYgQ09ORklHX1BNCiBpbnQgcnQyeDAwcGNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jCmluZGV4IDQzNTgwNTEuLmFiOGMxNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jCkBAIC02MCw3ICs2MCw3IEBACiAJICogYXQgbGVhc3QgOCBieXRlcyBieXRlcyBhdmFpbGFibGUgaW4gaGVhZHJvb20gZm9yIElWL0VJVgogCSAqIGFuZCA4IGJ5dGVzIGZvciBJQ1YgZGF0YSBhcyB0YWlscm9vbi4KIAkgKi8KLQlpZiAodGVzdF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5mbGFncykpIHsKKwlpZiAodGVzdF9iaXQoQ0FQQUJJTElUWV9IV19DUllQVE8sICZydDJ4MDBkZXYtPmNhcF9mbGFncykpIHsKIAkJaGVhZF9zaXplICs9IDg7CiAJCXRhaWxfc2l6ZSArPSA4OwogCX0KQEAgLTg2LDcgKzg2LDcgQEAKIAltZW1zZXQoc2tiZGVzYywgMCwgc2l6ZW9mKCpza2JkZXNjKSk7CiAJc2tiZGVzYy0+ZW50cnkgPSBlbnRyeTsKIAotCWlmICh0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9ETUEsICZydDJ4MDBkZXYtPmZsYWdzKSkgeworCWlmICh0ZXN0X2JpdChSRVFVSVJFX0RNQSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkgewogCQlza2JkZXNjLT5za2JfZG1hID0gZG1hX21hcF9zaW5nbGUocnQyeDAwZGV2LT5kZXYsCiAJCQkJCQkgIHNrYi0+ZGF0YSwKIAkJCQkJCSAgc2tiLT5sZW4sCkBAIC0xNDgsMTkgKzE0OCw2IEBACiAJc2tiX3RyaW0oc2tiLCBmcmFtZV9sZW5ndGgpOwogfQogCi12b2lkIHJ0MngwMHF1ZXVlX2FsaWduX3BheWxvYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRlcl9sZW5ndGgpCi17Ci0JdW5zaWduZWQgaW50IGZyYW1lX2xlbmd0aCA9IHNrYi0+bGVuOwotCXVuc2lnbmVkIGludCBhbGlnbiA9IEFMSUdOX1NJWkUoc2tiLCBoZWFkZXJfbGVuZ3RoKTsKLQotCWlmICghYWxpZ24pCi0JCXJldHVybjsKLQotCXNrYl9wdXNoKHNrYiwgYWxpZ24pOwotCW1lbW1vdmUoc2tiLT5kYXRhLCBza2ItPmRhdGEgKyBhbGlnbiwgZnJhbWVfbGVuZ3RoKTsKLQlza2JfdHJpbShza2IsIGZyYW1lX2xlbmd0aCk7Ci19Ci0KIHZvaWQgcnQyeDAwcXVldWVfaW5zZXJ0X2wycGFkKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZWFkZXJfbGVuZ3RoKQogewogCXVuc2lnbmVkIGludCBwYXlsb2FkX2xlbmd0aCA9IHNrYi0+bGVuIC0gaGVhZGVyX2xlbmd0aDsKQEAgLTIyNiw3ICsyMTMsNyBAQAogCiAJX19zZXRfYml0KEVOVFJZX1RYRF9HRU5FUkFURV9TRVEsICZ0eGRlc2MtPmZsYWdzKTsKIAotCWlmICghdGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfU1dfU0VRTk8sICZlbnRyeS0+cXVldWUtPnJ0MngwMGRldi0+ZmxhZ3MpKQorCWlmICghdGVzdF9iaXQoUkVRVUlSRV9TV19TRVFOTywgJmVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2LT5jYXBfZmxhZ3MpKQogCQlyZXR1cm47CiAKIAkvKgpAQCAtMzE1LDYgKzMwMiw4NSBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgcnQyeDAwcXVldWVfY3JlYXRlX3R4X2Rlc2NyaXB0b3JfaHQoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwKKwkJCQkJCXN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYywKKwkJCQkJCWNvbnN0IHN0cnVjdCBydDJ4MDBfcmF0ZSAqaHdyYXRlKQoreworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IoZW50cnktPnNrYik7CisJc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICp0eHJhdGUgPSAmdHhfaW5mby0+Y29udHJvbC5yYXRlc1swXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopZW50cnktPnNrYi0+ZGF0YTsKKworCWlmICh0eF9pbmZvLT5jb250cm9sLnN0YSkKKwkJdHhkZXNjLT51Lmh0Lm1wZHVfZGVuc2l0eSA9CisJCSAgICB0eF9pbmZvLT5jb250cm9sLnN0YS0+aHRfY2FwLmFtcGR1X2RlbnNpdHk7CisKKwl0eGRlc2MtPnUuaHQuYmFfc2l6ZSA9IDc7CS8qIEZJWE1FOiBXaGF0IHZhbHVlIGlzIG5lZWRlZD8gKi8KKworCS8qCisJICogT25seSBvbmUgU1RCQyBzdHJlYW0gaXMgc3VwcG9ydGVkIGZvciBub3cuCisJICovCisJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9TVEJDKQorCQl0eGRlc2MtPnUuaHQuc3RiYyA9IDE7CisKKwkvKgorCSAqIElmIElFRUU4MDIxMV9UWF9SQ19NQ1MgaXMgc2V0IHR4cmF0ZS0+aWR4IGp1c3QgY29udGFpbnMgdGhlCisJICogbWNzIHJhdGUgdG8gYmUgdXNlZAorCSAqLworCWlmICh0eHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX01DUykgeworCQl0eGRlc2MtPnUuaHQubWNzID0gdHhyYXRlLT5pZHg7CisKKwkJLyoKKwkJICogTUlNTyBQUyBzaG91bGQgYmUgc2V0IHRvIDEgZm9yIFNUQSdzIHVzaW5nIGR5bmFtaWMgU00gUFMKKwkJICogd2hlbiB1c2luZyBtb3JlIHRoZW4gb25lIHR4IHN0cmVhbSAoPk1DUzcpLgorCQkgKi8KKwkJaWYgKHR4X2luZm8tPmNvbnRyb2wuc3RhICYmIHR4ZGVzYy0+dS5odC5tY3MgPiA3ICYmCisJCSAgICAoKHR4X2luZm8tPmNvbnRyb2wuc3RhLT5odF9jYXAuY2FwICYKKwkJICAgICAgSUVFRTgwMjExX0hUX0NBUF9TTV9QUykgPj4KKwkJICAgICBJRUVFODAyMTFfSFRfQ0FQX1NNX1BTX1NISUZUKSA9PQorCQkgICAgV0xBTl9IVF9DQVBfU01fUFNfRFlOQU1JQykKKwkJCV9fc2V0X2JpdChFTlRSWV9UWERfSFRfTUlNT19QUywgJnR4ZGVzYy0+ZmxhZ3MpOworCX0gZWxzZSB7CisJCXR4ZGVzYy0+dS5odC5tY3MgPSBydDJ4MDBfZ2V0X3JhdGVfbWNzKGh3cmF0ZS0+bWNzKTsKKwkJaWYgKHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFKQorCQkJdHhkZXNjLT51Lmh0Lm1jcyB8PSAweDA4OworCX0KKworCS8qCisJICogVGhpcyBmcmFtZSBpcyBlbGlnaWJsZSBmb3IgYW4gQU1QRFUsIGhvd2V2ZXIsIGRvbid0IGFnZ3JlZ2F0ZQorCSAqIGZyYW1lcyB0aGF0IGFyZSBpbnRlbmRlZCB0byBwcm9iZSBhIHNwZWNpZmljIHR4IHJhdGUuCisJICovCisJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSAmJgorCSAgICAhKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9SQVRFX0NUUkxfUFJPQkUpKQorCQlfX3NldF9iaXQoRU5UUllfVFhEX0hUX0FNUERVLCAmdHhkZXNjLT5mbGFncyk7CisKKwkvKgorCSAqIFNldCA0ME1oeiBtb2RlIGlmIG5lY2Vzc2FyeSAoZm9yIGxlZ2FjeSByYXRlcyB0aGlzIHdpbGwKKwkgKiBkdXBsaWNhdGUgdGhlIGZyYW1lIHRvIGJvdGggY2hhbm5lbHMpLgorCSAqLworCWlmICh0eHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSCB8fAorCSAgICB0eHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX0RVUF9EQVRBKQorCQlfX3NldF9iaXQoRU5UUllfVFhEX0hUX0JXXzQwLCAmdHhkZXNjLT5mbGFncyk7CisJaWYgKHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0kpCisJCV9fc2V0X2JpdChFTlRSWV9UWERfSFRfU0hPUlRfR0ksICZ0eGRlc2MtPmZsYWdzKTsKKworCS8qCisJICogRGV0ZXJtaW5lIElGUyB2YWx1ZXMKKwkgKiAtIFVzZSBUWE9QX0JBQ0tPRkYgZm9yIG1hbmFnZW1lbnQgZnJhbWVzIGV4Y2VwdCBiZWFjb25zCisJICogLSBVc2UgVFhPUF9TSUZTIGZvciBmcmFnbWVudCBidXJzdHMKKwkgKiAtIFVzZSBUWE9QX0hUVFhPUCBmb3IgZXZlcnl0aGluZyBlbHNlCisJICoKKwkgKiBOb3RlOiBydDI4MDAgZGV2aWNlcyB3b24ndCB1c2UgQ1RTIHByb3RlY3Rpb24gKGlmIHVzZWQpCisJICogZm9yIGZyYW1lcyBub3QgdHJhbnNtaXR0ZWQgd2l0aCBUWE9QX0hUVFhPUAorCSAqLworCWlmIChpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpICYmCisJICAgICFpZWVlODAyMTFfaXNfYmVhY29uKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCXR4ZGVzYy0+dS5odC50eG9wID0gVFhPUF9CQUNLT0ZGOworCWVsc2UgaWYgKCEodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0ZJUlNUX0ZSQUdNRU5UKSkKKwkJdHhkZXNjLT51Lmh0LnR4b3AgPSBUWE9QX1NJRlM7CisJZWxzZQorCQl0eGRlc2MtPnUuaHQudHhvcCA9IFRYT1BfSFRUWE9QOworfQorCiBzdGF0aWMgdm9pZCBydDJ4MDBxdWV1ZV9jcmVhdGVfdHhfZGVzY3JpcHRvcihzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAogCQkJCQkgICAgIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYykKIHsKQEAgLTQwOSw4ICs0NzUsOCBAQAogCXJ0MngwMGNyeXB0b19jcmVhdGVfdHhfZGVzY3JpcHRvcihlbnRyeSwgdHhkZXNjKTsKIAlydDJ4MDBxdWV1ZV9jcmVhdGVfdHhfZGVzY3JpcHRvcl9zZXEoZW50cnksIHR4ZGVzYyk7CiAKLQlpZiAodGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfSFRfVFhfREVTQywgJnJ0MngwMGRldi0+ZmxhZ3MpKQotCQlydDJ4MDBodF9jcmVhdGVfdHhfZGVzY3JpcHRvcihlbnRyeSwgdHhkZXNjLCBod3JhdGUpOworCWlmICh0ZXN0X2JpdChSRVFVSVJFX0hUX1RYX0RFU0MsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpCisJCXJ0MngwMHF1ZXVlX2NyZWF0ZV90eF9kZXNjcmlwdG9yX2h0KGVudHJ5LCB0eGRlc2MsIGh3cmF0ZSk7CiAJZWxzZQogCQlydDJ4MDBxdWV1ZV9jcmVhdGVfdHhfZGVzY3JpcHRvcl9wbGNwKGVudHJ5LCB0eGRlc2MsIGh3cmF0ZSk7CiB9CkBAIC00NDksNyArNTE1LDcgQEAKIAkvKgogCSAqIE1hcCB0aGUgc2tiIHRvIERNQS4KIAkgKi8KLQlpZiAodGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfRE1BLCAmcnQyeDAwZGV2LT5mbGFncykpCisJaWYgKHRlc3RfYml0KFJFUVVJUkVfRE1BLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKQogCQlydDJ4MDBxdWV1ZV9tYXBfdHhza2IoZW50cnkpOwogCiAJcmV0dXJuIDA7CkBAIC00OTUsOCArNTYxLDExIEBACiAJc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjOwogCXU4IHJhdGVfaWR4LCByYXRlX2ZsYWdzOwogCi0JaWYgKHVubGlrZWx5KHJ0MngwMHF1ZXVlX2Z1bGwocXVldWUpKSkKKwlpZiAodW5saWtlbHkocnQyeDAwcXVldWVfZnVsbChxdWV1ZSkpKSB7CisJCUVSUk9SKHF1ZXVlLT5ydDJ4MDBkZXYsCisJCSAgICAgICJEcm9wcGluZyBmcmFtZSBkdWUgdG8gZnVsbCB0eCBxdWV1ZSAlZC5cbiIsIHF1ZXVlLT5xaWQpOwogCQlyZXR1cm4gLUVOT0JVRlM7CisJfQogCiAJaWYgKHVubGlrZWx5KHRlc3RfYW5kX3NldF9iaXQoRU5UUllfT1dORVJfREVWSUNFX0RBVEEsCiAJCQkJICAgICAgJmVudHJ5LT5mbGFncykpKSB7CkBAIC01MzksNyArNjA4LDcgQEAKIAkgKi8KIAlpZiAodGVzdF9iaXQoRU5UUllfVFhEX0VOQ1JZUFQsICZ0eGRlc2MuZmxhZ3MpICYmCiAJICAgICF0ZXN0X2JpdChFTlRSWV9UWERfRU5DUllQVF9JViwgJnR4ZGVzYy5mbGFncykpIHsKLQkJaWYgKHRlc3RfYml0KERSSVZFUl9SRVFVSVJFX0NPUFlfSVYsICZxdWV1ZS0+cnQyeDAwZGV2LT5mbGFncykpCisJCWlmICh0ZXN0X2JpdChSRVFVSVJFX0NPUFlfSVYsICZxdWV1ZS0+cnQyeDAwZGV2LT5jYXBfZmxhZ3MpKQogCQkJcnQyeDAwY3J5cHRvX3R4X2NvcHlfaXYoc2tiLCAmdHhkZXNjKTsKIAkJZWxzZQogCQkJcnQyeDAwY3J5cHRvX3R4X3JlbW92ZV9pdihza2IsICZ0eGRlc2MpOwpAQCAtNTUzLDkgKzYyMiw5IEBACiAJICogUENJIGFuZCBVU0IgZGV2aWNlcywgd2hpbGUgaGVhZGVyIGFsaWdubWVudCBvbmx5IGlzIHZhbGlkCiAJICogZm9yIFBDSSBkZXZpY2VzLgogCSAqLwotCWlmICh0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9MMlBBRCwgJnF1ZXVlLT5ydDJ4MDBkZXYtPmZsYWdzKSkKKwlpZiAodGVzdF9iaXQoUkVRVUlSRV9MMlBBRCwgJnF1ZXVlLT5ydDJ4MDBkZXYtPmNhcF9mbGFncykpCiAJCXJ0MngwMHF1ZXVlX2luc2VydF9sMnBhZChlbnRyeS0+c2tiLCB0eGRlc2MuaGVhZGVyX2xlbmd0aCk7Ci0JZWxzZSBpZiAodGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfRE1BLCAmcXVldWUtPnJ0MngwMGRldi0+ZmxhZ3MpKQorCWVsc2UgaWYgKHRlc3RfYml0KFJFUVVJUkVfRE1BLCAmcXVldWUtPnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkKIAkJcnQyeDAwcXVldWVfYWxpZ25fZnJhbWUoZW50cnktPnNrYik7CiAKIAkvKgpAQCAtNTcxLDcgKzY0MCw3IEBACiAKIAlzZXRfYml0KEVOVFJZX0RBVEFfUEVORElORywgJmVudHJ5LT5mbGFncyk7CiAKLQlydDJ4MDBxdWV1ZV9pbmRleF9pbmMocXVldWUsIFFfSU5ERVgpOworCXJ0MngwMHF1ZXVlX2luZGV4X2luYyhlbnRyeSwgUV9JTkRFWCk7CiAJcnQyeDAwcXVldWVfd3JpdGVfdHhfZGVzY3JpcHRvcihlbnRyeSwgJnR4ZGVzYyk7CiAJcnQyeDAwcXVldWVfa2lja190eF9xdWV1ZShxdWV1ZSwgJnR4ZGVzYyk7CiAKQEAgLTY2MCwxMCArNzI5LDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotdm9pZCBydDJ4MDBxdWV1ZV9mb3JfZWFjaF9lbnRyeShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUsCitib29sIHJ0MngwMHF1ZXVlX2Zvcl9lYWNoX2VudHJ5KHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSwKIAkJCQllbnVtIHF1ZXVlX2luZGV4IHN0YXJ0LAogCQkJCWVudW0gcXVldWVfaW5kZXggZW5kLAotCQkJCXZvaWQgKCpmbikoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSkpCisJCQkJdm9pZCAqZGF0YSwKKwkJCQlib29sICgqZm4pKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCisJCQkJCSAgIHZvaWQgKmRhdGEpKQogewogCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CiAJdW5zaWduZWQgaW50IGluZGV4X3N0YXJ0OwpAQCAtNjc0LDcgKzc0NSw3IEBACiAJCUVSUk9SKHF1ZXVlLT5ydDJ4MDBkZXYsCiAJCSAgICAgICJFbnRyeSByZXF1ZXN0ZWQgZnJvbSBpbnZhbGlkIGluZGV4IHJhbmdlICglZCAtICVkKVxuIiwKIAkJICAgICAgc3RhcnQsIGVuZCk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIHRydWU7CiAJfQogCiAJLyoKQEAgLTY5MywxNSArNzY0LDIzIEBACiAJICogc2VuZCBvdXQgYWxsIGZyYW1lcyBpbiB0aGUgY29ycmVjdCBvcmRlci4KIAkgKi8KIAlpZiAoaW5kZXhfc3RhcnQgPCBpbmRleF9lbmQpIHsKLQkJZm9yIChpID0gaW5kZXhfc3RhcnQ7IGkgPCBpbmRleF9lbmQ7IGkrKykKLQkJCWZuKCZxdWV1ZS0+ZW50cmllc1tpXSk7CisJCWZvciAoaSA9IGluZGV4X3N0YXJ0OyBpIDwgaW5kZXhfZW5kOyBpKyspIHsKKwkJCWlmIChmbigmcXVldWUtPmVudHJpZXNbaV0sIGRhdGEpKQorCQkJCXJldHVybiB0cnVlOworCQl9CiAJfSBlbHNlIHsKLQkJZm9yIChpID0gaW5kZXhfc3RhcnQ7IGkgPCBxdWV1ZS0+bGltaXQ7IGkrKykKLQkJCWZuKCZxdWV1ZS0+ZW50cmllc1tpXSk7CisJCWZvciAoaSA9IGluZGV4X3N0YXJ0OyBpIDwgcXVldWUtPmxpbWl0OyBpKyspIHsKKwkJCWlmIChmbigmcXVldWUtPmVudHJpZXNbaV0sIGRhdGEpKQorCQkJCXJldHVybiB0cnVlOworCQl9CiAKLQkJZm9yIChpID0gMDsgaSA8IGluZGV4X2VuZDsgaSsrKQotCQkJZm4oJnF1ZXVlLT5lbnRyaWVzW2ldKTsKKwkJZm9yIChpID0gMDsgaSA8IGluZGV4X2VuZDsgaSsrKSB7CisJCQlpZiAoZm4oJnF1ZXVlLT5lbnRyaWVzW2ldLCBkYXRhKSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJfQogCX0KKworCXJldHVybiBmYWxzZTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMHF1ZXVlX2Zvcl9lYWNoX2VudHJ5KTsKIApAQCAtNzI3LDggKzgwNiw5IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBxdWV1ZV9nZXRfZW50cnkpOwogCi12b2lkIHJ0MngwMHF1ZXVlX2luZGV4X2luYyhzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUsIGVudW0gcXVldWVfaW5kZXggaW5kZXgpCit2b2lkIHJ0MngwMHF1ZXVlX2luZGV4X2luYyhzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LCBlbnVtIHF1ZXVlX2luZGV4IGluZGV4KQogeworCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSA9IGVudHJ5LT5xdWV1ZTsKIAl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCiAJaWYgKHVubGlrZWx5KGluZGV4ID49IFFfSU5ERVhfTUFYKSkgewpAQCAtNzQzLDcgKzgyMyw3IEBACiAJaWYgKHF1ZXVlLT5pbmRleFtpbmRleF0gPj0gcXVldWUtPmxpbWl0KQogCQlxdWV1ZS0+aW5kZXhbaW5kZXhdID0gMDsKIAotCXF1ZXVlLT5sYXN0X2FjdGlvbltpbmRleF0gPSBqaWZmaWVzOworCWVudHJ5LT5sYXN0X2FjdGlvbiA9IGppZmZpZXM7CiAKIAlpZiAoaW5kZXggPT0gUV9JTkRFWCkgewogCQlxdWV1ZS0+bGVuZ3RoKys7CkBAIC04NDgsNyArOTI4LDYgQEAKIAogdm9pZCBydDJ4MDBxdWV1ZV9mbHVzaF9xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUsIGJvb2wgZHJvcCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKIAlib29sIHN0YXJ0ZWQ7CiAJYm9vbCB0eF9xdWV1ZSA9CiAJCShxdWV1ZS0+cWlkID09IFFJRF9BQ19WTykgfHwKQEAgLTg4MywyMCArOTYyLDEyIEBACiAJfQogCiAJLyoKLQkgKiBDaGVjayBpZiBkcml2ZXIgc3VwcG9ydHMgZmx1c2hpbmcsIHdlIGNhbiBvbmx5IGd1YXJhbnRlZQotCSAqIGZ1bGwgc3VwcG9ydCBmb3IgZmx1c2hpbmcgaWYgdGhlIGRyaXZlciBpcyBhYmxlCi0JICogdG8gY2FuY2VsIGFsbCBwZW5kaW5nIGZyYW1lcyAoZHJvcCA9IHRydWUpLgorCSAqIENoZWNrIGlmIGRyaXZlciBzdXBwb3J0cyBmbHVzaGluZywgaWYgdGhhdCBpcyB0aGUgY2FzZSB3ZSBjYW4KKwkgKiBkZWZlciB0aGUgZmx1c2hpbmcgdG8gdGhlIGRyaXZlci4gT3RoZXJ3aXNlIHdlIG11c3QgdXNlIHRoZQorCSAqIGFsdGVybmF0aXZlIHdoaWNoIGp1c3Qgd2FpdHMgZm9yIHRoZSBxdWV1ZSB0byBiZWNvbWUgZW1wdHkuCiAJICovCi0JaWYgKGRyb3AgJiYgcXVldWUtPnJ0MngwMGRldi0+b3BzLT5saWItPmZsdXNoX3F1ZXVlKQotCQlxdWV1ZS0+cnQyeDAwZGV2LT5vcHMtPmxpYi0+Zmx1c2hfcXVldWUocXVldWUpOwotCi0JLyoKLQkgKiBXaGVuIHdlIGRvbid0IHdhbnQgdG8gZHJvcCBhbnkgZnJhbWVzLCBvciB3aGVuCi0JICogdGhlIGRyaXZlciBkb2Vzbid0IGZ1bGx5IGZsdXNoIHRoZSBxdWV1ZSBjb3JyZWNseSwKLQkgKiB3ZSBtdXN0IHdhaXQgZm9yIHRoZSBxdWV1ZSB0byBiZWNvbWUgZW1wdHkuCi0JICovCi0JZm9yIChpID0gMDsgIXJ0MngwMHF1ZXVlX2VtcHR5KHF1ZXVlKSAmJiBpIDwgMTAwOyBpKyspCi0JCW1zbGVlcCgxMCk7CisJaWYgKGxpa2VseShxdWV1ZS0+cnQyeDAwZGV2LT5vcHMtPmxpYi0+Zmx1c2hfcXVldWUpKQorCQlxdWV1ZS0+cnQyeDAwZGV2LT5vcHMtPmxpYi0+Zmx1c2hfcXVldWUocXVldWUsIGRyb3ApOwogCiAJLyoKIAkgKiBUaGUgcXVldWUgZmx1c2ggaGFzIGZhaWxlZC4uLgpAQCAtOTY5LDEwICsxMDQwLDggQEAKIAlxdWV1ZS0+Y291bnQgPSAwOwogCXF1ZXVlLT5sZW5ndGggPSAwOwogCi0JZm9yIChpID0gMDsgaSA8IFFfSU5ERVhfTUFYOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgUV9JTkRFWF9NQVg7IGkrKykKIAkJcXVldWUtPmluZGV4W2ldID0gMDsKLQkJcXVldWUtPmxhc3RfYWN0aW9uW2ldID0gamlmZmllczsKLQl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxdWV1ZS0+aW5kZXhfbG9jaywgaXJxZmxhZ3MpOwogfQpAQCAtMTA3OSw3ICsxMTQ4LDcgQEAKIAlpZiAoc3RhdHVzKQogCQlnb3RvIGV4aXQ7CiAKLQlpZiAodGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfQVRJTV9RVUVVRSwgJnJ0MngwMGRldi0+ZmxhZ3MpKSB7CisJaWYgKHRlc3RfYml0KFJFUVVJUkVfQVRJTV9RVUVVRSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkgewogCQlzdGF0dXMgPSBydDJ4MDBxdWV1ZV9hbGxvY19lbnRyaWVzKHJ0MngwMGRldi0+YXRpbSwKIAkJCQkJCSAgIHJ0MngwMGRldi0+b3BzLT5hdGltKTsKIAkJaWYgKHN0YXR1cykKQEAgLTExMzEsNyArMTIwMCw3IEBACiAJc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlOwogCWVudW0gZGF0YV9xdWV1ZV9xaWQgcWlkOwogCXVuc2lnbmVkIGludCByZXFfYXRpbSA9Ci0JICAgICEhdGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfQVRJTV9RVUVVRSwgJnJ0MngwMGRldi0+ZmxhZ3MpOworCSAgICAhIXRlc3RfYml0KFJFUVVJUkVfQVRJTV9RVUVVRSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKIAogCS8qCiAJICogV2UgbmVlZCB0aGUgZm9sbG93aW5nIHF1ZXVlczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmgKaW5kZXggMjE3ODYxZi4uMTY3ZDQ1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmgKQEAgLTIxNyw2ICsyMTcsNyBAQAogCVRYRE9ORV9GQUxMQkFDSywKIAlUWERPTkVfRkFJTFVSRSwKIAlUWERPTkVfRVhDRVNTSVZFX1JFVFJZLAorCVRYRE9ORV9BTVBEVSwKIH07CiAKIC8qKgpAQCAtMzYzLDYgKzM2NCw3IEBACiAgKiBzdHJ1Y3QgcXVldWVfZW50cnk6IEVudHJ5IGluc2lkZSB0aGUgJnN0cnVjdCBkYXRhX3F1ZXVlCiAgKgogICogQGZsYWdzOiBFbnRyeSBmbGFncywgc2VlICZlbnVtIHF1ZXVlX2VudHJ5X2ZsYWdzLgorICogQGxhc3RfYWN0aW9uOiBUaW1lc3RhbXAgb2YgbGFzdCBjaGFuZ2UuCiAgKiBAcXVldWU6IFRoZSBkYXRhIHF1ZXVlICgmc3RydWN0IGRhdGFfcXVldWUpIHRvIHdoaWNoIHRoaXMgZW50cnkgYmVsb25ncy4KICAqIEBza2I6IFRoZSBidWZmZXIgd2hpY2ggaXMgY3VycmVudGx5IGJlaW5nIHRyYW5zbWl0dGVkIChmb3IgVFggcXVldWUpLAogICoJb3IgdXNlZCB0byBkaXJlY3RseSByZWNlaXZlIGRhdGEgaW4gKGZvciBSWCBxdWV1ZSkuCkBAIC0zNzIsNiArMzc0LDcgQEAKICAqLwogc3RydWN0IHF1ZXVlX2VudHJ5IHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgbGFzdF9hY3Rpb247CiAKIAlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWU7CiAKQEAgLTQ2Miw3ICs0NjUsNiBAQAogCXVuc2lnbmVkIHNob3J0IHRocmVzaG9sZDsKIAl1bnNpZ25lZCBzaG9ydCBsZW5ndGg7CiAJdW5zaWduZWQgc2hvcnQgaW5kZXhbUV9JTkRFWF9NQVhdOwotCXVuc2lnbmVkIGxvbmcgbGFzdF9hY3Rpb25bUV9JTkRFWF9NQVhdOwogCiAJdW5zaWduZWQgc2hvcnQgdHhvcDsKIAl1bnNpZ25lZCBzaG9ydCBhaWZzOwpAQCAtNTc5LDE2ICs1ODEsMjIgQEAKICAqIEBxdWV1ZTogUG9pbnRlciB0byBAZGF0YV9xdWV1ZQogICogQHN0YXJ0OiAmZW51bSBxdWV1ZV9pbmRleCBQb2ludGVyIHRvIHN0YXJ0IGluZGV4CiAgKiBAZW5kOiAmZW51bSBxdWV1ZV9pbmRleCBQb2ludGVyIHRvIGVuZCBpbmRleAorICogQGRhdGE6IERhdGEgdG8gcGFzcyB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24KICAqIEBmbjogVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggJnN0cnVjdCBxdWV1ZV9lbnRyeQogICoKICAqIFRoaXMgd2lsbCB3YWxrIHRocm91Z2ggYWxsIGVudHJpZXMgaW4gdGhlIHF1ZXVlLCBpbiBjaHJvbm9sb2dpY2FsCiAgKiBvcmRlci4gVGhpcyBtZWFucyBpdCB3aWxsIHN0YXJ0IGF0IHRoZSBjdXJyZW50IEBzdGFydCBwb2ludGVyCiAgKiBhbmQgd2lsbCB3YWxrIHRocm91Z2ggdGhlIHF1ZXVlIHVudGlsIGl0IHJlYWNoZXMgdGhlIEBlbmQgcG9pbnRlci4KKyAqCisgKiBJZiBmbiByZXR1cm5zIHRydWUgZm9yIGFuIGVudHJ5IHJ0MngwMHF1ZXVlX2Zvcl9lYWNoX2VudHJ5IHdpbGwgc3RvcAorICogcHJvY2Vzc2luZyBhbmQgcmV0dXJuIHRydWUgYXMgd2VsbC4KICAqLwotdm9pZCBydDJ4MDBxdWV1ZV9mb3JfZWFjaF9lbnRyeShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUsCitib29sIHJ0MngwMHF1ZXVlX2Zvcl9lYWNoX2VudHJ5KHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSwKIAkJCQllbnVtIHF1ZXVlX2luZGV4IHN0YXJ0LAogCQkJCWVudW0gcXVldWVfaW5kZXggZW5kLAotCQkJCXZvaWQgKCpmbikoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSkpOworCQkJCXZvaWQgKmRhdGEsCisJCQkJYm9vbCAoKmZuKShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAorCQkJCQkgICB2b2lkICpkYXRhKSk7CiAKIC8qKgogICogcnQyeDAwcXVldWVfZW1wdHkgLSBDaGVjayBpZiB0aGUgcXVldWUgaXMgZW1wdHkuCkBAIC02MjgsMjIgKzYzNiwyNCBAQAogCiAvKioKICAqIHJ0MngwMHF1ZXVlX3N0YXR1c190aW1lb3V0IC0gQ2hlY2sgaWYgYSB0aW1lb3V0IG9jY3VycmVkIGZvciBTVEFUVVMgcmVwb3J0cwotICogQHF1ZXVlOiBRdWV1ZSB0byBjaGVjay4KKyAqIEBlbnRyeTogUXVldWUgZW50cnkgdG8gY2hlY2suCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHJ0MngwMHF1ZXVlX3N0YXR1c190aW1lb3V0KHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IHJ0MngwMHF1ZXVlX3N0YXR1c190aW1lb3V0KHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnkpCiB7Ci0JcmV0dXJuIHRpbWVfYWZ0ZXIocXVldWUtPmxhc3RfYWN0aW9uW1FfSU5ERVhfRE1BX0RPTkVdLAotCQkJICBxdWV1ZS0+bGFzdF9hY3Rpb25bUV9JTkRFWF9ET05FXSArIChIWiAvIDEwKSk7CisJaWYgKCF0ZXN0X2JpdChFTlRSWV9EQVRBX1NUQVRVU19QRU5ESU5HLCAmZW50cnktPmZsYWdzKSkKKwkJcmV0dXJuIGZhbHNlOworCXJldHVybiB0aW1lX2FmdGVyKGppZmZpZXMsIGVudHJ5LT5sYXN0X2FjdGlvbiArIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CiB9CiAKIC8qKgotICogcnQyeDAwcXVldWVfdGltZW91dCAtIENoZWNrIGlmIGEgdGltZW91dCBvY2N1cnJlZCBmb3IgRE1BIHRyYW5zZmVycwotICogQHF1ZXVlOiBRdWV1ZSB0byBjaGVjay4KKyAqIHJ0MngwMHF1ZXVlX2RtYV90aW1lb3V0IC0gQ2hlY2sgaWYgYSB0aW1lb3V0IG9jY3VycmVkIGZvciBETUEgdHJhbnNmZXJzCisgKiBAZW50cnk6IFF1ZXVlIGVudHJ5IHRvIGNoZWNrLgogICovCi1zdGF0aWMgaW5saW5lIGludCBydDJ4MDBxdWV1ZV9kbWFfdGltZW91dChzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCitzdGF0aWMgaW5saW5lIGludCBydDJ4MDBxdWV1ZV9kbWFfdGltZW91dChzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KQogewotCXJldHVybiB0aW1lX2FmdGVyKHF1ZXVlLT5sYXN0X2FjdGlvbltRX0lOREVYXSwKLQkJCSAgcXVldWUtPmxhc3RfYWN0aW9uW1FfSU5ERVhfRE1BX0RPTkVdICsgKEhaIC8gMTApKTsKKwlpZiAoIXRlc3RfYml0KEVOVFJZX09XTkVSX0RFVklDRV9EQVRBLCAmZW50cnktPmZsYWdzKSkKKwkJcmV0dXJuIGZhbHNlOworCXJldHVybiB0aW1lX2FmdGVyKGppZmZpZXMsIGVudHJ5LT5sYXN0X2FjdGlvbiArIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5jCmluZGV4IDM2ZjM4OGYuLjhmOTBmNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmMKQEAgLTE2NSw2ICsxNjUsNTkgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMHVzYl9yZWdidXN5X3JlYWQpOwogCisKK3N0cnVjdCBydDJ4MDBfYXN5bmNfcmVhZF9kYXRhIHsKKwlfX2xlMzIgcmVnOworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgY3I7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldjsKKwlib29sICgqY2FsbGJhY2spKHN0cnVjdCBydDJ4MDBfZGV2ICosIGludCwgdTMyKTsKK307CisKK3N0YXRpYyB2b2lkIHJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkX2FzeW5jX2NiKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgcnQyeDAwX2FzeW5jX3JlYWRfZGF0YSAqcmQgPSB1cmItPmNvbnRleHQ7CisJaWYgKHJkLT5jYWxsYmFjayhyZC0+cnQyeDAwZGV2LCB1cmItPnN0YXR1cywgbGUzMl90b19jcHUocmQtPnJlZykpKSB7CisJCWlmICh1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpIDwgMCkKKwkJCWtmcmVlKHJkKTsKKwl9IGVsc2UKKwkJa2ZyZWUocmQpOworfQorCit2b2lkIHJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkX2FzeW5jKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICAgY29uc3QgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCQkgICBib29sICgqY2FsbGJhY2spKHN0cnVjdCBydDJ4MDBfZGV2KiwgaW50LCB1MzIpKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gdG9fdXNiX2RldmljZV9pbnRmKHJ0MngwMGRldi0+ZGV2KTsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJc3RydWN0IHJ0MngwMF9hc3luY19yZWFkX2RhdGEgKnJkOworCisJcmQgPSBrbWFsbG9jKHNpemVvZigqcmQpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXJkKQorCQlyZXR1cm47CisKKwl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOworCWlmICghdXJiKSB7CisJCWtmcmVlKHJkKTsKKwkJcmV0dXJuOworCX0KKworCXJkLT5ydDJ4MDBkZXYgPSBydDJ4MDBkZXY7CisJcmQtPmNhbGxiYWNrID0gY2FsbGJhY2s7CisJcmQtPmNyLmJSZXF1ZXN0VHlwZSA9IFVTQl9WRU5ET1JfUkVRVUVTVF9JTjsKKwlyZC0+Y3IuYlJlcXVlc3QgPSBVU0JfTVVMVElfUkVBRDsKKwlyZC0+Y3Iud1ZhbHVlID0gMDsKKwlyZC0+Y3Iud0luZGV4ID0gY3B1X3RvX2xlMTYob2Zmc2V0KTsKKwlyZC0+Y3Iud0xlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZih1MzIpKTsKKworCXVzYl9maWxsX2NvbnRyb2xfdXJiKHVyYiwgdXNiX2RldiwgdXNiX3JjdmN0cmxwaXBlKHVzYl9kZXYsIDApLAorCQkJICAgICAodW5zaWduZWQgY2hhciAqKSgmcmQtPmNyKSwgJnJkLT5yZWcsIHNpemVvZihyZC0+cmVnKSwKKwkJCSAgICAgcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWRfYXN5bmNfY2IsIHJkKTsKKwlpZiAodXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSA8IDApCisJCWtmcmVlKHJkKTsKKwl1c2JfZnJlZV91cmIodXJiKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkX2FzeW5jKTsKKwogLyoKICAqIFRYIGRhdGEgaGFuZGxlcnMuCiAgKi8KQEAgLTIxMiw2ICsyNjUsOSBAQAogCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KEVOVFJZX09XTkVSX0RFVklDRV9EQVRBLCAmZW50cnktPmZsYWdzKSkKIAkJcmV0dXJuOwogCisJaWYgKHJ0MngwMGRldi0+b3BzLT5saWItPnR4X2RtYV9kb25lKQorCQlydDJ4MDBkZXYtPm9wcy0+bGliLT50eF9kbWFfZG9uZShlbnRyeSk7CisKIAkvKgogCSAqIFJlcG9ydCB0aGUgZnJhbWUgYXMgRE1BIGRvbmUKIAkgKi8KQEAgLTIyNywxMCArMjgzLDEyIEBACiAJICogU2NoZWR1bGUgdGhlIGRlbGF5ZWQgd29yayBmb3IgcmVhZGluZyB0aGUgVFggc3RhdHVzCiAJICogZnJvbSB0aGUgZGV2aWNlLgogCSAqLwotCXF1ZXVlX3dvcmsocnQyeDAwZGV2LT53b3JrcXVldWUsICZydDJ4MDBkZXYtPnR4ZG9uZV93b3JrKTsKKwlpZiAoIXRlc3RfYml0KFJFUVVJUkVfVFhTVEFUVVNfRklGTywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSB8fAorCSAgICAha2ZpZm9faXNfZW1wdHkoJnJ0MngwMGRldi0+dHhzdGF0dXNfZmlmbykpCisJCXF1ZXVlX3dvcmsocnQyeDAwZGV2LT53b3JrcXVldWUsICZydDJ4MDBkZXYtPnR4ZG9uZV93b3JrKTsKIH0KIAotc3RhdGljIHZvaWQgcnQyeDAwdXNiX2tpY2tfdHhfZW50cnkoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSkKK3N0YXRpYyBib29sIHJ0MngwMHVzYl9raWNrX3R4X2VudHJ5KHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksIHZvaWQqIGRhdGEpCiB7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2OwogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gdG9fdXNiX2RldmljZV9pbnRmKHJ0MngwMGRldi0+ZGV2KTsKQEAgLTI0MCw3ICsyOTgsNyBAQAogCiAJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoRU5UUllfREFUQV9QRU5ESU5HLCAmZW50cnktPmZsYWdzKSB8fAogCSAgICB0ZXN0X2JpdChFTlRSWV9EQVRBX1NUQVRVU19QRU5ESU5HLCAmZW50cnktPmZsYWdzKSkKLQkJcmV0dXJuOworCQlyZXR1cm4gZmFsc2U7CiAKIAkvKgogCSAqIFVTQiBkZXZpY2VzIGNhbm5vdCBibGluZGx5IHBhc3MgdGhlIHNrYi0+bGVuIGFzIHRoZQpAQCAtMjYxLDYgKzMxOSw4IEBACiAJCXNldF9iaXQoRU5UUllfREFUQV9JT19GQUlMRUQsICZlbnRyeS0+ZmxhZ3MpOwogCQlydDJ4MDBsaWJfZG1hZG9uZShlbnRyeSk7CiAJfQorCisJcmV0dXJuIGZhbHNlOwogfQogCiAvKgpAQCAtMzIzLDcgKzM4Myw3IEBACiAJcXVldWVfd29yayhydDJ4MDBkZXYtPndvcmtxdWV1ZSwgJnJ0MngwMGRldi0+cnhkb25lX3dvcmspOwogfQogCi1zdGF0aWMgdm9pZCBydDJ4MDB1c2Jfa2lja19yeF9lbnRyeShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KQorc3RhdGljIGJvb2wgcnQyeDAwdXNiX2tpY2tfcnhfZW50cnkoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwgdm9pZCogZGF0YSkKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZW50cnktPnF1ZXVlLT5ydDJ4MDBkZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSB0b191c2JfZGV2aWNlX2ludGYocnQyeDAwZGV2LT5kZXYpOwpAQCAtMzMyLDcgKzM5Miw3IEBACiAKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChFTlRSWV9PV05FUl9ERVZJQ0VfREFUQSwgJmVudHJ5LT5mbGFncykgfHwKIAkgICAgdGVzdF9iaXQoRU5UUllfREFUQV9TVEFUVVNfUEVORElORywgJmVudHJ5LT5mbGFncykpCi0JCXJldHVybjsKKwkJcmV0dXJuIGZhbHNlOwogCiAJcnQyeDAwbGliX2RtYXN0YXJ0KGVudHJ5KTsKIApAQCAtMzQ4LDYgKzQwOCw4IEBACiAJCXNldF9iaXQoRU5UUllfREFUQV9JT19GQUlMRUQsICZlbnRyeS0+ZmxhZ3MpOwogCQlydDJ4MDBsaWJfZG1hZG9uZShlbnRyeSk7CiAJfQorCisJcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIHJ0MngwMHVzYl9raWNrX3F1ZXVlKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSkKQEAgLTM1OCwxMiArNDIwLDE4IEBACiAJY2FzZSBRSURfQUNfQkU6CiAJY2FzZSBRSURfQUNfQks6CiAJCWlmICghcnQyeDAwcXVldWVfZW1wdHkocXVldWUpKQotCQkJcnQyeDAwcXVldWVfZm9yX2VhY2hfZW50cnkocXVldWUsIFFfSU5ERVhfRE9ORSwgUV9JTkRFWCwKKwkJCXJ0MngwMHF1ZXVlX2Zvcl9lYWNoX2VudHJ5KHF1ZXVlLAorCQkJCQkJICAgUV9JTkRFWF9ET05FLAorCQkJCQkJICAgUV9JTkRFWCwKKwkJCQkJCSAgIE5VTEwsCiAJCQkJCQkgICBydDJ4MDB1c2Jfa2lja190eF9lbnRyeSk7CiAJCWJyZWFrOwogCWNhc2UgUUlEX1JYOgogCQlpZiAoIXJ0MngwMHF1ZXVlX2Z1bGwocXVldWUpKQotCQkJcnQyeDAwcXVldWVfZm9yX2VhY2hfZW50cnkocXVldWUsIFFfSU5ERVhfRE9ORSwgUV9JTkRFWCwKKwkJCXJ0MngwMHF1ZXVlX2Zvcl9lYWNoX2VudHJ5KHF1ZXVlLAorCQkJCQkJICAgUV9JTkRFWF9ET05FLAorCQkJCQkJICAgUV9JTkRFWCwKKwkJCQkJCSAgIE5VTEwsCiAJCQkJCQkgICBydDJ4MDB1c2Jfa2lja19yeF9lbnRyeSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0zNzIsMTQgKzQ0MCwxNCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwdXNiX2tpY2tfcXVldWUpOwogCi1zdGF0aWMgdm9pZCBydDJ4MDB1c2JfZmx1c2hfZW50cnkoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSkKK3N0YXRpYyBib29sIHJ0MngwMHVzYl9mbHVzaF9lbnRyeShzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LCB2b2lkKiBkYXRhKQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBlbnRyeS0+cXVldWUtPnJ0MngwMGRldjsKIAlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2IgKmVudHJ5X3ByaXYgPSBlbnRyeS0+cHJpdl9kYXRhOwogCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYl9iY24gKmJjbl9wcml2ID0gZW50cnktPnByaXZfZGF0YTsKIAogCWlmICghdGVzdF9iaXQoRU5UUllfT1dORVJfREVWSUNFX0RBVEEsICZlbnRyeS0+ZmxhZ3MpKQotCQlyZXR1cm47CisJCXJldHVybiBmYWxzZTsKIAogCXVzYl9raWxsX3VyYihlbnRyeV9wcml2LT51cmIpOwogCkBAIC0zODcsMTcgKzQ1NSwyMCBAQAogCSAqIEtpbGwgZ3VhcmRpYW4gdXJiIChpZiByZXF1aXJlZCBieSBkcml2ZXIpLgogCSAqLwogCWlmICgoZW50cnktPnF1ZXVlLT5xaWQgPT0gUUlEX0JFQUNPTikgJiYKLQkgICAgKHRlc3RfYml0KERSSVZFUl9SRVFVSVJFX0JFQUNPTl9HVUFSRCwgJnJ0MngwMGRldi0+ZmxhZ3MpKSkKKwkgICAgKHRlc3RfYml0KFJFUVVJUkVfQkVBQ09OX0dVQVJELCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKSkKIAkJdXNiX2tpbGxfdXJiKGJjbl9wcml2LT5ndWFyZGlhbl91cmIpOworCisJcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIHJ0MngwMHVzYl9mbHVzaF9xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCit2b2lkIHJ0MngwMHVzYl9mbHVzaF9xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUsIGJvb2wgZHJvcCkKIHsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmNvbXBsZXRpb247CiAJdW5zaWduZWQgaW50IGk7CiAKLQlydDJ4MDBxdWV1ZV9mb3JfZWFjaF9lbnRyeShxdWV1ZSwgUV9JTkRFWF9ET05FLCBRX0lOREVYLAotCQkJCSAgIHJ0MngwMHVzYl9mbHVzaF9lbnRyeSk7CisJaWYgKGRyb3ApCisJCXJ0MngwMHF1ZXVlX2Zvcl9lYWNoX2VudHJ5KHF1ZXVlLCBRX0lOREVYX0RPTkUsIFFfSU5ERVgsIE5VTEwsCisJCQkJCSAgIHJ0MngwMHVzYl9mbHVzaF9lbnRyeSk7CiAKIAkvKgogCSAqIE9idGFpbiB0aGUgcXVldWUgY29tcGxldGlvbiBoYW5kbGVyCkBAIC00MTYsNyArNDg3LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCAyMDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKIAkJLyoKIAkJICogQ2hlY2sgaWYgdGhlIGRyaXZlciBpcyBhbHJlYWR5IGRvbmUsIG90aGVyd2lzZSB3ZQogCQkgKiBoYXZlIHRvIHNsZWVwIGEgbGl0dGxlIHdoaWxlIHRvIGdpdmUgdGhlIGRyaXZlci9odwpAQCAtNDU2LDE1ICs1MjcsMzEgQEAKIAlxdWV1ZV93b3JrKHF1ZXVlLT5ydDJ4MDBkZXYtPndvcmtxdWV1ZSwgJnF1ZXVlLT5ydDJ4MDBkZXYtPnR4ZG9uZV93b3JrKTsKIH0KIAorc3RhdGljIGludCBydDJ4MDB1c2Jfc3RhdHVzX3RpbWVvdXQoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlKQoreworCXN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnk7CisKKwllbnRyeSA9IHJ0MngwMHF1ZXVlX2dldF9lbnRyeShxdWV1ZSwgUV9JTkRFWF9ET05FKTsKKwlyZXR1cm4gcnQyeDAwcXVldWVfc3RhdHVzX3RpbWVvdXQoZW50cnkpOworfQorCitzdGF0aWMgaW50IHJ0MngwMHVzYl9kbWFfdGltZW91dChzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpCit7CisJc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeTsKKworCWVudHJ5ID0gcnQyeDAwcXVldWVfZ2V0X2VudHJ5KHF1ZXVlLCBRX0lOREVYX0RNQV9ET05FKTsKKwlyZXR1cm4gcnQyeDAwcXVldWVfZG1hX3RpbWVvdXQoZW50cnkpOworfQorCiB2b2lkIHJ0MngwMHVzYl93YXRjaGRvZyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewogCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZTsKIAogCXR4X3F1ZXVlX2Zvcl9lYWNoKHJ0MngwMGRldiwgcXVldWUpIHsKIAkJaWYgKCFydDJ4MDBxdWV1ZV9lbXB0eShxdWV1ZSkpIHsKLQkJCWlmIChydDJ4MDBxdWV1ZV9kbWFfdGltZW91dChxdWV1ZSkpCisJCQlpZiAocnQyeDAwdXNiX2RtYV90aW1lb3V0KHF1ZXVlKSkKIAkJCQlydDJ4MDB1c2Jfd2F0Y2hkb2dfdHhfZG1hKHF1ZXVlKTsKLQkJCWlmIChydDJ4MDBxdWV1ZV9zdGF0dXNfdGltZW91dChxdWV1ZSkpCisJCQlpZiAocnQyeDAwdXNiX3N0YXR1c190aW1lb3V0KHF1ZXVlKSkKIAkJCQlydDJ4MDB1c2Jfd2F0Y2hkb2dfdHhfc3RhdHVzKHF1ZXVlKTsKIAkJfQogCX0KQEAgLTQ4OSw3ICs1NzYsNyBAQAogCWVudHJ5LT5mbGFncyA9IDA7CiAKIAlpZiAoZW50cnktPnF1ZXVlLT5xaWQgPT0gUUlEX1JYKQotCQlydDJ4MDB1c2Jfa2lja19yeF9lbnRyeShlbnRyeSk7CisJCXJ0MngwMHVzYl9raWNrX3J4X2VudHJ5KGVudHJ5LCBOVUxMKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMHVzYl9jbGVhcl9lbnRyeSk7CiAKQEAgLTU4Myw3ICs2NzAsNyBAQAogCSAqIHRoZW4gd2UgYXJlIGRvbmUuCiAJICovCiAJaWYgKHF1ZXVlLT5xaWQgIT0gUUlEX0JFQUNPTiB8fAotCSAgICAhdGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfQkVBQ09OX0dVQVJELCAmcnQyeDAwZGV2LT5mbGFncykpCisJICAgICF0ZXN0X2JpdChSRVFVSVJFX0JFQUNPTl9HVUFSRCwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkKIAkJcmV0dXJuIDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcXVldWUtPmxpbWl0OyBpKyspIHsKQEAgLTYxOCw3ICs3MDUsNyBAQAogCSAqIHRoZW4gd2UgYXJlIGRvbmUuCiAJICovCiAJaWYgKHF1ZXVlLT5xaWQgIT0gUUlEX0JFQUNPTiB8fAotCSAgICAhdGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfQkVBQ09OX0dVQVJELCAmcnQyeDAwZGV2LT5mbGFncykpCisJICAgICF0ZXN0X2JpdChSRVFVSVJFX0JFQUNPTl9HVUFSRCwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkKIAkJcmV0dXJuOwogCiAJZm9yIChpID0gMDsgaSA8IHF1ZXVlLT5saW1pdDsgaSsrKSB7CkBAIC03MDcsMTAgKzc5NCw5IEBACiB9CiAKIGludCBydDJ4MDB1c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVzYl9pbnRmLAotCQkgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQorCQkgICAgY29uc3Qgc3RydWN0IHJ0MngwMF9vcHMgKm9wcykKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYodXNiX2ludGYpOwotCXN0cnVjdCBydDJ4MDBfb3BzICpvcHMgPSAoc3RydWN0IHJ0MngwMF9vcHMgKilpZC0+ZHJpdmVyX2luZm87CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldjsKIAlpbnQgcmV0dmFsOwpAQCAtNzM1LDYgKzgyMSw3IEBACiAKIAlJTklUX1dPUksoJnJ0MngwMGRldi0+cnhkb25lX3dvcmssIHJ0MngwMHVzYl93b3JrX3J4ZG9uZSk7CiAJSU5JVF9XT1JLKCZydDJ4MDBkZXYtPnR4ZG9uZV93b3JrLCBydDJ4MDB1c2Jfd29ya190eGRvbmUpOworCWluaXRfdGltZXIoJnJ0MngwMGRldi0+dHhzdGF0dXNfdGltZXIpOwogCiAJcmV0dmFsID0gcnQyeDAwdXNiX2FsbG9jX3JlZyhydDJ4MDBkZXYpOwogCWlmIChyZXR2YWwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmgKaW5kZXggZTExYzc1OS4uMzIzY2E3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuaApAQCAtMzUsMTIgKzM1LDYgQEAKIH0pCiAKIC8qCi0gKiBUaGlzIHZhcmlhYmxlIHNob3VsZCBiZSB1c2VkIHdpdGggdGhlCi0gKiB1c2JfZHJpdmVyIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbi4KLSAqLwotI2RlZmluZSBVU0JfREVWSUNFX0RBVEEoX19vcHMpCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkoX19vcHMpCi0KLS8qCiAgKiBGb3IgVVNCIHZlbmRvciByZXF1ZXN0cyB3ZSBuZWVkIHRvIHBhc3MgYSB0aW1lb3V0CiAgKiB0aW1lIGluIG1zLCBmb3IgdGhpcyB3ZSB1c2UgdGhlIFJFR0lTVEVSX1RJTUVPVVQsCiAgKiBob3dldmVyIHdoZW4gbG9hZGluZyBmaXJtd2FyZSBhIGhpZ2hlciB2YWx1ZSBpcwpAQCAtMzQ1LDYgKzMzOSwyMyBAQAogCQkJICAgY29uc3Qgc3RydWN0IHJ0MngwMF9maWVsZDMyIGZpZWxkLAogCQkJICAgdTMyICpyZWcpOwogCisvKioKKyAqIHJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkX2FzeW5jIC0gQXN5bmNocm9ub3VzbHkgcmVhZCAzMmJpdCByZWdpc3RlciB3b3JkCisgKiBAcnQyeDAwZGV2OiBEZXZpY2UgcG9pbnRlciwgc2VlICZzdHJ1Y3QgcnQyeDAwX2Rldi4KKyAqIEBvZmZzZXQ6IFJlZ2lzdGVyIG9mZnNldAorICogQGNhbGxiYWNrOiBGdW5jdG9uIHRvIGNhbGwgd2hlbiByZWFkIGNvbXBsZXRlcy4KKyAqCisgKiBTdWJtaXQgYSBjb250cm9sIFVSQiB0byByZWFkIGEgMzJiaXQgcmVnaXN0ZXIuIFRoaXMgc2FmZSB0bworICogYmUgY2FsbGVkIGZyb20gYXRvbWljIGNvbnRleHQuICBUaGUgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQKKyAqIHdoZW4gdGhlIFVSQiBjb21wbGV0ZXMuIE90aGVyd2lzZSB0aGUgZnVuY3Rpb24gaXMgc2ltaWxhcgorICogdG8gcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWQoKS4KKyAqIFdoZW4gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UsIHRoZSBtZW1vcnkgd2lsbCBiZSBjbGVhbmVkIHVwLAorICogd2hlbiBpdCByZXR1cm5zIHRydWUsIHRoZSB1cmIgd2lsbCBiZSBmaXJlZCBhZ2Fpbi4KKyAqLwordm9pZCBydDJ4MDB1c2JfcmVnaXN0ZXJfcmVhZF9hc3luYyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgIGNvbnN0IHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkJICAgYm9vbCAoKmNhbGxiYWNrKShzdHJ1Y3QgcnQyeDAwX2RldiosIGludCwgdTMyKSk7CisKIC8qCiAgKiBSYWRpbyBoYW5kbGVycwogICovCkBAIC0zODksMTEgKzQwMCwxMyBAQAogLyoqCiAgKiBydDJ4MDB1c2JfZmx1c2hfcXVldWUgLSBGbHVzaCBkYXRhIHF1ZXVlCiAgKiBAcXVldWU6IERhdGEgcXVldWUgdG8gc3RvcAorICogQGRyb3A6IFRydWUgdG8gZHJvcCBhbGwgcGVuZGluZyBmcmFtZXMuCiAgKgotICogVGhpcyB3aWxsIHdhbGsgdGhyb3VnaCBhbGwgZW50cmllcyBvZiB0aGUgcXVldWUgYW5kIGtpbGwgYWxsCi0gKiBVUkIncyB3aGljaCB3ZXJlIHNlbmQgdG8gdGhlIGRldmljZS4KKyAqIFRoaXMgd2lsbCB3YWxrIHRocm91Z2ggYWxsIGVudHJpZXMgb2YgdGhlIHF1ZXVlIGFuZCB3aWxsIG9wdGlvbmFsbHkKKyAqIGtpbGwgYWxsIFVSQidzIHdoaWNoIHdlcmUgc2VuZCB0byB0aGUgZGV2aWNlLCBvciBhdCBsZWFzdCB3YWl0IHVudGlsCisgKiB0aGV5IGhhdmUgYmVlbiByZXR1cm5lZCBmcm9tIHRoZSBkZXZpY2UuLgogICovCi12b2lkIHJ0MngwMHVzYl9mbHVzaF9xdWV1ZShzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUpOwordm9pZCBydDJ4MDB1c2JfZmx1c2hfcXVldWUoc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlLCBib29sIGRyb3ApOwogCiAvKioKICAqIHJ0MngwMHVzYl93YXRjaGRvZyAtIFdhdGNoZG9nIGZvciBVU0IgY29tbXVuaWNhdGlvbgpAQCAtNDE2LDcgKzQyOSw3IEBACiAgKiBVU0IgZHJpdmVyIGhhbmRsZXJzLgogICovCiBpbnQgcnQyeDAwdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICp1c2JfaW50ZiwKLQkJICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CisJCSAgICBjb25zdCBzdHJ1Y3QgcnQyeDAwX29wcyAqb3BzKTsKIHZvaWQgcnQyeDAwdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVzYl9pbnRmKTsKICNpZmRlZiBDT05GSUdfUE0KIGludCBydDJ4MDB1c2Jfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdXNiX2ludGYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuYwppbmRleCA3N2U4MTEzLi45ZDM1ZWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmMKQEAgLTY4Myw3ICs2ODMsNyBAQAogCiAJcnQyeDAwX3NldF9maWVsZDgoJnIzLCBCQlBfUjNfU01BUlRfTU9ERSwgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI5KSk7CiAJcnQyeDAwX3NldF9maWVsZDgoJnI0LCBCQlBfUjRfUlhfRlJBTUVfRU5ELAotCQkJICAhdGVzdF9iaXQoQ09ORklHX0ZSQU1FX1RZUEUsICZydDJ4MDBkZXYtPmZsYWdzKSk7CisJCQkgICF0ZXN0X2JpdChDQVBBQklMSVRZX0ZSQU1FX1RZUEUsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpOwogCiAJLyoKIAkgKiBDb25maWd1cmUgdGhlIFJYIGFudGVubmEuCkBAIC04MTEsMTAgKzgxMSwxMCBAQAogCiAJaWYgKHJ0MngwMGRldi0+Y3Vycl9iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopIHsKIAkJc2VsID0gYW50ZW5uYV9zZWxfYTsKLQkJbG5hID0gdGVzdF9iaXQoQ09ORklHX0VYVEVSTkFMX0xOQV9BLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJCWxuYSA9IHRlc3RfYml0KENBUEFCSUxJVFlfRVhURVJOQUxfTE5BX0EsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CiAJfSBlbHNlIHsKIAkJc2VsID0gYW50ZW5uYV9zZWxfYmc7Ci0JCWxuYSA9IHRlc3RfYml0KENPTkZJR19FWFRFUk5BTF9MTkFfQkcsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwkJbG5hID0gdGVzdF9iaXQoQ0FQQUJJTElUWV9FWFRFUk5BTF9MTkFfQkcsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYW50ZW5uYV9zZWxfYSk7IGkrKykKQEAgLTgzNCw3ICs4MzQsNyBAQAogCWVsc2UgaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyNykpCiAJCXJ0NjFwY2lfY29uZmlnX2FudGVubmFfMngocnQyeDAwZGV2LCBhbnQpOwogCWVsc2UgaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyOSkpIHsKLQkJaWYgKHRlc3RfYml0KENPTkZJR19ET1VCTEVfQU5URU5OQSwgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlpZiAodGVzdF9iaXQoQ0FQQUJJTElUWV9ET1VCTEVfQU5URU5OQSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkKIAkJCXJ0NjFwY2lfY29uZmlnX2FudGVubmFfMngocnQyeDAwZGV2LCBhbnQpOwogCQllbHNlCiAJCQlydDYxcGNpX2NvbmZpZ19hbnRlbm5hXzI1MjkocnQyeDAwZGV2LCBhbnQpOwpAQCAtODQ4LDEzICs4NDgsMTMgQEAKIAlzaG9ydCBsbmFfZ2FpbiA9IDA7CiAKIAlpZiAobGliY29uZi0+Y29uZi0+Y2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7Ci0JCWlmICh0ZXN0X2JpdChDT05GSUdfRVhURVJOQUxfTE5BX0JHLCAmcnQyeDAwZGV2LT5mbGFncykpCisJCWlmICh0ZXN0X2JpdChDQVBBQklMSVRZX0VYVEVSTkFMX0xOQV9CRywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkKIAkJCWxuYV9nYWluICs9IDE0OwogCiAJCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9SU1NJX09GRlNFVF9CRywgJmVlcHJvbSk7CiAJCWxuYV9nYWluIC09IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9SU1NJX09GRlNFVF9CR18xKTsKIAl9IGVsc2UgewotCQlpZiAodGVzdF9iaXQoQ09ORklHX0VYVEVSTkFMX0xOQV9BLCAmcnQyeDAwZGV2LT5mbGFncykpCisJCWlmICh0ZXN0X2JpdChDQVBBQklMSVRZX0VYVEVSTkFMX0xOQV9BLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKQogCQkJbG5hX2dhaW4gKz0gMTQ7CiAKIAkJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX1JTU0lfT0ZGU0VUX0EsICZlZXByb20pOwpAQCAtMTA1MCwxNCArMTA1MCwxNCBAQAogCWlmIChydDJ4MDBkZXYtPmN1cnJfYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSB7CiAJCWxvd19ib3VuZCA9IDB4Mjg7CiAJCXVwX2JvdW5kID0gMHg0ODsKLQkJaWYgKHRlc3RfYml0KENPTkZJR19FWFRFUk5BTF9MTkFfQSwgJnJ0MngwMGRldi0+ZmxhZ3MpKSB7CisJCWlmICh0ZXN0X2JpdChDQVBBQklMSVRZX0VYVEVSTkFMX0xOQV9BLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKSB7CiAJCQlsb3dfYm91bmQgKz0gMHgxMDsKIAkJCXVwX2JvdW5kICs9IDB4MTA7CiAJCX0KIAl9IGVsc2UgewogCQlsb3dfYm91bmQgPSAweDIwOwogCQl1cF9ib3VuZCA9IDB4NDA7Ci0JCWlmICh0ZXN0X2JpdChDT05GSUdfRVhURVJOQUxfTE5BX0JHLCAmcnQyeDAwZGV2LT5mbGFncykpIHsKKwkJaWYgKHRlc3RfYml0KENBUEFCSUxJVFlfRVhURVJOQUxfTE5BX0JHLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKSB7CiAJCQlsb3dfYm91bmQgKz0gMHgxMDsKIAkJCXVwX2JvdW5kICs9IDB4MTA7CiAJCX0KQEAgLTIyNjAsOCArMjI2MCw4IEBACiAJcnQ2MXBjaV9jb25maWcocnQyeDAwZGV2LCAmbGliY29uZiwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKIH0KIAotc3RhdGljIHZvaWQgcnQ2MXBjaV9lbmFibGVfaW50ZXJydXB0KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkJICAgICBzdHJ1Y3QgcnQyeDAwX2ZpZWxkMzIgaXJxX2ZpZWxkKQorc3RhdGljIGlubGluZSB2b2lkIHJ0NjFwY2lfZW5hYmxlX2ludGVycnVwdChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCQkgICAgc3RydWN0IHJ0MngwMF9maWVsZDMyIGlycV9maWVsZCkKIHsKIAl1MzIgcmVnOwogCkBAIC0yMzEzLDggKzIzMTMsMTAgQEAKIHN0YXRpYyB2b2lkIHJ0NjFwY2lfcnhkb25lX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSAoc3RydWN0IHJ0MngwMF9kZXYgKilkYXRhOwotCXJ0MngwMHBjaV9yeGRvbmUocnQyeDAwZGV2KTsKLQlydDYxcGNpX2VuYWJsZV9pbnRlcnJ1cHQocnQyeDAwZGV2LCBJTlRfTUFTS19DU1JfUlhET05FKTsKKwlpZiAocnQyeDAwcGNpX3J4ZG9uZShydDJ4MDBkZXYpKQorCQlydDJ4MDBwY2lfcnhkb25lKHJ0MngwMGRldik7CisJZWxzZQorCQlydDYxcGNpX2VuYWJsZV9pbnRlcnJ1cHQocnQyeDAwZGV2LCBJTlRfTUFTS19DU1JfUlhET05FKTsKIH0KIAogc3RhdGljIHZvaWQgcnQ2MXBjaV9hdXRvd2FrZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKQEAgLTI1MzUsNyArMjUzNyw3IEBACiAJICogRGV0ZXJtaW5lIG51bWJlciBvZiBhbnRlbm5hcy4KIAkgKi8KIAlpZiAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfTlVNKSA9PSAyKQotCQlfX3NldF9iaXQoQ09ORklHX0RPVUJMRV9BTlRFTk5BLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJCV9fc2V0X2JpdChDQVBBQklMSVRZX0RPVUJMRV9BTlRFTk5BLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOwogCiAJLyoKIAkgKiBJZGVudGlmeSBkZWZhdWx0IGFudGVubmEgY29uZmlndXJhdGlvbi4KQEAgLTI1NDksMjAgKzI1NTEsMjAgQEAKIAkgKiBSZWFkIHRoZSBGcmFtZSB0eXBlLgogCSAqLwogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9GUkFNRV9UWVBFKSkKLQkJX19zZXRfYml0KENPTkZJR19GUkFNRV9UWVBFLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJCV9fc2V0X2JpdChDQVBBQklMSVRZX0ZSQU1FX1RZUEUsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CiAKIAkvKgogCSAqIERldGVjdCBpZiB0aGlzIGRldmljZSBoYXMgYSBoYXJkd2FyZSBjb250cm9sbGVkIHJhZGlvLgogCSAqLwogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9IQVJEV0FSRV9SQURJTykpCi0JCV9fc2V0X2JpdChDT05GSUdfU1VQUE9SVF9IV19CVVRUT04sICZydDJ4MDBkZXYtPmZsYWdzKTsKKwkJX19zZXRfYml0KENBUEFCSUxJVFlfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOwogCiAJLyoKIAkgKiBSZWFkIGZyZXF1ZW5jeSBvZmZzZXQgYW5kIFJGIHByb2dyYW1taW5nIHNlcXVlbmNlLgogCSAqLwogCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9GUkVRLCAmZWVwcm9tKTsKIAlpZiAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0ZSRVFfU0VRKSkKLQkJX19zZXRfYml0KENPTkZJR19SRl9TRVFVRU5DRSwgJnJ0MngwMGRldi0+ZmxhZ3MpOworCQlfX3NldF9iaXQoQ0FQQUJJTElUWV9SRl9TRVFVRU5DRSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKIAogCXJ0MngwMGRldi0+ZnJlcV9vZmZzZXQgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fRlJFUV9PRkZTRVQpOwogCkBAIC0yNTcyLDkgKzI1NzQsOSBAQAogCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9OSUMsICZlZXByb20pOwogCiAJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9OSUNfRVhURVJOQUxfTE5BX0EpKQotCQlfX3NldF9iaXQoQ09ORklHX0VYVEVSTkFMX0xOQV9BLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJCV9fc2V0X2JpdChDQVBBQklMSVRZX0VYVEVSTkFMX0xOQV9BLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOwogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTklDX0VYVEVSTkFMX0xOQV9CRykpCi0JCV9fc2V0X2JpdChDT05GSUdfRVhURVJOQUxfTE5BX0JHLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJCV9fc2V0X2JpdChDQVBBQklMSVRZX0VYVEVSTkFMX0xOQV9CRywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKIAogCS8qCiAJICogV2hlbiB3b3JraW5nIHdpdGggYSBSRjI1MjkgY2hpcCB3aXRob3V0IGRvdWJsZSBhbnRlbm5hLApAQCAtMjU4Miw3ICsyNTg0LDcgQEAKIAkgKiBlZXByb20gd29yZC4KIAkgKi8KIAlpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI5KSAmJgotCSAgICAhdGVzdF9iaXQoQ09ORklHX0RPVUJMRV9BTlRFTk5BLCAmcnQyeDAwZGV2LT5mbGFncykpIHsKKwkgICAgIXRlc3RfYml0KENBUEFCSUxJVFlfRE9VQkxFX0FOVEVOTkEsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpIHsKIAkJcnQyeDAwZGV2LT5kZWZhdWx0X2FudC5yeCA9CiAJCSAgICBBTlRFTk5BX0EgKyBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTklDX1JYX0ZJWEVEKTsKIAkJcnQyeDAwZGV2LT5kZWZhdWx0X2FudC50eCA9CkBAIC0yNzk3LDcgKzI3OTksNyBAQAogCXNwZWMtPnN1cHBvcnRlZF9iYW5kcyA9IFNVUFBPUlRfQkFORF8yR0haOwogCXNwZWMtPnN1cHBvcnRlZF9yYXRlcyA9IFNVUFBPUlRfUkFURV9DQ0sgfCBTVVBQT1JUX1JBVEVfT0ZETTsKIAotCWlmICghdGVzdF9iaXQoQ09ORklHX1JGX1NFUVVFTkNFLCAmcnQyeDAwZGV2LT5mbGFncykpIHsKKwlpZiAoIXRlc3RfYml0KENBUEFCSUxJVFlfUkZfU0VRVUVOQ0UsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpIHsKIAkJc3BlYy0+bnVtX2NoYW5uZWxzID0gMTQ7CiAJCXNwZWMtPmNoYW5uZWxzID0gcmZfdmFsc19ub3NlcTsKIAl9IGVsc2UgewpAQCAtMjg2NywxNiArMjg2OSwxNiBAQAogCSAqIFRoaXMgZGV2aWNlIGhhcyBtdWx0aXBsZSBmaWx0ZXJzIGZvciBjb250cm9sIGZyYW1lcywKIAkgKiBidXQgaGFzIG5vIGEgc2VwYXJhdGUgZmlsdGVyIGZvciBQUyBQb2xsIGZyYW1lcy4KIAkgKi8KLQlfX3NldF9iaXQoRFJJVkVSX1NVUFBPUlRfQ09OVFJPTF9GSUxURVJTLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJX19zZXRfYml0KENBUEFCSUxJVFlfQ09OVFJPTF9GSUxURVJTLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOwogCiAJLyoKIAkgKiBUaGlzIGRldmljZSByZXF1aXJlcyBmaXJtd2FyZSBhbmQgRE1BIG1hcHBlZCBza2JzLgogCSAqLwotCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9GSVJNV0FSRSwgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9ETUEsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwlfX3NldF9iaXQoUkVRVUlSRV9GSVJNV0FSRSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKKwlfX3NldF9iaXQoUkVRVUlSRV9ETUEsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CiAJaWYgKCFtb2RwYXJhbV9ub2h3Y3J5cHQpCi0JCV9fc2V0X2JpdChDT05GSUdfU1VQUE9SVF9IV19DUllQVE8sICZydDJ4MDBkZXYtPmZsYWdzKTsKLQlfX3NldF9iaXQoRFJJVkVSX1NVUFBPUlRfTElOS19UVU5JTkcsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwkJX19zZXRfYml0KENBUEFCSUxJVFlfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOworCV9fc2V0X2JpdChDQVBBQklMSVRZX0xJTktfVFVOSU5HLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOwogCiAJLyoKIAkgKiBTZXQgdGhlIHJzc2kgb2Zmc2V0LgpAQCAtMjk3Nyw2ICsyOTc5LDkgQEAKIAkuZ2V0X3RzZgkJPSBydDYxcGNpX2dldF90c2YsCiAJLnJma2lsbF9wb2xsCQk9IHJ0MngwMG1hY19yZmtpbGxfcG9sbCwKIAkuZmx1c2gJCQk9IHJ0MngwMG1hY19mbHVzaCwKKwkuc2V0X2FudGVubmEJCT0gcnQyeDAwbWFjX3NldF9hbnRlbm5hLAorCS5nZXRfYW50ZW5uYQkJPSBydDJ4MDBtYWNfZ2V0X2FudGVubmEsCisJLmdldF9yaW5ncGFyYW0JCT0gcnQyeDAwbWFjX2dldF9yaW5ncGFyYW0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0MngwMGxpYl9vcHMgcnQ2MXBjaV9ydDJ4MDBfb3BzID0gewpAQCAtMzAwMSw2ICszMDA2LDcgQEAKIAkuc3RhcnRfcXVldWUJCT0gcnQ2MXBjaV9zdGFydF9xdWV1ZSwKIAkua2lja19xdWV1ZQkJPSBydDYxcGNpX2tpY2tfcXVldWUsCiAJLnN0b3BfcXVldWUJCT0gcnQ2MXBjaV9zdG9wX3F1ZXVlLAorCS5mbHVzaF9xdWV1ZQkJPSBydDJ4MDBwY2lfZmx1c2hfcXVldWUsCiAJLndyaXRlX3R4X2Rlc2MJCT0gcnQ2MXBjaV93cml0ZV90eF9kZXNjLAogCS53cml0ZV9iZWFjb24JCT0gcnQ2MXBjaV93cml0ZV9iZWFjb24sCiAJLmNsZWFyX2JlYWNvbgkJPSBydDYxcGNpX2NsZWFyX2JlYWNvbiwKQEAgLTMwNTgsMTEgKzMwNjQsMTEgQEAKICAqLwogc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHJ0NjFwY2lfZGV2aWNlX3RhYmxlKSA9IHsKIAkvKiBSVDI1NjFzICovCi0JeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgwMzAxKSwgUENJX0RFVklDRV9EQVRBKCZydDYxcGNpX29wcykgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDAzMDEpIH0sCiAJLyogUlQyNTYxIHYyICovCi0JeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgwMzAyKSwgUENJX0RFVklDRV9EQVRBKCZydDYxcGNpX29wcykgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDAzMDIpIH0sCiAJLyogUlQyNjYxICovCi0JeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgwNDAxKSwgUENJX0RFVklDRV9EQVRBKCZydDYxcGNpX29wcykgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDA0MDEpIH0sCiAJeyAwLCB9CiB9OwogCkBAIC0zMDc3LDEwICszMDgzLDE2IEBACiBNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfUlQyNjYxKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorc3RhdGljIGludCBydDYxcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LAorCQkJIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gcnQyeDAwcGNpX3Byb2JlKHBjaV9kZXYsICZydDYxcGNpX29wcyk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBydDYxcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSBLQlVJTERfTU9ETkFNRSwKIAkuaWRfdGFibGUJPSBydDYxcGNpX2RldmljZV90YWJsZSwKLQkucHJvYmUJCT0gcnQyeDAwcGNpX3Byb2JlLAorCS5wcm9iZQkJPSBydDYxcGNpX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocnQyeDAwcGNpX3JlbW92ZSksCiAJLnN1c3BlbmQJPSBydDJ4MDBwY2lfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHJ0MngwMHBjaV9yZXN1bWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYwppbmRleCAwMmYxMTQ4Li5hZDIwOTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMKQEAgLTU5NSw3ICs1OTUsNyBAQAogCXN3aXRjaCAoYW50LT5yeCkgewogCWNhc2UgQU5URU5OQV9IV19ESVZFUlNJVFk6CiAJCXJ0MngwMF9zZXRfZmllbGQ4KCZyNCwgQkJQX1I0X1JYX0FOVEVOTkFfQ09OVFJPTCwgMik7Ci0JCXRlbXAgPSAhdGVzdF9iaXQoQ09ORklHX0ZSQU1FX1RZUEUsICZydDJ4MDBkZXYtPmZsYWdzKQorCQl0ZW1wID0gIXRlc3RfYml0KENBUEFCSUxJVFlfRlJBTUVfVFlQRSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKQogCQkgICAgICAgJiYgKHJ0MngwMGRldi0+Y3Vycl9iYW5kICE9IElFRUU4MDIxMV9CQU5EXzVHSFopOwogCQlydDJ4MDBfc2V0X2ZpZWxkOCgmcjQsIEJCUF9SNF9SWF9GUkFNRV9FTkQsIHRlbXApOwogCQlicmVhazsKQEAgLTYzNiw3ICs2MzYsNyBAQAogCiAJcnQyeDAwX3NldF9maWVsZDgoJnIzLCBCQlBfUjNfU01BUlRfTU9ERSwgMCk7CiAJcnQyeDAwX3NldF9maWVsZDgoJnI0LCBCQlBfUjRfUlhfRlJBTUVfRU5ELAotCQkJICAhdGVzdF9iaXQoQ09ORklHX0ZSQU1FX1RZUEUsICZydDJ4MDBkZXYtPmZsYWdzKSk7CisJCQkgICF0ZXN0X2JpdChDQVBBQklMSVRZX0ZSQU1FX1RZUEUsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpOwogCiAJLyoKIAkgKiBDb25maWd1cmUgdGhlIFJYIGFudGVubmEuCkBAIC03MDksMTAgKzcwOSwxMCBAQAogCiAJaWYgKHJ0MngwMGRldi0+Y3Vycl9iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopIHsKIAkJc2VsID0gYW50ZW5uYV9zZWxfYTsKLQkJbG5hID0gdGVzdF9iaXQoQ09ORklHX0VYVEVSTkFMX0xOQV9BLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJCWxuYSA9IHRlc3RfYml0KENBUEFCSUxJVFlfRVhURVJOQUxfTE5BX0EsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CiAJfSBlbHNlIHsKIAkJc2VsID0gYW50ZW5uYV9zZWxfYmc7Ci0JCWxuYSA9IHRlc3RfYml0KENPTkZJR19FWFRFUk5BTF9MTkFfQkcsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwkJbG5hID0gdGVzdF9iaXQoQ0FQQUJJTElUWV9FWFRFUk5BTF9MTkFfQkcsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYW50ZW5uYV9zZWxfYSk7IGkrKykKQEAgLTc0MCw3ICs3NDAsNyBAQAogCXNob3J0IGxuYV9nYWluID0gMDsKIAogCWlmIChsaWJjb25mLT5jb25mLT5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKLQkJaWYgKHRlc3RfYml0KENPTkZJR19FWFRFUk5BTF9MTkFfQkcsICZydDJ4MDBkZXYtPmZsYWdzKSkKKwkJaWYgKHRlc3RfYml0KENBUEFCSUxJVFlfRVhURVJOQUxfTE5BX0JHLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKQogCQkJbG5hX2dhaW4gKz0gMTQ7CiAKIAkJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX1JTU0lfT0ZGU0VUX0JHLCAmZWVwcm9tKTsKQEAgLTkzMCw3ICs5MzAsNyBAQAogCQlsb3dfYm91bmQgPSAweDI4OwogCQl1cF9ib3VuZCA9IDB4NDg7CiAKLQkJaWYgKHRlc3RfYml0KENPTkZJR19FWFRFUk5BTF9MTkFfQSwgJnJ0MngwMGRldi0+ZmxhZ3MpKSB7CisJCWlmICh0ZXN0X2JpdChDQVBBQklMSVRZX0VYVEVSTkFMX0xOQV9BLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKSB7CiAJCQlsb3dfYm91bmQgKz0gMHgxMDsKIAkJCXVwX2JvdW5kICs9IDB4MTA7CiAJCX0KQEAgLTk0Niw3ICs5NDYsNyBAQAogCQkJdXBfYm91bmQgPSAweDFjOwogCQl9CiAKLQkJaWYgKHRlc3RfYml0KENPTkZJR19FWFRFUk5BTF9MTkFfQkcsICZydDJ4MDBkZXYtPmZsYWdzKSkgeworCQlpZiAodGVzdF9iaXQoQ0FQQUJJTElUWV9FWFRFUk5BTF9MTkFfQkcsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpIHsKIAkJCWxvd19ib3VuZCArPSAweDE0OwogCQkJdXBfYm91bmQgKz0gMHgxMDsKIAkJfQpAQCAtMTY2MSw3ICsxNjYxLDcgQEAKIAl9CiAKIAlpZiAocnQyeDAwZGV2LT5jdXJyX2JhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgewotCQlpZiAodGVzdF9iaXQoQ09ORklHX0VYVEVSTkFMX0xOQV9BLCAmcnQyeDAwZGV2LT5mbGFncykpIHsKKwkJaWYgKHRlc3RfYml0KENBUEFCSUxJVFlfRVhURVJOQUxfTE5BX0EsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpIHsKIAkJCWlmIChsbmEgPT0gMyB8fCBsbmEgPT0gMikKIAkJCQlvZmZzZXQgKz0gMTA7CiAJCX0gZWxzZSB7CkBAIC0xODk5LDEzICsxODk5LDEzIEBACiAJICogUmVhZCB0aGUgRnJhbWUgdHlwZS4KIAkgKi8KIAlpZiAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfRlJBTUVfVFlQRSkpCi0JCV9fc2V0X2JpdChDT05GSUdfRlJBTUVfVFlQRSwgJnJ0MngwMGRldi0+ZmxhZ3MpOworCQlfX3NldF9iaXQoQ0FQQUJJTElUWV9GUkFNRV9UWVBFLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOwogCiAJLyoKIAkgKiBEZXRlY3QgaWYgdGhpcyBkZXZpY2UgaGFzIGFuIGhhcmR3YXJlIGNvbnRyb2xsZWQgcmFkaW8uCiAJICovCiAJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX0hBUkRXQVJFX1JBRElPKSkKLQkJX19zZXRfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpOworCQlfX3NldF9iaXQoQ0FQQUJJTElUWV9IV19CVVRUT04sICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CiAKIAkvKgogCSAqIFJlYWQgZnJlcXVlbmN5IG9mZnNldC4KQEAgLTE5MTksOCArMTkxOSw4IEBACiAJcnQyeDAwX2VlcHJvbV9yZWFkKHJ0MngwMGRldiwgRUVQUk9NX05JQywgJmVlcHJvbSk7CiAKIAlpZiAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX05JQ19FWFRFUk5BTF9MTkEpKSB7Ci0JCV9fc2V0X2JpdChDT05GSUdfRVhURVJOQUxfTE5BX0EsICZydDJ4MDBkZXYtPmZsYWdzKTsKLQkJX19zZXRfYml0KENPTkZJR19FWFRFUk5BTF9MTkFfQkcsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwkJX19zZXRfYml0KENBUEFCSUxJVFlfRVhURVJOQUxfTE5BX0EsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CisJCV9fc2V0X2JpdChDQVBBQklMSVRZX0VYVEVSTkFMX0xOQV9CRywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKIAl9CiAKIAkvKgpAQCAtMjIwMCwxNiArMjIwMCwxNiBAQAogCSAqIFRoaXMgZGV2aWNlIGhhcyBtdWx0aXBsZSBmaWx0ZXJzIGZvciBjb250cm9sIGZyYW1lcywKIAkgKiBidXQgaGFzIG5vIGEgc2VwYXJhdGUgZmlsdGVyIGZvciBQUyBQb2xsIGZyYW1lcy4KIAkgKi8KLQlfX3NldF9iaXQoRFJJVkVSX1NVUFBPUlRfQ09OVFJPTF9GSUxURVJTLCAmcnQyeDAwZGV2LT5mbGFncyk7CisJX19zZXRfYml0KENBUEFCSUxJVFlfQ09OVFJPTF9GSUxURVJTLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOwogCiAJLyoKIAkgKiBUaGlzIGRldmljZSByZXF1aXJlcyBmaXJtd2FyZS4KIAkgKi8KLQlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfRklSTVdBUkUsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwlfX3NldF9iaXQoUkVRVUlSRV9GSVJNV0FSRSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKTsKIAlpZiAoIW1vZHBhcmFtX25vaHdjcnlwdCkKLQkJX19zZXRfYml0KENPTkZJR19TVVBQT1JUX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCV9fc2V0X2JpdChEUklWRVJfU1VQUE9SVF9MSU5LX1RVTklORywgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCV9fc2V0X2JpdChEUklWRVJfU1VQUE9SVF9XQVRDSERPRywgJnJ0MngwMGRldi0+ZmxhZ3MpOworCQlfX3NldF9iaXQoQ0FQQUJJTElUWV9IV19DUllQVE8sICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CisJX19zZXRfYml0KENBUEFCSUxJVFlfTElOS19UVU5JTkcsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CisJX19zZXRfYml0KFJFUVVJUkVfUFNfQVVUT1dBS0UsICZydDJ4MDBkZXYtPmNhcF9mbGFncyk7CiAKIAkvKgogCSAqIFNldCB0aGUgcnNzaSBvZmZzZXQuCkBAIC0yMzExLDYgKzIzMTEsOSBAQAogCS5nZXRfdHNmCQk9IHJ0NzN1c2JfZ2V0X3RzZiwKIAkucmZraWxsX3BvbGwJCT0gcnQyeDAwbWFjX3Jma2lsbF9wb2xsLAogCS5mbHVzaAkJCT0gcnQyeDAwbWFjX2ZsdXNoLAorCS5zZXRfYW50ZW5uYQkJPSBydDJ4MDBtYWNfc2V0X2FudGVubmEsCisJLmdldF9hbnRlbm5hCQk9IHJ0MngwMG1hY19nZXRfYW50ZW5uYSwKKwkuZ2V0X3JpbmdwYXJhbQkJPSBydDJ4MDBtYWNfZ2V0X3JpbmdwYXJhbSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnQyeDAwbGliX29wcyBydDczdXNiX3J0MngwMF9vcHMgPSB7CkBAIC0yMzg5LDExNCArMjM5MiwxMTMgQEAKICAqLwogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHJ0NzN1c2JfZGV2aWNlX3RhYmxlW10gPSB7CiAJLyogQWJvQ29tICovCi0JeyBVU0JfREVWSUNFKDB4MDdiOCwgMHhiMjFiKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweGIyMWMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4YjIxZCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdiOCwgMHhiMjFlKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweGIyMWYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4YjIxYikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweGIyMWMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDdiOCwgMHhiMjFkKSB9LAorCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4YjIxZSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweGIyMWYpIH0sCiAJLyogQUwgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMTApLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE0YjIsIDB4M2MxMCkgfSwKIAkvKiBBbWlnbyAqLwotCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4OTAyMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGViMCwgMHg5MDIxKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDkwMjEpIH0sCisJeyBVU0JfREVWSUNFKDB4MGViMCwgMHg5MDIxKSB9LAogCS8qIEFNSVQgICovCi0JeyBVU0JfREVWSUNFKDB4MThjNSwgMHgwMDAyKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxOGM1LCAweDAwMDIpIH0sCiAJLyogQXNrZXkgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNjkwLCAweDA3MjIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE2OTAsIDB4MDcyMikgfSwKIAkvKiBBU1VTICovCi0JeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzIzKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3MjQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTcyMykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3MjQpIH0sCiAJLyogQmVsa2luICovCi0JeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg3MDUwKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDcwNWEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4OTA1YiksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg5MDVjKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDcwNWEpIH0sCisJeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg5MDViKSB9LAorCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4OTA1YykgfSwKIAkvKiBCaWxsaW9udG9uICovCi0JeyBVU0JfREVWSUNFKDB4MTYzMSwgMHhjMDE5KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwOGRkLCAweDAxMjApLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE2MzEsIDB4YzAxOSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwOGRkLCAweDAxMjApIH0sCiAJLyogQnVmZmFsbyAqLwotCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDBkOCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMGQ5KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAwZjQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDExNiksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMTE5KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAxMzcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDBkOCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAwZDkpIH0sCisJeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMGY0KSB9LAorCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDExNikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAxMTkpIH0sCisJeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMTM3KSB9LAogCS8qIENFSVZBICovCi0JeyBVU0JfREVWSUNFKDB4MTc4ZCwgMHgwMmJlKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNzhkLCAweDAyYmUpIH0sCiAJLyogQ05ldCAqLwotCXsgVVNCX0RFVklDRSgweDEzNzEsIDB4OTAyMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTM3MSwgMHg5MDMyKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxMzcxLCAweDkwMjIpIH0sCisJeyBVU0JfREVWSUNFKDB4MTM3MSwgMHg5MDMyKSB9LAogCS8qIENvbmNlcHRyb25pYyAqLwotCXsgVVNCX0RFVklDRSgweDE0YjIsIDB4M2MyMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzIyKSB9LAogCS8qIENvcmVnYSAqLwotCXsgVVNCX0RFVklDRSgweDA3YWEsIDB4MDAyZSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDdhYSwgMHgwMDJlKSB9LAogCS8qIEQtTGluayAqLwotCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MwMyksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzA0KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMDYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MwNyksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzAzKSB9LAorCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MwNCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMDYpIH0sCisJeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzA3KSB9LAogCS8qIEVkaW1heCAqLwotCXsgVVNCX0RFVklDRSgweDczOTIsIDB4NzMxOCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4NzM5MiwgMHg3NjE4KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHg3MzkyLCAweDczMTgpIH0sCisJeyBVU0JfREVWSUNFKDB4NzM5MiwgMHg3NjE4KSB9LAogCS8qIEVuR2VuaXVzICovCi0JeyBVU0JfREVWSUNFKDB4MTc0MCwgMHgzNzAxKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDM3MDEpIH0sCiAJLyogR2VtdGVrICovCi0JeyBVU0JfREVWSUNFKDB4MTVhOSwgMHgwMDA0KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNWE5LCAweDAwMDQpIH0sCiAJLyogR2lnYWJ5dGUgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMDQ0LCAweDgwMDgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDEwNDQsIDB4ODAwYSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTA0NCwgMHg4MDA4KSB9LAorCXsgVVNCX0RFVklDRSgweDEwNDQsIDB4ODAwYSkgfSwKIAkvKiBIdWF3ZWktM0NvbSAqLwotCXsgVVNCX0RFVklDRSgweDE0NzIsIDB4MDAwOSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTQ3MiwgMHgwMDA5KSB9LAogCS8qIEhlcmN1bGVzICovCi0JeyBVU0JfREVWSUNFKDB4MDZmOCwgMHhlMDAyKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNmY4LCAweGUwMTApLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA2ZjgsIDB4ZTAyMCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDZmOCwgMHhlMDAyKSB9LAorCXsgVVNCX0RFVklDRSgweDA2ZjgsIDB4ZTAxMCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNmY4LCAweGUwMjApIH0sCiAJLyogTGlua3N5cyAqLwotCXsgVVNCX0RFVklDRSgweDEzYjEsIDB4MDAyMCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTNiMSwgMHgwMDIzKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxM2IxLCAweDAwMjgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDEzYjEsIDB4MDAyMCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxM2IxLCAweDAwMjMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTNiMSwgMHgwMDI4KSB9LAogCS8qIE1TSSAqLwotCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4NDYwMCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg2ODc3KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDY4NzQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4YTg2MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRiMCwgMHhhODc0KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDQ2MDApIH0sCisJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg2ODc3KSB9LAorCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4Njg3NCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweGE4NjEpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHhhODc0KSB9LAogCS8qIE92aXNsaW5rICovCi0JeyBVU0JfREVWSUNFKDB4MWI3NSwgMHg3MzE4KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxYjc1LCAweDczMTgpIH0sCiAJLyogUmFsaW5rICovCi0JeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwOTNkKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDI1NzMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MjY3MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDgxMiwgMHgzMTAxKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNGJiLCAweDA5M2QpIH0sCisJeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgyNTczKSB9LAorCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MjY3MSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwODEyLCAweDMxMDEpIH0sCiAJLyogUWNvbSAqLwotCXsgVVNCX0RFVklDRSgweDE4ZTgsIDB4NjE5NiksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MThlOCwgMHg2MjI5KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxOGU4LCAweDYyMzgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE4ZTgsIDB4NjE5NikgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxOGU4LCAweDYyMjkpIH0sCisJeyBVU0JfREVWSUNFKDB4MThlOCwgMHg2MjM4KSB9LAogCS8qIFNhbXN1bmcgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwNGU4LCAweDQ0NzEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA0ZTgsIDB4NDQ3MSkgfSwKIAkvKiBTZW5hbyAqLwotCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4NzEwMCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg3MTAwKSB9LAogCS8qIFNpdGVjb20gKi8KLQl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwMjQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAyNyksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDJmKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDkwYWMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4OTcxMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDI0KSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAyNykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwMmYpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHg5MGFjKSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4OTcxMikgfSwKIAkvKiBTdXJlY29tICovCi0JeyBVU0JfREVWSUNFKDB4MDc2OSwgMHgzMWYzKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNzY5LCAweDMxZjMpIH0sCiAJLyogVGlsZ2luICovCi0JeyBVU0JfREVWSUNFKDB4NjkzMywgMHg1MDAxKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHg2OTMzLCAweDUwMDEpIH0sCiAJLyogUGhpbGlwcyAqLwotCXsgVVNCX0RFVklDRSgweDA0NzEsIDB4MjAwYSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDQ3MSwgMHgyMDBhKSB9LAogCS8qIFBsYW5leCAqLwotCXsgVVNCX0RFVklDRSgweDIwMTksIDB4YWIwMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MjAxOSwgMHhhYjUwKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDE5LCAweGFiMDEpIH0sCisJeyBVU0JfREVWSUNFKDB4MjAxOSwgMHhhYjUwKSB9LAogCS8qIFdpZGVUZWxsICovCi0JeyBVU0JfREVWSUNFKDB4NzE2NywgMHgzODQwKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHg3MTY3LCAweDM4NDApIH0sCiAJLyogWmNvbSAqLwotCXsgVVNCX0RFVklDRSgweDBjZGUsIDB4MDAxYyksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGNkZSwgMHgwMDFjKSB9LAogCS8qIFp5WEVMICovCi0JeyBVU0JfREVWSUNFKDB4MDU4NiwgMHgzNDE1KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTg2LCAweDM0MTUpIH0sCiAJeyAwLCB9CiB9OwogCkBAIC0yNTA4LDEwICsyNTEwLDE2IEBACiBNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfUlQyNTcxKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorc3RhdGljIGludCBydDczdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICp1c2JfaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIHJ0MngwMHVzYl9wcm9iZSh1c2JfaW50ZiwgJnJ0NzN1c2Jfb3BzKTsKK30KKwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHJ0NzN1c2JfZHJpdmVyID0gewogCS5uYW1lCQk9IEtCVUlMRF9NT0ROQU1FLAogCS5pZF90YWJsZQk9IHJ0NzN1c2JfZGV2aWNlX3RhYmxlLAotCS5wcm9iZQkJPSBydDJ4MDB1c2JfcHJvYmUsCisJLnByb2JlCQk9IHJ0NzN1c2JfcHJvYmUsCiAJLmRpc2Nvbm5lY3QJPSBydDJ4MDB1c2JfZGlzY29ubmVjdCwKIAkuc3VzcGVuZAk9IHJ0MngwMHVzYl9zdXNwZW5kLAogCS5yZXN1bWUJCT0gcnQyeDAwdXNiX3Jlc3VtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvS2NvbmZpZwppbmRleCBjZTQ5ZTBjLi41YWVlOGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9LY29uZmlnCkBAIC0xMCw2ICsxMCwxNyBAQAogCiAJSWYgeW91IGNob29zZSB0byBidWlsZCBpdCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWQgcnRsODE5MmNlCiAKK2NvbmZpZyBSVEw4MTkyU0UKKwl0cmlzdGF0ZSAiUmVhbHRlayBSVEw4MTkyU0UvUlRMODE5MVNFIFBDSWUgV2lyZWxlc3MgTmV0d29yayBBZGFwdGVyIgorCWRlcGVuZHMgb24gTUFDODAyMTEgJiYgRVhQRVJJTUVOVEFMCisJc2VsZWN0IEZXX0xPQURFUgorCXNlbGVjdCBSVExXSUZJCisJLS0taGVscC0tLQorCVRoaXMgaXMgdGhlIGRyaXZlciBmb3IgUmVhbHRlayBSVEw4MTkyU0UvUlRMODE5MVNFIDgwMi4xMW4gUENJZQorCXdpcmVsZXNzIG5ldHdvcmsgYWRhcHRlcnMuCisKKwlJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGl0IGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNhbGxlZCBydGw4MTkyc2UKKwogY29uZmlnIFJUTDgxOTJDVQogCXRyaXN0YXRlICJSZWFsdGVrIFJUTDgxOTJDVS9SVEw4MTg4Q1UgVVNCIFdpcmVsZXNzIE5ldHdvcmsgQWRhcHRlciIKIAlkZXBlbmRzIG9uIE1BQzgwMjExICYmIFVTQiAmJiBFWFBFUklNRU5UQUwKQEAgLTI0LDEwICszNSwxMCBAQAogCiBjb25maWcgUlRMV0lGSQogCXRyaXN0YXRlCi0JZGVwZW5kcyBvbiBSVEw4MTkyQ0UgfHwgUlRMODE5MkNVCisJZGVwZW5kcyBvbiBSVEw4MTkyQ0UgfHwgUlRMODE5MkNVIHx8IFJUTDgxOTJTRQogCWRlZmF1bHQgbQogCiBjb25maWcgUlRMODE5MkNfQ09NTU9OCiAJdHJpc3RhdGUKLQlkZXBlbmRzIG9uIFJUTDgxOTJDRSB8fCBSVEw4MTkyQ1UKKwlkZXBlbmRzIG9uIFJUTDgxOTJDRSB8fCBSVEw4MTkyQ1UgfHwgUlRMODE5MlNFCiAJZGVmYXVsdCBtCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9NYWtlZmlsZQppbmRleCBlYzkzOTNmLi43YWNjZTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvTWFrZWZpbGUKQEAgLTIyLDUgKzIyLDYgQEAKIG9iai0kKENPTkZJR19SVEw4MTkyQ19DT01NT04pCSs9IHJ0bDgxOTJjLwogb2JqLSQoQ09ORklHX1JUTDgxOTJDRSkJCSs9IHJ0bDgxOTJjZS8KIG9iai0kKENPTkZJR19SVEw4MTkyQ1UpCQkrPSBydGw4MTkyY3UvCitvYmotJChDT05GSUdfUlRMODE5MlNFKQkJKz0gcnRsODE5MnNlLwogCiBjY2ZsYWdzLXkgKz0gLURfX0NIRUNLX0VORElBTl9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2Jhc2UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvYmFzZS5jCmluZGV4IDBkN2Q5M2UuLmNjYjZkYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvYmFzZS5jCkBAIC01MCw4ICs1MCw5IEBACiAgKjMpIGZ1bmN0aW9ucyBjYWxsZWQgYnkgY29yZS5jCiAgKjQpIHdxICYgdGltZXIgY2FsbGJhY2sgZnVuY3Rpb25zCiAgKjUpIGZyYW1lIHByb2Nlc3MgZnVuY3Rpb25zCi0gKjYpIHN5c2ZzIGZ1bmN0aW9ucwotICo3KSAuLi4KKyAqNikgSU9UIGZ1bmN0aW9ucworICo3KSBzeXNmcyBmdW5jdGlvbnMKKyAqOCkgLi4uCiAgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTksNyArNjAsNyBAQAogICogbWFjODAyMTEgaW5pdCBmdW5jdGlvbnMKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBydGxfY2hhbm5lbHRhYmxlW10gPSB7CitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHJ0bF9jaGFubmVsdGFibGVfMmdbXSA9IHsKIAl7LmNlbnRlcl9mcmVxID0gMjQxMiwgLmh3X3ZhbHVlID0gMSx9LAogCXsuY2VudGVyX2ZyZXEgPSAyNDE3LCAuaHdfdmFsdWUgPSAyLH0sCiAJey5jZW50ZXJfZnJlcSA9IDI0MjIsIC5od192YWx1ZSA9IDMsfSwKQEAgLTc2LDcgKzc3LDM0IEBACiAJey5jZW50ZXJfZnJlcSA9IDI0ODQsIC5od192YWx1ZSA9IDE0LH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIHJ0bF9yYXRldGFibGVbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgcnRsX2NoYW5uZWx0YWJsZV81Z1tdID0geworCXsuY2VudGVyX2ZyZXEgPSA1MTgwLCAuaHdfdmFsdWUgPSAzNix9LAorCXsuY2VudGVyX2ZyZXEgPSA1MjAwLCAuaHdfdmFsdWUgPSA0MCx9LAorCXsuY2VudGVyX2ZyZXEgPSA1MjIwLCAuaHdfdmFsdWUgPSA0NCx9LAorCXsuY2VudGVyX2ZyZXEgPSA1MjQwLCAuaHdfdmFsdWUgPSA0OCx9LAorCXsuY2VudGVyX2ZyZXEgPSA1MjYwLCAuaHdfdmFsdWUgPSA1Mix9LAorCXsuY2VudGVyX2ZyZXEgPSA1MjgwLCAuaHdfdmFsdWUgPSA1Nix9LAorCXsuY2VudGVyX2ZyZXEgPSA1MzAwLCAuaHdfdmFsdWUgPSA2MCx9LAorCXsuY2VudGVyX2ZyZXEgPSA1MzIwLCAuaHdfdmFsdWUgPSA2NCx9LAorCXsuY2VudGVyX2ZyZXEgPSA1NTAwLCAuaHdfdmFsdWUgPSAxMDAsfSwKKwl7LmNlbnRlcl9mcmVxID0gNTUyMCwgLmh3X3ZhbHVlID0gMTA0LH0sCisJey5jZW50ZXJfZnJlcSA9IDU1NDAsIC5od192YWx1ZSA9IDEwOCx9LAorCXsuY2VudGVyX2ZyZXEgPSA1NTYwLCAuaHdfdmFsdWUgPSAxMTIsfSwKKwl7LmNlbnRlcl9mcmVxID0gNTU4MCwgLmh3X3ZhbHVlID0gMTE2LH0sCisJey5jZW50ZXJfZnJlcSA9IDU2MDAsIC5od192YWx1ZSA9IDEyMCx9LAorCXsuY2VudGVyX2ZyZXEgPSA1NjIwLCAuaHdfdmFsdWUgPSAxMjQsfSwKKwl7LmNlbnRlcl9mcmVxID0gNTY0MCwgLmh3X3ZhbHVlID0gMTI4LH0sCisJey5jZW50ZXJfZnJlcSA9IDU2NjAsIC5od192YWx1ZSA9IDEzMix9LAorCXsuY2VudGVyX2ZyZXEgPSA1NjgwLCAuaHdfdmFsdWUgPSAxMzYsfSwKKwl7LmNlbnRlcl9mcmVxID0gNTcwMCwgLmh3X3ZhbHVlID0gMTQwLH0sCisJey5jZW50ZXJfZnJlcSA9IDU3NDUsIC5od192YWx1ZSA9IDE0OSx9LAorCXsuY2VudGVyX2ZyZXEgPSA1NzY1LCAuaHdfdmFsdWUgPSAxNTMsfSwKKwl7LmNlbnRlcl9mcmVxID0gNTc4NSwgLmh3X3ZhbHVlID0gMTU3LH0sCisJey5jZW50ZXJfZnJlcSA9IDU4MDUsIC5od192YWx1ZSA9IDE2MSx9LAorCXsuY2VudGVyX2ZyZXEgPSA1ODI1LCAuaHdfdmFsdWUgPSAxNjUsfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcnRsX3JhdGV0YWJsZV8yZ1tdID0gewogCXsuYml0cmF0ZSA9IDEwLCAuaHdfdmFsdWUgPSAweDAwLH0sCiAJey5iaXRyYXRlID0gMjAsIC5od192YWx1ZSA9IDB4MDEsfSwKIAl7LmJpdHJhdGUgPSA1NSwgLmh3X3ZhbHVlID0gMHgwMix9LApAQCAtOTEsMTggKzExOSw1NyBAQAogCXsuYml0cmF0ZSA9IDU0MCwgLmh3X3ZhbHVlID0gMHgwYix9LAogfTsKIAorc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBydGxfcmF0ZXRhYmxlXzVnW10gPSB7CisJey5iaXRyYXRlID0gNjAsIC5od192YWx1ZSA9IDB4MDQsfSwKKwl7LmJpdHJhdGUgPSA5MCwgLmh3X3ZhbHVlID0gMHgwNSx9LAorCXsuYml0cmF0ZSA9IDEyMCwgLmh3X3ZhbHVlID0gMHgwNix9LAorCXsuYml0cmF0ZSA9IDE4MCwgLmh3X3ZhbHVlID0gMHgwNyx9LAorCXsuYml0cmF0ZSA9IDI0MCwgLmh3X3ZhbHVlID0gMHgwOCx9LAorCXsuYml0cmF0ZSA9IDM2MCwgLmh3X3ZhbHVlID0gMHgwOSx9LAorCXsuYml0cmF0ZSA9IDQ4MCwgLmh3X3ZhbHVlID0gMHgwYSx9LAorCXsuYml0cmF0ZSA9IDU0MCwgLmh3X3ZhbHVlID0gMHgwYix9LAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgcnRsX2JhbmRfMmdoeiA9IHsKIAkuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFosCiAKLQkuY2hhbm5lbHMgPSBydGxfY2hhbm5lbHRhYmxlLAotCS5uX2NoYW5uZWxzID0gQVJSQVlfU0laRShydGxfY2hhbm5lbHRhYmxlKSwKKwkuY2hhbm5lbHMgPSBydGxfY2hhbm5lbHRhYmxlXzJnLAorCS5uX2NoYW5uZWxzID0gQVJSQVlfU0laRShydGxfY2hhbm5lbHRhYmxlXzJnKSwKIAotCS5iaXRyYXRlcyA9IHJ0bF9yYXRldGFibGUsCi0JLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKHJ0bF9yYXRldGFibGUpLAorCS5iaXRyYXRlcyA9IHJ0bF9yYXRldGFibGVfMmcsCisJLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKHJ0bF9yYXRldGFibGVfMmcpLAogCiAJLmh0X2NhcCA9IHswfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIHJ0bF9iYW5kXzVnaHogPSB7CisJLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haLAorCisJLmNoYW5uZWxzID0gcnRsX2NoYW5uZWx0YWJsZV81ZywKKwkubl9jaGFubmVscyA9IEFSUkFZX1NJWkUocnRsX2NoYW5uZWx0YWJsZV81ZyksCisKKwkuYml0cmF0ZXMgPSBydGxfcmF0ZXRhYmxlXzVnLAorCS5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShydGxfcmF0ZXRhYmxlXzVnKSwKKworCS5odF9jYXAgPSB7MH0sCit9OworCitzdGF0aWMgY29uc3QgdTggdGlkX3RvX2FjW10gPSB7CisJMiwgLyogSUVFRTgwMjExX0FDX0JFICovCisJMywgLyogSUVFRTgwMjExX0FDX0JLICovCisJMywgLyogSUVFRTgwMjExX0FDX0JLICovCisJMiwgLyogSUVFRTgwMjExX0FDX0JFICovCisJMSwgLyogSUVFRTgwMjExX0FDX1ZJICovCisJMSwgLyogSUVFRTgwMjExX0FDX1ZJICovCisJMCwgLyogSUVFRTgwMjExX0FDX1ZPICovCisJMCwgLyogSUVFRTgwMjExX0FDX1ZPICovCit9OworCit1OCBydGxfdGlkX3RvX2FjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCB0aWQpCit7CisJcmV0dXJuIHRpZF90b19hY1t0aWRdOworfQorCiBzdGF0aWMgdm9pZCBfcnRsX2luaXRfaHdfaHRfY2FwYWIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKmh0X2NhcCkKIHsKQEAgLTExNSw2ICsxODIsOSBAQAogCSAgICBJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMCB8CiAJICAgIElFRUU4MDIxMV9IVF9DQVBfRFNTU0NDSzQwIHwgSUVFRTgwMjExX0hUX0NBUF9NQVhfQU1TRFU7CiAKKwlpZiAocnRscHJpdi0+cnRsaGFsLmRpc2FibGVfYW1zZHVfOGspCisJCWh0X2NhcC0+Y2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX01BWF9BTVNEVTsKKwogCS8qCiAJICpNYXhpbXVtIGxlbmd0aCBvZiBBTVBEVSB0aGF0IHRoZSBTVEEgY2FuIHJlY2VpdmUuCiAJICpMZW5ndGggPSAyIF4gKDEzICsgbWF4X2FtcGR1X2xlbmd0aF9leHApIC0gMSAob2N0ZXRzKQpAQCAtMTU5LDM3ICsyMjksOTkgQEAKIAogc3RhdGljIHZvaWQgX3J0bF9pbml0X21hYzgwMjExKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogeworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxwcml2KTsKIAlzdHJ1Y3QgcnRsX21hYyAqcnRsbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOwogCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAKLQkvKiA8MT4gdXNlICBtYWMtPmJhbmRzIGFzIG1lbSBmb3IgaHctPndpcGh5LT5iYW5kcyAqLwotCXNiYW5kID0gJihydGxtYWMtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdKTsKIAotCS8qCi0JICogPDI+IHNldCBody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdCi0JICogdG8gZGVmYXVsdCB2YWx1ZSgxVDFSKQotCSAqLwotCW1lbWNweSgmKHJ0bG1hYy0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0pLCAmcnRsX2JhbmRfMmdoeiwKLQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQpKTsKKwlpZiAocnRsaGFsLT5tYWNwaHltb2RlID09IFNJTkdMRU1BQ19TSU5HTEVQSFkgJiYgcnRsaGFsLT5iYW5kc2V0ID09CisJICAgIEJBTkRfT05fQk9USCkgeworCQkvKiAxOiAyLjQgRyBiYW5kcyAqLworCQkvKiA8MT4gdXNlICBtYWMtPmJhbmRzIGFzIG1lbSBmb3IgaHctPndpcGh5LT5iYW5kcyAqLworCQlzYmFuZCA9ICYocnRsbWFjLT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSk7CiAKLQkvKiA8Mz4gaW5pdCBodCBjYXAgYmFzZSBvbiBhbnRfbnVtICovCi0JX3J0bF9pbml0X2h3X2h0X2NhcGFiKGh3LCAmc2JhbmQtPmh0X2NhcCk7CisJCS8qIDwyPiBzZXQgaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXQorCQkgKiB0byBkZWZhdWx0IHZhbHVlKDFUMVIpICovCisJCW1lbWNweSgmKHJ0bG1hYy0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0pLCAmcnRsX2JhbmRfMmdoeiwKKwkJCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCkpOwogCi0JLyogPDQ+IHNldCBtYWMtPnNiYW5kIHRvIHdpcGh5LT5zYmFuZCAqLwotCWh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSBzYmFuZDsKKwkJLyogPDM+IGluaXQgaHQgY2FwIGJhc2Ugb24gYW50X251bSAqLworCQlfcnRsX2luaXRfaHdfaHRfY2FwYWIoaHcsICZzYmFuZC0+aHRfY2FwKTsKIAorCQkvKiA8ND4gc2V0IG1hYy0+c2JhbmQgdG8gd2lwaHktPnNiYW5kICovCisJCWh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSBzYmFuZDsKKworCQkvKiAyOiA1IEcgYmFuZHMgKi8KKwkJLyogPDE+IHVzZSAgbWFjLT5iYW5kcyBhcyBtZW0gZm9yIGh3LT53aXBoeS0+YmFuZHMgKi8KKwkJc2JhbmQgPSAmKHJ0bG1hYy0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0pOworCisJCS8qIDwyPiBzZXQgaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXQorCQkgKiB0byBkZWZhdWx0IHZhbHVlKDFUMVIpICovCisJCW1lbWNweSgmKHJ0bG1hYy0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0pLCAmcnRsX2JhbmRfNWdoeiwKKwkJCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCkpOworCisJCS8qIDwzPiBpbml0IGh0IGNhcCBiYXNlIG9uIGFudF9udW0gKi8KKwkJX3J0bF9pbml0X2h3X2h0X2NhcGFiKGh3LCAmc2JhbmQtPmh0X2NhcCk7CisKKwkJLyogPDQ+IHNldCBtYWMtPnNiYW5kIHRvIHdpcGh5LT5zYmFuZCAqLworCQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0gc2JhbmQ7CisJfSBlbHNlIHsKKwkJaWYgKHJ0bGhhbC0+Y3VycmVudF9iYW5kdHlwZSA9PSBCQU5EX09OXzJfNEcpIHsKKwkJCS8qIDwxPiB1c2UgIG1hYy0+YmFuZHMgYXMgbWVtIGZvciBody0+d2lwaHktPmJhbmRzICovCisJCQlzYmFuZCA9ICYocnRsbWFjLT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSk7CisKKwkJCS8qIDwyPiBzZXQgaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXQorCQkJICogdG8gZGVmYXVsdCB2YWx1ZSgxVDFSKSAqLworCQkJbWVtY3B5KCYocnRsbWFjLT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSksCisJCQkJICZydGxfYmFuZF8yZ2h6LAorCQkJCSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCkpOworCisJCQkvKiA8Mz4gaW5pdCBodCBjYXAgYmFzZSBvbiBhbnRfbnVtICovCisJCQlfcnRsX2luaXRfaHdfaHRfY2FwYWIoaHcsICZzYmFuZC0+aHRfY2FwKTsKKworCQkJLyogPDQ+IHNldCBtYWMtPnNiYW5kIHRvIHdpcGh5LT5zYmFuZCAqLworCQkJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9IHNiYW5kOworCQl9IGVsc2UgaWYgKHJ0bGhhbC0+Y3VycmVudF9iYW5kdHlwZSA9PSBCQU5EX09OXzVHKSB7CisJCQkvKiA8MT4gdXNlICBtYWMtPmJhbmRzIGFzIG1lbSBmb3IgaHctPndpcGh5LT5iYW5kcyAqLworCQkJc2JhbmQgPSAmKHJ0bG1hYy0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0pOworCisJCQkvKiA8Mj4gc2V0IGh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0KKwkJCSAqIHRvIGRlZmF1bHQgdmFsdWUoMVQxUikgKi8KKwkJCW1lbWNweSgmKHJ0bG1hYy0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0pLAorCQkJCSAmcnRsX2JhbmRfNWdoeiwKKwkJCQkgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQpKTsKKworCQkJLyogPDM+IGluaXQgaHQgY2FwIGJhc2Ugb24gYW50X251bSAqLworCQkJX3J0bF9pbml0X2h3X2h0X2NhcGFiKGh3LCAmc2JhbmQtPmh0X2NhcCk7CisKKwkJCS8qIDw0PiBzZXQgbWFjLT5zYmFuZCB0byB3aXBoeS0+c2JhbmQgKi8KKwkJCWh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0gPSBzYmFuZDsKKwkJfSBlbHNlIHsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0VNRVJHLAorCQkJCSAoIkVyciBCQU5EICVkXG4iLAorCQkJCSBydGxoYWwtPmN1cnJlbnRfYmFuZHR5cGUpKTsKKwkJfQorCX0KIAkvKiA8NT4gc2V0IGh3IGNhcHMgKi8KIAlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CiAJICAgIElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1MgfAotCSAgICBJRUVFODAyMTFfSFdfQkVBQ09OX0ZJTFRFUiB8IElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTiB8IC8qUFMqLwotCSAgICAvKklFRUU4MDIxMV9IV19TVVBQT1JUU19QUyB8ICovCi0JICAgIC8qSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLIHwgKi8KLQkgICAgLypJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUyB8ICovCisJICAgIElFRUU4MDIxMV9IV19CRUFDT05fRklMVEVSIHwKKwkgICAgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OIHwKIAkgICAgSUVFRTgwMjExX0hXX1JFUE9SVFNfVFhfQUNLX1NUQVRVUyB8IDA7CiAKKwkvKiBzd2xwcyBvciBod2xwcyBoYXMgYmVlbiBzZXQgaW4gZGlmZiBjaGlwIGluIGluaXRfc3dfdmFycyAqLworCWlmIChydGxwcml2LT5wc2Muc3djdHJsX2xwcykKKwkJaHctPmZsYWdzIHw9IElFRUU4MDIxMV9IV19TVVBQT1JUU19QUyB8CisJCQlJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0sgfAorCQkJLyogSUVFRTgwMjExX0hXX1NVUFBPUlRTX0RZTkFNSUNfUFMgfCAqLworCQkJMDsKKwogCWh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0KLQkgICAgQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwgQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKTsKKwkgICAgQklUKE5MODAyMTFfSUZUWVBFX0FQKSB8CisJICAgIEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8CisJICAgIEJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7CiAKIAlody0+d2lwaHktPnJ0c190aHJlc2hvbGQgPSAyMzQ3OwogCkBAIC0xOTksOSArMzMxLDEwIEBACiAJLyogVE9ETzogQ29ycmVjdCB0aGlzIHZhbHVlIGZvciBvdXIgaHcgKi8KIAkvKiBUT0RPOiBkZWZpbmUgdGhlc2UgaGFyZCBjb2RlIHZhbHVlICovCiAJaHctPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSAxMDA7Ci0JaHctPm1heF9saXN0ZW5faW50ZXJ2YWwgPSA1OworCWh3LT5tYXhfbGlzdGVuX2ludGVydmFsID0gMTA7CiAJaHctPm1heF9yYXRlX3RyaWVzID0gNDsKIAkvKiBody0+bWF4X3JhdGVzID0gMTsgKi8KKwlody0+c3RhX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcnRsX3N0YV9pbmZvKTsKIAogCS8qIDw2PiBtYWMgYWRkcmVzcyAqLwogCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKHJ0bGVmdXNlLT5kZXZfYWRkcikpIHsKQEAgLTIzMCw2ICszNjMsMTAgQEAKIAkJCSAgKHZvaWQgKilydGxfd2F0Y2hkb2dfd3FfY2FsbGJhY2spOwogCUlOSVRfREVMQVlFRF9XT1JLKCZydGxwcml2LT53b3Jrcy5pcHNfbmljX29mZl93cSwKIAkJCSAgKHZvaWQgKilydGxfaXBzX25pY19vZmZfd3FfY2FsbGJhY2spOworCUlOSVRfREVMQVlFRF9XT1JLKCZydGxwcml2LT53b3Jrcy5wc193b3JrLAorCQkJICAodm9pZCAqKXJ0bF9zd2xwc193cV9jYWxsYmFjayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnJ0bHByaXYtPndvcmtzLnBzX3Jmb25fd3EsCisJCQkgICh2b2lkICopcnRsX3N3bHBzX3Jmb25fd3FfY2FsbGJhY2spOwogCiB9CiAKQEAgLTI0MSw2ICszNzgsOCBAQAogCiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmcnRscHJpdi0+d29ya3Mud2F0Y2hkb2dfd3EpOwogCWNhbmNlbF9kZWxheWVkX3dvcmsoJnJ0bHByaXYtPndvcmtzLmlwc19uaWNfb2ZmX3dxKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZydGxwcml2LT53b3Jrcy5wc193b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZydGxwcml2LT53b3Jrcy5wc19yZm9uX3dxKTsKIH0KIAogdm9pZCBydGxfaW5pdF9yZmtpbGwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCkBAIC0yNTEsMTQgKzM5MCwxNiBAQAogCWJvb2wgYmxvY2tlZDsKIAl1OCB2YWxpZCA9IDA7CiAKKwkvKnNldCBpbml0IHN0YXRlIHRvIG9uICovCisJcnRscHJpdi0+cmZraWxsLnJma2lsbF9zdGF0ZSA9IDE7CisJd2lwaHlfcmZraWxsX3NldF9od19zdGF0ZShody0+d2lwaHksIDApOworCiAJcmFkaW9fc3RhdGUgPSBydGxwcml2LT5jZmctPm9wcy0+cmFkaW9fb25vZmZfY2hlY2tpbmcoaHcsICZ2YWxpZCk7CiAKLQkvKnNldCBpbml0IHN0YXRlIHRvIHRoYXQgb2Ygc3dpdGNoICovCi0JcnRscHJpdi0+cmZraWxsLnJma2lsbF9zdGF0ZSA9IHJhZGlvX3N0YXRlOwotCXByaW50ayhLRVJOX0lORk8gInJ0bHdpZmk6IHdpcmVsZXNzIHN3aXRjaCBpcyAlc1xuIiwKLQkgICAgICAgcnRscHJpdi0+cmZraWxsLnJma2lsbF9zdGF0ZSA/ICJvbiIgOiAib2ZmIik7Ci0KIAlpZiAodmFsaWQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAicnRsd2lmaTogd2lyZWxlc3Mgc3dpdGNoIGlzICVzXG4iLAorCQkJCXJ0bHByaXYtPnJma2lsbC5yZmtpbGxfc3RhdGUgPyAib24iIDogIm9mZiIpOworCiAJCXJ0bHByaXYtPnJma2lsbC5yZmtpbGxfc3RhdGUgPSByYWRpb19zdGF0ZTsKIAogCQlibG9ja2VkID0gKHJ0bHByaXYtPnJma2lsbC5yZmtpbGxfc3RhdGUgPT0gMSkgPyAwIDogMTsKQEAgLTMwOCw2ICs0NDksOCBAQAogCXNwaW5fbG9ja19pbml0KCZydGxwcml2LT5sb2Nrcy5yZl9wc19sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcnRscHJpdi0+bG9ja3MucmZfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnJ0bHByaXYtPmxvY2tzLmxwc19sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcnRscHJpdi0+bG9ja3Mud2FpdHFfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnJ0bHByaXYtPmxvY2tzLmNja19hbmRfcndfcGFnZWFfbG9jayk7CiAKIAlydGxtYWMtPmxpbmtfc3RhdGUgPSBNQUM4MDIxMV9OT0xJTks7CiAKQEAgLTMyNywxMiArNDcwLDYgQEAKIAlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOwogCiAJcnRscHJpdi0+Y2ZnLT5vcHMtPmdldF9od19yZWcoaHcsIEhXX1ZBUl9SQ1IsICh1OCAqKSAoJm1hYy0+cnhfY29uZikpOwotCXJ0bHByaXYtPmNmZy0+b3BzLT5nZXRfaHdfcmVnKGh3LCBIV19WQVJfTUdUX0ZJTFRFUiwKLQkJCQkgICAgICAodTggKikgKCZtYWMtPnJ4X21ndF9maWx0ZXIpKTsKLQlydGxwcml2LT5jZmctPm9wcy0+Z2V0X2h3X3JlZyhodywgSFdfVkFSX0NUUkxfRklMVEVSLAotCQkJCSAgICAgICh1OCAqKSAoJm1hYy0+cnhfY3RybF9maWx0ZXIpKTsKLQlydGxwcml2LT5jZmctPm9wcy0+Z2V0X2h3X3JlZyhodywgSFdfVkFSX0RBVEFfRklMVEVSLAotCQkJCSAgICAgICh1OCAqKSAoJm1hYy0+cnhfZGF0YV9maWx0ZXIpKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzU5LDI4ICs0OTYsNDAgQEAKIH0KIAogc3RhdGljIHZvaWQgX3J0bF9xdWVyeV9zaG9ydGdpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCQkgICAgICAgc3RydWN0IHJ0bF90Y2JfZGVzYyAqdGNiX2Rlc2MsCiAJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvKQogewogCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CiAJdTggcmF0ZV9mbGFnID0gaW5mby0+Y29udHJvbC5yYXRlc1swXS5mbGFnczsKLQorCXU4IHNnaV80MCA9IDAsIHNnaV8yMCA9IDAsIGJ3XzQwID0gMDsKIAl0Y2JfZGVzYy0+dXNlX3Nob3J0Z2kgPSBmYWxzZTsKIAotCWlmICghbWFjLT5odF9lbmFibGUpCisJaWYgKHN0YSA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQlpZiAoIW1hYy0+c2dpXzQwICYmICFtYWMtPnNnaV8yMCkKKwlzZ2lfNDAgPSBzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NHSV80MDsKKwlzZ2lfMjAgPSBzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMDsKKworCWlmICghKHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkpCiAJCXJldHVybjsKIAotCWlmICgobWFjLT5id180MCA9PSB0cnVlKSAmJiBtYWMtPnNnaV80MCkKKwlpZiAoIXNnaV80MCAmJiAhc2dpXzIwKQorCQlyZXR1cm47CisKKwlpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJYndfNDAgPSBtYWMtPmJ3XzQwOworCWVsc2UgaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CisJCW1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQlid180MCA9IHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwOworCisJaWYgKChid180MCA9PSB0cnVlKSAmJiBzZ2lfNDApCiAJCXRjYl9kZXNjLT51c2Vfc2hvcnRnaSA9IHRydWU7Ci0JZWxzZSBpZiAoKG1hYy0+YndfNDAgPT0gZmFsc2UpICYmIG1hYy0+c2dpXzIwKQorCWVsc2UgaWYgKChid180MCA9PSBmYWxzZSkgJiYgc2dpXzIwKQogCQl0Y2JfZGVzYy0+dXNlX3Nob3J0Z2kgPSB0cnVlOwogCiAJaWYgKCEocmF0ZV9mbGFnICYgSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJKSkKIAkJdGNiX2Rlc2MtPnVzZV9zaG9ydGdpID0gZmFsc2U7Ci0KIH0KIAogc3RhdGljIHZvaWQgX3J0bF9xdWVyeV9wcm90ZWN0aW9uX21vZGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCkBAIC00MDgsMTkgKzU1NywyNSBAQAogCQl0Y2JfZGVzYy0+cnRzX2VuYWJsZSA9IHRydWU7CiAJCXRjYl9kZXNjLT5ydHNfcmF0ZSA9IHJ0bHByaXYtPmNmZy0+bWFwc1tSVExfUkNfT0ZETV9SQVRFMjRNXTsKIAl9Ci0KIH0KIAogc3RhdGljIHZvaWQgX3J0bF90eHJhdGVfc2VsZWN0bW9kZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkJCSAgIHN0cnVjdCBydGxfdGNiX2Rlc2MgKnRjYl9kZXNjKQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfc3RhX2luZm8gKnN0YV9lbnRyeSA9IE5VTEw7CisJdTggcmF0cl9pbmRleCA9IDc7CiAKKwlpZiAoc3RhKSB7CisJCXN0YV9lbnRyeSA9IChzdHJ1Y3QgcnRsX3N0YV9pbmZvICopIHN0YS0+ZHJ2X3ByaXY7CisJCXJhdHJfaW5kZXggPSBzdGFfZW50cnktPnJhdHJfaW5kZXg7CisJfQogCWlmICghdGNiX2Rlc2MtPmRpc2FibGVfcmF0ZWZhbGxiYWNrIHx8ICF0Y2JfZGVzYy0+dXNlX2RyaXZlcl9yYXRlKSB7Ci0JCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQlpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewogCQkJdGNiX2Rlc2MtPnJhdHJfaW5kZXggPSAwOwotCQllbHNlIGlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQl9IGVsc2UgaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CiAJCQlpZiAodGNiX2Rlc2MtPm11bHRpY2FzdCB8fCB0Y2JfZGVzYy0+YnJvYWRjYXN0KSB7CiAJCQkJdGNiX2Rlc2MtPmh3X3JhdGUgPQogCQkJCSAgICBydGxwcml2LT5jZmctPm1hcHNbUlRMX1JDX0NDS19SQVRFMk1dOwpAQCAtNDI4LDM2ICs1ODMsNjEgQEAKIAkJCX0gZWxzZSB7CiAJCQkJLyogVE9ETyAqLwogCQkJfQorCQkJdGNiX2Rlc2MtPnJhdHJfaW5kZXggPSByYXRyX2luZGV4OworCQl9IGVsc2UgaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJCQl0Y2JfZGVzYy0+cmF0cl9pbmRleCA9IHJhdHJfaW5kZXg7CiAJCX0KIAl9CiAKIAlpZiAocnRscHJpdi0+ZG0udXNlcmFtYXNrKSB7CiAJCS8qIFRPRE8gd2Ugd2lsbCBkaWZmZXJlbnRpYXRlIGFkaG9jIGFuZCBzdGF0aW9uIGZ1dHJ1ZSAgKi8KLQkJdGNiX2Rlc2MtPm1hY19pZCA9IDA7CisJCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCQl0Y2JfZGVzYy0+bWFjX2lkID0gMDsKIAotCQlpZiAoKG1hYy0+bW9kZSA9PSBXSVJFTEVTU19NT0RFX05fMjRHKSB8fAotCQkgICAgKG1hYy0+bW9kZSA9PSBXSVJFTEVTU19NT0RFX05fNUcpKSB7Ci0JCQl0Y2JfZGVzYy0+cmF0cl9pbmRleCA9IFJBVFJfSU5YX1dJUkVMRVNTX05HQjsKLQkJfSBlbHNlIGlmIChtYWMtPm1vZGUgJiBXSVJFTEVTU19NT0RFX0cpIHsKLQkJCXRjYl9kZXNjLT5yYXRyX2luZGV4ID0gUkFUUl9JTlhfV0lSRUxFU1NfR0I7Ci0JCX0gZWxzZSBpZiAobWFjLT5tb2RlICYgV0lSRUxFU1NfTU9ERV9CKSB7Ci0JCQl0Y2JfZGVzYy0+cmF0cl9pbmRleCA9IFJBVFJfSU5YX1dJUkVMRVNTX0I7CisJCQlpZiAobWFjLT5tb2RlID09IFdJUkVMRVNTX01PREVfTl8yNEcpCisJCQkJdGNiX2Rlc2MtPnJhdHJfaW5kZXggPSBSQVRSX0lOWF9XSVJFTEVTU19OR0I7CisJCQllbHNlIGlmIChtYWMtPm1vZGUgPT0gV0lSRUxFU1NfTU9ERV9OXzVHKQorCQkJCXRjYl9kZXNjLT5yYXRyX2luZGV4ID0gUkFUUl9JTlhfV0lSRUxFU1NfTkc7CisJCQllbHNlIGlmIChtYWMtPm1vZGUgJiBXSVJFTEVTU19NT0RFX0cpCisJCQkJdGNiX2Rlc2MtPnJhdHJfaW5kZXggPSBSQVRSX0lOWF9XSVJFTEVTU19HQjsKKwkJCWVsc2UgaWYgKG1hYy0+bW9kZSAmIFdJUkVMRVNTX01PREVfQikKKwkJCQl0Y2JfZGVzYy0+cmF0cl9pbmRleCA9IFJBVFJfSU5YX1dJUkVMRVNTX0I7CisJCQllbHNlIGlmIChtYWMtPm1vZGUgJiBXSVJFTEVTU19NT0RFX0EpCisJCQkJdGNiX2Rlc2MtPnJhdHJfaW5kZXggPSBSQVRSX0lOWF9XSVJFTEVTU19HOworCQl9IGVsc2UgaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CisJCQltYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQkJaWYgKE5VTEwgIT0gc3RhKSB7CisJCQkJaWYgKHN0YS0+YWlkID4gMCkKKwkJCQkJdGNiX2Rlc2MtPm1hY19pZCA9IHN0YS0+YWlkICsgMTsKKwkJCQllbHNlCisJCQkJCXRjYl9kZXNjLT5tYWNfaWQgPSAxOworCQkJfSBlbHNlIHsKKwkJCQl0Y2JfZGVzYy0+bWFjX2lkID0gMDsKKwkJCX0KIAkJfQogCX0KIAogfQogCiBzdGF0aWMgdm9pZCBfcnRsX3F1ZXJ5X2JhbmR3aWR0aF9tb2RlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCQkJICAgICAgc3RydWN0IHJ0bF90Y2JfZGVzYyAqdGNiX2Rlc2MpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CiAKIAl0Y2JfZGVzYy0+cGFja2V0X2J3ID0gZmFsc2U7Ci0KLQlpZiAoIW1hYy0+YndfNDAgfHwgIW1hYy0+aHRfZW5hYmxlKQorCWlmICghc3RhKQogCQlyZXR1cm47Ci0KKwlpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkgICAgbWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJaWYgKCEoc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKSB8fAorCQkgICAgIShzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCkpCisJCQlyZXR1cm47CisJfSBlbHNlIGlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCWlmICghbWFjLT5id180MCB8fCAhKHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkpCisJCQlyZXR1cm47CisJfQogCWlmICh0Y2JfZGVzYy0+bXVsdGljYXN0IHx8IHRjYl9kZXNjLT5icm9hZGNhc3QpCiAJCXJldHVybjsKIApAQCAtNDg0LDIyICs2NjQsMjEgQEAKIAogdm9pZCBydGxfZ2V0X3RjYl9kZXNjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCisJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBydGxfdGNiX2Rlc2MgKnRjYl9kZXNjKQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlzdHJ1Y3QgcnRsX21hYyAqcnRsbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikoc2tiLT5kYXRhKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gcnRsX2dldF9oZHIoc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnR4cmF0ZTsKIAlfX2xlMTYgZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CiAKLQltZW1zZXQodGNiX2Rlc2MsIDAsIHNpemVvZihzdHJ1Y3QgcnRsX3RjYl9kZXNjKSk7CisJdHhyYXRlID0gaWVlZTgwMjExX2dldF90eF9yYXRlKGh3LCBpbmZvKTsKKwl0Y2JfZGVzYy0+aHdfcmF0ZSA9IHR4cmF0ZS0+aHdfdmFsdWU7CiAKIAlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpKSB7Ci0JCXR4cmF0ZSA9IGllZWU4MDIxMV9nZXRfdHhfcmF0ZShodywgaW5mbyk7Ci0JCXRjYl9kZXNjLT5od19yYXRlID0gdHhyYXRlLT5od192YWx1ZTsKLQogCQkvKgotCQkgKndlIHNldCBkYXRhIHJhdGUgUlRMX1JDX0NDS19SQVRFMU0KKwkJICp3ZSBzZXQgZGF0YSByYXRlIElOWCAwCiAJCSAqaW4gcnRsX3JjLmMgICBpZiBza2IgaXMgc3BlY2lhbCBkYXRhIG9yCiAJCSAqbWd0IHdoaWNoIG5lZWQgbG93IGRhdGEgcmF0ZS4KIAkJICovCkBAIC01MDgsMTIgKzY4NywxMSBAQAogCQkgKlNvIHRjYl9kZXNjLT5od19yYXRlIGlzIGp1c3QgdXNlZCBmb3IKIAkJICpzcGVjaWFsIGRhdGEgYW5kIG1ndCBmcmFtZXMKIAkJICovCi0JCWlmICh0Y2JfZGVzYy0+aHdfcmF0ZSA8IHJ0bHByaXYtPmNmZy0+bWFwc1tSVExfUkNfQ0NLX1JBVEUxMU1dKSB7CisJCWlmIChpbmZvLT5jb250cm9sLnJhdGVzWzBdLmlkeCA9PSAwICYmCisJCQkJaWVlZTgwMjExX2lzX251bGxmdW5jKGZjKSkgewogCQkJdGNiX2Rlc2MtPnVzZV9kcml2ZXJfcmF0ZSA9IHRydWU7Ci0JCQl0Y2JfZGVzYy0+cmF0cl9pbmRleCA9IDc7CisJCQl0Y2JfZGVzYy0+cmF0cl9pbmRleCA9IFJBVFJfSU5YX1dJUkVMRVNTX01DOwogCi0JCQl0Y2JfZGVzYy0+aHdfcmF0ZSA9Ci0JCQkgICAgcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9SQ19DQ0tfUkFURTFNXTsKIAkJCXRjYl9kZXNjLT5kaXNhYmxlX3JhdGVmYWxsYmFjayA9IDE7CiAJCX0gZWxzZSB7CiAJCQkvKgpAQCAtNTIzLDcgKzcwMSw3IEBACiAJCQkgKmFuZCBOIHJhdGUgd2lsbCBhbGwgYmUgY29udHJvbGxlZCBieSBGVwogCQkJICp3aGVuIHRjYl9kZXNjLT51c2VfZHJpdmVyX3JhdGUgPSBmYWxzZQogCQkJICovCi0JCQlpZiAocnRsbWFjLT5odF9lbmFibGUpIHsKKwkJCWlmIChzdGEgJiYgKHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkpIHsKIAkJCQl0Y2JfZGVzYy0+aHdfcmF0ZSA9IF9ydGxfZ2V0X2hpZ2hlc3Rfbl9yYXRlKGh3KTsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKHJ0bG1hYy0+bW9kZSA9PSBXSVJFTEVTU19NT0RFX0IpIHsKQEAgLTU0MSw0MyArNzE5LDI1IEBACiAJCWVsc2UgaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGllZWU4MDIxMV9nZXRfREEoaGRyKSkpCiAJCQl0Y2JfZGVzYy0+YnJvYWRjYXN0ID0gMTsKIAotCQlfcnRsX3R4cmF0ZV9zZWxlY3Rtb2RlKGh3LCB0Y2JfZGVzYyk7Ci0JCV9ydGxfcXVlcnlfYmFuZHdpZHRoX21vZGUoaHcsIHRjYl9kZXNjKTsKKwkJX3J0bF90eHJhdGVfc2VsZWN0bW9kZShodywgc3RhLCB0Y2JfZGVzYyk7CisJCV9ydGxfcXVlcnlfYmFuZHdpZHRoX21vZGUoaHcsIHN0YSwgdGNiX2Rlc2MpOwogCQlfcnRsX3F1cmV5X3Nob3J0cHJlYW1ibGVfbW9kZShodywgdGNiX2Rlc2MsIGluZm8pOwotCQlfcnRsX3F1ZXJ5X3Nob3J0Z2koaHcsIHRjYl9kZXNjLCBpbmZvKTsKKwkJX3J0bF9xdWVyeV9zaG9ydGdpKGh3LCBzdGEsIHRjYl9kZXNjLCBpbmZvKTsKIAkJX3J0bF9xdWVyeV9wcm90ZWN0aW9uX21vZGUoaHcsIHRjYl9kZXNjLCBpbmZvKTsKIAl9IGVsc2UgewogCQl0Y2JfZGVzYy0+dXNlX2RyaXZlcl9yYXRlID0gdHJ1ZTsKLQkJdGNiX2Rlc2MtPnJhdHJfaW5kZXggPSA3OworCQl0Y2JfZGVzYy0+cmF0cl9pbmRleCA9IFJBVFJfSU5YX1dJUkVMRVNTX01DOwogCQl0Y2JfZGVzYy0+ZGlzYWJsZV9yYXRlZmFsbGJhY2sgPSAxOwogCQl0Y2JfZGVzYy0+bWFjX2lkID0gMDsKLQotCQl0Y2JfZGVzYy0+aHdfcmF0ZSA9IHJ0bHByaXYtPmNmZy0+bWFwc1tSVExfUkNfQ0NLX1JBVEUxTV07CisJCXRjYl9kZXNjLT5wYWNrZXRfYncgPSBmYWxzZTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MKHJ0bF9nZXRfdGNiX2Rlc2MpOwogCi1ib29sIHJ0bF90eF9tZ210X3Byb2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKLQlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKShza2ItPmRhdGEpOwotCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKLQotCWlmIChpZWVlODAyMTFfaXNfYXV0aChmYykpIHsKLQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRU5ELCBEQkdfRE1FU0csICgiTUFDODAyMTFfTElOS0lOR1xuIikpOwotCQlydGxfaXBzX25pY19vbihodyk7Ci0KLQkJbWFjLT5saW5rX3N0YXRlID0gTUFDODAyMTFfTElOS0lORzsKLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBydGxfYWN0aW9uX3Byb2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IsIHU4IGlzX3R4KQogewogCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKShza2ItPmRhdGEpOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSBydGxfZ2V0X2hkcihza2IpOwogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlfX2xlMTYgZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CiAJdTggKmFjdCA9ICh1OCAqKSAoKCh1OCAqKSBza2ItPmRhdGEgKyBNQUM4MDIxMV8zQUREUl9MRU4pKTsKQEAgLTYyMiwyMiArNzgyLDIwIEBACiB1OCBydGxfaXNfc3BlY2lhbF9kYXRhKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBpc190eCkKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKShza2ItPmRhdGEpOwogCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOwotCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKKwlfX2xlMTYgZmMgPSBydGxfZ2V0X2ZjKHNrYik7CiAJdTE2IGV0aGVyX3R5cGU7CiAJdTggbWFjX2hkcl9sZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihza2IpOwogCWNvbnN0IHN0cnVjdCBpcGhkciAqaXA7CiAKIAlpZiAoIWllZWU4MDIxMV9pc19kYXRhKGZjKSkKLQkJZ290byBlbmQ7CisJCXJldHVybiBmYWxzZTsKIAotCWlmIChpZWVlODAyMTFfaXNfbnVsbGZ1bmMoZmMpKQotCQlyZXR1cm4gdHJ1ZTsKIAogCWlwID0gKHN0cnVjdCBpcGhkciAqKSgodTggKikgc2tiLT5kYXRhICsgbWFjX2hkcl9sZW4gKwogCQkJICAgICAgU05BUF9TSVpFICsgUFJPVE9DX1RZUEVfU0laRSk7CiAJZXRoZXJfdHlwZSA9ICoodTE2ICopICgodTggKikgc2tiLT5kYXRhICsgbWFjX2hkcl9sZW4gKyBTTkFQX1NJWkUpOworCS8qCWV0aGVyX3R5cGUgPSBudG9ocyhldGhlcl90eXBlKTsgKi8KIAogCWlmIChFVEhfUF9JUCA9PSBldGhlcl90eXBlKSB7CiAJCWlmIChJUFBST1RPX1VEUCA9PSBpcC0+cHJvdG9jb2wpIHsKQEAgLTY4Niw3ICs4NDQsNiBAQAogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKLWVuZDoKIAlyZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTY5NSw2MSArODUyLDkyIEBACiAgKiBmdW5jdGlvbnMgY2FsbGVkIGJ5IGNvcmUuYwogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQgcnRsX3R4X2FnZ19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgY29uc3QgdTggKnJhLCB1MTYgdGlkLCB1MTYgKnNzbikKK2ludCBydGxfdHhfYWdnX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkLCB1MTYgKnNzbikKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHJ0bF90aWRfZGF0YSAqdGlkX2RhdGE7CiAJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3N0YV9pbmZvICpzdGFfZW50cnkgPSBOVUxMOwogCi0JUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRU5ELCBEQkdfRE1FU0csCi0JCSAoIm9uIHJhID0gJXBNIHRpZCA9ICVkXG4iLCByYSwgdGlkKSk7CisJaWYgKHN0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICh1bmxpa2VseSh0aWQgPj0gTUFYX1RJRF9DT1VOVCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKG1hYy0+dGlkc1t0aWRdLmFnZy5hZ2dfc3RhdGUgIT0gUlRMX0FHR19PRkYpIHsKLQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19XQVJOSU5HLAotCQkJICgiU3RhcnQgQUdHIHdoZW4gc3RhdGUgaXMgbm90IFJUTF9BR0dfT0ZGICFcbiIpKTsKKwlzdGFfZW50cnkgPSAoc3RydWN0IHJ0bF9zdGFfaW5mbyAqKXN0YS0+ZHJ2X3ByaXY7CisJaWYgKCFzdGFfZW50cnkpCiAJCXJldHVybiAtRU5YSU87Ci0JfQotCi0JdGlkX2RhdGEgPSAmbWFjLT50aWRzW3RpZF07Ci0JKnNzbiA9IFNFUV9UT19TTih0aWRfZGF0YS0+c2VxX251bWJlcik7CisJdGlkX2RhdGEgPSAmc3RhX2VudHJ5LT50aWRzW3RpZF07CiAKIAlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFTkQsIERCR19ETUVTRywKLQkJICgiSFcgcXVldWUgaXMgZW1wdHkgdGlkOiVkXG4iLCB0aWQpKTsKLQl0aWRfZGF0YS0+YWdnLmFnZ19zdGF0ZSA9IFJUTF9BR0dfT047CisJCSAoIm9uIHJhID0gJXBNIHRpZCA9ICVkIHNlcTolZFxuIiwgc3RhLT5hZGRyLCB0aWQsCisJCSB0aWRfZGF0YS0+c2VxX251bWJlcikpOwogCi0JaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUobWFjLT52aWYsIHJhLCB0aWQpOworCSpzc24gPSB0aWRfZGF0YS0+c2VxX251bWJlcjsKKwl0aWRfZGF0YS0+YWdnLmFnZ19zdGF0ZSA9IFJUTF9BR0dfU1RBUlQ7CisKKwlpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZShtYWMtPnZpZiwgc3RhLT5hZGRyLCB0aWQpOwogCiAJcmV0dXJuIDA7CiB9CiAKLWludCBydGxfdHhfYWdnX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGNvbnN0IHU4ICogcmEsIHUxNiB0aWQpCitpbnQgcnRsX3R4X2FnZ19zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKQogewotCWludCBzc24gPSAtMTsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKIAlzdHJ1Y3QgcnRsX3RpZF9kYXRhICp0aWRfZGF0YTsKKwlzdHJ1Y3QgcnRsX3N0YV9pbmZvICpzdGFfZW50cnkgPSBOVUxMOwogCi0JaWYgKCFyYSkgeworCWlmIChzdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXN0YS0+YWRkcikgewogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLCAoInJhID0gTlVMTFxuIikpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFTkQsIERCR19ETUVTRywKKwkJICgib24gcmEgPSAlcE0gdGlkID0gJWRcbiIsIHN0YS0+YWRkciwgdGlkKSk7CisKIAlpZiAodW5saWtlbHkodGlkID49IE1BWF9USURfQ09VTlQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChtYWMtPnRpZHNbdGlkXS5hZ2cuYWdnX3N0YXRlICE9IFJUTF9BR0dfT04pCi0JCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfV0FSTklORywKLQkJCSAoIlN0b3BwaW5nIEFHRyB3aGlsZSBzdGF0ZSBub3QgT04gb3Igc3RhcnRpbmdcbiIpKTsKKwlzdGFfZW50cnkgPSAoc3RydWN0IHJ0bF9zdGFfaW5mbyAqKXN0YS0+ZHJ2X3ByaXY7CisJdGlkX2RhdGEgPSAmc3RhX2VudHJ5LT50aWRzW3RpZF07CisJc3RhX2VudHJ5LT50aWRzW3RpZF0uYWdnLmFnZ19zdGF0ZSA9IFJUTF9BR0dfU1RPUDsKIAotCXRpZF9kYXRhID0gJm1hYy0+dGlkc1t0aWRdOwotCXNzbiA9ICh0aWRfZGF0YS0+c2VxX251bWJlciAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNDsKKwlpZWVlODAyMTFfc3RvcF90eF9iYV9jYl9pcnFzYWZlKG1hYy0+dmlmLCBzdGEtPmFkZHIsIHRpZCk7CiAKLQltYWMtPnRpZHNbdGlkXS5hZ2cuYWdnX3N0YXRlID0gUlRMX0FHR19PRkY7CisJcmV0dXJuIDA7Cit9CiAKLQlpZWVlODAyMTFfc3RvcF90eF9iYV9jYl9pcnFzYWZlKG1hYy0+dmlmLCByYSwgdGlkKTsKK2ludCBydGxfdHhfYWdnX29wZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfdGlkX2RhdGEgKnRpZF9kYXRhOworCXN0cnVjdCBydGxfc3RhX2luZm8gKnN0YV9lbnRyeSA9IE5VTEw7CisKKwlpZiAoc3RhID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFzdGEtPmFkZHIpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywgKCJyYSA9IE5VTExcbiIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRU5ELCBEQkdfRE1FU0csCisJCSAoIm9uIHJhID0gJXBNIHRpZCA9ICVkXG4iLCBzdGEtPmFkZHIsIHRpZCkpOworCisJaWYgKHVubGlrZWx5KHRpZCA+PSBNQVhfVElEX0NPVU5UKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdGFfZW50cnkgPSAoc3RydWN0IHJ0bF9zdGFfaW5mbyAqKXN0YS0+ZHJ2X3ByaXY7CisJdGlkX2RhdGEgPSAmc3RhX2VudHJ5LT50aWRzW3RpZF07CisJc3RhX2VudHJ5LT50aWRzW3RpZF0uYWdnLmFnZ19zdGF0ZSA9IFJUTF9BR0dfT1BFUkFUSU9OQUw7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTc2OCwxOCArOTU2LDE2IEBACiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CiAJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKLQogCWJvb2wgYnVzeXRyYWZmaWMgPSBmYWxzZTsKIAlib29sIGhpZ2hlcl9idXN5dHJhZmZpYyA9IGZhbHNlOwogCWJvb2wgaGlnaGVyX2J1c3lyeHRyYWZmaWMgPSBmYWxzZTsKLQlib29sIGhpZ2hlcl9idXN5dHh0cmFmZmljID0gZmFsc2U7Ci0KLQl1OCBpZHggPSAwOworCXU4IGlkeCwgdGlkOwogCXUzMiByeF9jbnRfaW5wNGVyaW9kID0gMDsKIAl1MzIgdHhfY250X2lucDRlcmlvZCA9IDA7CiAJdTMyIGF2ZXJfcnhfY250X2lucGVyaW9kID0gMDsKIAl1MzIgYXZlcl90eF9jbnRfaW5wZXJpb2QgPSAwOwotCisJdTMyIGF2ZXJfdGlkdHhfaW5wZXJpb2RbTUFYX1RJRF9DT1VOVF0gPSB7MH07CisJdTMyIHRpZHR4X2lucDRlcmlvZFtNQVhfVElEX0NPVU5UXSA9IHswfTsKIAlib29sIGVudGVyX3BzID0gZmFsc2U7CiAKIAlpZiAoaXNfaGFsX3N0b3AocnRsaGFsKSkKQEAgLTc5Myw5ICs5NzksNiBAQAogCQltYWMtPmNudF9hZnRlcl9saW5rZWQgPSAwOwogCX0KIAotCS8qIDwyPiBETSAqLwotCXJ0bHByaXYtPmNmZy0+b3BzLT5kbV93YXRjaGRvZyhodyk7Ci0KIAkvKgogCSAqPDM+IHRvIGNoZWNrIGlmIHRyYWZmaWMgYnVzeSwgaWYKIAkgKiBidXN5dHJhZmZpYyB3ZSBkb24ndCBjaGFuZ2UgY2hhbm5lbApAQCAtODM0LDggKzEwMTcsMjcgQEAKIAkJCS8qIEV4dHJlbWVseSBoaWdoIFJ4IGRhdGEuICovCiAJCQlpZiAoYXZlcl9yeF9jbnRfaW5wZXJpb2QgPiA1MDAwKQogCQkJCWhpZ2hlcl9idXN5cnh0cmFmZmljID0gdHJ1ZTsKKwkJfQorCisJCS8qIGNoZWNrIGV2ZXJ5IHRpZCdzIHR4IHRyYWZmaWMgKi8KKwkJZm9yICh0aWQgPSAwOyB0aWQgPD0gNzsgdGlkKyspIHsKKwkJCWZvciAoaWR4ID0gMDsgaWR4IDw9IDI7IGlkeCsrKQorCQkJCXJ0bHByaXYtPmxpbmtfaW5mby50aWR0eF9pbjRwZXJpb2RbdGlkXVtpZHhdID0KKwkJCQkgIHJ0bHByaXYtPmxpbmtfaW5mby50aWR0eF9pbjRwZXJpb2RbdGlkXQorCQkJCSAgW2lkeCArIDFdOworCQkJcnRscHJpdi0+bGlua19pbmZvLnRpZHR4X2luNHBlcmlvZFt0aWRdWzNdID0KKwkJCQlydGxwcml2LT5saW5rX2luZm8udGlkdHhfaW5wZXJpb2RbdGlkXTsKKworCQkJZm9yIChpZHggPSAwOyBpZHggPD0gMzsgaWR4KyspCisJCQkJdGlkdHhfaW5wNGVyaW9kW3RpZF0gKz0KKwkJCQkgIHJ0bHByaXYtPmxpbmtfaW5mby50aWR0eF9pbjRwZXJpb2RbdGlkXVtpZHhdOworCQkJYXZlcl90aWR0eF9pbnBlcmlvZFt0aWRdID0gdGlkdHhfaW5wNGVyaW9kW3RpZF0gLyA0OworCQkJaWYgKGF2ZXJfdGlkdHhfaW5wZXJpb2RbdGlkXSA+IDUwMDApCisJCQkJcnRscHJpdi0+bGlua19pbmZvLmhpZ2hlcl9idXN5dHh0cmFmZmljW3RpZF0gPQorCQkJCQkJICAgdHJ1ZTsKIAkJCWVsc2UKLQkJCQloaWdoZXJfYnVzeXR4dHJhZmZpYyA9IGZhbHNlOworCQkJCXJ0bHByaXYtPmxpbmtfaW5mby5oaWdoZXJfYnVzeXR4dHJhZmZpY1t0aWRdID0KKwkJCQkJCSAgIGZhbHNlOwogCQl9CiAKIAkJaWYgKCgocnRscHJpdi0+bGlua19pbmZvLm51bV9yeF9pbnBlcmlvZCArCkBAIC04NTQsMTEgKzEwNTYsMTUgQEAKIAogCXJ0bHByaXYtPmxpbmtfaW5mby5udW1fcnhfaW5wZXJpb2QgPSAwOwogCXJ0bHByaXYtPmxpbmtfaW5mby5udW1fdHhfaW5wZXJpb2QgPSAwOworCWZvciAodGlkID0gMDsgdGlkIDw9IDc7IHRpZCsrKQorCQlydGxwcml2LT5saW5rX2luZm8udGlkdHhfaW5wZXJpb2RbdGlkXSA9IDA7CiAKIAlydGxwcml2LT5saW5rX2luZm8uYnVzeXRyYWZmaWMgPSBidXN5dHJhZmZpYzsKIAlydGxwcml2LT5saW5rX2luZm8uaGlnaGVyX2J1c3l0cmFmZmljID0gaGlnaGVyX2J1c3l0cmFmZmljOwogCXJ0bHByaXYtPmxpbmtfaW5mby5oaWdoZXJfYnVzeXJ4dHJhZmZpYyA9IGhpZ2hlcl9idXN5cnh0cmFmZmljOwogCisJLyogPDM+IERNICovCisJcnRscHJpdi0+Y2ZnLT5vcHMtPmRtX3dhdGNoZG9nKGh3KTsKIH0KIAogdm9pZCBydGxfd2F0Y2hfZG9nX3RpbWVyX2NhbGxiYWNrKHVuc2lnbmVkIGxvbmcgZGF0YSkKQEAgLTg3NSw2ICsxMDgxLDI2OCBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgorICogZnJhbWUgcHJvY2VzcyBmdW5jdGlvbnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTggKnJ0bF9maW5kX2llKHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuLCB1OCBpZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQgPSAodm9pZCAqKWRhdGE7CisJdTggKnBvcywgKmVuZDsKKworCXBvcyA9ICh1OCAqKW1nbXQtPnUuYmVhY29uLnZhcmlhYmxlOworCWVuZCA9IGRhdGEgKyBsZW47CisJd2hpbGUgKHBvcyA8IGVuZCkgeworCQlpZiAocG9zICsgMiArIHBvc1sxXSA+IGVuZCkKKwkJCXJldHVybiBOVUxMOworCisJCWlmIChwb3NbMF0gPT0gaWUpCisJCQlyZXR1cm4gcG9zOworCisJCXBvcyArPSAyICsgcG9zWzFdOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyogd2hlbiB3ZSB1c2UgMiByeCBhbnRzIHdlIHNlbmQgSUVFRTgwMjExX1NNUFNfT0ZGICovCisvKiB3aGVuIHdlIHVzZSAxIHJ4IGFudCB3ZSBzZW5kIElFRUU4MDIxMV9TTVBTX1NUQVRJQyAqLworc3RhdGljIHN0cnVjdCBza19idWZmICpydGxfbWFrZV9zbXBzX2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJZW51bSBpZWVlODAyMTFfc21wc19tb2RlIHNtcHMsIHU4ICpkYSwgdTggKmJzc2lkKQoreworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKmFjdGlvbl9mcmFtZTsKKworCS8qIDI3ID0gaGVhZGVyICsgY2F0ZWdvcnkgKyBhY3Rpb24gKyBzbXBzIG1vZGUgKi8KKwlza2IgPSBkZXZfYWxsb2Nfc2tiKDI3ICsgaHctPmV4dHJhX3R4X2hlYWRyb29tKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIE5VTEw7CisKKwlza2JfcmVzZXJ2ZShza2IsIGh3LT5leHRyYV90eF9oZWFkcm9vbSk7CisJYWN0aW9uX2ZyYW1lID0gKHZvaWQgKilza2JfcHV0KHNrYiwgMjcpOworCW1lbXNldChhY3Rpb25fZnJhbWUsIDAsIDI3KTsKKwltZW1jcHkoYWN0aW9uX2ZyYW1lLT5kYSwgZGEsIEVUSF9BTEVOKTsKKwltZW1jcHkoYWN0aW9uX2ZyYW1lLT5zYSwgcnRsZWZ1c2UtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KGFjdGlvbl9mcmFtZS0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7CisJYWN0aW9uX2ZyYW1lLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAorCQkJCQkJICBJRUVFODAyMTFfU1RZUEVfQUNUSU9OKTsKKwlhY3Rpb25fZnJhbWUtPnUuYWN0aW9uLmNhdGVnb3J5ID0gV0xBTl9DQVRFR09SWV9IVDsKKwlhY3Rpb25fZnJhbWUtPnUuYWN0aW9uLnUuaHRfc21wcy5hY3Rpb24gPSBXTEFOX0hUX0FDVElPTl9TTVBTOworCXN3aXRjaCAoc21wcykgeworCWNhc2UgSUVFRTgwMjExX1NNUFNfQVVUT01BVElDOi8qIDAgKi8KKwljYXNlIElFRUU4MDIxMV9TTVBTX05VTV9NT0RFUzovKiA0ICovCisJCVdBUk5fT04oMSk7CisJY2FzZSBJRUVFODAyMTFfU01QU19PRkY6LyogMSAqLyAvKk1JTU9fUFNfTk9MSU1JVCovCisJCWFjdGlvbl9mcmFtZS0+dS5hY3Rpb24udS5odF9zbXBzLnNtcHNfY29udHJvbCA9CisJCQkJV0xBTl9IVF9TTVBTX0NPTlRST0xfRElTQUJMRUQ7LyogMCAqLworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9TTVBTX1NUQVRJQzovKiAyICovIC8qTUlNT19QU19TVEFUSUMqLworCQlhY3Rpb25fZnJhbWUtPnUuYWN0aW9uLnUuaHRfc21wcy5zbXBzX2NvbnRyb2wgPQorCQkJCVdMQU5fSFRfU01QU19DT05UUk9MX1NUQVRJQzsvKiAxICovCisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX1NNUFNfRFlOQU1JQzovKiAzICovIC8qTUlNT19QU19EWU5BTUlDKi8KKwkJYWN0aW9uX2ZyYW1lLT51LmFjdGlvbi51Lmh0X3NtcHMuc21wc19jb250cm9sID0KKwkJCQlXTEFOX0hUX1NNUFNfQ09OVFJPTF9EWU5BTUlDOy8qIDMgKi8KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHNrYjsKK30KKworaW50IHJ0bF9zZW5kX3NtcHNfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1OCAqZGEsIHU4ICpic3NpZCwKKwkJZW51bSBpZWVlODAyMTFfc21wc19tb2RlIHNtcHMpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ0bF9tYWtlX3NtcHNfYWN0aW9uKGh3LCBzbXBzLCBkYSwgYnNzaWQpOworCXN0cnVjdCBydGxfdGNiX2Rlc2MgdGNiX2Rlc2M7CisJbWVtc2V0KCZ0Y2JfZGVzYywgMCwgc2l6ZW9mKHN0cnVjdCBydGxfdGNiX2Rlc2MpKTsKKworCWlmIChydGxwcml2LT5tYWM4MDIxMS5hY3Rfc2Nhbm5pbmcpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwlpZiAoIXN0YSkKKwkJZ290byBlcnJfZnJlZTsKKworCWlmICh1bmxpa2VseShpc19oYWxfc3RvcChydGxoYWwpIHx8IHBwc2MtPnJmcHdyX3N0YXRlICE9IEVSRk9OKSkKKwkJZ290byBlcnJfZnJlZTsKKworCWlmICghdGVzdF9iaXQoUlRMX1NUQVRVU19JTlRFUkZBQ0VfU1RBUlQsICZydGxwcml2LT5zdGF0dXMpKQorCQlnb3RvIGVycl9mcmVlOworCisJLyogdGhpcyBpcyBhIHR5cGUgPSBtZ210ICogc3R5cGUgPSBhY3Rpb24gZnJhbWUgKi8KKwlpZiAoc2tiKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwkJc3RydWN0IHJ0bF9zdGFfaW5mbyAqc3RhX2VudHJ5ID0KKwkJCShzdHJ1Y3QgcnRsX3N0YV9pbmZvICopIHN0YS0+ZHJ2X3ByaXY7CisJCXN0YV9lbnRyeS0+bWltb19wcyA9IHNtcHM7CisJCXJ0bHByaXYtPmNmZy0+b3BzLT51cGRhdGVfcmF0ZV90YmwoaHcsIHN0YSwgMCk7CisKKwkJaW5mby0+Y29udHJvbC5yYXRlc1swXS5pZHggPSAwOworCQlpbmZvLT5jb250cm9sLnN0YSA9IHN0YTsKKwkJaW5mby0+YmFuZCA9IGh3LT5jb25mLmNoYW5uZWwtPmJhbmQ7CisJCXJ0bHByaXYtPmludGZfb3BzLT5hZGFwdGVyX3R4KGh3LCBza2IsICZ0Y2JfZGVzYyk7CisJfQorZXJyX2ZyZWU6CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBJT1QgZnVuY3Rpb25zCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBib29sIHJ0bF9jaGtfdmVuZG9yX291aXN1YihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJc3RydWN0IG9jdGV0X3N0cmluZyB2ZW5kb3JfaWUpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCWJvb2wgbWF0Y2hlZCA9IGZhbHNlOworCXN0YXRpYyB1OCBhdGhjYXBfMVtdID0geyAweDAwLCAweDAzLCAweDdGIH07CisJc3RhdGljIHU4IGF0aGNhcF8yW10gPSB7IDB4MDAsIDB4MTMsIDB4NzQgfTsKKwlzdGF0aWMgdTggYnJvYWRjYXBfMVtdID0geyAweDAwLCAweDEwLCAweDE4IH07CisJc3RhdGljIHU4IGJyb2FkY2FwXzJbXSA9IHsgMHgwMCwgMHgwYSwgMHhmNyB9OworCXN0YXRpYyB1OCBicm9hZGNhcF8zW10gPSB7IDB4MDAsIDB4MDUsIDB4YjUgfTsKKwlzdGF0aWMgdTggcmFjYXBbXSA9IHsgMHgwMCwgMHgwYywgMHg0MyB9OworCXN0YXRpYyB1OCBjaXNjb2NhcFtdID0geyAweDAwLCAweDQwLCAweDk2IH07CisJc3RhdGljIHU4IG1hcnZjYXBbXSA9IHsgMHgwMCwgMHg1MCwgMHg0MyB9OworCisJaWYgKG1lbWNtcCh2ZW5kb3JfaWUub2N0ZXQsIGF0aGNhcF8xLCAzKSA9PSAwIHx8CisJCW1lbWNtcCh2ZW5kb3JfaWUub2N0ZXQsIGF0aGNhcF8yLCAzKSA9PSAwKSB7CisJCXJ0bHByaXYtPm1hYzgwMjExLnZlbmRvciA9IFBFRVJfQVRIOworCQltYXRjaGVkID0gdHJ1ZTsKKwl9IGVsc2UgaWYgKG1lbWNtcCh2ZW5kb3JfaWUub2N0ZXQsIGJyb2FkY2FwXzEsIDMpID09IDAgfHwKKwkJbWVtY21wKHZlbmRvcl9pZS5vY3RldCwgYnJvYWRjYXBfMiwgMykgPT0gMCB8fAorCQltZW1jbXAodmVuZG9yX2llLm9jdGV0LCBicm9hZGNhcF8zLCAzKSA9PSAwKSB7CisJCXJ0bHByaXYtPm1hYzgwMjExLnZlbmRvciA9IFBFRVJfQlJPQUQ7CisJCW1hdGNoZWQgPSB0cnVlOworCX0gZWxzZSBpZiAobWVtY21wKHZlbmRvcl9pZS5vY3RldCwgcmFjYXAsIDMpID09IDApIHsKKwkJcnRscHJpdi0+bWFjODAyMTEudmVuZG9yID0gUEVFUl9SQUw7CisJCW1hdGNoZWQgPSB0cnVlOworCX0gZWxzZSBpZiAobWVtY21wKHZlbmRvcl9pZS5vY3RldCwgY2lzY29jYXAsIDMpID09IDApIHsKKwkJcnRscHJpdi0+bWFjODAyMTEudmVuZG9yID0gUEVFUl9DSVNDTzsKKwkJbWF0Y2hlZCA9IHRydWU7CisJfSBlbHNlIGlmIChtZW1jbXAodmVuZG9yX2llLm9jdGV0LCBtYXJ2Y2FwLCAzKSA9PSAwKSB7CisJCXJ0bHByaXYtPm1hYzgwMjExLnZlbmRvciA9IFBFRVJfTUFSVjsKKwkJbWF0Y2hlZCA9IHRydWU7CisJfQorCisJcmV0dXJuIG1hdGNoZWQ7Cit9CisKK3N0YXRpYyBib29sIHJ0bF9maW5kXzIyMV9pZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKmRhdGEsCisJCXVuc2lnbmVkIGludCBsZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHZvaWQgKilkYXRhOworCXN0cnVjdCBvY3RldF9zdHJpbmcgdmVuZG9yX2llOworCXU4ICpwb3MsICplbmQ7CisKKwlwb3MgPSAodTggKiltZ210LT51LmJlYWNvbi52YXJpYWJsZTsKKwllbmQgPSBkYXRhICsgbGVuOworCXdoaWxlIChwb3MgPCBlbmQpIHsKKwkJaWYgKHBvc1swXSA9PSAyMjEpIHsKKwkJCXZlbmRvcl9pZS5sZW5ndGggPSBwb3NbMV07CisJCQl2ZW5kb3JfaWUub2N0ZXQgPSAmcG9zWzJdOworCQkJaWYgKHJ0bF9jaGtfdmVuZG9yX291aXN1YihodywgdmVuZG9yX2llKSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJCWlmIChwb3MgKyAyICsgcG9zWzFdID4gZW5kKQorCQkJcmV0dXJuIGZhbHNlOworCisJCXBvcyArPSAyICsgcG9zWzFdOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgcnRsX3JlY29nbml6ZV9wZWVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilkYXRhOworCXUzMiB2ZW5kb3IgPSBQRUVSX1VOS05PV047CisKKwlzdGF0aWMgdTggYXAzXzFbM10gPSB7IDB4MDAsIDB4MTQsIDB4YmYgfTsKKwlzdGF0aWMgdTggYXAzXzJbM10gPSB7IDB4MDAsIDB4MWEsIDB4NzAgfTsKKwlzdGF0aWMgdTggYXAzXzNbM10gPSB7IDB4MDAsIDB4MWQsIDB4N2UgfTsKKwlzdGF0aWMgdTggYXA0XzFbM10gPSB7IDB4MDAsIDB4OTAsIDB4Y2MgfTsKKwlzdGF0aWMgdTggYXA0XzJbM10gPSB7IDB4MDAsIDB4MGUsIDB4MmUgfTsKKwlzdGF0aWMgdTggYXA0XzNbM10gPSB7IDB4MDAsIDB4MTgsIDB4MDIgfTsKKwlzdGF0aWMgdTggYXA0XzRbM10gPSB7IDB4MDAsIDB4MTcsIDB4M2YgfTsKKwlzdGF0aWMgdTggYXA0XzVbM10gPSB7IDB4MDAsIDB4MWMsIDB4ZGYgfTsKKwlzdGF0aWMgdTggYXA1XzFbM10gPSB7IDB4MDAsIDB4MWMsIDB4ZjAgfTsKKwlzdGF0aWMgdTggYXA1XzJbM10gPSB7IDB4MDAsIDB4MjEsIDB4OTEgfTsKKwlzdGF0aWMgdTggYXA1XzNbM10gPSB7IDB4MDAsIDB4MjQsIDB4MDEgfTsKKwlzdGF0aWMgdTggYXA1XzRbM10gPSB7IDB4MDAsIDB4MTUsIDB4ZTkgfTsKKwlzdGF0aWMgdTggYXA1XzVbM10gPSB7IDB4MDAsIDB4MTcsIDB4OUEgfTsKKwlzdGF0aWMgdTggYXA1XzZbM10gPSB7IDB4MDAsIDB4MTgsIDB4RTcgfTsKKwlzdGF0aWMgdTggYXA2XzFbM10gPSB7IDB4MDAsIDB4MTcsIDB4OTQgfTsKKwlzdGF0aWMgdTggYXA3XzFbM10gPSB7IDB4MDAsIDB4MTQsIDB4YTQgfTsKKworCWlmIChtYWMtPm9wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQlyZXR1cm47CisKKwlpZiAobWFjLT5saW5rX3N0YXRlID09IE1BQzgwMjExX05PTElOSykgeworCQltYWMtPnZlbmRvciA9IFBFRVJfVU5LTk9XTjsKKwkJcmV0dXJuOworCX0KKworCWlmIChtYWMtPmNudF9hZnRlcl9saW5rZWQgPiAyKQorCQlyZXR1cm47CisKKwkvKiBjaGVjayBpZiB0aGlzIHJlYWxseSBpcyBhIGJlYWNvbiAqLworCWlmICghaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpKQorCQlyZXR1cm47CisKKwkvKiBtaW4uIGJlYWNvbiBsZW5ndGggKyBGQ1NfTEVOICovCisJaWYgKGxlbiA8PSA0MCArIEZDU19MRU4pCisJCXJldHVybjsKKworCS8qIGFuZCBvbmx5IGJlYWNvbnMgZnJvbSB0aGUgYXNzb2NpYXRlZCBCU1NJRCwgcGxlYXNlICovCisJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihoZHItPmFkZHIzLCBydGxwcml2LT5tYWM4MDIxMS5ic3NpZCkpCisJCXJldHVybjsKKworCWlmIChydGxfZmluZF8yMjFfaWUoaHcsIGRhdGEsIGxlbikpCisJCXZlbmRvciA9IG1hYy0+dmVuZG9yOworCisJaWYgKChtZW1jbXAobWFjLT5ic3NpZCwgYXA1XzEsIDMpID09IDApIHx8CisJCShtZW1jbXAobWFjLT5ic3NpZCwgYXA1XzIsIDMpID09IDApIHx8CisJCShtZW1jbXAobWFjLT5ic3NpZCwgYXA1XzMsIDMpID09IDApIHx8CisJCShtZW1jbXAobWFjLT5ic3NpZCwgYXA1XzQsIDMpID09IDApIHx8CisJCShtZW1jbXAobWFjLT5ic3NpZCwgYXA1XzUsIDMpID09IDApIHx8CisJCShtZW1jbXAobWFjLT5ic3NpZCwgYXA1XzYsIDMpID09IDApIHx8CisJCXZlbmRvciA9PSBQRUVSX0FUSCkgeworCQl2ZW5kb3IgPSBQRUVSX0FUSDsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NQUM4MDIxMSwgREJHX0xPVUQsICgiPT5hdGggZmluZFxuIikpOworCX0gZWxzZSBpZiAoKG1lbWNtcChtYWMtPmJzc2lkLCBhcDRfNCwgMykgPT0gMCkgfHwKKwkJKG1lbWNtcChtYWMtPmJzc2lkLCBhcDRfNSwgMykgPT0gMCkgfHwKKwkJKG1lbWNtcChtYWMtPmJzc2lkLCBhcDRfMSwgMykgPT0gMCkgfHwKKwkJKG1lbWNtcChtYWMtPmJzc2lkLCBhcDRfMiwgMykgPT0gMCkgfHwKKwkJKG1lbWNtcChtYWMtPmJzc2lkLCBhcDRfMywgMykgPT0gMCkgfHwKKwkJdmVuZG9yID09IFBFRVJfUkFMKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTUFDODAyMTEsIERCR19MT1VELCAoIj0+cmFsIGZpbmRuXG4iKSk7CisJCXZlbmRvciA9IFBFRVJfUkFMOworCX0gZWxzZSBpZiAobWVtY21wKG1hYy0+YnNzaWQsIGFwNl8xLCAzKSA9PSAwIHx8CisJCXZlbmRvciA9PSBQRUVSX0NJU0NPKSB7CisJCXZlbmRvciA9IFBFRVJfQ0lTQ087CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTUFDODAyMTEsIERCR19MT1VELCAoIj0+Y2lzY28gZmluZFxuIikpOworCX0gZWxzZSBpZiAoKG1lbWNtcChtYWMtPmJzc2lkLCBhcDNfMSwgMykgPT0gMCkgfHwKKwkJKG1lbWNtcChtYWMtPmJzc2lkLCBhcDNfMiwgMykgPT0gMCkgfHwKKwkJKG1lbWNtcChtYWMtPmJzc2lkLCBhcDNfMywgMykgPT0gMCkgfHwKKwkJdmVuZG9yID09IFBFRVJfQlJPQUQpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NQUM4MDIxMSwgREJHX0xPVUQsICgiPT5icm9hZCBmaW5kXG4iKSk7CisJCXZlbmRvciA9IFBFRVJfQlJPQUQ7CisJfSBlbHNlIGlmIChtZW1jbXAobWFjLT5ic3NpZCwgYXA3XzEsIDMpID09IDAgfHwKKwkJdmVuZG9yID09IFBFRVJfTUFSVikgeworCQl2ZW5kb3IgPSBQRUVSX01BUlY7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTUFDODAyMTEsIERCR19MT1VELCAoIj0+bWFydiBmaW5kXG4iKSk7CisJfQorCisJbWFjLT52ZW5kb3IgPSB2ZW5kb3I7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCiAgKiBzeXNmcyBmdW5jdGlvbnMKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtOTQwLDEyICsxNDA4LDEzIEBACiAJaWYgKHJ0bF9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIoKSkKIAkJcHJpbnRrKEtFUk5fRVJSICJydGx3aWZpOiBVbmFibGUgdG8gcmVnaXN0ZXIgcnRsX3JjLCIKIAkJICAgICAgICJ1c2UgZGVmYXVsdCBSQyAhIVxuIik7CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHJ0bF9jb3JlX21vZHVsZV9leGl0KHZvaWQpCiB7Ci0JIC8qUkMqLworCS8qUkMqLwogCXJ0bF9yYXRlX2NvbnRyb2xfdW5yZWdpc3RlcigpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2Jhc2UuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvYmFzZS5oCmluZGV4IDA0MzA0NTMuLmE5MWYzZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvYmFzZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvYmFzZS5oCkBAIC0yNCwxMyArMjQsMjYgQEAKICAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCiAgKgogICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2lmbmRlZiBfX1JUTF9CQVNFX0hfXwogI2RlZmluZSBfX1JUTF9CQVNFX0hfXwogCitlbnVtIGFwX3BlZXIgeworCVBFRVJfVU5LTk9XTiA9IDAsCisJUEVFUl9SVEwgPSAxLAorCVBFRVJfUlRMXzkyU0UgPSAyLAorCVBFRVJfQlJPQUQgPSAzLAorCVBFRVJfUkFMID0gNCwKKwlQRUVSX0FUSCA9IDUsCisJUEVFUl9DSVNDTyA9IDYsCisJUEVFUl9NQVJWID0gNywKKwlQRUVSX0FJUkdPID0gOSwKKwlQRUVSX01BWCA9IDEwLAorfSA7CisKICNkZWZpbmUgUlRMX0RVTU1ZX09GRlNFVAkwCi0jZGVmaW5lIFJUTF9SWF9ERVNDX1NJWkUJMjQKICNkZWZpbmUgUlRMX0RVTU1ZX1VOSVQJCTgKICNkZWZpbmUgUlRMX1RYX0RVTU1ZX1NJWkUJKFJUTF9EVU1NWV9PRkZTRVQgKiBSVExfRFVNTVlfVU5JVCkKICNkZWZpbmUgUlRMX1RYX0RFU0NfU0laRQkzMgpAQCAtNTMsNiArNjYsMTQgQEAKICNkZWZpbmUgRlJBTUVfT0ZGU0VUX1NFUVVFTkNFCQkyMgogI2RlZmluZSBGUkFNRV9PRkZTRVRfQUREUkVTUzQJCTI0CiAKKyNkZWZpbmUgU0VUXzgwMjExX0hEUl9GUkFNRV9DT05UUk9MKF9oZHIsIF92YWwpCQlcCisJV1JJVEVFRjJCWVRFKF9oZHIsIF92YWwpCisjZGVmaW5lIFNFVF84MDIxMV9IRFJfVFlQRV9BTkRfU1VCVFlQRShfaGRyLCBfdmFsKQlcCisJV1JJVEVFRjFCWVRFKF9oZHIsIF92YWwpCisjZGVmaW5lIFNFVF84MDIxMV9IRFJfUFdSX01HTlQoX2hkciwgX3ZhbCkJCVwKKwlTRVRfQklUU19UT19MRV8yQllURShfaGRyLCAxMiwgMSwgX3ZhbCkKKyNkZWZpbmUgU0VUXzgwMjExX0hEUl9UT19EUyhfaGRyLCBfdmFsKQkJCVwKKwlTRVRfQklUU19UT19MRV8yQllURShfaGRyLCA4LCAxLCBfdmFsKQogCiAjZGVmaW5lIFNFVF84MDIxMV9QU19QT0xMX0FJRChfaGRyLCBfdmFsKQkJXAogCSgqKHUxNiAqKSgodTggKikoX2hkcikgKyAyKSA9IGxlMTZfdG9fY3B1KF92YWwpKQpAQCAtNjQsMTEgKzg1LDI3IEBACiAjZGVmaW5lIFNFVF84MDIxMV9IRFJfRFVSQVRJT04oX2hkciwgX3ZhbCkJXAogCSgqKHUxNiAqKSgodTggKikoX2hkcikgKyBGUkFNRV9PRkZTRVRfRFVSQVRJT04pID0gbGUxNl90b19jcHUoX3ZhbCkpCiAjZGVmaW5lIFNFVF84MDIxMV9IRFJfQUREUkVTUzEoX2hkciwgX3ZhbCkJXAotCW1lbWNweSgodTggKikoX2hkcikrRlJBTUVfT0ZGU0VUX0FERFJFU1MxLCAodTgqKShfdmFsKSwgRVRIX0FMRU4pCisJQ1BfTUFDQUREUigodTggKikoX2hkcikrRlJBTUVfT0ZGU0VUX0FERFJFU1MxLCAodTggKikoX3ZhbCkpCiAjZGVmaW5lIFNFVF84MDIxMV9IRFJfQUREUkVTUzIoX2hkciwgX3ZhbCkJXAotCW1lbWNweSgodTggKikoX2hkcikgKyBGUkFNRV9PRkZTRVRfQUREUkVTUzIsICh1OCAqKShfdmFsKSwgRVRIX0FMRU4pCisJQ1BfTUFDQUREUigodTggKikoX2hkcikrRlJBTUVfT0ZGU0VUX0FERFJFU1MyLCAodTggKikoX3ZhbCkpCiAjZGVmaW5lIFNFVF84MDIxMV9IRFJfQUREUkVTUzMoX2hkciwgX3ZhbCkJXAotCW1lbWNweSgodTggKikoX2hkcikrRlJBTUVfT0ZGU0VUX0FERFJFU1MzLCAodTggKikoX3ZhbCksIEVUSF9BTEVOKQorCUNQX01BQ0FERFIoKHU4ICopKF9oZHIpK0ZSQU1FX09GRlNFVF9BRERSRVNTMywgKHU4ICopKF92YWwpKQorI2RlZmluZSBTRVRfODAyMTFfSERSX0ZSQUdNRU5UX1NFUVVFTkNFKF9oZHIsIF92YWwpICBcCisJV1JJVEVFRjJCWVRFKCh1OCAqKShfaGRyKStGUkFNRV9PRkZTRVRfU0VRVUVOQ0UsIF92YWwpCisKKyNkZWZpbmUgU0VUX0JFQUNPTl9QUk9CRV9SU1BfVElNRV9TVEFNUF9MT1coX19waGRyLCBfX3ZhbCkJXAorCVdSSVRFRUY0QllURSgoKHU4ICopKF9fcGhkcikpICsgMjQsIF9fdmFsKQorI2RlZmluZSBTRVRfQkVBQ09OX1BST0JFX1JTUF9USU1FX1NUQU1QX0hJR0goX19waGRyLCBfX3ZhbCkgXAorCVdSSVRFRUY0QllURSgoKHU4ICopKF9fcGhkcikpICsgMjgsIF9fdmFsKQorI2RlZmluZSBTRVRfQkVBQ09OX1BST0JFX1JTUF9CRUFDT05fSU5URVJWQUwoX19waGRyLCBfX3ZhbCkgXAorCVdSSVRFRUYyQllURSgoKHU4ICopKF9fcGhkcikpICsgMzIsIF9fdmFsKQorI2RlZmluZSBHRVRfQkVBQ09OX1BST0JFX1JTUF9DQVBBQklMSVRZX0lORk8oX19waGRyKQkJXAorCVJFQURFRjJCWVRFKCgodTggKikoX19waGRyKSkgKyAzNCkKKyNkZWZpbmUgU0VUX0JFQUNPTl9QUk9CRV9SU1BfQ0FQQUJJTElUWV9JTkZPKF9fcGhkciwgX192YWwpIFwKKwlXUklURUVGMkJZVEUoKCh1OCAqKShfX3BoZHIpKSArIDM0LCBfX3ZhbCkKKyNkZWZpbmUgTUFTS19CRUFDT05fUFJPQkVfUlNQX0NBUEFCSUxJVFlfSU5GTyhfX3BoZHIsIF9fdmFsKSBcCisJU0VUX0JFQUNPTl9QUk9CRV9SU1BfQ0FQQUJJTElUWV9JTkZPKF9fcGhkciwgXAorCShHRVRfQkVBQ09OX1BST0JFX1JTUF9DQVBBQklMSVRZX0lORk8oX19waGRyKSAmICh+KF9fdmFsKSkpKQogCiBpbnQgcnRsX2luaXRfY29yZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiB2b2lkIHJ0bF9kZWluaXRfY29yZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CkBAIC04MCwxOCArMTE3LDI3IEBACiB2b2lkIHJ0bF9kZWluaXRfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAKIGJvb2wgcnRsX2FjdGlvbl9wcm9jKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBpc190eCk7Ci1ib29sIHJ0bF90eF9tZ210X3Byb2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpOwogdTggcnRsX2lzX3NwZWNpYWxfZGF0YShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaXNfdHgpOwogCiB2b2lkIHJ0bF93YXRjaF9kb2dfdGltZXJfY2FsbGJhY2sodW5zaWduZWQgbG9uZyBkYXRhKTsKLWludCBydGxfdHhfYWdnX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBjb25zdCB1OCAqcmEsCitpbnQgcnRsX3R4X2FnZ19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJICAgICB1MTYgdGlkLCB1MTYgKnNzbik7Ci1pbnQgcnRsX3R4X2FnZ19zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBjb25zdCB1OCAqcmEsIHUxNiB0aWQpOworaW50IHJ0bF90eF9hZ2dfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJICAgIHUxNiB0aWQpOworaW50IHJ0bF90eF9hZ2dfb3BlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJICAgIHUxNiB0aWQpOwogdm9pZCBydGxfd2F0Y2hkb2dfd3FfY2FsbGJhY2sodm9pZCAqZGF0YSk7CiAKIHZvaWQgcnRsX2dldF90Y2JfZGVzYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAorCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcnRsX3RjYl9kZXNjICp0Y2JfZGVzYyk7CiAKK2ludCBydGxfc2VuZF9zbXBzX2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTggKmRhLCB1OCAqYnNzaWQsCisJCWVudW0gaWVlZTgwMjExX3NtcHNfbW9kZSBzbXBzKTsKK3U4ICpydGxfZmluZF9pZSh1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbiwgdTggaWUpOwordm9pZCBydGxfcmVjb2duaXplX3BlZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKTsKK3U4IHJ0bF90aWRfdG9fYWMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHRpZCk7CiBleHRlcm4gc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBydGxfYXR0cmlidXRlX2dyb3VwOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2NhbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9jYW0uYwppbmRleCA1MmM5YzEzLi43Mjk1YWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2NhbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvY2FtLmMKQEAgLTIzLDYgKzIzLDggQEAKICAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAogICogSHNpbmNodSAzMDAsIFRhaXdhbi4KICAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAid2lmaS5oIgpAQCAtNDksNyArNTEsNyBAQAogCXUzMiB0YXJnZXRfY29udGVudCA9IDA7CiAJdTggZW50cnlfaTsKIAotCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfRE1FU0csCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19MT1VELAogCQkgKCJrZXlfY29udF8xMjg6XG4gJXg6JXg6JXg6JXg6JXg6JXhcbiIsCiAJCSAga2V5X2NvbnRfMTI4WzBdLCBrZXlfY29udF8xMjhbMV0sCiAJCSAga2V5X2NvbnRfMTI4WzJdLCBrZXlfY29udF8xMjhbM10sCkBAIC02OCwxNSArNzAsMTMgQEAKIAkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbUldDQU1dLAogCQkJCQl0YXJnZXRfY29tbWFuZCk7CiAKLQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfRE1FU0csCi0JCQkJICgicnRsX2NhbV9wcm9ncmFtX2VudHJ5KCk6ICIKLQkJCQkgICJXUklURSAleDogJXhcbiIsCisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0xPVUQsCisJCQkJICgiV1JJVEUgJXg6ICV4XG4iLAogCQkJCSAgcnRscHJpdi0+Y2ZnLT5tYXBzW1dDQU1JXSwgdGFyZ2V0X2NvbnRlbnQpKTsKLQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfRE1FU0csCisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0xPVUQsCiAJCQkJICgiVGhlIEtleSBJRCBpcyAlZFxuIiwgZW50cnlfbm8pKTsKLQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfRE1FU0csCi0JCQkJICgicnRsX2NhbV9wcm9ncmFtX2VudHJ5KCk6ICIKLQkJCQkgICJXUklURSAleDogJXhcbiIsCisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0xPVUQsCisJCQkJICgiV1JJVEUgJXg6ICV4XG4iLAogCQkJCSAgcnRscHJpdi0+Y2ZnLT5tYXBzW1JXQ0FNXSwgdGFyZ2V0X2NvbW1hbmQpKTsKIAogCQl9IGVsc2UgaWYgKGVudHJ5X2kgPT0gMSkgewpAQCAtOTEsMTIgKzkxLDEwIEBACiAJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW1JXQ0FNXSwKIAkJCQkJdGFyZ2V0X2NvbW1hbmQpOwogCi0JCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0RNRVNHLAotCQkJCSAoInJ0bF9jYW1fcHJvZ3JhbV9lbnRyeSgpOiBXUklURSBBNDogJXhcbiIsCi0JCQkJICB0YXJnZXRfY29udGVudCkpOwotCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywKLQkJCQkgKCJydGxfY2FtX3Byb2dyYW1fZW50cnkoKTogV1JJVEUgQTA6ICV4XG4iLAotCQkJCSAgdGFyZ2V0X2NvbW1hbmQpKTsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfTE9VRCwKKwkJCQkgKCJXUklURSBBNDogJXhcbiIsIHRhcmdldF9jb250ZW50KSk7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0xPVUQsCisJCQkJICgiV1JJVEUgQTA6ICV4XG4iLCB0YXJnZXRfY29tbWFuZCkpOwogCiAJCX0gZWxzZSB7CiAKQEAgLTExMywxNiArMTExLDE0IEBACiAJCQkJCXRhcmdldF9jb21tYW5kKTsKIAkJCXVkZWxheSgxMDApOwogCi0JCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0RNRVNHLAotCQkJCSAoInJ0bF9jYW1fcHJvZ3JhbV9lbnRyeSgpOiBXUklURSBBNDogJXhcbiIsCi0JCQkJICB0YXJnZXRfY29udGVudCkpOwotCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywKLQkJCQkgKCJydGxfY2FtX3Byb2dyYW1fZW50cnkoKTogV1JJVEUgQTA6ICV4XG4iLAotCQkJCSAgdGFyZ2V0X2NvbW1hbmQpKTsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfTE9VRCwKKwkJCQkgKCJXUklURSBBNDogJXhcbiIsIHRhcmdldF9jb250ZW50KSk7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0xPVUQsCisJCQkJICgiV1JJVEUgQTA6ICV4XG4iLCB0YXJnZXRfY29tbWFuZCkpOwogCQl9CiAJfQogCi0JUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0xPVUQsCiAJCSAoImFmdGVyIHNldCBrZXksIHVzY29uZmlnOiV4XG4iLCB1c19jb25maWcpKTsKIH0KIApAQCAtMjg5LDMgKzI4NSw3MSBAQAogCiB9CiBFWFBPUlRfU1lNQk9MKHJ0bF9jYW1fZW1wdHlfZW50cnkpOworCit1OCBydGxfY2FtX2dldF9mcmVlX2VudHJ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqc3RhX2FkZHIpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXUzMiBiaXRtYXAgPSAocnRscHJpdi0+c2VjLmh3c2VjX2NhbV9iaXRtYXApID4+IDQ7CisJdTggZW50cnlfaWR4ID0gMDsKKwl1OCBpLCAqYWRkcjsKKworCWlmIChOVUxMID09IHN0YV9hZGRyKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfRU1FUkcsCisJCQkoInN0YV9hZGRyIGlzIE5VTEwuXG4iKSk7CisJCXJldHVybiBUT1RBTF9DQU1fRU5UUlk7CisJfQorCS8qIERvZXMgU1RBIGFscmVhZHkgZXhpc3Q/ICovCisJZm9yIChpID0gNDsgaSA8IFRPVEFMX0NBTV9FTlRSWTsgaSsrKSB7CisJCWFkZHIgPSBydGxwcml2LT5zZWMuaHdzZWNfY2FtX3N0YV9hZGRyW2ldOworCQlpZiAobWVtY21wKGFkZHIsIHN0YV9hZGRyLCBFVEhfQUxFTikgPT0gMCkKKwkJCXJldHVybiBpOworCX0KKwkvKiBHZXQgYSBmcmVlIENBTSBlbnRyeS4gKi8KKwlmb3IgKGVudHJ5X2lkeCA9IDQ7IGVudHJ5X2lkeCA8IFRPVEFMX0NBTV9FTlRSWTsgZW50cnlfaWR4KyspIHsKKwkJaWYgKChiaXRtYXAgJiBCSVQoMCkpID09IDApIHsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfRU1FUkcsCisJCQkJKCItLS0tLWh3c2VjX2NhbV9iaXRtYXA6IDB4JXggZW50cnlfaWR4PSVkXG4iLAorCQkJCSBydGxwcml2LT5zZWMuaHdzZWNfY2FtX2JpdG1hcCwgZW50cnlfaWR4KSk7CisJCQlydGxwcml2LT5zZWMuaHdzZWNfY2FtX2JpdG1hcCB8PSBCSVQoMCkgPDwgZW50cnlfaWR4OworCQkJbWVtY3B5KHJ0bHByaXYtPnNlYy5od3NlY19jYW1fc3RhX2FkZHJbZW50cnlfaWR4XSwKKwkJCSAgICAgICBzdGFfYWRkciwgRVRIX0FMRU4pOworCQkJcmV0dXJuIGVudHJ5X2lkeDsKKwkJfQorCQliaXRtYXAgPSBiaXRtYXAgPj4gMTsKKwl9CisJcmV0dXJuIFRPVEFMX0NBTV9FTlRSWTsKK30KK0VYUE9SVF9TWU1CT0wocnRsX2NhbV9nZXRfZnJlZV9lbnRyeSk7CisKK3ZvaWQgcnRsX2NhbV9kZWxfZW50cnkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpzdGFfYWRkcikKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTMyIGJpdG1hcDsKKwl1OCBpLCAqYWRkcjsKKworCWlmIChOVUxMID09IHN0YV9hZGRyKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfRU1FUkcsCisJCQkoInN0YV9hZGRyIGlzIE5VTEwuXG4iKSk7CisJfQorCisJaWYgKChzdGFfYWRkclswXXxzdGFfYWRkclsxXXxzdGFfYWRkclsyXXxzdGFfYWRkclszXXxcCisJCQkJc3RhX2FkZHJbNF18c3RhX2FkZHJbNV0pID09IDApIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19FTUVSRywKKwkJCSgic3RhX2FkZHIgaXMgMDA6MDA6MDA6MDA6MDA6MDAuXG4iKSk7CisJCXJldHVybjsKKwl9CisJLyogRG9lcyBTVEEgYWxyZWFkeSBleGlzdD8gKi8KKwlmb3IgKGkgPSA0OyBpIDwgVE9UQUxfQ0FNX0VOVFJZOyBpKyspIHsKKwkJYWRkciA9IHJ0bHByaXYtPnNlYy5od3NlY19jYW1fc3RhX2FkZHJbaV07CisJCWJpdG1hcCA9IChydGxwcml2LT5zZWMuaHdzZWNfY2FtX2JpdG1hcCkgPj4gaTsKKwkJaWYgKCgoYml0bWFwICYgQklUKDApKSA9PSBCSVQoMCkpICYmCisJCSAgICAobWVtY21wKGFkZHIsIHN0YV9hZGRyLCBFVEhfQUxFTikgPT0gMCkpIHsKKwkJCS8qIFJlbW92ZSBmcm9tIEhXIFNlY3VyaXR5IENBTSAqLworCQkJbWVtc2V0KHJ0bHByaXYtPnNlYy5od3NlY19jYW1fc3RhX2FkZHJbaV0sIDAsIEVUSF9BTEVOKTsKKwkJCXJ0bHByaXYtPnNlYy5od3NlY19jYW1fYml0bWFwICY9IH4oQklUKDApIDw8IGkpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJiYmJiYmJiYmZGVsIGVudHJ5ICVkXG4iLCBpKTsKKwkJfQorCX0KKwlyZXR1cm47Cit9CitFWFBPUlRfU1lNQk9MKHJ0bF9jYW1fZGVsX2VudHJ5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvY2FtLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2NhbS5oCmluZGV4IGRkODJmMDUuLmM2MmRhNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvY2FtLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9jYW0uaApAQCAtMjMsMTIgKzIzLDEzIEBACiAgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKICAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCiAgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2lmbmRlZiBfX1JUTF9DQU1fSF8KICNkZWZpbmUgX19SVExfQ0FNX0hfCiAKLSNkZWZpbmUgVE9UQUxfQ0FNX0VOVFJZCQkJCQkzMgogI2RlZmluZSBDQU1fQ09OVEVOVF9DT1VOVAkJCQk4CiAKICNkZWZpbmUgQ0ZHX0RFRkFVTFRfS0VZCQkJCQlCSVQoNSkKQEAgLTQ5LDUgKzUwLDcgQEAKIHZvaWQgcnRsX2NhbV9tYXJrX2ludmFsaWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHVjX2luZGV4KTsKIHZvaWQgcnRsX2NhbV9lbXB0eV9lbnRyeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggdWNfaW5kZXgpOwogdm9pZCBydGxfY2FtX3Jlc2V0X3NlY19pbmZvKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3U4IHJ0bF9jYW1fZ2V0X2ZyZWVfZW50cnkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpzdGFfYWRkcik7Cit2b2lkIHJ0bF9jYW1fZGVsX2VudHJ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqc3RhX2FkZHIpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9jb3JlLmMKaW5kZXggZTRmNGFlZS4uZmM4OWNkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9jb3JlLmMKQEAgLTI0LDYgKzI0LDcgQEAKICAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCiAgKgogICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgIndpZmkuaCIKQEAgLTM1LDcgKzM2LDcgQEAKIC8qbXV0ZXggZm9yIHN0YXJ0ICYgc3RvcCBpcyBtdXN0IGhlcmUuICovCiBzdGF0aWMgaW50IHJ0bF9vcF9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKLQlpbnQgZXJyID0gMDsKKwlpbnQgZXJyOwogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOwogCkBAIC00NSwxMCArNDYsOCBAQAogCQlyZXR1cm4gMDsKIAltdXRleF9sb2NrKCZydGxwcml2LT5sb2Nrcy5jb25mX211dGV4KTsKIAllcnIgPSBydGxwcml2LT5pbnRmX29wcy0+YWRhcHRlcl9zdGFydChodyk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0JcnRsX3dhdGNoX2RvZ190aW1lcl9jYWxsYmFjaygodW5zaWduZWQgbG9uZylodyk7Ci1vdXQ6CisJaWYgKCFlcnIpCisJCXJ0bF93YXRjaF9kb2dfdGltZXJfY2FsbGJhY2soKHVuc2lnbmVkIGxvbmcpaHcpOwogCW11dGV4X3VubG9jaygmcnRscHJpdi0+bG9ja3MuY29uZl9tdXRleCk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTcyLDYgKzcxLDcgQEAKIAogCW1hYy0+bGlua19zdGF0ZSA9IE1BQzgwMjExX05PTElOSzsKIAltZW1zZXQobWFjLT5ic3NpZCwgMCwgNik7CisJbWFjLT52ZW5kb3IgPSBQRUVSX1VOS05PV047CiAKIAkvKnJlc2V0IHNlYyBpbmZvICovCiAJcnRsX2NhbV9yZXNldF9zZWNfaW5mbyhodyk7CkBAIC04Nyw2ICs4Nyw4IEBACiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CiAJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF90Y2JfZGVzYyB0Y2JfZGVzYzsKKwltZW1zZXQoJnRjYl9kZXNjLCAwLCBzaXplb2Yoc3RydWN0IHJ0bF90Y2JfZGVzYykpOwogCiAJaWYgKHVubGlrZWx5KGlzX2hhbF9zdG9wKHJ0bGhhbCkgfHwgcHBzYy0+cmZwd3Jfc3RhdGUgIT0gRVJGT04pKQogCQlnb3RvIGVycl9mcmVlOwpAQCAtOTQsOCArOTYsOCBAQAogCWlmICghdGVzdF9iaXQoUlRMX1NUQVRVU19JTlRFUkZBQ0VfU1RBUlQsICZydGxwcml2LT5zdGF0dXMpKQogCQlnb3RvIGVycl9mcmVlOwogCi0KLQlydGxwcml2LT5pbnRmX29wcy0+YWRhcHRlcl90eChodywgc2tiKTsKKwlpZiAoIXJ0bHByaXYtPmludGZfb3BzLT53YWl0cV9pbnNlcnQoaHcsIHNrYikpCisJCXJ0bHByaXYtPmludGZfb3BzLT5hZGFwdGVyX3R4KGh3LCBza2IsICZ0Y2JfZGVzYyk7CiAKIAlyZXR1cm47CiAKQEAgLTEzNiwxMCArMTM4LDI2IEBACiAKIAkJbWFjLT5saW5rX3N0YXRlID0gTUFDODAyMTFfTElOS0VEOwogCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2Jjbl9yZWcoaHcpOworCQlpZiAocnRscHJpdi0+cnRsaGFsLmN1cnJlbnRfYmFuZHR5cGUgPT0gQkFORF9PTl8yXzRHKQorCQkJbWFjLT5iYXNpY19yYXRlcyA9IDB4ZmZmOworCQllbHNlCisJCQltYWMtPmJhc2ljX3JhdGVzID0gMHhmZjA7CisJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfQkFTSUNfUkFURSwKKwkJCQkodTggKikgKCZtYWMtPmJhc2ljX3JhdGVzKSk7CisKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKIAkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NQUM4MDIxMSwgREJHX0xPVUQsCiAJCQkgKCJOTDgwMjExX0lGVFlQRV9BUFxuIikpOworCisJCW1hYy0+bGlua19zdGF0ZSA9IE1BQzgwMjExX0xJTktFRDsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9iY25fcmVnKGh3KTsKKwkJaWYgKHJ0bHByaXYtPnJ0bGhhbC5jdXJyZW50X2JhbmR0eXBlID09IEJBTkRfT05fMl80RykKKwkJCW1hYy0+YmFzaWNfcmF0ZXMgPSAweGZmZjsKKwkJZWxzZQorCQkJbWFjLT5iYXNpY19yYXRlcyA9IDB4ZmYwOworCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX0JBU0lDX1JBVEUsCisJCQkJKHU4ICopICgmbWFjLT5iYXNpY19yYXRlcykpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLApAQCAtMTg2LDEzICsyMDQsMTIgQEAKIAltYWMtPnZpZiA9IE5VTEw7CiAJbWFjLT5saW5rX3N0YXRlID0gTUFDODAyMTFfTk9MSU5LOwogCW1lbXNldChtYWMtPmJzc2lkLCAwLCA2KTsKKwltYWMtPnZlbmRvciA9IFBFRVJfVU5LTk9XTjsKIAltYWMtPm9wbW9kZSA9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOwogCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfbmV0d29ya190eXBlKGh3LCBtYWMtPm9wbW9kZSk7Ci0KIAltdXRleF91bmxvY2soJnJ0bHByaXYtPmxvY2tzLmNvbmZfbXV0ZXgpOwogfQogCi0KIHN0YXRpYyBpbnQgcnRsX29wX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwpAQCAtMjI0LDEwICsyNDEsMjUgQEAKIAogCS8qRm9yIExQUyAqLwogCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKSB7Ci0JCWlmIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKQotCQkJcnRsX2xwc19lbnRlcihodyk7Ci0JCWVsc2UKLQkJCXJ0bF9scHNfbGVhdmUoaHcpOworCQljYW5jZWxfZGVsYXllZF93b3JrKCZydGxwcml2LT53b3Jrcy5wc193b3JrKTsKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcnRscHJpdi0+d29ya3MucHNfcmZvbl93cSk7CisJCWlmIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSB7CisJCQlydGxwcml2LT5wc2Muc3dfcHNfZW5hYmxlZCA9IHRydWU7CisJCQkvKiBzbGVlcCBoZXJlIGlzIG11c3QsIG9yIHdlIG1heSByZWN2IHRoZSBiZWFjb24gYW5kCisJCQkgKiBjYXVzZSBtYWM4MDIxMSBpbnRvIHdyb25nIHBzIHN0YXRlLCB0aGlzIHdpbGwgY2F1c2UKKwkJCSAqIHBvd2VyIHNhdmUgbnVsbGZ1bmMgc2VuZCBmYWlsLCBhbmQgZnVydGhlciBjYXVzZQorCQkJICogcGt0IGxvc3MsIFNvIHNsZWVwIG11c3QgcXVpY2tseSBidXQgbm90IGltbWVkaWF0bHkKKwkJCSAqIGJlY2F1c2UgdGhhdCB3aWxsIGNhdXNlIG51bGxmdW5jIHNlbmQgYnkgbWFjODAyMTEKKwkJCSAqIGZhaWwsIGFuZCBjYXVzZSBwa3QgbG9zcywgd2UgaGF2ZSB0ZXN0ZWQgdGhhdCA1bUEKKwkJCSAqIGlzIHdvcmtlZCB2ZXJ5IHdlbGwgKi8KKwkJCWlmICghcnRscHJpdi0+cHNjLm11bHRpX2J1ZmZlcmVkKQorCQkJCXF1ZXVlX2RlbGF5ZWRfd29yayhydGxwcml2LT53b3Jrcy5ydGxfd3EsCisJCQkJCQkmcnRscHJpdi0+d29ya3MucHNfd29yaywKKwkJCQkJCU1TRUNTKDUpKTsKKwkJfSBlbHNlIHsKKwkJCXJ0bF9zd2xwc19yZl9hd2FrZShodyk7CisJCQlydGxwcml2LT5wc2Muc3dfcHNfZW5hYmxlZCA9IGZhbHNlOworCQl9CiAJfQogCiAJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUkVUUllfTElNSVRTKSB7CkBAIC0yNTksNyArMjkxLDcgQEAKIAkJY2FzZSBOTDgwMjExX0NIQU5fTk9fSFQ6CiAJCQkvKiBTQyAqLwogCQkJbWFjLT5jdXJfNDBfcHJpbWVfc2MgPQotCQkJICAgIFBSSU1FX0NITkxfT0ZGU0VUX0RPTlRfQ0FSRTsKKwkJCQlQUklNRV9DSE5MX09GRlNFVF9ET05UX0NBUkU7CiAJCQlydGxwaHktPmN1cnJlbnRfY2hhbl9idyA9IEhUX0NIQU5ORUxfV0lEVEhfMjA7CiAJCQltYWMtPmJ3XzQwID0gZmFsc2U7CiAJCQlicmVhazsKQEAgLTI2Nyw3ICsyOTksNyBAQAogCQkJLyogU0MgKi8KIAkJCW1hYy0+Y3VyXzQwX3ByaW1lX3NjID0gUFJJTUVfQ0hOTF9PRkZTRVRfVVBQRVI7CiAJCQlydGxwaHktPmN1cnJlbnRfY2hhbl9idyA9Ci0JCQkgICAgSFRfQ0hBTk5FTF9XSURUSF8yMF80MDsKKwkJCQlIVF9DSEFOTkVMX1dJRFRIXzIwXzQwOwogCQkJbWFjLT5id180MCA9IHRydWU7CiAKIAkJCS8qd2lkZSBjaGFubmVsICovCkBAIC0yNzgsNyArMzEwLDcgQEAKIAkJCS8qIFNDICovCiAJCQltYWMtPmN1cl80MF9wcmltZV9zYyA9IFBSSU1FX0NITkxfT0ZGU0VUX0xPV0VSOwogCQkJcnRscGh5LT5jdXJyZW50X2NoYW5fYncgPQotCQkJICAgIEhUX0NIQU5ORUxfV0lEVEhfMjBfNDA7CisJCQkJSFRfQ0hBTk5FTF9XSURUSF8yMF80MDsKIAkJCW1hYy0+YndfNDAgPSB0cnVlOwogCiAJCQkvKndpZGUgY2hhbm5lbCAqLwpAQCAtMjg4LDE2ICszMjAsMjkgQEAKIAkJZGVmYXVsdDoKIAkJCW1hYy0+YndfNDAgPSBmYWxzZTsKIAkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCi0JCQkJICgic3dpdGNoIGNhc2Ugbm90IHByb2Nlc3NlZFxuIikpOworCQkJCQkoInN3aXRjaCBjYXNlIG5vdCBwcm9jZXNzZWRcbiIpKTsKIAkJCWJyZWFrOwogCQl9CiAKIAkJaWYgKHdpZGVfY2hhbiA8PSAwKQogCQkJd2lkZV9jaGFuID0gMTsKKworCQkvKiBJbiBzY2FubmluZywgYmVmb3JlIHdlIGdvIG9mZmNoYW5uZWwgd2UgbWF5IHNlbmQgYSBwcz0xIG51bGwKKwkJICogdG8gQVAsIGFuZCB0aGVuIHdlIG1heSBzZW5kIGEgcHMgPSAwIG51bGwgdG8gQVAgcXVpY2tseSwgYnV0CisJCSAqIGZpcnN0IG51bGwgbWF5IGhhdmUgY2F1c2VkIEFQIHRvIHB1dCBsb3RzIG9mIHBhY2tldCB0byBodyB0eAorCQkgKiBidWZmZXIuIFRoZXNlIHBhY2tldHMgbXVzdCBiZSB0eCdkIGJlZm9yZSB3ZSBnbyBvZmYgY2hhbm5lbAorCQkgKiBzbyB3ZSBtdXN0IGRlbGF5IG1vcmUgdGltZSB0byBsZXQgQVAgZmx1c2ggdGhlc2UgcGFja2V0cworCQkgKiBiZWZvcmUgZ29pbmcgb2ZmY2hhbm5lbCwgb3IgZGlzLWFzc29jaWF0aW9uIG9yIGRlbGV0ZSBCQSB3aWxsCisJCSAqIGhhcHBlbiBieSBBUAorCQkgKi8KKwkJaWYgKHJ0bHByaXYtPm1hYzgwMjExLm9mZmNoYW5fZGVsZXkpIHsKKwkJCXJ0bHByaXYtPm1hYzgwMjExLm9mZmNoYW5fZGVsZXkgPSBmYWxzZTsKKwkJCW1kZWxheSg1MCk7CisJCX0KIAkJcnRscGh5LT5jdXJyZW50X2NoYW5uZWwgPSB3aWRlX2NoYW47CiAKLQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9jaGFubmVsX2FjY2Vzcyhodyk7CiAJCXJ0bHByaXYtPmNmZy0+b3BzLT5zd2l0Y2hfY2hhbm5lbChodyk7CisJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfY2hhbm5lbF9hY2Nlc3MoaHcpOwogCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2J3X21vZGUoaHcsCiAJCQkJCSAgICAgICBody0+Y29uZi5jaGFubmVsX3R5cGUpOwogCX0KQEAgLTM0NSwyNyArMzkwLDI4IEBACiAJCX0KIAl9CiAKLQlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSB7Ci0JCS8qCi0JCSAqVE9ETzogQklUKDUpIGlzIHByb2JlIHJlc3BvbnNlIEJJVCg4KSBpcyBiZWFjb24KLQkJICpUT0RPOiBVc2UgZGVmaW5lIGZvciBCSVQoNSkgYW5kIEJJVCg4KQotCQkgKi8KLQkJaWYgKCpuZXdfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykKLQkJCW1hYy0+cnhfbWd0X2ZpbHRlciB8PSAoQklUKDUpIHwgQklUKDgpKTsKLQkJZWxzZQotCQkJbWFjLT5yeF9tZ3RfZmlsdGVyICY9IH4oQklUKDUpIHwgQklUKDgpKTsKKwkvKiBpZiBzc2lkIG5vdCBzZXQgdG8gaHcgZG9uJ3QgY2hlY2sgYnNzaWQKKwkgKiBoZXJlIGp1c3QgdXNlZCBmb3IgbGlua2VkIHNjYW5uaW5nLCAmIGxpbmtlZAorCSAqIGFuZCBub2xpbmsgY2hlY2sgYnNzaWQgaXMgc2V0IGluIHNldCBuZXR3b3JrX3R5cGUgKi8KKwlpZiAoKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykgJiYKKwkJKG1hYy0+bGlua19zdGF0ZSA+PSBNQUM4MDIxMV9MSU5LRUQpKSB7CisJCWlmIChtYWMtPm9wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkgeworCQkJaWYgKCpuZXdfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykgeworCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfY2hrX2Jzc2lkKGh3LCBmYWxzZSk7CisJCQl9IGVsc2UgeworCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfY2hrX2Jzc2lkKGh3LCB0cnVlKTsKKwkJCX0KKwkJfQogCX0KIAogCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0NPTlRST0wpIHsKIAkJaWYgKCpuZXdfZmxhZ3MgJiBGSUZfQ09OVFJPTCkgewogCQkJbWFjLT5yeF9jb25mIHw9IHJ0bHByaXYtPmNmZy0+bWFwc1tNQUNfUkNSX0FDRl07Ci0JCQltYWMtPnJ4X2N0cmxfZmlsdGVyIHw9IFJUTF9TVVBQT1JURURfQ1RSTF9GSUxURVI7CiAKIAkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTUFDODAyMTEsIERCR19MT1VELAogCQkJCSAoIkVuYWJsZSByZWNlaXZlIGNvbnRyb2wgZnJhbWUuXG4iKSk7CiAJCX0gZWxzZSB7CiAJCQltYWMtPnJ4X2NvbmYgJj0gfnJ0bHByaXYtPmNmZy0+bWFwc1tNQUNfUkNSX0FDRl07Ci0JCQltYWMtPnJ4X2N0cmxfZmlsdGVyICY9IH5SVExfU1VQUE9SVEVEX0NUUkxfRklMVEVSOwogCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NQUM4MDIxMSwgREJHX0xPVUQsCiAJCQkJICgiRGlzYWJsZSByZWNlaXZlIGNvbnRyb2wgZnJhbWUuXG4iKSk7CiAJCX0KQEAgLTM4MiwxNCArNDI4LDU0IEBACiAJCQkJICgiRGlzYWJsZSByZWNlaXZlIG90aGVyIEJTUydzIGZyYW1lLlxuIikpOwogCQl9CiAJfQotCi0JcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9SQ1IsICh1OCAqKSAoJm1hYy0+cnhfY29uZikpOwotCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfTUdUX0ZJTFRFUiwKLQkJCQkgICAgICAodTggKikgKCZtYWMtPnJ4X21ndF9maWx0ZXIpKTsKLQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX0NUUkxfRklMVEVSLAotCQkJCSAgICAgICh1OCAqKSAoJm1hYy0+cnhfY3RybF9maWx0ZXIpKTsKIH0KK3N0YXRpYyBpbnQgcnRsX29wX3N0YV9hZGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfc3RhX2luZm8gKnN0YV9lbnRyeTsKIAorCWlmIChzdGEpIHsKKwkJc3RhX2VudHJ5ID0gKHN0cnVjdCBydGxfc3RhX2luZm8gKikgc3RhLT5kcnZfcHJpdjsKKwkJaWYgKHJ0bGhhbC0+Y3VycmVudF9iYW5kdHlwZSA9PSBCQU5EX09OXzJfNEcpIHsKKwkJCXN0YV9lbnRyeS0+d2lyZWxlc3NfbW9kZSA9IFdJUkVMRVNTX01PREVfRzsKKwkJCWlmIChzdGEtPnN1cHBfcmF0ZXNbMF0gPD0gMHhmKQorCQkJCXN0YV9lbnRyeS0+d2lyZWxlc3NfbW9kZSA9IFdJUkVMRVNTX01PREVfQjsKKwkJCWlmIChzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQgPT0gdHJ1ZSkKKwkJCQlzdGFfZW50cnktPndpcmVsZXNzX21vZGUgPSBXSVJFTEVTU19NT0RFX05fMjRHOworCQl9IGVsc2UgaWYgKHJ0bGhhbC0+Y3VycmVudF9iYW5kdHlwZSA9PSBCQU5EX09OXzVHKSB7CisJCQlzdGFfZW50cnktPndpcmVsZXNzX21vZGUgPSBXSVJFTEVTU19NT0RFX0E7CisJCQlpZiAoc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkID09IHRydWUpCisJCQkJc3RhX2VudHJ5LT53aXJlbGVzc19tb2RlID0gV0lSRUxFU1NfTU9ERV9OXzI0RzsKKwkJfQorCisJCS8qIEkgZm91bmQgc29tZSB0aW1lcyBtYWM4MDIxMSBnaXZlIHdyb25nIHN1cHBfcmF0ZXMgZm9yIGFkaG9jKi8KKwkJaWYgKHJ0bHByaXYtPm1hYzgwMjExLm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJCXN0YV9lbnRyeS0+d2lyZWxlc3NfbW9kZSA9IFdJUkVMRVNTX01PREVfRzsKKworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLCBEQkdfRE1FU0csCisJCQkoIkFkZCBzdGEgYWRkciBpcyAiTUFDX0ZNVCJcbiIsIE1BQ19BUkcoc3RhLT5hZGRyKSkpOworCQlydGxwcml2LT5jZmctPm9wcy0+dXBkYXRlX3JhdGVfdGJsKGh3LCBzdGEsIDApOworCX0KKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbnQgcnRsX29wX3N0YV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3N0YV9pbmZvICpzdGFfZW50cnk7CisJaWYgKHN0YSkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLCBEQkdfRE1FU0csCisJCQkoIlJlbW92ZSBzdGEgYWRkciBpcyAiTUFDX0ZNVCJcbiIsIE1BQ19BUkcoc3RhLT5hZGRyKSkpOworCQlzdGFfZW50cnkgPSAoc3RydWN0IHJ0bF9zdGFfaW5mbyAqKSBzdGEtPmRydl9wcml2OworCQlzdGFfZW50cnktPndpcmVsZXNzX21vZGUgPSAwOworCQlzdGFfZW50cnktPnJhdHJfaW5kZXggPSAwOworCX0KKwlyZXR1cm4gMDsKK30KIHN0YXRpYyBpbnQgX3J0bF9nZXRfaGFsX3FudW0odTE2IHF1ZXVlKQogewogCWludCBxbnVtOwpAQCAtNDQ2LDE5ICs1MzIsMTggQEAKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYsIHUzMiBjaGFuZ2VkKQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxwcml2KTsKIAlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOwogCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSBOVUxMOwogCiAJbXV0ZXhfbG9jaygmcnRscHJpdi0+bG9ja3MuY29uZl9tdXRleCk7Ci0KIAlpZiAoKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgfHwKIAkgICAgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgfHwKIAkgICAgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSkgewotCiAJCWlmICgoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTikgfHwKIAkJICAgIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQgJiYKIAkJICAgICBic3NfY29uZi0+ZW5hYmxlX2JlYWNvbikpIHsKLQogCQkJaWYgKG1hYy0+YmVhY29uX2VuYWJsZWQgPT0gMCkgewogCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTUFDODAyMTEsIERCR19ETUVTRywKIAkJCQkJICgiQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRURcbiIpKTsKQEAgLTQ3MCw4ICs1NTUsMTMgQEAKIAkJCQkJCXJ0bHByaXYtPmNmZy0+bWFwcwogCQkJCQkJW1JUTF9JQlNTX0lOVF9NQVNLU10sCiAJCQkJCQkwKTsKKworCQkJCWlmIChydGxwcml2LT5jZmctPm9wcy0+bGlua2VkX3NldF9yZWcpCisJCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT5saW5rZWRfc2V0X3JlZyhodyk7CiAJCQl9Ci0JCX0gZWxzZSB7CisJCX0KKwkJaWYgKChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQgJiYKKwkJCSFic3NfY29uZi0+ZW5hYmxlX2JlYWNvbikpIHsKIAkJCWlmIChtYWMtPmJlYWNvbl9lbmFibGVkID09IDEpIHsKIAkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLCBEQkdfRE1FU0csCiAJCQkJCSAoIkFESE9DIERJU0FCTEUgQkVBQ09OXG4iKSk7CkBAIC00ODIsNyArNTcyLDYgQEAKIAkJCQkJCVtSVExfSUJTU19JTlRfTUFTS1NdKTsKIAkJCX0KIAkJfQotCiAJCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OX0lOVCkgewogCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9CRUFDT04sIERCR19UUkFDRSwKIAkJCQkgKCJCU1NfQ0hBTkdFRF9CRUFDT05fSU5UXG4iKSk7CkBAIC00OTQsMTEgKzU4MywyNSBAQAogCS8qVE9ETzogcmVmZXJlbmNlIHRvIGVudW0gaWVlZTgwMjExX2Jzc19jaGFuZ2UgKi8KIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FTU09DKSB7CiAJCWlmIChic3NfY29uZi0+YXNzb2MpIHsKKwkJCS8qIHdlIHNob3VsZCByZXNldCBhbGwgc2VjIGluZm8gJiBjYW0KKwkJCSAqIGJlZm9yZSBzZXQgY2FtIGFmdGVyIGxpbmtlZCwgd2Ugc2hvdWxkIG5vdAorCQkJICogcmVzZXQgaW4gZGlzYXNzb2MsIHRoYXQgd2lsbCBjYXVzZSB0a2lwLT53ZXAKKwkJCSAqIGZhaWwgYmVjYXVzZSBzb21lIGZsYWcgd2lsbCBiZSB3cm9uZyAqLworCQkJLyogcmVzZXQgc2VjIGluZm8gKi8KKwkJCXJ0bF9jYW1fcmVzZXRfc2VjX2luZm8oaHcpOworCQkJLyogcmVzZXQgY2FtIHRvIGZpeCB3ZXAgZmFpbCBpc3N1ZQorCQkJICogd2hlbiBjaGFuZ2UgZnJvbSB3cGEgdG8gd2VwICovCisJCQlydGxfY2FtX3Jlc2V0X2FsbF9lbnRyeShodyk7CisKIAkJCW1hYy0+bGlua19zdGF0ZSA9IE1BQzgwMjExX0xJTktFRDsKIAkJCW1hYy0+Y250X2FmdGVyX2xpbmtlZCA9IDA7CiAJCQltYWMtPmFzc29jX2lkID0gYnNzX2NvbmYtPmFpZDsKIAkJCW1lbWNweShtYWMtPmJzc2lkLCBic3NfY29uZi0+YnNzaWQsIDYpOwogCisJCQlpZiAocnRscHJpdi0+Y2ZnLT5vcHMtPmxpbmtlZF9zZXRfcmVnKQorCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT5saW5rZWRfc2V0X3JlZyhodyk7CisJCQlpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJiBzdGEpCisJCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnVwZGF0ZV9yYXRlX3RibChodywgc3RhLCAwKTsKIAkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTUFDODAyMTEsIERCR19ETUVTRywKIAkJCQkgKCJCU1NfQ0hBTkdFRF9BU1NPQ1xuIikpOwogCQl9IGVsc2UgewpAQCAtNTA3LDkgKzYxMCw3IEBACiAKIAkJCW1hYy0+bGlua19zdGF0ZSA9IE1BQzgwMjExX05PTElOSzsKIAkJCW1lbXNldChtYWMtPmJzc2lkLCAwLCA2KTsKLQotCQkJLyogcmVzZXQgc2VjIGluZm8gKi8KLQkJCXJ0bF9jYW1fcmVzZXRfc2VjX2luZm8oaHcpOworCQkJbWFjLT52ZW5kb3IgPSBQRUVSX1VOS05PV047CiAKIAkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTUFDODAyMTEsIERCR19ETUVTRywKIAkJCQkgKCJCU1NfQ0hBTkdFRF9VTl9BU1NPQ1xuIikpOwpAQCAtNTQ2LDE0ICs2NDcsMTAgQEAKIAl9CiAKIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0hUKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSBOVUxMOwotCiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTUFDODAyMTEsIERCR19UUkFDRSwKIAkJCSAoIkJTU19DSEFOR0VEX0hUXG4iKSk7Ci0KIAkJcmN1X3JlYWRfbG9jaygpOwotCQlzdGEgPSBpZWVlODAyMTFfZmluZF9zdGEobWFjLT52aWYsIG1hYy0+YnNzaWQpOwotCisJCXN0YSA9IGdldF9zdGEoaHcsIHZpZiwgKHU4ICopYnNzX2NvbmYtPmJzc2lkKTsKIAkJaWYgKHN0YSkgewogCQkJaWYgKHN0YS0+aHRfY2FwLmFtcGR1X2RlbnNpdHkgPgogCQkJICAgIG1hYy0+Y3VycmVudF9hbXBkdV9kZW5zaXR5KQpAQCAtNTc1LDkgKzY3Miw3IEBACiAJfQogCiAJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CU1NJRCkgewotCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhID0gTlVMTDsKIAkJdTMyIGJhc2ljX3JhdGVzOwotCQl1OCBpOwogCiAJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfQlNTSUQsCiAJCQkJCSAgICAgICh1OCAqKSBic3NfY29uZi0+YnNzaWQpOwpAQCAtNTg1LDk2ICs2ODAsNjUgQEAKIAkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NQUM4MDIxMSwgREJHX0RNRVNHLAogCQkJIChNQUNfRk1UICJcbiIsIE1BQ19BUkcoYnNzX2NvbmYtPmJzc2lkKSkpOwogCisJCW1hYy0+dmVuZG9yID0gUEVFUl9VTktOT1dOOwogCQltZW1jcHkobWFjLT5ic3NpZCwgYnNzX2NvbmYtPmJzc2lkLCA2KTsKLQkJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoYnNzX2NvbmYtPmJzc2lkKSkgewotCQkJc3dpdGNoICh2aWYtPnR5cGUpIHsKLQkJCWNhc2UgTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ6Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgotCQkJCWJyZWFrOwotCQkJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCQkJCWJyZWFrOwotCQkJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKLQkJCQkJICgic3dpdGNoIGNhc2Ugbm90IHByb2Nlc3NcbiIpKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfbmV0d29ya190eXBlKGh3LCB2aWYtPnR5cGUpOwotCQl9IGVsc2UKLQkJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfbmV0d29ya190eXBlKGh3LAotCQkJCQlOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCk7Ci0KLQkJbWVtc2V0KG1hYy0+bWNzLCAwLCAxNik7Ci0JCW1hYy0+aHRfZW5hYmxlID0gZmFsc2U7Ci0JCW1hYy0+c2dpXzQwID0gZmFsc2U7Ci0JCW1hYy0+c2dpXzIwID0gZmFsc2U7Ci0KLQkJaWYgKCFic3NfY29uZi0+dXNlX3Nob3J0X3Nsb3QpCi0JCQltYWMtPm1vZGUgPSBXSVJFTEVTU19NT0RFX0I7Ci0JCWVsc2UKLQkJCW1hYy0+bW9kZSA9IFdJUkVMRVNTX01PREVfRzsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9uZXR3b3JrX3R5cGUoaHcsIHZpZi0+dHlwZSk7CiAKIAkJcmN1X3JlYWRfbG9jaygpOwotCQlzdGEgPSBpZWVlODAyMTFfZmluZF9zdGEobWFjLT52aWYsIG1hYy0+YnNzaWQpOwotCi0JCWlmIChzdGEpIHsKLQkJCWlmIChzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpIHsKLQkJCQltYWMtPm1vZGUgPSBXSVJFTEVTU19NT0RFX05fMjRHOwotCQkJCW1hYy0+aHRfZW5hYmxlID0gdHJ1ZTsKLQkJCX0KLQotCQkJaWYgKG1hYy0+aHRfZW5hYmxlKSB7Ci0JCQkJdTE2IGh0X2NhcCA9IHN0YS0+aHRfY2FwLmNhcDsKLQkJCQltZW1jcHkobWFjLT5tY3MsICh1OCAqKSAoJnN0YS0+aHRfY2FwLm1jcyksIDE2KTsKLQotCQkJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotCQkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLAotCQkJCQkJIERCR19MT1VELCAoIiV4ICIsCi0JCQkJCQkJICAgIG1hYy0+bWNzW2ldKSk7Ci0JCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NQUM4MDIxMSwgREJHX0xPVUQsCi0JCQkJCSAoIlxuIikpOwotCi0JCQkJaWYgKGh0X2NhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwKQotCQkJCQltYWMtPnNnaV80MCA9IHRydWU7Ci0KLQkJCQlpZiAoaHRfY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TR0lfMjApCi0JCQkJCW1hYy0+c2dpXzIwID0gdHJ1ZTsKLQotCQkJCS8qCi0JCQkJICogZm9yIGNpc2NvIDEyNTIgYncyMCBpdCdzIHdyb25nCi0JCQkJICogaWYgKGh0X2NhcCAmCi0JCQkJICogICAgIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwKSB7Ci0JCQkJICoJbWFjLT5id180MCA9IHRydWU7Ci0JCQkJICogfQotCQkJCSAqLwotCQkJfQorCQlzdGEgPSBnZXRfc3RhKGh3LCB2aWYsICh1OCAqKWJzc19jb25mLT5ic3NpZCk7CisJCWlmICghc3RhKSB7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCWdvdG8gb3V0OwogCQl9Ci0JCXJjdV9yZWFkX3VubG9jaygpOwogCi0JCS8qbWFjODAyMTEganVzdCBnaXZlIHVzIENDSyByYXRlcyBhbnkgdGltZQotCQkgKlNvIHdlIGFkZCBHIHJhdGUgaW4gYmFzaWMgcmF0ZXMgd2hlbgotCQkgbm90IGluIEIgbW9kZSovCi0JCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkFTSUNfUkFURVMpIHsKLQkJCWlmIChtYWMtPm1vZGUgPT0gV0lSRUxFU1NfTU9ERV9CKQotCQkJCWJhc2ljX3JhdGVzID0gYnNzX2NvbmYtPmJhc2ljX3JhdGVzIHwgMHgwMGY7CisJCWlmIChydGxoYWwtPmN1cnJlbnRfYmFuZHR5cGUgPT0gQkFORF9PTl81RykgeworCQkJbWFjLT5tb2RlID0gV0lSRUxFU1NfTU9ERV9BOworCQl9IGVsc2UgeworCQkJaWYgKHN0YS0+c3VwcF9yYXRlc1swXSA8PSAweGYpCisJCQkJbWFjLT5tb2RlID0gV0lSRUxFU1NfTU9ERV9COwogCQkJZWxzZQotCQkJCWJhc2ljX3JhdGVzID0gYnNzX2NvbmYtPmJhc2ljX3JhdGVzIHwgMHhmZjA7CisJCQkJbWFjLT5tb2RlID0gV0lSRUxFU1NfTU9ERV9HOworCQl9CiAKLQkJCWlmICghdmlmKQotCQkJCWdvdG8gb3V0OworCQlpZiAoc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKSB7CisJCQlpZiAocnRsaGFsLT5jdXJyZW50X2JhbmR0eXBlID09IEJBTkRfT05fMl80RykKKwkJCQltYWMtPm1vZGUgPSBXSVJFTEVTU19NT0RFX05fMjRHOworCQkJZWxzZQorCQkJCW1hYy0+bW9kZSA9IFdJUkVMRVNTX01PREVfTl81RzsKKwkJfQorCisJCS8qIGp1c3Qgc3RhdGlvbiBuZWVkIGl0LCBiZWNhdXNlIGlic3MgJiBhcCBtb2RlIHdpbGwKKwkJICogc2V0IGluIHN0YV9hZGQsIGFuZCB3aWxsIGJlIE5VTEwgaGVyZSAqLworCQlpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQkJc3RydWN0IHJ0bF9zdGFfaW5mbyAqc3RhX2VudHJ5OworCQkJc3RhX2VudHJ5ID0gKHN0cnVjdCBydGxfc3RhX2luZm8gKikgc3RhLT5kcnZfcHJpdjsKKwkJCXN0YV9lbnRyeS0+d2lyZWxlc3NfbW9kZSA9IG1hYy0+bW9kZTsKKwkJfQorCisJCWlmIChzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpIHsKKwkJCW1hYy0+aHRfZW5hYmxlID0gdHJ1ZTsKKworCQkJLyoKKwkJCSAqIGZvciBjaXNjbyAxMjUyIGJ3MjAgaXQncyB3cm9uZworCQkJICogaWYgKGh0X2NhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwKSB7CisJCQkgKgltYWMtPmJ3XzQwID0gdHJ1ZTsKKwkJCSAqIH0KKwkJCSAqICovCisJCX0KKworCQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JBU0lDX1JBVEVTKSB7CisJCQkvKiBmb3IgNUcgbXVzdCA8PCBSQVRFXzZNX0lOREVYPTQsCisJCQkgKiBiZWNhdXNlIDVHIGhhdmUgbm8gY2NrIHJhdGUqLworCQkJaWYgKHJ0bGhhbC0+Y3VycmVudF9iYW5kdHlwZSA9PSBCQU5EX09OXzVHKQorCQkJCWJhc2ljX3JhdGVzID0gc3RhLT5zdXBwX3JhdGVzWzFdIDw8IDQ7CisJCQllbHNlCisJCQkJYmFzaWNfcmF0ZXMgPSBzdGEtPnN1cHBfcmF0ZXNbMF07CiAKIAkJCW1hYy0+YmFzaWNfcmF0ZXMgPSBiYXNpY19yYXRlczsKIAkJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfQkFTSUNfUkFURSwKIAkJCQkJKHU4ICopICgmYmFzaWNfcmF0ZXMpKTsKLQotCQkJaWYgKHJ0bHByaXYtPmRtLnVzZXJhbWFzaykKLQkJCQlydGxwcml2LT5jZmctPm9wcy0+dXBkYXRlX3JhdGVfbWFzayhodywgMCk7Ci0JCQllbHNlCi0JCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnVwZGF0ZV9yYXRlX3RhYmxlKGh3KTsKLQogCQl9CisJCXJjdV9yZWFkX3VubG9jaygpOwogCX0KIAogCS8qCkBAIC03NjAsMTYgKzgyNCwxNyBAQAogCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1NUQVJUOgogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLCBEQkdfVFJBQ0UsCiAJCQkgKCJJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQ6IFRJRDolZFxuIiwgdGlkKSk7Ci0JCXJldHVybiBydGxfdHhfYWdnX3N0YXJ0KGh3LCBzdGEtPmFkZHIsIHRpZCwgc3NuKTsKKwkJcmV0dXJuIHJ0bF90eF9hZ2dfc3RhcnQoaHcsIHN0YSwgdGlkLCBzc24pOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVE9QOgogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLCBEQkdfVFJBQ0UsCiAJCQkgKCJJRUVFODAyMTFfQU1QRFVfVFhfU1RPUDogVElEOiVkXG4iLCB0aWQpKTsKLQkJcmV0dXJuIHJ0bF90eF9hZ2dfc3RvcChodywgc3RhLT5hZGRyLCB0aWQpOworCQlyZXR1cm4gcnRsX3R4X2FnZ19zdG9wKGh3LCBzdGEsIHRpZCk7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX09QRVJBVElPTkFMOgogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLCBEQkdfVFJBQ0UsCiAJCQkgKCJJRUVFODAyMTFfQU1QRFVfVFhfT1BFUkFUSU9OQUw6VElEOiVkXG4iLCB0aWQpKTsKKwkJcnRsX3R4X2FnZ19vcGVyKGh3LCBzdGEsIHRpZCk7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUQVJUOgogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01BQzgwMjExLCBEQkdfVFJBQ0UsCkBAIC03OTksOCArODY0LDEyIEBACiAJaWYgKG1hYy0+bGlua19zdGF0ZSA9PSBNQUM4MDIxMV9MSU5LRUQpIHsKIAkJcnRsX2xwc19sZWF2ZShodyk7CiAJCW1hYy0+bGlua19zdGF0ZSA9IE1BQzgwMjExX0xJTktFRF9TQ0FOTklORzsKLQl9IGVsc2UKKwl9IGVsc2UgewogCQlydGxfaXBzX25pY19vbihodyk7CisJfQorCisJLyogRHVhbCBtYWMgKi8KKwlydGxwcml2LT5ydGxoYWwubG9hZF9pbXJhbmRpcWtfc2V0dGluZ19mb3IyZyA9IGZhbHNlOwogCiAJcnRscHJpdi0+Y2ZnLT5vcHMtPmxlZF9jb250cm9sKGh3LCBMRURfQ1RMX1NJVEVfU1VSVkVZKTsKIAlydGxwcml2LT5jZmctPm9wcy0+c2Nhbl9vcGVyYXRpb25fYmFja3VwKGh3LCBTQ0FOX09QVF9CQUNLVVApOwpAQCAtODEyLDIyICs4ODEsMTkgQEAKIAlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOwogCiAJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NQUM4MDIxMSwgREJHX0xPVUQsICgiXG4iKSk7Ci0KLQlydGxwcml2LT5jZmctPm9wcy0+c2Nhbl9vcGVyYXRpb25fYmFja3VwKGh3LCBTQ0FOX09QVF9SRVNUT1JFKTsKIAltYWMtPmFjdF9zY2FubmluZyA9IGZhbHNlOworCS8qIER1YWwgbWFjICovCisJcnRscHJpdi0+cnRsaGFsLmxvYWRfaW1yYW5kaXFrX3NldHRpbmdfZm9yMmcgPSBmYWxzZTsKKwogCWlmIChtYWMtPmxpbmtfc3RhdGUgPT0gTUFDODAyMTFfTElOS0VEX1NDQU5OSU5HKSB7CiAJCW1hYy0+bGlua19zdGF0ZSA9IE1BQzgwMjExX0xJTktFRDsKLQotCQkvKiBmaXggZndscHMgaXNzdWUgKi8KLQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9uZXR3b3JrX3R5cGUoaHcsIG1hYy0+b3Btb2RlKTsKLQotCQlpZiAocnRscHJpdi0+ZG0udXNlcmFtYXNrKQotCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnVwZGF0ZV9yYXRlX21hc2soaHcsIDApOwotCQllbHNlCi0JCQlydGxwcml2LT5jZmctPm9wcy0+dXBkYXRlX3JhdGVfdGFibGUoaHcpOwotCisJCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCQkvKiBmaXggZndscHMgaXNzdWUgKi8KKwkJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfbmV0d29ya190eXBlKGh3LCBtYWMtPm9wbW9kZSk7CisJCX0KIAl9CiAKKwlydGxwcml2LT5jZmctPm9wcy0+c2Nhbl9vcGVyYXRpb25fYmFja3VwKGh3LCBTQ0FOX09QVF9SRVNUT1JFKTsKIH0KIAogc3RhdGljIGludCBydGxfb3Bfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsCkBAIC04NTgsNDkgKzkyNCw3MyBAQAogCXJ0bF9pcHNfbmljX29uKGh3KTsKIAltdXRleF9sb2NrKCZydGxwcml2LT5sb2Nrcy5jb25mX211dGV4KTsKIAkvKiA8MT4gZ2V0IGVuY3J5cHRpb24gYWxnICovCisKIAlzd2l0Y2ggKGtleS0+Y2lwaGVyKSB7CiAJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDoKIAkJa2V5X3R5cGUgPSBXRVA0MF9FTkNSWVBUSU9OOwogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0RNRVNHLCAoImFsZzpXRVA0MFxuIikpOwotCQlydGxwcml2LT5zZWMudXNlX2RlZmF1bHRrZXkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDoKIAkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywKIAkJCSAoImFsZzpXRVAxMDRcbiIpKTsKIAkJa2V5X3R5cGUgPSBXRVAxMDRfRU5DUllQVElPTjsKLQkJcnRscHJpdi0+c2VjLnVzZV9kZWZhdWx0a2V5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9US0lQOgogCQlrZXlfdHlwZSA9IFRLSVBfRU5DUllQVElPTjsKIAkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywgKCJhbGc6VEtJUFxuIikpOwotCQlpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCi0JCQlydGxwcml2LT5zZWMudXNlX2RlZmF1bHRrZXkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA6CiAJCWtleV90eXBlID0gQUVTQ0NNUF9FTkNSWVBUSU9OOwogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0RNRVNHLCAoImFsZzpDQ01QXG4iKSk7Ci0JCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJCXJ0bHByaXYtPnNlYy51c2VfZGVmYXVsdGtleSA9IHRydWU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCiAJCQkgKCJhbGdfZXJyOiV4ISEhITpcbiIsIGtleS0+Y2lwaGVyKSk7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CisJaWYgKGtleV90eXBlID09IFdFUDQwX0VOQ1JZUFRJT04gfHwKKwkJCWtleV90eXBlID09IFdFUDEwNF9FTkNSWVBUSU9OIHx8CisJCQltYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJcnRscHJpdi0+c2VjLnVzZV9kZWZhdWx0a2V5ID0gdHJ1ZTsKKwogCS8qIDwyPiBnZXQga2V5X2lkeCAqLwogCWtleV9pZHggPSAodTgpIChrZXktPmtleWlkeCk7CiAJaWYgKGtleV9pZHggPiAzKQogCQlnb3RvIG91dF91bmxvY2s7CiAJLyogPDM+IGlmIHBhaXJ3aXNlIGtleSBlbmFibGVfaHdfc2VjICovCiAJZ3JvdXBfa2V5ID0gIShrZXktPmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKTsKLQlpZiAoKCFncm91cF9rZXkpIHx8IChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgfHwKLQkgICAgcnRscHJpdi0+c2VjLnBhaXJ3aXNlX2VuY19hbGdvcml0aG0gPT0gTk9fRU5DUllQVElPTikgewotCQlpZiAocnRscHJpdi0+c2VjLnBhaXJ3aXNlX2VuY19hbGdvcml0aG0gPT0gTk9fRU5DUllQVElPTiAmJgotCQkgICAgKGtleV90eXBlID09IFdFUDQwX0VOQ1JZUFRJT04gfHwKLQkJICAgICBrZXlfdHlwZSA9PSBXRVAxMDRfRU5DUllQVElPTikpCi0JCQl3ZXBfb25seSA9IHRydWU7Ci0JCXJ0bHByaXYtPnNlYy5wYWlyd2lzZV9lbmNfYWxnb3JpdGhtID0ga2V5X3R5cGU7Ci0JCXJ0bHByaXYtPmNmZy0+b3BzLT5lbmFibGVfaHdfc2VjKGh3KTsKKworCS8qIHdlcCBhbHdheXMgYmUgZ3JvdXAga2V5LCBidXQgdGhlcmUgYXJlIHR3byBjb25kaXRpb25zOgorCSAqIDEpIHdlcCBvbmx5OiBpcyBqdXN0IGZvciB3ZXAgZW5jLCBpbiB0aGlzIGNvbmRpdGlvbgorCSAqIHJ0bHByaXYtPnNlYy5wYWlyd2lzZV9lbmNfYWxnb3JpdGhtID09IE5PX0VOQ1JZUFRJT04KKwkgKiB3aWxsIGJlIHRydWUgJiBlbmFibGVfaHdfc2VjIHdpbGwgYmUgc2V0IHdoZW4gd2VwCisJICoga2Ugc2V0dGluZy4KKwkgKiAyKSB3ZXAoZ3JvdXApICsgQUVTKHBhaXJ3aXNlKTogc29tZSBBUCBsaWtlIGNpc2NvCisJICogbWF5IHVzZSBpdCwgaW4gdGhpcyBjb25kaXRpb24gZW5hYmxlX2h3X3NlYyB3aWxsIG5vdAorCSAqIGJlIHNldCB3aGVuIHdlcCBrZXkgc2V0dGluZyAqLworCS8qIHdlIG11c3QgcmVzZXQgc2VjX2luZm8gYWZ0ZXIgbGluZ2tlZCBiZWZvcmUgc2V0IGtleSwKKwkgKiBvciBzb21lIGZsYWcgd2lsbCBiZSB3cm9uZyovCisJaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJCWlmICghZ3JvdXBfa2V5IHx8IGtleV90eXBlID09IFdFUDQwX0VOQ1JZUFRJT04gfHwKKwkJCWtleV90eXBlID09IFdFUDEwNF9FTkNSWVBUSU9OKSB7CisJCQlpZiAoZ3JvdXBfa2V5KQorCQkJCXdlcF9vbmx5ID0gdHJ1ZTsKKwkJCXJ0bHByaXYtPmNmZy0+b3BzLT5lbmFibGVfaHdfc2VjKGh3KTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICgoIWdyb3VwX2tleSkgfHwgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB8fAorCQkgICAgIHJ0bHByaXYtPnNlYy5wYWlyd2lzZV9lbmNfYWxnb3JpdGhtID09IE5PX0VOQ1JZUFRJT04pIHsKKwkJCWlmIChydGxwcml2LT5zZWMucGFpcndpc2VfZW5jX2FsZ29yaXRobSA9PQorCQkJICAgIE5PX0VOQ1JZUFRJT04gJiYKKwkJCSAgICAoa2V5X3R5cGUgPT0gV0VQNDBfRU5DUllQVElPTiB8fAorCQkJICAgIGtleV90eXBlID09IFdFUDEwNF9FTkNSWVBUSU9OKSkKKwkJCQl3ZXBfb25seSA9IHRydWU7CisJCQlydGxwcml2LT5zZWMucGFpcndpc2VfZW5jX2FsZ29yaXRobSA9IGtleV90eXBlOworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywKKwkJCQkoInNldCBlbmFibGVfaHdfc2VjLCBrZXlfdHlwZToleChPUEVOOjAgV0VQNDA6MSIKKwkJCQkiIFRLSVA6MiBBRVM6NCBXRVAxMDQ6NSlcbiIsIGtleV90eXBlKSk7CisJCQlydGxwcml2LT5jZmctPm9wcy0+ZW5hYmxlX2h3X3NlYyhodyk7CisJCX0KIAl9CiAJLyogPDQ+IHNldCBrZXkgYmFzZWQgb24gY21kICovCiAJc3dpdGNoIChjbWQpIHsKQEAgLTkzMiw2ICsxMDIyLDcgQEAKIAkJCWlmICghc3RhKSB7CiAJCQkJUlRfQVNTRVJUKGZhbHNlLCAoInBhaXJ3aXNlIGtleSB3aXRobm90IgogCQkJCQkJICAibWFjX2FkZHJcbiIpKTsKKwogCQkJCWVyciA9IC1FT1BOT1RTVVBQOwogCQkJCWdvdG8gb3V0X3VubG9jazsKIAkJCX0KQEAgLTk1OSw2ICsxMDUwLDEwIEBACiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfRE1FU0csCiAJCQkgKCJkaXNhYmxlIGtleSBkZWxldGUgb25lIGVudHJ5XG4iKSk7CiAJCS8qc2V0IGxvY2FsIGJ1ZiBhYm91dCB3ZXAga2V5LiAqLworCQlpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwkJCWlmIChzdGEpCisJCQkJcnRsX2NhbV9kZWxfZW50cnkoaHcsIHN0YS0+YWRkcik7CisJCX0KIAkJbWVtc2V0KHJ0bHByaXYtPnNlYy5rZXlfYnVmW2tleV9pZHhdLCAwLCBrZXktPmtleWxlbik7CiAJCXJ0bHByaXYtPnNlYy5rZXlfbGVuW2tleV9pZHhdID0gMDsKIAkJbWVtY3B5KG1hY19hZGRyLCB6ZXJvX2FkZHIsIEVUSF9BTEVOKTsKQEAgLTEwMTEsNiArMTEwNiwxOCBAQAogCW11dGV4X3VubG9jaygmcnRscHJpdi0+bG9ja3MuY29uZl9tdXRleCk7CiB9CiAKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IG1hYzgwMjExIHRvIGZsdXNoIHR4IGJ1ZmZlcgorICogYmVmb3JlIHN3aXRjaCBjaGFubmxlIG9yIHBvd2VyIHNhdmUsIG9yIHR4IGJ1ZmZlciBwYWNrZXQKKyAqIG1heWJlIHNlbmQgYWZ0ZXIgb2ZmY2hhbm5lbCBvciByZiBzbGVlcCwgdGhpcyBtYXkgY2F1c2UKKyAqIGRpcy1hc3NvY2lhdGlvbiBieSBBUCAqLworc3RhdGljIHZvaWQgcnRsX29wX2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGRyb3ApCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCisJaWYgKHJ0bHByaXYtPmludGZfb3BzLT5mbHVzaCkKKwkJcnRscHJpdi0+aW50Zl9vcHMtPmZsdXNoKGh3LCBkcm9wKTsKK30KKwogY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgcnRsX29wcyA9IHsKIAkuc3RhcnQgPSBydGxfb3Bfc3RhcnQsCiAJLnN0b3AgPSBydGxfb3Bfc3RvcCwKQEAgLTEwMTksNiArMTEyNiw4IEBACiAJLnJlbW92ZV9pbnRlcmZhY2UgPSBydGxfb3BfcmVtb3ZlX2ludGVyZmFjZSwKIAkuY29uZmlnID0gcnRsX29wX2NvbmZpZywKIAkuY29uZmlndXJlX2ZpbHRlciA9IHJ0bF9vcF9jb25maWd1cmVfZmlsdGVyLAorCS5zdGFfYWRkID0gcnRsX29wX3N0YV9hZGQsCisJLnN0YV9yZW1vdmUgPSBydGxfb3Bfc3RhX3JlbW92ZSwKIAkuc2V0X2tleSA9IHJ0bF9vcF9zZXRfa2V5LAogCS5jb25mX3R4ID0gcnRsX29wX2NvbmZfdHgsCiAJLmJzc19pbmZvX2NoYW5nZWQgPSBydGxfb3BfYnNzX2luZm9fY2hhbmdlZCwKQEAgLTEwMzAsNCArMTEzOSw1IEBACiAJLnN3X3NjYW5fc3RhcnQgPSBydGxfb3Bfc3dfc2Nhbl9zdGFydCwKIAkuc3dfc2Nhbl9jb21wbGV0ZSA9IHJ0bF9vcF9zd19zY2FuX2NvbXBsZXRlLAogCS5yZmtpbGxfcG9sbCA9IHJ0bF9vcF9yZmtpbGxfcG9sbCwKKwkuZmx1c2ggPSBydGxfb3BfZmx1c2gsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9jb3JlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2NvcmUuaAppbmRleCAwZWYzMWMzYy4uNGIyNDdkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9jb3JlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9jb3JlLmgKQEAgLTI0LDYgKzI0LDcgQEAKICAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCiAgKgogICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2lmbmRlZiBfX1JUTF9DT1JFX0hfXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9lZnVzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9lZnVzZS5jCmluZGV4IDU5MGYxNGYuLjUwZGU2ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvZWZ1c2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2VmdXNlLmMKQEAgLTUyLDggKzUyLDYgQEAKIAl7MTEsIDAsIDAsIDI4fQogfTsKIAotc3RhdGljIHZvaWQgcmVhZF9lZnVzZV9ieXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgX29mZnNldCwKLQkJCQkJdTggKnBidWYpOwogc3RhdGljIHZvaWQgZWZ1c2Vfc2hhZG93X3JlYWRfMWJ5dGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBvZmZzZXQsCiAJCQkJICAgIHU4ICp2YWx1ZSk7CiBzdGF0aWMgdm9pZCBlZnVzZV9zaGFkb3dfcmVhZF8yYnl0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IG9mZnNldCwKQEAgLTc5LDcgKzc3LDcgQEAKIAkJCQkJdTggKnRhcmdldGRhdGEpOwogc3RhdGljIHU4IGVmdXNlX3dvcmRfZW5hYmxlX2RhdGFfd3JpdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJICAgICAgIHUxNiBlZnVzZV9hZGRyLCB1OCB3b3JkX2VuLCB1OCAqZGF0YSk7Ci1zdGF0aWMgdm9pZCBlZnVzZV9wb3dlcl9zd2l0Y2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGJ3cml0ZSwKK3N0YXRpYyB2b2lkIGVmdXNlX3Bvd2VyX3N3aXRjaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggd3JpdGUsCiAJCQkJCXU4IHB3cnN0YXRlKTsKIHN0YXRpYyB1MTYgZWZ1c2VfZ2V0X2N1cnJlbnRfc2l6ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiBzdGF0aWMgdTggZWZ1c2VfY2FsY3VsYXRlX3dvcmRfY250cyh1OCB3b3JkX2VuKTsKQEAgLTExNSw4ICsxMTMsMTAgQEAKIAl1OCBieXRldGVtcDsKIAl1OCB0ZW1wOwogCXUzMiBrID0gMDsKKwljb25zdCB1MzIgZWZ1c2VfbGVuID0KKwkJcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX1JFQUxfQ09OVEVOVF9TSVpFXTsKIAotCWlmIChhZGRyZXNzIDwgRUZVU0VfUkVBTF9DT05URU5UX0xFTikgeworCWlmIChhZGRyZXNzIDwgZWZ1c2VfbGVuKSB7CiAJCXRlbXAgPSBhZGRyZXNzICYgMHhGRjsKIAkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0NUUkxdICsgMSwKIAkJCSAgICAgICB0ZW1wKTsKQEAgLTE1OCwxMSArMTU4LDEzIEBACiAJdTggYnl0ZXRlbXA7CiAJdTggdGVtcDsKIAl1MzIgayA9IDA7CisJY29uc3QgdTMyIGVmdXNlX2xlbiA9CisJCXJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9SRUFMX0NPTlRFTlRfU0laRV07CiAKIAlSVF9UUkFDRShydGxwcml2LCBDT01QX0VGVVNFLCBEQkdfTE9VRCwKIAkJICgiQWRkcj0leCBEYXRhID0leFxuIiwgYWRkcmVzcywgdmFsdWUpKTsKIAotCWlmIChhZGRyZXNzIDwgRUZVU0VfUkVBTF9DT05URU5UX0xFTikgeworCWlmIChhZGRyZXNzIDwgZWZ1c2VfbGVuKSB7CiAJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9DVFJMXSwgdmFsdWUpOwogCiAJCXRlbXAgPSBhZGRyZXNzICYgMHhGRjsKQEAgLTE5OCw3ICsyMDAsNyBAQAogCiB9CiAKLXN0YXRpYyB2b2lkIHJlYWRfZWZ1c2VfYnl0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IF9vZmZzZXQsIHU4ICpwYnVmKQordm9pZCByZWFkX2VmdXNlX2J5dGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBfb2Zmc2V0LCB1OCAqcGJ1ZikKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJdTMyIHZhbHVlMzI7CkBAIC0yMzMsMjYgKzIzNSw0NSBAQAogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOwotCXU4IGVmdXNlX3RibFtFRlVTRV9NQVBfTEVOXTsKKwl1OCAqZWZ1c2VfdGJsOwogCXU4IHJ0ZW1wOFsxXTsKIAl1MTYgZWZ1c2VfYWRkciA9IDA7CiAJdTggb2Zmc2V0LCB3cmVuOwogCXUxNiBpOwogCXUxNiBqOwotCXUxNiBlZnVzZV93b3JkW0VGVVNFX01BWF9TRUNUSU9OXVtFRlVTRV9NQVhfV09SRF9VTklUXTsKKwljb25zdCB1MTYgZWZ1c2VfbWF4X3NlY3Rpb24gPQorCQlydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfTUFYX1NFQ1RJT05fTUFQXTsKKwljb25zdCB1MzIgZWZ1c2VfbGVuID0KKwkJcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX1JFQUxfQ09OVEVOVF9TSVpFXTsKKwl1MTYgKiplZnVzZV93b3JkOwogCXUxNiBlZnVzZV91dGlsaXplZCA9IDA7CiAJdTggZWZ1c2VfdXNhZ2U7CiAKLQlpZiAoKF9vZmZzZXQgKyBfc2l6ZV9ieXRlKSA+IEVGVVNFX01BUF9MRU4pIHsKKwlpZiAoKF9vZmZzZXQgKyBfc2l6ZV9ieXRlKSA+IHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9IV1NFVF9NQVhfU0laRV0pIHsKIAkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FRlVTRSwgREJHX0xPVUQsCiAJCQkgKCJyZWFkX2VmdXNlKCk6IEludmFsaWQgb2Zmc2V0KCUjeCkgd2l0aCByZWFkICIKIAkJCSAgImJ5dGVzKCUjeCkhIVxuIiwgX29mZnNldCwgX3NpemVfYnl0ZSkpOwogCQlyZXR1cm47CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IEVGVVNFX01BWF9TRUNUSU9OOyBpKyspCisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBlZnVzZV90YmwgYW5kIGVmdXNlX3dvcmQgKi8KKwllZnVzZV90YmwgPSBrbWFsbG9jKHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9IV1NFVF9NQVhfU0laRV0gKgorCQkJICAgIHNpemVvZih1OCksIEdGUF9BVE9NSUMpOworCWlmICghZWZ1c2VfdGJsKQorCQlyZXR1cm47CisJZWZ1c2Vfd29yZCA9IGttYWxsb2MoRUZVU0VfTUFYX1dPUkRfVU5JVCAqIHNpemVvZih1MTYgKiksIEdGUF9BVE9NSUMpOworCWlmICghZWZ1c2Vfd29yZCkKKwkJZ290byBkb25lOworCWZvciAoaSA9IDA7IGkgPCBFRlVTRV9NQVhfV09SRF9VTklUOyBpKyspIHsKKwkJZWZ1c2Vfd29yZFtpXSA9IGttYWxsb2MoZWZ1c2VfbWF4X3NlY3Rpb24gKiBzaXplb2YodTE2KSwKKwkJCQkJR0ZQX0FUT01JQyk7CisJCWlmICghZWZ1c2Vfd29yZFtpXSkKKwkJCWdvdG8gZG9uZTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZWZ1c2VfbWF4X3NlY3Rpb247IGkrKykKIAkJZm9yIChqID0gMDsgaiA8IEVGVVNFX01BWF9XT1JEX1VOSVQ7IGorKykKLQkJCWVmdXNlX3dvcmRbaV1bal0gPSAweEZGRkY7CisJCQllZnVzZV93b3JkW2pdW2ldID0gMHhGRkZGOwogCiAJcmVhZF9lZnVzZV9ieXRlKGh3LCBlZnVzZV9hZGRyLCBydGVtcDgpOwogCWlmICgqcnRlbXA4ICE9IDB4RkYpIHsKQEAgLTI2MiwxMCArMjgzLDEwIEBACiAJCWVmdXNlX2FkZHIrKzsKIAl9CiAKLQl3aGlsZSAoKCpydGVtcDggIT0gMHhGRikgJiYgKGVmdXNlX2FkZHIgPCBFRlVTRV9SRUFMX0NPTlRFTlRfTEVOKSkgeworCXdoaWxlICgoKnJ0ZW1wOCAhPSAweEZGKSAmJiAoZWZ1c2VfYWRkciA8IGVmdXNlX2xlbikpIHsKIAkJb2Zmc2V0ID0gKCgqcnRlbXA4ID4+IDQpICYgMHgwZik7CiAKLQkJaWYgKG9mZnNldCA8IEVGVVNFX01BWF9TRUNUSU9OKSB7CisJCWlmIChvZmZzZXQgPCBlZnVzZV9tYXhfc2VjdGlvbikgewogCQkJd3JlbiA9ICgqcnRlbXA4ICYgMHgwZik7CiAJCQlSVFBSSU5UKHJ0bHByaXYsIEZFRVBST00sIEVGVVNFX1JFQURfQUxMLAogCQkJCSgib2Zmc2V0LSVkIFdvcmRlbj0leFxuIiwgb2Zmc2V0LCB3cmVuKSk7CkBAIC0yNzksOSArMzAwLDEwIEBACiAJCQkJCXJlYWRfZWZ1c2VfYnl0ZShodywgZWZ1c2VfYWRkciwgcnRlbXA4KTsKIAkJCQkJZWZ1c2VfYWRkcisrOwogCQkJCQllZnVzZV91dGlsaXplZCsrOwotCQkJCQllZnVzZV93b3JkW29mZnNldF1baV0gPSAoKnJ0ZW1wOCAmIDB4ZmYpOworCQkJCQllZnVzZV93b3JkW2ldW29mZnNldF0gPQorCQkJCQkJCSAoKnJ0ZW1wOCAmIDB4ZmYpOwogCi0JCQkJCWlmIChlZnVzZV9hZGRyID49IEVGVVNFX1JFQUxfQ09OVEVOVF9MRU4pCisJCQkJCWlmIChlZnVzZV9hZGRyID49IGVmdXNlX2xlbikKIAkJCQkJCWJyZWFrOwogCiAJCQkJCVJUUFJJTlQocnRscHJpdiwgRkVFUFJPTSwKQEAgLTI5MSwxMCArMzEzLDEwIEBACiAJCQkJCXJlYWRfZWZ1c2VfYnl0ZShodywgZWZ1c2VfYWRkciwgcnRlbXA4KTsKIAkJCQkJZWZ1c2VfYWRkcisrOwogCQkJCQllZnVzZV91dGlsaXplZCsrOwotCQkJCQllZnVzZV93b3JkW29mZnNldF1baV0gfD0KKwkJCQkJZWZ1c2Vfd29yZFtpXVtvZmZzZXRdIHw9CiAJCQkJCSAgICAoKCh1MTYpKnJ0ZW1wOCA8PCA4KSAmIDB4ZmYwMCk7CiAKLQkJCQkJaWYgKGVmdXNlX2FkZHIgPj0gRUZVU0VfUkVBTF9DT05URU5UX0xFTikKKwkJCQkJaWYgKGVmdXNlX2FkZHIgPj0gZWZ1c2VfbGVuKQogCQkJCQkJYnJlYWs7CiAJCQkJfQogCkBAIC0zMDUsMTggKzMyNywxOCBAQAogCQlSVFBSSU5UKHJ0bHByaXYsIEZFRVBST00sIEVGVVNFX1JFQURfQUxMLAogCQkJKCJBZGRyPSVkXG4iLCBlZnVzZV9hZGRyKSk7CiAJCXJlYWRfZWZ1c2VfYnl0ZShodywgZWZ1c2VfYWRkciwgcnRlbXA4KTsKLQkJaWYgKCpydGVtcDggIT0gMHhGRiAmJiAoZWZ1c2VfYWRkciA8IDUxMikpIHsKKwkJaWYgKCpydGVtcDggIT0gMHhGRiAmJiAoZWZ1c2VfYWRkciA8IGVmdXNlX2xlbikpIHsKIAkJCWVmdXNlX3V0aWxpemVkKys7CiAJCQllZnVzZV9hZGRyKys7CiAJCX0KIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgRUZVU0VfTUFYX1NFQ1RJT047IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBlZnVzZV9tYXhfc2VjdGlvbjsgaSsrKSB7CiAJCWZvciAoaiA9IDA7IGogPCBFRlVTRV9NQVhfV09SRF9VTklUOyBqKyspIHsKIAkJCWVmdXNlX3RibFsoaSAqIDgpICsgKGogKiAyKV0gPQotCQkJICAgIChlZnVzZV93b3JkW2ldW2pdICYgMHhmZik7CisJCQkgICAgKGVmdXNlX3dvcmRbal1baV0gJiAweGZmKTsKIAkJCWVmdXNlX3RibFsoaSAqIDgpICsgKChqICogMikgKyAxKV0gPQotCQkJICAgICgoZWZ1c2Vfd29yZFtpXVtqXSA+PiA4KSAmIDB4ZmYpOworCQkJICAgICgoZWZ1c2Vfd29yZFtqXVtpXSA+PiA4KSAmIDB4ZmYpOwogCQl9CiAJfQogCkBAIC0zMjQsMTIgKzM0NiwxNyBAQAogCQlwYnVmW2ldID0gZWZ1c2VfdGJsW19vZmZzZXQgKyBpXTsKIAogCXJ0bGVmdXNlLT5lZnVzZV91c2VkYnl0ZXMgPSBlZnVzZV91dGlsaXplZDsKLQllZnVzZV91c2FnZSA9ICh1OCkoKGVmdXNlX3V0aWxpemVkICogMTAwKSAvIEVGVVNFX1JFQUxfQ09OVEVOVF9MRU4pOworCWVmdXNlX3VzYWdlID0gKHU4KSAoKGVmdXNlX3V0aWxpemVkICogMTAwKSAvIGVmdXNlX2xlbik7CiAJcnRsZWZ1c2UtPmVmdXNlX3VzZWRwZXJjZW50YWdlID0gZWZ1c2VfdXNhZ2U7CiAJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9FRlVTRV9CWVRFUywKIAkJCQkgICAgICAodTggKikmZWZ1c2VfdXRpbGl6ZWQpOwogCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfRUZVU0VfVVNBR0UsCiAJCQkJICAgICAgKHU4ICopJmVmdXNlX3VzYWdlKTsKK2RvbmU6CisJZm9yIChpID0gMDsgaSA8IEVGVVNFX01BWF9XT1JEX1VOSVQ7IGkrKykKKwkJa2ZyZWUoZWZ1c2Vfd29yZFtpXSk7CisJa2ZyZWUoZWZ1c2Vfd29yZCk7CisJa2ZyZWUoZWZ1c2VfdGJsKTsKIH0KIAogYm9vbCBlZnVzZV9zaGFkb3dfdXBkYXRlX2NoayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKQEAgLTMzOCwxMSArMzY1LDExIEBACiAJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKIAl1OCBzZWN0aW9uX2lkeCwgaSwgQmFzZTsKIAl1MTYgd29yZHNfbmVlZCA9IDAsIGhkcl9udW0gPSAwLCB0b3RhbGJ5dGVzLCBlZnVzZV91c2VkOwotCWJvb2wgYndvcmRjaGFuZ2VkLCBicmVzdWx0ID0gdHJ1ZTsKKwlib29sIHdvcmRjaGFuZ2VkLCByZXN1bHQgPSB0cnVlOwogCiAJZm9yIChzZWN0aW9uX2lkeCA9IDA7IHNlY3Rpb25faWR4IDwgMTY7IHNlY3Rpb25faWR4KyspIHsKIAkJQmFzZSA9IHNlY3Rpb25faWR4ICogODsKLQkJYndvcmRjaGFuZ2VkID0gZmFsc2U7CisJCXdvcmRjaGFuZ2VkID0gZmFsc2U7CiAKIAkJZm9yIChpID0gMDsgaSA8IDg7IGkgPSBpICsgMikgewogCQkJaWYgKChydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX0lOSVRfTUFQXVtCYXNlICsgaV0gIT0KQEAgLTM1MSwxMSArMzc4LDExIEBACiAJCQkgICAgIHJ0bGVmdXNlLT5lZnVzZV9tYXBbRUZVU0VfTU9ESUZZX01BUF1bQmFzZSArIGkgKwogCQkJCQkJCQkgICAxXSkpIHsKIAkJCQl3b3Jkc19uZWVkKys7Ci0JCQkJYndvcmRjaGFuZ2VkID0gdHJ1ZTsKKwkJCQl3b3JkY2hhbmdlZCA9IHRydWU7CiAJCQl9CiAJCX0KIAotCQlpZiAoYndvcmRjaGFuZ2VkID09IHRydWUpCisJCWlmICh3b3JkY2hhbmdlZCA9PSB0cnVlKQogCQkJaGRyX251bSsrOwogCX0KIApAQCAtMzY0LDE0ICszOTEsMTQgQEAKIAogCWlmICgodG90YWxieXRlcyArIGVmdXNlX3VzZWQpID49CiAJICAgIChFRlVTRV9NQVhfU0laRSAtIEVGVVNFX09PQl9QUk9URUNUX0JZVEVTKSkKLQkJYnJlc3VsdCA9IGZhbHNlOworCQlyZXN1bHQgPSBmYWxzZTsKIAogCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRUZVU0UsIERCR19MT1VELAogCQkgKCJlZnVzZV9zaGFkb3dfdXBkYXRlX2NoaygpOiB0b3RhbGJ5dGVzKCUjeCksICIKIAkJICAiaGRyX251bSglI3gpLCB3b3Jkc19uZWVkKCUjeCksIGVmdXNlX3VzZWQoJWQpXG4iLAogCQkgIHRvdGFsYnl0ZXMsIGhkcl9udW0sIHdvcmRzX25lZWQsIGVmdXNlX3VzZWQpKTsKIAotCXJldHVybiBicmVzdWx0OworCXJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgZWZ1c2Vfc2hhZG93X3JlYWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHR5cGUsCkBAIC0zOTQsNyArNDIxLDcgQEAKIAllbHNlIGlmICh0eXBlID09IDIpCiAJCWVmdXNlX3NoYWRvd193cml0ZV8yYnl0ZShodywgb2Zmc2V0LCAodTE2KSB2YWx1ZSk7CiAJZWxzZSBpZiAodHlwZSA9PSA0KQotCQllZnVzZV9zaGFkb3dfd3JpdGVfNGJ5dGUoaHcsIG9mZnNldCwgKHUzMikgdmFsdWUpOworCQllZnVzZV9zaGFkb3dfd3JpdGVfNGJ5dGUoaHcsIG9mZnNldCwgdmFsdWUpOwogCiB9CiAKQEAgLTQ3OCw5ICs1MDUsMTAgQEAKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKIAotCWlmIChydGxlZnVzZS0+YXV0b2xvYWRfZmFpbGZsYWcgPT0gdHJ1ZSkgewotCQltZW1zZXQoJnJ0bGVmdXNlLT5lZnVzZV9tYXBbRUZVU0VfSU5JVF9NQVBdWzBdLCAweEZGLCAxMjgpOwotCX0gZWxzZQorCWlmIChydGxlZnVzZS0+YXV0b2xvYWRfZmFpbGZsYWcgPT0gdHJ1ZSkKKwkJbWVtc2V0KCZydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX0lOSVRfTUFQXVswXSwgMHhGRiwKKwkJCXJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9IV1NFVF9NQVhfU0laRV0pOworCWVsc2UKIAkJZWZ1c2VfcmVhZF9hbGxfbWFwKGh3LCAmcnRsZWZ1c2UtPmVmdXNlX21hcFtFRlVTRV9JTklUX01BUF1bMF0pOwogCiAJbWVtY3B5KCZydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX01PRElGWV9NQVBdWzBdLApAQCAtNTcyLDcgKzYwMCw3IEBACiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXU4IHRtcGlkeCA9IDA7Ci0JaW50IGJyZXN1bHQ7CisJaW50IHJlc3VsdDsKIAogCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9DVFJMXSArIDEsCiAJCSAgICAgICAodTgpIChhZGRyICYgMHhmZikpOwpAQCAtNTkyLDE5ICs2MjAsMTggQEAKIAogCWlmICh0bXBpZHggPCAxMDApIHsKIAkJKmRhdGEgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9DVFJMXSk7Ci0JCWJyZXN1bHQgPSB0cnVlOworCQlyZXN1bHQgPSB0cnVlOwogCX0gZWxzZSB7CiAJCSpkYXRhID0gMHhmZjsKLQkJYnJlc3VsdCA9IGZhbHNlOworCQlyZXN1bHQgPSBmYWxzZTsKIAl9Ci0JcmV0dXJuIGJyZXN1bHQ7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGludCBlZnVzZV9vbmVfYnl0ZV93cml0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IGFkZHIsIHU4IGRhdGEpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXU4IHRtcGlkeCA9IDA7Ci0JYm9vbCBicmVzdWx0OwogCiAJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FRlVTRSwgREJHX0xPVUQsCiAJCSAoIkFkZHIgPSAleCBEYXRhPSV4XG4iLCBhZGRyLCBkYXRhKSk7CkBAIC02MjYsMTcgKzY1MywxNiBAQAogCX0KIAogCWlmICh0bXBpZHggPCAxMDApCi0JCWJyZXN1bHQgPSB0cnVlOwotCWVsc2UKLQkJYnJlc3VsdCA9IGZhbHNlOworCQlyZXR1cm4gdHJ1ZTsKIAotCXJldHVybiBicmVzdWx0OworCXJldHVybiBmYWxzZTsKIH0KIAogc3RhdGljIHZvaWQgZWZ1c2VfcmVhZF9hbGxfbWFwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqIGVmdXNlKQogeworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAllZnVzZV9wb3dlcl9zd2l0Y2goaHcsIGZhbHNlLCB0cnVlKTsKLQlyZWFkX2VmdXNlKGh3LCAwLCAxMjgsIGVmdXNlKTsKKwlyZWFkX2VmdXNlKGh3LCAwLCBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfSFdTRVRfTUFYX1NJWkVdLCBlZnVzZSk7CiAJZWZ1c2VfcG93ZXJfc3dpdGNoKGh3LCBmYWxzZSwgZmFsc2UpOwogfQogCkBAIC02NDQsNyArNjcwLDcgQEAKIAkJCQl1OCBlZnVzZV9kYXRhLCB1OCBvZmZzZXQsIHU4ICp0bXBkYXRhLAogCQkJCXU4ICpyZWFkc3RhdGUpCiB7Ci0JYm9vbCBiZGF0YWVtcHR5ID0gdHJ1ZTsKKwlib29sIGRhdGFlbXB0eSA9IHRydWU7CiAJdTggaG9mZnNldDsKIAl1OCB0bXBpZHg7CiAJdTggaHdvcmRlbjsKQEAgLTY2MCwxMyArNjg2LDEzIEBACiAJCQkgICAgJmVmdXNlX2RhdGEpKSB7CiAJCQkJdG1wZGF0YVt0bXBpZHhdID0gZWZ1c2VfZGF0YTsKIAkJCQlpZiAoZWZ1c2VfZGF0YSAhPSAweGZmKQotCQkJCQliZGF0YWVtcHR5ID0gdHJ1ZTsKKwkJCQkJZGF0YWVtcHR5ID0gdHJ1ZTsKIAkJCX0KIAkJfQogCi0JCWlmIChiZGF0YWVtcHR5ID09IHRydWUpCisJCWlmIChkYXRhZW1wdHkgPT0gdHJ1ZSkgewogCQkJKnJlYWRzdGF0ZSA9IFBHX1NUQVRFX0RBVEE7Ci0JCWVsc2UgeworCQl9IGVsc2UgewogCQkJKmVmdXNlX2FkZHIgPSAqZWZ1c2VfYWRkciArICh3b3JkX2NudHMgKiAyKSArIDE7CiAJCQkqcmVhZHN0YXRlID0gUEdfU1RBVEVfSEVBREVSOwogCQl9CkBAIC02ODAsMTIgKzcwNiw5IEBACiBzdGF0aWMgaW50IGVmdXNlX3BnX3BhY2tldF9yZWFkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBvZmZzZXQsIHU4ICpkYXRhKQogewogCXU4IHJlYWRzdGF0ZSA9IFBHX1NUQVRFX0hFQURFUjsKLQotCWJvb2wgYmNvbnRpbnVhbCA9IHRydWU7Ci0KKwlib29sIGNvbnRpbnVhbCA9IHRydWU7CiAJdTggZWZ1c2VfZGF0YSwgd29yZF9jbnRzID0gMDsKIAl1MTYgZWZ1c2VfYWRkciA9IDA7Ci0JdTggaHdvcmRlbiA9IDA7CiAJdTggdG1wZGF0YVs4XTsKIAogCWlmIChkYXRhID09IE5VTEwpCkBAIC02OTYsNyArNzE5LDcgQEAKIAltZW1zZXQoZGF0YSwgMHhmZiwgUEdQS1RfREFUQV9TSVpFICogc2l6ZW9mKHU4KSk7CiAJbWVtc2V0KHRtcGRhdGEsIDB4ZmYsIFBHUEtUX0RBVEFfU0laRSAqIHNpemVvZih1OCkpOwogCi0Jd2hpbGUgKGJjb250aW51YWwgJiYgKGVmdXNlX2FkZHIgPCBFRlVTRV9NQVhfU0laRSkpIHsKKwl3aGlsZSAoY29udGludWFsICYmIChlZnVzZV9hZGRyIDwgRUZVU0VfTUFYX1NJWkUpKSB7CiAJCWlmIChyZWFkc3RhdGUgJiBQR19TVEFURV9IRUFERVIpIHsKIAkJCWlmIChlZnVzZV9vbmVfYnl0ZV9yZWFkKGh3LCBlZnVzZV9hZGRyLCAmZWZ1c2VfZGF0YSkKIAkJCSAgICAmJiAoZWZ1c2VfZGF0YSAhPSAweEZGKSkKQEAgLTcwNSw5ICs3MjgsOSBAQAogCQkJCQkJICAgICAgb2Zmc2V0LCB0bXBkYXRhLAogCQkJCQkJICAgICAgJnJlYWRzdGF0ZSk7CiAJCQllbHNlCi0JCQkJYmNvbnRpbnVhbCA9IGZhbHNlOworCQkJCWNvbnRpbnVhbCA9IGZhbHNlOwogCQl9IGVsc2UgaWYgKHJlYWRzdGF0ZSAmIFBHX1NUQVRFX0RBVEEpIHsKLQkJCWVmdXNlX3dvcmRfZW5hYmxlX2RhdGFfcmVhZChod29yZGVuLCB0bXBkYXRhLCBkYXRhKTsKKwkJCWVmdXNlX3dvcmRfZW5hYmxlX2RhdGFfcmVhZCgwLCB0bXBkYXRhLCBkYXRhKTsKIAkJCWVmdXNlX2FkZHIgPSBlZnVzZV9hZGRyICsgKHdvcmRfY250cyAqIDIpICsgMTsKIAkJCXJlYWRzdGF0ZSA9IFBHX1NUQVRFX0hFQURFUjsKIAkJfQpAQCAtNzI1LDEzICs3NDgsMTMgQEAKIH0KIAogc3RhdGljIHZvaWQgZWZ1c2Vfd3JpdGVfZGF0YV9jYXNlMShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2ICplZnVzZV9hZGRyLAotCQkJdTggZWZ1c2VfZGF0YSwgdTggb2Zmc2V0LCBpbnQgKmJjb250aW51YWwsCisJCQl1OCBlZnVzZV9kYXRhLCB1OCBvZmZzZXQsIGludCAqY29udGludWFsLAogCQkJdTggKndyaXRlX3N0YXRlLCBzdHJ1Y3QgcGdwa3Rfc3RydWN0ICp0YXJnZXRfcGt0LAotCQkJaW50ICpyZXBlYXRfdGltZXMsIGludCAqYnJlc3VsdCwgdTggd29yZF9lbikKKwkJCWludCAqcmVwZWF0X3RpbWVzLCBpbnQgKnJlc3VsdCwgdTggd29yZF9lbikKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHBncGt0X3N0cnVjdCB0bXBfcGt0OwotCWludCBiZGF0YWVtcHR5ID0gdHJ1ZTsKKwlib29sIGRhdGFlbXB0eSA9IHRydWU7CiAJdTggb3JpZ2luYWxkYXRhWzggKiBzaXplb2YodTgpXTsKIAl1OCBiYWR3b3JkZW4gPSAweDBGOwogCXU4IG1hdGNoX3dvcmRfZW4sIHRtcF93b3JkX2VuOwpAQCAtNzUxLDEwICs3NzQsMTAgQEAKIAkJCXUxNiBhZGRyZXNzID0gKmVmdXNlX2FkZHIgKyAxICsgdG1waW5kZXg7CiAJCQlpZiAoZWZ1c2Vfb25lX2J5dGVfcmVhZChodywgYWRkcmVzcywKIAkJCSAgICAgJmVmdXNlX2RhdGEpICYmIChlZnVzZV9kYXRhICE9IDB4RkYpKQotCQkJCWJkYXRhZW1wdHkgPSBmYWxzZTsKKwkJCQlkYXRhZW1wdHkgPSBmYWxzZTsKIAkJfQogCi0JCWlmIChiZGF0YWVtcHR5ID09IGZhbHNlKSB7CisJCWlmIChkYXRhZW1wdHkgPT0gZmFsc2UpIHsKIAkJCSplZnVzZV9hZGRyID0gKmVmdXNlX2FkZHIgKyAodG1wX3dvcmRfY250cyAqIDIpICsgMTsKIAkJCSp3cml0ZV9zdGF0ZSA9IFBHX1NUQVRFX0hFQURFUjsKIAkJfSBlbHNlIHsKQEAgLTc5OSwyNCArODIyLDI1IEBACiAJCQkJCXRtcF93b3JkX2VuICY9ICh+QklUKDEpKTsKIAogCQkJCWlmICgodGFyZ2V0X3BrdC0+d29yZF9lbiAmIEJJVCgyKSkgXgotCQkJCQkobWF0Y2hfd29yZF9lbiAmIEJJVCgyKSkpCisJCQkJICAgICAobWF0Y2hfd29yZF9lbiAmIEJJVCgyKSkpCiAJCQkJCXRtcF93b3JkX2VuICY9ICh+QklUKDIpKTsKIAogCQkJCWlmICgodGFyZ2V0X3BrdC0+d29yZF9lbiAmIEJJVCgzKSkgXgotCQkJCSAgICAobWF0Y2hfd29yZF9lbiAmIEJJVCgzKSkpCisJCQkJICAgICAobWF0Y2hfd29yZF9lbiAmIEJJVCgzKSkpCiAJCQkJCXRtcF93b3JkX2VuICY9ICh+QklUKDMpKTsKIAogCQkJCWlmICgodG1wX3dvcmRfZW4gJiAweDBGKSAhPSAweDBGKSB7CiAJCQkJCSplZnVzZV9hZGRyID0gZWZ1c2VfZ2V0X2N1cnJlbnRfc2l6ZShodyk7CiAJCQkJCXRhcmdldF9wa3QtPm9mZnNldCA9IG9mZnNldDsKIAkJCQkJdGFyZ2V0X3BrdC0+d29yZF9lbiA9IHRtcF93b3JkX2VuOwotCQkJCX0gZWxzZQotCQkJCQkqYmNvbnRpbnVhbCA9IGZhbHNlOworCQkJCX0gZWxzZSB7CisJCQkJCSpjb250aW51YWwgPSBmYWxzZTsKKwkJCQl9CiAJCQkJKndyaXRlX3N0YXRlID0gUEdfU1RBVEVfSEVBREVSOwogCQkJCSpyZXBlYXRfdGltZXMgKz0gMTsKIAkJCQlpZiAoKnJlcGVhdF90aW1lcyA+IEVGVVNFX1JFUEVBVF9USFJFU0hPTERfKSB7Ci0JCQkJCSpiY29udGludWFsID0gZmFsc2U7Ci0JCQkJCSpicmVzdWx0ID0gZmFsc2U7CisJCQkJCSpjb250aW51YWwgPSBmYWxzZTsKKwkJCQkJKnJlc3VsdCA9IGZhbHNlOwogCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJKmVmdXNlX2FkZHIgKz0gKDIgKiB0bXBfd29yZF9jbnRzKSArIDE7CkBAIC04MzAsOSArODU0LDkgQEAKIH0KIAogc3RhdGljIHZvaWQgZWZ1c2Vfd3JpdGVfZGF0YV9jYXNlMihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2ICplZnVzZV9hZGRyLAotCQkJCSAgIGludCAqYmNvbnRpbnVhbCwgdTggKndyaXRlX3N0YXRlLAorCQkJCSAgIGludCAqY29udGludWFsLCB1OCAqd3JpdGVfc3RhdGUsCiAJCQkJICAgc3RydWN0IHBncGt0X3N0cnVjdCB0YXJnZXRfcGt0LAotCQkJCSAgIGludCAqcmVwZWF0X3RpbWVzLCBpbnQgKmJyZXN1bHQpCisJCQkJICAgaW50ICpyZXBlYXRfdGltZXMsIGludCAqcmVzdWx0KQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlzdHJ1Y3QgcGdwa3Rfc3RydWN0IHRtcF9wa3Q7CkBAIC04NDYsMTQgKzg3MCwxNCBAQAogCWVmdXNlX29uZV9ieXRlX3dyaXRlKGh3LCAqZWZ1c2VfYWRkciwgcGdfaGVhZGVyKTsKIAllZnVzZV9vbmVfYnl0ZV9yZWFkKGh3LCAqZWZ1c2VfYWRkciwgJnRtcF9oZWFkZXIpOwogCi0JaWYgKHRtcF9oZWFkZXIgPT0gcGdfaGVhZGVyKQorCWlmICh0bXBfaGVhZGVyID09IHBnX2hlYWRlcikgewogCQkqd3JpdGVfc3RhdGUgPSBQR19TVEFURV9EQVRBOwotCWVsc2UgaWYgKHRtcF9oZWFkZXIgPT0gMHhGRikgeworCX0gZWxzZSBpZiAodG1wX2hlYWRlciA9PSAweEZGKSB7CiAJCSp3cml0ZV9zdGF0ZSA9IFBHX1NUQVRFX0hFQURFUjsKIAkJKnJlcGVhdF90aW1lcyArPSAxOwogCQlpZiAoKnJlcGVhdF90aW1lcyA+IEVGVVNFX1JFUEVBVF9USFJFU0hPTERfKSB7Ci0JCQkqYmNvbnRpbnVhbCA9IGZhbHNlOwotCQkJKmJyZXN1bHQgPSBmYWxzZTsKKwkJCSpjb250aW51YWwgPSBmYWxzZTsKKwkJCSpyZXN1bHQgPSBmYWxzZTsKIAkJfQogCX0gZWxzZSB7CiAJCXRtcF9wa3Qub2Zmc2V0ID0gKHRtcF9oZWFkZXIgPj4gNCkgJiAweDBGOwpAQCAtODc1LDE3ICs4OTksMTkgQEAKIAkJCQkJCSAgICAgIHJlb3JnX3dvcmRlbiwKIAkJCQkJCSAgICAgIG9yaWdpbmFsZGF0YSk7CiAJCQkJKmVmdXNlX2FkZHIgPSBlZnVzZV9nZXRfY3VycmVudF9zaXplKGh3KTsKLQkJCSB9IGVsc2UKKwkJCX0gZWxzZSB7CiAJCQkJKmVmdXNlX2FkZHIgPSAqZWZ1c2VfYWRkciArICh0bXBfd29yZF9jbnRzICogMikKIAkJCQkJICAgICAgKyAxOwotCQl9IGVsc2UKKwkJCX0KKwkJfSBlbHNlIHsKIAkJCSplZnVzZV9hZGRyID0gKmVmdXNlX2FkZHIgKyAodG1wX3dvcmRfY250cyAqIDIpICsgMTsKKwkJfQogCiAJCSp3cml0ZV9zdGF0ZSA9IFBHX1NUQVRFX0hFQURFUjsKIAkJKnJlcGVhdF90aW1lcyArPSAxOwogCQlpZiAoKnJlcGVhdF90aW1lcyA+IEVGVVNFX1JFUEVBVF9USFJFU0hPTERfKSB7Ci0JCQkqYmNvbnRpbnVhbCA9IGZhbHNlOwotCQkJKmJyZXN1bHQgPSBmYWxzZTsKKwkJCSpjb250aW51YWwgPSBmYWxzZTsKKwkJCSpyZXN1bHQgPSBmYWxzZTsKIAkJfQogCiAJCVJUUFJJTlQocnRscHJpdiwgRkVFUFJPTSwgRUZVU0VfUEcsCkBAIC04OTksNyArOTI1LDcgQEAKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHBncGt0X3N0cnVjdCB0YXJnZXRfcGt0OwogCXU4IHdyaXRlX3N0YXRlID0gUEdfU1RBVEVfSEVBREVSOwotCWludCBiY29udGludWFsID0gdHJ1ZSwgYmRhdGFlbXB0eSA9IHRydWUsIGJyZXN1bHQgPSB0cnVlOworCWludCBjb250aW51YWwgPSB0cnVlLCBkYXRhZW1wdHkgPSB0cnVlLCByZXN1bHQgPSB0cnVlOwogCXUxNiBlZnVzZV9hZGRyID0gMDsKIAl1OCBlZnVzZV9kYXRhOwogCXU4IHRhcmdldF93b3JkX2NudHMgPSAwOwpAQCAtOTIzLDExICs5NDksMTEgQEAKIAogCVJUUFJJTlQocnRscHJpdiwgRkVFUFJPTSwgRUZVU0VfUEcsICgiZWZ1c2UgUG93ZXIgT05cbiIpKTsKIAotCXdoaWxlIChiY29udGludWFsICYmIChlZnVzZV9hZGRyIDwKKwl3aGlsZSAoY29udGludWFsICYmIChlZnVzZV9hZGRyIDwKIAkgICAgICAgKEVGVVNFX01BWF9TSVpFIC0gRUZVU0VfT09CX1BST1RFQ1RfQllURVMpKSkgewogCiAJCWlmICh3cml0ZV9zdGF0ZSA9PSBQR19TVEFURV9IRUFERVIpIHsKLQkJCWJkYXRhZW1wdHkgPSB0cnVlOworCQkJZGF0YWVtcHR5ID0gdHJ1ZTsKIAkJCWJhZHdvcmRlbiA9IDB4MEY7CiAJCQlSVFBSSU5UKHJ0bHByaXYsIEZFRVBST00sIEVGVVNFX1BHLAogCQkJCSgiZWZ1c2UgUEdfU1RBVEVfSEVBREVSXG4iKSk7CkBAIC05MzYsMzIgKzk2MiwzMCBAQAogCQkJICAgIChlZnVzZV9kYXRhICE9IDB4RkYpKQogCQkJCWVmdXNlX3dyaXRlX2RhdGFfY2FzZTEoaHcsICZlZnVzZV9hZGRyLAogCQkJCQkJICAgICAgIGVmdXNlX2RhdGEsIG9mZnNldCwKLQkJCQkJCSAgICAgICAmYmNvbnRpbnVhbCwKKwkJCQkJCSAgICAgICAmY29udGludWFsLAogCQkJCQkJICAgICAgICZ3cml0ZV9zdGF0ZSwgJnRhcmdldF9wa3QsCi0JCQkJCQkgICAgICAgJnJlcGVhdF90aW1lcywgJmJyZXN1bHQsCisJCQkJCQkgICAgICAgJnJlcGVhdF90aW1lcywgJnJlc3VsdCwKIAkJCQkJCSAgICAgICB3b3JkX2VuKTsKIAkJCWVsc2UKIAkJCQllZnVzZV93cml0ZV9kYXRhX2Nhc2UyKGh3LCAmZWZ1c2VfYWRkciwKLQkJCQkJCSAgICAgICAmYmNvbnRpbnVhbCwKKwkJCQkJCSAgICAgICAmY29udGludWFsLAogCQkJCQkJICAgICAgICZ3cml0ZV9zdGF0ZSwKIAkJCQkJCSAgICAgICB0YXJnZXRfcGt0LAogCQkJCQkJICAgICAgICZyZXBlYXRfdGltZXMsCi0JCQkJCQkgICAgICAgJmJyZXN1bHQpOworCQkJCQkJICAgICAgICZyZXN1bHQpOwogCiAJCX0gZWxzZSBpZiAod3JpdGVfc3RhdGUgPT0gUEdfU1RBVEVfREFUQSkgewogCQkJUlRQUklOVChydGxwcml2LCBGRUVQUk9NLCBFRlVTRV9QRywKIAkJCQkoImVmdXNlIFBHX1NUQVRFX0RBVEFcbiIpKTsKLQkJCWJhZHdvcmRlbiA9IDB4MGY7CiAJCQliYWR3b3JkZW4gPQogCQkJICAgIGVmdXNlX3dvcmRfZW5hYmxlX2RhdGFfd3JpdGUoaHcsIGVmdXNlX2FkZHIgKyAxLAogCQkJCQkJCSB0YXJnZXRfcGt0LndvcmRfZW4sCiAJCQkJCQkJIHRhcmdldF9wa3QuZGF0YSk7CiAKIAkJCWlmICgoYmFkd29yZGVuICYgMHgwRikgPT0gMHgwRikgewotCQkJCWJjb250aW51YWwgPSBmYWxzZTsKKwkJCQljb250aW51YWwgPSBmYWxzZTsKIAkJCX0gZWxzZSB7Ci0JCQkJZWZ1c2VfYWRkciA9Ci0JCQkJICAgIGVmdXNlX2FkZHIgKyAoMiAqIHRhcmdldF93b3JkX2NudHMpICsgMTsKKwkJCQllZnVzZV9hZGRyICs9ICgyICogdGFyZ2V0X3dvcmRfY250cykgKyAxOwogCiAJCQkJdGFyZ2V0X3BrdC5vZmZzZXQgPSBvZmZzZXQ7CiAJCQkJdGFyZ2V0X3BrdC53b3JkX2VuID0gYmFkd29yZGVuOwpAQCAtOTcxLDggKzk5NSw4IEBACiAJCQkJd3JpdGVfc3RhdGUgPSBQR19TVEFURV9IRUFERVI7CiAJCQkJcmVwZWF0X3RpbWVzKys7CiAJCQkJaWYgKHJlcGVhdF90aW1lcyA+IEVGVVNFX1JFUEVBVF9USFJFU0hPTERfKSB7Ci0JCQkJCWJjb250aW51YWwgPSBmYWxzZTsKLQkJCQkJYnJlc3VsdCA9IGZhbHNlOworCQkJCQljb250aW51YWwgPSBmYWxzZTsKKwkJCQkJcmVzdWx0ID0gZmFsc2U7CiAJCQkJfQogCQkJCVJUUFJJTlQocnRscHJpdiwgRkVFUFJPTSwgRUZVU0VfUEcsCiAJCQkJCSgiZWZ1c2UgUEdfU1RBVEVfSEVBREVSLTNcbiIpKTsKQEAgLTEwNzIsMTMgKzEwOTYsMTUgQEAKIAlyZXR1cm4gYmFkd29yZGVuOwogfQogCi1zdGF0aWMgdm9pZCBlZnVzZV9wb3dlcl9zd2l0Y2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGJ3cml0ZSwgdTggcHdyc3RhdGUpCitzdGF0aWMgdm9pZCBlZnVzZV9wb3dlcl9zd2l0Y2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHdyaXRlLCB1OCBwd3JzdGF0ZSkKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKIAl1OCB0ZW1wdmFsOwogCXUxNiB0bXBWMTY7CiAKLQlpZiAocHdyc3RhdGUgPT0gdHJ1ZSkgeworCWlmIChwd3JzdGF0ZSAmJiAocnRsaGFsLT5od190eXBlICE9CisJCUhBUkRXQVJFX1RZUEVfUlRMODE5MlNFKSkgewogCQl0bXBWMTYgPSBydGxfcmVhZF93b3JkKHJ0bHByaXYsCiAJCQkJICAgICAgIHJ0bHByaXYtPmNmZy0+bWFwc1tTWVNfSVNPX0NUUkxdKTsKIAkJaWYgKCEodG1wVjE2ICYgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX1BXQ19FVjEyVl0pKSB7CkBAIC0xMTA2LDIwICsxMTMyLDI5IEBACiAJCX0KIAl9CiAKLQlpZiAocHdyc3RhdGUgPT0gdHJ1ZSkgewotCQlpZiAoYndyaXRlID09IHRydWUpIHsKKwlpZiAocHdyc3RhdGUpIHsKKwkJaWYgKHdyaXRlKSB7CiAJCQl0ZW1wdmFsID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LAogCQkJCQkJcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX1RFU1RdICsKIAkJCQkJCTMpOwotCQkJdGVtcHZhbCAmPSAweDBGOwotCQkJdGVtcHZhbCB8PSAoVk9MVEFHRV9WMjUgPDwgNCk7CisKKwkJCWlmIChydGxoYWwtPmh3X3R5cGUgIT0gSEFSRFdBUkVfVFlQRV9SVEw4MTkyU0UpIHsKKwkJCQl0ZW1wdmFsICY9IDB4MEY7CisJCQkJdGVtcHZhbCB8PSAoVk9MVEFHRV9WMjUgPDwgNCk7CisJCQl9CisKIAkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsCiAJCQkJICAgICAgIHJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9URVNUXSArIDMsCiAJCQkJICAgICAgICh0ZW1wdmFsIHwgMHg4MCkpOwogCQl9CiAKKwkJaWYgKHJ0bGhhbC0+aHdfdHlwZSA9PSBIQVJEV0FSRV9UWVBFX1JUTDgxOTJTRSkgeworCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgcnRscHJpdi0+Y2ZnLT5tYXBzW0VGVVNFX0NMS10sCisJCQkJCQkweDAzKTsKKwkJfQorCiAJfSBlbHNlIHsKLQkJaWYgKGJ3cml0ZSA9PSB0cnVlKSB7CisJCWlmICh3cml0ZSkgewogCQkJdGVtcHZhbCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwKIAkJCQkJCXJ0bHByaXYtPmNmZy0+bWFwc1tFRlVTRV9URVNUXSArCiAJCQkJCQkzKTsKQEAgLTExMjgsMTggKzExNjMsMjMgQEAKIAkJCQkgICAgICAgKHRlbXB2YWwgJiAweDdGKSk7CiAJCX0KIAorCQlpZiAocnRsaGFsLT5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODE5MlNFKSB7CisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBydGxwcml2LT5jZmctPm1hcHNbRUZVU0VfQ0xLXSwKKwkJCQkJCTB4MDIpOworCQl9CisKIAl9CiAKIH0KIAogc3RhdGljIHUxNiBlZnVzZV9nZXRfY3VycmVudF9zaXplKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewotCWludCBiY29udGludWFsID0gdHJ1ZTsKKwlpbnQgY29udGludWFsID0gdHJ1ZTsKIAl1MTYgZWZ1c2VfYWRkciA9IDA7CiAJdTggaG9mZnNldCwgaHdvcmRlbjsKIAl1OCBlZnVzZV9kYXRhLCB3b3JkX2NudHM7CiAKLQl3aGlsZSAoYmNvbnRpbnVhbCAmJiBlZnVzZV9vbmVfYnl0ZV9yZWFkKGh3LCBlZnVzZV9hZGRyLCAmZWZ1c2VfZGF0YSkKKwl3aGlsZSAoY29udGludWFsICYmIGVmdXNlX29uZV9ieXRlX3JlYWQoaHcsIGVmdXNlX2FkZHIsICZlZnVzZV9kYXRhKQogCSAgICAgICAmJiAoZWZ1c2VfYWRkciA8IEVGVVNFX01BWF9TSVpFKSkgewogCQlpZiAoZWZ1c2VfZGF0YSAhPSAweEZGKSB7CiAJCQlob2Zmc2V0ID0gKGVmdXNlX2RhdGEgPj4gNCkgJiAweDBGOwpAQCAtMTE0Nyw3ICsxMTg3LDcgQEAKIAkJCXdvcmRfY250cyA9IGVmdXNlX2NhbGN1bGF0ZV93b3JkX2NudHMoaHdvcmRlbik7CiAJCQllZnVzZV9hZGRyID0gZWZ1c2VfYWRkciArICh3b3JkX2NudHMgKiAyKSArIDE7CiAJCX0gZWxzZSB7Ci0JCQliY29udGludWFsID0gZmFsc2U7CisJCQljb250aW51YWwgPSBmYWxzZTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9lZnVzZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9lZnVzZS5oCmluZGV4IDQ3Nzc0ZGQuLjE2NGRhYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvZWZ1c2UuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2VmdXNlLmgKQEAgLTMwLDkgKzMwLDEwIEBACiAjaWZuZGVmIF9fUlRMX0VGVVNFX0hfCiAjZGVmaW5lIF9fUlRMX0VGVVNFX0hfCiAKKyNkZWZpbmUgRUZVU0VfSUNfSURfT0ZGU0VUCQk1MDYKKwogI2RlZmluZSBFRlVTRV9SRUFMX0NPTlRFTlRfTEVOCQk1MTIKICNkZWZpbmUgRUZVU0VfTUFQX0xFTgkJCTEyOAotI2RlZmluZSBFRlVTRV9NQVhfU0VDVElPTgkJMTYKICNkZWZpbmUgRUZVU0VfTUFYX1dPUkRfVU5JVAkJNAogCiAjZGVmaW5lIEVGVVNFX0lOSVRfTUFQCQkJMApAQCAtNTIsNiArNTMsNyBAQAogI2RlZmluZSBfUFJFX0VYRUNVVEVfUkVBRF9DTURfCiAKICNkZWZpbmUgRUZVU0VfUkVQRUFUX1RIUkVTSE9MRF8JCTMKKyNkZWZpbmUgRUZVU0VfRVJST0VfSEFORExFCQkxCiAKIHN0cnVjdCBlZnVzZV9tYXAgewogCXU4IG9mZnNldDsKQEAgLTEwMyw2ICsxMDUsNyBAQAogCXU4IHR4X3Bvd2VyX2dbMTRdOwogfTsKIAorZXh0ZXJuIHZvaWQgcmVhZF9lZnVzZV9ieXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgX29mZnNldCwgdTggKnBidWYpOwogZXh0ZXJuIHZvaWQgZWZ1c2VfaW5pdGlhbGl6ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiBleHRlcm4gdTggZWZ1c2VfcmVhZF8xYnl0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IGFkZHJlc3MpOwogZXh0ZXJuIHZvaWQgZWZ1c2Vfd3JpdGVfMWJ5dGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBhZGRyZXNzLCB1OCB2YWx1ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuYwppbmRleCA1OTM4ZjZlLi5hNDA5NTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJwY2kuaCIKICNpbmNsdWRlICJiYXNlLmgiCiAjaW5jbHVkZSAicHMuaCIKKyNpbmNsdWRlICJlZnVzZS5oIgogCiBzdGF0aWMgY29uc3QgdTE2IHBjaWJyaWRnZV92ZW5kb3JzW1BDSV9CUklER0VfVkVORE9SX01BWF0gPSB7CiAJSU5URUxfVkVORE9SX0lELApAQCAtNDAsNiArNDEsMzEgQEAKIAlTSVNfVkVORE9SX0lECiB9OwogCitzdGF0aWMgY29uc3QgdTggYWNfdG9faHdxW10gPSB7CisJVk9fUVVFVUUsCisJVklfUVVFVUUsCisJQkVfUVVFVUUsCisJQktfUVVFVUUKK307CisKK3N0YXRpYyB1OCBfcnRsX21hY190b19od3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCV9fbGUxNiBmYyA9IHJ0bF9nZXRfZmMoc2tiKTsKKwl1OCBxdWV1ZV9pbmRleCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOworCisJaWYgKHVubGlrZWx5KGllZWU4MDIxMV9pc19iZWFjb24oZmMpKSkKKwkJcmV0dXJuIEJFQUNPTl9RVUVVRTsKKwlpZiAoaWVlZTgwMjExX2lzX21nbXQoZmMpKQorCQlyZXR1cm4gTUdOVF9RVUVVRTsKKwlpZiAocnRsaGFsLT5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODE5MlNFKQorCQlpZiAoaWVlZTgwMjExX2lzX251bGxmdW5jKGZjKSkKKwkJCXJldHVybiBISUdIX1FVRVVFOworCisJcmV0dXJuIGFjX3RvX2h3cVtxdWV1ZV9pbmRleF07Cit9CisKIC8qIFVwZGF0ZSBQQ0kgZGVwZW5kZW50IGRlZmF1bHQgc2V0dGluZ3MqLwogc3RhdGljIHZvaWQgX3J0bF9wY2lfdXBkYXRlX2RlZmF1bHRfc2V0dGluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKQEAgLTQ4LDYgKzc0LDcgQEAKIAlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKIAlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOwogCXU4IHBjaWJyaWRnZV92ZW5kb3IgPSBwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX3ZlbmRvcjsKKwl1OCBpbml0X2FzcG07CiAKIAlwcHNjLT5yZWdfcmZwc19sZXZlbCA9IDA7CiAJcHBzYy0+c3VwcG9ydF9hc3BtID0gMDsKQEAgLTEyNSw3ICsxNTIsNyBAQAogCQkJYm9vbCBzdXBwb3J0X2JhY2tkb29yID0gdHJ1ZTsKIAkJCXBwc2MtPnN1cHBvcnRfYXNwbSA9IHN1cHBvcnRfYXNwbTsKIAotCQkJLyppZihwcml2LT5vZW1faWQgPT0gUlRfQ0lEX1RPU0hJQkEgJiYKKwkJCS8qaWYgKHByaXYtPm9lbV9pZCA9PSBSVF9DSURfVE9TSElCQSAmJgogCQkJICAgIXByaXYtPm5kaXNfYWRhcHRlci5hbWRfbDFfcGF0Y2gpCiAJCQkgICBzdXBwb3J0X2JhY2tkb29yID0gZmFsc2U7ICovCiAKQEAgLTE0NSw2ICsxNzIsMTMgQEAKIAkJCSAoInN3aXRjaCBjYXNlIG5vdCBwcm9jZXNzXG4iKSk7CiAJCWJyZWFrOwogCX0KKworCS8qIHRvc2hpYmEgYXNwbSBpc3N1ZSwgdG9zaGliYSB3aWxsIHNldCBhc3BtIHNlbGZseQorCSAqIHNvIHdlIHNob3VsZCBub3Qgc2V0IGFzcG0gaW4gZHJpdmVyICovCisJcGNpX3JlYWRfY29uZmlnX2J5dGUocnRscGNpLT5wZGV2LCAweDgwLCAmaW5pdF9hc3BtKTsKKwlpZiAocnRscHJpdi0+cnRsaGFsLmh3X3R5cGUgPT0gSEFSRFdBUkVfVFlQRV9SVEw4MTkyU0UgJiYKKwkJaW5pdF9hc3BtID09IDB4NDMpCisJCXBwc2MtPnN1cHBvcnRfYXNwbSA9IGZhbHNlOwogfQogCiBzdGF0aWMgYm9vbCBfcnRsX3BjaV9wbGF0Zm9ybV9zd2l0Y2hfZGV2aWNlX3BjaV9hc3BtKApAQCAtMTUyLDI4ICsxODYsMjggQEAKIAkJCXU4IHZhbHVlKQogewogCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7Ci0JYm9vbCBicmVzdWx0ID0gZmFsc2U7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKIAotCXZhbHVlIHw9IDB4NDA7CisJaWYgKHJ0bGhhbC0+aHdfdHlwZSAhPSBIQVJEV0FSRV9UWVBFX1JUTDgxOTJTRSkKKwkJdmFsdWUgfD0gMHg0MDsKIAogCXBjaV93cml0ZV9jb25maWdfYnl0ZShydGxwY2ktPnBkZXYsIDB4ODAsIHZhbHVlKTsKIAotCXJldHVybiBicmVzdWx0OworCXJldHVybiBmYWxzZTsKIH0KIAogLypXaGVuIHdlIHNldCAweDAxIHRvIGVuYWJsZSBjbGsgcmVxdWVzdC4gU2V0IDB4MCB0byBkaXNhYmxlIGNsayByZXEuKi8KIHN0YXRpYyBib29sIF9ydGxfcGNpX3N3aXRjaF9jbGtfcmVxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCB2YWx1ZSkKIHsKIAlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOwotCXU4IGJ1ZmZlcjsKLQlib29sIGJyZXN1bHQgPSBmYWxzZTsKLQotCWJ1ZmZlciA9IHZhbHVlOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CiAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocnRscGNpLT5wZGV2LCAweDgxLCB2YWx1ZSk7Ci0JYnJlc3VsdCA9IHRydWU7CiAKLQlyZXR1cm4gYnJlc3VsdDsKKwlpZiAocnRsaGFsLT5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODE5MlNFKQorCQl1ZGVsYXkoMTAwKTsKKworCXJldHVybiB0cnVlOwogfQogCiAvKkRpc2FibGUgUlRMODE5MlNFIEFTUE0gJiBEaXNhYmxlIFBjaSBCcmlkZ2UgQVNQTSovCkBAIC0xOTEsNiArMjI1LDEwIEBACiAJdTE2IHBjaWJyaWRnZV9saW5rY3RybHJlZyA9IHBjaXByaXYtPm5kaXNfYWRhcHRlci4KIAkJCQlwY2licmlkZ2VfbGlua2N0cmxyZWc7CiAJdTE2IGFzcG1sZXZlbCA9IDA7CisJdTggdG1wX3UxYiA9IDA7CisKKwlpZiAoIXBwc2MtPnN1cHBvcnRfYXNwbSkKKwkJcmV0dXJuOwogCiAJaWYgKHBjaWJyaWRnZV92ZW5kb3IgPT0gUENJX0JSSURHRV9WRU5ET1JfVU5LTk9XTikgewogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfVFJBQ0UsCkBAIC0yMDQsMTEgKzI0Miw4IEBACiAJCV9ydGxfcGNpX3N3aXRjaF9jbGtfcmVxKGh3LCAweDApOwogCX0KIAotCWlmICgxKSB7Ci0JCS8qZm9yIHByb21pc2luZyBkZXZpY2Ugd2lsbCBpbiBMMCBzdGF0ZSBhZnRlciBhbiBJL08uICovCi0JCXU4IHRtcF91MWI7Ci0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHJ0bHBjaS0+cGRldiwgMHg4MCwgJnRtcF91MWIpOwotCX0KKwkvKmZvciBwcm9taXNpbmcgZGV2aWNlIHdpbGwgaW4gTDAgc3RhdGUgYWZ0ZXIgYW4gSS9PLiAqLworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHJ0bHBjaS0+cGRldiwgMHg4MCwgJnRtcF91MWIpOwogCiAJLypTZXQgY29ycmVzcG9uZGluZyB2YWx1ZS4gKi8KIAlhc3BtbGV2ZWwgfD0gQklUKDApIHwgQklUKDEpOwpAQCAtMjI0LDcgKzI1OSw2IEBACiAJcnRsX3BjaV9yYXdfd3JpdGVfcG9ydF91Y2hhcihQQ0lfQ09ORl9EQVRBLCBwY2licmlkZ2VfbGlua2N0cmxyZWcpOwogCiAJdWRlbGF5KDUwKTsKLQogfQogCiAvKgpAQCAtMjQ5LDYgKzI4Myw5IEBACiAJdTggdV9wY2licmlkZ2VfYXNwbXNldHRpbmc7CiAJdTggdV9kZXZpY2VfYXNwbXNldHRpbmc7CiAKKwlpZiAoIXBwc2MtPnN1cHBvcnRfYXNwbSkKKwkJcmV0dXJuOworCiAJaWYgKHBjaWJyaWRnZV92ZW5kb3IgPT0gUENJX0JSSURHRV9WRU5ET1JfVU5LTk9XTikgewogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfVFJBQ0UsCiAJCQkgKCJQQ0koQnJpZGdlKSBVTktOT1dOLlxuIikpOwpAQCAtMjkzLDcgKzMzMCw3IEBACiAJCQkJCSAgICAgUlRfUkZfT0ZGX0xFVkxfQ0xLX1JFUSkgPyAxIDogMCk7CiAJCVJUX1NFVF9QU19MRVZFTChwcHNjLCBSVF9SRl9PRkZfTEVWTF9DTEtfUkVRKTsKIAl9Ci0JdWRlbGF5KDIwMCk7CisJdWRlbGF5KDEwMCk7CiB9CiAKIHN0YXRpYyBib29sIHJ0bF9wY2lfZ2V0X2FtZF9sMV9wYXRjaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKQEAgLTMzMCwxMyArMzY3LDEzIEBACiAJdTggY2FwYWJpbGl0eW9mZnNldCA9IHBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2licmlkZ2VfcGNpZWhkcl9vZmZzZXQ7CiAJdTMyIHBjaWNmZ19hZGRycG9ydCA9IHBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2ljZmdfYWRkcnBvcnQ7CiAJdTggbGlua2N0cmxfcmVnOwotCXU4IG51bTRiQnl0ZXM7CisJdTggbnVtNGJieXRlczsKIAotCW51bTRiQnl0ZXMgPSAoY2FwYWJpbGl0eW9mZnNldCArIDB4MTApIC8gNDsKKwludW00YmJ5dGVzID0gKGNhcGFiaWxpdHlvZmZzZXQgKyAweDEwKSAvIDQ7CiAKIAkvKlJlYWQgIExpbmsgQ29udHJvbCBSZWdpc3RlciAqLwogCXJ0bF9wY2lfcmF3X3dyaXRlX3BvcnRfdWxvbmcoUENJX0NPTkZfQUREUkVTUywKLQkJCQkgICAgIHBjaWNmZ19hZGRycG9ydCArIChudW00YkJ5dGVzIDw8IDIpKTsKKwkJCQkgICAgIHBjaWNmZ19hZGRycG9ydCArIChudW00YmJ5dGVzIDw8IDIpKTsKIAlydGxfcGNpX3Jhd19yZWFkX3BvcnRfdWNoYXIoUENJX0NPTkZfREFUQSwgJmxpbmtjdHJsX3JlZyk7CiAKIAlwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX2xpbmtjdHJscmVnID0gbGlua2N0cmxfcmVnOwpAQCAtMzY5LDcgKzQwNiw3IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4NzBmLCB0bXApOwogfQogCi1zdGF0aWMgdm9pZCBfcnRsX3BjaV9pbml0aWFsaXplX2FkYXB0ZXJfY29tbW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQorc3RhdGljIHZvaWQgcnRsX3BjaV9pbml0X2FzcG0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CiAKQEAgLTM4Myw1MiArNDIwLDYgQEAKIAogfQogCi1zdGF0aWMgdm9pZCBydGxfcGNpX2luaXRfYXNwbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOwotCi0JLypjbG9zZSBBU1BNIGZvciBBTUQgZGVmYXVsdGx5ICovCi0JcnRscGNpLT5jb25zdF9hbWRwY2lfYXNwbSA9IDA7Ci0KLQkvKgotCSAqIEFTUE0gUFMgbW9kZS4KLQkgKiAwIC0gRGlzYWJsZSBBU1BNLAotCSAqIDEgLSBFbmFibGUgQVNQTSB3aXRob3V0IENsb2NrIFJlcSwKLQkgKiAyIC0gRW5hYmxlIEFTUE0gd2l0aCBDbG9jayBSZXEsCi0JICogMyAtIEFsd2F5cyBFbmFibGUgQVNQTSB3aXRoIENsb2NrIFJlcSwKLQkgKiA0IC0gQWx3YXlzIEVuYWJsZSBBU1BNIHdpdGhvdXQgQ2xvY2sgUmVxLgotCSAqIHNldCBkZWZ1bHQgdG8gUlRMODE5MkNFOjMgUlRMODE5MkU6MgotCSAqICovCi0JcnRscGNpLT5jb25zdF9wY2lfYXNwbSA9IDM7Ci0KLQkvKlNldHRpbmcgZm9yIFBDSS1FIGRldmljZSAqLwotCXJ0bHBjaS0+Y29uc3RfZGV2aWNlcGNpX2FzcG1fc2V0dGluZyA9IDB4MDM7Ci0KLQkvKlNldHRpbmcgZm9yIFBDSS1FIGJyaWRnZSAqLwotCXJ0bHBjaS0+Y29uc3RfaG9zdHBjaV9hc3BtX3NldHRpbmcgPSAweDAyOwotCi0JLyoKLQkgKiBJbiBIdy9TdyBSYWRpbyBPZmYgc2l0dWF0aW9uLgotCSAqIDAgLSBEZWZhdWx0LAotCSAqIDEgLSBGcm9tIEFTUE0gc2V0dGluZyB3aXRob3V0IGxvdyBNYWMgUHdyLAotCSAqIDIgLSBGcm9tIEFTUE0gc2V0dGluZyB3aXRoIGxvdyBNYWMgUHdyLAotCSAqIDMgLSBCdXMgRDMKLQkgKiBzZXQgZGVmYXVsdCB0byBSVEw4MTkyQ0U6MCBSVEw4MTkyU0U6MgotCSAqLwotCXJ0bHBjaS0+Y29uc3RfaHdzd19yZm9mZl9kMyA9IDA7Ci0KLQkvKgotCSAqIFRoaXMgc2V0dGluZyB3b3JrcyBmb3IgdGhvc2UgZGV2aWNlIHdpdGgKLQkgKiBiYWNrZG9vciBBU1BNIHNldHRpbmcgc3VjaCBhcyBFUEhZIHNldHRpbmcuCi0JICogMCAtIE5vdCBzdXBwb3J0IEFTUE0sCi0JICogMSAtIFN1cHBvcnQgQVNQTSwKLQkgKiAyIC0gQWNjb3JkaW5nIHRvIGNoaXBzZXQuCi0JICovCi0JcnRscGNpLT5jb25zdF9zdXBwb3J0X3BjaWFzcG0gPSAxOwotCi0JX3J0bF9wY2lfaW5pdGlhbGl6ZV9hZGFwdGVyX2NvbW1vbihodyk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9ydGxfcGNpX2lvX2hhbmRsZXJfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKQEAgLTQ1MCw2ICs0NDEsOTAgQEAKIHsKIH0KIAorc3RhdGljIGJvb2wgX3J0bF91cGRhdGVfZWFybHltb2RlX2luZm8oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCXN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBydGxfdGNiX2Rlc2MgKnRjYl9kZXNjLCB1OCB0aWQpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwl1OCBhZGRpdGlvbmxlbiA9IEZDU19MRU47CisJc3RydWN0IHNrX2J1ZmYgKm5leHRfc2tiOworCisJLyogaGVyZSBvcGVuIGlzIDQsIHdlcC90a2lwIGlzIDgsIGFlcyBpcyAxMiovCisJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5KQorCQlhZGRpdGlvbmxlbiArPSBpbmZvLT5jb250cm9sLmh3X2tleS0+aWN2X2xlbjsKKworCS8qIFRoZSBtb3N0IHNrYiBudW0gaXMgNiAqLworCXRjYl9kZXNjLT5lbXBrdF9udW0gPSAwOworCXNwaW5fbG9ja19iaCgmcnRscHJpdi0+bG9ja3Mud2FpdHFfbG9jayk7CisJc2tiX3F1ZXVlX3dhbGsoJnJ0bHByaXYtPm1hYzgwMjExLnNrYl93YWl0cVt0aWRdLCBuZXh0X3NrYikgeworCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKm5leHRfaW5mbzsKKworCQluZXh0X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKG5leHRfc2tiKTsKKwkJaWYgKG5leHRfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSB7CisJCQl0Y2JfZGVzYy0+ZW1wa3RfbGVuW3RjYl9kZXNjLT5lbXBrdF9udW1dID0KKwkJCQluZXh0X3NrYi0+bGVuICsgYWRkaXRpb25sZW47CisJCQl0Y2JfZGVzYy0+ZW1wa3RfbnVtKys7CisJCX0gZWxzZSB7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChza2JfcXVldWVfaXNfbGFzdCgmcnRscHJpdi0+bWFjODAyMTEuc2tiX3dhaXRxW3RpZF0sCisJCQkJICAgICAgbmV4dF9za2IpKQorCQkJYnJlYWs7CisKKwkJaWYgKHRjYl9kZXNjLT5lbXBrdF9udW0gPj0gNSkKKwkJCWJyZWFrOworCX0KKwlzcGluX3VubG9ja19iaCgmcnRscHJpdi0+bG9ja3Mud2FpdHFfbG9jayk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoganVzdCBmb3IgZWFybHkgbW9kZSBub3cgKi8KK3N0YXRpYyB2b2lkIF9ydGxfcGNpX3R4X2Noa193YWl0cShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IE5VTEw7CisJaW50IHRpZDsgLyogc2hvdWxkIGJlIGludCAqLworCisJaWYgKCFydGxwcml2LT5ydGxoYWwuZWFybHltb2RlX2VuYWJsZSkKKwkJcmV0dXJuOworCisJLyogd2UganVzZSB1c2UgZW0gZm9yIEJFL0JLL1ZJL1ZPICovCisJZm9yICh0aWQgPSA3OyB0aWQgPj0gMDsgdGlkLS0pIHsKKwkJdTggaHdfcXVldWUgPSBhY190b19od3FbcnRsX3RpZF90b19hYyhodywgdGlkKV07CisJCXN0cnVjdCBydGw4MTkyX3R4X3JpbmcgKnJpbmcgPSAmcnRscGNpLT50eF9yaW5nW2h3X3F1ZXVlXTsKKwkJd2hpbGUgKCFtYWMtPmFjdF9zY2FubmluZyAmJgorCQkgICAgICAgcnRscHJpdi0+cHNjLnJmcHdyX3N0YXRlID09IEVSRk9OKSB7CisJCQlzdHJ1Y3QgcnRsX3RjYl9kZXNjIHRjYl9kZXNjOworCQkJbWVtc2V0KCZ0Y2JfZGVzYywgMCwgc2l6ZW9mKHN0cnVjdCBydGxfdGNiX2Rlc2MpKTsKKworCQkJc3Bpbl9sb2NrX2JoKCZydGxwcml2LT5sb2Nrcy53YWl0cV9sb2NrKTsKKwkJCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZtYWMtPnNrYl93YWl0cVt0aWRdKSAmJgorCQkJICAgKHJpbmctPmVudHJpZXMgLSBza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkgPiA1KSkgeworCQkJCXNrYiA9IHNrYl9kZXF1ZXVlKCZtYWMtPnNrYl93YWl0cVt0aWRdKTsKKwkJCX0gZWxzZSB7CisJCQkJc3Bpbl91bmxvY2tfYmgoJnJ0bHByaXYtPmxvY2tzLndhaXRxX2xvY2spOworCQkJCWJyZWFrOworCQkJfQorCQkJc3Bpbl91bmxvY2tfYmgoJnJ0bHByaXYtPmxvY2tzLndhaXRxX2xvY2spOworCisJCQkvKiBTb21lIG1hY2FkZHIgY2FuJ3QgZG8gZWFybHkgbW9kZS4gbGlrZQorCQkJICogbXVsdGljYXN0L2Jyb2FkY2FzdC9ub19xb3MgZGF0YSAqLworCQkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwkJCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpCisJCQkJX3J0bF91cGRhdGVfZWFybHltb2RlX2luZm8oaHcsIHNrYiwKKwkJCQkJCQkgICAmdGNiX2Rlc2MsIHRpZCk7CisKKwkJCXJ0bHByaXYtPmludGZfb3BzLT5hZGFwdGVyX3R4KGh3LCBza2IsICZ0Y2JfZGVzYyk7CisJCX0KKwl9Cit9CisKKwogc3RhdGljIHZvaWQgX3J0bF9wY2lfdHhfaXNyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgcHJpbykKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CkBAIC00NjEsNiArNTM2LDggQEAKIAkJc3RydWN0IHJ0bF90eF9kZXNjICplbnRyeSA9ICZyaW5nLT5kZXNjW3JpbmctPmlkeF07CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAJCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKwkJX19sZTE2IGZjOworCQl1OCB0aWQ7CiAKIAkJdTggb3duID0gKHU4KSBydGxwcml2LT5jZmctPm9wcy0+Z2V0X2Rlc2MoKHU4ICopIGVudHJ5LCB0cnVlLAogCQkJCQkJCSAgSFdfREVTQ19PV04pOwpAQCAtNDgxLDYgKzU1OCwxMCBAQAogCQkJCQkJICAgICAgSFdfREVTQ19UWEJVRkZfQUREUiksCiAJCQkJIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAorCQkvKiByZW1vdmUgZWFybHkgbW9kZSBoZWFkZXIgKi8KKwkJaWYgKHJ0bHByaXYtPnJ0bGhhbC5lYXJseW1vZGVfZW5hYmxlKQorCQkJc2tiX3B1bGwoc2tiLCBFTV9IRFJfTEVOKTsKKwogCQlSVF9UUkFDRShydGxwcml2LCAoQ09NUF9JTlRSIHwgQ09NUF9TRU5EKSwgREJHX1RSQUNFLAogCQkJICgibmV3IHJpbmctPmlkeDolZCwgIgogCQkJICAiZnJlZTogc2tiX3F1ZXVlX2xlbjolZCwgZnJlZTogc2VxOiV4XG4iLApAQCAtNDg4LDYgKzU2OSwzMCBAQAogCQkJICBza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSksCiAJCQkgICoodTE2ICopIChza2ItPmRhdGEgKyAyMikpKTsKIAorCQlpZiAocHJpbyA9PSBUWENNRF9RVUVVRSkgeworCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJZ290byB0eF9zdGF0dXNfb2s7CisKKwkJfQorCisJCS8qIGZvciBzdyBMUFMsIGp1c3QgYWZ0ZXIgTlVMTCBza2Igc2VuZCBvdXQsIHdlIGNhbgorCQkgKiBzdXJlIEFQIGtvd24gd2UgYXJlIHNsZWVwZWQsIG91ciB3ZSBzaG91bGQgbm90IGxldAorCQkgKiByZiB0byBzbGVlcCovCisJCWZjID0gcnRsX2dldF9mYyhza2IpOworCQlpZiAoaWVlZTgwMjExX2lzX251bGxmdW5jKGZjKSkgeworCQkJaWYgKGllZWU4MDIxMV9oYXNfcG0oZmMpKSB7CisJCQkJcnRscHJpdi0+bWFjODAyMTEub2ZmY2hhbl9kZWxleSA9IHRydWU7CisJCQkJcnRscHJpdi0+cHNjLnN0YXRlX2luYXAgPSAxOworCQkJfSBlbHNlIHsKKwkJCQlydGxwcml2LT5wc2Muc3RhdGVfaW5hcCA9IDA7CisJCQl9CisJCX0KKworCQkvKiB1cGRhdGUgdGlkIHR4IHBrdCBudW0gKi8KKwkJdGlkID0gcnRsX2dldF90aWQoc2tiKTsKKwkJaWYgKHRpZCA8PSA3KQorCQkJcnRscHJpdi0+bGlua19pbmZvLnRpZHR4X2lucGVyaW9kW3RpZF0rKzsKKwogCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCQlpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXMoaW5mbyk7CiAKQEAgLTUxMCw3ICs2MTUsNyBAQAogCQkJCQlza2JfZ2V0X3F1ZXVlX21hcHBpbmcKIAkJCQkJKHNrYikpOwogCQl9Ci0KK3R4X3N0YXR1c19vazoKIAkJc2tiID0gTlVMTDsKIAl9CiAKQEAgLTU4MiwyMyArNjg3LDIxIEBACiAJCQkgKnNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSA0KTsKIAkJCSAqLwogCi0JCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikoc2tiLT5kYXRhKTsKLQkJCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOworCQkJaGRyID0gcnRsX2dldF9oZHIoc2tiKTsKKwkJCWZjID0gcnRsX2dldF9mYyhza2IpOwogCi0JCQlpZiAoIXN0YXRzLmNyYykgeworCQkJaWYgKCFzdGF0cy5jcmMgfHwgIXN0YXRzLmh3ZXJyb3IpIHsKIAkJCQltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksICZyeF9zdGF0dXMsCiAJCQkJICAgICAgIHNpemVvZihyeF9zdGF0dXMpKTsKIAotCQkJCWlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkKKwkJCQlpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpIHsKIAkJCQkJOy8qVE9ETyovCi0JCQkJZWxzZSB7Ci0JCQkJCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkKLQkJCQkJCTsvKlRPRE8qLwotCQkJCQllbHNlIHsKLQkJCQkJCXVuaWNhc3QgPSB0cnVlOwotCQkJCQkJcnRscHJpdi0+c3RhdHMucnhieXRlc3VuaWNhc3QgKz0KLQkJCQkJCSAgICBza2ItPmxlbjsKLQkJCQkJfQorCQkJCX0gZWxzZSBpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpIHsKKwkJCQkJOy8qVE9ETyovCisJCQkJfSBlbHNlIHsKKwkJCQkJdW5pY2FzdCA9IHRydWU7CisJCQkJCXJ0bHByaXYtPnN0YXRzLnJ4Ynl0ZXN1bmljYXN0ICs9CisJCQkJCSAgICBza2ItPmxlbjsKIAkJCQl9CiAKIAkJCQlydGxfaXNfc3BlY2lhbF9kYXRhKGh3LCBza2IsIGZhbHNlKTsKQEAgLTYxMiwyOCArNzE1LDM4IEBACiAJCQkJCQkgICAgbnVtX3J4X2lucGVyaW9kKys7CiAJCQkJfQogCi0JCQkJaWYgKHVubGlrZWx5KCFydGxfYWN0aW9uX3Byb2MoaHcsIHNrYiwKLQkJCQkgICAgZmFsc2UpKSkgeworCQkJCS8qIGZvciBzdyBscHMgKi8KKwkJCQlydGxfc3dscHNfYmVhY29uKGh3LCAodm9pZCAqKXNrYi0+ZGF0YSwKKwkJCQkJCSBza2ItPmxlbik7CisJCQkJcnRsX3JlY29nbml6ZV9wZWVyKGh3LCAodm9pZCAqKXNrYi0+ZGF0YSwKKwkJCQkJCSAgIHNrYi0+bGVuKTsKKwkJCQlpZiAoKHJ0bHByaXYtPm1hYzgwMjExLm9wbW9kZSA9PQorCQkJCSAgICAgTkw4MDIxMV9JRlRZUEVfQVApICYmCisJCQkJICAgIChydGxwcml2LT5ydGxoYWwuY3VycmVudF9iYW5kdHlwZSA9PQorCQkJCSAgICAgQkFORF9PTl8yXzRHKSAmJgorCQkJCSAgICAgKGllZWU4MDIxMV9pc19iZWFjb24oZmMpIHx8CisJCQkJICAgICBpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChmYykpKSB7CiAJCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQkJfSBlbHNlIHsKLQkJCQkJc3RydWN0IHNrX2J1ZmYgKnVza2IgPSBOVUxMOwotCQkJCQl1OCAqcGRhdGE7Ci0JCQkJCXVza2IgPSBkZXZfYWxsb2Nfc2tiKHNrYi0+bGVuICsgMTI4KTsKLQkJCQkJaWYgKCF1c2tiKSB7Ci0JCQkJCQlSVF9UUkFDRShydGxwcml2LAotCQkJCQkJCShDT01QX0lOVFIgfCBDT01QX1JFQ1YpLAotCQkJCQkJCURCR19FTUVSRywKLQkJCQkJCQkoImNhbid0IGFsbG9jIHJ4IHNrYlxuIikpOwotCQkJCQkJZ290byBkb25lOwotCQkJCQl9Ci0JCQkJCW1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0IodXNrYiksCi0JCQkJCQkJJnJ4X3N0YXR1cywKLQkJCQkJCQlzaXplb2Yocnhfc3RhdHVzKSk7Ci0JCQkJCXBkYXRhID0gKHU4ICopc2tiX3B1dCh1c2tiLCBza2ItPmxlbik7Ci0JCQkJCW1lbWNweShwZGF0YSwgc2tiLT5kYXRhLCBza2ItPmxlbik7Ci0JCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQkJCWlmICh1bmxpa2VseSghcnRsX2FjdGlvbl9wcm9jKGh3LCBza2IsCisJCQkJCSAgICBmYWxzZSkpKSB7CisJCQkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJCQl9IGVsc2UgeworCQkJCQkJc3RydWN0IHNrX2J1ZmYgKnVza2IgPSBOVUxMOworCQkJCQkJdTggKnBkYXRhOworCQkJCQkJdXNrYiA9IGRldl9hbGxvY19za2Ioc2tiLT5sZW4KKwkJCQkJCQkJICAgICArIDEyOCk7CisJCQkJCQltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHVza2IpLAorCQkJCQkJICAgICAgICZyeF9zdGF0dXMsCisJCQkJCQkgICAgICAgc2l6ZW9mKHJ4X3N0YXR1cykpOworCQkJCQkJcGRhdGEgPSAodTggKilza2JfcHV0KHVza2IsCisJCQkJCQkJc2tiLT5sZW4pOworCQkJCQkJbWVtY3B5KHBkYXRhLCBza2ItPmRhdGEsCisJCQkJCQkgICAgICAgc2tiLT5sZW4pOworCQkJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAotCQkJCQlpZWVlODAyMTFfcnhfaXJxc2FmZShodywgdXNrYik7CisJCQkJCQlpZWVlODAyMTFfcnhfaXJxc2FmZShodywgdXNrYik7CisJCQkJCX0KIAkJCQl9CiAJCQl9IGVsc2UgewogCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CkBAIC02NDgsNyArNzYxLDcgQEAKIAkJCW5ld19za2IgPSBkZXZfYWxsb2Nfc2tiKHJ0bHBjaS0+cnhidWZmZXJzaXplKTsKIAkJCWlmICh1bmxpa2VseSghbmV3X3NrYikpIHsKIAkJCQlSVF9UUkFDRShydGxwcml2LCAoQ09NUF9JTlRSIHwgQ09NUF9SRUNWKSwKLQkJCQkJIERCR19FTUVSRywKKwkJCQkJIERCR19ETUVTRywKIAkJCQkJICgiY2FuJ3QgYWxsb2Mgc2tiIGZvciByeFxuIikpOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KQEAgLTY2Niw3ICs3NzksNyBAQAogCiAJCX0KIGRvbmU6Ci0JCWJ1ZmZlcmFkZHJlc3MgPSAodTMyKSgqKChkbWFfYWRkcl90ICopIHNrYi0+Y2IpKTsKKwkJYnVmZmVyYWRkcmVzcyA9ICgqKChkbWFfYWRkcl90ICopc2tiLT5jYikpOwogCQl0bXBfb25lID0gMTsKIAkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9kZXNjKCh1OCAqKSBwZGVzYywgZmFsc2UsCiAJCQkJCSAgICBIV19ERVNDX1JYQlVGRl9BRERSLApAQCAtNjk1LDYgKzgwOCw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBkZXZfaWQ7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBpbnRhID0gMDsKIAl1MzIgaW50YiA9IDA7CkBAIC03ODEsMjMgKzg5NSwzNiBAQAogCQlfcnRsX3BjaV90eF9pc3IoaHcsIFZPX1FVRVVFKTsKIAl9CiAKKwlpZiAocnRsaGFsLT5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODE5MlNFKSB7CisJCWlmIChpbnRhICYgcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9JTVJfQ09NRE9LXSkgeworCQkJcnRscHJpdi0+bGlua19pbmZvLm51bV90eF9pbnBlcmlvZCsrOworCisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOVFIsIERCR19UUkFDRSwKKwkJCQkJKCJDTUQgVFggT0sgaW50ZXJydXB0IVxuIikpOworCQkJX3J0bF9wY2lfdHhfaXNyKGh3LCBUWENNRF9RVUVVRSk7CisJCX0KKwl9CisKIAkvKjwyPiBSeCByZWxhdGVkICovCiAJaWYgKGludGEgJiBydGxwcml2LT5jZmctPm1hcHNbUlRMX0lNUl9ST0tdKSB7CiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5UUiwgREJHX1RSQUNFLCAoIlJ4IG9rIGludGVycnVwdCFcbiIpKTsKLQkJdGFza2xldF9zY2hlZHVsZSgmcnRscHJpdi0+d29ya3MuaXJxX3Rhc2tsZXQpOworCQlfcnRsX3BjaV9yeF9pbnRlcnJ1cHQoaHcpOwogCX0KIAogCWlmICh1bmxpa2VseShpbnRhICYgcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9JTVJfUkRVXSkpIHsKIAkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19XQVJOSU5HLAogCQkJICgicnggZGVzY3JpcHRvciB1bmF2YWlsYWJsZSFcbiIpKTsKLQkJdGFza2xldF9zY2hlZHVsZSgmcnRscHJpdi0+d29ya3MuaXJxX3Rhc2tsZXQpOworCQlfcnRsX3BjaV9yeF9pbnRlcnJ1cHQoaHcpOwogCX0KIAogCWlmICh1bmxpa2VseShpbnRhICYgcnRscHJpdi0+Y2ZnLT5tYXBzW1JUTF9JTVJfUlhGT1ZXXSkpIHsKIAkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19XQVJOSU5HLCAoInJ4IG92ZXJmbG93ICFcbiIpKTsKLQkJdGFza2xldF9zY2hlZHVsZSgmcnRscHJpdi0+d29ya3MuaXJxX3Rhc2tsZXQpOworCQlfcnRsX3BjaV9yeF9pbnRlcnJ1cHQoaHcpOwogCX0KIAorCWlmIChydGxwcml2LT5ydGxoYWwuZWFybHltb2RlX2VuYWJsZSkKKwkJdGFza2xldF9zY2hlZHVsZSgmcnRscHJpdi0+d29ya3MuaXJxX3Rhc2tsZXQpOworCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRscHJpdi0+bG9ja3MuaXJxX3RoX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKQEAgLTgwOCw3ICs5MzUsNyBAQAogCiBzdGF0aWMgdm9pZCBfcnRsX3BjaV9pcnFfdGFza2xldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKLQlfcnRsX3BjaV9yeF9pbnRlcnJ1cHQoaHcpOworCV9ydGxfcGNpX3R4X2Noa193YWl0cShodyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9ydGxfcGNpX3ByZXBhcmVfYmNuX3Rhc2tsZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCkBAIC04MTYsMTQgKzk0MywxNSBAQAogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOwogCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7Ci0Jc3RydWN0IHJ0bDgxOTJfdHhfcmluZyAqcmluZyA9ICZydGxwY2ktPnR4X3JpbmdbQkVBQ09OX1FVRVVFXTsKKwlzdHJ1Y3QgcnRsODE5Ml90eF9yaW5nICpyaW5nID0gTlVMTDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gTlVMTDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBOVUxMOwogCXN0cnVjdCBza19idWZmICpwc2tiID0gTlVMTDsKIAlzdHJ1Y3QgcnRsX3R4X2Rlc2MgKnBkZXNjID0gTlVMTDsKLQl1bnNpZ25lZCBpbnQgcXVldWVfaW5kZXg7CisJc3RydWN0IHJ0bF90Y2JfZGVzYyB0Y2JfZGVzYzsKIAl1OCB0ZW1wX29uZSA9IDE7CiAKKwltZW1zZXQoJnRjYl9kZXNjLCAwLCBzaXplb2Yoc3RydWN0IHJ0bF90Y2JfZGVzYykpOwogCXJpbmcgPSAmcnRscGNpLT50eF9yaW5nW0JFQUNPTl9RVUVVRV07CiAJcHNrYiA9IF9fc2tiX2RlcXVldWUoJnJpbmctPnF1ZXVlKTsKIAlpZiAocHNrYikKQEAgLTgzMywxNCArOTYxLDExIEBACiAJcHNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCBtYWMtPnZpZik7CiAJaWYgKHBza2IgPT0gTlVMTCkKIAkJcmV0dXJuOwotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKShwc2tiLT5kYXRhKTsKKwloZHIgPSBydGxfZ2V0X2hkcihwc2tiKTsKIAlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihwc2tiKTsKLQotCXF1ZXVlX2luZGV4ID0gQkVBQ09OX1FVRVVFOwotCiAJcGRlc2MgPSAmcmluZy0+ZGVzY1swXTsKIAlydGxwcml2LT5jZmctPm9wcy0+ZmlsbF90eF9kZXNjKGh3LCBoZHIsICh1OCAqKSBwZGVzYywKLQkJCQkJaW5mbywgcHNrYiwgcXVldWVfaW5kZXgpOworCQlpbmZvLCBwc2tiLCBCRUFDT05fUVVFVUUsICZ0Y2JfZGVzYyk7CiAKIAlfX3NrYl9xdWV1ZV90YWlsKCZyaW5nLT5xdWV1ZSwgcHNrYik7CiAKQEAgLTg4Miw3ICsxMDA3LDYgQEAKIAlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOwogCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CiAJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKLQlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKIAogCXJ0bHBjaS0+dXBfZmlyc3RfdGltZSA9IHRydWU7CiAJcnRscGNpLT5iZWluZ19pbml0X2FkYXB0ZXIgPSBmYWxzZTsKQEAgLTg5MCwzMSArMTAxNCwyMCBAQAogCXJ0bGhhbC0+aHcgPSBodzsKIAlydGxwY2ktPnBkZXYgPSBwZGV2OwogCi0JcHBzYy0+aW5hY3RpdmVwcyA9IGZhbHNlOwotCXBwc2MtPmxlaXN1cmVfcHMgPSB0cnVlOwotCXBwc2MtPmZ3Y3RybF9scHMgPSB0cnVlOwotCXBwc2MtPnJlZ19md2N0cmxfbHBzID0gMzsKLQlwcHNjLT5yZWdfbWF4X2xwc19hd2FrZWludHZsID0gNTsKLQotCWlmIChwcHNjLT5yZWdfZndjdHJsX2xwcyA9PSAxKQotCQlwcHNjLT5md2N0cmxfcHNtb2RlID0gRldfUFNfTUlOX01PREU7Ci0JZWxzZSBpZiAocHBzYy0+cmVnX2Z3Y3RybF9scHMgPT0gMikKLQkJcHBzYy0+ZndjdHJsX3BzbW9kZSA9IEZXX1BTX01BWF9NT0RFOwotCWVsc2UgaWYgKHBwc2MtPnJlZ19md2N0cmxfbHBzID09IDMpCi0JCXBwc2MtPmZ3Y3RybF9wc21vZGUgPSBGV19QU19EVElNX01PREU7Ci0KIAkvKlR4L1J4IHJlbGF0ZWQgdmFyICovCiAJX3J0bF9wY2lfaW5pdF90cnhfdmFyKGh3KTsKIAotCSAvKklCU1MqLyBtYWMtPmJlYWNvbl9pbnRlcnZhbCA9IDEwMDsKKwkvKklCU1MqLyBtYWMtPmJlYWNvbl9pbnRlcnZhbCA9IDEwMDsKIAotCSAvKkFNUERVKi8gbWFjLT5taW5fc3BhY2VfY2ZnID0gMDsKKwkvKkFNUERVKi8KKwltYWMtPm1pbl9zcGFjZV9jZmcgPSAwOwogCW1hYy0+bWF4X21zc19kZW5zaXR5ID0gMDsKIAkvKnNldCBzYW5lIEFNUERVIGRlZmF1bHRzICovCiAJbWFjLT5jdXJyZW50X2FtcGR1X2RlbnNpdHkgPSA3OwogCW1hYy0+Y3VycmVudF9hbXBkdV9mYWN0b3IgPSAzOwogCi0JIC8qUU9TKi8gcnRscGNpLT5hY21fbWV0aG9kID0gZUFjbVdheTJfU1c7CisJLypRT1MqLworCXJ0bHBjaS0+YWNtX21ldGhvZCA9IGVBY21XYXkyX1NXOwogCiAJLyp0YXNrICovCiAJdGFza2xldF9pbml0KCZydGxwcml2LT53b3Jrcy5pcnFfdGFza2xldCwKQEAgLTk1NSw3ICsxMDY4LDggQEAKIAkJICgicXVldWU6JWQsIHJpbmdfYWRkcjolcFxuIiwgcHJpbywgcmluZykpOwogCiAJZm9yIChpID0gMDsgaSA8IGVudHJpZXM7IGkrKykgewotCQluZXh0ZGVzY2FkZHJlc3MgPSAodTMyKSBkbWEgKyAoKGkgKyAxKSAlIGVudHJpZXMpICoKKwkJbmV4dGRlc2NhZGRyZXNzID0gKHUzMikgZG1hICsKKwkJCQkJICAgICAgKChpICsgMSkgJSBlbnRyaWVzKSAqCiAJCQkJCSAgICAgIHNpemVvZigqcmluZyk7CiAKIAkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9kZXNjKCh1OCAqKSYocmluZ1tpXSksCkBAIC0xMDIwLDcgKzExMzQsNyBAQAogCQkJCQkgICBydGxwY2ktPnJ4YnVmZmVyc2l6ZSwKIAkJCQkJICAgUENJX0RNQV9GUk9NREVWSUNFKTsKIAotCQkJYnVmZmVyYWRkcmVzcyA9ICh1MzIpKCooKGRtYV9hZGRyX3QgKilza2ItPmNiKSk7CisJCQlidWZmZXJhZGRyZXNzID0gKCooKGRtYV9hZGRyX3QgKilza2ItPmNiKSk7CiAJCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2Rlc2MoKHU4ICopZW50cnksIGZhbHNlLAogCQkJCQkJICAgIEhXX0RFU0NfUlhCVUZGX0FERFIsCiAJCQkJCQkgICAgKHU4ICopJmJ1ZmZlcmFkZHJlc3MpOwpAQCAtMTIwMyw3MiArMTMxNyw3MyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IF9ydGxfbWFjX3RvX2h3cXVldWUoX19sZTE2IGZjLAotCQl1bnNpZ25lZCBpbnQgbWFjODAyMTFfcXVldWVfaW5kZXgpCi17Ci0JdW5zaWduZWQgaW50IGh3X3F1ZXVlX2luZGV4OwotCi0JaWYgKHVubGlrZWx5KGllZWU4MDIxMV9pc19iZWFjb24oZmMpKSkgewotCQlod19xdWV1ZV9pbmRleCA9IEJFQUNPTl9RVUVVRTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKGllZWU4MDIxMV9pc19tZ210KGZjKSkgewotCQlod19xdWV1ZV9pbmRleCA9IE1HTlRfUVVFVUU7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXN3aXRjaCAobWFjODAyMTFfcXVldWVfaW5kZXgpIHsKLQljYXNlIDA6Ci0JCWh3X3F1ZXVlX2luZGV4ID0gVk9fUVVFVUU7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJaHdfcXVldWVfaW5kZXggPSBWSV9RVUVVRTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlod19xdWV1ZV9pbmRleCA9IEJFX1FVRVVFOzsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQlod19xdWV1ZV9pbmRleCA9IEJLX1FVRVVFOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlod19xdWV1ZV9pbmRleCA9IEJFX1FVRVVFOwotCQlSVF9BU1NFUlQoZmFsc2UsICgiUVNMVF9CRSBxdWV1ZSwgc2tiX3F1ZXVlOiVkXG4iLAotCQkJCSAgbWFjODAyMTFfcXVldWVfaW5kZXgpKTsKLQkJYnJlYWs7Ci0JfQotCi1vdXQ6Ci0JcmV0dXJuIGh3X3F1ZXVlX2luZGV4OwotfQotCi1zdGF0aWMgaW50IHJ0bF9wY2lfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgYm9vbCBydGxfcGNpX3R4X2Noa193YWl0cV9pbnNlcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCXN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwotCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSBpbmZvLT5jb250cm9sLnN0YTsKKwlzdHJ1Y3QgcnRsX3N0YV9pbmZvICpzdGFfZW50cnkgPSBOVUxMOworCXU4IHRpZCA9IHJ0bF9nZXRfdGlkKHNrYik7CisKKwlpZiAoIXN0YSkKKwkJcmV0dXJuIGZhbHNlOworCXN0YV9lbnRyeSA9IChzdHJ1Y3QgcnRsX3N0YV9pbmZvICopc3RhLT5kcnZfcHJpdjsKKworCWlmICghcnRscHJpdi0+cnRsaGFsLmVhcmx5bW9kZV9lbmFibGUpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoc3RhX2VudHJ5LT50aWRzW3RpZF0uYWdnLmFnZ19zdGF0ZSAhPSBSVExfQUdHX09QRVJBVElPTkFMKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKF9ydGxfbWFjX3RvX2h3cXVldWUoaHcsIHNrYikgPiBWT19RVUVVRSkKKwkJcmV0dXJuIGZhbHNlOworCWlmICh0aWQgPiA3KQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBtYXliZSBldmVyeSB0aWQgc2hvdWxkIGJlIGNoZWNrZWQgKi8KKwlpZiAoIXJ0bHByaXYtPmxpbmtfaW5mby5oaWdoZXJfYnVzeXR4dHJhZmZpY1t0aWRdKQorCQlyZXR1cm4gZmFsc2U7CisKKwlzcGluX2xvY2tfYmgoJnJ0bHByaXYtPmxvY2tzLndhaXRxX2xvY2spOworCXNrYl9xdWV1ZV90YWlsKCZydGxwcml2LT5tYWM4MDIxMS5za2Jfd2FpdHFbdGlkXSwgc2tiKTsKKwlzcGluX3VubG9ja19iaCgmcnRscHJpdi0+bG9ja3Mud2FpdHFfbG9jayk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGludCBydGxfcGNpX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQlzdHJ1Y3QgcnRsX3RjYl9kZXNjICpwdGNiX2Rlc2MpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfc3RhX2luZm8gKnN0YV9lbnRyeSA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSBpbmZvLT5jb250cm9sLnN0YTsKIAlzdHJ1Y3QgcnRsODE5Ml90eF9yaW5nICpyaW5nOwogCXN0cnVjdCBydGxfdHhfZGVzYyAqcGRlc2M7CiAJdTggaWR4OwotCXVuc2lnbmVkIGludCBxdWV1ZV9pbmRleCwgaHdfcXVldWU7CisJdTggaHdfcXVldWUgPSBfcnRsX21hY190b19od3F1ZXVlKGh3LCBza2IpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKShza2ItPmRhdGEpOwotCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gcnRsX2dldF9oZHIoc2tiKTsKKwlfX2xlMTYgZmMgPSBydGxfZ2V0X2ZjKHNrYik7CiAJdTggKnBkYV9hZGRyID0gaGRyLT5hZGRyMTsKIAlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOwogCS8qc3NuICovCi0JdTggKnFjID0gTlVMTDsKIAl1OCB0aWQgPSAwOwogCXUxNiBzZXFfbnVtYmVyID0gMDsKIAl1OCBvd247CiAJdTggdGVtcF9vbmUgPSAxOwogCi0JaWYgKGllZWU4MDIxMV9pc19tZ210KGZjKSkKLQkJcnRsX3R4X21nbXRfcHJvYyhodywgc2tiKTsKLQlydGxfYWN0aW9uX3Byb2MoaHcsIHNrYiwgdHJ1ZSk7CisJaWYgKGllZWU4MDIxMV9pc19hdXRoKGZjKSkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFTkQsIERCR19ETUVTRywgKCJNQUM4MDIxMV9MSU5LSU5HXG4iKSk7CisJCXJ0bF9pcHNfbmljX29uKGh3KTsKKwl9CiAKLQlxdWV1ZV9pbmRleCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwotCWh3X3F1ZXVlID0gX3J0bF9tYWNfdG9faHdxdWV1ZShmYywgcXVldWVfaW5kZXgpOworCWlmIChydGxwcml2LT5wc2Muc3dfcHNfZW5hYmxlZCkgeworCQlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpICYmICFpZWVlODAyMTFfaXNfbnVsbGZ1bmMoZmMpICYmCisJCQkhaWVlZTgwMjExX2hhc19wbShmYykpCisJCQloZHItPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUE0pOworCX0KKworCXJ0bF9hY3Rpb25fcHJvYyhodywgc2tiLCB0cnVlKTsKIAogCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihwZGFfYWRkcikpCiAJCXJ0bHByaXYtPnN0YXRzLnR4Ynl0ZXNtdWx0aWNhc3QgKz0gc2tiLT5sZW47CkBAIC0xMjc4LDcgKzEzOTMsNiBAQAogCQlydGxwcml2LT5zdGF0cy50eGJ5dGVzdW5pY2FzdCArPSBza2ItPmxlbjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZydGxwcml2LT5sb2Nrcy5pcnFfdGhfbG9jaywgZmxhZ3MpOwotCiAJcmluZyA9ICZydGxwY2ktPnR4X3JpbmdbaHdfcXVldWVdOwogCWlmIChod19xdWV1ZSAhPSBCRUFDT05fUVVFVUUpCiAJCWlkeCA9IChyaW5nLT5pZHggKyBza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkpICUKQEAgLTEzMDEsNDMgKzE0MTUsMzAgQEAKIAkJcmV0dXJuIHNrYi0+bGVuOwogCX0KIAotCS8qCi0JICppZihpZWVlODAyMTFfaXNfbnVsbGZ1bmMoZmMpKSB7Ci0JICogICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5pcnFfdGhfbG9jaywgZmxhZ3MpOwotCSAqICAgICAgcmV0dXJuIDE7Ci0JICp9Ci0JICovCi0KIAlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgewotCQlxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpOwotCQl0aWQgPSBxY1swXSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOworCQl0aWQgPSBydGxfZ2V0X3RpZChza2IpOworCQlpZiAoc3RhKSB7CisJCQlzdGFfZW50cnkgPSAoc3RydWN0IHJ0bF9zdGFfaW5mbyAqKXN0YS0+ZHJ2X3ByaXY7CisJCQlzZXFfbnVtYmVyID0gKGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpICYKKwkJCQkgICAgICBJRUVFODAyMTFfU0NUTF9TRVEpID4+IDQ7CisJCQlzZXFfbnVtYmVyICs9IDE7CiAKLQkJc2VxX251bWJlciA9IG1hYy0+dGlkc1t0aWRdLnNlcV9udW1iZXI7Ci0JCXNlcV9udW1iZXIgJj0gSUVFRTgwMjExX1NDVExfU0VROwotCQkvKgotCQkgKmhkci0+c2VxX2N0cmwgPSBoZHItPnNlcV9jdHJsICYKLQkJICpjcHVfdG9fbGUxNihJRUVFODAyMTFfU0NUTF9GUkFHKTsKLQkJICpoZHItPnNlcV9jdHJsIHw9IGNwdV90b19sZTE2KHNlcV9udW1iZXIpOwotCQkgKi8KLQotCQlzZXFfbnVtYmVyICs9IDE7CisJCQlpZiAoIWllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCQkJc3RhX2VudHJ5LT50aWRzW3RpZF0uc2VxX251bWJlciA9IHNlcV9udW1iZXI7CisJCX0KIAl9CiAKIAlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpKQogCQlydGxwcml2LT5jZmctPm9wcy0+bGVkX2NvbnRyb2woaHcsIExFRF9DVExfVFgpOwogCi0JcnRscHJpdi0+Y2ZnLT5vcHMtPmZpbGxfdHhfZGVzYyhodywgaGRyLCAodTggKikgcGRlc2MsCi0JCQkJCWluZm8sIHNrYiwgaHdfcXVldWUpOworCXJ0bHByaXYtPmNmZy0+b3BzLT5maWxsX3R4X2Rlc2MoaHcsIGhkciwgKHU4ICopcGRlc2MsCisJCQlpbmZvLCBza2IsIGh3X3F1ZXVlLCBwdGNiX2Rlc2MpOwogCiAJX19za2JfcXVldWVfdGFpbCgmcmluZy0+cXVldWUsIHNrYik7CiAKLQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2Rlc2MoKHU4ICopIHBkZXNjLCB0cnVlLAorCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfZGVzYygodTggKilwZGVzYywgdHJ1ZSwKIAkJCQkgICAgSFdfREVTQ19PV04sICh1OCAqKSZ0ZW1wX29uZSk7CiAKLQlpZiAoIWllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKLQkJaWYgKHFjKQotCQkJbWFjLT50aWRzW3RpZF0uc2VxX251bWJlciA9IHNlcV9udW1iZXI7Ci0JfQogCiAJaWYgKChyaW5nLT5lbnRyaWVzIC0gc2tiX3F1ZXVlX2xlbigmcmluZy0+cXVldWUpKSA8IDIgJiYKIAkgICAgaHdfcXVldWUgIT0gQkVBQ09OX1FVRVVFKSB7CkBAIC0xMzU5LDYgKzE0NjAsMzUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgcnRsX3BjaV9mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBkcm9wKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJdTE2IGkgPSAwOworCWludCBxdWV1ZV9pZDsKKwlzdHJ1Y3QgcnRsODE5Ml90eF9yaW5nICpyaW5nOworCisJZm9yIChxdWV1ZV9pZCA9IFJUTF9QQ0lfTUFYX1RYX1FVRVVFX0NPVU5UIC0gMTsgcXVldWVfaWQgPj0gMDspIHsKKwkJdTMyIHF1ZXVlX2xlbjsKKwkJcmluZyA9ICZwY2lwcml2LT5kZXYudHhfcmluZ1txdWV1ZV9pZF07CisJCXF1ZXVlX2xlbiA9IHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKTsKKwkJaWYgKHF1ZXVlX2xlbiA9PSAwIHx8IHF1ZXVlX2lkID09IEJFQUNPTl9RVUVVRSB8fAorCQkJcXVldWVfaWQgPT0gVFhDTURfUVVFVUUpIHsKKwkJCXF1ZXVlX2lkLS07CisJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCW1zbGVlcCgyMCk7CisJCQlpKys7CisJCX0KKworCQkvKiB3ZSBqdXN0IHdhaXQgMXMgZm9yIGFsbCBxdWV1ZXMgKi8KKwkJaWYgKHJ0bHByaXYtPnBzYy5yZnB3cl9zdGF0ZSA9PSBFUkZPRkYgfHwKKwkJCWlzX2hhbF9zdG9wKHJ0bGhhbCkgfHwgaSA+PSAyMDApCisJCQlyZXR1cm47CisJfQorfQorCiBzdGF0aWMgdm9pZCBydGxfcGNpX2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CkBAIC0xNDc3LDExICsxNjA3LDE0IEBACiAJc3RydWN0IHBjaV9kZXYgKmJyaWRnZV9wZGV2ID0gcGRldi0+YnVzLT5zZWxmOwogCXUxNiB2ZW5kZXJpZDsKIAl1MTYgZGV2aWNlaWQ7CisJdTggcmV2aXNpb25pZDsKIAl1MTYgaXJxbGluZTsKIAl1OCB0bXA7CiAKKwlwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX3ZlbmRvciA9IFBDSV9CUklER0VfVkVORE9SX1VOS05PV047CiAJdmVuZGVyaWQgPSBwZGV2LT52ZW5kb3I7CiAJZGV2aWNlaWQgPSBwZGV2LT5kZXZpY2U7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgMHg4LCAmcmV2aXNpb25pZCk7CiAJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgMHgzQywgJmlycWxpbmUpOwogCiAJaWYgKGRldmljZWlkID09IFJUTF9QQ0lfODE5Ml9ESUQgfHwKQEAgLTE0OTIsNyArMTYyNSw3IEBACiAJICAgIGRldmljZWlkID09IFJUTF9QQ0lfODE3M19ESUQgfHwKIAkgICAgZGV2aWNlaWQgPT0gUlRMX1BDSV84MTcyX0RJRCB8fAogCSAgICBkZXZpY2VpZCA9PSBSVExfUENJXzgxNzFfRElEKSB7Ci0JCXN3aXRjaCAocGRldi0+cmV2aXNpb24pIHsKKwkJc3dpdGNoIChyZXZpc2lvbmlkKSB7CiAJCWNhc2UgUlRMX1BDSV9SRVZJU0lPTl9JRF84MTkyUENJRToKIAkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0RNRVNHLAogCQkJCSAoIjgxOTIgUENJLUUgaXMgZm91bmQgLSAiCkBAIC0xNTIxLDYgKzE2NTQsMTIgQEAKIAkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfRE1FU0csCiAJCQkgKCI4MTkyQyBQQ0ktRSBpcyBmb3VuZCAtICIKIAkJCSAgInZpZC9kaWQ9JXgvJXhcbiIsIHZlbmRlcmlkLCBkZXZpY2VpZCkpOworCX0gZWxzZSBpZiAoZGV2aWNlaWQgPT0gUlRMX1BDSV84MTkyREVfRElEIHx8CisJCSAgIGRldmljZWlkID09IFJUTF9QQ0lfODE5MkRFX0RJRDIpIHsKKwkJcnRsaGFsLT5od190eXBlID0gSEFSRFdBUkVfVFlQRV9SVEw4MTkyREU7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0RNRVNHLAorCQkJICgiODE5MkQgUENJLUUgaXMgZm91bmQgLSAiCisJCQkgICJ2aWQvZGlkPSV4LyV4XG4iLCB2ZW5kZXJpZCwgZGV2aWNlaWQpKTsKIAl9IGVsc2UgewogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX1dBUk5JTkcsCiAJCQkgKCJFcnI6IFVua25vd24gZGV2aWNlIC0iCkBAIC0xNTI5LDYgKzE2NjgsMjUgQEAKIAkJcnRsaGFsLT5od190eXBlID0gUlRMX0RFRkFVTFRfSEFSRFdBUkVfVFlQRTsKIAl9CiAKKwlpZiAocnRsaGFsLT5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODE5MkRFKSB7CisJCWlmIChyZXZpc2lvbmlkID09IDAgfHwgcmV2aXNpb25pZCA9PSAxKSB7CisJCQlpZiAocmV2aXNpb25pZCA9PSAwKSB7CisJCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULAorCQkJCQkgREJHX0xPVUQsICgiRmluZCA5MkRFIE1BQzAuXG4iKSk7CisJCQkJcnRsaGFsLT5pbnRlcmZhY2VpbmRleCA9IDA7CisJCQl9IGVsc2UgaWYgKHJldmlzaW9uaWQgPT0gMSkgeworCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0xPVUQsCisJCQkJCSgiRmluZCA5MkRFIE1BQzEuXG4iKSk7CisJCQkJcnRsaGFsLT5pbnRlcmZhY2VpbmRleCA9IDE7CisJCQl9CisJCX0gZWxzZSB7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19MT1VELAorCQkJCSgiVW5rbm93biBkZXZpY2UgLSAiCisJCQkJIlZlbmRvcklEL0RldmljZUlEPSV4LyV4LCBSZXZpc2lvbj0leFxuIiwKKwkJCQl2ZW5kZXJpZCwgZGV2aWNlaWQsIHJldmlzaW9uaWQpKTsKKwkJCXJ0bGhhbC0+aW50ZXJmYWNlaW5kZXggPSAwOworCQl9CisJfQogCS8qZmluZCBidXMgaW5mbyAqLwogCXBjaXByaXYtPm5kaXNfYWRhcHRlci5idXNudW1iZXIgPSBwZGV2LT5idXMtPm51bWJlcjsKIAlwY2lwcml2LT5uZGlzX2FkYXB0ZXIuZGV2bnVtYmVyID0gUENJX1NMT1QocGRldi0+ZGV2Zm4pOwpAQCAtMTU1NCwxMiArMTcxMiwxMiBAQAogCQkgICAgUENJX1NMT1QoYnJpZGdlX3BkZXYtPmRldmZuKTsKIAkJcGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWJyaWRnZV9mdW5jbnVtID0KIAkJICAgIFBDSV9GVU5DKGJyaWRnZV9wZGV2LT5kZXZmbik7Ci0JCXBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2licmlkZ2VfcGNpZWhkcl9vZmZzZXQgPQotCQkgICAgcGNpX3BjaWVfY2FwKGJyaWRnZV9wZGV2KTsKIAkJcGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWNmZ19hZGRycG9ydCA9CiAJCSAgICAocGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWJyaWRnZV9idXNudW0gPDwgMTYpIHwKIAkJICAgIChwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX2Rldm51bSA8PCAxMSkgfAogCQkgICAgKHBjaXByaXYtPm5kaXNfYWRhcHRlci5wY2licmlkZ2VfZnVuY251bSA8PCA4KSB8ICgxIDw8IDMxKTsKKwkJcGNpcHJpdi0+bmRpc19hZGFwdGVyLnBjaWJyaWRnZV9wY2llaGRyX29mZnNldCA9CisJCSAgICBwY2lfcGNpZV9jYXAoYnJpZGdlX3BkZXYpOwogCQlwY2lwcml2LT5uZGlzX2FkYXB0ZXIubnVtNGJ5dGVzID0KIAkJICAgIChwY2lwcml2LT5uZGlzX2FkYXB0ZXIucGNpYnJpZGdlX3BjaWVoZHJfb2Zmc2V0ICsgMHgxMCkgLyA0OwogCkBAIC0xNjQyLDYgKzE4MDAsMTEgQEAKIAlwY2lwcml2ID0gKHZvaWQgKilydGxwcml2LT5wcml2OwogCXBjaXByaXYtPmRldi5wZGV2ID0gcGRldjsKIAorCS8qIGluaXQgY2ZnICYgaW50Zl9vcHMgKi8KKwlydGxwcml2LT5ydGxoYWwuaW50ZXJmYWNlID0gSU5URl9QQ0k7CisJcnRscHJpdi0+Y2ZnID0gKHN0cnVjdCBydGxfaGFsX2NmZyAqKShpZC0+ZHJpdmVyX2RhdGEpOworCXJ0bHByaXYtPmludGZfb3BzID0gJnJ0bF9wY2lfb3BzOworCiAJLyoKIAkgKmluaXQgZGJncCBmbGFncyBiZWZvcmUgYWxsCiAJICpvdGhlciBmdW5jdGlvbnMsIGJlY2F1c2Ugd2Ugd2lsbApAQCAtMTY1OSwxMyArMTgyMiwxNCBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCXBtZW1fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMik7Ci0JcG1lbV9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDIpOwotCXBtZW1fZmxhZ3MgPSBwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgMik7CisJcG1lbV9zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBydGxwcml2LT5jZmctPmJhcl9pZCk7CisJcG1lbV9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIHJ0bHByaXYtPmNmZy0+YmFyX2lkKTsKKwlwbWVtX2ZsYWdzID0gcGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIHJ0bHByaXYtPmNmZy0+YmFyX2lkKTsKIAogCS8qc2hhcmVkIG1lbSBzdGFydCAqLwogCXJ0bHByaXYtPmlvLnBjaV9tZW1fc3RhcnQgPQotCQkJKHVuc2lnbmVkIGxvbmcpcGNpX2lvbWFwKHBkZXYsIDIsIHBtZW1fbGVuKTsKKwkJCSh1bnNpZ25lZCBsb25nKXBjaV9pb21hcChwZGV2LAorCQkJcnRscHJpdi0+Y2ZnLT5iYXJfaWQsIHBtZW1fbGVuKTsKIAlpZiAocnRscHJpdi0+aW8ucGNpX21lbV9zdGFydCA9PSAwKSB7CiAJCVJUX0FTU0VSVChmYWxzZSwgKCJDYW4ndCBtYXAgUENJIG1lbVxuIikpOwogCQlnb3RvIGZhaWwyOwpAQCAtMTY4NCwxMSArMTg0OCw2IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4MDQsIDB4MDYpOwogCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCAweDA0LCAweDA3KTsKIAotCS8qIGluaXQgY2ZnICYgaW50Zl9vcHMgKi8KLQlydGxwcml2LT5ydGxoYWwuaW50ZXJmYWNlID0gSU5URl9QQ0k7Ci0JcnRscHJpdi0+Y2ZnID0gKHN0cnVjdCBydGxfaGFsX2NmZyAqKShpZC0+ZHJpdmVyX2RhdGEpOwotCXJ0bHByaXYtPmludGZfb3BzID0gJnJ0bF9wY2lfb3BzOwotCiAJLyogZmluZCBhZGFwdGVyICovCiAJX3J0bF9wY2lfZmluZF9hZGFwdGVyKHBkZXYsIGh3KTsKIApAQCAtMTgwNiw3ICsxOTY1LDYgQEAKIAogCXJ0bF9wY2lfZGVpbml0KGh3KTsKIAlydGxfZGVpbml0X2NvcmUoaHcpOwotCXJ0bHByaXYtPmNmZy0+b3BzLT5kZWluaXRfc3dfbGVkcyhodyk7CiAJX3J0bF9wY2lfaW9faGFuZGxlcl9yZWxlYXNlKGh3KTsKIAlydGxwcml2LT5jZmctPm9wcy0+ZGVpbml0X3N3X3ZhcnMoaHcpOwogCkBAIC0xODIxLDYgKzE5NzksOSBAQAogCX0KIAogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworCXJ0bF9wY2lfZGlzYWJsZV9hc3BtKGh3KTsKKwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCWllZWU4MDIxMV9mcmVlX2h3KGh3KTsKQEAgLTE4NDQsMTAgKzIwMDUsMTUgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBpbnQgcnRsX3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCisJcnRscHJpdi0+Y2ZnLT5vcHMtPmh3X3N1c3BlbmQoaHcpOworCXJ0bF9kZWluaXRfcmZraWxsKGh3KTsKKwogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7Ci0KIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wocnRsX3BjaV9zdXNwZW5kKTsKQEAgLTE4NTUsNiArMjAyMSw4IEBACiBpbnQgcnRsX3BjaV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJaW50IHJldDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CkBAIC0xODY1LDE1ICsyMDMzLDIwIEBACiAKIAlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKIAorCXJ0bHByaXYtPmNmZy0+b3BzLT5od19yZXN1bWUoaHcpOworCXJ0bF9pbml0X3Jma2lsbChodyk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHJ0bF9wY2lfcmVzdW1lKTsKIAogc3RydWN0IHJ0bF9pbnRmX29wcyBydGxfcGNpX29wcyA9IHsKKwkucmVhZF9lZnVzZV9ieXRlID0gcmVhZF9lZnVzZV9ieXRlLAogCS5hZGFwdGVyX3N0YXJ0ID0gcnRsX3BjaV9zdGFydCwKIAkuYWRhcHRlcl9zdG9wID0gcnRsX3BjaV9zdG9wLAogCS5hZGFwdGVyX3R4ID0gcnRsX3BjaV90eCwKKwkuZmx1c2ggPSBydGxfcGNpX2ZsdXNoLAogCS5yZXNldF90cnhfcmluZyA9IHJ0bF9wY2lfcmVzZXRfdHJ4X3JpbmcsCisJLndhaXRxX2luc2VydCA9IHJ0bF9wY2lfdHhfY2hrX3dhaXRxX2luc2VydCwKIAogCS5kaXNhYmxlX2FzcG0gPSBydGxfcGNpX2Rpc2FibGVfYXNwbSwKIAkuZW5hYmxlX2FzcG0gPSBydGxfcGNpX2VuYWJsZV9hc3BtLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmgKaW5kZXggMGNhYTgxNC4uNjcxYjFmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5oCkBAIC0xMDIsOCArMTAyLDggQEAKICNkZWZpbmUgUlRMX1BDSV84MTkxQ0VfRElECTB4ODE3NwkvKjgxOTJjZSAqLwogI2RlZmluZSBSVExfUENJXzgxODhDRV9ESUQJMHg4MTc2CS8qODE5MmNlICovCiAjZGVmaW5lIFJUTF9QQ0lfODE5MkNVX0RJRAkweDgxOTEJLyo4MTkyY2UgKi8KLSNkZWZpbmUgUlRMX1BDSV84MTkyREVfRElECTB4MDkyRAkvKjgxOTJjZSAqLwotI2RlZmluZSBSVExfUENJXzgxOTJEVV9ESUQJMHgwOTJECS8qODE5MmNlICovCisjZGVmaW5lIFJUTF9QQ0lfODE5MkRFX0RJRAkweDgxOTMJLyo4MTkyZGUgKi8KKyNkZWZpbmUgUlRMX1BDSV84MTkyREVfRElEMgkweDAwMkIJLyo5MkRFKi8KIAogLyo4MTkyIHN1cHBvcnQgMTYgcGFnZXMgb2YgSU8gcmVnaXN0ZXJzKi8KICNkZWZpbmUgUlRMX01FTV9NQVBQRURfSU9fUkFOR0VfODE5MFBDSQkJMHgxMDAwCkBAIC0xMjksNiArMTI5LDExIEBACiAJUENJX0JSSURHRV9WRU5ET1JfTUFYLAogfTsKIAorc3RydWN0IHJ0bF9wY2lfY2FwYWJpbGl0aWVzX2hlYWRlciB7CisJdTggY2FwYWJpbGl0eV9pZDsKKwl1OCBuZXh0OworfTsKKwogc3RydWN0IHJ0bF9yeF9kZXNjIHsKIAl1MzIgZHdvcmRbOF07CiB9IF9fcGFja2VkOwpAQCAtMTYxLDcgKzE2Niw5IEBACiAKIAlib29sIGRyaXZlcl9pc19nb2luZ3RvX3VubG9hZDsKIAlib29sIHVwX2ZpcnN0X3RpbWU7CisJYm9vbCBmaXJzdF9pbml0OwogCWJvb2wgYmVpbmdfaW5pdF9hZGFwdGVyOworCWJvb2wgaW5pdF9yZWFkeTsKIAlib29sIGlycV9lbmFibGVkOwogCiAJLypUeCAqLwpAQCAtMTkyLDExICsxOTksMTQgQEAKIAl1OCBjb25zdF9kZXZpY2VwY2lfYXNwbV9zZXR0aW5nOwogCS8qSWYgaXQgc3VwcG9ydHMgQVNQTSwgT2Zmc2V0WzU2MGhdID0gMHg0MCwKIAkgICBvdGhlcndpc2UgT2Zmc2V0WzU2MGhdID0gMHgwMC4gKi8KLQlib29sIGJfc3VwcG9ydF9hc3BtOwotCWJvb2wgYl9zdXBwb3J0X2JhY2tkb29yOworCWJvb2wgc3VwcG9ydF9hc3BtOworCWJvb2wgc3VwcG9ydF9iYWNrZG9vcjsKIAogCS8qUU9TICYgRURDQSAqLwogCWVudW0gYWNtX21ldGhvZCBhY21fbWV0aG9kOworCisJdTE2IHNob3J0cmV0cnlfbGltaXQ7CisJdTE2IGxvbmdyZXRyeV9saW1pdDsKIH07CiAKIHN0cnVjdCBtcF9hZGFwdGVyIHsKQEAgLTIyNyw2ICsyMzcsNyBAQAogCXN0cnVjdCBydGxfcGNpIGRldjsKIAlzdHJ1Y3QgbXBfYWRhcHRlciBuZGlzX2FkYXB0ZXI7CiAJc3RydWN0IHJ0bF9sZWRfY3RsIGxlZGN0bDsKKwlzdHJ1Y3QgYnRfY29leGlzdF9pbmZvIGJ0X2NvZXhpc3Q7CiB9OwogCiAjZGVmaW5lIHJ0bF9wY2lwcml2KGh3KQkJKCgoc3RydWN0IHJ0bF9wY2lfcHJpdiAqKShydGxfcHJpdihodykpLT5wcml2KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcHMuYwppbmRleCA2YjdlMjE3Li4yYmI3MTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wcy5jCkBAIC0zNiw3ICszNiw2IEBACiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOwogCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7Ci0JYm9vbCBpbml0X3N0YXR1cyA9IHRydWU7CiAKIAkvKjwxPiByZXNldCB0cnggcmluZyAqLwogCWlmIChydGxoYWwtPmludGVyZmFjZSA9PSBJTlRGX1BDSSkKQEAgLTQ5LDcgKzQ4LDYgQEAKIAkvKjwyPiBFbmFibGUgQWRhcHRlciAqLwogCXJ0bHByaXYtPmNmZy0+b3BzLT5od19pbml0KGh3KTsKIAlSVF9DTEVBUl9QU19MRVZFTChwcHNjLCBSVF9SRl9PRkZfTEVWTF9IQUxUX05JQyk7Ci0JLyppbml0X3N0YXR1cyA9IGZhbHNlOyAqLwogCiAJLyo8Mz4gRW5hYmxlIEludGVycnVwdCAqLwogCXJ0bHByaXYtPmNmZy0+b3BzLT5lbmFibGVfaW50ZXJydXB0KGh3KTsKQEAgLTU3LDEzICs1NSwxMiBAQAogCS8qPGVuYWJsZSB0aW1lcj4gKi8KIAlydGxfd2F0Y2hfZG9nX3RpbWVyX2NhbGxiYWNrKCh1bnNpZ25lZCBsb25nKWh3KTsKIAotCXJldHVybiBpbml0X3N0YXR1czsKKwlyZXR1cm4gdHJ1ZTsKIH0KIEVYUE9SVF9TWU1CT0wocnRsX3BzX2VuYWJsZV9uaWMpOwogCiBib29sIHJ0bF9wc19kaXNhYmxlX25pYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKLQlib29sIHN0YXR1cyA9IHRydWU7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCiAJLyo8MT4gU3RvcCBhbGwgdGltZXIgKi8KQEAgLTc1LDcgKzcyLDcgQEAKIAkvKjwzPiBEaXNhYmxlIEFkYXB0ZXIgKi8KIAlydGxwcml2LT5jZmctPm9wcy0+aHdfZGlzYWJsZShodyk7CiAKLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiB0cnVlOwogfQogRVhQT1JUX1NZTUJPTChydGxfcHNfZGlzYWJsZV9uaWMpOwogCkBAIC0xOTMsMTIgKzE5MCwxMyBAQAogCiAJcHBzYy0+c3dyZl9wcm9jZXNzaW5nID0gdHJ1ZTsKIAotCWlmIChwcHNjLT5pbmFjdGl2ZV9wd3JzdGF0ZSA9PSBFUkZPTiAmJiBydGxoYWwtPmludGVyZmFjZSA9PSBJTlRGX1BDSSkgeworCWlmIChwcHNjLT5pbmFjdGl2ZV9wd3JzdGF0ZSA9PSBFUkZPRkYgJiYKKwkgICAgcnRsaGFsLT5pbnRlcmZhY2UgPT0gSU5URl9QQ0kpIHsKIAkJaWYgKChwcHNjLT5yZWdfcmZwc19sZXZlbCAmIFJUX1JGX09GRl9MRVZMX0FTUE0pICYmCi0JCSAgICBSVF9JTl9QU19MRVZFTChwcHNjLCBSVF9SRl9PRkZfTEVWTF9BU1BNKSAmJgorCQkgICAgUlRfSU5fUFNfTEVWRUwocHBzYywgUlRfUFNfTEVWRUxfQVNQTSkgJiYKIAkJICAgIHJ0bGhhbC0+aW50ZXJmYWNlID09IElOVEZfUENJKSB7CiAJCQlydGxwcml2LT5pbnRmX29wcy0+ZGlzYWJsZV9hc3BtKGh3KTsKLQkJCVJUX0NMRUFSX1BTX0xFVkVMKHBwc2MsIFJUX1JGX09GRl9MRVZMX0FTUE0pOworCQkJUlRfQ0xFQVJfUFNfTEVWRUwocHBzYywgUlRfUFNfTEVWRUxfQVNQTSk7CiAJCX0KIAl9CiAKQEAgLTIwNyw5ICsyMDUsMTAgQEAKIAogCWlmIChwcHNjLT5pbmFjdGl2ZV9wd3JzdGF0ZSA9PSBFUkZPRkYgJiYKIAkgICAgcnRsaGFsLT5pbnRlcmZhY2UgPT0gSU5URl9QQ0kpIHsKLQkJaWYgKHBwc2MtPnJlZ19yZnBzX2xldmVsICYgUlRfUkZfT0ZGX0xFVkxfQVNQTSkgeworCQlpZiAocHBzYy0+cmVnX3JmcHNfbGV2ZWwgJiBSVF9SRl9PRkZfTEVWTF9BU1BNICYmCisJCQkhUlRfSU5fUFNfTEVWRUwocHBzYywgUlRfUFNfTEVWRUxfQVNQTSkpIHsKIAkJCXJ0bHByaXYtPmludGZfb3BzLT5lbmFibGVfYXNwbShodyk7Ci0JCQlSVF9TRVRfUFNfTEVWRUwocHBzYywgUlRfUkZfT0ZGX0xFVkxfQVNQTSk7CisJCQlSVF9TRVRfUFNfTEVWRUwocHBzYywgUlRfUFNfTEVWRUxfQVNQTSk7CiAJCX0KIAl9CiAKQEAgLTIzMyw2ICsyMzIsOSBAQAogCQlyZXR1cm47CiAJfQogCisJaWYgKG1hYy0+bGlua19zdGF0ZSA+IE1BQzgwMjExX05PTElOSykKKwkJcmV0dXJuOworCiAJaWYgKGlzX2hhbF9zdG9wKHJ0bGhhbCkpCiAJCXJldHVybjsKIApAQCAtMjg0LDEwICsyODYsMTQgQEAKIHZvaWQgcnRsX2lwc19uaWNfb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CiAJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CiAJZW51bSByZl9wd3JzdGF0ZSBydHN0YXRlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZiAobWFjLT5vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJcmV0dXJuOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0bHByaXYtPmxvY2tzLmlwc19sb2NrLCBmbGFncyk7CiAKIAlpZiAocHBzYy0+aW5hY3RpdmVwcykgewpAQCAtMzcwLDggKzM3Niw3IEBACiAJICogICBtb2RlIGFuZCBzZXQgUlBXTSB0byB0dXJuIFJGIG9uLgogCSAqLwogCi0JaWYgKChwcHNjLT5md2N0cmxfbHBzKSAmJiAocHBzYy0+bGVpc3VyZV9wcykgJiYKLQkgICAgIHBwc2MtPnJlcG9ydF9saW5rZWQpIHsKKwlpZiAoKHBwc2MtPmZ3Y3RybF9scHMpICYmIHBwc2MtPnJlcG9ydF9saW5rZWQpIHsKIAkJYm9vbCBmd19jdXJyZW50X2lucHM7CiAJCWlmIChwcHNjLT5kb3QxMV9wc21vZGUgPT0gRUFDVElWRSkgewogCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9SRiwgREJHX0RNRVNHLApAQCAtNDI1LDcgKzQzMCw3IEBACiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXVuc2lnbmVkIGxvbmcgZmxhZzsKIAotCWlmICghKHBwc2MtPmZ3Y3RybF9scHMgJiYgcHBzYy0+bGVpc3VyZV9wcykpCisJaWYgKCFwcHNjLT5md2N0cmxfbHBzKQogCQlyZXR1cm47CiAKIAlpZiAocnRscHJpdi0+c2VjLmJlaW5nX3NldGtleSkKQEAgLTQ0NiwxNyArNDUxLDE2IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnRscHJpdi0+bG9ja3MubHBzX2xvY2ssIGZsYWcpOwogCi0JaWYgKHBwc2MtPmxlaXN1cmVfcHMpIHsKLQkJLyogSWRsZSBmb3IgYSB3aGlsZSBpZiB3ZSBjb25uZWN0IHRvIEFQIGEgd2hpbGUgYWdvLiAqLwotCQlpZiAobWFjLT5jbnRfYWZ0ZXJfbGlua2VkID49IDIpIHsKLQkJCWlmIChwcHNjLT5kb3QxMV9wc21vZGUgPT0gRUFDVElWRSkgewotCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19MT1VELAorCS8qIElkbGUgZm9yIGEgd2hpbGUgaWYgd2UgY29ubmVjdCB0byBBUCBhIHdoaWxlIGFnby4gKi8KKwlpZiAobWFjLT5jbnRfYWZ0ZXJfbGlua2VkID49IDIpIHsKKwkJaWYgKHBwc2MtPmRvdDExX3BzbW9kZSA9PSBFQUNUSVZFKSB7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwKIAkJCQkJKCJFbnRlciA4MDIuMTEgcG93ZXIgc2F2ZSBtb2RlLi4uXG4iKSk7CiAKLQkJCQlydGxfbHBzX3NldF9wc21vZGUoaHcsIEVBVVRPUFMpOwotCQkJfQorCQkJcnRsX2xwc19zZXRfcHNtb2RlKGh3LCBFQVVUT1BTKTsKIAkJfQogCX0KKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLmxwc19sb2NrLCBmbGFnKTsKIH0KIApAQCAtNDcwLDE3ICs0NzQsMTcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZydGxwcml2LT5sb2Nrcy5scHNfbG9jaywgZmxhZyk7CiAKLQlpZiAocHBzYy0+ZndjdHJsX2xwcyAmJiBwcHNjLT5sZWlzdXJlX3BzKSB7CisJaWYgKHBwc2MtPmZ3Y3RybF9scHMpIHsKIAkJaWYgKHBwc2MtPmRvdDExX3BzbW9kZSAhPSBFQUNUSVZFKSB7CiAKIAkJCS8qRklYIE1FICovCiAJCQlydGxwcml2LT5jZmctPm9wcy0+ZW5hYmxlX2ludGVycnVwdChodyk7CiAKIAkJCWlmIChwcHNjLT5yZWdfcmZwc19sZXZlbCAmIFJUX1JGX0xQU19MRVZFTF9BU1BNICYmCi0JCQkgICAgUlRfSU5fUFNfTEVWRUwocHBzYywgUlRfUkZfTFBTX0xFVkVMX0FTUE0pICYmCisJCQkgICAgUlRfSU5fUFNfTEVWRUwocHBzYywgUlRfUFNfTEVWRUxfQVNQTSkgJiYKIAkJCSAgICBydGxoYWwtPmludGVyZmFjZSA9PSBJTlRGX1BDSSkgewogCQkJCXJ0bHByaXYtPmludGZfb3BzLT5kaXNhYmxlX2FzcG0oaHcpOwotCQkJCVJUX0NMRUFSX1BTX0xFVkVMKHBwc2MsIFJUX1JGX0xQU19MRVZFTF9BU1BNKTsKKwkJCQlSVF9DTEVBUl9QU19MRVZFTChwcHNjLCBSVF9QU19MRVZFTF9BU1BNKTsKIAkJCX0KIAogCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX0xPVUQsCkBAIC00OTEsMyArNDk1LDIxNCBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5scHNfbG9jaywgZmxhZyk7CiB9CisKKy8qIEZvciBzdyBMUFMqLwordm9pZCBydGxfc3dscHNfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKSBkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfdGltX2llICp0aW1faWU7CisJdTggKnRpbTsKKwl1OCB0aW1fbGVuOworCWJvb2wgdV9idWZmZWQ7CisJYm9vbCBtX2J1ZmZlZDsKKworCWlmIChtYWMtPm9wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQlyZXR1cm47CisKKwlpZiAoIXJ0bHByaXYtPnBzYy5zd2N0cmxfbHBzKQorCQlyZXR1cm47CisKKwlpZiAocnRscHJpdi0+bWFjODAyMTEubGlua19zdGF0ZSAhPSBNQUM4MDIxMV9MSU5LRUQpCisJCXJldHVybjsKKworCWlmICghcnRscHJpdi0+cHNjLnN3X3BzX2VuYWJsZWQpCisJCXJldHVybjsKKworCWlmIChydGxwcml2LT5wc2MuZndjdHJsX2xwcykKKwkJcmV0dXJuOworCisJaWYgKGxpa2VseSghKGh3LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpKSkKKwkJcmV0dXJuOworCisJLyogY2hlY2sgaWYgdGhpcyByZWFsbHkgaXMgYSBiZWFjb24gKi8KKwlpZiAoIWllZWU4MDIxMV9pc19iZWFjb24oaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJcmV0dXJuOworCisJLyogbWluLiBiZWFjb24gbGVuZ3RoICsgRkNTX0xFTiAqLworCWlmIChsZW4gPD0gNDAgKyBGQ1NfTEVOKQorCQlyZXR1cm47CisKKwkvKiBhbmQgb25seSBiZWFjb25zIGZyb20gdGhlIGFzc29jaWF0ZWQgQlNTSUQsIHBsZWFzZSAqLworCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoaGRyLT5hZGRyMywgcnRscHJpdi0+bWFjODAyMTEuYnNzaWQpKQorCQlyZXR1cm47CisKKwlydGxwcml2LT5wc2MubGFzdF9iZWFjb24gPSBqaWZmaWVzOworCisJdGltID0gcnRsX2ZpbmRfaWUoZGF0YSwgbGVuIC0gRkNTX0xFTiwgV0xBTl9FSURfVElNKTsKKwlpZiAoIXRpbSkKKwkJcmV0dXJuOworCisJaWYgKHRpbVsxXSA8IHNpemVvZigqdGltX2llKSkKKwkJcmV0dXJuOworCisJdGltX2xlbiA9IHRpbVsxXTsKKwl0aW1faWUgPSAoc3RydWN0IGllZWU4MDIxMV90aW1faWUgKikgJnRpbVsyXTsKKworCWlmICghV0FSTl9PTl9PTkNFKCFody0+Y29uZi5wc19kdGltX3BlcmlvZCkpCisJCXJ0bHByaXYtPnBzYy5kdGltX2NvdW50ZXIgPSB0aW1faWUtPmR0aW1fY291bnQ7CisKKwkvKiBDaGVjayB3aGVuZXZlciB0aGUgUEhZIGNhbiBiZSB0dXJuZWQgb2ZmIGFnYWluLiAqLworCisJLyogMS4gV2hhdCBhYm91dCBidWZmZXJlZCB1bmljYXN0IHRyYWZmaWMgZm9yIG91ciBBSUQ/ICovCisJdV9idWZmZWQgPSBpZWVlODAyMTFfY2hlY2tfdGltKHRpbV9pZSwgdGltX2xlbiwKKwkJCQkgICAgICAgcnRscHJpdi0+bWFjODAyMTEuYXNzb2NfaWQpOworCisJLyogMi4gTWF5YmUgdGhlIEFQIHdhbnRzIHRvIHNlbmQgbXVsdGljYXN0L2Jyb2FkY2FzdCBkYXRhPyAqLworCW1fYnVmZmVkID0gdGltX2llLT5iaXRtYXBfY3RybCAmIDB4MDE7CisJcnRscHJpdi0+cHNjLm11bHRpX2J1ZmZlcmVkID0gbV9idWZmZWQ7CisKKwkvKiB1bmljYXN0IHdpbGwgcHJvY2VzcyBieSBtYWM4MDIxMSB0aHJvdWdoCisJICogc2V0IH5JRUVFODAyMTFfQ09ORl9QUywgU28gd2UganVzdCBjaGVjaworCSAqIG11bHRpY2FzdCBmcmFtZXMgaGVyZSAqLworCWlmICghbV9idWZmZWQpIHsKKwkJLyogYmFjayB0byBsb3ctcG93ZXIgbGFuZC4gYW5kIGRlbGF5IGlzCisJCSAqIHByZXZlbnQgbnVsbCBwb3dlciBzYXZlIGZyYW1lIHR4IGZhaWwgKi8KKwkJcXVldWVfZGVsYXllZF93b3JrKHJ0bHByaXYtPndvcmtzLnJ0bF93cSwKKwkJCQkmcnRscHJpdi0+d29ya3MucHNfd29yaywgTVNFQ1MoNSkpOworCX0gZWxzZSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19ETUVTRywgKCJ1X2J1ZmZlcmQ6ICV4LCAiCisJCQkJIm1fYnVmZmVyZWQ6ICV4XG4iLCB1X2J1ZmZlZCwgbV9idWZmZWQpKTsKKwl9Cit9CisKK3ZvaWQgcnRsX3N3bHBzX3JmX2F3YWtlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXVuc2lnbmVkIGxvbmcgZmxhZzsKKworCWlmICghcnRscHJpdi0+cHNjLnN3Y3RybF9scHMpCisJCXJldHVybjsKKwlpZiAobWFjLT5saW5rX3N0YXRlICE9IE1BQzgwMjExX0xJTktFRCkKKwkJcmV0dXJuOworCisJaWYgKHBwc2MtPnJlZ19yZnBzX2xldmVsICYgUlRfUkZfTFBTX0xFVkVMX0FTUE0gJiYKKwkJUlRfSU5fUFNfTEVWRUwocHBzYywgUlRfUFNfTEVWRUxfQVNQTSkpIHsKKwkJcnRscHJpdi0+aW50Zl9vcHMtPmRpc2FibGVfYXNwbShodyk7CisJCVJUX0NMRUFSX1BTX0xFVkVMKHBwc2MsIFJUX1BTX0xFVkVMX0FTUE0pOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZydGxwcml2LT5sb2Nrcy5scHNfbG9jaywgZmxhZyk7CisJcnRsX3BzX3NldF9yZl9zdGF0ZShodywgRVJGT04sIFJGX0NIQU5HRV9CWV9QUywgZmFsc2UpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLmxwc19sb2NrLCBmbGFnKTsKK30KKwordm9pZCBydGxfc3dscHNfcmZvbl93cV9jYWxsYmFjayh2b2lkICpkYXRhKQoreworCXN0cnVjdCBydGxfd29ya3MgKnJ0bHdvcmtzID0KKwkgICAgY29udGFpbmVyX29mX2R3b3JrX3J0bChkYXRhLCBzdHJ1Y3QgcnRsX3dvcmtzLCBwc19yZm9uX3dxKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHJ0bHdvcmtzLT5odzsKKworCXJ0bF9zd2xwc19yZl9hd2FrZShodyk7Cit9CisKK3ZvaWQgcnRsX3N3bHBzX3JmX3NsZWVwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCXVuc2lnbmVkIGxvbmcgZmxhZzsKKwl1OCBzbGVlcF9pbnR2OworCisJaWYgKCFydGxwcml2LT5wc2Muc3dfcHNfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaWYgKChydGxwcml2LT5zZWMuYmVpbmdfc2V0a2V5KSB8fAorCSAgICAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpKQorCQlyZXR1cm47CisKKwkvKnNsZWVwIGFmdGVyIGxpbmtlZCAxMHMsIHRvIGxldCBESENQIGFuZCA0LXdheSBoYW5kc2hha2Ugb2sgZW5vdWdoISEgKi8KKwlpZiAoKG1hYy0+bGlua19zdGF0ZSAhPSBNQUM4MDIxMV9MSU5LRUQpIHx8IChtYWMtPmNudF9hZnRlcl9saW5rZWQgPCA1KSkKKwkJcmV0dXJuOworCisJaWYgKHJ0bHByaXYtPmxpbmtfaW5mby5idXN5dHJhZmZpYykKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2ssIGZsYWcpOworCWlmIChydGxwcml2LT5wc2MucmZjaGFuZ2VfaW5wcm9ncmVzcykgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5yZl9wc19sb2NrLCBmbGFnKTsKKwkJcmV0dXJuOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5yZl9wc19sb2NrLCBmbGFnKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZydGxwcml2LT5sb2Nrcy5scHNfbG9jaywgZmxhZyk7CisJcnRsX3BzX3NldF9yZl9zdGF0ZShodywgRVJGU0xFRVAsIFJGX0NIQU5HRV9CWV9QUywgZmFsc2UpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLmxwc19sb2NrLCBmbGFnKTsKKworCWlmIChwcHNjLT5yZWdfcmZwc19sZXZlbCAmIFJUX1JGX09GRl9MRVZMX0FTUE0gJiYKKwkJIVJUX0lOX1BTX0xFVkVMKHBwc2MsIFJUX1BTX0xFVkVMX0FTUE0pKSB7CisJCXJ0bHByaXYtPmludGZfb3BzLT5lbmFibGVfYXNwbShodyk7CisJCVJUX1NFVF9QU19MRVZFTChwcHNjLCBSVF9QU19MRVZFTF9BU1BNKTsKKwl9CisKKwkvKiBoZXJlIGlzIHBvd2VyIHNhdmUgYWxnLCB3aGVuIHRoaXMgYmVhY29uIGlzIERUSU0KKwkgKiB3ZSB3aWxsIHNldCBzbGVlcCB0aW1lIHRvIGR0aW1fcGVyaW9kICogbjsKKwkgKiB3aGVuIHRoaXMgYmVhY29uIGlzIG5vdCBEVElNLCB3ZSB3aWxsIHNldCBzbGVlcAorCSAqIHRpbWUgdG8gc2xlZXBfaW50diA9IHJ0bHByaXYtPnBzYy5kdGltX2NvdW50ZXIgb3IKKwkgKiBNQVhfU1dfTFBTX1NMRUVQX0lOVFYoZGVmYXVsdCBzZXQgdG8gNSkgKi8KKworCWlmIChydGxwcml2LT5wc2MuZHRpbV9jb3VudGVyID09IDApIHsKKwkJaWYgKGh3LT5jb25mLnBzX2R0aW1fcGVyaW9kID09IDEpCisJCQlzbGVlcF9pbnR2ID0gaHctPmNvbmYucHNfZHRpbV9wZXJpb2QgKiAyOworCQllbHNlCisJCQlzbGVlcF9pbnR2ID0gaHctPmNvbmYucHNfZHRpbV9wZXJpb2Q7CisJfSBlbHNlIHsKKwkJc2xlZXBfaW50diA9IHJ0bHByaXYtPnBzYy5kdGltX2NvdW50ZXI7CisJfQorCisJaWYgKHNsZWVwX2ludHYgPiBNQVhfU1dfTFBTX1NMRUVQX0lOVFYpCisJCXNsZWVwX2ludHYgPSBNQVhfU1dfTFBTX1NMRUVQX0lOVFY7CisKKwkvKiB0aGlzIHByaW50IHNob3VsZCBhbHdheXMgYmUgZHRpbV9jb250ZXIgPSAwICYKKwkgKiBzbGVlcCAgPSBkdGltX3BlcmlvZCwgdGhhdCBtZWFvbnMsIHdlIHNob3VsZAorCSAqIGF3YWtlIGJlZm9yZSBldmVyeSBkdGltICovCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX0RNRVNHLAorCQkgKCJkdGltX2NvdW50ZXI6JXggd2lsbCBzbGVlcCA6JWQiCisJCSAiIGJlYWNvbl9pbnR2XG4iLCBydGxwcml2LT5wc2MuZHRpbV9jb3VudGVyLCBzbGVlcF9pbnR2KSk7CisKKwkvKiB3ZSB0ZXN0ZWQgdGhhdCA0MG1zIGlzIGVub3VnaCBmb3Igc3cgJiBodyBzdyBkZWxheSAqLworCXF1ZXVlX2RlbGF5ZWRfd29yayhydGxwcml2LT53b3Jrcy5ydGxfd3EsICZydGxwcml2LT53b3Jrcy5wc19yZm9uX3dxLAorCQkJTVNFQ1Moc2xlZXBfaW50diAqIG1hYy0+dmlmLT5ic3NfY29uZi5iZWFjb25faW50IC0gNDApKTsKK30KKworCit2b2lkIHJ0bF9zd2xwc193cV9jYWxsYmFjayh2b2lkICpkYXRhKQoreworCXN0cnVjdCBydGxfd29ya3MgKnJ0bHdvcmtzID0gY29udGFpbmVyX29mX2R3b3JrX3J0bChkYXRhLAorCQkJCSAgICAgc3RydWN0IHJ0bF93b3JrcywKKwkJCQkgICAgIHBzX3dvcmspOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcnRsd29ya3MtPmh3OworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlib29sIHBzID0gZmFsc2U7CisKKwlwcyA9IChody0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKTsKKworCS8qIHdlIGNhbiBzbGVlcCBhZnRlciBwcyBudWxsIHNlbmQgb2sgKi8KKwlpZiAocnRscHJpdi0+cHNjLnN0YXRlX2luYXApIHsKKwkJcnRsX3N3bHBzX3JmX3NsZWVwKGh3KTsKKworCQlpZiAocnRscHJpdi0+cHNjLnN0YXRlICYmICFwcykgeworCQkJcnRscHJpdi0+cHNjLnNsZWVwX21zID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0KKwkJCQkJcnRscHJpdi0+cHNjLmxhc3RfYWN0aW9uKTsKKwkJfQorCisJCWlmIChwcykKKwkJCXJ0bHByaXYtPnBzYy5sYXN0X3NsZXB0ID0gamlmZmllczsKKworCQlydGxwcml2LT5wc2MubGFzdF9hY3Rpb24gPSBqaWZmaWVzOworCQlydGxwcml2LT5wc2Muc3RhdGUgPSBwczsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BzLmgKaW5kZXggYWU1NmRhOC4uZTNiZjg5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcHMuaApAQCAtMzAsNiArMzAsOCBAQAogI2lmbmRlZiBfX1JFQUxURUtfUlRMX1BDSV9QU19IX18KICNkZWZpbmUgX19SRUFMVEVLX1JUTF9QQ0lfUFNfSF9fCiAKKyNkZWZpbmUgTUFYX1NXX0xQU19TTEVFUF9JTlRWCTUKKwogYm9vbCBydGxfcHNfc2V0X3JmX3N0YXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJIGVudW0gcmZfcHdyc3RhdGUgc3RhdGVfdG9zZXQsIHUzMiBjaGFuZ2Vzb3VyY2UsCiAJCQkgYm9vbCBwcm90ZWN0X29yX25vdCk7CkBAIC00MCw0ICs0MiwxMSBAQAogdm9pZCBydGxfaXBzX25pY19vZmZfd3FfY2FsbGJhY2sodm9pZCAqZGF0YSk7CiB2b2lkIHJ0bF9scHNfZW50ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBydGxfbHBzX2xlYXZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwordm9pZCBydGxfc3dscHNfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKTsKK3ZvaWQgcnRsX3N3bHBzX3dxX2NhbGxiYWNrKHZvaWQgKmRhdGEpOwordm9pZCBydGxfc3dscHNfcmZvbl93cV9jYWxsYmFjayh2b2lkICpkYXRhKTsKK3ZvaWQgcnRsX3N3bHBzX3JmX2F3YWtlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsX3N3bHBzX3JmX3NsZWVwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3JjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3JjLmMKaW5kZXggOTE2MzQxMC4uMzBkYTY4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9yYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcmMuYwpAQCAtMzgsMTcgKzM4LDE0IEBACiAgKkNDSzExTSBvciBPRkRNXzU0TSBiYXNlZCBvbiB3aXJlbGVzcyBtb2RlLgogICovCiBzdGF0aWMgdTggX3J0bF9yY19nZXRfaGlnaGVzdF9yaXgoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJCQkgIHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgbm90X2RhdGEpCiB7CiAJc3RydWN0IHJ0bF9tYWMgKnJ0bG1hYyA9IHJ0bF9tYWMocnRscHJpdik7Ci0KLQkvKgotCSAqbWd0IHVzZSAxTSwgYWx0aG91Z2ggd2UgaGF2ZSBjaGVjayBpdAotCSAqYmVmb3JlIHRoaXMgZnVuY3Rpb24gdXNlIHJhdGVfY29udHJvbF9zZW5kX2xvdywKLQkgKndlIHN0aWxsIGNoZWNrIGl0IGhlcmUKLQkgKi8KLQlpZiAobm90X2RhdGEpCi0JCXJldHVybiBydGxwcml2LT5jZmctPm1hcHNbUlRMX1JDX0NDS19SQVRFMU1dOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bHByaXYpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJc3RydWN0IHJ0bF9zdGFfaW5mbyAqc3RhX2VudHJ5ID0gTlVMTDsKKwl1OCB3aXJlbGVzc19tb2RlID0gMDsKIAogCS8qCiAJICp0aGlzIHJhdGUgaXMgbm8gdXNlIGZvciB0cnVlIHJhdGUsIGZpcm13YXJlCkBAIC01NywzNSArNTQsNzggQEAKIAkgKjIuaW4gcnRsX2dldF90Y2JfZGVzYyB3aGVuIHdlIGNoZWNrIHJhdGUgaXMKIAkgKiAgICAgIDFNIHdlIHdpbGwgbm90IHVzZSBGVyByYXRlIGJ1dCB1c2VyIHJhdGUuCiAJICovCi0JaWYgKHJ0bF9pc19zcGVjaWFsX2RhdGEocnRscHJpdi0+bWFjODAyMTEuaHcsIHNrYiwgdHJ1ZSkpIHsKLQkJcmV0dXJuIHJ0bHByaXYtPmNmZy0+bWFwc1tSVExfUkNfQ0NLX1JBVEUxTV07CisJaWYgKHJ0bG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CisJCXJ0bG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCWlmIChzdGEpIHsKKwkJCXN0YV9lbnRyeSA9IChzdHJ1Y3QgcnRsX3N0YV9pbmZvICopIHN0YS0+ZHJ2X3ByaXY7CisJCQl3aXJlbGVzc19tb2RlID0gc3RhX2VudHJ5LT53aXJlbGVzc19tb2RlOworCQl9IGVsc2UgeworCQkJcmV0dXJuIDA7CisJCX0KIAl9IGVsc2UgewotCQlpZiAocnRsbWFjLT5tb2RlID09IFdJUkVMRVNTX01PREVfQikKLQkJCXJldHVybiBydGxwcml2LT5jZmctPm1hcHNbUlRMX1JDX0NDS19SQVRFMTFNXTsKLQkJZWxzZQotCQkJcmV0dXJuIHJ0bHByaXYtPmNmZy0+bWFwc1tSVExfUkNfT0ZETV9SQVRFNTRNXTsKKwkJd2lyZWxlc3NfbW9kZSA9IHJ0bG1hYy0+bW9kZTsKKwl9CisKKwlpZiAocnRsX2lzX3NwZWNpYWxfZGF0YShydGxwcml2LT5tYWM4MDIxMS5odywgc2tiLCB0cnVlKSB8fAorCQkJbm90X2RhdGEpIHsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJaWYgKHJ0bGhhbC0+Y3VycmVudF9iYW5kdHlwZSA9PSBCQU5EX09OXzJfNEcpIHsKKwkJCWlmICh3aXJlbGVzc19tb2RlID09IFdJUkVMRVNTX01PREVfQikgeworCQkJCXJldHVybiBCX01PREVfTUFYX1JJWDsKKwkJCX0gZWxzZSBpZiAod2lyZWxlc3NfbW9kZSA9PSBXSVJFTEVTU19NT0RFX0cpIHsKKwkJCQlyZXR1cm4gR19NT0RFX01BWF9SSVg7CisJCQl9IGVsc2UgeworCQkJCWlmIChnZXRfcmZfdHlwZShydGxwaHkpICE9IFJGXzJUMlIpCisJCQkJCXJldHVybiBOX01PREVfTUNTN19SSVg7CisJCQkJZWxzZQorCQkJCQlyZXR1cm4gTl9NT0RFX01DUzE1X1JJWDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmICh3aXJlbGVzc19tb2RlID09IFdJUkVMRVNTX01PREVfQSkgeworCQkJCXJldHVybiBBX01PREVfTUFYX1JJWDsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGdldF9yZl90eXBlKHJ0bHBoeSkgIT0gUkZfMlQyUikKKwkJCQkJcmV0dXJuIE5fTU9ERV9NQ1M3X1JJWDsKKwkJCQllbHNlCisJCQkJCXJldHVybiBOX01PREVfTUNTMTVfUklYOworCQkJfQorCQl9CiAJfQogfQogCiBzdGF0aWMgdm9pZCBfcnRsX3JjX3JhdGVfc2V0X3NlcmllcyhzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZSwKIAkJCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlX2NvbnRyb2wgKnR4cmMsCi0JCQkJICAgIHU4IHRyaWVzLCB1OCByaXgsIGludCBydHNjdHNlbmFibGUsCisJCQkJICAgIHU4IHRyaWVzLCBjaGFyIHJpeCwgaW50IHJ0c2N0c2VuYWJsZSwKIAkJCQkgICAgYm9vbCBub3RfZGF0YSkKIHsKIAlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxwcml2KTsKKwl1OCBzZ2lfMjAgPSAwLCBzZ2lfNDAgPSAwOwogCisJaWYgKHN0YSkgeworCQlzZ2lfMjAgPSBzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMDsKKwkJc2dpXzQwID0gc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TR0lfNDA7CisJfQogCXJhdGUtPmNvdW50ID0gdHJpZXM7Ci0JcmF0ZS0+aWR4ID0gKHJpeCA+IDB4MikgPyByaXggOiAweDI7CisJcmF0ZS0+aWR4ID0gcml4ID49IDB4MDAgPyByaXggOiAweDAwOwogCiAJaWYgKCFub3RfZGF0YSkgewogCQlpZiAodHhyYy0+c2hvcnRfcHJlYW1ibGUpCiAJCQlyYXRlLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFOwotCQlpZiAobWFjLT5id180MCkKLQkJCXJhdGUtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEg7Ci0JCWlmIChtYWMtPnNnaV8yMCB8fCBtYWMtPnNnaV80MCkKKwkJaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CisJCQltYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQkJaWYgKHN0YSAmJiAoc3RhLT5odF9jYXAuY2FwICYKKwkJCSAgICBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCkpCisJCQkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSDsKKwkJfSBlbHNlIHsKKwkJCWlmIChtYWMtPmJ3XzQwKQorCQkJCXJhdGUtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEg7CisJCX0KKwkJaWYgKHNnaV8yMCB8fCBzZ2lfNDApCiAJCQlyYXRlLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0k7Ci0JCWlmIChtYWMtPmh0X2VuYWJsZSkKKwkJaWYgKHN0YSAmJiBzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpCiAJCQlyYXRlLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfTUNTOwogCX0KIH0KQEAgLTk3LDM5ICsxMzcsMzkgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHhyYy0+c2tiOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGVzID0gdHhfaW5mby0+Y29udHJvbC5yYXRlczsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKKwlfX2xlMTYgZmMgPSBydGxfZ2V0X2ZjKHNrYik7CiAJdTggdHJ5X3Blcl9yYXRlLCBpLCByaXg7CiAJYm9vbCBub3RfZGF0YSA9ICFpZWVlODAyMTFfaXNfZGF0YShmYyk7CiAKIAlpZiAocmF0ZV9jb250cm9sX3NlbmRfbG93KHN0YSwgcHJpdl9zdGEsIHR4cmMpKQogCQlyZXR1cm47CiAKLQlyaXggPSBfcnRsX3JjX2dldF9oaWdoZXN0X3JpeChydGxwcml2LCBza2IsIG5vdF9kYXRhKTsKLQorCXJpeCA9IF9ydGxfcmNfZ2V0X2hpZ2hlc3Rfcml4KHJ0bHByaXYsIHN0YSwgc2tiLCBub3RfZGF0YSk7CiAJdHJ5X3Blcl9yYXRlID0gMTsKLQlfcnRsX3JjX3JhdGVfc2V0X3NlcmllcyhydGxwcml2LCAmcmF0ZXNbMF0sIHR4cmMsCisJX3J0bF9yY19yYXRlX3NldF9zZXJpZXMocnRscHJpdiwgc3RhLCAmcmF0ZXNbMF0sIHR4cmMsCiAJCQkJdHJ5X3Blcl9yYXRlLCByaXgsIDEsIG5vdF9kYXRhKTsKIAogCWlmICghbm90X2RhdGEpIHsKIAkJZm9yIChpID0gMTsgaSA8IDQ7IGkrKykKLQkJCV9ydGxfcmNfcmF0ZV9zZXRfc2VyaWVzKHJ0bHByaXYsICZyYXRlc1tpXSwKKwkJCV9ydGxfcmNfcmF0ZV9zZXRfc2VyaWVzKHJ0bHByaXYsIHN0YSwgJnJhdGVzW2ldLAogCQkJCQkJdHhyYywgaSwgKHJpeCAtIGkpLCAxLAogCQkJCQkJbm90X2RhdGEpOwogCX0KIH0KIAotc3RhdGljIGJvb2wgX3J0bF90eF9hZ2dyX2NoZWNrKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiwgdTE2IHRpZCkKK3N0YXRpYyBib29sIF9ydGxfdHhfYWdncl9jaGVjayhzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsCisJCXN0cnVjdCBydGxfc3RhX2luZm8gKnN0YV9lbnRyeSwgdTE2IHRpZCkKIHsKIAlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxwcml2KTsKIAogCWlmIChtYWMtPmFjdF9zY2FubmluZykKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKG1hYy0+Y250X2FmdGVyX2xpbmtlZCA8IDMpCisJaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkJbWFjLT5jbnRfYWZ0ZXJfbGlua2VkIDwgMykKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKG1hYy0+dGlkc1t0aWRdLmFnZy5hZ2dfc3RhdGUgPT0gUlRMX0FHR19PRkYpCisJaWYgKHN0YV9lbnRyeS0+dGlkc1t0aWRdLmFnZy5hZ2dfc3RhdGUgPT0gUlRMX0FHR19TVE9QKQogCQlyZXR1cm4gdHJ1ZTsKIAogCXJldHVybiBmYWxzZTsKQEAgLTE0MywxMSArMTgzLDkgQEAKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBwcHJpdjsKIAlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxwcml2KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwotCV9fbGUxNiBmYzsKLQotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKLQlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gcnRsX2dldF9oZHIoc2tiKTsKKwlfX2xlMTYgZmMgPSBydGxfZ2V0X2ZjKHNrYik7CisJc3RydWN0IHJ0bF9zdGFfaW5mbyAqc3RhX2VudHJ5OwogCiAJaWYgKCFwcml2X3N0YSB8fCAhaWVlZTgwMjExX2lzX2RhdGEoZmMpKQogCQlyZXR1cm47CkBAIC0xNTksMTcgKzE5NywyMSBAQAogCSAgICB8fCBpc19icm9hZGNhc3RfZXRoZXJfYWRkcihpZWVlODAyMTFfZ2V0X0RBKGhkcikpKQogCQlyZXR1cm47CiAKLQkvKiBDaGVjayBpZiBhZ2dyZWdhdGlvbiBoYXMgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyB0aWQgKi8KLQlpZiAoY29uZl9pc19odCgmbWFjLT5ody0+Y29uZikgJiYKLQkgICAgIShza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX1BBRSkpKSB7Ci0JCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7Ci0JCQl1OCAqcWMsIHRpZDsKLQotCQkJcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKLQkJCXRpZCA9IHFjWzBdICYgMHhmOwotCi0JCQlpZiAoX3J0bF90eF9hZ2dyX2NoZWNrKHJ0bHByaXYsIHRpZCkpCi0JCQkJaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24oc3RhLCB0aWQsIDUwMDApOworCWlmIChzdGEpIHsKKwkJLyogQ2hlY2sgaWYgYWdncmVnYXRpb24gaGFzIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgdGlkICovCisJCXN0YV9lbnRyeSA9IChzdHJ1Y3QgcnRsX3N0YV9pbmZvICopIHN0YS0+ZHJ2X3ByaXY7CisJCWlmICgoc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkID09IHRydWUpICYmCisJCQkJIShza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX1BBRSkpKSB7CisJCQlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgeworCQkJCXU4IHRpZCA9IHJ0bF9nZXRfdGlkKHNrYik7CisJCQkJaWYgKF9ydGxfdHhfYWdncl9jaGVjayhydGxwcml2LCBzdGFfZW50cnksCisJCQkJICAgIHRpZCkpIHsKKwkJCQkJc3RhX2VudHJ5LT50aWRzW3RpZF0uYWdnLmFnZ19zdGF0ZSA9CisJCQkJCQkJIFJUTF9BR0dfUFJPR1JFU1M7CisJCQkJCWllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKHN0YSwKKwkJCQkJCQkJIHRpZCwgNTAwMCk7CisJCQkJfQorCQkJfQogCQl9CiAJfQogfQpAQCAtMTc4LDQzICsyMjAsNiBAQAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKIAkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdm9pZCAqcHJpdl9zdGEpCiB7Ci0Jc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcHByaXY7Ci0Jc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRscHJpdik7Ci0JdTggaXNfaHQgPSBjb25mX2lzX2h0KCZtYWMtPmh3LT5jb25mKTsKLQotCWlmICgobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfHwKLQkgICAgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHx8Ci0JICAgIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykpIHsKLQotCQlzd2l0Y2ggKHNiYW5kLT5iYW5kKSB7Ci0JCWNhc2UgSUVFRTgwMjExX0JBTkRfMkdIWjoKLQkJCXJ0bHByaXYtPnJhdGVfcHJpdi0+Y3VyX3JhdGV0YWJfaWR4ID0KLQkJCSAgICBSQVRSX0lOWF9XSVJFTEVTU19HOwotCQkJaWYgKGlzX2h0KQotCQkJCXJ0bHByaXYtPnJhdGVfcHJpdi0+Y3VyX3JhdGV0YWJfaWR4ID0KLQkJCQkgICAgUkFUUl9JTlhfV0lSRUxFU1NfTkdCOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX0JBTkRfNUdIWjoKLQkJCXJ0bHByaXYtPnJhdGVfcHJpdi0+Y3VyX3JhdGV0YWJfaWR4ID0KLQkJCSAgICBSQVRSX0lOWF9XSVJFTEVTU19BOwotCQkJaWYgKGlzX2h0KQotCQkJCXJ0bHByaXYtPnJhdGVfcHJpdi0+Y3VyX3JhdGV0YWJfaWR4ID0KLQkJCQkgICAgUkFUUl9JTlhfV0lSRUxFU1NfTkdCOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX1dBUk5JTkcsCi0JCQkJICgiSW52YWxpZCBiYW5kXG4iKSk7Ci0JCQlydGxwcml2LT5yYXRlX3ByaXYtPmN1cl9yYXRldGFiX2lkeCA9Ci0JCQkgICAgUkFUUl9JTlhfV0lSRUxFU1NfTkdCOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1JBVEUsIERCR19ETUVTRywKLQkJCSAoIkNob29zaW5nIHJhdGUgdGFibGUgaW5kZXg6ICVkXG4iLAotCQkJICBydGxwcml2LT5yYXRlX3ByaXYtPmN1cl9yYXRldGFiX2lkeCkpOwotCi0JfQotCiB9CiAKIHN0YXRpYyB2b2lkIHJ0bF9yYXRlX3VwZGF0ZSh2b2lkICpwcHJpdiwKQEAgLTIyMyw0OSArMjI4LDYgQEAKIAkJCSAgICB1MzIgY2hhbmdlZCwKIAkJCSAgICBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIG9wZXJfY2hhbl90eXBlKQogewotCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHBwcml2OwotCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bHByaXYpOwotCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bHByaXYpOwotCWJvb2wgb3Blcl9jdzQwID0gZmFsc2UsIG9wZXJfc2dpNDA7Ci0JYm9vbCBsb2NhbF9jdzQwID0gbWFjLT5id180MDsKLQlib29sIGxvY2FsX3NnaTQwID0gbWFjLT5zZ2lfNDA7Ci0JdTggaXNfaHQgPSBjb25mX2lzX2h0KCZtYWMtPmh3LT5jb25mKTsKLQotCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX1JDX0hUX0NIQU5HRUQpIHsKLQkJaWYgKG1hYy0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCQlyZXR1cm47Ci0KLQkJaWYgKHJ0bGhhbC0+aHctPmNvbmYuY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMgfHwKLQkJICAgIHJ0bGhhbC0+aHctPmNvbmYuY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwUExVUykKLQkJCW9wZXJfY3c0MCA9IHRydWU7Ci0KLQkJb3Blcl9zZ2k0MCA9IG1hYy0+c2dpXzQwOwotCi0JCWlmICgobG9jYWxfY3c0MCAhPSBvcGVyX2N3NDApIHx8IChsb2NhbF9zZ2k0MCAhPSBvcGVyX3NnaTQwKSkgewotCQkJc3dpdGNoIChzYmFuZC0+YmFuZCkgewotCQkJY2FzZSBJRUVFODAyMTFfQkFORF8yR0haOgotCQkJCXJ0bHByaXYtPnJhdGVfcHJpdi0+Y3VyX3JhdGV0YWJfaWR4ID0KLQkJCQkgICAgUkFUUl9JTlhfV0lSRUxFU1NfRzsKLQkJCQlpZiAoaXNfaHQpCi0JCQkJCXJ0bHByaXYtPnJhdGVfcHJpdi0+Y3VyX3JhdGV0YWJfaWR4ID0KLQkJCQkJICAgIFJBVFJfSU5YX1dJUkVMRVNTX05HQjsKLQkJCQlicmVhazsKLQkJCWNhc2UgSUVFRTgwMjExX0JBTkRfNUdIWjoKLQkJCQlydGxwcml2LT5yYXRlX3ByaXYtPmN1cl9yYXRldGFiX2lkeCA9Ci0JCQkJICAgIFJBVFJfSU5YX1dJUkVMRVNTX0E7Ci0JCQkJaWYgKGlzX2h0KQotCQkJCQlydGxwcml2LT5yYXRlX3ByaXYtPmN1cl9yYXRldGFiX2lkeCA9Ci0JCQkJCSAgICBSQVRSX0lOWF9XSVJFTEVTU19OR0I7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCi0JCQkJCSAoIkludmFsaWQgYmFuZFxuIikpOwotCQkJCXJ0bHByaXYtPnJhdGVfcHJpdi0+Y3VyX3JhdGV0YWJfaWR4ID0KLQkJCQkgICAgUkFUUl9JTlhfV0lSRUxFU1NfTkdCOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQogfQogCiBzdGF0aWMgdm9pZCAqcnRsX3JhdGVfYWxsb2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3JjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3JjLmgKaW5kZXggYjQ2NjdjMC4uNGFmYTJjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9yYy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcmMuaApAQCAtMzAsOCArMzAsMTUgQEAKICNpZm5kZWYgX19SVExfUkNfSF9fCiAjZGVmaW5lIF9fUlRMX1JDX0hfXwogCisjZGVmaW5lIEJfTU9ERV9NQVhfUklYIDMKKyNkZWZpbmUgR19NT0RFX01BWF9SSVggMTEKKyNkZWZpbmUgQV9NT0RFX01BWF9SSVggNworCisvKiBpbiBtYWM4MDIxMSBtY3MwLW1jczE1IGlzIGlkeDAtaWR4MTUqLworI2RlZmluZSBOX01PREVfTUNTN19SSVggNworI2RlZmluZSBOX01PREVfTUNTMTVfUklYIDE1CisKIHN0cnVjdCBydGxfcmF0ZV9wcml2IHsKLQl1OCBjdXJfcmF0ZXRhYl9pZHg7CiAJdTggaHRfY2FwOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9yZWdkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3JlZ2QuYwppbmRleCBkMjZmOTU3Li44ZjY3MThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3JlZ2QuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3JlZ2QuYwpAQCAtNjYsMzEgKzY2LDgzIEBACiAJTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOIHwgXAogCU5MODAyMTFfUlJGX05PX09GRE0pCiAKKy8qIDVHIGNoYW4gMzYgLSBjaGFuIDY0Ki8KKyNkZWZpbmUgUlRMODE5eF81R0haXzUxNTBfNTM1MAlcCisJUkVHX1JVTEUoNTE1MC0xMCwgNTM1MCsxMCwgNDAsIDAsIDMwLCBcCisJTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOIHwgXAorCU5MODAyMTFfUlJGX05PX0lCU1MpCisKKy8qIDVHIGNoYW4gMTAwIC0gY2hhbiAxNjUqLworI2RlZmluZSBSVEw4MTl4XzVHSFpfNTQ3MF81ODUwCVwKKwlSRUdfUlVMRSg1NDcwLTEwLCA1ODUwKzEwLCA0MCwgMCwgMzAsIFwKKwlOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4gfCBcCisJTkw4MDIxMV9SUkZfTk9fSUJTUykKKworLyogNUcgY2hhbiAxNDkgLSBjaGFuIDE2NSovCisjZGVmaW5lIFJUTDgxOXhfNUdIWl81NzI1XzU4NTAJXAorCVJFR19SVUxFKDU3MjUtMTAsIDU4NTArMTAsIDQwLCAwLCAzMCwgXAorCU5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTiB8IFwKKwlOTDgwMjExX1JSRl9OT19JQlNTKQorCisjZGVmaW5lIFJUTDgxOXhfNUdIWl9BTEwJXAorCShSVEw4MTl4XzVHSFpfNTE1MF81MzUwLCBSVEw4MTl4XzVHSFpfNTQ3MF81ODUwKQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gcnRsX3JlZ2RvbV8xMSA9IHsKIAkubl9yZWdfcnVsZXMgPSAxLAogCS5hbHBoYTIgPSAiOTkiLAogCS5yZWdfcnVsZXMgPSB7CiAJCSAgICAgIFJUTDgxOXhfMkdIWl9DSDAxXzExLAotCX0KKwkJICAgICAgfQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluIHJ0bF9yZWdkb21fZ2xvYmFsID0gewotCS5uX3JlZ19ydWxlcyA9IDMsCi0JLmFscGhhMiA9ICI5OSIsCi0JLnJlZ19ydWxlcyA9IHsKLQkJICAgICAgUlRMODE5eF8yR0haX0NIMDFfMTEsCi0JCSAgICAgIFJUTDgxOXhfMkdIWl9DSDEyXzEzLAotCQkgICAgICBSVEw4MTl4XzJHSFpfQ0gxNCwKLQl9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gcnRsX3JlZ2RvbV93b3JsZCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiBydGxfcmVnZG9tXzEyXzEzID0gewogCS5uX3JlZ19ydWxlcyA9IDIsCiAJLmFscGhhMiA9ICI5OSIsCiAJLnJlZ19ydWxlcyA9IHsKIAkJICAgICAgUlRMODE5eF8yR0haX0NIMDFfMTEsCi0JCSAgICAgIFJUTDgxOXhfMkdIWl9DSDEyXzEzLAotCX0KKwkJCSAgUlRMODE5eF8yR0haX0NIMTJfMTMsCisJCSAgICAgIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiBydGxfcmVnZG9tX25vX21pZGJhbmQgPSB7CisJLm5fcmVnX3J1bGVzID0gMywKKwkuYWxwaGEyID0gIjk5IiwKKwkucmVnX3J1bGVzID0geworCQkgICAgICBSVEw4MTl4XzJHSFpfQ0gwMV8xMSwKKwkJCSAgUlRMODE5eF81R0haXzUxNTBfNTM1MCwKKwkJCSAgUlRMODE5eF81R0haXzU3MjVfNTg1MCwKKwkJICAgICAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluIHJ0bF9yZWdkb21fNjBfNjQgPSB7CisJLm5fcmVnX3J1bGVzID0gMywKKwkuYWxwaGEyID0gIjk5IiwKKwkucmVnX3J1bGVzID0geworCQkgICAgICBSVEw4MTl4XzJHSFpfQ0gwMV8xMSwKKwkJCSAgUlRMODE5eF8yR0haX0NIMTJfMTMsCisJCQkgIFJUTDgxOXhfNUdIWl81NzI1XzU4NTAsCisJCSAgICAgIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiBydGxfcmVnZG9tXzE0XzYwXzY0ID0geworCS5uX3JlZ19ydWxlcyA9IDQsCisJLmFscGhhMiA9ICI5OSIsCisJLnJlZ19ydWxlcyA9IHsKKwkJICAgICAgUlRMODE5eF8yR0haX0NIMDFfMTEsCisJCQkgIFJUTDgxOXhfMkdIWl9DSDEyXzEzLAorCQkJICBSVEw4MTl4XzJHSFpfQ0gxNCwKKwkJCSAgUlRMODE5eF81R0haXzU3MjVfNTg1MCwKKwkJICAgICAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluIHJ0bF9yZWdkb21fMTQgPSB7CisJLm5fcmVnX3J1bGVzID0gMywKKwkuYWxwaGEyID0gIjk5IiwKKwkucmVnX3J1bGVzID0geworCQkgICAgICBSVEw4MTl4XzJHSFpfQ0gwMV8xMSwKKwkJCSAgUlRMODE5eF8yR0haX0NIMTJfMTMsCisJCQkgIFJUTDgxOXhfMkdIWl9DSDE0LAorCQkgICAgICB9CiB9OwogCiBzdGF0aWMgYm9vbCBfcnRsX2lzX3JhZGFyX2ZyZXEodTE2IGNlbnRlcl9mcmVxKQpAQCAtMTYyLDYgKzIxNCw4IEBACiAJdTMyIGJhbmR3aWR0aCA9IDA7CiAJaW50IHI7CiAKKwlpZiAoIXdpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSkKKwkJcmV0dXJuOwogCXNiYW5kID0gd2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOwogCiAJLyoKQEAgLTI5MiwyNSArMzQ2LDI2IEBACiB7CiAJc3dpdGNoIChyZWctPmNvdW50cnlfY29kZSkgewogCWNhc2UgQ09VTlRSWV9DT0RFX0ZDQzoKKwkJcmV0dXJuICZydGxfcmVnZG9tX25vX21pZGJhbmQ7CiAJY2FzZSBDT1VOVFJZX0NPREVfSUM6CiAJCXJldHVybiAmcnRsX3JlZ2RvbV8xMTsKIAljYXNlIENPVU5UUllfQ09ERV9FVFNJOgorCWNhc2UgQ09VTlRSWV9DT0RFX1RFTEVDX05FVEdFQVI6CisJCXJldHVybiAmcnRsX3JlZ2RvbV82MF82NDsKIAljYXNlIENPVU5UUllfQ09ERV9TUEFJTjoKIAljYXNlIENPVU5UUllfQ09ERV9GUkFOQ0U6CiAJY2FzZSBDT1VOVFJZX0NPREVfSVNSQUVMOgotCWNhc2UgQ09VTlRSWV9DT0RFX1RFTEVDX05FVEdFQVI6Ci0JCXJldHVybiAmcnRsX3JlZ2RvbV93b3JsZDsKKwljYXNlIENPVU5UUllfQ09ERV9XT1JMRF9XSURFXzEzOgorCQlyZXR1cm4gJnJ0bF9yZWdkb21fMTJfMTM7CiAJY2FzZSBDT1VOVFJZX0NPREVfTUtLOgogCWNhc2UgQ09VTlRSWV9DT0RFX01LSzE6CiAJY2FzZSBDT1VOVFJZX0NPREVfVEVMRUM6CiAJY2FzZSBDT1VOVFJZX0NPREVfTUlDOgotCQlyZXR1cm4gJnJ0bF9yZWdkb21fZ2xvYmFsOworCQlyZXR1cm4gJnJ0bF9yZWdkb21fMTRfNjBfNjQ7CiAJY2FzZSBDT1VOVFJZX0NPREVfR0xPQkFMX0RPTUFJTjoKLQkJcmV0dXJuICZydGxfcmVnZG9tX2dsb2JhbDsKLQljYXNlIENPVU5UUllfQ09ERV9XT1JMRF9XSURFXzEzOgotCQlyZXR1cm4gJnJ0bF9yZWdkb21fd29ybGQ7CisJCXJldHVybiAmcnRsX3JlZ2RvbV8xNDsKIAlkZWZhdWx0OgotCQlyZXR1cm4gJnJ0bF9yZWdkb21fd29ybGQ7CisJCXJldHVybiAmcnRsX3JlZ2RvbV9ub19taWRiYW5kOwogCX0KIH0KIApAQCAtMzIzLDkgKzM3OCwxMSBAQAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkOwogCiAJd2lwaHktPnJlZ19ub3RpZmllciA9IHJlZ19ub3RpZmllcjsKKwogCXdpcGh5LT5mbGFncyB8PSBXSVBIWV9GTEFHX0NVU1RPTV9SRUdVTEFUT1JZOwogCXdpcGh5LT5mbGFncyAmPSB+V0lQSFlfRkxBR19TVFJJQ1RfUkVHVUxBVE9SWTsKIAl3aXBoeS0+ZmxhZ3MgJj0gfldJUEhZX0ZMQUdfRElTQUJMRV9CRUFDT05fSElOVFM7CisKIAlyZWdkID0gX3J0bF9yZWdkb21haW5fc2VsZWN0KHJlZyk7CiAJd2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkod2lwaHksIHJlZ2QpOwogCV9ydGxfcmVnX2FwcGx5X3JhZGFyX2ZsYWdzKHdpcGh5KTsKQEAgLTM1NSw4ICs0MTIsOCBAQAogCWlmICh3aXBoeSA9PSBOVUxMIHx8ICZydGxwcml2LT5yZWdkID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyogZm9yY2UgdGhlIGNoYW5uZWwgcGxhbiB0byB3b3JsZCB3aWRlIDEzICovCi0JcnRscHJpdi0+cmVnZC5jb3VudHJ5X2NvZGUgPSBDT1VOVFJZX0NPREVfV09STERfV0lERV8xMzsKKwkvKiBpbml0IGNvdW50cnlfY29kZSBmcm9tIGVmdXNlIGNoYW5uZWwgcGxhbiAqLworCXJ0bHByaXYtPnJlZ2QuY291bnRyeV9jb2RlID0gcnRscHJpdi0+ZWZ1c2UuY2hhbm5lbF9wbGFuOwogCiAJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9SRUdELCBEQkdfVFJBQ0UsCiAJCSAoS0VSTl9ERUJVRyAicnRsOiBFRVBST00gcmVnZG9tYWluOiAweCUweFxuIiwKQEAgLTM3Myw4ICs0MzAsOCBAQAogCWNvdW50cnkgPSBfcnRsX3JlZ2RfZmluZF9jb3VudHJ5KHJ0bHByaXYtPnJlZ2QuY291bnRyeV9jb2RlKTsKIAogCWlmIChjb3VudHJ5KSB7Ci0JCXJ0bHByaXYtPnJlZ2QuYWxwaGEyWzBdID0gY291bnRyeS0+aXNvTmFtZVswXTsKLQkJcnRscHJpdi0+cmVnZC5hbHBoYTJbMV0gPSBjb3VudHJ5LT5pc29OYW1lWzFdOworCQlydGxwcml2LT5yZWdkLmFscGhhMlswXSA9IGNvdW50cnktPmlzb19uYW1lWzBdOworCQlydGxwcml2LT5yZWdkLmFscGhhMlsxXSA9IGNvdW50cnktPmlzb19uYW1lWzFdOwogCX0gZWxzZSB7CiAJCXJ0bHByaXYtPnJlZ2QuYWxwaGEyWzBdID0gJzAnOwogCQlydGxwcml2LT5yZWdkLmFscGhhMlsxXSA9ICcwJzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcmVnZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9yZWdkLmgKaW5kZXggNGNkYmM0YS4uZDIzMTE4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9yZWdkLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9yZWdkLmgKQEAgLTMyLDcgKzMyLDcgQEAKIAogc3RydWN0IGNvdW50cnlfY29kZV90b19lbnVtX3JkIHsKIAl1MTYgY291bnRyeWNvZGU7Ci0JY29uc3QgY2hhciAqaXNvTmFtZTsKKwljb25zdCBjaGFyICppc29fbmFtZTsKIH07CiAKIGVudW0gY291bnRyeV9jb2RlX3R5cGVfdCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjL2RtX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyYy9kbV9jb21tb24uYwppbmRleCBiYjAyMzI3Li45NzE4MzgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjL2RtX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmMvZG1fY29tbW9uLmMKQEAgLTI4LDEwICsyOCwyNiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAiZG1fY29tbW9uLmgiCisjaW5jbHVkZSAicGh5X2NvbW1vbi5oIgorI2luY2x1ZGUgIi4uL3BjaS5oIgorI2luY2x1ZGUgIi4uL2Jhc2UuaCIKIAogc3RydWN0IGRpZ190IGRtX2RpZ3RhYmxlOwogc3RhdGljIHN0cnVjdCBwc190IGRtX3BzdGFibGU7CiAKKyNkZWZpbmUgQlRfUlNTSV9TVEFURV9OT1JNQUxfUE9XRVIJQklUX09GRlNFVF9MRU5fTUFTS18zMigwLCAxKQorI2RlZmluZSBCVF9SU1NJX1NUQVRFX0FNRFBVX09GRgkJQklUX09GRlNFVF9MRU5fTUFTS18zMigxLCAxKQorI2RlZmluZSBCVF9SU1NJX1NUQVRFX1NQRUNJQUxfTE9XCUJJVF9PRkZTRVRfTEVOX01BU0tfMzIoMiwgMSkKKyNkZWZpbmUgQlRfUlNTSV9TVEFURV9CR19FRENBX0xPVwlCSVRfT0ZGU0VUX0xFTl9NQVNLXzMyKDMsIDEpCisjZGVmaW5lIEJUX1JTU0lfU1RBVEVfVFhQT1dFUl9MT1cJQklUX09GRlNFVF9MRU5fTUFTS18zMig0LCAxKQorCisjZGVmaW5lIFJUTFBSSVYJCQkoc3RydWN0IHJ0bF9wcml2ICopCisjZGVmaW5lIEdFVF9VTkRFQ09SQVRFRF9BVkVSQUdFX1JTU0koX3ByaXYpCVwKKwkoKFJUTFBSSVYoX3ByaXYpKS0+bWFjODAyMTEub3Btb2RlID09IFwKKwkJCSAgICAgTkw4MDIxMV9JRlRZUEVfQURIT0MpID8JXAorCSgoUlRMUFJJVihfcHJpdikpLT5kbS5lbnRyeV9taW5fdW5kZWNvcmF0ZWRzbW9vdGhlZF9wd2RiKSA6IFwKKwkoKFJUTFBSSVYoX3ByaXYpKS0+ZG0udW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYikKKwogc3RhdGljIGNvbnN0IHUzMiBvZmRtc3dpbmdfdGFibGVbT0ZETV9UQUJMRV9TSVpFXSA9IHsKIAkweDdmODAwMWZlLAogCTB4Nzg4MDAxZTIsCkBAIC0zMDQsNyArMzIwLDcgQEAKIAogc3RhdGljIHZvaWQgcnRsOTJjX2RtX2luaXRpYWxfZ2Fpbl9tdWx0aV9zdGEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7Ci0Jc3RhdGljIHU4IGJpbml0aWFsaXplZDsgLyogaW5pdGlhbGl6ZWQgdG8gZmFsc2UgKi8KKwlzdGF0aWMgdTggaW5pdGlhbGl6ZWQ7IC8qIGluaXRpYWxpemVkIHRvIGZhbHNlICovCiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CiAJbG9uZyByc3NpX3N0cmVuZ3RoID0gcnRscHJpdi0+ZG0uZW50cnlfbWluX3VuZGVjb3JhdGVkc21vb3RoZWRfcHdkYjsKQEAgLTMxNSwxMSArMzMxLDExIEBACiAKIAlpZiAoKG11bHRpX3N0YSA9PSBmYWxzZSkgfHwgKGRtX2RpZ3RhYmxlLmN1cnN0YV9jb25uZWN0Y3RhdGUgIT0KIAkJCQkgICAgIERJR19TVEFfRElTQ09OTkVDVCkpIHsKLQkJYmluaXRpYWxpemVkID0gZmFsc2U7CisJCWluaXRpYWxpemVkID0gZmFsc2U7CiAJCWRtX2RpZ3RhYmxlLmRpZ19leHRfcG9ydF9zdGFnZSA9IERJR19FWFRfUE9SVF9TVEFHRV9NQVg7CiAJCXJldHVybjsKLQl9IGVsc2UgaWYgKGJpbml0aWFsaXplZCA9PSBmYWxzZSkgewotCQliaW5pdGlhbGl6ZWQgPSB0cnVlOworCX0gZWxzZSBpZiAoaW5pdGlhbGl6ZWQgPT0gZmFsc2UpIHsKKwkJaW5pdGlhbGl6ZWQgPSB0cnVlOwogCQlkbV9kaWd0YWJsZS5kaWdfZXh0X3BvcnRfc3RhZ2UgPSBESUdfRVhUX1BPUlRfU1RBR0VfMDsKIAkJZG1fZGlndGFibGUuY3VyX2lndmFsdWUgPSAweDIwOwogCQlydGw5MmNfZG1fd3JpdGVfZGlnKGh3KTsKQEAgLTQ2MSwxMCArNDc3LDcgQEAKIAlpZiAobWFjLT5hY3Rfc2Nhbm5pbmcgPT0gdHJ1ZSkKIAkJcmV0dXJuOwogCi0JaWYgKChtYWMtPmxpbmtfc3RhdGUgPiBNQUM4MDIxMV9OT0xJTkspICYmCi0JICAgIChtYWMtPmxpbmtfc3RhdGUgPCBNQUM4MDIxMV9MSU5LRUQpKQotCQlkbV9kaWd0YWJsZS5jdXJzdGFfY29ubmVjdGN0YXRlID0gRElHX1NUQV9CRUZPUkVfQ09OTkVDVDsKLQllbHNlIGlmIChtYWMtPmxpbmtfc3RhdGUgPj0gTUFDODAyMTFfTElOS0VEKQorCWlmIChtYWMtPmxpbmtfc3RhdGUgPj0gTUFDODAyMTFfTElOS0VEKQogCQlkbV9kaWd0YWJsZS5jdXJzdGFfY29ubmVjdGN0YXRlID0gRElHX1NUQV9DT05ORUNUOwogCWVsc2UKIAkJZG1fZGlndGFibGUuY3Vyc3RhX2Nvbm5lY3RjdGF0ZSA9IERJR19TVEFfRElTQ09OTkVDVDsKQEAgLTU2MiwyMyArNTc1LDQyIEBACiBzdGF0aWMgdm9pZCBydGw5MmNfZG1fY2hlY2tfZWRjYV90dXJibyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2lfcHJpdiAqcnRscGNpcHJpdiA9IHJ0bF9wY2lwcml2KGh3KTsKIAlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCiAJc3RhdGljIHU2NCBsYXN0X3R4b2tfY250OwogCXN0YXRpYyB1NjQgbGFzdF9yeG9rX2NudDsKLQl1NjQgY3VyX3R4b2tfY250OwotCXU2NCBjdXJfcnhva19jbnQ7CisJc3RhdGljIHUzMiBsYXN0X2J0X2VkY2FfdWw7CisJc3RhdGljIHUzMiBsYXN0X2J0X2VkY2FfZGw7CisJdTY0IGN1cl90eG9rX2NudCA9IDA7CisJdTY0IGN1cl9yeG9rX2NudCA9IDA7CiAJdTMyIGVkY2FfYmVfdWwgPSAweDVlYTQyYjsKIAl1MzIgZWRjYV9iZV9kbCA9IDB4NWVhNDJiOworCWJvb2wgYnRfY2hhbmdlX2VkY2EgPSBmYWxzZTsKIAotCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJZ290byBkbV9jaGVja2VkY2F0dXJib19leGl0OworCWlmICgobGFzdF9idF9lZGNhX3VsICE9IHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfZWRjYV91bCkgfHwKKwkgICAgKGxhc3RfYnRfZWRjYV9kbCAhPSBydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2VkY2FfZGwpKSB7CisJCXJ0bHByaXYtPmRtLmN1cnJlbnRfdHVyYm9fZWRjYSA9IGZhbHNlOworCQlsYXN0X2J0X2VkY2FfdWwgPSBydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2VkY2FfdWw7CisJCWxhc3RfYnRfZWRjYV9kbCA9IHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfZWRjYV9kbDsKKwl9CisKKwlpZiAocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9lZGNhX3VsICE9IDApIHsKKwkJZWRjYV9iZV91bCA9IHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfZWRjYV91bDsKKwkJYnRfY2hhbmdlX2VkY2EgPSB0cnVlOworCX0KKworCWlmIChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2VkY2FfZGwgIT0gMCkgeworCQllZGNhX2JlX3VsID0gcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9lZGNhX2RsOworCQlidF9jaGFuZ2VfZWRjYSA9IHRydWU7CisJfQogCiAJaWYgKG1hYy0+bGlua19zdGF0ZSAhPSBNQUM4MDIxMV9MSU5LRUQpIHsKIAkJcnRscHJpdi0+ZG0uY3VycmVudF90dXJib19lZGNhID0gZmFsc2U7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAoIW1hYy0+aHRfZW5hYmxlKSB7CS8qRklYIE1FUkdFICovCisJaWYgKCghbWFjLT5odF9lbmFibGUpICYmICghcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9jb2V4aXN0ZW5jZSkpIHsKIAkJaWYgKCEoZWRjYV9iZV91bCAmIDB4ZmZmZjAwMDApKQogCQkJZWRjYV9iZV91bCB8PSAweDAwNWUwMDAwOwogCkBAIC01ODYsMTAgKzYxOCwxMiBAQAogCQkJZWRjYV9iZV9kbCB8PSAweDAwNWUwMDAwOwogCX0KIAotCWlmICgoIXJ0bHByaXYtPmRtLmlzX2FueV9ub25iZXBrdHMpICYmCi0JICAgICghcnRscHJpdi0+ZG0uZGlzYWJsZV9mcmFtZWJ1cnN0aW5nKSkgeworCWlmICgoYnRfY2hhbmdlX2VkY2EpIHx8ICgoIXJ0bHByaXYtPmRtLmlzX2FueV9ub25iZXBrdHMpICYmCisJICAgICAoIXJ0bHByaXYtPmRtLmRpc2FibGVfZnJhbWVidXJzdGluZykpKSB7CisKIAkJY3VyX3R4b2tfY250ID0gcnRscHJpdi0+c3RhdHMudHhieXRlc3VuaWNhc3QgLSBsYXN0X3R4b2tfY250OwogCQljdXJfcnhva19jbnQgPSBydGxwcml2LT5zdGF0cy5yeGJ5dGVzdW5pY2FzdCAtIGxhc3Rfcnhva19jbnQ7CisKIAkJaWYgKGN1cl9yeG9rX2NudCA+IDQgKiBjdXJfdHhva19jbnQpIHsKIAkJCWlmICghcnRscHJpdi0+ZG0uaXNfY3VyX3JkbHN0YXRlIHx8CiAJCQkgICAgIXJ0bHByaXYtPmRtLmN1cnJlbnRfdHVyYm9fZWRjYSkgewpAQCAtNjE4LDcgKzY1Miw2IEBACiAJCX0KIAl9CiAKLWRtX2NoZWNrZWRjYXR1cmJvX2V4aXQ6CiAJcnRscHJpdi0+ZG0uaXNfYW55X25vbmJlcGt0cyA9IGZhbHNlOwogCWxhc3RfdHhva19jbnQgPSBydGxwcml2LT5zdGF0cy50eGJ5dGVzdW5pY2FzdDsKIAlsYXN0X3J4b2tfY250ID0gcnRscHJpdi0+c3RhdHMucnhieXRlc3VuaWNhc3Q7CkBAIC02MzMsMTQgKzY2NiwxNCBAQAogCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CiAJdTggdGhlcm1hbHZhbHVlLCBkZWx0YSwgZGVsdGFfbGNrLCBkZWx0YV9pcWs7CiAJbG9uZyBlbGVfYSwgZWxlX2QsIHRlbXBfY2NrLCB2YWxfeCwgdmFsdWUzMjsKLQlsb25nIHZhbF95LCBlbGVfYzsKLQl1OCBvZmRtX2luZGV4WzJdLCBjY2tfaW5kZXgsIG9mZG1faW5kZXhfb2xkWzJdLCBjY2tfaW5kZXhfb2xkOworCWxvbmcgdmFsX3ksIGVsZV9jID0gMDsKKwl1OCBvZmRtX2luZGV4WzJdLCBjY2tfaW5kZXggPSAwLCBvZmRtX2luZGV4X29sZFsyXSwgY2NrX2luZGV4X29sZCA9IDA7CiAJaW50IGk7CiAJYm9vbCBpczJ0ID0gSVNfOTJDX1NFUklBTChydGxoYWwtPnZlcnNpb24pOwogCXU4IHR4cHdyX2xldmVsWzJdID0gezAsIDB9OwogCXU4IG9mZG1fbWluX2luZGV4ID0gNiwgcmY7CiAKLQlydGxwcml2LT5kbS50eHBvd2VyX3RyYWNraW5nSW5pdCA9IHRydWU7CisJcnRscHJpdi0+ZG0udHhwb3dlcl90cmFja2luZ2luaXQgPSB0cnVlOwogCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVJfVFJBQ0tJTkcsIERCR19MT1VELAogCQkgKCJydGw5MmNfZG1fdHhwb3dlcl90cmFja2luZ19jYWxsYmFja190aGVybWFsbWV0ZXJcbiIpKTsKIApAQCAtNjgzLDcgKzcxNiw2IEBACiAJCQlmb3IgKGkgPSAwOyBpIDwgT0ZETV9UQUJMRV9MRU5HVEg7IGkrKykgewogCQkJCWlmIChlbGVfZCA9PSAob2ZkbXN3aW5nX3RhYmxlW2ldICYKIAkJCQkgICAgTUFTS09GRE1fRCkpIHsKLQkJCQkJb2ZkbV9pbmRleF9vbGRbMV0gPSAodTgpIGk7CiAKIAkJCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUl9UUkFDS0lORywKIAkJCQkJICAgREJHX0xPVUQsCkBAIC0xMDYyLDcgKzEwOTQsNyBAQAogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAogCXJ0bHByaXYtPmRtLnR4cG93ZXJfdHJhY2tpbmcgPSB0cnVlOwotCXJ0bHByaXYtPmRtLnR4cG93ZXJfdHJhY2tpbmdJbml0ID0gZmFsc2U7CisJcnRscHJpdi0+ZG0udHhwb3dlcl90cmFja2luZ2luaXQgPSBmYWxzZTsKIAogCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVJfVFJBQ0tJTkcsIERCR19MT1VELAogCQkgKCJwTWdudEluZm8tPnR4cG93ZXJfdHJhY2tpbmcgPSAlZFxuIiwKQEAgLTExMzIsNiArMTE2NCw3IEBACiAJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKIAlzdHJ1Y3QgcmF0ZV9hZGFwdGl2ZSAqcF9yYSA9ICYocnRscHJpdi0+cmEpOwogCXUzMiBsb3dfcnNzaXRocmVzaF9mb3JfcmEsIGhpZ2hfcnNzaXRocmVzaF9mb3JfcmE7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9IE5VTEw7CiAKIAlpZiAoaXNfaGFsX3N0b3AocnRsaGFsKSkgewogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1JBVEUsIERCR19MT1VELApAQCAtMTE0NSw4ICsxMTc4LDggQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChtYWMtPmxpbmtfc3RhdGUgPT0gTUFDODAyMTFfTElOS0VEKSB7Ci0KKwlpZiAobWFjLT5saW5rX3N0YXRlID09IE1BQzgwMjExX0xJTktFRCAmJgorCSAgICBtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CiAJCXN3aXRjaCAocF9yYS0+cHJlX3JhdHJfc3RhdGUpIHsKIAkJY2FzZSBETV9SQVRSX1NUQV9ISUdIOgogCQkJaGlnaF9yc3NpdGhyZXNoX2Zvcl9yYSA9IDUwOwpAQCAtMTE4NSwxMCArMTIxOCwxMyBAQAogCQkJCSAoIlByZVN0YXRlID0gJWQsIEN1clN0YXRlID0gJWRcbiIsCiAJCQkJICBwX3JhLT5wcmVfcmF0cl9zdGF0ZSwgcF9yYS0+cmF0cl9zdGF0ZSkpOwogCi0JCQlydGxwcml2LT5jZmctPm9wcy0+dXBkYXRlX3JhdGVfbWFzayhodywKKwkJCXJjdV9yZWFkX2xvY2soKTsKKwkJCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YShtYWMtPnZpZiwgbWFjLT5ic3NpZCk7CisJCQlydGxwcml2LT5jZmctPm9wcy0+dXBkYXRlX3JhdGVfdGJsKGh3LCBzdGEsCiAJCQkJCXBfcmEtPnJhdHJfc3RhdGUpOwogCiAJCQlwX3JhLT5wcmVfcmF0cl9zdGF0ZSA9IHBfcmEtPnJhdHJfc3RhdGU7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJfQogCX0KIH0KQEAgLTEyMDIsNTEgKzEyMzgsNiBAQAogCWRtX3BzdGFibGUucnNzaV92YWxfbWluID0gMDsKIH0KIAotc3RhdGljIHZvaWQgcnRsOTJjX2RtXzFyX2NjYShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7Ci0Jc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKLQotCWlmIChkbV9wc3RhYmxlLnJzc2lfdmFsX21pbiAhPSAwKSB7Ci0JCWlmIChkbV9wc3RhYmxlLnByZV9jY2FzdGF0ZSA9PSBDQ0FfMlIpIHsKLQkJCWlmIChkbV9wc3RhYmxlLnJzc2lfdmFsX21pbiA+PSAzNSkKLQkJCQlkbV9wc3RhYmxlLmN1cl9jY2FzYXRlID0gQ0NBXzFSOwotCQkJZWxzZQotCQkJCWRtX3BzdGFibGUuY3VyX2NjYXNhdGUgPSBDQ0FfMlI7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoZG1fcHN0YWJsZS5yc3NpX3ZhbF9taW4gPD0gMzApCi0JCQkJZG1fcHN0YWJsZS5jdXJfY2Nhc2F0ZSA9IENDQV8yUjsKLQkJCWVsc2UKLQkJCQlkbV9wc3RhYmxlLmN1cl9jY2FzYXRlID0gQ0NBXzFSOwotCQl9Ci0JfSBlbHNlIHsKLQkJZG1fcHN0YWJsZS5jdXJfY2Nhc2F0ZSA9IENDQV9NQVg7Ci0JfQotCi0JaWYgKGRtX3BzdGFibGUucHJlX2NjYXN0YXRlICE9IGRtX3BzdGFibGUuY3VyX2NjYXNhdGUpIHsKLQkJaWYgKGRtX3BzdGFibGUuY3VyX2NjYXNhdGUgPT0gQ0NBXzFSKSB7Ci0JCQlpZiAoZ2V0X3JmX3R5cGUocnRscGh5KSA9PSBSRl8yVDJSKSB7Ci0JCQkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1RSWFBBVEhFTkFCTEUsCi0JCQkJCSAgICAgIE1BU0tCWVRFMCwgMHgxMyk7Ci0JCQkJcnRsX3NldF9iYnJlZyhodywgMHhlNzAsIE1BU0tCWVRFMywgMHgyMCk7Ci0JCQl9IGVsc2UgewotCQkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMF9UUlhQQVRIRU5BQkxFLAotCQkJCQkgICAgICBNQVNLQllURTAsIDB4MjMpOwotCQkJCXJ0bF9zZXRfYmJyZWcoaHcsIDB4ZTcwLCAweDdmYzAwMDAwLCAweDEwYyk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlydGxfc2V0X2JicmVnKGh3LCBST0ZETTBfVFJYUEFUSEVOQUJMRSwgTUFTS0JZVEUwLAotCQkJCSAgICAgIDB4MzMpOwotCQkJcnRsX3NldF9iYnJlZyhodywgMHhlNzAsIE1BU0tCWVRFMywgMHg2Myk7Ci0JCX0KLQkJZG1fcHN0YWJsZS5wcmVfY2Nhc3RhdGUgPSBkbV9wc3RhYmxlLmN1cl9jY2FzYXRlOwotCX0KLQotCVJUX1RSQUNFKHJ0bHByaXYsIERCR19MT1VELCBEQkdfTE9VRCwgKCJDQ0FTdGFnZSA9ICVzXG4iLAotCQkJCQkgICAgICAgKGRtX3BzdGFibGUuY3VyX2NjYXNhdGUgPT0KLQkJCQkJCTApID8gIjFSQ0NBIiA6ICIyUkNDQSIpKTsKLX0KLQogdm9pZCBydGw5MmNfZG1fcmZfc2F2aW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBiZm9yY2VfaW5fbm9ybWFsKQogewogCXN0YXRpYyB1OCBpbml0aWFsaXplOwpAQCAtMTM1Miw3ICsxMzQzLDkgQEAKIAl9CiAKIAlpZiAoSVNfOTJDX1NFUklBTChydGxoYWwtPnZlcnNpb24pKQotCQlydGw5MmNfZG1fMXJfY2NhKGh3KTsKKwkJOy8qIHJ0bDkyY19kbV8xcl9jY2EoaHcpOyAqLworCWVsc2UKKwkJcnRsOTJjX2RtX3JmX3NhdmluZyhodywgZmFsc2UpOwogfQogCiB2b2lkIHJ0bDkyY19kbV9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQpAQCAtMTM2OSw2ICsxMzYyLDg0IEBACiB9CiBFWFBPUlRfU1lNQk9MKHJ0bDkyY19kbV9pbml0KTsKIAordm9pZCBydGw5MmNfZG1fZHluYW1pY190eHBvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJbG9uZyB1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiOworCisJaWYgKCFydGxwcml2LT5kbS5keW5hbWljX3R4cG93ZXJfZW5hYmxlKQorCQlyZXR1cm47CisKKwlpZiAocnRscHJpdi0+ZG0uZG1fZmxhZyAmIEhBTF9ETV9ISVBXUl9ESVNBQkxFKSB7CisJCXJ0bHByaXYtPmRtLmR5bmFtaWNfdHhoaWdocG93ZXJfbHZsID0gVFhISUdIUFdSTEVWRUxfTk9STUFMOworCQlyZXR1cm47CisJfQorCisJaWYgKChtYWMtPmxpbmtfc3RhdGUgPCBNQUM4MDIxMV9MSU5LRUQpICYmCisJICAgIChydGxwcml2LT5kbS5lbnRyeV9taW5fdW5kZWNvcmF0ZWRzbW9vdGhlZF9wd2RiID09IDApKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19UUkFDRSwKKwkJCSAoIk5vdCBjb25uZWN0ZWQgdG8gYW55XG4iKSk7CisKKwkJcnRscHJpdi0+ZG0uZHluYW1pY190eGhpZ2hwb3dlcl9sdmwgPSBUWEhJR0hQV1JMRVZFTF9OT1JNQUw7CisKKwkJcnRscHJpdi0+ZG0ubGFzdF9kdHBfbHZsID0gVFhISUdIUFdSTEVWRUxfTk9STUFMOworCQlyZXR1cm47CisJfQorCisJaWYgKG1hYy0+bGlua19zdGF0ZSA+PSBNQUM4MDIxMV9MSU5LRUQpIHsKKwkJaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCQl1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiID0KKwkJCSAgICBydGxwcml2LT5kbS5lbnRyeV9taW5fdW5kZWNvcmF0ZWRzbW9vdGhlZF9wd2RiOworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX0xPVUQsCisJCQkJICgiQVAgQ2xpZW50IFBXREIgPSAweCVseFxuIiwKKwkJCQkgIHVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIpKTsKKwkJfSBlbHNlIHsKKwkJCXVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPQorCQkJICAgIHJ0bHByaXYtPmRtLnVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGI7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwKKwkJCQkgKCJTVEEgRGVmYXVsdCBQb3J0IFBXREIgPSAweCVseFxuIiwKKwkJCQkgIHVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIpKTsKKwkJfQorCX0gZWxzZSB7CisJCXVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPQorCQkgICAgcnRscHJpdi0+ZG0uZW50cnlfbWluX3VuZGVjb3JhdGVkc21vb3RoZWRfcHdkYjsKKworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwKKwkJCSAoIkFQIEV4dCBQb3J0IFBXREIgPSAweCVseFxuIiwKKwkJCSAgdW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYikpOworCX0KKworCWlmICh1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiID49IFRYX1BPV0VSX05FQVJfRklFTERfVEhSRVNIX0xWTDIpIHsKKwkJcnRscHJpdi0+ZG0uZHluYW1pY190eGhpZ2hwb3dlcl9sdmwgPSBUWEhJR0hQV1JMRVZFTF9MRVZFTDE7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19MT1VELAorCQkJICgiVFhISUdIUFdSTEVWRUxfTEVWRUwxIChUeFB3cj0weDApXG4iKSk7CisJfSBlbHNlIGlmICgodW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYiA8CisJCSAgICAoVFhfUE9XRVJfTkVBUl9GSUVMRF9USFJFU0hfTFZMMiAtIDMpKSAmJgorCQkgICAodW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYiA+PQorCQkgICAgVFhfUE9XRVJfTkVBUl9GSUVMRF9USFJFU0hfTFZMMSkpIHsKKworCQlydGxwcml2LT5kbS5keW5hbWljX3R4aGlnaHBvd2VyX2x2bCA9IFRYSElHSFBXUkxFVkVMX0xFVkVMMTsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX0xPVUQsCisJCQkgKCJUWEhJR0hQV1JMRVZFTF9MRVZFTDEgKFR4UHdyPTB4MTApXG4iKSk7CisJfSBlbHNlIGlmICh1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiIDwKKwkJICAgKFRYX1BPV0VSX05FQVJfRklFTERfVEhSRVNIX0xWTDEgLSA1KSkgeworCQlydGxwcml2LT5kbS5keW5hbWljX3R4aGlnaHBvd2VyX2x2bCA9IFRYSElHSFBXUkxFVkVMX05PUk1BTDsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX0xPVUQsCisJCQkgKCJUWEhJR0hQV1JMRVZFTF9OT1JNQUxcbiIpKTsKKwl9CisKKwlpZiAoKHJ0bHByaXYtPmRtLmR5bmFtaWNfdHhoaWdocG93ZXJfbHZsICE9IHJ0bHByaXYtPmRtLmxhc3RfZHRwX2x2bCkpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX0xPVUQsCisJCQkgKCJQSFlfU2V0VHhQb3dlckxldmVsODE5MlMoKSBDaGFubmVsID0gJWRcbiIsCisJCQkgIHJ0bHBoeS0+Y3VycmVudF9jaGFubmVsKSk7CisJCXJ0bDkyY19waHlfc2V0X3R4cG93ZXJfbGV2ZWwoaHcsIHJ0bHBoeS0+Y3VycmVudF9jaGFubmVsKTsKKwl9CisKKwlydGxwcml2LT5kbS5sYXN0X2R0cF9sdmwgPSBydGxwcml2LT5kbS5keW5hbWljX3R4aGlnaHBvd2VyX2x2bDsKK30KKwogdm9pZCBydGw5MmNfZG1fd2F0Y2hkb2coc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwpAQCAtMTM4OCwxMSArMTQ1OSwzMjEgQEAKIAkJcnRsOTJjX2RtX2RpZyhodyk7CiAJCXJ0bDkyY19kbV9mYWxzZV9hbGFybV9jb3VudGVyX3N0YXRpc3RpY3MoaHcpOwogCQlydGw5MmNfZG1fZHluYW1pY19iYl9wb3dlcnNhdmluZyhodyk7Ci0JCXJ0bHByaXYtPmNmZy0+b3BzLT5kbV9keW5hbWljX3R4cG93ZXIoaHcpOworCQlydGw5MmNfZG1fZHluYW1pY190eHBvd2VyKGh3KTsKIAkJcnRsOTJjX2RtX2NoZWNrX3R4cG93ZXJfdHJhY2tpbmcoaHcpOwogCQlydGw5MmNfZG1fcmVmcmVzaF9yYXRlX2FkYXB0aXZlX21hc2soaHcpOworCQlydGw5MmNfZG1fYnRfY29leGlzdChodyk7CiAJCXJ0bDkyY19kbV9jaGVja19lZGNhX3R1cmJvKGh3KTsKLQogCX0KIH0KIEVYUE9SVF9TWU1CT0wocnRsOTJjX2RtX3dhdGNoZG9nKTsKKwordTggcnRsOTJjX2J0X3Jzc2lfc3RhdGVfY2hhbmdlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpydGxwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCWxvbmcgdW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYjsKKwl1OCBjdXJyX2J0X3Jzc2lfc3RhdGUgPSAweDAwOworCisJaWYgKHJ0bHByaXYtPm1hYzgwMjExLmxpbmtfc3RhdGUgPT0gTUFDODAyMTFfTElOS0VEKSB7CisJCXVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPQorCQkJCSBHRVRfVU5ERUNPUkFURURfQVZFUkFHRV9SU1NJKHJ0bHByaXYpOworCX0gZWxzZSB7CisJCWlmIChydGxwcml2LT5kbS5lbnRyeV9taW5fdW5kZWNvcmF0ZWRzbW9vdGhlZF9wd2RiID09IDApCisJCQl1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiID0gMTAwOworCQllbHNlCisJCQl1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiID0KKwkJCQlydGxwcml2LT5kbS5lbnRyeV9taW5fdW5kZWNvcmF0ZWRzbW9vdGhlZF9wd2RiOworCX0KKworCS8qIENoZWNrIFJTU0kgdG8gZGV0ZXJtaW5lIEhpZ2hQb3dlci9Ob3JtYWxQb3dlciBzdGF0ZSBmb3IKKwkgKiBCVCBjb2V4aXN0ZW5jZS4gKi8KKwlpZiAodW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYiA+PSA2NykKKwkJY3Vycl9idF9yc3NpX3N0YXRlICY9ICh+QlRfUlNTSV9TVEFURV9OT1JNQUxfUE9XRVIpOworCWVsc2UgaWYgKHVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPCA2MikKKwkJY3Vycl9idF9yc3NpX3N0YXRlIHw9IEJUX1JTU0lfU1RBVEVfTk9STUFMX1BPV0VSOworCisJLyogQ2hlY2sgUlNTSSB0byBkZXRlcm1pbmUgQU1QRFUgc2V0dGluZyBmb3IgQlQgY29leGlzdGVuY2UuICovCisJaWYgKHVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPj0gNDApCisJCWN1cnJfYnRfcnNzaV9zdGF0ZSAmPSAofkJUX1JTU0lfU1RBVEVfQU1EUFVfT0ZGKTsKKwllbHNlIGlmICh1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiIDw9IDMyKQorCQljdXJyX2J0X3Jzc2lfc3RhdGUgfD0gQlRfUlNTSV9TVEFURV9BTURQVV9PRkY7CisKKwkvKiBNYXJrZWQgUlNTSSBzdGF0ZS4gSXQgd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSBCVCBjb2V4aXN0ZW5jZQorCSAqIHNldHRpbmcgbGF0ZXIuICovCisJaWYgKHVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPCAzNSkKKwkJY3Vycl9idF9yc3NpX3N0YXRlIHw9ICBCVF9SU1NJX1NUQVRFX1NQRUNJQUxfTE9XOworCWVsc2UKKwkJY3Vycl9idF9yc3NpX3N0YXRlICY9ICh+QlRfUlNTSV9TVEFURV9TUEVDSUFMX0xPVyk7CisKKwkvKiBTZXQgVHggUG93ZXIgYWNjb3JkaW5nIHRvIEJUIHN0YXR1cy4gKi8KKwlpZiAodW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYiA+PSAzMCkKKwkJY3Vycl9idF9yc3NpX3N0YXRlIHw9ICBCVF9SU1NJX1NUQVRFX1RYUE9XRVJfTE9XOworCWVsc2UgaWYgKHVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPCAyNSkKKwkJY3Vycl9idF9yc3NpX3N0YXRlICY9ICh+QlRfUlNTSV9TVEFURV9UWFBPV0VSX0xPVyk7CisKKwkvKiBDaGVjayBCVCBzdGF0ZSByZWxhdGVkIHRvIEJUX0lkbGUgaW4gQi9HIG1vZGUuICovCisJaWYgKHVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPCAxNSkKKwkJY3Vycl9idF9yc3NpX3N0YXRlIHw9ICBCVF9SU1NJX1NUQVRFX0JHX0VEQ0FfTE9XOworCWVsc2UKKwkJY3Vycl9idF9yc3NpX3N0YXRlICY9ICh+QlRfUlNTSV9TVEFURV9CR19FRENBX0xPVyk7CisKKwlpZiAoY3Vycl9idF9yc3NpX3N0YXRlICE9IHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfcnNzaV9zdGF0ZSkgeworCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X3Jzc2lfc3RhdGUgPSBjdXJyX2J0X3Jzc2lfc3RhdGU7CisJCXJldHVybiB0cnVlOworCX0gZWxzZSB7CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKHJ0bDkyY19idF9yc3NpX3N0YXRlX2NoYW5nZSk7CisKK3N0YXRpYyBib29sIHJ0bDkyY19idF9zdGF0ZV9jaGFuZ2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpX3ByaXYgKnJ0bHBjaXByaXYgPSBydGxfcGNpcHJpdihodyk7CisKKwl1MzIgcG9sbGluZywgcmF0aW9fdHgsIHJhdGlvX3ByaTsKKwl1MzIgYnRfdHgsIGJ0X3ByaTsKKwl1OCBidF9zdGF0ZTsKKwl1OCBjdXJfc2VydmljZV90eXBlOworCisJaWYgKHJ0bHByaXYtPm1hYzgwMjExLmxpbmtfc3RhdGUgPCBNQUM4MDIxMV9MSU5LRUQpCisJCXJldHVybiBmYWxzZTsKKworCWJ0X3N0YXRlID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCAweDRmZCk7CisJYnRfdHggPSBydGxfcmVhZF9kd29yZChydGxwcml2LCAweDQ4OCk7CisJYnRfdHggPSBidF90eCAmIDB4MDBmZmZmZmY7CisJYnRfcHJpID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgMHg0OGMpOworCWJ0X3ByaSA9IGJ0X3ByaSAmIDB4MDBmZmZmZmY7CisJcG9sbGluZyA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIDB4NDkwKTsKKworCWlmIChidF90eCA9PSAweGZmZmZmZmZmICYmIGJ0X3ByaSA9PSAweGZmZmZmZmZmICYmCisJICAgIHBvbGxpbmcgPT0gMHhmZmZmZmZmZiAmJiBidF9zdGF0ZSA9PSAweGZmKQorCQlyZXR1cm4gZmFsc2U7CisKKwlidF9zdGF0ZSAmPSBCSVRfT0ZGU0VUX0xFTl9NQVNLXzMyKDAsIDEpOworCWlmIChidF9zdGF0ZSAhPSBydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2N1cl9zdGF0ZSkgeworCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2N1cl9zdGF0ZSA9IGJ0X3N0YXRlOworCisJCWlmIChydGxwY2lwcml2LT5idF9jb2V4aXN0LnJlZ19idF9zY28gPT0gMykgeworCQkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9zZXJ2aWNlID0gQlRfSURMRTsKKworCQkJYnRfc3RhdGUgPSBidF9zdGF0ZSB8CisJCQkgICgocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9hbnRfaXNvbGF0aW9uID09IDEpID8KKwkJCSAgMCA6IEJJVF9PRkZTRVRfTEVOX01BU0tfMzIoMSwgMSkpIHwKKwkJCSAgQklUX09GRlNFVF9MRU5fTUFTS18zMigyLCAxKTsKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4NGZkLCBidF9zdGF0ZSk7CisJCX0KKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmF0aW9fdHggPSBidF90eCAqIDEwMDAgLyBwb2xsaW5nOworCXJhdGlvX3ByaSA9IGJ0X3ByaSAqIDEwMDAgLyBwb2xsaW5nOworCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QucmF0aW9fdHggPSByYXRpb190eDsKKwlydGxwY2lwcml2LT5idF9jb2V4aXN0LnJhdGlvX3ByaSA9IHJhdGlvX3ByaTsKKworCWlmIChidF9zdGF0ZSAmJiBydGxwY2lwcml2LT5idF9jb2V4aXN0LnJlZ19idF9zY28gPT0gMykgeworCisJCWlmICgocmF0aW9fdHggPCAzMCkgICYmIChyYXRpb19wcmkgPCAzMCkpCisJCQljdXJfc2VydmljZV90eXBlID0gQlRfSURMRTsKKwkJZWxzZSBpZiAoKHJhdGlvX3ByaSA+IDExMCkgJiYgKHJhdGlvX3ByaSA8IDI1MCkpCisJCQljdXJfc2VydmljZV90eXBlID0gQlRfU0NPOworCQllbHNlIGlmICgocmF0aW9fdHggPj0gMjAwKSAmJiAocmF0aW9fcHJpID49IDIwMCkpCisJCQljdXJfc2VydmljZV90eXBlID0gQlRfQlVTWTsKKwkJZWxzZSBpZiAoKHJhdGlvX3R4ID49IDM1MCkgJiYgKHJhdGlvX3R4IDwgNTAwKSkKKwkJCWN1cl9zZXJ2aWNlX3R5cGUgPSBCVF9PVEhFUkJVU1k7CisJCWVsc2UgaWYgKHJhdGlvX3R4ID49IDUwMCkKKwkJCWN1cl9zZXJ2aWNlX3R5cGUgPSBCVF9QQU47CisJCWVsc2UKKwkJCWN1cl9zZXJ2aWNlX3R5cGUgPSBCVF9PVEhFUl9BQ1RJT047CisKKwkJaWYgKGN1cl9zZXJ2aWNlX3R5cGUgIT0gcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9zZXJ2aWNlKSB7CisJCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X3NlcnZpY2UgPSBjdXJfc2VydmljZV90eXBlOworCQkJYnRfc3RhdGUgPSBidF9zdGF0ZSB8CisJCQkgICAoKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfYW50X2lzb2xhdGlvbiA9PSAxKSA/CisJCQkgICAwIDogQklUX09GRlNFVF9MRU5fTUFTS18zMigxLCAxKSkgfAorCQkJICAgKChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X3NlcnZpY2UgIT0gQlRfSURMRSkgPworCQkJICAgMCA6IEJJVF9PRkZTRVRfTEVOX01BU0tfMzIoMiwgMSkpOworCisJCQkvKiBBZGQgaW50ZXJydXB0IG1pZ3JhdGlvbiB3aGVuIGJ0IGlzIG5vdCBpbmkKKwkJCSAqIGlkbGUgc3RhdGUgKG5vIHRyYWZmaWMpLiAqLworCQkJaWYgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfc2VydmljZSAhPSBCVF9JRExFKSB7CisJCQkJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgMHg1MDQsIDB4MGNjYyk7CisJCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHg1MDYsIDB4NTQpOworCQkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4NTA3LCAweDU0KTsKKwkJCX0gZWxzZSB7CisJCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHg1MDYsIDB4MDApOworCQkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4NTA3LCAweDAwKTsKKwkJCX0KKworCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHg0ZmQsIGJ0X3N0YXRlKTsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworCit9CisKK3N0YXRpYyBib29sIHJ0bDkyY19idF93aWZpX2Nvbm5lY3RfY2hhbmdlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdGF0aWMgYm9vbCBtZWRpYV9jb25uZWN0OworCisJaWYgKHJ0bHByaXYtPm1hYzgwMjExLmxpbmtfc3RhdGUgPCBNQUM4MDIxMV9MSU5LRUQpIHsKKwkJbWVkaWFfY29ubmVjdCA9IGZhbHNlOworCX0gZWxzZSB7CisJCWlmICghbWVkaWFfY29ubmVjdCkgeworCQkJbWVkaWFfY29ubmVjdCA9IHRydWU7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQltZWRpYV9jb25uZWN0ID0gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDkyY19idF9zZXRfbm9ybWFsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpydGxwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCisKKwlpZiAocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9zZXJ2aWNlID09IEJUX09USEVSQlVTWSkgeworCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2VkY2FfdWwgPSAweDVlYTcyYjsKKwkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9lZGNhX2RsID0gMHg1ZWE3MmI7CisJfSBlbHNlIGlmIChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X3NlcnZpY2UgPT0gQlRfQlVTWSkgeworCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2VkY2FfdWwgPSAweDVlYjgyZjsKKwkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9lZGNhX2RsID0gMHg1ZWI4MmY7CisJfSBlbHNlIGlmIChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X3NlcnZpY2UgPT0gQlRfU0NPKSB7CisJCWlmIChydGxwY2lwcml2LT5idF9jb2V4aXN0LnJhdGlvX3R4ID4gMTYwKSB7CisJCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2VkY2FfdWwgPSAweDVlYTcyZjsKKwkJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfZWRjYV9kbCA9IDB4NWVhNzJmOworCQl9IGVsc2UgeworCQkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9lZGNhX3VsID0gMHg1ZWEzMmI7CisJCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2VkY2FfZGwgPSAweDVlYTQyYjsKKwkJfQorCX0gZWxzZSB7CisJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfZWRjYV91bCA9IDA7CisJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfZWRjYV9kbCA9IDA7CisJfQorCisJaWYgKChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X3NlcnZpY2UgIT0gQlRfSURMRSkgJiYKKwkgICAgIChydGxwcml2LT5tYWM4MDIxMS5tb2RlID09IFdJUkVMRVNTX01PREVfRyB8fAorCSAgICAgKHJ0bHByaXYtPm1hYzgwMjExLm1vZGUgPT0gKFdJUkVMRVNTX01PREVfRyB8IFdJUkVMRVNTX01PREVfQikpKSAmJgorCSAgICAgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfcnNzaV9zdGF0ZSAmCisJICAgICBCVF9SU1NJX1NUQVRFX0JHX0VEQ0FfTE9XKSkgeworCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2VkY2FfdWwgPSAweDVlYjgyYjsKKwkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9lZGNhX2RsID0gMHg1ZWI4MmI7CisJfQorfQorCitzdGF0aWMgdm9pZCBydGw5MmNfYnRfYW50X2lzb2xhdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2lfcHJpdiAqcnRscGNpcHJpdiA9IHJ0bF9wY2lwcml2KGh3KTsKKworCisJLyogT25seSBlbmFibGUgSFcgQlQgY29leGlzdCB3aGVuIEJUIGluICJCdXN5IiBzdGF0ZS4gKi8KKwlpZiAocnRscHJpdi0+bWFjODAyMTEudmVuZG9yID09IFBFRVJfQ0lTQ08gJiYKKwkgICAgcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9zZXJ2aWNlID09IEJUX09USEVSX0FDVElPTikgeworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfR1BJT19NVVhDRkcsIDB4YTApOworCX0gZWxzZSB7CisJCWlmICgocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9zZXJ2aWNlID09IEJUX0JVU1kpICYmCisJCSAgICAocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9yc3NpX3N0YXRlICYKKwkJICAgICBCVF9SU1NJX1NUQVRFX05PUk1BTF9QT1dFUikpIHsKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19HUElPX01VWENGRywgMHhhMCk7CisJCX0gZWxzZSBpZiAoKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfc2VydmljZSA9PQorCQkJICAgIEJUX09USEVSX0FDVElPTikgJiYgKHJ0bHByaXYtPm1hYzgwMjExLm1vZGUgPAorCQkJICAgIFdJUkVMRVNTX01PREVfTl8yNEcpICYmCisJCQkgICAgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfcnNzaV9zdGF0ZSAmCisJCQkgICAgQlRfUlNTSV9TVEFURV9TUEVDSUFMX0xPVykpIHsKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19HUElPX01VWENGRywgMHhhMCk7CisJCX0gZWxzZSBpZiAocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9zZXJ2aWNlID09IEJUX1BBTikgeworCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0dQSU9fTVVYQ0ZHLCAweDAwKTsKKwkJfSBlbHNlIHsKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19HUElPX01VWENGRywgMHgwMCk7CisJCX0KKwl9CisKKwlpZiAocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9zZXJ2aWNlID09IEJUX1BBTikKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19HUElPX1BJTl9DVFJMLCAweDEwMTAwKTsKKwllbHNlCisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfR1BJT19QSU5fQ1RSTCwgMHgwKTsKKworCWlmIChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X3Jzc2lfc3RhdGUgJgorCSAgICBCVF9SU1NJX1NUQVRFX05PUk1BTF9QT1dFUikgeworCQlydGw5MmNfYnRfc2V0X25vcm1hbChodyk7CisJfSBlbHNlIHsKKwkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9lZGNhX3VsID0gMDsKKwkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9lZGNhX2RsID0gMDsKKwl9CisKKwlpZiAocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9zZXJ2aWNlICE9IEJUX0lETEUpIHsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9yZnJlZyhodywKKwkJCQkgUkY5MF9QQVRIX0EsCisJCQkJIDB4MWUsCisJCQkJIDB4ZjAsIDB4Zik7CisJfSBlbHNlIHsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9yZnJlZyhodywKKwkJICAgICBSRjkwX1BBVEhfQSwgMHgxZSwgMHhmMCwKKwkJICAgICBydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X3JmcmVnX29yaWdpbl8xZSk7CisJfQorCisJaWYgKCFydGxwcml2LT5kbS5keW5hbWljX3R4cG93ZXJfZW5hYmxlKSB7CisJCWlmIChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X3NlcnZpY2UgIT0gQlRfSURMRSkgeworCQkJaWYgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfcnNzaV9zdGF0ZSAmCisJCQkJQlRfUlNTSV9TVEFURV9UWFBPV0VSX0xPVykgeworCQkJCXJ0bHByaXYtPmRtLmR5bmFtaWNfdHhoaWdocG93ZXJfbHZsID0KKwkJCQkJCQlUWEhJR0hQV1JMRVZFTF9CVDI7CisJCQl9IGVsc2UgeworCQkJCXJ0bHByaXYtPmRtLmR5bmFtaWNfdHhoaWdocG93ZXJfbHZsID0KKwkJCQkJVFhISUdIUFdSTEVWRUxfQlQxOworCQkJfQorCQl9IGVsc2UgeworCQkJcnRscHJpdi0+ZG0uZHluYW1pY190eGhpZ2hwb3dlcl9sdmwgPQorCQkJCVRYSElHSFBXUkxFVkVMX05PUk1BTDsKKwkJfQorCQlydGw5MmNfcGh5X3NldF90eHBvd2VyX2xldmVsKGh3LAorCQkJcnRscHJpdi0+cGh5LmN1cnJlbnRfY2hhbm5lbCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBydGw5MmNfY2hlY2tfYnRfY2hhbmdlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpydGxwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCisJaWYgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfY3VyX3N0YXRlKSB7CisJCWlmIChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2FudF9pc29sYXRpb24pCisJCQlydGw5MmNfYnRfYW50X2lzb2xhdGlvbihodyk7CisJfSBlbHNlIHsKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0dQSU9fTVVYQ0ZHLCAweDAwKTsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9yZnJlZyhodywgUkY5MF9QQVRIX0EsIDB4MWUsIDB4ZjAsCisJCQkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9yZnJlZ19vcmlnaW5fMWUpOworCisJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfZWRjYV91bCA9IDA7CisJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfZWRjYV9kbCA9IDA7CisJfQorfQorCit2b2lkIHJ0bDkyY19kbV9idF9jb2V4aXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcGNpX3ByaXYgKnJ0bHBjaXByaXYgPSBydGxfcGNpcHJpdihodyk7CisKKwlib29sIHdpZmlfY29ubmVjdF9jaGFuZ2U7CisJYm9vbCBidF9zdGF0ZV9jaGFuZ2U7CisJYm9vbCByc3NpX3N0YXRlX2NoYW5nZTsKKworCWlmICgocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9jb2V4aXN0ZW5jZSkgJiYKKwkgICAgIChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2NvZXhpc3RfdHlwZSA9PSBCVF9DU1JfQkM0KSkgeworCisJCXdpZmlfY29ubmVjdF9jaGFuZ2UgPSBydGw5MmNfYnRfd2lmaV9jb25uZWN0X2NoYW5nZShodyk7CisJCWJ0X3N0YXRlX2NoYW5nZSA9IHJ0bDkyY19idF9zdGF0ZV9jaGFuZ2UoaHcpOworCQlyc3NpX3N0YXRlX2NoYW5nZSA9IHJ0bDkyY19idF9yc3NpX3N0YXRlX2NoYW5nZShodyk7CisKKwkJaWYgKHdpZmlfY29ubmVjdF9jaGFuZ2UgfHwgYnRfc3RhdGVfY2hhbmdlIHx8IHJzc2lfc3RhdGVfY2hhbmdlKQorCQkJcnRsOTJjX2NoZWNrX2J0X2NoYW5nZShodyk7CisJfQorfQorRVhQT1JUX1NZTUJPTChydGw5MmNfZG1fYnRfY29leGlzdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjL2RtX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyYy9kbV9jb21tb24uaAppbmRleCBiOWNiYjBhLi5iOTczNmQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjL2RtX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmMvZG1fY29tbW9uLmgKQEAgLTIwMCw1ICsyMDAsNyBAQAogdm9pZCBydGw5MmNfcGh5X2FwX2NhbGlicmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgY2hhciBkZWx0YSk7CiB2b2lkIHJ0bDkyY19waHlfbGNfY2FsaWJyYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHZvaWQgcnRsOTJjX3BoeV9pcV9jYWxpYnJhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgcmVjb3ZlcnkpOwordm9pZCBydGw5MmNfZG1fZHluYW1pY190eHBvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJjX2RtX2J0X2NvZXhpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmMvZndfY29tbW9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjL2Z3X2NvbW1vbi5jCmluZGV4IDI4YTZjZTMuLjUwMzAzZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmMvZndfY29tbW9uLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyYy9md19jb21tb24uYwpAQCAtMTcxLDcgKzE3MSw2IEBACiBzdGF0aWMgaW50IF9ydGw5MmNfZndfZnJlZV90b19nbyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7Ci0JaW50IGVyciA9IC1FSU87CiAJdTMyIGNvdW50ZXIgPSAwOwogCXUzMiB2YWx1ZTMyOwogCkBAIC0xODQsNyArMTgzLDcgQEAKIAkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKIAkJCSAoImNoa3N1bSByZXBvcnQgZmFpbGwgISBSRUdfTUNVRldETDoweCUwOHggLlxuIiwKIAkJCSAgdmFsdWUzMikpOwotCQlnb3RvIGV4aXQ7CisJCXJldHVybiAtRUlPOwogCX0KIAogCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRlcsIERCR19UUkFDRSwKQEAgLTIwNCw4ICsyMDMsNyBAQAogCQkJCSAoIlBvbGxpbmcgRlcgcmVhZHkgc3VjY2VzcyEhIgogCQkJCSAiIFJFR19NQ1VGV0RMOjB4JTA4eCAuXG4iLAogCQkJCSB2YWx1ZTMyKSk7Ci0JCQllcnIgPSAwOwotCQkJZ290byBleGl0OworCQkJcmV0dXJuIDA7CiAJCX0KIAogCQltZGVsYXkoRldfODE5MkNfUE9MTElOR19ERUxBWSk7CkBAIC0yMTQsOSArMjEyLDcgQEAKIAogCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCiAJCSAoIlBvbGxpbmcgRlcgcmVhZHkgZmFpbCEhIFJFR19NQ1VGV0RMOjB4JTA4eCAuXG4iLCB2YWx1ZTMyKSk7Ci0KLWV4aXQ6Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gLUVJTzsKIH0KIAogaW50IHJ0bDkyY19kb3dubG9hZF9mdyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKQEAgLTIyNiwzMiArMjIyLDE2IEBACiAJc3RydWN0IHJ0bDkyY19maXJtd2FyZV9oZWFkZXIgKnBmd2hlYWRlcjsKIAl1OCAqcGZ3ZGF0YTsKIAl1MzIgZndzaXplOwotCWludCBlcnI7CiAJZW51bSB2ZXJzaW9uXzgxOTJjIHZlcnNpb24gPSBydGxoYWwtPnZlcnNpb247Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZTsKIAotCXByaW50ayhLRVJOX0lORk8gInJ0bDgxOTJjdTogTG9hZGluZyBmaXJtd2FyZSBmaWxlICVzXG4iLAorCXByaW50ayhLRVJOX0lORk8gInJ0bDgxOTJjOiBMb2FkaW5nIGZpcm13YXJlIGZpbGUgJXNcbiIsCiAJICAgICAgIHJ0bHByaXYtPmNmZy0+ZndfbmFtZSk7Ci0JZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZmlybXdhcmUsIHJ0bHByaXYtPmNmZy0+ZndfbmFtZSwKLQkJCSAgICAgICBydGxwcml2LT5pby5kZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJydGw4MTkyY3U6IEZpcm13YXJlIGxvYWRpbmcgZmFpbGVkXG4iKTsKKwlpZiAoIXJ0bGhhbC0+cGZpcm13YXJlKQogCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAoZmlybXdhcmUtPnNpemUgPiAweDQwMDApIHsKLQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKLQkJCSAoIkZpcm13YXJlIGlzIHRvbyBiaWchXG4iKSk7Ci0JCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQltZW1jcHkocnRsaGFsLT5wZmlybXdhcmUsIGZpcm13YXJlLT5kYXRhLCBmaXJtd2FyZS0+c2l6ZSk7Ci0JZndzaXplID0gZmlybXdhcmUtPnNpemU7Ci0JcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7CiAKIAlwZndoZWFkZXIgPSAoc3RydWN0IHJ0bDkyY19maXJtd2FyZV9oZWFkZXIgKilydGxoYWwtPnBmaXJtd2FyZTsKIAlwZndkYXRhID0gKHU4ICopIHJ0bGhhbC0+cGZpcm13YXJlOworCWZ3c2l6ZSA9IHJ0bGhhbC0+ZndzaXplOwogCiAJaWYgKElTX0ZXX0hFQURFUl9FWElTVChwZndoZWFkZXIpKSB7CiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRlcsIERCR19ETUVTRywKQEAgLTI2Nyw4ICsyNDcsNyBAQAogCV9ydGw5MmNfd3JpdGVfZncoaHcsIHZlcnNpb24sIHBmd2RhdGEsIGZ3c2l6ZSk7CiAJX3J0bDkyY19lbmFibGVfZndfZG93bmxvYWQoaHcsIGZhbHNlKTsKIAotCWVyciA9IF9ydGw5MmNfZndfZnJlZV90b19nbyhodyk7Ci0JaWYgKGVycikgeworCWlmIChfcnRsOTJjX2Z3X2ZyZWVfdG9fZ28oaHcpKSB7CiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCiAJCQkgKCJGaXJtd2FyZSBpcyBub3QgcmVhZHkgdG8gcnVuIVxuIikpOwogCX0gZWxzZSB7CkBAIC0zMDAsMTAgKzI3OSw5IEBACiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CiAJdTggYm94bnVtOwotCXUxNiBib3hfcmVnLCBib3hfZXh0cmVnOworCXUxNiBib3hfcmVnID0gMCwgYm94X2V4dHJlZyA9IDA7CiAJdTggdTFiX3RtcDsKIAlib29sIGlzZndfcmVhZCA9IGZhbHNlOwotCXU4IGJ1Zl9pbmRleCA9IDA7CiAJYm9vbCBid3JpdGVfc3VjZXNzID0gZmFsc2U7CiAJdTggd2FpdF9oMmNfbGltbWl0ID0gMTAwOwogCXU4IHdhaXRfd3JpdGVoMmNfbGltbWl0ID0gMTAwOwpAQCAtNDE0LDcgKzM5Miw3IEBACiAJCWNhc2UgMToKIAkJCWJveGNvbnRlbnRbMF0gJj0gfihCSVQoNykpOwogCQkJbWVtY3B5KCh1OCAqKSAoYm94Y29udGVudCkgKyAxLAotCQkJICAgICAgIHBfY21kYnVmZmVyICsgYnVmX2luZGV4LCAxKTsKKwkJCSAgICAgICBwX2NtZGJ1ZmZlciwgMSk7CiAKIAkJCWZvciAoaWR4ID0gMDsgaWR4IDwgNDsgaWR4KyspIHsKIAkJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBib3hfcmVnICsgaWR4LApAQCAtNDI0LDcgKzQwMiw3IEBACiAJCWNhc2UgMjoKIAkJCWJveGNvbnRlbnRbMF0gJj0gfihCSVQoNykpOwogCQkJbWVtY3B5KCh1OCAqKSAoYm94Y29udGVudCkgKyAxLAotCQkJICAgICAgIHBfY21kYnVmZmVyICsgYnVmX2luZGV4LCAyKTsKKwkJCSAgICAgICBwX2NtZGJ1ZmZlciwgMik7CiAKIAkJCWZvciAoaWR4ID0gMDsgaWR4IDwgNDsgaWR4KyspIHsKIAkJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBib3hfcmVnICsgaWR4LApAQCAtNDM0LDcgKzQxMiw3IEBACiAJCWNhc2UgMzoKIAkJCWJveGNvbnRlbnRbMF0gJj0gfihCSVQoNykpOwogCQkJbWVtY3B5KCh1OCAqKSAoYm94Y29udGVudCkgKyAxLAotCQkJICAgICAgIHBfY21kYnVmZmVyICsgYnVmX2luZGV4LCAzKTsKKwkJCSAgICAgICBwX2NtZGJ1ZmZlciwgMyk7CiAKIAkJCWZvciAoaWR4ID0gMDsgaWR4IDwgNDsgaWR4KyspIHsKIAkJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBib3hfcmVnICsgaWR4LApAQCAtNDQ0LDkgKzQyMiw5IEBACiAJCWNhc2UgNDoKIAkJCWJveGNvbnRlbnRbMF0gfD0gKEJJVCg3KSk7CiAJCQltZW1jcHkoKHU4ICopIChib3hleHRjb250ZW50KSwKLQkJCSAgICAgICBwX2NtZGJ1ZmZlciArIGJ1Zl9pbmRleCwgMik7CisJCQkgICAgICAgcF9jbWRidWZmZXIsIDIpOwogCQkJbWVtY3B5KCh1OCAqKSAoYm94Y29udGVudCkgKyAxLAotCQkJICAgICAgIHBfY21kYnVmZmVyICsgYnVmX2luZGV4ICsgMiwgMik7CisJCQkgICAgICAgcF9jbWRidWZmZXIgKyAyLCAyKTsKIAogCQkJZm9yIChpZHggPSAwOyBpZHggPCAyOyBpZHgrKykgewogCQkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIGJveF9leHRyZWcgKyBpZHgsCkBAIC00NjEsOSArNDM5LDkgQEAKIAkJY2FzZSA1OgogCQkJYm94Y29udGVudFswXSB8PSAoQklUKDcpKTsKIAkJCW1lbWNweSgodTggKikgKGJveGV4dGNvbnRlbnQpLAotCQkJICAgICAgIHBfY21kYnVmZmVyICsgYnVmX2luZGV4LCAyKTsKKwkJCSAgICAgICBwX2NtZGJ1ZmZlciwgMik7CiAJCQltZW1jcHkoKHU4ICopIChib3hjb250ZW50KSArIDEsCi0JCQkgICAgICAgcF9jbWRidWZmZXIgKyBidWZfaW5kZXggKyAyLCAzKTsKKwkJCSAgICAgICBwX2NtZGJ1ZmZlciArIDIsIDMpOwogCiAJCQlmb3IgKGlkeCA9IDA7IGlkeCA8IDI7IGlkeCsrKSB7CiAJCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgYm94X2V4dHJlZyArIGlkeCwKQEAgLTU2MSw2ICs1MzksMzkgQEAKIH0KIEVYUE9SVF9TWU1CT0wocnRsOTJjX3NldF9md19wd3Jtb2RlX2NtZCk7CiAKK3N0YXRpYyBib29sIF9ydGw5MmNfY21kX3NlbmRfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCXN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJc3RydWN0IHJ0bDgxOTJfdHhfcmluZyAqcmluZzsKKwlzdHJ1Y3QgcnRsX3R4X2Rlc2MgKnBkZXNjOworCXU4IG93bjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBza19idWZmICpwc2tiID0gTlVMTDsKKworCXJpbmcgPSAmcnRscGNpLT50eF9yaW5nW0JFQUNPTl9RVUVVRV07CisKKwlwc2tiID0gX19za2JfZGVxdWV1ZSgmcmluZy0+cXVldWUpOworCWlmIChwc2tiKQorCQlrZnJlZV9za2IocHNrYik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnRscHJpdi0+bG9ja3MuaXJxX3RoX2xvY2ssIGZsYWdzKTsKKworCXBkZXNjID0gJnJpbmctPmRlc2NbMF07CisJb3duID0gKHU4KSBydGxwcml2LT5jZmctPm9wcy0+Z2V0X2Rlc2MoKHU4ICopIHBkZXNjLCB0cnVlLCBIV19ERVNDX09XTik7CisKKwlydGxwcml2LT5jZmctPm9wcy0+ZmlsbF90eF9jbWRkZXNjKGh3LCAodTggKikgcGRlc2MsIDEsIDEsIHNrYik7CisKKwlfX3NrYl9xdWV1ZV90YWlsKCZyaW5nLT5xdWV1ZSwgc2tiKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLmlycV90aF9sb2NrLCBmbGFncyk7CisKKwlydGxwcml2LT5jZmctPm9wcy0+dHhfcG9sbGluZyhodywgQkVBQ09OX1FVRVVFKTsKKworCXJldHVybiB0cnVlOworfQorCiAjZGVmaW5lIEJFQUNPTl9QRwkJMCAvKi0+MSovCiAjZGVmaW5lIFBTUE9MTF9QRwkJMgogI2RlZmluZSBOVUxMX1BHCQkJMwpAQCAtNjc4LDcgKzY4OSw3IEBACiAJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKIH07CiAKLXZvaWQgcnRsOTJjX3NldF9md19yc3ZkcGFnZXBrdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBiX2RsX2ZpbmlzaGVkKQordm9pZCBydGw5MmNfc2V0X2Z3X3JzdmRwYWdlcGt0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGRsX2ZpbmlzaGVkKQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOwpAQCAtNjg3LDEyICs2OTgsMTIgQEAKIAl1MzIgdG90YWxwYWNrZXRsZW47CiAJYm9vbCBydHN0YXR1czsKIAl1OCB1MVJzdmRQYWdlTG9jWzNdID0gezB9OwotCWJvb2wgYl9kbG9rID0gZmFsc2U7CisJYm9vbCBkbG9rID0gZmFsc2U7CiAKIAl1OCAqYmVhY29uOwotCXU4ICpwX3BzcG9sbDsKKwl1OCAqcHNwb2xsOwogCXU4ICpudWxsZnVuYzsKLQl1OCAqcF9wcm9iZXJzcDsKKwl1OCAqcHJvYmVyc3A7CiAJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkJCQkoMSkgYmVhY29uCiAJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTcwMywxMCArNzE0LDEwIEBACiAJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJCQkJKDIpIHBzLXBvbGwKIAktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JcF9wc3BvbGwgPSAmcmVzZXJ2ZWRfcGFnZV9wYWNrZXRbUFNQT0xMX1BHICogMTI4XTsKLQlTRVRfODAyMTFfUFNfUE9MTF9BSUQocF9wc3BvbGwsIChtYWMtPmFzc29jX2lkIHwgMHhjMDAwKSk7Ci0JU0VUXzgwMjExX1BTX1BPTExfQlNTSUQocF9wc3BvbGwsIG1hYy0+YnNzaWQpOwotCVNFVF84MDIxMV9QU19QT0xMX1RBKHBfcHNwb2xsLCBtYWMtPm1hY19hZGRyKTsKKwlwc3BvbGwgPSAmcmVzZXJ2ZWRfcGFnZV9wYWNrZXRbUFNQT0xMX1BHICogMTI4XTsKKwlTRVRfODAyMTFfUFNfUE9MTF9BSUQocHNwb2xsLCAobWFjLT5hc3NvY19pZCB8IDB4YzAwMCkpOworCVNFVF84MDIxMV9QU19QT0xMX0JTU0lEKHBzcG9sbCwgbWFjLT5ic3NpZCk7CisJU0VUXzgwMjExX1BTX1BPTExfVEEocHNwb2xsLCBtYWMtPm1hY19hZGRyKTsKIAogCVNFVF9IMkNDTURfUlNWRFBBR0VfTE9DX1BTUE9MTCh1MVJzdmRQYWdlTG9jLCBQU1BPTExfUEcpOwogCkBAIC03MjMsMTAgKzczNCwxMCBAQAogCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJCQkJKDQpIHByb2JlIHJlc3BvbnNlCiAJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JcF9wcm9iZXJzcCA9ICZyZXNlcnZlZF9wYWdlX3BhY2tldFtQUk9CRVJTUF9QRyAqIDEyOF07Ci0JU0VUXzgwMjExX0hEUl9BRERSRVNTMShwX3Byb2JlcnNwLCBtYWMtPmJzc2lkKTsKLQlTRVRfODAyMTFfSERSX0FERFJFU1MyKHBfcHJvYmVyc3AsIG1hYy0+bWFjX2FkZHIpOwotCVNFVF84MDIxMV9IRFJfQUREUkVTUzMocF9wcm9iZXJzcCwgbWFjLT5ic3NpZCk7CisJcHJvYmVyc3AgPSAmcmVzZXJ2ZWRfcGFnZV9wYWNrZXRbUFJPQkVSU1BfUEcgKiAxMjhdOworCVNFVF84MDIxMV9IRFJfQUREUkVTUzEocHJvYmVyc3AsIG1hYy0+YnNzaWQpOworCVNFVF84MDIxMV9IRFJfQUREUkVTUzIocHJvYmVyc3AsIG1hYy0+bWFjX2FkZHIpOworCVNFVF84MDIxMV9IRFJfQUREUkVTUzMocHJvYmVyc3AsIG1hYy0+YnNzaWQpOwogCiAJU0VUX0gyQ0NNRF9SU1ZEUEFHRV9MT0NfUFJPQkVfUlNQKHUxUnN2ZFBhZ2VMb2MsIFBST0JFUlNQX1BHKTsKIApAQCAtNzQ0LDEyICs3NTUsMTIgQEAKIAltZW1jcHkoKHU4ICopIHNrYl9wdXQoc2tiLCB0b3RhbHBhY2tldGxlbiksCiAJICAgICAgICZyZXNlcnZlZF9wYWdlX3BhY2tldCwgdG90YWxwYWNrZXRsZW4pOwogCi0JcnRzdGF0dXMgPSBydGxwcml2LT5jZmctPm9wcy0+Y21kX3NlbmRfcGFja2V0KGh3LCBza2IpOworCXJ0c3RhdHVzID0gX3J0bDkyY19jbWRfc2VuZF9wYWNrZXQoaHcsIHNrYik7CiAKIAlpZiAocnRzdGF0dXMpCi0JCWJfZGxvayA9IHRydWU7CisJCWRsb2sgPSB0cnVlOwogCi0JaWYgKGJfZGxvaykgeworCWlmIChkbG9rKSB7CiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19MT1VELAogCQkJICgiU2V0IFJTVkQgcGFnZSBsb2NhdGlvbiB0byBGdy5cbiIpKTsKIAkJUlRfUFJJTlRfREFUQShydGxwcml2LCBDT01QX0NNRCwgREJHX0RNRVNHLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyYy9md19jb21tb24uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmMvZndfY29tbW9uLmgKaW5kZXggM2RiMzNiZC4uM2Q1ODIzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyYy9md19jb21tb24uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjL2Z3X2NvbW1vbi5oCkBAIC0yNyw4ICsyNyw4IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaWZuZGVmIF9fUlRMOTJDX19GV19fSF9fCi0jZGVmaW5lIF9fUlRMOTJDX19GV19fSF9fCisjaWZuZGVmIF9fUlRMOTJDX19GV19fQ09NTU9OX19IX18KKyNkZWZpbmUgX19SVEw5MkNfX0ZXX19DT01NT05fX0hfXwogCiAjZGVmaW5lIEZXXzgxOTJDX1NJWkUJCQkJMHgzMDAwCiAjZGVmaW5lIEZXXzgxOTJDX1NUQVJUX0FERFJFU1MJCQkweDEwMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmMvcGh5X2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyYy9waHlfY29tbW9uLmMKaW5kZXggYTcwMjI4Mi4uYzU0MjRjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyYy9waHlfY29tbW9uLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyYy9waHlfY29tbW9uLmMKQEAgLTc4LDI3ICs3OCwyOSBAQAogCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUkYsIERCR19UUkFDRSwgKCJyZWdhZGRyKCUjeCksIGJpdG1hc2soJSN4KSwiCiAJCQkJCSAgICAgICAiIGRhdGEoJSN4KVxuIiwgcmVnYWRkciwgYml0bWFzaywKIAkJCQkJICAgICAgIGRhdGEpKTsKKwogfQogRVhQT1JUX1NZTUJPTChydGw5MmNfcGh5X3NldF9iYl9yZWcpOwogCiB1MzIgX3J0bDkyY19waHlfZndfcmZfc2VyaWFsX3JlYWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCSBlbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgb2Zmc2V0KQorCQkJCSAgZW51bSByYWRpb19wYXRoIHJmcGF0aCwgdTMyIG9mZnNldCkKIHsKIAlSVF9BU1NFUlQoZmFsc2UsICgiZGVwcmVjYXRlZCFcbiIpKTsKIAlyZXR1cm4gMDsKKwogfQogRVhQT1JUX1NZTUJPTChfcnRsOTJjX3BoeV9md19yZl9zZXJpYWxfcmVhZCk7CiAKIHZvaWQgX3J0bDkyY19waHlfZndfcmZfc2VyaWFsX3dyaXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQkgICBlbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgb2Zmc2V0LAotCQkJCQkgICB1MzIgZGF0YSkKKwkJCQkgICAgZW51bSByYWRpb19wYXRoIHJmcGF0aCwgdTMyIG9mZnNldCwKKwkJCQkgICAgdTMyIGRhdGEpCiB7CiAJUlRfQVNTRVJUKGZhbHNlLCAoImRlcHJlY2F0ZWQhXG4iKSk7CiB9CiBFWFBPUlRfU1lNQk9MKF9ydGw5MmNfcGh5X2Z3X3JmX3NlcmlhbF93cml0ZSk7CiAKIHUzMiBfcnRsOTJjX3BoeV9yZl9zZXJpYWxfcmVhZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgICBlbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgb2Zmc2V0KQorCQkJICAgICAgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsIHUzMiBvZmZzZXQpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CkBAIC0xNDksOCArMTUxLDggQEAKIEVYUE9SVF9TWU1CT0woX3J0bDkyY19waHlfcmZfc2VyaWFsX3JlYWQpOwogCiB2b2lkIF9ydGw5MmNfcGh5X3JmX3NlcmlhbF93cml0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkJZW51bSByYWRpb19wYXRoIHJmcGF0aCwgdTMyIG9mZnNldCwKLQkJCQkJdTMyIGRhdGEpCisJCQkJIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsIHUzMiBvZmZzZXQsCisJCQkJIHUzMiBkYXRhKQogewogCXUzMiBkYXRhX2FuZF9hZGRyOwogCXUzMiBuZXdvZmZzZXQ7CkBAIC0xOTcsNiArMTk5LDcgQEAKIAlydGxfc2V0X2JicmVnKGh3LCAweGU4MCwgMHgwYzAwMDAwMCwgMHgyKTsKIAlydGxfc2V0X2JicmVnKGh3LCAweGU4OCwgMHgwYzAwMDAwMCwgMHgyKTsKIH0KKwogYm9vbCBydGw5MmNfcGh5X3JmX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CkBAIC0yNDEsMTMgKzI0NCwxNCBAQAogCXJ0bHBoeS0+Y2NrX2hpZ2hfcG93ZXIgPSAoYm9vbCkgKHJ0bF9nZXRfYmJyZWcoaHcsCiAJCQkJCQlSRlBHQTBfWEFfSFNTSVBBUkFNRVRFUjIsCiAJCQkJCQkweDIwMCkpOworCiAJcmV0dXJuIHRydWU7CiB9CiBFWFBPUlRfU1lNQk9MKF9ydGw5MmNfcGh5X2JiODE5MmNfY29uZmlnX3BhcmFmaWxlKTsKIAogdm9pZCBfcnRsOTJjX3N0b3JlX3B3ckluZGV4X2RpZmZyYXRlX29mZnNldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkJCSAgIHUzMiByZWdhZGRyLCB1MzIgYml0bWFzaywKLQkJCQkJCSAgIHUzMiBkYXRhKQorCQkJCQkgICAgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrLAorCQkJCQkgICAgdTMyIGRhdGEpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CkBAIC0zMTcsNjEgKzMyMSw0OCBAQAogCX0KIAlpZiAocmVnYWRkciA9PSBSVFhBR0NfQl9SQVRFNTRfMjQpIHsKIAkJcnRscGh5LT5NQ1NfVFhQV1JbcnRscGh5LT5wd3Jncm91cF9jbnRdWzldID0gZGF0YTsKLQogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19UUkFDRSwKIAkJCSAoIk1DU1R4UG93ZXJMZXZlbE9yaWdpbmFsT2Zmc2V0WyVkXVs5XSA9IDB4JXhcbiIsCiAJCQkgIHJ0bHBoeS0+cHdyZ3JvdXBfY250LAogCQkJICBydGxwaHktPk1DU19UWFBXUltydGxwaHktPnB3cmdyb3VwX2NudF1bOV0pKTsKIAl9Ci0KIAlpZiAocmVnYWRkciA9PSBSVFhBR0NfQl9DQ0sxXzU1X01DUzMyKSB7CiAJCXJ0bHBoeS0+TUNTX1RYUFdSW3J0bHBoeS0+cHdyZ3JvdXBfY250XVsxNF0gPSBkYXRhOwotCiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX1RSQUNFLAogCQkJICgiTUNTVHhQb3dlckxldmVsT3JpZ2luYWxPZmZzZXRbJWRdWzE0XSA9IDB4JXhcbiIsCiAJCQkgIHJ0bHBoeS0+cHdyZ3JvdXBfY250LAogCQkJICBydGxwaHktPk1DU19UWFBXUltydGxwaHktPnB3cmdyb3VwX2NudF1bMTRdKSk7CiAJfQotCiAJaWYgKHJlZ2FkZHIgPT0gUlRYQUdDX0JfQ0NLMTFfQV9DQ0syXzExICYmIGJpdG1hc2sgPT0gMHgwMDAwMDBmZikgewogCQlydGxwaHktPk1DU19UWFBXUltydGxwaHktPnB3cmdyb3VwX2NudF1bMTVdID0gZGF0YTsKLQogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19UUkFDRSwKIAkJCSAoIk1DU1R4UG93ZXJMZXZlbE9yaWdpbmFsT2Zmc2V0WyVkXVsxNV0gPSAweCV4XG4iLAogCQkJICBydGxwaHktPnB3cmdyb3VwX2NudCwKIAkJCSAgcnRscGh5LT5NQ1NfVFhQV1JbcnRscGh5LT5wd3Jncm91cF9jbnRdWzE1XSkpOwogCX0KLQogCWlmIChyZWdhZGRyID09IFJUWEFHQ19CX01DUzAzX01DUzAwKSB7CiAJCXJ0bHBoeS0+TUNTX1RYUFdSW3J0bHBoeS0+cHdyZ3JvdXBfY250XVsxMF0gPSBkYXRhOwotCiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX1RSQUNFLAogCQkJICgiTUNTVHhQb3dlckxldmVsT3JpZ2luYWxPZmZzZXRbJWRdWzEwXSA9IDB4JXhcbiIsCiAJCQkgIHJ0bHBoeS0+cHdyZ3JvdXBfY250LAogCQkJICBydGxwaHktPk1DU19UWFBXUltydGxwaHktPnB3cmdyb3VwX2NudF1bMTBdKSk7CiAJfQotCiAJaWYgKHJlZ2FkZHIgPT0gUlRYQUdDX0JfTUNTMDdfTUNTMDQpIHsKIAkJcnRscGh5LT5NQ1NfVFhQV1JbcnRscGh5LT5wd3Jncm91cF9jbnRdWzExXSA9IGRhdGE7Ci0KIAkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfVFJBQ0UsCiAJCQkgKCJNQ1NUeFBvd2VyTGV2ZWxPcmlnaW5hbE9mZnNldFslZF1bMTFdID0gMHgleFxuIiwKIAkJCSAgcnRscGh5LT5wd3Jncm91cF9jbnQsCiAJCQkgIHJ0bHBoeS0+TUNTX1RYUFdSW3J0bHBoeS0+cHdyZ3JvdXBfY250XVsxMV0pKTsKIAl9Ci0KIAlpZiAocmVnYWRkciA9PSBSVFhBR0NfQl9NQ1MxMV9NQ1MwOCkgewogCQlydGxwaHktPk1DU19UWFBXUltydGxwaHktPnB3cmdyb3VwX2NudF1bMTJdID0gZGF0YTsKLQogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19UUkFDRSwKIAkJCSAoIk1DU1R4UG93ZXJMZXZlbE9yaWdpbmFsT2Zmc2V0WyVkXVsxMl0gPSAweCV4XG4iLAogCQkJICBydGxwaHktPnB3cmdyb3VwX2NudCwKIAkJCSAgcnRscGh5LT5NQ1NfVFhQV1JbcnRscGh5LT5wd3Jncm91cF9jbnRdWzEyXSkpOwogCX0KLQogCWlmIChyZWdhZGRyID09IFJUWEFHQ19CX01DUzE1X01DUzEyKSB7CiAJCXJ0bHBoeS0+TUNTX1RYUFdSW3J0bHBoeS0+cHdyZ3JvdXBfY250XVsxM10gPSBkYXRhOwotCiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX1RSQUNFLAogCQkJICgiTUNTVHhQb3dlckxldmVsT3JpZ2luYWxPZmZzZXRbJWRdWzEzXSA9IDB4JXhcbiIsCiAJCQkgIHJ0bHBoeS0+cHdyZ3JvdXBfY250LApAQCAtNTgzLDYgKzU3NCw3IEBACiAKIAlydGxwaHktPmN1cl9jY2tfdHhwd3JpZHggPSBjY2twb3dlcmxldmVsWzBdOwogCXJ0bHBoeS0+Y3VyX29mZG0yNGdfdHhwd3JpZHggPSBvZmRtcG93ZXJsZXZlbFswXTsKKwogfQogCiB2b2lkIHJ0bDkyY19waHlfc2V0X3R4cG93ZXJfbGV2ZWwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGNoYW5uZWwpCkBAIC02MTEsNyArNjAzLDYgQEAKIAlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOwogCXU4IGlkeDsKIAl1OCByZl9wYXRoOwotCiAJdTggY2NrdHhwd3JpZHggPSBfcnRsOTJjX3BoeV9kYm1fdG9fdHhwd3JfSWR4KGh3LAogCQkJCQkJICAgICAgV0lSRUxFU1NfTU9ERV9CLAogCQkJCQkJICAgICAgcG93ZXJfaW5kYm0pOwpAQCAtNjM5LDExICs2MzAsNiBAQAogfQogRVhQT1JUX1NZTUJPTChydGw5MmNfcGh5X3VwZGF0ZV90eHBvd2VyX2RibSk7CiAKLXZvaWQgcnRsOTJjX3BoeV9zZXRfYmVhY29uX2h3X3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IGJlYWNvbmludGVydmFsKQotewotfQotRVhQT1JUX1NZTUJPTChydGw5MmNfcGh5X3NldF9iZWFjb25faHdfcmVnKTsKLQogdTggX3J0bDkyY19waHlfZGJtX3RvX3R4cHdyX0lkeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQllbnVtIHdpcmVsZXNzX21vZGUgd2lyZWxlc3Ntb2RlLAogCQkJCWxvbmcgcG93ZXJfaW5kYm0pCkBAIC03NDEsOSArNzI3LDkgQEAKIAlpZiAocnRscGh5LT5zZXRfYndtb2RlX2lucHJvZ3Jlc3MpCiAJCXJldHVybjsKIAlydGxwaHktPnNldF9id21vZGVfaW5wcm9ncmVzcyA9IHRydWU7Ci0JaWYgKCghaXNfaGFsX3N0b3AocnRsaGFsKSkgJiYgIShSVF9DQU5OT1RfSU8oaHcpKSkKLQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnBoeV9zZXRfYndfbW9kZV9jYWxsYmFjayhodyk7Ci0JZWxzZSB7CisJaWYgKCghaXNfaGFsX3N0b3AocnRsaGFsKSkgJiYgIShSVF9DQU5OT1RfSU8oaHcpKSkgeworCQlydGxwaHktPnNldF9id21vZGVfaW5wcm9ncmVzcyA9IGZhbHNlOworCX0gZWxzZSB7CiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfV0FSTklORywKIAkJCSAoIkZBTFNFIGRyaXZlciBzbGVlcCBvciB1bmxvYWRcbiIpKTsKIAkJcnRscGh5LT5zZXRfYndtb2RlX2lucHJvZ3Jlc3MgPSBmYWxzZTsKQEAgLTc3Myw4ICs3NTksOSBAQAogCQkJCW1kZWxheShkZWxheSk7CiAJCQllbHNlCiAJCQkJY29udGludWU7Ci0JCX0gZWxzZQorCQl9IGVsc2UgewogCQkJcnRscGh5LT5zd19jaG5sX2lucHJvZ3Jlc3MgPSBmYWxzZTsKKwkJfQogCQlicmVhazsKIAl9IHdoaWxlICh0cnVlKTsKIAlSVF9UUkFDRShydGxwcml2LCBDT01QX1NDQU4sIERCR19UUkFDRSwgKCI8PT1cbiIpKTsKQEAgLTgxMSw5ICs3OTgsMzIgQEAKIH0KIEVYUE9SVF9TWU1CT0wocnRsOTJjX3BoeV9zd19jaG5sKTsKIAotc3RhdGljIGJvb2wgX3J0bDkyY19waHlfc3dfY2hubF9zdGVwX2J5X3N0ZXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCSAgICAgdTggY2hhbm5lbCwgdTggKnN0YWdlLCB1OCAqc3RlcCwKLQkJCQkJICAgICB1MzIgKmRlbGF5KQorc3RhdGljIGJvb2wgX3J0bDkyY19waHlfc2V0X3N3X2NobmxfY21kYXJyYXkoc3RydWN0IHN3Y2hubGNtZCAqY21kdGFibGUsCisJCQkJCSAgICAgdTMyIGNtZHRhYmxlaWR4LCB1MzIgY21kdGFibGVzeiwKKwkJCQkJICAgICBlbnVtIHN3Y2hubGNtZF9pZCBjbWRpZCwKKwkJCQkJICAgICB1MzIgcGFyYTEsIHUzMiBwYXJhMiwgdTMyIG1zZGVsYXkpCit7CisJc3RydWN0IHN3Y2hubGNtZCAqcGNtZDsKKworCWlmIChjbWR0YWJsZSA9PSBOVUxMKSB7CisJCVJUX0FTU0VSVChmYWxzZSwgKCJjbWR0YWJsZSBjYW5ub3QgYmUgTlVMTC5cbiIpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChjbWR0YWJsZWlkeCA+PSBjbWR0YWJsZXN6KQorCQlyZXR1cm4gZmFsc2U7CisKKwlwY21kID0gY21kdGFibGUgKyBjbWR0YWJsZWlkeDsKKwlwY21kLT5jbWRpZCA9IGNtZGlkOworCXBjbWQtPnBhcmExID0gcGFyYTE7CisJcGNtZC0+cGFyYTIgPSBwYXJhMjsKKwlwY21kLT5tc2RlbGF5ID0gbXNkZWxheTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBfcnRsOTJjX3BoeV9zd19jaG5sX3N0ZXBfYnlfc3RlcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICB1OCBjaGFubmVsLCB1OCAqc3RhZ2UsIHU4ICpzdGVwLAorCQkJCSAgICAgIHUzMiAqZGVsYXkpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CkBAIC05MTcsMjkgKzkyNyw2IEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbCBfcnRsOTJjX3BoeV9zZXRfc3dfY2hubF9jbWRhcnJheShzdHJ1Y3Qgc3djaG5sY21kICpjbWR0YWJsZSwKLQkJCQkJICAgICB1MzIgY21kdGFibGVpZHgsIHUzMiBjbWR0YWJsZXN6LAotCQkJCQkgICAgIGVudW0gc3djaG5sY21kX2lkIGNtZGlkLAotCQkJCQkgICAgIHUzMiBwYXJhMSwgdTMyIHBhcmEyLCB1MzIgbXNkZWxheSkKLXsKLQlzdHJ1Y3Qgc3djaG5sY21kICpwY21kOwotCi0JaWYgKGNtZHRhYmxlID09IE5VTEwpIHsKLQkJUlRfQVNTRVJUKGZhbHNlLCAoImNtZHRhYmxlIGNhbm5vdCBiZSBOVUxMLlxuIikpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JaWYgKGNtZHRhYmxlaWR4ID49IGNtZHRhYmxlc3opCi0JCXJldHVybiBmYWxzZTsKLQotCXBjbWQgPSBjbWR0YWJsZSArIGNtZHRhYmxlaWR4OwotCXBjbWQtPmNtZGlkID0gY21kaWQ7Ci0JcGNtZC0+cGFyYTEgPSBwYXJhMTsKLQlwY21kLT5wYXJhMiA9IHBhcmEyOwotCXBjbWQtPm1zZGVsYXkgPSBtc2RlbGF5OwotCXJldHVybiB0cnVlOwotfQotCiBib29sIHJ0bDgxOTJfcGh5X2NoZWNrX2lzX2xlZ2FsX3JmcGF0aChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHJmcGF0aCkKIHsKIAlyZXR1cm4gdHJ1ZTsKQEAgLTEwMDIsMTMgKzk4OSwxMyBAQAogCXJlZ19lYmMgPSBydGxfZ2V0X2JicmVnKGh3LCAweGViYywgTUFTS0RXT1JEKTsKIAlyZWdfZWM0ID0gcnRsX2dldF9iYnJlZyhodywgMHhlYzQsIE1BU0tEV09SRCk7CiAJcmVnX2VjYyA9IHJ0bF9nZXRfYmJyZWcoaHcsIDB4ZWNjLCBNQVNLRFdPUkQpOworCiAJaWYgKCEocmVnX2VhYyAmIEJJVCgzMSkpICYmCiAJICAgICgoKHJlZ19lYjQgJiAweDAzRkYwMDAwKSA+PiAxNikgIT0gMHgxNDIpICYmCiAJICAgICgoKHJlZ19lYmMgJiAweDAzRkYwMDAwKSA+PiAxNikgIT0gMHg0MikpCiAJCXJlc3VsdCB8PSAweDAxOwogCWVsc2UKIAkJcmV0dXJuIHJlc3VsdDsKLQogCWlmICghKHJlZ19lYWMgJiBCSVQoMzApKSAmJgogCSAgICAoKChyZWdfZWM0ICYgMHgwM0ZGMDAwMCkgPj4gMTYpICE9IDB4MTMyKSAmJgogCSAgICAoKChyZWdfZWNjICYgMHgwM0ZGMDAwMCkgPj4gMTYpICE9IDB4MzYpKQpAQCAtMTAyMyw5ICsxMDEwLDkgQEAKIAl1MzIgb2xkdmFsXzAsIHgsIHR4MF9hLCByZWc7CiAJbG9uZyB5LCB0eDBfYzsKIAotCWlmIChmaW5hbF9jYW5kaWRhdGUgPT0gMHhGRikKKwlpZiAoZmluYWxfY2FuZGlkYXRlID09IDB4RkYpIHsKIAkJcmV0dXJuOwotCWVsc2UgaWYgKGlxa19vaykgeworCX0gZWxzZSBpZiAoaXFrX29rKSB7CiAJCW9sZHZhbF8wID0gKHJ0bF9nZXRfYmJyZWcoaHcsIFJPRkRNMF9YQVRYSVFJTUJBTEFOQ0UsCiAJCQkJCSAgTUFTS0RXT1JEKSA+PiAyMikgJiAweDNGRjsKIAkJeCA9IHJlc3VsdFtmaW5hbF9jYW5kaWRhdGVdWzBdOwpAQCAtMTA2Myw5ICsxMDUwLDkgQEAKIAl1MzIgb2xkdmFsXzEsIHgsIHR4MV9hLCByZWc7CiAJbG9uZyB5LCB0eDFfYzsKIAotCWlmIChmaW5hbF9jYW5kaWRhdGUgPT0gMHhGRikKKwlpZiAoZmluYWxfY2FuZGlkYXRlID09IDB4RkYpIHsKIAkJcmV0dXJuOwotCWVsc2UgaWYgKGlxa19vaykgeworCX0gZWxzZSBpZiAoaXFrX29rKSB7CiAJCW9sZHZhbF8xID0gKHJ0bF9nZXRfYmJyZWcoaHcsIFJPRkRNMF9YQlRYSVFJTUJBTEFOQ0UsCiAJCQkJCSAgTUFTS0RXT1JEKSA+PiAyMikgJiAweDNGRjsKIAkJeCA9IHJlc3VsdFtmaW5hbF9jYW5kaWRhdGVdWzRdOwpAQCAtMTI4Miw2ICsxMjY5LDcgQEAKIAkJCQkJCSAgIFJGUEdBMF9YQV9IU1NJUEFSQU1FVEVSMSwKIAkJCQkJCSAgIEJJVCg4KSk7CiAJfQorCiAJaWYgKCFydGxwaHktPnJmcGlfZW5hYmxlKQogCQlfcnRsOTJjX3BoeV9waV9tb2RlX3N3aXRjaChodywgdHJ1ZSk7CiAJaWYgKHQgPT0gMCkgewpAQCAtMTMxNyw5ICsxMzA1LDEwIEBACiAJCQkJCTB4M0ZGMDAwMCkgPj4gMTY7CiAJCQlicmVhazsKIAkJfSBlbHNlIGlmIChpID09IChyZXRyeWNvdW50IC0gMSkgJiYgcGF0aGFfb2sgPT0gMHgwMSkKKwogCQkJcmVzdWx0W3RdWzBdID0gKHJ0bF9nZXRfYmJyZWcoaHcsIDB4ZTk0LAogCQkJCQkJICAgICAgTUFTS0RXT1JEKSAmIDB4M0ZGMDAwMCkgPj4KLQkJCQkJCSAgICAgIDE2OworCQkJICAgIDE2OwogCQlyZXN1bHRbdF1bMV0gPQogCQkgICAgKHJ0bF9nZXRfYmJyZWcoaHcsIDB4ZTljLCBNQVNLRFdPUkQpICYgMHgzRkYwMDAwKSA+PiAxNjsKIApAQCAtMTM3NSw4ICsxMzY0LDcgQEAKIHN0YXRpYyB2b2lkIF9ydGw5MmNfcGh5X2FwX2NhbGlicmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICAgIGNoYXIgZGVsdGEsIGJvb2wgaXMydCkKIHsKLQkvKiBUaGlzIHJvdXRpbmUgaXMgZGVsaWJlcmF0ZWx5IGR1bW1pZWQgb3V0IGZvciBsYXRlciBmaXhlcyAqLwotI2lmIDAKKyNpZiAwIC8qIFRoaXMgcm91dGluZSBpcyBkZWxpYmVyYXRlbHkgZHVtbWllZCBvdXQgZm9yIGxhdGVyIGZpeGVzICovCiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CiAJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKQEAgLTE0MzQsNyArMTQyMiw3IEBACiAJCTB4MDRkYjI1YTQsIDB4MGIxYjI1YTQKIAl9OwogCi0JdTMyIGFwa19vZmZzZXRbUEFUSF9OVU1dID0geyAweGI2OCwgMHhiNmMgfTsKKwljb25zdCB1MzIgYXBrX29mZnNldFtQQVRIX05VTV0gPSB7IDB4YjY4LCAweGI2YyB9OwogCiAJdTMyIGFwa19ub3JtYWxfb2Zmc2V0W1BBVEhfTlVNXSA9IHsgMHhiMjgsIDB4Yjk4IH07CiAKQEAgLTE0NjMsMTMgKzE0NTEsMTUgQEAKIAkJMHgwMDA1MDAwNgogCX07CiAKLQljb25zdCB1MzIgYXBrX3Jlc3VsdFtQQVRIX05VTV1bQVBLX0JCX1JFR19OVU1dOworCXUzMiBhcGtfcmVzdWx0W1BBVEhfTlVNXVtBUEtfQkJfUkVHX05VTV07CiAKIAlsb25nIGJiX29mZnNldCwgZGVsdGFfdiwgZGVsdGFfb2Zmc2V0OwogCiAJaWYgKCFpczJ0KQogCQlwYXRoYm91bmQgPSAxOwogCisJcmV0dXJuOworCiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgUEFUSF9OVU07IGluZGV4KyspIHsKIAkJYXBrX29mZnNldFtpbmRleF0gPSBhcGtfbm9ybWFsX29mZnNldFtpbmRleF07CiAJCWFwa192YWx1ZVtpbmRleF0gPSBhcGtfbm9ybWFsX3ZhbHVlW2luZGV4XTsKQEAgLTE3MzAsOCArMTcyMCw3IEBACiAJCQkgICAgICAgMHgwOCkpOwogCiAJfQotCi0JcnRscGh5LT5hcGtfZG9uZSA9IHRydWU7CisJcnRscGh5LT5iX2Fwa19kb25lID0gdHJ1ZTsKICNlbmRpZgogfQogCkBAIC0xNzU4LDYgKzE3NDcsNyBAQAogCQkJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX1hBX1JGSU5URVJGQUNFT0UsIDB4MzAwLCAweDEpOwogCiAJfQorCiB9CiAKICN1bmRlZiBJUUtfQUREQV9SRUdfTlVNCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjL3BoeV9jb21tb24uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmMvcGh5X2NvbW1vbi5oCmluZGV4IDUzZmZiMDkuLjlhMjY0YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmMvcGh5X2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmMvcGh5X2NvbW1vbi5oCkBAIC0yNyw4ICsyNyw4IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaWZuZGVmIF9fUlRMOTJDX1BIWV9IX18KLSNkZWZpbmUgX19SVEw5MkNfUEhZX0hfXworI2lmbmRlZiBfX1JUTDkyQ19QSFlfQ09NTU9OX0hfXworI2RlZmluZSBfX1JUTDkyQ19QSFlfQ09NTU9OX0hfXwogCiAjZGVmaW5lIE1BWF9QUkVDTURfQ05UCQkJMTYKICNkZWZpbmUgTUFYX1JGREVQRU5EQ01EX0NOVAkJMTYKQEAgLTM5LDYgKzM5LDcgQEAKICNkZWZpbmUgUlRfQ0FOTk9UX0lPKGh3KQkJZmFsc2UKICNkZWZpbmUgSElHSFBPV0VSX1JBRElPQV9BUlJBWUxFTgkyMgogCisjZGVmaW5lIElRS19BRERBX1JFR19OVU0JCTE2CiAjZGVmaW5lIE1BWF9UT0xFUkFOQ0UJCQk1CiAjZGVmaW5lCUlRS19ERUxBWV9USU1FCQkJMQogCkBAIC01Niw2ICs1Nyw3IEBACiAjZGVmaW5lIElRS19BRERBX1JFR19OVU0JCTE2CiAjZGVmaW5lIElRS19NQUNfUkVHX05VTQkJCTQKIAorI2RlZmluZSBJUUtfREVMQVlfVElNRQkJCTEKICNkZWZpbmUgUkY5MF9QQVRIX01BWAkJCTIKIAogI2RlZmluZSBDVF9PRkZTRVRfTUFDX0FERFIJCTBYMTYKQEAgLTc3LDYgKzc5LDcgQEAKIAogI2RlZmluZSBSVEw5MkNfTUFYX1BBVEhfTlVNCQkyCiAjZGVmaW5lIExMVF9MQVNUX0VOVFJZX09GX1RYX1BLVF9CVUZGRVIJMjU1CisKIGVudW0gc3djaG5sY21kX2lkIHsKIAlDTURJRF9FTkQsCiAJQ01ESURfU0VUX1RYUE9XRVJPV0VSX0xFVkVMLApAQCAtMTg0LDQ1ICsxODcsNDEgQEAKIAl1MzIgbWNzX29yaWdpbmFsX29mZnNldFs0XVsxNl07CiB9OwogCi1leHRlcm4gdTMyIHJ0bDkyY19waHlfcXVlcnlfYmJfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAordTMyIHJ0bDkyY19waHlfcXVlcnlfYmJfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgIHUzMiByZWdhZGRyLCB1MzIgYml0bWFzayk7Ci1leHRlcm4gdm9pZCBydGw5MmNfcGh5X3NldF9iYl9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCit2b2lkIHJ0bDkyY19waHlfc2V0X2JiX3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgIHUzMiByZWdhZGRyLCB1MzIgYml0bWFzaywgdTMyIGRhdGEpOwotZXh0ZXJuIHUzMiBydGw5MmNfcGh5X3F1ZXJ5X3JmX3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKK3UzMiBydGw5MmNfcGh5X3F1ZXJ5X3JmX3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICBlbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgcmVnYWRkciwKIAkJCQkgICB1MzIgYml0bWFzayk7Ci1leHRlcm4gdm9pZCBydGw5MmNfcGh5X3NldF9yZl9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICBlbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgcmVnYWRkciwKLQkJCQkgIHUzMiBiaXRtYXNrLCB1MzIgZGF0YSk7Ci1leHRlcm4gYm9vbCBydGw5MmNfcGh5X21hY19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwotZXh0ZXJuIGJvb2wgcnRsOTJjX3BoeV9iYl9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwotZXh0ZXJuIGJvb2wgcnRsOTJjX3BoeV9yZl9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwotZXh0ZXJuIGJvb2wgcnRsOTJjX3BoeV9jb25maWdfcmZfd2l0aF9mZWFkZXJmaWxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorYm9vbCBydGw5MmNfcGh5X21hY19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworYm9vbCBydGw5MmNfcGh5X2JiX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Citib29sIHJ0bDkyY19waHlfcmZfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK2Jvb2wgcnRsOTJjX3BoeV9jb25maWdfcmZfd2l0aF9mZWFkZXJmaWxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCQkJIGVudW0gcmFkaW9fcGF0aCByZnBhdGgpOwotZXh0ZXJuIHZvaWQgcnRsOTJjX3BoeV9nZXRfaHdfcmVnX29yaWdpbmFsdmFsdWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwotZXh0ZXJuIHZvaWQgcnRsOTJjX3BoeV9nZXRfdHhwb3dlcl9sZXZlbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKK3ZvaWQgcnRsOTJjX3BoeV9nZXRfaHdfcmVnX29yaWdpbmFsdmFsdWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MmNfcGh5X2dldF90eHBvd2VyX2xldmVsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCQkgbG9uZyAqcG93ZXJsZXZlbCk7Ci1leHRlcm4gdm9pZCBydGw5MmNfcGh5X3NldF90eHBvd2VyX2xldmVsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBjaGFubmVsKTsKLWV4dGVybiBib29sIHJ0bDkyY19waHlfdXBkYXRlX3R4cG93ZXJfZGJtKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAordm9pZCBydGw5MmNfcGh5X3NldF90eHBvd2VyX2xldmVsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBjaGFubmVsKTsKK2Jvb2wgcnRsOTJjX3BoeV91cGRhdGVfdHhwb3dlcl9kYm0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSAgbG9uZyBwb3dlcl9pbmRibSk7Ci1leHRlcm4gdm9pZCBydGw5MmNfcGh5X3NjYW5fb3BlcmF0aW9uX2JhY2t1cChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKK3ZvaWQgcnRsOTJjX3BoeV9zY2FuX29wZXJhdGlvbl9iYWNrdXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSAgICAgdTggb3BlcmF0aW9uKTsKLWV4dGVybiB2b2lkIHJ0bDkyY19waHlfc2V0X2J3X21vZGVfY2FsbGJhY2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwotZXh0ZXJuIHZvaWQgcnRsOTJjX3BoeV9zZXRfYndfbW9kZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKK3ZvaWQgcnRsOTJjX3BoeV9zZXRfYndfbW9kZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoX3R5cGUpOwotZXh0ZXJuIHZvaWQgcnRsOTJjX3BoeV9zd19jaG5sX2NhbGxiYWNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKLWV4dGVybiB1OCBydGw5MmNfcGh5X3N3X2Nobmwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwotZXh0ZXJuIHZvaWQgcnRsOTJjX3BoeV9pcV9jYWxpYnJhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgYl9yZWNvdmVyeSk7Ci1leHRlcm4gdm9pZCBydGw5MmNfcGh5X3NldF9iZWFjb25faHdfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAordm9pZCBydGw5MmNfcGh5X3N3X2NobmxfY2FsbGJhY2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordTggcnRsOTJjX3BoeV9zd19jaG5sKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJjX3BoeV9pcV9jYWxpYnJhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgYl9yZWNvdmVyeSk7Cit2b2lkIHJ0bDkyY19waHlfc2V0X2JlYWNvbl9od19yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSB1MTYgYmVhY29uaW50ZXJ2YWwpOwogdm9pZCBydGw5MmNfcGh5X2FwX2NhbGlicmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgY2hhciBkZWx0YSk7CiB2b2lkIHJ0bDkyY19waHlfbGNfY2FsaWJyYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHZvaWQgcnRsOTJjX3BoeV9zZXRfcmZwYXRoX3N3aXRjaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBibWFpbik7CiBib29sIHJ0bDkyY19waHlfY29uZmlnX3JmX3dpdGhfaGVhZGVyZmlsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkJICBlbnVtIHJhZGlvX3BhdGggcmZwYXRoKTsKLWV4dGVybiBib29sIHJ0bDgxOTJfcGh5X2NoZWNrX2lzX2xlZ2FsX3JmcGF0aChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKK2Jvb2wgcnRsODE5Ml9waHlfY2hlY2tfaXNfbGVnYWxfcmZwYXRoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCQkgICAgICB1MzIgcmZwYXRoKTsKLWV4dGVybiBib29sIHJ0bDkyY19waHlfc2V0X3JmX3Bvd2VyX3N0YXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorYm9vbCBydGw5MmNfcGh5X3NldF9yZl9wb3dlcl9zdGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkJICBlbnVtIHJmX3B3cnN0YXRlIHJmcHdyX3N0YXRlKTsKIHZvaWQgcnRsOTJjZV9waHlfc2V0X3JmX29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHZvaWQgcnRsOTJjX3BoeV9zZXRfaW8oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwpAQCAtMjM1LDEyICsyMzQsMjUgQEAKIAkJCQllbnVtIHdpcmVsZXNzX21vZGUgd2lyZWxlc3Ntb2RlLAogCQkJCWxvbmcgcG93ZXJfaW5kYm0pOwogdm9pZCBfcnRsOTJjX3BoeV9pbml0X2JiX3JmX3JlZ2lzdGVyX2RlZmluaXRpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwotc3RhdGljIGJvb2wgX3J0bDkyY19waHlfc2V0X3N3X2NobmxfY21kYXJyYXkoc3RydWN0IHN3Y2hubGNtZCAqY21kdGFibGUsCi0JCQkJCSAgICAgdTMyIGNtZHRhYmxlaWR4LCB1MzIgY21kdGFibGVzeiwKLQkJCQkJICAgICBlbnVtIHN3Y2hubGNtZF9pZCBjbWRpZCwgdTMyIHBhcmExLAotCQkJCQkgICAgIHUzMiBwYXJhMiwgdTMyIG1zZGVsYXkpOwotc3RhdGljIGJvb2wgX3J0bDkyY19waHlfc3dfY2hubF9zdGVwX2J5X3N0ZXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCSAgICAgdTggY2hhbm5lbCwgdTggKnN0YWdlLCB1OCAqc3RlcCwKLQkJCQkJICAgICB1MzIgKmRlbGF5KTsKK3ZvaWQgX3J0bDkyY19waHlfc2V0X3JmX3NsZWVwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK2Jvb2wgX3J0bDkyY19waHlfc3dfY2hubF9zdGVwX2J5X3N0ZXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgdTggY2hhbm5lbCwgdTggKnN0YWdlLCB1OCAqc3RlcCwKKwkJCQkgICAgICB1MzIgKmRlbGF5KTsKK3U4IHJ0bDkyY19idF9yc3NpX3N0YXRlX2NoYW5nZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit1MzIgX3J0bDkyY19waHlfZndfcmZfc2VyaWFsX3JlYWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICBlbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgb2Zmc2V0KTsKK3ZvaWQgX3J0bDkyY19waHlfZndfcmZfc2VyaWFsX3dyaXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICBlbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgb2Zmc2V0LAorCQkJCSAgICB1MzIgZGF0YSk7Cit1MzIgX3J0bDkyY19waHlfcmZfc2VyaWFsX3JlYWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgICAgZW51bSByYWRpb19wYXRoIHJmcGF0aCwgdTMyIG9mZnNldCk7Cit2b2lkIF9ydGw5MmNfcGh5X3JmX3NlcmlhbF93cml0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgZW51bSByYWRpb19wYXRoIHJmcGF0aCwgdTMyIG9mZnNldCwKKwkJCQkgdTMyIGRhdGEpOworYm9vbCBfcnRsOTJjX3BoeV9iYjgxOTJjX2NvbmZpZ19wYXJhZmlsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIF9ydGw5MmNfc3RvcmVfcHdySW5kZXhfZGlmZnJhdGVfb2Zmc2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICAgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrLAorCQkJCQkgICAgdTMyIGRhdGEpOworYm9vbCBydGw5MmNfcGh5X3NldF9pb19jbWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gaW9fdHlwZSBpb3R5cGUpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2RlZi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvZGVmLmgKaW5kZXggMmY1NzdjOC4uMzVmZjdkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvZGVmLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvZGVmLmgKQEAgLTEyMSwxOSArMTIxLDYgQEAKICNkZWZpbmUgQ0hJUF85MkMJCQkweDAxCiAjZGVmaW5lIENISVBfODhDCQkJMHgwMAogCi0vKiBBZGQgdmVuZG9yIGluZm9ybWF0aW9uIGludG8gY2hpcCB2ZXJzaW9uIGRlZmluaXRpb24uCi0gKiBBZGQgVU1DIEItQ3V0IGFuZCBSVEw4NzIzIGNoaXAgaW5mbyBkZWZpbml0aW9uLgotICoKLSAqIEJJVCA3CVJlc2VydmVkCi0gKiBCSVQgNglVTUMgQkN1dAotICogQklUIDUJTWFudWZhY3R1cmVyKFRTTUMvVU1DKQotICogQklUIDQJVEVTVC9OT1JNQUwKLSAqIEJJVCAzCTg3MjMgVmVyc2lvbgotICogQklUIDIJODcyMz8KLSAqIEJJVCAxCTFUMlI/Ci0gKiBCSVQgMAk4OEMvOTJDCi0qLwotCiBlbnVtIHZlcnNpb25fODE5MmMgewogCVZFUlNJT05fQV9DSElQXzkyQyA9IDB4MDEsCiAJVkVSU0lPTl9BX0NISVBfODhDID0gMHgwMCwKQEAgLTI4MCwyMCArMjY3LDYgQEAKIAl1OCAqcF9jbWRidWZmZXI7CiB9OwogCi1zdGF0aWMgaW5saW5lIHU4IF9ydGw5MmNfZ2V0X2NobmxfZ3JvdXAodTggY2hubCkKLXsKLQl1OCBncm91cCA9IDA7Ci0KLQlpZiAoY2hubCA8IDMpCi0JCWdyb3VwID0gMDsKLQllbHNlIGlmIChjaG5sIDwgOSkKLQkJZ3JvdXAgPSAxOwotCWVsc2UKLQkJZ3JvdXAgPSAyOwotCi0JcmV0dXJuIGdyb3VwOwotfQotCiAvKiBOT1RFOiByZWZlcmVuY2UgdG8gcnRsODE5MmNfcmF0ZXMgc3RydWN0ICovCiBzdGF0aWMgaW5saW5lIGludCBfcnRsOTJjX3JhdGVfbWFwcGluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBpc0hULAogCQkJCSAgICAgICB1OCBkZXNjX3JhdGUsIGJvb2wgZmlyc3RfYW1wZHUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9kbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvZG0uYwppbmRleCA3ZDc2NTA0Li4yZGYzM2U1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9kbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2RtLmMKQEAgLTI5LDEwICsyOSwxMiBAQAogCiAjaW5jbHVkZSAiLi4vd2lmaS5oIgogI2luY2x1ZGUgIi4uL2Jhc2UuaCIKKyNpbmNsdWRlICIuLi9wY2kuaCIKICNpbmNsdWRlICJyZWcuaCIKICNpbmNsdWRlICJkZWYuaCIKICNpbmNsdWRlICJwaHkuaCIKICNpbmNsdWRlICJkbS5oIgorI2luY2x1ZGUgIi4uL3J0bDgxOTJjL2Z3X2NvbW1vbi5oIgogCiB2b2lkIHJ0bDkyY2VfZG1fZHluYW1pY190eHBvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvZG0uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2RtLmgKaW5kZXggMzYzMDJlYi4uMDdkZDk1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvZG0uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9kbS5oCkBAIC0xOTIsNiArMTkyLDcgQEAKIHZvaWQgcnRsOTJjX2RtX2NoZWNrX3R4cG93ZXJfdHJhY2tpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBydGw5MmNfZG1faW5pdF9yYXRlX2FkYXB0aXZlX21hc2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBydGw5MmNfZG1fcmZfc2F2aW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBiZm9yY2VfaW5fbm9ybWFsKTsKK3ZvaWQgcnRsOTJjX2RtX2J0X2NvZXhpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBydGw5MmNlX2RtX2R5bmFtaWNfdHhwb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2h3LmMKaW5kZXggMDU0NzdmNC4uNGE1NjEzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9ody5jCkBAIC0zMCwxMiArMzAsMTQgQEAKICNpbmNsdWRlICIuLi93aWZpLmgiCiAjaW5jbHVkZSAiLi4vZWZ1c2UuaCIKICNpbmNsdWRlICIuLi9iYXNlLmgiCisjaW5jbHVkZSAiLi4vcmVnZC5oIgogI2luY2x1ZGUgIi4uL2NhbS5oIgogI2luY2x1ZGUgIi4uL3BzLmgiCiAjaW5jbHVkZSAiLi4vcGNpLmgiCiAjaW5jbHVkZSAicmVnLmgiCiAjaW5jbHVkZSAiZGVmLmgiCiAjaW5jbHVkZSAicGh5LmgiCisjaW5jbHVkZSAiLi4vcnRsODE5MmMvZndfY29tbW9uLmgiCiAjaW5jbHVkZSAiZG0uaCIKICNpbmNsdWRlICJsZWQuaCIKICNpbmNsdWRlICJody5oIgpAQCAtMTM3LDE1ICsxMzksNiBAQAogCiAJCWJyZWFrOwogCQl9Ci0JY2FzZSBIV19WQVJfTUdUX0ZJTFRFUjoKLQkJKigodTE2ICopICh2YWwpKSA9IHJ0bF9yZWFkX3dvcmQocnRscHJpdiwgUkVHX1JYRkxUTUFQMCk7Ci0JCWJyZWFrOwotCWNhc2UgSFdfVkFSX0NUUkxfRklMVEVSOgotCQkqKCh1MTYgKikgKHZhbCkpID0gcnRsX3JlYWRfd29yZChydGxwcml2LCBSRUdfUlhGTFRNQVAxKTsKLQkJYnJlYWs7Ci0JY2FzZSBIV19WQVJfREFUQV9GSUxURVI6Ci0JCSooKHUxNiAqKSAodmFsKSkgPSBydGxfcmVhZF93b3JkKHJ0bHByaXYsIFJFR19SWEZMVE1BUDIpOwotCQlicmVhazsKIAlkZWZhdWx0OgogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAogCQkJICgic3dpdGNoIGNhc2Ugbm90IHByb2Nlc3NcbiIpKTsKQEAgLTE1Niw2ICsxNDksNyBAQAogdm9pZCBydGw5MmNlX3NldF9od19yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHZhcmlhYmxlLCB1OCAqdmFsKQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpydGxwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOwogCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CiAJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKIAlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOwpAQCAtMTc4LDcgKzE3Miw3IEBACiAJCQlyYXRlX2NmZyB8PSAweDAxOwogCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1JSU1IsIHJhdGVfY2ZnICYgMHhmZik7CiAJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfUlJTUiArIDEsCi0JCQkJICAgICAgIChyYXRlX2NmZyA+PiA4KSYweGZmKTsKKwkJCQkgICAgICAgKHJhdGVfY2ZnID4+IDgpICYgMHhmZik7CiAJCQl3aGlsZSAocmF0ZV9jZmcgPiAweDEpIHsKIAkJCQlyYXRlX2NmZyA9IChyYXRlX2NmZyA+PiAxKTsKIAkJCQlyYXRlX2luZGV4Kys7CkBAIC0yNzYsMTMgKzI3MCwxOSBAQAogCQkJYnJlYWs7CiAJCX0KIAljYXNlIEhXX1ZBUl9BTVBEVV9GQUNUT1I6ewotCQkJdTggcmVndG9zZXRfbm9ybWFsWzRdID0geyAweDQxLCAweGE4LCAweDcyLCAweGI5IH07CisJCQl1OCByZWd0b3NldF9ub3JtYWxbNF0gPSB7MHg0MSwgMHhhOCwgMHg3MiwgMHhiOX07CisJCQl1OCByZWd0b3NldF9idFs0XSA9IHsweDMxLCAweDc0LCAweDQyLCAweDk3fTsKIAogCQkJdTggZmFjdG9yX3Rvc2V0OwogCQkJdTggKnBfcmVndG9zZXQgPSBOVUxMOwogCQkJdTggaW5kZXggPSAwOwogCi0JCQlwX3JlZ3Rvc2V0ID0gcmVndG9zZXRfbm9ybWFsOworCQkJaWYgKChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2NvZXhpc3RlbmNlKSAmJgorCQkJICAgIChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2NvZXhpc3RfdHlwZSA9PQorCQkJICAgIEJUX0NTUl9CQzQpKQorCQkJCXBfcmVndG9zZXQgPSByZWd0b3NldF9idDsKKwkJCWVsc2UKKwkJCQlwX3JlZ3Rvc2V0ID0gcmVndG9zZXRfbm9ybWFsOwogCiAJCQlmYWN0b3JfdG9zZXQgPSAqKCh1OCAqKSB2YWwpOwogCQkJaWYgKGZhY3Rvcl90b3NldCA8PSAzKSB7CkBAIC0zMTcsNDUgKzMxNyw3IEBACiAJCX0KIAljYXNlIEhXX1ZBUl9BQ19QQVJBTTp7CiAJCQl1OCBlX2FjaSA9ICooKHU4ICopIHZhbCk7Ci0JCQl1MzIgdTRiX2FjX3BhcmFtOwotCQkJdTE2IGN3X21pbiA9IGxlMTZfdG9fY3B1KG1hYy0+YWNbZV9hY2ldLmN3X21pbik7Ci0JCQl1MTYgY3dfbWF4ID0gbGUxNl90b19jcHUobWFjLT5hY1tlX2FjaV0uY3dfbWF4KTsKLQkJCXUxNiB0eF9vcCA9IGxlMTZfdG9fY3B1KG1hYy0+YWNbZV9hY2ldLnR4X29wKTsKLQotCQkJdTRiX2FjX3BhcmFtID0gKHUzMikgbWFjLT5hY1tlX2FjaV0uYWlmczsKLQkJCXU0Yl9hY19wYXJhbSB8PSAoKHUzMiljd19taW4KLQkJCQkJICYgMHhGKSA8PCBBQ19QQVJBTV9FQ1dfTUlOX09GRlNFVDsKLQkJCXU0Yl9hY19wYXJhbSB8PSAoKHUzMiljd19tYXggJgotCQkJCQkgMHhGKSA8PCBBQ19QQVJBTV9FQ1dfTUFYX09GRlNFVDsKLQkJCXU0Yl9hY19wYXJhbSB8PSAodTMyKXR4X29wIDw8IEFDX1BBUkFNX1RYT1BfT0ZGU0VUOwotCi0JCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01MTUUsIERCR19MT1VELAotCQkJCSAoInF1ZXVlOiV4LCBhY19wYXJhbToleFxuIiwgZV9hY2ksCi0JCQkJICB1NGJfYWNfcGFyYW0pKTsKLQotCQkJc3dpdGNoIChlX2FjaSkgewotCQkJY2FzZSBBQzFfQks6Ci0JCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19FRENBX0JLX1BBUkFNLAotCQkJCQkJdTRiX2FjX3BhcmFtKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQUMwX0JFOgotCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfRURDQV9CRV9QQVJBTSwKLQkJCQkJCXU0Yl9hY19wYXJhbSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFDMl9WSToKLQkJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0VEQ0FfVklfUEFSQU0sCi0JCQkJCQl1NGJfYWNfcGFyYW0pOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBQzNfVk86Ci0JCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19FRENBX1ZPX1BBUkFNLAotCQkJCQkJdTRiX2FjX3BhcmFtKTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJUlRfQVNTRVJUKGZhbHNlLAotCQkJCSAgKCJTZXRId1JlZzgxODUoKTogaW52YWxpZCBhY2k6ICVkICFcbiIsCi0JCQkJICAgZV9hY2kpKTsKLQkJCQlicmVhazsKLQkJCX0KKwkJCXJ0bDkyY19kbV9pbml0X2VkY2FfdHVyYm8oaHcpOwogCiAJCQlpZiAocnRscGNpLT5hY21fbWV0aG9kICE9IGVBY21XYXkyX1NXKQogCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LApAQCAtNTI2LDkgKzQ4OCw2IEBACiAJY2FzZSBIV19WQVJfQ09SUkVDVF9UU0Y6ewogCQkJdTggYnR5cGVfaWJzcyA9ICgodTggKikgKHZhbCkpWzBdOwogCi0JCQkvKmJ0eXBlX2lic3MgPSAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpID8KLQkJCQkJMSA6IDA7Ki8KLQogCQkJaWYgKGJ0eXBlX2lic3MgPT0gdHJ1ZSkKIAkJCQlfcnRsOTJjZV9zdG9wX3R4X2JlYWNvbihodyk7CiAKQEAgLTUzNyw3ICs0OTYsNyBAQAogCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19UU0ZUUiwKIAkJCQkJKHUzMikgKG1hYy0+dHNmICYgMHhmZmZmZmZmZikpOwogCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19UU0ZUUiArIDQsCi0JCQkJCSh1MzIpICgobWFjLT50c2YgPj4gMzIpJjB4ZmZmZmZmZmYpKTsKKwkJCQkJKHUzMikgKChtYWMtPnRzZiA+PiAzMikgJiAweGZmZmZmZmZmKSk7CiAKIAkJCV9ydGw5MmNlX3NldF9iY25fY3RybF9yZWcoaHcsIEJJVCgzKSwgMCk7CiAKQEAgLTU0NywxNSArNTA2LDYgQEAKIAkJCWJyZWFrOwogCiAJCX0KLQljYXNlIEhXX1ZBUl9NR1RfRklMVEVSOgotCQlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfUlhGTFRNQVAwLCAqKHUxNiAqKSB2YWwpOwotCQlicmVhazsKLQljYXNlIEhXX1ZBUl9DVFJMX0ZJTFRFUjoKLQkJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVHX1JYRkxUTUFQMSwgKih1MTYgKikgdmFsKTsKLQkJYnJlYWs7Ci0JY2FzZSBIV19WQVJfREFUQV9GSUxURVI6Ci0JCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19SWEZMVE1BUDIsICoodTE2ICopIHZhbCk7Ci0JCWJyZWFrOwogCWRlZmF1bHQ6CiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsICgic3dpdGNoIGNhc2UgIgogCQkJCQkJCSJub3QgcHJvY2Vzc1xuIikpOwpAQCAtNjc5LDEyICs2MjksMTIgQEAKIAkJcnRsOTJjZV9zd19sZWRfb24oaHcsIHBMZWQwKTsKIAllbHNlCiAJCXJ0bDkyY2Vfc3dfbGVkX29mZihodywgcExlZDApOwotCiB9CiAKIHN0YXRpYyBib29sIF9ydGw5MmNlX2luaXRfbWFjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpydGxwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOwogCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CiAJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKIApAQCAtNjkzLDkgKzY0MywyMiBAQAogCXUxNiByZXRyeTsKIAogCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19SU1ZfQ1RSTCwgMHgwMCk7CisJaWYgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfY29leGlzdGVuY2UpIHsKKwkJdTMyIHZhbHVlMzI7CisJCXZhbHVlMzIgPSBydGxfcmVhZF9kd29yZChydGxwcml2LCBSRUdfQVBTX0ZTTUNPKTsKKwkJdmFsdWUzMiB8PSAoU09QX0FCRyB8IFNPUF9BTUIgfCBYT1BfQlRDSyk7CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfQVBTX0ZTTUNPLCB2YWx1ZTMyKTsKKwl9CiAJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NQUzBfQ1RSTCwgMHgyYik7CiAJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0FGRV9YVEFMX0NUUkwsIDB4MEYpOwogCisJaWYgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfY29leGlzdGVuY2UpIHsKKwkJdTMyIHU0Yl90bXAgPSBydGxfcmVhZF9kd29yZChydGxwcml2LCBSRUdfQUZFX1hUQUxfQ1RSTCk7CisKKwkJdTRiX3RtcCAmPSAofjB4MDAwMjQ4MDApOworCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0FGRV9YVEFMX0NUUkwsIHU0Yl90bXApOworCX0KKwogCWJ5dGV0bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19BUFNfRlNNQ08gKyAxKSB8IEJJVCgwKTsKIAl1ZGVsYXkoMik7CiAKQEAgLTcyNiw2ICs2ODksMTEgQEAKIAlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfU1lTX0lTT19DVFJMICsgMSwgMHg4Mik7CiAJdWRlbGF5KDIpOwogCisJaWYgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfY29leGlzdGVuY2UpIHsKKwkJYnl0ZXRtcCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHX0FGRV9YVEFMX0NUUkwrMikgJiAweGZkOworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQUZFX1hUQUxfQ1RSTCsyLCBieXRldG1wKTsKKwl9CisKIAlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfQ1IsIDB4MmZmKTsKIAogCWlmIChfcnRsOTJjZV9sbHRfdGFibGVfaW5pdChodykgPT0gZmFsc2UpCkBAIC03OTMsNiArNzYxLDcgQEAKIHsKIAlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOwogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpydGxwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOwogCXU4IHJlZ19id19vcG1vZGU7CiAJdTMyIHJlZ19yYXRyLCByZWdfcHJzcjsKIApAQCAtODI0LDcgKzc5MywxMSBAQAogCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfUkFSRlJDLCAweDAxMDAwMDAwKTsKIAlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX1JBUkZSQyArIDQsIDB4MDcwNjA1MDQpOwogCi0JcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19BR0dMRU5fTE1ULCAweGI5NzJhODQxKTsKKwlpZiAoKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfY29leGlzdGVuY2UpICYmCisJICAgIChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2NvZXhpc3RfdHlwZSA9PSBCVF9DU1JfQkM0KSkKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19BR0dMRU5fTE1ULCAweDk3NDI3NDMxKTsKKwllbHNlCisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfQUdHTEVOX0xNVCwgMHhiOTcyYTg0MSk7CiAKIAlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQVRJTVdORCwgMHgyKTsKIApAQCAtODQwLDExICs4MTMsMjAgQEAKIAlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfUElGUywgMHgxQyk7CiAJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0FHR1JfQlJFQUtfVElNRSwgMHgxNik7CiAKLQlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfTkFWX1BST1RfTEVOLCAweDAwMjApOworCWlmICgocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9jb2V4aXN0ZW5jZSkgJiYKKwkgICAgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfY29leGlzdF90eXBlID09IEJUX0NTUl9CQzQpKSB7CisJCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19OQVZfUFJPVF9MRU4sIDB4MDAyMCk7CisJCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19QUk9UX01PREVfQ1RSTCwgMHgwNDAyKTsKKwl9IGVsc2UgeworCQlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfTkFWX1BST1RfTEVOLCAweDAwMjApOworCQlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfTkFWX1BST1RfTEVOLCAweDAwMjApOworCX0KIAotCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19OQVZfUFJPVF9MRU4sIDB4MDAyMCk7Ci0KLQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0ZBU1RfRURDQV9DVFJMLCAweDA4NjY2Nik7CisJaWYgKChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2NvZXhpc3RlbmNlKSAmJgorCSAgICAgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfY29leGlzdF90eXBlID09IEJUX0NTUl9CQzQpKQorCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0ZBU1RfRURDQV9DVFJMLCAweDAzMDg2NjY2KTsKKwllbHNlCisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfRkFTVF9FRENBX0NUUkwsIDB4MDg2NjY2KTsKIAogCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BQ0tUTywgMHg0MCk7CiAKQEAgLTk0OCw4ICs5MzAsOCBAQAogCX0KIAogCXJ0bGhhbC0+bGFzdF9obWVib3hudW0gPSAwOwotCXJ0bDkyY2VfcGh5X21hY19jb25maWcoaHcpOwotCXJ0bDkyY2VfcGh5X2JiX2NvbmZpZyhodyk7CisJcnRsOTJjX3BoeV9tYWNfY29uZmlnKGh3KTsKKwlydGw5MmNfcGh5X2JiX2NvbmZpZyhodyk7CiAJcnRscGh5LT5yZl9tb2RlID0gUkZfT1BfQllfU1dfM1dJUkU7CiAJcnRsOTJjX3BoeV9yZl9jb25maWcoaHcpOwogCXJ0bHBoeS0+cmZyZWdfY2hubHZhbFswXSA9IHJ0bF9nZXRfcmZyZWcoaHcsIChlbnVtIHJhZGlvX3BhdGgpMCwKQEAgLTk2MiwxNSArOTQ0LDIwIEBACiAJX3J0bDkyY2VfaHdfY29uZmlndXJlKGh3KTsKIAlydGxfY2FtX3Jlc2V0X2FsbF9lbnRyeShodyk7CiAJcnRsOTJjZV9lbmFibGVfaHdfc2VjdXJpdHlfY29uZmlnKGh3KTsKKwogCXBwc2MtPnJmcHdyX3N0YXRlID0gRVJGT047CisKIAlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX0VUSEVSX0FERFIsIG1hYy0+bWFjX2FkZHIpOwogCV9ydGw5MmNlX2VuYWJsZV9hc3BtX2JhY2tfZG9vcihodyk7CiAJcnRscHJpdi0+aW50Zl9vcHMtPmVuYWJsZV9hc3BtKGh3KTsKKworCXJ0bDgxOTJjZV9idF9od19pbml0KGh3KTsKKwogCWlmIChwcHNjLT5yZnB3cl9zdGF0ZSA9PSBFUkZPTikgewogCQlydGw5MmNfcGh5X3NldF9yZnBhdGhfc3dpdGNoKGh3LCAxKTsKLQkJaWYgKGlxa19pbml0aWFsaXplZCkKKwkJaWYgKGlxa19pbml0aWFsaXplZCkgewogCQkJcnRsOTJjX3BoeV9pcV9jYWxpYnJhdGUoaHcsIHRydWUpOwotCQllbHNlIHsKKwkJfSBlbHNlIHsKIAkJCXJ0bDkyY19waHlfaXFfY2FsaWJyYXRlKGh3LCBmYWxzZSk7CiAJCQlpcWtfaW5pdGlhbGl6ZWQgPSB0cnVlOwogCQl9CkBAIC0xMTI4LDc1ICsxMTE1LDYyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9ydGw5MmNlX3NldF9jaGVja19ic3NpZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSkKK3ZvaWQgcnRsOTJjZV9zZXRfY2hlY2tfYnNzaWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgY2hlY2tfYnNzaWQpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXUzMiByZWdfcmNyID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgUkVHX1JDUik7Ci0JdTggZmlsdGVyb3V0X25vbl9hc3NvY2lhdGVkX2Jzc2lkID0gZmFsc2U7CiAKLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgotCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQkJZmlsdGVyb3V0X25vbl9hc3NvY2lhdGVkX2Jzc2lkID0gdHJ1ZTsKLQkJYnJlYWs7Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRDoKLQljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KKwlpZiAocnRscHJpdi0+cHNjLnJmcHdyX3N0YXRlICE9IEVSRk9OKQorCQlyZXR1cm47CiAKLQlpZiAoZmlsdGVyb3V0X25vbl9hc3NvY2lhdGVkX2Jzc2lkID09IHRydWUpIHsKKwlpZiAoY2hlY2tfYnNzaWQgPT0gdHJ1ZSkgewogCQlyZWdfcmNyIHw9IChSQ1JfQ0JTU0lEX0RBVEEgfCBSQ1JfQ0JTU0lEX0JDTik7CiAJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfUkNSLAogCQkJCQkgICAgICAodTggKikgKCZyZWdfcmNyKSk7CiAJCV9ydGw5MmNlX3NldF9iY25fY3RybF9yZWcoaHcsIDAsIEJJVCg0KSk7Ci0JfSBlbHNlIGlmIChmaWx0ZXJvdXRfbm9uX2Fzc29jaWF0ZWRfYnNzaWQgPT0gZmFsc2UpIHsKKwl9IGVsc2UgaWYgKGNoZWNrX2Jzc2lkID09IGZhbHNlKSB7CiAJCXJlZ19yY3IgJj0gKH4oUkNSX0NCU1NJRF9EQVRBIHwgUkNSX0NCU1NJRF9CQ04pKTsKIAkJX3J0bDkyY2Vfc2V0X2Jjbl9jdHJsX3JlZyhodywgQklUKDQpLCAwKTsKIAkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsCiAJCQkJCSAgICAgIEhXX1ZBUl9SQ1IsICh1OCAqKSAoJnJlZ19yY3IpKTsKIAl9CisKIH0KIAogaW50IHJ0bDkyY2Vfc2V0X25ldHdvcmtfdHlwZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlKQogeworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwogCWlmIChfcnRsOTJjZV9zZXRfbWVkaWFfc3RhdHVzKGh3LCB0eXBlKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCV9ydGw5MmNlX3NldF9jaGVja19ic3NpZChodywgdHlwZSk7CisKKwlpZiAocnRscHJpdi0+bWFjODAyMTEubGlua19zdGF0ZSA9PSBNQUM4MDIxMV9MSU5LRUQpIHsKKwkJaWYgKHR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApCisJCQlydGw5MmNlX3NldF9jaGVja19ic3NpZChodywgdHJ1ZSk7CisJfSBlbHNlIHsKKwkJcnRsOTJjZV9zZXRfY2hlY2tfYnNzaWQoaHcsIGZhbHNlKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIAorLyogZG9uJ3Qgc2V0IFJFR19FRENBX0JFX1BBUkFNIGhlcmUgYmVjYXVzZSBtYWM4MDIxMSB3aWxsIHNlbmQgcGt0IHdoZW4gc2NhbiAqLwogdm9pZCBydGw5MmNlX3NldF9xb3Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBhY2kpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwotCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7Ci0JdTMyIHU0Yl9hY19wYXJhbTsKLQl1MTYgY3dfbWluID0gbGUxNl90b19jcHUobWFjLT5hY1thY2ldLmN3X21pbik7Ci0JdTE2IGN3X21heCA9IGxlMTZfdG9fY3B1KG1hYy0+YWNbYWNpXS5jd19tYXgpOwotCXUxNiB0eF9vcCA9IGxlMTZfdG9fY3B1KG1hYy0+YWNbYWNpXS50eF9vcCk7Ci0KIAlydGw5MmNfZG1faW5pdF9lZGNhX3R1cmJvKGh3KTsKLQl1NGJfYWNfcGFyYW0gPSAodTMyKSBtYWMtPmFjW2FjaV0uYWlmczsKLQl1NGJfYWNfcGFyYW0gfD0gKHUzMikgKChjd19taW4gJiAweEYpIDw8IEFDX1BBUkFNX0VDV19NSU5fT0ZGU0VUKTsKLQl1NGJfYWNfcGFyYW0gfD0gKHUzMikgKChjd19tYXggJiAweEYpIDw8IEFDX1BBUkFNX0VDV19NQVhfT0ZGU0VUKTsKLQl1NGJfYWNfcGFyYW0gfD0gKHUzMikgKHR4X29wIDw8IEFDX1BBUkFNX1RYT1BfT0ZGU0VUKTsKLQlSVF9UUkFDRShydGxwcml2LCBDT01QX1FPUywgREJHX0RNRVNHLAotCQkgKCJxdWV1ZToleCwgYWNfcGFyYW06JXggYWlmczoleCBjd21pbjoleCBjd21heDoleCB0eG9wOiV4XG4iLAotCQkgIGFjaSwgdTRiX2FjX3BhcmFtLCBtYWMtPmFjW2FjaV0uYWlmcywgY3dfbWluLAotCQkgIGN3X21heCwgdHhfb3ApKTsKIAlzd2l0Y2ggKGFjaSkgewogCWNhc2UgQUMxX0JLOgotCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0VEQ0FfQktfUEFSQU0sIHU0Yl9hY19wYXJhbSk7CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfRURDQV9CS19QQVJBTSwgMHhhNDRmKTsKIAkJYnJlYWs7CiAJY2FzZSBBQzBfQkU6Ci0JCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfRURDQV9CRV9QQVJBTSwgdTRiX2FjX3BhcmFtKTsKKwkJLyogcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19FRENBX0JFX1BBUkFNLCB1NGJfYWNfcGFyYW0pOyAqLwogCQlicmVhazsKIAljYXNlIEFDMl9WSToKLQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19FRENBX1ZJX1BBUkFNLCB1NGJfYWNfcGFyYW0pOworCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0VEQ0FfVklfUEFSQU0sIDB4NWU0MzIyKTsKIAkJYnJlYWs7CiAJY2FzZSBBQzNfVk86Ci0JCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfRURDQV9WT19QQVJBTSwgdTRiX2FjX3BhcmFtKTsKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19FRENBX1ZPX1BBUkFNLCAweDJmMzIyMik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCVJUX0FTU0VSVChmYWxzZSwgKCJpbnZhbGlkIGFjaTogJWQgIVxuIiwgYWNpKSk7CkBAIC0xMjI3LDggKzEyMDEsMTAgQEAKIHN0YXRpYyB2b2lkIF9ydGw5MmNlX3Bvd2Vyb2ZmX2FkYXB0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpX3ByaXYgKnJ0bHBjaXByaXYgPSBydGxfcGNpcHJpdihodyk7CiAJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKIAl1OCB1MWJfdG1wOworCXUzMiB1NGJfdG1wOwogCiAJcnRscHJpdi0+aW50Zl9vcHMtPmVuYWJsZV9hc3BtKGh3KTsKIAlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfVFhQQVVTRSwgMHhGRik7CkBAIC0xMjQzLDEzICsxMjE5LDI3IEBACiAJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX01DVUZXREwsIDB4MDApOwogCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfR1BJT19QSU5fQ1RSTCwgMHgwMDAwMDAwMCk7CiAJdTFiX3RtcCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHX0dQSU9fUElOX0NUUkwpOwotCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfR1BJT19QSU5fQ1RSTCwgMHgwMEZGMDAwMCB8Ci0JCQkodTFiX3RtcCA8PCA4KSk7CisJaWYgKChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2NvZXhpc3RlbmNlKSAmJgorCSAgICAgKChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2NvZXhpc3RfdHlwZSA9PSBCVF9DU1JfQkM0KSB8fAorCSAgICAgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfY29leGlzdF90eXBlID09IEJUX0NTUl9CQzgpKSkgeworCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0dQSU9fUElOX0NUUkwsIDB4MDBGMzAwMDAgfAorCQkJCSh1MWJfdG1wIDw8IDgpKTsKKwl9IGVsc2UgeworCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0dQSU9fUElOX0NUUkwsIDB4MDBGRjAwMDAgfAorCQkJCSh1MWJfdG1wIDw8IDgpKTsKKwl9CiAJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVHX0dQSU9fSU9fU0VMLCAweDA3OTApOwogCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19MRURDRkcwLCAweDgwODApOwogCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BRkVfUExMX0NUUkwsIDB4ODApOwogCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TUFMwX0NUUkwsIDB4MjMpOwotCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BRkVfWFRBTF9DVFJMLCAweDBlKTsKKwlpZiAocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9jb2V4aXN0ZW5jZSkgeworCQl1NGJfdG1wID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgUkVHX0FGRV9YVEFMX0NUUkwpOworCQl1NGJfdG1wIHw9IDB4MDM4MjQ4MDA7CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfQUZFX1hUQUxfQ1RSTCwgdTRiX3RtcCk7CisJfSBlbHNlIHsKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19BRkVfWFRBTF9DVFJMLCAweDBlKTsKKwl9CisKIAlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfUlNWX0NUUkwsIDB4MGUpOwogCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BUFNfRlNNQ08gKyAxLCAweDEwKTsKIH0KQEAgLTEzMjcsNiArMTMxNyw3IEBACiAKIAlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOVFIsIERCR19MT1VELAogCQkgKCJhZGRfbXNyOiV4LCBybV9tc3I6JXhcbiIsIGFkZF9tc3IsIHJtX21zcikpOworCiAJaWYgKGFkZF9tc3IpCiAJCXJ0bHBjaS0+aXJxX21hc2tbMF0gfD0gYWRkX21zcjsKIAlpZiAocm1fbXNyKQpAQCAtMTU4Miw3ICsxNTczLDcgQEAKIAkJCSAoIlJUTDgxOVggTm90IGJvb3QgZnJvbSBlZXByb20sIGNoZWNrIGl0ICEhIikpOwogCX0KIAotCVJUX1BSSU5UX0RBVEEocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwgKCJNQVBcbiIpLAorCVJUX1BSSU5UX0RBVEEocnRscHJpdiwgQ09NUF9JTklULCBEQkdfRE1FU0csICgiTUFQXG4iKSwKIAkJICAgICAgaHdpbmZvLCBIV1NFVF9NQVhfU0laRSk7CiAKIAllZXByb21faWQgPSAqKCh1MTYgKikmaHdpbmZvWzBdKTsKQEAgLTE2MTAsNiArMTYwMSwxMCBAQAogCQkJCQkgICAgIHJ0bGVmdXNlLT5hdXRvbG9hZF9mYWlsZmxhZywKIAkJCQkJICAgICBod2luZm8pOwogCisJcnRsODE5MmNlX3JlYWRfYnRfY29leGlzdF9pbmZvX2Zyb21faHdwZyhodywKKwkJCQkJCSBydGxlZnVzZS0+YXV0b2xvYWRfZmFpbGZsYWcsCisJCQkJCQkgaHdpbmZvKTsKKwogCXJ0bGVmdXNlLT5lZXByb21fY2hhbm5lbHBsYW4gPSAqKHU4ICopJmh3aW5mb1tFRVBST01fQ0hBTk5FTFBMQU5dOwogCXJ0bGVmdXNlLT5lZXByb21fdmVyc2lvbiA9ICoodTE2ICopJmh3aW5mb1tFRVBST01fVkVSU0lPTl07CiAJcnRsZWZ1c2UtPnR4cHdyX2Zyb21lcHJvbSA9IHRydWU7CkBAIC0xNjE4LDYgKzE2MTMsOSBAQAogCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0xPVUQsCiAJCSAoIkVFUFJPTSBDdXN0b21lciBJRDogMHglMnhcbiIsIHJ0bGVmdXNlLT5lZXByb21fb2VtaWQpKTsKIAorCS8qIHNldCBjaGFubmVsIHBhbG4gdG8gd29ybGQgd2lkZSAxMyAqLworCXJ0bGVmdXNlLT5jaGFubmVsX3BsYW4gPSBDT1VOVFJZX0NPREVfV09STERfV0lERV8xMzsKKwogCWlmIChydGxoYWwtPm9lbV9pZCA9PSBSVF9DSURfREVGQVVMVCkgewogCQlzd2l0Y2ggKHJ0bGVmdXNlLT5lZXByb21fb2VtaWQpIHsKIAkJY2FzZSBFRVBST01fQ0lEX0RFRkFVTFQ6CkBAIC0xNzAxLDMwICsxNjk5LDM2IEBACiAJfSBlbHNlIHsKIAkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywgKCJBdXRvbG9hZCBFUlIhIVxuIikpOwogCX0KLQogCV9ydGw5MmNlX2hhbF9jdXN0b21pemVkX2JlaGF2aW9yKGh3KTsKIH0KIAotdm9pZCBydGw5MmNlX3VwZGF0ZV9oYWxfcmF0ZV90YWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3N0YXRpYyB2b2lkIHJ0bDkyY2VfdXBkYXRlX2hhbF9yYXRlX3RhYmxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpydGxwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOwogCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CiAJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKLQotCXUzMiByYXRyX3ZhbHVlID0gKHUzMikgbWFjLT5iYXNpY19yYXRlczsKLQl1OCAqbWNzcmF0ZSA9IG1hYy0+bWNzOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJdTMyIHJhdHJfdmFsdWU7CiAJdTggcmF0cl9pbmRleCA9IDA7CiAJdTggbm1vZGUgPSBtYWMtPmh0X2VuYWJsZTsKLQl1OCBtaW1vX3BzID0gMTsKKwl1OCBtaW1vX3BzID0gSUVFRTgwMjExX1NNUFNfT0ZGOwogCXUxNiBzaG9ydGdpX3JhdGU7CiAJdTMyIHRtcF9yYXRyX3ZhbHVlOwogCXU4IGN1cnR4YndfNDBtaHogPSBtYWMtPmJ3XzQwOwotCXU4IGN1cnNob3J0Z2lfNDBtaHogPSBtYWMtPnNnaV80MDsKLQl1OCBjdXJzaG9ydGdpXzIwbWh6ID0gbWFjLT5zZ2lfMjA7CisJdTggY3Vyc2hvcnRnaV80MG1oeiA9IChzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NHSV80MCkgPworCQkJICAgICAgIDEgOiAwOworCXU4IGN1cnNob3J0Z2lfMjBtaHogPSAoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TR0lfMjApID8KKwkJCSAgICAgICAxIDogMDsKIAllbnVtIHdpcmVsZXNzX21vZGUgd2lyZWxlc3Ntb2RlID0gbWFjLT5tb2RlOwogCi0JcmF0cl92YWx1ZSB8PSAoKCoodTE2ICopIChtY3NyYXRlKSkpIDw8IDEyOwotCisJaWYgKHJ0bGhhbC0+Y3VycmVudF9iYW5kdHlwZSA9PSBCQU5EX09OXzVHKQorCQlyYXRyX3ZhbHVlID0gc3RhLT5zdXBwX3JhdGVzWzFdIDw8IDQ7CisJZWxzZQorCQlyYXRyX3ZhbHVlID0gc3RhLT5zdXBwX3JhdGVzWzBdOworCXJhdHJfdmFsdWUgfD0gKHN0YS0+aHRfY2FwLm1jcy5yeF9tYXNrWzFdIDw8IDIwIHwKKwkJCXN0YS0+aHRfY2FwLm1jcy5yeF9tYXNrWzBdIDw8IDEyKTsKIAlzd2l0Y2ggKHdpcmVsZXNzbW9kZSkgewogCWNhc2UgV0lSRUxFU1NfTU9ERV9COgogCQlpZiAocmF0cl92YWx1ZSAmIDB4MDAwMDAwMGMpCkBAIC0xNzM4LDcgKzE3NDIsNyBAQAogCWNhc2UgV0lSRUxFU1NfTU9ERV9OXzI0RzoKIAljYXNlIFdJUkVMRVNTX01PREVfTl81RzoKIAkJbm1vZGUgPSAxOwotCQlpZiAobWltb19wcyA9PSAwKSB7CisJCWlmIChtaW1vX3BzID09IElFRUU4MDIxMV9TTVBTX1NUQVRJQykgewogCQkJcmF0cl92YWx1ZSAmPSAweDAwMDdGMDA1OwogCQl9IGVsc2UgewogCQkJdTMyIHJhdHJfbWFzazsKQEAgLTE3NjEsMTAgKzE3NjUsMTkgQEAKIAkJYnJlYWs7CiAJfQogCi0JcmF0cl92YWx1ZSAmPSAweDBGRkZGRkZGOworCWlmICgocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9jb2V4aXN0ZW5jZSkgJiYKKwkgICAgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfY29leGlzdF90eXBlID09IEJUX0NTUl9CQzQpICYmCisJICAgIChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2N1cl9zdGF0ZSkgJiYKKwkgICAgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfYW50X2lzb2xhdGlvbikgJiYKKwkgICAgKChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X3NlcnZpY2UgPT0gQlRfU0NPKSB8fAorCSAgICAocnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9zZXJ2aWNlID09IEJUX0JVU1kpKSkKKwkJcmF0cl92YWx1ZSAmPSAweDBmZmZjZmMwOworCWVsc2UKKwkJcmF0cl92YWx1ZSAmPSAweDBGRkZGRkZGOwogCi0JaWYgKG5tb2RlICYmICgoY3VydHhid180MG1oeiAmJiBjdXJzaG9ydGdpXzQwbWh6KSB8fCAoIWN1cnR4YndfNDBtaHogJiYKLQkJICAgICAgIGN1cnNob3J0Z2lfMjBtaHopKSkgeworCWlmIChubW9kZSAmJiAoKGN1cnR4YndfNDBtaHogJiYKKwkJCSBjdXJzaG9ydGdpXzQwbWh6KSB8fCAoIWN1cnR4YndfNDBtaHogJiYKKwkJCQkJICAgICAgIGN1cnNob3J0Z2lfMjBtaHopKSkgewogCiAJCXJhdHJfdmFsdWUgfD0gMHgxMDAwMDAwMDsKIAkJdG1wX3JhdHJfdmFsdWUgPSAocmF0cl92YWx1ZSA+PiAxMik7CkBAIC0xNzg0LDI0ICsxNzk3LDQyIEBACiAJCSAoIiV4XG4iLCBydGxfcmVhZF9kd29yZChydGxwcml2LCBSRUdfQVJGUjApKSk7CiB9CiAKLXZvaWQgcnRsOTJjZV91cGRhdGVfaGFsX3JhdGVfbWFzayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggcnNzaV9sZXZlbCkKK3N0YXRpYyB2b2lkIHJ0bDkyY2VfdXBkYXRlX2hhbF9yYXRlX21hc2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHU4IHJzc2lfbGV2ZWwpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CiAJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKLQl1MzIgcmF0cl9iaXRtYXAgPSAodTMyKSBtYWMtPmJhc2ljX3JhdGVzOwotCXU4ICpwX21jc3JhdGUgPSBtYWMtPm1jczsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfc3RhX2luZm8gKnN0YV9lbnRyeSA9IE5VTEw7CisJdTMyIHJhdHJfYml0bWFwOwogCXU4IHJhdHJfaW5kZXg7Ci0JdTggY3VydHhid180MG1oeiA9IG1hYy0+YndfNDA7Ci0JdTggY3Vyc2hvcnRnaV80MG1oeiA9IG1hYy0+c2dpXzQwOwotCXU4IGN1cnNob3J0Z2lfMjBtaHogPSBtYWMtPnNnaV8yMDsKLQllbnVtIHdpcmVsZXNzX21vZGUgd2lyZWxlc3Ntb2RlID0gbWFjLT5tb2RlOworCXU4IGN1cnR4YndfNDBtaHogPSAoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDApCisJCQkJPyAxIDogMDsKKwl1OCBjdXJzaG9ydGdpXzQwbWh6ID0gKHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwKSA/CisJCQkJMSA6IDA7CisJdTggY3Vyc2hvcnRnaV8yMG1oeiA9IChzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMCkgPworCQkJCTEgOiAwOworCWVudW0gd2lyZWxlc3NfbW9kZSB3aXJlbGVzc21vZGUgPSAwOwogCWJvb2wgc2hvcnRnaSA9IGZhbHNlOwogCXU4IHJhdGVfbWFza1s1XTsKIAl1OCBtYWNpZCA9IDA7Ci0JdTggbWltb3BzID0gMTsKKwl1OCBtaW1vX3BzID0gSUVFRTgwMjExX1NNUFNfT0ZGOwogCi0JcmF0cl9iaXRtYXAgfD0gKHBfbWNzcmF0ZVsxXSA8PCAyMCkgfCAocF9tY3NyYXRlWzBdIDw8IDEyKTsKKwlzdGFfZW50cnkgPSAoc3RydWN0IHJ0bF9zdGFfaW5mbyAqKSBzdGEtPmRydl9wcml2OworCXdpcmVsZXNzbW9kZSA9IHN0YV9lbnRyeS0+d2lyZWxlc3NfbW9kZTsKKwlpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJY3VydHhid180MG1oeiA9IG1hYy0+YndfNDA7CisJZWxzZSBpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkJbWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCW1hY2lkID0gc3RhLT5haWQgKyAxOworCisJaWYgKHJ0bGhhbC0+Y3VycmVudF9iYW5kdHlwZSA9PSBCQU5EX09OXzVHKQorCQlyYXRyX2JpdG1hcCA9IHN0YS0+c3VwcF9yYXRlc1sxXSA8PCA0OworCWVsc2UKKwkJcmF0cl9iaXRtYXAgPSBzdGEtPnN1cHBfcmF0ZXNbMF07CisJcmF0cl9iaXRtYXAgfD0gKHN0YS0+aHRfY2FwLm1jcy5yeF9tYXNrWzFdIDw8IDIwIHwKKwkJCXN0YS0+aHRfY2FwLm1jcy5yeF9tYXNrWzBdIDw8IDEyKTsKIAlzd2l0Y2ggKHdpcmVsZXNzbW9kZSkgewogCWNhc2UgV0lSRUxFU1NfTU9ERV9COgogCQlyYXRyX2luZGV4ID0gUkFUUl9JTlhfV0lSRUxFU1NfQjsKQEAgLTE4MjgsNyArMTg1OSw3IEBACiAJY2FzZSBXSVJFTEVTU19NT0RFX05fNUc6CiAJCXJhdHJfaW5kZXggPSBSQVRSX0lOWF9XSVJFTEVTU19OR0I7CiAKLQkJaWYgKG1pbW9wcyA9PSAwKSB7CisJCWlmIChtaW1vX3BzID09IElFRUU4MDIxMV9TTVBTX1NUQVRJQykgewogCQkJaWYgKHJzc2lfbGV2ZWwgPT0gMSkKIAkJCQlyYXRyX2JpdG1hcCAmPSAweDAwMDcwMDAwOwogCQkJZWxzZSBpZiAocnNzaV9sZXZlbCA9PSAyKQpAQCAtMTg5Miw4ICsxOTIzLDggQEAKIAl9CiAJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9SQVRSLCBEQkdfRE1FU0csCiAJCSAoInJhdHJfYml0bWFwIDoleFxuIiwgcmF0cl9iaXRtYXApKTsKLQkqKHUzMiAqKSZyYXRlX21hc2sgPSAocmF0cl9iaXRtYXAgJiAweDBmZmZmZmZmKSB8Ci0JCQkJICAgICAgIChyYXRyX2luZGV4IDw8IDI4KTsKKwkqKHUzMiAqKSZyYXRlX21hc2sgPSBFRjRCWVRFKChyYXRyX2JpdG1hcCAmIDB4MGZmZmZmZmYpIHwKKwkJCQkgICAgIChyYXRyX2luZGV4IDw8IDI4KSk7CiAJcmF0ZV9tYXNrWzRdID0gbWFjaWQgfCAoc2hvcnRnaSA/IDB4MjAgOiAweDAwKSB8IDB4ODA7CiAJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9SQVRSLCBEQkdfRE1FU0csICgiUmF0ZV9pbmRleDoleCwgIgogCQkJCQkJICJyYXRyX3ZhbDoleCwgJXg6JXg6JXg6JXg6JXhcbiIsCkBAIC0xOTAyLDYgKzE5MzMsMjAgQEAKIAkJCQkJCSByYXRlX21hc2tbMl0sIHJhdGVfbWFza1szXSwKIAkJCQkJCSByYXRlX21hc2tbNF0pKTsKIAlydGw5MmNfZmlsbF9oMmNfY21kKGh3LCBIMkNfUkFfTUFTSywgNSwgcmF0ZV9tYXNrKTsKKworCWlmIChtYWNpZCAhPSAwKQorCQlzdGFfZW50cnktPnJhdHJfaW5kZXggPSByYXRyX2luZGV4OworfQorCit2b2lkIHJ0bDkyY2VfdXBkYXRlX2hhbF9yYXRlX3RibChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTggcnNzaV9sZXZlbCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlpZiAocnRscHJpdi0+ZG0udXNlcmFtYXNrKQorCQlydGw5MmNlX3VwZGF0ZV9oYWxfcmF0ZV9tYXNrKGh3LCBzdGEsIHJzc2lfbGV2ZWwpOworCWVsc2UKKwkJcnRsOTJjZV91cGRhdGVfaGFsX3JhdGVfdGFibGUoaHcsIHN0YSk7CiB9CiAKIHZvaWQgcnRsOTJjZV91cGRhdGVfY2hhbm5lbF9hY2Nlc3Nfc2V0dGluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKQEAgLTE5MTksNyArMTk2NCw3IEBACiAJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9TSUZTLCAodTggKikmc2lmc190aW1lcik7CiB9CiAKLWJvb2wgcnRsOTJjZV9ncGlvX3JhZGlvX29uX29mZl9jaGVja2luZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKiB2YWxpZCkKK2Jvb2wgcnRsOTJjZV9ncGlvX3JhZGlvX29uX29mZl9jaGVja2luZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnZhbGlkKQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKQEAgLTE5MjksNyArMTk3NCw3IEBACiAJYm9vbCBhY3R1YWxseXNldCA9IGZhbHNlOwogCXVuc2lnbmVkIGxvbmcgZmxhZzsKIAotCWlmICgocnRscGNpLT51cF9maXJzdF90aW1lID09IDEpIHx8IChydGxwY2ktPmJlaW5nX2luaXRfYWRhcHRlcikpCisJaWYgKHJ0bHBjaS0+YmVpbmdfaW5pdF9hZGFwdGVyKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlpZiAocHBzYy0+c3dyZl9wcm9jZXNzaW5nKQpAQCAtMTk0NiwxMiArMTk5MSw2IEBACiAKIAljdXJfcmZzdGF0ZSA9IHBwc2MtPnJmcHdyX3N0YXRlOwogCi0JaWYgKChwcHNjLT5yZWdfcmZwc19sZXZlbCAmIFJUX1JGX09GRl9MRVZMX0FTUE0pICYmCi0JICAgIFJUX0lOX1BTX0xFVkVMKHBwc2MsIFJUX1JGX09GRl9MRVZMX0FTUE0pKSB7Ci0JCXJ0bHByaXYtPmludGZfb3BzLT5kaXNhYmxlX2FzcG0oaHcpOwotCQlSVF9DTEVBUl9QU19MRVZFTChwcHNjLCBSVF9SRl9PRkZfTEVWTF9BU1BNKTsKLQl9Ci0KIAlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfTUFDX1BJTk1VWF9DRkcsIHJ0bF9yZWFkX2J5dGUocnRscHJpdiwKIAkJICAgICAgIFJFR19NQUNfUElOTVVYX0NGRykmfihCSVQoMykpKTsKIApAQCAtMTk3NiwzOCArMjAxNSwxMyBAQAogCX0KIAogCWlmIChhY3R1YWxseXNldCkgewotCQlpZiAoZV9yZnBvd2Vyc3RhdGVfdG9zZXQgPT0gRVJGT04pIHsKLQkJCWlmICgocHBzYy0+cmVnX3JmcHNfbGV2ZWwgJiBSVF9SRl9PRkZfTEVWTF9BU1BNKSAmJgotCQkJICAgIFJUX0lOX1BTX0xFVkVMKHBwc2MsIFJUX1JGX09GRl9MRVZMX0FTUE0pKSB7Ci0JCQkJcnRscHJpdi0+aW50Zl9vcHMtPmRpc2FibGVfYXNwbShodyk7Ci0JCQkJUlRfQ0xFQVJfUFNfTEVWRUwocHBzYywgUlRfUkZfT0ZGX0xFVkxfQVNQTSk7Ci0JCQl9Ci0JCX0KLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcnRscHJpdi0+bG9ja3MucmZfcHNfbG9jaywgZmxhZyk7Ci0JCXBwc2MtPnJmY2hhbmdlX2lucHJvZ3Jlc3MgPSBmYWxzZTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRscHJpdi0+bG9ja3MucmZfcHNfbG9jaywgZmxhZyk7Ci0KLQkJaWYgKGVfcmZwb3dlcnN0YXRlX3Rvc2V0ID09IEVSRk9GRikgewotCQkJaWYgKHBwc2MtPnJlZ19yZnBzX2xldmVsICYgUlRfUkZfT0ZGX0xFVkxfQVNQTSkgewotCQkJCXJ0bHByaXYtPmludGZfb3BzLT5lbmFibGVfYXNwbShodyk7Ci0JCQkJUlRfU0VUX1BTX0xFVkVMKHBwc2MsIFJUX1JGX09GRl9MRVZMX0FTUE0pOwotCQkJfQotCQl9Ci0KLQl9IGVsc2UgaWYgKGVfcmZwb3dlcnN0YXRlX3Rvc2V0ID09IEVSRk9GRiB8fCBjdXJfcmZzdGF0ZSA9PSBFUkZPRkYpIHsKLQkJaWYgKHBwc2MtPnJlZ19yZnBzX2xldmVsICYgUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMpCi0JCQlSVF9TRVRfUFNfTEVWRUwocHBzYywgUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMpOwotCi0JCWlmIChwcHNjLT5yZWdfcmZwc19sZXZlbCAmIFJUX1JGX09GRl9MRVZMX0FTUE0pIHsKLQkJCXJ0bHByaXYtPmludGZfb3BzLT5lbmFibGVfYXNwbShodyk7Ci0JCQlSVF9TRVRfUFNfTEVWRUwocHBzYywgUlRfUkZfT0ZGX0xFVkxfQVNQTSk7Ci0JCX0KLQogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcnRscHJpdi0+bG9ja3MucmZfcHNfbG9jaywgZmxhZyk7CiAJCXBwc2MtPnJmY2hhbmdlX2lucHJvZ3Jlc3MgPSBmYWxzZTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRscHJpdi0+bG9ja3MucmZfcHNfbG9jaywgZmxhZyk7CiAJfSBlbHNlIHsKKwkJaWYgKHBwc2MtPnJlZ19yZnBzX2xldmVsICYgUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMpCisJCQlSVF9TRVRfUFNfTEVWRUwocHBzYywgUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMpOworCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZydGxwcml2LT5sb2Nrcy5yZl9wc19sb2NrLCBmbGFnKTsKIAkJcHBzYy0+cmZjaGFuZ2VfaW5wcm9ncmVzcyA9IGZhbHNlOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5yZl9wc19sb2NrLCBmbGFnKTsKQEAgLTIwODYsMTUgKzIxMDAsMzEgQEAKIAkJCQltYWNhZGRyID0gY2FtX2NvbnN0X2Jyb2FkOwogCQkJCWVudHJ5X2lkID0ga2V5X2luZGV4OwogCQkJfSBlbHNlIHsKKwkJCQlpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwkJCQkJZW50cnlfaWQgPSBydGxfY2FtX2dldF9mcmVlX2VudHJ5KGh3LAorCQkJCQkJCQkgcF9tYWNhZGRyKTsKKwkJCQkJaWYgKGVudHJ5X2lkID49ICBUT1RBTF9DQU1fRU5UUlkpIHsKKwkJCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLAorCQkJCQkJICAgICBEQkdfRU1FUkcsCisJCQkJCQkgICAgICgiQ2FuIG5vdCBmaW5kIGZyZWUgaHciCisJCQkJCQkgICAgICIgc2VjdXJpdHkgY2FtIGVudHJ5XG4iKSk7CisJCQkJCQlyZXR1cm47CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQllbnRyeV9pZCA9IENBTV9QQUlSV0lTRV9LRVlfUE9TSVRJT047CisJCQkJfQorCiAJCQkJa2V5X2luZGV4ID0gUEFJUldJU0VfS0VZSURYOwotCQkJCWVudHJ5X2lkID0gQ0FNX1BBSVJXSVNFX0tFWV9QT1NJVElPTjsKIAkJCQlpc19wYWlyd2lzZSA9IHRydWU7CiAJCQl9CiAJCX0KIAogCQlpZiAocnRscHJpdi0+c2VjLmtleV9sZW5ba2V5X2luZGV4XSA9PSAwKSB7CiAJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0RNRVNHLAotCQkJCSAoImRlbGV0ZSBvbmUgZW50cnlcbiIpKTsKKwkJCQkgKCJkZWxldGUgb25lIGVudHJ5LCBlbnRyeV9pZCBpcyAlZFxuIiwKKwkJCQkgZW50cnlfaWQpKTsKKwkJCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKKwkJCQlydGxfY2FtX2RlbF9lbnRyeShodywgcF9tYWNhZGRyKTsKIAkJCXJ0bF9jYW1fZGVsZXRlX29uZV9lbnRyeShodywgcF9tYWNhZGRyLCBlbnRyeV9pZCk7CiAJCX0gZWxzZSB7CiAJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0xPVUQsCkBAIC0yMTQ2LDMgKzIxNzYsMTMyIEBACiAJCX0KIAl9CiB9CisKK3N0YXRpYyB2b2lkIHJ0bDgxOTJjZV9idF92YXJfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpydGxwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCisJcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9jb2V4aXN0ZW5jZSA9CisJCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmVlcHJvbV9idF9jb2V4aXN0OworCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfYW50X251bSA9CisJCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmVlcHJvbV9idF9hbnRfbnVtOworCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfY29leGlzdF90eXBlID0KKwkJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuZWVwcm9tX2J0X3R5cGU7CisKKwlpZiAocnRscGNpcHJpdi0+YnRfY29leGlzdC5yZWdfYnRfaXNvID09IDIpCisJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfYW50X2lzb2xhdGlvbiA9CisJCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmVlcHJvbV9idF9hbnRfaXNvbGF0aW9uOworCWVsc2UKKwkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9hbnRfaXNvbGF0aW9uID0KKwkJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QucmVnX2J0X2lzbzsKKworCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfcmFkaW9fc2hhcmVkX3R5cGUgPQorCQkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5lZXByb21fYnRfcmFkaW9fc2hhcmVkOworCisJaWYgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfY29leGlzdGVuY2UpIHsKKworCQlpZiAocnRscGNpcHJpdi0+YnRfY29leGlzdC5yZWdfYnRfc2NvID09IDEpCisJCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X3NlcnZpY2UgPSBCVF9PVEhFUl9BQ1RJT047CisJCWVsc2UgaWYgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QucmVnX2J0X3NjbyA9PSAyKQorCQkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9zZXJ2aWNlID0gQlRfU0NPOworCQllbHNlIGlmIChydGxwY2lwcml2LT5idF9jb2V4aXN0LnJlZ19idF9zY28gPT0gNCkKKwkJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfc2VydmljZSA9IEJUX0JVU1k7CisJCWVsc2UgaWYgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QucmVnX2J0X3NjbyA9PSA1KQorCQkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5idF9zZXJ2aWNlID0gQlRfT1RIRVJCVVNZOworCQllbHNlCisJCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X3NlcnZpY2UgPSBCVF9JRExFOworCisJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfZWRjYV91bCA9IDA7CisJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfZWRjYV9kbCA9IDA7CisJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfcnNzaV9zdGF0ZSA9IDB4ZmY7CisJfQorfQorCit2b2lkIHJ0bDgxOTJjZV9yZWFkX2J0X2NvZXhpc3RfaW5mb19mcm9tX2h3cGcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgICAgIGJvb2wgYXV0b19sb2FkX2ZhaWwsIHU4ICpod2luZm8pCit7CisJc3RydWN0IHJ0bF9wY2lfcHJpdiAqcnRscGNpcHJpdiA9IHJ0bF9wY2lwcml2KGh3KTsKKwl1OCB2YWx1ZTsKKworCWlmICghYXV0b19sb2FkX2ZhaWwpIHsKKwkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5lZXByb21fYnRfY29leGlzdCA9CisJCQkJCSgoaHdpbmZvW1JGX09QVElPTjFdICYgMHhlMCkgPj4gNSk7CisJCXZhbHVlID0gaHdpbmZvW1JGX09QVElPTjRdOworCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmVlcHJvbV9idF90eXBlID0gKCh2YWx1ZSAmIDB4ZSkgPj4gMSk7CisJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuZWVwcm9tX2J0X2FudF9udW0gPSAodmFsdWUgJiAweDEpOworCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmVlcHJvbV9idF9hbnRfaXNvbGF0aW9uID0KKwkJCQkJCQkgKCh2YWx1ZSAmIDB4MTApID4+IDQpOworCQlydGxwY2lwcml2LT5idF9jb2V4aXN0LmVlcHJvbV9idF9yYWRpb19zaGFyZWQgPQorCQkJCQkJCSAoKHZhbHVlICYgMHgyMCkgPj4gNSk7CisJfSBlbHNlIHsKKwkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5lZXByb21fYnRfY29leGlzdCA9IDA7CisJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuZWVwcm9tX2J0X3R5cGUgPSBCVF8yV0lSRTsKKwkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5lZXByb21fYnRfYW50X251bSA9IEFOVF9YMjsKKwkJcnRscGNpcHJpdi0+YnRfY29leGlzdC5lZXByb21fYnRfYW50X2lzb2xhdGlvbiA9IDA7CisJCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuZWVwcm9tX2J0X3JhZGlvX3NoYXJlZCA9IEJUX1JBRElPX1NIQVJFRDsKKwl9CisKKwlydGw4MTkyY2VfYnRfdmFyX2luaXQoaHcpOworfQorCit2b2lkIHJ0bDgxOTJjZV9idF9yZWdfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpydGxwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCisJLyogMDpMb3csIDE6SGlnaCwgMjpGcm9tIEVmdXNlLiAqLworCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QucmVnX2J0X2lzbyA9IDI7CisJLyogMDpJZGxlLCAxOk5vbmUtU0NPLCAyOlNDTywgMzpGcm9tIENvdW50ZXIuICovCisJcnRscGNpcHJpdi0+YnRfY29leGlzdC5yZWdfYnRfc2NvID0gMzsKKwkvKiAwOkRpc2FibGUgQlQgY29udHJvbCBBLU1QRFUsIDE6RW5hYmxlIEJUIGNvbnRyb2wgQS1NUERVLiAqLworCXJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QucmVnX2J0X3NjbyA9IDA7Cit9CisKKwordm9pZCBydGw4MTkyY2VfYnRfaHdfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpydGxwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCisJdTggdTFfdG1wOworCisJaWYgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfY29leGlzdGVuY2UgJiYKKwkgICAgKChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2NvZXhpc3RfdHlwZSA9PSBCVF9DU1JfQkM0KSB8fAorCSAgICAgIHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfY29leGlzdF90eXBlID09IEJUX0NTUl9CQzgpKSB7CisKKwkJaWYgKHJ0bHBjaXByaXYtPmJ0X2NvZXhpc3QuYnRfYW50X2lzb2xhdGlvbikKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19HUElPX01VWENGRywgMHhhMCk7CisKKwkJdTFfdG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCAweDRmZCkgJgorCQkJIEJJVF9PRkZTRVRfTEVOX01BU0tfMzIoMCwgMSk7CisJCXUxX3RtcCA9IHUxX3RtcCB8CisJCQkgKChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X2FudF9pc29sYXRpb24gPT0gMSkgPworCQkJIDAgOiBCSVRfT0ZGU0VUX0xFTl9NQVNLXzMyKDEsIDEpKSB8CisJCQkgKChydGxwY2lwcml2LT5idF9jb2V4aXN0LmJ0X3NlcnZpY2UgPT0gQlRfU0NPKSA/CisJCQkgMCA6IEJJVF9PRkZTRVRfTEVOX01BU0tfMzIoMiwgMSkpOworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCAweDRmZCwgdTFfdG1wKTsKKworCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0JUX0NPRVhfVEFCTEUrNCwgMHhhYWFhOWFhYSk7CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSRUdfQlRfQ09FWF9UQUJMRSs4LCAweGZmYmQwMDQwKTsKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19CVF9DT0VYX1RBQkxFKzB4YywgMHg0MDAwMDAxMCk7CisKKwkJLyogQ29uZmlnIHRvIDFUMVIuICovCisJCWlmIChydGxwaHktPnJmX3R5cGUgPT0gUkZfMVQxUikgeworCQkJdTFfdG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBST0ZETTBfVFJYUEFUSEVOQUJMRSk7CisJCQl1MV90bXAgJj0gfihCSVRfT0ZGU0VUX0xFTl9NQVNLXzMyKDEsIDEpKTsKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJPRkRNMF9UUlhQQVRIRU5BQkxFLCB1MV90bXApOworCisJCQl1MV90bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJPRkRNMV9UUlhQQVRIRU5BQkxFKTsKKwkJCXUxX3RtcCAmPSB+KEJJVF9PRkZTRVRfTEVOX01BU0tfMzIoMSwgMSkpOworCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUk9GRE0xX1RSWFBBVEhFTkFCTEUsIHUxX3RtcCk7CisJCX0KKwl9Cit9CisKK3ZvaWQgcnRsOTJjZV9zdXNwZW5kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworfQorCit2b2lkIHJ0bDkyY2VfcmVzdW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2h3LmgKaW5kZXggYTNkZmRiNi4uMDdkYmUzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9ody5oCkBAIC0zMCw3ICszMCwxOCBAQAogI2lmbmRlZiBfX1JUTDkyQ0VfSFdfSF9fCiAjZGVmaW5lIF9fUlRMOTJDRV9IV19IX18KIAotI2RlZmluZSBIMkNfUkFfTUFTSwk2CitzdGF0aWMgaW5saW5lIHU4IF9ydGw5MmNfZ2V0X2NobmxfZ3JvdXAodTggY2hubCkKK3sKKwl1OCBncm91cDsKKworCWlmIChjaG5sIDwgMykKKwkJZ3JvdXAgPSAwOworCWVsc2UgaWYgKGNobmwgPCA5KQorCQlncm91cCA9IDE7CisJZWxzZQorCQlncm91cCA9IDI7CisJcmV0dXJuIGdyb3VwOworfQogCiB2b2lkIHJ0bDkyY2VfZ2V0X2h3X3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggdmFyaWFibGUsIHU4ICp2YWwpOwogdm9pZCBydGw5MmNlX3JlYWRfZWVwcm9tX2luZm8oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwpAQCAtNDEsMjggKzUyLDI3IEBACiB2b2lkIHJ0bDkyY2VfZW5hYmxlX2ludGVycnVwdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiB2b2lkIHJ0bDkyY2VfZGlzYWJsZV9pbnRlcnJ1cHQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogaW50IHJ0bDkyY2Vfc2V0X25ldHdvcmtfdHlwZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlKTsKK3ZvaWQgcnRsOTJjZV9zZXRfY2hlY2tfYnNzaWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgY2hlY2tfYnNzaWQpOwogdm9pZCBydGw5MmNlX3NldF9xb3Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBhY2kpOwogdm9pZCBydGw5MmNlX3NldF9iZWFjb25fcmVsYXRlZF9yZWdpc3RlcnMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBydGw5MmNlX3NldF9iZWFjb25faW50ZXJ2YWwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBydGw5MmNlX3VwZGF0ZV9pbnRlcnJ1cHRfbWFzayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICB1MzIgYWRkX21zciwgdTMyIHJtX21zcik7CiB2b2lkIHJ0bDkyY2Vfc2V0X2h3X3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggdmFyaWFibGUsIHU4ICp2YWwpOwotdm9pZCBydGw5MmNlX3VwZGF0ZV9oYWxfcmF0ZV90YWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Ci12b2lkIHJ0bDkyY2VfdXBkYXRlX2hhbF9yYXRlX21hc2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHJzc2lfbGV2ZWwpOwordm9pZCBydGw5MmNlX3VwZGF0ZV9oYWxfcmF0ZV90Ymwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHU4IHJzc2lfbGV2ZWwpOwogdm9pZCBydGw5MmNlX3VwZGF0ZV9jaGFubmVsX2FjY2Vzc19zZXR0aW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIGJvb2wgcnRsOTJjZV9ncGlvX3JhZGlvX29uX29mZl9jaGVja2luZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnZhbGlkKTsKIHZvaWQgcnRsOTJjZV9lbmFibGVfaHdfc2VjdXJpdHlfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHZvaWQgcnRsOTJjZV9zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIga2V5X2luZGV4LAogCQkgICAgIHU4ICpwX21hY2FkZHIsIGJvb2wgaXNfZ3JvdXAsIHU4IGVuY19hbGdvLAogCQkgICAgIGJvb2wgaXNfd2Vwa2V5LCBib29sIGNsZWFyX2FsbCk7Ci1ib29sIF9ydGw5MmNlX3BoeV9jb25maWdfbWFjX3dpdGhfaGVhZGVyZmlsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Ci12b2lkIHJ0bDkyY19zZXRfZndfcnN2ZHBhZ2Vwa3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgYl9kbF9maW5pc2hlZCk7Ci12b2lkIHJ0bDkyY19zZXRfZndfcHdybW9kZV9jbWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IG1vZGUpOwotdm9pZCBydGw5MmNfc2V0X2Z3X2pvaW5ic3NfcmVwb3J0X2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggbXN0YXR1cyk7Ci1pbnQgcnRsOTJjX2Rvd25sb2FkX2Z3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKLXZvaWQgcnRsOTJjX2Zpcm13YXJlX3NlbGZyZXNldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Ci12b2lkIHJ0bDkyY19maWxsX2gyY19jbWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgdTggZWxlbWVudF9pZCwgdTMyIGNtZF9sZW4sIHU4ICpwX2NtZGJ1ZmZlcik7Ci1ib29sIHJ0bDkyY2VfcGh5X21hY19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCit2b2lkIHJ0bDgxOTJjZV9yZWFkX2J0X2NvZXhpc3RfaW5mb19mcm9tX2h3cGcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQlib29sIGF1dG9sb2FkX2ZhaWwsIHU4ICpod2luZm8pOwordm9pZCBydGw4MTkyY2VfYnRfcmVnX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw4MTkyY2VfYnRfaHdfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyY2Vfc3VzcGVuZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyY2VfcmVzdW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9sZWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2xlZC5jCmluZGV4IDdiMWRhOGQuLjlkZDFlZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2xlZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2xlZC5jCkBAIC0zMiw2ICszMiwxNCBAQAogI2luY2x1ZGUgInJlZy5oIgogI2luY2x1ZGUgImxlZC5oIgogCitzdGF0aWMgdm9pZCBfcnRsOTJjZV9pbml0X2xlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgIHN0cnVjdCBydGxfbGVkICpwbGVkLCBlbnVtIHJ0bF9sZWRfcGluIGxlZHBpbikKK3sKKwlwbGVkLT5odyA9IGh3OworCXBsZWQtPmxlZHBpbiA9IGxlZHBpbjsKKwlwbGVkLT5sZWRvbiA9IGZhbHNlOworfQorCiB2b2lkIHJ0bDkyY2Vfc3dfbGVkX29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgcnRsX2xlZCAqcGxlZCkKIHsKIAl1OCBsZWRjZmc7CkBAIC05NywxMyArMTA1LDEyIEBACiAKIHZvaWQgcnRsOTJjZV9pbml0X3N3X2xlZHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CisJc3RydWN0IHJ0bF9wY2lfcHJpdiAqcGNpcHJpdiA9IHJ0bF9wY2lwcml2KGh3KTsKKwlfcnRsOTJjZV9pbml0X2xlZChodywgJihwY2lwcml2LT5sZWRjdGwuc3dfbGVkMCksIExFRF9QSU5fTEVEMCk7CisJX3J0bDkyY2VfaW5pdF9sZWQoaHcsICYocGNpcHJpdi0+bGVkY3RsLnN3X2xlZDEpLCBMRURfUElOX0xFRDEpOwogfQogCi12b2lkIHJ0bDkyY2VfZGVpbml0X3N3X2xlZHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci19Ci0KLXZvaWQgX3J0bDkyY2Vfc3dfbGVkX2NvbnRyb2woc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCitzdGF0aWMgdm9pZCBfcnRsOTJjZV9zd19sZWRfY29udHJvbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICAgZW51bSBsZWRfY3RsX21vZGUgbGVkYWN0aW9uKQogewogCXN0cnVjdCBydGxfcGNpX3ByaXYgKnBjaXByaXYgPSBydGxfcGNpcHJpdihodyk7CkBAIC0xMzgsNyArMTQ1LDcgQEAKIAkgICAgIGxlZGFjdGlvbiA9PSBMRURfQ1RMX1BPV0VSX09OKSkgewogCQlyZXR1cm47CiAJfQotCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTEVELCBEQkdfTE9VRCwgKCJsZWRhY3Rpb24gJWQsXG4iLAorCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTEVELCBEQkdfTE9VRCwgKCJsZWRhY3Rpb24gJWQuXG4iLAogCQkJCWxlZGFjdGlvbikpOwogCV9ydGw5MmNlX3N3X2xlZF9jb250cm9sKGh3LCBsZWRhY3Rpb24pOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvbGVkLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9sZWQuaAppbmRleCAxMGRhMzAxLi43ZGZjY2VhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9sZWQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9sZWQuaApAQCAtMzEsMTEgKzMxLDggQEAKICNkZWZpbmUgX19SVEw5MkNFX0xFRF9IX18KIAogdm9pZCBydGw5MmNlX2luaXRfc3dfbGVkcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Ci12b2lkIHJ0bDkyY2VfZGVpbml0X3N3X2xlZHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBydGw5MmNlX3N3X2xlZF9vbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHJ0bF9sZWQgKnBsZWQpOwogdm9pZCBydGw5MmNlX3N3X2xlZF9vZmYoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBydGxfbGVkICpwbGVkKTsKIHZvaWQgcnRsOTJjZV9sZWRfY29udHJvbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBsZWRfY3RsX21vZGUgbGVkYWN0aW9uKTsKLXZvaWQgX3J0bDkyY2Vfc3dfbGVkX2NvbnRyb2woc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgIGVudW0gbGVkX2N0bF9tb2RlIGxlZGFjdGlvbik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvcGh5LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9waHkuYwppbmRleCBkMDU0MWU4Li43M2FlOGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9waHkuYwpAQCAtMzgsNyArMzgsOSBAQAogI2luY2x1ZGUgImRtLmgiCiAjaW5jbHVkZSAidGFibGUuaCIKIAotdTMyIHJ0bDkyY2VfcGh5X3F1ZXJ5X3JmX3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKK3N0YXRpYyBib29sIF9ydGw5MmNfcGh5X2NvbmZpZ19tYWNfd2l0aF9oZWFkZXJmaWxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwordTMyIHJ0bDkyY19waHlfcXVlcnlfcmZfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJICAgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsIHUzMiByZWdhZGRyLCB1MzIgYml0bWFzaykKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CkBAIC03Myw5ICs3NSw0NyBAQAogCXJldHVybiByZWFkYmFja192YWx1ZTsKIH0KIAorYm9vbCBydGw5MmNfcGh5X21hY19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJYm9vbCBpczkyYyA9IElTXzkyQ19TRVJJQUwocnRsaGFsLT52ZXJzaW9uKTsKKwlib29sIHJ0c3RhdHVzID0gX3J0bDkyY19waHlfY29uZmlnX21hY193aXRoX2hlYWRlcmZpbGUoaHcpOworCisJaWYgKGlzOTJjKQorCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCAweDE0LCAweDcxKTsKKwlyZXR1cm4gcnRzdGF0dXM7Cit9CisKK2Jvb2wgcnRsOTJjX3BoeV9iYl9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJYm9vbCBydHN0YXR1cyA9IHRydWU7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXUxNiByZWd2YWw7CisJdTMyIHJlZ3ZhbGR3OworCXU4IHJlZ19od3BhcmFmaWxlID0gMTsKKworCV9ydGw5MmNfcGh5X2luaXRfYmJfcmZfcmVnaXN0ZXJfZGVmaW5pdGlvbihodyk7CisJcmVndmFsID0gcnRsX3JlYWRfd29yZChydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4pOworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTiwKKwkJICAgICAgIHJlZ3ZhbCB8IEJJVCgxMykgfCBCSVQoMCkgfCBCSVQoMSkpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BRkVfUExMX0NUUkwsIDB4ODMpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BRkVfUExMX0NUUkwgKyAxLCAweGRiKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfUkZfQ1RSTCwgUkZfRU4gfCBSRl9SU1RCIHwgUkZfU0RNUlNUQik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOLAorCQkgICAgICAgRkVOX1BQTEwgfCBGRU5fUENJRUEgfCBGRU5fRElPX1BDSUUgfAorCQkgICAgICAgRkVOX0JCX0dMQl9SU1RuIHwgRkVOX0JCUlNUQik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0FGRV9YVEFMX0NUUkwgKyAxLCAweDgwKTsKKwlyZWd2YWxkdyA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIFJFR19MRURDRkcwKTsKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX0xFRENGRzAsIHJlZ3ZhbGR3IHwgQklUKDIzKSk7CisJaWYgKHJlZ19od3BhcmFmaWxlID09IDEpCisJCXJ0c3RhdHVzID0gX3J0bDkyY19waHlfYmI4MTkyY19jb25maWdfcGFyYWZpbGUoaHcpOworCXJldHVybiBydHN0YXR1czsKK30KKwogdm9pZCBydGw5MmNlX3BoeV9zZXRfcmZfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgZW51bSByYWRpb19wYXRoIHJmcGF0aCwKLQkJCSAgIHUzMiByZWdhZGRyLCB1MzIgYml0bWFzaywgdTMyIGRhdGEpCisJCQkgICAgZW51bSByYWRpb19wYXRoIHJmcGF0aCwKKwkJCSAgICB1MzIgcmVnYWRkciwgdTMyIGJpdG1hc2ssIHUzMiBkYXRhKQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOwpAQCAtMTIxLDQ1ICsxNjEsNyBAQAogCQkJCQkgICAgICAgYml0bWFzaywgZGF0YSwgcmZwYXRoKSk7CiB9CiAKLWJvb2wgcnRsOTJjZV9waHlfbWFjX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7Ci0Jc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKLQlib29sIGlzOTJjID0gSVNfOTJDX1NFUklBTChydGxoYWwtPnZlcnNpb24pOwotCWJvb2wgcnRzdGF0dXMgPSBfcnRsOTJjZV9waHlfY29uZmlnX21hY193aXRoX2hlYWRlcmZpbGUoaHcpOwotCi0JaWYgKGlzOTJjKQotCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCAweDE0LCAweDcxKTsKLQlyZXR1cm4gcnRzdGF0dXM7Ci19Ci0KLWJvb2wgcnRsOTJjZV9waHlfYmJfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCWJvb2wgcnRzdGF0dXMgPSB0cnVlOwotCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKLQl1MTYgcmVndmFsOwotCXUzMiByZWd2YWxkdzsKLQl1OCByZWdfaHdwYXJhZmlsZSA9IDE7Ci0KLQlfcnRsOTJjX3BoeV9pbml0X2JiX3JmX3JlZ2lzdGVyX2RlZmluaXRpb24oaHcpOwotCXJlZ3ZhbCA9IHJ0bF9yZWFkX3dvcmQocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOKTsKLQlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4sCi0JCSAgICAgICByZWd2YWwgfCBCSVQoMTMpIHwgQklUKDApIHwgQklUKDEpKTsKLQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQUZFX1BMTF9DVFJMLCAweDgzKTsKLQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQUZFX1BMTF9DVFJMICsgMSwgMHhkYik7Ci0JcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1JGX0NUUkwsIFJGX0VOIHwgUkZfUlNUQiB8IFJGX1NETVJTVEIpOwotCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTiwKLQkJICAgICAgIEZFTl9QUExMIHwgRkVOX1BDSUVBIHwgRkVOX0RJT19QQ0lFIHwKLQkJICAgICAgIEZFTl9CQl9HTEJfUlNUbiB8IEZFTl9CQlJTVEIpOwotCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BRkVfWFRBTF9DVFJMICsgMSwgMHg4MCk7Ci0JcmVndmFsZHcgPSBydGxfcmVhZF9kd29yZChydGxwcml2LCBSRUdfTEVEQ0ZHMCk7Ci0JcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJFR19MRURDRkcwLCByZWd2YWxkdyB8IEJJVCgyMykpOwotCWlmIChyZWdfaHdwYXJhZmlsZSA9PSAxKQotCQlydHN0YXR1cyA9IF9ydGw5MmNfcGh5X2JiODE5MmNfY29uZmlnX3BhcmFmaWxlKGh3KTsKLQlyZXR1cm4gcnRzdGF0dXM7Ci19Ci0KLWJvb2wgX3J0bDkyY2VfcGh5X2NvbmZpZ19tYWNfd2l0aF9oZWFkZXJmaWxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQorc3RhdGljIGJvb2wgX3J0bDkyY19waHlfY29uZmlnX21hY193aXRoX2hlYWRlcmZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXUzMiBpOwpAQCAtMTc3LDcgKzE3OSw3IEBACiB9CiAKIGJvb2wgX3J0bDkyY2VfcGh5X2NvbmZpZ19iYl93aXRoX2hlYWRlcmZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCQkgIHU4IGNvbmZpZ3R5cGUpCisJCQkJCSAgICB1OCBjb25maWd0eXBlKQogewogCWludCBpOwogCXUzMiAqcGh5X3JlZ2FycmF5X3RhYmxlOwpAQCAtMjM2LDcgKzIzOCw3IEBACiB9CiAKIGJvb2wgX3J0bDkyY2VfcGh5X2NvbmZpZ19iYl93aXRoX3BnaGVhZGVyZmlsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkJCSAgICB1OCBjb25maWd0eXBlKQorCQkJCQkgICAgICB1OCBjb25maWd0eXBlKQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlpbnQgaTsKQEAgLTI3NCw3ICsyNzYsNyBAQAogCXJldHVybiB0cnVlOwogfQogCi1ib29sIHJ0bDkyY2VfcGh5X2NvbmZpZ19yZl93aXRoX2hlYWRlcmZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCitib29sIHJ0bDkyY19waHlfY29uZmlnX3JmX3dpdGhfaGVhZGVyZmlsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkJICBlbnVtIHJhZGlvX3BhdGggcmZwYXRoKQogewogCkBAIC0zNjQsNzQgKzM2Niw2IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgcnRsOTJjZV9waHlfc2V0X2J3X21vZGVfY2FsbGJhY2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci0Jc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwotCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7Ci0Jc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKLQlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOwotCXU4IHJlZ19id19vcG1vZGU7Ci0JdTggcmVnX3Byc3JfcnNjOwotCi0JUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TQ0FOLCBEQkdfVFJBQ0UsCi0JCSAoIlN3aXRjaCB0byAlcyBiYW5kd2lkdGhcbiIsCi0JCSAgcnRscGh5LT5jdXJyZW50X2NoYW5fYncgPT0gSFRfQ0hBTk5FTF9XSURUSF8yMCA/Ci0JCSAgIjIwTUh6IiA6ICI0ME1IeiIpKQotCi0JICAgIGlmIChpc19oYWxfc3RvcChydGxoYWwpKQotCQlyZXR1cm47Ci0KLQlyZWdfYndfb3Btb2RlID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfQldPUE1PREUpOwotCXJlZ19wcnNyX3JzYyA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHX1JSU1IgKyAyKTsKLQotCXN3aXRjaCAocnRscGh5LT5jdXJyZW50X2NoYW5fYncpIHsKLQljYXNlIEhUX0NIQU5ORUxfV0lEVEhfMjA6Ci0JCXJlZ19id19vcG1vZGUgfD0gQldfT1BNT0RFXzIwTUhaOwotCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQldPUE1PREUsIHJlZ19id19vcG1vZGUpOwotCQlicmVhazsKLQotCWNhc2UgSFRfQ0hBTk5FTF9XSURUSF8yMF80MDoKLQkJcmVnX2J3X29wbW9kZSAmPSB+QldfT1BNT0RFXzIwTUhaOwotCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQldPUE1PREUsIHJlZ19id19vcG1vZGUpOwotCi0JCXJlZ19wcnNyX3JzYyA9Ci0JCSAgICAocmVnX3Byc3JfcnNjICYgMHg5MCkgfCAobWFjLT5jdXJfNDBfcHJpbWVfc2MgPDwgNSk7Ci0JCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19SUlNSICsgMiwgcmVnX3Byc3JfcnNjKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAotCQkJICgidW5rbm93biBiYW5kd2lkdGg6ICUjWFxuIiwgcnRscGh5LT5jdXJyZW50X2NoYW5fYncpKTsKLQkJYnJlYWs7Ci0JfQotCi0Jc3dpdGNoIChydGxwaHktPmN1cnJlbnRfY2hhbl9idykgewotCWNhc2UgSFRfQ0hBTk5FTF9XSURUSF8yMDoKLQkJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX1JGTU9ELCBCUkZNT0QsIDB4MCk7Ci0JCXJ0bF9zZXRfYmJyZWcoaHcsIFJGUEdBMV9SRk1PRCwgQlJGTU9ELCAweDApOwotCQlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfQU5BTE9HUEFSQU1FVEVSMiwgQklUKDEwKSwgMSk7Ci0JCWJyZWFrOwotCWNhc2UgSFRfQ0hBTk5FTF9XSURUSF8yMF80MDoKLQkJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX1JGTU9ELCBCUkZNT0QsIDB4MSk7Ci0JCXJ0bF9zZXRfYmJyZWcoaHcsIFJGUEdBMV9SRk1PRCwgQlJGTU9ELCAweDEpOwotCQlydGxfc2V0X2JicmVnKGh3LCBSQ0NLMF9TWVNURU0sIEJDQ0tfU0lERUJBTkQsCi0JCQkgICAgICAobWFjLT5jdXJfNDBfcHJpbWVfc2MgPj4gMSkpOwotCQlydGxfc2V0X2JicmVnKGh3LCBST0ZETTFfTFNURiwgMHhDMDAsIG1hYy0+Y3VyXzQwX3ByaW1lX3NjKTsKLQkJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX0FOQUxPR1BBUkFNRVRFUjIsIEJJVCgxMCksIDApOwotCQlydGxfc2V0X2JicmVnKGh3LCAweDgxOCwgKEJJVCgyNikgfCBCSVQoMjcpKSwKLQkJCSAgICAgIChtYWMtPmN1cl80MF9wcmltZV9zYyA9PQotCQkJICAgICAgIEhBTF9QUklNRV9DSE5MX09GRlNFVF9MT1dFUikgPyAyIDogMSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCi0JCQkgKCJ1bmtub3duIGJhbmR3aWR0aDogJSNYXG4iLCBydGxwaHktPmN1cnJlbnRfY2hhbl9idykpOwotCQlicmVhazsKLQl9Ci0JcnRsOTJjX3BoeV9yZjYwNTJfc2V0X2JhbmR3aWR0aChodywgcnRscGh5LT5jdXJyZW50X2NoYW5fYncpOwotCXJ0bHBoeS0+c2V0X2J3bW9kZV9pbnByb2dyZXNzID0gZmFsc2U7Ci0JUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TQ0FOLCBEQkdfVFJBQ0UsICgiPD09XG4iKSk7Ci19Ci0KIHZvaWQgX3J0bDkyY2VfcGh5X2xjX2NhbGlicmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBpczJ0KQogewogCXU4IHRtcHJlZzsKQEAgLTQ3Nyw2ICs0MTEsMzYgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIF9ydGw5MmNlX3BoeV9zZXRfcmZfc2xlZXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJdTMyIHU0Yl90bXA7CisJdTggZGVsYXkgPSA1OworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19UWFBBVVNFLCAweEZGKTsKKwlydGxfc2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQSwgMHgwMCwgUkZSRUdfT0ZGU0VUX01BU0ssIDB4MDApOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BUFNEX0NUUkwsIDB4NDApOworCXU0Yl90bXAgPSBydGxfZ2V0X3JmcmVnKGh3LCBSRjkwX1BBVEhfQSwgMCwgUkZSRUdfT0ZGU0VUX01BU0spOworCXdoaWxlICh1NGJfdG1wICE9IDAgJiYgZGVsYXkgPiAwKSB7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BUFNEX0NUUkwsIDB4MCk7CisJCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9BLCAweDAwLCBSRlJFR19PRkZTRVRfTUFTSywgMHgwMCk7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19BUFNEX0NUUkwsIDB4NDApOworCQl1NGJfdG1wID0gcnRsX2dldF9yZnJlZyhodywgUkY5MF9QQVRIX0EsIDAsIFJGUkVHX09GRlNFVF9NQVNLKTsKKwkJZGVsYXktLTsKKwl9CisJaWYgKGRlbGF5ID09IDApIHsKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0FQU0RfQ1RSTCwgMHgwMCk7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTiwgMHhFMik7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTiwgMHhFMyk7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19UWFBBVVNFLCAweDAwKTsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX1RSQUNFLAorCQkJICgiU3dpdGNoIFJGIHRpbWVvdXQgISEhLlxuIikpOworCQlyZXR1cm47CisJfQorCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTiwgMHhFMik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NQUzBfQ1RSTCwgMHgyMik7Cit9CisKIHN0YXRpYyBib29sIF9ydGw5MmNlX3BoeV9zZXRfcmZfcG93ZXJfc3RhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSAgICBlbnVtIHJmX3B3cnN0YXRlIHJmcHdyX3N0YXRlKQogewpAQCAtNTIzLDMzICs0ODcsNiBAQAogCQkJYnJlYWs7CiAJCX0KIAljYXNlIEVSRk9GRjp7Ci0JCQlmb3IgKHF1ZXVlX2lkID0gMCwgaSA9IDA7Ci0JCQkgICAgIHF1ZXVlX2lkIDwgUlRMX1BDSV9NQVhfVFhfUVVFVUVfQ09VTlQ7KSB7Ci0JCQkJcmluZyA9ICZwY2lwcml2LT5kZXYudHhfcmluZ1txdWV1ZV9pZF07Ci0JCQkJaWYgKHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKSA9PSAwIHx8Ci0JCQkJICAgIHF1ZXVlX2lkID09IEJFQUNPTl9RVUVVRSkgewotCQkJCQlxdWV1ZV9pZCsrOwotCQkJCQljb250aW51ZTsKLQkJCQl9IGVsc2UgewotCQkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX1dBUk5JTkcsCi0JCQkJCQkgKCJlUmYgT2ZmL1NsZWVwOiAlZCB0aW1lcyAiCi0JCQkJCQkgICJUY2JCdXN5UXVldWVbJWRdICIKLQkJCQkJCSAgIj0lZCBiZWZvcmUgZG96ZSFcbiIsIChpICsgMSksCi0JCQkJCQkgIHF1ZXVlX2lkLAotCQkJCQkJICBza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkpKTsKLQkJCQkJdWRlbGF5KDEwKTsKLQkJCQkJaSsrOwotCQkJCX0KLQkJCQlpZiAoaSA+PSBNQVhfRE9aRV9XQUlUSU5HX1RJTUVTXzl4KSB7Ci0JCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfV0FSTklORywKLQkJCQkJCSAoIlxuRVJGT0ZGOiAlZCB0aW1lcyAiCi0JCQkJCQkgICJUY2JCdXN5UXVldWVbJWRdID0gJWQgIVxuIiwKLQkJCQkJCSAgTUFYX0RPWkVfV0FJVElOR19USU1FU185eCwKLQkJCQkJCSAgcXVldWVfaWQsCi0JCQkJCQkgIHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKSkpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9CiAJCQlpZiAocHBzYy0+cmVnX3JmcHNfbGV2ZWwgJiBSVF9SRl9PRkZfTEVWTF9IQUxUX05JQykgewogCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUkYsIERCR19ETUVTRywKIAkJCQkJICgiSVBTIFNldCBlUmYgbmljIGRpc2FibGVcbiIpKTsKQEAgLTU4MSw2ICs1MTgsNyBAQAogCQkJCQkJICAiVGNiQnVzeVF1ZXVlWyVkXSA9JWQgYmVmb3JlICIKIAkJCQkJCSAgImRvemUhXG4iLCAoaSArIDEpLCBxdWV1ZV9pZCwKIAkJCQkJCSAgc2tiX3F1ZXVlX2xlbigmcmluZy0+cXVldWUpKSk7CisKIAkJCQkJdWRlbGF5KDEwKTsKIAkJCQkJaSsrOwogCQkJCX0KQEAgLTU5OSw3ICs1MzcsNyBAQAogCQkJCSAgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0KIAkJCQkJCSAgIHBwc2MtPmxhc3RfYXdha2VfamlmZmllcykpKTsKIAkJCXBwc2MtPmxhc3Rfc2xlZXBfamlmZmllcyA9IGppZmZpZXM7Ci0JCQlfcnRsOTJjX3BoeV9zZXRfcmZfc2xlZXAoaHcpOworCQkJX3J0bDkyY2VfcGh5X3NldF9yZl9zbGVlcChodyk7CiAJCQlicmVhazsKIAkJfQogCWRlZmF1bHQ6CkBAIC02MTQsMTAgKzU1MiwxMSBAQAogCXJldHVybiBicmVzdWx0OwogfQogCi1ib29sIHJ0bDkyY2VfcGh5X3NldF9yZl9wb3dlcl9zdGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKK2Jvb2wgcnRsOTJjX3BoeV9zZXRfcmZfcG93ZXJfc3RhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJICAgZW51bSByZl9wd3JzdGF0ZSByZnB3cl9zdGF0ZSkKIHsKIAlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwogCWJvb2wgYnJlc3VsdCA9IGZhbHNlOwogCiAJaWYgKHJmcHdyX3N0YXRlID09IHBwc2MtPnJmcHdyX3N0YXRlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvcGh5LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9waHkuaAppbmRleCBhMzcyNjdlLi5hZDU4MDg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9waHkuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9waHkuaApAQCAtMzksNiArMzksNyBAQAogI2RlZmluZSBSVF9DQU5OT1RfSU8oaHcpCQlmYWxzZQogI2RlZmluZSBISUdIUE9XRVJfUkFESU9BX0FSUkFZTEVOCTIyCiAKKyNkZWZpbmUgSVFLX0FEREFfUkVHX05VTQkJMTYKICNkZWZpbmUgTUFYX1RPTEVSQU5DRQkJCTUKICNkZWZpbmUJSVFLX0RFTEFZX1RJTUUJCQkxCiAKQEAgLTU2LDYgKzU3LDggQEAKICNkZWZpbmUgSVFLX0FEREFfUkVHX05VTQkJMTYKICNkZWZpbmUgSVFLX01BQ19SRUdfTlVNCQkJNAogCisjZGVmaW5lIElRS19ERUxBWV9USU1FCQkJMQorCiAjZGVmaW5lIFJGOTBfUEFUSF9NQVgJCQkyCiAKICNkZWZpbmUgQ1RfT0ZGU0VUX01BQ19BRERSCQkwWDE2CkBAIC03Niw3ICs3OSw3IEBACiAjZGVmaW5lIENUX09GRlNFVF9DVVNUT01FUl9JRAkJMHg3RgogCiAjZGVmaW5lIFJUTDkyQ19NQVhfUEFUSF9OVU0JCTIKLSNkZWZpbmUgTExUX0xBU1RfRU5UUllfT0ZfVFhfUEtUX0JVRkZFUgkyNTUKKwogZW51bSBzd2NobmxjbWRfaWQgewogCUNNRElEX0VORCwKIAlDTURJRF9TRVRfVFhQT1dFUk9XRVJfTEVWRUwsCkBAIC0xODQsNDMgKzE4Nyw0NCBAQAogCXUzMiBtY3Nfb3JpZ2luYWxfb2Zmc2V0WzRdWzE2XTsKIH07CiAKLWV4dGVybiB1MzIgcnRsOTJjX3BoeV9xdWVyeV9iYl9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCitib29sIHJ0bDkyY19waHlfYmJfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3UzMiBydGw5MmNfcGh5X3F1ZXJ5X2JiX3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICB1MzIgcmVnYWRkciwgdTMyIGJpdG1hc2spOwotZXh0ZXJuIHZvaWQgcnRsOTJjX3BoeV9zZXRfYmJfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAordm9pZCBydGw5MmNfcGh5X3NldF9iYl9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJICB1MzIgcmVnYWRkciwgdTMyIGJpdG1hc2ssIHUzMiBkYXRhKTsKLWV4dGVybiB1MzIgcnRsOTJjX3BoeV9xdWVyeV9yZl9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCit1MzIgcnRsOTJjX3BoeV9xdWVyeV9yZl9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJICAgZW51bSByYWRpb19wYXRoIHJmcGF0aCwgdTMyIHJlZ2FkZHIsCiAJCQkJICAgdTMyIGJpdG1hc2spOwogZXh0ZXJuIHZvaWQgcnRsOTJjZV9waHlfc2V0X3JmX3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsIHUzMiByZWdhZGRyLAotCQkJCSAgdTMyIGJpdG1hc2ssIHUzMiBkYXRhKTsKLWV4dGVybiBib29sIHJ0bDkyY19waHlfbWFjX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisJCQkJICAgZW51bSByYWRpb19wYXRoIHJmcGF0aCwgdTMyIHJlZ2FkZHIsCisJCQkJICAgdTMyIGJpdG1hc2ssIHUzMiBkYXRhKTsKK2Jvb2wgcnRsOTJjX3BoeV9tYWNfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIGJvb2wgcnRsOTJjZV9waHlfYmJfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKLWV4dGVybiBib29sIHJ0bDkyY19waHlfcmZfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKLWV4dGVybiBib29sIHJ0bDkyY19waHlfY29uZmlnX3JmX3dpdGhfZmVhZGVyZmlsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKK2Jvb2wgcnRsOTJjX3BoeV9yZl9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworYm9vbCBydGw5MmNfcGh5X2NvbmZpZ19yZl93aXRoX2ZlYWRlcmZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCQkgZW51bSByYWRpb19wYXRoIHJmcGF0aCk7Ci1leHRlcm4gdm9pZCBydGw5MmNfcGh5X2dldF9od19yZWdfb3JpZ2luYWx2YWx1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Ci1leHRlcm4gdm9pZCBydGw5MmNfcGh5X2dldF90eHBvd2VyX2xldmVsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAordm9pZCBydGw5MmNfcGh5X2dldF9od19yZWdfb3JpZ2luYWx2YWx1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyY19waHlfZ2V0X3R4cG93ZXJfbGV2ZWwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSBsb25nICpwb3dlcmxldmVsKTsKLWV4dGVybiB2b2lkIHJ0bDkyY19waHlfc2V0X3R4cG93ZXJfbGV2ZWwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGNoYW5uZWwpOwotZXh0ZXJuIGJvb2wgcnRsOTJjX3BoeV91cGRhdGVfdHhwb3dlcl9kYm0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCit2b2lkIHJ0bDkyY19waHlfc2V0X3R4cG93ZXJfbGV2ZWwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGNoYW5uZWwpOworYm9vbCBydGw5MmNfcGh5X3VwZGF0ZV90eHBvd2VyX2RibShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkJICBsb25nIHBvd2VyX2luZGJtKTsKLWV4dGVybiB2b2lkIHJ0bDkyY19waHlfc2Nhbl9vcGVyYXRpb25fYmFja3VwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAordm9pZCBydGw5MmNfcGh5X3NjYW5fb3BlcmF0aW9uX2JhY2t1cChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkJICAgICB1OCBvcGVyYXRpb24pOwotZXh0ZXJuIHZvaWQgcnRsOTJjX3BoeV9zZXRfYndfbW9kZV9jYWxsYmFjayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Ci1leHRlcm4gdm9pZCBydGw5MmNfcGh5X3NldF9id19tb2RlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAordm9pZCBydGw5MmNfcGh5X3NldF9id19tb2RlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hfdHlwZSk7Ci1leHRlcm4gdm9pZCBydGw5MmNfcGh5X3N3X2NobmxfY2FsbGJhY2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwotZXh0ZXJuIHU4IHJ0bDkyY19waHlfc3dfY2hubChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Ci1leHRlcm4gdm9pZCBydGw5MmNfcGh5X2lxX2NhbGlicmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBiX3JlY292ZXJ5KTsKLWV4dGVybiB2b2lkIHJ0bDkyY19waHlfc2V0X2JlYWNvbl9od19yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCit2b2lkIHJ0bDkyY19waHlfc3dfY2hubF9jYWxsYmFjayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit1OCBydGw5MmNfcGh5X3N3X2Nobmwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MmNfcGh5X2lxX2NhbGlicmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBiX3JlY292ZXJ5KTsKK3ZvaWQgcnRsOTJjX3BoeV9zZXRfYmVhY29uX2h3X3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkJIHUxNiBiZWFjb25pbnRlcnZhbCk7CiB2b2lkIHJ0bDkyY19waHlfYXBfY2FsaWJyYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBjaGFyIGRlbHRhKTsKIHZvaWQgcnRsOTJjX3BoeV9sY19jYWxpYnJhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBfcnRsOTJjZV9waHlfbGNfY2FsaWJyYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGlzMnQpOwogdm9pZCBydGw5MmNfcGh5X3NldF9yZnBhdGhfc3dpdGNoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGJtYWluKTsKIGJvb2wgcnRsOTJjX3BoeV9jb25maWdfcmZfd2l0aF9oZWFkZXJmaWxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCQkgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgpOwotZXh0ZXJuIGJvb2wgcnRsODE5Ml9waHlfY2hlY2tfaXNfbGVnYWxfcmZwYXRoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorYm9vbCBydGw4MTkyX3BoeV9jaGVja19pc19sZWdhbF9yZnBhdGgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSAgICAgIHUzMiByZnBhdGgpOwogYm9vbCBydGw5MmNfcGh5X3NldF9pb19jbWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gaW9fdHlwZSBpb3R5cGUpOwogYm9vbCBydGw5MmNlX3BoeV9zZXRfcmZfcG93ZXJfc3RhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCkBAIC0yMzcsOSArMjQxLDYgQEAKIHZvaWQgX3J0bDkyY19waHlfcmZfc2VyaWFsX3dyaXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCQllbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgb2Zmc2V0LAogCQkJCQl1MzIgZGF0YSk7Ci12b2lkIF9ydGw5MmNfc3RvcmVfcHdySW5kZXhfZGlmZnJhdGVfb2Zmc2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQkJICAgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrLAotCQkJCQkJICAgdTMyIGRhdGEpOwogdm9pZCBfcnRsOTJjX3BoeV9md19yZl9zZXJpYWxfd3JpdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSAgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsIHUzMiBvZmZzZXQsCiAJCQkJCSAgIHUzMiBkYXRhKTsKQEAgLTI1MCw1ICsyNTEsMTEgQEAKIHZvaWQgX3J0bDkyY19waHlfaW5pdF9iYl9yZl9yZWdpc3Rlcl9kZWZpbml0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIGJvb2wgX3J0bDkyY19waHlfYmI4MTkyY19jb25maWdfcGFyYWZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBfcnRsOTJjX3BoeV9zZXRfcmZfc2xlZXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworYm9vbCBydGw5MmNfcGh5X3NldF9yZl9wb3dlcl9zdGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICBlbnVtIHJmX3B3cnN0YXRlIHJmcHdyX3N0YXRlKTsKK2Jvb2wgX3J0bDkyY2VfcGh5X2NvbmZpZ19iYl93aXRoX2hlYWRlcmZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgICB1OCBjb25maWd0eXBlKTsKK2Jvb2wgX3J0bDkyY2VfcGh5X2NvbmZpZ19iYl93aXRoX3BnaGVhZGVyZmlsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJICAgICAgdTggY29uZmlndHlwZSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvcmVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9yZWcuaAppbmRleCBiMDg2OGE2Li41OThjZWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9yZWcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9yZWcuaApAQCAtNzIsNiArNzIsNyBAQAogI2RlZmluZSBSRUdfR1BJT19JT19TRUxfMgkJCTB4MDA2MgogLyogUlRMODcyMyBXSUZJL0JUL0dQUyBNdWx0aS1GdW5jdGlvbiBjb250cm9sIHNvdXJjZS4gKi8KICNkZWZpbmUgUkVHX01VTFRJX0ZVTkNfQ1RSTAkJCTB4MDA2OAorCiAjZGVmaW5lIFJFR19NQ1VGV0RMCQkJCTB4MDA4MAogCiAjZGVmaW5lIFJFR19ITUVCT1hfRVhUXzAJCQkweDAwODgKQEAgLTU0Miw3ICs1NDMsNyBAQAogI2RlZmluZQlJTVJfT0NQSU5UCQkJCUJJVCgxKQogI2RlZmluZQlJTVJfV0xBTk9GRgkJCQlCSVQoMCkKIAotI2RlZmluZQlIV1NFVF9NQVhfU0laRQkJCQkxMjgKKyNkZWZpbmUgRUZVU0VfUkVBTF9DT05URU5UX0xFTgkJCTUxMgogCiAjZGVmaW5lCUVFUFJPTV9ERUZBVUxUX1RTU0kJCQkweDAKICNkZWZpbmUgRUVQUk9NX0RFRkFVTFRfVFhQT1dFUkRJRkYJCTB4MApAQCAtNjU2LDYgKzY1Nyw3IEBACiAjZGVmaW5lCVNUT1BCRQkJCQkJQklUKDEpCiAjZGVmaW5lCVNUT1BCSwkJCQkJQklUKDApCiAKKyNkZWZpbmUJUkNSX0FQUEZDUwkJCQlCSVQoMzEpCiAjZGVmaW5lCVJDUl9BUFBfRkNTCQkJCUJJVCgzMSkKICNkZWZpbmUJUkNSX0FQUF9NSUMJCQkJQklUKDMwKQogI2RlZmluZQlSQ1JfQVBQX0lDVgkJCQlCSVQoMjkpCkBAIC02ODgsNiArNjkwLDcgQEAKIAogI2RlZmluZSBSRUdfVVNCX0lORk8JCQkJMHhGRTE3CiAjZGVmaW5lIFJFR19VU0JfU1BFQ0lBTF9PUFRJT04JCQkweEZFNTUKKwogI2RlZmluZSBSRUdfVVNCX0RNQV9BR0dfVE8JCQkweEZFNUIKICNkZWZpbmUgUkVHX1VTQl9BR0dfVE8JCQkJMHhGRTVDCiAjZGVmaW5lIFJFR19VU0JfQUdHX1RICQkJCTB4RkU1RApAQCAtNzc1LDcgKzc3OCw2IEBACiAKICNkZWZpbmUJQk9PVF9GUk9NX0VFUFJPTQkJCUJJVCg0KQogI2RlZmluZQlFRVBST01fRU4JCQkJQklUKDUpCi0jZGVmaW5lCUVFUFJPTVNFTAkJCQlCT09UX0ZST01fRUVQUk9NCiAKICNkZWZpbmUgQUZFX0JHRU4JCQkJQklUKDApCiAjZGVmaW5lIEFGRV9NQkVOCQkJCUJJVCgxKQpAQCAtOTAxLDI4ICs5MDMsNyBAQAogI2RlZmluZSBCRF9QS0dfU0VMCQkJCUJJVCgyNSkKICNkZWZpbmUgQkRfSENJX1NFTAkJCQlCSVQoMjYpCiAjZGVmaW5lIFRZUEVfSUQJCQkJCUJJVCgyNykKLQotLyogUkVHX0dQSU9fT1VUU1RTIChGb3IgUlRMODcyMyBvbmx5KSAqLwotI2RlZmluZQlFRlNfSENJX1NFTAkJCQkoQklUKDApfEJJVCgxKSkKLSNkZWZpbmUJUEFEX0hDSV9TRUwJCQkJKEJJVCgyKXxCSVQoMykpCi0jZGVmaW5lCUhDSV9TRUwJCQkJCShCSVQoNCl8QklUKDUpKQotI2RlZmluZQlQS0dfU0VMX0hDSQkJCQlCSVQoNikKLSNkZWZpbmUJRkVOX0dQUwkJCQkJQklUKDcpCi0jZGVmaW5lCUZFTl9CVAkJCQkJQklUKDgpCi0jZGVmaW5lCUZFTl9XTAkJCQkJQklUKDkpCi0jZGVmaW5lCUZFTl9QQ0kJCQkJCUJJVCgxMCkKLSNkZWZpbmUJRkVOX1VTQgkJCQkJQklUKDExKQotI2RlZmluZQlCVFJGX0hXUEROX04JCQkJQklUKDEyKQotI2RlZmluZQlXTFJGX0hXUEROX04JCQkJQklUKDEzKQotI2RlZmluZQlQRE5fQlRfTgkJCQlCSVQoMTQpCi0jZGVmaW5lCVBETl9HUFNfTgkJCQlCSVQoMTUpCi0jZGVmaW5lCUJUX0NUTF9IV1BETgkJCQlCSVQoMTYpCi0jZGVmaW5lCUdQU19DVExfSFdQRE4JCQkJQklUKDE3KQotI2RlZmluZQlQUEhZX1NVU0IJCQkJQklUKDIwKQotI2RlZmluZQlVUEhZX1NVU0IJCQkJQklUKDIxKQotI2RlZmluZQlQQ0lfU1VTRU4JCQkJQklUKDIyKQotI2RlZmluZQlVU0JfU1VTRU4JCQkJQklUKDIzKQotI2RlZmluZQlSRl9STF9JRAkJCShCSVQoMzEpIHwgQklUKDMwKSB8IEJJVCgyOSkgfCBCSVQoMjgpKQorI2RlZmluZQlSRl9STF9JRAkJKEJJVCgzMSkgfCBCSVQoMzApIHwgQklUKDI5KSB8IEJJVCgyOCkpCiAKICNkZWZpbmUgQ0hJUF9WRVJfUlRMX01BU0sJCQkweEYwMDAKICNkZWZpbmUgQ0hJUF9WRVJfUlRMX1NISUZUCQkJMTIKQEAgLTEwNzcsNiArMTA1OCw3IEBACiAjZGVmaW5lIF9SQVJGX1JDOCh4KQkJCQkoKCh4KSAmIDB4MUYpIDw8IDI0KQogCiAjZGVmaW5lIEFDX1BBUkFNX1RYT1BfT0ZGU0VUCQkJMTYKKyNkZWZpbmUgQUNfUEFSQU1fVFhPUF9MSU1JVF9PRkZTRVQJCTE2CiAjZGVmaW5lIEFDX1BBUkFNX0VDV19NQVhfT0ZGU0VUCQkJMTIKICNkZWZpbmUgQUNfUEFSQU1fRUNXX01JTl9PRkZTRVQJCQk4CiAjZGVmaW5lIEFDX1BBUkFNX0FJRlNfT0ZGU0VUCQkJMApAQCAtMTIyMSwzNCArMTIwMywxMiBAQAogI2RlZmluZSBFUFJPTV9DTURfQ09ORklHCQkJMHgzCiAjZGVmaW5lIEVQUk9NX0NNRF9MT0FECQkJCTEKIAotI2RlZmluZQlIV1NFVF9NQVhfU0laRV85MlMJCUhXU0VUX01BWF9TSVpFCisjZGVmaW5lCUhXU0VUX01BWF9TSVpFXzkyUwkJCUhXU0VUX01BWF9TSVpFCisKKyNkZWZpbmUJV0xfSFdQRE5fRU4JCQkJQklUKDApCiAKICNkZWZpbmUJSEFMXzgxOTJDX0hXX0dQSU9fV1BTX0JJVAkJQklUKDIpCiAKLS8qIFJFR19NVUxUSV9GVU5DX0NUUkwoRm9yIFJUTDg3MjMgT25seSkgKi8KLS8qIEVuYWJsZSBHUElPWzldIGFzIFdpRmkgSFcgUERuIHNvdXJjZSAqLwotI2RlZmluZQlXTF9IV1BETl9FTgkJCQlCSVQoMCkKLS8qIFdpRmkgSFcgUERuIHBvbGFyaXR5IGNvbnRyb2wgKi8KLSNkZWZpbmUJV0xfSFdQRE5fU0wJCQkJQklUKDEpCi0vKiBXaUZpIGZ1bmN0aW9uIGVuYWJsZSAqLwotI2RlZmluZQlXTF9GVU5DX0VOCQkJCUJJVCgyKQotLyogRW5hYmxlIEdQSU9bOV0gYXMgV2lGaSBSRiBIVyBQRG4gc291cmNlICovCi0jZGVmaW5lCVdMX0hXUk9GX0VOCQkJCUJJVCgzKQotLyogRW5hYmxlIEdQSU9bMTFdIGFzIEJUIEhXIFBEbiBzb3VyY2UgKi8KLSNkZWZpbmUJQlRfSFdQRE5fRU4JCQkJQklUKDE2KQotLyogQlQgSFcgUERuIHBvbGFyaXR5IGNvbnRyb2wgKi8KLSNkZWZpbmUJQlRfSFdQRE5fU0wJCQkJQklUKDE3KQotLyogQlQgZnVuY3Rpb24gZW5hYmxlICovCi0jZGVmaW5lCUJUX0ZVTkNfRU4JCQkJQklUKDE4KQotLyogRW5hYmxlIEdQSU9bMTFdIGFzIEJUL0dQUyBSRiBIVyBQRG4gc291cmNlICovCi0jZGVmaW5lCUJUX0hXUk9GX0VOCQkJCUJJVCgxOSkKLS8qIEVuYWJsZSBHUElPWzEwXSBhcyBHUFMgSFcgUERuIHNvdXJjZSAqLwotI2RlZmluZQlHUFNfSFdQRE5fRU4JCQkJQklUKDIwKQotLyogR1BTIEhXIFBEbiBwb2xhcml0eSBjb250cm9sICovCi0jZGVmaW5lCUdQU19IV1BETl9TTAkJCQlCSVQoMjEpCi0vKiBHUFMgZnVuY3Rpb24gZW5hYmxlICovCi0jZGVmaW5lCUdQU19GVU5DX0VOCQkJCUJJVCgyMikKLQogI2RlZmluZQlSUE1BQ19SRVNFVAkJCQkweDEwMAogI2RlZmluZQlSUE1BQ19UWFNUQVJUCQkJCTB4MTA0CiAjZGVmaW5lCVJQTUFDX1RYTEVHQUNZU0lHCQkJMHgxMDgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3JmLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9yZi5jCmluZGV4IDY2OWIxMTYuLjkwZDBmMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3JmLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvcmYuYwpAQCAtMzQsOSArMzQsOSBAQAogI2luY2x1ZGUgInJmLmgiCiAjaW5jbHVkZSAiZG0uaCIKIAotc3RhdGljIGJvb2wgX3J0bDkyY19waHlfcmY2MDUyX2NvbmZpZ19wYXJhZmlsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CitzdGF0aWMgYm9vbCBfcnRsOTJjZV9waHlfcmY2MDUyX2NvbmZpZ19wYXJhZmlsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAKLXZvaWQgcnRsOTJjX3BoeV9yZjYwNTJfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYmFuZHdpZHRoKQordm9pZCBydGw5MmNlX3BoeV9yZjYwNTJfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggYmFuZHdpZHRoKQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOwpAQCAtNjIsNyArNjIsNyBAQAogfQogCiB2b2lkIHJ0bDkyY2VfcGh5X3JmNjA1Ml9zZXRfY2NrX3R4cG93ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgICAgIHU4ICpwcG93ZXJsZXZlbCkKKwkJCQkJdTggKnBwb3dlcmxldmVsKQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOwpAQCAtMTI4LDggKzEyOCw3IEBACiAKIAl0bXB2YWwgPSB0eF9hZ2NbUkY5MF9QQVRIX0FdID4+IDg7CiAKLQlpZiAobWFjLT5tb2RlID09IFdJUkVMRVNTX01PREVfQikKLQkJdG1wdmFsID0gdG1wdmFsICYgMHhmZjAwZmZmZjsKKwl0bXB2YWwgPSB0bXB2YWwgJiAweGZmMDBmZmZmOwogCiAJcnRsX3NldF9iYnJlZyhodywgUlRYQUdDX0JfQ0NLMTFfQV9DQ0syXzExLCAweGZmZmZmZjAwLCB0bXB2YWwpOwogCkBAIC0yMDIsNyArMjAxLDcgQEAKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKIAlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOwotCXU4IGksIGNobmxncm91cCwgcHdyX2RpZmZfbGltaXRbNF07CisJdTggaSwgY2hubGdyb3VwID0gMCwgcHdyX2RpZmZfbGltaXRbNF07CiAJdTMyIHdyaXRlVmFsLCBjdXN0b21lcl9saW1pdCwgcmY7CiAKIAlmb3IgKHJmID0gMDsgcmYgPCAyOyByZisrKSB7CkBAIC00NDAsMTYgKzQzOSwxNyBAQAogCWVsc2UKIAkJcnRscGh5LT5udW1fdG90YWxfcmZwYXRoID0gMjsKIAotCXJldHVybiBfcnRsOTJjX3BoeV9yZjYwNTJfY29uZmlnX3BhcmFmaWxlKGh3KTsKKwlyZXR1cm4gX3J0bDkyY2VfcGh5X3JmNjA1Ml9jb25maWdfcGFyYWZpbGUoaHcpOworCiB9CiAKLXN0YXRpYyBib29sIF9ydGw5MmNfcGh5X3JmNjA1Ml9jb25maWdfcGFyYWZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCitzdGF0aWMgYm9vbCBfcnRsOTJjZV9waHlfcmY2MDUyX2NvbmZpZ19wYXJhZmlsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKLQl1MzIgdTRfcmVndmFsdWU7CisJdTMyIHU0X3JlZ3ZhbHVlID0gMDsKIAl1OCByZnBhdGg7Ci0JYm9vbCBydHN0YXR1czsKKwlib29sIHJ0c3RhdHVzID0gdHJ1ZTsKIAlzdHJ1Y3QgYmJfcmVnX2RlZiAqcHBoeXJlZzsKIAogCWZvciAocmZwYXRoID0gMDsgcmZwYXRoIDwgcnRscGh5LT5udW1fdG90YWxfcmZwYXRoOyByZnBhdGgrKykgewpAQCAtNDg0LDEyICs0ODQsMTIgQEAKIAogCQlzd2l0Y2ggKHJmcGF0aCkgewogCQljYXNlIFJGOTBfUEFUSF9BOgotCQkJcnRzdGF0dXMgPSBydGw5MmNlX3BoeV9jb25maWdfcmZfd2l0aF9oZWFkZXJmaWxlKGh3LAotCQkJCQkoZW51bSByYWRpb19wYXRoKSByZnBhdGgpOworCQkJcnRzdGF0dXMgPSBydGw5MmNfcGh5X2NvbmZpZ19yZl93aXRoX2hlYWRlcmZpbGUoaHcsCisJCQkJCQkoZW51bSByYWRpb19wYXRoKXJmcGF0aCk7CiAJCQlicmVhazsKIAkJY2FzZSBSRjkwX1BBVEhfQjoKLQkJCXJ0c3RhdHVzID0gcnRsOTJjZV9waHlfY29uZmlnX3JmX3dpdGhfaGVhZGVyZmlsZShodywKLQkJCQkJKGVudW0gcmFkaW9fcGF0aCkgcmZwYXRoKTsKKwkJCXJ0c3RhdHVzID0gcnRsOTJjX3BoeV9jb25maWdfcmZfd2l0aF9oZWFkZXJmaWxlKGh3LAorCQkJCQkJKGVudW0gcmFkaW9fcGF0aClyZnBhdGgpOwogCQkJYnJlYWs7CiAJCWNhc2UgUkY5MF9QQVRIX0M6CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3JmLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9yZi5oCmluZGV4IDNhYTUyMGMuLjM5ZmYwMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3JmLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvcmYuaApAQCAtMzQsMTQgKzM0LDExIEBACiAjZGVmaW5lIFJGNjA1Ml9NQVhfUkVHCQkJMHgzRgogI2RlZmluZSBSRjYwNTJfTUFYX1BBVEgJCQkyCiAKLWV4dGVybiB2b2lkIHJ0bDkyY19waHlfcmY2MDUyX3NldF9iYW5kd2lkdGgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCSAgICB1OCBiYW5kd2lkdGgpOwotZXh0ZXJuIHZvaWQgcnRsOTJjX3BoeV9yZjYwNTJfc2V0X2Nja190eHBvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQkgICAgICB1OCAqcHBvd2VybGV2ZWwpOwotZXh0ZXJuIHZvaWQgcnRsOTJjX3BoeV9yZjYwNTJfc2V0X29mZG1fdHhwb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkJICAgICAgIHU4ICpwcG93ZXJsZXZlbCwgdTggY2hhbm5lbCk7Ci1ib29sIHJ0bDkyY2VfcGh5X3JmNjA1Ml9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwotYm9vbCBydGw5MmNlX3BoeV9jb25maWdfcmZfd2l0aF9oZWFkZXJmaWxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQkgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgpOwotCitleHRlcm4gdm9pZCBydGw5MmNlX3BoeV9yZjYwNTJfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJICAgICB1OCBiYW5kd2lkdGgpOworZXh0ZXJuIHZvaWQgcnRsOTJjZV9waHlfcmY2MDUyX3NldF9jY2tfdHhwb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJICAgICAgIHU4ICpwcG93ZXJsZXZlbCk7CitleHRlcm4gdm9pZCBydGw5MmNlX3BoeV9yZjYwNTJfc2V0X29mZG1fdHhwb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJCXU4ICpwcG93ZXJsZXZlbCwgdTggY2hhbm5lbCk7CitleHRlcm4gYm9vbCBydGw5MmNlX3BoeV9yZjYwNTJfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2Uvc3cuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3N3LmMKaW5kZXggYjFjYzRkNC4uMzkwYmJiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2Uvc3cuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9zdy5jCkBAIC00MiwxMCArNDIsNTggQEAKICNpbmNsdWRlICJ0cnguaCIKICNpbmNsdWRlICJsZWQuaCIKIAorc3RhdGljIHZvaWQgcnRsOTJjX2luaXRfYXNwbV92YXJzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisKKwkvKmNsb3NlIEFTUE0gZm9yIEFNRCBkZWZhdWx0bHkgKi8KKwlydGxwY2ktPmNvbnN0X2FtZHBjaV9hc3BtID0gMDsKKworCS8qCisJICogQVNQTSBQUyBtb2RlLgorCSAqIDAgLSBEaXNhYmxlIEFTUE0sCisJICogMSAtIEVuYWJsZSBBU1BNIHdpdGhvdXQgQ2xvY2sgUmVxLAorCSAqIDIgLSBFbmFibGUgQVNQTSB3aXRoIENsb2NrIFJlcSwKKwkgKiAzIC0gQWx3eWFzIEVuYWJsZSBBU1BNIHdpdGggQ2xvY2sgUmVxLAorCSAqIDQgLSBBbHdheXMgRW5hYmxlIEFTUE0gd2l0aG91dCBDbG9jayBSZXEuCisJICogc2V0IGRlZnVsdCB0byBSVEw4MTkyQ0U6MyBSVEw4MTkyRToyCisJICogKi8KKwlydGxwY2ktPmNvbnN0X3BjaV9hc3BtID0gMzsKKworCS8qU2V0dGluZyBmb3IgUENJLUUgZGV2aWNlICovCisJcnRscGNpLT5jb25zdF9kZXZpY2VwY2lfYXNwbV9zZXR0aW5nID0gMHgwMzsKKworCS8qU2V0dGluZyBmb3IgUENJLUUgYnJpZGdlICovCisJcnRscGNpLT5jb25zdF9ob3N0cGNpX2FzcG1fc2V0dGluZyA9IDB4MDI7CisKKwkvKgorCSAqIEluIEh3L1N3IFJhZGlvIE9mZiBzaXR1YXRpb24uCisJICogMCAtIERlZmF1bHQsCisJICogMSAtIEZyb20gQVNQTSBzZXR0aW5nIHdpdGhvdXQgbG93IE1hYyBQd3IsCisJICogMiAtIEZyb20gQVNQTSBzZXR0aW5nIHdpdGggbG93IE1hYyBQd3IsCisJICogMyAtIEJ1cyBEMworCSAqIHNldCBkZWZhdWx0IHRvIFJUTDgxOTJDRTowIFJUTDgxOTJTRToyCisJICovCisJcnRscGNpLT5jb25zdF9od3N3X3Jmb2ZmX2QzID0gMDsKKworCS8qCisJICogVGhpcyBzZXR0aW5nIHdvcmtzIGZvciB0aG9zZSBkZXZpY2Ugd2l0aAorCSAqIGJhY2tkb29yIEFTUE0gc2V0dGluZyBzdWNoIGFzIEVQSFkgc2V0dGluZy4KKwkgKiAwIC0gTm90IHN1cHBvcnQgQVNQTSwKKwkgKiAxIC0gU3VwcG9ydCBBU1BNLAorCSAqIDIgLSBBY2NvcmRpbmcgdG8gY2hpcHNldC4KKwkgKi8KKwlydGxwY2ktPmNvbnN0X3N1cHBvcnRfcGNpYXNwbSA9IDE7Cit9CisKIGludCBydGw5MmNfaW5pdF9zd192YXJzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogeworCWludCBlcnI7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZTsKKworCXJ0bDgxOTJjZV9idF9yZWdfaW5pdChodyk7CiAKIAlydGxwcml2LT5kbS5kbV9pbml0aWFsZ2Fpbl9lbmFibGUgPSAxOwogCXJ0bHByaXYtPmRtLmRtX2ZsYWcgPSAwOwpAQCAtNTMsNyArMTAxLDEyIEBACiAJcnRscHJpdi0+ZG0udGhlcm1hbHZhbHVlID0gMDsKIAlydGxwY2ktPnRyYW5zbWl0X2NvbmZpZyA9IENGRU5ERk9STSB8IEJJVCgxMikgfCBCSVQoMTMpOwogCi0JcnRscGNpLT5yZWNlaXZlX2NvbmZpZyA9IChSQ1JfQVBQX0ZDUyB8CisJLyogY29tcGF0aWJsZSA1RyBiYW5kIDg4Y2UganVzdCAyLjRHIGJhbmQgJiBzbXNwICovCisJcnRscHJpdi0+cnRsaGFsLmN1cnJlbnRfYmFuZHR5cGUgPSBCQU5EX09OXzJfNEc7CisJcnRscHJpdi0+cnRsaGFsLmJhbmRzZXQgPSBCQU5EX09OXzJfNEc7CisJcnRscHJpdi0+cnRsaGFsLm1hY3BoeW1vZGUgPSBTSU5HTEVNQUNfU0lOR0xFUEhZOworCisJcnRscGNpLT5yZWNlaXZlX2NvbmZpZyA9IChSQ1JfQVBQRkNTIHwKIAkJCQkgIFJDUl9BTUYgfAogCQkJCSAgUkNSX0FERiB8CiAJCQkJICBSQ1JfQVBQX01JQyB8CkBAIC03NiwxMyArMTI5LDQ5IEBACiAKIAlydGxwY2ktPmlycV9tYXNrWzFdID0gKHUzMikgKElNUl9DUFdNIHwgSU1SX0MySENNRCB8IDApOwogCi0JcnRscHJpdi0+cnRsaGFsLnBmaXJtd2FyZSA9ICh1OCAqKSB2bWFsbG9jKDB4NDAwMCk7CisJLyogZm9yIExQUyAmIElQUyAqLworCXJ0bHByaXYtPnBzYy5pbmFjdGl2ZXBzID0gcnRscHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5pbmFjdGl2ZXBzOworCXJ0bHByaXYtPnBzYy5zd2N0cmxfbHBzID0gcnRscHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5zd2N0cmxfbHBzOworCXJ0bHByaXYtPnBzYy5md2N0cmxfbHBzID0gcnRscHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5md2N0cmxfbHBzOworCXJ0bHByaXYtPnBzYy5yZWdfZndjdHJsX2xwcyA9IDM7CisJcnRscHJpdi0+cHNjLnJlZ19tYXhfbHBzX2F3YWtlaW50dmwgPSA1OworCS8qIGZvciBBU1BNLCB5b3UgY2FuIGNsb3NlIGFzcG0gdGhyb3VnaAorCSAqIHNldCBjb25zdF9zdXBwb3J0X3BjaWFzcG0gPSAwICovCisJcnRsOTJjX2luaXRfYXNwbV92YXJzKGh3KTsKKworCWlmIChydGxwcml2LT5wc2MucmVnX2Z3Y3RybF9scHMgPT0gMSkKKwkJcnRscHJpdi0+cHNjLmZ3Y3RybF9wc21vZGUgPSBGV19QU19NSU5fTU9ERTsKKwllbHNlIGlmIChydGxwcml2LT5wc2MucmVnX2Z3Y3RybF9scHMgPT0gMikKKwkJcnRscHJpdi0+cHNjLmZ3Y3RybF9wc21vZGUgPSBGV19QU19NQVhfTU9ERTsKKwllbHNlIGlmIChydGxwcml2LT5wc2MucmVnX2Z3Y3RybF9scHMgPT0gMykKKwkJcnRscHJpdi0+cHNjLmZ3Y3RybF9wc21vZGUgPSBGV19QU19EVElNX01PREU7CisKKwkvKiBmb3IgZmlybXdhcmUgYnVmICovCisJcnRscHJpdi0+cnRsaGFsLnBmaXJtd2FyZSA9IHZ6YWxsb2MoMHg0MDAwKTsKIAlpZiAoIXJ0bHByaXYtPnJ0bGhhbC5wZmlybXdhcmUpIHsKIAkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKIAkJCSAoIkNhbid0IGFsbG9jIGJ1ZmZlciBmb3IgZncuXG4iKSk7CiAJCXJldHVybiAxOwogCX0KIAorCS8qIHJlcXVlc3QgZncgKi8KKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZmaXJtd2FyZSwgcnRscHJpdi0+Y2ZnLT5md19uYW1lLAorCQkJcnRscHJpdi0+aW8uZGV2KTsKKwlpZiAoZXJyKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkgKCJGYWlsZWQgdG8gcmVxdWVzdCBmaXJtd2FyZSFcbiIpKTsKKwkJcmV0dXJuIDE7CisJfQorCWlmIChmaXJtd2FyZS0+c2l6ZSA+IDB4NDAwMCkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgiRmlybXdhcmUgaXMgdG9vIGJpZyFcbiIpKTsKKwkJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7CisJCXJldHVybiAxOworCX0KKwltZW1jcHkocnRscHJpdi0+cnRsaGFsLnBmaXJtd2FyZSwgZmlybXdhcmUtPmRhdGEsIGZpcm13YXJlLT5zaXplKTsKKwlydGxwcml2LT5ydGxoYWwuZndzaXplID0gZmlybXdhcmUtPnNpemU7CisJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTAzLDE3ICsxOTIsMTkgQEAKIAkuaW50ZXJydXB0X3JlY29nbml6ZWQgPSBydGw5MmNlX2ludGVycnVwdF9yZWNvZ25pemVkLAogCS5od19pbml0ID0gcnRsOTJjZV9od19pbml0LAogCS5od19kaXNhYmxlID0gcnRsOTJjZV9jYXJkX2Rpc2FibGUsCisJLmh3X3N1c3BlbmQgPSBydGw5MmNlX3N1c3BlbmQsCisJLmh3X3Jlc3VtZSA9IHJ0bDkyY2VfcmVzdW1lLAogCS5lbmFibGVfaW50ZXJydXB0ID0gcnRsOTJjZV9lbmFibGVfaW50ZXJydXB0LAogCS5kaXNhYmxlX2ludGVycnVwdCA9IHJ0bDkyY2VfZGlzYWJsZV9pbnRlcnJ1cHQsCiAJLnNldF9uZXR3b3JrX3R5cGUgPSBydGw5MmNlX3NldF9uZXR3b3JrX3R5cGUsCisJLnNldF9jaGtfYnNzaWQgPSBydGw5MmNlX3NldF9jaGVja19ic3NpZCwKIAkuc2V0X3FvcyA9IHJ0bDkyY2Vfc2V0X3FvcywKIAkuc2V0X2Jjbl9yZWcgPSBydGw5MmNlX3NldF9iZWFjb25fcmVsYXRlZF9yZWdpc3RlcnMsCiAJLnNldF9iY25faW50diA9IHJ0bDkyY2Vfc2V0X2JlYWNvbl9pbnRlcnZhbCwKIAkudXBkYXRlX2ludGVycnVwdF9tYXNrID0gcnRsOTJjZV91cGRhdGVfaW50ZXJydXB0X21hc2ssCiAJLmdldF9od19yZWcgPSBydGw5MmNlX2dldF9od19yZWcsCiAJLnNldF9od19yZWcgPSBydGw5MmNlX3NldF9od19yZWcsCi0JLnVwZGF0ZV9yYXRlX3RhYmxlID0gcnRsOTJjZV91cGRhdGVfaGFsX3JhdGVfdGFibGUsCi0JLnVwZGF0ZV9yYXRlX21hc2sgPSBydGw5MmNlX3VwZGF0ZV9oYWxfcmF0ZV9tYXNrLAorCS51cGRhdGVfcmF0ZV90YmwgPSBydGw5MmNlX3VwZGF0ZV9oYWxfcmF0ZV90YmwsCiAJLmZpbGxfdHhfZGVzYyA9IHJ0bDkyY2VfdHhfZmlsbF9kZXNjLAogCS5maWxsX3R4X2NtZGRlc2MgPSBydGw5MmNlX3R4X2ZpbGxfY21kZGVzYywKIAkucXVlcnlfcnhfZGVzYyA9IHJ0bDkyY2VfcnhfcXVlcnlfZGVzYywKQEAgLTEyMyw3ICsyMTQsNyBAQAogCS5zd2l0Y2hfY2hhbm5lbCA9IHJ0bDkyY19waHlfc3dfY2hubCwKIAkuZG1fd2F0Y2hkb2cgPSBydGw5MmNfZG1fd2F0Y2hkb2csCiAJLnNjYW5fb3BlcmF0aW9uX2JhY2t1cCA9IHJ0bDkyY19waHlfc2Nhbl9vcGVyYXRpb25fYmFja3VwLAotCS5zZXRfcmZfcG93ZXJfc3RhdGUgPSBydGw5MmNlX3BoeV9zZXRfcmZfcG93ZXJfc3RhdGUsCisJLnNldF9yZl9wb3dlcl9zdGF0ZSA9IHJ0bDkyY19waHlfc2V0X3JmX3Bvd2VyX3N0YXRlLAogCS5sZWRfY29udHJvbCA9IHJ0bDkyY2VfbGVkX2NvbnRyb2wsCiAJLnNldF9kZXNjID0gcnRsOTJjZV9zZXRfZGVzYywKIAkuZ2V0X2Rlc2MgPSBydGw5MmNlX2dldF9kZXNjLApAQCAtMTMxLDI3ICsyMjIsMjkgQEAKIAkuZW5hYmxlX2h3X3NlYyA9IHJ0bDkyY2VfZW5hYmxlX2h3X3NlY3VyaXR5X2NvbmZpZywKIAkuc2V0X2tleSA9IHJ0bDkyY2Vfc2V0X2tleSwKIAkuaW5pdF9zd19sZWRzID0gcnRsOTJjZV9pbml0X3N3X2xlZHMsCi0JLmRlaW5pdF9zd19sZWRzID0gcnRsOTJjZV9kZWluaXRfc3dfbGVkcywKIAkuZ2V0X2JicmVnID0gcnRsOTJjX3BoeV9xdWVyeV9iYl9yZWcsCiAJLnNldF9iYnJlZyA9IHJ0bDkyY19waHlfc2V0X2JiX3JlZywKLQkuZ2V0X3JmcmVnID0gcnRsOTJjZV9waHlfcXVlcnlfcmZfcmVnLAogCS5zZXRfcmZyZWcgPSBydGw5MmNlX3BoeV9zZXRfcmZfcmVnLAotCS5jbWRfc2VuZF9wYWNrZXQgPSBfcnRsOTJjX2NtZF9zZW5kX3BhY2tldCwKKwkuZ2V0X3JmcmVnID0gcnRsOTJjX3BoeV9xdWVyeV9yZl9yZWcsCiAJLnBoeV9yZjYwNTJfY29uZmlnID0gcnRsOTJjZV9waHlfcmY2MDUyX2NvbmZpZywKIAkucGh5X3JmNjA1Ml9zZXRfY2NrX3R4cG93ZXIgPSBydGw5MmNlX3BoeV9yZjYwNTJfc2V0X2Nja190eHBvd2VyLAogCS5waHlfcmY2MDUyX3NldF9vZmRtX3R4cG93ZXIgPSBydGw5MmNlX3BoeV9yZjYwNTJfc2V0X29mZG1fdHhwb3dlciwKIAkuY29uZmlnX2JiX3dpdGhfaGVhZGVyZmlsZSA9IF9ydGw5MmNlX3BoeV9jb25maWdfYmJfd2l0aF9oZWFkZXJmaWxlLAogCS5jb25maWdfYmJfd2l0aF9wZ2hlYWRlcmZpbGUgPSBfcnRsOTJjZV9waHlfY29uZmlnX2JiX3dpdGhfcGdoZWFkZXJmaWxlLAogCS5waHlfbGNfY2FsaWJyYXRlID0gX3J0bDkyY2VfcGh5X2xjX2NhbGlicmF0ZSwKLQkucGh5X3NldF9id19tb2RlX2NhbGxiYWNrID0gcnRsOTJjZV9waHlfc2V0X2J3X21vZGVfY2FsbGJhY2ssCiAJLmRtX2R5bmFtaWNfdHhwb3dlciA9IHJ0bDkyY2VfZG1fZHluYW1pY190eHBvd2VyLAogfTsKIAogc3RhdGljIHN0cnVjdCBydGxfbW9kX3BhcmFtcyBydGw5MmNlX21vZF9wYXJhbXMgPSB7Ci0JLnN3X2NyeXB0byA9IDAsCisJLnN3X2NyeXB0byA9IGZhbHNlLAorCS5pbmFjdGl2ZXBzID0gdHJ1ZSwKKwkuc3djdHJsX2xwcyA9IGZhbHNlLAorCS5md2N0cmxfbHBzID0gdHJ1ZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcnRsX2hhbF9jZmcgcnRsOTJjZV9oYWxfY2ZnID0geworCS5iYXJfaWQgPSAyLAorCS53cml0ZV9yZWFkYmFjayA9IHRydWUsCiAJLm5hbWUgPSAicnRsOTJjX3BjaSIsCiAJLmZ3X25hbWUgPSAicnRsd2lmaS9ydGw4MTkyY2Z3LmJpbiIsCiAJLm9wcyA9ICZydGw4MTkyY2VfaGFsX29wcywKQEAgLTE3NSw2ICsyNjgsOCBAQAogCS5tYXBzW0VGVVNFX0xPQURFUl9DTEtfRU5dID0gTE9BREVSX0NMS19FTiwKIAkubWFwc1tFRlVTRV9BTkE4TV0gPSBFRlVTRV9BTkE4TSwKIAkubWFwc1tFRlVTRV9IV1NFVF9NQVhfU0laRV0gPSBIV1NFVF9NQVhfU0laRSwKKwkubWFwc1tFRlVTRV9NQVhfU0VDVElPTl9NQVBdID0gRUZVU0VfTUFYX1NFQ1RJT04sCisJLm1hcHNbRUZVU0VfUkVBTF9DT05URU5UX1NJWkVdID0gRUZVU0VfUkVBTF9DT05URU5UX0xFTiwKIAogCS5tYXBzW1JXQ0FNXSA9IFJFR19DQU1DTUQsCiAJLm1hcHNbV0NBTUldID0gUkVHX0NBTVdSSVRFLApAQCAtMjM5LDcgKzMzNCw3IEBACiAJLm1hcHNbUlRMX1JDX0hUX1JBVEVNQ1MxNV0gPSBERVNDOTJDX1JBVEVNQ1MxNSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydGw5MmNlX3BjaV9pZHNbXSBfX2RldmluaXRkYXRhID0geworREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocnRsOTJjZV9wY2lfaWRzKSA9IHsKIAl7UlRMX1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9SRUFMVEVLLCAweDgxOTEsIHJ0bDkyY2VfaGFsX2NmZyl9LAogCXtSVExfUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JFQUxURUssIDB4ODE3OCwgcnRsOTJjZV9oYWxfY2ZnKX0sCiAJe1JUTF9QQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUkVBTFRFSywgMHg4MTc3LCBydGw5MmNlX2hhbF9jZmcpfSwKQEAgLTI1Nyw3ICszNTIsMTMgQEAKIE1PRFVMRV9GSVJNV0FSRSgicnRsd2lmaS9ydGw4MTkyY2Z3LmJpbiIpOwogCiBtb2R1bGVfcGFyYW1fbmFtZWQoc3dlbmMsIHJ0bDkyY2VfbW9kX3BhcmFtcy5zd19jcnlwdG8sIGJvb2wsIDA0NDQpOworbW9kdWxlX3BhcmFtX25hbWVkKGlwcywgcnRsOTJjZV9tb2RfcGFyYW1zLmluYWN0aXZlcHMsIGJvb2wsIDA0NDQpOworbW9kdWxlX3BhcmFtX25hbWVkKHN3bHBzLCBydGw5MmNlX21vZF9wYXJhbXMuc3djdHJsX2xwcywgYm9vbCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fbmFtZWQoZndscHMsIHJ0bDkyY2VfbW9kX3BhcmFtcy5md2N0cmxfbHBzLCBib29sLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0Moc3dlbmMsICJ1c2luZyBoYXJkd2FyZSBjcnlwdG8gKGRlZmF1bHQgMCBbaGFyZHdhcmVdKVxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGlwcywgInVzaW5nIG5vIGxpbmsgcG93ZXIgc2F2ZSAoZGVmYXVsdCAxIGlzIG9wZW4pXG4iKTsKK01PRFVMRV9QQVJNX0RFU0MoZndscHMsICJ1c2luZyBsaW5rZWQgZncgY29udHJvbCBwb3dlciBzYXZlICIKKwkJICIoZGVmYXVsdCAxIGlzIG9wZW4pXG4iKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJ0bDkyY2VfZHJpdmVyID0gewogCS5uYW1lID0gS0JVSUxEX01PRE5BTUUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9zdy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2Uvc3cuaAppbmRleCAzNmU2NTc2Li5iN2RjMzI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9zdy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3N3LmgKQEAgLTMzLDE5ICszMyw5IEBACiBpbnQgcnRsOTJjX2luaXRfc3dfdmFycyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiB2b2lkIHJ0bDkyY19kZWluaXRfc3dfdmFycyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiB2b2lkIHJ0bDkyY19pbml0X3Zhcl9tYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwotYm9vbCBfcnRsOTJjX2NtZF9zZW5kX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci12b2lkIHJ0bDkyY2VfcGh5X3JmNjA1Ml9zZXRfY2NrX3R4cG93ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCXU4ICpwcG93ZXJsZXZlbCk7Ci12b2lkIHJ0bDkyY2VfcGh5X3JmNjA1Ml9zZXRfb2ZkbV90eHBvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQkgdTggKnBwb3dlcmxldmVsLCB1OCBjaGFubmVsKTsKIGJvb2wgX3J0bDkyY2VfcGh5X2NvbmZpZ19iYl93aXRoX2hlYWRlcmZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCQkgIHU4IGNvbmZpZ3R5cGUpOworCQkJCQkgICAgdTggY29uZmlndHlwZSk7CiBib29sIF9ydGw5MmNlX3BoeV9jb25maWdfYmJfd2l0aF9wZ2hlYWRlcmZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCQkgICAgdTggY29uZmlndHlwZSk7Ci12b2lkIF9ydGw5MmNlX3BoeV9sY19jYWxpYnJhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgaXMydCk7Ci11MzIgcnRsOTJjZV9waHlfcXVlcnlfcmZfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsIHUzMiByZWdhZGRyLCB1MzIgYml0bWFzayk7Ci12b2lkIHJ0bDkyY2VfcGh5X3NldF9id19tb2RlX2NhbGxiYWNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwkJCQkJICAgICAgdTggY29uZmlndHlwZSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvdHJ4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS90cnguYwppbmRleCBhYTJiNTgxLi41NGIyYmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS90cnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS90cnguYwpAQCAtMzYsNDIgKzM2LDE2IEBACiAjaW5jbHVkZSAidHJ4LmgiCiAjaW5jbHVkZSAibGVkLmgiCiAKLXN0YXRpYyBlbnVtIHJ0bF9kZXNjX3FzZWwgX3J0bDkyY2VfbWFwX2h3cXVldWVfdG9fZndxdWV1ZShfX2xlMTYgZmMsCi0JCQkJCQkJICB1bnNpZ25lZCBpbnQKLQkJCQkJCQkgIHNrYl9xdWV1ZSkKK3N0YXRpYyB1OCBfcnRsOTJjZV9tYXBfaHdxdWV1ZV90b19md3F1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHU4IGh3X3F1ZXVlKQogewotCWVudW0gcnRsX2Rlc2NfcXNlbCBxc2VsOworCV9fbGUxNiBmYyA9IHJ0bF9nZXRfZmMoc2tiKTsKIAotCWlmICh1bmxpa2VseShpZWVlODAyMTFfaXNfYmVhY29uKGZjKSkpIHsKLQkJcXNlbCA9IFFTTFRfQkVBQ09OOwotCQlyZXR1cm4gcXNlbDsKLQl9CisJaWYgKHVubGlrZWx5KGllZWU4MDIxMV9pc19iZWFjb24oZmMpKSkKKwkJcmV0dXJuIFFTTFRfQkVBQ09OOworCWlmIChpZWVlODAyMTFfaXNfbWdtdChmYykpCisJCXJldHVybiBRU0xUX01HTlQ7CiAKLQlpZiAoaWVlZTgwMjExX2lzX21nbXQoZmMpKSB7Ci0JCXFzZWwgPSBRU0xUX01HTlQ7Ci0JCXJldHVybiBxc2VsOwotCX0KLQotCXN3aXRjaCAoc2tiX3F1ZXVlKSB7Ci0JY2FzZSBWT19RVUVVRToKLQkJcXNlbCA9IFFTTFRfVk87Ci0JCWJyZWFrOwotCWNhc2UgVklfUVVFVUU6Ci0JCXFzZWwgPSBRU0xUX1ZJOwotCQlicmVhazsKLQljYXNlIEJFX1FVRVVFOgotCQlxc2VsID0gUVNMVF9CRTsKLQkJYnJlYWs7Ci0JY2FzZSBCS19RVUVVRToKLQkJcXNlbCA9IFFTTFRfQks7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXFzZWwgPSBRU0xUX0JFOwotCQlSVF9BU1NFUlQoZmFsc2UsICgiQkUgcXVldWUsIHNrYl9xdWV1ZTolZCwiCi0JCQkJICAiIHNldCBxc2VsID0gMHglWFxuIiwgc2tiX3F1ZXVlLCBRU0xUX0JFKSk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gcXNlbDsKKwlyZXR1cm4gc2tiLT5wcmlvcml0eTsKIH0KIAogc3RhdGljIGludCBfcnRsOTJjZV9yYXRlX21hcHBpbmcoYm9vbCBpc2h0LCB1OCBkZXNjX3JhdGUsIGJvb2wgZmlyc3RfYW1wZHUpCkBAIC0yNTUsNiArMjI5LDcgQEAKIAl1OCBldm0sIHB3ZGJfYWxsLCByZl9yeF9udW0gPSAwOwogCXU4IGksIG1heF9zcGF0aWFsX3N0cmVhbTsKIAl1MzIgcnNzaSwgdG90YWxfcnNzaSA9IDA7CisJYm9vbCBpbl9wb3dlcnNhdmVtb2RlID0gZmFsc2U7CiAJYm9vbCBpc19jY2tfcmF0ZTsKIAogCWlzX2Nja19yYXRlID0gUlhfSEFMX0lTX0NDS19SQVRFKHBkZXNjKTsKQEAgLTI3MCw5ICsyNDUsMTMgQEAKIAkJdTggcmVwb3J0LCBjY2tfaGlnaHB3cjsKIAkJY2NrX2J1ZiA9IChzdHJ1Y3QgcGh5X3N0c19jY2tfODE5MnNfdCAqKXBfZHJ2aW5mbzsKIAotCQljY2tfaGlnaHB3ciA9ICh1OCkgcnRsX2dldF9iYnJlZyhodywKLQkJCQkJIFJGUEdBMF9YQV9IU1NJUEFSQU1FVEVSMiwKLQkJCQkJIEJJVCg5KSk7CisJCWlmICghaW5fcG93ZXJzYXZlbW9kZSkKKwkJCWNja19oaWdocHdyID0gKHU4KSBydGxfZ2V0X2JicmVnKGh3LAorCQkJCQkJIFJGUEdBMF9YQV9IU1NJUEFSQU1FVEVSMiwKKwkJCQkJCSBCSVQoOSkpOworCQllbHNlCisJCQljY2tfaGlnaHB3ciA9IGZhbHNlOworCiAJCWlmICghY2NrX2hpZ2hwd3IpIHsKIAkJCXU4IGNja19hZ2NfcnB0ID0gY2NrX2J1Zi0+Y2NrX2FnY19ycHQ7CiAJCQlyZXBvcnQgPSBjY2tfYnVmLT5jY2tfYWdjX3JwdCAmIDB4YzA7CkBAIC0zOTgsNiArMzc3LDcgQEAKIAogCQlpZiAocnRscHJpdi0+c3RhdHMudWlfcnNzaS50b3RhbF9udW0rKyA+PQogCQkgICAgUEhZX1JTU0lfU0xJRF9XSU5fTUFYKSB7CisKIAkJCXJ0bHByaXYtPnN0YXRzLnVpX3Jzc2kudG90YWxfbnVtID0KIAkJCSAgICBQSFlfUlNTSV9TTElEX1dJTl9NQVg7CiAJCQlsYXN0X3Jzc2kgPQpAQCAtNDI0LDEwICs0MDQsNiBAQAogCWlmICghcHN0YXRzLT5pc19jY2sgJiYgcHN0YXRzLT5wYWNrZXRfdG9zZWxmKSB7CiAJCWZvciAocmZwYXRoID0gUkY5MF9QQVRIX0E7IHJmcGF0aCA8IHJ0bHBoeS0+bnVtX3RvdGFsX3JmcGF0aDsKIAkJICAgICByZnBhdGgrKykgewotCi0JCQlpZiAoIXJ0bDgxOTJfcGh5X2NoZWNrX2lzX2xlZ2FsX3JmcGF0aChodywgcmZwYXRoKSkKLQkJCQljb250aW51ZTsKLQogCQkJaWYgKHJ0bHByaXYtPnN0YXRzLnJ4X3Jzc2lfcGVyY2VudGFnZVtyZnBhdGhdID09IDApIHsKIAkJCQlydGxwcml2LT5zdGF0cy5yeF9yc3NpX3BlcmNlbnRhZ2VbcmZwYXRoXSA9CiAJCQkJICAgIHBzdGF0cy0+cnhfbWltb19zaWduYWxzdHJlbmd0aFtyZnBhdGhdOwpAQCAtNzIzLDcgKzY5OSw3IEBACiB2b2lkIHJ0bDkyY2VfdHhfZmlsbF9kZXNjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCB1OCAqcGRlc2NfdHgsCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgdW5zaWduZWQgaW50IHF1ZXVlX2luZGV4KQorCQkJICB1OCBod19xdWV1ZSwgc3RydWN0IHJ0bF90Y2JfZGVzYyAqdGNiX2Rlc2MpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CkBAIC03MzIsMTYgKzcwOCw5IEBACiAJYm9vbCBkZWZhdWx0YWRhcHRlciA9IHRydWU7CiAJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKIAl1OCAqcGRlc2MgPSAodTggKikgcGRlc2NfdHg7Ci0Jc3RydWN0IHJ0bF90Y2JfZGVzYyB0Y2JfZGVzYzsKLQl1OCAqcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKLQl1OCB0aWQgPSBxY1swXSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOwogCXUxNiBzZXFfbnVtYmVyOwogCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKLQl1OCByYXRlX2ZsYWcgPSBpbmZvLT5jb250cm9sLnJhdGVzWzBdLmZsYWdzOwotCi0JZW51bSBydGxfZGVzY19xc2VsIGZ3X3FzZWwgPQotCSAgICBfcnRsOTJjZV9tYXBfaHdxdWV1ZV90b19md3F1ZXVlKGZjLCBxdWV1ZV9pbmRleCk7Ci0KKwl1OCBmd19xc2VsID0gX3J0bDkyY2VfbWFwX2h3cXVldWVfdG9fZndxdWV1ZShza2IsIGh3X3F1ZXVlKTsKIAlib29sIGZpcnN0c2VnID0gKChoZHItPnNlcV9jdHJsICYKIAkJCSAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NDVExfRlJBRykpID09IDApOwogCkBAIC03NTEsNTYgKzcyMCw2OCBAQAogCWRtYV9hZGRyX3QgbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKHJ0bHBjaS0+cGRldiwKIAkJCQkJICAgIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCiAJCQkJCSAgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwl1OCBid180MCA9IDA7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJc3RhID0gZ2V0X3N0YShodywgbWFjLT52aWYsIG1hYy0+YnNzaWQpOworCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCWJ3XzQwID0gbWFjLT5id180MDsKKwl9IGVsc2UgaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CisJCW1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCWlmIChzdGEpCisJCQlid180MCA9IHN0YS0+aHRfY2FwLmNhcCAmCisJCQkJSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDA7CisJfQogCiAJc2VxX251bWJlciA9IChsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKSAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNDsKIAotCXJ0bF9nZXRfdGNiX2Rlc2MoaHcsIGluZm8sIHNrYiwgJnRjYl9kZXNjKTsKKwlydGxfZ2V0X3RjYl9kZXNjKGh3LCBpbmZvLCBzdGEsIHNrYiwgdGNiX2Rlc2MpOwogCiAJQ0xFQVJfUENJX1RYX0RFU0NfQ09OVEVOVChwZGVzYywgc2l6ZW9mKHN0cnVjdCB0eF9kZXNjXzkyYykpOwogCisJaWYgKGllZWU4MDIxMV9pc19udWxsZnVuYyhmYykgfHwgaWVlZTgwMjExX2lzX2N0bChmYykpIHsKKwkJZmlyc3RzZWcgPSB0cnVlOworCQlsYXN0c2VnID0gdHJ1ZTsKKwl9CiAJaWYgKGZpcnN0c2VnKSB7CiAJCVNFVF9UWF9ERVNDX09GRlNFVChwZGVzYywgVVNCX0hXREVTQ19IRUFERVJfTEVOKTsKIAotCQlTRVRfVFhfREVTQ19UWF9SQVRFKHBkZXNjLCB0Y2JfZGVzYy5od19yYXRlKTsKKwkJU0VUX1RYX0RFU0NfVFhfUkFURShwZGVzYywgdGNiX2Rlc2MtPmh3X3JhdGUpOwogCi0JCWlmICh0Y2JfZGVzYy51c2Vfc2hvcnRnaSB8fCB0Y2JfZGVzYy51c2Vfc2hvcnRwcmVhbWJsZSkKKwkJaWYgKHRjYl9kZXNjLT51c2Vfc2hvcnRnaSB8fCB0Y2JfZGVzYy0+dXNlX3Nob3J0cHJlYW1ibGUpCiAJCQlTRVRfVFhfREVTQ19EQVRBX1NIT1JUR0kocGRlc2MsIDEpOwogCi0JCWlmIChtYWMtPnRpZHNbdGlkXS5hZ2cuYWdnX3N0YXRlID09IFJUTF9BR0dfT04gJiYKLQkJICAgIGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkgeworCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSB7CiAJCQlTRVRfVFhfREVTQ19BR0dfQlJFQUsocGRlc2MsIDEpOwogCQkJU0VUX1RYX0RFU0NfTUFYX0FHR19OVU0ocGRlc2MsIDB4MTQpOwogCQl9CiAJCVNFVF9UWF9ERVNDX1NFUShwZGVzYywgc2VxX251bWJlcik7CiAKLQkJU0VUX1RYX0RFU0NfUlRTX0VOQUJMRShwZGVzYywgKCh0Y2JfZGVzYy5ydHNfZW5hYmxlICYmCi0JCQkJCQkhdGNiX2Rlc2MuCisJCVNFVF9UWF9ERVNDX1JUU19FTkFCTEUocGRlc2MsICgodGNiX2Rlc2MtPnJ0c19lbmFibGUgJiYKKwkJCQkJCSF0Y2JfZGVzYy0+CiAJCQkJCQljdHNfZW5hYmxlKSA/IDEgOiAwKSk7CiAJCVNFVF9UWF9ERVNDX0hXX1JUU19FTkFCTEUocGRlc2MsCi0JCQkJCSAgKCh0Y2JfZGVzYy5ydHNfZW5hYmxlCi0JCQkJCSAgICB8fCB0Y2JfZGVzYy5jdHNfZW5hYmxlKSA/IDEgOiAwKSk7Ci0JCVNFVF9UWF9ERVNDX0NUUzJTRUxGKHBkZXNjLCAoKHRjYl9kZXNjLmN0c19lbmFibGUpID8gMSA6IDApKTsKLQkJU0VUX1RYX0RFU0NfUlRTX1NUQkMocGRlc2MsICgodGNiX2Rlc2MucnRzX3N0YmMpID8gMSA6IDApKTsKKwkJCQkJICAoKHRjYl9kZXNjLT5ydHNfZW5hYmxlCisJCQkJCSAgICB8fCB0Y2JfZGVzYy0+Y3RzX2VuYWJsZSkgPyAxIDogMCkpOworCQlTRVRfVFhfREVTQ19DVFMyU0VMRihwZGVzYywgKCh0Y2JfZGVzYy0+Y3RzX2VuYWJsZSkgPyAxIDogMCkpOworCQlTRVRfVFhfREVTQ19SVFNfU1RCQyhwZGVzYywgKCh0Y2JfZGVzYy0+cnRzX3N0YmMpID8gMSA6IDApKTsKIAotCQlTRVRfVFhfREVTQ19SVFNfUkFURShwZGVzYywgdGNiX2Rlc2MucnRzX3JhdGUpOworCQlTRVRfVFhfREVTQ19SVFNfUkFURShwZGVzYywgdGNiX2Rlc2MtPnJ0c19yYXRlKTsKIAkJU0VUX1RYX0RFU0NfUlRTX0JXKHBkZXNjLCAwKTsKLQkJU0VUX1RYX0RFU0NfUlRTX1NDKHBkZXNjLCB0Y2JfZGVzYy5ydHNfc2MpOworCQlTRVRfVFhfREVTQ19SVFNfU0MocGRlc2MsIHRjYl9kZXNjLT5ydHNfc2MpOwogCQlTRVRfVFhfREVTQ19SVFNfU0hPUlQocGRlc2MsCi0JCQkJICAgICAgKCh0Y2JfZGVzYy5ydHNfcmF0ZSA8PSBERVNDOTJDX1JBVEU1NE0pID8KLQkJCQkgICAgICAodGNiX2Rlc2MucnRzX3VzZV9zaG9ydHByZWFtYmxlID8gMSA6IDApCi0JCQkJICAgICAgOiAodGNiX2Rlc2MucnRzX3VzZV9zaG9ydGdpID8gMSA6IDApKSk7CisJCQkJICAgICAgKCh0Y2JfZGVzYy0+cnRzX3JhdGUgPD0gREVTQzkyQ19SQVRFNTRNKSA/CisJCQkJICAgICAgICh0Y2JfZGVzYy0+cnRzX3VzZV9zaG9ydHByZWFtYmxlID8gMSA6IDApCisJCQkJICAgICAgIDogKHRjYl9kZXNjLT5ydHNfdXNlX3Nob3J0Z2kgPyAxIDogMCkpKTsKIAotCQlpZiAobWFjLT5id180MCkgewotCQkJaWYgKHRjYl9kZXNjLnBhY2tldF9idykgeworCQlpZiAoYndfNDApIHsKKwkJCWlmICh0Y2JfZGVzYy0+cGFja2V0X2J3KSB7CiAJCQkJU0VUX1RYX0RFU0NfREFUQV9CVyhwZGVzYywgMSk7CiAJCQkJU0VUX1RYX0RFU0NfVFhfU1VCX0NBUlJJRVIocGRlc2MsIDMpOwogCQkJfSBlbHNlIHsKIAkJCQlTRVRfVFhfREVTQ19EQVRBX0JXKHBkZXNjLCAwKTsKLQotCQkJCWlmIChyYXRlX2ZsYWcgJiBJRUVFODAyMTFfVFhfUkNfRFVQX0RBVEEpIHsKLQkJCQkJU0VUX1RYX0RFU0NfVFhfU1VCX0NBUlJJRVIocGRlc2MsCi0JCQkJCQkJbWFjLT5jdXJfNDBfcHJpbWVfc2MpOwotCQkJCX0KKwkJCQlTRVRfVFhfREVTQ19UWF9TVUJfQ0FSUklFUihwZGVzYywKKwkJCQkJCSBtYWMtPmN1cl80MF9wcmltZV9zYyk7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlTRVRfVFhfREVTQ19EQVRBX0JXKHBkZXNjLCAwKTsKQEAgLTgxMCwxMyArNzkxLDEwIEBACiAJCVNFVF9UWF9ERVNDX0xJTklQKHBkZXNjLCAwKTsKIAkJU0VUX1RYX0RFU0NfUEtUX1NJWkUocGRlc2MsICh1MTYpIHNrYi0+bGVuKTsKIAotCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YShtYWMtPnZpZiwgbWFjLT5ic3NpZCk7CiAJCWlmIChzdGEpIHsKIAkJCXU4IGFtcGR1X2RlbnNpdHkgPSBzdGEtPmh0X2NhcC5hbXBkdV9kZW5zaXR5OwogCQkJU0VUX1RYX0RFU0NfQU1QRFVfREVOU0lUWShwZGVzYywgYW1wZHVfZGVuc2l0eSk7CiAJCX0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5KSB7CiAJCQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mID0KQEAgLTg0NCw3ICs4MjIsNyBAQAogCQlTRVRfVFhfREVTQ19EQVRBX1JBVEVfRkJfTElNSVQocGRlc2MsIDB4MUYpOwogCQlTRVRfVFhfREVTQ19SVFNfUkFURV9GQl9MSU1JVChwZGVzYywgMHhGKTsKIAkJU0VUX1RYX0RFU0NfRElTQUJMRV9GQihwZGVzYywgMCk7Ci0JCVNFVF9UWF9ERVNDX1VTRV9SQVRFKHBkZXNjLCB0Y2JfZGVzYy51c2VfZHJpdmVyX3JhdGUgPyAxIDogMCk7CisJCVNFVF9UWF9ERVNDX1VTRV9SQVRFKHBkZXNjLCB0Y2JfZGVzYy0+dXNlX2RyaXZlcl9yYXRlID8gMSA6IDApOwogCiAJCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7CiAJCQlpZiAobWFjLT5yZGdfZW4pIHsKQEAgLTg1NSwyNCArODMzLDI0IEBACiAJCQl9CiAJCX0KIAl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlTRVRfVFhfREVTQ19GSVJTVF9TRUcocGRlc2MsIChmaXJzdHNlZyA/IDEgOiAwKSk7CiAJU0VUX1RYX0RFU0NfTEFTVF9TRUcocGRlc2MsIChsYXN0c2VnID8gMSA6IDApKTsKIAogCVNFVF9UWF9ERVNDX1RYX0JVRkZFUl9TSVpFKHBkZXNjLCAodTE2KSBza2ItPmxlbik7CiAKLQlTRVRfVFhfREVTQ19UWF9CVUZGRVJfQUREUkVTUyhwZGVzYywgY3B1X3RvX2xlMzIobWFwcGluZykpOworCVNFVF9UWF9ERVNDX1RYX0JVRkZFUl9BRERSRVNTKHBkZXNjLCBtYXBwaW5nKTsKIAogCWlmIChydGxwcml2LT5kbS51c2VyYW1hc2spIHsKLQkJU0VUX1RYX0RFU0NfUkFURV9JRChwZGVzYywgdGNiX2Rlc2MucmF0cl9pbmRleCk7Ci0JCVNFVF9UWF9ERVNDX01BQ0lEKHBkZXNjLCB0Y2JfZGVzYy5tYWNfaWQpOworCQlTRVRfVFhfREVTQ19SQVRFX0lEKHBkZXNjLCB0Y2JfZGVzYy0+cmF0cl9pbmRleCk7CisJCVNFVF9UWF9ERVNDX01BQ0lEKHBkZXNjLCB0Y2JfZGVzYy0+bWFjX2lkKTsKIAl9IGVsc2UgewotCQlTRVRfVFhfREVTQ19SQVRFX0lEKHBkZXNjLCAweEMgKyB0Y2JfZGVzYy5yYXRyX2luZGV4KTsKLQkJU0VUX1RYX0RFU0NfTUFDSUQocGRlc2MsIHRjYl9kZXNjLnJhdHJfaW5kZXgpOworCQlTRVRfVFhfREVTQ19SQVRFX0lEKHBkZXNjLCAweEMgKyB0Y2JfZGVzYy0+cmF0cl9pbmRleCk7CisJCVNFVF9UWF9ERVNDX01BQ0lEKHBkZXNjLCB0Y2JfZGVzYy0+cmF0cl9pbmRleCk7CiAJfQogCi0JaWYgKCghaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgJiYgcHBzYy0+bGVpc3VyZV9wcyAmJgotCSAgICBwcHNjLT5md2N0cmxfbHBzKSB7CisJaWYgKCghaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgJiYgcHBzYy0+ZndjdHJsX2xwcykgewogCQlTRVRfVFhfREVTQ19IV1NFUV9FTihwZGVzYywgMSk7CiAJCVNFVF9UWF9ERVNDX1BLVF9JRChwZGVzYywgOCk7CiAKQEAgLTkyMyw3ICs5MDEsNyBAQAogCiAJU0VUX1RYX0RFU0NfVFhfQlVGRkVSX1NJWkUocGRlc2MsICh1MTYpIChza2ItPmxlbikpOwogCi0JU0VUX1RYX0RFU0NfVFhfQlVGRkVSX0FERFJFU1MocGRlc2MsIGNwdV90b19sZTMyKG1hcHBpbmcpKTsKKwlTRVRfVFhfREVTQ19UWF9CVUZGRVJfQUREUkVTUyhwZGVzYywgbWFwcGluZyk7CiAKIAlTRVRfVFhfREVTQ19SQVRFX0lEKHBkZXNjLCA3KTsKIAlTRVRfVFhfREVTQ19NQUNJRChwZGVzYywgMCk7CkBAIC0xMDIxLDcgKzk5OSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotdm9pZCBydGw5MmNlX3R4X3BvbGxpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHVuc2lnbmVkIGludCBod19xdWV1ZSkKK3ZvaWQgcnRsOTJjZV90eF9wb2xsaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBod19xdWV1ZSkKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJaWYgKGh3X3F1ZXVlID09IEJFQUNPTl9RVUVVRSkgewpAQCAtMTAzMiwzNSArMTAxMCwzIEBACiAJfQogfQogCi1ib29sIF9ydGw5MmNfY21kX3NlbmRfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKLQlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOwotCXN0cnVjdCBydGw4MTkyX3R4X3JpbmcgKnJpbmc7Ci0Jc3RydWN0IHJ0bF90eF9kZXNjICpwZGVzYzsKLQl1OCBvd247Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3Qgc2tfYnVmZiAqcHNrYiA9IE5VTEw7Ci0KLQlyaW5nID0gJnJ0bHBjaS0+dHhfcmluZ1tCRUFDT05fUVVFVUVdOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJ0bHByaXYtPmxvY2tzLmlycV90aF9sb2NrLCBmbGFncyk7Ci0KLQlwc2tiID0gX19za2JfZGVxdWV1ZSgmcmluZy0+cXVldWUpOwotCWlmIChwc2tiKQotCQlrZnJlZV9za2IocHNrYik7Ci0KLQlwZGVzYyA9ICZyaW5nLT5kZXNjWzBdOwotCW93biA9ICh1OCkgcnRscHJpdi0+Y2ZnLT5vcHMtPmdldF9kZXNjKCh1OCAqKSBwZGVzYywgdHJ1ZSwgSFdfREVTQ19PV04pOwotCi0JcnRscHJpdi0+Y2ZnLT5vcHMtPmZpbGxfdHhfY21kZGVzYyhodywgKHU4ICopIHBkZXNjLCAxLCAxLCBza2IpOwotCi0JX19za2JfcXVldWVfdGFpbCgmcmluZy0+cXVldWUsIHNrYik7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5pcnFfdGhfbG9jaywgZmxhZ3MpOwotCi0JcnRscHJpdi0+Y2ZnLT5vcHMtPnR4X3BvbGxpbmcoaHcsIEJFQUNPTl9RVUVVRSk7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3RyeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvdHJ4LmgKaW5kZXggODAzYWRjYy4uMGYxMTc3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvdHJ4LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvdHJ4LmgKQEAgLTUzMiw5ICs1MzIsOSBAQAogI2RlZmluZSBDTEVBUl9QQ0lfVFhfREVTQ19DT05URU5UKF9fcGRlc2MsIF9zaXplKQlcCiBkbyB7CQkJCQkJCVwKIAlpZiAoX3NpemUgPiBUWF9ERVNDX05FWFRfREVTQ19PRkZTRVQpCQlcCi0JCW1lbXNldCgodm9pZCAqKV9fcGRlc2MsIDAsIFRYX0RFU0NfTkVYVF9ERVNDX09GRlNFVCk7CVwKKwkJbWVtc2V0KF9fcGRlc2MsIDAsIFRYX0RFU0NfTkVYVF9ERVNDX09GRlNFVCk7CVwKIAllbHNlCQkJCQkJXAotCQltZW1zZXQoKHZvaWQgKilfX3BkZXNjLCAwLCBfc2l6ZSk7CVwKKwkJbWVtc2V0KF9fcGRlc2MsIDAsIF9zaXplKTsJXAogfSB3aGlsZSAoMCk7CiAKICNkZWZpbmUgUlhfSEFMX0lTX0NDS19SQVRFKF9wZGVzYylcCkBAIC03MjQsMTcgKzcyNCwxNiBAQAogdm9pZCBydGw5MmNlX3R4X2ZpbGxfZGVzYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCSAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKIAkJCSAgdTggKnBkZXNjLCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCi0JCQkgIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBxc2VsKTsKKwkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaHdfcXVldWUsCisJCQkgIHN0cnVjdCBydGxfdGNiX2Rlc2MgKnB0Y2JfZGVzYyk7CiBib29sIHJ0bDkyY2VfcnhfcXVlcnlfZGVzYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCSAgIHN0cnVjdCBydGxfc3RhdHMgKnN0YXRzLAogCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cywKIAkJCSAgIHU4ICpwZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIHJ0bDkyY2Vfc2V0X2Rlc2ModTggKnBkZXNjLCBib29sIGlzdHgsIHU4IGRlc2NfbmFtZSwgdTggKnZhbCk7CiB1MzIgcnRsOTJjZV9nZXRfZGVzYyh1OCAqcGRlc2MsIGJvb2wgaXN0eCwgdTggZGVzY19uYW1lKTsKLXZvaWQgcnRsOTJjZV90eF9wb2xsaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1bnNpZ25lZCBpbnQgaHdfcXVldWUpOwordm9pZCBydGw5MmNlX3R4X3BvbGxpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGh3X3F1ZXVlKTsKIHZvaWQgcnRsOTJjZV90eF9maWxsX2NtZGRlc2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpwZGVzYywKIAkJCSAgICAgYm9vbCBiX2ZpcnN0c2VnLCBib29sIGJfbGFzdHNlZywKIAkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1ib29sIF9ydGw5MmNfY21kX3NlbmRfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY3UvaHcuYwppbmRleCA5NDQ0ZTc2Li41MmUyYWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS9ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L2h3LmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJtYWMuaCIKICNpbmNsdWRlICJkbS5oIgogI2luY2x1ZGUgImh3LmgiCisjaW5jbHVkZSAiLi4vcnRsODE5MmNlL2h3LmgiCiAjaW5jbHVkZSAidHJ4LmgiCiAjaW5jbHVkZSAibGVkLmgiCiAjaW5jbHVkZSAidGFibGUuaCIKQEAgLTYwNSwxMCArNjA2LDEwIEBACiAJaWYgKCFJU19OT1JNQUxfQ0hJUChydGxoYWwtPnZlcnNpb24pKQogCQlyZXR1cm47CiAJdG1wX3UxYiA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHXzkzNDZDUik7Ci0JcnRsZWZ1c2UtPmVwcm9tdHlwZSA9ICh0bXBfdTFiICYgRUVQUk9NU0VMKSA/CisJcnRsZWZ1c2UtPmVwcm9tdHlwZSA9ICh0bXBfdTFiICYgQk9PVF9GUk9NX0VFUFJPTSkgPwogCQkJICAgICAgIEVFUFJPTV85M0M0NiA6IEVFUFJPTV9CT09UX0VGVVNFOwogCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0RNRVNHLCAoIkJvb3QgZnJvbSAlc1xuIiwKLQkJICh0bXBfdTFiICYgRUVQUk9NU0VMKSA/ICJFRVJST00iIDogIkVGVVNFIikpOworCQkgKHRtcF91MWIgJiBCT09UX0ZST01fRUVQUk9NKSA/ICJFRVJST00iIDogIkVGVVNFIikpOwogCXJ0bGVmdXNlLT5hdXRvbG9hZF9mYWlsZmxhZyA9ICh0bXBfdTFiICYgRUVQUk9NX0VOKSA/IGZhbHNlIDogdHJ1ZTsKIAlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19MT1VELCAoIkF1dG9sb2FkICVzXG4iLAogCQkgKHRtcF91MWIgJiBFRVBST01fRU4pID8gIk9LISEiIDogIkVSUiEhIikpOwpAQCAtOTIxLDcgKzkyMiw3IEBACiAJCQkJCSAgICAgICB1OCBvdXRfZXBfbnVtLAogCQkJCQkgICAgICAgdTggcXVldWVfc2VsKQogewotCXU4CWhxX3NlbGU7CisJdTggaHFfc2VsZSA9IDA7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCiAJc3dpdGNoIChvdXRfZXBfbnVtKSB7CkBAIC05NzcsNyArOTc4LDcgQEAKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKIAotCW1hYy0+cnhfY29uZiA9IChSQ1JfQVBNIHwgUkNSX0FNIHwgUkNSX0FERiB8IFJDUl9BQiB8IFJDUl9BUFBfRkNTIHwKKwltYWMtPnJ4X2NvbmYgPSAoUkNSX0FQTSB8IFJDUl9BTSB8IFJDUl9BREYgfCBSQ1JfQUIgfCBSQ1JfQVBQRkNTIHwKIAkJICAgICAgUkNSX0FQUF9JQ1YgfCBSQ1JfQU1GIHwgUkNSX0hUQ19MT0NfQ1RSTCB8CiAJCSAgICAgIFJDUl9BUFBfTUlDIHwgUkNSX0FQUF9QSFlTVFMgfCBSQ1JfQUNSQzMyKTsKIAlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkVHX1JDUiwgbWFjLT5yeF9jb25mKTsKQEAgLTIxODIsNyArMjE4Myw5IEBACiAJfQogfQogCi12b2lkIHJ0bDkyY3VfdXBkYXRlX2hhbF9yYXRlX3RhYmxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQordm9pZCBydGw5MmN1X3VwZGF0ZV9oYWxfcmF0ZV90YWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJCSAgIHU4IHJzc2lfbGV2ZWwpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS9ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY3UvaHcuaAppbmRleCA2MmFmNTU1Li4zMmY4NWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS9ody5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L2h3LmgKQEAgLTk4LDEzICs5OCwxNCBAQAogCQkJCSAgIHUzMiBhZGRfbXNyLCB1MzIgcm1fbXNyKTsKIHZvaWQgcnRsOTJjdV9nZXRfaHdfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCB2YXJpYWJsZSwgdTggKnZhbCk7CiB2b2lkIHJ0bDkyY3Vfc2V0X2h3X3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggdmFyaWFibGUsIHU4ICp2YWwpOwotdm9pZCBydGw5MmN1X3VwZGF0ZV9oYWxfcmF0ZV90YWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyY3VfdXBkYXRlX2hhbF9yYXRlX3RhYmxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQkJICAgdTggcnNzaV9sZXZlbCk7CiB2b2lkIHJ0bDkyY3VfdXBkYXRlX2hhbF9yYXRlX21hc2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHJzc2lfbGV2ZWwpOwogCiB2b2lkIHJ0bDkyY3VfdXBkYXRlX2NoYW5uZWxfYWNjZXNzX3NldHRpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogYm9vbCBydGw5MmN1X2dwaW9fcmFkaW9fb25fb2ZmX2NoZWNraW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqIHZhbGlkKTsKIHZvaWQgcnRsOTJjdV9zZXRfY2hlY2tfYnNzaWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgY2hlY2tfYnNzaWQpOwotdTggX3J0bDkyY19nZXRfY2hubF9ncm91cCh1OCBjaG5sKTsKIGludCBydGw5MmNfZG93bmxvYWRfZncoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBydGw5MmNfc2V0X2Z3X3B3cm1vZGVfY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBtb2RlKTsKIHZvaWQgcnRsOTJjX3NldF9md19yc3ZkcGFnZXBrdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBkbF9maW5pc2hlZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3BoeS5jCmluZGV4IDRlMDIwZTYuLjlhM2QwMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3BoeS5jCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSAidGFibGUuaCIKIAogdTMyIHJ0bDkyY3VfcGh5X3F1ZXJ5X3JmX3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICBlbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgcmVnYWRkciwgdTMyIGJpdG1hc2spCisJCQkgICAgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsIHUzMiByZWdhZGRyLCB1MzIgYml0bWFzaykKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJdTMyIG9yaWdpbmFsX3ZhbHVlLCByZWFkYmFja192YWx1ZSwgYml0c2hpZnQ7CkBAIC02NCw4ICs2NCw4IEBACiB9CiAKIHZvaWQgcnRsOTJjdV9waHlfc2V0X3JmX3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsCi0JCQkgICB1MzIgcmVnYWRkciwgdTMyIGJpdG1hc2ssIHUzMiBkYXRhKQorCQkJICAgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsCisJCQkgICAgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrLCB1MzIgZGF0YSkKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKQEAgLTE2Myw3ICsxNjMsNyBAQAogfQogCiBib29sIF9ydGw5MmN1X3BoeV9jb25maWdfYmJfd2l0aF9oZWFkZXJmaWxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQkJICB1OCBjb25maWd0eXBlKQorCQkJCQkgICAgdTggY29uZmlndHlwZSkKIHsKIAlpbnQgaTsKIAl1MzIgKnBoeV9yZWdhcnJheV90YWJsZTsKQEAgLTIyMyw3ICsyMjMsNyBAQAogfQogCiBib29sIF9ydGw5MmN1X3BoeV9jb25maWdfYmJfd2l0aF9wZ2hlYWRlcmZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCQkgICAgdTggY29uZmlndHlwZSkKKwkJCQkJICAgICAgdTggY29uZmlndHlwZSkKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKQEAgLTQ1OSw3ICs0NTksNyBAQAogCX0KIH0KIAotYm9vbCBfcnRsOTJjdV9waHlfc2V0X3JmX3Bvd2VyX3N0YXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorc3RhdGljIGJvb2wgX3J0bDkyY3VfcGh5X3NldF9yZl9wb3dlcl9zdGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkJICAgIGVudW0gcmZfcHdyc3RhdGUgcmZwd3Jfc3RhdGUpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwpAQCAtNTk1LDcgKzU5NSw3IEBACiB9CiAKIGJvb2wgcnRsOTJjdV9waHlfc2V0X3JmX3Bvd2VyX3N0YXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgIGVudW0gcmZfcHdyc3RhdGUgcmZwd3Jfc3RhdGUpCisJCQkJICAgIGVudW0gcmZfcHdyc3RhdGUgcmZwd3Jfc3RhdGUpCiB7CiAJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CiAJYm9vbCBicmVzdWx0ID0gZmFsc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS9waHkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3BoeS5oCmluZGV4IDA2Mjk5NTUuLmZmODFhNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3BoeS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3BoeS5oCkBAIC0zNCwzICszNCwxNyBAQAogdm9pZCBydGw5MmNfcGh5X3NldF9pbyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiBib29sIF9ydGw5MmN1X3BoeV9jb25maWdfbWFjX3dpdGhfaGVhZGVyZmlsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiBib29sIHJ0bDkyY3VfcGh5X2JiX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit1MzIgcnRsOTJjdV9waHlfcXVlcnlfcmZfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICBlbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgcmVnYWRkciwgdTMyIGJpdG1hc2spOwordm9pZCBydGw5MmN1X3BoeV9zZXRfcmZfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsCisJCQkgICAgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrLCB1MzIgZGF0YSk7Citib29sIHJ0bDkyY3VfcGh5X21hY19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworYm9vbCBfcnRsOTJjdV9waHlfY29uZmlnX2JiX3dpdGhfcGdoZWFkZXJmaWxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICAgICB1OCBjb25maWd0eXBlKTsKK3ZvaWQgX3J0bDkyY3VfcGh5X2xjX2NhbGlicmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBpczJ0KTsKK2Jvb2wgX3J0bDkyY3VfcGh5X2NvbmZpZ19iYl93aXRoX2hlYWRlcmZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgICB1OCBjb25maWd0eXBlKTsKK3ZvaWQgcnRsOTJjdV9waHlfc2V0X2J3X21vZGVfY2FsbGJhY2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworYm9vbCBydGw5MmN1X3BoeV9zZXRfcmZfcG93ZXJfc3RhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgIGVudW0gcmZfcHdyc3RhdGUgcmZwd3Jfc3RhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY3UvcmYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3JmLmMKaW5kZXggMWM3OWMyMi4uYzc1NzZlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY3UvcmYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS9yZi5jCkBAIC02Miw3ICs2Miw3IEBACiB9CiAKIHZvaWQgcnRsOTJjdV9waHlfcmY2MDUyX3NldF9jY2tfdHhwb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgICAgdTggKnBwb3dlcmxldmVsKQorCQkJCQl1OCAqcHBvd2VybGV2ZWwpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CkBAIC0zODksNyArMzg5LDcgQEAKIH0KIAogdm9pZCBydGw5MmN1X3BoeV9yZjYwNTJfc2V0X29mZG1fdHhwb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkJdTggKnBwb3dlcmxldmVsLCB1OCBjaGFubmVsKQorCQkJCQkgdTggKnBwb3dlcmxldmVsLCB1OCBjaGFubmVsKQogewogCXUzMiB3cml0ZVZhbFsyXSwgcG93ZXJCYXNlMFsyXSwgcG93ZXJCYXNlMVsyXTsKIAl1OCBpbmRleCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS9yZi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY3UvcmYuaAppbmRleCA4NmMyNzI4Li41MDBhMjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS9yZi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3JmLmgKQEAgLTQzLDUgKzQzLDkgQEAKIGJvb2wgcnRsOTJjdV9waHlfcmY2MDUyX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiBib29sIHJ0bDkyY3VfcGh5X2NvbmZpZ19yZl93aXRoX2hlYWRlcmZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSAgZW51bSByYWRpb19wYXRoIHJmcGF0aCk7Cit2b2lkIHJ0bDkyY3VfcGh5X3JmNjA1Ml9zZXRfY2NrX3R4cG93ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCXU4ICpwcG93ZXJsZXZlbCk7Cit2b2lkIHJ0bDkyY3VfcGh5X3JmNjA1Ml9zZXRfb2ZkbV90eHBvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgdTggKnBwb3dlcmxldmVsLCB1OCBjaGFubmVsKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS9zdy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY3Uvc3cuYwppbmRleCA3MTI0NGEzLi5iZWU3YzE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS9zdy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3N3LmMKQEAgLTk0LDcgKzk0LDcgQEAKIAkudXBkYXRlX2ludGVycnVwdF9tYXNrID0gcnRsOTJjdV91cGRhdGVfaW50ZXJydXB0X21hc2ssCiAJLmdldF9od19yZWcgPSBydGw5MmN1X2dldF9od19yZWcsCiAJLnNldF9od19yZWcgPSBydGw5MmN1X3NldF9od19yZWcsCi0JLnVwZGF0ZV9yYXRlX3RhYmxlID0gcnRsOTJjdV91cGRhdGVfaGFsX3JhdGVfdGFibGUsCisJLnVwZGF0ZV9yYXRlX3RibCA9IHJ0bDkyY3VfdXBkYXRlX2hhbF9yYXRlX3RhYmxlLAogCS51cGRhdGVfcmF0ZV9tYXNrID0gcnRsOTJjdV91cGRhdGVfaGFsX3JhdGVfbWFzaywKIAkuZmlsbF90eF9kZXNjID0gcnRsOTJjdV90eF9maWxsX2Rlc2MsCiAJLmZpbGxfZmFrZV90eGRlc2MgPSBydGw5MmN1X2ZpbGxfZmFrZV90eGRlc2MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS90cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3RyeC5jCmluZGV4IGQwYjBkNDMuLjNhOTJiYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3RyeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3RyeC5jCkBAIC0zNzIsNyArMzcyLDcgQEAKIAlfX2xlMTYgZmM7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAotCW1lbXNldChyeF9zdGF0dXMsIDAsIHNpemVvZihyeF9zdGF0dXMpKTsKKwltZW1zZXQocnhfc3RhdHVzLCAwLCBzaXplb2YoKnJ4X3N0YXR1cykpOwogCXJ4ZGVzYwk9IHNrYi0+ZGF0YTsKIAlza2JfbGVuCT0gc2tiLT5sZW47CiAJZHJ2aW5mb19sZW4gPSAoR0VUX1JYX0RFU0NfRFJWSU5GT19TSVpFKHJ4ZGVzYykgKiBSVExfUlhfRFJWX0lORk9fVU5JVCk7CkBAIC00MzQsNyArNDM0LDcgQEAKIAkJICIweCUwMlhcbiIsIGZjLCAodTMyKWhkci0+YWRkcjFbMF0sICh1MzIpaGRyLT5hZGRyMVsxXSwKIAkJICh1MzIpaGRyLT5hZGRyMVsyXSwgKHUzMiloZHItPmFkZHIxWzNdLCAodTMyKWhkci0+YWRkcjFbNF0sCiAJCSAodTMyKWhkci0+YWRkcjFbNV0pKTsKLQltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksICZyeF9zdGF0dXMsIHNpemVvZihyeF9zdGF0dXMpKTsKKwltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksIHJ4X3N0YXR1cywgc2l6ZW9mKCpyeF9zdGF0dXMpKTsKIAlpZWVlODAyMTFfcnhfaXJxc2FmZShodywgc2tiKTsKIH0KIApAQCAtNDk4LDE0ICs0OTgsMTQgQEAKIHZvaWQgcnRsOTJjdV90eF9maWxsX2Rlc2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIHU4ICpwZGVzY190eCwKIAkJCSAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICB1bnNpZ25lZCBpbnQgcXVldWVfaW5kZXgpCisJCQkgIHU4IHF1ZXVlX2luZGV4LAorCQkJICBzdHJ1Y3QgcnRsX3RjYl9kZXNjICp0Y2JfZGVzYykKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKIAlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKIAlib29sIGRlZmF1bHRhZGFwdGVyID0gdHJ1ZTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOwotCXN0cnVjdCBydGxfdGNiX2Rlc2MgdGNiX2Rlc2M7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9IGluZm8tPmNvbnRyb2wuc3RhID0gaW5mby0+Y29udHJvbC5zdGE7CiAJdTggKnFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CiAJdTggdGlkID0gcWNbMF0gJiBJRUVFODAyMTFfUU9TX0NUTF9USURfTUFTSzsKIAl1MTYgc2VxX251bWJlcjsKQEAgLTUxNywxNSArNTE3LDE1IEBACiAJdTggKnR4ZGVzYzsKIAogCXNlcV9udW1iZXIgPSAobGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCkgJiBJRUVFODAyMTFfU0NUTF9TRVEpID4+IDQ7Ci0JcnRsX2dldF90Y2JfZGVzYyhodywgaW5mbywgc2tiLCAmdGNiX2Rlc2MpOworCXJ0bF9nZXRfdGNiX2Rlc2MoaHcsIGluZm8sIHN0YSwgc2tiLCB0Y2JfZGVzYyk7CiAJdHhkZXNjID0gKHU4ICopc2tiX3B1c2goc2tiLCBSVExfVFhfSEVBREVSX1NJWkUpOwogCW1lbXNldCh0eGRlc2MsIDAsIFJUTF9UWF9IRUFERVJfU0laRSk7CiAJU0VUX1RYX0RFU0NfUEtUX1NJWkUodHhkZXNjLCBwa3RsZW4pOwogCVNFVF9UWF9ERVNDX0xJTklQKHR4ZGVzYywgMCk7CiAJU0VUX1RYX0RFU0NfUEtUX09GRlNFVCh0eGRlc2MsIFJUTF9EVU1NWV9PRkZTRVQpOwogCVNFVF9UWF9ERVNDX09GRlNFVCh0eGRlc2MsIFJUTF9UWF9IRUFERVJfU0laRSk7Ci0JU0VUX1RYX0RFU0NfVFhfUkFURSh0eGRlc2MsIHRjYl9kZXNjLmh3X3JhdGUpOwotCWlmICh0Y2JfZGVzYy51c2Vfc2hvcnRnaSB8fCB0Y2JfZGVzYy51c2Vfc2hvcnRwcmVhbWJsZSkKKwlTRVRfVFhfREVTQ19UWF9SQVRFKHR4ZGVzYywgdGNiX2Rlc2MtPmh3X3JhdGUpOworCWlmICh0Y2JfZGVzYy0+dXNlX3Nob3J0Z2kgfHwgdGNiX2Rlc2MtPnVzZV9zaG9ydHByZWFtYmxlKQogCQlTRVRfVFhfREVTQ19EQVRBX1NIT1JUR0kodHhkZXNjLCAxKTsKIAlpZiAobWFjLT50aWRzW3RpZF0uYWdnLmFnZ19zdGF0ZSA9PSBSVExfQUdHX09OICYmCiAJCSAgICBpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpIHsKQEAgLTUzNSwyMSArNTM1LDIxIEBACiAJCVNFVF9UWF9ERVNDX0FHR19CUkVBSyh0eGRlc2MsIDEpOwogCX0KIAlTRVRfVFhfREVTQ19TRVEodHhkZXNjLCBzZXFfbnVtYmVyKTsKLQlTRVRfVFhfREVTQ19SVFNfRU5BQkxFKHR4ZGVzYywgKCh0Y2JfZGVzYy5ydHNfZW5hYmxlICYmCi0JCQkgICAgICAgIXRjYl9kZXNjLmN0c19lbmFibGUpID8gMSA6IDApKTsKLQlTRVRfVFhfREVTQ19IV19SVFNfRU5BQkxFKHR4ZGVzYywgKCh0Y2JfZGVzYy5ydHNfZW5hYmxlIHx8Ci0JCQkJICB0Y2JfZGVzYy5jdHNfZW5hYmxlKSA/IDEgOiAwKSk7Ci0JU0VUX1RYX0RFU0NfQ1RTMlNFTEYodHhkZXNjLCAoKHRjYl9kZXNjLmN0c19lbmFibGUpID8gMSA6IDApKTsKLQlTRVRfVFhfREVTQ19SVFNfU1RCQyh0eGRlc2MsICgodGNiX2Rlc2MucnRzX3N0YmMpID8gMSA6IDApKTsKLQlTRVRfVFhfREVTQ19SVFNfUkFURSh0eGRlc2MsIHRjYl9kZXNjLnJ0c19yYXRlKTsKKwlTRVRfVFhfREVTQ19SVFNfRU5BQkxFKHR4ZGVzYywgKCh0Y2JfZGVzYy0+cnRzX2VuYWJsZSAmJgorCQkJICAgICAgICF0Y2JfZGVzYy0+Y3RzX2VuYWJsZSkgPyAxIDogMCkpOworCVNFVF9UWF9ERVNDX0hXX1JUU19FTkFCTEUodHhkZXNjLCAoKHRjYl9kZXNjLT5ydHNfZW5hYmxlIHx8CisJCQkJICB0Y2JfZGVzYy0+Y3RzX2VuYWJsZSkgPyAxIDogMCkpOworCVNFVF9UWF9ERVNDX0NUUzJTRUxGKHR4ZGVzYywgKCh0Y2JfZGVzYy0+Y3RzX2VuYWJsZSkgPyAxIDogMCkpOworCVNFVF9UWF9ERVNDX1JUU19TVEJDKHR4ZGVzYywgKCh0Y2JfZGVzYy0+cnRzX3N0YmMpID8gMSA6IDApKTsKKwlTRVRfVFhfREVTQ19SVFNfUkFURSh0eGRlc2MsIHRjYl9kZXNjLT5ydHNfcmF0ZSk7CiAJU0VUX1RYX0RFU0NfUlRTX0JXKHR4ZGVzYywgMCk7Ci0JU0VUX1RYX0RFU0NfUlRTX1NDKHR4ZGVzYywgdGNiX2Rlc2MucnRzX3NjKTsKKwlTRVRfVFhfREVTQ19SVFNfU0ModHhkZXNjLCB0Y2JfZGVzYy0+cnRzX3NjKTsKIAlTRVRfVFhfREVTQ19SVFNfU0hPUlQodHhkZXNjLAotCQkJICAgICAgKCh0Y2JfZGVzYy5ydHNfcmF0ZSA8PSBERVNDOTJDX1JBVEU1NE0pID8KLQkJCSAgICAgICAodGNiX2Rlc2MucnRzX3VzZV9zaG9ydHByZWFtYmxlID8gMSA6IDApCi0JCQkgICAgICAgOiAodGNiX2Rlc2MucnRzX3VzZV9zaG9ydGdpID8gMSA6IDApKSk7CisJCQkgICAgICAoKHRjYl9kZXNjLT5ydHNfcmF0ZSA8PSBERVNDOTJDX1JBVEU1NE0pID8KKwkJCSAgICAgICAodGNiX2Rlc2MtPnJ0c191c2Vfc2hvcnRwcmVhbWJsZSA/IDEgOiAwKQorCQkJICAgICAgIDogKHRjYl9kZXNjLT5ydHNfdXNlX3Nob3J0Z2kgPyAxIDogMCkpKTsKIAlpZiAobWFjLT5id180MCkgewotCQlpZiAodGNiX2Rlc2MucGFja2V0X2J3KSB7CisJCWlmICh0Y2JfZGVzYy0+cGFja2V0X2J3KSB7CiAJCQlTRVRfVFhfREVTQ19EQVRBX0JXKHR4ZGVzYywgMSk7CiAJCQlTRVRfVFhfREVTQ19EQVRBX1NDKHR4ZGVzYywgMyk7CiAJCX0gZWxzZSB7CkBAIC01OTAsNyArNTkwLDcgQEAKIAlTRVRfVFhfREVTQ19EQVRBX1JBVEVfRkJfTElNSVQodHhkZXNjLCAweDFGKTsKIAlTRVRfVFhfREVTQ19SVFNfUkFURV9GQl9MSU1JVCh0eGRlc2MsIDB4Rik7CiAJU0VUX1RYX0RFU0NfRElTQUJMRV9GQih0eGRlc2MsIDApOwotCVNFVF9UWF9ERVNDX1VTRV9SQVRFKHR4ZGVzYywgdGNiX2Rlc2MudXNlX2RyaXZlcl9yYXRlID8gMSA6IDApOworCVNFVF9UWF9ERVNDX1VTRV9SQVRFKHR4ZGVzYywgdGNiX2Rlc2MtPnVzZV9kcml2ZXJfcmF0ZSA/IDEgOiAwKTsKIAlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgewogCQlpZiAobWFjLT5yZGdfZW4pIHsKIAkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VORCwgREJHX1RSQUNFLApAQCAtNjAwLDExICs2MDAsMTEgQEAKIAkJfQogCX0KIAlpZiAocnRscHJpdi0+ZG0udXNlcmFtYXNrKSB7Ci0JCVNFVF9UWF9ERVNDX1JBVEVfSUQodHhkZXNjLCB0Y2JfZGVzYy5yYXRyX2luZGV4KTsKLQkJU0VUX1RYX0RFU0NfTUFDSUQodHhkZXNjLCB0Y2JfZGVzYy5tYWNfaWQpOworCQlTRVRfVFhfREVTQ19SQVRFX0lEKHR4ZGVzYywgdGNiX2Rlc2MtPnJhdHJfaW5kZXgpOworCQlTRVRfVFhfREVTQ19NQUNJRCh0eGRlc2MsIHRjYl9kZXNjLT5tYWNfaWQpOwogCX0gZWxzZSB7Ci0JCVNFVF9UWF9ERVNDX1JBVEVfSUQodHhkZXNjLCAweEMgKyB0Y2JfZGVzYy5yYXRyX2luZGV4KTsKLQkJU0VUX1RYX0RFU0NfTUFDSUQodHhkZXNjLCB0Y2JfZGVzYy5yYXRyX2luZGV4KTsKKwkJU0VUX1RYX0RFU0NfUkFURV9JRCh0eGRlc2MsIDB4QyArIHRjYl9kZXNjLT5yYXRyX2luZGV4KTsKKwkJU0VUX1RYX0RFU0NfTUFDSUQodHhkZXNjLCB0Y2JfZGVzYy0+cmF0cl9pbmRleCk7CiAJfQogCWlmICgoIWllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpICYmIHBwc2MtPmxlaXN1cmVfcHMgJiYKIAkgICAgICBwcHNjLT5md2N0cmxfbHBzKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS90cnguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3RyeC5oCmluZGV4IGIzOTZkNDYuLjUzZGU1ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3RyeC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3RyeC5oCkBAIC0zNyw2ICszNyw4IEBACiAjZGVmaW5lIFJUTDkyQ19TSVpFX01BWF9SWF9CVUZGRVIJCTE1MzYwICAgLyogODE5MiAqLwogI2RlZmluZSBSWF9EUlZfSU5GT19TSVpFX1VOSVQJCQk4CiAKKyNkZWZpbmUgUlRMX0FHR19PTgkJCQkxCisKIGVudW0gdXNiX3J4X2FnZ19tb2RlIHsKIAlVU0JfUlhfQUdHX0RJU0FCTEUsCiAJVVNCX1JYX0FHR19ETUEsCkBAIC00MTksNyArNDIxLDggQEAKIHZvaWQgcnRsOTJjdV90eF9maWxsX2Rlc2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIHU4ICpwZGVzY190eCwKIAkJCSAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICB1bnNpZ25lZCBpbnQgcXVldWVfaW5kZXgpOworCQkJICB1OCBxdWV1ZV9pbmRleCwKKwkJCSAgc3RydWN0IHJ0bF90Y2JfZGVzYyAqdGNiX2Rlc2MpOwogdm9pZCBydGw5MmN1X2ZpbGxfZmFrZV90eGRlc2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICogcERlc2MsCiAJCQkgICAgICB1MzIgYnVmZmVyX2xlbiwgYm9vbCBiSXNQc1BvbGwpOwogdm9pZCBydGw5MmN1X3R4X2ZpbGxfY21kZGVzYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdlYjEzOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL01ha2VmaWxlCkBAIC0wLDAgKzEsMTUgQEAKK3J0bDgxOTJzZS1vYmpzIDo9CQlcCisJCWRtLm8JCVwKKwkJZncubwkJXAorCQlody5vCQlcCisJCWxlZC5vCQlcCisJCXBoeS5vCQlcCisJCXJmLm8JCVwKKwkJc3cubwkJXAorCQl0YWJsZS5vCQlcCisJCXRyeC5vCisKK29iai0kKENPTkZJR19SVEw4MTkyU0UpICs9IHJ0bDgxOTJzZS5vCisKK2NjZmxhZ3MteSArPSAtRF9fQ0hFQ0tfRU5ESUFOX18KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvZGVmLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9kZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTgyOGYyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvZGVmLmgKQEAgLTAsMCArMSw1OTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1JFQUxURUtfOTJTX0RFRl9IX18KKyNkZWZpbmUgX19SRUFMVEVLXzkyU19ERUZfSF9fCisKKyNkZWZpbmUgUlhfTVBEVV9RVUVVRQkJCQkwCisjZGVmaW5lIFJYX0NNRF9RVUVVRQkJCQkxCisjZGVmaW5lIFJYX01BWF9RVUVVRQkJCQkyCisKKyNkZWZpbmUgREVTQzkyU19SQVRFMU0JCQkJMHgwMAorI2RlZmluZSBERVNDOTJTX1JBVEUyTQkJCQkweDAxCisjZGVmaW5lIERFU0M5MlNfUkFURTVfNU0JCQkweDAyCisjZGVmaW5lIERFU0M5MlNfUkFURTExTQkJCQkweDAzCisjZGVmaW5lIERFU0M5MlNfUkFURTZNCQkJCTB4MDQKKyNkZWZpbmUgREVTQzkyU19SQVRFOU0JCQkJMHgwNQorI2RlZmluZSBERVNDOTJTX1JBVEUxMk0JCQkJMHgwNgorI2RlZmluZSBERVNDOTJTX1JBVEUxOE0JCQkJMHgwNworI2RlZmluZSBERVNDOTJTX1JBVEUyNE0JCQkJMHgwOAorI2RlZmluZSBERVNDOTJTX1JBVEUzNk0JCQkJMHgwOQorI2RlZmluZSBERVNDOTJTX1JBVEU0OE0JCQkJMHgwYQorI2RlZmluZSBERVNDOTJTX1JBVEU1NE0JCQkJMHgwYgorI2RlZmluZSBERVNDOTJTX1JBVEVNQ1MwCQkJMHgwYworI2RlZmluZSBERVNDOTJTX1JBVEVNQ1MxCQkJMHgwZAorI2RlZmluZSBERVNDOTJTX1JBVEVNQ1MyCQkJMHgwZQorI2RlZmluZSBERVNDOTJTX1JBVEVNQ1MzCQkJMHgwZgorI2RlZmluZSBERVNDOTJTX1JBVEVNQ1M0CQkJMHgxMAorI2RlZmluZSBERVNDOTJTX1JBVEVNQ1M1CQkJMHgxMQorI2RlZmluZSBERVNDOTJTX1JBVEVNQ1M2CQkJMHgxMgorI2RlZmluZSBERVNDOTJTX1JBVEVNQ1M3CQkJMHgxMworI2RlZmluZSBERVNDOTJTX1JBVEVNQ1M4CQkJMHgxNAorI2RlZmluZSBERVNDOTJTX1JBVEVNQ1M5CQkJMHgxNQorI2RlZmluZSBERVNDOTJTX1JBVEVNQ1MxMAkJCTB4MTYKKyNkZWZpbmUgREVTQzkyU19SQVRFTUNTMTEJCQkweDE3CisjZGVmaW5lIERFU0M5MlNfUkFURU1DUzEyCQkJMHgxOAorI2RlZmluZSBERVNDOTJTX1JBVEVNQ1MxMwkJCTB4MTkKKyNkZWZpbmUgREVTQzkyU19SQVRFTUNTMTQJCQkweDFhCisjZGVmaW5lIERFU0M5MlNfUkFURU1DUzE1CQkJMHgxYgorI2RlZmluZSBERVNDOTJTX1JBVEVNQ1MxNV9TRwkJCTB4MWMKKyNkZWZpbmUgREVTQzkyU19SQVRFTUNTMzIJCQkweDIwCisKKyNkZWZpbmUgU0hPUlRfU0xPVF9USU1FCQkJCTkKKyNkZWZpbmUgTk9OX1NIT1JUX1NMT1RfVElNRQkJCTIwCisKKy8qIFJ4IHNtb290aCBmYWN0b3IgKi8KKyNkZWZpbmUJUlhfU01PT1RIX0ZBQ1RPUgkJCTIwCisKKy8qIFF1ZXVlIFNlbGVjdCBWYWx1ZSBpbiBUeERlc2MgKi8KKyNkZWZpbmUgUVNMVF9CSwkJCQkJMHgyCisjZGVmaW5lIFFTTFRfQkUJCQkJCTB4MAorI2RlZmluZSBRU0xUX1ZJCQkJCQkweDUKKyNkZWZpbmUgUVNMVF9WTwkJCQkJMHg2CisjZGVmaW5lIFFTTFRfQkVBQ09OCQkJCTB4MTAKKyNkZWZpbmUgUVNMVF9ISUdICQkJCTB4MTEKKyNkZWZpbmUgUVNMVF9NR05UCQkJCTB4MTIKKyNkZWZpbmUgUVNMVF9DTUQJCQkJMHgxMworCisjZGVmaW5lCVBIWV9SU1NJX1NMSURfV0lOX01BWAkJCTEwMAorI2RlZmluZQlQSFlfTElOS1FVQUxJVFlfU0xJRF9XSU5fTUFYCQkyMAorI2RlZmluZQlQSFlfQkVBQ09OX1JTU0lfU0xJRF9XSU5fTUFYCQkxMAorCisvKiBUeCBEZXNjICovCisjZGVmaW5lIFRYX0RFU0NfU0laRV9SVEw4MTkyUwkJCSgxNiAqIDQpCisjZGVmaW5lIFRYX0NNRERFU0NfU0laRV9SVEw4MTkyUwkJKDE2ICogNCkKKworLyogRGVmaW5lIGEgbWFjcm8gdGhhdCB0YWtlcyBhIGxlMzIgd29yZCwgY29udmVydHMgaXQgdG8gaG9zdCBvcmRlcmluZywKKyAqIHJpZ2h0IHNoaWZ0cyBieSBhIHNwZWNpZmllZCBjb3VudCwgY3JlYXRlcyBhIG1hc2sgb2YgdGhlIHNwZWNpZmllZAorICogYml0IGNvdW50LCBhbmQgZXh0cmFjdHMgdGhhdCBudW1iZXIgb2YgYml0cy4KKyAqLworCisjZGVmaW5lIFNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MsIF9fc2hpZnQsIF9fbWFzaykJCVwKKwkoKGxlMzJfdG9fY3B1KCooKChfX2xlMzIgKikoX19wZGVzYykpKSkgPj4gKF9fc2hpZnQpKSAmCVwKKwlCSVRfTEVOX01BU0tfMzIoX19tYXNrKSkKKworLyogRGVmaW5lIGEgbWFjcm8gdGhhdCBjbGVhcnMgYSBiaXQgZmllbGQgaW4gYW4gbGUzMiB3b3JkIGFuZAorICogc2V0cyB0aGUgc3BlY2lmaWVkIHZhbHVlIGludG8gdGhhdCBiaXQgZmllbGQuIFRoZSByZXN1bHRpbmcKKyAqIHZhbHVlIHJlbWFpbnMgaW4gbGUzMiBvcmRlcmluZzsgaG93ZXZlciwgaXQgaXMgcHJvcGVybHkgY29udmVydGVkCisgKiB0byBob3N0IG9yZGVyaW5nIGZvciB0aGUgY2xlYXIgYW5kIHNldCBvcGVyYXRpb25zIGJlZm9yZSBjb252ZXJzaW9uCisgKiBiYWNrIHRvIGxlMzIuCisgKi8KKworI2RlZmluZSBTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYywgX19zaGlmdCwgX19sZW4sIF9fdmFsKQlcCisJKCooX19sZTMyICopKF9fcGRlc2MpID0JCQkJCVwKKwkoY3B1X3RvX2xlMzIoKGxlMzJfdG9fY3B1KCooKF9fbGUzMiAqKShfX3BkZXNjKSkpICYJXAorCSh+KEJJVF9PRkZTRVRfTEVOX01BU0tfMzIoKF9fc2hpZnQpLCBfX2xlbikpKSkgfAlcCisJKCgodTMyKShfX3ZhbCkgJiBCSVRfTEVOX01BU0tfMzIoX19sZW4pKSA8PCAoX19zaGlmdCkpKSkpOworCisvKiBtYWNyb3MgdG8gcmVhZC93cml0ZSB2YXJpb3VzIGZpZWxkcyBpbiBSWCBvciBUWCBkZXNjcmlwdG9ycyAqLworCisvKiBEd29yZCAwICovCisjZGVmaW5lIFNFVF9UWF9ERVNDX1BLVF9TSVpFKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYywgMCwgMTYsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19PRkZTRVQoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjLCAxNiwgOCwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1RZUEUoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjLCAyNCwgMiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0xBU1RfU0VHKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYywgMjYsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19GSVJTVF9TRUcoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjLCAyNywgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0xJTklQKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYywgMjgsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19BTVNEVShfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MsIDI5LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfR1JFRU5fRklFTEQoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjLCAzMCwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX09XTihfX3BkZXNjLCBfX3ZhbCkJCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjLCAzMSwgMSwgX192YWwpCisKKyNkZWZpbmUgR0VUX1RYX0RFU0NfT1dOKF9fcGRlc2MpCQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjLCAzMSwgMSkKKworLyogRHdvcmQgMSAqLworI2RlZmluZSBTRVRfVFhfREVTQ19NQUNJRChfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyA0LCAwLCA1LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfTU9SRV9EQVRBKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDQsIDUsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19NT1JFX0ZSQUcoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgNCwgNiwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1BJRlMoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgNCwgNywgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1FVRVVFX1NFTChfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyA0LCA4LCA1LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfQUNLX1BPTElDWShfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyA0LCAxMywgMiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX05PX0FDTShfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyA0LCAxNSwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX05PTl9RT1MoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgNCwgMTYsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19LRVlfSUQoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgNCwgMTcsIDIsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19PVUkoX19wZGVzYywgX192YWwpCQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDQsIDE5LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfUEtUX1RZUEUoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgNCwgMjAsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19FTl9ERVNDX0lEKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDQsIDIxLCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfU0VDX1RZUEUoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgNCwgMjIsIDIsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19XRFMoX19wZGVzYywgX192YWwpCQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDQsIDI0LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfSFRDKF9fcGRlc2MsIF9fdmFsKQkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyA0LCAyNSwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1BLVF9PRkZTRVQoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgNCwgMjYsIDUsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19IV1BDKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDQsIDI3LCAxLCBfX3ZhbCkKKworLyogRHdvcmQgMiAqLworI2RlZmluZSBTRVRfVFhfREVTQ19EQVRBX1JFVFJZX0xJTUlUKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgOCwgMCwgNiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1JFVFJZX0xJTUlUX0VOQUJMRShfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDgsIDYsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19UU0ZMKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDgsIDcsIDUsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19SVFNfUkVUUllfQ09VTlQoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyA4LCAxMiwgNiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0RBVEFfUkVUUllfQ09VTlQoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyA4LCAxOCwgNiwgX192YWwpCisjZGVmaW5lCVNFVF9UWF9ERVNDX1JTVkRfTUFDSUQoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRSgoKF9fcGRlc2MpICsgOCksIDI0LCA1LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfQUdHX0VOQUJMRShfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyA4LCAyOSwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0FHR19CUkVBSyhfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyA4LCAzMCwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX09XTl9NQUMoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgOCwgMzEsIDEsIF9fdmFsKQorCisvKiBEd29yZCAzICovCisjZGVmaW5lIFNFVF9UWF9ERVNDX05FWFRfSEVBUF9QQUdFKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTIsIDAsIDgsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19UQUlMX1BBR0UoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTIsIDgsIDgsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19TRVEoX19wZGVzYywgX192YWwpCQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDEyLCAxNiwgMTIsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19GUkFHKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDEyLCAyOCwgNCwgX192YWwpCisKKy8qIER3b3JkIDQgKi8KKyNkZWZpbmUgU0VUX1RYX0RFU0NfUlRTX1JBVEUoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTYsIDAsIDYsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19ESVNBQkxFX1JUU19GQihfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDE2LCA2LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfUlRTX1JBVEVfRkJfTElNSVQoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyAxNiwgNywgNCwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX0NUU19FTkFCTEUoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTYsIDExLCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfUlRTX0VOQUJMRShfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyAxNiwgMTIsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19SQV9CUlNSX0lEKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDE2LCAxMywgMywgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1RYSFQoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTYsIDE2LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfVFhfU0hPUlQoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTYsIDE3LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfVFhfQkFORFdJRFRIKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTYsIDE4LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfVFhfU1VCX0NBUlJJRVIoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyAxNiwgMTksIDIsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19UWF9TVEJDKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDE2LCAyMSwgMiwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1RYX1JFVkVSU0VfRElSRUNUSU9OKF9fcGRlc2MsIF9fdmFsKQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyAxNiwgMjMsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19SVFNfSFQoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTYsIDI0LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfUlRTX1NIT1JUKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDE2LCAyNSwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1JUU19CQU5EV0lEVEgoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyAxNiwgMjYsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19SVFNfU1VCX0NBUlJJRVIoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyAxNiwgMjcsIDIsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19SVFNfU1RCQyhfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyAxNiwgMjksIDIsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19VU0VSX1JBVEUoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTYsIDMxLCAxLCBfX3ZhbCkKKworLyogRHdvcmQgNSAqLworI2RlZmluZSBTRVRfVFhfREVTQ19QQUNLRVRfSUQoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMjAsIDAsIDksIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19UWF9SQVRFKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDIwLCA5LCA2LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfRElTQUJMRV9GQihfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyAyMCwgMTUsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19EQVRBX1JBVEVfRkJfTElNSVQoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyAyMCwgMTYsIDUsIF9fdmFsKQorI2RlZmluZSBTRVRfVFhfREVTQ19UWF9BR0MoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMjAsIDIxLCAxMSwgX192YWwpCisKKy8qIER3b3JkIDYgKi8KKyNkZWZpbmUgU0VUX1RYX0RFU0NfSVBfQ0hFQ0tfU1VNKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMjQsIDAsIDE2LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfVENQX0NIRUNLX1NVTShfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDI0LCAxNiwgMTYsIF9fdmFsKQorCisvKiBEd29yZCA3ICovCisjZGVmaW5lIFNFVF9UWF9ERVNDX1RYX0JVRkZFUl9TSVpFKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMjgsIDAsIDE2LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1RYX0RFU0NfSVBfSEVBREVSX09GRlNFVChfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDI4LCAxNiwgOCwgX192YWwpCisjZGVmaW5lIFNFVF9UWF9ERVNDX1RDUF9FTkFCTEUoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMjgsIDMxLCAxLCBfX3ZhbCkKKworLyogRHdvcmQgOCAqLworI2RlZmluZSBTRVRfVFhfREVTQ19UWF9CVUZGRVJfQUREUkVTUyhfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDMyLCAwLCAzMiwgX192YWwpCisjZGVmaW5lIEdFVF9UWF9ERVNDX1RYX0JVRkZFUl9BRERSRVNTKF9fcGRlc2MpCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MgKyAzMiwgMCwgMzIpCisKKy8qIER3b3JkIDkgKi8KKyNkZWZpbmUgU0VUX1RYX0RFU0NfTkVYVF9ERVNDX0FERFJFU1MoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyAzNiwgMCwgMzIsIF9fdmFsKQorCisvKiBCZWNhdXNlIHRoZSBQQ0kgVHggZGVzY3JpcHRvcnMgYXJlIGNoYWllZCBhdCB0aGUKKyAqIGluaXRpYWxpemF0aW9uIGFuZCBhbGwgdGhlIE5leHREZXNjQWRkcmVzc2VzIGluCisgKiB0aGVzZSBkZXNjcmlwdG9ycyBjYW5ub3Qgbm90IGJlIGNsZWFyZWQgKCxvcgorICogZHJpdmVyL0hXIGNhbm5vdCBmaW5kIHRoZSBuZXh0IGRlc2NyaXB0b3IpLCB0aGUKKyAqIG9mZnNldCAzNiAoTmV4dERlc2NBZGRyZXNzZXMpIGlzIHJlc2VydmVkIHdoZW4KKyAqIHRoZSBkZXNjIGlzIGNsZWFyZWQuICovCisjZGVmaW5lCVRYX0RFU0NfTkVYVF9ERVNDX09GRlNFVAkJCTM2CisjZGVmaW5lIENMRUFSX1BDSV9UWF9ERVNDX0NPTlRFTlQoX19wZGVzYywgX3NpemUpCQlcCitkbyB7CQkJCQkJCQlcCisJaWYgKF9zaXplID4gVFhfREVTQ19ORVhUX0RFU0NfT0ZGU0VUKQkJCVwKKwkJbWVtc2V0KF9fcGRlc2MsIDAsIFRYX0RFU0NfTkVYVF9ERVNDX09GRlNFVCk7CVwKKwllbHNlCQkJCQkJCVwKKwkJbWVtc2V0KF9fcGRlc2MsIDAsIF9zaXplKTsJCQlcCit9IHdoaWxlICgwKTsKKworLyogUnggRGVzYyAqLworI2RlZmluZSBSWF9TVEFUVVNfREVTQ19TSVpFCQkJCTI0CisjZGVmaW5lIFJYX0RSVl9JTkZPX1NJWkVfVU5JVAkJCQk4CisKKy8qIERXT1JEIDAgKi8KKyNkZWZpbmUgU0VUX1JYX1NUQVRVU19ERVNDX1BLVF9MRU4oX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MsIDAsIDE0LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1JYX1NUQVRVU19ERVNDX0NSQzMyKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjLCAxNCwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19JQ1YoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjLCAxNSwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19EUlZJTkZPX1NJWkUoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MsIDE2LCA0LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1JYX1NUQVRVU19ERVNDX1NFQ1VSSVRZKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjLCAyMCwgMywgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19RT1MoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjLCAyMywgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19TSElGVChfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYywgMjQsIDIsIF9fdmFsKQorI2RlZmluZSBTRVRfUlhfU1RBVFVTX0RFU0NfUEhZX1NUQVRVUyhfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYywgMjYsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfUlhfU1RBVFVTX0RFU0NfU1dERUMoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MsIDI3LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1JYX1NUQVRVU19ERVNDX0xBU1RfU0VHKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjLCAyOCwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19GSVJTVF9TRUcoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MsIDI5LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1JYX1NUQVRVU19ERVNDX0VPUihfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MsIDMwLCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1JYX1NUQVRVU19ERVNDX09XTihfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MsIDMxLCAxLCBfX3ZhbCkKKworI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfUEtUX0xFTihfX3BkZXNjKQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjLCAwLCAxNCkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX0NSQzMyKF9fcGRlc2MpCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MsIDE0LCAxKQorI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfSUNWKF9fcGRlc2MpCQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjLCAxNSwgMSkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX0RSVklORk9fU0laRShfX3BkZXNjKQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MsIDE2LCA0KQorI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfU0VDVVJJVFkoX19wZGVzYykJCQlcCisJU0hJRlRfQU5EX01BU0tfTEUoX19wZGVzYywgMjAsIDMpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19RT1MoX19wZGVzYykJCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MsIDIzLCAxKQorI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfU0hJRlQoX19wZGVzYykJCQlcCisJU0hJRlRfQU5EX01BU0tfTEUoX19wZGVzYywgMjQsIDIpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19QSFlfU1RBVFVTKF9fcGRlc2MpCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MsIDI2LCAxKQorI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfU1dERUMoX19wZGVzYykJCQlcCisJU0hJRlRfQU5EX01BU0tfTEUoX19wZGVzYywgMjcsIDEpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19MQVNUX1NFRyhfX3BkZXNjKQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjLCAyOCwgMSkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX0ZJUlNUX1NFRyhfX3BkZXNjKQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjLCAyOSwgMSkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX0VPUihfX3BkZXNjKQkJCQlcCisJU0hJRlRfQU5EX01BU0tfTEUoX19wZGVzYywgMzAsIDEpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19PV04oX19wZGVzYykJCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MsIDMxLCAxKQorCisvKiBEV09SRCAxICovCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19NQUNJRChfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDQsIDAsIDUsIF9fdmFsKQorI2RlZmluZSBTRVRfUlhfU1RBVFVTX0RFU0NfVElEKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDQsIDUsIDQsIF9fdmFsKQorI2RlZmluZSBTRVRfUlhfU1RBVFVTX0RFU0NfUEFHR1IoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyA0LCAxNCwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19GQUdHUihfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDQsIDE1LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1JYX1NUQVRVU19ERVNDX0ExX0ZJVChfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDQsIDE2LCA0LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1JYX1NUQVRVU19ERVNDX0EyX0ZJVChfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDQsIDIwLCA0LCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1JYX1NUQVRVU19ERVNDX1BBTShfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyA0LCAyNCwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19QV1IoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgNCwgMjUsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfUlhfU1RBVFVTX0RFU0NfTU9SRURBVEEoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyA0LCAyNiwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19NT1JFRlJBRyhfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDQsIDI3LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1JYX1NUQVRVU19ERVNDX1RZUEUoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgNCwgMjgsIDIsIF9fdmFsKQorI2RlZmluZSBTRVRfUlhfU1RBVFVTX0RFU0NfTUMoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgNCwgMzAsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfUlhfU1RBVFVTX0RFU0NfQkMoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgNCwgMzEsIDEsIF9fdmFsKQorCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVDX01BQ0lEKF9fcGRlc2MpCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MgKyA0LCAwLCA1KQorI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfVElEKF9fcGRlc2MpCQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjICsgNCwgNSwgNCkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX1BBR0dSKF9fcGRlc2MpCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MgKyA0LCAxNCwgMSkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX0ZBR0dSKF9fcGRlc2MpCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MgKyA0LCAxNSwgMSkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX0ExX0ZJVChfX3BkZXNjKQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjICsgNCwgMTYsIDQpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19BMl9GSVQoX19wZGVzYykJCQlcCisJU0hJRlRfQU5EX01BU0tfTEUoX19wZGVzYyArIDQsIDIwLCA0KQorI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfUEFNKF9fcGRlc2MpCQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjICsgNCwgMjQsIDEpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19QV1IoX19wZGVzYykJCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MgKyA0LCAyNSwgMSkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX01PUkVfREFUQShfX3BkZXNjKQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjICsgNCwgMjYsIDEpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19NT1JFX0ZSQUcoX19wZGVzYykJCQlcCisJU0hJRlRfQU5EX01BU0tfTEUoX19wZGVzYyArIDQsIDI3LCAxKQorI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfVFlQRShfX3BkZXNjKQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjICsgNCwgMjgsIDIpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19NQyhfX3BkZXNjKQkJCQlcCisJU0hJRlRfQU5EX01BU0tfTEUoX19wZGVzYyArIDQsIDMwLCAxKQorI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfQkMoX19wZGVzYykJCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MgKyA0LCAzMSwgMSkKKworLyogRFdPUkQgMiAqLworI2RlZmluZSBTRVRfUlhfU1RBVFVTX0RFU0NfU0VRKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDgsIDAsIDEyLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1JYX1NUQVRVU19ERVNDX0ZSQUcoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgOCwgMTIsIDQsIF9fdmFsKQorI2RlZmluZSBTRVRfUlhfU1RBVFVTX0RFU0NfTkVYVF9QS1RMRU4oX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyA4LCAxNiwgOCwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19ORVhUX0lORChfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDgsIDMwLCAxLCBfX3ZhbCkKKworI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfU0VRKF9fcGRlc2MpCQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjICsgOCwgMCwgMTIpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19GUkFHKF9fcGRlc2MpCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MgKyA4LCAxMiwgNCkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX05FWFRfUEtUTEVOKF9fcGRlc2MpCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MgKyA4LCAxNiwgOCkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX05FWFRfSU5EKF9fcGRlc2MpCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MgKyA4LCAzMCwgMSkKKworLyogRFdPUkQgMyAqLworI2RlZmluZSBTRVRfUlhfU1RBVFVTX0RFU0NfUlhfTUNTKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTIsIDAsIDYsIF9fdmFsKQorI2RlZmluZSBTRVRfUlhfU1RBVFVTX0RFU0NfUlhfSFQoX19wZGVzYywgX192YWwpCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyAxMiwgNiwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19BTVNEVShfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDEyLCA3LCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1JYX1NUQVRVU19ERVNDX1NQTENQKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTIsIDgsIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfUlhfU1RBVFVTX0RFU0NfQlcoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTIsIDksIDEsIF9fdmFsKQorI2RlZmluZSBTRVRfUlhfU1RBVFVTX0RFU0NfSFRDKF9fcGRlc2MsIF9fdmFsKQkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDEyLCAxMCwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19UQ1BfQ0hLX1JQVChfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDEyLCAxMSwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19JUF9DSEtfUlBUKF9fcGRlc2MsIF9fdmFsKQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTIsIDEyLCAxLCBfX3ZhbCkKKyNkZWZpbmUgU0VUX1JYX1NUQVRVU19ERVNDX1RDUF9DSEtfVkFMSUQoX19wZGVzYywgX192YWwpCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDEyLCAxMywgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19IV1BDX0VSUihfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDEyLCAxNCwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19IV1BDX0lORChfX3BkZXNjLCBfX3ZhbCkJCVwKKwlTRVRfQklUU19PRkZTRVRfTEUoX19wZGVzYyArIDEyLCAxNSwgMSwgX192YWwpCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19JVjAoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTIsIDE2LCAxNiwgX192YWwpCisKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX1JYX01DUyhfX3BkZXNjKQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjICsgMTIsIDAsIDYpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19SWF9IVChfX3BkZXNjKQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjICsgMTIsIDYsIDEpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19BTVNEVShfX3BkZXNjKQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjICsgMTIsIDcsIDEpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19TUExDUChfX3BkZXNjKQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjICsgMTIsIDgsIDEpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19CVyhfX3BkZXNjKQkJCQlcCisJU0hJRlRfQU5EX01BU0tfTEUoX19wZGVzYyArIDEyLCA5LCAxKQorI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfSFRDKF9fcGRlc2MpCQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjICsgMTIsIDEwLCAxKQorI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfVENQX0NIS19SUFQoX19wZGVzYykJCQlcCisJU0hJRlRfQU5EX01BU0tfTEUoX19wZGVzYyArIDEyLCAxMSwgMSkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX0lQX0NIS19SUFQoX19wZGVzYykJCQlcCisJU0hJRlRfQU5EX01BU0tfTEUoX19wZGVzYyArIDEyLCAxMiwgMSkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX1RDUF9DSEtfVkFMSUQoX19wZGVzYykJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjICsgMTIsIDEzLCAxKQorI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfSFdQQ19FUlIoX19wZGVzYykJCQlcCisJU0hJRlRfQU5EX01BU0tfTEUoX19wZGVzYyArIDEyLCAxNCwgMSkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX0hXUENfSU5EKF9fcGRlc2MpCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MgKyAxMiwgMTUsIDEpCisjZGVmaW5lIEdFVF9SWF9TVEFUVVNfREVTQ19JVjAoX19wZGVzYykJCQkJXAorCVNISUZUX0FORF9NQVNLX0xFKF9fcGRlc2MgKyAxMiwgMTYsIDE2KQorCisvKiBEV09SRCA0ICovCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfREVTQ19JVjEoX19wZGVzYywgX192YWwpCQkJXAorCVNFVF9CSVRTX09GRlNFVF9MRShfX3BkZXNjICsgMTYsIDAsIDMyLCBfX3ZhbCkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX0lWMShfX3BkZXNjKQkJCQlcCisJU0hJRlRfQU5EX01BU0tfTEUoX19wZGVzYyArIDE2LCAwLCAzMikKKworLyogRFdPUkQgNSAqLworI2RlZmluZSBTRVRfUlhfU1RBVFVTX0RFU0NfVFNGTChfX3BkZXNjLCBfX3ZhbCkJCQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyAyMCwgMCwgMzIsIF9fdmFsKQorI2RlZmluZSBHRVRfUlhfU1RBVFVTX0RFU0NfVFNGTChfX3BkZXNjKQkJCVwKKwlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjICsgMjAsIDAsIDMyKQorCisvKiBEV09SRCA2ICovCisjZGVmaW5lIFNFVF9SWF9TVEFUVVNfX0RFU0NfQlVGRl9BRERSKF9fcGRlc2MsIF9fdmFsKQlcCisJU0VUX0JJVFNfT0ZGU0VUX0xFKF9fcGRlc2MgKyAyNCwgMCwgMzIsIF9fdmFsKQorCisjZGVmaW5lIFJYX0hBTF9JU19DQ0tfUkFURShfcGRlc2MpXAorCShHRVRfUlhfU1RBVFVTX0RFU0NfUlhfTUNTKF9wZGVzYykgPT0gREVTQzkyU19SQVRFMU0gfHwJXAorCSBHRVRfUlhfU1RBVFVTX0RFU0NfUlhfTUNTKF9wZGVzYykgPT0gREVTQzkyU19SQVRFMk0gfHwJXAorCSBHRVRfUlhfU1RBVFVTX0RFU0NfUlhfTUNTKF9wZGVzYykgPT0gREVTQzkyU19SQVRFNV81TSB8fFwKKwkgR0VUX1JYX1NUQVRVU19ERVNDX1JYX01DUyhfcGRlc2MpID09IERFU0M5MlNfUkFURTExTSkKKworZW51bSByZl9vcHR5cGUgeworCVJGX09QX0JZX1NXXzNXSVJFID0gMCwKKwlSRl9PUF9CWV9GVywKKwlSRl9PUF9NQVgKK307CisKK2VudW0gaWNfaW5mZXJpb3JpdHkgeworCUlDX0lORkVSSU9SSVRZX0EgPSAwLAorCUlDX0lORkVSSU9SSVRZX0IgPSAxLAorfTsKKworZW51bSBmd2NtZF9pb3R5cGUgeworCS8qIEZvciBESUcgRE0gKi8KKwlGV19DTURfRElHX0VOQUJMRSA9IDAsCisJRldfQ01EX0RJR19ESVNBQkxFID0gMSwKKwlGV19DTURfRElHX0hBTFQgPSAyLAorCUZXX0NNRF9ESUdfUkVTVU1FID0gMywKKwkvKiBGb3IgSGlnaCBQb3dlciBETSAqLworCUZXX0NNRF9ISUdIX1BXUl9FTkFCTEUgPSA0LAorCUZXX0NNRF9ISUdIX1BXUl9ESVNBQkxFID0gNSwKKwkvKiBGb3IgUmF0ZSBhZGFwdGl2ZSBETSAqLworCUZXX0NNRF9SQV9SRVNFVCA9IDYsCisJRldfQ01EX1JBX0FDVElWRSA9IDcsCisJRldfQ01EX1JBX1JFRlJFU0hfTiA9IDgsCisJRldfQ01EX1JBX1JFRlJFU0hfQkcgPSA5LAorCUZXX0NNRF9SQV9JTklUID0gMTAsCisJLyogRm9yIEZXIHN1cHBvcnRlZCBJUUsgKi8KKwlGV19DTURfSVFLX0lOSVQgPSAxMSwKKwkvKiBUeCBwb3dlciB0cmFja2luZyBzd2l0Y2gsCisJICogTVAgZHJpdmVyIG9ubHkgKi8KKwlGV19DTURfVFhQV1JfVFJBQ0tfRU5BQkxFID0gMTIsCisJLyogVHggcG93ZXIgdHJhY2tpbmcgc3dpdGNoLAorCSAqIE1QIGRyaXZlciBvbmx5ICovCisJRldfQ01EX1RYUFdSX1RSQUNLX0RJU0FCTEUgPSAxMywKKwkvKiBUeCBwb3dlciB0cmFja2luZyB3aXRoIHRoZXJtYWwKKwkgKiBpbmRpY2F0aW9uLCBmb3IgTm9ybWFsIGRyaXZlciAqLworCUZXX0NNRF9UWFBXUl9UUkFDS19USEVSTUFMID0gMTQsCisJRldfQ01EX1BBVVNFX0RNX0JZX1NDQU4gPSAxNSwKKwlGV19DTURfUkVTVU1FX0RNX0JZX1NDQU4gPSAxNiwKKwlGV19DTURfUkFfUkVGUkVTSF9OX0NPTUIgPSAxNywKKwlGV19DTURfUkFfUkVGUkVTSF9CR19DT01CID0gMTgsCisJRldfQ01EX0FOVEVOTkFfU1dfRU5BQkxFID0gMTksCisJRldfQ01EX0FOVEVOTkFfU1dfRElTQUJMRSA9IDIwLAorCS8qIFR4IFN0YXR1cyByZXBvcnQgZm9yIENDWCBmcm9tIEZXICovCisJRldfQ01EX1RYX0ZFRURCQUNLX0NDWF9FTkFCTEUgPSAyMSwKKwkvKiBJbmRpZmF0ZSBmaXJtd2FyZSB0aGF0IGRyaXZlcgorCSAqIGVudGVycyBMUFMsIEZvciBQUy1Qb2xsIGlzc3VlICovCisJRldfQ01EX0xQU19FTlRFUiA9IDIyLAorCS8qIEluZGljYXRlIGZpcm13YXJlIHRoYXQgZHJpdmVyCisJICogbGVhdmUgTFBTKi8KKwlGV19DTURfTFBTX0xFQVZFID0gMjMsCisJLyogU2V0IERJRyBtb2RlIHRvIHNpZ25hbCBzdHJlbmd0aCAqLworCUZXX0NNRF9ESUdfTU9ERV9TUyA9IDI0LAorCS8qIFNldCBESUcgbW9kZSB0byBmYWxzZSBhbGFybS4gKi8KKwlGV19DTURfRElHX01PREVfRkEgPSAyNSwKKwlGV19DTURfQUREX0EyX0VOVFJZID0gMjYsCisJRldfQ01EX0NUUkxfRE1fQllfRFJJVkVSID0gMjcsCisJRldfQ01EX0NUUkxfRE1fQllfRFJJVkVSX05FVyA9IDI4LAorCUZXX0NNRF9QQVBFX0NPTlRST0wgPSAyOSwKKwlGV19DTURfSVFLX0VOQUJMRSA9IDMwLAorfTsKKworLyoKKyAqIERyaXZlciBpbmZvIGNvbnRhaW4gUEhZIHN0YXR1cworICogYW5kIG90aGVyIHZhcmlhYmVsIHNpemUgaW5mbworICogUEhZIFN0YXR1cyBjb250ZW50IGFzIGJlbG93CisgKi8KK3N0cnVjdCAgcnhfZndpbmZvIHsKKwkvKiBEV09SRCAwICovCisJdTggZ2Fpbl90cnN3WzRdOworCS8qIERXT1JEIDEgKi8KKwl1OCBwd2RiX2FsbDsKKwl1OCBjZm9zaG9bNF07CisJLyogRFdPUkQgMiAqLworCXU4IGNmb3RhaWxbNF07CisJLyogRFdPUkQgMyAqLworCXM4IHJ4ZXZtWzJdOworCXM4IHJ4c25yWzRdOworCS8qIERXT1JEIDQgKi8KKwl1OCBwZHNuclsyXTsKKwkvKiBEV09SRCA1ICovCisJdTggY3NpX2N1cnJlbnRbMl07CisJdTggY3NpX3RhcmdldFsyXTsKKwkvKiBEV09SRCA2ICovCisJdTggc2lnZXZtOworCXU4IG1heF9leF9wd3I7CisJdTggZXhfaW50Zl9mbGFnOjE7CisJdTggc2dpX2VuOjE7CisJdTggcnhzYzoyOworCXU4IHJlc2VydmU6NDsKK307CisKK3N0cnVjdCBwaHlfc3RzX2Nja184MTkyc190IHsKKwl1OCBhZGNfcHdkYl94WzRdOworCXU4IHNxX3JwdDsKKwl1OCBjY2tfYWdjX3JwdDsKK307CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9kbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvZG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTg2ZGI4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvZG0uYwpAQCAtMCwwICsxLDczMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICIuLi93aWZpLmgiCisjaW5jbHVkZSAiLi4vYmFzZS5oIgorI2luY2x1ZGUgInJlZy5oIgorI2luY2x1ZGUgImRlZi5oIgorI2luY2x1ZGUgInBoeS5oIgorI2luY2x1ZGUgImRtLmgiCisjaW5jbHVkZSAiZncuaCIKKworc3RydWN0IGRpZ190IGRpZ3RhYmxlOworc3RhdGljIGNvbnN0IHUzMiBlZGNhX3NldHRpbmdfZGxbUEVFUl9NQVhdID0geworCTB4YTQ0ZiwJCS8qIDAgVU5LTk9XTiAqLworCTB4NWVhNDRmLAkvKiAxIFJFQUxURUtfOTAgKi8KKwkweDVlYTQ0ZiwJLyogMiBSRUFMVEVLXzkyU0UgKi8KKwkweGE2MzAsCQkvKiAzIEJST0FECSovCisJMHhhNDRmLAkJLyogNCBSQUwgKi8KKwkweGE2MzAsCQkvKiA1IEFUSCAqLworCTB4YTYzMCwJCS8qIDYgQ0lTQ08gKi8KKwkweGE0MmIsCQkvKiA3IE1BUlYgKi8KK307CisKK3N0YXRpYyBjb25zdCB1MzIgZWRjYV9zZXR0aW5nX2RsX2dtb2RlW1BFRVJfTUFYXSA9IHsKKwkweDQzMjIsCQkvKiAwIFVOS05PV04gKi8KKwkweGE0NGYsCQkvKiAxIFJFQUxURUtfOTAgKi8KKwkweDVlYTQ0ZiwJLyogMiBSRUFMVEVLXzkyU0UgKi8KKwkweGE0MmIsCQkvKiAzIEJST0FEICovCisJMHg1ZTQzMjIsCS8qIDQgUkFMICovCisJMHg0MzIyLAkJLyogNSBBVEggKi8KKwkweGE0MzAsCQkvKiA2IENJU0NPICovCisJMHg1ZWE0NGYsCS8qIDcgTUFSViAqLworfTsKKworc3RhdGljIGNvbnN0IHUzMiBlZGNhX3NldHRpbmdfdWxbUEVFUl9NQVhdID0geworCTB4NWU0MzIyLAkvKiAwIFVOS05PV04gKi8KKwkweGE0NGYsCQkvKiAxIFJFQUxURUtfOTAgKi8KKwkweDVlYTQ0ZiwJLyogMiBSRUFMVEVLXzkyU0UgKi8KKwkweDVlYTMyMiwJLyogMyBCUk9BRCAqLworCTB4NWVhNDIyLAkvKiA0IFJBTCAqLworCTB4NWVhMzIyLAkvKiA1IEFUSCAqLworCTB4M2VhNDRmLAkvKiA2IENJU0NPICovCisJMHg1ZWE0NGYsCS8qIDcgTUFSViAqLworfTsKKworc3RhdGljIHZvaWQgX3J0bDkyc19kbV9jaGVja19lZGNhX3R1cmJvKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCisJc3RhdGljIHU2NCBsYXN0X3R4b2tfY250OworCXN0YXRpYyB1NjQgbGFzdF9yeG9rX2NudDsKKwl1NjQgY3VyX3R4b2tfY250ID0gMDsKKwl1NjQgY3VyX3J4b2tfY250ID0gMDsKKworCXUzMiBlZGNhX2JlX3VsID0gZWRjYV9zZXR0aW5nX3VsW21hYy0+dmVuZG9yXTsKKwl1MzIgZWRjYV9iZV9kbCA9IGVkY2Ffc2V0dGluZ19kbFttYWMtPnZlbmRvcl07CisJdTMyIGVkY2FfZ21vZGUgPSBlZGNhX3NldHRpbmdfZGxfZ21vZGVbbWFjLT52ZW5kb3JdOworCisJaWYgKG1hYy0+bGlua19zdGF0ZSAhPSBNQUM4MDIxMV9MSU5LRUQpIHsKKwkJcnRscHJpdi0+ZG0uY3VycmVudF90dXJib19lZGNhID0gZmFsc2U7CisJCWdvdG8gZG1fY2hlY2tlZGNhdHVyYm9fZXhpdDsKKwl9CisKKwlpZiAoKCFydGxwcml2LT5kbS5pc19hbnlfbm9uYmVwa3RzKSAmJgorCSAgICAoIXJ0bHByaXYtPmRtLmRpc2FibGVfZnJhbWVidXJzdGluZykpIHsKKwkJY3VyX3R4b2tfY250ID0gcnRscHJpdi0+c3RhdHMudHhieXRlc3VuaWNhc3QgLSBsYXN0X3R4b2tfY250OworCQljdXJfcnhva19jbnQgPSBydGxwcml2LT5zdGF0cy5yeGJ5dGVzdW5pY2FzdCAtIGxhc3Rfcnhva19jbnQ7CisKKwkJaWYgKHJ0bHByaXYtPnBoeS5yZl90eXBlID09IFJGXzFUMlIpIHsKKwkJCWlmIChjdXJfdHhva19jbnQgPiA0ICogY3VyX3J4b2tfY250KSB7CisJCQkJLyogVXBsaW5rIFRQIGlzIHByZXNlbnQuICovCisJCQkJaWYgKHJ0bHByaXYtPmRtLmlzX2N1cl9yZGxzdGF0ZSB8fAorCQkJCQkhcnRscHJpdi0+ZG0uY3VycmVudF90dXJib19lZGNhKSB7CisJCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBFRENBUEFSQV9CRSwKKwkJCQkJCQllZGNhX2JlX3VsKTsKKwkJCQkJcnRscHJpdi0+ZG0uaXNfY3VyX3JkbHN0YXRlID0gZmFsc2U7CisJCQkJfQorCQkJfSBlbHNlIHsvKiBCYWxhbmNlIFRQIGlzIHByZXNlbnQuICovCisJCQkJaWYgKCFydGxwcml2LT5kbS5pc19jdXJfcmRsc3RhdGUgfHwKKwkJCQkJIXJ0bHByaXYtPmRtLmN1cnJlbnRfdHVyYm9fZWRjYSkgeworCQkJCQlpZiAobWFjLT5tb2RlID09IFdJUkVMRVNTX01PREVfRyB8fAorCQkJCQkgICAgbWFjLT5tb2RlID09IFdJUkVMRVNTX01PREVfQikKKwkJCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LAorCQkJCQkJCQlFRENBUEFSQV9CRSwKKwkJCQkJCQkJZWRjYV9nbW9kZSk7CisJCQkJCWVsc2UKKwkJCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LAorCQkJCQkJCQlFRENBUEFSQV9CRSwKKwkJCQkJCQkJZWRjYV9iZV9kbCk7CisJCQkJCXJ0bHByaXYtPmRtLmlzX2N1cl9yZGxzdGF0ZSA9IHRydWU7CisJCQkJfQorCQkJfQorCQkJcnRscHJpdi0+ZG0uY3VycmVudF90dXJib19lZGNhID0gdHJ1ZTsKKwkJfSBlbHNlIHsKKwkJCWlmIChjdXJfcnhva19jbnQgPiA0ICogY3VyX3R4b2tfY250KSB7CisJCQkJaWYgKCFydGxwcml2LT5kbS5pc19jdXJfcmRsc3RhdGUgfHwKKwkJCQkJIXJ0bHByaXYtPmRtLmN1cnJlbnRfdHVyYm9fZWRjYSkgeworCQkJCQlpZiAobWFjLT5tb2RlID09IFdJUkVMRVNTX01PREVfRyB8fAorCQkJCQkgICAgbWFjLT5tb2RlID09IFdJUkVMRVNTX01PREVfQikKKwkJCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LAorCQkJCQkJCQlFRENBUEFSQV9CRSwKKwkJCQkJCQkJZWRjYV9nbW9kZSk7CisJCQkJCWVsc2UKKwkJCQkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LAorCQkJCQkJCQlFRENBUEFSQV9CRSwKKwkJCQkJCQkJZWRjYV9iZV9kbCk7CisJCQkJCXJ0bHByaXYtPmRtLmlzX2N1cl9yZGxzdGF0ZSA9IHRydWU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAocnRscHJpdi0+ZG0uaXNfY3VyX3JkbHN0YXRlIHx8CisJCQkJCSFydGxwcml2LT5kbS5jdXJyZW50X3R1cmJvX2VkY2EpIHsKKwkJCQkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIEVEQ0FQQVJBX0JFLAorCQkJCQkJCWVkY2FfYmVfdWwpOworCQkJCQlydGxwcml2LT5kbS5pc19jdXJfcmRsc3RhdGUgPSBmYWxzZTsKKwkJCQl9CisJCQl9CisJCQlydGxwcml2LT5kbS5jdXJyZW50X3R1cmJvX2VkY2EgPSB0cnVlOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHJ0bHByaXYtPmRtLmN1cnJlbnRfdHVyYm9fZWRjYSkgeworCQkJdTggdG1wID0gQUMwX0JFOworCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9BQ19QQVJBTSwKKwkJCQkJCSAgICAgICh1OCAqKSgmdG1wKSk7CisJCQlydGxwcml2LT5kbS5jdXJyZW50X3R1cmJvX2VkY2EgPSBmYWxzZTsKKwkJfQorCX0KKworZG1fY2hlY2tlZGNhdHVyYm9fZXhpdDoKKwlydGxwcml2LT5kbS5pc19hbnlfbm9uYmVwa3RzID0gZmFsc2U7CisJbGFzdF90eG9rX2NudCA9IHJ0bHByaXYtPnN0YXRzLnR4Ynl0ZXN1bmljYXN0OworCWxhc3Rfcnhva19jbnQgPSBydGxwcml2LT5zdGF0cy5yeGJ5dGVzdW5pY2FzdDsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyc19kbV90eHBvd2VydHJhY2tpbmdfY2FsbGJhY2tfdGhlcm1hbG1ldGVyKAorCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKwl1OCB0aGVybWFsdmFsdWUgPSAwOworCisJcnRscHJpdi0+ZG0udHhwb3dlcl90cmFja2luZ2luaXQgPSB0cnVlOworCisJdGhlcm1hbHZhbHVlID0gKHU4KXJ0bF9nZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9BLCBSRl9UX01FVEVSLCAweDFmKTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVJfVFJBQ0tJTkcsIERCR19MT1VELAorCQkgKCJSZWFkYmFjayBUaGVybWFsIE1ldGVyID0gMHgleCBwcmUgdGhlcm1hbCBtZXRlciAweCV4ICIKKwkJICAiZWVwcm9tX3RoZXJtYWxtZXRlciAweCV4XG4iLCB0aGVybWFsdmFsdWUsCisJCSAgcnRscHJpdi0+ZG0udGhlcm1hbHZhbHVlLCBydGxlZnVzZS0+ZWVwcm9tX3RoZXJtYWxtZXRlcikpOworCisJaWYgKHRoZXJtYWx2YWx1ZSkgeworCQlydGxwcml2LT5kbS50aGVybWFsdmFsdWUgPSB0aGVybWFsdmFsdWU7CisJCXJ0bDkyc19waHlfc2V0X2Z3X2NtZChodywgRldfQ01EX1RYUFdSX1RSQUNLX1RIRVJNQUwpOworCX0KKworCXJ0bHByaXYtPmRtLnR4cG93ZXJjb3VudCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MnNfZG1fY2hlY2tfdHhwb3dlcnRyYWNraW5nX3RoZXJtYWxtZXRlcigKKwkJCQkJc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJc3RhdGljIHU4IHRtX3RyaWdnZXI7CisJdTggdHhfcG93ZXJfY2hlY2tjbnQgPSA1OworCisJLyogMlQyUiBUUCBpc3N1ZSAqLworCWlmIChydGxwaHktPnJmX3R5cGUgPT0gUkZfMlQyUikKKwkJcmV0dXJuOworCisJaWYgKCFydGxwcml2LT5kbS50eHBvd2VyX3RyYWNraW5nKQorCQlyZXR1cm47CisKKwlpZiAocnRscHJpdi0+ZG0udHhwb3dlcmNvdW50IDw9IHR4X3Bvd2VyX2NoZWNrY250KSB7CisJCXJ0bHByaXYtPmRtLnR4cG93ZXJjb3VudCsrOworCQlyZXR1cm47CisJfQorCisJaWYgKCF0bV90cmlnZ2VyKSB7CisJCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9BLCBSRl9UX01FVEVSLAorCQkJICAgICAgUkZSRUdfT0ZGU0VUX01BU0ssIDB4NjApOworCQl0bV90cmlnZ2VyID0gMTsKKwl9IGVsc2UgeworCQlfcnRsOTJzX2RtX3R4cG93ZXJ0cmFja2luZ19jYWxsYmFja190aGVybWFsbWV0ZXIoaHcpOworCQl0bV90cmlnZ2VyID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MnNfZG1fcmVmcmVzaF9yYXRlYWRhcHRpdmVfbWFzayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCByYXRlX2FkYXB0aXZlICpyYSA9ICYocnRscHJpdi0+cmEpOworCisJdTMyIGxvd19yc3NpX3RocmVzaCA9IDA7CisJdTMyIG1pZGRsZV9yc3NpX3RocmVzaCA9IDA7CisJdTMyIGhpZ2hfcnNzaV90aHJlc2ggPSAwOworCXU4IHJzc2lfbGV2ZWw7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9IE5VTEw7CisKKwlpZiAoaXNfaGFsX3N0b3AocnRsaGFsKSkKKwkJcmV0dXJuOworCisJaWYgKCFydGxwcml2LT5kbS51c2VyYW1hc2spCisJCXJldHVybjsKKworCWlmICghcnRscHJpdi0+ZG0uaW5mb3JtX2Z3X2RyaXZlcmN0cmxkbSkgeworCQlydGw5MnNfcGh5X3NldF9md19jbWQoaHcsIEZXX0NNRF9DVFJMX0RNX0JZX0RSSVZFUik7CisJCXJ0bHByaXYtPmRtLmluZm9ybV9md19kcml2ZXJjdHJsZG0gPSB0cnVlOworCX0KKworCXJjdV9yZWFkX2xvY2soKTsKKwlpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJc3RhID0gZ2V0X3N0YShodywgbWFjLT52aWYsIG1hYy0+YnNzaWQpOworCWlmICgobWFjLT5saW5rX3N0YXRlID09IE1BQzgwMjExX0xJTktFRCkgJiYKKwkgICAgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pKSB7CisJCXN3aXRjaCAocmEtPnByZV9yYXRyX3N0YXRlKSB7CisJCWNhc2UgRE1fUkFUUl9TVEFfSElHSDoKKwkJCWhpZ2hfcnNzaV90aHJlc2ggPSA0MDsKKwkJCW1pZGRsZV9yc3NpX3RocmVzaCA9IDMwOworCQkJbG93X3Jzc2lfdGhyZXNoID0gMjA7CisJCQlicmVhazsKKwkJY2FzZSBETV9SQVRSX1NUQV9NSURETEU6CisJCQloaWdoX3Jzc2lfdGhyZXNoID0gNDQ7CisJCQltaWRkbGVfcnNzaV90aHJlc2ggPSAzMDsKKwkJCWxvd19yc3NpX3RocmVzaCA9IDIwOworCQkJYnJlYWs7CisJCWNhc2UgRE1fUkFUUl9TVEFfTE9XOgorCQkJaGlnaF9yc3NpX3RocmVzaCA9IDQ0OworCQkJbWlkZGxlX3Jzc2lfdGhyZXNoID0gMzQ7CisJCQlsb3dfcnNzaV90aHJlc2ggPSAyMDsKKwkJCWJyZWFrOworCQljYXNlIERNX1JBVFJfU1RBX1VMVFJBTE9XOgorCQkJaGlnaF9yc3NpX3RocmVzaCA9IDQ0OworCQkJbWlkZGxlX3Jzc2lfdGhyZXNoID0gMzQ7CisJCQlsb3dfcnNzaV90aHJlc2ggPSAyNDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaGlnaF9yc3NpX3RocmVzaCA9IDQ0OworCQkJbWlkZGxlX3Jzc2lfdGhyZXNoID0gMzQ7CisJCQlsb3dfcnNzaV90aHJlc2ggPSAyNDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHJ0bHByaXYtPmRtLnVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPgorCQkgICAgKGxvbmcpaGlnaF9yc3NpX3RocmVzaCkgeworCQkJcmEtPnJhdHJfc3RhdGUgPSBETV9SQVRSX1NUQV9ISUdIOworCQkJcnNzaV9sZXZlbCA9IDE7CisJCX0gZWxzZSBpZiAocnRscHJpdi0+ZG0udW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYiA+CisJCQkgICAobG9uZyltaWRkbGVfcnNzaV90aHJlc2gpIHsKKwkJCXJhLT5yYXRyX3N0YXRlID0gRE1fUkFUUl9TVEFfTE9XOworCQkJcnNzaV9sZXZlbCA9IDM7CisJCX0gZWxzZSBpZiAocnRscHJpdi0+ZG0udW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYiA+CisJCQkgICAobG9uZylsb3dfcnNzaV90aHJlc2gpIHsKKwkJCXJhLT5yYXRyX3N0YXRlID0gRE1fUkFUUl9TVEFfTE9XOworCQkJcnNzaV9sZXZlbCA9IDU7CisJCX0gZWxzZSB7CisJCQlyYS0+cmF0cl9zdGF0ZSA9IERNX1JBVFJfU1RBX1VMVFJBTE9XOworCQkJcnNzaV9sZXZlbCA9IDY7CisJCX0KKworCQlpZiAocmEtPnByZV9yYXRyX3N0YXRlICE9IHJhLT5yYXRyX3N0YXRlKSB7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1JBVEUsIERCR19MT1VELCAoIlJTU0kgPSAlbGQgIgorCQkJCSJSU1NJX0xFVkVMID0gJWQgUHJlU3RhdGUgPSAlZCwgQ3VyU3RhdGUgPSAlZFxuIiwKKwkJCQlydGxwcml2LT5kbS51bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiLAorCQkJCXJhLT5yYXRyX3N0YXRlLAorCQkJCXJhLT5wcmVfcmF0cl9zdGF0ZSwgcmEtPnJhdHJfc3RhdGUpKTsKKworCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnVwZGF0ZV9yYXRlX3RibChodywgc3RhLAorCQkJCQkJCSAgIHJhLT5yYXRyX3N0YXRlKTsKKwkJCXJhLT5wcmVfcmF0cl9zdGF0ZSA9IHJhLT5yYXRyX3N0YXRlOworCQl9CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzX2RtX3N3aXRjaF9iYXNlYmFuZF9tcmMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCWJvb2wgY3VycmVudF9tcmM7CisJYm9vbCBlbmFibGVfbXJjID0gdHJ1ZTsKKwlsb25nIHRtcGVudHJ5X21heHB3ZGIgPSAwOworCXU4IHJzc2lfYSA9IDA7CisJdTggcnNzaV9iID0gMDsKKworCWlmIChpc19oYWxfc3RvcChydGxoYWwpKQorCQlyZXR1cm47CisKKwlpZiAoKHJ0bHBoeS0+cmZfdHlwZSA9PSBSRl8xVDFSKSB8fCAocnRscGh5LT5yZl90eXBlID09IFJGXzJUMlIpKQorCQlyZXR1cm47CisKKwlydGxwcml2LT5jZmctPm9wcy0+Z2V0X2h3X3JlZyhodywgSFdfVkFSX01SQywgKHU4ICopKCZjdXJyZW50X21yYykpOworCisJaWYgKG1hYy0+bGlua19zdGF0ZSA+PSBNQUM4MDIxMV9MSU5LRUQpIHsKKwkJaWYgKHJ0bHByaXYtPmRtLnVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPiB0bXBlbnRyeV9tYXhwd2RiKSB7CisJCQlyc3NpX2EgPSBydGxwcml2LT5zdGF0cy5yeF9yc3NpX3BlcmNlbnRhZ2VbUkY5MF9QQVRIX0FdOworCQkJcnNzaV9iID0gcnRscHJpdi0+c3RhdHMucnhfcnNzaV9wZXJjZW50YWdlW1JGOTBfUEFUSF9CXTsKKwkJfQorCX0KKworCS8qIE1SQyBzZXR0aW5ncyB3b3VsZCBOT1QgYWZmZWN0IFRQIG9uIFdpcmVsZXNzIEIgbW9kZS4gKi8KKwlpZiAobWFjLT5tb2RlICE9IFdJUkVMRVNTX01PREVfQikgeworCQlpZiAoKHJzc2lfYSA9PSAwKSAmJiAocnNzaV9iID09IDApKSB7CisJCQllbmFibGVfbXJjID0gdHJ1ZTsKKwkJfSBlbHNlIGlmIChyc3NpX2IgPiAzMCkgeworCQkJLyogVHVybiBvbiBCLVBhdGggKi8KKwkJCWVuYWJsZV9tcmMgPSB0cnVlOworCQl9IGVsc2UgaWYgKHJzc2lfYiA8IDUpIHsKKwkJCS8qIFR1cm4gb2ZmIEItcGF0aCAgKi8KKwkJCWVuYWJsZV9tcmMgPSBmYWxzZTsKKwkJLyogVGFrZSBjYXJlIG9mIFJTU0kgZGlmZmVyZW50aWF0aW9uLiAqLworCQl9IGVsc2UgaWYgKHJzc2lfYSA+IDE1ICYmIChyc3NpX2EgPj0gcnNzaV9iKSkgeworCQkJaWYgKChyc3NpX2EgLSByc3NpX2IpID4gMTUpCisJCQkJLyogVHVybiBvZmYgQi1wYXRoICAqLworCQkJCWVuYWJsZV9tcmMgPSBmYWxzZTsKKwkJCWVsc2UgaWYgKChyc3NpX2EgLSByc3NpX2IpIDwgMTApCisJCQkJLyogVHVybiBvbiBCLVBhdGggKi8KKwkJCQllbmFibGVfbXJjID0gdHJ1ZTsKKwkJCWVsc2UKKwkJCQllbmFibGVfbXJjID0gY3VycmVudF9tcmM7CisJCX0gZWxzZSB7CisJCQkvKiBUdXJuIG9uIEItUGF0aCAqLworCQkJZW5hYmxlX21yYyA9IHRydWU7CisJCX0KKwl9CisKKwkvKiBVcGRhdGUgTVJDIHNldHRpbmdzIGlmIG5lZWRlZC4gKi8KKwlpZiAoZW5hYmxlX21yYyAhPSBjdXJyZW50X21yYykKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9NUkMsCisJCQkJCSAgICAgICh1OCAqKSZlbmFibGVfbXJjKTsKKworfQorCit2b2lkIHJ0bDkyc19kbV9pbml0X2VkY2FfdHVyYm8oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCisJcnRscHJpdi0+ZG0uY3VycmVudF90dXJib19lZGNhID0gZmFsc2U7CisJcnRscHJpdi0+ZG0uaXNfYW55X25vbmJlcGt0cyA9IGZhbHNlOworCXJ0bHByaXYtPmRtLmlzX2N1cl9yZGxzdGF0ZSA9IGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzX2RtX2luaXRfcmF0ZV9hZGFwdGl2ZV9tYXNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcmF0ZV9hZGFwdGl2ZSAqcmEgPSAmKHJ0bHByaXYtPnJhKTsKKworCXJhLT5yYXRyX3N0YXRlID0gRE1fUkFUUl9TVEFfTUFYOworCXJhLT5wcmVfcmF0cl9zdGF0ZSA9IERNX1JBVFJfU1RBX01BWDsKKworCWlmIChydGxwcml2LT5kbS5kbV90eXBlID09IERNX1RZUEVfQllEUklWRVIpCisJCXJ0bHByaXYtPmRtLnVzZXJhbWFzayA9IHRydWU7CisJZWxzZQorCQlydGxwcml2LT5kbS51c2VyYW1hc2sgPSBmYWxzZTsKKworCXJ0bHByaXYtPmRtLnVzZXJhbWFzayA9IGZhbHNlOworCXJ0bHByaXYtPmRtLmluZm9ybV9md19kcml2ZXJjdHJsZG0gPSBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyc19kbV9pbml0X3R4cG93ZXJ0cmFja2luZ190aGVybWFsbWV0ZXIoCisJCQkJc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCisJcnRscHJpdi0+ZG0udHhwb3dlcl90cmFja2luZyA9IHRydWU7CisJcnRscHJpdi0+ZG0udHhwb3dlcmNvdW50ID0gMDsKKwlydGxwcml2LT5kbS50eHBvd2VyX3RyYWNraW5naW5pdCA9IGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzX2RtX2ZhbHNlX2FsYXJtX2NvdW50ZXJfc3RhdGlzdGljcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IGZhbHNlX2FsYXJtX3N0YXRpc3RpY3MgKmZhbHNlYWxtX2NudCA9ICYocnRscHJpdi0+ZmFsc2VhbG1fY250KTsKKwl1MzIgcmV0X3ZhbHVlOworCisJcmV0X3ZhbHVlID0gcnRsX2dldF9iYnJlZyhodywgUk9GRE1fUEhZQ09VTlRFUjEsIE1BU0tEV09SRCk7CisJZmFsc2VhbG1fY250LT5jbnRfcGFyaXR5X2ZhaWwgPSAoKHJldF92YWx1ZSAmIDB4ZmZmZjAwMDApID4+IDE2KTsKKworCXJldF92YWx1ZSA9IHJ0bF9nZXRfYmJyZWcoaHcsIFJPRkRNX1BIWUNPVU5URVIyLCBNQVNLRFdPUkQpOworCWZhbHNlYWxtX2NudC0+Y250X3JhdGVfaWxsZWdhbCA9IChyZXRfdmFsdWUgJiAweGZmZmYpOworCWZhbHNlYWxtX2NudC0+Y250X2NyYzhfZmFpbCA9ICgocmV0X3ZhbHVlICYgMHhmZmZmMDAwMCkgPj4gMTYpOworCXJldF92YWx1ZSA9IHJ0bF9nZXRfYmJyZWcoaHcsIFJPRkRNX1BIWUNPVU5URVIzLCBNQVNLRFdPUkQpOworCWZhbHNlYWxtX2NudC0+Y250X21jc19mYWlsID0gKHJldF92YWx1ZSAmIDB4ZmZmZik7CisKKwlmYWxzZWFsbV9jbnQtPmNudF9vZmRtX2ZhaWwgPSBmYWxzZWFsbV9jbnQtPmNudF9wYXJpdHlfZmFpbCArCisJCWZhbHNlYWxtX2NudC0+Y250X3JhdGVfaWxsZWdhbCArIGZhbHNlYWxtX2NudC0+Y250X2NyYzhfZmFpbCArCisJCWZhbHNlYWxtX2NudC0+Y250X21jc19mYWlsOworCisJLyogcmVhZCBDQ0sgZmFsc2UgYWxhcm0gKi8KKwlyZXRfdmFsdWUgPSBydGxfZ2V0X2JicmVnKGh3LCAweGM2NCwgTUFTS0RXT1JEKTsKKwlmYWxzZWFsbV9jbnQtPmNudF9jY2tfZmFpbCA9IChyZXRfdmFsdWUgJiAweGZmZmYpOworCWZhbHNlYWxtX2NudC0+Y250X2FsbCA9CWZhbHNlYWxtX2NudC0+Y250X29mZG1fZmFpbCArCisJCWZhbHNlYWxtX2NudC0+Y250X2Nja19mYWlsOworfQorCitzdGF0aWMgdm9pZCBydGw5MnNfYmFja29mZl9lbmFibGVfZmxhZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IGZhbHNlX2FsYXJtX3N0YXRpc3RpY3MgKmZhbHNlYWxtX2NudCA9ICYocnRscHJpdi0+ZmFsc2VhbG1fY250KTsKKworCWlmIChmYWxzZWFsbV9jbnQtPmNudF9hbGwgPiBkaWd0YWJsZS5mYV9oaWdodGhyZXNoKSB7CisJCWlmICgoZGlndGFibGUuYmFja29mZl92YWwgLSA2KSA8CisJCQlkaWd0YWJsZS5iYWNrb2ZmdmFsX3JhbmdlX21pbikKKwkJCWRpZ3RhYmxlLmJhY2tvZmZfdmFsID0gZGlndGFibGUuYmFja29mZnZhbF9yYW5nZV9taW47CisJCWVsc2UKKwkJCWRpZ3RhYmxlLmJhY2tvZmZfdmFsIC09IDY7CisJfSBlbHNlIGlmIChmYWxzZWFsbV9jbnQtPmNudF9hbGwgPCBkaWd0YWJsZS5mYV9sb3d0aHJlc2gpIHsKKwkJaWYgKChkaWd0YWJsZS5iYWNrb2ZmX3ZhbCArIDYpID4KKwkJCWRpZ3RhYmxlLmJhY2tvZmZ2YWxfcmFuZ2VfbWF4KQorCQkJZGlndGFibGUuYmFja29mZl92YWwgPQorCQkJCSBkaWd0YWJsZS5iYWNrb2ZmdmFsX3JhbmdlX21heDsKKwkJZWxzZQorCQkJZGlndGFibGUuYmFja29mZl92YWwgKz0gNjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MnNfZG1faW5pdGlhbF9nYWluX3N0YV9iZWZvcmVjb25uZWN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgZmFsc2VfYWxhcm1fc3RhdGlzdGljcyAqZmFsc2VhbG1fY250ID0gJihydGxwcml2LT5mYWxzZWFsbV9jbnQpOworCXN0YXRpYyB1OCBpbml0aWFsaXplZCwgZm9yY2Vfd3JpdGU7CisJdTggaW5pdGlhbF9nYWluID0gMDsKKworCWlmICgoZGlndGFibGUucHJlX3N0YV9jb25uZWN0c3RhdGUgPT0gZGlndGFibGUuY3VyX3N0YV9jb25uZWN0c3RhdGUpIHx8CisJCShkaWd0YWJsZS5jdXJfc3RhX2Nvbm5lY3RzdGF0ZSA9PSBESUdfU1RBX0JFRk9SRV9DT05ORUNUKSkgeworCQlpZiAoZGlndGFibGUuY3VyX3N0YV9jb25uZWN0c3RhdGUgPT0gRElHX1NUQV9CRUZPUkVfQ09OTkVDVCkgeworCQkJaWYgKHJ0bHByaXYtPnBzYy5yZnB3cl9zdGF0ZSAhPSBFUkZPTikKKwkJCQlyZXR1cm47CisKKwkJCWlmIChkaWd0YWJsZS5iYWNrb2ZmX2VuYWJsZV9mbGFnID09IHRydWUpCisJCQkJcnRsOTJzX2JhY2tvZmZfZW5hYmxlX2ZsYWcoaHcpOworCQkJZWxzZQorCQkJCWRpZ3RhYmxlLmJhY2tvZmZfdmFsID0gRE1fRElHX0JBQ0tPRkY7CisKKwkJCWlmICgoZGlndGFibGUucnNzaV92YWwgKyAxMCAtIGRpZ3RhYmxlLmJhY2tvZmZfdmFsKSA+CisJCQkJZGlndGFibGUucnhfZ2Fpbl9yYW5nZV9tYXgpCisJCQkJZGlndGFibGUuY3VyX2lndmFsdWUgPQorCQkJCQkJZGlndGFibGUucnhfZ2Fpbl9yYW5nZV9tYXg7CisJCQllbHNlIGlmICgoZGlndGFibGUucnNzaV92YWwgKyAxMCAtIGRpZ3RhYmxlLmJhY2tvZmZfdmFsKQorCQkJCSA8IGRpZ3RhYmxlLnJ4X2dhaW5fcmFuZ2VfbWluKQorCQkJCWRpZ3RhYmxlLmN1cl9pZ3ZhbHVlID0KKwkJCQkJCWRpZ3RhYmxlLnJ4X2dhaW5fcmFuZ2VfbWluOworCQkJZWxzZQorCQkJCWRpZ3RhYmxlLmN1cl9pZ3ZhbHVlID0gZGlndGFibGUucnNzaV92YWwgKyAxMCAtCisJCQkJCQlkaWd0YWJsZS5iYWNrb2ZmX3ZhbDsKKworCQkJaWYgKGZhbHNlYWxtX2NudC0+Y250X2FsbCA+IDEwMDAwKQorCQkJCWRpZ3RhYmxlLmN1cl9pZ3ZhbHVlID0KKwkJCQkJIChkaWd0YWJsZS5jdXJfaWd2YWx1ZSA+IDB4MzMpID8KKwkJCQkJIGRpZ3RhYmxlLmN1cl9pZ3ZhbHVlIDogMHgzMzsKKworCQkJaWYgKGZhbHNlYWxtX2NudC0+Y250X2FsbCA+IDE2MDAwKQorCQkJCWRpZ3RhYmxlLmN1cl9pZ3ZhbHVlID0KKwkJCQkJCSBkaWd0YWJsZS5yeF9nYWluX3JhbmdlX21heDsKKwkJLyogY29ubmVjdGVkIC0+IGNvbm5lY3RlZCBvciBkaXNjb25uZWN0ZWQgLT4gZGlzY29ubmVjdGVkICAqLworCQl9IGVsc2UgeworCQkJLyogRmlybXdhcmUgY29udHJvbCBESUcsIGRvIG5vdGhpbmcgaW4gZHJpdmVyIGRtICovCisJCQlyZXR1cm47CisJCX0KKwkJLyogZGlzY29ubmVjdGVkIC0+IGNvbm5lY3RlZCBvciBjb25uZWN0ZWQgLT4KKwkJICogZGlzY29ubmVjdGVkIG9yIGJlZm9yZWNvbm5lY3QtPihkaXMpY29ubmVjdGVkICovCisJfSBlbHNlIHsKKwkJLyogRW5hYmxlIEZXIERJRyAqLworCQlkaWd0YWJsZS5kaWdfZXh0X3BvcnRfc3RhZ2UgPSBESUdfRVhUX1BPUlRfU1RBR0VfTUFYOworCQlydGw5MnNfcGh5X3NldF9md19jbWQoaHcsIEZXX0NNRF9ESUdfRU5BQkxFKTsKKworCQlkaWd0YWJsZS5iYWNrb2ZmX3ZhbCA9IERNX0RJR19CQUNLT0ZGOworCQlkaWd0YWJsZS5jdXJfaWd2YWx1ZSA9IHJ0bHByaXYtPnBoeS5kZWZhdWx0X2luaXRpYWxnYWluWzBdOworCQlkaWd0YWJsZS5wcmVfaWd2YWx1ZSA9IDA7CisJCXJldHVybjsKKwl9CisKKwkvKiBGb3JjZWQgd3JpdGluZyB0byBwcmV2ZW50IGZyb20gZnctZGlnIG92ZXJ3cml0aW5nLiAqLworCWlmIChkaWd0YWJsZS5wcmVfaWd2YWx1ZSAhPSBydGxfZ2V0X2JicmVnKGh3LCBST0ZETTBfWEFBR0NDT1JFMSwKKwkJCQkJCSAgTUFTS0JZVEUwKSkKKwkJZm9yY2Vfd3JpdGUgPSAxOworCisJaWYgKChkaWd0YWJsZS5wcmVfaWd2YWx1ZSAhPSBkaWd0YWJsZS5jdXJfaWd2YWx1ZSkgfHwKKwkgICAgIWluaXRpYWxpemVkIHx8IGZvcmNlX3dyaXRlKSB7CisJCS8qIERpc2FibGUgRlcgRElHICovCisJCXJ0bDkyc19waHlfc2V0X2Z3X2NtZChodywgRldfQ01EX0RJR19ESVNBQkxFKTsKKworCQlpbml0aWFsX2dhaW4gPSAodTgpZGlndGFibGUuY3VyX2lndmFsdWU7CisKKwkJLyogU2V0IGluaXRpYWwgZ2Fpbi4gKi8KKwkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1hBQUdDQ09SRTEsIE1BU0tCWVRFMCwgaW5pdGlhbF9nYWluKTsKKwkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1hCQUdDQ09SRTEsIE1BU0tCWVRFMCwgaW5pdGlhbF9nYWluKTsKKwkJZGlndGFibGUucHJlX2lndmFsdWUgPSBkaWd0YWJsZS5jdXJfaWd2YWx1ZTsKKwkJaW5pdGlhbGl6ZWQgPSAxOworCQlmb3JjZV93cml0ZSA9IDA7CisJfQorfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzX2RtX2N0cmxfaW5pdGdhaW5fYnl0d29wb3J0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCWlmIChydGxwcml2LT5tYWM4MDIxMS5hY3Rfc2Nhbm5pbmcpCisJCXJldHVybjsKKworCS8qIERlY2lkZSB0aGUgY3VycmVudCBzdGF0dXMgYW5kIGlmIG1vZGlmeSBpbml0aWFsIGdhaW4gb3Igbm90ICovCisJaWYgKHJ0bHByaXYtPm1hYzgwMjExLmxpbmtfc3RhdGUgPj0gTUFDODAyMTFfTElOS0VEIHx8CisJICAgIHJ0bHByaXYtPm1hYzgwMjExLm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJZGlndGFibGUuY3VyX3N0YV9jb25uZWN0c3RhdGUgPSBESUdfU1RBX0NPTk5FQ1Q7CisJZWxzZQorCQlkaWd0YWJsZS5jdXJfc3RhX2Nvbm5lY3RzdGF0ZSA9IERJR19TVEFfRElTQ09OTkVDVDsKKworCWRpZ3RhYmxlLnJzc2lfdmFsID0gcnRscHJpdi0+ZG0udW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYjsKKworCS8qIENoYW5nZSBkaWcgbW9kZSB0byByc3NpICovCisJaWYgKGRpZ3RhYmxlLmN1cl9zdGFfY29ubmVjdHN0YXRlICE9IERJR19TVEFfRElTQ09OTkVDVCkgeworCQlpZiAoZGlndGFibGUuZGlnX3R3b3BvcnRfYWxnb3JpdGhtID09CisJCSAgICBESUdfVFdPX1BPUlRfQUxHT19GQUxTRV9BTEFSTSkgeworCQkJZGlndGFibGUuZGlnX3R3b3BvcnRfYWxnb3JpdGhtID0gRElHX1RXT19QT1JUX0FMR09fUlNTSTsKKwkJCXJ0bDkyc19waHlfc2V0X2Z3X2NtZChodywgRldfQ01EX0RJR19NT0RFX1NTKTsKKwkJfQorCX0KKworCV9ydGw5MnNfZG1fZmFsc2VfYWxhcm1fY291bnRlcl9zdGF0aXN0aWNzKGh3KTsKKwlfcnRsOTJzX2RtX2luaXRpYWxfZ2Fpbl9zdGFfYmVmb3JlY29ubmVjdChodyk7CisKKwlkaWd0YWJsZS5wcmVfc3RhX2Nvbm5lY3RzdGF0ZSA9IGRpZ3RhYmxlLmN1cl9zdGFfY29ubmVjdHN0YXRlOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzX2RtX2N0cmxfaW5pdGdhaW5fYnlyc3NpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCisJLyogMlQyUiBUUCBpc3N1ZSAqLworCWlmIChydGxwaHktPnJmX3R5cGUgPT0gUkZfMlQyUikKKwkJcmV0dXJuOworCisJaWYgKCFydGxwcml2LT5kbS5kbV9pbml0aWFsZ2Fpbl9lbmFibGUpCisJCXJldHVybjsKKworCWlmIChkaWd0YWJsZS5kaWdfZW5hYmxlX2ZsYWcgPT0gZmFsc2UpCisJCXJldHVybjsKKworCV9ydGw5MnNfZG1fY3RybF9pbml0Z2Fpbl9ieXR3b3BvcnQoaHcpOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzX2RtX2R5bmFtaWNfdHhwb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCWxvbmcgdW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYjsKKwlsb25nIHR4cHdyX3RocmVzaG9sZF9sdjEsIHR4cHdyX3RocmVzaG9sZF9sdjI7CisKKwkvKiAyVDJSIFRQIGlzc3VlICovCisJaWYgKHJ0bHBoeS0+cmZfdHlwZSA9PSBSRl8yVDJSKQorCQlyZXR1cm47CisKKwlpZiAoIXJ0bHByaXYtPmRtLmR5bmFtaWNfdHhwb3dlcl9lbmFibGUgfHwKKwkgICAgcnRscHJpdi0+ZG0uZG1fZmxhZyAmIEhBTF9ETV9ISVBXUl9ESVNBQkxFKSB7CisJCXJ0bHByaXYtPmRtLmR5bmFtaWNfdHhoaWdocG93ZXJfbHZsID0gVFhfSElHSFBXUl9MRVZFTF9OT1JNQUw7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKG1hYy0+bGlua19zdGF0ZSA8IE1BQzgwMjExX0xJTktFRCkgJiYKKwkgICAgKHJ0bHByaXYtPmRtLmVudHJ5X21pbl91bmRlY29yYXRlZHNtb290aGVkX3B3ZGIgPT0gMCkpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX1RSQUNFLAorCQkJICgiTm90IGNvbm5lY3RlZCB0byBhbnlcbiIpKTsKKworCQlydGxwcml2LT5kbS5keW5hbWljX3R4aGlnaHBvd2VyX2x2bCA9IFRYX0hJR0hQV1JfTEVWRUxfTk9STUFMOworCisJCXJ0bHByaXYtPmRtLmxhc3RfZHRwX2x2bCA9IFRYX0hJR0hQV1JfTEVWRUxfTk9STUFMOworCQlyZXR1cm47CisJfQorCisJaWYgKG1hYy0+bGlua19zdGF0ZSA+PSBNQUM4MDIxMV9MSU5LRUQpIHsKKwkJaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCQl1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiID0KKwkJCSAgICBydGxwcml2LT5kbS5lbnRyeV9taW5fdW5kZWNvcmF0ZWRzbW9vdGhlZF9wd2RiOworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX0xPVUQsCisJCQkJICgiQVAgQ2xpZW50IFBXREIgPSAweCVseFxuIiwKKwkJCQkgIHVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIpKTsKKwkJfSBlbHNlIHsKKwkJCXVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPQorCQkJICAgIHJ0bHByaXYtPmRtLnVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGI7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwKKwkJCQkgKCJTVEEgRGVmYXVsdCBQb3J0IFBXREIgPSAweCVseFxuIiwKKwkJCQkgIHVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIpKTsKKwkJfQorCX0gZWxzZSB7CisJCXVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPQorCQkgICAgcnRscHJpdi0+ZG0uZW50cnlfbWluX3VuZGVjb3JhdGVkc21vb3RoZWRfcHdkYjsKKworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwKKwkJCSAoIkFQIEV4dCBQb3J0IFBXREIgPSAweCVseFxuIiwKKwkJCSAgdW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYikpOworCX0KKworCXR4cHdyX3RocmVzaG9sZF9sdjIgPSBUWF9QT1dFUl9ORUFSX0ZJRUxEX1RIUkVTSF9MVkwyOworCXR4cHdyX3RocmVzaG9sZF9sdjEgPSBUWF9QT1dFUl9ORUFSX0ZJRUxEX1RIUkVTSF9MVkwxOworCisJaWYgKHJ0bF9nZXRfYmJyZWcoaHcsIDB4YzkwLCBNQVNLQllURTApID09IDEpCisJCXJ0bHByaXYtPmRtLmR5bmFtaWNfdHhoaWdocG93ZXJfbHZsID0gVFhfSElHSFBXUl9MRVZFTF9OT1JNQUw7CisJZWxzZSBpZiAodW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYiA+PSB0eHB3cl90aHJlc2hvbGRfbHYyKQorCQlydGxwcml2LT5kbS5keW5hbWljX3R4aGlnaHBvd2VyX2x2bCA9IFRYX0hJR0hQV1JfTEVWRUxfTk9STUFMMjsKKwllbHNlIGlmICgodW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYiA8ICh0eHB3cl90aHJlc2hvbGRfbHYyIC0gMykpICYmCisJCSh1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiID49IHR4cHdyX3RocmVzaG9sZF9sdjEpKQorCQlydGxwcml2LT5kbS5keW5hbWljX3R4aGlnaHBvd2VyX2x2bCA9IFRYX0hJR0hQV1JfTEVWRUxfTk9STUFMMTsKKwllbHNlIGlmICh1bmRlY29yYXRlZF9zbW9vdGhlZF9wd2RiIDwgKHR4cHdyX3RocmVzaG9sZF9sdjEgLSAzKSkKKwkJcnRscHJpdi0+ZG0uZHluYW1pY190eGhpZ2hwb3dlcl9sdmwgPSBUWF9ISUdIUFdSX0xFVkVMX05PUk1BTDsKKworCWlmICgocnRscHJpdi0+ZG0uZHluYW1pY190eGhpZ2hwb3dlcl9sdmwgIT0gcnRscHJpdi0+ZG0ubGFzdF9kdHBfbHZsKSkKKwkJcnRsOTJzX3BoeV9zZXRfdHhwb3dlcihodywgcnRscGh5LT5jdXJyZW50X2NoYW5uZWwpOworCisJcnRscHJpdi0+ZG0ubGFzdF9kdHBfbHZsID0gcnRscHJpdi0+ZG0uZHluYW1pY190eGhpZ2hwb3dlcl9sdmw7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MnNfZG1faW5pdF9kaWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCisJLyogRGlzYWJsZSBESUcgc2NoZW1lIG5vdy4qLworCWRpZ3RhYmxlLmRpZ19lbmFibGVfZmxhZyA9IHRydWU7CisJZGlndGFibGUuYmFja29mZl9lbmFibGVfZmxhZyA9IHRydWU7CisKKwlpZiAoKHJ0bHByaXYtPmRtLmRtX3R5cGUgPT0gRE1fVFlQRV9CWURSSVZFUikgJiYKKwkgICAgKGhhbF9nZXRfZmlybXdhcmV2ZXJzaW9uKHJ0bHByaXYpID49IDB4M2MpKQorCQlkaWd0YWJsZS5kaWdfYWxnb3JpdGhtID0gRElHX0FMR09fQllfVE9XX1BPUlQ7CisJZWxzZQorCQlkaWd0YWJsZS5kaWdfYWxnb3JpdGhtID0KKwkJCSBESUdfQUxHT19CRUZPUkVfQ09OTkVDVF9CWV9SU1NJX0FORF9BTEFSTTsKKworCWRpZ3RhYmxlLmRpZ190d29wb3J0X2FsZ29yaXRobSA9IERJR19UV09fUE9SVF9BTEdPX1JTU0k7CisJZGlndGFibGUuZGlnX2V4dF9wb3J0X3N0YWdlID0gRElHX0VYVF9QT1JUX1NUQUdFX01BWDsKKwkvKiBvZmY9YnkgcmVhbCByc3NpIHZhbHVlLCBvbj1ieSBkaWd0YWJsZS5yc3NpX3ZhbCBmb3IgbmV3IGRpZyAqLworCWRpZ3RhYmxlLmRpZ19kYmdtb2RlID0gRE1fREJHX09GRjsKKwlkaWd0YWJsZS5kaWdfc2xnb3JpdGhtX3N3aXRjaCA9IDA7CisKKwkvKiAyMDA3LzEwLzA0IE1IIERlZmluZSBpbml0IGdhaW4gdGhyZXNob2wuICovCisJZGlndGFibGUuZGlnX3N0YXRlID0gRE1fU1RBX0RJR19NQVg7CisJZGlndGFibGUuZGlnX2hpZ2hwd3JzdGF0ZSA9IERNX1NUQV9ESUdfTUFYOworCisJZGlndGFibGUuY3VyX3N0YV9jb25uZWN0c3RhdGUgPSBESUdfU1RBX0RJU0NPTk5FQ1Q7CisJZGlndGFibGUucHJlX3N0YV9jb25uZWN0c3RhdGUgPSBESUdfU1RBX0RJU0NPTk5FQ1Q7CisJZGlndGFibGUuY3VyX2FwX2Nvbm5lY3RzdGF0ZSA9IERJR19BUF9ESVNDT05ORUNUOworCWRpZ3RhYmxlLnByZV9hcF9jb25uZWN0c3RhdGUgPSBESUdfQVBfRElTQ09OTkVDVDsKKworCWRpZ3RhYmxlLnJzc2lfbG93dGhyZXNoID0gRE1fRElHX1RIUkVTSF9MT1c7CisJZGlndGFibGUucnNzaV9oaWdodGhyZXNoID0gRE1fRElHX1RIUkVTSF9ISUdIOworCisJZGlndGFibGUuZmFfbG93dGhyZXNoID0gRE1fRkFMU0VBTEFSTV9USFJFU0hfTE9XOworCWRpZ3RhYmxlLmZhX2hpZ2h0aHJlc2ggPSBETV9GQUxTRUFMQVJNX1RIUkVTSF9ISUdIOworCisJZGlndGFibGUucnNzaV9oaWdocG93ZXJfbG93dGhyZXNoID0gRE1fRElHX0hJR0hfUFdSX1RIUkVTSF9MT1c7CisJZGlndGFibGUucnNzaV9oaWdocG93ZXJfaGlnaHRocmVzaCA9IERNX0RJR19ISUdIX1BXUl9USFJFU0hfSElHSDsKKworCS8qIGZvciBkaWcgZGVidWcgcnNzaSB2YWx1ZSAqLworCWRpZ3RhYmxlLnJzc2lfdmFsID0gNTA7CisJZGlndGFibGUuYmFja29mZl92YWwgPSBETV9ESUdfQkFDS09GRjsKKwlkaWd0YWJsZS5yeF9nYWluX3JhbmdlX21heCA9IERNX0RJR19NQVg7CisKKwlkaWd0YWJsZS5yeF9nYWluX3JhbmdlX21pbiA9IERNX0RJR19NSU47CisKKwlkaWd0YWJsZS5iYWNrb2ZmdmFsX3JhbmdlX21heCA9IERNX0RJR19CQUNLT0ZGX01BWDsKKwlkaWd0YWJsZS5iYWNrb2ZmdmFsX3JhbmdlX21pbiA9IERNX0RJR19CQUNLT0ZGX01JTjsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyc19kbV9pbml0X2R5bmFtaWNfdHhwb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlpZiAoKGhhbF9nZXRfZmlybXdhcmV2ZXJzaW9uKHJ0bHByaXYpID49IDYwKSAmJgorCSAgICAocnRscHJpdi0+ZG0uZG1fdHlwZSA9PSBETV9UWVBFX0JZRFJJVkVSKSkKKwkJcnRscHJpdi0+ZG0uZHluYW1pY190eHBvd2VyX2VuYWJsZSA9IHRydWU7CisJZWxzZQorCQlydGxwcml2LT5kbS5keW5hbWljX3R4cG93ZXJfZW5hYmxlID0gZmFsc2U7CisKKwlydGxwcml2LT5kbS5sYXN0X2R0cF9sdmwgPSBUWF9ISUdIUFdSX0xFVkVMX05PUk1BTDsKKwlydGxwcml2LT5kbS5keW5hbWljX3R4aGlnaHBvd2VyX2x2bCA9IFRYX0hJR0hQV1JfTEVWRUxfTk9STUFMOworfQorCit2b2lkIHJ0bDkyc19kbV9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCXJ0bHByaXYtPmRtLmRtX3R5cGUgPSBETV9UWVBFX0JZRFJJVkVSOworCXJ0bHByaXYtPmRtLnVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGIgPSAtMTsKKworCV9ydGw5MnNfZG1faW5pdF9keW5hbWljX3R4cG93ZXIoaHcpOworCXJ0bDkyc19kbV9pbml0X2VkY2FfdHVyYm8oaHcpOworCV9ydGw5MnNfZG1faW5pdF9yYXRlX2FkYXB0aXZlX21hc2soaHcpOworCV9ydGw5MnNfZG1faW5pdF90eHBvd2VydHJhY2tpbmdfdGhlcm1hbG1ldGVyKGh3KTsKKwlfcnRsOTJzX2RtX2luaXRfZGlnKGh3KTsKKworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBXRk01LCBGV19DQ0FfQ0hLX0VOQUJMRSk7Cit9CisKK3ZvaWQgcnRsOTJzX2RtX3dhdGNoZG9nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCV9ydGw5MnNfZG1fY2hlY2tfZWRjYV90dXJibyhodyk7CisJX3J0bDkyc19kbV9jaGVja190eHBvd2VydHJhY2tpbmdfdGhlcm1hbG1ldGVyKGh3KTsKKwlfcnRsOTJzX2RtX2N0cmxfaW5pdGdhaW5fYnlyc3NpKGh3KTsKKwlfcnRsOTJzX2RtX2R5bmFtaWNfdHhwb3dlcihodyk7CisJX3J0bDkyc19kbV9yZWZyZXNoX3JhdGVhZGFwdGl2ZV9tYXNrKGh3KTsKKwlfcnRsOTJzX2RtX3N3aXRjaF9iYXNlYmFuZF9tcmMoaHcpOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9kbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvZG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDUxYTU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvZG0uaApAQCAtMCwwICsxLDE2NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmCV9fUlRMXzkyU19ETV9IX18KKyNkZWZpbmUgX19SVExfOTJTX0RNX0hfXworCitzdHJ1Y3QgZGlnX3QgeworCXU4IGRpZ19lbmFibGVfZmxhZzsKKwl1OCBkaWdfYWxnb3JpdGhtOworCXU4IGRpZ190d29wb3J0X2FsZ29yaXRobTsKKwl1OCBkaWdfZXh0X3BvcnRfc3RhZ2U7CisJdTggZGlnX2RiZ21vZGU7CisJdTggZGlnX3NsZ29yaXRobV9zd2l0Y2g7CisKKwlsb25nIHJzc2lfbG93dGhyZXNoOworCWxvbmcgcnNzaV9oaWdodGhyZXNoOworCisJdTMyIGZhX2xvd3RocmVzaDsKKwl1MzIgZmFfaGlnaHRocmVzaDsKKworCWxvbmcgcnNzaV9oaWdocG93ZXJfbG93dGhyZXNoOworCWxvbmcgcnNzaV9oaWdocG93ZXJfaGlnaHRocmVzaDsKKworCXU4IGRpZ19zdGF0ZTsKKwl1OCBkaWdfaGlnaHB3cnN0YXRlOworCXU4IGN1cl9zdGFfY29ubmVjdHN0YXRlOworCXU4IHByZV9zdGFfY29ubmVjdHN0YXRlOworCXU4IGN1cl9hcF9jb25uZWN0c3RhdGU7CisJdTggcHJlX2FwX2Nvbm5lY3RzdGF0ZTsKKworCXU4IGN1cl9wZF90aHN0YXRlOworCXU4IHByZV9wZF90aHN0YXRlOworCXU4IGN1cl9jc19yYXRpb3N0YXRlOworCXU4IHByZV9jc19yYXRpb3N0YXRlOworCisJdTMyIHByZV9pZ3ZhbHVlOworCXUzMgljdXJfaWd2YWx1ZTsKKworCXU4IGJhY2tvZmZfZW5hYmxlX2ZsYWc7CisJY2hhciBiYWNrb2ZmX3ZhbDsKKwljaGFyIGJhY2tvZmZ2YWxfcmFuZ2VfbWF4OworCWNoYXIgYmFja29mZnZhbF9yYW5nZV9taW47CisJdTggcnhfZ2Fpbl9yYW5nZV9tYXg7CisJdTggcnhfZ2Fpbl9yYW5nZV9taW47CisKKwlsb25nIHJzc2lfdmFsOworfTsKKworZW51bSBkbV9kaWdfYWxnIHsKKwlESUdfQUxHT19CWV9GQUxTRV9BTEFSTSA9IDAsCisJRElHX0FMR09fQllfUlNTSQk9IDEsCisJRElHX0FMR09fQkVGT1JFX0NPTk5FQ1RfQllfUlNTSV9BTkRfQUxBUk0gPSAyLAorCURJR19BTEdPX0JZX1RPV19QT1JUID0gMywKKwlESUdfQUxHT19NQVgKK307CisKK2VudW0gZG1fZGlnX3R3b19wb3J0X2FsZyB7CisJRElHX1RXT19QT1JUX0FMR09fUlNTSSA9IDAsCisJRElHX1RXT19QT1JUX0FMR09fRkFMU0VfQUxBUk0gPSAxLAorfTsKKworZW51bSBkbV9kaWdfZGJnIHsKKwlETV9EQkdfT0ZGID0gMCwKKwlETV9EQkdfT04gPSAxLAorCURNX0RCR19NQVgKK307CisKK2VudW0gZG1fZGlnX3N0YSB7CisJRE1fU1RBX0RJR19PRkYgPSAwLAorCURNX1NUQV9ESUdfT04sCisJRE1fU1RBX0RJR19NQVgKK307CisKK2VudW0gZG1fZGlnX2Nvbm5lY3QgeworCURJR19TVEFfRElTQ09OTkVDVCA9IDAsCisJRElHX1NUQV9DT05ORUNUID0gMSwKKwlESUdfU1RBX0JFRk9SRV9DT05ORUNUID0gMiwKKwlESUdfQVBfRElTQ09OTkVDVCA9IDMsCisJRElHX0FQX0NPTk5FQ1QgPSA0LAorCURJR19BUF9BRERfU1RBVElPTiA9IDUsCisJRElHX0NPTk5FQ1RfTUFYCit9OworCitlbnVtIGRtX2RpZ19leHRfcG9ydF9hbGcgeworCURJR19FWFRfUE9SVF9TVEFHRV8wID0gMCwKKwlESUdfRVhUX1BPUlRfU1RBR0VfMSA9IDEsCisJRElHX0VYVF9QT1JUX1NUQUdFXzIgPSAyLAorCURJR19FWFRfUE9SVF9TVEFHRV8zID0gMywKKwlESUdfRVhUX1BPUlRfU1RBR0VfTUFYID0gNCwKK307CisKK2VudW0gZG1fcmF0cl9zdGEgeworCURNX1JBVFJfU1RBX0hJR0ggPSAwLAorCURNX1JBVFJfU1RBX01JRERMRUhJR0ggPSAxLAorCURNX1JBVFJfU1RBX01JRERMRSA9IDIsCisJRE1fUkFUUl9TVEFfTUlERExFTE9XID0gMywKKwlETV9SQVRSX1NUQV9MT1cgPSA0LAorCURNX1JBVFJfU1RBX1VMVFJBTE9XID0gNSwKKwlETV9SQVRSX1NUQV9NQVgKK307CisKKyNkZWZpbmUgRE1fVFlQRV9CWUZXCQkJMAorI2RlZmluZSBETV9UWVBFX0JZRFJJVkVSCQkxCisKKyNkZWZpbmUJVFhfSElHSF9QV1JfTEVWRUxfTk9STUFMCTAKKyNkZWZpbmUJVFhfSElHSF9QV1JfTEVWRUxfTEVWRUwxCTEKKyNkZWZpbmUJVFhfSElHSF9QV1JfTEVWRUxfTEVWRUwyCTIKKworI2RlZmluZQlIQUxfRE1fRElHX0RJU0FCTEUJCUJJVCgwKQkvKiBEaXNhYmxlIERpZyAqLworI2RlZmluZQlIQUxfRE1fSElQV1JfRElTQUJMRQkJQklUKDEpCS8qIERpc2FibGUgSGlnaCBQb3dlciAqLworCisjZGVmaW5lCVRYX0hJR0hQV1JfTEVWRUxfTk9STUFMCQkwCisjZGVmaW5lCVRYX0hJR0hQV1JfTEVWRUxfTk9STUFMMQkxCisjZGVmaW5lCVRYX0hJR0hQV1JfTEVWRUxfTk9STUFMMgkyCisKKyNkZWZpbmUJVFhfUE9XRVJfTkVBUl9GSUVMRF9USFJFU0hfTFZMMgk3NAorI2RlZmluZQlUWF9QT1dFUl9ORUFSX0ZJRUxEX1RIUkVTSF9MVkwxCTY3CisKKyNkZWZpbmUgRE1fRElHX1RIUkVTSF9ISUdICQk0MAorI2RlZmluZSBETV9ESUdfVEhSRVNIX0xPVwkJMzUKKyNkZWZpbmUJRE1fRkFMU0VBTEFSTV9USFJFU0hfTE9XCTQwCisjZGVmaW5lCURNX0ZBTFNFQUxBUk1fVEhSRVNIX0hJR0gJMTAwMAorI2RlZmluZQlETV9ESUdfSElHSF9QV1JfVEhSRVNIX0hJR0gJNzUKKyNkZWZpbmUJRE1fRElHX0hJR0hfUFdSX1RIUkVTSF9MT1cJNzAKKyNkZWZpbmUJRE1fRElHX0JBQ0tPRkYJCQkxMgorI2RlZmluZQlETV9ESUdfTUFYCQkJMHgzZQorI2RlZmluZQlETV9ESUdfTUlOCQkJMHgxYworI2RlZmluZQlETV9ESUdfTUlOX05ldGNvcmUJCTB4MTIKKyNkZWZpbmUJRE1fRElHX0JBQ0tPRkZfTUFYCQkxMgorI2RlZmluZQlETV9ESUdfQkFDS09GRl9NSU4JCS00CisKK2V4dGVybiBzdHJ1Y3QgZGlnX3QgZGlndGFibGU7CisKK3ZvaWQgcnRsOTJzX2RtX3dhdGNoZG9nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJzX2RtX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MnNfZG1faW5pdF9lZGNhX3R1cmJvKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL2Z3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9mdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNWFmMDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9mdy5jCkBAIC0wLDAgKzEsNjU0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIi4uL3dpZmkuaCIKKyNpbmNsdWRlICIuLi9wY2kuaCIKKyNpbmNsdWRlICIuLi9iYXNlLmgiCisjaW5jbHVkZSAicmVnLmgiCisjaW5jbHVkZSAiZGVmLmgiCisjaW5jbHVkZSAiZncuaCIKKworc3RhdGljIHZvaWQgX3J0bDkyc19md19zZXRfcnFwbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUlFQTiwgMHhmZmZmZmZmZik7CisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJRUE4gKyA0LCAweGZmZmZmZmZmKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSUVBOICsgOCwgMHhmZik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUlFQTiArIDB4QiwgMHg4MCk7Cit9CisKK3N0YXRpYyBib29sIF9ydGw5MnNfZmlybXdhcmVfZW5hYmxlX2NwdShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTMyIGljaGVja3RpbWUgPSAyMDA7CisJdTE2IHRtcHUyYjsKKwl1OCB0bXB1MWIsIGNwdXN0YXR1cyA9IDA7CisKKwlfcnRsOTJzX2Z3X3NldF9ycXBuKGh3KTsKKworCS8qIEVuYWJsZSBDUFUuICovCisJdG1wdTFiID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBTWVNfQ0xLUik7CisJLyogQUZFIHNvdXJjZSAqLworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFNZU19DTEtSLCAodG1wdTFiIHwgU1lTX0NQVV9DTEtTRUwpKTsKKworCXRtcHUyYiA9IHJ0bF9yZWFkX3dvcmQocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOKTsKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4sICh0bXB1MmIgfCBGRU5fQ1BVRU4pKTsKKworCS8qIFBvbGxpbmcgSU1FTSBSZWFkeSBhZnRlciBDUFUgaGFzIHJlZmlsbGVkLiAqLworCWRvIHsKKwkJY3B1c3RhdHVzID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBUQ1IpOworCQlpZiAoY3B1c3RhdHVzICYgSU1FTV9SRFkpIHsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0xPVUQsCisJCQkJKCJJTUVNIFJlYWR5IGFmdGVyIENQVSBoYXMgcmVmaWxsZWQuXG4iKSk7CisJCQlicmVhazsKKwkJfQorCisJCXVkZWxheSgxMDApOworCX0gd2hpbGUgKGljaGVja3RpbWUtLSk7CisKKwlpZiAoIShjcHVzdGF0dXMgJiBJTUVNX1JEWSkpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgZW51bSBmd19zdGF0dXMgX3J0bDkyc19maXJtd2FyZV9nZXRfbmV4dHN0YXR1cygKKwkJZW51bSBmd19zdGF0dXMgZndfY3VycmVudHN0YXR1cykKK3sKKwllbnVtIGZ3X3N0YXR1cwluZXh0X2Z3c3RhdHVzID0gMDsKKworCXN3aXRjaCAoZndfY3VycmVudHN0YXR1cykgeworCWNhc2UgRldfU1RBVFVTX0lOSVQ6CisJCW5leHRfZndzdGF0dXMgPSBGV19TVEFUVVNfTE9BRF9JTUVNOworCQlicmVhazsKKwljYXNlIEZXX1NUQVRVU19MT0FEX0lNRU06CisJCW5leHRfZndzdGF0dXMgPSBGV19TVEFUVVNfTE9BRF9FTUVNOworCQlicmVhazsKKwljYXNlIEZXX1NUQVRVU19MT0FEX0VNRU06CisJCW5leHRfZndzdGF0dXMgPSBGV19TVEFUVVNfTE9BRF9ETUVNOworCQlicmVhazsKKwljYXNlIEZXX1NUQVRVU19MT0FEX0RNRU06CisJCW5leHRfZndzdGF0dXMgPSBGV19TVEFUVVNfUkVBRFk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiBuZXh0X2Z3c3RhdHVzOworfQorCitzdGF0aWMgdTggX3J0bDkyc19maXJtd2FyZV9oZWFkZXJfbWFwX3JmdHlwZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKworCXN3aXRjaCAocnRscGh5LT5yZl90eXBlKSB7CisJY2FzZSBSRl8xVDFSOgorCQlyZXR1cm4gMHgxMTsKKwkJYnJlYWs7CisJY2FzZSBSRl8xVDJSOgorCQlyZXR1cm4gMHgxMjsKKwkJYnJlYWs7CisJY2FzZSBSRl8yVDJSOgorCQlyZXR1cm4gMHgyMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfRU1FUkcsCisJCQkgKCJVbmtub3duIFJGIHR5cGUoJXgpXG4iLAorCQkJIHJ0bHBoeS0+cmZfdHlwZSkpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDB4MjI7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MnNfZmlybXdhcmVoZWFkZXJfcHJpdmV1cGRhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCXN0cnVjdCBmd19wcml2ICpwZndfcHJpdikKK3sKKwkvKiBVcGRhdGUgUkYgdHlwZXMgZm9yIFJBVFIgc2V0dGluZ3MuICovCisJcGZ3X3ByaXYtPnJmX2NvbmZpZyA9IF9ydGw5MnNfZmlybXdhcmVfaGVhZGVyX21hcF9yZnR5cGUoaHcpOworfQorCisKKworc3RhdGljIGJvb2wgX3J0bDkyc19jbWRfc2VuZF9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCXN0cnVjdCBza19idWZmICpza2IsIHU4IGxhc3QpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJc3RydWN0IHJ0bDgxOTJfdHhfcmluZyAqcmluZzsKKwlzdHJ1Y3QgcnRsX3R4X2Rlc2MgKnBkZXNjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggaWR4ID0gMDsKKworCXJpbmcgPSAmcnRscGNpLT50eF9yaW5nW1RYQ01EX1FVRVVFXTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZydGxwcml2LT5sb2Nrcy5pcnFfdGhfbG9jaywgZmxhZ3MpOworCisJaWR4ID0gKHJpbmctPmlkeCArIHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKSkgJSByaW5nLT5lbnRyaWVzOworCXBkZXNjID0gJnJpbmctPmRlc2NbaWR4XTsKKwlydGxwcml2LT5jZmctPm9wcy0+ZmlsbF90eF9jbWRkZXNjKGh3LCAodTggKilwZGVzYywgMSwgMSwgc2tiKTsKKwlfX3NrYl9xdWV1ZV90YWlsKCZyaW5nLT5xdWV1ZSwgc2tiKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLmlycV90aF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgX3J0bDkyc19maXJtd2FyZV9kb3dubG9hZGNvZGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCXU4ICpjb2RlX3ZpcnR1YWxfYWRkcmVzcywgdTMyIGJ1ZmZlcl9sZW4pCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHJ0bF90Y2JfZGVzYyAqdGNiX2Rlc2M7CisJdW5zaWduZWQgY2hhciAqc2VnX3B0cjsKKwl1MTYgZnJhZ190aHJlc2hvbGQgPSBNQVhfRklSTVdBUkVfQ09ERV9TSVpFOworCXUxNiBmcmFnX2xlbmd0aCwgZnJhZ19vZmZzZXQgPSAwOworCXUxNiBleHRyYV9kZXNjb2Zmc2V0ID0gMDsKKwl1OCBsYXN0X2luaXBrdCA9IDA7CisKKwlfcnRsOTJzX2Z3X3NldF9ycXBuKGh3KTsKKworCWlmIChidWZmZXJfbGVuID49IE1BWF9GSVJNV0FSRV9DT0RFX1NJWkUpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSgiU2l6ZSBvdmVyIEZJUk1XQVJFX0NPREVfU0laRSFcbiIpKTsKKworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJZXh0cmFfZGVzY29mZnNldCA9IDA7CisKKwlkbyB7CisJCWlmICgoYnVmZmVyX2xlbiAtIGZyYWdfb2Zmc2V0KSA+IGZyYWdfdGhyZXNob2xkKSB7CisJCQlmcmFnX2xlbmd0aCA9IGZyYWdfdGhyZXNob2xkICsgZXh0cmFfZGVzY29mZnNldDsKKwkJfSBlbHNlIHsKKwkJCWZyYWdfbGVuZ3RoID0gKHUxNikoYnVmZmVyX2xlbiAtIGZyYWdfb2Zmc2V0ICsKKwkJCQkJICAgIGV4dHJhX2Rlc2NvZmZzZXQpOworCQkJbGFzdF9pbmlwa3QgPSAxOworCQl9CisKKwkJLyogQWxsb2NhdGUgc2tiIGJ1ZmZlciB0byBjb250YWluIGZpcm13YXJlICovCisJCS8qIGluZm8gYW5kIHR4IGRlc2NyaXB0b3IgaW5mby4gKi8KKwkJc2tiID0gZGV2X2FsbG9jX3NrYihmcmFnX2xlbmd0aCk7CisJCXNrYl9yZXNlcnZlKHNrYiwgZXh0cmFfZGVzY29mZnNldCk7CisJCXNlZ19wdHIgPSAodTggKilza2JfcHV0KHNrYiwgKHUzMikoZnJhZ19sZW5ndGggLQorCQkJCQlleHRyYV9kZXNjb2Zmc2V0KSk7CisJCW1lbWNweShzZWdfcHRyLCBjb2RlX3ZpcnR1YWxfYWRkcmVzcyArIGZyYWdfb2Zmc2V0LAorCQkgICAgICAgKHUzMikoZnJhZ19sZW5ndGggLSBleHRyYV9kZXNjb2Zmc2V0KSk7CisKKwkJdGNiX2Rlc2MgPSAoc3RydWN0IHJ0bF90Y2JfZGVzYyAqKShza2ItPmNiKTsKKwkJdGNiX2Rlc2MtPnF1ZXVlX2luZGV4ID0gVFhDTURfUVVFVUU7CisJCXRjYl9kZXNjLT5jbWRfb3JfaW5pdCA9IERFU0NfUEFDS0VUX1RZUEVfSU5JVDsKKwkJdGNiX2Rlc2MtPmxhc3RfaW5pcGt0ID0gbGFzdF9pbmlwa3Q7CisKKwkJX3J0bDkyc19jbWRfc2VuZF9wYWNrZXQoaHcsIHNrYiwgbGFzdF9pbmlwa3QpOworCisJCWZyYWdfb2Zmc2V0ICs9IChmcmFnX2xlbmd0aCAtIGV4dHJhX2Rlc2NvZmZzZXQpOworCisJfSB3aGlsZSAoZnJhZ19vZmZzZXQgPCBidWZmZXJfbGVuKTsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFRQX1BPTEwsIFRQUE9MTF9DUSk7CisKKwlyZXR1cm4gdHJ1ZSA7Cit9CisKK3N0YXRpYyBib29sIF9ydGw5MnNfZmlybXdhcmVfY2hlY2tyZWFkeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJdTggbG9hZGZ3X3N0YXR1cykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRfZmlybXdhcmUgKmZpcm13YXJlID0gKHN0cnVjdCBydF9maXJtd2FyZSAqKXJ0bGhhbC0+cGZpcm13YXJlOworCXUzMiB0bXB1NGI7CisJdTggY3B1c3RhdHVzID0gMDsKKwlzaG9ydCBwb2xsaW5nY250ID0gMTAwMDsKKwlib29sIHJ0c3RhdHVzID0gdHJ1ZTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0xPVUQsICgiTG9hZFN0YXVzKCVkKVxuIiwKKwkJIGxvYWRmd19zdGF0dXMpKTsKKworCWZpcm13YXJlLT5md3N0YXR1cyA9IChlbnVtIGZ3X3N0YXR1cylsb2FkZndfc3RhdHVzOworCisJc3dpdGNoIChsb2FkZndfc3RhdHVzKSB7CisJY2FzZSBGV19TVEFUVVNfTE9BRF9JTUVNOgorCQkvKiBQb2xsaW5nIElNRU0gY29kZSBkb25lLiAqLworCQlkbyB7CisJCQljcHVzdGF0dXMgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFRDUik7CisJCQlpZiAoY3B1c3RhdHVzICYgSU1FTV9DT0RFX0RPTkUpCisJCQkJYnJlYWs7CisJCQl1ZGVsYXkoNSk7CisJCX0gd2hpbGUgKHBvbGxpbmdjbnQtLSk7CisKKwkJaWYgKCEoY3B1c3RhdHVzICYgSU1FTV9DSEtfUlBUKSB8fCAocG9sbGluZ2NudCA8PSAwKSkgeworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCQkgKCJGV19TVEFUVVNfTE9BRF9JTUVNIgorCQkJCSAiIEZBSUwgQ1BVLCBTdGF0dXM9JXhcclxuIiwgY3B1c3RhdHVzKSk7CisJCQlnb3RvIHN0YXR1c19jaGVja19mYWlsOworCQl9CisJCWJyZWFrOworCisJY2FzZSBGV19TVEFUVVNfTE9BRF9FTUVNOgorCQkvKiBDaGVjayBQdXQgQ29kZSBPSyBhbmQgVHVybiBPbiBDUFUgKi8KKwkJLyogUG9sbGluZyBFTUVNIGNvZGUgZG9uZS4gKi8KKwkJZG8geworCQkJY3B1c3RhdHVzID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBUQ1IpOworCQkJaWYgKGNwdXN0YXR1cyAmIEVNRU1fQ09ERV9ET05FKQorCQkJCWJyZWFrOworCQkJdWRlbGF5KDUpOworCQl9IHdoaWxlIChwb2xsaW5nY250LS0pOworCisJCWlmICghKGNwdXN0YXR1cyAmIEVNRU1fQ0hLX1JQVCkgfHwgKHBvbGxpbmdjbnQgPD0gMCkpIHsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkJICgiRldfU1RBVFVTX0xPQURfRU1FTSIKKwkJCQkgIiBGQUlMIENQVSwgU3RhdHVzPSV4XHJcbiIsIGNwdXN0YXR1cykpOworCQkJZ290byBzdGF0dXNfY2hlY2tfZmFpbDsKKwkJfQorCisJCS8qIFR1cm4gT24gQ1BVICovCisJCXJ0c3RhdHVzID0gX3J0bDkyc19maXJtd2FyZV9lbmFibGVfY3B1KGh3KTsKKwkJaWYgKHJ0c3RhdHVzICE9IHRydWUpIHsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkJICgiRW5hYmxlIENQVSBmYWlsIVxuIikpOworCQkJZ290byBzdGF0dXNfY2hlY2tfZmFpbDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgRldfU1RBVFVTX0xPQURfRE1FTToKKwkJLyogUG9sbGluZyBETUVNIGNvZGUgZG9uZSAqLworCQlkbyB7CisJCQljcHVzdGF0dXMgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFRDUik7CisJCQlpZiAoY3B1c3RhdHVzICYgRE1FTV9DT0RFX0RPTkUpCisJCQkJYnJlYWs7CisJCQl1ZGVsYXkoNSk7CisJCX0gd2hpbGUgKHBvbGxpbmdjbnQtLSk7CisKKwkJaWYgKCEoY3B1c3RhdHVzICYgRE1FTV9DT0RFX0RPTkUpIHx8IChwb2xsaW5nY250IDw9IDApKSB7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJCSAoIlBvbGxpbmcgIERNRU0gY29kZSBkb25lIgorCQkJCSAiIGZhaWwgISBjcHVzdGF0dXMoJSN4KVxuIiwgY3B1c3RhdHVzKSk7CisJCQlnb3RvIHN0YXR1c19jaGVja19mYWlsOworCQl9CisKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwKKwkJCSAoIkRNRU0gY29kZSBkb3dubG9hZCBzdWNjZXNzLCIKKwkJCSIgY3B1c3RhdHVzKCUjeClcbiIsIGNwdXN0YXR1cykpOworCisJCS8qIFByZXZlbnQgRGVsYXkgdG9vIG11Y2ggYW5kIGJlaW5nIHNjaGVkdWxlZCBvdXQgKi8KKwkJLyogUG9sbGluZyBMb2FkIEZpcm13YXJlIHJlYWR5ICovCisJCXBvbGxpbmdjbnQgPSAyMDAwOworCQlkbyB7CisJCQljcHVzdGF0dXMgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFRDUik7CisJCQlpZiAoY3B1c3RhdHVzICYgRldSRFkpCisJCQkJYnJlYWs7CisJCQl1ZGVsYXkoNDApOworCQl9IHdoaWxlIChwb2xsaW5nY250LS0pOworCisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0xPVUQsCisJCQkgKCJQb2xsaW5nIExvYWQgRmlybXdhcmUgcmVhZHksIgorCQkJIiBjcHVzdGF0dXMoJXgpXG4iLAljcHVzdGF0dXMpKTsKKworCQlpZiAoKChjcHVzdGF0dXMgJiBMT0FEX0ZXX1JFQURZKSAhPSBMT0FEX0ZXX1JFQURZKSB8fAorCQkgICAgKHBvbGxpbmdjbnQgPD0gMCkpIHsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkJICgiUG9sbGluZyBMb2FkIEZpcm13YXJlIgorCQkJCSIgcmVhZHkgZmFpbCAhIGNwdXN0YXR1cygleClcbiIsIGNwdXN0YXR1cykpOworCQkJZ290byBzdGF0dXNfY2hlY2tfZmFpbDsKKwkJfQorCisJCS8qIElmIHJpZ2h0IGhlcmUsIHdlIGNhbiBzZXQgVENSL1JDUiB0byBkZXNpcmVkIHZhbHVlICAqLworCQkvKiBhbmQgY29uZmlnIE1BQyBsb29rYmFjayBtb2RlIHRvIG5vcm1hbCBtb2RlICovCisJCXRtcHU0YiA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIFRDUik7CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBUQ1IsICh0bXB1NGIgJiAoflRDUl9JQ1YpKSk7CisKKwkJdG1wdTRiID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgUkNSKTsKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFJDUiwgKHRtcHU0YiB8IFJDUl9BUFBGQ1MgfAorCQkJCVJDUl9BUFBfSUNWIHwgUkNSX0FQUF9NSUMpKTsKKworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19MT1VELAorCQkJICgiQ3VycmVudCBSQ1Igc2V0dGluZ3MoJSN4KVxuIiwgdG1wdTRiKSk7CisKKwkJLyogU2V0IHRvIG5vcm1hbCBtb2RlLiAqLworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBMQktNRF9TRUwsIExCS19OT1JNQUwpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0VNRVJHLAorCQkJICgiVW5rbm93biBzdGF0dXMgY2hlY2shXG4iKSk7CisJCXJ0c3RhdHVzID0gZmFsc2U7CisJCWJyZWFrOworCX0KKworc3RhdHVzX2NoZWNrX2ZhaWw6CisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwgKCJsb2FkZndfc3RhdHVzKCVkKSwgIgorCQkgInJ0c3RhdHVzKCV4KVxuIiwgbG9hZGZ3X3N0YXR1cywgcnRzdGF0dXMpKTsKKwlyZXR1cm4gcnRzdGF0dXM7Cit9CisKK2ludCBydGw5MnNfZG93bmxvYWRfZncoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0X2Zpcm13YXJlICpmaXJtd2FyZSA9IE5VTEw7CisJc3RydWN0IGZ3X2hkciAqcGZ3aGVhZGVyOworCXN0cnVjdCBmd19wcml2ICpwZndfcHJpdiA9IE5VTEw7CisJdTggKnB1Y19tYXBwZWRmaWxlID0gTlVMTDsKKwl1MzIgdWxfZmlsZWxlbmd0aCA9IDA7CisJdTMyIGZpbGVfbGVuZ3RoID0gMDsKKwl1OCBmd2hkcl9zaXplID0gUlRfODE5MlNfRklSTVdBUkVfSERSX1NJWkU7CisJdTggZndzdGF0dXMgPSBGV19TVEFUVVNfSU5JVDsKKwlib29sIHJ0c3RhdHVzID0gdHJ1ZTsKKworCWlmICghcnRsaGFsLT5wZmlybXdhcmUpCisJCXJldHVybiAxOworCisJZmlybXdhcmUgPSAoc3RydWN0IHJ0X2Zpcm13YXJlICopcnRsaGFsLT5wZmlybXdhcmU7CisJZmlybXdhcmUtPmZ3c3RhdHVzID0gRldfU1RBVFVTX0lOSVQ7CisKKwlwdWNfbWFwcGVkZmlsZSA9IGZpcm13YXJlLT5zel9md190bXBidWZmZXI7CisJZmlsZV9sZW5ndGggPSBmaXJtd2FyZS0+c3pfZndfdG1wYnVmZmVybGVuOworCisJLyogMS4gUmV0cmlldmUgRlcgaGVhZGVyLiAqLworCWZpcm13YXJlLT5wZndoZWFkZXIgPSAoc3RydWN0IGZ3X2hkciAqKSBwdWNfbWFwcGVkZmlsZTsKKwlwZndoZWFkZXIgPSBmaXJtd2FyZS0+cGZ3aGVhZGVyOworCWZpcm13YXJlLT5maXJtd2FyZXZlcnNpb24gPSAgYnl0ZShwZndoZWFkZXItPnZlcnNpb24sIDApOworCWZpcm13YXJlLT5wZndoZWFkZXItPmZ3cHJpdi5oY2lfc2VsID0gMTsvKiBwY2llICovCisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19MT1VELCAoInNpZ25hdHVyZToleCwgdmVyc2lvbjoiCisJCSAiJXgsIHNpemU6JXgsIgorCQkgImltZW1zaXplOiV4LCBzcmFtIHNpemU6JXhcbiIsIHBmd2hlYWRlci0+c2lnbmF0dXJlLAorCQkgcGZ3aGVhZGVyLT52ZXJzaW9uLCBwZndoZWFkZXItPmRtZW1fc2l6ZSwKKwkJIHBmd2hlYWRlci0+aW1nX2ltZW1fc2l6ZSwgcGZ3aGVhZGVyLT5pbWdfc3JhbV9zaXplKSk7CisKKwkvKiAyLiBSZXRyaWV2ZSBJTUVNIGltYWdlLiAqLworCWlmICgocGZ3aGVhZGVyLT5pbWdfaW1lbV9zaXplID09IDApIHx8IChwZndoZWFkZXItPmltZ19pbWVtX3NpemUgPgorCSAgICBzaXplb2YoZmlybXdhcmUtPmZ3X2ltZW0pKSkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJKCJtZW1vcnkgZm9yIGRhdGEgaW1hZ2UgaXMgbGVzcyB0aGFuIElNRU0gcmVxdWlyZWRcbiIpKTsKKwkJZ290byBmYWlsOworCX0gZWxzZSB7CisJCXB1Y19tYXBwZWRmaWxlICs9IGZ3aGRyX3NpemU7CisKKwkJbWVtY3B5KGZpcm13YXJlLT5md19pbWVtLCBwdWNfbWFwcGVkZmlsZSwKKwkJICAgICAgIHBmd2hlYWRlci0+aW1nX2ltZW1fc2l6ZSk7CisJCWZpcm13YXJlLT5md19pbWVtX2xlbiA9IHBmd2hlYWRlci0+aW1nX2ltZW1fc2l6ZTsKKwl9CisKKwkvKiAzLiBSZXRyaWVjdmUgRU1FTSBpbWFnZS4gKi8KKwlpZiAocGZ3aGVhZGVyLT5pbWdfc3JhbV9zaXplID4gc2l6ZW9mKGZpcm13YXJlLT5md19lbWVtKSkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJKCJtZW1vcnkgZm9yIGRhdGEgaW1hZ2UgaXMgbGVzcyB0aGFuIEVNRU0gcmVxdWlyZWRcbiIpKTsKKwkJZ290byBmYWlsOworCX0gZWxzZSB7CisJCXB1Y19tYXBwZWRmaWxlICs9IGZpcm13YXJlLT5md19pbWVtX2xlbjsKKworCQltZW1jcHkoZmlybXdhcmUtPmZ3X2VtZW0sIHB1Y19tYXBwZWRmaWxlLAorCQkgICAgICAgcGZ3aGVhZGVyLT5pbWdfc3JhbV9zaXplKTsKKwkJZmlybXdhcmUtPmZ3X2VtZW1fbGVuID0gcGZ3aGVhZGVyLT5pbWdfc3JhbV9zaXplOworCX0KKworCS8qIDQuIGRvd25sb2FkIGZ3IG5vdyAqLworCWZ3c3RhdHVzID0gX3J0bDkyc19maXJtd2FyZV9nZXRfbmV4dHN0YXR1cyhmaXJtd2FyZS0+ZndzdGF0dXMpOworCXdoaWxlIChmd3N0YXR1cyAhPSBGV19TVEFUVVNfUkVBRFkpIHsKKwkJLyogSW1hZ2UgYnVmZmVyIHJlZGlyZWN0aW9uLiAqLworCQlzd2l0Y2ggKGZ3c3RhdHVzKSB7CisJCWNhc2UgRldfU1RBVFVTX0xPQURfSU1FTToKKwkJCXB1Y19tYXBwZWRmaWxlID0gZmlybXdhcmUtPmZ3X2ltZW07CisJCQl1bF9maWxlbGVuZ3RoID0gZmlybXdhcmUtPmZ3X2ltZW1fbGVuOworCQkJYnJlYWs7CisJCWNhc2UgRldfU1RBVFVTX0xPQURfRU1FTToKKwkJCXB1Y19tYXBwZWRmaWxlID0gZmlybXdhcmUtPmZ3X2VtZW07CisJCQl1bF9maWxlbGVuZ3RoID0gZmlybXdhcmUtPmZ3X2VtZW1fbGVuOworCQkJYnJlYWs7CisJCWNhc2UgRldfU1RBVFVTX0xPQURfRE1FTToKKwkJCS8qIFBhcnRpYWwgdXBkYXRlIHRoZSBjb250ZW50IG9mIGhlYWRlciBwcml2YXRlLiAqLworCQkJcGZ3aGVhZGVyID0gZmlybXdhcmUtPnBmd2hlYWRlcjsKKwkJCXBmd19wcml2ID0gJnBmd2hlYWRlci0+Zndwcml2OworCQkJX3J0bDkyc19maXJtd2FyZWhlYWRlcl9wcml2ZXVwZGF0ZShodywgcGZ3X3ByaXYpOworCQkJcHVjX21hcHBlZGZpbGUgPSAodTggKikoZmlybXdhcmUtPnBmd2hlYWRlcikgKworCQkJCQlSVF84MTkyU19GSVJNV0FSRV9IRFJfRVhDTFVERV9QUklfU0laRTsKKwkJCXVsX2ZpbGVsZW5ndGggPSBmd2hkcl9zaXplIC0KKwkJCQkJUlRfODE5MlNfRklSTVdBUkVfSERSX0VYQ0xVREVfUFJJX1NJWkU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkJCSgiVW5leHBlY3RlZCBEb3dubG9hZCBzdGVwISFcbiIpKTsKKwkJCWdvdG8gZmFpbDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogPDI+IERvd25sb2FkIGltYWdlIGZpbGUgKi8KKwkJcnRzdGF0dXMgPSBfcnRsOTJzX2Zpcm13YXJlX2Rvd25sb2FkY29kZShodywgcHVjX21hcHBlZGZpbGUsCisJCQkJdWxfZmlsZWxlbmd0aCk7CisKKwkJaWYgKHJ0c3RhdHVzICE9IHRydWUpIHsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsICgiZmFpbCFcbiIpKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisJCS8qIDwzPiBDaGVjayB3aGV0aGVyIGxvYWQgRlcgcHJvY2VzcyBpcyByZWFkeSAqLworCQlydHN0YXR1cyA9IF9ydGw5MnNfZmlybXdhcmVfY2hlY2tyZWFkeShodywgZndzdGF0dXMpOworCQlpZiAocnRzdGF0dXMgIT0gdHJ1ZSkgeworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywgKCJmYWlsIVxuIikpOworCQkJZ290byBmYWlsOworCQl9CisKKwkJZndzdGF0dXMgPSBfcnRsOTJzX2Zpcm13YXJlX2dldF9uZXh0c3RhdHVzKGZpcm13YXJlLT5md3N0YXR1cyk7CisJfQorCisJcmV0dXJuIHJ0c3RhdHVzOworZmFpbDoKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBfcnRsOTJzX2ZpbGxfaDJjX2NtZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaDJjYnVmZmVybGVuLAorCQkJCXUzMiBjbWRfbnVtLCB1MzIgKnBlbGVtZW50X2lkLCB1MzIgKnBjbWRfbGVuLAorCQkJCXU4ICoqcGNtYl9idWZmZXIsIHU4ICpjbWRfc3RhcnRfc2VxKQoreworCXUzMiB0b3RhbGxlbiA9IDAsIGxlbiA9IDAsIHR4X2Rlc2NsZW4gPSAwOworCXUzMiBwcmVfY29udGludWVvZmZzZXQgPSAwOworCXU4ICpwaDJjX2J1ZmZlcjsKKwl1OCBpID0gMDsKKworCWRvIHsKKwkJLyogOCAtIEJ5dGUgYWxpZ21lbnQgKi8KKwkJbGVuID0gSDJDX1RYX0NNRF9IRFJfTEVOICsgTl9CWVRFX0FMSUdNRU5UKHBjbWRfbGVuW2ldLCA4KTsKKworCQkvKiBCdWZmZXIgbGVuZ3RoIGlzIG5vdCBlbm91Z2ggKi8KKwkJaWYgKGgyY2J1ZmZlcmxlbiA8IHRvdGFsbGVuICsgbGVuICsgdHhfZGVzY2xlbikKKwkJCWJyZWFrOworCisJCS8qIENsZWFyIGNvbnRlbnQgKi8KKwkJcGgyY19idWZmZXIgPSAodTggKilza2JfcHV0KHNrYiwgKHUzMilsZW4pOworCQltZW1zZXQoKHBoMmNfYnVmZmVyICsgdG90YWxsZW4gKyB0eF9kZXNjbGVuKSwgMCwgbGVuKTsKKworCQkvKiBDTUQgbGVuICovCisJCVNFVF9CSVRTX1RPX0xFXzRCWVRFKChwaDJjX2J1ZmZlciArIHRvdGFsbGVuICsgdHhfZGVzY2xlbiksCisJCQkJICAgICAgMCwgMTYsIHBjbWRfbGVuW2ldKTsKKworCQkvKiBDTUQgSUQgKi8KKwkJU0VUX0JJVFNfVE9fTEVfNEJZVEUoKHBoMmNfYnVmZmVyICsgdG90YWxsZW4gKyB0eF9kZXNjbGVuKSwKKwkJCQkgICAgICAxNiwgOCwgcGVsZW1lbnRfaWRbaV0pOworCisJCS8qIENNRCBTZXF1ZW5jZSAqLworCQkqY21kX3N0YXJ0X3NlcSA9ICpjbWRfc3RhcnRfc2VxICUgMHg4MDsKKwkJU0VUX0JJVFNfVE9fTEVfNEJZVEUoKHBoMmNfYnVmZmVyICsgdG90YWxsZW4gKyB0eF9kZXNjbGVuKSwKKwkJCQkgICAgICAyNCwgNywgKmNtZF9zdGFydF9zZXEpOworCQkrKypjbWRfc3RhcnRfc2VxOworCisJCS8qIENvcHkgbWVtb3J5ICovCisJCW1lbWNweSgocGgyY19idWZmZXIgKyB0b3RhbGxlbiArIHR4X2Rlc2NsZW4gKworCQkJSDJDX1RYX0NNRF9IRFJfTEVOKSwgcGNtYl9idWZmZXJbaV0sIHBjbWRfbGVuW2ldKTsKKworCQkvKiBDTUQgY29udGludWUgKi8KKwkJLyogc2V0IHRoZSBjb250aW51ZSBpbiBwcmV2b2l1cyBjbWQuICovCisJCWlmIChpIDwgY21kX251bSAtIDEpCisJCQlTRVRfQklUU19UT19MRV80QllURSgocGgyY19idWZmZXIgKyBwcmVfY29udGludWVvZmZzZXQpLAorCQkJCQkgICAgICAzMSwgMSwgMSk7CisKKwkJcHJlX2NvbnRpbnVlb2Zmc2V0ID0gdG90YWxsZW47CisKKwkJdG90YWxsZW4gKz0gbGVuOworCX0gd2hpbGUgKCsraSA8IGNtZF9udW0pOworCisJcmV0dXJuIHRvdGFsbGVuOworfQorCitzdGF0aWMgdTMyIF9ydGw5MnNfZ2V0X2gyY19jbWRsZW4odTMyIGgyY2J1ZmZlcmxlbiwgdTMyIGNtZF9udW0sIHUzMiAqcGNtZF9sZW4pCit7CisJdTMyIHRvdGFsbGVuID0gMCwgbGVuID0gMCwgdHhfZGVzY2xlbiA9IDA7CisJdTggaSA9IDA7CisKKwlkbyB7CisJCS8qIDggLSBCeXRlIGFsaWdtZW50ICovCisJCWxlbiA9IEgyQ19UWF9DTURfSERSX0xFTiArIE5fQllURV9BTElHTUVOVChwY21kX2xlbltpXSwgOCk7CisKKwkJLyogQnVmZmVyIGxlbmd0aCBpcyBub3QgZW5vdWdoICovCisJCWlmIChoMmNidWZmZXJsZW4gPCB0b3RhbGxlbiArIGxlbiArIHR4X2Rlc2NsZW4pCisJCQlicmVhazsKKworCQl0b3RhbGxlbiArPSBsZW47CisJfSB3aGlsZSAoKytpIDwgY21kX251bSk7CisKKwlyZXR1cm4gdG90YWxsZW4gKyB0eF9kZXNjbGVuOworfQorCitzdGF0aWMgYm9vbCBfcnRsOTJzX2Zpcm13YXJlX3NldF9oMmNfY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBoMmNfY21kLAorCQkJCQkgdTggKnBjbWRfYnVmZmVyKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfdGNiX2Rlc2MgKmNiX2Rlc2M7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MzIJZWxlbWVudF9pZCA9IDA7CisJdTMyCWNtZF9sZW4gPSAwOworCXUzMglsZW47CisKKwlzd2l0Y2ggKGgyY19jbWQpIHsKKwljYXNlIEZXX0gyQ19TRVRQV1JNT0RFOgorCQllbGVtZW50X2lkID0gSDJDX1NFVFBXUk1PREVfQ01EIDsKKwkJY21kX2xlbiA9IHNpemVvZihzdHJ1Y3QgaDJjX3NldF9wd3Jtb2RlX3Bhcm0pOworCQlicmVhazsKKwljYXNlIEZXX0gyQ19KT0lOQlNTUlBUOgorCQllbGVtZW50X2lkID0gSDJDX0pPSU5CU1NSUFRfQ01EOworCQljbWRfbGVuID0gc2l6ZW9mKHN0cnVjdCBoMmNfam9pbmJzc19ycHRfcGFybSk7CisJCWJyZWFrOworCWNhc2UgRldfSDJDX1dPV0xBTl9VUERBVEVfR1RLOgorCQllbGVtZW50X2lkID0gSDJDX1dPV0xBTl9VUERBVEVfR1RLX0NNRDsKKwkJY21kX2xlbiA9IHNpemVvZihzdHJ1Y3QgaDJjX3dwYV90d29fd2F5X3Bhcm0pOworCQlicmVhazsKKwljYXNlIEZXX0gyQ19XT1dMQU5fVVBEQVRFX0lWOgorCQllbGVtZW50X2lkID0gSDJDX1dPV0xBTl9VUERBVEVfSVZfQ01EOworCQljbWRfbGVuID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZyk7CisJCWJyZWFrOworCWNhc2UgRldfSDJDX1dPV0xBTl9PRkZMT0FEOgorCQllbGVtZW50X2lkID0gSDJDX1dPV0xBTl9GV19PRkZMT0FEOworCQljbWRfbGVuID0gc2l6ZW9mKHU4KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJbGVuID0gX3J0bDkyc19nZXRfaDJjX2NtZGxlbihNQVhfVFJBTlNNSVRfQlVGRkVSX1NJWkUsIDEsICZjbWRfbGVuKTsKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbik7CisJY2JfZGVzYyA9IChzdHJ1Y3QgcnRsX3RjYl9kZXNjICopKHNrYi0+Y2IpOworCWNiX2Rlc2MtPnF1ZXVlX2luZGV4ID0gVFhDTURfUVVFVUU7CisJY2JfZGVzYy0+Y21kX29yX2luaXQgPSBERVNDX1BBQ0tFVF9UWVBFX05PUk1BTDsKKwljYl9kZXNjLT5sYXN0X2luaXBrdCA9IGZhbHNlOworCisJX3J0bDkyc19maWxsX2gyY19jbWQoc2tiLCBNQVhfVFJBTlNNSVRfQlVGRkVSX1NJWkUsIDEsICZlbGVtZW50X2lkLAorCQkJJmNtZF9sZW4sICZwY21kX2J1ZmZlciwJJnJ0bGhhbC0+aDJjX3R4Y21kX3NlcSk7CisJX3J0bDkyc19jbWRfc2VuZF9wYWNrZXQoaHcsIHNrYiwgZmFsc2UpOworCXJ0bHByaXYtPmNmZy0+b3BzLT50eF9wb2xsaW5nKGh3LCBUWENNRF9RVUVVRSk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBydGw5MnNfc2V0X2Z3X3B3cm1vZGVfY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBNb2RlKQoreworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IGgyY19zZXRfcHdybW9kZV9wYXJtCXB3cm1vZGU7CisJdTE2IG1heF93YWtldXBfcGVyaW9kID0gMDsKKworCXB3cm1vZGUubW9kZSA9IE1vZGU7CisJcHdybW9kZS5mbGFnX2xvd190cmFmZmljX2VuID0gMDsKKwlwd3Jtb2RlLmZsYWdfbHBuYXZfZW4gPSAwOworCXB3cm1vZGUuZmxhZ19yZl9sb3dfc25yX2VuID0gMDsKKwlwd3Jtb2RlLmZsYWdfZHBzX2VuID0gMDsKKwlwd3Jtb2RlLmJjbl9yeF9lbiA9IDA7CisJcHdybW9kZS5iY25fdG8gPSAwOworCVNFVF9CSVRTX1RPX0xFXzJCWVRFKCh1OCAqKSgmcHdybW9kZSkgKyA4LCAwLCAxNiwKKwkJCW1hYy0+dmlmLT5ic3NfY29uZi5iZWFjb25faW50KTsKKwlwd3Jtb2RlLmFwcF9pdHYgPSAwOworCXB3cm1vZGUuYXdha2VfYmNuX2l0dmwgPSBwcHNjLT5yZWdfbWF4X2xwc19hd2FrZWludHZsOworCXB3cm1vZGUuc21hcnRfcHMgPSAxOworCXB3cm1vZGUuYmNuX3Bhc3NfcGVyaW9kID0gMTA7CisKKwkvKiBTZXQgYmVhY29uIHBhc3MgY291bnQgKi8KKwlpZiAocHdybW9kZS5tb2RlID09IEZXX1BTX01JTl9NT0RFKQorCQltYXhfd2FrZXVwX3BlcmlvZCA9IG1hYy0+dmlmLT5ic3NfY29uZi5iZWFjb25faW50OworCWVsc2UgaWYgKHB3cm1vZGUubW9kZSA9PSBGV19QU19NQVhfTU9ERSkKKwkJbWF4X3dha2V1cF9wZXJpb2QgPSBtYWMtPnZpZi0+YnNzX2NvbmYuYmVhY29uX2ludCAqCisJCQltYWMtPnZpZi0+YnNzX2NvbmYuZHRpbV9wZXJpb2Q7CisKKwlpZiAobWF4X3dha2V1cF9wZXJpb2QgPj0gNTAwKQorCQlwd3Jtb2RlLmJjbl9wYXNzX2NudCA9IDE7CisJZWxzZSBpZiAoKG1heF93YWtldXBfcGVyaW9kID49IDMwMCkgJiYgKG1heF93YWtldXBfcGVyaW9kIDwgNTAwKSkKKwkJcHdybW9kZS5iY25fcGFzc19jbnQgPSAyOworCWVsc2UgaWYgKChtYXhfd2FrZXVwX3BlcmlvZCA+PSAyMDApICYmIChtYXhfd2FrZXVwX3BlcmlvZCA8IDMwMCkpCisJCXB3cm1vZGUuYmNuX3Bhc3NfY250ID0gMzsKKwllbHNlIGlmICgobWF4X3dha2V1cF9wZXJpb2QgPj0gMjApICYmIChtYXhfd2FrZXVwX3BlcmlvZCA8IDIwMCkpCisJCXB3cm1vZGUuYmNuX3Bhc3NfY250ID0gNTsKKwllbHNlCisJCXB3cm1vZGUuYmNuX3Bhc3NfY250ID0gMTsKKworCV9ydGw5MnNfZmlybXdhcmVfc2V0X2gyY19jbWQoaHcsIEZXX0gyQ19TRVRQV1JNT0RFLCAodTggKikmcHdybW9kZSk7CisKK30KKwordm9pZCBydGw5MnNfc2V0X2Z3X2pvaW5ic3NfcmVwb3J0X2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJdTggbXN0YXR1cywgdTggcHNfcW9zaW5mbykKK3sKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBoMmNfam9pbmJzc19ycHRfcGFybSBqb2luYnNzX3JwdDsKKworCWpvaW5ic3NfcnB0Lm9wbW9kZSA9IG1zdGF0dXM7CisJam9pbmJzc19ycHQucHNfcW9zX2luZm8gPSBwc19xb3NpbmZvOworCWpvaW5ic3NfcnB0LmJzc2lkWzBdID0gbWFjLT5ic3NpZFswXTsKKwlqb2luYnNzX3JwdC5ic3NpZFsxXSA9IG1hYy0+YnNzaWRbMV07CisJam9pbmJzc19ycHQuYnNzaWRbMl0gPSBtYWMtPmJzc2lkWzJdOworCWpvaW5ic3NfcnB0LmJzc2lkWzNdID0gbWFjLT5ic3NpZFszXTsKKwlqb2luYnNzX3JwdC5ic3NpZFs0XSA9IG1hYy0+YnNzaWRbNF07CisJam9pbmJzc19ycHQuYnNzaWRbNV0gPSBtYWMtPmJzc2lkWzVdOworCVNFVF9CSVRTX1RPX0xFXzJCWVRFKCh1OCAqKSgmam9pbmJzc19ycHQpICsgOCwgMCwgMTYsCisJCQltYWMtPnZpZi0+YnNzX2NvbmYuYmVhY29uX2ludCk7CisJU0VUX0JJVFNfVE9fTEVfMkJZVEUoKHU4ICopKCZqb2luYnNzX3JwdCkgKyAxMCwgMCwgMTYsIG1hYy0+YXNzb2NfaWQpOworCisJX3J0bDkyc19maXJtd2FyZV9zZXRfaDJjX2NtZChodywgRldfSDJDX0pPSU5CU1NSUFQsICh1OCAqKSZqb2luYnNzX3JwdCk7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL2Z3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9mdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0Y2M1MDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9mdy5oCkBAIC0wLDAgKzEsMzc1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19SRUFMVEVLX0ZJUk1XQVJFOTJTX0hfXworI2RlZmluZSBfX1JFQUxURUtfRklSTVdBUkU5MlNfSF9fCisKKyNkZWZpbmUgUlRMODE5MF9NQVhfRklSTVdBUkVfQ09ERV9TSVpFCQk2NDAwMAorI2RlZmluZSBSVEw4MTkwX0NQVV9TVEFSVF9PRkZTRVQJCTB4ODAKKy8qIEZpcm13YXJlIExvY2FsIGJ1ZmZlciBzaXplLiA2NGsgKi8KKyNkZWZpbmUJTUFYX0ZJUk1XQVJFX0NPREVfU0laRQkJCTB4RkYwMAorCisjZGVmaW5lCVJUXzgxOTJTX0ZJUk1XQVJFX0hEUl9TSVpFCQk4MAorI2RlZmluZSBSVF84MTkyU19GSVJNV0FSRV9IRFJfRVhDTFVERV9QUklfU0laRQkzMgorCisvKiBzdXBwb3J0IHRpbGwgNjQgYml0IGJ1cyB3aWR0aCBPUyAqLworI2RlZmluZSBNQVhfREVWX0FERFJfU0laRQkJCTgKKyNkZWZpbmUgTUFYX0ZJUk1XQVJFX0lORk9STUFUSU9OX1NJWkUJCTMyCisjZGVmaW5lIE1BWF84MDJfMTFfSEVBREVSX0xFTkdUSAkJKDQwICsgXAorCQkJCQkJTUFYX0ZJUk1XQVJFX0lORk9STUFUSU9OX1NJWkUpCisjZGVmaW5lIEVOQ1JZUFRJT05fTUFYX09WRVJIRUFECQkJMTI4CisjZGVmaW5lIE1BWF9GUkFHTUVOVF9DT1VOVAkJCTgKKyNkZWZpbmUgTUFYX1RSQU5TTUlUX0JVRkZFUl9TSVpFCQkoMTYwMCArIFwKKwkJCQkJCShNQVhfODAyXzExX0hFQURFUl9MRU5HVEggKyBcCisJCQkJCQlFTkNSWVBUSU9OX01BWF9PVkVSSEVBRCkgKlwKKwkJCQkJCU1BWF9GUkFHTUVOVF9DT1VOVCkKKworI2RlZmluZSBIMkNfVFhfQ01EX0hEUl9MRU4JCQk4CisKKy8qIFRoZSBmb2xsb3dpbmcgRE0gY29udHJvbCBjb2RlIGFyZSBmb3IgUmVnMHgzNjQsICovCisjZGVmaW5lCUZXX0RJR19FTkFCTEVfQ1RMCQkJQklUKDApCisjZGVmaW5lCUZXX0hJR0hfUFdSX0VOQUJMRV9DVEwJCQlCSVQoMSkKKyNkZWZpbmUJRldfU1NfQ1RMCQkJCUJJVCgyKQorI2RlZmluZQlGV19SQV9JTklUX0NUTAkJCQlCSVQoMykKKyNkZWZpbmUJRldfUkFfQkdfQ1RMCQkJCUJJVCg0KQorI2RlZmluZQlGV19SQV9OX0NUTAkJCQlCSVQoNSkKKyNkZWZpbmUJRldfUFdSX1RSS19DVEwJCQkJQklUKDYpCisjZGVmaW5lCUZXX0lRS19DVEwJCQkJQklUKDcpCisjZGVmaW5lCUZXX0ZBX0NUTAkJCQlCSVQoOCkKKyNkZWZpbmUJRldfRFJJVkVSX0NUUkxfRE1fQ1RMCQkJQklUKDkpCisjZGVmaW5lCUZXX1BBUEVfQ1RMX0JZX1NXX0hXCQkJQklUKDEwKQorI2RlZmluZQlGV19ESVNBQkxFX0FMTF9ETQkJCTAKKyNkZWZpbmUJRldfUFdSX1RSS19QQVJBTV9DTFIJCQkweDAwMDBmZmZmCisjZGVmaW5lCUZXX1JBX1BBUkFNX0NMUgkJCQkweGZmZmYwMDAwCisKK2VudW0gZGVzY19wYWNrZXRfdHlwZSB7CisJREVTQ19QQUNLRVRfVFlQRV9JTklUID0gMCwKKwlERVNDX1BBQ0tFVF9UWVBFX05PUk1BTCA9IDEsCit9OworCisvKiA4LWJ5dGVzIGFsaWdubWVudCByZXF1aXJlZCAqLworc3RydWN0IGZ3X3ByaXYgeworCS8qIC0tLSBsb25nIHdvcmQgMCAtLS0tICovCisJLyogMHgxMjogQ0UgcHJvZHVjdCwgMHg5MjogSVQgcHJvZHVjdCAqLworCXU4IHNpZ25hdHVyZV8wOworCS8qIDB4ODc6IENFIHByb2R1Y3QsIDB4ODE6IElUIHByb2R1Y3QgKi8KKwl1OCBzaWduYXR1cmVfMTsKKwkvKiAweDgxOiBQQ0ktQVAsIDAxOlBDSWUsIDAyOiA5MlMtVSwKKwkgKiAweDgyOiBVU0ItQVAsIDB4MTI6IDcyUy1VLCAwMzpTRElPICovCisJdTggaGNpX3NlbDsKKwkvKiB0aGUgc2FtZSB2YWx1ZSBhcyByZWlnc3RlciB2YWx1ZSAgKi8KKwl1OCBjaGlwX3ZlcnNpb247CisJLyogY3VzdG9tZXIgIElEIGxvdyBieXRlICovCisJdTggY3VzdG9tZXJfaWRfMDsKKwkvKiBjdXN0b21lciAgSUQgaGlnaCBieXRlICovCisJdTggY3VzdG9tZXJfaWRfMTsKKwkvKiAweDExOiAgMVQxUiwgMHgxMjogMVQyUiwKKwkgKiAweDkyOiAxVDJSIHR1cmJvLCAweDIyOiAyVDJSICovCisJdTggcmZfY29uZmlnOworCS8qIDQ6IDRFUCwgNjogNkVQLCAxMTogMTFFUCAqLworCXU4IHVzYl9lcF9udW07CisKKwkvKiAtLS0gbG9uZyB3b3JkIDEgLS0tLSAqLworCS8qIHJlZ3VsYXRvcnkgY2xhc3MgYml0IG1hcCAwICovCisJdTggcmVndWxhdG9yeV9jbGFzc18wOworCS8qIHJlZ3VsYXRvcnkgY2xhc3MgYml0IG1hcCAxICovCisJdTggcmVndWxhdG9yeV9jbGFzc18xOworCS8qIHJlZ3VsYXRvcnkgY2xhc3MgYml0IG1hcCAyICovCisJdTggcmVndWxhdG9yeV9jbGFzc18yOworCS8qIHJlZ3VsYXRvcnkgY2xhc3MgYml0IG1hcCAzICovCisJdTggcmVndWxhdG9yeV9jbGFzc18zOworCS8qIDA6U1dTSSwgMTpIV1NJLCAyOkhXUEkgKi8KKwl1OCByZmludGZzOworCXU4IGRlZl9uZXR0eXBlOworCXU4IHJzdmQwMTA7CisJdTggcnN2ZDAxMTsKKworCS8qIC0tLSBsb25nIHdvcmQgMiAtLS0tICovCisJLyogMHgwMDogbm9ybWFsLCAweDAzOiBNQUNMQkssIDB4MDE6IFBIWUxCSyAqLworCXU4IGxia19tb2RlOworCS8qIDE6IGZvciBNUCB1c2UsIDA6IGZvciBub3JtYWwKKwkgKiBkcml2ZXIgKHRvIGJlIGRpc2N1c3NlZCkgKi8KKwl1OCBtcF9tb2RlOworCXU4IHJzdmQwMjA7CisJdTggcnN2ZDAyMTsKKwl1OCByc3ZkMDIyOworCXU4IHJzdmQwMjM7CisJdTggcnN2ZDAyNDsKKwl1OCByc3ZkMDI1OworCisJLyogLS0tIGxvbmcgd29yZCAzIC0tLS0gKi8KKwkvKiBRb1MgZW5hYmxlICovCisJdTggcW9zX2VuOworCS8qIDQwTUh6IEJXIGVuYWJsZSAqLworCS8qIDQxODEgY29udmVydCBBTVNEVSB0byBBTVBEVSwgMDogZGlzYWJsZSAqLworCXU4IGJ3XzQwbWh6X2VuOworCXU4IGFtc2R1MmFtcGR1X2VuOworCS8qIDExbiBBTVBEVSBlbmFibGUgKi8KKwl1OCBhbXBkdV9lbjsKKwkvKiBGVyBvZmZsb2FkcywgMDogZHJpdmVyIGhhbmRsZXMgKi8KKwl1OCByYXRlX2NvbnRyb2xfb2ZmbG9hZDsKKwkvKiBGVyBvZmZsb2FkcywgMDogZHJpdmVyIGhhbmRsZXMgKi8KKwl1OCBhZ2dyZWdhdGlvbl9vZmZsb2FkOworCXU4IHJzdmQwMzA7CisJdTggcnN2ZDAzMTsKKworCS8qIC0tLSBsb25nIHdvcmQgNCAtLS0tICovCisJLyogMS4gRlcgb2ZmbG9hZHMsIDA6IGRyaXZlciBoYW5kbGVzICovCisJdTggYmVhY29uX29mZmxvYWQ7CisJLyogMi4gRlcgb2ZmbG9hZHMsIDA6IGRyaXZlciBoYW5kbGVzICovCisJdTggbWxtZV9vZmZsb2FkOworCS8qIDMuIEZXIG9mZmxvYWRzLCAwOiBkcml2ZXIgaGFuZGxlcyAqLworCXU4IGh3cGNfb2ZmbG9hZDsKKwkvKiA0LiBGVyBvZmZsb2FkcywgMDogZHJpdmVyIGhhbmRsZXMgKi8KKwl1OCB0Y3BfY2hlY2tzdW1fb2ZmbG9hZDsKKwkvKiA1LiBGVyBvZmZsb2FkcywgMDogZHJpdmVyIGhhbmRsZXMgKi8KKwl1OCB0Y3Bfb2ZmbG9hZDsKKwkvKiA2LiBGVyBvZmZsb2FkcywgMDogZHJpdmVyIGhhbmRsZXMgKi8KKwl1OCBwc19jb250cm9sX29mZmxvYWQ7CisJLyogNy4gRlcgb2ZmbG9hZHMsIDA6IGRyaXZlciBoYW5kbGVzICovCisJdTggd3dsYW5fb2ZmbG9hZDsKKwl1OCByc3ZkMDQwOworCisJLyogLS0tIGxvbmcgd29yZCA1IC0tLS0gKi8KKwkvKiB0Y3AgdHggcGFja2V0IGxlbmd0aCBsb3cgYnl0ZSAqLworCXU4IHRjcF90eF9mcmFtZV9sZW5fTDsKKwkvKiB0Y3AgdHggcGFja2V0IGxlbmd0aCBoaWdoIGJ5dGUgKi8KKwl1OCB0Y3BfdHhfZnJhbWVfbGVuX0g7CisJLyogdGNwIHJ4IHBhY2tldCBsZW5ndGggbG93IGJ5dGUgKi8KKwl1OCB0Y3BfcnhfZnJhbWVfbGVuX0w7CisJLyogdGNwIHJ4IHBhY2tldCBsZW5ndGggaGlnaCBieXRlICovCisJdTggdGNwX3J4X2ZyYW1lX2xlbl9IOworCXU4IHJzdmQwNTA7CisJdTggcnN2ZDA1MTsKKwl1OCByc3ZkMDUyOworCXU4IHJzdmQwNTM7Cit9OworCisvKiA4LWJ5dGUgYWxpbm1lbnQgcmVxdWlyZWQgKi8KK3N0cnVjdCBmd19oZHIgeworCisJLyogLS0tIExPTkcgV09SRCAwIC0tLS0gKi8KKwl1MTYgc2lnbmF0dXJlOworCS8qIDB4ODAwMCB+IDB4OEZGRiBmb3IgRlBHQSB2ZXJzaW9uLAorCSAqIDB4MDAwMCB+IDB4N0ZGRiBmb3IgQVNJQyB2ZXJzaW9uLCAqLworCXUxNiB2ZXJzaW9uOworCS8qIGRlZmluZSB0aGUgc2l6ZSBvZiBib290IGxvYWRlciAqLworCXUzMiBkbWVtX3NpemU7CisKKworCS8qIC0tLSBMT05HIFdPUkQgMSAtLS0tICovCisJLyogZGVmaW5lIHRoZSBzaXplIG9mIEZXIGluIElNRU0gKi8KKwl1MzIgaW1nX2ltZW1fc2l6ZTsKKwkvKiBkZWZpbmUgdGhlIHNpemUgb2YgRlcgaW4gU1JBTSAqLworCXUzMiBpbWdfc3JhbV9zaXplOworCisJLyogLS0tIExPTkcgV09SRCAyIC0tLS0gKi8KKwkvKiBkZWZpbmUgdGhlIHNpemUgb2YgRE1FTSB2YXJpYWJsZSAqLworCXUzMiBmd19wcml2X3NpemU7CisJdTMyIHJzdmQwOworCisJLyogLS0tIExPTkcgV09SRCAzIC0tLS0gKi8KKwl1MzIgcnN2ZDE7CisJdTMyIHJzdmQyOworCisJc3RydWN0IGZ3X3ByaXYgZndwcml2OworCit9IDsKKworZW51bSBmd19zdGF0dXMgeworCUZXX1NUQVRVU19JTklUID0gMCwKKwlGV19TVEFUVVNfTE9BRF9JTUVNID0gMSwKKwlGV19TVEFUVVNfTE9BRF9FTUVNID0gMiwKKwlGV19TVEFUVVNfTE9BRF9ETUVNID0gMywKKwlGV19TVEFUVVNfUkVBRFkgPSA0LAorfTsKKworc3RydWN0IHJ0X2Zpcm13YXJlIHsKKwlzdHJ1Y3QgZndfaGRyICpwZndoZWFkZXI7CisJZW51bSBmd19zdGF0dXMgZndzdGF0dXM7CisJdTE2IGZpcm13YXJldmVyc2lvbjsKKwl1OCBmd19pbWVtW1JUTDgxOTBfTUFYX0ZJUk1XQVJFX0NPREVfU0laRV07CisJdTggZndfZW1lbVtSVEw4MTkwX01BWF9GSVJNV0FSRV9DT0RFX1NJWkVdOworCXUzMiBmd19pbWVtX2xlbjsKKwl1MzIgZndfZW1lbV9sZW47CisJdTggc3pfZndfdG1wYnVmZmVyWzE2NDAwMF07CisJdTMyIHN6X2Z3X3RtcGJ1ZmZlcmxlbjsKKwl1MTYgY21kcGFja2V0X2ZyYWd0aHJlc29sZDsKK307CisKK3N0cnVjdCBoMmNfc2V0X3B3cm1vZGVfcGFybSB7CisJdTggbW9kZTsKKwl1OCBmbGFnX2xvd190cmFmZmljX2VuOworCXU4IGZsYWdfbHBuYXZfZW47CisJdTggZmxhZ19yZl9sb3dfc25yX2VuOworCS8qIDE6IGRwcywgMDogMzJrICovCisJdTggZmxhZ19kcHNfZW47CisJdTggYmNuX3J4X2VuOworCXU4IGJjbl9wYXNzX2NudDsKKwkvKiBiZWFjb24gVE8gKG1zKS4gwqHCpz0wwqHCqCBubyBsaW1pdC4gKi8KKwl1OCBiY25fdG87CisJdTE2CWJjbl9pdHY7CisJLyogb25seSBmb3IgVk9JUCBtb2RlLiAqLworCXU4IGFwcF9pdHY7CisJdTggYXdha2VfYmNuX2l0dmw7CisJdTggc21hcnRfcHM7CisJLyogdW5pdDogMTAwIG1zICovCisJdTggYmNuX3Bhc3NfcGVyaW9kOworfTsKKworc3RydWN0IGgyY19qb2luYnNzX3JwdF9wYXJtIHsKKwl1OCBvcG1vZGU7CisJdTggcHNfcW9zX2luZm87CisJdTggYnNzaWRbNl07CisJdTE2IGJjbml0djsKKwl1MTYgYWlkOworfSA7CisKK3N0cnVjdCBoMmNfd3BhX3B0ayB7CisJLyogRUFQT0wtS2V5IEtleSBDb25maXJtYXRpb24gS2V5IChLQ0spICovCisJdTgga2NrWzE2XTsKKwkvKiBFQVBPTC1LZXkgS2V5IEVuY3J5cHRpb24gS2V5IChLRUspICovCisJdTgga2VrWzE2XTsKKwkvKiBUZW1wb3JhbCBLZXkgMSAoVEsxKSAqLworCXU4IHRrMVsxNl07CisJdW5pb24geworCQkvKiBUZW1wb3JhbCBLZXkgMiAoVEsyKSAqLworCQl1OCB0azJbMTZdOworCQlzdHJ1Y3QgeworCQkJdTggdHhfbWljX2tleVs4XTsKKwkJCXU4IHJ4X21pY19rZXlbOF07CisJCX0gYXRodTsKKwl9IHU7Cit9OworCitzdHJ1Y3QgaDJjX3dwYV90d29fd2F5X3Bhcm0geworCS8qIGFsZ29yaXRobSBUS0lQIG9yIEFFUyAqLworCXU4IHBhaXJ3aXNlX2VuX2FsZzsKKwl1OCBncm91cF9lbl9hbGc7CisJc3RydWN0IGgyY193cGFfcHRrIHdwYV9wdGtfdmFsdWU7Cit9IDsKKworZW51bSBoMmNfY21kIHsKKwlGV19IMkNfU0VUUFdSTU9ERSA9IDAsCisJRldfSDJDX0pPSU5CU1NSUFQgPSAxLAorCUZXX0gyQ19XT1dMQU5fVVBEQVRFX0dUSyA9IDIsCisJRldfSDJDX1dPV0xBTl9VUERBVEVfSVYgPSAzLAorCUZXX0gyQ19XT1dMQU5fT0ZGTE9BRCA9IDQsCit9OworCitlbnVtIGZ3X2gyY19jbWQgeworCUgyQ19SRUFEX01BQ1JFR19DTUQsCQkJCS8qMCovCisJSDJDX1dSSVRFX01BQ1JFR19DTUQsCisJSDJDX1JFQURCQl9DTUQsCisJSDJDX1dSSVRFQkJfQ01ELAorCUgyQ19SRUFEUkZfQ01ELAorCUgyQ19XUklURVJGX0NNRCwJCQkJLyo1Ki8KKwlIMkNfUkVBRF9FRVBST01fQ01ELAorCUgyQ19XUklURV9FRVBST01fQ01ELAorCUgyQ19SRUFEX0VGVVNFX0NNRCwKKwlIMkNfV1JJVEVfRUZVU0VfQ01ELAorCUgyQ19SRUFEX0NBTV9DTUQsCQkJCS8qMTAqLworCUgyQ19XUklURV9DQU1fQ01ELAorCUgyQ19TRVRCQ05JVFZfQ01ELAorCUgyQ19TRVRNQklEQ0ZHX0NNRCwKKwlIMkNfSk9JTkJTU19DTUQsCisJSDJDX0RJU0NPTk5FQ1RfQ01ELAkJCQkvKjE1Ki8KKwlIMkNfQ1JFQVRFQlNTX0NNRCwKKwlIMkNfU0VUT1BNb2RlX0NNRCwKKwlIMkNfU0lURVNVUlZFWV9DTUQsCisJSDJDX1NFVEFVVEhfQ01ELAorCUgyQ19TRVRLRVlfQ01ELAkJCQkJLyoyMCovCisJSDJDX1NFVFNUQUtFWV9DTUQsCisJSDJDX1NFVEFTU09DU1RBX0NNRCwKKwlIMkNfREVMQVNTT0NTVEFfQ01ELAorCUgyQ19TRVRTVEFQV1JTVEFURV9DTUQsCisJSDJDX1NFVEJBU0lDUkFURV9DTUQsCQkJCS8qMjUqLworCUgyQ19HRVRCQVNJQ1JBVEVfQ01ELAorCUgyQ19TRVREQVRBUkFURV9DTUQsCisJSDJDX0dFVERBVEFSQVRFX0NNRCwKKwlIMkNfU0VUUEhZSU5GT19DTUQsCisJSDJDX0dFVFBIWUlORk9fQ01ELAkJCQkvKjMwKi8KKwlIMkNfU0VUUEhZX0NNRCwKKwlIMkNfR0VUUEhZX0NNRCwKKwlIMkNfUkVBRFJTU0lfQ01ELAorCUgyQ19SRUFER0FJTl9DTUQsCisJSDJDX1NFVEFUSU1fQ01ELAkJCQkvKjM1Ki8KKwlIMkNfU0VUUFdSTU9ERV9DTUQsCisJSDJDX0pPSU5CU1NSUFRfQ01ELAorCUgyQ19TRVRSQVRBQkxFX0NNRCwKKwlIMkNfR0VUUkFUQUJMRV9DTUQsCisJSDJDX0dFVENDWFJFUE9SVF9DTUQsCQkJCS8qNDAqLworCUgyQ19HRVREVE1SRVBPUlRfQ01ELAorCUgyQ19HRVRUWFJBVEVTVEFUSUNTX0NNRCwKKwlIMkNfU0VUVVNCU1VTUEVORF9DTUQsCisJSDJDX1NFVEgyQ0xCS19DTUQsCisJSDJDX1RNUDEsCQkJCQkvKjQ1Ki8KKwlIMkNfV09XTEFOX1VQREFURV9HVEtfQ01ELAorCUgyQ19XT1dMQU5fRldfT0ZGTE9BRCwKKwlIMkNfVE1QMiwKKwlIMkNfVE1QMywKKwlIMkNfV09XTEFOX1VQREFURV9JVl9DTUQsCQkJLyo1MCovCisJSDJDX1RNUDQsCisJTUFYX0gyQ0NNRAkJCQkJLyo1MiovCit9OworCisvKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgdXNlZCBmb3IgRlcKKyAqIENNRCBtYXAgYW5kIHBhcmFtZXRlciB1cGRhdGVkLiAqLworI2RlZmluZSBGV19DTURfSU9fQ0xSKHJ0bHByaXYsIF9CaXQpCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJdWRlbGF5KDEwMDApOwkJCQkJXAorCQlydGxwcml2LT5ydGxoYWwuZndjbWRfaW9tYXAgJj0gKH5fQml0KTsJCVwKKwl9IHdoaWxlICgwKTsKKworI2RlZmluZSBGV19DTURfSU9fVVBEQVRFKHJ0bHByaXYsIF92YWwpCQkJCVwKKwlydGxwcml2LT5ydGxoYWwuZndjbWRfaW9tYXAgPSBfdmFsOworCisjZGVmaW5lIEZXX0NNRF9JT19TRVQocnRscHJpdiwgX3ZhbCkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQlydGxfd3JpdGVfd29yZChydGxwcml2LCBMQlVTX01PTl9BRERSLCAodTE2KV92YWwpOwlcCisJCUZXX0NNRF9JT19VUERBVEUocnRscHJpdiwgX3ZhbCk7CQlcCisJfSB3aGlsZSAoMCk7CisKKyNkZWZpbmUgRldfQ01EX1BBUkFfU0VUKHJ0bHByaXYsIF92YWwpCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIExCVVNfQUREUl9NQVNLLCBfdmFsKTsJXAorCQlydGxwcml2LT5ydGxoYWwuZndjbWRfaW9wYXJhbSA9IF92YWw7CQlcCisJfSB3aGlsZSAoMCk7CisKKyNkZWZpbmUgRldfQ01EX0lPX1FVRVJZKHJ0bHByaXYpCQkJCVwKKwkodTE2KShydGxwcml2LT5ydGxoYWwuZndjbWRfaW9tYXApCisjZGVmaW5lIEZXX0NNRF9JT19QQVJBX1FVRVJZKHJ0bHByaXYpCQkJCVwKKwkoKHUzMikocnRscHJpdi0+cnRsaGFsLmZ3Y21kX2lvcGFyYW0pKQorCitpbnQgcnRsOTJzX2Rvd25sb2FkX2Z3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJzX3NldF9md19wd3Jtb2RlX2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggbW9kZSk7Cit2b2lkIHJ0bDkyc19zZXRfZndfam9pbmJzc19yZXBvcnRfY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgIHU4IG1zdGF0dXMsIHU4IHBzX3Fvc2luZm8pOworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL2h3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU5MDA1ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL2h3LmMKQEAgLTAsMCArMSwyNTEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIi4uL3dpZmkuaCIKKyNpbmNsdWRlICIuLi9lZnVzZS5oIgorI2luY2x1ZGUgIi4uL2Jhc2UuaCIKKyNpbmNsdWRlICIuLi9yZWdkLmgiCisjaW5jbHVkZSAiLi4vY2FtLmgiCisjaW5jbHVkZSAiLi4vcHMuaCIKKyNpbmNsdWRlICIuLi9wY2kuaCIKKyNpbmNsdWRlICJyZWcuaCIKKyNpbmNsdWRlICJkZWYuaCIKKyNpbmNsdWRlICJwaHkuaCIKKyNpbmNsdWRlICJkbS5oIgorI2luY2x1ZGUgImZ3LmgiCisjaW5jbHVkZSAibGVkLmgiCisjaW5jbHVkZSAiaHcuaCIKKwordm9pZCBydGw5MnNlX2dldF9od19yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHZhcmlhYmxlLCB1OCAqdmFsKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCisJc3dpdGNoICh2YXJpYWJsZSkgeworCWNhc2UgSFdfVkFSX1JDUjogeworCQkJKigodTMyICopICh2YWwpKSA9IHJ0bHBjaS0+cmVjZWl2ZV9jb25maWc7CisJCQlicmVhazsKKwkJfQorCWNhc2UgSFdfVkFSX1JGX1NUQVRFOiB7CisJCQkqKChlbnVtIHJmX3B3cnN0YXRlICopKHZhbCkpID0gcHBzYy0+cmZwd3Jfc3RhdGU7CisJCQlicmVhazsKKwkJfQorCWNhc2UgSFdfVkFSX0ZXX1BTTU9ERV9TVEFUVVM6IHsKKwkJCSooKGJvb2wgKikgKHZhbCkpID0gcHBzYy0+ZndfY3VycmVudF9pbnBzbW9kZTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBIV19WQVJfQ09SUkVDVF9UU0Y6IHsKKwkJCXU2NCB0c2Y7CisJCQl1MzIgKnB0c2ZfbG93ID0gKHUzMiAqKSZ0c2Y7CisJCQl1MzIgKnB0c2ZfaGlnaCA9ICgodTMyICopJnRzZikgKyAxOworCisJCQkqcHRzZl9oaWdoID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgKFRTRlIgKyA0KSk7CisJCQkqcHRzZl9sb3cgPSBydGxfcmVhZF9kd29yZChydGxwcml2LCBUU0ZSKTsKKworCQkJKigodTY0ICopICh2YWwpKSA9IHRzZjsKKworCQkJYnJlYWs7CisJCX0KKwljYXNlIEhXX1ZBUl9NUkM6IHsKKwkJCSooKGJvb2wgKikodmFsKSkgPSBydGxwcml2LT5kbS5jdXJyZW50X21yY19zd2l0Y2g7CisJCQlicmVhazsKKwkJfQorCWRlZmF1bHQ6IHsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkJICgic3dpdGNoIGNhc2Ugbm90IHByb2Nlc3NcbiIpKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCit2b2lkIHJ0bDkyc2Vfc2V0X2h3X3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggdmFyaWFibGUsIHU4ICp2YWwpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisKKwlzd2l0Y2ggKHZhcmlhYmxlKSB7CisJY2FzZSBIV19WQVJfRVRIRVJfQUREUjp7CisJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgSURSMCwgKCh1MzIgKikodmFsKSlbMF0pOworCQkJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgSURSNCwgKCh1MTYgKikodmFsICsgNCkpWzBdKTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBIV19WQVJfQkFTSUNfUkFURTp7CisJCQl1MTYgcmF0ZV9jZmcgPSAoKHUxNiAqKSB2YWwpWzBdOworCQkJdTggcmF0ZV9pbmRleCA9IDA7CisKKwkJCWlmIChydGxoYWwtPnZlcnNpb24gPT0gVkVSU0lPTl84MTkyU19BQ1VUKQorCQkJCXJhdGVfY2ZnID0gcmF0ZV9jZmcgJiAweDE1MDsKKwkJCWVsc2UKKwkJCQlyYXRlX2NmZyA9IHJhdGVfY2ZnICYgMHgxNWY7CisKKwkJCXJhdGVfY2ZnIHw9IDB4MDE7CisKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJSU1IsIHJhdGVfY2ZnICYgMHhmZik7CisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSUlNSICsgMSwKKwkJCQkgICAgICAgKHJhdGVfY2ZnID4+IDgpICYgMHhmZik7CisKKwkJCXdoaWxlIChyYXRlX2NmZyA+IDB4MSkgeworCQkJCXJhdGVfY2ZnID0gKHJhdGVfY2ZnID4+IDEpOworCQkJCXJhdGVfaW5kZXgrKzsKKwkJCX0KKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIElOSVJUU01DU19TRUwsIHJhdGVfaW5kZXgpOworCisJCQlicmVhazsKKwkJfQorCWNhc2UgSFdfVkFSX0JTU0lEOnsKKwkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBCU1NJRFIsICgodTMyICopKHZhbCkpWzBdKTsKKwkJCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIEJTU0lEUiArIDQsCisJCQkJICAgICAgICgodTE2ICopKHZhbCArIDQpKVswXSk7CisJCQlicmVhazsKKwkJfQorCWNhc2UgSFdfVkFSX1NJRlM6eworCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgU0lGU19PRkRNLCB2YWxbMF0pOworCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgU0lGU19PRkRNICsgMSwgdmFsWzFdKTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBIV19WQVJfU0xPVF9USU1FOnsKKwkJCXU4IGVfYWNpOworCisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01MTUUsIERCR19MT1VELAorCQkJCSAoIkhXX1ZBUl9TTE9UX1RJTUUgJXhcbiIsIHZhbFswXSkpOworCisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBTTE9UX1RJTUUsIHZhbFswXSk7CisKKwkJCWZvciAoZV9hY2kgPSAwOyBlX2FjaSA8IEFDX01BWDsgZV9hY2krKykgeworCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LAorCQkJCQkJSFdfVkFSX0FDX1BBUkFNLAorCQkJCQkJKHU4ICopKCZlX2FjaSkpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwljYXNlIEhXX1ZBUl9BQ0tfUFJFQU1CTEU6eworCQkJdTggcmVnX3RtcDsKKwkJCXU4IHNob3J0X3ByZWFtYmxlID0gKGJvb2wpICgqKHU4ICopIHZhbCk7CisJCQlyZWdfdG1wID0gKG1hYy0+Y3VyXzQwX3ByaW1lX3NjKSA8PCA1OworCQkJaWYgKHNob3J0X3ByZWFtYmxlKQorCQkJCXJlZ190bXAgfD0gMHg4MDsKKworCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUlJTUiArIDIsIHJlZ190bXApOworCQkJYnJlYWs7CisJCX0KKwljYXNlIEhXX1ZBUl9BTVBEVV9NSU5fU1BBQ0U6eworCQkJdTggbWluX3NwYWNpbmdfdG9fc2V0OworCQkJdTggc2VjX21pbl9zcGFjZTsKKworCQkJbWluX3NwYWNpbmdfdG9fc2V0ID0gKigodTggKil2YWwpOworCQkJaWYgKG1pbl9zcGFjaW5nX3RvX3NldCA8PSA3KSB7CisJCQkJaWYgKHJ0bHByaXYtPnNlYy5wYWlyd2lzZV9lbmNfYWxnb3JpdGhtID09CisJCQkJICAgIE5PX0VOQ1JZUFRJT04pCisJCQkJCXNlY19taW5fc3BhY2UgPSAwOworCQkJCWVsc2UKKwkJCQkJc2VjX21pbl9zcGFjZSA9IDE7CisKKwkJCQlpZiAobWluX3NwYWNpbmdfdG9fc2V0IDwgc2VjX21pbl9zcGFjZSkKKwkJCQkJbWluX3NwYWNpbmdfdG9fc2V0ID0gc2VjX21pbl9zcGFjZTsKKwkJCQlpZiAobWluX3NwYWNpbmdfdG9fc2V0ID4gNSkKKwkJCQkJbWluX3NwYWNpbmdfdG9fc2V0ID0gNTsKKworCQkJCW1hYy0+bWluX3NwYWNlX2NmZyA9CisJCQkJCQkoKG1hYy0+bWluX3NwYWNlX2NmZyAmIDB4ZjgpIHwKKwkJCQkJCW1pbl9zcGFjaW5nX3RvX3NldCk7CisKKwkJCQkqdmFsID0gbWluX3NwYWNpbmdfdG9fc2V0OworCisJCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9NTE1FLCBEQkdfTE9VRCwKKwkJCQkJICgiU2V0IEhXX1ZBUl9BTVBEVV9NSU5fU1BBQ0U6ICUjeFxuIiwKKwkJCQkJICBtYWMtPm1pbl9zcGFjZV9jZmcpKTsKKworCQkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIEFNUERVX01JTl9TUEFDRSwKKwkJCQkJICAgICAgIG1hYy0+bWluX3NwYWNlX2NmZyk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCWNhc2UgSFdfVkFSX1NIT1JUR0lfREVOU0lUWTp7CisJCQl1OCBkZW5zaXR5X3RvX3NldDsKKworCQkJZGVuc2l0eV90b19zZXQgPSAqKCh1OCAqKSB2YWwpOworCQkJbWFjLT5taW5fc3BhY2VfY2ZnID0gcnRscHJpdi0+cnRsaGFsLm1pbnNwYWNlX2NmZzsKKwkJCW1hYy0+bWluX3NwYWNlX2NmZyB8PSAoZGVuc2l0eV90b19zZXQgPDwgMyk7CisKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTUxNRSwgREJHX0xPVUQsCisJCQkJICgiU2V0IEhXX1ZBUl9TSE9SVEdJX0RFTlNJVFk6ICUjeFxuIiwKKwkJCQkgIG1hYy0+bWluX3NwYWNlX2NmZykpOworCisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBBTVBEVV9NSU5fU1BBQ0UsCisJCQkJICAgICAgIG1hYy0+bWluX3NwYWNlX2NmZyk7CisKKwkJCWJyZWFrOworCQl9CisJY2FzZSBIV19WQVJfQU1QRFVfRkFDVE9SOnsKKwkJCXU4IGZhY3Rvcl90b3NldDsKKwkJCXU4IHJlZ3Rvc2V0OworCQkJdTggZmFjdG9ybGV2ZWxbMThdID0geworCQkJCTIsIDQsIDQsIDcsIDcsIDEzLCAxMywKKwkJCQkxMywgMiwgNywgNywgMTMsIDEzLAorCQkJCTE1LCAxNSwgMTUsIDE1LCAwfTsKKwkJCXU4IGluZGV4ID0gMDsKKworCQkJZmFjdG9yX3Rvc2V0ID0gKigodTggKikgdmFsKTsKKwkJCWlmIChmYWN0b3JfdG9zZXQgPD0gMykgeworCQkJCWZhY3Rvcl90b3NldCA9ICgxIDw8IChmYWN0b3JfdG9zZXQgKyAyKSk7CisJCQkJaWYgKGZhY3Rvcl90b3NldCA+IDB4ZikKKwkJCQkJZmFjdG9yX3Rvc2V0ID0gMHhmOworCisJCQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgMTc7IGluZGV4KyspIHsKKwkJCQkJaWYgKGZhY3RvcmxldmVsW2luZGV4XSA+IGZhY3Rvcl90b3NldCkKKwkJCQkJCWZhY3RvcmxldmVsW2luZGV4XSA9CisJCQkJCQkJCSBmYWN0b3JfdG9zZXQ7CisJCQkJfQorCisJCQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgODsgaW5kZXgrKykgeworCQkJCQlyZWd0b3NldCA9ICgoZmFjdG9ybGV2ZWxbaW5kZXggKiAyXSkgfAorCQkJCQkJICAgIChmYWN0b3JsZXZlbFtpbmRleCAqCisJCQkJCQkgICAgMiArIDFdIDw8IDQpKTsKKwkJCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwKKwkJCQkJCSAgICAgICBBR0dMRU5fTE1UX0wgKyBpbmRleCwKKwkJCQkJCSAgICAgICByZWd0b3NldCk7CisJCQkJfQorCisJCQkJcmVndG9zZXQgPSAoKGZhY3RvcmxldmVsWzE2XSkgfAorCQkJCQkgICAgKGZhY3RvcmxldmVsWzE3XSA8PCA0KSk7CisJCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgQUdHTEVOX0xNVF9ILCByZWd0b3NldCk7CisKKwkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX01MTUUsIERCR19MT1VELAorCQkJCQkgKCJTZXQgSFdfVkFSX0FNUERVX0ZBQ1RPUjogJSN4XG4iLAorCQkJCQkgIGZhY3Rvcl90b3NldCkpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwljYXNlIEhXX1ZBUl9BQ19QQVJBTTp7CisJCQl1OCBlX2FjaSA9ICooKHU4ICopIHZhbCk7CisJCQlydGw5MnNfZG1faW5pdF9lZGNhX3R1cmJvKGh3KTsKKworCQkJaWYgKHJ0bHBjaS0+YWNtX21ldGhvZCAhPSBlQWNtV2F5Ml9TVykKKwkJCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywKKwkJCQkJCSBIV19WQVJfQUNNX0NUUkwsCisJCQkJCQkgKHU4ICopKCZlX2FjaSkpOworCQkJYnJlYWs7CisJCX0KKwljYXNlIEhXX1ZBUl9BQ01fQ1RSTDp7CisJCQl1OCBlX2FjaSA9ICooKHU4ICopIHZhbCk7CisJCQl1bmlvbiBhY2lfYWlmc24gKnBfYWNpX2FpZnNuID0gKHVuaW9uIGFjaV9haWZzbiAqKSgmKAorCQkJCQkJCW1hYy0+YWNbMF0uYWlmcykpOworCQkJdTggYWNtID0gcF9hY2lfYWlmc24tPmYuYWNtOworCQkJdTggYWNtX2N0cmwgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIEFjbUh3Q3RybCk7CisKKwkJCWFjbV9jdHJsID0gYWNtX2N0cmwgfCAoKHJ0bHBjaS0+YWNtX21ldGhvZCA9PSAyKSA/CisJCQkJICAgMHgwIDogMHgxKTsKKworCQkJaWYgKGFjbSkgeworCQkJCXN3aXRjaCAoZV9hY2kpIHsKKwkJCQljYXNlIEFDMF9CRToKKwkJCQkJYWNtX2N0cmwgfD0gQWNtSHdfQmVxRW47CisJCQkJCWJyZWFrOworCQkJCWNhc2UgQUMyX1ZJOgorCQkJCQlhY21fY3RybCB8PSBBY21Id19WaXFFbjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBBQzNfVk86CisJCQkJCWFjbV9jdHJsIHw9IEFjbUh3X1ZvcUVuOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX1dBUk5JTkcsCisJCQkJCQkgKCJIV19WQVJfQUNNX0NUUkwgYWNtIHNldCAiCisJCQkJCQkgICJmYWlsZWQ6IGVBQ0kgaXMgJWRcbiIsIGFjbSkpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXN3aXRjaCAoZV9hY2kpIHsKKwkJCQljYXNlIEFDMF9CRToKKwkJCQkJYWNtX2N0cmwgJj0gKH5BY21Id19CZXFFbik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgQUMyX1ZJOgorCQkJCQlhY21fY3RybCAmPSAofkFjbUh3X1ZpcUVuKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBBQzNfVk86CisJCQkJCWFjbV9jdHJsICY9ICh+QWNtSHdfQmVxRW4pOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJCQkJICgic3dpdGNoIGNhc2Ugbm90IHByb2Nlc3NcbiIpKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1FPUywgREJHX1RSQUNFLAorCQkJCSAoIkhXX1ZBUl9BQ01fQ1RSTCBXcml0ZSAweCVYXG4iLCBhY21fY3RybCkpOworCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgQWNtSHdDdHJsLCBhY21fY3RybCk7CisJCQlicmVhazsKKwkJfQorCWNhc2UgSFdfVkFSX1JDUjp7CisJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkNSLCAoKHUzMiAqKSAodmFsKSlbMF0pOworCQkJcnRscGNpLT5yZWNlaXZlX2NvbmZpZyA9ICgodTMyICopICh2YWwpKVswXTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBIV19WQVJfUkVUUllfTElNSVQ6eworCQkJdTggcmV0cnlfbGltaXQgPSAoKHU4ICopICh2YWwpKVswXTsKKworCQkJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVUUllfTElNSVQsCisJCQkJICAgICAgIHJldHJ5X2xpbWl0IDw8IFJFVFJZX0xJTUlUX1NIT1JUX1NISUZUIHwKKwkJCQkgICAgICAgcmV0cnlfbGltaXQgPDwgUkVUUllfTElNSVRfTE9OR19TSElGVCk7CisJCQlicmVhazsKKwkJfQorCWNhc2UgSFdfVkFSX0RVQUxfVFNGX1JTVDogeworCQkJYnJlYWs7CisJCX0KKwljYXNlIEhXX1ZBUl9FRlVTRV9CWVRFUzogeworCQkJcnRsZWZ1c2UtPmVmdXNlX3VzZWRieXRlcyA9ICooKHUxNiAqKSB2YWwpOworCQkJYnJlYWs7CisJCX0KKwljYXNlIEhXX1ZBUl9FRlVTRV9VU0FHRTogeworCQkJcnRsZWZ1c2UtPmVmdXNlX3VzZWRwZXJjZW50YWdlID0gKigodTggKikgdmFsKTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBIV19WQVJfSU9fQ01EOiB7CisJCQlicmVhazsKKwkJfQorCWNhc2UgSFdfVkFSX1dQQV9DT05GSUc6IHsKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TRUNSLCAqKCh1OCAqKSB2YWwpKTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBIV19WQVJfU0VUX1JQV006eworCQkJYnJlYWs7CisJCX0KKwljYXNlIEhXX1ZBUl9IMkNfRldfUFdSTU9ERTp7CisJCQlicmVhazsKKwkJfQorCWNhc2UgSFdfVkFSX0ZXX1BTTU9ERV9TVEFUVVM6IHsKKwkJCXBwc2MtPmZ3X2N1cnJlbnRfaW5wc21vZGUgPSAqKChib29sICopIHZhbCk7CisJCQlicmVhazsKKwkJfQorCWNhc2UgSFdfVkFSX0gyQ19GV19KT0lOQlNTUlBUOnsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBIV19WQVJfQUlEOnsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBIV19WQVJfQ09SUkVDVF9UU0Y6eworCQkJYnJlYWs7CisJCX0KKwljYXNlIEhXX1ZBUl9NUkM6IHsKKwkJCWJvb2wgYm1yY190b3NldCA9ICooKGJvb2wgKil2YWwpOworCQkJdTggdTFiZGF0YSA9IDA7CisKKwkJCWlmIChibXJjX3Rvc2V0KSB7CisJCQkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1RSWFBBVEhFTkFCTEUsCisJCQkJCSAgICAgIE1BU0tCWVRFMCwgMHgzMyk7CisJCQkJdTFiZGF0YSA9ICh1OClydGxfZ2V0X2JicmVnKGh3LAorCQkJCQkJUk9GRE0xX1RSWFBBVEhFTkFCTEUsCisJCQkJCQlNQVNLQllURTApOworCQkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMV9UUlhQQVRIRU5BQkxFLAorCQkJCQkgICAgICBNQVNLQllURTAsCisJCQkJCSAgICAgICgodTFiZGF0YSAmIDB4ZjApIHwgMHgwMykpOworCQkJCXUxYmRhdGEgPSAodTgpcnRsX2dldF9iYnJlZyhodywKKwkJCQkJCVJPRkRNMF9UUlhQQVRIRU5BQkxFLAorCQkJCQkJTUFTS0JZVEUxKTsKKwkJCQlydGxfc2V0X2JicmVnKGh3LCBST0ZETTBfVFJYUEFUSEVOQUJMRSwKKwkJCQkJICAgICAgTUFTS0JZVEUxLAorCQkJCQkgICAgICAodTFiZGF0YSB8IDB4MDQpKTsKKworCQkJCS8qIFVwZGF0ZSBjdXJyZW50IHNldHRpbmdzLiAqLworCQkJCXJ0bHByaXYtPmRtLmN1cnJlbnRfbXJjX3N3aXRjaCA9IGJtcmNfdG9zZXQ7CisJCQl9IGVsc2UgeworCQkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMF9UUlhQQVRIRU5BQkxFLAorCQkJCQkgICAgICBNQVNLQllURTAsIDB4MTMpOworCQkJCXUxYmRhdGEgPSAodTgpcnRsX2dldF9iYnJlZyhodywKKwkJCQkJCSBST0ZETTFfVFJYUEFUSEVOQUJMRSwKKwkJCQkJCSBNQVNLQllURTApOworCQkJCXJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMV9UUlhQQVRIRU5BQkxFLAorCQkJCQkgICAgICBNQVNLQllURTAsCisJCQkJCSAgICAgICgodTFiZGF0YSAmIDB4ZjApIHwgMHgwMSkpOworCQkJCXUxYmRhdGEgPSAodTgpcnRsX2dldF9iYnJlZyhodywKKwkJCQkJCVJPRkRNMF9UUlhQQVRIRU5BQkxFLAorCQkJCQkJTUFTS0JZVEUxKTsKKwkJCQlydGxfc2V0X2JicmVnKGh3LCBST0ZETTBfVFJYUEFUSEVOQUJMRSwKKwkJCQkJICAgICAgTUFTS0JZVEUxLCAodTFiZGF0YSAmIDB4ZmIpKTsKKworCQkJCS8qIFVwZGF0ZSBjdXJyZW50IHNldHRpbmdzLiAqLworCQkJCXJ0bHByaXYtPmRtLmN1cnJlbnRfbXJjX3N3aXRjaCA9IGJtcmNfdG9zZXQ7CisJCQl9CisKKwkJCWJyZWFrOworCQl9CisJZGVmYXVsdDoKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoInN3aXRjaCBjYXNlIG5vdCBwcm9jZXNzXG4iKSk7CisJCWJyZWFrOworCX0KKworfQorCit2b2lkIHJ0bDkyc2VfZW5hYmxlX2h3X3NlY3VyaXR5X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTggc2VjX3JlZ192YWx1ZSA9IDB4MDsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0xPVUQsICgiUGFpcndpc2VFbmNBbGdvcml0aG0gPSAlZCAiCisJCSAiR3JvdXBFbmNBbGdvcml0aG0gPSAlZFxuIiwKKwkJIHJ0bHByaXYtPnNlYy5wYWlyd2lzZV9lbmNfYWxnb3JpdGhtLAorCQkgcnRscHJpdi0+c2VjLmdyb3VwX2VuY19hbGdvcml0aG0pKTsKKworCWlmIChydGxwcml2LT5jZmctPm1vZF9wYXJhbXMtPnN3X2NyeXB0byB8fCBydGxwcml2LT5zZWMudXNlX3N3X3NlYykgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0RNRVNHLAorCQkJICgibm90IG9wZW4gaHcgZW5jcnlwdGlvblxuIikpOworCQlyZXR1cm47CisJfQorCisJc2VjX3JlZ192YWx1ZSA9IFNDUl9UWEVOQ0VOQUJMRSB8IFNDUl9SWEVOQ0VOQUJMRTsKKworCWlmIChydGxwcml2LT5zZWMudXNlX2RlZmF1bHRrZXkpIHsKKwkJc2VjX3JlZ192YWx1ZSB8PSBTQ1JfVFhVU0VESzsKKwkJc2VjX3JlZ192YWx1ZSB8PSBTQ1JfUlhVU0VESzsKKwl9CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0xPVUQsICgiVGhlIFNFQ1ItdmFsdWUgJXhcbiIsCisJCQlzZWNfcmVnX3ZhbHVlKSk7CisKKwlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX1dQQV9DT05GSUcsICZzZWNfcmVnX3ZhbHVlKTsKKworfQorCitzdGF0aWMgdTggX3J0bDkyY2VfaGFsc2V0X3N5c2NsayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggZGF0YSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTggd2FpdGNvdW50ID0gMTAwOworCWJvb2wgYnJlc3VsdCA9IGZhbHNlOworCXU4IHRtcHZhbHVlOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgU1lTX0NMS1IgKyAxLCBkYXRhKTsKKworCS8qIFdhaXQgdGhlIE1BQyBzeW5jaHJvbml6ZWQuICovCisJdWRlbGF5KDQwMCk7CisKKwkvKiBDaGVjayBpZiBpdCBpcyBzZXQgcmVhZHkuICovCisJdG1wdmFsdWUgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFNZU19DTEtSICsgMSk7CisJYnJlc3VsdCA9ICgodG1wdmFsdWUgJiBCSVQoNykpID09IChkYXRhICYgQklUKDcpKSk7CisKKwlpZiAoKGRhdGEgJiAoQklUKDYpIHwgQklUKDcpKSkgPT0gZmFsc2UpIHsKKwkJd2FpdGNvdW50ID0gMTAwOworCQl0bXB2YWx1ZSA9IDA7CisKKwkJd2hpbGUgKDEpIHsKKwkJCXdhaXRjb3VudC0tOworCisJCQl0bXB2YWx1ZSA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgU1lTX0NMS1IgKyAxKTsKKwkJCWlmICgodG1wdmFsdWUgJiBCSVQoNikpKQorCQkJCWJyZWFrOworCisJCQlwcmludGsoS0VSTl9FUlIgIndhaXQgZm9yIEJJVCg2KSByZXR1cm4gdmFsdWUgJXhcbiIsCisJCQkgICAgICAgdG1wdmFsdWUpOworCQkJaWYgKHdhaXRjb3VudCA9PSAwKQorCQkJCWJyZWFrOworCisJCQl1ZGVsYXkoMTApOworCQl9CisKKwkJaWYgKHdhaXRjb3VudCA9PSAwKQorCQkJYnJlc3VsdCA9IGZhbHNlOworCQllbHNlCisJCQlicmVzdWx0ID0gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gYnJlc3VsdDsKK30KKwordm9pZCBydGw4MTkyc2VfZ3Bpb2JpdDNfY2ZnX2lucHV0bW9kZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTggdTF0bXA7CisKKwkvKiBUaGUgZm9sbG93aW5nIGNvbmZpZyBHUElPIGZ1bmN0aW9uICovCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgTUFDX1BJTk1VWF9DRkcsIChHUElPTVVYX0VOIHwgR1BJT1NFTF9HUElPKSk7CisJdTF0bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIEdQSU9fSU9fU0VMKTsKKworCS8qIGNvbmZpZyBHUElPMyB0byBpbnB1dCAqLworCXUxdG1wICY9IEhBTF84MTkyU19IV19HUElPX09GRl9NQVNLOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIEdQSU9fSU9fU0VMLCB1MXRtcCk7CisKK30KKworc3RhdGljIHU4IF9ydGw5MnNlX3JmX29ub2ZmX2RldGVjdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTggdTF0bXA7CisJdTggcmV0dmFsID0gRVJGT047CisKKwkvKiBUaGUgZm9sbG93aW5nIGNvbmZpZyBHUElPIGZ1bmN0aW9uICovCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgTUFDX1BJTk1VWF9DRkcsIChHUElPTVVYX0VOIHwgR1BJT1NFTF9HUElPKSk7CisJdTF0bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIEdQSU9fSU9fU0VMKTsKKworCS8qIGNvbmZpZyBHUElPMyB0byBpbnB1dCAqLworCXUxdG1wICY9IEhBTF84MTkyU19IV19HUElPX09GRl9NQVNLOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIEdQSU9fSU9fU0VMLCB1MXRtcCk7CisKKwkvKiBPbiBzb21lIG9mIHRoZSBwbGF0Zm9ybSwgZHJpdmVyIGNhbm5vdCByZWFkIGNvcnJlY3QKKwkgKiB2YWx1ZSB3aXRob3V0IGRlbGF5IGJldHdlZW4gV3JpdGVfR1BJT19TRUwgYW5kIFJlYWRfR1BJT19JTiAqLworCW1kZWxheSgxMCk7CisKKwkvKiBjaGVjayBHUElPMyAqLworCXUxdG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBHUElPX0lOKTsKKwlyZXR2YWwgPSAodTF0bXAgJiBIQUxfODE5MlNfSFdfR1BJT19PRkZfQklUKSA/IEVSRk9OIDogRVJGT0ZGOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyc2VfbWFjY29uZmlnX2JlZm9yZV9md2Rvd25sb2FkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCisJdTggaTsKKwl1OCB0bXB1MWI7CisJdTE2IHRtcHUyYjsKKwl1OCBwb2xsaW5nY250ID0gMjA7CisKKwlpZiAocnRscGNpLT5maXJzdF9pbml0KSB7CisJCS8qIFJlc2V0IFBDSUUgRGlnaXRhbCAqLworCQl0bXB1MWIgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTiArIDEpOworCQl0bXB1MWIgJj0gMHhGRTsKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOICsgMSwgdG1wdTFiKTsKKwkJdWRlbGF5KDEpOworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4gKyAxLCB0bXB1MWIgfCBCSVQoMCkpOworCX0KKworCS8qIFN3aXRjaCB0byBTVyBJTyBjb250cm9sICovCisJdG1wdTFiID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCAoU1lTX0NMS1IgKyAxKSk7CisJaWYgKHRtcHUxYiAmIEJJVCg3KSkgeworCQl0bXB1MWIgJj0gfihCSVQoNikgfCBCSVQoNykpOworCisJCS8qIFNldCBmYWlsZWQsIHJldHVybiB0byBwcmV2ZW50IGhhbmcuICovCisJCWlmICghX3J0bDkyY2VfaGFsc2V0X3N5c2NsayhodywgdG1wdTFiKSkKKwkJCXJldHVybjsKKwl9CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBBRkVfUExMX0NUUkwsIDB4MCk7CisJdWRlbGF5KDUwKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBMRE9BMTVfQ1RSTCwgMHgzNCk7CisJdWRlbGF5KDUwKTsKKworCS8qIENsZWFyIEZXIFJQV00gZm9yIEZXIGNvbnRyb2wgTFBTLiovCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUlBXTSwgMHgwKTsKKworCS8qIFJlc2V0IE1BQy1JTyBhbmQgQ1BVIGFuZCBDb3JlIERpZ2l0YWwgQklUKDEwKS8xMS8xNSAqLworCXRtcHUxYiA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOICsgMSk7CisJdG1wdTFiICY9IDB4NzM7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOICsgMSwgdG1wdTFiKTsKKwkvKiB3YWl0IGZvciBCSVQgMTAvMTEvMTUgdG8gcHVsbCBoaWdoIGF1dG9tYXRpY2FsbHkhISAqLworCW1kZWxheSgxKTsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIENNRFIsIDApOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFRDUiwgMCk7CisKKwkvKiBEYXRhIHNoZWV0IG5vdCBkZWZpbmUgMHg1NjIhISEgQ29weSBmcm9tIFdNQUMhISEhISAqLworCXRtcHUxYiA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgMHg1NjIpOworCXRtcHUxYiB8PSAweDA4OworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4NTYyLCB0bXB1MWIpOworCXRtcHUxYiAmPSB+KEJJVCgzKSk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHg1NjIsIHRtcHUxYik7CisKKwkvKiBFbmFibGUgQUZFIGNsb2NrIHNvdXJjZSAqLworCXRtcHUxYiA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgQUZFX1hUQUxfQ1RSTCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgQUZFX1hUQUxfQ1RSTCwgKHRtcHUxYiB8IDB4MDEpKTsKKwkvKiBEZWxheSAxLjVtcyAqLworCW1kZWxheSgyKTsKKwl0bXB1MWIgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIEFGRV9YVEFMX0NUUkwgKyAxKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBBRkVfWFRBTF9DVFJMICsgMSwgKHRtcHUxYiAmIDB4ZmIpKTsKKworCS8qIEVuYWJsZSBBRkUgTWFjcm8gQmxvY2sncyBCYW5kZ2FwICovCisJdG1wdTFiID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBBRkVfTUlTQyk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgQUZFX01JU0MsICh0bXB1MWIgfCBCSVQoMCkpKTsKKwltZGVsYXkoMSk7CisKKwkvKiBFbmFibGUgQUZFIE1iaWFzICovCisJdG1wdTFiID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBBRkVfTUlTQyk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgQUZFX01JU0MsICh0bXB1MWIgfCAweDAyKSk7CisJbWRlbGF5KDEpOworCisJLyogRW5hYmxlIExET0ExNSBibG9jawkqLworCXRtcHUxYiA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgTERPQTE1X0NUUkwpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIExET0ExNV9DVFJMLCAodG1wdTFiIHwgQklUKDApKSk7CisKKwkvKiBTZXQgRGlnaXRhbCBWZGQgdG8gUmV0ZW50aW9uIGlzb2xhdGlvbiBQYXRoLiAqLworCXRtcHUyYiA9IHJ0bF9yZWFkX3dvcmQocnRscHJpdiwgUkVHX1NZU19JU09fQ1RSTCk7CisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVHX1NZU19JU09fQ1RSTCwgKHRtcHUyYiB8IEJJVCgxMSkpKTsKKworCS8qIEZvciB3YXJtIHJlYm9vdCBOSUMgZGlzYXBwZXJhIGJ1Zy4gKi8KKwl0bXB1MmIgPSBydGxfcmVhZF93b3JkKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTik7CisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOLCAodG1wdTJiIHwgQklUKDEzKSkpOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NZU19JU09fQ1RSTCArIDEsIDB4NjgpOworCisJLyogRW5hYmxlIEFGRSBQTEwgTWFjcm8gQmxvY2sgKi8KKwkvKiBXZSBuZWVkIHRvIGRlbGF5IDEwMHUgYmVmb3JlIGVuYWJsaW5nIFBMTC4gKi8KKwl1ZGVsYXkoMjAwKTsKKwl0bXB1MWIgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIEFGRV9QTExfQ1RSTCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgQUZFX1BMTF9DVFJMLCAodG1wdTFiIHwgQklUKDApIHwgQklUKDQpKSk7CisKKwkvKiBmb3IgZGl2aWRlciByZXNldCAgKi8KKwl1ZGVsYXkoMTAwKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBBRkVfUExMX0NUUkwsICh0bXB1MWIgfCBCSVQoMCkgfAorCQkgICAgICAgQklUKDQpIHwgQklUKDYpKSk7CisJdWRlbGF5KDEwKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBBRkVfUExMX0NUUkwsICh0bXB1MWIgfCBCSVQoMCkgfCBCSVQoNCkpKTsKKwl1ZGVsYXkoMTApOworCisJLyogRW5hYmxlIE1BQyA4ME1IWiBjbG9jayAgKi8KKwl0bXB1MWIgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIEFGRV9QTExfQ1RSTCArIDEpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIEFGRV9QTExfQ1RSTCArIDEsICh0bXB1MWIgfCBCSVQoMCkpKTsKKwltZGVsYXkoMSk7CisKKwkvKiBSZWxlYXNlIGlzb2xhdGlvbiBBRkUgUExMICYgTUQgKi8KKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfU1lTX0lTT19DVFJMLCAweEE2KTsKKworCS8qIEVuYWJsZSBNQUMgY2xvY2sgKi8KKwl0bXB1MmIgPSBydGxfcmVhZF93b3JkKHJ0bHByaXYsIFNZU19DTEtSKTsKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBTWVNfQ0xLUiwgKHRtcHUyYiB8IEJJVCgxMikgfCBCSVQoMTEpKSk7CisKKwkvKiBFbmFibGUgQ29yZSBkaWdpdGFsIGFuZCBlbmFibGUgSU9SRUcgUi9XICovCisJdG1wdTJiID0gcnRsX3JlYWRfd29yZChydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4pOworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTiwgKHRtcHUyYiB8IEJJVCgxMSkpKTsKKworCXRtcHUxYiA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOICsgMSk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1NZU19GVU5DX0VOICsgMSwgdG1wdTFiICYgfihCSVQoNykpKTsKKworCS8qIGVuYWJsZSBSRUdfRU4gKi8KKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4sICh0bXB1MmIgfCBCSVQoMTEpIHwgQklUKDE1KSkpOworCisJLyogU3dpdGNoIHRoZSBjb250cm9sIHBhdGguICovCisJdG1wdTJiID0gcnRsX3JlYWRfd29yZChydGxwcml2LCBTWVNfQ0xLUik7CisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgU1lTX0NMS1IsICh0bXB1MmIgJiAofkJJVCgyKSkpKTsKKworCXRtcHUxYiA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgKFNZU19DTEtSICsgMSkpOworCXRtcHUxYiA9ICgodG1wdTFiIHwgQklUKDcpKSAmICh+QklUKDYpKSk7CisJaWYgKCFfcnRsOTJjZV9oYWxzZXRfc3lzY2xrKGh3LCB0bXB1MWIpKQorCQlyZXR1cm47IC8qIFNldCBmYWlsZWQsIHJldHVybiB0byBwcmV2ZW50IGhhbmcuICovCisKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBDTURSLCAweDA3RkMpOworCisJLyogTUggV2UgbXVzdCBlbmFibGUgdGhlIHNlY3Rpb24gb2YgY29kZSB0byBwcmV2ZW50IGxvYWQgSU1FTSBmYWlsLiAqLworCS8qIExvYWQgTUFDIHJlZ2lzdGVyIGZyb20gV01BYyB0ZW1wb3JhcmlseSBXZSBzaW11bGF0ZSBtYWNyZWcuICovCisJLyogdHh0IEhXIHdpbGwgcHJvdmlkZSBNQUMgdHh0IGxhdGVyICAqLworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4NiwgMHgzMCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHg0OSwgMHhmMCk7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCAweDRiLCAweDgxKTsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4YjUsIDB4MjEpOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHhkYywgMHhmZik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHhkZCwgMHhmZik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHhkZSwgMHhmZik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHhkZiwgMHhmZik7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCAweDExYSwgMHgwMCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHgxMWIsIDB4MDApOworCisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIElOSU1DU19TRUwgKyBpLCAweDFiKTsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4MjM2LCAweGZmKTsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4NTAzLCAweDIyKTsKKworCWlmIChwcHNjLT5zdXBwb3J0X2FzcG0gJiYgIXBwc2MtPnN1cHBvcnRfYmFja2Rvb3IpCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4NTYwLCAweDQwKTsKKwllbHNlCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4NTYwLCAweDAwKTsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIERCR19QT1JULCAweDkxKTsKKworCS8qIFNldCBSWCBEZXNjIEFkZHJlc3MgKi8KKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkRRREEsIHJ0bHBjaS0+cnhfcmluZ1tSWF9NUERVX1FVRVVFXS5kbWEpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBSQ0RBLCBydGxwY2ktPnJ4X3JpbmdbUlhfQ01EX1FVRVVFXS5kbWEpOworCisJLyogU2V0IFRYIERlc2MgQWRkcmVzcyAqLworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBUQktEQSwgcnRscGNpLT50eF9yaW5nW0JLX1FVRVVFXS5kbWEpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBUQkVEQSwgcnRscGNpLT50eF9yaW5nW0JFX1FVRVVFXS5kbWEpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBUVklEQSwgcnRscGNpLT50eF9yaW5nW1ZJX1FVRVVFXS5kbWEpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBUVk9EQSwgcnRscGNpLT50eF9yaW5nW1ZPX1FVRVVFXS5kbWEpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBUQkRBLCBydGxwY2ktPnR4X3JpbmdbQkVBQ09OX1FVRVVFXS5kbWEpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBUQ0RBLCBydGxwY2ktPnR4X3JpbmdbVFhDTURfUVVFVUVdLmRtYSk7CisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFRNREEsIHJ0bHBjaS0+dHhfcmluZ1tNR05UX1FVRVVFXS5kbWEpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBUSFBEQSwgcnRscGNpLT50eF9yaW5nW0hJR0hfUVVFVUVdLmRtYSk7CisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIEhEQSwgcnRscGNpLT50eF9yaW5nW0hDQ0FfUVVFVUVdLmRtYSk7CisKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBDTURSLCAweDM3RkMpOworCisJLyogVG8gbWFrZSBzdXJlIHRoYXQgVHhETUEgY2FuIHJlYWR5IHRvIGRvd25sb2FkIEZXLiAqLworCS8qIFdlIHNob3VsZCByZXNldCBUeERNQSBpZiBJTUVNIFJQVCB3YXMgbm90IHJlYWR5LiAqLworCWRvIHsKKwkJdG1wdTFiID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBUQ1IpOworCQlpZiAoKHRtcHUxYiAmIFRYRE1BX0lOSVRfVkFMVUUpID09IFRYRE1BX0lOSVRfVkFMVUUpCisJCQlicmVhazsKKworCQl1ZGVsYXkoNSk7CisJfSB3aGlsZSAocG9sbGluZ2NudC0tKTsKKworCWlmIChwb2xsaW5nY250IDw9IDApIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoIlBvbGxpbmcgVFhETUFfSU5JVF9WQUxVRSAiCisJCQkgInRpbWVvdXQhISBDdXJyZW50IFRDUiglI3gpXG4iLCB0bXB1MWIpKTsKKwkJdG1wdTFiID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBDTURSKTsKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgQ01EUiwgdG1wdTFiICYgKH5UWERNQV9FTikpOworCQl1ZGVsYXkoMik7CisJCS8qIFJlc2V0IFR4RE1BICovCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIENNRFIsIHRtcHUxYiB8IFRYRE1BX0VOKTsKKwl9CisKKwkvKiBBZnRlciBNQUNJTyByZXNldCx3ZSBtdXN0IHJlZnJlc2ggTEVEIHN0YXRlLiAqLworCWlmICgocHBzYy0+cmZvZmZfcmVhc29uID09IFJGX0NIQU5HRV9CWV9JUFMpIHx8CisJICAgKHBwc2MtPnJmb2ZmX3JlYXNvbiA9PSAwKSkgeworCQlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCQlzdHJ1Y3QgcnRsX2xlZCAqcExlZDAgPSAmKHBjaXByaXYtPmxlZGN0bC5zd19sZWQwKTsKKwkJZW51bSByZl9wd3JzdGF0ZSByZnB3cl9zdGF0ZV90b3NldDsKKwkJcmZwd3Jfc3RhdGVfdG9zZXQgPSBfcnRsOTJzZV9yZl9vbm9mZl9kZXRlY3QoaHcpOworCisJCWlmIChyZnB3cl9zdGF0ZV90b3NldCA9PSBFUkZPTikKKwkJCXJ0bDkyc2Vfc3dfbGVkX29uKGh3LCBwTGVkMCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzZV9tYWNjb25maWdfYWZ0ZXJfZndkb3dubG9hZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJdTggaTsKKwl1MTYgdG1wdTJiOworCisJLyogMS4gU3lzdGVtIENvbmZpZ3VyZSBSZWdpc3RlciAoT2Zmc2V0OiAweDAwMDAgLSAweDAwM0YpICovCisKKwkvKiAyLiBDb21tYW5kIENvbnRyb2wgUmVnaXN0ZXIgKE9mZnNldDogMHgwMDQwIC0gMHgwMDRGKSAqLworCS8qIFR1cm4gb24gMHg0MCBDb21tYW5kIHJlZ2lzdGVyICovCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgQ01EUiwgKEJCUlNUTiB8IEJCX0dMQl9SU1ROIHwKKwkJCVNDSEVEVUxFX0VOIHwgTUFDUlhFTiB8IE1BQ1RYRU4gfCBERE1BX0VOIHwgRlcySFdfRU4gfAorCQkJUlhETUFfRU4gfCBUWERNQV9FTiB8IEhDSV9SWERNQV9FTiB8IEhDSV9UWERNQV9FTikpOworCisJLyogU2V0IFRDUiBUWCBETUEgcHJlIDIgRlVMTCBlbmFibGUgYml0CSovCisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFRDUiwgcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgVENSKSB8CisJCQlUWERNQVBSRTJGVUxMKTsKKworCS8qIFNldCBSQ1IJKi8KKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkNSLCBydGxwY2ktPnJlY2VpdmVfY29uZmlnKTsKKworCS8qIDMuIE1BQ0lEIFNldHRpbmcgUmVnaXN0ZXIgKE9mZnNldDogMHgwMDUwIC0gMHgwMDdGKSAqLworCisJLyogNC4gVGltaW5nIENvbnRyb2wgUmVnaXN0ZXIgIChPZmZzZXQ6IDB4MDA4MCAtIDB4MDA5RikgKi8KKwkvKiBTZXQgQ0NLL09GRE0gU0lGUyAqLworCS8qIENDSyBTSUZTIHNoYWxsIGFsd2F5cyBiZSAxMHVzLiAqLworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFNJRlNfQ0NLLCAweDBhMGEpOworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFNJRlNfT0ZETSwgMHgxMDEwKTsKKworCS8qIFNldCBBY2tUaW1lb3V0ICovCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgQUNLX1RJTUVPVVQsIDB4NDApOworCisJLyogQmVhY29uIHJlbGF0ZWQgKi8KKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBCQ05fSU5URVJWQUwsIDEwMCk7CisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgQVRJTVdORCwgMik7CisKKwkvKiA1LiBGSUZPIENvbnRyb2wgUmVnaXN0ZXIgKE9mZnNldDogMHgwMEEwIC0gMHgwMTVGKSAqLworCS8qIDUuMSBJbml0aWFsaXplIE51bWJlciBvZiBSZXNlcnZlZCBQYWdlcyBpbiBGaXJtd2FyZSBRdWV1ZSAqLworCS8qIEZpcm13YXJlIGFsbG9jYXRlIG5vdywgYXNzb2NpYXRlIHdpdGggRlcgaW50ZXJuYWwgc2V0dGluZy4hISEgKi8KKworCS8qIDUuMiBTZXR0aW5nIFRYL1JYIHBhZ2Ugc2l6ZSAwLzEvMi8zLzQ9NjQvMTI4LzI1Ni81MTIvMTAyNCAqLworCS8qIDUuMyBTZXQgZHJpdmVyIGluZm8sIHdlIG9ubHkgYWNjZXB0IFBIWSBzdGF0dXMgbm93LiAqLworCS8qIDUuNCBTZXQgUlhETUEgYXJiaXRyYXRpb24gdG8gY29udHJvbCBSWERNQS9NQUMvRlcgUi9XIGZvciBSWEZJRk8gICovCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUlhETUEsIHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUlhETUEpIHwgQklUKDYpKTsKKworCS8qIDYuIEFkYXB0aXZlIENvbnRyb2wgUmVnaXN0ZXIgIChPZmZzZXQ6IDB4MDE2MCAtIDB4MDFDRikgKi8KKwkvKiBTZXQgUlJTUiB0byBhbGwgbGVnYWN5IHJhdGUgYW5kIEhUIHJhdGUKKwkgKiBDQ0sgcmF0ZSBpcyBzdXBwb3J0ZWQgYnkgZGVmYXVsdC4KKwkgKiBDQ0sgcmF0ZSB3aWxsIGJlIGZpbHRlcmVkIG91dCBvbmx5IHdoZW4gYXNzb2NpYXRlZAorCSAqIEFQIGRvZXMgbm90IHN1cHBvcnQgaXQuCisJICogT25seSBlbmFibGUgQUNLIHJhdGUgdG8gT0ZETSAyNE0KKwkgKiBEaXNhYmxlIFJSU1IgZm9yIENDSyByYXRlIGluIEEtQ3V0CSovCisKKwlpZiAocnRsaGFsLT52ZXJzaW9uID09IFZFUlNJT05fODE5MlNfQUNVVCkKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUlJTUiwgMHhmMCk7CisJZWxzZSBpZiAocnRsaGFsLT52ZXJzaW9uID09IFZFUlNJT05fODE5MlNfQkNVVCkKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUlJTUiwgMHhmZik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUlJTUiArIDEsIDB4MDEpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJSU1IgKyAyLCAweDAwKTsKKworCS8qIEEtQ3V0IElDIGRvIG5vdCBzdXBwb3J0IENDSyByYXRlLiBXZSBmb3JiaWQgQVJGUiB0byAqLworCS8qIGZhbGxiYWNrIHRvIENDSyByYXRlICovCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQkvKkRpc2FibGUgUlJTUiBmb3IgQ0NLIHJhdGUgaW4gQS1DdXQgKi8KKwkJaWYgKHJ0bGhhbC0+dmVyc2lvbiA9PSBWRVJTSU9OXzgxOTJTX0FDVVQpCisJCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgQVJGUjAgKyBpICogNCwgMHgxZjBmZjBmMCk7CisJfQorCisJLyogRGlmZmVyZW50IHJhdGUgdXNlIGRpZmZlcmVudCBBTVBEVSBzaXplICovCisJLyogTUNTMzIvIE1DUzE1X1NHIHVzZSBtYXggQU1QRFUgc2l6ZSAxNSoyPTMwSyAqLworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIEFHR0xFTl9MTVRfSCwgMHgwZik7CisJLyogTUNTMC8xLzIvMyB1c2UgbWF4IEFNUERVIHNpemUgNCoyPThLICovCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgQUdHTEVOX0xNVF9MLCAweDc0NDIpOworCS8qIE1DUzQvNSB1c2UgbWF4IEFNUERVIHNpemUgOCoyPTE2SyA2LzcgdXNlIDEwKjI9MjBLICovCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgQUdHTEVOX0xNVF9MICsgMiwgMHhkZGQ3KTsKKwkvKiBNQ1M4LzkgdXNlIG1heCBBTVBEVSBzaXplIDgqMj0xNksgMTAvMTEgdXNlIDEwKjI9MjBLICovCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgQUdHTEVOX0xNVF9MICsgNCwgMHhkNzcyKTsKKwkvKiBNQ1MxMi8xMy8xNC8xNSB1c2UgbWF4IEFNUERVIHNpemUgMTUqMj0zMEsgKi8KKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBBR0dMRU5fTE1UX0wgKyA2LCAweGZmZmQpOworCisJLyogU2V0IERhdGEgLyBSZXNwb25zZSBhdXRvIHJhdGUgZmFsbGFjayByZXRyeSBjb3VudCAqLworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBEQVJGUkMsIDB4MDQwMTAwMDApOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBEQVJGUkMgKyA0LCAweDA5MDcwNjA1KTsKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkFSRlJDLCAweDA0MDEwMDAwKTsKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgUkFSRlJDICsgNCwgMHgwOTA3MDYwNSk7CisKKwkvKiA3LiBFRENBIFNldHRpbmcgUmVnaXN0ZXIgKE9mZnNldDogMHgwMUQwIC0gMHgwMUZGKSAqLworCS8qIFNldCBhbGwgcmF0ZSB0byBzdXBwb3J0IFNHICovCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgU0dfUkFURSwgMHhGRkZGKTsKKworCS8qIDguIFdNQUMsIEJBLCBhbmQgQ0NYIHJlbGF0ZWQgUmVnaXN0ZXIgKE9mZnNldDogMHgwMjAwIC0gMHgwMjNGKSAqLworCS8qIFNldCBOQVYgcHJvdGVjdGlvbiBsZW5ndGggKi8KKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBOQVZfUFJPVF9MRU4sIDB4MDA4MCk7CisJLyogQ0YtRU5EIFRocmVzaG9sZCAqLworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIENGRU5EX1RILCAweEZGKTsKKwkvKiBTZXQgQU1QRFUgbWluaW11bSBzcGFjZSAqLworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIEFNUERVX01JTl9TUEFDRSwgMHgwNyk7CisJLyogU2V0IFRYT1Agc3RhbGwgY29udHJvbCBmb3Igc2V2ZXJhbCBxdWV1ZS9ISS9CQ04vTUdULyAqLworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFRYT1BfU1RBTExfQ1RSTCwgMHgwMCk7CisKKwkvKiA5LiBTZWN1cml0eSBDb250cm9sIFJlZ2lzdGVyIChPZmZzZXQ6IDB4MDI0MCAtIDB4MDI1RikgKi8KKwkvKiAxMC4gUG93ZXIgU2F2ZSBDb250cm9sIFJlZ2lzdGVyIChPZmZzZXQ6IDB4MDI2MCAtIDB4MDJERikgKi8KKwkvKiAxMS4gR2VuZXJhbCBQdXJwb3NlIFJlZ2lzdGVyIChPZmZzZXQ6IDB4MDJFMCAtIDB4MDJGRikgKi8KKwkvKiAxMi4gSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIChPZmZzZXQ6IDB4MDMwMCAtIDB4MDMwRikgKi8KKwkvKiAxMy4gVGVzdCBNb2RlIGFuZCBEZWJ1ZyBDb250cm9sIFJlZ2lzdGVyIChPZmZzZXQ6IDB4MDMxMCAtIDB4MDM0RikgKi8KKworCS8qIDE0LiBTZXQgZHJpdmVyIGluZm8sIHdlIG9ubHkgYWNjZXB0IFBIWSBzdGF0dXMgbm93LiAqLworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJYRFJWSU5GT19TWiwgNCk7CisKKwkvKiAxNS4gRm9yIEVFUFJPTSBSL1cgV29ya2Fyb3VuZCAqLworCS8qIDE2LiBGb3IgRUZVU0UgdG8gc2hhcmUgUkVHX1NZU19GVU5DX0VOIHdpdGggRUVQUk9NISEhICovCisJdG1wdTJiID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4pOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTiwgdG1wdTJiIHwgQklUKDEzKSk7CisJdG1wdTJiID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfU1lTX0lTT19DVFJMKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfU1lTX0lTT19DVFJMLCB0bXB1MmIgJiAofkJJVCg4KSkpOworCisJLyogMTcuIEZvciBFRlVTRSAqLworCS8qIFdlIG1heSBSL1cgRUZVU0UgaW4gRUVQUk9NIG1vZGUgKi8KKwlpZiAocnRsZWZ1c2UtPmVwcm9tdHlwZSA9PSBFRVBST01fQk9PVF9FRlVTRSkgeworCQl1OAl0ZW1wdmFsOworCisJCXRlbXB2YWwgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19TWVNfSVNPX0NUUkwgKyAxKTsKKwkJdGVtcHZhbCAmPSAweEZFOworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfU1lTX0lTT19DVFJMICsgMSwgdGVtcHZhbCk7CisKKwkJLyogQ2hhbmdlIFByb2dyYW0gdGltaW5nICovCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19FRlVTRV9DVFJMICsgMywgMHg3Mik7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0RNRVNHLCAoIkVGVVNFIENPTkZJRyBPS1xuIikpOworCX0KKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0RNRVNHLCAoIk9LXG4iKSk7CisKK30KKworc3RhdGljIHZvaWQgX3J0bDkyc2VfaHdfY29uZmlndXJlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKworCXU4IHJlZ19id19vcG1vZGUgPSAwOworCXUzMiByZWdfcmF0ciA9IDAsIHJlZ19ycnNyID0gMDsKKwl1OCByZWd0bXAgPSAwOworCisJcmVnX2J3X29wbW9kZSA9IEJXX09QTU9ERV8yME1IWjsKKwlyZWdfcmF0ciA9IFJBVEVfQUxMX0NDSyB8IFJBVEVfQUxMX09GRE1fQUcgfCBSQVRFX0FMTF9PRkRNXzFTUyB8CisJCQkJUkFURV9BTExfT0ZETV8yU1M7CisJcmVnX3Jyc3IgPSBSQVRFX0FMTF9DQ0sgfCBSQVRFX0FMTF9PRkRNX0FHOworCisJcmVndG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBJTklSVFNNQ1NfU0VMKTsKKwlyZWdfcnJzciA9ICgocmVnX3Jyc3IgJiAweDAwMGZmZmZmKSA8PCA4KSB8IHJlZ3RtcDsKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgSU5JUlRTTUNTX1NFTCwgcmVnX3Jyc3IpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIEJXX09QTU9ERSwgcmVnX2J3X29wbW9kZSk7CisKKwkvKiBTZXQgUmV0cnkgTGltaXQgaGVyZSAqLworCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfUkVUUllfTElNSVQsCisJCQkodTggKikoJnJ0bHBjaS0+c2hvcnRyZXRyeV9saW1pdCkpOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgTUxULCAweDhmKTsKKworCS8qIEZvciBNaW4gU3BhY2luZyBjb25maWd1cmF0aW9uLiAqLworCXN3aXRjaCAocnRscGh5LT5yZl90eXBlKSB7CisJY2FzZSBSRl8xVDJSOgorCWNhc2UgUkZfMVQxUjoKKwkJcnRsaGFsLT5taW5zcGFjZV9jZmcgPSAoTUFYX01TU19ERU5TSVRZXzFUIDw8IDMpOworCQlicmVhazsKKwljYXNlIFJGXzJUMlI6CisJY2FzZSBSRl8yVDJSX0dSRUVOOgorCQlydGxoYWwtPm1pbnNwYWNlX2NmZyA9IChNQVhfTVNTX0RFTlNJVFlfMlQgPDwgMyk7CisJCWJyZWFrOworCX0KKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBBTVBEVV9NSU5fU1BBQ0UsIHJ0bGhhbC0+bWluc3BhY2VfY2ZnKTsKK30KKworaW50IHJ0bDkyc2VfaHdfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKwl1OCB0bXBfYnl0ZSA9IDA7CisKKwlib29sIHJ0c3RhdHVzID0gdHJ1ZTsKKwl1OCB0bXBfdTFiOworCWludCBlcnIgPSBmYWxzZTsKKwl1OCBpOworCWludCB3ZGNhcHJhX2FkZFtdID0geworCQlFRENBUEFSQV9CRSwgRURDQVBBUkFfQkssCisJCUVEQ0FQQVJBX1ZJLCBFRENBUEFSQV9WT307CisJdTggc2Vjcl92YWx1ZSA9IDB4MDsKKworCXJ0bHBjaS0+YmVpbmdfaW5pdF9hZGFwdGVyID0gdHJ1ZTsKKworCXJ0bHByaXYtPmludGZfb3BzLT5kaXNhYmxlX2FzcG0oaHcpOworCisJLyogMS4gTUFDIEluaXRpYWxpemUgKi8KKwkvKiBCZWZvcmUgRlcgZG93bmxvYWQsIHdlIGhhdmUgdG8gc2V0IHNvbWUgTUFDIHJlZ2lzdGVyICovCisJX3J0bDkyc2VfbWFjY29uZmlnX2JlZm9yZV9md2Rvd25sb2FkKGh3KTsKKworCXJ0bGhhbC0+dmVyc2lvbiA9IChlbnVtIHZlcnNpb25fODE5MnMpKChydGxfcmVhZF9kd29yZChydGxwcml2LAorCQkJUE1DX0ZTTSkgPj4gMTYpICYgMHhGKTsKKworCXJ0bDgxOTJzZV9ncGlvYml0M19jZmdfaW5wdXRtb2RlKGh3KTsKKworCS8qIDIuIGRvd25sb2FkIGZpcm13YXJlICovCisJcnRzdGF0dXMgPSBydGw5MnNfZG93bmxvYWRfZncoaHcpOworCWlmICghcnRzdGF0dXMpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19XQVJOSU5HLAorCQkJICgiRmFpbGVkIHRvIGRvd25sb2FkIEZXLiAiCisJCQkgIkluaXQgSFcgd2l0aG91dCBGVyBub3cuLiwgUGxlYXNlIGNvcHkgRlcgaW50byIKKwkJCSAiL2xpYi9maXJtd2FyZS9ydGx3aWZpXG4iKSk7CisJCXJ0bGhhbC0+ZndfcmVhZHkgPSBmYWxzZTsKKwl9IGVsc2UgeworCQlydGxoYWwtPmZ3X3JlYWR5ID0gdHJ1ZTsKKwl9CisKKwkvKiBBZnRlciBGVyBkb3dubG9hZCwgd2UgaGF2ZSB0byByZXNldCBNQUMgcmVnaXN0ZXIgKi8KKwlfcnRsOTJzZV9tYWNjb25maWdfYWZ0ZXJfZndkb3dubG9hZChodyk7CisKKwkvKlJldHJpZXZlIGRlZmF1bHQgRlcgQ21kIElPIG1hcC4gKi8KKwlydGxoYWwtPmZ3Y21kX2lvbWFwID0JcnRsX3JlYWRfd29yZChydGxwcml2LCBMQlVTX01PTl9BRERSKTsKKwlydGxoYWwtPmZ3Y21kX2lvcGFyYW0gPSBydGxfcmVhZF9kd29yZChydGxwcml2LCBMQlVTX0FERFJfTUFTSyk7CisKKwkvKiAzLiBJbml0aWFsaXplIE1BQy9QSFkgQ29uZmlnIGJ5IE1BQ1BIWV9yZWcudHh0ICovCisJaWYgKHJ0bDkyc19waHlfbWFjX2NvbmZpZyhodykgIT0gdHJ1ZSkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLCAoIk1BQyBDb25maWcgZmFpbGVkXG4iKSk7CisJCXJldHVybiBydHN0YXR1czsKKwl9CisKKwkvKiBNYWtlIHN1cmUgQkIvUkYgd3JpdGUgT0suIFdlIHNob3VsZCBwcmV2ZW50IGVudGVyIElQUy4gcmFkaW8gb2ZmLiAqLworCS8qIFdlIG11c3Qgc2V0IGZsYWcgYXZvaWQgQkIvUkYgY29uZmlnIHBlcmlvZCBsYXRlciEhICovCisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIENNRFIsIDB4MzdGQyk7CisKKwkvKiA0LiBJbml0aWFsaXplIEJCIEFmdGVyIE1BQyBDb25maWcgUEhZX3JlZy50eHQsIEFHQ19UYWIudHh0ICovCisJaWYgKHJ0bDkyc19waHlfYmJfY29uZmlnKGh3KSAhPSB0cnVlKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0VNRVJHLCAoIkJCIENvbmZpZyBmYWlsZWRcbiIpKTsKKwkJcmV0dXJuIHJ0c3RhdHVzOworCX0KKworCS8qIDUuIEluaXRpYWlsemUgUkYgUkFJT19BLnR4dCBSRiBSQUlPX0IudHh0ICovCisJLyogQmVmb3JlIGluaXRhbGl6aW5nIFJGLiBXZSBjYW4gbm90IHVzZSBGVyB0byBkbyBSRi1SL1cuICovCisKKwlydGxwaHktPnJmX21vZGUgPSBSRl9PUF9CWV9TV18zV0lSRTsKKworCS8qIFJGIFBvd2VyIFNhdmUgKi8KKyNpZiAwCisJLyogSC9XIG9yIFMvVyBSRiBPRkYgYmVmb3JlIHNsZWVwLiAqLworCWlmIChydGxwcml2LT5wc2MucmZvZmZfcmVhc29uID4gUkZfQ0hBTkdFX0JZX1BTKSB7CisJCXUzMiByZm9mZnJlYXNvbiA9IHJ0bHByaXYtPnBzYy5yZm9mZl9yZWFzb247CisKKwkJcnRscHJpdi0+cHNjLnJmb2ZmX3JlYXNvbiA9IFJGX0NIQU5HRV9CWV9JTklUOworCQlydGxwcml2LT5wc2MucmZwd3Jfc3RhdGUgPSBFUkZPTjsKKwkJcnRsX3BzX3NldF9yZl9zdGF0ZShodywgRVJGT0ZGLCByZm9mZnJlYXNvbiwgdHJ1ZSk7CisJfSBlbHNlIHsKKwkJLyogZ3BpbyByYWRpbyBvbi9vZmYgaXMgb3V0IG9mIGFkYXB0ZXIgc3RhcnQgKi8KKwkJaWYgKHJ0bHByaXYtPnBzYy5od3JhZGlvb2ZmID09IGZhbHNlKSB7CisJCQlydGxwcml2LT5wc2MucmZwd3Jfc3RhdGUgPSBFUkZPTjsKKwkJCXJ0bHByaXYtPnBzYy5yZm9mZl9yZWFzb24gPSAwOworCQl9CisJfQorI2VuZGlmCisKKwkvKiBCZWZvcmUgUkYtUi9XIHdlIG11c3QgZXhlY3V0ZSB0aGUgSU8gZnJvbSBTY290dCdzIHN1Z2dlc3Rpb24uICovCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgQUZFX1hUQUxfQ1RSTCArIDEsIDB4REIpOworCWlmIChydGxoYWwtPnZlcnNpb24gPT0gVkVSU0lPTl84MTkyU19BQ1VUKQorCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBTUFMxX0NUUkwgKyAzLCAweDA3KTsKKwllbHNlCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJGX0NUUkwsIDB4MDcpOworCisJaWYgKHJ0bDkyc19waHlfcmZfY29uZmlnKGh3KSAhPSB0cnVlKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0RNRVNHLCAoIlJGIENvbmZpZyBmYWlsZWRcbiIpKTsKKwkJcmV0dXJuIHJ0c3RhdHVzOworCX0KKworCS8qIEFmdGVyIHJlYWQgcHJlZGVmaW5lZCBUWFQsIHdlIG11c3Qgc2V0IEJCL01BQy9SRgorCSAqIHJlZ2lzdGVyIGFzIG91ciByZXF1aXJlbWVudCAqLworCisJcnRscGh5LT5yZnJlZ19jaG5sdmFsWzBdID0gcnRsOTJzX3BoeV9xdWVyeV9yZl9yZWcoaHcsCisJCQkJCQkJICAgKGVudW0gcmFkaW9fcGF0aCkwLAorCQkJCQkJCSAgIFJGX0NITkxCVywKKwkJCQkJCQkgICBSRlJFR19PRkZTRVRfTUFTSyk7CisJcnRscGh5LT5yZnJlZ19jaG5sdmFsWzFdID0gcnRsOTJzX3BoeV9xdWVyeV9yZl9yZWcoaHcsCisJCQkJCQkJICAgKGVudW0gcmFkaW9fcGF0aCkxLAorCQkJCQkJCSAgIFJGX0NITkxCVywKKwkJCQkJCQkgICBSRlJFR19PRkZTRVRfTUFTSyk7CisKKwkvKi0tLS0gU2V0IENDSyBhbmQgT0ZETSBCbG9jayAiT04iLS0tLSovCisJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX1JGTU9ELCBCQ0NLRU4sIDB4MSk7CisJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX1JGTU9ELCBCT0ZETUVOLCAweDEpOworCisJLyozIFNldCBIYXJkd2FyZShEbyBub3RoaW5nIG5vdykgKi8KKwlfcnRsOTJzZV9od19jb25maWd1cmUoaHcpOworCisJLyogUmVhZCBFRVBST00gVFggcG93ZXIgaW5kZXggYW5kIFBIWV9SRUdfUEcudHh0IHRvIGNhcHR1cmUgY29ycmVjdCAqLworCS8qIFRYIHBvd2VyIGluZGV4IGZvciBkaWZmZXJlbnQgcmF0ZSBzZXQuICovCisJLyogR2V0IG9yaWdpbmFsIGh3IHJlZyB2YWx1ZXMgKi8KKwlydGw5MnNfcGh5X2dldF9od19yZWdfb3JpZ2luYWx2YWx1ZShodyk7CisJLyogV3JpdGUgY29ycmVjdCB0eCBwb3dlciBpbmRleCAqLworCXJ0bDkyc19waHlfc2V0X3R4cG93ZXIoaHcsIHJ0bHBoeS0+Y3VycmVudF9jaGFubmVsKTsKKworCS8qIFdlIG11c3Qgc2V0IE1BQyBhZGRyZXNzIGFmdGVyIGZpcm13YXJlIGRvd25sb2FkLiAqLworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIE1BQ0lEUjAgKyBpLCBydGxlZnVzZS0+ZGV2X2FkZHJbaV0pOworCisJLyogRUVQUk9NIFIvVyB3b3JrYXJvdW5kICovCisJdG1wX3UxYiA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgTUFDX1BJTk1VWF9DRkcpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIE1BQ19QSU5NVVhfQ0ZHLCB0bXBfdTFiICYgKH5CSVQoMykpKTsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4NGQsIDB4MCk7CisKKwlpZiAoaGFsX2dldF9maXJtd2FyZXZlcnNpb24ocnRscHJpdikgPj0gMHg0OSkgeworCQl0bXBfYnl0ZSA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgRldfUlNWRF9QR19DUlRMKSAmICh+QklUKDQpKTsKKwkJdG1wX2J5dGUgPSB0bXBfYnl0ZSB8IEJJVCg1KTsKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgRldfUlNWRF9QR19DUlRMLCB0bXBfYnl0ZSk7CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBUWERFU0NfTVNLLCAweEZGRkZDRkZGKTsKKwl9CisKKwkvKiBXZSBlbmFibGUgaGlnaCBwb3dlciBhbmQgUkEgcmVsYXRlZCBtZWNoYW5pc20gYWZ0ZXIgTklDCisJICogaW5pdGlhbGl6ZWQuICovCisJcnRsOTJzX3BoeV9zZXRfZndfY21kKGh3LCBGV19DTURfUkFfSU5JVCk7CisKKwkvKiBBZGQgdG8gcHJldmVudCBBU1BNIGJ1Zy4gKi8KKwkvKiBBbHdheXMgZW5hYmxlIGhzdCBhbmQgTklDIGNsb2NrIHJlcXVlc3QuICovCisJcnRsOTJzX3BoeV9zd2l0Y2hfZXBoeV9wYXJhbWV0ZXIoaHcpOworCisJLyogU2VjdXJpdHkgcmVsYXRlZAorCSAqIDEuIENsZWFyIGFsbCBIL1cga2V5cy4KKwkgKiAyLiBFbmFibGUgSC9XIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4gKi8KKwlydGxfY2FtX3Jlc2V0X2FsbF9lbnRyeShodyk7CisJc2Vjcl92YWx1ZSB8PSBTQ1JfVFhFTkNFTkFCTEU7CisJc2Vjcl92YWx1ZSB8PSBTQ1JfUlhFTkNFTkFCTEU7CisJc2Vjcl92YWx1ZSB8PSBTQ1JfTk9TS01DOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TRUNSLCBzZWNyX3ZhbHVlKTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCB3ZGNhcHJhX2FkZFtpXSwgMHg1ZTQzMjIpOworCisJaWYgKHJ0bHBoeS0+cmZfdHlwZSA9PSBSRl8xVDJSKSB7CisJCWJvb2wgbXJjMnNldCA9IHRydWU7CisJCS8qIFR1cm4gb24gQi1QYXRoICovCisJCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfTVJDLCAodTggKikmbXJjMnNldCk7CisJfQorCisJcnRscHJpdi0+Y2ZnLT5vcHMtPmxlZF9jb250cm9sKGh3LCBMRURfQ1RMX1BPV0VSX09OKTsKKwlydGw5MnNfZG1faW5pdChodyk7CisJcnRscGNpLT5iZWluZ19pbml0X2FkYXB0ZXIgPSBmYWxzZTsKKworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgcnRsOTJzZV9zZXRfbWFjX2FkZHIoc3RydWN0IHJ0bF9pbyAqaW8sIGNvbnN0IHU4ICogYWRkcikKK3sKK30KKwordm9pZCBydGw5MnNlX3NldF9jaGVja19ic3NpZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBjaGVja19ic3NpZCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKwl1MzIgcmVnX3JjciA9IHJ0bHBjaS0+cmVjZWl2ZV9jb25maWc7CisKKwlpZiAocnRscHJpdi0+cHNjLnJmcHdyX3N0YXRlICE9IEVSRk9OKQorCQlyZXR1cm47CisKKwlpZiAoY2hlY2tfYnNzaWQgPT0gdHJ1ZSkgeworCQlyZWdfcmNyIHw9IChSQ1JfQ0JTU0lEKTsKKwkJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9SQ1IsICh1OCAqKSgmcmVnX3JjcikpOworCX0gZWxzZSBpZiAoY2hlY2tfYnNzaWQgPT0gZmFsc2UpIHsKKwkJcmVnX3JjciAmPSAoflJDUl9DQlNTSUQpOworCQlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX1JDUiwgKHU4ICopKCZyZWdfcmNyKSk7CisJfQorCit9CisKK3N0YXRpYyBpbnQgX3J0bDkyc2Vfc2V0X21lZGlhX3N0YXR1cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTggYnRfbXNyID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBNU1IpOworCWVudW0gbGVkX2N0bF9tb2RlIGxlZGFjdGlvbiA9IExFRF9DVExfTk9fTElOSzsKKwl1MzIgdGVtcDsKKwlidF9tc3IgJj0gfk1TUl9MSU5LX01BU0s7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOgorCQlidF9tc3IgfD0gKE1TUl9MSU5LX05PTkUgPDwgTVNSX0xJTktfU0hJRlQpOworCQlsZWRhY3Rpb24gPSBMRURfQ1RMX0xJTks7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX1RSQUNFLAorCQkJICgiU2V0IE5ldHdvcmsgdHlwZSB0byBOTyBMSU5LIVxuIikpOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQlidF9tc3IgfD0gKE1TUl9MSU5LX0FESE9DIDw8IE1TUl9MSU5LX1NISUZUKTsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfVFJBQ0UsCisJCQkgKCJTZXQgTmV0d29yayB0eXBlIHRvIEFkIEhvYyFcbiIpKTsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlidF9tc3IgfD0gKE1TUl9MSU5LX01BTkFHRUQgPDwgTVNSX0xJTktfU0hJRlQpOworCQlsZWRhY3Rpb24gPSBMRURfQ1RMX0xJTks7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX1RSQUNFLAorCQkJICgiU2V0IE5ldHdvcmsgdHlwZSB0byBTVEEhXG4iKSk7CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJCWJ0X21zciB8PSAoTVNSX0xJTktfTUFTVEVSIDw8IE1TUl9MSU5LX1NISUZUKTsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfVFJBQ0UsCisJCQkgKCJTZXQgTmV0d29yayB0eXBlIHRvIEFQIVxuIikpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgiTmV0d29yayB0eXBlICVkIG5vdCBzdXBwb3J0IVxuIiwgdHlwZSkpOworCQlyZXR1cm4gMTsKKwkJYnJlYWs7CisKKwl9CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCAoTVNSKSwgYnRfbXNyKTsKKworCXRlbXAgPSBydGxfcmVhZF9kd29yZChydGxwcml2LCBUQ1IpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBUQ1IsIHRlbXAgJiAofkJJVCg4KSkpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBUQ1IsIHRlbXAgfCBCSVQoOCkpOworCisKKwlyZXR1cm4gMDsKK30KKworLyogSFdfVkFSX01FRElBX1NUQVRVUyAmIEhXX1ZBUl9DRUNIS19CU1NJRCAqLworaW50IHJ0bDkyc2Vfc2V0X25ldHdvcmtfdHlwZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCWlmIChfcnRsOTJzZV9zZXRfbWVkaWFfc3RhdHVzKGh3LCB0eXBlKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKHJ0bHByaXYtPm1hYzgwMjExLmxpbmtfc3RhdGUgPT0gTUFDODAyMTFfTElOS0VEKSB7CisJCWlmICh0eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKQorCQkJcnRsOTJzZV9zZXRfY2hlY2tfYnNzaWQoaHcsIHRydWUpOworCX0gZWxzZSB7CisJCXJ0bDkyc2Vfc2V0X2NoZWNrX2Jzc2lkKGh3LCBmYWxzZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIGRvbid0IHNldCBSRUdfRURDQV9CRV9QQVJBTSBoZXJlIGJlY2F1c2UgbWFjODAyMTEgd2lsbCBzZW5kIHBrdCB3aGVuIHNjYW4gKi8KK3ZvaWQgcnRsOTJzZV9zZXRfcW9zKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgYWNpKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlydGw5MnNfZG1faW5pdF9lZGNhX3R1cmJvKGh3KTsKKworCXN3aXRjaCAoYWNpKSB7CisJY2FzZSBBQzFfQks6CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBFRENBUEFSQV9CSywgMHhhNDRmKTsKKwkJYnJlYWs7CisJY2FzZSBBQzBfQkU6CisJCS8qIHJ0bF93cml0ZV9kd29yZChydGxwcml2LCBFRENBUEFSQV9CRSwgdTRiX2FjX3BhcmFtKTsgKi8KKwkJYnJlYWs7CisJY2FzZSBBQzJfVkk6CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBFRENBUEFSQV9WSSwgMHg1ZTQzMjIpOworCQlicmVhazsKKwljYXNlIEFDM19WTzoKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIEVEQ0FQQVJBX1ZPLCAweDJmMzIyMik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVJUX0FTU0VSVChmYWxzZSwgKCJpbnZhbGlkIGFjaTogJWQgIVxuIiwgYWNpKSk7CisJCWJyZWFrOworCX0KK30KKwordm9pZCBydGw5MnNlX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgSU5UQV9NQVNLLCBydGxwY2ktPmlycV9tYXNrWzBdKTsKKwkvKiBTdXBwb3J0IEJpdCAzMi0zNyhBc3NpZ24gYXMgQml0IDAtNSkgaW50ZXJydXB0IHNldHRpbmcgbm93ICovCisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIElOVEFfTUFTSyArIDQsIHJ0bHBjaS0+aXJxX21hc2tbMV0gJiAweDNGKTsKKworCXJ0bHBjaS0+aXJxX2VuYWJsZWQgPSB0cnVlOworfQorCit2b2lkIHJ0bDkyc2VfZGlzYWJsZV9pbnRlcnJ1cHQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgSU5UQV9NQVNLLCAwKTsKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgSU5UQV9NQVNLICsgNCwgMCk7CisKKwlydGxwY2ktPmlycV9lbmFibGVkID0gZmFsc2U7Cit9CisKKworc3RhdGljIHU4IF9ydGw5MnNfc2V0X3N5c2NsayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggZGF0YSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTggd2FpdGNudCA9IDEwMDsKKwlib29sIHJlc3VsdCA9IGZhbHNlOworCXU4IHRtcDsKKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFNZU19DTEtSICsgMSwgZGF0YSk7CisKKwkvKiBXYWl0IHRoZSBNQUMgc3luY2hyb25pemVkLiAqLworCXVkZWxheSg0MDApOworCisJLyogQ2hlY2sgaWYgaXQgaXMgc2V0IHJlYWR5LiAqLworCXRtcCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgU1lTX0NMS1IgKyAxKTsKKwlyZXN1bHQgPSAoKHRtcCAmIEJJVCg3KSkgPT0gKGRhdGEgJiBCSVQoNykpKTsKKworCWlmICgoZGF0YSAmIChCSVQoNikgfCBCSVQoNykpKSA9PSBmYWxzZSkgeworCQl3YWl0Y250ID0gMTAwOworCQl0bXAgPSAwOworCisJCXdoaWxlICgxKSB7CisJCQl3YWl0Y250LS07CisJCQl0bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFNZU19DTEtSICsgMSk7CisKKwkJCWlmICgodG1wICYgQklUKDYpKSkKKwkJCQlicmVhazsKKworCQkJcHJpbnRrKEtFUk5fRVJSICJ3YWl0IGZvciBCSVQoNikgcmV0dXJuIHZhbHVlICV4XG4iLAorCQkJICAgICAgIHRtcCk7CisKKwkJCWlmICh3YWl0Y250ID09IDApCisJCQkJYnJlYWs7CisJCQl1ZGVsYXkoMTApOworCQl9CisKKwkJaWYgKHdhaXRjbnQgPT0gMCkKKwkJCXJlc3VsdCA9IGZhbHNlOworCQllbHNlCisJCQlyZXN1bHQgPSB0cnVlOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MnNfcGh5X3NldF9yZmhhbHQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisJdTggdTFidG1wOworCisJaWYgKHJ0bGhhbC0+ZHJpdmVyX2dvaW5nMnVubG9hZCkKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHg1NjAsIDB4MCk7CisKKwkvKiBQb3dlciBzYXZlIGZvciBCQi9SRiAqLworCXUxYnRtcCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgTERPVjEyRF9DVFJMKTsKKwl1MWJ0bXAgfD0gQklUKDApOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIExET1YxMkRfQ1RSTCwgdTFidG1wKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBTUFMxX0NUUkwsIDB4MCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgVFhQQVVTRSwgMHhGRik7CisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgQ01EUiwgMHg1N0ZDKTsKKwl1ZGVsYXkoMTAwKTsKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBDTURSLCAweDc3RkMpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFBIWV9DQ0EsIDB4MCk7CisJdWRlbGF5KDEwKTsKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBDTURSLCAweDM3RkMpOworCXVkZWxheSgxMCk7CisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgQ01EUiwgMHg3N0ZDKTsKKwl1ZGVsYXkoMTApOworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIENNRFIsIDB4NTdGQyk7CisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgQ01EUiwgMHgwMDAwKTsKKworCWlmIChydGxoYWwtPmRyaXZlcl9nb2luZzJ1bmxvYWQpIHsKKwkJdTFidG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCAoUkVHX1NZU19GVU5DX0VOICsgMSkpOworCQl1MWJ0bXAgJj0gfihCSVQoMCkpOworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4gKyAxLCB1MWJ0bXApOworCX0KKworCXUxYnRtcCA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgKFNZU19DTEtSICsgMSkpOworCisJLyogQWRkIGRlc2NyaXB0aW9uLiBBZnRlciBzd2l0Y2ggY29udHJvbCBwYXRoLiByZWdpc3RlcgorCSAqIGFmdGVyIHBhZ2UxIHdpbGwgYmUgaW52aXNpYmxlLiBXZSBjYW4gbm90IGRvIGFueSBJTworCSAqIGZvciByZWdpc3Rlcj4weDQwLiBBZnRlciByZXN1bWUmTUFDSU8gcmVzZXQsIHdlIG5lZWQKKwkgKiB0byByZW1lbWJlciBwcmV2aW91cyByZWcgY29udGVudC4gKi8KKwlpZiAodTFidG1wICYgQklUKDcpKSB7CisJCXUxYnRtcCAmPSB+KEJJVCg2KSB8IEJJVCg3KSk7CisJCWlmICghX3J0bDkyc19zZXRfc3lzY2xrKGh3LCB1MWJ0bXApKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIlN3aXRjaCBjdHJsIHBhdGggZmFpbFxuIik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKiBQb3dlciBzYXZlIGZvciBNQUMgKi8KKwlpZiAocHBzYy0+cmZvZmZfcmVhc29uID09IFJGX0NIQU5HRV9CWV9JUFMgICYmCisJCSFydGxoYWwtPmRyaXZlcl9nb2luZzJ1bmxvYWQpIHsKKwkJLyogZW5hYmxlIExFRCBmdW5jdGlvbiAqLworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCAweDAzLCAweEY5KTsKKwkvKiBTVy9IVyByYWRpbyBvZmYgb3IgaGFsdCBhZGFwdGVyISEgRm9yIGV4YW1wbGUgUzMvUzQgKi8KKwl9IGVsc2UgeworCQkvKiBMRUQgZnVuY3Rpb24gZGlzYWJsZS4gUG93ZXIgcmFuZ2UgaXMgYWJvdXQgOG1BIG5vdy4gKi8KKwkJLyogaWYgd3JpdGUgMHhGMSBkaXNjb25uZXRfcGNpIHBvd2VyCisJCSAqCSBpZmNvbmZpZyB3bGFuMCBkb3duIHBvd2VyIGFyZSBib3RoIGhpZ2ggMzU6NzAgKi8KKwkJLyogaWYgd3JpdGUgb3hGOSBkaXNjb25uZXRfcGNpIHBvd2VyCisJCSAqIGlmY29uZmlnIHdsYW4wIGRvd24gcG93ZXIgYXJlIGJvdGggbG93ICAxMjo0NSovCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4MDMsIDB4RjkpOworCX0KKworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFNZU19DTEtSICsgMSwgMHg3MCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgQUZFX1BMTF9DVFJMICsgMSwgMHg2OCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgIEFGRV9QTExfQ1RSTCwgMHgwMCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgTERPQTE1X0NUUkwsIDB4MzQpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIEFGRV9YVEFMX0NUUkwsIDB4MEUpOworCVJUX1NFVF9QU19MRVZFTChwcHNjLCBSVF9SRl9PRkZfTEVWTF9IQUxUX05JQyk7CisKK30KKworc3RhdGljIHZvaWQgX3J0bDkyc2VfZ2VuX3JlZnJlc2hsZWRzdGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCXN0cnVjdCBydGxfbGVkICpwTGVkMCA9ICYocGNpcHJpdi0+bGVkY3RsLnN3X2xlZDApOworCisJaWYgKHJ0bHBjaS0+dXBfZmlyc3RfdGltZSA9PSAxKQorCQlyZXR1cm47CisKKwlpZiAocnRscHJpdi0+cHNjLnJmb2ZmX3JlYXNvbiA9PSBSRl9DSEFOR0VfQllfSVBTKQorCQlydGw5MnNlX3N3X2xlZF9vbihodywgcExlZDApOworCWVsc2UKKwkJcnRsOTJzZV9zd19sZWRfb2ZmKGh3LCBwTGVkMCk7Cit9CisKKworc3RhdGljIHZvaWQgX3J0bDkyc2VfcG93ZXJfZG9tYWluX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXUxNiB0bXB1MmI7CisJdTggdG1wdTFiOworCisJcnRscHJpdi0+cHNjLnB3cmRvbWFpbl9wcm90ZWN0ID0gdHJ1ZTsKKworCXRtcHUxYiA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgKFNZU19DTEtSICsgMSkpOworCWlmICh0bXB1MWIgJiBCSVQoNykpIHsKKwkJdG1wdTFiICY9IH4oQklUKDYpIHwgQklUKDcpKTsKKwkJaWYgKCFfcnRsOTJzX3NldF9zeXNjbGsoaHcsIHRtcHUxYikpIHsKKwkJCXJ0bHByaXYtPnBzYy5wd3Jkb21haW5fcHJvdGVjdCA9IGZhbHNlOworCQkJcmV0dXJuOworCQl9CisJfQorCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgQUZFX1BMTF9DVFJMLCAweDApOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIExET0ExNV9DVFJMLCAweDM0KTsKKworCS8qIFJlc2V0IE1BQy1JTyBhbmQgQ1BVIGFuZCBDb3JlIERpZ2l0YWwgQklUMTAvMTEvMTUgKi8KKwl0bXB1MWIgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFNZU19GVU5DX0VOICsgMSk7CisKKwkvKiBJZiBJUFMgd2UgbmVlZCB0byB0dXJuIExFRCBvbi4gU28gd2Ugbm90CisJICogbm90IGRpc2FibGUgQklUIDMvNyBvZiByZWczLiAqLworCWlmIChydGxwcml2LT5wc2MucmZvZmZfcmVhc29uICYgKFJGX0NIQU5HRV9CWV9JUFMgfCBSRl9DSEFOR0VfQllfSFcpKQorCQl0bXB1MWIgJj0gMHhGQjsKKwllbHNlCisJCXRtcHUxYiAmPSAweDczOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgU1lTX0ZVTkNfRU4gKyAxLCB0bXB1MWIpOworCS8qIHdhaXQgZm9yIEJJVCAxMC8xMS8xNSB0byBwdWxsIGhpZ2ggYXV0b21hdGljYWxseSEhICovCisJbWRlbGF5KDEpOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgQ01EUiwgMCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgVENSLCAwKTsKKworCS8qIERhdGEgc2hlZXQgbm90IGRlZmluZSAweDU2MiEhISBDb3B5IGZyb20gV01BQyEhISEhICovCisJdG1wdTFiID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCAweDU2Mik7CisJdG1wdTFiIHw9IDB4MDg7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHg1NjIsIHRtcHUxYik7CisJdG1wdTFiICY9IH4oQklUKDMpKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCAweDU2MiwgdG1wdTFiKTsKKworCS8qIEVuYWJsZSBBRkUgY2xvY2sgc291cmNlICovCisJdG1wdTFiID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBBRkVfWFRBTF9DVFJMKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBBRkVfWFRBTF9DVFJMLCAodG1wdTFiIHwgMHgwMSkpOworCS8qIERlbGF5IDEuNW1zICovCisJdWRlbGF5KDE1MDApOworCXRtcHUxYiA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgQUZFX1hUQUxfQ1RSTCArIDEpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIEFGRV9YVEFMX0NUUkwgKyAxLCAodG1wdTFiICYgMHhmYikpOworCisJLyogRW5hYmxlIEFGRSBNYWNybyBCbG9jaydzIEJhbmRnYXAgKi8KKwl0bXB1MWIgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIEFGRV9NSVNDKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBBRkVfTUlTQywgKHRtcHUxYiB8IEJJVCgwKSkpOworCW1kZWxheSgxKTsKKworCS8qIEVuYWJsZSBBRkUgTWJpYXMgKi8KKwl0bXB1MWIgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIEFGRV9NSVNDKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBBRkVfTUlTQywgKHRtcHUxYiB8IDB4MDIpKTsKKwltZGVsYXkoMSk7CisKKwkvKiBFbmFibGUgTERPQTE1IGJsb2NrICovCisJdG1wdTFiID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBMRE9BMTVfQ1RSTCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgTERPQTE1X0NUUkwsICh0bXB1MWIgfCBCSVQoMCkpKTsKKworCS8qIFNldCBEaWdpdGFsIFZkZCB0byBSZXRlbnRpb24gaXNvbGF0aW9uIFBhdGguICovCisJdG1wdTJiID0gcnRsX3JlYWRfd29yZChydGxwcml2LCBTWVNfSVNPX0NUUkwpOworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFNZU19JU09fQ1RSTCwgKHRtcHUyYiB8IEJJVCgxMSkpKTsKKworCisJLyogRm9yIHdhcm0gcmVib290IE5JQyBkaXNhcHBlcmEgYnVnLiAqLworCXRtcHUyYiA9IHJ0bF9yZWFkX3dvcmQocnRscHJpdiwgU1lTX0ZVTkNfRU4pOworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFNZU19GVU5DX0VOLCAodG1wdTJiIHwgQklUKDEzKSkpOworCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgU1lTX0lTT19DVFJMICsgMSwgMHg2OCk7CisKKwkvKiBFbmFibGUgQUZFIFBMTCBNYWNybyBCbG9jayAqLworCXRtcHUxYiA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgQUZFX1BMTF9DVFJMKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBBRkVfUExMX0NUUkwsICh0bXB1MWIgfCBCSVQoMCkgfCBCSVQoNCkpKTsKKwkvKiBFbmFibGUgTUFDIDgwTUhaIGNsb2NrICovCisJdG1wdTFiID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBBRkVfUExMX0NUUkwgKyAxKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBBRkVfUExMX0NUUkwgKyAxLCAodG1wdTFiIHwgQklUKDApKSk7CisJbWRlbGF5KDEpOworCisJLyogUmVsZWFzZSBpc29sYXRpb24gQUZFIFBMTCAmIE1EICovCisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgU1lTX0lTT19DVFJMLCAweEE2KTsKKworCS8qIEVuYWJsZSBNQUMgY2xvY2sgKi8KKwl0bXB1MmIgPSBydGxfcmVhZF93b3JkKHJ0bHByaXYsIFNZU19DTEtSKTsKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBTWVNfQ0xLUiwgKHRtcHUyYiB8IEJJVCgxMikgfCBCSVQoMTEpKSk7CisKKwkvKiBFbmFibGUgQ29yZSBkaWdpdGFsIGFuZCBlbmFibGUgSU9SRUcgUi9XICovCisJdG1wdTJiID0gcnRsX3JlYWRfd29yZChydGxwcml2LCBTWVNfRlVOQ19FTik7CisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgU1lTX0ZVTkNfRU4sICh0bXB1MmIgfCBCSVQoMTEpKSk7CisJLyogZW5hYmxlIFJFR19FTiAqLworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFNZU19GVU5DX0VOLCAodG1wdTJiIHwgQklUKDExKSB8IEJJVCgxNSkpKTsKKworCS8qIFN3aXRjaCB0aGUgY29udHJvbCBwYXRoLiAqLworCXRtcHUyYiA9IHJ0bF9yZWFkX3dvcmQocnRscHJpdiwgU1lTX0NMS1IpOworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIFNZU19DTEtSLCAodG1wdTJiICYgKH5CSVQoMikpKSk7CisKKwl0bXB1MWIgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIChTWVNfQ0xLUiArIDEpKTsKKwl0bXB1MWIgPSAoKHRtcHUxYiB8IEJJVCg3KSkgJiAofkJJVCg2KSkpOworCWlmICghX3J0bDkyc19zZXRfc3lzY2xrKGh3LCB0bXB1MWIpKSB7CisJCXJ0bHByaXYtPnBzYy5wd3Jkb21haW5fcHJvdGVjdCA9IGZhbHNlOworCQlyZXR1cm47CisJfQorCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgQ01EUiwgMHgzN0ZDKTsKKworCS8qIEFmdGVyIE1BQ0lPIHJlc2V0LHdlIG11c3QgcmVmcmVzaCBMRUQgc3RhdGUuICovCisJX3J0bDkyc2VfZ2VuX3JlZnJlc2hsZWRzdGF0ZShodyk7CisKKwlydGxwcml2LT5wc2MucHdyZG9tYWluX3Byb3RlY3QgPSBmYWxzZTsKK30KKwordm9pZCBydGw5MnNlX2NhcmRfZGlzYWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCWVudW0gbmw4MDIxMV9pZnR5cGUgb3Btb2RlOworCXU4IHdhaXQgPSAzMDsKKworCXJ0bHByaXYtPmludGZfb3BzLT5lbmFibGVfYXNwbShodyk7CisKKwlpZiAocnRscGNpLT5kcml2ZXJfaXNfZ29pbmd0b191bmxvYWQgfHwKKwkJcHBzYy0+cmZvZmZfcmVhc29uID4gUkZfQ0hBTkdFX0JZX1BTKQorCQlydGxwcml2LT5jZmctPm9wcy0+bGVkX2NvbnRyb2woaHcsIExFRF9DVExfUE9XRVJfT0ZGKTsKKworCS8qIHdlIHNob3VsZCBjaG5nZSBHUElPIHRvIGlucHV0IG1vZGUKKwkgKiB0aGlzIHdpbGwgZHJvcCBhd2F5IGN1cnJlbnQgYWJvdXQgMjVtQSovCisJcnRsODE5MnNlX2dwaW9iaXQzX2NmZ19pbnB1dG1vZGUoaHcpOworCisJLyogdGhpcyBpcyB2ZXJ5IGltcG9ydGFudCBmb3IgaXBzIHBvd2VyIHNhdmUgKi8KKwl3aGlsZSAod2FpdC0tID49IDEwICYmIHJ0bHByaXYtPnBzYy5wd3Jkb21haW5fcHJvdGVjdCkgeworCQlpZiAocnRscHJpdi0+cHNjLnB3cmRvbWFpbl9wcm90ZWN0KQorCQkJbWRlbGF5KDIwKTsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCisJbWFjLT5saW5rX3N0YXRlID0gTUFDODAyMTFfTk9MSU5LOworCW9wbW9kZSA9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOworCV9ydGw5MnNlX3NldF9tZWRpYV9zdGF0dXMoaHcsIG9wbW9kZSk7CisKKwlfcnRsOTJzX3BoeV9zZXRfcmZoYWx0KGh3KTsKKwl1ZGVsYXkoMTAwKTsKK30KKwordm9pZCBydGw5MnNlX2ludGVycnVwdF9yZWNvZ25pemVkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgKnBfaW50YSwKKwkJCSAgICAgdTMyICpwX2ludGIpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisKKwkqcF9pbnRhID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgSVNSKSAmIHJ0bHBjaS0+aXJxX21hc2tbMF07CisJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIElTUiwgKnBfaW50YSk7CisKKwkqcF9pbnRiID0gcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgSVNSICsgNCkgJiBydGxwY2ktPmlycV9tYXNrWzFdOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBJU1IgKyA0LCAqcF9pbnRiKTsKK30KKwordm9pZCBydGw5MnNlX3NldF9iZWFjb25fcmVsYXRlZF9yZWdpc3RlcnMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJdTE2IGJjbnRpbWVfY2ZnID0gMDsKKwl1MTYgYmNuX2N3ID0gNiwgYmNuX2lmcyA9IDB4ZjsKKwl1MTYgYXRpbV93aW5kb3cgPSAyOworCisJLyogQVRJTSBXaW5kb3cgKGluIHVuaXQgb2YgVFUpLiAqLworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIEFUSU1XTkQsIGF0aW1fd2luZG93KTsKKworCS8qIEJlYWNvbiBpbnRlcnZhbCAoaW4gdW5pdCBvZiBUVSkuICovCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgQkNOX0lOVEVSVkFMLCBtYWMtPmJlYWNvbl9pbnRlcnZhbCk7CisKKwkvKiBEcnZFcmx5SW50IChpbiB1bml0IG9mIFRVKS4gKFRpbWUgdG8gc2VuZAorCSAqIGludGVycnVwdCB0byBub3RpZnkgZHJpdmVyIHRvIGNoYW5nZQorCSAqIGJlYWNvbiBjb250ZW50KSAqLworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIEJDTl9EUlZfRUFSTFlfSU5ULCAxMCA8PCA0KTsKKworCS8qIEJjbkRNQVRJTShpbiB1bml0IG9mIHVzKS4gSW5kaWNhdGVzIHRoZQorCSAqIHRpbWUgYmVmb3JlIFRCVFQgdG8gcGVyZm9ybSBiZWFjb24gcXVldWUgRE1BICAqLworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIEJDTl9ETUFUSU1FLCAyNTYpOworCisJLyogRm9yY2UgYmVhY29uIGZyYW1lIHRyYW5zbWlzc2lvbiBldmVuCisJICogYWZ0ZXIgcmVjZWl2aW5nIGJlYWNvbiBmcmFtZSBmcm9tCisJICogb3RoZXIgYWQgaG9jIFNUQSAqLworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIEJDTl9FUlJfVEhSRVNILCAxMDApOworCisJLyogQmVhY29uIFRpbWUgQ29uZmlndXJhdGlvbiAqLworCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJYmNudGltZV9jZmcgfD0gKGJjbl9jdyA8PCBCQ05fVENGR19DV19TSElGVCk7CisKKwkvKiBUT0RPOiBiY25faWZzIG1heSByZXF1aXJlZCB0byBiZSBjaGFuZ2VkIG9uIEFTSUMgKi8KKwliY250aW1lX2NmZyB8PSBiY25faWZzIDw8IEJDTl9UQ0ZHX0lGUzsKKworCS8qZm9yIGJlYWNvbiBjaGFuZ2VkICovCisJcnRsOTJzX3BoeV9zZXRfYmVhY29uX2h3cmVnKGh3LCBtYWMtPmJlYWNvbl9pbnRlcnZhbCk7Cit9CisKK3ZvaWQgcnRsOTJzZV9zZXRfYmVhY29uX2ludGVydmFsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXUxNiBiY25faW50ZXJ2YWwgPSBtYWMtPmJlYWNvbl9pbnRlcnZhbDsKKworCS8qIEJlYWNvbiBpbnRlcnZhbCAoaW4gdW5pdCBvZiBUVSkuICovCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgQkNOX0lOVEVSVkFMLCBiY25faW50ZXJ2YWwpOworCS8qIDIwMDguMTAuMjQgYWRkZWQgYnkgdHlubGkgZm9yIGJlYWNvbiBjaGFuZ2VkLiAqLworCXJ0bDkyc19waHlfc2V0X2JlYWNvbl9od3JlZyhodywgYmNuX2ludGVydmFsKTsKK30KKwordm9pZCBydGw5MnNlX3VwZGF0ZV9pbnRlcnJ1cHRfbWFzayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJdTMyIGFkZF9tc3IsIHUzMiBybV9tc3IpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOVFIsIERCR19MT1VELAorCQkgKCJhZGRfbXNyOiV4LCBybV9tc3I6JXhcbiIsIGFkZF9tc3IsIHJtX21zcikpOworCisJaWYgKGFkZF9tc3IpCisJCXJ0bHBjaS0+aXJxX21hc2tbMF0gfD0gYWRkX21zcjsKKworCWlmIChybV9tc3IpCisJCXJ0bHBjaS0+aXJxX21hc2tbMF0gJj0gKH5ybV9tc3IpOworCisJcnRsOTJzZV9kaXNhYmxlX2ludGVycnVwdChodyk7CisJcnRsOTJzZV9lbmFibGVfaW50ZXJydXB0KGh3KTsKK30KKworc3RhdGljIHZvaWQgX3J0bDgxOTJzZV9nZXRfSUNfSW5mZXJpb3JpdHkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXU4IGVmdXNlX2lkOworCisJcnRsaGFsLT5pY19jbGFzcyA9IElDX0lORkVSSU9SSVRZX0E7CisKKwkvKiBPbmx5IHJldHJpZXZpbmcgd2hpbGUgdXNpbmcgRUZVU0UuICovCisJaWYgKChydGxlZnVzZS0+ZXByb210eXBlID09IEVFUFJPTV9CT09UX0VGVVNFKSAmJgorCQkhcnRsZWZ1c2UtPmF1dG9sb2FkX2ZhaWxmbGFnKSB7CisJCWVmdXNlX2lkID0gZWZ1c2VfcmVhZF8xYnl0ZShodywgRUZVU0VfSUNfSURfT0ZGU0VUKTsKKworCQlpZiAoZWZ1c2VfaWQgPT0gMHhmZSkKKwkJCXJ0bGhhbC0+aWNfY2xhc3MgPSBJQ19JTkZFUklPUklUWV9COworCX0KK30KKworc3RhdGljIHZvaWQgX3J0bDkyc2VfcmVhZF9hZGFwdGVyX2luZm8oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwl1MTYgaSwgdXN2YWx1ZTsKKwl1MTYJZWVwcm9tX2lkOworCXU4IHRlbXB2YWw7CisJdTggaHdpbmZvW0hXU0VUX01BWF9TSVpFXzkyU107CisJdTggcmZfcGF0aCwgaW5kZXg7CisKKwlpZiAocnRsZWZ1c2UtPmVwcm9tdHlwZSA9PSBFRVBST01fOTNDNDYpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoIlJUTDgxOVggTm90IGJvb3QgZnJvbSBlZXByb20sIGNoZWNrIGl0ICEhIikpOworCX0gZWxzZSBpZiAocnRsZWZ1c2UtPmVwcm9tdHlwZSA9PSBFRVBST01fQk9PVF9FRlVTRSkgeworCQlydGxfZWZ1c2Vfc2hhZG93X21hcF91cGRhdGUoaHcpOworCisJCW1lbWNweSgodm9pZCAqKWh3aW5mbywgKHZvaWQgKikKKwkJCSZydGxlZnVzZS0+ZWZ1c2VfbWFwW0VGVVNFX0lOSVRfTUFQXVswXSwKKwkJCUhXU0VUX01BWF9TSVpFXzkyUyk7CisJfQorCisJUlRfUFJJTlRfREFUQShydGxwcml2LCBDT01QX0lOSVQsIERCR19ETUVTRywgKCJNQVBcbiIpLAorCQkgICAgICBod2luZm8sIEhXU0VUX01BWF9TSVpFXzkyUyk7CisKKwllZXByb21faWQgPSAqKCh1MTYgKikmaHdpbmZvWzBdKTsKKwlpZiAoZWVwcm9tX2lkICE9IFJUTDgxOTBfRUVQUk9NX0lEKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfV0FSTklORywKKwkJCSAoIkVFUFJPTSBJRCglI3gpIGlzIGludmFsaWQhIVxuIiwgZWVwcm9tX2lkKSk7CisJCXJ0bGVmdXNlLT5hdXRvbG9hZF9mYWlsZmxhZyA9IHRydWU7CisJfSBlbHNlIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwgKCJBdXRvbG9hZCBPS1xuIikpOworCQlydGxlZnVzZS0+YXV0b2xvYWRfZmFpbGZsYWcgPSBmYWxzZTsKKwl9CisKKwlpZiAocnRsZWZ1c2UtPmF1dG9sb2FkX2ZhaWxmbGFnID09IHRydWUpCisJCXJldHVybjsKKworCV9ydGw4MTkyc2VfZ2V0X0lDX0luZmVyaW9yaXR5KGh3KTsKKworCS8qIFJlYWQgSUMgVmVyc2lvbiAmJiBDaGFubmVsIFBsYW4gKi8KKwkvKiBWSUQsIERJRAkgU0UJMHhBLUQgKi8KKwlydGxlZnVzZS0+ZWVwcm9tX3ZpZCA9ICoodTE2ICopJmh3aW5mb1tFRVBST01fVklEXTsKKwlydGxlZnVzZS0+ZWVwcm9tX2RpZCA9ICoodTE2ICopJmh3aW5mb1tFRVBST01fRElEXTsKKwlydGxlZnVzZS0+ZWVwcm9tX3N2aWQgPSAqKHUxNiAqKSZod2luZm9bRUVQUk9NX1NWSURdOworCXJ0bGVmdXNlLT5lZXByb21fc21pZCA9ICoodTE2ICopJmh3aW5mb1tFRVBST01fU01JRF07CisJcnRsZWZ1c2UtPmVlcHJvbV92ZXJzaW9uID0gKih1MTYgKikmaHdpbmZvW0VFUFJPTV9WRVJTSU9OXTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0xPVUQsCisJCQkoIkVFUFJPTUlkID0gMHglNHhcbiIsIGVlcHJvbV9pZCkpOworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0xPVUQsCisJCQkoIkVFUFJPTSBWSUQgPSAweCU0eFxuIiwgcnRsZWZ1c2UtPmVlcHJvbV92aWQpKTsKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19MT1VELAorCQkJKCJFRVBST00gRElEID0gMHglNHhcbiIsIHJ0bGVmdXNlLT5lZXByb21fZGlkKSk7CisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwKKwkJCSgiRUVQUk9NIFNWSUQgPSAweCU0eFxuIiwgcnRsZWZ1c2UtPmVlcHJvbV9zdmlkKSk7CisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwKKwkJCSgiRUVQUk9NIFNNSUQgPSAweCU0eFxuIiwgcnRsZWZ1c2UtPmVlcHJvbV9zbWlkKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSArPSAyKSB7CisJCXVzdmFsdWUgPSAqKHUxNiAqKSZod2luZm9bRUVQUk9NX01BQ19BRERSICsgaV07CisJCSooKHUxNiAqKSAoJnJ0bGVmdXNlLT5kZXZfYWRkcltpXSkpID0gdXN2YWx1ZTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBNQUNJRFIwICsgaSwgcnRsZWZ1c2UtPmRldl9hZGRyW2ldKTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0RNRVNHLAorCQkgKE1BQ19GTVQgIlxuIiwgTUFDX0FSRyhydGxlZnVzZS0+ZGV2X2FkZHIpKSk7CisKKwkvKiBHZXQgVHggUG93ZXIgTGV2ZWwgYnkgQ2hhbm5lbCAqLworCS8qIFJlYWQgVHggcG93ZXIgb2YgQ2hhbm5lbCAxIH4gMTQgZnJvbSBFRVBST00uICovCisJLyogOTJTIHN1dXBwb3J0IFJGIEEgJiBCICovCisJZm9yIChyZl9wYXRoID0gMDsgcmZfcGF0aCA8IDI7IHJmX3BhdGgrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCQkvKiBSZWFkIENDSyBSRiBBICYgQiBUeCBwb3dlciAgKi8KKwkJCXJ0bGVmdXNlLT5lZXByb21fY2hubGFyZWFfdHhwd3JfY2NrW3JmX3BhdGhdW2ldID0KKwkJCWh3aW5mb1tFRVBST01fVFhQT1dFUkJBU0UgKyByZl9wYXRoICogMyArIGldOworCisJCQkvKiBSZWFkIE9GRE0gUkYgQSAmIEIgVHggcG93ZXIgZm9yIDFUICovCisJCQlydGxlZnVzZS0+ZWVwcm9tX2NobmxhcmVhX3R4cHdyX2h0NDBfMXNbcmZfcGF0aF1baV0gPQorCQkJaHdpbmZvW0VFUFJPTV9UWFBPV0VSQkFTRSArIDYgKyByZl9wYXRoICogMyArIGldOworCisJCQkvKiBSZWFkIE9GRE0gUkYgQSAmIEIgVHggcG93ZXIgZm9yIDJUICovCisJCQlydGxlZnVzZS0+ZWVwcm9tX2NobmxhcmVhX3R4cHdyX2h0NDBfMnNkaWlmW3JmX3BhdGhdW2ldCisJCQkJID0gaHdpbmZvW0VFUFJPTV9UWFBPV0VSQkFTRSArIDEyICsKKwkJCQkgICByZl9wYXRoICogMyArIGldOworCQl9CisJfQorCisJZm9yIChyZl9wYXRoID0gMDsgcmZfcGF0aCA8IDI7IHJmX3BhdGgrKykKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJCVJUUFJJTlQocnRscHJpdiwgRklOSVQsIElOSVRfRUVQUk9NLAorCQkJCSgiUkYoJWQpIEVFUFJPTSBDQ0sgQXJlYSglZCkgPSAweCV4XG4iLCByZl9wYXRoLAorCQkJCWksIHJ0bGVmdXNlLT5lZXByb21fY2hubGFyZWFfdHhwd3JfY2NrCisJCQkJCVtyZl9wYXRoXVtpXSkpOworCWZvciAocmZfcGF0aCA9IDA7IHJmX3BhdGggPCAyOyByZl9wYXRoKyspCisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCQlSVFBSSU5UKHJ0bHByaXYsIEZJTklULCBJTklUX0VFUFJPTSwKKwkJCQkoIlJGKCVkKSBFRVBST00gSFQ0MCAxUyBBcmVhKCVkKSA9IDB4JXhcbiIsCisJCQkJIHJmX3BhdGgsIGksCisJCQkJIHJ0bGVmdXNlLT5lZXByb21fY2hubGFyZWFfdHhwd3JfaHQ0MF8xcworCQkJCQkJW3JmX3BhdGhdW2ldKSk7CisJZm9yIChyZl9wYXRoID0gMDsgcmZfcGF0aCA8IDI7IHJmX3BhdGgrKykKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJCVJUUFJJTlQocnRscHJpdiwgRklOSVQsIElOSVRfRUVQUk9NLAorCQkJCSgiUkYoJWQpIEVFUFJPTSBIVDQwIDJTIERpZmYgQXJlYSglZCkgPSAweCV4XG4iLAorCQkJCSByZl9wYXRoLCBpLAorCQkJCSBydGxlZnVzZS0+ZWVwcm9tX2NobmxhcmVhX3R4cHdyX2h0NDBfMnNkaWlmCisJCQkJCVtyZl9wYXRoXVtpXSkpOworCisJZm9yIChyZl9wYXRoID0gMDsgcmZfcGF0aCA8IDI7IHJmX3BhdGgrKykgeworCisJCS8qIEFzc2lnbiBkZWRpY2F0ZWQgY2hhbm5lbCB0eCBwb3dlciAqLworCQlmb3IgKGkgPSAwOyBpIDwgMTQ7IGkrKykJeworCQkJLyogY2hhbm5lbCAxfjMgdXNlIHRoZSBzYW1lIFR4IFBvd2VyIExldmVsLiAqLworCQkJaWYgKGkgPCAzKQorCQkJCWluZGV4ID0gMDsKKwkJCS8qIENoYW5uZWwgNC04ICovCisJCQllbHNlIGlmIChpIDwgOCkKKwkJCQlpbmRleCA9IDE7CisJCQkvKiBDaGFubmVsIDktMTQgKi8KKwkJCWVsc2UKKwkJCQlpbmRleCA9IDI7CisKKwkJCS8qIFJlY29yZCBBICYgQiBDQ0sgL09GRE0gLSAxVC8yVCBDaGFubmVsIGFyZWEKKwkJCSAqIHR4IHBvd2VyICovCisJCQlydGxlZnVzZS0+dHhwd3JsZXZlbF9jY2tbcmZfcGF0aF1baV0gID0KKwkJCQlydGxlZnVzZS0+ZWVwcm9tX2NobmxhcmVhX3R4cHdyX2NjaworCQkJCQkJCVtyZl9wYXRoXVtpbmRleF07CisJCQlydGxlZnVzZS0+dHhwd3JsZXZlbF9odDQwXzFzW3JmX3BhdGhdW2ldICA9CisJCQkJcnRsZWZ1c2UtPmVlcHJvbV9jaG5sYXJlYV90eHB3cl9odDQwXzFzCisJCQkJCQkJW3JmX3BhdGhdW2luZGV4XTsKKwkJCXJ0bGVmdXNlLT50eHB3cmxldmVsX2h0NDBfMnNbcmZfcGF0aF1baV0gID0KKwkJCQlydGxlZnVzZS0+ZWVwcm9tX2NobmxhcmVhX3R4cHdyX2h0NDBfMnNkaWlmCisJCQkJCQkJW3JmX3BhdGhdW2luZGV4XTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCAxNDsgaSsrKSB7CisJCQlSVFBSSU5UKHJ0bHByaXYsIEZJTklULCBJTklUX1R4UG93ZXIsCisJCQkJKCJSRiglZCktQ2goJWQpIFtDQ0sgLyBIVDQwXzFTIC8gSFQ0MF8yU10gPSAiCisJCQkJICJbMHgleCAvIDB4JXggLyAweCV4XVxuIiwgcmZfcGF0aCwgaSwKKwkJCQkgcnRsZWZ1c2UtPnR4cHdybGV2ZWxfY2NrW3JmX3BhdGhdW2ldLAorCQkJCSBydGxlZnVzZS0+dHhwd3JsZXZlbF9odDQwXzFzW3JmX3BhdGhdW2ldLAorCQkJCSBydGxlZnVzZS0+dHhwd3JsZXZlbF9odDQwXzJzW3JmX3BhdGhdW2ldKSk7CisJCX0KKwl9CisKKwlmb3IgKHJmX3BhdGggPSAwOyByZl9wYXRoIDwgMjsgcmZfcGF0aCsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJCS8qIFJlYWQgUG93ZXIgZGlmZiBsaW1pdC4gKi8KKwkJCXJ0bGVmdXNlLT5lZXByb21fcHdyZ3JvdXBbcmZfcGF0aF1baV0gPQorCQkJCWh3aW5mb1tFRVBST01fVFhQV1JHUk9VUCArIHJmX3BhdGggKiAzICsgaV07CisJCX0KKwl9CisKKwlmb3IgKHJmX3BhdGggPSAwOyByZl9wYXRoIDwgMjsgcmZfcGF0aCsrKSB7CisJCS8qIEZpbGwgUHdyIGdyb3VwICovCisJCWZvciAoaSA9IDA7IGkgPCAxNDsgaSsrKSB7CisJCQkvKiBDaGFuZWwgMS0zICovCisJCQlpZiAoaSA8IDMpCisJCQkJaW5kZXggPSAwOworCQkJLyogQ2hhbm5lbCA0LTggKi8KKwkJCWVsc2UgaWYgKGkgPCA4KQorCQkJCWluZGV4ID0gMTsKKwkJCS8qIENoYW5uZWwgOS0xMyAqLworCQkJZWxzZQorCQkJCWluZGV4ID0gMjsKKworCQkJcnRsZWZ1c2UtPnB3cmdyb3VwX2h0MjBbcmZfcGF0aF1baV0gPQorCQkJCShydGxlZnVzZS0+ZWVwcm9tX3B3cmdyb3VwW3JmX3BhdGhdW2luZGV4XSAmCisJCQkJMHhmKTsKKwkJCXJ0bGVmdXNlLT5wd3Jncm91cF9odDQwW3JmX3BhdGhdW2ldID0KKwkJCQkoKHJ0bGVmdXNlLT5lZXByb21fcHdyZ3JvdXBbcmZfcGF0aF1baW5kZXhdICYKKwkJCQkweGYwKSA+PiA0KTsKKworCQkJUlRQUklOVChydGxwcml2LCBGSU5JVCwgSU5JVF9UeFBvd2VyLAorCQkJCSgiUkYtJWQgcHdyZ3JvdXBfaHQyMFslZF0gPSAweCV4XG4iLAorCQkJCSByZl9wYXRoLCBpLAorCQkJCSBydGxlZnVzZS0+cHdyZ3JvdXBfaHQyMFtyZl9wYXRoXVtpXSkpOworCQkJUlRQUklOVChydGxwcml2LCBGSU5JVCwgSU5JVF9UeFBvd2VyLAorCQkJCSgiUkYtJWQgcHdyZ3JvdXBfaHQ0MFslZF0gPSAweCV4XG4iLAorCQkJCSByZl9wYXRoLCBpLAorCQkJCSBydGxlZnVzZS0+cHdyZ3JvdXBfaHQ0MFtyZl9wYXRoXVtpXSkpOworCQkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCAxNDsgaSsrKSB7CisJCS8qIFJlYWQgdHggcG93ZXIgZGlmZmVyZW5jZSBiZXR3ZWVuIEhUIE9GRE0gMjAvNDAgTUhaICovCisJCS8qIGNoYW5uZWwgMS0zICovCisJCWlmIChpIDwgMykKKwkJCWluZGV4ID0gMDsKKwkJLyogQ2hhbm5lbCA0LTggKi8KKwkJZWxzZSBpZiAoaSA8IDgpCisJCQlpbmRleCA9IDE7CisJCS8qIENoYW5uZWwgOS0xNCAqLworCQllbHNlCisJCQlpbmRleCA9IDI7CisKKwkJdGVtcHZhbCA9ICgqKHU4ICopJmh3aW5mb1tFRVBST01fVFhfUFdSX0hUMjBfRElGRiArCisJCQkgICBpbmRleF0pICYgMHhmZjsKKwkJcnRsZWZ1c2UtPnR4cHdyX2h0MjBkaWZmW1JGOTBfUEFUSF9BXVtpXSA9ICh0ZW1wdmFsICYgMHhGKTsKKwkJcnRsZWZ1c2UtPnR4cHdyX2h0MjBkaWZmW1JGOTBfUEFUSF9CXVtpXSA9CisJCQkJCQkgKCh0ZW1wdmFsID4+IDQpICYgMHhGKTsKKworCQkvKiBSZWFkIE9GRE08LT5IVCB0eCBwb3dlciBkaWZmICovCisJCS8qIENoYW5uZWwgMS0zICovCisJCWlmIChpIDwgMykKKwkJCWluZGV4ID0gMDsKKwkJLyogQ2hhbm5lbCA0LTggKi8KKwkJZWxzZSBpZiAoaSA8IDgpCisJCQlpbmRleCA9IDB4MTE7CisJCS8qIENoYW5uZWwgOS0xNCAqLworCQllbHNlCisJCQlpbmRleCA9IDE7CisKKwkJdGVtcHZhbCA9ICgqKHU4ICopJmh3aW5mb1tFRVBST01fVFhfUFdSX09GRE1fRElGRiArIGluZGV4XSkKKwkJCQkgICYgMHhmZjsKKwkJcnRsZWZ1c2UtPnR4cHdyX2xlZ2FjeWh0ZGlmZltSRjkwX1BBVEhfQV1baV0gPQorCQkJCSAodGVtcHZhbCAmIDB4Rik7CisJCXJ0bGVmdXNlLT50eHB3cl9sZWdhY3lodGRpZmZbUkY5MF9QQVRIX0JdW2ldID0KKwkJCQkgKCh0ZW1wdmFsID4+IDQpICYgMHhGKTsKKworCQl0ZW1wdmFsID0gKCoodTggKikmaHdpbmZvW1RYX1BXUl9TQUZFVFlfQ0hLXSk7CisJCXJ0bGVmdXNlLT50eHB3cl9zYWZldHlmbGFnID0gKHRlbXB2YWwgJiAweDAxKTsKKwl9CisKKwlydGxlZnVzZS0+ZWVwcm9tX3JlZ3VsYXRvcnkgPSAwOworCWlmIChydGxlZnVzZS0+ZWVwcm9tX3ZlcnNpb24gPj0gMikgeworCQkvKiBCSVQoMCl+MiAqLworCQlpZiAocnRsZWZ1c2UtPmVlcHJvbV92ZXJzaW9uID49IDQpCisJCQlydGxlZnVzZS0+ZWVwcm9tX3JlZ3VsYXRvcnkgPQorCQkJCSAoaHdpbmZvW0VFUFJPTV9SRUdVTEFUT1JZXSAmIDB4Nyk7CisJCWVsc2UgLyogQklUKDApICovCisJCQlydGxlZnVzZS0+ZWVwcm9tX3JlZ3VsYXRvcnkgPQorCQkJCSAoaHdpbmZvW0VFUFJPTV9SRUdVTEFUT1JZXSAmIDB4MSk7CisJfQorCVJUUFJJTlQocnRscHJpdiwgRklOSVQsIElOSVRfVHhQb3dlciwKKwkJKCJlZXByb21fcmVndWxhdG9yeSA9IDB4JXhcbiIsIHJ0bGVmdXNlLT5lZXByb21fcmVndWxhdG9yeSkpOworCisJZm9yIChpID0gMDsgaSA8IDE0OyBpKyspCisJCVJUUFJJTlQocnRscHJpdiwgRklOSVQsIElOSVRfVHhQb3dlciwKKwkJCSgiUkYtQSBIdDIwIHRvIEhUNDAgRGlmZlslZF0gPSAweCV4XG4iLCBpLAorCQkJIHJ0bGVmdXNlLT50eHB3cl9odDIwZGlmZltSRjkwX1BBVEhfQV1baV0pKTsKKwlmb3IgKGkgPSAwOyBpIDwgMTQ7IGkrKykKKwkJUlRQUklOVChydGxwcml2LCBGSU5JVCwgSU5JVF9UeFBvd2VyLAorCQkJKCJSRi1BIExlZ2FjeSB0byBIdDQwIERpZmZbJWRdID0gMHgleFxuIiwgaSwKKwkJCSBydGxlZnVzZS0+dHhwd3JfbGVnYWN5aHRkaWZmW1JGOTBfUEFUSF9BXVtpXSkpOworCWZvciAoaSA9IDA7IGkgPCAxNDsgaSsrKQorCQlSVFBSSU5UKHJ0bHByaXYsIEZJTklULCBJTklUX1R4UG93ZXIsCisJCQkoIlJGLUIgSHQyMCB0byBIVDQwIERpZmZbJWRdID0gMHgleFxuIiwgaSwKKwkJCSBydGxlZnVzZS0+dHhwd3JfaHQyMGRpZmZbUkY5MF9QQVRIX0JdW2ldKSk7CisJZm9yIChpID0gMDsgaSA8IDE0OyBpKyspCisJCVJUUFJJTlQocnRscHJpdiwgRklOSVQsIElOSVRfVHhQb3dlciwKKwkJCSgiUkYtQiBMZWdhY3kgdG8gSFQ0MCBEaWZmWyVkXSA9IDB4JXhcbiIsIGksCisJCQkgcnRsZWZ1c2UtPnR4cHdyX2xlZ2FjeWh0ZGlmZltSRjkwX1BBVEhfQl1baV0pKTsKKworCVJUUFJJTlQocnRscHJpdiwgRklOSVQsIElOSVRfVHhQb3dlciwgKCJUeFB3clNhZmV0eUZsYWcgPSAlZFxuIiwKKwkJcnRsZWZ1c2UtPnR4cHdyX3NhZmV0eWZsYWcpKTsKKworCS8qIFJlYWQgUkYtaW5kaWNhdGlvbiBhbmQgVHggUG93ZXIgZ2FpbgorCSAqIGluZGV4IGRpZmYgb2YgbGVnYWN5IHRvIEhUIE9GRE0gcmF0ZS4gKi8KKwl0ZW1wdmFsID0gKCoodTggKikmaHdpbmZvW0VFUFJPTV9SRklORF9QT1dFUkRJRkZdKSAmIDB4ZmY7CisJcnRsZWZ1c2UtPmVlcHJvbV90eHBvd2VyZGlmZiA9IHRlbXB2YWw7CisJcnRsZWZ1c2UtPmxlZ2FjeV9odHR4cG93ZXJkaWZmID0KKwkJcnRsZWZ1c2UtPnR4cHdyX2xlZ2FjeWh0ZGlmZltSRjkwX1BBVEhfQV1bMF07CisKKwlSVFBSSU5UKHJ0bHByaXYsIEZJTklULCBJTklUX1R4UG93ZXIsICgiVHhQb3dlckRpZmYgPSAlI3hcbiIsCisJCXJ0bGVmdXNlLT5lZXByb21fdHhwb3dlcmRpZmYpKTsKKworCS8qIEdldCBUU1NJIHZhbHVlIGZvciBlYWNoIHBhdGguICovCisJdXN2YWx1ZSA9ICoodTE2ICopJmh3aW5mb1tFRVBST01fVFNTSV9BXTsKKwlydGxlZnVzZS0+ZWVwcm9tX3Rzc2lbUkY5MF9QQVRIX0FdID0gKHU4KSgodXN2YWx1ZSAmIDB4ZmYwMCkgPj4gOCk7CisJdXN2YWx1ZSA9ICoodTggKikmaHdpbmZvW0VFUFJPTV9UU1NJX0JdOworCXJ0bGVmdXNlLT5lZXByb21fdHNzaVtSRjkwX1BBVEhfQl0gPSAodTgpKHVzdmFsdWUgJiAweGZmKTsKKworCVJUUFJJTlQocnRscHJpdiwgRklOSVQsIElOSVRfVHhQb3dlciwgKCJUU1NJX0EgPSAweCV4LCBUU1NJX0IgPSAweCV4XG4iLAorCQkgcnRsZWZ1c2UtPmVlcHJvbV90c3NpW1JGOTBfUEFUSF9BXSwKKwkJIHJ0bGVmdXNlLT5lZXByb21fdHNzaVtSRjkwX1BBVEhfQl0pKTsKKworCS8qIFJlYWQgYW50ZW5uYSB0eCBwb3dlciBvZmZzZXQgb2YgQi9DL0QgdG8gQSAgZnJvbSBFRVBST00gKi8KKwkvKiBhbmQgcmVhZCBUaGVybWFsTWV0ZXIgZnJvbSBFRVBST00gKi8KKwl0ZW1wdmFsID0gKih1OCAqKSZod2luZm9bRUVQUk9NX1RIRVJNQUxNRVRFUl07CisJcnRsZWZ1c2UtPmVlcHJvbV90aGVybWFsbWV0ZXIgPSB0ZW1wdmFsOworCVJUUFJJTlQocnRscHJpdiwgRklOSVQsIElOSVRfVHhQb3dlciwgKCJ0aGVybWFsbWV0ZXIgPSAweCV4XG4iLAorCQlydGxlZnVzZS0+ZWVwcm9tX3RoZXJtYWxtZXRlcikpOworCisJLyogVGhlcm1hbE1ldGVyLCBCSVQoMCl+MyBmb3IgUkZJQzEsIEJJVCg0KX43IGZvciBSRklDMiAqLworCXJ0bGVmdXNlLT50aGVybWFsbWV0ZXJbMF0gPSAocnRsZWZ1c2UtPmVlcHJvbV90aGVybWFsbWV0ZXIgJiAweDFmKTsKKwlydGxlZnVzZS0+dHNzaV8xM2RibSA9IHJ0bGVmdXNlLT5lZXByb21fdGhlcm1hbG1ldGVyICogMTAwOworCisJLyogUmVhZCBDcnlzdGFsQ2FwIGZyb20gRUVQUk9NICovCisJdGVtcHZhbCA9ICgqKHU4ICopJmh3aW5mb1tFRVBST01fQ1JZU1RBTENBUF0pID4+IDQ7CisJcnRsZWZ1c2UtPmVlcHJvbV9jcnlzdGFsY2FwID0gdGVtcHZhbDsKKwkvKiBDcnlzdGFsQ2FwLCBCSVQoMTIpfjE1ICovCisJcnRsZWZ1c2UtPmNyeXN0YWxjYXAgPSBydGxlZnVzZS0+ZWVwcm9tX2NyeXN0YWxjYXA7CisKKwkvKiBSZWFkIElDIFZlcnNpb24gJiYgQ2hhbm5lbCBQbGFuICovCisJLyogVmVyc2lvbiBJRCwgQ2hhbm5lbCBwbGFuICovCisJcnRsZWZ1c2UtPmVlcHJvbV9jaGFubmVscGxhbiA9ICoodTggKikmaHdpbmZvW0VFUFJPTV9DSEFOTkVMUExBTl07CisJcnRsZWZ1c2UtPnR4cHdyX2Zyb21lcHJvbSA9IHRydWU7CisJUlRQUklOVChydGxwcml2LCBGSU5JVCwgSU5JVF9UeFBvd2VyLCAoIkVFUFJPTSBDaGFubmVsUGxhbiA9IDB4JTR4XG4iLAorCQlydGxlZnVzZS0+ZWVwcm9tX2NoYW5uZWxwbGFuKSk7CisKKwkvKiBSZWFkIEN1c3RvbWVyIElEIG9yIEJvYXJkIFR5cGUhISEgKi8KKwl0ZW1wdmFsID0gKih1OCAqKSZod2luZm9bRUVQUk9NX0JPQVJEVFlQRV07CisJLyogQ2hhbmdlIFJGIHR5cGUgZGVmaW5pdGlvbiAqLworCWlmICh0ZW1wdmFsID09IDApCisJCXJ0bHBoeS0+cmZfdHlwZSA9IFJGXzJUMlI7CisJZWxzZSBpZiAodGVtcHZhbCA9PSAxKQorCQlydGxwaHktPnJmX3R5cGUgPSBSRl8xVDJSOworCWVsc2UgaWYgKHRlbXB2YWwgPT0gMikKKwkJcnRscGh5LT5yZl90eXBlID0gUkZfMVQyUjsKKwllbHNlIGlmICh0ZW1wdmFsID09IDMpCisJCXJ0bHBoeS0+cmZfdHlwZSA9IFJGXzFUMVI7CisKKwkvKiAxVDJSIGJ1dCAxU1MgKDF4MSByZWNlaXZlIGNvbWJpbmluZykgKi8KKwlydGxlZnVzZS0+YjF4MV9yZWN2Y29tYmluZSA9IGZhbHNlOworCWlmIChydGxwaHktPnJmX3R5cGUgPT0gUkZfMVQyUikgeworCQl0ZW1wdmFsID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCAweDA3KTsKKwkJaWYgKCEodGVtcHZhbCAmIEJJVCgwKSkpIHsKKwkJCXJ0bGVmdXNlLT5iMXgxX3JlY3Zjb21iaW5lID0gdHJ1ZTsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0xPVUQsCisJCQkJKCJSRl9UWVBFPTFUMlIgYnV0IG9ubHkgMVNTXG4iKSk7CisJCX0KKwl9CisJcnRsZWZ1c2UtPmIxc3Nfc3VwcG9ydCA9IHJ0bGVmdXNlLT5iMXgxX3JlY3Zjb21iaW5lOworCXJ0bGVmdXNlLT5lZXByb21fb2VtaWQgPSAqKHU4ICopJmh3aW5mb1tFRVBST01fQ1VTVE9NSURdOworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwgKCJFRVBST00gQ3VzdG9tZXIgSUQ6IDB4JTJ4IiwKKwkJCXJ0bGVmdXNlLT5lZXByb21fb2VtaWQpKTsKKworCS8qIHNldCBjaGFubmVsIHBhbG4gdG8gd29ybGQgd2lkZSAxMyAqLworCXJ0bGVmdXNlLT5jaGFubmVsX3BsYW4gPSBDT1VOVFJZX0NPREVfV09STERfV0lERV8xMzsKK30KKwordm9pZCBydGw5MnNlX3JlYWRfZWVwcm9tX2luZm8oc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisJdTggdG1wX3UxYiA9IDA7CisKKwl0bXBfdTFiID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBFUFJPTV9DTUQpOworCisJaWYgKHRtcF91MWIgJiBCSVQoNCkpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfRE1FU0csICgiQm9vdCBmcm9tIEVFUFJPTVxuIikpOworCQlydGxlZnVzZS0+ZXByb210eXBlID0gRUVQUk9NXzkzQzQ2OworCX0gZWxzZSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0RNRVNHLCAoIkJvb3QgZnJvbSBFRlVTRVxuIikpOworCQlydGxlZnVzZS0+ZXByb210eXBlID0gRUVQUk9NX0JPT1RfRUZVU0U7CisJfQorCisJaWYgKHRtcF91MWIgJiBCSVQoNSkpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwgKCJBdXRvbG9hZCBPS1xuIikpOworCQlydGxlZnVzZS0+YXV0b2xvYWRfZmFpbGZsYWcgPSBmYWxzZTsKKwkJX3J0bDkyc2VfcmVhZF9hZGFwdGVyX2luZm8oaHcpOworCX0gZWxzZSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsICgiQXV0b2xvYWQgRVJSISFcbiIpKTsKKwkJcnRsZWZ1c2UtPmF1dG9sb2FkX2ZhaWxmbGFnID0gdHJ1ZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDkyc2VfdXBkYXRlX2hhbF9yYXRlX3RhYmxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXUzMiByYXRyX3ZhbHVlOworCXU4IHJhdHJfaW5kZXggPSAwOworCXU4IG5tb2RlID0gbWFjLT5odF9lbmFibGU7CisJdTggbWltb19wcyA9IElFRUU4MDIxMV9TTVBTX09GRjsKKwl1MTYgc2hvcnRnaV9yYXRlID0gMDsKKwl1MzIgdG1wX3JhdHJfdmFsdWUgPSAwOworCXU4IGN1cnR4YndfNDBtaHogPSBtYWMtPmJ3XzQwOworCXU4IGN1cnNob3J0Z2lfNDBtaHogPSAoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TR0lfNDApID8KKwkJCQkxIDogMDsKKwl1OCBjdXJzaG9ydGdpXzIwbWh6ID0gKHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwKSA/CisJCQkJMSA6IDA7CisJZW51bSB3aXJlbGVzc19tb2RlIHdpcmVsZXNzbW9kZSA9IG1hYy0+bW9kZTsKKworCWlmIChydGxoYWwtPmN1cnJlbnRfYmFuZHR5cGUgPT0gQkFORF9PTl81RykKKwkJcmF0cl92YWx1ZSA9IHN0YS0+c3VwcF9yYXRlc1sxXSA8PCA0OworCWVsc2UKKwkJcmF0cl92YWx1ZSA9IHN0YS0+c3VwcF9yYXRlc1swXTsKKwlyYXRyX3ZhbHVlIHw9IChzdGEtPmh0X2NhcC5tY3MucnhfbWFza1sxXSA8PCAyMCB8CisJCQlzdGEtPmh0X2NhcC5tY3MucnhfbWFza1swXSA8PCAxMik7CisJc3dpdGNoICh3aXJlbGVzc21vZGUpIHsKKwljYXNlIFdJUkVMRVNTX01PREVfQjoKKwkJcmF0cl92YWx1ZSAmPSAweDAwMDAwMDBEOworCQlicmVhazsKKwljYXNlIFdJUkVMRVNTX01PREVfRzoKKwkJcmF0cl92YWx1ZSAmPSAweDAwMDAwRkY1OworCQlicmVhazsKKwljYXNlIFdJUkVMRVNTX01PREVfTl8yNEc6CisJY2FzZSBXSVJFTEVTU19NT0RFX05fNUc6CisJCW5tb2RlID0gMTsKKwkJaWYgKG1pbW9fcHMgPT0gSUVFRTgwMjExX1NNUFNfU1RBVElDKSB7CisJCQlyYXRyX3ZhbHVlICY9IDB4MDAwN0YwMDU7CisJCX0gZWxzZSB7CisJCQl1MzIgcmF0cl9tYXNrOworCisJCQlpZiAoZ2V0X3JmX3R5cGUocnRscGh5KSA9PSBSRl8xVDJSIHx8CisJCQkgICAgZ2V0X3JmX3R5cGUocnRscGh5KSA9PSBSRl8xVDFSKSB7CisJCQkJaWYgKGN1cnR4YndfNDBtaHopCisJCQkJCXJhdHJfbWFzayA9IDB4MDAwZmYwMTU7CisJCQkJZWxzZQorCQkJCQlyYXRyX21hc2sgPSAweDAwMGZmMDA1OworCQkJfSBlbHNlIHsKKwkJCQlpZiAoY3VydHhid180MG1oeikKKwkJCQkJcmF0cl9tYXNrID0gMHgwZjBmZjAxNTsKKwkJCQllbHNlCisJCQkJCXJhdHJfbWFzayA9IDB4MGYwZmYwMDU7CisJCQl9CisKKwkJCXJhdHJfdmFsdWUgJj0gcmF0cl9tYXNrOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmIChydGxwaHktPnJmX3R5cGUgPT0gUkZfMVQyUikKKwkJCXJhdHJfdmFsdWUgJj0gMHgwMDBmZjBmZjsKKwkJZWxzZQorCQkJcmF0cl92YWx1ZSAmPSAweDBmMGZmMGZmOworCisJCWJyZWFrOworCX0KKworCWlmIChydGxwcml2LT5ydGxoYWwudmVyc2lvbiA+PSBWRVJTSU9OXzgxOTJTX0JDVVQpCisJCXJhdHJfdmFsdWUgJj0gMHgwRkZGRkZGRjsKKwllbHNlIGlmIChydGxwcml2LT5ydGxoYWwudmVyc2lvbiA9PSBWRVJTSU9OXzgxOTJTX0FDVVQpCisJCXJhdHJfdmFsdWUgJj0gMHgwRkZGRkZGMDsKKworCWlmIChubW9kZSAmJiAoKGN1cnR4YndfNDBtaHogJiYKKwkJCSBjdXJzaG9ydGdpXzQwbWh6KSB8fCAoIWN1cnR4YndfNDBtaHogJiYKKwkJCQkJCSBjdXJzaG9ydGdpXzIwbWh6KSkpIHsKKworCQlyYXRyX3ZhbHVlIHw9IDB4MTAwMDAwMDA7CisJCXRtcF9yYXRyX3ZhbHVlID0gKHJhdHJfdmFsdWUgPj4gMTIpOworCisJCWZvciAoc2hvcnRnaV9yYXRlID0gMTU7IHNob3J0Z2lfcmF0ZSA+IDA7IHNob3J0Z2lfcmF0ZS0tKSB7CisJCQlpZiAoKDEgPDwgc2hvcnRnaV9yYXRlKSAmIHRtcF9yYXRyX3ZhbHVlKQorCQkJCWJyZWFrOworCQl9CisKKwkJc2hvcnRnaV9yYXRlID0gKHNob3J0Z2lfcmF0ZSA8PCAxMikgfCAoc2hvcnRnaV9yYXRlIDw8IDgpIHwKKwkJICAgIChzaG9ydGdpX3JhdGUgPDwgNCkgfCAoc2hvcnRnaV9yYXRlKTsKKworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBTR19SQVRFLCBzaG9ydGdpX3JhdGUpOworCX0KKworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBBUkZSMCArIHJhdHJfaW5kZXggKiA0LCByYXRyX3ZhbHVlKTsKKwlpZiAocmF0cl92YWx1ZSAmIDB4ZmZmZmYwMDApCisJCXJ0bDkyc19waHlfc2V0X2Z3X2NtZChodywgRldfQ01EX1JBX1JFRlJFU0hfTik7CisJZWxzZQorCQlydGw5MnNfcGh5X3NldF9md19jbWQoaHcsIEZXX0NNRF9SQV9SRUZSRVNIX0JHKTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUkFUUiwgREJHX0RNRVNHLAorCQkgKCIleFxuIiwgcnRsX3JlYWRfZHdvcmQocnRscHJpdiwgQVJGUjApKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDkyc2VfdXBkYXRlX2hhbF9yYXRlX21hc2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJCQkgdTggcnNzaV9sZXZlbCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9zdGFfaW5mbyAqc3RhX2VudHJ5ID0gTlVMTDsKKwl1MzIgcmF0cl9iaXRtYXA7CisJdTggcmF0cl9pbmRleCA9IDA7CisJdTggY3VydHhid180MG1oeiA9IChzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCkKKwkJCQk/IDEgOiAwOworCXU4IGN1cnNob3J0Z2lfNDBtaHogPSAoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TR0lfNDApID8KKwkJCQkxIDogMDsKKwl1OCBjdXJzaG9ydGdpXzIwbWh6ID0gKHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwKSA/CisJCQkJMSA6IDA7CisJZW51bSB3aXJlbGVzc19tb2RlIHdpcmVsZXNzbW9kZSA9IDA7CisJYm9vbCBzaG9ydGdpID0gZmFsc2U7CisJdTMyIHJhdHJfdmFsdWUgPSAwOworCXU4IHNob3J0Z2lfcmF0ZSA9IDA7CisJdTMyIG1hc2sgPSAwOworCXUzMiBiYW5kID0gMDsKKwlib29sIGJtdWx0aWNhc3QgPSBmYWxzZTsKKwl1OCBtYWNpZCA9IDA7CisJdTggbWltb19wcyA9IElFRUU4MDIxMV9TTVBTX09GRjsKKworCXN0YV9lbnRyeSA9IChzdHJ1Y3QgcnRsX3N0YV9pbmZvICopIHN0YS0+ZHJ2X3ByaXY7CisJd2lyZWxlc3Ntb2RlID0gc3RhX2VudHJ5LT53aXJlbGVzc19tb2RlOworCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQljdXJ0eGJ3XzQwbWh6ID0gbWFjLT5id180MDsKKwllbHNlIGlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAorCQltYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJbWFjaWQgPSBzdGEtPmFpZCArIDE7CisKKwlpZiAocnRsaGFsLT5jdXJyZW50X2JhbmR0eXBlID09IEJBTkRfT05fNUcpCisJCXJhdHJfYml0bWFwID0gc3RhLT5zdXBwX3JhdGVzWzFdIDw8IDQ7CisJZWxzZQorCQlyYXRyX2JpdG1hcCA9IHN0YS0+c3VwcF9yYXRlc1swXTsKKwlyYXRyX2JpdG1hcCB8PSAoc3RhLT5odF9jYXAubWNzLnJ4X21hc2tbMV0gPDwgMjAgfAorCQkJc3RhLT5odF9jYXAubWNzLnJ4X21hc2tbMF0gPDwgMTIpOworCXN3aXRjaCAod2lyZWxlc3Ntb2RlKSB7CisJY2FzZSBXSVJFTEVTU19NT0RFX0I6CisJCWJhbmQgfD0gV0lSRUxFU1NfMTFCOworCQlyYXRyX2luZGV4ID0gUkFUUl9JTlhfV0lSRUxFU1NfQjsKKwkJaWYgKHJhdHJfYml0bWFwICYgMHgwMDAwMDAwYykKKwkJCXJhdHJfYml0bWFwICY9IDB4MDAwMDAwMGQ7CisJCWVsc2UKKwkJCXJhdHJfYml0bWFwICY9IDB4MDAwMDAwMGY7CisJCWJyZWFrOworCWNhc2UgV0lSRUxFU1NfTU9ERV9HOgorCQliYW5kIHw9IChXSVJFTEVTU18xMUcgfCBXSVJFTEVTU18xMUIpOworCQlyYXRyX2luZGV4ID0gUkFUUl9JTlhfV0lSRUxFU1NfR0I7CisKKwkJaWYgKHJzc2lfbGV2ZWwgPT0gMSkKKwkJCXJhdHJfYml0bWFwICY9IDB4MDAwMDBmMDA7CisJCWVsc2UgaWYgKHJzc2lfbGV2ZWwgPT0gMikKKwkJCXJhdHJfYml0bWFwICY9IDB4MDAwMDBmZjA7CisJCWVsc2UKKwkJCXJhdHJfYml0bWFwICY9IDB4MDAwMDBmZjU7CisJCWJyZWFrOworCWNhc2UgV0lSRUxFU1NfTU9ERV9BOgorCQliYW5kIHw9IFdJUkVMRVNTXzExQTsKKwkJcmF0cl9pbmRleCA9IFJBVFJfSU5YX1dJUkVMRVNTX0E7CisJCXJhdHJfYml0bWFwICY9IDB4MDAwMDBmZjA7CisJCWJyZWFrOworCWNhc2UgV0lSRUxFU1NfTU9ERV9OXzI0RzoKKwljYXNlIFdJUkVMRVNTX01PREVfTl81RzoKKwkJYmFuZCB8PSAoV0lSRUxFU1NfMTFOIHwgV0lSRUxFU1NfMTFHIHwgV0lSRUxFU1NfMTFCKTsKKwkJcmF0cl9pbmRleCA9IFJBVFJfSU5YX1dJUkVMRVNTX05HQjsKKworCQlpZiAobWltb19wcyA9PSBJRUVFODAyMTFfU01QU19TVEFUSUMpIHsKKwkJCWlmIChyc3NpX2xldmVsID09IDEpCisJCQkJcmF0cl9iaXRtYXAgJj0gMHgwMDA3MDAwMDsKKwkJCWVsc2UgaWYgKHJzc2lfbGV2ZWwgPT0gMikKKwkJCQlyYXRyX2JpdG1hcCAmPSAweDAwMDdmMDAwOworCQkJZWxzZQorCQkJCXJhdHJfYml0bWFwICY9IDB4MDAwN2YwMDU7CisJCX0gZWxzZSB7CisJCQlpZiAocnRscGh5LT5yZl90eXBlID09IFJGXzFUMlIgfHwKKwkJCQlydGxwaHktPnJmX3R5cGUgPT0gUkZfMVQxUikgeworCQkJCWlmIChyc3NpX2xldmVsID09IDEpIHsKKwkJCQkJCXJhdHJfYml0bWFwICY9IDB4MDAwZjAwMDA7CisJCQkJfSBlbHNlIGlmIChyc3NpX2xldmVsID09IDMpIHsKKwkJCQkJcmF0cl9iaXRtYXAgJj0gMHgwMDBmYzAwMDsKKwkJCQl9IGVsc2UgaWYgKHJzc2lfbGV2ZWwgPT0gNSkgeworCQkJCQkJcmF0cl9iaXRtYXAgJj0gMHgwMDBmZjAwMDsKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoY3VydHhid180MG1oeikKKwkJCQkJCXJhdHJfYml0bWFwICY9IDB4MDAwZmYwMTU7CisJCQkJCWVsc2UKKwkJCQkJCXJhdHJfYml0bWFwICY9IDB4MDAwZmYwMDU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAocnNzaV9sZXZlbCA9PSAxKSB7CisJCQkJCXJhdHJfYml0bWFwICY9IDB4MGY4ZjAwMDA7CisJCQkJfSBlbHNlIGlmIChyc3NpX2xldmVsID09IDMpIHsKKwkJCQkJcmF0cl9iaXRtYXAgJj0gMHgwZjhmYzAwMDsKKwkJCQl9IGVsc2UgaWYgKHJzc2lfbGV2ZWwgPT0gNSkgeworCQkJCQlyYXRyX2JpdG1hcCAmPSAweDBmOGZmMDAwOworCQkJCX0gZWxzZSB7CisJCQkJCWlmIChjdXJ0eGJ3XzQwbWh6KQorCQkJCQkJcmF0cl9iaXRtYXAgJj0gMHgwZjhmZjAxNTsKKwkJCQkJZWxzZQorCQkJCQkJcmF0cl9iaXRtYXAgJj0gMHgwZjhmZjAwNTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAoKGN1cnR4YndfNDBtaHogJiYgY3Vyc2hvcnRnaV80MG1oeikgfHwKKwkJICAgICghY3VydHhid180MG1oeiAmJiBjdXJzaG9ydGdpXzIwbWh6KSkgeworCQkJaWYgKG1hY2lkID09IDApCisJCQkJc2hvcnRnaSA9IHRydWU7CisJCQllbHNlIGlmIChtYWNpZCA9PSAxKQorCQkJCXNob3J0Z2kgPSBmYWxzZTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQliYW5kIHw9IChXSVJFTEVTU18xMU4gfCBXSVJFTEVTU18xMUcgfCBXSVJFTEVTU18xMUIpOworCQlyYXRyX2luZGV4ID0gUkFUUl9JTlhfV0lSRUxFU1NfTkdCOworCisJCWlmIChydGxwaHktPnJmX3R5cGUgPT0gUkZfMVQyUikKKwkJCXJhdHJfYml0bWFwICY9IDB4MDAwZmYwZmY7CisJCWVsc2UKKwkJCXJhdHJfYml0bWFwICY9IDB4MGY4ZmYwZmY7CisJCWJyZWFrOworCX0KKworCWlmIChydGxwcml2LT5ydGxoYWwudmVyc2lvbiA+PSBWRVJTSU9OXzgxOTJTX0JDVVQpCisJCXJhdHJfYml0bWFwICY9IDB4MEZGRkZGRkY7CisJZWxzZSBpZiAocnRscHJpdi0+cnRsaGFsLnZlcnNpb24gPT0gVkVSU0lPTl84MTkyU19BQ1VUKQorCQlyYXRyX2JpdG1hcCAmPSAweDBGRkZGRkYwOworCisJaWYgKHNob3J0Z2kpIHsKKwkJcmF0cl9iaXRtYXAgfD0gMHgxMDAwMDAwMDsKKwkJLyogR2V0IE1BWCBNQ1MgYXZhaWxhYmxlLiAqLworCQlyYXRyX3ZhbHVlID0gKHJhdHJfYml0bWFwID4+IDEyKTsKKwkJZm9yIChzaG9ydGdpX3JhdGUgPSAxNTsgc2hvcnRnaV9yYXRlID4gMDsgc2hvcnRnaV9yYXRlLS0pIHsKKwkJCWlmICgoMSA8PCBzaG9ydGdpX3JhdGUpICYgcmF0cl92YWx1ZSkKKwkJCQlicmVhazsKKwkJfQorCisJCXNob3J0Z2lfcmF0ZSA9IChzaG9ydGdpX3JhdGUgPDwgMTIpIHwgKHNob3J0Z2lfcmF0ZSA8PCA4KSB8CisJCQkoc2hvcnRnaV9yYXRlIDw8IDQpIHwgKHNob3J0Z2lfcmF0ZSk7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFNHX1JBVEUsIHNob3J0Z2lfcmF0ZSk7CisJfQorCisJbWFzayB8PSAoYm11bHRpY2FzdCA/IDEgOiAwKSA8PCA5IHwgKG1hY2lkICYgMHgxZikgPDwgNCB8IChiYW5kICYgMHhmKTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUkFUUiwgREJHX1RSQUNFLCAoIm1hc2sgPSAleCwgYml0bWFwID0gJXhcbiIsCisJCQltYXNrLCByYXRyX2JpdG1hcCkpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCAweDJjNCwgcmF0cl9iaXRtYXApOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBXRk01LCAoRldfUkFfVVBEQVRFX01BU0sgfCAobWFzayA8PCA4KSkpOworCisJaWYgKG1hY2lkICE9IDApCisJCXN0YV9lbnRyeS0+cmF0cl9pbmRleCA9IHJhdHJfaW5kZXg7Cit9CisKK3ZvaWQgcnRsOTJzZV91cGRhdGVfaGFsX3JhdGVfdGJsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1OCByc3NpX2xldmVsKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCWlmIChydGxwcml2LT5kbS51c2VyYW1hc2spCisJCXJ0bDkyc2VfdXBkYXRlX2hhbF9yYXRlX21hc2soaHcsIHN0YSwgcnNzaV9sZXZlbCk7CisJZWxzZQorCQlydGw5MnNlX3VwZGF0ZV9oYWxfcmF0ZV90YWJsZShodywgc3RhKTsKK30KKwordm9pZCBydGw5MnNlX3VwZGF0ZV9jaGFubmVsX2FjY2Vzc19zZXR0aW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXUxNiBzaWZzX3RpbWVyOworCisJcnRscHJpdi0+Y2ZnLT5vcHMtPnNldF9od19yZWcoaHcsIEhXX1ZBUl9TTE9UX1RJTUUsCisJCQkJICAgICAgKHU4ICopJm1hYy0+c2xvdF90aW1lKTsKKwlzaWZzX3RpbWVyID0gMHgwZTBlOworCXJ0bHByaXYtPmNmZy0+b3BzLT5zZXRfaHdfcmVnKGh3LCBIV19WQVJfU0lGUywgKHU4ICopJnNpZnNfdGltZXIpOworCit9CisKKy8qIHRoaXMgaWZ1bmN0aW9uIGlzIGZvciBSRktJTEwsIGl0J3MgZGlmZmVyZW50IHdpdGggd2luZG93cywKKyAqIGJlY2F1c2UgVUkgd2lsbCBkaXNhYmxlIHdpcmVsZXNzIHdoZW4gR1BJTyBSYWRpbyBPZmYuCisgKiBBbmQgaGVyZSB3ZSBub3QgY2hlY2sgb3IgRGlzYWJsZS9FbmFibGUgQVNQTSBsaWtlIHdpbmRvd3MqLworYm9vbCBydGw5MnNlX2dwaW9fcmFkaW9fb25fb2ZmX2NoZWNraW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqdmFsaWQpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJZW51bSByZl9wd3JzdGF0ZSByZnB3cl90b3NldCwgY3VyX3Jmc3RhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnID0gMDsKKwlib29sIGFjdHVhbGx5c2V0ID0gZmFsc2U7CisJYm9vbCB0dXJub25ieXBvd2VyZG9tYWluID0gZmFsc2U7CisKKwkvKiBqdXN0IDgxOTFzZSBjYW4gY2hlY2sgZ3BpbyBiZWZvcmUgZmlyc3R1cCwgOTJjLzkyZCBoYXZlIGZpeGVkIGl0ICovCisJaWYgKChydGxwY2ktPnVwX2ZpcnN0X3RpbWUgPT0gMSkgfHwgKHJ0bHBjaS0+YmVpbmdfaW5pdF9hZGFwdGVyKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHBwc2MtPnN3cmZfcHJvY2Vzc2luZykKKwkJcmV0dXJuIGZhbHNlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2ssIGZsYWcpOworCWlmIChwcHNjLT5yZmNoYW5nZV9pbnByb2dyZXNzKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2ssIGZsYWcpOworCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIHsKKwkJcHBzYy0+cmZjaGFuZ2VfaW5wcm9ncmVzcyA9IHRydWU7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2ssIGZsYWcpOworCX0KKworCWN1cl9yZnN0YXRlID0gcHBzYy0+cmZwd3Jfc3RhdGU7CisKKwkvKiBiZWNhdXNlIGFmdGVyIF9ydGw5MnNfcGh5X3NldF9yZmhhbHQsIGFsbCBwb3dlcgorCSAqIGNsb3NlZCwgc28gd2UgbXVzdCBvcGVuIHNvbWUgcG93ZXIgZm9yIEdQSU8gY2hlY2ssCisJICogb3Igd2Ugd2lsbCBhbHdheXMgY2hlY2sgR1BJTyBSRk9GRiBoZXJlLAorCSAqIEFuZCB3ZSBzaG91bGQgY2xvc2UgcG93ZXIgYWZ0ZXIgR1BJTyBjaGVjayAqLworCWlmIChSVF9JTl9QU19MRVZFTChwcHNjLCBSVF9SRl9PRkZfTEVWTF9IQUxUX05JQykpIHsKKwkJX3J0bDkyc2VfcG93ZXJfZG9tYWluX2luaXQoaHcpOworCQl0dXJub25ieXBvd2VyZG9tYWluID0gdHJ1ZTsKKwl9CisKKwlyZnB3cl90b3NldCA9IF9ydGw5MnNlX3JmX29ub2ZmX2RldGVjdChodyk7CisKKwlpZiAoKHBwc2MtPmh3cmFkaW9vZmYgPT0gdHJ1ZSkgJiYgKHJmcHdyX3Rvc2V0ID09IEVSRk9OKSkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1JGLCBEQkdfRE1FU0csCisJCQkgKCJSRktJTEwtSFcgUmFkaW8gT04sIFJGIE9OXG4iKSk7CisKKwkJcmZwd3JfdG9zZXQgPSBFUkZPTjsKKwkJcHBzYy0+aHdyYWRpb29mZiA9IGZhbHNlOworCQlhY3R1YWxseXNldCA9IHRydWU7CisJfSBlbHNlIGlmICgocHBzYy0+aHdyYWRpb29mZiA9PSBmYWxzZSkgJiYgKHJmcHdyX3Rvc2V0ID09IEVSRk9GRikpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9SRiwgREJHX0RNRVNHLAorCQkJICgiUkZLSUxMLUhXIFJhZGlvIE9GRiwgUkYgT0ZGXG4iKSk7CisKKwkJcmZwd3JfdG9zZXQgPSBFUkZPRkY7CisJCXBwc2MtPmh3cmFkaW9vZmYgPSB0cnVlOworCQlhY3R1YWxseXNldCA9IHRydWU7CisJfQorCisJaWYgKGFjdHVhbGx5c2V0KSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZydGxwcml2LT5sb2Nrcy5yZl9wc19sb2NrLCBmbGFnKTsKKwkJcHBzYy0+cmZjaGFuZ2VfaW5wcm9ncmVzcyA9IGZhbHNlOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5yZl9wc19sb2NrLCBmbGFnKTsKKworCS8qIHRoaXMgbm90IGluY2x1ZGUgaWZjb25maWcgd2xhbjAgZG93biBjYXNlICovCisJLyogfSBlbHNlIGlmIChyZnB3cl90b3NldCA9PSBFUkZPRkYgfHwgY3VyX3Jmc3RhdGUgPT0gRVJGT0ZGKSB7ICovCisJfSBlbHNlIHsKKwkJLyogYmVjYXVzZSBwb3dlcl9kb21haW5faW5pdCBtYXkgYmUgaGFwcGVuIHdoZW4KKwkJICogX3J0bDkyc19waHlfc2V0X3JmaGFsdCwgdGhpcyB3aWxsIG9wZW4gc29tZSBwb3dlcnMKKwkJICogYW5kIGNhdXNlIGN1cnJlbnQgaW5jcmVhc2luZyBhYm91dCA0MCBtQSBmb3IgaXBzLAorCQkgKiByZm9mZiBhbmQgaWZjb25maWcgZG93biwgc28gd2Ugc2V0CisJCSAqIF9ydGw5MnNfcGh5X3NldF9yZmhhbHQgYWdhaW4gaGVyZSAqLworCQlpZiAocHBzYy0+cmVnX3JmcHNfbGV2ZWwgJiBSVF9SRl9PRkZfTEVWTF9IQUxUX05JQyAmJgorCQkJdHVybm9uYnlwb3dlcmRvbWFpbikgeworCQkJX3J0bDkyc19waHlfc2V0X3JmaGFsdChodyk7CisJCQlSVF9TRVRfUFNfTEVWRUwocHBzYywgUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMpOworCQl9CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2ssIGZsYWcpOworCQlwcHNjLT5yZmNoYW5nZV9pbnByb2dyZXNzID0gZmFsc2U7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLnJmX3BzX2xvY2ssIGZsYWcpOworCX0KKworCSp2YWxpZCA9IDE7CisJcmV0dXJuICFwcHNjLT5od3JhZGlvb2ZmOworCit9CisKKy8qIElzX3dlcGtleSBqdXN0IHVzZWQgZm9yIFdFUCB1c2VkIGFzIGdyb3VwICYgcGFpcndpc2Uga2V5CisgKiBpZiBwYWlyd2lzZSBpcyBBRVMgYW5nIGdyb3VwIGlzIFdFUCBJc193ZXBrZXkgPT0gZmFsc2UuKi8KK3ZvaWQgcnRsOTJzZV9zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIga2V5X2luZGV4LCB1OCAqcF9tYWNhZGRyLAorCWJvb2wgaXNfZ3JvdXAsIHU4IGVuY19hbGdvLCBib29sIGlzX3dlcGtleSwgYm9vbCBjbGVhcl9hbGwpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKwl1OCAqbWFjYWRkciA9IHBfbWFjYWRkcjsKKworCXUzMiBlbnRyeV9pZCA9IDA7CisJYm9vbCBpc19wYWlyd2lzZSA9IGZhbHNlOworCisJc3RhdGljIHU4IGNhbV9jb25zdF9hZGRyWzRdWzZdID0geworCQl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisJCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxfSwKKwkJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDJ9LAorCQl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwM30KKwl9OworCXN0YXRpYyB1OCBjYW1fY29uc3RfYnJvYWRbXSA9IHsKKwkJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorCX07CisKKwlpZiAoY2xlYXJfYWxsKSB7CisJCXU4IGlkeCA9IDA7CisJCXU4IGNhbV9vZmZzZXQgPSAwOworCQl1OCBjbGVhcl9udW1iZXIgPSA1OworCisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfRE1FU0csICgiY2xlYXJfYWxsXG4iKSk7CisKKwkJZm9yIChpZHggPSAwOyBpZHggPCBjbGVhcl9udW1iZXI7IGlkeCsrKSB7CisJCQlydGxfY2FtX21hcmtfaW52YWxpZChodywgY2FtX29mZnNldCArIGlkeCk7CisJCQlydGxfY2FtX2VtcHR5X2VudHJ5KGh3LCBjYW1fb2Zmc2V0ICsgaWR4KTsKKworCQkJaWYgKGlkeCA8IDUpIHsKKwkJCQltZW1zZXQocnRscHJpdi0+c2VjLmtleV9idWZbaWR4XSwgMCwKKwkJCQkgICAgICAgTUFYX0tFWV9MRU4pOworCQkJCXJ0bHByaXYtPnNlYy5rZXlfbGVuW2lkeF0gPSAwOworCQkJfQorCQl9CisKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGVuY19hbGdvKSB7CisJCWNhc2UgV0VQNDBfRU5DUllQVElPTjoKKwkJCWVuY19hbGdvID0gQ0FNX1dFUDQwOworCQkJYnJlYWs7CisJCWNhc2UgV0VQMTA0X0VOQ1JZUFRJT046CisJCQllbmNfYWxnbyA9IENBTV9XRVAxMDQ7CisJCQlicmVhazsKKwkJY2FzZSBUS0lQX0VOQ1JZUFRJT046CisJCQllbmNfYWxnbyA9IENBTV9US0lQOworCQkJYnJlYWs7CisJCWNhc2UgQUVTQ0NNUF9FTkNSWVBUSU9OOgorCQkJZW5jX2FsZ28gPSBDQU1fQUVTOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJCQkoInN3aXRjaCBjYXNlIG5vdCBwcm9jZXNzXG4iKSk7CisJCQllbmNfYWxnbyA9IENBTV9US0lQOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaXNfd2Vwa2V5IHx8IHJ0bHByaXYtPnNlYy51c2VfZGVmYXVsdGtleSkgeworCQkJbWFjYWRkciA9IGNhbV9jb25zdF9hZGRyW2tleV9pbmRleF07CisJCQllbnRyeV9pZCA9IGtleV9pbmRleDsKKwkJfSBlbHNlIHsKKwkJCWlmIChpc19ncm91cCkgeworCQkJCW1hY2FkZHIgPSBjYW1fY29uc3RfYnJvYWQ7CisJCQkJZW50cnlfaWQgPSBrZXlfaW5kZXg7CisJCQl9IGVsc2UgeworCQkJCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgeworCQkJCQllbnRyeV9pZCA9IHJ0bF9jYW1fZ2V0X2ZyZWVfZW50cnkoaHcsCisJCQkJCQkJCSBwX21hY2FkZHIpOworCQkJCQlpZiAoZW50cnlfaWQgPj0gIFRPVEFMX0NBTV9FTlRSWSkgeworCQkJCQkJUlRfVFJBQ0UocnRscHJpdiwKKwkJCQkJCSAgIENPTVBfU0VDLCBEQkdfRU1FUkcsCisJCQkJCQkgICAoIkNhbiBub3QgZmluZCBmcmVlIGh3IgorCQkJCQkJICAgIiBzZWN1cml0eSBjYW0gZW50cnlcbiIpKTsKKwkJCQkJCXJldHVybjsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWVudHJ5X2lkID0gQ0FNX1BBSVJXSVNFX0tFWV9QT1NJVElPTjsKKwkJCQl9CisKKwkJCQlrZXlfaW5kZXggPSBQQUlSV0lTRV9LRVlJRFg7CisJCQkJaXNfcGFpcndpc2UgPSB0cnVlOworCQkJfQorCQl9CisKKwkJaWYgKHJ0bHByaXYtPnNlYy5rZXlfbGVuW2tleV9pbmRleF0gPT0gMCkgeworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywKKwkJCQkgKCJkZWxldGUgb25lIGVudHJ5LCBlbnRyeV9pZCBpcyAlZFxuIiwKKwkJCQkgZW50cnlfaWQpKTsKKwkJCWlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKKwkJCQlydGxfY2FtX2RlbF9lbnRyeShodywgcF9tYWNhZGRyKTsKKwkJCXJ0bF9jYW1fZGVsZXRlX29uZV9lbnRyeShodywgcF9tYWNhZGRyLCBlbnRyeV9pZCk7CisJCX0gZWxzZSB7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFQywgREJHX0xPVUQsCisJCQkJICgiVGhlIGluc2VydCBLRVkgbGVuZ3RoIGlzICVkXG4iLAorCQkJCSAgcnRscHJpdi0+c2VjLmtleV9sZW5bUEFJUldJU0VfS0VZSURYXSkpOworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19MT1VELAorCQkJCSAoIlRoZSBpbnNlcnQgS0VZICBpcyAleCAleFxuIiwKKwkJCQkgIHJ0bHByaXYtPnNlYy5rZXlfYnVmWzBdWzBdLAorCQkJCSAgcnRscHJpdi0+c2VjLmtleV9idWZbMF1bMV0pKTsKKworCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywKKwkJCQkgKCJhZGQgb25lIGVudHJ5XG4iKSk7CisJCQlpZiAoaXNfcGFpcndpc2UpIHsKKwkJCQlSVF9QUklOVF9EQVRBKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfTE9VRCwKKwkJCQkgICAgICAiUGFpcndpYXNlIEtleSBjb250ZW50IDoiLAorCQkJCSAgICAgICBydGxwcml2LT5zZWMucGFpcndpc2Vfa2V5LAorCQkJCSAgICAgICBydGxwcml2LT5zZWMua2V5X2xlbltQQUlSV0lTRV9LRVlJRFhdKTsKKworCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VDLCBEQkdfRE1FU0csCisJCQkJCSAoInNldCBQYWlyd2lhc2Uga2V5XG4iKSk7CisKKwkJCQlydGxfY2FtX2FkZF9vbmVfZW50cnkoaHcsIG1hY2FkZHIsIGtleV9pbmRleCwKKwkJCQkJZW50cnlfaWQsIGVuY19hbGdvLAorCQkJCQlDQU1fQ09ORklHX05PX1VTRURLLAorCQkJCQlydGxwcml2LT5zZWMua2V5X2J1ZltrZXlfaW5kZXhdKTsKKwkJCX0gZWxzZSB7CisJCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TRUMsIERCR19ETUVTRywKKwkJCQkJICgic2V0IGdyb3VwIGtleVxuIikpOworCisJCQkJaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCQkJCXJ0bF9jYW1fYWRkX29uZV9lbnRyeShodywKKwkJCQkJCXJ0bGVmdXNlLT5kZXZfYWRkciwKKwkJCQkJCVBBSVJXSVNFX0tFWUlEWCwKKwkJCQkJCUNBTV9QQUlSV0lTRV9LRVlfUE9TSVRJT04sCisJCQkJCQllbmNfYWxnbywgQ0FNX0NPTkZJR19OT19VU0VESywKKwkJCQkJCXJ0bHByaXYtPnNlYy5rZXlfYnVmW2VudHJ5X2lkXSk7CisJCQkJfQorCisJCQkJcnRsX2NhbV9hZGRfb25lX2VudHJ5KGh3LCBtYWNhZGRyLCBrZXlfaW5kZXgsCisJCQkJCSAgICAgIGVudHJ5X2lkLCBlbmNfYWxnbywKKwkJCQkJICAgICAgQ0FNX0NPTkZJR19OT19VU0VESywKKwkJCQkJICAgICAgcnRscHJpdi0+c2VjLmtleV9idWZbZW50cnlfaWRdKTsKKwkJCX0KKworCQl9CisJfQorfQorCit2b2lkIHJ0bDkyc2Vfc3VzcGVuZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCisJcnRscGNpLT51cF9maXJzdF90aW1lID0gdHJ1ZTsKK30KKwordm9pZCBydGw5MnNlX3Jlc3VtZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXUzMiB2YWw7CisKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocnRscGNpLT5wZGV2LCAweDQwLCAmdmFsKTsKKwlpZiAoKHZhbCAmIDB4MDAwMGZmMDApICE9IDApCisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocnRscGNpLT5wZGV2LCAweDQwLAorCQkJdmFsICYgMHhmZmZmMDBmZik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvaHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTYwYTliCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvaHcuaApAQCAtMCwwICsxLDc5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19SRUFMVEVLX1BDSTkyU0VfSFdfSF9fCisjZGVmaW5lIF9fUkVBTFRFS19QQ0k5MlNFX0hXX0hfXworCisjZGVmaW5lIE1TUl9MSU5LX01BTkFHRUQgICAyCisjZGVmaW5lIE1TUl9MSU5LX05PTkUgICAgICAwCisjZGVmaW5lIE1TUl9MSU5LX1NISUZUICAgICAwCisjZGVmaW5lIE1TUl9MSU5LX0FESE9DICAgICAxCisjZGVmaW5lIE1TUl9MSU5LX01BU1RFUiAgICAzCisKK2VudW0gV0lSRUxFU1NfTkVUV09SS19UWVBFIHsKKwlXSVJFTEVTU18xMUIgPSAxLAorCVdJUkVMRVNTXzExRyA9IDIsCisJV0lSRUxFU1NfMTFBID0gNCwKKwlXSVJFTEVTU18xMU4gPSA4Cit9OworCit2b2lkIHJ0bDkyc2VfZ2V0X2h3X3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCXU4IHZhcmlhYmxlLCB1OCAqdmFsKTsKK3ZvaWQgcnRsOTJzZV9yZWFkX2VlcHJvbV9pbmZvKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJzZV9pbnRlcnJ1cHRfcmVjb2duaXplZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgIHUzMiAqaW50YSwgdTMyICppbnRiKTsKK2ludCBydGw5MnNlX2h3X2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MnNlX2NhcmRfZGlzYWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyc2VfZW5hYmxlX2ludGVycnVwdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyc2VfZGlzYWJsZV9pbnRlcnJ1cHQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworaW50IHJ0bDkyc2Vfc2V0X25ldHdvcmtfdHlwZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlKTsKK3ZvaWQgcnRsOTJzZV9zZXRfY2hlY2tfYnNzaWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgY2hlY2tfYnNzaWQpOwordm9pZCBydGw5MnNlX3NldF9tYWNfYWRkcihzdHJ1Y3QgcnRsX2lvICppbywgY29uc3QgdTggKiBhZGRyKTsKK3ZvaWQgcnRsOTJzZV9zZXRfcW9zKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgYWNpKTsKK3ZvaWQgcnRsOTJzZV9zZXRfYmVhY29uX3JlbGF0ZWRfcmVnaXN0ZXJzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJzZV9zZXRfYmVhY29uX2ludGVydmFsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJzZV91cGRhdGVfaW50ZXJydXB0X21hc2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgdTMyIGFkZF9tc3IsIHUzMiBybV9tc3IpOwordm9pZCBydGw5MnNlX3NldF9od19yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHZhcmlhYmxlLAorCQkJdTggKnZhbCk7Cit2b2lkIHJ0bDkyc2VfdXBkYXRlX2hhbF9yYXRlX3RibChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTggcnNzaV9sZXZlbCk7Cit2b2lkIHJ0bDkyc2VfdXBkYXRlX2NoYW5uZWxfYWNjZXNzX3NldHRpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworYm9vbCBydGw5MnNlX2dwaW9fcmFkaW9fb25fb2ZmX2NoZWNraW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQl1OCAqdmFsaWQpOwordm9pZCBydGw4MTkyc2VfZ3Bpb2JpdDNfY2ZnX2lucHV0bW9kZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyc2VfZW5hYmxlX2h3X3NlY3VyaXR5X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyc2Vfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJICAgICB1MzIga2V5X2luZGV4LCB1OCAqbWFjYWRkciwgYm9vbCBpc19ncm91cCwKKwkJICAgICB1OCBlbmNfYWxnbywgYm9vbCBpc193ZXBrZXksIGJvb2wgY2xlYXJfYWxsKTsKK3ZvaWQgcnRsOTJzZV9zdXNwZW5kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJzZV9yZXN1bWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvbGVkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9sZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDRmNjY2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvbGVkLmMKQEAgLTAsMCArMSwxNDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiLi4vd2lmaS5oIgorI2luY2x1ZGUgIi4uL3BjaS5oIgorI2luY2x1ZGUgInJlZy5oIgorI2luY2x1ZGUgImxlZC5oIgorCitzdGF0aWMgdm9pZCBfcnRsOTJzZV9pbml0X2xlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgIHN0cnVjdCBydGxfbGVkICpwbGVkLCBlbnVtIHJ0bF9sZWRfcGluIGxlZHBpbikKK3sKKwlwbGVkLT5odyA9IGh3OworCXBsZWQtPmxlZHBpbiA9IGxlZHBpbjsKKwlwbGVkLT5sZWRvbiA9IGZhbHNlOworfQorCit2b2lkIHJ0bDkyc2VfaW5pdF9zd19sZWRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcGNpX3ByaXYgKnBjaXByaXYgPSBydGxfcGNpcHJpdihodyk7CisJX3J0bDkyc2VfaW5pdF9sZWQoaHcsICYocGNpcHJpdi0+bGVkY3RsLnN3X2xlZDApLCBMRURfUElOX0xFRDApOworCV9ydGw5MnNlX2luaXRfbGVkKGh3LCAmKHBjaXByaXYtPmxlZGN0bC5zd19sZWQxKSwgTEVEX1BJTl9MRUQxKTsKK30KKwordm9pZCBydGw5MnNlX3N3X2xlZF9vbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHJ0bF9sZWQgKnBsZWQpCit7CisJdTggbGVkY2ZnOworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTEVELCBEQkdfTE9VRCwKKwkJICgiTGVkQWRkcjolWCBsZWRwaW49JWRcbiIsIExFRENGRywgcGxlZC0+bGVkcGluKSk7CisKKwlsZWRjZmcgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIExFRENGRyk7CisKKwlzd2l0Y2ggKHBsZWQtPmxlZHBpbikgeworCWNhc2UgTEVEX1BJTl9HUElPMDoKKwkJYnJlYWs7CisJY2FzZSBMRURfUElOX0xFRDA6CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIExFRENGRywgbGVkY2ZnICYgMHhmMCk7CisJCWJyZWFrOworCWNhc2UgTEVEX1BJTl9MRUQxOgorCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBMRURDRkcsIGxlZGNmZyAmIDB4MGYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgic3dpdGNoIGNhc2Ugbm90IHByb2Nlc3NcbiIpKTsKKwkJYnJlYWs7CisJfQorCXBsZWQtPmxlZG9uID0gdHJ1ZTsKK30KKwordm9pZCBydGw5MnNlX3N3X2xlZF9vZmYoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBydGxfbGVkICpwbGVkKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCXU4IGxlZGNmZzsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfTEVELCBEQkdfTE9VRCwKKwkJICgiTGVkQWRkcjolWCBsZWRwaW49JWRcbiIsIExFRENGRywgcGxlZC0+bGVkcGluKSk7CisKKwlsZWRjZmcgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIExFRENGRyk7CisKKwlzd2l0Y2ggKHBsZWQtPmxlZHBpbikgeworCWNhc2UgTEVEX1BJTl9HUElPMDoKKwkJYnJlYWs7CisJY2FzZSBMRURfUElOX0xFRDA6CisJCWxlZGNmZyAmPSAweGYwOworCQlpZiAocGNpcHJpdi0+bGVkY3RsLmxlZF9vcGVuZHJhaW4gPT0gdHJ1ZSkKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIExFRENGRywgKGxlZGNmZyB8IEJJVCgxKSkpOworCQllbHNlCisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBMRURDRkcsIChsZWRjZmcgfCBCSVQoMykpKTsKKwkJYnJlYWs7CisJY2FzZSBMRURfUElOX0xFRDE6CisJCWxlZGNmZyAmPSAweDBmOworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBMRURDRkcsIChsZWRjZmcgfCBCSVQoMykpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoInN3aXRjaCBjYXNlIG5vdCBwcm9jZXNzXG4iKSk7CisJCWJyZWFrOworCX0KKwlwbGVkLT5sZWRvbiA9IGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzZV9zd19sZWRfY29udHJvbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgZW51bSBsZWRfY3RsX21vZGUgbGVkYWN0aW9uKQoreworCXN0cnVjdCBydGxfcGNpX3ByaXYgKnBjaXByaXYgPSBydGxfcGNpcHJpdihodyk7CisJc3RydWN0IHJ0bF9sZWQgKnBMZWQwID0gJihwY2lwcml2LT5sZWRjdGwuc3dfbGVkMCk7CisJc3dpdGNoIChsZWRhY3Rpb24pIHsKKwljYXNlIExFRF9DVExfUE9XRVJfT046CisJY2FzZSBMRURfQ1RMX0xJTks6CisJY2FzZSBMRURfQ1RMX05PX0xJTks6CisJCXJ0bDkyc2Vfc3dfbGVkX29uKGh3LCBwTGVkMCk7CisJCWJyZWFrOworCWNhc2UgTEVEX0NUTF9QT1dFUl9PRkY6CisJCXJ0bDkyc2Vfc3dfbGVkX29mZihodywgcExlZDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3ZvaWQgcnRsOTJzZV9sZWRfY29udHJvbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBsZWRfY3RsX21vZGUgbGVkYWN0aW9uKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BzX2N0bCAqcHBzYyA9IHJ0bF9wc2MocnRsX3ByaXYoaHcpKTsKKworCWlmICgocHBzYy0+cmZvZmZfcmVhc29uID4gUkZfQ0hBTkdFX0JZX1BTKSAmJgorCSAgICAobGVkYWN0aW9uID09IExFRF9DVExfVFggfHwKKwkgICAgbGVkYWN0aW9uID09IExFRF9DVExfUlggfHwKKwkgICAgbGVkYWN0aW9uID09IExFRF9DVExfU0lURV9TVVJWRVkgfHwKKwkgICAgbGVkYWN0aW9uID09IExFRF9DVExfTElOSyB8fAorCSAgICBsZWRhY3Rpb24gPT0gTEVEX0NUTF9OT19MSU5LIHx8CisJICAgIGxlZGFjdGlvbiA9PSBMRURfQ1RMX1NUQVJUX1RPX0xJTksgfHwKKwkgICAgbGVkYWN0aW9uID09IExFRF9DVExfUE9XRVJfT04pKSB7CisJCXJldHVybjsKKwl9CisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9MRUQsIERCR19MT1VELCAoImxlZGFjdGlvbiAlZCxcbiIsCisJCSBsZWRhY3Rpb24pKTsKKworCV9ydGw5MnNlX3N3X2xlZF9jb250cm9sKGh3LCBsZWRhY3Rpb24pOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tbGVkLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9sZWQuaApzaW1pbGFyaXR5IGluZGV4IDYyJQpjb3B5IGZyb20gZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWxlZC5oCmNvcHkgdG8gZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvbGVkLmgKaW5kZXggOTZmMzIzZC4uOGNjZTM4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWxlZC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL2xlZC5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0xOSwxNSArMTksMTkgQEAKICAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCiAgKgogICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KLSAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19SRUFMVEVLX1BDSTkyU0VfTEVEX0hfXworI2RlZmluZSBfX1JFQUxURUtfUENJOTJTRV9MRURfSF9fCiAKLSNpZm5kZWYgX19pd2xfYWduX2xlZF9oX18KLSNkZWZpbmUgX19pd2xfYWduX2xlZF9oX18KK3ZvaWQgcnRsOTJzZV9pbml0X3N3X2xlZHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MnNlX3N3X2xlZF9vbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywJc3RydWN0IHJ0bF9sZWQgKnBsZWQpOwordm9pZCBydGw5MnNlX3N3X2xlZF9vZmYoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBydGxfbGVkICpwbGVkKTsKK3ZvaWQgcnRsOTJzZV9sZWRfY29udHJvbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBsZWRfY3RsX21vZGUgbGVkYWN0aW9uKTsKIAotZXh0ZXJuIGNvbnN0IHN0cnVjdCBpd2xfbGVkX29wcyBpd2xhZ25fbGVkX29wczsKLXZvaWQgaXdsYWduX2xlZF9lbmFibGUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKLQotI2VuZGlmIC8qIF9faXdsX2Fnbl9sZWRfaF9fICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvcGh5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNiNDVlNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL3BoeS5jCkBAIC0wLDAgKzEsMTc0MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICIuLi93aWZpLmgiCisjaW5jbHVkZSAiLi4vcGNpLmgiCisjaW5jbHVkZSAiLi4vcHMuaCIKKyNpbmNsdWRlICJyZWcuaCIKKyNpbmNsdWRlICJkZWYuaCIKKyNpbmNsdWRlICJwaHkuaCIKKyNpbmNsdWRlICJyZi5oIgorI2luY2x1ZGUgImRtLmgiCisjaW5jbHVkZSAiZncuaCIKKyNpbmNsdWRlICJody5oIgorI2luY2x1ZGUgInRhYmxlLmgiCisKK3N0YXRpYyB1MzIgX3J0bDkyc19waHlfY2FsY3VsYXRlX2JpdF9zaGlmdCh1MzIgYml0bWFzaykKK3sKKwl1MzIgaTsKKworCWZvciAoaSA9IDA7IGkgPD0gMzE7IGkrKykgeworCQlpZiAoKChiaXRtYXNrID4+IGkpICYgMHgxKSA9PSAxKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGk7Cit9CisKK3UzMiBydGw5MnNfcGh5X3F1ZXJ5X2JiX3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MzIgcmV0dXJudmFsdWUgPSAwLCBvcmlnaW5hbHZhbHVlLCBiaXRzaGlmdDsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUkYsIERCR19UUkFDRSwgKCJyZWdhZGRyKCUjeCksIGJpdG1hc2soJSN4KVxuIiwKKwkJCXJlZ2FkZHIsIGJpdG1hc2spKTsKKworCW9yaWdpbmFsdmFsdWUgPSBydGxfcmVhZF9kd29yZChydGxwcml2LCByZWdhZGRyKTsKKwliaXRzaGlmdCA9IF9ydGw5MnNfcGh5X2NhbGN1bGF0ZV9iaXRfc2hpZnQoYml0bWFzayk7CisJcmV0dXJudmFsdWUgPSAob3JpZ2luYWx2YWx1ZSAmIGJpdG1hc2spID4+IGJpdHNoaWZ0OworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9SRiwgREJHX1RSQUNFLAorCQkgKCJCQlIgTUFTSz0weCV4IEFkZHJbMHgleF09MHgleFxuIiwKKwkJIGJpdG1hc2ssIHJlZ2FkZHIsIG9yaWdpbmFsdmFsdWUpKTsKKworCXJldHVybiByZXR1cm52YWx1ZTsKKworfQorCit2b2lkIHJ0bDkyc19waHlfc2V0X2JiX3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrLAorCQkJICAgdTMyIGRhdGEpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXUzMiBvcmlnaW5hbHZhbHVlLCBiaXRzaGlmdDsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUkYsIERCR19UUkFDRSwgKCJyZWdhZGRyKCUjeCksIGJpdG1hc2soJSN4KSwiCisJCQkiIGRhdGEoJSN4KVxuIiwgcmVnYWRkciwgYml0bWFzaywgZGF0YSkpOworCisJaWYgKGJpdG1hc2sgIT0gTUFTS0RXT1JEKSB7CisJCW9yaWdpbmFsdmFsdWUgPSBydGxfcmVhZF9kd29yZChydGxwcml2LCByZWdhZGRyKTsKKwkJYml0c2hpZnQgPSBfcnRsOTJzX3BoeV9jYWxjdWxhdGVfYml0X3NoaWZ0KGJpdG1hc2spOworCQlkYXRhID0gKChvcmlnaW5hbHZhbHVlICYgKH5iaXRtYXNrKSkgfCAoZGF0YSA8PCBiaXRzaGlmdCkpOworCX0KKworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCByZWdhZGRyLCBkYXRhKTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUkYsIERCR19UUkFDRSwgKCJyZWdhZGRyKCUjeCksIGJpdG1hc2soJSN4KSwiCisJCQkiIGRhdGEoJSN4KVxuIiwJcmVnYWRkciwgYml0bWFzaywgZGF0YSkpOworCit9CisKK3N0YXRpYyB1MzIgX3J0bDkyc19waHlfcmZfc2VyaWFsX3JlYWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgZW51bSByYWRpb19wYXRoIHJmcGF0aCwgdTMyIG9mZnNldCkKK3sKKworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCXN0cnVjdCBiYl9yZWdfZGVmICpwcGh5cmVnID0gJnJ0bHBoeS0+cGh5cmVnX2RlZltyZnBhdGhdOworCXUzMiBuZXdvZmZzZXQ7CisJdTMyIHRtcGxvbmcsIHRtcGxvbmcyOworCXU4IHJmcGlfZW5hYmxlID0gMDsKKwl1MzIgcmV0dmFsdWUgPSAwOworCisJb2Zmc2V0ICY9IDB4M2Y7CisJbmV3b2Zmc2V0ID0gb2Zmc2V0OworCisJdG1wbG9uZyA9IHJ0bF9nZXRfYmJyZWcoaHcsIFJGUEdBMF9YQV9IU1NJUEFSQU1FVEVSMiwgTUFTS0RXT1JEKTsKKworCWlmIChyZnBhdGggPT0gUkY5MF9QQVRIX0EpCisJCXRtcGxvbmcyID0gdG1wbG9uZzsKKwllbHNlCisJCXRtcGxvbmcyID0gcnRsX2dldF9iYnJlZyhodywgcHBoeXJlZy0+cmZoc3NpX3BhcmEyLCBNQVNLRFdPUkQpOworCisJdG1wbG9uZzIgPSAodG1wbG9uZzIgJiAofkJMU1NJX1JFQURBRERSRVNTKSkgfCAobmV3b2Zmc2V0IDw8IDIzKSB8CisJCQlCTFNTSV9SRUFERURHRTsKKworCXJ0bF9zZXRfYmJyZWcoaHcsIFJGUEdBMF9YQV9IU1NJUEFSQU1FVEVSMiwgTUFTS0RXT1JELAorCQkgICAgICB0bXBsb25nICYgKH5CTFNTSV9SRUFERURHRSkpOworCisJbWRlbGF5KDEpOworCisJcnRsX3NldF9iYnJlZyhodywgcHBoeXJlZy0+cmZoc3NpX3BhcmEyLCBNQVNLRFdPUkQsIHRtcGxvbmcyKTsKKwltZGVsYXkoMSk7CisKKwlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfWEFfSFNTSVBBUkFNRVRFUjIsIE1BU0tEV09SRCwgdG1wbG9uZyB8CisJCSAgICAgIEJMU1NJX1JFQURFREdFKTsKKwltZGVsYXkoMSk7CisKKwlpZiAocmZwYXRoID09IFJGOTBfUEFUSF9BKQorCQlyZnBpX2VuYWJsZSA9ICh1OClydGxfZ2V0X2JicmVnKGh3LCBSRlBHQTBfWEFfSFNTSVBBUkFNRVRFUjEsCisJCQkJCQlCSVQoOCkpOworCWVsc2UgaWYgKHJmcGF0aCA9PSBSRjkwX1BBVEhfQikKKwkJcmZwaV9lbmFibGUgPSAodTgpcnRsX2dldF9iYnJlZyhodywgUkZQR0EwX1hCX0hTU0lQQVJBTUVURVIxLAorCQkJCQkJQklUKDgpKTsKKworCWlmIChyZnBpX2VuYWJsZSkKKwkJcmV0dmFsdWUgPSBydGxfZ2V0X2JicmVnKGh3LCBwcGh5cmVnLT5yZmxzc2lfcmVhZGJhY2twaSwKKwkJCQkJIEJMU1NJX1JFQURCQUNLX0RBVEEpOworCWVsc2UKKwkJcmV0dmFsdWUgPSBydGxfZ2V0X2JicmVnKGh3LCBwcGh5cmVnLT5yZmxzc2lfcmVhZGJhY2ssCisJCQkJCSBCTFNTSV9SRUFEQkFDS19EQVRBKTsKKworCXJldHZhbHVlID0gcnRsX2dldF9iYnJlZyhodywgcHBoeXJlZy0+cmZsc3NpX3JlYWRiYWNrLAorCQkJCSBCTFNTSV9SRUFEQkFDS19EQVRBKTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUkYsIERCR19UUkFDRSwgKCJSRlItJWQgQWRkclsweCV4XT0weCV4XG4iLAorCQkgcmZwYXRoLCBwcGh5cmVnLT5yZmxzc2lfcmVhZGJhY2ssIHJldHZhbHVlKSk7CisKKwlyZXR1cm4gcmV0dmFsdWU7CisKK30KKworc3RhdGljIHZvaWQgX3J0bDkyc19waHlfcmZfc2VyaWFsX3dyaXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQllbnVtIHJhZGlvX3BhdGggcmZwYXRoLCB1MzIgb2Zmc2V0LAorCQkJCQl1MzIgZGF0YSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3QgYmJfcmVnX2RlZiAqcHBoeXJlZyA9ICZydGxwaHktPnBoeXJlZ19kZWZbcmZwYXRoXTsKKwl1MzIgZGF0YV9hbmRfYWRkciA9IDA7CisJdTMyIG5ld29mZnNldDsKKworCW9mZnNldCAmPSAweDNmOworCW5ld29mZnNldCA9IG9mZnNldDsKKworCWRhdGFfYW5kX2FkZHIgPSAoKG5ld29mZnNldCA8PCAyMCkgfCAoZGF0YSAmIDB4MDAwZmZmZmYpKSAmIDB4MGZmZmZmZmY7CisJcnRsX3NldF9iYnJlZyhodywgcHBoeXJlZy0+cmYzd2lyZV9vZmZzZXQsIE1BU0tEV09SRCwgZGF0YV9hbmRfYWRkcik7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX1JGLCBEQkdfVFJBQ0UsICgiUkZXLSVkIEFkZHJbMHgleF09MHgleFxuIiwKKwkJIHJmcGF0aCwgcHBoeXJlZy0+cmYzd2lyZV9vZmZzZXQsIGRhdGFfYW5kX2FkZHIpKTsKK30KKworCit1MzIgcnRsOTJzX3BoeV9xdWVyeV9yZl9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsCisJCQkgICAgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MzIgb3JpZ2luYWxfdmFsdWUsIHJlYWRiYWNrX3ZhbHVlLCBiaXRzaGlmdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9SRiwgREJHX1RSQUNFLCAoInJlZ2FkZHIoJSN4KSwgcmZwYXRoKCUjeCksICIKKwkJICJiaXRtYXNrKCUjeClcbiIsIHJlZ2FkZHIsIHJmcGF0aCwgYml0bWFzaykpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0bHByaXYtPmxvY2tzLnJmX2xvY2ssIGZsYWdzKTsKKworCW9yaWdpbmFsX3ZhbHVlID0gX3J0bDkyc19waHlfcmZfc2VyaWFsX3JlYWQoaHcsIHJmcGF0aCwgcmVnYWRkcik7CisKKwliaXRzaGlmdCA9IF9ydGw5MnNfcGh5X2NhbGN1bGF0ZV9iaXRfc2hpZnQoYml0bWFzayk7CisJcmVhZGJhY2tfdmFsdWUgPSAob3JpZ2luYWxfdmFsdWUgJiBiaXRtYXNrKSA+PiBiaXRzaGlmdDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLnJmX2xvY2ssIGZsYWdzKTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUkYsIERCR19UUkFDRSwgKCJyZWdhZGRyKCUjeCksIHJmcGF0aCglI3gpLCAiCisJCSAiYml0bWFzayglI3gpLCBvcmlnaW5hbF92YWx1ZSglI3gpXG4iLCByZWdhZGRyLCByZnBhdGgsCisJCSBiaXRtYXNrLCBvcmlnaW5hbF92YWx1ZSkpOworCisJcmV0dXJuIHJlYWRiYWNrX3ZhbHVlOworfQorCit2b2lkIHJ0bDkyc19waHlfc2V0X3JmX3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSByYWRpb19wYXRoIHJmcGF0aCwKKwkJCSAgIHUzMiByZWdhZGRyLCB1MzIgYml0bWFzaywgdTMyIGRhdGEpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJdTMyIG9yaWdpbmFsX3ZhbHVlLCBiaXRzaGlmdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCEoKHJ0bHBoeS0+cmZfcGF0aG1hcCA+PiByZnBhdGgpICYgMHgxKSkKKwkJcmV0dXJuOworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9SRiwgREJHX1RSQUNFLCAoInJlZ2FkZHIoJSN4KSwgYml0bWFzayglI3gpLCIKKwkJICIgZGF0YSglI3gpLCByZnBhdGgoJSN4KVxuIiwgcmVnYWRkciwgYml0bWFzaywgZGF0YSwgcmZwYXRoKSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnRscHJpdi0+bG9ja3MucmZfbG9jaywgZmxhZ3MpOworCisJaWYgKGJpdG1hc2sgIT0gUkZSRUdfT0ZGU0VUX01BU0spIHsKKwkJb3JpZ2luYWxfdmFsdWUgPSBfcnRsOTJzX3BoeV9yZl9zZXJpYWxfcmVhZChodywgcmZwYXRoLAorCQkJCQkJCSAgICByZWdhZGRyKTsKKwkJYml0c2hpZnQgPSBfcnRsOTJzX3BoeV9jYWxjdWxhdGVfYml0X3NoaWZ0KGJpdG1hc2spOworCQlkYXRhID0gKChvcmlnaW5hbF92YWx1ZSAmICh+Yml0bWFzaykpIHwgKGRhdGEgPDwgYml0c2hpZnQpKTsKKwl9CisKKwlfcnRsOTJzX3BoeV9yZl9zZXJpYWxfd3JpdGUoaHcsIHJmcGF0aCwgcmVnYWRkciwgZGF0YSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5yZl9sb2NrLCBmbGFncyk7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX1JGLCBEQkdfVFJBQ0UsICgicmVnYWRkciglI3gpLCBiaXRtYXNrKCUjeCksICIKKwkJICJkYXRhKCUjeCksIHJmcGF0aCglI3gpXG4iLCByZWdhZGRyLCBiaXRtYXNrLCBkYXRhLCByZnBhdGgpKTsKKworfQorCit2b2lkIHJ0bDkyc19waHlfc2Nhbl9vcGVyYXRpb25fYmFja3VwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgIHU4IG9wZXJhdGlvbikKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKworCWlmICghaXNfaGFsX3N0b3AocnRsaGFsKSkgeworCQlzd2l0Y2ggKG9wZXJhdGlvbikgeworCQljYXNlIFNDQU5fT1BUX0JBQ0tVUDoKKwkJCXJ0bDkyc19waHlfc2V0X2Z3X2NtZChodywgRldfQ01EX1BBVVNFX0RNX0JZX1NDQU4pOworCQkJYnJlYWs7CisJCWNhc2UgU0NBTl9PUFRfUkVTVE9SRToKKwkJCXJ0bDkyc19waHlfc2V0X2Z3X2NtZChodywgRldfQ01EX1JFU1VNRV9ETV9CWV9TQ0FOKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCQkgKCJVbmtub3duIG9wZXJhdGlvbi5cbiIpKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCit2b2lkIHJ0bDkyc19waHlfc2V0X2J3X21vZGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaF90eXBlKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwl1OCByZWdfYndfb3Btb2RlOworCXU4IHJlZ19wcnNyX3JzYzsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0NBTiwgREJHX1RSQUNFLCAoIlN3aXRjaCB0byAlcyBiYW5kd2lkdGhcbiIsCisJCSAgcnRscGh5LT5jdXJyZW50X2NoYW5fYncgPT0gSFRfQ0hBTk5FTF9XSURUSF8yMCA/CisJCSAgIjIwTUh6IiA6ICI0ME1IeiIpKTsKKworCWlmIChydGxwaHktPnNldF9id21vZGVfaW5wcm9ncmVzcykKKwkJcmV0dXJuOworCWlmIChpc19oYWxfc3RvcChydGxoYWwpKQorCQlyZXR1cm47CisKKwlydGxwaHktPnNldF9id21vZGVfaW5wcm9ncmVzcyA9IHRydWU7CisKKwlyZWdfYndfb3Btb2RlID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBCV19PUE1PREUpOworCXJlZ19wcnNyX3JzYyA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUlJTUiArIDIpOworCisJc3dpdGNoIChydGxwaHktPmN1cnJlbnRfY2hhbl9idykgeworCWNhc2UgSFRfQ0hBTk5FTF9XSURUSF8yMDoKKwkJcmVnX2J3X29wbW9kZSB8PSBCV19PUE1PREVfMjBNSFo7CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIEJXX09QTU9ERSwgcmVnX2J3X29wbW9kZSk7CisJCWJyZWFrOworCWNhc2UgSFRfQ0hBTk5FTF9XSURUSF8yMF80MDoKKwkJcmVnX2J3X29wbW9kZSAmPSB+QldfT1BNT0RFXzIwTUhaOworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBCV19PUE1PREUsIHJlZ19id19vcG1vZGUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAorCQkJICgidW5rbm93biBiYW5kd2lkdGg6ICUjWFxuIiwKKwkJCSBydGxwaHktPmN1cnJlbnRfY2hhbl9idykpOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKHJ0bHBoeS0+Y3VycmVudF9jaGFuX2J3KSB7CisJY2FzZSBIVF9DSEFOTkVMX1dJRFRIXzIwOgorCQlydGxfc2V0X2JicmVnKGh3LCBSRlBHQTBfUkZNT0QsIEJSRk1PRCwgMHgwKTsKKwkJcnRsX3NldF9iYnJlZyhodywgUkZQR0ExX1JGTU9ELCBCUkZNT0QsIDB4MCk7CisKKwkJaWYgKHJ0bGhhbC0+dmVyc2lvbiA+PSBWRVJTSU9OXzgxOTJTX0JDVVQpCisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRlBHQTBfQU5BTE9HUEFSQU1FVEVSMiwgMHg1OCk7CisJCWJyZWFrOworCWNhc2UgSFRfQ0hBTk5FTF9XSURUSF8yMF80MDoKKwkJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX1JGTU9ELCBCUkZNT0QsIDB4MSk7CisJCXJ0bF9zZXRfYmJyZWcoaHcsIFJGUEdBMV9SRk1PRCwgQlJGTU9ELCAweDEpOworCisJCXJ0bF9zZXRfYmJyZWcoaHcsIFJDQ0swX1NZU1RFTSwgQkNDS19TSURFQkFORCwKKwkJCQkobWFjLT5jdXJfNDBfcHJpbWVfc2MgPj4gMSkpOworCQlydGxfc2V0X2JicmVnKGh3LCBST0ZETTFfTFNURiwgMHhDMDAsIG1hYy0+Y3VyXzQwX3ByaW1lX3NjKTsKKworCQlpZiAocnRsaGFsLT52ZXJzaW9uID49IFZFUlNJT05fODE5MlNfQkNVVCkKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJGUEdBMF9BTkFMT0dQQVJBTUVURVIyLCAweDE4KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoInVua25vd24gYmFuZHdpZHRoOiAlI1hcbiIsIHJ0bHBoeS0+Y3VycmVudF9jaGFuX2J3KSk7CisJCWJyZWFrOworCX0KKworCXJ0bDkyc19waHlfcmY2MDUyX3NldF9iYW5kd2lkdGgoaHcsIHJ0bHBoeS0+Y3VycmVudF9jaGFuX2J3KTsKKwlydGxwaHktPnNldF9id21vZGVfaW5wcm9ncmVzcyA9IGZhbHNlOworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0NBTiwgREJHX1RSQUNFLCAoIjw9PVxuIikpOworfQorCitzdGF0aWMgYm9vbCBfcnRsOTJzX3BoeV9zZXRfc3dfY2hubF9jbWRhcnJheShzdHJ1Y3Qgc3djaG5sY21kICpjbWR0YWJsZSwKKwkJdTMyIGNtZHRhYmxlaWR4LCB1MzIgY21kdGFibGVzeiwgZW51bSBzd2NobmxjbWRfaWQgY21kaWQsCisJCXUzMiBwYXJhMSwgdTMyIHBhcmEyLCB1MzIgbXNkZWxheSkKK3sKKwlzdHJ1Y3Qgc3djaG5sY21kICpwY21kOworCisJaWYgKGNtZHRhYmxlID09IE5VTEwpIHsKKwkJUlRfQVNTRVJUKGZhbHNlLCAoImNtZHRhYmxlIGNhbm5vdCBiZSBOVUxMLlxuIikpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKGNtZHRhYmxlaWR4ID49IGNtZHRhYmxlc3opCisJCXJldHVybiBmYWxzZTsKKworCXBjbWQgPSBjbWR0YWJsZSArIGNtZHRhYmxlaWR4OworCXBjbWQtPmNtZGlkID0gY21kaWQ7CisJcGNtZC0+cGFyYTEgPSBwYXJhMTsKKwlwY21kLT5wYXJhMiA9IHBhcmEyOworCXBjbWQtPm1zZGVsYXkgPSBtc2RlbGF5OworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIF9ydGw5MnNfcGh5X3N3X2Nobmxfc3RlcF9ieV9zdGVwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCSAgICAgdTggY2hhbm5lbCwgdTggKnN0YWdlLCB1OCAqc3RlcCwgdTMyICpkZWxheSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3Qgc3djaG5sY21kIHByZWNvbW1vbmNtZFtNQVhfUFJFQ01EX0NOVF07CisJdTMyIHByZWNvbW1vbmNtZGNudDsKKwlzdHJ1Y3Qgc3djaG5sY21kIHBvc3Rjb21tb25jbWRbTUFYX1BPU1RDTURfQ05UXTsKKwl1MzIgcG9zdGNvbW1vbmNtZGNudDsKKwlzdHJ1Y3Qgc3djaG5sY21kIHJmZGVwZW5kY21kW01BWF9SRkRFUEVORENNRF9DTlRdOworCXUzMiByZmRlcGVuZGNtZGNudDsKKwlzdHJ1Y3Qgc3djaG5sY21kICpjdXJyZW50Y21kID0gTlVMTDsKKwl1OCByZnBhdGg7CisJdTggbnVtX3RvdGFsX3JmcGF0aCA9IHJ0bHBoeS0+bnVtX3RvdGFsX3JmcGF0aDsKKworCXByZWNvbW1vbmNtZGNudCA9IDA7CisJX3J0bDkyc19waHlfc2V0X3N3X2NobmxfY21kYXJyYXkocHJlY29tbW9uY21kLCBwcmVjb21tb25jbWRjbnQrKywKKwkJCU1BWF9QUkVDTURfQ05ULCBDTURJRF9TRVRfVFhQT1dFUk9XRVJfTEVWRUwsIDAsIDAsIDApOworCV9ydGw5MnNfcGh5X3NldF9zd19jaG5sX2NtZGFycmF5KHByZWNvbW1vbmNtZCwgcHJlY29tbW9uY21kY250KyssCisJCQlNQVhfUFJFQ01EX0NOVCwgQ01ESURfRU5ELCAwLCAwLCAwKTsKKworCXBvc3Rjb21tb25jbWRjbnQgPSAwOworCisJX3J0bDkyc19waHlfc2V0X3N3X2NobmxfY21kYXJyYXkocG9zdGNvbW1vbmNtZCwgcG9zdGNvbW1vbmNtZGNudCsrLAorCQkJTUFYX1BPU1RDTURfQ05ULCBDTURJRF9FTkQsIDAsIDAsIDApOworCisJcmZkZXBlbmRjbWRjbnQgPSAwOworCisJUlRfQVNTRVJUKChjaGFubmVsID49IDEgJiYgY2hhbm5lbCA8PSAxNCksCisJCSAgKCJpbGxlZ2FsIGNoYW5uZWwgZm9yIFplYnJhOiAlZFxuIiwgY2hhbm5lbCkpOworCisJX3J0bDkyc19waHlfc2V0X3N3X2NobmxfY21kYXJyYXkocmZkZXBlbmRjbWQsIHJmZGVwZW5kY21kY250KyssCisJCQkJCSBNQVhfUkZERVBFTkRDTURfQ05ULCBDTURJRF9SRl9XUklURVJFRywKKwkJCQkJIFJGX0NITkxCVywgY2hhbm5lbCwgMTApOworCisJX3J0bDkyc19waHlfc2V0X3N3X2NobmxfY21kYXJyYXkocmZkZXBlbmRjbWQsIHJmZGVwZW5kY21kY250KyssCisJCQlNQVhfUkZERVBFTkRDTURfQ05ULCBDTURJRF9FTkQsIDAsIDAsIDApOworCisJZG8geworCQlzd2l0Y2ggKCpzdGFnZSkgeworCQljYXNlIDA6CisJCQljdXJyZW50Y21kID0gJnByZWNvbW1vbmNtZFsqc3RlcF07CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJY3VycmVudGNtZCA9ICZyZmRlcGVuZGNtZFsqc3RlcF07CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJY3VycmVudGNtZCA9ICZwb3N0Y29tbW9uY21kWypzdGVwXTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGN1cnJlbnRjbWQtPmNtZGlkID09IENNRElEX0VORCkgeworCQkJaWYgKCgqc3RhZ2UpID09IDIpIHsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0gZWxzZSB7CisJCQkJKCpzdGFnZSkrKzsKKwkJCQkoKnN0ZXApID0gMDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCisJCXN3aXRjaCAoY3VycmVudGNtZC0+Y21kaWQpIHsKKwkJY2FzZSBDTURJRF9TRVRfVFhQT1dFUk9XRVJfTEVWRUw6CisJCQlydGw5MnNfcGh5X3NldF90eHBvd2VyKGh3LCBjaGFubmVsKTsKKwkJCWJyZWFrOworCQljYXNlIENNRElEX1dSSVRFUE9SVF9VTE9ORzoKKwkJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBjdXJyZW50Y21kLT5wYXJhMSwKKwkJCQkJY3VycmVudGNtZC0+cGFyYTIpOworCQkJYnJlYWs7CisJCWNhc2UgQ01ESURfV1JJVEVQT1JUX1VTSE9SVDoKKwkJCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIGN1cnJlbnRjbWQtPnBhcmExLAorCQkJCSAgICAgICAodTE2KWN1cnJlbnRjbWQtPnBhcmEyKTsKKwkJCWJyZWFrOworCQljYXNlIENNRElEX1dSSVRFUE9SVF9VQ0hBUjoKKwkJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIGN1cnJlbnRjbWQtPnBhcmExLAorCQkJCSAgICAgICAodTgpY3VycmVudGNtZC0+cGFyYTIpOworCQkJYnJlYWs7CisJCWNhc2UgQ01ESURfUkZfV1JJVEVSRUc6CisJCQlmb3IgKHJmcGF0aCA9IDA7IHJmcGF0aCA8IG51bV90b3RhbF9yZnBhdGg7IHJmcGF0aCsrKSB7CisJCQkJcnRscGh5LT5yZnJlZ19jaG5sdmFsW3JmcGF0aF0gPQorCQkJCQkgKChydGxwaHktPnJmcmVnX2Nobmx2YWxbcmZwYXRoXSAmCisJCQkJCSAweGZmZmZmYzAwKSB8IGN1cnJlbnRjbWQtPnBhcmEyKTsKKwkJCQlydGxfc2V0X3JmcmVnKGh3LCAoZW51bSByYWRpb19wYXRoKXJmcGF0aCwKKwkJCQkJICAgICAgY3VycmVudGNtZC0+cGFyYTEsCisJCQkJCSAgICAgIFJGUkVHX09GRlNFVF9NQVNLLAorCQkJCQkgICAgICBydGxwaHktPnJmcmVnX2Nobmx2YWxbcmZwYXRoXSk7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkJICgic3dpdGNoIGNhc2Ugbm90IHByb2Nlc3NcbiIpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJYnJlYWs7CisJfSB3aGlsZSAodHJ1ZSk7CisKKwkoKmRlbGF5KSA9IGN1cnJlbnRjbWQtPm1zZGVsYXk7CisJKCpzdGVwKSsrOworCXJldHVybiBmYWxzZTsKK30KKwordTggcnRsOTJzX3BoeV9zd19jaG5sKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJdTMyIGRlbGF5OworCWJvb2wgcmV0OworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TQ0FOLCBEQkdfVFJBQ0UsCisJCSAoInN3aXRjaCB0byBjaGFubmVsJWRcbiIsCisJCSBydGxwaHktPmN1cnJlbnRfY2hhbm5lbCkpOworCisJaWYgKHJ0bHBoeS0+c3dfY2hubF9pbnByb2dyZXNzKQorCQlyZXR1cm4gMDsKKworCWlmIChydGxwaHktPnNldF9id21vZGVfaW5wcm9ncmVzcykKKwkJcmV0dXJuIDA7CisKKwlpZiAoaXNfaGFsX3N0b3AocnRsaGFsKSkKKwkJcmV0dXJuIDA7CisKKwlydGxwaHktPnN3X2NobmxfaW5wcm9ncmVzcyA9IHRydWU7CisJcnRscGh5LT5zd19jaG5sX3N0YWdlID0gMDsKKwlydGxwaHktPnN3X2Nobmxfc3RlcCA9IDA7CisKKwlkbyB7CisJCWlmICghcnRscGh5LT5zd19jaG5sX2lucHJvZ3Jlc3MpCisJCQlicmVhazsKKworCQlyZXQgPSBfcnRsOTJzX3BoeV9zd19jaG5sX3N0ZXBfYnlfc3RlcChodywKKwkJCQkgcnRscGh5LT5jdXJyZW50X2NoYW5uZWwsCisJCQkJICZydGxwaHktPnN3X2Nobmxfc3RhZ2UsCisJCQkJICZydGxwaHktPnN3X2Nobmxfc3RlcCwgJmRlbGF5KTsKKwkJaWYgKCFyZXQpIHsKKwkJCWlmIChkZWxheSA+IDApCisJCQkJbWRlbGF5KGRlbGF5KTsKKwkJCWVsc2UKKwkJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCXJ0bHBoeS0+c3dfY2hubF9pbnByb2dyZXNzID0gZmFsc2U7CisJCX0KKwkJYnJlYWs7CisJfSB3aGlsZSAodHJ1ZSk7CisKKwlydGxwaHktPnN3X2NobmxfaW5wcm9ncmVzcyA9IGZhbHNlOworCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9TQ0FOLCBEQkdfVFJBQ0UsICgiPD09XG4iKSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyc2VfcGh5X3NldF9yZl9zbGVlcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTggdTFidG1wOworCisJdTFidG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBMRE9WMTJEX0NUUkwpOworCXUxYnRtcCB8PSBCSVQoMCk7CisKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBMRE9WMTJEX0NUUkwsIHUxYnRtcCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgU1BTMV9DVFJMLCAweDApOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFRYUEFVU0UsIDB4RkYpOworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIENNRFIsIDB4NTdGQyk7CisJdWRlbGF5KDEwMCk7CisKKwlydGxfd3JpdGVfd29yZChydGxwcml2LCBDTURSLCAweDc3RkMpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFBIWV9DQ0EsIDB4MCk7CisJdWRlbGF5KDEwKTsKKworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIENNRFIsIDB4MzdGQyk7CisJdWRlbGF5KDEwKTsKKworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIENNRFIsIDB4NzdGQyk7CisJdWRlbGF5KDEwKTsKKworCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIENNRFIsIDB4NTdGQyk7CisKKwkvKiB3ZSBzaG91bGQgY2huZ2UgR1BJTyB0byBpbnB1dCBtb2RlCisJICogdGhpcyB3aWxsIGRyb3AgYXdheSBjdXJyZW50IGFib3V0IDI1bUEqLworCXJ0bDgxOTJzZV9ncGlvYml0M19jZmdfaW5wdXRtb2RlKGh3KTsKK30KKworYm9vbCBydGw5MnNfcGh5X3NldF9yZl9wb3dlcl9zdGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICBlbnVtIHJmX3B3cnN0YXRlIHJmcHdyX3N0YXRlKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BjaV9wcml2ICpwY2lwcml2ID0gcnRsX3BjaXByaXYoaHcpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7CisJYm9vbCBicmVzdWx0ID0gdHJ1ZTsKKwl1OCBpLCBxdWV1ZV9pZDsKKwlzdHJ1Y3QgcnRsODE5Ml90eF9yaW5nICpyaW5nID0gTlVMTDsKKworCWlmIChyZnB3cl9zdGF0ZSA9PSBwcHNjLT5yZnB3cl9zdGF0ZSkKKwkJcmV0dXJuIGZhbHNlOworCisJcHBzYy0+c2V0X3JmcG93ZXJzdGF0ZV9pbnByb2dyZXNzID0gdHJ1ZTsKKworCXN3aXRjaCAocmZwd3Jfc3RhdGUpIHsKKwljYXNlIEVSRk9OOnsKKwkJCWlmICgocHBzYy0+cmZwd3Jfc3RhdGUgPT0gRVJGT0ZGKSAmJgorCQkJICAgIFJUX0lOX1BTX0xFVkVMKHBwc2MsIFJUX1JGX09GRl9MRVZMX0hBTFRfTklDKSkgeworCisJCQkJYm9vbCBydHN0YXR1czsKKwkJCQl1MzIgSW5pdGlhbGl6ZUNvdW50ID0gMDsKKwkJCQlkbyB7CisJCQkJCUluaXRpYWxpemVDb3VudCsrOworCQkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1JGLCBEQkdfRE1FU0csCisJCQkJCQkgKCJJUFMgU2V0IGVSZiBuaWMgZW5hYmxlXG4iKSk7CisJCQkJCXJ0c3RhdHVzID0gcnRsX3BzX2VuYWJsZV9uaWMoaHcpOworCQkJCX0gd2hpbGUgKChydHN0YXR1cyAhPSB0cnVlKSAmJgorCQkJCQkgKEluaXRpYWxpemVDb3VudCA8IDEwKSk7CisKKwkJCQlSVF9DTEVBUl9QU19MRVZFTChwcHNjLAorCQkJCQkJICBSVF9SRl9PRkZfTEVWTF9IQUxUX05JQyk7CisJCQl9IGVsc2UgeworCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19ETUVTRywKKwkJCQkJICgiYXdha2UsIHNsZWVwZWQ6JWQgbXMgIgorCQkJCQkic3RhdGVfaW5hcDoleFxuIiwKKwkJCQkJamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0KKwkJCQkJcHBzYy0+bGFzdF9zbGVlcF9qaWZmaWVzKSwKKwkJCQkJcnRscHJpdi0+cHNjLnN0YXRlX2luYXApKTsKKwkJCQlwcHNjLT5sYXN0X2F3YWtlX2ppZmZpZXMgPSBqaWZmaWVzOworCQkJCXJ0bF93cml0ZV93b3JkKHJ0bHByaXYsIENNRFIsIDB4MzdGQyk7CisJCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgVFhQQVVTRSwgMHgwMCk7CisJCQkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUEhZX0NDQSwgMHgzKTsKKwkJCX0KKworCQkJaWYgKG1hYy0+bGlua19zdGF0ZSA9PSBNQUM4MDIxMV9MSU5LRUQpCisJCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPmxlZF9jb250cm9sKGh3LAorCQkJCQkJCSBMRURfQ1RMX0xJTkspOworCQkJZWxzZQorCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT5sZWRfY29udHJvbChodywKKwkJCQkJCQkgTEVEX0NUTF9OT19MSU5LKTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBFUkZPRkY6eworCQkJaWYgKHBwc2MtPnJlZ19yZnBzX2xldmVsICYgUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMpIHsKKwkJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1JGLCBEQkdfRE1FU0csCisJCQkJCSAoIklQUyBTZXQgZVJmIG5pYyBkaXNhYmxlXG4iKSk7CisJCQkJcnRsX3BzX2Rpc2FibGVfbmljKGh3KTsKKwkJCQlSVF9TRVRfUFNfTEVWRUwocHBzYywgUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMpOworCQkJfSBlbHNlIHsKKwkJCQlpZiAocHBzYy0+cmZvZmZfcmVhc29uID09IFJGX0NIQU5HRV9CWV9JUFMpCisJCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT5sZWRfY29udHJvbChodywKKwkJCQkJCQkgTEVEX0NUTF9OT19MSU5LKTsKKwkJCQllbHNlCisJCQkJCXJ0bHByaXYtPmNmZy0+b3BzLT5sZWRfY29udHJvbChodywKKwkJCQkJCQkgTEVEX0NUTF9QT1dFUl9PRkYpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwljYXNlIEVSRlNMRUVQOgorCQkJaWYgKHBwc2MtPnJmcHdyX3N0YXRlID09IEVSRk9GRikKKwkJCQlicmVhazsKKworCQkJZm9yIChxdWV1ZV9pZCA9IDAsIGkgPSAwOworCQkJICAgICBxdWV1ZV9pZCA8IFJUTF9QQ0lfTUFYX1RYX1FVRVVFX0NPVU5UOykgeworCQkJCXJpbmcgPSAmcGNpcHJpdi0+ZGV2LnR4X3JpbmdbcXVldWVfaWRdOworCQkJCWlmIChza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkgPT0gMCB8fAorCQkJCQlxdWV1ZV9pZCA9PSBCRUFDT05fUVVFVUUpIHsKKwkJCQkJcXVldWVfaWQrKzsKKwkJCQkJY29udGludWU7CisJCQkJfSBlbHNlIHsKKwkJCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19XQVJOSU5HLAorCQkJCQkJICgiZVJmIE9mZi9TbGVlcDogIgorCQkJCQkJICIlZCB0aW1lcyBUY2JCdXN5UXVldWVbJWRdID0gIgorCQkJCQkJICIlZCBiZWZvcmUgZG96ZSFcbiIsCisJCQkJCQkgKGkgKyAxKSwgcXVldWVfaWQsCisJCQkJCQkgc2tiX3F1ZXVlX2xlbigmcmluZy0+cXVldWUpKSk7CisKKwkJCQkJdWRlbGF5KDEwKTsKKwkJCQkJaSsrOworCQkJCX0KKworCQkJCWlmIChpID49IE1BWF9ET1pFX1dBSVRJTkdfVElNRVNfOXgpIHsKKwkJCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19XQVJOSU5HLAorCQkJCQkJICgiXG5FUkZPRkY6ICVkIHRpbWVzIgorCQkJCQkJICJUY2JCdXN5UXVldWVbJWRdID0gJWQgIVxuIiwKKwkJCQkJCSBNQVhfRE9aRV9XQUlUSU5HX1RJTUVTXzl4LAorCQkJCQkJIHF1ZXVlX2lkLAorCQkJCQkJIHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKSkpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19ETUVTRywKKwkJCQkgKCJTZXQgRVJGU0xFRVAgYXdha2VkOiVkIG1zXG4iLAorCQkJCSBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLQorCQkJCSBwcHNjLT5sYXN0X2F3YWtlX2ppZmZpZXMpKSk7CisKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19ETUVTRywKKwkJCQkgKCJzbGVlcCBhd2FrZWQ6JWQgbXMgIgorCQkJCSJzdGF0ZV9pbmFwOiV4XG4iLCBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLQorCQkJCXBwc2MtPmxhc3RfYXdha2VfamlmZmllcyksCisJCQkJcnRscHJpdi0+cHNjLnN0YXRlX2luYXApKTsKKwkJCXBwc2MtPmxhc3Rfc2xlZXBfamlmZmllcyA9IGppZmZpZXM7CisJCQlfcnRsOTJzZV9waHlfc2V0X3JmX3NsZWVwKGh3KTsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoInN3aXRjaCBjYXNlIG5vdCBwcm9jZXNzXG4iKSk7CisJCWJyZXN1bHQgPSBmYWxzZTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGJyZXN1bHQpCisJCXBwc2MtPnJmcHdyX3N0YXRlID0gcmZwd3Jfc3RhdGU7CisKKwlwcHNjLT5zZXRfcmZwb3dlcnN0YXRlX2lucHJvZ3Jlc3MgPSBmYWxzZTsKKworCXJldHVybiBicmVzdWx0OworfQorCitzdGF0aWMgYm9vbCBfcnRsOTJzX3BoeV9jb25maWdfcmZwYV9iaWFzX2N1cnJlbnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCQkgZW51bSByYWRpb19wYXRoIHJmcGF0aCkKK3sKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCWJvb2wgcnRzdGF0dXMgPSB0cnVlOworCXUzMiB0bXB2YWwgPSAwOworCisJLyogSWYgaW5mZXJpb3JpdHkgSUMsIHdlIGhhdmUgdG8gaW5jcmVhc2UgdGhlIFBBIGJpYXMgY3VycmVudCAqLworCWlmIChydGxoYWwtPmljX2NsYXNzICE9IElDX0lORkVSSU9SSVRZX0EpIHsKKwkJdG1wdmFsID0gcnRsOTJzX3BoeV9xdWVyeV9yZl9yZWcoaHcsIHJmcGF0aCwgUkZfSVBBLCAweGYpOworCQlydGw5MnNfcGh5X3NldF9yZl9yZWcoaHcsIHJmcGF0aCwgUkZfSVBBLCAweGYsIHRtcHZhbCArIDEpOworCX0KKworCXJldHVybiBydHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyc19zdG9yZV9wd3JpbmRleF9kaWZmcmF0ZV9vZmZzZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCXUzMiByZWdfYWRkciwgdTMyIGJpdG1hc2ssIHUzMiBkYXRhKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCisJaWYgKHJlZ19hZGRyID09IFJUWEFHQ19SQVRFMThfMDYpCisJCXJ0bHBoeS0+bWNzX3R4cHdybGV2ZWxfb3JpZ29mZnNldFtydGxwaHktPnB3cmdyb3VwX2NudF1bMF0gPQorCQkJCQkJCQkJIGRhdGE7CisJaWYgKHJlZ19hZGRyID09IFJUWEFHQ19SQVRFNTRfMjQpCisJCXJ0bHBoeS0+bWNzX3R4cHdybGV2ZWxfb3JpZ29mZnNldFtydGxwaHktPnB3cmdyb3VwX2NudF1bMV0gPQorCQkJCQkJCQkJIGRhdGE7CisJaWYgKHJlZ19hZGRyID09IFJUWEFHQ19DQ0tfTUNTMzIpCisJCXJ0bHBoeS0+bWNzX3R4cHdybGV2ZWxfb3JpZ29mZnNldFtydGxwaHktPnB3cmdyb3VwX2NudF1bNl0gPQorCQkJCQkJCQkJIGRhdGE7CisJaWYgKHJlZ19hZGRyID09IFJUWEFHQ19NQ1MwM19NQ1MwMCkKKwkJcnRscGh5LT5tY3NfdHhwd3JsZXZlbF9vcmlnb2Zmc2V0W3J0bHBoeS0+cHdyZ3JvdXBfY250XVsyXSA9CisJCQkJCQkJCQkgZGF0YTsKKwlpZiAocmVnX2FkZHIgPT0gUlRYQUdDX01DUzA3X01DUzA0KQorCQlydGxwaHktPm1jc190eHB3cmxldmVsX29yaWdvZmZzZXRbcnRscGh5LT5wd3Jncm91cF9jbnRdWzNdID0KKwkJCQkJCQkJCSBkYXRhOworCWlmIChyZWdfYWRkciA9PSBSVFhBR0NfTUNTMTFfTUNTMDgpCisJCXJ0bHBoeS0+bWNzX3R4cHdybGV2ZWxfb3JpZ29mZnNldFtydGxwaHktPnB3cmdyb3VwX2NudF1bNF0gPQorCQkJCQkJCQkJIGRhdGE7CisJaWYgKHJlZ19hZGRyID09IFJUWEFHQ19NQ1MxNV9NQ1MxMikgeworCQlydGxwaHktPm1jc190eHB3cmxldmVsX29yaWdvZmZzZXRbcnRscGh5LT5wd3Jncm91cF9jbnRdWzVdID0KKwkJCQkJCQkJCSBkYXRhOworCQlydGxwaHktPnB3cmdyb3VwX2NudCsrOworCX0KK30KKworc3RhdGljIHZvaWQgX3J0bDkyc19waHlfaW5pdF9yZWdpc3Rlcl9kZWZpbml0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCisJLypSRiBJbnRlcmZhY2UgU293cnR3YXJlIENvbnRyb2wgKi8KKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0FdLnJmaW50ZnMgPSBSRlBHQTBfWEFCX1JGSU5URVJGQUNFU1c7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9CXS5yZmludGZzID0gUkZQR0EwX1hBQl9SRklOVEVSRkFDRVNXOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQ10ucmZpbnRmcyA9IFJGUEdBMF9YQ0RfUkZJTlRFUkZBQ0VTVzsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0RdLnJmaW50ZnMgPSBSRlBHQTBfWENEX1JGSU5URVJGQUNFU1c7CisKKwkvKiBSRiBJbnRlcmZhY2UgUmVhZGJhY2sgVmFsdWUgKi8KKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0FdLnJmaW50ZmkgPSBSRlBHQTBfWEFCX1JGSU5URVJGQUNFUkI7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9CXS5yZmludGZpID0gUkZQR0EwX1hBQl9SRklOVEVSRkFDRVJCOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQ10ucmZpbnRmaSA9IFJGUEdBMF9YQ0RfUkZJTlRFUkZBQ0VSQjsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0RdLnJmaW50ZmkgPSBSRlBHQTBfWENEX1JGSU5URVJGQUNFUkI7CisKKwkvKiBSRiBJbnRlcmZhY2UgT3V0cHV0IChhbmQgRW5hYmxlKSAqLworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQV0ucmZpbnRmbyA9IFJGUEdBMF9YQV9SRklOVEVSRkFDRU9FOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQl0ucmZpbnRmbyA9IFJGUEdBMF9YQl9SRklOVEVSRkFDRU9FOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQ10ucmZpbnRmbyA9IFJGUEdBMF9YQ19SRklOVEVSRkFDRU9FOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfRF0ucmZpbnRmbyA9IFJGUEdBMF9YRF9SRklOVEVSRkFDRU9FOworCisJLyogUkYgSW50ZXJmYWNlIChPdXRwdXQgYW5kKSAgRW5hYmxlICovCisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9BXS5yZmludGZlID0gUkZQR0EwX1hBX1JGSU5URVJGQUNFT0U7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9CXS5yZmludGZlID0gUkZQR0EwX1hCX1JGSU5URVJGQUNFT0U7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9DXS5yZmludGZlID0gUkZQR0EwX1hDX1JGSU5URVJGQUNFT0U7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9EXS5yZmludGZlID0gUkZQR0EwX1hEX1JGSU5URVJGQUNFT0U7CisKKwkvKiBBZGRyIG9mIExTU0kuIFdpcnRlIFJGIHJlZ2lzdGVyIGJ5IGRyaXZlciAqLworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQV0ucmYzd2lyZV9vZmZzZXQgPQorCQkJCQkJIFJGUEdBMF9YQV9MU1NJUEFSQU1FVEVSOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQl0ucmYzd2lyZV9vZmZzZXQgPQorCQkJCQkJIFJGUEdBMF9YQl9MU1NJUEFSQU1FVEVSOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQ10ucmYzd2lyZV9vZmZzZXQgPQorCQkJCQkJIFJGUEdBMF9YQ19MU1NJUEFSQU1FVEVSOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfRF0ucmYzd2lyZV9vZmZzZXQgPQorCQkJCQkJIFJGUEdBMF9YRF9MU1NJUEFSQU1FVEVSOworCisJLyogUkYgcGFyYW1ldGVyICovCisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9BXS5yZmxzc2lfc2VsZWN0ID0gUkZQR0EwX1hBQl9SRlBBUkFNRVRFUjsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0JdLnJmbHNzaV9zZWxlY3QgPSBSRlBHQTBfWEFCX1JGUEFSQU1FVEVSOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQ10ucmZsc3NpX3NlbGVjdCA9IFJGUEdBMF9YQ0RfUkZQQVJBTUVURVI7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9EXS5yZmxzc2lfc2VsZWN0ID0gUkZQR0EwX1hDRF9SRlBBUkFNRVRFUjsKKworCS8qIFR4IEFHQyBHYWluIFN0YWdlIChzYW1lIGZvciBhbGwgcGF0aC4gU2hvdWxkIHdlIHJlbW92ZSB0aGlzPykgKi8KKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0FdLnJmdHhnYWluX3N0YWdlID0gUkZQR0EwX1RYR0FJTlNUQUdFOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQl0ucmZ0eGdhaW5fc3RhZ2UgPSBSRlBHQTBfVFhHQUlOU1RBR0U7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9DXS5yZnR4Z2Fpbl9zdGFnZSA9IFJGUEdBMF9UWEdBSU5TVEFHRTsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0RdLnJmdHhnYWluX3N0YWdlID0gUkZQR0EwX1RYR0FJTlNUQUdFOworCisJLyogVHJhbmNlaXZlciBBfkQgSFNTSSBQYXJhbWV0ZXItMSAqLworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQV0ucmZoc3NpX3BhcmExID0gUkZQR0EwX1hBX0hTU0lQQVJBTUVURVIxOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQl0ucmZoc3NpX3BhcmExID0gUkZQR0EwX1hCX0hTU0lQQVJBTUVURVIxOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQ10ucmZoc3NpX3BhcmExID0gUkZQR0EwX1hDX0hTU0lQQVJBTUVURVIxOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfRF0ucmZoc3NpX3BhcmExID0gUkZQR0EwX1hEX0hTU0lQQVJBTUVURVIxOworCisJLyogVHJhbmNlaXZlciBBfkQgSFNTSSBQYXJhbWV0ZXItMiAqLworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQV0ucmZoc3NpX3BhcmEyID0gUkZQR0EwX1hBX0hTU0lQQVJBTUVURVIyOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQl0ucmZoc3NpX3BhcmEyID0gUkZQR0EwX1hCX0hTU0lQQVJBTUVURVIyOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQ10ucmZoc3NpX3BhcmEyID0gUkZQR0EwX1hDX0hTU0lQQVJBTUVURVIyOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfRF0ucmZoc3NpX3BhcmEyID0gUkZQR0EwX1hEX0hTU0lQQVJBTUVURVIyOworCisJLyogUkYgc3dpdGNoIENvbnRyb2wgKi8KKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0FdLnJmc3dpdGNoX2NvbnRyb2wgPQorCQkJCQkJIFJGUEdBMF9YQUJfU1dJVENIQ09OVFJPTDsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0JdLnJmc3dpdGNoX2NvbnRyb2wgPQorCQkJCQkJIFJGUEdBMF9YQUJfU1dJVENIQ09OVFJPTDsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0NdLnJmc3dpdGNoX2NvbnRyb2wgPQorCQkJCQkJIFJGUEdBMF9YQ0RfU1dJVENIQ09OVFJPTDsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0RdLnJmc3dpdGNoX2NvbnRyb2wgPQorCQkJCQkJIFJGUEdBMF9YQ0RfU1dJVENIQ09OVFJPTDsKKworCS8qIEFHQyBjb250cm9sIDEgICovCisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9BXS5yZmFnY19jb250cm9sMSA9IFJPRkRNMF9YQUFHQ0NPUkUxOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQl0ucmZhZ2NfY29udHJvbDEgPSBST0ZETTBfWEJBR0NDT1JFMTsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0NdLnJmYWdjX2NvbnRyb2wxID0gUk9GRE0wX1hDQUdDQ09SRTE7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9EXS5yZmFnY19jb250cm9sMSA9IFJPRkRNMF9YREFHQ0NPUkUxOworCisJLyogQUdDIGNvbnRyb2wgMiAgKi8KKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0FdLnJmYWdjX2NvbnRyb2wyID0gUk9GRE0wX1hBQUdDQ09SRTI7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9CXS5yZmFnY19jb250cm9sMiA9IFJPRkRNMF9YQkFHQ0NPUkUyOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQ10ucmZhZ2NfY29udHJvbDIgPSBST0ZETTBfWENBR0NDT1JFMjsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0RdLnJmYWdjX2NvbnRyb2wyID0gUk9GRE0wX1hEQUdDQ09SRTI7CisKKwkvKiBSWCBBRkUgY29udHJvbCAxICAqLworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQV0ucmZyeGlxX2ltYmFsYW5jZSA9CisJCQkJCQkgUk9GRE0wX1hBUlhJUUlNQkFMQU5DRTsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0JdLnJmcnhpcV9pbWJhbGFuY2UgPQorCQkJCQkJIFJPRkRNMF9YQlJYSVFJTUJBTEFOQ0U7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9DXS5yZnJ4aXFfaW1iYWxhbmNlID0KKwkJCQkJCSBST0ZETTBfWENSWElRSU1CQUxBTkNFOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfRF0ucmZyeGlxX2ltYmFsYW5jZSA9CisJCQkJCQkgUk9GRE0wX1hEUlhJUUlNQkFMQU5DRTsKKworCS8qIFJYIEFGRSBjb250cm9sIDEgICAqLworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQV0ucmZyeF9hZmUgPSBST0ZETTBfWEFSWEFGRTsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0JdLnJmcnhfYWZlID0gUk9GRE0wX1hCUlhBRkU7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9DXS5yZnJ4X2FmZSA9IFJPRkRNMF9YQ1JYQUZFOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfRF0ucmZyeF9hZmUgPSBST0ZETTBfWERSWEFGRTsKKworCS8qIFR4IEFGRSBjb250cm9sIDEgICovCisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9BXS5yZnR4aXFfaW1iYWxhbmNlID0KKwkJCQkJCSBST0ZETTBfWEFUWElRSU1CQUxBTkNFOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQl0ucmZ0eGlxX2ltYmFsYW5jZSA9CisJCQkJCQkgUk9GRE0wX1hCVFhJUUlNQkFMQU5DRTsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0NdLnJmdHhpcV9pbWJhbGFuY2UgPQorCQkJCQkJIFJPRkRNMF9YQ1RYSVFJTUJBTEFOQ0U7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9EXS5yZnR4aXFfaW1iYWxhbmNlID0KKwkJCQkJCSBST0ZETTBfWERUWElRSU1CQUxBTkNFOworCisJLyogVHggQUZFIGNvbnRyb2wgMiAgKi8KKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0FdLnJmdHhfYWZlID0gUk9GRE0wX1hBVFhBRkU7CisJcnRscGh5LT5waHlyZWdfZGVmW1JGOTBfUEFUSF9CXS5yZnR4X2FmZSA9IFJPRkRNMF9YQlRYQUZFOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQ10ucmZ0eF9hZmUgPSBST0ZETTBfWENUWEFGRTsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0RdLnJmdHhfYWZlID0gUk9GRE0wX1hEVFhBRkU7CisKKwkvKiBUcmFuY2VpdmVyIExTU0kgUmVhZGJhY2sgKi8KKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0FdLnJmbHNzaV9yZWFkYmFjayA9CisJCQkgUkZQR0EwX1hBX0xTU0lSRUFEQkFDSzsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0JdLnJmbHNzaV9yZWFkYmFjayA9CisJCQkgUkZQR0EwX1hCX0xTU0lSRUFEQkFDSzsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0NdLnJmbHNzaV9yZWFkYmFjayA9CisJCQkgUkZQR0EwX1hDX0xTU0lSRUFEQkFDSzsKKwlydGxwaHktPnBoeXJlZ19kZWZbUkY5MF9QQVRIX0RdLnJmbHNzaV9yZWFkYmFjayA9CisJCQkgUkZQR0EwX1hEX0xTU0lSRUFEQkFDSzsKKworCS8qIFRyYW5jZWl2ZXIgTFNTSSBSZWFkYmFjayBQSSBtb2RlICAqLworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQV0ucmZsc3NpX3JlYWRiYWNrcGkgPQorCQkJIFRSQU5TQ0VJVkVSQV9IU1BJX1JFQURCQUNLOworCXJ0bHBoeS0+cGh5cmVnX2RlZltSRjkwX1BBVEhfQl0ucmZsc3NpX3JlYWRiYWNrcGkgPQorCQkJIFRSQU5TQ0VJVkVSQl9IU1BJX1JFQURCQUNLOworfQorCisKK3N0YXRpYyBib29sIF9ydGw5MnNfcGh5X2NvbmZpZ19iYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggY29uZmlndHlwZSkKK3sKKwlpbnQgaTsKKwl1MzIgKnBoeV9yZWdfdGFibGU7CisJdTMyICphZ2NfdGFibGU7CisJdTE2IHBoeV9yZWdfbGVuLCBhZ2NfbGVuOworCisJYWdjX2xlbiA9IEFHQ1RBQl9BUlJBWUxFTkdUSDsKKwlhZ2NfdGFibGUgPSBydGw4MTkyc2VhZ2N0YWJfYXJyYXk7CisJLyogRGVmYXVsdCBSRl90eXBlOiAyVDJSICovCisJcGh5X3JlZ19sZW4gPSBQSFlfUkVHXzJUMlJBUlJBWUxFTkdUSDsKKwlwaHlfcmVnX3RhYmxlID0gcnRsODE5MnNlcGh5X3JlZ18ydDJyYXJyYXk7CisKKwlpZiAoY29uZmlndHlwZSA9PSBCQVNFQkFORF9DT05GSUdfUEhZX1JFRykgeworCQlmb3IgKGkgPSAwOyBpIDwgcGh5X3JlZ19sZW47IGkgPSBpICsgMikgeworCQkJaWYgKHBoeV9yZWdfdGFibGVbaV0gPT0gMHhmZSkKKwkJCQltZGVsYXkoNTApOworCQkJZWxzZSBpZiAocGh5X3JlZ190YWJsZVtpXSA9PSAweGZkKQorCQkJCW1kZWxheSg1KTsKKwkJCWVsc2UgaWYgKHBoeV9yZWdfdGFibGVbaV0gPT0gMHhmYykKKwkJCQltZGVsYXkoMSk7CisJCQllbHNlIGlmIChwaHlfcmVnX3RhYmxlW2ldID09IDB4ZmIpCisJCQkJdWRlbGF5KDUwKTsKKwkJCWVsc2UgaWYgKHBoeV9yZWdfdGFibGVbaV0gPT0gMHhmYSkKKwkJCQl1ZGVsYXkoNSk7CisJCQllbHNlIGlmIChwaHlfcmVnX3RhYmxlW2ldID09IDB4ZjkpCisJCQkJdWRlbGF5KDEpOworCisJCQkvKiBBZGQgZGVsYXkgZm9yIEVDUyBUMjAgJiBMRyBtYWxvdyBwbGF0Zm9ybSwgKi8KKwkJCXVkZWxheSgxKTsKKworCQkJcnRsOTJzX3BoeV9zZXRfYmJfcmVnKGh3LCBwaHlfcmVnX3RhYmxlW2ldLCBNQVNLRFdPUkQsCisJCQkJCXBoeV9yZWdfdGFibGVbaSArIDFdKTsKKwkJfQorCX0gZWxzZSBpZiAoY29uZmlndHlwZSA9PSBCQVNFQkFORF9DT05GSUdfQUdDX1RBQikgeworCQlmb3IgKGkgPSAwOyBpIDwgYWdjX2xlbjsgaSA9IGkgKyAyKSB7CisJCQlydGw5MnNfcGh5X3NldF9iYl9yZWcoaHcsIGFnY190YWJsZVtpXSwgTUFTS0RXT1JELAorCQkJCQlhZ2NfdGFibGVbaSArIDFdKTsKKworCQkJLyogQWRkIGRlbGF5IGZvciBFQ1MgVDIwICYgTEcgbWFsb3cgcGxhdGZvcm0gKi8KKwkJCXVkZWxheSgxKTsKKwkJfQorCX0KKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBfcnRsOTJzX3BoeV9zZXRfYmJfdG9fZGlmZl9yZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJICB1OCBjb25maWd0eXBlKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCXUzMiAqcGh5X3JlZ2FycmF5Mnh0eHJfdGFibGU7CisJdTE2IHBoeV9yZWdhcnJheTJ4dHhyX2xlbjsKKwlpbnQgaTsKKworCWlmIChydGxwaHktPnJmX3R5cGUgPT0gUkZfMVQxUikgeworCQlwaHlfcmVnYXJyYXkyeHR4cl90YWJsZSA9IHJ0bDgxOTJzZXBoeV9jaGFuZ2V0b18xdDFyYXJyYXk7CisJCXBoeV9yZWdhcnJheTJ4dHhyX2xlbiA9IFBIWV9DSEFOR0VUT18xVDFSQVJSQVlMRU5HVEg7CisJfSBlbHNlIGlmIChydGxwaHktPnJmX3R5cGUgPT0gUkZfMVQyUikgeworCQlwaHlfcmVnYXJyYXkyeHR4cl90YWJsZSA9IHJ0bDgxOTJzZXBoeV9jaGFuZ2V0b18xdDJyYXJyYXk7CisJCXBoeV9yZWdhcnJheTJ4dHhyX2xlbiA9IFBIWV9DSEFOR0VUT18xVDJSQVJSQVlMRU5HVEg7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChjb25maWd0eXBlID09IEJBU0VCQU5EX0NPTkZJR19QSFlfUkVHKSB7CisJCWZvciAoaSA9IDA7IGkgPCBwaHlfcmVnYXJyYXkyeHR4cl9sZW47IGkgPSBpICsgMykgeworCQkJaWYgKHBoeV9yZWdhcnJheTJ4dHhyX3RhYmxlW2ldID09IDB4ZmUpCisJCQkJbWRlbGF5KDUwKTsKKwkJCWVsc2UgaWYgKHBoeV9yZWdhcnJheTJ4dHhyX3RhYmxlW2ldID09IDB4ZmQpCisJCQkJbWRlbGF5KDUpOworCQkJZWxzZSBpZiAocGh5X3JlZ2FycmF5Mnh0eHJfdGFibGVbaV0gPT0gMHhmYykKKwkJCQltZGVsYXkoMSk7CisJCQllbHNlIGlmIChwaHlfcmVnYXJyYXkyeHR4cl90YWJsZVtpXSA9PSAweGZiKQorCQkJCXVkZWxheSg1MCk7CisJCQllbHNlIGlmIChwaHlfcmVnYXJyYXkyeHR4cl90YWJsZVtpXSA9PSAweGZhKQorCQkJCXVkZWxheSg1KTsKKwkJCWVsc2UgaWYgKHBoeV9yZWdhcnJheTJ4dHhyX3RhYmxlW2ldID09IDB4ZjkpCisJCQkJdWRlbGF5KDEpOworCisJCQlydGw5MnNfcGh5X3NldF9iYl9yZWcoaHcsIHBoeV9yZWdhcnJheTJ4dHhyX3RhYmxlW2ldLAorCQkJCXBoeV9yZWdhcnJheTJ4dHhyX3RhYmxlW2kgKyAxXSwKKwkJCQlwaHlfcmVnYXJyYXkyeHR4cl90YWJsZVtpICsgMl0pOworCQl9CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIF9ydGw5MnNfcGh5X2NvbmZpZ19iYl93aXRoX3BnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgIHU4IGNvbmZpZ3R5cGUpCit7CisJaW50IGk7CisJdTMyICpwaHlfdGFibGVfcGc7CisJdTE2IHBoeV9wZ19sZW47CisKKwlwaHlfcGdfbGVuID0gUEhZX1JFR19BUlJBWV9QR0xFTkdUSDsKKwlwaHlfdGFibGVfcGcgPSBydGw4MTkyc2VwaHlfcmVnX2FycmF5X3BnOworCisJaWYgKGNvbmZpZ3R5cGUgPT0gQkFTRUJBTkRfQ09ORklHX1BIWV9SRUcpIHsKKwkJZm9yIChpID0gMDsgaSA8IHBoeV9wZ19sZW47IGkgPSBpICsgMykgeworCQkJaWYgKHBoeV90YWJsZV9wZ1tpXSA9PSAweGZlKQorCQkJCW1kZWxheSg1MCk7CisJCQllbHNlIGlmIChwaHlfdGFibGVfcGdbaV0gPT0gMHhmZCkKKwkJCQltZGVsYXkoNSk7CisJCQllbHNlIGlmIChwaHlfdGFibGVfcGdbaV0gPT0gMHhmYykKKwkJCQltZGVsYXkoMSk7CisJCQllbHNlIGlmIChwaHlfdGFibGVfcGdbaV0gPT0gMHhmYikKKwkJCQl1ZGVsYXkoNTApOworCQkJZWxzZSBpZiAocGh5X3RhYmxlX3BnW2ldID09IDB4ZmEpCisJCQkJdWRlbGF5KDUpOworCQkJZWxzZSBpZiAocGh5X3RhYmxlX3BnW2ldID09IDB4ZjkpCisJCQkJdWRlbGF5KDEpOworCisJCQlfcnRsOTJzX3N0b3JlX3B3cmluZGV4X2RpZmZyYXRlX29mZnNldChodywKKwkJCQkJcGh5X3RhYmxlX3BnW2ldLAorCQkJCQlwaHlfdGFibGVfcGdbaSArIDFdLAorCQkJCQlwaHlfdGFibGVfcGdbaSArIDJdKTsKKwkJCXJ0bDkyc19waHlfc2V0X2JiX3JlZyhodywgcGh5X3RhYmxlX3BnW2ldLAorCQkJCQlwaHlfdGFibGVfcGdbaSArIDFdLAorCQkJCQlwaHlfdGFibGVfcGdbaSArIDJdKTsKKwkJfQorCX0KKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBfcnRsOTJzX3BoeV9iYl9jb25maWdfcGFyYWZpbGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKwlib29sIHJ0c3RhdHVzID0gdHJ1ZTsKKworCS8qIDEuIFJlYWQgUEhZX1JFRy5UWFQgQkIgSU5JVCEhICovCisJLyogV2Ugd2lsbCBzZXBhcmF0ZSBhcyAxVDFSLzFUMlIvMVQyUl9HUkVFTi8yVDJSICovCisJaWYgKHJ0bHBoeS0+cmZfdHlwZSA9PSBSRl8xVDJSIHx8IHJ0bHBoeS0+cmZfdHlwZSA9PSBSRl8yVDJSIHx8CisJICAgIHJ0bHBoeS0+cmZfdHlwZSA9PSBSRl8xVDFSIHx8IHJ0bHBoeS0+cmZfdHlwZSA9PSBSRl8yVDJSX0dSRUVOKSB7CisJCXJ0c3RhdHVzID0gX3J0bDkyc19waHlfY29uZmlnX2JiKGh3LCBCQVNFQkFORF9DT05GSUdfUEhZX1JFRyk7CisKKwkJaWYgKHJ0bHBoeS0+cmZfdHlwZSAhPSBSRl8yVDJSICYmCisJCSAgICBydGxwaHktPnJmX3R5cGUgIT0gUkZfMlQyUl9HUkVFTikKKwkJCS8qIHNvIHdlIHNob3VsZCByZWNvbmZpZyBCQiByZWcgd2l0aCB0aGUgcmlnaHQKKwkJCSAqIFBIWSBwYXJhbWV0ZXJzLiAqLworCQkJcnRzdGF0dXMgPSBfcnRsOTJzX3BoeV9zZXRfYmJfdG9fZGlmZl9yZihodywKKwkJCQkJCUJBU0VCQU5EX0NPTkZJR19QSFlfUkVHKTsKKwl9IGVsc2UgeworCQlydHN0YXR1cyA9IGZhbHNlOworCX0KKworCWlmIChydHN0YXR1cyAhPSB0cnVlKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX0VNRVJHLAorCQkJICgiV3JpdGUgQkIgUmVnIEZhaWwhISIpKTsKKwkJZ290byBwaHlfQkI4MTkwX0NvbmZpZ19QYXJhRmlsZV9GYWlsOworCX0KKworCS8qIDIuIElmIEVFUFJPTSBvciBFRlVTRSBhdXRvbG9hZCBPSywgV2UgbXVzdCBjb25maWcgYnkKKwkgKiAgICBQSFlfUkVHX1BHLnR4dCAqLworCWlmIChydGxlZnVzZS0+YXV0b2xvYWRfZmFpbGZsYWcgPT0gZmFsc2UpIHsKKwkJcnRscGh5LT5wd3Jncm91cF9jbnQgPSAwOworCisJCXJ0c3RhdHVzID0gX3J0bDkyc19waHlfY29uZmlnX2JiX3dpdGhfcGcoaHcsCisJCQkJCQkgQkFTRUJBTkRfQ09ORklHX1BIWV9SRUcpOworCX0KKwlpZiAocnRzdGF0dXMgIT0gdHJ1ZSkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19FTUVSRywKKwkJCSAoIl9ydGw5MnNfcGh5X2JiX2NvbmZpZ19wYXJhZmlsZSgpOiAiCisJCQkgIkJCX1BHIFJlZyBGYWlsISEiKSk7CisJCWdvdG8gcGh5X0JCODE5MF9Db25maWdfUGFyYUZpbGVfRmFpbDsKKwl9CisKKwkvKiAzLiBCQiBBR0MgdGFibGUgSW5pdGlhbGl6YXRpb24gKi8KKwlydHN0YXR1cyA9IF9ydGw5MnNfcGh5X2NvbmZpZ19iYihodywgQkFTRUJBTkRfQ09ORklHX0FHQ19UQUIpOworCisJaWYgKHJ0c3RhdHVzICE9IHRydWUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICAiX3J0bDkyc19waHlfYmJfY29uZmlnX3BhcmFmaWxlKCk6ICIKKwkJICAgICAgICJBR0MgVGFibGUgRmFpbFxuIik7CisJCWdvdG8gcGh5X0JCODE5MF9Db25maWdfUGFyYUZpbGVfRmFpbDsKKwl9CisKKwkvKiBDaGVjayBpZiB0aGUgQ0NLIEhpZ2hQb3dlciBpcyB0dXJuZWQgT04uICovCisJLyogVGhpcyBpcyB1c2VkIHRvIGNhbGN1bGF0ZSBQV0RCLiAqLworCXJ0bHBoeS0+Y2NrX2hpZ2hfcG93ZXIgPSAoYm9vbCkocnRsOTJzX3BoeV9xdWVyeV9iYl9yZWcoaHcsCisJCQlSRlBHQTBfWEFfSFNTSVBBUkFNRVRFUjIsIDB4MjAwKSk7CisKK3BoeV9CQjgxOTBfQ29uZmlnX1BhcmFGaWxlX0ZhaWw6CisJcmV0dXJuIHJ0c3RhdHVzOworfQorCit1OCBydGw5MnNfcGh5X2NvbmZpZ19yZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSByYWRpb19wYXRoIHJmcGF0aCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlpbnQgaTsKKwlib29sIHJ0c3RhdHVzID0gdHJ1ZTsKKwl1MzIgKnJhZGlvX2FfdGFibGU7CisJdTMyICpyYWRpb19iX3RhYmxlOworCXUxNiByYWRpb19hX3RibGVuLCByYWRpb19iX3RibGVuOworCisJcmFkaW9fYV90YmxlbiA9IFJBRElPQV8xVF9BUlJBWUxFTkdUSDsKKwlyYWRpb19hX3RhYmxlID0gcnRsODE5MnNlcmFkaW9hXzF0X2FycmF5OworCisJLyogVXNpbmcgR3JlZW4gbW9kZSBhcnJheSB0YWJsZSBmb3IgUkZfMlQyUl9HUkVFTiAqLworCWlmIChydGxwaHktPnJmX3R5cGUgPT0gUkZfMlQyUl9HUkVFTikgeworCQlyYWRpb19iX3RhYmxlID0gcnRsODE5MnNlcmFkaW9iX2dtX2FycmF5OworCQlyYWRpb19iX3RibGVuID0gUkFESU9CX0dNX0FSUkFZTEVOR1RIOworCX0gZWxzZSB7CisJCXJhZGlvX2JfdGFibGUgPSBydGw4MTkyc2VyYWRpb2JfYXJyYXk7CisJCXJhZGlvX2JfdGJsZW4gPSBSQURJT0JfQVJSQVlMRU5HVEg7CisJfQorCisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwgKCJSYWRpbyBObyAleFxuIiwgcmZwYXRoKSk7CisJcnRzdGF0dXMgPSB0cnVlOworCisJc3dpdGNoIChyZnBhdGgpIHsKKwljYXNlIFJGOTBfUEFUSF9BOgorCQlmb3IgKGkgPSAwOyBpIDwgcmFkaW9fYV90YmxlbjsgaSA9IGkgKyAyKSB7CisJCQlpZiAocmFkaW9fYV90YWJsZVtpXSA9PSAweGZlKQorCQkJCS8qIERlbGF5IHNwZWNpZmljIG1zLiBPbmx5IFJGIGNvbmZpZ3VyYXRpb24KKwkJCQkgKiByZXF1aXJlcyBkZWxheS4gKi8KKwkJCQltZGVsYXkoNTApOworCQkJZWxzZSBpZiAocmFkaW9fYV90YWJsZVtpXSA9PSAweGZkKQorCQkJCW1kZWxheSg1KTsKKwkJCWVsc2UgaWYgKHJhZGlvX2FfdGFibGVbaV0gPT0gMHhmYykKKwkJCQltZGVsYXkoMSk7CisJCQllbHNlIGlmIChyYWRpb19hX3RhYmxlW2ldID09IDB4ZmIpCisJCQkJdWRlbGF5KDUwKTsKKwkJCWVsc2UgaWYgKHJhZGlvX2FfdGFibGVbaV0gPT0gMHhmYSkKKwkJCQl1ZGVsYXkoNSk7CisJCQllbHNlIGlmIChyYWRpb19hX3RhYmxlW2ldID09IDB4ZjkpCisJCQkJdWRlbGF5KDEpOworCQkJZWxzZQorCQkJCXJ0bDkyc19waHlfc2V0X3JmX3JlZyhodywgcmZwYXRoLAorCQkJCQkJICAgICAgcmFkaW9fYV90YWJsZVtpXSwKKwkJCQkJCSAgICAgIE1BU0syMEJJVFMsCisJCQkJCQkgICAgICByYWRpb19hX3RhYmxlW2kgKyAxXSk7CisKKwkJCS8qIEFkZCBkZWxheSBmb3IgRUNTIFQyMCAmIExHIG1hbG93IHBsYXRmb3JtICovCisJCQl1ZGVsYXkoMSk7CisJCX0KKworCQkvKiBQQSBCaWFzIGN1cnJlbnQgZm9yIGluZmVyaW9yaXR5IElDICovCisJCV9ydGw5MnNfcGh5X2NvbmZpZ19yZnBhX2JpYXNfY3VycmVudChodywgcmZwYXRoKTsKKwkJYnJlYWs7CisJY2FzZSBSRjkwX1BBVEhfQjoKKwkJZm9yIChpID0gMDsgaSA8IHJhZGlvX2JfdGJsZW47IGkgPSBpICsgMikgeworCQkJaWYgKHJhZGlvX2JfdGFibGVbaV0gPT0gMHhmZSkKKwkJCQkvKiBEZWxheSBzcGVjaWZpYyBtcy4gT25seSBSRiBjb25maWd1cmF0aW9uCisJCQkJICogcmVxdWlyZXMgZGVsYXkuKi8KKwkJCQltZGVsYXkoNTApOworCQkJZWxzZSBpZiAocmFkaW9fYl90YWJsZVtpXSA9PSAweGZkKQorCQkJCW1kZWxheSg1KTsKKwkJCWVsc2UgaWYgKHJhZGlvX2JfdGFibGVbaV0gPT0gMHhmYykKKwkJCQltZGVsYXkoMSk7CisJCQllbHNlIGlmIChyYWRpb19iX3RhYmxlW2ldID09IDB4ZmIpCisJCQkJdWRlbGF5KDUwKTsKKwkJCWVsc2UgaWYgKHJhZGlvX2JfdGFibGVbaV0gPT0gMHhmYSkKKwkJCQl1ZGVsYXkoNSk7CisJCQllbHNlIGlmIChyYWRpb19iX3RhYmxlW2ldID09IDB4ZjkpCisJCQkJdWRlbGF5KDEpOworCQkJZWxzZQorCQkJCXJ0bDkyc19waHlfc2V0X3JmX3JlZyhodywgcmZwYXRoLAorCQkJCQkJICAgICAgcmFkaW9fYl90YWJsZVtpXSwKKwkJCQkJCSAgICAgIE1BU0syMEJJVFMsCisJCQkJCQkgICAgICByYWRpb19iX3RhYmxlW2kgKyAxXSk7CisKKwkJCS8qIEFkZCBkZWxheSBmb3IgRUNTIFQyMCAmIExHIG1hbG93IHBsYXRmb3JtICovCisJCQl1ZGVsYXkoMSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBSRjkwX1BBVEhfQzoKKwkJOworCQlicmVhazsKKwljYXNlIFJGOTBfUEFUSF9EOgorCQk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiBydHN0YXR1czsKK30KKworCitib29sIHJ0bDkyc19waHlfbWFjX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTMyIGk7CisJdTMyIGFycmF5bGVuZ3RoOworCXUzMiAqcHRyYUFycmF5OworCisJYXJyYXlsZW5ndGggPSBNQUNfMlRfQVJSQVlMRU5HVEg7CisJcHRyYUFycmF5ID0gcnRsODE5MnNlbWFjXzJ0X2FycmF5OworCisJZm9yIChpID0gMDsgaSA8IGFycmF5bGVuZ3RoOyBpID0gaSArIDIpCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIHB0cmFBcnJheVtpXSwgKHU4KXB0cmFBcnJheVtpICsgMV0pOworCisJcmV0dXJuIHRydWU7Cit9CisKKworYm9vbCBydGw5MnNfcGh5X2JiX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlib29sIHJ0c3RhdHVzID0gdHJ1ZTsKKwl1OCBwYXRobWFwLCBpbmRleCwgcmZfbnVtID0gMDsKKwl1OCBwYXRoMSwgcGF0aDI7CisKKwlfcnRsOTJzX3BoeV9pbml0X3JlZ2lzdGVyX2RlZmluaXRpb24oaHcpOworCisJLyogQ29uZmlnIEJCIGFuZCBBR0MgKi8KKwlydHN0YXR1cyA9IF9ydGw5MnNfcGh5X2JiX2NvbmZpZ19wYXJhZmlsZShodyk7CisKKworCS8qIENoZWNrIEJCL1JGIGNvbmZpdXJhdGlvbiBzZXR0aW5nLiAqLworCS8qIFdlIG9ubHkgbmVlZCB0byBjb25maWd1cmUgUkYgd2hpY2ggaXMgdHVybmVkIG9uLiAqLworCXBhdGgxID0gKHU4KShydGw5MnNfcGh5X3F1ZXJ5X2JiX3JlZyhodywgUkZQR0EwX1RYSU5GTywgMHhmKSk7CisJbWRlbGF5KDEwKTsKKwlwYXRoMiA9ICh1OCkocnRsOTJzX3BoeV9xdWVyeV9iYl9yZWcoaHcsIFJPRkRNMF9UUlhQQVRIRU5BQkxFLCAweGYpKTsKKwlwYXRobWFwID0gcGF0aDEgfCBwYXRoMjsKKworCXJ0bHBoeS0+cmZfcGF0aG1hcCA9IHBhdGhtYXA7CisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgNDsgaW5kZXgrKykgeworCQlpZiAoKHBhdGhtYXAgPj4gaW5kZXgpICYgMHgxKQorCQkJcmZfbnVtKys7CisJfQorCisJaWYgKChydGxwaHktPnJmX3R5cGUgPT0gUkZfMVQxUiAmJiByZl9udW0gIT0gMSkgfHwKKwkgICAgKHJ0bHBoeS0+cmZfdHlwZSA9PSBSRl8xVDJSICYmIHJmX251bSAhPSAyKSB8fAorCSAgICAocnRscGh5LT5yZl90eXBlID09IFJGXzJUMlIgJiYgcmZfbnVtICE9IDIpIHx8CisJICAgIChydGxwaHktPnJmX3R5cGUgPT0gUkZfMlQyUl9HUkVFTiAmJiByZl9udW0gIT0gMikpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfRU1FUkcsCisJCQkgKCJSRl9UeXBlKCV4KSBkb2VzIG5vdCBtYXRjaCAiCisJCQkgIlJGX051bSgleCkhIVxuIiwgcnRscGh5LT5yZl90eXBlLCByZl9udW0pKTsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfRU1FUkcsCisJCQkgKCJwYXRoMSAweCV4LCBwYXRoMiAweCV4LCBwYXRobWFwICIKKwkJCSAgIjB4JXhcbiIsIHBhdGgxLCBwYXRoMiwgcGF0aG1hcCkpOworCX0KKworCXJldHVybiBydHN0YXR1czsKK30KKworYm9vbCBydGw5MnNfcGh5X3JmX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKworCS8qIEluaXRpYWxpemUgZ2VuZXJhbCBnbG9iYWwgdmFsdWUgKi8KKwlpZiAocnRscGh5LT5yZl90eXBlID09IFJGXzFUMVIpCisJCXJ0bHBoeS0+bnVtX3RvdGFsX3JmcGF0aCA9IDE7CisJZWxzZQorCQlydGxwaHktPm51bV90b3RhbF9yZnBhdGggPSAyOworCisJLyogQ29uZmlnIEJCIGFuZCBSRiAqLworCXJldHVybiBydGw5MnNfcGh5X3JmNjA1Ml9jb25maWcoaHcpOworfQorCit2b2lkIHJ0bDkyc19waHlfZ2V0X2h3X3JlZ19vcmlnaW5hbHZhbHVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCisJLyogcmVhZCByeCBpbml0aWFsIGdhaW4gKi8KKwlydGxwaHktPmRlZmF1bHRfaW5pdGlhbGdhaW5bMF0gPSBydGxfZ2V0X2JicmVnKGh3LAorCQkJUk9GRE0wX1hBQUdDQ09SRTEsIE1BU0tCWVRFMCk7CisJcnRscGh5LT5kZWZhdWx0X2luaXRpYWxnYWluWzFdID0gcnRsX2dldF9iYnJlZyhodywKKwkJCVJPRkRNMF9YQkFHQ0NPUkUxLCBNQVNLQllURTApOworCXJ0bHBoeS0+ZGVmYXVsdF9pbml0aWFsZ2FpblsyXSA9IHJ0bF9nZXRfYmJyZWcoaHcsCisJCQlST0ZETTBfWENBR0NDT1JFMSwgTUFTS0JZVEUwKTsKKwlydGxwaHktPmRlZmF1bHRfaW5pdGlhbGdhaW5bM10gPSBydGxfZ2V0X2JicmVnKGh3LAorCQkJUk9GRE0wX1hEQUdDQ09SRTEsIE1BU0tCWVRFMCk7CisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwgKCJEZWZhdWx0IGluaXRpYWwgZ2FpbiAiCisJCSAiKGM1MD0weCV4LCBjNTg9MHgleCwgYzYwPTB4JXgsIGM2OD0weCV4KVxuIiwKKwkJIHJ0bHBoeS0+ZGVmYXVsdF9pbml0aWFsZ2FpblswXSwKKwkJIHJ0bHBoeS0+ZGVmYXVsdF9pbml0aWFsZ2FpblsxXSwKKwkJIHJ0bHBoeS0+ZGVmYXVsdF9pbml0aWFsZ2FpblsyXSwKKwkJIHJ0bHBoeS0+ZGVmYXVsdF9pbml0aWFsZ2FpblszXSkpOworCisJLyogcmVhZCBmcmFtZXN5bmMgKi8KKwlydGxwaHktPmZyYW1lc3luYyA9IHJ0bF9nZXRfYmJyZWcoaHcsIFJPRkRNMF9SWERFVEVDVE9SMywgTUFTS0JZVEUwKTsKKwlydGxwaHktPmZyYW1lc3luY19jMzQgPSBydGxfZ2V0X2JicmVnKGh3LCBST0ZETTBfUlhERVRFQ1RPUjIsCisJCQkJCSAgICAgIE1BU0tEV09SRCk7CisJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwKKwkJICgiRGVmYXVsdCBmcmFtZXN5bmMgKDB4JXgpID0gMHgleFxuIiwKKwkJIFJPRkRNMF9SWERFVEVDVE9SMywgcnRscGh5LT5mcmFtZXN5bmMpKTsKKworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzX3BoeV9nZXRfdHhwb3dlcl9pbmRleChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggY2hhbm5lbCwKKwkJCQkJICB1OCAqY2NrcG93ZXJsZXZlbCwgdTggKm9mZG1wb3dlckxldmVsKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisJdTggaW5kZXggPSAoY2hhbm5lbCAtIDEpOworCisJLyogMS4gQ0NLICovCisJLyogUkYtQSAqLworCWNja3Bvd2VybGV2ZWxbMF0gPSBydGxlZnVzZS0+dHhwd3JsZXZlbF9jY2tbMF1baW5kZXhdOworCS8qIFJGLUIgKi8KKwljY2twb3dlcmxldmVsWzFdID0gcnRsZWZ1c2UtPnR4cHdybGV2ZWxfY2NrWzFdW2luZGV4XTsKKworCS8qIDIuIE9GRE0gZm9yIDFUIG9yIDJUICovCisJaWYgKHJ0bHBoeS0+cmZfdHlwZSA9PSBSRl8xVDJSIHx8IHJ0bHBoeS0+cmZfdHlwZSA9PSBSRl8xVDFSKSB7CisJCS8qIFJlYWQgSFQgNDAgT0ZETSBUWCBwb3dlciAqLworCQlvZmRtcG93ZXJMZXZlbFswXSA9IHJ0bGVmdXNlLT50eHB3cmxldmVsX2h0NDBfMXNbMF1baW5kZXhdOworCQlvZmRtcG93ZXJMZXZlbFsxXSA9IHJ0bGVmdXNlLT50eHB3cmxldmVsX2h0NDBfMXNbMV1baW5kZXhdOworCX0gZWxzZSBpZiAocnRscGh5LT5yZl90eXBlID09IFJGXzJUMlIpIHsKKwkJLyogUmVhZCBIVCA0MCBPRkRNIFRYIHBvd2VyICovCisJCW9mZG1wb3dlckxldmVsWzBdID0gcnRsZWZ1c2UtPnR4cHdybGV2ZWxfaHQ0MF8yc1swXVtpbmRleF07CisJCW9mZG1wb3dlckxldmVsWzFdID0gcnRsZWZ1c2UtPnR4cHdybGV2ZWxfaHQ0MF8yc1sxXVtpbmRleF07CisJfQorfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzX3BoeV9jY3hwb3dlcl9pbmRleGNoZWNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQl1OCBjaGFubmVsLCB1OCAqY2NrcG93ZXJsZXZlbCwgdTggKm9mZG1wb3dlcmxldmVsKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCisJcnRscGh5LT5jdXJfY2NrX3R4cHdyaWR4ID0gY2NrcG93ZXJsZXZlbFswXTsKKwlydGxwaHktPmN1cl9vZmRtMjRnX3R4cHdyaWR4ID0gb2ZkbXBvd2VybGV2ZWxbMF07Cit9CisKK3ZvaWQgcnRsOTJzX3BoeV9zZXRfdHhwb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTgJY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKwkvKiBbMF06UkYtQSwgWzFdOlJGLUIgKi8KKwl1OCBjY2twb3dlcmxldmVsWzJdLCBvZmRtcG93ZXJMZXZlbFsyXTsKKworCWlmIChydGxlZnVzZS0+dHhwd3JfZnJvbWVwcm9tID09IGZhbHNlKQorCQlyZXR1cm47CisKKwkvKiBNYWlubHkgd2UgdXNlIFJGLUEgVHggUG93ZXIgdG8gd3JpdGUgdGhlIFR4IFBvd2VyIHJlZ2lzdGVycywKKwkgKiBidXQgdGhlIFJGLUIgVHggUG93ZXIgbXVzdCBiZSBjYWxjdWxhdGVkIGJ5IHRoZSBhbnRlbm5hIGRpZmYuCisJICogU28gd2UgaGF2ZSB0byByZXdyaXRlIEFudGVubmEgZ2FpbiBvZmZzZXQgcmVnaXN0ZXIgaGVyZS4KKwkgKiBQbGVhc2UgcmVmZXIgdG8gQkIgcmVnaXN0ZXIgMHg4MGMKKwkgKiAxLiBGb3IgQ0NLLgorCSAqIDIuIEZvciBPRkRNIDFUIG9yIDJUICovCisJX3J0bDkyc19waHlfZ2V0X3R4cG93ZXJfaW5kZXgoaHcsIGNoYW5uZWwsICZjY2twb3dlcmxldmVsWzBdLAorCQkJJm9mZG1wb3dlckxldmVsWzBdKTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19MT1VELAorCQkJKCJDaGFubmVsLSVkLCBjY2tQb3dlckxldmVsIChBIC8gQikgPSAiCisJCQkiMHgleCAvIDB4JXgsICAgb2ZkbVBvd2VyTGV2ZWwgKEEgLyBCKSA9IDB4JXggLyAweCV4XG4iLAorCQkJY2hhbm5lbCwgY2NrcG93ZXJsZXZlbFswXSwgY2NrcG93ZXJsZXZlbFsxXSwKKwkJCW9mZG1wb3dlckxldmVsWzBdLCBvZmRtcG93ZXJMZXZlbFsxXSkpOworCisJX3J0bDkyc19waHlfY2N4cG93ZXJfaW5kZXhjaGVjayhodywgY2hhbm5lbCwgJmNja3Bvd2VybGV2ZWxbMF0sCisJCQkmb2ZkbXBvd2VyTGV2ZWxbMF0pOworCisJcnRsOTJzX3BoeV9yZjYwNTJfc2V0X2Nja3R4cG93ZXIoaHcsIGNja3Bvd2VybGV2ZWxbMF0pOworCXJ0bDkyc19waHlfcmY2MDUyX3NldF9vZmRtdHhwb3dlcihodywgJm9mZG1wb3dlckxldmVsWzBdLCBjaGFubmVsKTsKKworfQorCit2b2lkIHJ0bDkyc19waHlfY2hrX2Z3Y21kX2lvZG9uZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJdTE2IHBvbGxpbmdjbnQgPSAxMDAwMDsKKwl1MzIgdG1wdmFsdWU7CisKKwkvKiBNYWtlIHN1cmUgdGhhdCBDTUQgSU8gaGFzIGJlIGFjY2VwdGVkIGJ5IEZXLiAqLworCWRvIHsKKwkJdWRlbGF5KDEwKTsKKworCQl0bXB2YWx1ZSA9IHJ0bF9yZWFkX2R3b3JkKHJ0bHByaXYsIFdGTTUpOworCQlpZiAodG1wdmFsdWUgPT0gMCkKKwkJCWJyZWFrOworCX0gd2hpbGUgKC0tcG9sbGluZ2NudCk7CisKKwlpZiAocG9sbGluZ2NudCA9PSAwKQorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLCAoIlNldCBGVyBDbWQgZmFpbCEhXG4iKSk7Cit9CisKKworc3RhdGljIHZvaWQgX3J0bDkyc19waHlfc2V0X2Z3Y21kX2lvKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJdTMyIGlucHV0LCBjdXJyZW50X2FpZCA9IDA7CisKKwlpZiAoaXNfaGFsX3N0b3AocnRsaGFsKSkKKwkJcmV0dXJuOworCisJLyogV2UgcmUtbWFwIFJBIHJlbGF0ZWQgQ01EIElPIHRvIGNvbWJpbmF0aW9uYWwgb25lcyAqLworCS8qIGlmIEZXIHZlcnNpb24gaXMgdi41MiBvciBsYXRlci4gKi8KKwlzd2l0Y2ggKHJ0bGhhbC0+Y3VycmVudF9md2NtZF9pbykgeworCWNhc2UgRldfQ01EX1JBX1JFRlJFU0hfTjoKKwkJcnRsaGFsLT5jdXJyZW50X2Z3Y21kX2lvID0gRldfQ01EX1JBX1JFRlJFU0hfTl9DT01COworCQlicmVhazsKKwljYXNlIEZXX0NNRF9SQV9SRUZSRVNIX0JHOgorCQlydGxoYWwtPmN1cnJlbnRfZndjbWRfaW8gPSBGV19DTURfUkFfUkVGUkVTSF9CR19DT01COworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKHJ0bGhhbC0+Y3VycmVudF9md2NtZF9pbykgeworCWNhc2UgRldfQ01EX1JBX1JFU0VUOgorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0NNRCwgREJHX0RNRVNHLAorCQkJICgiRldfQ01EX1JBX1JFU0VUXG4iKSk7CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBXRk01LCBGV19SQV9SRVNFVCk7CisJCXJ0bDkyc19waHlfY2hrX2Z3Y21kX2lvZG9uZShodyk7CisJCWJyZWFrOworCWNhc2UgRldfQ01EX1JBX0FDVElWRToKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9DTUQsIERCR19ETUVTRywKKwkJCSAoIkZXX0NNRF9SQV9BQ1RJVkVcbiIpKTsKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFdGTTUsIEZXX1JBX0FDVElWRSk7CisJCXJ0bDkyc19waHlfY2hrX2Z3Y21kX2lvZG9uZShodyk7CisJCWJyZWFrOworCWNhc2UgRldfQ01EX1JBX1JFRlJFU0hfTjoKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9DTUQsIERCR19ETUVTRywKKwkJCSAoIkZXX0NNRF9SQV9SRUZSRVNIX05cbiIpKTsKKwkJaW5wdXQgPSBGV19SQV9SRUZSRVNIOworCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgV0ZNNSwgaW5wdXQpOworCQlydGw5MnNfcGh5X2Noa19md2NtZF9pb2RvbmUoaHcpOworCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgV0ZNNSwgRldfUkFfRU5BQkxFX1JTU0lfTUFTSyk7CisJCXJ0bDkyc19waHlfY2hrX2Z3Y21kX2lvZG9uZShodyk7CisJCWJyZWFrOworCWNhc2UgRldfQ01EX1JBX1JFRlJFU0hfQkc6CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfQ01ELCBEQkdfRE1FU0csCisJCQkgKCJGV19DTURfUkFfUkVGUkVTSF9CR1xuIikpOworCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgV0ZNNSwgRldfUkFfUkVGUkVTSCk7CisJCXJ0bDkyc19waHlfY2hrX2Z3Y21kX2lvZG9uZShodyk7CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBXRk01LCBGV19SQV9ESVNBQkxFX1JTU0lfTUFTSyk7CisJCXJ0bDkyc19waHlfY2hrX2Z3Y21kX2lvZG9uZShodyk7CisJCWJyZWFrOworCWNhc2UgRldfQ01EX1JBX1JFRlJFU0hfTl9DT01COgorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0NNRCwgREJHX0RNRVNHLAorCQkJICgiRldfQ01EX1JBX1JFRlJFU0hfTl9DT01CXG4iKSk7CisJCWlucHV0ID0gRldfUkFfSU9UX05fQ09NQjsKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFdGTTUsIGlucHV0KTsKKwkJcnRsOTJzX3BoeV9jaGtfZndjbWRfaW9kb25lKGh3KTsKKwkJYnJlYWs7CisJY2FzZSBGV19DTURfUkFfUkVGUkVTSF9CR19DT01COgorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0NNRCwgREJHX0RNRVNHLAorCQkJICgiRldfQ01EX1JBX1JFRlJFU0hfQkdfQ09NQlxuIikpOworCQlpbnB1dCA9IEZXX1JBX0lPVF9CR19DT01COworCQlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgV0ZNNSwgaW5wdXQpOworCQlydGw5MnNfcGh5X2Noa19md2NtZF9pb2RvbmUoaHcpOworCQlicmVhazsKKwljYXNlIEZXX0NNRF9JUUtfRU5BQkxFOgorCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0NNRCwgREJHX0RNRVNHLAorCQkJICgiRldfQ01EX0lRS19FTkFCTEVcbiIpKTsKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFdGTTUsIEZXX0lRS19FTkFCTEUpOworCQlydGw5MnNfcGh5X2Noa19md2NtZF9pb2RvbmUoaHcpOworCQlicmVhazsKKwljYXNlIEZXX0NNRF9QQVVTRV9ETV9CWV9TQ0FOOgorCQkvKiBMb3dlciBpbml0aWFsIGdhaW4gKi8KKwkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1hBQUdDQ09SRTEsIE1BU0tCWVRFMCwgMHgxNyk7CisJCXJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMF9YQkFHQ0NPUkUxLCBNQVNLQllURTAsIDB4MTcpOworCQkvKiBDQ0EgdGhyZXNob2xkICovCisJCXJ0bF9zZXRfYmJyZWcoaHcsIFJDQ0swX0NDQSwgTUFTS0JZVEUyLCAweDQwKTsKKwkJYnJlYWs7CisJY2FzZSBGV19DTURfUkVTVU1FX0RNX0JZX1NDQU46CisJCS8qIENDQSB0aHJlc2hvbGQgKi8KKwkJcnRsX3NldF9iYnJlZyhodywgUkNDSzBfQ0NBLCBNQVNLQllURTIsIDB4Y2QpOworCQlydGw5MnNfcGh5X3NldF90eHBvd2VyKGh3LCBydGxwaHktPmN1cnJlbnRfY2hhbm5lbCk7CisJCWJyZWFrOworCWNhc2UgRldfQ01EX0hJR0hfUFdSX0RJU0FCTEU6CisJCWlmIChydGxwcml2LT5kbS5kbV9mbGFnICYgSEFMX0RNX0hJUFdSX0RJU0FCTEUpCisJCQlicmVhazsKKworCQkvKiBMb3dlciBpbml0aWFsIGdhaW4gKi8KKwkJcnRsX3NldF9iYnJlZyhodywgUk9GRE0wX1hBQUdDQ09SRTEsIE1BU0tCWVRFMCwgMHgxNyk7CisJCXJ0bF9zZXRfYmJyZWcoaHcsIFJPRkRNMF9YQkFHQ0NPUkUxLCBNQVNLQllURTAsIDB4MTcpOworCQkvKiBDQ0EgdGhyZXNob2xkICovCisJCXJ0bF9zZXRfYmJyZWcoaHcsIFJDQ0swX0NDQSwgTUFTS0JZVEUyLCAweDQwKTsKKwkJYnJlYWs7CisJY2FzZSBGV19DTURfSElHSF9QV1JfRU5BQkxFOgorCQlpZiAoKHJ0bHByaXYtPmRtLmRtX2ZsYWcgJiBIQUxfRE1fSElQV1JfRElTQUJMRSkgfHwKKwkJCShydGxwcml2LT5kbS5keW5hbWljX3R4cG93ZXJfZW5hYmxlID09IHRydWUpKQorCQkJYnJlYWs7CisKKwkJLyogQ0NBIHRocmVzaG9sZCAqLworCQlydGxfc2V0X2JicmVnKGh3LCBSQ0NLMF9DQ0EsIE1BU0tCWVRFMiwgMHhjZCk7CisJCWJyZWFrOworCWNhc2UgRldfQ01EX0xQU19FTlRFUjoKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9DTUQsIERCR19ETUVTRywKKwkJCSAoIkZXX0NNRF9MUFNfRU5URVJcbiIpKTsKKwkJY3VycmVudF9haWQgPSBydGxwcml2LT5tYWM4MDIxMS5hc3NvY19pZDsKKwkJcnRsX3dyaXRlX2R3b3JkKHJ0bHByaXYsIFdGTTUsIChGV19MUFNfRU5URVIgfAorCQkJCSgoY3VycmVudF9haWQgfCAweGMwMDApIDw8IDgpKSk7CisJCXJ0bDkyc19waHlfY2hrX2Z3Y21kX2lvZG9uZShodyk7CisJCS8qIEZXIHNldCBUWE9QIGRpc2FibGUgaGVyZSwgc28gZGlzYWJsZSBFRENBCisJCSAqIHR1cmJvIG1vZGUgdW50aWwgZHJpdmVyIGxlYXZlIExQUyAqLworCQlicmVhazsKKwljYXNlIEZXX0NNRF9MUFNfTEVBVkU6CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfQ01ELCBEQkdfRE1FU0csCisJCQkgKCJGV19DTURfTFBTX0xFQVZFXG4iKSk7CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBXRk01LCBGV19MUFNfTEVBVkUpOworCQlydGw5MnNfcGh5X2Noa19md2NtZF9pb2RvbmUoaHcpOworCQlicmVhazsKKwljYXNlIEZXX0NNRF9BRERfQTJfRU5UUlk6CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfQ01ELCBEQkdfRE1FU0csCisJCQkgKCJGV19DTURfQUREX0EyX0VOVFJZXG4iKSk7CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBXRk01LCBGV19BRERfQTJfRU5UUlkpOworCQlydGw5MnNfcGh5X2Noa19md2NtZF9pb2RvbmUoaHcpOworCQlicmVhazsKKwljYXNlIEZXX0NNRF9DVFJMX0RNX0JZX0RSSVZFUjoKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9DTUQsIERCR19MT1VELAorCQkJICgiRldfQ01EX0NUUkxfRE1fQllfRFJJVkVSXG4iKSk7CisJCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCBXRk01LCBGV19DVFJMX0RNX0JZX0RSSVZFUik7CisJCXJ0bDkyc19waHlfY2hrX2Z3Y21kX2lvZG9uZShodyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcnRsOTJzX3BoeV9jaGtfZndjbWRfaW9kb25lKGh3KTsKKworCS8qIENsZWFyIEZXIENNRCBvcGVyYXRpb24gZmxhZy4gKi8KKwlydGxoYWwtPnNldF9md2NtZF9pbnByb2dyZXNzID0gZmFsc2U7Cit9CisKK2Jvb2wgcnRsOTJzX3BoeV9zZXRfZndfY21kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIGZ3Y21kX2lvdHlwZSBmd19jbWRpbykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9oYWwgKnJ0bGhhbCA9IHJ0bF9oYWwocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOworCXUzMglmd19wYXJhbSA9IEZXX0NNRF9JT19QQVJBX1FVRVJZKHJ0bHByaXYpOworCXUxNglmd19jbWRtYXAgPSBGV19DTURfSU9fUVVFUlkocnRscHJpdik7CisJYm9vbCBiUG9zdFByb2Nlc3NpbmcgPSBmYWxzZTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfQ01ELCBEQkdfTE9VRCwKKwkJCSgiU2V0IEZXIENtZCglI3gpLCBzZXRfZndjbWRfaW5wcm9ncmVzcyglZClcbiIsCisJCQlmd19jbWRpbywgcnRsaGFsLT5zZXRfZndjbWRfaW5wcm9ncmVzcykpOworCisJZG8geworCQkvKiBXZSByZS1tYXAgdG8gY29tYmluZWQgRlcgQ01EIG9uZXMgaWYgZmlybXdhcmUgdmVyc2lvbiAqLworCQkvKiBpcyB2LjUzIG9yIGxhdGVyLiAqLworCQlzd2l0Y2ggKGZ3X2NtZGlvKSB7CisJCWNhc2UgRldfQ01EX1JBX1JFRlJFU0hfTjoKKwkJCWZ3X2NtZGlvID0gRldfQ01EX1JBX1JFRlJFU0hfTl9DT01COworCQkJYnJlYWs7CisJCWNhc2UgRldfQ01EX1JBX1JFRlJFU0hfQkc6CisJCQlmd19jbWRpbyA9IEZXX0NNRF9SQV9SRUZSRVNIX0JHX0NPTUI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJLyogSWYgZmlybXdhcmUgdmVyc2lvbiBpcyB2LjYyIG9yIGxhdGVyLAorCQkgKiB1c2UgRldfQ01EX0lPX1NFVCBmb3IgRldfQ01EX0NUUkxfRE1fQllfRFJJVkVSICovCisJCWlmIChoYWxfZ2V0X2Zpcm13YXJldmVyc2lvbihydGxwcml2KSA+PSAweDNFKSB7CisJCQlpZiAoZndfY21kaW8gPT0gRldfQ01EX0NUUkxfRE1fQllfRFJJVkVSKQorCQkJCWZ3X2NtZGlvID0gRldfQ01EX0NUUkxfRE1fQllfRFJJVkVSX05FVzsKKwkJfQorCisKKwkJLyogV2Ugc2hhbGwgcmV2aXNlIGFsbCBGVyBDbWQgSU8gaW50byBSZWcweDM2NAorCQkgKiBETSBtYXAgdGFibGUgaW4gdGhlIGZ1dHVyZS4gKi8KKwkJc3dpdGNoIChmd19jbWRpbykgeworCQljYXNlIEZXX0NNRF9SQV9JTklUOgorCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9DTUQsIERCR19MT1VELCAoIlJBIGluaXQhIVxuIikpOworCQkJZndfY21kbWFwIHw9IEZXX1JBX0lOSVRfQ1RMOworCQkJRldfQ01EX0lPX1NFVChydGxwcml2LCBmd19jbWRtYXApOworCQkJLyogQ2xlYXIgY29udHJvbCBmbGFnIHRvIHN5bmMgd2l0aCBGVy4gKi8KKwkJCUZXX0NNRF9JT19DTFIocnRscHJpdiwgRldfUkFfSU5JVF9DVEwpOworCQkJYnJlYWs7CisJCWNhc2UgRldfQ01EX0RJR19ESVNBQkxFOgorCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9DTUQsIERCR19MT1VELAorCQkJCSAoIlNldCBESUcgZGlzYWJsZSEhXG4iKSk7CisJCQlmd19jbWRtYXAgJj0gfkZXX0RJR19FTkFCTEVfQ1RMOworCQkJRldfQ01EX0lPX1NFVChydGxwcml2LCBmd19jbWRtYXApOworCQkJYnJlYWs7CisJCWNhc2UgRldfQ01EX0RJR19FTkFCTEU6CisJCWNhc2UgRldfQ01EX0RJR19SRVNVTUU6CisJCQlpZiAoIShydGxwcml2LT5kbS5kbV9mbGFnICYgSEFMX0RNX0RJR19ESVNBQkxFKSkgeworCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfQ01ELCBEQkdfTE9VRCwKKwkJCQkJKCJTZXQgRElHIGVuYWJsZSBvciByZXN1bWUhIVxuIikpOworCQkJCWZ3X2NtZG1hcCB8PSAoRldfRElHX0VOQUJMRV9DVEwgfCBGV19TU19DVEwpOworCQkJCUZXX0NNRF9JT19TRVQocnRscHJpdiwgZndfY21kbWFwKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEZXX0NNRF9ESUdfSEFMVDoKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfQ01ELCBEQkdfTE9VRCwKKwkJCQkgKCJTZXQgRElHIGhhbHQhIVxuIikpOworCQkJZndfY21kbWFwICY9IH4oRldfRElHX0VOQUJMRV9DVEwgfCBGV19TU19DVEwpOworCQkJRldfQ01EX0lPX1NFVChydGxwcml2LCBmd19jbWRtYXApOworCQkJYnJlYWs7CisJCWNhc2UgRldfQ01EX1RYUFdSX1RSQUNLX1RIRVJNQUw6IHsKKwkJCXU4CXRoZXJtYWx2YWwgPSAwOworCQkJZndfY21kbWFwIHw9IEZXX1BXUl9UUktfQ1RMOworCisJCQkvKiBDbGVhciBGVyBwYXJhbWV0ZXIgaW4gdGVybXMgb2YgdGhlcm1hbCBwYXJ0cy4gKi8KKwkJCWZ3X3BhcmFtICY9IEZXX1BXUl9UUktfUEFSQU1fQ0xSOworCisJCQl0aGVybWFsdmFsID0gcnRscHJpdi0+ZG0udGhlcm1hbHZhbHVlOworCQkJZndfcGFyYW0gfD0gKCh0aGVybWFsdmFsIDw8IDI0KSB8CisJCQkJICAgICAocnRsZWZ1c2UtPnRoZXJtYWxtZXRlclswXSA8PCAxNikpOworCisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0NNRCwgREJHX0xPVUQsCisJCQkJICgiU2V0IFR4UHdyIHRyYWNraW5nISEgIgorCQkJCSAiRndDbWRNYXAoJSN4KSwgRndQYXJhbSglI3gpXG4iLAorCQkJCSBmd19jbWRtYXAsIGZ3X3BhcmFtKSk7CisKKwkJCUZXX0NNRF9QQVJBX1NFVChydGxwcml2LCBmd19wYXJhbSk7CisJCQlGV19DTURfSU9fU0VUKHJ0bHByaXYsIGZ3X2NtZG1hcCk7CisKKwkJCS8qIENsZWFyIGNvbnRyb2wgZmxhZyB0byBzeW5jIHdpdGggRlcuICovCisJCQlGV19DTURfSU9fQ0xSKHJ0bHByaXYsIEZXX1BXUl9UUktfQ1RMKTsKKwkJCX0KKwkJCWJyZWFrOworCQkvKiBUaGUgZm9sbG93aW5nIEZXIENNRHMgYXJlIG9ubHkgY29tcGF0aWJsZSB0bworCQkgKiB2LjUzIG9yIGxhdGVyLiAqLworCQljYXNlIEZXX0NNRF9SQV9SRUZSRVNIX05fQ09NQjoKKwkJCWZ3X2NtZG1hcCB8PSBGV19SQV9OX0NUTDsKKworCQkJLyogQ2xlYXIgUkEgQkcgbW9kZSBjb250cm9sLiAqLworCQkJZndfY21kbWFwICY9IH4oRldfUkFfQkdfQ1RMIHwgRldfUkFfSU5JVF9DVEwpOworCisJCQkvKiBDbGVhciBGVyBwYXJhbWV0ZXIgaW4gdGVybXMgb2YgUkEgcGFydHMuICovCisJCQlmd19wYXJhbSAmPSBGV19SQV9QQVJBTV9DTFI7CisKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfQ01ELCBEQkdfTE9VRCwKKwkJCQkgKCJbRlcgQ01EXSBbTmV3IFZlcnNpb25dICIKKwkJCQkgIlNldCBSQS9JT1QgQ29tYiBpbiBuIG1vZGUhISBGd0NtZE1hcCglI3gpLCAiCisJCQkJICJGd1BhcmFtKCUjeClcbiIsIGZ3X2NtZG1hcCwgZndfcGFyYW0pKTsKKworCQkJRldfQ01EX1BBUkFfU0VUKHJ0bHByaXYsIGZ3X3BhcmFtKTsKKwkJCUZXX0NNRF9JT19TRVQocnRscHJpdiwgZndfY21kbWFwKTsKKworCQkJLyogQ2xlYXIgY29udHJvbCBmbGFnIHRvIHN5bmMgd2l0aCBGVy4gKi8KKwkJCUZXX0NNRF9JT19DTFIocnRscHJpdiwgRldfUkFfTl9DVEwpOworCQkJYnJlYWs7CisJCWNhc2UgRldfQ01EX1JBX1JFRlJFU0hfQkdfQ09NQjoKKwkJCWZ3X2NtZG1hcCB8PSBGV19SQV9CR19DVEw7CisKKwkJCS8qIENsZWFyIFJBIG4tbW9kZSBjb250cm9sLiAqLworCQkJZndfY21kbWFwICY9IH4oRldfUkFfTl9DVEwgfCBGV19SQV9JTklUX0NUTCk7CisJCQkvKiBDbGVhciBGVyBwYXJhbWV0ZXIgaW4gdGVybXMgb2YgUkEgcGFydHMuICovCisJCQlmd19wYXJhbSAmPSBGV19SQV9QQVJBTV9DTFI7CisKKwkJCUZXX0NNRF9QQVJBX1NFVChydGxwcml2LCBmd19wYXJhbSk7CisJCQlGV19DTURfSU9fU0VUKHJ0bHByaXYsIGZ3X2NtZG1hcCk7CisKKwkJCS8qIENsZWFyIGNvbnRyb2wgZmxhZyB0byBzeW5jIHdpdGggRlcuICovCisJCQlGV19DTURfSU9fQ0xSKHJ0bHByaXYsIEZXX1JBX0JHX0NUTCk7CisJCQlicmVhazsKKwkJY2FzZSBGV19DTURfSVFLX0VOQUJMRToKKwkJCWZ3X2NtZG1hcCB8PSBGV19JUUtfQ1RMOworCQkJRldfQ01EX0lPX1NFVChydGxwcml2LCBmd19jbWRtYXApOworCQkJLyogQ2xlYXIgY29udHJvbCBmbGFnIHRvIHN5bmMgd2l0aCBGVy4gKi8KKwkJCUZXX0NNRF9JT19DTFIocnRscHJpdiwgRldfSVFLX0NUTCk7CisJCQlicmVhazsKKwkJLyogVGhlIGZvbGxvd2luZyBGVyBDTUQgaXMgY29tcGF0aWJsZSB0byB2LjYyIG9yIGxhdGVyLiAgKi8KKwkJY2FzZSBGV19DTURfQ1RSTF9ETV9CWV9EUklWRVJfTkVXOgorCQkJZndfY21kbWFwIHw9IEZXX0RSSVZFUl9DVFJMX0RNX0NUTDsKKwkJCUZXX0NNRF9JT19TRVQocnRscHJpdiwgZndfY21kbWFwKTsKKwkJCWJyZWFrOworCQkvKiAgVGhlIGZvbGxvd2VkIEZXIENtZHMgbmVlZHMgcG9zdC1wcm9jZXNzaW5nIGxhdGVyLiAqLworCQljYXNlIEZXX0NNRF9SRVNVTUVfRE1fQllfU0NBTjoKKwkJCWZ3X2NtZG1hcCB8PSAoRldfRElHX0VOQUJMRV9DVEwgfAorCQkJCSAgICAgIEZXX0hJR0hfUFdSX0VOQUJMRV9DVEwgfAorCQkJCSAgICAgIEZXX1NTX0NUTCk7CisKKwkJCWlmIChydGxwcml2LT5kbS5kbV9mbGFnICYgSEFMX0RNX0RJR19ESVNBQkxFIHx8CisJCQkJIWRpZ3RhYmxlLmRpZ19lbmFibGVfZmxhZykKKwkJCQlmd19jbWRtYXAgJj0gfkZXX0RJR19FTkFCTEVfQ1RMOworCisJCQlpZiAoKHJ0bHByaXYtPmRtLmRtX2ZsYWcgJiBIQUxfRE1fSElQV1JfRElTQUJMRSkgfHwKKwkJCSAgICAocnRscHJpdi0+ZG0uZHluYW1pY190eHBvd2VyX2VuYWJsZSA9PSB0cnVlKSkKKwkJCQlmd19jbWRtYXAgJj0gfkZXX0hJR0hfUFdSX0VOQUJMRV9DVEw7CisKKwkJCWlmICgoZGlndGFibGUuZGlnX2V4dF9wb3J0X3N0YWdlID09CisJCQkgICAgRElHX0VYVF9QT1JUX1NUQUdFXzApIHx8CisJCQkgICAgKGRpZ3RhYmxlLmRpZ19leHRfcG9ydF9zdGFnZSA9PQorCQkJICAgIERJR19FWFRfUE9SVF9TVEFHRV8xKSkKKwkJCQlmd19jbWRtYXAgJj0gfkZXX0RJR19FTkFCTEVfQ1RMOworCisJCQlGV19DTURfSU9fU0VUKHJ0bHByaXYsIGZ3X2NtZG1hcCk7CisJCQliUG9zdFByb2Nlc3NpbmcgPSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgRldfQ01EX1BBVVNFX0RNX0JZX1NDQU46CisJCQlmd19jbWRtYXAgJj0gfihGV19ESUdfRU5BQkxFX0NUTCB8CisJCQkJICAgICAgIEZXX0hJR0hfUFdSX0VOQUJMRV9DVEwgfAorCQkJCSAgICAgICBGV19TU19DVEwpOworCQkJRldfQ01EX0lPX1NFVChydGxwcml2LCBmd19jbWRtYXApOworCQkJYlBvc3RQcm9jZXNzaW5nID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIEZXX0NNRF9ISUdIX1BXUl9ESVNBQkxFOgorCQkJZndfY21kbWFwICY9IH5GV19ISUdIX1BXUl9FTkFCTEVfQ1RMOworCQkJRldfQ01EX0lPX1NFVChydGxwcml2LCBmd19jbWRtYXApOworCQkJYlBvc3RQcm9jZXNzaW5nID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIEZXX0NNRF9ISUdIX1BXUl9FTkFCTEU6CisJCQlpZiAoIShydGxwcml2LT5kbS5kbV9mbGFnICYgSEFMX0RNX0hJUFdSX0RJU0FCTEUpICYmCisJCQkJKHJ0bHByaXYtPmRtLmR5bmFtaWNfdHhwb3dlcl9lbmFibGUgIT0gdHJ1ZSkpIHsKKwkJCQlmd19jbWRtYXAgfD0gKEZXX0hJR0hfUFdSX0VOQUJMRV9DVEwgfAorCQkJCQkgICAgICBGV19TU19DVEwpOworCQkJCUZXX0NNRF9JT19TRVQocnRscHJpdiwgZndfY21kbWFwKTsKKwkJCQliUG9zdFByb2Nlc3NpbmcgPSB0cnVlOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgRldfQ01EX0RJR19NT0RFX0ZBOgorCQkJZndfY21kbWFwIHw9IEZXX0ZBX0NUTDsKKwkJCUZXX0NNRF9JT19TRVQocnRscHJpdiwgZndfY21kbWFwKTsKKwkJCWJyZWFrOworCQljYXNlIEZXX0NNRF9ESUdfTU9ERV9TUzoKKwkJCWZ3X2NtZG1hcCAmPSB+RldfRkFfQ1RMOworCQkJRldfQ01EX0lPX1NFVChydGxwcml2LCBmd19jbWRtYXApOworCQkJYnJlYWs7CisJCWNhc2UgRldfQ01EX1BBUEVfQ09OVFJPTDoKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfQ01ELCBEQkdfTE9VRCwKKwkJCQkgKCJbRlcgQ01EXSBTZXQgUEFQRSBDb250cm9sXG4iKSk7CisJCQlmd19jbWRtYXAgJj0gfkZXX1BBUEVfQ1RMX0JZX1NXX0hXOworCisJCQlGV19DTURfSU9fU0VUKHJ0bHByaXYsIGZ3X2NtZG1hcCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIFBhc3MgdG8gb3JpZ2luYWwgRlcgQ01EIHByb2Nlc3NpbmcgY2FsbGJhY2sKKwkJCSAqIHJvdXRpbmUuICovCisJCQliUG9zdFByb2Nlc3NpbmcgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlIChmYWxzZSk7CisKKwkvKiBXZSBzaGFsbCBwb3N0IHByb2Nlc3NpbmcgdGhlc2UgRlcgQ01EIGlmCisJICogdmFyaWFibGUgYlBvc3RQcm9jZXNzaW5nIGlzIHNldC4gKi8KKwlpZiAoYlBvc3RQcm9jZXNzaW5nICYmICFydGxoYWwtPnNldF9md2NtZF9pbnByb2dyZXNzKSB7CisJCXJ0bGhhbC0+c2V0X2Z3Y21kX2lucHJvZ3Jlc3MgPSB0cnVlOworCQkvKiBVcGRhdGUgY3VycmVudCBGVyBDbWQgZm9yIGNhbGxiYWNrIHVzZS4gKi8KKwkJcnRsaGFsLT5jdXJyZW50X2Z3Y21kX2lvID0gZndfY21kaW87CisJfSBlbHNlIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCV9ydGw5MnNfcGh5X3NldF9md2NtZF9pbyhodyk7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYwl2b2lkIF9ydGw5MnNfcGh5X2NoZWNrX2VwaHlfc3dpdGNocmVhZHkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXUzMglkZWxheSA9IDEwMDsKKwl1OAlyZWd1MTsKKworCXJlZ3UxID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCAweDU1NCk7CisJd2hpbGUgKChyZWd1MSAmIEJJVCg1KSkgJiYgKGRlbGF5ID4gMCkpIHsKKwkJcmVndTEgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIDB4NTU0KTsKKwkJZGVsYXktLTsKKwkJLyogV2UgZGVsYXkgb25seSA1MHVzIHRvIHByZXZlbnQKKwkJICogYmVpbmcgc2NoZWR1bGVkIG91dC4gKi8KKwkJdWRlbGF5KDUwKTsKKwl9Cit9CisKK3ZvaWQgcnRsOTJzX3BoeV9zd2l0Y2hfZXBoeV9wYXJhbWV0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcHNfY3RsICpwcHNjID0gcnRsX3BzYyhydGxfcHJpdihodykpOworCisJLyogVGhlIHdheSB0byBiZSBjYXBhYmxlIHRvIHN3aXRjaCBjbG9jayByZXF1ZXN0CisJICogd2hlbiB0aGUgUEcgc2V0dGluZyBkb2VzIG5vdCBzdXBwb3J0IGNsb2NrIHJlcXVlc3QuCisJICogVGhpcyBpcyB0aGUgYmFja2Rvb3Igc29sdXRpb24gdG8gc3dpdGNoIGNsb2NrCisJICogcmVxdWVzdCBiZWZvcmUgQVNQTSBvciBEMy4gKi8KKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgMHg1NDAsIDB4NzNjMTEpOworCXJ0bF93cml0ZV9kd29yZChydGxwcml2LCAweDU0OCwgMHgyNDA3Yyk7CisKKwkvKiBTd2l0Y2ggRVBIWSBwYXJhbWV0ZXIhISEhICovCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgMHg1NTAsIDB4MTAwMCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHg1NTQsIDB4MjApOworCV9ydGw5MnNfcGh5X2NoZWNrX2VwaHlfc3dpdGNocmVhZHkoaHcpOworCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgMHg1NTAsIDB4YTBlYik7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHg1NTQsIDB4M2UpOworCV9ydGw5MnNfcGh5X2NoZWNrX2VwaHlfc3dpdGNocmVhZHkoaHcpOworCisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgMHg1NTAsIDB4ZmY4MCk7CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgMHg1NTQsIDB4MzkpOworCV9ydGw5MnNfcGh5X2NoZWNrX2VwaHlfc3dpdGNocmVhZHkoaHcpOworCisJLyogRGVsYXkgTDEgZW50ZXIgdGltZSAqLworCWlmIChwcHNjLT5zdXBwb3J0X2FzcG0gJiYgIXBwc2MtPnN1cHBvcnRfYmFja2Rvb3IpCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4NTYwLCAweDQwKTsKKwllbHNlCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIDB4NTYwLCAweDAwKTsKKworfQorCit2b2lkIHJ0bDkyc19waHlfc2V0X2JlYWNvbl9od3JlZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IEJlYWNvbkludGVydmFsKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlydGxfd3JpdGVfZHdvcmQocnRscHJpdiwgV0ZNNSwgMHhGMTAwMDAwMCB8IChCZWFjb25JbnRlcnZhbCA8PCA4KSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9waHkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL3BoeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZTUwNGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9waHkuaApAQCAtMCwwICsxLDEwMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fUlRMOTJTX1BIWV9IX18KKyNkZWZpbmUgX19SVEw5MlNfUEhZX0hfXworCisjZGVmaW5lIE1BWF9UWFBXUl9JRFhfTk1PREVfOTJTCQk2MworI2RlZmluZSBNQVhfRE9aRV9XQUlUSU5HX1RJTUVTXzl4CTY0CisKKy8qIENoYW5uZWwgc3dpdGNoOlRoZSBzaXplIG9mCisgKiBjb21tYW5kIHRhYmxlcyBmb3Igc3dpdGNoIGNoYW5uZWwgKi8KKyNkZWZpbmUgTUFYX1BSRUNNRF9DTlQJCQkxNgorI2RlZmluZSBNQVhfUkZERVBFTkRDTURfQ05UCQkxNgorI2RlZmluZSBNQVhfUE9TVENNRF9DTlQJCQkxNgorCisjZGVmaW5lIFJGOTBfUEFUSF9NQVgJCQk0CisKK2VudW0gdmVyc2lvbl84MTkycyB7CisJVkVSU0lPTl84MTkyU19BQ1VULAorCVZFUlNJT05fODE5MlNfQkNVVCwKKwlWRVJTSU9OXzgxOTJTX0NDVVQKK307CisKK2VudW0gc3djaG5sY21kX2lkIHsKKwlDTURJRF9FTkQsCisJQ01ESURfU0VUX1RYUE9XRVJPV0VSX0xFVkVMLAorCUNNRElEX0JCUkVHV1JJVEUxMCwKKwlDTURJRF9XUklURVBPUlRfVUxPTkcsCisJQ01ESURfV1JJVEVQT1JUX1VTSE9SVCwKKwlDTURJRF9XUklURVBPUlRfVUNIQVIsCisJQ01ESURfUkZfV1JJVEVSRUcsCit9OworCitzdHJ1Y3Qgc3djaG5sY21kIHsKKwllbnVtIHN3Y2hubGNtZF9pZCBjbWRpZDsKKwl1MzIgcGFyYTE7CisJdTMyIHBhcmEyOworCXUzMiBtc2RlbGF5OworfTsKKworZW51bSBiYXNlYmFuZF9jb25maWdfdHlwZSB7CisJLyogUmFkaW8gUGF0aCBBICovCisJQkFTRUJBTkRfQ09ORklHX1BIWV9SRUcgPSAwLAorCS8qIFJhZGlvIFBhdGggQiAqLworCUJBU0VCQU5EX0NPTkZJR19BR0NfVEFCID0gMSwKK307CisKKyNkZWZpbmUgaGFsX2dldF9maXJtd2FyZXZlcnNpb24ocnRscHJpdikgXAorCSgoKHN0cnVjdCBydF9maXJtd2FyZSAqKShydGxwcml2LT5ydGxoYWwucGZpcm13YXJlKSktPmZpcm13YXJldmVyc2lvbikKKwordTMyIHJ0bDkyc19waHlfcXVlcnlfYmJfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgcmVnYWRkciwgdTMyIGJpdG1hc2spOwordm9pZCBydGw5MnNfcGh5X3NldF9iYl9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiByZWdhZGRyLCB1MzIgYml0bWFzaywKKwkJCSAgIHUzMiBkYXRhKTsKK3ZvaWQgcnRsOTJzX3BoeV9zY2FuX29wZXJhdGlvbl9iYWNrdXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IG9wZXJhdGlvbik7Cit1MzIgcnRsOTJzX3BoeV9xdWVyeV9yZl9yZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsCisJCQkgICAgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrKTsKK3ZvaWQgcnRsOTJzX3BoeV9zZXRfcmZfcmVnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAllbnVtIHJhZGlvX3BhdGggcmZwYXRoLAorCQkJICAgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrLCB1MzIgZGF0YSk7Cit2b2lkIHJ0bDkyc19waHlfc2V0X2J3X21vZGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaF90eXBlKTsKK3U4IHJ0bDkyc19waHlfc3dfY2hubChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Citib29sIHJ0bDkyc19waHlfc2V0X3JmX3Bvd2VyX3N0YXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgIGVudW0gcmZfcHdyc3RhdGUgcmZwb3dlcl9zdGF0ZSk7Citib29sIHJ0bDkyc19waHlfbWFjX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyc19waHlfc3dpdGNoX2VwaHlfcGFyYW1ldGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK2Jvb2wgcnRsOTJzX3BoeV9iYl9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworYm9vbCBydGw5MnNfcGh5X3JmX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDkyc19waHlfZ2V0X2h3X3JlZ19vcmlnaW5hbHZhbHVlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJzX3BoeV9zZXRfdHhwb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTgJY2hhbm5lbCk7Citib29sIHJ0bDkyc19waHlfc2V0X2Z3X2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBmd2NtZF9pb3R5cGUgZndjbWRfaW8pOwordm9pZCBydGw5MnNfcGh5X2Noa19md2NtZF9pb2RvbmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MnNfcGh5X3NldF9iZWFjb25faHdyZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBiZWFjb25pbnRlcnZhbCk7Cit1OCBydGw5MnNfcGh5X2NvbmZpZ19yZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSByYWRpb19wYXRoIHJmcGF0aCkgOworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvcmVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTE2ZWFkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvcmVnLmgKQEAgLTAsMCArMSwxMTg4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19SRUFMVEVLXzkyU19SRUdfSF9fCisjZGVmaW5lIF9fUkVBTFRFS185MlNfUkVHX0hfXworCisvKiAxLiBTeXN0ZW0gQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMgICovCisjZGVmaW5lCVJFR19TWVNfSVNPX0NUUkwJCQkweDAwMDAKKyNkZWZpbmUJUkVHX1NZU19GVU5DX0VOCQkJCTB4MDAwMgorI2RlZmluZQlQTUNfRlNNCQkJCQkweDAwMDQKKyNkZWZpbmUJU1lTX0NMS1IJCQkJMHgwMDA4CisjZGVmaW5lCUVQUk9NX0NNRAkJCQkweDAwMEEKKyNkZWZpbmUJRUVfVlBECQkJCQkweDAwMEMKKyNkZWZpbmUJQUZFX01JU0MJCQkJMHgwMDEwCisjZGVmaW5lCVNQUzBfQ1RSTAkJCQkweDAwMTEKKyNkZWZpbmUJU1BTMV9DVFJMCQkJCTB4MDAxOAorI2RlZmluZQlSRl9DVFJMCQkJCQkweDAwMUYKKyNkZWZpbmUJTERPQTE1X0NUUkwJCQkJMHgwMDIwCisjZGVmaW5lCUxET1YxMkRfQ1RSTAkJCQkweDAwMjEKKyNkZWZpbmUJTERPSENJMTJfQ1RSTAkJCQkweDAwMjIKKyNkZWZpbmUJTERPX1VTQl9TRElPCQkJCTB4MDAyMworI2RlZmluZQlMUExET19DVFJMCQkJCTB4MDAyNAorI2RlZmluZQlBRkVfWFRBTF9DVFJMCQkJCTB4MDAyNgorI2RlZmluZQlBRkVfUExMX0NUUkwJCQkJMHgwMDI4CisjZGVmaW5lCVJFR19FRlVTRV9DVFJMCQkJCTB4MDAzMAorI2RlZmluZQlSRUdfRUZVU0VfVEVTVAkJCQkweDAwMzQKKyNkZWZpbmUJUFdSX0RBVEEJCQkJMHgwMDM4CisjZGVmaW5lCURCR19QT1JUCQkJCTB4MDAzQQorI2RlZmluZQlEUFNfVElNRVIJCQkJMHgwMDNDCisjZGVmaW5lCVJDTEtfTU9OCQkJCTB4MDAzRQorCisvKiAyLiBDb21tYW5kIENvbnRyb2wgUmVnaXN0ZXJzCSAgKi8KKyNkZWZpbmUJQ01EUgkJCQkJMHgwMDQwCisjZGVmaW5lCVRYUEFVU0UJCQkJCTB4MDA0MgorI2RlZmluZQlMQktNRF9TRUwJCQkJMHgwMDQzCisjZGVmaW5lCVRDUgkJCQkJMHgwMDQ0CisjZGVmaW5lCVJDUgkJCQkJMHgwMDQ4CisjZGVmaW5lCU1TUgkJCQkJMHgwMDRDCisjZGVmaW5lCVNZU0ZfQ0ZHCQkJCTB4MDA0RAorI2RlZmluZQlSWF9QS1lfTElNSVQJCQkJMHgwMDRFCisjZGVmaW5lCU1CSURDVFJMCQkJCTB4MDA0RgorCisvKiAzLiBNQUNJRCBTZXR0aW5nIFJlZ2lzdGVycwkgKi8KKyNkZWZpbmUJTUFDSURSCQkJCQkweDAwNTAKKyNkZWZpbmUJTUFDSURSMAkJCQkJMHgwMDUwCisjZGVmaW5lCU1BQ0lEUjQJCQkJCTB4MDA1NAorI2RlZmluZQlCU1NJRFIJCQkJCTB4MDA1OAorI2RlZmluZQlIV1ZJRAkJCQkJMHgwMDVFCisjZGVmaW5lCU1BUgkJCQkJMHgwMDYwCisjZGVmaW5lCU1CSURDQU1DT05URU5UCQkJCTB4MDA2OAorI2RlZmluZQlNQklEQ0FNQ0ZHCQkJCTB4MDA3MAorI2RlZmluZQlCVUlMRFRJTUUJCQkJMHgwMDc0CisjZGVmaW5lCUJVSUxEVVNFUgkJCQkweDAwNzgKKworI2RlZmluZQlJRFIwCQkJCQlNQUNJRFIwCisjZGVmaW5lCUlEUjQJCQkJCU1BQ0lEUjQKKworLyogNC4gVGltaW5nIENvbnRyb2wgUmVnaXN0ZXJzCSAqLworI2RlZmluZQlUU0ZSCQkJCQkweDAwODAKKyNkZWZpbmUJU0xPVF9USU1FCQkJCTB4MDA4OQorI2RlZmluZQlVU1RJTUUJCQkJCTB4MDA4QQorI2RlZmluZQlTSUZTX0NDSwkJCQkweDAwOEMKKyNkZWZpbmUJU0lGU19PRkRNCQkJCTB4MDA4RQorI2RlZmluZQlQSUZTX1RJTUUJCQkJMHgwMDkwCisjZGVmaW5lCUFDS19USU1FT1VUCQkJCTB4MDA5MQorI2RlZmluZQlFSUZTVFIJCQkJCTB4MDA5MgorI2RlZmluZQlCQ05fSU5URVJWQUwJCQkJMHgwMDk0CisjZGVmaW5lCUFUSU1XTkQJCQkJCTB4MDA5NgorI2RlZmluZQlCQ05fRFJWX0VBUkxZX0lOVAkJCTB4MDA5OAorI2RlZmluZQlCQ05fRE1BVElNRQkJCQkweDAwOUEKKyNkZWZpbmUJQkNOX0VSUl9USFJFU0gJCQkJMHgwMDlDCisjZGVmaW5lCU1MVAkJCQkJMHgwMDlECisjZGVmaW5lCVJTVkRfTUFDX1RVTkVfVVMJCQkweDAwOUUKKworLyogNS4gRklGTyBDb250cm9sIFJlZ2lzdGVycwkgICovCisjZGVmaW5lIFJRUE4JCQkJCTB4MDBBMAorI2RlZmluZQlSUVBOMQkJCQkJMHgwMEEwCisjZGVmaW5lCVJRUE4yCQkJCQkweDAwQTEKKyNkZWZpbmUJUlFQTjMJCQkJCTB4MDBBMgorI2RlZmluZQlSUVBONAkJCQkJMHgwMEEzCisjZGVmaW5lCVJRUE41CQkJCQkweDAwQTQKKyNkZWZpbmUJUlFQTjYJCQkJCTB4MDBBNQorI2RlZmluZQlSUVBONwkJCQkJMHgwMEE2CisjZGVmaW5lCVJRUE44CQkJCQkweDAwQTcKKyNkZWZpbmUJUlFQTjkJCQkJCTB4MDBBOAorI2RlZmluZQlSUVBOMTAJCQkJCTB4MDBBOQorI2RlZmluZQlMRF9SUVBOCQkJCQkweDAwQUIKKyNkZWZpbmUJUlhGRl9CTkRZCQkJCTB4MDBBQworI2RlZmluZQlSWFJQVF9CTkRZCQkJCTB4MDBCMAorI2RlZmluZQlUWFBLVEJVRl9QR0JORFkJCQkJMHgwMEI0CisjZGVmaW5lCVBCUAkJCQkJMHgwMEI1CisjZGVmaW5lCVJYRFJWSU5GT19TWgkJCQkweDAwQjYKKyNkZWZpbmUJVFhGRl9TVEFUVVMJCQkJMHgwMEI3CisjZGVmaW5lCVJYRkZfU1RBVFVTCQkJCTB4MDBCOAorI2RlZmluZQlUWEZGX0VNUFRZX1RICQkJCTB4MDBCOQorI2RlZmluZQlTRElPX1JYX0JMS1NaCQkJCTB4MDBCQworI2RlZmluZQlSWERNQQkJCQkJMHgwMEJECisjZGVmaW5lCVJYUEtUX05VTQkJCQkweDAwQkUKKyNkZWZpbmUJQzJIQ01EX1VEVF9TSVpFCQkJCTB4MDBDMAorI2RlZmluZQlDMkhDTURfVURUX0FERFIJCQkJMHgwMEMyCisjZGVmaW5lCUZJRk9QQUdFMQkJCQkweDAwQzQKKyNkZWZpbmUJRklGT1BBR0UyCQkJCTB4MDBDOAorI2RlZmluZQlGSUZPUEFHRTMJCQkJMHgwMENDCisjZGVmaW5lCUZJRk9QQUdFNAkJCQkweDAwRDAKKyNkZWZpbmUJRklGT1BBR0U1CQkJCTB4MDBENAorI2RlZmluZQlGV19SU1ZEX1BHX0NSVEwJCQkJMHgwMEQ4CisjZGVmaW5lCVJYRE1BX0FHR19QR19USAkJCQkweDAwRDkKKyNkZWZpbmUJVFhERVNDX01TSwkJCQkweDAwREMKKyNkZWZpbmUJVFhSUFRGRl9SRFBUUgkJCQkweDAwRTAKKyNkZWZpbmUJVFhSUFRGRl9XVFBUUgkJCQkweDAwRTQKKyNkZWZpbmUJQzJIRkZfUkRQVFIJCQkJMHgwMEU4CisjZGVmaW5lCUMySEZGX1dUUFRSCQkJCTB4MDBFQworI2RlZmluZQlSWEZGMF9SRFBUUgkJCQkweDAwRjAKKyNkZWZpbmUJUlhGRjBfV1RQVFIJCQkJMHgwMEY0CisjZGVmaW5lCVJYRkYxX1JEUFRSCQkJCTB4MDBGOAorI2RlZmluZQlSWEZGMV9XVFBUUgkJCQkweDAwRkMKKyNkZWZpbmUJUlhSUFQwX1JEUFRSCQkJCTB4MDEwMAorI2RlZmluZQlSWFJQVDBfV1RQVFIJCQkJMHgwMTA0CisjZGVmaW5lCVJYUlBUMV9SRFBUUgkJCQkweDAxMDgKKyNkZWZpbmUJUlhSUFQxX1dUUFRSCQkJCTB4MDEwQworI2RlZmluZQlSWDBfVURUX1NJWkUJCQkJMHgwMTEwCisjZGVmaW5lCVJYMVBLVE5VTQkJCQkweDAxMTQKKyNkZWZpbmUJUlhGSUxURVJNQVAJCQkJMHgwMTE2CisjZGVmaW5lCVJYRklMVEVSTUFQX0dQMQkJCQkweDAxMTgKKyNkZWZpbmUJUlhGSUxURVJNQVBfR1AyCQkJCTB4MDExQQorI2RlZmluZQlSWEZJTFRFUk1BUF9HUDMJCQkJMHgwMTFDCisjZGVmaW5lCUJDTlFfQ1RSTAkJCQkweDAxMjAKKyNkZWZpbmUJTUdUUV9DVFJMCQkJCTB4MDEyNAorI2RlZmluZQlISVFfQ1RSTAkJCQkweDAxMjgKKyNkZWZpbmUJVk9USUQ3X0NUUkwJCQkJMHgwMTJjCisjZGVmaW5lCVZPVElENl9DVFJMCQkJCTB4MDEzMAorI2RlZmluZQlWSVRJRDVfQ1RSTAkJCQkweDAxMzQKKyNkZWZpbmUJVklUSUQ0X0NUUkwJCQkJMHgwMTM4CisjZGVmaW5lCUJFVElEM19DVFJMCQkJCTB4MDEzYworI2RlZmluZQlCRVRJRDBfQ1RSTAkJCQkweDAxNDAKKyNkZWZpbmUJQktUSUQyX0NUUkwJCQkJMHgwMTQ0CisjZGVmaW5lCUJLVElEMV9DVFJMCQkJCTB4MDE0OAorI2RlZmluZQlDTURRX0NUUkwJCQkJMHgwMTRjCisjZGVmaW5lCVRYUEtUX05VTV9DVFJMCQkJCTB4MDE1MAorI2RlZmluZQlUWFFfUEdBREQJCQkJMHgwMTUyCisjZGVmaW5lCVRYRkZfUEdfTlVNCQkJCTB4MDE1NAorI2RlZmluZQlUUlhETUFfU1RBVFVTCQkJCTB4MDE1NgorCisvKiA2LiBBZGFwdGl2ZSBDb250cm9sIFJlZ2lzdGVycyAgICovCisjZGVmaW5lCUlOSU1DU19TRUwJCQkJMHgwMTYwCisjZGVmaW5lCVRYX1JBVEVfUkVHCQkJCUlOSU1DU19TRUwKKyNkZWZpbmUJSU5JUlRTTUNTX1NFTAkJCQkweDAxODAKKyNkZWZpbmUJUlJTUgkJCQkJMHgwMTgxCisjZGVmaW5lCUFSRlIwCQkJCQkweDAxODQKKyNkZWZpbmUJQVJGUjEJCQkJCTB4MDE4OAorI2RlZmluZQlBUkZSMgkJCQkJMHgwMThDCisjZGVmaW5lCUFSRlIzCQkJCQkweDAxOTAKKyNkZWZpbmUJQVJGUjQJCQkJCTB4MDE5NAorI2RlZmluZQlBUkZSNQkJCQkJMHgwMTk4CisjZGVmaW5lCUFSRlI2CQkJCQkweDAxOUMKKyNkZWZpbmUJQVJGUjcJCQkJCTB4MDFBMAorI2RlZmluZQlBR0dMRU5fTE1UX0gJCQkJMHgwMUE3CisjZGVmaW5lCUFHR0xFTl9MTVRfTAkJCQkweDAxQTgKKyNkZWZpbmUJREFSRlJDCQkJCQkweDAxQjAKKyNkZWZpbmUJUkFSRlJDCQkJCQkweDAxQjgKKyNkZWZpbmUJTUNTX1RYQUdDCQkJCTB4MDFDMAorI2RlZmluZQlDQ0tfVFhBR0MJCQkJMHgwMUM4CisKKy8qIDcuIEVEQ0EgU2V0dGluZyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUJRURDQVBBUkFfVk8JCQkJMHgwMUQwCisjZGVmaW5lCUVEQ0FQQVJBX1ZJCQkJCTB4MDFENAorI2RlZmluZQlFRENBUEFSQV9CRQkJCQkweDAxRDgKKyNkZWZpbmUJRURDQVBBUkFfQksJCQkJMHgwMURDCisjZGVmaW5lCUJDTlRDRkcJCQkJCTB4MDFFMAorI2RlZmluZQlDV1JSCQkJCQkweDAxRTIKKyNkZWZpbmUJQUNNQVZHCQkJCQkweDAxRTQKKyNkZWZpbmUJQWNtSHdDdHJsCQkJCTB4MDFFNworI2RlZmluZQlWT19BRE1UTQkJCQkweDAxRTgKKyNkZWZpbmUJVklfQURNVE0JCQkJMHgwMUVDCisjZGVmaW5lCUJFX0FETVRNCQkJCTB4MDFGMAorI2RlZmluZQlSRVRSWV9MSU1JVAkJCQkweDAxRjQKKyNkZWZpbmUJU0dfUkFURQkJCQkJMHgwMUY2CisKKy8qIDguIFdNQUMsIEJBIGFuZCBDQ1ggcmVsYXRlZCBSZWdpc3Rlci4gKi8KKyNkZWZpbmUJTkFWX0NUUkwJCQkJMHgwMjAwCisjZGVmaW5lCUJXX09QTU9ERQkJCQkweDAyMDMKKyNkZWZpbmUJQkFDQU1DTUQJCQkJMHgwMjA0CisjZGVmaW5lCUJBQ0FNQ09OVEVOVAkJCQkweDAyMDgKKworLyogdGhlIDB4Mnh4IHJlZ2lzdGVyIFdNQUMgZGVmaW5pdGlvbiAqLworI2RlZmluZQlMQkRMWQkJCQkJMHgwMjEwCisjZGVmaW5lCUZXRExZCQkJCQkweDAyMTEKKyNkZWZpbmUJSFdQQ19SWF9DVFJMCQkJCTB4MDIxOAorI2RlZmluZQlNUUlSCQkJCQkweDAyMjAKKyNkZWZpbmUJTUFJUgkJCQkJMHgwMjIyCisjZGVmaW5lCU1TSVIJCQkJCTB4MDIyNAorI2RlZmluZQlDTE1fUkVTVUxUCQkJCTB4MDIyNworI2RlZmluZQlOSE1fUlBJX0NOVAkJCQkweDAyMjgKKyNkZWZpbmUJUlhFUlJfUlBUCQkJCTB4MDIzMAorI2RlZmluZQlOQVZfUFJPVF9MRU4JCQkJMHgwMjM0CisjZGVmaW5lCUNGRU5EX1RICQkJCTB4MDIzNgorI2RlZmluZQlBTVBEVV9NSU5fU1BBQ0UJCQkJMHgwMjM3CisjZGVmaW5lCVRYT1BfU1RBTExfQ1RSTAkJCQkweDAyMzgKKworLyogOS4gU2VjdXJpdHkgQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUJUkVHX1JXQ0FNCQkJCTB4MDI0MAorI2RlZmluZQlSRUdfV0NBTUkJCQkJMHgwMjQ0CisjZGVmaW5lCVJFR19SQ0FNTwkJCQkweDAyNDgKKyNkZWZpbmUJUkVHX0NBTURCRwkJCQkweDAyNEMKKyNkZWZpbmUJUkVHX1NFQ1IJCQkJMHgwMjUwCisKKy8qIDEwLiBQb3dlciBTYXZlIENvbnRyb2wgUmVnaXN0ZXJzICovCisjZGVmaW5lCVdPV19DVFJMCQkJCTB4MDI2MAorI2RlZmluZQlQU1NUQVRVUwkJCQkweDAyNjEKKyNkZWZpbmUJUFNTV0lUQ0gJCQkJMHgwMjYyCisjZGVmaW5lCU1JTU9QU19XQUlUX1BFUklPRAkJCTB4MDI2MworI2RlZmluZQlMUE5BVl9DVFJMCQkJCTB4MDI2NAorI2RlZmluZQlXRk0wCQkJCQkweDAyNzAKKyNkZWZpbmUJV0ZNMQkJCQkJMHgwMjgwCisjZGVmaW5lCVdGTTIJCQkJCTB4MDI5MAorI2RlZmluZQlXRk0zCQkJCQkweDAyQTAKKyNkZWZpbmUJV0ZNNAkJCQkJMHgwMkIwCisjZGVmaW5lCVdGTTUJCQkJCTB4MDJDMAorI2RlZmluZQlXRkNSQwkJCQkJMHgwMkQwCisjZGVmaW5lCUZXX1JQVF9SRUcJCQkJMHgwMmM0CisKKy8qIDExLiBHZW5lcmFsIFB1cnBvc2UgUmVnaXN0ZXJzICovCisjZGVmaW5lCVBTVElNRQkJCQkJMHgwMkUwCisjZGVmaW5lCVRJTUVSMAkJCQkJMHgwMkU0CisjZGVmaW5lCVRJTUVSMQkJCQkJMHgwMkU4CisjZGVmaW5lCUdQSU9fQ1RSTAkJCQkweDAyRUMKKyNkZWZpbmUJR1BJT19JTgkJCQkJMHgwMkVDCisjZGVmaW5lCUdQSU9fT1VUCQkJCTB4MDJFRAorI2RlZmluZQlHUElPX0lPX1NFTAkJCQkweDAyRUUKKyNkZWZpbmUJR1BJT19NT0QJCQkJMHgwMkVGCisjZGVmaW5lCUdQSU9fSU5UQ1RSTAkJCQkweDAyRjAKKyNkZWZpbmUJTUFDX1BJTk1VWF9DRkcJCQkJMHgwMkYxCisjZGVmaW5lCUxFRENGRwkJCQkJMHgwMkYyCisjZGVmaW5lCVBIWV9SRUcJCQkJCTB4MDJGMworI2RlZmluZQlQSFlfUkVHX0RBVEEJCQkJMHgwMkY0CisjZGVmaW5lCVJFR19FRlVTRV9DTEsJCQkJMHgwMkY4CisKKy8qIDEyLiBIb3N0IEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXJzICovCisjZGVmaW5lCUlOVEFfTUFTSwkJCQkweDAzMDAKKyNkZWZpbmUJSVNSCQkJCQkweDAzMDgKKworLyogMTMuIFRlc3QgTW9kZSBhbmQgRGVidWcgQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUJREJHX1BPUlRfU1dJVENICQkJCTB4MDAzQQorI2RlZmluZQlCSVNUCQkJCQkweDAzMTAKKyNkZWZpbmUJREJTCQkJCQkweDAzMTQKKyNkZWZpbmUJQ1BVSU5TVAkJCQkJMHgwMzE4CisjZGVmaW5lCUNQVUNBVVNFCQkJCTB4MDMxQworI2RlZmluZQlMQlVTX0VSUl9BRERSCQkJCTB4MDMyMAorI2RlZmluZQlMQlVTX0VSUl9DTUQJCQkJMHgwMzI0CisjZGVmaW5lCUxCVVNfRVJSX0RBVEFfTAkJCQkweDAzMjgKKyNkZWZpbmUJTEJVU19FUlJfREFUQV9ICQkJCTB4MDMyQworI2RlZmluZQlMWF9FWENFUFRJT05fQUREUgkJCTB4MDMzMAorI2RlZmluZQlXREdfQ1RSTAkJCQkweDAzMzQKKyNkZWZpbmUJSU5UTVRVCQkJCQkweDAzMzgKKyNkZWZpbmUJSU5UTQkJCQkJMHgwMzNBCisjZGVmaW5lCUZETE9DS1RVUk4wCQkJCTB4MDMzQworI2RlZmluZQlGRExPQ0tUVVJOMQkJCQkweDAzM0QKKyNkZWZpbmUJVFJYUEtUQlVGX0RCR19EQVRBCQkJMHgwMzQwCisjZGVmaW5lCVRSWFBLVEJVRl9EQkdfQ1RSTAkJCTB4MDM0OAorI2RlZmluZQlEUExMCQkJCQkweDAzNEEKKyNkZWZpbmUJQ0JVU19FUlJfQUREUgkJCQkweDAzNTAKKyNkZWZpbmUJQ0JVU19FUlJfQ01ECQkJCTB4MDM1NAorI2RlZmluZQlDQlVTX0VSUl9EQVRBX0wJCQkJMHgwMzU4CisjZGVmaW5lCUNCVVNfRVJSX0RBVEFfSAkJCQkweDAzNUMKKyNkZWZpbmUJVVNCX1NJRV9JTlRGX0FERFIJCQkweDAzNjAKKyNkZWZpbmUJVVNCX1NJRV9JTlRGX1dECQkJCTB4MDM2MQorI2RlZmluZQlVU0JfU0lFX0lOVEZfUkQJCQkJMHgwMzYyCisjZGVmaW5lCVVTQl9TSUVfSU5URl9DVFJMCQkJMHgwMzYzCisjZGVmaW5lIExCVVNfTU9OX0FERFIJCQkJMHgwMzY0CisjZGVmaW5lIExCVVNfQUREUl9NQVNLCQkJCTB4MDM2OAorCisvKiBCb3VuZGFyeSBpcyAweDM3RiAqLworCisvKiAxNC4gUENJRSBjb25maWcgcmVnaXN0ZXIgKi8KKyNkZWZpbmUJVFBfUE9MTAkJCQkJMHgwNTAwCisjZGVmaW5lCVBNX0NUUkwJCQkJCTB4MDUwMgorI2RlZmluZQlQQ0lGCQkJCQkweDA1MDMKKworI2RlZmluZQlUSFBEQQkJCQkJMHgwNTE0CisjZGVmaW5lCVRNREEJCQkJCTB4MDUxOAorI2RlZmluZQlUQ0RBCQkJCQkweDA1MUMKKyNkZWZpbmUJSERBCQkJCQkweDA1MjAKKyNkZWZpbmUJVFZPREEJCQkJCTB4MDUyNAorI2RlZmluZQlUVklEQQkJCQkJMHgwNTI4CisjZGVmaW5lCVRCRURBCQkJCQkweDA1MkMKKyNkZWZpbmUJVEJLREEJCQkJCTB4MDUzMAorI2RlZmluZQlUQkRBCQkJCQkweDA1MzQKKyNkZWZpbmUJUkNEQQkJCQkJMHgwNTM4CisjZGVmaW5lCVJEUURBCQkJCQkweDA1M0MKKyNkZWZpbmUJREJJX1dEQVRBCQkJCTB4MDU0MAorI2RlZmluZQlEQklfUkRBVEEJCQkJMHgwNTQ0CisjZGVmaW5lCURCSV9DVFJMCQkJCTB4MDU0OAorI2RlZmluZQlNRElPX0RBVEEJCQkJMHgwNTUwCisjZGVmaW5lCU1ESU9fQ1RSTAkJCQkweDA1NTQKKyNkZWZpbmUJUENJX1JQV00JCQkJMHgwNTYxCisjZGVmaW5lCVBDSV9DUFdNCQkJCTB4MDU2MworCisvKiBDb25maWcgcmVnaXN0ZXIJKE9mZnNldCAweDgwMC0pICovCisjZGVmaW5lCVBIWV9DQ0EJCQkJCTB4ODAzCisKKy8qIE1pbiBTcGFjaW5nIHJlbGF0ZWQgc2V0dGluZ3MuICovCisjZGVmaW5lCU1BWF9NU1NfREVOU0lUWV8yVAkJCTB4MTMKKyNkZWZpbmUJTUFYX01TU19ERU5TSVRZXzFUCQkJMHgwQQorCisvKiBSeCBETUEgQ29udHJvbCByZWxhdGVkIHNldHRpbmdzICovCisjZGVmaW5lCVJYRE1BX0FHR19FTgkJCQlCSVQoNykKKworI2RlZmluZQlSUFdNCQkJCQlQQ0lfUlBXTQorCisvKiBSZWdzaXRlciBCaXQgYW5kIENvbnRlbnQgZGVmaW5pdGlvbiAgKi8KKworI2RlZmluZQlJU09fTUQyUFAJCQkJQklUKDApCisjZGVmaW5lCUlTT19QQTJQQ0lFCQkJCUJJVCgzKQorI2RlZmluZQlJU09fUExMMk1ECQkJCUJJVCg0KQorI2RlZmluZQlJU09fUFdDX0RWMlJQCQkJCUJJVCgxMSkKKyNkZWZpbmUJSVNPX1BXQ19SVjJSUAkJCQlCSVQoMTIpCisKKworI2RlZmluZQlGRU5fTVJFR0VOCQkJCUJJVCgxNSkKKyNkZWZpbmUJRkVOX0RDT1JFCQkJCUJJVCgxMSkKKyNkZWZpbmUJRkVOX0NQVUVOCQkJCUJJVCgxMCkKKworI2RlZmluZQlQQURfSFdQRF9JRE4JCQkJQklUKDIyKQorCisjZGVmaW5lCVNZU19DTEtTRUxfODBNCQkJCUJJVCgwKQorI2RlZmluZQlTWVNfUFNfQ0xLU0VMCQkJCUJJVCgxKQorI2RlZmluZQlTWVNfQ1BVX0NMS1NFTAkJCQlCSVQoMikKKyNkZWZpbmUJU1lTX01BQ19DTEtfRU4JCQkJQklUKDExKQorI2RlZmluZQlTWVNfU1dIV19TRUwJCQkJQklUKDE0KQorI2RlZmluZQlTWVNfRldIV19TRUwJCQkJQklUKDE1KQorCisjZGVmaW5lCUNtZEVFUFJPTV9FbgkJCQlCSVQoNSkKKyNkZWZpbmUJQ21kRUVSUE9NU0VMCQkJCUJJVCg0KQorI2RlZmluZQlDbWQ5MzQ2Q1JfOTM1NlNFTAkJCUJJVCg0KQorCisjZGVmaW5lCUFGRV9NQkVOCQkJCUJJVCgxKQorI2RlZmluZQlBRkVfQkdFTgkJCQlCSVQoMCkKKworI2RlZmluZQlTUFMxX1NXRU4JCQkJQklUKDEpCisjZGVmaW5lCVNQUzFfTERFTgkJCQlCSVQoMCkKKworI2RlZmluZQlSRl9FTgkJCQkJQklUKDApCisjZGVmaW5lCVJGX1JTVEIJCQkJCUJJVCgxKQorI2RlZmluZQlSRl9TRE1SU1RCCQkJCUJJVCgyKQorCisjZGVmaW5lCUxEQTE1X0VOCQkJCUJJVCgwKQorCisjZGVmaW5lCUxEVjEyX0VOCQkJCUJJVCgwKQorI2RlZmluZQlMRFYxMl9TREJZCQkJCUJJVCgxKQorCisjZGVmaW5lCVhUQUxfR0FURV9BRkUJCQkJQklUKDEwKQorCisjZGVmaW5lCUFQTExfRU4JCQkJCUJJVCgwKQorCisjZGVmaW5lCUFGUl9DYXJkQkVuCQkJCUJJVCgwKQorI2RlZmluZQlBRlJfQ0xLUlVOX1NFTAkJCQlCSVQoMSkKKyNkZWZpbmUJQUZSX0Z1bmNSZWdFbgkJCQlCSVQoMikKKworI2RlZmluZQlBUFNET0ZGX1NUQVRVUwkJCQlCSVQoMTUpCisjZGVmaW5lCUFQU0RPRkYJCQkJCUJJVCgxNCkKKyNkZWZpbmUJQkJSU1ROCQkJCQlCSVQoMTMpCisjZGVmaW5lCUJCX0dMQl9SU1ROCQkJCUJJVCgxMikKKyNkZWZpbmUJU0NIRURVTEVfRU4JCQkJQklUKDEwKQorI2RlZmluZQlNQUNSWEVOCQkJCQlCSVQoOSkKKyNkZWZpbmUJTUFDVFhFTgkJCQkJQklUKDgpCisjZGVmaW5lCURETUFfRU4JCQkJCUJJVCg3KQorI2RlZmluZQlGVzJIV19FTgkJCQlCSVQoNikKKyNkZWZpbmUJUlhETUFfRU4JCQkJQklUKDUpCisjZGVmaW5lCVRYRE1BX0VOCQkJCUJJVCg0KQorI2RlZmluZQlIQ0lfUlhETUFfRU4JCQkJQklUKDMpCisjZGVmaW5lCUhDSV9UWERNQV9FTgkJCQlCSVQoMikKKworI2RlZmluZQlTdG9wSENDQQkJCQlCSVQoNikKKyNkZWZpbmUJU3RvcEhpZ2gJCQkJQklUKDUpCisjZGVmaW5lCVN0b3BNZ3QJCQkJCUJJVCg0KQorI2RlZmluZQlTdG9wVk8JCQkJCUJJVCgzKQorI2RlZmluZQlTdG9wVkkJCQkJCUJJVCgyKQorI2RlZmluZQlTdG9wQkUJCQkJCUJJVCgxKQorI2RlZmluZQlTdG9wQksJCQkJCUJJVCgwKQorCisjZGVmaW5lCUxCS19OT1JNQUwJCQkJMHgwMAorI2RlZmluZQlMQktfTUFDX0xCCQkJCShCSVQoMCkgfCBCSVQoMSkgfCBCSVQoMykpCisjZGVmaW5lCUxCS19NQUNfRExCCQkJCShCSVQoMCkgfCBCSVQoMSkpCisjZGVmaW5lCUxCS19ETUFfTEIJCQkJKEJJVCgwKSB8IEJJVCgxKSB8IEJJVCgyKSkKKworI2RlZmluZQlUQ1BfT0ZETF9FTgkJCQlCSVQoMjUpCisjZGVmaW5lCUhXUENfVFhfRU4JCQkJQklUKDI0KQorI2RlZmluZQlUWERNQVBSRTJGVUxMCQkJCUJJVCgyMykKKyNkZWZpbmUJRElTQ1cJCQkJCUJJVCgyMCkKKyNkZWZpbmUJVENSSUNWCQkJCQlCSVQoMTkpCisjZGVmaW5lCUNmZW5kRm9ybQkJCQlCSVQoMTcpCisjZGVmaW5lCVRDUkNSQwkJCQkJQklUKDE2KQorI2RlZmluZQlGQUtFX0lNRU1fRU4JCQkJQklUKDE1KQorI2RlZmluZQlUU0ZSU1QJCQkJCUJJVCg5KQorI2RlZmluZQlUU0ZFTgkJCQkJQklUKDgpCisjZGVmaW5lCUZXQUxMUkRZCQkJCShCSVQoMCkgfCBCSVQoMSkgfCBCSVQoMikgfCBcCisJCQkJCQlCSVQoMykgfCBCSVQoNCkgfCBCSVQoNSkgfCBcCisJCQkJCQlCSVQoNikgfCBCSVQoNykpCisjZGVmaW5lCUZXUkRZCQkJCQlCSVQoNykKKyNkZWZpbmUJQkFTRUNIRwkJCQkJQklUKDYpCisjZGVmaW5lCUlNRU0JCQkJCUJJVCg1KQorI2RlZmluZQlETUVNX0NPREVfRE9ORQkJCQlCSVQoNCkKKyNkZWZpbmUJRVhUX0lNRU1fQ0hLX1JQVAkJCUJJVCgzKQorI2RlZmluZQlFWFRfSU1FTV9DT0RFX0RPTkUJCQlCSVQoMikKKyNkZWZpbmUJSU1FTV9DSEtfUlBUCQkJCUJJVCgxKQorI2RlZmluZQlJTUVNX0NPREVfRE9ORQkJCQlCSVQoMCkKKyNkZWZpbmUJSU1FTV9DT0RFX0RPTkUJCQkJQklUKDApCisjZGVmaW5lCUlNRU1fQ0hLX1JQVAkJCQlCSVQoMSkKKyNkZWZpbmUJRU1FTV9DT0RFX0RPTkUJCQkJQklUKDIpCisjZGVmaW5lCUVNRU1fQ0hLX1JQVAkJCQlCSVQoMykKKyNkZWZpbmUJRE1FTV9DT0RFX0RPTkUJCQkJQklUKDQpCisjZGVmaW5lCUlNRU1fUkRZCQkJCUJJVCg1KQorI2RlZmluZQlCQVNFQ0hHCQkJCQlCSVQoNikKKyNkZWZpbmUJRldSRFkJCQkJCUJJVCg3KQorI2RlZmluZQlMT0FEX0ZXX1JFQURZCQkJCShJTUVNX0NPREVfRE9ORSB8IFwKKwkJCQkJCUlNRU1fQ0hLX1JQVCB8IFwKKwkJCQkJCUVNRU1fQ09ERV9ET05FIHwgXAorCQkJCQkJRU1FTV9DSEtfUlBUIHwgXAorCQkJCQkJRE1FTV9DT0RFX0RPTkUgfCBcCisJCQkJCQlJTUVNX1JEWSB8IFwKKwkJCQkJCUJBU0VDSEcgfCBcCisJCQkJCQlGV1JEWSkKKyNkZWZpbmUJVENSX1RTRkVOCQkJCUJJVCg4KQorI2RlZmluZQlUQ1JfVFNGUlNUCQkJCUJJVCg5KQorI2RlZmluZQlUQ1JfRkFLRV9JTUVNX0VOCQkJQklUKDE1KQorI2RlZmluZQlUQ1JfQ1JDCQkJCQlCSVQoMTYpCisjZGVmaW5lCVRDUl9JQ1YJCQkJCUJJVCgxOSkKKyNkZWZpbmUJVENSX0RJU0NXCQkJCUJJVCgyMCkKKyNkZWZpbmUJVENSX0hXUENfVFhfRU4JCQkJQklUKDI0KQorI2RlZmluZQlUQ1JfVENQX09GRExfRU4JCQkJQklUKDI1KQorI2RlZmluZQlUWERNQV9JTklUX1ZBTFVFCQkJKElNRU1fQ0hLX1JQVCB8IFwKKwkJCQkJCUVYVF9JTUVNX0NIS19SUFQpCisKKyNkZWZpbmUJUkNSX0FQUEZDUwkJCQlCSVQoMzEpCisjZGVmaW5lCVJDUl9ESVNfRU5DXzJCWVRFCQkJQklUKDMwKQorI2RlZmluZQlSQ1JfRElTX0FFU18yQllURQkJCUJJVCgyOSkKKyNkZWZpbmUJUkNSX0hUQ19MT0NfQ1RSTAkJCUJJVCgyOCkKKyNkZWZpbmUJUkNSX0VOTUJJRAkJCQlCSVQoMjcpCisjZGVmaW5lCVJDUl9SWF9UQ1BPRkRMX0VOCQkJQklUKDI2KQorI2RlZmluZQlSQ1JfQVBQX1BIWVNUX1JYRkYJCQlCSVQoMjUpCisjZGVmaW5lCVJDUl9BUFBfUEhZU1RfU1RBRkYJCQlCSVQoMjQpCisjZGVmaW5lCVJDUl9DQlNTSUQJCQkJQklUKDIzKQorI2RlZmluZQlSQ1JfQVBXUk1HVAkJCQlCSVQoMjIpCisjZGVmaW5lCVJDUl9BREQzCQkJCUJJVCgyMSkKKyNkZWZpbmUJUkNSX0FNRgkJCQkJQklUKDIwKQorI2RlZmluZQlSQ1JfQUNGCQkJCQlCSVQoMTkpCisjZGVmaW5lCVJDUl9BREYJCQkJCUJJVCgxOCkKKyNkZWZpbmUJUkNSX0FQUF9NSUMJCQkJQklUKDE3KQorI2RlZmluZQlSQ1JfQVBQX0lDVgkJCQlCSVQoMTYpCisjZGVmaW5lCVJDUl9SWEZUSAkJCQlCSVQoMTMpCisjZGVmaW5lCVJDUl9BSUNWCQkJCUJJVCgxMikKKyNkZWZpbmUJUkNSX1JYREVTQ19MS19FTgkJCUJJVCgxMSkKKyNkZWZpbmUJUkNSX0FQUF9CQV9TU04JCQkJQklUKDYpCisjZGVmaW5lCVJDUl9BQ1JDMzIJCQkJQklUKDUpCisjZGVmaW5lCVJDUl9SWFNIRlRfRU4JCQkJQklUKDQpCisjZGVmaW5lCVJDUl9BQgkJCQkJQklUKDMpCisjZGVmaW5lCVJDUl9BTQkJCQkJQklUKDIpCisjZGVmaW5lCVJDUl9BUE0JCQkJCUJJVCgxKQorI2RlZmluZQlSQ1JfQUFQCQkJCQlCSVQoMCkKKyNkZWZpbmUJUkNSX01YRE1BX09GRlNFVAkJCTgKKyNkZWZpbmUJUkNSX0ZJRk9fT0ZGU0VUCQkJCTEzCisKKworI2RlZmluZSBNU1JfTElOS19NQVNLCQkJCSgoMSA8PCAwKSB8ICgxIDw8IDEpKQorI2RlZmluZSBNU1JfTElOS19NQU5BR0VECQkJMgorI2RlZmluZSBNU1JfTElOS19OT05FCQkJCTAKKyNkZWZpbmUgTVNSX0xJTktfU0hJRlQJCQkJMAorI2RlZmluZSBNU1JfTElOS19BREhPQwkJCQkxCisjZGVmaW5lIE1TUl9MSU5LX01BU1RFUgkJCQkzCisjZGVmaW5lCU1TUl9OT0xJTksJCQkJMHgwMAorI2RlZmluZQlNU1JfQURIT0MJCQkJMHgwMQorI2RlZmluZQlNU1JfSU5GUkEJCQkJMHgwMgorI2RlZmluZQlNU1JfQVAJCQkJCTB4MDMKKworI2RlZmluZQlFTlVBUlQJCQkJCUJJVCg3KQorI2RlZmluZQlFTkpUQUcJCQkJCUJJVCgzKQorI2RlZmluZQlCVE1PREUJCQkJCShCSVQoMikgfCBCSVQoMSkpCisjZGVmaW5lCUVOQlQJCQkJCUJJVCgwKQorCisjZGVmaW5lCUVOTUJJRAkJCQkJQklUKDcpCisjZGVmaW5lCUJDTlVNCQkJCQkoQklUKDYpIHwgQklUKDUpIHwgQklUKDQpKQorCisjZGVmaW5lCVVTVElNRV9FRENBCQkJCTB4RkYwMAorI2RlZmluZQlVU1RJTUVfVFNGCQkJCTB4MDBGRgorCisjZGVmaW5lCVNJRlNfVFJYCQkJCTB4RkYwMAorI2RlZmluZQlTSUZTX0NUWAkJCQkweDAwRkYKKworI2RlZmluZQlFTlNXQkNOCQkJCQlCSVQoMTUpCisjZGVmaW5lCURSVkVSTFlfVFUJCQkJMHgwRkYwCisjZGVmaW5lCURSVkVSTFlfVVMJCQkJMHgwMDBGCisjZGVmaW5lCUJDTl9UQ0ZHX0NXX1NISUZUCQkJOAorI2RlZmluZQlCQ05fVENGR19JRlMJCQkJMAorCisjZGVmaW5lCVJSU1JfUlNDX09GRlNFVAkJCQkyMQorI2RlZmluZQlSUlNSX1NIT1JUX09GRlNFVAkJCTIzCisjZGVmaW5lCVJSU1JfUlNDX0JXXzQwTQkJCQkweDYwMDAwMAorI2RlZmluZQlSUlNSX1JTQ19VUFNVQkNITkwJCQkweDQwMDAwMAorI2RlZmluZQlSUlNSX1JTQ19MT1dTVUJDSE5MCQkJMHgyMDAwMDAKKyNkZWZpbmUJUlJTUl9TSE9SVAkJCQkweDgwMDAwMAorI2RlZmluZQlSUlNSXzFNCQkJCQlCSVQoMCkKKyNkZWZpbmUJUlJTUl8yTQkJCQkJQklUKDEpCisjZGVmaW5lCVJSU1JfNV81TQkJCQlCSVQoMikKKyNkZWZpbmUJUlJTUl8xMU0JCQkJQklUKDMpCisjZGVmaW5lCVJSU1JfNk0JCQkJCUJJVCg0KQorI2RlZmluZQlSUlNSXzlNCQkJCQlCSVQoNSkKKyNkZWZpbmUJUlJTUl8xMk0JCQkJQklUKDYpCisjZGVmaW5lCVJSU1JfMThNCQkJCUJJVCg3KQorI2RlZmluZQlSUlNSXzI0TQkJCQlCSVQoOCkKKyNkZWZpbmUJUlJTUl8zNk0JCQkJQklUKDkpCisjZGVmaW5lCVJSU1JfNDhNCQkJCUJJVCgxMCkKKyNkZWZpbmUJUlJTUl81NE0JCQkJQklUKDExKQorI2RlZmluZQlSUlNSX01DUzAJCQkJQklUKDEyKQorI2RlZmluZQlSUlNSX01DUzEJCQkJQklUKDEzKQorI2RlZmluZQlSUlNSX01DUzIJCQkJQklUKDE0KQorI2RlZmluZQlSUlNSX01DUzMJCQkJQklUKDE1KQorI2RlZmluZQlSUlNSX01DUzQJCQkJQklUKDE2KQorI2RlZmluZQlSUlNSX01DUzUJCQkJQklUKDE3KQorI2RlZmluZQlSUlNSX01DUzYJCQkJQklUKDE4KQorI2RlZmluZQlSUlNSX01DUzcJCQkJQklUKDE5KQorI2RlZmluZQlCUlNSX0Fja1Nob3J0UG1iCQkJQklUKDIzKQorCisjZGVmaW5lCVJBVFJfMU0JCQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUJUkFUUl8yTQkJCQkJMHgwMDAwMDAwMgorI2RlZmluZQlSQVRSXzU1TQkJCQkweDAwMDAwMDA0CisjZGVmaW5lCVJBVFJfMTFNCQkJCTB4MDAwMDAwMDgKKyNkZWZpbmUJUkFUUl82TQkJCQkJMHgwMDAwMDAxMAorI2RlZmluZQlSQVRSXzlNCQkJCQkweDAwMDAwMDIwCisjZGVmaW5lCVJBVFJfMTJNCQkJCTB4MDAwMDAwNDAKKyNkZWZpbmUJUkFUUl8xOE0JCQkJMHgwMDAwMDA4MAorI2RlZmluZQlSQVRSXzI0TQkJCQkweDAwMDAwMTAwCisjZGVmaW5lCVJBVFJfMzZNCQkJCTB4MDAwMDAyMDAKKyNkZWZpbmUJUkFUUl80OE0JCQkJMHgwMDAwMDQwMAorI2RlZmluZQlSQVRSXzU0TQkJCQkweDAwMDAwODAwCisjZGVmaW5lCVJBVFJfTUNTMAkJCQkweDAwMDAxMDAwCisjZGVmaW5lCVJBVFJfTUNTMQkJCQkweDAwMDAyMDAwCisjZGVmaW5lCVJBVFJfTUNTMgkJCQkweDAwMDA0MDAwCisjZGVmaW5lCVJBVFJfTUNTMwkJCQkweDAwMDA4MDAwCisjZGVmaW5lCVJBVFJfTUNTNAkJCQkweDAwMDEwMDAwCisjZGVmaW5lCVJBVFJfTUNTNQkJCQkweDAwMDIwMDAwCisjZGVmaW5lCVJBVFJfTUNTNgkJCQkweDAwMDQwMDAwCisjZGVmaW5lCVJBVFJfTUNTNwkJCQkweDAwMDgwMDAwCisjZGVmaW5lCVJBVFJfTUNTOAkJCQkweDAwMTAwMDAwCisjZGVmaW5lCVJBVFJfTUNTOQkJCQkweDAwMjAwMDAwCisjZGVmaW5lCVJBVFJfTUNTMTAJCQkJMHgwMDQwMDAwMAorI2RlZmluZQlSQVRSX01DUzExCQkJCTB4MDA4MDAwMDAKKyNkZWZpbmUJUkFUUl9NQ1MxMgkJCQkweDAxMDAwMDAwCisjZGVmaW5lCVJBVFJfTUNTMTMJCQkJMHgwMjAwMDAwMAorI2RlZmluZQlSQVRSX01DUzE0CQkJCTB4MDQwMDAwMDAKKyNkZWZpbmUJUkFUUl9NQ1MxNQkJCQkweDA4MDAwMDAwCisKKyNkZWZpbmUJUkFURV9BTExfQ0NLCQkJCShSQVRSXzFNIHwgUkFUUl8yTSB8IFwKKwkJCQkJCVJBVFJfNTVNIHwgUkFUUl8xMU0pCisjZGVmaW5lCVJBVEVfQUxMX09GRE1fQUcJCQkoUkFUUl82TSB8IFJBVFJfOU0gfCBcCisJCQkJCQlSQVRSXzEyTSB8IFJBVFJfMThNIHwgXAorCQkJCQkJUkFUUl8yNE0gfCBSQVRSXzM2TSB8IFwKKwkJCQkJCVJBVFJfNDhNIHwgUkFUUl81NE0pCisjZGVmaW5lCVJBVEVfQUxMX09GRE1fMVNTCQkJKFJBVFJfTUNTMCB8IFJBVFJfTUNTMSB8IFwKKwkJCQkJCVJBVFJfTUNTMiB8IFJBVFJfTUNTMyB8IFwKKwkJCQkJCVJBVFJfTUNTNCB8IFJBVFJfTUNTNSB8IFwKKwkJCQkJCVJBVFJfTUNTNiB8IFJBVFJfTUNTNykKKyNkZWZpbmUJUkFURV9BTExfT0ZETV8yU1MJCQkoUkFUUl9NQ1M4IHwgUkFUUl9NQ1M5IHwgXAorCQkJCQkJUkFUUl9NQ1MxMCB8IFJBVFJfTUNTMTEgfCBcCisJCQkJCQlSQVRSX01DUzEyIHwgUkFUUl9NQ1MxMyB8IFwKKwkJCQkJCVJBVFJfTUNTMTQgfCBSQVRSX01DUzE1KQorCisjZGVmaW5lCUFDX1BBUkFNX1RYT1BfTElNSVRfT0ZGU0VUCQkxNgorI2RlZmluZQlBQ19QQVJBTV9FQ1dfTUFYX09GRlNFVAkJCTEyCisjZGVmaW5lCUFDX1BBUkFNX0VDV19NSU5fT0ZGU0VUCQkJOAorI2RlZmluZQlBQ19QQVJBTV9BSUZTX09GRlNFVAkJCTAKKworI2RlZmluZQlBY21Id19Id0VuCQkJCUJJVCgwKQorI2RlZmluZQlBY21Id19CZXFFbgkJCQlCSVQoMSkKKyNkZWZpbmUJQWNtSHdfVmlxRW4JCQkJQklUKDIpCisjZGVmaW5lCUFjbUh3X1ZvcUVuCQkJCUJJVCgzKQorI2RlZmluZQlBY21Id19CZXFTdGF0dXMJCQkJQklUKDQpCisjZGVmaW5lCUFjbUh3X1ZpcVN0YXR1cwkJCQlCSVQoNSkKKyNkZWZpbmUJQWNtSHdfVm9xU3RhdHVzCQkJCUJJVCg2KQorCisjZGVmaW5lCVJFVFJZX0xJTUlUX1NIT1JUX1NISUZUCQkJOAorI2RlZmluZQlSRVRSWV9MSU1JVF9MT05HX1NISUZUCQkJMAorCisjZGVmaW5lCU5BVl9VUFBFUl9FTgkJCQlCSVQoMTYpCisjZGVmaW5lCU5BVl9VUFBFUgkJCQkweEZGMDAKKyNkZWZpbmUJTkFWX1JUU1JTVAkJCQkweEZGCisKKyNkZWZpbmUJQldfT1BNT0RFXzIwTUhaCQkJCUJJVCgyKQorI2RlZmluZQlCV19PUE1PREVfNUcJCQkJQklUKDEpCisjZGVmaW5lCUJXX09QTU9ERV8xMUoJCQkJQklUKDApCisKKyNkZWZpbmUJUlhFUlJfUlBUX1JTVAkJCQlCSVQoMjcpCisjZGVmaW5lCVJYRVJSX09GRE1fUFBEVQkJCQkwCisjZGVmaW5lCVJYRVJSX09GRE1fRkFMU0VfQUxBUk0JCQkxCisjZGVmaW5lCVJYRVJSX09GRE1fTVBEVV9PSwkJCTIKKyNkZWZpbmUJUlhFUlJfT0ZETV9NUERVX0ZBSUwJCQkzCisjZGVmaW5lCVJYRVJSX0NDS19QUERVCQkJCTQKKyNkZWZpbmUJUlhFUlJfQ0NLX0ZBTFNFX0FMQVJNCQkJNQorI2RlZmluZQlSWEVSUl9DQ0tfTVBEVV9PSwkJCTYKKyNkZWZpbmUJUlhFUlJfQ0NLX01QRFVfRkFJTAkJCTcKKyNkZWZpbmUJUlhFUlJfSFRfUFBEVQkJCQk4CisjZGVmaW5lCVJYRVJSX0hUX0ZBTFNFX0FMQVJNCQkJOQorI2RlZmluZQlSWEVSUl9IVF9NUERVX1RPVEFMCQkJMTAKKyNkZWZpbmUJUlhFUlJfSFRfTVBEVV9PSwkJCTExCisjZGVmaW5lCVJYRVJSX0hUX01QRFVfRkFJTAkJCTEyCisjZGVmaW5lCVJYRVJSX1JYX0ZVTExfRFJPUAkJCTE1CisKKyNkZWZpbmUJU0NSX1RYVVNFREsJCQkJQklUKDApCisjZGVmaW5lCVNDUl9SWFVTRURLCQkJCUJJVCgxKQorI2RlZmluZQlTQ1JfVFhFTkNFTkFCTEUJCQkJQklUKDIpCisjZGVmaW5lCVNDUl9SWEVOQ0VOQUJMRQkJCQlCSVQoMykKKyNkZWZpbmUJU0NSX1NLQllBMgkJCQlCSVQoNCkKKyNkZWZpbmUJU0NSX05PU0tNQwkJCQlCSVQoNSkKKworI2RlZmluZQlDQU1fVkFMSUQJCQkJQklUKDE1KQorI2RlZmluZQlDQU1fTk9UVkFMSUQJCQkJMHgwMDAwCisjZGVmaW5lCUNBTV9VU0VESwkJCQlCSVQoNSkKKworI2RlZmluZQlDQU1fTk9ORQkJCQkweDAKKyNkZWZpbmUJQ0FNX1dFUDQwCQkJCTB4MDEKKyNkZWZpbmUJQ0FNX1RLSVAJCQkJMHgwMgorI2RlZmluZQlDQU1fQUVTCQkJCQkweDA0CisjZGVmaW5lCUNBTV9XRVAxMDQJCQkJMHgwNQorCisjZGVmaW5lCVRPVEFMX0NBTV9FTlRSWQkJCQkzMgorI2RlZmluZQlIQUxGX0NBTV9FTlRSWQkJCQkxNgorCisjZGVmaW5lCUNBTV9XUklURQkJCQlCSVQoMTYpCisjZGVmaW5lCUNBTV9SRUFECQkJCTB4MDAwMDAwMDAKKyNkZWZpbmUJQ0FNX1BPTExJTklHCQkJCUJJVCgzMSkKKworI2RlZmluZQlXT1dfUE1FTgkJCQlCSVQoMCkKKyNkZWZpbmUJV09XX1dPTUVOCQkJCUJJVCgxKQorI2RlZmluZQlXT1dfTUFHSUMJCQkJQklUKDIpCisjZGVmaW5lCVdPV19VV0YJCQkJCUJJVCgzKQorCisjZGVmaW5lCUdQSU9NVVhfRU4JCQkJQklUKDMpCisjZGVmaW5lCUdQSU9TRUxfR1BJTwkJCQkwCisjZGVmaW5lCUdQSU9TRUxfUEhZREJHCQkJCTEKKyNkZWZpbmUJR1BJT1NFTF9CVAkJCQkyCisjZGVmaW5lCUdQSU9TRUxfV0xBTkRCRwkJCQkzCisjZGVmaW5lCUdQSU9TRUxfR1BJT19NQVNLCQkJKH4oQklUKDApfEJJVCgxKSkpCisKKyNkZWZpbmUJSFNUX1JEQlVTWQkJCQlCSVQoMCkKKyNkZWZpbmUJQ1BVX1dUQlVTWQkJCQlCSVQoMSkKKworI2RlZmluZQlJTVI4MTkwX0RJU0FCTEVECQkJMHgwCisjZGVmaW5lCUlNUl9DUFVFUlIJCQkJQklUKDUpCisjZGVmaW5lCUlNUl9BVElNRU5ECQkJCUJJVCg0KQorI2RlZmluZQlJTVJfVEJET0sJCQkJQklUKDMpCisjZGVmaW5lCUlNUl9UQkRFUgkJCQlCSVQoMikKKyNkZWZpbmUJSU1SX0JDTkRNQUlOVDgJCQkJQklUKDEpCisjZGVmaW5lCUlNUl9CQ05ETUFJTlQ3CQkJCUJJVCgwKQorI2RlZmluZQlJTVJfQkNORE1BSU5UNgkJCQlCSVQoMzEpCisjZGVmaW5lCUlNUl9CQ05ETUFJTlQ1CQkJCUJJVCgzMCkKKyNkZWZpbmUJSU1SX0JDTkRNQUlOVDQJCQkJQklUKDI5KQorI2RlZmluZQlJTVJfQkNORE1BSU5UMwkJCQlCSVQoMjgpCisjZGVmaW5lCUlNUl9CQ05ETUFJTlQyCQkJCUJJVCgyNykKKyNkZWZpbmUJSU1SX0JDTkRNQUlOVDEJCQkJQklUKDI2KQorI2RlZmluZQlJTVJfQkNORE9LOAkJCQlCSVQoMjUpCisjZGVmaW5lCUlNUl9CQ05ET0s3CQkJCUJJVCgyNCkKKyNkZWZpbmUJSU1SX0JDTkRPSzYJCQkJQklUKDIzKQorI2RlZmluZQlJTVJfQkNORE9LNQkJCQlCSVQoMjIpCisjZGVmaW5lCUlNUl9CQ05ET0s0CQkJCUJJVCgyMSkKKyNkZWZpbmUJSU1SX0JDTkRPSzMJCQkJQklUKDIwKQorI2RlZmluZQlJTVJfQkNORE9LMgkJCQlCSVQoMTkpCisjZGVmaW5lCUlNUl9CQ05ET0sxCQkJCUJJVCgxOCkKKyNkZWZpbmUJSU1SX1RJTUVPVVQyCQkJCUJJVCgxNykKKyNkZWZpbmUJSU1SX1RJTUVPVVQxCQkJCUJJVCgxNikKKyNkZWZpbmUJSU1SX1RYRk9WVwkJCQlCSVQoMTUpCisjZGVmaW5lCUlNUl9QU1RJTUVPVVQJCQkJQklUKDE0KQorI2RlZmluZQlJTVJfQkNOSU5UCQkJCUJJVCgxMykKKyNkZWZpbmUJSU1SX1JYRk9WVwkJCQlCSVQoMTIpCisjZGVmaW5lCUlNUl9SRFUJCQkJCUJJVCgxMSkKKyNkZWZpbmUJSU1SX1JYQ01ET0sJCQkJQklUKDEwKQorI2RlZmluZQlJTVJfQkRPSwkJCQlCSVQoOSkKKyNkZWZpbmUJSU1SX0hJR0hET0sJCQkJQklUKDgpCisjZGVmaW5lCUlNUl9DT01ET0sJCQkJQklUKDcpCisjZGVmaW5lCUlNUl9NR05URE9LCQkJCUJJVCg2KQorI2RlZmluZQlJTVJfSENDQURPSwkJCQlCSVQoNSkKKyNkZWZpbmUJSU1SX0JLRE9LCQkJCUJJVCg0KQorI2RlZmluZQlJTVJfQkVET0sJCQkJQklUKDMpCisjZGVmaW5lCUlNUl9WSURPSwkJCQlCSVQoMikKKyNkZWZpbmUJSU1SX1ZPRE9LCQkJCUJJVCgxKQorI2RlZmluZQlJTVJfUk9LCQkJCQlCSVQoMCkKKworI2RlZmluZQlUUFBPTExfQktRCQkJCUJJVCgwKQorI2RlZmluZQlUUFBPTExfQkVRCQkJCUJJVCgxKQorI2RlZmluZQlUUFBPTExfVklRCQkJCUJJVCgyKQorI2RlZmluZQlUUFBPTExfVk9RCQkJCUJJVCgzKQorI2RlZmluZQlUUFBPTExfQlEJCQkJQklUKDQpCisjZGVmaW5lCVRQUE9MTF9DUQkJCQlCSVQoNSkKKyNkZWZpbmUJVFBQT0xMX01RCQkJCUJJVCg2KQorI2RlZmluZQlUUFBPTExfSFEJCQkJQklUKDcpCisjZGVmaW5lCVRQUE9MTF9IQ0NBUQkJCQlCSVQoOCkKKyNkZWZpbmUJVFBQT0xMX1NUT1BCSwkJCQlCSVQoOSkKKyNkZWZpbmUJVFBQT0xMX1NUT1BCRQkJCQlCSVQoMTApCisjZGVmaW5lCVRQUE9MTF9TVE9QVkkJCQkJQklUKDExKQorI2RlZmluZQlUUFBPTExfU1RPUFZPCQkJCUJJVCgxMikKKyNkZWZpbmUJVFBQT0xMX1NUT1BNR1QJCQkJQklUKDEzKQorI2RlZmluZQlUUFBPTExfU1RPUEhJR0gJCQkJQklUKDE0KQorI2RlZmluZQlUUFBPTExfU1RPUEhDQ0EJCQkJQklUKDE1KQorI2RlZmluZQlUUFBPTExfU0hJRlQJCQkJOAorCisjZGVmaW5lCUNDWF9DTURfQ0xNX0VOQUJMRQkJCUJJVCgwKQorI2RlZmluZQlDQ1hfQ01EX05ITV9FTkFCTEUJCQlCSVQoMSkKKyNkZWZpbmUJQ0NYX0NNRF9GVU5DVElPTl9FTkFCTEUJCQlCSVQoOCkKKyNkZWZpbmUJQ0NYX0NNRF9JR05PUkVfQ0NBCQkJQklUKDkpCisjZGVmaW5lCUNDWF9DTURfSUdOT1JFX1RYT04JCQlCSVQoMTApCisjZGVmaW5lCUNDWF9DTE1fUkVTVUxUX1JFQURZCQkJQklUKDE2KQorI2RlZmluZQlDQ1hfTkhNX1JFU1VMVF9SRUFEWQkJCUJJVCgxNikKKyNkZWZpbmUJQ0NYX0NNRF9SRVNFVAkJCQkweDAKKworCisjZGVmaW5lCUhXU0VUX01BWF9TSVpFXzkyUwkJCTEyOAorI2RlZmluZSBFRlVTRV9NQVhfU0VDVElPTgkJCTE2CisjZGVmaW5lIEVGVVNFX1JFQUxfQ09OVEVOVF9MRU4JCQk1MTIKKworI2RlZmluZSBSVEw4MTkwX0VFUFJPTV9JRAkJCTB4ODEyOQorI2RlZmluZSBFRVBST01fSFBPTgkJCQkweDAyCisjZGVmaW5lIEVFUFJPTV9DTEsJCQkJMHgwNgorI2RlZmluZSBFRVBST01fVEVTVFIJCQkJMHgwOAorCisjZGVmaW5lIEVFUFJPTV9WSUQJCQkJMHgwQQorI2RlZmluZSBFRVBST01fRElECQkJCTB4MEMKKyNkZWZpbmUgRUVQUk9NX1NWSUQJCQkJMHgwRQorI2RlZmluZSBFRVBST01fU01JRAkJCQkweDEwCisKKyNkZWZpbmUgRUVQUk9NX01BQ19BRERSCQkJCTB4MTIKKyNkZWZpbmUgRUVQUk9NX05PREVfQUREUkVTU19CWVRFXzAJCTB4MTIKKworI2RlZmluZSBFRVBST01fUFdESUZGCQkJCTB4NTQKKworI2RlZmluZSBFRVBST01fVFhQT1dFUkJBU0UJCQkweDUwCisjZGVmaW5lCUVFUFJPTV9UWF9QV1JfSU5ERVhfUkFOR0UJCTI4CisKKyNkZWZpbmUgRUVQUk9NX1RYX1BXUl9IVDIwX0RJRkYJCQkweDYyCisjZGVmaW5lIERFRkFVTFRfSFQyMF9UWFBXUl9ESUZGCQkJMgorI2RlZmluZSBFRVBST01fVFhfUFdSX09GRE1fRElGRgkJCTB4NjUKKworI2RlZmluZQlFRVBST01fVFhQV1JHUk9VUAkJCTB4NjcKKyNkZWZpbmUgRUVQUk9NX1JFR1VMQVRPUlkJCQkweDZECisKKyNkZWZpbmUgVFhfUFdSX1NBRkVUWV9DSEsJCQkweDZECisjZGVmaW5lIEVFUFJPTV9UWFBXSU5ERVhfQ0NLXzI0RwkJMHg1RAorI2RlZmluZSBFRVBST01fVFhQV0lOREVYX09GRE1fMjRHCQkweDZCCisjZGVmaW5lIEVFUFJPTV9IVDJUX0NIMV9BCQkJMHg2YworI2RlZmluZSBFRVBST01fSFQyVF9DSDdfQQkJCTB4NmQKKyNkZWZpbmUgRUVQUk9NX0hUMlRfQ0gxM19BCQkJMHg2ZQorI2RlZmluZSBFRVBST01fSFQyVF9DSDFfQgkJCTB4NmYKKyNkZWZpbmUgRUVQUk9NX0hUMlRfQ0g3X0IJCQkweDcwCisjZGVmaW5lIEVFUFJPTV9IVDJUX0NIMTNfQgkJCTB4NzEKKworI2RlZmluZSBFRVBST01fVFNTSV9BCQkJCTB4NzQKKyNkZWZpbmUgRUVQUk9NX1RTU0lfQgkJCQkweDc1CisKKyNkZWZpbmUJRUVQUk9NX1JGSU5EX1BPV0VSRElGRgkJCTB4NzYKKyNkZWZpbmUJRUVQUk9NX0RFRkFVTFRfTEVHQUNZSFRUWFBPV0VSRElGRgkweDMKKworI2RlZmluZSBFRVBST01fVEhFUk1BTE1FVEVSCQkJMHg3NworI2RlZmluZQlFRVBST01fQkxVRVRPT1RIX0NPRVhJU1QJCTB4NzgKKyNkZWZpbmUJRUVQUk9NX0JMVUVUT09USF9UWVBFCQkJMHg0ZgorCisjZGVmaW5lCUVFUFJPTV9PUFRJT05BTAkJCQkweDc4CisjZGVmaW5lCUVFUFJPTV9XT1dMQU4JCQkJMHg3OAorCisjZGVmaW5lIEVFUFJPTV9DUllTVEFMQ0FQCQkJMHg3OQorI2RlZmluZSBFRVBST01fQ0hBTk5FTFBMQU4JCQkweDdCCisjZGVmaW5lIEVFUFJPTV9WRVJTSU9OCQkJCTB4N0MKKyNkZWZpbmUJRUVQUk9NX0NVU1RPTUlECQkJCTB4N0EKKyNkZWZpbmUgRUVQUk9NX0JPQVJEVFlQRQkJCTB4N0UKKworI2RlZmluZQlFRVBST01fQ0hBTk5FTF9QTEFOX0ZDQwkJCTB4MAorI2RlZmluZQlFRVBST01fQ0hBTk5FTF9QTEFOX0lDCQkJMHgxCisjZGVmaW5lCUVFUFJPTV9DSEFOTkVMX1BMQU5fRVRTSQkJMHgyCisjZGVmaW5lCUVFUFJPTV9DSEFOTkVMX1BMQU5fU1BBSU4JCTB4MworI2RlZmluZQlFRVBST01fQ0hBTk5FTF9QTEFOX0ZSQU5DRQkJMHg0CisjZGVmaW5lCUVFUFJPTV9DSEFOTkVMX1BMQU5fTUtLCQkJMHg1CisjZGVmaW5lCUVFUFJPTV9DSEFOTkVMX1BMQU5fTUtLMQkJMHg2CisjZGVmaW5lCUVFUFJPTV9DSEFOTkVMX1BMQU5fSVNSQUVMCQkweDcKKyNkZWZpbmUJRUVQUk9NX0NIQU5ORUxfUExBTl9URUxFQwkJMHg4CisjZGVmaW5lCUVFUFJPTV9DSEFOTkVMX1BMQU5fR0xPQkFMX0RPTUFJTgkweDkKKyNkZWZpbmUJRUVQUk9NX0NIQU5ORUxfUExBTl9XT1JMRF9XSURFXzEzCTB4QQorI2RlZmluZQlFRVBST01fQ0hBTk5FTF9QTEFOX05DQwkJCTB4QgorI2RlZmluZQlFRVBST01fQ0hBTk5FTF9QTEFOX0JZX0hXX01BU0sJCTB4ODAKKworI2RlZmluZQlGV19ESUdfRElTQUJMRQkJCQkweGZkMDBjYzAwCisjZGVmaW5lCUZXX0RJR19FTkFCTEUJCQkJMHhmZDAwMDAwMAorI2RlZmluZQlGV19ESUdfSEFMVAkJCQkweGZkMDAwMDAxCisjZGVmaW5lCUZXX0RJR19SRVNVTUUJCQkJMHhmZDAwMDAwMgorI2RlZmluZQlGV19ISUdIX1BXUl9ESVNBQkxFCQkJMHhmZDAwMDAwOAorI2RlZmluZQlGV19ISUdIX1BXUl9FTkFCTEUJCQkweGZkMDAwMDA5CisjZGVmaW5lCUZXX0FERF9BMl9FTlRSWQkJCQkweGZkMDAwMDE2CisjZGVmaW5lCUZXX1RYUFdSX1RSQUNLX0VOQUJMRQkJCTB4ZmQwMDAwMTcKKyNkZWZpbmUJRldfVFhQV1JfVFJBQ0tfRElTQUJMRQkJCTB4ZmQwMDAwMTgKKyNkZWZpbmUJRldfVFhQV1JfVFJBQ0tfVEhFUk1BTAkJCTB4ZmQwMDAwMTkKKyNkZWZpbmUJRldfVFhBTlRfU1dJVENIX0VOQUJMRQkJCTB4ZmQwMDAwMjMKKyNkZWZpbmUJRldfVFhBTlRfU1dJVENIX0RJU0FCTEUJCQkweGZkMDAwMDI0CisjZGVmaW5lCUZXX1JBX0lOSVQJCQkJMHhmZDAwMDAyNgorI2RlZmluZQlGV19DVFJMX0RNX0JZX0RSSVZFUgkJCTBYZmQwMDAwMmEKKyNkZWZpbmUJRldfUkFfSU9UX0JHX0NPTUIJCQkweGZkMDAwMDMwCisjZGVmaW5lCUZXX1JBX0lPVF9OX0NPTUIJCQkweGZkMDAwMDMxCisjZGVmaW5lCUZXX1JBX1JFRlJFU0gJCQkJMHhmZDAwMDBhMAorI2RlZmluZQlGV19SQV9VUERBVEVfTUFTSwkJCTB4ZmQwMDAwYTIKKyNkZWZpbmUJRldfUkFfRElTQUJMRQkJCQkweGZkMDAwMGE0CisjZGVmaW5lCUZXX1JBX0FDVElWRQkJCQkweGZkMDAwMGE2CisjZGVmaW5lCUZXX1JBX0RJU0FCTEVfUlNTSV9NQVNLCQkJMHhmZDAwMDBhYworI2RlZmluZQlGV19SQV9FTkFCTEVfUlNTSV9NQVNLCQkJMHhmZDAwMDBhZAorI2RlZmluZQlGV19SQV9SRVNFVAkJCQkweGZkMDAwMGFmCisjZGVmaW5lCUZXX0RNX0RJU0FCTEUJCQkJMHhmZDAwYWEwMAorI2RlZmluZQlGV19JUUtfRU5BQkxFCQkJCTB4ZjAwMDAwMjAKKyNkZWZpbmUJRldfSVFLX1NVQ0NFU1MJCQkJMHgwMDAwZGRkZAorI2RlZmluZQlGV19JUUtfRkFJTAkJCQkweDAwMDBmZmZmCisjZGVmaW5lCUZXX09QX0ZBSUxVUkUJCQkJMHhmZmZmZmZmZgorI2RlZmluZQlGV19UWF9GRUVEQkFDS19OT05FCQkJMHhmYjAwMDAwMAorI2RlZmluZQlGV19UWF9GRUVEQkFDS19EVE1fRU5BQkxFCQkoRldfVFhfRkVFREJBQ0tfTk9ORSB8IDB4MSkKKyNkZWZpbmUJRldfVFhfRkVFREJBQ0tfQ0NYX0VOQUJMCQkoRldfVFhfRkVFREJBQ0tfTk9ORSB8IDB4MikKKyNkZWZpbmUJRldfQkJfUkVTRVRfRU5BQkxFCQkJMHhmZjAwMDAwZAorI2RlZmluZQlGV19CQl9SRVNFVF9ESVNBQkxFCQkJMHhmZjAwMDAwZQorI2RlZmluZQlGV19DQ0FfQ0hLX0VOQUJMRQkJCTB4ZmYwMDAwMTEKKyNkZWZpbmUJRldfQ0NLX1JFU0VUX0NOVAkJCTB4ZmYwMDAwMTMKKyNkZWZpbmUJRldfTFBTX0VOVEVSCQkJCTB4ZmUwMDAwMTAKKyNkZWZpbmUJRldfTFBTX0xFQVZFCQkJCTB4ZmUwMDAwMTEKKyNkZWZpbmUJRldfSU5ESVJFQ1RfUkVBRAkJCTB4ZjIwMDAwMDAKKyNkZWZpbmUJRldfSU5ESVJFQ1RfV1JJVEUJCQkweGYyMDAwMDAxCisjZGVmaW5lCUZXX0NIQU5fU0VUCQkJCTB4ZjMwMDAwMDEKKworI2RlZmluZSBSRlBDCQkJCQkweDVGCisjZGVmaW5lIFJDUl85MzU2U0VMCQkJCUJJVCg2KQorI2RlZmluZSBUQ1JfTFJMX09GRlNFVAkJCQkwCisjZGVmaW5lIFRDUl9TUkxfT0ZGU0VUCQkJCTgKKyNkZWZpbmUgVENSX01YRE1BX09GRlNFVAkJCTIxCisjZGVmaW5lIFRDUl9TQVQJCQkJCUJJVCgyNCkKKyNkZWZpbmUgUkNSX01YRE1BX09GRlNFVAkJCTgKKyNkZWZpbmUgUkNSX0ZJRk9fT0ZGU0VUCQkJCTEzCisjZGVmaW5lIFJDUl9Pbmx5RXJsUGt0CQkJCUJJVCgzMSkKKyNkZWZpbmUgQ1dSCQkJCQkweERDCisjZGVmaW5lIFJFVFJZQ1RSCQkJCTB4REUKKworI2RlZmluZSBDUFVfR0VOX1NZU1RFTV9SRVNFVAkJCTB4MDAwMDAwMDEKKworI2RlZmluZQlDQ1hfQ09NTUFORF9SRUcJCQkJMHg4OTAKKyNkZWZpbmUJQ0xNX1BFUklPRF9SRUcJCQkJMHg4OTQKKyNkZWZpbmUJTkhNX1BFUklPRF9SRUcJCQkJMHg4OTYKKworI2RlZmluZQlOSE1fVEhSRVNIT0xEMAkJCQkweDg5OAorI2RlZmluZQlOSE1fVEhSRVNIT0xEMQkJCQkweDg5OQorI2RlZmluZQlOSE1fVEhSRVNIT0xEMgkJCQkweDg5QQorI2RlZmluZQlOSE1fVEhSRVNIT0xEMwkJCQkweDg5QgorI2RlZmluZQlOSE1fVEhSRVNIT0xENAkJCQkweDg5QworI2RlZmluZQlOSE1fVEhSRVNIT0xENQkJCQkweDg5RAorI2RlZmluZQlOSE1fVEhSRVNIT0xENgkJCQkweDg5RQorI2RlZmluZQlDTE1fUkVTVUxUX1JFRwkJCQkweDhEMAorI2RlZmluZQlOSE1fUkVTVUxUX1JFRwkJCQkweDhENAorI2RlZmluZQlOSE1fUlBJX0NPVU5URVIwCQkJMHg4RDgKKyNkZWZpbmUJTkhNX1JQSV9DT1VOVEVSMQkJCTB4OEQ5CisjZGVmaW5lCU5ITV9SUElfQ09VTlRFUjIJCQkweDhEQQorI2RlZmluZQlOSE1fUlBJX0NPVU5URVIzCQkJMHg4REIKKyNkZWZpbmUJTkhNX1JQSV9DT1VOVEVSNAkJCTB4OERDCisjZGVmaW5lCU5ITV9SUElfQ09VTlRFUjUJCQkweDhERAorI2RlZmluZQlOSE1fUlBJX0NPVU5URVI2CQkJMHg4REUKKyNkZWZpbmUJTkhNX1JQSV9DT1VOVEVSNwkJCTB4OERGCisKKyNkZWZpbmUJSEFMXzgxOTJTX0hXX0dQSU9fT0ZGX0JJVAkJQklUKDMpCisjZGVmaW5lCUhBTF84MTkyU19IV19HUElPX09GRl9NQVNLCQkweEY3CisjZGVmaW5lCUhBTF84MTkyU19IV19HUElPX1dQU19CSVQJCUJJVCg0KQorCisjZGVmaW5lCVJQTUFDX1JFU0VUCQkJCTB4MTAwCisjZGVmaW5lCVJQTUFDX1RYU1RBUlQJCQkJMHgxMDQKKyNkZWZpbmUJUlBNQUNfVFhMRUdBQ1lTSUcJCQkweDEwOAorI2RlZmluZQlSUE1BQ19UWEhUU0lHMQkJCQkweDEwYworI2RlZmluZQlSUE1BQ19UWEhUU0lHMgkJCQkweDExMAorI2RlZmluZQlSUE1BQ19QSFlERUJVRwkJCQkweDExNAorI2RlZmluZQlSUE1BQ19UWFBBQ0tFVE5OTQkJCTB4MTE4CisjZGVmaW5lCVJQTUFDX1RYSURMRQkJCQkweDExYworI2RlZmluZQlSUE1BQ19UWE1BQ0hFQURFUjAJCQkweDEyMAorI2RlZmluZQlSUE1BQ19UWE1BQ0hFQURFUjEJCQkweDEyNAorI2RlZmluZQlSUE1BQ19UWE1BQ0hFQURFUjIJCQkweDEyOAorI2RlZmluZQlSUE1BQ19UWE1BQ0hFQURFUjMJCQkweDEyYworI2RlZmluZQlSUE1BQ19UWE1BQ0hFQURFUjQJCQkweDEzMAorI2RlZmluZQlSUE1BQ19UWE1BQ0hFQURFUjUJCQkweDEzNAorI2RlZmluZQlSUE1BQ19UWERBVEFUWVBFCQkJMHgxMzgKKyNkZWZpbmUJUlBNQUNfVFhSQU5ET01TRUVECQkJMHgxM2MKKyNkZWZpbmUJUlBNQUNfQ0NLUExDUFBSRUFNQkxFCQkJMHgxNDAKKyNkZWZpbmUJUlBNQUNfQ0NLUExDUEhFQURFUgkJCTB4MTQ0CisjZGVmaW5lCVJQTUFDX0NDS0NSQzE2CQkJCTB4MTQ4CisjZGVmaW5lCVJQTUFDX09GRE1SWENSQzMyT0sJCQkweDE3MAorI2RlZmluZQlSUE1BQ19PRkRNUlhDUkMzMkVSCQkJMHgxNzQKKyNkZWZpbmUJUlBNQUNfT0ZETVJYUEFSSVRZRVIJCQkweDE3OAorI2RlZmluZQlSUE1BQ19PRkRNUlhDUkM4RVIJCQkweDE3YworI2RlZmluZQlSUE1BQ19DQ0tDUlhSQzE2RVIJCQkweDE4MAorI2RlZmluZQlSUE1BQ19DQ0tDUlhSQzMyRVIJCQkweDE4NAorI2RlZmluZQlSUE1BQ19DQ0tDUlhSQzMyT0sJCQkweDE4OAorI2RlZmluZQlSUE1BQ19UWFNUQVRVUwkJCQkweDE4YworCisjZGVmaW5lCVJGX0JCX0NNRF9BRERSCQkJCTB4MDJjMAorI2RlZmluZQlSRl9CQl9DTURfREFUQQkJCQkweDAyYzQKKworI2RlZmluZQlSRlBHQTBfUkZNT0QJCQkJMHg4MDAKKworI2RlZmluZQlSRlBHQTBfVFhJTkZPCQkJCTB4ODA0CisjZGVmaW5lCVJGUEdBMF9QU0RGVU5DVElPTgkJCTB4ODA4CisKKyNkZWZpbmUJUkZQR0EwX1RYR0FJTlNUQUdFCQkJMHg4MGMKKworI2RlZmluZQlSRlBHQTBfUkZUSU1JTkcxCQkJMHg4MTAKKyNkZWZpbmUJUkZQR0EwX1JGVElNSU5HMgkJCTB4ODE0CisjZGVmaW5lCVJGUEdBMF9YQV9IU1NJUEFSQU1FVEVSMQkJMHg4MjAKKyNkZWZpbmUJUkZQR0EwX1hBX0hTU0lQQVJBTUVURVIyCQkweDgyNAorI2RlZmluZQlSRlBHQTBfWEJfSFNTSVBBUkFNRVRFUjEJCTB4ODI4CisjZGVmaW5lCVJGUEdBMF9YQl9IU1NJUEFSQU1FVEVSMgkJMHg4MmMKKyNkZWZpbmUJUkZQR0EwX1hDX0hTU0lQQVJBTUVURVIxCQkweDgzMAorI2RlZmluZQlSRlBHQTBfWENfSFNTSVBBUkFNRVRFUjIJCTB4ODM0CisjZGVmaW5lCVJGUEdBMF9YRF9IU1NJUEFSQU1FVEVSMQkJMHg4MzgKKyNkZWZpbmUJUkZQR0EwX1hEX0hTU0lQQVJBTUVURVIyCQkweDgzYworI2RlZmluZQlSRlBHQTBfWEFfTFNTSVBBUkFNRVRFUgkJCTB4ODQwCisjZGVmaW5lCVJGUEdBMF9YQl9MU1NJUEFSQU1FVEVSCQkJMHg4NDQKKyNkZWZpbmUJUkZQR0EwX1hDX0xTU0lQQVJBTUVURVIJCQkweDg0OAorI2RlZmluZQlSRlBHQTBfWERfTFNTSVBBUkFNRVRFUgkJCTB4ODRjCisKKyNkZWZpbmUJUkZQR0EwX1JGV0FLRVVQX1BBUkFNRVRFUgkJMHg4NTAKKyNkZWZpbmUJUkZQR0EwX1JGU0xFRVBVUF9QQVJBTUVURVIJCTB4ODU0CisKKyNkZWZpbmUJUkZQR0EwX1hBQl9TV0lUQ0hDT05UUk9MCQkweDg1OAorI2RlZmluZQlSRlBHQTBfWENEX1NXSVRDSENPTlRST0wJCTB4ODVjCisKKyNkZWZpbmUJUkZQR0EwX1hBX1JGSU5URVJGQUNFT0UJCQkweDg2MAorI2RlZmluZQlSRlBHQTBfWEJfUkZJTlRFUkZBQ0VPRQkJCTB4ODY0CisjZGVmaW5lCVJGUEdBMF9YQ19SRklOVEVSRkFDRU9FCQkJMHg4NjgKKyNkZWZpbmUJUkZQR0EwX1hEX1JGSU5URVJGQUNFT0UJCQkweDg2YworCisjZGVmaW5lCVJGUEdBMF9YQUJfUkZJTlRFUkZBQ0VTVwkJMHg4NzAKKyNkZWZpbmUJUkZQR0EwX1hDRF9SRklOVEVSRkFDRVNXCQkweDg3NAorCisjZGVmaW5lCVJGUEdBMF9YQUJfUkZQQVJBTUVURVIJCQkweDg3OAorI2RlZmluZQlSRlBHQTBfWENEX1JGUEFSQU1FVEVSCQkJMHg4N2MKKworI2RlZmluZQlSRlBHQTBfQU5BTE9HUEFSQU1FVEVSMQkJCTB4ODgwCisjZGVmaW5lCVJGUEdBMF9BTkFMT0dQQVJBTUVURVIyCQkJMHg4ODQKKyNkZWZpbmUJUkZQR0EwX0FOQUxPR1BBUkFNRVRFUjMJCQkweDg4OAorI2RlZmluZQlSRlBHQTBfQU5BTE9HUEFSQU1FVEVSNAkJCTB4ODhjCisKKyNkZWZpbmUJUkZQR0EwX1hBX0xTU0lSRUFEQkFDSwkJCTB4OGEwCisjZGVmaW5lCVJGUEdBMF9YQl9MU1NJUkVBREJBQ0sJCQkweDhhNAorI2RlZmluZQlSRlBHQTBfWENfTFNTSVJFQURCQUNLCQkJMHg4YTgKKyNkZWZpbmUJUkZQR0EwX1hEX0xTU0lSRUFEQkFDSwkJCTB4OGFjCisKKyNkZWZpbmUJUkZQR0EwX1BTRFJFUE9SVAkJCTB4OGI0CisjZGVmaW5lCVRSQU5TQ0VJVkVSQV9IU1BJX1JFQURCQUNLCQkweDhiOAorI2RlZmluZQlUUkFOU0NFSVZFUkJfSFNQSV9SRUFEQkFDSwkJMHg4YmMKKyNkZWZpbmUJUkZQR0EwX1hBQl9SRklOVEVSRkFDRVJCCQkweDhlMAorI2RlZmluZQlSRlBHQTBfWENEX1JGSU5URVJGQUNFUkIJCTB4OGU0CisjZGVmaW5lCVJGUEdBMV9SRk1PRAkJCQkweDkwMAorCisjZGVmaW5lCVJGUEdBMV9UWEJMT0NLCQkJCTB4OTA0CisjZGVmaW5lCVJGUEdBMV9ERUJVR1NFTEVDVAkJCTB4OTA4CisjZGVmaW5lCVJGUEdBMV9UWElORk8JCQkJMHg5MGMKKworI2RlZmluZQlSQ0NLMF9TWVNURU0JCQkJMHhhMDAKKworI2RlZmluZQlSQ0NLMF9BRkVTRVRUSU5HCQkJMHhhMDQKKyNkZWZpbmUJUkNDSzBfQ0NBCQkJCTB4YTA4CisKKyNkZWZpbmUJUkNDSzBfUlhBR0MxCQkJCTB4YTBjCisjZGVmaW5lCVJDQ0swX1JYQUdDMgkJCQkweGExMAorCisjZGVmaW5lCVJDQ0swX1JYSFAJCQkJMHhhMTQKKworI2RlZmluZQlSQ0NLMF9EU1BQQVJBTUVURVIxCQkJMHhhMTgKKyNkZWZpbmUJUkNDSzBfRFNQUEFSQU1FVEVSMgkJCTB4YTFjCisKKyNkZWZpbmUJUkNDSzBfVFhGSUxURVIxCQkJCTB4YTIwCisjZGVmaW5lCVJDQ0swX1RYRklMVEVSMgkJCQkweGEyNAorI2RlZmluZQlSQ0NLMF9ERUJVR1BPUlQJCQkJMHhhMjgKKyNkZWZpbmUJUkNDSzBfRkFMU0VBTEFSTVJFUE9SVAkJCTB4YTJjCisjZGVmaW5lCVJDQ0swX1RSU1NJUkVQT1JUCQkJMHhhNTAKKyNkZWZpbmUJUkNDSzBfUlhSRVBPUlQJCQkJMHhhNTQKKyNkZWZpbmUJUkNDSzBfRkFDT1VOVEVSTE9XRVIJCQkweGE1YworI2RlZmluZQlSQ0NLMF9GQUNPVU5URVJVUFBFUgkJCTB4YTU4CisKKyNkZWZpbmUJUk9GRE0wX0xTVEYJCQkJMHhjMDAKKworI2RlZmluZQlST0ZETTBfVFJYUEFUSEVOQUJMRQkJCTB4YzA0CisjZGVmaW5lCVJPRkRNMF9UUk1VWFBBUgkJCQkweGMwOAorI2RlZmluZQlST0ZETTBfVFJTV0lTT0xBVElPTgkJCTB4YzBjCisKKyNkZWZpbmUJUk9GRE0wX1hBUlhBRkUJCQkJMHhjMTAKKyNkZWZpbmUJUk9GRE0wX1hBUlhJUUlNQkFMQU5DRQkJCTB4YzE0CisjZGVmaW5lCVJPRkRNMF9YQlJYQUZFCQkJCTB4YzE4CisjZGVmaW5lCVJPRkRNMF9YQlJYSVFJTUJBTEFOQ0UJCQkweGMxYworI2RlZmluZQlST0ZETTBfWENSWEFGRQkJCQkweGMyMAorI2RlZmluZQlST0ZETTBfWENSWElRSU1CQUxBTkNFCQkJMHhjMjQKKyNkZWZpbmUJUk9GRE0wX1hEUlhBRkUJCQkJMHhjMjgKKyNkZWZpbmUJUk9GRE0wX1hEUlhJUUlNQkFMQU5DRQkJCTB4YzJjCisKKyNkZWZpbmUJUk9GRE0wX1JYREVURUNUT1IxCQkJMHhjMzAKKyNkZWZpbmUJUk9GRE0wX1JYREVURUNUT1IyCQkJMHhjMzQKKyNkZWZpbmUJUk9GRE0wX1JYREVURUNUT1IzCQkJMHhjMzgKKyNkZWZpbmUJUk9GRE0wX1JYREVURUNUT1I0CQkJMHhjM2MKKworI2RlZmluZQlST0ZETTBfUlhEU1AJCQkJMHhjNDAKKyNkZWZpbmUJUk9GRE0wX0NGT19BTkRfREFHQwkJCTB4YzQ0CisjZGVmaW5lCVJPRkRNMF9DQ0FEUk9QX1RIUkVTSE9MRAkJMHhjNDgKKyNkZWZpbmUJUk9GRE0wX0VDQ0FfVEhSRVNIT0xECQkJMHhjNGMKKworI2RlZmluZQlST0ZETTBfWEFBR0NDT1JFMQkJCTB4YzUwCisjZGVmaW5lCVJPRkRNMF9YQUFHQ0NPUkUyCQkJMHhjNTQKKyNkZWZpbmUJUk9GRE0wX1hCQUdDQ09SRTEJCQkweGM1OAorI2RlZmluZQlST0ZETTBfWEJBR0NDT1JFMgkJCTB4YzVjCisjZGVmaW5lCVJPRkRNMF9YQ0FHQ0NPUkUxCQkJMHhjNjAKKyNkZWZpbmUJUk9GRE0wX1hDQUdDQ09SRTIJCQkweGM2NAorI2RlZmluZQlST0ZETTBfWERBR0NDT1JFMQkJCTB4YzY4CisjZGVmaW5lCVJPRkRNMF9YREFHQ0NPUkUyCQkJMHhjNmMKKworI2RlZmluZQlST0ZETTBfQUdDUEFSQU1FVEVSMQkJCTB4YzcwCisjZGVmaW5lCVJPRkRNMF9BR0NQQVJBTUVURVIyCQkJMHhjNzQKKyNkZWZpbmUJUk9GRE0wX0FHQ1JTU0lUQUJMRQkJCTB4Yzc4CisjZGVmaW5lCVJPRkRNMF9IVFNURkFHQwkJCQkweGM3YworCisjZGVmaW5lCVJPRkRNMF9YQVRYSVFJTUJBTEFOQ0UJCQkweGM4MAorI2RlZmluZQlST0ZETTBfWEFUWEFGRQkJCQkweGM4NAorI2RlZmluZQlST0ZETTBfWEJUWElRSU1CQUxBTkNFCQkJMHhjODgKKyNkZWZpbmUJUk9GRE0wX1hCVFhBRkUJCQkJMHhjOGMKKyNkZWZpbmUJUk9GRE0wX1hDVFhJUUlNQkFMQU5DRQkJCTB4YzkwCisjZGVmaW5lCVJPRkRNMF9YQ1RYQUZFCQkJCTB4Yzk0CisjZGVmaW5lCVJPRkRNMF9YRFRYSVFJTUJBTEFOQ0UJCQkweGM5OAorI2RlZmluZQlST0ZETTBfWERUWEFGRQkJCQkweGM5YworCisjZGVmaW5lCVJPRkRNMF9SWEhQX1BBUkFNRVRFUgkJCTB4Y2UwCisjZGVmaW5lCVJPRkRNMF9UWFBTRVVET19OT0lTRV9XR1QJCTB4Y2U0CisjZGVmaW5lCVJPRkRNMF9GUkFNRV9TWU5DCQkJMHhjZjAKKyNkZWZpbmUJUk9GRE0wX0RGU1JFUE9SVAkJCTB4Y2Y0CisjZGVmaW5lCVJPRkRNMF9UWENPRUZGMQkJCQkweGNhNAorI2RlZmluZQlST0ZETTBfVFhDT0VGRjIJCQkJMHhjYTgKKyNkZWZpbmUJUk9GRE0wX1RYQ09FRkYzCQkJCTB4Y2FjCisjZGVmaW5lCVJPRkRNMF9UWENPRUZGNAkJCQkweGNiMAorI2RlZmluZQlST0ZETTBfVFhDT0VGRjUJCQkJMHhjYjQKKyNkZWZpbmUJUk9GRE0wX1RYQ09FRkY2CQkJCTB4Y2I4CisKKworI2RlZmluZQlST0ZETTFfTFNURgkJCQkweGQwMAorI2RlZmluZQlST0ZETTFfVFJYUEFUSEVOQUJMRQkJCTB4ZDA0CisKKyNkZWZpbmUJUk9GRE0xX0NGTwkJCQkweGQwOAorI2RlZmluZQlST0ZETTFfQ1NJMQkJCQkweGQxMAorI2RlZmluZQlST0ZETTFfU0JECQkJCTB4ZDE0CisjZGVmaW5lCVJPRkRNMV9DU0kyCQkJCTB4ZDE4CisjZGVmaW5lCVJPRkRNMV9DRk9UUkFDS0lORwkJCTB4ZDJjCisjZGVmaW5lCVJPRkRNMV9UUlhNRVNBVVJFMQkJCTB4ZDM0CisjZGVmaW5lCVJPRkRNMV9JTlRGX0RFVAkJCQkweGQzYworI2RlZmluZQlST0ZETTFfUFNFVURPX05PSVNFU1RBVEVBQgkJMHhkNTAKKyNkZWZpbmUJUk9GRE0xX1BTRVVET19OT0lTRVNUQVRFQ0QJCTB4ZDU0CisjZGVmaW5lCVJPRkRNMV9SWF9QU0VVRE9fTk9JU0VfV0dUCQkweGQ1OAorCisjZGVmaW5lCVJPRkRNX1BIWUNPVU5URVIxCQkJMHhkYTAKKyNkZWZpbmUJUk9GRE1fUEhZQ09VTlRFUjIJCQkweGRhNAorI2RlZmluZQlST0ZETV9QSFlDT1VOVEVSMwkJCTB4ZGE4CisKKyNkZWZpbmUJUk9GRE1fU0hPUlRfQ0ZPQUIJCQkweGRhYworI2RlZmluZQlST0ZETV9TSE9SVF9DRk9DRAkJCTB4ZGIwCisjZGVmaW5lCVJPRkRNX0xPTkdfQ0ZPQUIJCQkweGRiNAorI2RlZmluZQlST0ZETV9MT05HX0NGT0NECQkJMHhkYjgKKyNkZWZpbmUJUk9GRE1fVEFJTF9DRk9BQgkJCTB4ZGJjCisjZGVmaW5lCVJPRkRNX1RBSUxfQ0ZPQ0QJCQkweGRjMAorI2RlZmluZQlST0ZETV9QV19NRUFTVVJFMQkJCTB4ZGM0CisjZGVmaW5lCVJPRkRNX1BXX01FQVNVUkUyCQkJMHhkYzgKKyNkZWZpbmUJUk9GRE1fQldfUkVQT1JUCQkJCTB4ZGNjCisjZGVmaW5lCVJPRkRNX0FHQ19SRVBPUlQJCQkweGRkMAorI2RlZmluZQlST0ZETV9SWFNOUgkJCQkweGRkNAorI2RlZmluZQlST0ZETV9SWEVWTUNTSQkJCQkweGRkOAorI2RlZmluZQlST0ZETV9TSUdfUkVQT1JUCQkJMHhkZGMKKworCisjZGVmaW5lCVJUWEFHQ19SQVRFMThfMDYJCQkweGUwMAorI2RlZmluZQlSVFhBR0NfUkFURTU0XzI0CQkJMHhlMDQKKyNkZWZpbmUJUlRYQUdDX0NDS19NQ1MzMgkJCTB4ZTA4CisjZGVmaW5lCVJUWEFHQ19NQ1MwM19NQ1MwMAkJCTB4ZTEwCisjZGVmaW5lCVJUWEFHQ19NQ1MwN19NQ1MwNAkJCTB4ZTE0CisjZGVmaW5lCVJUWEFHQ19NQ1MxMV9NQ1MwOAkJCTB4ZTE4CisjZGVmaW5lCVJUWEFHQ19NQ1MxNV9NQ1MxMgkJCTB4ZTFjCisKKworI2RlZmluZQlSRl9BQwkJCQkJMHgwMAorI2RlZmluZQlSRl9JUUFESl9HMQkJCQkweDAxCisjZGVmaW5lCVJGX0lRQURKX0cyCQkJCTB4MDIKKyNkZWZpbmUJUkZfUE9XX1RSU1cJCQkJMHgwNQorI2RlZmluZQlSRl9HQUlOX1JYCQkJCTB4MDYKKyNkZWZpbmUJUkZfR0FJTl9UWAkJCQkweDA3CisjZGVmaW5lCVJGX1RYTV9JREFDCQkJCTB4MDgKKyNkZWZpbmUJUkZfQlNfSVFHRU4JCQkJMHgwRgorCisjZGVmaW5lCVJGX01PREUxCQkJCTB4MTAKKyNkZWZpbmUJUkZfTU9ERTIJCQkJMHgxMQorI2RlZmluZQlSRl9SWF9BR0NfSFAJCQkJMHgxMgorI2RlZmluZQlSRl9UWF9BR0MJCQkJMHgxMworI2RlZmluZQlSRl9CSUFTCQkJCQkweDE0CisjZGVmaW5lCVJGX0lQQQkJCQkJMHgxNQorI2RlZmluZQlSRl9QT1dfQUJJTElUWQkJCQkweDE3CisjZGVmaW5lCVJGX01PREVfQUcJCQkJMHgxOAorI2RlZmluZQlSRl9DSEFOTkVMCQkJCTB4MTgKKyNkZWZpbmUJUkZfQ0hOTEJXCQkJCTB4MTgKKyNkZWZpbmUJUkZfVE9QCQkJCQkweDE5CisjZGVmaW5lCVJGX1JYX0cxCQkJCTB4MUEKKyNkZWZpbmUJUkZfUlhfRzIJCQkJMHgxQgorI2RlZmluZQlSRl9SWF9CQjIJCQkJMHgxQworI2RlZmluZQlSRl9SWF9CQjEJCQkJMHgxRAorI2RlZmluZQlSRl9SQ0sxCQkJCQkweDFFCisjZGVmaW5lCVJGX1JDSzIJCQkJCTB4MUYKKworI2RlZmluZQlSRl9UWF9HMQkJCQkweDIwCisjZGVmaW5lCVJGX1RYX0cyCQkJCTB4MjEKKyNkZWZpbmUJUkZfVFhfRzMJCQkJMHgyMgorI2RlZmluZQlSRl9UWF9CQjEJCQkJMHgyMworI2RlZmluZQlSRl9UX01FVEVSCQkJCTB4MjQKKyNkZWZpbmUJUkZfU1lOX0cxCQkJCTB4MjUKKyNkZWZpbmUJUkZfU1lOX0cyCQkJCTB4MjYKKyNkZWZpbmUJUkZfU1lOX0czCQkJCTB4MjcKKyNkZWZpbmUJUkZfU1lOX0c0CQkJCTB4MjgKKyNkZWZpbmUJUkZfU1lOX0c1CQkJCTB4MjkKKyNkZWZpbmUJUkZfU1lOX0c2CQkJCTB4MkEKKyNkZWZpbmUJUkZfU1lOX0c3CQkJCTB4MkIKKyNkZWZpbmUJUkZfU1lOX0c4CQkJCTB4MkMKKworI2RlZmluZQlSRl9SQ0tfT1MJCQkJMHgzMAorI2RlZmluZQlSRl9UWFBBX0cxCQkJCTB4MzEKKyNkZWZpbmUJUkZfVFhQQV9HMgkJCQkweDMyCisjZGVmaW5lCVJGX1RYUEFfRzMJCQkJMHgzMworCisjZGVmaW5lCUJSRk1PRAkJCQkJMHgxCisjZGVmaW5lCUJDQ0tFTgkJCQkJMHgxMDAwMDAwCisjZGVmaW5lCUJPRkRNRU4JCQkJCTB4MjAwMDAwMAorCisjZGVmaW5lCUJYQlRYQUdDCQkJCTB4ZjAwCisjZGVmaW5lCUJYQ1RYQUdDCQkJCTB4ZjAwMAorI2RlZmluZQlCWERUWEFHQwkJCQkweGYwMDAwCisKKyNkZWZpbmUJQjNXSVJFX0RBVEFMRU5HVEgJCQkweDgwMAorI2RlZmluZQlCM1dJUkVfQUREUkVTU0xFTkdUSAkJCTB4NDAwCisKKyNkZWZpbmUJQlJGU0lfUkZFTlYJCQkJMHgxMAorCisjZGVmaW5lCUJMU1NJX1JFQURBRERSRVNTCQkJMHg3ZjgwMDAwMAorI2RlZmluZQlCTFNTSV9SRUFERURHRQkJCQkweDgwMDAwMDAwCisjZGVmaW5lCUJMU1NJX1JFQURCQUNLX0RBVEEJCQkweGZmZmZmCisKKyNkZWZpbmUJQkFEQ0xLUEhBU0UJCQkJMHg0MDAwMDAwCisKKyNkZWZpbmUJQkNDS19TSURFQkFORAkJCQkweDEwCisKKyNkZWZpbmUJQlRYX0FHQ1JBVEVDQ0sJCQkJMHg3ZjAwCisKKyNkZWZpbmUJTUFTS0JZVEUwCQkJCTB4ZmYKKyNkZWZpbmUJTUFTS0JZVEUxCQkJCTB4ZmYwMAorI2RlZmluZQlNQVNLQllURTIJCQkJMHhmZjAwMDAKKyNkZWZpbmUJTUFTS0JZVEUzCQkJCTB4ZmYwMDAwMDAKKyNkZWZpbmUJTUFTS0hXT1JECQkJCTB4ZmZmZjAwMDAKKyNkZWZpbmUJTUFTS0xXT1JECQkJCTB4MDAwMGZmZmYKKyNkZWZpbmUJTUFTS0RXT1JECQkJCTB4ZmZmZmZmZmYKKworI2RlZmluZQlNQUtTMTJCSVRTCQkJCTB4ZmZmZmYKKyNkZWZpbmUJTUFTSzIwQklUUwkJCQkweGZmZmZmCisjZGVmaW5lIFJGUkVHX09GRlNFVF9NQVNLCQkJMHhmZmZmZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL3JmLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9yZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkM2E0ODMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9yZi5jCkBAIC0wLDAgKzEsNTQ2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIi4uL3dpZmkuaCIKKyNpbmNsdWRlICJyZWcuaCIKKyNpbmNsdWRlICJkZWYuaCIKKyNpbmNsdWRlICJwaHkuaCIKKyNpbmNsdWRlICJyZi5oIgorI2luY2x1ZGUgImRtLmgiCisKKworc3RhdGljIHZvaWQgX3J0bDkyc19nZXRfcG93ZXJiYXNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqcF9wd3JsZXZlbCwKKwkJCQkgIHU4IGNobmwsIHUzMiAqb2ZkbWJhc2UsIHUzMiAqbWNzYmFzZSwKKwkJCQkgIHU4ICpwX2ZpbmFsX3B3cmlkeCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOworCXUzMiBwd3JiYXNlMCwgcHdyYmFzZTE7CisJdTggbGVnYWN5X3B3cmRpZmYgPSAwLCBodDIwX3B3cmRpZmYgPSAwOworCXU4IGksIHB3cmxldmVsWzRdOworCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKwkJcHdybGV2ZWxbaV0gPSBwX3B3cmxldmVsW2ldOworCisJLyogV2Ugb25seSBjYXJlIGFib3V0IHRoZSBwYXRoIEEgZm9yIGxlZ2FjeS4gKi8KKwlpZiAocnRsZWZ1c2UtPmVlcHJvbV92ZXJzaW9uIDwgMikgeworCQlwd3JiYXNlMCA9IHB3cmxldmVsWzBdICsgKHJ0bGVmdXNlLT5sZWdhY3lfaHR0eHBvd2VyZGlmZiAmIDB4Zik7CisJfSBlbHNlIGlmIChydGxlZnVzZS0+ZWVwcm9tX3ZlcnNpb24gPj0gMikgeworCQlsZWdhY3lfcHdyZGlmZiA9IHJ0bGVmdXNlLT50eHB3cl9sZWdhY3lodGRpZmYKKwkJCQkJCVtSRjkwX1BBVEhfQV1bY2hubCAtIDFdOworCisJCS8qIEZvciBsZWdhY3kgT0ZETSwgdHggcHdyIGFsd2F5cyA+IEhUIE9GRE0gcHdyLgorCQkgKiBXZSBkbyBub3QgY2FyZSBQYXRoIEIKKwkJICogbGVnYWN5IE9GRE0gcHdyIGRpZmYuIE5PIEJCIHJlZ2lzdGVyCisJCSAqIHRvIG5vdGlmeSBIVy4gKi8KKwkJcHdyYmFzZTAgPSBwd3JsZXZlbFswXSArIGxlZ2FjeV9wd3JkaWZmOworCX0KKworCXB3cmJhc2UwID0gKHB3cmJhc2UwIDw8IDI0KSB8IChwd3JiYXNlMCA8PCAxNikgfCAocHdyYmFzZTAgPDwgOCkgfAorCQkgICAgcHdyYmFzZTA7CisJKm9mZG1iYXNlID0gcHdyYmFzZTA7CisKKwkvKiBNQ1MgcmF0ZXMgKi8KKwlpZiAocnRsZWZ1c2UtPmVlcHJvbV92ZXJzaW9uID49IDIpIHsKKwkJLyogQ2hlY2sgSFQyMCB0byBIVDQwIGRpZmYJKi8KKwkJaWYgKHJ0bHBoeS0+Y3VycmVudF9jaGFuX2J3ID09IEhUX0NIQU5ORUxfV0lEVEhfMjApIHsKKwkJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCQkvKiByZi1BLCByZi1CICovCisJCQkJLyogSFQgMjA8LT40MCBwd3IgZGlmZiAqLworCQkJCWh0MjBfcHdyZGlmZiA9IHJ0bGVmdXNlLT50eHB3cl9odDIwZGlmZgorCQkJCQkJCVtpXVtjaG5sIC0gMV07CisKKwkJCQlpZiAoaHQyMF9wd3JkaWZmIDwgOCkgLyogMH4rNyAqLworCQkJCQlwd3JsZXZlbFtpXSArPSBodDIwX3B3cmRpZmY7CisJCQkJZWxzZSAvKiBpbmRleDgtMTU9LTh+LTEgKi8KKwkJCQkJcHdybGV2ZWxbaV0gLT0gKDE2IC0gaHQyMF9wd3JkaWZmKTsKKwkJCX0KKwkJfQorCX0KKworCS8qIHVzZSBpbmRleCBvZiByZi1BICovCisJcHdyYmFzZTEgPSBwd3JsZXZlbFswXTsKKwlwd3JiYXNlMSA9IChwd3JiYXNlMSA8PCAyNCkgfCAocHdyYmFzZTEgPDwgMTYpIHwgKHB3cmJhc2UxIDw8IDgpIHwKKwkJCQlwd3JiYXNlMTsKKwkqbWNzYmFzZSA9IHB3cmJhc2UxOworCisJLyogVGhlIGZvbGxvd2luZyBpcyBmb3IgQW50ZW5uYQorCSAqIGRpZmYgZnJvbSBBbnQtQiB0byBBbnQtQSAqLworCXBfZmluYWxfcHdyaWR4WzBdID0gcHdybGV2ZWxbMF07CisJcF9maW5hbF9wd3JpZHhbMV0gPSBwd3JsZXZlbFsxXTsKKworCXN3aXRjaCAocnRsZWZ1c2UtPmVlcHJvbV9yZWd1bGF0b3J5KSB7CisJY2FzZSAzOgorCQkvKiBUaGUgZm9sbG93aW5nIGlzIGZvciBjYWxjdWxhdGlvbgorCQkgKiBvZiB0aGUgcG93ZXIgZGlmZiBmb3IgQW50LUIgdG8gQW50LUEuICovCisJCWlmIChydGxwaHktPmN1cnJlbnRfY2hhbl9idyA9PSBIVF9DSEFOTkVMX1dJRFRIXzIwXzQwKSB7CisJCQlwX2ZpbmFsX3B3cmlkeFswXSArPSBydGxlZnVzZS0+cHdyZ3JvdXBfaHQ0MAorCQkJCQkJW1JGOTBfUEFUSF9BXVsKKwkJCQkJCWNobmwgLSAxXTsKKwkJCXBfZmluYWxfcHdyaWR4WzFdICs9IHJ0bGVmdXNlLT5wd3Jncm91cF9odDQwCisJCQkJCQlbUkY5MF9QQVRIX0JdWworCQkJCQkJY2hubCAtIDFdOworCQl9IGVsc2UgeworCQkJcF9maW5hbF9wd3JpZHhbMF0gKz0gcnRsZWZ1c2UtPnB3cmdyb3VwX2h0MjAKKwkJCQkJCVtSRjkwX1BBVEhfQV1bCisJCQkJCQljaG5sIC0gMV07CisJCQlwX2ZpbmFsX3B3cmlkeFsxXSArPSBydGxlZnVzZS0+cHdyZ3JvdXBfaHQyMAorCQkJCQkJW1JGOTBfUEFUSF9CXVsKKwkJCQkJCWNobmwgLSAxXTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAocnRscGh5LT5jdXJyZW50X2NoYW5fYncgPT0gSFRfQ0hBTk5FTF9XSURUSF8yMF80MCkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwgKCI0ME1IeiBmaW5hbHB3cl9pZHggIgorCQkJIihBIC8gQikgPSAweCV4IC8gMHgleFxuIiwgcF9maW5hbF9wd3JpZHhbMF0sCisJCQlwX2ZpbmFsX3B3cmlkeFsxXSkpOworCX0gZWxzZSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19MT1VELCAoIjIwTUh6IGZpbmFscHdyX2lkeCAiCisJCQkiKEEgLyBCKSA9IDB4JXggLyAweCV4XG4iLCBwX2ZpbmFsX3B3cmlkeFswXSwKKwkJCSBwX2ZpbmFsX3B3cmlkeFsxXSkpOworCX0KK30KKworc3RhdGljIHZvaWQgX3J0bDkyc19zZXRfYW50ZW5uYWRpZmYoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgIHU4ICpwX2ZpbmFsX3B3cmlkeCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9lZnVzZSAqcnRsZWZ1c2UgPSBydGxfZWZ1c2UocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCWNoYXIgYW50X3B3cl9kaWZmID0gMDsKKwl1MzIJdTRyZWdfdmFsID0gMDsKKworCWlmIChydGxwaHktPnJmX3R5cGUgPT0gUkZfMlQyUikgeworCQlhbnRfcHdyX2RpZmYgPSBwX2ZpbmFsX3B3cmlkeFsxXSAtIHBfZmluYWxfcHdyaWR4WzBdOworCisJCS8qIHJhbmdlIGlzIGZyb20gN34tOCwKKwkJICogaW5kZXggPSAweDB+MHhmICovCisJCWlmIChhbnRfcHdyX2RpZmYgPiA3KQorCQkJYW50X3B3cl9kaWZmID0gNzsKKwkJaWYgKGFudF9wd3JfZGlmZiA8IC04KQorCQkJYW50X3B3cl9kaWZmID0gLTg7CisKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX0xPVUQsCisJCQkgKCJBbnRlbm5hIERpZmYgZnJvbSBSRi1CICIKKwkJCSJ0byBSRi1BID0gJWQgKDB4JXgpXG4iLCBhbnRfcHdyX2RpZmYsCisJCQkgYW50X3B3cl9kaWZmICYgMHhmKSk7CisKKwkJYW50X3B3cl9kaWZmICY9IDB4ZjsKKwl9CisKKwkvKiBBbnRlbm5hIFRYIHBvd2VyIGRpZmZlcmVuY2UgKi8KKwlydGxlZnVzZS0+YW50ZW5uYV90eHB3ZGlmZlsyXSA9IDA7LyogUkYtRCwgZG9uJ3QgY2FyZSAqLworCXJ0bGVmdXNlLT5hbnRlbm5hX3R4cHdkaWZmWzFdID0gMDsvKiBSRi1DLCBkb24ndCBjYXJlICovCisJcnRsZWZ1c2UtPmFudGVubmFfdHhwd2RpZmZbMF0gPSAodTgpKGFudF9wd3JfZGlmZik7CS8qIFJGLUIgKi8KKworCXU0cmVnX3ZhbCA9IHJ0bGVmdXNlLT5hbnRlbm5hX3R4cHdkaWZmWzJdIDw8IDggfAorCQkJCXJ0bGVmdXNlLT5hbnRlbm5hX3R4cHdkaWZmWzFdIDw8IDQgfAorCQkJCXJ0bGVmdXNlLT5hbnRlbm5hX3R4cHdkaWZmWzBdOworCisJcnRsX3NldF9iYnJlZyhodywgUkZQR0EwX1RYR0FJTlNUQUdFLCAoQlhCVFhBR0MgfCBCWENUWEFHQyB8IEJYRFRYQUdDKSwKKwkJICAgICAgdTRyZWdfdmFsKTsKKworCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19MT1VELAorCQkgKCJXcml0ZSBCQ0QtRGlmZigweCV4KSA9IDB4JXhcbiIsCisJCSBSRlBHQTBfVFhHQUlOU1RBR0UsIHU0cmVnX3ZhbCkpOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzX2dldF90eHBvd2VyX3dyaXRldmFsX2J5cmVndWxhdG9yeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJCSAgICAgIHU4IGNobmwsIHU4IGluZGV4LAorCQkJCQkJICAgICAgdTMyIHB3cmJhc2UwLAorCQkJCQkJICAgICAgdTMyIHB3cmJhc2UxLAorCQkJCQkJICAgICAgdTMyICpwX291dHdyaXRlX3ZhbCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICYocnRscHJpdi0+cGh5KTsKKwlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOworCXU4IGksIGNobmxncm91cCwgcHdyZGlmZl9saW1pdFs0XTsKKwl1MzIgd3JpdGV2YWwsIGN1c3RvbWVyX2xpbWl0OworCisJLyogSW5kZXggMCAmIDE9IGxlZ2FjeSBPRkRNLCAyLTU9SFRfTUNTIHJhdGUgKi8KKwlzd2l0Y2ggKHJ0bGVmdXNlLT5lZXByb21fcmVndWxhdG9yeSkgeworCWNhc2UgMDoKKwkJLyogUmVhbHRlayBiZXR0ZXIgcGVyZm9ybWFuY2UgaW5jcmVhc2UgcG93ZXIgZGlmZgorCQkgKiBkZWZpbmVkIGJ5IFJlYWx0ZWsgZm9yIGxhcmdlIHBvd2VyICovCisJCWNobmxncm91cCA9IDA7CisKKwkJd3JpdGV2YWwgPSBydGxwaHktPm1jc190eHB3cmxldmVsX29yaWdvZmZzZXQKKwkJCQlbY2hubGdyb3VwXVtpbmRleF0gKworCQkJCSgoaW5kZXggPCAyKSA/IHB3cmJhc2UwIDogcHdyYmFzZTEpOworCisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfUE9XRVIsIERCR19MT1VELAorCQkJICgiUlRLIGJldHRlciBwZXJmb3JtYW5jZSwgIgorCQkJICJ3cml0ZXZhbCA9IDB4JXhcbiIsIHdyaXRldmFsKSk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJLyogUmVhbHRlayByZWd1bGF0b3J5IGluY3JlYXNlIHBvd2VyIGRpZmYgZGVmaW5lZAorCQkgKiBieSBSZWFsdGVrIGZvciByZWd1bGF0b3J5ICovCisJCWlmIChydGxwaHktPmN1cnJlbnRfY2hhbl9idyA9PSBIVF9DSEFOTkVMX1dJRFRIXzIwXzQwKSB7CisJCQl3cml0ZXZhbCA9ICgoaW5kZXggPCAyKSA/IHB3cmJhc2UwIDogcHdyYmFzZTEpOworCisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwKKwkJCQkgKCJSZWFsdGVrIHJlZ3VsYXRvcnksICIKKwkJCQkgIjQwTUh6LCB3cml0ZXZhbCA9IDB4JXhcbiIsIHdyaXRldmFsKSk7CisJCX0gZWxzZSB7CisJCQlpZiAocnRscGh5LT5wd3Jncm91cF9jbnQgPT0gMSkKKwkJCQljaG5sZ3JvdXAgPSAwOworCisJCQlpZiAocnRscGh5LT5wd3Jncm91cF9jbnQgPj0gMykgeworCQkJCWlmIChjaG5sIDw9IDMpCisJCQkJCWNobmxncm91cCA9IDA7CisJCQkJZWxzZSBpZiAoY2hubCA+PSA0ICYmIGNobmwgPD0gOCkKKwkJCQkJY2hubGdyb3VwID0gMTsKKwkJCQllbHNlIGlmIChjaG5sID4gOCkKKwkJCQkJY2hubGdyb3VwID0gMjsKKwkJCQlpZiAocnRscGh5LT5wd3Jncm91cF9jbnQgPT0gNCkKKwkJCQkJY2hubGdyb3VwKys7CisJCQl9CisKKwkJCXdyaXRldmFsID0gcnRscGh5LT5tY3NfdHhwd3JsZXZlbF9vcmlnb2Zmc2V0CisJCQkJCVtjaG5sZ3JvdXBdW2luZGV4XQorCQkJCQkrICgoaW5kZXggPCAyKSA/CisJCQkJCXB3cmJhc2UwIDogcHdyYmFzZTEpOworCisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwKKwkJCQkgKCJSZWFsdGVrIHJlZ3VsYXRvcnksICIKKwkJCQkgIjIwTUh6LCB3cml0ZXZhbCA9IDB4JXhcbiIsIHdyaXRldmFsKSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAyOgorCQkvKiBCZXR0ZXIgcmVndWxhdG9yeSBkb24ndCBpbmNyZWFzZSBhbnkgcG93ZXIgZGlmZiAqLworCQl3cml0ZXZhbCA9ICgoaW5kZXggPCAyKSA/IHB3cmJhc2UwIDogcHdyYmFzZTEpOworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwKKwkJCSAoIkJldHRlciByZWd1bGF0b3J5LCAiCisJCQkgIndyaXRldmFsID0gMHgleFxuIiwgd3JpdGV2YWwpKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQkvKiBDdXN0b21lciBkZWZpbmVkIHBvd2VyIGRpZmYuIGluY3JlYXNlIHBvd2VyIGRpZmYKKwkJICBkZWZpbmVkIGJ5IGN1c3RvbWVyLiAqLworCQljaG5sZ3JvdXAgPSAwOworCisJCWlmIChydGxwaHktPmN1cnJlbnRfY2hhbl9idyA9PSBIVF9DSEFOTkVMX1dJRFRIXzIwXzQwKSB7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwKKwkJCQkoImN1c3RvbWVyJ3MgbGltaXQsIDQwTUh6ID0gMHgleFxuIiwKKwkJCQlydGxlZnVzZS0+cHdyZ3JvdXBfaHQ0MAorCQkJCVtSRjkwX1BBVEhfQV1bY2hubCAtIDFdKSk7CisJCX0gZWxzZSB7CisJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwKKwkJCQkoImN1c3RvbWVyJ3MgbGltaXQsIDIwTUh6ID0gMHgleFxuIiwKKwkJCQlydGxlZnVzZS0+cHdyZ3JvdXBfaHQyMAorCQkJCVtSRjkwX1BBVEhfQV1bY2hubCAtIDFdKSk7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQlwd3JkaWZmX2xpbWl0W2ldID0KKwkJCQkodTgpKChydGxwaHktPm1jc190eHB3cmxldmVsX29yaWdvZmZzZXQKKwkJCQlbY2hubGdyb3VwXVtpbmRleF0gJiAoMHg3ZiA8PCAoaSAqIDgpKSkKKwkJCQk+PiAoaSAqIDgpKTsKKworCQkJaWYgKHJ0bHBoeS0+Y3VycmVudF9jaGFuX2J3ID09CisJCQkgICAgSFRfQ0hBTk5FTF9XSURUSF8yMF80MCkgeworCQkJCWlmIChwd3JkaWZmX2xpbWl0W2ldID4KKwkJCQkgICAgcnRsZWZ1c2UtPnB3cmdyb3VwX2h0NDAKKwkJCQkgICAgW1JGOTBfUEFUSF9BXVtjaG5sIC0gMV0pIHsKKwkJCQkJcHdyZGlmZl9saW1pdFtpXSA9CisJCQkJCSAgcnRsZWZ1c2UtPnB3cmdyb3VwX2h0MjAKKwkJCQkJICBbUkY5MF9QQVRIX0FdW2NobmwgLSAxXTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmIChwd3JkaWZmX2xpbWl0W2ldID4KKwkJCQkgICAgcnRsZWZ1c2UtPnB3cmdyb3VwX2h0MjAKKwkJCQkgICAgW1JGOTBfUEFUSF9BXVtjaG5sIC0gMV0pIHsKKwkJCQkJcHdyZGlmZl9saW1pdFtpXSA9CisJCQkJCSAgICBydGxlZnVzZS0+cHdyZ3JvdXBfaHQyMAorCQkJCQkgICAgW1JGOTBfUEFUSF9BXVtjaG5sIC0gMV07CisJCQkJfQorCQkJfQorCQl9CisKKwkJY3VzdG9tZXJfbGltaXQgPSAocHdyZGlmZl9saW1pdFszXSA8PCAyNCkgfAorCQkJCShwd3JkaWZmX2xpbWl0WzJdIDw8IDE2KSB8CisJCQkJKHB3cmRpZmZfbGltaXRbMV0gPDwgOCkgfAorCQkJCShwd3JkaWZmX2xpbWl0WzBdKTsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX0xPVUQsCisJCQkgKCJDdXN0b21lcidzIGxpbWl0ID0gMHgleFxuIiwKKwkJCSBjdXN0b21lcl9saW1pdCkpOworCisJCXdyaXRldmFsID0gY3VzdG9tZXJfbGltaXQgKyAoKGluZGV4IDwgMikgPworCQkJCQkgICAgIHB3cmJhc2UwIDogcHdyYmFzZTEpOworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwKKwkJCSAoIkN1c3RvbWVyLCB3cml0ZXZhbCA9ICIKKwkJCSAiMHgleFxuIiwgd3JpdGV2YWwpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY2hubGdyb3VwID0gMDsKKwkJd3JpdGV2YWwgPSBydGxwaHktPm1jc190eHB3cmxldmVsX29yaWdvZmZzZXRbY2hubGdyb3VwXVtpbmRleF0gKworCQkJCSgoaW5kZXggPCAyKSA/IHB3cmJhc2UwIDogcHdyYmFzZTEpOworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwKKwkJCSAoIlJUSyBiZXR0ZXIgcGVyZm9ybWFuY2UsICIKKwkJCSAid3JpdGV2YWwgPSAweCV4XG4iLCB3cml0ZXZhbCkpOworCQlicmVhazsKKwl9CisKKwlpZiAocnRscHJpdi0+ZG0uZHluYW1pY190eGhpZ2hwb3dlcl9sdmwgPT0gVFhfSElHSF9QV1JfTEVWRUxfTEVWRUwxKQorCQl3cml0ZXZhbCA9IDB4MTAxMDEwMTA7CisJZWxzZSBpZiAocnRscHJpdi0+ZG0uZHluYW1pY190eGhpZ2hwb3dlcl9sdmwgPT0KKwkJIFRYX0hJR0hfUFdSX0xFVkVMX0xFVkVMMikKKwkJd3JpdGV2YWwgPSAweDA7CisKKwkqcF9vdXR3cml0ZV92YWwgPSB3cml0ZXZhbDsKKworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzX3dyaXRlX29mZG1fcG93ZXJyZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCXU4IGluZGV4LCB1MzIgdmFsKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisJdTE2IHJlZ29mZnNldFs2XSA9IHsweGUwMCwgMHhlMDQsIDB4ZTEwLCAweGUxNCwgMHhlMTgsIDB4ZTFjfTsKKwl1OCBpLCByZmFfcHdyWzRdOworCXU4IHJmYV9sb3dlcl9ib3VuZCA9IDAsIHJmYV91cHBlcl9ib3VuZCA9IDAsIHJmX3B3cl9kaWZmID0gMDsKKwl1MzIgd3JpdGV2YWwgPSB2YWw7CisKKwkvKiBJZiBwYXRoIEEgYW5kIFBhdGggQiBjb2V4aXN0LCB3ZSBtdXN0IGxpbWl0IFBhdGggQSB0eCBwb3dlci4KKwkgKiBQcm90ZWN0IFBhdGggQiBwd3Igb3ZlciBvciB1bmRlciBmbG93LiBXZSBuZWVkIHRvIGNhbGN1bGF0ZQorCSAqIHVwcGVyIGFuZCBsb3dlciBib3VuZCBvZiBwYXRoIEEgdHggcG93ZXIuICovCisJaWYgKHJ0bHBoeS0+cmZfdHlwZSA9PSBSRl8yVDJSKSB7CisJCXJmX3B3cl9kaWZmID0gcnRsZWZ1c2UtPmFudGVubmFfdHhwd2RpZmZbMF07CisKKwkJLyogRGlmZj0tOH4tMSAqLworCQlpZiAocmZfcHdyX2RpZmYgPj0gOCkgeworCQkJLyogUHJldmVudCB1bmRlcmZsb3chISAqLworCQkJcmZhX2xvd2VyX2JvdW5kID0gMHgxMCAtIHJmX3B3cl9kaWZmOworCQkvKiBpZiAocmZfcHdyX2RpZmYgPj0gMCkgRGlmZiA9IDAtNyAqLworCQl9IGVsc2UgeworCQkJcmZhX3VwcGVyX2JvdW5kID0gUkY2MDUyX01BWF9UWF9QV1IgLSByZl9wd3JfZGlmZjsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJcmZhX3B3cltpXSA9ICh1OCkoKHdyaXRldmFsICYgKDB4N2YgPDwgKGkgKiA4KSkpID4+IChpICogOCkpOworCQlpZiAocmZhX3B3cltpXSAgPiBSRjYwNTJfTUFYX1RYX1BXUikKKwkJCXJmYV9wd3JbaV0gID0gUkY2MDUyX01BWF9UWF9QV1I7CisKKwkJLyogSWYgcGF0aCBBIGFuZCBQYXRoIEIgY29leGlzdCwgd2UgbXVzdCBsaW1pdCBQYXRoIEEgdHggcG93ZXIuCisJCSAqIFByb3RlY3QgUGF0aCBCIHB3ciBvdmVyIG9yIHVuZGVyIGZsb3cuIFdlIG5lZWQgdG8gY2FsY3VsYXRlCisJCSAqIHVwcGVyIGFuZCBsb3dlciBib3VuZCBvZiBwYXRoIEEgdHggcG93ZXIuICovCisJCWlmIChydGxwaHktPnJmX3R5cGUgPT0gUkZfMlQyUikgeworCQkJLyogRGlmZj0tOH4tMSAqLworCQkJaWYgKHJmX3B3cl9kaWZmID49IDgpIHsKKwkJCQkvKiBQcmV2ZW50IHVuZGVyZmxvdyEhICovCisJCQkJaWYgKHJmYV9wd3JbaV0gPCByZmFfbG93ZXJfYm91bmQpCisJCQkJCXJmYV9wd3JbaV0gPSByZmFfbG93ZXJfYm91bmQ7CisJCQkvKiBEaWZmID0gMC03ICovCisJCQl9IGVsc2UgaWYgKHJmX3B3cl9kaWZmID49IDEpIHsKKwkJCQkvKiBQcmV2ZW50IG92ZXJmbG93ICovCisJCQkJaWYgKHJmYV9wd3JbaV0gPiByZmFfdXBwZXJfYm91bmQpCisJCQkJCXJmYV9wd3JbaV0gPSByZmFfdXBwZXJfYm91bmQ7CisJCQl9CisJCX0KKworCX0KKworCXdyaXRldmFsID0gKHJmYV9wd3JbM10gPDwgMjQpIHwgKHJmYV9wd3JbMl0gPDwgMTYpIHwgKHJmYV9wd3JbMV0gPDwgOCkgfAorCQkJCXJmYV9wd3JbMF07CisKKwlydGxfc2V0X2JicmVnKGh3LCByZWdvZmZzZXRbaW5kZXhdLCAweDdmN2Y3ZjdmLCB3cml0ZXZhbCk7Cit9CisKK3ZvaWQgcnRsOTJzX3BoeV9yZjYwNTJfc2V0X29mZG10eHBvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICB1OCAqcF9wd3JsZXZlbCwgdTggY2hubCkKK3sKKwl1MzIgd3JpdGV2YWwsIHB3cmJhc2UwLCBwd3JiYXNlMTsKKwl1OCBpbmRleCA9IDA7CisJdTggZmluYWxwd3JfaWR4WzRdOworCisJX3J0bDkyc19nZXRfcG93ZXJiYXNlKGh3LCBwX3B3cmxldmVsLCBjaG5sLCAmcHdyYmFzZTAsICZwd3JiYXNlMSwKKwkJCSZmaW5hbHB3cl9pZHhbMF0pOworCV9ydGw5MnNfc2V0X2FudGVubmFkaWZmKGh3LCAmZmluYWxwd3JfaWR4WzBdKTsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IDY7IGluZGV4KyspIHsKKwkJX3J0bDkyc19nZXRfdHhwb3dlcl93cml0ZXZhbF9ieXJlZ3VsYXRvcnkoaHcsIGNobmwsIGluZGV4LAorCQkJCXB3cmJhc2UwLCBwd3JiYXNlMSwgJndyaXRldmFsKTsKKworCQlfcnRsOTJzX3dyaXRlX29mZG1fcG93ZXJyZWcoaHcsIGluZGV4LCB3cml0ZXZhbCk7CisJfQorfQorCit2b2lkIHJ0bDkyc19waHlfcmY2MDUyX3NldF9jY2t0eHBvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBwd3JsZXZlbCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX2VmdXNlICpydGxlZnVzZSA9IHJ0bF9lZnVzZShydGxfcHJpdihodykpOworCXUzMiB0eGFnYyA9IDA7CisJYm9vbCBkb250X2luY19jY2tfb3JfdHVyYm9zY2Fub2ZmID0gZmFsc2U7CisKKwlpZiAoKChydGxlZnVzZS0+ZWVwcm9tX3ZlcnNpb24gPj0gMikgJiYKKwkgICAgICAocnRsZWZ1c2UtPnR4cHdyX3NhZmV0eWZsYWcgPT0gMSkpIHx8CisJICAgICAgKChydGxlZnVzZS0+ZWVwcm9tX3ZlcnNpb24gPj0gMikgJiYKKwkgICAgICAocnRsZWZ1c2UtPmVlcHJvbV9yZWd1bGF0b3J5ICE9IDApKSkKKwkJZG9udF9pbmNfY2NrX29yX3R1cmJvc2Nhbm9mZiA9IHRydWU7CisKKwlpZiAobWFjLT5hY3Rfc2Nhbm5pbmcgPT0gdHJ1ZSkgeworCQl0eGFnYyA9IDB4M2Y7CisJCWlmIChkb250X2luY19jY2tfb3JfdHVyYm9zY2Fub2ZmKQorCQkJdHhhZ2MgPSBwd3JsZXZlbDsKKwl9IGVsc2UgeworCQl0eGFnYyA9IHB3cmxldmVsOworCisJCWlmIChydGxwcml2LT5kbS5keW5hbWljX3R4aGlnaHBvd2VyX2x2bCA9PQorCQkgICAgVFhfSElHSF9QV1JfTEVWRUxfTEVWRUwxKQorCQkJdHhhZ2MgPSAweDEwOworCQllbHNlIGlmIChydGxwcml2LT5kbS5keW5hbWljX3R4aGlnaHBvd2VyX2x2bCA9PQorCQkJVFhfSElHSF9QV1JfTEVWRUxfTEVWRUwyKQorCQkJdHhhZ2MgPSAweDA7CisJfQorCisJaWYgKHR4YWdjID4gUkY2MDUyX01BWF9UWF9QV1IpCisJCXR4YWdjID0gUkY2MDUyX01BWF9UWF9QV1I7CisKKwlydGxfc2V0X2JicmVnKGh3LCBSVFhBR0NfQ0NLX01DUzMyLCBCVFhfQUdDUkFURUNDSywgdHhhZ2MpOworCit9CisKK2Jvb2wgcnRsOTJzX3BoeV9yZjYwNTJfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJihydGxwcml2LT5waHkpOworCXUzMiB1NHJlZ192YWwgPSAwOworCXU4IHJmcGF0aDsKKwlib29sIHJ0c3RhdHVzID0gdHJ1ZTsKKwlzdHJ1Y3QgYmJfcmVnX2RlZiAqcHBoeXJlZzsKKworCS8qIEluaXRpYWxpemUgUkYgKi8KKwlmb3IgKHJmcGF0aCA9IDA7IHJmcGF0aCA8IHJ0bHBoeS0+bnVtX3RvdGFsX3JmcGF0aDsgcmZwYXRoKyspIHsKKworCQlwcGh5cmVnID0gJnJ0bHBoeS0+cGh5cmVnX2RlZltyZnBhdGhdOworCisJCS8qIFN0b3JlIG9yaWdpbmFsIFJGRU5WIGNvbnRyb2wgdHlwZSAqLworCQlzd2l0Y2ggKHJmcGF0aCkgeworCQljYXNlIFJGOTBfUEFUSF9BOgorCQljYXNlIFJGOTBfUEFUSF9DOgorCQkJdTRyZWdfdmFsID0gcnRsOTJzX3BoeV9xdWVyeV9iYl9yZWcoaHcsCisJCQkJCQkJICAgIHBwaHlyZWctPnJmaW50ZnMsCisJCQkJCQkJICAgIEJSRlNJX1JGRU5WKTsKKwkJCWJyZWFrOworCQljYXNlIFJGOTBfUEFUSF9COgorCQljYXNlIFJGOTBfUEFUSF9EOgorCQkJdTRyZWdfdmFsID0gcnRsOTJzX3BoeV9xdWVyeV9iYl9yZWcoaHcsCisJCQkJCQkJICAgIHBwaHlyZWctPnJmaW50ZnMsCisJCQkJCQkJICAgIEJSRlNJX1JGRU5WIDw8IDE2KTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogU2V0IFJGX0VOViBlbmFibGUgKi8KKwkJcnRsOTJzX3BoeV9zZXRfYmJfcmVnKGh3LCBwcGh5cmVnLT5yZmludGZlLAorCQkJCSAgICAgIEJSRlNJX1JGRU5WIDw8IDE2LCAweDEpOworCisJCS8qIFNldCBSRl9FTlYgb3V0cHV0IGhpZ2ggKi8KKwkJcnRsOTJzX3BoeV9zZXRfYmJfcmVnKGh3LCBwcGh5cmVnLT5yZmludGZvLCBCUkZTSV9SRkVOViwgMHgxKTsKKworCQkvKiBTZXQgYml0IG51bWJlciBvZiBBZGRyZXNzIGFuZCBEYXRhIGZvciBSRiByZWdpc3RlciAqLworCQlydGw5MnNfcGh5X3NldF9iYl9yZWcoaHcsIHBwaHlyZWctPnJmaHNzaV9wYXJhMiwKKwkJCQlCM1dJUkVfQUREUkVTU0xFTkdUSCwgMHgwKTsKKwkJcnRsOTJzX3BoeV9zZXRfYmJfcmVnKGh3LCBwcGh5cmVnLT5yZmhzc2lfcGFyYTIsCisJCQkJQjNXSVJFX0RBVEFMRU5HVEgsIDB4MCk7CisKKwkJLyogSW5pdGlhbGl6ZSBSRiBmb20gY29ubmZpZ3VyYXRpb24gZmlsZSAqLworCQlzd2l0Y2ggKHJmcGF0aCkgeworCQljYXNlIFJGOTBfUEFUSF9BOgorCQkJcnRzdGF0dXMgPSBydGw5MnNfcGh5X2NvbmZpZ19yZihodywKKwkJCQkJCShlbnVtIHJhZGlvX3BhdGgpcmZwYXRoKTsKKwkJCWJyZWFrOworCQljYXNlIFJGOTBfUEFUSF9COgorCQkJcnRzdGF0dXMgPSBydGw5MnNfcGh5X2NvbmZpZ19yZihodywKKwkJCQkJCShlbnVtIHJhZGlvX3BhdGgpcmZwYXRoKTsKKwkJCWJyZWFrOworCQljYXNlIFJGOTBfUEFUSF9DOgorCQkJYnJlYWs7CisJCWNhc2UgUkY5MF9QQVRIX0Q6CisJCQlicmVhazsKKwkJfQorCisJCS8qIFJlc3RvcmUgUkZFTlYgY29udHJvbCB0eXBlICovCisJCXN3aXRjaCAocmZwYXRoKSB7CisJCWNhc2UgUkY5MF9QQVRIX0E6CisJCWNhc2UgUkY5MF9QQVRIX0M6CisJCQlydGw5MnNfcGh5X3NldF9iYl9yZWcoaHcsIHBwaHlyZWctPnJmaW50ZnMsIEJSRlNJX1JGRU5WLAorCQkJCQkgICAgICB1NHJlZ192YWwpOworCQkJYnJlYWs7CisJCWNhc2UgUkY5MF9QQVRIX0I6CisJCWNhc2UgUkY5MF9QQVRIX0Q6CisJCQlydGw5MnNfcGh5X3NldF9iYl9yZWcoaHcsIHBwaHlyZWctPnJmaW50ZnMsCisJCQkJCSAgICAgIEJSRlNJX1JGRU5WIDw8IDE2LAorCQkJCQkgICAgICB1NHJlZ192YWwpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAocnRzdGF0dXMgIT0gdHJ1ZSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJSYWRpb1slZF0gRmFpbCEhIiwgcmZwYXRoKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisJfQorCisJcmV0dXJuIHJ0c3RhdHVzOworCitmYWlsOgorCXJldHVybiBydHN0YXR1czsKK30KKwordm9pZCBydGw5MnNfcGh5X3JmNjA1Ml9zZXRfYmFuZHdpZHRoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBiYW5kd2lkdGgpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisKKwlzd2l0Y2ggKGJhbmR3aWR0aCkgeworCWNhc2UgSFRfQ0hBTk5FTF9XSURUSF8yMDoKKwkJcnRscGh5LT5yZnJlZ19jaG5sdmFsWzBdID0gKChydGxwaHktPnJmcmVnX2Nobmx2YWxbMF0gJgorCQkJCQkgICAweGZmZmZmM2ZmKSB8IDB4MDQwMCk7CisJCXJ0bF9zZXRfcmZyZWcoaHcsIFJGOTBfUEFUSF9BLCBSRl9DSE5MQlcsIFJGUkVHX09GRlNFVF9NQVNLLAorCQkJCQlydGxwaHktPnJmcmVnX2Nobmx2YWxbMF0pOworCQlicmVhazsKKwljYXNlIEhUX0NIQU5ORUxfV0lEVEhfMjBfNDA6CisJCXJ0bHBoeS0+cmZyZWdfY2hubHZhbFswXSA9ICgocnRscGh5LT5yZnJlZ19jaG5sdmFsWzBdICYKKwkJCQkJICAgIDB4ZmZmZmYzZmYpKTsKKwkJcnRsX3NldF9yZnJlZyhodywgUkY5MF9QQVRIX0EsIFJGX0NITkxCVywgUkZSRUdfT0ZGU0VUX01BU0ssCisJCQkJCXJ0bHBoeS0+cmZyZWdfY2hubHZhbFswXSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkgKCJ1bmtub3duIGJhbmR3aWR0aDogJSNYXG4iLAorCQkJIGJhbmR3aWR0aCkpOworCQlicmVhazsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9yZi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvcmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODQzYmFhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvcmYuaApAQCAtMCwwICsxLDQzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0KGMpIDIwMDktMjAxMCAgUmVhbHRlayBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKiBSZWFsdGVrIENvcnBvcmF0aW9uLCBOby4gMiwgSW5ub3ZhdGlvbiBSb2FkIElJLCBIc2luY2h1IFNjaWVuY2UgUGFyaywKKyAqIEhzaW5jaHUgMzAwLCBUYWl3YW4uCisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19JTkNfUlRMOTJTX1JGX0gKKyNkZWZpbmUgX19JTkNfUlRMOTJTX1JGX0gKKworI2RlZmluZQlSRjYwNTJfTUFYX1RYX1BXUgkweDNGCisKK3ZvaWQgcnRsOTJzX3BoeV9yZjYwNTJfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgIHU4IGJhbmR3aWR0aCk7Citib29sIHJ0bDkyc19waHlfcmY2MDUyX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykgOwordm9pZCBydGw5MnNfcGh5X3JmNjA1Ml9zZXRfY2NrdHhwb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICB1OCBwb3dlcmxldmVsKTsKK3ZvaWQgcnRsOTJzX3BoeV9yZjYwNTJfc2V0X29mZG10eHBvd2VyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICB1OCAqcF9wd3JsZXZlbCwgdTggY2hubCk7CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9zdy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2Uvc3cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzZjYjFkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2Uvc3cuYwpAQCAtMCwwICsxLDQyMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlICIuLi93aWZpLmgiCisjaW5jbHVkZSAiLi4vY29yZS5oIgorI2luY2x1ZGUgIi4uL3BjaS5oIgorI2luY2x1ZGUgInJlZy5oIgorI2luY2x1ZGUgImRlZi5oIgorI2luY2x1ZGUgInBoeS5oIgorI2luY2x1ZGUgImRtLmgiCisjaW5jbHVkZSAiZncuaCIKKyNpbmNsdWRlICJody5oIgorI2luY2x1ZGUgInN3LmgiCisjaW5jbHVkZSAidHJ4LmgiCisjaW5jbHVkZSAibGVkLmgiCisKK3N0YXRpYyB2b2lkIHJ0bDkyc19pbml0X2FzcG1fdmFycyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCisJLypjbG9zZSBBU1BNIGZvciBBTUQgZGVmYXVsdGx5ICovCisJcnRscGNpLT5jb25zdF9hbWRwY2lfYXNwbSA9IDA7CisKKwkvKgorCSAqIEFTUE0gUFMgbW9kZS4KKwkgKiAwIC0gRGlzYWJsZSBBU1BNLAorCSAqIDEgLSBFbmFibGUgQVNQTSB3aXRob3V0IENsb2NrIFJlcSwKKwkgKiAyIC0gRW5hYmxlIEFTUE0gd2l0aCBDbG9jayBSZXEsCisJICogMyAtIEFsd3lhcyBFbmFibGUgQVNQTSB3aXRoIENsb2NrIFJlcSwKKwkgKiA0IC0gQWx3YXlzIEVuYWJsZSBBU1BNIHdpdGhvdXQgQ2xvY2sgUmVxLgorCSAqIHNldCBkZWZ1bHQgdG8gUlRMODE5MkNFOjMgUlRMODE5MkU6MgorCSAqICovCisJcnRscGNpLT5jb25zdF9wY2lfYXNwbSA9IDI7CisKKwkvKlNldHRpbmcgZm9yIFBDSS1FIGRldmljZSAqLworCXJ0bHBjaS0+Y29uc3RfZGV2aWNlcGNpX2FzcG1fc2V0dGluZyA9IDB4MDM7CisKKwkvKlNldHRpbmcgZm9yIFBDSS1FIGJyaWRnZSAqLworCXJ0bHBjaS0+Y29uc3RfaG9zdHBjaV9hc3BtX3NldHRpbmcgPSAweDAyOworCisJLyoKKwkgKiBJbiBIdy9TdyBSYWRpbyBPZmYgc2l0dWF0aW9uLgorCSAqIDAgLSBEZWZhdWx0LAorCSAqIDEgLSBGcm9tIEFTUE0gc2V0dGluZyB3aXRob3V0IGxvdyBNYWMgUHdyLAorCSAqIDIgLSBGcm9tIEFTUE0gc2V0dGluZyB3aXRoIGxvdyBNYWMgUHdyLAorCSAqIDMgLSBCdXMgRDMKKwkgKiBzZXQgZGVmYXVsdCB0byBSVEw4MTkyQ0U6MCBSVEw4MTkyU0U6MgorCSAqLworCXJ0bHBjaS0+Y29uc3RfaHdzd19yZm9mZl9kMyA9IDI7CisKKwkvKgorCSAqIFRoaXMgc2V0dGluZyB3b3JrcyBmb3IgdGhvc2UgZGV2aWNlIHdpdGgKKwkgKiBiYWNrZG9vciBBU1BNIHNldHRpbmcgc3VjaCBhcyBFUEhZIHNldHRpbmcuCisJICogMCAtIE5vdCBzdXBwb3J0IEFTUE0sCisJICogMSAtIFN1cHBvcnQgQVNQTSwKKwkgKiAyIC0gQWNjb3JkaW5nIHRvIGNoaXBzZXQuCisJICovCisJcnRscGNpLT5jb25zdF9zdXBwb3J0X3BjaWFzcG0gPSAyOworfQorCitzdGF0aWMgaW50IHJ0bDkyc19pbml0X3N3X3ZhcnMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGNpICpydGxwY2kgPSBydGxfcGNpZGV2KHJ0bF9wY2lwcml2KGh3KSk7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZTsKKwlzdHJ1Y3QgcnRfZmlybXdhcmUgKnBmaXJtd2FyZSA9IE5VTEw7CisJaW50IGVyciA9IDA7CisJdTE2IGVhcmx5cnh0aHJlc2hvbGQgPSA3OworCisJcnRscHJpdi0+ZG0uZG1faW5pdGlhbGdhaW5fZW5hYmxlID0gMTsKKwlydGxwcml2LT5kbS5kbV9mbGFnID0gMDsKKwlydGxwcml2LT5kbS5kaXNhYmxlX2ZyYW1lYnVyc3RpbmcgPSAwOworCXJ0bHByaXYtPmRtLnRoZXJtYWx2YWx1ZSA9IDA7CisJcnRscHJpdi0+ZG0udXNlcmFtYXNrID0gdHJ1ZTsKKworCS8qIGNvbXBhdGlibGUgNUcgYmFuZCA5MXNlIGp1c3QgMi40RyBiYW5kICYgc21zcCAqLworCXJ0bHByaXYtPnJ0bGhhbC5jdXJyZW50X2JhbmR0eXBlID0gQkFORF9PTl8yXzRHOworCXJ0bHByaXYtPnJ0bGhhbC5iYW5kc2V0ID0gQkFORF9PTl8yXzRHOworCXJ0bHByaXYtPnJ0bGhhbC5tYWNwaHltb2RlID0gU0lOR0xFTUFDX1NJTkdMRVBIWTsKKworCXJ0bHBjaS0+dHJhbnNtaXRfY29uZmlnID0gMDsKKworCXJ0bHBjaS0+cmVjZWl2ZV9jb25maWcgPQorCQkJUkNSX0FQUEZDUyB8CisJCQlSQ1JfQVBXUk1HVCB8CisJCQkvKlJDUl9BREQzIHwqLworCQkJUkNSX0FNRgl8CisJCQlSQ1JfQURGIHwKKwkJCVJDUl9BUFBfTUlDIHwKKwkJCVJDUl9BUFBfSUNWIHwKKwkJCVJDUl9BSUNWIHwKKwkJCS8qIEFjY2VwdCBJQ1YgZXJyb3IsIENSQzMyIEVycm9yICovCisJCQlSQ1JfQUNSQzMyIHwKKwkJCVJDUl9BQiB8CisJCQkvKiBBY2NlcHQgQnJvYWRjYXN0LCBNdWx0aWNhc3QgKi8KKwkJCVJDUl9BTQl8CisJCQkvKiBBY2NlcHQgUGh5c2ljYWwgbWF0Y2ggKi8KKwkJCVJDUl9BUE0gfAorCQkJLyogQWNjZXB0IERlc3RpbmF0aW9uIEFkZHJlc3MgcGFja2V0cyAqLworCQkJLypSQ1JfQUFQIHwqLworCQkJUkNSX0FQUF9QSFlTVF9TVEFGRiB8CisJCQkvKiBBY2NlcHQgUEhZIHN0YXR1cyAqLworCQkJUkNSX0FQUF9QSFlTVF9SWEZGIHwKKwkJCShlYXJseXJ4dGhyZXNob2xkIDw8IFJDUl9GSUZPX09GRlNFVCk7CisKKwlydGxwY2ktPmlycV9tYXNrWzBdID0gKHUzMikKKwkJCShJTVJfUk9LIHwKKwkJCUlNUl9WT0RPSyB8CisJCQlJTVJfVklET0sgfAorCQkJSU1SX0JFRE9LIHwKKwkJCUlNUl9CS0RPSyB8CisJCQlJTVJfSENDQURPSyB8CisJCQlJTVJfTUdOVERPSyB8CisJCQlJTVJfQ09NRE9LIHwKKwkJCUlNUl9ISUdIRE9LIHwKKwkJCUlNUl9CRE9LIHwKKwkJCUlNUl9SWENNRE9LIHwKKwkJCS8qSU1SX1RJTUVPVVQwIHwqLworCQkJSU1SX1JEVSB8CisJCQlJTVJfUlhGT1ZXCXwKKwkJCUlNUl9CQ05JTlQKKwkJCS8qfCBJTVJfVFhGT1ZXKi8KKwkJCS8qfCBJTVJfVEJET0sgfAorCQkJSU1SX1RCREVSKi8pOworCisJcnRscGNpLT5pcnFfbWFza1sxXSA9ICh1MzIpIDA7CisKKwlydGxwY2ktPnNob3J0cmV0cnlfbGltaXQgPSAweDMwOworCXJ0bHBjaS0+bG9uZ3JldHJ5X2xpbWl0ID0gMHgzMDsKKworCXJ0bHBjaS0+Zmlyc3RfaW5pdCA9IHRydWU7CisKKwkvKiBmb3IgTFBTICYgSVBTICovCisJcnRscHJpdi0+cHNjLmluYWN0aXZlcHMgPSBydGxwcml2LT5jZmctPm1vZF9wYXJhbXMtPmluYWN0aXZlcHM7CisJcnRscHJpdi0+cHNjLnN3Y3RybF9scHMgPSBydGxwcml2LT5jZmctPm1vZF9wYXJhbXMtPnN3Y3RybF9scHM7CisJcnRscHJpdi0+cHNjLmZ3Y3RybF9scHMgPSBydGxwcml2LT5jZmctPm1vZF9wYXJhbXMtPmZ3Y3RybF9scHM7CisJcnRscHJpdi0+cHNjLnJlZ19md2N0cmxfbHBzID0gMzsKKwlydGxwcml2LT5wc2MucmVnX21heF9scHNfYXdha2VpbnR2bCA9IDU7CisJLyogZm9yIEFTUE0sIHlvdSBjYW4gY2xvc2UgYXNwbSB0aHJvdWdoCisJICogc2V0IGNvbnN0X3N1cHBvcnRfcGNpYXNwbSA9IDAgKi8KKwlydGw5MnNfaW5pdF9hc3BtX3ZhcnMoaHcpOworCisJaWYgKHJ0bHByaXYtPnBzYy5yZWdfZndjdHJsX2xwcyA9PSAxKQorCQlydGxwcml2LT5wc2MuZndjdHJsX3BzbW9kZSA9IEZXX1BTX01JTl9NT0RFOworCWVsc2UgaWYgKHJ0bHByaXYtPnBzYy5yZWdfZndjdHJsX2xwcyA9PSAyKQorCQlydGxwcml2LT5wc2MuZndjdHJsX3BzbW9kZSA9IEZXX1BTX01BWF9NT0RFOworCWVsc2UgaWYgKHJ0bHByaXYtPnBzYy5yZWdfZndjdHJsX2xwcyA9PSAzKQorCQlydGxwcml2LT5wc2MuZndjdHJsX3BzbW9kZSA9IEZXX1BTX0RUSU1fTU9ERTsKKworCS8qIGZvciBmaXJtd2FyZSBidWYgKi8KKwlydGxwcml2LT5ydGxoYWwucGZpcm13YXJlID0gdnphbGxvYyhzaXplb2Yoc3RydWN0IHJ0X2Zpcm13YXJlKSk7CisJaWYgKCFydGxwcml2LT5ydGxoYWwucGZpcm13YXJlKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfRU1FUkcsCisJCQkgKCJDYW4ndCBhbGxvYyBidWZmZXIgZm9yIGZ3LlxuIikpOworCQlyZXR1cm4gMTsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJydGw4MTkyc2U6IERyaXZlciBmb3IgUmVhbHRlayBSVEw4MTkyU0UvUlRMODE5MVNFXG4iCisJICAgICAgICIgICAgICAgICAgIExvYWRpbmcgZmlybXdhcmUgJXNcbiIsIHJ0bHByaXYtPmNmZy0+ZndfbmFtZSk7CisJLyogcmVxdWVzdCBmdyAqLworCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmZpcm13YXJlLCBydGxwcml2LT5jZmctPmZ3X25hbWUsCisJCQlydGxwcml2LT5pby5kZXYpOworCWlmIChlcnIpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoIkZhaWxlZCB0byByZXF1ZXN0IGZpcm13YXJlIVxuIikpOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKGZpcm13YXJlLT5zaXplID4gc2l6ZW9mKHN0cnVjdCBydF9maXJtd2FyZSkpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAoIkZpcm13YXJlIGlzIHRvbyBiaWchXG4iKSk7CisJCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOworCQlyZXR1cm4gMTsKKwl9CisKKwlwZmlybXdhcmUgPSAoc3RydWN0IHJ0X2Zpcm13YXJlICopcnRscHJpdi0+cnRsaGFsLnBmaXJtd2FyZTsKKwltZW1jcHkocGZpcm13YXJlLT5zel9md190bXBidWZmZXIsIGZpcm13YXJlLT5kYXRhLCBmaXJtd2FyZS0+c2l6ZSk7CisJcGZpcm13YXJlLT5zel9md190bXBidWZmZXJsZW4gPSBmaXJtd2FyZS0+c2l6ZTsKKwlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDkyc19kZWluaXRfc3dfdmFycyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisKKwlpZiAocnRscHJpdi0+cnRsaGFsLnBmaXJtd2FyZSkgeworCQl2ZnJlZShydGxwcml2LT5ydGxoYWwucGZpcm13YXJlKTsKKwkJcnRscHJpdi0+cnRsaGFsLnBmaXJtd2FyZSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHJ0bF9oYWxfb3BzIHJ0bDgxOTJzZV9oYWxfb3BzID0geworCS5pbml0X3N3X3ZhcnMgPSBydGw5MnNfaW5pdF9zd192YXJzLAorCS5kZWluaXRfc3dfdmFycyA9IHJ0bDkyc19kZWluaXRfc3dfdmFycywKKwkucmVhZF9lZXByb21faW5mbyA9IHJ0bDkyc2VfcmVhZF9lZXByb21faW5mbywKKwkuaW50ZXJydXB0X3JlY29nbml6ZWQgPSBydGw5MnNlX2ludGVycnVwdF9yZWNvZ25pemVkLAorCS5od19pbml0ID0gcnRsOTJzZV9od19pbml0LAorCS5od19kaXNhYmxlID0gcnRsOTJzZV9jYXJkX2Rpc2FibGUsCisJLmh3X3N1c3BlbmQgPSBydGw5MnNlX3N1c3BlbmQsCisJLmh3X3Jlc3VtZSA9IHJ0bDkyc2VfcmVzdW1lLAorCS5lbmFibGVfaW50ZXJydXB0ID0gcnRsOTJzZV9lbmFibGVfaW50ZXJydXB0LAorCS5kaXNhYmxlX2ludGVycnVwdCA9IHJ0bDkyc2VfZGlzYWJsZV9pbnRlcnJ1cHQsCisJLnNldF9uZXR3b3JrX3R5cGUgPSBydGw5MnNlX3NldF9uZXR3b3JrX3R5cGUsCisJLnNldF9jaGtfYnNzaWQgPSBydGw5MnNlX3NldF9jaGVja19ic3NpZCwKKwkuc2V0X3FvcyA9IHJ0bDkyc2Vfc2V0X3FvcywKKwkuc2V0X2Jjbl9yZWcgPSBydGw5MnNlX3NldF9iZWFjb25fcmVsYXRlZF9yZWdpc3RlcnMsCisJLnNldF9iY25faW50diA9IHJ0bDkyc2Vfc2V0X2JlYWNvbl9pbnRlcnZhbCwKKwkudXBkYXRlX2ludGVycnVwdF9tYXNrID0gcnRsOTJzZV91cGRhdGVfaW50ZXJydXB0X21hc2ssCisJLmdldF9od19yZWcgPSBydGw5MnNlX2dldF9od19yZWcsCisJLnNldF9od19yZWcgPSBydGw5MnNlX3NldF9od19yZWcsCisJLnVwZGF0ZV9yYXRlX3RibCA9IHJ0bDkyc2VfdXBkYXRlX2hhbF9yYXRlX3RibCwKKwkuZmlsbF90eF9kZXNjID0gcnRsOTJzZV90eF9maWxsX2Rlc2MsCisJLmZpbGxfdHhfY21kZGVzYyA9IHJ0bDkyc2VfdHhfZmlsbF9jbWRkZXNjLAorCS5xdWVyeV9yeF9kZXNjID0gcnRsOTJzZV9yeF9xdWVyeV9kZXNjLAorCS5zZXRfY2hhbm5lbF9hY2Nlc3MgPSBydGw5MnNlX3VwZGF0ZV9jaGFubmVsX2FjY2Vzc19zZXR0aW5nLAorCS5yYWRpb19vbm9mZl9jaGVja2luZyA9IHJ0bDkyc2VfZ3Bpb19yYWRpb19vbl9vZmZfY2hlY2tpbmcsCisJLnNldF9id19tb2RlID0gcnRsOTJzX3BoeV9zZXRfYndfbW9kZSwKKwkuc3dpdGNoX2NoYW5uZWwgPSBydGw5MnNfcGh5X3N3X2NobmwsCisJLmRtX3dhdGNoZG9nID0gcnRsOTJzX2RtX3dhdGNoZG9nLAorCS5zY2FuX29wZXJhdGlvbl9iYWNrdXAgPSBydGw5MnNfcGh5X3NjYW5fb3BlcmF0aW9uX2JhY2t1cCwKKwkuc2V0X3JmX3Bvd2VyX3N0YXRlID0gcnRsOTJzX3BoeV9zZXRfcmZfcG93ZXJfc3RhdGUsCisJLmxlZF9jb250cm9sID0gcnRsOTJzZV9sZWRfY29udHJvbCwKKwkuc2V0X2Rlc2MgPSBydGw5MnNlX3NldF9kZXNjLAorCS5nZXRfZGVzYyA9IHJ0bDkyc2VfZ2V0X2Rlc2MsCisJLnR4X3BvbGxpbmcgPSBydGw5MnNlX3R4X3BvbGxpbmcsCisJLmVuYWJsZV9od19zZWMgPSBydGw5MnNlX2VuYWJsZV9od19zZWN1cml0eV9jb25maWcsCisJLnNldF9rZXkgPSBydGw5MnNlX3NldF9rZXksCisJLmluaXRfc3dfbGVkcyA9IHJ0bDkyc2VfaW5pdF9zd19sZWRzLAorCS5nZXRfYmJyZWcgPSBydGw5MnNfcGh5X3F1ZXJ5X2JiX3JlZywKKwkuc2V0X2JicmVnID0gcnRsOTJzX3BoeV9zZXRfYmJfcmVnLAorCS5nZXRfcmZyZWcgPSBydGw5MnNfcGh5X3F1ZXJ5X3JmX3JlZywKKwkuc2V0X3JmcmVnID0gcnRsOTJzX3BoeV9zZXRfcmZfcmVnLAorfTsKKworc3RhdGljIHN0cnVjdCBydGxfbW9kX3BhcmFtcyBydGw5MnNlX21vZF9wYXJhbXMgPSB7CisJLnN3X2NyeXB0byA9IGZhbHNlLAorCS5pbmFjdGl2ZXBzID0gdHJ1ZSwKKwkuc3djdHJsX2xwcyA9IHRydWUsCisJLmZ3Y3RybF9scHMgPSBmYWxzZSwKK307CisKKy8qIEJlY2F1c2UgbWVtb3J5IFIvVyBidXJzdGluZyB3aWxsIGNhdXNlIHN5c3RlbSBoYW5nL2NyYXNoCisgKiBmb3IgOTJzZSwgc28gd2UgZG9uJ3QgcmVhZCBiYWNrIGFmdGVyIGV2ZXJ5IHdyaXRlIGFjdGlvbiAqLworc3RhdGljIHN0cnVjdCBydGxfaGFsX2NmZyBydGw5MnNlX2hhbF9jZmcgPSB7CisJLmJhcl9pZCA9IDEsCisJLndyaXRlX3JlYWRiYWNrID0gZmFsc2UsCisJLm5hbWUgPSAicnRsOTJzX3BjaSIsCisJLmZ3X25hbWUgPSAicnRsd2lmaS9ydGw4MTkyc2Vmdy5iaW4iLAorCS5vcHMgPSAmcnRsODE5MnNlX2hhbF9vcHMsCisJLm1vZF9wYXJhbXMgPSAmcnRsOTJzZV9tb2RfcGFyYW1zLAorCisJLm1hcHNbU1lTX0lTT19DVFJMXSA9IFJFR19TWVNfSVNPX0NUUkwsCisJLm1hcHNbU1lTX0ZVTkNfRU5dID0gUkVHX1NZU19GVU5DX0VOLAorCS5tYXBzW1NZU19DTEtdID0gU1lTX0NMS1IsCisJLm1hcHNbTUFDX1JDUl9BTV0gPSBSQ1JfQU0sCisJLm1hcHNbTUFDX1JDUl9BQl0gPSBSQ1JfQUIsCisJLm1hcHNbTUFDX1JDUl9BQ1JDMzJdID0gUkNSX0FDUkMzMiwKKwkubWFwc1tNQUNfUkNSX0FDRl0gPSBSQ1JfQUNGLAorCS5tYXBzW01BQ19SQ1JfQUFQXSA9IFJDUl9BQVAsCisKKwkubWFwc1tFRlVTRV9URVNUXSA9IFJFR19FRlVTRV9URVNULAorCS5tYXBzW0VGVVNFX0NUUkxdID0gUkVHX0VGVVNFX0NUUkwsCisJLm1hcHNbRUZVU0VfQ0xLXSA9IFJFR19FRlVTRV9DTEssCisJLm1hcHNbRUZVU0VfQ0xLX0NUUkxdID0gUkVHX0VGVVNFX0NUUkwsCisJLm1hcHNbRUZVU0VfUFdDX0VWMTJWXSA9IDAsIC8qIG5vdXNlIGZvciA4MTkyc2UgKi8KKwkubWFwc1tFRlVTRV9GRU5fRUxEUl0gPSAwLCAvKiBub3VzZSBmb3IgODE5MnNlICovCisJLm1hcHNbRUZVU0VfTE9BREVSX0NMS19FTl0gPSAwLC8qIG5vdXNlIGZvciA4MTkyc2UgKi8KKwkubWFwc1tFRlVTRV9BTkE4TV0gPSBFRlVTRV9BTkE4TSwKKwkubWFwc1tFRlVTRV9IV1NFVF9NQVhfU0laRV0gPSBIV1NFVF9NQVhfU0laRV85MlMsCisJLm1hcHNbRUZVU0VfTUFYX1NFQ1RJT05fTUFQXSA9IEVGVVNFX01BWF9TRUNUSU9OLAorCS5tYXBzW0VGVVNFX1JFQUxfQ09OVEVOVF9TSVpFXSA9IEVGVVNFX1JFQUxfQ09OVEVOVF9MRU4sCisKKwkubWFwc1tSV0NBTV0gPSBSRUdfUldDQU0sCisJLm1hcHNbV0NBTUldID0gUkVHX1dDQU1JLAorCS5tYXBzW1JDQU1PXSA9IFJFR19SQ0FNTywKKwkubWFwc1tDQU1EQkddID0gUkVHX0NBTURCRywKKwkubWFwc1tTRUNSXSA9IFJFR19TRUNSLAorCS5tYXBzW1NFQ19DQU1fTk9ORV0gPSBDQU1fTk9ORSwKKwkubWFwc1tTRUNfQ0FNX1dFUDQwXSA9IENBTV9XRVA0MCwKKwkubWFwc1tTRUNfQ0FNX1RLSVBdID0gQ0FNX1RLSVAsCisJLm1hcHNbU0VDX0NBTV9BRVNdID0gQ0FNX0FFUywKKwkubWFwc1tTRUNfQ0FNX1dFUDEwNF0gPSBDQU1fV0VQMTA0LAorCisJLm1hcHNbUlRMX0lNUl9CQ05ETUFJTlQ2XSA9IElNUl9CQ05ETUFJTlQ2LAorCS5tYXBzW1JUTF9JTVJfQkNORE1BSU5UNV0gPSBJTVJfQkNORE1BSU5UNSwKKwkubWFwc1tSVExfSU1SX0JDTkRNQUlOVDRdID0gSU1SX0JDTkRNQUlOVDQsCisJLm1hcHNbUlRMX0lNUl9CQ05ETUFJTlQzXSA9IElNUl9CQ05ETUFJTlQzLAorCS5tYXBzW1JUTF9JTVJfQkNORE1BSU5UMl0gPSBJTVJfQkNORE1BSU5UMiwKKwkubWFwc1tSVExfSU1SX0JDTkRNQUlOVDFdID0gSU1SX0JDTkRNQUlOVDEsCisJLm1hcHNbUlRMX0lNUl9CQ05ET0s4XSA9IElNUl9CQ05ET0s4LAorCS5tYXBzW1JUTF9JTVJfQkNORE9LN10gPSBJTVJfQkNORE9LNywKKwkubWFwc1tSVExfSU1SX0JDTkRPSzZdID0gSU1SX0JDTkRPSzYsCisJLm1hcHNbUlRMX0lNUl9CQ05ET0s1XSA9IElNUl9CQ05ET0s1LAorCS5tYXBzW1JUTF9JTVJfQkNORE9LNF0gPSBJTVJfQkNORE9LNCwKKwkubWFwc1tSVExfSU1SX0JDTkRPSzNdID0gSU1SX0JDTkRPSzMsCisJLm1hcHNbUlRMX0lNUl9CQ05ET0syXSA9IElNUl9CQ05ET0syLAorCS5tYXBzW1JUTF9JTVJfQkNORE9LMV0gPSBJTVJfQkNORE9LMSwKKwkubWFwc1tSVExfSU1SX1RJTUVPVVQyXSA9IElNUl9USU1FT1VUMiwKKwkubWFwc1tSVExfSU1SX1RJTUVPVVQxXSA9IElNUl9USU1FT1VUMSwKKworCS5tYXBzW1JUTF9JTVJfVFhGT1ZXXSA9IElNUl9UWEZPVlcsCisJLm1hcHNbUlRMX0lNUl9QU1RJTUVPVVRdID0gSU1SX1BTVElNRU9VVCwKKwkubWFwc1tSVExfSU1SX0JjbkludF0gPSBJTVJfQkNOSU5ULAorCS5tYXBzW1JUTF9JTVJfUlhGT1ZXXSA9IElNUl9SWEZPVlcsCisJLm1hcHNbUlRMX0lNUl9SRFVdID0gSU1SX1JEVSwKKwkubWFwc1tSVExfSU1SX0FUSU1FTkRdID0gSU1SX0FUSU1FTkQsCisJLm1hcHNbUlRMX0lNUl9CRE9LXSA9IElNUl9CRE9LLAorCS5tYXBzW1JUTF9JTVJfTUdOVERPS10gPSBJTVJfTUdOVERPSywKKwkubWFwc1tSVExfSU1SX1RCREVSXSA9IElNUl9UQkRFUiwKKwkubWFwc1tSVExfSU1SX0hJR0hET0tdID0gSU1SX0hJR0hET0ssCisJLm1hcHNbUlRMX0lNUl9DT01ET0tdID0gSU1SX0NPTURPSywKKwkubWFwc1tSVExfSU1SX1RCRE9LXSA9IElNUl9UQkRPSywKKwkubWFwc1tSVExfSU1SX0JLRE9LXSA9IElNUl9CS0RPSywKKwkubWFwc1tSVExfSU1SX0JFRE9LXSA9IElNUl9CRURPSywKKwkubWFwc1tSVExfSU1SX1ZJRE9LXSA9IElNUl9WSURPSywKKwkubWFwc1tSVExfSU1SX1ZPRE9LXSA9IElNUl9WT0RPSywKKwkubWFwc1tSVExfSU1SX1JPS10gPSBJTVJfUk9LLAorCS5tYXBzW1JUTF9JQlNTX0lOVF9NQVNLU10gPSAoSU1SX0JDTklOVCB8IElNUl9UQkRPSyB8IElNUl9UQkRFUiksCisKKwkubWFwc1tSVExfUkNfQ0NLX1JBVEUxTV0gPSBERVNDOTJTX1JBVEUxTSwKKwkubWFwc1tSVExfUkNfQ0NLX1JBVEUyTV0gPSBERVNDOTJTX1JBVEUyTSwKKwkubWFwc1tSVExfUkNfQ0NLX1JBVEU1XzVNXSA9IERFU0M5MlNfUkFURTVfNU0sCisJLm1hcHNbUlRMX1JDX0NDS19SQVRFMTFNXSA9IERFU0M5MlNfUkFURTExTSwKKwkubWFwc1tSVExfUkNfT0ZETV9SQVRFNk1dID0gREVTQzkyU19SQVRFNk0sCisJLm1hcHNbUlRMX1JDX09GRE1fUkFURTlNXSA9IERFU0M5MlNfUkFURTlNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEUxMk1dID0gREVTQzkyU19SQVRFMTJNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEUxOE1dID0gREVTQzkyU19SQVRFMThNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEUyNE1dID0gREVTQzkyU19SQVRFMjRNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEUzNk1dID0gREVTQzkyU19SQVRFMzZNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEU0OE1dID0gREVTQzkyU19SQVRFNDhNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEU1NE1dID0gREVTQzkyU19SQVRFNTRNLAorCisJLm1hcHNbUlRMX1JDX0hUX1JBVEVNQ1M3XSA9IERFU0M5MlNfUkFURU1DUzcsCisJLm1hcHNbUlRMX1JDX0hUX1JBVEVNQ1MxNV0gPSBERVNDOTJTX1JBVEVNQ1MxNSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydGw5MnNlX3BjaV9pZHNbXSBfX2RldmluaXRkYXRhID0geworCXtSVExfUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JFQUxURUssIDB4ODE5MiwgcnRsOTJzZV9oYWxfY2ZnKX0sCisJe1JUTF9QQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUkVBTFRFSywgMHg4MTcxLCBydGw5MnNlX2hhbF9jZmcpfSwKKwl7UlRMX1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9SRUFMVEVLLCAweDgxNzIsIHJ0bDkyc2VfaGFsX2NmZyl9LAorCXtSVExfUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JFQUxURUssIDB4ODE3MywgcnRsOTJzZV9oYWxfY2ZnKX0sCisJe1JUTF9QQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUkVBTFRFSywgMHg4MTc0LCBydGw5MnNlX2hhbF9jZmcpfSwKKwl7fSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBydGw5MnNlX3BjaV9pZHMpOworCitNT0RVTEVfQVVUSE9SKCJsaXpoYW9taW5nCTxjaGFvbWluZ19saUByZWFsc2lsLmNvbS5jbj4iKTsKK01PRFVMRV9BVVRIT1IoIlJlYWx0ZWsgV2xhbkZBRQk8d2xhbmZhZUByZWFsdGVrLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiUmVhbHRlayA4MTkyUy84MTkxUyA4MDIuMTFuIFBDSSB3aXJlbGVzcyIpOworTU9EVUxFX0ZJUk1XQVJFKCJydGx3aWZpL3J0bDgxOTJzZWZ3LmJpbiIpOworCittb2R1bGVfcGFyYW1fbmFtZWQoc3dlbmMsIHJ0bDkyc2VfbW9kX3BhcmFtcy5zd19jcnlwdG8sIGJvb2wsIDA0NDQpOworbW9kdWxlX3BhcmFtX25hbWVkKGlwcywgcnRsOTJzZV9tb2RfcGFyYW1zLmluYWN0aXZlcHMsIGJvb2wsIDA0NDQpOworbW9kdWxlX3BhcmFtX25hbWVkKHN3bHBzLCBydGw5MnNlX21vZF9wYXJhbXMuc3djdHJsX2xwcywgYm9vbCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fbmFtZWQoZndscHMsIHJ0bDkyc2VfbW9kX3BhcmFtcy5md2N0cmxfbHBzLCBib29sLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc3dlbmMsICJ1c2luZyBoYXJkd2FyZSBjcnlwdG8gKGRlZmF1bHQgMCBbaGFyZHdhcmVdKVxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGlwcywgInVzaW5nIG5vIGxpbmsgcG93ZXIgc2F2ZSAoZGVmYXVsdCAxIGlzIG9wZW4pXG4iKTsKK01PRFVMRV9QQVJNX0RFU0Moc3dscHMsICJ1c2luZyBsaW5rZWQgc3cgY29udHJvbCBwb3dlciBzYXZlIChkZWZhdWx0IDEgaXMgIgorCQkgIm9wZW4pXG4iKTsKKworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcnRsOTJzZV9kcml2ZXIgPSB7CisJLm5hbWUgPSBLQlVJTERfTU9ETkFNRSwKKwkuaWRfdGFibGUgPSBydGw5MnNlX3BjaV9pZHMsCisJLnByb2JlID0gcnRsX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gcnRsX3BjaV9kaXNjb25uZWN0LAorCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSBydGxfcGNpX3N1c3BlbmQsCisJLnJlc3VtZSA9IHJ0bF9wY2lfcmVzdW1lLAorI2VuZGlmCisKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHJ0bDkyc2VfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnJ0bDkyc2VfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlSVF9BU1NFUlQoZmFsc2UsICgiOiBObyBkZXZpY2UgZm91bmRcbiIpKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBydGw5MnNlX21vZHVsZV9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZydGw5MnNlX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHJ0bDkyc2VfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQocnRsOTJzZV9tb2R1bGVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tbGVkLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9zdy5oCnNpbWlsYXJpdHkgaW5kZXggNjglCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1sZWQuaApyZW5hbWUgdG8gZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2Uvc3cuaAppbmRleCA5NmYzMjNkLi5mYzRlYjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tbGVkLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2Uvc3cuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMTksMTUgKzE5LDE4IEBACiAgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgogICoKICAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiAgSW50ZWwgTGludXggV2lyZWxlc3MgPGlsd0BsaW51eC5pbnRlbC5jb20+Ci0gKiBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19SRUFMVEVLX1BDSTkyU0VfU1dfSF9fCisjZGVmaW5lIF9fUkVBTFRFS19QQ0k5MlNFX1NXX0hfXwogCi0jaWZuZGVmIF9faXdsX2Fnbl9sZWRfaF9fCi0jZGVmaW5lIF9faXdsX2Fnbl9sZWRfaF9fCisjZGVmaW5lIEVGVVNFX01BWF9TRUNUSU9OCTE2CiAKLWV4dGVybiBjb25zdCBzdHJ1Y3QgaXdsX2xlZF9vcHMgaXdsYWduX2xlZF9vcHM7Ci12b2lkIGl3bGFnbl9sZWRfZW5hYmxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitpbnQgcnRsOTJzZV9pbml0X3N3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsOTJzZV9kZWluaXRfc3coc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBydGw5MnNlX2luaXRfdmFyX21hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAKLSNlbmRpZiAvKiBfX2l3bF9hZ25fbGVkX2hfXyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS90YWJsZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvdGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTQxODViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvdGFibGUuYwpAQCAtMCwwICsxLDYzNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKiBDcmVhdGVkIG9uICAyMDEwLyA1LzE4LCAgMTo0MQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAidGFibGUuaCIKKwordTMyIHJ0bDgxOTJzZXBoeV9yZWdfMnQycmFycmF5W1BIWV9SRUdfMlQyUkFSUkFZTEVOR1RIXSA9IHsKKwkweDAxYywgMHgwNzAwMDAwMCwKKwkweDgwMCwgMHgwMDA0MDAwMCwKKwkweDgwNCwgMHgwMDAwODAwMywKKwkweDgwOCwgMHgwMDAwZmMwMCwKKwkweDgwYywgMHgwMDAwMDAwYSwKKwkweDgxMCwgMHgxMDAwNTA4OCwKKwkweDgxNCwgMHgwMjBjM2QxMCwKKwkweDgxOCwgMHgwMDIwMDE4NSwKKwkweDgxYywgMHgwMDAwMDAwMCwKKwkweDgyMCwgMHgwMTAwMDAwMCwKKwkweDgyNCwgMHgwMDM5MDAwNCwKKwkweDgyOCwgMHgwMTAwMDAwMCwKKwkweDgyYywgMHgwMDM5MDAwNCwKKwkweDgzMCwgMHgwMDAwMDAwNCwKKwkweDgzNCwgMHgwMDY5MDIwMCwKKwkweDgzOCwgMHgwMDAwMDAwNCwKKwkweDgzYywgMHgwMDY5MDIwMCwKKwkweDg0MCwgMHgwMDAxMDAwMCwKKwkweDg0NCwgMHgwMDAxMDAwMCwKKwkweDg0OCwgMHgwMDAwMDAwMCwKKwkweDg0YywgMHgwMDAwMDAwMCwKKwkweDg1MCwgMHgwMDAwMDAwMCwKKwkweDg1NCwgMHgwMDAwMDAwMCwKKwkweDg1OCwgMHg0ODQ4NDg0OCwKKwkweDg1YywgMHg2NWE5NjVhOSwKKwkweDg2MCwgMHgwZjdmMDEzMCwKKwkweDg2NCwgMHgwZjdmMDEzMCwKKwkweDg2OCwgMHgwZjdmMDEzMCwKKwkweDg2YywgMHgwZjdmMDEzMCwKKwkweDg3MCwgMHgwMzAwMDcwMCwKKwkweDg3NCwgMHgwMzAwMDMwMCwKKwkweDg3OCwgMHgwMDAyMDAwMiwKKwkweDg3YywgMHgwMDRmMDIwMSwKKwkweDg4MCwgMHhhODMwMGFjMSwKKwkweDg4NCwgMHgwMDAwMDA1OCwKKwkweDg4OCwgMHgwMDAwMDAwOCwKKwkweDg4YywgMHgwMDAwMDAwNCwKKwkweDg5MCwgMHgwMDAwMDAwMCwKKwkweDg5NCwgMHhmZmZmZmZmZSwKKwkweDg5OCwgMHg0MDMwMjAxMCwKKwkweDg5YywgMHgwMDcwNjA1MCwKKwkweDhiMCwgMHgwMDAwMDAwMCwKKwkweDhlMCwgMHgwMDAwMDAwMCwKKwkweDhlNCwgMHgwMDAwMDAwMCwKKwkweGUwMCwgMHgzMDMzMzMzMywKKwkweGUwNCwgMHgyYTJkMmUyZiwKKwkweGUwOCwgMHgwMDAwMzIzMiwKKwkweGUxMCwgMHgzMDMzMzMzMywKKwkweGUxNCwgMHgyYTJkMmUyZiwKKwkweGUxOCwgMHgzMDMzMzMzMywKKwkweGUxYywgMHgyYTJkMmUyZiwKKwkweGUzMCwgMHgwMTAwN2MwMCwKKwkweGUzNCwgMHgwMTAwNDgwMCwKKwkweGUzOCwgMHgxMDAwZGMxZiwKKwkweGUzYywgMHgxMDAwOGMxZiwKKwkweGU0MCwgMHgwMjE0MDBhMCwKKwkweGU0NCwgMHgyODE2MDBhMCwKKwkweGU0OCwgMHhmODAwMDAwMSwKKwkweGU0YywgMHgwMDAwMjkxMCwKKwkweGU1MCwgMHgwMTAwN2MwMCwKKwkweGU1NCwgMHgwMTAwNDgwMCwKKwkweGU1OCwgMHgxMDAwZGMxZiwKKwkweGU1YywgMHgxMDAwOGMxZiwKKwkweGU2MCwgMHgwMjE0MDBhMCwKKwkweGU2NCwgMHgyODE2MDBhMCwKKwkweGU2YywgMHgwMDAwMjkxMCwKKwkweGU3MCwgMHgzMWVkOTJmYiwKKwkweGU3NCwgMHgzNjE1MzZmYiwKKwkweGU3OCwgMHgzNjE1MzZmYiwKKwkweGU3YywgMHgzNjE1MzZmYiwKKwkweGU4MCwgMHgzNjE1MzZmYiwKKwkweGU4NCwgMHgwMDBkOTJmYiwKKwkweGU4OCwgMHgwMDBkOTJmYiwKKwkweGU4YywgMHgzMWVkOTJmYiwKKwkweGVkMCwgMHgzMWVkOTJmYiwKKwkweGVkNCwgMHgzMWVkOTJmYiwKKwkweGVkOCwgMHgwMDBkOTJmYiwKKwkweGVkYywgMHgwMDBkOTJmYiwKKwkweGVlMCwgMHgwMDBkOTJmYiwKKwkweGVlNCwgMHgwMTVlNTQ0OCwKKwkweGVlOCwgMHgyMTU1NTQ0OCwKKwkweDkwMCwgMHgwMDAwMDAwMCwKKwkweDkwNCwgMHgwMDAwMDAyMywKKwkweDkwOCwgMHgwMDAwMDAwMCwKKwkweDkwYywgMHgwMTEyMTMxMywKKwkweGEwMCwgMHgwMGQwNDdjOCwKKwkweGEwNCwgMHg4MGZmMDAwOCwKKwkweGEwOCwgMHg4Y2NkODMwMCwKKwkweGEwYywgMHgyZTYyMTIwZiwKKwkweGExMCwgMHg5NTAwYmI3OCwKKwkweGExNCwgMHgxMTE0NDAyOCwKKwkweGExOCwgMHgwMDg4MTExNywKKwkweGExYywgMHg4OTE0MGYwMCwKKwkweGEyMCwgMHgxYTFiMDAwMCwKKwkweGEyNCwgMHgwOTBlMTMxNywKKwkweGEyOCwgMHgwMDAwMDIwNCwKKwkweGEyYywgMHgxMGQzMDAwMCwKKwkweGMwMCwgMHg0MDA3MWQ0MCwKKwkweGMwNCwgMHgwMGEwNTYzMywKKwkweGMwOCwgMHgwMDAwMDBlNCwKKwkweGMwYywgMHg2YzZjNmM2YywKKwkweGMxMCwgMHgwODgwMDAwMCwKKwkweGMxNCwgMHg0MDAwMDEwMCwKKwkweGMxOCwgMHgwODAwMDAwMCwKKwkweGMxYywgMHg0MDAwMDEwMCwKKwkweGMyMCwgMHgwODAwMDAwMCwKKwkweGMyNCwgMHg0MDAwMDEwMCwKKwkweGMyOCwgMHgwODAwMDAwMCwKKwkweGMyYywgMHg0MDAwMDEwMCwKKwkweGMzMCwgMHg2ZGU5YWM0NCwKKwkweGMzNCwgMHg0Njk2NTJjZiwKKwkweGMzOCwgMHg0OTc5NTk5NCwKKwkweGMzYywgMHgwYTk3OTc2NCwKKwkweGM0MCwgMHgxZjdjNDAzZiwKKwkweGM0NCwgMHgwMDAxMDBiNywKKwkweGM0OCwgMHhlYzAyMDAwMCwKKwkweGM0YywgMHgwMDdmMDM3ZiwKKwkweGM1MCwgMHg2OTU0MzQyMCwKKwkweGM1NCwgMHg0MzNjMDA5NCwKKwkweGM1OCwgMHg2OTU0MzQyMCwKKwkweGM1YywgMHg0MzNjMDA5NCwKKwkweGM2MCwgMHg2OTU0MzQyMCwKKwkweGM2NCwgMHg0MzNjMDA5NCwKKwkweGM2OCwgMHg2OTU0MzQyMCwKKwkweGM2YywgMHg0MzNjMDA5NCwKKwkweGM3MCwgMHgyYzdmMDAwZCwKKwkweGM3NCwgMHgwMTg2MTU1YiwKKwkweGM3OCwgMHgwMDAwMDAxZiwKKwkweGM3YywgMHgwMGI5MTYxMiwKKwkweGM4MCwgMHg0MDAwMDEwMCwKKwkweGM4NCwgMHgyMGY2MDAwMCwKKwkweGM4OCwgMHgyMDAwMDA4MCwKKwkweGM4YywgMHgyMDIwMDAwMCwKKwkweGM5MCwgMHg0MDAwMDEwMCwKKwkweGM5NCwgMHgwMDAwMDAwMCwKKwkweGM5OCwgMHg0MDAwMDEwMCwKKwkweGM5YywgMHgwMDAwMDAwMCwKKwkweGNhMCwgMHgwMDQ5MjQ5MiwKKwkweGNhNCwgMHgwMDAwMDAwMCwKKwkweGNhOCwgMHgwMDAwMDAwMCwKKwkweGNhYywgMHgwMDAwMDAwMCwKKwkweGNiMCwgMHgwMDAwMDAwMCwKKwkweGNiNCwgMHgwMDAwMDAwMCwKKwkweGNiOCwgMHgwMDAwMDAwMCwKKwkweGNiYywgMHgyODAwMDAwMCwKKwkweGNjMCwgMHgwMDAwMDAwMCwKKwkweGNjNCwgMHgwMDAwMDAwMCwKKwkweGNjOCwgMHgwMDAwMDAwMCwKKwkweGNjYywgMHgwMDAwMDAwMCwKKwkweGNkMCwgMHgwMDAwMDAwMCwKKwkweGNkNCwgMHgwMDAwMDAwMCwKKwkweGNkOCwgMHg2NGIyMjQyNywKKwkweGNkYywgMHgwMDc2NjkzMiwKKwkweGNlMCwgMHgwMDIyMjIyMiwKKwkweGNlNCwgMHgwMDAwMDAwMCwKKwkweGNlOCwgMHgzNzY0NDMwMiwKKwkweGNlYywgMHgyZjk3ZDQwYywKKwkweGQwMCwgMHgwMDAwMDc1MCwKKwkweGQwNCwgMHgwMDAwMDQwMywKKwkweGQwOCwgMHgwMDAwOTA3ZiwKKwkweGQwYywgMHgwMDAwMDAwMSwKKwkweGQxMCwgMHhhMDYzMzMzMywKKwkweGQxNCwgMHgzMzMzM2M2MywKKwkweGQxOCwgMHg2YThmNWI2YiwKKwkweGQxYywgMHgwMDAwMDAwMCwKKwkweGQyMCwgMHgwMDAwMDAwMCwKKwkweGQyNCwgMHgwMDAwMDAwMCwKKwkweGQyOCwgMHgwMDAwMDAwMCwKKwkweGQyYywgMHhjYzk3OTk3NSwKKwkweGQzMCwgMHgwMDAwMDAwMCwKKwkweGQzNCwgMHgwMDAwMDAwMCwKKwkweGQzOCwgMHgwMDAwMDAwMCwKKwkweGQzYywgMHgwMDAyNzI5MywKKwkweGQ0MCwgMHgwMDAwMDAwMCwKKwkweGQ0NCwgMHgwMDAwMDAwMCwKKwkweGQ0OCwgMHgwMDAwMDAwMCwKKwkweGQ1MCwgMHg2NDM3MTQwYSwKKwkweGQ1NCwgMHgwMjRkYmQwMiwKKwkweGQ1OCwgMHgwMDAwMDAwMCwKKwkweGQ1YywgMHgzMDAzMjA2NCwKKwkweGQ2MCwgMHg0NjUzZGU2OCwKKwkweGQ2NCwgMHgwMDUxOGEzYywKKwkweGQ2OCwgMHgwMDAwMjEwMSwKKwkweGYxNCwgMHgwMDAwMDAwMywKKwkweGY0YywgMHgwMDAwMDAwMCwKKwkweGYwMCwgMHgwMDAwMDMwMCwKK307CisKK3UzMiBydGw4MTkyc2VwaHlfY2hhbmdldG9fMXQxcmFycmF5W1BIWV9DSEFOR0VUT18xVDFSQVJSQVlMRU5HVEhdID0geworCTB4ODQ0LCAweGZmZmZmZmZmLCAweDAwMDEwMDAwLAorCTB4ODA0LCAweDAwMDAwMDBmLCAweDAwMDAwMDAxLAorCTB4ODI0LCAweDAwZjAwMDBmLCAweDAwMzAwMDA0LAorCTB4ODJjLCAweDAwZjAwMDBmLCAweDAwMTAwMDAyLAorCTB4ODcwLCAweDA0MDAwMDAwLCAweDAwMDAwMDAxLAorCTB4ODY0LCAweDAwMDAwNDAwLCAweDAwMDAwMDAwLAorCTB4ODc4LCAweDAwMGYwMDBmLCAweDAwMDAwMDAyLAorCTB4ZTc0LCAweDBmMDAwMDAwLCAweDAwMDAwMDAyLAorCTB4ZTc4LCAweDBmMDAwMDAwLCAweDAwMDAwMDAyLAorCTB4ZTdjLCAweDBmMDAwMDAwLCAweDAwMDAwMDAyLAorCTB4ZTgwLCAweDBmMDAwMDAwLCAweDAwMDAwMDAyLAorCTB4OTBjLCAweDAwMDAwMGZmLCAweDAwMDAwMDExLAorCTB4YzA0LCAweDAwMDAwMGZmLCAweDAwMDAwMDExLAorCTB4ZDA0LCAweDAwMDAwMDBmLCAweDAwMDAwMDAxLAorCTB4MWY0LCAweGZmZmYwMDAwLCAweDAwMDA3Nzc3LAorCTB4MjM0LCAweGY4MDAwMDAwLCAweDAwMDAwMDBhLAorfTsKKwordTMyIHJ0bDgxOTJzZXBoeV9jaGFuZ2V0b18xdDJyYXJyYXlbUEhZX0NIQU5HRVRPXzFUMlJBUlJBWUxFTkdUSF0gPSB7CisJMHg4MDQsIDB4MDAwMDAwMGYsIDB4MDAwMDAwMDMsCisJMHg4MjQsIDB4MDBmMDAwMGYsIDB4MDAzMDAwMDQsCisJMHg4MmMsIDB4MDBmMDAwMGYsIDB4MDAzMDAwMDIsCisJMHg4NzAsIDB4MDQwMDAwMDAsIDB4MDAwMDAwMDEsCisJMHg4NjQsIDB4MDAwMDA0MDAsIDB4MDAwMDAwMDAsCisJMHg4NzgsIDB4MDAwZjAwMGYsIDB4MDAwMDAwMDIsCisJMHhlNzQsIDB4MGYwMDAwMDAsIDB4MDAwMDAwMDIsCisJMHhlNzgsIDB4MGYwMDAwMDAsIDB4MDAwMDAwMDIsCisJMHhlN2MsIDB4MGYwMDAwMDAsIDB4MDAwMDAwMDIsCisJMHhlODAsIDB4MGYwMDAwMDAsIDB4MDAwMDAwMDIsCisJMHg5MGMsIDB4MDAwMDAwZmYsIDB4MDAwMDAwMTEsCisJMHhjMDQsIDB4MDAwMDAwZmYsIDB4MDAwMDAwMzMsCisJMHhkMDQsIDB4MDAwMDAwMGYsIDB4MDAwMDAwMDMsCisJMHgxZjQsIDB4ZmZmZjAwMDAsIDB4MDAwMDc3NzcsCisJMHgyMzQsIDB4ZjgwMDAwMDAsIDB4MDAwMDAwMGEsCit9OworCit1MzIgcnRsODE5MnNlcGh5X3JlZ19hcnJheV9wZ1tQSFlfUkVHX0FSUkFZX1BHTEVOR1RIXSA9IHsKKwkweGUwMCwgMHhmZmZmZmZmZiwgMHgwNjA5MDkwOSwKKwkweGUwNCwgMHhmZmZmZmZmZiwgMHgwMDAzMDQwNiwKKwkweGUwOCwgMHgwMDAwZmYwMCwgMHgwMDAwMDAwMCwKKwkweGUxMCwgMHhmZmZmZmZmZiwgMHgwYTBjMGQwZSwKKwkweGUxNCwgMHhmZmZmZmZmZiwgMHgwNDA3MDgwOSwKKwkweGUxOCwgMHhmZmZmZmZmZiwgMHgwYTBjMGQwZSwKKwkweGUxYywgMHhmZmZmZmZmZiwgMHgwNDA3MDgwOSwKKwkweGUwMCwgMHhmZmZmZmZmZiwgMHgwNDA0MDQwNCwKKwkweGUwNCwgMHhmZmZmZmZmZiwgMHgwMDAyMDIwNCwKKwkweGUwOCwgMHgwMDAwZmYwMCwgMHgwMDAwMDAwMCwKKwkweGUxMCwgMHhmZmZmZmZmZiwgMHgwMjA0MDQwNCwKKwkweGUxNCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMiwKKwkweGUxOCwgMHhmZmZmZmZmZiwgMHgwMjA0MDQwNCwKKwkweGUxYywgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMiwKKwkweGUwMCwgMHhmZmZmZmZmZiwgMHgwNDA0MDQwNCwKKwkweGUwNCwgMHhmZmZmZmZmZiwgMHgwMDAyMDIwNCwKKwkweGUwOCwgMHgwMDAwZmYwMCwgMHgwMDAwMDAwMCwKKwkweGUxMCwgMHhmZmZmZmZmZiwgMHgwMjA0MDQwNCwKKwkweGUxNCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMiwKKwkweGUxOCwgMHhmZmZmZmZmZiwgMHgwMjA0MDQwNCwKKwkweGUxYywgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMiwKKwkweGUwMCwgMHhmZmZmZmZmZiwgMHgwMjAyMDIwMiwKKwkweGUwNCwgMHhmZmZmZmZmZiwgMHgwMDAyMDIwMiwKKwkweGUwOCwgMHgwMDAwZmYwMCwgMHgwMDAwMDAwMCwKKwkweGUxMCwgMHhmZmZmZmZmZiwgMHgwMjAyMDIwMiwKKwkweGUxNCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMiwKKwkweGUxOCwgMHhmZmZmZmZmZiwgMHgwMjAyMDIwMiwKKwkweGUxYywgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMiwKK307CisKK3UzMiBydGw4MTkyc2VyYWRpb2FfMXRfYXJyYXlbUkFESU9BXzFUX0FSUkFZTEVOR1RIXSA9IHsKKwkweDAwMCwgMHgwMDAzMDE1OSwKKwkweDAwMSwgMHgwMDAzMDI1MCwKKwkweDAwMiwgMHgwMDAxMDAwMCwKKwkweDAxMCwgMHgwMDA4MDAwZiwKKwkweDAxMSwgMHgwMDAyMzFmYywKKwkweDAxMCwgMHgwMDBjMDAwZiwKKwkweDAxMSwgMHgwMDAzZjlmOCwKKwkweDAxMCwgMHgwMDAyMDAwZiwKKwkweDAxMSwgMHgwMDAyMDEwMSwKKwkweDAxNCwgMHgwMDAxMDkzZSwKKwkweDAxNCwgMHgwMDA5MDkzZSwKKwkweDAxNSwgMHgwMDAwZjhmNCwKKwkweDAxNywgMHgwMDBmNjUwMCwKKwkweDAxYSwgMHgwMDAxMzA1NiwKKwkweDAxYiwgMHgwMDA2MDAwMCwKKwkweDAxYywgMHgwMDAwMDMwMCwKKwkweDAxZSwgMHgwMDAzMTA1OSwKKwkweDAyMSwgMHgwMDA1NDAwMCwKKwkweDAyMiwgMHgwMDAwMDgzYywKKwkweDAyMywgMHgwMDAwMTU1OCwKKwkweDAyNCwgMHgwMDAwMDA2MCwKKwkweDAyNSwgMHgwMDAyMjU4MywKKwkweDAyNiwgMHgwMDAwZjIwMCwKKwkweDAyNywgMHgwMDBlYWNmMSwKKwkweDAyOCwgMHgwMDA5YmQ1NCwKKwkweDAyOSwgMHgwMDAwNDU4MiwKKwkweDAyYSwgMHgwMDAwMDAwMSwKKwkweDAyYiwgMHgwMDAyMTMzNCwKKwkweDAyYSwgMHgwMDAwMDAwMCwKKwkweDAyYiwgMHgwMDAwMDAwYSwKKwkweDAyYSwgMHgwMDAwMDAwMSwKKwkweDAyYiwgMHgwMDAwMDgwOCwKKwkweDAyYiwgMHgwMDA1MzMzMywKKwkweDAyYywgMHgwMDAwMDAwYywKKwkweDAyYSwgMHgwMDAwMDAwMiwKKwkweDAyYiwgMHgwMDAwMDgwOCwKKwkweDAyYiwgMHgwMDA1YjMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwMywKKwkweDAyYiwgMHgwMDAwMDgwOCwKKwkweDAyYiwgMHgwMDA2MzMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwNCwKKwkweDAyYiwgMHgwMDAwMDgwOCwKKwkweDAyYiwgMHgwMDA2YjMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwNSwKKwkweDAyYiwgMHgwMDAwMDcwOSwKKwkweDAyYiwgMHgwMDA1MzMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwNiwKKwkweDAyYiwgMHgwMDAwMDcwOSwKKwkweDAyYiwgMHgwMDA1YjMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwNywKKwkweDAyYiwgMHgwMDAwMDcwOSwKKwkweDAyYiwgMHgwMDA2MzMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwOCwKKwkweDAyYiwgMHgwMDAwMDcwOSwKKwkweDAyYiwgMHgwMDA2YjMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwOSwKKwkweDAyYiwgMHgwMDAwMDYwYSwKKwkweDAyYiwgMHgwMDA1MzMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwYSwKKwkweDAyYiwgMHgwMDAwMDYwYSwKKwkweDAyYiwgMHgwMDA1YjMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwYiwKKwkweDAyYiwgMHgwMDAwMDYwYSwKKwkweDAyYiwgMHgwMDA2MzMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwYywKKwkweDAyYiwgMHgwMDAwMDYwYSwKKwkweDAyYiwgMHgwMDA2YjMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwZCwKKwkweDAyYiwgMHgwMDAwMDUwYiwKKwkweDAyYiwgMHgwMDA1MzMzMywKKwkweDAyYywgMHgwMDAwMDAwZCwKKwkweDAyYSwgMHgwMDAwMDAwZSwKKwkweDAyYiwgMHgwMDAwMDUwYiwKKwkweDAyYiwgMHgwMDA2NjYyMywKKwkweDAyYywgMHgwMDAwMDAxYSwKKwkweDAyYSwgMHgwMDBlNDAwMCwKKwkweDAzMCwgMHgwMDAyMDAwMCwKKwkweDAzMSwgMHgwMDBiOTYzMSwKKwkweDAzMiwgMHgwMDAwMTMwZCwKKwkweDAzMywgMHgwMDAwMDE4NywKKwkweDAxMywgMHgwMDAxOWU2YywKKwkweDAxMywgMHgwMDAxNWU5NCwKKwkweDAwMCwgMHgwMDAxMDE1OSwKKwkweDAxOCwgMHgwMDAwZjQwMSwKKwkweDBmZSwgMHgwMDAwMDAwMCwKKwkweDAxZSwgMHgwMDAzMTA1YiwKKwkweDBmZSwgMHgwMDAwMDAwMCwKKwkweDAwMCwgMHgwMDAzMDE1OSwKKwkweDAxMCwgMHgwMDA0MDAwZiwKKwkweDAxMSwgMHgwMDAyMDNmOSwKK307CisKK3UzMiBydGw4MTkyc2VyYWRpb2JfYXJyYXlbUkFESU9CX0FSUkFZTEVOR1RIXSA9IHsKKwkweDAwMCwgMHgwMDAzMDE1OSwKKwkweDAwMSwgMHgwMDAwMTA0MSwKKwkweDAwMiwgMHgwMDAxMTAwMCwKKwkweDAwNSwgMHgwMDA4MGZjMCwKKwkweDAwNywgMHgwMDBmYzgwMywKKwkweDAxMywgMHgwMDAxN2NiMCwKKwkweDAxMywgMHgwMDAxMWNjMCwKKwkweDAxMywgMHgwMDAwZGM2MCwKKwkweDAxMywgMHgwMDAwOGM2MCwKKwkweDAxMywgMHgwMDAwNDQ1MCwKKwkweDAxMywgMHgwMDAwMDAyMCwKK307CisKK3UzMiBydGw4MTkyc2VyYWRpb2JfZ21fYXJyYXlbUkFESU9CX0dNX0FSUkFZTEVOR1RIXSA9IHsKKwkweDAwMCwgMHgwMDAzMDE1OSwKKwkweDAwMSwgMHgwMDAwMTA0MSwKKwkweDAwMiwgMHgwMDAxMTAwMCwKKwkweDAwNSwgMHgwMDA4MGZjMCwKKwkweDAwNywgMHgwMDBmYzgwMywKK307CisKK3UzMiBydGw4MTkyc2VtYWNfMnRfYXJyYXlbTUFDXzJUX0FSUkFZTEVOR1RIXSA9IHsKKwkweDAyMCwgMHgwMDAwMDAzNSwKKwkweDA0OCwgMHgwMDAwMDAwZSwKKwkweDA0OSwgMHgwMDAwMDBmMCwKKwkweDA0YSwgMHgwMDAwMDA3NywKKwkweDA0YiwgMHgwMDAwMDA4MywKKwkweDBiNSwgMHgwMDAwMDAyMSwKKwkweDBkYywgMHgwMDAwMDBmZiwKKwkweDBkZCwgMHgwMDAwMDBmZiwKKwkweDBkZSwgMHgwMDAwMDBmZiwKKwkweDBkZiwgMHgwMDAwMDBmZiwKKwkweDExNiwgMHgwMDAwMDAwMCwKKwkweDExNywgMHgwMDAwMDAwMCwKKwkweDExOCwgMHgwMDAwMDAwMCwKKwkweDExOSwgMHgwMDAwMDAwMCwKKwkweDExYSwgMHgwMDAwMDAwMCwKKwkweDExYiwgMHgwMDAwMDAwMCwKKwkweDExYywgMHgwMDAwMDAwMCwKKwkweDExZCwgMHgwMDAwMDAwMCwKKwkweDE2MCwgMHgwMDAwMDAwYiwKKwkweDE2MSwgMHgwMDAwMDAwYiwKKwkweDE2MiwgMHgwMDAwMDAwYiwKKwkweDE2MywgMHgwMDAwMDAwYiwKKwkweDE2NCwgMHgwMDAwMDAwYiwKKwkweDE2NSwgMHgwMDAwMDAwYiwKKwkweDE2NiwgMHgwMDAwMDAwYiwKKwkweDE2NywgMHgwMDAwMDAwYiwKKwkweDE2OCwgMHgwMDAwMDAwYiwKKwkweDE2OSwgMHgwMDAwMDAwYiwKKwkweDE2YSwgMHgwMDAwMDAwYiwKKwkweDE2YiwgMHgwMDAwMDAwYiwKKwkweDE2YywgMHgwMDAwMDAwYiwKKwkweDE2ZCwgMHgwMDAwMDAwYiwKKwkweDE2ZSwgMHgwMDAwMDAwYiwKKwkweDE2ZiwgMHgwMDAwMDAwYiwKKwkweDE3MCwgMHgwMDAwMDAwYiwKKwkweDE3MSwgMHgwMDAwMDAwYiwKKwkweDE3MiwgMHgwMDAwMDAwYiwKKwkweDE3MywgMHgwMDAwMDAwYiwKKwkweDE3NCwgMHgwMDAwMDAwYiwKKwkweDE3NSwgMHgwMDAwMDAwYiwKKwkweDE3NiwgMHgwMDAwMDAwYiwKKwkweDE3NywgMHgwMDAwMDAwYiwKKwkweDE3OCwgMHgwMDAwMDAwYiwKKwkweDE3OSwgMHgwMDAwMDAwYiwKKwkweDE3YSwgMHgwMDAwMDAwYiwKKwkweDE3YiwgMHgwMDAwMDAwYiwKKwkweDE3YywgMHgwMDAwMDAwYiwKKwkweDE3ZCwgMHgwMDAwMDAwYiwKKwkweDE3ZSwgMHgwMDAwMDAwYiwKKwkweDE3ZiwgMHgwMDAwMDAwYiwKKwkweDIzNiwgMHgwMDAwMDAwYywKKwkweDUwMywgMHgwMDAwMDAyMiwKKwkweDU2MCwgMHgwMDAwMDAwMCwKK307CisKK3UzMiBydGw4MTkyc2VhZ2N0YWJfYXJyYXlbQUdDVEFCX0FSUkFZTEVOR1RIXSA9IHsKKwkweGM3OCwgMHg3ZjAwMDAwMSwKKwkweGM3OCwgMHg3ZjAxMDAwMSwKKwkweGM3OCwgMHg3ZTAyMDAwMSwKKwkweGM3OCwgMHg3ZDAzMDAwMSwKKwkweGM3OCwgMHg3YzA0MDAwMSwKKwkweGM3OCwgMHg3YjA1MDAwMSwKKwkweGM3OCwgMHg3YTA2MDAwMSwKKwkweGM3OCwgMHg3OTA3MDAwMSwKKwkweGM3OCwgMHg3ODA4MDAwMSwKKwkweGM3OCwgMHg3NzA5MDAwMSwKKwkweGM3OCwgMHg3NjBhMDAwMSwKKwkweGM3OCwgMHg3NTBiMDAwMSwKKwkweGM3OCwgMHg3NDBjMDAwMSwKKwkweGM3OCwgMHg3MzBkMDAwMSwKKwkweGM3OCwgMHg3MjBlMDAwMSwKKwkweGM3OCwgMHg3MTBmMDAwMSwKKwkweGM3OCwgMHg3MDEwMDAwMSwKKwkweGM3OCwgMHg2ZjExMDAwMSwKKwkweGM3OCwgMHg2ZjEyMDAwMSwKKwkweGM3OCwgMHg2ZTEzMDAwMSwKKwkweGM3OCwgMHg2ZDE0MDAwMSwKKwkweGM3OCwgMHg2ZDE1MDAwMSwKKwkweGM3OCwgMHg2YzE2MDAwMSwKKwkweGM3OCwgMHg2YjE3MDAwMSwKKwkweGM3OCwgMHg2YTE4MDAwMSwKKwkweGM3OCwgMHg2YTE5MDAwMSwKKwkweGM3OCwgMHg2OTFhMDAwMSwKKwkweGM3OCwgMHg2ODFiMDAwMSwKKwkweGM3OCwgMHg2NzFjMDAwMSwKKwkweGM3OCwgMHg2NjFkMDAwMSwKKwkweGM3OCwgMHg2NTFlMDAwMSwKKwkweGM3OCwgMHg2NDFmMDAwMSwKKwkweGM3OCwgMHg2MzIwMDAwMSwKKwkweGM3OCwgMHg0YzIxMDAwMSwKKwkweGM3OCwgMHg0YjIyMDAwMSwKKwkweGM3OCwgMHg0YTIzMDAwMSwKKwkweGM3OCwgMHg0OTI0MDAwMSwKKwkweGM3OCwgMHg0ODI1MDAwMSwKKwkweGM3OCwgMHg0NzI2MDAwMSwKKwkweGM3OCwgMHg0NjI3MDAwMSwKKwkweGM3OCwgMHg0NTI4MDAwMSwKKwkweGM3OCwgMHg0NDI5MDAwMSwKKwkweGM3OCwgMHgyYzJhMDAwMSwKKwkweGM3OCwgMHgyYjJiMDAwMSwKKwkweGM3OCwgMHgyYTJjMDAwMSwKKwkweGM3OCwgMHgyOTJkMDAwMSwKKwkweGM3OCwgMHgyODJlMDAwMSwKKwkweGM3OCwgMHgyNzJmMDAwMSwKKwkweGM3OCwgMHgyNjMwMDAwMSwKKwkweGM3OCwgMHgyNTMxMDAwMSwKKwkweGM3OCwgMHgyNDMyMDAwMSwKKwkweGM3OCwgMHgyMzMzMDAwMSwKKwkweGM3OCwgMHgyMjM0MDAwMSwKKwkweGM3OCwgMHgwOTM1MDAwMSwKKwkweGM3OCwgMHgwODM2MDAwMSwKKwkweGM3OCwgMHgwNzM3MDAwMSwKKwkweGM3OCwgMHgwNjM4MDAwMSwKKwkweGM3OCwgMHgwNTM5MDAwMSwKKwkweGM3OCwgMHgwNDNhMDAwMSwKKwkweGM3OCwgMHgwMzNiMDAwMSwKKwkweGM3OCwgMHgwMjNjMDAwMSwKKwkweGM3OCwgMHgwMTNkMDAwMSwKKwkweGM3OCwgMHgwMDNlMDAwMSwKKwkweGM3OCwgMHgwMDNmMDAwMSwKKwkweGM3OCwgMHg3ZjQwMDAwMSwKKwkweGM3OCwgMHg3ZjQxMDAwMSwKKwkweGM3OCwgMHg3ZTQyMDAwMSwKKwkweGM3OCwgMHg3ZDQzMDAwMSwKKwkweGM3OCwgMHg3YzQ0MDAwMSwKKwkweGM3OCwgMHg3YjQ1MDAwMSwKKwkweGM3OCwgMHg3YTQ2MDAwMSwKKwkweGM3OCwgMHg3OTQ3MDAwMSwKKwkweGM3OCwgMHg3ODQ4MDAwMSwKKwkweGM3OCwgMHg3NzQ5MDAwMSwKKwkweGM3OCwgMHg3NjRhMDAwMSwKKwkweGM3OCwgMHg3NTRiMDAwMSwKKwkweGM3OCwgMHg3NDRjMDAwMSwKKwkweGM3OCwgMHg3MzRkMDAwMSwKKwkweGM3OCwgMHg3MjRlMDAwMSwKKwkweGM3OCwgMHg3MTRmMDAwMSwKKwkweGM3OCwgMHg3MDUwMDAwMSwKKwkweGM3OCwgMHg2ZjUxMDAwMSwKKwkweGM3OCwgMHg2ZjUyMDAwMSwKKwkweGM3OCwgMHg2ZTUzMDAwMSwKKwkweGM3OCwgMHg2ZDU0MDAwMSwKKwkweGM3OCwgMHg2ZDU1MDAwMSwKKwkweGM3OCwgMHg2YzU2MDAwMSwKKwkweGM3OCwgMHg2YjU3MDAwMSwKKwkweGM3OCwgMHg2YTU4MDAwMSwKKwkweGM3OCwgMHg2YTU5MDAwMSwKKwkweGM3OCwgMHg2OTVhMDAwMSwKKwkweGM3OCwgMHg2ODViMDAwMSwKKwkweGM3OCwgMHg2NzVjMDAwMSwKKwkweGM3OCwgMHg2NjVkMDAwMSwKKwkweGM3OCwgMHg2NTVlMDAwMSwKKwkweGM3OCwgMHg2NDVmMDAwMSwKKwkweGM3OCwgMHg2MzYwMDAwMSwKKwkweGM3OCwgMHg0YzYxMDAwMSwKKwkweGM3OCwgMHg0YjYyMDAwMSwKKwkweGM3OCwgMHg0YTYzMDAwMSwKKwkweGM3OCwgMHg0OTY0MDAwMSwKKwkweGM3OCwgMHg0ODY1MDAwMSwKKwkweGM3OCwgMHg0NzY2MDAwMSwKKwkweGM3OCwgMHg0NjY3MDAwMSwKKwkweGM3OCwgMHg0NTY4MDAwMSwKKwkweGM3OCwgMHg0NDY5MDAwMSwKKwkweGM3OCwgMHgyYzZhMDAwMSwKKwkweGM3OCwgMHgyYjZiMDAwMSwKKwkweGM3OCwgMHgyYTZjMDAwMSwKKwkweGM3OCwgMHgyOTZkMDAwMSwKKwkweGM3OCwgMHgyODZlMDAwMSwKKwkweGM3OCwgMHgyNzZmMDAwMSwKKwkweGM3OCwgMHgyNjcwMDAwMSwKKwkweGM3OCwgMHgyNTcxMDAwMSwKKwkweGM3OCwgMHgyNDcyMDAwMSwKKwkweGM3OCwgMHgyMzczMDAwMSwKKwkweGM3OCwgMHgyMjc0MDAwMSwKKwkweGM3OCwgMHgwOTc1MDAwMSwKKwkweGM3OCwgMHgwODc2MDAwMSwKKwkweGM3OCwgMHgwNzc3MDAwMSwKKwkweGM3OCwgMHgwNjc4MDAwMSwKKwkweGM3OCwgMHgwNTc5MDAwMSwKKwkweGM3OCwgMHgwNDdhMDAwMSwKKwkweGM3OCwgMHgwMzdiMDAwMSwKKwkweGM3OCwgMHgwMjdjMDAwMSwKKwkweGM3OCwgMHgwMTdkMDAwMSwKKwkweGM3OCwgMHgwMDdlMDAwMSwKKwkweGM3OCwgMHgwMDdmMDAwMSwKKwkweGM3OCwgMHgzMDAwMDAxZSwKKwkweGM3OCwgMHgzMDAxMDAxZSwKKwkweGM3OCwgMHgzMDAyMDAxZSwKKwkweGM3OCwgMHgzMDAzMDAxZSwKKwkweGM3OCwgMHgzMDA0MDAxZSwKKwkweGM3OCwgMHgzNDA1MDAxZSwKKwkweGM3OCwgMHgzODA2MDAxZSwKKwkweGM3OCwgMHgzZTA3MDAxZSwKKwkweGM3OCwgMHgzZTA4MDAxZSwKKwkweGM3OCwgMHg0NDA5MDAxZSwKKwkweGM3OCwgMHg0NjBhMDAxZSwKKwkweGM3OCwgMHg0ODBiMDAxZSwKKwkweGM3OCwgMHg0ODBjMDAxZSwKKwkweGM3OCwgMHg0ZTBkMDAxZSwKKwkweGM3OCwgMHg1NjBlMDAxZSwKKwkweGM3OCwgMHg1YTBmMDAxZSwKKwkweGM3OCwgMHg1ZTEwMDAxZSwKKwkweGM3OCwgMHg2MjExMDAxZSwKKwkweGM3OCwgMHg2YzEyMDAxZSwKKwkweGM3OCwgMHg3MjEzMDAxZSwKKwkweGM3OCwgMHg3MjE0MDAxZSwKKwkweGM3OCwgMHg3MjE1MDAxZSwKKwkweGM3OCwgMHg3MjE2MDAxZSwKKwkweGM3OCwgMHg3MjE3MDAxZSwKKwkweGM3OCwgMHg3MjE4MDAxZSwKKwkweGM3OCwgMHg3MjE5MDAxZSwKKwkweGM3OCwgMHg3MjFhMDAxZSwKKwkweGM3OCwgMHg3MjFiMDAxZSwKKwkweGM3OCwgMHg3MjFjMDAxZSwKKwkweGM3OCwgMHg3MjFkMDAxZSwKKwkweGM3OCwgMHg3MjFlMDAxZSwKKwkweGM3OCwgMHg3MjFmMDAxZSwKK307CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL3RhYmxlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS90YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZWQ2ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS90YWJsZS5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBSZWFsdGVrIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisgKgorICogTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fSU5DX0hBTDgxOTJTRV9GV19JTUdfSAorI2RlZmluZSBfX0lOQ19IQUw4MTkyU0VfRldfSU1HX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qQ3JlYXRlZCBvbiAgMjAxMC8gNC8xMiwgIDU6NTYqLworCisjZGVmaW5lIFBIWV9SRUdfMlQyUkFSUkFZTEVOR1RIIDM3MgorZXh0ZXJuIHUzMiBydGw4MTkyc2VwaHlfcmVnXzJ0MnJhcnJheVtQSFlfUkVHXzJUMlJBUlJBWUxFTkdUSF07CisjZGVmaW5lIFBIWV9DSEFOR0VUT18xVDFSQVJSQVlMRU5HVEggNDgKK2V4dGVybiB1MzIgcnRsODE5MnNlcGh5X2NoYW5nZXRvXzF0MXJhcnJheVtQSFlfQ0hBTkdFVE9fMVQxUkFSUkFZTEVOR1RIXTsKKyNkZWZpbmUgUEhZX0NIQU5HRVRPXzFUMlJBUlJBWUxFTkdUSCA0NQorZXh0ZXJuIHUzMiBydGw4MTkyc2VwaHlfY2hhbmdldG9fMXQycmFycmF5W1BIWV9DSEFOR0VUT18xVDJSQVJSQVlMRU5HVEhdOworI2RlZmluZSBQSFlfUkVHX0FSUkFZX1BHTEVOR1RIIDg0CitleHRlcm4gdTMyIHJ0bDgxOTJzZXBoeV9yZWdfYXJyYXlfcGdbUEhZX1JFR19BUlJBWV9QR0xFTkdUSF07CisjZGVmaW5lIFJBRElPQV8xVF9BUlJBWUxFTkdUSCAyMDIKK2V4dGVybiB1MzIgcnRsODE5MnNlcmFkaW9hXzF0X2FycmF5W1JBRElPQV8xVF9BUlJBWUxFTkdUSF07CisjZGVmaW5lIFJBRElPQl9BUlJBWUxFTkdUSCAyMgorZXh0ZXJuIHUzMiBydGw4MTkyc2VyYWRpb2JfYXJyYXlbUkFESU9CX0FSUkFZTEVOR1RIXTsKKyNkZWZpbmUgUkFESU9CX0dNX0FSUkFZTEVOR1RIIDEwCitleHRlcm4gdTMyIHJ0bDgxOTJzZXJhZGlvYl9nbV9hcnJheVtSQURJT0JfR01fQVJSQVlMRU5HVEhdOworI2RlZmluZSBNQUNfMlRfQVJSQVlMRU5HVEggMTA2CitleHRlcm4gdTMyIHJ0bDgxOTJzZW1hY18ydF9hcnJheVtNQUNfMlRfQVJSQVlMRU5HVEhdOworI2RlZmluZSBBR0NUQUJfQVJSQVlMRU5HVEggMzIwCitleHRlcm4gdTMyIHJ0bDgxOTJzZWFnY3RhYl9hcnJheVtBR0NUQUJfQVJSQVlMRU5HVEhdOworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvdHJ4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS90cnguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2Y0NDIzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvdHJ4LmMKQEAgLTAsMCArMSw5NzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOS0yMDEwICBSZWFsdGVrIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyAqIFJlYWx0ZWsgQ29ycG9yYXRpb24sIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5jZSBQYXJrLAorICogSHNpbmNodSAzMDAsIFRhaXdhbi4KKyAqCisgKiBMYXJyeSBGaW5nZXIgPExhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiLi4vd2lmaS5oIgorI2luY2x1ZGUgIi4uL3BjaS5oIgorI2luY2x1ZGUgIi4uL2Jhc2UuaCIKKyNpbmNsdWRlICJyZWcuaCIKKyNpbmNsdWRlICJkZWYuaCIKKyNpbmNsdWRlICJwaHkuaCIKKyNpbmNsdWRlICJmdy5oIgorI2luY2x1ZGUgInRyeC5oIgorI2luY2x1ZGUgImxlZC5oIgorCitzdGF0aWMgdTggX3J0bDkyc2VfbWFwX2h3cXVldWVfdG9fZndxdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAl1OCBza2JfcXVldWUpCit7CisJX19sZTE2IGZjID0gcnRsX2dldF9mYyhza2IpOworCisJaWYgKHVubGlrZWx5KGllZWU4MDIxMV9pc19iZWFjb24oZmMpKSkKKwkJcmV0dXJuIFFTTFRfQkVBQ09OOworCWlmIChpZWVlODAyMTFfaXNfbWdtdChmYykpCisJCXJldHVybiBRU0xUX01HTlQ7CisJaWYgKGllZWU4MDIxMV9pc19udWxsZnVuYyhmYykpCisJCXJldHVybiBRU0xUX0hJR0g7CisKKwlyZXR1cm4gc2tiLT5wcmlvcml0eTsKK30KKworc3RhdGljIGludCBfcnRsOTJzZV9yYXRlX21hcHBpbmcoYm9vbCBpc2h0LCB1OCBkZXNjX3JhdGUsIGJvb2wgZmlyc3RfYW1wZHUpCit7CisJaW50IHJhdGVfaWR4ID0gMDsKKworCWlmIChmaXJzdF9hbXBkdSkgeworCQlpZiAoZmFsc2UgPT0gaXNodCkgeworCQkJc3dpdGNoIChkZXNjX3JhdGUpIHsKKwkJCWNhc2UgREVTQzkyU19SQVRFMU06CisJCQkJcmF0ZV9pZHggPSAwOworCQkJCWJyZWFrOworCQkJY2FzZSBERVNDOTJTX1JBVEUyTToKKwkJCQlyYXRlX2lkeCA9IDE7CisJCQkJYnJlYWs7CisJCQljYXNlIERFU0M5MlNfUkFURTVfNU06CisJCQkJcmF0ZV9pZHggPSAyOworCQkJCWJyZWFrOworCQkJY2FzZSBERVNDOTJTX1JBVEUxMU06CisJCQkJcmF0ZV9pZHggPSAzOworCQkJCWJyZWFrOworCQkJY2FzZSBERVNDOTJTX1JBVEU2TToKKwkJCQlyYXRlX2lkeCA9IDQ7CisJCQkJYnJlYWs7CisJCQljYXNlIERFU0M5MlNfUkFURTlNOgorCQkJCXJhdGVfaWR4ID0gNTsKKwkJCQlicmVhazsKKwkJCWNhc2UgREVTQzkyU19SQVRFMTJNOgorCQkJCXJhdGVfaWR4ID0gNjsKKwkJCQlicmVhazsKKwkJCWNhc2UgREVTQzkyU19SQVRFMThNOgorCQkJCXJhdGVfaWR4ID0gNzsKKwkJCQlicmVhazsKKwkJCWNhc2UgREVTQzkyU19SQVRFMjRNOgorCQkJCXJhdGVfaWR4ID0gODsKKwkJCQlicmVhazsKKwkJCWNhc2UgREVTQzkyU19SQVRFMzZNOgorCQkJCXJhdGVfaWR4ID0gOTsKKwkJCQlicmVhazsKKwkJCWNhc2UgREVTQzkyU19SQVRFNDhNOgorCQkJCXJhdGVfaWR4ID0gMTA7CisJCQkJYnJlYWs7CisJCQljYXNlIERFU0M5MlNfUkFURTU0TToKKwkJCQlyYXRlX2lkeCA9IDExOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlyYXRlX2lkeCA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQlyYXRlX2lkeCA9IDExOworCQl9CisKKwkJcmV0dXJuIHJhdGVfaWR4OworCX0KKworCXN3aXRjaCAoZGVzY19yYXRlKSB7CisJY2FzZSBERVNDOTJTX1JBVEUxTToKKwkJcmF0ZV9pZHggPSAwOworCQlicmVhazsKKwljYXNlIERFU0M5MlNfUkFURTJNOgorCQlyYXRlX2lkeCA9IDE7CisJCWJyZWFrOworCWNhc2UgREVTQzkyU19SQVRFNV81TToKKwkJcmF0ZV9pZHggPSAyOworCQlicmVhazsKKwljYXNlIERFU0M5MlNfUkFURTExTToKKwkJcmF0ZV9pZHggPSAzOworCQlicmVhazsKKwljYXNlIERFU0M5MlNfUkFURTZNOgorCQlyYXRlX2lkeCA9IDQ7CisJCWJyZWFrOworCWNhc2UgREVTQzkyU19SQVRFOU06CisJCXJhdGVfaWR4ID0gNTsKKwkJYnJlYWs7CisJY2FzZSBERVNDOTJTX1JBVEUxMk06CisJCXJhdGVfaWR4ID0gNjsKKwkJYnJlYWs7CisJY2FzZSBERVNDOTJTX1JBVEUxOE06CisJCXJhdGVfaWR4ID0gNzsKKwkJYnJlYWs7CisJY2FzZSBERVNDOTJTX1JBVEUyNE06CisJCXJhdGVfaWR4ID0gODsKKwkJYnJlYWs7CisJY2FzZSBERVNDOTJTX1JBVEUzNk06CisJCXJhdGVfaWR4ID0gOTsKKwkJYnJlYWs7CisJY2FzZSBERVNDOTJTX1JBVEU0OE06CisJCXJhdGVfaWR4ID0gMTA7CisJCWJyZWFrOworCWNhc2UgREVTQzkyU19SQVRFNTRNOgorCQlyYXRlX2lkeCA9IDExOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyYXRlX2lkeCA9IDExOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJhdGVfaWR4OworfQorCitzdGF0aWMgdTggX3J0bDkyc19xdWVyeV9yeHB3cnBlcmNlbnRhZ2UoY2hhciBhbnRwb3dlcikKK3sKKwlpZiAoKGFudHBvd2VyIDw9IC0xMDApIHx8IChhbnRwb3dlciA+PSAyMCkpCisJCXJldHVybiAwOworCWVsc2UgaWYgKGFudHBvd2VyID49IDApCisJCXJldHVybiAxMDA7CisJZWxzZQorCQlyZXR1cm4gMTAwICsgYW50cG93ZXI7Cit9CisKK3N0YXRpYyB1OCBfcnRsOTJzX2V2bV9kYl90b19wZXJjZW50YWdlKGNoYXIgdmFsdWUpCit7CisJY2hhciByZXRfdmFsOworCXJldF92YWwgPSB2YWx1ZTsKKworCWlmIChyZXRfdmFsID49IDApCisJCXJldF92YWwgPSAwOworCisJaWYgKHJldF92YWwgPD0gLTMzKQorCQlyZXRfdmFsID0gLTMzOworCisJcmV0X3ZhbCA9IDAgLSByZXRfdmFsOworCXJldF92YWwgKj0gMzsKKworCWlmIChyZXRfdmFsID09IDk5KQorCQlyZXRfdmFsID0gMTAwOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKK3N0YXRpYyBsb25nIF9ydGw5MnNlX3RyYW5zbGF0ZV90b2RibShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgIHU4IHNpZ25hbF9zdHJlbmd0aF9pbmRleCkKK3sKKwlsb25nIHNpZ25hbF9wb3dlcjsKKworCXNpZ25hbF9wb3dlciA9IChsb25nKSgoc2lnbmFsX3N0cmVuZ3RoX2luZGV4ICsgMSkgPj4gMSk7CisJc2lnbmFsX3Bvd2VyIC09IDk1OworCXJldHVybiBzaWduYWxfcG93ZXI7Cit9CisKK3N0YXRpYyBsb25nIF9ydGw5MnNlX3NpZ25hbF9zY2FsZV9tYXBwaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQlsb25nIGN1cnJzaWcpCit7CisJbG9uZyByZXRzaWcgPSAwOworCisJLyogU3RlcCAxLiBTY2FsZSBtYXBwaW5nLiAqLworCWlmIChjdXJyc2lnID4gNDcpCisJCXJldHNpZyA9IDEwMDsKKwllbHNlIGlmIChjdXJyc2lnID4gMTQgJiYgY3VycnNpZyA8PSA0NykKKwkJcmV0c2lnID0gMTAwIC0gKCg0NyAtIGN1cnJzaWcpICogMykgLyAyOworCWVsc2UgaWYgKGN1cnJzaWcgPiAyICYmIGN1cnJzaWcgPD0gMTQpCisJCXJldHNpZyA9IDQ4IC0gKCgxNCAtIGN1cnJzaWcpICogMTUpIC8gNzsKKwllbHNlIGlmIChjdXJyc2lnID49IDApCisJCXJldHNpZyA9IGN1cnJzaWcgKiA5ICsgMTsKKworCXJldHVybiByZXRzaWc7Cit9CisKKworc3RhdGljIHZvaWQgX3J0bDkyc2VfcXVlcnlfcnhwaHlzdGF0dXMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgIHN0cnVjdCBydGxfc3RhdHMgKnBzdGF0cywgdTggKnBkZXNjLAorCQkJCSAgICAgICBzdHJ1Y3QgcnhfZndpbmZvICpwX2RydmluZm8sCisJCQkJICAgICAgIGJvb2wgcGFja2V0X21hdGNoX2Jzc2lkLAorCQkJCSAgICAgICBib29sIHBhY2tldF90b3NlbGYsCisJCQkJICAgICAgIGJvb2wgcGFja2V0X2JlYWNvbikKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHBoeV9zdHNfY2NrXzgxOTJzX3QgKmNja19idWY7CisJczggcnhfcHdyX2FsbCA9IDAsIHJ4X3B3cls0XTsKKwl1OCByZl9yeF9udW0gPSAwLCBldm0sIHB3ZGJfYWxsOworCXU4IGksIG1heF9zcGF0aWFsX3N0cmVhbTsKKwl1MzIgcnNzaSwgdG90YWxfcnNzaSA9IDA7CisJYm9vbCBpbl9wb3dlcnNhdmVtb2RlID0gZmFsc2U7CisJYm9vbCBpc19jY2tfcmF0ZTsKKworCWlzX2Nja19yYXRlID0gUlhfSEFMX0lTX0NDS19SQVRFKHBkZXNjKTsKKwlwc3RhdHMtPnBhY2tldF9tYXRjaGJzc2lkID0gcGFja2V0X21hdGNoX2Jzc2lkOworCXBzdGF0cy0+cGFja2V0X3Rvc2VsZiA9IHBhY2tldF90b3NlbGY7CisJcHN0YXRzLT5pc19jY2sgPSBpc19jY2tfcmF0ZTsKKwlwc3RhdHMtPnBhY2tldF9iZWFjb24gPSBwYWNrZXRfYmVhY29uOworCXBzdGF0cy0+aXNfY2NrID0gaXNfY2NrX3JhdGU7CisJcHN0YXRzLT5yeF9taW1vX3NpZ25hbHF1YWxpdHlbMF0gPSAtMTsKKwlwc3RhdHMtPnJ4X21pbW9fc2lnbmFscXVhbGl0eVsxXSA9IC0xOworCisJaWYgKGlzX2Nja19yYXRlKSB7CisJCXU4IHJlcG9ydCwgY2NrX2hpZ2hwd3I7CisJCWNja19idWYgPSAoc3RydWN0IHBoeV9zdHNfY2NrXzgxOTJzX3QgKilwX2RydmluZm87CisKKwkJaWYgKCFpbl9wb3dlcnNhdmVtb2RlKQorCQkJY2NrX2hpZ2hwd3IgPSAodTgpIHJ0bF9nZXRfYmJyZWcoaHcsCisJCQkJCQlSRlBHQTBfWEFfSFNTSVBBUkFNRVRFUjIsCisJCQkJCQkweDIwMCk7CisJCWVsc2UKKwkJCWNja19oaWdocHdyID0gZmFsc2U7CisKKwkJaWYgKCFjY2tfaGlnaHB3cikgeworCQkJdTggY2NrX2FnY19ycHQgPSBjY2tfYnVmLT5jY2tfYWdjX3JwdDsKKwkJCXJlcG9ydCA9IGNja19idWYtPmNja19hZ2NfcnB0ICYgMHhjMDsKKwkJCXJlcG9ydCA9IHJlcG9ydCA+PiA2OworCQkJc3dpdGNoIChyZXBvcnQpIHsKKwkJCWNhc2UgMHgzOgorCQkJCXJ4X3B3cl9hbGwgPSAtNDAgLSAoY2NrX2FnY19ycHQgJiAweDNlKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHgyOgorCQkJCXJ4X3B3cl9hbGwgPSAtMjAgLSAoY2NrX2FnY19ycHQgJiAweDNlKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHgxOgorCQkJCXJ4X3B3cl9hbGwgPSAtMiAtIChjY2tfYWdjX3JwdCAmIDB4M2UpOworCQkJCWJyZWFrOworCQkJY2FzZSAweDA6CisJCQkJcnhfcHdyX2FsbCA9IDE0IC0gKGNja19hZ2NfcnB0ICYgMHgzZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQl1OCBjY2tfYWdjX3JwdCA9IGNja19idWYtPmNja19hZ2NfcnB0OworCQkJcmVwb3J0ID0gcF9kcnZpbmZvLT5jZm9zaG9bMF0gJiAweDYwOworCQkJcmVwb3J0ID0gcmVwb3J0ID4+IDU7CisJCQlzd2l0Y2ggKHJlcG9ydCkgeworCQkJY2FzZSAweDM6CisJCQkJcnhfcHdyX2FsbCA9IC00MCAtICgoY2NrX2FnY19ycHQgJiAweDFmKSA8PCAxKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHgyOgorCQkJCXJ4X3B3cl9hbGwgPSAtMjAgLSAoKGNja19hZ2NfcnB0ICYgMHgxZikgPDwgMSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4MToKKwkJCQlyeF9wd3JfYWxsID0gLTIgLSAoKGNja19hZ2NfcnB0ICYgMHgxZikgPDwgMSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4MDoKKwkJCQlyeF9wd3JfYWxsID0gMTQgLSAoKGNja19hZ2NfcnB0ICYgMHgxZikgPDwgMSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlwd2RiX2FsbCA9IF9ydGw5MnNfcXVlcnlfcnhwd3JwZXJjZW50YWdlKHJ4X3B3cl9hbGwpOworCisJCS8qIENDSyBnYWluIGlzIHNtYWxsZXIgdGhhbiBPRkRNL01DUyBnYWluLCAgKi8KKwkJLyogc28gd2UgYWRkIGdhaW4gZGlmZiBieSBleHBlcmllbmNlcywgdGhlIHZhbCBpcyA2ICovCisJCXB3ZGJfYWxsICs9IDY7CisJCWlmIChwd2RiX2FsbCA+IDEwMCkKKwkJCXB3ZGJfYWxsID0gMTAwOworCQkvKiBtb2RpZnkgdGhlIG9mZnNldCB0byBtYWtlIHRoZSBzYW1lIGdhaW4gaW5kZXggd2l0aCBPRkRNLiAqLworCQlpZiAocHdkYl9hbGwgPiAzNCAmJiBwd2RiX2FsbCA8PSA0MikKKwkJCXB3ZGJfYWxsIC09IDI7CisJCWVsc2UgaWYgKHB3ZGJfYWxsID4gMjYgJiYgcHdkYl9hbGwgPD0gMzQpCisJCQlwd2RiX2FsbCAtPSA2OworCQllbHNlIGlmIChwd2RiX2FsbCA+IDE0ICYmIHB3ZGJfYWxsIDw9IDI2KQorCQkJcHdkYl9hbGwgLT0gODsKKwkJZWxzZSBpZiAocHdkYl9hbGwgPiA0ICYmIHB3ZGJfYWxsIDw9IDE0KQorCQkJcHdkYl9hbGwgLT0gNDsKKworCQlwc3RhdHMtPnJ4X3B3ZGJfYWxsID0gcHdkYl9hbGw7CisJCXBzdGF0cy0+cmVjdnNpZ25hbHBvd2VyID0gcnhfcHdyX2FsbDsKKworCQlpZiAocGFja2V0X21hdGNoX2Jzc2lkKSB7CisJCQl1OCBzcTsKKwkJCWlmIChwc3RhdHMtPnJ4X3B3ZGJfYWxsID4gNDApIHsKKwkJCQlzcSA9IDEwMDsKKwkJCX0gZWxzZSB7CisJCQkJc3EgPSBjY2tfYnVmLT5zcV9ycHQ7CisJCQkJaWYgKHNxID4gNjQpCisJCQkJCXNxID0gMDsKKwkJCQllbHNlIGlmIChzcSA8IDIwKQorCQkJCQlzcSA9IDEwMDsKKwkJCQllbHNlCisJCQkJCXNxID0gKCg2NCAtIHNxKSAqIDEwMCkgLyA0NDsKKwkJCX0KKworCQkJcHN0YXRzLT5zaWduYWxxdWFsaXR5ID0gc3E7CisJCQlwc3RhdHMtPnJ4X21pbW9fc2lnbmFscXVhbGl0eVswXSA9IHNxOworCQkJcHN0YXRzLT5yeF9taW1vX3NpZ25hbHF1YWxpdHlbMV0gPSAtMTsKKwkJfQorCX0gZWxzZSB7CisJCXJ0bHByaXYtPmRtLnJmcGF0aF9yeGVuYWJsZVswXSA9CisJCSAgICBydGxwcml2LT5kbS5yZnBhdGhfcnhlbmFibGVbMV0gPSB0cnVlOworCQlmb3IgKGkgPSBSRjkwX1BBVEhfQTsgaSA8IFJGOTBfUEFUSF9NQVg7IGkrKykgeworCQkJaWYgKHJ0bHByaXYtPmRtLnJmcGF0aF9yeGVuYWJsZVtpXSkKKwkJCQlyZl9yeF9udW0rKzsKKworCQkJcnhfcHdyW2ldID0gKChwX2RydmluZm8tPmdhaW5fdHJzd1tpXSAmCisJCQkJICAgIDB4M2YpICogMikgLSAxMTA7CisJCQlyc3NpID0gX3J0bDkyc19xdWVyeV9yeHB3cnBlcmNlbnRhZ2UocnhfcHdyW2ldKTsKKwkJCXRvdGFsX3Jzc2kgKz0gcnNzaTsKKwkJCXJ0bHByaXYtPnN0YXRzLnJ4X3Nucl9kYltpXSA9CisJCQkJCSAobG9uZykocF9kcnZpbmZvLT5yeHNucltpXSAvIDIpOworCisJCQlpZiAocGFja2V0X21hdGNoX2Jzc2lkKQorCQkJCXBzdGF0cy0+cnhfbWltb19zaWduYWxzdHJlbmd0aFtpXSA9ICh1OCkgcnNzaTsKKwkJfQorCisJCXJ4X3B3cl9hbGwgPSAoKHBfZHJ2aW5mby0+cHdkYl9hbGwgPj4gMSkgJiAweDdmKSAtIDExMDsKKwkJcHdkYl9hbGwgPSBfcnRsOTJzX3F1ZXJ5X3J4cHdycGVyY2VudGFnZShyeF9wd3JfYWxsKTsKKwkJcHN0YXRzLT5yeF9wd2RiX2FsbCA9IHB3ZGJfYWxsOworCQlwc3RhdHMtPnJ4cG93ZXIgPSByeF9wd3JfYWxsOworCQlwc3RhdHMtPnJlY3ZzaWduYWxwb3dlciA9IHJ4X3B3cl9hbGw7CisKKwkJaWYgKEdFVF9SWF9TVEFUVVNfREVTQ19SWF9IVChwZGVzYykgJiYKKwkJCUdFVF9SWF9TVEFUVVNfREVTQ19SWF9NQ1MocGRlc2MpID49IERFU0M5MlNfUkFURU1DUzggJiYKKwkJICAgIEdFVF9SWF9TVEFUVVNfREVTQ19SWF9NQ1MocGRlc2MpIDw9IERFU0M5MlNfUkFURU1DUzE1KQorCQkJbWF4X3NwYXRpYWxfc3RyZWFtID0gMjsKKwkJZWxzZQorCQkJbWF4X3NwYXRpYWxfc3RyZWFtID0gMTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbWF4X3NwYXRpYWxfc3RyZWFtOyBpKyspIHsKKwkJCWV2bSA9IF9ydGw5MnNfZXZtX2RiX3RvX3BlcmNlbnRhZ2UocF9kcnZpbmZvLT5yeGV2bVtpXSk7CisKKwkJCWlmIChwYWNrZXRfbWF0Y2hfYnNzaWQpIHsKKwkJCQlpZiAoaSA9PSAwKQorCQkJCQlwc3RhdHMtPnNpZ25hbHF1YWxpdHkgPSAodTgpKGV2bSAmCisJCQkJCQkJCSAweGZmKTsKKwkJCQlwc3RhdHMtPnJ4X21pbW9fc2lnbmFscXVhbGl0eVtpXSA9CisJCQkJCQkJICh1OCkgKGV2bSAmIDB4ZmYpOworCQkJfQorCQl9CisJfQorCisJaWYgKGlzX2Nja19yYXRlKQorCQlwc3RhdHMtPnNpZ25hbHN0cmVuZ3RoID0gKHU4KShfcnRsOTJzZV9zaWduYWxfc2NhbGVfbWFwcGluZyhodywKKwkJCQkJIHB3ZGJfYWxsKSk7CisJZWxzZSBpZiAocmZfcnhfbnVtICE9IDApCisJCXBzdGF0cy0+c2lnbmFsc3RyZW5ndGggPSAodTgpIChfcnRsOTJzZV9zaWduYWxfc2NhbGVfbWFwcGluZyhodywKKwkJCQl0b3RhbF9yc3NpIC89IHJmX3J4X251bSkpOworfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzZV9wcm9jZXNzX3VpX3Jzc2koc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICBzdHJ1Y3QgcnRsX3N0YXRzICpwc3RhdHMpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfcGh5ICpydGxwaHkgPSAmKHJ0bHByaXYtPnBoeSk7CisJdTggcmZwYXRoOworCXUzMiBsYXN0X3Jzc2ksIHRtcHZhbDsKKworCWlmIChwc3RhdHMtPnBhY2tldF90b3NlbGYgfHwgcHN0YXRzLT5wYWNrZXRfYmVhY29uKSB7CisJCXJ0bHByaXYtPnN0YXRzLnJzc2lfY2FsY3VsYXRlX2NudCsrOworCisJCWlmIChydGxwcml2LT5zdGF0cy51aV9yc3NpLnRvdGFsX251bSsrID49CisJCSAgICBQSFlfUlNTSV9TTElEX1dJTl9NQVgpIHsKKwkJCXJ0bHByaXYtPnN0YXRzLnVpX3Jzc2kudG90YWxfbnVtID0KKwkJCQkJIFBIWV9SU1NJX1NMSURfV0lOX01BWDsKKwkJCWxhc3RfcnNzaSA9IHJ0bHByaXYtPnN0YXRzLnVpX3Jzc2kuZWxlbWVudHNbCisJCQkJcnRscHJpdi0+c3RhdHMudWlfcnNzaS5pbmRleF07CisJCQlydGxwcml2LT5zdGF0cy51aV9yc3NpLnRvdGFsX3ZhbCAtPSBsYXN0X3Jzc2k7CisJCX0KKworCQlydGxwcml2LT5zdGF0cy51aV9yc3NpLnRvdGFsX3ZhbCArPSBwc3RhdHMtPnNpZ25hbHN0cmVuZ3RoOworCQlydGxwcml2LT5zdGF0cy51aV9yc3NpLmVsZW1lbnRzW3J0bHByaXYtPnN0YXRzLnVpX3Jzc2kuaW5kZXgrK10KKwkJCSA9IHBzdGF0cy0+c2lnbmFsc3RyZW5ndGg7CisKKwkJaWYgKHJ0bHByaXYtPnN0YXRzLnVpX3Jzc2kuaW5kZXggPj0gUEhZX1JTU0lfU0xJRF9XSU5fTUFYKQorCQkJcnRscHJpdi0+c3RhdHMudWlfcnNzaS5pbmRleCA9IDA7CisKKwkJdG1wdmFsID0gcnRscHJpdi0+c3RhdHMudWlfcnNzaS50b3RhbF92YWwgLworCQkJcnRscHJpdi0+c3RhdHMudWlfcnNzaS50b3RhbF9udW07CisJCXJ0bHByaXYtPnN0YXRzLnNpZ25hbF9zdHJlbmd0aCA9IF9ydGw5MnNlX3RyYW5zbGF0ZV90b2RibShodywKKwkJCQkJCQkJKHU4KSB0bXB2YWwpOworCQlwc3RhdHMtPnJzc2kgPSBydGxwcml2LT5zdGF0cy5zaWduYWxfc3RyZW5ndGg7CisJfQorCisJaWYgKCFwc3RhdHMtPmlzX2NjayAmJiBwc3RhdHMtPnBhY2tldF90b3NlbGYpIHsKKwkJZm9yIChyZnBhdGggPSBSRjkwX1BBVEhfQTsgcmZwYXRoIDwgcnRscGh5LT5udW1fdG90YWxfcmZwYXRoOworCQkgICAgIHJmcGF0aCsrKSB7CisJCQlpZiAocnRscHJpdi0+c3RhdHMucnhfcnNzaV9wZXJjZW50YWdlW3JmcGF0aF0gPT0gMCkgeworCQkJCXJ0bHByaXYtPnN0YXRzLnJ4X3Jzc2lfcGVyY2VudGFnZVtyZnBhdGhdID0KKwkJCQkgICAgcHN0YXRzLT5yeF9taW1vX3NpZ25hbHN0cmVuZ3RoW3JmcGF0aF07CisKKwkJCX0KKworCQkJaWYgKHBzdGF0cy0+cnhfbWltb19zaWduYWxzdHJlbmd0aFtyZnBhdGhdID4KKwkJCSAgICBydGxwcml2LT5zdGF0cy5yeF9yc3NpX3BlcmNlbnRhZ2VbcmZwYXRoXSkgeworCQkJCXJ0bHByaXYtPnN0YXRzLnJ4X3Jzc2lfcGVyY2VudGFnZVtyZnBhdGhdID0KKwkJCQkgICAgKChydGxwcml2LT5zdGF0cy5yeF9yc3NpX3BlcmNlbnRhZ2VbcmZwYXRoXQorCQkJCSAgICAqIChSWF9TTU9PVEhfRkFDVE9SIC0gMSkpICsKKwkJCQkgICAgKHBzdGF0cy0+cnhfbWltb19zaWduYWxzdHJlbmd0aFtyZnBhdGhdKSkgLworCQkJCSAgICAoUlhfU01PT1RIX0ZBQ1RPUik7CisKKwkJCQlydGxwcml2LT5zdGF0cy5yeF9yc3NpX3BlcmNlbnRhZ2VbcmZwYXRoXSA9CisJCQkJICAgIHJ0bHByaXYtPnN0YXRzLnJ4X3Jzc2lfcGVyY2VudGFnZVtyZnBhdGhdCisJCQkJICAgICsgMTsKKwkJCX0gZWxzZSB7CisJCQkJcnRscHJpdi0+c3RhdHMucnhfcnNzaV9wZXJjZW50YWdlW3JmcGF0aF0gPQorCQkJCSAgICAoKHJ0bHByaXYtPnN0YXRzLnJ4X3Jzc2lfcGVyY2VudGFnZVtyZnBhdGhdCisJCQkJICAgICogKFJYX1NNT09USF9GQUNUT1IgLSAxKSkgKworCQkJCSAgICAocHN0YXRzLT5yeF9taW1vX3NpZ25hbHN0cmVuZ3RoW3JmcGF0aF0pKSAvCisJCQkJICAgIChSWF9TTU9PVEhfRkFDVE9SKTsKKwkJCX0KKworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzZV91cGRhdGVfcnhzaWduYWxzdGF0aXN0aWNzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICAgICAgc3RydWN0IHJ0bF9zdGF0cyAqcHN0YXRzKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwlpbnQgd2VpZ2h0aW5nID0gMDsKKworCWlmIChydGxwcml2LT5zdGF0cy5yZWN2X3NpZ25hbF9wb3dlciA9PSAwKQorCQlydGxwcml2LT5zdGF0cy5yZWN2X3NpZ25hbF9wb3dlciA9IHBzdGF0cy0+cmVjdnNpZ25hbHBvd2VyOworCisJaWYgKHBzdGF0cy0+cmVjdnNpZ25hbHBvd2VyID4gcnRscHJpdi0+c3RhdHMucmVjdl9zaWduYWxfcG93ZXIpCisJCXdlaWdodGluZyA9IDU7CisJZWxzZSBpZiAocHN0YXRzLT5yZWN2c2lnbmFscG93ZXIgPCBydGxwcml2LT5zdGF0cy5yZWN2X3NpZ25hbF9wb3dlcikKKwkJd2VpZ2h0aW5nID0gKC01KTsKKworCXJ0bHByaXYtPnN0YXRzLnJlY3Zfc2lnbmFsX3Bvd2VyID0gKHJ0bHByaXYtPnN0YXRzLnJlY3Zfc2lnbmFsX3Bvd2VyICogNQorCQkJCQkgICArIHBzdGF0cy0+cmVjdnNpZ25hbHBvd2VyICsKKwkJCQkJICAgd2VpZ2h0aW5nKSAvIDY7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MnNlX3Byb2Nlc3NfcHdkYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgIHN0cnVjdCBydGxfc3RhdHMgKnBzdGF0cykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJc3RydWN0IHJ0bF9tYWMgKm1hYyA9IHJ0bF9tYWMocnRsX3ByaXYoaHcpKTsKKwlsb25nIHVuZGVjX3NtX3B3ZGIgPSAwOworCisJaWYgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCXJldHVybjsKKwl9IGVsc2UgeworCQl1bmRlY19zbV9wd2RiID0KKwkJICAgIHJ0bHByaXYtPmRtLnVuZGVjb3JhdGVkX3Ntb290aGVkX3B3ZGI7CisJfQorCisJaWYgKHBzdGF0cy0+cGFja2V0X3Rvc2VsZiB8fCBwc3RhdHMtPnBhY2tldF9iZWFjb24pIHsKKwkJaWYgKHVuZGVjX3NtX3B3ZGIgPCAwKQorCQkJdW5kZWNfc21fcHdkYiA9IHBzdGF0cy0+cnhfcHdkYl9hbGw7CisKKwkJaWYgKHBzdGF0cy0+cnhfcHdkYl9hbGwgPiAodTMyKSB1bmRlY19zbV9wd2RiKSB7CisJCQl1bmRlY19zbV9wd2RiID0KKwkJCSAgICAoKCh1bmRlY19zbV9wd2RiKSAqCisJCQkgICAgKFJYX1NNT09USF9GQUNUT1IgLSAxKSkgKworCQkJICAgIChwc3RhdHMtPnJ4X3B3ZGJfYWxsKSkgLyAoUlhfU01PT1RIX0ZBQ1RPUik7CisKKwkJCXVuZGVjX3NtX3B3ZGIgPSB1bmRlY19zbV9wd2RiICsgMTsKKwkJfSBlbHNlIHsKKwkJCXVuZGVjX3NtX3B3ZGIgPSAoKCh1bmRlY19zbV9wd2RiKSAqCisJCQkgICAgICAoUlhfU01PT1RIX0ZBQ1RPUiAtIDEpKSArIChwc3RhdHMtPnJ4X3B3ZGJfYWxsKSkgLworCQkJICAgICAgKFJYX1NNT09USF9GQUNUT1IpOworCQl9CisKKwkJcnRscHJpdi0+ZG0udW5kZWNvcmF0ZWRfc21vb3RoZWRfcHdkYiA9IHVuZGVjX3NtX3B3ZGI7CisJCV9ydGw5MnNlX3VwZGF0ZV9yeHNpZ25hbHN0YXRpc3RpY3MoaHcsIHBzdGF0cyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBydGxfOTJzX3Byb2Nlc3Nfc3RyZWFtcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgc3RydWN0IHJ0bF9zdGF0cyAqcHN0YXRzKQoreworCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MzIgc3RyZWFtOworCisJZm9yIChzdHJlYW0gPSAwOyBzdHJlYW0gPCAyOyBzdHJlYW0rKykgeworCQlpZiAocHN0YXRzLT5yeF9taW1vX3NpZ25hbHF1YWxpdHlbc3RyZWFtXSAhPSAtMSkgeworCQkJaWYgKHJ0bHByaXYtPnN0YXRzLnJ4X2V2bV9wZXJjZW50YWdlW3N0cmVhbV0gPT0gMCkgeworCQkJCXJ0bHByaXYtPnN0YXRzLnJ4X2V2bV9wZXJjZW50YWdlW3N0cmVhbV0gPQorCQkJCSAgICBwc3RhdHMtPnJ4X21pbW9fc2lnbmFscXVhbGl0eVtzdHJlYW1dOworCQkJfQorCisJCQlydGxwcml2LT5zdGF0cy5yeF9ldm1fcGVyY2VudGFnZVtzdHJlYW1dID0KKwkJCSAgICAoKHJ0bHByaXYtPnN0YXRzLnJ4X2V2bV9wZXJjZW50YWdlW3N0cmVhbV0gKgorCQkJCQkoUlhfU01PT1RIX0ZBQ1RPUiAtIDEpKSArCisJCQkgICAgIChwc3RhdHMtPnJ4X21pbW9fc2lnbmFscXVhbGl0eVtzdHJlYW1dICoKKwkJCQkJMSkpIC8gKFJYX1NNT09USF9GQUNUT1IpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBfcnRsOTJzZV9wcm9jZXNzX3VpX2xpbmtfcXVhbGl0eShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJICAgICBzdHJ1Y3QgcnRsX3N0YXRzICpwc3RhdHMpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXUzMiBsYXN0X2V2bSA9IDAsIHRtcHZhbDsKKworCWlmIChwc3RhdHMtPnNpZ25hbHF1YWxpdHkgIT0gMCkgeworCQlpZiAocHN0YXRzLT5wYWNrZXRfdG9zZWxmIHx8IHBzdGF0cy0+cGFja2V0X2JlYWNvbikgeworCisJCQlpZiAocnRscHJpdi0+c3RhdHMudWlfbGlua19xdWFsaXR5LnRvdGFsX251bSsrID49CisJCQkgICAgUEhZX0xJTktRVUFMSVRZX1NMSURfV0lOX01BWCkgeworCQkJCXJ0bHByaXYtPnN0YXRzLnVpX2xpbmtfcXVhbGl0eS50b3RhbF9udW0gPQorCQkJCSAgICBQSFlfTElOS1FVQUxJVFlfU0xJRF9XSU5fTUFYOworCQkJCWxhc3RfZXZtID0KKwkJCQkgICAgcnRscHJpdi0+c3RhdHMudWlfbGlua19xdWFsaXR5LmVsZW1lbnRzWworCQkJCSAgICBydGxwcml2LT5zdGF0cy51aV9saW5rX3F1YWxpdHkuaW5kZXhdOworCQkJCXJ0bHByaXYtPnN0YXRzLnVpX2xpbmtfcXVhbGl0eS50b3RhbF92YWwgLT0KKwkJCQkgICAgbGFzdF9ldm07CisJCQl9CisKKwkJCXJ0bHByaXYtPnN0YXRzLnVpX2xpbmtfcXVhbGl0eS50b3RhbF92YWwgKz0KKwkJCSAgICBwc3RhdHMtPnNpZ25hbHF1YWxpdHk7CisJCQlydGxwcml2LT5zdGF0cy51aV9saW5rX3F1YWxpdHkuZWxlbWVudHNbCisJCQkJcnRscHJpdi0+c3RhdHMudWlfbGlua19xdWFsaXR5LmluZGV4KytdID0KKwkJCSAgICBwc3RhdHMtPnNpZ25hbHF1YWxpdHk7CisKKwkJCWlmIChydGxwcml2LT5zdGF0cy51aV9saW5rX3F1YWxpdHkuaW5kZXggPj0KKwkJCSAgICBQSFlfTElOS1FVQUxJVFlfU0xJRF9XSU5fTUFYKQorCQkJCXJ0bHByaXYtPnN0YXRzLnVpX2xpbmtfcXVhbGl0eS5pbmRleCA9IDA7CisKKwkJCXRtcHZhbCA9IHJ0bHByaXYtPnN0YXRzLnVpX2xpbmtfcXVhbGl0eS50b3RhbF92YWwgLworCQkJICAgIHJ0bHByaXYtPnN0YXRzLnVpX2xpbmtfcXVhbGl0eS50b3RhbF9udW07CisJCQlydGxwcml2LT5zdGF0cy5zaWduYWxfcXVhbGl0eSA9IHRtcHZhbDsKKworCQkJcnRscHJpdi0+c3RhdHMubGFzdF9zaWdzdHJlbmd0aF9pbnBlcmNlbnQgPSB0bXB2YWw7CisKKwkJCXJ0bF85MnNfcHJvY2Vzc19zdHJlYW1zKGh3LCBwc3RhdHMpOworCisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw5MnNlX3Byb2Nlc3NfcGh5aW5mbyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgIHU4ICpidWZmZXIsCisJCQkJICAgICBzdHJ1Y3QgcnRsX3N0YXRzICpwY3VycmVudF9zdGF0cykKK3sKKworCWlmICghcGN1cnJlbnRfc3RhdHMtPnBhY2tldF9tYXRjaGJzc2lkICYmCisJICAgICFwY3VycmVudF9zdGF0cy0+cGFja2V0X2JlYWNvbikKKwkJcmV0dXJuOworCisJX3J0bDkyc2VfcHJvY2Vzc191aV9yc3NpKGh3LCBwY3VycmVudF9zdGF0cyk7CisJX3J0bDkyc2VfcHJvY2Vzc19wd2RiKGh3LCBwY3VycmVudF9zdGF0cyk7CisJX3J0bDkyc2VfcHJvY2Vzc191aV9saW5rX3F1YWxpdHkoaHcsIHBjdXJyZW50X3N0YXRzKTsKK30KKworc3RhdGljIHZvaWQgX3J0bDkyc2VfdHJhbnNsYXRlX3J4X3NpZ25hbF9zdHVmZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJ0bF9zdGF0cyAqcHN0YXRzLAorCQl1OCAqcGRlc2MsIHN0cnVjdCByeF9md2luZm8gKnBfZHJ2aW5mbykKK3sKKwlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOworCXN0cnVjdCBydGxfZWZ1c2UgKnJ0bGVmdXNlID0gcnRsX2VmdXNlKHJ0bF9wcml2KGh3KSk7CisKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCXU4ICp0bXBfYnVmOworCXU4ICpwcmFkZHI7CisJdTggKnBzYWRkcjsKKwlfX2xlMTYgZmM7CisJdTE2IHR5cGUsIGNmYzsKKwlib29sIHBhY2tldF9tYXRjaGJzc2lkLCBwYWNrZXRfdG9zZWxmLCBwYWNrZXRfYmVhY29uOworCisJdG1wX2J1ZiA9IHNrYi0+ZGF0YSArIHBzdGF0cy0+cnhfZHJ2aW5mb19zaXplICsgcHN0YXRzLT5yeF9idWZzaGlmdDsKKworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXRtcF9idWY7CisJZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CisJY2ZjID0gbGUxNl90b19jcHUoZmMpOworCXR5cGUgPSBXTEFOX0ZDX0dFVF9UWVBFKGZjKTsKKwlwcmFkZHIgPSBoZHItPmFkZHIxOworCXBzYWRkciA9IGhkci0+YWRkcjI7CisKKwlwYWNrZXRfbWF0Y2hic3NpZCA9ICgoSUVFRTgwMjExX0ZUWVBFX0NUTCAhPSB0eXBlKSAmJgorCSAgICAgKCFjb21wYXJlX2V0aGVyX2FkZHIobWFjLT5ic3NpZCwgKGNmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMpID8KKwkJCWhkci0+YWRkcjEgOiAoY2ZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKSA/CisJCQloZHItPmFkZHIyIDogaGRyLT5hZGRyMykpICYmICghcHN0YXRzLT5od2Vycm9yKSAmJgorCQkJKCFwc3RhdHMtPmNyYykgJiYgKCFwc3RhdHMtPmljdikpOworCisJcGFja2V0X3Rvc2VsZiA9IHBhY2tldF9tYXRjaGJzc2lkICYmCisJICAgICghY29tcGFyZV9ldGhlcl9hZGRyKHByYWRkciwgcnRsZWZ1c2UtPmRldl9hZGRyKSk7CisKKwlpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihmYykpCisJCXBhY2tldF9iZWFjb24gPSB0cnVlOworCisJX3J0bDkyc2VfcXVlcnlfcnhwaHlzdGF0dXMoaHcsIHBzdGF0cywgcGRlc2MsIHBfZHJ2aW5mbywKKwkJCXBhY2tldF9tYXRjaGJzc2lkLCBwYWNrZXRfdG9zZWxmLCBwYWNrZXRfYmVhY29uKTsKKwlfcnRsOTJzZV9wcm9jZXNzX3BoeWluZm8oaHcsIHRtcF9idWYsIHBzdGF0cyk7Cit9CisKK2Jvb2wgcnRsOTJzZV9yeF9xdWVyeV9kZXNjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgcnRsX3N0YXRzICpzdGF0cywKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMsIHU4ICpwZGVzYywKKwkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHJ4X2Z3aW5mbyAqcF9kcnZpbmZvOworCXUzMiBwaHlzdGF0dXMgPSAodTMyKUdFVF9SWF9TVEFUVVNfREVTQ19QSFlfU1RBVFVTKHBkZXNjKTsKKworCXN0YXRzLT5sZW5ndGggPSAodTE2KUdFVF9SWF9TVEFUVVNfREVTQ19QS1RfTEVOKHBkZXNjKTsKKwlzdGF0cy0+cnhfZHJ2aW5mb19zaXplID0gKHU4KUdFVF9SWF9TVEFUVVNfREVTQ19EUlZJTkZPX1NJWkUocGRlc2MpICogODsKKwlzdGF0cy0+cnhfYnVmc2hpZnQgPSAodTgpKEdFVF9SWF9TVEFUVVNfREVTQ19TSElGVChwZGVzYykgJiAweDAzKTsKKwlzdGF0cy0+aWN2ID0gKHUxNilHRVRfUlhfU1RBVFVTX0RFU0NfSUNWKHBkZXNjKTsKKwlzdGF0cy0+Y3JjID0gKHUxNilHRVRfUlhfU1RBVFVTX0RFU0NfQ1JDMzIocGRlc2MpOworCXN0YXRzLT5od2Vycm9yID0gKHUxNikoc3RhdHMtPmNyYyB8IHN0YXRzLT5pY3YpOworCXN0YXRzLT5kZWNyeXB0ZWQgPSAhR0VUX1JYX1NUQVRVU19ERVNDX1NXREVDKHBkZXNjKTsKKworCXN0YXRzLT5yYXRlID0gKHU4KUdFVF9SWF9TVEFUVVNfREVTQ19SWF9NQ1MocGRlc2MpOworCXN0YXRzLT5zaG9ydHByZWFtYmxlID0gKHUxNilHRVRfUlhfU1RBVFVTX0RFU0NfU1BMQ1AocGRlc2MpOworCXN0YXRzLT5pc2FtcGR1ID0gKGJvb2wpKEdFVF9SWF9TVEFUVVNfREVTQ19QQUdHUihwZGVzYykgPT0gMSk7CisJc3RhdHMtPnRpbWVzdGFtcF9sb3cgPSBHRVRfUlhfU1RBVFVTX0RFU0NfVFNGTChwZGVzYyk7CisJc3RhdHMtPnJ4X2lzNDBNaHpwYWNrZXQgPSAoYm9vbClHRVRfUlhfU1RBVFVTX0RFU0NfQlcocGRlc2MpOworCisJaWYgKHN0YXRzLT5od2Vycm9yKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyeF9zdGF0dXMtPmZyZXEgPSBody0+Y29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcTsKKwlyeF9zdGF0dXMtPmJhbmQgPSBody0+Y29uZi5jaGFubmVsLT5iYW5kOworCisJaWYgKEdFVF9SWF9TVEFUVVNfREVTQ19DUkMzMihwZGVzYykpCisJCXJ4X3N0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0ZBSUxFRF9GQ1NfQ1JDOworCisJaWYgKCFHRVRfUlhfU1RBVFVTX0RFU0NfU1dERUMocGRlc2MpKQorCQlyeF9zdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19ERUNSWVBURUQ7CisKKwlpZiAoR0VUX1JYX1NUQVRVU19ERVNDX0JXKHBkZXNjKSkKKwkJcnhfc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfNDBNSFo7CisKKwlpZiAoR0VUX1JYX1NUQVRVU19ERVNDX1JYX0hUKHBkZXNjKSkKKwkJcnhfc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfSFQ7CisKKwlyeF9zdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19NQUNUSU1FX01QRFU7CisKKwlpZiAoc3RhdHMtPmRlY3J5cHRlZCkKKwkJcnhfc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfREVDUllQVEVEOworCisJcnhfc3RhdHVzLT5yYXRlX2lkeCA9IF9ydGw5MnNlX3JhdGVfbWFwcGluZygoYm9vbCkKKwkJCUdFVF9SWF9TVEFUVVNfREVTQ19SWF9IVChwZGVzYyksCisJCQkodTgpR0VUX1JYX1NUQVRVU19ERVNDX1JYX01DUyhwZGVzYyksCisJCQkoYm9vbClHRVRfUlhfU1RBVFVTX0RFU0NfUEFHR1IocGRlc2MpKTsKKworCisJcnhfc3RhdHVzLT5tYWN0aW1lID0gR0VUX1JYX1NUQVRVU19ERVNDX1RTRkwocGRlc2MpOworCWlmIChwaHlzdGF0dXMgPT0gdHJ1ZSkgeworCQlwX2RydmluZm8gPSAoc3RydWN0IHJ4X2Z3aW5mbyAqKShza2ItPmRhdGEgKworCQkJCQkJIHN0YXRzLT5yeF9idWZzaGlmdCk7CisJCV9ydGw5MnNlX3RyYW5zbGF0ZV9yeF9zaWduYWxfc3R1ZmYoaHcsIHNrYiwgc3RhdHMsIHBkZXNjLAorCQkJCQkJICAgcF9kcnZpbmZvKTsKKwl9CisKKwkvKnJ4X3N0YXR1cy0+cXVhbCA9IHN0YXRzLT5zaWduYWw7ICovCisJcnhfc3RhdHVzLT5zaWduYWwgPSBzdGF0cy0+cnNzaSArIDEwOworCS8qcnhfc3RhdHVzLT5ub2lzZSA9IC1zdGF0cy0+bm9pc2U7ICovCisKKwlyZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBydGw5MnNlX3R4X2ZpbGxfZGVzYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgdTggKnBkZXNjX3R4LAorCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sIHN0cnVjdCBza19idWZmICpza2IsCisJCXU4IGh3X3F1ZXVlLCBzdHJ1Y3QgcnRsX3RjYl9kZXNjICpwdGNiX2Rlc2MpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKKwlzdHJ1Y3QgcnRsX2hhbCAqcnRsaGFsID0gcnRsX2hhbChydGxfcHJpdihodykpOworCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSBpbmZvLT5jb250cm9sLnN0YTsKKwl1OCAqcGRlc2MgPSAodTggKikgcGRlc2NfdHg7CisJdTE2IHNlcV9udW1iZXI7CisJX19sZTE2IGZjID0gaGRyLT5mcmFtZV9jb250cm9sOworCXU4IHJlc2VydmVkX21hY2lkID0gMDsKKwl1OCBmd19xc2VsID0gX3J0bDkyc2VfbWFwX2h3cXVldWVfdG9fZndxdWV1ZShza2IsIGh3X3F1ZXVlKTsKKwlib29sIGZpcnN0c2VnID0gKCEoaGRyLT5zZXFfY3RybCAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9TQ1RMX0ZSQUcpKSk7CisJYm9vbCBsYXN0c2VnID0gKCEoaGRyLT5mcmFtZV9jb250cm9sICYKKwkJCWNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX01PUkVGUkFHUykpKTsKKwlkbWFfYWRkcl90IG1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShydGxwY2ktPnBkZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCisJCSAgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwl1OCBid180MCA9IDA7CisKKwlpZiAobWFjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQlid180MCA9IG1hYy0+YndfNDA7CisJfSBlbHNlIGlmIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAorCQltYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQlpZiAoc3RhKQorCQkJYndfNDAgPSBzdGEtPmh0X2NhcC5jYXAgJgorCQkJCSAgICBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MDsKKwl9CisKKwlzZXFfbnVtYmVyID0gKGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpICYgSUVFRTgwMjExX1NDVExfU0VRKSA+PiA0OworCisJcnRsX2dldF90Y2JfZGVzYyhodywgaW5mbywgc3RhLCBza2IsIHB0Y2JfZGVzYyk7CisKKwlDTEVBUl9QQ0lfVFhfREVTQ19DT05URU5UKHBkZXNjLCBUWF9ERVNDX1NJWkVfUlRMODE5MlMpOworCisJaWYgKGZpcnN0c2VnKSB7CisJCWlmIChydGxwcml2LT5kbS51c2VyYW1hc2spIHsKKwkJCS8qIHNldCB0eGRlc2MgbWFjSWQgKi8KKwkJCWlmIChwdGNiX2Rlc2MtPm1hY19pZCA8IDMyKSB7CisJCQkJU0VUX1RYX0RFU0NfTUFDSUQocGRlc2MsIHB0Y2JfZGVzYy0+bWFjX2lkKTsKKwkJCQlyZXNlcnZlZF9tYWNpZCB8PSBwdGNiX2Rlc2MtPm1hY19pZDsKKwkJCX0KKwkJfQorCQlTRVRfVFhfREVTQ19SU1ZEX01BQ0lEKHBkZXNjLCByZXNlcnZlZF9tYWNpZCk7CisKKwkJU0VUX1RYX0RFU0NfVFhIVChwZGVzYywgKChwdGNiX2Rlc2MtPmh3X3JhdGUgPj0KKwkJCQkgREVTQzkyU19SQVRFTUNTMCkgPyAxIDogMCkpOworCisJCWlmIChydGxoYWwtPnZlcnNpb24gPT0gVkVSU0lPTl84MTkyU19BQ1VUKSB7CisJCQlpZiAocHRjYl9kZXNjLT5od19yYXRlID09IERFU0M5MlNfUkFURTFNIHx8CisJCQkJcHRjYl9kZXNjLT5od19yYXRlICA9PSBERVNDOTJTX1JBVEUyTSB8fAorCQkJCXB0Y2JfZGVzYy0+aHdfcmF0ZSA9PSBERVNDOTJTX1JBVEU1XzVNIHx8CisJCQkJcHRjYl9kZXNjLT5od19yYXRlID09IERFU0M5MlNfUkFURTExTSkgeworCQkJCXB0Y2JfZGVzYy0+aHdfcmF0ZSA9IERFU0M5MlNfUkFURTEyTTsKKwkJCX0KKwkJfQorCisJCVNFVF9UWF9ERVNDX1RYX1JBVEUocGRlc2MsIHB0Y2JfZGVzYy0+aHdfcmF0ZSk7CisKKwkJaWYgKHB0Y2JfZGVzYy0+dXNlX3Nob3J0Z2kgfHwgcHRjYl9kZXNjLT51c2Vfc2hvcnRwcmVhbWJsZSkKKwkJCVNFVF9UWF9ERVNDX1RYX1NIT1JUKHBkZXNjLCAwKTsKKworCQkvKiBBZ2dyZWdhdGlvbiByZWxhdGVkICovCisJCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpCisJCQlTRVRfVFhfREVTQ19BR0dfRU5BQkxFKHBkZXNjLCAxKTsKKworCQkvKiBGb3IgQU1QRFUsIHdlIG11c3QgaW5zZXJ0IFNTTiBpbnRvIFRYX0RFU0MgKi8KKwkJU0VUX1RYX0RFU0NfU0VRKHBkZXNjLCBzZXFfbnVtYmVyKTsKKworCQkvKiBQcm90ZWN0aW9uIG1vZGUgcmVsYXRlZCAqLworCQkvKiBGb3IgOTJTLCBpZiBSVFMvQ1RTIGFyZSBzZXQsIEhXIHdpbGwgZXhlY3V0ZSBSVFMuICovCisJCS8qIFdlIGNob29zZSBvbmx5IG9uZSBwcm90ZWN0aW9uIG1vZGUgdG8gZXhlY3V0ZSAqLworCQlTRVRfVFhfREVTQ19SVFNfRU5BQkxFKHBkZXNjLCAoKHB0Y2JfZGVzYy0+cnRzX2VuYWJsZSAmJgorCQkJCSFwdGNiX2Rlc2MtPmN0c19lbmFibGUpID8gMSA6IDApKTsKKwkJU0VUX1RYX0RFU0NfQ1RTX0VOQUJMRShwZGVzYywgKChwdGNiX2Rlc2MtPmN0c19lbmFibGUpID8KKwkJCQkgICAgICAgMSA6IDApKTsKKwkJU0VUX1RYX0RFU0NfUlRTX1NUQkMocGRlc2MsICgocHRjYl9kZXNjLT5ydHNfc3RiYykgPyAxIDogMCkpOworCisJCVNFVF9UWF9ERVNDX1JUU19SQVRFKHBkZXNjLCBwdGNiX2Rlc2MtPnJ0c19yYXRlKTsKKwkJU0VUX1RYX0RFU0NfUlRTX0JBTkRXSURUSChwZGVzYywgMCk7CisJCVNFVF9UWF9ERVNDX1JUU19TVUJfQ0FSUklFUihwZGVzYywgcHRjYl9kZXNjLT5ydHNfc2MpOworCQlTRVRfVFhfREVTQ19SVFNfU0hPUlQocGRlc2MsICgocHRjYl9kZXNjLT5ydHNfcmF0ZSA8PQorCQkgICAgICAgREVTQzkyU19SQVRFNTRNKSA/CisJCSAgICAgICAocHRjYl9kZXNjLT5ydHNfdXNlX3Nob3J0cHJlYW1ibGUgPyAxIDogMCkKKwkJICAgICAgIDogKHB0Y2JfZGVzYy0+cnRzX3VzZV9zaG9ydGdpID8gMSA6IDApKSk7CisKKworCQkvKiBTZXQgQmFuZHdpZHRoIGFuZCBzdWItY2hhbm5lbCBzZXR0aW5ncy4gKi8KKwkJaWYgKGJ3XzQwKSB7CisJCQlpZiAocHRjYl9kZXNjLT5wYWNrZXRfYncpIHsKKwkJCQlTRVRfVFhfREVTQ19UWF9CQU5EV0lEVEgocGRlc2MsIDEpOworCQkJCS8qIHVzZSBkdXBsaWNhdGVkIG1vZGUgKi8KKwkJCQlTRVRfVFhfREVTQ19UWF9TVUJfQ0FSUklFUihwZGVzYywgMCk7CisJCQl9IGVsc2UgeworCQkJCVNFVF9UWF9ERVNDX1RYX0JBTkRXSURUSChwZGVzYywgMCk7CisJCQkJU0VUX1RYX0RFU0NfVFhfU1VCX0NBUlJJRVIocGRlc2MsCisJCQkJCQkgICBtYWMtPmN1cl80MF9wcmltZV9zYyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlTRVRfVFhfREVTQ19UWF9CQU5EV0lEVEgocGRlc2MsIDApOworCQkJU0VUX1RYX0RFU0NfVFhfU1VCX0NBUlJJRVIocGRlc2MsIDApOworCQl9CisKKwkJLyogMyBGaWxsIG5lY2Vzc2FyeSBmaWVsZCBpbiBGaXJzdCBEZXNjcmlwdG9yICovCisJCS8qRFdPUkQgMCovCisJCVNFVF9UWF9ERVNDX0xJTklQKHBkZXNjLCAwKTsKKwkJU0VUX1RYX0RFU0NfT0ZGU0VUKHBkZXNjLCAzMik7CisJCVNFVF9UWF9ERVNDX1BLVF9TSVpFKHBkZXNjLCAodTE2KSBza2ItPmxlbik7CisKKwkJLypEV09SRCAxKi8KKwkJU0VUX1RYX0RFU0NfUkFfQlJTUl9JRChwZGVzYywgcHRjYl9kZXNjLT5yYXRyX2luZGV4KTsKKworCQkvKiBGaWxsIHNlY3VyaXR5IHJlbGF0ZWQgKi8KKwkJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5KSB7CisJCQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mOworCisJCQlrZXljb25mID0gaW5mby0+Y29udHJvbC5od19rZXk7CisJCQlzd2l0Y2ggKGtleWNvbmYtPmNpcGhlcikgeworCQkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDoKKwkJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OgorCQkJCVNFVF9UWF9ERVNDX1NFQ19UWVBFKHBkZXNjLCAweDEpOworCQkJCWJyZWFrOworCQkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9US0lQOgorCQkJCVNFVF9UWF9ERVNDX1NFQ19UWVBFKHBkZXNjLCAweDIpOworCQkJCWJyZWFrOworCQkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOgorCQkJCVNFVF9UWF9ERVNDX1NFQ19UWVBFKHBkZXNjLCAweDMpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlTRVRfVFhfREVTQ19TRUNfVFlQRShwZGVzYywgMHgwKTsKKwkJCQlicmVhazsKKworCQkJfQorCQl9CisKKwkJLyogU2V0IFBhY2tldCBJRCAqLworCQlTRVRfVFhfREVTQ19QQUNLRVRfSUQocGRlc2MsIDApOworCisJCS8qIFdlIHdpbGwgYXNzaWduIG1hZ2VtZW50IHF1ZXVlIHRvIEJLLiAqLworCQlTRVRfVFhfREVTQ19RVUVVRV9TRUwocGRlc2MsIGZ3X3FzZWwpOworCisJCS8qIEFsd2FzeSBlbmFibGUgYWxsIHJhdGUgZmFsbGJhY2sgcmFuZ2UgKi8KKwkJU0VUX1RYX0RFU0NfREFUQV9SQVRFX0ZCX0xJTUlUKHBkZXNjLCAweDFGKTsKKworCQkvKiBGaXg6IEkgZG9uJ3Qga293biB3aHkgaHcgdXNlIDYuNU0gdG8gdHggd2hlbiBzZXQgaXQgKi8KKwkJU0VUX1RYX0RFU0NfVVNFUl9SQVRFKHBkZXNjLAorCQkJCSAgICAgIHB0Y2JfZGVzYy0+dXNlX2RyaXZlcl9yYXRlID8gMSA6IDApOworCisJCS8qIFNldCBOT05fUU9TIGJpdC4gKi8KKwkJaWYgKCFpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKQorCQkJU0VUX1RYX0RFU0NfTk9OX1FPUyhwZGVzYywgMSk7CisKKwl9CisKKwkvKiBGaWxsIGZpZWxkcyB0aGF0IGFyZSByZXF1aXJlZCB0byBiZSBpbml0aWFsaXplZAorCSAqIGluIGFsbCBvZiB0aGUgZGVzY3JpcHRvcnMgKi8KKwkvKkRXT1JEIDAgKi8KKwlTRVRfVFhfREVTQ19GSVJTVF9TRUcocGRlc2MsIChmaXJzdHNlZyA/IDEgOiAwKSk7CisJU0VUX1RYX0RFU0NfTEFTVF9TRUcocGRlc2MsIChsYXN0c2VnID8gMSA6IDApKTsKKworCS8qIERXT1JEIDcgKi8KKwlTRVRfVFhfREVTQ19UWF9CVUZGRVJfU0laRShwZGVzYywgKHUxNikgc2tiLT5sZW4pOworCisJLyogRE9XUkQgOCAqLworCVNFVF9UWF9ERVNDX1RYX0JVRkZFUl9BRERSRVNTKHBkZXNjLCBjcHVfdG9fbGUzMihtYXBwaW5nKSk7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX1NFTkQsIERCR19UUkFDRSwgKCJcbiIpKTsKK30KKwordm9pZCBydGw5MnNlX3R4X2ZpbGxfY21kZGVzYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnBkZXNjLAorCWJvb2wgZmlyc3RzZWcsIGJvb2wgbGFzdHNlZywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOworCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CisJc3RydWN0IHJ0bF90Y2JfZGVzYyAqdGNiX2Rlc2MgPSAoc3RydWN0IHJ0bF90Y2JfZGVzYyAqKShza2ItPmNiKTsKKworCWRtYV9hZGRyX3QgbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKHJ0bHBjaS0+cGRldiwgc2tiLT5kYXRhLCBza2ItPmxlbiwKKwkJCVBDSV9ETUFfVE9ERVZJQ0UpOworCisgICAgLyogQ2xlYXIgYWxsIHN0YXR1cwkqLworCUNMRUFSX1BDSV9UWF9ERVNDX0NPTlRFTlQocGRlc2MsIFRYX0NNRERFU0NfU0laRV9SVEw4MTkyUyk7CisKKwkvKiBUaGlzIGJpdCBpbmRpY2F0ZSB0aGlzIHBhY2tldCBpcyB1c2VkIGZvciBGVyBkb3dubG9hZC4gKi8KKwlpZiAodGNiX2Rlc2MtPmNtZF9vcl9pbml0ID09IERFU0NfUEFDS0VUX1RZUEVfSU5JVCkgeworCQkvKiBGb3IgZmlybXdhcmUgZG93bmxhb2Qgd2Ugb25seSBuZWVkIHRvIHNldCBMSU5JUCAqLworCQlTRVRfVFhfREVTQ19MSU5JUChwZGVzYywgdGNiX2Rlc2MtPmxhc3RfaW5pcGt0KTsKKworCQkvKiA5MlNFIG11c3Qgc2V0IGFzIDEgZm9yIGZpcm13YXJlIGRvd25sb2FkIEhXIERNQSBlcnJvciAqLworCQlTRVRfVFhfREVTQ19GSVJTVF9TRUcocGRlc2MsIDEpOworCQlTRVRfVFhfREVTQ19MQVNUX1NFRyhwZGVzYywgMSk7CisKKwkJLyogOTJTRSBuZWVkIG5vdCB0byBzZXQgVFggcGFja2V0IHNpemUgd2hlbiBmaXJtd2FyZSBkb3dubG9hZCAqLworCQlTRVRfVFhfREVTQ19QS1RfU0laRShwZGVzYywgKHUxNikoc2tiLT5sZW4pKTsKKwkJU0VUX1RYX0RFU0NfVFhfQlVGRkVSX1NJWkUocGRlc2MsICh1MTYpKHNrYi0+bGVuKSk7CisJCVNFVF9UWF9ERVNDX1RYX0JVRkZFUl9BRERSRVNTKHBkZXNjLCBjcHVfdG9fbGUzMihtYXBwaW5nKSk7CisKKwkJU0VUX1RYX0RFU0NfT1dOKHBkZXNjLCAxKTsKKwl9IGVsc2UgeyAvKiBIMkMgQ29tbWFuZCBEZXNjIGZvcm1hdCAoSG9zdCBUWENNRCkgKi8KKwkJLyogOTJTRSBtdXN0IHNldCBhcyAxIGZvciBmaXJtd2FyZSBkb3dubG9hZCBIVyBETUEgZXJyb3IgKi8KKwkJU0VUX1RYX0RFU0NfRklSU1RfU0VHKHBkZXNjLCAxKTsKKwkJU0VUX1RYX0RFU0NfTEFTVF9TRUcocGRlc2MsIDEpOworCisJCVNFVF9UWF9ERVNDX09GRlNFVChwZGVzYywgMHgyMCk7CisKKwkJLyogQnVmZmVyIHNpemUgKyBjb21tYW5kIGhlYWRlciAqLworCQlTRVRfVFhfREVTQ19QS1RfU0laRShwZGVzYywgKHUxNikoc2tiLT5sZW4pKTsKKwkJLyogRml4ZWQgcXVldWUgb2YgSDJDIGNvbW1hbmQgKi8KKwkJU0VUX1RYX0RFU0NfUVVFVUVfU0VMKHBkZXNjLCAweDEzKTsKKworCQlTRVRfQklUU19UT19MRV80QllURShza2ItPmRhdGEsIDI0LCA3LCBydGxoYWwtPmgyY190eGNtZF9zZXEpOworCisJCVNFVF9UWF9ERVNDX1RYX0JVRkZFUl9TSVpFKHBkZXNjLCAodTE2KShza2ItPmxlbikpOworCQlTRVRfVFhfREVTQ19UWF9CVUZGRVJfQUREUkVTUyhwZGVzYywgY3B1X3RvX2xlMzIobWFwcGluZykpOworCisJCVNFVF9UWF9ERVNDX09XTihwZGVzYywgMSk7CisKKwl9Cit9CisKK3ZvaWQgcnRsOTJzZV9zZXRfZGVzYyh1OCAqcGRlc2MsIGJvb2wgaXN0eCwgdTggZGVzY19uYW1lLCB1OCAqdmFsKQoreworCWlmIChpc3R4ID09IHRydWUpIHsKKwkJc3dpdGNoIChkZXNjX25hbWUpIHsKKwkJY2FzZSBIV19ERVNDX09XTjoKKwkJCVNFVF9UWF9ERVNDX09XTihwZGVzYywgMSk7CisJCQlicmVhazsKKwkJY2FzZSBIV19ERVNDX1RYX05FWFRERVNDX0FERFI6CisJCQlTRVRfVFhfREVTQ19ORVhUX0RFU0NfQUREUkVTUyhwZGVzYywgKih1MzIgKikgdmFsKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJUlRfQVNTRVJUKGZhbHNlLCAoIkVSUiB0eGRlc2MgOiVkIG5vdCBwcm9jZXNzXG4iLAorCQkJCSAgZGVzY19uYW1lKSk7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCXN3aXRjaCAoZGVzY19uYW1lKSB7CisJCWNhc2UgSFdfREVTQ19SWE9XTjoKKwkJCVNFVF9SWF9TVEFUVVNfREVTQ19PV04ocGRlc2MsIDEpOworCQkJYnJlYWs7CisJCWNhc2UgSFdfREVTQ19SWEJVRkZfQUREUjoKKwkJCVNFVF9SWF9TVEFUVVNfX0RFU0NfQlVGRl9BRERSKHBkZXNjLCAqKHUzMiAqKSB2YWwpOworCQkJYnJlYWs7CisJCWNhc2UgSFdfREVTQ19SWFBLVF9MRU46CisJCQlTRVRfUlhfU1RBVFVTX0RFU0NfUEtUX0xFTihwZGVzYywgKih1MzIgKikgdmFsKTsKKwkJCWJyZWFrOworCQljYXNlIEhXX0RFU0NfUlhFUk86CisJCQlTRVRfUlhfU1RBVFVTX0RFU0NfRU9SKHBkZXNjLCAxKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJUlRfQVNTRVJUKGZhbHNlLCAoIkVSUiByeGRlc2MgOiVkIG5vdCBwcm9jZXNzXG4iLAorCQkJCSAgZGVzY19uYW1lKSk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKwordTMyIHJ0bDkyc2VfZ2V0X2Rlc2ModTggKmRlc2MsIGJvb2wgaXN0eCwgdTggZGVzY19uYW1lKQoreworCXUzMiByZXQgPSAwOworCisJaWYgKGlzdHggPT0gdHJ1ZSkgeworCQlzd2l0Y2ggKGRlc2NfbmFtZSkgeworCQljYXNlIEhXX0RFU0NfT1dOOgorCQkJcmV0ID0gR0VUX1RYX0RFU0NfT1dOKGRlc2MpOworCQkJYnJlYWs7CisJCWNhc2UgSFdfREVTQ19UWEJVRkZfQUREUjoKKwkJCXJldCA9IEdFVF9UWF9ERVNDX1RYX0JVRkZFUl9BRERSRVNTKGRlc2MpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlSVF9BU1NFUlQoZmFsc2UsICgiRVJSIHR4ZGVzYyA6JWQgbm90IHByb2Nlc3NcbiIsCisJCQkJICBkZXNjX25hbWUpKTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoIChkZXNjX25hbWUpIHsKKwkJY2FzZSBIV19ERVNDX09XTjoKKwkJCXJldCA9IEdFVF9SWF9TVEFUVVNfREVTQ19PV04oZGVzYyk7CisJCQlicmVhazsKKwkJY2FzZSBIV19ERVNDX1JYUEtUX0xFTjoKKwkJCXJldCA9IEdFVF9SWF9TVEFUVVNfREVTQ19QS1RfTEVOKGRlc2MpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlSVF9BU1NFUlQoZmFsc2UsICgiRVJSIHJ4ZGVzYyA6JWQgbm90IHByb2Nlc3NcbiIsCisJCQkJICBkZXNjX25hbWUpKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcnRsOTJzZV90eF9wb2xsaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBod19xdWV1ZSkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CisJcnRsX3dyaXRlX3dvcmQocnRscHJpdiwgVFBfUE9MTCwgQklUKDApIDw8IChod19xdWV1ZSkpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvdHJ4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS90cnguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTg2MmM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvdHJ4LmgKQEAgLTAsMCArMSw0NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodChjKSAyMDA5LTIwMTAgIFJlYWx0ZWsgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorICogUmVhbHRlayBDb3Jwb3JhdGlvbiwgTm8uIDIsIElubm92YXRpb24gUm9hZCBJSSwgSHNpbmNodSBTY2llbmNlIFBhcmssCisgKiBIc2luY2h1IDMwMCwgVGFpd2FuLgorICoKKyAqIExhcnJ5IEZpbmdlciA8TGFycnkuRmluZ2VyQGx3ZmluZ2VyLm5ldD4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fUkVBTFRFS19QQ0k5MlNFX1RSWF9IX18KKyNkZWZpbmUgX19SRUFMVEVLX1BDSTkyU0VfVFJYX0hfXworCit2b2lkIHJ0bDkyc2VfdHhfZmlsbF9kZXNjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAorCQkJICB1OCAqcGRlc2MsIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbywKKwkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggaHdfcXVldWUsCisJCQkgIHN0cnVjdCBydGxfdGNiX2Rlc2MgKnB0Y2JfZGVzYyk7Cit2b2lkIHJ0bDkyc2VfdHhfZmlsbF9jbWRkZXNjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqcGRlc2MsIGJvb2wgZmlyc3RzZWcsCisJCQkgICAgIGJvb2wgbGFzdHNlZywgc3RydWN0IHNrX2J1ZmYgKnNrYik7Citib29sIHJ0bDkyc2VfcnhfcXVlcnlfZGVzYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHJ0bF9zdGF0cyAqc3RhdHMsCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzLCB1OCAqcGRlc2MsCisJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgcnRsOTJzZV9zZXRfZGVzYyh1OCAqcGRlc2MsIGJvb2wgaXN0eCwgdTggZGVzY19uYW1lLCB1OCAqdmFsKTsKK3UzMiBydGw5MnNlX2dldF9kZXNjKHU4ICpwZGVzYywgYm9vbCBpc3R4LCB1OCBkZXNjX25hbWUpOwordm9pZCBydGw5MnNlX3R4X3BvbGxpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGh3X3F1ZXVlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS91c2IuYwppbmRleCBmNWQ4NTczLi5hOTM2N2ViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvdXNiLmMKQEAgLTg1Miw2ICs4NTIsNyBAQAogCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCXN0cnVjdCBydGxfdHhfZGVzYyAqcGRlc2MgPSBOVUxMOworCXN0cnVjdCBydGxfdGNiX2Rlc2MgdGNiX2Rlc2M7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKShza2ItPmRhdGEpOwogCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKIAl1OCAqcGRhX2FkZHIgPSBoZHItPmFkZHIxOwpAQCAtODYwLDggKzg2MSwxNyBAQAogCXU4IHRpZCA9IDA7CiAJdTE2IHNlcV9udW1iZXIgPSAwOwogCi0JaWYgKGllZWU4MDIxMV9pc19tZ210KGZjKSkKLQkJcnRsX3R4X21nbXRfcHJvYyhodywgc2tiKTsKKwlpZiAoaWVlZTgwMjExX2lzX2F1dGgoZmMpKSB7CisJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfU0VORCwgREJHX0RNRVNHLCAoIk1BQzgwMjExX0xJTktJTkdcbiIpKTsKKwkJcnRsX2lwc19uaWNfb24oaHcpOworCX0KKworCWlmIChydGxwcml2LT5wc2Muc3dfcHNfZW5hYmxlZCkgeworCQlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpICYmICFpZWVlODAyMTFfaXNfbnVsbGZ1bmMoZmMpICYmCisJCSAgICAhaWVlZTgwMjExX2hhc19wbShmYykpCisJCQloZHItPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUE0pOworCX0KKwogCXJ0bF9hY3Rpb25fcHJvYyhodywgc2tiLCB0cnVlKTsKIAlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIocGRhX2FkZHIpKQogCQlydGxwcml2LT5zdGF0cy50eGJ5dGVzbXVsdGljYXN0ICs9IHNrYi0+bGVuOwpAQCAtODc4LDcgKzg4OCw3IEBACiAJCXNlcV9udW1iZXIgPDw9IDQ7CiAJfQogCXJ0bHByaXYtPmNmZy0+b3BzLT5maWxsX3R4X2Rlc2MoaHcsIGhkciwgKHU4ICopcGRlc2MsIGluZm8sIHNrYiwKLQkJCQkJaHdfcXVldWUpOworCQkJCQlod19xdWV1ZSwgJnRjYl9kZXNjKTsKIAlpZiAoIWllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKIAkJaWYgKHFjKQogCQkJbWFjLT50aWRzW3RpZF0uc2VxX251bWJlciA9IHNlcV9udW1iZXI7CkBAIC04ODcsNyArODk3LDggQEAKIAkJcnRscHJpdi0+Y2ZnLT5vcHMtPmxlZF9jb250cm9sKGh3LCBMRURfQ1RMX1RYKTsKIH0KIAotc3RhdGljIGludCBydGxfdXNiX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGludCBydGxfdXNiX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgICBzdHJ1Y3QgcnRsX3RjYl9kZXNjICpkdW1teSkKIHsKIAlzdHJ1Y3QgcnRsX3VzYiAqcnRsdXNiID0gcnRsX3VzYmRldihydGxfdXNicHJpdihodykpOwogCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3VzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS91c2IuaAppbmRleCBhYmFkZmU5Li5kMmE2M2ZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3VzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvdXNiLmgKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KIAorI2RlZmluZSBSVExfUlhfREVTQ19TSVpFCQkyNAorCiAjZGVmaW5lIFJUTF9VU0JfREVWSUNFKHZlbmQsIHByb2QsIGNmZykgXAogCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFLCBcCiAJLmlkVmVuZG9yID0gKHZlbmQpLCBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3dpZmkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvd2lmaS5oCmluZGV4IDA3ZGI5NWYuLjY5MzM5NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvd2lmaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvd2lmaS5oCkBAIC02OCw2ICs2OCw4IEBACiAjZGVmaW5lIFFCU1NfTE9BRF9TSVpFCQkJCTUKICNkZWZpbmUgTUFYX1dNTUVMRV9MRU5HVEgJCQk2NAogCisjZGVmaW5lIFRPVEFMX0NBTV9FTlRSWQkJCQkzMgorCiAvKnNsb3QgdGltZSBmb3IgMTFnLiAqLwogI2RlZmluZSBSVExfU0xPVF9USU1FXzkJCQkJOQogI2RlZmluZSBSVExfU0xPVF9USU1FXzIwCQkJMjAKQEAgLTk0LDggKzk2LDEwIEBACiAjZGVmaW5lCUNIQU5ORUxfR1JPVVBfTUFYXzVHCQk5CiAjZGVmaW5lIENIQU5ORUxfTUFYX05VTUJFUl8yRwkJMTQKICNkZWZpbmUgQVZHX1RIRVJNQUxfTlVNCQkJOAorI2RlZmluZSBNQVhfVElEX0NPVU5UCQkJOQogCiAvKiBmb3IgZWFybHkgbW9kZSAqLworI2RlZmluZSBGQ1NfTEVOCQkJCTQKICNkZWZpbmUgRU1fSERSX0xFTgkJCTgKIGVudW0gaW50Zl90eXBlIHsKIAlJTlRGX1BDSSA9IDAsCkBAIC0xNTksNiArMTYzLDggQEAKIChJU19IQVJEV0FSRV9UWVBFXzgxOTJERShydGxoYWwpIHx8IElTX0hBUkRXQVJFX1RZUEVfODE5MkRVKHJ0bGhhbCkpCiAjZGVmaW5lCUlTX0hBUkRXQVJFX1RZUEVfODcyMyhydGxoYWwpCQkJXAogKElTX0hBUkRXQVJFX1RZUEVfODcyM0UocnRsaGFsKSB8fCBJU19IQVJEV0FSRV9UWVBFXzg3MjNVKHJ0bGhhbCkpCisjZGVmaW5lIElTX0hBUkRXQVJFX1RZUEVfODcyM1UocnRsaGFsKQkJCVwKKwkocnRsaGFsLT5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODcyM1UpCiAKIGVudW0gc2Nhbl9vcGVyYXRpb25fYmFja3VwX29wdCB7CiAJU0NBTl9PUFRfQkFDS1VQID0gMCwKQEAgLTI5Nyw2ICszMDMsOSBAQAogCUhXX1ZBUl9EQVRBX0ZJTFRFUiwKIH07CiAKKyNkZWZpbmUgSFdTRVRfTUFYX1NJWkUJCQkJMTI4CisjZGVmaW5lIEVGVVNFX01BWF9TRUNUSU9OCQkJMTYKKwogZW51bSBfUlRfTUVESUFfU1RBVFVTIHsKIAlSVF9NRURJQV9ESVNDT05ORUNUID0gMCwKIAlSVF9NRURJQV9DT05ORUNUID0gMQpAQCAtNzY2LDcgKzc3NSw3IEBACiAjZGVmaW5lIElRS19NQVRSSVhfUkVHX05VTQk4CiAjZGVmaW5lIElRS19NQVRSSVhfU0VUVElOR1NfTlVNCSgxICsgMjQgKyAyMSkKIHN0cnVjdCBpcWtfbWF0cml4X3JlZ3MgewotCWJvb2wgYl9pcWtfZG9uZTsKKwlib29sIGlxa19kb25lOwogCWxvbmcgdmFsdWVbMV1bSVFLX01BVFJJWF9SRUdfTlVNXTsKIH07CiAKQEAgLTg0Myw2ICs4NTIsNyBAQAogCWJvb2wgYXBrX2RvbmU7CiAJdTMyIHJlZ19yZjNjWzJdOwkvKiBwYXRoQSAvIHBhdGhCICAqLwogCisJLyogYmZzeW5jICovCiAJdTggZnJhbWVzeW5jOwogCXUzMiBmcmFtZXN5bmNfYzM0OwogCkBAIC04NTIsNiArODYyLDEwIEBACiB9OwogCiAjZGVmaW5lIE1BWF9USURfQ09VTlQJCQkJOQorI2RlZmluZSBSVExfQUdHX1NUT1AJCQkJMAorI2RlZmluZSBSVExfQUdHX1BST0dSRVNTCQkJMQorI2RlZmluZSBSVExfQUdHX1NUQVJUCQkJCTIKKyNkZWZpbmUgUlRMX0FHR19PUEVSQVRJT05BTAkJCTMKICNkZWZpbmUgUlRMX0FHR19PRkYJCQkJMAogI2RlZmluZSBSVExfQUdHX09OCQkJCTEKICNkZWZpbmUgUlRMX0FHR19FTVBUWUlOR19IV19RVUVVRV9BRERCQQkJMgpAQCAtODcxLDYgKzg4NSwxMyBAQAogCXN0cnVjdCBydGxfaHRfYWdnIGFnZzsKIH07CiAKK3N0cnVjdCBydGxfc3RhX2luZm8geworCXU4IHJhdHJfaW5kZXg7CisJdTggd2lyZWxlc3NfbW9kZTsKKwl1OCBtaW1vX3BzOworCXN0cnVjdCBydGxfdGlkX2RhdGEgdGlkc1tNQVhfVElEX0NPVU5UXTsKK30gX19wYWNrZWQ7CisKIHN0cnVjdCBydGxfcHJpdjsKIHN0cnVjdCBydGxfaW8gewogCXN0cnVjdCBkZXZpY2UgKmRldjsKQEAgLTg5NCw2ICs5MTUsNyBAQAogCXUzMigqcmVhZDMyX3N5bmMpIChzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsIHUzMiBhZGRyKTsKIAlpbnQgKCpyZWFkTl9zeW5jKSAoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LCB1MzIgYWRkciwgdTE2IGxlbiwKIAkJCSAgICB1OCAqcGRhdGEpOworCiB9OwogCiBzdHJ1Y3QgcnRsX21hYyB7CkBAIC05MTYsNiArOTM4LDggQEAKIAlpbnQgbl9jaGFubmVsczsKIAlpbnQgbl9iaXRyYXRlczsKIAorCWJvb2wgb2ZmY2hhbl9kZWxleTsKKwogCS8qZmlsdGVycyAqLwogCXUzMiByeF9jb25mOwogCXUxNiByeF9tZ3RfZmlsdGVyOwpAQCAtMTAzMiw3ICsxMDU2LDkgQEAKIAllbnVtIHJ0X2VuY19hbGcgcGFpcndpc2VfZW5jX2FsZ29yaXRobTsKIAkvKkVuY3J5cHRpb24gQWxnb3JpdGhtIGZvciBCcm9jYXN0L011bHRpY2FzdCAqLwogCWVudW0gcnRfZW5jX2FsZyBncm91cF9lbmNfYWxnb3JpdGhtOwotCisJLypDYW0gRW50cnkgQml0bWFwICovCisJdTMyIGh3c2VjX2NhbV9iaXRtYXA7CisJdTggaHdzZWNfY2FtX3N0YV9hZGRyW1RPVEFMX0NBTV9FTlRSWV1bRVRIX0FMRU5dOwogCS8qbG9jYWwgS2V5IGJ1ZmZlciwgaW5keCAwIGlzIGZvcgogCSAgIHBhaXJ3aXNlIGtleSAxLTQgaXMgZm9yIGFnb3VwIGtleS4gKi8KIAl1OCBrZXlfYnVmW0tFWV9CVUZfU0laRV1bTUFYX0tFWV9MRU5dOwpAQCAtMTA1Myw3ICsxMDc5LDcgQEAKIAlib29sIGN1cnJlbnRfdHVyYm9fZWRjYTsKIAlib29sIGlzX2FueV9ub25iZXBrdHM7CS8qb3V0IGRtICovCiAJYm9vbCBpc19jdXJfcmRsc3RhdGU7Ci0JYm9vbCB0eHBvd2VyX3RyYWNraW5nSW5pdDsKKwlib29sIHR4cG93ZXJfdHJhY2tpbmdpbml0OwogCWJvb2wgZGlzYWJsZV9mcmFtZWJ1cnN0aW5nOwogCWJvb2wgY2NrX2luY2gxNDsKIAlib29sIHR4cG93ZXJfdHJhY2tpbmc7CkBAIC0xMDc5LDcgKzExMDUsNiBAQAogCWJvb2wgZGlzYWJsZV90eF9pbnQ7CiAJY2hhciBvZmRtX2luZGV4WzJdOwogCWNoYXIgY2NrX2luZGV4OwotCXU4IHBvd2VyX2luZGV4X2JhY2t1cFs2XTsKIH07CiAKICNkZWZpbmUJRUZVU0VfTUFYX0xPR0lDQUxfU0laRQkJCTI1NgpAQCAtMTE3NSw2ICsxMjAwLDcgQEAKIAkgKiBvdGhlcndpc2UgT2Zmc2V0WzU2MGhdID0gMHgwMC4KIAkgKiAqLwogCWJvb2wgc3VwcG9ydF9hc3BtOworCiAJYm9vbCBzdXBwb3J0X2JhY2tkb29yOwogCiAJLypmb3IgTFBTICovCkBAIC0xMjAxLDcgKzEyMjcsNiBAQAogCiAJLypqdXN0IGZvciBQQ0lFIEFTUE0gKi8KIAl1OCBjb25zdF9hbWRwY2lfYXNwbTsKLQogCWJvb2wgcHdyZG93bl9tb2RlOwogCiAJZW51bSByZl9wd3JzdGF0ZSBpbmFjdGl2ZV9wd3JzdGF0ZTsKQEAgLTEyODIsNiArMTMwNywxMCBAQAogCWJvb2wgYnVzeXRyYWZmaWM7CiAJYm9vbCBoaWdoZXJfYnVzeXRyYWZmaWM7CiAJYm9vbCBoaWdoZXJfYnVzeXJ4dHJhZmZpYzsKKworCXUzMiB0aWR0eF9pbjRwZXJpb2RbTUFYX1RJRF9DT1VOVF1bNF07CisJdTMyIHRpZHR4X2lucGVyaW9kW01BWF9USURfQ09VTlRdOworCWJvb2wgaGlnaGVyX2J1c3l0eHRyYWZmaWNbTUFYX1RJRF9DT1VOVF07CiB9OwogCiBzdHJ1Y3QgcnRsX3RjYl9kZXNjIHsKQEAgLTEzNDQsMTMgKzEzNzMsMTUgQEAKIAkJCQkgICAgICAgdTMyIGFkZF9tc3IsIHUzMiBybV9tc3IpOwogCXZvaWQgKCpnZXRfaHdfcmVnKSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHZhcmlhYmxlLCB1OCAqdmFsKTsKIAl2b2lkICgqc2V0X2h3X3JlZykgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCB2YXJpYWJsZSwgdTggKnZhbCk7Ci0Jdm9pZCAoKnVwZGF0ZV9yYXRlX3RhYmxlKSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCXZvaWQgKCp1cGRhdGVfcmF0ZV90YmwpIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHU4IHJzc2lfbGV2ZWwpOwogCXZvaWQgKCp1cGRhdGVfcmF0ZV9tYXNrKSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHJzc2lfbGV2ZWwpOwogCXZvaWQgKCpmaWxsX3R4X2Rlc2MpIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIHU4ICpwZGVzY190eCwKIAkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbywKLQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBxdWV1ZV9pbmRleCk7Ci0Jdm9pZCAoKmZpbGxfZmFrZV90eGRlc2MpIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKiBwRGVzYywKKwkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHU4IGh3X3F1ZXVlLAorCQkJICAgICAgc3RydWN0IHJ0bF90Y2JfZGVzYyAqcHRjYl9kZXNjKTsKKwl2b2lkICgqZmlsbF9mYWtlX3R4ZGVzYykgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqcERlc2MsCiAJCQkJICB1MzIgYnVmZmVyX2xlbiwgYm9vbCBiSXNQc1BvbGwpOwogCXZvaWQgKCpmaWxsX3R4X2NtZGRlc2MpIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnBkZXNjLAogCQkJCSBib29sIGZpcnN0c2VnLCBib29sIGxhc3RzZWcsCkBAIC0xMzcwLDEwICsxNDAxLDEwIEBACiAJCQkgICAgIGVudW0gbGVkX2N0bF9tb2RlIGxlZGFjdGlvbik7CiAJdm9pZCAoKnNldF9kZXNjKSAodTggKnBkZXNjLCBib29sIGlzdHgsIHU4IGRlc2NfbmFtZSwgdTggKnZhbCk7CiAJdTMyICgqZ2V0X2Rlc2MpICh1OCAqcGRlc2MsIGJvb2wgaXN0eCwgdTggZGVzY19uYW1lKTsKLQl2b2lkICgqdHhfcG9sbGluZykgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1bnNpZ25lZCBpbnQgaHdfcXVldWUpOworCXZvaWQgKCp0eF9wb2xsaW5nKSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGh3X3F1ZXVlKTsKIAl2b2lkICgqZW5hYmxlX2h3X3NlYykgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAl2b2lkICgqc2V0X2tleSkgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIga2V5X2luZGV4LAotCQkJIHU4ICpwX21hY2FkZHIsIGJvb2wgaXNfZ3JvdXAsIHU4IGVuY19hbGdvLAorCQkJIHU4ICptYWNhZGRyLCBib29sIGlzX2dyb3VwLCB1OCBlbmNfYWxnbywKIAkJCSBib29sIGlzX3dlcGtleSwgYm9vbCBjbGVhcl9hbGwpOwogCXZvaWQgKCppbml0X3N3X2xlZHMpIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAJdm9pZCAoKmRlaW5pdF9zd19sZWRzKSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwpAQCAtMTM4NCw2ICsxNDE1LDcgQEAKIAkJCSAgdTMyIHJlZ2FkZHIsIHUzMiBiaXRtYXNrKTsKIAl2b2lkICgqc2V0X3JmcmVnKSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsCiAJCQkgICB1MzIgcmVnYWRkciwgdTMyIGJpdG1hc2ssIHUzMiBkYXRhKTsKKwl2b2lkICgqbGlua2VkX3NldF9yZWcpIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAJYm9vbCAoKnBoeV9yZjYwNTJfY29uZmlnKSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogCXZvaWQgKCpwaHlfcmY2MDUyX3NldF9jY2tfdHhwb3dlcikgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCQkgICAgdTggKnBvd2VybGV2ZWwpOwpAQCAtMTQwNCw3ICsxNDM2LDkgQEAKIAlpbnQgKCphZGFwdGVyX3N0YXJ0KSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogCXZvaWQgKCphZGFwdGVyX3N0b3ApIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAKLQlpbnQgKCphZGFwdGVyX3R4KSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpOworCWludCAoKmFkYXB0ZXJfdHgpIChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCXN0cnVjdCBydGxfdGNiX2Rlc2MgKnB0Y2JfZGVzYyk7CisJdm9pZCAoKmZsdXNoKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBkcm9wKTsKIAlpbnQgKCpyZXNldF90cnhfcmluZykgKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAlib29sICgqd2FpdHFfaW5zZXJ0KSAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpOwogCkBAIC0xNDE4LDYgKzE0NTIsMTUgQEAKIHN0cnVjdCBydGxfbW9kX3BhcmFtcyB7CiAJLyogZGVmYXVsdDogMCA9IHVzaW5nIGhhcmR3YXJlIGVuY3J5cHRpb24gKi8KIAlpbnQgc3dfY3J5cHRvOworCisJLyogZGVmYXVsdDogMSA9IHVzaW5nIG5vIGxpbmtlZCBwb3dlciBzYXZlICovCisJYm9vbCBpbmFjdGl2ZXBzOworCisJLyogZGVmYXVsdDogMSA9IHVzaW5nIGxpbmtlZCBzdyBwb3dlciBzYXZlICovCisJYm9vbCBzd2N0cmxfbHBzOworCisJLyogZGVmYXVsdDogMSA9IHVzaW5nIGxpbmtlZCBmdyBwb3dlciBzYXZlICovCisJYm9vbCBmd2N0cmxfbHBzOwogfTsKIAogc3RydWN0IHJ0bF9oYWxfdXNiaW50X2NmZyB7CkBAIC0xNDQ1LDYgKzE0ODgsNyBAQAogCiBzdHJ1Y3QgcnRsX2hhbF9jZmcgewogCXU4IGJhcl9pZDsKKwlib29sIHdyaXRlX3JlYWRiYWNrOwogCWNoYXIgKm5hbWU7CiAJY2hhciAqZndfbmFtZTsKIAlzdHJ1Y3QgcnRsX2hhbF9vcHMgKm9wczsKQEAgLTE0NjksNyArMTUxMyw2IEBACiAJc3BpbmxvY2tfdCByZl9sb2NrOwogCXNwaW5sb2NrX3QgbHBzX2xvY2s7CiAJc3BpbmxvY2tfdCB3YWl0cV9sb2NrOwotCXNwaW5sb2NrX3QgdHhfdXJiX2xvY2s7CiAKIAkvKkR1YWwgbWFjKi8KIAlzcGlubG9ja190IGNja19hbmRfcndfcGFnZWFfbG9jazsKQEAgLTE2MjEsMTkgKzE2NjQsMTkgQEAKIAl1MzIgYnRfZWRjYV91bDsKIAl1MzIgYnRfZWRjYV9kbDsKIAotCWJvb2wgYl9pbml0X3NldDsKLQlib29sIGJfYnRfYnVzeV90cmFmZmljOwotCWJvb2wgYl9idF90cmFmZmljX21vZGVfc2V0OwotCWJvb2wgYl9idF9ub25fdHJhZmZpY19tb2RlX3NldDsKKwlib29sIGluaXRfc2V0OworCWJvb2wgYnRfYnVzeV90cmFmZmljOworCWJvb2wgYnRfdHJhZmZpY19tb2RlX3NldDsKKwlib29sIGJ0X25vbl90cmFmZmljX21vZGVfc2V0OwogCi0JYm9vbCBiX2Z3X2NvZXhpc3RfYWxsX29mZjsKLQlib29sIGJfc3dfY29leGlzdF9hbGxfb2ZmOworCWJvb2wgZndfY29leGlzdF9hbGxfb2ZmOworCWJvb2wgc3dfY29leGlzdF9hbGxfb2ZmOwogCXUzMiBjdXJyZW50X3N0YXRlOwogCXUzMiBwcmV2aW91c19zdGF0ZTsKIAl1OCBidF9wcmVfcnNzaV9zdGF0ZTsKIAotCXU4IGJfcmVnX2J0X2lzbzsKLQl1OCBiX3JlZ19idF9zY287CisJdTggcmVnX2J0X2lzbzsKKwl1OCByZWdfYnRfc2NvOwogCiB9OwogCkBAIC0xNjUzLDEzICsxNjk2LDIzIEBACiAjZGVmaW5lIEVGNEJZVEUoX3ZhbCkJCVwKIAkobGUzMl90b19jcHUoX3ZhbCkpCiAKKy8qIFJlYWQgZGF0YSBmcm9tIG1lbW9yeSAqLworI2RlZmluZSBSRUFERUYxQllURShfcHRyKQlcCisJRUYxQllURSgqKCh1OCAqKShfcHRyKSkpCiAvKiBSZWFkIGxlMTYgZGF0YSBmcm9tIG1lbW9yeSBhbmQgY29udmVydCB0byBob3N0IG9yZGVyaW5nICovCiAjZGVmaW5lIFJFQURFRjJCWVRFKF9wdHIpCVwKIAlFRjJCWVRFKCooKHUxNiAqKShfcHRyKSkpCisjZGVmaW5lIFJFQURFRjRCWVRFKF9wdHIpCVwKKwlFRjRCWVRFKCooKHUzMiAqKShfcHRyKSkpCiAKKy8qIFdyaXRlIGRhdGEgdG8gbWVtb3J5ICovCisjZGVmaW5lIFdSSVRFRUYxQllURShfcHRyLCBfdmFsKQlcCisJKCooKHU4ICopKF9wdHIpKSkgPSBFRjFCWVRFKF92YWwpCiAvKiBXcml0ZSBsZTE2IGRhdGEgdG8gbWVtb3J5IGluIGhvc3Qgb3JkZXJpbmcgKi8KICNkZWZpbmUgV1JJVEVFRjJCWVRFKF9wdHIsIF92YWwpCVwKIAkoKigodTE2ICopKF9wdHIpKSkgPSBFRjJCWVRFKF92YWwpCisjZGVmaW5lIFdSSVRFRUY0QllURShfcHRyLCBfdmFsKQlcCisJKCooKHUxNiAqKShfcHRyKSkpID0gRUYyQllURShfdmFsKQogCiAvKiBDcmVhdGUgYSBiaXQgbWFzawogICogRXhhbXBsZXM6CkBAIC0xNjk4LDYgKzE3NTEsMjUgQEAKICNkZWZpbmUgTEVfUDFCWVRFX1RPX0hPU1RfMUJZVEUoX19wc3RhcnQpIFwKIAkoRUYxQllURSgqKCh1OCAqKShfX3BzdGFydCkpKSkKIAorLypEZXNjcmlwdGlvbjoKK1RyYW5zbGF0ZSBzdWJmaWVsZCAoY29udGludW91cyBiaXRzIGluIGxpdHRsZS1lbmRpYW4pIG9mIDQtYnl0ZQordmFsdWUgdG8gaG9zdCBieXRlIG9yZGVyaW5nLiovCisjZGVmaW5lIExFX0JJVFNfVE9fNEJZVEUoX19wc3RhcnQsIF9fYml0b2Zmc2V0LCBfX2JpdGxlbikgXAorCSggXAorCQkoTEVfUDRCWVRFX1RPX0hPU1RfNEJZVEUoX19wc3RhcnQpID4+IChfX2JpdG9mZnNldCkpICAmIFwKKwkJQklUX0xFTl9NQVNLXzMyKF9fYml0bGVuKSBcCisJKQorI2RlZmluZSBMRV9CSVRTX1RPXzJCWVRFKF9fcHN0YXJ0LCBfX2JpdG9mZnNldCwgX19iaXRsZW4pIFwKKwkoIFwKKwkJKExFX1AyQllURV9UT19IT1NUXzJCWVRFKF9fcHN0YXJ0KSA+PiAoX19iaXRvZmZzZXQpKSAmIFwKKwkJQklUX0xFTl9NQVNLXzE2KF9fYml0bGVuKSBcCisJKQorI2RlZmluZSBMRV9CSVRTX1RPXzFCWVRFKF9fcHN0YXJ0LCBfX2JpdG9mZnNldCwgX19iaXRsZW4pIFwKKwkoIFwKKwkJKExFX1AxQllURV9UT19IT1NUXzFCWVRFKF9fcHN0YXJ0KSA+PiAoX19iaXRvZmZzZXQpKSAmIFwKKwkJQklUX0xFTl9NQVNLXzgoX19iaXRsZW4pIFwKKwkpCisKIC8qIERlc2NyaXB0aW9uOgogICogTWFzayBzdWJmaWVsZCAoY29udGludW91cyBiaXRzIGluIGxpdHRsZS1lbmRpYW4pIG9mIDQtYnl0ZSB2YWx1ZQogICogYW5kIHJldHVybiB0aGUgcmVzdWx0IGluIDQtYnl0ZSB2YWx1ZSBpbiBob3N0IGJ5dGUgb3JkZXJpbmcuCkBAIC0xNzIxLDYgKzE3OTMsMTggQEAKIC8qIERlc2NyaXB0aW9uOgogICogU2V0IHN1YmZpZWxkIG9mIGxpdHRsZS1lbmRpYW4gNC1ieXRlIHZhbHVlIHRvIHNwZWNpZmllZCB2YWx1ZS4KICAqLworI2RlZmluZSBTRVRfQklUU19UT19MRV80QllURShfX3BzdGFydCwgX19iaXRvZmZzZXQsIF9fYml0bGVuLCBfX3ZhbCkgXAorCSooKHUzMiAqKShfX3BzdGFydCkpID0gRUY0QllURSBcCisJKCBcCisJCUxFX0JJVFNfQ0xFQVJFRF9UT180QllURShfX3BzdGFydCwgX19iaXRvZmZzZXQsIF9fYml0bGVuKSB8IFwKKwkJKCgoKHUzMilfX3ZhbCkgJiBCSVRfTEVOX01BU0tfMzIoX19iaXRsZW4pKSA8PCAoX19iaXRvZmZzZXQpKSBcCisJKTsKKyNkZWZpbmUgU0VUX0JJVFNfVE9fTEVfMkJZVEUoX19wc3RhcnQsIF9fYml0b2Zmc2V0LCBfX2JpdGxlbiwgX192YWwpIFwKKwkqKCh1MTYgKikoX19wc3RhcnQpKSA9IEVGMkJZVEUgXAorCSggXAorCQlMRV9CSVRTX0NMRUFSRURfVE9fMkJZVEUoX19wc3RhcnQsIF9fYml0b2Zmc2V0LCBfX2JpdGxlbikgfCBcCisJCSgoKCh1MTYpX192YWwpICYgQklUX0xFTl9NQVNLXzE2KF9fYml0bGVuKSkgPDwgKF9fYml0b2Zmc2V0KSkgXAorCSk7CiAjZGVmaW5lIFNFVF9CSVRTX1RPX0xFXzFCWVRFKF9fcHN0YXJ0LCBfX2JpdG9mZnNldCwgX19iaXRsZW4sIF9fdmFsKSBcCiAJKigodTggKikoX19wc3RhcnQpKSA9IEVGMUJZVEUgXAogCSggXApAQCAtMTcyOCwxMiArMTgxMiwxNiBAQAogCQkoKCgodTgpX192YWwpICYgQklUX0xFTl9NQVNLXzgoX19iaXRsZW4pKSA8PCAoX19iaXRvZmZzZXQpKSBcCiAJKTsKIAorI2RlZmluZQlOX0JZVEVfQUxJR01FTlQoX192YWx1ZSwgX19hbGlnbWVudCkgKChfX2FsaWdtZW50ID09IDEpID8gXAorCShfX3ZhbHVlKSA6ICgoKF9fdmFsdWUgKyBfX2FsaWdtZW50IC0gMSkgLyBfX2FsaWdtZW50KSAqIF9fYWxpZ21lbnQpKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCW1lbSBhY2Nlc3MgbWFjcm8gZGVmaW5lIGVuZAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2RlZmluZSBieXRlKHgsIG4pICgoeCA+PiAoOCAqIG4pKSAmIDB4ZmYpCiAKKyNkZWZpbmUgcGFja2V0X2dldF90eXBlKF9wYWNrZXQpIChFRjFCWVRFKChfcGFja2V0KS5vY3RldFswXSkgJiAweEZDKQogI2RlZmluZSBSVExfV0FUQ0hfRE9HX1RJTUUJMjAwMAogI2RlZmluZSBNU0VDUyh0KQkJbXNlY3NfdG9famlmZmllcyh0KQogI2RlZmluZSBXTEFOX0ZDX0dFVF9WRVJTKGZjKQkobGUxNl90b19jcHUoZmMpICYgSUVFRTgwMjExX0ZDVExfVkVSUykKQEAgLTE3NjgsNiArMTg1NiwxNSBAQAogI2RlZmluZSBjb250YWluZXJfb2ZfZHdvcmtfcnRsKHgsIHksIHopIFwKIAljb250YWluZXJfb2YoY29udGFpbmVyX29mKHgsIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspLCB5LCB6KQogCisjZGVmaW5lIEZJTExfT0NURVRfU1RSSU5HKF9vcywgX29jdGV0LCBfbGVuKQlcCisJCShfb3MpLm9jdGV0ID0gKHU4ICopKF9vY3RldCk7CQlcCisJCShfb3MpLmxlbmd0aCA9IChfbGVuKTsKKworI2RlZmluZSBDUF9NQUNBRERSKGRlcywgc3JjKQlcCisJKChkZXMpWzBdID0gKHNyYylbMF0sIChkZXMpWzFdID0gKHNyYylbMV0sXAorCShkZXMpWzJdID0gKHNyYylbMl0sIChkZXMpWzNdID0gKHNyYylbM10sXAorCShkZXMpWzRdID0gKHNyYylbNF0sIChkZXMpWzVdID0gKHNyYylbNV0pCisKIHN0YXRpYyBpbmxpbmUgdTggcnRsX3JlYWRfYnl0ZShzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsIHUzMiBhZGRyKQogewogCXJldHVybiBydGxwcml2LT5pby5yZWFkOF9zeW5jKHJ0bHByaXYsIGFkZHIpOwpAQCAtMTc4NiwxNyArMTg4MywyNiBAQAogc3RhdGljIGlubGluZSB2b2lkIHJ0bF93cml0ZV9ieXRlKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiwgdTMyIGFkZHIsIHU4IHZhbDgpCiB7CiAJcnRscHJpdi0+aW8ud3JpdGU4X2FzeW5jKHJ0bHByaXYsIGFkZHIsIHZhbDgpOworCisJaWYgKHJ0bHByaXYtPmNmZy0+d3JpdGVfcmVhZGJhY2spCisJCXJ0bHByaXYtPmlvLnJlYWQ4X3N5bmMocnRscHJpdiwgYWRkcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBydGxfd3JpdGVfd29yZChzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsIHUzMiBhZGRyLCB1MTYgdmFsMTYpCiB7CiAJcnRscHJpdi0+aW8ud3JpdGUxNl9hc3luYyhydGxwcml2LCBhZGRyLCB2YWwxNik7CisKKwlpZiAocnRscHJpdi0+Y2ZnLT53cml0ZV9yZWFkYmFjaykKKwkJcnRscHJpdi0+aW8ucmVhZDE2X3N5bmMocnRscHJpdiwgYWRkcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBydGxfd3JpdGVfZHdvcmQoc3RydWN0IHJ0bF9wcml2ICpydGxwcml2LAogCQkJCSAgIHUzMiBhZGRyLCB1MzIgdmFsMzIpCiB7CiAJcnRscHJpdi0+aW8ud3JpdGUzMl9hc3luYyhydGxwcml2LCBhZGRyLCB2YWwzMik7CisKKwlpZiAocnRscHJpdi0+Y2ZnLT53cml0ZV9yZWFkYmFjaykKKwkJcnRscHJpdi0+aW8ucmVhZDMyX3N5bmMocnRscHJpdiwgYWRkcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTMyIHJ0bF9nZXRfYmJyZWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCkBAIC0xODU1LDQgKzE5NjEsMzEgQEAKIAlyZXR1cm4gcnRscGh5LT5yZl90eXBlOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpZWVlODAyMTFfaGRyICpydGxfZ2V0X2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikoc2tiLT5kYXRhKTsKK30KKworc3RhdGljIGlubGluZSBfX2xlMTYgcnRsX2dldF9mYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBydGxfZ2V0X2hkcihza2IpLT5mcmFtZV9jb250cm9sOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBydGxfZ2V0X3RpZF9oKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCit7CisJcmV0dXJuIChpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKSlbMF0gJiBJRUVFODAyMTFfUU9TX0NUTF9USURfTUFTSzsKK30KKworc3RhdGljIGlubGluZSB1MTYgcnRsX2dldF90aWQoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gcnRsX2dldF90aWRfaChydGxfZ2V0X2hkcihza2IpKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqZ2V0X3N0YShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJCSAgICB1OCAqYnNzaWQpCit7CisJcmV0dXJuIGllZWU4MDIxMV9maW5kX3N0YSh2aWYsIGJzc2lkKTsKK30KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvY21kLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvY21kLmgKaW5kZXggZTVjNzRjNi4uNzljYTUyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL2NtZC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9jbWQuaApAQCAtMzEzLDggKzMxMyw4IEBACiB9IF9fcGFja2VkOwogCiBlbnVtIHdsMTI1MV9jbWRfcHNfbW9kZSB7Ci0JU1RBVElPTl9BQ1RJVkVfTU9ERSwKLQlTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERQorCUNISVBfQUNUSVZFX01PREUsCisJQ0hJUF9QT1dFUl9TQVZFX01PREUKIH07CiAKIHN0cnVjdCB3bDEyNTFfY21kX3BzX3BhcmFtcyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvZXZlbnQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9ldmVudC5jCmluZGV4IGRmYzQ1NzkuLjlmMTVjY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9ldmVudC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9ldmVudC5jCkBAIC02OCwxNCArNjgsMTYgQEAKIAlpZiAodmVjdG9yICYgQlNTX0xPU0VfRVZFTlRfSUQpIHsKIAkJd2wxMjUxX2RlYnVnKERFQlVHX0VWRU5ULCAiQlNTX0xPU0VfRVZFTlQiKTsKIAotCQlpZiAod2wtPnBzbV9yZXF1ZXN0ZWQgJiYgd2wtPnBzbSkgeworCQlpZiAod2wtPnBzbV9yZXF1ZXN0ZWQgJiYKKwkJICAgIHdsLT5zdGF0aW9uX21vZGUgIT0gU1RBVElPTl9BQ1RJVkVfTU9ERSkgewogCQkJcmV0ID0gd2wxMjUxX3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX0FDVElWRV9NT0RFKTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCXJldHVybiByZXQ7CiAJCX0KIAl9CiAKLQlpZiAodmVjdG9yICYgU1lOQ0hST05JWkFUSU9OX1RJTUVPVVRfRVZFTlRfSUQgJiYgd2wtPnBzbSkgeworCWlmICh2ZWN0b3IgJiBTWU5DSFJPTklaQVRJT05fVElNRU9VVF9FVkVOVF9JRCAmJgorCSAgICB3bC0+c3RhdGlvbl9tb2RlICE9IFNUQVRJT05fQUNUSVZFX01PREUpIHsKIAkJd2wxMjUxX2RlYnVnKERFQlVHX0VWRU5ULCAiU1lOQ0hST05JWkFUSU9OX1RJTUVPVVRfRVZFTlQiKTsKIAogCQkvKiBpbmRpY2F0ZSB0byB0aGUgc3RhY2ssIHRoYXQgYmVhY29ucyBoYXZlIGJlZW4gbG9zdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9tYWluLmMKaW5kZXggMTJjOWU2My4uYTE0YTQ4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvbWFpbi5jCkBAIC00OTcsNyArNDk3LDcgQEAKIAl3bC0+cnhfbGFzdF9pZCA9IDA7CiAJd2wtPm5leHRfdHhfY29tcGxldGUgPSAwOwogCXdsLT5lbHAgPSBmYWxzZTsKLQl3bC0+cHNtID0gMDsKKwl3bC0+c3RhdGlvbl9tb2RlID0gU1RBVElPTl9BQ1RJVkVfTU9ERTsKIAl3bC0+dHhfcXVldWVfc3RvcHBlZCA9IGZhbHNlOwogCXdsLT5wb3dlcl9sZXZlbCA9IFdMMTI1MV9ERUZBVUxUX1BPV0VSX0xFVkVMOwogCXdsLT5yc3NpX3Rob2xkID0gMDsKQEAgLTYzMiwxMyArNjMyLDI5IEBACiAKIAkJd2wtPnBzbV9yZXF1ZXN0ZWQgPSBmYWxzZTsKIAotCQlpZiAod2wtPnBzbSkgeworCQlpZiAod2wtPnN0YXRpb25fbW9kZSAhPSBTVEFUSU9OX0FDVElWRV9NT0RFKSB7CiAJCQlyZXQgPSB3bDEyNTFfcHNfc2V0X21vZGUod2wsIFNUQVRJT05fQUNUSVZFX01PREUpOwogCQkJaWYgKHJldCA8IDApCiAJCQkJZ290byBvdXRfc2xlZXA7CiAJCX0KIAl9CiAKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9JRExFKSB7CisJCWlmIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX0lETEUpIHsKKwkJCXJldCA9IHdsMTI1MV9wc19zZXRfbW9kZSh3bCwgU1RBVElPTl9JRExFKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gb3V0X3NsZWVwOworCQl9IGVsc2UgeworCQkJcmV0ID0gd2wxMjUxX3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX0FDVElWRV9NT0RFKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gb3V0X3NsZWVwOworCQkJcmV0ID0gd2wxMjUxX2pvaW4od2wsIHdsLT5ic3NfdHlwZSwgd2wtPmNoYW5uZWwsCisJCQkJCSAgd2wtPmJlYWNvbl9pbnQsIHdsLT5kdGltX3BlcmlvZCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dF9zbGVlcDsKKwkJfQorCX0KKwogCWlmIChjb25mLT5wb3dlcl9sZXZlbCAhPSB3bC0+cG93ZXJfbGV2ZWwpIHsKIAkJcmV0ID0gd2wxMjUxX2FjeF90eF9wb3dlcih3bCwgY29uZi0+cG93ZXJfbGV2ZWwpOwogCQlpZiAocmV0IDwgMCkKQEAgLTEzODQsNyArMTQwMCw3IEBACiAJd2wtPnJ4X2NvbmZpZyA9IFdMMTI1MV9ERUZBVUxUX1JYX0NPTkZJRzsKIAl3bC0+cnhfZmlsdGVyID0gV0wxMjUxX0RFRkFVTFRfUlhfRklMVEVSOwogCXdsLT5lbHAgPSBmYWxzZTsKLQl3bC0+cHNtID0gMDsKKwl3bC0+c3RhdGlvbl9tb2RlID0gU1RBVElPTl9BQ1RJVkVfTU9ERTsKIAl3bC0+cHNtX3JlcXVlc3RlZCA9IGZhbHNlOwogCXdsLT50eF9xdWV1ZV9zdG9wcGVkID0gZmFsc2U7CiAJd2wtPnBvd2VyX2xldmVsID0gV0wxMjUxX0RFRkFVTFRfUE9XRVJfTEVWRUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvcHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9wcy5jCmluZGV4IDljYzUxNDcuLmRiNzE5ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9wcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9wcy5jCkBAIC0zOSw3ICszOSw3IEBACiAKIAltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwogCi0JaWYgKHdsLT5lbHAgfHwgIXdsLT5wc20pCisJaWYgKHdsLT5lbHAgfHwgd2wtPnN0YXRpb25fbW9kZSA9PSBTVEFUSU9OX0FDVElWRV9NT0RFKQogCQlnb3RvIG91dDsKIAogCXdsMTI1MV9kZWJ1ZyhERUJVR19QU00sICJjaGlwIHRvIGVscCIpOwpAQCAtNTcsNyArNTcsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZGVsYXk7CiAKLQlpZiAod2wtPnBzbSkgeworCWlmICh3bC0+c3RhdGlvbl9tb2RlICE9IFNUQVRJT05fQUNUSVZFX01PREUpIHsKIAkJZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKEVMUF9FTlRSWV9ERUxBWSk7CiAJCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsod2wtPmh3LCAmd2wtPmVscF93b3JrLCBkZWxheSk7CiAJfQpAQCAtMTA0LDcgKzEwNCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCB3bDEyNTFfcHNfc2V0X21vZGUoc3RydWN0IHdsMTI1MSAqd2wsIGVudW0gd2wxMjUxX2NtZF9wc19tb2RlIG1vZGUpCitpbnQgd2wxMjUxX3BzX3NldF9tb2RlKHN0cnVjdCB3bDEyNTEgKndsLCBlbnVtIHdsMTI1MV9zdGF0aW9uX21vZGUgbW9kZSkKIHsKIAlpbnQgcmV0OwogCkBAIC0xMjgsMTUgKzEyOCwyNCBAQAogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAKLQkJcmV0ID0gd2wxMjUxX2NtZF9wc19tb2RlKHdsLCBTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERSk7CisJCXJldCA9IHdsMTI1MV9jbWRfcHNfbW9kZSh3bCwgQ0hJUF9QT1dFUl9TQVZFX01PREUpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAKIAkJcmV0ID0gd2wxMjUxX2FjeF9zbGVlcF9hdXRoKHdsLCBXTDEyNTFfUFNNX0VMUCk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKKwkJYnJlYWs7CisJY2FzZSBTVEFUSU9OX0lETEU6CisJCXdsMTI1MV9kZWJ1ZyhERUJVR19QU00sICJlbnRlcmluZyBpZGxlIik7CiAKLQkJd2wtPnBzbSA9IDE7CisJCXJldCA9IHdsMTI1MV9hY3hfc2xlZXBfYXV0aCh3bCwgV0wxMjUxX1BTTV9FTFApOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gd2wxMjUxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9ESVNDT05ORUNULCBOVUxMLCAwKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OwogCQlicmVhazsKIAljYXNlIFNUQVRJT05fQUNUSVZFX01PREU6CiAJZGVmYXVsdDoKQEAgLTE2MywxMyArMTcyLDEzIEBACiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAotCQlyZXQgPSB3bDEyNTFfY21kX3BzX21vZGUod2wsIFNUQVRJT05fQUNUSVZFX01PREUpOworCQlyZXQgPSB3bDEyNTFfY21kX3BzX21vZGUod2wsIENISVBfQUNUSVZFX01PREUpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAKLQkJd2wtPnBzbSA9IDA7CiAJCWJyZWFrOwogCX0KKwl3bC0+c3RhdGlvbl9tb2RlID0gbW9kZTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvcHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9wcy5oCmluZGV4IDU1YzNkZGEuLjc1ZWZhZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9wcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9wcy5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAid2wxMjUxLmgiCiAjaW5jbHVkZSAiYWN4LmgiCiAKLWludCB3bDEyNTFfcHNfc2V0X21vZGUoc3RydWN0IHdsMTI1MSAqd2wsIGVudW0gd2wxMjUxX2NtZF9wc19tb2RlIG1vZGUpOworaW50IHdsMTI1MV9wc19zZXRfbW9kZShzdHJ1Y3Qgd2wxMjUxICp3bCwgZW51bSB3bDEyNTFfc3RhdGlvbl9tb2RlIG1vZGUpOwogdm9pZCB3bDEyNTFfcHNfZWxwX3NsZWVwKHN0cnVjdCB3bDEyNTEgKndsKTsKIGludCB3bDEyNTFfcHNfZWxwX3dha2V1cChzdHJ1Y3Qgd2wxMjUxICp3bCk7CiB2b2lkIHdsMTI1MV9lbHBfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL3dsMTI1MS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL3dsMTI1MS5oCmluZGV4IGJiMjNjZDUuLmE3N2YxYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS93bDEyNTEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvd2wxMjUxLmgKQEAgLTEyOSw2ICsxMjksMTIgQEAKIAlQQVJUX1RBQkxFX0xFTgogfTsKIAorZW51bSB3bDEyNTFfc3RhdGlvbl9tb2RlIHsKKwlTVEFUSU9OX0FDVElWRV9NT0RFLAorCVNUQVRJT05fUE9XRVJfU0FWRV9NT0RFLAorCVNUQVRJT05fSURMRSwKK307CisKIHN0cnVjdCB3bDEyNTFfcGFydGl0aW9uIHsKIAl1MzIgc2l6ZTsKIAl1MzIgc3RhcnQ7CkBAIC0zNTgsOCArMzY0LDcgQEAKIAogCXN0cnVjdCBkZWxheWVkX3dvcmsgZWxwX3dvcms7CiAKLQkvKiB3ZSBjYW4gYmUgaW4gcHNtLCBidXQgbm90IGluIGVscCwgd2UgaGF2ZSB0byBkaWZmZXJlbnRpYXRlICovCi0JYm9vbCBwc207CisJZW51bSB3bDEyNTFfc3RhdGlvbl9tb2RlIHN0YXRpb25fbW9kZTsKIAogCS8qIFBTTSBtb2RlIHJlcXVlc3RlZCAqLwogCWJvb2wgcHNtX3JlcXVlc3RlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L0tjb25maWcKaW5kZXggNjkyZWJmZi4uMzVjZTdiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L0tjb25maWcKQEAgLTMsNyArMyw3IEBACiAJZGVwZW5kcyBvbiBNQUM4MDIxMSAmJiBFWFBFUklNRU5UQUwKIAktLS1oZWxwLS0tCiAJICBUaGlzIHdpbGwgZW5hYmxlIFRJIHdsMTJ4eCBkcml2ZXIgc3VwcG9ydCBmb3IgdGhlIGZvbGxvd2luZyBjaGlwczoKLQkgIHdsMTI3MSBhbmQgd2wxMjczLgorCSAgd2wxMjcxLCB3bDEyNzMsIHdsMTI4MSBhbmQgd2wxMjgzLgogCSAgVGhlIGRyaXZlcnMgbWFrZSB1c2Ugb2YgdGhlIG1hYzgwMjExIHN0YWNrLgogCiBjb25maWcgV0wxMlhYCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvYWN4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvYWN4LmMKaW5kZXggYTNkYjc1NS4uYzZlZTUzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2FjeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9hY3guYwpAQCAtMzI1LDEyICszMjUsMTkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgd2wxMjcxX2FjeF9ydHNfdGhyZXNob2xkKHN0cnVjdCB3bDEyNzEgKndsLCB1MTYgcnRzX3RocmVzaG9sZCkKK2ludCB3bDEyNzFfYWN4X3J0c190aHJlc2hvbGQoc3RydWN0IHdsMTI3MSAqd2wsIHUzMiBydHNfdGhyZXNob2xkKQogewogCXN0cnVjdCBhY3hfcnRzX3RocmVzaG9sZCAqcnRzOwogCWludCByZXQ7CiAKLQl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHJ0cyB0aHJlc2hvbGQiKTsKKwkvKgorCSAqIElmIHRoZSBSVFMgdGhyZXNob2xkIGlzIG5vdCBjb25maWd1cmVkIG9yIG91dCBvZiByYW5nZSwgdXNlIHRoZQorCSAqIGRlZmF1bHQgdmFsdWUuCisJICovCisJaWYgKHJ0c190aHJlc2hvbGQgPiBJRUVFODAyMTFfTUFYX1JUU19USFJFU0hPTEQpCisJCXJ0c190aHJlc2hvbGQgPSB3bC0+Y29uZi5yeC5ydHNfdGhyZXNob2xkOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBydHMgdGhyZXNob2xkOiAlZCIsIHJ0c190aHJlc2hvbGQpOwogCiAJcnRzID0ga3phbGxvYyhzaXplb2YoKnJ0cyksIEdGUF9LRVJORUwpOwogCWlmICghcnRzKSB7CkBAIC0zMzgsNyArMzQ1LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcnRzLT50aHJlc2hvbGQgPSBjcHVfdG9fbGUxNihydHNfdGhyZXNob2xkKTsKKwlydHMtPnRocmVzaG9sZCA9IGNwdV90b19sZTE2KCh1MTYpcnRzX3RocmVzaG9sZCk7CiAKIAlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgRE9UMTFfUlRTX1RIUkVTSE9MRCwgcnRzLCBzaXplb2YoKnJ0cykpOwogCWlmIChyZXQgPCAwKSB7CkBAIC01NDAsMTMgKzU0NywxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCB3bDEyNzFfYWN4X3NnX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK2ludCB3bDEyNzFfYWN4X3N0YV9zZ19jZmcoc3RydWN0IHdsMTI3MSAqd2wpCiB7Ci0Jc3RydWN0IGFjeF9idF93bGFuX2NvZXhfcGFyYW0gKnBhcmFtOworCXN0cnVjdCBhY3hfc3RhX2J0X3dsYW5fY29leF9wYXJhbSAqcGFyYW07CiAJc3RydWN0IGNvbmZfc2dfc2V0dGluZ3MgKmMgPSAmd2wtPmNvbmYuc2c7CiAJaW50IGksIHJldDsKIAotCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggc2cgY2ZnIik7CisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBzZyBzdGEgY2ZnIik7CiAKIAlwYXJhbSA9IGt6YWxsb2Moc2l6ZW9mKCpwYXJhbSksIEdGUF9LRVJORUwpOwogCWlmICghcGFyYW0pIHsKQEAgLTU1NSw4ICs1NjIsMzggQEAKIAl9CiAKIAkvKiBCVC1XTEFOIGNvZXh0IHBhcmFtZXRlcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQ09ORl9TR19QQVJBTVNfTUFYOyBpKyspCi0JCXBhcmFtLT5wYXJhbXNbaV0gPSBjcHVfdG9fbGUzMihjLT5wYXJhbXNbaV0pOworCWZvciAoaSA9IDA7IGkgPCBDT05GX1NHX1NUQV9QQVJBTVNfTUFYOyBpKyspCisJCXBhcmFtLT5wYXJhbXNbaV0gPSBjcHVfdG9fbGUzMihjLT5zdGFfcGFyYW1zW2ldKTsKKwlwYXJhbS0+cGFyYW1faWR4ID0gQ09ORl9TR19QQVJBTVNfQUxMOworCisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9TR19DRkcsIHBhcmFtLCBzaXplb2YoKnBhcmFtKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgc2cgY29uZmlnOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKHBhcmFtKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9hcF9zZ19jZmcoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IGFjeF9hcF9idF93bGFuX2NvZXhfcGFyYW0gKnBhcmFtOworCXN0cnVjdCBjb25mX3NnX3NldHRpbmdzICpjID0gJndsLT5jb25mLnNnOworCWludCBpLCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHNnIGFwIGNmZyIpOworCisJcGFyYW0gPSBremFsbG9jKHNpemVvZigqcGFyYW0pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhcmFtKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCS8qIEJULVdMQU4gY29leHQgcGFyYW1ldGVycyAqLworCWZvciAoaSA9IDA7IGkgPCBDT05GX1NHX0FQX1BBUkFNU19NQVg7IGkrKykKKwkJcGFyYW0tPnBhcmFtc1tpXSA9IGNwdV90b19sZTMyKGMtPmFwX3BhcmFtc1tpXSk7CiAJcGFyYW0tPnBhcmFtX2lkeCA9IENPTkZfU0dfUEFSQU1TX0FMTDsKIAogCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfU0dfQ0ZHLCBwYXJhbSwgc2l6ZW9mKCpwYXJhbSkpOwpAQCAtODA0LDcgKzg0MSw4IEBACiAJc3RydWN0IGFjeF9hcF9yYXRlX3BvbGljeSAqYWN4OwogCWludCByZXQgPSAwOwogCi0Jd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBhcCByYXRlIHBvbGljeSIpOworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggYXAgcmF0ZSBwb2xpY3kgJWQgcmF0ZXMgMHgleCIsCisJCSAgICAgaWR4LCBjLT5lbmFibGVkX3JhdGVzKTsKIAogCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWFjeCkgewpAQCAtODk4LDEyICs5MzYsMTkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgd2wxMjcxX2FjeF9mcmFnX3RocmVzaG9sZChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IGZyYWdfdGhyZXNob2xkKQoraW50IHdsMTI3MV9hY3hfZnJhZ190aHJlc2hvbGQoc3RydWN0IHdsMTI3MSAqd2wsIHUzMiBmcmFnX3RocmVzaG9sZCkKIHsKIAlzdHJ1Y3QgYWN4X2ZyYWdfdGhyZXNob2xkICphY3g7CiAJaW50IHJldCA9IDA7CiAKLQl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGZyYWcgdGhyZXNob2xkIik7CisJLyoKKwkgKiBJZiB0aGUgZnJhZ21lbnRhdGlvbiBpcyBub3QgY29uZmlndXJlZCBvciBvdXQgb2YgcmFuZ2UsIHVzZSB0aGUKKwkgKiBkZWZhdWx0IHZhbHVlLgorCSAqLworCWlmIChmcmFnX3RocmVzaG9sZCA+IElFRUU4MDIxMV9NQVhfRlJBR19USFJFU0hPTEQpCisJCWZyYWdfdGhyZXNob2xkID0gd2wtPmNvbmYudHguZnJhZ190aHJlc2hvbGQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGZyYWcgdGhyZXNob2xkOiAlZCIsIGZyYWdfdGhyZXNob2xkKTsKIAogCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKIApAQCAtOTEyLDcgKzk1Nyw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWFjeC0+ZnJhZ190aHJlc2hvbGQgPSBjcHVfdG9fbGUxNihmcmFnX3RocmVzaG9sZCk7CisJYWN4LT5mcmFnX3RocmVzaG9sZCA9IGNwdV90b19sZTE2KCh1MTYpZnJhZ190aHJlc2hvbGQpOwogCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfRlJBR19DRkcsIGFjeCwgc2l6ZW9mKCphY3gpKTsKIAlpZiAocmV0IDwgMCkgewogCQl3bDEyNzFfd2FybmluZygiU2V0dGluZyBvZiBmcmFnIHRocmVzaG9sZCBmYWlsZWQ6ICVkIiwgcmV0KTsKQEAgLTk1NCw2ICs5OTksNyBAQAogaW50IHdsMTI3MV9hY3hfYXBfbWVtX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKIAlzdHJ1Y3Qgd2wxMjcxX2FjeF9hcF9jb25maWdfbWVtb3J5ICptZW1fY29uZjsKKwlzdHJ1Y3QgY29uZl9tZW1vcnlfc2V0dGluZ3MgKm1lbTsKIAlpbnQgcmV0OwogCiAJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgIndsMTI3MSBtZW0gY2ZnIik7CkBAIC05NjQsMTEgKzEwMTAsMjEgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJaWYgKHdsLT5jaGlwLmlkID09IENISVBfSURfMTI4M19QRzIwKQorCQkvKgorCQkgKiBGSVhNRTogVGhlIDEyOHggQVAgRlcgZG9lcyBub3QgeWV0IHN1cHBvcnQgZHluYW1pYyBtZW1vcnkuCisJCSAqIFVzZSB0aGUgYmFzZSBtZW1vcnkgY29uZmlndXJhdGlvbiBmb3IgMTI4eCBmb3Igbm93LiBUaGlzCisJCSAqIHNob3VsZCBiZSBmaW5lIHR1bmVkIGluIHRoZSBmdXR1cmUuCisJCSAqLworCQltZW0gPSAmd2wtPmNvbmYubWVtX3dsMTI4eDsKKwllbHNlCisJCW1lbSA9ICZ3bC0+Y29uZi5tZW1fd2wxMjd4OworCiAJLyogbWVtb3J5IGNvbmZpZyAqLwotCW1lbV9jb25mLT5udW1fc3RhdGlvbnMgPSB3bC0+Y29uZi5tZW0ubnVtX3N0YXRpb25zOwotCW1lbV9jb25mLT5yeF9tZW1fYmxvY2tfbnVtID0gd2wtPmNvbmYubWVtLnJ4X2Jsb2NrX251bTsKLQltZW1fY29uZi0+dHhfbWluX21lbV9ibG9ja19udW0gPSB3bC0+Y29uZi5tZW0udHhfbWluX2Jsb2NrX251bTsKLQltZW1fY29uZi0+bnVtX3NzaWRfcHJvZmlsZXMgPSB3bC0+Y29uZi5tZW0uc3NpZF9wcm9maWxlczsKKwltZW1fY29uZi0+bnVtX3N0YXRpb25zID0gbWVtLT5udW1fc3RhdGlvbnM7CisJbWVtX2NvbmYtPnJ4X21lbV9ibG9ja19udW0gPSBtZW0tPnJ4X2Jsb2NrX251bTsKKwltZW1fY29uZi0+dHhfbWluX21lbV9ibG9ja19udW0gPSBtZW0tPnR4X21pbl9ibG9ja19udW07CisJbWVtX2NvbmYtPm51bV9zc2lkX3Byb2ZpbGVzID0gbWVtLT5zc2lkX3Byb2ZpbGVzOwogCW1lbV9jb25mLT50b3RhbF90eF9kZXNjcmlwdG9ycyA9IGNwdV90b19sZTMyKEFDWF9UWF9ERVNDUklQVE9SUyk7CiAKIAlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX01FTV9DRkcsIG1lbV9jb25mLApAQCAtOTg2LDYgKzEwNDIsNyBAQAogaW50IHdsMTI3MV9hY3hfc3RhX21lbV9jZmcoc3RydWN0IHdsMTI3MSAqd2wpCiB7CiAJc3RydWN0IHdsMTI3MV9hY3hfc3RhX2NvbmZpZ19tZW1vcnkgKm1lbV9jb25mOworCXN0cnVjdCBjb25mX21lbW9yeV9zZXR0aW5ncyAqbWVtOwogCWludCByZXQ7CiAKIAl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAid2wxMjcxIG1lbSBjZmciKTsKQEAgLTk5NiwxNiArMTA1MywyMSBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlpZiAod2wtPmNoaXAuaWQgPT0gQ0hJUF9JRF8xMjgzX1BHMjApCisJCW1lbSA9ICZ3bC0+Y29uZi5tZW1fd2wxMjh4OworCWVsc2UKKwkJbWVtID0gJndsLT5jb25mLm1lbV93bDEyN3g7CisKIAkvKiBtZW1vcnkgY29uZmlnICovCi0JbWVtX2NvbmYtPm51bV9zdGF0aW9ucyA9IHdsLT5jb25mLm1lbS5udW1fc3RhdGlvbnM7Ci0JbWVtX2NvbmYtPnJ4X21lbV9ibG9ja19udW0gPSB3bC0+Y29uZi5tZW0ucnhfYmxvY2tfbnVtOwotCW1lbV9jb25mLT50eF9taW5fbWVtX2Jsb2NrX251bSA9IHdsLT5jb25mLm1lbS50eF9taW5fYmxvY2tfbnVtOwotCW1lbV9jb25mLT5udW1fc3NpZF9wcm9maWxlcyA9IHdsLT5jb25mLm1lbS5zc2lkX3Byb2ZpbGVzOworCW1lbV9jb25mLT5udW1fc3RhdGlvbnMgPSBtZW0tPm51bV9zdGF0aW9uczsKKwltZW1fY29uZi0+cnhfbWVtX2Jsb2NrX251bSA9IG1lbS0+cnhfYmxvY2tfbnVtOworCW1lbV9jb25mLT50eF9taW5fbWVtX2Jsb2NrX251bSA9IG1lbS0+dHhfbWluX2Jsb2NrX251bTsKKwltZW1fY29uZi0+bnVtX3NzaWRfcHJvZmlsZXMgPSBtZW0tPnNzaWRfcHJvZmlsZXM7CiAJbWVtX2NvbmYtPnRvdGFsX3R4X2Rlc2NyaXB0b3JzID0gY3B1X3RvX2xlMzIoQUNYX1RYX0RFU0NSSVBUT1JTKTsKLQltZW1fY29uZi0+ZHluX21lbV9lbmFibGUgPSB3bC0+Y29uZi5tZW0uZHluYW1pY19tZW1vcnk7Ci0JbWVtX2NvbmYtPnR4X2ZyZWVfcmVxID0gd2wtPmNvbmYubWVtLm1pbl9yZXFfdHhfYmxvY2tzOwotCW1lbV9jb25mLT5yeF9mcmVlX3JlcSA9IHdsLT5jb25mLm1lbS5taW5fcmVxX3J4X2Jsb2NrczsKLQltZW1fY29uZi0+dHhfbWluID0gd2wtPmNvbmYubWVtLnR4X21pbjsKKwltZW1fY29uZi0+ZHluX21lbV9lbmFibGUgPSBtZW0tPmR5bmFtaWNfbWVtb3J5OworCW1lbV9jb25mLT50eF9mcmVlX3JlcSA9IG1lbS0+bWluX3JlcV90eF9ibG9ja3M7CisJbWVtX2NvbmYtPnJ4X2ZyZWVfcmVxID0gbWVtLT5taW5fcmVxX3J4X2Jsb2NrczsKKwltZW1fY29uZi0+dHhfbWluID0gbWVtLT50eF9taW47CiAKIAlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX01FTV9DRkcsIG1lbV9jb25mLAogCQkJCSAgIHNpemVvZigqbWVtX2NvbmYpKTsKQEAgLTEwMTksNiArMTA4MSwzMiBAQAogCXJldHVybiByZXQ7CiB9CiAKK2ludCB3bDEyNzFfYWN4X2hvc3RfaWZfY2ZnX2JpdG1hcChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTMyIGhvc3RfY2ZnX2JpdG1hcCkKK3sKKwlzdHJ1Y3Qgd2wxMjcxX2FjeF9ob3N0X2NvbmZpZ19iaXRtYXAgKmJpdG1hcF9jb25mOworCWludCByZXQ7CisKKwliaXRtYXBfY29uZiA9IGt6YWxsb2Moc2l6ZW9mKCpiaXRtYXBfY29uZiksIEdGUF9LRVJORUwpOworCWlmICghYml0bWFwX2NvbmYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYml0bWFwX2NvbmYtPmhvc3RfY2ZnX2JpdG1hcCA9IGNwdV90b19sZTMyKGhvc3RfY2ZnX2JpdG1hcCk7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX0hPU1RfSUZfQ0ZHX0JJVE1BUCwKKwkJCQkgICBiaXRtYXBfY29uZiwgc2l6ZW9mKCpiaXRtYXBfY29uZikpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJ3bDEyNzEgYml0bWFwIGNvbmZpZyBvcHQgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGJpdG1hcF9jb25mKTsKKworCXJldHVybiByZXQ7Cit9CisKIGludCB3bDEyNzFfYWN4X2luaXRfbWVtX2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKIAlpbnQgcmV0OwpAQCAtMTU2NywzICsxNjU1LDY4IEBACiAJa2ZyZWUoYWN4KTsKIAlyZXR1cm4gcmV0OwogfQorCitpbnQgd2wxMjcxX2FjeF9zZXRfYXBfYmVhY29uX2ZpbHRlcihzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IGFjeF9hcF9iZWFjb25fZmlsdGVyICphY3ggPSBOVUxMOworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHNldCBhcCBiZWFjb24gZmlsdGVyOiAlZCIsIGVuYWJsZSk7CisKKwlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY3gpCisJCXJldHVybiAtRU5PTUVNOworCisJYWN4LT5lbmFibGUgPSBlbmFibGUgPyAxIDogMDsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfQVBfQkVBQ09OX0ZJTFRFUl9PUFQsCisJCQkJICAgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJhY3ggc2V0IGFwIGJlYWNvbiBmaWx0ZXIgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfZm1fY29leChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3Qgd2wxMjcxX2FjeF9mbV9jb2V4ICphY3g7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggZm0gY29leCBzZXR0aW5nIik7CisKKwlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY3gpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYWN4LT5lbmFibGUgPSB3bC0+Y29uZi5mbV9jb2V4LmVuYWJsZTsKKwlhY3gtPnN3YWxsb3dfcGVyaW9kID0gd2wtPmNvbmYuZm1fY29leC5zd2FsbG93X3BlcmlvZDsKKwlhY3gtPm5fZGl2aWRlcl9mcmVmX3NldF8xID0gd2wtPmNvbmYuZm1fY29leC5uX2RpdmlkZXJfZnJlZl9zZXRfMTsKKwlhY3gtPm5fZGl2aWRlcl9mcmVmX3NldF8yID0gd2wtPmNvbmYuZm1fY29leC5uX2RpdmlkZXJfZnJlZl9zZXRfMjsKKwlhY3gtPm1fZGl2aWRlcl9mcmVmX3NldF8xID0KKwkJY3B1X3RvX2xlMTYod2wtPmNvbmYuZm1fY29leC5tX2RpdmlkZXJfZnJlZl9zZXRfMSk7CisJYWN4LT5tX2RpdmlkZXJfZnJlZl9zZXRfMiA9CisJCWNwdV90b19sZTE2KHdsLT5jb25mLmZtX2NvZXgubV9kaXZpZGVyX2ZyZWZfc2V0XzIpOworCWFjeC0+Y29leF9wbGxfc3RhYmlsaXphdGlvbl90aW1lID0KKwkJY3B1X3RvX2xlMzIod2wtPmNvbmYuZm1fY29leC5jb2V4X3BsbF9zdGFiaWxpemF0aW9uX3RpbWUpOworCWFjeC0+bGRvX3N0YWJpbGl6YXRpb25fdGltZSA9CisJCWNwdV90b19sZTE2KHdsLT5jb25mLmZtX2NvZXgubGRvX3N0YWJpbGl6YXRpb25fdGltZSk7CisJYWN4LT5mbV9kaXN0dXJiZWRfYmFuZF9tYXJnaW4gPQorCQl3bC0+Y29uZi5mbV9jb2V4LmZtX2Rpc3R1cmJlZF9iYW5kX21hcmdpbjsKKwlhY3gtPnN3YWxsb3dfY2xrX2RpZmYgPSB3bC0+Y29uZi5mbV9jb2V4LnN3YWxsb3dfY2xrX2RpZmY7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX0ZNX0NPRVhfQ0ZHLCBhY3gsIHNpemVvZigqYWN4KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImFjeCBmbSBjb2V4IHNldHRpbmcgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9hY3guaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9hY3guaAppbmRleCBkZDE5YjAxLi45YTg5NWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvYWN4LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2FjeC5oCkBAIC0zMDMsNyArMzAzLDYgQEAKIAlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CiAKIAl1OCBlbmFibGU7Ci0KIAkvKgogCSAqIFRoZSBudW1iZXIgb2YgYmVhY29ucyB3aXRob3V0IHRoZSB1bmljYXN0IFRJTQogCSAqIGJpdCBzZXQgdGhhdCB0aGUgZmlybXdhcmUgYnVmZmVycyBiZWZvcmUKQEAgLTM3MCwxNCArMzY5LDIzIEBACiAJdTggcGFkWzNdOwogfSBfX3BhY2tlZDsKIAotc3RydWN0IGFjeF9idF93bGFuX2NvZXhfcGFyYW0geworc3RydWN0IGFjeF9zdGFfYnRfd2xhbl9jb2V4X3BhcmFtIHsKIAlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CiAKLQlfX2xlMzIgcGFyYW1zW0NPTkZfU0dfUEFSQU1TX01BWF07CisJX19sZTMyIHBhcmFtc1tDT05GX1NHX1NUQV9QQVJBTVNfTUFYXTsKIAl1OCBwYXJhbV9pZHg7CiAJdTggcGFkZGluZ1szXTsKIH0gX19wYWNrZWQ7CiAKK3N0cnVjdCBhY3hfYXBfYnRfd2xhbl9jb2V4X3BhcmFtIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwlfX2xlMzIgcGFyYW1zW0NPTkZfU0dfQVBfUEFSQU1TX01BWF07CisJdTggcGFyYW1faWR4OworCXU4IHBhZGRpbmdbM107Cit9IF9fcGFja2VkOworCisKIHN0cnVjdCBhY3hfZGNvX2l0cmltX3BhcmFtcyB7CiAJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwogCkBAIC05MzksNiArOTQ3LDE2IEBACiAJdTggcGFkZGluZzsKIH0gX19wYWNrZWQ7CiAKKyNkZWZpbmUgSE9TVF9JRl9DRkdfUlhfRklGT19FTkFCTEUgICAgIEJJVCgwKQorI2RlZmluZSBIT1NUX0lGX0NGR19UWF9FWFRSQV9CTEtTX1NXQVAgQklUKDEpCisjZGVmaW5lIEhPU1RfSUZfQ0ZHX1RYX1BBRF9UT19TRElPX0JMSyBCSVQoMykKKworc3RydWN0IHdsMTI3MV9hY3hfaG9zdF9jb25maWdfYml0bWFwIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwlfX2xlMzIgaG9zdF9jZmdfYml0bWFwOworfSBfX3BhY2tlZDsKKwogZW51bSB7CiAJV0wxMjcxX0FDWF9UUklHX1RZUEVfTEVWRUwgPSAwLAogCVdMMTI3MV9BQ1hfVFJJR19UWVBFX0VER0UsCkBAIC0xMTYyLDYgKzExODAsNzIgQEAKIAl1OCBwYWRkaW5nMVsyXTsKIH0gX19wYWNrZWQ7CiAKK3N0cnVjdCBhY3hfYXBfYmVhY29uX2ZpbHRlciB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJdTggZW5hYmxlOworCXU4IHBhZFszXTsKK30gX19wYWNrZWQ7CisKKy8qCisgKiBBQ1hfRk1fQ09FWF9DRkcKKyAqIHNldCB0aGUgRk0gY28tZXhpc3RlbmNlIHBhcmFtZXRlcnMuCisgKi8KK3N0cnVjdCB3bDEyNzFfYWN4X2ZtX2NvZXggeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKwkvKiBlbmFibGUoMSkgLyBkaXNhYmxlKDApIHRoZSBGTSBDb2V4IGZlYXR1cmUgKi8KKwl1OCBlbmFibGU7CisJLyoKKwkgKiBTd2FsbG93IHBlcmlvZCB1c2VkIGluIENPRVggUExMIHN3YWxsb3dpbmcgbWVjaGFuaXNtLgorCSAqIDB4RkYgPSB1c2UgRlcgZGVmYXVsdAorCSAqLworCXU4IHN3YWxsb3dfcGVyaW9kOworCS8qCisJICogVGhlIE4gZGl2aWRlciB1c2VkIGluIENPRVggUExMIHN3YWxsb3dpbmcgbWVjaGFuaXNtIGZvciBGcmVmIG9mCisJICogMzguNC8xOS4yIE1oei4gMHhGRiA9IHVzZSBGVyBkZWZhdWx0CisJICovCisJdTggbl9kaXZpZGVyX2ZyZWZfc2V0XzE7CisJLyoKKwkgKiBUaGUgTiBkaXZpZGVyIHVzZWQgaW4gQ09FWCBQTEwgc3dhbGxvd2luZyBtZWNoYW5pc20gZm9yIEZyZWYgb2YKKwkgKiAyNi81MiBNaHouIDB4RkYgPSB1c2UgRlcgZGVmYXVsdAorCSAqLworCXU4IG5fZGl2aWRlcl9mcmVmX3NldF8yOworCS8qCisJICogVGhlIE0gZGl2aWRlciB1c2VkIGluIENPRVggUExMIHN3YWxsb3dpbmcgbWVjaGFuaXNtIGZvciBGcmVmIG9mCisJICogMzguNC8xOS4yIE1oei4gMHhGRkZGID0gdXNlIEZXIGRlZmF1bHQKKwkgKi8KKwlfX2xlMTYgbV9kaXZpZGVyX2ZyZWZfc2V0XzE7CisJLyoKKwkgKiBUaGUgTSBkaXZpZGVyIHVzZWQgaW4gQ09FWCBQTEwgc3dhbGxvd2luZyBtZWNoYW5pc20gZm9yIEZyZWYgb2YKKwkgKiAyNi81MiBNaHouIDB4RkZGRiA9IHVzZSBGVyBkZWZhdWx0CisJICovCisJX19sZTE2IG1fZGl2aWRlcl9mcmVmX3NldF8yOworCS8qCisJICogVGhlIHRpbWUgZHVyYXRpb24gaW4gdVNlYyByZXF1aXJlZCBmb3IgQ09FWCBQTEwgdG8gc3RhYmlsaXplLgorCSAqIDB4RkZGRkZGRkYgPSB1c2UgRlcgZGVmYXVsdAorCSAqLworCV9fbGUzMiBjb2V4X3BsbF9zdGFiaWxpemF0aW9uX3RpbWU7CisJLyoKKwkgKiBUaGUgdGltZSBkdXJhdGlvbiBpbiB1U2VjIHJlcXVpcmVkIGZvciBMRE8gdG8gc3RhYmlsaXplLgorCSAqIDB4RkZGRkZGRkYgPSB1c2UgRlcgZGVmYXVsdAorCSAqLworCV9fbGUxNiBsZG9fc3RhYmlsaXphdGlvbl90aW1lOworCS8qCisJICogVGhlIGRpc3R1cmJlZCBmcmVxdWVuY3kgYmFuZCBtYXJnaW4gYXJvdW5kIHRoZSBkaXN0dXJiZWQgZnJlcXVlbmN5CisJICogY2VudGVyIChzaW5nbGUgc2lkZWQpLgorCSAqIEZvciBleGFtcGxlLCBpZiAyIGlzIGNvbmZpZ3VyZWQsIHRoZSBmb2xsb3dpbmcgY2hhbm5lbHMgd2lsbCBiZQorCSAqIGNvbnNpZGVyZWQgZGlzdHVyYmVkIGNoYW5uZWw6CisJICogICA4MCArLSAwLjEgTUh6LCA5MSArLSAwLjEgTUh6LCA5OCArLSAwLjEgTUh6LCAxMDIgKy0gMC4xIE1ICisJICogMHhGRiA9IHVzZSBGVyBkZWZhdWx0CisJICovCisJdTggZm1fZGlzdHVyYmVkX2JhbmRfbWFyZ2luOworCS8qCisJICogVGhlIHN3YWxsb3cgY2xvY2sgZGlmZmVyZW5jZSBvZiB0aGUgc3dhbGxvd2luZyBtZWNoYW5pc20uCisJICogMHhGRiA9IHVzZSBGVyBkZWZhdWx0CisJICovCisJdTggc3dhbGxvd19jbGtfZGlmZjsKK30gX19wYWNrZWQ7CisKIGVudW0gewogCUFDWF9XQUtFX1VQX0NPTkRJVElPTlMgICAgICA9IDB4MDAwMiwKIAlBQ1hfTUVNX0NGRyAgICAgICAgICAgICAgICAgPSAweDAwMDMsCkBAIC0xMTgwLDYgKzEyNjQsNyBAQAogCUFDWF9USURfQ0ZHICAgICAgICAgICAgICAgICA9IDB4MDAxQSwKIAlBQ1hfUFNfUlhfU1RSRUFNSU5HICAgICAgICAgPSAweDAwMUIsCiAJQUNYX0JFQUNPTl9GSUxURVJfT1BUICAgICAgID0gMHgwMDFGLAorCUFDWF9BUF9CRUFDT05fRklMVEVSX09QVCAgICA9IDB4MDAyMCwKIAlBQ1hfTk9JU0VfSElTVCAgICAgICAgICAgICAgPSAweDAwMjEsCiAJQUNYX0hES19WRVJTSU9OICAgICAgICAgICAgID0gMHgwMDIyLCAvKiA/Pz8gKi8KIAlBQ1hfUERfVEhSRVNIT0xEICAgICAgICAgICAgPSAweDAwMjMsCkBAIC0xMTkxLDYgKzEyNzYsNyBAQAogCUFDWF9CQ05fRFRJTV9PUFRJT05TICAgICAgICA9IDB4MDAzMSwKIAlBQ1hfU0dfRU5BQkxFICAgICAgICAgICAgICAgPSAweDAwMzIsCiAJQUNYX1NHX0NGRyAgICAgICAgICAgICAgICAgID0gMHgwMDMzLAorCUFDWF9GTV9DT0VYX0NGRyAgICAgICAgICAgICA9IDB4MDAzNCwKIAlBQ1hfQkVBQ09OX0ZJTFRFUl9UQUJMRSAgICAgPSAweDAwMzgsCiAJQUNYX0FSUF9JUF9GSUxURVIgICAgICAgICAgID0gMHgwMDM5LAogCUFDWF9ST0FNSU5HX1NUQVRJU1RJQ1NfVEJMICA9IDB4MDAzQiwKQEAgLTEyNDcsMTMgKzEzMzMsMTQgQEAKIGludCB3bDEyNzFfYWN4X2dyb3VwX2FkZHJlc3NfdGJsKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSwKIAkJCQkgdm9pZCAqbWNfbGlzdCwgdTMyIG1jX2xpc3RfbGVuKTsKIGludCB3bDEyNzFfYWN4X3NlcnZpY2VfcGVyaW9kX3RpbWVvdXQoc3RydWN0IHdsMTI3MSAqd2wpOwotaW50IHdsMTI3MV9hY3hfcnRzX3RocmVzaG9sZChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IHJ0c190aHJlc2hvbGQpOworaW50IHdsMTI3MV9hY3hfcnRzX3RocmVzaG9sZChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTMyIHJ0c190aHJlc2hvbGQpOwogaW50IHdsMTI3MV9hY3hfZGNvX2l0cmltX3BhcmFtcyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CiBpbnQgd2wxMjcxX2FjeF9iZWFjb25fZmlsdGVyX29wdChzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBlbmFibGVfZmlsdGVyKTsKIGludCB3bDEyNzFfYWN4X2JlYWNvbl9maWx0ZXJfdGFibGUoc3RydWN0IHdsMTI3MSAqd2wpOwogaW50IHdsMTI3MV9hY3hfY29ubl9tb25pdF9wYXJhbXMoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgZW5hYmxlKTsKIGludCB3bDEyNzFfYWN4X3NnX2VuYWJsZShzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBlbmFibGUpOwotaW50IHdsMTI3MV9hY3hfc2dfY2ZnKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfYWN4X3N0YV9zZ19jZmcoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9hY3hfYXBfc2dfY2ZnKHN0cnVjdCB3bDEyNzEgKndsKTsKIGludCB3bDEyNzFfYWN4X2NjYV90aHJlc2hvbGQoc3RydWN0IHdsMTI3MSAqd2wpOwogaW50IHdsMTI3MV9hY3hfYmNuX2R0aW1fb3B0aW9ucyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CiBpbnQgd2wxMjcxX2FjeF9haWQoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBhaWQpOwpAQCAtMTI3MCwxMSArMTM1NywxMiBAQAogaW50IHdsMTI3MV9hY3hfdGlkX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggcXVldWVfaWQsIHU4IGNoYW5uZWxfdHlwZSwKIAkJICAgICAgIHU4IHRzaWQsIHU4IHBzX3NjaGVtZSwgdTggYWNrX3BvbGljeSwKIAkJICAgICAgIHUzMiBhcHNkX2NvbmYwLCB1MzIgYXBzZF9jb25mMSk7Ci1pbnQgd2wxMjcxX2FjeF9mcmFnX3RocmVzaG9sZChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IGZyYWdfdGhyZXNob2xkKTsKK2ludCB3bDEyNzFfYWN4X2ZyYWdfdGhyZXNob2xkKHN0cnVjdCB3bDEyNzEgKndsLCB1MzIgZnJhZ190aHJlc2hvbGQpOwogaW50IHdsMTI3MV9hY3hfdHhfY29uZmlnX29wdGlvbnMoc3RydWN0IHdsMTI3MSAqd2wpOwogaW50IHdsMTI3MV9hY3hfYXBfbWVtX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CiBpbnQgd2wxMjcxX2FjeF9zdGFfbWVtX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CiBpbnQgd2wxMjcxX2FjeF9pbml0X21lbV9jb25maWcoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9hY3hfaG9zdF9pZl9jZmdfYml0bWFwKHN0cnVjdCB3bDEyNzEgKndsLCB1MzIgaG9zdF9jZmdfYml0bWFwKTsKIGludCB3bDEyNzFfYWN4X2luaXRfcnhfaW50ZXJydXB0KHN0cnVjdCB3bDEyNzEgKndsKTsKIGludCB3bDEyNzFfYWN4X3NtYXJ0X3JlZmxleChzdHJ1Y3Qgd2wxMjcxICp3bCk7CiBpbnQgd2wxMjcxX2FjeF9iZXRfZW5hYmxlKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSk7CkBAIC0xMjk5LDUgKzEzODcsNyBAQAogaW50IHdsMTI3MV9hY3hfbWF4X3R4X3JldHJ5KHN0cnVjdCB3bDEyNzEgKndsKTsKIGludCB3bDEyNzFfYWN4X2NvbmZpZ19wcyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CiBpbnQgd2wxMjcxX2FjeF9zZXRfaW5jb25uZWN0aW9uX3N0YShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggKmFkZHIpOworaW50IHdsMTI3MV9hY3hfc2V0X2FwX2JlYWNvbl9maWx0ZXIoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgZW5hYmxlKTsKK2ludCB3bDEyNzFfYWN4X2ZtX2NvZXgoc3RydWN0IHdsMTI3MSAqd2wpOwogCiAjZW5kaWYgLyogX19XTDEyNzFfQUNYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2Jvb3QuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9ib290LmMKaW5kZXggNjkzNGRmZi4uYjA3ZjhiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2Jvb3QuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvYm9vdC5jCkBAIC0yMiw2ICsyMiw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC93bDEyeHguaD4KIAogI2luY2x1ZGUgImFjeC5oIgogI2luY2x1ZGUgInJlZy5oIgpAQCAtMjQzLDMzICsyNDQsNTcgQEAKIAlpZiAod2wtPm52cyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qCi0JICogRklYTUU6IHRoZSBMRUdBQ1kgTlZTIGltYWdlIHN1cHBvcnQgKE5WUydzIG1pc3NpbmcgdGhlIDVHSHogYmFuZAotCSAqIGNvbmZpZ3VyYXRpb25zKSBjYW4gYmUgcmVtb3ZlZCB3aGVuIHRob3NlIE5WUyBmaWxlcyBzdG9wIGZsb2F0aW5nCi0JICogYXJvdW5kLgotCSAqLwotCWlmICh3bC0+bnZzX2xlbiA9PSBzaXplb2Yoc3RydWN0IHdsMTI3MV9udnNfZmlsZSkgfHwKLQkgICAgd2wtPm52c19sZW4gPT0gV0wxMjcxX0lOSV9MRUdBQ1lfTlZTX0ZJTEVfU0laRSkgewotCQkvKiBmb3Igbm93IDExYSBpcyB1bnN1cHBvcnRlZCBpbiBBUCBtb2RlICovCi0JCWlmICh3bC0+YnNzX3R5cGUgIT0gQlNTX1RZUEVfQVBfQlNTICYmCi0JCSAgICB3bC0+bnZzLT5nZW5lcmFsX3BhcmFtcy5kdWFsX21vZGVfc2VsZWN0KQotCQkJd2wtPmVuYWJsZV8xMWEgPSB0cnVlOwotCX0KKwlpZiAod2wtPmNoaXAuaWQgPT0gQ0hJUF9JRF8xMjgzX1BHMjApIHsKKwkJc3RydWN0IHdsMTI4eF9udnNfZmlsZSAqbnZzID0gKHN0cnVjdCB3bDEyOHhfbnZzX2ZpbGUgKil3bC0+bnZzOwogCi0JaWYgKHdsLT5udnNfbGVuICE9IHNpemVvZihzdHJ1Y3Qgd2wxMjcxX252c19maWxlKSAmJgotCSAgICAod2wtPm52c19sZW4gIT0gV0wxMjcxX0lOSV9MRUdBQ1lfTlZTX0ZJTEVfU0laRSB8fAotCSAgICAgd2wtPmVuYWJsZV8xMWEpKSB7Ci0JCXdsMTI3MV9lcnJvcigibnZzIHNpemUgaXMgbm90IGFzIGV4cGVjdGVkOiAlenUgIT0gJXp1IiwKLQkJCSAgICAgd2wtPm52c19sZW4sIHNpemVvZihzdHJ1Y3Qgd2wxMjcxX252c19maWxlKSk7Ci0JCWtmcmVlKHdsLT5udnMpOwotCQl3bC0+bnZzID0gTlVMTDsKLQkJd2wtPm52c19sZW4gPSAwOwotCQlyZXR1cm4gLUVJTFNFUTsKLQl9CisJCWlmICh3bC0+bnZzX2xlbiA9PSBzaXplb2Yoc3RydWN0IHdsMTI4eF9udnNfZmlsZSkpIHsKKwkJCWlmIChudnMtPmdlbmVyYWxfcGFyYW1zLmR1YWxfbW9kZV9zZWxlY3QpCisJCQkJd2wtPmVuYWJsZV8xMWEgPSB0cnVlOworCQl9IGVsc2UgeworCQkJd2wxMjcxX2Vycm9yKCJudnMgc2l6ZSBpcyBub3QgYXMgZXhwZWN0ZWQ6ICV6dSAhPSAlenUiLAorCQkJCSAgICAgd2wtPm52c19sZW4sCisJCQkJICAgICBzaXplb2Yoc3RydWN0IHdsMTI4eF9udnNfZmlsZSkpOworCQkJa2ZyZWUod2wtPm52cyk7CisJCQl3bC0+bnZzID0gTlVMTDsKKwkJCXdsLT5udnNfbGVuID0gMDsKKwkJCXJldHVybiAtRUlMU0VROworCQl9CiAKLQkvKiBvbmx5IHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBOVlMgbmVlZHMgdG8gYmUgdXBsb2FkZWQgKi8KLQludnNfbGVuID0gc2l6ZW9mKHdsLT5udnMtPm52cyk7Ci0JbnZzX3B0ciA9ICh1OCAqKXdsLT5udnMtPm52czsKKwkJLyogb25seSB0aGUgZmlyc3QgcGFydCBvZiB0aGUgTlZTIG5lZWRzIHRvIGJlIHVwbG9hZGVkICovCisJCW52c19sZW4gPSBzaXplb2YobnZzLT5udnMpOworCQludnNfcHRyID0gKHU4ICopbnZzLT5udnM7CisKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgd2wxMjcxX252c19maWxlICpudnMgPQorCQkJKHN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUgKil3bC0+bnZzOworCQkvKgorCQkgKiBGSVhNRTogdGhlIExFR0FDWSBOVlMgaW1hZ2Ugc3VwcG9ydCAoTlZTJ3MgbWlzc2luZyB0aGUgNUdIegorCQkgKiBiYW5kIGNvbmZpZ3VyYXRpb25zKSBjYW4gYmUgcmVtb3ZlZCB3aGVuIHRob3NlIE5WUyBmaWxlcyBzdG9wCisJCSAqIGZsb2F0aW5nIGFyb3VuZC4KKwkJICovCisJCWlmICh3bC0+bnZzX2xlbiA9PSBzaXplb2Yoc3RydWN0IHdsMTI3MV9udnNfZmlsZSkgfHwKKwkJICAgIHdsLT5udnNfbGVuID09IFdMMTI3MV9JTklfTEVHQUNZX05WU19GSUxFX1NJWkUpIHsKKwkJCS8qIGZvciBub3cgMTFhIGlzIHVuc3VwcG9ydGVkIGluIEFQIG1vZGUgKi8KKwkJCWlmICh3bC0+YnNzX3R5cGUgIT0gQlNTX1RZUEVfQVBfQlNTICYmCisJCQkgICAgbnZzLT5nZW5lcmFsX3BhcmFtcy5kdWFsX21vZGVfc2VsZWN0KQorCQkJCXdsLT5lbmFibGVfMTFhID0gdHJ1ZTsKKwkJfQorCisJCWlmICh3bC0+bnZzX2xlbiAhPSBzaXplb2Yoc3RydWN0IHdsMTI3MV9udnNfZmlsZSkgJiYKKwkJICAgICh3bC0+bnZzX2xlbiAhPSBXTDEyNzFfSU5JX0xFR0FDWV9OVlNfRklMRV9TSVpFIHx8CisJCSAgICAgd2wtPmVuYWJsZV8xMWEpKSB7CisJCQl3bDEyNzFfZXJyb3IoIm52cyBzaXplIGlzIG5vdCBhcyBleHBlY3RlZDogJXp1ICE9ICV6dSIsCisJCQkJd2wtPm52c19sZW4sIHNpemVvZihzdHJ1Y3Qgd2wxMjcxX252c19maWxlKSk7CisJCQlrZnJlZSh3bC0+bnZzKTsKKwkJCXdsLT5udnMgPSBOVUxMOworCQkJd2wtPm52c19sZW4gPSAwOworCQkJcmV0dXJuIC1FSUxTRVE7CisJCX0KKworCQkvKiBvbmx5IHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBOVlMgbmVlZHMgdG8gYmUgdXBsb2FkZWQgKi8KKwkJbnZzX2xlbiA9IHNpemVvZihudnMtPm52cyk7CisJCW52c19wdHIgPSAodTggKikgbnZzLT5udnM7CisJfQogCiAJLyogdXBkYXRlIGN1cnJlbnQgTUFDIGFkZHJlc3MgdG8gTlZTICovCiAJbnZzX3B0clsxMV0gPSB3bC0+bWFjX2FkZHJbMF07CkBAIC0zMTksMTAgKzM0NCwxMyBAQAogCS8qCiAJICogV2UndmUgcmVhY2hlZCB0aGUgZmlyc3QgemVybyBsZW5ndGgsIHRoZSBmaXJzdCBOVlMgdGFibGUKIAkgKiBpcyBsb2NhdGVkIGF0IGFuIGFsaWduZWQgb2Zmc2V0IHdoaWNoIGlzIGF0IGxlYXN0IDcgYnl0ZXMgZnVydGhlci4KKwkgKiBOT1RFOiBUaGUgd2wtPm52cy0+bnZzIGVsZW1lbnQgbXVzdCBiZSBmaXJzdCwgaW4gb3JkZXIgdG8KKwkgKiBzaW1wbGlmeSB0aGUgY2FzdGluZywgd2UgYXNzdW1lIGl0IGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YKKwkgKiB0aGUgd2wtPm52cyBzdHJ1Y3R1cmUuCiAJICovCi0JbnZzX3B0ciA9ICh1OCAqKXdsLT5udnMtPm52cyArCi0JCQlBTElHTihudnNfcHRyIC0gKHU4ICopd2wtPm52cy0+bnZzICsgNywgNCk7Ci0JbnZzX2xlbiAtPSBudnNfcHRyIC0gKHU4ICopd2wtPm52cy0+bnZzOworCW52c19wdHIgPSAodTggKil3bC0+bnZzICsKKwkJCUFMSUdOKG52c19wdHIgLSAodTggKil3bC0+bnZzICsgNywgNCk7CisJbnZzX2xlbiAtPSBudnNfcHRyIC0gKHU4ICopd2wtPm52czsKIAogCS8qIE5vdyB3ZSBtdXN0IHNldCB0aGUgcGFydGl0aW9uIGNvcnJlY3RseSAqLwogCXdsMTI3MV9zZXRfcGFydGl0aW9uKHdsLCAmcGFydF90YWJsZVtQQVJUX1dPUktdKTsKQEAgLTQ1MCwxMCArNDc4LDE0IEBACiAJCURJU0NPTk5FQ1RfRVZFTlRfQ09NUExFVEVfSUQgfAogCQlSU1NJX1NOUl9UUklHR0VSXzBfRVZFTlRfSUQgfAogCQlQU1BPTExfREVMSVZFUllfRkFJTFVSRV9FVkVOVF9JRCB8Ci0JCVNPRlRfR0VNSU5JX1NFTlNFX0VWRU5UX0lEOworCQlTT0ZUX0dFTUlOSV9TRU5TRV9FVkVOVF9JRCB8CisJCVBFUklPRElDX1NDQU5fUkVQT1JUX0VWRU5UX0lEIHwKKwkJUEVSSU9ESUNfU0NBTl9DT01QTEVURV9FVkVOVF9JRDsKIAogCWlmICh3bC0+YnNzX3R5cGUgPT0gQlNTX1RZUEVfQVBfQlNTKQogCQl3bC0+ZXZlbnRfbWFzayB8PSBTVEFfUkVNT1ZFX0NPTVBMRVRFX0VWRU5UX0lEOworCWVsc2UKKwkJd2wtPmV2ZW50X21hc2sgfD0gRFVNTVlfUEFDS0VUX0VWRU5UX0lEOwogCiAJcmV0ID0gd2wxMjcxX2V2ZW50X3VubWFzayh3bCk7CiAJaWYgKHJldCA8IDApIHsKQEAgLTQ5MywyNCArNTI1LDE1OSBAQAogCQl3bC0+cXVpcmtzIHw9IFdMMTJYWF9RVUlSS19FTkRfT0ZfVFJBTlNBQ1RJT047CiB9CiAKLS8qIHVwbG9hZHMgTlZTIGFuZCBmaXJtd2FyZSAqLwotaW50IHdsMTI3MV9sb2FkX2Zpcm13YXJlKHN0cnVjdCB3bDEyNzEgKndsKQorc3RhdGljIGludCB3bDEyOHhfc3dpdGNoX3RjeG9fdG9fZnJlZihzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKLQlpbnQgcmV0ID0gMDsKLQl1MzIgdG1wLCBjbGssIHBhdXNlOworCXUxNiBzcGFyZV9yZWc7CisKKwkvKiBNYXNrIGJpdHMgWzJdICYgWzg6NF0gaW4gdGhlIHN5c19jbGtfY2ZnIHJlZ2lzdGVyICovCisJc3BhcmVfcmVnID0gd2wxMjcxX3RvcF9yZWdfcmVhZCh3bCwgV0xfU1BBUkVfUkVHKTsKKwlpZiAoc3BhcmVfcmVnID09IDB4RkZGRikKKwkJcmV0dXJuIC1FRkFVTFQ7CisJc3BhcmVfcmVnIHw9IChCSVQoMykgfCBCSVQoNSkgfCBCSVQoNikpOworCXdsMTI3MV90b3BfcmVnX3dyaXRlKHdsLCBXTF9TUEFSRV9SRUcsIHNwYXJlX3JlZyk7CisKKwkvKiBFbmFibGUgRlJFRl9DTEtfUkVRICYgbXV4IE1DUyBhbmQgY29leCBQTExzIHRvIEZSRUYgKi8KKwl3bDEyNzFfdG9wX3JlZ193cml0ZSh3bCwgU1lTX0NMS19DRkdfUkVHLAorCQkJICAgICBXTF9DTEtfUkVRX1RZUEVfUEcyIHwgTUNTX1BMTF9DTEtfU0VMX0ZSRUYpOworCisJLyogRGVsYXkgZXhlY3V0aW9uIGZvciAxNW1zZWMsIHRvIGxldCB0aGUgSFcgc2V0dGxlICovCisJbWRlbGF5KDE1KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCB3bDEyOHhfaXNfdGN4b192YWxpZChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwl1MTYgdGN4b19kZXRlY3Rpb247CisKKwl0Y3hvX2RldGVjdGlvbiA9IHdsMTI3MV90b3BfcmVnX3JlYWQod2wsIFRDWE9fQ0xLX0RFVEVDVF9SRUcpOworCWlmICh0Y3hvX2RldGVjdGlvbiAmIFRDWE9fREVUX0ZBSUxFRCkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHdsMTI4eF9pc19mcmVmX3ZhbGlkKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXUxNiBmcmVmX2RldGVjdGlvbjsKKworCWZyZWZfZGV0ZWN0aW9uID0gd2wxMjcxX3RvcF9yZWdfcmVhZCh3bCwgRlJFRl9DTEtfREVURUNUX1JFRyk7CisJaWYgKGZyZWZfZGV0ZWN0aW9uICYgRlJFRl9DTEtfREVURUNUX0ZBSUwpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50IHdsMTI4eF9tYW51YWxseV9jb25maWd1cmVfbWNzX3BsbChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwl3bDEyNzFfdG9wX3JlZ193cml0ZSh3bCwgTUNTX1BMTF9NX1JFRywgTUNTX1BMTF9NX1JFR19WQUwpOworCXdsMTI3MV90b3BfcmVnX3dyaXRlKHdsLCBNQ1NfUExMX05fUkVHLCBNQ1NfUExMX05fUkVHX1ZBTCk7CisJd2wxMjcxX3RvcF9yZWdfd3JpdGUod2wsIE1DU19QTExfQ09ORklHX1JFRywgTUNTX1BMTF9DT05GSUdfUkVHX1ZBTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bDEyOHhfY29uZmlndXJlX21jc19wbGwoc3RydWN0IHdsMTI3MSAqd2wsIGludCBjbGspCit7CisJdTE2IHNwYXJlX3JlZzsKKwl1MTYgcGxsX2NvbmZpZzsKKwl1OCBpbnB1dF9mcmVxOworCisJLyogTWFzayBiaXRzIFszOjFdIGluIHRoZSBzeXNfY2xrX2NmZyByZWdpc3RlciAqLworCXNwYXJlX3JlZyA9IHdsMTI3MV90b3BfcmVnX3JlYWQod2wsIFdMX1NQQVJFX1JFRyk7CisJaWYgKHNwYXJlX3JlZyA9PSAweEZGRkYpCisJCXJldHVybiAtRUZBVUxUOworCXNwYXJlX3JlZyB8PSBCSVQoMik7CisJd2wxMjcxX3RvcF9yZWdfd3JpdGUod2wsIFdMX1NQQVJFX1JFRywgc3BhcmVfcmVnKTsKKworCS8qIEhhbmRsZSBzcGVjaWFsIGNhc2VzIG9mIHRoZSBUQ1hPIGNsb2NrICovCisJaWYgKHdsLT50Y3hvX2Nsb2NrID09IFdMMTJYWF9UQ1hPQ0xPQ0tfMTZfOCB8fAorCSAgICB3bC0+dGN4b19jbG9jayA9PSBXTDEyWFhfVENYT0NMT0NLXzMzXzYpCisJCXJldHVybiB3bDEyOHhfbWFudWFsbHlfY29uZmlndXJlX21jc19wbGwod2wpOworCisJLyogU2V0IHRoZSBpbnB1dCBmcmVxdWVuY3kgYWNjb3JkaW5nIHRvIHRoZSBzZWxlY3RlZCBjbG9jayBzb3VyY2UgKi8KKwlpbnB1dF9mcmVxID0gKGNsayAmIDEpICsgMTsKKworCXBsbF9jb25maWcgPSB3bDEyNzFfdG9wX3JlZ19yZWFkKHdsLCBNQ1NfUExMX0NPTkZJR19SRUcpOworCWlmIChwbGxfY29uZmlnID09IDB4RkZGRikKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcGxsX2NvbmZpZyB8PSAoaW5wdXRfZnJlcSA8PCBNQ1NfU0VMX0lOX0ZSRVFfU0hJRlQpOworCXBsbF9jb25maWcgfD0gTUNTX1BMTF9FTkFCTEVfSFA7CisJd2wxMjcxX3RvcF9yZWdfd3JpdGUod2wsIE1DU19QTExfQ09ORklHX1JFRywgcGxsX2NvbmZpZyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdMMTI4eCBoYXMgdHdvIGNsb2NrcyBpbnB1dCAtIFRDWE8gYW5kIEZSRUYuCisgKiBUQ1hPIGlzIHRoZSBtYWluIGNsb2NrIG9mIHRoZSBkZXZpY2UsIHdoaWxlIEZSRUYgaXMgdXNlZCB0byBzeW5jCisgKiBiZXR3ZWVuIHRoZSBHUFMgYW5kIHRoZSBjZWxsdWxhciBtb2RlbS4KKyAqIEluIGNhc2VzIHdoZXJlIFRDWE8gaXMgMzIuNzM2TUh6IG9yIDE2LjM2OE1IeiwgdGhlIEZSRUYgd2lsbCBiZSB1c2VkCisgKiBhcyB0aGUgV0xBTi9CVCBtYWluIGNsb2NrLgorICovCitzdGF0aWMgaW50IHdsMTI4eF9ib290X2NsayhzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50ICpzZWxlY3RlZF9jbG9jaykKK3sKKwl1MTYgc3lzX2Nsa19jZmc7CisKKwkvKiBGb3IgWFRBTC1vbmx5IG1vZGVzLCBGUkVGIHdpbGwgYmUgdXNlZCBhZnRlciBzd2l0Y2hpbmcgZnJvbSBUQ1hPICovCisJaWYgKHdsLT5yZWZfY2xvY2sgPT0gV0wxMlhYX1JFRkNMT0NLXzI2X1hUQUwgfHwKKwkgICAgd2wtPnJlZl9jbG9jayA9PSBXTDEyWFhfUkVGQ0xPQ0tfMzhfWFRBTCkgeworCQlpZiAoIXdsMTI4eF9zd2l0Y2hfdGN4b190b19mcmVmKHdsKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlnb3RvIGZyZWZfY2xrOworCX0KKworCS8qIFF1ZXJ5IHRoZSBIVywgdG8gZGV0ZXJtaW5lIHdoaWNoIGNsb2NrIHNvdXJjZSB3ZSBzaG91bGQgdXNlICovCisJc3lzX2Nsa19jZmcgPSB3bDEyNzFfdG9wX3JlZ19yZWFkKHdsLCBTWVNfQ0xLX0NGR19SRUcpOworCWlmIChzeXNfY2xrX2NmZyA9PSAweEZGRkYpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChzeXNfY2xrX2NmZyAmIFBSQ01fQ01fRU5fTVVYX1dMQU5fRlJFRikKKwkJZ290byBmcmVmX2NsazsKKworCS8qIElmIFRDWE8gaXMgZWl0aGVyIDMyLjczNk1IeiBvciAxNi4zNjhNSHosIHN3aXRjaCB0byBGUkVGICovCisJaWYgKHdsLT50Y3hvX2Nsb2NrID09IFdMMTJYWF9UQ1hPQ0xPQ0tfMTZfMzY4IHx8CisJICAgIHdsLT50Y3hvX2Nsb2NrID09IFdMMTJYWF9UQ1hPQ0xPQ0tfMzJfNzM2KSB7CisJCWlmICghd2wxMjh4X3N3aXRjaF90Y3hvX3RvX2ZyZWYod2wpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gZnJlZl9jbGs7CisJfQorCisJLyogVENYTyBjbG9jayBpcyBzZWxlY3RlZCAqLworCWlmICghd2wxMjh4X2lzX3RjeG9fdmFsaWQod2wpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkqc2VsZWN0ZWRfY2xvY2sgPSB3bC0+dGN4b19jbG9jazsKKwlnb3RvIGNvbmZpZ19tY3NfcGxsOworCitmcmVmX2NsazoKKwkvKiBGUkVGIGNsb2NrIGlzIHNlbGVjdGVkICovCisJaWYgKCF3bDEyOHhfaXNfZnJlZl92YWxpZCh3bCkpCisJCXJldHVybiAtRUlOVkFMOworCSpzZWxlY3RlZF9jbG9jayA9IHdsLT5yZWZfY2xvY2s7CisKK2NvbmZpZ19tY3NfcGxsOgorCXJldHVybiB3bDEyOHhfY29uZmlndXJlX21jc19wbGwod2wsICpzZWxlY3RlZF9jbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjd4X2Jvb3RfY2xrKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXUzMiBwYXVzZTsKKwl1MzIgY2xrOwogCiAJd2wxMjcxX2Jvb3RfaHdfdmVyc2lvbih3bCk7CiAKLQlpZiAod2wtPnJlZl9jbG9jayA9PSAwIHx8IHdsLT5yZWZfY2xvY2sgPT0gMiB8fCB3bC0+cmVmX2Nsb2NrID09IDQpCisJaWYgKHdsLT5yZWZfY2xvY2sgPT0gQ09ORl9SRUZfQ0xLXzE5XzJfRSB8fAorCSAgICB3bC0+cmVmX2Nsb2NrID09IENPTkZfUkVGX0NMS18zOF80X0UgfHwKKwkgICAgd2wtPnJlZl9jbG9jayA9PSBDT05GX1JFRl9DTEtfMzhfNF9NX1hUQUwpCiAJCS8qIHJlZiBjbGs6IDE5LjIvMzguNC8zOC40LVhUQUwgKi8KIAkJY2xrID0gMHgzOwotCWVsc2UgaWYgKHdsLT5yZWZfY2xvY2sgPT0gMSB8fCB3bC0+cmVmX2Nsb2NrID09IDMpCisJZWxzZSBpZiAod2wtPnJlZl9jbG9jayA9PSBDT05GX1JFRl9DTEtfMjZfRSB8fAorCQkgd2wtPnJlZl9jbG9jayA9PSBDT05GX1JFRl9DTEtfNTJfRSkKIAkJLyogcmVmIGNsazogMjYvNTIgKi8KIAkJY2xrID0gMHg1OwogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAod2wtPnJlZl9jbG9jayAhPSAwKSB7CisJaWYgKHdsLT5yZWZfY2xvY2sgIT0gQ09ORl9SRUZfQ0xLXzE5XzJfRSkgewogCQl1MTYgdmFsOwogCQkvKiBTZXQgY2xvY2sgdHlwZSAob3BlbiBkcmFpbikgKi8KIAkJdmFsID0gd2wxMjcxX3RvcF9yZWdfcmVhZCh3bCwgT0NQX1JFR19DTEtfVFlQRSk7CkBAIC01NDAsNiArNzA3LDI2IEBACiAJcGF1c2UgfD0gV1VfQ09VTlRFUl9QQVVTRV9WQUw7CiAJd2wxMjcxX3dyaXRlMzIod2wsIFdVX0NPVU5URVJfUEFVU0UsIHBhdXNlKTsKIAorCXJldHVybiAwOworfQorCisvKiB1cGxvYWRzIE5WUyBhbmQgZmlybXdhcmUgKi8KK2ludCB3bDEyNzFfbG9hZF9maXJtd2FyZShzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0ID0gMDsKKwl1MzIgdG1wLCBjbGs7CisJaW50IHNlbGVjdGVkX2Nsb2NrID0gLTE7CisKKwlpZiAod2wtPmNoaXAuaWQgPT0gQ0hJUF9JRF8xMjgzX1BHMjApIHsKKwkJcmV0ID0gd2wxMjh4X2Jvb3RfY2xrKHdsLCAmc2VsZWN0ZWRfY2xvY2spOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCXJldCA9IHdsMTI3eF9ib290X2Nsayh3bCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisJfQorCiAJLyogQ29udGludWUgdGhlIEVMUCB3YWtlIHVwIHNlcXVlbmNlICovCiAJd2wxMjcxX3dyaXRlMzIod2wsIFdFTFBfQVJNX0NPTU1BTkQsIFdFTFBfQVJNX0NPTU1BTkRfVkFMKTsKIAl1ZGVsYXkoNTAwKTsKQEAgLTU1NSw3ICs3NDIsMTIgQEAKIAogCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAiY2xrMiAweCV4IiwgY2xrKTsKIAotCWNsayB8PSAod2wtPnJlZl9jbG9jayA8PCAxKSA8PCA0OworCWlmICh3bC0+Y2hpcC5pZCA9PSBDSElQX0lEXzEyODNfUEcyMCkgeworCQljbGsgfD0gKChzZWxlY3RlZF9jbG9jayAmIDB4MykgPDwgMSkgPDwgNDsKKwl9IGVsc2UgeworCQljbGsgfD0gKHdsLT5yZWZfY2xvY2sgPDwgMSkgPDwgNDsKKwl9CisKIAl3bDEyNzFfd3JpdGUzMih3bCwgRFJQV19TQ1JBVENIX1NUQVJULCBjbGspOwogCiAJd2wxMjcxX3NldF9wYXJ0aXRpb24od2wsICZwYXJ0X3RhYmxlW1BBUlRfV09SS10pOwpAQCAtNTg1LDE2ICs3NzcsMTIgQEAKIAkvKiA2LiByZWFkIHRoZSBFRVBST00gcGFyYW1ldGVycyAqLwogCXRtcCA9IHdsMTI3MV9yZWFkMzIod2wsIFNDUl9QQUQyKTsKIAotCXJldCA9IHdsMTI3MV9ib290X3dyaXRlX2lycV9wb2xhcml0eSh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCi0Jd2wxMjcxX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX01BU0ssCi0JCSAgICAgICBXTDEyNzFfQUNYX0FMTF9FVkVOVFNfVkVDVE9SKTsKLQogCS8qIFdMMTI3MTogVGhlIHJlZmVyZW5jZSBkcml2ZXIgc2tpcHMgc3RlcHMgNyB0byAxMCAoanVtcHMgZGlyZWN0bHkKIAkgKiB0byB1cGxvYWRfZncpICovCiAKKwlpZiAod2wtPmNoaXAuaWQgPT0gQ0hJUF9JRF8xMjgzX1BHMjApCisJCXdsMTI3MV90b3BfcmVnX3dyaXRlKHdsLCBTRElPX0lPX0RTLCB3bC0+Y29uZi5oY2lfaW9fZHMpOworCiAJcmV0ID0gd2wxMjcxX2Jvb3RfdXBsb2FkX2Zpcm13YXJlKHdsKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CkBAIC02MTgsNiArODA2LDEzIEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwogCisJcmV0ID0gd2wxMjcxX2Jvb3Rfd3JpdGVfaXJxX3BvbGFyaXR5KHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwl3bDEyNzFfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTUFTSywKKwkJICAgICAgIFdMMTI3MV9BQ1hfQUxMX0VWRU5UU19WRUNUT1IpOworCiAJLyogRW5hYmxlIGZpcm13YXJlIGludGVycnVwdHMgbm93ICovCiAJd2wxMjcxX2Jvb3RfZW5hYmxlX2ludGVycnVwdHMod2wpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvYm9vdC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2Jvb3QuaAppbmRleCAxNzIyOWI4Li5lOGY4MjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvYm9vdC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9ib290LmgKQEAgLTc0LDQgKzc0LDU2IEBACiAjZGVmaW5lIEZSRUZfQ0xLX1BPTEFSSVRZX0JJVFMgMHhmZmZmZjhmZgogI2RlZmluZSBDTEtfUkVRX09VVE5fU0VMICAgICAgIDB4NzAwCiAKKy8qIFBMTCBjb25maWd1cmF0aW9uIGFsZ29yaXRobSBmb3Igd2wxMjh4ICovCisjZGVmaW5lIFNZU19DTEtfQ0ZHX1JFRyAgICAgICAgICAgICAgMHgyMjAwCisvKiBCaXRbMF0gICAtICAwLVRDWE8sICAxLUZSRUYgKi8KKyNkZWZpbmUgTUNTX1BMTF9DTEtfU0VMX0ZSRUYgICAgICAgICBCSVQoMCkKKy8qIEJpdFszOjJdIC0gMDEtVENYTywgMTAtRlJFRiAqLworI2RlZmluZSBXTF9DTEtfUkVRX1RZUEVfRlJFRiAgICAgICAgIEJJVCgzKQorI2RlZmluZSBXTF9DTEtfUkVRX1RZUEVfUEcyICAgICAgICAgIChCSVQoMykgfCBCSVQoMikpCisvKiBCaXRbNF0gICAtICAwLVRDWE8sICAxLUZSRUYgKi8KKyNkZWZpbmUgUFJDTV9DTV9FTl9NVVhfV0xBTl9GUkVGICAgICBCSVQoNCkKKworI2RlZmluZSBUQ1hPX0lMT0FEX0lOVF9SRUcgICAgICAgICAgIDB4MjI2NAorI2RlZmluZSBUQ1hPX0NMS19ERVRFQ1RfUkVHICAgICAgICAgIDB4MjI2NgorCisjZGVmaW5lIFRDWE9fREVUX0ZBSUxFRCAgICAgICAgICAgICAgQklUKDQpCisKKyNkZWZpbmUgRlJFRl9JTE9BRF9JTlRfUkVHICAgICAgICAgICAweDIwODQKKyNkZWZpbmUgRlJFRl9DTEtfREVURUNUX1JFRyAgICAgICAgICAweDIwODYKKyNkZWZpbmUgRlJFRl9DTEtfREVURUNUX0ZBSUwgICAgICAgICBCSVQoNCkKKworLyogVXNlIHRoaXMgcmVnIGZvciBtYXNraW5nIGR1cmluZyBkcml2ZXIgYWNjZXNzICovCisjZGVmaW5lIFdMX1NQQVJFX1JFRyAgICAgICAgICAgICAgICAgMHgyMzIwCisjZGVmaW5lIFdMX1NQQVJFX1ZBTCAgICAgICAgICAgICAgICAgQklUKDIpCisvKiBCaXRbNjo1OjNdIC0gIG1hc2sgd2wgd3JpdGUgU1lTX0NMS19DRkdbODo1OjI6NF0gKi8KKyNkZWZpbmUgV0xfU1BBUkVfTUFTS184NTI2ICAgICAgICAgICAoQklUKDYpIHwgQklUKDUpIHwgQklUKDMpKQorCisjZGVmaW5lIFBMTF9MT0NLX0NPVU5URVJTX1JFRyAgICAgICAgMHhEOEMKKyNkZWZpbmUgUExMX0xPQ0tfQ09VTlRFUlNfQ09FWCAgICAgICAweDBGCisjZGVmaW5lIFBMTF9MT0NLX0NPVU5URVJTX01DUyAgICAgICAgMHhGMAorI2RlZmluZSBNQ1NfUExMX09WRVJSSURFX1JFRyAgICAgICAgIDB4RDkwCisjZGVmaW5lIE1DU19QTExfQ09ORklHX1JFRyAgICAgICAgICAgMHhEOTIKKyNkZWZpbmUgTUNTX1NFTF9JTl9GUkVRX01BU0sgICAgICAgICAweDAwNzAKKyNkZWZpbmUgTUNTX1NFTF9JTl9GUkVRX1NISUZUICAgICAgICA0CisjZGVmaW5lIE1DU19QTExfQ09ORklHX1JFR19WQUwgICAgICAgMHg3MworI2RlZmluZSBNQ1NfUExMX0VOQUJMRV9IUCAgICAgICAgICAgIChCSVQoMCkgfCBCSVQoMSkpCisKKyNkZWZpbmUgTUNTX1BMTF9NX1JFRyAgICAgICAgICAgICAgICAweEQ5NAorI2RlZmluZSBNQ1NfUExMX05fUkVHICAgICAgICAgICAgICAgIDB4RDk2CisjZGVmaW5lIE1DU19QTExfTV9SRUdfVkFMICAgICAgICAgICAgMHhDOAorI2RlZmluZSBNQ1NfUExMX05fUkVHX1ZBTCAgICAgICAgICAgIDB4MDcKKworI2RlZmluZSBTRElPX0lPX0RTICAgICAgICAgICAgICAgICAgIDB4ZDE0CisKKy8qIFNESU8vd1NQSSBEUyBjb25maWd1cmF0aW9uIHZhbHVlcyAqLworZW51bSB7CisJSENJX0lPX0RTXzhNQSA9IDAsCisJSENJX0lPX0RTXzRNQSA9IDEsIC8qIGRlZmF1bHQgKi8KKwlIQ0lfSU9fRFNfNk1BID0gMiwKKwlIQ0lfSU9fRFNfMk1BID0gMywKK307CisKKy8qIGVuZCBQTEwgY29uZmlndXJhdGlvbiBhbGdvcml0aG0gZm9yIHdsMTI4eCAqLworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9jbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9jbWQuYwppbmRleCA5NjMyNDMzLi40MjkzNWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2NtZC5jCkBAIC03Niw3ICs3Niw3IEBACiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CiAJCQl3bDEyNzFfZXJyb3IoImNvbW1hbmQgY29tcGxldGUgdGltZW91dCIpOwogCQkJcmV0ID0gLUVUSU1FRE9VVDsKLQkJCWdvdG8gb3V0OworCQkJZ290byBmYWlsOwogCQl9CiAKIAkJcG9sbF9jb3VudCsrOwpAQCAtOTYsMjEgKzk2LDI1IEBACiAJc3RhdHVzID0gbGUxNl90b19jcHUoY21kLT5zdGF0dXMpOwogCWlmIChzdGF0dXMgIT0gQ01EX1NUQVRVU19TVUNDRVNTKSB7CiAJCXdsMTI3MV9lcnJvcigiY29tbWFuZCBleGVjdXRlIGZhaWx1cmUgJWQiLCBzdGF0dXMpOwotCQlpZWVlODAyMTFfcXVldWVfd29yayh3bC0+aHcsICZ3bC0+cmVjb3Zlcnlfd29yayk7CiAJCXJldCA9IC1FSU87CisJCWdvdG8gZmFpbDsKIAl9CiAKIAl3bDEyNzFfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfQUNLLAogCQkgICAgICAgV0wxMjcxX0FDWF9JTlRSX0NNRF9DT01QTEVURSk7CisJcmV0dXJuIDA7CiAKLW91dDoKK2ZhaWw6CisJV0FSTl9PTigxKTsKKwlpZWVlODAyMTFfcXVldWVfd29yayh3bC0+aHcsICZ3bC0+cmVjb3Zlcnlfd29yayk7CiAJcmV0dXJuIHJldDsKIH0KIAogaW50IHdsMTI3MV9jbWRfZ2VuZXJhbF9wYXJtcyhzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKIAlzdHJ1Y3Qgd2wxMjcxX2dlbmVyYWxfcGFybXNfY21kICpnZW5fcGFybXM7Ci0Jc3RydWN0IHdsMTI3MV9pbmlfZ2VuZXJhbF9wYXJhbXMgKmdwID0gJndsLT5udnMtPmdlbmVyYWxfcGFyYW1zOworCXN0cnVjdCB3bDEyNzFfaW5pX2dlbmVyYWxfcGFyYW1zICpncCA9CisJCSYoKHN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUgKil3bC0+bnZzKS0+Z2VuZXJhbF9wYXJhbXM7CiAJYm9vbCBhbnN3ZXIgPSBmYWxzZTsKIAlpbnQgcmV0OwogCkBAIC0xMjgsNiArMTMyLDUyIEBACiAJaWYgKGdwLT50eF9iaXBfZmVtX2F1dG9fZGV0ZWN0KQogCQlhbnN3ZXIgPSB0cnVlOwogCisJLyogT3ZlcnJpZGUgdGhlIFJFRiBDTEsgZnJvbSB0aGUgTlZTIHdpdGggdGhlIG9uZSBmcm9tIHBsYXRmb3JtIGRhdGEgKi8KKwlnZW5fcGFybXMtPmdlbmVyYWxfcGFyYW1zLnJlZl9jbG9jayA9IHdsLT5yZWZfY2xvY2s7CisKKwlyZXQgPSB3bDEyNzFfY21kX3Rlc3Qod2wsIGdlbl9wYXJtcywgc2l6ZW9mKCpnZW5fcGFybXMpLCBhbnN3ZXIpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJDTURfSU5JX0ZJTEVfR0VORVJBTF9QQVJBTSBmYWlsZWQiKTsKKwkJZ290byBvdXQ7CisJfQorCisJZ3AtPnR4X2JpcF9mZW1fbWFudWZhY3R1cmVyID0KKwkJZ2VuX3Bhcm1zLT5nZW5lcmFsX3BhcmFtcy50eF9iaXBfZmVtX21hbnVmYWN0dXJlcjsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19DTUQsICJGRU0gYXV0b2RldGVjdDogJXMsIG1hbnVmYWN0dXJlcjogJWRcbiIsCisJCSAgICAgYW5zd2VyID8gImF1dG8iIDogIm1hbnVhbCIsIGdwLT50eF9iaXBfZmVtX21hbnVmYWN0dXJlcik7CisKK291dDoKKwlrZnJlZShnZW5fcGFybXMpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyOHhfY21kX2dlbmVyYWxfcGFybXMoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IHdsMTI4eF9nZW5lcmFsX3Bhcm1zX2NtZCAqZ2VuX3Bhcm1zOworCXN0cnVjdCB3bDEyOHhfaW5pX2dlbmVyYWxfcGFyYW1zICpncCA9CisJCSYoKHN0cnVjdCB3bDEyOHhfbnZzX2ZpbGUgKil3bC0+bnZzKS0+Z2VuZXJhbF9wYXJhbXM7CisJYm9vbCBhbnN3ZXIgPSBmYWxzZTsKKwlpbnQgcmV0OworCisJaWYgKCF3bC0+bnZzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWdlbl9wYXJtcyA9IGt6YWxsb2Moc2l6ZW9mKCpnZW5fcGFybXMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWdlbl9wYXJtcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlnZW5fcGFybXMtPnRlc3QuaWQgPSBURVNUX0NNRF9JTklfRklMRV9HRU5FUkFMX1BBUkFNOworCisJbWVtY3B5KCZnZW5fcGFybXMtPmdlbmVyYWxfcGFyYW1zLCBncCwgc2l6ZW9mKCpncCkpOworCisJaWYgKGdwLT50eF9iaXBfZmVtX2F1dG9fZGV0ZWN0KQorCQlhbnN3ZXIgPSB0cnVlOworCisJLyogUmVwbGFjZSBSRUYgYW5kIFRDWE8gQ0xLcyB3aXRoIHRoZSBvbmVzIGZyb20gcGxhdGZvcm0gZGF0YSAqLworCWdlbl9wYXJtcy0+Z2VuZXJhbF9wYXJhbXMucmVmX2Nsb2NrID0gd2wtPnJlZl9jbG9jazsKKwlnZW5fcGFybXMtPmdlbmVyYWxfcGFyYW1zLnRjeG9fcmVmX2Nsb2NrID0gd2wtPnRjeG9fY2xvY2s7CisKIAlyZXQgPSB3bDEyNzFfY21kX3Rlc3Qod2wsIGdlbl9wYXJtcywgc2l6ZW9mKCpnZW5fcGFybXMpLCBhbnN3ZXIpOwogCWlmIChyZXQgPCAwKSB7CiAJCXdsMTI3MV93YXJuaW5nKCJDTURfSU5JX0ZJTEVfR0VORVJBTF9QQVJBTSBmYWlsZWQiKTsKQEAgLTE0Nyw4ICsxOTcsOSBAQAogCiBpbnQgd2wxMjcxX2NtZF9yYWRpb19wYXJtcyhzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKKwlzdHJ1Y3Qgd2wxMjcxX252c19maWxlICpudnMgPSAoc3RydWN0IHdsMTI3MV9udnNfZmlsZSAqKXdsLT5udnM7CiAJc3RydWN0IHdsMTI3MV9yYWRpb19wYXJtc19jbWQgKnJhZGlvX3Bhcm1zOwotCXN0cnVjdCB3bDEyNzFfaW5pX2dlbmVyYWxfcGFyYW1zICpncCA9ICZ3bC0+bnZzLT5nZW5lcmFsX3BhcmFtczsKKwlzdHJ1Y3Qgd2wxMjcxX2luaV9nZW5lcmFsX3BhcmFtcyAqZ3AgPSAmbnZzLT5nZW5lcmFsX3BhcmFtczsKIAlpbnQgcmV0OwogCiAJaWYgKCF3bC0+bnZzKQpAQCAtMTYxLDE4ICsyMTIsMTggQEAKIAlyYWRpb19wYXJtcy0+dGVzdC5pZCA9IFRFU1RfQ01EX0lOSV9GSUxFX1JBRElPX1BBUkFNOwogCiAJLyogMi40R0h6IHBhcmFtZXRlcnMgKi8KLQltZW1jcHkoJnJhZGlvX3Bhcm1zLT5zdGF0aWNfcGFyYW1zXzIsICZ3bC0+bnZzLT5zdGF0X3JhZGlvX3BhcmFtc18yLAorCW1lbWNweSgmcmFkaW9fcGFybXMtPnN0YXRpY19wYXJhbXNfMiwgJm52cy0+c3RhdF9yYWRpb19wYXJhbXNfMiwKIAkgICAgICAgc2l6ZW9mKHN0cnVjdCB3bDEyNzFfaW5pX2JhbmRfcGFyYW1zXzIpKTsKIAltZW1jcHkoJnJhZGlvX3Bhcm1zLT5keW5fcGFyYW1zXzIsCi0JICAgICAgICZ3bC0+bnZzLT5keW5fcmFkaW9fcGFyYW1zXzJbZ3AtPnR4X2JpcF9mZW1fbWFudWZhY3R1cmVyXS5wYXJhbXMsCisJICAgICAgICZudnMtPmR5bl9yYWRpb19wYXJhbXNfMltncC0+dHhfYmlwX2ZlbV9tYW51ZmFjdHVyZXJdLnBhcmFtcywKIAkgICAgICAgc2l6ZW9mKHN0cnVjdCB3bDEyNzFfaW5pX2ZlbV9wYXJhbXNfMikpOwogCiAJLyogNUdIeiBwYXJhbWV0ZXJzICovCiAJbWVtY3B5KCZyYWRpb19wYXJtcy0+c3RhdGljX3BhcmFtc181LAotCSAgICAgICAmd2wtPm52cy0+c3RhdF9yYWRpb19wYXJhbXNfNSwKKwkgICAgICAgJm52cy0+c3RhdF9yYWRpb19wYXJhbXNfNSwKIAkgICAgICAgc2l6ZW9mKHN0cnVjdCB3bDEyNzFfaW5pX2JhbmRfcGFyYW1zXzUpKTsKIAltZW1jcHkoJnJhZGlvX3Bhcm1zLT5keW5fcGFyYW1zXzUsCi0JICAgICAgICZ3bC0+bnZzLT5keW5fcmFkaW9fcGFyYW1zXzVbZ3AtPnR4X2JpcF9mZW1fbWFudWZhY3R1cmVyXS5wYXJhbXMsCisJICAgICAgICZudnMtPmR5bl9yYWRpb19wYXJhbXNfNVtncC0+dHhfYmlwX2ZlbV9tYW51ZmFjdHVyZXJdLnBhcmFtcywKIAkgICAgICAgc2l6ZW9mKHN0cnVjdCB3bDEyNzFfaW5pX2ZlbV9wYXJhbXNfNSkpOwogCiAJd2wxMjcxX2R1bXAoREVCVUdfQ01ELCAiVEVTVF9DTURfSU5JX0ZJTEVfUkFESU9fUEFSQU06ICIsCkBAIC0xODYsNiArMjM3LDUwIEBACiAJcmV0dXJuIHJldDsKIH0KIAoraW50IHdsMTI4eF9jbWRfcmFkaW9fcGFybXMoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IHdsMTI4eF9udnNfZmlsZSAqbnZzID0gKHN0cnVjdCB3bDEyOHhfbnZzX2ZpbGUgKil3bC0+bnZzOworCXN0cnVjdCB3bDEyOHhfcmFkaW9fcGFybXNfY21kICpyYWRpb19wYXJtczsKKwlzdHJ1Y3Qgd2wxMjh4X2luaV9nZW5lcmFsX3BhcmFtcyAqZ3AgPSAmbnZzLT5nZW5lcmFsX3BhcmFtczsKKwlpbnQgcmV0OworCisJaWYgKCF3bC0+bnZzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJhZGlvX3Bhcm1zID0ga3phbGxvYyhzaXplb2YoKnJhZGlvX3Bhcm1zKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyYWRpb19wYXJtcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyYWRpb19wYXJtcy0+dGVzdC5pZCA9IFRFU1RfQ01EX0lOSV9GSUxFX1JBRElPX1BBUkFNOworCisJLyogMi40R0h6IHBhcmFtZXRlcnMgKi8KKwltZW1jcHkoJnJhZGlvX3Bhcm1zLT5zdGF0aWNfcGFyYW1zXzIsICZudnMtPnN0YXRfcmFkaW9fcGFyYW1zXzIsCisJICAgICAgIHNpemVvZihzdHJ1Y3Qgd2wxMjh4X2luaV9iYW5kX3BhcmFtc18yKSk7CisJbWVtY3B5KCZyYWRpb19wYXJtcy0+ZHluX3BhcmFtc18yLAorCSAgICAgICAmbnZzLT5keW5fcmFkaW9fcGFyYW1zXzJbZ3AtPnR4X2JpcF9mZW1fbWFudWZhY3R1cmVyXS5wYXJhbXMsCisJICAgICAgIHNpemVvZihzdHJ1Y3Qgd2wxMjh4X2luaV9mZW1fcGFyYW1zXzIpKTsKKworCS8qIDVHSHogcGFyYW1ldGVycyAqLworCW1lbWNweSgmcmFkaW9fcGFybXMtPnN0YXRpY19wYXJhbXNfNSwKKwkgICAgICAgJm52cy0+c3RhdF9yYWRpb19wYXJhbXNfNSwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCB3bDEyOHhfaW5pX2JhbmRfcGFyYW1zXzUpKTsKKwltZW1jcHkoJnJhZGlvX3Bhcm1zLT5keW5fcGFyYW1zXzUsCisJICAgICAgICZudnMtPmR5bl9yYWRpb19wYXJhbXNfNVtncC0+dHhfYmlwX2ZlbV9tYW51ZmFjdHVyZXJdLnBhcmFtcywKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCB3bDEyOHhfaW5pX2ZlbV9wYXJhbXNfNSkpOworCisJcmFkaW9fcGFybXMtPmZlbV92ZW5kb3JfYW5kX29wdGlvbnMgPSBudnMtPmZlbV92ZW5kb3JfYW5kX29wdGlvbnM7CisKKwl3bDEyNzFfZHVtcChERUJVR19DTUQsICJURVNUX0NNRF9JTklfRklMRV9SQURJT19QQVJBTTogIiwKKwkJICAgIHJhZGlvX3Bhcm1zLCBzaXplb2YoKnJhZGlvX3Bhcm1zKSk7CisKKwlyZXQgPSB3bDEyNzFfY21kX3Rlc3Qod2wsIHJhZGlvX3Bhcm1zLCBzaXplb2YoKnJhZGlvX3Bhcm1zKSwgMCk7CisJaWYgKHJldCA8IDApCisJCXdsMTI3MV93YXJuaW5nKCJDTURfSU5JX0ZJTEVfUkFESU9fUEFSQU0gZmFpbGVkIik7CisKKwlrZnJlZShyYWRpb19wYXJtcyk7CisJcmV0dXJuIHJldDsKK30KKwogaW50IHdsMTI3MV9jbWRfZXh0X3JhZGlvX3Bhcm1zKHN0cnVjdCB3bDEyNzEgKndsKQogewogCXN0cnVjdCB3bDEyNzFfZXh0X3JhZGlvX3Bhcm1zX2NtZCAqZXh0X3JhZGlvX3Bhcm1zOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2NtZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2NtZC5oCmluZGV4IDU0YzEyZTcuLjVjYWM5NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9jbWQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvY21kLmgKQEAgLTMyLDcgKzMyLDkgQEAKIGludCB3bDEyNzFfY21kX3NlbmQoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBpZCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuLAogCQkgICAgc2l6ZV90IHJlc19sZW4pOwogaW50IHdsMTI3MV9jbWRfZ2VuZXJhbF9wYXJtcyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjh4X2NtZF9nZW5lcmFsX3Bhcm1zKHN0cnVjdCB3bDEyNzEgKndsKTsKIGludCB3bDEyNzFfY21kX3JhZGlvX3Bhcm1zKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyOHhfY21kX3JhZGlvX3Bhcm1zKHN0cnVjdCB3bDEyNzEgKndsKTsKIGludCB3bDEyNzFfY21kX2V4dF9yYWRpb19wYXJtcyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CiBpbnQgd2wxMjcxX2NtZF9qb2luKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBic3NfdHlwZSk7CiBpbnQgd2wxMjcxX2NtZF90ZXN0KHN0cnVjdCB3bDEyNzEgKndsLCB2b2lkICpidWYsIHNpemVfdCBidWZfbGVuLCB1OCBhbnN3ZXIpOwpAQCAtNDE1LDYgKzQxNywyMSBAQAogCXU4IHBhZGRpbmdbM107CiB9IF9fcGFja2VkOwogCitzdHJ1Y3Qgd2wxMjh4X2dlbmVyYWxfcGFybXNfY21kIHsKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgaGVhZGVyOworCisJc3RydWN0IHdsMTI3MV9jbWRfdGVzdF9oZWFkZXIgdGVzdDsKKworCXN0cnVjdCB3bDEyOHhfaW5pX2dlbmVyYWxfcGFyYW1zIGdlbmVyYWxfcGFyYW1zOworCisJdTggc3JfZGVidWdfdGFibGVbV0wxMjcxX0lOSV9NQVhfU01BUlRfUkVGTEVYX1BBUkFNXTsKKwl1OCBzcl9zZW5fbl9wOworCXU4IHNyX3Nlbl9uX3BfZ2FpbjsKKwl1OCBzcl9zZW5fbnJuOworCXU4IHNyX3Nlbl9wcm47CisJdTggcGFkZGluZ1szXTsKK30gX19wYWNrZWQ7CisKIHN0cnVjdCB3bDEyNzFfcmFkaW9fcGFybXNfY21kIHsKIAlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgaGVhZGVyOwogCkBAIC00MzEsNiArNDQ4LDIzIEBACiAJdTggcGFkZGluZzNbMl07CiB9IF9fcGFja2VkOwogCitzdHJ1Y3Qgd2wxMjh4X3JhZGlvX3Bhcm1zX2NtZCB7CisJc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIGhlYWRlcjsKKworCXN0cnVjdCB3bDEyNzFfY21kX3Rlc3RfaGVhZGVyIHRlc3Q7CisKKwkvKiBTdGF0aWMgcmFkaW8gcGFyYW1ldGVycyAqLworCXN0cnVjdCB3bDEyOHhfaW5pX2JhbmRfcGFyYW1zXzIgc3RhdGljX3BhcmFtc18yOworCXN0cnVjdCB3bDEyOHhfaW5pX2JhbmRfcGFyYW1zXzUgc3RhdGljX3BhcmFtc181OworCisJdTggZmVtX3ZlbmRvcl9hbmRfb3B0aW9uczsKKworCS8qIER5bmFtaWMgcmFkaW8gcGFyYW1ldGVycyAqLworCXN0cnVjdCB3bDEyOHhfaW5pX2ZlbV9wYXJhbXNfMiBkeW5fcGFyYW1zXzI7CisJdTggcGFkZGluZzI7CisJc3RydWN0IHdsMTI4eF9pbmlfZmVtX3BhcmFtc181IGR5bl9wYXJhbXNfNTsKK30gX19wYWNrZWQ7CisKIHN0cnVjdCB3bDEyNzFfZXh0X3JhZGlvX3Bhcm1zX2NtZCB7CiAJc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIGhlYWRlcjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2NvbmYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9jb25mLmgKaW5kZXggOGE4MzIzOC4uMWFiNmM4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2NvbmYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvY29uZi5oCkBAIC0zOTYsMTIgKzM5Niw0MyBAQAogCUNPTkZfU0dfVEVNUF9QQVJBTV8zLAogCUNPTkZfU0dfVEVNUF9QQVJBTV80LAogCUNPTkZfU0dfVEVNUF9QQVJBTV81LAotCUNPTkZfU0dfUEFSQU1TX01BWCwKKworCS8qCisJICogQVAgYmVhY29uIG1pc3MKKwkgKgorCSAqIFJhbmdlOiAwIC0gMjU1CisJICovCisJQ09ORl9TR19BUF9CRUFDT05fTUlTU19UWCwKKworCS8qCisJICogQVAgUlggd2luZG93IGxlbmd0aAorCSAqCisJICogUmFuZ2U6IDAgLSA1MAorCSAqLworCUNPTkZfU0dfUlhfV0lORE9XX0xFTkdUSCwKKworCS8qCisJICogQVAgY29ubmVjdGlvbiBwcm90ZWN0aW9uIHRpbWUKKwkgKgorCSAqIFJhbmdlOiAwIC0gNTAwMAorCSAqLworCUNPTkZfU0dfQVBfQ09OTkVDVElPTl9QUk9URUNUSU9OX1RJTUUsCisKKwlDT05GX1NHX1RFTVBfUEFSQU1fNiwKKwlDT05GX1NHX1RFTVBfUEFSQU1fNywKKwlDT05GX1NHX1RFTVBfUEFSQU1fOCwKKwlDT05GX1NHX1RFTVBfUEFSQU1fOSwKKwlDT05GX1NHX1RFTVBfUEFSQU1fMTAsCisKKwlDT05GX1NHX1NUQV9QQVJBTVNfTUFYID0gQ09ORl9TR19URU1QX1BBUkFNXzUgKyAxLAorCUNPTkZfU0dfQVBfUEFSQU1TX01BWCA9IENPTkZfU0dfVEVNUF9QQVJBTV8xMCArIDEsCisKIAlDT05GX1NHX1BBUkFNU19BTEwgPSAweGZmCiB9OwogCiBzdHJ1Y3QgY29uZl9zZ19zZXR0aW5ncyB7Ci0JdTMyIHBhcmFtc1tDT05GX1NHX1BBUkFNU19NQVhdOworCXUzMiBzdGFfcGFyYW1zW0NPTkZfU0dfU1RBX1BBUkFNU19NQVhdOworCXUzMiBhcF9wYXJhbXNbQ09ORl9TR19BUF9QQVJBTVNfTUFYXTsKIAl1OCBzdGF0ZTsKIH07CiAKQEAgLTUwOSw2ICs1NDAsMTIgQEAKIAlDT05GX0hXX0JJVF9SQVRFXzM2TUJQUyB8IENPTkZfSFdfQklUX1JBVEVfNDhNQlBTIHwgICAgICBcCiAJQ09ORl9IV19CSVRfUkFURV81NE1CUFMpCiAKKyNkZWZpbmUgQ09ORl9UWF9PRkRNX1JBVEVTIChDT05GX0hXX0JJVF9SQVRFXzZNQlBTIHwgICAgICAgICAgICAgXAorCUNPTkZfSFdfQklUX1JBVEVfMTJNQlBTIHwgQ09ORl9IV19CSVRfUkFURV8yNE1CUFMgfCAgICAgIFwKKwlDT05GX0hXX0JJVF9SQVRFXzM2TUJQUyB8IENPTkZfSFdfQklUX1JBVEVfNDhNQlBTIHwgICAgICBcCisJQ09ORl9IV19CSVRfUkFURV81NE1CUFMpCisKKwogLyoKICAqIERlZmF1bHQgcmF0ZXMgZm9yIG1hbmFnZW1lbnQgdHJhZmZpYyB3aGVuIG9wZXJhdGluZyBpbiBBUCBtb2RlLiBUaGlzCiAgKiBzaG91bGQgYmUgY29uZmlndXJlZCBhY2NvcmRpbmcgdG8gdGhlIGJhc2ljIHJhdGUgc2V0IG9mIHRoZSBBUApAQCAtNTE2LDYgKzU1MywxMyBAQAogI2RlZmluZSBDT05GX1RYX0FQX0RFRkFVTFRfTUdNVF9SQVRFUyAgKENPTkZfSFdfQklUX1JBVEVfMU1CUFMgfCBcCiAJQ09ORl9IV19CSVRfUkFURV8yTUJQUyB8IENPTkZfSFdfQklUX1JBVEVfNV81TUJQUykKIAorLyoKKyAqIERlZmF1bHQgcmF0ZXMgZm9yIHdvcmtpbmcgYXMgSUJTUy4gdXNlIDExYiByYXRlcworICovCisjZGVmaW5lIENPTkZfVFhfSUJTU19ERUZBVUxUX1JBVEVTICAoQ09ORl9IV19CSVRfUkFURV8xTUJQUyB8ICAgICAgIFwKKwkJQ09ORl9IV19CSVRfUkFURV8yTUJQUyB8IENPTkZfSFdfQklUX1JBVEVfNV81TUJQUyB8IFwKKwkJQ09ORl9IV19CSVRfUkFURV8xMU1CUFMpOworCiBzdHJ1Y3QgY29uZl90eF9yYXRlX2NsYXNzIHsKIAogCS8qCkBAIC02NjcsMjIgKzcxMSw2IEBACiAJc3RydWN0IGNvbmZfdHhfYWNfY2F0ZWdvcnkgYWNfY29uZltDT05GX1RYX01BWF9BQ19DT1VOVF07CiAKIAkvKgotCSAqIENvbmZpZ3VyYXRpb24gZm9yIHJhdGUgY2xhc3NlcyBpbiBBUC1tb2RlLiBUaGVzZSByYXRlIGNsYXNzZXMKLQkgKiBhcmUgZm9yIHRoZSBBQyBUWCBxdWV1ZXMKLQkgKi8KLQlzdHJ1Y3QgY29uZl90eF9yYXRlX2NsYXNzIGFwX3JjX2NvbmZbQ09ORl9UWF9NQVhfQUNfQ09VTlRdOwotCi0JLyoKLQkgKiBNYW5hZ2VtZW50IFRYIHJhdGUgY2xhc3MgZm9yIEFQLW1vZGUuCi0JICovCi0Jc3RydWN0IGNvbmZfdHhfcmF0ZV9jbGFzcyBhcF9tZ210X2NvbmY7Ci0KLQkvKgotCSAqIEJyb2FkY2FzdCBUWCByYXRlIGNsYXNzIGZvciBBUC1tb2RlLgotCSAqLwotCXN0cnVjdCBjb25mX3R4X3JhdGVfY2xhc3MgYXBfYmNzdF9jb25mOwotCi0JLyoKIAkgKiBBUC1tb2RlIC0gYWxsb3cgdGhpcyBudW1iZXIgb2YgVFggcmV0cmllcyB0byBhIHN0YXRpb24gYmVmb3JlIGFuCiAJICogZXZlbnQgaXMgdHJpZ2dlcmVkIGZyb20gRlcuCiAJICovCkBAIC0xMDA0LDcgKzEwMzIsOSBAQAogCUNPTkZfUkVGX0NMS18xOV8yX0UsCiAJQ09ORl9SRUZfQ0xLXzI2X0UsCiAJQ09ORl9SRUZfQ0xLXzM4XzRfRSwKLQlDT05GX1JFRl9DTEtfNTJfRQorCUNPTkZfUkVGX0NMS181Ml9FLAorCUNPTkZfUkVGX0NMS18zOF80X01fWFRBTCwKKwlDT05GX1JFRl9DTEtfMjZfTV9YVEFMLAogfTsKIAogZW51bSBzaW5nbGVfZHVhbF9iYW5kX2VudW0gewpAQCAtMTAxOCwxNSArMTA0OCw2IEBACiAjZGVmaW5lIENPTkZfTlVNQkVSX09GX0NIQU5ORUxTXzJfNCAxNAogI2RlZmluZSBDT05GX05VTUJFUl9PRl9DSEFOTkVMU181ICAgMzUKIAotc3RydWN0IGNvbmZfcmFkaW9fcGFybXMgewotCS8qCi0JICogRkVNIHBhcmFtZXRlciBzZXQgdG8gdXNlCi0JICoKLQkgKiBSYW5nZTogMCBvciAxCi0JICovCi0JdTggZmVtOwotfTsKLQogc3RydWN0IGNvbmZfaXRyaW1fc2V0dGluZ3MgewogCS8qIGVuYWJsZSBkY28gaXRyaW0gKi8KIAl1OCBlbmFibGU7CkBAIC0xMTI2LDYgKzExNDcsMjYgQEAKIAogfTsKIAorc3RydWN0IGNvbmZfc2NoZWRfc2Nhbl9zZXR0aW5ncyB7CisJLyogbWluaW11bSB0aW1lIHRvIHdhaXQgb24gdGhlIGNoYW5uZWwgZm9yIGFjdGl2ZSBzY2FucyAoaW4gVFVzKSAqLworCXUxNiBtaW5fZHdlbGxfdGltZV9hY3RpdmU7CisKKwkvKiBtYXhpbXVtIHRpbWUgdG8gd2FpdCBvbiB0aGUgY2hhbm5lbCBmb3IgYWN0aXZlIHNjYW5zIChpbiBUVXMpICovCisJdTE2IG1heF9kd2VsbF90aW1lX2FjdGl2ZTsKKworCS8qIHRpbWUgdG8gd2FpdCBvbiB0aGUgY2hhbm5lbCBmb3IgcGFzc2l2ZSBzY2FucyAoaW4gVFVzKSAqLworCXUzMiBkd2VsbF90aW1lX3Bhc3NpdmU7CisKKwkvKiBudW1iZXIgb2YgcHJvYmUgcmVxdWVzdHMgdG8gc2VuZCBvbiBlYWNoIGNoYW5uZWwgaW4gYWN0aXZlIHNjYW5zICovCisJdTggbnVtX3Byb2JlX3JlcXM7CisKKwkvKiBSU1NJIHRocmVzaG9sZCB0byBiZSB1c2VkIGZvciBmaWx0ZXJpbmcgKi8KKwlzOCByc3NpX3RocmVzaG9sZDsKKworCS8qIFNOUiB0aHJlc2hvbGQgdG8gYmUgdXNlZCBmb3IgZmlsdGVyaW5nICovCisJczggc25yX3RocmVzaG9sZDsKK307CisKIC8qIHRoZXNlIGFyZSBudW1iZXIgb2YgY2hhbm5lbHMgb24gdGhlIGJhbmQgZGl2aWRlZCBieSB0d28sIHJvdW5kZWQgdXAgKi8KICNkZWZpbmUgQ09ORl9UWF9QV1JfQ09NUEVOU0FUSU9OX0xFTl8yIDcKICNkZWZpbmUgQ09ORl9UWF9QV1JfQ09NUEVOU0FUSU9OX0xFTl81IDE4CkBAIC0xMTkxLDYgKzEyMzIsMTkgQEAKIAl1OCB0eF9taW47CiB9OwogCitzdHJ1Y3QgY29uZl9mbV9jb2V4IHsKKwl1OCBlbmFibGU7CisJdTggc3dhbGxvd19wZXJpb2Q7CisJdTggbl9kaXZpZGVyX2ZyZWZfc2V0XzE7CisJdTggbl9kaXZpZGVyX2ZyZWZfc2V0XzI7CisJdTE2IG1fZGl2aWRlcl9mcmVmX3NldF8xOworCXUxNiBtX2RpdmlkZXJfZnJlZl9zZXRfMjsKKwl1MzIgY29leF9wbGxfc3RhYmlsaXphdGlvbl90aW1lOworCXUxNiBsZG9fc3RhYmlsaXphdGlvbl90aW1lOworCXU4IGZtX2Rpc3R1cmJlZF9iYW5kX21hcmdpbjsKKwl1OCBzd2FsbG93X2Nsa19kaWZmOworfTsKKwogc3RydWN0IGNvbmZfZHJ2X3NldHRpbmdzIHsKIAlzdHJ1Y3QgY29uZl9zZ19zZXR0aW5ncyBzZzsKIAlzdHJ1Y3QgY29uZl9yeF9zZXR0aW5ncyByeDsKQEAgLTEyMDAsOSArMTI1NCwxMyBAQAogCXN0cnVjdCBjb25mX3BtX2NvbmZpZ19zZXR0aW5ncyBwbV9jb25maWc7CiAJc3RydWN0IGNvbmZfcm9hbV90cmlnZ2VyX3NldHRpbmdzIHJvYW1fdHJpZ2dlcjsKIAlzdHJ1Y3QgY29uZl9zY2FuX3NldHRpbmdzIHNjYW47CisJc3RydWN0IGNvbmZfc2NoZWRfc2Nhbl9zZXR0aW5ncyBzY2hlZF9zY2FuOwogCXN0cnVjdCBjb25mX3JmX3NldHRpbmdzIHJmOwogCXN0cnVjdCBjb25mX2h0X3NldHRpbmcgaHQ7Ci0Jc3RydWN0IGNvbmZfbWVtb3J5X3NldHRpbmdzIG1lbTsKKwlzdHJ1Y3QgY29uZl9tZW1vcnlfc2V0dGluZ3MgbWVtX3dsMTI3eDsKKwlzdHJ1Y3QgY29uZl9tZW1vcnlfc2V0dGluZ3MgbWVtX3dsMTI4eDsKKwlzdHJ1Y3QgY29uZl9mbV9jb2V4IGZtX2NvZXg7CisJdTggaGNpX2lvX2RzOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2RlYnVnZnMuYwppbmRleCA4ZTc1YjA5Li5mMWY4ZGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9kZWJ1Z2ZzLmMKQEAgLTI2Nyw3ICsyNjcsNyBAQAogCX0KIAlidWZbbGVuXSA9ICdcMCc7CiAKLQlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDAsICZ2YWx1ZSk7CisJcmV0ID0ga3N0cnRvdWwoYnVmLCAwLCAmdmFsdWUpOwogCWlmIChyZXQgPCAwKSB7CiAJCXdsMTI3MV93YXJuaW5nKCJpbGxlZ2FsIHZhbHVlIGluIGdwaW9fcG93ZXIiKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yOTEsNiArMjkxLDI0MiBAQAogCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKIH07CiAKK3N0YXRpYyBzc2l6ZV90IHN0YXJ0X3JlY292ZXJ5X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKwlpZWVlODAyMTFfcXVldWVfd29yayh3bC0+aHcsICZ3bC0+cmVjb3Zlcnlfd29yayk7CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzdGFydF9yZWNvdmVyeV9vcHMgPSB7CisJLndyaXRlID0gc3RhcnRfcmVjb3Zlcnlfd3JpdGUsCisJLm9wZW4gPSB3bDEyNzFfb3Blbl9maWxlX2dlbmVyaWMsCisJLmxsc2VlayA9IGRlZmF1bHRfbGxzZWVrLAorfTsKKworc3RhdGljIHNzaXplX3QgZHJpdmVyX3N0YXRlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IHJlcyA9IDA7CisJY2hhciBidWZbMTAyNF07CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisjZGVmaW5lIERSSVZFUl9TVEFURV9QUklOVCh4LCBmbXQpICAgXAorCShyZXMgKz0gc2NucHJpbnRmKGJ1ZiArIHJlcywgc2l6ZW9mKGJ1ZikgLSByZXMsXAorCQkJICAjeCAiID0gIiBmbXQgIlxuIiwgd2wtPngpKQorCisjZGVmaW5lIERSSVZFUl9TVEFURV9QUklOVF9MT05HKHgpIERSSVZFUl9TVEFURV9QUklOVCh4LCAiJWxkIikKKyNkZWZpbmUgRFJJVkVSX1NUQVRFX1BSSU5UX0lOVCh4KSAgRFJJVkVSX1NUQVRFX1BSSU5UKHgsICIlZCIpCisjZGVmaW5lIERSSVZFUl9TVEFURV9QUklOVF9TVFIoeCkgIERSSVZFUl9TVEFURV9QUklOVCh4LCAiJXMiKQorI2RlZmluZSBEUklWRVJfU1RBVEVfUFJJTlRfTEhFWCh4KSBEUklWRVJfU1RBVEVfUFJJTlQoeCwgIjB4JWx4IikKKyNkZWZpbmUgRFJJVkVSX1NUQVRFX1BSSU5UX0hFWCh4KSAgRFJJVkVSX1NUQVRFX1BSSU5UKHgsICIweCV4IikKKworCURSSVZFUl9TVEFURV9QUklOVF9JTlQodHhfYmxvY2tzX2F2YWlsYWJsZSk7CisJRFJJVkVSX1NUQVRFX1BSSU5UX0lOVCh0eF9hbGxvY2F0ZWRfYmxvY2tzKTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfSU5UKHR4X2ZyYW1lc19jbnQpOworCURSSVZFUl9TVEFURV9QUklOVF9MSEVYKHR4X2ZyYW1lc19tYXBbMF0pOworCURSSVZFUl9TVEFURV9QUklOVF9JTlQodHhfcXVldWVfY291bnQpOworCURSSVZFUl9TVEFURV9QUklOVF9JTlQodHhfcGFja2V0c19jb3VudCk7CisJRFJJVkVSX1NUQVRFX1BSSU5UX0lOVCh0eF9yZXN1bHRzX2NvdW50KTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfTEhFWChmbGFncyk7CisJRFJJVkVSX1NUQVRFX1BSSU5UX0lOVCh0eF9ibG9ja3NfZnJlZWRbMF0pOworCURSSVZFUl9TVEFURV9QUklOVF9JTlQodHhfYmxvY2tzX2ZyZWVkWzFdKTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfSU5UKHR4X2Jsb2Nrc19mcmVlZFsyXSk7CisJRFJJVkVSX1NUQVRFX1BSSU5UX0lOVCh0eF9ibG9ja3NfZnJlZWRbM10pOworCURSSVZFUl9TVEFURV9QUklOVF9JTlQodHhfc2VjdXJpdHlfbGFzdF9zZXEpOworCURSSVZFUl9TVEFURV9QUklOVF9JTlQocnhfY291bnRlcik7CisJRFJJVkVSX1NUQVRFX1BSSU5UX0lOVChzZXNzaW9uX2NvdW50ZXIpOworCURSSVZFUl9TVEFURV9QUklOVF9JTlQoc3RhdGUpOworCURSSVZFUl9TVEFURV9QUklOVF9JTlQoYnNzX3R5cGUpOworCURSSVZFUl9TVEFURV9QUklOVF9JTlQoY2hhbm5lbCk7CisJRFJJVkVSX1NUQVRFX1BSSU5UX0hFWChyYXRlX3NldCk7CisJRFJJVkVSX1NUQVRFX1BSSU5UX0hFWChiYXNpY19yYXRlX3NldCk7CisJRFJJVkVSX1NUQVRFX1BSSU5UX0hFWChiYXNpY19yYXRlKTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfSU5UKGJhbmQpOworCURSSVZFUl9TVEFURV9QUklOVF9JTlQoYmVhY29uX2ludCk7CisJRFJJVkVSX1NUQVRFX1BSSU5UX0lOVChwc21fZW50cnlfcmV0cnkpOworCURSSVZFUl9TVEFURV9QUklOVF9JTlQocHNfcG9sbF9mYWlsdXJlcyk7CisJRFJJVkVSX1NUQVRFX1BSSU5UX0hFWChmaWx0ZXJzKTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfSEVYKHJ4X2NvbmZpZyk7CisJRFJJVkVSX1NUQVRFX1BSSU5UX0hFWChyeF9maWx0ZXIpOworCURSSVZFUl9TVEFURV9QUklOVF9JTlQocG93ZXJfbGV2ZWwpOworCURSSVZFUl9TVEFURV9QUklOVF9JTlQocnNzaV90aG9sZCk7CisJRFJJVkVSX1NUQVRFX1BSSU5UX0lOVChsYXN0X3Jzc2lfZXZlbnQpOworCURSSVZFUl9TVEFURV9QUklOVF9JTlQoc2dfZW5hYmxlZCk7CisJRFJJVkVSX1NUQVRFX1BSSU5UX0lOVChlbmFibGVfMTFhKTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfSU5UKG5vaXNlKTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfTEhFWChhcF9obGlkX21hcFswXSk7CisJRFJJVkVSX1NUQVRFX1BSSU5UX0lOVChsYXN0X3R4X2hsaWQpOworCURSSVZFUl9TVEFURV9QUklOVF9JTlQoYmFfc3VwcG9ydCk7CisJRFJJVkVSX1NUQVRFX1BSSU5UX0hFWChiYV9yeF9iaXRtYXApOworCURSSVZFUl9TVEFURV9QUklOVF9IRVgoYXBfZndfcHNfbWFwKTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfTEhFWChhcF9wc19tYXApOworCURSSVZFUl9TVEFURV9QUklOVF9IRVgocXVpcmtzKTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfSEVYKGlycSk7CisJRFJJVkVSX1NUQVRFX1BSSU5UX0hFWChyZWZfY2xvY2spOworCURSSVZFUl9TVEFURV9QUklOVF9IRVgodGN4b19jbG9jayk7CisJRFJJVkVSX1NUQVRFX1BSSU5UX0hFWChod19wZ192ZXIpOworCURSSVZFUl9TVEFURV9QUklOVF9IRVgocGxhdGZvcm1fcXVpcmtzKTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfSEVYKGNoaXAuaWQpOworCURSSVZFUl9TVEFURV9QUklOVF9TVFIoY2hpcC5md192ZXJfc3RyKTsKKwlEUklWRVJfU1RBVEVfUFJJTlRfSU5UKHNjaGVkX3NjYW5uaW5nKTsKKworI3VuZGVmIERSSVZFUl9TVEFURV9QUklOVF9JTlQKKyN1bmRlZiBEUklWRVJfU1RBVEVfUFJJTlRfTE9ORworI3VuZGVmIERSSVZFUl9TVEFURV9QUklOVF9IRVgKKyN1bmRlZiBEUklWRVJfU1RBVEVfUFJJTlRfTEhFWAorI3VuZGVmIERSSVZFUl9TVEFURV9QUklOVF9TVFIKKyN1bmRlZiBEUklWRVJfU1RBVEVfUFJJTlQKKworCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmVzKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHJpdmVyX3N0YXRlX29wcyA9IHsKKwkucmVhZCA9IGRyaXZlcl9zdGF0ZV9yZWFkLAorCS5vcGVuID0gd2wxMjcxX29wZW5fZmlsZV9nZW5lcmljLAorCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKK307CisKK3N0YXRpYyBzc2l6ZV90IGR0aW1faW50ZXJ2YWxfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdTggdmFsdWU7CisKKwlpZiAod2wtPmNvbmYuY29ubi53YWtlX3VwX2V2ZW50ID09IENPTkZfV0FLRV9VUF9FVkVOVF9EVElNIHx8CisJICAgIHdsLT5jb25mLmNvbm4ud2FrZV91cF9ldmVudCA9PSBDT05GX1dBS0VfVVBfRVZFTlRfTl9EVElNKQorCQl2YWx1ZSA9IHdsLT5jb25mLmNvbm4ubGlzdGVuX2ludGVydmFsOworCWVsc2UKKwkJdmFsdWUgPSAwOworCisJcmV0dXJuIHdsMTI3MV9mb3JtYXRfYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgIiVkXG4iLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGR0aW1faW50ZXJ2YWxfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzEwXTsKKwlzaXplX3QgbGVuOworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisJaW50IHJldDsKKworCWxlbiA9IG1pbihjb3VudCwgc2l6ZW9mKGJ1ZikgLSAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnVmW2xlbl0gPSAnXDAnOworCisJcmV0ID0ga3N0cnRvdWwoYnVmLCAwLCAmdmFsdWUpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJpbGxlZ2FsIHZhbHVlIGZvciBkdGltX2ludGVydmFsIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh2YWx1ZSA8IDEgfHwgdmFsdWUgPiAxMCkgeworCQl3bDEyNzFfd2FybmluZygiZHRpbSB2YWx1ZSBpcyBub3QgaW4gdmFsaWQgcmFuZ2UiKTsKKwkJcmV0dXJuIC1FUkFOR0U7CisJfQorCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCXdsLT5jb25mLmNvbm4ubGlzdGVuX2ludGVydmFsID0gdmFsdWU7CisJLyogZm9yIHNvbWUgcmVhc29uIHRoZXJlIGFyZSBkaWZmZXJlbnQgZXZlbnQgdHlwZXMgZm9yIDEgYW5kID4xICovCisJaWYgKHZhbHVlID09IDEpCisJCXdsLT5jb25mLmNvbm4ud2FrZV91cF9ldmVudCA9IENPTkZfV0FLRV9VUF9FVkVOVF9EVElNOworCWVsc2UKKwkJd2wtPmNvbmYuY29ubi53YWtlX3VwX2V2ZW50ID0gQ09ORl9XQUtFX1VQX0VWRU5UX05fRFRJTTsKKworCS8qCisJICogd2UgZG9uJ3QgcmVjb25maWd1cmUgQUNYX1dBS0VfVVBfQ09ORElUSU9OUyBub3csIHNvIGl0IHdpbGwgb25seQorCSAqIHRha2UgZWZmZWN0IG9uIHRoZSBuZXh0IHRpbWUgd2UgZW50ZXIgcHNtLgorCSAqLworCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR0aW1faW50ZXJ2YWxfb3BzID0geworCS5yZWFkID0gZHRpbV9pbnRlcnZhbF9yZWFkLAorCS53cml0ZSA9IGR0aW1faW50ZXJ2YWxfd3JpdGUsCisJLm9wZW4gPSB3bDEyNzFfb3Blbl9maWxlX2dlbmVyaWMsCisJLmxsc2VlayA9IGRlZmF1bHRfbGxzZWVrLAorfTsKKworc3RhdGljIHNzaXplX3QgYmVhY29uX2ludGVydmFsX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdTggdmFsdWU7CisKKwlpZiAod2wtPmNvbmYuY29ubi53YWtlX3VwX2V2ZW50ID09IENPTkZfV0FLRV9VUF9FVkVOVF9CRUFDT04gfHwKKwkgICAgd2wtPmNvbmYuY29ubi53YWtlX3VwX2V2ZW50ID09IENPTkZfV0FLRV9VUF9FVkVOVF9OX0JFQUNPTlMpCisJCXZhbHVlID0gd2wtPmNvbmYuY29ubi5saXN0ZW5faW50ZXJ2YWw7CisJZWxzZQorCQl2YWx1ZSA9IDA7CisKKwlyZXR1cm4gd2wxMjcxX2Zvcm1hdF9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCAiJWRcbiIsIHZhbHVlKTsKK30KKworc3RhdGljIHNzaXplX3QgYmVhY29uX2ludGVydmFsX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSAgICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbMTBdOworCXNpemVfdCBsZW47CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwlpbnQgcmV0OworCisJbGVuID0gbWluKGNvdW50LCBzaXplb2YoYnVmKSAtIDEpOworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBsZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlidWZbbGVuXSA9ICdcMCc7CisKKwlyZXQgPSBrc3RydG91bChidWYsIDAsICZ2YWx1ZSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImlsbGVnYWwgdmFsdWUgZm9yIGJlYWNvbl9pbnRlcnZhbCIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodmFsdWUgPCAxIHx8IHZhbHVlID4gMjU1KSB7CisJCXdsMTI3MV93YXJuaW5nKCJiZWFjb24gaW50ZXJ2YWwgdmFsdWUgaXMgbm90IGluIHZhbGlkIHJhbmdlIik7CisJCXJldHVybiAtRVJBTkdFOworCX0KKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwl3bC0+Y29uZi5jb25uLmxpc3Rlbl9pbnRlcnZhbCA9IHZhbHVlOworCS8qIGZvciBzb21lIHJlYXNvbiB0aGVyZSBhcmUgZGlmZmVyZW50IGV2ZW50IHR5cGVzIGZvciAxIGFuZCA+MSAqLworCWlmICh2YWx1ZSA9PSAxKQorCQl3bC0+Y29uZi5jb25uLndha2VfdXBfZXZlbnQgPSBDT05GX1dBS0VfVVBfRVZFTlRfQkVBQ09OOworCWVsc2UKKwkJd2wtPmNvbmYuY29ubi53YWtlX3VwX2V2ZW50ID0gQ09ORl9XQUtFX1VQX0VWRU5UX05fQkVBQ09OUzsKKworCS8qCisJICogd2UgZG9uJ3QgcmVjb25maWd1cmUgQUNYX1dBS0VfVVBfQ09ORElUSU9OUyBub3csIHNvIGl0IHdpbGwgb25seQorCSAqIHRha2UgZWZmZWN0IG9uIHRoZSBuZXh0IHRpbWUgd2UgZW50ZXIgcHNtLgorCSAqLworCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJlYWNvbl9pbnRlcnZhbF9vcHMgPSB7CisJLnJlYWQgPSBiZWFjb25faW50ZXJ2YWxfcmVhZCwKKwkud3JpdGUgPSBiZWFjb25faW50ZXJ2YWxfd3JpdGUsCisJLm9wZW4gPSB3bDEyNzFfb3Blbl9maWxlX2dlbmVyaWMsCisJLmxsc2VlayA9IGRlZmF1bHRfbGxzZWVrLAorfTsKKwogc3RhdGljIGludCB3bDEyNzFfZGVidWdmc19hZGRfZmlsZXMoc3RydWN0IHdsMTI3MSAqd2wsCiAJCQkJICAgICBzdHJ1Y3QgZGVudHJ5ICpyb290ZGlyKQogewpAQCAtMzk5LDYgKzYzNSwxMCBAQAogCURFQlVHRlNfQUREKGV4Y2Vzc2l2ZV9yZXRyaWVzLCByb290ZGlyKTsKIAogCURFQlVHRlNfQUREKGdwaW9fcG93ZXIsIHJvb3RkaXIpOworCURFQlVHRlNfQUREKHN0YXJ0X3JlY292ZXJ5LCByb290ZGlyKTsKKwlERUJVR0ZTX0FERChkcml2ZXJfc3RhdGUsIHJvb3RkaXIpOworCURFQlVHRlNfQUREKGR0aW1faW50ZXJ2YWwsIHJvb3RkaXIpOworCURFQlVHRlNfQUREKGJlYWNvbl9pbnRlcnZhbCwgcm9vdGRpcik7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2V2ZW50LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvZXZlbnQuYwppbmRleCAxYjE3MGM1Li5jM2M1NTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvZXZlbnQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvZXZlbnQuYwpAQCAtMzMsNiArMzMsNyBAQAogewogCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrOwogCXN0cnVjdCB3bDEyNzEgKndsOworCWludCByZXQ7CiAKIAlkd29yayA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKIAl3bCA9IGNvbnRhaW5lcl9vZihkd29yaywgc3RydWN0IHdsMTI3MSwgcHNwb2xsX3dvcmspOwpAQCAtNTUsOCArNTYsMTMgQEAKIAkgKiBkZWxpdmVyeSBmYWlsdXJlIG9jY3VycmVkLCBhbmQgbm8tb25lIGNoYW5nZWQgc3RhdGUgc2luY2UsIHNvCiAJICogd2Ugc2hvdWxkIGdvIGJhY2sgdG8gcG93ZXJzYXZlLgogCSAqLworCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKIAl3bDEyNzFfcHNfc2V0X21vZGUod2wsIFNUQVRJT05fUE9XRVJfU0FWRV9NT0RFLCB3bC0+YmFzaWNfcmF0ZSwgdHJ1ZSk7CiAKKwl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKIG91dDoKIAltdXRleF91bmxvY2soJndsLT5tdXRleCk7CiB9OwpAQCAtMTMyLDggKzEzOCwxMCBAQAogCQlpZiAocmV0IDwgMCkKIAkJCWJyZWFrOwogCi0JCS8qIGdvIHRvIGV4dHJlbWVseSBsb3cgcG93ZXIgbW9kZSAqLwotCQl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKKwkJaWYgKHdsLT5wc19jb21wbCkgeworCQkJY29tcGxldGUod2wtPnBzX2NvbXBsKTsKKwkJCXdsLT5wc19jb21wbCA9IE5VTEw7CisJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0xODcsNiArMTk1LDIyIEBACiAJCXdsMTI3MV9zY2FuX3N0bSh3bCk7CiAJfQogCisJaWYgKHZlY3RvciAmIFBFUklPRElDX1NDQU5fUkVQT1JUX0VWRU5UX0lEKSB7CisJCXdsMTI3MV9kZWJ1ZyhERUJVR19FVkVOVCwgIlBFUklPRElDX1NDQU5fUkVQT1JUX0VWRU5UICIKKwkJCSAgICAgIihzdGF0dXMgMHglMHgpIiwgbWJveC0+c2NoZWR1bGVkX3NjYW5fc3RhdHVzKTsKKworCQl3bDEyNzFfc2Nhbl9zY2hlZF9zY2FuX3Jlc3VsdHMod2wpOworCX0KKworCWlmICh2ZWN0b3IgJiBQRVJJT0RJQ19TQ0FOX0NPTVBMRVRFX0VWRU5UX0lEKSB7CisJCXdsMTI3MV9kZWJ1ZyhERUJVR19FVkVOVCwgIlBFUklPRElDX1NDQU5fQ09NUExFVEVfRVZFTlQgIgorCQkJICAgICAiKHN0YXR1cyAweCUweCkiLCBtYm94LT5zY2hlZHVsZWRfc2Nhbl9zdGF0dXMpOworCQlpZiAod2wtPnNjaGVkX3NjYW5uaW5nKSB7CisJCQl3bDEyNzFfc2Nhbl9zY2hlZF9zY2FuX3N0b3Aod2wpOworCQkJaWVlZTgwMjExX3NjaGVkX3NjYW5fc3RvcHBlZCh3bC0+aHcpOworCQl9CisJfQorCiAJLyogZGlzYWJsZSBkeW5hbWljIFBTIHdoZW4gcmVxdWVzdGVkIGJ5IHRoZSBmaXJtd2FyZSAqLwogCWlmICh2ZWN0b3IgJiBTT0ZUX0dFTUlOSV9TRU5TRV9FVkVOVF9JRCAmJgogCSAgICB3bC0+YnNzX3R5cGUgPT0gQlNTX1RZUEVfU1RBX0JTUykgewpAQCAtMjI4LDYgKzI1MiwxMiBAQAogCQkJd2wxMjcxX2V2ZW50X3Jzc2lfdHJpZ2dlcih3bCwgbWJveCk7CiAJfQogCisJaWYgKCh2ZWN0b3IgJiBEVU1NWV9QQUNLRVRfRVZFTlRfSUQpICYmICFpc19hcCkgeworCQl3bDEyNzFfZGVidWcoREVCVUdfRVZFTlQsICJEVU1NWV9QQUNLRVRfSURfRVZFTlRfSUQiKTsKKwkJaWYgKHdsLT52aWYpCisJCQl3bDEyNzFfdHhfZHVtbXlfcGFja2V0KHdsKTsKKwl9CisKIAlpZiAod2wtPnZpZiAmJiBiZWFjb25fbG9zcykKIAkJaWVlZTgwMjExX2Nvbm5lY3Rpb25fbG9zcyh3bC0+dmlmKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2V2ZW50LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvZXZlbnQuaAppbmRleCAwZTgwODg2Li5iNmNmMDZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvZXZlbnQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvZXZlbnQuaApAQCAtNTksNyArNTksMTAgQEAKIAlCU1NfTE9TRV9FVkVOVF9JRAkJCSA9IEJJVCgxOCksCiAJUkVHQUlORURfQlNTX0VWRU5UX0lECQkJID0gQklUKDE5KSwKIAlST0FNSU5HX1RSSUdHRVJfTUFYX1RYX1JFVFJZX0VWRU5UX0lECSA9IEJJVCgyMCksCi0JU1RBX1JFTU9WRV9DT01QTEVURV9FVkVOVF9JRAkJID0gQklUKDIxKSwgLyogQVAgKi8KKwkvKiBTVEE6IGR1bW15IHBha2V0IGZvciBkeW5hbWljIG1lbSBibG9ja3MgKi8KKwlEVU1NWV9QQUNLRVRfRVZFTlRfSUQgICAgICAgICAgICAgICAgICAgID0gQklUKDIxKSwKKwkvKiBBUDogU1RBIHJlbW92ZSBjb21wbGV0ZSAqLworCVNUQV9SRU1PVkVfQ09NUExFVEVfRVZFTlRfSUQgICAgICAgICAgICAgPSBCSVQoMjEpLAogCVNPRlRfR0VNSU5JX1NFTlNFX0VWRU5UX0lECQkgPSBCSVQoMjIpLAogCVNPRlRfR0VNSU5JX1BSRURJQ1RJT05fRVZFTlRfSUQJCSA9IEJJVCgyMyksCiAJU09GVF9HRU1JTklfQVZBTEFOQ0hFX0VWRU5UX0lECQkgPSBCSVQoMjQpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2luaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2luaS5oCmluZGV4IGMzMzBhMjUuLjE0MjBjODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9pbmkuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvaW5pLmgKQEAgLTQxLDYgKzQxLDI4IEBACiAJdTggc3JmM1tXTDEyNzFfSU5JX01BWF9TTUFSVF9SRUZMRVhfUEFSQU1dOwogfSBfX3BhY2tlZDsKIAorI2RlZmluZSBXTDEyOFhfSU5JX01BWF9TRVRUSU5HU19QQVJBTSA0CisKK3N0cnVjdCB3bDEyOHhfaW5pX2dlbmVyYWxfcGFyYW1zIHsKKwl1OCByZWZfY2xvY2s7CisJdTggc2V0dGxpbmdfdGltZTsKKwl1OCBjbGtfdmFsaWRfb25fd2FrZXVwOworCXU4IHRjeG9fcmVmX2Nsb2NrOworCXU4IHRjeG9fc2V0dGxpbmdfdGltZTsKKwl1OCB0Y3hvX3ZhbGlkX29uX3dha2V1cDsKKwl1OCB0Y3hvX2xkb192b2x0YWdlOworCXU4IHh0YWxfaXRyaW1fdmFsOworCXU4IHBsYXRmb3JtX2NvbmY7CisJdTggZHVhbF9tb2RlX3NlbGVjdDsKKwl1OCB0eF9iaXBfZmVtX2F1dG9fZGV0ZWN0OworCXU4IHR4X2JpcF9mZW1fbWFudWZhY3R1cmVyOworCXU4IGdlbmVyYWxfc2V0dGluZ3NbV0wxMjhYX0lOSV9NQVhfU0VUVElOR1NfUEFSQU1dOworCXU4IHNyX3N0YXRlOworCXU4IHNyZjFbV0wxMjcxX0lOSV9NQVhfU01BUlRfUkVGTEVYX1BBUkFNXTsKKwl1OCBzcmYyW1dMMTI3MV9JTklfTUFYX1NNQVJUX1JFRkxFWF9QQVJBTV07CisJdTggc3JmM1tXTDEyNzFfSU5JX01BWF9TTUFSVF9SRUZMRVhfUEFSQU1dOworfSBfX3BhY2tlZDsKKwogI2RlZmluZSBXTDEyNzFfSU5JX1JTU0lfUFJPQ0VTU19DT01QRU5TX1NJWkUgMTUKIAogc3RydWN0IHdsMTI3MV9pbmlfYmFuZF9wYXJhbXNfMiB7CkBAIC00OSw5ICs3MSwxNiBAQAogCXU4IHJ4X3Jzc2lfcHJvY2Vzc19jb21wZW5zW1dMMTI3MV9JTklfUlNTSV9QUk9DRVNTX0NPTVBFTlNfU0laRV07CiB9IF9fcGFja2VkOwogCi0jZGVmaW5lIFdMMTI3MV9JTklfUkFURV9HUk9VUF9DT1VOVCA2CiAjZGVmaW5lIFdMMTI3MV9JTklfQ0hBTk5FTF9DT1VOVF8yIDE0CiAKK3N0cnVjdCB3bDEyOHhfaW5pX2JhbmRfcGFyYW1zXzIgeworCXU4IHJ4X3RyYWNlX2luc2VydGlvbl9sb3NzOworCXU4IHR4X3RyYWNlX2xvc3NbV0wxMjcxX0lOSV9DSEFOTkVMX0NPVU5UXzJdOworCXU4IHJ4X3Jzc2lfcHJvY2Vzc19jb21wZW5zW1dMMTI3MV9JTklfUlNTSV9QUk9DRVNTX0NPTVBFTlNfU0laRV07Cit9IF9fcGFja2VkOworCisjZGVmaW5lIFdMMTI3MV9JTklfUkFURV9HUk9VUF9DT1VOVCA2CisKIHN0cnVjdCB3bDEyNzFfaW5pX2ZlbV9wYXJhbXNfMiB7CiAJX19sZTE2IHR4X2JpcF9yZWZfcGRfdm9sdGFnZTsKIAl1OCB0eF9iaXBfcmVmX3Bvd2VyOwpAQCAtNjgsNiArOTcsMjggQEAKIAl1OCBub3JtYWxfdG9fZGVncmFkZWRfaGlnaF90aHI7CiB9IF9fcGFja2VkOwogCisjZGVmaW5lIFdMMTI4WF9JTklfUkFURV9HUk9VUF9DT1VOVCA3CisvKiBsb3cgYW5kIGhpZ2ggdGVtcGVyYXR1cmVzICovCisjZGVmaW5lIFdMMTI4WF9JTklfUERfVlNfVEVNUEVSQVRVUkVfUkFOR0VTIDIKKworc3RydWN0IHdsMTI4eF9pbmlfZmVtX3BhcmFtc18yIHsKKwlfX2xlMTYgdHhfYmlwX3JlZl9wZF92b2x0YWdlOworCXU4IHR4X2JpcF9yZWZfcG93ZXI7CisJdTggdHhfYmlwX3JlZl9vZmZzZXQ7CisJdTggdHhfcGVyX3JhdGVfcHdyX2xpbWl0c19ub3JtYWxbV0wxMjhYX0lOSV9SQVRFX0dST1VQX0NPVU5UXTsKKwl1OCB0eF9wZXJfcmF0ZV9wd3JfbGltaXRzX2RlZ3JhZGVkW1dMMTI4WF9JTklfUkFURV9HUk9VUF9DT1VOVF07CisJdTggdHhfcGVyX3JhdGVfcHdyX2xpbWl0c19leHRyZW1lW1dMMTI4WF9JTklfUkFURV9HUk9VUF9DT1VOVF07CisJdTggdHhfcGVyX2NoYW5fcHdyX2xpbWl0c18xMWJbV0wxMjcxX0lOSV9DSEFOTkVMX0NPVU5UXzJdOworCXU4IHR4X3Blcl9jaGFuX3B3cl9saW1pdHNfb2ZkbVtXTDEyNzFfSU5JX0NIQU5ORUxfQ09VTlRfMl07CisJdTggdHhfcGRfdnNfcmF0ZV9vZmZzZXRzW1dMMTI4WF9JTklfUkFURV9HUk9VUF9DT1VOVF07CisJdTggdHhfaWJpYXNbV0wxMjhYX0lOSV9SQVRFX0dST1VQX0NPVU5UICsgMV07CisJdTggdHhfcGRfdnNfY2hhbl9vZmZzZXRzW1dMMTI3MV9JTklfQ0hBTk5FTF9DT1VOVF8yXTsKKwl1OCB0eF9wZF92c190ZW1wZXJhdHVyZVtXTDEyOFhfSU5JX1BEX1ZTX1RFTVBFUkFUVVJFX1JBTkdFU107CisJdTggcnhfZmVtX2luc2VydGlvbl9sb3NzOworCXU4IGRlZ3JhZGVkX2xvd190b19ub3JtYWxfdGhyOworCXU4IG5vcm1hbF90b19kZWdyYWRlZF9oaWdoX3RocjsKK30gX19wYWNrZWQ7CisKICNkZWZpbmUgV0wxMjcxX0lOSV9DSEFOTkVMX0NPVU5UXzUgMzUKICNkZWZpbmUgV0wxMjcxX0lOSV9TVUJfQkFORF9DT1VOVF81IDcKIApAQCAtNzcsNiArMTI4LDEyIEBACiAJdTggcnhfcnNzaV9wcm9jZXNzX2NvbXBlbnNbV0wxMjcxX0lOSV9SU1NJX1BST0NFU1NfQ09NUEVOU19TSVpFXTsKIH0gX19wYWNrZWQ7CiAKK3N0cnVjdCB3bDEyOHhfaW5pX2JhbmRfcGFyYW1zXzUgeworCXU4IHJ4X3RyYWNlX2luc2VydGlvbl9sb3NzW1dMMTI3MV9JTklfU1VCX0JBTkRfQ09VTlRfNV07CisJdTggdHhfdHJhY2VfbG9zc1tXTDEyNzFfSU5JX0NIQU5ORUxfQ09VTlRfNV07CisJdTggcnhfcnNzaV9wcm9jZXNzX2NvbXBlbnNbV0wxMjcxX0lOSV9SU1NJX1BST0NFU1NfQ09NUEVOU19TSVpFXTsKK30gX19wYWNrZWQ7CisKIHN0cnVjdCB3bDEyNzFfaW5pX2ZlbV9wYXJhbXNfNSB7CiAJX19sZTE2IHR4X2JpcF9yZWZfcGRfdm9sdGFnZVtXTDEyNzFfSU5JX1NVQl9CQU5EX0NPVU5UXzVdOwogCXU4IHR4X2JpcF9yZWZfcG93ZXJbV0wxMjcxX0lOSV9TVUJfQkFORF9DT1VOVF81XTsKQEAgLTkyLDYgKzE0OSwyMyBAQAogCXU4IG5vcm1hbF90b19kZWdyYWRlZF9oaWdoX3RocjsKIH0gX19wYWNrZWQ7CiAKK3N0cnVjdCB3bDEyOHhfaW5pX2ZlbV9wYXJhbXNfNSB7CisJX19sZTE2IHR4X2JpcF9yZWZfcGRfdm9sdGFnZVtXTDEyNzFfSU5JX1NVQl9CQU5EX0NPVU5UXzVdOworCXU4IHR4X2JpcF9yZWZfcG93ZXJbV0wxMjcxX0lOSV9TVUJfQkFORF9DT1VOVF81XTsKKwl1OCB0eF9iaXBfcmVmX29mZnNldFtXTDEyNzFfSU5JX1NVQl9CQU5EX0NPVU5UXzVdOworCXU4IHR4X3Blcl9yYXRlX3B3cl9saW1pdHNfbm9ybWFsW1dMMTI4WF9JTklfUkFURV9HUk9VUF9DT1VOVF07CisJdTggdHhfcGVyX3JhdGVfcHdyX2xpbWl0c19kZWdyYWRlZFtXTDEyOFhfSU5JX1JBVEVfR1JPVVBfQ09VTlRdOworCXU4IHR4X3Blcl9yYXRlX3B3cl9saW1pdHNfZXh0cmVtZVtXTDEyOFhfSU5JX1JBVEVfR1JPVVBfQ09VTlRdOworCXU4IHR4X3Blcl9jaGFuX3B3cl9saW1pdHNfb2ZkbVtXTDEyNzFfSU5JX0NIQU5ORUxfQ09VTlRfNV07CisJdTggdHhfcGRfdnNfcmF0ZV9vZmZzZXRzW1dMMTI4WF9JTklfUkFURV9HUk9VUF9DT1VOVF07CisJdTggdHhfaWJpYXNbV0wxMjhYX0lOSV9SQVRFX0dST1VQX0NPVU5UXTsKKwl1OCB0eF9wZF92c19jaGFuX29mZnNldHNbV0wxMjcxX0lOSV9DSEFOTkVMX0NPVU5UXzVdOworCXU4IHR4X3BkX3ZzX3RlbXBlcmF0dXJlW1dMMTI3MV9JTklfU1VCX0JBTkRfQ09VTlRfNSAqCisJCVdMMTI4WF9JTklfUERfVlNfVEVNUEVSQVRVUkVfUkFOR0VTXTsKKwl1OCByeF9mZW1faW5zZXJ0aW9uX2xvc3NbV0wxMjcxX0lOSV9TVUJfQkFORF9DT1VOVF81XTsKKwl1OCBkZWdyYWRlZF9sb3dfdG9fbm9ybWFsX3RocjsKKwl1OCBub3JtYWxfdG9fZGVncmFkZWRfaGlnaF90aHI7Cit9IF9fcGFja2VkOwogCiAvKiBOVlMgZGF0YSBzdHJ1Y3R1cmUgKi8KICNkZWZpbmUgV0wxMjcxX0lOSV9OVlNfU0VDVElPTl9TSVpFCQkgICAgIDQ2OApAQCAtMTAwLDcgKzE3NCw3IEBACiAjZGVmaW5lIFdMMTI3MV9JTklfTEVHQUNZX05WU19GSUxFX1NJWkUgICAgICAgICAgICAgIDgwMAogCiBzdHJ1Y3Qgd2wxMjcxX252c19maWxlIHsKLQkvKiBOVlMgc2VjdGlvbiAqLworCS8qIE5WUyBzZWN0aW9uIC0gbXVzdCBiZSBmaXJzdCEgKi8KIAl1OCBudnNbV0wxMjcxX0lOSV9OVlNfU0VDVElPTl9TSVpFXTsKIAogCS8qIElOSSBzZWN0aW9uICovCkBAIC0xMjAsNCArMTk0LDI0IEBACiAJfSBkeW5fcmFkaW9fcGFyYW1zXzVbV0wxMjcxX0lOSV9GRU1fTU9EVUxFX0NPVU5UXTsKIH0gX19wYWNrZWQ7CiAKK3N0cnVjdCB3bDEyOHhfbnZzX2ZpbGUgeworCS8qIE5WUyBzZWN0aW9uIC0gbXVzdCBiZSBmaXJzdCEgKi8KKwl1OCBudnNbV0wxMjcxX0lOSV9OVlNfU0VDVElPTl9TSVpFXTsKKworCS8qIElOSSBzZWN0aW9uICovCisJc3RydWN0IHdsMTI4eF9pbmlfZ2VuZXJhbF9wYXJhbXMgZ2VuZXJhbF9wYXJhbXM7CisJdTggZmVtX3ZlbmRvcl9hbmRfb3B0aW9uczsKKwlzdHJ1Y3Qgd2wxMjh4X2luaV9iYW5kX3BhcmFtc18yIHN0YXRfcmFkaW9fcGFyYW1zXzI7CisJdTggcGFkZGluZzI7CisJc3RydWN0IHsKKwkJc3RydWN0IHdsMTI4eF9pbmlfZmVtX3BhcmFtc18yIHBhcmFtczsKKwkJdTggcGFkZGluZzsKKwl9IGR5bl9yYWRpb19wYXJhbXNfMltXTDEyNzFfSU5JX0ZFTV9NT0RVTEVfQ09VTlRdOworCXN0cnVjdCB3bDEyOHhfaW5pX2JhbmRfcGFyYW1zXzUgc3RhdF9yYWRpb19wYXJhbXNfNTsKKwl1OCBwYWRkaW5nMzsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3Qgd2wxMjh4X2luaV9mZW1fcGFyYW1zXzUgcGFyYW1zOworCQl1OCBwYWRkaW5nOworCX0gZHluX3JhZGlvX3BhcmFtc181W1dMMTI3MV9JTklfRkVNX01PRFVMRV9DT1VOVF07Cit9IF9fcGFja2VkOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvaW5pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2luaXQuYwppbmRleCA2MDcyZmU0Li5hOGY0ZjE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvaW5pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9pbml0LmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJjbWQuaCIKICNpbmNsdWRlICJyZWcuaCIKICNpbmNsdWRlICJ0eC5oIgorI2luY2x1ZGUgImlvLmgiCiAKIGludCB3bDEyNzFfc3RhX2luaXRfdGVtcGxhdGVzX2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKQEAgLTI1Nyw3ICsyNTgsNyBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gd2wxMjcxX2FjeF9ydHNfdGhyZXNob2xkKHdsLCB3bC0+Y29uZi5yeC5ydHNfdGhyZXNob2xkKTsKKwlyZXQgPSB3bDEyNzFfYWN4X3J0c190aHJlc2hvbGQod2wsIHdsLT5ody0+d2lwaHktPnJ0c190aHJlc2hvbGQpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0yODQsNyArMjg1LDEwIEBACiB7CiAJaW50IHJldDsKIAotCXJldCA9IHdsMTI3MV9hY3hfc2dfY2ZnKHdsKTsKKwlpZiAod2wtPmJzc190eXBlID09IEJTU19UWVBFX0FQX0JTUykKKwkJcmV0ID0gd2wxMjcxX2FjeF9hcF9zZ19jZmcod2wpOworCWVsc2UKKwkJcmV0ID0gd2wxMjcxX2FjeF9zdGFfc2dfY2ZnKHdsKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMzIxLDkgKzMyNSwxMSBAQAogewogCWludCByZXQ7CiAKLQlyZXQgPSB3bDEyNzFfY21kX2V4dF9yYWRpb19wYXJtcyh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7CisJaWYgKHdsLT5jaGlwLmlkICE9IENISVBfSURfMTI4M19QRzIwKSB7CisJCXJldCA9IHdsMTI3MV9jbWRfZXh0X3JhZGlvX3Bhcm1zKHdsKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KIAogCS8qIFBTIGNvbmZpZyAqLwogCXJldCA9IHdsMTI3MV9hY3hfY29uZmlnX3BzKHdsKTsKQEAgLTM0OCw4ICszNTQsOCBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JLyogQmx1ZXRvb3RoIFdMQU4gY29leGlzdGVuY2UgKi8KLQlyZXQgPSB3bDEyNzFfaW5pdF9wdGEod2wpOworCS8qIEZNIFdMQU4gY29leGlzdGVuY2UgKi8KKwlyZXQgPSB3bDEyNzFfYWN4X2ZtX2NvZXgod2wpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC00MDcsNyArNDEzLDcgQEAKIAogc3RhdGljIGludCB3bDEyNzFfYXBfaHdfaW5pdChzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKLQlpbnQgcmV0LCBpOworCWludCByZXQ7CiAKIAlyZXQgPSB3bDEyNzFfYXBfaW5pdF90ZW1wbGF0ZXNfY29uZmlnKHdsKTsKIAlpZiAocmV0IDwgMCkKQEAgLTQxOCwyMyArNDI0LDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCS8qIENvbmZpZ3VyZSBpbml0aWFsIFRYIHJhdGUgY2xhc3NlcyAqLwotCWZvciAoaSA9IDA7IGkgPCB3bC0+Y29uZi50eC5hY19jb25mX2NvdW50OyBpKyspIHsKLQkJcmV0ID0gd2wxMjcxX2FjeF9hcF9yYXRlX3BvbGljeSh3bCwKLQkJCQkmd2wtPmNvbmYudHguYXBfcmNfY29uZltpXSwgaSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXQgPSB3bDEyNzFfYWN4X2FwX3JhdGVfcG9saWN5KHdsLAotCQkJCQkmd2wtPmNvbmYudHguYXBfbWdtdF9jb25mLAotCQkJCQlBQ1hfVFhfQVBfTU9ERV9NR01UX1JBVEUpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gd2wxMjcxX2FjeF9hcF9yYXRlX3BvbGljeSh3bCwKLQkJCQkJJndsLT5jb25mLnR4LmFwX2Jjc3RfY29uZiwKLQkJCQkJQUNYX1RYX0FQX01PREVfQkNTVF9SQVRFKTsKKwlyZXQgPSB3bDEyNzFfaW5pdF9hcF9yYXRlcyh3bCk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTQ0OSw3ICs0MzksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHdsMTI3MV9hcF9od19pbml0X3Bvc3RfbWVtKHN0cnVjdCB3bDEyNzEgKndsKQoraW50IHdsMTI3MV9hcF9pbml0X3RlbXBsYXRlcyhzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKIAlpbnQgcmV0OwogCkBAIC00NjUsNiArNDU1LDcwIEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKKwkvKgorCSAqIHdoZW4gb3BlcmF0aW5nIGFzIEFQIHdlIHdhbnQgdG8gcmVjZWl2ZSBleHRlcm5hbCBiZWFjb25zIGZvcgorCSAqIGNvbmZpZ3VyaW5nIEVSUCBwcm90ZWN0aW9uLgorCSAqLworCXJldCA9IHdsMTI3MV9hY3hfc2V0X2FwX2JlYWNvbl9maWx0ZXIod2wsIGZhbHNlKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdsMTI3MV9hcF9od19pbml0X3Bvc3RfbWVtKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXJldHVybiB3bDEyNzFfYXBfaW5pdF90ZW1wbGF0ZXMod2wpOworfQorCitpbnQgd2wxMjcxX2luaXRfYXBfcmF0ZXMoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJaW50IGksIHJldDsKKwlzdHJ1Y3QgY29uZl90eF9yYXRlX2NsYXNzIHJjOworCXUzMiBzdXBwb3J0ZWRfcmF0ZXM7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQVAsICJBUCBiYXNpYyByYXRlIHNldDogMHgleCIsIHdsLT5iYXNpY19yYXRlX3NldCk7CisKKwlpZiAod2wtPmJhc2ljX3JhdGVfc2V0ID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmMuZW5hYmxlZF9yYXRlcyA9IHdsLT5iYXNpY19yYXRlX3NldDsKKwlyYy5sb25nX3JldHJ5X2xpbWl0ID0gMTA7CisJcmMuc2hvcnRfcmV0cnlfbGltaXQgPSAxMDsKKwlyYy5hZmxhZ3MgPSAwOworCXJldCA9IHdsMTI3MV9hY3hfYXBfcmF0ZV9wb2xpY3kod2wsICZyYywgQUNYX1RYX0FQX01PREVfTUdNVF9SQVRFKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHVzZSB0aGUgbWluIGJhc2ljIHJhdGUgZm9yIEFQIGJyb2FkY2FzdC9tdWx0aWNhc3QgKi8KKwlyYy5lbmFibGVkX3JhdGVzID0gd2wxMjcxX3R4X21pbl9yYXRlX2dldCh3bCk7CisJcmMuc2hvcnRfcmV0cnlfbGltaXQgPSAxMDsKKwlyYy5sb25nX3JldHJ5X2xpbWl0ID0gMTA7CisJcmMuYWZsYWdzID0gMDsKKwlyZXQgPSB3bDEyNzFfYWN4X2FwX3JhdGVfcG9saWN5KHdsLCAmcmMsIEFDWF9UWF9BUF9NT0RFX0JDU1RfUkFURSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIElmIHRoZSBiYXNpYyByYXRlcyBjb250YWluIE9GRE0gcmF0ZXMsIHVzZSBPRkRNIG9ubHkKKwkgKiByYXRlcyBmb3IgdW5pY2FzdCBUWCBhcyB3ZWxsLiBFbHNlIHVzZSBhbGwgc3VwcG9ydGVkIHJhdGVzLgorCSAqLworCWlmICgod2wtPmJhc2ljX3JhdGVfc2V0ICYgQ09ORl9UWF9PRkRNX1JBVEVTKSkKKwkJc3VwcG9ydGVkX3JhdGVzID0gQ09ORl9UWF9PRkRNX1JBVEVTOworCWVsc2UKKwkJc3VwcG9ydGVkX3JhdGVzID0gQ09ORl9UWF9BUF9FTkFCTEVEX1JBVEVTOworCisJLyogY29uZmlndXJlIHVuaWNhc3QgVFggcmF0ZSBjbGFzc2VzICovCisJZm9yIChpID0gMDsgaSA8IHdsLT5jb25mLnR4LmFjX2NvbmZfY291bnQ7IGkrKykgeworCQlyYy5lbmFibGVkX3JhdGVzID0gc3VwcG9ydGVkX3JhdGVzOworCQlyYy5zaG9ydF9yZXRyeV9saW1pdCA9IDEwOworCQlyYy5sb25nX3JldHJ5X2xpbWl0ID0gMTA7CisJCXJjLmFmbGFncyA9IDA7CisJCXJldCA9IHdsMTI3MV9hY3hfYXBfcmF0ZV9wb2xpY3kod2wsICZyYywgaSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTA0LDYgKzU1OCwyNyBAQAogCXJldHVybiByZXQ7CiB9CiAKK2ludCB3bDEyNzFfY2hpcF9zcGVjaWZpY19pbml0KHN0cnVjdCB3bDEyNzEgKndsKQoreworCWludCByZXQgPSAwOworCisJaWYgKHdsLT5jaGlwLmlkID09IENISVBfSURfMTI4M19QRzIwKSB7CisJCXUzMiBob3N0X2NmZ19iaXRtYXAgPSBIT1NUX0lGX0NGR19SWF9GSUZPX0VOQUJMRTsKKworCQlpZiAod2wtPnF1aXJrcyAmIFdMMTJYWF9RVUlSS19CTE9DS1NJWkVfQUxJR05NRU5UKQorCQkJLyogRW5hYmxlIFNESU8gcGFkZGluZyAqLworCQkJaG9zdF9jZmdfYml0bWFwIHw9IEhPU1RfSUZfQ0ZHX1RYX1BBRF9UT19TRElPX0JMSzsKKworCQkvKiBNdXN0IGJlIGJlZm9yZSB3bDEyNzFfYWN4X2luaXRfbWVtX2NvbmZpZygpICovCisJCXJldCA9IHdsMTI3MV9hY3hfaG9zdF9pZl9jZmdfYml0bWFwKHdsLCBob3N0X2NmZ19iaXRtYXApOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorCisKIGludCB3bDEyNzFfaHdfaW5pdChzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKIAlzdHJ1Y3QgY29uZl90eF9hY19jYXRlZ29yeSAqY29uZl9hYzsKQEAgLTUxMSwxMSArNTg2LDIyIEBACiAJaW50IHJldCwgaTsKIAlib29sIGlzX2FwID0gKHdsLT5ic3NfdHlwZSA9PSBCU1NfVFlQRV9BUF9CU1MpOwogCi0JcmV0ID0gd2wxMjcxX2NtZF9nZW5lcmFsX3Bhcm1zKHdsKTsKKwlpZiAod2wtPmNoaXAuaWQgPT0gQ0hJUF9JRF8xMjgzX1BHMjApCisJCXJldCA9IHdsMTI4eF9jbWRfZ2VuZXJhbF9wYXJtcyh3bCk7CisJZWxzZQorCQlyZXQgPSB3bDEyNzFfY21kX2dlbmVyYWxfcGFybXMod2wpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gd2wxMjcxX2NtZF9yYWRpb19wYXJtcyh3bCk7CisJaWYgKHdsLT5jaGlwLmlkID09IENISVBfSURfMTI4M19QRzIwKQorCQlyZXQgPSB3bDEyOHhfY21kX3JhZGlvX3Bhcm1zKHdsKTsKKwllbHNlCisJCXJldCA9IHdsMTI3MV9jbWRfcmFkaW9fcGFybXMod2wpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogQ2hpcC1zcGVjaWZpYyBpbml0ICovCisJcmV0ID0gd2wxMjcxX2NoaXBfc3BlY2lmaWNfaW5pdCh3bCk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTUyOCw2ICs2MTQsMTEgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAorCS8qIEJsdWV0b290aCBXTEFOIGNvZXhpc3RlbmNlICovCisJcmV0ID0gd2wxMjcxX2luaXRfcHRhKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwogCS8qIERlZmF1bHQgbWVtb3J5IGNvbmZpZ3VyYXRpb24gKi8KIAlyZXQgPSB3bDEyNzFfYWN4X2luaXRfbWVtX2NvbmZpZyh3bCk7CiAJaWYgKHJldCA8IDApCkBAIC01NjcsNyArNjU4LDcgQEAKIAkJZ290byBvdXRfZnJlZV9tZW1tYXA7CiAKIAkvKiBEZWZhdWx0IGZyYWdtZW50YXRpb24gdGhyZXNob2xkICovCi0JcmV0ID0gd2wxMjcxX2FjeF9mcmFnX3RocmVzaG9sZCh3bCwgd2wtPmNvbmYudHguZnJhZ190aHJlc2hvbGQpOworCXJldCA9IHdsMTI3MV9hY3hfZnJhZ190aHJlc2hvbGQod2wsIHdsLT5ody0+d2lwaHktPmZyYWdfdGhyZXNob2xkKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXRfZnJlZV9tZW1tYXA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9pbml0LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvaW5pdC5oCmluZGV4IDNhOGJkM2YuLjNhM2MyMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9pbml0LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2luaXQuaApAQCAtMzEsNiArMzEsOSBAQAogaW50IHdsMTI3MV9pbml0X3BoeV9jb25maWcoc3RydWN0IHdsMTI3MSAqd2wpOwogaW50IHdsMTI3MV9pbml0X3B0YShzdHJ1Y3Qgd2wxMjcxICp3bCk7CiBpbnQgd2wxMjcxX2luaXRfZW5lcmd5X2RldGVjdGlvbihzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2NoaXBfc3BlY2lmaWNfaW5pdChzdHJ1Y3Qgd2wxMjcxICp3bCk7CiBpbnQgd2wxMjcxX2h3X2luaXQoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9pbml0X2FwX3JhdGVzKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfYXBfaW5pdF90ZW1wbGF0ZXMoc3RydWN0IHdsMTI3MSAqd2wpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9pby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2lvLmMKaW5kZXggZDU1N2Y3My4uZGE1YzFhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2lvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2lvLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJ3bDEyeHguaCIKICNpbmNsdWRlICJ3bDEyeHhfODAyMTEuaCIKICNpbmNsdWRlICJpby5oIgorI2luY2x1ZGUgInR4LmgiCiAKICNkZWZpbmUgT0NQX0NNRF9MT09QICAzMgogCkBAIC00Myw2ICs0NCwxNiBAQAogI2RlZmluZSBPQ1BfU1RBVFVTX1JFUV9GQUlMRUQgMHgyMDAwMAogI2RlZmluZSBPQ1BfU1RBVFVTX1JFU1BfRVJST1IgMHgzMDAwMAogCitib29sIHdsMTI3MV9zZXRfYmxvY2tfc2l6ZShzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpZiAod2wtPmlmX29wcy0+c2V0X2Jsb2NrX3NpemUpIHsKKwkJd2wtPmlmX29wcy0+c2V0X2Jsb2NrX3NpemUod2wsIFdMMTJYWF9CVVNfQkxPQ0tfU0laRSk7CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKwogdm9pZCB3bDEyNzFfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCB3bDEyNzEgKndsKQogewogCXdsLT5pZl9vcHMtPmRpc2FibGVfaXJxKHdsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9pby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2lvLmgKaW5kZXggMDBjNzcxZS4uYmVlZDYyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2lvLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2lvLmgKQEAgLTE2OSw1ICsxNjksOCBAQAogc3RydWN0IGllZWU4MDIxMV9odyAqd2wxMjcxX2FsbG9jX2h3KHZvaWQpOwogaW50IHdsMTI3MV9mcmVlX2h3KHN0cnVjdCB3bDEyNzEgKndsKTsKIGlycXJldHVybl90IHdsMTI3MV9pcnEoaW50IGlycSwgdm9pZCAqZGF0YSk7Citib29sIHdsMTI3MV9zZXRfYmxvY2tfc2l6ZShzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX3R4X2R1bW15X3BhY2tldChzdHJ1Y3Qgd2wxMjcxICp3bCk7Cit2b2lkIHdsMTI3MV9jb25maWd1cmVfZmlsdGVycyhzdHJ1Y3Qgd2wxMjcxICp3bCwgdW5zaWduZWQgaW50IGZpbHRlcnMpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvbWFpbi5jCmluZGV4IDhiM2M4ZDEuLmJjMDBlNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L21haW4uYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvd2wxMnh4Lmg+CiAKICNpbmNsdWRlICJ3bDEyeHguaCIKICNpbmNsdWRlICJ3bDEyeHhfODAyMTEuaCIKQEAgLTUwLDExICs1MSwxMSBAQAogCiBzdGF0aWMgc3RydWN0IGNvbmZfZHJ2X3NldHRpbmdzIGRlZmF1bHRfY29uZiA9IHsKIAkuc2cgPSB7Ci0JCS5wYXJhbXMgPSB7CisJCS5zdGFfcGFyYW1zID0gewogCQkJW0NPTkZfU0dfQlRfUEVSX1RIUkVTSE9MRF0gICAgICAgICAgICAgICAgICA9IDc1MDAsCiAJCQlbQ09ORl9TR19IVjNfTUFYX09WRVJSSURFXSAgICAgICAgICAgICAgICAgID0gMCwKIAkJCVtDT05GX1NHX0JUX05GU19TQU1QTEVfSU5URVJWQUxdICAgICAgICAgICAgPSA0MDAsCi0JCQlbQ09ORl9TR19CVF9MT0FEX1JBVElPXSAgICAgICAgICAgICAgICAgICAgID0gNTAsCisJCQlbQ09ORl9TR19CVF9MT0FEX1JBVElPXSAgICAgICAgICAgICAgICAgICAgID0gMjAwLAogCQkJW0NPTkZfU0dfQVVUT19QU19NT0RFXSAgICAgICAgICAgICAgICAgICAgICA9IDEsCiAJCQlbQ09ORl9TR19BVVRPX1NDQU5fUFJPQkVfUkVRXSAgICAgICAgICAgICAgID0gMTcwLAogCQkJW0NPTkZfU0dfQUNUSVZFX1NDQU5fRFVSQVRJT05fRkFDVE9SX0hWM10gICA9IDUwLApAQCAtMTAwLDYgKzEwMSw2MSBAQAogCQkJW0NPTkZfU0dfREhDUF9USU1FXSAgICAgICAgICAgICAgICAgICAgICAgICA9IDUwMDAsCiAJCQlbQ09ORl9TR19BQ1RJVkVfU0NBTl9EVVJBVElPTl9GQUNUT1JfQTJEUF0gID0gMTAwLAogCQl9LAorCQkuYXBfcGFyYW1zID0geworCQkJW0NPTkZfU0dfQlRfUEVSX1RIUkVTSE9MRF0gICAgICAgICAgICAgICAgICA9IDc1MDAsCisJCQlbQ09ORl9TR19IVjNfTUFYX09WRVJSSURFXSAgICAgICAgICAgICAgICAgID0gMCwKKwkJCVtDT05GX1NHX0JUX05GU19TQU1QTEVfSU5URVJWQUxdICAgICAgICAgICAgPSA0MDAsCisJCQlbQ09ORl9TR19CVF9MT0FEX1JBVElPXSAgICAgICAgICAgICAgICAgICAgID0gNTAsCisJCQlbQ09ORl9TR19BVVRPX1BTX01PREVdICAgICAgICAgICAgICAgICAgICAgID0gMSwKKwkJCVtDT05GX1NHX0FVVE9fU0NBTl9QUk9CRV9SRVFdICAgICAgICAgICAgICAgPSAxNzAsCisJCQlbQ09ORl9TR19BQ1RJVkVfU0NBTl9EVVJBVElPTl9GQUNUT1JfSFYzXSAgID0gNTAsCisJCQlbQ09ORl9TR19BTlRFTk5BX0NPTkZJR1VSQVRJT05dICAgICAgICAgICAgID0gMCwKKwkJCVtDT05GX1NHX0JFQUNPTl9NSVNTX1BFUkNFTlRdICAgICAgICAgICAgICAgPSA2MCwKKwkJCVtDT05GX1NHX1JBVEVfQURBUFRfVEhSRVNIXSAgICAgICAgICAgICAgICAgPSA2NCwKKwkJCVtDT05GX1NHX1JBVEVfQURBUFRfU05SXSAgICAgICAgICAgICAgICAgICAgPSAxLAorCQkJW0NPTkZfU0dfV0xBTl9QU19CVF9BQ0xfTUFTVEVSX01JTl9CUl0gICAgICA9IDEwLAorCQkJW0NPTkZfU0dfV0xBTl9QU19CVF9BQ0xfTUFTVEVSX01BWF9CUl0gICAgICA9IDI1LAorCQkJW0NPTkZfU0dfV0xBTl9QU19NQVhfQlRfQUNMX01BU1RFUl9CUl0gICAgICA9IDI1LAorCQkJW0NPTkZfU0dfV0xBTl9QU19CVF9BQ0xfU0xBVkVfTUlOX0JSXSAgICAgICA9IDIwLAorCQkJW0NPTkZfU0dfV0xBTl9QU19CVF9BQ0xfU0xBVkVfTUFYX0JSXSAgICAgICA9IDI1LAorCQkJW0NPTkZfU0dfV0xBTl9QU19NQVhfQlRfQUNMX1NMQVZFX0JSXSAgICAgICA9IDI1LAorCQkJW0NPTkZfU0dfV0xBTl9QU19CVF9BQ0xfTUFTVEVSX01JTl9FRFJdICAgICA9IDcsCisJCQlbQ09ORl9TR19XTEFOX1BTX0JUX0FDTF9NQVNURVJfTUFYX0VEUl0gICAgID0gMjUsCisJCQlbQ09ORl9TR19XTEFOX1BTX01BWF9CVF9BQ0xfTUFTVEVSX0VEUl0gICAgID0gMjUsCisJCQlbQ09ORl9TR19XTEFOX1BTX0JUX0FDTF9TTEFWRV9NSU5fRURSXSAgICAgID0gOCwKKwkJCVtDT05GX1NHX1dMQU5fUFNfQlRfQUNMX1NMQVZFX01BWF9FRFJdICAgICAgPSAyNSwKKwkJCVtDT05GX1NHX1dMQU5fUFNfTUFYX0JUX0FDTF9TTEFWRV9FRFJdICAgICAgPSAyNSwKKwkJCVtDT05GX1NHX1JYVF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxMjAwLAorCQkJW0NPTkZfU0dfVFhUXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEwMDAsCisJCQlbQ09ORl9TR19BREFQVElWRV9SWFRfVFhUXSAgICAgICAgICAgICAgICAgID0gMSwKKwkJCVtDT05GX1NHX1BTX1BPTExfVElNRU9VVF0gICAgICAgICAgICAgICAgICAgPSAxMCwKKwkJCVtDT05GX1NHX1VQU0RfVElNRU9VVF0gICAgICAgICAgICAgICAgICAgICAgPSAxMCwKKwkJCVtDT05GX1NHX1dMQU5fQUNUSVZFX0JUX0FDTF9NQVNURVJfTUlOX0VEUl0gPSA3LAorCQkJW0NPTkZfU0dfV0xBTl9BQ1RJVkVfQlRfQUNMX01BU1RFUl9NQVhfRURSXSA9IDE1LAorCQkJW0NPTkZfU0dfV0xBTl9BQ1RJVkVfTUFYX0JUX0FDTF9NQVNURVJfRURSXSA9IDE1LAorCQkJW0NPTkZfU0dfV0xBTl9BQ1RJVkVfQlRfQUNMX1NMQVZFX01JTl9FRFJdICA9IDgsCisJCQlbQ09ORl9TR19XTEFOX0FDVElWRV9CVF9BQ0xfU0xBVkVfTUFYX0VEUl0gID0gMjAsCisJCQlbQ09ORl9TR19XTEFOX0FDVElWRV9NQVhfQlRfQUNMX1NMQVZFX0VEUl0gID0gMTUsCisJCQlbQ09ORl9TR19XTEFOX0FDVElWRV9CVF9BQ0xfTUlOX0JSXSAgICAgICAgID0gMjAsCisJCQlbQ09ORl9TR19XTEFOX0FDVElWRV9CVF9BQ0xfTUFYX0JSXSAgICAgICAgID0gNTAsCisJCQlbQ09ORl9TR19XTEFOX0FDVElWRV9NQVhfQlRfQUNMX0JSXSAgICAgICAgID0gMTAsCisJCQlbQ09ORl9TR19QQVNTSVZFX1NDQU5fRFVSQVRJT05fRkFDVE9SX0hWM10gID0gMjAwLAorCQkJW0NPTkZfU0dfUEFTU0lWRV9TQ0FOX0RVUkFUSU9OX0ZBQ1RPUl9BMkRQXSA9IDgwMCwKKwkJCVtDT05GX1NHX1BBU1NJVkVfU0NBTl9BMkRQX0JUX1RJTUVdICAgICAgICAgPSA3NSwKKwkJCVtDT05GX1NHX1BBU1NJVkVfU0NBTl9BMkRQX1dMQU5fVElNRV0gICAgICAgPSAxNSwKKwkJCVtDT05GX1NHX0hWM19NQVhfU0VSVkVEXSAgICAgICAgICAgICAgICAgICAgPSA2LAorCQkJW0NPTkZfU0dfREhDUF9USU1FXSAgICAgICAgICAgICAgICAgICAgICAgICA9IDUwMDAsCisJCQlbQ09ORl9TR19BQ1RJVkVfU0NBTl9EVVJBVElPTl9GQUNUT1JfQTJEUF0gID0gMTAwLAorCQkJW0NPTkZfU0dfVEVNUF9QQVJBTV8xXSAgICAgICAgICAgICAgICAgICAgICA9IDAsCisJCQlbQ09ORl9TR19URU1QX1BBUkFNXzJdICAgICAgICAgICAgICAgICAgICAgID0gMCwKKwkJCVtDT05GX1NHX1RFTVBfUEFSQU1fM10gICAgICAgICAgICAgICAgICAgICAgPSAwLAorCQkJW0NPTkZfU0dfVEVNUF9QQVJBTV80XSAgICAgICAgICAgICAgICAgICAgICA9IDAsCisJCQlbQ09ORl9TR19URU1QX1BBUkFNXzVdICAgICAgICAgICAgICAgICAgICAgID0gMCwKKwkJCVtDT05GX1NHX0FQX0JFQUNPTl9NSVNTX1RYXSAgICAgICAgICAgICAgICAgPSAzLAorCQkJW0NPTkZfU0dfUlhfV0lORE9XX0xFTkdUSF0gICAgICAgICAgICAgICAgICA9IDYsCisJCQlbQ09ORl9TR19BUF9DT05ORUNUSU9OX1BST1RFQ1RJT05fVElNRV0gICAgID0gNTAsCisJCQlbQ09ORl9TR19URU1QX1BBUkFNXzZdICAgICAgICAgICAgICAgICAgICAgID0gMSwKKwkJfSwKIAkJLnN0YXRlID0gQ09ORl9TR19QUk9URUNUSVZFLAogCX0sCiAJLnJ4ID0gewpAQCAtMTA3LDcgKzE2Myw3IEBACiAJCS5wYWNrZXRfZGV0ZWN0aW9uX3RocmVzaG9sZCAgPSAwLAogCQkucHNfcG9sbF90aW1lb3V0ICAgICAgICAgICAgID0gMTUsCiAJCS51cHNkX3RpbWVvdXQgICAgICAgICAgICAgICAgPSAxNSwKLQkJLnJ0c190aHJlc2hvbGQgICAgICAgICAgICAgICA9IDIzNDcsCisJCS5ydHNfdGhyZXNob2xkICAgICAgICAgICAgICAgPSBJRUVFODAyMTFfTUFYX1JUU19USFJFU0hPTEQsCiAJCS5yeF9jY2FfdGhyZXNob2xkICAgICAgICAgICAgPSAwLAogCQkuaXJxX2Jsa190aHJlc2hvbGQgICAgICAgICAgID0gMHhGRkZGLAogCQkuaXJxX3BrdF90aHJlc2hvbGQgICAgICAgICAgID0gMCwKQEAgLTE1Myw0NCArMjA5LDYgQEAKIAkJCQkudHhfb3BfbGltaXQgPSAxNTA0LAogCQkJfSwKIAkJfSwKLQkJLmFwX3JjX2NvbmYgICAgICAgICAgICAgICAgICA9IHsKLQkJCVswXSA9IHsKLQkJCQkuZW5hYmxlZF9yYXRlcyA9IENPTkZfVFhfQVBfRU5BQkxFRF9SQVRFUywKLQkJCQkuc2hvcnRfcmV0cnlfbGltaXQgPSAxMCwKLQkJCQkubG9uZ19yZXRyeV9saW1pdCA9IDEwLAotCQkJCS5hZmxhZ3MgICAgICA9IDAsCi0JCQl9LAotCQkJWzFdID0gewotCQkJCS5lbmFibGVkX3JhdGVzID0gQ09ORl9UWF9BUF9FTkFCTEVEX1JBVEVTLAotCQkJCS5zaG9ydF9yZXRyeV9saW1pdCA9IDEwLAotCQkJCS5sb25nX3JldHJ5X2xpbWl0ID0gMTAsCi0JCQkJLmFmbGFncyAgICAgID0gMCwKLQkJCX0sCi0JCQlbMl0gPSB7Ci0JCQkJLmVuYWJsZWRfcmF0ZXMgPSBDT05GX1RYX0FQX0VOQUJMRURfUkFURVMsCi0JCQkJLnNob3J0X3JldHJ5X2xpbWl0ID0gMTAsCi0JCQkJLmxvbmdfcmV0cnlfbGltaXQgPSAxMCwKLQkJCQkuYWZsYWdzICAgICAgPSAwLAotCQkJfSwKLQkJCVszXSA9IHsKLQkJCQkuZW5hYmxlZF9yYXRlcyA9IENPTkZfVFhfQVBfRU5BQkxFRF9SQVRFUywKLQkJCQkuc2hvcnRfcmV0cnlfbGltaXQgPSAxMCwKLQkJCQkubG9uZ19yZXRyeV9saW1pdCA9IDEwLAotCQkJCS5hZmxhZ3MgICAgICA9IDAsCi0JCQl9LAotCQl9LAotCQkuYXBfbWdtdF9jb25mID0gewotCQkJLmVuYWJsZWRfcmF0ZXMgICAgICAgPSBDT05GX1RYX0FQX0RFRkFVTFRfTUdNVF9SQVRFUywKLQkJCS5zaG9ydF9yZXRyeV9saW1pdCAgID0gMTAsCi0JCQkubG9uZ19yZXRyeV9saW1pdCAgICA9IDEwLAotCQkJLmFmbGFncyAgICAgICAgICAgICAgPSAwLAotCQl9LAotCQkuYXBfYmNzdF9jb25mID0gewotCQkJLmVuYWJsZWRfcmF0ZXMgICAgICAgPSBDT05GX0hXX0JJVF9SQVRFXzFNQlBTLAotCQkJLnNob3J0X3JldHJ5X2xpbWl0ICAgPSAxMCwKLQkJCS5sb25nX3JldHJ5X2xpbWl0ICAgID0gMTAsCi0JCQkuYWZsYWdzICAgICAgICAgICAgICA9IDAsCi0JCX0sCiAJCS5hcF9tYXhfdHhfcmV0cmllcyA9IDEwMCwKIAkJLnRpZF9jb25mX2NvdW50ID0gNCwKIAkJLnRpZF9jb25mID0gewpAQCAtMjM5LDEyICsyNTcsMTYgQEAKIAkJLndha2VfdXBfZXZlbnQgICAgICAgICAgICAgICA9IENPTkZfV0FLRV9VUF9FVkVOVF9EVElNLAogCQkubGlzdGVuX2ludGVydmFsICAgICAgICAgICAgID0gMSwKIAkJLmJjbl9maWx0X21vZGUgICAgICAgICAgICAgICA9IENPTkZfQkNOX0ZJTFRfTU9ERV9FTkFCTEVELAotCQkuYmNuX2ZpbHRfaWVfY291bnQgICAgICAgICAgID0gMSwKKwkJLmJjbl9maWx0X2llX2NvdW50ICAgICAgICAgICA9IDIsCiAJCS5iY25fZmlsdF9pZSA9IHsKIAkJCVswXSA9IHsKIAkJCQkuaWUgICAgICAgICAgPSBXTEFOX0VJRF9DSEFOTkVMX1NXSVRDSCwKIAkJCQkucnVsZSAgICAgICAgPSBDT05GX0JDTl9SVUxFX1BBU1NfT05fQVBQRUFSQU5DRSwKLQkJCX0KKwkJCX0sCisJCQlbMV0gPSB7CisJCQkJLmllICAgICAgICAgID0gV0xBTl9FSURfSFRfSU5GT1JNQVRJT04sCisJCQkJLnJ1bGUgICAgICAgID0gQ09ORl9CQ05fUlVMRV9QQVNTX09OX0NIQU5HRSwKKwkJCX0sCiAJCX0sCiAJCS5zeW5jaF9mYWlsX3Rob2xkICAgICAgICAgICAgPSAxMCwKIAkJLmJzc19sb3NlX3RpbWVvdXQgICAgICAgICAgICA9IDEwMCwKQEAgLTI1NCw5ICsyNzYsOSBAQAogCQkucHNfcG9sbF90aHJlc2hvbGQgICAgICAgICAgID0gMTAsCiAJCS5wc19wb2xsX3JlY292ZXJ5X3BlcmlvZCAgICAgPSA3MDAsCiAJCS5iZXRfZW5hYmxlICAgICAgICAgICAgICAgICAgPSBDT05GX0JFVF9NT0RFX0VOQUJMRSwKLQkJLmJldF9tYXhfY29uc2VjdXRpdmUgICAgICAgICA9IDEwLAorCQkuYmV0X21heF9jb25zZWN1dGl2ZSAgICAgICAgID0gNTAsCiAJCS5wc21fZW50cnlfcmV0cmllcyAgICAgICAgICAgPSA1LAotCQkucHNtX2V4aXRfcmV0cmllcyAgICAgICAgICAgID0gMjU1LAorCQkucHNtX2V4aXRfcmV0cmllcyAgICAgICAgICAgID0gMTYsCiAJCS5wc21fZW50cnlfbnVsbGZ1bmNfcmV0cmllcyAgPSAzLAogCQkucHNtX2VudHJ5X2hhbmdvdmVyX3BlcmlvZCAgID0gMSwKIAkJLmtlZXBfYWxpdmVfaW50ZXJ2YWwgICAgICAgICA9IDU1MDAwLApAQCAtMjg0LDYgKzMwNiwxNSBAQAogCQkubWF4X2R3ZWxsX3RpbWVfcGFzc2l2ZSAgICAgICA9IDEwMDAwMCwKIAkJLm51bV9wcm9iZV9yZXFzICAgICAgICAgICAgICAgPSAyLAogCX0sCisJLnNjaGVkX3NjYW4gPSB7CisJCS8qIHNjaGVkX3NjYW4gcmVxdWlyZXMgZHdlbGwgdGltZXMgaW4gVFUgaW5zdGVhZCBvZiBUVS8xMDAwICovCisJCS5taW5fZHdlbGxfdGltZV9hY3RpdmUgPSA4LAorCQkubWF4X2R3ZWxsX3RpbWVfYWN0aXZlID0gMzAsCisJCS5kd2VsbF90aW1lX3Bhc3NpdmUgICAgPSAxMDAsCisJCS5udW1fcHJvYmVfcmVxcyAgICAgICAgPSAyLAorCQkucnNzaV90aHJlc2hvbGQgICAgICAgID0gLTkwLAorCQkuc25yX3RocmVzaG9sZCAgICAgICAgID0gMCwKKwl9LAogCS5yZiA9IHsKIAkJLnR4X3Blcl9jaGFubmVsX3Bvd2VyX2NvbXBlbnNhdGlvbl8yID0gewogCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKQEAgLTI5OCwxOSArMzI5LDQzIEBACiAJCS50eF9iYV93aW5fc2l6ZSA9IDY0LAogCQkuaW5hY3Rpdml0eV90aW1lb3V0ID0gMTAwMDAsCiAJfSwKLQkubWVtID0geworCS5tZW1fd2wxMjd4ID0gewogCQkubnVtX3N0YXRpb25zICAgICAgICAgICAgICAgICA9IDEsCiAJCS5zc2lkX3Byb2ZpbGVzICAgICAgICAgICAgICAgID0gMSwKIAkJLnJ4X2Jsb2NrX251bSAgICAgICAgICAgICAgICAgPSA3MCwKIAkJLnR4X21pbl9ibG9ja19udW0gICAgICAgICAgICAgPSA0MCwKLQkJLmR5bmFtaWNfbWVtb3J5ICAgICAgICAgICAgICAgPSAwLAorCQkuZHluYW1pY19tZW1vcnkgICAgICAgICAgICAgICA9IDEsCiAJCS5taW5fcmVxX3R4X2Jsb2NrcyAgICAgICAgICAgID0gMTAwLAogCQkubWluX3JlcV9yeF9ibG9ja3MgICAgICAgICAgICA9IDIyLAogCQkudHhfbWluICAgICAgICAgICAgICAgICAgICAgICA9IDI3LAotCX0KKwl9LAorCS5tZW1fd2wxMjh4ID0geworCQkubnVtX3N0YXRpb25zICAgICAgICAgICAgICAgICA9IDEsCisJCS5zc2lkX3Byb2ZpbGVzICAgICAgICAgICAgICAgID0gMSwKKwkJLnJ4X2Jsb2NrX251bSAgICAgICAgICAgICAgICAgPSA0MCwKKwkJLnR4X21pbl9ibG9ja19udW0gICAgICAgICAgICAgPSA0MCwKKwkJLmR5bmFtaWNfbWVtb3J5ICAgICAgICAgICAgICAgPSAxLAorCQkubWluX3JlcV90eF9ibG9ja3MgICAgICAgICAgICA9IDQ1LAorCQkubWluX3JlcV9yeF9ibG9ja3MgICAgICAgICAgICA9IDIyLAorCQkudHhfbWluICAgICAgICAgICAgICAgICAgICAgICA9IDI3LAorCX0sCisJLmZtX2NvZXggPSB7CisJCS5lbmFibGUgICAgICAgICAgICAgICAgICAgICAgID0gdHJ1ZSwKKwkJLnN3YWxsb3dfcGVyaW9kICAgICAgICAgICAgICAgPSA1LAorCQkubl9kaXZpZGVyX2ZyZWZfc2V0XzEgICAgICAgICA9IDB4ZmYsICAgICAgIC8qIGRlZmF1bHQgKi8KKwkJLm5fZGl2aWRlcl9mcmVmX3NldF8yICAgICAgICAgPSAxMiwKKwkJLm1fZGl2aWRlcl9mcmVmX3NldF8xICAgICAgICAgPSAxNDgsCisJCS5tX2RpdmlkZXJfZnJlZl9zZXRfMiAgICAgICAgID0gMHhmZmZmLCAgICAgLyogZGVmYXVsdCAqLworCQkuY29leF9wbGxfc3RhYmlsaXphdGlvbl90aW1lICA9IDB4ZmZmZmZmZmYsIC8qIGRlZmF1bHQgKi8KKwkJLmxkb19zdGFiaWxpemF0aW9uX3RpbWUgICAgICAgPSAweGZmZmYsICAgICAvKiBkZWZhdWx0ICovCisJCS5mbV9kaXN0dXJiZWRfYmFuZF9tYXJnaW4gICAgID0gMHhmZiwgICAgICAgLyogZGVmYXVsdCAqLworCQkuc3dhbGxvd19jbGtfZGlmZiAgICAgICAgICAgICA9IDB4ZmYsICAgICAgIC8qIGRlZmF1bHQgKi8KKwl9LAorCS5oY2lfaW9fZHMgPSBIQ0lfSU9fRFNfNk1BLAogfTsKIAotc3RhdGljIHZvaWQgX193bDEyNzFfb3BfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3Qgd2wxMjcxICp3bCk7CitzdGF0aWMgdm9pZCBfX3dsMTI3MV9vcF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCB3bDEyNzEgKndsLAorCQkJCQkgYm9vbCByZXNldF90eF9xdWV1ZXMpOwogc3RhdGljIHZvaWQgd2wxMjcxX2ZyZWVfYXBfa2V5cyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CiAKIApAQCAtMzI5LDYgKzM4NCw3IEBACiAJfSwKIH07CiAKK3N0YXRpYyBERUZJTkVfTVVURVgod2xfbGlzdF9tdXRleCk7CiBzdGF0aWMgTElTVF9IRUFEKHdsX2xpc3QpOwogCiBzdGF0aWMgaW50IHdsMTI3MV9kZXZfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbWUsIHVuc2lnbmVkIGxvbmcgd2hhdCwKQEAgLTM1OSwxMCArNDE1LDEyIEBACiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCXdsX3RlbXAgPSBody0+cHJpdjsKKwltdXRleF9sb2NrKCZ3bF9saXN0X211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdsLCAmd2xfbGlzdCwgbGlzdCkgewogCQlpZiAod2wgPT0gd2xfdGVtcCkKIAkJCWJyZWFrOwogCX0KKwltdXRleF91bmxvY2soJndsX2xpc3RfbXV0ZXgpOwogCWlmICh3bCAhPSB3bF90ZW1wKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKQEAgLTQzOCwxNSArNDk2LDMwIEBACiAJc3RydWN0IGNvbmZfdHhfdGlkICpjb25mX3RpZDsKIAlpbnQgcmV0LCBpOwogCi0JcmV0ID0gd2wxMjcxX2NtZF9nZW5lcmFsX3Bhcm1zKHdsKTsKKwlpZiAod2wtPmNoaXAuaWQgPT0gQ0hJUF9JRF8xMjgzX1BHMjApCisJCXJldCA9IHdsMTI4eF9jbWRfZ2VuZXJhbF9wYXJtcyh3bCk7CisJZWxzZQorCQlyZXQgPSB3bDEyNzFfY21kX2dlbmVyYWxfcGFybXMod2wpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gd2wxMjcxX2NtZF9yYWRpb19wYXJtcyh3bCk7CisJaWYgKHdsLT5jaGlwLmlkID09IENISVBfSURfMTI4M19QRzIwKQorCQlyZXQgPSB3bDEyOHhfY21kX3JhZGlvX3Bhcm1zKHdsKTsKKwllbHNlCisJCXJldCA9IHdsMTI3MV9jbWRfcmFkaW9fcGFybXMod2wpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gd2wxMjcxX2NtZF9leHRfcmFkaW9fcGFybXMod2wpOworCWlmICh3bC0+Y2hpcC5pZCAhPSBDSElQX0lEXzEyODNfUEcyMCkgeworCQlyZXQgPSB3bDEyNzFfY21kX2V4dF9yYWRpb19wYXJtcyh3bCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBDaGlwLXNwZWNpZmljIGluaXRpYWxpemF0aW9ucyAqLworCXJldCA9IHdsMTI3MV9jaGlwX3NwZWNpZmljX2luaXQod2wpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC00NzcsNiArNTUwLDExIEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOwogCisJLyogRk0gV0xBTiBjb2V4aXN0ZW5jZSAqLworCXJldCA9IHdsMTI3MV9hY3hfZm1fY29leCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCiAJLyogRW5lcmd5IGRldGVjdGlvbiAqLwogCXJldCA9IHdsMTI3MV9pbml0X2VuZXJneV9kZXRlY3Rpb24od2wpOwogCWlmIChyZXQgPCAwKQpAQCAtNTkzLDE1ICs2NzEsMTcgQEAKIHsKIAlzdHJ1Y3Qgd2wxMjcxX2Z3X2NvbW1vbl9zdGF0dXMgKnN0YXR1cyA9ICZmdWxsX3N0YXR1cy0+Y29tbW9uOwogCXN0cnVjdCB0aW1lc3BlYyB0czsKLQl1MzIgdG90YWwgPSAwOworCXUzMiBvbGRfdHhfYmxrX2NvdW50ID0gd2wtPnR4X2Jsb2Nrc19hdmFpbGFibGU7CisJdTMyIGZyZWVkX2Jsb2NrcyA9IDA7CiAJaW50IGk7CiAKLQlpZiAod2wtPmJzc190eXBlID09IEJTU19UWVBFX0FQX0JTUykKKwlpZiAod2wtPmJzc190eXBlID09IEJTU19UWVBFX0FQX0JTUykgewogCQl3bDEyNzFfcmF3X3JlYWQod2wsIEZXX1NUQVRVU19BRERSLCBzdGF0dXMsCiAJCQkJc2l6ZW9mKHN0cnVjdCB3bDEyNzFfZndfYXBfc3RhdHVzKSwgZmFsc2UpOwotCWVsc2UKKwl9IGVsc2UgewogCQl3bDEyNzFfcmF3X3JlYWQod2wsIEZXX1NUQVRVU19BRERSLCBzdGF0dXMsCiAJCQkJc2l6ZW9mKHN0cnVjdCB3bDEyNzFfZndfc3RhX3N0YXR1cyksIGZhbHNlKTsKKwl9CiAKIAl3bDEyNzFfZGVidWcoREVCVUdfSVJRLCAiaW50cjogMHgleCAoZndfcnhfY291bnRlciA9ICVkLCAiCiAJCSAgICAgImRydl9yeF9jb3VudGVyID0gJWQsIHR4X3Jlc3VsdHNfY291bnRlciA9ICVkKSIsCkBAIC02MTIsMjMgKzY5MiwzOCBAQAogCiAJLyogdXBkYXRlIG51bWJlciBvZiBhdmFpbGFibGUgVFggYmxvY2tzICovCiAJZm9yIChpID0gMDsgaSA8IE5VTV9UWF9RVUVVRVM7IGkrKykgewotCQl1MzIgY250ID0gbGUzMl90b19jcHUoc3RhdHVzLT50eF9yZWxlYXNlZF9ibGtzW2ldKSAtCi0JCQl3bC0+dHhfYmxvY2tzX2ZyZWVkW2ldOworCQlmcmVlZF9ibG9ja3MgKz0gbGUzMl90b19jcHUoc3RhdHVzLT50eF9yZWxlYXNlZF9ibGtzW2ldKSAtCisJCQkJd2wtPnR4X2Jsb2Nrc19mcmVlZFtpXTsKIAogCQl3bC0+dHhfYmxvY2tzX2ZyZWVkW2ldID0KIAkJCWxlMzJfdG9fY3B1KHN0YXR1cy0+dHhfcmVsZWFzZWRfYmxrc1tpXSk7Ci0JCXdsLT50eF9ibG9ja3NfYXZhaWxhYmxlICs9IGNudDsKLQkJdG90YWwgKz0gY250OworCX0KKworCXdsLT50eF9hbGxvY2F0ZWRfYmxvY2tzIC09IGZyZWVkX2Jsb2NrczsKKworCWlmICh3bC0+YnNzX3R5cGUgPT0gQlNTX1RZUEVfQVBfQlNTKSB7CisJCS8qIFVwZGF0ZSBudW0gb2YgYWxsb2NhdGVkIFRYIGJsb2NrcyBwZXIgbGluayBhbmQgcHMgc3RhdHVzICovCisJCXdsMTI3MV9pcnFfdXBkYXRlX2xpbmtzX3N0YXR1cyh3bCwgJmZ1bGxfc3RhdHVzLT5hcCk7CisJCXdsLT50eF9ibG9ja3NfYXZhaWxhYmxlICs9IGZyZWVkX2Jsb2NrczsKKwl9IGVsc2UgeworCQlpbnQgYXZhaWwgPSBmdWxsX3N0YXR1cy0+c3RhLnR4X3RvdGFsIC0gd2wtPnR4X2FsbG9jYXRlZF9ibG9ja3M7CisKKwkJLyoKKwkJICogVGhlIEZXIG1pZ2h0IGNoYW5nZSB0aGUgdG90YWwgbnVtYmVyIG9mIFRYIG1lbWJsb2NrcyBiZWZvcmUKKwkJICogd2UgZ2V0IGEgbm90aWZpY2F0aW9uIGFib3V0IGJsb2NrcyBiZWluZyByZWxlYXNlZC4gVGh1cywgdGhlCisJCSAqIGF2YWlsYWJsZSBibG9ja3MgY2FsY3VsYXRpb24gbWlnaHQgeWllbGQgYSB0ZW1wb3JhcnkgcmVzdWx0CisJCSAqIHdoaWNoIGlzIGxvd2VyIHRoYW4gdGhlIGFjdHVhbCBhdmFpbGFibGUgYmxvY2tzLiBLZWVwaW5nIGluCisJCSAqIG1pbmQgdGhhdCBvbmx5IGJsb2NrcyB0aGF0IHdlcmUgYWxsb2NhdGVkIGNhbiBiZSBtb3ZlZCBmcm9tCisJCSAqIFRYIHRvIFJYLCB0eF9ibG9ja3NfYXZhaWxhYmxlIHNob3VsZCBuZXZlciBkZWNyZWFzZSBoZXJlLgorCQkgKi8KKwkJd2wtPnR4X2Jsb2Nrc19hdmFpbGFibGUgPSBtYXgoKGludCl3bC0+dHhfYmxvY2tzX2F2YWlsYWJsZSwKKwkJCQkJICAgICAgYXZhaWwpOwogCX0KIAogCS8qIGlmIG1vcmUgYmxvY2tzIGFyZSBhdmFpbGFibGUgbm93LCB0eCB3b3JrIGNhbiBiZSBzY2hlZHVsZWQgKi8KLQlpZiAodG90YWwpCisJaWYgKHdsLT50eF9ibG9ja3NfYXZhaWxhYmxlID4gb2xkX3R4X2Jsa19jb3VudCkKIAkJY2xlYXJfYml0KFdMMTI3MV9GTEFHX0ZXX1RYX0JVU1ksICZ3bC0+ZmxhZ3MpOwogCi0JLyogZm9yIEFQIHVwZGF0ZSBudW0gb2YgYWxsb2NhdGVkIFRYIGJsb2NrcyBwZXIgbGluayBhbmQgcHMgc3RhdHVzICovCi0JaWYgKHdsLT5ic3NfdHlwZSA9PSBCU1NfVFlQRV9BUF9CU1MpCi0JCXdsMTI3MV9pcnFfdXBkYXRlX2xpbmtzX3N0YXR1cyh3bCwgJmZ1bGxfc3RhdHVzLT5hcCk7Ci0KIAkvKiB1cGRhdGUgdGhlIGhvc3QtY2hpcHNldCB0aW1lIG9mZnNldCAqLwogCWdldG5zdGltZW9mZGF5KCZ0cyk7CiAJd2wtPnRpbWVfb2Zmc2V0ID0gKHRpbWVzcGVjX3RvX25zKCZ0cykgPj4gMTApIC0KQEAgLTY3NCw2ICs3NjksMTMgQEAKIAlzZXRfYml0KFdMMTI3MV9GTEFHX1RYX1BFTkRJTkcsICZ3bC0+ZmxhZ3MpOwogCWNhbmNlbF93b3JrX3N5bmMoJndsLT50eF93b3JrKTsKIAorCS8qCisJICogSW4gY2FzZSBlZGdlIHRyaWdnZXJlZCBpbnRlcnJ1cHQgbXVzdCBiZSB1c2VkLCB3ZSBjYW5ub3QgaXRlcmF0ZQorCSAqIG1vcmUgdGhhbiBvbmNlIHdpdGhvdXQgaW50cm9kdWNpbmcgcmFjZSBjb25kaXRpb25zIHdpdGggdGhlIGhhcmRpcnEuCisJICovCisJaWYgKHdsLT5wbGF0Zm9ybV9xdWlya3MgJiBXTDEyWFhfUExBVEZPUk1fUVVJUktfRURHRV9JUlEpCisJCWxvb3Bjb3VudCA9IDE7CisKIAltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwogCiAJd2wxMjcxX2RlYnVnKERFQlVHX0lSUSwgIklSUSB3b3JrIik7CkBAIC03ODUsMTEgKzg4NywxNyBAQAogCiAJc3dpdGNoICh3bC0+YnNzX3R5cGUpIHsKIAljYXNlIEJTU19UWVBFX0FQX0JTUzoKLQkJZndfbmFtZSA9IFdMMTI3MV9BUF9GV19OQU1FOworCQlpZiAod2wtPmNoaXAuaWQgPT0gQ0hJUF9JRF8xMjgzX1BHMjApCisJCQlmd19uYW1lID0gV0wxMjhYX0FQX0ZXX05BTUU7CisJCWVsc2UKKwkJCWZ3X25hbWUgPSBXTDEyN1hfQVBfRldfTkFNRTsKIAkJYnJlYWs7CiAJY2FzZSBCU1NfVFlQRV9JQlNTOgogCWNhc2UgQlNTX1RZUEVfU1RBX0JTUzoKLQkJZndfbmFtZSA9IFdMMTI3MV9GV19OQU1FOworCQlpZiAod2wtPmNoaXAuaWQgPT0gQ0hJUF9JRF8xMjgzX1BHMjApCisJCQlmd19uYW1lID0gV0wxMjhYX0ZXX05BTUU7CisJCWVsc2UKKwkJCWZ3X25hbWUJPSBXTDEyNzFfRldfTkFNRTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJd2wxMjcxX2Vycm9yKCJubyBjb21wYXRpYmxlIGZpcm13YXJlIGZvciBic3NfdHlwZSAlZCIsCkBAIC04MzgsMTQgKzk0NiwxNCBAQAogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CiAJaW50IHJldDsKIAotCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBXTDEyNzFfTlZTX05BTUUsIHdsMTI3MV93bF90b19kZXYod2wpKTsKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgV0wxMlhYX05WU19OQU1FLCB3bDEyNzFfd2xfdG9fZGV2KHdsKSk7CiAKIAlpZiAocmV0IDwgMCkgewogCQl3bDEyNzFfZXJyb3IoImNvdWxkIG5vdCBnZXQgbnZzIGZpbGU6ICVkIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQl3bC0+bnZzID0ga21lbWR1cChmdy0+ZGF0YSwgc2l6ZW9mKHN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUpLCBHRlBfS0VSTkVMKTsKKwl3bC0+bnZzID0ga21lbWR1cChmdy0+ZGF0YSwgZnctPnNpemUsIEdGUF9LRVJORUwpOwogCiAJaWYgKCF3bC0+bnZzKSB7CiAJCXdsMTI3MV9lcnJvcigiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIG52cyBmaWxlIik7CkBAIC04NzEsMTUgKzk3OSwzMCBAQAogCWlmICh3bC0+c3RhdGUgIT0gV0wxMjcxX1NUQVRFX09OKQogCQlnb3RvIG91dDsKIAotCXdsMTI3MV9pbmZvKCJIYXJkd2FyZSByZWNvdmVyeSBpbiBwcm9ncmVzcy4iKTsKKwl3bDEyNzFfaW5mbygiSGFyZHdhcmUgcmVjb3ZlcnkgaW4gcHJvZ3Jlc3MuIEZXIHZlcjogJXMgcGM6IDB4JXgiLAorCQkgICAgd2wtPmNoaXAuZndfdmVyX3N0ciwgd2wxMjcxX3JlYWQzMih3bCwgU0NSX1BBRDQpKTsKIAogCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19TVEFfQVNTT0NJQVRFRCwgJndsLT5mbGFncykpCiAJCWllZWU4MDIxMV9jb25uZWN0aW9uX2xvc3Mod2wtPnZpZik7CiAKKwkvKiBQcmV2ZW50IHNwdXJpb3VzIFRYIGR1cmluZyBGVyByZXN0YXJ0ICovCisJaWVlZTgwMjExX3N0b3BfcXVldWVzKHdsLT5odyk7CisKKwlpZiAod2wtPnNjaGVkX3NjYW5uaW5nKSB7CisJCWllZWU4MDIxMV9zY2hlZF9zY2FuX3N0b3BwZWQod2wtPmh3KTsKKwkJd2wtPnNjaGVkX3NjYW5uaW5nID0gZmFsc2U7CisJfQorCiAJLyogcmVib290IHRoZSBjaGlwc2V0ICovCi0JX193bDEyNzFfb3BfcmVtb3ZlX2ludGVyZmFjZSh3bCk7CisJX193bDEyNzFfb3BfcmVtb3ZlX2ludGVyZmFjZSh3bCwgZmFsc2UpOwogCWllZWU4MDIxMV9yZXN0YXJ0X2h3KHdsLT5odyk7CiAKKwkvKgorCSAqIEl0cyBzYWZlIHRvIGVuYWJsZSBUWCBub3cgLSB0aGUgcXVldWVzIGFyZSBzdG9wcGVkIGFmdGVyIGEgcmVxdWVzdAorCSAqIHRvIHJlc3RhcnQgdGhlIEhXLgorCSAqLworCWllZWU4MDIxMV93YWtlX3F1ZXVlcyh3bC0+aHcpOworCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwogfQpAQCAtOTUwLDEwICsxMDczLDI1IEBACiAJCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAiY2hpcCBpZCAweCV4ICgxMjcxIFBHMjApIiwKIAkJCSAgICAgd2wtPmNoaXAuaWQpOwogCisJCS8qIGVuZC1vZi10cmFuc2FjdGlvbiBmbGFnIHNob3VsZCBiZSBzZXQgaW4gd2wxMjd4IEFQIG1vZGUgKi8KKwkJaWYgKHdsLT5ic3NfdHlwZSA9PSBCU1NfVFlQRV9BUF9CU1MpCisJCQl3bC0+cXVpcmtzIHw9IFdMMTJYWF9RVUlSS19FTkRfT0ZfVFJBTlNBQ1RJT047CisKIAkJcmV0ID0gd2wxMjcxX3NldHVwKHdsKTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIG91dDsKIAkJYnJlYWs7CisJY2FzZSBDSElQX0lEXzEyODNfUEcyMDoKKwkJd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJjaGlwIGlkIDB4JXggKDEyODMgUEcyMCkiLAorCQkJICAgICB3bC0+Y2hpcC5pZCk7CisKKwkJcmV0ID0gd2wxMjcxX3NldHVwKHdsKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwkJaWYgKHdsMTI3MV9zZXRfYmxvY2tfc2l6ZSh3bCkpCisJCQl3bC0+cXVpcmtzIHw9IFdMMTJYWF9RVUlSS19CTE9DS1NJWkVfQUxJR05NRU5UOworCQlicmVhazsKKwljYXNlIENISVBfSURfMTI4M19QRzEwOgogCWRlZmF1bHQ6CiAJCXdsMTI3MV93YXJuaW5nKCJ1bnN1cHBvcnRlZCBjaGlwIGlkOiAweCV4Iiwgd2wtPmNoaXAuaWQpOwogCQlyZXQgPSAtRU5PREVWOwpAQCAtOTc4LDYgKzExMTYsMjQgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IHdsMTI3MV9nZXRfZndfdmVyX3F1aXJrcyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwl1bnNpZ25lZCBpbnQgcXVpcmtzID0gMDsKKwl1bnNpZ25lZCBpbnQgKmZ3X3ZlciA9IHdsLT5jaGlwLmZ3X3ZlcjsKKworCS8qIE9ubHkgZm9yIHdsMTI3eCAqLworCWlmICgoZndfdmVyW0ZXX1ZFUl9DSElQXSA9PSBGV19WRVJfQ0hJUF9XTDEyN1gpICYmCisJICAgIC8qIENoZWNrIFNUQSB2ZXJzaW9uICovCisJICAgICgoKGZ3X3ZlcltGV19WRVJfSUZfVFlQRV0gPT0gRldfVkVSX0lGX1RZUEVfU1RBKSAmJgorCSAgICAgIChmd192ZXJbRldfVkVSX01JTk9SXSA8IEZXX1ZFUl9NSU5PUl8xX1NQQVJFX1NUQV9NSU4pKSB8fAorCSAgICAgLyogQ2hlY2sgQVAgdmVyc2lvbiAqLworCSAgICAgKChmd192ZXJbRldfVkVSX0lGX1RZUEVdID09IEZXX1ZFUl9JRl9UWVBFX0FQKSAmJgorCSAgICAgIChmd192ZXJbRldfVkVSX01JTk9SXSA8IEZXX1ZFUl9NSU5PUl8xX1NQQVJFX0FQX01JTikpKSkKKwkJcXVpcmtzIHw9IFdMMTJYWF9RVUlSS19VU0VfMl9TUEFSRV9CTE9DS1M7CisKKwlyZXR1cm4gcXVpcmtzOworfQorCiBpbnQgd2wxMjcxX3BsdF9zdGFydChzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKIAlpbnQgcmV0cmllcyA9IFdMMTI3MV9CT09UX1JFVFJJRVM7CkBAIC0xMDEzLDYgKzExNjksOSBAQAogCQl3bC0+c3RhdGUgPSBXTDEyNzFfU1RBVEVfUExUOwogCQl3bDEyNzFfbm90aWNlKCJmaXJtd2FyZSBib290ZWQgaW4gUExUIG1vZGUgKCVzKSIsCiAJCQkgICAgICB3bC0+Y2hpcC5md192ZXJfc3RyKTsKKworCQkvKiBDaGVjayBpZiBhbnkgcXVpcmtzIGFyZSBuZWVkZWQgd2l0aCBvbGRlciBmdyB2ZXJzaW9ucyAqLworCQl3bC0+cXVpcmtzIHw9IHdsMTI3MV9nZXRfZndfdmVyX3F1aXJrcyh3bCk7CiAJCWdvdG8gb3V0OwogCiBpcnFfZGlzYWJsZToKQEAgLTEwNDAsNyArMTE5OSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IF9fd2wxMjcxX3BsdF9zdG9wKHN0cnVjdCB3bDEyNzEgKndsKQorc3RhdGljIGludCBfX3dsMTI3MV9wbHRfc3RvcChzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMTEyNCwxMCArMTI4MywyMTkgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOwogfQogCitpbnQgd2wxMjcxX3R4X2R1bW15X3BhY2tldChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJndsLT53bF9sb2NrLCBmbGFncyk7CisJc2V0X2JpdChXTDEyNzFfRkxBR19EVU1NWV9QQUNLRVRfUEVORElORywgJndsLT5mbGFncyk7CisJd2wtPnR4X3F1ZXVlX2NvdW50Kys7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPndsX2xvY2ssIGZsYWdzKTsKKworCS8qIFRoZSBGVyBpcyBsb3cgb24gUlggbWVtb3J5IGJsb2Nrcywgc28gc2VuZCB0aGUgZHVtbXkgcGFja2V0IGFzYXAgKi8KKwlpZiAoIXRlc3RfYml0KFdMMTI3MV9GTEFHX0ZXX1RYX0JVU1ksICZ3bC0+ZmxhZ3MpKQorCQl3bDEyNzFfdHhfd29ya19sb2NrZWQod2wpOworCisJLyoKKwkgKiBJZiB0aGUgRlcgVFggaXMgYnVzeSwgVFggd29yayB3aWxsIGJlIHNjaGVkdWxlZCBieSB0aGUgdGhyZWFkZWQKKwkgKiBpbnRlcnJ1cHQgaGFuZGxlciBmdW5jdGlvbgorCSAqLworCXJldHVybiAwOworfQorCisvKgorICogVGhlIHNpemUgb2YgdGhlIGR1bW15IHBhY2tldCBzaG91bGQgYmUgYXQgbGVhc3QgMTQwMCBieXRlcy4gSG93ZXZlciwgaW4KKyAqIG9yZGVyIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgYnVzIHRyYW5zYWN0aW9ucywgYWxpZ25pbmcgaXQgdG8gNTEyIGJ5dGVzCisgKiBib3VuZGFyaWVzIGNvdWxkIGJlIGJlbmVmaWNpYWwsIHBlcmZvcm1hbmNlIHdpc2UKKyAqLworI2RlZmluZSBUT1RBTF9UWF9EVU1NWV9QQUNLRVRfU0laRSAoQUxJR04oMTQwMCwgNTEyKSkKKworc3RhdGljIHN0cnVjdCBza19idWZmICp3bDEyeHhfYWxsb2NfZHVtbXlfcGFja2V0KHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKmhkcjsKKwl1bnNpZ25lZCBpbnQgZHVtbXlfcGFja2V0X3NpemU7CisKKwlkdW1teV9wYWNrZXRfc2l6ZSA9IFRPVEFMX1RYX0RVTU1ZX1BBQ0tFVF9TSVpFIC0KKwkJCSAgICBzaXplb2Yoc3RydWN0IHdsMTI3MV90eF9od19kZXNjcikgLSBzaXplb2YoKmhkcik7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKFRPVEFMX1RYX0RVTU1ZX1BBQ0tFVF9TSVpFKTsKKwlpZiAoIXNrYikgeworCQl3bDEyNzFfd2FybmluZygiRmFpbGVkIHRvIGFsbG9jYXRlIGEgZHVtbXkgcGFja2V0IHNrYiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlza2JfcmVzZXJ2ZShza2IsIHNpemVvZihzdHJ1Y3Qgd2wxMjcxX3R4X2h3X2Rlc2NyKSk7CisKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKikgc2tiX3B1dChza2IsIHNpemVvZigqaGRyKSk7CisJbWVtc2V0KGhkciwgMCwgc2l6ZW9mKCpoZHIpKTsKKwloZHItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfREFUQSB8CisJCQkJCSBJRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMgfAorCQkJCQkgSUVFRTgwMjExX0ZDVExfVE9EUyk7CisKKwltZW1zZXQoc2tiX3B1dChza2IsIGR1bW15X3BhY2tldF9zaXplKSwgMCwgZHVtbXlfcGFja2V0X3NpemUpOworCisJLyogRHVtbXkgcGFja2V0cyByZXF1aXJlIHRoZSBUSUQgdG8gYmUgbWFuYWdlbWVudCAqLworCXNrYi0+cHJpb3JpdHkgPSBXTDEyNzFfVElEX01HTVQ7CisKKwkvKiBJbml0aWFsaXplIGFsbCBmaWVsZHMgdGhhdCBtaWdodCBiZSB1c2VkICovCisJc2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgMCk7CisJbWVtc2V0KElFRUU4MDIxMV9TS0JfQ0Ioc2tiKSwgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbykpOworCisJcmV0dXJuIHNrYjsKK30KKworCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHdsMTI3MV9kZXZfbm90aWZpZXIgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSB3bDEyNzFfZGV2X25vdGlmeSwKIH07CiAKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgd2wxMjcxX2NvbmZpZ3VyZV9zdXNwZW5kKHN0cnVjdCB3bDEyNzEgKndsKQoreworCWludCByZXQ7CisKKwlpZiAod2wtPmJzc190eXBlICE9IEJTU19UWVBFX1NUQV9CU1MpCisJCXJldHVybiAwOworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfdW5sb2NrOworCisJLyogZW50ZXIgcHNtIGlmIG5lZWRlZCovCisJaWYgKCF0ZXN0X2JpdChXTDEyNzFfRkxBR19QU00sICZ3bC0+ZmxhZ3MpKSB7CisJCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGNvbXBsKTsKKworCQl3bC0+cHNfY29tcGwgPSAmY29tcGw7CisJCXJldCA9IHdsMTI3MV9wc19zZXRfbW9kZSh3bCwgU1RBVElPTl9QT1dFUl9TQVZFX01PREUsCisJCQkJICAgd2wtPmJhc2ljX3JhdGUsIHRydWUpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0X3NsZWVwOworCisJCS8qIHdlIG11c3QgdW5sb2NrIGhlcmUgc28gd2Ugd2lsbCBiZSBhYmxlIHRvIGdldCBldmVudHMgKi8KKwkJd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7CisJCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCQlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoCisJCQkmY29tcGwsIG1zZWNzX3RvX2ppZmZpZXMoV0wxMjcxX1BTX0NPTVBMRVRFX1RJTUVPVVQpKTsKKwkJaWYgKHJldCA8PSAwKSB7CisJCQl3bDEyNzFfd2FybmluZygiY291bGRuJ3QgZW50ZXIgcHMgbW9kZSEiKTsKKwkJCXJldCA9IC1FQlVTWTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyogdGFrZSBtdXRleCBhZ2FpbiwgYW5kIHdha2V1cCAqLworCQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dF91bmxvY2s7CisJfQorb3V0X3NsZWVwOgorCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CitvdXQ6CisJcmV0dXJuIHJldDsKKworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfY29uZmlndXJlX3Jlc3VtZShzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0OworCisJaWYgKHdsLT5ic3NfdHlwZSAhPSBCU1NfVFlQRV9TVEFfQlNTKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwkvKiBleGl0IHBzbSBpZiBpdCB3YXNuJ3QgY29uZmlndXJlZCAqLworCWlmICghdGVzdF9iaXQoV0wxMjcxX0ZMQUdfUFNNX1JFUVVFU1RFRCwgJndsLT5mbGFncykpCisJCXdsMTI3MV9wc19zZXRfbW9kZSh3bCwgU1RBVElPTl9BQ1RJVkVfTU9ERSwKKwkJCQkgICB3bC0+YmFzaWNfcmF0ZSwgdHJ1ZSk7CisKKwl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKK291dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX29wX3N1c3BlbmQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgc3RydWN0IGNmZzgwMjExX3dvd2xhbiAqd293KQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gaHctPnByaXY7CisJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgc3VzcGVuZCB3b3c9JWQiLCAhIXdvdyk7CisJd2wtPndvd19lbmFibGVkID0gISF3b3c7CisJaWYgKHdsLT53b3dfZW5hYmxlZCkgeworCQlpbnQgcmV0OworCQlyZXQgPSB3bDEyNzFfY29uZmlndXJlX3N1c3BlbmQod2wpOworCQlpZiAocmV0IDwgMCkgeworCQkJd2wxMjcxX3dhcm5pbmcoImNvdWxkbid0IHByZXBhcmUgZGV2aWNlIHRvIHN1c3BlbmQiKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJLyogZmx1c2ggYW55IHJlbWFpbmluZyB3b3JrICovCisJCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgImZsdXNoaW5nIHJlbWFpbmluZyB3b3JrcyIpOworCQlmbHVzaF9kZWxheWVkX3dvcmsoJndsLT5zY2FuX2NvbXBsZXRlX3dvcmspOworCisJCS8qCisJCSAqIGRpc2FibGUgYW5kIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGluIG9yZGVyIHRvIGZsdXNoCisJCSAqIHRoZSB0aHJlYWRlZF9pcnEKKwkJICovCisJCXdsMTI3MV9kaXNhYmxlX2ludGVycnVwdHMod2wpOworCisJCS8qCisJCSAqIHNldCBzdXNwZW5kZWQgZmxhZyB0byBhdm9pZCB0cmlnZ2VyaW5nIGEgbmV3IHRocmVhZGVkX2lycQorCQkgKiB3b3JrLiBubyBuZWVkIGZvciBzcGlubG9jayBhcyBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4KKwkJICovCisJCXNldF9iaXQoV0wxMjcxX0ZMQUdfU1VTUEVOREVELCAmd2wtPmZsYWdzKTsKKworCQl3bDEyNzFfZW5hYmxlX2ludGVycnVwdHMod2wpOworCQlmbHVzaF93b3JrKCZ3bC0+dHhfd29yayk7CisJCWZsdXNoX2RlbGF5ZWRfd29yaygmd2wtPnBzcG9sbF93b3JrKTsKKwkJZmx1c2hfZGVsYXllZF93b3JrKCZ3bC0+ZWxwX3dvcmspOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bDEyNzFfb3BfcmVzdW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gaHctPnByaXY7CisJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgcmVzdW1lIHdvdz0lZCIsCisJCSAgICAgd2wtPndvd19lbmFibGVkKTsKKworCS8qCisJICogcmUtZW5hYmxlIGlycV93b3JrIGVucXVldWluZywgYW5kIGNhbGwgaXJxX3dvcmsgZGlyZWN0bHkgaWYKKwkgKiB0aGVyZSBpcyBhIHBlbmRpbmcgd29yay4KKwkgKi8KKwlpZiAod2wtPndvd19lbmFibGVkKSB7CisJCXN0cnVjdCB3bDEyNzEgKndsID0gaHctPnByaXY7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCWJvb2wgcnVuX2lycV93b3JrID0gZmFsc2U7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJndsLT53bF9sb2NrLCBmbGFncyk7CisJCWNsZWFyX2JpdChXTDEyNzFfRkxBR19TVVNQRU5ERUQsICZ3bC0+ZmxhZ3MpOworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFdMMTI3MV9GTEFHX1BFTkRJTkdfV09SSywgJndsLT5mbGFncykpCisJCQlydW5faXJxX3dvcmsgPSB0cnVlOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOworCisJCWlmIChydW5faXJxX3dvcmspIHsKKwkJCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwKKwkJCQkgICAgICJydW4gcG9zdHBvbmVkIGlycV93b3JrIGRpcmVjdGx5Iik7CisJCQl3bDEyNzFfaXJxKDAsIHdsKTsKKwkJCXdsMTI3MV9lbmFibGVfaW50ZXJydXB0cyh3bCk7CisJCX0KKworCQl3bDEyNzFfY29uZmlndXJlX3Jlc3VtZSh3bCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogc3RhdGljIGludCB3bDEyNzFfb3Bfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgc3RhcnQiKTsKQEAgLTExNzQsNiArMTU0MiwxNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwkvKgorCSAqIGluIHNvbWUgdmVyeSBjb3JuZXIgY2FzZSBIVyByZWNvdmVyeSBzY2VuYXJpb3MgaXRzIHBvc3NpYmxlIHRvCisJICogZ2V0IGhlcmUgYmVmb3JlIF9fd2wxMjcxX29wX3JlbW92ZV9pbnRlcmZhY2UgaXMgY29tcGxldGUsIHNvCisJICogb3B0IG91dCBpZiB0aGF0IGlzIHRoZSBjYXNlLgorCSAqLworCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19JRl9JTklUSUFMSVpFRCwgJndsLT5mbGFncykpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKIAlzd2l0Y2ggKHZpZi0+dHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAkJd2wtPmJzc190eXBlID0gQlNTX1RZUEVfU1RBX0JTUzsKQEAgLTEyNDIsNiArMTYyMCw3IEBACiAKIAl3bC0+dmlmID0gdmlmOwogCXdsLT5zdGF0ZSA9IFdMMTI3MV9TVEFURV9PTjsKKwlzZXRfYml0KFdMMTI3MV9GTEFHX0lGX0lOSVRJQUxJWkVELCAmd2wtPmZsYWdzKTsKIAl3bDEyNzFfaW5mbygiZmlybXdhcmUgYm9vdGVkICglcykiLCB3bC0+Y2hpcC5md192ZXJfc3RyKTsKIAogCS8qIHVwZGF0ZSBody9mdyB2ZXJzaW9uIGluZm8gaW4gd2lwaHkgc3RydWN0ICovCkBAIC0xMjQ5LDYgKzE2MjgsOSBAQAogCXN0cm5jcHkod2lwaHktPmZ3X3ZlcnNpb24sIHdsLT5jaGlwLmZ3X3Zlcl9zdHIsCiAJCXNpemVvZih3aXBoeS0+ZndfdmVyc2lvbikpOwogCisJLyogQ2hlY2sgaWYgYW55IHF1aXJrcyBhcmUgbmVlZGVkIHdpdGggb2xkZXIgZncgdmVyc2lvbnMgKi8KKwl3bC0+cXVpcmtzIHw9IHdsMTI3MV9nZXRfZndfdmVyX3F1aXJrcyh3bCk7CisKIAkvKgogCSAqIE5vdyB3ZSBrbm93IGlmIDExYSBpcyBzdXBwb3J0ZWQgKGluZm8gZnJvbSB0aGUgTlZTKSwgc28gZGlzYWJsZQogCSAqIDExYSBjaGFubmVscyBpZiBub3Qgc3VwcG9ydGVkCkBAIC0xMjYyLDIzICsxNjQ0LDMwIEBACiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwogCisJbXV0ZXhfbG9jaygmd2xfbGlzdF9tdXRleCk7CiAJaWYgKCFyZXQpCiAJCWxpc3RfYWRkKCZ3bC0+bGlzdCwgJndsX2xpc3QpOworCW11dGV4X3VubG9jaygmd2xfbGlzdF9tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBfX3dsMTI3MV9vcF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCB3bDEyNzEgKndsKQorc3RhdGljIHZvaWQgX193bDEyNzFfb3BfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3Qgd2wxMjcxICp3bCwKKwkJCQkJIGJvb2wgcmVzZXRfdHhfcXVldWVzKQogewogCWludCBpOwogCiAJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgcmVtb3ZlIGludGVyZmFjZSIpOwogCisJLyogYmVjYXVzZSBvZiBoYXJkd2FyZSByZWNvdmVyeSwgd2UgbWF5IGdldCBoZXJlIHR3aWNlICovCisJaWYgKHdsLT5zdGF0ZSAhPSBXTDEyNzFfU1RBVEVfT04pCisJCXJldHVybjsKKwogCXdsMTI3MV9pbmZvKCJkb3duIik7CiAKKwltdXRleF9sb2NrKCZ3bF9saXN0X211dGV4KTsKIAlsaXN0X2RlbCgmd2wtPmxpc3QpOwotCi0JV0FSTl9PTih3bC0+c3RhdGUgIT0gV0wxMjcxX1NUQVRFX09OKTsKKwltdXRleF91bmxvY2soJndsX2xpc3RfbXV0ZXgpOwogCiAJLyogZW5hYmxlIGR5biBwcyBqdXN0IGluIGNhc2UgKGlmIGxlZnQgb24gZHVlIHRvIGZ3IGNyYXNoIGV0YykgKi8KIAlpZiAod2wtPmJzc190eXBlID09IEJTU19UWVBFX1NUQV9CU1MpCkBAIC0xMjg2LDEyICsxNjc1LDE1IEBACiAKIAlpZiAod2wtPnNjYW4uc3RhdGUgIT0gV0wxMjcxX1NDQU5fU1RBVEVfSURMRSkgewogCQl3bC0+c2Nhbi5zdGF0ZSA9IFdMMTI3MV9TQ0FOX1NUQVRFX0lETEU7Ci0JCWtmcmVlKHdsLT5zY2FuLnNjYW5uZWRfY2gpOwotCQl3bC0+c2Nhbi5zY2FubmVkX2NoID0gTlVMTDsKKwkJbWVtc2V0KHdsLT5zY2FuLnNjYW5uZWRfY2gsIDAsIHNpemVvZih3bC0+c2Nhbi5zY2FubmVkX2NoKSk7CiAJCXdsLT5zY2FuLnJlcSA9IE5VTEw7CiAJCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZCh3bC0+aHcsIHRydWUpOwogCX0KIAorCS8qCisJICogdGhpcyBtdXN0IGJlIGJlZm9yZSB0aGUgY2FuY2VsX3dvcmsgY2FsbHMgYmVsb3csIHNvIHRoYXQgdGhlIHdvcmsKKwkgKiBmdW5jdGlvbnMgZG9uJ3QgcGVyZm9ybSBmdXJ0aGVyIHdvcmsuCisJICovCiAJd2wtPnN0YXRlID0gV0wxMjcxX1NUQVRFX09GRjsKIAogCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKQEAgLTEzMDcsNyArMTY5OSw3IEBACiAJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKIAogCS8qIGxldCdzIG5vdGlmeSBNQUM4MDIxMSBhYm91dCB0aGUgcmVtYWluaW5nIHBlbmRpbmcgVFggZnJhbWVzICovCi0Jd2wxMjcxX3R4X3Jlc2V0KHdsKTsKKwl3bDEyNzFfdHhfcmVzZXQod2wsIHJlc2V0X3R4X3F1ZXVlcyk7CiAJd2wxMjcxX3Bvd2VyX29mZih3bCk7CiAKIAltZW1zZXQod2wtPmJzc2lkLCAwLCBFVEhfQUxFTik7CkBAIC0xMzIxLDYgKzE3MTMsNyBAQAogCXdsLT5wc21fZW50cnlfcmV0cnkgPSAwOwogCXdsLT5wb3dlcl9sZXZlbCA9IFdMMTI3MV9ERUZBVUxUX1BPV0VSX0xFVkVMOwogCXdsLT50eF9ibG9ja3NfYXZhaWxhYmxlID0gMDsKKwl3bC0+dHhfYWxsb2NhdGVkX2Jsb2NrcyA9IDA7CiAJd2wtPnR4X3Jlc3VsdHNfY291bnQgPSAwOwogCXdsLT50eF9wYWNrZXRzX2NvdW50ID0gMDsKIAl3bC0+dHhfc2VjdXJpdHlfbGFzdF9zZXEgPSAwOwpAQCAtMTMyOCwxMyArMTcyMSwyMCBAQAogCXdsLT50aW1lX29mZnNldCA9IDA7CiAJd2wtPnNlc3Npb25fY291bnRlciA9IDA7CiAJd2wtPnJhdGVfc2V0ID0gQ09ORl9UWF9SQVRFX01BU0tfQkFTSUM7Ci0Jd2wtPmZsYWdzID0gMDsKIAl3bC0+dmlmID0gTlVMTDsKIAl3bC0+ZmlsdGVycyA9IDA7CiAJd2wxMjcxX2ZyZWVfYXBfa2V5cyh3bCk7CiAJbWVtc2V0KHdsLT5hcF9obGlkX21hcCwgMCwgc2l6ZW9mKHdsLT5hcF9obGlkX21hcCkpOwogCXdsLT5hcF9md19wc19tYXAgPSAwOwogCXdsLT5hcF9wc19tYXAgPSAwOworCXdsLT5zY2hlZF9zY2FubmluZyA9IGZhbHNlOworCisJLyoKKwkgKiB0aGlzIGlzIHBlcmZvcm1lZCBhZnRlciB0aGUgY2FuY2VsX3dvcmsgY2FsbHMgYW5kIHRoZSBhc3NvY2lhdGVkCisJICogbXV0ZXhfbG9jaywgc28gdGhhdCB3bDEyNzFfb3BfYWRkX2ludGVyZmFjZSBkb2VzIG5vdCBhY2NpZGVudGFsbHkKKwkgKiBnZXQgZXhlY3V0ZWQgYmVmb3JlIGFsbCB0aGVzZSB2YXJzIGhhdmUgYmVlbiByZXNldC4KKwkgKi8KKwl3bC0+ZmxhZ3MgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IE5VTV9UWF9RVUVVRVM7IGkrKykKIAkJd2wtPnR4X2Jsb2Nrc19mcmVlZFtpXSA9IDA7CkBAIC0xMzYxLDE0ICsxNzYxLDE0IEBACiAJICovCiAJaWYgKHdsLT52aWYpIHsKIAkJV0FSTl9PTih3bC0+dmlmICE9IHZpZik7Ci0JCV9fd2wxMjcxX29wX3JlbW92ZV9pbnRlcmZhY2Uod2wpOworCQlfX3dsMTI3MV9vcF9yZW1vdmVfaW50ZXJmYWNlKHdsLCB0cnVlKTsKIAl9CiAKIAltdXRleF91bmxvY2soJndsLT5tdXRleCk7CiAJY2FuY2VsX3dvcmtfc3luYygmd2wtPnJlY292ZXJ5X3dvcmspOwogfQogCi1zdGF0aWMgdm9pZCB3bDEyNzFfY29uZmlndXJlX2ZpbHRlcnMoc3RydWN0IHdsMTI3MSAqd2wsIHVuc2lnbmVkIGludCBmaWx0ZXJzKQordm9pZCB3bDEyNzFfY29uZmlndXJlX2ZpbHRlcnMoc3RydWN0IHdsMTI3MSAqd2wsIHVuc2lnbmVkIGludCBmaWx0ZXJzKQogewogCXdsMTI3MV9zZXRfZGVmYXVsdF9maWx0ZXJzKHdsKTsKIApAQCAtMTQzMSwxMCArMTgzMSwxMCBAQAogCSAqIE9uZSBvZiB0aGUgc2lkZSBlZmZlY3RzIG9mIHRoZSBKT0lOIGNvbW1hbmQgaXMgdGhhdCBpcyBjbGVhcnMKIAkgKiBXUEEvV1BBMiBrZXlzIGZyb20gdGhlIGNoaXBzZXQuIFBlcmZvcm1pbmcgYSBKT0lOIHdoaWxlIGFzc29jaWF0ZWQKIAkgKiB0byBhIFdQQS9XUEEyIGFjY2VzcyBwb2ludCB3aWxsIHRoZXJlZm9yZSBraWxsIHRoZSBkYXRhLXBhdGguCi0JICogQ3VycmVudGx5IHRoZXJlIGlzIG5vIHN1cHBvcnRlZCBzY2VuYXJpbyBmb3IgSk9JTiBkdXJpbmcKLQkgKiBhc3NvY2lhdGlvbiAtIGlmIGl0IGJlY29tZXMgYSBzdXBwb3J0ZWQgc2NlbmFyaW8sIHRoZSBXUEEvV1BBMiBrZXlzCi0JICogbXVzdCBiZSBoYW5kbGVkIHNvbWVob3cuCi0JICoKKwkgKiBDdXJyZW50bHkgdGhlIG9ubHkgdmFsaWQgc2NlbmFyaW8gZm9yIEpPSU4gZHVyaW5nIGFzc29jaWF0aW9uCisJICogaXMgb24gcm9hbWluZywgaW4gd2hpY2ggY2FzZSB3ZSB3aWxsIGFsc28gYmUgZ2l2ZW4gbmV3IGtleXMuCisJICogS2VlcCB0aGUgYmVsb3cgbWVzc2FnZSBmb3Igbm93LCB1bmxlc3MgaXQgc3RhcnRzIGJvdGhlcmluZworCSAqIHVzZXJzIHdobyByZWFsbHkgbGlrZSB0byByb2FtIGEgbG90IDopCiAJICovCiAJaWYgKHRlc3RfYml0KFdMMTI3MV9GTEFHX1NUQV9BU1NPQ0lBVEVELCAmd2wtPmZsYWdzKSkKIAkJd2wxMjcxX2luZm8oIkpPSU4gd2hpbGUgYXNzb2NpYXRlZC4iKTsKQEAgLTE0OTAsNyArMTg5MCw3IEBACiAJY2xlYXJfYml0KFdMMTI3MV9GTEFHX0pPSU5FRCwgJndsLT5mbGFncyk7CiAJbWVtc2V0KHdsLT5ic3NpZCwgMCwgRVRIX0FMRU4pOwogCi0JLyogc3RvcCBmaWx0ZXJ0aW5nIHBhY2tldHMgYmFzZWQgb24gYnNzaWQgKi8KKwkvKiBzdG9wIGZpbHRlcmluZyBwYWNrZXRzIGJhc2VkIG9uIGJzc2lkICovCiAJd2wxMjcxX2NvbmZpZ3VyZV9maWx0ZXJzKHdsLCBGSUZfT1RIRVJfQlNTKTsKIAogb3V0OgpAQCAtMTUzMCw2ICsxOTMwLDEzIEBACiAJCXdsLT5zZXNzaW9uX2NvdW50ZXIrKzsKIAkJaWYgKHdsLT5zZXNzaW9uX2NvdW50ZXIgPj0gU0VTU0lPTl9DT1VOVEVSX01BWCkKIAkJCXdsLT5zZXNzaW9uX2NvdW50ZXIgPSAwOworCisJCS8qIFRoZSBjdXJyZW50IGZpcm13YXJlIG9ubHkgc3VwcG9ydHMgc2NoZWRfc2NhbiBpbiBpZGxlICovCisJCWlmICh3bC0+c2NoZWRfc2Nhbm5pbmcpIHsKKwkJCXdsMTI3MV9zY2FuX3NjaGVkX3NjYW5fc3RvcCh3bCk7CisJCQlpZWVlODAyMTFfc2NoZWRfc2Nhbl9zdG9wcGVkKHdsLT5odyk7CisJCX0KKwogCQlyZXQgPSB3bDEyNzFfZHVtbXlfam9pbih3bCk7CiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBvdXQ7CkBAIC0xNTY5LDcgKzE5NzYsMTIgQEAKIAltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwogCiAJaWYgKHVubGlrZWx5KHdsLT5zdGF0ZSA9PSBXTDEyNzFfU1RBVEVfT0ZGKSkgewotCQlyZXQgPSAtRUFHQUlOOworCQkvKiB3ZSBzdXBwb3J0IGNvbmZpZ3VyaW5nIHRoZSBjaGFubmVsIGFuZCBiYW5kIHdoaWxlIG9mZiAqLworCQlpZiAoKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCkpIHsKKwkJCXdsLT5iYW5kID0gY29uZi0+Y2hhbm5lbC0+YmFuZDsKKwkJCXdsLT5jaGFubmVsID0gY2hhbm5lbDsKKwkJfQorCiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMjA3Nyw2ICsyNDg5LDYwIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCB3bDEyNzFfb3Bfc2NoZWRfc2Nhbl9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgICAgIHN0cnVjdCBjZmc4MDIxMV9zY2hlZF9zY2FuX3JlcXVlc3QgKnJlcSwKKwkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3NjaGVkX3NjYW5faWVzICppZXMpCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLCAid2wxMjcxX29wX3NjaGVkX3NjYW5fc3RhcnQiKTsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlyZXQgPSB3bDEyNzFfcHNfZWxwX3dha2V1cCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcmV0ID0gd2wxMjcxX3NjYW5fc2NoZWRfc2Nhbl9jb25maWcod2wsIHJlcSwgaWVzKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfc2xlZXA7CisKKwlyZXQgPSB3bDEyNzFfc2Nhbl9zY2hlZF9zY2FuX3N0YXJ0KHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfc2xlZXA7CisKKwl3bC0+c2NoZWRfc2Nhbm5pbmcgPSB0cnVlOworCitvdXRfc2xlZXA6CisJd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI3MV9vcF9zY2hlZF9zY2FuX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsICJ3bDEyNzFfb3Bfc2NoZWRfc2Nhbl9zdG9wIik7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXdsMTI3MV9zY2FuX3NjaGVkX3NjYW5fc3RvcCh3bCk7CisKKwl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKK291dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7Cit9CisKIHN0YXRpYyBpbnQgd2wxMjcxX29wX3NldF9mcmFnX3RocmVzaG9sZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHZhbHVlKQogewogCXN0cnVjdCB3bDEyNzEgKndsID0gaHctPnByaXY7CkBAIC0yMDkzLDcgKzI1NTksNyBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKIAotCXJldCA9IHdsMTI3MV9hY3hfZnJhZ190aHJlc2hvbGQod2wsICh1MTYpdmFsdWUpOworCXJldCA9IHdsMTI3MV9hY3hfZnJhZ190aHJlc2hvbGQod2wsIHZhbHVlKTsKIAlpZiAocmV0IDwgMCkKIAkJd2wxMjcxX3dhcm5pbmcoIndsMTI3MV9vcF9zZXRfZnJhZ190aHJlc2hvbGQgZmFpbGVkOiAlZCIsIHJldCk7CiAKQEAgLTIxMjEsNyArMjU4Nyw3IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwogCi0JcmV0ID0gd2wxMjcxX2FjeF9ydHNfdGhyZXNob2xkKHdsLCAodTE2KSB2YWx1ZSk7CisJcmV0ID0gd2wxMjcxX2FjeF9ydHNfdGhyZXNob2xkKHdsLCB2YWx1ZSk7CiAJaWYgKHJldCA8IDApCiAJCXdsMTI3MV93YXJuaW5nKCJ3bDEyNzFfb3Bfc2V0X3J0c190aHJlc2hvbGQgZmFpbGVkOiAlZCIsIHJldCk7CiAKQEAgLTIxMzYsMjAgKzI2MDIsMjQgQEAKIHN0YXRpYyBpbnQgd2wxMjcxX3NzaWRfc2V0KHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgIGludCBvZmZzZXQpCiB7Ci0JdTggKnB0ciA9IHNrYi0+ZGF0YSArIG9mZnNldDsKKwl1OCBzc2lkX2xlbjsKKwljb25zdCB1OCAqcHRyID0gY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9TU0lELCBza2ItPmRhdGEgKyBvZmZzZXQsCisJCQkJCSBza2ItPmxlbiAtIG9mZnNldCk7CiAKLQkvKiBmaW5kIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3NpZCBpbiB0aGUgYmVhY29uICovCi0Jd2hpbGUgKHB0ciA8IHNrYi0+ZGF0YSArIHNrYi0+bGVuKSB7Ci0JCWlmIChwdHJbMF0gPT0gV0xBTl9FSURfU1NJRCkgewotCQkJd2wtPnNzaWRfbGVuID0gcHRyWzFdOwotCQkJbWVtY3B5KHdsLT5zc2lkLCBwdHIrMiwgd2wtPnNzaWRfbGVuKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCXB0ciArPSAocHRyWzFdICsgMik7CisJaWYgKCFwdHIpIHsKKwkJd2wxMjcxX2Vycm9yKCJObyBTU0lEIGluIElFcyEiKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0Jd2wxMjcxX2Vycm9yKCJObyBTU0lEIGluIElFcyFcbiIpOwotCXJldHVybiAtRU5PRU5UOworCXNzaWRfbGVuID0gcHRyWzFdOworCWlmIChzc2lkX2xlbiA+IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pIHsKKwkJd2wxMjcxX2Vycm9yKCJTU0lEIGlzIHRvbyBsb25nISIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3bC0+c3NpZF9sZW4gPSBzc2lkX2xlbjsKKwltZW1jcHkod2wtPnNzaWQsIHB0cisyLCBzc2lkX2xlbik7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgd2wxMjcxX2Jzc19lcnBfaW5mb19jaGFuZ2VkKHN0cnVjdCB3bDEyNzEgKndsLApAQCAtMjI2NCwyNCArMjczNCwxOSBAQAogCiAJaWYgKChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkFTSUNfUkFURVMpKSB7CiAJCXUzMiByYXRlcyA9IGJzc19jb25mLT5iYXNpY19yYXRlczsKLQkJc3RydWN0IGNvbmZfdHhfcmF0ZV9jbGFzcyBtZ210X3JjOwogCiAJCXdsLT5iYXNpY19yYXRlX3NldCA9IHdsMTI3MV90eF9lbmFibGVkX3JhdGVzX2dldCh3bCwgcmF0ZXMpOwogCQl3bC0+YmFzaWNfcmF0ZSA9IHdsMTI3MV90eF9taW5fcmF0ZV9nZXQod2wpOwotCQl3bDEyNzFfZGVidWcoREVCVUdfQVAsICJiYXNpYyByYXRlczogMHgleCIsCi0JCQkgICAgIHdsLT5iYXNpY19yYXRlX3NldCk7CiAKLQkJLyogdXBkYXRlIHRoZSBBUCBtYW5hZ2VtZW50IHJhdGUgcG9saWN5IHdpdGggdGhlIG5ldyByYXRlcyAqLwotCQltZ210X3JjLmVuYWJsZWRfcmF0ZXMgPSB3bC0+YmFzaWNfcmF0ZV9zZXQ7Ci0JCW1nbXRfcmMubG9uZ19yZXRyeV9saW1pdCA9IDEwOwotCQltZ210X3JjLnNob3J0X3JldHJ5X2xpbWl0ID0gMTA7Ci0JCW1nbXRfcmMuYWZsYWdzID0gMDsKLQkJcmV0ID0gd2wxMjcxX2FjeF9hcF9yYXRlX3BvbGljeSh3bCwgJm1nbXRfcmMsCi0JCQkJCQlBQ1hfVFhfQVBfTU9ERV9NR01UX1JBVEUpOworCQlyZXQgPSB3bDEyNzFfaW5pdF9hcF9yYXRlcyh3bCk7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQl3bDEyNzFfZXJyb3IoIkFQIG1nbXQgcG9saWN5IGNoYW5nZSBmYWlsZWQgJWQiLCByZXQpOworCQkJd2wxMjcxX2Vycm9yKCJBUCByYXRlIHBvbGljeSBjaGFuZ2UgZmFpbGVkICVkIiwgcmV0KTsKIAkJCWdvdG8gb3V0OwogCQl9CisKKwkJcmV0ID0gd2wxMjcxX2FwX2luaXRfdGVtcGxhdGVzKHdsKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKIAl9CiAKIAlyZXQgPSB3bDEyNzFfYnNzX2JlYWNvbl9pbmZvX2NoYW5nZWQod2wsIHZpZiwgYnNzX2NvbmYsIGNoYW5nZWQpOwpAQCAtMjMxNCw2ICsyNzc5LDI0IEBACiAJCX0KIAl9CiAKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0lCU1MpIHsKKwkJd2wxMjcxX2RlYnVnKERFQlVHX0FESE9DLCAiaWJzc19qb2luZWQ6ICVkIiwKKwkJCSAgICAgYnNzX2NvbmYtPmlic3Nfam9pbmVkKTsKKworCQlpZiAoYnNzX2NvbmYtPmlic3Nfam9pbmVkKSB7CisJCQl1MzIgcmF0ZXMgPSBic3NfY29uZi0+YmFzaWNfcmF0ZXM7CisJCQl3bC0+YmFzaWNfcmF0ZV9zZXQgPSB3bDEyNzFfdHhfZW5hYmxlZF9yYXRlc19nZXQod2wsCisJCQkJCQkJCQkgcmF0ZXMpOworCQkJd2wtPmJhc2ljX3JhdGUgPSB3bDEyNzFfdHhfbWluX3JhdGVfZ2V0KHdsKTsKKworCQkJLyogYnkgZGVmYXVsdCwgdXNlIDExYiByYXRlcyAqLworCQkJd2wtPnJhdGVfc2V0ID0gQ09ORl9UWF9JQlNTX0RFRkFVTFRfUkFURVM7CisJCQlyZXQgPSB3bDEyNzFfYWN4X3N0YV9yYXRlX3BvbGljaWVzKHdsKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gb3V0OworCQl9CisJfQorCiAJcmV0ID0gd2wxMjcxX2Jzc19lcnBfaW5mb19jaGFuZ2VkKHdsLCBic3NfY29uZiwgY2hhbmdlZCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwpAQCAtMjUwMyw4ICsyOTg2LDEwIEBACiAJCQl9CiAJCX0gZWxzZSB7CiAJCQkvKiB1c2UgZGVmYXVsdHMgd2hlbiBub3QgYXNzb2NpYXRlZCAqLworCQkJYm9vbCB3YXNfYXNzb2MgPQorCQkJICAgICEhdGVzdF9hbmRfY2xlYXJfYml0KFdMMTI3MV9GTEFHX1NUQV9BU1NPQ0lBVEVELAorCQkJCQkJICZ3bC0+ZmxhZ3MpOwogCQkJY2xlYXJfYml0KFdMMTI3MV9GTEFHX1NUQV9TVEFURV9TRU5ULCAmd2wtPmZsYWdzKTsKLQkJCWNsZWFyX2JpdChXTDEyNzFfRkxBR19TVEFfQVNTT0NJQVRFRCwgJndsLT5mbGFncyk7CiAJCQl3bC0+YWlkID0gMDsKIAogCQkJLyogZnJlZSBwcm9iZS1yZXF1ZXN0IHRlbXBsYXRlICovCkBAIC0yNTMwLDggKzMwMTUsMTAgQEAKIAkJCQlnb3RvIG91dDsKIAogCQkJLyogcmVzdG9yZSB0aGUgYnNzaWQgZmlsdGVyIGFuZCBnbyB0byBkdW1teSBic3NpZCAqLwotCQkJd2wxMjcxX3Vuam9pbih3bCk7Ci0JCQl3bDEyNzFfZHVtbXlfam9pbih3bCk7CisJCQlpZiAod2FzX2Fzc29jKSB7CisJCQkJd2wxMjcxX3Vuam9pbih3bCk7CisJCQkJd2wxMjcxX2R1bW15X2pvaW4od2wpOworCQkJfQogCQl9CiAJfQogCkBAIC0yNjUwLDMyICszMTM3LDMxIEBACiAJCWNvbmZfdGlkLT5hY2tfcG9saWN5ID0gQ09ORl9BQ0tfUE9MSUNZX0xFR0FDWTsKIAkJY29uZl90aWQtPmFwc2RfY29uZlswXSA9IDA7CiAJCWNvbmZfdGlkLT5hcHNkX2NvbmZbMV0gPSAwOwotCX0gZWxzZSB7Ci0JCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKKwkJZ290byBvdXQ7CisJfQogCi0JCS8qCi0JCSAqIHRoZSB0eG9wIGlzIGNvbmZlZCBpbiB1bml0cyBvZiAzMnVzIGJ5IHRoZSBtYWM4MDIxMSwKLQkJICogd2UgbmVlZCB1cwotCQkgKi8KLQkJcmV0ID0gd2wxMjcxX2FjeF9hY19jZmcod2wsIHdsMTI3MV90eF9nZXRfcXVldWUocXVldWUpLAotCQkJCQlwYXJhbXMtPmN3X21pbiwgcGFyYW1zLT5jd19tYXgsCi0JCQkJCXBhcmFtcy0+YWlmcywgcGFyYW1zLT50eG9wIDw8IDUpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0X3NsZWVwOworCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CiAKLQkJcmV0ID0gd2wxMjcxX2FjeF90aWRfY2ZnKHdsLCB3bDEyNzFfdHhfZ2V0X3F1ZXVlKHF1ZXVlKSwKLQkJCQkJIENPTkZfQ0hBTk5FTF9UWVBFX0VEQ0YsCi0JCQkJCSB3bDEyNzFfdHhfZ2V0X3F1ZXVlKHF1ZXVlKSwKLQkJCQkJIHBzX3NjaGVtZSwgQ09ORl9BQ0tfUE9MSUNZX0xFR0FDWSwKLQkJCQkJIDAsIDApOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0X3NsZWVwOworCS8qCisJICogdGhlIHR4b3AgaXMgY29uZmVkIGluIHVuaXRzIG9mIDMydXMgYnkgdGhlIG1hYzgwMjExLAorCSAqIHdlIG5lZWQgdXMKKwkgKi8KKwlyZXQgPSB3bDEyNzFfYWN4X2FjX2NmZyh3bCwgd2wxMjcxX3R4X2dldF9xdWV1ZShxdWV1ZSksCisJCQkJcGFyYW1zLT5jd19taW4sIHBhcmFtcy0+Y3dfbWF4LAorCQkJCXBhcmFtcy0+YWlmcywgcGFyYW1zLT50eG9wIDw8IDUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9zbGVlcDsKKworCXJldCA9IHdsMTI3MV9hY3hfdGlkX2NmZyh3bCwgd2wxMjcxX3R4X2dldF9xdWV1ZShxdWV1ZSksCisJCQkJIENPTkZfQ0hBTk5FTF9UWVBFX0VEQ0YsCisJCQkJIHdsMTI3MV90eF9nZXRfcXVldWUocXVldWUpLAorCQkJCSBwc19zY2hlbWUsIENPTkZfQUNLX1BPTElDWV9MRUdBQ1ksCisJCQkJIDAsIDApOwogCiBvdXRfc2xlZXA6Ci0JCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOwotCX0KKwl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKIAogb3V0OgogCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKQEAgLTI4NDcsMTAgKzMzMzMsMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgd2wxMjcxX29wX2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCSAgIGVudW0gaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uIGFjdGlvbiwKLQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQsIHUxNiAqc3NuLAotCQkJICAgdTggYnVmX3NpemUpCitzdGF0aWMgaW50IHdsMTI3MV9vcF9hbXBkdV9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgZW51bSBpZWVlODAyMTFfYW1wZHVfbWxtZV9hY3Rpb24gYWN0aW9uLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCwgdTE2ICpzc24sCisJCQkJICB1OCBidWZfc2l6ZSkKIHsKIAlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OwogCWludCByZXQ7CkBAIC0yOTA3LDYgKzMzOTQsMjggQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgYm9vbCB3bDEyNzFfdHhfZnJhbWVzX3BlbmRpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKKwlib29sIHJldCA9IGZhbHNlOworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCWlmICh1bmxpa2VseSh3bC0+c3RhdGUgPT0gV0wxMjcxX1NUQVRFX09GRikpCisJCWdvdG8gb3V0OworCisJLyogcGFja2V0cyBhcmUgY29uc2lkZXJlZCBwZW5kaW5nIGlmIGluIHRoZSBUWCBxdWV1ZSBvciB0aGUgRlcgKi8KKwlyZXQgPSAod2wtPnR4X3F1ZXVlX2NvdW50ID4gMCkgfHwgKHdsLT50eF9mcmFtZXNfY250ID4gMCk7CisKKwkvKiB0aGUgYWJvdmUgaXMgYXBwcm9wcmlhdGUgZm9yIFNUQSBtb2RlIGZvciBQUyBwdXJwb3NlcyAqLworCVdBUk5fT04od2wtPmJzc190eXBlICE9IEJTU19UWVBFX1NUQV9CU1MpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKwogLyogY2FuJ3QgYmUgY29uc3QsIG1hYzgwMjExIHdyaXRlcyB0byB0aGlzICovCiBzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIHdsMTI3MV9yYXRlc1tdID0gewogCXsgLmJpdHJhdGUgPSAxMCwKQEAgLTMwMDMsNyArMzUxMiw4IEBACiAKICNpZmRlZiBDT05GSUdfV0wxMlhYX0hUCiAjZGVmaW5lIFdMMTJYWF9IVF9DQVAgeyBcCi0JLmNhcCA9IElFRUU4MDIxMV9IVF9DQVBfR1JOX0ZMRCB8IElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwLCBcCisJLmNhcCA9IElFRUU4MDIxMV9IVF9DQVBfR1JOX0ZMRCB8IElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwIHwgXAorCSAgICAgICAoMSA8PCBJRUVFODAyMTFfSFRfQ0FQX1JYX1NUQkNfU0hJRlQpLCBcCiAJLmh0X3N1cHBvcnRlZCA9IHRydWUsIFwKIAkuYW1wZHVfZmFjdG9yID0gSUVFRTgwMjExX0hUX01BWF9BTVBEVV84SywgXAogCS5hbXBkdV9kZW5zaXR5ID0gSUVFRTgwMjExX0hUX01QRFVfREVOU0lUWV84LCBcCkBAIC0zMTQyLDEyICszNjUyLDE4IEBACiAJLnN0b3AgPSB3bDEyNzFfb3Bfc3RvcCwKIAkuYWRkX2ludGVyZmFjZSA9IHdsMTI3MV9vcF9hZGRfaW50ZXJmYWNlLAogCS5yZW1vdmVfaW50ZXJmYWNlID0gd2wxMjcxX29wX3JlbW92ZV9pbnRlcmZhY2UsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSB3bDEyNzFfb3Bfc3VzcGVuZCwKKwkucmVzdW1lID0gd2wxMjcxX29wX3Jlc3VtZSwKKyNlbmRpZgogCS5jb25maWcgPSB3bDEyNzFfb3BfY29uZmlnLAogCS5wcmVwYXJlX211bHRpY2FzdCA9IHdsMTI3MV9vcF9wcmVwYXJlX211bHRpY2FzdCwKIAkuY29uZmlndXJlX2ZpbHRlciA9IHdsMTI3MV9vcF9jb25maWd1cmVfZmlsdGVyLAogCS50eCA9IHdsMTI3MV9vcF90eCwKIAkuc2V0X2tleSA9IHdsMTI3MV9vcF9zZXRfa2V5LAogCS5od19zY2FuID0gd2wxMjcxX29wX2h3X3NjYW4sCisJLnNjaGVkX3NjYW5fc3RhcnQgPSB3bDEyNzFfb3Bfc2NoZWRfc2Nhbl9zdGFydCwKKwkuc2NoZWRfc2Nhbl9zdG9wID0gd2wxMjcxX29wX3NjaGVkX3NjYW5fc3RvcCwKIAkuYnNzX2luZm9fY2hhbmdlZCA9IHdsMTI3MV9vcF9ic3NfaW5mb19jaGFuZ2VkLAogCS5zZXRfZnJhZ190aHJlc2hvbGQgPSB3bDEyNzFfb3Bfc2V0X2ZyYWdfdGhyZXNob2xkLAogCS5zZXRfcnRzX3RocmVzaG9sZCA9IHdsMTI3MV9vcF9zZXRfcnRzX3RocmVzaG9sZCwKQEAgLTMxNTcsNiArMzY3Myw3IEBACiAJLnN0YV9hZGQgPSB3bDEyNzFfb3Bfc3RhX2FkZCwKIAkuc3RhX3JlbW92ZSA9IHdsMTI3MV9vcF9zdGFfcmVtb3ZlLAogCS5hbXBkdV9hY3Rpb24gPSB3bDEyNzFfb3BfYW1wZHVfYWN0aW9uLAorCS50eF9mcmFtZXNfcGVuZGluZyA9IHdsMTI3MV90eF9mcmFtZXNfcGVuZGluZywKIAlDRkc4MDIxMV9URVNUTU9ERV9DTUQod2wxMjcxX3RtX2NtZCkKIH07CiAKQEAgLTMyMDcsOCArMzcyNCw3IEBACiAJdW5zaWduZWQgbG9uZyByZXM7CiAJaW50IHJldDsKIAotCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZyZXMpOwotCisJcmV0ID0ga3N0cnRvdWwoYnVmLCAxMCwgJnJlcyk7CiAJaWYgKHJldCA8IDApIHsKIAkJd2wxMjcxX3dhcm5pbmcoImluY29ycmVjdCB2YWx1ZSB3cml0dGVuIHRvIGJ0X2NvZXhfbW9kZSIpOwogCQlyZXR1cm4gY291bnQ7CkBAIC0zMjczLDcgKzM3ODksMTEgQEAKIAogCXJldCA9IHdsMTI3MV9mZXRjaF9udnMod2wpOwogCWlmIChyZXQgPT0gMCkgewotCQl1OCAqbnZzX3B0ciA9ICh1OCAqKXdsLT5udnMtPm52czsKKwkJLyogTk9URTogVGhlIHdsLT5udnMtPm52cyBlbGVtZW50IG11c3QgYmUgZmlyc3QsIGluCisJCSAqIG9yZGVyIHRvIHNpbXBsaWZ5IHRoZSBjYXN0aW5nLCB3ZSBhc3N1bWUgaXQgaXMgYXQKKwkJICogdGhlIGJlZ2lubmluZyBvZiB0aGUgd2wtPm52cyBzdHJ1Y3R1cmUuCisJCSAqLworCQl1OCAqbnZzX3B0ciA9ICh1OCAqKXdsLT5udnM7CiAKIAkJd2wtPm1hY19hZGRyWzBdID0gbnZzX3B0clsxMV07CiAJCXdsLT5tYWNfYWRkclsxXSA9IG52c19wdHJbMTBdOwpAQCAtMzM0Miw2ICszODYyLDcgQEAKIAkJSUVFRTgwMjExX0hXX0NPTk5FQ1RJT05fTU9OSVRPUiB8CiAJCUlFRUU4MDIxMV9IV19TVVBQT1JUU19DUU1fUlNTSSB8CiAJCUlFRUU4MDIxMV9IV19SRVBPUlRTX1RYX0FDS19TVEFUVVMgfAorCQlJRUVFODAyMTFfSFdfU1BFQ1RSVU1fTUdNVCB8CiAJCUlFRUU4MDIxMV9IV19BUF9MSU5LX1BTOwogCiAJd2wtPmh3LT53aXBoeS0+Y2lwaGVyX3N1aXRlcyA9IGNpcGhlcl9zdWl0ZXM7CkBAIC0zMzU4LDYgKzM4NzksMTAgQEAKIAl3bC0+aHctPndpcGh5LT5tYXhfc2Nhbl9pZV9sZW4gPSBXTDEyNzFfQ01EX1RFTVBMX01BWF9TSVpFIC0KIAkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hlYWRlcik7CiAKKwkvKiBtYWtlIHN1cmUgYWxsIG91ciBjaGFubmVscyBmaXQgaW4gdGhlIHNjYW5uZWRfY2ggYml0bWFzayAqLworCUJVSUxEX0JVR19PTihBUlJBWV9TSVpFKHdsMTI3MV9jaGFubmVscykgKworCQkgICAgIEFSUkFZX1NJWkUod2wxMjcxX2NoYW5uZWxzXzVnaHopID4KKwkJICAgICBXTDEyNzFfTUFYX0NIQU5ORUxTKTsKIAkvKgogCSAqIFdlIGtlZXAgbG9jYWwgY29waWVzIG9mIHRoZSBiYW5kIHN0cnVjdHMgYmVjYXVzZSB3ZSBuZWVkIHRvCiAJICogbW9kaWZ5IHRoZW0gb24gYSBwZXItZGV2aWNlIGJhc2lzLgpAQCAtMzQ1OCw2ICszOTgzLDggQEAKIAl3bC0+YXBfcHNfbWFwID0gMDsKIAl3bC0+YXBfZndfcHNfbWFwID0gMDsKIAl3bC0+cXVpcmtzID0gMDsKKwl3bC0+cGxhdGZvcm1fcXVpcmtzID0gMDsKKwl3bC0+c2NoZWRfc2Nhbm5pbmcgPSBmYWxzZTsKIAogCW1lbXNldCh3bC0+dHhfZnJhbWVzX21hcCwgMCwgc2l6ZW9mKHdsLT50eF9mcmFtZXNfbWFwKSk7CiAJZm9yIChpID0gMDsgaSA8IEFDWF9UWF9ERVNDUklQVE9SUzsgaSsrKQpAQCAtMzQ3OCwxMSArNDAwNSwxNyBAQAogCQlnb3RvIGVycl9odzsKIAl9CiAKKwl3bC0+ZHVtbXlfcGFja2V0ID0gd2wxMnh4X2FsbG9jX2R1bW15X3BhY2tldCh3bCk7CisJaWYgKCF3bC0+ZHVtbXlfcGFja2V0KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2FnZ3I7CisJfQorCiAJLyogUmVnaXN0ZXIgcGxhdGZvcm0gZGV2aWNlICovCiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKHdsLT5wbGF0X2Rldik7CiAJaWYgKHJldCkgewogCQl3bDEyNzFfZXJyb3IoImNvdWxkbid0IHJlZ2lzdGVyIHBsYXRmb3JtIGRldmljZSIpOwotCQlnb3RvIGVycl9hZ2dyOworCQlnb3RvIGVycl9kdW1teV9wYWNrZXQ7CiAJfQogCWRldl9zZXRfZHJ2ZGF0YSgmd2wtPnBsYXRfZGV2LT5kZXYsIHdsKTsKIApAQCAtMzUwOCw2ICs0MDQxLDkgQEAKIGVycl9wbGF0Zm9ybToKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih3bC0+cGxhdF9kZXYpOwogCitlcnJfZHVtbXlfcGFja2V0OgorCWRldl9rZnJlZV9za2Iod2wtPmR1bW15X3BhY2tldCk7CisKIGVycl9hZ2dyOgogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpd2wtPmFnZ3JfYnVmLCBvcmRlcik7CiAKQEAgLTM1MjcsNiArNDA2Myw3IEBACiBpbnQgd2wxMjcxX2ZyZWVfaHcoc3RydWN0IHdsMTI3MSAqd2wpCiB7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIod2wtPnBsYXRfZGV2KTsKKwlkZXZfa2ZyZWVfc2tiKHdsLT5kdW1teV9wYWNrZXQpOwogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpd2wtPmFnZ3JfYnVmLAogCQkJZ2V0X29yZGVyKFdMMTI3MV9BR0dSX0JVRkZFUl9TSVpFKSk7CiAJa2ZyZWUod2wtPnBsYXRfZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9wcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3BzLmMKaW5kZXggOTcxZjEzZS4uYjU5YjY3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3BzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3BzLmMKQEAgLTQzLDYgKzQzLDEwIEBACiAJaWYgKHVubGlrZWx5KHdsLT5zdGF0ZSA9PSBXTDEyNzFfU1RBVEVfT0ZGKSkKIAkJZ290byBvdXQ7CiAKKwkvKiBvdXIgd29yayBtaWdodCBoYXZlIGJlZW4gYWxyZWFkeSBjYW5jZWxsZWQgKi8KKwlpZiAodW5saWtlbHkoIXRlc3RfYml0KFdMMTI3MV9GTEFHX0VMUF9SRVFVRVNURUQsICZ3bC0+ZmxhZ3MpKSkKKwkJZ290byBvdXQ7CisKIAlpZiAodGVzdF9iaXQoV0wxMjcxX0ZMQUdfSU5fRUxQLCAmd2wtPmZsYWdzKSB8fAogCSAgICAoIXRlc3RfYml0KFdMMTI3MV9GTEFHX1BTTSwgJndsLT5mbGFncykgJiYKIAkgICAgICF0ZXN0X2JpdChXTDEyNzFfRkxBR19JRExFLCAmd2wtPmZsYWdzKSkpCkBAIC02MSwxMiArNjUsMTYgQEAKIC8qIFJvdXRpbmVzIHRvIHRvZ2dsZSBzbGVlcCBtb2RlIHdoaWxlIGluIEVMUCAqLwogdm9pZCB3bDEyNzFfcHNfZWxwX3NsZWVwKHN0cnVjdCB3bDEyNzEgKndsKQogewotCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19QU00sICZ3bC0+ZmxhZ3MpIHx8Ci0JICAgIHRlc3RfYml0KFdMMTI3MV9GTEFHX0lETEUsICZ3bC0+ZmxhZ3MpKSB7Ci0JCWNhbmNlbF9kZWxheWVkX3dvcmsoJndsLT5lbHBfd29yayk7Ci0JCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsod2wtPmh3LCAmd2wtPmVscF93b3JrLAotCQkJCQkgICAgIG1zZWNzX3RvX2ppZmZpZXMoRUxQX0VOVFJZX0RFTEFZKSk7Ci0JfQorCS8qIHdlIHNob3VsZG4ndCBnZXQgY29uc2VjdXRpdmUgc2xlZXAgcmVxdWVzdHMgKi8KKwlpZiAoV0FSTl9PTih0ZXN0X2FuZF9zZXRfYml0KFdMMTI3MV9GTEFHX0VMUF9SRVFVRVNURUQsICZ3bC0+ZmxhZ3MpKSkKKwkJcmV0dXJuOworCisJaWYgKCF0ZXN0X2JpdChXTDEyNzFfRkxBR19QU00sICZ3bC0+ZmxhZ3MpICYmCisJICAgICF0ZXN0X2JpdChXTDEyNzFfRkxBR19JRExFLCAmd2wtPmZsYWdzKSkKKwkJcmV0dXJuOworCisJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayh3bC0+aHcsICZ3bC0+ZWxwX3dvcmssCisJCQkJICAgICBtc2Vjc190b19qaWZmaWVzKEVMUF9FTlRSWV9ERUxBWSkpOwogfQogCiBpbnQgd2wxMjcxX3BzX2VscF93YWtldXAoc3RydWN0IHdsMTI3MSAqd2wpCkBAIC03Nyw2ICs4NSwxNiBAQAogCXUzMiBzdGFydF90aW1lID0gamlmZmllczsKIAlib29sIHBlbmRpbmcgPSBmYWxzZTsKIAorCS8qCisJICogd2UgbWlnaHQgdHJ5IHRvIHdha2UgdXAgZXZlbiBpZiB3ZSBkaWRuJ3QgZ28gdG8gc2xlZXAKKwkgKiBiZWZvcmUgKGUuZy4gb24gYm9vdCkKKwkgKi8KKwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChXTDEyNzFfRkxBR19FTFBfUkVRVUVTVEVELCAmd2wtPmZsYWdzKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBkb24ndCBjYW5jZWxfc3luYyBhcyBpdCBtaWdodCBjb250ZW5kIGZvciBhIG11dGV4IGFuZCBkZWFkbG9jayAqLworCWNhbmNlbF9kZWxheWVkX3dvcmsoJndsLT5lbHBfd29yayk7CisKIAlpZiAoIXRlc3RfYml0KFdMMTI3MV9GTEFHX0lOX0VMUCwgJndsLT5mbGFncykpCiAJCXJldHVybiAwOwogCkBAIC0xNDksOSArMTY3LDYgQEAKIAljYXNlIFNUQVRJT05fQUNUSVZFX01PREU6CiAJZGVmYXVsdDoKIAkJd2wxMjcxX2RlYnVnKERFQlVHX1BTTSwgImxlYXZpbmcgcHNtIik7Ci0JCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwogCiAJCS8qIGRpc2FibGUgYmVhY29uIGVhcmx5IHRlcm1pbmF0aW9uICovCiAJCXJldCA9IHdsMTI3MV9hY3hfYmV0X2VuYWJsZSh3bCwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3BzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcHMuaAppbmRleCBjNDFiZDBhLi4yNWViOWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcHMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcHMuaApAQCAtMzUsNCArMzUsNiBAQAogdm9pZCB3bDEyNzFfcHNfbGlua19zdGFydChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggaGxpZCwgYm9vbCBjbGVhbl9xdWV1ZXMpOwogdm9pZCB3bDEyNzFfcHNfbGlua19lbmQoc3RydWN0IHdsMTI3MSAqd2wsIHU4IGhsaWQpOwogCisjZGVmaW5lIFdMMTI3MV9QU19DT01QTEVURV9USU1FT1VUIDUwMAorCiAjZW5kaWYgLyogX19XTDEyNzFfUFNfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcmVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcmVnLmgKaW5kZXggOTkwOTYwNy4uNDQwYTRlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3JlZy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9yZWcuaApAQCAtMjA3LDYgKzIwNyw4IEBACiAKICNkZWZpbmUgQ0hJUF9JRF8xMjcxX1BHMTAgICAgICAgICAgICAgICgweDQwMzAxMDEpCiAjZGVmaW5lIENISVBfSURfMTI3MV9QRzIwICAgICAgICAgICAgICAoMHg0MDMwMTExKQorI2RlZmluZSBDSElQX0lEXzEyODNfUEcxMCAgICAgICAgICAgICAgKDB4MDUwMzAxMDEpCisjZGVmaW5lIENISVBfSURfMTI4M19QRzIwICAgICAgICAgICAgICAoMHgwNTAzMDExMSkKIAogI2RlZmluZSBFTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHg1NDUwKQogCkBAIC00NTIsMjQgKzQ1NCwxMSBAQAogI2RlZmluZSBISV9DRkdfVUFSVF9UWF9PVVRfR1BJT18xNCAgMHgwMDAwMDIwMAogI2RlZmluZSBISV9DRkdfVUFSVF9UWF9PVVRfR1BJT183ICAgMHgwMDAwMDQwMAogCi0vKgotICogTk9URTogVVNFX0FDVElWRV9ISUdIIGNvbXBpbGF0aW9uIGZsYWcgc2hvdWxkIGJlIGRlZmluZWQgaW4gbWFrZWZpbGUKLSAqICAgICAgIGZvciBwbGF0Zm9ybXMgdXNpbmcgYWN0aXZlIGhpZ2ggaW50ZXJydXB0IGxldmVsCi0gKi8KLSNpZmRlZiBVU0VfQUNUSVZFX0hJR0gKICNkZWZpbmUgSElfQ0ZHX0RFRl9WQUwgICAgICAgICAgICAgIFwKIAkoSElfQ0ZHX1VBUlRfRU5BQkxFIHwgICAgICAgIFwKIAlISV9DRkdfUlNUMjMyX0VOQUJMRSB8ICAgICAgXAogCUhJX0NGR19DTE9DS19SRVFfU0VMRUNUIHwgICBcCiAJSElfQ0ZHX0hPU1RfSU5UX0VOQUJMRSkKLSNlbHNlCi0jZGVmaW5lIEhJX0NGR19ERUZfVkFMICAgICAgICAgICAgICBcCi0JKEhJX0NGR19VQVJUX0VOQUJMRSB8ICAgICAgICBcCi0JSElfQ0ZHX1JTVDIzMl9FTkFCTEUgfCAgICAgIFwKLQlISV9DRkdfQ0xPQ0tfUkVRX1NFTEVDVCB8ICAgXAotCUhJX0NGR19IT1NUX0lOVF9FTkFCTEUpCi0KLSNlbmRpZgogCiAjZGVmaW5lIFJFRl9GUkVRXzE5XzIgICAgICAgICAgICAgICAgICAgICAgIDAKICNkZWZpbmUgUkVGX0ZSRVFfMjZfMCAgICAgICAgICAgICAgICAgICAgICAgMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcnguYwppbmRleCA5MTliNTlmLi43MDA5MTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcnguYwpAQCAtNDgsMTggKzQ4LDE0IEBACiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMsCiAJCQkgICAgIHU4IGJlYWNvbikKIHsKLQllbnVtIGllZWU4MDIxMV9iYW5kIGRlc2NfYmFuZDsKLQogCW1lbXNldChzdGF0dXMsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cykpOwogCi0Jc3RhdHVzLT5iYW5kID0gd2wtPmJhbmQ7Ci0KIAlpZiAoKGRlc2MtPmZsYWdzICYgV0wxMjcxX1JYX0RFU0NfQkFORF9NQVNLKSA9PSBXTDEyNzFfUlhfREVTQ19CQU5EX0JHKQotCQlkZXNjX2JhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOworCQlzdGF0dXMtPmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwogCWVsc2UKLQkJZGVzY19iYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWjsKKwkJc3RhdHVzLT5iYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWjsKIAotCXN0YXR1cy0+cmF0ZV9pZHggPSB3bDEyNzFfcmF0ZV90b19pZHgoZGVzYy0+cmF0ZSwgZGVzY19iYW5kKTsKKwlzdGF0dXMtPnJhdGVfaWR4ID0gd2wxMjcxX3JhdGVfdG9faWR4KGRlc2MtPnJhdGUsIHN0YXR1cy0+YmFuZCk7CiAKICNpZmRlZiBDT05GSUdfV0wxMlhYX0hUCiAJLyogMTFuIHN1cHBvcnQgKi8KQEAgLTc2LDE1ICs3MiwxOSBAQAogCSAqLwogCXdsLT5ub2lzZSA9IGRlc2MtPnJzc2kgLSAoZGVzYy0+c25yID4+IDEpOwogCi0Jc3RhdHVzLT5mcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KGRlc2MtPmNoYW5uZWwsIGRlc2NfYmFuZCk7CisJc3RhdHVzLT5mcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KGRlc2MtPmNoYW5uZWwsCisJCQkJCQkgICAgICBzdGF0dXMtPmJhbmQpOwogCiAJaWYgKGRlc2MtPmZsYWdzICYgV0wxMjcxX1JYX0RFU0NfRU5DUllQVF9NQVNLKSB7Ci0JCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0lWX1NUUklQUEVEIHwgUlhfRkxBR19NTUlDX1NUUklQUEVEOworCQl1OCBkZXNjX2Vycl9jb2RlID0gZGVzYy0+c3RhdHVzICYgV0wxMjcxX1JYX0RFU0NfU1RBVFVTX01BU0s7CiAKLQkJaWYgKGxpa2VseSghKGRlc2MtPnN0YXR1cyAmIFdMMTI3MV9SWF9ERVNDX0RFQ1JZUFRfRkFJTCkpKQotCQkJc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfREVDUllQVEVEOwotCQlpZiAodW5saWtlbHkoZGVzYy0+c3RhdHVzICYgV0wxMjcxX1JYX0RFU0NfTUlDX0ZBSUwpKQorCQlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19JVl9TVFJJUFBFRCB8IFJYX0ZMQUdfTU1JQ19TVFJJUFBFRCB8CisJCQkJUlhfRkxBR19ERUNSWVBURUQ7CisKKwkJaWYgKHVubGlrZWx5KGRlc2NfZXJyX2NvZGUgPT0gV0wxMjcxX1JYX0RFU0NfTUlDX0ZBSUwpKSB7CiAJCQlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19NTUlDX0VSUk9SOworCQkJd2wxMjcxX3dhcm5pbmcoIk1pY2hhZWwgTUlDIGVycm9yIik7CisJCX0KIAl9CiB9CiAKQEAgLTEwMyw2ICsxMDMsMjUgQEAKIAlpZiAodW5saWtlbHkod2wtPnN0YXRlID09IFdMMTI3MV9TVEFURV9QTFQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCS8qIHRoZSBkYXRhIHJlYWQgc3RhcnRzIHdpdGggdGhlIGRlc2NyaXB0b3IgKi8KKwlkZXNjID0gKHN0cnVjdCB3bDEyNzFfcnhfZGVzY3JpcHRvciAqKSBkYXRhOworCisJc3dpdGNoIChkZXNjLT5zdGF0dXMgJiBXTDEyNzFfUlhfREVTQ19TVEFUVVNfTUFTSykgeworCS8qIGRpc2NhcmQgY29ycnVwdGVkIHBhY2tldHMgKi8KKwljYXNlIFdMMTI3MV9SWF9ERVNDX0RSSVZFUl9SWF9RX0ZBSUw6CisJY2FzZSBXTDEyNzFfUlhfREVTQ19ERUNSWVBUX0ZBSUw6CisJCXdsMTI3MV93YXJuaW5nKCJjb3JydXB0ZWQgcGFja2V0IGluIFJYIHdpdGggc3RhdHVzOiAweCV4IiwKKwkJCSAgICAgICBkZXNjLT5zdGF0dXMgJiBXTDEyNzFfUlhfREVTQ19TVEFUVVNfTUFTSyk7CisJCXJldHVybiAtRUlOVkFMOworCWNhc2UgV0wxMjcxX1JYX0RFU0NfU1VDQ0VTUzoKKwljYXNlIFdMMTI3MV9SWF9ERVNDX01JQ19GQUlMOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQl3bDEyNzFfZXJyb3IoImludmFsaWQgUlggZGVzY3JpcHRvciBzdGF0dXM6IDB4JXgiLAorCQkJICAgICBkZXNjLT5zdGF0dXMgJiBXTDEyNzFfUlhfREVTQ19TVEFUVVNfTUFTSyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCXNrYiA9IF9fZGV2X2FsbG9jX3NrYihsZW5ndGgsIEdGUF9LRVJORUwpOwogCWlmICghc2tiKSB7CiAJCXdsMTI3MV9lcnJvcigiQ291bGRuJ3QgYWxsb2NhdGUgUlggZnJhbWUiKTsKQEAgLTExMiw5ICsxMzEsNiBAQAogCWJ1ZiA9IHNrYl9wdXQoc2tiLCBsZW5ndGgpOwogCW1lbWNweShidWYsIGRhdGEsIGxlbmd0aCk7CiAKLQkvKiB0aGUgZGF0YSByZWFkIHN0YXJ0cyB3aXRoIHRoZSBkZXNjcmlwdG9yICovCi0JZGVzYyA9IChzdHJ1Y3Qgd2wxMjcxX3J4X2Rlc2NyaXB0b3IgKikgYnVmOwotCiAJLyogbm93IHdlIHB1bGwgdGhlIGRlc2NyaXB0b3Igb3V0IG9mIHRoZSBidWZmZXIgKi8KIAlza2JfcHVsbChza2IsIHNpemVvZigqZGVzYykpOwogCkBAIC0xMjQsNyArMTQwLDggQEAKIAogCXdsMTI3MV9yeF9zdGF0dXMod2wsIGRlc2MsIElFRUU4MDIxMV9TS0JfUlhDQihza2IpLCBiZWFjb24pOwogCi0Jd2wxMjcxX2RlYnVnKERFQlVHX1JYLCAicnggc2tiIDB4JXA6ICVkIEIgJXMiLCBza2IsIHNrYi0+bGVuLAorCXdsMTI3MV9kZWJ1ZyhERUJVR19SWCwgInJ4IHNrYiAweCVwOiAlZCBCICVzIiwgc2tiLAorCQkgICAgIHNrYi0+bGVuIC0gZGVzYy0+cGFkX2xlbiwKIAkJICAgICBiZWFjb24gPyAiYmVhY29uIiA6ICIiKTsKIAogCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSBkZXNjLT5wYWRfbGVuKTsKQEAgLTE2MywxOCArMTgwLDI1IEBACiAJCQlicmVhazsKIAkJfQogCi0JCS8qCi0JCSAqIENob29zZSB0aGUgYmxvY2sgd2Ugd2FudCB0byByZWFkCi0JCSAqIEZvciBhZ2dyZWdhdGVkIHBhY2tldHMsIG9ubHkgdGhlIGZpcnN0IG1lbW9yeSBibG9jayBzaG91bGQKLQkJICogYmUgcmV0cmlldmVkLiBUaGUgRlcgdGFrZXMgY2FyZSBvZiB0aGUgcmVzdC4KLQkJICovCi0JCW1lbV9ibG9jayA9IHdsMTI3MV9yeF9nZXRfbWVtX2Jsb2NrKHN0YXR1cywgZHJ2X3J4X2NvdW50ZXIpOwotCQl3bC0+cnhfbWVtX3Bvb2xfYWRkci5hZGRyID0gKG1lbV9ibG9jayA8PCA4KSArCi0JCQlsZTMyX3RvX2NwdSh3bF9tZW1fbWFwLT5wYWNrZXRfbWVtb3J5X3Bvb2xfc3RhcnQpOwotCQl3bC0+cnhfbWVtX3Bvb2xfYWRkci5hZGRyX2V4dHJhID0KLQkJCXdsLT5yeF9tZW1fcG9vbF9hZGRyLmFkZHIgKyA0OwotCQl3bDEyNzFfd3JpdGUod2wsIFdMMTI3MV9TTFZfUkVHX0RBVEEsICZ3bC0+cnhfbWVtX3Bvb2xfYWRkciwKLQkJCQlzaXplb2Yod2wtPnJ4X21lbV9wb29sX2FkZHIpLCBmYWxzZSk7CisJCWlmICh3bC0+Y2hpcC5pZCAhPSBDSElQX0lEXzEyODNfUEcyMCkgeworCQkJLyoKKwkJCSAqIENob29zZSB0aGUgYmxvY2sgd2Ugd2FudCB0byByZWFkCisJCQkgKiBGb3IgYWdncmVnYXRlZCBwYWNrZXRzLCBvbmx5IHRoZSBmaXJzdCBtZW1vcnkgYmxvY2sKKwkJCSAqIHNob3VsZCBiZSByZXRyaWV2ZWQuIFRoZSBGVyB0YWtlcyBjYXJlIG9mIHRoZSByZXN0LgorCQkJICovCisJCQltZW1fYmxvY2sgPSB3bDEyNzFfcnhfZ2V0X21lbV9ibG9jayhzdGF0dXMsCisJCQkJCQkJICAgIGRydl9yeF9jb3VudGVyKTsKKworCQkJd2wtPnJ4X21lbV9wb29sX2FkZHIuYWRkciA9IChtZW1fYmxvY2sgPDwgOCkgKworCQkJICAgbGUzMl90b19jcHUod2xfbWVtX21hcC0+cGFja2V0X21lbW9yeV9wb29sX3N0YXJ0KTsKKworCQkJd2wtPnJ4X21lbV9wb29sX2FkZHIuYWRkcl9leHRyYSA9CisJCQkJd2wtPnJ4X21lbV9wb29sX2FkZHIuYWRkciArIDQ7CisKKwkJCXdsMTI3MV93cml0ZSh3bCwgV0wxMjcxX1NMVl9SRUdfREFUQSwKKwkJCQkgICAgICZ3bC0+cnhfbWVtX3Bvb2xfYWRkciwKKwkJCQkgICAgIHNpemVvZih3bC0+cnhfbWVtX3Bvb2xfYWRkciksIGZhbHNlKTsKKwkJfQogCiAJCS8qIFJlYWQgYWxsIGF2YWlsYWJsZSBwYWNrZXRzIGF0IG9uY2UgKi8KIAkJd2wxMjcxX3JlYWQod2wsIFdMMTI3MV9TTFZfTUVNX0RBVEEsIHdsLT5hZ2dyX2J1ZiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zY2FuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc2Nhbi5jCmluZGV4IDQyMDY1M2EuLmYzN2U1YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NjYW4uYwpAQCAtNDgsOCArNDgsNyBAQAogCQlnb3RvIG91dDsKIAogCXdsLT5zY2FuLnN0YXRlID0gV0wxMjcxX1NDQU5fU1RBVEVfSURMRTsKLQlrZnJlZSh3bC0+c2Nhbi5zY2FubmVkX2NoKTsKLQl3bC0+c2Nhbi5zY2FubmVkX2NoID0gTlVMTDsKKwltZW1zZXQod2wtPnNjYW4uc2Nhbm5lZF9jaCwgMCwgc2l6ZW9mKHdsLT5zY2FuLnNjYW5uZWRfY2gpKTsKIAl3bC0+c2Nhbi5yZXEgPSBOVUxMOwogCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZCh3bC0+aHcsIGZhbHNlKTsKIApAQCAtODcsNyArODYsNyBAQAogCiAJCWZsYWdzID0gcmVxLT5jaGFubmVsc1tpXS0+ZmxhZ3M7CiAKLQkJaWYgKCF3bC0+c2Nhbi5zY2FubmVkX2NoW2ldICYmCisJCWlmICghdGVzdF9iaXQoaSwgd2wtPnNjYW4uc2Nhbm5lZF9jaCkgJiYKIAkJICAgICEoZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkgJiYKIAkJICAgICgoISEoZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pKSA9PSBwYXNzaXZlKSAmJgogCQkgICAgKHJlcS0+Y2hhbm5lbHNbaV0tPmJhbmQgPT0gYmFuZCkpIHsKQEAgLTEyNCw3ICsxMjMsNyBAQAogCQkJbWVtc2V0KCZjaGFubmVsc1tqXS5ic3NpZF9tc2IsIDB4ZmYsIDIpOwogCiAJCQkvKiBNYXJrIHRoZSBjaGFubmVscyB3ZSBhbHJlYWR5IHVzZWQgKi8KLQkJCXdsLT5zY2FuLnNjYW5uZWRfY2hbaV0gPSB0cnVlOworCQkJc2V0X2JpdChpLCB3bC0+c2Nhbi5zY2FubmVkX2NoKTsKIAogCQkJaisrOwogCQl9CkBAIC0yOTEsNiArMjkwLDEyIEBACiBpbnQgd2wxMjcxX3NjYW4oc3RydWN0IHdsMTI3MSAqd2wsIGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCiAJCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSkKIHsKKwkvKgorCSAqIGNmZzgwMjExIHNob3VsZCBndWFyYW50ZWUgdGhhdCB3ZSBkb24ndCBnZXQgbW9yZSBjaGFubmVscworCSAqIHRoYW4gd2hhdCB3ZSBoYXZlIHJlZ2lzdGVyZWQuCisJICovCisJQlVHX09OKHJlcS0+bl9jaGFubmVscyA+IFdMMTI3MV9NQVhfQ0hBTk5FTFMpOworCiAJaWYgKHdsLT5zY2FuLnN0YXRlICE9IFdMMTI3MV9TQ0FOX1NUQVRFX0lETEUpCiAJCXJldHVybiAtRUJVU1k7CiAKQEAgLTMwNCwxMCArMzA5LDggQEAKIAl9CiAKIAl3bC0+c2Nhbi5yZXEgPSByZXE7CisJbWVtc2V0KHdsLT5zY2FuLnNjYW5uZWRfY2gsIDAsIHNpemVvZih3bC0+c2Nhbi5zY2FubmVkX2NoKSk7CiAKLQl3bC0+c2Nhbi5zY2FubmVkX2NoID0ga2NhbGxvYyhyZXEtPm5fY2hhbm5lbHMsCi0JCQkJICAgICAgc2l6ZW9mKCp3bC0+c2Nhbi5zY2FubmVkX2NoKSwKLQkJCQkgICAgICBHRlBfS0VSTkVMKTsKIAkvKiB3ZSBhc3N1bWUgZmFpbHVyZSBzbyB0aGF0IHRpbWVvdXQgc2NlbmFyaW9zIGFyZSBoYW5kbGVkIGNvcnJlY3RseSAqLwogCXdsLT5zY2FuLmZhaWxlZCA9IHRydWU7CiAJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayh3bC0+aHcsICZ3bC0+c2Nhbl9jb21wbGV0ZV93b3JrLApAQCAtMzE3LDMgKzMyMCwyNDYgQEAKIAogCXJldHVybiAwOwogfQorCitzdGF0aWMgaW50Cit3bDEyNzFfc2Nhbl9nZXRfc2NoZWRfc2Nhbl9jaGFubmVscyhzdHJ1Y3Qgd2wxMjcxICp3bCwKKwkJCQkgICAgc3RydWN0IGNmZzgwMjExX3NjaGVkX3NjYW5fcmVxdWVzdCAqcmVxLAorCQkJCSAgICBzdHJ1Y3QgY29ubl9zY2FuX2NoX3BhcmFtcyAqY2hhbm5lbHMsCisJCQkJICAgIHUzMiBiYW5kLCBib29sIHJhZGFyLCBib29sIHBhc3NpdmUsCisJCQkJICAgIGludCBzdGFydCkKK3sKKwlzdHJ1Y3QgY29uZl9zY2hlZF9zY2FuX3NldHRpbmdzICpjID0gJndsLT5jb25mLnNjaGVkX3NjYW47CisJaW50IGksIGo7CisJdTMyIGZsYWdzOworCisJZm9yIChpID0gMCwgaiA9IHN0YXJ0OworCSAgICAgaSA8IHJlcS0+bl9jaGFubmVscyAmJiBqIDwgTUFYX0NIQU5ORUxTX0FMTF9CQU5EUzsKKwkgICAgIGkrKykgeworCQlmbGFncyA9IHJlcS0+Y2hhbm5lbHNbaV0tPmZsYWdzOworCisJCWlmICghKGZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpICYmCisJCSAgICAoKGZsYWdzICYgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOKSA9PSBwYXNzaXZlKSAmJgorCQkgICAgKChmbGFncyAmIElFRUU4MDIxMV9DSEFOX1JBREFSKSA9PSByYWRhcikgJiYKKwkJICAgIChyZXEtPmNoYW5uZWxzW2ldLT5iYW5kID09IGJhbmQpKSB7CisJCQl3bDEyNzFfZGVidWcoREVCVUdfU0NBTiwgImJhbmQgJWQsIGNlbnRlcl9mcmVxICVkICIsCisJCQkJICAgICByZXEtPmNoYW5uZWxzW2ldLT5iYW5kLAorCQkJCSAgICAgcmVxLT5jaGFubmVsc1tpXS0+Y2VudGVyX2ZyZXEpOworCQkJd2wxMjcxX2RlYnVnKERFQlVHX1NDQU4sICJod192YWx1ZSAlZCwgZmxhZ3MgJVgiLAorCQkJCSAgICAgcmVxLT5jaGFubmVsc1tpXS0+aHdfdmFsdWUsCisJCQkJICAgICByZXEtPmNoYW5uZWxzW2ldLT5mbGFncyk7CisJCQl3bDEyNzFfZGVidWcoREVCVUdfU0NBTiwgIm1heF9wb3dlciAlZCIsCisJCQkJICAgICByZXEtPmNoYW5uZWxzW2ldLT5tYXhfcG93ZXIpOworCisJCQlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pIHsKKwkJCQljaGFubmVsc1tqXS5wYXNzaXZlX2R1cmF0aW9uID0KKwkJCQkJY3B1X3RvX2xlMTYoYy0+ZHdlbGxfdGltZV9wYXNzaXZlKTsKKwkJCX0gZWxzZSB7CisJCQkJY2hhbm5lbHNbal0ubWluX2R1cmF0aW9uID0KKwkJCQkJY3B1X3RvX2xlMTYoYy0+bWluX2R3ZWxsX3RpbWVfYWN0aXZlKTsKKwkJCQljaGFubmVsc1tqXS5tYXhfZHVyYXRpb24gPQorCQkJCQljcHVfdG9fbGUxNihjLT5tYXhfZHdlbGxfdGltZV9hY3RpdmUpOworCQkJfQorCQkJY2hhbm5lbHNbal0udHhfcG93ZXJfYXR0ID0gcmVxLT5jaGFubmVsc1tqXS0+bWF4X3Bvd2VyOworCQkJY2hhbm5lbHNbal0uY2hhbm5lbCA9IHJlcS0+Y2hhbm5lbHNbaV0tPmh3X3ZhbHVlOworCisJCQlqKys7CisJCX0KKwl9CisKKwlyZXR1cm4gaiAtIHN0YXJ0OworfQorCitzdGF0aWMgaW50Cit3bDEyNzFfc2Nhbl9zY2hlZF9zY2FuX2NoYW5uZWxzKHN0cnVjdCB3bDEyNzEgKndsLAorCQkJCXN0cnVjdCBjZmc4MDIxMV9zY2hlZF9zY2FuX3JlcXVlc3QgKnJlcSwKKwkJCQlzdHJ1Y3Qgd2wxMjcxX2NtZF9zY2hlZF9zY2FuX2NvbmZpZyAqY2ZnKQoreworCWludCBpZHggPSAwOworCisJY2ZnLT5wYXNzaXZlWzBdID0KKwkJd2wxMjcxX3NjYW5fZ2V0X3NjaGVkX3NjYW5fY2hhbm5lbHMod2wsIHJlcSwgY2ZnLT5jaGFubmVscywKKwkJCQkJCSAgICBJRUVFODAyMTFfQkFORF8yR0haLAorCQkJCQkJICAgIGZhbHNlLCB0cnVlLCBpZHgpOworCWlkeCArPSBjZmctPnBhc3NpdmVbMF07CisKKwljZmctPmFjdGl2ZVswXSA9CisJCXdsMTI3MV9zY2FuX2dldF9zY2hlZF9zY2FuX2NoYW5uZWxzKHdsLCByZXEsIGNmZy0+Y2hhbm5lbHMsCisJCQkJCQkgICAgSUVFRTgwMjExX0JBTkRfMkdIWiwKKwkJCQkJCSAgICBmYWxzZSwgZmFsc2UsIGlkeCk7CisJaWR4ICs9IGNmZy0+YWN0aXZlWzBdOworCisJY2ZnLT5wYXNzaXZlWzFdID0KKwkJd2wxMjcxX3NjYW5fZ2V0X3NjaGVkX3NjYW5fY2hhbm5lbHMod2wsIHJlcSwgY2ZnLT5jaGFubmVscywKKwkJCQkJCSAgICBJRUVFODAyMTFfQkFORF81R0haLAorCQkJCQkJICAgIGZhbHNlLCB0cnVlLCBpZHgpOworCWlkeCArPSBjZmctPnBhc3NpdmVbMV07CisKKwljZmctPmFjdGl2ZVsxXSA9CisJCXdsMTI3MV9zY2FuX2dldF9zY2hlZF9zY2FuX2NoYW5uZWxzKHdsLCByZXEsIGNmZy0+Y2hhbm5lbHMsCisJCQkJCQkgICAgSUVFRTgwMjExX0JBTkRfNUdIWiwKKwkJCQkJCSAgICBmYWxzZSwgZmFsc2UsIDE0KTsKKwlpZHggKz0gY2ZnLT5hY3RpdmVbMV07CisKKwljZmctPmRmcyA9CisJCXdsMTI3MV9zY2FuX2dldF9zY2hlZF9zY2FuX2NoYW5uZWxzKHdsLCByZXEsIGNmZy0+Y2hhbm5lbHMsCisJCQkJCQkgICAgSUVFRTgwMjExX0JBTkRfNUdIWiwKKwkJCQkJCSAgICB0cnVlLCBmYWxzZSwgaWR4KTsKKwlpZHggKz0gY2ZnLT5kZnM7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfU0NBTiwgIiAgICAyLjRHSHo6IGFjdGl2ZSAlZCBwYXNzaXZlICVkIiwKKwkJICAgICBjZmctPmFjdGl2ZVswXSwgY2ZnLT5wYXNzaXZlWzBdKTsKKwl3bDEyNzFfZGVidWcoREVCVUdfU0NBTiwgIiAgICA1R0h6OiBhY3RpdmUgJWQgcGFzc2l2ZSAlZCIsCisJCSAgICAgY2ZnLT5hY3RpdmVbMV0sIGNmZy0+cGFzc2l2ZVsxXSk7CisKKwlyZXR1cm4gaWR4OworfQorCitpbnQgd2wxMjcxX3NjYW5fc2NoZWRfc2Nhbl9jb25maWcoc3RydWN0IHdsMTI3MSAqd2wsCisJCQkJICBzdHJ1Y3QgY2ZnODAyMTFfc2NoZWRfc2Nhbl9yZXF1ZXN0ICpyZXEsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3NjaGVkX3NjYW5faWVzICppZXMpCit7CisJc3RydWN0IHdsMTI3MV9jbWRfc2NoZWRfc2Nhbl9jb25maWcgKmNmZyA9IE5VTEw7CisJc3RydWN0IGNvbmZfc2NoZWRfc2Nhbl9zZXR0aW5ncyAqYyA9ICZ3bC0+Y29uZi5zY2hlZF9zY2FuOworCWludCBpLCB0b3RhbF9jaGFubmVscywgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0NNRCwgImNtZCBzY2hlZF9zY2FuIHNjYW4gY29uZmlnIik7CisKKwljZmcgPSBremFsbG9jKHNpemVvZigqY2ZnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjZmcpCisJCXJldHVybiAtRU5PTUVNOworCisJY2ZnLT5yc3NpX3RocmVzaG9sZCA9IGMtPnJzc2lfdGhyZXNob2xkOworCWNmZy0+c25yX3RocmVzaG9sZCAgPSBjLT5zbnJfdGhyZXNob2xkOworCWNmZy0+bl9wcm9iZV9yZXFzID0gYy0+bnVtX3Byb2JlX3JlcXM7CisJLyogY3ljbGVzIHNldCB0byAwIGl0IG1lYW5zIGluZmluaXRlICh1bnRpbCBtYW51YWxseSBzdG9wcGVkKSAqLworCWNmZy0+Y3ljbGVzID0gMDsKKwkvKiByZXBvcnQgQVBzIHdoZW4gYXQgbGVhc3QgMSBpcyBmb3VuZCAqLworCWNmZy0+cmVwb3J0X2FmdGVyID0gMTsKKwkvKiBkb24ndCBzdG9wIHNjYW5uaW5nIGF1dG9tYXRpY2FsbHkgd2hlbiBzb21ldGhpbmcgaXMgZm91bmQgKi8KKwljZmctPnRlcm1pbmF0ZSA9IDA7CisJY2ZnLT50YWcgPSBXTDEyNzFfU0NBTl9ERUZBVUxUX1RBRzsKKwkvKiBkb24ndCBmaWx0ZXIgb24gQlNTIHR5cGUgKi8KKwljZmctPmJzc190eXBlID0gU0NBTl9CU1NfVFlQRV9BTlk7CisJLyogY3VycmVudGx5IE5MODAyMTEgc3VwcG9ydHMgb25seSBhIHNpbmdsZSBpbnRlcnZhbCAqLworCWZvciAoaSA9IDA7IGkgPCBTQ0FOX01BWF9DWUNMRV9JTlRFUlZBTFM7IGkrKykKKwkJY2ZnLT5pbnRlcnZhbHNbaV0gPSBjcHVfdG9fbGUzMihyZXEtPmludGVydmFsKTsKKworCWlmIChyZXEtPnNzaWRzWzBdLnNzaWRfbGVuICYmIHJlcS0+c3NpZHNbMF0uc3NpZCkgeworCQljZmctPmZpbHRlcl90eXBlID0gU0NBTl9TU0lEX0ZJTFRFUl9TUEVDSUZJQzsKKwkJY2ZnLT5zc2lkX2xlbiA9IHJlcS0+c3NpZHNbMF0uc3NpZF9sZW47CisJCW1lbWNweShjZmctPnNzaWQsIHJlcS0+c3NpZHNbMF0uc3NpZCwKKwkJICAgICAgIHJlcS0+c3NpZHNbMF0uc3NpZF9sZW4pOworCX0gZWxzZSB7CisJCWNmZy0+ZmlsdGVyX3R5cGUgPSBTQ0FOX1NTSURfRklMVEVSX0FOWTsKKwkJY2ZnLT5zc2lkX2xlbiA9IDA7CisJfQorCisJdG90YWxfY2hhbm5lbHMgPSB3bDEyNzFfc2Nhbl9zY2hlZF9zY2FuX2NoYW5uZWxzKHdsLCByZXEsIGNmZyk7CisJaWYgKHRvdGFsX2NoYW5uZWxzID09IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJzY2FuIGNoYW5uZWwgbGlzdCBpcyBlbXB0eSIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoY2ZnLT5hY3RpdmVbMF0pIHsKKwkJcmV0ID0gd2wxMjcxX2NtZF9idWlsZF9wcm9iZV9yZXEod2wsIHJlcS0+c3NpZHNbMF0uc3NpZCwKKwkJCQkJCSByZXEtPnNzaWRzWzBdLnNzaWRfbGVuLAorCQkJCQkJIGllcy0+aWVbSUVFRTgwMjExX0JBTkRfMkdIWl0sCisJCQkJCQkgaWVzLT5sZW5bSUVFRTgwMjExX0JBTkRfMkdIWl0sCisJCQkJCQkgSUVFRTgwMjExX0JBTkRfMkdIWik7CisJCWlmIChyZXQgPCAwKSB7CisJCQl3bDEyNzFfZXJyb3IoIjIuNEdIeiBQUk9CRSByZXF1ZXN0IHRlbXBsYXRlIGZhaWxlZCIpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAoY2ZnLT5hY3RpdmVbMV0pIHsKKwkJcmV0ID0gd2wxMjcxX2NtZF9idWlsZF9wcm9iZV9yZXEod2wsICByZXEtPnNzaWRzWzBdLnNzaWQsCisJCQkJCQkgcmVxLT5zc2lkc1swXS5zc2lkX2xlbiwKKwkJCQkJCSBpZXMtPmllW0lFRUU4MDIxMV9CQU5EXzVHSFpdLAorCQkJCQkJIGllcy0+bGVuW0lFRUU4MDIxMV9CQU5EXzVHSFpdLAorCQkJCQkJIElFRUU4MDIxMV9CQU5EXzVHSFopOworCQlpZiAocmV0IDwgMCkgeworCQkJd2wxMjcxX2Vycm9yKCI1R0h6IFBST0JFIHJlcXVlc3QgdGVtcGxhdGUgZmFpbGVkIik7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCXdsMTI3MV9kdW1wKERFQlVHX1NDQU4sICJTQ0FOX0NGRzogIiwgY2ZnLCBzaXplb2YoKmNmZykpOworCisJcmV0ID0gd2wxMjcxX2NtZF9zZW5kKHdsLCBDTURfQ09OTkVDVElPTl9TQ0FOX0NGRywgY2ZnLAorCQkJICAgICAgc2l6ZW9mKCpjZmcpLCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfZXJyb3IoIlNDQU4gY29uZmlndXJhdGlvbiBmYWlsZWQiKTsKKwkJZ290byBvdXQ7CisJfQorb3V0OgorCWtmcmVlKGNmZyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9zY2FuX3NjaGVkX3NjYW5fc3RhcnQoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IHdsMTI3MV9jbWRfc2NoZWRfc2Nhbl9zdGFydCAqc3RhcnQ7CisJaW50IHJldCA9IDA7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQ01ELCAiY21kIHBlcmlvZGljIHNjYW4gc3RhcnQiKTsKKworCWlmICh3bC0+YnNzX3R5cGUgIT0gQlNTX1RZUEVfU1RBX0JTUykKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKCF0ZXN0X2JpdChXTDEyNzFfRkxBR19JRExFLCAmd2wtPmZsYWdzKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXN0YXJ0ID0ga3phbGxvYyhzaXplb2YoKnN0YXJ0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGFydCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzdGFydC0+dGFnID0gV0wxMjcxX1NDQU5fREVGQVVMVF9UQUc7CisKKwlyZXQgPSB3bDEyNzFfY21kX3NlbmQod2wsIENNRF9TVEFSVF9QRVJJT0RJQ19TQ0FOLCBzdGFydCwKKwkJCSAgICAgIHNpemVvZigqc3RhcnQpLCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfZXJyb3IoImZhaWxlZCB0byBzZW5kIHNjYW4gc3RhcnQgY29tbWFuZCIpOworCQlnb3RvIG91dF9mcmVlOworCX0KKworb3V0X2ZyZWU6CisJa2ZyZWUoc3RhcnQpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgd2wxMjcxX3NjYW5fc2NoZWRfc2Nhbl9yZXN1bHRzKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXdsMTI3MV9kZWJ1ZyhERUJVR19TQ0FOLCAiZ290IHBlcmlvZGljIHNjYW4gcmVzdWx0cyIpOworCisJaWVlZTgwMjExX3NjaGVkX3NjYW5fcmVzdWx0cyh3bC0+aHcpOworfQorCit2b2lkIHdsMTI3MV9zY2FuX3NjaGVkX3NjYW5fc3RvcChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF9zY2hlZF9zY2FuX3N0b3AgKnN0b3A7CisJaW50IHJldCA9IDA7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQ01ELCAiY21kIHBlcmlvZGljIHNjYW4gc3RvcCIpOworCisJLyogRklYTUU6IHdoYXQgdG8gZG8gaWYgYWxsb2MnaW5nIHRvIHN0b3AgZmFpbHM/ICovCisJc3RvcCA9IGt6YWxsb2Moc2l6ZW9mKCpzdG9wKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdG9wKSB7CisJCXdsMTI3MV9lcnJvcigiZmFpbGVkIHRvIGFsbG9jIG1lbW9yeSB0byBzZW5kIHNjaGVkIHNjYW4gc3RvcCIpOworCQlyZXR1cm47CisJfQorCisJc3RvcC0+dGFnID0gV0wxMjcxX1NDQU5fREVGQVVMVF9UQUc7CisKKwlyZXQgPSB3bDEyNzFfY21kX3NlbmQod2wsIENNRF9TVE9QX1BFUklPRElDX1NDQU4sIHN0b3AsCisJCQkgICAgICBzaXplb2YoKnN0b3ApLCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfZXJyb3IoImZhaWxlZCB0byBzZW5kIHNjaGVkIHNjYW4gc3RvcCBjb21tYW5kIik7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCXdsLT5zY2hlZF9zY2FubmluZyA9IGZhbHNlOworCitvdXRfZnJlZToKKwlrZnJlZShzdG9wKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zY2FuLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc2Nhbi5oCmluZGV4IDQyMWE3NTAuLmM4MzMxOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zY2FuLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NjYW4uaApAQCAtMzMsNiArMzMsMTIgQEAKIAkJCQljb25zdCB1OCAqaWUsIHNpemVfdCBpZV9sZW4sIHU4IGJhbmQpOwogdm9pZCB3bDEyNzFfc2Nhbl9zdG0oc3RydWN0IHdsMTI3MSAqd2wpOwogdm9pZCB3bDEyNzFfc2Nhbl9jb21wbGV0ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitpbnQgd2wxMjcxX3NjYW5fc2NoZWRfc2Nhbl9jb25maWcoc3RydWN0IHdsMTI3MSAqd2wsCisJCQkJICAgICBzdHJ1Y3QgY2ZnODAyMTFfc2NoZWRfc2Nhbl9yZXF1ZXN0ICpyZXEsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3NjaGVkX3NjYW5faWVzICppZXMpOworaW50IHdsMTI3MV9zY2FuX3NjaGVkX3NjYW5fc3RhcnQoc3RydWN0IHdsMTI3MSAqd2wpOwordm9pZCB3bDEyNzFfc2Nhbl9zY2hlZF9zY2FuX3N0b3Aoc3RydWN0IHdsMTI3MSAqd2wpOwordm9pZCB3bDEyNzFfc2Nhbl9zY2hlZF9zY2FuX3Jlc3VsdHMoc3RydWN0IHdsMTI3MSAqd2wpOwogCiAjZGVmaW5lIFdMMTI3MV9TQ0FOX01BWF9DSEFOTkVMUyAgICAgICAyNAogI2RlZmluZSBXTDEyNzFfU0NBTl9ERUZBVUxUX1RBRyAgICAgICAgMQpAQCAtMTA2LDQgKzExMiwxMTIgQEAKIAlfX2xlMzIgdGltZW91dDsKIH0gX19wYWNrZWQ7CiAKKyNkZWZpbmUgTUFYX0NIQU5ORUxTX0FMTF9CQU5EUyA0MQorI2RlZmluZSBTQ0FOX01BWF9DWUNMRV9JTlRFUlZBTFMgMTYKKyNkZWZpbmUgU0NBTl9NQVhfQkFORFMgMworCitlbnVtIHsKKwlTQ0FOX0NIQU5ORUxfVFlQRV8yR0haX1BBU1NJVkUsCisJU0NBTl9DSEFOTkVMX1RZUEVfMkdIWl9BQ1RJVkUsCisJU0NBTl9DSEFOTkVMX1RZUEVfNUdIWl9QQVNTSVZFLAorCVNDQU5fQ0hBTk5FTF9UWVBFXzVHSFpfQUNUSVZFLAorCVNDQU5fQ0hBTk5FTF9UWVBFXzVHSFpfREZTLAorfTsKKworZW51bSB7CisJU0NBTl9TU0lEX0ZJTFRFUl9BTlkgICAgICA9IDAsCisJU0NBTl9TU0lEX0ZJTFRFUl9TUEVDSUZJQyA9IDEsCisJU0NBTl9TU0lEX0ZJTFRFUl9MSVNUICAgICA9IDIsCisJU0NBTl9TU0lEX0ZJTFRFUl9ESVNBQkxFRCA9IDMKK307CisKK2VudW0geworCVNDQU5fQlNTX1RZUEVfSU5ERVBFTkRFTlQsCisJU0NBTl9CU1NfVFlQRV9JTkZSQVNUUlVDVFVSRSwKKwlTQ0FOX0JTU19UWVBFX0FOWSwKK307CisKK3N0cnVjdCBjb25uX3NjYW5fY2hfcGFyYW1zIHsKKwlfX2xlMTYgbWluX2R1cmF0aW9uOworCV9fbGUxNiBtYXhfZHVyYXRpb247CisJX19sZTE2IHBhc3NpdmVfZHVyYXRpb247CisKKwl1OCAgY2hhbm5lbDsKKwl1OCAgdHhfcG93ZXJfYXR0OworCisJLyogYml0IDA6IERGUyBjaGFubmVsOyBiaXQgMTogREZTIGVuYWJsZWQgKi8KKwl1OCAgZmxhZ3M7CisKKwl1OCAgcGFkZGluZ1szXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB3bDEyNzFfY21kX3NjaGVkX3NjYW5fY29uZmlnIHsKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgaGVhZGVyOworCisJX19sZTMyIGludGVydmFsc1tTQ0FOX01BWF9DWUNMRV9JTlRFUlZBTFNdOworCisJczggcnNzaV90aHJlc2hvbGQ7IC8qIGZvciBmaWx0ZXJpbmcgKGluIGRCbSkgKi8KKwlzOCBzbnJfdGhyZXNob2xkOyAgLyogZm9yIGZpbHRlcmluZyAoaW4gZEIpICovCisKKwl1OCBjeWNsZXM7ICAgICAgIC8qIG1heGltdW0gbnVtYmVyIG9mIHNjYW4gY3ljbGVzICovCisJdTggcmVwb3J0X2FmdGVyOyAvKiByZXBvcnQgd2hlbiB0aGlzIG51bWJlciBvZiByZXN1bHRzIGFyZSByZWNlaXZlZCAqLworCXU4IHRlcm1pbmF0ZTsgICAgLyogc3RvcCBzY2FubmluZyBhZnRlciByZXBvcnRpbmcgKi8KKworCXU4IHRhZzsKKwl1OCBic3NfdHlwZTsgLyogZm9yIGZpbHRlcmluZyAqLworCXU4IGZpbHRlcl90eXBlOworCisJdTggc3NpZF9sZW47ICAgICAvKiBGb3IgU0NBTl9TU0lEX0ZJTFRFUl9TUEVDSUZJQyAqLworCXU4IHNzaWRbSVdfRVNTSURfTUFYX1NJWkVdOworCisJdTggbl9wcm9iZV9yZXFzOyAvKiBOdW1iZXIgb2YgcHJvYmVzIHJlcXVlc3RzIHBlciBjaGFubmVsICovCisKKwl1OCBwYXNzaXZlW1NDQU5fTUFYX0JBTkRTXTsKKwl1OCBhY3RpdmVbU0NBTl9NQVhfQkFORFNdOworCisJdTggZGZzOworCisJdTggcGFkZGluZ1szXTsKKworCXN0cnVjdCBjb25uX3NjYW5fY2hfcGFyYW1zIGNoYW5uZWxzW01BWF9DSEFOTkVMU19BTExfQkFORFNdOworfSBfX3BhY2tlZDsKKworCisjZGVmaW5lIFNDSEVEX1NDQU5fTUFYX1NTSURTIDgKKworZW51bSB7CisJU0NBTl9TU0lEX1RZUEVfUFVCTElDID0gMCwKKwlTQ0FOX1NTSURfVFlQRV9ISURERU4gPSAxLAorfTsKKworc3RydWN0IHdsMTI3MV9zc2lkIHsKKwl1OCB0eXBlOworCXU4IGxlbjsKKwl1OCBzc2lkW0lXX0VTU0lEX01BWF9TSVpFXTsKKwkvKiB1OCBwYWRkaW5nWzJdOyAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IHdsMTI3MV9jbWRfc2NoZWRfc2Nhbl9zc2lkX2xpc3QgeworCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7CisKKwl1OCBuX3NzaWRzOworCXN0cnVjdCB3bDEyNzFfc3NpZCBzc2lkc1tTQ0hFRF9TQ0FOX01BWF9TU0lEU107CisJdTggcGFkZGluZ1szXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB3bDEyNzFfY21kX3NjaGVkX3NjYW5fc3RhcnQgeworCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7CisKKwl1OCB0YWc7CisJdTggcGFkZGluZ1szXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB3bDEyNzFfY21kX3NjaGVkX3NjYW5fc3RvcCB7CisJc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIGhlYWRlcjsKKworCXU4IHRhZzsKKwl1OCBwYWRkaW5nWzNdOworfSBfX3BhY2tlZDsKKworCiAjZW5kaWYgLyogX19XTDEyNzFfU0NBTl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc2Rpby5jCmluZGV4IGIxYzdkMDMuLjUzNmU1MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zZGlvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NkaW8uYwpAQCAtNTEsNiArNTEsMTMgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHNkaW8sIHdsMTI3MV9kZXZpY2VzKTsKIAorc3RhdGljIHZvaWQgd2wxMjcxX3NkaW9fc2V0X2Jsb2NrX3NpemUoc3RydWN0IHdsMTI3MSAqd2wsIHVuc2lnbmVkIGludCBibGtzeikKK3sKKwlzZGlvX2NsYWltX2hvc3Qod2wtPmlmX3ByaXYpOworCXNkaW9fc2V0X2Jsb2NrX3NpemUod2wtPmlmX3ByaXYsIGJsa3N6KTsKKwlzZGlvX3JlbGVhc2VfaG9zdCh3bC0+aWZfcHJpdik7Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNkaW9fZnVuYyAqd2xfdG9fZnVuYyhzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKIAlyZXR1cm4gd2wtPmlmX3ByaXY7CkBAIC03NSw2ICs4MiwxNiBAQAogCQljb21wbGV0ZSh3bC0+ZWxwX2NvbXBsKTsKIAkJd2wtPmVscF9jb21wbCA9IE5VTEw7CiAJfQorCisJaWYgKHRlc3RfYml0KFdMMTI3MV9GTEFHX1NVU1BFTkRFRCwgJndsLT5mbGFncykpIHsKKwkJLyogZG9uJ3QgZW5xdWV1ZSBhIHdvcmsgcmlnaHQgbm93LiBtYXJrIGl0IGFzIHBlbmRpbmcgKi8KKwkJc2V0X2JpdChXTDEyNzFfRkxBR19QRU5ESU5HX1dPUkssICZ3bC0+ZmxhZ3MpOworCQl3bDEyNzFfZGVidWcoREVCVUdfSVJRLCAic2hvdWxkIG5vdCBlbnF1ZXVlIHdvcmsiKTsKKwkJZGlzYWJsZV9pcnFfbm9zeW5jKHdsLT5pcnEpOworCQlwbV93YWtldXBfZXZlbnQod2wxMjcxX3NkaW9fd2xfdG9fZGV2KHdsKSwgMCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT53bF9sb2NrLCBmbGFncyk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPndsX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiBJUlFfV0FLRV9USFJFQUQ7CkBAIC0yMDMsNyArMjIwLDggQEAKIAkucG93ZXIJCT0gd2wxMjcxX3NkaW9fc2V0X3Bvd2VyLAogCS5kZXYJCT0gd2wxMjcxX3NkaW9fd2xfdG9fZGV2LAogCS5lbmFibGVfaXJxCT0gd2wxMjcxX3NkaW9fZW5hYmxlX2ludGVycnVwdHMsCi0JLmRpc2FibGVfaXJxCT0gd2wxMjcxX3NkaW9fZGlzYWJsZV9pbnRlcnJ1cHRzCisJLmRpc2FibGVfaXJxCT0gd2wxMjcxX3NkaW9fZGlzYWJsZV9pbnRlcnJ1cHRzLAorCS5zZXRfYmxvY2tfc2l6ZSA9IHdsMTI3MV9zZGlvX3NldF9ibG9ja19zaXplLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgd2wxMjcxX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMsCkBAIC0yMTIsNiArMjMwLDggQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAljb25zdCBzdHJ1Y3Qgd2wxMnh4X3BsYXRmb3JtX2RhdGEgKndsYW5fZGF0YTsKIAlzdHJ1Y3Qgd2wxMjcxICp3bDsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCW1tY19wbV9mbGFnX3QgbW1jZmxhZ3M7CiAJaW50IHJldDsKIAogCS8qIFdlIGFyZSBvbmx5IGFibGUgdG8gaGFuZGxlIHRoZSB3bGFuIGZ1bmN0aW9uICovCkBAIC0yMzAsNiArMjUwLDkgQEAKIAkvKiBHcmFiIGFjY2VzcyB0byBGTjAgZm9yIEVMUCByZWcuICovCiAJZnVuYy0+Y2FyZC0+cXVpcmtzIHw9IE1NQ19RVUlSS19MRU5JRU5UX0ZOMDsKIAorCS8qIFVzZSBibG9jayBtb2RlIGZvciB0cmFuc2ZlcnJpbmcgb3ZlciBvbmUgYmxvY2sgc2l6ZSBvZiBkYXRhICovCisJZnVuYy0+Y2FyZC0+cXVpcmtzIHw9IE1NQ19RVUlSS19CTEtTWl9GT1JfQllURV9NT0RFOworCiAJd2xhbl9kYXRhID0gd2wxMnh4X2dldF9wbGF0Zm9ybV9kYXRhKCk7CiAJaWYgKElTX0VSUih3bGFuX2RhdGEpKSB7CiAJCXJldCA9IFBUUl9FUlIod2xhbl9kYXRhKTsKQEAgLTIzOSwxNyArMjYyLDM0IEBACiAKIAl3bC0+aXJxID0gd2xhbl9kYXRhLT5pcnE7CiAJd2wtPnJlZl9jbG9jayA9IHdsYW5fZGF0YS0+Ym9hcmRfcmVmX2Nsb2NrOworCXdsLT50Y3hvX2Nsb2NrID0gd2xhbl9kYXRhLT5ib2FyZF90Y3hvX2Nsb2NrOworCXdsLT5wbGF0Zm9ybV9xdWlya3MgPSB3bGFuX2RhdGEtPnBsYXRmb3JtX3F1aXJrczsKKworCWlmICh3bC0+cGxhdGZvcm1fcXVpcmtzICYgV0wxMlhYX1BMQVRGT1JNX1FVSVJLX0VER0VfSVJRKQorCQlpcnFmbGFncyA9IElSUUZfVFJJR0dFUl9SSVNJTkc7CisJZWxzZQorCQlpcnFmbGFncyA9IElSUUZfVFJJR0dFUl9ISUdIIHwgSVJRRl9PTkVTSE9UOwogCiAJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEod2wtPmlycSwgd2wxMjcxX2hhcmRpcnEsIHdsMTI3MV9pcnEsCi0JCQkJICAgSVJRRl9UUklHR0VSX0hJR0ggfCBJUlFGX09ORVNIT1QsCisJCQkJICAgaXJxZmxhZ3MsCiAJCQkJICAgRFJJVkVSX05BTUUsIHdsKTsKIAlpZiAocmV0IDwgMCkgewogCQl3bDEyNzFfZXJyb3IoInJlcXVlc3RfaXJxKCkgZmFpbGVkOiAlZCIsIHJldCk7CiAJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCisJZW5hYmxlX2lycV93YWtlKHdsLT5pcnEpOworCWRldmljZV9pbml0X3dha2V1cCh3bDEyNzFfc2Rpb193bF90b19kZXYod2wpLCAxKTsKKwogCWRpc2FibGVfaXJxKHdsLT5pcnEpOwogCisJLyogaWYgc2RpbyBjYW4ga2VlcCBwb3dlciB3aGlsZSBob3N0IGlzIHN1c3BlbmRlZCwgZW5hYmxlIHdvdyAqLworCW1tY2ZsYWdzID0gc2Rpb19nZXRfaG9zdF9wbV9jYXBzKGZ1bmMpOworCXdsMTI3MV9kZWJ1ZyhERUJVR19TRElPLCAic2RpbyBQTSBjYXBzID0gMHgleCIsIG1tY2ZsYWdzKTsKKworCWlmIChtbWNmbGFncyAmIE1NQ19QTV9LRUVQX1BPV0VSKQorCQlody0+d2lwaHktPndvd2xhbi5mbGFncyA9IFdJUEhZX1dPV0xBTl9BTlk7CisKIAlyZXQgPSB3bDEyNzFfaW5pdF9pZWVlODAyMTEod2wpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2lycTsKQEAgLTI4NCwxOSArMzI0LDYxIEBACiAJcG1fcnVudGltZV9nZXRfbm9yZXN1bWUoJmZ1bmMtPmRldik7CiAKIAl3bDEyNzFfdW5yZWdpc3Rlcl9odyh3bCk7CisJZGV2aWNlX2luaXRfd2FrZXVwKHdsMTI3MV9zZGlvX3dsX3RvX2Rldih3bCksIDApOworCWRpc2FibGVfaXJxX3dha2Uod2wtPmlycSk7CiAJZnJlZV9pcnEod2wtPmlycSwgd2wpOwogCXdsMTI3MV9mcmVlX2h3KHdsKTsKIH0KIAorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCB3bDEyNzFfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJLyogVGVsbCBNTUMvU0RJTyBjb3JlIGl0J3MgT0sgdG8gcG93ZXIgZG93biB0aGUgY2FyZAogCSAqIChpZiBpdCBpc24ndCBhbHJlYWR5KSwgYnV0IG5vdCB0byByZW1vdmUgaXQgY29tcGxldGVseSAqLwotCXJldHVybiAwOworCXN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMgPSBkZXZfdG9fc2Rpb19mdW5jKGRldik7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBzZGlvX2dldF9kcnZkYXRhKGZ1bmMpOworCW1tY19wbV9mbGFnX3Qgc2Rpb19mbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIndsMTI3MSBzdXNwZW5kLiB3b3dfZW5hYmxlZDogJWQiLAorCQkgICAgIHdsLT53b3dfZW5hYmxlZCk7CisKKwkvKiBjaGVjayB3aGV0aGVyIHNkaW8gc2hvdWxkIGtlZXAgcG93ZXIgKi8KKwlpZiAod2wtPndvd19lbmFibGVkKSB7CisJCXNkaW9fZmxhZ3MgPSBzZGlvX2dldF9ob3N0X3BtX2NhcHMoZnVuYyk7CisKKwkJaWYgKCEoc2Rpb19mbGFncyAmIE1NQ19QTV9LRUVQX1BPV0VSKSkgeworCQkJd2wxMjcxX2Vycm9yKCJjYW4ndCBrZWVwIHBvd2VyIHdoaWxlIGhvc3QgIgorCQkJCSAgICAgImlzIHN1c3BlbmRlZCIpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyoga2VlcCBwb3dlciB3aGlsZSBob3N0IHN1c3BlbmRlZCAqLworCQlyZXQgPSBzZGlvX3NldF9ob3N0X3BtX2ZsYWdzKGZ1bmMsIE1NQ19QTV9LRUVQX1BPV0VSKTsKKwkJaWYgKHJldCkgeworCQkJd2wxMjcxX2Vycm9yKCJlcnJvciB3aGlsZSB0cnlpbmcgdG8ga2VlcCBwb3dlciIpOworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKiByZWxlYXNlIGhvc3QgKi8KKwkJc2Rpb19yZWxlYXNlX2hvc3QoZnVuYyk7CisJfQorb3V0OgorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgd2wxMjcxX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IHNkaW9fZnVuYyAqZnVuYyA9IGRldl90b19zZGlvX2Z1bmMoZGV2KTsKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IHNkaW9fZ2V0X2RydmRhdGEoZnVuYyk7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsICJ3bDEyNzEgcmVzdW1lIik7CisJaWYgKHdsLT53b3dfZW5hYmxlZCkgeworCQkvKiBjbGFpbSBiYWNrIGhvc3QgKi8KKwkJc2Rpb19jbGFpbV9ob3N0KGZ1bmMpOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC0zMDQsMTUgKzM4NiwxOCBAQAogCS5zdXNwZW5kCT0gd2wxMjcxX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSB3bDEyNzFfcmVzdW1lLAogfTsKKyNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHdsMTI3MV9zZGlvX2RyaXZlciA9IHsKIAkubmFtZQkJPSAid2wxMjcxX3NkaW8iLAogCS5pZF90YWJsZQk9IHdsMTI3MV9kZXZpY2VzLAogCS5wcm9iZQkJPSB3bDEyNzFfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh3bDEyNzFfcmVtb3ZlKSwKKyNpZmRlZiBDT05GSUdfUE0KIAkuZHJ2ID0gewogCQkucG0gPSAmd2wxMjcxX3NkaW9fcG1fb3BzLAogCX0sCisjZW5kaWYKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHdsMTI3MV9pbml0KHZvaWQpCkBAIC0zNDMsNCArNDI4LDYgQEAKIE1PRFVMRV9BVVRIT1IoIkx1Y2lhbm8gQ29lbGhvIDxjb2VsaG9AdGkuY29tPiIpOwogTU9EVUxFX0FVVEhPUigiSnV1c28gT2lrYXJpbmVuIDxqdXVzby5vaWthcmluZW5Abm9raWEuY29tPiIpOwogTU9EVUxFX0ZJUk1XQVJFKFdMMTI3MV9GV19OQU1FKTsKLU1PRFVMRV9GSVJNV0FSRShXTDEyNzFfQVBfRldfTkFNRSk7CitNT0RVTEVfRklSTVdBUkUoV0wxMjhYX0ZXX05BTUUpOworTU9EVUxFX0ZJUk1XQVJFKFdMMTI3WF9BUF9GV19OQU1FKTsKK01PRFVMRV9GSVJNV0FSRShXTDEyOFhfQVBfRldfTkFNRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc2Rpb190ZXN0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc2Rpb190ZXN0LmMKaW5kZXggOWZjYmQzZC4uZjI4OTE1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NkaW9fdGVzdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zZGlvX3Rlc3QuYwpAQCAtMTg5LDcgKzE4OSwxMiBAQAogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CiAJaW50IHJldDsKIAotCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBXTDEyNzFfRldfTkFNRSwgd2wxMjcxX3dsX3RvX2Rldih3bCkpOworCWlmICh3bC0+Y2hpcC5pZCA9PSBDSElQX0lEXzEyODNfUEcyMCkKKwkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIFdMMTI4WF9GV19OQU1FLAorCQkJCSAgICAgICB3bDEyNzFfd2xfdG9fZGV2KHdsKSk7CisJZWxzZQorCQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgV0wxMjcxX0ZXX05BTUUsCisJCQkJICAgICAgIHdsMTI3MV93bF90b19kZXYod2wpKTsKIAogCWlmIChyZXQgPCAwKSB7CiAJCXdsMTI3MV9lcnJvcigiY291bGQgbm90IGdldCBmaXJtd2FyZTogJWQiLCByZXQpOwpAQCAtMjI3LDE0ICsyMzIsMTQgQEAKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwogCWludCByZXQ7CiAKLQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgV0wxMjcxX05WU19OQU1FLCB3bDEyNzFfd2xfdG9fZGV2KHdsKSk7CisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIFdMMTJYWF9OVlNfTkFNRSwgd2wxMjcxX3dsX3RvX2Rldih3bCkpOwogCiAJaWYgKHJldCA8IDApIHsKIAkJd2wxMjcxX2Vycm9yKCJjb3VsZCBub3QgZ2V0IG52cyBmaWxlOiAlZCIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCi0Jd2wtPm52cyA9IGttZW1kdXAoZnctPmRhdGEsIHNpemVvZihzdHJ1Y3Qgd2wxMjcxX252c19maWxlKSwgR0ZQX0tFUk5FTCk7CisJd2wtPm52cyA9IGttZW1kdXAoZnctPmRhdGEsIGZ3LT5zaXplLCBHRlBfS0VSTkVMKTsKIAogCWlmICghd2wtPm52cykgewogCQl3bDEyNzFfZXJyb3IoImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBudnMgZmlsZSIpOwpAQCAtMjg4LDYgKzI5MywxMSBAQAogCQl3bDEyNzFfbm90aWNlKCJjaGlwIGlkIDB4JXggKDEyNzEgUEcyMCkiLAogCQkJCXdsLT5jaGlwLmlkKTsKIAkJYnJlYWs7CisJY2FzZSBDSElQX0lEXzEyODNfUEcyMDoKKwkJd2wxMjcxX25vdGljZSgiY2hpcCBpZCAweCV4ICgxMjgzIFBHMjApIiwKKwkJCQl3bC0+Y2hpcC5pZCk7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9JRF8xMjgzX1BHMTA6CiAJZGVmYXVsdDoKIAkJd2wxMjcxX3dhcm5pbmcoInVuc3VwcG9ydGVkIGNoaXAgaWQ6IDB4JXgiLCB3bC0+Y2hpcC5pZCk7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtNDA3LDYgKzQxNyw5IEBACiAJLyogR3JhYiBhY2Nlc3MgdG8gRk4wIGZvciBFTFAgcmVnLiAqLwogCWZ1bmMtPmNhcmQtPnF1aXJrcyB8PSBNTUNfUVVJUktfTEVOSUVOVF9GTjA7CiAKKwkvKiBVc2UgYmxvY2sgbW9kZSBmb3IgdHJhbnNmZXJyaW5nIG92ZXIgb25lIGJsb2NrIHNpemUgb2YgZGF0YSAqLworCWZ1bmMtPmNhcmQtPnF1aXJrcyB8PSBNTUNfUVVJUktfQkxLU1pfRk9SX0JZVEVfTU9ERTsKKwogCXdsYW5fZGF0YSA9IHdsMTJ4eF9nZXRfcGxhdGZvcm1fZGF0YSgpOwogCWlmIChJU19FUlIod2xhbl9kYXRhKSkgewogCQlyZXQgPSBQVFJfRVJSKHdsYW5fZGF0YSk7CkBAIC00MTYsNiArNDI5LDcgQEAKIAogCXdsLT5pcnEgPSB3bGFuX2RhdGEtPmlycTsKIAl3bC0+cmVmX2Nsb2NrID0gd2xhbl9kYXRhLT5ib2FyZF9yZWZfY2xvY2s7CisJd2wtPnRjeG9fY2xvY2sgPSB3bGFuX2RhdGEtPmJvYXJkX3RjeG9fY2xvY2s7CiAKIAlzZGlvX3NldF9kcnZkYXRhKGZ1bmMsIHdsX3Rlc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc3BpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc3BpLmMKaW5kZXggZmZjNzQ1Yi4uNTE2NjJiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NwaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zcGkuYwpAQCAtMzU1LDcgKzM1NSw4IEBACiAJLnBvd2VyCQk9IHdsMTI3MV9zcGlfc2V0X3Bvd2VyLAogCS5kZXYJCT0gd2wxMjcxX3NwaV93bF90b19kZXYsCiAJLmVuYWJsZV9pcnEJPSB3bDEyNzFfc3BpX2VuYWJsZV9pbnRlcnJ1cHRzLAotCS5kaXNhYmxlX2lycQk9IHdsMTI3MV9zcGlfZGlzYWJsZV9pbnRlcnJ1cHRzCisJLmRpc2FibGVfaXJxCT0gd2wxMjcxX3NwaV9kaXNhYmxlX2ludGVycnVwdHMsCisJLnNldF9ibG9ja19zaXplID0gTlVMTCwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHdsMTI3MV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQpAQCAtMzYzLDYgKzM2NCw3IEBACiAJc3RydWN0IHdsMTJ4eF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAlzdHJ1Y3Qgd2wxMjcxICp3bDsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCWludCByZXQ7CiAKIAlwZGF0YSA9IHNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7CkBAIC00MDAsNiArNDAyLDEzIEBACiAJfQogCiAJd2wtPnJlZl9jbG9jayA9IHBkYXRhLT5ib2FyZF9yZWZfY2xvY2s7CisJd2wtPnRjeG9fY2xvY2sgPSBwZGF0YS0+Ym9hcmRfdGN4b19jbG9jazsKKwl3bC0+cGxhdGZvcm1fcXVpcmtzID0gcGRhdGEtPnBsYXRmb3JtX3F1aXJrczsKKworCWlmICh3bC0+cGxhdGZvcm1fcXVpcmtzICYgV0wxMlhYX1BMQVRGT1JNX1FVSVJLX0VER0VfSVJRKQorCQlpcnFmbGFncyA9IElSUUZfVFJJR0dFUl9SSVNJTkc7CisJZWxzZQorCQlpcnFmbGFncyA9IElSUUZfVFJJR0dFUl9ISUdIIHwgSVJRRl9PTkVTSE9UOwogCiAJd2wtPmlycSA9IHNwaS0+aXJxOwogCWlmICh3bC0+aXJxIDwgMCkgewpAQCAtNDA5LDcgKzQxOCw3IEBACiAJfQogCiAJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEod2wtPmlycSwgd2wxMjcxX2hhcmRpcnEsIHdsMTI3MV9pcnEsCi0JCQkJICAgSVJRRl9UUklHR0VSX0hJR0ggfCBJUlFGX09ORVNIT1QsCisJCQkJICAgaXJxZmxhZ3MsCiAJCQkJICAgRFJJVkVSX05BTUUsIHdsKTsKIAlpZiAocmV0IDwgMCkgewogCQl3bDEyNzFfZXJyb3IoInJlcXVlc3RfaXJxKCkgZmFpbGVkOiAlZCIsIHJldCk7CkBAIC00OTAsNSArNDk5LDcgQEAKIE1PRFVMRV9BVVRIT1IoIkx1Y2lhbm8gQ29lbGhvIDxjb2VsaG9AdGkuY29tPiIpOwogTU9EVUxFX0FVVEhPUigiSnV1c28gT2lrYXJpbmVuIDxqdXVzby5vaWthcmluZW5Abm9raWEuY29tPiIpOwogTU9EVUxFX0ZJUk1XQVJFKFdMMTI3MV9GV19OQU1FKTsKLU1PRFVMRV9GSVJNV0FSRShXTDEyNzFfQVBfRldfTkFNRSk7CitNT0RVTEVfRklSTVdBUkUoV0wxMjhYX0ZXX05BTUUpOworTU9EVUxFX0ZJUk1XQVJFKFdMMTI3WF9BUF9GV19OQU1FKTsKK01PRFVMRV9GSVJNV0FSRShXTDEyOFhfQVBfRldfTkFNRSk7CiBNT0RVTEVfQUxJQVMoInNwaTp3bDEyNzEiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC90ZXN0bW9kZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3Rlc3Rtb2RlLmMKaW5kZXggNmVjMDZhNC4uZGEzNTFkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3Rlc3Rtb2RlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3Rlc3Rtb2RlLmMKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIndsMTJ4eC5oIgogI2luY2x1ZGUgImFjeC5oIgorI2luY2x1ZGUgInJlZy5oIgogCiAjZGVmaW5lIFdMMTI3MV9UTV9NQVhfREFUQV9MRU5HVEggMTAyNAogCkBAIC0yMDQsNyArMjA1LDEwIEBACiAKIAlrZnJlZSh3bC0+bnZzKTsKIAotCWlmIChsZW4gIT0gc2l6ZW9mKHN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUpKQorCWlmICgod2wtPmNoaXAuaWQgPT0gQ0hJUF9JRF8xMjgzX1BHMjApICYmCisJICAgIChsZW4gIT0gc2l6ZW9mKHN0cnVjdCB3bDEyOHhfbnZzX2ZpbGUpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZWxzZSBpZiAobGVuICE9IHNpemVvZihzdHJ1Y3Qgd2wxMjcxX252c19maWxlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAl3bC0+bnZzID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvdHguYwppbmRleCA1ZTllZjdkLi5jYTNhYjFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvdHguYwpAQCAtNjUsMTEgKzY1LDM2IEBACiBzdGF0aWMgdm9pZCB3bDEyNzFfZnJlZV90eF9pZChzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGlkKQogewogCWlmIChfX3Rlc3RfYW5kX2NsZWFyX2JpdChpZCwgd2wtPnR4X2ZyYW1lc19tYXApKSB7CisJCWlmICh1bmxpa2VseSh3bC0+dHhfZnJhbWVzX2NudCA9PSBBQ1hfVFhfREVTQ1JJUFRPUlMpKQorCQkJY2xlYXJfYml0KFdMMTI3MV9GTEFHX0ZXX1RYX0JVU1ksICZ3bC0+ZmxhZ3MpOworCiAJCXdsLT50eF9mcmFtZXNbaWRdID0gTlVMTDsKIAkJd2wtPnR4X2ZyYW1lc19jbnQtLTsKIAl9CiB9CiAKK3N0YXRpYyBpbnQgd2wxMjcxX3R4X3VwZGF0ZV9maWx0ZXJzKHN0cnVjdCB3bDEyNzEgKndsLAorCQkJCQkJIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKShza2ItPmRhdGEgKworCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHdsMTI3MV90eF9od19kZXNjcikpOworCisJLyoKKwkgKiBzdG9wIGJzc2lkLWJhc2VkIGZpbHRlcmluZyBiZWZvcmUgdHJhbnNtaXR0aW5nIGF1dGhlbnRpY2F0aW9uCisJICogcmVxdWVzdHMuIHRoaXMgd2F5IHRoZSBodyB3aWxsIG5ldmVyIGRyb3AgYXV0aGVudGljYXRpb24KKwkgKiByZXNwb25zZXMgY29taW5nIGZyb20gQlNTSURzIGl0IGlzbid0IGZhbWlsaWFyIHdpdGggKGUuZy4gb24KKwkgKiByb2FtaW5nKQorCSAqLworCWlmICghaWVlZTgwMjExX2lzX2F1dGgoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJcmV0dXJuIDA7CisKKwl3bDEyNzFfY29uZmlndXJlX2ZpbHRlcnMod2wsIEZJRl9PVEhFUl9CU1MpOworCisJcmV0dXJuIHdsMTI3MV9hY3hfcnhfY29uZmlnKHdsLCB3bC0+cnhfY29uZmlnLCB3bC0+cnhfZmlsdGVyKTsKK30KKwogc3RhdGljIHZvaWQgd2wxMjcxX3R4X2FwX3VwZGF0ZV9pbmNvbm5lY3Rpb25fc3RhKHN0cnVjdCB3bDEyNzEgKndsLAogCQkJCQkJIHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC0xMjcsMTMgKzE1MiwyOSBAQAogCX0KIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCB3bDEyeHhfY2FsY19wYWNrZXRfYWxpZ25tZW50KHN0cnVjdCB3bDEyNzEgKndsLAorCQkJCQkJdW5zaWduZWQgaW50IHBhY2tldF9sZW5ndGgpCit7CisJaWYgKHdsLT5xdWlya3MgJiBXTDEyWFhfUVVJUktfQkxPQ0tTSVpFX0FMSUdOTUVOVCkKKwkJcmV0dXJuIEFMSUdOKHBhY2tldF9sZW5ndGgsIFdMMTJYWF9CVVNfQkxPQ0tfU0laRSk7CisJZWxzZQorCQlyZXR1cm4gQUxJR04ocGFja2V0X2xlbmd0aCwgV0wxMjcxX1RYX0FMSUdOX1RPKTsKK30KKwogc3RhdGljIGludCB3bDEyNzFfdHhfYWxsb2NhdGUoc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBleHRyYSwKIAkJCQl1MzIgYnVmX29mZnNldCwgdTggaGxpZCkKIHsKIAlzdHJ1Y3Qgd2wxMjcxX3R4X2h3X2Rlc2NyICpkZXNjOwogCXUzMiB0b3RhbF9sZW4gPSBza2ItPmxlbiArIHNpemVvZihzdHJ1Y3Qgd2wxMjcxX3R4X2h3X2Rlc2NyKSArIGV4dHJhOworCXUzMiBsZW47CiAJdTMyIHRvdGFsX2Jsb2NrczsKIAlpbnQgaWQsIHJldCA9IC1FQlVTWTsKKwl1MzIgc3BhcmVfYmxvY2tzOworCisJaWYgKHVubGlrZWx5KHdsLT5xdWlya3MgJiBXTDEyWFhfUVVJUktfVVNFXzJfU1BBUkVfQkxPQ0tTKSkKKwkJc3BhcmVfYmxvY2tzID0gMjsKKwllbHNlCisJCXNwYXJlX2Jsb2NrcyA9IDE7CiAKIAlpZiAoYnVmX29mZnNldCArIHRvdGFsX2xlbiA+IFdMMTI3MV9BR0dSX0JVRkZFUl9TSVpFKQogCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTE0NSwxNyArMTg2LDI3IEBACiAKIAkvKiBhcHByb3hpbWF0ZSB0aGUgbnVtYmVyIG9mIGJsb2NrcyByZXF1aXJlZCBmb3IgdGhpcyBwYWNrZXQKIAkgICBpbiB0aGUgZmlybXdhcmUgKi8KLQl0b3RhbF9ibG9ja3MgPSB0b3RhbF9sZW4gKyBUWF9IV19CTE9DS19TSVpFIC0gMTsKLQl0b3RhbF9ibG9ja3MgPSB0b3RhbF9ibG9ja3MgLyBUWF9IV19CTE9DS19TSVpFICsgVFhfSFdfQkxPQ0tfU1BBUkU7CisJbGVuID0gd2wxMnh4X2NhbGNfcGFja2V0X2FsaWdubWVudCh3bCwgdG90YWxfbGVuKTsKKworCXRvdGFsX2Jsb2NrcyA9IChsZW4gKyBUWF9IV19CTE9DS19TSVpFIC0gMSkgLyBUWF9IV19CTE9DS19TSVpFICsKKwkJc3BhcmVfYmxvY2tzOworCiAJaWYgKHRvdGFsX2Jsb2NrcyA8PSB3bC0+dHhfYmxvY2tzX2F2YWlsYWJsZSkgewogCQlkZXNjID0gKHN0cnVjdCB3bDEyNzFfdHhfaHdfZGVzY3IgKilza2JfcHVzaCgKIAkJCXNrYiwgdG90YWxfbGVuIC0gc2tiLT5sZW4pOwogCi0JCWRlc2MtPmV4dHJhX21lbV9ibG9ja3MgPSBUWF9IV19CTE9DS19TUEFSRTsKLQkJZGVzYy0+dG90YWxfbWVtX2Jsb2NrcyA9IHRvdGFsX2Jsb2NrczsKKwkJLyogSFcgZGVzY3JpcHRvciBmaWVsZHMgY2hhbmdlIGJldHdlZW4gd2wxMjd4IGFuZCB3bDEyOHggKi8KKwkJaWYgKHdsLT5jaGlwLmlkID09IENISVBfSURfMTI4M19QRzIwKSB7CisJCQlkZXNjLT53bDEyOHhfbWVtLnRvdGFsX21lbV9ibG9ja3MgPSB0b3RhbF9ibG9ja3M7CisJCX0gZWxzZSB7CisJCQlkZXNjLT53bDEyN3hfbWVtLmV4dHJhX2Jsb2NrcyA9IHNwYXJlX2Jsb2NrczsKKwkJCWRlc2MtPndsMTI3eF9tZW0udG90YWxfbWVtX2Jsb2NrcyA9IHRvdGFsX2Jsb2NrczsKKwkJfQorCiAJCWRlc2MtPmlkID0gaWQ7CiAKIAkJd2wtPnR4X2Jsb2Nrc19hdmFpbGFibGUgLT0gdG90YWxfYmxvY2tzOworCQl3bC0+dHhfYWxsb2NhdGVkX2Jsb2NrcyArPSB0b3RhbF9ibG9ja3M7CiAKIAkJaWYgKHdsLT5ic3NfdHlwZSA9PSBCU1NfVFlQRV9BUF9CU1MpCiAJCQl3bC0+bGlua3NbaGxpZF0uYWxsb2NhdGVkX2Jsa3MgKz0gdG90YWxfYmxvY2tzOwpAQCAtMTcyLDEzICsyMjMsMTggQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgYm9vbCB3bDEyeHhfaXNfZHVtbXlfcGFja2V0KHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiB3bC0+ZHVtbXlfcGFja2V0ID09IHNrYjsKK30KKwogc3RhdGljIHZvaWQgd2wxMjcxX3R4X2ZpbGxfaGRyKHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgdTMyIGV4dHJhLCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmNvbnRyb2wsCiAJCQkgICAgICB1OCBobGlkKQogewogCXN0cnVjdCB0aW1lc3BlYyB0czsKIAlzdHJ1Y3Qgd2wxMjcxX3R4X2h3X2Rlc2NyICpkZXNjOwotCWludCBwYWQsIGFjLCByYXRlX2lkeDsKKwlpbnQgYWxpZ25lZF9sZW4sIGFjLCByYXRlX2lkeDsKIAlzNjQgaG9zdHRpbWU7CiAJdTE2IHR4X2F0dHI7CiAKQEAgLTIwMiwxMiArMjU4LDI1IEBACiAJZWxzZQogCQlkZXNjLT5saWZlX3RpbWUgPSBjcHVfdG9fbGUxNihUWF9IV19BUF9NT0RFX1BLVF9MSUZFVElNRV9UVSk7CiAKLQkvKiBjb25maWd1cmUgdGhlIHR4IGF0dHJpYnV0ZXMgKi8KLQl0eF9hdHRyID0gd2wtPnNlc3Npb25fY291bnRlciA8PCBUWF9IV19BVFRSX09GU1RfU0VTU0lPTl9DT1VOVEVSOwotCi0JLyogcXVldWUgKHdlIHVzZSBzYW1lIGlkZW50aWZpZXJzIGZvciB0aWQncyBhbmQgYWMncyAqLworCS8qIHF1ZXVlICovCiAJYWMgPSB3bDEyNzFfdHhfZ2V0X3F1ZXVlKHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKLQlkZXNjLT50aWQgPSBhYzsKKwlkZXNjLT50aWQgPSBza2ItPnByaW9yaXR5OworCisJaWYgKHdsMTJ4eF9pc19kdW1teV9wYWNrZXQod2wsIHNrYikpIHsKKwkJLyoKKwkJICogRlcgZXhwZWN0cyB0aGUgZHVtbXkgcGFja2V0IHRvIGhhdmUgYW4gaW52YWxpZCBzZXNzaW9uIGlkIC0KKwkJICogYW55IHNlc3Npb24gaWQgdGhhdCBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgb25lIHNldCBpbiB0aGUgam9pbgorCQkgKi8KKwkJdHhfYXR0ciA9ICgofndsLT5zZXNzaW9uX2NvdW50ZXIpIDw8CisJCQkgICBUWF9IV19BVFRSX09GU1RfU0VTU0lPTl9DT1VOVEVSKSAmCisJCQkgICBUWF9IV19BVFRSX1NFU1NJT05fQ09VTlRFUjsKKworCQl0eF9hdHRyIHw9IFRYX0hXX0FUVFJfVFhfRFVNTVlfUkVROworCX0gZWxzZSB7CisJCS8qIGNvbmZpZ3VyZSB0aGUgdHggYXR0cmlidXRlcyAqLworCQl0eF9hdHRyID0KKwkJCXdsLT5zZXNzaW9uX2NvdW50ZXIgPDwgVFhfSFdfQVRUUl9PRlNUX1NFU1NJT05fQ09VTlRFUjsKKwl9CiAKIAlpZiAod2wtPmJzc190eXBlICE9IEJTU19UWVBFX0FQX0JTUykgewogCQlkZXNjLT5haWQgPSBobGlkOwpAQCAtMjM3LDIwICszMDYsMzcgQEAKIAl0eF9hdHRyIHw9IHJhdGVfaWR4IDw8IFRYX0hXX0FUVFJfT0ZTVF9SQVRFX1BPTElDWTsKIAlkZXNjLT5yZXNlcnZlZCA9IDA7CiAKLQkvKiBhbGlnbiB0aGUgbGVuZ3RoIChhbmQgc3RvcmUgaW4gdGVybXMgb2Ygd29yZHMpICovCi0JcGFkID0gQUxJR04oc2tiLT5sZW4sIFdMMTI3MV9UWF9BTElHTl9UTyk7Ci0JZGVzYy0+bGVuZ3RoID0gY3B1X3RvX2xlMTYocGFkID4+IDIpOworCWFsaWduZWRfbGVuID0gd2wxMnh4X2NhbGNfcGFja2V0X2FsaWdubWVudCh3bCwgc2tiLT5sZW4pOwogCi0JLyogY2FsY3VsYXRlIG51bWJlciBvZiBwYWRkaW5nIGJ5dGVzICovCi0JcGFkID0gcGFkIC0gc2tiLT5sZW47Ci0JdHhfYXR0ciB8PSBwYWQgPDwgVFhfSFdfQVRUUl9PRlNUX0xBU1RfV09SRF9QQUQ7CisJaWYgKHdsLT5jaGlwLmlkID09IENISVBfSURfMTI4M19QRzIwKSB7CisJCWRlc2MtPndsMTI4eF9tZW0uZXh0cmFfYnl0ZXMgPSBhbGlnbmVkX2xlbiAtIHNrYi0+bGVuOworCQlkZXNjLT5sZW5ndGggPSBjcHVfdG9fbGUxNihhbGlnbmVkX2xlbiA+PiAyKTsKKworCQl3bDEyNzFfZGVidWcoREVCVUdfVFgsICJ0eF9maWxsX2hkcjogaGxpZDogJWQgIgorCQkJICAgICAidHhfYXR0cjogMHgleCBsZW46ICVkIGxpZmU6ICVkIG1lbTogJWQiLAorCQkJICAgICBkZXNjLT5obGlkLCB0eF9hdHRyLAorCQkJICAgICBsZTE2X3RvX2NwdShkZXNjLT5sZW5ndGgpLAorCQkJICAgICBsZTE2X3RvX2NwdShkZXNjLT5saWZlX3RpbWUpLAorCQkJICAgICBkZXNjLT53bDEyOHhfbWVtLnRvdGFsX21lbV9ibG9ja3MpOworCX0gZWxzZSB7CisJCWludCBwYWQ7CisKKwkJLyogU3RvcmUgdGhlIGFsaWduZWQgbGVuZ3RoIGluIHRlcm1zIG9mIHdvcmRzICovCisJCWRlc2MtPmxlbmd0aCA9IGNwdV90b19sZTE2KGFsaWduZWRfbGVuID4+IDIpOworCisJCS8qIGNhbGN1bGF0ZSBudW1iZXIgb2YgcGFkZGluZyBieXRlcyAqLworCQlwYWQgPSBhbGlnbmVkX2xlbiAtIHNrYi0+bGVuOworCQl0eF9hdHRyIHw9IHBhZCA8PCBUWF9IV19BVFRSX09GU1RfTEFTVF9XT1JEX1BBRDsKKworCQl3bDEyNzFfZGVidWcoREVCVUdfVFgsICJ0eF9maWxsX2hkcjogcGFkOiAlZCBobGlkOiAlZCAiCisJCQkgICAgICJ0eF9hdHRyOiAweCV4IGxlbjogJWQgbGlmZTogJWQgbWVtOiAlZCIsIHBhZCwKKwkJCSAgICAgZGVzYy0+aGxpZCwgdHhfYXR0ciwKKwkJCSAgICAgbGUxNl90b19jcHUoZGVzYy0+bGVuZ3RoKSwKKwkJCSAgICAgbGUxNl90b19jcHUoZGVzYy0+bGlmZV90aW1lKSwKKwkJCSAgICAgZGVzYy0+d2wxMjd4X21lbS50b3RhbF9tZW1fYmxvY2tzKTsKKwl9CiAKIAlkZXNjLT50eF9hdHRyID0gY3B1X3RvX2xlMTYodHhfYXR0cik7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfVFgsICJ0eF9maWxsX2hkcjogcGFkOiAlZCBobGlkOiAlZCAiCi0JCSJ0eF9hdHRyOiAweCV4IGxlbjogJWQgbGlmZTogJWQgbWVtOiAlZCIsIHBhZCwgZGVzYy0+aGxpZCwKLQkJbGUxNl90b19jcHUoZGVzYy0+dHhfYXR0ciksIGxlMTZfdG9fY3B1KGRlc2MtPmxlbmd0aCksCi0JCWxlMTZfdG9fY3B1KGRlc2MtPmxpZmVfdGltZSksIGRlc2MtPnRvdGFsX21lbV9ibG9ja3MpOwogfQogCiAvKiBjYWxsZXIgbXVzdCBob2xkIHdsLT5tdXRleCAqLwpAQCAtMzAwLDE5ICszODYsMjkgQEAKIAlpZiAod2wtPmJzc190eXBlID09IEJTU19UWVBFX0FQX0JTUykgewogCQl3bDEyNzFfdHhfYXBfdXBkYXRlX2luY29ubmVjdGlvbl9zdGEod2wsIHNrYik7CiAJCXdsMTI3MV90eF9yZWd1bGF0ZV9saW5rKHdsLCBobGlkKTsKKwl9IGVsc2UgeworCQl3bDEyNzFfdHhfdXBkYXRlX2ZpbHRlcnMod2wsIHNrYik7CiAJfQogCiAJd2wxMjcxX3R4X2ZpbGxfaGRyKHdsLCBza2IsIGV4dHJhLCBpbmZvLCBobGlkKTsKIAogCS8qCi0JICogVGhlIGxlbmd0aCBvZiBlYWNoIHBhY2tldCBpcyBzdG9yZWQgaW4gdGVybXMgb2Ygd29yZHMuIFRodXMsIHdlIG11c3QKLQkgKiBwYWQgdGhlIHNrYiBkYXRhIHRvIG1ha2Ugc3VyZSBpdHMgbGVuZ3RoIGlzIGFsaWduZWQuCi0JICogVGhlIG51bWJlciBvZiBwYWRkaW5nIGJ5dGVzIGlzIGNvbXB1dGVkIGFuZCBzZXQgaW4gd2wxMjcxX3R4X2ZpbGxfaGRyCisJICogVGhlIGxlbmd0aCBvZiBlYWNoIHBhY2tldCBpcyBzdG9yZWQgaW4gdGVybXMgb2YKKwkgKiB3b3Jkcy4gVGh1cywgd2UgbXVzdCBwYWQgdGhlIHNrYiBkYXRhIHRvIG1ha2Ugc3VyZSBpdHMKKwkgKiBsZW5ndGggaXMgYWxpZ25lZC4gIFRoZSBudW1iZXIgb2YgcGFkZGluZyBieXRlcyBpcyBjb21wdXRlZAorCSAqIGFuZCBzZXQgaW4gd2wxMjcxX3R4X2ZpbGxfaGRyLgorCSAqIEluIHNwZWNpYWwgY2FzZXMsIHdlIHdhbnQgdG8gYWxpZ24gdG8gYSBzcGVjaWZpYyBibG9jayBzaXplCisJICogKGVnLiBmb3Igd2wxMjh4IHdpdGggU0RJTyB3ZSBhbGlnbiB0byAyNTYpLgogCSAqLwotCXRvdGFsX2xlbiA9IEFMSUdOKHNrYi0+bGVuLCBXTDEyNzFfVFhfQUxJR05fVE8pOworCXRvdGFsX2xlbiA9IHdsMTJ4eF9jYWxjX3BhY2tldF9hbGlnbm1lbnQod2wsIHNrYi0+bGVuKTsKKwogCW1lbWNweSh3bC0+YWdncl9idWYgKyBidWZfb2Zmc2V0LCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAltZW1zZXQod2wtPmFnZ3JfYnVmICsgYnVmX29mZnNldCArIHNrYi0+bGVuLCAwLCB0b3RhbF9sZW4gLSBza2ItPmxlbik7CiAKKwkvKiBSZXZlcnQgc2lkZSBlZmZlY3RzIGluIHRoZSBkdW1teSBwYWNrZXQgc2tiLCBzbyBpdCBjYW4gYmUgcmV1c2VkICovCisJaWYgKHdsMTJ4eF9pc19kdW1teV9wYWNrZXQod2wsIHNrYikpCisJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCB3bDEyNzFfdHhfaHdfZGVzY3IpKTsKKwogCXJldHVybiB0b3RhbF9sZW47CiB9CiAKQEAgLTQyNSwxMCArNTIxLDIzIEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqd2wxMjcxX3NrYl9kZXF1ZXVlKHN0cnVjdCB3bDEyNzEgKndsKQogewotCWlmICh3bC0+YnNzX3R5cGUgPT0gQlNTX1RZUEVfQVBfQlNTKQotCQlyZXR1cm4gd2wxMjcxX2FwX3NrYl9kZXF1ZXVlKHdsKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogCi0JcmV0dXJuIHdsMTI3MV9zdGFfc2tiX2RlcXVldWUod2wpOworCWlmICh3bC0+YnNzX3R5cGUgPT0gQlNTX1RZUEVfQVBfQlNTKQorCQlza2IgPSB3bDEyNzFfYXBfc2tiX2RlcXVldWUod2wpOworCWVsc2UKKwkJc2tiID0gd2wxMjcxX3N0YV9za2JfZGVxdWV1ZSh3bCk7CisKKwlpZiAoIXNrYiAmJgorCSAgICB0ZXN0X2FuZF9jbGVhcl9iaXQoV0wxMjcxX0ZMQUdfRFVNTVlfUEFDS0VUX1BFTkRJTkcsICZ3bC0+ZmxhZ3MpKSB7CisJCXNrYiA9IHdsLT5kdW1teV9wYWNrZXQ7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOworCQl3bC0+dHhfcXVldWVfY291bnQtLTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPndsX2xvY2ssIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gc2tiOwogfQogCiBzdGF0aWMgdm9pZCB3bDEyNzFfc2tiX3F1ZXVlX2hlYWQoc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCBza19idWZmICpza2IpCkBAIC00MzYsNyArNTQ1LDkgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBxID0gd2wxMjcxX3R4X2dldF9xdWV1ZShza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7CiAKLQlpZiAod2wtPmJzc190eXBlID09IEJTU19UWVBFX0FQX0JTUykgeworCWlmICh3bDEyeHhfaXNfZHVtbXlfcGFja2V0KHdsLCBza2IpKSB7CisJCXNldF9iaXQoV0wxMjcxX0ZMQUdfRFVNTVlfUEFDS0VUX1BFTkRJTkcsICZ3bC0+ZmxhZ3MpOworCX0gZWxzZSBpZiAod2wtPmJzc190eXBlID09IEJTU19UWVBFX0FQX0JTUykgewogCQl1OCBobGlkID0gd2wxMjcxX3R4X2dldF9obGlkKHNrYik7CiAJCXNrYl9xdWV1ZV9oZWFkKCZ3bC0+bGlua3NbaGxpZF0udHhfcXVldWVbcV0sIHNrYik7CiAKQEAgLTQ1NCwyMiArNTY1LDE0IEBACiB2b2lkIHdsMTI3MV90eF93b3JrX2xvY2tlZChzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWJvb2wgd29rZW5fdXAgPSBmYWxzZTsKIAl1MzIgYnVmX29mZnNldCA9IDA7CiAJYm9vbCBzZW50X3BhY2tldHMgPSBmYWxzZTsKIAlpbnQgcmV0OwogCiAJaWYgKHVubGlrZWx5KHdsLT5zdGF0ZSA9PSBXTDEyNzFfU1RBVEVfT0ZGKSkKLQkJZ290byBvdXQ7CisJCXJldHVybjsKIAogCXdoaWxlICgoc2tiID0gd2wxMjcxX3NrYl9kZXF1ZXVlKHdsKSkpIHsKLQkJaWYgKCF3b2tlbl91cCkgewotCQkJcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wpOwotCQkJaWYgKHJldCA8IDApCi0JCQkJZ290byBvdXRfYWNrOwotCQkJd29rZW5fdXAgPSB0cnVlOwotCQl9Ci0KIAkJcmV0ID0gd2wxMjcxX3ByZXBhcmVfdHhfZnJhbWUod2wsIHNrYiwgYnVmX29mZnNldCk7CiAJCWlmIChyZXQgPT0gLUVBR0FJTikgewogCQkJLyoKQEAgLTUxNiwxOCArNjE5LDIyIEBACiAKIAkJd2wxMjcxX2hhbmRsZV90eF9sb3dfd2F0ZXJtYXJrKHdsKTsKIAl9Ci0KLW91dDoKLQlpZiAod29rZW5fdXApCi0JCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOwogfQogCiB2b2lkIHdsMTI3MV90eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2wxMjcxLCB0eF93b3JrKTsKKwlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKwlyZXQgPSB3bDEyNzFfcHNfZWxwX3dha2V1cCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCiAJd2wxMjcxX3R4X3dvcmtfbG9ja2VkKHdsKTsKKworCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOworb3V0OgogCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKIH0KIApAQCAtNTQ5LDYgKzY1NiwxMSBAQAogCXNrYiA9IHdsLT50eF9mcmFtZXNbaWRdOwogCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAKKwlpZiAod2wxMnh4X2lzX2R1bW15X3BhY2tldCh3bCwgc2tiKSkgeworCQl3bDEyNzFfZnJlZV90eF9pZCh3bCwgaWQpOworCQlyZXR1cm47CisJfQorCiAJLyogdXBkYXRlIHRoZSBUWCBzdGF0dXMgaW5mbyAqLwogCWlmIChyZXN1bHQtPnN0YXR1cyA9PSBUWF9TVUNDRVNTKSB7CiAJCWlmICghKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spKQpAQCAtNjU3LDggKzc2OSw4IEBACiAJd2wxMjcxX2hhbmRsZV90eF9sb3dfd2F0ZXJtYXJrKHdsKTsKIH0KIAotLyogY2FsbGVyIG11c3QgaG9sZCB3bC0+bXV0ZXggKi8KLXZvaWQgd2wxMjcxX3R4X3Jlc2V0KHN0cnVjdCB3bDEyNzEgKndsKQorLyogY2FsbGVyIG11c3QgaG9sZCB3bC0+bXV0ZXggYW5kIFRYIG11c3QgYmUgc3RvcHBlZCAqLwordm9pZCB3bDEyNzFfdHhfcmVzZXQoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgcmVzZXRfdHhfcXVldWVzKQogewogCWludCBpOwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC02NzgsMTAgKzc5MCwxMyBAQAogCQkJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmd2wtPnR4X3F1ZXVlW2ldKSkpIHsKIAkJCQl3bDEyNzFfZGVidWcoREVCVUdfVFgsICJmcmVlaW5nIHNrYiAweCVwIiwKIAkJCQkJICAgICBza2IpOwotCQkJCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0JCQkJaW5mby0+c3RhdHVzLnJhdGVzWzBdLmlkeCA9IC0xOwotCQkJCWluZm8tPnN0YXR1cy5yYXRlc1swXS5jb3VudCA9IDA7Ci0JCQkJaWVlZTgwMjExX3R4X3N0YXR1cyh3bC0+aHcsIHNrYik7CisKKwkJCQlpZiAoIXdsMTJ4eF9pc19kdW1teV9wYWNrZXQod2wsIHNrYikpIHsKKwkJCQkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwkJCQkJaW5mby0+c3RhdHVzLnJhdGVzWzBdLmlkeCA9IC0xOworCQkJCQlpbmZvLT5zdGF0dXMucmF0ZXNbMF0uY291bnQgPSAwOworCQkJCQlpZWVlODAyMTFfdHhfc3RhdHVzKHdsLT5odywgc2tiKTsKKwkJCQl9CiAJCQl9CiAJCX0KIAl9CkBAIC02OTEsOCArODA2LDEwIEBACiAJLyoKIAkgKiBNYWtlIHN1cmUgdGhlIGRyaXZlciBpcyBhdCBhIGNvbnNpc3RlbnQgc3RhdGUsIGluIGNhc2UgdGhpcwogCSAqIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGEgY29udGV4dCBvdGhlciB0aGFuIGludGVyZmFjZSByZW1vdmFsLgorCSAqIFRoaXMgY2FsbCB3aWxsIGFsd2F5cyB3YWtlIHRoZSBUWCBxdWV1ZXMuCiAJICovCi0Jd2wxMjcxX2hhbmRsZV90eF9sb3dfd2F0ZXJtYXJrKHdsKTsKKwlpZiAocmVzZXRfdHhfcXVldWVzKQorCQl3bDEyNzFfaGFuZGxlX3R4X2xvd193YXRlcm1hcmsod2wpOwogCiAJZm9yIChpID0gMDsgaSA8IEFDWF9UWF9ERVNDUklQVE9SUzsgaSsrKSB7CiAJCWlmICh3bC0+dHhfZnJhbWVzW2ldID09IE5VTEwpCkBAIC03MDIsMjEgKzgxOSwyNyBAQAogCQl3bDEyNzFfZnJlZV90eF9pZCh3bCwgaSk7CiAJCXdsMTI3MV9kZWJ1ZyhERUJVR19UWCwgImZyZWVpbmcgc2tiIDB4JXAiLCBza2IpOwogCi0JCS8qIFJlbW92ZSBwcml2YXRlIGhlYWRlcnMgYmVmb3JlIHBhc3NpbmcgdGhlIHNrYiB0byBtYWM4MDIxMSAqLwotCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCQlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3Qgd2wxMjcxX3R4X2h3X2Rlc2NyKSk7Ci0JCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSAmJgotCQkgICAgaW5mby0+Y29udHJvbC5od19rZXktPmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9US0lQKSB7Ci0JCQlpbnQgaGRybGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2Ioc2tiKTsKLQkJCW1lbW1vdmUoc2tiLT5kYXRhICsgV0wxMjcxX1RLSVBfSVZfU1BBQ0UsIHNrYi0+ZGF0YSwKLQkJCQloZHJsZW4pOwotCQkJc2tiX3B1bGwoc2tiLCBXTDEyNzFfVEtJUF9JVl9TUEFDRSk7CisJCWlmICghd2wxMnh4X2lzX2R1bW15X3BhY2tldCh3bCwgc2tiKSkgeworCQkJLyoKKwkJCSAqIFJlbW92ZSBwcml2YXRlIGhlYWRlcnMgYmVmb3JlIHBhc3NpbmcgdGhlIHNrYiB0bworCQkJICogbWFjODAyMTEKKwkJCSAqLworCQkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwkJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCB3bDEyNzFfdHhfaHdfZGVzY3IpKTsKKwkJCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSAmJgorCQkJICAgIGluZm8tPmNvbnRyb2wuaHdfa2V5LT5jaXBoZXIgPT0KKwkJCSAgICBXTEFOX0NJUEhFUl9TVUlURV9US0lQKSB7CisJCQkJaW50IGhkcmxlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKHNrYik7CisJCQkJbWVtbW92ZShza2ItPmRhdGEgKyBXTDEyNzFfVEtJUF9JVl9TUEFDRSwKKwkJCQkJc2tiLT5kYXRhLCBoZHJsZW4pOworCQkJCXNrYl9wdWxsKHNrYiwgV0wxMjcxX1RLSVBfSVZfU1BBQ0UpOworCQkJfQorCisJCQlpbmZvLT5zdGF0dXMucmF0ZXNbMF0uaWR4ID0gLTE7CisJCQlpbmZvLT5zdGF0dXMucmF0ZXNbMF0uY291bnQgPSAwOworCisJCQlpZWVlODAyMTFfdHhfc3RhdHVzKHdsLT5odywgc2tiKTsKIAkJfQotCi0JCWluZm8tPnN0YXR1cy5yYXRlc1swXS5pZHggPSAtMTsKLQkJaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50ID0gMDsKLQotCQlpZWVlODAyMTFfdHhfc3RhdHVzKHdsLT5odywgc2tiKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC90eC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3R4LmgKaW5kZXggMDJmMDdmYS4uODMyZjkyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3R4LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3R4LmgKQEAgLTI1LDcgKzI1LDYgQEAKICNpZm5kZWYgX19UWF9IX18KICNkZWZpbmUgX19UWF9IX18KIAotI2RlZmluZSBUWF9IV19CTE9DS19TUEFSRSAgICAgICAgICAgICAgICAyCiAjZGVmaW5lIFRYX0hXX0JMT0NLX1NJWkUgICAgICAgICAgICAgICAgIDI1MgogCiAjZGVmaW5lIFRYX0hXX01HTVRfUEtUX0xJRkVUSU1FX1RVICAgICAgIDIwMDAKQEAgLTQxLDYgKzQwLDcgQEAKIAkJCQkJICBCSVQoOCkgfCBCSVQoOSkpCiAjZGVmaW5lIFRYX0hXX0FUVFJfTEFTVF9XT1JEX1BBRCAgICAgICAgIChCSVQoMTApIHwgQklUKDExKSkKICNkZWZpbmUgVFhfSFdfQVRUUl9UWF9DTVBMVF9SRVEgICAgICAgICAgQklUKDEyKQorI2RlZmluZSBUWF9IV19BVFRSX1RYX0RVTU1ZX1JFUSAgICAgICAgICBCSVQoMTMpCiAKICNkZWZpbmUgVFhfSFdfQVRUUl9PRlNUX1NBVkVfUkVUUklFUyAgICAgMAogI2RlZmluZSBUWF9IV19BVFRSX09GU1RfSEVBREVSX1BBRCAgICAgICAxCkBAIC01NSwyMCArNTUsNjAgQEAKICNkZWZpbmUgV0wxMjcxX1RYX0FMSUdOX1RPIDQKICNkZWZpbmUgV0wxMjcxX1RLSVBfSVZfU1BBQ0UgNAogCisvKiBVc2VkIGZvciBtYW5hZ2VtZW50IGZyYW1lcyBhbmQgZHVtbXkgcGFja2V0cyAqLworI2RlZmluZSBXTDEyNzFfVElEX01HTVQgNworCitzdHJ1Y3Qgd2wxMjd4X3R4X21lbSB7CisJLyoKKwkgKiBOdW1iZXIgb2YgZXh0cmEgbWVtb3J5IGJsb2NrcyB0byBhbGxvY2F0ZSBmb3IgdGhpcyBwYWNrZXQKKwkgKiBpbiBhZGRpdGlvbiB0byB0aGUgbnVtYmVyIG9mIGJsb2NrcyBkZXJpdmVkIGZyb20gdGhlIHBhY2tldAorCSAqIGxlbmd0aC4KKwkgKi8KKwl1OCBleHRyYV9ibG9ja3M7CisJLyoKKwkgKiBUb3RhbCBudW1iZXIgb2YgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgdGhlIGhvc3QgZm9yCisJICogdGhpcyBwYWNrZXQuIE11c3QgYmUgZXF1YWwgb3IgZ3JlYXRlciB0aGFuIHRoZSBhY3R1YWwKKwkgKiBibG9ja3MgbnVtYmVyIGFsbG9jYXRlZCBieSBIVy4KKwkgKi8KKwl1OCB0b3RhbF9tZW1fYmxvY2tzOworfSBfX3BhY2tlZDsKKworc3RydWN0IHdsMTI4eF90eF9tZW0geworCS8qCisJICogVG90YWwgbnVtYmVyIG9mIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IHRoZSBob3N0IGZvcgorCSAqIHRoaXMgcGFja2V0LgorCSAqLworCXU4IHRvdGFsX21lbV9ibG9ja3M7CisJLyoKKwkgKiBOdW1iZXIgb2YgZXh0cmEgYnl0ZXMsIGF0IHRoZSBlbmQgb2YgdGhlIGZyYW1lLiB0aGUgaG9zdAorCSAqIHVzZXMgdGhpcyBwYWRkaW5nIHRvIGNvbXBsZXRlIGVhY2ggZnJhbWUgdG8gaW50ZWdlciBudW1iZXIKKwkgKiBvZiBTRElPIGJsb2Nrcy4KKwkgKi8KKwl1OCBleHRyYV9ieXRlczsKK30gX19wYWNrZWQ7CisKKy8qCisgKiBPbiB3bDEyOHggYmFzZWQgZGV2aWNlcywgd2hlbiBUWCBwYWNrZXRzIGFyZSBhZ2dyZWdhdGVkLCBlYWNoIHBhY2tldAorICogc2l6ZSBtdXN0IGJlIGFsaWduZWQgdG8gdGhlIFNESU8gYmxvY2sgc2l6ZS4gVGhlIG1heGltdW0gYmxvY2sgc2l6ZQorICogaXMgYm91bmRlZCBieSB0aGUgdHlwZSBvZiB0aGUgcGFkZGVkIGJ5dGVzIGZpZWxkIHRoYXQgaXMgc2VudCB0byB0aGUKKyAqIEZXLiBDdXJyZW50bHkgdGhlIHR5cGUgaXMgdTgsIHNvIHRoZSBtYXhpbXVtIGJsb2NrIHNpemUgaXMgMjU2IGJ5dGVzLgorICovCisjZGVmaW5lIFdMMTJYWF9CVVNfQkxPQ0tfU0laRSBtaW4oNTEydSwJXAorCSAgICAoMXUgPDwgKDggKiBzaXplb2YoKChzdHJ1Y3Qgd2wxMjh4X3R4X21lbSAqKSAwKS0+ZXh0cmFfYnl0ZXMpKSkpCisKIHN0cnVjdCB3bDEyNzFfdHhfaHdfZGVzY3IgewogCS8qIExlbmd0aCBvZiBwYWNrZXQgaW4gd29yZHMsIGluY2x1ZGluZyBkZXNjcmlwdG9yK2hlYWRlcitkYXRhICovCiAJX19sZTE2IGxlbmd0aDsKLQkvKiBOdW1iZXIgb2YgZXh0cmEgbWVtb3J5IGJsb2NrcyB0byBhbGxvY2F0ZSBmb3IgdGhpcyBwYWNrZXQgaW4KLQkgICBhZGRpdGlvbiB0byB0aGUgbnVtYmVyIG9mIGJsb2NrcyBkZXJpdmVkIGZyb20gdGhlIHBhY2tldCBsZW5ndGggKi8KLQl1OCBleHRyYV9tZW1fYmxvY2tzOwotCS8qIFRvdGFsIG51bWJlciBvZiBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSB0aGUgaG9zdCBmb3IgdGhpcyBwYWNrZXQuCi0JICAgTXVzdCBiZSBlcXVhbCBvciBncmVhdGVyIHRoYW4gdGhlIGFjdHVhbCBibG9ja3MgbnVtYmVyIGFsbG9jYXRlZCBieQotCSAgIEhXISEgKi8KLQl1OCB0b3RhbF9tZW1fYmxvY2tzOworCXVuaW9uIHsKKwkJc3RydWN0IHdsMTI3eF90eF9tZW0gd2wxMjd4X21lbTsKKwkJc3RydWN0IHdsMTI4eF90eF9tZW0gd2wxMjh4X21lbTsKKwl9IF9fcGFja2VkOwogCS8qIERldmljZSB0aW1lIChpbiB1cykgd2hlbiB0aGUgcGFja2V0IGFycml2ZWQgdG8gdGhlIGRyaXZlciAqLwogCV9fbGUzMiBzdGFydF90aW1lOwotCS8qIE1heCBkZWxheSBpbiBUVXMgdW50aWwgdHJhbnNtaXNzaW9uLiBUaGUgbGFzdCBkZXZpY2UgdGltZSB0aGUKLQkgICBwYWNrZXQgY2FuIGJlIHRyYW5zbWl0dGVkIGlzOiBzdGFydFRpbWUrKDEwMjQqTGlmZVRpbWUpICovCisJLyoKKwkgKiBNYXggZGVsYXkgaW4gVFVzIHVudGlsIHRyYW5zbWlzc2lvbi4gVGhlIGxhc3QgZGV2aWNlIHRpbWUgdGhlCisJICogcGFja2V0IGNhbiBiZSB0cmFuc21pdHRlZCBpczogc3RhcnRfdGltZSArICgxMDI0ICogbGlmZV90aW1lKQorCSAqLwogCV9fbGUxNiBsaWZlX3RpbWU7CiAJLyogQml0d2lzZSBmaWVsZHMgLSBzZWUgVFhfQVRUUi4uLiBkZWZpbml0aW9ucyBhYm92ZS4gKi8KIAlfX2xlMTYgdHhfYXR0cjsKQEAgLTE0NSw3ICsxODUsNyBAQAogdm9pZCB3bDEyNzFfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCB3bDEyNzFfdHhfd29ya19sb2NrZWQoc3RydWN0IHdsMTI3MSAqd2wpOwogdm9pZCB3bDEyNzFfdHhfY29tcGxldGUoc3RydWN0IHdsMTI3MSAqd2wpOwotdm9pZCB3bDEyNzFfdHhfcmVzZXQoc3RydWN0IHdsMTI3MSAqd2wpOwordm9pZCB3bDEyNzFfdHhfcmVzZXQoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgcmVzZXRfdHhfcXVldWVzKTsKIHZvaWQgd2wxMjcxX3R4X2ZsdXNoKHN0cnVjdCB3bDEyNzEgKndsKTsKIHU4IHdsMTI3MV9yYXRlX3RvX2lkeChpbnQgcmF0ZSwgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKTsKIHUzMiB3bDEyNzFfdHhfZW5hYmxlZF9yYXRlc19nZXQoc3RydWN0IHdsMTI3MSAqd2wsIHUzMiByYXRlX3NldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMnh4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMnh4LmgKaW5kZXggODZiZTgzZS4uZmJlOGY0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTJ4eC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyeHguaApAQCAtMTMxLDkgKzEzMSwxNiBAQAogCiAKICNkZWZpbmUgV0wxMjcxX0ZXX05BTUUgInRpLWNvbm5lY3Rpdml0eS93bDEyNzEtZnctMi5iaW4iCi0jZGVmaW5lIFdMMTI3MV9BUF9GV19OQU1FICJ0aS1jb25uZWN0aXZpdHkvd2wxMjcxLWZ3LWFwLmJpbiIKKyNkZWZpbmUgV0wxMjhYX0ZXX05BTUUgInRpLWNvbm5lY3Rpdml0eS93bDEyOHgtZncuYmluIgorI2RlZmluZSBXTDEyN1hfQVBfRldfTkFNRSAidGktY29ubmVjdGl2aXR5L3dsMTI3MS1mdy1hcC5iaW4iCisjZGVmaW5lIFdMMTI4WF9BUF9GV19OQU1FICJ0aS1jb25uZWN0aXZpdHkvd2wxMjh4LWZ3LWFwLmJpbiIKIAotI2RlZmluZSBXTDEyNzFfTlZTX05BTUUgInRpLWNvbm5lY3Rpdml0eS93bDEyNzEtbnZzLmJpbiIKKy8qCisgKiB3bDEyN3ggYW5kIHdsMTI4eCBhcmUgdXNpbmcgdGhlIHNhbWUgTlZTIGZpbGUgbmFtZS4gSG93ZXZlciwgdGhlCisgKiBpbmkgcGFyYW1ldGVycyBiZXR3ZWVuIHRoZW0gYXJlIGRpZmZlcmVudC4gIFRoZSBkcml2ZXIgdmFsaWRhdGVzCisgKiB0aGUgY29ycmVjdCBOVlMgc2l6ZSBpbiB3bDEyNzFfYm9vdF91cGxvYWRfbnZzKCkuCisgKi8KKyNkZWZpbmUgV0wxMlhYX05WU19OQU1FICJ0aS1jb25uZWN0aXZpdHkvd2wxMjcxLW52cy5iaW4iCiAKICNkZWZpbmUgV0wxMjcxX1RYX1NFQ1VSSVRZX0xPMTYocykgKCh1MTYpKChzKSAmIDB4ZmZmZikpCiAjZGVmaW5lIFdMMTI3MV9UWF9TRUNVUklUWV9ISTMyKHMpICgodTMyKSgoKHMpID4+IDE2KSAmIDB4ZmZmZmZmZmYpKQpAQCAtMjAwLDEzICsyMDcsMjkgQEAKIAogc3RydWN0IHdsMTI3MTsKIAotI2RlZmluZSBXTDEyWFhfTlVNX0ZXX1ZFUiA1CitlbnVtIHsKKwlGV19WRVJfQ0hJUCwKKwlGV19WRVJfSUZfVFlQRSwKKwlGV19WRVJfTUFKT1IsCisJRldfVkVSX1NVQlRZUEUsCisJRldfVkVSX01JTk9SLAogCi0vKiBGSVhNRTogSSdtIG5vdCBzdXJlIGFib3V0IHRoaXMgc3RydWN0dXJlIG5hbWUgKi8KKwlOVU1fRldfVkVSCit9OworCisjZGVmaW5lIEZXX1ZFUl9DSElQX1dMMTI3WCA2CisjZGVmaW5lIEZXX1ZFUl9DSElQX1dMMTI4WCA3CisKKyNkZWZpbmUgRldfVkVSX0lGX1RZUEVfU1RBIDEKKyNkZWZpbmUgRldfVkVSX0lGX1RZUEVfQVAgIDIKKworI2RlZmluZSBGV19WRVJfTUlOT1JfMV9TUEFSRV9TVEFfTUlOIDU4CisjZGVmaW5lIEZXX1ZFUl9NSU5PUl8xX1NQQVJFX0FQX01JTiAgNDcKKwogc3RydWN0IHdsMTI3MV9jaGlwIHsKIAl1MzIgaWQ7CiAJY2hhciBmd192ZXJfc3RyW0VUSFRPT0xfQlVTSU5GT19MRU5dOwotCXVuc2lnbmVkIGludCBmd192ZXJbV0wxMlhYX05VTV9GV19WRVJdOworCXVuc2lnbmVkIGludCBmd192ZXJbTlVNX0ZXX1ZFUl07CiB9OwogCiBzdHJ1Y3Qgd2wxMjcxX3N0YXRzIHsKQEAgLTI2MSw2ICsyODQsOCBAQAogCXU4ICB0eF90b3RhbDsKIAl1OCAgcmVzZXJ2ZWQxOwogCV9fbGUxNiByZXNlcnZlZDI7CisJLyogVG90YWwgc3RydWN0dXJlIHNpemUgaXMgNjggYnl0ZXMgKi8KKwl1MzIgcGFkZGluZzsKIH0gX19wYWNrZWQ7CiAKIHN0cnVjdCB3bDEyNzFfZndfZnVsbF9zdGF0dXMgewpAQCAtMjc3LDkgKzMwMiwxMCBAQAogCXUzMiBhZGRyX2V4dHJhOwogfTsKIAorI2RlZmluZSBXTDEyNzFfTUFYX0NIQU5ORUxTIDY0CiBzdHJ1Y3Qgd2wxMjcxX3NjYW4gewogCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcTsKLQlib29sICpzY2FubmVkX2NoOworCXVuc2lnbmVkIGxvbmcgc2Nhbm5lZF9jaFtCSVRTX1RPX0xPTkdTKFdMMTI3MV9NQVhfQ0hBTk5FTFMpXTsKIAlib29sIGZhaWxlZDsKIAl1OCBzdGF0ZTsKIAl1OCBzc2lkW0lXX0VTU0lEX01BWF9TSVpFKzFdOwpAQCAtMjk3LDYgKzMyMyw3IEBACiAJc3RydWN0IGRldmljZSogKCpkZXYpKHN0cnVjdCB3bDEyNzEgKndsKTsKIAl2b2lkICgqZW5hYmxlX2lycSkoc3RydWN0IHdsMTI3MSAqd2wpOwogCXZvaWQgKCpkaXNhYmxlX2lycSkoc3RydWN0IHdsMTI3MSAqd2wpOworCXZvaWQgKCpzZXRfYmxvY2tfc2l6ZSkgKHN0cnVjdCB3bDEyNzEgKndsLCB1bnNpZ25lZCBpbnQgYmxrc3opOwogfTsKIAogI2RlZmluZSBNQVhfTlVNX0tFWVMgMTQKQEAgLTMxOSwxNSArMzQ2LDE5IEBACiAJV0wxMjcxX0ZMQUdfVFhfUVVFVUVfU1RPUFBFRCwKIAlXTDEyNzFfRkxBR19UWF9QRU5ESU5HLAogCVdMMTI3MV9GTEFHX0lOX0VMUCwKKwlXTDEyNzFfRkxBR19FTFBfUkVRVUVTVEVELAogCVdMMTI3MV9GTEFHX1BTTSwKIAlXTDEyNzFfRkxBR19QU01fUkVRVUVTVEVELAogCVdMMTI3MV9GTEFHX0lSUV9SVU5OSU5HLAogCVdMMTI3MV9GTEFHX0lETEUsCi0JV0wxMjcxX0ZMQUdfSURMRV9SRVFVRVNURUQsCiAJV0wxMjcxX0ZMQUdfUFNQT0xMX0ZBSUxVUkUsCiAJV0wxMjcxX0ZMQUdfU1RBX1NUQVRFX1NFTlQsCiAJV0wxMjcxX0ZMQUdfRldfVFhfQlVTWSwKLQlXTDEyNzFfRkxBR19BUF9TVEFSVEVECisJV0wxMjcxX0ZMQUdfQVBfU1RBUlRFRCwKKwlXTDEyNzFfRkxBR19JRl9JTklUSUFMSVpFRCwKKwlXTDEyNzFfRkxBR19EVU1NWV9QQUNLRVRfUEVORElORywKKwlXTDEyNzFfRkxBR19TVVNQRU5ERUQsCisJV0wxMjcxX0ZMQUdfUEVORElOR19XT1JLLAogfTsKIAogc3RydWN0IHdsMTI3MV9saW5rIHsKQEAgLTM3MSw3ICs0MDIsNyBAQAogCXU4ICpmdzsKIAlzaXplX3QgZndfbGVuOwogCXU4IGZ3X2Jzc190eXBlOwotCXN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUgKm52czsKKwl2b2lkICpudnM7CiAJc2l6ZV90IG52c19sZW47CiAKIAlzOCBod19wZ192ZXI7CkBAIC0zODksNiArNDIwLDcgQEAKIAkvKiBBY2NvdW50aW5nIGZvciBhbGxvY2F0ZWQgLyBhdmFpbGFibGUgVFggYmxvY2tzIG9uIEhXICovCiAJdTMyIHR4X2Jsb2Nrc19mcmVlZFtOVU1fVFhfUVVFVUVTXTsKIAl1MzIgdHhfYmxvY2tzX2F2YWlsYWJsZTsKKwl1MzIgdHhfYWxsb2NhdGVkX2Jsb2NrczsKIAl1MzIgdHhfcmVzdWx0c19jb3VudDsKIAogCS8qIFRyYW5zbWl0dGVkIFRYIHBhY2tldHMgY291bnRlciBmb3IgY2hpcHNldCBpbnRlcmZhY2UgKi8KQEAgLTQzMCw2ICs0NjIsOSBAQAogCS8qIEludGVybWVkaWF0ZSBidWZmZXIsIHVzZWQgZm9yIHBhY2tldCBhZ2dyZWdhdGlvbiAqLwogCXU4ICphZ2dyX2J1ZjsKIAorCS8qIFJldXNhYmxlIGR1bW15IHBhY2tldCB0ZW1wbGF0ZSAqLworCXN0cnVjdCBza19idWZmICpkdW1teV9wYWNrZXQ7CisKIAkvKiBOZXR3b3JrIHN0YWNrIHdvcmsgICovCiAJc3RydWN0IHdvcmtfc3RydWN0IG5ldHN0YWNrX3dvcms7CiAKQEAgLTQ0Niw2ICs0ODEsOCBAQAogCXN0cnVjdCB3bDEyNzFfc2NhbiBzY2FuOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgc2Nhbl9jb21wbGV0ZV93b3JrOwogCisJYm9vbCBzY2hlZF9zY2FubmluZzsKKwogCS8qIHByb2JlLXJlcSB0ZW1wbGF0ZSBmb3IgdGhlIGN1cnJlbnQgQVAgKi8KIAlzdHJ1Y3Qgc2tfYnVmZiAqcHJvYmVyZXE7CiAKQEAgLTQ3Niw2ICs1MTMsNyBAQAogCXVuc2lnbmVkIGludCByeF9maWx0ZXI7CiAKIAlzdHJ1Y3QgY29tcGxldGlvbiAqZWxwX2NvbXBsOworCXN0cnVjdCBjb21wbGV0aW9uICpwc19jb21wbDsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGVscF93b3JrOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgcHNwb2xsX3dvcms7CiAKQEAgLTUyNyw2ICs1NjUsMTQgQEAKIAlib29sIGJhX3N1cHBvcnQ7CiAJdTggYmFfcnhfYml0bWFwOwogCisJaW50IHRjeG9fY2xvY2s7CisKKwkvKgorCSAqIHdvd2xhbiB0cmlnZ2VyIHdhcyBjb25maWd1cmVkIGR1cmluZyBzdXNwZW5kLgorCSAqIChjdXJyZW50bHksIG9ubHkgIkFOWSIgdHJpZ2dlciBpcyBzdXBwb3J0ZWQpCisJICovCisJYm9vbCB3b3dfZW5hYmxlZDsKKwogCS8qCiAJICogQVAtbW9kZSAtIGxpbmtzIGluZGV4ZWQgYnkgSExJRC4gVGhlIGdsb2JhbCBhbmQgYnJvYWRjYXN0IGxpbmtzCiAJICogYXJlIGFsd2F5cyBhY3RpdmUuCkBAIC01NDQsNiArNTkwLDkgQEAKIAogCS8qIFF1aXJrcyBvZiBzcGVjaWZpYyBoYXJkd2FyZSByZXZpc2lvbnMgKi8KIAl1bnNpZ25lZCBpbnQgcXVpcmtzOworCisJLyogUGxhdGZvcm0gbGltaXRhdGlvbnMgKi8KKwl1bnNpZ25lZCBpbnQgcGxhdGZvcm1fcXVpcmtzOwogfTsKIAogc3RydWN0IHdsMTI3MV9zdGF0aW9uIHsKQEAgLTU3Niw2ICs2MjUsMTUgQEAKIC8qIFF1aXJrcyAqLwogCiAvKiBFYWNoIFJYL1RYIHRyYW5zYWN0aW9uIHJlcXVpcmVzIGFuIGVuZC1vZi10cmFuc2FjdGlvbiB0cmFuc2ZlciAqLwotI2RlZmluZSBXTDEyWFhfUVVJUktfRU5EX09GX1RSQU5TQUNUSU9OCUJJVCgwKQorI2RlZmluZSBXTDEyWFhfUVVJUktfRU5EX09GX1RSQU5TQUNUSU9OCQlCSVQoMCkKKworLyoKKyAqIE9sZGVyIGZpcm13YXJlcyB1c2UgMiBzcGFyZSBUWCBibG9ja3MKKyAqIChmb3IgU1RBIDwgNi4xLjMuNTAuNTggb3IgZm9yIEFQIDwgNi4yLjAuMC40NykKKyAqLworI2RlZmluZSBXTDEyWFhfUVVJUktfVVNFXzJfU1BBUkVfQkxPQ0tTCQlCSVQoMSkKKworLyogV0wxMjhYIHJlcXVpcmVzIGFnZ3JlZ2F0ZWQgcGFja2V0cyB0byBiZSBhbGlnbmVkIHRvIHRoZSBTRElPIGJsb2NrIHNpemUgKi8KKyNkZWZpbmUgV0wxMlhYX1FVSVJLX0JMT0NLU0laRV9BTElHTk1FTlQJQklUKDIpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jCmluZGV4IGE3M2EzMDUuLmZmMzA2ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmMKQEAgLTU1Nyw3ICs1NTcsNyBAQAogCXJldHVybiByOwogfQogCi0vKiBDUjE1NyBjYW4gYmUgb3B0aW9uYWxseSBwYXRjaGVkIGJ5IHRoZSBFRVBST00gZm9yIG9yaWdpbmFsIFpEMTIxMSAqLworLyogWkRfQ1IxNTcgY2FuIGJlIG9wdGlvbmFsbHkgcGF0Y2hlZCBieSB0aGUgRUVQUk9NIGZvciBvcmlnaW5hbCBaRDEyMTEgKi8KIHN0YXRpYyBpbnQgcGF0Y2hfY3IxNTcoc3RydWN0IHpkX2NoaXAgKmNoaXApCiB7CiAJaW50IHI7CkBAIC01NzEsNyArNTcxLDcgQEAKIAkJcmV0dXJuIHI7CiAKIAlkZXZfZGJnX2YoemRfY2hpcF9kZXYoY2hpcCksICJwYXRjaGluZyB2YWx1ZSAleFxuIiwgdmFsdWUgPj4gOCk7Ci0JcmV0dXJuIHpkX2lvd3JpdGUzMl9sb2NrZWQoY2hpcCwgdmFsdWUgPj4gOCwgQ1IxNTcpOworCXJldHVybiB6ZF9pb3dyaXRlMzJfbG9ja2VkKGNoaXAsIHZhbHVlID4+IDgsIFpEX0NSMTU3KTsKIH0KIAogLyoKQEAgLTU5Myw4ICs1OTMsOCBAQAogaW50IHpkX2NoaXBfZ2VuZXJpY19wYXRjaF82bV9iYW5kKHN0cnVjdCB6ZF9jaGlwICpjaGlwLCBpbnQgY2hhbm5lbCkKIHsKIAlzdHJ1Y3QgemRfaW9yZXExNiBpb3JlcXNbXSA9IHsKLQkJeyBDUjEyOCwgMHgxNCB9LCB7IENSMTI5LCAweDEyIH0sIHsgQ1IxMzAsIDB4MTAgfSwKLQkJeyBDUjQ3LCAgMHgxZSB9LAorCQl7IFpEX0NSMTI4LCAweDE0IH0sIHsgWkRfQ1IxMjksIDB4MTIgfSwgeyBaRF9DUjEzMCwgMHgxMCB9LAorCQl7IFpEX0NSNDcsICAweDFlIH0sCiAJfTsKIAogCS8qIEZJWE1FOiBDaGFubmVsIDExIGlzIG5vdCB0aGUgZWRnZSBmb3IgYWxsIHJlZ3VsYXRvcnkgZG9tYWlucy4gKi8KQEAgLTYwOCw2OSArNjA4LDY5IEBACiBzdGF0aWMgaW50IHpkMTIxMV9od19yZXNldF9waHkoc3RydWN0IHpkX2NoaXAgKmNoaXApCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc1tdID0gewotCQl7IENSMCwgICAweDBhIH0sIHsgQ1IxLCAgIDB4MDYgfSwgeyBDUjIsICAgMHgyNiB9LAotCQl7IENSMywgICAweDM4IH0sIHsgQ1I0LCAgIDB4ODAgfSwgeyBDUjksICAgMHhhMCB9LAotCQl7IENSMTAsICAweDgxIH0sIHsgQ1IxMSwgIDB4MDAgfSwgeyBDUjEyLCAgMHg3ZiB9LAotCQl7IENSMTMsICAweDhjIH0sIHsgQ1IxNCwgIDB4ODAgfSwgeyBDUjE1LCAgMHgzZCB9LAotCQl7IENSMTYsICAweDIwIH0sIHsgQ1IxNywgIDB4MWUgfSwgeyBDUjE4LCAgMHgwYSB9LAotCQl7IENSMTksICAweDQ4IH0sIHsgQ1IyMCwgIDB4MGMgfSwgeyBDUjIxLCAgMHgwYyB9LAotCQl7IENSMjIsICAweDIzIH0sIHsgQ1IyMywgIDB4OTAgfSwgeyBDUjI0LCAgMHgxNCB9LAotCQl7IENSMjUsICAweDQwIH0sIHsgQ1IyNiwgIDB4MTAgfSwgeyBDUjI3LCAgMHgxOSB9LAotCQl7IENSMjgsICAweDdmIH0sIHsgQ1IyOSwgIDB4ODAgfSwgeyBDUjMwLCAgMHg0YiB9LAotCQl7IENSMzEsICAweDYwIH0sIHsgQ1IzMiwgIDB4NDMgfSwgeyBDUjMzLCAgMHgwOCB9LAotCQl7IENSMzQsICAweDA2IH0sIHsgQ1IzNSwgIDB4MGEgfSwgeyBDUjM2LCAgMHgwMCB9LAotCQl7IENSMzcsICAweDAwIH0sIHsgQ1IzOCwgIDB4MzggfSwgeyBDUjM5LCAgMHgwYyB9LAotCQl7IENSNDAsICAweDg0IH0sIHsgQ1I0MSwgIDB4MmEgfSwgeyBDUjQyLCAgMHg4MCB9LAotCQl7IENSNDMsICAweDEwIH0sIHsgQ1I0NCwgIDB4MTIgfSwgeyBDUjQ2LCAgMHhmZiB9LAotCQl7IENSNDcsICAweDFFIH0sIHsgQ1I0OCwgIDB4MjYgfSwgeyBDUjQ5LCAgMHg1YiB9LAotCQl7IENSNjQsICAweGQwIH0sIHsgQ1I2NSwgIDB4MDQgfSwgeyBDUjY2LCAgMHg1OCB9LAotCQl7IENSNjcsICAweGM5IH0sIHsgQ1I2OCwgIDB4ODggfSwgeyBDUjY5LCAgMHg0MSB9LAotCQl7IENSNzAsICAweDIzIH0sIHsgQ1I3MSwgIDB4MTAgfSwgeyBDUjcyLCAgMHhmZiB9LAotCQl7IENSNzMsICAweDMyIH0sIHsgQ1I3NCwgIDB4MzAgfSwgeyBDUjc1LCAgMHg2NSB9LAotCQl7IENSNzYsICAweDQxIH0sIHsgQ1I3NywgIDB4MWIgfSwgeyBDUjc4LCAgMHgzMCB9LAotCQl7IENSNzksICAweDY4IH0sIHsgQ1I4MCwgIDB4NjQgfSwgeyBDUjgxLCAgMHg2NCB9LAotCQl7IENSODIsICAweDAwIH0sIHsgQ1I4MywgIDB4MDAgfSwgeyBDUjg0LCAgMHgwMCB9LAotCQl7IENSODUsICAweDAyIH0sIHsgQ1I4NiwgIDB4MDAgfSwgeyBDUjg3LCAgMHgwMCB9LAotCQl7IENSODgsICAweGZmIH0sIHsgQ1I4OSwgIDB4ZmMgfSwgeyBDUjkwLCAgMHgwMCB9LAotCQl7IENSOTEsICAweDAwIH0sIHsgQ1I5MiwgIDB4MDAgfSwgeyBDUjkzLCAgMHgwOCB9LAotCQl7IENSOTQsICAweDAwIH0sIHsgQ1I5NSwgIDB4MDAgfSwgeyBDUjk2LCAgMHhmZiB9LAotCQl7IENSOTcsICAweGU3IH0sIHsgQ1I5OCwgIDB4MDAgfSwgeyBDUjk5LCAgMHgwMCB9LAotCQl7IENSMTAwLCAweDAwIH0sIHsgQ1IxMDEsIDB4YWUgfSwgeyBDUjEwMiwgMHgwMiB9LAotCQl7IENSMTAzLCAweDAwIH0sIHsgQ1IxMDQsIDB4MDMgfSwgeyBDUjEwNSwgMHg2NSB9LAotCQl7IENSMTA2LCAweDA0IH0sIHsgQ1IxMDcsIDB4MDAgfSwgeyBDUjEwOCwgMHgwYSB9LAotCQl7IENSMTA5LCAweGFhIH0sIHsgQ1IxMTAsIDB4YWEgfSwgeyBDUjExMSwgMHgyNSB9LAotCQl7IENSMTEyLCAweDI1IH0sIHsgQ1IxMTMsIDB4MDAgfSwgeyBDUjExOSwgMHgxZSB9LAotCQl7IENSMTI1LCAweDkwIH0sIHsgQ1IxMjYsIDB4MDAgfSwgeyBDUjEyNywgMHgwMCB9LAorCQl7IFpEX0NSMCwgICAweDBhIH0sIHsgWkRfQ1IxLCAgIDB4MDYgfSwgeyBaRF9DUjIsICAgMHgyNiB9LAorCQl7IFpEX0NSMywgICAweDM4IH0sIHsgWkRfQ1I0LCAgIDB4ODAgfSwgeyBaRF9DUjksICAgMHhhMCB9LAorCQl7IFpEX0NSMTAsICAweDgxIH0sIHsgWkRfQ1IxMSwgIDB4MDAgfSwgeyBaRF9DUjEyLCAgMHg3ZiB9LAorCQl7IFpEX0NSMTMsICAweDhjIH0sIHsgWkRfQ1IxNCwgIDB4ODAgfSwgeyBaRF9DUjE1LCAgMHgzZCB9LAorCQl7IFpEX0NSMTYsICAweDIwIH0sIHsgWkRfQ1IxNywgIDB4MWUgfSwgeyBaRF9DUjE4LCAgMHgwYSB9LAorCQl7IFpEX0NSMTksICAweDQ4IH0sIHsgWkRfQ1IyMCwgIDB4MGMgfSwgeyBaRF9DUjIxLCAgMHgwYyB9LAorCQl7IFpEX0NSMjIsICAweDIzIH0sIHsgWkRfQ1IyMywgIDB4OTAgfSwgeyBaRF9DUjI0LCAgMHgxNCB9LAorCQl7IFpEX0NSMjUsICAweDQwIH0sIHsgWkRfQ1IyNiwgIDB4MTAgfSwgeyBaRF9DUjI3LCAgMHgxOSB9LAorCQl7IFpEX0NSMjgsICAweDdmIH0sIHsgWkRfQ1IyOSwgIDB4ODAgfSwgeyBaRF9DUjMwLCAgMHg0YiB9LAorCQl7IFpEX0NSMzEsICAweDYwIH0sIHsgWkRfQ1IzMiwgIDB4NDMgfSwgeyBaRF9DUjMzLCAgMHgwOCB9LAorCQl7IFpEX0NSMzQsICAweDA2IH0sIHsgWkRfQ1IzNSwgIDB4MGEgfSwgeyBaRF9DUjM2LCAgMHgwMCB9LAorCQl7IFpEX0NSMzcsICAweDAwIH0sIHsgWkRfQ1IzOCwgIDB4MzggfSwgeyBaRF9DUjM5LCAgMHgwYyB9LAorCQl7IFpEX0NSNDAsICAweDg0IH0sIHsgWkRfQ1I0MSwgIDB4MmEgfSwgeyBaRF9DUjQyLCAgMHg4MCB9LAorCQl7IFpEX0NSNDMsICAweDEwIH0sIHsgWkRfQ1I0NCwgIDB4MTIgfSwgeyBaRF9DUjQ2LCAgMHhmZiB9LAorCQl7IFpEX0NSNDcsICAweDFFIH0sIHsgWkRfQ1I0OCwgIDB4MjYgfSwgeyBaRF9DUjQ5LCAgMHg1YiB9LAorCQl7IFpEX0NSNjQsICAweGQwIH0sIHsgWkRfQ1I2NSwgIDB4MDQgfSwgeyBaRF9DUjY2LCAgMHg1OCB9LAorCQl7IFpEX0NSNjcsICAweGM5IH0sIHsgWkRfQ1I2OCwgIDB4ODggfSwgeyBaRF9DUjY5LCAgMHg0MSB9LAorCQl7IFpEX0NSNzAsICAweDIzIH0sIHsgWkRfQ1I3MSwgIDB4MTAgfSwgeyBaRF9DUjcyLCAgMHhmZiB9LAorCQl7IFpEX0NSNzMsICAweDMyIH0sIHsgWkRfQ1I3NCwgIDB4MzAgfSwgeyBaRF9DUjc1LCAgMHg2NSB9LAorCQl7IFpEX0NSNzYsICAweDQxIH0sIHsgWkRfQ1I3NywgIDB4MWIgfSwgeyBaRF9DUjc4LCAgMHgzMCB9LAorCQl7IFpEX0NSNzksICAweDY4IH0sIHsgWkRfQ1I4MCwgIDB4NjQgfSwgeyBaRF9DUjgxLCAgMHg2NCB9LAorCQl7IFpEX0NSODIsICAweDAwIH0sIHsgWkRfQ1I4MywgIDB4MDAgfSwgeyBaRF9DUjg0LCAgMHgwMCB9LAorCQl7IFpEX0NSODUsICAweDAyIH0sIHsgWkRfQ1I4NiwgIDB4MDAgfSwgeyBaRF9DUjg3LCAgMHgwMCB9LAorCQl7IFpEX0NSODgsICAweGZmIH0sIHsgWkRfQ1I4OSwgIDB4ZmMgfSwgeyBaRF9DUjkwLCAgMHgwMCB9LAorCQl7IFpEX0NSOTEsICAweDAwIH0sIHsgWkRfQ1I5MiwgIDB4MDAgfSwgeyBaRF9DUjkzLCAgMHgwOCB9LAorCQl7IFpEX0NSOTQsICAweDAwIH0sIHsgWkRfQ1I5NSwgIDB4MDAgfSwgeyBaRF9DUjk2LCAgMHhmZiB9LAorCQl7IFpEX0NSOTcsICAweGU3IH0sIHsgWkRfQ1I5OCwgIDB4MDAgfSwgeyBaRF9DUjk5LCAgMHgwMCB9LAorCQl7IFpEX0NSMTAwLCAweDAwIH0sIHsgWkRfQ1IxMDEsIDB4YWUgfSwgeyBaRF9DUjEwMiwgMHgwMiB9LAorCQl7IFpEX0NSMTAzLCAweDAwIH0sIHsgWkRfQ1IxMDQsIDB4MDMgfSwgeyBaRF9DUjEwNSwgMHg2NSB9LAorCQl7IFpEX0NSMTA2LCAweDA0IH0sIHsgWkRfQ1IxMDcsIDB4MDAgfSwgeyBaRF9DUjEwOCwgMHgwYSB9LAorCQl7IFpEX0NSMTA5LCAweGFhIH0sIHsgWkRfQ1IxMTAsIDB4YWEgfSwgeyBaRF9DUjExMSwgMHgyNSB9LAorCQl7IFpEX0NSMTEyLCAweDI1IH0sIHsgWkRfQ1IxMTMsIDB4MDAgfSwgeyBaRF9DUjExOSwgMHgxZSB9LAorCQl7IFpEX0NSMTI1LCAweDkwIH0sIHsgWkRfQ1IxMjYsIDB4MDAgfSwgeyBaRF9DUjEyNywgMHgwMCB9LAogCQl7IH0sCi0JCXsgQ1I1LCAgIDB4MDAgfSwgeyBDUjYsICAgMHgwMCB9LCB7IENSNywgICAweDAwIH0sCi0JCXsgQ1I4LCAgIDB4MDAgfSwgeyBDUjksICAgMHgyMCB9LCB7IENSMTIsICAweGYwIH0sCi0JCXsgQ1IyMCwgIDB4MGUgfSwgeyBDUjIxLCAgMHgwZSB9LCB7IENSMjcsICAweDEwIH0sCi0JCXsgQ1I0NCwgIDB4MzMgfSwgeyBDUjQ3LCAgMHgxRSB9LCB7IENSODMsICAweDI0IH0sCi0JCXsgQ1I4NCwgIDB4MDQgfSwgeyBDUjg1LCAgMHgwMCB9LCB7IENSODYsICAweDBDIH0sCi0JCXsgQ1I4NywgIDB4MTIgfSwgeyBDUjg4LCAgMHgwQyB9LCB7IENSODksICAweDAwIH0sCi0JCXsgQ1I5MCwgIDB4MTAgfSwgeyBDUjkxLCAgMHgwOCB9LCB7IENSOTMsICAweDAwIH0sCi0JCXsgQ1I5NCwgIDB4MDEgfSwgeyBDUjk1LCAgMHgwMCB9LCB7IENSOTYsICAweDUwIH0sCi0JCXsgQ1I5NywgIDB4MzcgfSwgeyBDUjk4LCAgMHgzNSB9LCB7IENSMTAxLCAweDEzIH0sCi0JCXsgQ1IxMDIsIDB4MjcgfSwgeyBDUjEwMywgMHgyNyB9LCB7IENSMTA0LCAweDE4IH0sCi0JCXsgQ1IxMDUsIDB4MTIgfSwgeyBDUjEwOSwgMHgyNyB9LCB7IENSMTEwLCAweDI3IH0sCi0JCXsgQ1IxMTEsIDB4MjcgfSwgeyBDUjExMiwgMHgyNyB9LCB7IENSMTEzLCAweDI3IH0sCi0JCXsgQ1IxMTQsIDB4MjcgfSwgeyBDUjExNSwgMHgyNiB9LCB7IENSMTE2LCAweDI0IH0sCi0JCXsgQ1IxMTcsIDB4ZmMgfSwgeyBDUjExOCwgMHhmYSB9LCB7IENSMTIwLCAweDRmIH0sCi0JCXsgQ1IxMjUsIDB4YWEgfSwgeyBDUjEyNywgMHgwMyB9LCB7IENSMTI4LCAweDE0IH0sCi0JCXsgQ1IxMjksIDB4MTIgfSwgeyBDUjEzMCwgMHgxMCB9LCB7IENSMTMxLCAweDBDIH0sCi0JCXsgQ1IxMzYsIDB4ZGYgfSwgeyBDUjEzNywgMHg0MCB9LCB7IENSMTM4LCAweGEwIH0sCi0JCXsgQ1IxMzksIDB4YjAgfSwgeyBDUjE0MCwgMHg5OSB9LCB7IENSMTQxLCAweDgyIH0sCi0JCXsgQ1IxNDIsIDB4NTQgfSwgeyBDUjE0MywgMHgxYyB9LCB7IENSMTQ0LCAweDZjIH0sCi0JCXsgQ1IxNDcsIDB4MDcgfSwgeyBDUjE0OCwgMHg0YyB9LCB7IENSMTQ5LCAweDUwIH0sCi0JCXsgQ1IxNTAsIDB4MGUgfSwgeyBDUjE1MSwgMHgxOCB9LCB7IENSMTYwLCAweGZlIH0sCi0JCXsgQ1IxNjEsIDB4ZWUgfSwgeyBDUjE2MiwgMHhhYSB9LCB7IENSMTYzLCAweGZhIH0sCi0JCXsgQ1IxNjQsIDB4ZmEgfSwgeyBDUjE2NSwgMHhlYSB9LCB7IENSMTY2LCAweGJlIH0sCi0JCXsgQ1IxNjcsIDB4YmUgfSwgeyBDUjE2OCwgMHg2YSB9LCB7IENSMTY5LCAweGJhIH0sCi0JCXsgQ1IxNzAsIDB4YmEgfSwgeyBDUjE3MSwgMHhiYSB9LAotCQkvKiBOb3RlOiBDUjIwNCBtdXN0IGxlYWQgdGhlIENSMjAzICovCi0JCXsgQ1IyMDQsIDB4N2QgfSwKKwkJeyBaRF9DUjUsICAgMHgwMCB9LCB7IFpEX0NSNiwgICAweDAwIH0sIHsgWkRfQ1I3LCAgIDB4MDAgfSwKKwkJeyBaRF9DUjgsICAgMHgwMCB9LCB7IFpEX0NSOSwgICAweDIwIH0sIHsgWkRfQ1IxMiwgIDB4ZjAgfSwKKwkJeyBaRF9DUjIwLCAgMHgwZSB9LCB7IFpEX0NSMjEsICAweDBlIH0sIHsgWkRfQ1IyNywgIDB4MTAgfSwKKwkJeyBaRF9DUjQ0LCAgMHgzMyB9LCB7IFpEX0NSNDcsICAweDFFIH0sIHsgWkRfQ1I4MywgIDB4MjQgfSwKKwkJeyBaRF9DUjg0LCAgMHgwNCB9LCB7IFpEX0NSODUsICAweDAwIH0sIHsgWkRfQ1I4NiwgIDB4MEMgfSwKKwkJeyBaRF9DUjg3LCAgMHgxMiB9LCB7IFpEX0NSODgsICAweDBDIH0sIHsgWkRfQ1I4OSwgIDB4MDAgfSwKKwkJeyBaRF9DUjkwLCAgMHgxMCB9LCB7IFpEX0NSOTEsICAweDA4IH0sIHsgWkRfQ1I5MywgIDB4MDAgfSwKKwkJeyBaRF9DUjk0LCAgMHgwMSB9LCB7IFpEX0NSOTUsICAweDAwIH0sIHsgWkRfQ1I5NiwgIDB4NTAgfSwKKwkJeyBaRF9DUjk3LCAgMHgzNyB9LCB7IFpEX0NSOTgsICAweDM1IH0sIHsgWkRfQ1IxMDEsIDB4MTMgfSwKKwkJeyBaRF9DUjEwMiwgMHgyNyB9LCB7IFpEX0NSMTAzLCAweDI3IH0sIHsgWkRfQ1IxMDQsIDB4MTggfSwKKwkJeyBaRF9DUjEwNSwgMHgxMiB9LCB7IFpEX0NSMTA5LCAweDI3IH0sIHsgWkRfQ1IxMTAsIDB4MjcgfSwKKwkJeyBaRF9DUjExMSwgMHgyNyB9LCB7IFpEX0NSMTEyLCAweDI3IH0sIHsgWkRfQ1IxMTMsIDB4MjcgfSwKKwkJeyBaRF9DUjExNCwgMHgyNyB9LCB7IFpEX0NSMTE1LCAweDI2IH0sIHsgWkRfQ1IxMTYsIDB4MjQgfSwKKwkJeyBaRF9DUjExNywgMHhmYyB9LCB7IFpEX0NSMTE4LCAweGZhIH0sIHsgWkRfQ1IxMjAsIDB4NGYgfSwKKwkJeyBaRF9DUjEyNSwgMHhhYSB9LCB7IFpEX0NSMTI3LCAweDAzIH0sIHsgWkRfQ1IxMjgsIDB4MTQgfSwKKwkJeyBaRF9DUjEyOSwgMHgxMiB9LCB7IFpEX0NSMTMwLCAweDEwIH0sIHsgWkRfQ1IxMzEsIDB4MEMgfSwKKwkJeyBaRF9DUjEzNiwgMHhkZiB9LCB7IFpEX0NSMTM3LCAweDQwIH0sIHsgWkRfQ1IxMzgsIDB4YTAgfSwKKwkJeyBaRF9DUjEzOSwgMHhiMCB9LCB7IFpEX0NSMTQwLCAweDk5IH0sIHsgWkRfQ1IxNDEsIDB4ODIgfSwKKwkJeyBaRF9DUjE0MiwgMHg1NCB9LCB7IFpEX0NSMTQzLCAweDFjIH0sIHsgWkRfQ1IxNDQsIDB4NmMgfSwKKwkJeyBaRF9DUjE0NywgMHgwNyB9LCB7IFpEX0NSMTQ4LCAweDRjIH0sIHsgWkRfQ1IxNDksIDB4NTAgfSwKKwkJeyBaRF9DUjE1MCwgMHgwZSB9LCB7IFpEX0NSMTUxLCAweDE4IH0sIHsgWkRfQ1IxNjAsIDB4ZmUgfSwKKwkJeyBaRF9DUjE2MSwgMHhlZSB9LCB7IFpEX0NSMTYyLCAweGFhIH0sIHsgWkRfQ1IxNjMsIDB4ZmEgfSwKKwkJeyBaRF9DUjE2NCwgMHhmYSB9LCB7IFpEX0NSMTY1LCAweGVhIH0sIHsgWkRfQ1IxNjYsIDB4YmUgfSwKKwkJeyBaRF9DUjE2NywgMHhiZSB9LCB7IFpEX0NSMTY4LCAweDZhIH0sIHsgWkRfQ1IxNjksIDB4YmEgfSwKKwkJeyBaRF9DUjE3MCwgMHhiYSB9LCB7IFpEX0NSMTcxLCAweGJhIH0sCisJCS8qIE5vdGU6IFpEX0NSMjA0IG11c3QgbGVhZCB0aGUgWkRfQ1IyMDMgKi8KKwkJeyBaRF9DUjIwNCwgMHg3ZCB9LAogCQl7IH0sCi0JCXsgQ1IyMDMsIDB4MzAgfSwKKwkJeyBaRF9DUjIwMywgMHgzMCB9LAogCX07CiAKIAlpbnQgciwgdDsKQEAgLTY5Nyw2MiArNjk3LDYyIEBACiBzdGF0aWMgaW50IHpkMTIxMWJfaHdfcmVzZXRfcGh5KHN0cnVjdCB6ZF9jaGlwICpjaGlwKQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgemRfaW9yZXExNiBpb3JlcXNbXSA9IHsKLQkJeyBDUjAsICAgMHgxNCB9LCB7IENSMSwgICAweDA2IH0sIHsgQ1IyLCAgIDB4MjYgfSwKLQkJeyBDUjMsICAgMHgzOCB9LCB7IENSNCwgICAweDgwIH0sIHsgQ1I5LCAgIDB4ZTAgfSwKLQkJeyBDUjEwLCAgMHg4MSB9LAotCQkvKiBwb3dlciBjb250cm9sIHsgeyBDUjExLCAgMSA8PCA2IH0sICovCi0JCXsgQ1IxMSwgIDB4MDAgfSwKLQkJeyBDUjEyLCAgMHhmMCB9LCB7IENSMTMsICAweDhjIH0sIHsgQ1IxNCwgIDB4ODAgfSwKLQkJeyBDUjE1LCAgMHgzZCB9LCB7IENSMTYsICAweDIwIH0sIHsgQ1IxNywgIDB4MWUgfSwKLQkJeyBDUjE4LCAgMHgwYSB9LCB7IENSMTksICAweDQ4IH0sCi0JCXsgQ1IyMCwgIDB4MTAgfSwgLyogT3JnOjB4MEUsIENvbVRyZW5kOlJhbExpbmsgQVAgKi8KLQkJeyBDUjIxLCAgMHgwZSB9LCB7IENSMjIsICAweDIzIH0sIHsgQ1IyMywgIDB4OTAgfSwKLQkJeyBDUjI0LCAgMHgxNCB9LCB7IENSMjUsICAweDQwIH0sIHsgQ1IyNiwgIDB4MTAgfSwKLQkJeyBDUjI3LCAgMHgxMCB9LCB7IENSMjgsICAweDdmIH0sIHsgQ1IyOSwgIDB4ODAgfSwKLQkJeyBDUjMwLCAgMHg0YiB9LCAvKiBBU0lDL0ZXVCwgbm8gam9pbnRseSBkZWNvZGVyICovCi0JCXsgQ1IzMSwgIDB4NjAgfSwgeyBDUjMyLCAgMHg0MyB9LCB7IENSMzMsICAweDA4IH0sCi0JCXsgQ1IzNCwgIDB4MDYgfSwgeyBDUjM1LCAgMHgwYSB9LCB7IENSMzYsICAweDAwIH0sCi0JCXsgQ1IzNywgIDB4MDAgfSwgeyBDUjM4LCAgMHgzOCB9LCB7IENSMzksICAweDBjIH0sCi0JCXsgQ1I0MCwgIDB4ODQgfSwgeyBDUjQxLCAgMHgyYSB9LCB7IENSNDIsICAweDgwIH0sCi0JCXsgQ1I0MywgIDB4MTAgfSwgeyBDUjQ0LCAgMHgzMyB9LCB7IENSNDYsICAweGZmIH0sCi0JCXsgQ1I0NywgIDB4MUUgfSwgeyBDUjQ4LCAgMHgyNiB9LCB7IENSNDksICAweDViIH0sCi0JCXsgQ1I2NCwgIDB4ZDAgfSwgeyBDUjY1LCAgMHgwNCB9LCB7IENSNjYsICAweDU4IH0sCi0JCXsgQ1I2NywgIDB4YzkgfSwgeyBDUjY4LCAgMHg4OCB9LCB7IENSNjksICAweDQxIH0sCi0JCXsgQ1I3MCwgIDB4MjMgfSwgeyBDUjcxLCAgMHgxMCB9LCB7IENSNzIsICAweGZmIH0sCi0JCXsgQ1I3MywgIDB4MzIgfSwgeyBDUjc0LCAgMHgzMCB9LCB7IENSNzUsICAweDY1IH0sCi0JCXsgQ1I3NiwgIDB4NDEgfSwgeyBDUjc3LCAgMHgxYiB9LCB7IENSNzgsICAweDMwIH0sCi0JCXsgQ1I3OSwgIDB4ZjAgfSwgeyBDUjgwLCAgMHg2NCB9LCB7IENSODEsICAweDY0IH0sCi0JCXsgQ1I4MiwgIDB4MDAgfSwgeyBDUjgzLCAgMHgyNCB9LCB7IENSODQsICAweDA0IH0sCi0JCXsgQ1I4NSwgIDB4MDAgfSwgeyBDUjg2LCAgMHgwYyB9LCB7IENSODcsICAweDEyIH0sCi0JCXsgQ1I4OCwgIDB4MGMgfSwgeyBDUjg5LCAgMHgwMCB9LCB7IENSOTAsICAweDU4IH0sCi0JCXsgQ1I5MSwgIDB4MDQgfSwgeyBDUjkyLCAgMHgwMCB9LCB7IENSOTMsICAweDAwIH0sCi0JCXsgQ1I5NCwgIDB4MDEgfSwKLQkJeyBDUjk1LCAgMHgyMCB9LCAvKiBaRDEyMTFCICovCi0JCXsgQ1I5NiwgIDB4NTAgfSwgeyBDUjk3LCAgMHgzNyB9LCB7IENSOTgsICAweDM1IH0sCi0JCXsgQ1I5OSwgIDB4MDAgfSwgeyBDUjEwMCwgMHgwMSB9LCB7IENSMTAxLCAweDEzIH0sCi0JCXsgQ1IxMDIsIDB4MjcgfSwgeyBDUjEwMywgMHgyNyB9LCB7IENSMTA0LCAweDE4IH0sCi0JCXsgQ1IxMDUsIDB4MTIgfSwgeyBDUjEwNiwgMHgwNCB9LCB7IENSMTA3LCAweDAwIH0sCi0JCXsgQ1IxMDgsIDB4MGEgfSwgeyBDUjEwOSwgMHgyNyB9LCB7IENSMTEwLCAweDI3IH0sCi0JCXsgQ1IxMTEsIDB4MjcgfSwgeyBDUjExMiwgMHgyNyB9LCB7IENSMTEzLCAweDI3IH0sCi0JCXsgQ1IxMTQsIDB4MjcgfSwgeyBDUjExNSwgMHgyNiB9LCB7IENSMTE2LCAweDI0IH0sCi0JCXsgQ1IxMTcsIDB4ZmMgfSwgeyBDUjExOCwgMHhmYSB9LCB7IENSMTE5LCAweDFlIH0sCi0JCXsgQ1IxMjUsIDB4OTAgfSwgeyBDUjEyNiwgMHgwMCB9LCB7IENSMTI3LCAweDAwIH0sCi0JCXsgQ1IxMjgsIDB4MTQgfSwgeyBDUjEyOSwgMHgxMiB9LCB7IENSMTMwLCAweDEwIH0sCi0JCXsgQ1IxMzEsIDB4MGMgfSwgeyBDUjEzNiwgMHhkZiB9LCB7IENSMTM3LCAweGEwIH0sCi0JCXsgQ1IxMzgsIDB4YTggfSwgeyBDUjEzOSwgMHhiNCB9LCB7IENSMTQwLCAweDk4IH0sCi0JCXsgQ1IxNDEsIDB4ODIgfSwgeyBDUjE0MiwgMHg1MyB9LCB7IENSMTQzLCAweDFjIH0sCi0JCXsgQ1IxNDQsIDB4NmMgfSwgeyBDUjE0NywgMHgwNyB9LCB7IENSMTQ4LCAweDQwIH0sCi0JCXsgQ1IxNDksIDB4NDAgfSwgLyogT3JnOjB4NTAgQ29tVHJlbmQ6UmFsTGluayBBUCAqLwotCQl7IENSMTUwLCAweDE0IH0sIC8qIE9yZzoweDBFIENvbVRyZW5kOlJhbExpbmsgQVAgKi8KLQkJeyBDUjE1MSwgMHgxOCB9LCB7IENSMTU5LCAweDcwIH0sIHsgQ1IxNjAsIDB4ZmUgfSwKLQkJeyBDUjE2MSwgMHhlZSB9LCB7IENSMTYyLCAweGFhIH0sIHsgQ1IxNjMsIDB4ZmEgfSwKLQkJeyBDUjE2NCwgMHhmYSB9LCB7IENSMTY1LCAweGVhIH0sIHsgQ1IxNjYsIDB4YmUgfSwKLQkJeyBDUjE2NywgMHhiZSB9LCB7IENSMTY4LCAweDZhIH0sIHsgQ1IxNjksIDB4YmEgfSwKLQkJeyBDUjE3MCwgMHhiYSB9LCB7IENSMTcxLCAweGJhIH0sCi0JCS8qIE5vdGU6IENSMjA0IG11c3QgbGVhZCB0aGUgQ1IyMDMgKi8KLQkJeyBDUjIwNCwgMHg3ZCB9LAorCQl7IFpEX0NSMCwgICAweDE0IH0sIHsgWkRfQ1IxLCAgIDB4MDYgfSwgeyBaRF9DUjIsICAgMHgyNiB9LAorCQl7IFpEX0NSMywgICAweDM4IH0sIHsgWkRfQ1I0LCAgIDB4ODAgfSwgeyBaRF9DUjksICAgMHhlMCB9LAorCQl7IFpEX0NSMTAsICAweDgxIH0sCisJCS8qIHBvd2VyIGNvbnRyb2wgeyB7IFpEX0NSMTEsICAxIDw8IDYgfSwgKi8KKwkJeyBaRF9DUjExLCAgMHgwMCB9LAorCQl7IFpEX0NSMTIsICAweGYwIH0sIHsgWkRfQ1IxMywgIDB4OGMgfSwgeyBaRF9DUjE0LCAgMHg4MCB9LAorCQl7IFpEX0NSMTUsICAweDNkIH0sIHsgWkRfQ1IxNiwgIDB4MjAgfSwgeyBaRF9DUjE3LCAgMHgxZSB9LAorCQl7IFpEX0NSMTgsICAweDBhIH0sIHsgWkRfQ1IxOSwgIDB4NDggfSwKKwkJeyBaRF9DUjIwLCAgMHgxMCB9LCAvKiBPcmc6MHgwRSwgQ29tVHJlbmQ6UmFsTGluayBBUCAqLworCQl7IFpEX0NSMjEsICAweDBlIH0sIHsgWkRfQ1IyMiwgIDB4MjMgfSwgeyBaRF9DUjIzLCAgMHg5MCB9LAorCQl7IFpEX0NSMjQsICAweDE0IH0sIHsgWkRfQ1IyNSwgIDB4NDAgfSwgeyBaRF9DUjI2LCAgMHgxMCB9LAorCQl7IFpEX0NSMjcsICAweDEwIH0sIHsgWkRfQ1IyOCwgIDB4N2YgfSwgeyBaRF9DUjI5LCAgMHg4MCB9LAorCQl7IFpEX0NSMzAsICAweDRiIH0sIC8qIEFTSUMvRldULCBubyBqb2ludGx5IGRlY29kZXIgKi8KKwkJeyBaRF9DUjMxLCAgMHg2MCB9LCB7IFpEX0NSMzIsICAweDQzIH0sIHsgWkRfQ1IzMywgIDB4MDggfSwKKwkJeyBaRF9DUjM0LCAgMHgwNiB9LCB7IFpEX0NSMzUsICAweDBhIH0sIHsgWkRfQ1IzNiwgIDB4MDAgfSwKKwkJeyBaRF9DUjM3LCAgMHgwMCB9LCB7IFpEX0NSMzgsICAweDM4IH0sIHsgWkRfQ1IzOSwgIDB4MGMgfSwKKwkJeyBaRF9DUjQwLCAgMHg4NCB9LCB7IFpEX0NSNDEsICAweDJhIH0sIHsgWkRfQ1I0MiwgIDB4ODAgfSwKKwkJeyBaRF9DUjQzLCAgMHgxMCB9LCB7IFpEX0NSNDQsICAweDMzIH0sIHsgWkRfQ1I0NiwgIDB4ZmYgfSwKKwkJeyBaRF9DUjQ3LCAgMHgxRSB9LCB7IFpEX0NSNDgsICAweDI2IH0sIHsgWkRfQ1I0OSwgIDB4NWIgfSwKKwkJeyBaRF9DUjY0LCAgMHhkMCB9LCB7IFpEX0NSNjUsICAweDA0IH0sIHsgWkRfQ1I2NiwgIDB4NTggfSwKKwkJeyBaRF9DUjY3LCAgMHhjOSB9LCB7IFpEX0NSNjgsICAweDg4IH0sIHsgWkRfQ1I2OSwgIDB4NDEgfSwKKwkJeyBaRF9DUjcwLCAgMHgyMyB9LCB7IFpEX0NSNzEsICAweDEwIH0sIHsgWkRfQ1I3MiwgIDB4ZmYgfSwKKwkJeyBaRF9DUjczLCAgMHgzMiB9LCB7IFpEX0NSNzQsICAweDMwIH0sIHsgWkRfQ1I3NSwgIDB4NjUgfSwKKwkJeyBaRF9DUjc2LCAgMHg0MSB9LCB7IFpEX0NSNzcsICAweDFiIH0sIHsgWkRfQ1I3OCwgIDB4MzAgfSwKKwkJeyBaRF9DUjc5LCAgMHhmMCB9LCB7IFpEX0NSODAsICAweDY0IH0sIHsgWkRfQ1I4MSwgIDB4NjQgfSwKKwkJeyBaRF9DUjgyLCAgMHgwMCB9LCB7IFpEX0NSODMsICAweDI0IH0sIHsgWkRfQ1I4NCwgIDB4MDQgfSwKKwkJeyBaRF9DUjg1LCAgMHgwMCB9LCB7IFpEX0NSODYsICAweDBjIH0sIHsgWkRfQ1I4NywgIDB4MTIgfSwKKwkJeyBaRF9DUjg4LCAgMHgwYyB9LCB7IFpEX0NSODksICAweDAwIH0sIHsgWkRfQ1I5MCwgIDB4NTggfSwKKwkJeyBaRF9DUjkxLCAgMHgwNCB9LCB7IFpEX0NSOTIsICAweDAwIH0sIHsgWkRfQ1I5MywgIDB4MDAgfSwKKwkJeyBaRF9DUjk0LCAgMHgwMSB9LAorCQl7IFpEX0NSOTUsICAweDIwIH0sIC8qIFpEMTIxMUIgKi8KKwkJeyBaRF9DUjk2LCAgMHg1MCB9LCB7IFpEX0NSOTcsICAweDM3IH0sIHsgWkRfQ1I5OCwgIDB4MzUgfSwKKwkJeyBaRF9DUjk5LCAgMHgwMCB9LCB7IFpEX0NSMTAwLCAweDAxIH0sIHsgWkRfQ1IxMDEsIDB4MTMgfSwKKwkJeyBaRF9DUjEwMiwgMHgyNyB9LCB7IFpEX0NSMTAzLCAweDI3IH0sIHsgWkRfQ1IxMDQsIDB4MTggfSwKKwkJeyBaRF9DUjEwNSwgMHgxMiB9LCB7IFpEX0NSMTA2LCAweDA0IH0sIHsgWkRfQ1IxMDcsIDB4MDAgfSwKKwkJeyBaRF9DUjEwOCwgMHgwYSB9LCB7IFpEX0NSMTA5LCAweDI3IH0sIHsgWkRfQ1IxMTAsIDB4MjcgfSwKKwkJeyBaRF9DUjExMSwgMHgyNyB9LCB7IFpEX0NSMTEyLCAweDI3IH0sIHsgWkRfQ1IxMTMsIDB4MjcgfSwKKwkJeyBaRF9DUjExNCwgMHgyNyB9LCB7IFpEX0NSMTE1LCAweDI2IH0sIHsgWkRfQ1IxMTYsIDB4MjQgfSwKKwkJeyBaRF9DUjExNywgMHhmYyB9LCB7IFpEX0NSMTE4LCAweGZhIH0sIHsgWkRfQ1IxMTksIDB4MWUgfSwKKwkJeyBaRF9DUjEyNSwgMHg5MCB9LCB7IFpEX0NSMTI2LCAweDAwIH0sIHsgWkRfQ1IxMjcsIDB4MDAgfSwKKwkJeyBaRF9DUjEyOCwgMHgxNCB9LCB7IFpEX0NSMTI5LCAweDEyIH0sIHsgWkRfQ1IxMzAsIDB4MTAgfSwKKwkJeyBaRF9DUjEzMSwgMHgwYyB9LCB7IFpEX0NSMTM2LCAweGRmIH0sIHsgWkRfQ1IxMzcsIDB4YTAgfSwKKwkJeyBaRF9DUjEzOCwgMHhhOCB9LCB7IFpEX0NSMTM5LCAweGI0IH0sIHsgWkRfQ1IxNDAsIDB4OTggfSwKKwkJeyBaRF9DUjE0MSwgMHg4MiB9LCB7IFpEX0NSMTQyLCAweDUzIH0sIHsgWkRfQ1IxNDMsIDB4MWMgfSwKKwkJeyBaRF9DUjE0NCwgMHg2YyB9LCB7IFpEX0NSMTQ3LCAweDA3IH0sIHsgWkRfQ1IxNDgsIDB4NDAgfSwKKwkJeyBaRF9DUjE0OSwgMHg0MCB9LCAvKiBPcmc6MHg1MCBDb21UcmVuZDpSYWxMaW5rIEFQICovCisJCXsgWkRfQ1IxNTAsIDB4MTQgfSwgLyogT3JnOjB4MEUgQ29tVHJlbmQ6UmFsTGluayBBUCAqLworCQl7IFpEX0NSMTUxLCAweDE4IH0sIHsgWkRfQ1IxNTksIDB4NzAgfSwgeyBaRF9DUjE2MCwgMHhmZSB9LAorCQl7IFpEX0NSMTYxLCAweGVlIH0sIHsgWkRfQ1IxNjIsIDB4YWEgfSwgeyBaRF9DUjE2MywgMHhmYSB9LAorCQl7IFpEX0NSMTY0LCAweGZhIH0sIHsgWkRfQ1IxNjUsIDB4ZWEgfSwgeyBaRF9DUjE2NiwgMHhiZSB9LAorCQl7IFpEX0NSMTY3LCAweGJlIH0sIHsgWkRfQ1IxNjgsIDB4NmEgfSwgeyBaRF9DUjE2OSwgMHhiYSB9LAorCQl7IFpEX0NSMTcwLCAweGJhIH0sIHsgWkRfQ1IxNzEsIDB4YmEgfSwKKwkJLyogTm90ZTogWkRfQ1IyMDQgbXVzdCBsZWFkIHRoZSBaRF9DUjIwMyAqLworCQl7IFpEX0NSMjA0LCAweDdkIH0sCiAJCXt9LAotCQl7IENSMjAzLCAweDMwIH0sCisJCXsgWkRfQ1IyMDMsIDB4MzAgfSwKIAl9OwogCiAJaW50IHIsIHQ7CkBAIC0xMjAwLDI0ICsxMjAwLDI0IEBACiBzdGF0aWMgaW50IHVwZGF0ZV9wd3JfaW50KHN0cnVjdCB6ZF9jaGlwICpjaGlwLCB1OCBjaGFubmVsKQogewogCXU4IHZhbHVlID0gY2hpcC0+cHdyX2ludF92YWx1ZXNbY2hhbm5lbCAtIDFdOwotCXJldHVybiB6ZF9pb3dyaXRlMTZfbG9ja2VkKGNoaXAsIHZhbHVlLCBDUjMxKTsKKwlyZXR1cm4gemRfaW93cml0ZTE2X2xvY2tlZChjaGlwLCB2YWx1ZSwgWkRfQ1IzMSk7CiB9CiAKIHN0YXRpYyBpbnQgdXBkYXRlX3B3cl9jYWwoc3RydWN0IHpkX2NoaXAgKmNoaXAsIHU4IGNoYW5uZWwpCiB7CiAJdTggdmFsdWUgPSBjaGlwLT5wd3JfY2FsX3ZhbHVlc1tjaGFubmVsLTFdOwotCXJldHVybiB6ZF9pb3dyaXRlMTZfbG9ja2VkKGNoaXAsIHZhbHVlLCBDUjY4KTsKKwlyZXR1cm4gemRfaW93cml0ZTE2X2xvY2tlZChjaGlwLCB2YWx1ZSwgWkRfQ1I2OCk7CiB9CiAKIHN0YXRpYyBpbnQgdXBkYXRlX29mZG1fY2FsKHN0cnVjdCB6ZF9jaGlwICpjaGlwLCB1OCBjaGFubmVsKQogewogCXN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc1szXTsKIAotCWlvcmVxc1swXS5hZGRyID0gQ1I2NzsKKwlpb3JlcXNbMF0uYWRkciA9IFpEX0NSNjc7CiAJaW9yZXFzWzBdLnZhbHVlID0gY2hpcC0+b2ZkbV9jYWxfdmFsdWVzW09GRE1fMzZNX0lOREVYXVtjaGFubmVsLTFdOwotCWlvcmVxc1sxXS5hZGRyID0gQ1I2NjsKKwlpb3JlcXNbMV0uYWRkciA9IFpEX0NSNjY7CiAJaW9yZXFzWzFdLnZhbHVlID0gY2hpcC0+b2ZkbV9jYWxfdmFsdWVzW09GRE1fNDhNX0lOREVYXVtjaGFubmVsLTFdOwotCWlvcmVxc1syXS5hZGRyID0gQ1I2NTsKKwlpb3JlcXNbMl0uYWRkciA9IFpEX0NSNjU7CiAJaW9yZXFzWzJdLnZhbHVlID0gY2hpcC0+b2ZkbV9jYWxfdmFsdWVzW09GRE1fNTRNX0lOREVYXVtjaGFubmVsLTFdOwogCiAJcmV0dXJuIHpkX2lvd3JpdGUxNmFfbG9ja2VkKGNoaXAsIGlvcmVxcywgQVJSQVlfU0laRShpb3JlcXMpKTsKQEAgLTEyMzYsOSArMTIzNiw5IEBACiAJCXJldHVybiByOwogCWlmICh6ZF9jaGlwX2lzX3pkMTIxMWIoY2hpcCkpIHsKIAkJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc1tdID0gewotCQkJeyBDUjY5LCAweDI4IH0sCisJCQl7IFpEX0NSNjksIDB4MjggfSwKIAkJCXt9LAotCQkJeyBDUjY5LCAweDJhIH0sCisJCQl7IFpEX0NSNjksIDB4MmEgfSwKIAkJfTsKIAogCQlyID0gdXBkYXRlX29mZG1fY2FsKGNoaXAsIGNoYW5uZWwpOwpAQCAtMTI2OSw3ICsxMjY5LDcgQEAKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAJZGV2X2RiZ19mKHpkX2NoaXBfZGV2KGNoaXApLCAicGF0Y2hpbmcgdmFsdWUgJXhcbiIsIHZhbHVlICYgMHhmZik7Ci0JcmV0dXJuIHpkX2lvd3JpdGUxNl9sb2NrZWQoY2hpcCwgdmFsdWUgJiAweGZmLCBDUjQ3KTsKKwlyZXR1cm4gemRfaW93cml0ZTE2X2xvY2tlZChjaGlwLCB2YWx1ZSAmIDB4ZmYsIFpEX0NSNDcpOwogfQogCiBpbnQgemRfY2hpcF9zZXRfY2hhbm5lbChzdHJ1Y3QgemRfY2hpcCAqY2hpcCwgdTggY2hhbm5lbCkKQEAgLTE1MDUsOSArMTUwNSw5IEBACiBpbnQgemRfcmZ3cml0ZV9jcl9sb2NrZWQoc3RydWN0IHpkX2NoaXAgKmNoaXAsIHUzMiB2YWx1ZSkKIHsKIAljb25zdCBzdHJ1Y3QgemRfaW9yZXExNiBpb3JlcXNbXSA9IHsKLQkJeyBDUjI0NCwgKHZhbHVlID4+IDE2KSAmIDB4ZmYgfSwKLQkJeyBDUjI0MywgKHZhbHVlID4+ICA4KSAmIDB4ZmYgfSwKLQkJeyBDUjI0MiwgIHZhbHVlICAgICAgICAmIDB4ZmYgfSwKKwkJeyBaRF9DUjI0NCwgKHZhbHVlID4+IDE2KSAmIDB4ZmYgfSwKKwkJeyBaRF9DUjI0MywgKHZhbHVlID4+ICA4KSAmIDB4ZmYgfSwKKwkJeyBaRF9DUjI0MiwgIHZhbHVlICAgICAgICAmIDB4ZmYgfSwKIAl9OwogCVpEX0FTU0VSVChtdXRleF9pc19sb2NrZWQoJmNoaXAtPm11dGV4KSk7CiAJcmV0dXJuIHpkX2lvd3JpdGUxNmFfbG9ja2VkKGNoaXAsIGlvcmVxcywgQVJSQVlfU0laRShpb3JlcXMpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuaAppbmRleCAxNGU0NDAyLi40YmU3YzNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5oCkBAIC02MSwyNzcgKzYxLDI4OCBAQAogI2RlZmluZSBGV1JBV19EQVRBKG9mZnNldCkgKCh6ZF9hZGRyX3QpKEZXX1NUQVJUICsgKG9mZnNldCkpKQogCiAvKiA4LWJpdCBoYXJkd2FyZSByZWdpc3RlcnMgKi8KLSNkZWZpbmUgQ1IwICAgQ1RMX1JFRygweDAwMDApCi0jZGVmaW5lIENSMSAgIENUTF9SRUcoMHgwMDA0KQotI2RlZmluZSBDUjIgICBDVExfUkVHKDB4MDAwOCkKLSNkZWZpbmUgQ1IzICAgQ1RMX1JFRygweDAwMEMpCisjZGVmaW5lIFpEX0NSMCAgIENUTF9SRUcoMHgwMDAwKQorI2RlZmluZSBaRF9DUjEgICBDVExfUkVHKDB4MDAwNCkKKyNkZWZpbmUgWkRfQ1IyICAgQ1RMX1JFRygweDAwMDgpCisjZGVmaW5lIFpEX0NSMyAgIENUTF9SRUcoMHgwMDBDKQogCi0jZGVmaW5lIENSNSAgIENUTF9SRUcoMHgwMDEwKQorI2RlZmluZSBaRF9DUjUgICBDVExfUkVHKDB4MDAxMCkKIC8qCWJpdCA1OiBpZiBzZXQgc2hvcnQgcHJlYW1ibGUgdXNlZAogICoJYml0IDY6IGZpbHRlciBiYW5kIC0gSmFwYW4gY2hhbm5lbCAxNCBvbiwgZWxzZSBvZmYKICAqLwotI2RlZmluZSBDUjYgICBDVExfUkVHKDB4MDAxNCkKLSNkZWZpbmUgQ1I3ICAgQ1RMX1JFRygweDAwMTgpCi0jZGVmaW5lIENSOCAgIENUTF9SRUcoMHgwMDFDKQorI2RlZmluZSBaRF9DUjYgICBDVExfUkVHKDB4MDAxNCkKKyNkZWZpbmUgWkRfQ1I3ICAgQ1RMX1JFRygweDAwMTgpCisjZGVmaW5lIFpEX0NSOCAgIENUTF9SRUcoMHgwMDFDKQogCi0jZGVmaW5lIENSNCAgIENUTF9SRUcoMHgwMDIwKQorI2RlZmluZSBaRF9DUjQgICBDVExfUkVHKDB4MDAyMCkKIAotI2RlZmluZSBDUjkgICBDVExfUkVHKDB4MDAyNCkKLS8qCWJpdCAyOiBhbnRlbm5hIHN3aXRjaCAodG9nZXRoZXIgd2l0aCBDUjEwKSAqLwotI2RlZmluZSBDUjEwICBDVExfUkVHKDB4MDAyOCkKLS8qCWJpdCAxOiBhbnRlbm5hIHN3aXRjaCAodG9nZXRoZXIgd2l0aCBDUjkpCi0gKglSRjI5NTkgY29udHJvbHMgd2l0aCBDUjExIHJhZGlvbiBvbiBhbmQgb2ZmCisjZGVmaW5lIFpEX0NSOSAgIENUTF9SRUcoMHgwMDI0KQorLyoJYml0IDI6IGFudGVubmEgc3dpdGNoICh0b2dldGhlciB3aXRoIFpEX0NSMTApICovCisjZGVmaW5lIFpEX0NSMTAgIENUTF9SRUcoMHgwMDI4KQorLyoJYml0IDE6IGFudGVubmEgc3dpdGNoICh0b2dldGhlciB3aXRoIFpEX0NSOSkKKyAqCVJGMjk1OSBjb250cm9scyB3aXRoIFpEX0NSMTEgcmFkaW9uIG9uIGFuZCBvZmYKICAqLwotI2RlZmluZSBDUjExICBDVExfUkVHKDB4MDAyQykKKyNkZWZpbmUgWkRfQ1IxMSAgQ1RMX1JFRygweDAwMkMpCiAvKgliaXQgNjogIFRYIHBvd2VyIGNvbnRyb2wgZm9yIE9GRE0KLSAqCVJGMjk1OSBjb250cm9scyB3aXRoIENSMTAgcmFkaW8gb24gYW5kIG9mZgorICoJUkYyOTU5IGNvbnRyb2xzIHdpdGggWkRfQ1IxMCByYWRpbyBvbiBhbmQgb2ZmCiAgKi8KLSNkZWZpbmUgQ1IxMiAgQ1RMX1JFRygweDAwMzApCi0jZGVmaW5lIENSMTMgIENUTF9SRUcoMHgwMDM0KQotI2RlZmluZSBDUjE0ICBDVExfUkVHKDB4MDAzOCkKLSNkZWZpbmUgQ1IxNSAgQ1RMX1JFRygweDAwM0MpCi0jZGVmaW5lIENSMTYgIENUTF9SRUcoMHgwMDQwKQotI2RlZmluZSBDUjE3ICBDVExfUkVHKDB4MDA0NCkKLSNkZWZpbmUgQ1IxOCAgQ1RMX1JFRygweDAwNDgpCi0jZGVmaW5lIENSMTkgIENUTF9SRUcoMHgwMDRDKQotI2RlZmluZSBDUjIwICBDVExfUkVHKDB4MDA1MCkKLSNkZWZpbmUgQ1IyMSAgQ1RMX1JFRygweDAwNTQpCi0jZGVmaW5lIENSMjIgIENUTF9SRUcoMHgwMDU4KQotI2RlZmluZSBDUjIzICBDVExfUkVHKDB4MDA1QykKLSNkZWZpbmUgQ1IyNCAgQ1RMX1JFRygweDAwNjApCS8qIENDQSB0aHJlc2hvbGQgKi8KLSNkZWZpbmUgQ1IyNSAgQ1RMX1JFRygweDAwNjQpCi0jZGVmaW5lIENSMjYgIENUTF9SRUcoMHgwMDY4KQotI2RlZmluZSBDUjI3ICBDVExfUkVHKDB4MDA2QykKLSNkZWZpbmUgQ1IyOCAgQ1RMX1JFRygweDAwNzApCi0jZGVmaW5lIENSMjkgIENUTF9SRUcoMHgwMDc0KQotI2RlZmluZSBDUjMwICBDVExfUkVHKDB4MDA3OCkKLSNkZWZpbmUgQ1IzMSAgQ1RMX1JFRygweDAwN0MpCS8qIFRYIHBvd2VyIGNvbnRyb2wgZm9yIFJGIGluIENDSyBtb2RlICovCi0jZGVmaW5lIENSMzIgIENUTF9SRUcoMHgwMDgwKQotI2RlZmluZSBDUjMzICBDVExfUkVHKDB4MDA4NCkKLSNkZWZpbmUgQ1IzNCAgQ1RMX1JFRygweDAwODgpCi0jZGVmaW5lIENSMzUgIENUTF9SRUcoMHgwMDhDKQotI2RlZmluZSBDUjM2ICBDVExfUkVHKDB4MDA5MCkKLSNkZWZpbmUgQ1IzNyAgQ1RMX1JFRygweDAwOTQpCi0jZGVmaW5lIENSMzggIENUTF9SRUcoMHgwMDk4KQotI2RlZmluZSBDUjM5ICBDVExfUkVHKDB4MDA5QykKLSNkZWZpbmUgQ1I0MCAgQ1RMX1JFRygweDAwQTApCi0jZGVmaW5lIENSNDEgIENUTF9SRUcoMHgwMEE0KQotI2RlZmluZSBDUjQyICBDVExfUkVHKDB4MDBBOCkKLSNkZWZpbmUgQ1I0MyAgQ1RMX1JFRygweDAwQUMpCi0jZGVmaW5lIENSNDQgIENUTF9SRUcoMHgwMEIwKQotI2RlZmluZSBDUjQ1ICBDVExfUkVHKDB4MDBCNCkKLSNkZWZpbmUgQ1I0NiAgQ1RMX1JFRygweDAwQjgpCi0jZGVmaW5lIENSNDcgIENUTF9SRUcoMHgwMEJDKQkvKiBDQ0sgYmFzZWJhbmQgZ2FpbgotCSAgICAgICAgICAgICAgICAgICAgICAgICAqIChwYXRjaCB2YWx1ZSBtaWdodCBiZSBpbiBFRVBST00pCi0JCQkJICovCi0jZGVmaW5lIENSNDggIENUTF9SRUcoMHgwMEMwKQotI2RlZmluZSBDUjQ5ICBDVExfUkVHKDB4MDBDNCkKLSNkZWZpbmUgQ1I1MCAgQ1RMX1JFRygweDAwQzgpCi0jZGVmaW5lIENSNTEgIENUTF9SRUcoMHgwMENDKQkvKiBUWCBwb3dlciBjb250cm9sIGZvciBSRiBpbiA2LTM2TSBtb2RlcyAqLwotI2RlZmluZSBDUjUyICBDVExfUkVHKDB4MDBEMCkJLyogVFggcG93ZXIgY29udHJvbCBmb3IgUkYgaW4gNDhNIG1vZGUgKi8KLSNkZWZpbmUgQ1I1MyAgQ1RMX1JFRygweDAwRDQpCS8qIFRYIHBvd2VyIGNvbnRyb2wgZm9yIFJGIGluIDU0TSBtb2RlICovCi0jZGVmaW5lIENSNTQgIENUTF9SRUcoMHgwMEQ4KQotI2RlZmluZSBDUjU1ICBDVExfUkVHKDB4MDBEQykKLSNkZWZpbmUgQ1I1NiAgQ1RMX1JFRygweDAwRTApCi0jZGVmaW5lIENSNTcgIENUTF9SRUcoMHgwMEU0KQotI2RlZmluZSBDUjU4ICBDVExfUkVHKDB4MDBFOCkKLSNkZWZpbmUgQ1I1OSAgQ1RMX1JFRygweDAwRUMpCi0jZGVmaW5lIENSNjAgIENUTF9SRUcoMHgwMEYwKQotI2RlZmluZSBDUjYxICBDVExfUkVHKDB4MDBGNCkKLSNkZWZpbmUgQ1I2MiAgQ1RMX1JFRygweDAwRjgpCi0jZGVmaW5lIENSNjMgIENUTF9SRUcoMHgwMEZDKQotI2RlZmluZSBDUjY0ICBDVExfUkVHKDB4MDEwMCkKLSNkZWZpbmUgQ1I2NSAgQ1RMX1JFRygweDAxMDQpIC8qIE9GRE0gNTRNIGNhbGlicmF0aW9uICovCi0jZGVmaW5lIENSNjYgIENUTF9SRUcoMHgwMTA4KSAvKiBPRkRNIDQ4TSBjYWxpYnJhdGlvbiAqLwotI2RlZmluZSBDUjY3ICBDVExfUkVHKDB4MDEwQykgLyogT0ZETSAzNk0gY2FsaWJyYXRpb24gKi8KLSNkZWZpbmUgQ1I2OCAgQ1RMX1JFRygweDAxMTApIC8qIENDSyBjYWxpYnJhdGlvbiAqLwotI2RlZmluZSBDUjY5ICBDVExfUkVHKDB4MDExNCkKLSNkZWZpbmUgQ1I3MCAgQ1RMX1JFRygweDAxMTgpCi0jZGVmaW5lIENSNzEgIENUTF9SRUcoMHgwMTFDKQotI2RlZmluZSBDUjcyICBDVExfUkVHKDB4MDEyMCkKLSNkZWZpbmUgQ1I3MyAgQ1RMX1JFRygweDAxMjQpCi0jZGVmaW5lIENSNzQgIENUTF9SRUcoMHgwMTI4KQotI2RlZmluZSBDUjc1ICBDVExfUkVHKDB4MDEyQykKLSNkZWZpbmUgQ1I3NiAgQ1RMX1JFRygweDAxMzApCi0jZGVmaW5lIENSNzcgIENUTF9SRUcoMHgwMTM0KQotI2RlZmluZSBDUjc4ICBDVExfUkVHKDB4MDEzOCkKLSNkZWZpbmUgQ1I3OSAgQ1RMX1JFRygweDAxM0MpCi0jZGVmaW5lIENSODAgIENUTF9SRUcoMHgwMTQwKQotI2RlZmluZSBDUjgxICBDVExfUkVHKDB4MDE0NCkKLSNkZWZpbmUgQ1I4MiAgQ1RMX1JFRygweDAxNDgpCi0jZGVmaW5lIENSODMgIENUTF9SRUcoMHgwMTRDKQotI2RlZmluZSBDUjg0ICBDVExfUkVHKDB4MDE1MCkKLSNkZWZpbmUgQ1I4NSAgQ1RMX1JFRygweDAxNTQpCi0jZGVmaW5lIENSODYgIENUTF9SRUcoMHgwMTU4KQotI2RlZmluZSBDUjg3ICBDVExfUkVHKDB4MDE1QykKLSNkZWZpbmUgQ1I4OCAgQ1RMX1JFRygweDAxNjApCi0jZGVmaW5lIENSODkgIENUTF9SRUcoMHgwMTY0KQotI2RlZmluZSBDUjkwICBDVExfUkVHKDB4MDE2OCkKLSNkZWZpbmUgQ1I5MSAgQ1RMX1JFRygweDAxNkMpCi0jZGVmaW5lIENSOTIgIENUTF9SRUcoMHgwMTcwKQotI2RlZmluZSBDUjkzICBDVExfUkVHKDB4MDE3NCkKLSNkZWZpbmUgQ1I5NCAgQ1RMX1JFRygweDAxNzgpCi0jZGVmaW5lIENSOTUgIENUTF9SRUcoMHgwMTdDKQotI2RlZmluZSBDUjk2ICBDVExfUkVHKDB4MDE4MCkKLSNkZWZpbmUgQ1I5NyAgQ1RMX1JFRygweDAxODQpCi0jZGVmaW5lIENSOTggIENUTF9SRUcoMHgwMTg4KQotI2RlZmluZSBDUjk5ICBDVExfUkVHKDB4MDE4QykKLSNkZWZpbmUgQ1IxMDAgQ1RMX1JFRygweDAxOTApCi0jZGVmaW5lIENSMTAxIENUTF9SRUcoMHgwMTk0KQotI2RlZmluZSBDUjEwMiBDVExfUkVHKDB4MDE5OCkKLSNkZWZpbmUgQ1IxMDMgQ1RMX1JFRygweDAxOUMpCi0jZGVmaW5lIENSMTA0IENUTF9SRUcoMHgwMUEwKQotI2RlZmluZSBDUjEwNSBDVExfUkVHKDB4MDFBNCkKLSNkZWZpbmUgQ1IxMDYgQ1RMX1JFRygweDAxQTgpCi0jZGVmaW5lIENSMTA3IENUTF9SRUcoMHgwMUFDKQotI2RlZmluZSBDUjEwOCBDVExfUkVHKDB4MDFCMCkKLSNkZWZpbmUgQ1IxMDkgQ1RMX1JFRygweDAxQjQpCi0jZGVmaW5lIENSMTEwIENUTF9SRUcoMHgwMUI4KQotI2RlZmluZSBDUjExMSBDVExfUkVHKDB4MDFCQykKLSNkZWZpbmUgQ1IxMTIgQ1RMX1JFRygweDAxQzApCi0jZGVmaW5lIENSMTEzIENUTF9SRUcoMHgwMUM0KQotI2RlZmluZSBDUjExNCBDVExfUkVHKDB4MDFDOCkKLSNkZWZpbmUgQ1IxMTUgQ1RMX1JFRygweDAxQ0MpCi0jZGVmaW5lIENSMTE2IENUTF9SRUcoMHgwMUQwKQotI2RlZmluZSBDUjExNyBDVExfUkVHKDB4MDFENCkKLSNkZWZpbmUgQ1IxMTggQ1RMX1JFRygweDAxRDgpCi0jZGVmaW5lIENSMTE5IENUTF9SRUcoMHgwMURDKQotI2RlZmluZSBDUjEyMCBDVExfUkVHKDB4MDFFMCkKLSNkZWZpbmUgQ1IxMjEgQ1RMX1JFRygweDAxRTQpCi0jZGVmaW5lIENSMTIyIENUTF9SRUcoMHgwMUU4KQotI2RlZmluZSBDUjEyMyBDVExfUkVHKDB4MDFFQykKLSNkZWZpbmUgQ1IxMjQgQ1RMX1JFRygweDAxRjApCi0jZGVmaW5lIENSMTI1IENUTF9SRUcoMHgwMUY0KQotI2RlZmluZSBDUjEyNiBDVExfUkVHKDB4MDFGOCkKLSNkZWZpbmUgQ1IxMjcgQ1RMX1JFRygweDAxRkMpCi0jZGVmaW5lIENSMTI4IENUTF9SRUcoMHgwMjAwKQotI2RlZmluZSBDUjEyOSBDVExfUkVHKDB4MDIwNCkKLSNkZWZpbmUgQ1IxMzAgQ1RMX1JFRygweDAyMDgpCi0jZGVmaW5lIENSMTMxIENUTF9SRUcoMHgwMjBDKQotI2RlZmluZSBDUjEzMiBDVExfUkVHKDB4MDIxMCkKLSNkZWZpbmUgQ1IxMzMgQ1RMX1JFRygweDAyMTQpCi0jZGVmaW5lIENSMTM0IENUTF9SRUcoMHgwMjE4KQotI2RlZmluZSBDUjEzNSBDVExfUkVHKDB4MDIxQykKLSNkZWZpbmUgQ1IxMzYgQ1RMX1JFRygweDAyMjApCi0jZGVmaW5lIENSMTM3IENUTF9SRUcoMHgwMjI0KQotI2RlZmluZSBDUjEzOCBDVExfUkVHKDB4MDIyOCkKLSNkZWZpbmUgQ1IxMzkgQ1RMX1JFRygweDAyMkMpCi0jZGVmaW5lIENSMTQwIENUTF9SRUcoMHgwMjMwKQotI2RlZmluZSBDUjE0MSBDVExfUkVHKDB4MDIzNCkKLSNkZWZpbmUgQ1IxNDIgQ1RMX1JFRygweDAyMzgpCi0jZGVmaW5lIENSMTQzIENUTF9SRUcoMHgwMjNDKQotI2RlZmluZSBDUjE0NCBDVExfUkVHKDB4MDI0MCkKLSNkZWZpbmUgQ1IxNDUgQ1RMX1JFRygweDAyNDQpCi0jZGVmaW5lIENSMTQ2IENUTF9SRUcoMHgwMjQ4KQotI2RlZmluZSBDUjE0NyBDVExfUkVHKDB4MDI0QykKLSNkZWZpbmUgQ1IxNDggQ1RMX1JFRygweDAyNTApCi0jZGVmaW5lIENSMTQ5IENUTF9SRUcoMHgwMjU0KQotI2RlZmluZSBDUjE1MCBDVExfUkVHKDB4MDI1OCkKLSNkZWZpbmUgQ1IxNTEgQ1RMX1JFRygweDAyNUMpCi0jZGVmaW5lIENSMTUyIENUTF9SRUcoMHgwMjYwKQotI2RlZmluZSBDUjE1MyBDVExfUkVHKDB4MDI2NCkKLSNkZWZpbmUgQ1IxNTQgQ1RMX1JFRygweDAyNjgpCi0jZGVmaW5lIENSMTU1IENUTF9SRUcoMHgwMjZDKQotI2RlZmluZSBDUjE1NiBDVExfUkVHKDB4MDI3MCkKLSNkZWZpbmUgQ1IxNTcgQ1RMX1JFRygweDAyNzQpCi0jZGVmaW5lIENSMTU4IENUTF9SRUcoMHgwMjc4KQotI2RlZmluZSBDUjE1OSBDVExfUkVHKDB4MDI3QykKLSNkZWZpbmUgQ1IxNjAgQ1RMX1JFRygweDAyODApCi0jZGVmaW5lIENSMTYxIENUTF9SRUcoMHgwMjg0KQotI2RlZmluZSBDUjE2MiBDVExfUkVHKDB4MDI4OCkKLSNkZWZpbmUgQ1IxNjMgQ1RMX1JFRygweDAyOEMpCi0jZGVmaW5lIENSMTY0IENUTF9SRUcoMHgwMjkwKQotI2RlZmluZSBDUjE2NSBDVExfUkVHKDB4MDI5NCkKLSNkZWZpbmUgQ1IxNjYgQ1RMX1JFRygweDAyOTgpCi0jZGVmaW5lIENSMTY3IENUTF9SRUcoMHgwMjlDKQotI2RlZmluZSBDUjE2OCBDVExfUkVHKDB4MDJBMCkKLSNkZWZpbmUgQ1IxNjkgQ1RMX1JFRygweDAyQTQpCi0jZGVmaW5lIENSMTcwIENUTF9SRUcoMHgwMkE4KQotI2RlZmluZSBDUjE3MSBDVExfUkVHKDB4MDJBQykKLSNkZWZpbmUgQ1IxNzIgQ1RMX1JFRygweDAyQjApCi0jZGVmaW5lIENSMTczIENUTF9SRUcoMHgwMkI0KQotI2RlZmluZSBDUjE3NCBDVExfUkVHKDB4MDJCOCkKLSNkZWZpbmUgQ1IxNzUgQ1RMX1JFRygweDAyQkMpCi0jZGVmaW5lIENSMTc2IENUTF9SRUcoMHgwMkMwKQotI2RlZmluZSBDUjE3NyBDVExfUkVHKDB4MDJDNCkKLSNkZWZpbmUgQ1IxNzggQ1RMX1JFRygweDAyQzgpCi0jZGVmaW5lIENSMTc5IENUTF9SRUcoMHgwMkNDKQotI2RlZmluZSBDUjE4MCBDVExfUkVHKDB4MDJEMCkKLSNkZWZpbmUgQ1IxODEgQ1RMX1JFRygweDAyRDQpCi0jZGVmaW5lIENSMTgyIENUTF9SRUcoMHgwMkQ4KQotI2RlZmluZSBDUjE4MyBDVExfUkVHKDB4MDJEQykKLSNkZWZpbmUgQ1IxODQgQ1RMX1JFRygweDAyRTApCi0jZGVmaW5lIENSMTg1IENUTF9SRUcoMHgwMkU0KQotI2RlZmluZSBDUjE4NiBDVExfUkVHKDB4MDJFOCkKLSNkZWZpbmUgQ1IxODcgQ1RMX1JFRygweDAyRUMpCi0jZGVmaW5lIENSMTg4IENUTF9SRUcoMHgwMkYwKQotI2RlZmluZSBDUjE4OSBDVExfUkVHKDB4MDJGNCkKLSNkZWZpbmUgQ1IxOTAgQ1RMX1JFRygweDAyRjgpCi0jZGVmaW5lIENSMTkxIENUTF9SRUcoMHgwMkZDKQotI2RlZmluZSBDUjE5MiBDVExfUkVHKDB4MDMwMCkKLSNkZWZpbmUgQ1IxOTMgQ1RMX1JFRygweDAzMDQpCi0jZGVmaW5lIENSMTk0IENUTF9SRUcoMHgwMzA4KQotI2RlZmluZSBDUjE5NSBDVExfUkVHKDB4MDMwQykKLSNkZWZpbmUgQ1IxOTYgQ1RMX1JFRygweDAzMTApCi0jZGVmaW5lIENSMTk3IENUTF9SRUcoMHgwMzE0KQotI2RlZmluZSBDUjE5OCBDVExfUkVHKDB4MDMxOCkKLSNkZWZpbmUgQ1IxOTkgQ1RMX1JFRygweDAzMUMpCi0jZGVmaW5lIENSMjAwIENUTF9SRUcoMHgwMzIwKQotI2RlZmluZSBDUjIwMSBDVExfUkVHKDB4MDMyNCkKLSNkZWZpbmUgQ1IyMDIgQ1RMX1JFRygweDAzMjgpCi0jZGVmaW5lIENSMjAzIENUTF9SRUcoMHgwMzJDKQkvKiBJMkMgYnVzIHRlbXBsYXRlIHZhbHVlICYgZmxhc2ggY29udHJvbCAqLwotI2RlZmluZSBDUjIwNCBDVExfUkVHKDB4MDMzMCkKLSNkZWZpbmUgQ1IyMDUgQ1RMX1JFRygweDAzMzQpCi0jZGVmaW5lIENSMjA2IENUTF9SRUcoMHgwMzM4KQotI2RlZmluZSBDUjIwNyBDVExfUkVHKDB4MDMzQykKLSNkZWZpbmUgQ1IyMDggQ1RMX1JFRygweDAzNDApCi0jZGVmaW5lIENSMjA5IENUTF9SRUcoMHgwMzQ0KQotI2RlZmluZSBDUjIxMCBDVExfUkVHKDB4MDM0OCkKLSNkZWZpbmUgQ1IyMTEgQ1RMX1JFRygweDAzNEMpCi0jZGVmaW5lIENSMjEyIENUTF9SRUcoMHgwMzUwKQotI2RlZmluZSBDUjIxMyBDVExfUkVHKDB4MDM1NCkKLSNkZWZpbmUgQ1IyMTQgQ1RMX1JFRygweDAzNTgpCi0jZGVmaW5lIENSMjE1IENUTF9SRUcoMHgwMzVDKQotI2RlZmluZSBDUjIxNiBDVExfUkVHKDB4MDM2MCkKLSNkZWZpbmUgQ1IyMTcgQ1RMX1JFRygweDAzNjQpCi0jZGVmaW5lIENSMjE4IENUTF9SRUcoMHgwMzY4KQotI2RlZmluZSBDUjIxOSBDVExfUkVHKDB4MDM2QykKLSNkZWZpbmUgQ1IyMjAgQ1RMX1JFRygweDAzNzApCi0jZGVmaW5lIENSMjIxIENUTF9SRUcoMHgwMzc0KQotI2RlZmluZSBDUjIyMiBDVExfUkVHKDB4MDM3OCkKLSNkZWZpbmUgQ1IyMjMgQ1RMX1JFRygweDAzN0MpCi0jZGVmaW5lIENSMjI0IENUTF9SRUcoMHgwMzgwKQotI2RlZmluZSBDUjIyNSBDVExfUkVHKDB4MDM4NCkKLSNkZWZpbmUgQ1IyMjYgQ1RMX1JFRygweDAzODgpCi0jZGVmaW5lIENSMjI3IENUTF9SRUcoMHgwMzhDKQotI2RlZmluZSBDUjIyOCBDVExfUkVHKDB4MDM5MCkKLSNkZWZpbmUgQ1IyMjkgQ1RMX1JFRygweDAzOTQpCi0jZGVmaW5lIENSMjMwIENUTF9SRUcoMHgwMzk4KQotI2RlZmluZSBDUjIzMSBDVExfUkVHKDB4MDM5QykKLSNkZWZpbmUgQ1IyMzIgQ1RMX1JFRygweDAzQTApCi0jZGVmaW5lIENSMjMzIENUTF9SRUcoMHgwM0E0KQotI2RlZmluZSBDUjIzNCBDVExfUkVHKDB4MDNBOCkKLSNkZWZpbmUgQ1IyMzUgQ1RMX1JFRygweDAzQUMpCi0jZGVmaW5lIENSMjM2IENUTF9SRUcoMHgwM0IwKQorI2RlZmluZSBaRF9DUjEyICBDVExfUkVHKDB4MDAzMCkKKyNkZWZpbmUgWkRfQ1IxMyAgQ1RMX1JFRygweDAwMzQpCisjZGVmaW5lIFpEX0NSMTQgIENUTF9SRUcoMHgwMDM4KQorI2RlZmluZSBaRF9DUjE1ICBDVExfUkVHKDB4MDAzQykKKyNkZWZpbmUgWkRfQ1IxNiAgQ1RMX1JFRygweDAwNDApCisjZGVmaW5lIFpEX0NSMTcgIENUTF9SRUcoMHgwMDQ0KQorI2RlZmluZSBaRF9DUjE4ICBDVExfUkVHKDB4MDA0OCkKKyNkZWZpbmUgWkRfQ1IxOSAgQ1RMX1JFRygweDAwNEMpCisjZGVmaW5lIFpEX0NSMjAgIENUTF9SRUcoMHgwMDUwKQorI2RlZmluZSBaRF9DUjIxICBDVExfUkVHKDB4MDA1NCkKKyNkZWZpbmUgWkRfQ1IyMiAgQ1RMX1JFRygweDAwNTgpCisjZGVmaW5lIFpEX0NSMjMgIENUTF9SRUcoMHgwMDVDKQorI2RlZmluZSBaRF9DUjI0ICBDVExfUkVHKDB4MDA2MCkJLyogQ0NBIHRocmVzaG9sZCAqLworI2RlZmluZSBaRF9DUjI1ICBDVExfUkVHKDB4MDA2NCkKKyNkZWZpbmUgWkRfQ1IyNiAgQ1RMX1JFRygweDAwNjgpCisjZGVmaW5lIFpEX0NSMjcgIENUTF9SRUcoMHgwMDZDKQorI2RlZmluZSBaRF9DUjI4ICBDVExfUkVHKDB4MDA3MCkKKyNkZWZpbmUgWkRfQ1IyOSAgQ1RMX1JFRygweDAwNzQpCisjZGVmaW5lIFpEX0NSMzAgIENUTF9SRUcoMHgwMDc4KQorI2RlZmluZSBaRF9DUjMxICBDVExfUkVHKDB4MDA3QykJLyogVFggcG93ZXIgY29udHJvbCBmb3IgUkYgaW4KKwkJCQkJICogQ0NLIG1vZGUKKwkJCQkJICovCisjZGVmaW5lIFpEX0NSMzIgIENUTF9SRUcoMHgwMDgwKQorI2RlZmluZSBaRF9DUjMzICBDVExfUkVHKDB4MDA4NCkKKyNkZWZpbmUgWkRfQ1IzNCAgQ1RMX1JFRygweDAwODgpCisjZGVmaW5lIFpEX0NSMzUgIENUTF9SRUcoMHgwMDhDKQorI2RlZmluZSBaRF9DUjM2ICBDVExfUkVHKDB4MDA5MCkKKyNkZWZpbmUgWkRfQ1IzNyAgQ1RMX1JFRygweDAwOTQpCisjZGVmaW5lIFpEX0NSMzggIENUTF9SRUcoMHgwMDk4KQorI2RlZmluZSBaRF9DUjM5ICBDVExfUkVHKDB4MDA5QykKKyNkZWZpbmUgWkRfQ1I0MCAgQ1RMX1JFRygweDAwQTApCisjZGVmaW5lIFpEX0NSNDEgIENUTF9SRUcoMHgwMEE0KQorI2RlZmluZSBaRF9DUjQyICBDVExfUkVHKDB4MDBBOCkKKyNkZWZpbmUgWkRfQ1I0MyAgQ1RMX1JFRygweDAwQUMpCisjZGVmaW5lIFpEX0NSNDQgIENUTF9SRUcoMHgwMEIwKQorI2RlZmluZSBaRF9DUjQ1ICBDVExfUkVHKDB4MDBCNCkKKyNkZWZpbmUgWkRfQ1I0NiAgQ1RMX1JFRygweDAwQjgpCisjZGVmaW5lIFpEX0NSNDcgIENUTF9SRUcoMHgwMEJDKQkvKiBDQ0sgYmFzZWJhbmQgZ2FpbgorCQkJCQkgKiAocGF0Y2ggdmFsdWUgbWlnaHQgYmUgaW4gRUVQUk9NKQorCQkJCQkgKi8KKyNkZWZpbmUgWkRfQ1I0OCAgQ1RMX1JFRygweDAwQzApCisjZGVmaW5lIFpEX0NSNDkgIENUTF9SRUcoMHgwMEM0KQorI2RlZmluZSBaRF9DUjUwICBDVExfUkVHKDB4MDBDOCkKKyNkZWZpbmUgWkRfQ1I1MSAgQ1RMX1JFRygweDAwQ0MpCS8qIFRYIHBvd2VyIGNvbnRyb2wgZm9yIFJGIGluCisJCQkJCSAqIDYtMzZNIG1vZGVzCisJCQkJCSAqLworI2RlZmluZSBaRF9DUjUyICBDVExfUkVHKDB4MDBEMCkJLyogVFggcG93ZXIgY29udHJvbCBmb3IgUkYgaW4KKwkJCQkJICogNDhNIG1vZGUKKwkJCQkJICovCisjZGVmaW5lIFpEX0NSNTMgIENUTF9SRUcoMHgwMEQ0KQkvKiBUWCBwb3dlciBjb250cm9sIGZvciBSRiBpbgorCQkJCQkgKiA1NE0gbW9kZQorCQkJCQkgKi8KKyNkZWZpbmUgWkRfQ1I1NCAgQ1RMX1JFRygweDAwRDgpCisjZGVmaW5lIFpEX0NSNTUgIENUTF9SRUcoMHgwMERDKQorI2RlZmluZSBaRF9DUjU2ICBDVExfUkVHKDB4MDBFMCkKKyNkZWZpbmUgWkRfQ1I1NyAgQ1RMX1JFRygweDAwRTQpCisjZGVmaW5lIFpEX0NSNTggIENUTF9SRUcoMHgwMEU4KQorI2RlZmluZSBaRF9DUjU5ICBDVExfUkVHKDB4MDBFQykKKyNkZWZpbmUgWkRfQ1I2MCAgQ1RMX1JFRygweDAwRjApCisjZGVmaW5lIFpEX0NSNjEgIENUTF9SRUcoMHgwMEY0KQorI2RlZmluZSBaRF9DUjYyICBDVExfUkVHKDB4MDBGOCkKKyNkZWZpbmUgWkRfQ1I2MyAgQ1RMX1JFRygweDAwRkMpCisjZGVmaW5lIFpEX0NSNjQgIENUTF9SRUcoMHgwMTAwKQorI2RlZmluZSBaRF9DUjY1ICBDVExfUkVHKDB4MDEwNCkgLyogT0ZETSA1NE0gY2FsaWJyYXRpb24gKi8KKyNkZWZpbmUgWkRfQ1I2NiAgQ1RMX1JFRygweDAxMDgpIC8qIE9GRE0gNDhNIGNhbGlicmF0aW9uICovCisjZGVmaW5lIFpEX0NSNjcgIENUTF9SRUcoMHgwMTBDKSAvKiBPRkRNIDM2TSBjYWxpYnJhdGlvbiAqLworI2RlZmluZSBaRF9DUjY4ICBDVExfUkVHKDB4MDExMCkgLyogQ0NLIGNhbGlicmF0aW9uICovCisjZGVmaW5lIFpEX0NSNjkgIENUTF9SRUcoMHgwMTE0KQorI2RlZmluZSBaRF9DUjcwICBDVExfUkVHKDB4MDExOCkKKyNkZWZpbmUgWkRfQ1I3MSAgQ1RMX1JFRygweDAxMUMpCisjZGVmaW5lIFpEX0NSNzIgIENUTF9SRUcoMHgwMTIwKQorI2RlZmluZSBaRF9DUjczICBDVExfUkVHKDB4MDEyNCkKKyNkZWZpbmUgWkRfQ1I3NCAgQ1RMX1JFRygweDAxMjgpCisjZGVmaW5lIFpEX0NSNzUgIENUTF9SRUcoMHgwMTJDKQorI2RlZmluZSBaRF9DUjc2ICBDVExfUkVHKDB4MDEzMCkKKyNkZWZpbmUgWkRfQ1I3NyAgQ1RMX1JFRygweDAxMzQpCisjZGVmaW5lIFpEX0NSNzggIENUTF9SRUcoMHgwMTM4KQorI2RlZmluZSBaRF9DUjc5ICBDVExfUkVHKDB4MDEzQykKKyNkZWZpbmUgWkRfQ1I4MCAgQ1RMX1JFRygweDAxNDApCisjZGVmaW5lIFpEX0NSODEgIENUTF9SRUcoMHgwMTQ0KQorI2RlZmluZSBaRF9DUjgyICBDVExfUkVHKDB4MDE0OCkKKyNkZWZpbmUgWkRfQ1I4MyAgQ1RMX1JFRygweDAxNEMpCisjZGVmaW5lIFpEX0NSODQgIENUTF9SRUcoMHgwMTUwKQorI2RlZmluZSBaRF9DUjg1ICBDVExfUkVHKDB4MDE1NCkKKyNkZWZpbmUgWkRfQ1I4NiAgQ1RMX1JFRygweDAxNTgpCisjZGVmaW5lIFpEX0NSODcgIENUTF9SRUcoMHgwMTVDKQorI2RlZmluZSBaRF9DUjg4ICBDVExfUkVHKDB4MDE2MCkKKyNkZWZpbmUgWkRfQ1I4OSAgQ1RMX1JFRygweDAxNjQpCisjZGVmaW5lIFpEX0NSOTAgIENUTF9SRUcoMHgwMTY4KQorI2RlZmluZSBaRF9DUjkxICBDVExfUkVHKDB4MDE2QykKKyNkZWZpbmUgWkRfQ1I5MiAgQ1RMX1JFRygweDAxNzApCisjZGVmaW5lIFpEX0NSOTMgIENUTF9SRUcoMHgwMTc0KQorI2RlZmluZSBaRF9DUjk0ICBDVExfUkVHKDB4MDE3OCkKKyNkZWZpbmUgWkRfQ1I5NSAgQ1RMX1JFRygweDAxN0MpCisjZGVmaW5lIFpEX0NSOTYgIENUTF9SRUcoMHgwMTgwKQorI2RlZmluZSBaRF9DUjk3ICBDVExfUkVHKDB4MDE4NCkKKyNkZWZpbmUgWkRfQ1I5OCAgQ1RMX1JFRygweDAxODgpCisjZGVmaW5lIFpEX0NSOTkgIENUTF9SRUcoMHgwMThDKQorI2RlZmluZSBaRF9DUjEwMCBDVExfUkVHKDB4MDE5MCkKKyNkZWZpbmUgWkRfQ1IxMDEgQ1RMX1JFRygweDAxOTQpCisjZGVmaW5lIFpEX0NSMTAyIENUTF9SRUcoMHgwMTk4KQorI2RlZmluZSBaRF9DUjEwMyBDVExfUkVHKDB4MDE5QykKKyNkZWZpbmUgWkRfQ1IxMDQgQ1RMX1JFRygweDAxQTApCisjZGVmaW5lIFpEX0NSMTA1IENUTF9SRUcoMHgwMUE0KQorI2RlZmluZSBaRF9DUjEwNiBDVExfUkVHKDB4MDFBOCkKKyNkZWZpbmUgWkRfQ1IxMDcgQ1RMX1JFRygweDAxQUMpCisjZGVmaW5lIFpEX0NSMTA4IENUTF9SRUcoMHgwMUIwKQorI2RlZmluZSBaRF9DUjEwOSBDVExfUkVHKDB4MDFCNCkKKyNkZWZpbmUgWkRfQ1IxMTAgQ1RMX1JFRygweDAxQjgpCisjZGVmaW5lIFpEX0NSMTExIENUTF9SRUcoMHgwMUJDKQorI2RlZmluZSBaRF9DUjExMiBDVExfUkVHKDB4MDFDMCkKKyNkZWZpbmUgWkRfQ1IxMTMgQ1RMX1JFRygweDAxQzQpCisjZGVmaW5lIFpEX0NSMTE0IENUTF9SRUcoMHgwMUM4KQorI2RlZmluZSBaRF9DUjExNSBDVExfUkVHKDB4MDFDQykKKyNkZWZpbmUgWkRfQ1IxMTYgQ1RMX1JFRygweDAxRDApCisjZGVmaW5lIFpEX0NSMTE3IENUTF9SRUcoMHgwMUQ0KQorI2RlZmluZSBaRF9DUjExOCBDVExfUkVHKDB4MDFEOCkKKyNkZWZpbmUgWkRfQ1IxMTkgQ1RMX1JFRygweDAxREMpCisjZGVmaW5lIFpEX0NSMTIwIENUTF9SRUcoMHgwMUUwKQorI2RlZmluZSBaRF9DUjEyMSBDVExfUkVHKDB4MDFFNCkKKyNkZWZpbmUgWkRfQ1IxMjIgQ1RMX1JFRygweDAxRTgpCisjZGVmaW5lIFpEX0NSMTIzIENUTF9SRUcoMHgwMUVDKQorI2RlZmluZSBaRF9DUjEyNCBDVExfUkVHKDB4MDFGMCkKKyNkZWZpbmUgWkRfQ1IxMjUgQ1RMX1JFRygweDAxRjQpCisjZGVmaW5lIFpEX0NSMTI2IENUTF9SRUcoMHgwMUY4KQorI2RlZmluZSBaRF9DUjEyNyBDVExfUkVHKDB4MDFGQykKKyNkZWZpbmUgWkRfQ1IxMjggQ1RMX1JFRygweDAyMDApCisjZGVmaW5lIFpEX0NSMTI5IENUTF9SRUcoMHgwMjA0KQorI2RlZmluZSBaRF9DUjEzMCBDVExfUkVHKDB4MDIwOCkKKyNkZWZpbmUgWkRfQ1IxMzEgQ1RMX1JFRygweDAyMEMpCisjZGVmaW5lIFpEX0NSMTMyIENUTF9SRUcoMHgwMjEwKQorI2RlZmluZSBaRF9DUjEzMyBDVExfUkVHKDB4MDIxNCkKKyNkZWZpbmUgWkRfQ1IxMzQgQ1RMX1JFRygweDAyMTgpCisjZGVmaW5lIFpEX0NSMTM1IENUTF9SRUcoMHgwMjFDKQorI2RlZmluZSBaRF9DUjEzNiBDVExfUkVHKDB4MDIyMCkKKyNkZWZpbmUgWkRfQ1IxMzcgQ1RMX1JFRygweDAyMjQpCisjZGVmaW5lIFpEX0NSMTM4IENUTF9SRUcoMHgwMjI4KQorI2RlZmluZSBaRF9DUjEzOSBDVExfUkVHKDB4MDIyQykKKyNkZWZpbmUgWkRfQ1IxNDAgQ1RMX1JFRygweDAyMzApCisjZGVmaW5lIFpEX0NSMTQxIENUTF9SRUcoMHgwMjM0KQorI2RlZmluZSBaRF9DUjE0MiBDVExfUkVHKDB4MDIzOCkKKyNkZWZpbmUgWkRfQ1IxNDMgQ1RMX1JFRygweDAyM0MpCisjZGVmaW5lIFpEX0NSMTQ0IENUTF9SRUcoMHgwMjQwKQorI2RlZmluZSBaRF9DUjE0NSBDVExfUkVHKDB4MDI0NCkKKyNkZWZpbmUgWkRfQ1IxNDYgQ1RMX1JFRygweDAyNDgpCisjZGVmaW5lIFpEX0NSMTQ3IENUTF9SRUcoMHgwMjRDKQorI2RlZmluZSBaRF9DUjE0OCBDVExfUkVHKDB4MDI1MCkKKyNkZWZpbmUgWkRfQ1IxNDkgQ1RMX1JFRygweDAyNTQpCisjZGVmaW5lIFpEX0NSMTUwIENUTF9SRUcoMHgwMjU4KQorI2RlZmluZSBaRF9DUjE1MSBDVExfUkVHKDB4MDI1QykKKyNkZWZpbmUgWkRfQ1IxNTIgQ1RMX1JFRygweDAyNjApCisjZGVmaW5lIFpEX0NSMTUzIENUTF9SRUcoMHgwMjY0KQorI2RlZmluZSBaRF9DUjE1NCBDVExfUkVHKDB4MDI2OCkKKyNkZWZpbmUgWkRfQ1IxNTUgQ1RMX1JFRygweDAyNkMpCisjZGVmaW5lIFpEX0NSMTU2IENUTF9SRUcoMHgwMjcwKQorI2RlZmluZSBaRF9DUjE1NyBDVExfUkVHKDB4MDI3NCkKKyNkZWZpbmUgWkRfQ1IxNTggQ1RMX1JFRygweDAyNzgpCisjZGVmaW5lIFpEX0NSMTU5IENUTF9SRUcoMHgwMjdDKQorI2RlZmluZSBaRF9DUjE2MCBDVExfUkVHKDB4MDI4MCkKKyNkZWZpbmUgWkRfQ1IxNjEgQ1RMX1JFRygweDAyODQpCisjZGVmaW5lIFpEX0NSMTYyIENUTF9SRUcoMHgwMjg4KQorI2RlZmluZSBaRF9DUjE2MyBDVExfUkVHKDB4MDI4QykKKyNkZWZpbmUgWkRfQ1IxNjQgQ1RMX1JFRygweDAyOTApCisjZGVmaW5lIFpEX0NSMTY1IENUTF9SRUcoMHgwMjk0KQorI2RlZmluZSBaRF9DUjE2NiBDVExfUkVHKDB4MDI5OCkKKyNkZWZpbmUgWkRfQ1IxNjcgQ1RMX1JFRygweDAyOUMpCisjZGVmaW5lIFpEX0NSMTY4IENUTF9SRUcoMHgwMkEwKQorI2RlZmluZSBaRF9DUjE2OSBDVExfUkVHKDB4MDJBNCkKKyNkZWZpbmUgWkRfQ1IxNzAgQ1RMX1JFRygweDAyQTgpCisjZGVmaW5lIFpEX0NSMTcxIENUTF9SRUcoMHgwMkFDKQorI2RlZmluZSBaRF9DUjE3MiBDVExfUkVHKDB4MDJCMCkKKyNkZWZpbmUgWkRfQ1IxNzMgQ1RMX1JFRygweDAyQjQpCisjZGVmaW5lIFpEX0NSMTc0IENUTF9SRUcoMHgwMkI4KQorI2RlZmluZSBaRF9DUjE3NSBDVExfUkVHKDB4MDJCQykKKyNkZWZpbmUgWkRfQ1IxNzYgQ1RMX1JFRygweDAyQzApCisjZGVmaW5lIFpEX0NSMTc3IENUTF9SRUcoMHgwMkM0KQorI2RlZmluZSBaRF9DUjE3OCBDVExfUkVHKDB4MDJDOCkKKyNkZWZpbmUgWkRfQ1IxNzkgQ1RMX1JFRygweDAyQ0MpCisjZGVmaW5lIFpEX0NSMTgwIENUTF9SRUcoMHgwMkQwKQorI2RlZmluZSBaRF9DUjE4MSBDVExfUkVHKDB4MDJENCkKKyNkZWZpbmUgWkRfQ1IxODIgQ1RMX1JFRygweDAyRDgpCisjZGVmaW5lIFpEX0NSMTgzIENUTF9SRUcoMHgwMkRDKQorI2RlZmluZSBaRF9DUjE4NCBDVExfUkVHKDB4MDJFMCkKKyNkZWZpbmUgWkRfQ1IxODUgQ1RMX1JFRygweDAyRTQpCisjZGVmaW5lIFpEX0NSMTg2IENUTF9SRUcoMHgwMkU4KQorI2RlZmluZSBaRF9DUjE4NyBDVExfUkVHKDB4MDJFQykKKyNkZWZpbmUgWkRfQ1IxODggQ1RMX1JFRygweDAyRjApCisjZGVmaW5lIFpEX0NSMTg5IENUTF9SRUcoMHgwMkY0KQorI2RlZmluZSBaRF9DUjE5MCBDVExfUkVHKDB4MDJGOCkKKyNkZWZpbmUgWkRfQ1IxOTEgQ1RMX1JFRygweDAyRkMpCisjZGVmaW5lIFpEX0NSMTkyIENUTF9SRUcoMHgwMzAwKQorI2RlZmluZSBaRF9DUjE5MyBDVExfUkVHKDB4MDMwNCkKKyNkZWZpbmUgWkRfQ1IxOTQgQ1RMX1JFRygweDAzMDgpCisjZGVmaW5lIFpEX0NSMTk1IENUTF9SRUcoMHgwMzBDKQorI2RlZmluZSBaRF9DUjE5NiBDVExfUkVHKDB4MDMxMCkKKyNkZWZpbmUgWkRfQ1IxOTcgQ1RMX1JFRygweDAzMTQpCisjZGVmaW5lIFpEX0NSMTk4IENUTF9SRUcoMHgwMzE4KQorI2RlZmluZSBaRF9DUjE5OSBDVExfUkVHKDB4MDMxQykKKyNkZWZpbmUgWkRfQ1IyMDAgQ1RMX1JFRygweDAzMjApCisjZGVmaW5lIFpEX0NSMjAxIENUTF9SRUcoMHgwMzI0KQorI2RlZmluZSBaRF9DUjIwMiBDVExfUkVHKDB4MDMyOCkKKyNkZWZpbmUgWkRfQ1IyMDMgQ1RMX1JFRygweDAzMkMpCS8qIEkyQyBidXMgdGVtcGxhdGUgdmFsdWUgJiBmbGFzaAorCQkJCQkgKiBjb250cm9sCisJCQkJCSAqLworI2RlZmluZSBaRF9DUjIwNCBDVExfUkVHKDB4MDMzMCkKKyNkZWZpbmUgWkRfQ1IyMDUgQ1RMX1JFRygweDAzMzQpCisjZGVmaW5lIFpEX0NSMjA2IENUTF9SRUcoMHgwMzM4KQorI2RlZmluZSBaRF9DUjIwNyBDVExfUkVHKDB4MDMzQykKKyNkZWZpbmUgWkRfQ1IyMDggQ1RMX1JFRygweDAzNDApCisjZGVmaW5lIFpEX0NSMjA5IENUTF9SRUcoMHgwMzQ0KQorI2RlZmluZSBaRF9DUjIxMCBDVExfUkVHKDB4MDM0OCkKKyNkZWZpbmUgWkRfQ1IyMTEgQ1RMX1JFRygweDAzNEMpCisjZGVmaW5lIFpEX0NSMjEyIENUTF9SRUcoMHgwMzUwKQorI2RlZmluZSBaRF9DUjIxMyBDVExfUkVHKDB4MDM1NCkKKyNkZWZpbmUgWkRfQ1IyMTQgQ1RMX1JFRygweDAzNTgpCisjZGVmaW5lIFpEX0NSMjE1IENUTF9SRUcoMHgwMzVDKQorI2RlZmluZSBaRF9DUjIxNiBDVExfUkVHKDB4MDM2MCkKKyNkZWZpbmUgWkRfQ1IyMTcgQ1RMX1JFRygweDAzNjQpCisjZGVmaW5lIFpEX0NSMjE4IENUTF9SRUcoMHgwMzY4KQorI2RlZmluZSBaRF9DUjIxOSBDVExfUkVHKDB4MDM2QykKKyNkZWZpbmUgWkRfQ1IyMjAgQ1RMX1JFRygweDAzNzApCisjZGVmaW5lIFpEX0NSMjIxIENUTF9SRUcoMHgwMzc0KQorI2RlZmluZSBaRF9DUjIyMiBDVExfUkVHKDB4MDM3OCkKKyNkZWZpbmUgWkRfQ1IyMjMgQ1RMX1JFRygweDAzN0MpCisjZGVmaW5lIFpEX0NSMjI0IENUTF9SRUcoMHgwMzgwKQorI2RlZmluZSBaRF9DUjIyNSBDVExfUkVHKDB4MDM4NCkKKyNkZWZpbmUgWkRfQ1IyMjYgQ1RMX1JFRygweDAzODgpCisjZGVmaW5lIFpEX0NSMjI3IENUTF9SRUcoMHgwMzhDKQorI2RlZmluZSBaRF9DUjIyOCBDVExfUkVHKDB4MDM5MCkKKyNkZWZpbmUgWkRfQ1IyMjkgQ1RMX1JFRygweDAzOTQpCisjZGVmaW5lIFpEX0NSMjMwIENUTF9SRUcoMHgwMzk4KQorI2RlZmluZSBaRF9DUjIzMSBDVExfUkVHKDB4MDM5QykKKyNkZWZpbmUgWkRfQ1IyMzIgQ1RMX1JFRygweDAzQTApCisjZGVmaW5lIFpEX0NSMjMzIENUTF9SRUcoMHgwM0E0KQorI2RlZmluZSBaRF9DUjIzNCBDVExfUkVHKDB4MDNBOCkKKyNkZWZpbmUgWkRfQ1IyMzUgQ1RMX1JFRygweDAzQUMpCisjZGVmaW5lIFpEX0NSMjM2IENUTF9SRUcoMHgwM0IwKQogCi0jZGVmaW5lIENSMjQwIENUTF9SRUcoMHgwM0MwKQotLyoJYml0IDc6ICBob3N0LWNvbnRyb2xsZWQgUkYgcmVnaXN0ZXIgd3JpdGVzCi0gKiBDUjI0MS1DUjI0NTogZm9yIGhhcmR3YXJlIGNvbnRyb2xsZWQgd3JpdGluZyBvZiBSRiBiaXRzLCBub3QgbmVlZGVkIGZvcgotICogICAgICAgICAgICAgIFVTQgorI2RlZmluZSBaRF9DUjI0MCBDVExfUkVHKDB4MDNDMCkKKy8qICAgICAgICAgICAgIGJpdCA3OiBob3N0LWNvbnRyb2xsZWQgUkYgcmVnaXN0ZXIgd3JpdGVzCisgKiBaRF9DUjI0MS1aRF9DUjI0NTogZm9yIGhhcmR3YXJlIGNvbnRyb2xsZWQgd3JpdGluZyBvZiBSRiBiaXRzLCBub3QgbmVlZGVkIGZvcgorICogICAgICAgICAgICAgICAgICAgIFVTQgogICovCi0jZGVmaW5lIENSMjQxIENUTF9SRUcoMHgwM0M0KQotI2RlZmluZSBDUjI0MiBDVExfUkVHKDB4MDNDOCkKLSNkZWZpbmUgQ1IyNDMgQ1RMX1JFRygweDAzQ0MpCi0jZGVmaW5lIENSMjQ0IENUTF9SRUcoMHgwM0QwKQotI2RlZmluZSBDUjI0NSBDVExfUkVHKDB4MDNENCkKKyNkZWZpbmUgWkRfQ1IyNDEgQ1RMX1JFRygweDAzQzQpCisjZGVmaW5lIFpEX0NSMjQyIENUTF9SRUcoMHgwM0M4KQorI2RlZmluZSBaRF9DUjI0MyBDVExfUkVHKDB4MDNDQykKKyNkZWZpbmUgWkRfQ1IyNDQgQ1RMX1JFRygweDAzRDApCisjZGVmaW5lIFpEX0NSMjQ1IENUTF9SRUcoMHgwM0Q0KQogCi0jZGVmaW5lIENSMjUxIENUTF9SRUcoMHgwM0VDKQkvKiBvbmx5IHVzZWQgZm9yIGFjdGl2YXRpb24gYW5kIGRlYWN0aXZhdGlvbiBvZgotCQkJCSAqIEFpcm9oYSBSRnMgQUwyMjMwIGFuZCBBTDcyMzBCCi0JCQkJICovCi0jZGVmaW5lIENSMjUyIENUTF9SRUcoMHgwM0YwKQotI2RlZmluZSBDUjI1MyBDVExfUkVHKDB4MDNGNCkKLSNkZWZpbmUgQ1IyNTQgQ1RMX1JFRygweDAzRjgpCi0jZGVmaW5lIENSMjU1IENUTF9SRUcoMHgwM0ZDKQorI2RlZmluZSBaRF9DUjI1MSBDVExfUkVHKDB4MDNFQykJLyogb25seSB1c2VkIGZvciBhY3RpdmF0aW9uIGFuZAorCQkJCQkgKiBkZWFjdGl2YXRpb24gb2YgQWlyb2hhIFJGcyBBTDIyMzAKKwkJCQkJICogYW5kIEFMNzIzMEIKKwkJCQkJICovCisjZGVmaW5lIFpEX0NSMjUyIENUTF9SRUcoMHgwM0YwKQorI2RlZmluZSBaRF9DUjI1MyBDVExfUkVHKDB4MDNGNCkKKyNkZWZpbmUgWkRfQ1IyNTQgQ1RMX1JFRygweDAzRjgpCisjZGVmaW5lIFpEX0NSMjU1IENUTF9SRUcoMHgwM0ZDKQogCiAjZGVmaW5lIENSX01BWF9QSFlfUkVHIDI1NQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9yZi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfcmYuaAppbmRleCA3OWRjMTAzLi43MjViN2M5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9yZi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3JmLmgKQEAgLTU1LDcgKzU1LDcgQEAKIAkgKiBkZWZhdWx0cyB0byAxICh5ZXMpICovCiAJdTggdXBkYXRlX2NoYW5uZWxfaW50OjE7CiAKLQkvKiB3aGV0aGVyIENSNDcgc2hvdWxkIGJlIHBhdGNoZWQgZnJvbSB0aGUgRUVQUk9NLCBpZiB0aGUgYXBwcm9wcmlhdGUKKwkvKiB3aGV0aGVyIFpEX0NSNDcgc2hvdWxkIGJlIHBhdGNoZWQgZnJvbSB0aGUgRUVQUk9NLCBpZiB0aGUgYXBwcm9wcmlhdGUKIAkgKiBmbGFnIGlzIHNldCBpbiB0aGUgUE9ELiBUaGUgdmVuZG9yIGRyaXZlciBzdWdnZXN0cyB0aGF0IHRoaXMgc2hvdWxkCiAJICogYmUgZG9uZSBmb3IgYWxsIFJGJ3MsIGJ1dCBhIGJ1ZyBpbiB0aGVpciBjb2RlIHByZXZlbnRzIGJ1dCB0aGVpcgogCSAqIEhXX092ZXJXcml0ZVBoeVJlZ0Zyb21FMlAoKSByb3V0aW5lIGZyb20gZXZlciB0YWtpbmcgZWZmZWN0LiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfcmZfYWwyMjMwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9yZl9hbDIyMzAuYwppbmRleCA3NGE4ZjdhLi4xMmJhYmNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9yZl9hbDIyMzAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9yZl9hbDIyMzAuYwpAQCAtNjEsMzEgKzYxLDMxIEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHpkX2lvcmVxMTYgemQxMjExYl9pb3JlcXNfc2hhcmVkXzFbXSA9IHsKLQl7IENSMjQwLCAweDU3IH0sIHsgQ1I5LCAgIDB4ZTAgfSwKKwl7IFpEX0NSMjQwLCAweDU3IH0sIHsgWkRfQ1I5LCAgIDB4ZTAgfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgemRfaW9yZXExNiBpb3JlcXNfaW5pdF9hbDIyMzBzW10gPSB7Ci0JeyBDUjQ3LCAgIDB4MWUgfSwgLyogTUFSS18wMDIgKi8KLQl7IENSMTA2LCAgMHgyMiB9LAotCXsgQ1IxMDcsICAweDJhIH0sIC8qIE1BUktfMDAyICovCi0JeyBDUjEwOSwgIDB4MTMgfSwgLyogTUFSS18wMDIgKi8KLQl7IENSMTE4LCAgMHhmOCB9LCAvKiBNQVJLXzAwMiAqLwotCXsgQ1IxMTksICAweDEyIH0sIHsgQ1IxMjIsICAweGUwIH0sCi0JeyBDUjEyOCwgIDB4MTAgfSwgLyogTUFSS18wMDEgZnJvbSAweGUtPjB4MTAgKi8KLQl7IENSMTI5LCAgMHgwZSB9LCAvKiBNQVJLXzAwMSBmcm9tIDB4ZC0+MHgwZSAqLwotCXsgQ1IxMzAsICAweDEwIH0sIC8qIE1BUktfMDAxIGZyb20gMHhiLT4weDBkICovCisJeyBaRF9DUjQ3LCAgIDB4MWUgfSwgLyogTUFSS18wMDIgKi8KKwl7IFpEX0NSMTA2LCAgMHgyMiB9LAorCXsgWkRfQ1IxMDcsICAweDJhIH0sIC8qIE1BUktfMDAyICovCisJeyBaRF9DUjEwOSwgIDB4MTMgfSwgLyogTUFSS18wMDIgKi8KKwl7IFpEX0NSMTE4LCAgMHhmOCB9LCAvKiBNQVJLXzAwMiAqLworCXsgWkRfQ1IxMTksICAweDEyIH0sIHsgWkRfQ1IxMjIsICAweGUwIH0sCisJeyBaRF9DUjEyOCwgIDB4MTAgfSwgLyogTUFSS18wMDEgZnJvbSAweGUtPjB4MTAgKi8KKwl7IFpEX0NSMTI5LCAgMHgwZSB9LCAvKiBNQVJLXzAwMSBmcm9tIDB4ZC0+MHgwZSAqLworCXsgWkRfQ1IxMzAsICAweDEwIH0sIC8qIE1BUktfMDAxIGZyb20gMHhiLT4weDBkICovCiB9OwogCiBzdGF0aWMgaW50IHpkMTIxMWJfYWwyMjMwX2ZpbmFsaXplX3JmKHN0cnVjdCB6ZF9jaGlwICpjaGlwKQogewogCWludCByOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgemRfaW9yZXExNiBpb3JlcXNbXSA9IHsKLQkJeyBDUjgwLCAgMHgzMCB9LCB7IENSODEsICAweDMwIH0sIHsgQ1I3OSwgIDB4NTggfSwKLQkJeyBDUjEyLCAgMHhmMCB9LCB7IENSNzcsICAweDFiIH0sIHsgQ1I3OCwgIDB4NTggfSwKLQkJeyBDUjIwMywgMHgwNiB9LAorCQl7IFpEX0NSODAsICAweDMwIH0sIHsgWkRfQ1I4MSwgIDB4MzAgfSwgeyBaRF9DUjc5LCAgMHg1OCB9LAorCQl7IFpEX0NSMTIsICAweGYwIH0sIHsgWkRfQ1I3NywgIDB4MWIgfSwgeyBaRF9DUjc4LCAgMHg1OCB9LAorCQl7IFpEX0NSMjAzLCAweDA2IH0sCiAJCXsgfSwKIAotCQl7IENSMjQwLCAweDgwIH0sCisJCXsgWkRfQ1IyNDAsIDB4ODAgfSwKIAl9OwogCiAJciA9IHpkX2lvd3JpdGUxNmFfbG9ja2VkKGNoaXAsIGlvcmVxcywgQVJSQVlfU0laRShpb3JlcXMpKTsKQEAgLTk0LDEyICs5NCwxMiBAQAogCiAJLyogcmVsYXRlZCB0byBhbnRlbm5hIHNlbGVjdGlvbj8gKi8KIAlpZiAoY2hpcC0+bmV3X3BoeV9sYXlvdXQpIHsKLQkJciA9IHpkX2lvd3JpdGUxNl9sb2NrZWQoY2hpcCwgMHhlMSwgQ1I5KTsKKwkJciA9IHpkX2lvd3JpdGUxNl9sb2NrZWQoY2hpcCwgMHhlMSwgWkRfQ1I5KTsKIAkJaWYgKHIpCiAJCQlyZXR1cm4gcjsKIAl9CiAKLQlyZXR1cm4gemRfaW93cml0ZTE2X2xvY2tlZChjaGlwLCAweDA2LCBDUjIwMyk7CisJcmV0dXJuIHpkX2lvd3JpdGUxNl9sb2NrZWQoY2hpcCwgMHgwNiwgWkRfQ1IyMDMpOwogfQogCiBzdGF0aWMgaW50IHpkMTIxMV9hbDIyMzBfaW5pdF9odyhzdHJ1Y3QgemRfcmYgKnJmKQpAQCAtMTA4LDQwICsxMDgsNDAgQEAKIAlzdHJ1Y3QgemRfY2hpcCAqY2hpcCA9IHpkX3JmX3RvX2NoaXAocmYpOwogCiAJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc19pbml0W10gPSB7Ci0JCXsgQ1IxNSwgICAweDIwIH0sIHsgQ1IyMywgICAweDQwIH0sIHsgQ1IyNCwgIDB4MjAgfSwKLQkJeyBDUjI2LCAgIDB4MTEgfSwgeyBDUjI4LCAgIDB4M2UgfSwgeyBDUjI5LCAgMHgwMCB9LAotCQl7IENSNDQsICAgMHgzMyB9LCB7IENSMTA2LCAgMHgyYSB9LCB7IENSMTA3LCAweDFhIH0sCi0JCXsgQ1IxMDksICAweDA5IH0sIHsgQ1IxMTAsICAweDI3IH0sIHsgQ1IxMTEsIDB4MmIgfSwKLQkJeyBDUjExMiwgIDB4MmIgfSwgeyBDUjExOSwgIDB4MGEgfSwgeyBDUjEwLCAgMHg4OSB9LAorCQl7IFpEX0NSMTUsICAgMHgyMCB9LCB7IFpEX0NSMjMsICAgMHg0MCB9LCB7IFpEX0NSMjQsICAweDIwIH0sCisJCXsgWkRfQ1IyNiwgICAweDExIH0sIHsgWkRfQ1IyOCwgICAweDNlIH0sIHsgWkRfQ1IyOSwgIDB4MDAgfSwKKwkJeyBaRF9DUjQ0LCAgIDB4MzMgfSwgeyBaRF9DUjEwNiwgIDB4MmEgfSwgeyBaRF9DUjEwNywgMHgxYSB9LAorCQl7IFpEX0NSMTA5LCAgMHgwOSB9LCB7IFpEX0NSMTEwLCAgMHgyNyB9LCB7IFpEX0NSMTExLCAweDJiIH0sCisJCXsgWkRfQ1IxMTIsICAweDJiIH0sIHsgWkRfQ1IxMTksICAweDBhIH0sIHsgWkRfQ1IxMCwgIDB4ODkgfSwKIAkJLyogZm9yIG5ld2VzdCAoM3JkIGN1dCkgQUwyMzAwICovCi0JCXsgQ1IxNywgICAweDI4IH0sCi0JCXsgQ1IyNiwgICAweDkzIH0sIHsgQ1IzNCwgICAweDMwIH0sCisJCXsgWkRfQ1IxNywgICAweDI4IH0sCisJCXsgWkRfQ1IyNiwgICAweDkzIH0sIHsgWkRfQ1IzNCwgICAweDMwIH0sCiAJCS8qIGZvciBuZXdlc3QgKDNyZCBjdXQpIEFMMjMwMCAqLwotCQl7IENSMzUsICAgMHgzZSB9LAotCQl7IENSNDEsICAgMHgyNCB9LCB7IENSNDQsICAgMHgzMiB9LAorCQl7IFpEX0NSMzUsICAgMHgzZSB9LAorCQl7IFpEX0NSNDEsICAgMHgyNCB9LCB7IFpEX0NSNDQsICAgMHgzMiB9LAogCQkvKiBmb3IgbmV3ZXN0ICgzcmQgY3V0KSBBTDIzMDAgKi8KLQkJeyBDUjQ2LCAgIDB4OTYgfSwKLQkJeyBDUjQ3LCAgIDB4MWUgfSwgeyBDUjc5LCAgIDB4NTggfSwgeyBDUjgwLCAgMHgzMCB9LAotCQl7IENSODEsICAgMHgzMCB9LCB7IENSODcsICAgMHgwYSB9LCB7IENSODksICAweDA0IH0sCi0JCXsgQ1I5MiwgICAweDBhIH0sIHsgQ1I5OSwgICAweDI4IH0sIHsgQ1IxMDAsIDB4MDAgfSwKLQkJeyBDUjEwMSwgIDB4MTMgfSwgeyBDUjEwMiwgIDB4MjcgfSwgeyBDUjEwNiwgMHgyNCB9LAotCQl7IENSMTA3LCAgMHgyYSB9LCB7IENSMTA5LCAgMHgwOSB9LCB7IENSMTEwLCAweDEzIH0sCi0JCXsgQ1IxMTEsICAweDFmIH0sIHsgQ1IxMTIsICAweDFmIH0sIHsgQ1IxMTMsIDB4MjcgfSwKLQkJeyBDUjExNCwgIDB4MjcgfSwKKwkJeyBaRF9DUjQ2LCAgIDB4OTYgfSwKKwkJeyBaRF9DUjQ3LCAgIDB4MWUgfSwgeyBaRF9DUjc5LCAgIDB4NTggfSwgeyBaRF9DUjgwLCAgMHgzMCB9LAorCQl7IFpEX0NSODEsICAgMHgzMCB9LCB7IFpEX0NSODcsICAgMHgwYSB9LCB7IFpEX0NSODksICAweDA0IH0sCisJCXsgWkRfQ1I5MiwgICAweDBhIH0sIHsgWkRfQ1I5OSwgICAweDI4IH0sIHsgWkRfQ1IxMDAsIDB4MDAgfSwKKwkJeyBaRF9DUjEwMSwgIDB4MTMgfSwgeyBaRF9DUjEwMiwgIDB4MjcgfSwgeyBaRF9DUjEwNiwgMHgyNCB9LAorCQl7IFpEX0NSMTA3LCAgMHgyYSB9LCB7IFpEX0NSMTA5LCAgMHgwOSB9LCB7IFpEX0NSMTEwLCAweDEzIH0sCisJCXsgWkRfQ1IxMTEsICAweDFmIH0sIHsgWkRfQ1IxMTIsICAweDFmIH0sIHsgWkRfQ1IxMTMsIDB4MjcgfSwKKwkJeyBaRF9DUjExNCwgIDB4MjcgfSwKIAkJLyogZm9yIG5ld2VzdCAoM3JkIGN1dCkgQUwyMzAwICovCi0JCXsgQ1IxMTUsICAweDI0IH0sCi0JCXsgQ1IxMTYsICAweDI0IH0sIHsgQ1IxMTcsICAweGY0IH0sIHsgQ1IxMTgsIDB4ZmMgfSwKLQkJeyBDUjExOSwgIDB4MTAgfSwgeyBDUjEyMCwgIDB4NGYgfSwgeyBDUjEyMSwgMHg3NyB9LAotCQl7IENSMTIyLCAgMHhlMCB9LCB7IENSMTM3LCAgMHg4OCB9LCB7IENSMjUyLCAweGZmIH0sCi0JCXsgQ1IyNTMsICAweGZmIH0sCisJCXsgWkRfQ1IxMTUsICAweDI0IH0sCisJCXsgWkRfQ1IxMTYsICAweDI0IH0sIHsgWkRfQ1IxMTcsICAweGY0IH0sIHsgWkRfQ1IxMTgsIDB4ZmMgfSwKKwkJeyBaRF9DUjExOSwgIDB4MTAgfSwgeyBaRF9DUjEyMCwgIDB4NGYgfSwgeyBaRF9DUjEyMSwgMHg3NyB9LAorCQl7IFpEX0NSMTIyLCAgMHhlMCB9LCB7IFpEX0NSMTM3LCAgMHg4OCB9LCB7IFpEX0NSMjUyLCAweGZmIH0sCisJCXsgWkRfQ1IyNTMsICAweGZmIH0sCiAJfTsKIAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgemRfaW9yZXExNiBpb3JlcXNfcGxsW10gPSB7CiAJCS8qIHNoZG5iKFBMTF9PTik9MCAqLwotCQl7IENSMjUxLCAgMHgyZiB9LAorCQl7IFpEX0NSMjUxLCAgMHgyZiB9LAogCQkvKiBzaGRuYihQTExfT04pPTEgKi8KLQkJeyBDUjI1MSwgIDB4M2YgfSwKLQkJeyBDUjEzOCwgIDB4MjggfSwgeyBDUjIwMywgIDB4MDYgfSwKKwkJeyBaRF9DUjI1MSwgIDB4M2YgfSwKKwkJeyBaRF9DUjEzOCwgIDB4MjggfSwgeyBaRF9DUjIwMywgIDB4MDYgfSwKIAl9OwogCiAJc3RhdGljIGNvbnN0IHUzMiBydjFbXSA9IHsKQEAgLTE2MSw3ICsxNjEsNyBAQAogCQkweDA4MDViNiwKIAkJMHgwMTE2ODcsCiAJCTB4MDAwNjg4LAotCQkweDA0MDNiOSwgLyogZXh0ZXJuYWwgY29udHJvbCBUWCBwb3dlciAoQ1IzMSkgKi8KKwkJMHgwNDAzYjksIC8qIGV4dGVybmFsIGNvbnRyb2wgVFggcG93ZXIgKFpEX0NSMzEpICovCiAJCTB4MDBkYmJhLAogCQkweDAwMDk5YiwKIAkJMHgwYmRmZmMsCkBAIC0yMjEsNTIgKzIyMSw1NCBAQAogCXN0cnVjdCB6ZF9jaGlwICpjaGlwID0gemRfcmZfdG9fY2hpcChyZik7CiAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzMVtdID0gewotCQl7IENSMTAsICAweDg5IH0sIHsgQ1IxNSwgIDB4MjAgfSwKLQkJeyBDUjE3LCAgMHgyQiB9LCAvKiBmb3IgbmV3ZXN0KDNyZCBjdXQpIEFMMjIzMCAqLwotCQl7IENSMjMsICAweDQwIH0sIHsgQ1IyNCwgIDB4MjAgfSwgeyBDUjI2LCAgMHg5MyB9LAotCQl7IENSMjgsICAweDNlIH0sIHsgQ1IyOSwgIDB4MDAgfSwKLQkJeyBDUjMzLCAgMHgyOCB9LCAvKiA1NjIxICovCi0JCXsgQ1IzNCwgIDB4MzAgfSwKLQkJeyBDUjM1LCAgMHgzZSB9LCAvKiBmb3IgbmV3ZXN0KDNyZCBjdXQpIEFMMjIzMCAqLwotCQl7IENSNDEsICAweDI0IH0sIHsgQ1I0NCwgIDB4MzIgfSwKLQkJeyBDUjQ2LCAgMHg5OSB9LCAvKiBmb3IgbmV3ZXN0KDNyZCBjdXQpIEFMMjIzMCAqLwotCQl7IENSNDcsICAweDFlIH0sCisJCXsgWkRfQ1IxMCwgIDB4ODkgfSwgeyBaRF9DUjE1LCAgMHgyMCB9LAorCQl7IFpEX0NSMTcsICAweDJCIH0sIC8qIGZvciBuZXdlc3QoM3JkIGN1dCkgQUwyMjMwICovCisJCXsgWkRfQ1IyMywgIDB4NDAgfSwgeyBaRF9DUjI0LCAgMHgyMCB9LCB7IFpEX0NSMjYsICAweDkzIH0sCisJCXsgWkRfQ1IyOCwgIDB4M2UgfSwgeyBaRF9DUjI5LCAgMHgwMCB9LAorCQl7IFpEX0NSMzMsICAweDI4IH0sIC8qIDU2MjEgKi8KKwkJeyBaRF9DUjM0LCAgMHgzMCB9LAorCQl7IFpEX0NSMzUsICAweDNlIH0sIC8qIGZvciBuZXdlc3QoM3JkIGN1dCkgQUwyMjMwICovCisJCXsgWkRfQ1I0MSwgIDB4MjQgfSwgeyBaRF9DUjQ0LCAgMHgzMiB9LAorCQl7IFpEX0NSNDYsICAweDk5IH0sIC8qIGZvciBuZXdlc3QoM3JkIGN1dCkgQUwyMjMwICovCisJCXsgWkRfQ1I0NywgIDB4MWUgfSwKIAogCQkvKiBaRDEyMTFCIDA1LjA2LjEwICovCi0JCXsgQ1I0OCwgIDB4MDYgfSwgeyBDUjQ5LCAgMHhmOSB9LCB7IENSNTEsICAweDAxIH0sCi0JCXsgQ1I1MiwgIDB4ODAgfSwgeyBDUjUzLCAgMHg3ZSB9LCB7IENSNjUsICAweDAwIH0sCi0JCXsgQ1I2NiwgIDB4MDAgfSwgeyBDUjY3LCAgMHgwMCB9LCB7IENSNjgsICAweDAwIH0sCi0JCXsgQ1I2OSwgIDB4MjggfSwKKwkJeyBaRF9DUjQ4LCAgMHgwNiB9LCB7IFpEX0NSNDksICAweGY5IH0sIHsgWkRfQ1I1MSwgIDB4MDEgfSwKKwkJeyBaRF9DUjUyLCAgMHg4MCB9LCB7IFpEX0NSNTMsICAweDdlIH0sIHsgWkRfQ1I2NSwgIDB4MDAgfSwKKwkJeyBaRF9DUjY2LCAgMHgwMCB9LCB7IFpEX0NSNjcsICAweDAwIH0sIHsgWkRfQ1I2OCwgIDB4MDAgfSwKKwkJeyBaRF9DUjY5LCAgMHgyOCB9LAogCi0JCXsgQ1I3OSwgIDB4NTggfSwgeyBDUjgwLCAgMHgzMCB9LCB7IENSODEsICAweDMwIH0sCi0JCXsgQ1I4NywgIDB4MGEgfSwgeyBDUjg5LCAgMHgwNCB9LAotCQl7IENSOTEsICAweDAwIH0sIC8qIDU2MjEgKi8KLQkJeyBDUjkyLCAgMHgwYSB9LAotCQl7IENSOTgsICAweDhkIH0sIC8qIDQ4MDQsICBmb3IgMTIxMiBuZXcgYWxnb3JpdGhtICovCi0JCXsgQ1I5OSwgIDB4MDAgfSwgLyogNTYyMSAqLwotCQl7IENSMTAxLCAweDEzIH0sIHsgQ1IxMDIsIDB4MjcgfSwKLQkJeyBDUjEwNiwgMHgyNCB9LCAvKiBmb3IgbmV3ZXN0KDNyZCBjdXQpIEFMMjIzMCAqLwotCQl7IENSMTA3LCAweDJhIH0sCi0JCXsgQ1IxMDksIDB4MTMgfSwgLyogNDgwNCwgZm9yIDEyMTIgbmV3IGFsZ29yaXRobSAqLwotCQl7IENSMTEwLCAweDFmIH0sIC8qIDQ4MDQsIGZvciAxMjEyIG5ldyBhbGdvcml0aG0gKi8KLQkJeyBDUjExMSwgMHgxZiB9LCB7IENSMTEyLCAweDFmIH0sIHsgQ1IxMTMsIDB4MjcgfSwKLQkJeyBDUjExNCwgMHgyNyB9LAotCQl7IENSMTE1LCAweDI2IH0sIC8qIDI0LT4yNiBhdCA0OTAyIGZvciBuZXdlc3QoM3JkIGN1dCkgQUwyMjMwICovCi0JCXsgQ1IxMTYsIDB4MjQgfSwKLQkJeyBDUjExNywgMHhmYSB9LCAvKiBmb3IgMTIxMWIgKi8KLQkJeyBDUjExOCwgMHhmYSB9LCAvKiBmb3IgMTIxMWIgKi8KLQkJeyBDUjExOSwgMHgxMCB9LAotCQl7IENSMTIwLCAweDRmIH0sCi0JCXsgQ1IxMjEsIDB4NmMgfSwgLyogZm9yIDEyMTFiICovCi0JCXsgQ1IxMjIsIDB4ZmMgfSwgLyogRTAtPkZDIGF0IDQ5MDIgKi8KLQkJeyBDUjEyMywgMHg1NyB9LCAvKiA1NjIzICovCi0JCXsgQ1IxMjUsIDB4YWQgfSwgLyogNDgwNCwgZm9yIDEyMTIgbmV3IGFsZ29yaXRobSAqLwotCQl7IENSMTI2LCAweDZjIH0sIC8qIDU2MTQgKi8KLQkJeyBDUjEyNywgMHgwMyB9LCAvKiA0ODA0LCBmb3IgMTIxMiBuZXcgYWxnb3JpdGhtICovCi0JCXsgQ1IxMzcsIDB4NTAgfSwgLyogNTYxNCAqLwotCQl7IENSMTM4LCAweGE4IH0sCi0JCXsgQ1IxNDQsIDB4YWMgfSwgLyogNTYyMSAqLwotCQl7IENSMTUwLCAweDBkIH0sIHsgQ1IyNTIsIDB4MzQgfSwgeyBDUjI1MywgMHgzNCB9LAorCQl7IFpEX0NSNzksICAweDU4IH0sIHsgWkRfQ1I4MCwgIDB4MzAgfSwgeyBaRF9DUjgxLCAgMHgzMCB9LAorCQl7IFpEX0NSODcsICAweDBhIH0sIHsgWkRfQ1I4OSwgIDB4MDQgfSwKKwkJeyBaRF9DUjkxLCAgMHgwMCB9LCAvKiA1NjIxICovCisJCXsgWkRfQ1I5MiwgIDB4MGEgfSwKKwkJeyBaRF9DUjk4LCAgMHg4ZCB9LCAvKiA0ODA0LCAgZm9yIDEyMTIgbmV3IGFsZ29yaXRobSAqLworCQl7IFpEX0NSOTksICAweDAwIH0sIC8qIDU2MjEgKi8KKwkJeyBaRF9DUjEwMSwgMHgxMyB9LCB7IFpEX0NSMTAyLCAweDI3IH0sCisJCXsgWkRfQ1IxMDYsIDB4MjQgfSwgLyogZm9yIG5ld2VzdCgzcmQgY3V0KSBBTDIyMzAgKi8KKwkJeyBaRF9DUjEwNywgMHgyYSB9LAorCQl7IFpEX0NSMTA5LCAweDEzIH0sIC8qIDQ4MDQsIGZvciAxMjEyIG5ldyBhbGdvcml0aG0gKi8KKwkJeyBaRF9DUjExMCwgMHgxZiB9LCAvKiA0ODA0LCBmb3IgMTIxMiBuZXcgYWxnb3JpdGhtICovCisJCXsgWkRfQ1IxMTEsIDB4MWYgfSwgeyBaRF9DUjExMiwgMHgxZiB9LCB7IFpEX0NSMTEzLCAweDI3IH0sCisJCXsgWkRfQ1IxMTQsIDB4MjcgfSwKKwkJeyBaRF9DUjExNSwgMHgyNiB9LCAvKiAyNC0+MjYgYXQgNDkwMiBmb3IgbmV3ZXN0KDNyZCBjdXQpCisJCQkJICAgICAqIEFMMjIzMAorCQkJCSAgICAgKi8KKwkJeyBaRF9DUjExNiwgMHgyNCB9LAorCQl7IFpEX0NSMTE3LCAweGZhIH0sIC8qIGZvciAxMjExYiAqLworCQl7IFpEX0NSMTE4LCAweGZhIH0sIC8qIGZvciAxMjExYiAqLworCQl7IFpEX0NSMTE5LCAweDEwIH0sCisJCXsgWkRfQ1IxMjAsIDB4NGYgfSwKKwkJeyBaRF9DUjEyMSwgMHg2YyB9LCAvKiBmb3IgMTIxMWIgKi8KKwkJeyBaRF9DUjEyMiwgMHhmYyB9LCAvKiBFMC0+RkMgYXQgNDkwMiAqLworCQl7IFpEX0NSMTIzLCAweDU3IH0sIC8qIDU2MjMgKi8KKwkJeyBaRF9DUjEyNSwgMHhhZCB9LCAvKiA0ODA0LCBmb3IgMTIxMiBuZXcgYWxnb3JpdGhtICovCisJCXsgWkRfQ1IxMjYsIDB4NmMgfSwgLyogNTYxNCAqLworCQl7IFpEX0NSMTI3LCAweDAzIH0sIC8qIDQ4MDQsIGZvciAxMjEyIG5ldyBhbGdvcml0aG0gKi8KKwkJeyBaRF9DUjEzNywgMHg1MCB9LCAvKiA1NjE0ICovCisJCXsgWkRfQ1IxMzgsIDB4YTggfSwKKwkJeyBaRF9DUjE0NCwgMHhhYyB9LCAvKiA1NjIxICovCisJCXsgWkRfQ1IxNTAsIDB4MGQgfSwgeyBaRF9DUjI1MiwgMHgzNCB9LCB7IFpEX0NSMjUzLCAweDM0IH0sCiAJfTsKIAogCXN0YXRpYyBjb25zdCB1MzIgcnYxW10gPSB7CkBAIC0yODQsNyArMjg2LDcgQEAKIAkJMHg2ZGEwMTAsIC8qIFJlZzYgdXBkYXRlIGZvciBNUCB2ZXJzaW8gKi8KIAkJMHhlMzYyODAsIC8qIE1vZGlmaWVkIGJ5IGp4aWFvIGZvciBCb3ItQ2hpbiBvbiAyMDA0LzA4LzAyICovCiAJCTB4MTE2MDAwLAotCQkweDlkYzAyMCwgLyogRXh0ZXJuYWwgY29udHJvbCBUWCBwb3dlciAoQ1IzMSkgKi8KKwkJMHg5ZGMwMjAsIC8qIEV4dGVybmFsIGNvbnRyb2wgVFggcG93ZXIgKFpEX0NSMzEpICovCiAJCTB4NWRkYjAwLCAvKiBSZWdBIHVwZGF0ZSBmb3IgTVAgdmVyc2lvbiAqLwogCQkweGQ5OTAwMCwgLyogUmVnQiB1cGRhdGUgZm9yIE1QIHZlcnNpb24gKi8KIAkJMHgzZmZiZDAsIC8qIFJlZ0MgdXBkYXRlIGZvciBNUCB2ZXJzaW9uICovCkBAIC0yOTUsOCArMjk3LDggQEAKIAl9OwogCiAJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxczJbXSA9IHsKLQkJeyBDUjI1MSwgMHgyZiB9LCAvKiBzaGRuYihQTExfT04pPTAgKi8KLQkJeyBDUjI1MSwgMHg3ZiB9LCAvKiBzaGRuYihQTExfT04pPTEgKi8KKwkJeyBaRF9DUjI1MSwgMHgyZiB9LCAvKiBzaGRuYihQTExfT04pPTAgKi8KKwkJeyBaRF9DUjI1MSwgMHg3ZiB9LCAvKiBzaGRuYihQTExfT04pPTEgKi8KIAl9OwogCiAJc3RhdGljIGNvbnN0IHUzMiBydjNbXSA9IHsKQEAgLTMwOCw3ICszMTAsNyBAQAogCiAJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxczNbXSA9IHsKIAkJLyogcmVsYXRlZCB0byA2TSBiYW5kIGVkZ2UgcGF0Y2hpbmcsIGhhcHBlbnMgdW5jb25kaXRpb25hbGx5ICovCi0JCXsgQ1IxMjgsIDB4MTQgfSwgeyBDUjEyOSwgMHgxMiB9LCB7IENSMTMwLCAweDEwIH0sCisJCXsgWkRfQ1IxMjgsIDB4MTQgfSwgeyBaRF9DUjEyOSwgMHgxMiB9LCB7IFpEX0NSMTMwLCAweDEwIH0sCiAJfTsKIAogCXIgPSB6ZF9pb3dyaXRlMTZhX2xvY2tlZChjaGlwLCB6ZDEyMTFiX2lvcmVxc19zaGFyZWRfMSwKQEAgLTM2MSw4ICszNjMsOCBAQAogCWNvbnN0IHUzMiAqcnYgPSB6ZDEyMTFfYWwyMjMwX3RhYmxlW2NoYW5uZWwtMV07CiAJc3RydWN0IHpkX2NoaXAgKmNoaXAgPSB6ZF9yZl90b19jaGlwKHJmKTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzW10gPSB7Ci0JCXsgQ1IxMzgsIDB4MjggfSwKLQkJeyBDUjIwMywgMHgwNiB9LAorCQl7IFpEX0NSMTM4LCAweDI4IH0sCisJCXsgWkRfQ1IyMDMsIDB4MDYgfSwKIAl9OwogCiAJciA9IHpkX3Jmd3JpdGV2X2xvY2tlZChjaGlwLCBydiwgMywgUkZfUlZfQklUUyk7CkBAIC0zOTMsOCArMzk1LDggQEAKIHsKIAlzdHJ1Y3QgemRfY2hpcCAqY2hpcCA9IHpkX3JmX3RvX2NoaXAocmYpOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgemRfaW9yZXExNiBpb3JlcXNbXSA9IHsKLQkJeyBDUjExLCAgMHgwMCB9LAotCQl7IENSMjUxLCAweDNmIH0sCisJCXsgWkRfQ1IxMSwgIDB4MDAgfSwKKwkJeyBaRF9DUjI1MSwgMHgzZiB9LAogCX07CiAKIAlyZXR1cm4gemRfaW93cml0ZTE2YV9sb2NrZWQoY2hpcCwgaW9yZXFzLCBBUlJBWV9TSVpFKGlvcmVxcykpOwpAQCAtNDA0LDggKzQwNiw4IEBACiB7CiAJc3RydWN0IHpkX2NoaXAgKmNoaXAgPSB6ZF9yZl90b19jaGlwKHJmKTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzW10gPSB7Ci0JCXsgQ1IxMSwgIDB4MDAgfSwKLQkJeyBDUjI1MSwgMHg3ZiB9LAorCQl7IFpEX0NSMTEsICAweDAwIH0sCisJCXsgWkRfQ1IyNTEsIDB4N2YgfSwKIAl9OwogCiAJcmV0dXJuIHpkX2lvd3JpdGUxNmFfbG9ja2VkKGNoaXAsIGlvcmVxcywgQVJSQVlfU0laRShpb3JlcXMpKTsKQEAgLTQxNSw4ICs0MTcsOCBAQAogewogCXN0cnVjdCB6ZF9jaGlwICpjaGlwID0gemRfcmZfdG9fY2hpcChyZik7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc1tdID0gewotCQl7IENSMTEsICAweDA0IH0sCi0JCXsgQ1IyNTEsIDB4MmYgfSwKKwkJeyBaRF9DUjExLCAgMHgwNCB9LAorCQl7IFpEX0NSMjUxLCAweDJmIH0sCiAJfTsKIAogCXJldHVybiB6ZF9pb3dyaXRlMTZhX2xvY2tlZChjaGlwLCBpb3JlcXMsIEFSUkFZX1NJWkUoaW9yZXFzKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9yZl9hbDcyMzBiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9yZl9hbDcyMzBiLmMKaW5kZXggNjUwOTVkNi4uMzg1YzY3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfcmZfYWw3MjMwYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3JmX2FsNzIzMGIuYwpAQCAtNjgsMTkgKzY4LDE5IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzX3N3W10gPSB7Ci0JeyBDUjEyOCwgMHgxNCB9LCB7IENSMTI5LCAweDEyIH0sIHsgQ1IxMzAsIDB4MTAgfSwKLQl7IENSMzgsICAweDM4IH0sIHsgQ1IxMzYsIDB4ZGYgfSwKKwl7IFpEX0NSMTI4LCAweDE0IH0sIHsgWkRfQ1IxMjksIDB4MTIgfSwgeyBaRF9DUjEzMCwgMHgxMCB9LAorCXsgWkRfQ1IzOCwgIDB4MzggfSwgeyBaRF9DUjEzNiwgMHhkZiB9LAogfTsKIAogc3RhdGljIGludCB6ZDEyMTFiX2FsNzIzMGJfZmluYWxpemUoc3RydWN0IHpkX2NoaXAgKmNoaXApCiB7CiAJaW50IHI7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc1tdID0gewotCQl7IENSODAsICAweDMwIH0sIHsgQ1I4MSwgIDB4MzAgfSwgeyBDUjc5LCAgMHg1OCB9LAotCQl7IENSMTIsICAweGYwIH0sIHsgQ1I3NywgIDB4MWIgfSwgeyBDUjc4LCAgMHg1OCB9LAotCQl7IENSMjAzLCAweDA0IH0sCisJCXsgWkRfQ1I4MCwgIDB4MzAgfSwgeyBaRF9DUjgxLCAgMHgzMCB9LCB7IFpEX0NSNzksICAweDU4IH0sCisJCXsgWkRfQ1IxMiwgIDB4ZjAgfSwgeyBaRF9DUjc3LCAgMHgxYiB9LCB7IFpEX0NSNzgsICAweDU4IH0sCisJCXsgWkRfQ1IyMDMsIDB4MDQgfSwKIAkJeyB9LAotCQl7IENSMjQwLCAweDgwIH0sCisJCXsgWkRfQ1IyNDAsIDB4ODAgfSwKIAl9OwogCiAJciA9IHpkX2lvd3JpdGUxNmFfbG9ja2VkKGNoaXAsIGlvcmVxcywgQVJSQVlfU0laRShpb3JlcXMpKTsKQEAgLTg5LDEyICs4OSwxMiBAQAogCiAJaWYgKGNoaXAtPm5ld19waHlfbGF5b3V0KSB7CiAJCS8qIGFudGVubmEgc2VsZWN0aW9uPyAqLwotCQlyID0gemRfaW93cml0ZTE2X2xvY2tlZChjaGlwLCAweGU1LCBDUjkpOworCQlyID0gemRfaW93cml0ZTE2X2xvY2tlZChjaGlwLCAweGU1LCBaRF9DUjkpOwogCQlpZiAocikKIAkJCXJldHVybiByOwogCX0KIAotCXJldHVybiB6ZF9pb3dyaXRlMTZfbG9ja2VkKGNoaXAsIDB4MDQsIENSMjAzKTsKKwlyZXR1cm4gemRfaW93cml0ZTE2X2xvY2tlZChjaGlwLCAweDA0LCBaRF9DUjIwMyk7CiB9CiAKIHN0YXRpYyBpbnQgemQxMjExX2FsNzIzMGJfaW5pdF9odyhzdHJ1Y3QgemRfcmYgKnJmKQpAQCAtMTA2LDY2ICsxMDYsNjYgQEAKIAkgKiBzcGVjaWZpZWQgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzXzFbXSA9IHsKIAkJLyogVGhpcyBvbmUgaXMgNzIzMC1zcGVjaWZpYywgYW5kIGhhcHBlbnMgYmVmb3JlIHRoZSByZXN0ICovCi0JCXsgQ1IyNDAsICAweDU3IH0sCisJCXsgWkRfQ1IyNDAsICAweDU3IH0sCiAJCXsgfSwKIAotCQl7IENSMTUsICAgMHgyMCB9LCB7IENSMjMsICAgMHg0MCB9LCB7IENSMjQsICAweDIwIH0sCi0JCXsgQ1IyNiwgICAweDExIH0sIHsgQ1IyOCwgICAweDNlIH0sIHsgQ1IyOSwgIDB4MDAgfSwKLQkJeyBDUjQ0LCAgIDB4MzMgfSwKKwkJeyBaRF9DUjE1LCAgIDB4MjAgfSwgeyBaRF9DUjIzLCAgIDB4NDAgfSwgeyBaRF9DUjI0LCAgMHgyMCB9LAorCQl7IFpEX0NSMjYsICAgMHgxMSB9LCB7IFpEX0NSMjgsICAgMHgzZSB9LCB7IFpEX0NSMjksICAweDAwIH0sCisJCXsgWkRfQ1I0NCwgICAweDMzIH0sCiAJCS8qIFRoaXMgdmFsdWUgaXMgZGlmZmVyZW50IGZvciA3MjMwICh3YXM6IDB4MmEpICovCi0JCXsgQ1IxMDYsICAweDIyIH0sCi0JCXsgQ1IxMDcsICAweDFhIH0sIHsgQ1IxMDksICAweDA5IH0sIHsgQ1IxMTAsICAweDI3IH0sCi0JCXsgQ1IxMTEsICAweDJiIH0sIHsgQ1IxMTIsICAweDJiIH0sIHsgQ1IxMTksICAweDBhIH0sCisJCXsgWkRfQ1IxMDYsICAweDIyIH0sCisJCXsgWkRfQ1IxMDcsICAweDFhIH0sIHsgWkRfQ1IxMDksICAweDA5IH0sIHsgWkRfQ1IxMTAsICAweDI3IH0sCisJCXsgWkRfQ1IxMTEsICAweDJiIH0sIHsgWkRfQ1IxMTIsICAweDJiIH0sIHsgWkRfQ1IxMTksICAweDBhIH0sCiAJCS8qIFRoaXMgaGFwcGVuZWQgZnVydGhlciBkb3duIGluIEFMMjIzMCwKIAkJICogYW5kIHRoZSB2YWx1ZSBjaGFuZ2VkICh3YXM6IDB4ZTApICovCi0JCXsgQ1IxMjIsICAweGZjIH0sCi0JCXsgQ1IxMCwgICAweDg5IH0sCisJCXsgWkRfQ1IxMjIsICAweGZjIH0sCisJCXsgWkRfQ1IxMCwgICAweDg5IH0sCiAJCS8qIGZvciBuZXdlc3QgKDNyZCBjdXQpIEFMMjMwMCAqLwotCQl7IENSMTcsICAgMHgyOCB9LAotCQl7IENSMjYsICAgMHg5MyB9LCB7IENSMzQsICAgMHgzMCB9LAorCQl7IFpEX0NSMTcsICAgMHgyOCB9LAorCQl7IFpEX0NSMjYsICAgMHg5MyB9LCB7IFpEX0NSMzQsICAgMHgzMCB9LAogCQkvKiBmb3IgbmV3ZXN0ICgzcmQgY3V0KSBBTDIzMDAgKi8KLQkJeyBDUjM1LCAgIDB4M2UgfSwKLQkJeyBDUjQxLCAgIDB4MjQgfSwgeyBDUjQ0LCAgIDB4MzIgfSwKKwkJeyBaRF9DUjM1LCAgIDB4M2UgfSwKKwkJeyBaRF9DUjQxLCAgIDB4MjQgfSwgeyBaRF9DUjQ0LCAgIDB4MzIgfSwKIAkJLyogZm9yIG5ld2VzdCAoM3JkIGN1dCkgQUwyMzAwICovCi0JCXsgQ1I0NiwgICAweDk2IH0sCi0JCXsgQ1I0NywgICAweDFlIH0sIHsgQ1I3OSwgICAweDU4IH0sIHsgQ1I4MCwgIDB4MzAgfSwKLQkJeyBDUjgxLCAgIDB4MzAgfSwgeyBDUjg3LCAgIDB4MGEgfSwgeyBDUjg5LCAgMHgwNCB9LAotCQl7IENSOTIsICAgMHgwYSB9LCB7IENSOTksICAgMHgyOCB9LAorCQl7IFpEX0NSNDYsICAgMHg5NiB9LAorCQl7IFpEX0NSNDcsICAgMHgxZSB9LCB7IFpEX0NSNzksICAgMHg1OCB9LCB7IFpEX0NSODAsICAweDMwIH0sCisJCXsgWkRfQ1I4MSwgICAweDMwIH0sIHsgWkRfQ1I4NywgICAweDBhIH0sIHsgWkRfQ1I4OSwgIDB4MDQgfSwKKwkJeyBaRF9DUjkyLCAgIDB4MGEgfSwgeyBaRF9DUjk5LCAgIDB4MjggfSwKIAkJLyogVGhpcyB2YWx1ZSBpcyBkaWZmZXJlbnQgZm9yIDcyMzAgKHdhczogMHgwMCkgKi8KLQkJeyBDUjEwMCwgIDB4MDIgfSwKLQkJeyBDUjEwMSwgIDB4MTMgfSwgeyBDUjEwMiwgIDB4MjcgfSwKKwkJeyBaRF9DUjEwMCwgIDB4MDIgfSwKKwkJeyBaRF9DUjEwMSwgIDB4MTMgfSwgeyBaRF9DUjEwMiwgIDB4MjcgfSwKIAkJLyogVGhpcyB2YWx1ZSBpcyBkaWZmZXJlbnQgZm9yIDcyMzAgKHdhczogMHgyNCkgKi8KLQkJeyBDUjEwNiwgIDB4MjIgfSwKKwkJeyBaRF9DUjEwNiwgIDB4MjIgfSwKIAkJLyogVGhpcyB2YWx1ZSBpcyBkaWZmZXJlbnQgZm9yIDcyMzAgKHdhczogMHgyYSkgKi8KLQkJeyBDUjEwNywgIDB4M2YgfSwKLQkJeyBDUjEwOSwgIDB4MDkgfSwKKwkJeyBaRF9DUjEwNywgIDB4M2YgfSwKKwkJeyBaRF9DUjEwOSwgIDB4MDkgfSwKIAkJLyogVGhpcyB2YWx1ZSBpcyBkaWZmZXJlbnQgZm9yIDcyMzAgKHdhczogMHgxMykgKi8KLQkJeyBDUjExMCwgIDB4MWYgfSwKLQkJeyBDUjExMSwgIDB4MWYgfSwgeyBDUjExMiwgIDB4MWYgfSwgeyBDUjExMywgMHgyNyB9LAotCQl7IENSMTE0LCAgMHgyNyB9LAorCQl7IFpEX0NSMTEwLCAgMHgxZiB9LAorCQl7IFpEX0NSMTExLCAgMHgxZiB9LCB7IFpEX0NSMTEyLCAgMHgxZiB9LCB7IFpEX0NSMTEzLCAweDI3IH0sCisJCXsgWkRfQ1IxMTQsICAweDI3IH0sCiAJCS8qIGZvciBuZXdlc3QgKDNyZCBjdXQpIEFMMjMwMCAqLwotCQl7IENSMTE1LCAgMHgyNCB9LAorCQl7IFpEX0NSMTE1LCAgMHgyNCB9LAogCQkvKiBUaGlzIHZhbHVlIGlzIGRpZmZlcmVudCBmb3IgNzIzMCAod2FzOiAweDI0KSAqLwotCQl7IENSMTE2LCAgMHgzZiB9LAorCQl7IFpEX0NSMTE2LCAgMHgzZiB9LAogCQkvKiBUaGlzIHZhbHVlIGlzIGRpZmZlcmVudCBmb3IgNzIzMCAod2FzOiAweGY0KSAqLwotCQl7IENSMTE3LCAgMHhmYSB9LAotCQl7IENSMTE4LCAgMHhmYyB9LCB7IENSMTE5LCAgMHgxMCB9LCB7IENSMTIwLCAweDRmIH0sCi0JCXsgQ1IxMjEsICAweDc3IH0sIHsgQ1IxMzcsICAweDg4IH0sCisJCXsgWkRfQ1IxMTcsICAweGZhIH0sCisJCXsgWkRfQ1IxMTgsICAweGZjIH0sIHsgWkRfQ1IxMTksICAweDEwIH0sIHsgWkRfQ1IxMjAsIDB4NGYgfSwKKwkJeyBaRF9DUjEyMSwgIDB4NzcgfSwgeyBaRF9DUjEzNywgIDB4ODggfSwKIAkJLyogVGhpcyBvbmUgaXMgNzIzMC1zcGVjaWZpYyAqLwotCQl7IENSMTM4LCAgMHhhOCB9LAorCQl7IFpEX0NSMTM4LCAgMHhhOCB9LAogCQkvKiBUaGlzIHZhbHVlIGlzIGRpZmZlcmVudCBmb3IgNzIzMCAod2FzOiAweGZmKSAqLwotCQl7IENSMjUyLCAgMHgzNCB9LAorCQl7IFpEX0NSMjUyLCAgMHgzNCB9LAogCQkvKiBUaGlzIHZhbHVlIGlzIGRpZmZlcmVudCBmb3IgNzIzMCAod2FzOiAweGZmKSAqLwotCQl7IENSMjUzLCAgMHgzNCB9LAorCQl7IFpEX0NSMjUzLCAgMHgzNCB9LAogCiAJCS8qIFBMTF9PRkYgKi8KLQkJeyBDUjI1MSwgMHgyZiB9LAorCQl7IFpEX0NSMjUxLCAweDJmIH0sCiAJfTsKIAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgemRfaW9yZXExNiBpb3JlcXNfMltdID0gewotCQl7IENSMjUxLCAweDNmIH0sIC8qIFBMTF9PTiAqLwotCQl7IENSMTI4LCAweDE0IH0sIHsgQ1IxMjksIDB4MTIgfSwgeyBDUjEzMCwgMHgxMCB9LAotCQl7IENSMzgsICAweDM4IH0sIHsgQ1IxMzYsIDB4ZGYgfSwKKwkJeyBaRF9DUjI1MSwgMHgzZiB9LCAvKiBQTExfT04gKi8KKwkJeyBaRF9DUjEyOCwgMHgxNCB9LCB7IFpEX0NSMTI5LCAweDEyIH0sIHsgWkRfQ1IxMzAsIDB4MTAgfSwKKwkJeyBaRF9DUjM4LCAgMHgzOCB9LCB7IFpEX0NSMTM2LCAweGRmIH0sCiAJfTsKIAogCXIgPSB6ZF9pb3dyaXRlMTZhX2xvY2tlZChjaGlwLCBpb3JlcXNfMSwgQVJSQVlfU0laRShpb3JlcXNfMSkpOwpAQCAtMTkyLDEwICsxOTIsMTAgQEAKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKLQlyID0gemRfaW93cml0ZTE2X2xvY2tlZChjaGlwLCAweDA2LCBDUjIwMyk7CisJciA9IHpkX2lvd3JpdGUxNl9sb2NrZWQoY2hpcCwgMHgwNiwgWkRfQ1IyMDMpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKLQlyID0gemRfaW93cml0ZTE2X2xvY2tlZChjaGlwLCAweDgwLCBDUjI0MCk7CisJciA9IHpkX2lvd3JpdGUxNl9sb2NrZWQoY2hpcCwgMHg4MCwgWkRfQ1IyNDApOwogCWlmIChyKQogCQlyZXR1cm4gcjsKIApAQCAtMjA4LDc5ICsyMDgsNzkgQEAKIAlzdHJ1Y3QgemRfY2hpcCAqY2hpcCA9IHpkX3JmX3RvX2NoaXAocmYpOwogCiAJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc18xW10gPSB7Ci0JCXsgQ1IyNDAsIDB4NTcgfSwgeyBDUjksICAgMHg5IH0sCisJCXsgWkRfQ1IyNDAsIDB4NTcgfSwgeyBaRF9DUjksICAgMHg5IH0sCiAJCXsgfSwKLQkJeyBDUjEwLCAgMHg4YiB9LCB7IENSMTUsICAweDIwIH0sCi0JCXsgQ1IxNywgIDB4MkIgfSwgLyogZm9yIG5ld2VzdCAoM3JkIGN1dCkgQUwyMjMwICovCi0JCXsgQ1IyMCwgIDB4MTAgfSwgLyogNE4yNS0+U3RvbmUgUmVxdWVzdCAqLwotCQl7IENSMjMsICAweDQwIH0sIHsgQ1IyNCwgIDB4MjAgfSwgeyBDUjI2LCAgMHg5MyB9LAotCQl7IENSMjgsICAweDNlIH0sIHsgQ1IyOSwgIDB4MDAgfSwKLQkJeyBDUjMzLCAgMHgyOCB9LCAvKiA1NjEzICovCi0JCXsgQ1IzNCwgIDB4MzAgfSwKLQkJeyBDUjM1LCAgMHgzZSB9LCAvKiBmb3IgbmV3ZXN0ICgzcmQgY3V0KSBBTDIyMzAgKi8KLQkJeyBDUjQxLCAgMHgyNCB9LCB7IENSNDQsICAweDMyIH0sCi0JCXsgQ1I0NiwgIDB4OTkgfSwgLyogZm9yIG5ld2VzdCAoM3JkIGN1dCkgQUwyMjMwICovCi0JCXsgQ1I0NywgIDB4MWUgfSwKKwkJeyBaRF9DUjEwLCAgMHg4YiB9LCB7IFpEX0NSMTUsICAweDIwIH0sCisJCXsgWkRfQ1IxNywgIDB4MkIgfSwgLyogZm9yIG5ld2VzdCAoM3JkIGN1dCkgQUwyMjMwICovCisJCXsgWkRfQ1IyMCwgIDB4MTAgfSwgLyogNE4yNS0+U3RvbmUgUmVxdWVzdCAqLworCQl7IFpEX0NSMjMsICAweDQwIH0sIHsgWkRfQ1IyNCwgIDB4MjAgfSwgeyBaRF9DUjI2LCAgMHg5MyB9LAorCQl7IFpEX0NSMjgsICAweDNlIH0sIHsgWkRfQ1IyOSwgIDB4MDAgfSwKKwkJeyBaRF9DUjMzLCAgMHgyOCB9LCAvKiA1NjEzICovCisJCXsgWkRfQ1IzNCwgIDB4MzAgfSwKKwkJeyBaRF9DUjM1LCAgMHgzZSB9LCAvKiBmb3IgbmV3ZXN0ICgzcmQgY3V0KSBBTDIyMzAgKi8KKwkJeyBaRF9DUjQxLCAgMHgyNCB9LCB7IFpEX0NSNDQsICAweDMyIH0sCisJCXsgWkRfQ1I0NiwgIDB4OTkgfSwgLyogZm9yIG5ld2VzdCAoM3JkIGN1dCkgQUwyMjMwICovCisJCXsgWkRfQ1I0NywgIDB4MWUgfSwKIAogCQkvKiBaRDEyMTUgNTYxMCAqLwotCQl7IENSNDgsICAweDAwIH0sIHsgQ1I0OSwgIDB4MDAgfSwgeyBDUjUxLCAgMHgwMSB9LAotCQl7IENSNTIsICAweDgwIH0sIHsgQ1I1MywgIDB4N2UgfSwgeyBDUjY1LCAgMHgwMCB9LAotCQl7IENSNjYsICAweDAwIH0sIHsgQ1I2NywgIDB4MDAgfSwgeyBDUjY4LCAgMHgwMCB9LAotCQl7IENSNjksICAweDI4IH0sCisJCXsgWkRfQ1I0OCwgIDB4MDAgfSwgeyBaRF9DUjQ5LCAgMHgwMCB9LCB7IFpEX0NSNTEsICAweDAxIH0sCisJCXsgWkRfQ1I1MiwgIDB4ODAgfSwgeyBaRF9DUjUzLCAgMHg3ZSB9LCB7IFpEX0NSNjUsICAweDAwIH0sCisJCXsgWkRfQ1I2NiwgIDB4MDAgfSwgeyBaRF9DUjY3LCAgMHgwMCB9LCB7IFpEX0NSNjgsICAweDAwIH0sCisJCXsgWkRfQ1I2OSwgIDB4MjggfSwKIAotCQl7IENSNzksICAweDU4IH0sIHsgQ1I4MCwgIDB4MzAgfSwgeyBDUjgxLCAgMHgzMCB9LAotCQl7IENSODcsICAweDBBIH0sIHsgQ1I4OSwgIDB4MDQgfSwKLQkJeyBDUjkwLCAgMHg1OCB9LCAvKiA1MTEyICovCi0JCXsgQ1I5MSwgIDB4MDAgfSwgLyogNTYxMyAqLwotCQl7IENSOTIsICAweDBhIH0sCi0JCXsgQ1I5OCwgIDB4OGQgfSwgLyogNDgwNCwgZm9yIDEyMTIgbmV3IGFsZ29yaXRobSAqLwotCQl7IENSOTksICAweDAwIH0sIHsgQ1IxMDAsIDB4MDIgfSwgeyBDUjEwMSwgMHgxMyB9LAotCQl7IENSMTAyLCAweDI3IH0sCi0JCXsgQ1IxMDYsIDB4MjAgfSwgLyogY2hhbmdlIHRvIDB4MjQgZm9yIEFMNzIzMEIgKi8KLQkJeyBDUjEwOSwgMHgxMyB9LCAvKiA0ODA0LCBmb3IgMTIxMiBuZXcgYWxnb3JpdGhtICovCi0JCXsgQ1IxMTIsIDB4MWYgfSwKKwkJeyBaRF9DUjc5LCAgMHg1OCB9LCB7IFpEX0NSODAsICAweDMwIH0sIHsgWkRfQ1I4MSwgIDB4MzAgfSwKKwkJeyBaRF9DUjg3LCAgMHgwQSB9LCB7IFpEX0NSODksICAweDA0IH0sCisJCXsgWkRfQ1I5MCwgIDB4NTggfSwgLyogNTExMiAqLworCQl7IFpEX0NSOTEsICAweDAwIH0sIC8qIDU2MTMgKi8KKwkJeyBaRF9DUjkyLCAgMHgwYSB9LAorCQl7IFpEX0NSOTgsICAweDhkIH0sIC8qIDQ4MDQsIGZvciAxMjEyIG5ldyBhbGdvcml0aG0gKi8KKwkJeyBaRF9DUjk5LCAgMHgwMCB9LCB7IFpEX0NSMTAwLCAweDAyIH0sIHsgWkRfQ1IxMDEsIDB4MTMgfSwKKwkJeyBaRF9DUjEwMiwgMHgyNyB9LAorCQl7IFpEX0NSMTA2LCAweDIwIH0sIC8qIGNoYW5nZSB0byAweDI0IGZvciBBTDcyMzBCICovCisJCXsgWkRfQ1IxMDksIDB4MTMgfSwgLyogNDgwNCwgZm9yIDEyMTIgbmV3IGFsZ29yaXRobSAqLworCQl7IFpEX0NSMTEyLCAweDFmIH0sCiAJfTsKIAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgemRfaW9yZXExNiBpb3JlcXNfbmV3X3BoeVtdID0gewotCQl7IENSMTA3LCAweDI4IH0sCi0JCXsgQ1IxMTAsIDB4MWYgfSwgLyogNTEyNywgMHgxMy0+MHgxZiAqLwotCQl7IENSMTExLCAweDFmIH0sIC8qIDB4MTMgdG8gMHgxZiBmb3IgQUw3MjMwQiAqLwotCQl7IENSMTE2LCAweDJhIH0sIHsgQ1IxMTgsIDB4ZmEgfSwgeyBDUjExOSwgMHgxMiB9LAotCQl7IENSMTIxLCAweDZjIH0sIC8qIDU2MTMgKi8KKwkJeyBaRF9DUjEwNywgMHgyOCB9LAorCQl7IFpEX0NSMTEwLCAweDFmIH0sIC8qIDUxMjcsIDB4MTMtPjB4MWYgKi8KKwkJeyBaRF9DUjExMSwgMHgxZiB9LCAvKiAweDEzIHRvIDB4MWYgZm9yIEFMNzIzMEIgKi8KKwkJeyBaRF9DUjExNiwgMHgyYSB9LCB7IFpEX0NSMTE4LCAweGZhIH0sIHsgWkRfQ1IxMTksIDB4MTIgfSwKKwkJeyBaRF9DUjEyMSwgMHg2YyB9LCAvKiA1NjEzICovCiAJfTsKIAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgemRfaW9yZXExNiBpb3JlcXNfb2xkX3BoeVtdID0gewotCQl7IENSMTA3LCAweDI0IH0sCi0JCXsgQ1IxMTAsIDB4MTMgfSwgLyogNTEyNywgMHgxMy0+MHgxZiAqLwotCQl7IENSMTExLCAweDEzIH0sIC8qIDB4MTMgdG8gMHgxZiBmb3IgQUw3MjMwQiAqLwotCQl7IENSMTE2LCAweDI0IH0sIHsgQ1IxMTgsIDB4ZmMgfSwgeyBDUjExOSwgMHgxMSB9LAotCQl7IENSMTIxLCAweDZhIH0sIC8qIDU2MTMgKi8KKwkJeyBaRF9DUjEwNywgMHgyNCB9LAorCQl7IFpEX0NSMTEwLCAweDEzIH0sIC8qIDUxMjcsIDB4MTMtPjB4MWYgKi8KKwkJeyBaRF9DUjExMSwgMHgxMyB9LCAvKiAweDEzIHRvIDB4MWYgZm9yIEFMNzIzMEIgKi8KKwkJeyBaRF9DUjExNiwgMHgyNCB9LCB7IFpEX0NSMTE4LCAweGZjIH0sIHsgWkRfQ1IxMTksIDB4MTEgfSwKKwkJeyBaRF9DUjEyMSwgMHg2YSB9LCAvKiA1NjEzICovCiAJfTsKIAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgemRfaW9yZXExNiBpb3JlcXNfMltdID0gewotCQl7IENSMTEzLCAweDI3IH0sIHsgQ1IxMTQsIDB4MjcgfSwgeyBDUjExNSwgMHgyNCB9LAotCQl7IENSMTE3LCAweGZhIH0sIHsgQ1IxMjAsIDB4NGYgfSwKLQkJeyBDUjEyMiwgMHhmYyB9LCAvKiBFMC0+RkNoIGF0IDQ5MDEgKi8KLQkJeyBDUjEyMywgMHg1NyB9LCAvKiA1NjEzICovCi0JCXsgQ1IxMjUsIDB4YWQgfSwgLyogNDgwNCwgZm9yIDEyMTIgbmV3IGFsZ29yaXRobSAqLwotCQl7IENSMTI2LCAweDZjIH0sIC8qIDU2MTMgKi8KLQkJeyBDUjEyNywgMHgwMyB9LCAvKiA0ODA0LCBmb3IgMTIxMiBuZXcgYWxnb3JpdGhtICovCi0JCXsgQ1IxMzAsIDB4MTAgfSwKLQkJeyBDUjEzMSwgMHgwMCB9LCAvKiA1MTEyICovCi0JCXsgQ1IxMzcsIDB4NTAgfSwgLyogNTYxMyAqLwotCQl7IENSMTM4LCAweGE4IH0sIC8qIDUxMTIgKi8KLQkJeyBDUjE0NCwgMHhhYyB9LCAvKiA1NjEzICovCi0JCXsgQ1IxNDgsIDB4NDAgfSwgLyogNTExMiAqLwotCQl7IENSMTQ5LCAweDQwIH0sIC8qIDRPMDcsIDUwLT40MCAqLwotCQl7IENSMTUwLCAweDFhIH0sIC8qIDUxMTIsIDBDLT4xQSAqLwotCQl7IENSMjUyLCAweDM0IH0sIHsgQ1IyNTMsIDB4MzQgfSwKLQkJeyBDUjI1MSwgMHgyZiB9LCAvKiBQTExfT0ZGICovCisJCXsgWkRfQ1IxMTMsIDB4MjcgfSwgeyBaRF9DUjExNCwgMHgyNyB9LCB7IFpEX0NSMTE1LCAweDI0IH0sCisJCXsgWkRfQ1IxMTcsIDB4ZmEgfSwgeyBaRF9DUjEyMCwgMHg0ZiB9LAorCQl7IFpEX0NSMTIyLCAweGZjIH0sIC8qIEUwLT5GQ2ggYXQgNDkwMSAqLworCQl7IFpEX0NSMTIzLCAweDU3IH0sIC8qIDU2MTMgKi8KKwkJeyBaRF9DUjEyNSwgMHhhZCB9LCAvKiA0ODA0LCBmb3IgMTIxMiBuZXcgYWxnb3JpdGhtICovCisJCXsgWkRfQ1IxMjYsIDB4NmMgfSwgLyogNTYxMyAqLworCQl7IFpEX0NSMTI3LCAweDAzIH0sIC8qIDQ4MDQsIGZvciAxMjEyIG5ldyBhbGdvcml0aG0gKi8KKwkJeyBaRF9DUjEzMCwgMHgxMCB9LAorCQl7IFpEX0NSMTMxLCAweDAwIH0sIC8qIDUxMTIgKi8KKwkJeyBaRF9DUjEzNywgMHg1MCB9LCAvKiA1NjEzICovCisJCXsgWkRfQ1IxMzgsIDB4YTggfSwgLyogNTExMiAqLworCQl7IFpEX0NSMTQ0LCAweGFjIH0sIC8qIDU2MTMgKi8KKwkJeyBaRF9DUjE0OCwgMHg0MCB9LCAvKiA1MTEyICovCisJCXsgWkRfQ1IxNDksIDB4NDAgfSwgLyogNE8wNywgNTAtPjQwICovCisJCXsgWkRfQ1IxNTAsIDB4MWEgfSwgLyogNTExMiwgMEMtPjFBICovCisJCXsgWkRfQ1IyNTIsIDB4MzQgfSwgeyBaRF9DUjI1MywgMHgzNCB9LAorCQl7IFpEX0NSMjUxLCAweDJmIH0sIC8qIFBMTF9PRkYgKi8KIAl9OwogCiAJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc18zW10gPSB7Ci0JCXsgQ1IyNTEsIDB4N2YgfSwgLyogUExMX09OICovCi0JCXsgQ1IxMjgsIDB4MTQgfSwgeyBDUjEyOSwgMHgxMiB9LCB7IENSMTMwLCAweDEwIH0sCi0JCXsgQ1IzOCwgIDB4MzggfSwgeyBDUjEzNiwgMHhkZiB9LAorCQl7IFpEX0NSMjUxLCAweDdmIH0sIC8qIFBMTF9PTiAqLworCQl7IFpEX0NSMTI4LCAweDE0IH0sIHsgWkRfQ1IxMjksIDB4MTIgfSwgeyBaRF9DUjEzMCwgMHgxMCB9LAorCQl7IFpEX0NSMzgsICAweDM4IH0sIHsgWkRfQ1IxMzYsIDB4ZGYgfSwKIAl9OwogCiAJciA9IHpkX2lvd3JpdGUxNmFfbG9ja2VkKGNoaXAsIGlvcmVxc18xLCBBUlJBWV9TSVpFKGlvcmVxc18xKSk7CkBAIC0zMzEsMTYgKzMzMSwxNiBAQAogCiAJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc1tdID0gewogCQkvKiBQTExfT04gKi8KLQkJeyBDUjI1MSwgMHgzZiB9LAotCQl7IENSMjAzLCAweDA2IH0sIHsgQ1IyNDAsIDB4MDggfSwKKwkJeyBaRF9DUjI1MSwgMHgzZiB9LAorCQl7IFpEX0NSMjAzLCAweDA2IH0sIHsgWkRfQ1IyNDAsIDB4MDggfSwKIAl9OwogCi0JciA9IHpkX2lvd3JpdGUxNl9sb2NrZWQoY2hpcCwgMHg1NywgQ1IyNDApOworCXIgPSB6ZF9pb3dyaXRlMTZfbG9ja2VkKGNoaXAsIDB4NTcsIFpEX0NSMjQwKTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKIAkvKiBQTExfT0ZGICovCi0JciA9IHpkX2lvd3JpdGUxNl9sb2NrZWQoY2hpcCwgMHgyZiwgQ1IyNTEpOworCXIgPSB6ZF9pb3dyaXRlMTZfbG9ja2VkKGNoaXAsIDB4MmYsIFpEX0NSMjUxKTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKQEAgLTM3NiwxNSArMzc2LDE1IEBACiAJY29uc3QgdTMyICpydiA9IGNoYW5fcnZbY2hhbm5lbC0xXTsKIAlzdHJ1Y3QgemRfY2hpcCAqY2hpcCA9IHpkX3JmX3RvX2NoaXAocmYpOwogCi0JciA9IHpkX2lvd3JpdGUxNl9sb2NrZWQoY2hpcCwgMHg1NywgQ1IyNDApOworCXIgPSB6ZF9pb3dyaXRlMTZfbG9ja2VkKGNoaXAsIDB4NTcsIFpEX0NSMjQwKTsKIAlpZiAocikKIAkJcmV0dXJuIHI7Ci0JciA9IHpkX2lvd3JpdGUxNl9sb2NrZWQoY2hpcCwgMHhlNCwgQ1I5KTsKKwlyID0gemRfaW93cml0ZTE2X2xvY2tlZChjaGlwLCAweGU0LCBaRF9DUjkpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKIAogCS8qIFBMTF9PRkYgKi8KLQlyID0gemRfaW93cml0ZTE2X2xvY2tlZChjaGlwLCAweDJmLCBDUjI1MSk7CisJciA9IHpkX2lvd3JpdGUxNl9sb2NrZWQoY2hpcCwgMHgyZiwgWkRfQ1IyNTEpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKIAlyID0gemRfcmZ3cml0ZXZfY3JfbG9ja2VkKGNoaXAsIHN0ZF9ydiwgQVJSQVlfU0laRShzdGRfcnYpKTsKQEAgLTQxMCw3ICs0MTAsNyBAQAogCWlmIChyKQogCQlyZXR1cm4gcjsKIAotCXIgPSB6ZF9pb3dyaXRlMTZfbG9ja2VkKGNoaXAsIDB4N2YsIENSMjUxKTsKKwlyID0gemRfaW93cml0ZTE2X2xvY2tlZChjaGlwLCAweDdmLCBaRF9DUjI1MSk7CiAJaWYgKHIpCiAJCXJldHVybiByOwogCkBAIC00MjEsOCArNDIxLDggQEAKIHsKIAlzdHJ1Y3QgemRfY2hpcCAqY2hpcCA9IHpkX3JmX3RvX2NoaXAocmYpOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgemRfaW9yZXExNiBpb3JlcXNbXSA9IHsKLQkJeyBDUjExLCAgMHgwMCB9LAotCQl7IENSMjUxLCAweDNmIH0sCisJCXsgWkRfQ1IxMSwgIDB4MDAgfSwKKwkJeyBaRF9DUjI1MSwgMHgzZiB9LAogCX07CiAKIAlyZXR1cm4gemRfaW93cml0ZTE2YV9sb2NrZWQoY2hpcCwgaW9yZXFzLCBBUlJBWV9TSVpFKGlvcmVxcykpOwpAQCAtNDMyLDggKzQzMiw4IEBACiB7CiAJc3RydWN0IHpkX2NoaXAgKmNoaXAgPSB6ZF9yZl90b19jaGlwKHJmKTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzW10gPSB7Ci0JCXsgQ1IxMSwgIDB4MDAgfSwKLQkJeyBDUjI1MSwgMHg3ZiB9LAorCQl7IFpEX0NSMTEsICAweDAwIH0sCisJCXsgWkRfQ1IyNTEsIDB4N2YgfSwKIAl9OwogCiAJcmV0dXJuIHpkX2lvd3JpdGUxNmFfbG9ja2VkKGNoaXAsIGlvcmVxcywgQVJSQVlfU0laRShpb3JlcXMpKTsKQEAgLTQ0Myw4ICs0NDMsOCBAQAogewogCXN0cnVjdCB6ZF9jaGlwICpjaGlwID0gemRfcmZfdG9fY2hpcChyZik7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc1tdID0gewotCQl7IENSMTEsICAweDA0IH0sCi0JCXsgQ1IyNTEsIDB4MmYgfSwKKwkJeyBaRF9DUjExLCAgMHgwNCB9LAorCQl7IFpEX0NSMjUxLCAweDJmIH0sCiAJfTsKIAogCXJldHVybiB6ZF9pb3dyaXRlMTZhX2xvY2tlZChjaGlwLCBpb3JlcXMsIEFSUkFZX1NJWkUoaW9yZXFzKSk7CkBAIC00NTYsNyArNDU2LDcgQEAKIHsKIAlzdHJ1Y3QgemRfY2hpcCAqY2hpcCA9IHpkX3JmX3RvX2NoaXAocmYpOwogCXN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc1tdID0gewotCQl7IENSMTI4LCAweDE0IH0sIHsgQ1IxMjksIDB4MTIgfSwKKwkJeyBaRF9DUjEyOCwgMHgxNCB9LCB7IFpEX0NSMTI5LCAweDEyIH0sCiAJfTsKIAogCS8qIEZJWE1FOiBDaGFubmVsIDExIGlzIG5vdCB0aGUgZWRnZSBmb3IgYWxsIHJlZ3VsYXRvcnkgZG9tYWlucy4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3JmX3JmMjk1OS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfcmZfcmYyOTU5LmMKaW5kZXggZTM2MTE3NC4uNzg0ZDljYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfcmZfcmYyOTU5LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfcmZfcmYyOTU5LmMKQEAgLTE1Miw0NCArMTUyLDQ0IEBACiAJc3RydWN0IHpkX2NoaXAgKmNoaXAgPSB6ZF9yZl90b19jaGlwKHJmKTsKIAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgemRfaW9yZXExNiBpb3JlcXNbXSA9IHsKLQkJeyBDUjIsICAgMHgxRSB9LCB7IENSOSwgICAweDIwIH0sIHsgQ1IxMCwgIDB4ODkgfSwKLQkJeyBDUjExLCAgMHgwMCB9LCB7IENSMTUsICAweEQwIH0sIHsgQ1IxNywgIDB4NjggfSwKLQkJeyBDUjE5LCAgMHg0YSB9LCB7IENSMjAsICAweDBjIH0sIHsgQ1IyMSwgIDB4MEUgfSwKLQkJeyBDUjIzLCAgMHg0OCB9LAorCQl7IFpEX0NSMiwgICAweDFFIH0sIHsgWkRfQ1I5LCAgIDB4MjAgfSwgeyBaRF9DUjEwLCAgMHg4OSB9LAorCQl7IFpEX0NSMTEsICAweDAwIH0sIHsgWkRfQ1IxNSwgIDB4RDAgfSwgeyBaRF9DUjE3LCAgMHg2OCB9LAorCQl7IFpEX0NSMTksICAweDRhIH0sIHsgWkRfQ1IyMCwgIDB4MGMgfSwgeyBaRF9DUjIxLCAgMHgwRSB9LAorCQl7IFpEX0NSMjMsICAweDQ4IH0sCiAJCS8qIG5vcm1hbCBzaXplIGZvciBjY2EgdGhyZXNob2xkICovCi0JCXsgQ1IyNCwgIDB4MTQgfSwKLQkJLyogeyBDUjI0LCAgMHgyMCB9LCAqLwotCQl7IENSMjYsICAweDkwIH0sIHsgQ1IyNywgIDB4MzAgfSwgeyBDUjI5LCAgMHgyMCB9LAotCQl7IENSMzEsICAweGIyIH0sIHsgQ1IzMiwgIDB4NDMgfSwgeyBDUjMzLCAgMHgyOCB9LAotCQl7IENSMzgsICAweDMwIH0sIHsgQ1IzNCwgIDB4MGYgfSwgeyBDUjM1LCAgMHhGMCB9LAotCQl7IENSNDEsICAweDJhIH0sIHsgQ1I0NiwgIDB4N0YgfSwgeyBDUjQ3LCAgMHgxRSB9LAotCQl7IENSNTEsICAweGM1IH0sIHsgQ1I1MiwgIDB4YzUgfSwgeyBDUjUzLCAgMHhjNSB9LAotCQl7IENSNzksICAweDU4IH0sIHsgQ1I4MCwgIDB4MzAgfSwgeyBDUjgxLCAgMHgzMCB9LAotCQl7IENSODIsICAweDAwIH0sIHsgQ1I4MywgIDB4MjQgfSwgeyBDUjg0LCAgMHgwNCB9LAotCQl7IENSODUsICAweDAwIH0sIHsgQ1I4NiwgIDB4MTAgfSwgeyBDUjg3LCAgMHgyQSB9LAotCQl7IENSODgsICAweDEwIH0sIHsgQ1I4OSwgIDB4MjQgfSwgeyBDUjkwLCAgMHgxOCB9LAotCQkvKiB7IENSOTEsICAweDE4IH0sICovCisJCXsgWkRfQ1IyNCwgIDB4MTQgfSwKKwkJLyogeyBaRF9DUjI0LCAgMHgyMCB9LCAqLworCQl7IFpEX0NSMjYsICAweDkwIH0sIHsgWkRfQ1IyNywgIDB4MzAgfSwgeyBaRF9DUjI5LCAgMHgyMCB9LAorCQl7IFpEX0NSMzEsICAweGIyIH0sIHsgWkRfQ1IzMiwgIDB4NDMgfSwgeyBaRF9DUjMzLCAgMHgyOCB9LAorCQl7IFpEX0NSMzgsICAweDMwIH0sIHsgWkRfQ1IzNCwgIDB4MGYgfSwgeyBaRF9DUjM1LCAgMHhGMCB9LAorCQl7IFpEX0NSNDEsICAweDJhIH0sIHsgWkRfQ1I0NiwgIDB4N0YgfSwgeyBaRF9DUjQ3LCAgMHgxRSB9LAorCQl7IFpEX0NSNTEsICAweGM1IH0sIHsgWkRfQ1I1MiwgIDB4YzUgfSwgeyBaRF9DUjUzLCAgMHhjNSB9LAorCQl7IFpEX0NSNzksICAweDU4IH0sIHsgWkRfQ1I4MCwgIDB4MzAgfSwgeyBaRF9DUjgxLCAgMHgzMCB9LAorCQl7IFpEX0NSODIsICAweDAwIH0sIHsgWkRfQ1I4MywgIDB4MjQgfSwgeyBaRF9DUjg0LCAgMHgwNCB9LAorCQl7IFpEX0NSODUsICAweDAwIH0sIHsgWkRfQ1I4NiwgIDB4MTAgfSwgeyBaRF9DUjg3LCAgMHgyQSB9LAorCQl7IFpEX0NSODgsICAweDEwIH0sIHsgWkRfQ1I4OSwgIDB4MjQgfSwgeyBaRF9DUjkwLCAgMHgxOCB9LAorCQkvKiB7IFpEX0NSOTEsICAweDE4IH0sICovCiAJCS8qIHNob3VsZCBzb2x2ZSBjb250aW51b3VzIENUUyBmcmFtZSBwcm9ibGVtcyAqLwotCQl7IENSOTEsICAweDAwIH0sCi0JCXsgQ1I5MiwgIDB4MGEgfSwgeyBDUjkzLCAgMHgwMCB9LCB7IENSOTQsICAweDAxIH0sCi0JCXsgQ1I5NSwgIDB4MDAgfSwgeyBDUjk2LCAgMHg0MCB9LCB7IENSOTcsICAweDM3IH0sCi0JCXsgQ1I5OCwgIDB4MDUgfSwgeyBDUjk5LCAgMHgyOCB9LCB7IENSMTAwLCAweDAwIH0sCi0JCXsgQ1IxMDEsIDB4MTMgfSwgeyBDUjEwMiwgMHgyNyB9LCB7IENSMTAzLCAweDI3IH0sCi0JCXsgQ1IxMDQsIDB4MTggfSwgeyBDUjEwNSwgMHgxMiB9LAorCQl7IFpEX0NSOTEsICAweDAwIH0sCisJCXsgWkRfQ1I5MiwgIDB4MGEgfSwgeyBaRF9DUjkzLCAgMHgwMCB9LCB7IFpEX0NSOTQsICAweDAxIH0sCisJCXsgWkRfQ1I5NSwgIDB4MDAgfSwgeyBaRF9DUjk2LCAgMHg0MCB9LCB7IFpEX0NSOTcsICAweDM3IH0sCisJCXsgWkRfQ1I5OCwgIDB4MDUgfSwgeyBaRF9DUjk5LCAgMHgyOCB9LCB7IFpEX0NSMTAwLCAweDAwIH0sCisJCXsgWkRfQ1IxMDEsIDB4MTMgfSwgeyBaRF9DUjEwMiwgMHgyNyB9LCB7IFpEX0NSMTAzLCAweDI3IH0sCisJCXsgWkRfQ1IxMDQsIDB4MTggfSwgeyBaRF9DUjEwNSwgMHgxMiB9LAogCQkvKiBub3JtYWwgc2l6ZSAqLwotCQl7IENSMTA2LCAweDFhIH0sCi0JCS8qIHsgQ1IxMDYsIDB4MjIgfSwgKi8KLQkJeyBDUjEwNywgMHgyNCB9LCB7IENSMTA4LCAweDBhIH0sIHsgQ1IxMDksIDB4MTMgfSwKLQkJeyBDUjExMCwgMHgyRiB9LCB7IENSMTExLCAweDI3IH0sIHsgQ1IxMTIsIDB4MjcgfSwKLQkJeyBDUjExMywgMHgyNyB9LCB7IENSMTE0LCAweDI3IH0sIHsgQ1IxMTUsIDB4NDAgfSwKLQkJeyBDUjExNiwgMHg0MCB9LCB7IENSMTE3LCAweEYwIH0sIHsgQ1IxMTgsIDB4RjAgfSwKLQkJeyBDUjExOSwgMHgxNiB9LAorCQl7IFpEX0NSMTA2LCAweDFhIH0sCisJCS8qIHsgWkRfQ1IxMDYsIDB4MjIgfSwgKi8KKwkJeyBaRF9DUjEwNywgMHgyNCB9LCB7IFpEX0NSMTA4LCAweDBhIH0sIHsgWkRfQ1IxMDksIDB4MTMgfSwKKwkJeyBaRF9DUjExMCwgMHgyRiB9LCB7IFpEX0NSMTExLCAweDI3IH0sIHsgWkRfQ1IxMTIsIDB4MjcgfSwKKwkJeyBaRF9DUjExMywgMHgyNyB9LCB7IFpEX0NSMTE0LCAweDI3IH0sIHsgWkRfQ1IxMTUsIDB4NDAgfSwKKwkJeyBaRF9DUjExNiwgMHg0MCB9LCB7IFpEX0NSMTE3LCAweEYwIH0sIHsgWkRfQ1IxMTgsIDB4RjAgfSwKKwkJeyBaRF9DUjExOSwgMHgxNiB9LAogCQkvKiBubyBUWCBjb250aW51YXRpb24gKi8KLQkJeyBDUjEyMiwgMHgwMCB9LAotCQkvKiB7IENSMTIyLCAweGZmIH0sICovCi0JCXsgQ1IxMjcsIDB4MDMgfSwgeyBDUjEzMSwgMHgwOCB9LCB7IENSMTM4LCAweDI4IH0sCi0JCXsgQ1IxNDgsIDB4NDQgfSwgeyBDUjE1MCwgMHgxMCB9LCB7IENSMTY5LCAweEJCIH0sCi0JCXsgQ1IxNzAsIDB4QkIgfSwKKwkJeyBaRF9DUjEyMiwgMHgwMCB9LAorCQkvKiB7IFpEX0NSMTIyLCAweGZmIH0sICovCisJCXsgWkRfQ1IxMjcsIDB4MDMgfSwgeyBaRF9DUjEzMSwgMHgwOCB9LCB7IFpEX0NSMTM4LCAweDI4IH0sCisJCXsgWkRfQ1IxNDgsIDB4NDQgfSwgeyBaRF9DUjE1MCwgMHgxMCB9LCB7IFpEX0NSMTY5LCAweEJCIH0sCisJCXsgWkRfQ1IxNzAsIDB4QkIgfSwKIAl9OwogCiAJc3RhdGljIGNvbnN0IHUzMiBydltdID0gewpAQCAtMjEwLDcgKzIxMCw3IEBACiAJCSAqLwogCQkweDI5NDEyOCwgLyogaW50ZXJuYWwgcG93ZXIgKi8KIAkJLyogMHgyODI1MmMsICovIC8qIEV4dGVybmFsIGNvbnRyb2wgVFggcG93ZXIgKi8KLQkJLyogQ1IzMV9DQ0ssIENSNTFfNi0zNk0sIENSNTJfNDhNLCBDUjUzXzU0TSAqLworCQkvKiBaRF9DUjMxX0NDSywgWkRfQ1I1MV82LTM2TSwgWkRfQ1I1Ml80OE0sIFpEX0NSNTNfNTRNICovCiAJCTB4MmMwMDAwLAogCQkweDMwMDAwMCwKIAkJMHgzNDAwMDAsICAvKiBSRUcxMygweEQpICovCkBAIC0yNDUsOCArMjQ1LDggQEAKIHN0YXRpYyBpbnQgcmYyOTU5X3N3aXRjaF9yYWRpb19vbihzdHJ1Y3QgemRfcmYgKnJmKQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgemRfaW9yZXExNiBpb3JlcXNbXSA9IHsKLQkJeyBDUjEwLCAweDg5IH0sCi0JCXsgQ1IxMSwgMHgwMCB9LAorCQl7IFpEX0NSMTAsIDB4ODkgfSwKKwkJeyBaRF9DUjExLCAweDAwIH0sCiAJfTsKIAlzdHJ1Y3QgemRfY2hpcCAqY2hpcCA9IHpkX3JmX3RvX2NoaXAocmYpOwogCkBAIC0yNTYsOCArMjU2LDggQEAKIHN0YXRpYyBpbnQgcmYyOTU5X3N3aXRjaF9yYWRpb19vZmYoc3RydWN0IHpkX3JmICpyZikKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzW10gPSB7Ci0JCXsgQ1IxMCwgMHgxNSB9LAotCQl7IENSMTEsIDB4ODEgfSwKKwkJeyBaRF9DUjEwLCAweDE1IH0sCisJCXsgWkRfQ1IxMSwgMHg4MSB9LAogCX07CiAJc3RydWN0IHpkX2NoaXAgKmNoaXAgPSB6ZF9yZl90b19jaGlwKHJmKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfcmZfdXcyNDUzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9yZl91dzI0NTMuYwppbmRleCBiYTBhMGNjLi5jNGQzMjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9yZl91dzI0NTMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9yZl91dzI0NTMuYwpAQCAtMzE0LDQyICszMTQsNDQgQEAKIAlzdHJ1Y3QgemRfY2hpcCAqY2hpcCA9IHpkX3JmX3RvX2NoaXAocmYpOwogCiAJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc1tdID0gewotCQl7IENSMTAsICAweDg5IH0sIHsgQ1IxNSwgIDB4MjAgfSwKLQkJeyBDUjE3LCAgMHgyOCB9LCAvKiA2MTEyIG5vIGNoYW5nZSAqLwotCQl7IENSMjMsICAweDM4IH0sIHsgQ1IyNCwgIDB4MjAgfSwgeyBDUjI2LCAgMHg5MyB9LAotCQl7IENSMjcsICAweDE1IH0sIHsgQ1IyOCwgIDB4M2UgfSwgeyBDUjI5LCAgMHgwMCB9LAotCQl7IENSMzMsICAweDI4IH0sIHsgQ1IzNCwgIDB4MzAgfSwKLQkJeyBDUjM1LCAgMHg0MyB9LCAvKiA2MTEyIDNlLT40MyAqLwotCQl7IENSNDEsICAweDI0IH0sIHsgQ1I0NCwgIDB4MzIgfSwKLQkJeyBDUjQ2LCAgMHg5MiB9LCAvKiA2MTEyIDk2LT45MiAqLwotCQl7IENSNDcsICAweDFlIH0sCi0JCXsgQ1I0OCwgIDB4MDQgfSwgLyogNTYwMiBSb2dlciAqLwotCQl7IENSNDksICAweGZhIH0sIHsgQ1I3OSwgIDB4NTggfSwgeyBDUjgwLCAgMHgzMCB9LAotCQl7IENSODEsICAweDMwIH0sIHsgQ1I4NywgIDB4MGEgfSwgeyBDUjg5LCAgMHgwNCB9LAotCQl7IENSOTEsICAweDAwIH0sIHsgQ1I5MiwgIDB4MGEgfSwgeyBDUjk4LCAgMHg4ZCB9LAotCQl7IENSOTksICAweDI4IH0sIHsgQ1IxMDAsIDB4MDIgfSwKLQkJeyBDUjEwMSwgMHgwOSB9LCAvKiA2MTEyIDEzLT4xZiA2MjIwIDFmLT4xMyA2NDA3IDEzLT45ICovCi0JCXsgQ1IxMDIsIDB4MjcgfSwKLQkJeyBDUjEwNiwgMHgxYyB9LCAvKiA1ZDA3IDUxMTIgMWYtPjFjIDYyMjAgMWMtPjFmIDYyMjEgMWYtPjFjICovCi0JCXsgQ1IxMDcsIDB4MWMgfSwgLyogNjIyMCAxYy0+MWEgNTIyMSAxYS0+MWMgKi8KLQkJeyBDUjEwOSwgMHgxMyB9LAotCQl7IENSMTEwLCAweDFmIH0sIC8qIDYxMTIgMTMtPjFmIDYyMjEgMWYtPjEzIDY0MDcgMTMtPjB4MDkgKi8KLQkJeyBDUjExMSwgMHgxMyB9LCB7IENSMTEyLCAweDFmIH0sIHsgQ1IxMTMsIDB4MjcgfSwKLQkJeyBDUjExNCwgMHgyMyB9LCAvKiA2MjIxIDI3LT4yMyAqLwotCQl7IENSMTE1LCAweDI0IH0sIC8qIDYxMTIgMjQtPjFjIDYyMjAgMWMtPjI0ICovCi0JCXsgQ1IxMTYsIDB4MjQgfSwgLyogNjIyMCAxYy0+MjQgKi8KLQkJeyBDUjExNywgMHhmYSB9LCAvKiA2MTEyIGZhLT5mOCA2MjIwIGY4LT5mNCA2MjIwIGY0LT5mYSAqLwotCQl7IENSMTE4LCAweGYwIH0sIC8qIDVkMDcgNjExMiBmMC0+ZjIgNjIyMCBmMi0+ZjAgKi8KLQkJeyBDUjExOSwgMHgxYSB9LCAvKiA2MTEyIDFhLT4xMCA2MjIwIDEwLT4xNCA2MjIwIDE0LT4xYSAqLwotCQl7IENSMTIwLCAweDRmIH0sCi0JCXsgQ1IxMjEsIDB4MWYgfSwgLyogNjIyMCA0Zi0+MWYgKi8KLQkJeyBDUjEyMiwgMHhmMCB9LCB7IENSMTIzLCAweDU3IH0sIHsgQ1IxMjUsIDB4YWQgfSwKLQkJeyBDUjEyNiwgMHg2YyB9LCB7IENSMTI3LCAweDAzIH0sCi0JCXsgQ1IxMjgsIDB4MTQgfSwgLyogNjMwMiAxMi0+MTEgKi8KLQkJeyBDUjEyOSwgMHgxMiB9LCAvKiA2MzAxIDEwLT4wZiAqLwotCQl7IENSMTMwLCAweDEwIH0sIHsgQ1IxMzcsIDB4NTAgfSwgeyBDUjEzOCwgMHhhOCB9LAotCQl7IENSMTQ0LCAweGFjIH0sIHsgQ1IxNDYsIDB4MjAgfSwgeyBDUjI1MiwgMHhmZiB9LAotCQl7IENSMjUzLCAweGZmIH0sCisJCXsgWkRfQ1IxMCwgIDB4ODkgfSwgeyBaRF9DUjE1LCAgMHgyMCB9LAorCQl7IFpEX0NSMTcsICAweDI4IH0sIC8qIDYxMTIgbm8gY2hhbmdlICovCisJCXsgWkRfQ1IyMywgIDB4MzggfSwgeyBaRF9DUjI0LCAgMHgyMCB9LCB7IFpEX0NSMjYsICAweDkzIH0sCisJCXsgWkRfQ1IyNywgIDB4MTUgfSwgeyBaRF9DUjI4LCAgMHgzZSB9LCB7IFpEX0NSMjksICAweDAwIH0sCisJCXsgWkRfQ1IzMywgIDB4MjggfSwgeyBaRF9DUjM0LCAgMHgzMCB9LAorCQl7IFpEX0NSMzUsICAweDQzIH0sIC8qIDYxMTIgM2UtPjQzICovCisJCXsgWkRfQ1I0MSwgIDB4MjQgfSwgeyBaRF9DUjQ0LCAgMHgzMiB9LAorCQl7IFpEX0NSNDYsICAweDkyIH0sIC8qIDYxMTIgOTYtPjkyICovCisJCXsgWkRfQ1I0NywgIDB4MWUgfSwKKwkJeyBaRF9DUjQ4LCAgMHgwNCB9LCAvKiA1NjAyIFJvZ2VyICovCisJCXsgWkRfQ1I0OSwgIDB4ZmEgfSwgeyBaRF9DUjc5LCAgMHg1OCB9LCB7IFpEX0NSODAsICAweDMwIH0sCisJCXsgWkRfQ1I4MSwgIDB4MzAgfSwgeyBaRF9DUjg3LCAgMHgwYSB9LCB7IFpEX0NSODksICAweDA0IH0sCisJCXsgWkRfQ1I5MSwgIDB4MDAgfSwgeyBaRF9DUjkyLCAgMHgwYSB9LCB7IFpEX0NSOTgsICAweDhkIH0sCisJCXsgWkRfQ1I5OSwgIDB4MjggfSwgeyBaRF9DUjEwMCwgMHgwMiB9LAorCQl7IFpEX0NSMTAxLCAweDA5IH0sIC8qIDYxMTIgMTMtPjFmIDYyMjAgMWYtPjEzIDY0MDcgMTMtPjkgKi8KKwkJeyBaRF9DUjEwMiwgMHgyNyB9LAorCQl7IFpEX0NSMTA2LCAweDFjIH0sIC8qIDVkMDcgNTExMiAxZi0+MWMgNjIyMCAxYy0+MWYKKwkJCQkgICAgICogNjIyMSAxZi0+MWMKKwkJCQkgICAgICovCisJCXsgWkRfQ1IxMDcsIDB4MWMgfSwgLyogNjIyMCAxYy0+MWEgNTIyMSAxYS0+MWMgKi8KKwkJeyBaRF9DUjEwOSwgMHgxMyB9LAorCQl7IFpEX0NSMTEwLCAweDFmIH0sIC8qIDYxMTIgMTMtPjFmIDYyMjEgMWYtPjEzIDY0MDcgMTMtPjB4MDkgKi8KKwkJeyBaRF9DUjExMSwgMHgxMyB9LCB7IFpEX0NSMTEyLCAweDFmIH0sIHsgWkRfQ1IxMTMsIDB4MjcgfSwKKwkJeyBaRF9DUjExNCwgMHgyMyB9LCAvKiA2MjIxIDI3LT4yMyAqLworCQl7IFpEX0NSMTE1LCAweDI0IH0sIC8qIDYxMTIgMjQtPjFjIDYyMjAgMWMtPjI0ICovCisJCXsgWkRfQ1IxMTYsIDB4MjQgfSwgLyogNjIyMCAxYy0+MjQgKi8KKwkJeyBaRF9DUjExNywgMHhmYSB9LCAvKiA2MTEyIGZhLT5mOCA2MjIwIGY4LT5mNCA2MjIwIGY0LT5mYSAqLworCQl7IFpEX0NSMTE4LCAweGYwIH0sIC8qIDVkMDcgNjExMiBmMC0+ZjIgNjIyMCBmMi0+ZjAgKi8KKwkJeyBaRF9DUjExOSwgMHgxYSB9LCAvKiA2MTEyIDFhLT4xMCA2MjIwIDEwLT4xNCA2MjIwIDE0LT4xYSAqLworCQl7IFpEX0NSMTIwLCAweDRmIH0sCisJCXsgWkRfQ1IxMjEsIDB4MWYgfSwgLyogNjIyMCA0Zi0+MWYgKi8KKwkJeyBaRF9DUjEyMiwgMHhmMCB9LCB7IFpEX0NSMTIzLCAweDU3IH0sIHsgWkRfQ1IxMjUsIDB4YWQgfSwKKwkJeyBaRF9DUjEyNiwgMHg2YyB9LCB7IFpEX0NSMTI3LCAweDAzIH0sCisJCXsgWkRfQ1IxMjgsIDB4MTQgfSwgLyogNjMwMiAxMi0+MTEgKi8KKwkJeyBaRF9DUjEyOSwgMHgxMiB9LCAvKiA2MzAxIDEwLT4wZiAqLworCQl7IFpEX0NSMTMwLCAweDEwIH0sIHsgWkRfQ1IxMzcsIDB4NTAgfSwgeyBaRF9DUjEzOCwgMHhhOCB9LAorCQl7IFpEX0NSMTQ0LCAweGFjIH0sIHsgWkRfQ1IxNDYsIDB4MjAgfSwgeyBaRF9DUjI1MiwgMHhmZiB9LAorCQl7IFpEX0NSMjUzLCAweGZmIH0sCiAJfTsKIAogCXN0YXRpYyBjb25zdCB1MzIgcnZbXSA9IHsKQEAgLTQzMyw3ICs0MzUsNyBAQAogCSAqIHRoZSBvbmUgdGhhdCBwcm9kdWNlZCBhIGxvY2suICovCiAJVVcyNDUzX1BSSVYocmYpLT5jb25maWcgPSBmb3VuZF9jb25maWcgKyAxOwogCi0JcmV0dXJuIHpkX2lvd3JpdGUxNl9sb2NrZWQoY2hpcCwgMHgwNiwgQ1IyMDMpOworCXJldHVybiB6ZF9pb3dyaXRlMTZfbG9ja2VkKGNoaXAsIDB4MDYsIFpEX0NSMjAzKTsKIH0KIAogc3RhdGljIGludCB1dzI0NTNfc2V0X2NoYW5uZWwoc3RydWN0IHpkX3JmICpyZiwgdTggY2hhbm5lbCkKQEAgLTQ0NSw4ICs0NDcsOCBAQAogCXN0cnVjdCB6ZF9jaGlwICpjaGlwID0gemRfcmZfdG9fY2hpcChyZik7CiAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzW10gPSB7Ci0JCXsgQ1I4MCwgIDB4MzAgfSwgeyBDUjgxLCAgMHgzMCB9LCB7IENSNzksICAweDU4IH0sCi0JCXsgQ1IxMiwgIDB4ZjAgfSwgeyBDUjc3LCAgMHgxYiB9LCB7IENSNzgsICAweDU4IH0sCisJCXsgWkRfQ1I4MCwgIDB4MzAgfSwgeyBaRF9DUjgxLCAgMHgzMCB9LCB7IFpEX0NSNzksICAweDU4IH0sCisJCXsgWkRfQ1IxMiwgIDB4ZjAgfSwgeyBaRF9DUjc3LCAgMHgxYiB9LCB7IFpEX0NSNzgsICAweDU4IH0sCiAJfTsKIAogCXIgPSB1dzI0NTNfc3ludGhfc2V0X2NoYW5uZWwoY2hpcCwgY2hhbm5lbCwgYXV0b2NhbCk7CkBAIC00NzQsNyArNDc2LDcgQEAKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKLQlyZXR1cm4gemRfaW93cml0ZTE2X2xvY2tlZChjaGlwLCAweDA2LCBDUjIwMyk7CisJcmV0dXJuIHpkX2lvd3JpdGUxNl9sb2NrZWQoY2hpcCwgMHgwNiwgWkRfQ1IyMDMpOwogfQogCiBzdGF0aWMgaW50IHV3MjQ1M19zd2l0Y2hfcmFkaW9fb24oc3RydWN0IHpkX3JmICpyZikKQEAgLTQ4Miw3ICs0ODQsNyBAQAogCWludCByOwogCXN0cnVjdCB6ZF9jaGlwICpjaGlwID0gemRfcmZfdG9fY2hpcChyZik7CiAJc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzW10gPSB7Ci0JCXsgQ1IxMSwgIDB4MDAgfSwgeyBDUjI1MSwgMHgzZiB9LAorCQl7IFpEX0NSMTEsICAweDAwIH0sIHsgWkRfQ1IyNTEsIDB4M2YgfSwKIAl9OwogCiAJLyogZW50ZXIgUlhUWCBtb2RlICovCkBAIC01MDEsNyArNTAzLDcgQEAKIAlpbnQgcjsKIAlzdHJ1Y3QgemRfY2hpcCAqY2hpcCA9IHpkX3JmX3RvX2NoaXAocmYpOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgemRfaW9yZXExNiBpb3JlcXNbXSA9IHsKLQkJeyBDUjExLCAgMHgwNCB9LCB7IENSMjUxLCAweDJmIH0sCisJCXsgWkRfQ1IxMSwgIDB4MDQgfSwgeyBaRF9DUjI1MSwgMHgyZiB9LAogCX07CiAKIAkvKiBlbnRlciBJRExFIG1vZGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMKaW5kZXggYWI2MDdiYi4uMGU4MTk5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMKQEAgLTE4OTMsMTAgKzE4OTMsMTAgQEAKIAogCWRldl9kYmdfZih6ZF91c2JfZGV2KHVzYiksICJ2YWx1ZSAlIzA5eCBiaXRzICVkXG4iLCB2YWx1ZSwgYml0cyk7CiAKLQlyID0gemRfdXNiX2lvcmVhZDE2KHVzYiwgJmJpdF92YWx1ZV90ZW1wbGF0ZSwgQ1IyMDMpOworCXIgPSB6ZF91c2JfaW9yZWFkMTYodXNiLCAmYml0X3ZhbHVlX3RlbXBsYXRlLCBaRF9DUjIwMyk7CiAJaWYgKHIpIHsKIAkJZGV2X2RiZ19mKHpkX3VzYl9kZXYodXNiKSwKLQkJCSJlcnJvciAlZDogQ291bGRuJ3QgcmVhZCBDUjIwM1xuIiwgcik7CisJCQkiZXJyb3IgJWQ6IENvdWxkbid0IHJlYWQgWkRfQ1IyMDNcbiIsIHIpOwogCQlyZXR1cm4gcjsKIAl9CiAJYml0X3ZhbHVlX3RlbXBsYXRlICY9IH4oUkZfSUZfTEV8UkZfQ0xLfFJGX0RBVEEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuaAppbmRleCAzMjVkMGY5Li5iZjk0Mjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuaApAQCAtMTA5LDcgKzEwOSw3IEBACiAJX19sZTE2IGJpdHM7CiAJLyogUkYyNTk1OiAyNCAqLwogCV9fbGUxNiBiaXRfdmFsdWVzWzBdOwotCS8qIChDUjIwMyAmIH4oUkZfSUZfTEUgfCBSRl9DTEsgfCBSRl9EQVRBKSkgfCAoYml0ID8gUkZfREFUQSA6IDApICovCisJLyogKFpEX0NSMjAzICYgfihSRl9JRl9MRSB8IFJGX0NMSyB8IFJGX0RBVEEpKSB8IChiaXQgPyBSRl9EQVRBIDogMCkgKi8KIH0gX19wYWNrZWQ7CiAKIC8qIFVTQiBpbnRlcnJ1cHQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oIGIvZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmgKaW5kZXggNWQ3YmJmMi4uMTYxZjIwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmgKQEAgLTczLDkgKzczLDYgQEAKIAlzdHJ1Y3Qgdm1fc3RydWN0ICp0eF9jb21tc19hcmVhOwogCXN0cnVjdCB2bV9zdHJ1Y3QgKnJ4X2NvbW1zX2FyZWE7CiAKLQkvKiBGbGFncyB0aGF0IG11c3Qgbm90IGJlIHNldCBpbiBkZXYtPmZlYXR1cmVzICovCi0JdTMyIGZlYXR1cmVzX2Rpc2FibGVkOwotCiAJLyogRnJvbnRlbmQgZmVhdHVyZSBpbmZvcm1hdGlvbi4gKi8KIAl1OCBjYW5fc2c6MTsKIAl1OCBnc286MTsKQEAgLTEwOSw4ICsxMDYsOCBAQAogCXdhaXRfcXVldWVfaGVhZF90IHdhaXRpbmdfdG9fZnJlZTsKIH07CiAKLSNkZWZpbmUgWEVOX05FVElGX1RYX1JJTkdfU0laRSBfX1JJTkdfU0laRSgoc3RydWN0IHhlbl9uZXRpZl90eF9zcmluZyAqKTAsIFBBR0VfU0laRSkKLSNkZWZpbmUgWEVOX05FVElGX1JYX1JJTkdfU0laRSBfX1JJTkdfU0laRSgoc3RydWN0IHhlbl9uZXRpZl9yeF9zcmluZyAqKTAsIFBBR0VfU0laRSkKKyNkZWZpbmUgWEVOX05FVElGX1RYX1JJTkdfU0laRSBfX0NPTlNUX1JJTkdfU0laRSh4ZW5fbmV0aWZfdHgsIFBBR0VfU0laRSkKKyNkZWZpbmUgWEVOX05FVElGX1JYX1JJTkdfU0laRSBfX0NPTlNUX1JJTkdfU0laRSh4ZW5fbmV0aWZfcngsIFBBR0VfU0laRSkKIAogc3RydWN0IHhlbnZpZiAqeGVudmlmX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwKIAkJCSAgICBkb21pZF90IGRvbWlkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveGVuLW5ldGJhY2svaW50ZXJmYWNlLmMgYi9kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYwppbmRleCBkZTU2OWNjLi4wY2E4NmY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYworKysgYi9kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYwpAQCAtMTY1LDY5ICsxNjUsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgeGVudmlmX3NldF9mZWF0dXJlcyhzdHJ1Y3QgeGVudmlmICp2aWYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHZpZi0+ZGV2OwotCXUzMiBmZWF0dXJlcyA9IGRldi0+ZmVhdHVyZXM7Ci0KLQlpZiAodmlmLT5jYW5fc2cpCi0JCWZlYXR1cmVzIHw9IE5FVElGX0ZfU0c7Ci0JaWYgKHZpZi0+Z3NvIHx8IHZpZi0+Z3NvX3ByZWZpeCkKLQkJZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087Ci0JaWYgKHZpZi0+Y3N1bSkKLQkJZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNOwotCi0JZmVhdHVyZXMgJj0gfih2aWYtPmZlYXR1cmVzX2Rpc2FibGVkKTsKLQotCWlmICghKGZlYXR1cmVzICYgTkVUSUZfRl9TRykgJiYgZGV2LT5tdHUgPiBFVEhfREFUQV9MRU4pCi0JCWRldi0+bXR1ID0gRVRIX0RBVEFfTEVOOwotCi0JZGV2LT5mZWF0dXJlcyA9IGZlYXR1cmVzOwotfQotCi1zdGF0aWMgaW50IHhlbnZpZl9zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3N0YXRpYyB1MzIgeGVudmlmX2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpCiB7CiAJc3RydWN0IHhlbnZpZiAqdmlmID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpZiAoZGF0YSkgewotCQlpZiAoIXZpZi0+Y3N1bSkKLQkJCXJldHVybiAtRU9QTk9UU1VQUDsKLQkJdmlmLT5mZWF0dXJlc19kaXNhYmxlZCAmPSB+TkVUSUZfRl9JUF9DU1VNOwotCX0gZWxzZSB7Ci0JCXZpZi0+ZmVhdHVyZXNfZGlzYWJsZWQgfD0gTkVUSUZfRl9JUF9DU1VNOwotCX0KIAotCXhlbnZpZl9zZXRfZmVhdHVyZXModmlmKTsKLQlyZXR1cm4gMDsKLX0KKwlpZiAoIXZpZi0+Y2FuX3NnKQorCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9TRzsKKwlpZiAoIXZpZi0+Z3NvICYmICF2aWYtPmdzb19wcmVmaXgpCisJCWZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzsKKwlpZiAoIXZpZi0+Y3N1bSkKKwkJZmVhdHVyZXMgJj0gfk5FVElGX0ZfSVBfQ1NVTTsKIAotc3RhdGljIGludCB4ZW52aWZfc2V0X3NnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCB4ZW52aWYgKnZpZiA9IG5ldGRldl9wcml2KGRldik7Ci0JaWYgKGRhdGEpIHsKLQkJaWYgKCF2aWYtPmNhbl9zZykKLQkJCXJldHVybiAtRU9QTk9UU1VQUDsKLQkJdmlmLT5mZWF0dXJlc19kaXNhYmxlZCAmPSB+TkVUSUZfRl9TRzsKLQl9IGVsc2UgewotCQl2aWYtPmZlYXR1cmVzX2Rpc2FibGVkIHw9IE5FVElGX0ZfU0c7Ci0JfQotCi0JeGVudmlmX3NldF9mZWF0dXJlcyh2aWYpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHhlbnZpZl9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCB4ZW52aWYgKnZpZiA9IG5ldGRldl9wcml2KGRldik7Ci0JaWYgKGRhdGEpIHsKLQkJaWYgKCF2aWYtPmdzbyAmJiAhdmlmLT5nc29fcHJlZml4KQotCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCQl2aWYtPmZlYXR1cmVzX2Rpc2FibGVkICY9IH5ORVRJRl9GX1RTTzsKLQl9IGVsc2UgewotCQl2aWYtPmZlYXR1cmVzX2Rpc2FibGVkIHw9IE5FVElGX0ZfVFNPOwotCX0KLQotCXhlbnZpZl9zZXRfZmVhdHVyZXModmlmKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZmVhdHVyZXM7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeGVudmlmX3N0YXQgewpAQCAtMjc0LDEyICsyMjMsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIHhlbnZpZl9ldGh0b29sX29wcyA9IHsKLQkuZ2V0X3R4X2NzdW0JPSBldGh0b29sX29wX2dldF90eF9jc3VtLAotCS5zZXRfdHhfY3N1bQk9IHhlbnZpZl9zZXRfdHhfY3N1bSwKLQkuZ2V0X3NnCQk9IGV0aHRvb2xfb3BfZ2V0X3NnLAotCS5zZXRfc2cJCT0geGVudmlmX3NldF9zZywKLQkuZ2V0X3Rzbwk9IGV0aHRvb2xfb3BfZ2V0X3RzbywKLQkuc2V0X3Rzbwk9IHhlbnZpZl9zZXRfdHNvLAogCS5nZXRfbGluawk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiAKIAkuZ2V0X3NzZXRfY291bnQgPSB4ZW52aWZfZ2V0X3NzZXRfY291bnQsCkBAIC0yOTMsNiArMjM2LDcgQEAKIAkubmRvX29wZW4JPSB4ZW52aWZfb3BlbiwKIAkubmRvX3N0b3AJPSB4ZW52aWZfY2xvc2UsCiAJLm5kb19jaGFuZ2VfbXR1CT0geGVudmlmX2NoYW5nZV9tdHUsCisJLm5kb19maXhfZmVhdHVyZXMgPSB4ZW52aWZfZml4X2ZlYXR1cmVzLAogfTsKIAogc3RydWN0IHhlbnZpZiAqeGVudmlmX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgZG9taWRfdCBkb21pZCwKQEAgLTMzMSw3ICsyNzUsOCBAQAogCXZpZi0+Y3JlZGl0X3RpbWVvdXQuZXhwaXJlcyA9IGppZmZpZXM7CiAKIAlkZXYtPm5ldGRldl9vcHMJPSAmeGVudmlmX25ldGRldl9vcHM7Ci0JeGVudmlmX3NldF9mZWF0dXJlcyh2aWYpOworCWRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9UU087CisJZGV2LT5mZWF0dXJlcyA9IGRldi0+aHdfZmVhdHVyZXM7CiAJU0VUX0VUSFRPT0xfT1BTKGRldiwgJnhlbnZpZl9ldGh0b29sX29wcyk7CiAKIAlkZXYtPnR4X3F1ZXVlX2xlbiA9IFhFTlZJRl9RVUVVRV9MRU5HVEg7CkBAIC0zNjcsOCArMzEyLDYgQEAKIAlpZiAodmlmLT5pcnEpCiAJCXJldHVybiAwOwogCi0JeGVudmlmX3NldF9mZWF0dXJlcyh2aWYpOwotCiAJZXJyID0geGVuX25ldGJrX21hcF9mcm9udGVuZF9yaW5ncyh2aWYsIHR4X3JpbmdfcmVmLCByeF9yaW5nX3JlZik7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyOwpAQCAtMzg0LDkgKzMyNywxMiBAQAogCXhlbnZpZl9nZXQodmlmKTsKIAogCXJ0bmxfbG9jaygpOwotCW5ldGlmX2NhcnJpZXJfb24odmlmLT5kZXYpOwogCWlmIChuZXRpZl9ydW5uaW5nKHZpZi0+ZGV2KSkKIAkJeGVudmlmX3VwKHZpZik7CisJaWYgKCF2aWYtPmNhbl9zZyAmJiB2aWYtPmRldi0+bXR1ID4gRVRIX0RBVEFfTEVOKQorCQlkZXZfc2V0X210dSh2aWYtPmRldiwgRVRIX0RBVEFfTEVOKTsKKwluZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKHZpZi0+ZGV2KTsKKwluZXRpZl9jYXJyaWVyX29uKHZpZi0+ZGV2KTsKIAlydG5sX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC94ZW4tbmV0YmFjay94ZW5idXMuYyBiL2RyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL3hlbmJ1cy5jCmluZGV4IDIyYjhjMzUuLjFjZTcyOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL3hlbmJ1cy5jCisrKyBiL2RyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL3hlbmJ1cy5jCkBAIC0yNiw3ICsyNiw3IEBACiAJc3RydWN0IHhlbnZpZiAqdmlmOwogCWVudW0geGVuYnVzX3N0YXRlIGZyb250ZW5kX3N0YXRlOwogCXN0cnVjdCB4ZW5idXNfd2F0Y2ggaG90cGx1Z19zdGF0dXNfd2F0Y2g7Ci0JaW50IGhhdmVfaG90cGx1Z19zdGF0dXNfd2F0Y2g6MTsKKwl1OCBoYXZlX2hvdHBsdWdfc3RhdHVzX3dhdGNoOjE7CiB9OwogCiBzdGF0aWMgaW50IGNvbm5lY3RfcmluZ3Moc3RydWN0IGJhY2tlbmRfaW5mbyAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jIGIvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKaW5kZXggNWM4ZDljMy4uZGI5YTc2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKKysrIGIvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKQEAgLTExNDAsNiArMTE0MCw0MiBAQAogCWdudHRhYl9mcmVlX2dyYW50X3JlZmVyZW5jZXMobnAtPmdyZWZfcnhfaGVhZCk7CiB9CiAKK3N0YXRpYyB1MzIgeGVubmV0X2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpCit7CisJc3RydWN0IG5ldGZyb250X2luZm8gKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgdmFsOworCisJaWYgKGZlYXR1cmVzICYgTkVUSUZfRl9TRykgeworCQlpZiAoeGVuYnVzX3NjYW5mKFhCVF9OSUwsIG5wLT54YmRldi0+b3RoZXJlbmQsICJmZWF0dXJlLXNnIiwKKwkJCQkgIiVkIiwgJnZhbCkgPCAwKQorCQkJdmFsID0gMDsKKworCQlpZiAoIXZhbCkKKwkJCWZlYXR1cmVzICY9IH5ORVRJRl9GX1NHOworCX0KKworCWlmIChmZWF0dXJlcyAmIE5FVElGX0ZfVFNPKSB7CisJCWlmICh4ZW5idXNfc2NhbmYoWEJUX05JTCwgbnAtPnhiZGV2LT5vdGhlcmVuZCwKKwkJCQkgImZlYXR1cmUtZ3NvLXRjcHY0IiwgIiVkIiwgJnZhbCkgPCAwKQorCQkJdmFsID0gMDsKKworCQlpZiAoIXZhbCkKKwkJCWZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzsKKwl9CisKKwlyZXR1cm4gZmVhdHVyZXM7Cit9CisKK3N0YXRpYyBpbnQgeGVubmV0X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmVhdHVyZXMpCit7CisJaWYgKCEoZmVhdHVyZXMgJiBORVRJRl9GX1NHKSAmJiBkZXYtPm10dSA+IEVUSF9EQVRBX0xFTikgeworCQluZXRkZXZfaW5mbyhkZXYsICJSZWR1Y2luZyBNVFUgYmVjYXVzZSBubyBTRyBvZmZsb2FkIik7CisJCWRldi0+bXR1ID0gRVRIX0RBVEFfTEVOOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHhlbm5ldF9uZXRkZXZfb3BzID0gewogCS5uZG9fb3BlbiAgICAgICAgICAgID0geGVubmV0X29wZW4sCiAJLm5kb191bmluaXQgICAgICAgICAgPSB4ZW5uZXRfdW5pbml0LApAQCAtMTE0OCw2ICsxMTg0LDggQEAKIAkubmRvX2NoYW5nZV9tdHUJICAgICA9IHhlbm5ldF9jaGFuZ2VfbXR1LAogCS5uZG9fc2V0X21hY19hZGRyZXNzID0gZXRoX21hY19hZGRyLAogCS5uZG9fdmFsaWRhdGVfYWRkciAgID0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLm5kb19maXhfZmVhdHVyZXMgICAgPSB4ZW5uZXRfZml4X2ZlYXR1cmVzLAorCS5uZG9fc2V0X2ZlYXR1cmVzICAgID0geGVubmV0X3NldF9mZWF0dXJlcywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqIF9fZGV2aW5pdCB4ZW5uZXRfY3JlYXRlX2RldihzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2KQpAQCAtMTIwOSw3ICsxMjQ3LDE3IEBACiAJbmV0ZGV2LT5uZXRkZXZfb3BzCT0gJnhlbm5ldF9uZXRkZXZfb3BzOwogCiAJbmV0aWZfbmFwaV9hZGQobmV0ZGV2LCAmbnAtPm5hcGksIHhlbm5ldF9wb2xsLCA2NCk7Ci0JbmV0ZGV2LT5mZWF0dXJlcyAgICAgICAgPSBORVRJRl9GX0lQX0NTVU07CisJbmV0ZGV2LT5mZWF0dXJlcyAgICAgICAgPSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1JYQ1NVTSB8CisJCQkJICBORVRJRl9GX0dTT19ST0JVU1Q7CisJbmV0ZGV2LT5od19mZWF0dXJlcwk9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfU0cgfCBORVRJRl9GX1RTTzsKKworCS8qCisgICAgICAgICAqIEFzc3VtZSB0aGF0IGFsbCBodyBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlIGZvciBub3cuIFRoaXMgc2V0CisgICAgICAgICAqIHdpbGwgYmUgYWRqdXN0ZWQgYnkgdGhlIGNhbGwgdG8gbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcygpIGluCisgICAgICAgICAqIHhlbm5ldF9jb25uZWN0KCkgd2hpY2ggaXMgdGhlIGVhcmxpZXN0IHBvaW50IHdoZXJlIHdlIGNhbgorICAgICAgICAgKiBuZWdvdGlhdGUgd2l0aCB0aGUgYmFja2VuZCByZWdhcmRpbmcgc3VwcG9ydGVkIGZlYXR1cmVzLgorICAgICAgICAgKi8KKwluZXRkZXYtPmZlYXR1cmVzIHw9IG5ldGRldi0+aHdfZmVhdHVyZXM7CiAKIAlTRVRfRVRIVE9PTF9PUFMobmV0ZGV2LCAmeGVubmV0X2V0aHRvb2xfb3BzKTsKIAlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZkZXYtPmRldik7CkBAIC0xNDE2LDggKzE0NjQsNyBAQAogCQlnb3RvIGZhaWw7CiAKIAllcnIgPSBiaW5kX2V2dGNobl90b19pcnFoYW5kbGVyKGluZm8tPmV2dGNobiwgeGVubmV0X2ludGVycnVwdCwKLQkJCQkJSVJRRl9TQU1QTEVfUkFORE9NLCBuZXRkZXYtPm5hbWUsCi0JCQkJCW5ldGRldik7CisJCQkJCTAsIG5ldGRldi0+bmFtZSwgbmV0ZGV2KTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBmYWlsOwogCW5ldGRldi0+aXJxID0gZXJyOwpAQCAtMTUxMCw1NCArMTU1Nyw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCB4ZW5uZXRfc2V0X3NnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCWlmIChkYXRhKSB7Ci0JCXN0cnVjdCBuZXRmcm9udF9pbmZvICpucCA9IG5ldGRldl9wcml2KGRldik7Ci0JCWludCB2YWw7Ci0KLQkJaWYgKHhlbmJ1c19zY2FuZihYQlRfTklMLCBucC0+eGJkZXYtPm90aGVyZW5kLCAiZmVhdHVyZS1zZyIsCi0JCQkJICIlZCIsICZ2YWwpIDwgMCkKLQkJCXZhbCA9IDA7Ci0JCWlmICghdmFsKQotCQkJcmV0dXJuIC1FTk9TWVM7Ci0JfSBlbHNlIGlmIChkZXYtPm10dSA+IEVUSF9EQVRBX0xFTikKLQkJZGV2LT5tdHUgPSBFVEhfREFUQV9MRU47Ci0KLQlyZXR1cm4gZXRodG9vbF9vcF9zZXRfc2coZGV2LCBkYXRhKTsKLX0KLQotc3RhdGljIGludCB4ZW5uZXRfc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlpZiAoZGF0YSkgewotCQlzdHJ1Y3QgbmV0ZnJvbnRfaW5mbyAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCQlpbnQgdmFsOwotCi0JCWlmICh4ZW5idXNfc2NhbmYoWEJUX05JTCwgbnAtPnhiZGV2LT5vdGhlcmVuZCwKLQkJCQkgImZlYXR1cmUtZ3NvLXRjcHY0IiwgIiVkIiwgJnZhbCkgPCAwKQotCQkJdmFsID0gMDsKLQkJaWYgKCF2YWwpCi0JCQlyZXR1cm4gLUVOT1NZUzsKLQl9Ci0KLQlyZXR1cm4gZXRodG9vbF9vcF9zZXRfdHNvKGRldiwgZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHhlbm5ldF9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQkvKiBUdXJuIG9mZiBhbGwgR1NPIGJpdHMgZXhjZXB0IFJPQlVTVC4gKi8KLQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0dTT19NQVNLOwotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9HU09fUk9CVVNUOwotCXhlbm5ldF9zZXRfc2coZGV2LCAwKTsKLQotCS8qIFdlIG5lZWQgY2hlY2tzdW0gb2ZmbG9hZCB0byBlbmFibGUgc2NhdHRlci9nYXRoZXIgYW5kIFRTTy4gKi8KLQlpZiAoIShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9JUF9DU1VNKSkKLQkJcmV0dXJuOwotCi0JaWYgKCF4ZW5uZXRfc2V0X3NnKGRldiwgMSkpCi0JCXhlbm5ldF9zZXRfdHNvKGRldiwgMSk7Ci19Ci0KIHN0YXRpYyBpbnQgeGVubmV0X2Nvbm5lY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0ZnJvbnRfaW5mbyAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTU4Miw3ICsxNTgxLDcgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JeGVubmV0X3NldF9mZWF0dXJlcyhkZXYpOworCW5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTsKIAogCXNwaW5fbG9ja19iaCgmbnAtPnJ4X2xvY2spOwogCXNwaW5fbG9ja19pcnEoJm5wLT50eF9sb2NrKTsKQEAgLTE3MTAsOSArMTcwOSw2IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgeGVubmV0X2V0aHRvb2xfb3BzID0KIHsKLQkuc2V0X3R4X2NzdW0gPSBldGh0b29sX29wX3NldF90eF9jc3VtLAotCS5zZXRfc2cgPSB4ZW5uZXRfc2V0X3NnLAotCS5zZXRfdHNvID0geGVubmV0X3NldF90c28sCiAJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKIAogCS5nZXRfc3NldF9jb3VudCA9IHhlbm5ldF9nZXRfc3NldF9jb3VudCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3pvcnJvODM5MC5jIGIvZHJpdmVycy9uZXQvem9ycm84MzkwLmMKaW5kZXggYjc4YTM4ZC4uOGM3YzUyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvem9ycm84MzkwLmMKKysrIGIvZHJpdmVycy9uZXQvem9ycm84MzkwLmMKQEAgLTEyNiw3ICsxMjYsNyBAQAogCiAgICAgYm9hcmQgPSB6LT5yZXNvdXJjZS5zdGFydDsKICAgICBpb2FkZHIgPSBib2FyZCtjYXJkc1tpXS5vZmZzZXQ7Ci0gICAgZGV2ID0gYWxsb2NfZWlfbmV0ZGV2KCk7CisgICAgZGV2ID0gX19fX2FsbG9jX2VpX25ldGRldigwKTsKICAgICBpZiAoIWRldikKIAlyZXR1cm4gLUVOT01FTTsKICAgICBpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihpb2FkZHIsIE5FX0lPX0VYVEVOVCoyLCBEUlZfTkFNRSkpIHsKQEAgLTE0NiwxNSArMTQ2LDE1IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHpvcnJvODM5MF9uZXRkZXZfb3BzID0gewogCS5uZG9fb3BlbgkJPSB6b3JybzgzOTBfb3BlbiwKIAkubmRvX3N0b3AJCT0gem9ycm84MzkwX2Nsb3NlLAotCS5uZG9fc3RhcnRfeG1pdAkJPSBlaV9zdGFydF94bWl0LAotCS5uZG9fdHhfdGltZW91dAkJPSBlaV90eF90aW1lb3V0LAotCS5uZG9fZ2V0X3N0YXRzCQk9IGVpX2dldF9zdGF0cywKLQkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGVpX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gX19laV9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSBfX2VpX3R4X3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMJCT0gX19laV9nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBfX2VpX3NldF9tdWx0aWNhc3RfbGlzdCwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIAkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBlaV9wb2xsLAorCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gX19laV9wb2xsLAogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL2lycS5jIGIvZHJpdmVycy9vZi9pcnEuYwppbmRleCA3NWIwZDNjLi45ZjY4OWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL2lycS5jCisrKyBiL2RyaXZlcnMvb2YvaXJxLmMKQEAgLTU2LDcgKzU2LDcgQEAKICAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBpbnRlcnJ1cHQgcGFyZW50IG5vZGUsIG9yIE5VTEwgaWYgdGhlIGludGVycnVwdAogICogcGFyZW50IGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLgogICovCi1zdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpvZl9pcnFfZmluZF9wYXJlbnQoc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCkKK3N0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfaXJxX2ZpbmRfcGFyZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpwOwogCWNvbnN0IF9fYmUzMiAqcGFycDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3BjLmMgYi9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jCmluZGV4IGEzNzU1ZmYuLmJjOGNlNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3BjLmMKKysrIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYwpAQCAtMjU1MCw3ICsyNTUwLDYgQEAKIAkJCQkJIGNvbnN0IHN0cnVjdCBwYXJwb3J0X3BjX3ZpYV9kYXRhICp2aWEpCiB7CiAJc2hvcnQgaW50YV9hZGRyWzZdID0geyAweDJBMCwgMHgyQzAsIDB4MjIwLCAweDI0MCwgMHgxRTAgfTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKmJhc2VfcmVzOwogCXUzMiBpdGU4ODcyc2V0OwogCXUzMiBpdGU4ODcyX2xwdCwgaXRlODg3Ml9scHRoaTsKIAl1OCBpdGU4ODcyX2lycSwgdHlwZTsKQEAgLTI1NjEsOCArMjU2MCw3IEBACiAKIAkvKiBtYWtlIHN1cmUgd2hpY2ggb25lIGNoaXAgKi8KIAlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7Ci0JCWJhc2VfcmVzID0gcmVxdWVzdF9yZWdpb24oaW50YV9hZGRyW2ldLCAzMiwgIml0ODg3eCIpOwotCQlpZiAoYmFzZV9yZXMpIHsKKwkJaWYgKHJlcXVlc3RfcmVnaW9uKGludGFfYWRkcltpXSwgMzIsICJpdDg4N3giKSkgewogCQkJaW50IHRlc3Q7CiAJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIDB4NjAsCiAJCQkJCQkweGU1MDAwMDAwIHwgaW50YV9hZGRyW2ldKTsKQEAgLTI1NzEsNyArMjU2OSw3IEBACiAJCQl0ZXN0ID0gaW5iKGludGFfYWRkcltpXSk7CiAJCQlpZiAodGVzdCAhPSAweGZmKQogCQkJCWJyZWFrOwotCQkJcmVsZWFzZV9yZWdpb24oaW50YV9hZGRyW2ldLCAweDgpOworCQkJcmVsZWFzZV9yZWdpb24oaW50YV9hZGRyW2ldLCAzMik7CiAJCX0KIAl9CiAJaWYgKGkgPj0gNSkgewpAQCAtMjYzNSw3ICsyNjMzLDcgQEAKIAkvKgogCSAqIFJlbGVhc2UgdGhlIHJlc291cmNlIHNvIHRoYXQgcGFycG9ydF9wY19wcm9iZV9wb3J0IGNhbiBnZXQgaXQuCiAJICovCi0JcmVsZWFzZV9yZXNvdXJjZShiYXNlX3Jlcyk7CisJcmVsZWFzZV9yZWdpb24oaW50YV9hZGRyW2ldLCAzMik7CiAJaWYgKHBhcnBvcnRfcGNfcHJvYmVfcG9ydChpdGU4ODcyX2xwdCwgaXRlODg3Ml9scHRoaSwKIAkJCQkgICBpcnEsIFBBUlBPUlRfRE1BX05PTkUsICZwZGV2LT5kZXYsIDApKSB7CiAJCXByaW50ayhLRVJOX0lORk8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMgYi9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCmluZGV4IDUwNWMxYzcuLjZhZjZiNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKKysrIGIvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvdGJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2ktYXRzLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vaW9tbXUuaD4KICNpbmNsdWRlICJwY2kuaCIKQEAgLTEyOTksNyArMTMwMCw3IEBACiBzdGF0aWMgc3RydWN0IGlvdmFfZG9tYWluIHJlc2VydmVkX2lvdmFfbGlzdDsKIHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgcmVzZXJ2ZWRfcmJ0cmVlX2tleTsKIAotc3RhdGljIHZvaWQgZG1hcl9pbml0X3Jlc2VydmVkX3Jhbmdlcyh2b2lkKQorc3RhdGljIGludCBkbWFyX2luaXRfcmVzZXJ2ZWRfcmFuZ2VzKHZvaWQpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOwogCXN0cnVjdCBpb3ZhICppb3ZhOwpAQCAtMTMxMyw4ICsxMzE0LDEwIEBACiAJLyogSU9BUElDIHJhbmdlcyBzaG91bGRuJ3QgYmUgYWNjZXNzZWQgYnkgRE1BICovCiAJaW92YSA9IHJlc2VydmVfaW92YSgmcmVzZXJ2ZWRfaW92YV9saXN0LCBJT1ZBX1BGTihJT0FQSUNfUkFOR0VfU1RBUlQpLAogCQlJT1ZBX1BGTihJT0FQSUNfUkFOR0VfRU5EKSk7Ci0JaWYgKCFpb3ZhKQorCWlmICghaW92YSkgewogCQlwcmludGsoS0VSTl9FUlIgIlJlc2VydmUgSU9BUElDIHJhbmdlIGZhaWxlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KIAogCS8qIFJlc2VydmUgYWxsIFBDSSBNTUlPIHRvIGF2b2lkIHBlZXItdG8tcGVlciBhY2Nlc3MgKi8KIAlmb3JfZWFjaF9wY2lfZGV2KHBkZXYpIHsKQEAgLTEzMjcsMTEgKzEzMzAsMTMgQEAKIAkJCWlvdmEgPSByZXNlcnZlX2lvdmEoJnJlc2VydmVkX2lvdmFfbGlzdCwKIAkJCQkJICAgIElPVkFfUEZOKHItPnN0YXJ0KSwKIAkJCQkJICAgIElPVkFfUEZOKHItPmVuZCkpOwotCQkJaWYgKCFpb3ZhKQorCQkJaWYgKCFpb3ZhKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJSZXNlcnZlIGlvdmEgZmFpbGVkXG4iKTsKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCX0KIAkJfQogCX0KLQorCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBkb21haW5fcmVzZXJ2ZV9zcGVjaWFsX3JhbmdlcyhzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbikKQEAgLTE4MzUsNyArMTg0MCw3IEBACiAKIAlyZXQgPSBpb21tdV9hdHRhY2hfZG9tYWluKGRvbWFpbiwgaW9tbXUpOwogCWlmIChyZXQpIHsKLQkJZG9tYWluX2V4aXQoZG9tYWluKTsKKwkJZnJlZV9kb21haW5fbWVtKGRvbWFpbik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0yMjEzLDcgKzIyMTgsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgX19pbml0IGluaXRfZG1hcnModm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfZG1hcnMoaW50IGZvcmNlX29uKQogewogCXN0cnVjdCBkbWFyX2RyaGRfdW5pdCAqZHJoZDsKIAlzdHJ1Y3QgZG1hcl9ybXJyX3VuaXQgKnJtcnI7CkBAIC0yMzkzLDggKzIzOTgsMTUgQEAKIAkgKiAgIGVuYWJsZSB0cmFuc2xhdGlvbgogCSAqLwogCWZvcl9lYWNoX2RyaGRfdW5pdChkcmhkKSB7Ci0JCWlmIChkcmhkLT5pZ25vcmVkKQorCQlpZiAoZHJoZC0+aWdub3JlZCkgeworCQkJLyoKKwkJCSAqIHdlIGFsd2F5cyBoYXZlIHRvIGRpc2FibGUgUE1ScyBvciBETUEgbWF5IGZhaWwgb24KKwkJCSAqIHRoaXMgZGV2aWNlCisJCQkgKi8KKwkJCWlmIChmb3JjZV9vbikKKwkJCQlpb21tdV9kaXNhYmxlX3Byb3RlY3RfbWVtX3JlZ2lvbnMoZHJoZC0+aW9tbXUpOwogCQkJY29udGludWU7CisJCX0KIAkJaW9tbXUgPSBkcmhkLT5pb21tdTsKIAogCQlpb21tdV9mbHVzaF93cml0ZV9idWZmZXIoaW9tbXUpOwpAQCAtMzI0MCw5ICszMjUyLDE1IEBACiAJaWYgKCFkb21haW4pCiAJCXJldHVybiAwOwogCi0JaWYgKGFjdGlvbiA9PSBCVVNfTk9USUZZX1VOQk9VTkRfRFJJVkVSICYmICFpb21tdV9wYXNzX3Rocm91Z2gpCisJaWYgKGFjdGlvbiA9PSBCVVNfTk9USUZZX1VOQk9VTkRfRFJJVkVSICYmICFpb21tdV9wYXNzX3Rocm91Z2gpIHsKIAkJZG9tYWluX3JlbW92ZV9vbmVfZGV2X2luZm8oZG9tYWluLCBwZGV2KTsKIAorCQlpZiAoIShkb21haW4tPmZsYWdzICYgRE9NQUlOX0ZMQUdfVklSVFVBTF9NQUNISU5FKSAmJgorCQkgICAgIShkb21haW4tPmZsYWdzICYgRE9NQUlOX0ZMQUdfU1RBVElDX0lERU5USVRZKSAmJgorCQkgICAgbGlzdF9lbXB0eSgmZG9tYWluLT5kZXZpY2VzKSkKKwkJCWRvbWFpbl9leGl0KGRvbWFpbik7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMyNzcsMTIgKzMyOTUsMjEgQEAKIAlpZiAobm9faW9tbXUgfHwgZG1hcl9kaXNhYmxlZCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpb21tdV9pbml0X21lbXBvb2woKTsKLQlkbWFyX2luaXRfcmVzZXJ2ZWRfcmFuZ2VzKCk7CisJaWYgKGlvbW11X2luaXRfbWVtcG9vbCgpKSB7CisJCWlmIChmb3JjZV9vbikKKwkJCXBhbmljKCJ0Ym9vdDogRmFpbGVkIHRvIGluaXRpYWxpemUgaW9tbXUgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIAktRU5PREVWOworCX0KKworCWlmIChkbWFyX2luaXRfcmVzZXJ2ZWRfcmFuZ2VzKCkpIHsKKwkJaWYgKGZvcmNlX29uKQorCQkJcGFuaWMoInRib290OiBGYWlsZWQgdG8gcmVzZXJ2ZSBpb21tdSByYW5nZXNcbiIpOworCQlyZXR1cm4gCS1FTk9ERVY7CisJfQogCiAJaW5pdF9ub19yZW1hcHBpbmdfZGV2aWNlcygpOwogCi0JcmV0ID0gaW5pdF9kbWFycygpOworCXJldCA9IGluaXRfZG1hcnMoZm9yY2Vfb24pOwogCWlmIChyZXQpIHsKIAkJaWYgKGZvcmNlX29uKQogCQkJcGFuaWMoInRib290OiBGYWlsZWQgdG8gaW5pdGlhbGl6ZSBETUFSc1xuIik7CkBAIC0zMzkxLDYgKzM0MTgsMTEgQEAKIAkJZG9tYWluLT5pb21tdV9jb3VudC0tOwogCQlkb21haW5fdXBkYXRlX2lvbW11X2NhcChkb21haW4pOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkb21haW4tPmlvbW11X2xvY2ssIHRtcF9mbGFncyk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5sb2NrLCB0bXBfZmxhZ3MpOworCQljbGVhcl9iaXQoZG9tYWluLT5pZCwgaW9tbXUtPmRvbWFpbl9pZHMpOworCQlpb21tdS0+ZG9tYWluc1tkb21haW4tPmlkXSA9IE5VTEw7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5sb2NrLCB0bXBfZmxhZ3MpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldmljZV9kb21haW5fbG9jaywgZmxhZ3MpOwpAQCAtMzYwNyw5ICszNjM5LDkgQEAKIAogCQlwdGUgPSBkbWFyX2RvbWFpbi0+cGdkOwogCQlpZiAoZG1hX3B0ZV9wcmVzZW50KHB0ZSkpIHsKLQkJCWZyZWVfcGd0YWJsZV9wYWdlKGRtYXJfZG9tYWluLT5wZ2QpOwogCQkJZG1hcl9kb21haW4tPnBnZCA9IChzdHJ1Y3QgZG1hX3B0ZSAqKQogCQkJCXBoeXNfdG9fdmlydChkbWFfcHRlX2FkZHIocHRlKSk7CisJCQlmcmVlX3BndGFibGVfcGFnZShwdGUpOwogCQl9CiAJCWRtYXJfZG9tYWluLT5hZ2F3LS07CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW92LmMgYi9kcml2ZXJzL3BjaS9pb3YuYwppbmRleCA1NTNkOGVlLi40MmZhZTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pb3YuYworKysgYi9kcml2ZXJzL3BjaS9pb3YuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2ktYXRzLmg+CiAjaW5jbHVkZSAicGNpLmgiCiAKICNkZWZpbmUgVklSVEZOX0lEX0xFTgkxNgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmggYi9kcml2ZXJzL3BjaS9wY2kuaAppbmRleCBhNmVjMjAwLi40MDIwMDI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuaAorKysgYi9kcml2ZXJzL3BjaS9wY2kuaApAQCAtMjUwLDE1ICsyNTAsNiBAQAogCXU4IF9faW9tZW0gKm1zdGF0ZTsJLyogVkYgTWlncmF0aW9uIFN0YXRlIEFycmF5ICovCiB9OwogCi0vKiBBZGRyZXNzIFRyYW5zbGF0aW9uIFNlcnZpY2UgKi8KLXN0cnVjdCBwY2lfYXRzIHsKLQlpbnQgcG9zOwkvKiBjYXBhYmlsaXR5IHBvc2l0aW9uICovCi0JaW50IHN0dTsJLyogU21hbGxlc3QgVHJhbnNsYXRpb24gVW5pdCAqLwotCWludCBxZGVwOwkvKiBJbnZhbGlkYXRlIFF1ZXVlIERlcHRoICovCi0JaW50IHJlZl9jbnQ7CS8qIFBoeXNpY2FsIEZ1bmN0aW9uIHJlZmVyZW5jZSBjb3VudCAqLwotCXVuc2lnbmVkIGludCBpc19lbmFibGVkOjE7CS8qIEVuYWJsZSBiaXQgaXMgc2V0ICovCi19OwotCiAjaWZkZWYgQ09ORklHX1BDSV9JT1YKIGV4dGVybiBpbnQgcGNpX2lvdl9pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogZXh0ZXJuIHZvaWQgcGNpX2lvdl9yZWxlYXNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwpAQCAtMjY5LDE5ICsyNjAsNiBAQAogZXh0ZXJuIHZvaWQgcGNpX3Jlc3RvcmVfaW92X3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogZXh0ZXJuIGludCBwY2lfaW92X2J1c19yYW5nZShzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKIAotZXh0ZXJuIGludCBwY2lfZW5hYmxlX2F0cyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcHMpOwotZXh0ZXJuIHZvaWQgcGNpX2Rpc2FibGVfYXRzKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwotZXh0ZXJuIGludCBwY2lfYXRzX3F1ZXVlX2RlcHRoKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwotLyoqCi0gKiBwY2lfYXRzX2VuYWJsZWQgLSBxdWVyeSB0aGUgQVRTIHN0YXR1cwotICogQGRldjogdGhlIFBDSSBkZXZpY2UKLSAqCi0gKiBSZXR1cm5zIDEgaWYgQVRTIGNhcGFiaWxpdHkgaXMgZW5hYmxlZCwgb3IgMCBpZiBub3QuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHBjaV9hdHNfZW5hYmxlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXJldHVybiBkZXYtPmF0cyAmJiBkZXYtPmF0cy0+aXNfZW5hYmxlZDsKLX0KICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBwY2lfaW92X2luaXQoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKQEAgLTMwNCwyMSArMjgyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgcGNpX2VuYWJsZV9hdHMoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHBzKQotewotCXJldHVybiAtRU5PREVWOwotfQotc3RhdGljIGlubGluZSB2b2lkIHBjaV9kaXNhYmxlX2F0cyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotfQotc3RhdGljIGlubGluZSBpbnQgcGNpX2F0c19xdWV1ZV9kZXB0aChzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXJldHVybiAtRU5PREVWOwotfQotc3RhdGljIGlubGluZSBpbnQgcGNpX2F0c19lbmFibGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JcmV0dXJuIDA7Ci19CiAjZW5kaWYgLyogQ09ORklHX1BDSV9JT1YgKi8KIAogc3RhdGljIGlubGluZSByZXNvdXJjZV9zaXplX3QgcGNpX3Jlc291cmNlX2FsaWdubWVudChzdHJ1Y3QgcGNpX2RldiAqZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwppbmRleCBlYmY1MWFkLi5hODA2Y2IzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwpAQCAtNTc5LDcgKzU3OSw3IEBACiAJfQogCXNpemUwID0gY2FsY3VsYXRlX2lvc2l6ZShzaXplLCBtaW5fc2l6ZSwgc2l6ZTEsCiAJCQlyZXNvdXJjZV9zaXplKGJfcmVzKSwgNDA5Nik7Ci0Jc2l6ZTEgPSAhYWRkX3NpemU/IHNpemUwOgorCXNpemUxID0gKCFhZGRfaGVhZCB8fCAoYWRkX2hlYWQgJiYgIWFkZF9zaXplKSkgPyBzaXplMCA6CiAJCWNhbGN1bGF0ZV9pb3NpemUoc2l6ZSwgbWluX3NpemUrYWRkX3NpemUsIHNpemUxLAogCQkJcmVzb3VyY2Vfc2l6ZShiX3JlcyksIDQwOTYpOwogCWlmICghc2l6ZTAgJiYgIXNpemUxKSB7CkBAIC02NzcsNyArNjc3LDcgQEAKIAkJYWxpZ24gKz0gYWxpZ25zW29yZGVyXTsKIAl9CiAJc2l6ZTAgPSBjYWxjdWxhdGVfbWVtc2l6ZShzaXplLCBtaW5fc2l6ZSwgMCwgcmVzb3VyY2Vfc2l6ZShiX3JlcyksIG1pbl9hbGlnbik7Ci0Jc2l6ZTEgPSAhYWRkX3NpemUgPyBzaXplIDoKKwlzaXplMSA9ICghYWRkX2hlYWQgfHwgKGFkZF9oZWFkICYmICFhZGRfc2l6ZSkpID8gc2l6ZTAgOgogCQljYWxjdWxhdGVfbWVtc2l6ZShzaXplLCBtaW5fc2l6ZSthZGRfc2l6ZSwgMCwKIAkJCQlyZXNvdXJjZV9zaXplKGJfcmVzKSwgbWluX2FsaWduKTsKIAlpZiAoIXNpemUwICYmICFzaXplMSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYwppbmRleCBmZTc3ZTgyLi5lOGMxOWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYworKysgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYwpAQCAtMTczLDcgKzE3Myw3IEBACiAJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAKIAlpZiAoIShjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpKSB7Ci0JCWRldl9kYmcoJnBfZGV2LT5kZXYsICJDb25maWd1cmF0aW9uIGlzbid0J3QgbG9ja2VkXG4iKTsKKwkJZGV2X2RiZygmcF9kZXYtPmRldiwgIkNvbmZpZ3VyYXRpb24gaXNuJ3QgbG9ja2VkXG4iKTsKIAkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlyZXR1cm4gLUVBQ0NFUzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCmluZGV4IDVmMmRkMzguLjJjMWFiZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCkBAIC01ODUsOCArNTg1LDkgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgZWVlcGNfcmZraWxsX2hvdHBsdWcoc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMpCitzdGF0aWMgdm9pZCBlZWVwY19yZmtpbGxfaG90cGx1ZyhzdHJ1Y3QgZWVlcGNfbGFwdG9wICplZWVwYywgYWNwaV9oYW5kbGUgaGFuZGxlKQogeworCXN0cnVjdCBwY2lfZGV2ICpwb3J0OwogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAJc3RydWN0IHBjaV9idXMgKmJ1czsKIAlib29sIGJsb2NrZWQgPSBlZWVwY193bGFuX3Jma2lsbF9ibG9ja2VkKGVlZXBjKTsKQEAgLTU5OSw5ICs2MDAsMTYgQEAKIAltdXRleF9sb2NrKCZlZWVwYy0+aG90cGx1Z19sb2NrKTsKIAogCWlmIChlZWVwYy0+aG90cGx1Z19zbG90KSB7Ci0JCWJ1cyA9IHBjaV9maW5kX2J1cygwLCAxKTsKKwkJcG9ydCA9IGFjcGlfZ2V0X3BjaV9kZXYoaGFuZGxlKTsKKwkJaWYgKCFwb3J0KSB7CisJCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gZmluZCBwb3J0XG4iKTsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCisJCWJ1cyA9IHBvcnQtPnN1Ym9yZGluYXRlOworCiAJCWlmICghYnVzKSB7Ci0JCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gZmluZCBQQ0kgYnVzIDE/XG4iKTsKKwkJCXByX3dhcm5pbmcoIlVuYWJsZSB0byBmaW5kIFBDSSBidXM/XG4iKTsKIAkJCWdvdG8gb3V0X3VubG9jazsKIAkJfQogCkBAIC02MDksNiArNjE3LDcgQEAKIAkJCXByX2VycigiVW5hYmxlIHRvIHJlYWQgUENJIGNvbmZpZyBzcGFjZT9cbiIpOwogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CisKIAkJYWJzZW50ID0gKGwgPT0gMHhmZmZmZmZmZik7CiAKIAkJaWYgKGJsb2NrZWQgIT0gYWJzZW50KSB7CkBAIC02NDcsNiArNjU2LDE3IEBACiAJbXV0ZXhfdW5sb2NrKCZlZWVwYy0+aG90cGx1Z19sb2NrKTsKIH0KIAorc3RhdGljIHZvaWQgZWVlcGNfcmZraWxsX2hvdHBsdWdfdXBkYXRlKHN0cnVjdCBlZWVwY19sYXB0b3AgKmVlZXBjLCBjaGFyICpub2RlKQoreworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOworCWFjcGlfaGFuZGxlIGhhbmRsZTsKKworCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShOVUxMLCBub2RlLCAmaGFuZGxlKTsKKworCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKKwkJZWVlcGNfcmZraWxsX2hvdHBsdWcoZWVlcGMsIGhhbmRsZSk7Cit9CisKIHN0YXRpYyB2b2lkIGVlZXBjX3Jma2lsbF9ub3RpZnkoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZXZlbnQsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMgPSBkYXRhOwpAQCAtNjU0LDcgKzY3NCw3IEBACiAJaWYgKGV2ZW50ICE9IEFDUElfTk9USUZZX0JVU19DSEVDSykKIAkJcmV0dXJuOwogCi0JZWVlcGNfcmZraWxsX2hvdHBsdWcoZWVlcGMpOworCWVlZXBjX3Jma2lsbF9ob3RwbHVnKGVlZXBjLCBoYW5kbGUpOwogfQogCiBzdGF0aWMgaW50IGVlZXBjX3JlZ2lzdGVyX3Jma2lsbF9ub3RpZmllcihzdHJ1Y3QgZWVlcGNfbGFwdG9wICplZWVwYywKQEAgLTY3Miw2ICs2OTIsMTEgQEAKIAkJCQkJCSAgICAgZWVlcGMpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCQlwcl93YXJuaW5nKCJGYWlsZWQgdG8gcmVnaXN0ZXIgbm90aWZ5IG9uICVzXG4iLCBub2RlKTsKKwkJLyoKKwkJICogUmVmcmVzaCBwY2kgaG90cGx1ZyBpbiBjYXNlIHRoZSByZmtpbGwgc3RhdGUgd2FzCisJCSAqIGNoYW5nZWQgZHVyaW5nIHNldHVwLgorCQkgKi8KKwkJZWVlcGNfcmZraWxsX2hvdHBsdWcoZWVlcGMsIGhhbmRsZSk7CiAJfSBlbHNlCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC02OTMsNiArNzE4LDEyIEBACiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJCXByX2VycigiRXJyb3IgcmVtb3ZpbmcgcmZraWxsIG5vdGlmeSBoYW5kbGVyICVzXG4iLAogCQkJCW5vZGUpOworCQkJLyoKKwkJCSAqIFJlZnJlc2ggcGNpIGhvdHBsdWcgaW4gY2FzZSB0aGUgcmZraWxsCisJCQkgKiBzdGF0ZSB3YXMgY2hhbmdlZCBhZnRlcgorCQkJICogZWVlcGNfdW5yZWdpc3Rlcl9yZmtpbGxfbm90aWZpZXIoKQorCQkJICovCisJCWVlZXBjX3Jma2lsbF9ob3RwbHVnKGVlZXBjLCBoYW5kbGUpOwogCX0KIH0KIApAQCAtODE2LDExICs4NDcsNyBAQAogCQlyZmtpbGxfZGVzdHJveShlZWVwYy0+d2xhbl9yZmtpbGwpOwogCQllZWVwYy0+d2xhbl9yZmtpbGwgPSBOVUxMOwogCX0KLQkvKgotCSAqIFJlZnJlc2ggcGNpIGhvdHBsdWcgaW4gY2FzZSB0aGUgcmZraWxsIHN0YXRlIHdhcyBjaGFuZ2VkIGFmdGVyCi0JICogZWVlcGNfdW5yZWdpc3Rlcl9yZmtpbGxfbm90aWZpZXIoKQotCSAqLwotCWVlZXBjX3Jma2lsbF9ob3RwbHVnKGVlZXBjKTsKKwogCWlmIChlZWVwYy0+aG90cGx1Z19zbG90KQogCQlwY2lfaHBfZGVyZWdpc3RlcihlZWVwYy0+aG90cGx1Z19zbG90KTsKIApAQCAtODg5LDExICs5MTYsNiBAQAogCWVlZXBjX3JlZ2lzdGVyX3Jma2lsbF9ub3RpZmllcihlZWVwYywgIlxcX1NCLlBDSTAuUDBQNSIpOwogCWVlZXBjX3JlZ2lzdGVyX3Jma2lsbF9ub3RpZmllcihlZWVwYywgIlxcX1NCLlBDSTAuUDBQNiIpOwogCWVlZXBjX3JlZ2lzdGVyX3Jma2lsbF9ub3RpZmllcihlZWVwYywgIlxcX1NCLlBDSTAuUDBQNyIpOwotCS8qCi0JICogUmVmcmVzaCBwY2kgaG90cGx1ZyBpbiBjYXNlIHRoZSByZmtpbGwgc3RhdGUgd2FzIGNoYW5nZWQgZHVyaW5nCi0JICogc2V0dXAuCi0JICovCi0JZWVlcGNfcmZraWxsX2hvdHBsdWcoZWVlcGMpOwogCiBleGl0OgogCWlmIChyZXN1bHQgJiYgcmVzdWx0ICE9IC1FTk9ERVYpCkBAIC05MjgsOCArOTUwLDExIEBACiAJc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2aWNlKTsKIAogCS8qIFJlZnJlc2ggYm90aCB3bGFuIHJma2lsbCBzdGF0ZSBhbmQgcGNpIGhvdHBsdWcgKi8KLQlpZiAoZWVlcGMtPndsYW5fcmZraWxsKQotCQllZWVwY19yZmtpbGxfaG90cGx1ZyhlZWVwYyk7CisJaWYgKGVlZXBjLT53bGFuX3Jma2lsbCkgeworCQllZWVwY19yZmtpbGxfaG90cGx1Z191cGRhdGUoZWVlcGMsICJcXF9TQi5QQ0kwLlAwUDUiKTsKKwkJZWVlcGNfcmZraWxsX2hvdHBsdWdfdXBkYXRlKGVlZXBjLCAiXFxfU0IuUENJMC5QMFA2Iik7CisJCWVlZXBjX3Jma2lsbF9ob3RwbHVnX3VwZGF0ZShlZWVwYywgIlxcX1NCLlBDSTAuUDBQNyIpOworCX0KIAogCWlmIChlZWVwYy0+Ymx1ZXRvb3RoX3Jma2lsbCkKIAkJcmZraWxsX3NldF9zd19zdGF0ZShlZWVwYy0+Ymx1ZXRvb3RoX3Jma2lsbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCmluZGV4IDhmNzA5YWUuLjZmZThjZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYwpAQCAtOTM0LDYgKzkzNCwxNCBAQAogLyoKICAqIEJhY2tsaWdodCBkZXZpY2UKICAqLworc3RydWN0IHNvbnlfYmFja2xpZ2h0X3Byb3BzIHsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqZGV2OworCWludAkJCWhhbmRsZTsKKwl1OAkJCW9mZnNldDsKKwl1OAkJCW1heGx2bDsKK307CitzdHJ1Y3Qgc29ueV9iYWNrbGlnaHRfcHJvcHMgc29ueV9ibF9wcm9wczsKKwogc3RhdGljIGludCBzb255X2JhY2tsaWdodF91cGRhdGVfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKIHsKIAlyZXR1cm4gYWNwaV9jYWxsc2V0ZnVuYyhzb255X25jX2FjcGlfaGFuZGxlLCAiU0JSVCIsCkBAIC05NTQsMjEgKzk2MiwyNiBAQAogewogCWludCByZXN1bHQ7CiAJaW50ICpoYW5kbGUgPSAoaW50ICopYmxfZ2V0X2RhdGEoYmQpOworCXN0cnVjdCBzb255X2JhY2tsaWdodF9wcm9wcyAqc2RldiA9CisJCShzdHJ1Y3Qgc29ueV9iYWNrbGlnaHRfcHJvcHMgKilibF9nZXRfZGF0YShiZCk7CiAKLQlzb255X2NhbGxfc25jX2hhbmRsZSgqaGFuZGxlLCAweDAyMDAsICZyZXN1bHQpOworCXNvbnlfY2FsbF9zbmNfaGFuZGxlKHNkZXYtPmhhbmRsZSwgMHgwMjAwLCAmcmVzdWx0KTsKIAotCXJldHVybiByZXN1bHQgJiAweGZmOworCXJldHVybiAocmVzdWx0ICYgMHhmZikgLSBzZGV2LT5vZmZzZXQ7CiB9CiAKIHN0YXRpYyBpbnQgc29ueV9uY191cGRhdGVfc3RhdHVzX25nKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKIHsKIAlpbnQgdmFsdWUsIHJlc3VsdDsKIAlpbnQgKmhhbmRsZSA9IChpbnQgKilibF9nZXRfZGF0YShiZCk7CisJc3RydWN0IHNvbnlfYmFja2xpZ2h0X3Byb3BzICpzZGV2ID0KKwkJKHN0cnVjdCBzb255X2JhY2tsaWdodF9wcm9wcyAqKWJsX2dldF9kYXRhKGJkKTsKIAotCXZhbHVlID0gYmQtPnByb3BzLmJyaWdodG5lc3M7Ci0Jc29ueV9jYWxsX3NuY19oYW5kbGUoKmhhbmRsZSwgMHgwMTAwIHwgKHZhbHVlIDw8IDE2KSwgJnJlc3VsdCk7CisJdmFsdWUgPSBiZC0+cHJvcHMuYnJpZ2h0bmVzcyArIHNkZXYtPm9mZnNldDsKKwlpZiAoc29ueV9jYWxsX3NuY19oYW5kbGUoc2Rldi0+aGFuZGxlLCAweDAxMDAgfCAodmFsdWUgPDwgMTYpLCAmcmVzdWx0KSkKKwkJcmV0dXJuIC1FSU87CiAKLQlyZXR1cm4gc29ueV9uY19nZXRfYnJpZ2h0bmVzc19uZyhiZCk7CisJcmV0dXJuIHZhbHVlOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgc29ueV9iYWNrbGlnaHRfb3BzID0gewpAQCAtOTgxLDggKzk5NCw2IEBACiAJLnVwZGF0ZV9zdGF0dXMgPSBzb255X25jX3VwZGF0ZV9zdGF0dXNfbmcsCiAJLmdldF9icmlnaHRuZXNzID0gc29ueV9uY19nZXRfYnJpZ2h0bmVzc19uZywKIH07Ci1zdGF0aWMgaW50IGJhY2tsaWdodF9uZ19oYW5kbGU7Ci1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKnNvbnlfYmFja2xpZ2h0X2RldmljZTsKIAogLyoKICAqIE5ldyBTTkMtb25seSBWYWlvcyBldmVudCBtYXBwaW5nIHRvIGRyaXZlciBrbm93biBrZXlzCkBAIC0xNTQ5LDYgKzE1NjAsNzUgQEAKIAkJCQkmaWdub3JlKTsKIH0KIAorc3RhdGljIHZvaWQgc29ueV9uY19iYWNrbGlnaHRfbmdfcmVhZF9saW1pdHMoaW50IGhhbmRsZSwKKwkJc3RydWN0IHNvbnlfYmFja2xpZ2h0X3Byb3BzICpwcm9wcykKK3sKKwlpbnQgb2Zmc2V0OworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwl1OCBicmx2bCwgaTsKKwl1OCBtaW4gPSAweGZmLCBtYXggPSAweDAwOworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IHBhcmFtczsKKwl1bmlvbiBhY3BpX29iamVjdCBpbl9vYmo7CisJdW5pb24gYWNwaV9vYmplY3QgKmx2bF9lbnVtOworCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CisKKwlwcm9wcy0+aGFuZGxlID0gaGFuZGxlOworCXByb3BzLT5vZmZzZXQgPSAwOworCXByb3BzLT5tYXhsdmwgPSAweGZmOworCisJb2Zmc2V0ID0gc29ueV9maW5kX3NuY19oYW5kbGUoaGFuZGxlKTsKKwlpZiAob2Zmc2V0IDwgMCkKKwkJcmV0dXJuOworCisJLyogdHJ5IHRvIHJlYWQgdGhlIGJvdW5kYXJpZXMgZnJvbSBBQ1BJIHRhYmxlcywgaWYgd2UgZmFpbCB0aGUgYWJvdmUKKwkgKiBkZWZhdWx0cyBzaG91bGQgYmUgcmVhc29uYWJsZQorCSAqLworCXBhcmFtcy5jb3VudCA9IDE7CisJcGFyYW1zLnBvaW50ZXIgPSAmaW5fb2JqOworCWluX29iai50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJaW5fb2JqLmludGVnZXIudmFsdWUgPSBvZmZzZXQ7CisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3Qoc29ueV9uY19hY3BpX2hhbmRsZSwgIlNOMDYiLCAmcGFyYW1zLAorCQkJJmJ1ZmZlcik7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlyZXR1cm47CisKKwlsdmxfZW51bSA9ICh1bmlvbiBhY3BpX29iamVjdCAqKSBidWZmZXIucG9pbnRlcjsKKwlpZiAoIWx2bF9lbnVtKSB7CisJCXByX2VycigiTm8gU04wNiByZXR1cm4gb2JqZWN0LiIpOworCQlyZXR1cm47CisJfQorCWlmIChsdmxfZW51bS0+dHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSKSB7CisJCXByX2VycigiSW52YWxpZCBTTjA2IHJldHVybiBvYmplY3QgMHglLjJ4XG4iLAorCQkgICAgICAgbHZsX2VudW0tPnR5cGUpOworCQlnb3RvIG91dF9pbnZhbGlkOworCX0KKworCS8qIHRoZSBidWZmZXIgbGlzdHMgYnJpZ2h0bmVzcyBsZXZlbHMgYXZhaWxhYmxlLCBicmlnaHRuZXNzIGxldmVscyBhcmUKKwkgKiBmcm9tIDAgdG8gOCBpbiB0aGUgYXJyYXksIG90aGVyIHZhbHVlcyBhcmUgdXNlZCBieSBBTFMgY29udHJvbC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgOSAmJiBpIDwgbHZsX2VudW0tPmJ1ZmZlci5sZW5ndGg7IGkrKykgeworCisJCWJybHZsID0gKihsdmxfZW51bS0+YnVmZmVyLnBvaW50ZXIgKyBpKTsKKwkJZHByaW50aygiQnJpZ2h0bmVzcyBsZXZlbDogJWRcbiIsIGJybHZsKTsKKworCQlpZiAoIWJybHZsKQorCQkJYnJlYWs7CisKKwkJaWYgKGJybHZsID4gbWF4KQorCQkJbWF4ID0gYnJsdmw7CisJCWlmIChicmx2bCA8IG1pbikKKwkJCW1pbiA9IGJybHZsOworCX0KKwlwcm9wcy0+b2Zmc2V0ID0gbWluOworCXByb3BzLT5tYXhsdmwgPSBtYXg7CisJZHByaW50aygiQnJpZ2h0bmVzcyBsZXZlbHM6IG1pbj0lZCBtYXg9JWRcbiIsIHByb3BzLT5vZmZzZXQsCisJCQlwcm9wcy0+bWF4bHZsKTsKKworb3V0X2ludmFsaWQ6CisJa2ZyZWUoYnVmZmVyLnBvaW50ZXIpOworCXJldHVybjsKK30KKwogc3RhdGljIHZvaWQgc29ueV9uY19iYWNrbGlnaHRfc2V0dXAodm9pZCkKIHsKIAlhY3BpX2hhbmRsZSB1bnVzZWQ7CkBAIC0xNTU3LDE0ICsxNjM3LDE0IEBACiAJc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIHByb3BzOwogCiAJaWYgKHNvbnlfZmluZF9zbmNfaGFuZGxlKDB4MTJmKSAhPSAtMSkgewotCQliYWNrbGlnaHRfbmdfaGFuZGxlID0gMHgxMmY7CiAJCW9wcyA9ICZzb255X2JhY2tsaWdodF9uZ19vcHM7Ci0JCW1heF9icmlnaHRuZXNzID0gMHhmZjsKKwkJc29ueV9uY19iYWNrbGlnaHRfbmdfcmVhZF9saW1pdHMoMHgxMmYsICZzb255X2JsX3Byb3BzKTsKKwkJbWF4X2JyaWdodG5lc3MgPSBzb255X2JsX3Byb3BzLm1heGx2bCAtIHNvbnlfYmxfcHJvcHMub2Zmc2V0OwogCiAJfSBlbHNlIGlmIChzb255X2ZpbmRfc25jX2hhbmRsZSgweDEzNykgIT0gLTEpIHsKLQkJYmFja2xpZ2h0X25nX2hhbmRsZSA9IDB4MTM3OwogCQlvcHMgPSAmc29ueV9iYWNrbGlnaHRfbmdfb3BzOwotCQltYXhfYnJpZ2h0bmVzcyA9IDB4ZmY7CisJCXNvbnlfbmNfYmFja2xpZ2h0X25nX3JlYWRfbGltaXRzKDB4MTM3LCAmc29ueV9ibF9wcm9wcyk7CisJCW1heF9icmlnaHRuZXNzID0gc29ueV9ibF9wcm9wcy5tYXhsdmwgLSBzb255X2JsX3Byb3BzLm9mZnNldDsKIAogCX0gZWxzZSBpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShzb255X25jX2FjcGlfaGFuZGxlLCAiR0JSVCIsCiAJCQkJCQkmdW51c2VkKSkpIHsKQEAgLTE1NzcsMjIgKzE2NTcsMjIgQEAKIAltZW1zZXQoJnByb3BzLCAwLCBzaXplb2Yoc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzKSk7CiAJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9QTEFURk9STTsKIAlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IG1heF9icmlnaHRuZXNzOwotCXNvbnlfYmFja2xpZ2h0X2RldmljZSA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoInNvbnkiLCBOVUxMLAotCQkJCQkJCSAgJmJhY2tsaWdodF9uZ19oYW5kbGUsCi0JCQkJCQkJICBvcHMsICZwcm9wcyk7CisJc29ueV9ibF9wcm9wcy5kZXYgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJzb255IiwgTlVMTCwKKwkJCQkJCSAgICAgICZzb255X2JsX3Byb3BzLAorCQkJCQkJICAgICAgb3BzLCAmcHJvcHMpOwogCi0JaWYgKElTX0VSUihzb255X2JhY2tsaWdodF9kZXZpY2UpKSB7Ci0JCXByX3dhcm5pbmcoRFJWX1BGWCAidW5hYmxlIHRvIHJlZ2lzdGVyIGJhY2tsaWdodCBkZXZpY2VcbiIpOwotCQlzb255X2JhY2tsaWdodF9kZXZpY2UgPSBOVUxMOworCWlmIChJU19FUlIoc29ueV9ibF9wcm9wcy5kZXYpKSB7CisJCXByX3dhcm4oRFJWX1BGWCAidW5hYmxlIHRvIHJlZ2lzdGVyIGJhY2tsaWdodCBkZXZpY2VcbiIpOworCQlzb255X2JsX3Byb3BzLmRldiA9IE5VTEw7CiAJfSBlbHNlCi0JCXNvbnlfYmFja2xpZ2h0X2RldmljZS0+cHJvcHMuYnJpZ2h0bmVzcyA9Ci0JCSAgICBvcHMtPmdldF9icmlnaHRuZXNzKHNvbnlfYmFja2xpZ2h0X2RldmljZSk7CisJCXNvbnlfYmxfcHJvcHMuZGV2LT5wcm9wcy5icmlnaHRuZXNzID0KKwkJCW9wcy0+Z2V0X2JyaWdodG5lc3Moc29ueV9ibF9wcm9wcy5kZXYpOwogfQogCiBzdGF0aWMgdm9pZCBzb255X25jX2JhY2tsaWdodF9jbGVhbnVwKHZvaWQpCiB7Ci0JaWYgKHNvbnlfYmFja2xpZ2h0X2RldmljZSkKLQkJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKHNvbnlfYmFja2xpZ2h0X2RldmljZSk7CisJaWYgKHNvbnlfYmxfcHJvcHMuZGV2KQorCQliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoc29ueV9ibF9wcm9wcy5kZXYpOwogfQogCiBzdGF0aWMgaW50IHNvbnlfbmNfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQpAQCAtMjU5MCw3ICsyNjcwLDcgQEAKIAltdXRleF9sb2NrKCZzcGljX2Rldi5sb2NrKTsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU09OWVBJX0lPQ0dCUlQ6Ci0JCWlmIChzb255X2JhY2tsaWdodF9kZXZpY2UgPT0gTlVMTCkgeworCQlpZiAoc29ueV9ibF9wcm9wcy5kZXYgPT0gTlVMTCkgewogCQkJcmV0ID0gLUVJTzsKIAkJCWJyZWFrOwogCQl9CkBAIC0yNjAzLDcgKzI2ODMsNyBAQAogCQkJCXJldCA9IC1FRkFVTFQ7CiAJCWJyZWFrOwogCWNhc2UgU09OWVBJX0lPQ1NCUlQ6Ci0JCWlmIChzb255X2JhY2tsaWdodF9kZXZpY2UgPT0gTlVMTCkgeworCQlpZiAoc29ueV9ibF9wcm9wcy5kZXYgPT0gTlVMTCkgewogCQkJcmV0ID0gLUVJTzsKIAkJCWJyZWFrOwogCQl9CkBAIC0yNjE3LDggKzI2OTcsOCBAQAogCQkJYnJlYWs7CiAJCX0KIAkJLyogc3luYyB0aGUgYmFja2xpZ2h0IGRldmljZSBzdGF0dXMgKi8KLQkJc29ueV9iYWNrbGlnaHRfZGV2aWNlLT5wcm9wcy5icmlnaHRuZXNzID0KLQkJICAgIHNvbnlfYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzKHNvbnlfYmFja2xpZ2h0X2RldmljZSk7CisJCXNvbnlfYmxfcHJvcHMuZGV2LT5wcm9wcy5icmlnaHRuZXNzID0KKwkJICAgIHNvbnlfYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzKHNvbnlfYmxfcHJvcHMuZGV2KTsKIAkJYnJlYWs7CiAJY2FzZSBTT05ZUElfSU9DR0JBVDFDQVA6CiAJCWlmIChlY19yZWFkMTYoU09OWVBJX0JBVDFfRlVMTCwgJnZhbDE2KSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCmluZGV4IGVmYjNiNmIuLjU2MmZjZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKQEAgLTEyOCw3ICsxMjgsOCBAQAogfTsKIAogLyogQUNQSSBISURzICovCi0jZGVmaW5lIFRQQUNQSV9BQ1BJX0hLRVlfSElECQkiSUJNMDA2OCIKKyNkZWZpbmUgVFBBQ1BJX0FDUElfSUJNX0hLRVlfSElECSJJQk0wMDY4IgorI2RlZmluZSBUUEFDUElfQUNQSV9MRU5PVk9fSEtFWV9ISUQJIkxFTjAwNjgiCiAjZGVmaW5lIFRQQUNQSV9BQ1BJX0VDX0hJRAkJIlBOUDBDMDkiCiAKIC8qIElucHV0IElEcyAqLwpAQCAtMzg3OSw3ICszODgwLDggQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBpYm1faHRrX2RldmljZV9pZHNbXSA9IHsKLQl7VFBBQ1BJX0FDUElfSEtFWV9ISUQsIDB9LAorCXtUUEFDUElfQUNQSV9JQk1fSEtFWV9ISUQsIDB9LAorCXtUUEFDUElfQUNQSV9MRU5PVk9fSEtFWV9ISUQsIDB9LAogCXsiIiwgMH0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JhcGlkaW8vc3dpdGNoZXMvaWR0X2dlbjIuYyBiL2RyaXZlcnMvcmFwaWRpby9zd2l0Y2hlcy9pZHRfZ2VuMi5jCmluZGV4IGFjMjcwMWIuLjA0M2VlMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmFwaWRpby9zd2l0Y2hlcy9pZHRfZ2VuMi5jCisrKyBiL2RyaXZlcnMvcmFwaWRpby9zd2l0Y2hlcy9pZHRfZ2VuMi5jCkBAIC05NSw2ICs5NSw5IEBACiAJZWxzZQogCQl0YWJsZSsrOwogCisJaWYgKHJvdXRlX3BvcnQgPT0gUklPX0lOVkFMSURfUk9VVEUpCisJCXJvdXRlX3BvcnQgPSBJRFRfREVGQVVMVF9ST1VURTsKKwogCXJpb19tcG9ydF93cml0ZV9jb25maWdfMzIobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCiAJCQkJICBMT0NBTF9SVEVfQ09ORl9ERVNUSURfU0VMLCB0YWJsZSk7CiAKQEAgLTQxMSw2ICs0MTQsMTIgQEAKIAlyZGV2LT5yc3dpdGNoLT5lbV9oYW5kbGUgPSBpZHRnMl9lbV9oYW5kbGVyOwogCXJkZXYtPnJzd2l0Y2gtPnN3X3N5c2ZzID0gaWR0ZzJfc3lzZnM7CiAKKwlpZiAoZG9fZW51bSkgeworCQkvKiBFbnN1cmUgdGhhdCBkZWZhdWx0IHJvdXRpbmcgaXMgZGlzYWJsZWQgb24gc3RhcnR1cCAqLworCQlyaW9fd3JpdGVfY29uZmlnXzMyKHJkZXYsCisJCQkJICAgIFJJT19TVERfUlRFX0RFRkFVTFRfUE9SVCwgSURUX05PX1JPVVRFKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXBpZGlvL3N3aXRjaGVzL2lkdGNwcy5jIGIvZHJpdmVycy9yYXBpZGlvL3N3aXRjaGVzL2lkdGNwcy5jCmluZGV4IDNhOTcxMDcuLmQwNmVlMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmFwaWRpby9zd2l0Y2hlcy9pZHRjcHMuYworKysgYi9kcml2ZXJzL3JhcGlkaW8vc3dpdGNoZXMvaWR0Y3BzLmMKQEAgLTI2LDYgKzI2LDkgQEAKIHsKIAl1MzIgcmVzdWx0OwogCisJaWYgKHJvdXRlX3BvcnQgPT0gUklPX0lOVkFMSURfUk9VVEUpCisJCXJvdXRlX3BvcnQgPSBDUFNfREVGQVVMVF9ST1VURTsKKwogCWlmICh0YWJsZSA9PSBSSU9fR0xPQkFMX1RBQkxFKSB7CiAJCXJpb19tcG9ydF93cml0ZV9jb25maWdfMzIobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCiAJCQkJUklPX1NURF9SVEVfQ09ORl9ERVNUSURfU0VMX0NTUiwgcm91dGVfZGVzdGlkKTsKQEAgLTEzMCw2ICsxMzMsOSBAQAogCQkvKiBzZXQgVFZBTCA9IH41MHVzICovCiAJCXJpb193cml0ZV9jb25maWdfMzIocmRldiwKIAkJCXJkZXYtPnBoeXNfZWZwdHIgKyBSSU9fUE9SVF9MSU5LVE9fQ1RMX0NTUiwgMHg4ZSA8PCA4KTsKKwkJLyogRW5zdXJlIHRoYXQgZGVmYXVsdCByb3V0aW5nIGlzIGRpc2FibGVkIG9uIHN0YXJ0dXAgKi8KKwkJcmlvX3dyaXRlX2NvbmZpZ18zMihyZGV2LAorCQkJCSAgICBSSU9fU1REX1JURV9ERUZBVUxUX1BPUlQsIENQU19OT19ST1VURSk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JhcGlkaW8vc3dpdGNoZXMvdHNpNTd4LmMgYi9kcml2ZXJzL3JhcGlkaW8vc3dpdGNoZXMvdHNpNTd4LmMKaW5kZXggMWE2MjkzNC4uZGI4YjgwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yYXBpZGlvL3N3aXRjaGVzL3RzaTU3eC5jCisrKyBiL2RyaXZlcnMvcmFwaWRpby9zd2l0Y2hlcy90c2k1N3guYwpAQCAtMzAzLDYgKzMwMywxMiBAQAogCXJkZXYtPnJzd2l0Y2gtPmVtX2luaXQgPSB0c2k1N3hfZW1faW5pdDsKIAlyZGV2LT5yc3dpdGNoLT5lbV9oYW5kbGUgPSB0c2k1N3hfZW1faGFuZGxlcjsKIAorCWlmIChkb19lbnVtKSB7CisJCS8qIEVuc3VyZSB0aGF0IGRlZmF1bHQgcm91dGluZyBpcyBkaXNhYmxlZCBvbiBzdGFydHVwICovCisJCXJpb193cml0ZV9jb25maWdfMzIocmRldiwgUklPX1NURF9SVEVfREVGQVVMVF9QT1JULAorCQkJCSAgICBSSU9fSU5WQUxJRF9ST1VURSk7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL0tjb25maWcgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCmluZGV4IGUxODc4ODcuLjQyODkxNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL0tjb25maWcKKysrIGIvZHJpdmVycy9ydGMvS2NvbmZpZwpAQCAtMywxMCArMywxMCBAQAogIwogCiBjb25maWcgUlRDX0xJQgotCXRyaXN0YXRlCisJYm9vbAogCiBtZW51Y29uZmlnIFJUQ19DTEFTUwotCXRyaXN0YXRlICJSZWFsIFRpbWUgQ2xvY2siCisJYm9vbCAiUmVhbCBUaW1lIENsb2NrIgogCWRlZmF1bHQgbgogCWRlcGVuZHMgb24gIVMzOTAKIAlzZWxlY3QgUlRDX0xJQgpAQCAtMTUsOSArMTUsNiBAQAogIAkgIGJlIGFsbG93ZWQgdG8gcGx1ZyBvbmUgb3IgbW9yZSBSVENzIHRvIHlvdXIgc3lzdGVtLiBZb3Ugd2lsbAogCSAgcHJvYmFibHkgd2FudCB0byBlbmFibGUgb25lIG9yIG1vcmUgb2YgdGhlIGludGVyZmFjZXMgYmVsb3cuCiAKLQkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQotCSAgd2lsbCBiZSBjYWxsZWQgcnRjLWNvcmUuCi0KIGlmIFJUQ19DTEFTUwogCiBjb25maWcgUlRDX0hDVE9TWVMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL2NsYXNzLmMgYi9kcml2ZXJzL3J0Yy9jbGFzcy5jCmluZGV4IDM5MDEzODYuLjQxOTRlNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL2NsYXNzLmMKKysrIGIvZHJpdmVycy9ydGMvY2xhc3MuYwpAQCAtNDEsMjYgKzQxLDIxIEBACiAgKiBzeXN0ZW0ncyB3YWxsIGNsb2NrOyByZXN0b3JlIGl0IG9uIHJlc3VtZSgpLgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgdGltZXNwZWMJZGVsdGE7CiBzdGF0aWMgdGltZV90CQlvbGR0aW1lOworc3RhdGljIHN0cnVjdCB0aW1lc3BlYwlvbGR0czsKIAogc3RhdGljIGludCBydGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQogewogCXN0cnVjdCBydGNfZGV2aWNlCSpydGMgPSB0b19ydGNfZGV2aWNlKGRldik7CiAJc3RydWN0IHJ0Y190aW1lCQl0bTsKLQlzdHJ1Y3QgdGltZXNwZWMJCXRzID0gY3VycmVudF9rZXJuZWxfdGltZSgpOwogCiAJaWYgKHN0cmNtcChkZXZfbmFtZSgmcnRjLT5kZXYpLCBDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFKSAhPSAwKQogCQlyZXR1cm4gMDsKIAogCXJ0Y19yZWFkX3RpbWUocnRjLCAmdG0pOworCWt0aW1lX2dldF90cygmb2xkdHMpOwogCXJ0Y190bV90b190aW1lKCZ0bSwgJm9sZHRpbWUpOwogCi0JLyogUlRDIHByZWNpc2lvbiBpcyAxIHNlY29uZDsgYWRqdXN0IGRlbHRhIGZvciBhdmcgMS8yIHNlYyBlcnIgKi8KLQlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmZGVsdGEsCi0JCQkJdHMudHZfc2VjIC0gb2xkdGltZSwKLQkJCQl0cy50dl9uc2VjIC0gKE5TRUNfUEVSX1NFQyA+PiAxKSk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNzAsMTAgKzY1LDEyIEBACiAJc3RydWN0IHJ0Y190aW1lCQl0bTsKIAl0aW1lX3QJCQluZXd0aW1lOwogCXN0cnVjdCB0aW1lc3BlYwkJdGltZTsKKwlzdHJ1Y3QgdGltZXNwZWMJCW5ld3RzOwogCiAJaWYgKHN0cmNtcChkZXZfbmFtZSgmcnRjLT5kZXYpLCBDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFKSAhPSAwKQogCQlyZXR1cm4gMDsKIAorCWt0aW1lX2dldF90cygmbmV3dHMpOwogCXJ0Y19yZWFkX3RpbWUocnRjLCAmdG0pOwogCWlmIChydGNfdmFsaWRfdG0oJnRtKSAhPSAwKSB7CiAJCXByX2RlYnVnKCIlczogIGJvZ3VzIHJlc3VtZSB0aW1lXG4iLCBkZXZfbmFtZSgmcnRjLT5kZXYpKTsKQEAgLTg1LDE1ICs4MiwxMyBAQAogCQkJcHJfZGVidWcoIiVzOiAgdGltZSB0cmF2ZWwhXG4iLCBkZXZfbmFtZSgmcnRjLT5kZXYpKTsKIAkJcmV0dXJuIDA7CiAJfQorCS8qIGNhbGN1bGF0ZSB0aGUgUlRDIHRpbWUgZGVsdGEgKi8KKwlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmdGltZSwgbmV3dGltZSAtIG9sZHRpbWUsIDApOwogCi0JLyogcmVzdG9yZSB3YWxsIGNsb2NrIHVzaW5nIGRlbHRhIGFnYWluc3QgdGhpcyBSVEM7Ci0JICogYWRqdXN0IGFnYWluIGZvciBhdmcgMS8yIHNlY29uZCBSVEMgc2FtcGxpbmcgZXJyb3IKLQkgKi8KLQlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmdGltZSwKLQkJCQluZXd0aW1lICsgZGVsdGEudHZfc2VjLAotCQkJCShOU0VDX1BFUl9TRUMgPj4gMSkgKyBkZWx0YS50dl9uc2VjKTsKLQlkb19zZXR0aW1lb2ZkYXkoJnRpbWUpOworCS8qIHN1YnRyYWN0IGtlcm5lbCB0aW1lIGJldHdlZW4gcnRjX3N1c3BlbmQgdG8gcnRjX3Jlc3VtZSAqLworCXRpbWUgPSB0aW1lc3BlY19zdWIodGltZSwgdGltZXNwZWNfc3ViKG5ld3RzLCBvbGR0cykpOwogCisJdGltZWtlZXBpbmdfaW5qZWN0X3NsZWVwdGltZSgmdGltZSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1jb2g5MDEzMzEuYyBiL2RyaXZlcnMvcnRjL3J0Yy1jb2g5MDEzMzEuYwppbmRleCAzMTZmNDg0Li44MGY5Yzg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtY29oOTAxMzMxLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWNvaDkwMTMzMS5jCkBAIC0yMjAsNiArMjIwLDcgQEAKIAl9CiAJY2xrX2Rpc2FibGUocnRhcC0+Y2xrKTsKIAorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJ0YXApOwogCXJ0YXAtPnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoImNvaDkwMTMzMSIsICZwZGV2LT5kZXYsICZjb2g5MDEzMzFfb3BzLAogCQkJCQkgVEhJU19NT0RVTEUpOwogCWlmIChJU19FUlIocnRhcC0+cnRjKSkgewpAQCAtMjI3LDExICsyMjgsMTAgQEAKIAkJZ290byBvdXRfbm9fcnRjOwogCX0KIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJ0YXApOwotCiAJcmV0dXJuIDA7CiAKICBvdXRfbm9fcnRjOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogIG91dF9ub19jbGtfZW5hYmxlOgogCWNsa19wdXQocnRhcC0+Y2xrKTsKICBvdXRfbm9fY2xrOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRhdmluY2kuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kYXZpbmNpLmMKaW5kZXggOGQ0NjgzOC4uNzU1ZTFmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRhdmluY2kuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZGF2aW5jaS5jCkBAIC01MjQsNiArNTI0LDggQEAKIAkJZ290byBmYWlsMjsKIAl9CiAKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkYXZpbmNpX3J0Yyk7CisKIAlkYXZpbmNpX3J0Yy0+cnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihwZGV2LT5uYW1lLCAmcGRldi0+ZGV2LAogCQkJCSAgICAmZGF2aW5jaV9ydGNfb3BzLCBUSElTX01PRFVMRSk7CiAJaWYgKElTX0VSUihkYXZpbmNpX3J0Yy0+cnRjKSkgewpAQCAtNTUzLDggKzU1NSw2IEBACiAKIAlydGNzc193cml0ZShkYXZpbmNpX3J0YywgUFJUQ1NTX1JUQ19DQ1RSTF9DQUVOLCBQUlRDU1NfUlRDX0NDVFJMKTsKIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRhdmluY2lfcnRjKTsKLQogCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAwKTsKIAogCXJldHVybiAwOwpAQCAtNTYyLDYgKzU2Miw3IEBACiBmYWlsNDoKIAlydGNfZGV2aWNlX3VucmVnaXN0ZXIoZGF2aW5jaV9ydGMtPnJ0Yyk7CiBmYWlsMzoKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlpb3VubWFwKGRhdmluY2lfcnRjLT5iYXNlKTsKIGZhaWwyOgogCXJlbGVhc2VfbWVtX3JlZ2lvbihkYXZpbmNpX3J0Yy0+cGJhc2UsIGRhdmluY2lfcnRjLT5iYXNlX3NpemUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTI4Ni5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTI4Ni5jCmluZGV4IDYwY2U2OTYuLjQ3ZTY4MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczEyODYuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMjg2LmMKQEAgLTM1NSw2ICszNTUsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpOwogCXJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoImRzMTI4NiIsICZwZGV2LT5kZXYsCiAJCQkJICAmZHMxMjg2X29wcywgVEhJU19NT0RVTEUpOwogCWlmIChJU19FUlIocnRjKSkgewpAQCAtMzYyLDcgKzM2Myw2IEBACiAJCWdvdG8gb3V0OwogCX0KIAlwcml2LT5ydGMgPSBydGM7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7CiAJcmV0dXJuIDA7CiAKIG91dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1lcDkzeHguYyBiL2RyaXZlcnMvcnRjL3J0Yy1lcDkzeHguYwppbmRleCAxMWFlNjRkLi4zMzU1NTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZXA5M3h4LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWVwOTN4eC5jCkBAIC0xNTEsNiArMTUxLDcgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAogCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gZXA5M3h4X3J0YzsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBydGMpOwogCiAJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihwZGV2LT5uYW1lLAogCQkJCSZwZGV2LT5kZXYsICZlcDkzeHhfcnRjX29wcywgVEhJU19NT0RVTEUpOwpAQCAtMTU5LDggKzE2MCw2IEBACiAJCWdvdG8gZXhpdDsKIAl9CiAKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBydGMpOwotCiAJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJmVwOTN4eF9ydGNfc3lzZnNfZmlsZXMpOwogCWlmIChlcnIpCiAJCWdvdG8gZmFpbDsKQEAgLTE2OCw5ICsxNjcsOSBAQAogCXJldHVybiAwOwogCiBmYWlsOgotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOwogZXhpdDoKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IE5VTEw7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAuYwppbmRleCA2OWZlNjY0Li5lZGExMjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbTQxdDgwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW00MXQ4MC5jCkBAIC03ODMsNiArNzgzLDkgQEAKIAkJZ290byBleGl0OwogCX0KIAorCWNsaWVudGRhdGEtPmZlYXR1cmVzID0gaWQtPmRyaXZlcl9kYXRhOworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGNsaWVudGRhdGEpOworCiAJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihjbGllbnQtPm5hbWUsICZjbGllbnQtPmRldiwKIAkJCQkgICZtNDF0ODBfcnRjX29wcywgVEhJU19NT0RVTEUpOwogCWlmIChJU19FUlIocnRjKSkgewpAQCAtNzkyLDggKzc5NSw2IEBACiAJfQogCiAJY2xpZW50ZGF0YS0+cnRjID0gcnRjOwotCWNsaWVudGRhdGEtPmZlYXR1cmVzID0gaWQtPmRyaXZlcl9kYXRhOwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGNsaWVudGRhdGEpOwogCiAJLyogTWFrZSBzdXJlIEhUIChIYWx0IFVwZGF0ZSkgYml0IGlzIGNsZWFyZWQgKi8KIAlyYyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIE00MVQ4MF9SRUdfQUxBUk1fSE9VUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbWF4ODkyNS5jIGIvZHJpdmVycy9ydGMvcnRjLW1heDg5MjUuYwppbmRleCAxNzQwMzZkLi4zYmMwNDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbWF4ODkyNS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tYXg4OTI1LmMKQEAgLTI1Nyw2ICsyNTcsMTAgQEAKIAkJZ290byBvdXRfaXJxOwogCX0KIAorCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBpbmZvKTsKKwkvKiBYWFggLSBpc24ndCB0aGlzIHJlZHVuZGFudD8gKi8KKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKKwogCWluZm8tPnJ0Y19kZXYgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJtYXg4OTI1LXJ0YyIsICZwZGV2LT5kZXYsCiAJCQkJCSZtYXg4OTI1X3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKIAlyZXQgPSBQVFJfRVJSKGluZm8tPnJ0Y19kZXYpOwpAQCAtMjY1LDExICsyNjksOSBAQAogCQlnb3RvIG91dF9ydGM7CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGluZm8pOwotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOwotCiAJcmV0dXJuIDA7CiBvdXRfcnRjOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWZyZWVfaXJxKGNoaXAtPmlycV9iYXNlICsgTUFYODkyNV9JUlFfUlRDX0FMQVJNMCwgaW5mbyk7CiBvdXRfaXJxOgogCWtmcmVlKGluZm8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW1heDg5OTguYyBiL2RyaXZlcnMvcnRjL3J0Yy1tYXg4OTk4LmMKaW5kZXggM2Y3YmM2Yi4uMmU0OGFhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW1heDg5OTguYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbWF4ODk5OC5jCkBAIC0yNjUsNiArMjY1LDggQEAKIAlpbmZvLT5ydGMgPSBtYXg4OTk4LT5ydGM7CiAJaW5mby0+aXJxID0gbWF4ODk5OC0+aXJxX2Jhc2UgKyBNQVg4OTk4X0lSUV9BTEFSTTA7CiAKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKKwogCWluZm8tPnJ0Y19kZXYgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJtYXg4OTk4LXJ0YyIsICZwZGV2LT5kZXYsCiAJCQkmbWF4ODk5OF9ydGNfb3BzLCBUSElTX01PRFVMRSk7CiAKQEAgLTI3NCw4ICsyNzYsNiBAQAogCQlnb3RvIG91dF9ydGM7CiAJfQogCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaW5mbyk7Ci0KIAlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShpbmZvLT5pcnEsIE5VTEwsIG1heDg5OThfcnRjX2FsYXJtX2lycSwgMCwKIAkJCSJydGMtYWxhcm0wIiwgaW5mbyk7CiAKQEAgLTI5Myw2ICsyOTMsNyBAQAogCXJldHVybiAwOwogCiBvdXRfcnRjOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWtmcmVlKGluZm8pOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbWMxM3h4eC5jIGIvZHJpdmVycy9ydGMvcnRjLW1jMTN4eHguYwppbmRleCBjNWFjMDM3Li5hMWEyNzhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbWMxM3h4eC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tYzEzeHh4LmMKQEAgLTM0OSwxMSArMzQ5LDE1IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJfYWxhcm1faXJxX3JlcXVlc3Q7CiAKKwltYzEzeHh4X3VubG9jayhtYzEzeHh4KTsKKwogCXByaXYtPnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIocGRldi0+bmFtZSwKIAkJCSZwZGV2LT5kZXYsICZtYzEzeHh4X3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKIAlpZiAoSVNfRVJSKHByaXYtPnJ0YykpIHsKIAkJcmV0ID0gUFRSX0VSUihwcml2LT5ydGMpOwogCisJCW1jMTN4eHhfbG9jayhtYzEzeHh4KTsKKwogCQltYzEzeHh4X2lycV9mcmVlKG1jMTN4eHgsIE1DMTNYWFhfSVJRX1RPREEsIHByaXYpOwogZXJyX2FsYXJtX2lycV9yZXF1ZXN0OgogCkBAIC0zNjUsMTIgKzM2OSwxMiBAQAogCQltYzEzeHh4X2lycV9mcmVlKG1jMTN4eHgsIE1DMTNYWFhfSVJRX1JUQ1JTVCwgcHJpdik7CiBlcnJfcmVzZXRfaXJxX3JlcXVlc3Q6CiAKKwkJbWMxM3h4eF91bmxvY2sobWMxM3h4eCk7CisKIAkJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJCWtmcmVlKHByaXYpOwogCX0KIAotCW1jMTN4eHhfdW5sb2NrKG1jMTN4eHgpOwotCiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW1zbTYyNDIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tc202MjQyLmMKaW5kZXggNjc4MjA2Mi4uZmNiMTEzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW1zbTYyNDIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbXNtNjI0Mi5jCkBAIC0yMTQsNiArMjE0LDcgQEAKIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9mcmVlX3ByaXY7CiAJfQorCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgcHJpdik7CiAKIAlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJydGMtbXNtNjI0MiIsICZkZXYtPmRldiwgJm1zbTYyNDJfcnRjX29wcywKIAkJCQkgIFRISVNfTU9EVUxFKTsKQEAgLTIyMywxMCArMjI0LDEwIEBACiAJfQogCiAJcHJpdi0+cnRjID0gcnRjOwotCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgcHJpdik7CiAJcmV0dXJuIDA7CiAKIG91dF91bm1hcDoKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCWlvdW5tYXAocHJpdi0+cmVncyk7CiBvdXRfZnJlZV9wcml2OgogCWtmcmVlKHByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW14Yy5jIGIvZHJpdmVycy9ydGMvcnRjLW14Yy5jCmluZGV4IDgyNmFiNjQuLmQ4MTQ0MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1teGMuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbXhjLmMKQEAgLTQxOCwxNCArNDE4LDYgQEAKIAkJZ290byBleGl0X3B1dF9jbGs7CiAJfQogCi0JcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihwZGV2LT5uYW1lLCAmcGRldi0+ZGV2LCAmbXhjX3J0Y19vcHMsCi0JCQkJICBUSElTX01PRFVMRSk7Ci0JaWYgKElTX0VSUihydGMpKSB7Ci0JCXJldCA9IFBUUl9FUlIocnRjKTsKLQkJZ290byBleGl0X3B1dF9jbGs7Ci0JfQotCi0JcGRhdGEtPnJ0YyA9IHJ0YzsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwZGF0YSk7CiAKIAkvKiBDb25maWd1cmUgYW5kIGVuYWJsZSB0aGUgUlRDICovCkBAIC00MzgsOCArNDMwLDE5IEBACiAJCXBkYXRhLT5pcnEgPSAtMTsKIAl9CiAKKwlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsICZwZGV2LT5kZXYsICZteGNfcnRjX29wcywKKwkJCQkgIFRISVNfTU9EVUxFKTsKKwlpZiAoSVNfRVJSKHJ0YykpIHsKKwkJcmV0ID0gUFRSX0VSUihydGMpOworCQlnb3RvIGV4aXRfY2xyX2RydmRhdGE7CisJfQorCisJcGRhdGEtPnJ0YyA9IHJ0YzsKKwogCXJldHVybiAwOwogCitleGl0X2Nscl9kcnZkYXRhOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogZXhpdF9wdXRfY2xrOgogCWNsa19kaXNhYmxlKHBkYXRhLT5jbGspOwogCWNsa19wdXQocGRhdGEtPmNsayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcGNhcC5jIGIvZHJpdmVycy9ydGMvcnRjLXBjYXAuYwppbmRleCBhNjMzYWJjLi5jZDRmMTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcGNhcC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1wY2FwLmMKQEAgLTE1MSw2ICsxNTEsOCBAQAogCiAJcGNhcF9ydGMtPnBjYXAgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CiAKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwY2FwX3J0Yyk7CisKIAlwY2FwX3J0Yy0+cnRjID0gcnRjX2RldmljZV9yZWdpc3RlcigicGNhcCIsICZwZGV2LT5kZXYsCiAJCQkJICAmcGNhcF9ydGNfb3BzLCBUSElTX01PRFVMRSk7CiAJaWYgKElTX0VSUihwY2FwX3J0Yy0+cnRjKSkgewpAQCAtMTU4LDcgKzE2MCw2IEBACiAJCWdvdG8gZmFpbF9ydGM7CiAJfQogCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGNhcF9ydGMpOwogCiAJdGltZXJfaXJxID0gcGNhcF90b19pcnEocGNhcF9ydGMtPnBjYXAsIFBDQVBfSVJRXzFIWik7CiAJYWxhcm1faXJxID0gcGNhcF90b19pcnEocGNhcF9ydGMtPnBjYXAsIFBDQVBfSVJRX1RPREEpOwpAQCAtMTc3LDYgKzE3OCw3IEBACiBmYWlsX3RpbWVyOgogCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihwY2FwX3J0Yy0+cnRjKTsKIGZhaWxfcnRjOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWtmcmVlKHBjYXBfcnRjKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXJwNWMwMS5jIGIvZHJpdmVycy9ydGMvcnRjLXJwNWMwMS5jCmluZGV4IDY5NGRhMzkuLjM1OWRhNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1ycDVjMDEuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcnA1YzAxLmMKQEAgLTI0OSwxNSArMjQ5LDE1IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CiAKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIHByaXYpOworCiAJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcigicnRjLXJwNWMwMSIsICZkZXYtPmRldiwgJnJwNWMwMV9ydGNfb3BzLAogCQkJCSAgVEhJU19NT0RVTEUpOwogCWlmIChJU19FUlIocnRjKSkgewogCQllcnJvciA9IFBUUl9FUlIocnRjKTsKIAkJZ290byBvdXRfdW5tYXA7CiAJfQotCiAJcHJpdi0+cnRjID0gcnRjOwotCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgcHJpdik7CiAKIAllcnJvciA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmZGV2LT5kZXYua29iaiwgJnByaXYtPm52cmFtX2F0dHIpOwogCWlmIChlcnJvcikKQEAgLTI2OCw2ICsyNjgsNyBAQAogb3V0X3VucmVnaXN0ZXI6CiAJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CiBvdXRfdW5tYXA6CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAlpb3VubWFwKHByaXYtPnJlZ3MpOwogb3V0X2ZyZWVfcHJpdjoKIAlrZnJlZShwcml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zM2MuYyBiL2RyaXZlcnMvcnRjL3J0Yy1zM2MuYwppbmRleCBiMzQ2NmM0Li4xNjUxMmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtczNjLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXMzYy5jCkBAIC00Niw2ICs0Niw3IEBACiBzdGF0aWMgdm9pZCBfX2lvbWVtICpzM2NfcnRjX2Jhc2U7CiBzdGF0aWMgaW50IHMzY19ydGNfYWxhcm1ubyA9IE5PX0lSUTsKIHN0YXRpYyBpbnQgczNjX3J0Y190aWNrbm8gID0gTk9fSVJROworc3RhdGljIGJvb2wgd2FrZV9lbjsKIHN0YXRpYyBlbnVtIHMzY19jcHVfdHlwZSBzM2NfcnRjX2NwdV90eXBlOwogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHMzY19ydGNfcGllX2xvY2spOwpAQCAtNTYyLDggKzU2MywxMiBAQAogCX0KIAlzM2NfcnRjX2VuYWJsZShwZGV2LCAwKTsKIAotCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKLQkJZW5hYmxlX2lycV93YWtlKHMzY19ydGNfYWxhcm1ubyk7CisJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpICYmICF3YWtlX2VuKSB7CisJCWlmIChlbmFibGVfaXJxX3dha2UoczNjX3J0Y19hbGFybW5vKSA9PSAwKQorCQkJd2FrZV9lbiA9IHRydWU7CisJCWVsc2UKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImVuYWJsZV9pcnFfd2FrZSBmYWlsZWRcbiIpOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtNTc5LDggKzU4NCwxMCBAQAogCQl3cml0ZXcodG1wIHwgdGljbnRfZW5fc2F2ZSwgczNjX3J0Y19iYXNlICsgUzNDMjQxMF9SVENDT04pOwogCX0KIAotCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKKwlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikgJiYgd2FrZV9lbikgewogCQlkaXNhYmxlX2lycV93YWtlKHMzY19ydGNfYWxhcm1ubyk7CisJCXdha2VfZW4gPSBmYWxzZTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCmluZGV4IDRkMmRmMmYuLjg2YjZmMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwpAQCAtMTc0MiwxMSArMTc0MiwyMCBAQAogc3RhdGljIGlubGluZSBpbnQgX2Rhc2RfdGVybV9ydW5uaW5nX2NxcihzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CisJaW50IHJjOwogCiAJaWYgKGxpc3RfZW1wdHkoJmRldmljZS0+Y2N3X3F1ZXVlKSkKIAkJcmV0dXJuIDA7CiAJY3FyID0gbGlzdF9lbnRyeShkZXZpY2UtPmNjd19xdWV1ZS5uZXh0LCBzdHJ1Y3QgZGFzZF9jY3dfcmVxLCBkZXZsaXN0KTsKLQlyZXR1cm4gZGV2aWNlLT5kaXNjaXBsaW5lLT50ZXJtX0lPKGNxcik7CisJcmMgPSBkZXZpY2UtPmRpc2NpcGxpbmUtPnRlcm1fSU8oY3FyKTsKKwlpZiAoIXJjKQorCQkvKgorCQkgKiBDUVIgdGVybWluYXRlZCBiZWNhdXNlIGEgbW9yZSBpbXBvcnRhbnQgcmVxdWVzdCBpcyBwZW5kaW5nLgorCQkgKiBVbmRvIGRlY3JlYXNpbmcgb2YgcmV0cnkgY291bnRlciBiZWNhdXNlIHRoaXMgaXMKKwkJICogbm90IGFuIGVycm9yIGNhc2UuCisJCSAqLworCQljcXItPnJldHJpZXMrKzsKKwlyZXR1cm4gcmM7CiB9CiAKIGludCBkYXNkX3NsZWVwX29uX2ltbWVkaWF0bHkoc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyKQpAQCAtMjMxNCwxNSArMjMyMywxNCBAQAogCiBzdGF0aWMgaW50IGRhc2Rfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZTsKIAlpbnQgcmM7CiAKLQlpZiAoIWJsb2NrKQorCWJhc2UgPSBkYXNkX2RldmljZV9mcm9tX2dlbmRpc2soYmRldi0+YmRfZGlzayk7CisJaWYgKCFiYXNlKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWJhc2UgPSBibG9jay0+YmFzZTsKLQlhdG9taWNfaW5jKCZibG9jay0+b3Blbl9jb3VudCk7CisJYXRvbWljX2luYygmYmFzZS0+YmxvY2stPm9wZW5fY291bnQpOwogCWlmICh0ZXN0X2JpdChEQVNEX0ZMQUdfT0ZGTElORSwgJmJhc2UtPmZsYWdzKSkgewogCQlyYyA9IC1FTk9ERVY7CiAJCWdvdG8gdW5sb2NrOwpAQCAtMjM1NSwyMSArMjM2MywyOCBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlkYXNkX3B1dF9kZXZpY2UoYmFzZSk7CiAJcmV0dXJuIDA7CiAKIG91dDoKIAltb2R1bGVfcHV0KGJhc2UtPmRpc2NpcGxpbmUtPm93bmVyKTsKIHVubG9jazoKLQlhdG9taWNfZGVjKCZibG9jay0+b3Blbl9jb3VudCk7CisJYXRvbWljX2RlYygmYmFzZS0+YmxvY2stPm9wZW5fY291bnQpOworCWRhc2RfcHV0X2RldmljZShiYXNlKTsKIAlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgZGFzZF9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrID0gZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZTsKIAotCWF0b21pY19kZWMoJmJsb2NrLT5vcGVuX2NvdW50KTsKLQltb2R1bGVfcHV0KGJsb2NrLT5iYXNlLT5kaXNjaXBsaW5lLT5vd25lcik7CisJYmFzZSA9IGRhc2RfZGV2aWNlX2Zyb21fZ2VuZGlzayhkaXNrKTsKKwlpZiAoIWJhc2UpCisJCXJldHVybiAtRU5PREVWOworCisJYXRvbWljX2RlYygmYmFzZS0+YmxvY2stPm9wZW5fY291bnQpOworCW1vZHVsZV9wdXQoYmFzZS0+ZGlzY2lwbGluZS0+b3duZXIpOworCWRhc2RfcHV0X2RldmljZShiYXNlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjM3OCwyMCArMjM5MywyMCBAQAogICovCiBzdGF0aWMgaW50IGRhc2RfZ2V0Z2VvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBoZF9nZW9tZXRyeSAqZ2VvKQogewotCXN0cnVjdCBkYXNkX2Jsb2NrICpibG9jazsKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2U7CiAKLQlibG9jayA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKLQlpZiAoIWJsb2NrKQorCWJhc2UgPSBkYXNkX2RldmljZV9mcm9tX2dlbmRpc2soYmRldi0+YmRfZGlzayk7CisJaWYgKCFiYXNlKQogCQlyZXR1cm4gLUVOT0RFVjsKLQliYXNlID0gYmxvY2stPmJhc2U7CiAKIAlpZiAoIWJhc2UtPmRpc2NpcGxpbmUgfHwKLQkgICAgIWJhc2UtPmRpc2NpcGxpbmUtPmZpbGxfZ2VvbWV0cnkpCisJICAgICFiYXNlLT5kaXNjaXBsaW5lLT5maWxsX2dlb21ldHJ5KSB7CisJCWRhc2RfcHV0X2RldmljZShiYXNlKTsKIAkJcmV0dXJuIC1FSU5WQUw7Ci0KLQliYXNlLT5kaXNjaXBsaW5lLT5maWxsX2dlb21ldHJ5KGJsb2NrLCBnZW8pOwotCWdlby0+c3RhcnQgPSBnZXRfc3RhcnRfc2VjdChiZGV2KSA+PiBibG9jay0+czJiX3NoaWZ0OworCX0KKwliYXNlLT5kaXNjaXBsaW5lLT5maWxsX2dlb21ldHJ5KGJhc2UtPmJsb2NrLCBnZW8pOworCWdlby0+c3RhcnQgPSBnZXRfc3RhcnRfc2VjdChiZGV2KSA+PiBiYXNlLT5ibG9jay0+czJiX3NoaWZ0OworCWRhc2RfcHV0X2RldmljZShiYXNlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjUyOCw3ICsyNTQzLDYgQEAKIAlkYXNkX3NldF90YXJnZXRfc3RhdGUoZGV2aWNlLCBEQVNEX1NUQVRFX05FVyk7CiAJLyogZGFzZF9kZWxldGVfZGV2aWNlIGRlc3Ryb3lzIHRoZSBkZXZpY2UgcmVmZXJlbmNlLiAqLwogCWJsb2NrID0gZGV2aWNlLT5ibG9jazsKLQlkZXZpY2UtPmJsb2NrID0gTlVMTDsKIAlkYXNkX2RlbGV0ZV9kZXZpY2UoZGV2aWNlKTsKIAkvKgogCSAqIGxpZmUgY3ljbGUgb2YgYmxvY2sgaXMgYm91bmQgdG8gZGV2aWNlLCBzbyBkZWxldGUgaXQgYWZ0ZXIKQEAgLTI2NTAsNyArMjY2NCw2IEBACiAJZGFzZF9zZXRfdGFyZ2V0X3N0YXRlKGRldmljZSwgREFTRF9TVEFURV9ORVcpOwogCS8qIGRhc2RfZGVsZXRlX2RldmljZSBkZXN0cm95cyB0aGUgZGV2aWNlIHJlZmVyZW5jZS4gKi8KIAlibG9jayA9IGRldmljZS0+YmxvY2s7Ci0JZGV2aWNlLT5ibG9jayA9IE5VTEw7CiAJZGFzZF9kZWxldGVfZGV2aWNlKGRldmljZSk7CiAJLyoKIAkgKiBsaWZlIGN5Y2xlIG9mIGJsb2NrIGlzIGJvdW5kIHRvIGRldmljZSwgc28gZGVsZXRlIGl0IGFmdGVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCmluZGV4IDQyZTFiZjMuLmQ3MTUxMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCkBAIC02NzQsNiArNjc0LDM2IEBACiAJcmV0dXJuIGRldmljZTsKIH0KIAordm9pZCBkYXNkX2FkZF9saW5rX3RvX2dlbmRpc2soc3RydWN0IGdlbmRpc2sgKmdkcCwgc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IGRhc2RfZGV2bWFwICpkZXZtYXA7CisKKwlkZXZtYXAgPSBkYXNkX2ZpbmRfYnVzaWQoZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJaWYgKElTX0VSUihkZXZtYXApKQorCQlyZXR1cm47CisJc3Bpbl9sb2NrKCZkYXNkX2Rldm1hcF9sb2NrKTsKKwlnZHAtPnByaXZhdGVfZGF0YSA9IGRldm1hcDsKKwlzcGluX3VubG9jaygmZGFzZF9kZXZtYXBfbG9jayk7Cit9CisKK3N0cnVjdCBkYXNkX2RldmljZSAqZGFzZF9kZXZpY2VfZnJvbV9nZW5kaXNrKHN0cnVjdCBnZW5kaXNrICpnZHApCit7CisJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2U7CisJc3RydWN0IGRhc2RfZGV2bWFwICpkZXZtYXA7CisKKwlpZiAoIWdkcC0+cHJpdmF0ZV9kYXRhKQorCQlyZXR1cm4gTlVMTDsKKwlkZXZpY2UgPSBOVUxMOworCXNwaW5fbG9jaygmZGFzZF9kZXZtYXBfbG9jayk7CisJZGV2bWFwID0gZ2RwLT5wcml2YXRlX2RhdGE7CisJaWYgKGRldm1hcCAmJiBkZXZtYXAtPmRldmljZSkgeworCQlkZXZpY2UgPSBkZXZtYXAtPmRldmljZTsKKwkJZGFzZF9nZXRfZGV2aWNlKGRldmljZSk7CisJfQorCXNwaW5fdW5sb2NrKCZkYXNkX2Rldm1hcF9sb2NrKTsKKwlyZXR1cm4gZGV2aWNlOworfQorCiAvKgogICogU0VDVElPTjogZmlsZXMgaW4gc3lzZnMKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCmluZGV4IDI5MTQzZWQuLjg1ZGRkYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMKQEAgLTIzOSw3ICsyMzksNiBAQAogCWFkZHJfdCBpcDsKIAlpbnQgcmM7CiAKLQlrc3RhdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKS5pcnFzW0VYVElOVF9EU0RdKys7CiAJc3dpdGNoIChleHRfaW50X2NvZGUgPj4gMjQpIHsKIAljYXNlIERBU0RfRElBR19DT0RFXzMxQklUOgogCQlpcCA9IChhZGRyX3QpIHBhcmFtMzI7CkBAIC0yNTAsNiArMjQ5LDcgQEAKIAlkZWZhdWx0OgogCQlyZXR1cm47CiAJfQorCWtzdGF0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpLmlycXNbRVhUSU5UX0RTRF0rKzsKIAlpZiAoIWlwKSB7CQkvKiBubyBpbnRwYXJtOiB1bnNvbGljaXRlZCBpbnRlcnJ1cHQgKi8KIAkJREJGX0VWRU5UKERCRl9OT1RJQ0UsICIlcyIsICJjYXVnaHQgdW5zb2xpY2l0ZWQgIgogCQkJICAgICAgImludGVycnVwdCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCmluZGV4IGRiODAwNWQuLjNlYmRmNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKQEAgLTIwMzcsNyArMjAzNyw3IEBACiAJCXJldHVybjsKIAogCS8qIHN1bW1hcnkgdW5pdCBjaGVjayAqLwotCWlmICgoc2Vuc2VbN10gPT0gMHgwRCkgJiYKKwlpZiAoKHNlbnNlWzI3XSAmIERBU0RfU0VOU0VfQklUXzApICYmIChzZW5zZVs3XSA9PSAweDBEKSAmJgogCSAgICAoc2Nzd19kc3RhdCgmaXJiLT5zY3N3KSAmIERFVl9TVEFUX1VOSVRfQ0hFQ0spKSB7CiAJCWRhc2RfYWxpYXNfaGFuZGxlX3N1bW1hcnlfdW5pdF9jaGVjayhkZXZpY2UsIGlyYik7CiAJCXJldHVybjsKQEAgLTIwNTMsNyArMjA1Myw4IEBACiAJLyogbG9zcyBvZiBkZXZpY2UgcmVzZXJ2YXRpb24gaXMgaGFuZGxlZCB2aWEgYmFzZSBkZXZpY2VzIG9ubHkKIAkgKiBhcyBhbGlhcyBkZXZpY2VzIG1heSBiZSB1c2VkIHdpdGggc2V2ZXJhbCBiYXNlcwogCSAqLwotCWlmIChkZXZpY2UtPmJsb2NrICYmIChzZW5zZVs3XSA9PSAweDNGKSAmJgorCWlmIChkZXZpY2UtPmJsb2NrICYmIChzZW5zZVsyN10gJiBEQVNEX1NFTlNFX0JJVF8wKSAmJgorCSAgICAoc2Vuc2VbN10gPT0gMHgzRikgJiYKIAkgICAgKHNjc3dfZHN0YXQoJmlyYi0+c2NzdykgJiBERVZfU1RBVF9VTklUX0NIRUNLKSAmJgogCSAgICB0ZXN0X2JpdChEQVNEX0ZMQUdfSVNfUkVTRVJWRUQsICZkZXZpY2UtPmZsYWdzKSkgewogCQlpZiAoZGV2aWNlLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9GQUlMT05TTENLKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMKaW5kZXggNTUwNWJjMC4uMTlhMWZmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jCkBAIC03Myw3ICs3Myw3IEBACiAJaWYgKGJhc2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX1JFQURPTkxZIHx8CiAJICAgIHRlc3RfYml0KERBU0RfRkxBR19ERVZJQ0VfUk8sICZiYXNlLT5mbGFncykpCiAJCXNldF9kaXNrX3JvKGdkcCwgMSk7Ci0JZ2RwLT5wcml2YXRlX2RhdGEgPSBibG9jazsKKwlkYXNkX2FkZF9saW5rX3RvX2dlbmRpc2soZ2RwLCBiYXNlKTsKIAlnZHAtPnF1ZXVlID0gYmxvY2stPnJlcXVlc3RfcXVldWU7CiAJYmxvY2stPmdkcCA9IGdkcDsKIAlzZXRfY2FwYWNpdHkoYmxvY2stPmdkcCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaCBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCmluZGV4IGRmOWY2OTkuLmQxZTRmMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCkBAIC02ODYsNiArNjg2LDkgQEAKIHN0cnVjdCBkYXNkX2RldmljZSAqZGFzZF9kZXZpY2VfZnJvbV9jZGV2X2xvY2tlZChzdHJ1Y3QgY2N3X2RldmljZSAqKTsKIHN0cnVjdCBkYXNkX2RldmljZSAqZGFzZF9kZXZpY2VfZnJvbV9kZXZpbmRleChpbnQpOwogCit2b2lkIGRhc2RfYWRkX2xpbmtfdG9fZ2VuZGlzayhzdHJ1Y3QgZ2VuZGlzayAqLCBzdHJ1Y3QgZGFzZF9kZXZpY2UgKik7CitzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRhc2RfZGV2aWNlX2Zyb21fZ2VuZGlzayhzdHJ1Y3QgZ2VuZGlzayAqKTsKKwogaW50IGRhc2RfcGFyc2Uodm9pZCk7CiBpbnQgZGFzZF9idXNpZF9rbm93bihjb25zdCBjaGFyICopOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pb2N0bC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW9jdGwuYwppbmRleCAyNjA3NWU5Li43MjI2MWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMKQEAgLTQyLDE2ICs0MiwyMiBAQAogc3RhdGljIGludAogZGFzZF9pb2N0bF9lbmFibGUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKIHsKLQlzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2sgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRhc2RfZGV2aWNlICpiYXNlOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVBQ0NFUzsKIAotCWRhc2RfZW5hYmxlX2RldmljZShibG9jay0+YmFzZSk7CisJYmFzZSA9IGRhc2RfZGV2aWNlX2Zyb21fZ2VuZGlzayhiZGV2LT5iZF9kaXNrKTsKKwlpZiAoIWJhc2UpCisJCXJldHVybiAtRU5PREVWOworCisJZGFzZF9lbmFibGVfZGV2aWNlKGJhc2UpOwogCS8qIEZvcm1hdHRpbmcgdGhlIGRhc2QgZGV2aWNlIGNhbiBjaGFuZ2UgdGhlIGNhcGFjaXR5LiAqLwogCW11dGV4X2xvY2soJmJkZXYtPmJkX211dGV4KTsKLQlpX3NpemVfd3JpdGUoYmRldi0+YmRfaW5vZGUsIChsb2ZmX3QpZ2V0X2NhcGFjaXR5KGJsb2NrLT5nZHApIDw8IDkpOworCWlfc2l6ZV93cml0ZShiZGV2LT5iZF9pbm9kZSwKKwkJICAgICAobG9mZl90KWdldF9jYXBhY2l0eShiYXNlLT5ibG9jay0+Z2RwKSA8PCA5KTsKIAltdXRleF91bmxvY2soJmJkZXYtPmJkX211dGV4KTsKKwlkYXNkX3B1dF9kZXZpY2UoYmFzZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYyLDExICs2OCwxNCBAQAogc3RhdGljIGludAogZGFzZF9pb2N0bF9kaXNhYmxlKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCiB7Ci0Jc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZTsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FQUNDRVM7CiAKKwliYXNlID0gZGFzZF9kZXZpY2VfZnJvbV9nZW5kaXNrKGJkZXYtPmJkX2Rpc2spOworCWlmICghYmFzZSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAJLyoKIAkgKiBNYW4gdGhpcyBpcyBzaWNrLiBXZSBkb24ndCBkbyBhIHJlYWwgZGlzYWJsZSBidXQgb25seSBkb3duZ3JhZGUKIAkgKiB0aGUgZGV2aWNlIHRvIERBU0RfU1RBVEVfQkFTSUMuIFRoZSByZWFzb24gaXMgdGhhdCBkYXNkZm10IHVzZXMKQEAgLTc1LDcgKzg0LDcgQEAKIAkgKiB1c2luZyB0aGUgQklPREFTREZNVCBpb2N0bC4gVGhlcmVmb3JlIHRoZSBjb3JyZWN0IHN0YXRlIGZvciB0aGUKIAkgKiBkZXZpY2UgaXMgREFTRF9TVEFURV9CQVNJQyB0aGF0IGFsbG93cyB0byBkbyBiYXNpYyBpL28uCiAJICovCi0JZGFzZF9zZXRfdGFyZ2V0X3N0YXRlKGJsb2NrLT5iYXNlLCBEQVNEX1NUQVRFX0JBU0lDKTsKKwlkYXNkX3NldF90YXJnZXRfc3RhdGUoYmFzZSwgREFTRF9TVEFURV9CQVNJQyk7CiAJLyoKIAkgKiBTZXQgaV9zaXplIHRvIHplcm8sIHNpbmNlIHJlYWQsIHdyaXRlLCBldGMuIGNoZWNrIGFnYWluc3QgdGhpcwogCSAqIHZhbHVlLgpAQCAtODMsNiArOTIsNyBAQAogCW11dGV4X2xvY2soJmJkZXYtPmJkX211dGV4KTsKIAlpX3NpemVfd3JpdGUoYmRldi0+YmRfaW5vZGUsIDApOwogCW11dGV4X3VubG9jaygmYmRldi0+YmRfbXV0ZXgpOworCWRhc2RfcHV0X2RldmljZShiYXNlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTkxLDI2ICsyMDEsMzYgQEAKIHN0YXRpYyBpbnQKIGRhc2RfaW9jdGxfZm9ybWF0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHZvaWQgX191c2VyICphcmdwKQogewotCXN0cnVjdCBkYXNkX2Jsb2NrICpibG9jayA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2U7CiAJc3RydWN0IGZvcm1hdF9kYXRhX3QgZmRhdGE7CisJaW50IHJjOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVBQ0NFUzsKIAlpZiAoIWFyZ3ApCiAJCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGJsb2NrLT5iYXNlLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9SRUFET05MWSB8fAotCSAgICB0ZXN0X2JpdChEQVNEX0ZMQUdfREVWSUNFX1JPLCAmYmxvY2stPmJhc2UtPmZsYWdzKSkKKwliYXNlID0gZGFzZF9kZXZpY2VfZnJvbV9nZW5kaXNrKGJkZXYtPmJkX2Rpc2spOworCWlmICghYmFzZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKGJhc2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX1JFQURPTkxZIHx8CisJICAgIHRlc3RfYml0KERBU0RfRkxBR19ERVZJQ0VfUk8sICZiYXNlLT5mbGFncykpIHsKKwkJZGFzZF9wdXRfZGV2aWNlKGJhc2UpOwogCQlyZXR1cm4gLUVST0ZTOwotCWlmIChjb3B5X2Zyb21fdXNlcigmZmRhdGEsIGFyZ3AsIHNpemVvZihzdHJ1Y3QgZm9ybWF0X2RhdGFfdCkpKQorCX0KKwlpZiAoY29weV9mcm9tX3VzZXIoJmZkYXRhLCBhcmdwLCBzaXplb2Yoc3RydWN0IGZvcm1hdF9kYXRhX3QpKSkgeworCQlkYXNkX3B1dF9kZXZpY2UoYmFzZSk7CiAJCXJldHVybiAtRUZBVUxUOworCX0KIAlpZiAoYmRldiAhPSBiZGV2LT5iZF9jb250YWlucykgewogCQlwcl93YXJuaW5nKCIlczogVGhlIHNwZWNpZmllZCBEQVNEIGlzIGEgcGFydGl0aW9uIGFuZCBjYW5ub3QgIgogCQkJICAgImJlIGZvcm1hdHRlZFxuIiwKLQkJCSAgIGRldl9uYW1lKCZibG9jay0+YmFzZS0+Y2Rldi0+ZGV2KSk7CisJCQkgICBkZXZfbmFtZSgmYmFzZS0+Y2Rldi0+ZGV2KSk7CisJCWRhc2RfcHV0X2RldmljZShiYXNlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXJldHVybiBkYXNkX2Zvcm1hdChibG9jaywgJmZkYXRhKTsKKwlyYyA9IGRhc2RfZm9ybWF0KGJhc2UtPmJsb2NrLCAmZmRhdGEpOworCWRhc2RfcHV0X2RldmljZShiYXNlKTsKKwlyZXR1cm4gcmM7CiB9CiAKICNpZmRlZiBDT05GSUdfREFTRF9QUk9GSUxFCkBAIC0zNDAsOCArMzYwLDggQEAKIHN0YXRpYyBpbnQKIGRhc2RfaW9jdGxfc2V0X3JvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHZvaWQgX191c2VyICphcmdwKQogewotCXN0cnVjdCBkYXNkX2Jsb2NrICpibG9jayA9ICBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7Ci0JaW50IGludHZhbDsKKwlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2U7CisJaW50IGludHZhbCwgcmM7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwpAQCAtMzUwLDEwICszNzAsMTcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGdldF91c2VyKGludHZhbCwgKGludCBfX3VzZXIgKilhcmdwKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKCFpbnR2YWwgJiYgdGVzdF9iaXQoREFTRF9GTEFHX0RFVklDRV9STywgJmJsb2NrLT5iYXNlLT5mbGFncykpCisJYmFzZSA9IGRhc2RfZGV2aWNlX2Zyb21fZ2VuZGlzayhiZGV2LT5iZF9kaXNrKTsKKwlpZiAoIWJhc2UpCisJCXJldHVybiAtRU5PREVWOworCWlmICghaW50dmFsICYmIHRlc3RfYml0KERBU0RfRkxBR19ERVZJQ0VfUk8sICZiYXNlLT5mbGFncykpIHsKKwkJZGFzZF9wdXRfZGV2aWNlKGJhc2UpOwogCQlyZXR1cm4gLUVST0ZTOworCX0KIAlzZXRfZGlza19ybyhiZGV2LT5iZF9kaXNrLCBpbnR2YWwpOwotCXJldHVybiBkYXNkX3NldF9mZWF0dXJlKGJsb2NrLT5iYXNlLT5jZGV2LCBEQVNEX0ZFQVRVUkVfUkVBRE9OTFksIGludHZhbCk7CisJcmMgPSBkYXNkX3NldF9mZWF0dXJlKGJhc2UtPmNkZXYsIERBU0RfRkVBVFVSRV9SRUFET05MWSwgaW50dmFsKTsKKwlkYXNkX3B1dF9kZXZpY2UoYmFzZSk7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IGRhc2RfaW9jdGxfcmVhZGFsbF9jbWIoc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrLCB1bnNpZ25lZCBpbnQgY21kLApAQCAtMzcyLDU5ICszOTksNzggQEAKIGludCBkYXNkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKIAkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkYXNkX2Jsb2NrICpibG9jazsKKwlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2U7CiAJdm9pZCBfX3VzZXIgKmFyZ3A7CisJaW50IHJjOwogCiAJaWYgKGlzX2NvbXBhdF90YXNrKCkpCiAJCWFyZ3AgPSBjb21wYXRfcHRyKGFyZyk7CiAJZWxzZQogCQlhcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCi0JaWYgKCFibG9jaykKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKLQogCWlmICgoX0lPQ19ESVIoY21kKSAhPSBfSU9DX05PTkUpICYmICFhcmcpIHsKIAkJUFJJTlRfREVCVUcoImVtcHR5IGRhdGEgcHRyIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWJhc2UgPSBkYXNkX2RldmljZV9mcm9tX2dlbmRpc2soYmRldi0+YmRfZGlzayk7CisJaWYgKCFiYXNlKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlibG9jayA9IGJhc2UtPmJsb2NrOworCXJjID0gMDsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgQklPREFTRERJU0FCTEU6Ci0JCXJldHVybiBkYXNkX2lvY3RsX2Rpc2FibGUoYmRldik7CisJCXJjID0gZGFzZF9pb2N0bF9kaXNhYmxlKGJkZXYpOworCQlicmVhazsKIAljYXNlIEJJT0RBU0RFTkFCTEU6Ci0JCXJldHVybiBkYXNkX2lvY3RsX2VuYWJsZShiZGV2KTsKKwkJcmMgPSBkYXNkX2lvY3RsX2VuYWJsZShiZGV2KTsKKwkJYnJlYWs7CiAJY2FzZSBCSU9EQVNEUVVJRVNDRToKLQkJcmV0dXJuIGRhc2RfaW9jdGxfcXVpZXNjZShibG9jayk7CisJCXJjID0gZGFzZF9pb2N0bF9xdWllc2NlKGJsb2NrKTsKKwkJYnJlYWs7CiAJY2FzZSBCSU9EQVNEUkVTVU1FOgotCQlyZXR1cm4gZGFzZF9pb2N0bF9yZXN1bWUoYmxvY2spOworCQlyYyA9IGRhc2RfaW9jdGxfcmVzdW1lKGJsb2NrKTsKKwkJYnJlYWs7CiAJY2FzZSBCSU9EQVNERk1UOgotCQlyZXR1cm4gZGFzZF9pb2N0bF9mb3JtYXQoYmRldiwgYXJncCk7CisJCXJjID0gZGFzZF9pb2N0bF9mb3JtYXQoYmRldiwgYXJncCk7CisJCWJyZWFrOwogCWNhc2UgQklPREFTRElORk86Ci0JCXJldHVybiBkYXNkX2lvY3RsX2luZm9ybWF0aW9uKGJsb2NrLCBjbWQsIGFyZ3ApOworCQlyYyA9IGRhc2RfaW9jdGxfaW5mb3JtYXRpb24oYmxvY2ssIGNtZCwgYXJncCk7CisJCWJyZWFrOwogCWNhc2UgQklPREFTRElORk8yOgotCQlyZXR1cm4gZGFzZF9pb2N0bF9pbmZvcm1hdGlvbihibG9jaywgY21kLCBhcmdwKTsKKwkJcmMgPSBkYXNkX2lvY3RsX2luZm9ybWF0aW9uKGJsb2NrLCBjbWQsIGFyZ3ApOworCQlicmVhazsKIAljYXNlIEJJT0RBU0RQUlJEOgotCQlyZXR1cm4gZGFzZF9pb2N0bF9yZWFkX3Byb2ZpbGUoYmxvY2ssIGFyZ3ApOworCQlyYyA9IGRhc2RfaW9jdGxfcmVhZF9wcm9maWxlKGJsb2NrLCBhcmdwKTsKKwkJYnJlYWs7CiAJY2FzZSBCSU9EQVNEUFJSU1Q6Ci0JCXJldHVybiBkYXNkX2lvY3RsX3Jlc2V0X3Byb2ZpbGUoYmxvY2spOworCQlyYyA9IGRhc2RfaW9jdGxfcmVzZXRfcHJvZmlsZShibG9jayk7CisJCWJyZWFrOwogCWNhc2UgQkxLUk9TRVQ6Ci0JCXJldHVybiBkYXNkX2lvY3RsX3NldF9ybyhiZGV2LCBhcmdwKTsKKwkJcmMgPSBkYXNkX2lvY3RsX3NldF9ybyhiZGV2LCBhcmdwKTsKKwkJYnJlYWs7CiAJY2FzZSBEQVNEQVBJVkVSOgotCQlyZXR1cm4gZGFzZF9pb2N0bF9hcGlfdmVyc2lvbihhcmdwKTsKKwkJcmMgPSBkYXNkX2lvY3RsX2FwaV92ZXJzaW9uKGFyZ3ApOworCQlicmVhazsKIAljYXNlIEJJT0RBU0RDTUZFTkFCTEU6Ci0JCXJldHVybiBlbmFibGVfY21mKGJsb2NrLT5iYXNlLT5jZGV2KTsKKwkJcmMgPSBlbmFibGVfY21mKGJhc2UtPmNkZXYpOworCQlicmVhazsKIAljYXNlIEJJT0RBU0RDTUZESVNBQkxFOgotCQlyZXR1cm4gZGlzYWJsZV9jbWYoYmxvY2stPmJhc2UtPmNkZXYpOworCQlyYyA9IGRpc2FibGVfY21mKGJhc2UtPmNkZXYpOworCQlicmVhazsKIAljYXNlIEJJT0RBU0RSRUFEQUxMQ01COgotCQlyZXR1cm4gZGFzZF9pb2N0bF9yZWFkYWxsX2NtYihibG9jaywgY21kLCBhcmdwKTsKKwkJcmMgPSBkYXNkX2lvY3RsX3JlYWRhbGxfY21iKGJsb2NrLCBjbWQsIGFyZ3ApOworCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBpZiB0aGUgZGlzY2lwbGluZSBoYXMgYW4gaW9jdGwgbWV0aG9kIHRyeSBpdC4gKi8KLQkJaWYgKGJsb2NrLT5iYXNlLT5kaXNjaXBsaW5lLT5pb2N0bCkgewotCQkJaW50IHJ2YWwgPSBibG9jay0+YmFzZS0+ZGlzY2lwbGluZS0+aW9jdGwoYmxvY2ssIGNtZCwgYXJncCk7Ci0JCQlpZiAocnZhbCAhPSAtRU5PSU9DVExDTUQpCi0JCQkJcmV0dXJuIHJ2YWw7Ci0JCX0KLQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGJhc2UtPmRpc2NpcGxpbmUtPmlvY3RsKSB7CisJCQlyYyA9IGJhc2UtPmRpc2NpcGxpbmUtPmlvY3RsKGJsb2NrLCBjbWQsIGFyZ3ApOworCQkJaWYgKHJjID09IC1FTk9JT0NUTENNRCkKKwkJCQlyYyA9IC1FSU5WQUw7CisJCX0gZWxzZQorCQkJcmMgPSAtRUlOVkFMOwogCX0KKwlkYXNkX3B1dF9kZXZpY2UoYmFzZSk7CisJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9jbWQuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfY21kLmMKaW5kZXggNGI2MGVkZS4uYmU1NWZiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9jbWQuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2NtZC5jCkBAIC01MTgsNiArNTE4LDggQEAKIAkJcmV0dXJuOwogCW5ld19pbmNyLT5ybiA9IHJuOwogCW5ld19pbmNyLT5zdGFuZGJ5ID0gc3RhbmRieTsKKwlpZiAoIXN0YW5kYnkpCisJCW5ld19pbmNyLT51c2Vjb3VudCA9IDE7CiAJbGFzdF9ybiA9IDA7CiAJcHJldiA9ICZzY2xwX21lbV9saXN0OwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaW5jciwgJnNjbHBfbWVtX2xpc3QsIGxpc3QpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYwppbmRleCA4M2NlYTlhLi4xYjM5MjRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCkBAIC0yMzYsNyArMjM2LDYgQEAKIAlkaXNrLT5tYWpvciA9IHRhcGVibG9ja19tYWpvcjsKIAlkaXNrLT5maXJzdF9taW5vciA9IGRldmljZS0+Zmlyc3RfbWlub3I7CiAJZGlzay0+Zm9wcyA9ICZ0YXBlYmxvY2tfZm9wczsKLQlkaXNrLT5ldmVudHMgPSBESVNLX0VWRU5UX01FRElBX0NIQU5HRTsKIAlkaXNrLT5wcml2YXRlX2RhdGEgPSB0YXBlX2dldF9kZXZpY2UoZGV2aWNlKTsKIAlkaXNrLT5xdWV1ZSA9IGJsa2RhdC0+cmVxdWVzdF9xdWV1ZTsKIAlzZXRfY2FwYWNpdHkoZGlzaywgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYwppbmRleCBjNTMyYmE5Li5lOGYyNjdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKQEAgLTQwNyw4ICs0MDcsMTEgQEAKIAlxLT5xX3N0YXRzLm5yX3NiYWxzW3Bvc10rKzsKIH0KIAotc3RhdGljIHZvaWQgYW5ub3VuY2VfYnVmZmVyX2Vycm9yKHN0cnVjdCBxZGlvX3EgKnEsIGludCBjb3VudCkKK3N0YXRpYyB2b2lkIHByb2Nlc3NfYnVmZmVyX2Vycm9yKHN0cnVjdCBxZGlvX3EgKnEsIGludCBjb3VudCkKIHsKKwl1bnNpZ25lZCBjaGFyIHN0YXRlID0gKHEtPmlzX2lucHV0X3EpID8gU0xTQl9QX0lOUFVUX05PVF9JTklUIDoKKwkJCQkJU0xTQl9QX09VVFBVVF9OT1RfSU5JVDsKKwogCXEtPnFkaW9fZXJyb3IgfD0gUURJT19FUlJPUl9TTFNCX1NUQVRFOwogCiAJLyogc3BlY2lhbCBoYW5kbGluZyBmb3Igbm8gdGFyZ2V0IGJ1ZmZlciBlbXB0eSAqLwpAQCAtNDI2LDYgKzQyOSwxMiBAQAogCURCRl9FUlJPUigiRjE0OiUyeCBGMTU6JTJ4IiwKIAkJICBxLT5zYmFsW3EtPmZpcnN0X3RvX2NoZWNrXS0+ZWxlbWVudFsxNF0uZmxhZ3MgJiAweGZmLAogCQkgIHEtPnNiYWxbcS0+Zmlyc3RfdG9fY2hlY2tdLT5lbGVtZW50WzE1XS5mbGFncyAmIDB4ZmYpOworCisJLyoKKwkgKiBJbnRlcnJ1cHRzIG1heSBiZSBhdm9pZGVkIGFzIGxvbmcgYXMgdGhlIGVycm9yIGlzIHByZXNlbnQKKwkgKiBzbyBjaGFuZ2UgdGhlIGJ1ZmZlciBzdGF0ZSBpbW1lZGlhdGVseSB0byBhdm9pZCBzdGFydmF0aW9uLgorCSAqLworCXNldF9idWZfc3RhdGVzKHEsIHEtPmZpcnN0X3RvX2NoZWNrLCBzdGF0ZSwgY291bnQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5ib3VuZF9wcmltZWQoc3RydWN0IHFkaW9fcSAqcSwgaW50IGNvdW50KQpAQCAtNTA2LDggKzUxNSw3IEBACiAJCQlhY2NvdW50X3NiYWxzKHEsIGNvdW50KTsKIAkJYnJlYWs7CiAJY2FzZSBTTFNCX1BfSU5QVVRfRVJST1I6Ci0JCWFubm91bmNlX2J1ZmZlcl9lcnJvcihxLCBjb3VudCk7Ci0JCS8qIHByb2Nlc3MgdGhlIGJ1ZmZlciwgdGhlIHVwcGVyIGxheWVyIHdpbGwgdGFrZSBjYXJlIG9mIGl0ICovCisJCXByb2Nlc3NfYnVmZmVyX2Vycm9yKHEsIGNvdW50KTsKIAkJcS0+Zmlyc3RfdG9fY2hlY2sgPSBhZGRfYnVmKHEtPmZpcnN0X3RvX2NoZWNrLCBjb3VudCk7CiAJCWF0b21pY19zdWIoY291bnQsICZxLT5ucl9idWZfdXNlZCk7CiAJCWlmIChxLT5pcnFfcHRyLT5wZXJmX3N0YXRfZW5hYmxlZCkKQEAgLTY3Nyw4ICs2ODUsNyBAQAogCQkJYWNjb3VudF9zYmFscyhxLCBjb3VudCk7CiAJCWJyZWFrOwogCWNhc2UgU0xTQl9QX09VVFBVVF9FUlJPUjoKLQkJYW5ub3VuY2VfYnVmZmVyX2Vycm9yKHEsIGNvdW50KTsKLQkJLyogcHJvY2VzcyB0aGUgYnVmZmVyLCB0aGUgdXBwZXIgbGF5ZXIgd2lsbCB0YWtlIGNhcmUgb2YgaXQgKi8KKwkJcHJvY2Vzc19idWZmZXJfZXJyb3IocSwgY291bnQpOwogCQlxLT5maXJzdF90b19jaGVjayA9IGFkZF9idWYocS0+Zmlyc3RfdG9fY2hlY2ssIGNvdW50KTsKIAkJYXRvbWljX3N1Yihjb3VudCwgJnEtPm5yX2J1Zl91c2VkKTsKIAkJaWYgKHEtPmlycV9wdHItPnBlcmZfc3RhdF9lbmFibGVkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2t2bS9rdm1fdmlydGlvLmMgYi9kcml2ZXJzL3MzOTAva3ZtL2t2bV92aXJ0aW8uYwppbmRleCA0MTQ0MjdkLi42MDc5OThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAva3ZtL2t2bV92aXJ0aW8uYworKysgYi9kcml2ZXJzL3MzOTAva3ZtL2t2bV92aXJ0aW8uYwpAQCAtMzgxLDEwICszODEsMTAgQEAKIAl1MTYgc3ViY29kZTsKIAl1MzIgcGFyYW07CiAKLQlrc3RhdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKS5pcnFzW0VYVElOVF9WUlRdKys7CiAJc3ViY29kZSA9IGV4dF9pbnRfY29kZSA+PiAxNjsKIAlpZiAoKHN1YmNvZGUgJiAweGZmMDApICE9IFZJUlRJT19TVUJDT0RFXzY0KQogCQlyZXR1cm47CisJa3N0YXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSkuaXJxc1tFWFRJTlRfVlJUXSsrOwogCiAJLyogVGhlIExTQiBtaWdodCBiZSBvdmVybG9hZGVkLCB3ZSBoYXZlIHRvIG1hc2sgaXQgKi8KIAl2cSA9IChzdHJ1Y3QgdmlydHF1ZXVlICopKHBhcmFtNjQgJiB+MVVMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jIGIvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMKaW5kZXggZGE4YWE3NS4uZjFmYTI0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMKQEAgLTg0NSwxMiArODQ1LDEwIEBACiB7CiAJc3RydWN0IGNoYmsgKiBwX2NoOwogICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAgKmRldjsKLSAgICAgICAgc3RydWN0IGNsYXdfcHJpdmJrICogICAgICAgcHJpdnB0cjsKIAogCXBfY2ggPSAoc3RydWN0IGNoYmsgKikgZGF0YTsKICAgICAgICAgZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopcF9jaC0+bmRldjsKIAlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAiSVJRdGFzayIpOwotCXByaXZwdHIgPSAoc3RydWN0IGNsYXdfcHJpdmJrICopZGV2LT5tbF9wcml2OwogICAgICAgICB1bnBhY2tfcmVhZChkZXYpOwogICAgICAgICBjbGVhcl9iaXQoQ0xBV19CSF9BQ1RJVkUsICh2b2lkICopJnBfY2gtPmZsYWdfYSk7CiAJQ0xBV19EQkZfVEVYVCg0LCB0cmFjZSwgIlRza2xldFh0Iik7CkBAIC0xMDI2LDcgKzEwMjQsNiBAQAogICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAgKmRldjsKICAgICAgICAgc3RydWN0IGNsYXdfcHJpdmJrICpwcml2cHRyPU5VTEw7CiAJc3RydWN0IHNrX2J1ZmYgKnBrX3NrYjsKLQlpbnQJcmM7CiAKIAlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAiY2xhd193cnQiKTsKICAgICAgICAgaWYgKHBfY2gtPmNsYXdfc3RhdGUgPT0gQ0xBV19TVE9QKQpAQCAtMTAzOCw3ICsxMDM1LDcgQEAKIAkgICAgIXNrYl9xdWV1ZV9lbXB0eSgmcF9jaC0+Y29sbGVjdF9xdWV1ZSkpIHsKIAkgIAlwa19za2IgPSBjbGF3X3BhY2tfc2tiKHByaXZwdHIpOwogCQl3aGlsZSAocGtfc2tiICE9IE5VTEwpIHsKLQkJCXJjID0gY2xhd19od190eCggcGtfc2tiLCBkZXYsMSk7CisJCQljbGF3X2h3X3R4KHBrX3NrYiwgZGV2LCAxKTsKIAkJCWlmIChwcml2cHRyLT53cml0ZV9mcmVlX2NvdW50ID4gMCkgewogCSAgIAkJCXBrX3NrYiA9IGNsYXdfcGFja19za2IocHJpdnB0cik7CiAJCQl9IGVsc2UKQEAgLTEzMjIsMTUgKzEzMTksMTIgQEAKICAgICAgICAgdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgICAgICAqcERhdGFBZGRyZXNzOwogICAgICAgICBzdHJ1Y3QgZW5kY2N3ICAgICAgICAgICAgICAgICAgICpwRW5kOwogICAgICAgICBzdHJ1Y3QgY2N3MSAgICAgICAgICAgICAgICAgICAgIHRlbXBDQ1c7Ci0gICAgICAgIHN0cnVjdCBjaGJrICAgICAgICAgICAgICAgICAgICAgKnBfY2g7CiAJc3RydWN0IGNsYXdfZW52CQkJKnBfZW52OwotICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2s7CiAJc3RydWN0IGNsYXdwaAkJCSpwa19oZWFkOwogCXN0cnVjdCBjaGJrCQkJKmNoOwogCiAJQ0xBV19EQkZfVEVYVCg0LCB0cmFjZSwgImh3X3R4Iik7CiAJcHJpdnB0ciA9IChzdHJ1Y3QgY2xhd19wcml2YmsgKikoZGV2LT5tbF9wcml2KTsKLQlwX2NoID0gKHN0cnVjdCBjaGJrICopJnByaXZwdHItPmNoYW5uZWxbV1JJVEVfQ0hBTk5FTF07CiAJcF9lbnYgPXByaXZwdHItPnBfZW52OwogCWNsYXdfZnJlZV93cnRfYnVmKGRldik7CS8qIENsZWFuIHVwIGZyZWUgY2hhaW4gaWYgcG9zaWJsZSAqLwogICAgICAgICAvKiAgc2NhbiB0aGUgd3JpdGUgcXVldWUgdG8gZnJlZSBhbnkgY29tcGxldGVkIHdyaXRlIHBhY2tldHMgICAqLwpAQCAtMTUxMSwxMiArMTUwNSw2IEBACiAKICAgICAgICAgfSAvKiBlbmRpZiAocF9maXJzdF9jY3chPU5VTEwpICAqLwogICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCWlmIChsaW5raWQ9PTApIHsKLSAgICAgICAgCWxvY2s9TE9DS19OTzsKLSAgICAgICAgfQotICAgICAgICBlbHNlICB7Ci0gICAgICAgICAgICAgICAgbG9jaz1MT0NLX1lFUzsKLSAgICAgICAgfQogICAgICAgICBjbGF3X3N0cnRfb3V0X0lPKGRldiApOwogICAgICAgICAvKiAgICAgIGlmIHdyaXRlIGZyZWUgY291bnQgaXMgemVybyAsIHNldCBOT0JVRkZFUiAgICAgICAqLwogCWlmIChwcml2cHRyLT53cml0ZV9mcmVlX2NvdW50PT0wKSB7CkBAIC0yODIxLDE1ICsyODA5LDExIEBACiB7CiAKIAlzdHJ1Y3QgY2xhd19wcml2YmsgKnByaXZwdHIgPSAoc3RydWN0IGNsYXdfcHJpdmJrICopZGV2LT5tbF9wcml2OwotICAgICAgICBzdHJ1Y3QgY2N3YmsqcF9maXJzdF9jY3c7Ci0Jc3RydWN0IGNjd2JrKnBfbGFzdF9jY3c7CiAJc3RydWN0IGNjd2JrKnBfdGhpc19jY3c7CiAJc3RydWN0IGNjd2JrKnBfbmV4dF9jY3c7CiAKIAlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAiZnJlZXdydGIiKTsKICAgICAgICAgLyogIHNjYW4gdGhlIHdyaXRlIHF1ZXVlIHRvIGZyZWUgYW55IGNvbXBsZXRlZCB3cml0ZSBwYWNrZXRzICAgKi8KLSAgICAgICAgcF9maXJzdF9jY3c9TlVMTDsKLSAgICAgICAgcF9sYXN0X2Njdz1OVUxMOwogICAgICAgICBwX3RoaXNfY2N3PXByaXZwdHItPnBfd3JpdGVfYWN0aXZlX2ZpcnN0OwogICAgICAgICB3aGlsZSAoIChwX3RoaXNfY2N3IT1OVUxMKSAmJiAocF90aGlzX2Njdy0+aGVhZGVyLmZsYWchPUNMQVdfUEVORElORykpCiAgICAgICAgIHsKQEAgLTMwNzIsNyArMzA1Niw3IEBACiB7CiAJc3RydWN0IGNsYXdfcHJpdmJrICpwcml2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwotCWludAlyZXQ7CisJaW50IHJldCA9IDA7CiAKIAlDTEFXX0RCRl9URVhUXygyLCBzZXR1cCwgIiVzIiwgZGV2X25hbWUoJmNnZGV2LT5kZXYpKTsKIAlwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZjZ2Rldi0+ZGV2KTsKQEAgLTMwOTUsNyArMzA3OSw3IEBACiAJfQogCWNjd19kZXZpY2Vfc2V0X29mZmxpbmUoY2dkZXYtPmNkZXZbMV0pOwogCWNjd19kZXZpY2Vfc2V0X29mZmxpbmUoY2dkZXYtPmNkZXZbMF0pOwotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX21haW4uYwppbmRleCBjMTg5Mjk2Li40MjY3ODdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tYWluLmMKQEAgLTY3Miw3ICs2NzIsNiBAQAogCWludCBjY3dfaWR4OwogCXVuc2lnbmVkIGxvbmcgaGk7CiAJdW5zaWduZWQgbG9uZyBzYXZlZmxhZ3MgPSAwOwkvKiBhdm9pZHMgY29tcGlsZXIgd2FybmluZyAqLwotCV9fdTE2IGJsb2NrX2xlbjsKIAogCUNUQ01fUFJfREVCVUcoIkVudGVyICVzOiAlcywgY3A9JWkgY2g9MHglcCBpZD0lcyBzdGF0ZT0lc1xuIiwKIAkJCV9fZnVuY19fLCBkZXYtPm5hbWUsIHNtcF9wcm9jZXNzb3JfaWQoKSwgY2gsCkBAIC03MTksNyArNzE4LDYgQEAKIAkgKi8KIAlhdG9taWNfaW5jKCZza2ItPnVzZXJzKTsKIAotCWJsb2NrX2xlbiA9IHNrYi0+bGVuICsgVEhfSEVBREVSX0xFTkdUSCArIFBEVV9IRUFERVJfTEVOR1RIOwogCS8qCiAJICogSURBTCBzdXBwb3J0IGluIENUQ00gaXMgYnJva2VuLCBzbyB3ZSBoYXZlIHRvCiAJICogY2FyZSBhYm91dCBza2IncyBhYm92ZSAyRyBvdXJzZWx2ZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbXBjLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbXBjLmMKaW5kZXggYjY0ODgxZi4uZGE0Yzc0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX21wYy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tcGMuYwpAQCAtNjUzLDcgKzY1Myw2IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJjaC0+bmV0ZGV2OwogCXN0cnVjdCBjdGNtX3ByaXYgKnByaXYgPSBkZXYtPm1sX3ByaXY7CiAJc3RydWN0IG1wY19ncm91cCAqZ3JwID0gcHJpdi0+bXBjZzsKLQlpbnQgcmMgPSAwOwogCXN0cnVjdCB0aF9zd2VlcCAqaGVhZGVyOwogCXN0cnVjdCBza19idWZmICpzd2VlcF9za2I7CiAJc3RydWN0IGNoYW5uZWwgKmNoICA9IHByaXYtPmNoYW5uZWxbQ1RDTV9XUklURV07CkBAIC02NjUsMTYgKzY2NCwxNCBAQAogCQlDVENNX0RCRl9URVhUXyhNUENfRVJST1IsIENUQ19EQkZfRVJST1IsCiAJCQkiJXMoJXMpOiBzd2VlcF9za2IgYWxsb2NhdGlvbiBFUlJPUlxuIiwKIAkJCUNUQ01fRlVOVEFJTCwgcmNoLT5pZCk7Ci0JCXJjID0gLUVOT01FTTsKLQkJCQlnb3RvIGRvbmU7CisJCWdvdG8gZG9uZTsKIAl9CiAKIAloZWFkZXIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGhfc3dlZXApLCBnZnBfdHlwZSgpKTsKIAogCWlmICghaGVhZGVyKSB7CiAJCWRldl9rZnJlZV9za2JfYW55KHN3ZWVwX3NrYik7Ci0JCXJjID0gLUVOT01FTTsKLQkJCQlnb3RvIGRvbmU7CisJCWdvdG8gZG9uZTsKIAl9CiAKIAloZWFkZXItPnRoLnRoX3NlZwk9IDB4MDAgOwpAQCAtMTM3MCw4ICsxMzY3LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAgKmRldiA9IGFyZzsKIAlzdHJ1Y3QgY3RjbV9wcml2ICAgICpwcml2OwogCXN0cnVjdCBtcGNfZ3JvdXAgKmdycDsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBjaGFubmVsICp3Y2gsICpyY2g7CisJc3RydWN0IGNoYW5uZWwgKndjaDsKIAogCUJVR19PTihkZXYgPT0gTlVMTCk7CiAJQ1RDTV9QUl9ERUJVRygiRW50ZXIgJXM6ICVzXG4iLAlfX2Z1bmNfXywgZGV2LT5uYW1lKTsKQEAgLTEzOTYsNyArMTM5Miw2IEBACiAJCWZzbV9kZWx0aW1lcigmcHJpdi0+cmVzdGFydF90aW1lcik7CiAKIAl3Y2ggPSBwcml2LT5jaGFubmVsW0NUQ01fV1JJVEVdOwotCXJjaCA9IHByaXYtPmNoYW5uZWxbQ1RDTV9SRUFEXTsKIAogCXN3aXRjaCAoZ3JwLT5zYXZlZF9zdGF0ZSkgewogCWNhc2UgTVBDR19TVEFURV9SRVNFVDoKQEAgLTE0MzUsNyArMTQzMCw3IEBACiAKIAlpZiAoZ3JwLT5zZW5kX3FsbGNfZGlzYyA9PSAxKSB7CiAJCWdycC0+c2VuZF9xbGxjX2Rpc2MgPSAwOwotCQlyYyA9IG1wY19zZW5kX3FsbGNfZGlzY29udGFjdChkZXYpOworCQltcGNfc2VuZF9xbGxjX2Rpc2NvbnRhY3QoZGV2KTsKIAl9CiAKIAkvKiBETyBOT1QgaXNzdWUgREVWX0VWRU5UX1NUT1AgZGlyZWN0bHkgb3V0IG9mIHRoaXMgY29kZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9sY3MuYyBiL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMKaW5kZXggNDlkMWNmYy4uYzNiODA2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9sY3MuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jCkBAIC0xNDgzLDcgKzE0ODMsNiBAQAogCXN0cnVjdCBsY3NfY2hhbm5lbCAqY2hhbm5lbDsKIAlzdHJ1Y3QgbGNzX2J1ZmZlciAqaW9iOwogCWludCBidWZfaWR4OwotCWludCByYzsKIAogCWNoYW5uZWwgPSAoc3RydWN0IGxjc19jaGFubmVsICopIGRhdGE7CiAJTENTX0RCRl9URVhUXyg1LCB0cmFjZSwgInRsZXQlcyIsIGRldl9uYW1lKCZjaGFubmVsLT5jY3dkZXYtPmRldikpOwpAQCAtMTUwMCwxNCArMTQ5OSwxMSBAQAogCWNoYW5uZWwtPmJ1Zl9pZHggPSBidWZfaWR4OwogCiAJaWYgKGNoYW5uZWwtPnN0YXRlID09IExDU19DSF9TVEFURV9TVE9QUEVEKQotCQkvLyBGSVhNRTogd2hhdCBpZiByYyAhPSAwID8/Ci0JCXJjID0gbGNzX3N0YXJ0X2NoYW5uZWwoY2hhbm5lbCk7CisJCWxjc19zdGFydF9jaGFubmVsKGNoYW5uZWwpOwogCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhjaGFubmVsLT5jY3dkZXYpLCBmbGFncyk7CiAJaWYgKGNoYW5uZWwtPnN0YXRlID09IExDU19DSF9TVEFURV9TVVNQRU5ERUQgJiYKLQkgICAgY2hhbm5lbC0+aW9iW2NoYW5uZWwtPmlvX2lkeF0uc3RhdGUgPT0gTENTX0JVRl9TVEFURV9SRUFEWSkgewotCQkvLyBGSVhNRTogd2hhdCBpZiByYyAhPSAwID8/Ci0JCXJjID0gX19sY3NfcmVzdW1lX2NoYW5uZWwoY2hhbm5lbCk7Ci0JfQorCSAgICBjaGFubmVsLT5pb2JbY2hhbm5lbC0+aW9faWR4XS5zdGF0ZSA9PSBMQ1NfQlVGX1NUQVRFX1JFQURZKQorCQlfX2xjc19yZXN1bWVfY2hhbm5lbChjaGFubmVsKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhjaGFubmVsLT5jY3dkZXYpLCBmbGFncyk7CiAKIAkvKiBTb21ldGhpbmcgaGFwcGVuZWQgb24gdGhlIGNoYW5uZWwuIFdha2UgdXAgd2FpdGVycy4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jIGIvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMKaW5kZXggYjZhNjM1Ni4uMzI1MTMzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMKQEAgLTE5OTQsOCArMTk5NCw2IEBACiAJCQkgICBuZXRpdWN2X3NldHVwX25ldGRldmljZSk7CiAJaWYgKCFkZXYpCiAJCXJldHVybiBOVUxMOwotCWlmIChkZXZfYWxsb2NfbmFtZShkZXYsIGRldi0+bmFtZSkgPCAwKQotCQlnb3RvIG91dF9uZXRkZXY7CiAKIAlwcml2cHRyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlwcml2cHRyLT5mc20gPSBpbml0X2ZzbSgibmV0aXVjdmRldiIsIGRldl9zdGF0ZV9uYW1lcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmggYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oCmluZGV4IGFmM2Y3YjAuLjU1YzZhYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaApAQCAtNDA3LDEyICs0MDcsNiBAQAogCWludCBuZXh0X2J1Zl90b19pbml0OwogfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCgyNTYpKSk7CiAKLS8qIHBvc3NpYmxlIHR5cGVzIG9mIHFldGggbGFyZ2Vfc2VuZCBzdXBwb3J0ICovCi1lbnVtIHFldGhfbGFyZ2Vfc2VuZF90eXBlcyB7Ci0JUUVUSF9MQVJHRV9TRU5EX05PLAotCVFFVEhfTEFSR0VfU0VORF9UU08sCi19OwotCiBzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgewogCXN0cnVjdCBxZGlvX2J1ZmZlciAqYnVmZmVyOwogCWF0b21pY190IHN0YXRlOwpAQCAtNjM3LDYgKzYzMSw4IEBACiAJX191MzIgY3N1bV9tYXNrOwogCV9fdTMyIHR4X2NzdW1fbWFzazsKIAllbnVtIHFldGhfaXBhX3Byb21pc2NfbW9kZXMgcHJvbWlzY19tb2RlOworCV9fdTMyIGRpYWdhc3Nfc3VwcG9ydDsKKwlfX3UzMiBod3RyYXA7CiB9OwogCiBzdHJ1Y3QgcWV0aF9jYXJkX29wdGlvbnMgewpAQCAtNjQ1LDEzICs2NDEsMTEgQEAKIAlzdHJ1Y3QgcWV0aF9pcGFfaW5mbyBhZHA7IC8qQWRhcHRlciBwYXJhbWV0ZXJzKi8KIAlzdHJ1Y3QgcWV0aF9yb3V0aW5nX2luZm8gcm91dGU2OwogCXN0cnVjdCBxZXRoX2lwYV9pbmZvIGlwYTY7Ci0JZW51bSBxZXRoX2NoZWNrc3VtX3R5cGVzIGNoZWNrc3VtX3R5cGU7CiAJaW50IGJyb2FkY2FzdF9tb2RlOwogCWludCBtYWNhZGRyX21vZGU7CiAJaW50IGZha2VfYnJvYWRjYXN0OwogCWludCBhZGRfaGhsZW47CiAJaW50IGxheWVyMjsKLQllbnVtIHFldGhfbGFyZ2Vfc2VuZF90eXBlcyBsYXJnZV9zZW5kOwogCWludCBwZXJmb3JtYW5jZV9zdGF0czsKIAlpbnQgcnhfc2dfY2I7CiAJZW51bSBxZXRoX2lwYV9pc29sYXRpb25fbW9kZXMgaXNvbGF0aW9uOwpAQCAtNzYwLDYgKzc1NCwxNCBAQAogCXJ3bG9ja190IHJ3bG9jazsKIH07CiAKK3N0cnVjdCBxZXRoX3RyYXBfaWQgeworCV9fdTE2IGxwYXJucjsKKwljaGFyIHZtbmFtZVs4XTsKKwlfX3U4IGNocGlkOworCV9fdTggc3NpZDsKKwlfX3UxNiBkZXZubzsKK30gX19wYWNrZWQ7CisKIC8qc29tZSBoZWxwZXIgZnVuY3Rpb25zKi8KICNkZWZpbmUgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSAoKChjYXJkKS0+ZGV2KT8gKGNhcmQpLT5kZXYtPm5hbWUgOiAiIikKIApAQCAtNzk0LDYgKzc5NiwxMiBAQAogCWxpc3RfYWRkX3RhaWwoJmVudHJ5LT5saXN0LCAmY2FyZC0+cWRpby5pbl9idWZfcG9vbC5lbnRyeV9saXN0KTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgcWV0aF9pc19kaWFnYXNzX3N1cHBvcnRlZChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAorCQllbnVtIHFldGhfZGlhZ3NfY21kcyBjbWQpCit7CisJcmV0dXJuIGNhcmQtPmluZm8uZGlhZ2Fzc19zdXBwb3J0ICYgKF9fdTMyKWNtZDsKK30KKwogZXh0ZXJuIHN0cnVjdCBjY3dncm91cF9kcml2ZXIgcWV0aF9sMl9jY3dncm91cF9kcml2ZXI7CiBleHRlcm4gc3RydWN0IGNjd2dyb3VwX2RyaXZlciBxZXRoX2wzX2Njd2dyb3VwX2RyaXZlcjsKIGNvbnN0IGNoYXIgKnFldGhfZ2V0X2NhcmRuYW1lX3Nob3J0KHN0cnVjdCBxZXRoX2NhcmQgKik7CkBAIC04NzksNiArODg3LDggQEAKIGludCBxZXRoX2NvcmVfZXRodG9vbF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGV0aHRvb2xfY21kICopOwogaW50IHFldGhfc2V0X2FjY2Vzc19jdHJsX29ubGluZShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKTsKIGludCBxZXRoX2hkcl9jaGtfYW5kX2JvdW5jZShzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQpOworaW50IHFldGhfaHdfdHJhcChzdHJ1Y3QgcWV0aF9jYXJkICosIGVudW0gcWV0aF9kaWFnc190cmFwX2FjdGlvbik7CitpbnQgcWV0aF9xdWVyeV9pcGFzc2lzdHMoc3RydWN0IHFldGhfY2FyZCAqLCBlbnVtIHFldGhfcHJvdF92ZXJzaW9ucyBwcm90KTsKIAogLyogZXhwb3J0cyBmb3IgT1NOICovCiBpbnQgcWV0aF9vc25fYXNzaXN0KHN0cnVjdCBuZXRfZGV2aWNlICosIHZvaWQgKiwgaW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYwppbmRleCA4NWNjNTMxLi41MDM2NzhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlIDxhc20vZWJjZGljLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3N5c2luZm8uaD4KIAogI2luY2x1ZGUgInFldGhfY29yZS5oIgogCkBAIC0zNDksNiArMzUwLDggQEAKIAkJCQkJICAgY2FyZC0+aW5mby5jaHBpZCk7CiAJCQkJbmV0aWZfY2Fycmllcl9vbihjYXJkLT5kZXYpOwogCQkJCWNhcmQtPmxhbl9vbmxpbmUgPSAxOworCQkJCWlmIChjYXJkLT5pbmZvLmh3dHJhcCkKKwkJCQkJY2FyZC0+aW5mby5od3RyYXAgPSAyOwogCQkJCXFldGhfc2NoZWR1bGVfcmVjb3ZlcnkoY2FyZCk7CiAJCQkJcmV0dXJuIE5VTEw7CiAJCQljYXNlIElQQV9DTURfTU9EQ0NJRDoKQEAgLTEwMzksNyArMTA0Miw2IEBACiB7CiAJY2FyZC0+b3B0aW9ucy5yb3V0ZTQudHlwZSA9IE5PX1JPVVRFUjsKIAljYXJkLT5vcHRpb25zLnJvdXRlNi50eXBlID0gTk9fUk9VVEVSOwotCWNhcmQtPm9wdGlvbnMuY2hlY2tzdW1fdHlwZSA9IFFFVEhfQ0hFQ0tTVU1fREVGQVVMVDsKIAljYXJkLT5vcHRpb25zLmJyb2FkY2FzdF9tb2RlID0gUUVUSF9UUl9CUk9BRENBU1RfQUxMUklOR1M7CiAJY2FyZC0+b3B0aW9ucy5tYWNhZGRyX21vZGUgPSBRRVRIX1RSX01BQ0FERFJfTk9OQ0FOT05JQ0FMOwogCWNhcmQtPm9wdGlvbnMuZmFrZV9icm9hZGNhc3QgPSAwOwpAQCAtMjU3NCw2ICsyNTc2LDE0MiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9xdWVyeV9zZXRhZGFwdGVycGFybXMpOwogCitzdGF0aWMgaW50IHFldGhfcXVlcnlfaXBhc3Npc3RzX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCXN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKKworCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJxaXBhc3NjYiIpOworCisJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKKwlpZiAoY21kLT5oZHIucHJvdF92ZXJzaW9uID09IFFFVEhfUFJPVF9JUFY0KSB7CisJCWNhcmQtPm9wdGlvbnMuaXBhNC5zdXBwb3J0ZWRfZnVuY3MgPSBjbWQtPmhkci5pcGFfc3VwcG9ydGVkOworCQljYXJkLT5vcHRpb25zLmlwYTQuZW5hYmxlZF9mdW5jcyA9IGNtZC0+aGRyLmlwYV9lbmFibGVkOworCX0gZWxzZSB7CisJCWNhcmQtPm9wdGlvbnMuaXBhNi5zdXBwb3J0ZWRfZnVuY3MgPSBjbWQtPmhkci5pcGFfc3VwcG9ydGVkOworCQljYXJkLT5vcHRpb25zLmlwYTYuZW5hYmxlZF9mdW5jcyA9IGNtZC0+aGRyLmlwYV9lbmFibGVkOworCX0KKwlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAic3VwcGVuYmwiKTsKKwlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIiV4IiwgY21kLT5oZHIuaXBhX3N1cHBvcnRlZCk7CisJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIleCIsIGNtZC0+aGRyLmlwYV9lbmFibGVkKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHFldGhfcXVlcnlfaXBhc3Npc3RzKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGVudW0gcWV0aF9wcm90X3ZlcnNpb25zIHByb3QpCit7CisJaW50IHJjOworCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKKworCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAicWlwYXNzaSVpIiwgcHJvdCk7CisJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBJUEFfQ01EX1FJUEFTU0lTVCwgcHJvdCk7CisJcmMgPSBxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsIHFldGhfcXVlcnlfaXBhc3Npc3RzX2NiLCBOVUxMKTsKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChxZXRoX3F1ZXJ5X2lwYXNzaXN0cyk7CisKK3N0YXRpYyBpbnQgcWV0aF9xdWVyeV9zZXRkaWFnYXNzX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisJCXN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKKwlfX3UxNiByYzsKKworCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopZGF0YTsKKwlyYyA9IGNtZC0+aGRyLnJldHVybl9jb2RlOworCWlmIChyYykKKwkJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDIsICJkaWFncToleCIsIHJjKTsKKwllbHNlCisJCWNhcmQtPmluZm8uZGlhZ2Fzc19zdXBwb3J0ID0gY21kLT5kYXRhLmRpYWdhc3MuZXh0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFldGhfcXVlcnlfc2V0ZGlhZ2FzcyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKKwlzdHJ1Y3QgcWV0aF9pcGFfY21kICAgICpjbWQ7CisKKwlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAicWRpYWdhc3MiKTsKKwlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIElQQV9DTURfU0VUX0RJQUdfQVNTLCAwKTsKKwljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CisJY21kLT5kYXRhLmRpYWdhc3Muc3ViY21kX2xlbiA9IDE2OworCWNtZC0+ZGF0YS5kaWFnYXNzLnN1YmNtZCA9IFFFVEhfRElBR1NfQ01EX1FVRVJZOworCXJldHVybiBxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsIHFldGhfcXVlcnlfc2V0ZGlhZ2Fzc19jYiwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIHFldGhfZ2V0X3RyYXBfaWQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHFldGhfdHJhcF9pZCAqdGlkKQoreworCXVuc2lnbmVkIGxvbmcgaW5mbyA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwlzdHJ1Y3Qgc3lzaW5mb18yXzJfMiAqaW5mbzIyMiA9IChzdHJ1Y3Qgc3lzaW5mb18yXzJfMiAqKWluZm87CisJc3RydWN0IHN5c2luZm9fM18yXzIgKmluZm8zMjIgPSAoc3RydWN0IHN5c2luZm9fM18yXzIgKilpbmZvOworCXN0cnVjdCBjY3dfZGV2X2lkIGNjd2lkOworCWludCBsZXZlbCwgcmM7CisKKwl0aWQtPmNocGlkID0gY2FyZC0+aW5mby5jaHBpZDsKKwljY3dfZGV2aWNlX2dldF9pZChDQVJEX1JERVYoY2FyZCksICZjY3dpZCk7CisJdGlkLT5zc2lkID0gY2N3aWQuc3NpZDsKKwl0aWQtPmRldm5vID0gY2N3aWQuZGV2bm87CisJaWYgKCFpbmZvKQorCQlyZXR1cm47CisKKwlyYyA9IHN0c2koTlVMTCwgMCwgMCwgMCk7CisJaWYgKHJjID09IC1FTk9TWVMpCisJCWxldmVsID0gcmM7CisJZWxzZQorCQlsZXZlbCA9ICgoKHVuc2lnbmVkIGludCkgcmMpID4+IDI4KTsKKworCWlmICgobGV2ZWwgPj0gMikgJiYgKHN0c2koaW5mbzIyMiwgMiwgMiwgMikgIT0gLUVOT1NZUykpCisJCXRpZC0+bHBhcm5yID0gaW5mbzIyMi0+bHBhcl9udW1iZXI7CisKKwlpZiAoKGxldmVsID49IDMpICYmIChzdHNpKGluZm8zMjIsIDMsIDIsIDIpICE9IC1FTk9TWVMpKSB7CisJCUVCQ0FTQyhpbmZvMzIyLT52bVswXS5uYW1lLCBzaXplb2YoaW5mbzMyMi0+dm1bMF0ubmFtZSkpOworCQltZW1jcHkodGlkLT52bW5hbWUsIGluZm8zMjItPnZtWzBdLm5hbWUsIHNpemVvZih0aWQtPnZtbmFtZSkpOworCX0KKwlmcmVlX3BhZ2UoaW5mbyk7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IHFldGhfaHdfdHJhcF9jYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAorCQlzdHJ1Y3QgcWV0aF9yZXBseSAqcmVwbHksIHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7CisJX191MTYgcmM7CisKKwljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKWRhdGE7CisJcmMgPSBjbWQtPmhkci5yZXR1cm5fY29kZTsKKwlpZiAocmMpCisJCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCAyLCAidHJhcGM6JXgiLCByYyk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBxZXRoX2h3X3RyYXAoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgZW51bSBxZXRoX2RpYWdzX3RyYXBfYWN0aW9uIGFjdGlvbikKK3sKKwlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7CisJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOworCisJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgImRpYWd0cmFwIik7CisJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBJUEFfQ01EX1NFVF9ESUFHX0FTUywgMCk7CisJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOworCWNtZC0+ZGF0YS5kaWFnYXNzLnN1YmNtZF9sZW4gPSA4MDsKKwljbWQtPmRhdGEuZGlhZ2Fzcy5zdWJjbWQgPSBRRVRIX0RJQUdTX0NNRF9UUkFQOworCWNtZC0+ZGF0YS5kaWFnYXNzLnR5cGUgPSAxOworCWNtZC0+ZGF0YS5kaWFnYXNzLmFjdGlvbiA9IGFjdGlvbjsKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgUUVUSF9ESUFHU19UUkFQX0FSTToKKwkJY21kLT5kYXRhLmRpYWdhc3Mub3B0aW9ucyA9IDB4MDAwMzsKKwkJY21kLT5kYXRhLmRpYWdhc3MuZXh0ID0gMHgwMDAxMDAwMCArCisJCQlzaXplb2Yoc3RydWN0IHFldGhfdHJhcF9pZCk7CisJCXFldGhfZ2V0X3RyYXBfaWQoY2FyZCwKKwkJCShzdHJ1Y3QgcWV0aF90cmFwX2lkICopY21kLT5kYXRhLmRpYWdhc3MuY2RhdGEpOworCQlicmVhazsKKwljYXNlIFFFVEhfRElBR1NfVFJBUF9ESVNBUk06CisJCWNtZC0+ZGF0YS5kaWFnYXNzLm9wdGlvbnMgPSAweDAwMDE7CisJCWJyZWFrOworCWNhc2UgUUVUSF9ESUFHU19UUkFQX0NBUFRVUkU6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcWV0aF9zZW5kX2lwYV9jbWQoY2FyZCwgaW9iLCBxZXRoX2h3X3RyYXBfY2IsIE5VTEwpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9od190cmFwKTsKKwogaW50IHFldGhfY2hlY2tfcWRpb19lcnJvcnMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHFkaW9fYnVmZmVyICpidWYsCiAJCXVuc2lnbmVkIGludCBxZGlvX2Vycm9yLCBjb25zdCBjaGFyICpkYmZ0ZXh0KQogewpAQCAtMzkwMyw2ICs0MDQxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjY3dfZHJpdmVyIHFldGhfY2N3X2RyaXZlciA9IHsKIAkuZHJpdmVyID0geworCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkJLm5hbWUgPSAicWV0aCIsCiAJfSwKIAkuaWRzID0gcWV0aF9pZHMsCkBAIC0zOTg0LDYgKzQxMjMsMTUgQEAKIAkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICI1ZXJyJWQiLCByYyk7CiAJCWdvdG8gb3V0OwogCX0KKworCWNhcmQtPm9wdGlvbnMuaXBhNC5zdXBwb3J0ZWRfZnVuY3MgPSAwOworCWNhcmQtPm9wdGlvbnMuYWRwLnN1cHBvcnRlZF9mdW5jcyA9IDA7CisJY2FyZC0+aW5mby5kaWFnYXNzX3N1cHBvcnQgPSAwOworCXFldGhfcXVlcnlfaXBhc3Npc3RzKGNhcmQsIFFFVEhfUFJPVF9JUFY0KTsKKwlpZiAocWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX1NFVEFEQVBURVJQQVJNUykpCisJCXFldGhfcXVlcnlfc2V0YWRhcHRlcnBhcm1zKGNhcmQpOworCWlmIChxZXRoX2FkcF9zdXBwb3J0ZWQoY2FyZCwgSVBBX1NFVEFEUF9TRVRfRElBR19BU1NJU1QpKQorCQlxZXRoX3F1ZXJ5X3NldGRpYWdhc3MoY2FyZCk7CiAJcmV0dXJuIDA7CiBvdXQ6CiAJZGV2X3dhcm4oJmNhcmQtPmdkZXYtPmRldiwgIlRoZSBxZXRoIGRldmljZSBkcml2ZXIgZmFpbGVkIHRvIHJlY292ZXIgIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbXBjLmggYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tcGMuaAppbmRleCAwN2Q1ODg4Li5lNWE5ZDFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tcGMuaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tcGMuaApAQCAtODAsMTQgKzgwLDYgQEAKIAlRRVRIX1RSX0JST0FEQ0FTVF9MT0NBTCAgICA9IDEsCiB9OwogCi0vKiB0aGVzZSB2YWx1ZXMgbWF0Y2ggQ0hFQ0tTVU1fKiBpbiBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oICovCi1lbnVtIHFldGhfY2hlY2tzdW1fdHlwZXMgewotCVNXX0NIRUNLU1VNTUlORyA9IDAsIC8qIFRPRE86IHNldCB0byBiaXQgZmxhZyB1c2VkIGluIElQQSBDb21tYW5kICovCi0JSFdfQ0hFQ0tTVU1NSU5HID0gMSwKLQlOT19DSEVDS1NVTU1JTkcgPSAyLAotfTsKLSNkZWZpbmUgUUVUSF9DSEVDS1NVTV9ERUZBVUxUIFNXX0NIRUNLU1VNTUlORwotCiAvKgogICogUm91dGluZyBzdHVmZgogICovCkBAIC00NTYsNiArNDQ4LDEyIEBACiAJUUVUSF9ESUFHU19DTURfVFJBQ0VfUVVFUlkJPSAweDAwMTAsCiB9OwogCitlbnVtIHFldGhfZGlhZ3NfdHJhcF9hY3Rpb24geworCVFFVEhfRElBR1NfVFJBUF9BUk0JPSAweDAxLAorCVFFVEhfRElBR1NfVFJBUF9ESVNBUk0JPSAweDAyLAorCVFFVEhfRElBR1NfVFJBUF9DQVBUVVJFID0gMHgwNCwKK307CisKIHN0cnVjdCBxZXRoX2lwYWNtZF9kaWFnYXNzIHsKIAlfX3UzMiAgaG9zdF90b2QyOwogCV9fdTMyOjMyOwpAQCAtNDY1LDcgKzQ2Myw4IEBACiAJX191OCAgIHR5cGU7CiAJX191OCAgIGFjdGlvbjsKIAlfX3UxNiAgb3B0aW9uczsKLQlfX3UzMjozMjsKKwlfX3UzMiAgZXh0OworCV9fdTggICBjZGF0YVs2NF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogSGVhZGVyIGZvciBlYWNoIElQQSBjb21tYW5kICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9zeXMuYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX3N5cy5jCmluZGV4IGI1ZTk2N2MuLjBhOGU4NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX3N5cy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX3N5cy5jCkBAIC01MzAsNiArNTMwLDY2IEBACiBzdGF0aWMgREVWSUNFX0FUVFIoaXNvbGF0aW9uLCAwNjQ0LCBxZXRoX2Rldl9pc29sYXRpb25fc2hvdywKIAkJICAgcWV0aF9kZXZfaXNvbGF0aW9uX3N0b3JlKTsKIAorc3RhdGljIHNzaXplX3QgcWV0aF9od190cmFwX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY2FyZC0+aW5mby5od3RyYXApCisJCXJldHVybiBzbnByaW50ZihidWYsIDUsICJhcm1cbiIpOworCWVsc2UKKwkJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgOCwgImRpc2FybVxuIik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHFldGhfaHdfdHJhcF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHJjID0gMDsKKwljaGFyICp0bXAsICpjdXJ0b2tlbjsKKwlpbnQgc3RhdGUgPSAwOworCWN1cnRva2VuID0gKGNoYXIgKilidWY7CisKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmY2FyZC0+Y29uZl9tdXRleCk7CisJaWYgKGNhcmQtPnN0YXRlID09IENBUkRfU1RBVEVfU09GVFNFVFVQIHx8IGNhcmQtPnN0YXRlID09IENBUkRfU1RBVEVfVVApCisJCXN0YXRlID0gMTsKKwl0bXAgPSBzdHJzZXAoJmN1cnRva2VuLCAiXG4iKTsKKworCWlmICghc3RyY21wKHRtcCwgImFybSIpICYmICFjYXJkLT5pbmZvLmh3dHJhcCkgeworCQlpZiAoc3RhdGUpIHsKKwkJCWlmIChxZXRoX2lzX2RpYWdhc3Nfc3VwcG9ydGVkKGNhcmQsCisJCQkgICAgUUVUSF9ESUFHU19DTURfVFJBUCkpIHsKKwkJCQlyYyA9IHFldGhfaHdfdHJhcChjYXJkLCBRRVRIX0RJQUdTX1RSQVBfQVJNKTsKKwkJCQlpZiAoIXJjKQorCQkJCQljYXJkLT5pbmZvLmh3dHJhcCA9IDE7CisJCQl9IGVsc2UKKwkJCQlyYyA9IC1FSU5WQUw7CisJCX0gZWxzZQorCQkJY2FyZC0+aW5mby5od3RyYXAgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJkaXNhcm0iKSAmJiBjYXJkLT5pbmZvLmh3dHJhcCkgeworCQlpZiAoc3RhdGUpIHsKKwkJCXJjID0gcWV0aF9od190cmFwKGNhcmQsIFFFVEhfRElBR1NfVFJBUF9ESVNBUk0pOworCQkJaWYgKCFyYykKKwkJCQljYXJkLT5pbmZvLmh3dHJhcCA9IDA7CisJCX0gZWxzZQorCQkJY2FyZC0+aW5mby5od3RyYXAgPSAwOworCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJ0cmFwIikgJiYgc3RhdGUgJiYgY2FyZC0+aW5mby5od3RyYXApCisJCXJjID0gcWV0aF9od190cmFwKGNhcmQsIFFFVEhfRElBR1NfVFJBUF9DQVBUVVJFKTsKKwllbHNlCisJCXJjID0gLUVJTlZBTDsKKworCW11dGV4X3VubG9jaygmY2FyZC0+Y29uZl9tdXRleCk7CisJcmV0dXJuIHJjID8gcmMgOiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGh3X3RyYXAsIDA2NDQsIHFldGhfaHdfdHJhcF9zaG93LAorCQkgICBxZXRoX2h3X3RyYXBfc3RvcmUpOworCiBzdGF0aWMgc3NpemVfdCBxZXRoX2Rldl9ibGt0X3Nob3coY2hhciAqYnVmLCBzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBpbnQgdmFsdWUpCiB7CiAKQEAgLTY1Myw2ICs3MTMsNyBAQAogCSZkZXZfYXR0cl9wZXJmb3JtYW5jZV9zdGF0cy5hdHRyLAogCSZkZXZfYXR0cl9sYXllcjIuYXR0ciwKIAkmZGV2X2F0dHJfaXNvbGF0aW9uLmF0dHIsCisJJmRldl9hdHRyX2h3X3RyYXAuYXR0ciwKIAlOVUxMLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKaW5kZXggNmZiYWFjYi4uYjcwYjQ3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCkBAIC00MjAsMTAgKzQyMCw3IEBACiAJCWNhc2UgUUVUSF9IRUFERVJfVFlQRV9MQVlFUjI6CiAJCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7CiAJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBza2ItPmRldik7Ci0JCQlpZiAoY2FyZC0+b3B0aW9ucy5jaGVja3N1bV90eXBlID09IE5PX0NIRUNLU1VNTUlORykKLQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCQkJZWxzZQotCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIAkJCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QXzgwMl8yKSkKIAkJCQkqKChfX3UzMiAqKXNrYi0+Y2IpID0gKytjYXJkLT5zZXFuby5wa3Rfc2Vxbm87CiAJCQlsZW4gPSBza2ItPmxlbjsKQEAgLTg3OSw2ICs4NzYsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZjYXJkLT52aWRfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPm1jX2xpc3QpOwogCWNhcmQtPm9wdGlvbnMubGF5ZXIyID0gMTsKKwljYXJkLT5pbmZvLmh3dHJhcCA9IDA7CiAJY2FyZC0+ZGlzY2lwbGluZS5zdGFydF9wb2xsID0gcWV0aF9xZGlvX3N0YXJ0X3BvbGw7CiAJY2FyZC0+ZGlzY2lwbGluZS5pbnB1dF9oYW5kbGVyID0gKHFkaW9faGFuZGxlcl90ICopCiAJCXFldGhfcWRpb19pbnB1dF9oYW5kbGVyOwpAQCAtOTk3LDYgKzk5NSwxMyBAQAogCWlmIChjYXJkLT5pbmZvLnR5cGUgIT0gUUVUSF9DQVJEX1RZUEVfT1NOKQogCQlxZXRoX2wyX3NlbmRfc2V0bWFjKGNhcmQsICZjYXJkLT5kZXYtPmRldl9hZGRyWzBdKTsKIAorCWlmIChxZXRoX2lzX2RpYWdhc3Nfc3VwcG9ydGVkKGNhcmQsIFFFVEhfRElBR1NfQ01EX1RSQVApKSB7CisJCWlmIChjYXJkLT5pbmZvLmh3dHJhcCAmJgorCQkgICAgcWV0aF9od190cmFwKGNhcmQsIFFFVEhfRElBR1NfVFJBUF9BUk0pKQorCQkJY2FyZC0+aW5mby5od3RyYXAgPSAwOworCX0gZWxzZQorCQljYXJkLT5pbmZvLmh3dHJhcCA9IDA7CisKIAljYXJkLT5zdGF0ZSA9IENBUkRfU1RBVEVfSEFSRFNFVFVQOwogCW1lbXNldCgmY2FyZC0+cngsIDAsIHNpemVvZihzdHJ1Y3QgcWV0aF9yeCkpOwogCXFldGhfcHJpbnRfc3RhdHVzX21lc3NhZ2UoY2FyZCk7CkBAIC0xMDk1LDYgKzExMDAsMTAgQEAKIAlpZiAoY2FyZC0+ZGV2ICYmIG5ldGlmX2NhcnJpZXJfb2soY2FyZC0+ZGV2KSkKIAkJbmV0aWZfY2Fycmllcl9vZmYoY2FyZC0+ZGV2KTsKIAlyZWNvdmVyX2ZsYWcgPSBjYXJkLT5zdGF0ZTsKKwlpZiAoKCFyZWNvdmVyeV9tb2RlICYmIGNhcmQtPmluZm8uaHd0cmFwKSB8fCBjYXJkLT5pbmZvLmh3dHJhcCA9PSAyKSB7CisJCXFldGhfaHdfdHJhcChjYXJkLCBRRVRIX0RJQUdTX1RSQVBfRElTQVJNKTsKKwkJY2FyZC0+aW5mby5od3RyYXAgPSAxOworCX0KIAlxZXRoX2wyX3N0b3BfY2FyZChjYXJkLCByZWNvdmVyeV9tb2RlKTsKIAlyYyAgPSBjY3dfZGV2aWNlX3NldF9vZmZsaW5lKENBUkRfRERFVihjYXJkKSk7CiAJcmMyID0gY2N3X2RldmljZV9zZXRfb2ZmbGluZShDQVJEX1dERVYoY2FyZCkpOwpAQCAtMTE2MCw2ICsxMTY5LDggQEAKIHN0YXRpYyB2b2lkIHFldGhfbDJfc2h1dGRvd24oc3RydWN0IGNjd2dyb3VwX2RldmljZSAqZ2RldikKIHsKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKCZnZGV2LT5kZXYpOworCWlmICgoZ2Rldi0+c3RhdGUgPT0gQ0NXR1JPVVBfT05MSU5FKSAmJiBjYXJkLT5pbmZvLmh3dHJhcCkKKwkJcWV0aF9od190cmFwKGNhcmQsIFFFVEhfRElBR1NfVFJBUF9ESVNBUk0pOwogCXFldGhfcWRpb19jbGVhcl9jYXJkKGNhcmQsIDApOwogCXFldGhfY2xlYXJfcWRpb19idWZmZXJzKGNhcmQpOwogfQpAQCAtMTE3NSw2ICsxMTg2LDggQEAKIAlpZiAoZ2Rldi0+c3RhdGUgPT0gQ0NXR1JPVVBfT0ZGTElORSkKIAkJcmV0dXJuIDA7CiAJaWYgKGNhcmQtPnN0YXRlID09IENBUkRfU1RBVEVfVVApIHsKKwkJaWYgKGNhcmQtPmluZm8uaHd0cmFwKQorCQkJcWV0aF9od190cmFwKGNhcmQsIFFFVEhfRElBR1NfVFJBUF9ESVNBUk0pOwogCQlfX3FldGhfbDJfc2V0X29mZmxpbmUoY2FyZC0+Z2RldiwgMSk7CiAJfSBlbHNlCiAJCV9fcWV0aF9sMl9zZXRfb2ZmbGluZShjYXJkLT5nZGV2LCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMy5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzLmgKaW5kZXggZTcwNWIyNy4uMTRhNDNhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzLmgKQEAgLTYyLDggKzYyLDYgQEAKIGludCBxZXRoX2wzX2FkZF9yeGlwKHN0cnVjdCBxZXRoX2NhcmQgKiwgZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMsIGNvbnN0IHU4ICopOwogdm9pZCBxZXRoX2wzX2RlbF9yeGlwKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGVudW0gcWV0aF9wcm90X3ZlcnNpb25zLAogCQkJY29uc3QgdTggKik7Ci1pbnQgcWV0aF9sM19zZXRfbGFyZ2Vfc2VuZChzdHJ1Y3QgcWV0aF9jYXJkICosIGVudW0gcWV0aF9sYXJnZV9zZW5kX3R5cGVzKTsKLWludCBxZXRoX2wzX3NldF9yeF9jc3VtKHN0cnVjdCBxZXRoX2NhcmQgKiwgZW51bSBxZXRoX2NoZWNrc3VtX3R5cGVzKTsKIGludCBxZXRoX2wzX2lzX2FkZHJfY292ZXJlZF9ieV9pcGF0byhzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBxZXRoX2lwYWRkciAqKTsKIAogI2VuZGlmIC8qIF9fUUVUSF9MM19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jCmluZGV4IDE0MmU1ZjYuLmZkNjlkYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYwpAQCAtNDMsMzMgKzQzLDYgQEAKIHN0YXRpYyBpbnQgX19xZXRoX2wzX3NldF9vbmxpbmUoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqLCBpbnQpOwogc3RhdGljIGludCBfX3FldGhfbDNfc2V0X29mZmxpbmUoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqLCBpbnQpOwogCi1pbnQgcWV0aF9sM19zZXRfbGFyZ2Vfc2VuZChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAotCQllbnVtIHFldGhfbGFyZ2Vfc2VuZF90eXBlcyB0eXBlKQotewotCWludCByYyA9IDA7Ci0KLQljYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPSB0eXBlOwotCWlmIChjYXJkLT5kZXYgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9UU08pIHsKLQkJaWYgKHFldGhfaXNfc3VwcG9ydGVkKGNhcmQsIElQQV9PVVRCT1VORF9UU08pKSB7Ci0JCQljYXJkLT5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9TRyB8Ci0JCQkJCU5FVElGX0ZfSVBfQ1NVTTsKLQkJfSBlbHNlIHsKLQkJCWNhcmQtPmRldi0+ZmVhdHVyZXMgJj0gfihORVRJRl9GX1RTTyB8IE5FVElGX0ZfU0cgfAotCQkJCQlORVRJRl9GX0lQX0NTVU0pOwotCQkJY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX05POwotCQkJcmMgPSAtRU9QTk9UU1VQUDsKLQkJfQotCX0gZWxzZSB7Ci0JCWNhcmQtPmRldi0+ZmVhdHVyZXMgJj0gfihORVRJRl9GX1RTTyB8IE5FVElGX0ZfU0cgfAotCQkJCQlORVRJRl9GX0lQX0NTVU0pOwotCQljYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQgPSBRRVRIX0xBUkdFX1NFTkRfTk87Ci0JfQotCXJldHVybiByYzsKLX0KLQogc3RhdGljIGludCBxZXRoX2wzX2lzeGRpZ2l0KGNoYXIgKmJ1ZikKIHsKIAl3aGlsZSAoKmJ1ZikgewpAQCAtMTMwNCwzOSArMTI3Nyw2IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IHFldGhfbDNfcXVlcnlfaXBhc3Npc3RzX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCi0JCXN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKLQotCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJxaXBhc3NjYiIpOwotCi0JY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKLQlpZiAoY21kLT5oZHIucHJvdF92ZXJzaW9uID09IFFFVEhfUFJPVF9JUFY0KSB7Ci0JCWNhcmQtPm9wdGlvbnMuaXBhNC5zdXBwb3J0ZWRfZnVuY3MgPSBjbWQtPmhkci5pcGFfc3VwcG9ydGVkOwotCQljYXJkLT5vcHRpb25zLmlwYTQuZW5hYmxlZF9mdW5jcyA9IGNtZC0+aGRyLmlwYV9lbmFibGVkOwotCX0gZWxzZSB7Ci0JCWNhcmQtPm9wdGlvbnMuaXBhNi5zdXBwb3J0ZWRfZnVuY3MgPSBjbWQtPmhkci5pcGFfc3VwcG9ydGVkOwotCQljYXJkLT5vcHRpb25zLmlwYTYuZW5hYmxlZF9mdW5jcyA9IGNtZC0+aGRyLmlwYV9lbmFibGVkOwotCX0KLQlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAic3VwcGVuYmwiKTsKLQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIiV4IiwgY21kLT5oZHIuaXBhX3N1cHBvcnRlZCk7Ci0JUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIleCIsIGNtZC0+aGRyLmlwYV9lbmFibGVkKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBxZXRoX2wzX3F1ZXJ5X2lwYXNzaXN0cyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAotCQkJCWVudW0gcWV0aF9wcm90X3ZlcnNpb25zIHByb3QpCi17Ci0JaW50IHJjOwotCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKLQotCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAicWlwYXNzaSVpIiwgcHJvdCk7Ci0JaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBJUEFfQ01EX1FJUEFTU0lTVCwgcHJvdCk7Ci0JcmMgPSBxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsIHFldGhfbDNfcXVlcnlfaXBhc3Npc3RzX2NiLCBOVUxMKTsKLQlyZXR1cm4gcmM7Ci19Ci0KICNpZmRlZiBDT05GSUdfUUVUSF9JUFY2CiBzdGF0aWMgaW50IHFldGhfbDNfc29mdHNldHVwX2lwdjYoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKIHsKQEAgLTEzNDcsNyArMTI4Nyw3IEBACiAJaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9JUUQpCiAJCWdvdG8gb3V0OwogCi0JcmMgPSBxZXRoX2wzX3F1ZXJ5X2lwYXNzaXN0cyhjYXJkLCBRRVRIX1BST1RfSVBWNik7CisJcmMgPSBxZXRoX3F1ZXJ5X2lwYXNzaXN0cyhjYXJkLCBRRVRIX1BST1RfSVBWNik7CiAJaWYgKHJjKSB7CiAJCWRldl9lcnIoJmNhcmQtPmdkZXYtPmRldiwKIAkJCSJBY3RpdmF0aW5nIElQdjYgc3VwcG9ydCBmb3IgJXMgZmFpbGVkXG4iLApAQCAtMTQ3Miw2OCArMTQxMiwzOCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgcWV0aF9sM19zZXRfcnhfY3N1bShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAotCWVudW0gcWV0aF9jaGVja3N1bV90eXBlcyBjc3VtX3R5cGUpCitpbnQgcWV0aF9sM19zZXRfcnhfY3N1bShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBpbnQgb24pCiB7CiAJaW50IHJjID0gMDsKIAotCWlmIChjYXJkLT5vcHRpb25zLmNoZWNrc3VtX3R5cGUgPT0gSFdfQ0hFQ0tTVU1NSU5HKSB7Ci0JCWlmICgoY3N1bV90eXBlICE9IEhXX0NIRUNLU1VNTUlORykgJiYKLQkJCShjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX0RPV04pKSB7Ci0JCQlyYyA9IHFldGhfbDNfc2VuZF9zaW1wbGVfc2V0YXNzcGFybXMoY2FyZCwKLQkJCQlJUEFfSU5CT1VORF9DSEVDS1NVTSwgSVBBX0NNRF9BU1NfU1RPUCwgMCk7Ci0JCQlpZiAocmMpCi0JCQkJcmV0dXJuIC1FSU87Ci0JCX0KKwlpZiAob24pIHsKKwkJcmMgPSBxZXRoX2wzX3NlbmRfY2hlY2tzdW1fY29tbWFuZChjYXJkKTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIC1FSU87CisJCWRldl9pbmZvKCZjYXJkLT5nZGV2LT5kZXYsCisJCQkiSFcgQ2hlY2tzdW1taW5nIChpbmJvdW5kKSBlbmFibGVkXG4iKTsKIAl9IGVsc2UgewotCQlpZiAoY3N1bV90eXBlID09IEhXX0NIRUNLU1VNTUlORykgewotCQkJaWYgKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfRE9XTikgewotCQkJCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwKLQkJCQkgICAgSVBBX0lOQk9VTkRfQ0hFQ0tTVU0pKQotCQkJCQlyZXR1cm4gLUVQRVJNOwotCQkJCXJjID0gcWV0aF9sM19zZW5kX2NoZWNrc3VtX2NvbW1hbmQoY2FyZCk7Ci0JCQkJaWYgKHJjKQotCQkJCQlyZXR1cm4gLUVJTzsKLQkJCX0KLQkJfQorCQlyYyA9IHFldGhfbDNfc2VuZF9zaW1wbGVfc2V0YXNzcGFybXMoY2FyZCwKKwkJCUlQQV9JTkJPVU5EX0NIRUNLU1VNLCBJUEFfQ01EX0FTU19TVE9QLCAwKTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIC1FSU87CiAJfQotCWNhcmQtPm9wdGlvbnMuY2hlY2tzdW1fdHlwZSA9IGNzdW1fdHlwZTsKLQlyZXR1cm4gcmM7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBxZXRoX2wzX3N0YXJ0X2lwYV9jaGVja3N1bShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQogewotCWludCByYyA9IDA7Ci0KIAlRRVRIX0NBUkRfVEVYVChjYXJkLCAzLCAic3RydGNzdW0iKTsKIAotCWlmIChjYXJkLT5vcHRpb25zLmNoZWNrc3VtX3R5cGUgPT0gTk9fQ0hFQ0tTVU1NSU5HKSB7Ci0JCWRldl9pbmZvKCZjYXJkLT5nZGV2LT5kZXYsCi0JCQkiVXNpbmcgbm8gY2hlY2tzdW1taW5nIG9uICVzLlxuIiwKLQkJCVFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOwotCQlyZXR1cm4gMDsKKwlpZiAoY2FyZC0+ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSB7CisJCXJ0bmxfbG9jaygpOworCQkvKiBmb3JjZSBzZXRfZmVhdHVyZXMgY2FsbCAqLworCQljYXJkLT5kZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1JYQ1NVTTsKKwkJbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhjYXJkLT5kZXYpOworCQlydG5sX3VubG9jaygpOwogCX0KLQlpZiAoY2FyZC0+b3B0aW9ucy5jaGVja3N1bV90eXBlID09IFNXX0NIRUNLU1VNTUlORykgewotCQlkZXZfaW5mbygmY2FyZC0+Z2Rldi0+ZGV2LAotCQkJIlVzaW5nIFNXIGNoZWNrc3VtbWluZyBvbiAlcy5cbiIsCi0JCQlRRVRIX0NBUkRfSUZOQU1FKGNhcmQpKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX0lOQk9VTkRfQ0hFQ0tTVU0pKSB7Ci0JCWRldl9pbmZvKCZjYXJkLT5nZGV2LT5kZXYsCi0JCQkiSW5ib3VuZCBIVyBDaGVja3N1bW1pbmcgbm90ICIKLQkJCSJzdXBwb3J0ZWQgb24gJXMsXG5jb250aW51aW5nICIKLQkJCSJ1c2luZyBJbmJvdW5kIFNXIENoZWNrc3VtbWluZ1xuIiwKLQkJCVFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOwotCQljYXJkLT5vcHRpb25zLmNoZWNrc3VtX3R5cGUgPSBTV19DSEVDS1NVTU1JTkc7Ci0JCXJldHVybiAwOwotCX0KLQlyYyA9IHFldGhfbDNfc2VuZF9jaGVja3N1bV9jb21tYW5kKGNhcmQpOwotCWlmICghcmMpCi0JCWRldl9pbmZvKCZjYXJkLT5nZGV2LT5kZXYsCi0JCQkiSFcgQ2hlY2tzdW1taW5nIChpbmJvdW5kKSBlbmFibGVkXG4iKTsKLQotCXJldHVybiByYzsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBxZXRoX2wzX3N0YXJ0X2lwYV90eF9jaGVja3N1bShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQpAQCAtMTU4MCwxMCArMTQ5MCw4IEBACiAJCQlkZXZfaW5mbygmY2FyZC0+Z2Rldi0+ZGV2LAogCQkJCSJPdXRib3VuZCBUU08gZW5hYmxlZFxuIik7CiAJfQotCWlmIChyYyAmJiAoY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9UU08pKSB7Ci0JCWNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCA9IFFFVEhfTEFSR0VfU0VORF9OTzsKLQkJY2FyZC0+ZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9TRyk7Ci0JfQorCWlmIChyYykKKwkJY2FyZC0+ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9UU087CiAJcmV0dXJuIHJjOwogfQogCkBAIC0yMDY0LDE0ICsxOTcyLDcgQEAKIAkJaXNfdmxhbiA9IDE7CiAJfQogCi0Jc3dpdGNoIChjYXJkLT5vcHRpb25zLmNoZWNrc3VtX3R5cGUpIHsKLQljYXNlIFNXX0NIRUNLU1VNTUlORzoKLQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCQlicmVhazsKLQljYXNlIE5PX0NIRUNLU1VNTUlORzoKLQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQkJYnJlYWs7Ci0JY2FzZSBIV19DSEVDS1NVTU1JTkc6CisJaWYgKGNhcmQtPmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkgewogCQlpZiAoKGhkci0+aGRyLmwzLmV4dF9mbGFncyAmCiAJCSAgICAoUUVUSF9IRFJfRVhUX0NTVU1fSERSX1JFUSB8CiAJCSAgICAgUUVUSF9IRFJfRVhUX0NTVU1fVFJBTlNQX1JFUSkpID09CkBAIC0yMDgwLDcgKzE5ODEsOCBAQAogCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAkJZWxzZQogCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCX0KKwl9IGVsc2UKKwkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCiAJcmV0dXJuIGlzX3ZsYW47CiB9CkBAIC0zMDI0LDcgKzI5MjYsNyBAQAogCXN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKnF1ZXVlID0gY2FyZC0+cWRpby5vdXRfcXMKIAkJW3FldGhfZ2V0X3ByaW9yaXR5X3F1ZXVlKGNhcmQsIHNrYiwgaXB2LCBjYXN0X3R5cGUpXTsKIAlpbnQgdHhfYnl0ZXMgPSBza2ItPmxlbjsKLQllbnVtIHFldGhfbGFyZ2Vfc2VuZF90eXBlcyBsYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX05POworCWJvb2wgbGFyZ2Vfc2VuZDsKIAlpbnQgZGF0YV9vZmZzZXQgPSAtMTsKIAlpbnQgbnJfZnJhZ3M7CiAKQEAgLTMwNDYsOCArMjk0OCw3IEBACiAJCWNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfc3RhcnRfdGltZSA9IHFldGhfZ2V0X21pY3JvcygpOwogCX0KIAotCWlmIChza2JfaXNfZ3NvKHNrYikpCi0JCWxhcmdlX3NlbmQgPSBjYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQ7CisJbGFyZ2Vfc2VuZCA9IHNrYl9pc19nc28oc2tiKTsKIAogCWlmICgoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkgJiYgKCFsYXJnZV9zZW5kKSAmJgogCSAgICAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9PSAwKSkgewpAQCAtMzA5Niw3ICsyOTk3LDcgQEAKIAkvKiBmaXggaGFyZHdhcmUgbGltaXRhdGlvbjogYXMgbG9uZyBhcyB3ZSBkbyBub3QgaGF2ZSBzYmFsCiAJICogY2hhaW5pbmcgd2UgY2FuIG5vdCBzZW5kIGxvbmcgZnJhZyBsaXN0cwogCSAqLwotCWlmIChsYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9UU08pIHsKKwlpZiAobGFyZ2Vfc2VuZCkgewogCQlpZiAocWV0aF9sM190c29fZWxlbWVudHMobmV3X3NrYikgKyAxID4gMTYpIHsKIAkJCWlmIChza2JfbGluZWFyaXplKG5ld19za2IpKQogCQkJCWdvdG8gdHhfZHJvcDsKQEAgLTMxMDUsOCArMzAwNiw3IEBACiAJCX0KIAl9CiAKLQlpZiAoKGxhcmdlX3NlbmQgPT0gUUVUSF9MQVJHRV9TRU5EX1RTTykgJiYKLQkgICAgKGNhc3RfdHlwZSA9PSBSVE5fVU5TUEVDKSkgeworCWlmIChsYXJnZV9zZW5kICYmIChjYXN0X3R5cGUgPT0gUlROX1VOU1BFQykpIHsKIAkJaGRyID0gKHN0cnVjdCBxZXRoX2hkciAqKXNrYl9wdXNoKG5ld19za2IsCiAJCQkJCQlzaXplb2Yoc3RydWN0IHFldGhfaGRyX3RzbykpOwogCQltZW1zZXQoaGRyLCAwLCBzaXplb2Yoc3RydWN0IHFldGhfaGRyX3RzbykpOwpAQCAtMzE0MSw3ICszMDQxLDcgQEAKIAogCWlmIChjYXJkLT5pbmZvLnR5cGUgIT0gUUVUSF9DQVJEX1RZUEVfSVFEKSB7CiAJCWludCBsZW47Ci0JCWlmIChsYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9UU08pCisJCWlmIChsYXJnZV9zZW5kKQogCQkJbGVuID0gKCh1bnNpZ25lZCBsb25nKXRjcF9oZHIobmV3X3NrYikgKwogCQkJCXRjcF9oZHIobmV3X3NrYiktPmRvZmYgKiA0KSAtCiAJCQkJKHVuc2lnbmVkIGxvbmcpbmV3X3NrYi0+ZGF0YTsKQEAgLTMxNjIsNyArMzA2Miw3IEBACiAJCWlmIChuZXdfc2tiICE9IHNrYikKIAkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCWlmIChjYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKSB7Ci0JCQlpZiAobGFyZ2Vfc2VuZCAhPSBRRVRIX0xBUkdFX1NFTkRfTk8pIHsKKwkJCWlmIChsYXJnZV9zZW5kKSB7CiAJCQkJY2FyZC0+cGVyZl9zdGF0cy5sYXJnZV9zZW5kX2J5dGVzICs9IHR4X2J5dGVzOwogCQkJCWNhcmQtPnBlcmZfc3RhdHMubGFyZ2Vfc2VuZF9jbnQrKzsKIAkJCX0KQEAgLTMyNDgsNjUgKzMxNDgsNDIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHUzMiBxZXRoX2wzX2V0aHRvb2xfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyB1MzIgcWV0aF9sM19maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZlYXR1cmVzKQogewogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPm1sX3ByaXY7CiAKLQlyZXR1cm4gKGNhcmQtPm9wdGlvbnMuY2hlY2tzdW1fdHlwZSA9PSBIV19DSEVDS1NVTU1JTkcpOworCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX09VVEJPVU5EX0NIRUNLU1VNKSkKKwkJZmVhdHVyZXMgJj0gfk5FVElGX0ZfSVBfQ1NVTTsKKwlpZiAoIXFldGhfaXNfc3VwcG9ydGVkKGNhcmQsIElQQV9PVVRCT1VORF9UU08pKQorCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9UU087CisJaWYgKCFxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfSU5CT1VORF9DSEVDS1NVTSkpCisJCWZlYXR1cmVzICY9IH5ORVRJRl9GX1JYQ1NVTTsKKworCXJldHVybiBmZWF0dXJlczsKIH0KIAotc3RhdGljIGludCBxZXRoX2wzX2V0aHRvb2xfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCitzdGF0aWMgaW50IHFldGhfbDNfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmZWF0dXJlcykKIHsKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5tbF9wcml2OwotCWVudW0gcWV0aF9jaGVja3N1bV90eXBlcyBjc3VtX3R5cGU7CisJdTMyIGNoYW5nZWQgPSBkZXYtPmZlYXR1cmVzIF4gZmVhdHVyZXM7CisJaW50IGVycjsKIAotCWlmIChkYXRhKQotCQljc3VtX3R5cGUgPSBIV19DSEVDS1NVTU1JTkc7Ci0JZWxzZQotCQljc3VtX3R5cGUgPSBTV19DSEVDS1NVTU1JTkc7CisJaWYgKCEoY2hhbmdlZCAmIE5FVElGX0ZfUlhDU1VNKSkKKwkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gcWV0aF9sM19zZXRfcnhfY3N1bShjYXJkLCBjc3VtX3R5cGUpOwotfQorCWlmIChjYXJkLT5zdGF0ZSA9PSBDQVJEX1NUQVRFX0RPV04gfHwKKwkgICAgY2FyZC0+c3RhdGUgPT0gQ0FSRF9TVEFURV9SRUNPVkVSKQorCQlyZXR1cm4gMDsKIAotc3RhdGljIGludCBxZXRoX2wzX2V0aHRvb2xfc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5tbF9wcml2OwotCWludCByYyA9IDA7CisJZXJyID0gcWV0aF9sM19zZXRfcnhfY3N1bShjYXJkLCBmZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKTsKKwlpZiAoZXJyKQorCQlkZXYtPmZlYXR1cmVzID0gZmVhdHVyZXMgXiBORVRJRl9GX1JYQ1NVTTsKIAotCWlmIChkYXRhKSB7Ci0JCXJjID0gcWV0aF9sM19zZXRfbGFyZ2Vfc2VuZChjYXJkLCBRRVRIX0xBUkdFX1NFTkRfVFNPKTsKLQl9IGVsc2UgewotCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzsKLQkJY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kID0gUUVUSF9MQVJHRV9TRU5EX05POwotCX0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgcWV0aF9sM19ldGh0b29sX3NldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPm1sX3ByaXY7Ci0KLQlpZiAoZGF0YSkgewotCQlpZiAocWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX09VVEJPVU5EX0NIRUNLU1VNKSkKLQkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNOwotCQllbHNlCi0JCQlyZXR1cm4gLUVQRVJNOwotCX0gZWxzZQotCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0lQX0NTVU07Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHFldGhfbDNfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKLQkuZ2V0X3R4X2NzdW0gPSBldGh0b29sX29wX2dldF90eF9jc3VtLAotCS5zZXRfdHhfY3N1bSA9IHFldGhfbDNfZXRodG9vbF9zZXRfdHhfY3N1bSwKLQkuZ2V0X3J4X2NzdW0gPSBxZXRoX2wzX2V0aHRvb2xfZ2V0X3J4X2NzdW0sCi0JLnNldF9yeF9jc3VtID0gcWV0aF9sM19ldGh0b29sX3NldF9yeF9jc3VtLAotCS5nZXRfc2cgICAgICA9IGV0aHRvb2xfb3BfZ2V0X3NnLAotCS5zZXRfc2cgICAgICA9IGV0aHRvb2xfb3Bfc2V0X3NnLAotCS5nZXRfdHNvICAgICA9IGV0aHRvb2xfb3BfZ2V0X3RzbywKLQkuc2V0X3RzbyAgICAgPSBxZXRoX2wzX2V0aHRvb2xfc2V0X3RzbywKIAkuZ2V0X3N0cmluZ3MgPSBxZXRoX2NvcmVfZ2V0X3N0cmluZ3MsCiAJLmdldF9ldGh0b29sX3N0YXRzID0gcWV0aF9jb3JlX2dldF9ldGh0b29sX3N0YXRzLAogCS5nZXRfc3NldF9jb3VudCA9IHFldGhfY29yZV9nZXRfc3NldF9jb3VudCwKQEAgLTMzNDcsNiArMzIyNCw4IEBACiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBxZXRoX2wzX3NldF9tdWx0aWNhc3RfbGlzdCwKIAkubmRvX2RvX2lvY3RsCSAgIAk9IHFldGhfbDNfZG9faW9jdGwsCiAJLm5kb19jaGFuZ2VfbXR1CSAgIAk9IHFldGhfY2hhbmdlX210dSwKKwkubmRvX2ZpeF9mZWF0dXJlcyAgIAk9IHFldGhfbDNfZml4X2ZlYXR1cmVzLAorCS5uZG9fc2V0X2ZlYXR1cmVzICAgCT0gcWV0aF9sM19zZXRfZmVhdHVyZXMsCiAJLm5kb192bGFuX3J4X3JlZ2lzdGVyCT0gcWV0aF9sM192bGFuX3J4X3JlZ2lzdGVyLAogCS5uZG9fdmxhbl9yeF9hZGRfdmlkCT0gcWV0aF9sM192bGFuX3J4X2FkZF92aWQsCiAJLm5kb192bGFuX3J4X2tpbGxfdmlkICAgPSBxZXRoX2wzX3ZsYW5fcnhfa2lsbF92aWQsCkBAIC0zMzYyLDYgKzMyNDEsOCBAQAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gcWV0aF9sM19zZXRfbXVsdGljYXN0X2xpc3QsCiAJLm5kb19kb19pb2N0bAkgICAJPSBxZXRoX2wzX2RvX2lvY3RsLAogCS5uZG9fY2hhbmdlX210dQkgICAJPSBxZXRoX2NoYW5nZV9tdHUsCisJLm5kb19maXhfZmVhdHVyZXMgICAJPSBxZXRoX2wzX2ZpeF9mZWF0dXJlcywKKwkubmRvX3NldF9mZWF0dXJlcyAgIAk9IHFldGhfbDNfc2V0X2ZlYXR1cmVzLAogCS5uZG9fdmxhbl9yeF9yZWdpc3Rlcgk9IHFldGhfbDNfdmxhbl9yeF9yZWdpc3RlciwKIAkubmRvX3ZsYW5fcnhfYWRkX3ZpZAk9IHFldGhfbDNfdmxhbl9yeF9hZGRfdmlkLAogCS5uZG9fdmxhbl9yeF9raWxsX3ZpZCAgID0gcWV0aF9sM192bGFuX3J4X2tpbGxfdmlkLApAQCAtMzM5Miw4ICszMjczLDEyIEBACiAJCQlpZiAoIShjYXJkLT5pbmZvLnVuaXF1ZV9pZCAmIFVOSVFVRV9JRF9OT1RfQllfQ0FSRCkpCiAJCQkJY2FyZC0+ZGV2LT5kZXZfaWQgPSBjYXJkLT5pbmZvLnVuaXF1ZV9pZCAmCiAJCQkJCQkJIDB4ZmZmZjsKLQkJCWlmICghY2FyZC0+aW5mby5ndWVzdGxhbikKLQkJCQljYXJkLT5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfR1JPOworCQkJaWYgKCFjYXJkLT5pbmZvLmd1ZXN0bGFuKSB7CisJCQkJY2FyZC0+ZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfAorCQkJCQlORVRJRl9GX1JYQ1NVTSB8IE5FVElGX0ZfSVBfQ1NVTSB8CisJCQkJCU5FVElGX0ZfVFNPOworCQkJCWNhcmQtPmRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX1JYQ1NVTTsKKwkJCX0KIAkJfQogCX0gZWxzZSBpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkgewogCQljYXJkLT5kZXYgPSBhbGxvY19uZXRkZXYoMCwgImhzaSVkIiwgZXRoZXJfc2V0dXApOwpAQCAtMzQyNiwxNSArMzMxMSwxMyBAQAogCiAJcWV0aF9sM19jcmVhdGVfZGV2aWNlX2F0dHJpYnV0ZXMoJmdkZXYtPmRldik7CiAJY2FyZC0+b3B0aW9ucy5sYXllcjIgPSAwOworCWNhcmQtPmluZm8uaHd0cmFwID0gMDsKIAljYXJkLT5kaXNjaXBsaW5lLnN0YXJ0X3BvbGwgPSBxZXRoX3FkaW9fc3RhcnRfcG9sbDsKIAljYXJkLT5kaXNjaXBsaW5lLmlucHV0X2hhbmRsZXIgPSAocWRpb19oYW5kbGVyX3QgKikKIAkJcWV0aF9xZGlvX2lucHV0X2hhbmRsZXI7CiAJY2FyZC0+ZGlzY2lwbGluZS5vdXRwdXRfaGFuZGxlciA9IChxZGlvX2hhbmRsZXJfdCAqKQogCQlxZXRoX3FkaW9fb3V0cHV0X2hhbmRsZXI7CiAJY2FyZC0+ZGlzY2lwbGluZS5yZWNvdmVyID0gcWV0aF9sM19yZWNvdmVyOwotCWlmICgoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TRCkgfHwKLQkgICAgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9PU1gpKQotCQljYXJkLT5vcHRpb25zLmNoZWNrc3VtX3R5cGUgPSBIV19DSEVDS1NVTU1JTkc7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM0ODAsMTMgKzMzNjMsMTggQEAKIAkJZ290byBvdXRfcmVtb3ZlOwogCX0KIAotCXFldGhfbDNfcXVlcnlfaXBhc3Npc3RzKGNhcmQsIFFFVEhfUFJPVF9JUFY0KTsKLQogCWlmICghY2FyZC0+ZGV2ICYmIHFldGhfbDNfc2V0dXBfbmV0ZGV2KGNhcmQpKSB7CiAJCXJjID0gLUVOT0RFVjsKIAkJZ290byBvdXRfcmVtb3ZlOwogCX0KIAorCWlmIChxZXRoX2lzX2RpYWdhc3Nfc3VwcG9ydGVkKGNhcmQsIFFFVEhfRElBR1NfQ01EX1RSQVApKSB7CisJCWlmIChjYXJkLT5pbmZvLmh3dHJhcCAmJgorCQkgICAgcWV0aF9od190cmFwKGNhcmQsIFFFVEhfRElBR1NfVFJBUF9BUk0pKQorCQkJY2FyZC0+aW5mby5od3RyYXAgPSAwOworCX0gZWxzZQorCQljYXJkLT5pbmZvLmh3dHJhcCA9IDA7CisKIAljYXJkLT5zdGF0ZSA9IENBUkRfU1RBVEVfSEFSRFNFVFVQOwogCW1lbXNldCgmY2FyZC0+cngsIDAsIHNpemVvZihzdHJ1Y3QgcWV0aF9yeCkpOwogCXFldGhfcHJpbnRfc3RhdHVzX21lc3NhZ2UoY2FyZCk7CkBAIC0zNTE2LDcgKzM0MDQsNiBAQAogCQlyYyA9IHFldGhfbDNfc3RhcnRfaXBhc3Npc3RzKGNhcmQpOwogCQlpZiAocmMpCiAJCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjNlcnIlZCIsIHJjKTsKLQkJcWV0aF9sM19zZXRfbGFyZ2Vfc2VuZChjYXJkLCBjYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQpOwogCQlyYyA9IHFldGhfbDNfc2V0cm91dGluZ192NChjYXJkKTsKIAkJaWYgKHJjKQogCQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICI0ZXJyJWQiLCByYyk7CkBAIC0zNTg5LDYgKzM0NzYsMTAgQEAKIAlpZiAoY2FyZC0+ZGV2ICYmIG5ldGlmX2NhcnJpZXJfb2soY2FyZC0+ZGV2KSkKIAkJbmV0aWZfY2Fycmllcl9vZmYoY2FyZC0+ZGV2KTsKIAlyZWNvdmVyX2ZsYWcgPSBjYXJkLT5zdGF0ZTsKKwlpZiAoKCFyZWNvdmVyeV9tb2RlICYmIGNhcmQtPmluZm8uaHd0cmFwKSB8fCBjYXJkLT5pbmZvLmh3dHJhcCA9PSAyKSB7CisJCXFldGhfaHdfdHJhcChjYXJkLCBRRVRIX0RJQUdTX1RSQVBfRElTQVJNKTsKKwkJY2FyZC0+aW5mby5od3RyYXAgPSAxOworCX0KIAlxZXRoX2wzX3N0b3BfY2FyZChjYXJkLCByZWNvdmVyeV9tb2RlKTsKIAlyYyAgPSBjY3dfZGV2aWNlX3NldF9vZmZsaW5lKENBUkRfRERFVihjYXJkKSk7CiAJcmMyID0gY2N3X2RldmljZV9zZXRfb2ZmbGluZShDQVJEX1dERVYoY2FyZCkpOwpAQCAtMzY0NCw2ICszNTM1LDggQEAKIHN0YXRpYyB2b2lkIHFldGhfbDNfc2h1dGRvd24oc3RydWN0IGNjd2dyb3VwX2RldmljZSAqZ2RldikKIHsKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKCZnZGV2LT5kZXYpOworCWlmICgoZ2Rldi0+c3RhdGUgPT0gQ0NXR1JPVVBfT05MSU5FKSAmJiBjYXJkLT5pbmZvLmh3dHJhcCkKKwkJcWV0aF9od190cmFwKGNhcmQsIFFFVEhfRElBR1NfVFJBUF9ESVNBUk0pOwogCXFldGhfcWRpb19jbGVhcl9jYXJkKGNhcmQsIDApOwogCXFldGhfY2xlYXJfcWRpb19idWZmZXJzKGNhcmQpOwogfQpAQCAtMzY1OSw2ICszNTUyLDggQEAKIAlpZiAoZ2Rldi0+c3RhdGUgPT0gQ0NXR1JPVVBfT0ZGTElORSkKIAkJcmV0dXJuIDA7CiAJaWYgKGNhcmQtPnN0YXRlID09IENBUkRfU1RBVEVfVVApIHsKKwkJaWYgKGNhcmQtPmluZm8uaHd0cmFwKQorCQkJcWV0aF9od190cmFwKGNhcmQsIFFFVEhfRElBR1NfVFJBUF9ESVNBUk0pOwogCQlfX3FldGhfbDNfc2V0X29mZmxpbmUoY2FyZC0+Z2RldiwgMSk7CiAJfSBlbHNlCiAJCV9fcWV0aF9sM19zZXRfb2ZmbGluZShjYXJkLT5nZGV2LCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19zeXMuYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19zeXMuYwppbmRleCA2N2NmYTY4Li5jZDk5MjEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfc3lzLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX3N5cy5jCkBAIC0xNSwxNiArMTUsNiBAQAogI2RlZmluZSBRRVRIX0RFVklDRV9BVFRSKF9pZCwgX25hbWUsIF9tb2RlLCBfc2hvdywgX3N0b3JlKSBcCiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl8jI19pZCA9IF9fQVRUUihfbmFtZSwgX21vZGUsIF9zaG93LCBfc3RvcmUpCiAKLXN0YXRpYyBjb25zdCBjaGFyICpxZXRoX2wzX2dldF9jaGVja3N1bV9zdHIoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKLXsKLQlpZiAoY2FyZC0+b3B0aW9ucy5jaGVja3N1bV90eXBlID09IFNXX0NIRUNLU1VNTUlORykKLQkJcmV0dXJuICJzdyI7Ci0JZWxzZSBpZiAoY2FyZC0+b3B0aW9ucy5jaGVja3N1bV90eXBlID09IEhXX0NIRUNLU1VNTUlORykKLQkJcmV0dXJuICJodyI7Ci0JZWxzZQotCQlyZXR1cm4gIm5vIjsKLX0KLQogc3RhdGljIHNzaXplX3QgcWV0aF9sM19kZXZfcm91dGVfc2hvdyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAogCQkJc3RydWN0IHFldGhfcm91dGluZ19pbmZvICpyb3V0ZSwgY2hhciAqYnVmKQogewpAQCAtMjk1LDUxICsyODUsNiBAQAogc3RhdGljIERFVklDRV9BVFRSKGNhbm9uaWNhbF9tYWNhZGRyLCAwNjQ0LCBxZXRoX2wzX2Rldl9jYW5vbmljYWxfbWFjYWRkcl9zaG93LAogCQkgICBxZXRoX2wzX2Rldl9jYW5vbmljYWxfbWFjYWRkcl9zdG9yZSk7CiAKLXN0YXRpYyBzc2l6ZV90IHFldGhfbDNfZGV2X2NoZWNrc3VtX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAotCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0KLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXMgY2hlY2tzdW1taW5nXG4iLAotCQkJcWV0aF9sM19nZXRfY2hlY2tzdW1fc3RyKGNhcmQpKTsKLX0KLQotc3RhdGljIHNzaXplX3QgcWV0aF9sM19kZXZfY2hlY2tzdW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWVudW0gcWV0aF9jaGVja3N1bV90eXBlcyBjc3VtX3R5cGU7Ci0JY2hhciAqdG1wOwotCWludCByYyA9IDA7Ci0KLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbXV0ZXhfbG9jaygmY2FyZC0+Y29uZl9tdXRleCk7Ci0JdG1wID0gc3Ryc2VwKChjaGFyICoqKSAmYnVmLCAiXG4iKTsKLQlpZiAoIXN0cmNtcCh0bXAsICJzd19jaGVja3N1bW1pbmciKSkKLQkJY3N1bV90eXBlID0gU1dfQ0hFQ0tTVU1NSU5HOwotCWVsc2UgaWYgKCFzdHJjbXAodG1wLCAiaHdfY2hlY2tzdW1taW5nIikpCi0JCWNzdW1fdHlwZSA9IEhXX0NIRUNLU1VNTUlORzsKLQllbHNlIGlmICghc3RyY21wKHRtcCwgIm5vX2NoZWNrc3VtbWluZyIpKQotCQljc3VtX3R5cGUgPSBOT19DSEVDS1NVTU1JTkc7Ci0JZWxzZSB7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmMgPSBxZXRoX2wzX3NldF9yeF9jc3VtKGNhcmQsIGNzdW1fdHlwZSk7Ci1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZjYXJkLT5jb25mX211dGV4KTsKLQlyZXR1cm4gcmMgPyByYyA6IGNvdW50OwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIoY2hlY2tzdW1taW5nLCAwNjQ0LCBxZXRoX2wzX2Rldl9jaGVja3N1bV9zaG93LAotCQlxZXRoX2wzX2Rldl9jaGVja3N1bV9zdG9yZSk7Ci0KIHN0YXRpYyBzc2l6ZV90IHFldGhfbDNfZGV2X3NuaWZmZXJfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC00MDIsNjEgKzM0NywxMyBAQAogc3RhdGljIERFVklDRV9BVFRSKHNuaWZmZXIsIDA2NDQsIHFldGhfbDNfZGV2X3NuaWZmZXJfc2hvdywKIAkJcWV0aF9sM19kZXZfc25pZmZlcl9zdG9yZSk7CiAKLXN0YXRpYyBzc2l6ZV90IHFldGhfbDNfZGV2X2xhcmdlX3NlbmRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0KLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3dpdGNoIChjYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQpIHsKLQljYXNlIFFFVEhfTEFSR0VfU0VORF9OTzoKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsICJubyIpOwotCWNhc2UgUUVUSF9MQVJHRV9TRU5EX1RTTzoKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsICJUU08iKTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgIk4vQSIpOwotCX0KLX0KLQotc3RhdGljIHNzaXplX3QgcWV0aF9sM19kZXZfbGFyZ2Vfc2VuZF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JZW51bSBxZXRoX2xhcmdlX3NlbmRfdHlwZXMgdHlwZTsKLQlpbnQgcmMgPSAwOwotCWNoYXIgKnRtcDsKLQotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JdG1wID0gc3Ryc2VwKChjaGFyICoqKSAmYnVmLCAiXG4iKTsKLQlpZiAoIXN0cmNtcCh0bXAsICJubyIpKQotCQl0eXBlID0gUUVUSF9MQVJHRV9TRU5EX05POwotCWVsc2UgaWYgKCFzdHJjbXAodG1wLCAiVFNPIikpCi0JCXR5cGUgPSBRRVRIX0xBUkdFX1NFTkRfVFNPOwotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltdXRleF9sb2NrKCZjYXJkLT5jb25mX211dGV4KTsKLQlpZiAoY2FyZC0+b3B0aW9ucy5sYXJnZV9zZW5kICE9IHR5cGUpCi0JCXJjID0gcWV0aF9sM19zZXRfbGFyZ2Vfc2VuZChjYXJkLCB0eXBlKTsKLQltdXRleF91bmxvY2soJmNhcmQtPmNvbmZfbXV0ZXgpOwotCXJldHVybiByYyA/IHJjIDogY291bnQ7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihsYXJnZV9zZW5kLCAwNjQ0LCBxZXRoX2wzX2Rldl9sYXJnZV9zZW5kX3Nob3csCi0JCSAgIHFldGhfbDNfZGV2X2xhcmdlX3NlbmRfc3RvcmUpOwotCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcWV0aF9sM19kZXZpY2VfYXR0cnNbXSA9IHsKIAkmZGV2X2F0dHJfcm91dGU0LmF0dHIsCiAJJmRldl9hdHRyX3JvdXRlNi5hdHRyLAogCSZkZXZfYXR0cl9mYWtlX2Jyb2FkY2FzdC5hdHRyLAogCSZkZXZfYXR0cl9icm9hZGNhc3RfbW9kZS5hdHRyLAogCSZkZXZfYXR0cl9jYW5vbmljYWxfbWFjYWRkci5hdHRyLAotCSZkZXZfYXR0cl9jaGVja3N1bW1pbmcuYXR0ciwKIAkmZGV2X2F0dHJfc25pZmZlci5hdHRyLAotCSZkZXZfYXR0cl9sYXJnZV9zZW5kLmF0dHIsCiAJTlVMTCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2hiYS5jIGIvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfaGJhLmMKaW5kZXggZGE3Yjk4OC4uZjk4MDYwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfaGJhLmMKKysrIGIvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfaGJhLmMKQEAgLTc1LDggKzc1LDEwIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkFSRUNBIChBUkMxMXh4LzEyeHgvMTZ4eC8xODgwKSBTQVRBL1NBUyBSQUlEIEhvc3QgQnVzIEFkYXB0ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKIE1PRFVMRV9WRVJTSU9OKEFSQ01TUl9EUklWRVJfVkVSU0lPTik7Ci1zdGF0aWMgaW50IHNsZWVwdGltZSA9IDEwOwotc3RhdGljIGludCByZXRyeWNvdW50ID0gMTI7CisKKyNkZWZpbmUJQVJDTVNSX1NMRUVQVElNRQkxMAorI2RlZmluZQlBUkNNU1JfUkVUUllDT1VOVAkxMgorCiB3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3E7CiBzdGF0aWMgaW50IGFyY21zcl9pb3BfbWVzc2FnZV94ZmVyKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2IsCiAJCQkJCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCk7CkBAIC0xNzEsMjQgKzE3Myw2IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwotaW50IGFyY21zcl9zbGVlcF9mb3JfYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKLXsKLQkJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBOVUxMOwotCQlpbnQgaSwgaXNsZWVwOwotCQlzaG9zdCA9IGNtZC0+ZGV2aWNlLT5ob3N0OwotCQlpc2xlZXAgPSBzbGVlcHRpbWUgLyAxMDsKLQkJaWYgKGlzbGVlcCA+IDApIHsKLQkJCWZvciAoaSA9IDA7IGkgPCBpc2xlZXA7IGkrKykgewotCQkJCW1zbGVlcCgxMDAwMCk7Ci0JCQl9Ci0JCX0KLQotCQlpc2xlZXAgPSBzbGVlcHRpbWUgJSAxMDsKLQkJaWYgKGlzbGVlcCA+IDApIHsKLQkJCW1zbGVlcChpc2xlZXAqMTAwMCk7Ci0JCX0KLQkJcmV0dXJuIDA7Ci19CiAKIHN0YXRpYyB2b2lkIGFyY21zcl9mcmVlX2hiYl9tdShzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKQogewpAQCAtMzIzLDY2ICszMDcsNjQgQEAKIAogCWRlZmF1bHQ6IGFjYi0+YWRhcHRlcl90eXBlID0gQUNCX0FEQVBURVJfVFlQRV9BOwogCX0KLX0JCit9CiAKIHN0YXRpYyB1aW50OF90IGFyY21zcl9oYmFfd2FpdF9tc2dpbnRfcmVhZHkoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYikKIHsKIAlzdHJ1Y3QgTWVzc2FnZVVuaXRfQSBfX2lvbWVtICpyZWcgPSBhY2ItPnBtdUE7Ci0JdWludDMyX3QgSW5kZXg7Ci0JdWludDhfdCBSZXRyaWVzID0gMHgwMDsKLQlkbyB7Ci0JCWZvciAoSW5kZXggPSAwOyBJbmRleCA8IDEwMDsgSW5kZXgrKykgewotCQkJaWYgKHJlYWRsKCZyZWctPm91dGJvdW5kX2ludHN0YXR1cykgJgotCQkJCQlBUkNNU1JfTVVfT1VUQk9VTkRfTUVTU0FHRTBfSU5UKSB7Ci0JCQkJd3JpdGVsKEFSQ01TUl9NVV9PVVRCT1VORF9NRVNTQUdFMF9JTlQsCi0JCQkJCSZyZWctPm91dGJvdW5kX2ludHN0YXR1cyk7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCQltc2xlZXAoMTApOwotCQl9LyptYXggMSBzZWNvbmRzKi8KKwlpbnQgaTsKIAotCX0gd2hpbGUgKFJldHJpZXMrKyA8IDIwKTsvKm1heCAyMCBzZWMqLworCWZvciAoaSA9IDA7IGkgPCAyMDAwOyBpKyspIHsKKwkJaWYgKHJlYWRsKCZyZWctPm91dGJvdW5kX2ludHN0YXR1cykgJgorCQkJCUFSQ01TUl9NVV9PVVRCT1VORF9NRVNTQUdFMF9JTlQpIHsKKwkJCXdyaXRlbChBUkNNU1JfTVVfT1VUQk9VTkRfTUVTU0FHRTBfSU5ULAorCQkJCSZyZWctPm91dGJvdW5kX2ludHN0YXR1cyk7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQltc2xlZXAoMTApOworCX0gLyogbWF4IDIwIHNlY29uZHMgKi8KKwogCXJldHVybiBmYWxzZTsKIH0KIAogc3RhdGljIHVpbnQ4X3QgYXJjbXNyX2hiYl93YWl0X21zZ2ludF9yZWFkeShzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKQogewogCXN0cnVjdCBNZXNzYWdlVW5pdF9CICpyZWcgPSBhY2ItPnBtdUI7Ci0JdWludDMyX3QgSW5kZXg7Ci0JdWludDhfdCBSZXRyaWVzID0gMHgwMDsKLQlkbyB7Ci0JCWZvciAoSW5kZXggPSAwOyBJbmRleCA8IDEwMDsgSW5kZXgrKykgewotCQkJaWYgKHJlYWRsKHJlZy0+aW9wMmRydl9kb29yYmVsbCkKLQkJCQkmIEFSQ01TUl9JT1AyRFJWX01FU1NBR0VfQ01EX0RPTkUpIHsKLQkJCQl3cml0ZWwoQVJDTVNSX01FU1NBR0VfSU5UX0NMRUFSX1BBVFRFUk4KLQkJCQkJLCByZWctPmlvcDJkcnZfZG9vcmJlbGwpOwotCQkJCXdyaXRlbChBUkNNU1JfRFJWMklPUF9FTkRfT0ZfSU5URVJSVVBULCByZWctPmRydjJpb3BfZG9vcmJlbGwpOwotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQkJbXNsZWVwKDEwKTsKLQkJfS8qbWF4IDEgc2Vjb25kcyovCisJaW50IGk7CiAKLQl9IHdoaWxlIChSZXRyaWVzKysgPCAyMCk7LyptYXggMjAgc2VjKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjAwMDsgaSsrKSB7CisJCWlmIChyZWFkbChyZWctPmlvcDJkcnZfZG9vcmJlbGwpCisJCQkmIEFSQ01TUl9JT1AyRFJWX01FU1NBR0VfQ01EX0RPTkUpIHsKKwkJCXdyaXRlbChBUkNNU1JfTUVTU0FHRV9JTlRfQ0xFQVJfUEFUVEVSTiwKKwkJCQkJcmVnLT5pb3AyZHJ2X2Rvb3JiZWxsKTsKKwkJCXdyaXRlbChBUkNNU1JfRFJWMklPUF9FTkRfT0ZfSU5URVJSVVBULAorCQkJCQlyZWctPmRydjJpb3BfZG9vcmJlbGwpOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJbXNsZWVwKDEwKTsKKwl9IC8qIG1heCAyMCBzZWNvbmRzICovCisKIAlyZXR1cm4gZmFsc2U7CiB9CiAKIHN0YXRpYyB1aW50OF90IGFyY21zcl9oYmNfd2FpdF9tc2dpbnRfcmVhZHkoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKnBBQ0IpCiB7CiAJc3RydWN0IE1lc3NhZ2VVbml0X0MgKnBoYmNtdSA9IChzdHJ1Y3QgTWVzc2FnZVVuaXRfQyAqKXBBQ0ItPnBtdUM7Ci0JdW5zaWduZWQgY2hhciBSZXRyaWVzID0gMHgwMDsKLQl1aW50MzJfdCBJbmRleDsKLQlkbyB7Ci0JCWZvciAoSW5kZXggPSAwOyBJbmRleCA8IDEwMDsgSW5kZXgrKykgewotCQkJaWYgKHJlYWRsKCZwaGJjbXUtPm91dGJvdW5kX2Rvb3JiZWxsKSAmIEFSQ01TUl9IQkNNVV9JT1AyRFJWX01FU1NBR0VfQ01EX0RPTkUpIHsKLQkJCQl3cml0ZWwoQVJDTVNSX0hCQ01VX0lPUDJEUlZfTUVTU0FHRV9DTURfRE9ORV9ET09SQkVMTF9DTEVBUiwgJnBoYmNtdS0+b3V0Ym91bmRfZG9vcmJlbGxfY2xlYXIpOy8qY2xlYXIgaW50ZXJydXB0Ki8KLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJCS8qIG9uZSB1cyBkZWxheQkqLwotCQkJbXNsZWVwKDEwKTsKLQkJfSAvKm1heCAxIHNlY29uZHMqLwotCX0gd2hpbGUgKFJldHJpZXMrKyA8IDIwKTsgLyptYXggMjAgc2VjKi8KKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAyMDAwOyBpKyspIHsKKwkJaWYgKHJlYWRsKCZwaGJjbXUtPm91dGJvdW5kX2Rvb3JiZWxsKQorCQkJCSYgQVJDTVNSX0hCQ01VX0lPUDJEUlZfTUVTU0FHRV9DTURfRE9ORSkgeworCQkJd3JpdGVsKEFSQ01TUl9IQkNNVV9JT1AyRFJWX01FU1NBR0VfQ01EX0RPTkVfRE9PUkJFTExfQ0xFQVIsCisJCQkJJnBoYmNtdS0+b3V0Ym91bmRfZG9vcmJlbGxfY2xlYXIpOyAvKmNsZWFyIGludGVycnVwdCovCisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQltc2xlZXAoMTApOworCX0gLyogbWF4IDIwIHNlY29uZHMgKi8KKwogCXJldHVybiBmYWxzZTsKIH0KKwogc3RhdGljIHZvaWQgYXJjbXNyX2ZsdXNoX2hiYV9jYWNoZShzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKQogewogCXN0cnVjdCBNZXNzYWdlVW5pdF9BIF9faW9tZW0gKnJlZyA9IGFjYi0+cG11QTsKQEAgLTQ1OSwxMCArNDQxLDExIEBACiAJc3RydWN0IENvbW1hbmRDb250cm9sQmxvY2sgKmNjYl90bXA7CiAJaW50IGkgPSAwLCBqID0gMDsKIAlkbWFfYWRkcl90IGNkYl9waHlhZGRyOwotCXVuc2lnbmVkIGxvbmcgcm91bmR1cF9jY2JzaXplID0gMCwgb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgcm91bmR1cF9jY2JzaXplOwogCXVuc2lnbmVkIGxvbmcgbWF4X3hmZXJfbGVuOwogCXVuc2lnbmVkIGxvbmcgbWF4X3NnX2VudHJ5czsKIAl1aW50MzJfdCAgZmlybV9jb25maWdfdmVyc2lvbjsKKwogCWZvciAoaSA9IDA7IGkgPCBBUkNNU1JfTUFYX1RBUkdFVElEOyBpKyspCiAJCWZvciAoaiA9IDA7IGogPCBBUkNNU1JfTUFYX1RBUkdFVExVTjsgaisrKQogCQkJYWNiLT5kZXZzdGF0ZVtpXVtqXSA9IEFSRUNBX1JBSURfR09ORTsKQEAgLTQ3MiwyMyArNDU1LDIwIEBACiAJZmlybV9jb25maWdfdmVyc2lvbiA9IGFjYi0+ZmlybV9jZmdfdmVyc2lvbjsKIAlpZigoZmlybV9jb25maWdfdmVyc2lvbiAmIDB4RkYpID49IDMpewogCQltYXhfeGZlcl9sZW4gPSAoQVJDTVNSX0NEQl9TR19QQUdFX0xFTkdUSCA8PCAoKGZpcm1fY29uZmlnX3ZlcnNpb24gPj4gOCkgJiAweEZGKSkgKiAxMDI0Oy8qIG1heCA0TSBieXRlICovCi0JCW1heF9zZ19lbnRyeXMgPSAobWF4X3hmZXJfbGVuLzQwOTYpOwkKKwkJbWF4X3NnX2VudHJ5cyA9IChtYXhfeGZlcl9sZW4vNDA5Nik7CiAJfQogCWFjYi0+aG9zdC0+bWF4X3NlY3RvcnMgPSBtYXhfeGZlcl9sZW4vNTEyOwogCWFjYi0+aG9zdC0+c2dfdGFibGVzaXplID0gbWF4X3NnX2VudHJ5czsKIAlyb3VuZHVwX2NjYnNpemUgPSByb3VuZHVwKHNpemVvZihzdHJ1Y3QgQ29tbWFuZENvbnRyb2xCbG9jaykgKyAobWF4X3NnX2VudHJ5cyAtIDEpICogc2l6ZW9mKHN0cnVjdCBTRzY0RU5UUlkpLCAzMik7Ci0JYWNiLT51bmNhY2hlX3NpemUgPSByb3VuZHVwX2NjYnNpemUgKiBBUkNNU1JfTUFYX0ZSRUVDQ0JfTlVNICsgMzI7CisJYWNiLT51bmNhY2hlX3NpemUgPSByb3VuZHVwX2NjYnNpemUgKiBBUkNNU1JfTUFYX0ZSRUVDQ0JfTlVNOwogCWRtYV9jb2hlcmVudCA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LCBhY2ItPnVuY2FjaGVfc2l6ZSwgJmRtYV9jb2hlcmVudF9oYW5kbGUsIEdGUF9LRVJORUwpOwogCWlmKCFkbWFfY29oZXJlbnQpewotCQlwcmludGsoS0VSTl9OT1RJQ0UgImFyY21zciVkOiBkbWFfYWxsb2NfY29oZXJlbnQgZ290IGVycm9yIFxuIiwgYWNiLT5ob3N0LT5ob3N0X25vKTsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJhcmNtc3IlZDogZG1hX2FsbG9jX2NvaGVyZW50IGdvdCBlcnJvclxuIiwgYWNiLT5ob3N0LT5ob3N0X25vKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWFjYi0+ZG1hX2NvaGVyZW50ID0gZG1hX2NvaGVyZW50OwogCWFjYi0+ZG1hX2NvaGVyZW50X2hhbmRsZSA9IGRtYV9jb2hlcmVudF9oYW5kbGU7CiAJbWVtc2V0KGRtYV9jb2hlcmVudCwgMCwgYWNiLT51bmNhY2hlX3NpemUpOwotCW9mZnNldCA9IHJvdW5kdXAoKHVuc2lnbmVkIGxvbmcpZG1hX2NvaGVyZW50LCAzMikgLSAodW5zaWduZWQgbG9uZylkbWFfY29oZXJlbnQ7Ci0JZG1hX2NvaGVyZW50X2hhbmRsZSA9IGRtYV9jb2hlcmVudF9oYW5kbGUgKyBvZmZzZXQ7Ci0JZG1hX2NvaGVyZW50ID0gKHN0cnVjdCBDb21tYW5kQ29udHJvbEJsb2NrICopZG1hX2NvaGVyZW50ICsgb2Zmc2V0OwogCWNjYl90bXAgPSBkbWFfY29oZXJlbnQ7CiAJYWNiLT52aXIycGh5X29mZnNldCA9ICh1bnNpZ25lZCBsb25nKWRtYV9jb2hlcmVudCAtICh1bnNpZ25lZCBsb25nKWRtYV9jb2hlcmVudF9oYW5kbGU7CiAJZm9yKGkgPSAwOyBpIDwgQVJDTVNSX01BWF9GUkVFQ0NCX05VTTsgaSsrKXsKQEAgLTI2MDIsMTIgKzI1ODIsOCBAQAogCQlpZiAoY2RiX3BoeWFkZHJfaGkzMiAhPSAwKSB7CiAJCQlzdHJ1Y3QgTWVzc2FnZVVuaXRfQyAqcmVnID0gKHN0cnVjdCBNZXNzYWdlVW5pdF9DICopYWNiLT5wbXVDOwogCi0JCQlpZiAoY2RiX3BoeWFkZHJfaGkzMiAhPSAwKSB7Ci0JCQkJdW5zaWduZWQgY2hhciBSZXRyaWVzID0gMHgwMDsKLQkJCQlkbyB7Ci0JCQkJCXByaW50ayhLRVJOX05PVElDRSAiYXJjbXNyJWQ6IGNkYl9waHlhZGRyX2hpMzI9MHgleCBcbiIsIGFjYi0+YWRhcHRlcl9pbmRleCwgY2RiX3BoeWFkZHJfaGkzMik7Ci0JCQkJfSB3aGlsZSAoUmV0cmllcysrIDwgMTAwKTsKLQkJCX0KKwkJCXByaW50ayhLRVJOX05PVElDRSAiYXJjbXNyJWQ6IGNkYl9waHlhZGRyX2hpMzI9MHgleFxuIiwKKwkJCQkJYWNiLT5hZGFwdGVyX2luZGV4LCBjZGJfcGh5YWRkcl9oaTMyKTsKIAkJCXdyaXRlbChBUkNNU1JfU0lHTkFUVVJFX1NFVF9DT05GSUcsICZyZWctPm1zZ2NvZGVfcndidWZmZXJbMF0pOwogCQkJd3JpdGVsKGNkYl9waHlhZGRyX2hpMzIsICZyZWctPm1zZ2NvZGVfcndidWZmZXJbMV0pOwogCQkJd3JpdGVsKEFSQ01TUl9JTkJPVU5EX01FU0cwX1NFVF9DT05GSUcsICZyZWctPmluYm91bmRfbXNnYWRkcjApOwpAQCAtMjk1NSwxMiArMjkzMSwxMiBAQAogCQkJCWFyY21zcl9oYXJkd2FyZV9yZXNldChhY2IpOwogCQkJCWFjYi0+YWNiX2ZsYWdzICY9IH5BQ0JfRl9JT1BfSU5JVEVEOwogc2xlZXBfYWdhaW46Ci0JCQkJYXJjbXNyX3NsZWVwX2Zvcl9idXNfcmVzZXQoY21kKTsKKwkJCQlzc2xlZXAoQVJDTVNSX1NMRUVQVElNRSk7CiAJCQkJaWYgKChyZWFkbCgmcmVnLT5vdXRib3VuZF9tc2dhZGRyMSkgJiBBUkNNU1JfT1VUQk9VTkRfTUVTRzFfRklSTVdBUkVfT0spID09IDApIHsKLQkJCQkJcHJpbnRrKEtFUk5fRVJSICJhcmNtc3IlZDogd2FpdGluZyBmb3IgaHcgYnVzIHJlc2V0IHJldHVybiwgcmV0cnk9JWQgXG4iLCBhY2ItPmhvc3QtPmhvc3Rfbm8sIHJldHJ5X2NvdW50KTsKLQkJCQkJaWYgKHJldHJ5X2NvdW50ID4gcmV0cnljb3VudCkgeworCQkJCQlwcmludGsoS0VSTl9FUlIgImFyY21zciVkOiB3YWl0aW5nIGZvciBodyBidXMgcmVzZXQgcmV0dXJuLCByZXRyeT0lZFxuIiwgYWNiLT5ob3N0LT5ob3N0X25vLCByZXRyeV9jb3VudCk7CisJCQkJCWlmIChyZXRyeV9jb3VudCA+IEFSQ01TUl9SRVRSWUNPVU5UKSB7CiAJCQkJCQlhY2ItPmZ3X2ZsYWcgPSBGV19ERUFETE9DSzsKLQkJCQkJCXByaW50ayhLRVJOX0VSUiAiYXJjbXNyJWQ6IHdhaXRpbmcgZm9yIGh3IGJ1cyByZXNldCByZXR1cm4sIFJFVFJZIFRFUk1JTkFURUQhISBcbiIsIGFjYi0+aG9zdC0+aG9zdF9ubyk7CisJCQkJCQlwcmludGsoS0VSTl9FUlIgImFyY21zciVkOiB3YWl0aW5nIGZvciBodyBidXMgcmVzZXQgcmV0dXJuLCBSRVRSWSBURVJNSU5BVEVEISFcbiIsIGFjYi0+aG9zdC0+aG9zdF9ubyk7CiAJCQkJCQlyZXR1cm4gRkFJTEVEOwogCQkJCQl9CiAJCQkJCXJldHJ5X2NvdW50Kys7CkBAIC0zMDI1LDEyICszMDAxLDEyIEBACiAJCQkJYXJjbXNyX2hhcmR3YXJlX3Jlc2V0KGFjYik7CiAJCQkJYWNiLT5hY2JfZmxhZ3MgJj0gfkFDQl9GX0lPUF9JTklURUQ7CiBzbGVlcDoKLQkJCQlhcmNtc3Jfc2xlZXBfZm9yX2J1c19yZXNldChjbWQpOworCQkJCXNzbGVlcChBUkNNU1JfU0xFRVBUSU1FKTsKIAkJCQlpZiAoKHJlYWRsKCZyZWctPmhvc3RfZGlhZ25vc3RpYykgJiAweDA0KSAhPSAwKSB7Ci0JCQkJCXByaW50ayhLRVJOX0VSUiAiYXJjbXNyJWQ6IHdhaXRpbmcgZm9yIGh3IGJ1cyByZXNldCByZXR1cm4sIHJldHJ5PSVkIFxuIiwgYWNiLT5ob3N0LT5ob3N0X25vLCByZXRyeV9jb3VudCk7Ci0JCQkJCWlmIChyZXRyeV9jb3VudCA+IHJldHJ5Y291bnQpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSICJhcmNtc3IlZDogd2FpdGluZyBmb3IgaHcgYnVzIHJlc2V0IHJldHVybiwgcmV0cnk9JWRcbiIsIGFjYi0+aG9zdC0+aG9zdF9ubywgcmV0cnlfY291bnQpOworCQkJCQlpZiAocmV0cnlfY291bnQgPiBBUkNNU1JfUkVUUllDT1VOVCkgewogCQkJCQkJYWNiLT5md19mbGFnID0gRldfREVBRExPQ0s7Ci0JCQkJCQlwcmludGsoS0VSTl9FUlIgImFyY21zciVkOiB3YWl0aW5nIGZvciBodyBidXMgcmVzZXQgcmV0dXJuLCBSRVRSWSBURVJNSU5BVEVEISEgXG4iLCBhY2ItPmhvc3QtPmhvc3Rfbm8pOworCQkJCQkJcHJpbnRrKEtFUk5fRVJSICJhcmNtc3IlZDogd2FpdGluZyBmb3IgaHcgYnVzIHJlc2V0IHJldHVybiwgUkVUUlkgVEVSTUlOQVRFRCEhXG4iLCBhY2ItPmhvc3QtPmhvc3Rfbm8pOwogCQkJCQkJcmV0dXJuIEZBSUxFRDsKIAkJCQkJfQogCQkJCQlyZXRyeV9jb3VudCsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlLmggYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmUuaAppbmRleCAxY2I4YTVlLi4xZDdiOTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmUuaAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmUuaApAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMCBTZXJ2ZXJFbmdpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDExIEVtdWxleAogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC04LDExICs4LDExIEBACiAgKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KICAqCiAgKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQorICogbGludXgtZHJpdmVyc0BlbXVsZXguY29tCiAgKgotICogU2VydmVyRW5naW5lcwotICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKLSAqIFN1bm55dmFsZSwgQ0EgOTQwODUKKyAqIEVtdWxleAorICogMzMzMyBTdXNhbiBTdHJlZXQKKyAqIENvc3RhIE1lc2EsIENBIDkyNjI2CiAgKi8KIAogI2lmbmRlZiBCRUlTQ1NJX0gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmMgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5jCmluZGV4IGFkMjQ2MzYuLmI4YTgyZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmMKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMCBTZXJ2ZXJFbmdpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDExIEVtdWxleAogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC04LDExICs4LDExIEBACiAgKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KICAqCiAgKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQorICogbGludXgtZHJpdmVyc0BlbXVsZXguY29tCiAgKgotICogU2VydmVyRW5naW5lcwotICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKLSAqIFN1bm55dmFsZSwgQ0EgOTQwODUKKyAqIEVtdWxleAorICogMzMzMyBTdXNhbiBTdHJlZXQKKyAqIENvc3RhIE1lc2EsIENBIDkyNjI2CiAgKi8KIAogI2luY2x1ZGUgImJlLmgiCkBAIC00NTgsNiArNDU4LDcgQEAKIAlyZXFfaGRyLT5vcGNvZGUgPSBvcGNvZGU7CiAJcmVxX2hkci0+c3Vic3lzdGVtID0gc3Vic3lzdGVtOwogCXJlcV9oZHItPnJlcXVlc3RfbGVuZ3RoID0gY3B1X3RvX2xlMzIoY21kX2xlbiAtIHNpemVvZigqcmVxX2hkcikpOworCXJlcV9oZHItPnRpbWVvdXQgPSAxMjA7CiB9CiAKIHN0YXRpYyB2b2lkIGJlX2NtZF9wYWdlX2FkZHJzX3ByZXBhcmUoc3RydWN0IHBoeXNfYWRkciAqcGFnZXMsIHUzMiBtYXhfcGFnZXMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuaAppbmRleCBmYmQxZGMyLi40OTdlYjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmgKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgU2VydmVyRW5naW5lcworICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMSBFbXVsZXgKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtOCwxMSArOCwxMSBAQAogICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCiAgKgogICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KKyAqIGxpbnV4LWRyaXZlcnNAZW11bGV4LmNvbQogICoKLSAqIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1CisgKiBFbXVsZXgKKyAqIDMzMzMgU3VzYW4gU3RyZWV0CisgKiBDb3N0YSBNZXNhLCBDQSA5MjYyNgogICovCiAKICNpZm5kZWYgQkVJU0NTSV9DTURTX0gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMKaW5kZXggODY4Y2M1NS4uM2NhZDEwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgU2VydmVyRW5naW5lcworICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMSBFbXVsZXgKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNywxNSArNywxNCBAQAogICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAogICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCiAgKgotICogV3JpdHRlbiBieTogSmF5YW1vaGFuIEthbGxpY2thbCAoamF5YW1vaGFua0BzZXJ2ZXJlbmdpbmVzLmNvbSkKKyAqIFdyaXR0ZW4gYnk6IEpheWFtb2hhbiBLYWxsaWNrYWwgKGpheWFtb2hhbi5rYWxsaWNrYWxAZW11bGV4LmNvbSkKICAqCiAgKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQorICogbGludXgtZHJpdmVyc0BlbXVsZXguY29tCiAgKgotICogU2VydmVyRW5naW5lcwotICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKLSAqIFN1bm55dmFsZSwgQ0EgOTQwODUKLSAqCisgKiBFbXVsZXgKKyAqIDMzMzMgU3VzYW4gU3RyZWV0CisgKiBDb3N0YSBNZXNhLCBDQSA5MjYyNgogICovCiAKICNpbmNsdWRlIDxzY3NpL2xpYmlzY3NpLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuaCBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5oCmluZGV4IDljNTMyNzkuLmZmNjBiN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5oCkBAIC0xLDUgKzEsNSBAQAogLyoqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDEwIFNlcnZlckVuZ2luZXMKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTEgRW11bGV4CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTcsMTUgKzcsMTQgQEAKICAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKICAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgogICoKLSAqIFdyaXR0ZW4gYnk6IEpheWFtb2hhbiBLYWxsaWNrYWwgKGpheWFtb2hhbmtAc2VydmVyZW5naW5lcy5jb20pCisgKiBXcml0dGVuIGJ5OiBKYXlhbW9oYW4gS2FsbGlja2FsIChqYXlhbW9oYW4ua2FsbGlja2FsQGVtdWxleC5jb20pCiAgKgogICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KKyAqIGxpbnV4LWRyaXZlcnNAZW11bGV4LmNvbQogICoKLSAqIFNlcnZlckVuZ2luZXMKLSAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCi0gKiBTdW5ueXZhbGUsIENBIDk0MDg1Ci0gKgorICogRW11bGV4CisgKiAzMzMzIFN1c2FuIFN0cmVldAorICogQ29zdGEgTWVzYSwgQ0EgOTI2MjYKICAqLwogCiAjaWZuZGVmIF9CRV9JU0NTSV8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmMgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jCmluZGV4IDI0ZTIwYmEuLmNlYTliMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmMKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uYwpAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMCBTZXJ2ZXJFbmdpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDExIEVtdWxleAogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC03LDE2ICs3LDE2IEBACiAgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCiAgKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KICAqCi0gKiBXcml0dGVuIGJ5OiBKYXlhbW9oYW4gS2FsbGlja2FsIChqYXlhbW9oYW5rQHNlcnZlcmVuZ2luZXMuY29tKQorICogV3JpdHRlbiBieTogSmF5YW1vaGFuIEthbGxpY2thbCAoamF5YW1vaGFuLmthbGxpY2thbEBlbXVsZXguY29tKQogICoKICAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCisgKiBsaW51eC1kcml2ZXJzQGVtdWxleC5jb20KICAqCi0gKiAgU2VydmVyRW5naW5lcwotICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKLSAqIFN1bm55dmFsZSwgQ0EgOTQwODUKLSAqCisgKiBFbXVsZXgKKyAqIDMzMzMgU3VzYW4gU3RyZWV0CisgKiBDb3N0YSBNZXNhLCBDQSA5MjYyNgogICovCisKICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTQyMCw3ICs0MjAsOCBAQAogCXJldHVybiAwOwogCiBmcmVlX2tzZXQ6Ci0JaXNjc2lfYm9vdF9kZXN0cm95X2tzZXQocGhiYS0+Ym9vdF9rc2V0KTsKKwlpZiAocGhiYS0+Ym9vdF9rc2V0KQorCQlpc2NzaV9ib290X2Rlc3Ryb3lfa3NldChwaGJhLT5ib290X2tzZXQpOwogCXJldHVybiAtRU5PTUVNOwogfQogCkBAIC0zNDY0LDIzICszNDY1LDIzIEBACiAJYWRkciA9ICh1OCBfX2lvbWVtICopICgodTggX19pb21lbSAqKSBjdHJsLT5wY2ljZmcgKwogCQkJUENJQ0ZHX01FTUJBUl9DVFJMX0lOVF9DVFJMX09GRlNFVCk7CiAJcmVnID0gaW9yZWFkMzIoYWRkcik7Ci0JU0VfREVCVUcoREJHX0xWTF84LCAicmVnID14JTA4eFxuIiwgcmVnKTsKIAogCWVuYWJsZWQgPSByZWcgJiBNRU1CQVJfQ1RSTF9JTlRfQ1RSTF9IT1NUSU5UUl9NQVNLOwogCWlmICghZW5hYmxlZCkgewogCQlyZWcgfD0gTUVNQkFSX0NUUkxfSU5UX0NUUkxfSE9TVElOVFJfTUFTSzsKIAkJU0VfREVCVUcoREJHX0xWTF84LCAicmVnID14JTA4eCBhZGRyPSVwXG4iLCByZWcsIGFkZHIpOwogCQlpb3dyaXRlMzIocmVnLCBhZGRyKTsKLQkJaWYgKCFwaGJhLT5tc2l4X2VuYWJsZWQpIHsKLQkJCWVxID0gJnBod2lfY29udGV4dC0+YmVfZXFbMF0ucTsKKwl9CisKKwlpZiAoIXBoYmEtPm1zaXhfZW5hYmxlZCkgeworCQllcSA9ICZwaHdpX2NvbnRleHQtPmJlX2VxWzBdLnE7CisJCVNFX0RFQlVHKERCR19MVkxfOCwgImVxLT5pZD0lZFxuIiwgZXEtPmlkKTsKKwkJaHdpX3JpbmdfZXFfZGIocGhiYSwgZXEtPmlkLCAwLCAwLCAxLCAxKTsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDw9IHBoYmEtPm51bV9jcHVzOyBpKyspIHsKKwkJCWVxID0gJnBod2lfY29udGV4dC0+YmVfZXFbaV0ucTsKIAkJCVNFX0RFQlVHKERCR19MVkxfOCwgImVxLT5pZD0lZFxuIiwgZXEtPmlkKTsKIAkJCWh3aV9yaW5nX2VxX2RiKHBoYmEsIGVxLT5pZCwgMCwgMCwgMSwgMSk7Ci0JCX0gZWxzZSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDw9IHBoYmEtPm51bV9jcHVzOyBpKyspIHsKLQkJCQllcSA9ICZwaHdpX2NvbnRleHQtPmJlX2VxW2ldLnE7Ci0JCQkJU0VfREVCVUcoREJHX0xWTF84LCAiZXEtPmlkPSVkXG4iLCBlcS0+aWQpOwotCQkJCWh3aV9yaW5nX2VxX2RiKHBoYmEsIGVxLT5pZCwgMCwgMCwgMSwgMSk7Ci0JCQl9CiAJCX0KIAl9CiB9CkBAIC00MDE5LDEyICs0MDIwLDE3IEBACiAJCWh3aV93cml0ZV9idWZmZXIocHdyYiwgdGFzayk7CiAJCWJyZWFrOwogCWNhc2UgSVNDU0lfT1BfTk9PUF9PVVQ6Ci0JCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLAotCQkJICAgICAgSU5JX1JEX0NNRCk7Ci0JCWlmICh0YXNrLT5oZHItPnR0dCA9PSBJU0NTSV9SRVNFUlZFRF9UQUcpCisJCWlmICh0YXNrLT5oZHItPnR0dCAhPSBJU0NTSV9SRVNFUlZFRF9UQUcpIHsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLAorCQkJCSAgICAgIFRHVF9ETV9DTUQpOworCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGNtZHNuX2l0dCwKKwkJCQkgICAgICBwd3JiLCAwKTsKIAkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkbXNnLCBwd3JiLCAwKTsKLQkJZWxzZQorCQl9IGVsc2UgeworCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsCisJCQkJICAgICAgSU5JX1JEX0NNRCk7CiAJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZG1zZywgcHdyYiwgMSk7CisJCX0KIAkJaHdpX3dyaXRlX2J1ZmZlcihwd3JiLCB0YXNrKTsKIAkJYnJlYWs7CiAJY2FzZSBJU0NTSV9PUF9URVhUOgpAQCAtNDE0NCwxMCArNDE1MCwxMSBAQAogCQkJICAgIHBoYmEtPmN0cmwubWJveF9tZW1fYWxsb2NlZC5zaXplLAogCQkJICAgIHBoYmEtPmN0cmwubWJveF9tZW1fYWxsb2NlZC52YSwKIAkJCSAgICBwaGJhLT5jdHJsLm1ib3hfbWVtX2FsbG9jZWQuZG1hKTsKKwlpZiAocGhiYS0+Ym9vdF9rc2V0KQorCQlpc2NzaV9ib290X2Rlc3Ryb3lfa3NldChwaGJhLT5ib290X2tzZXQpOwogCWlzY3NpX2hvc3RfcmVtb3ZlKHBoYmEtPnNob3N0KTsKIAlwY2lfZGV2X3B1dChwaGJhLT5wY2lkZXYpOwogCWlzY3NpX2hvc3RfZnJlZShwaGJhLT5zaG9zdCk7Ci0JaXNjc2lfYm9vdF9kZXN0cm95X2tzZXQocGhiYS0+Ym9vdF9rc2V0KTsKIH0KIAogc3RhdGljIHZvaWQgYmVpc2NzaV9tc2l4X2VuYWJsZShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5oIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uaAppbmRleCA5MGViNzRmLi4wODFjMTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5oCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmgKQEAgLTEsNSArMSw1IEBACiAvKioKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgU2VydmVyRW5naW5lcworICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMSBFbXVsZXgKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNywxNSArNywxNCBAQAogICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAogICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCiAgKgotICogV3JpdHRlbiBieTogSmF5YW1vaGFuIEthbGxpY2thbCAoamF5YW1vaGFua0BzZXJ2ZXJlbmdpbmVzLmNvbSkKKyAqIFdyaXR0ZW4gYnk6IEpheWFtb2hhbiBLYWxsaWNrYWwgKGpheWFtb2hhbi5rYWxsaWNrYWxAZW11bGV4LmNvbSkKICAqCiAgKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQorICogbGludXgtZHJpdmVyc0BlbXVsZXguY29tCiAgKgotICogU2VydmVyRW5naW5lcwotICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKLSAqIFN1bm55dmFsZSwgQ0EgOTQwODUKLSAqCisgKiBFbXVsZXgKKyAqIDMzMzMgU3VzYW4gU3RyZWV0CisgKiBDb3N0YSBNZXNhLCBDQSA5MjYyNgogICovCiAKICNpZm5kZWYgX0JFSVNDU0lfTUFJTl8KQEAgLTM1LDcgKzM0LDcgQEAKIAogI2luY2x1ZGUgImJlLmgiCiAjZGVmaW5lIERSVl9OQU1FCQkiYmUyaXNjc2kiCi0jZGVmaW5lIEJVSUxEX1NUUgkJIjIuMC41NDkuMCIKKyNkZWZpbmUgQlVJTERfU1RSCQkiMi4xMDMuMjk4LjAiCiAjZGVmaW5lIEJFX05BTUUJCQkiU2VydmVyRW5naW5lcyBCbGFkZUVuZ2luZTIiIFwKIAkJCQkiTGludXggaVNDU0kgRHJpdmVyIHZlcnNpb24iIEJVSUxEX1NUUgogI2RlZmluZSBEUlZfREVTQwkJQkVfTkFNRSAiICIgIkRyaXZlciIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmMgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5jCmluZGV4IDg3NzMyNGYuLjQ0NzYyY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmMKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMCBTZXJ2ZXJFbmdpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDExIEVtdWxleAogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC03LDE1ICs3LDE0IEBACiAgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCiAgKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KICAqCi0gKiBXcml0dGVuIGJ5OiBKYXlhbW9oYW4gS2FsbGlja2FsIChqYXlhbW9oYW5rQHNlcnZlcmVuZ2luZXMuY29tKQorICogV3JpdHRlbiBieTogSmF5YW1vaGFuIEthbGxpY2thbCAoamF5YW1vaGFuLmthbGxpY2thbEBlbXVsZXguY29tKQogICoKICAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCisgKiBsaW51eC1kcml2ZXJzQGVtdWxleC5jb20KICAqCi0gKiBTZXJ2ZXJFbmdpbmVzCi0gKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQotICogU3Vubnl2YWxlLCBDQSA5NDA4NQotICoKKyAqIEVtdWxleAorICogMzMzMyBTdXNhbiBTdHJlZXQKKyAqIENvc3RhIE1lc2EsIENBIDkyNjI2CiAgKi8KIAogI2luY2x1ZGUgImJlX21nbXQuaCIKQEAgLTIwMyw4ICsyMDIsOCBAQAogCQkJICAgT1BDT0RFX0NPTU1PTl9JU0NTSV9DTEVBTlVQLCBzaXplb2YoKnJlcSkpOwogCiAJcmVxLT5jaHV0ZSA9IGNodXRlOwotCXJlcS0+aGRyX3JpbmdfaWQgPSAwOwotCXJlcS0+ZGF0YV9yaW5nX2lkID0gMDsKKwlyZXEtPmhkcl9yaW5nX2lkID0gY3B1X3RvX2xlMTYoSFdJX0dFVF9ERUZfSERSUV9JRChwaGJhKSk7CisJcmVxLT5kYXRhX3JpbmdfaWQgPSBjcHVfdG9fbGUxNihIV0lfR0VUX0RFRl9CVUZRX0lEKHBoYmEpKTsKIAogCXN0YXR1cyA9ICBiZV9tY2Nfbm90aWZ5X3dhaXQocGhiYSk7CiAJaWYgKHN0YXR1cykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmggYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5oCmluZGV4IGI5YWNlZGYuLjA4NDI4ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmgKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuaApAQCAtMSw1ICsxLDUgQEAKIC8qKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMCBTZXJ2ZXJFbmdpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDExIEVtdWxleAogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC03LDE1ICs3LDE0IEBACiAgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCiAgKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KICAqCi0gKiBXcml0dGVuIGJ5OiBKYXlhbW9oYW4gS2FsbGlja2FsIChqYXlhbW9oYW5rQHNlcnZlcmVuZ2luZXMuY29tKQorICogV3JpdHRlbiBieTogSmF5YW1vaGFuIEthbGxpY2thbCAoamF5YW1vaGFuLmthbGxpY2thbEBlbXVsZXguY29tKQogICoKICAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCisgKiBsaW51eC1kcml2ZXJzQGVtdWxleC5jb20KICAqCi0gKiBTZXJ2ZXJFbmdpbmVzCi0gKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQotICogU3Vubnl2YWxlLCBDQSA5NDA4NQotICoKKyAqIEVtdWxleAorICogMzMzMyBTdXNhbiBTdHJlZXQKKyAqIENvc3RhIE1lc2EsIENBIDkyNjI2CiAgKi8KIAogI2lmbmRlZiBfQkVJU0NTSV9NR01UXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWQuYwppbmRleCAwZmQ1MTBhLi41OWI1ZTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWQuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWQuYwpAQCAtNTcsOSArNTcsMTkgQEAKIGludAkJYmZhX2RlYnVnZnNfZW5hYmxlID0gMTsKIGludAkJbXNpeF9kaXNhYmxlX2NiID0gMCwgbXNpeF9kaXNhYmxlX2N0ID0gMDsKIAorLyogRmlybXdhcmUgcmVsZWF0ZWQgKi8KIHUzMgliZmlfaW1hZ2VfY3RfZmNfc2l6ZSwgYmZpX2ltYWdlX2N0X2NuYV9zaXplLCBiZmlfaW1hZ2VfY2JfZmNfc2l6ZTsKIHUzMiAgICAgKmJmaV9pbWFnZV9jdF9mYywgKmJmaV9pbWFnZV9jdF9jbmEsICpiZmlfaW1hZ2VfY2JfZmM7CiAKKyNkZWZpbmUgQkZBRF9GV19GSUxFX0NUX0ZDICAgICAgImN0ZndfZmMuYmluIgorI2RlZmluZSBCRkFEX0ZXX0ZJTEVfQ1RfQ05BICAgICAiY3Rmd19jbmEuYmluIgorI2RlZmluZSBCRkFEX0ZXX0ZJTEVfQ0JfRkMgICAgICAiY2Jmd19mYy5iaW4iCisKK3N0YXRpYyB1MzIgKmJmYWRfbG9hZF9md2ltZyhzdHJ1Y3QgcGNpX2RldiAqcGRldik7CitzdGF0aWMgdm9pZCBiZmFkX2ZyZWVfZndpbWcodm9pZCk7CitzdGF0aWMgdm9pZCBiZmFkX3JlYWRfZmlybXdhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUzMiAqKmJmaV9pbWFnZSwKKwkJdTMyICpiZmlfaW1hZ2Vfc2l6ZSwgY2hhciAqZndfbmFtZSk7CisKIHN0YXRpYyBjb25zdCBjaGFyICptc2l4X25hbWVfY3RbXSA9IHsKIAkiY3BlMCIsICJjcGUxIiwgImNwZTIiLCAiY3BlMyIsCiAJInJtZTAiLCAicm1lMSIsICJybWUyIiwgInJtZTMiLApAQCAtMjIyLDYgKzIzMiw5IEBACiAJCWlmICgoYmZhZC0+YmZhZF9mbGFncyAmIEJGQURfSEFMX0lOSVRfRE9ORSkpIHsKIAkJCWJmYV9zbV9zZW5kX2V2ZW50KGJmYWQsIEJGQURfRV9JTklUX1NVQ0NFU1MpOwogCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSJiZmEgJXM6IGJmYSBpbml0IGZhaWxlZFxuIiwKKwkJCQliZmFkLT5wY2lfbmFtZSk7CiAJCQliZmFkLT5iZmFkX2ZsYWdzIHw9IEJGQURfSEFMX0lOSVRfRkFJTDsKIAkJCWJmYV9zbV9zZW5kX2V2ZW50KGJmYWQsIEJGQURfRV9JTklUX0ZBSUxFRCk7CiAJCX0KQEAgLTk5MSwxMCArMTAwNCw2IEBACiAJCWJmYWQtPnBwb3J0LnJvbGVzIHw9IEJGQV9MUE9SVF9ST0xFX0ZDUF9JTTsKIAl9CiAKLQkvKiBTZXR1cCB0aGUgZGVidWdmcyBub2RlIGZvciB0aGlzIHNjc2lfaG9zdCAqLwotCWlmIChiZmFfZGVidWdmc19lbmFibGUpCi0JCWJmYWRfZGVidWdmc19pbml0KCZiZmFkLT5wcG9ydCk7Ci0KIAliZmFkLT5iZmFkX2ZsYWdzIHw9IEJGQURfQ0ZHX1BQT1JUX0RPTkU7CiAKIG91dDoKQEAgLTEwMDQsMTAgKzEwMTMsNiBAQAogdm9pZAogYmZhZF91bmNmZ19wcG9ydChzdHJ1Y3QgYmZhZF9zICpiZmFkKQogewotCS8qIFJlbW92ZSB0aGUgZGVidWdmcyBub2RlIGZvciB0aGlzIHNjc2lfaG9zdCAqLwotCWtmcmVlKGJmYWQtPnJlZ2RhdGEpOwotCWJmYWRfZGVidWdmc19leGl0KCZiZmFkLT5wcG9ydCk7Ci0KIAlpZiAoKHN1cHBvcnRlZF9mYzRzICYgQkZBX0xQT1JUX1JPTEVfRkNQX0lNKSAmJgogCSAgICAoYmZhZC0+cHBvcnQucm9sZXMgJiBCRkFfTFBPUlRfUk9MRV9GQ1BfSU0pKSB7CiAJCWJmYWRfaW1fc2NzaV9ob3N0X2ZyZWUoYmZhZCwgYmZhZC0+cHBvcnQuaW1fcG9ydCk7CkBAIC0xMzg5LDYgKzEzOTQsMTAgQEAKIAliZmFkLT5wcG9ydC5iZmFkID0gYmZhZDsKIAlJTklUX0xJU1RfSEVBRCgmYmZhZC0+cGJjX3Zwb3J0X2xpc3QpOwogCisJLyogU2V0dXAgdGhlIGRlYnVnZnMgbm9kZSBmb3IgdGhpcyBiZmFkICovCisJaWYgKGJmYV9kZWJ1Z2ZzX2VuYWJsZSkKKwkJYmZhZF9kZWJ1Z2ZzX2luaXQoJmJmYWQtPnBwb3J0KTsKKwogCXJldHZhbCA9IGJmYWRfZHJ2X2luaXQoYmZhZCk7CiAJaWYgKHJldHZhbCAhPSBCRkFfU1RBVFVTX09LKQogCQlnb3RvIG91dF9kcnZfaW5pdF9mYWlsdXJlOwpAQCAtMTQwNCw2ICsxNDEzLDkgQEAKIAliZmFfZGV0YWNoKCZiZmFkLT5iZmEpOwogCWJmYWRfaGFsX21lbV9yZWxlYXNlKGJmYWQpOwogb3V0X2Rydl9pbml0X2ZhaWx1cmU6CisJLyogUmVtb3ZlIHRoZSBkZWJ1Z2ZzIG5vZGUgZm9yIHRoaXMgYmZhZCAqLworCWtmcmVlKGJmYWQtPnJlZ2RhdGEpOworCWJmYWRfZGVidWdmc19leGl0KCZiZmFkLT5wcG9ydCk7CiAJbXV0ZXhfbG9jaygmYmZhZF9tdXRleCk7CiAJYmZhZF9pbnN0LS07CiAJbGlzdF9kZWwoJmJmYWQtPmxpc3RfZW50cnkpOwpAQCAtMTQ0NSw2ICsxNDU3LDEwIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CiAJYmZhZF9oYWxfbWVtX3JlbGVhc2UoYmZhZCk7CiAKKwkvKiBSZW1vdmUgdGhlIGRlYnVnZnMgbm9kZSBmb3IgdGhpcyBiZmFkICovCisJa2ZyZWUoYmZhZC0+cmVnZGF0YSk7CisJYmZhZF9kZWJ1Z2ZzX2V4aXQoJmJmYWQtPnBwb3J0KTsKKwogCS8qIENsZWFuaW5nIHRoZSBCRkFEIGluc3RhbmNlICovCiAJbXV0ZXhfbG9jaygmYmZhZF9tdXRleCk7CiAJYmZhZF9pbnN0LS07CkBAIC0xNTUwLDcgKzE1NjYsNyBAQAogfQogCiAvKiBGaXJtd2FyZSBoYW5kbGluZyAqLwotdTMyICoKK3N0YXRpYyB2b2lkCiBiZmFkX3JlYWRfZmlybXdhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUzMiAqKmJmaV9pbWFnZSwKIAkJdTMyICpiZmlfaW1hZ2Vfc2l6ZSwgY2hhciAqZndfbmFtZSkKIHsKQEAgLTE1NTgsMjcgKzE1NzQsMjUgQEAKIAogCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmdywgZndfbmFtZSwgJnBkZXYtPmRldikpIHsKIAkJcHJpbnRrKEtFUk5fQUxFUlQgIkNhbid0IGxvY2F0ZSBmaXJtd2FyZSAlc1xuIiwgZndfbmFtZSk7Ci0JCWdvdG8gZXJyb3I7CisJCSpiZmlfaW1hZ2UgPSBOVUxMOworCQlnb3RvIG91dDsKIAl9CiAKIAkqYmZpX2ltYWdlID0gdm1hbGxvYyhmdy0+c2l6ZSk7CiAJaWYgKE5VTEwgPT0gKmJmaV9pbWFnZSkgewogCQlwcmludGsoS0VSTl9BTEVSVCAiRmFpbCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIGZ3IGltYWdlICIKIAkJCSJzaXplPSV4IVxuIiwgKHUzMikgZnctPnNpemUpOwotCQlnb3RvIGVycm9yOworCQlnb3RvIG91dDsKIAl9CiAKIAltZW1jcHkoKmJmaV9pbWFnZSwgZnctPmRhdGEsIGZ3LT5zaXplKTsKIAkqYmZpX2ltYWdlX3NpemUgPSBmdy0+c2l6ZS9zaXplb2YodTMyKTsKLQotCXJldHVybiAqYmZpX2ltYWdlOwotCi1lcnJvcjoKLQlyZXR1cm4gTlVMTDsKK291dDoKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKIH0KIAotdTMyICoKLWJmYWRfZ2V0X2Zpcm13YXJlX2J1ZihzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3N0YXRpYyB1MzIgKgorYmZhZF9sb2FkX2Z3aW1nKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCWlmIChwZGV2LT5kZXZpY2UgPT0gQkZBX1BDSV9ERVZJQ0VfSURfQ1RfRkMpIHsKIAkJaWYgKGJmaV9pbWFnZV9jdF9mY19zaXplID09IDApCkBAIC0xNTk4LDYgKzE2MTIsMTcgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkCitiZmFkX2ZyZWVfZndpbWcodm9pZCkKK3sKKwlpZiAoYmZpX2ltYWdlX2N0X2ZjX3NpemUgJiYgYmZpX2ltYWdlX2N0X2ZjKQorCQl2ZnJlZShiZmlfaW1hZ2VfY3RfZmMpOworCWlmIChiZmlfaW1hZ2VfY3RfY25hX3NpemUgJiYgYmZpX2ltYWdlX2N0X2NuYSkKKwkJdmZyZWUoYmZpX2ltYWdlX2N0X2NuYSk7CisJaWYgKGJmaV9pbWFnZV9jYl9mY19zaXplICYmIGJmaV9pbWFnZV9jYl9mYykKKwkJdmZyZWUoYmZpX2ltYWdlX2NiX2ZjKTsKK30KKwogbW9kdWxlX2luaXQoYmZhZF9pbml0KTsKIG1vZHVsZV9leGl0KGJmYWRfZXhpdCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfZGVidWdmcy5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2RlYnVnZnMuYwppbmRleCBjNjZlMzJlLi40OGJlMGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9kZWJ1Z2ZzLmMKQEAgLTI4LDEwICsyOCwxMCBAQAogICogbW91bnQgLXQgZGVidWdmcyBub25lIC9zeXMva2VybmVsL2RlYnVnCiAgKgogICogQkZBIEhpZXJhcmNoeToKLSAqCS0gYmZhL2hvc3QjCi0gKiB3aGVyZSB0aGUgaG9zdCBudW1iZXIgY29ycmVzcG9uZHMgdG8gdGhlIG9uZSB1bmRlciAvc3lzL2NsYXNzL3Njc2lfaG9zdC9ob3N0IworICoJLSBiZmEvcGNpX2Rldjo8cGNpX25hbWU+CisgKiB3aGVyZSB0aGUgcGNpX25hbWUgY29ycmVzcG9uZHMgdG8gdGhlIG9uZSB1bmRlciAvc3lzL2J1cy9wY2kvZHJpdmVycy9iZmEKICAqCi0gKiBEZWJ1Z2dpbmcgc2VydmljZSBhdmFpbGFibGUgcGVyIGhvc3Q6CisgKiBEZWJ1Z2dpbmcgc2VydmljZSBhdmFpbGFibGUgcGVyIHBjaV9kZXY6CiAgKiBmd3RyYzogIFRvIGNvbGxlY3QgY3VycmVudCBmaXJtd2FyZSB0cmFjZS4KICAqIGRydnRyYzogVG8gY29sbGVjdCBjdXJyZW50IGRyaXZlciB0cmFjZQogICogZndzYXZlOiBUbyBjb2xsZWN0IGxhc3Qgc2F2ZWQgZncgdHJhY2UgYXMgYSByZXN1bHQgb2YgZmlybXdhcmUgY3Jhc2guCkBAIC00ODksMTEgKzQ4OSw5IEBACiBpbmxpbmUgdm9pZAogYmZhZF9kZWJ1Z2ZzX2luaXQoc3RydWN0IGJmYWRfcG9ydF9zICpwb3J0KQogewotCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9IHBvcnQtPmltX3BvcnQ7Ci0Jc3RydWN0IGJmYWRfcyAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBpbV9wb3J0LT5zaG9zdDsKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkID0gcG9ydC0+YmZhZDsKIAljb25zdCBzdHJ1Y3QgYmZhZF9kZWJ1Z2ZzX2VudHJ5ICpmaWxlOwotCWNoYXIgbmFtZVsxNl07CisJY2hhciBuYW1lWzY0XTsKIAlpbnQgaTsKIAogCWlmICghYmZhX2RlYnVnZnNfZW5hYmxlKQpAQCAtNTEwLDE3ICs1MDgsMTUgQEAKIAkJfQogCX0KIAotCS8qCi0JICogU2V0dXAgdGhlIGhvc3QjIGRpcmVjdG9yeSBmb3IgdGhlIHBvcnQsCi0JICogY29ycmVzcG9uZHMgdG8gdGhlIHNjc2lfaG9zdCBudW0gb2YgdGhpcyBwb3J0LgotCSAqLwotCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgImhvc3QlZCIsIHNob3N0LT5ob3N0X25vKTsKKwkvKiBTZXR1cCB0aGUgcGNpX2RldiBkZWJ1Z2ZzIGRpcmVjdG9yeSBmb3IgdGhlIHBvcnQgKi8KKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJwY2lfZGV2OiVzIiwgYmZhZC0+cGNpX25hbWUpOwogCWlmICghcG9ydC0+cG9ydF9kZWJ1Z2ZzX3Jvb3QpIHsKIAkJcG9ydC0+cG9ydF9kZWJ1Z2ZzX3Jvb3QgPQogCQkJZGVidWdmc19jcmVhdGVfZGlyKG5hbWUsIGJmYV9kZWJ1Z2ZzX3Jvb3QpOwogCQlpZiAoIXBvcnQtPnBvcnRfZGVidWdmc19yb290KSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJIkJGQSBob3N0IHJvb3QgZGlyIGNyZWF0aW9uIGZhaWxlZFxuIik7CisJCQkJImJmYSAlczogZGVidWdmcyByb290IGNyZWF0aW9uIGZhaWxlZFxuIiwKKwkJCQliZmFkLT5wY2lfbmFtZSk7CiAJCQlnb3RvIGVycjsKIAkJfQogCkBAIC01MzYsOCArNTMyLDggQEAKIAkJCQkJCQlmaWxlLT5mb3BzKTsKIAkJCWlmICghYmZhZC0+YmZhZF9kZW50cnlfZmlsZXNbaV0pIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJCSJCRkEgaG9zdCVkOiBjcmVhdGUgJXMgZW50cnkgZmFpbGVkXG4iLAotCQkJCQlzaG9zdC0+aG9zdF9ubywgZmlsZS0+bmFtZSk7CisJCQkJCSJiZmEgJXM6IGRlYnVnZnMgJXMgY3JlYXRpb24gZmFpbGVkXG4iLAorCQkJCQliZmFkLT5wY2lfbmFtZSwgZmlsZS0+bmFtZSk7CiAJCQkJZ290byBlcnI7CiAJCQl9CiAJCX0KQEAgLTU1MCw4ICs1NDYsNyBAQAogaW5saW5lIHZvaWQKIGJmYWRfZGVidWdmc19leGl0KHN0cnVjdCBiZmFkX3BvcnRfcyAqcG9ydCkKIHsKLQlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPSBwb3J0LT5pbV9wb3J0OwotCXN0cnVjdCBiZmFkX3MgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXN0cnVjdCBiZmFkX3MgKmJmYWQgPSBwb3J0LT5iZmFkOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYmZhZF9kZWJ1Z2ZzX2ZpbGVzKTsgaSsrKSB7CkBAIC01NjIsOSArNTU3LDcgQEAKIAl9CiAKIAkvKgotCSAqIFJlbW92ZSB0aGUgaG9zdCMgZGlyZWN0b3J5IGZvciB0aGUgcG9ydCwKLQkgKiBjb3JyZXNwb25kcyB0byB0aGUgc2NzaV9ob3N0IG51bSBvZiB0aGlzIHBvcnQuCi0JKi8KKwkgKiBSZW1vdmUgdGhlIHBjaV9kZXYgZGVidWdmcyBkaXJlY3RvcnkgZm9yIHRoZSBwb3J0ICovCiAJaWYgKHBvcnQtPnBvcnRfZGVidWdmc19yb290KSB7CiAJCWRlYnVnZnNfcmVtb3ZlKHBvcnQtPnBvcnRfZGVidWdmc19yb290KTsKIAkJcG9ydC0+cG9ydF9kZWJ1Z2ZzX3Jvb3QgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltLmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uaAppbmRleCBiZmVlNjNiLi5jMjk2Yzg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uaAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uaApAQCAtMTQxLDI5ICsxNDEsNCBAQAogCiBpcnFyZXR1cm5fdCBiZmFkX2ludHgoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIAotLyogRmlybXdhcmUgcmVsZWF0ZWQgKi8KLSNkZWZpbmUgQkZBRF9GV19GSUxFX0NUX0ZDICAgICAgImN0ZndfZmMuYmluIgotI2RlZmluZSBCRkFEX0ZXX0ZJTEVfQ1RfQ05BICAgICAiY3Rmd19jbmEuYmluIgotI2RlZmluZSBCRkFEX0ZXX0ZJTEVfQ0JfRkMgICAgICAiY2Jmd19mYy5iaW4iCi0KLXUzMiAqYmZhZF9nZXRfZmlybXdhcmVfYnVmKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKLXUzMiAqYmZhZF9yZWFkX2Zpcm13YXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MzIgKipiZmlfaW1hZ2UsCi0JCXUzMiAqYmZpX2ltYWdlX3NpemUsIGNoYXIgKmZ3X25hbWUpOwotCi1zdGF0aWMgaW5saW5lIHUzMiAqCi1iZmFkX2xvYWRfZndpbWcoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0JcmV0dXJuIGJmYWRfZ2V0X2Zpcm13YXJlX2J1ZihwZGV2KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1iZmFkX2ZyZWVfZndpbWcodm9pZCkKLXsKLQlpZiAoYmZpX2ltYWdlX2N0X2ZjX3NpemUgJiYgYmZpX2ltYWdlX2N0X2ZjKQotCQl2ZnJlZShiZmlfaW1hZ2VfY3RfZmMpOwotCWlmIChiZmlfaW1hZ2VfY3RfY25hX3NpemUgJiYgYmZpX2ltYWdlX2N0X2NuYSkKLQkJdmZyZWUoYmZpX2ltYWdlX2N0X2NuYSk7Ci0JaWYgKGJmaV9pbWFnZV9jYl9mY19zaXplICYmIGJmaV9pbWFnZV9jYl9mYykKLQkJdmZyZWUoYmZpX2ltYWdlX2NiX2ZjKTsKLX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmMuaCBiL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjLmgKaW5kZXggYjZkMzUwYS4uMGE0MDRiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmMuaAorKysgYi9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmYy5oCkBAIC0xMzAsNyArMTMwLDcgQEAKICNkZWZpbmUgQk5YMkZDX1RNX1RJTUVPVVQJCTYwCS8qIHNlY3MgKi8KICNkZWZpbmUgQk5YMkZDX0lPX1RJTUVPVVQJCTIwMDAwVUwJLyogbXNlY3MgKi8KIAotI2RlZmluZSBCTlgyRkNfV0FJVF9DTlQJCQkxMjAKKyNkZWZpbmUgQk5YMkZDX1dBSVRfQ05UCQkJMTIwMAogI2RlZmluZSBCTlgyRkNfRldfVElNRU9VVAkJKDMgKiBIWikKICNkZWZpbmUgUE9SVF9NQVgJCQkyCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Zjb2UuYyBiL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2Zjb2UuYwppbmRleCBlMmU2NDc1Li5hYjI1NWZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19mY29lLmMKKysrIGIvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfZmNvZS5jCkBAIC02NjQsNyArNjY0LDcgQEAKIAlzdHJ1Y3QgZmNvZV9wb3J0ICpwb3J0ID0gbHBvcnRfcHJpdihscG9ydCk7CiAJc3RydWN0IGJueDJmY19oYmEgKmhiYSA9IHBvcnQtPnByaXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGhiYS0+bmV0ZGV2OwotCXN0cnVjdCBldGh0b29sX2NtZCBlY21kID0geyBFVEhUT09MX0dTRVQgfTsKKwlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZDsKIAogCWlmICghZGV2X2V0aHRvb2xfZ2V0X3NldHRpbmdzKG5ldGRldiwgJmVjbWQpKSB7CiAJCWxwb3J0LT5saW5rX3N1cHBvcnRlZF9zcGVlZHMgJj0KQEAgLTY3NSwxMiArNjc1LDE1IEBACiAJCWlmIChlY21kLnN1cHBvcnRlZCAmIFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwpCiAJCQlscG9ydC0+bGlua19zdXBwb3J0ZWRfc3BlZWRzIHw9IEZDX1BPUlRTUEVFRF8xMEdCSVQ7CiAKLQkJaWYgKGVjbWQuc3BlZWQgPT0gU1BFRURfMTAwMCkKKwkJc3dpdGNoIChldGh0b29sX2NtZF9zcGVlZCgmZWNtZCkpIHsKKwkJY2FzZSBTUEVFRF8xMDAwOgogCQkJbHBvcnQtPmxpbmtfc3BlZWQgPSBGQ19QT1JUU1BFRURfMUdCSVQ7Ci0JCWlmIChlY21kLnNwZWVkID09IFNQRUVEXzEwMDAwKQorCQkJYnJlYWs7CisJCWNhc2UgU1BFRURfMTAwMDA6CiAJCQlscG9ydC0+bGlua19zcGVlZCA9IEZDX1BPUlRTUEVFRF8xMEdCSVQ7CisJCQlicmVhazsKKwkJfQogCX0KLQlyZXR1cm47CiB9CiBzdGF0aWMgaW50IGJueDJmY19saW5rX29rKHN0cnVjdCBmY19scG9ydCAqbHBvcnQpCiB7CkBAIC0xMTMwLDcgKzExMzMsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpwaHlzX2RldjsKIAogCWhiYSA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgYm54MmZjX2hiYSwga3JlZik7Ci0JQk5YMkZDX0hCQV9EQkcoaGJhLT5jdGxyLmxwLCAiSW50ZXJmYWNlIGlzIGJlaW5nIHJlbGVhc2VkXG4iKTsKKwlCTlgyRkNfTUlTQ19EQkcoIkludGVyZmFjZSBpcyBiZWluZyByZWxlYXNlZFxuIik7CiAKIAluZXRkZXYgPSBoYmEtPm5ldGRldjsKIAlwaHlzX2RldiA9IGhiYS0+cGh5c19kZXY7CkBAIC0xMjU0LDIwICsxMjU3LDE3IEBACiBzdGF0aWMgc3RydWN0IGZjX2xwb3J0ICpibngyZmNfaWZfY3JlYXRlKHN0cnVjdCBibngyZmNfaGJhICpoYmEsCiAJCQkJICBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIGludCBucGl2KQogewotCXN0cnVjdCBmY19scG9ydAkJKmxwb3J0ID0gTlVMTDsKKwlzdHJ1Y3QgZmNfbHBvcnQJCSpscG9ydCwgKm5fcG9ydDsKIAlzdHJ1Y3QgZmNvZV9wb3J0CSpwb3J0OwogCXN0cnVjdCBTY3NpX0hvc3QJKnNob3N0OwogCXN0cnVjdCBmY192cG9ydAkJKnZwb3J0ID0gZGV2X3RvX3Zwb3J0KHBhcmVudCk7CiAJaW50CQkJcmMgPSAwOwogCiAJLyogQWxsb2NhdGUgU2NzaV9Ib3N0IHN0cnVjdHVyZSAqLwotCWlmICghbnBpdikgewotCQlscG9ydCA9IGxpYmZjX2hvc3RfYWxsb2MoJmJueDJmY19zaG9zdF90ZW1wbGF0ZSwKLQkJCQkJICBzaXplb2Yoc3RydWN0IGZjb2VfcG9ydCkpOwotCX0gZWxzZSB7Ci0JCWxwb3J0ID0gbGliZmNfdnBvcnRfY3JlYXRlKHZwb3J0LAotCQkJCQkgICBzaXplb2Yoc3RydWN0IGZjb2VfcG9ydCkpOwotCX0KKwlpZiAoIW5waXYpCisJCWxwb3J0ID0gbGliZmNfaG9zdF9hbGxvYygmYm54MmZjX3Nob3N0X3RlbXBsYXRlLCBzaXplb2YoKnBvcnQpKTsKKwllbHNlCisJCWxwb3J0ID0gbGliZmNfdnBvcnRfY3JlYXRlKHZwb3J0LCBzaXplb2YoKnBvcnQpKTsKIAogCWlmICghbHBvcnQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY291bGQgbm90IGFsbG9jYXRlIHNjc2kgaG9zdCBzdHJ1Y3R1cmVcbiIpOwpAQCAtMTI4NSw3ICsxMjg1LDYgQEAKIAkJZ290byBscF9jb25maWdfZXJyOwogCiAJaWYgKG5waXYpIHsKLQkJdnBvcnQgPSBkZXZfdG9fdnBvcnQocGFyZW50KTsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiU2V0dGluZyB2cG9ydCBuYW1lcywgMHglbGxYIDB4JWxsWFxuIiwKIAkJCXZwb3J0LT5ub2RlX25hbWUsIHZwb3J0LT5wb3J0X25hbWUpOwogCQlmY19zZXRfd3dubihscG9ydCwgdnBvcnQtPm5vZGVfbmFtZSk7CkBAIC0xMzE0LDEyICsxMzEzLDE3IEBACiAJZmNfaG9zdF9wb3J0X3R5cGUobHBvcnQtPmhvc3QpID0gRkNfUE9SVFRZUEVfVU5LTk9XTjsKIAogCS8qIEFsbG9jYXRlIGV4Y2hhbmdlIG1hbmFnZXIgKi8KLQlpZiAoIW5waXYpIHsKKwlpZiAoIW5waXYpCiAJCXJjID0gYm54MmZjX2VtX2NvbmZpZyhscG9ydCk7Ci0JCWlmIChyYykgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRXJyb3Igb24gYm54MmZjX2VtX2NvbmZpZ1xuIik7Ci0JCQlnb3RvIHNob3N0X2VycjsKLQkJfQorCWVsc2UgeworCQlzaG9zdCA9IHZwb3J0X3RvX3Nob3N0KHZwb3J0KTsKKwkJbl9wb3J0ID0gc2hvc3RfcHJpdihzaG9zdCk7CisJCXJjID0gZmNfZXhjaF9tZ3JfbGlzdF9jbG9uZShuX3BvcnQsIGxwb3J0KTsKKwl9CisKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRXJyb3Igb24gYm54MmZjX2VtX2NvbmZpZ1xuIik7CisJCWdvdG8gc2hvc3RfZXJyOwogCX0KIAogCWJueDJmY19pbnRlcmZhY2VfZ2V0KGhiYSk7CkBAIC0xMzUyLDggKzEzNTYsNiBAQAogCS8qIEZyZWUgZXhpc3RpbmcgdHJhbnNtaXQgc2ticyAqLwogCWZjb2VfY2xlYW5fcGVuZGluZ19xdWV1ZShscG9ydCk7CiAKLQlibngyZmNfaW50ZXJmYWNlX3B1dChoYmEpOwotCiAJLyogRnJlZSBxdWV1ZWQgcGFja2V0cyBmb3IgdGhlIHJlY2VpdmUgdGhyZWFkICovCiAJYm54MmZjX2NsZWFuX3J4X3F1ZXVlKGxwb3J0KTsKIApAQCAtMTM3Miw2ICsxMzc0LDggQEAKIAogCS8qIFJlbGVhc2UgU2NzaV9Ib3N0ICovCiAJc2NzaV9ob3N0X3B1dChscG9ydC0+aG9zdCk7CisKKwlibngyZmNfaW50ZXJmYWNlX3B1dChoYmEpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2h3aS5jIGIvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfaHdpLmMKaW5kZXggMWI2ODBlMi4uZjc1NmQ1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfaHdpLmMKKysrIGIvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfaHdpLmMKQEAgLTUyMiw2ICs1MjIsNyBAQAogCWZwID0gZmNfZnJhbWVfYWxsb2MobHBvcnQsIHBheWxvYWRfbGVuKTsKIAlpZiAoIWZwKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImZjX2ZyYW1lX2FsbG9jIGZhaWx1cmVcbiIpOworCQlrZnJlZSh1bnNvbF9lbHMpOwogCQlyZXR1cm47CiAJfQogCkBAIC01NDcsNiArNTQ4LDcgQEAKIAkJCQkgKi8KIAkJCQlwcmludGsoS0VSTl9FUlIgUEZYICJkcm9wcGluZyBFTFMgMHgleFxuIiwgb3ApOwogCQkJCWtmcmVlX3NrYihza2IpOworCQkJCWtmcmVlKHVuc29sX2Vscyk7CiAJCQkJcmV0dXJuOwogCQkJfQogCQl9CkBAIC01NjMsNiArNTY1LDcgQEAKIAl9IGVsc2UgewogCQlCTlgyRkNfSEJBX0RCRyhscG9ydCwgImZoX3JfY3RsID0gMHgleFxuIiwgZmgtPmZoX3JfY3RsKTsKIAkJa2ZyZWVfc2tiKHNrYik7CisJCWtmcmVlKHVuc29sX2Vscyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19pby5jIGIvZHJpdmVycy9zY3NpL2JueDJmYy9ibngyZmNfaW8uYwppbmRleCAxZGVjZWZiLi5iNWI1YzM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmZjL2JueDJmY19pby5jCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyZmMvYm54MmZjX2lvLmMKQEAgLTE2NjMsNiArMTY2MywxMiBAQAogCXRndCA9IChzdHJ1Y3QgYm54MmZjX3Jwb3J0ICopJnJwWzFdOwogCiAJaWYgKCF0ZXN0X2JpdChCTlgyRkNfRkxBR19TRVNTSU9OX1JFQURZLCAmdGd0LT5mbGFncykpIHsKKwkJaWYgKHRlc3RfYml0KEJOWDJGQ19GTEFHX1VQTERfUkVRX0NPTVBMLCAmdGd0LT5mbGFncykpICB7CisJCQlzY19jbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OworCQkJc2NfY21kLT5zY3NpX2RvbmUoc2NfY21kKTsKKwkJCXJldHVybiAwOworCisJCX0KIAkJLyoKIAkJICogU2Vzc2lvbiBpcyBub3Qgb2ZmbG9hZGVkIHlldC4gTGV0IFNDU0ktbWwgcmV0cnkKIAkJICogdGhlIGNvbW1hbmQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMgYi9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMKaW5kZXggZDBjODIzNC4uNjBkMmVmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jCisrKyBiL2RyaXZlcnMvc2NzaS9jb25zdGFudHMuYwpAQCAtNzcyLDYgKzc3Miw3IEBACiAJezB4MzgwMiwgIkVzbiAtIHBvd2VyIG1hbmFnZW1lbnQgY2xhc3MgZXZlbnQifSwKIAl7MHgzODA0LCAiRXNuIC0gbWVkaWEgY2xhc3MgZXZlbnQifSwKIAl7MHgzODA2LCAiRXNuIC0gZGV2aWNlIGJ1c3kgY2xhc3MgZXZlbnQifSwKKwl7MHgzODA3LCAiVGhpbiBQcm92aXNpb25pbmcgc29mdCB0aHJlc2hvbGQgcmVhY2hlZCJ9LAogCiAJezB4MzkwMCwgIlNhdmluZyBwYXJhbWV0ZXJzIG5vdCBzdXBwb3J0ZWQifSwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmMgYi9kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYwppbmRleCBkZTc2NGVhLi5hMmE5YzdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYworKysgYi9kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYwpAQCAtNDUwLDEyICs0NTAsMTMgQEAKIAlyZXR1cm4gY3NrOwogfQogCi1zdGF0aWMgc3RydWN0IHJ0YWJsZSAqZmluZF9yb3V0ZV9pcHY0KF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAorc3RhdGljIHN0cnVjdCBydGFibGUgKmZpbmRfcm91dGVfaXB2NChzdHJ1Y3QgZmxvd2k0ICpmbDQsCisJCQkJICAgICAgX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCiAJCQkJICAgICAgX19iZTE2IHNwb3J0LCBfX2JlMTYgZHBvcnQsIHU4IHRvcykKIHsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKIAotCXJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKCZpbml0X25ldCwgTlVMTCwgZGFkZHIsIHNhZGRyLAorCXJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKCZpbml0X25ldCwgZmw0LCBOVUxMLCBkYWRkciwgc2FkZHIsCiAJCQkJICAgZHBvcnQsIHNwb3J0LCBJUFBST1RPX1RDUCwgdG9zLCAwKTsKIAlpZiAoSVNfRVJSKHJ0KSkKIAkJcmV0dXJuIE5VTEw7CkBAIC00NzAsNiArNDcxLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKIAlzdHJ1Y3QgY3hnYmlfZGV2aWNlICpjZGV2OwogCXN0cnVjdCBydGFibGUgKnJ0ID0gTlVMTDsKKwlzdHJ1Y3QgZmxvd2k0IGZsNDsKIAlzdHJ1Y3QgY3hnYmlfc29jayAqY3NrID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgbXR1ID0gMDsKIAlpbnQgcG9ydCA9IDB4RkZGRjsKQEAgLTQ4Miw3ICs0ODQsNyBAQAogCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JcnQgPSBmaW5kX3JvdXRlX2lwdjQoMCwgZGFkZHItPnNpbl9hZGRyLnNfYWRkciwgMCwgZGFkZHItPnNpbl9wb3J0LCAwKTsKKwlydCA9IGZpbmRfcm91dGVfaXB2NCgmZmw0LCAwLCBkYWRkci0+c2luX2FkZHIuc19hZGRyLCAwLCBkYWRkci0+c2luX3BvcnQsIDApOwogCWlmICghcnQpIHsKIAkJcHJfaW5mbygibm8gcm91dGUgdG8gaXB2NCAweCV4LCBwb3J0ICV1LlxuIiwKIAkJCWRhZGRyLT5zaW5fYWRkci5zX2FkZHIsIGRhZGRyLT5zaW5fcG9ydCk7CkBAIC01MzEsNyArNTMzLDcgQEAKIAljc2stPmRhZGRyLnNpbl9hZGRyLnNfYWRkciA9IGRhZGRyLT5zaW5fYWRkci5zX2FkZHI7CiAJY3NrLT5kYWRkci5zaW5fcG9ydCA9IGRhZGRyLT5zaW5fcG9ydDsKIAljc2stPmRhZGRyLnNpbl9mYW1pbHkgPSBkYWRkci0+c2luX2ZhbWlseTsKLQljc2stPnNhZGRyLnNpbl9hZGRyLnNfYWRkciA9IHJ0LT5ydF9zcmM7CisJY3NrLT5zYWRkci5zaW5fYWRkci5zX2FkZHIgPSBmbDQuc2FkZHI7CiAKIAlyZXR1cm4gY3NrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGMzOTV4LmMgYi9kcml2ZXJzL3Njc2kvZGMzOTV4LmMKaW5kZXggYjEwYjM4NC4uZjViNzE4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RjMzk1eC5jCisrKyBiL2RyaXZlcnMvc2NzaS9kYzM5NXguYwpAQCAtNzc4LDggKzc3OCw4IEBACiBzdGF0aWMgdm9pZCBzcmJfd2FpdGluZ19pbnNlcnQoc3RydWN0IERldmljZUN0bEJsayAqZGNiLAogCQlzdHJ1Y3QgU2NzaVJlcUJsayAqc3JiKQogewotCWRwcmludGtkYmcoREJHXzAsICJzcmJfd2FpdGluZ19pbnNlcnQ6IChwaWQjJWxpKSA8JTAyaS0laT4gc3JiPSVwXG4iLAotCQlzcmItPmNtZC0+c2VyaWFsX251bWJlciwgZGNiLT50YXJnZXRfaWQsIGRjYi0+dGFyZ2V0X2x1biwgc3JiKTsKKwlkcHJpbnRrZGJnKERCR18wLCAic3JiX3dhaXRpbmdfaW5zZXJ0OiAoMHglcCkgPCUwMmktJWk+IHNyYj0lcFxuIiwKKwkJc3JiLT5jbWQsIGRjYi0+dGFyZ2V0X2lkLCBkY2ItPnRhcmdldF9sdW4sIHNyYik7CiAJbGlzdF9hZGQoJnNyYi0+bGlzdCwgJmRjYi0+c3JiX3dhaXRpbmdfbGlzdCk7CiB9CiAKQEAgLTc4NywxNiArNzg3LDE2IEBACiBzdGF0aWMgdm9pZCBzcmJfd2FpdGluZ19hcHBlbmQoc3RydWN0IERldmljZUN0bEJsayAqZGNiLAogCQlzdHJ1Y3QgU2NzaVJlcUJsayAqc3JiKQogewotCWRwcmludGtkYmcoREJHXzAsICJzcmJfd2FpdGluZ19hcHBlbmQ6IChwaWQjJWxpKSA8JTAyaS0laT4gc3JiPSVwXG4iLAotCQkgc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIsIGRjYi0+dGFyZ2V0X2lkLCBkY2ItPnRhcmdldF9sdW4sIHNyYik7CisJZHByaW50a2RiZyhEQkdfMCwgInNyYl93YWl0aW5nX2FwcGVuZDogKDB4JXApIDwlMDJpLSVpPiBzcmI9JXBcbiIsCisJCSBzcmItPmNtZCwgZGNiLT50YXJnZXRfaWQsIGRjYi0+dGFyZ2V0X2x1biwgc3JiKTsKIAlsaXN0X2FkZF90YWlsKCZzcmItPmxpc3QsICZkY2ItPnNyYl93YWl0aW5nX2xpc3QpOwogfQogCiAKIHN0YXRpYyB2b2lkIHNyYl9nb2luZ19hcHBlbmQoc3RydWN0IERldmljZUN0bEJsayAqZGNiLCBzdHJ1Y3QgU2NzaVJlcUJsayAqc3JiKQogewotCWRwcmludGtkYmcoREJHXzAsICJzcmJfZ29pbmdfYXBwZW5kOiAocGlkIyVsaSkgPCUwMmktJWk+IHNyYj0lcFxuIiwKLQkJc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIsIGRjYi0+dGFyZ2V0X2lkLCBkY2ItPnRhcmdldF9sdW4sIHNyYik7CisJZHByaW50a2RiZyhEQkdfMCwgInNyYl9nb2luZ19hcHBlbmQ6ICgweCVwKSA8JTAyaS0laT4gc3JiPSVwXG4iLAorCQlzcmItPmNtZCwgZGNiLT50YXJnZXRfaWQsIGRjYi0+dGFyZ2V0X2x1biwgc3JiKTsKIAlsaXN0X2FkZF90YWlsKCZzcmItPmxpc3QsICZkY2ItPnNyYl9nb2luZ19saXN0KTsKIH0KIApAQCAtODA1LDggKzgwNSw4IEBACiB7CiAJc3RydWN0IFNjc2lSZXFCbGsgKmk7CiAJc3RydWN0IFNjc2lSZXFCbGsgKnRtcDsKLQlkcHJpbnRrZGJnKERCR18wLCAic3JiX2dvaW5nX3JlbW92ZTogKHBpZCMlbGkpIDwlMDJpLSVpPiBzcmI9JXBcbiIsCi0JCXNyYi0+Y21kLT5zZXJpYWxfbnVtYmVyLCBkY2ItPnRhcmdldF9pZCwgZGNiLT50YXJnZXRfbHVuLCBzcmIpOworCWRwcmludGtkYmcoREJHXzAsICJzcmJfZ29pbmdfcmVtb3ZlOiAoMHglcCkgPCUwMmktJWk+IHNyYj0lcFxuIiwKKwkJc3JiLT5jbWQsIGRjYi0+dGFyZ2V0X2lkLCBkY2ItPnRhcmdldF9sdW4sIHNyYik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaSwgdG1wLCAmZGNiLT5zcmJfZ29pbmdfbGlzdCwgbGlzdCkKIAkJaWYgKGkgPT0gc3JiKSB7CkBAIC04MjEsOCArODIxLDggQEAKIHsKIAlzdHJ1Y3QgU2NzaVJlcUJsayAqaTsKIAlzdHJ1Y3QgU2NzaVJlcUJsayAqdG1wOwotCWRwcmludGtkYmcoREJHXzAsICJzcmJfd2FpdGluZ19yZW1vdmU6IChwaWQjJWxpKSA8JTAyaS0laT4gc3JiPSVwXG4iLAotCQlzcmItPmNtZC0+c2VyaWFsX251bWJlciwgZGNiLT50YXJnZXRfaWQsIGRjYi0+dGFyZ2V0X2x1biwgc3JiKTsKKwlkcHJpbnRrZGJnKERCR18wLCAic3JiX3dhaXRpbmdfcmVtb3ZlOiAoMHglcCkgPCUwMmktJWk+IHNyYj0lcFxuIiwKKwkJc3JiLT5jbWQsIGRjYi0+dGFyZ2V0X2lkLCBkY2ItPnRhcmdldF9sdW4sIHNyYik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaSwgdG1wLCAmZGNiLT5zcmJfd2FpdGluZ19saXN0LCBsaXN0KQogCQlpZiAoaSA9PSBzcmIpIHsKQEAgLTgzNiw4ICs4MzYsOCBAQAogCQlzdHJ1Y3QgU2NzaVJlcUJsayAqc3JiKQogewogCWRwcmludGtkYmcoREJHXzAsCi0JCSJzcmJfZ29pbmdfdG9fd2FpdGluZ19tb3ZlOiAocGlkIyVsaSkgPCUwMmktJWk+IHNyYj0lcFxuIiwKLQkJc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIsIGRjYi0+dGFyZ2V0X2lkLCBkY2ItPnRhcmdldF9sdW4sIHNyYik7CisJCSJzcmJfZ29pbmdfdG9fd2FpdGluZ19tb3ZlOiAoMHglcCkgPCUwMmktJWk+IHNyYj0lcFxuIiwKKwkJc3JiLT5jbWQsIGRjYi0+dGFyZ2V0X2lkLCBkY2ItPnRhcmdldF9sdW4sIHNyYik7CiAJbGlzdF9tb3ZlKCZzcmItPmxpc3QsICZkY2ItPnNyYl93YWl0aW5nX2xpc3QpOwogfQogCkBAIC04NDYsOCArODQ2LDggQEAKIAkJc3RydWN0IFNjc2lSZXFCbGsgKnNyYikKIHsKIAlkcHJpbnRrZGJnKERCR18wLAotCQkic3JiX3dhaXRpbmdfdG9fZ29pbmdfbW92ZTogKHBpZCMlbGkpIDwlMDJpLSVpPiBzcmI9JXBcbiIsCi0JCXNyYi0+Y21kLT5zZXJpYWxfbnVtYmVyLCBkY2ItPnRhcmdldF9pZCwgZGNiLT50YXJnZXRfbHVuLCBzcmIpOworCQkic3JiX3dhaXRpbmdfdG9fZ29pbmdfbW92ZTogKDB4JXApIDwlMDJpLSVpPiBzcmI9JXBcbiIsCisJCXNyYi0+Y21kLCBkY2ItPnRhcmdldF9pZCwgZGNiLT50YXJnZXRfbHVuLCBzcmIpOwogCWxpc3RfbW92ZSgmc3JiLT5saXN0LCAmZGNiLT5zcmJfZ29pbmdfbGlzdCk7CiB9CiAKQEAgLTk4Miw4ICs5ODIsOCBAQAogewogCWludCBuc2VnOwogCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciA9IGNtZC0+c2NfZGF0YV9kaXJlY3Rpb247Ci0JZHByaW50a2RiZyhEQkdfMCwgImJ1aWxkX3NyYjogKHBpZCMlbGkpIDwlMDJpLSVpPlxuIiwKLQkJY21kLT5zZXJpYWxfbnVtYmVyLCBkY2ItPnRhcmdldF9pZCwgZGNiLT50YXJnZXRfbHVuKTsKKwlkcHJpbnRrZGJnKERCR18wLCAiYnVpbGRfc3JiOiAoMHglcCkgPCUwMmktJWk+XG4iLAorCQljbWQsIGRjYi0+dGFyZ2V0X2lkLCBkY2ItPnRhcmdldF9sdW4pOwogCiAJc3JiLT5kY2IgPSBkY2I7CiAJc3JiLT5jbWQgPSBjbWQ7CkBAIC0xMDg2LDggKzEwODYsOCBAQAogCXN0cnVjdCBTY3NpUmVxQmxrICpzcmI7CiAJc3RydWN0IEFkYXB0ZXJDdGxCbGsgKmFjYiA9CiAJICAgIChzdHJ1Y3QgQWRhcHRlckN0bEJsayAqKWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKLQlkcHJpbnRrZGJnKERCR18wLCAicXVldWVfY29tbWFuZDogKHBpZCMlbGkpIDwlMDJpLSVpPiBjbW5kPTB4JTAyeFxuIiwKLQkJY21kLT5zZXJpYWxfbnVtYmVyLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4sIGNtZC0+Y21uZFswXSk7CisJZHByaW50a2RiZyhEQkdfMCwgInF1ZXVlX2NvbW1hbmQ6ICgweCVwKSA8JTAyaS0laT4gY21uZD0weCUwMnhcbiIsCisJCWNtZCwgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuLCBjbWQtPmNtbmRbMF0pOwogCiAJLyogQXNzdW1lIEJBRF9UQVJHRVQ7IHdpbGwgYmUgY2xlYXJlZCBsYXRlciAqLwogCWNtZC0+cmVzdWx0ID0gRElEX0JBRF9UQVJHRVQgPDwgMTY7CkBAIC0xMTQwLDcgKzExNDAsNyBAQAogCQkvKiBwcm9jZXNzIGltbWVkaWF0ZWx5ICovCiAJCXNlbmRfc3JiKGFjYiwgc3JiKTsKIAl9Ci0JZHByaW50a2RiZyhEQkdfMSwgInF1ZXVlX2NvbW1hbmQ6IChwaWQjJWxpKSBkb25lXG4iLCBjbWQtPnNlcmlhbF9udW1iZXIpOworCWRwcmludGtkYmcoREJHXzEsICJxdWV1ZV9jb21tYW5kOiAoMHglcCkgZG9uZVxuIiwgY21kKTsKIAlyZXR1cm4gMDsKIAogY29tcGxldGU6CkBAIC0xMjAzLDkgKzEyMDMsOSBAQAogCQkJZHByaW50a2woS0VSTl9JTkZPLCAiZHVtcDogc3JiPSVwIGNtZD0lcCBPT09QUyFcbiIsCiAJCQkJc3JiLCBzcmItPmNtZCk7CiAJCWVsc2UKLQkJCWRwcmludGtsKEtFUk5fSU5GTywgImR1bXA6IHNyYj0lcCBjbWQ9JXAgKHBpZCMlbGkpICIKKwkJCWRwcmludGtsKEtFUk5fSU5GTywgImR1bXA6IHNyYj0lcCBjbWQ9JXAgIgogCQkJCSAiY21uZD0weCUwMnggPCUwMmktJWk+XG4iLAotCQkJCXNyYiwgc3JiLT5jbWQsIHNyYi0+Y21kLT5zZXJpYWxfbnVtYmVyLAorCQkJCXNyYiwgc3JiLT5jbWQsCiAJCQkJc3JiLT5jbWQtPmNtbmRbMF0sIHNyYi0+Y21kLT5kZXZpY2UtPmlkLAogCQkJICAgICAgIAlzcmItPmNtZC0+ZGV2aWNlLT5sdW4pOwogCQlwcmludGsoIiAgc2dsaXN0PSVwIGNudD0laSBpZHg9JWkgbGVuPSV6dVxuIiwKQEAgLTEzMDEsOCArMTMwMSw4IEBACiAJc3RydWN0IEFkYXB0ZXJDdGxCbGsgKmFjYiA9CiAJCShzdHJ1Y3QgQWRhcHRlckN0bEJsayAqKWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKIAlkcHJpbnRrbChLRVJOX0lORk8sCi0JCSJlaF9idXNfcmVzZXQ6IChwaWQjJWxpKSB0YXJnZXQ9PCUwMmktJWk+IGNtZD0lcFxuIiwKLQkJY21kLT5zZXJpYWxfbnVtYmVyLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4sIGNtZCk7CisJCSJlaF9idXNfcmVzZXQ6ICgwJXApIHRhcmdldD08JTAyaS0laT4gY21kPSVwXG4iLAorCQljbWQsIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1biwgY21kKTsKIAogCWlmICh0aW1lcl9wZW5kaW5nKCZhY2ItPndhaXRpbmdfdGltZXIpKQogCQlkZWxfdGltZXIoJmFjYi0+d2FpdGluZ190aW1lcik7CkBAIC0xMzY4LDggKzEzNjgsOCBAQAogCSAgICAoc3RydWN0IEFkYXB0ZXJDdGxCbGsgKiljbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7CiAJc3RydWN0IERldmljZUN0bEJsayAqZGNiOwogCXN0cnVjdCBTY3NpUmVxQmxrICpzcmI7Ci0JZHByaW50a2woS0VSTl9JTkZPLCAiZWhfYWJvcnQ6IChwaWQjJWxpKSB0YXJnZXQ9PCUwMmktJWk+IGNtZD0lcFxuIiwKLQkJY21kLT5zZXJpYWxfbnVtYmVyLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4sIGNtZCk7CisJZHByaW50a2woS0VSTl9JTkZPLCAiZWhfYWJvcnQ6ICgweCVwKSB0YXJnZXQ9PCUwMmktJWk+IGNtZD0lcFxuIiwKKwkJY21kLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4sIGNtZCk7CiAKIAlkY2IgPSBmaW5kX2RjYihhY2IsIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1bik7CiAJaWYgKCFkY2IpIHsKQEAgLTE0OTUsOCArMTQ5NSw4IEBACiAJdTE2IHNfc3RhdDIsIHJldHVybl9jb2RlOwogCXU4IHNfc3RhdCwgc2NzaWNvbW1hbmQsIGksIGlkZW50aWZ5X21lc3NhZ2U7CiAJdTggKnB0cjsKLQlkcHJpbnRrZGJnKERCR18wLCAic3RhcnRfc2NzaTogKHBpZCMlbGkpIDwlMDJpLSVpPiBzcmI9JXBcbiIsCi0JCXNyYi0+Y21kLT5zZXJpYWxfbnVtYmVyLCBkY2ItPnRhcmdldF9pZCwgZGNiLT50YXJnZXRfbHVuLCBzcmIpOworCWRwcmludGtkYmcoREJHXzAsICJzdGFydF9zY3NpOiAoMHglcCkgPCUwMmktJWk+IHNyYj0lcFxuIiwKKwkJZGNiLT50YXJnZXRfaWQsIGRjYi0+dGFyZ2V0X2x1biwgc3JiKTsKIAogCXNyYi0+dGFnX251bWJlciA9IFRBR19OT05FOwkvKiBhY2ItPnRhZ19tYXhfbnVtOiBoYWQgZXJyb3IgcmVhZCBpbiBlZXByb20gKi8KIApAQCAtMTUwNSw4ICsxNTA1LDggQEAKIAlzX3N0YXQyID0gREMzOTV4X3JlYWQxNihhY2IsIFRSTV9TMTA0MF9TQ1NJX1NUQVRVUyk7CiAjaWYgMQogCWlmIChzX3N0YXQgJiAweDIwIC8qIHNfc3RhdDIgJiAweDAyMDAwICovICkgewotCQlkcHJpbnRrZGJnKERCR19LRywgInN0YXJ0X3Njc2k6IChwaWQjJWxpKSBCVVNZICUwMnggJTA0eFxuIiwKLQkJCXNyYi0+Y21kLT5zZXJpYWxfbnVtYmVyLCBzX3N0YXQsIHNfc3RhdDIpOworCQlkcHJpbnRrZGJnKERCR19LRywgInN0YXJ0X3Njc2k6ICgweCVwKSBCVVNZICUwMnggJTA0eFxuIiwKKwkJCXNfc3RhdCwgc19zdGF0Mik7CiAJCS8qCiAJCSAqIFRyeSBhbnl3YXk/CiAJCSAqCkBAIC0xNTIyLDE2ICsxNTIyLDE1IEBACiAJfQogI2VuZGlmCiAJaWYgKGFjYi0+YWN0aXZlX2RjYikgewotCQlkcHJpbnRrbChLRVJOX0RFQlVHLCAic3RhcnRfc2NzaTogKHBpZCMlbGkpIEF0dGVtcHQgdG8gc3RhcnQgYSIKLQkJCSJjb21tYW5kIHdoaWxlIGFub3RoZXIgY29tbWFuZCAocGlkIyVsaSkgaXMgYWN0aXZlLiIsCi0JCQlzcmItPmNtZC0+c2VyaWFsX251bWJlciwKKwkJZHByaW50a2woS0VSTl9ERUJVRywgInN0YXJ0X3Njc2k6ICgweCVwKSBBdHRlbXB0IHRvIHN0YXJ0IGEiCisJCQkiY29tbWFuZCB3aGlsZSBhbm90aGVyIGNvbW1hbmQgKDB4JXApIGlzIGFjdGl2ZS4iLAorCQkJc3JiLT5jbWQsCiAJCQlhY2ItPmFjdGl2ZV9kY2ItPmFjdGl2ZV9zcmIgPwotCQkJICAgIGFjYi0+YWN0aXZlX2RjYi0+YWN0aXZlX3NyYi0+Y21kLT5zZXJpYWxfbnVtYmVyIDogMCk7CisJCQkgICAgYWNiLT5hY3RpdmVfZGNiLT5hY3RpdmVfc3JiLT5jbWQgOiAwKTsKIAkJcmV0dXJuIDE7CiAJfQogCWlmIChEQzM5NXhfcmVhZDE2KGFjYiwgVFJNX1MxMDQwX1NDU0lfU1RBVFVTKSAmIFNDU0lJTlRFUlJVUFQpIHsKLQkJZHByaW50a2RiZyhEQkdfS0csICJzdGFydF9zY3NpOiAocGlkIyVsaSkgRmFpbGVkIChidXN5KVxuIiwKLQkJCXNyYi0+Y21kLT5zZXJpYWxfbnVtYmVyKTsKKwkJZHByaW50a2RiZyhEQkdfS0csICJzdGFydF9zY3NpOiAoMHglcCkgRmFpbGVkIChidXN5KVxuIiwgc3JiLT5jbWQpOwogCQlyZXR1cm4gMTsKIAl9CiAJLyogQWxsb3cgc3RhcnRpbmcgb2YgU0NTSSBjb21tYW5kcyBoYWxmIGEgc2Vjb25kIGJlZm9yZSB3ZSBhbGxvdyB0aGUgbWlkLWxldmVsCkBAIC0xNjAzLDkgKzE2MDIsOSBAQAogCQkJdGFnX251bWJlcisrOwogCQl9CiAJCWlmICh0YWdfbnVtYmVyID49IGRjYi0+bWF4X2NvbW1hbmQpIHsKLQkJCWRwcmludGtsKEtFUk5fV0FSTklORywgInN0YXJ0X3Njc2k6IChwaWQjJWxpKSAiCisJCQlkcHJpbnRrbChLRVJOX1dBUk5JTkcsICJzdGFydF9zY3NpOiAoMHglcCkgIgogCQkJCSJPdXQgb2YgdGFncyB0YXJnZXQ9PCUwMmktJWk+KVxuIiwKLQkJCQlzcmItPmNtZC0+c2VyaWFsX251bWJlciwgc3JiLT5jbWQtPmRldmljZS0+aWQsCisJCQkJc3JiLT5jbWQsIHNyYi0+Y21kLT5kZXZpY2UtPmlkLAogCQkJCXNyYi0+Y21kLT5kZXZpY2UtPmx1bik7CiAJCQlzcmItPnN0YXRlID0gU1JCX1JFQURZOwogCQkJREMzOTV4X3dyaXRlMTYoYWNiLCBUUk1fUzEwNDBfU0NTSV9DT05UUk9MLApAQCAtMTYyMyw4ICsxNjIyLDggQEAKICNlbmRpZgogLypwb2xsaW5nOiovCiAJLyogU2VuZCBDREIgLi5jb21tYW5kIGJsb2NrIC4uLi4uLi4uLiAqLwotCWRwcmludGtkYmcoREJHX0tHLCAic3RhcnRfc2NzaTogKHBpZCMlbGkpIDwlMDJpLSVpPiBjbW5kPTB4JTAyeCB0YWc9JWlcbiIsCi0JCXNyYi0+Y21kLT5zZXJpYWxfbnVtYmVyLCBzcmItPmNtZC0+ZGV2aWNlLT5pZCwgc3JiLT5jbWQtPmRldmljZS0+bHVuLAorCWRwcmludGtkYmcoREJHX0tHLCAic3RhcnRfc2NzaTogKDB4JXApIDwlMDJpLSVpPiBjbW5kPTB4JTAyeCB0YWc9JWlcbiIsCisJCXNyYi0+Y21kLCBzcmItPmNtZC0+ZGV2aWNlLT5pZCwgc3JiLT5jbWQtPmRldmljZS0+bHVuLAogCQlzcmItPmNtZC0+Y21uZFswXSwgc3JiLT50YWdfbnVtYmVyKTsKIAlpZiAoc3JiLT5mbGFnICYgQVVUT19SRVFTRU5TRSkgewogCQlEQzM5NXhfd3JpdGU4KGFjYiwgVFJNX1MxMDQwX1NDU0lfRklGTywgUkVRVUVTVF9TRU5TRSk7CkBAIC0xNjQ3LDggKzE2NDYsOCBAQAogCQkgKiB3ZSBjYXVnaHQgYW4gaW50ZXJydXB0IChtdXN0IGJlIHJlc2V0IG9yIHJlc2VsZWN0aW9uIC4uLiApCiAJCSAqIDogTGV0J3MgcHJvY2VzcyBpdCBmaXJzdCEKIAkJICovCi0JCWRwcmludGtkYmcoREJHXzAsICJzdGFydF9zY3NpOiAocGlkIyVsaSkgPCUwMmktJWk+IEZhaWxlZCAtIGJ1c3lcbiIsCi0JCQlzcmItPmNtZC0+c2VyaWFsX251bWJlciwgZGNiLT50YXJnZXRfaWQsIGRjYi0+dGFyZ2V0X2x1bik7CisJCWRwcmludGtkYmcoREJHXzAsICJzdGFydF9zY3NpOiAoMHglcCkgPCUwMmktJWk+IEZhaWxlZCAtIGJ1c3lcbiIsCisJCQlzcmItPmNtZCwgZGNiLT50YXJnZXRfaWQsIGRjYi0+dGFyZ2V0X2x1bik7CiAJCXNyYi0+c3RhdGUgPSBTUkJfUkVBRFk7CiAJCWZyZWVfdGFnKGRjYiwgc3JiKTsKIAkJc3JiLT5tc2dfY291bnQgPSAwOwpAQCAtMTg0Myw3ICsxODQyLDcgQEAKIHN0YXRpYyB2b2lkIG1zZ291dF9waGFzZTAoc3RydWN0IEFkYXB0ZXJDdGxCbGsgKmFjYiwgc3RydWN0IFNjc2lSZXFCbGsgKnNyYiwKIAkJdTE2ICpwc2NzaV9zdGF0dXMpCiB7Ci0JZHByaW50a2RiZyhEQkdfMCwgIm1zZ291dF9waGFzZTA6IChwaWQjJWxpKVxuIiwgc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIpOworCWRwcmludGtkYmcoREJHXzAsICJtc2dvdXRfcGhhc2UwOiAoMHglcClcbiIsIHNyYi0+Y21kKTsKIAlpZiAoc3JiLT5zdGF0ZSAmIChTUkJfVU5FWFBFQ1RfUkVTRUwgKyBTUkJfQUJPUlRfU0VOVCkpCiAJCSpwc2NzaV9zdGF0dXMgPSBQSF9CVVNfRlJFRTsJLyouLiBpbml0aWFsIHBoYXNlICovCiAKQEAgLTE4NTcsMTggKzE4NTYsMTggQEAKIHsKIAl1MTYgaTsKIAl1OCAqcHRyOwotCWRwcmludGtkYmcoREJHXzAsICJtc2dvdXRfcGhhc2UxOiAocGlkIyVsaSlcbiIsIHNyYi0+Y21kLT5zZXJpYWxfbnVtYmVyKTsKKwlkcHJpbnRrZGJnKERCR18wLCAibXNnb3V0X3BoYXNlMTogKDB4JXApXG4iLCBzcmItPmNtZCk7CiAKIAljbGVhcl9maWZvKGFjYiwgIm1zZ291dF9waGFzZTEiKTsKIAlpZiAoIShzcmItPnN0YXRlICYgU1JCX01TR09VVCkpIHsKIAkJc3JiLT5zdGF0ZSB8PSBTUkJfTVNHT1VUOwogCQlkcHJpbnRrbChLRVJOX0RFQlVHLAotCQkJIm1zZ291dF9waGFzZTE6IChwaWQjJWxpKSBQaGFzZSB1bmV4cGVjdGVkXG4iLAotCQkJc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIpOwkvKiBTbyB3aGF0ID8gKi8KKwkJCSJtc2dvdXRfcGhhc2UxOiAoMHglcCkgUGhhc2UgdW5leHBlY3RlZFxuIiwKKwkJCXNyYi0+Y21kKTsJLyogU28gd2hhdCA/ICovCiAJfQogCWlmICghc3JiLT5tc2dfY291bnQpIHsKLQkJZHByaW50a2RiZyhEQkdfMCwgIm1zZ291dF9waGFzZTE6IChwaWQjJWxpKSBOT1AgbXNnXG4iLAotCQkJc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIpOworCQlkcHJpbnRrZGJnKERCR18wLCAibXNnb3V0X3BoYXNlMTogKDB4JXApIE5PUCBtc2dcbiIsCisJCQlzcmItPmNtZCk7CiAJCURDMzk1eF93cml0ZTgoYWNiLCBUUk1fUzEwNDBfU0NTSV9GSUZPLCBNU0dfTk9QKTsKIAkJREMzOTV4X3dyaXRlMTYoYWNiLCBUUk1fUzEwNDBfU0NTSV9DT05UUk9MLCBET19EQVRBTEFUQ0gpOwkvKiBpdCdzIGltcG9ydGFudCBmb3IgYXRuIHN0b3AgKi8KIAkJREMzOTV4X3dyaXRlOChhY2IsIFRSTV9TMTA0MF9TQ1NJX0NPTU1BTkQsIFNDTURfRklGT19PVVQpOwpAQCAtMTg4OCw3ICsxODg3LDcgQEAKIHN0YXRpYyB2b2lkIGNvbW1hbmRfcGhhc2UwKHN0cnVjdCBBZGFwdGVyQ3RsQmxrICphY2IsIHN0cnVjdCBTY3NpUmVxQmxrICpzcmIsCiAJCXUxNiAqcHNjc2lfc3RhdHVzKQogewotCWRwcmludGtkYmcoREJHXzAsICJjb21tYW5kX3BoYXNlMDogKHBpZCMlbGkpXG4iLCBzcmItPmNtZC0+c2VyaWFsX251bWJlcik7CisJZHByaW50a2RiZyhEQkdfMCwgImNvbW1hbmRfcGhhc2UwOiAoMHglcClcbiIsIHNyYi0+Y21kKTsKIAlEQzM5NXhfd3JpdGUxNihhY2IsIFRSTV9TMTA0MF9TQ1NJX0NPTlRST0wsIERPX0RBVEFMQVRDSCk7CiB9CiAKQEAgLTE4OTksNyArMTg5OCw3IEBACiAJc3RydWN0IERldmljZUN0bEJsayAqZGNiOwogCXU4ICpwdHI7CiAJdTE2IGk7Ci0JZHByaW50a2RiZyhEQkdfMCwgImNvbW1hbmRfcGhhc2UxOiAocGlkIyVsaSlcbiIsIHNyYi0+Y21kLT5zZXJpYWxfbnVtYmVyKTsKKwlkcHJpbnRrZGJnKERCR18wLCAiY29tbWFuZF9waGFzZTE6ICgweCVwKVxuIiwgc3JiLT5jbWQpOwogCiAJY2xlYXJfZmlmbyhhY2IsICJjb21tYW5kX3BoYXNlMSIpOwogCURDMzk1eF93cml0ZTE2KGFjYiwgVFJNX1MxMDQwX1NDU0lfQ09OVFJPTCwgRE9fQ0xSQVROKTsKQEAgLTIwNDEsOCArMjA0MCw4IEBACiAJc3RydWN0IERldmljZUN0bEJsayAqZGNiID0gc3JiLT5kY2I7CiAJdTE2IHNjc2lfc3RhdHVzID0gKnBzY3NpX3N0YXR1czsKIAl1MzIgZF9sZWZ0X2NvdW50ZXIgPSAwOwotCWRwcmludGtkYmcoREJHXzAsICJkYXRhX291dF9waGFzZTA6IChwaWQjJWxpKSA8JTAyaS0laT5cbiIsCi0JCXNyYi0+Y21kLT5zZXJpYWxfbnVtYmVyLCBzcmItPmNtZC0+ZGV2aWNlLT5pZCwgc3JiLT5jbWQtPmRldmljZS0+bHVuKTsKKwlkcHJpbnRrZGJnKERCR18wLCAiZGF0YV9vdXRfcGhhc2UwOiAoMHglcCkgPCUwMmktJWk+XG4iLAorCQlzcmItPmNtZCwgc3JiLT5jbWQtPmRldmljZS0+aWQsIHNyYi0+Y21kLT5kZXZpY2UtPmx1bik7CiAKIAkvKgogCSAqIEtHOiBXZSBuZWVkIHRvIGRyYWluIHRoZSBidWZmZXJzIGJlZm9yZSB3ZSBkcmF3IGFueSBjb25jbHVzaW9ucyEKQEAgLTIxNzEsOCArMjE3MCw4IEBACiBzdGF0aWMgdm9pZCBkYXRhX291dF9waGFzZTEoc3RydWN0IEFkYXB0ZXJDdGxCbGsgKmFjYiwgc3RydWN0IFNjc2lSZXFCbGsgKnNyYiwKIAkJdTE2ICpwc2NzaV9zdGF0dXMpCiB7Ci0JZHByaW50a2RiZyhEQkdfMCwgImRhdGFfb3V0X3BoYXNlMTogKHBpZCMlbGkpIDwlMDJpLSVpPlxuIiwKLQkJc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIsIHNyYi0+Y21kLT5kZXZpY2UtPmlkLCBzcmItPmNtZC0+ZGV2aWNlLT5sdW4pOworCWRwcmludGtkYmcoREJHXzAsICJkYXRhX291dF9waGFzZTE6ICgweCVwKSA8JTAyaS0laT5cbiIsCisJCXNyYi0+Y21kLCBzcmItPmNtZC0+ZGV2aWNlLT5pZCwgc3JiLT5jbWQtPmRldmljZS0+bHVuKTsKIAljbGVhcl9maWZvKGFjYiwgImRhdGFfb3V0X3BoYXNlMSIpOwogCS8qIGRvIHByZXBhcmUgYmVmb3JlIHRyYW5zZmVyIHdoZW4gZGF0YSBvdXQgcGhhc2UgKi8KIAlkYXRhX2lvX3RyYW5zZmVyKGFjYiwgc3JiLCBYRkVSREFUQU9VVCk7CkBAIC0yMTgzLDggKzIxODIsOCBAQAogewogCXUxNiBzY3NpX3N0YXR1cyA9ICpwc2NzaV9zdGF0dXM7CiAKLQlkcHJpbnRrZGJnKERCR18wLCAiZGF0YV9pbl9waGFzZTA6IChwaWQjJWxpKSA8JTAyaS0laT5cbiIsCi0JCXNyYi0+Y21kLT5zZXJpYWxfbnVtYmVyLCBzcmItPmNtZC0+ZGV2aWNlLT5pZCwgc3JiLT5jbWQtPmRldmljZS0+bHVuKTsKKwlkcHJpbnRrZGJnKERCR18wLCAiZGF0YV9pbl9waGFzZTA6ICgweCVwKSA8JTAyaS0laT5cbiIsCisJCXNyYi0+Y21kLCBzcmItPmNtZC0+ZGV2aWNlLT5pZCwgc3JiLT5jbWQtPmRldmljZS0+bHVuKTsKIAogCS8qCiAJICogS0c6IERhdGFJbiBpcyBtdWNoIG1vcmUgdHJpY2t5IHRoYW4gRGF0YU91dC4gV2hlbiB0aGUgZGV2aWNlIGlzIGZpbmlzaGVkCkBAIC0yMjA0LDggKzIyMDMsOCBAQAogCQl1bnNpZ25lZCBpbnQgc2MsIGZjOwogCiAJCWlmIChzY3NpX3N0YXR1cyAmIFBBUklUWUVSUk9SKSB7Ci0JCQlkcHJpbnRrbChLRVJOX0lORk8sICJkYXRhX2luX3BoYXNlMDogKHBpZCMlbGkpICIKLQkJCQkiUGFyaXR5IEVycm9yXG4iLCBzcmItPmNtZC0+c2VyaWFsX251bWJlcik7CisJCQlkcHJpbnRrbChLRVJOX0lORk8sICJkYXRhX2luX3BoYXNlMDogKDB4JXApICIKKwkJCQkiUGFyaXR5IEVycm9yXG4iLCBzcmItPmNtZCk7CiAJCQlzcmItPnN0YXR1cyB8PSBQQVJJVFlfRVJST1I7CiAJCX0KIAkJLyoKQEAgLTIzOTQsOCArMjM5Myw4IEBACiBzdGF0aWMgdm9pZCBkYXRhX2luX3BoYXNlMShzdHJ1Y3QgQWRhcHRlckN0bEJsayAqYWNiLCBzdHJ1Y3QgU2NzaVJlcUJsayAqc3JiLAogCQl1MTYgKnBzY3NpX3N0YXR1cykKIHsKLQlkcHJpbnRrZGJnKERCR18wLCAiZGF0YV9pbl9waGFzZTE6IChwaWQjJWxpKSA8JTAyaS0laT5cbiIsCi0JCXNyYi0+Y21kLT5zZXJpYWxfbnVtYmVyLCBzcmItPmNtZC0+ZGV2aWNlLT5pZCwgc3JiLT5jbWQtPmRldmljZS0+bHVuKTsKKwlkcHJpbnRrZGJnKERCR18wLCAiZGF0YV9pbl9waGFzZTE6ICgweCVwKSA8JTAyaS0laT5cbiIsCisJCXNyYi0+Y21kLCBzcmItPmNtZC0+ZGV2aWNlLT5pZCwgc3JiLT5jbWQtPmRldmljZS0+bHVuKTsKIAlkYXRhX2lvX3RyYW5zZmVyKGFjYiwgc3JiLCBYRkVSREFUQUlOKTsKIH0KIApAQCAtMjQwNiw4ICsyNDA1LDggQEAKIAlzdHJ1Y3QgRGV2aWNlQ3RsQmxrICpkY2IgPSBzcmItPmRjYjsKIAl1OCBidmFsOwogCWRwcmludGtkYmcoREJHXzAsCi0JCSJkYXRhX2lvX3RyYW5zZmVyOiAocGlkIyVsaSkgPCUwMmktJWk+ICVjIGxlbj0laSwgc2c9KCVpLyVpKVxuIiwKLQkJc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIsIHNyYi0+Y21kLT5kZXZpY2UtPmlkLCBzcmItPmNtZC0+ZGV2aWNlLT5sdW4sCisJCSJkYXRhX2lvX3RyYW5zZmVyOiAoMHglcCkgPCUwMmktJWk+ICVjIGxlbj0laSwgc2c9KCVpLyVpKVxuIiwKKwkJc3JiLT5jbWQsIHNyYi0+Y21kLT5kZXZpY2UtPmlkLCBzcmItPmNtZC0+ZGV2aWNlLT5sdW4sCiAJCSgoaW9fZGlyICYgRE1BQ01EX0RJUikgPyAncicgOiAndycpLAogCQlzcmItPnRvdGFsX3hmZXJfbGVuZ3RoLCBzcmItPnNnX2luZGV4LCBzcmItPnNnX2NvdW50KTsKIAlpZiAoc3JiID09IGFjYi0+dG1wX3NyYikKQEAgLTI1NzksOCArMjU3OCw4IEBACiBzdGF0aWMgdm9pZCBzdGF0dXNfcGhhc2UwKHN0cnVjdCBBZGFwdGVyQ3RsQmxrICphY2IsIHN0cnVjdCBTY3NpUmVxQmxrICpzcmIsCiAJCXUxNiAqcHNjc2lfc3RhdHVzKQogewotCWRwcmludGtkYmcoREJHXzAsICJzdGF0dXNfcGhhc2UwOiAocGlkIyVsaSkgPCUwMmktJWk+XG4iLAotCQlzcmItPmNtZC0+c2VyaWFsX251bWJlciwgc3JiLT5jbWQtPmRldmljZS0+aWQsIHNyYi0+Y21kLT5kZXZpY2UtPmx1bik7CisJZHByaW50a2RiZyhEQkdfMCwgInN0YXR1c19waGFzZTA6ICgweCVwKSA8JTAyaS0laT5cbiIsCisJCXNyYi0+Y21kLCBzcmItPmNtZC0+ZGV2aWNlLT5pZCwgc3JiLT5jbWQtPmRldmljZS0+bHVuKTsKIAlzcmItPnRhcmdldF9zdGF0dXMgPSBEQzM5NXhfcmVhZDgoYWNiLCBUUk1fUzEwNDBfU0NTSV9GSUZPKTsKIAlzcmItPmVuZF9tZXNzYWdlID0gREMzOTV4X3JlYWQ4KGFjYiwgVFJNX1MxMDQwX1NDU0lfRklGTyk7CS8qIGdldCBtZXNzYWdlICovCiAJc3JiLT5zdGF0ZSA9IFNSQl9DT01QTEVURUQ7CkBAIC0yNTkzLDggKzI1OTIsOCBAQAogc3RhdGljIHZvaWQgc3RhdHVzX3BoYXNlMShzdHJ1Y3QgQWRhcHRlckN0bEJsayAqYWNiLCBzdHJ1Y3QgU2NzaVJlcUJsayAqc3JiLAogCQl1MTYgKnBzY3NpX3N0YXR1cykKIHsKLQlkcHJpbnRrZGJnKERCR18wLCAic3RhdHVzX3BoYXNlMTogKHBpZCMlbGkpIDwlMDJpLSVpPlxuIiwKLQkJc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIsIHNyYi0+Y21kLT5kZXZpY2UtPmlkLCBzcmItPmNtZC0+ZGV2aWNlLT5sdW4pOworCWRwcmludGtkYmcoREJHXzAsICJzdGF0dXNfcGhhc2UxOiAoMHglcCkgPCUwMmktJWk+XG4iLAorCQlzcmItPmNtZCwgc3JiLT5jbWQtPmRldmljZS0+aWQsIHNyYi0+Y21kLT5kZXZpY2UtPmx1bik7CiAJc3JiLT5zdGF0ZSA9IFNSQl9TVEFUVVM7CiAJREMzOTV4X3dyaXRlMTYoYWNiLCBUUk1fUzEwNDBfU0NTSV9DT05UUk9MLCBET19EQVRBTEFUQ0gpOwkvKiBpdCdzIGltcG9ydGFudCBmb3IgYXRuIHN0b3AgKi8KIAlEQzM5NXhfd3JpdGU4KGFjYiwgVFJNX1MxMDQwX1NDU0lfQ09NTUFORCwgU0NNRF9DT01QKTsKQEAgLTI2MzUsOCArMjYzNCw4IEBACiB7CiAJc3RydWN0IFNjc2lSZXFCbGsgKnNyYiA9IE5VTEw7CiAJc3RydWN0IFNjc2lSZXFCbGsgKmk7Ci0JZHByaW50a2RiZyhEQkdfMCwgIm1zZ2luX3F0YWc6IChwaWQjJWxpKSB0YWc9JWkgc3JiPSVwXG4iLAotCQkgICBzcmItPmNtZC0+c2VyaWFsX251bWJlciwgdGFnLCBzcmIpOworCWRwcmludGtkYmcoREJHXzAsICJtc2dpbl9xdGFnOiAoMHglcCkgdGFnPSVpIHNyYj0lcFxuIiwKKwkJICAgc3JiLT5jbWQsIHRhZywgc3JiKTsKIAogCWlmICghKGRjYi0+dGFnX21hc2sgJiAoMSA8PCB0YWcpKSkKIAkJZHByaW50a2woS0VSTl9ERUJVRywKQEAgLTI2NTQsOCArMjY1Myw4IEBACiAJaWYgKCFzcmIpCiAJCWdvdG8gbWluZ3gwOwogCi0JZHByaW50a2RiZyhEQkdfMCwgIm1zZ2luX3F0YWc6IChwaWQjJWxpKSA8JTAyaS0laT5cbiIsCi0JCXNyYi0+Y21kLT5zZXJpYWxfbnVtYmVyLCBzcmItPmRjYi0+dGFyZ2V0X2lkLCBzcmItPmRjYi0+dGFyZ2V0X2x1bik7CisJZHByaW50a2RiZyhEQkdfMCwgIm1zZ2luX3F0YWc6ICgweCVwKSA8JTAyaS0laT5cbiIsCisJCXNyYi0+Y21kLCBzcmItPmRjYi0+dGFyZ2V0X2lkLCBzcmItPmRjYi0+dGFyZ2V0X2x1bik7CiAJaWYgKGRjYi0+ZmxhZyAmIEFCT1JUX0RFVl8pIHsKIAkJLypzcmItPnN0YXRlID0gU1JCX0FCT1JUX1NFTlQ7ICovCiAJCWVuYWJsZV9tc2dvdXRfYWJvcnQoYWNiLCBzcmIpOwpAQCAtMjg2NSw3ICsyODY0LDcgQEAKIAkJdTE2ICpwc2NzaV9zdGF0dXMpCiB7CiAJc3RydWN0IERldmljZUN0bEJsayAqZGNiID0gYWNiLT5hY3RpdmVfZGNiOwotCWRwcmludGtkYmcoREJHXzAsICJtc2dpbl9waGFzZTA6IChwaWQjJWxpKVxuIiwgc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIpOworCWRwcmludGtkYmcoREJHXzAsICJtc2dpbl9waGFzZTA6ICgweCVwKVxuIiwgc3JiLT5jbWQpOwogCiAJc3JiLT5tc2dpbl9idWZbYWNiLT5tc2dfbGVuKytdID0gREMzOTV4X3JlYWQ4KGFjYiwgVFJNX1MxMDQwX1NDU0lfRklGTyk7CiAJaWYgKG1zZ2luX2NvbXBsZXRlZChzcmItPm1zZ2luX2J1ZiwgYWNiLT5tc2dfbGVuKSkgewpAQCAtMjkzMSw5ICsyOTMwLDkgQEAKIAkJCSAqIFNBVkUgUE9JTlRFUiBtYXkgYmUgaWdub3JlZCBhcyB3ZSBoYXZlIHRoZSBzdHJ1Y3QKIAkJCSAqIFNjc2lSZXFCbGsqIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2NzaSBjb21tYW5kLgogCQkJICovCi0JCQlkcHJpbnRrZGJnKERCR18wLCAibXNnaW5fcGhhc2UwOiAocGlkIyVsaSkgIgorCQkJZHByaW50a2RiZyhEQkdfMCwgIm1zZ2luX3BoYXNlMDogKDB4JXApICIKIAkJCQkiU0FWRSBQT0lOVEVSIHJlbT0laSBJZ25vcmVcbiIsCi0JCQkJc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIsIHNyYi0+dG90YWxfeGZlcl9sZW5ndGgpOworCQkJCXNyYi0+Y21kLCBzcmItPnRvdGFsX3hmZXJfbGVuZ3RoKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgUkVTVE9SRV9QT0lOVEVSUzoKQEAgLTI5NDEsOSArMjk0MCw5IEBACiAJCQlicmVhazsKIAogCQljYXNlIEFCT1JUOgotCQkJZHByaW50a2RiZyhEQkdfMCwgIm1zZ2luX3BoYXNlMDogKHBpZCMlbGkpICIKKwkJCWRwcmludGtkYmcoREJHXzAsICJtc2dpbl9waGFzZTA6ICgweCVwKSAiCiAJCQkJIjwlMDJpLSVpPiBBQk9SVCBtc2dcbiIsCi0JCQkJc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIsIGRjYi0+dGFyZ2V0X2lkLAorCQkJCXNyYi0+Y21kLCBkY2ItPnRhcmdldF9pZCwKIAkJCQlkY2ItPnRhcmdldF9sdW4pOwogCQkJZGNiLT5mbGFnIHw9IEFCT1JUX0RFVl87CiAJCQllbmFibGVfbXNnb3V0X2Fib3J0KGFjYiwgc3JiKTsKQEAgLTI5NzUsNyArMjk3NCw3IEBACiBzdGF0aWMgdm9pZCBtc2dpbl9waGFzZTEoc3RydWN0IEFkYXB0ZXJDdGxCbGsgKmFjYiwgc3RydWN0IFNjc2lSZXFCbGsgKnNyYiwKIAkJdTE2ICpwc2NzaV9zdGF0dXMpCiB7Ci0JZHByaW50a2RiZyhEQkdfMCwgIm1zZ2luX3BoYXNlMTogKHBpZCMlbGkpXG4iLCBzcmItPmNtZC0+c2VyaWFsX251bWJlcik7CisJZHByaW50a2RiZyhEQkdfMCwgIm1zZ2luX3BoYXNlMTogKDB4JXApXG4iLCBzcmItPmNtZCk7CiAJY2xlYXJfZmlmbyhhY2IsICJtc2dpbl9waGFzZTEiKTsKIAlEQzM5NXhfd3JpdGUzMihhY2IsIFRSTV9TMTA0MF9TQ1NJX0NPVU5URVIsIDEpOwogCWlmICghKHNyYi0+c3RhdGUgJiBTUkJfTVNHSU4pKSB7CkBAIC0zMDQxLDcgKzMwNDAsNyBAQAogCX0KIAlzcmIgPSBkY2ItPmFjdGl2ZV9zcmI7CiAJYWNiLT5hY3RpdmVfZGNiID0gTlVMTDsKLQlkcHJpbnRrZGJnKERCR18wLCAiZGlzY29ubmVjdDogKHBpZCMlbGkpXG4iLCBzcmItPmNtZC0+c2VyaWFsX251bWJlcik7CisJZHByaW50a2RiZyhEQkdfMCwgImRpc2Nvbm5lY3Q6ICgweCVwKVxuIiwgc3JiLT5jbWQpOwogCiAJc3JiLT5zY3NpX3BoYXNlID0gUEhfQlVTX0ZSRUU7CS8qIGluaXRpYWwgcGhhc2UgKi8KIAljbGVhcl9maWZvKGFjYiwgImRpc2Nvbm5lY3QiKTsKQEAgLTMwNzEsMTQgKzMwNzAsMTQgQEAKIAkJCSAgICAmJiBzcmItPnN0YXRlICE9IFNSQl9NU0dPVVQpIHsKIAkJCQlzcmItPnN0YXRlID0gU1JCX1JFQURZOwogCQkJCWRwcmludGtsKEtFUk5fREVCVUcsCi0JCQkJCSJkaXNjb25uZWN0OiAocGlkIyVsaSkgVW5leHBlY3RlZFxuIiwKLQkJCQkJc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIpOworCQkJCQkiZGlzY29ubmVjdDogKDB4JXApIFVuZXhwZWN0ZWRcbiIsCisJCQkJCXNyYi0+Y21kKTsKIAkJCQlzcmItPnRhcmdldF9zdGF0dXMgPSBTQ1NJX1NUQVRfU0VMX1RJTUVPVVQ7CiAJCQkJZ290byBkaXNjMTsKIAkJCX0gZWxzZSB7CiAJCQkJLyogTm9ybWFsIHNlbGVjdGlvbiB0aW1lb3V0ICovCi0JCQkJZHByaW50a2RiZyhEQkdfS0csICJkaXNjb25uZWN0OiAocGlkIyVsaSkgIgotCQkJCQkiPCUwMmktJWk+IFNlbFRPXG4iLCBzcmItPmNtZC0+c2VyaWFsX251bWJlciwKKwkJCQlkcHJpbnRrZGJnKERCR19LRywgImRpc2Nvbm5lY3Q6ICgweCVwKSAiCisJCQkJCSI8JTAyaS0laT4gU2VsVE9cbiIsIHNyYi0+Y21kLAogCQkJCQlkY2ItPnRhcmdldF9pZCwgZGNiLT50YXJnZXRfbHVuKTsKIAkJCQlpZiAoc3JiLT5yZXRyeV9jb3VudCsrID4gREMzOTV4X01BWF9SRVRSSUVTCiAJCQkJICAgIHx8IGFjYi0+c2Nhbl9kZXZpY2VzKSB7CkBAIC0zMDg5LDggKzMwODgsOCBAQAogCQkJCWZyZWVfdGFnKGRjYiwgc3JiKTsKIAkJCQlzcmJfZ29pbmdfdG9fd2FpdGluZ19tb3ZlKGRjYiwgc3JiKTsKIAkJCQlkcHJpbnRrZGJnKERCR19LRywKLQkJCQkJImRpc2Nvbm5lY3Q6IChwaWQjJWxpKSBSZXRyeVxuIiwKLQkJCQkJc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIpOworCQkJCQkiZGlzY29ubmVjdDogKDB4JXApIFJldHJ5XG4iLAorCQkJCQlzcmItPmNtZCk7CiAJCQkJd2FpdGluZ19zZXRfdGltZXIoYWNiLCBIWiAvIDIwKTsKIAkJCX0KIAkJfSBlbHNlIGlmIChzcmItPnN0YXRlICYgU1JCX0RJU0NPTk5FQ1QpIHsKQEAgLTMxNDIsOSArMzE0MSw5IEBACiAJCX0KIAkJLyogV2h5IHRoZSBpZiA/ICovCiAJCWlmICghYWNiLT5zY2FuX2RldmljZXMpIHsKLQkJCWRwcmludGtkYmcoREJHX0tHLCAicmVzZWxlY3Q6IChwaWQjJWxpKSA8JTAyaS0laT4gIgorCQkJZHByaW50a2RiZyhEQkdfS0csICJyZXNlbGVjdDogKDB4JXApIDwlMDJpLSVpPiAiCiAJCQkJIkFyYiBsb3N0IGJ1dCBSZXNlbCB3aW4gcnNlbD0laSBzdGF0PTB4JTA0eFxuIiwKLQkJCQlzcmItPmNtZC0+c2VyaWFsX251bWJlciwgZGNiLT50YXJnZXRfaWQsCisJCQkJc3JiLT5jbWQsIGRjYi0+dGFyZ2V0X2lkLAogCQkJCWRjYi0+dGFyZ2V0X2x1biwgcnNlbF90YXJfbHVuX2lkLAogCQkJCURDMzk1eF9yZWFkMTYoYWNiLCBUUk1fUzEwNDBfU0NTSV9TVEFUVVMpKTsKIAkJCWFyYmxvc3RmbGFnID0gMTsKQEAgLTMzMTgsNyArMzMxNyw3IEBACiAJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyID0gY21kLT5zY19kYXRhX2RpcmVjdGlvbjsKIAlpbnQgY2tjX29ubHkgPSAxOwogCi0JZHByaW50a2RiZyhEQkdfMSwgInNyYl9kb25lOiAocGlkIyVsaSkgPCUwMmktJWk+XG4iLCBzcmItPmNtZC0+c2VyaWFsX251bWJlciwKKwlkcHJpbnRrZGJnKERCR18xLCAic3JiX2RvbmU6ICgweCVwKSA8JTAyaS0laT5cbiIsIHNyYi0+Y21kLAogCQlzcmItPmNtZC0+ZGV2aWNlLT5pZCwgc3JiLT5jbWQtPmRldmljZS0+bHVuKTsKIAlkcHJpbnRrZGJnKERCR19TRywgInNyYl9kb25lOiBzcmI9JXAgc2c9JWkoJWkvJWkpIGJ1Zj0lcFxuIiwKIAkJICAgc3JiLCBzY3NpX3NnX2NvdW50KGNtZCksIHNyYi0+c2dfaW5kZXgsIHNyYi0+c2dfY291bnQsCkBAIC0zNDk3LDkgKzM0OTYsOSBAQAogCWNtZC0+U0NwLmJ1ZmZlcnNfcmVzaWR1YWwgPSAwOwogCWlmIChkZWJ1Z19lbmFibGVkKERCR19LRykpIHsKIAkJaWYgKHNyYi0+dG90YWxfeGZlcl9sZW5ndGgpCi0JCQlkcHJpbnRrZGJnKERCR19LRywgInNyYl9kb25lOiAocGlkIyVsaSkgPCUwMmktJWk+ICIKKwkJCWRwcmludGtkYmcoREJHX0tHLCAic3JiX2RvbmU6ICgweCVwKSA8JTAyaS0laT4gIgogCQkJCSJjbW5kPTB4JTAyeCBNaXNzZWQgJWkgYnl0ZXNcbiIsCi0JCQkJY21kLT5zZXJpYWxfbnVtYmVyLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4sCisJCQkJY21kLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4sCiAJCQkJY21kLT5jbW5kWzBdLCBzcmItPnRvdGFsX3hmZXJfbGVuZ3RoKTsKIAl9CiAKQEAgLTM1MDgsOCArMzUwNyw4IEBACiAJaWYgKHNyYiA9PSBhY2ItPnRtcF9zcmIpCiAJCWRwcmludGtsKEtFUk5fRVJSLCAic3JiX2RvbmU6IEVSUk9SISBDb21wbGV0ZWQgY21kIHdpdGggdG1wX3NyYlxuIik7CiAJZWxzZSB7Ci0JCWRwcmludGtkYmcoREJHXzAsICJzcmJfZG9uZTogKHBpZCMlbGkpIGRvbmUgcmVzdWx0PTB4JTA4eFxuIiwKLQkJCWNtZC0+c2VyaWFsX251bWJlciwgY21kLT5yZXN1bHQpOworCQlkcHJpbnRrZGJnKERCR18wLCAic3JiX2RvbmU6ICgweCVwKSBkb25lIHJlc3VsdD0weCUwOHhcbiIsCisJCQljbWQsIGNtZC0+cmVzdWx0KTsKIAkJc3JiX2ZyZWVfaW5zZXJ0KGFjYiwgc3JiKTsKIAl9CiAJcGNpX3VubWFwX3NyYihhY2IsIHNyYik7CkBAIC0zNTM4LDcgKzM1MzcsNyBAQAogCQkJcCA9IHNyYi0+Y21kOwogCQkJZGlyID0gcC0+c2NfZGF0YV9kaXJlY3Rpb247CiAJCQlyZXN1bHQgPSBNS19SRVMoMCwgZGlkX2ZsYWcsIDAsIDApOwotCQkJcHJpbnRrKCJHOiVsaSglMDJpLSVpKSAiLCBwLT5zZXJpYWxfbnVtYmVyLAorCQkJcHJpbnRrKCJHOiVwKCUwMmktJWkpICIsIHAsCiAJCQkgICAgICAgcC0+ZGV2aWNlLT5pZCwgcC0+ZGV2aWNlLT5sdW4pOwogCQkJc3JiX2dvaW5nX3JlbW92ZShkY2IsIHNyYik7CiAJCQlmcmVlX3RhZyhkY2IsIHNyYik7CkBAIC0zNTY4LDcgKzM1NjcsNyBAQAogCQkJcCA9IHNyYi0+Y21kOwogCiAJCQlyZXN1bHQgPSBNS19SRVMoMCwgZGlkX2ZsYWcsIDAsIDApOwotCQkJcHJpbnRrKCJXOiVsaTwlMDJpLSVpPiIsIHAtPnNlcmlhbF9udW1iZXIsIHAtPmRldmljZS0+aWQsCisJCQlwcmludGsoIlc6JXA8JTAyaS0laT4iLCBwLCBwLT5kZXZpY2UtPmlkLAogCQkJICAgICAgIHAtPmRldmljZS0+bHVuKTsKIAkJCXNyYl93YWl0aW5nX3JlbW92ZShkY2IsIHNyYik7CiAJCQlzcmJfZnJlZV9pbnNlcnQoYWNiLCBzcmIpOwpAQCAtMzY3Nyw4ICszNjc2LDggQEAKIAkJc3RydWN0IFNjc2lSZXFCbGsgKnNyYikKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSBzcmItPmNtZDsKLQlkcHJpbnRrZGJnKERCR18xLCAicmVxdWVzdF9zZW5zZTogKHBpZCMlbGkpIDwlMDJpLSVpPlxuIiwKLQkJY21kLT5zZXJpYWxfbnVtYmVyLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOworCWRwcmludGtkYmcoREJHXzEsICJyZXF1ZXN0X3NlbnNlOiAoMHglcCkgPCUwMmktJWk+XG4iLAorCQljbWQsIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1bik7CiAKIAlzcmItPmZsYWcgfD0gQVVUT19SRVFTRU5TRTsKIAlzcmItPmFkYXB0ZXJfc3RhdHVzID0gMDsKQEAgLTM3MDgsOCArMzcwNyw4IEBACiAKIAlpZiAoc3RhcnRfc2NzaShhY2IsIGRjYiwgc3JiKSkgewkvKiBTaG91bGQgb25seSBoYXBwZW4sIGlmIHNiLiBlbHNlIGdyYWJzIHRoZSBidXMgKi8KIAkJZHByaW50a2woS0VSTl9ERUJVRywKLQkJCSJyZXF1ZXN0X3NlbnNlOiAocGlkIyVsaSkgZmFpbGVkIDwlMDJpLSVpPlxuIiwKLQkJCXNyYi0+Y21kLT5zZXJpYWxfbnVtYmVyLCBkY2ItPnRhcmdldF9pZCwgZGNiLT50YXJnZXRfbHVuKTsKKwkJCSJyZXF1ZXN0X3NlbnNlOiAoMHglcCkgZmFpbGVkIDwlMDJpLSVpPlxuIiwKKwkJCXNyYi0+Y21kLCBkY2ItPnRhcmdldF9pZCwgZGNiLT50YXJnZXRfbHVuKTsKIAkJc3JiX2dvaW5nX3RvX3dhaXRpbmdfbW92ZShkY2IsIHNyYik7CiAJCXdhaXRpbmdfc2V0X3RpbWVyKGFjYiwgSFogLyAxMDApOwogCX0KQEAgLTQ3MTcsMTMgKzQ3MTYsMTMgQEAKIAkJCQlkY2ItPnRhcmdldF9pZCwgZGNiLT50YXJnZXRfbHVuLAogCQkJCWxpc3Rfc2l6ZSgmZGNiLT5zcmJfd2FpdGluZ19saXN0KSk7CiAgICAgICAgICAgICAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShzcmIsICZkY2ItPnNyYl93YWl0aW5nX2xpc3QsIGxpc3QpCi0JCQlTUFJJTlRGKCIgJWxpIiwgc3JiLT5jbWQtPnNlcmlhbF9udW1iZXIpOworCQkJU1BSSU5URigiICVwIiwgc3JiLT5jbWQpOwogCQlpZiAoIWxpc3RfZW1wdHkoJmRjYi0+c3JiX2dvaW5nX2xpc3QpKQogCQkJU1BSSU5URigiXG5EQ0IgKCUwMmktJWkpOiBHb2luZyAgOiAlaToiLAogCQkJCWRjYi0+dGFyZ2V0X2lkLCBkY2ItPnRhcmdldF9sdW4sCiAJCQkJbGlzdF9zaXplKCZkY2ItPnNyYl9nb2luZ19saXN0KSk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoc3JiLCAmZGNiLT5zcmJfZ29pbmdfbGlzdCwgbGlzdCkKLQkJCVNQUklOVEYoIiAlbGkiLCBzcmItPmNtZC0+c2VyaWFsX251bWJlcik7CisJCQlTUFJJTlRGKCIgJXAiLCBzcmItPmNtZCk7CiAJCWlmICghbGlzdF9lbXB0eSgmZGNiLT5zcmJfd2FpdGluZ19saXN0KSB8fCAhbGlzdF9lbXB0eSgmZGNiLT5zcmJfZ29pbmdfbGlzdCkpCiAJCQlTUFJJTlRGKCJcbiIpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoLmMgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaC5jCmluZGV4IDU2NGU2ZWMuLjAxMTliODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoLmMKKysrIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGguYwpAQCAtMzk0LDEyICszOTQsMTQgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2VfaGFuZGxlciAqc2NzaV9kaCA9IE5VTEw7CisJc3RydWN0IGRldmljZSAqZGV2ID0gTlVMTDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIAlzZGV2ID0gcS0+cXVldWVkYXRhOwogCWlmIChzZGV2ICYmIHNkZXYtPnNjc2lfZGhfZGF0YSkKIAkJc2NzaV9kaCA9IHNkZXYtPnNjc2lfZGhfZGF0YS0+c2NzaV9kaDsKLQlpZiAoIXNjc2lfZGggfHwgIWdldF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KSB8fAorCWRldiA9IGdldF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKKwlpZiAoIXNjc2lfZGggfHwgIWRldiB8fAogCSAgICBzZGV2LT5zZGV2X3N0YXRlID09IFNERVZfQ0FOQ0VMIHx8CiAJICAgIHNkZXYtPnNkZXZfc3RhdGUgPT0gU0RFVl9ERUwpCiAJCWVyciA9IFNDU0lfREhfTk9TWVM7CkBAIC00MTAsMTIgKzQxMiwxMyBAQAogCWlmIChlcnIpIHsKIAkJaWYgKGZuKQogCQkJZm4oZGF0YSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKHNjc2lfZGgtPmFjdGl2YXRlKQogCQllcnIgPSBzY3NpX2RoLT5hY3RpdmF0ZShzZGV2LCBmbiwgZGF0YSk7Ci0JcHV0X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOworb3V0OgorCXB1dF9kZXZpY2UoZGV2KTsKIAlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2NzaV9kaF9hY3RpdmF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9hbHVhLmMgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9hbHVhLmMKaW5kZXggNDJmZTUyOS4uNmZlYzlmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2FsdWEuYwpAQCAtNzgyLDcgKzc4Miw3IEBACiAJaC0+c2RldiA9IHNkZXY7CiAKIAllcnIgPSBhbHVhX2luaXRpYWxpemUoc2RldiwgaCk7Ci0JaWYgKGVyciAhPSBTQ1NJX0RIX09LKQorCWlmICgoZXJyICE9IFNDU0lfREhfT0spICYmIChlcnIgIT0gU0NTSV9ESF9ERVZfT0ZGTElORUQpKQogCQlnb3RvIGZhaWxlZDsKIAogCWlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jCmluZGV4IDI5M2MxODMuLmU3ZmM3MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYworKysgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMKQEAgLTE4MiwxNCArMTgyLDI0IEBACiAJc3RydWN0IHJkYWNfY29udHJvbGxlcgkqY3RscjsKICNkZWZpbmUgVU5JTklUSUFMSVpFRF9MVU4JKDEgPDwgOCkKIAl1bnNpZ25lZAkJbHVuOworCisjZGVmaW5lIFJEQUNfTU9ERQkJMAorI2RlZmluZSBSREFDX01PREVfQVZUCQkxCisjZGVmaW5lIFJEQUNfTU9ERV9JT1NISVAJMgorCXVuc2lnbmVkIGNoYXIJCW1vZGU7CisKICNkZWZpbmUgUkRBQ19TVEFURV9BQ1RJVkUJMAogI2RlZmluZSBSREFDX1NUQVRFX1BBU1NJVkUJMQogCXVuc2lnbmVkIGNoYXIJCXN0YXRlOwogCiAjZGVmaW5lIFJEQUNfTFVOX1VOT1dORUQJMAogI2RlZmluZSBSREFDX0xVTl9PV05FRAkJMQotI2RlZmluZSBSREFDX0xVTl9BVlQJCTIKIAljaGFyCQkJbHVuX3N0YXRlOworCisjZGVmaW5lIFJEQUNfUFJFRkVSUkVECQkwCisjZGVmaW5lIFJEQUNfTk9OX1BSRUZFUlJFRAkxCisJY2hhcgkJCXByZWZlcnJlZDsKKwogCXVuc2lnbmVkIGNoYXIJCXNlbnNlW1NDU0lfU0VOU0VfQlVGRkVSU0laRV07CiAJdW5pb24JCQl7CiAJCXN0cnVjdCBjMl9pbnF1aXJ5IGMyOwpAQCAtMTk5LDExICsyMDksMTUgQEAKIAl9IGlucTsKIH07CiAKK3N0YXRpYyBjb25zdCBjaGFyICptb2RlW10gPSB7CisJIlJEQUMiLAorCSJBVlQiLAorCSJJT1NISVAiLAorfTsKIHN0YXRpYyBjb25zdCBjaGFyICpsdW5fc3RhdGVbXSA9CiB7CiAJInVub3duZWQiLAogCSJvd25lZCIsCi0JIm93bmVkIChBVlQgbW9kZSkiLAogfTsKIAogc3RydWN0IHJkYWNfcXVldWVfZGF0YSB7CkBAIC00NTgsMjUgKzQ3MiwzMyBAQAogCWludCBlcnI7CiAJc3RydWN0IGM5X2lucXVpcnkgKmlucXA7CiAKLQloLT5sdW5fc3RhdGUgPSBSREFDX0xVTl9VTk9XTkVEOwogCWgtPnN0YXRlID0gUkRBQ19TVEFURV9BQ1RJVkU7CiAJZXJyID0gc3VibWl0X2lucXVpcnkoc2RldiwgMHhDOSwgc2l6ZW9mKHN0cnVjdCBjOV9pbnF1aXJ5KSwgaCk7CiAJaWYgKGVyciA9PSBTQ1NJX0RIX09LKSB7CiAJCWlucXAgPSAmaC0+aW5xLmM5OwotCQlpZiAoKGlucXAtPmF2dGVfY3ZwID4+IDcpID09IDB4MSkgewotCQkJLyogTFVOIGluIEFWVCBtb2RlICovCi0JCQlzZGV2X3ByaW50ayhLRVJOX05PVElDRSwgc2RldiwKLQkJCQkgICAgIiVzOiBBVlQgbW9kZSBkZXRlY3RlZFxuIiwKLQkJCQkgICAgUkRBQ19OQU1FKTsKLQkJCWgtPmx1bl9zdGF0ZSA9IFJEQUNfTFVOX0FWVDsKLQkJfSBlbHNlIGlmICgoaW5xcC0+YXZ0ZV9jdnAgJiAweDEpICE9IDApIHsKLQkJCS8qIExVTiB3YXMgb3duZWQgYnkgdGhlIGNvbnRyb2xsZXIgKi8KLQkJCWgtPmx1bl9zdGF0ZSA9IFJEQUNfTFVOX09XTkVEOwotCQl9Ci0JfQorCQkvKiBkZXRlY3QgdGhlIG9wZXJhdGluZyBtb2RlICovCisJCWlmICgoaW5xcC0+YXZ0ZV9jdnAgPj4gNSkgJiAweDEpCisJCQloLT5tb2RlID0gUkRBQ19NT0RFX0lPU0hJUDsgLyogTFVOIGluIElPU0hJUCBtb2RlICovCisJCWVsc2UgaWYgKGlucXAtPmF2dGVfY3ZwID4+IDcpCisJCQloLT5tb2RlID0gUkRBQ19NT0RFX0FWVDsgLyogTFVOIGluIEFWVCBtb2RlICovCisJCWVsc2UKKwkJCWgtPm1vZGUgPSBSREFDX01PREU7IC8qIExVTiBpbiBSREFDIG1vZGUgKi8KIAotCWlmIChoLT5sdW5fc3RhdGUgPT0gUkRBQ19MVU5fVU5PV05FRCkKLQkJaC0+c3RhdGUgPSBSREFDX1NUQVRFX1BBU1NJVkU7CisJCS8qIFVwZGF0ZSBvd25lcnNoaXAgKi8KKwkJaWYgKGlucXAtPmF2dGVfY3ZwICYgMHgxKQorCQkJaC0+bHVuX3N0YXRlID0gUkRBQ19MVU5fT1dORUQ7CisJCWVsc2UgeworCQkJaC0+bHVuX3N0YXRlID0gUkRBQ19MVU5fVU5PV05FRDsKKwkJCWlmIChoLT5tb2RlID09IFJEQUNfTU9ERSkKKwkJCQloLT5zdGF0ZSA9IFJEQUNfU1RBVEVfUEFTU0lWRTsKKwkJfQorCisJCS8qIFVwZGF0ZSBwYXRoIHByaW8qLworCQlpZiAoaW5xcC0+cGF0aF9wcmlvICYgMHgxKQorCQkJaC0+cHJlZmVycmVkID0gUkRBQ19QUkVGRVJSRUQ7CisJCWVsc2UKKwkJCWgtPnByZWZlcnJlZCA9IFJEQUNfTk9OX1BSRUZFUlJFRDsKKwl9CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtNjQ4LDEyICs2NzAsMjcgQEAKIHsKIAlzdHJ1Y3QgcmRhY19kaF9kYXRhICpoID0gZ2V0X3JkYWNfZGF0YShzZGV2KTsKIAlpbnQgZXJyID0gU0NTSV9ESF9PSzsKKwlpbnQgYWN0ID0gMDsKIAogCWVyciA9IGNoZWNrX293bmVyc2hpcChzZGV2LCBoKTsKIAlpZiAoZXJyICE9IFNDU0lfREhfT0spCiAJCWdvdG8gZG9uZTsKIAotCWlmIChoLT5sdW5fc3RhdGUgPT0gUkRBQ19MVU5fVU5PV05FRCkgeworCXN3aXRjaCAoaC0+bW9kZSkgeworCWNhc2UgUkRBQ19NT0RFOgorCQlpZiAoaC0+bHVuX3N0YXRlID09IFJEQUNfTFVOX1VOT1dORUQpCisJCQlhY3QgPSAxOworCQlicmVhazsKKwljYXNlIFJEQUNfTU9ERV9JT1NISVA6CisJCWlmICgoaC0+bHVuX3N0YXRlID09IFJEQUNfTFVOX1VOT1dORUQpICYmCisJCSAgICAoaC0+cHJlZmVycmVkID09IFJEQUNfUFJFRkVSUkVEKSkKKwkJCWFjdCA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChhY3QpIHsKIAkJZXJyID0gcXVldWVfbW9kZV9zZWxlY3Qoc2RldiwgZm4sIGRhdGEpOwogCQlpZiAoZXJyID09IFNDU0lfREhfT0spCiAJCQlyZXR1cm4gMDsKQEAgLTgzNiw4ICs4NzMsOSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfbG9jaywgZmxhZ3MpOwogCiAJc2Rldl9wcmludGsoS0VSTl9OT1RJQ0UsIHNkZXYsCi0JCSAgICAiJXM6IExVTiAlZCAoJXMpXG4iLAotCQkgICAgUkRBQ19OQU1FLCBoLT5sdW4sIGx1bl9zdGF0ZVsoaW50KWgtPmx1bl9zdGF0ZV0pOworCQkgICAgIiVzOiBMVU4gJWQgKCVzKSAoJXMpXG4iLAorCQkgICAgUkRBQ19OQU1FLCBoLT5sdW4sIG1vZGVbKGludCloLT5tb2RlXSwKKwkJICAgIGx1bl9zdGF0ZVsoaW50KWgtPmx1bl9zdGF0ZV0pOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMgYi9kcml2ZXJzL3Njc2kvZHB0X2kyby5jCmluZGV4IGNmZmNiMTAuLmI0ZjZjOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMKKysrIGIvZHJpdmVycy9zY3NpL2RwdF9pMm8uYwpAQCAtNzgwLDcgKzc4MCw3IEBACiAJCXJldHVybiBGQUlMRUQ7CiAJfQogCXBIYmEgPSAoYWRwdF9oYmEqKSBjbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGFbMF07Ci0JcHJpbnRrKEtFUk5fSU5GTyIlczogVHJ5aW5nIHRvIEFib3J0IGNtZD0lbGRcbiIscEhiYS0+bmFtZSwgY21kLT5zZXJpYWxfbnVtYmVyKTsKKwlwcmludGsoS0VSTl9JTkZPIiVzOiBUcnlpbmcgdG8gQWJvcnRcbiIscEhiYS0+bmFtZSk7CiAJaWYgKChkcHRkZXZpY2UgPSAodm9pZCopIChjbWQtPmRldmljZS0+aG9zdGRhdGEpKSA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IFVuYWJsZSB0byBhYm9ydDogTm8gZGV2aWNlIGluIGNtbmRcbiIscEhiYS0+bmFtZSk7CiAJCXJldHVybiBGQUlMRUQ7CkBAIC04MDIsMTAgKzgwMiwxMCBAQAogCQkJcHJpbnRrKEtFUk5fSU5GTyIlczogQWJvcnQgY21kIG5vdCBzdXBwb3J0ZWRcbiIscEhiYS0+bmFtZSk7CiAJCQlyZXR1cm4gRkFJTEVEOwogCQl9Ci0JCXByaW50ayhLRVJOX0lORk8iJXM6IEFib3J0IGNtZD0lbGQgZmFpbGVkLlxuIixwSGJhLT5uYW1lLCBjbWQtPnNlcmlhbF9udW1iZXIpOworCQlwcmludGsoS0VSTl9JTkZPIiVzOiBBYm9ydCBmYWlsZWQuXG4iLHBIYmEtPm5hbWUpOwogCQlyZXR1cm4gRkFJTEVEOwogCX0gCi0JcHJpbnRrKEtFUk5fSU5GTyIlczogQWJvcnQgY21kPSVsZCBjb21wbGV0ZS5cbiIscEhiYS0+bmFtZSwgY21kLT5zZXJpYWxfbnVtYmVyKTsKKwlwcmludGsoS0VSTl9JTkZPIiVzOiBBYm9ydCBjb21wbGV0ZS5cbiIscEhiYS0+bmFtZSk7CiAJcmV0dXJuIFNVQ0NFU1M7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9lYXRhLmMgYi9kcml2ZXJzL3Njc2kvZWF0YS5jCmluZGV4IDBlYjRmZTYuLjk0ZGU4ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9lYXRhLmMKKysrIGIvZHJpdmVycy9zY3NpL2VhdGEuYwpAQCAtMTc2Niw4ICsxNzY2LDggQEAKIAlzdHJ1Y3QgbXNjcCAqY3BwOwogCiAJaWYgKFNDcG50LT5ob3N0X3NjcmliYmxlKQotCQlwYW5pYygiJXM6IHFjb21tLCBwaWQgJWxkLCBTQ3BudCAlcCBhbHJlYWR5IGFjdGl2ZS5cbiIsCi0JCSAgICAgIGhhLT5ib2FyZF9uYW1lLCBTQ3BudC0+c2VyaWFsX251bWJlciwgU0NwbnQpOworCQlwYW5pYygiJXM6IHFjb21tLCBTQ3BudCAlcCBhbHJlYWR5IGFjdGl2ZS5cbiIsCisJCSAgICAgIGhhLT5ib2FyZF9uYW1lLCBTQ3BudCk7CiAKIAkvKiBpIGlzIHRoZSBtYWlsYm94IG51bWJlciwgbG9vayBmb3IgdGhlIGZpcnN0IGZyZWUgbWFpbGJveAogCSAgIHN0YXJ0aW5nIGZyb20gbGFzdF9jcF91c2VkICovCkBAIC0xODAxLDcgKzE4MDEsNyBAQAogCiAJaWYgKGRvX3RyYWNlKQogCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIFNDcG50LAotCQkJInFjb21tLCBtYm94ICVkLCBwaWQgJWxkLlxuIiwgaSwgU0NwbnQtPnNlcmlhbF9udW1iZXIpOworCQkJInFjb21tLCBtYm94ICVkLlxuIiwgaSk7CiAKIAljcHAtPnJlcXNlbiA9IDE7CiAJY3BwLT5kaXNwcmkgPSAxOwpAQCAtMTgzMyw4ICsxODMzLDcgQEAKIAlpZiAoZG9fZG1hKHNob3N0LT5pb19wb3J0LCBjcHAtPmNwX2RtYV9hZGRyLCBTRU5EX0NQX0RNQSkpIHsKIAkJdW5tYXBfZG1hKGksIGhhKTsKIAkJU0NwbnQtPmhvc3Rfc2NyaWJibGUgPSBOVUxMOwotCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIFNDcG50LAotCQkJInFjb21tLCBwaWQgJWxkLCBhZGFwdGVyIGJ1c3kuXG4iLCBTQ3BudC0+c2VyaWFsX251bWJlcik7CisJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgU0NwbnQsICJxY29tbSwgYWRhcHRlciBidXN5LlxuIik7CiAJCXJldHVybiAxOwogCX0KIApAQCAtMTg1MSwxNCArMTg1MCwxMiBAQAogCXVuc2lnbmVkIGludCBpOwogCiAJaWYgKFNDYXJnLT5ob3N0X3NjcmliYmxlID09IE5VTEwpIHsKLQkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBTQ2FyZywKLQkJCSJhYm9ydCwgcGlkICVsZCBpbmFjdGl2ZS5cbiIsIFNDYXJnLT5zZXJpYWxfbnVtYmVyKTsKKwkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBTQ2FyZywgImFib3J0LCBjbWQgaW5hY3RpdmUuXG4iKTsKIAkJcmV0dXJuIFNVQ0NFU1M7CiAJfQogCiAJaSA9ICoodW5zaWduZWQgaW50ICopU0NhcmctPmhvc3Rfc2NyaWJibGU7Ci0Jc2NtZF9wcmludGsoS0VSTl9XQVJOSU5HLCBTQ2FyZywKLQkJImFib3J0LCBtYm94ICVkLCBwaWQgJWxkLlxuIiwgaSwgU0NhcmctPnNlcmlhbF9udW1iZXIpOworCXNjbWRfcHJpbnRrKEtFUk5fV0FSTklORywgU0NhcmcsICJhYm9ydCwgbWJveCAlZC5cbiIsIGkpOwogCiAJaWYgKGkgPj0gc2hvc3QtPmNhbl9xdWV1ZSkKIAkJcGFuaWMoIiVzOiBhYm9ydCwgaW52YWxpZCBTQ2FyZy0+aG9zdF9zY3JpYmJsZS5cbiIsIGhhLT5ib2FyZF9uYW1lKTsKQEAgLTE5MDIsOCArMTg5OSw4IEBACiAJCVNDYXJnLT5yZXN1bHQgPSBESURfQUJPUlQgPDwgMTY7CiAJCVNDYXJnLT5ob3N0X3NjcmliYmxlID0gTlVMTDsKIAkJaGEtPmNwX3N0YXRbaV0gPSBGUkVFOwotCQlwcmludGsoIiVzLCBhYm9ydCwgbWJveCAlZCByZWFkeSwgRElEX0FCT1JULCBwaWQgJWxkIGRvbmUuXG4iLAotCQkgICAgICAgaGEtPmJvYXJkX25hbWUsIGksIFNDYXJnLT5zZXJpYWxfbnVtYmVyKTsKKwkJcHJpbnRrKCIlcywgYWJvcnQsIG1ib3ggJWQgcmVhZHksIERJRF9BQk9SVCwgZG9uZS5cbiIsCisJCSAgICAgICBoYS0+Ym9hcmRfbmFtZSwgaSk7CiAJCVNDYXJnLT5zY3NpX2RvbmUoU0NhcmcpOwogCQlyZXR1cm4gU1VDQ0VTUzsKIAl9CkBAIC0xOTE5LDEzICsxOTE2LDEyIEBACiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBTQ2FyZy0+ZGV2aWNlLT5ob3N0OwogCXN0cnVjdCBob3N0ZGF0YSAqaGEgPSAoc3RydWN0IGhvc3RkYXRhICopc2hvc3QtPmhvc3RkYXRhOwogCi0Jc2NtZF9wcmludGsoS0VSTl9JTkZPLCBTQ2FyZywKLQkJInJlc2V0LCBlbnRlciwgcGlkICVsZC5cbiIsIFNDYXJnLT5zZXJpYWxfbnVtYmVyKTsKKwlzY21kX3ByaW50ayhLRVJOX0lORk8sIFNDYXJnLCAicmVzZXQsIGVudGVyLlxuIik7CiAKIAlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCiAJaWYgKFNDYXJnLT5ob3N0X3NjcmliYmxlID09IE5VTEwpCi0JCXByaW50aygiJXM6IHJlc2V0LCBwaWQgJWxkIGluYWN0aXZlLlxuIiwgaGEtPmJvYXJkX25hbWUsIFNDYXJnLT5zZXJpYWxfbnVtYmVyKTsKKwkJcHJpbnRrKCIlczogcmVzZXQsIGluYWN0aXZlLlxuIiwgaGEtPmJvYXJkX25hbWUpOwogCiAJaWYgKGhhLT5pbl9yZXNldCkgewogCQlwcmludGsoIiVzOiByZXNldCwgZXhpdCwgYWxyZWFkeSBpbiByZXNldC5cbiIsIGhhLT5ib2FyZF9uYW1lKTsKQEAgLTE5NjQsMTQgKzE5NjAsMTQgQEAKIAogCQlpZiAoaGEtPmNwX3N0YXRbaV0gPT0gUkVBRFkgfHwgaGEtPmNwX3N0YXRbaV0gPT0gQUJPUlRJTkcpIHsKIAkJCWhhLT5jcF9zdGF0W2ldID0gQUJPUlRJTkc7Ci0JCQlwcmludGsoIiVzOiByZXNldCwgbWJveCAlZCBhYm9ydGluZywgcGlkICVsZC5cbiIsCi0JCQkgICAgICAgaGEtPmJvYXJkX25hbWUsIGksIFNDcG50LT5zZXJpYWxfbnVtYmVyKTsKKwkJCXByaW50aygiJXM6IHJlc2V0LCBtYm94ICVkIGFib3J0aW5nLlxuIiwKKwkJCSAgICAgICBoYS0+Ym9hcmRfbmFtZSwgaSk7CiAJCX0KIAogCQllbHNlIHsKIAkJCWhhLT5jcF9zdGF0W2ldID0gSU5fUkVTRVQ7Ci0JCQlwcmludGsoIiVzOiByZXNldCwgbWJveCAlZCBpbiByZXNldCwgcGlkICVsZC5cbiIsCi0JCQkgICAgICAgaGEtPmJvYXJkX25hbWUsIGksIFNDcG50LT5zZXJpYWxfbnVtYmVyKTsKKwkJCXByaW50aygiJXM6IHJlc2V0LCBtYm94ICVkIGluIHJlc2V0LlxuIiwKKwkJCSAgICAgICBoYS0+Ym9hcmRfbmFtZSwgaSk7CiAJCX0KIAogCQlpZiAoU0NwbnQtPmhvc3Rfc2NyaWJibGUgPT0gTlVMTCkKQEAgLTIwMjUsOCArMjAyMSw4IEBACiAJCQloYS0+Y3Bfc3RhdFtpXSA9IExPQ0tFRDsKIAogCQkJcHJpbnRrCi0JCQkgICAgKCIlcywgcmVzZXQsIG1ib3ggJWQgbG9ja2VkLCBESURfUkVTRVQsIHBpZCAlbGQgZG9uZS5cbiIsCi0JCQkgICAgIGhhLT5ib2FyZF9uYW1lLCBpLCBTQ3BudC0+c2VyaWFsX251bWJlcik7CisJCQkgICAgKCIlcywgcmVzZXQsIG1ib3ggJWQgbG9ja2VkLCBESURfUkVTRVQsIGRvbmUuXG4iLAorCQkJICAgICBoYS0+Ym9hcmRfbmFtZSwgaSk7CiAJCX0KIAogCQllbHNlIGlmIChoYS0+Y3Bfc3RhdFtpXSA9PSBBQk9SVElORykgewpAQCAtMjAzOSw4ICsyMDM1LDggQEAKIAkJCWhhLT5jcF9zdGF0W2ldID0gRlJFRTsKIAogCQkJcHJpbnRrCi0JCQkgICAgKCIlcywgcmVzZXQsIG1ib3ggJWQgYWJvcnRpbmcsIERJRF9SRVNFVCwgcGlkICVsZCBkb25lLlxuIiwKLQkJCSAgICAgaGEtPmJvYXJkX25hbWUsIGksIFNDcG50LT5zZXJpYWxfbnVtYmVyKTsKKwkJCSAgICAoIiVzLCByZXNldCwgbWJveCAlZCBhYm9ydGluZywgRElEX1JFU0VULCBkb25lLlxuIiwKKwkJCSAgICAgaGEtPmJvYXJkX25hbWUsIGkpOwogCQl9CiAKIAkJZWxzZQpAQCAtMjA1NCw3ICsyMDUwLDcgQEAKIAlkb190cmFjZSA9IDA7CiAKIAlpZiAoYXJnX2RvbmUpCi0JCXByaW50aygiJXM6IHJlc2V0LCBleGl0LCBwaWQgJWxkIGRvbmUuXG4iLCBoYS0+Ym9hcmRfbmFtZSwgU0NhcmctPnNlcmlhbF9udW1iZXIpOworCQlwcmludGsoIiVzOiByZXNldCwgZXhpdCwgZG9uZS5cbiIsIGhhLT5ib2FyZF9uYW1lKTsKIAllbHNlCiAJCXByaW50aygiJXM6IHJlc2V0LCBleGl0LlxuIiwgaGEtPmJvYXJkX25hbWUpOwogCkBAIC0yMjM4LDEwICsyMjM0LDEwIEBACiAJCQljcHAgPSAmaGEtPmNwW2tdOwogCQkJU0NwbnQgPSBjcHAtPlNDcG50OwogCQkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBTQ3BudCwKLQkJCSAgICAiJXMgcGlkICVsZCBtYiAlZCBmYyAlZCBuciAlZCBzZWMgJWxkIG5zICV1IgorCQkJICAgICIlcyBtYiAlZCBmYyAlZCBuciAlZCBzZWMgJWxkIG5zICV1IgogCQkJICAgICAiIGN1ciAlbGQgczolYyByOiVjIHJldjolYyBpbjolYyBvdjolYyB4ZCAlZC5cbiIsCiAJCQkgICAgIChpaGRsciA/ICJpaGRsciIgOiAicWNvbW0iKSwKLQkJCSAgICAgU0NwbnQtPnNlcmlhbF9udW1iZXIsIGssIGZsdXNoY291bnQsCisJCQkgICAgIGssIGZsdXNoY291bnQsCiAJCQkgICAgIG5fcmVhZHksIGJsa19ycV9wb3MoU0NwbnQtPnJlcXVlc3QpLAogCQkJICAgICBibGtfcnFfc2VjdG9ycyhTQ3BudC0+cmVxdWVzdCksIGN1cnNlYywgWUVTTk8ocyksCiAJCQkgICAgIFlFU05PKHIpLCBZRVNOTyhyZXYpLCBZRVNOTyhpbnB1dF9vbmx5KSwKQEAgLTIyODUsMTAgKzIyODEsMTAgQEAKIAogCQlpZiAoZG9fZG1hKGRldi0+aG9zdC0+aW9fcG9ydCwgY3BwLT5jcF9kbWFfYWRkciwgU0VORF9DUF9ETUEpKSB7CiAJCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIFNDcG50LAotCQkJICAgICIlcywgcGlkICVsZCwgbWJveCAlZCwgYWRhcHRlciIKKwkJCSAgICAiJXMsIG1ib3ggJWQsIGFkYXB0ZXIiCiAJCQkgICAgICIgYnVzeSwgd2lsbCBhYm9ydC5cbiIsCiAJCQkgICAgIChpaGRsciA/ICJpaGRsciIgOiAicWNvbW0iKSwKLQkJCSAgICAgU0NwbnQtPnNlcmlhbF9udW1iZXIsIGspOworCQkJICAgICBrKTsKIAkJCWhhLT5jcF9zdGF0W2tdID0gQUJPUlRJTkc7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMjM5OCwxMiArMjM5NCwxMiBAQAogCQlwYW5pYygiJXM6IGloZGxyLCBtYm94ICVkLCBTQ3BudCA9PSBOVUxMLlxuIiwgaGEtPmJvYXJkX25hbWUsIGkpOwogCiAJaWYgKFNDcG50LT5ob3N0X3NjcmliYmxlID09IE5VTEwpCi0JCXBhbmljKCIlczogaWhkbHIsIG1ib3ggJWQsIHBpZCAlbGQsIFNDcG50ICVwIGdhcmJsZWQuXG4iLCBoYS0+Ym9hcmRfbmFtZSwKLQkJICAgICAgaSwgU0NwbnQtPnNlcmlhbF9udW1iZXIsIFNDcG50KTsKKwkJcGFuaWMoIiVzOiBpaGRsciwgbWJveCAlZCwgU0NwbnQgJXAgZ2FyYmxlZC5cbiIsIGhhLT5ib2FyZF9uYW1lLAorCQkgICAgICBpLCBTQ3BudCk7CiAKIAlpZiAoKih1bnNpZ25lZCBpbnQgKilTQ3BudC0+aG9zdF9zY3JpYmJsZSAhPSBpKQotCQlwYW5pYygiJXM6IGloZGxyLCBtYm94ICVkLCBwaWQgJWxkLCBpbmRleCBtaXNtYXRjaCAlZC5cbiIsCi0JCSAgICAgIGhhLT5ib2FyZF9uYW1lLCBpLCBTQ3BudC0+c2VyaWFsX251bWJlciwKKwkJcGFuaWMoIiVzOiBpaGRsciwgbWJveCAlZCwgaW5kZXggbWlzbWF0Y2ggJWQuXG4iLAorCQkgICAgICBoYS0+Ym9hcmRfbmFtZSwgaSwKIAkJICAgICAgKih1bnNpZ25lZCBpbnQgKilTQ3BudC0+aG9zdF9zY3JpYmJsZSk7CiAKIAlzeW5jX2RtYShpLCBoYSk7CkBAIC0yNDQ5LDExICsyNDQ1LDExIEBACiAJCWlmIChzcHAtPnRhcmdldF9zdGF0dXMgJiYgU0NwbnQtPmRldmljZS0+dHlwZSA9PSBUWVBFX0RJU0sgJiYKIAkJICAgICghKHRzdGF0dXMgPT0gQ0hFQ0tfQ09ORElUSU9OICYmIGhhLT5pb2NvdW50IDw9IDEwMDAgJiYKIAkJICAgICAgIChTQ3BudC0+c2Vuc2VfYnVmZmVyWzJdICYgMHhmKSA9PSBOT1RfUkVBRFkpKSkKLQkJCXByaW50aygiJXM6IGloZGxyLCB0YXJnZXQgJWQuJWQ6JWQsIHBpZCAlbGQsICIKKwkJCXByaW50aygiJXM6IGloZGxyLCB0YXJnZXQgJWQuJWQ6JWQsICIKIAkJCSAgICAgICAidGFyZ2V0X3N0YXR1cyAweCV4LCBzZW5zZSBrZXkgMHgleC5cbiIsCiAJCQkgICAgICAgaGEtPmJvYXJkX25hbWUsCiAJCQkgICAgICAgU0NwbnQtPmRldmljZS0+Y2hhbm5lbCwgU0NwbnQtPmRldmljZS0+aWQsCi0JCQkgICAgICAgU0NwbnQtPmRldmljZS0+bHVuLCBTQ3BudC0+c2VyaWFsX251bWJlciwKKwkJCSAgICAgICBTQ3BudC0+ZGV2aWNlLT5sdW4sCiAJCQkgICAgICAgc3BwLT50YXJnZXRfc3RhdHVzLCBTQ3BudC0+c2Vuc2VfYnVmZmVyWzJdKTsKIAogCQloYS0+dGFyZ2V0X3RvW1NDcG50LT5kZXZpY2UtPmlkXVtTQ3BudC0+ZGV2aWNlLT5jaGFubmVsXSA9IDA7CkBAIC0yNTIyLDkgKzI1MTgsOSBAQAogCSAgICBkb190cmFjZSB8fCBtc2dfYnl0ZShzcHAtPnRhcmdldF9zdGF0dXMpKQogI2VuZGlmCiAJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgU0NwbnQsICJpaGRsciwgbWJveCAlMmQsIGVyciAweCV4OiV4LCIKLQkJICAgICAgICIgcGlkICVsZCwgcmVnIDB4JXgsIGNvdW50ICVkLlxuIiwKKwkJICAgICAgICIgcmVnIDB4JXgsIGNvdW50ICVkLlxuIiwKIAkJICAgICAgIGksIHNwcC0+YWRhcHRlcl9zdGF0dXMsIHNwcC0+dGFyZ2V0X3N0YXR1cywKLQkJICAgICAgIFNDcG50LT5zZXJpYWxfbnVtYmVyLCByZWcsIGhhLT5pb2NvdW50KTsKKwkJICAgICAgIHJlZywgaGEtPmlvY291bnQpOwogCiAJdW5tYXBfZG1hKGksIGhhKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2VhdGFfcGlvLmMgYi9kcml2ZXJzL3Njc2kvZWF0YV9waW8uYwppbmRleCA0YTk2NDFlLi5kNWY4MzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZWF0YV9waW8uYworKysgYi9kcml2ZXJzL3Njc2kvZWF0YV9waW8uYwpAQCAtMzcyLDggKzM3Miw3IEBACiAJY3AtPnN0YXR1cyA9IFVTRUQ7CS8qIGNsYWltIGZyZWUgc2xvdCAqLwogCiAJREJHKERCR19RVUVVRSwgc2NtZF9wcmludGsoS0VSTl9ERUJVRywgY21kLAotCQkiZWF0YV9waW9fcXVldWUgcGlkICVsZCwgeSAlZFxuIiwKLQkJY21kLT5zZXJpYWxfbnVtYmVyLCB5KSk7CisJCSJlYXRhX3Bpb19xdWV1ZSAweCVwLCB5ICVkXG4iLCBjbWQsIHkpKTsKIAogCWNtZC0+c2NzaV9kb25lID0gKHZvaWQgKikgZG9uZTsKIApAQCAtNDE3LDggKzQxNiw4IEBACiAJaWYgKGVhdGFfcGlvX3NlbmRfY29tbWFuZChiYXNlLCBFQVRBX0NNRF9QSU9fU0VORF9DUCkpIHsKIAkJY21kLT5yZXN1bHQgPSBESURfQlVTX0JVU1kgPDwgMTY7CiAJCXNjbWRfcHJpbnRrKEtFUk5fTk9USUNFLCBjbWQsCi0JCQkiZWF0YV9waW9fcXVldWUgcGlkICVsZCwgSEJBIGJ1c3ksICIKLQkJCSJyZXR1cm5pbmcgRElEX0JVU19CVVNZLCBkb25lLlxuIiwgY21kLT5zZXJpYWxfbnVtYmVyKTsKKwkJCSJlYXRhX3Bpb19xdWV1ZSBwaWQgMHglcCwgSEJBIGJ1c3ksICIKKwkJCSJyZXR1cm5pbmcgRElEX0JVU19CVVNZLCBkb25lLlxuIiwgY21kKTsKIAkJZG9uZShjbWQpOwogCQljcC0+c3RhdHVzID0gRlJFRTsKIAkJcmV0dXJuIDA7CkBAIC00MzIsOCArNDMxLDggQEAKIAkJb3V0dygwLCBiYXNlICsgSEFfUkRBVEEpOwogCiAJREJHKERCR19RVUVVRSwgc2NtZF9wcmludGsoS0VSTl9ERUJVRywgY21kLAotCQkiUXVldWVkIGJhc2UgJSMuNGx4IHBpZDogJWxkICIKLQkJInNsb3QgJWQgaXJxICVkXG4iLCBzaC0+YmFzZSwgY21kLT5zZXJpYWxfbnVtYmVyLCB5LCBzaC0+aXJxKSk7CisJCSJRdWV1ZWQgYmFzZSAlIy40bHggY21kOiAweCVwICIKKwkJInNsb3QgJWQgaXJxICVkXG4iLCBzaC0+YmFzZSwgY21kLCB5LCBzaC0+aXJxKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ0NSw4ICs0NDQsNyBAQAogCXVuc2lnbmVkIGludCBsb29wID0gMTAwOwogCiAJREJHKERCR19BQk5PUk0sIHNjbWRfcHJpbnRrKEtFUk5fV0FSTklORywgY21kLAotCQkiZWF0YV9waW9fYWJvcnQgY2FsbGVkIHBpZDogJWxkXG4iLAotCQljbWQtPnNlcmlhbF9udW1iZXIpKTsKKwkJImVhdGFfcGlvX2Fib3J0IGNhbGxlZCBwaWQ6IDB4JXBcbiIsIGNtZCkpOwogCiAJd2hpbGUgKGluYihjbWQtPmRldmljZS0+aG9zdC0+YmFzZSArIEhBX1JBVVhTVEFUKSAmIEhBX0FCVVNZKQogCQlpZiAoLS1sb29wID09IDApIHsKQEAgLTQ4MSw4ICs0NzksNyBAQAogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBjbWQtPmRldmljZS0+aG9zdDsKIAogCURCRyhEQkdfQUJOT1JNLCBzY21kX3ByaW50ayhLRVJOX1dBUk5JTkcsIGNtZCwKLQkJImVhdGFfcGlvX3Jlc2V0IGNhbGxlZCBwaWQ6JWxkXG4iLAotCQljbWQtPnNlcmlhbF9udW1iZXIpKTsKKwkJImVhdGFfcGlvX3Jlc2V0IGNhbGxlZFxuIikpOwogCiAJc3Bpbl9sb2NrX2lycShob3N0LT5ob3N0X2xvY2spOwogCkBAIC01MDEsNyArNDk4LDcgQEAKIAogCQlzcCA9IEhEKGNtZCktPmNjYlt4XS5jbWQ7CiAJCUhEKGNtZCktPmNjYlt4XS5zdGF0dXMgPSBSRVNFVDsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiZWF0YV9waW9fcmVzZXQ6IHNsb3QgJWQgaW4gcmVzZXQsIHBpZCAlbGQuXG4iLCB4LCBzcC0+c2VyaWFsX251bWJlcik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImVhdGFfcGlvX3Jlc2V0OiBzbG90ICVkIGluIHJlc2V0LlxuIiwgeCk7CiAKIAkJaWYgKHNwID09IE5VTEwpCiAJCQlwYW5pYygiZWF0YV9waW9fcmVzZXQ6IHNsb3QgJWQsIHNwPT1OVUxMLlxuIiwgeCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZXNwX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5jCmluZGV4IDU3NTU4NTIuLjlhMWFmMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9lc3Bfc2NzaS5jCkBAIC03MDgsOCArNzA4LDcgQEAKIAl0cCA9ICZlc3AtPnRhcmdldFt0Z3RdOwogCWxwID0gZGV2LT5ob3N0ZGF0YTsKIAotCWxpc3RfZGVsKCZlbnQtPmxpc3QpOwotCWxpc3RfYWRkKCZlbnQtPmxpc3QsICZlc3AtPmFjdGl2ZV9jbWRzKTsKKwlsaXN0X21vdmUoJmVudC0+bGlzdCwgJmVzcC0+YWN0aXZlX2NtZHMpOwogCiAJZXNwLT5hY3RpdmVfY21kID0gZW50OwogCkBAIC0xMjQ0LDggKzEyNDMsNyBAQAogCQkvKiBOb3cgdGhhdCB0aGUgc3RhdGUgaXMgdW53b3VuZCBwcm9wZXJseSwgcHV0IGJhY2sgb250bwogCQkgKiB0aGUgaXNzdWUgcXVldWUuICBUaGlzIGNvbW1hbmQgaXMgbm8gbG9uZ2VyIGFjdGl2ZS4KIAkJICovCi0JCWxpc3RfZGVsKCZlbnQtPmxpc3QpOwotCQlsaXN0X2FkZCgmZW50LT5saXN0LCAmZXNwLT5xdWV1ZWRfY21kcyk7CisJCWxpc3RfbW92ZSgmZW50LT5saXN0LCAmZXNwLT5xdWV1ZWRfY21kcyk7CiAJCWVzcC0+YWN0aXZlX2NtZCA9IE5VTEw7CiAKIAkJLyogUmV0dXJuIHZhbHVlIGlnbm9yZWQgYnkgY2FsbGVyLCBpdCBkaXJlY3RseSBpbnZva2VzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZmNvZS9mY29lLmMgYi9kcml2ZXJzL3Njc2kvZmNvZS9mY29lLmMKaW5kZXggYmRlNmVlNS4uY2MyM2JkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2UuYwpAQCAtMzgxLDQ5ICszODEsNiBAQAogfQogCiAvKioKLSAqIGZjb2VfaW50ZXJmYWNlX2NsZWFudXAoKSAtIENsZWFuIHVwIGEgRkNvRSBpbnRlcmZhY2UKLSAqIEBmY29lOiBUaGUgRkNvRSBpbnRlcmZhY2UgdG8gYmUgY2xlYW5lZCB1cAotICoKLSAqIENhbGxlciBtdXN0IGJlIGhvbGRpbmcgdGhlIFJUTkwgbXV0ZXgKLSAqLwotdm9pZCBmY29lX2ludGVyZmFjZV9jbGVhbnVwKHN0cnVjdCBmY29lX2ludGVyZmFjZSAqZmNvZSkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZmNvZS0+bmV0ZGV2OwotCXN0cnVjdCBmY29lX2N0bHIgKmZpcCA9ICZmY29lLT5jdGxyOwotCXU4IGZsb2dpX21hZGRyW0VUSF9BTEVOXTsKLQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wczsKLQotCS8qCi0JICogRG9uJ3QgbGlzdGVuIGZvciBFdGhlcm5ldCBwYWNrZXRzIGFueW1vcmUuCi0JICogc3luY2hyb25pemVfbmV0KCkgZW5zdXJlcyB0aGF0IHRoZSBwYWNrZXQgaGFuZGxlcnMgYXJlIG5vdCBydW5uaW5nCi0JICogb24gYW5vdGhlciBDUFUuIGRldl9yZW1vdmVfcGFjaygpIHdvdWxkIGRvIHRoYXQsIHRoaXMgY2FsbHMgdGhlCi0JICogdW5zeW5jcm9uaXplZCB2ZXJzaW9uIF9fZGV2X3JlbW92ZV9wYWNrKCkgdG8gYXZvaWQgbXVsdGlwbGUgZGVsYXlzLgotCSAqLwotCV9fZGV2X3JlbW92ZV9wYWNrKCZmY29lLT5mY29lX3BhY2tldF90eXBlKTsKLQlfX2Rldl9yZW1vdmVfcGFjaygmZmNvZS0+ZmlwX3BhY2tldF90eXBlKTsKLQlzeW5jaHJvbml6ZV9uZXQoKTsKLQotCS8qIERlbGV0ZSBzZWNvbmRhcnkgTUFDIGFkZHJlc3NlcyAqLwotCW1lbWNweShmbG9naV9tYWRkciwgKHU4WzZdKSBGQ19GQ09FX0ZMT0dJX01BQywgRVRIX0FMRU4pOwotCWRldl91Y19kZWwobmV0ZGV2LCBmbG9naV9tYWRkcik7Ci0JaWYgKGZpcC0+c3BtYSkKLQkJZGV2X3VjX2RlbChuZXRkZXYsIGZpcC0+Y3RsX3NyY19hZGRyKTsKLQlpZiAoZmlwLT5tb2RlID09IEZJUF9NT0RFX1ZOMlZOKSB7Ci0JCWRldl9tY19kZWwobmV0ZGV2LCBGSVBfQUxMX1ZOMlZOX01BQ1MpOwotCQlkZXZfbWNfZGVsKG5ldGRldiwgRklQX0FMTF9QMlBfTUFDUyk7Ci0JfSBlbHNlCi0JCWRldl9tY19kZWwobmV0ZGV2LCBGSVBfQUxMX0VOT0RFX01BQ1MpOwotCi0JLyogVGVsbCB0aGUgTExEIHdlIGFyZSBkb25lIHcvIEZDb0UgKi8KLQlvcHMgPSBuZXRkZXYtPm5ldGRldl9vcHM7Ci0JaWYgKG9wcy0+bmRvX2Zjb2VfZGlzYWJsZSkgewotCQlpZiAob3BzLT5uZG9fZmNvZV9kaXNhYmxlKG5ldGRldikpCi0JCQlGQ09FX05FVERFVl9EQkcobmV0ZGV2LCAiRmFpbGVkIHRvIGRpc2FibGUgRkNvRSIKLQkJCQkJIiBzcGVjaWZpYyBmZWF0dXJlIGZvciBMTEQuXG4iKTsKLQl9Ci19Ci0KLS8qKgogICogZmNvZV9pbnRlcmZhY2VfcmVsZWFzZSgpIC0gZmNvZV9wb3J0IGtyZWYgcmVsZWFzZSBmdW5jdGlvbgogICogQGtyZWY6IEVtYmVkZGVkIHJlZmVyZW5jZSBjb3VudCBpbiBhbiBmY29lX2ludGVyZmFjZSBzdHJ1Y3QKICAqLwpAQCAtNDYwLDYgKzQxNyw2OCBAQAogfQogCiAvKioKKyAqIGZjb2VfaW50ZXJmYWNlX2NsZWFudXAoKSAtIENsZWFuIHVwIGEgRkNvRSBpbnRlcmZhY2UKKyAqIEBmY29lOiBUaGUgRkNvRSBpbnRlcmZhY2UgdG8gYmUgY2xlYW5lZCB1cAorICoKKyAqIENhbGxlciBtdXN0IGJlIGhvbGRpbmcgdGhlIFJUTkwgbXV0ZXgKKyAqLwordm9pZCBmY29lX2ludGVyZmFjZV9jbGVhbnVwKHN0cnVjdCBmY29lX2ludGVyZmFjZSAqZmNvZSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZmNvZS0+bmV0ZGV2OworCXN0cnVjdCBmY29lX2N0bHIgKmZpcCA9ICZmY29lLT5jdGxyOworCXU4IGZsb2dpX21hZGRyW0VUSF9BTEVOXTsKKwljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wczsKKwlzdHJ1Y3QgZmNvZV9wb3J0ICpwb3J0ID0gbHBvcnRfcHJpdihmY29lLT5jdGxyLmxwKTsKKworCUZDT0VfTkVUREVWX0RCRyhuZXRkZXYsICJEZXN0cm95aW5nIGludGVyZmFjZVxuIik7CisKKwkvKiBMb2dvdXQgb2YgdGhlIGZhYnJpYyAqLworCWZjX2ZhYnJpY19sb2dvZmYoZmNvZS0+Y3Rsci5scCk7CisKKwkvKiBDbGVhbnVwIHRoZSBmY19scG9ydCAqLworCWZjX2xwb3J0X2Rlc3Ryb3koZmNvZS0+Y3Rsci5scCk7CisKKwkvKiBTdG9wIHRoZSB0cmFuc21pdCByZXRyeSB0aW1lciAqLworCWRlbF90aW1lcl9zeW5jKCZwb3J0LT50aW1lcik7CisKKwkvKiBGcmVlIGV4aXN0aW5nIHRyYW5zbWl0IHNrYnMgKi8KKwlmY29lX2NsZWFuX3BlbmRpbmdfcXVldWUoZmNvZS0+Y3Rsci5scCk7CisKKwkvKgorCSAqIERvbid0IGxpc3RlbiBmb3IgRXRoZXJuZXQgcGFja2V0cyBhbnltb3JlLgorCSAqIHN5bmNocm9uaXplX25ldCgpIGVuc3VyZXMgdGhhdCB0aGUgcGFja2V0IGhhbmRsZXJzIGFyZSBub3QgcnVubmluZworCSAqIG9uIGFub3RoZXIgQ1BVLiBkZXZfcmVtb3ZlX3BhY2soKSB3b3VsZCBkbyB0aGF0LCB0aGlzIGNhbGxzIHRoZQorCSAqIHVuc3luY3Jvbml6ZWQgdmVyc2lvbiBfX2Rldl9yZW1vdmVfcGFjaygpIHRvIGF2b2lkIG11bHRpcGxlIGRlbGF5cy4KKwkgKi8KKwlfX2Rldl9yZW1vdmVfcGFjaygmZmNvZS0+ZmNvZV9wYWNrZXRfdHlwZSk7CisJX19kZXZfcmVtb3ZlX3BhY2soJmZjb2UtPmZpcF9wYWNrZXRfdHlwZSk7CisJc3luY2hyb25pemVfbmV0KCk7CisKKwkvKiBEZWxldGUgc2Vjb25kYXJ5IE1BQyBhZGRyZXNzZXMgKi8KKwltZW1jcHkoZmxvZ2lfbWFkZHIsICh1OFs2XSkgRkNfRkNPRV9GTE9HSV9NQUMsIEVUSF9BTEVOKTsKKwlkZXZfdWNfZGVsKG5ldGRldiwgZmxvZ2lfbWFkZHIpOworCWlmIChmaXAtPnNwbWEpCisJCWRldl91Y19kZWwobmV0ZGV2LCBmaXAtPmN0bF9zcmNfYWRkcik7CisJaWYgKGZpcC0+bW9kZSA9PSBGSVBfTU9ERV9WTjJWTikgeworCQlkZXZfbWNfZGVsKG5ldGRldiwgRklQX0FMTF9WTjJWTl9NQUNTKTsKKwkJZGV2X21jX2RlbChuZXRkZXYsIEZJUF9BTExfUDJQX01BQ1MpOworCX0gZWxzZQorCQlkZXZfbWNfZGVsKG5ldGRldiwgRklQX0FMTF9FTk9ERV9NQUNTKTsKKworCWlmICghaXNfemVyb19ldGhlcl9hZGRyKHBvcnQtPmRhdGFfc3JjX2FkZHIpKQorCQlkZXZfdWNfZGVsKG5ldGRldiwgcG9ydC0+ZGF0YV9zcmNfYWRkcik7CisKKwkvKiBUZWxsIHRoZSBMTEQgd2UgYXJlIGRvbmUgdy8gRkNvRSAqLworCW9wcyA9IG5ldGRldi0+bmV0ZGV2X29wczsKKwlpZiAob3BzLT5uZG9fZmNvZV9kaXNhYmxlKSB7CisJCWlmIChvcHMtPm5kb19mY29lX2Rpc2FibGUobmV0ZGV2KSkKKwkJCUZDT0VfTkVUREVWX0RCRyhuZXRkZXYsICJGYWlsZWQgdG8gZGlzYWJsZSBGQ29FIgorCQkJCQkiIHNwZWNpZmljIGZlYXR1cmUgZm9yIExMRC5cbiIpOworCX0KKwlmY29lX2ludGVyZmFjZV9wdXQoZmNvZSk7Cit9CisKKy8qKgogICogZmNvZV9maXBfcmVjdigpIC0gSGFuZGxlciBmb3IgcmVjZWl2ZWQgRklQIGZyYW1lcwogICogQHNrYjogICAgICBUaGUgcmVjZWl2ZSBza2IKICAqIEBuZXRkZXY6ICAgVGhlIGFzc29jaWF0ZWQgbmV0IGRldmljZQpAQCAtODIxLDM5ICs4NDAsOSBAQAogICogZmNvZV9pZl9kZXN0cm95KCkgLSBUZWFyIGRvd24gYSBTVyBGQ29FIGluc3RhbmNlCiAgKiBAbHBvcnQ6IFRoZSBsb2NhbCBwb3J0IHRvIGJlIGRlc3Ryb3llZAogICoKLSAqIExvY2tpbmc6IG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIFJUTkwgbXV0ZXggaGVsZCBhbmQgUlROTCBtdXRleAotICogbmVlZGVkIHRvIGJlIGRyb3BwZWQgYnkgdGhpcyBmdW5jdGlvbiBzaW5jZSBub3QgZHJvcHBpbmcgUlROTAotICogd291bGQgY2F1c2UgY2lyY3VsYXIgbG9ja2luZyB3YXJuaW5nIG9uIHN5bmNocm9ub3VzIGZpcCB3b3JrZXIKLSAqIGNhbmNlbGxpbmcgdGhydSBmY29lX2ludGVyZmFjZV9wdXQgaW52b2tlZCBieSB0aGlzIGZ1bmN0aW9uLgotICoKICAqLwogc3RhdGljIHZvaWQgZmNvZV9pZl9kZXN0cm95KHN0cnVjdCBmY19scG9ydCAqbHBvcnQpCiB7Ci0Jc3RydWN0IGZjb2VfcG9ydCAqcG9ydCA9IGxwb3J0X3ByaXYobHBvcnQpOwotCXN0cnVjdCBmY29lX2ludGVyZmFjZSAqZmNvZSA9IHBvcnQtPnByaXY7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGZjb2UtPm5ldGRldjsKLQotCUZDT0VfTkVUREVWX0RCRyhuZXRkZXYsICJEZXN0cm95aW5nIGludGVyZmFjZVxuIik7Ci0KLQkvKiBMb2dvdXQgb2YgdGhlIGZhYnJpYyAqLwotCWZjX2ZhYnJpY19sb2dvZmYobHBvcnQpOwotCi0JLyogQ2xlYW51cCB0aGUgZmNfbHBvcnQgKi8KLQlmY19scG9ydF9kZXN0cm95KGxwb3J0KTsKLQotCS8qIFN0b3AgdGhlIHRyYW5zbWl0IHJldHJ5IHRpbWVyICovCi0JZGVsX3RpbWVyX3N5bmMoJnBvcnQtPnRpbWVyKTsKLQotCS8qIEZyZWUgZXhpc3RpbmcgdHJhbnNtaXQgc2ticyAqLwotCWZjb2VfY2xlYW5fcGVuZGluZ19xdWV1ZShscG9ydCk7Ci0KLQlpZiAoIWlzX3plcm9fZXRoZXJfYWRkcihwb3J0LT5kYXRhX3NyY19hZGRyKSkKLQkJZGV2X3VjX2RlbChuZXRkZXYsIHBvcnQtPmRhdGFfc3JjX2FkZHIpOwotCXJ0bmxfdW5sb2NrKCk7Ci0KLQkvKiByZWNlaXZlcyBtYXkgbm90IGJlIHN0b3BwZWQgdW50aWwgYWZ0ZXIgdGhpcyAqLwotCWZjb2VfaW50ZXJmYWNlX3B1dChmY29lKTsKLQogCS8qIEZyZWUgcXVldWVkIHBhY2tldHMgZm9yIHRoZSBwZXItQ1BVIHJlY2VpdmUgdGhyZWFkcyAqLwogCWZjb2VfcGVyY3B1X2NsZWFuKGxwb3J0KTsKIApAQCAtMTc4MywyMyArMTc3Miw4IEBACiAJaW50IHJjID0gMDsKIAogCW11dGV4X2xvY2soJmZjb2VfY29uZmlnX211dGV4KTsKLSNpZmRlZiBDT05GSUdfRkNPRV9NT0RVTEUKLQkvKgotCSAqIE1ha2Ugc3VyZSB0aGUgbW9kdWxlIGhhcyBiZWVuIGluaXRpYWxpemVkLCBhbmQgaXMgbm90IGFib3V0IHRvIGJlCi0JICogcmVtb3ZlZC4gIE1vZHVsZSBwYXJhbXRlciBzeXNmcyBmaWxlcyBhcmUgd3JpdGFibGUgYmVmb3JlIHRoZQotCSAqIG1vZHVsZV9pbml0IGZ1bmN0aW9uIGlzIGNhbGxlZCBhbmQgYWZ0ZXIgbW9kdWxlX2V4aXQuCi0JICovCi0JaWYgKFRISVNfTU9EVUxFLT5zdGF0ZSAhPSBNT0RVTEVfU1RBVEVfTElWRSkgewotCQlyYyA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0X25vZGV2OwotCX0KLSNlbmRpZgogCi0JaWYgKCFydG5sX3RyeWxvY2soKSkgewotCQltdXRleF91bmxvY2soJmZjb2VfY29uZmlnX211dGV4KTsKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQl9Ci0KKwlydG5sX2xvY2soKTsKIAlmY29lID0gZmNvZV9ob3N0bGlzdF9sb29rdXBfcG9ydChuZXRkZXYpOwogCXJ0bmxfdW5sb2NrKCk7CiAKQEAgLTE4MDksNyArMTc4Myw2IEBACiAJfSBlbHNlCiAJCXJjID0gLUVOT0RFVjsKIAotb3V0X25vZGV2OgogCW11dGV4X3VubG9jaygmZmNvZV9jb25maWdfbXV0ZXgpOwogCXJldHVybiByYzsKIH0KQEAgLTE4MjgsMjIgKzE4MDEsNyBAQAogCWludCByYyA9IDA7CiAKIAltdXRleF9sb2NrKCZmY29lX2NvbmZpZ19tdXRleCk7Ci0jaWZkZWYgQ09ORklHX0ZDT0VfTU9EVUxFCi0JLyoKLQkgKiBNYWtlIHN1cmUgdGhlIG1vZHVsZSBoYXMgYmVlbiBpbml0aWFsaXplZCwgYW5kIGlzIG5vdCBhYm91dCB0byBiZQotCSAqIHJlbW92ZWQuICBNb2R1bGUgcGFyYW10ZXIgc3lzZnMgZmlsZXMgYXJlIHdyaXRhYmxlIGJlZm9yZSB0aGUKLQkgKiBtb2R1bGVfaW5pdCBmdW5jdGlvbiBpcyBjYWxsZWQgYW5kIGFmdGVyIG1vZHVsZV9leGl0LgotCSAqLwotCWlmIChUSElTX01PRFVMRS0+c3RhdGUgIT0gTU9EVUxFX1NUQVRFX0xJVkUpIHsKLQkJcmMgPSAtRU5PREVWOwotCQlnb3RvIG91dF9ub2RldjsKLQl9Ci0jZW5kaWYKLQlpZiAoIXJ0bmxfdHJ5bG9jaygpKSB7Ci0JCW11dGV4X3VubG9jaygmZmNvZV9jb25maWdfbXV0ZXgpOwotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCX0KLQorCXJ0bmxfbG9jaygpOwogCWZjb2UgPSBmY29lX2hvc3RsaXN0X2xvb2t1cF9wb3J0KG5ldGRldik7CiAJcnRubF91bmxvY2soKTsKIApAQCAtMTg1Miw3ICsxODEwLDYgQEAKIAllbHNlIGlmICghZmNvZV9saW5rX29rKGZjb2UtPmN0bHIubHApKQogCQlmY29lX2N0bHJfbGlua191cCgmZmNvZS0+Y3Rscik7CiAKLW91dF9ub2RldjoKIAltdXRleF91bmxvY2soJmZjb2VfY29uZmlnX211dGV4KTsKIAlyZXR1cm4gcmM7CiB9CkBAIC0xODY4LDM1ICsxODI1LDIyIEBACiBzdGF0aWMgaW50IGZjb2VfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBmY29lX2ludGVyZmFjZSAqZmNvZTsKKwlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0OwogCWludCByYyA9IDA7CiAKIAltdXRleF9sb2NrKCZmY29lX2NvbmZpZ19tdXRleCk7Ci0jaWZkZWYgQ09ORklHX0ZDT0VfTU9EVUxFCi0JLyoKLQkgKiBNYWtlIHN1cmUgdGhlIG1vZHVsZSBoYXMgYmVlbiBpbml0aWFsaXplZCwgYW5kIGlzIG5vdCBhYm91dCB0byBiZQotCSAqIHJlbW92ZWQuICBNb2R1bGUgcGFyYW10ZXIgc3lzZnMgZmlsZXMgYXJlIHdyaXRhYmxlIGJlZm9yZSB0aGUKLQkgKiBtb2R1bGVfaW5pdCBmdW5jdGlvbiBpcyBjYWxsZWQgYW5kIGFmdGVyIG1vZHVsZV9leGl0LgotCSAqLwotCWlmIChUSElTX01PRFVMRS0+c3RhdGUgIT0gTU9EVUxFX1NUQVRFX0xJVkUpIHsKLQkJcmMgPSAtRU5PREVWOwotCQlnb3RvIG91dF9ub2RldjsKLQl9Ci0jZW5kaWYKLQlpZiAoIXJ0bmxfdHJ5bG9jaygpKSB7Ci0JCW11dGV4X3VubG9jaygmZmNvZV9jb25maWdfbXV0ZXgpOwotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCX0KLQorCXJ0bmxfbG9jaygpOwogCWZjb2UgPSBmY29lX2hvc3RsaXN0X2xvb2t1cF9wb3J0KG5ldGRldik7CiAJaWYgKCFmY29lKSB7CiAJCXJ0bmxfdW5sb2NrKCk7CiAJCXJjID0gLUVOT0RFVjsKIAkJZ290byBvdXRfbm9kZXY7CiAJfQotCWZjb2VfaW50ZXJmYWNlX2NsZWFudXAoZmNvZSk7CisJbHBvcnQgPSBmY29lLT5jdGxyLmxwOwogCWxpc3RfZGVsKCZmY29lLT5saXN0KTsKLQkvKiBSVE5MIG11dGV4IGlzIGRyb3BwZWQgYnkgZmNvZV9pZl9kZXN0cm95ICovCi0JZmNvZV9pZl9kZXN0cm95KGZjb2UtPmN0bHIubHApOworCWZjb2VfaW50ZXJmYWNlX2NsZWFudXAoZmNvZSk7CisJcnRubF91bmxvY2soKTsKKwlmY29lX2lmX2Rlc3Ryb3kobHBvcnQpOwogb3V0X25vZGV2OgogCW11dGV4X3VubG9jaygmZmNvZV9jb25maWdfbXV0ZXgpOwogCXJldHVybiByYzsKQEAgLTE5MTIsOCArMTg1Niw2IEBACiAKIAlwb3J0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmY29lX3BvcnQsIGRlc3Ryb3lfd29yayk7CiAJbXV0ZXhfbG9jaygmZmNvZV9jb25maWdfbXV0ZXgpOwotCXJ0bmxfbG9jaygpOwotCS8qIFJUTkwgbXV0ZXggaXMgZHJvcHBlZCBieSBmY29lX2lmX2Rlc3Ryb3kgKi8KIAlmY29lX2lmX2Rlc3Ryb3kocG9ydC0+bHBvcnQpOwogCW11dGV4X3VubG9jaygmZmNvZV9jb25maWdfbXV0ZXgpOwogfQpAQCAtMTk0OCwyMyArMTg5MCw3IEBACiAJc3RydWN0IGZjX2xwb3J0ICpscG9ydDsKIAogCW11dGV4X2xvY2soJmZjb2VfY29uZmlnX211dGV4KTsKLQotCWlmICghcnRubF90cnlsb2NrKCkpIHsKLQkJbXV0ZXhfdW5sb2NrKCZmY29lX2NvbmZpZ19tdXRleCk7Ci0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JfQotCi0jaWZkZWYgQ09ORklHX0ZDT0VfTU9EVUxFCi0JLyoKLQkgKiBNYWtlIHN1cmUgdGhlIG1vZHVsZSBoYXMgYmVlbiBpbml0aWFsaXplZCwgYW5kIGlzIG5vdCBhYm91dCB0byBiZQotCSAqIHJlbW92ZWQuICBNb2R1bGUgcGFyYW10ZXIgc3lzZnMgZmlsZXMgYXJlIHdyaXRhYmxlIGJlZm9yZSB0aGUKLQkgKiBtb2R1bGVfaW5pdCBmdW5jdGlvbiBpcyBjYWxsZWQgYW5kIGFmdGVyIG1vZHVsZV9leGl0LgotCSAqLwotCWlmIChUSElTX01PRFVMRS0+c3RhdGUgIT0gTU9EVUxFX1NUQVRFX0xJVkUpIHsKLQkJcmMgPSAtRU5PREVWOwotCQlnb3RvIG91dF9ub2RldjsKLQl9Ci0jZW5kaWYKKwlydG5sX2xvY2soKTsKIAogCS8qIGxvb2sgZm9yIGV4aXN0aW5nIGxwb3J0ICovCiAJaWYgKGZjb2VfaG9zdGxpc3RfbG9va3VwKG5ldGRldikpIHsKQEAgLTIwMjYsNyArMTk1Miw3IEBACiBpbnQgZmNvZV9saW5rX3NwZWVkX3VwZGF0ZShzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBmY29lX25ldGRldihscG9ydCk7Ci0Jc3RydWN0IGV0aHRvb2xfY21kIGVjbWQgPSB7IEVUSFRPT0xfR1NFVCB9OworCXN0cnVjdCBldGh0b29sX2NtZCBlY21kOwogCiAJaWYgKCFkZXZfZXRodG9vbF9nZXRfc2V0dGluZ3MobmV0ZGV2LCAmZWNtZCkpIHsKIAkJbHBvcnQtPmxpbmtfc3VwcG9ydGVkX3NwZWVkcyAmPQpAQCAtMjAzNywxMSArMTk2MywxNCBAQAogCQlpZiAoZWNtZC5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsKQogCQkJbHBvcnQtPmxpbmtfc3VwcG9ydGVkX3NwZWVkcyB8PQogCQkJCUZDX1BPUlRTUEVFRF8xMEdCSVQ7Ci0JCWlmIChlY21kLnNwZWVkID09IFNQRUVEXzEwMDApCisJCXN3aXRjaCAoZXRodG9vbF9jbWRfc3BlZWQoJmVjbWQpKSB7CisJCWNhc2UgU1BFRURfMTAwMDoKIAkJCWxwb3J0LT5saW5rX3NwZWVkID0gRkNfUE9SVFNQRUVEXzFHQklUOwotCQlpZiAoZWNtZC5zcGVlZCA9PSBTUEVFRF8xMDAwMCkKKwkJCWJyZWFrOworCQljYXNlIFNQRUVEXzEwMDAwOgogCQkJbHBvcnQtPmxpbmtfc3BlZWQgPSBGQ19QT1JUU1BFRURfMTBHQklUOwotCisJCQlicmVhazsKKwkJfQogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZV9jdGxyLmMgYi9kcml2ZXJzL3Njc2kvZmNvZS9mY29lX2N0bHIuYwppbmRleCA5ZDM4YmUyLi4yMjllNGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZmNvZS9mY29lX2N0bHIuYworKysgYi9kcml2ZXJzL3Njc2kvZmNvZS9mY29lX2N0bHIuYwpAQCAtOTc4LDEwICs5NzgsOCBAQAogCSAqIHRoZSBGQ0YgdGhhdCBhbnN3ZXJzIG11bHRpY2FzdCBzb2xpY2l0YXRpb25zLCBub3QgdGhlIG90aGVycyB0aGF0CiAJICogYXJlIHNlbmRpbmcgcGVyaW9kaWMgbXVsdGljYXN0IGFkdmVydGlzZW1lbnRzLgogCSAqLwotCWlmIChtdHVfdmFsaWQpIHsKLQkJbGlzdF9kZWwoJmZjZi0+bGlzdCk7Ci0JCWxpc3RfYWRkKCZmY2YtPmxpc3QsICZmaXAtPmZjZnMpOwotCX0KKwlpZiAobXR1X3ZhbGlkKQorCQlsaXN0X21vdmUoJmZjZi0+bGlzdCwgJmZpcC0+ZmNmcyk7CiAKIAkvKgogCSAqIElmIHRoaXMgaXMgdGhlIGZpcnN0IHZhbGlkYXRlZCBGQ0YsIG5vdGUgdGhlIHRpbWUgYW5kCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZmNvZS9mY29lX3RyYW5zcG9ydC5jIGIvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZV90cmFuc3BvcnQuYwppbmRleCAyNTg2ODQxLi5mODFmNzdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZmNvZS9mY29lX3RyYW5zcG9ydC5jCisrKyBiL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2VfdHJhbnNwb3J0LmMKQEAgLTMzNSw3ICszMzUsNyBAQAogRVhQT1JUX1NZTUJPTChmY29lX3RyYW5zcG9ydF9hdHRhY2gpOwogCiAvKioKLSAqIGZjb2VfdHJhbnNwb3J0X2F0dGFjaCAtIERldGFjaGVzIGFuIEZDb0UgdHJhbnNwb3J0CisgKiBmY29lX3RyYW5zcG9ydF9kZXRhY2ggLSBEZXRhY2hlcyBhbiBGQ29FIHRyYW5zcG9ydAogICogQGZ0OiBUaGUgZmNvZSB0cmFuc3BvcnQgdG8gYmUgYXR0YWNoZWQKICAqCiAgKiBSZXR1cm5zIDogMCBmb3Igc3VjY2VzcwpAQCAtMzQzLDYgKzM0Myw3IEBACiBpbnQgZmNvZV90cmFuc3BvcnRfZGV0YWNoKHN0cnVjdCBmY29lX3RyYW5zcG9ydCAqZnQpCiB7CiAJaW50IHJjID0gMDsKKwlzdHJ1Y3QgZmNvZV9uZXRkZXZfbWFwcGluZyAqbm0gPSBOVUxMLCAqdG1wOwogCiAJbXV0ZXhfbG9jaygmZnRfbXV0ZXgpOwogCWlmICghZnQtPmF0dGFjaGVkKSB7CkBAIC0zNTIsNiArMzUzLDE5IEBACiAJCWdvdG8gb3V0X2F0dGFjaDsKIAl9CiAKKwkvKiByZW1vdmUgbmV0ZGV2IG1hcHBpbmcgZm9yIHRoaXMgdHJhbnNwb3J0IGFzIGl0IGlzIGdvaW5nIGF3YXkgKi8KKwltdXRleF9sb2NrKCZmbl9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5tLCB0bXAsICZmY29lX25ldGRldnMsIGxpc3QpIHsKKwkJaWYgKG5tLT5mdCA9PSBmdCkgeworCQkJTElCRkNPRV9UUkFOU1BPUlRfREJHKCJ0cmFuc3BvcnQgJXMgZ29pbmcgYXdheSwgIgorCQkJCSJyZW1vdmUgaXRzIG5ldGRldiBtYXBwaW5nIGZvciAlc1xuIiwKKwkJCQlmdC0+bmFtZSwgbm0tPm5ldGRldi0+bmFtZSk7CisJCQlsaXN0X2RlbCgmbm0tPmxpc3QpOworCQkJa2ZyZWUobm0pOworCQl9CisJfQorCW11dGV4X3VubG9jaygmZm5fbXV0ZXgpOworCiAJbGlzdF9kZWwoJmZ0LT5saXN0KTsKIAlmdC0+YXR0YWNoZWQgPSBmYWxzZTsKIAlMSUJGQ09FX1RSQU5TUE9SVF9EQkcoImRldGFjaGluZyB0cmFuc3BvcnQgJXNcbiIsIGZ0LT5uYW1lKTsKQEAgLTM3MSw5ICszODUsOSBAQAogCWkgPSBqID0gc3ByaW50ZihidWZmZXIsICJBdHRhY2hlZCBGQ29FIHRyYW5zcG9ydHM6Iik7CiAJbXV0ZXhfbG9jaygmZnRfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZnQsICZmY29lX3RyYW5zcG9ydHMsIGxpc3QpIHsKLQkJaSArPSBzbnByaW50ZigmYnVmZmVyW2ldLCBJRk5BTVNJWiwgIiVzICIsIGZ0LT5uYW1lKTsKLQkJaWYgKGkgPj0gUEFHRV9TSVpFKQorCQlpZiAoaSA+PSBQQUdFX1NJWkUgLSBJRk5BTVNJWikKIAkJCWJyZWFrOworCQlpICs9IHNucHJpbnRmKCZidWZmZXJbaV0sIElGTkFNU0laLCAiJXMgIiwgZnQtPm5hbWUpOwogCX0KIAltdXRleF91bmxvY2soJmZ0X211dGV4KTsKIAlpZiAoaSA9PSBqKQpAQCAtNTMwLDkgKzU0NCw2IEBACiAJc3RydWN0IGZjb2VfdHJhbnNwb3J0ICpmdCA9IE5VTEw7CiAJZW51bSBmaXBfc3RhdGUgZmlwX21vZGUgPSAoZW51bSBmaXBfc3RhdGUpKGxvbmcpa3AtPmFyZzsKIAotCWlmICghbXV0ZXhfdHJ5bG9jaygmZnRfbXV0ZXgpKQotCQlyZXR1cm4gcmVzdGFydF9zeXNjYWxsKCk7Ci0KICNpZmRlZiBDT05GSUdfTElCRkNPRV9NT0RVTEUKIAkvKgogCSAqIE1ha2Ugc3VyZSB0aGUgbW9kdWxlIGhhcyBiZWVuIGluaXRpYWxpemVkLCBhbmQgaXMgbm90IGFib3V0IHRvIGJlCkBAIC01NDMsNiArNTU0LDggQEAKIAkJZ290byBvdXRfbm9kZXY7CiAjZW5kaWYKIAorCW11dGV4X2xvY2soJmZ0X211dGV4KTsKKwogCW5ldGRldiA9IGZjb2VfaWZfdG9fbmV0ZGV2KGJ1ZmZlcik7CiAJaWYgKCFuZXRkZXYpIHsKIAkJTElCRkNPRV9UUkFOU1BPUlRfREJHKCJJbnZhbGlkIGRldmljZSAlcy5cbiIsIGJ1ZmZlcik7CkBAIC01ODYsMTAgKzU5OSw3IEBACiAJZGV2X3B1dChuZXRkZXYpOwogb3V0X25vZGV2OgogCW11dGV4X3VubG9jaygmZnRfbXV0ZXgpOwotCWlmIChyYyA9PSAtRVJFU1RBUlRTWVMpCi0JCXJldHVybiByZXN0YXJ0X3N5c2NhbGwoKTsKLQllbHNlCi0JCXJldHVybiByYzsKKwlyZXR1cm4gcmM7CiB9CiAKIC8qKgpAQCAtNjA4LDkgKzYxOCw2IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IE5VTEw7CiAJc3RydWN0IGZjb2VfdHJhbnNwb3J0ICpmdCA9IE5VTEw7CiAKLQlpZiAoIW11dGV4X3RyeWxvY2soJmZ0X211dGV4KSkKLQkJcmV0dXJuIHJlc3RhcnRfc3lzY2FsbCgpOwotCiAjaWZkZWYgQ09ORklHX0xJQkZDT0VfTU9EVUxFCiAJLyoKIAkgKiBNYWtlIHN1cmUgdGhlIG1vZHVsZSBoYXMgYmVlbiBpbml0aWFsaXplZCwgYW5kIGlzIG5vdCBhYm91dCB0byBiZQpAQCAtNjIxLDYgKzYyOCw4IEBACiAJCWdvdG8gb3V0X25vZGV2OwogI2VuZGlmCiAKKwltdXRleF9sb2NrKCZmdF9tdXRleCk7CisKIAluZXRkZXYgPSBmY29lX2lmX3RvX25ldGRldihidWZmZXIpOwogCWlmICghbmV0ZGV2KSB7CiAJCUxJQkZDT0VfVFJBTlNQT1JUX0RCRygiaW52YWxpZCBkZXZpY2UgJXMuXG4iLCBidWZmZXIpOwpAQCAtNjQ1LDExICs2NTQsNyBAQAogCWRldl9wdXQobmV0ZGV2KTsKIG91dF9ub2RldjoKIAltdXRleF91bmxvY2soJmZ0X211dGV4KTsKLQotCWlmIChyYyA9PSAtRVJFU1RBUlRTWVMpCi0JCXJldHVybiByZXN0YXJ0X3N5c2NhbGwoKTsKLQllbHNlCi0JCXJldHVybiByYzsKKwlyZXR1cm4gcmM7CiB9CiAKIC8qKgpAQCAtNjY3LDkgKzY3Miw2IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IE5VTEw7CiAJc3RydWN0IGZjb2VfdHJhbnNwb3J0ICpmdCA9IE5VTEw7CiAKLQlpZiAoIW11dGV4X3RyeWxvY2soJmZ0X211dGV4KSkKLQkJcmV0dXJuIHJlc3RhcnRfc3lzY2FsbCgpOwotCiAjaWZkZWYgQ09ORklHX0xJQkZDT0VfTU9EVUxFCiAJLyoKIAkgKiBNYWtlIHN1cmUgdGhlIG1vZHVsZSBoYXMgYmVlbiBpbml0aWFsaXplZCwgYW5kIGlzIG5vdCBhYm91dCB0byBiZQpAQCAtNjgwLDYgKzY4Miw4IEBACiAJCWdvdG8gb3V0X25vZGV2OwogI2VuZGlmCiAKKwltdXRleF9sb2NrKCZmdF9tdXRleCk7CisKIAluZXRkZXYgPSBmY29lX2lmX3RvX25ldGRldihidWZmZXIpOwogCWlmICghbmV0ZGV2KQogCQlnb3RvIG91dF9ub2RldjsKQEAgLTcxNiw5ICs3MjAsNiBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBOVUxMOwogCXN0cnVjdCBmY29lX3RyYW5zcG9ydCAqZnQgPSBOVUxMOwogCi0JaWYgKCFtdXRleF90cnlsb2NrKCZmdF9tdXRleCkpCi0JCXJldHVybiByZXN0YXJ0X3N5c2NhbGwoKTsKLQogI2lmZGVmIENPTkZJR19MSUJGQ09FX01PRFVMRQogCS8qCiAJICogTWFrZSBzdXJlIHRoZSBtb2R1bGUgaGFzIGJlZW4gaW5pdGlhbGl6ZWQsIGFuZCBpcyBub3QgYWJvdXQgdG8gYmUKQEAgLTcyOSw2ICs3MzAsOCBAQAogCQlnb3RvIG91dF9ub2RldjsKICNlbmRpZgogCisJbXV0ZXhfbG9jaygmZnRfbXV0ZXgpOworCiAJbmV0ZGV2ID0gZmNvZV9pZl90b19uZXRkZXYoYnVmZmVyKTsKIAlpZiAoIW5ldGRldikKIAkJZ290byBvdXRfbm9kZXY7CkBAIC03NDMsMTAgKzc0Niw3IEBACiAJZGV2X3B1dChuZXRkZXYpOwogb3V0X25vZGV2OgogCW11dGV4X3VubG9jaygmZnRfbXV0ZXgpOwotCWlmIChyYyA9PSAtRVJFU1RBUlRTWVMpCi0JCXJldHVybiByZXN0YXJ0X3N5c2NhbGwoKTsKLQllbHNlCi0JCXJldHVybiByYzsKKwlyZXR1cm4gcmM7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2hwc2EuYyBiL2RyaXZlcnMvc2NzaS9ocHNhLmMKaW5kZXggNDE1YWQ0Zi4uYzZjMDQzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2hwc2EuYworKysgYi9kcml2ZXJzL3Njc2kvaHBzYS5jCkBAIC0yNzMsNyArMjczLDcgQEAKIAkJCSJwZXJmb3JtYW50IiA6ICJzaW1wbGUiKTsKIH0KIAotLyogTGlzdCBvZiBjb250cm9sbGVycyB3aGljaCBjYW5ub3QgYmUgcmVzZXQgb24ga2V4ZWMgd2l0aCByZXNldF9kZXZpY2VzICovCisvKiBMaXN0IG9mIGNvbnRyb2xsZXJzIHdoaWNoIGNhbm5vdCBiZSBoYXJkIHJlc2V0IG9uIGtleGVjIHdpdGggcmVzZXRfZGV2aWNlcyAqLwogc3RhdGljIHUzMiB1bnJlc2V0dGFibGVfY29udHJvbGxlcltdID0gewogCTB4MzI0YTEwM0MsIC8qIFNtYXJ0IEFycmF5IFA3MTJtICovCiAJMHgzMjRiMTAzQywgLyogU21hcnRBcnJheSBQNzExbSAqLwpAQCAtMjkxLDE2ICsyOTEsNDUgQEAKIAkweDQwOUQwRTExLCAvKiBTbWFydCBBcnJheSA2NDAwIEVNICovCiB9OwogCi1zdGF0aWMgaW50IGN0bHJfaXNfcmVzZXR0YWJsZShzdHJ1Y3QgY3Rscl9pbmZvICpoKQorLyogTGlzdCBvZiBjb250cm9sbGVycyB3aGljaCBjYW5ub3QgZXZlbiBiZSBzb2Z0IHJlc2V0ICovCitzdGF0aWMgdTMyIHNvZnRfdW5yZXNldHRhYmxlX2NvbnRyb2xsZXJbXSA9IHsKKwkvKiBFeGNsdWRlIDY0MHggYm9hcmRzLiAgVGhlc2UgYXJlIHR3byBwY2kgZGV2aWNlcyBpbiBvbmUgc2xvdAorCSAqIHdoaWNoIHNoYXJlIGEgYmF0dGVyeSBiYWNrZWQgY2FjaGUgbW9kdWxlLiAgT25lIGNvbnRyb2xzIHRoZQorCSAqIGNhY2hlLCB0aGUgb3RoZXIgYWNjZXNzZXMgdGhlIGNhY2hlIHRocm91Z2ggdGhlIG9uZSB0aGF0IGNvbnRyb2xzCisJICogaXQuICBJZiB3ZSByZXNldCB0aGUgb25lIGNvbnRyb2xsaW5nIHRoZSBjYWNoZSwgdGhlIG90aGVyIHdpbGwKKwkgKiBsaWtlbHkgbm90IGJlIGhhcHB5LiAgSnVzdCBmb3JiaWQgcmVzZXR0aW5nIHRoaXMgY29uam9pbmVkIG1lc3MuCisJICogVGhlIDY0MHggaXNuJ3QgcmVhbGx5IHN1cHBvcnRlZCBieSBocHNhIGFueXdheS4KKwkgKi8KKwkweDQwOUMwRTExLCAvKiBTbWFydCBBcnJheSA2NDAwICovCisJMHg0MDlEMEUxMSwgLyogU21hcnQgQXJyYXkgNjQwMCBFTSAqLworfTsKKworc3RhdGljIGludCBjdGxyX2lzX2hhcmRfcmVzZXR0YWJsZSh1MzIgYm9hcmRfaWQpCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh1bnJlc2V0dGFibGVfY29udHJvbGxlcik7IGkrKykKLQkJaWYgKHVucmVzZXR0YWJsZV9jb250cm9sbGVyW2ldID09IGgtPmJvYXJkX2lkKQorCQlpZiAodW5yZXNldHRhYmxlX2NvbnRyb2xsZXJbaV0gPT0gYm9hcmRfaWQpCiAJCQlyZXR1cm4gMDsKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIGludCBjdGxyX2lzX3NvZnRfcmVzZXR0YWJsZSh1MzIgYm9hcmRfaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzb2Z0X3VucmVzZXR0YWJsZV9jb250cm9sbGVyKTsgaSsrKQorCQlpZiAoc29mdF91bnJlc2V0dGFibGVfY29udHJvbGxlcltpXSA9PSBib2FyZF9pZCkKKwkJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGN0bHJfaXNfcmVzZXR0YWJsZSh1MzIgYm9hcmRfaWQpCit7CisJcmV0dXJuIGN0bHJfaXNfaGFyZF9yZXNldHRhYmxlKGJvYXJkX2lkKSB8fAorCQljdGxyX2lzX3NvZnRfcmVzZXR0YWJsZShib2FyZF9pZCk7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGhvc3Rfc2hvd19yZXNldHRhYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtMzA4LDcgKzMzNyw3IEBACiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOwogCiAJaCA9IHNob3N0X3RvX2hiYShzaG9zdCk7Ci0JcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMjAsICIlZFxuIiwgY3Rscl9pc19yZXNldHRhYmxlKGgpKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCAyMCwgIiVkXG4iLCBjdGxyX2lzX3Jlc2V0dGFibGUoaC0+Ym9hcmRfaWQpKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaXNfbG9naWNhbF9kZXZfYWRkcl9tb2RlKHVuc2lnbmVkIGNoYXIgc2NzaTNhZGRyW10pCkBAIC05MjksMTMgKzk1OCw2IEBACiAJLyogbm90aGluZyB0byBkby4gKi8KIH0KIAotc3RhdGljIHZvaWQgaHBzYV9zY3NpX3NldHVwKHN0cnVjdCBjdGxyX2luZm8gKmgpCi17Ci0JaC0+bmRldmljZXMgPSAwOwotCWgtPnNjc2lfaG9zdCA9IE5VTEw7Ci0Jc3Bpbl9sb2NrX2luaXQoJmgtPmRldmxvY2spOwotfQotCiBzdGF0aWMgdm9pZCBocHNhX2ZyZWVfc2dfY2hhaW5fYmxvY2tzKHN0cnVjdCBjdGxyX2luZm8gKmgpCiB7CiAJaW50IGk7CkBAIC0xMDA2LDggKzEwMjgsNyBAQAogCXBjaV91bm1hcF9zaW5nbGUoaC0+cGRldiwgdGVtcDY0LnZhbCwgY2hhaW5fc2ctPkxlbiwgUENJX0RNQV9UT0RFVklDRSk7CiB9CiAKLXN0YXRpYyB2b2lkIGNvbXBsZXRlX3Njc2lfY29tbWFuZChzdHJ1Y3QgQ29tbWFuZExpc3QgKmNwLAotCWludCB0aW1lb3V0LCB1MzIgdGFnKQorc3RhdGljIHZvaWQgY29tcGxldGVfc2NzaV9jb21tYW5kKHN0cnVjdCBDb21tYW5kTGlzdCAqY3ApCiB7CiAJc3RydWN0IHNjc2lfY21uZCAqY21kOwogCXN0cnVjdCBjdGxyX2luZm8gKmg7CkBAIC0xMzA4LDcgKzEzMjksNyBAQAogCWludCByZXRyeV9jb3VudCA9IDA7CiAKIAlkbyB7Ci0JCW1lbXNldChjLT5lcnJfaW5mbywgMCwgc2l6ZW9mKGMtPmVycl9pbmZvKSk7CisJCW1lbXNldChjLT5lcnJfaW5mbywgMCwgc2l6ZW9mKCpjLT5lcnJfaW5mbykpOwogCQlocHNhX3Njc2lfZG9fc2ltcGxlX2NtZF9jb3JlKGgsIGMpOwogCQlyZXRyeV9jb3VudCsrOwogCX0gd2hpbGUgKGNoZWNrX2Zvcl91bml0X2F0dGVudGlvbihoLCBjKSAmJiByZXRyeV9jb3VudCA8PSAzKTsKQEAgLTE1NzAsNiArMTU5MSw3IEBACiAJIk1TQTIwMjQiLAogCSJNU0EyMzEyIiwKIAkiTVNBMjMyNCIsCisJIlAyMDAwIEczIFNBUyIsCiAJTlVMTCwKIH07CiAKQEAgLTI3NTEsNiArMjc3MywyNiBAQAogCX0KIH0KIAorc3RhdGljIGludCBfX2RldmluaXQgaHBzYV9zZW5kX2hvc3RfcmVzZXQoc3RydWN0IGN0bHJfaW5mbyAqaCwKKwl1bnNpZ25lZCBjaGFyICpzY3NpM2FkZHIsIHU4IHJlc2V0X3R5cGUpCit7CisJc3RydWN0IENvbW1hbmRMaXN0ICpjOworCisJYyA9IGNtZF9hbGxvYyhoKTsKKwlpZiAoIWMpCisJCXJldHVybiAtRU5PTUVNOworCWZpbGxfY21kKGMsIEhQU0FfREVWSUNFX1JFU0VUX01TRywgaCwgTlVMTCwgMCwgMCwKKwkJUkFJRF9DVExSX0xVTklELCBUWVBFX01TRyk7CisJYy0+UmVxdWVzdC5DREJbMV0gPSByZXNldF90eXBlOyAvKiBmaWxsX2NtZCBkZWZhdWx0cyB0byB0YXJnZXQgcmVzZXQgKi8KKwljLT53YWl0aW5nID0gTlVMTDsKKwllbnF1ZXVlX2NtZF9hbmRfc3RhcnRfaW8oaCwgYyk7CisJLyogRG9uJ3Qgd2FpdCBmb3IgY29tcGxldGlvbiwgdGhlIHJlc2V0IHdvbid0IGNvbXBsZXRlLiAgRG9uJ3QgZnJlZQorCSAqIHRoZSBjb21tYW5kIGVpdGhlci4gIFRoaXMgaXMgdGhlIGxhc3QgY29tbWFuZCB3ZSB3aWxsIHNlbmQgYmVmb3JlCisJICogcmUtaW5pdGlhbGl6aW5nIGV2ZXJ5dGhpbmcsIHNvIGl0IGRvZXNuJ3QgbWF0dGVyIGFuZCB3b24ndCBsZWFrLgorCSAqLworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBmaWxsX2NtZChzdHJ1Y3QgQ29tbWFuZExpc3QgKmMsIHU4IGNtZCwgc3RydWN0IGN0bHJfaW5mbyAqaCwKIAl2b2lkICpidWZmLCBzaXplX3Qgc2l6ZSwgdTggcGFnZV9jb2RlLCB1bnNpZ25lZCBjaGFyICpzY3NpM2FkZHIsCiAJaW50IGNtZF90eXBlKQpAQCAtMjgyOCw3ICsyODcwLDggQEAKIAkJCWMtPlJlcXVlc3QuVHlwZS5BdHRyaWJ1dGUgPSBBVFRSX1NJTVBMRTsKIAkJCWMtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPSBYRkVSX05PTkU7CiAJCQljLT5SZXF1ZXN0LlRpbWVvdXQgPSAwOyAvKiBEb24ndCB0aW1lIG91dCAqLwotCQkJYy0+UmVxdWVzdC5DREJbMF0gPSAgMHgwMTsgLyogUkVTRVRfTVNHIGlzIDB4MDEgKi8KKwkJCW1lbXNldCgmYy0+UmVxdWVzdC5DREJbMF0sIDAsIHNpemVvZihjLT5SZXF1ZXN0LkNEQikpOworCQkJYy0+UmVxdWVzdC5DREJbMF0gPSAgY21kOwogCQkJYy0+UmVxdWVzdC5DREJbMV0gPSAweDAzOyAgLyogUmVzZXQgdGFyZ2V0IGFib3ZlICovCiAJCQkvKiBJZiBieXRlcyA0LTcgYXJlIHplcm8sIGl0IG1lYW5zIHJlc2V0IHRoZSAqLwogCQkJLyogTHVuSUQgZGV2aWNlICovCkBAIC0yOTM2LDcgKzI5NzksNyBAQAogewogCXJlbW92ZVEoYyk7CiAJaWYgKGxpa2VseShjLT5jbWRfdHlwZSA9PSBDTURfU0NTSSkpCi0JCWNvbXBsZXRlX3Njc2lfY29tbWFuZChjLCAwLCByYXdfdGFnKTsKKwkJY29tcGxldGVfc2NzaV9jb21tYW5kKGMpOwogCWVsc2UgaWYgKGMtPmNtZF90eXBlID09IENNRF9JT0NUTF9QRU5EKQogCQljb21wbGV0ZShjLT53YWl0aW5nKTsKIH0KQEAgLTI5OTQsNiArMzAzNyw2MyBAQAogCXJldHVybiBuZXh0X2NvbW1hbmQoaCk7CiB9CiAKKy8qIFNvbWUgY29udHJvbGxlcnMsIGxpa2UgcDQwMCwgd2lsbCBnaXZlIHVzIG9uZSBpbnRlcnJ1cHQKKyAqIGFmdGVyIGEgc29mdCByZXNldCwgZXZlbiBpZiB3ZSB0dXJuZWQgaW50ZXJydXB0cyBvZmYuCisgKiBPbmx5IG5lZWQgdG8gY2hlY2sgZm9yIHRoaXMgaW4gdGhlIGhwc2FfeHh4X2Rpc2NhcmRfY29tcGxldGlvbnMKKyAqIGZ1bmN0aW9ucy4KKyAqLworc3RhdGljIGludCBpZ25vcmVfYm9ndXNfaW50ZXJydXB0KHN0cnVjdCBjdGxyX2luZm8gKmgpCit7CisJaWYgKGxpa2VseSghcmVzZXRfZGV2aWNlcykpCisJCXJldHVybiAwOworCisJaWYgKGxpa2VseShoLT5pbnRlcnJ1cHRzX2VuYWJsZWQpKQorCQlyZXR1cm4gMDsKKworCWRldl9pbmZvKCZoLT5wZGV2LT5kZXYsICJSZWNlaXZlZCBpbnRlcnJ1cHQgd2hpbGUgaW50ZXJydXB0cyBkaXNhYmxlZCAiCisJCSIoa25vd24gZmlybXdhcmUgYnVnLikgIElnbm9yaW5nLlxuIik7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlycXJldHVybl90IGhwc2FfaW50eF9kaXNjYXJkX2NvbXBsZXRpb25zKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgY3Rscl9pbmZvICpoID0gZGV2X2lkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHJhd190YWc7CisKKwlpZiAoaWdub3JlX2JvZ3VzX2ludGVycnVwdChoKSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJaWYgKGludGVycnVwdF9ub3RfZm9yX3VzKGgpKQorCQlyZXR1cm4gSVJRX05PTkU7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKKwl3aGlsZSAoaW50ZXJydXB0X3BlbmRpbmcoaCkpIHsKKwkJcmF3X3RhZyA9IGdldF9uZXh0X2NvbXBsZXRpb24oaCk7CisJCXdoaWxlIChyYXdfdGFnICE9IEZJRk9fRU1QVFkpCisJCQlyYXdfdGFnID0gbmV4dF9jb21tYW5kKGgpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaHBzYV9tc2l4X2Rpc2NhcmRfY29tcGxldGlvbnMoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBjdGxyX2luZm8gKmggPSBkZXZfaWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgcmF3X3RhZzsKKworCWlmIChpZ25vcmVfYm9ndXNfaW50ZXJydXB0KGgpKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOworCXJhd190YWcgPSBnZXRfbmV4dF9jb21wbGV0aW9uKGgpOworCXdoaWxlIChyYXdfdGFnICE9IEZJRk9fRU1QVFkpCisJCXJhd190YWcgPSBuZXh0X2NvbW1hbmQoaCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwogc3RhdGljIGlycXJldHVybl90IGRvX2hwc2FfaW50cl9pbnR4KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgY3Rscl9pbmZvICpoID0gZGV2X2lkOwpAQCAtMzEzMiwxMSArMzIzMiwxMCBAQAogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIGhwc2Ffc29mdF9yZXNldF9jb250cm9sbGVyKHApIGhwc2FfbWVzc2FnZShwLCAxLCAwKQogI2RlZmluZSBocHNhX25vb3AocCkgaHBzYV9tZXNzYWdlKHAsIDMsIDApCiAKIHN0YXRpYyBpbnQgaHBzYV9jb250cm9sbGVyX2hhcmRfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0Jdm9pZCAqIF9faW9tZW0gdmFkZHIsIGJvb2wgdXNlX2Rvb3JiZWxsKQorCXZvaWQgKiBfX2lvbWVtIHZhZGRyLCB1MzIgdXNlX2Rvb3JiZWxsKQogewogCXUxNiBwbWNzcjsKIAlpbnQgcG9zOwpAQCAtMzE0Nyw4ICszMjQ2LDcgQEAKIAkJICogb3RoZXIgd2F5IHVzaW5nIHRoZSBkb29yYmVsbCByZWdpc3Rlci4KIAkJICovCiAJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJ1c2luZyBkb29yYmVsbCB0byByZXNldCBjb250cm9sbGVyXG4iKTsKLQkJd3JpdGVsKERPT1JCRUxMX0NUTFJfUkVTRVQsIHZhZGRyICsgU0E1X0RPT1JCRUxMKTsKLQkJbXNsZWVwKDEwMDApOworCQl3cml0ZWwodXNlX2Rvb3JiZWxsLCB2YWRkciArIFNBNV9ET09SQkVMTCk7CiAJfSBlbHNlIHsgLyogVHJ5IHRvIGRvIGl0IHRoZSBQQ0kgcG93ZXIgc3RhdGUgd2F5ICovCiAKIAkJLyogUXVvdGluZyBmcm9tIHRoZSBPcGVuIENJU1MgU3BlY2lmaWNhdGlvbjogIlRoZSBQb3dlcgpAQCAtMzE3OSwxMiArMzI3Nyw2MyBAQAogCQlwbWNzciAmPSB+UENJX1BNX0NUUkxfU1RBVEVfTUFTSzsKIAkJcG1jc3IgfD0gUENJX0QwOwogCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgcG9zICsgUENJX1BNX0NUUkwsIHBtY3NyKTsKLQotCQltc2xlZXAoNTAwKTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBfX2RldmluaXQgdm9pZCBpbml0X2RyaXZlcl92ZXJzaW9uKGNoYXIgKmRyaXZlcl92ZXJzaW9uLCBpbnQgbGVuKQoreworCW1lbXNldChkcml2ZXJfdmVyc2lvbiwgMCwgbGVuKTsKKwlzdHJuY3B5KGRyaXZlcl92ZXJzaW9uLCAiaHBzYSAiIEhQU0FfRFJJVkVSX1ZFUlNJT04sIGxlbiAtIDEpOworfQorCitzdGF0aWMgX19kZXZpbml0IGludCB3cml0ZV9kcml2ZXJfdmVyX3RvX2NmZ3RhYmxlKAorCXN0cnVjdCBDZmdUYWJsZSBfX2lvbWVtICpjZmd0YWJsZSkKK3sKKwljaGFyICpkcml2ZXJfdmVyc2lvbjsKKwlpbnQgaSwgc2l6ZSA9IHNpemVvZihjZmd0YWJsZS0+ZHJpdmVyX3ZlcnNpb24pOworCisJZHJpdmVyX3ZlcnNpb24gPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghZHJpdmVyX3ZlcnNpb24pCisJCXJldHVybiAtRU5PTUVNOworCisJaW5pdF9kcml2ZXJfdmVyc2lvbihkcml2ZXJfdmVyc2lvbiwgc2l6ZSk7CisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwkJd3JpdGViKGRyaXZlcl92ZXJzaW9uW2ldLCAmY2ZndGFibGUtPmRyaXZlcl92ZXJzaW9uW2ldKTsKKwlrZnJlZShkcml2ZXJfdmVyc2lvbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2RldmluaXQgdm9pZCByZWFkX2RyaXZlcl92ZXJfZnJvbV9jZmd0YWJsZSgKKwlzdHJ1Y3QgQ2ZnVGFibGUgX19pb21lbSAqY2ZndGFibGUsIHVuc2lnbmVkIGNoYXIgKmRyaXZlcl92ZXIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGNmZ3RhYmxlLT5kcml2ZXJfdmVyc2lvbik7IGkrKykKKwkJZHJpdmVyX3ZlcltpXSA9IHJlYWRiKCZjZmd0YWJsZS0+ZHJpdmVyX3ZlcnNpb25baV0pOworfQorCitzdGF0aWMgX19kZXZpbml0IGludCBjb250cm9sbGVyX3Jlc2V0X2ZhaWxlZCgKKwlzdHJ1Y3QgQ2ZnVGFibGUgX19pb21lbSAqY2ZndGFibGUpCit7CisKKwljaGFyICpkcml2ZXJfdmVyLCAqb2xkX2RyaXZlcl92ZXI7CisJaW50IHJjLCBzaXplID0gc2l6ZW9mKGNmZ3RhYmxlLT5kcml2ZXJfdmVyc2lvbik7CisKKwlvbGRfZHJpdmVyX3ZlciA9IGttYWxsb2MoMiAqIHNpemUsIEdGUF9LRVJORUwpOworCWlmICghb2xkX2RyaXZlcl92ZXIpCisJCXJldHVybiAtRU5PTUVNOworCWRyaXZlcl92ZXIgPSBvbGRfZHJpdmVyX3ZlciArIHNpemU7CisKKwkvKiBBZnRlciBhIHJlc2V0LCB0aGUgMzIgYnl0ZXMgb2YgImRyaXZlciB2ZXJzaW9uIiBpbiB0aGUgY2ZndGFibGUKKwkgKiBzaG91bGQgaGF2ZSBiZWVuIGNoYW5nZWQsIG90aGVyd2lzZSB3ZSBrbm93IHRoZSByZXNldCBmYWlsZWQuCisJICovCisJaW5pdF9kcml2ZXJfdmVyc2lvbihvbGRfZHJpdmVyX3Zlciwgc2l6ZSk7CisJcmVhZF9kcml2ZXJfdmVyX2Zyb21fY2ZndGFibGUoY2ZndGFibGUsIGRyaXZlcl92ZXIpOworCXJjID0gIW1lbWNtcChkcml2ZXJfdmVyLCBvbGRfZHJpdmVyX3Zlciwgc2l6ZSk7CisJa2ZyZWUob2xkX2RyaXZlcl92ZXIpOworCXJldHVybiByYzsKK30KIC8qIFRoaXMgZG9lcyBhIGhhcmQgcmVzZXQgb2YgdGhlIGNvbnRyb2xsZXIgdXNpbmcgUENJIHBvd2VyIG1hbmFnZW1lbnQKICAqIHN0YXRlcyBvciB0aGUgdXNpbmcgdGhlIGRvb3JiZWxsIHJlZ2lzdGVyLgogICovCkBAIC0zMTk1LDEwICszMzQ0LDEwIEBACiAJdTY0IGNmZ19iYXNlX2FkZHJfaW5kZXg7CiAJdm9pZCBfX2lvbWVtICp2YWRkcjsKIAl1bnNpZ25lZCBsb25nIHBhZGRyOwotCXUzMiBtaXNjX2Z3X3N1cHBvcnQsIGFjdGl2ZV90cmFuc3BvcnQ7CisJdTMyIG1pc2NfZndfc3VwcG9ydDsKIAlpbnQgcmM7CiAJc3RydWN0IENmZ1RhYmxlIF9faW9tZW0gKmNmZ3RhYmxlOwotCWJvb2wgdXNlX2Rvb3JiZWxsOworCXUzMiB1c2VfZG9vcmJlbGw7CiAJdTMyIGJvYXJkX2lkOwogCXUxNiBjb21tYW5kX3JlZ2lzdGVyOwogCkBAIC0zMjE1LDIwICszMzY0LDE1IEBACiAJICogdXNpbmcgdGhlIGRvb3JiZWxsIHJlZ2lzdGVyLgogCSAqLwogCi0JLyogRXhjbHVkZSA2NDB4IGJvYXJkcy4gIFRoZXNlIGFyZSB0d28gcGNpIGRldmljZXMgaW4gb25lIHNsb3QKLQkgKiB3aGljaCBzaGFyZSBhIGJhdHRlcnkgYmFja2VkIGNhY2hlIG1vZHVsZS4gIE9uZSBjb250cm9scyB0aGUKLQkgKiBjYWNoZSwgdGhlIG90aGVyIGFjY2Vzc2VzIHRoZSBjYWNoZSB0aHJvdWdoIHRoZSBvbmUgdGhhdCBjb250cm9scwotCSAqIGl0LiAgSWYgd2UgcmVzZXQgdGhlIG9uZSBjb250cm9sbGluZyB0aGUgY2FjaGUsIHRoZSBvdGhlciB3aWxsCi0JICogbGlrZWx5IG5vdCBiZSBoYXBweS4gIEp1c3QgZm9yYmlkIHJlc2V0dGluZyB0aGlzIGNvbmpvaW5lZCBtZXNzLgotCSAqIFRoZSA2NDB4IGlzbid0IHJlYWxseSBzdXBwb3J0ZWQgYnkgaHBzYSBhbnl3YXkuCi0JICovCiAJcmMgPSBocHNhX2xvb2t1cF9ib2FyZF9pZChwZGV2LCAmYm9hcmRfaWQpOwotCWlmIChyYyA8IDApIHsKKwlpZiAocmMgPCAwIHx8ICFjdGxyX2lzX3Jlc2V0dGFibGUoYm9hcmRfaWQpKSB7CiAJCWRldl93YXJuKCZwZGV2LT5kZXYsICJOb3QgcmVzZXR0aW5nIGRldmljZS5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JaWYgKGJvYXJkX2lkID09IDB4NDA5QzBFMTEgfHwgYm9hcmRfaWQgPT0gMHg0MDlEMEUxMSkKLQkJcmV0dXJuIC1FTk9UU1VQUDsKKworCS8qIGlmIGNvbnRyb2xsZXIgaXMgc29mdC0gYnV0IG5vdCBoYXJkIHJlc2V0dGFibGUuLi4gKi8KKwlpZiAoIWN0bHJfaXNfaGFyZF9yZXNldHRhYmxlKGJvYXJkX2lkKSkKKwkJcmV0dXJuIC1FTk9UU1VQUDsgLyogdHJ5IHNvZnQgcmVzZXQgbGF0ZXIuICovCiAKIAkvKiBTYXZlIHRoZSBQQ0kgY29tbWFuZCByZWdpc3RlciAqLwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIDQsICZjb21tYW5kX3JlZ2lzdGVyKTsKQEAgLTMyNTcsMTAgKzM0MDEsMjggQEAKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIHVubWFwX3ZhZGRyOwogCX0KKwlyYyA9IHdyaXRlX2RyaXZlcl92ZXJfdG9fY2ZndGFibGUoY2ZndGFibGUpOworCWlmIChyYykKKwkJZ290byB1bm1hcF92YWRkcjsKIAotCS8qIElmIHJlc2V0IHZpYSBkb29yYmVsbCByZWdpc3RlciBpcyBzdXBwb3J0ZWQsIHVzZSB0aGF0LiAqLworCS8qIElmIHJlc2V0IHZpYSBkb29yYmVsbCByZWdpc3RlciBpcyBzdXBwb3J0ZWQsIHVzZSB0aGF0LgorCSAqIFRoZXJlIGFyZSB0d28gc3VjaCBtZXRob2RzLiAgRmF2b3IgdGhlIG5ld2VzdCBtZXRob2QuCisJICovCiAJbWlzY19md19zdXBwb3J0ID0gcmVhZGwoJmNmZ3RhYmxlLT5taXNjX2Z3X3N1cHBvcnQpOwotCXVzZV9kb29yYmVsbCA9IG1pc2NfZndfc3VwcG9ydCAmIE1JU0NfRldfRE9PUkJFTExfUkVTRVQ7CisJdXNlX2Rvb3JiZWxsID0gbWlzY19md19zdXBwb3J0ICYgTUlTQ19GV19ET09SQkVMTF9SRVNFVDI7CisJaWYgKHVzZV9kb29yYmVsbCkgeworCQl1c2VfZG9vcmJlbGwgPSBET09SQkVMTF9DVExSX1JFU0VUMjsKKwl9IGVsc2UgeworCQl1c2VfZG9vcmJlbGwgPSBtaXNjX2Z3X3N1cHBvcnQgJiBNSVNDX0ZXX0RPT1JCRUxMX1JFU0VUOworCQlpZiAodXNlX2Rvb3JiZWxsKSB7CisJCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiQ29udHJvbGxlciBjbGFpbXMgdGhhdCAiCisJCQkJIidCaXQgMiBkb29yYmVsbCByZXNldCcgaXMgIgorCQkJCSJzdXBwb3J0ZWQsIGJ1dCBub3QgJ2JpdCA1IGRvb3JiZWxsIHJlc2V0Jy4gICIKKwkJCQkiRmlybXdhcmUgdXBkYXRlIGlzIHJlY29tbWVuZGVkLlxuIik7CisJCQlyYyA9IC1FTk9UU1VQUDsgLyogdHJ5IHNvZnQgcmVzZXQgKi8KKwkJCWdvdG8gdW5tYXBfY2ZndGFibGU7CisJCX0KKwl9CiAKIAlyYyA9IGhwc2FfY29udHJvbGxlcl9oYXJkX3Jlc2V0KHBkZXYsIHZhZGRyLCB1c2VfZG9vcmJlbGwpOwogCWlmIChyYykKQEAgLTMyNzksMzAgKzM0NDEsMzIgQEAKIAltc2xlZXAoSFBTQV9QT1NUX1JFU0VUX1BBVVNFX01TRUNTKTsKIAogCS8qIFdhaXQgZm9yIGJvYXJkIHRvIGJlY29tZSBub3QgcmVhZHksIHRoZW4gcmVhZHkuICovCi0JZGV2X2luZm8oJnBkZXYtPmRldiwgIldhaXRpbmcgZm9yIGJvYXJkIHRvIGJlY29tZSByZWFkeS5cbiIpOworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJXYWl0aW5nIGZvciBib2FyZCB0byByZXNldC5cbiIpOwogCXJjID0gaHBzYV93YWl0X2Zvcl9ib2FyZF9zdGF0ZShwZGV2LCB2YWRkciwgQk9BUkRfTk9UX1JFQURZKTsKLQlpZiAocmMpCisJaWYgKHJjKSB7CiAJCWRldl93YXJuKCZwZGV2LT5kZXYsCi0JCQkiZmFpbGVkIHdhaXRpbmcgZm9yIGJvYXJkIHRvIGJlY29tZSBub3QgcmVhZHlcbiIpOworCQkJImZhaWxlZCB3YWl0aW5nIGZvciBib2FyZCB0byByZXNldC4iCisJCQkiIFdpbGwgdHJ5IHNvZnQgcmVzZXQuXG4iKTsKKwkJcmMgPSAtRU5PVFNVUFA7IC8qIE5vdCBleHBlY3RlZCwgYnV0IHRyeSBzb2Z0IHJlc2V0IGxhdGVyICovCisJCWdvdG8gdW5tYXBfY2ZndGFibGU7CisJfQogCXJjID0gaHBzYV93YWl0X2Zvcl9ib2FyZF9zdGF0ZShwZGV2LCB2YWRkciwgQk9BUkRfUkVBRFkpOwogCWlmIChyYykgewogCQlkZXZfd2FybigmcGRldi0+ZGV2LAotCQkJImZhaWxlZCB3YWl0aW5nIGZvciBib2FyZCB0byBiZWNvbWUgcmVhZHlcbiIpOworCQkJImZhaWxlZCB3YWl0aW5nIGZvciBib2FyZCB0byBiZWNvbWUgcmVhZHkgIgorCQkJImFmdGVyIGhhcmQgcmVzZXRcbiIpOwogCQlnb3RvIHVubWFwX2NmZ3RhYmxlOwogCX0KLQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiYm9hcmQgcmVhZHkuXG4iKTsKIAotCS8qIENvbnRyb2xsZXIgc2hvdWxkIGJlIGluIHNpbXBsZSBtb2RlIGF0IHRoaXMgcG9pbnQuICBJZiBpdCdzIG5vdCwKLQkgKiBJdCBtZWFucyB3ZSdyZSBvbiBvbmUgb2YgdGhvc2UgY29udHJvbGxlcnMgd2hpY2ggZG9lc24ndCBzdXBwb3J0Ci0JICogdGhlIGRvb3JiZWxsIHJlc2V0IG1ldGhvZCBhbmQgb24gd2hpY2ggdGhlIFBDSSBwb3dlciBtYW5hZ2VtZW50IHJlc2V0Ci0JICogbWV0aG9kIGRvZXNuJ3Qgd29yayAoUDgwMCwgZm9yIGV4YW1wbGUuKQotCSAqIEluIHRob3NlIGNhc2VzLCBkb24ndCB0cnkgdG8gcHJvY2VlZCwgYXMgaXQgZ2VuZXJhbGx5IGRvZXNuJ3Qgd29yay4KLQkgKi8KLQlhY3RpdmVfdHJhbnNwb3J0ID0gcmVhZGwoJmNmZ3RhYmxlLT5UcmFuc3BvcnRBY3RpdmUpOwotCWlmIChhY3RpdmVfdHJhbnNwb3J0ICYgUEVSRk9STUFOVF9NT0RFKSB7Ci0JCWRldl93YXJuKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gc3VjY2Vzc2Z1bGx5IHJlc2V0IGNvbnRyb2xsZXIsIgotCQkJIiBJZ25vcmluZyBjb250cm9sbGVyLlxuIik7Ci0JCXJjID0gLUVOT0RFVjsKKwlyYyA9IGNvbnRyb2xsZXJfcmVzZXRfZmFpbGVkKHZhZGRyKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIHVubWFwX2NmZ3RhYmxlOworCWlmIChyYykgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIHN1Y2Nlc3NmdWxseSByZXNldCAiCisJCQkiY29udHJvbGxlci4gV2lsbCB0cnkgc29mdCByZXNldC5cbiIpOworCQlyYyA9IC1FTk9UU1VQUDsKKwl9IGVsc2UgeworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiYm9hcmQgcmVhZHkgYWZ0ZXIgaGFyZCByZXNldC5cbiIpOwogCX0KIAogdW5tYXBfY2ZndGFibGU6CkBAIC0zNTQzLDYgKzM3MDcsOSBAQAogCQkgICAgICAgY2ZnX2Jhc2VfYWRkcl9pbmRleCkgKyBjZmdfb2Zmc2V0LCBzaXplb2YoKmgtPmNmZ3RhYmxlKSk7CiAJaWYgKCFoLT5jZmd0YWJsZSkKIAkJcmV0dXJuIC1FTk9NRU07CisJcmMgPSB3cml0ZV9kcml2ZXJfdmVyX3RvX2NmZ3RhYmxlKGgtPmNmZ3RhYmxlKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAkvKiBGaW5kIHBlcmZvcm1hbnQgbW9kZSB0YWJsZS4gKi8KIAl0cmFuc19vZmZzZXQgPSByZWFkbCgmaC0+Y2ZndGFibGUtPlRyYW5zTWV0aG9kT2Zmc2V0KTsKIAloLT50cmFuc3RhYmxlID0gcmVtYXBfcGNpX21lbShwY2lfcmVzb3VyY2Vfc3RhcnQoaC0+cGRldiwKQEAgLTM3NzcsMTEgKzM5NDQsMTIgQEAKIAkgKiBkdWUgdG8gY29uY2VybnMgYWJvdXQgc2hhcmVkIGJid2MgYmV0d2VlbiA2NDAyLzY0MDQgcGFpci4KIAkgKi8KIAlpZiAocmMgPT0gLUVOT1RTVVBQKQotCQlyZXR1cm4gMDsgLyoganVzdCB0cnkgdG8gZG8gdGhlIGtkdW1wIGFueWhvdy4gKi8KKwkJcmV0dXJuIHJjOyAvKiBqdXN0IHRyeSB0byBkbyB0aGUga2R1bXAgYW55aG93LiAqLwogCWlmIChyYykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBOb3cgdHJ5IHRvIGdldCB0aGUgY29udHJvbGxlciB0byByZXNwb25kIHRvIGEgbm8tb3AgKi8KKwlkZXZfd2FybigmcGRldi0+ZGV2LCAiV2FpdGluZyBmb3IgY29udHJvbGxlciB0byByZXNwb25kIHRvIG5vLW9wXG4iKTsKIAlmb3IgKGkgPSAwOyBpIDwgSFBTQV9QT1NUX1JFU0VUX05PT1BfUkVUUklFUzsgaSsrKSB7CiAJCWlmIChocHNhX25vb3AocGRldikgPT0gMCkKIAkJCWJyZWFrOwpAQCAtMzc5MiwxOCArMzk2MCwxMzMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIF9fZGV2aW5pdCBpbnQgaHBzYV9hbGxvY2F0ZV9jbWRfcG9vbChzdHJ1Y3QgY3Rscl9pbmZvICpoKQoreworCWgtPmNtZF9wb29sX2JpdHMgPSBremFsbG9jKAorCQlESVZfUk9VTkRfVVAoaC0+bnJfY21kcywgQklUU19QRVJfTE9ORykgKgorCQlzaXplb2YodW5zaWduZWQgbG9uZyksIEdGUF9LRVJORUwpOworCWgtPmNtZF9wb29sID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaC0+cGRldiwKKwkJICAgIGgtPm5yX2NtZHMgKiBzaXplb2YoKmgtPmNtZF9wb29sKSwKKwkJICAgICYoaC0+Y21kX3Bvb2xfZGhhbmRsZSkpOworCWgtPmVycmluZm9fcG9vbCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGgtPnBkZXYsCisJCSAgICBoLT5ucl9jbWRzICogc2l6ZW9mKCpoLT5lcnJpbmZvX3Bvb2wpLAorCQkgICAgJihoLT5lcnJpbmZvX3Bvb2xfZGhhbmRsZSkpOworCWlmICgoaC0+Y21kX3Bvb2xfYml0cyA9PSBOVUxMKQorCSAgICB8fCAoaC0+Y21kX3Bvb2wgPT0gTlVMTCkKKwkgICAgfHwgKGgtPmVycmluZm9fcG9vbCA9PSBOVUxMKSkgeworCQlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5IGluICVzIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhwc2FfZnJlZV9jbWRfcG9vbChzdHJ1Y3QgY3Rscl9pbmZvICpoKQoreworCWtmcmVlKGgtPmNtZF9wb29sX2JpdHMpOworCWlmIChoLT5jbWRfcG9vbCkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChoLT5wZGV2LAorCQkJICAgIGgtPm5yX2NtZHMgKiBzaXplb2Yoc3RydWN0IENvbW1hbmRMaXN0KSwKKwkJCSAgICBoLT5jbWRfcG9vbCwgaC0+Y21kX3Bvb2xfZGhhbmRsZSk7CisJaWYgKGgtPmVycmluZm9fcG9vbCkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChoLT5wZGV2LAorCQkJICAgIGgtPm5yX2NtZHMgKiBzaXplb2Yoc3RydWN0IEVycm9ySW5mbyksCisJCQkgICAgaC0+ZXJyaW5mb19wb29sLAorCQkJICAgIGgtPmVycmluZm9fcG9vbF9kaGFuZGxlKTsKK30KKworc3RhdGljIGludCBocHNhX3JlcXVlc3RfaXJxKHN0cnVjdCBjdGxyX2luZm8gKmgsCisJaXJxcmV0dXJuX3QgKCptc2l4aGFuZGxlcikoaW50LCB2b2lkICopLAorCWlycXJldHVybl90ICgqaW50eGhhbmRsZXIpKGludCwgdm9pZCAqKSkKK3sKKwlpbnQgcmM7CisKKwlpZiAoaC0+bXNpeF92ZWN0b3IgfHwgaC0+bXNpX3ZlY3RvcikKKwkJcmMgPSByZXF1ZXN0X2lycShoLT5pbnRyW2gtPmludHJfbW9kZV0sIG1zaXhoYW5kbGVyLAorCQkJCUlSUUZfRElTQUJMRUQsIGgtPmRldm5hbWUsIGgpOworCWVsc2UKKwkJcmMgPSByZXF1ZXN0X2lycShoLT5pbnRyW2gtPmludHJfbW9kZV0sIGludHhoYW5kbGVyLAorCQkJCUlSUUZfRElTQUJMRUQsIGgtPmRldm5hbWUsIGgpOworCWlmIChyYykgeworCQlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJ1bmFibGUgdG8gZ2V0IGlycSAlZCBmb3IgJXNcbiIsCisJCSAgICAgICBoLT5pbnRyW2gtPmludHJfbW9kZV0sIGgtPmRldm5hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGhwc2Ffa2R1bXBfc29mdF9yZXNldChzdHJ1Y3QgY3Rscl9pbmZvICpoKQoreworCWlmIChocHNhX3NlbmRfaG9zdF9yZXNldChoLCBSQUlEX0NUTFJfTFVOSUQsCisJCUhQU0FfUkVTRVRfVFlQRV9DT05UUk9MTEVSKSkgeworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiUmVzZXR0aW5nIGFycmF5IGNvbnRyb2xsZXIgZmFpbGVkLlxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWRldl9pbmZvKCZoLT5wZGV2LT5kZXYsICJXYWl0aW5nIGZvciBib2FyZCB0byBzb2Z0IHJlc2V0LlxuIik7CisJaWYgKGhwc2Ffd2FpdF9mb3JfYm9hcmRfc3RhdGUoaC0+cGRldiwgaC0+dmFkZHIsIEJPQVJEX05PVF9SRUFEWSkpIHsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgIlNvZnQgcmVzZXQgaGFkIG5vIGVmZmVjdC5cbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZGV2X2luZm8oJmgtPnBkZXYtPmRldiwgIkJvYXJkIHJlc2V0LCBhd2FpdGluZyBSRUFEWSBzdGF0dXMuXG4iKTsKKwlpZiAoaHBzYV93YWl0X2Zvcl9ib2FyZF9zdGF0ZShoLT5wZGV2LCBoLT52YWRkciwgQk9BUkRfUkVBRFkpKSB7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJCb2FyZCBmYWlsZWQgdG8gYmVjb21lIHJlYWR5ICIKKwkJCSJhZnRlciBzb2Z0IHJlc2V0LlxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaHBzYV91bmRvX2FsbG9jYXRpb25zX2FmdGVyX2tkdW1wX3NvZnRfcmVzZXQoc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwlmcmVlX2lycShoLT5pbnRyW2gtPmludHJfbW9kZV0sIGgpOworI2lmZGVmIENPTkZJR19QQ0lfTVNJCisJaWYgKGgtPm1zaXhfdmVjdG9yKQorCQlwY2lfZGlzYWJsZV9tc2l4KGgtPnBkZXYpOworCWVsc2UgaWYgKGgtPm1zaV92ZWN0b3IpCisJCXBjaV9kaXNhYmxlX21zaShoLT5wZGV2KTsKKyNlbmRpZiAvKiBDT05GSUdfUENJX01TSSAqLworCWhwc2FfZnJlZV9zZ19jaGFpbl9ibG9ja3MoaCk7CisJaHBzYV9mcmVlX2NtZF9wb29sKGgpOworCWtmcmVlKGgtPmJsb2NrRmV0Y2hUYWJsZSk7CisJcGNpX2ZyZWVfY29uc2lzdGVudChoLT5wZGV2LCBoLT5yZXBseV9wb29sX3NpemUsCisJCWgtPnJlcGx5X3Bvb2wsIGgtPnJlcGx5X3Bvb2xfZGhhbmRsZSk7CisJaWYgKGgtPnZhZGRyKQorCQlpb3VubWFwKGgtPnZhZGRyKTsKKwlpZiAoaC0+dHJhbnN0YWJsZSkKKwkJaW91bm1hcChoLT50cmFuc3RhYmxlKTsKKwlpZiAoaC0+Y2ZndGFibGUpCisJCWlvdW5tYXAoaC0+Y2ZndGFibGUpOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMoaC0+cGRldik7CisJa2ZyZWUoaCk7Cit9CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGhwc2FfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJaW50IGRhYywgcmM7CiAJc3RydWN0IGN0bHJfaW5mbyAqaDsKKwlpbnQgdHJ5X3NvZnRfcmVzZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAobnVtYmVyX29mX2NvbnRyb2xsZXJzID09IDApCiAJCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIlxuIik7CiAKIAlyYyA9IGhwc2FfaW5pdF9yZXNldF9kZXZpY2VzKHBkZXYpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOworCWlmIChyYykgeworCQlpZiAocmMgIT0gLUVOT1RTVVBQKQorCQkJcmV0dXJuIHJjOworCQkvKiBJZiB0aGUgcmVzZXQgZmFpbHMgaW4gYSBwYXJ0aWN1bGFyIHdheSAoaXQgaGFzIG5vIHdheSB0byBkbworCQkgKiBhIHByb3BlciBoYXJkIHJlc2V0LCBzbyByZXR1cm5zIC1FTk9UU1VQUCkgd2UgY2FuIHRyeSB0byBkbworCQkgKiBhIHNvZnQgcmVzZXQgb25jZSB3ZSBnZXQgdGhlIGNvbnRyb2xsZXIgY29uZmlndXJlZCB1cCB0byB0aGUKKwkJICogcG9pbnQgdGhhdCBpdCBjYW4gYWNjZXB0IGEgY29tbWFuZC4KKwkJICovCisJCXRyeV9zb2Z0X3Jlc2V0ID0gMTsKKwkJcmMgPSAwOworCX0KKworcmVpbml0X2FmdGVyX3NvZnRfcmVzZXQ6CiAKIAkvKiBDb21tYW5kIHN0cnVjdHVyZXMgbXVzdCBiZSBhbGlnbmVkIG9uIGEgMzItYnl0ZSBib3VuZGFyeSBiZWNhdXNlCiAJICogdGhlIDUgbG93ZXIgYml0cyBvZiB0aGUgYWRkcmVzcyBhcmUgdXNlZCBieSB0aGUgaGFyZHdhcmUuIGFuZCBieQpAQCAtMzg0Nyw1NCArNDEzMCw4MiBAQAogCS8qIG1ha2Ugc3VyZSB0aGUgYm9hcmQgaW50ZXJydXB0cyBhcmUgb2ZmICovCiAJaC0+YWNjZXNzLnNldF9pbnRyX21hc2soaCwgSFBTQV9JTlRSX09GRik7CiAKLQlpZiAoaC0+bXNpeF92ZWN0b3IgfHwgaC0+bXNpX3ZlY3RvcikKLQkJcmMgPSByZXF1ZXN0X2lycShoLT5pbnRyW2gtPmludHJfbW9kZV0sIGRvX2hwc2FfaW50cl9tc2ksCi0JCQkJSVJRRl9ESVNBQkxFRCwgaC0+ZGV2bmFtZSwgaCk7Ci0JZWxzZQotCQlyYyA9IHJlcXVlc3RfaXJxKGgtPmludHJbaC0+aW50cl9tb2RlXSwgZG9faHBzYV9pbnRyX2ludHgsCi0JCQkJSVJRRl9ESVNBQkxFRCwgaC0+ZGV2bmFtZSwgaCk7Ci0JaWYgKHJjKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBnZXQgaXJxICVkIGZvciAlc1xuIiwKLQkJICAgICAgIGgtPmludHJbaC0+aW50cl9tb2RlXSwgaC0+ZGV2bmFtZSk7CisJaWYgKGhwc2FfcmVxdWVzdF9pcnEoaCwgZG9faHBzYV9pbnRyX21zaSwgZG9faHBzYV9pbnRyX2ludHgpKQogCQlnb3RvIGNsZWFuMjsKLQl9Ci0KIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXM6IDwweCV4PiBhdCBJUlEgJWQlcyB1c2luZyBEQUNcbiIsCiAJICAgICAgIGgtPmRldm5hbWUsIHBkZXYtPmRldmljZSwKIAkgICAgICAgaC0+aW50cltoLT5pbnRyX21vZGVdLCBkYWMgPyAiIiA6ICIgbm90Iik7Ci0KLQloLT5jbWRfcG9vbF9iaXRzID0KLQkgICAga21hbGxvYygoKGgtPm5yX2NtZHMgKyBCSVRTX1BFUl9MT05HIC0KLQkJICAgICAgMSkgLyBCSVRTX1BFUl9MT05HKSAqIHNpemVvZih1bnNpZ25lZCBsb25nKSwgR0ZQX0tFUk5FTCk7Ci0JaC0+Y21kX3Bvb2wgPSBwY2lfYWxsb2NfY29uc2lzdGVudChoLT5wZGV2LAotCQkgICAgaC0+bnJfY21kcyAqIHNpemVvZigqaC0+Y21kX3Bvb2wpLAotCQkgICAgJihoLT5jbWRfcG9vbF9kaGFuZGxlKSk7Ci0JaC0+ZXJyaW5mb19wb29sID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaC0+cGRldiwKLQkJICAgIGgtPm5yX2NtZHMgKiBzaXplb2YoKmgtPmVycmluZm9fcG9vbCksCi0JCSAgICAmKGgtPmVycmluZm9fcG9vbF9kaGFuZGxlKSk7Ci0JaWYgKChoLT5jbWRfcG9vbF9iaXRzID09IE5VTEwpCi0JICAgIHx8IChoLT5jbWRfcG9vbCA9PSBOVUxMKQotCSAgICB8fCAoaC0+ZXJyaW5mb19wb29sID09IE5VTEwpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIm91dCBvZiBtZW1vcnkiKTsKLQkJcmMgPSAtRU5PTUVNOworCWlmIChocHNhX2FsbG9jYXRlX2NtZF9wb29sKGgpKQogCQlnb3RvIGNsZWFuNDsKLQl9CiAJaWYgKGhwc2FfYWxsb2NhdGVfc2dfY2hhaW5fYmxvY2tzKGgpKQogCQlnb3RvIGNsZWFuNDsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZoLT5zY2FuX3dhaXRfcXVldWUpOwogCWgtPnNjYW5fZmluaXNoZWQgPSAxOyAvKiBubyBzY2FuIGN1cnJlbnRseSBpbiBwcm9ncmVzcyAqLwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGgpOwotCW1lbXNldChoLT5jbWRfcG9vbF9iaXRzLCAwLAotCSAgICAgICAoKGgtPm5yX2NtZHMgKyBCSVRTX1BFUl9MT05HIC0KLQkJIDEpIC8gQklUU19QRVJfTE9ORykgKiBzaXplb2YodW5zaWduZWQgbG9uZykpOworCWgtPm5kZXZpY2VzID0gMDsKKwloLT5zY3NpX2hvc3QgPSBOVUxMOworCXNwaW5fbG9ja19pbml0KCZoLT5kZXZsb2NrKTsKKwlocHNhX3B1dF9jdGxyX2ludG9fcGVyZm9ybWFudF9tb2RlKGgpOwogCi0JaHBzYV9zY3NpX3NldHVwKGgpOworCS8qIEF0IHRoaXMgcG9pbnQsIHRoZSBjb250cm9sbGVyIGlzIHJlYWR5IHRvIHRha2UgY29tbWFuZHMuCisJICogTm93LCBpZiByZXNldF9kZXZpY2VzIGFuZCB0aGUgaGFyZCByZXNldCBkaWRuJ3Qgd29yaywgdHJ5CisJICogdGhlIHNvZnQgcmVzZXQgYW5kIHNlZSBpZiB0aGF0IHdvcmtzLgorCSAqLworCWlmICh0cnlfc29mdF9yZXNldCkgeworCisJCS8qIFRoaXMgaXMga2luZCBvZiBncm9zcy4gIFdlIG1heSBvciBtYXkgbm90IGdldCBhIGNvbXBsZXRpb24KKwkJICogZnJvbSB0aGUgc29mdCByZXNldCBjb21tYW5kLCBhbmQgaWYgd2UgZG8sIHRoZW4gdGhlIHZhbHVlCisJCSAqIGZyb20gdGhlIGZpZm8gbWF5IG9yIG1heSBub3QgYmUgdmFsaWQuICBTbywgd2Ugd2FpdCAxMCBzZWNzCisJCSAqIGFmdGVyIHRoZSByZXNldCB0aHJvd2luZyBhd2F5IGFueSBjb21wbGV0aW9ucyB3ZSBnZXQgZHVyaW5nCisJCSAqIHRoYXQgdGltZS4gIFVucmVnaXN0ZXIgdGhlIGludGVycnVwdCBoYW5kbGVyIGFuZCByZWdpc3RlcgorCQkgKiBmYWtlIG9uZXMgdG8gc2Nvb3AgdXAgYW55IHJlc2lkdWFsIGNvbXBsZXRpb25zLgorCQkgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKKwkJaC0+YWNjZXNzLnNldF9pbnRyX21hc2soaCwgSFBTQV9JTlRSX09GRik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKKwkJZnJlZV9pcnEoaC0+aW50cltoLT5pbnRyX21vZGVdLCBoKTsKKwkJcmMgPSBocHNhX3JlcXVlc3RfaXJxKGgsIGhwc2FfbXNpeF9kaXNjYXJkX2NvbXBsZXRpb25zLAorCQkJCQlocHNhX2ludHhfZGlzY2FyZF9jb21wbGV0aW9ucyk7CisJCWlmIChyYykgeworCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0X2lycSBhZnRlciAiCisJCQkJInNvZnQgcmVzZXQuXG4iKTsKKwkJCWdvdG8gY2xlYW40OworCQl9CisKKwkJcmMgPSBocHNhX2tkdW1wX3NvZnRfcmVzZXQoaCk7CisJCWlmIChyYykKKwkJCS8qIE5laXRoZXIgaGFyZCBub3Igc29mdCByZXNldCB3b3JrZWQsIHdlJ3JlIGhvc2VkLiAqLworCQkJZ290byBjbGVhbjQ7CisKKwkJZGV2X2luZm8oJmgtPnBkZXYtPmRldiwgIkJvYXJkIFJFQURZLlxuIik7CisJCWRldl9pbmZvKCZoLT5wZGV2LT5kZXYsCisJCQkiV2FpdGluZyBmb3Igc3RhbGUgY29tcGxldGlvbnMgdG8gZHJhaW4uXG4iKTsKKwkJaC0+YWNjZXNzLnNldF9pbnRyX21hc2soaCwgSFBTQV9JTlRSX09OKTsKKwkJbXNsZWVwKDEwMDAwKTsKKwkJaC0+YWNjZXNzLnNldF9pbnRyX21hc2soaCwgSFBTQV9JTlRSX09GRik7CisKKwkJcmMgPSBjb250cm9sbGVyX3Jlc2V0X2ZhaWxlZChoLT5jZmd0YWJsZSk7CisJCWlmIChyYykKKwkJCWRldl9pbmZvKCZoLT5wZGV2LT5kZXYsCisJCQkJIlNvZnQgcmVzZXQgYXBwZWFycyB0byBoYXZlIGZhaWxlZC5cbiIpOworCisJCS8qIHNpbmNlIHRoZSBjb250cm9sbGVyJ3MgcmVzZXQsIHdlIGhhdmUgdG8gZ28gYmFjayBhbmQgcmUtaW5pdAorCQkgKiBldmVyeXRoaW5nLiAgRWFzaWVzdCB0byBqdXN0IGZvcmdldCB3aGF0IHdlJ3ZlIGRvbmUgYW5kIGRvIGl0CisJCSAqIGFsbCBvdmVyIGFnYWluLgorCQkgKi8KKwkJaHBzYV91bmRvX2FsbG9jYXRpb25zX2FmdGVyX2tkdW1wX3NvZnRfcmVzZXQoaCk7CisJCXRyeV9zb2Z0X3Jlc2V0ID0gMDsKKwkJaWYgKHJjKQorCQkJLyogZG9uJ3QgZ28gdG8gY2xlYW40LCB3ZSBhbHJlYWR5IHVuYWxsb2NhdGVkICovCisJCQlyZXR1cm4gLUVOT0RFVjsKKworCQlnb3RvIHJlaW5pdF9hZnRlcl9zb2Z0X3Jlc2V0OworCX0KIAogCS8qIFR1cm4gdGhlIGludGVycnVwdHMgb24gc28gd2UgY2FuIHNlcnZpY2UgcmVxdWVzdHMgKi8KIAloLT5hY2Nlc3Muc2V0X2ludHJfbWFzayhoLCBIUFNBX0lOVFJfT04pOwogCi0JaHBzYV9wdXRfY3Rscl9pbnRvX3BlcmZvcm1hbnRfbW9kZShoKTsKIAlocHNhX2hiYV9pbnF1aXJ5KGgpOwogCWhwc2FfcmVnaXN0ZXJfc2NzaShoKTsJLyogaG9vayBvdXJzZWx2ZXMgaW50byBTQ1NJIHN1YnN5c3RlbSAqLwogCWgtPmJ1c3lfaW5pdGlhbGl6aW5nID0gMDsKQEAgLTM5MDIsMTYgKzQyMTMsNyBAQAogCiBjbGVhbjQ6CiAJaHBzYV9mcmVlX3NnX2NoYWluX2Jsb2NrcyhoKTsKLQlrZnJlZShoLT5jbWRfcG9vbF9iaXRzKTsKLQlpZiAoaC0+Y21kX3Bvb2wpCi0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoaC0+cGRldiwKLQkJCSAgICBoLT5ucl9jbWRzICogc2l6ZW9mKHN0cnVjdCBDb21tYW5kTGlzdCksCi0JCQkgICAgaC0+Y21kX3Bvb2wsIGgtPmNtZF9wb29sX2RoYW5kbGUpOwotCWlmIChoLT5lcnJpbmZvX3Bvb2wpCi0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoaC0+cGRldiwKLQkJCSAgICBoLT5ucl9jbWRzICogc2l6ZW9mKHN0cnVjdCBFcnJvckluZm8pLAotCQkJICAgIGgtPmVycmluZm9fcG9vbCwKLQkJCSAgICBoLT5lcnJpbmZvX3Bvb2xfZGhhbmRsZSk7CisJaHBzYV9mcmVlX2NtZF9wb29sKGgpOwogCWZyZWVfaXJxKGgtPmludHJbaC0+aW50cl9tb2RlXSwgaCk7CiBjbGVhbjI6CiBjbGVhbjE6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaHBzYS5oIGIvZHJpdmVycy9zY3NpL2hwc2EuaAppbmRleCA2MjFhMTUzLi42ZDhkY2Q0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaHBzYS5oCisrKyBiL2RyaXZlcnMvc2NzaS9ocHNhLmgKQEAgLTEyNywxMCArMTI3LDEyIEBACiB9OwogI2RlZmluZSBIUFNBX0FCT1JUX01TRyAwCiAjZGVmaW5lIEhQU0FfREVWSUNFX1JFU0VUX01TRyAxCi0jZGVmaW5lIEhQU0FfQlVTX1JFU0VUX01TRyAyCi0jZGVmaW5lIEhQU0FfSE9TVF9SRVNFVF9NU0cgMworI2RlZmluZSBIUFNBX1JFU0VUX1RZUEVfQ09OVFJPTExFUiAweDAwCisjZGVmaW5lIEhQU0FfUkVTRVRfVFlQRV9CVVMgMHgwMQorI2RlZmluZSBIUFNBX1JFU0VUX1RZUEVfVEFSR0VUIDB4MDMKKyNkZWZpbmUgSFBTQV9SRVNFVF9UWVBFX0xVTiAweDA0CiAjZGVmaW5lIEhQU0FfTVNHX1NFTkRfUkVUUllfTElNSVQgMTAKLSNkZWZpbmUgSFBTQV9NU0dfU0VORF9SRVRSWV9JTlRFUlZBTF9NU0VDUyAxMDAwCisjZGVmaW5lIEhQU0FfTVNHX1NFTkRfUkVUUllfSU5URVJWQUxfTVNFQ1MgKDEwMDAwKQogCiAvKiBNYXhpbXVtIHRpbWUgaW4gc2Vjb25kcyBkcml2ZXIgd2lsbCB3YWl0IGZvciBjb21tYW5kIGNvbXBsZXRpb25zCiAgKiB3aGVuIHBvbGxpbmcgYmVmb3JlIGdpdmluZyB1cC4KQEAgLTE1NSw3ICsxNTcsNyBAQAogICogSFBTQV9CT0FSRF9SRUFEWV9JVEVSQVRJT05TIGFyZSBkZXJpdmVkIGZyb20gdGhvc2UuCiAgKi8KICNkZWZpbmUgSFBTQV9CT0FSRF9SRUFEWV9XQUlUX1NFQ1MgKDEyMCkKLSNkZWZpbmUgSFBTQV9CT0FSRF9OT1RfUkVBRFlfV0FJVF9TRUNTICgxMCkKKyNkZWZpbmUgSFBTQV9CT0FSRF9OT1RfUkVBRFlfV0FJVF9TRUNTICgxMDApCiAjZGVmaW5lIEhQU0FfQk9BUkRfUkVBRFlfUE9MTF9JTlRFUlZBTF9NU0VDUyAoMTAwKQogI2RlZmluZSBIUFNBX0JPQVJEX1JFQURZX1BPTExfSU5URVJWQUwgXAogCSgoSFBTQV9CT0FSRF9SRUFEWV9QT0xMX0lOVEVSVkFMX01TRUNTICogSFopIC8gMTAwMCkKQEAgLTIxMiw2ICsyMTQsNyBAQAogCWRldl9kYmcoJmgtPnBkZXYtPmRldiwgIlNlbmRpbmcgJXgsIHRhZyA9ICV4XG4iLCBjLT5idXNhZGRyLAogCQljLT5IZWFkZXIuVGFnLmxvd2VyKTsKIAl3cml0ZWwoYy0+YnVzYWRkciwgaC0+dmFkZHIgKyBTQTVfUkVRVUVTVF9QT1JUX09GRlNFVCk7CisJKHZvaWQpIHJlYWRsKGgtPnZhZGRyICsgU0E1X1JFUVVFU1RfUE9SVF9PRkZTRVQpOwogCWgtPmNvbW1hbmRzX291dHN0YW5kaW5nKys7CiAJaWYgKGgtPmNvbW1hbmRzX291dHN0YW5kaW5nID4gaC0+bWF4X291dHN0YW5kaW5nKQogCQloLT5tYXhfb3V0c3RhbmRpbmcgPSBoLT5jb21tYW5kc19vdXRzdGFuZGluZzsKQEAgLTIyNywxMCArMjMwLDEyIEBACiAJaWYgKHZhbCkgeyAvKiBUdXJuIGludGVycnVwdHMgb24gKi8KIAkJaC0+aW50ZXJydXB0c19lbmFibGVkID0gMTsKIAkJd3JpdGVsKDAsIGgtPnZhZGRyICsgU0E1X1JFUExZX0lOVFJfTUFTS19PRkZTRVQpOworCQkodm9pZCkgcmVhZGwoaC0+dmFkZHIgKyBTQTVfUkVQTFlfSU5UUl9NQVNLX09GRlNFVCk7CiAJfSBlbHNlIHsgLyogVHVybiB0aGVtIG9mZiAqLwogCQloLT5pbnRlcnJ1cHRzX2VuYWJsZWQgPSAwOwogCQl3cml0ZWwoU0E1X0lOVFJfT0ZGLAogCQkJaC0+dmFkZHIgKyBTQTVfUkVQTFlfSU5UUl9NQVNLX09GRlNFVCk7CisJCSh2b2lkKSByZWFkbChoLT52YWRkciArIFNBNV9SRVBMWV9JTlRSX01BU0tfT0ZGU0VUKTsKIAl9CiB9CiAKQEAgLTIzOSwxMCArMjQ0LDEyIEBACiAJaWYgKHZhbCkgeyAvKiB0dXJuIG9uIGludGVycnVwdHMgKi8KIAkJaC0+aW50ZXJydXB0c19lbmFibGVkID0gMTsKIAkJd3JpdGVsKDAsIGgtPnZhZGRyICsgU0E1X1JFUExZX0lOVFJfTUFTS19PRkZTRVQpOworCQkodm9pZCkgcmVhZGwoaC0+dmFkZHIgKyBTQTVfUkVQTFlfSU5UUl9NQVNLX09GRlNFVCk7CiAJfSBlbHNlIHsKIAkJaC0+aW50ZXJydXB0c19lbmFibGVkID0gMDsKIAkJd3JpdGVsKFNBNV9QRVJGX0lOVFJfT0ZGLAogCQkJaC0+dmFkZHIgKyBTQTVfUkVQTFlfSU5UUl9NQVNLX09GRlNFVCk7CisJCSh2b2lkKSByZWFkbChoLT52YWRkciArIFNBNV9SRVBMWV9JTlRSX01BU0tfT0ZGU0VUKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ocHNhX2NtZC5oIGIvZHJpdmVycy9zY3NpL2hwc2FfY21kLmgKaW5kZXggMTg0NjQ5MC4uNTVkNzQxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2hwc2FfY21kLmgKKysrIGIvZHJpdmVycy9zY3NpL2hwc2FfY21kLmgKQEAgLTEwMSw2ICsxMDEsNyBAQAogI2RlZmluZSBDRkdUQkxfQ2hhbmdlUmVxICAgICAgICAweDAwMDAwMDAxbAogI2RlZmluZSBDRkdUQkxfQWNjQ21kcyAgICAgICAgICAweDAwMDAwMDAxbAogI2RlZmluZSBET09SQkVMTF9DVExSX1JFU0VUCTB4MDAwMDAwMDRsCisjZGVmaW5lIERPT1JCRUxMX0NUTFJfUkVTRVQyCTB4MDAwMDAwMjBsCiAKICNkZWZpbmUgQ0ZHVEJMX1RyYW5zX1NpbXBsZSAgICAgMHgwMDAwMDAwMmwKICNkZWZpbmUgQ0ZHVEJMX1RyYW5zX1BlcmZvcm1hbnQgMHgwMDAwMDAwNGwKQEAgLTI1NiwxNCArMjU3LDYgQEAKICNkZWZpbmUgQ01EX0lPQ1RMX1BFTkQgIDB4MDEKICNkZWZpbmUgQ01EX1NDU0kJMHgwMwogCi0vKiBUaGlzIHN0cnVjdHVyZSBuZWVkcyB0byBiZSBkaXZpc2libGUgYnkgMzIgZm9yIG5ldwotICogaW5kZXhpbmcgbWV0aG9kIGFuZCBwZXJmb3JtYW50IG1vZGUuCi0gKi8KLSNkZWZpbmUgUEFEMzIgMzIKLSNkZWZpbmUgUEFENjRESUZGIDAKLSNkZWZpbmUgVVNFRVhUUkEgKChzaXplb2Yodm9pZCAqKSAtIDQpLzQpCi0jZGVmaW5lIFBBRFNJWkUgKFBBRDMyICsgUEFENjRESUZGICogVVNFRVhUUkEpCi0KICNkZWZpbmUgRElSRUNUX0xPT0tVUF9TSElGVCA1CiAjZGVmaW5lIERJUkVDVF9MT09LVVBfQklUIDB4MTAKICNkZWZpbmUgRElSRUNUX0xPT0tVUF9NQVNLICh+KCgxIDw8IERJUkVDVF9MT09LVVBfU0hJRlQpIC0gMSkpCkBAIC0zNDUsNiArMzM4LDggQEAKIAl1OAkJcmVzZXJ2ZWRbMHg3OCAtIDB4NThdOwogCXUzMgkJbWlzY19md19zdXBwb3J0OyAvKiBvZmZzZXQgMHg3OCAqLwogI2RlZmluZQkJCU1JU0NfRldfRE9PUkJFTExfUkVTRVQgKDB4MDIpCisjZGVmaW5lCQkJTUlTQ19GV19ET09SQkVMTF9SRVNFVDIgKDB4MDEwKQorCXU4CQlkcml2ZXJfdmVyc2lvblszMl07CiB9OwogCiAjZGVmaW5lIE5VTV9CTE9DS0ZFVENIX0VOVFJJRVMgOApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZzY3NpLmMgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYwppbmRleCAwNDE5NTg0Li4zZDM5MWRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdnNjc2kuYwpAQCAtMTg0OSw4ICsxODQ5LDcgQEAKIAkJcmMgPSBpYm12c2NzaV9vcHMtPnJlc2V0X2NycV9xdWV1ZSgmaG9zdGRhdGEtPnF1ZXVlLCBob3N0ZGF0YSk7CiAJCWlmICghcmMpCiAJCQlyYyA9IGlibXZzY3NpX29wcy0+c2VuZF9jcnEoaG9zdGRhdGEsIDB4QzAwMTAwMDAwMDAwMDAwMExMLCAwKTsKLQkJaWYgKCFyYykKLQkJCXJjID0gdmlvX2VuYWJsZV9pbnRlcnJ1cHRzKHRvX3Zpb19kZXYoaG9zdGRhdGEtPmRldikpOworCQl2aW9fZW5hYmxlX2ludGVycnVwdHModG9fdmlvX2Rldihob3N0ZGF0YS0+ZGV2KSk7CiAJfSBlbHNlIGlmIChob3N0ZGF0YS0+cmVlbmFibGVfY3JxKSB7CiAJCXNtcF9ybWIoKTsKIAkJYWN0aW9uID0gImVuYWJsZSI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaW4yMDAwLmMgYi9kcml2ZXJzL3Njc2kvaW4yMDAwLmMKaW5kZXggNjU2OGFhYi4uOTIxMDliMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2luMjAwMC5jCisrKyBiL2RyaXZlcnMvc2NzaS9pbjIwMDAuYwpAQCAtMzQzLDcgKzM0Myw3IEBACiAJaW5zdGFuY2UgPSBjbWQtPmRldmljZS0+aG9zdDsKIAlob3N0ZGF0YSA9IChzdHJ1Y3QgSU4yMDAwX2hvc3RkYXRhICopIGluc3RhbmNlLT5ob3N0ZGF0YTsKIAotCURCKERCX1FVRVVFX0NPTU1BTkQsIHNjbWRfcHJpbnRrKEtFUk5fREVCVUcsIGNtZCwgIlEtJTAyeC0lbGQoIiwgY21kLT5jbW5kWzBdLCBjbWQtPnNlcmlhbF9udW1iZXIpKQorCURCKERCX1FVRVVFX0NPTU1BTkQsIHNjbWRfcHJpbnRrKEtFUk5fREVCVUcsIGNtZCwgIlEtJTAyeCgiLCBjbWQtPmNtbmRbMF0pKQogCiAvKiBTZXQgdXAgYSBmZXcgZmllbGRzIGluIHRoZSBTY3NpX0NtbmQgc3RydWN0dXJlIGZvciBvdXIgb3duIHVzZToKICAqICAtIGhvc3Rfc2NyaWJibGUgaXMgdGhlIHBvaW50ZXIgdG8gdGhlIG5leHQgY21kIGluIHRoZSBpbnB1dCBxdWV1ZQpAQCAtNDI3LDcgKzQyNyw3IEBACiAKIAlpbjIwMDBfZXhlY3V0ZShjbWQtPmRldmljZS0+aG9zdCk7CiAKLQlEQihEQl9RVUVVRV9DT01NQU5ELCBwcmludGsoIilRLSVsZCAiLCBjbWQtPnNlcmlhbF9udW1iZXIpKQorCURCKERCX1FVRVVFX0NPTU1BTkQsIHByaW50aygiKVEgIikpCiAJICAgIHJldHVybiAwOwogfQogCkBAIC03MDUsNyArNzA1LDcgQEAKIAkgKiB0byBzZWFyY2ggdGhlIGlucHV0X1EgYWdhaW4uLi4KIAkgKi8KIAotCURCKERCX0VYRUNVVEUsIHByaW50aygiJXMlbGQpRVgtMiAiLCAoY21kLT5TQ3AucGhhc2UpID8gImQ6IiA6ICIiLCBjbWQtPnNlcmlhbF9udW1iZXIpKQorCURCKERCX0VYRUNVVEUsIHByaW50aygiJXMpRVgtMiAiLCAoY21kLT5TQ3AucGhhc2UpID8gImQ6IiA6ICIiKSkKIAogfQogCkBAIC0xMTQ5LDcgKzExNDksNyBAQAogCWNhc2UgQ1NSX1hGRVJfRE9ORSB8IFBIU19DT01NQU5EOgogCWNhc2UgQ1NSX1VORVhQIHwgUEhTX0NPTU1BTkQ6CiAJY2FzZSBDU1JfU1JWX1JFUSB8IFBIU19DT01NQU5EOgotCQlEQihEQl9JTlRSLCBwcmludGsoIkNNTkQtJTAyeCwlbGQiLCBjbWQtPmNtbmRbMF0sIGNtZC0+c2VyaWFsX251bWJlcikpCisJCURCKERCX0lOVFIsIHByaW50aygiQ01ORC0lMDJ4IiwgY21kLT5jbW5kWzBdKSkKIAkJICAgIHRyYW5zZmVyX3BpbyhjbWQtPmNtbmQsIGNtZC0+Y21kX2xlbiwgREFUQV9PVVRfRElSLCBob3N0ZGF0YSk7CiAJCWhvc3RkYXRhLT5zdGF0ZSA9IFNfQ09OTkVDVEVEOwogCQlicmVhazsKQEAgLTExOTEsNyArMTE5MSw3IEBACiAJCXN3aXRjaCAobXNnKSB7CiAKIAkJY2FzZSBDT01NQU5EX0NPTVBMRVRFOgotCQkJREIoREJfSU5UUiwgcHJpbnRrKCJDQ01QLSVsZCIsIGNtZC0+c2VyaWFsX251bWJlcikpCisJCQlEQihEQl9JTlRSLCBwcmludGsoIkNDTVAiKSkKIAkJCSAgICB3cml0ZV8zMzkzX2NtZChob3N0ZGF0YSwgV0RfQ01EX05FR0FURV9BQ0spOwogCQkJaG9zdGRhdGEtPnN0YXRlID0gU19QUkVfQ01QX0RJU0M7CiAJCQlicmVhazsKQEAgLTEzMjksNyArMTMyOSw3IEBACiAKIAkJd3JpdGVfMzM5Myhob3N0ZGF0YSwgV0RfU09VUkNFX0lELCBTUkNJRF9FUik7CiAJCWlmIChwaHMgPT0gMHg2MCkgewotCQkJREIoREJfSU5UUiwgcHJpbnRrKCJTWC1ET05FLSVsZCIsIGNtZC0+c2VyaWFsX251bWJlcikpCisJCQlEQihEQl9JTlRSLCBwcmludGsoIlNYLURPTkUiKSkKIAkJCSAgICBjbWQtPlNDcC5NZXNzYWdlID0gQ09NTUFORF9DT01QTEVURTsKIAkJCWx1biA9IHJlYWRfMzM5Myhob3N0ZGF0YSwgV0RfVEFSR0VUX0xVTik7CiAJCQlEQihEQl9JTlRSLCBwcmludGsoIjolZC4lZCIsIGNtZC0+U0NwLlN0YXR1cywgbHVuKSkKQEAgLTEzNTAsNyArMTM1MCw3IEBACiAKIAkJCWluMjAwMF9leGVjdXRlKGluc3RhbmNlKTsKIAkJfSBlbHNlIHsKLQkJCXByaW50aygiJTAyeDolMDJ4OiUwMngtJWxkOiBVbmtub3duIFNFTF9YRkVSX0RPTkUgcGhhc2UhIS0tLSIsIGFzciwgc3IsIHBocywgY21kLT5zZXJpYWxfbnVtYmVyKTsKKwkJCXByaW50aygiJTAyeDolMDJ4OiUwMng6IFVua25vd24gU0VMX1hGRVJfRE9ORSBwaGFzZSEhLS0tIiwgYXNyLCBzciwgcGhzKTsKIAkJfQogCQlicmVhazsKIApAQCAtMTQxNyw3ICsxNDE3LDcgQEAKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW5zdGFuY2UtPmhvc3RfbG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuIElSUV9IQU5ETEVEOwogCQl9Ci0JCURCKERCX0lOVFIsIHByaW50aygiVU5FWFBfRElTQy0lbGQiLCBjbWQtPnNlcmlhbF9udW1iZXIpKQorCQlEQihEQl9JTlRSLCBwcmludGsoIlVORVhQX0RJU0MiKSkKIAkJICAgIGhvc3RkYXRhLT5jb25uZWN0ZWQgPSBOVUxMOwogCQlob3N0ZGF0YS0+YnVzeVtjbWQtPmRldmljZS0+aWRdICY9IH4oMSA8PCBjbWQtPmRldmljZS0+bHVuKTsKIAkJaG9zdGRhdGEtPnN0YXRlID0gU19VTkNPTk5FQ1RFRDsKQEAgLTE0NDIsNyArMTQ0Miw3IEBACiAgKi8KIAogCQl3cml0ZV8zMzkzKGhvc3RkYXRhLCBXRF9TT1VSQ0VfSUQsIFNSQ0lEX0VSKTsKLQkJREIoREJfSU5UUiwgcHJpbnRrKCJESVNDLSVsZCIsIGNtZC0+c2VyaWFsX251bWJlcikpCisJCURCKERCX0lOVFIsIHByaW50aygiRElTQyIpKQogCQkgICAgaWYgKGNtZCA9PSBOVUxMKSB7CiAJCQlwcmludGsoIiAtIEFscmVhZHkgZGlzY29ubmVjdGVkISAiKTsKIAkJCWhvc3RkYXRhLT5zdGF0ZSA9IFNfVU5DT05ORUNURUQ7CkBAIC0xNTc1LDcgKzE1NzUsNiBAQAogCQl9IGVsc2UKIAkJCWhvc3RkYXRhLT5zdGF0ZSA9IFNfQ09OTkVDVEVEOwogCi0JCURCKERCX0lOVFIsIHByaW50aygiLSVsZCIsIGNtZC0+c2VyaWFsX251bWJlcikpCiAJCSAgICBicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0xNzA0LDcgKzE3MDMsNyBAQAogCQkJCXByZXYtPmhvc3Rfc2NyaWJibGUgPSBjbWQtPmhvc3Rfc2NyaWJibGU7CiAJCQljbWQtPmhvc3Rfc2NyaWJibGUgPSBOVUxMOwogCQkJY21kLT5yZXN1bHQgPSBESURfQUJPUlQgPDwgMTY7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJzY3NpJWQ6IEFib3J0IC0gcmVtb3ZpbmcgY29tbWFuZCAlbGQgZnJvbSBpbnB1dF9RLiAiLCBpbnN0YW5jZS0+aG9zdF9ubywgY21kLT5zZXJpYWxfbnVtYmVyKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgInNjc2klZDogQWJvcnQgLSByZW1vdmluZyBjb21tYW5kIGZyb20gaW5wdXRfUS4gIiwgaW5zdGFuY2UtPmhvc3Rfbm8pOwogCQkJY21kLT5zY3NpX2RvbmUoY21kKTsKIAkJCXJldHVybiBTVUNDRVNTOwogCQl9CkBAIC0xNzI1LDcgKzE3MjQsNyBAQAogCiAJaWYgKGhvc3RkYXRhLT5jb25uZWN0ZWQgPT0gY21kKSB7CiAKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaSVkOiBBYm9ydGluZyBjb25uZWN0ZWQgY29tbWFuZCAlbGQgLSAiLCBpbnN0YW5jZS0+aG9zdF9ubywgY21kLT5zZXJpYWxfbnVtYmVyKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic2NzaSVkOiBBYm9ydGluZyBjb25uZWN0ZWQgY29tbWFuZCAtICIsIGluc3RhbmNlLT5ob3N0X25vKTsKIAogCQlwcmludGsoInNlbmRpbmcgd2QzM2M5MyBBQk9SVCBjb21tYW5kIC0gIik7CiAJCXdyaXRlXzMzOTMoaG9zdGRhdGEsIFdEX0NPTlRST0wsIENUUkxfSURJIHwgQ1RSTF9FREkgfCBDVFJMX1BPTExFRCk7CkBAIC0yMjcwLDcgKzIyNjksNyBAQAogCQlzdHJjYXQoYnAsICJcbmNvbm5lY3RlZDogICAgICIpOwogCQlpZiAoaGQtPmNvbm5lY3RlZCkgewogCQkJY21kID0gKFNjc2lfQ21uZCAqKSBoZC0+Y29ubmVjdGVkOwotCQkJc3ByaW50Zih0YnVmLCAiICVsZC0lZDolZCglMDJ4KSIsIGNtZC0+c2VyaWFsX251bWJlciwgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuLCBjbWQtPmNtbmRbMF0pOworCQkJc3ByaW50Zih0YnVmLCAiICVkOiVkKCUwMngpIiwgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuLCBjbWQtPmNtbmRbMF0pOwogCQkJc3RyY2F0KGJwLCB0YnVmKTsKIAkJfQogCX0KQEAgLTIyNzgsNyArMjI3Nyw3IEBACiAJCXN0cmNhdChicCwgIlxuaW5wdXRfUTogICAgICAgIik7CiAJCWNtZCA9IChTY3NpX0NtbmQgKikgaGQtPmlucHV0X1E7CiAJCXdoaWxlIChjbWQpIHsKLQkJCXNwcmludGYodGJ1ZiwgIiAlbGQtJWQ6JWQoJTAyeCkiLCBjbWQtPnNlcmlhbF9udW1iZXIsIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1biwgY21kLT5jbW5kWzBdKTsKKwkJCXNwcmludGYodGJ1ZiwgIiAlZDolZCglMDJ4KSIsIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1biwgY21kLT5jbW5kWzBdKTsKIAkJCXN0cmNhdChicCwgdGJ1Zik7CiAJCQljbWQgPSAoU2NzaV9DbW5kICopIGNtZC0+aG9zdF9zY3JpYmJsZTsKIAkJfQpAQCAtMjI4Nyw3ICsyMjg2LDcgQEAKIAkJc3RyY2F0KGJwLCAiXG5kaXNjb25uZWN0ZWRfUToiKTsKIAkJY21kID0gKFNjc2lfQ21uZCAqKSBoZC0+ZGlzY29ubmVjdGVkX1E7CiAJCXdoaWxlIChjbWQpIHsKLQkJCXNwcmludGYodGJ1ZiwgIiAlbGQtJWQ6JWQoJTAyeCkiLCBjbWQtPnNlcmlhbF9udW1iZXIsIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1biwgY21kLT5jbW5kWzBdKTsKKwkJCXNwcmludGYodGJ1ZiwgIiAlZDolZCglMDJ4KSIsIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5kZXZpY2UtPmx1biwgY21kLT5jbW5kWzBdKTsKIAkJCXN0cmNhdChicCwgdGJ1Zik7CiAJCQljbWQgPSAoU2NzaV9DbW5kICopIGNtZC0+aG9zdF9zY3JpYmJsZTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lwci5jIGIvZHJpdmVycy9zY3NpL2lwci5jCmluZGV4IDA2MjEyMzguLjEyODY4Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pcHIuYworKysgYi9kcml2ZXJzL3Njc2kvaXByLmMKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTI3MTcsMTMgKzI3MTgsMTggQEAKIAkJCXVuc2lnbmVkIGxvbmcgcGNpX2FkZHJlc3MsIHUzMiBsZW5ndGgpCiB7CiAJaW50IGJ5dGVzX2NvcGllZCA9IDA7Ci0JaW50IGN1cl9sZW4sIHJjLCByZW1fbGVuLCByZW1fcGFnZV9sZW47CisJaW50IGN1cl9sZW4sIHJjLCByZW1fbGVuLCByZW1fcGFnZV9sZW4sIG1heF9kdW1wX3NpemU7CiAJX19iZTMyICpwYWdlOwogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFncyA9IDA7CiAJc3RydWN0IGlwcl9pb2FfZHVtcCAqaW9hX2R1bXAgPSAmaW9hX2NmZy0+ZHVtcC0+aW9hX2R1bXA7CiAKKwlpZiAoaW9hX2NmZy0+c2lzNjQpCisJCW1heF9kdW1wX3NpemUgPSBJUFJfRk1UM19NQVhfSU9BX0RVTVBfU0laRTsKKwllbHNlCisJCW1heF9kdW1wX3NpemUgPSBJUFJfRk1UMl9NQVhfSU9BX0RVTVBfU0laRTsKKwogCXdoaWxlIChieXRlc19jb3BpZWQgPCBsZW5ndGggJiYKLQkgICAgICAgKGlvYV9kdW1wLT5oZHIubGVuICsgYnl0ZXNfY29waWVkKSA8IElQUl9NQVhfSU9BX0RVTVBfU0laRSkgeworCSAgICAgICAoaW9hX2R1bXAtPmhkci5sZW4gKyBieXRlc19jb3BpZWQpIDwgbWF4X2R1bXBfc2l6ZSkgewogCQlpZiAoaW9hX2R1bXAtPnBhZ2Vfb2Zmc2V0ID49IFBBR0VfU0laRSB8fAogCQkgICAgaW9hX2R1bXAtPnBhZ2Vfb2Zmc2V0ID09IDApIHsKIAkJCXBhZ2UgPSAoX19iZTMyICopX19nZXRfZnJlZV9wYWdlKEdGUF9BVE9NSUMpOwpAQCAtMjg4NSw4ICsyODkxLDggQEAKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3MgPSAwOwogCXN0cnVjdCBpcHJfZHJpdmVyX2R1bXAgKmRyaXZlcl9kdW1wID0gJmR1bXAtPmRyaXZlcl9kdW1wOwogCXN0cnVjdCBpcHJfaW9hX2R1bXAgKmlvYV9kdW1wID0gJmR1bXAtPmlvYV9kdW1wOwotCXUzMiBudW1fZW50cmllcywgc3RhcnRfb2ZmLCBlbmRfb2ZmOwotCXUzMiBieXRlc190b19jb3B5LCBieXRlc19jb3BpZWQsIHJjOworCXUzMiBudW1fZW50cmllcywgbWF4X251bV9lbnRyaWVzLCBzdGFydF9vZmYsIGVuZF9vZmY7CisJdTMyIG1heF9kdW1wX3NpemUsIGJ5dGVzX3RvX2NvcHksIGJ5dGVzX2NvcGllZCwgcmM7CiAJc3RydWN0IGlwcl9zZHQgKnNkdDsKIAlpbnQgdmFsaWQgPSAxOwogCWludCBpOwpAQCAtMjk0Nyw4ICsyOTUzLDE4IEBACiAJIG9uIGVudHJpZXMgaW4gdGhpcyB0YWJsZSAqLwogCXNkdCA9ICZpb2FfZHVtcC0+c2R0OwogCisJaWYgKGlvYV9jZmctPnNpczY0KSB7CisJCW1heF9udW1fZW50cmllcyA9IElQUl9GTVQzX05VTV9TRFRfRU5UUklFUzsKKwkJbWF4X2R1bXBfc2l6ZSA9IElQUl9GTVQzX01BWF9JT0FfRFVNUF9TSVpFOworCX0gZWxzZSB7CisJCW1heF9udW1fZW50cmllcyA9IElQUl9GTVQyX05VTV9TRFRfRU5UUklFUzsKKwkJbWF4X2R1bXBfc2l6ZSA9IElQUl9GTVQyX01BWF9JT0FfRFVNUF9TSVpFOworCX0KKworCWJ5dGVzX3RvX2NvcHkgPSBvZmZzZXRvZihzdHJ1Y3QgaXByX3NkdCwgZW50cnkpICsKKwkJCShtYXhfbnVtX2VudHJpZXMgKiBzaXplb2Yoc3RydWN0IGlwcl9zZHRfZW50cnkpKTsKIAlyYyA9IGlwcl9nZXRfbGR1bXBfZGF0YV9zZWN0aW9uKGlvYV9jZmcsIHN0YXJ0X2FkZHIsIChfX2JlMzIgKilzZHQsCi0JCQkJCXNpemVvZihzdHJ1Y3QgaXByX3NkdCkgLyBzaXplb2YoX19iZTMyKSk7CisJCQkJCWJ5dGVzX3RvX2NvcHkgLyBzaXplb2YoX19iZTMyKSk7CiAKIAkvKiBTbWFydCBEdW1wIHRhYmxlIGlzIHJlYWR5IHRvIHVzZSBhbmQgdGhlIGZpcnN0IGVudHJ5IGlzIHZhbGlkICovCiAJaWYgKHJjIHx8ICgoYmUzMl90b19jcHUoc2R0LT5oZHIuc3RhdGUpICE9IElQUl9GTVQzX1NEVF9SRUFEWV9UT19VU0UpICYmCkBAIC0yOTY0LDEzICsyOTgwLDIwIEBACiAKIAludW1fZW50cmllcyA9IGJlMzJfdG9fY3B1KHNkdC0+aGRyLm51bV9lbnRyaWVzX3VzZWQpOwogCi0JaWYgKG51bV9lbnRyaWVzID4gSVBSX05VTV9TRFRfRU5UUklFUykKLQkJbnVtX2VudHJpZXMgPSBJUFJfTlVNX1NEVF9FTlRSSUVTOworCWlmIChudW1fZW50cmllcyA+IG1heF9udW1fZW50cmllcykKKwkJbnVtX2VudHJpZXMgPSBtYXhfbnVtX2VudHJpZXM7CisKKwkvKiBVcGRhdGUgZHVtcCBsZW5ndGggdG8gdGhlIGFjdHVhbCBkYXRhIHRvIGJlIGNvcGllZCAqLworCWR1bXAtPmRyaXZlcl9kdW1wLmhkci5sZW4gKz0gc2l6ZW9mKHN0cnVjdCBpcHJfc2R0X2hlYWRlcik7CisJaWYgKGlvYV9jZmctPnNpczY0KQorCQlkdW1wLT5kcml2ZXJfZHVtcC5oZHIubGVuICs9IG51bV9lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBpcHJfc2R0X2VudHJ5KTsKKwllbHNlCisJCWR1bXAtPmRyaXZlcl9kdW1wLmhkci5sZW4gKz0gbWF4X251bV9lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBpcHJfc2R0X2VudHJ5KTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1fZW50cmllczsgaSsrKSB7Ci0JCWlmIChpb2FfZHVtcC0+aGRyLmxlbiA+IElQUl9NQVhfSU9BX0RVTVBfU0laRSkgeworCQlpZiAoaW9hX2R1bXAtPmhkci5sZW4gPiBtYXhfZHVtcF9zaXplKSB7CiAJCQlkcml2ZXJfZHVtcC0+aGRyLnN0YXR1cyA9IElQUl9EVU1QX1NUQVRVU19RVUFMX1NVQ0NFU1M7CiAJCQlicmVhazsKIAkJfQpAQCAtMjk4OSw3ICszMDEyLDcgQEAKIAkJCQkJdmFsaWQgPSAwOwogCQkJfQogCQkJaWYgKHZhbGlkKSB7Ci0JCQkJaWYgKGJ5dGVzX3RvX2NvcHkgPiBJUFJfTUFYX0lPQV9EVU1QX1NJWkUpIHsKKwkJCQlpZiAoYnl0ZXNfdG9fY29weSA+IG1heF9kdW1wX3NpemUpIHsKIAkJCQkJc2R0LT5lbnRyeVtpXS5mbGFncyAmPSB+SVBSX1NEVF9WQUxJRF9FTlRSWTsKIAkJCQkJY29udGludWU7CiAJCQkJfQpAQCAtMzA0NCw2ICszMDY3LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgZHVtcC0+aW9hX2R1bXAubmV4dF9wYWdlX2luZGV4OyBpKyspCiAJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgZHVtcC0+aW9hX2R1bXAuaW9hX2RhdGFbaV0pOwogCisJdmZyZWUoZHVtcC0+aW9hX2R1bXAuaW9hX2RhdGEpOwogCWtmcmVlKGR1bXApOwogCUxFQVZFOwogfQpAQCAtMzgzNSw3ICszODU5LDcgQEAKIAlzdHJ1Y3QgaXByX2R1bXAgKmR1bXA7CiAJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzID0gMDsKIAljaGFyICpzcmM7Ci0JaW50IGxlbjsKKwlpbnQgbGVuLCBzZHRfZW5kOwogCXNpemVfdCByYyA9IGNvdW50OwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQpAQCAtMzg3NSw5ICszODk5LDE3IEBACiAKIAlvZmYgLT0gc2l6ZW9mKGR1bXAtPmRyaXZlcl9kdW1wKTsKIAotCWlmIChjb3VudCAmJiBvZmYgPCBvZmZzZXRvZihzdHJ1Y3QgaXByX2lvYV9kdW1wLCBpb2FfZGF0YSkpIHsKLQkJaWYgKG9mZiArIGNvdW50ID4gb2Zmc2V0b2Yoc3RydWN0IGlwcl9pb2FfZHVtcCwgaW9hX2RhdGEpKQotCQkJbGVuID0gb2Zmc2V0b2Yoc3RydWN0IGlwcl9pb2FfZHVtcCwgaW9hX2RhdGEpIC0gb2ZmOworCWlmIChpb2FfY2ZnLT5zaXM2NCkKKwkJc2R0X2VuZCA9IG9mZnNldG9mKHN0cnVjdCBpcHJfaW9hX2R1bXAsIHNkdC5lbnRyeSkgKworCQkJICAoYmUzMl90b19jcHUoZHVtcC0+aW9hX2R1bXAuc2R0Lmhkci5udW1fZW50cmllc191c2VkKSAqCisJCQkgICBzaXplb2Yoc3RydWN0IGlwcl9zZHRfZW50cnkpKTsKKwllbHNlCisJCXNkdF9lbmQgPSBvZmZzZXRvZihzdHJ1Y3QgaXByX2lvYV9kdW1wLCBzZHQuZW50cnkpICsKKwkJCSAgKElQUl9GTVQyX05VTV9TRFRfRU5UUklFUyAqIHNpemVvZihzdHJ1Y3QgaXByX3NkdF9lbnRyeSkpOworCisJaWYgKGNvdW50ICYmIG9mZiA8IHNkdF9lbmQpIHsKKwkJaWYgKG9mZiArIGNvdW50ID4gc2R0X2VuZCkKKwkJCWxlbiA9IHNkdF9lbmQgLSBvZmY7CiAJCWVsc2UKIAkJCWxlbiA9IGNvdW50OwogCQlzcmMgPSAodTggKikmZHVtcC0+aW9hX2R1bXAgKyBvZmY7CkBAIC0zODg3LDcgKzM5MTksNyBAQAogCQljb3VudCAtPSBsZW47CiAJfQogCi0Jb2ZmIC09IG9mZnNldG9mKHN0cnVjdCBpcHJfaW9hX2R1bXAsIGlvYV9kYXRhKTsKKwlvZmYgLT0gc2R0X2VuZDsKIAogCXdoaWxlIChjb3VudCkgewogCQlpZiAoKG9mZiAmIFBBR0VfTUFTSykgIT0gKChvZmYgKyBjb3VudCkgJiBQQUdFX01BU0spKQpAQCAtMzkxNiw2ICszOTQ4LDcgQEAKIHN0YXRpYyBpbnQgaXByX2FsbG9jX2R1bXAoc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnKQogewogCXN0cnVjdCBpcHJfZHVtcCAqZHVtcDsKKwlfX2JlMzIgKippb2FfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3MgPSAwOwogCiAJZHVtcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpcHJfZHVtcCksIEdGUF9LRVJORUwpOwpAQCAtMzkyNSw2ICszOTU4LDE5IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAorCWlmIChpb2FfY2ZnLT5zaXM2NCkKKwkJaW9hX2RhdGEgPSB2bWFsbG9jKElQUl9GTVQzX01BWF9OVU1fRFVNUF9QQUdFUyAqIHNpemVvZihfX2JlMzIgKikpOworCWVsc2UKKwkJaW9hX2RhdGEgPSB2bWFsbG9jKElQUl9GTVQyX01BWF9OVU1fRFVNUF9QQUdFUyAqIHNpemVvZihfX2JlMzIgKikpOworCisJaWYgKCFpb2FfZGF0YSkgeworCQlpcHJfZXJyKCJEdW1wIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCWtmcmVlKGR1bXApOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkdW1wLT5pb2FfZHVtcC5pb2FfZGF0YSA9IGlvYV9kYXRhOworCiAJa3JlZl9pbml0KCZkdW1wLT5rcmVmKTsKIAlkdW1wLT5pb2FfY2ZnID0gaW9hX2NmZzsKIApAQCAtMzkzMiw2ICszOTc4LDcgQEAKIAogCWlmIChJTkFDVElWRSAhPSBpb2FfY2ZnLT5zZHRfc3RhdGUpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpb2FfY2ZnLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCQl2ZnJlZShkdW1wLT5pb2FfZHVtcC5pb2FfZGF0YSk7CiAJCWtmcmVlKGR1bXApOwogCQlyZXR1cm4gMDsKIAl9CkBAIC00OTUzLDkgKzUwMDAsMzUgQEAKICAqIAlJUlFfTk9ORSAvIElSUV9IQU5ETEVECiAgKiovCiBzdGF0aWMgaXJxcmV0dXJuX3QgaXByX2hhbmRsZV9vdGhlcl9pbnRlcnJ1cHQoc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnLAotCQkJCQkgICAgICB2b2xhdGlsZSB1MzIgaW50X3JlZykKKwkJCQkJICAgICAgdTMyIGludF9yZWcpCiB7CiAJaXJxcmV0dXJuX3QgcmMgPSBJUlFfSEFORExFRDsKKwl1MzIgaW50X21hc2tfcmVnOworCisJaW50X21hc2tfcmVnID0gcmVhZGwoaW9hX2NmZy0+cmVncy5zZW5zZV9pbnRlcnJ1cHRfbWFza19yZWczMik7CisJaW50X3JlZyAmPSB+aW50X21hc2tfcmVnOworCisJLyogSWYgYW4gaW50ZXJydXB0IG9uIHRoZSBhZGFwdGVyIGRpZCBub3Qgb2NjdXIsIGlnbm9yZSBpdC4KKwkgKiBPciBpbiB0aGUgY2FzZSBvZiBTSVMgNjQsIGNoZWNrIGZvciBhIHN0YWdlIGNoYW5nZSBpbnRlcnJ1cHQuCisJICovCisJaWYgKChpbnRfcmVnICYgSVBSX1BDSUlfT1BFUl9JTlRFUlJVUFRTKSA9PSAwKSB7CisJCWlmIChpb2FfY2ZnLT5zaXM2NCkgeworCQkJaW50X21hc2tfcmVnID0gcmVhZGwoaW9hX2NmZy0+cmVncy5zZW5zZV9pbnRlcnJ1cHRfbWFza19yZWcpOworCQkJaW50X3JlZyA9IHJlYWRsKGlvYV9jZmctPnJlZ3Muc2Vuc2VfaW50ZXJydXB0X3JlZykgJiB+aW50X21hc2tfcmVnOworCQkJaWYgKGludF9yZWcgJiBJUFJfUENJSV9JUExfU1RBR0VfQ0hBTkdFKSB7CisKKwkJCQkvKiBjbGVhciBzdGFnZSBjaGFuZ2UgKi8KKwkJCQl3cml0ZWwoSVBSX1BDSUlfSVBMX1NUQUdFX0NIQU5HRSwgaW9hX2NmZy0+cmVncy5jbHJfaW50ZXJydXB0X3JlZyk7CisJCQkJaW50X3JlZyA9IHJlYWRsKGlvYV9jZmctPnJlZ3Muc2Vuc2VfaW50ZXJydXB0X3JlZykgJiB+aW50X21hc2tfcmVnOworCQkJCWxpc3RfZGVsKCZpb2FfY2ZnLT5yZXNldF9jbWQtPnF1ZXVlKTsKKwkJCQlkZWxfdGltZXIoJmlvYV9jZmctPnJlc2V0X2NtZC0+dGltZXIpOworCQkJCWlwcl9yZXNldF9pb2Ffam9iKGlvYV9jZmctPnJlc2V0X2NtZCk7CisJCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQkJfQorCQl9CisKKwkJcmV0dXJuIElSUV9OT05FOworCX0KIAogCWlmIChpbnRfcmVnICYgSVBSX1BDSUlfSU9BX1RSQU5TX1RPX09QRVIpIHsKIAkJLyogTWFzayB0aGUgaW50ZXJydXB0ICovCkBAIC00OTY4LDYgKzUwNDEsMTMgQEAKIAkJbGlzdF9kZWwoJmlvYV9jZmctPnJlc2V0X2NtZC0+cXVldWUpOwogCQlkZWxfdGltZXIoJmlvYV9jZmctPnJlc2V0X2NtZC0+dGltZXIpOwogCQlpcHJfcmVzZXRfaW9hX2pvYihpb2FfY2ZnLT5yZXNldF9jbWQpOworCX0gZWxzZSBpZiAoKGludF9yZWcgJiBJUFJfUENJSV9IUlJRX1VQREFURUQpID09IGludF9yZWcpIHsKKwkJaWYgKGlwcl9kZWJ1ZyAmJiBwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlkZXZfZXJyKCZpb2FfY2ZnLT5wZGV2LT5kZXYsCisJCQkJIlNwdXJpb3VzIGludGVycnVwdCBkZXRlY3RlZC4gMHglMDhYXG4iLCBpbnRfcmVnKTsKKwkJd3JpdGVsKElQUl9QQ0lJX0hSUlFfVVBEQVRFRCwgaW9hX2NmZy0+cmVncy5jbHJfaW50ZXJydXB0X3JlZzMyKTsKKwkJaW50X3JlZyA9IHJlYWRsKGlvYV9jZmctPnJlZ3Muc2Vuc2VfaW50ZXJydXB0X3JlZzMyKTsKKwkJcmV0dXJuIElSUV9OT05FOwogCX0gZWxzZSB7CiAJCWlmIChpbnRfcmVnICYgSVBSX1BDSUlfSU9BX1VOSVRfQ0hFQ0tFRCkKIAkJCWlvYV9jZmctPmlvYV91bml0X2NoZWNrZWQgPSAxOwpAQCAtNTAxNiwxMCArNTA5NiwxMSBAQAogewogCXN0cnVjdCBpcHJfaW9hX2NmZyAqaW9hX2NmZyA9IChzdHJ1Y3QgaXByX2lvYV9jZmcgKilkZXZwOwogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFncyA9IDA7Ci0Jdm9sYXRpbGUgdTMyIGludF9yZWcsIGludF9tYXNrX3JlZzsKKwl1MzIgaW50X3JlZyA9IDA7CiAJdTMyIGlvYXNjOwogCXUxNiBjbWRfaW5kZXg7CiAJaW50IG51bV9ocnJxID0gMDsKKwlpbnQgaXJxX25vbmUgPSAwOwogCXN0cnVjdCBpcHJfY21uZCAqaXByX2NtZDsKIAlpcnFyZXR1cm5fdCByYyA9IElSUV9OT05FOwogCkBAIC01MDMxLDMzICs1MTEyLDYgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCX0KIAotCWludF9tYXNrX3JlZyA9IHJlYWRsKGlvYV9jZmctPnJlZ3Muc2Vuc2VfaW50ZXJydXB0X21hc2tfcmVnMzIpOwotCWludF9yZWcgPSByZWFkbChpb2FfY2ZnLT5yZWdzLnNlbnNlX2ludGVycnVwdF9yZWczMikgJiB+aW50X21hc2tfcmVnOwotCi0JLyogSWYgYW4gaW50ZXJydXB0IG9uIHRoZSBhZGFwdGVyIGRpZCBub3Qgb2NjdXIsIGlnbm9yZSBpdC4KLQkgKiBPciBpbiB0aGUgY2FzZSBvZiBTSVMgNjQsIGNoZWNrIGZvciBhIHN0YWdlIGNoYW5nZSBpbnRlcnJ1cHQuCi0JICovCi0JaWYgKHVubGlrZWx5KChpbnRfcmVnICYgSVBSX1BDSUlfT1BFUl9JTlRFUlJVUFRTKSA9PSAwKSkgewotCQlpZiAoaW9hX2NmZy0+c2lzNjQpIHsKLQkJCWludF9tYXNrX3JlZyA9IHJlYWRsKGlvYV9jZmctPnJlZ3Muc2Vuc2VfaW50ZXJydXB0X21hc2tfcmVnKTsKLQkJCWludF9yZWcgPSByZWFkbChpb2FfY2ZnLT5yZWdzLnNlbnNlX2ludGVycnVwdF9yZWcpICYgfmludF9tYXNrX3JlZzsKLQkJCWlmIChpbnRfcmVnICYgSVBSX1BDSUlfSVBMX1NUQUdFX0NIQU5HRSkgewotCi0JCQkJLyogY2xlYXIgc3RhZ2UgY2hhbmdlICovCi0JCQkJd3JpdGVsKElQUl9QQ0lJX0lQTF9TVEFHRV9DSEFOR0UsIGlvYV9jZmctPnJlZ3MuY2xyX2ludGVycnVwdF9yZWcpOwotCQkJCWludF9yZWcgPSByZWFkbChpb2FfY2ZnLT5yZWdzLnNlbnNlX2ludGVycnVwdF9yZWcpICYgfmludF9tYXNrX3JlZzsKLQkJCQlsaXN0X2RlbCgmaW9hX2NmZy0+cmVzZXRfY21kLT5xdWV1ZSk7Ci0JCQkJZGVsX3RpbWVyKCZpb2FfY2ZnLT5yZXNldF9jbWQtPnRpbWVyKTsKLQkJCQlpcHJfcmVzZXRfaW9hX2pvYihpb2FfY2ZnLT5yZXNldF9jbWQpOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKLQkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JCQl9Ci0JCX0KLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7Ci0JCXJldHVybiBJUlFfTk9ORTsKLQl9Ci0KIAl3aGlsZSAoMSkgewogCQlpcHJfY21kID0gTlVMTDsKIApAQCAtNTA5Nyw3ICs1MTUxLDcgQEAKIAkJCS8qIENsZWFyIHRoZSBQQ0kgaW50ZXJydXB0ICovCiAJCQlkbyB7CiAJCQkJd3JpdGVsKElQUl9QQ0lJX0hSUlFfVVBEQVRFRCwgaW9hX2NmZy0+cmVncy5jbHJfaW50ZXJydXB0X3JlZzMyKTsKLQkJCQlpbnRfcmVnID0gcmVhZGwoaW9hX2NmZy0+cmVncy5zZW5zZV9pbnRlcnJ1cHRfcmVnMzIpICYgfmludF9tYXNrX3JlZzsKKwkJCQlpbnRfcmVnID0gcmVhZGwoaW9hX2NmZy0+cmVncy5zZW5zZV9pbnRlcnJ1cHRfcmVnMzIpOwogCQkJfSB3aGlsZSAoaW50X3JlZyAmIElQUl9QQ0lJX0hSUlFfVVBEQVRFRCAmJgogCQkJCQludW1faHJycSsrIDwgSVBSX01BWF9IUlJRX1JFVFJJRVMpOwogCkBAIC01MTA3LDYgKzUxNjEsOSBAQAogCQkJCXJldHVybiBJUlFfSEFORExFRDsKIAkJCX0KIAorCQl9IGVsc2UgaWYgKHJjID09IElSUV9OT05FICYmIGlycV9ub25lID09IDApIHsKKwkJCWludF9yZWcgPSByZWFkbChpb2FfY2ZnLT5yZWdzLnNlbnNlX2ludGVycnVwdF9yZWczMik7CisJCQlpcnFfbm9uZSsrOwogCQl9IGVsc2UKIAkJCWJyZWFrOwogCX0KQEAgLTUxNDMsNyArNTIwMCw4IEBACiAKIAluc2VnID0gc2NzaV9kbWFfbWFwKHNjc2lfY21kKTsKIAlpZiAobnNlZyA8IDApIHsKLQkJZGV2X2VycigmaW9hX2NmZy0+cGRldi0+ZGV2LCAicGNpX21hcF9zZyBmYWlsZWQhXG4iKTsKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCWRldl9lcnIoJmlvYV9jZmctPnBkZXYtPmRldiwgInBjaV9tYXBfc2cgZmFpbGVkIVxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTU3NzMsNyArNTgzMSw4IEBACiAJCX0KIAogCQlpb2FyY2ItPmNtZF9wa3QuZmxhZ3NfaGkgfD0gSVBSX0ZMQUdTX0hJX05PX0xJTktfREVTQzsKLQkJaW9hcmNiLT5jbWRfcGt0LmZsYWdzX2xvIHw9IElQUl9GTEFHU19MT19ERUxBWV9BRlRFUl9SU1Q7CisJCWlmIChpcHJfaXNfZ3Njc2kocmVzKSkKKwkJCWlvYXJjYi0+Y21kX3BrdC5mbGFnc19sbyB8PSBJUFJfRkxBR1NfTE9fREVMQVlfQUZURVJfUlNUOwogCQlpb2FyY2ItPmNtZF9wa3QuZmxhZ3NfbG8gfD0gSVBSX0ZMQUdTX0xPX0FMSUdORURfQkZSOwogCQlpb2FyY2ItPmNtZF9wa3QuZmxhZ3NfbG8gfD0gaXByX2dldF90YXNrX2F0dHJpYnV0ZXMoc2NzaV9jbWQpOwogCX0KQEAgLTc1MTYsNyArNzU3NSw3IEBACiBzdGF0aWMgaW50IGlwcl9yZXNldF9yZXN0b3JlX2NmZ19zcGFjZShzdHJ1Y3QgaXByX2NtbmQgKmlwcl9jbWQpCiB7CiAJc3RydWN0IGlwcl9pb2FfY2ZnICppb2FfY2ZnID0gaXByX2NtZC0+aW9hX2NmZzsKLQl2b2xhdGlsZSB1MzIgaW50X3JlZzsKKwl1MzIgaW50X3JlZzsKIAogCUVOVEVSOwogCWlvYV9jZmctPnBkZXYtPnN0YXRlX3NhdmVkID0gdHJ1ZTsKQEAgLTc1NTUsNyArNzYxNCwxMCBAQAogCQlpcHJfY21kLT5qb2Jfc3RlcCA9IGlwcl9yZXNldF9lbmFibGVfaW9hOwogCiAJCWlmIChHRVRfRFVNUCA9PSBpb2FfY2ZnLT5zZHRfc3RhdGUpIHsKLQkJCWlwcl9yZXNldF9zdGFydF90aW1lcihpcHJfY21kLCBJUFJfRFVNUF9USU1FT1VUKTsKKwkJCWlmIChpb2FfY2ZnLT5zaXM2NCkKKwkJCQlpcHJfcmVzZXRfc3RhcnRfdGltZXIoaXByX2NtZCwgSVBSX1NJUzY0X0RVTVBfVElNRU9VVCk7CisJCQllbHNlCisJCQkJaXByX3Jlc2V0X3N0YXJ0X3RpbWVyKGlwcl9jbWQsIElQUl9TSVMzMl9EVU1QX1RJTUVPVVQpOwogCQkJaXByX2NtZC0+am9iX3N0ZXAgPSBpcHJfcmVzZXRfd2FpdF9mb3JfZHVtcDsKIAkJCXNjaGVkdWxlX3dvcmsoJmlvYV9jZmctPndvcmtfcSk7CiAJCQlyZXR1cm4gSVBSX1JDX0pPQl9SRVRVUk47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXByLmggYi9kcml2ZXJzL3Njc2kvaXByLmgKaW5kZXggMTNmNDI1Zi4uZjkzZjg2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwci5oCisrKyBiL2RyaXZlcnMvc2NzaS9pcHIuaApAQCAtMzgsOCArMzgsOCBAQAogLyoKICAqIExpdGVyYWxzCiAgKi8KLSNkZWZpbmUgSVBSX0RSSVZFUl9WRVJTSU9OICIyLjUuMSIKLSNkZWZpbmUgSVBSX0RSSVZFUl9EQVRFICIoQXVndXN0IDEwLCAyMDEwKSIKKyNkZWZpbmUgSVBSX0RSSVZFUl9WRVJTSU9OICIyLjUuMiIKKyNkZWZpbmUgSVBSX0RSSVZFUl9EQVRFICIoQXByaWwgMjcsIDIwMTEpIgogCiAvKgogICogSVBSX01BWF9DTURfUEVSX0xVTjogVGhpcyBkZWZpbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBvdXRzdGFuZGluZwpAQCAtMjE3LDcgKzIxNyw4IEBACiAjZGVmaW5lIElQUl9DSEVDS19GT1JfUkVTRVRfVElNRU9VVAkJKEhaIC8gMTApCiAjZGVmaW5lIElQUl9XQUlUX0ZPUl9CSVNUX1RJTUVPVVQJCSgyICogSFopCiAjZGVmaW5lIElQUl9QQ0lfUkVTRVRfVElNRU9VVAkJCShIWiAvIDIpCi0jZGVmaW5lIElQUl9EVU1QX1RJTUVPVVQJCQkoMTUgKiBIWikKKyNkZWZpbmUgSVBSX1NJUzMyX0RVTVBfVElNRU9VVAkJCSgxNSAqIEhaKQorI2RlZmluZSBJUFJfU0lTNjRfRFVNUF9USU1FT1VUCQkJKDQwICogSFopCiAjZGVmaW5lIElQUl9EVU1QX0RFTEFZX1NFQ09ORFMJCQk0CiAjZGVmaW5lIElQUl9EVU1QX0RFTEFZX1RJTUVPVVQJCQkoSVBSX0RVTVBfREVMQVlfU0VDT05EUyAqIEhaKQogCkBAIC0yODUsOSArMjg2LDEyIEBACiAvKgogICogRHVtcCBsaXRlcmFscwogICovCi0jZGVmaW5lIElQUl9NQVhfSU9BX0RVTVBfU0laRQkJCQkoNCAqIDEwMjQgKiAxMDI0KQotI2RlZmluZSBJUFJfTlVNX1NEVF9FTlRSSUVTCQkJCTUxMQotI2RlZmluZSBJUFJfTUFYX05VTV9EVU1QX1BBR0VTCSgoSVBSX01BWF9JT0FfRFVNUF9TSVpFIC8gUEFHRV9TSVpFKSArIDEpCisjZGVmaW5lIElQUl9GTVQyX01BWF9JT0FfRFVNUF9TSVpFCQkJKDQgKiAxMDI0ICogMTAyNCkKKyNkZWZpbmUgSVBSX0ZNVDNfTUFYX0lPQV9EVU1QX1NJWkUJCQkoMzIgKiAxMDI0ICogMTAyNCkKKyNkZWZpbmUgSVBSX0ZNVDJfTlVNX1NEVF9FTlRSSUVTCQkJNTExCisjZGVmaW5lIElQUl9GTVQzX05VTV9TRFRfRU5UUklFUwkJCTB4RkZGCisjZGVmaW5lIElQUl9GTVQyX01BWF9OVU1fRFVNUF9QQUdFUwkoKElQUl9GTVQyX01BWF9JT0FfRFVNUF9TSVpFIC8gUEFHRV9TSVpFKSArIDEpCisjZGVmaW5lIElQUl9GTVQzX01BWF9OVU1fRFVNUF9QQUdFUwkoKElQUl9GTVQzX01BWF9JT0FfRFVNUF9TSVpFIC8gUEFHRV9TSVpFKSArIDEpCiAKIC8qCiAgKiBNaXNjIGxpdGVyYWxzCkBAIC00NzQsNyArNDc4LDcgQEAKIAogCXU4IGZsYWdzX2xvOwogI2RlZmluZSBJUFJfRkxBR1NfTE9fQUxJR05FRF9CRlIJCTB4MjAKLSNkZWZpbmUgSVBSX0ZMQUdTX0xPX0RFTEFZX0FGVEVSX1JTVAkweDEwCisjZGVmaW5lIElQUl9GTEFHU19MT19ERUxBWV9BRlRFUl9SU1QJCTB4MTAKICNkZWZpbmUgSVBSX0ZMQUdTX0xPX1VOVEFHR0VEX1RBU0sJCTB4MDAKICNkZWZpbmUgSVBSX0ZMQUdTX0xPX1NJTVBMRV9UQVNLCQkweDAyCiAjZGVmaW5lIElQUl9GTEFHU19MT19PUkRFUkVEX1RBU0sJCTB4MDQKQEAgLTExNjQsNyArMTE2OCw3IEBACiAKIHN0cnVjdCBpcHJfc2R0IHsKIAlzdHJ1Y3QgaXByX3NkdF9oZWFkZXIgaGRyOwotCXN0cnVjdCBpcHJfc2R0X2VudHJ5IGVudHJ5W0lQUl9OVU1fU0RUX0VOVFJJRVNdOworCXN0cnVjdCBpcHJfc2R0X2VudHJ5IGVudHJ5W0lQUl9GTVQzX05VTV9TRFRfRU5UUklFU107CiB9X19hdHRyaWJ1dGVfXygocGFja2VkLCBhbGlnbmVkICg0KSkpOwogCiBzdHJ1Y3QgaXByX3VjX3NkdCB7CkBAIC0xNjA4LDcgKzE2MTIsNyBAQAogc3RydWN0IGlwcl9pb2FfZHVtcCB7CiAJc3RydWN0IGlwcl9kdW1wX2VudHJ5X2hlYWRlciBoZHI7CiAJc3RydWN0IGlwcl9zZHQgc2R0OwotCV9fYmUzMiAqaW9hX2RhdGFbSVBSX01BWF9OVU1fRFVNUF9QQUdFU107CisJX19iZTMyICoqaW9hX2RhdGE7CiAJdTMyIHJlc2VydmVkOwogCXUzMiBuZXh0X3BhZ2VfaW5kZXg7CiAJdTMyIHBhZ2Vfb2Zmc2V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jCmluZGV4IDViNzk5YTMuLjJhM2E0NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19mY3AuYworKysgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMKQEAgLTU3LDkgKzU3LDYgQEAKICNkZWZpbmUgRkNfU1JCX1JFQUQJCSgxIDw8IDEpCiAjZGVmaW5lIEZDX1NSQl9XUklURQkJKDEgPDwgMCkKIAotLyogY29uc3RhbnQgYWRkZWQgdG8gZV9kX3RvdiB0aW1lb3V0IHRvIGdldCByZWNfdG92IHZhbHVlICovCi0jZGVmaW5lIFJFQ19UT1ZfQ09OU1QJCTEKLQogLyoKICAqIFRoZSBTQ3AucHRyIHNob3VsZCBiZSB0ZXN0ZWQgYW5kIHNldCB1bmRlciB0aGUgc2NzaV9wa3RfcXVldWUgbG9jawogICovCkBAIC0yNDgsNyArMjQ1LDcgQEAKIC8qKgogICogZmNfZmNwX3RpbWVyX3NldCgpIC0gU3RhcnQgYSB0aW1lciBmb3IgYSBmY3BfcGt0CiAgKiBAZnNwOiAgIFRoZSBGQ1AgcGFja2V0IHRvIHN0YXJ0IGEgdGltZXIgZm9yCi0gKiBAZGVsYXk6IFRoZSB0aW1lb3V0IHBlcmlvZCBmb3IgdGhlIHRpbWVyCisgKiBAZGVsYXk6IFRoZSB0aW1lb3V0IHBlcmlvZCBpbiBqaWZmaWVzCiAgKi8KIHN0YXRpYyB2b2lkIGZjX2ZjcF90aW1lcl9zZXQoc3RydWN0IGZjX2ZjcF9wa3QgKmZzcCwgdW5zaWduZWQgbG9uZyBkZWxheSkKIHsKQEAgLTMzNSwyMiArMzMyLDIzIEBACiAvKioKICAqIGZjX2ZjcF9jYW5fcXVldWVfcmFtcF91cCgpIC0gaW5jcmVhc2VzIGNhbl9xdWV1ZQogICogQGxwb3J0OiBscG9ydCB0byByYW1wIHVwIGNhbl9xdWV1ZQotICoKLSAqIExvY2tpbmcgbm90ZXM6IENhbGxlZCB3aXRoIFNjc2lfSG9zdCBsb2NrIGhlbGQKICAqLwogc3RhdGljIHZvaWQgZmNfZmNwX2Nhbl9xdWV1ZV9yYW1wX3VwKHN0cnVjdCBmY19scG9ydCAqbHBvcnQpCiB7CiAJc3RydWN0IGZjX2ZjcF9pbnRlcm5hbCAqc2kgPSBmY19nZXRfc2NzaV9pbnRlcm5hbChscG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgY2FuX3F1ZXVlOwogCisJc3Bpbl9sb2NrX2lycXNhdmUobHBvcnQtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCiAJaWYgKHNpLT5sYXN0X2Nhbl9xdWV1ZV9yYW1wX3VwX3RpbWUgJiYKIAkgICAgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHNpLT5sYXN0X2Nhbl9xdWV1ZV9yYW1wX3VwX3RpbWUgKwogCQkJIEZDX0NBTl9RVUVVRV9QRVJJT0QpKSkKLQkJcmV0dXJuOworCQlnb3RvIHVubG9jazsKIAogCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBzaS0+bGFzdF9jYW5fcXVldWVfcmFtcF9kb3duX3RpbWUgKwogCQkJRkNfQ0FOX1FVRVVFX1BFUklPRCkpCi0JCXJldHVybjsKKwkJZ290byB1bmxvY2s7CiAKIAlzaS0+bGFzdF9jYW5fcXVldWVfcmFtcF91cF90aW1lID0gamlmZmllczsKIApAQCAtMzYyLDYgKzM2MCw5IEBACiAJbHBvcnQtPmhvc3QtPmNhbl9xdWV1ZSA9IGNhbl9xdWV1ZTsKIAlzaG9zdF9wcmludGsoS0VSTl9FUlIsIGxwb3J0LT5ob3N0LCAibGliZmM6IGluY3JlYXNlZCAiCiAJCSAgICAgImNhbl9xdWV1ZSB0byAlZC5cbiIsIGNhbl9xdWV1ZSk7CisKK3VubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxwb3J0LT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIH0KIAogLyoqCkBAIC0zNzMsMTggKzM3NCwxOSBAQAogICogY29tbWFuZHMgY29tcGxldGUgb3IgdGltZW91dCwgdGhlbiB0cnkgYWdhaW4gd2l0aCBhIHJlZHVjZWQKICAqIGNhbl9xdWV1ZS4gRXZlbnR1YWxseSB3ZSB3aWxsIGhpdCB0aGUgcG9pbnQgd2hlcmUgd2UgcnVuCiAgKiBvbiBhbGwgcmVzZXJ2ZWQgc3RydWN0cy4KLSAqCi0gKiBMb2NraW5nIG5vdGVzOiBDYWxsZWQgd2l0aCBTY3NpX0hvc3QgbG9jayBoZWxkCiAgKi8KIHN0YXRpYyB2b2lkIGZjX2ZjcF9jYW5fcXVldWVfcmFtcF9kb3duKHN0cnVjdCBmY19scG9ydCAqbHBvcnQpCiB7CiAJc3RydWN0IGZjX2ZjcF9pbnRlcm5hbCAqc2kgPSBmY19nZXRfc2NzaV9pbnRlcm5hbChscG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgY2FuX3F1ZXVlOwogCisJc3Bpbl9sb2NrX2lycXNhdmUobHBvcnQtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOworCiAJaWYgKHNpLT5sYXN0X2Nhbl9xdWV1ZV9yYW1wX2Rvd25fdGltZSAmJgogCSAgICAodGltZV9iZWZvcmUoamlmZmllcywgc2ktPmxhc3RfY2FuX3F1ZXVlX3JhbXBfZG93bl90aW1lICsKIAkJCSBGQ19DQU5fUVVFVUVfUEVSSU9EKSkpCi0JCXJldHVybjsKKwkJZ290byB1bmxvY2s7CiAKIAlzaS0+bGFzdF9jYW5fcXVldWVfcmFtcF9kb3duX3RpbWUgPSBqaWZmaWVzOwogCkBAIC0zOTUsNiArMzk3LDkgQEAKIAlscG9ydC0+aG9zdC0+Y2FuX3F1ZXVlID0gY2FuX3F1ZXVlOwogCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgbHBvcnQtPmhvc3QsICJsaWJmYzogQ291bGQgbm90IGFsbG9jYXRlIGZyYW1lLlxuIgogCQkgICAgICJSZWR1Y2luZyBjYW5fcXVldWUgdG8gJWQuXG4iLCBjYW5fcXVldWUpOworCit1bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShscG9ydC0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBAIC00MDksMTYgKzQxNCwxMyBAQAogCQkJCQkJICBzaXplX3QgbGVuKQogewogCXN0cnVjdCBmY19mcmFtZSAqZnA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWZwID0gZmNfZnJhbWVfYWxsb2MobHBvcnQsIGxlbik7CiAJaWYgKGxpa2VseShmcCkpCiAJCXJldHVybiBmcDsKIAogCS8qIGVycm9yIGNhc2UgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZShscG9ydC0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJZmNfZmNwX2Nhbl9xdWV1ZV9yYW1wX2Rvd24obHBvcnQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobHBvcnQtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0xMDkzLDE2ICsxMDk1LDE0IEBACiAvKioKICAqIGdldF9mc3BfcmVjX3RvdigpIC0gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCBSRUNfVE9WCiAgKiBAZnNwOiB0aGUgRkNQIHBhY2tldAorICoKKyAqIFJldHVybnMgcmVjIHRvdiBpbiBqaWZmaWVzIGFzIHJwcml2LT5lX2RfdG92ICsgMSBzZWNvbmQKICAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X2ZzcF9yZWNfdG92KHN0cnVjdCBmY19mY3BfcGt0ICpmc3ApCiB7Ci0Jc3RydWN0IGZjX3Jwb3J0ICpycG9ydDsKLQlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcnByaXY7CisJc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJwcml2ID0gZnNwLT5ycG9ydC0+ZGRfZGF0YTsKIAotCXJwb3J0ID0gZnNwLT5ycG9ydDsKLQlycHJpdiA9IHJwb3J0LT5kZF9kYXRhOwotCi0JcmV0dXJuIHJwcml2LT5lX2RfdG92ICsgUkVDX1RPVl9DT05TVDsKKwlyZXR1cm4gbXNlY3NfdG9famlmZmllcyhycHJpdi0+ZV9kX3RvdikgKyBIWjsKIH0KIAogLyoqCkBAIC0xMTIyLDcgKzExMjIsNiBAQAogCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpycHJpdjsKIAljb25zdCBzaXplX3QgbGVuID0gc2l6ZW9mKGZzcC0+Y2RiX2NtZCk7CiAJaW50IHJjID0gMDsKLQl1bnNpZ25lZCBpbnQgcmVjX3RvdjsKIAogCWlmIChmY19mY3BfbG9ja19wa3QoZnNwKSkKIAkJcmV0dXJuIDA7CkBAIC0xMTUzLDEyICsxMTUyLDkgQEAKIAlmc3AtPnNlcV9wdHIgPSBzZXE7CiAJZmNfZmNwX3BrdF9ob2xkKGZzcCk7CS8qIGhvbGQgZm9yIGZjX2ZjcF9wa3RfZGVzdHJveSAqLwogCi0JcmVjX3RvdiA9IGdldF9mc3BfcmVjX3Rvdihmc3ApOwotCiAJc2V0dXBfdGltZXIoJmZzcC0+dGltZXIsIGZjX2ZjcF90aW1lb3V0LCAodW5zaWduZWQgbG9uZylmc3ApOwotCiAJaWYgKHJwcml2LT5mbGFncyAmIEZDX1JQX0ZMQUdTX1JFQ19TVVBQT1JURUQpCi0JCWZjX2ZjcF90aW1lcl9zZXQoZnNwLCByZWNfdG92KTsKKwkJZmNfZmNwX3RpbWVyX3NldChmc3AsIGdldF9mc3BfcmVjX3Rvdihmc3ApKTsKIAogdW5sb2NrOgogCWZjX2ZjcF91bmxvY2tfcGt0KGZzcCk7CkBAIC0xMjM1LDE2ICsxMjMxLDE0IEBACiB7CiAJc3RydWN0IGZjX2ZjcF9wa3QgKmZzcCA9IChzdHJ1Y3QgZmNfZmNwX3BrdCAqKWRhdGE7CiAJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IGZzcC0+bHA7Ci0JdW5zaWduZWQgaW50IHJlY190b3Y7CiAKIAlpZiAobHBvcnQtPnR0LmZjcF9jbWRfc2VuZChscG9ydCwgZnNwLCBmY190bV9kb25lKSkgewogCQlpZiAoZnNwLT5yZWNvdl9yZXRyeSsrID49IEZDX01BWF9SRUNPVl9SRVRSWSkKIAkJCXJldHVybjsKIAkJaWYgKGZjX2ZjcF9sb2NrX3BrdChmc3ApKQogCQkJcmV0dXJuOwotCQlyZWNfdG92ID0gZ2V0X2ZzcF9yZWNfdG92KGZzcCk7CiAJCXNldHVwX3RpbWVyKCZmc3AtPnRpbWVyLCBmY19sdW5fcmVzZXRfc2VuZCwgKHVuc2lnbmVkIGxvbmcpZnNwKTsKLQkJZmNfZmNwX3RpbWVyX3NldChmc3AsIHJlY190b3YpOworCQlmY19mY3BfdGltZXJfc2V0KGZzcCwgZ2V0X2ZzcF9yZWNfdG92KGZzcCkpOwogCQlmY19mY3BfdW5sb2NrX3BrdChmc3ApOwogCX0KIH0KQEAgLTE1MzYsMTIgKzE1MzAsMTEgQEAKIAkJCX0KIAkJCWZjX2ZjcF9zcnIoZnNwLCByX2N0bCwgb2Zmc2V0KTsKIAkJfSBlbHNlIGlmIChlX3N0YXQgJiBFU0JfU1RfU0VRX0lOSVQpIHsKLQkJCXVuc2lnbmVkIGludCByZWNfdG92ID0gZ2V0X2ZzcF9yZWNfdG92KGZzcCk7CiAJCQkvKgogCQkJICogVGhlIHJlbW90ZSBwb3J0IGhhcyB0aGUgaW5pdGlhdGl2ZSwgc28ganVzdAogCQkJICoga2VlcCB3YWl0aW5nIGZvciBpdCB0byBjb21wbGV0ZS4KIAkJCSAqLwotCQkJZmNfZmNwX3RpbWVyX3NldChmc3AsIHJlY190b3YpOworCQkJZmNfZmNwX3RpbWVyX3NldChmc3AsICBnZXRfZnNwX3JlY190b3YoZnNwKSk7CiAJCX0gZWxzZSB7CiAKIAkJCS8qCkBAIC0xNzA1LDcgKzE2OTgsNiBAQAogewogCXN0cnVjdCBmY19mY3BfcGt0ICpmc3AgPSBhcmc7CiAJc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqZmg7Ci0JdW5zaWduZWQgaW50IHJlY190b3Y7CiAKIAlpZiAoSVNfRVJSKGZwKSkgewogCQlmY19mY3Bfc3JyX2Vycm9yKGZzcCwgZnApOwpAQCAtMTczMiw4ICsxNzI0LDcgQEAKIAlzd2l0Y2ggKGZjX2ZyYW1lX3BheWxvYWRfb3AoZnApKSB7CiAJY2FzZSBFTFNfTFNfQUNDOgogCQlmc3AtPnJlY292X3JldHJ5ID0gMDsKLQkJcmVjX3RvdiA9IGdldF9mc3BfcmVjX3Rvdihmc3ApOwotCQlmY19mY3BfdGltZXJfc2V0KGZzcCwgcmVjX3Rvdik7CisJCWZjX2ZjcF90aW1lcl9zZXQoZnNwLCBnZXRfZnNwX3JlY190b3YoZnNwKSk7CiAJCWJyZWFrOwogCWNhc2UgRUxTX0xTX1JKVDoKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2xwb3J0LmMgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfbHBvcnQuYwppbmRleCA5MDZiYmNhLi4zODlhYjgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfbHBvcnQuYworKysgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfbHBvcnQuYwpAQCAtMTU5MCw3ICsxNTkwLDYgQEAKICAqLwogaW50IGZjX2xwb3J0X2NvbmZpZyhzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KQogewotCUlOSVRfTElTVF9IRUFEKCZscG9ydC0+ZW1hX2xpc3QpOwogCUlOSVRfREVMQVlFRF9XT1JLKCZscG9ydC0+cmV0cnlfd29yaywgZmNfbHBvcnRfdGltZW91dCk7CiAJbXV0ZXhfaW5pdCgmbHBvcnQtPmxwX211dGV4KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmYy5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmYy5oCmluZGV4IDYwZTk4YTYuLjAyZDUzZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmMuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjLmgKQEAgLTgwNSw2ICs4MDUsOCBAQAogCXN0cnVjdCBkZW50cnkgKmlkaWFnX3Jvb3Q7CiAJc3RydWN0IGRlbnRyeSAqaWRpYWdfcGNpX2NmZzsKIAlzdHJ1Y3QgZGVudHJ5ICppZGlhZ19xdWVfaW5mbzsKKwlzdHJ1Y3QgZGVudHJ5ICppZGlhZ19xdWVfYWNjOworCXN0cnVjdCBkZW50cnkgKmlkaWFnX2RyYl9hY2M7CiAjZW5kaWYKIAogCS8qIFVzZWQgZm9yIGRlZmVycmVkIGZyZWVpbmcgb2YgRUxTIGRhdGEgYnVmZmVycyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ic2cuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYnNnLmMKaW5kZXggNzdiMjg3MS4uMzdlMmExMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ic2cuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2JzZy5jCkBAIC0yNDI2LDYgKzI0MjYsNyBAQAogewogCXN0cnVjdCBic2dfam9iX2RhdGEgKmRkX2RhdGE7CiAJc3RydWN0IGZjX2JzZ19qb2IgKmpvYjsKKwlzdHJ1Y3QgbHBmY19tYnhfbmVtYmVkX2NtZCAqbmVtYmVkX3NnZTsKIAl1aW50MzJfdCBzaXplOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdWludDhfdCAqdG87CkBAIC0yNDY5LDkgKzI0NzAsOCBAQAogCQkJbWVtY3B5KHRvLCBmcm9tLCBzaXplKTsKIAkJfSBlbHNlIGlmICgocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KSAmJgogCQkJKHBtYm94cS0+dS5tYi5tYnhDb21tYW5kID09IE1CWF9TTEk0X0NPTkZJRykpIHsKLQkJCXN0cnVjdCBscGZjX21ieF9uZW1iZWRfY21kICpuZW1iZWRfc2dlID0KLQkJCQkoc3RydWN0IGxwZmNfbWJ4X25lbWJlZF9jbWQgKikKLQkJCQkmcG1ib3hxLT51Lm1iLnVuLnZhcldvcmRzWzBdOworCQkJbmVtYmVkX3NnZSA9IChzdHJ1Y3QgbHBmY19tYnhfbmVtYmVkX2NtZCAqKQorCQkJCQkmcG1ib3hxLT51Lm1iLnVuLnZhcldvcmRzWzBdOwogCiAJCQlmcm9tID0gKHVpbnQ4X3QgKilkZF9kYXRhLT5jb250ZXh0X3VuLm1ib3guZG1wLT5kbWEuCiAJCQkJCQl2aXJ0OwpAQCAtMjQ5NiwxNiArMjQ5NiwxOCBAQAogCQkJCQlqb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LAogCQkJCQlmcm9tLCBzaXplKTsKIAkJam9iLT5yZXBseS0+cmVzdWx0ID0gMDsKLQorCQkvKiBuZWVkIHRvIGhvbGQgdGhlIGxvY2sgdW50aWwgd2Ugc2V0IGpvYi0+ZGRfZGF0YSB0byBOVUxMCisJCSAqIHRvIGhvbGQgb2ZmIHRoZSB0aW1lb3V0IGhhbmRsZXIgcmV0dXJuaW5nIHRvIHRoZSBtaWQtbGF5ZXIKKwkJICogd2hpbGUgd2UgYXJlIHN0aWxsIHByb2Nlc3NpbmcgdGhlIGpvYi4KKwkJICovCiAJCWpvYi0+ZGRfZGF0YSA9IE5VTEw7CisJCWRkX2RhdGEtPmNvbnRleHRfdW4ubWJveC5zZXRfam9iID0gTlVMTDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+Y3RfZXZfbG9jaywgZmxhZ3MpOwogCQlqb2ItPmpvYl9kb25lKGpvYik7CisJfSBlbHNlIHsKKwkJZGRfZGF0YS0+Y29udGV4dF91bi5tYm94LnNldF9qb2IgPSBOVUxMOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5jdF9ldl9sb2NrLCBmbGFncyk7CiAJfQotCWRkX2RhdGEtPmNvbnRleHRfdW4ubWJveC5zZXRfam9iID0gTlVMTDsKLQkvKiBuZWVkIHRvIGhvbGQgdGhlIGxvY2sgdW50aWwgd2UgY2FsbCBqb2IgZG9uZSB0byBob2xkIG9mZgotCSAqIHRoZSB0aW1lb3V0IGhhbmRsZXIgcmV0dXJuaW5nIHRvIHRoZSBtaWRsYXllciB3aGlsZQotCSAqIHdlIGFyZSBzdGlsbHByb2Nlc3NpbmcgdGhlIGpvYgotCSAqLwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmN0X2V2X2xvY2ssIGZsYWdzKTsKIAogCWtmcmVlKGRkX2RhdGEtPmNvbnRleHRfdW4ubWJveC5tYik7CiAJbWVtcG9vbF9mcmVlKGRkX2RhdGEtPmNvbnRleHRfdW4ubWJveC5wbWJveHEsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwpAQCAtMjY0NCw2ICsyNjQ2LDExIEBACiAJc3RydWN0IHVscF9iZGU2NCAqcnhicGwgPSBOVUxMOwogCXN0cnVjdCBkZmNfbWJveF9yZXEgKm1ib3hfcmVxID0gKHN0cnVjdCBkZmNfbWJveF9yZXEgKikKIAkJam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZDsKKwlzdHJ1Y3QgUkVBRF9FVkVOVF9MT0dfVkFSICpyZEV2ZW50TG9nOworCXVpbnQzMl90IHRyYW5zbWl0X2xlbmd0aCwgcmVjZWl2ZV9sZW5ndGgsIG1vZGU7CisJc3RydWN0IGxwZmNfbWJ4X25lbWJlZF9jbWQgKm5lbWJlZF9zZ2U7CisJc3RydWN0IG1ib3hfaGVhZGVyICpoZWFkZXI7CisJc3RydWN0IHVscF9iZGU2NCAqYmRlOwogCXVpbnQ4X3QgKmV4dCA9IE5VTEw7CiAJaW50IHJjID0gMDsKIAl1aW50OF90ICpmcm9tOwpAQCAtMjY1MSw5ICsyNjU4LDE2IEBACiAJLyogaW4gY2FzZSBubyBkYXRhIGlzIHRyYW5zZmVycmVkICovCiAJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKIAorCS8qIHNhbml0eSBjaGVjayB0byBwcm90ZWN0IGRyaXZlciAqLworCWlmIChqb2ItPnJlcGx5X3BheWxvYWQucGF5bG9hZF9sZW4gPiBCU0dfTUJPWF9TSVpFIHx8CisJICAgIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnBheWxvYWRfbGVuID4gQlNHX01CT1hfU0laRSkgeworCQlyYyA9IC1FUkFOR0U7CisJCWdvdG8gam9iX2RvbmU7CisJfQorCiAJLyogY2hlY2sgaWYgcmVxdWVzdGVkIGV4dGVuZGVkIGRhdGEgbGVuZ3RocyBhcmUgdmFsaWQgKi8KLQlpZiAoKG1ib3hfcmVxLT5pbkV4dFdMZW4gPiBNQUlMQk9YX0VYVF9TSVpFKSB8fAotCQkobWJveF9yZXEtPm91dEV4dFdMZW4gPiBNQUlMQk9YX0VYVF9TSVpFKSkgeworCWlmICgobWJveF9yZXEtPmluRXh0V0xlbiA+IEJTR19NQk9YX1NJWkUvc2l6ZW9mKHVpbnQzMl90KSkgfHwKKwkgICAgKG1ib3hfcmVxLT5vdXRFeHRXTGVuID4gQlNHX01CT1hfU0laRS9zaXplb2YodWludDMyX3QpKSkgewogCQlyYyA9IC1FUkFOR0U7CiAJCWdvdG8gam9iX2RvbmU7CiAJfQpAQCAtMjc0NCw4ICsyNzU4LDggQEAKIAkgKiB1c2Ugb3VycwogCSAqLwogCWlmIChwbWItPm1ieENvbW1hbmQgPT0gTUJYX1JVTl9CSVVfRElBRzY0KSB7Ci0JCXVpbnQzMl90IHRyYW5zbWl0X2xlbmd0aCA9IHBtYi0+dW4udmFyV29yZHNbMV07Ci0JCXVpbnQzMl90IHJlY2VpdmVfbGVuZ3RoID0gcG1iLT51bi52YXJXb3Jkc1s0XTsKKwkJdHJhbnNtaXRfbGVuZ3RoID0gcG1iLT51bi52YXJXb3Jkc1sxXTsKKwkJcmVjZWl2ZV9sZW5ndGggPSBwbWItPnVuLnZhcldvcmRzWzRdOwogCQkvKiB0cmFuc21pdCBsZW5ndGggY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiByZWNlaXZlIGxlbmd0aCBvcgogCQkgKiBtYWlsYm94IGV4dGVuc2lvbiBzaXplCiAJCSAqLwpAQCAtMjc5NSwxMCArMjgwOSw5IEBACiAJCWZyb20gKz0gc2l6ZW9mKE1BSUxCT1hfdCk7CiAJCW1lbWNweSgodWludDhfdCAqKWRtcC0+ZG1hLnZpcnQsIGZyb20sIHRyYW5zbWl0X2xlbmd0aCk7CiAJfSBlbHNlIGlmIChwbWItPm1ieENvbW1hbmQgPT0gTUJYX1JFQURfRVZFTlRfTE9HKSB7Ci0JCXN0cnVjdCBSRUFEX0VWRU5UX0xPR19WQVIgKnJkRXZlbnRMb2cgPQotCQkJJnBtYi0+dW4udmFyUmRFdmVudExvZyA7Ci0JCXVpbnQzMl90IHJlY2VpdmVfbGVuZ3RoID0gcmRFdmVudExvZy0+cmN2X2JkZTY0LnR1cy5mLmJkZVNpemU7Ci0JCXVpbnQzMl90IG1vZGUgPQkgYmZfZ2V0KGxwZmNfZXZlbnRfbG9nLCByZEV2ZW50TG9nKTsKKwkJcmRFdmVudExvZyA9ICZwbWItPnVuLnZhclJkRXZlbnRMb2c7CisJCXJlY2VpdmVfbGVuZ3RoID0gcmRFdmVudExvZy0+cmN2X2JkZTY0LnR1cy5mLmJkZVNpemU7CisJCW1vZGUgPSBiZl9nZXQobHBmY19ldmVudF9sb2csIHJkRXZlbnRMb2cpOwogCiAJCS8qIHJlY2VpdmUgbGVuZ3RoIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gbWFpbGJveAogCQkgKiBleHRlbnNpb24gc2l6ZQpAQCAtMjg0Myw3ICsyODU2LDcgQEAKIAkJCS8qIHJlYnVpbGQgdGhlIGNvbW1hbmQgZm9yIHNsaTQgdXNpbmcgb3VyIG93biBidWZmZXJzCiAJCQkqIGxpa2Ugd2UgZG8gZm9yIGJpdSBkaWFncwogCQkJKi8KLQkJCXVpbnQzMl90IHJlY2VpdmVfbGVuZ3RoID0gcG1iLT51bi52YXJXb3Jkc1syXTsKKwkJCXJlY2VpdmVfbGVuZ3RoID0gcG1iLT51bi52YXJXb3Jkc1syXTsKIAkJCS8qIHJlY2VpdmUgbGVuZ3RoIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gbWFpbGJveAogCQkJICogZXh0ZW5zaW9uIHNpemUKIAkJCSAqLwpAQCAtMjg3OSw4ICsyODkyLDcgQEAKIAkJCXBtYi0+dW4udmFyV29yZHNbNF0gPSBwdXRQYWRkckhpZ2goZG1wLT5kbWEucGh5cyk7CiAJCX0gZWxzZSBpZiAoKHBtYi0+bWJ4Q29tbWFuZCA9PSBNQlhfVVBEQVRFX0NGRykgJiYKIAkJCXBtYi0+dW4udmFyVXBkYXRlQ2ZnLmNvKSB7Ci0JCQlzdHJ1Y3QgdWxwX2JkZTY0ICpiZGUgPQotCQkJCShzdHJ1Y3QgdWxwX2JkZTY0ICopJnBtYi0+dW4udmFyV29yZHNbNF07CisJCQliZGUgPSAoc3RydWN0IHVscF9iZGU2NCAqKSZwbWItPnVuLnZhcldvcmRzWzRdOwogCiAJCQkvKiBiZGUgc2l6ZSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIG1haWxib3ggZXh0IHNpemUgKi8KIAkJCWlmIChiZGUtPnR1cy5mLmJkZVNpemUgPiBNQUlMQk9YX0VYVF9TSVpFKSB7CkBAIC0yOTIxLDEwICsyOTMzLDYgQEAKIAkJCW1lbWNweSgodWludDhfdCAqKWRtcC0+ZG1hLnZpcnQsIGZyb20sCiAJCQkJYmRlLT50dXMuZi5iZGVTaXplKTsKIAkJfSBlbHNlIGlmIChwbWItPm1ieENvbW1hbmQgPT0gTUJYX1NMSTRfQ09ORklHKSB7Ci0JCQlzdHJ1Y3QgbHBmY19tYnhfbmVtYmVkX2NtZCAqbmVtYmVkX3NnZTsKLQkJCXN0cnVjdCBtYm94X2hlYWRlciAqaGVhZGVyOwotCQkJdWludDMyX3QgcmVjZWl2ZV9sZW5ndGg7Ci0KIAkJCS8qIHJlYnVpbGQgdGhlIGNvbW1hbmQgZm9yIHNsaTQgdXNpbmcgb3VyIG93biBidWZmZXJzCiAJCQkqIGxpa2Ugd2UgZG8gZm9yIGJpdSBkaWFncwogCQkJKi8KQEAgLTMzODYsNiArMzM5NCw3IEBACiAJam9iLT5kZF9kYXRhID0gTlVMTDsKIAlyZXR1cm4gcmM7CiB9CisKIC8qKgogICogbHBmY19ic2dfaHN0X3ZlbmRvciAtIHByb2Nlc3MgYSB2ZW5kb3Itc3BlY2lmaWMgZmNfYnNnX2pvYgogICogQGpvYjogZmNfYnNnX2pvYiB0byBoYW5kbGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYnNnLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2JzZy5oCmluZGV4IGEyYzMzZTcuLmI1NDJhY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYnNnLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ic2cuaApAQCAtMTA5LDMgKzEwOSwxMzMgQEAKIAl1aW50MzJfdCB4cmk7IC8qIHJldHVybiB0aGUgeHJpIG9mIHRoZSBpb2NiIGV4Y2hhbmdlICovCiB9OwogCisvKgorICogbWFjcm9zIGFuZCBkYXRhIHN0cnVjdHVyZXMgZm9yIGhhbmRsaW5nIHNsaS1jb25maWcgbWFpbGJveCBjb21tYW5kCisgKiBwYXNzLXRocm91Z2ggc3VwcG9ydCwgdGhpcyBoZWFkZXIgZmlsZSBpcyBzaGFyZWQgYmV0d2VlbiB1c2VyIGFuZAorICoga2VybmVsIHNwYWNlcywgbm90ZSB0aGUgc2V0IG9mIG1hY3JvcyBhcmUgZHVwbGljYXRlcyBmcm9tIGxwZmNfaHc0LmgsCisgKiB3aXRoIG1hY3JvIG5hbWVzIHByZWZpeGVkIHdpdGggYnNnXywgYXMgdGhlIG1hY3JvcyBkZWZpbmVkIGluCisgKiBscGZjX2h3NC5oIGFyZSBub3QgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UuCisgKi8KKworLyogTWFjcm9zIHRvIGRlYWwgd2l0aCBiaXQgZmllbGRzLiBFYWNoIGJpdCBmaWVsZCBtdXN0IGhhdmUgMyAjZGVmaW5lcworICogYXNzb2NpYXRlZCB3aXRoIGl0IChfU0hJRlQsIF9NQVNLLCBhbmQgX1dPUkQpLgorICogRUcuIEZvciBhIGJpdCBmaWVsZCB0aGF0IGlzIGluIHRoZSA3dGggYml0IG9mIHRoZSAiZmllbGQ0IiBmaWVsZCBvZiBhCisgKiBzdHJ1Y3R1cmUgYW5kIGlzIDIgYml0cyBpbiBzaXplIHRoZSBmb2xsb3dpbmcgI2RlZmluZXMgbXVzdCBleGlzdDoKKyAqICAgICAgc3RydWN0IHRlbXAgeworICogICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgICBmaWVsZDE7CisgKiAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgIGZpZWxkMjsKKyAqICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICAgZmllbGQzOworICogICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgICBmaWVsZDQ7CisgKiAgICAgICNkZWZpbmUgZXhhbXBsZV9iaXRfZmllbGRfU0hJRlQgICAgICAgICA3CisgKiAgICAgICNkZWZpbmUgZXhhbXBsZV9iaXRfZmllbGRfTUFTSyAgICAgICAgICAweDAzCisgKiAgICAgICNkZWZpbmUgZXhhbXBsZV9iaXRfZmllbGRfV09SRCAgICAgICAgICBmaWVsZDQKKyAqICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICAgZmllbGQ1OworICogICAgICB9OworICogVGhlbiB0aGUgbWFjcm9zIGJlbG93IG1heSBiZSB1c2VkIHRvIGdldCBvciBzZXQgdGhlIHZhbHVlIG9mIHRoYXQgZmllbGQuCisgKiBFRy4gVG8gZ2V0IHRoZSB2YWx1ZSBvZiB0aGUgYml0IGZpZWxkIGZyb20gdGhlIGFib3ZlIGV4YW1wbGU6CisgKiAgICAgIHN0cnVjdCB0ZW1wIHQxOworICogICAgICB2YWx1ZSA9IGJzZ19iZl9nZXQoZXhhbXBsZV9iaXRfZmllbGQsICZ0MSk7CisgKiBBbmQgdGhlbiB0byBzZXQgdGhhdCBiaXQgZmllbGQ6CisgKiAgICAgIGJzZ19iZl9zZXQoZXhhbXBsZV9iaXRfZmllbGQsICZ0MSwgMik7CisgKiBPciBjbGVhciB0aGF0IGJpdCBmaWVsZDoKKyAqICAgICAgYnNnX2JmX3NldChleGFtcGxlX2JpdF9maWVsZCwgJnQxLCAwKTsKKyAqLworI2RlZmluZSBic2dfYmZfZ2V0X2xlMzIobmFtZSwgcHRyKSBcCisJKChsZTMyX3RvX2NwdSgocHRyKS0+bmFtZSMjX1dPUkQpID4+IG5hbWUjI19TSElGVCkgJiBuYW1lIyNfTUFTSykKKyNkZWZpbmUgYnNnX2JmX2dldChuYW1lLCBwdHIpIFwKKwkoKChwdHIpLT5uYW1lIyNfV09SRCA+PiBuYW1lIyNfU0hJRlQpICYgbmFtZSMjX01BU0spCisjZGVmaW5lIGJzZ19iZl9zZXRfbGUzMihuYW1lLCBwdHIsIHZhbHVlKSBcCisJKChwdHIpLT5uYW1lIyNfV09SRCA9IGNwdV90b19sZTMyKCgoKCh2YWx1ZSkgJiBcCisJbmFtZSMjX01BU0spIDw8IG5hbWUjI19TSElGVCkgfCAobGUzMl90b19jcHUoKHB0ciktPm5hbWUjI19XT1JEKSAmIFwKKwl+KG5hbWUjI19NQVNLIDw8IG5hbWUjI19TSElGVCkpKSkpCisjZGVmaW5lIGJzZ19iZl9zZXQobmFtZSwgcHRyLCB2YWx1ZSkgXAorCSgocHRyKS0+bmFtZSMjX1dPUkQgPSAoKCgodmFsdWUpICYgbmFtZSMjX01BU0spIDw8IG5hbWUjI19TSElGVCkgfCBcCisJKChwdHIpLT5uYW1lIyNfV09SRCAmIH4obmFtZSMjX01BU0sgPDwgbmFtZSMjX1NISUZUKSkpKQorCisvKgorICogVGhlIHNsaV9jb25maWcgc3RydWN0dXJlIHNwZWNpZmllZCBoZXJlIGlzIGJhc2VkIG9uIHRoZSBmb2xsb3dpbmcKKyAqIHJlc3RyaWN0aW9uOgorICoKKyAqIC0tIFNMSV9DT05GSUcgRU1CPTAsIGNhcnJ5aW5nIE1TRXMsIHdpbGwgY2Fycnkgc3ViY29tbWFuZHMgd2l0aG91dAorICogICAgY2FycnlpbmcgSEJELgorICogLS0gU0xJX0NPTkZJRyBFTUI9MSwgbm90IGNhcnJ5aW5nIE1TRSwgd2lsbCBjYXJyeSBzdWJjb21tYW5kcyB3aXRoIG9yCisgKiAgICB3aXRob3V0IGNhcnJ5aW5nIEhCRHMuCisgKi8KKworc3RydWN0IGxwZmNfc2xpX2NvbmZpZ19tc2UgeworCXVpbnQzMl90IHBhX2xvOworCXVpbnQzMl90IHBhX2hpOworCXVpbnQzMl90IGJ1Zl9sZW47CisjZGVmaW5lIGxwZmNfbWJveF9zbGlfY29uZmlnX21zZV9sZW5fU0hJRlQJMAorI2RlZmluZSBscGZjX21ib3hfc2xpX2NvbmZpZ19tc2VfbGVuX01BU0sJMHhmZmZmZmYKKyNkZWZpbmUgbHBmY19tYm94X3NsaV9jb25maWdfbXNlX2xlbl9XT1JECWJ1Zl9sZW4KK307CisKK3N0cnVjdCBscGZjX3NsaV9jb25maWdfc3ViY21kX2hiZCB7CisJdWludDMyX3QgYnVmX2xlbjsKKyNkZWZpbmUgbHBmY19tYm94X3NsaV9jb25maWdfZWNtbl9oYmRfbGVuX1NISUZUCTAKKyNkZWZpbmUgbHBmY19tYm94X3NsaV9jb25maWdfZWNtbl9oYmRfbGVuX01BU0sJMHhmZmZmZmYKKyNkZWZpbmUgbHBmY19tYm94X3NsaV9jb25maWdfZWNtbl9oYmRfbGVuX1dPUkQJYnVmX2xlbgorCXVpbnQzMl90IHBhX2xvOworCXVpbnQzMl90IHBhX2hpOworfTsKKworc3RydWN0IGxwZmNfc2xpX2NvbmZpZ19oZHIgeworCXVpbnQzMl90IHdvcmQxOworI2RlZmluZSBscGZjX21ib3hfaGRyX2VtYl9TSElGVAkJMAorI2RlZmluZSBscGZjX21ib3hfaGRyX2VtYl9NQVNLCQkweDAwMDAwMDAxCisjZGVmaW5lIGxwZmNfbWJveF9oZHJfZW1iX1dPUkQJCXdvcmQxCisjZGVmaW5lIGxwZmNfbWJveF9oZHJfbXNlX2NudF9TSElGVAkzCisjZGVmaW5lIGxwZmNfbWJveF9oZHJfbXNlX2NudF9NQVNLCTB4MDAwMDAwMWYKKyNkZWZpbmUgbHBmY19tYm94X2hkcl9tc2VfY250X1dPUkQJd29yZDEKKwl1aW50MzJfdCBwYXlsb2FkX2xlbmd0aDsKKwl1aW50MzJfdCB0YWdfbG87CisJdWludDMyX3QgdGFnX2hpOworCXVpbnQzMl90IHJlc2VydmVkNTsKK307CisKK3N0cnVjdCBscGZjX3NsaV9jb25maWdfZ2VuZXJpYyB7CisJc3RydWN0IGxwZmNfc2xpX2NvbmZpZ19oZHIJc2xpX2NvbmZpZ19oZHI7CisjZGVmaW5lIExQRkNfTUJYX1NMSV9DT05GSUdfTUFYX01TRSAgICAgMTkKKwlzdHJ1Y3QgbHBmY19zbGlfY29uZmlnX21zZQltc2VbTFBGQ19NQlhfU0xJX0NPTkZJR19NQVhfTVNFXTsKK307CisKK3N0cnVjdCBscGZjX3NsaV9jb25maWdfc3ViY21uZCB7CisJc3RydWN0IGxwZmNfc2xpX2NvbmZpZ19oZHIJc2xpX2NvbmZpZ19oZHI7CisJdWludDMyX3Qgd29yZDY7CisjZGVmaW5lIGxwZmNfc3ViY21uZF9vcGNvZGVfU0hJRlQJMAorI2RlZmluZSBscGZjX3N1YmNtbmRfb3Bjb2RlX01BU0sJMHhmZgorI2RlZmluZSBscGZjX3N1YmNtbmRfb3Bjb2RlX1dPUkQJd29yZDYKKyNkZWZpbmUgbHBmY19zdWJjbW5kX3N1YnN5c19TSElGVAk4CisjZGVmaW5lIGxwZmNfc3ViY21uZF9zdWJzeXNfTUFTSwkweGZmCisjZGVmaW5lIGxwZmNfc3ViY21uZF9zdWJzeXNfV09SRAl3b3JkNgorCXVpbnQzMl90IHRpbWVvdXQ7CisJdWludDMyX3QgcmVxdWVzdF9sZW5ndGg7CisJdWludDMyX3Qgd29yZDk7CisjZGVmaW5lIGxwZmNfc3ViY21uZF92ZXJzaW9uX1NISUZUCTAKKyNkZWZpbmUgbHBmY19zdWJjbW5kX3ZlcnNpb25fTUFTSwkweGZmCisjZGVmaW5lIGxwZmNfc3ViY21uZF92ZXJzaW9uX1dPUkQJd29yZDkKKwl1aW50MzJfdCB3b3JkMTA7CisjZGVmaW5lIGxwZmNfc3ViY21uZF9hc2tfcmRfbGVuX1NISUZUCTAKKyNkZWZpbmUgbHBmY19zdWJjbW5kX2Fza19yZF9sZW5fTUFTSwkweGZmZmZmZgorI2RlZmluZSBscGZjX3N1YmNtbmRfYXNrX3JkX2xlbl9XT1JECXdvcmQxMAorCXVpbnQzMl90IHJkX29mZnNldDsKKwl1aW50MzJfdCBvYmpfbmFtZVsyNl07CisJdWludDMyX3QgaGJkX2NvdW50OworI2RlZmluZSBMUEZDX01CWF9TTElfQ09ORklHX01BWF9IQkQJMTAKKwlzdHJ1Y3QgbHBmY19zbGlfY29uZmlnX3N1YmNtZF9oYmQgICBoYmRbTFBGQ19NQlhfU0xJX0NPTkZJR19NQVhfSEJEXTsKK307CisKK3N0cnVjdCBscGZjX3NsaV9jb25maWdfbWJveCB7CisJdWludDMyX3Qgd29yZDA7CisjZGVmaW5lIGxwZmNfbXFlX3N0YXR1c19TSElGVAkJMTYKKyNkZWZpbmUgbHBmY19tcWVfc3RhdHVzX01BU0sJCTB4MDAwMEZGRkYKKyNkZWZpbmUgbHBmY19tcWVfc3RhdHVzX1dPUkQJCXdvcmQwCisjZGVmaW5lIGxwZmNfbXFlX2NvbW1hbmRfU0hJRlQJCTgKKyNkZWZpbmUgbHBmY19tcWVfY29tbWFuZF9NQVNLCQkweDAwMDAwMEZGCisjZGVmaW5lIGxwZmNfbXFlX2NvbW1hbmRfV09SRAkJd29yZDAKKwl1bmlvbiB7CisJCXN0cnVjdCBscGZjX3NsaV9jb25maWdfZ2VuZXJpYwlzbGlfY29uZmlnX2dlbmVyaWM7CisJCXN0cnVjdCBscGZjX3NsaV9jb25maWdfc3ViY21uZAlzbGlfY29uZmlnX3N1YmNtbmQ7CisJfSB1bjsKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jCmluZGV4IDNkOTY3NzQuLmM5M2ZjYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5jCkBAIC0xMTE5LDE3MiArMTExOSwxNCBAQAogfQogCiAvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBpRGlhZyBkZWJ1Z2ZzIGZpbGUgYWNjZXNzIG1ldGhvZHMKLSAqLwotCi0vKgotICogaURpYWcgUENJIGNvbmZpZyBzcGFjZSByZWdpc3RlciBhY2Nlc3MgbWV0aG9kczoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKLSAqIFRoZSBQQ0kgY29uZmlnIHNwYWNlIHJlZ2lzdGVyIGFjY2Vzc2VlcyBvZiByZWFkLCB3cml0ZSwgcmVhZC1tb2RpZnktd3JpdGUKLSAqIGZvciBzZXQgYml0cywgYW5kIHJlYWQtbW9kaWZ5LXdyaXRlIGZvciBjbGVhciBiaXRzIHRvIFNMSTQgUENJIGZ1bmN0aW9ucwotICogYXJlIHByb3ZpZGVkLiBJbiB0aGUgcHJvcGVyIFNMSTQgUENJIGZ1bmN0aW9uJ3MgZGVidWdmcyBpRGlhZyBkaXJlY3RvcnksCisgKiBBbGwgYWNjZXNzIG1ldGhvZHMgYXJlIHRocm91Z2ggdGhlIHByb3BlciBTTEk0IFBDSSBmdW5jdGlvbidzIGRlYnVnZnMKKyAqIGlEaWFnIGRpcmVjdG9yeToKICAqCi0gKiAgICAgIC9zeXMva2VybmVsL2RlYnVnL2xwZmMvZm48Iz4vaURpYWcKLSAqCi0gKiB0aGUgYWNjZXNzIGlzIHRocm91Z2ggdGhlIGRlYnVnZnMgZW50cnkgcGNpQ2ZnOgotICoKLSAqIDEuIEZvciBQQ0kgY29uZmlnIHNwYWNlIHJlZ2lzdGVyIHJlYWQgYWNjZXNzLCB0aGVyZSBhcmUgdHdvIHJlYWQgbWV0aG9kczoKLSAqICAgIEEpIHJlYWQgYSBzaW5nbGUgUENJIGNvbmZpZyBzcGFjZSByZWdpc3RlciBpbiB0aGUgc2l6ZSBvZiBhIGJ5dGUKLSAqICAgICg4IGJpdHMpLCBhIHdvcmQgKDE2IGJpdHMpLCBvciBhIGR3b3JkICgzMiBiaXRzKTsgb3IgQikgYnJvd3NlIHRocm91Z2gKLSAqICAgIHRoZSA0SyBleHRlbmRlZCBQQ0kgY29uZmlnIHNwYWNlLgotICoKLSAqICAgIEEpIFJlYWQgYSBzaW5nbGUgUENJIGNvbmZpZyBzcGFjZSByZWdpc3RlciBjb25zaXN0cyBvZiB0d28gc3RlcHM6Ci0gKgotICogICAgU3RlcC0xOiBTZXQgdXAgUENJIGNvbmZpZyBzcGFjZSByZWdpc3RlciByZWFkIGNvbW1hbmQsIHRoZSBjb21tYW5kCi0gKiAgICBzeW50YXggaXMsCi0gKgotICogICAgICAgIGVjaG8gMSA8d2hlcmU+IDxjb3VudD4gPiBwY2lDZmcKLSAqCi0gKiAgICB3aGVyZSwgMSBpcyB0aGUgaURpYWcgY29tbWFuZCBmb3IgUENJIGNvbmZpZyBzcGFjZSByZWFkLCA8d2hlcmU+IGlzIHRoZQotICogICAgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZGV2aWNlJ3MgUENJIGNvbmZpZyBzcGFjZSB0byByZWFkIGZyb20sCi0gKiAgICBhbmQgPGNvdW50PiBpcyB0aGUgc2l6ZSBvZiBQQ0kgY29uZmlnIHNwYWNlIHJlZ2lzdGVyIGRhdGEgdG8gcmVhZCBiYWNrLAotICogICAgaXQgd2lsbCBiZSAxIGZvciByZWFkaW5nIGEgYnl0ZSAoOCBiaXRzKSwgMiBmb3IgcmVhZGluZyBhIHdvcmQgKDE2IGJpdHMKLSAqICAgIG9yIDIgYnl0ZXMpLCBvciA0IGZvciByZWFkaW5nIGEgZHdvcmQgKDMyIGJpdHMgb3IgNCBieXRlcykuCi0gKgotICogICAgU2V0cC0yOiBQZXJmb3JtIHRoZSBkZWJ1Z2ZzIHJlYWQgb3BlcmF0aW9uIHRvIGV4ZWN1dGUgdGhlIGlkaWFnIGNvbW1hbmQKLSAqICAgIHNldCB1cCBpbiBTdGVwLTEsCi0gKgotICogICAgICAgIGNhdCBwY2lDZmcKLSAqCi0gKiAgICBFeGFtcGxlczoKLSAqICAgIFRvIHJlYWQgUENJIGRldmljZSdzIHZlbmRvci1pZCBhbmQgZGV2aWNlLWlkIGZyb20gUENJIGNvbmZpZyBzcGFjZSwKLSAqCi0gKiAgICAgICAgZWNobyAxIDAgNCA+IHBjaUNmZwotICogICAgICAgIGNhdCBwY2lDZmcKLSAqCi0gKiAgICBUbyByZWFkIFBDSSBkZXZpY2UncyBjdXJybnQgY29tbWFuZCBmcm9tIGNvbmZpZyBzcGFjZSwKLSAqCi0gKiAgICAgICAgZWNobyAxIDQgMiA+IHBjaUNmZwotICogICAgICAgIGNhdCBwY2lDZmcKLSAqCi0gKiAgICBCKSBCcm93c2UgdGhyb3VnaCB0aGUgZW50aXJlIDRLIGV4dGVuZGVkIFBDSSBjb25maWcgc3BhY2UgYWxzbyBjb25zaXN0cwotICogICAgb2YgdHdvIHN0ZXBzOgotICoKLSAqICAgIFN0ZXAtMTogU2V0IHVwIFBDSSBjb25maWcgc3BhY2UgcmVnaXN0ZXIgYnJvd3NpbmcgY29tbWFuZCwgdGhlIGNvbW1hbmQKLSAqICAgIHN5bnRheCBpcywKLSAqCi0gKiAgICAgICAgZWNobyAxIDAgNDA5NiA+IHBjaUNmZwotICoKLSAqICAgIHdoZXJlLCAxIGlzIHRoZSBpRGlhZyBjb21tYW5kIGZvciBQQ0kgY29uZmlnIHNwYWNlIHJlYWQsIDAgbXVzdCBiZSB1c2VkCi0gKiAgICBhcyB0aGUgb2Zmc2V0IGZvciBQQ0kgY29uZmlnIHNwYWNlIHJlZ2lzdGVyIGJyb3dzZSwgYW5kIDQwOTYgbXVzdCBiZQotICogICAgdXNlZCBhcyB0aGUgY291bnQgZm9yIFBDSSBjb25maWcgc3BhY2UgcmVnaXN0ZXIgYnJvd3NlLgotICoKLSAqICAgIFN0ZXAtMjogUmVwZWF0ZWx5IGlzc3VlIHRoZSBkZWJ1Z2ZzIHJlYWQgb3BlcmF0aW9uIHRvIGJyb3dzZSB0aHJvdWdoCi0gKiAgICB0aGUgZW50aXJlIFBDSSBjb25maWcgc3BhY2UgcmVnaXN0ZXJzOgotICoKLSAqICAgICAgICBjYXQgcGNpQ2ZnCi0gKiAgICAgICAgY2F0IHBjaUNmZwotICogICAgICAgIGNhdCBwY2lDZmcKLSAqICAgICAgICAuLi4KLSAqCi0gKiAgICBXaGVuIGJyb3dzaW5nIHRvIHRoZSBlbmQgb2YgdGhlIDRLIFBDSSBjb25maWcgc3BhY2UsIHRoZSBicm93c2UgbWV0aG9kCi0gKiAgICBzaGFsbCB3cmFwIGFyb3VuZCB0byBzdGFydCByZWFkaW5nIGZyb20gYmVnaW5uaW5nIGFnYWluLCBhbmQgYWdhaW4uLi4KLSAqCi0gKiAyLiBGb3IgUENJIGNvbmZpZyBzcGFjZSByZWdpc3RlciB3cml0ZSBhY2Nlc3MsIGl0IHN1cHBvcnRzIGEgc2luZ2xlIFBDSQotICogICAgY29uZmlnIHNwYWNlIHJlZ2lzdGVyIHdyaXRlIGluIHRoZSBzaXplIG9mIGEgYnl0ZSAoOCBiaXRzKSwgYSB3b3JkCi0gKiAgICAoMTYgYml0cyksIG9yIGEgZHdvcmQgKDMyIGJpdHMpLiBUaGUgY29tbWFuZCBzeW50YXggaXMsCi0gKgotICogICAgICAgIGVjaG8gMiA8d2hlcmU+IDxjb3VudD4gPHZhbHVlPiA+IHBjaUNmZwotICoKLSAqICAgIHdoZXJlLCAyIGlzIHRoZSBpRGlhZyBjb21tYW5kIGZvciBQQ0kgY29uZmlnIHNwYWNlIHdyaXRlLCA8d2hlcmU+IGlzCi0gKiAgICB0aGUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZGV2aWNlJ3MgUENJIGNvbmZpZyBzcGFjZSB0byB3cml0ZQotICogICAgaW50bywgPGNvdW50PiBpcyB0aGUgc2l6ZSBvZiBkYXRhIHRvIHdyaXRlIGludG8gdGhlIFBDSSBjb25maWcgc3BhY2UsCi0gKiAgICBpdCB3aWxsIGJlIDEgZm9yIHdyaXRpbmcgYSBieXRlICg4IGJpdHMpLCAyIGZvciB3cml0aW5nIGEgd29yZCAoMTYgYml0cwotICogICAgb3IgMiBieXRlcyksIG9yIDQgZm9yIHdyaXRpbmcgYSBkd29yZCAoMzIgYml0cyBvciA0IGJ5dGVzKSwgYW5kIDx2YWx1ZT4KLSAqICAgIGlzIHRoZSBkYXRhIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgUENJIGNvbmZpZyBzcGFjZSByZWdpc3RlciBhdCB0aGUKLSAqICAgIG9mZnNldC4KLSAqCi0gKiAgICBFeGFtcGxlczoKLSAqICAgIFRvIGRpc2FibGUgUENJIGRldmljZSdzIGludGVycnVwdCBhc3NlcnRpb24sCi0gKgotICogICAgMSkgUmVhZCBpbiBkZXZpY2UncyBQQ0kgY29uZmlnIHNwYWNlIHJlZ2lzdGVyIGNvbW1hbmQgZmllbGQgPGNtZD46Ci0gKgotICogICAgICAgICAgIGVjaG8gMSA0IDIgPiBwY2lDZmcKLSAqICAgICAgICAgICBjYXQgcGNpQ2ZnCi0gKgotICogICAgMikgU2V0IGJpdCAxMCAoSW50ZXJydXB0IERpc2FibGUgYml0KSBpbiB0aGUgPGNtZD46Ci0gKgotICogICAgICAgICAgIDxjbWQ+ID0gPGNtZD4gfCAoMSA8IDEwKQotICoKLSAqICAgIDMpIFdyaXRlIHRoZSBtb2RpZmllZCBjb21tYW5kIGJhY2s6Ci0gKgotICogICAgICAgICAgIGVjaG8gMiA0IDIgPGNtZD4gPiBwY2lDZmcKLSAqCi0gKiAzLiBGb3IgUENJIGNvbmZpZyBzcGFjZSByZWdpc3RlciBzZXQgYml0cyBhY2Nlc3MsIGl0IHN1cHBvcnRzIGEgc2luZ2xlIFBDSQotICogICAgY29uZmlnIHNwYWNlIHJlZ2lzdGVyIHNldCBiaXRzIGluIHRoZSBzaXplIG9mIGEgYnl0ZSAoOCBiaXRzKSwgYSB3b3JkCi0gKiAgICAoMTYgYml0cyksIG9yIGEgZHdvcmQgKDMyIGJpdHMpLiBUaGUgY29tbWFuZCBzeW50YXggaXMsCi0gKgotICogICAgICAgIGVjaG8gMyA8d2hlcmU+IDxjb3VudD4gPGJpdG1hc2s+ID4gcGNpQ2ZnCi0gKgotICogICAgd2hlcmUsIDMgaXMgdGhlIGlEaWFnIGNvbW1hbmQgZm9yIFBDSSBjb25maWcgc3BhY2Ugc2V0IGJpdHMsIDx3aGVyZT4gaXMKLSAqICAgIHRoZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkZXZpY2UncyBQQ0kgY29uZmlnIHNwYWNlIHRvIHNldAotICogICAgYml0cyBpbnRvLCA8Y291bnQ+IGlzIHRoZSBzaXplIG9mIHRoZSBiaXRtYXNrIHRvIHNldCBpbnRvIHRoZSBQQ0kgY29uZmlnCi0gKiAgICBzcGFjZSwgaXQgd2lsbCBiZSAxIGZvciBzZXR0aW5nIGEgYnl0ZSAoOCBiaXRzKSwgMiBmb3Igc2V0dGluZyBhIHdvcmQKLSAqICAgICgxNiBiaXRzIG9yIDIgYnl0ZXMpLCBvciA0IGZvciBzZXR0aW5nIGEgZHdvcmQgKDMyIGJpdHMgb3IgNCBieXRlcyksIGFuZAotICogICAgPGJpdG1hc2s+IGlzIHRoZSBiaXRtYXNrLCBpbmRpY2F0aW5nIHRoZSBiaXRzIHRvIGJlIHNldCBpbnRvIHRoZSBQQ0kKLSAqICAgIGNvbmZpZyBzcGFjZSByZWdpc3RlciBhdCB0aGUgb2Zmc2V0LiBUaGUgbG9naWMgcGVyZm9ybWVkIHRvIHRoZSBjb250ZW50Ci0gKiAgICBvZiB0aGUgUENJIGNvbmZpZyBzcGFjZSByZWdpc3RlciwgcmVndmFsLCBpcywKLSAqCi0gKiAgICAgICAgcmVndmFsIHw9IDxiaXRtYXNrPgotICoKLSAqIDQuIEZvciBQQ0kgY29uZmlnIHNwYWNlIHJlZ2lzdGVyIGNsZWFyIGJpdHMgYWNjZXNzLCBpdCBzdXBwb3J0cyBhIHNpbmdsZQotICogICAgUENJIGNvbmZpZyBzcGFjZSByZWdpc3RlciBjbGVhciBiaXRzIGluIHRoZSBzaXplIG9mIGEgYnl0ZSAoOCBiaXRzKSwKLSAqICAgIGEgd29yZCAoMTYgYml0cyksIG9yIGEgZHdvcmQgKDMyIGJpdHMpLiBUaGUgY29tbWFuZCBzeW50YXggaXMsCi0gKgotICogICAgICAgIGVjaG8gNCA8d2hlcmU+IDxjb3VudD4gPGJpdG1hc2s+ID4gcGNpQ2ZnCi0gKgotICogICAgd2hlcmUsIDQgaXMgdGhlIGlEaWFnIGNvbW1hbmQgZm9yIFBDSSBjb25maWcgc3BhY2UgY2xlYXIgYml0cywgPHdoZXJlPgotICogICAgaXMgdGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRldmljZSdzIFBDSSBjb25maWcgc3BhY2UgdG8KLSAqICAgIGNsZWFyIGJpdHMgZnJvbSwgPGNvdW50PiBpcyB0aGUgc2l6ZSBvZiB0aGUgYml0bWFzayB0byBzZXQgaW50byB0aGUgUENJCi0gKiAgICBjb25maWcgc3BhY2UsIGl0IHdpbGwgYmUgMSBmb3Igc2V0dGluZyBhIGJ5dGUgKDggYml0cyksIDIgZm9yIHNldHRpbmcKLSAqICAgIGEgd29yZCgxNiBiaXRzIG9yIDIgYnl0ZXMpLCBvciA0IGZvciBzZXR0aW5nIGEgZHdvcmQgKDMyIGJpdHMgb3IgNAotICogICAgYnl0ZXMpLCBhbmQgPGJpdG1hc2s+IGlzIHRoZSBiaXRtYXNrLCBpbmRpY2F0aW5nIHRoZSBiaXRzIHRvIGJlIGNsZWFyZWQKLSAqICAgIGZyb20gdGhlIFBDSSBjb25maWcgc3BhY2UgcmVnaXN0ZXIgYXQgdGhlIG9mZnNldC4gdGhlIGxvZ2ljIHBlcmZvcm1lZAotICogICAgdG8gdGhlIGNvbnRlbnQgb2YgdGhlIFBDSSBjb25maWcgc3BhY2UgcmVnaXN0ZXIsIHJlZ3ZhbCwgaXMsCi0gKgotICogICAgICAgIHJlZ3ZhbCAmPSB+PGJpdG1hc2s+Ci0gKgotICogTm90ZSwgZm9yIGFsbCBzaW5nbGUgcmVnaXN0ZXIgcmVhZCwgd3JpdGUsIHNldCBiaXRzLCBvciBjbGVhciBiaXRzIGFjY2VzcywKLSAqIHRoZSBvZmZzZXQgKDx3aGVyZT4pIG11c3QgYmUgYWxpZ25lZCB3aXRoIHRoZSBzaXplIG9mIHRoZSBkYXRhOgotICoKLSAqIEZvciBkYXRhIHNpemUgb2YgYnl0ZSAoOCBiaXRzKSwgdGhlIG9mZnNldCBtdXN0IGJlIGFsaWduZWQgdG8gdGhlIGJ5dGUKLSAqIGJvdW5kYXJ5OyBmb3IgZGF0YSBzaXplIG9mIHdvcmQgKDE2IGJpdHMpLCB0aGUgb2Zmc2V0IG11c3QgYmUgYWxpZ25lZAotICogdG8gdGhlIHdvcmQgYm91bmRhcnk7IHdoaWxlIGZvciBkYXRhIHNpemUgb2YgZHdvcmQgKDMyIGJpdHMpLCB0aGUgb2Zmc2V0Ci0gKiBtdXN0IGJlIGFsaWduZWQgdG8gdGhlIGR3b3JkIGJvdW5kYXJ5LiBPdGhlcndpc2UsIHRoZSBpbnRlcmZhY2Ugd2lsbAotICogcmV0dXJuIHRoZSBlcnJvcjoKLSAqCi0gKiAgICAgIi1iYXNoOiBlY2hvOiB3cml0ZSBlcnJvcjogSW52YWxpZCBhcmd1bWVudCIuCi0gKgotICogRm9yIGV4YW1wbGU6Ci0gKgotICogICAgIGVjaG8gMSAyIDQgPiBwY2lDZmcKLSAqICAgICAtYmFzaDogZWNobzogd3JpdGUgZXJyb3I6IEludmFsaWQgYXJndW1lbnQKLSAqCi0gKiBOb3RlIGFsc28sIGFsbCBvZiB0aGUgbnVtYmVycyBpbiB0aGUgY29tbWFuZCBmaWVsZHMgZm9yIGFsbCByZWFkLCB3cml0ZSwKLSAqIHNldCBiaXRzLCBhbmQgY2xlYXIgYml0cyBQQ0kgY29uZmlnIHNwYWNlIHJlZ2lzdGVyIGNvbW1hbmQgZmllbGRzIGNhbiBiZQotICogZWl0aGVyIGRlY2ltYWwgb3IgaGV4LgotICoKLSAqIEZvciBleGFtcGxlLAotICogICAgIGVjaG8gMSAwIDQwOTYgPiBwY2lDZmcKLSAqCi0gKiB3aWxsIGJlIHRoZSBzYW1lIGFzCi0gKiAgICAgZWNobyAxIDAgMHgxMDAwID4gcGNpQ2ZnCi0gKgotICogQW5kLAotICogICAgIGVjaG8gMiAxNTUgMSAxMCA+IHBjaUNmZwotICoKLSAqIHdpbGwgYmUKLSAqICAgICBlY2hvIDIgMHg5YiAxIDB4YSA+IHBjaUNmZworICogICAgIC9zeXMva2VybmVsL2RlYnVnL2xwZmMvZm48Iz4vaURpYWcKICAqLwogCiAvKioKQEAgLTEzMzEsMTAgKzExNzMsMTAgQEAKIAlmb3IgKGkgPSAwOyBpIDwgTFBGQ19JRElBR19DTURfREFUQV9TSVpFOyBpKyspIHsKIAkJc3RlcF9zdHIgPSBzdHJzZXAoJnBidWYsICJcdCAiKTsKIAkJaWYgKCFzdGVwX3N0cikKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIGk7CiAJCWlkaWFnX2NtZC0+ZGF0YVtpXSA9IHNpbXBsZV9zdHJ0b2woc3RlcF9zdHIsIE5VTEwsIDApOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gaTsKIH0KIAogLyoqCkBAIC0xNDAzLDcgKzEyNDUsNyBAQAogICogRGVzY3JpcHRpb246CiAgKiBUaGlzIHJvdXRpbmUgZnJlZXMgdGhlIGJ1ZmZlciB0aGF0IHdhcyBhbGxvY2F0ZWQgd2hlbiB0aGUgZGVidWdmcyBmaWxlCiAgKiB3YXMgb3BlbmVkLiBJdCBhbHNvIHJlc2V0IHRoZSBmaWVsZHMgaW4gdGhlIGlkaWFnIGNvbW1hbmQgc3RydWN0IGluIHRoZQotICogY2FzZSB0aGUgY29tbWFuZCBpcyBub3QgY29udGludW91cyBicm93c2luZyBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmUuCisgKiBjYXNlIG9mIGNvbW1hbmQgZm9yIHdyaXRlIG9wZXJhdGlvbi4KICAqCiAgKiBSZXR1cm5zOgogICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHplcm8uCkBAIC0xNDEzLDE4ICsxMjU1LDIwIEBACiB7CiAJc3RydWN0IGxwZmNfZGVidWcgKmRlYnVnID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCi0JLyogUmVhZCBQQ0kgY29uZmlnIHJlZ2lzdGVyLCBpZiBub3QgcmVhZCBhbGwsIGNsZWFyIGNvbW1hbmQgZmllbGRzICovCi0JaWYgKChkZWJ1Zy0+b3AgPT0gTFBGQ19JRElBR19PUF9SRCkgJiYKLQkgICAgKGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfUENJQ0ZHX1JEKSkKLQkJaWYgKChpZGlhZy5jbWQuZGF0YVsxXSA9PSBzaXplb2YodWludDhfdCkpIHx8Ci0JCSAgICAoaWRpYWcuY21kLmRhdGFbMV0gPT0gc2l6ZW9mKHVpbnQxNl90KSkgfHwKLQkJICAgIChpZGlhZy5jbWQuZGF0YVsxXSA9PSBzaXplb2YodWludDMyX3QpKSkKKwlpZiAoZGVidWctPm9wID09IExQRkNfSURJQUdfT1BfV1IpIHsKKwkJc3dpdGNoIChpZGlhZy5jbWQub3Bjb2RlKSB7CisJCWNhc2UgTFBGQ19JRElBR19DTURfUENJQ0ZHX1dSOgorCQljYXNlIExQRkNfSURJQUdfQ01EX1BDSUNGR19TVDoKKwkJY2FzZSBMUEZDX0lESUFHX0NNRF9QQ0lDRkdfQ0w6CisJCWNhc2UgTFBGQ19JRElBR19DTURfUVVFQUNDX1dSOgorCQljYXNlIExQRkNfSURJQUdfQ01EX1FVRUFDQ19TVDoKKwkJY2FzZSBMUEZDX0lESUFHX0NNRF9RVUVBQ0NfQ0w6CiAJCQltZW1zZXQoJmlkaWFnLCAwLCBzaXplb2YoaWRpYWcpKTsKLQotCS8qIFdyaXRlIFBDSSBjb25maWcgcmVnaXN0ZXIsIGNsZWFyIGNvbW1hbmQgZmllbGRzICovCi0JaWYgKChkZWJ1Zy0+b3AgPT0gTFBGQ19JRElBR19PUF9XUikgJiYKLQkgICAgKGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfUENJQ0ZHX1dSKSkKLQkJbWVtc2V0KCZpZGlhZywgMCwgc2l6ZW9mKGlkaWFnKSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQogCiAJLyogRnJlZSB0aGUgYnVmZmVycyB0byB0aGUgZmlsZSBvcGVyYXRpb24gKi8KIAlrZnJlZShkZWJ1Zy0+YnVmZmVyKTsKQEAgLTE1MDQsNyArMTM0OCw3IEBACiAJCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19QQ0lfQ0ZHX1NJWkUtbGVuLAogCQkJCSIlMDN4OiAlMDh4XG4iLCB3aGVyZSwgdTMydmFsKTsKIAkJYnJlYWs7Ci0JY2FzZSBMUEZDX1BDSV9DRkdfU0laRTogLyogYnJvd3NlIGFsbCAqLworCWNhc2UgTFBGQ19QQ0lfQ0ZHX0JST1dTRTogLyogYnJvd3NlIGFsbCAqLwogCQlnb3RvIHBjaWNmZ19icm93c2U7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xNTg2LDE2ICsxNDMwLDIxIEBACiAJZGVidWctPm9wID0gTFBGQ19JRElBR19PUF9XUjsKIAogCXJjID0gbHBmY19pZGlhZ19jbWRfZ2V0KGJ1ZiwgbmJ5dGVzLCAmaWRpYWcuY21kKTsKLQlpZiAocmMpCisJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCiAJaWYgKGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfUENJQ0ZHX1JEKSB7CisJCS8qIFNhbml0eSBjaGVjayBvbiBQQ0kgY29uZmlnIHJlYWQgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAqLworCQlpZiAocmMgIT0gTFBGQ19QQ0lfQ0ZHX1JEX0NNRF9BUkcpCisJCQlnb3RvIGVycm9yX291dDsKIAkJLyogUmVhZCBjb21tYW5kIGZyb20gUENJIGNvbmZpZyBzcGFjZSwgc2V0IHVwIGNvbW1hbmQgZmllbGRzICovCiAJCXdoZXJlID0gaWRpYWcuY21kLmRhdGFbMF07CiAJCWNvdW50ID0gaWRpYWcuY21kLmRhdGFbMV07Ci0JCWlmIChjb3VudCA9PSBMUEZDX1BDSV9DRkdfU0laRSkgewotCQkJaWYgKHdoZXJlICE9IDApCisJCWlmIChjb3VudCA9PSBMUEZDX1BDSV9DRkdfQlJPV1NFKSB7CisJCQlpZiAod2hlcmUgJSBzaXplb2YodWludDMyX3QpKQogCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJLyogU3RhcnRpbmcgb2Zmc2V0IHRvIGJyb3dzZSAqLworCQkJaWRpYWcub2Zmc2V0Lmxhc3RfcmQgPSB3aGVyZTsKIAkJfSBlbHNlIGlmICgoY291bnQgIT0gc2l6ZW9mKHVpbnQ4X3QpKSAmJgogCQkJICAgKGNvdW50ICE9IHNpemVvZih1aW50MTZfdCkpICYmCiAJCQkgICAoY291bnQgIT0gc2l6ZW9mKHVpbnQzMl90KSkpCkBAIC0xNjIxLDYgKzE0NzAsOSBAQAogCX0gZWxzZSBpZiAoaWRpYWcuY21kLm9wY29kZSA9PSBMUEZDX0lESUFHX0NNRF9QQ0lDRkdfV1IgfHwKIAkJICAgaWRpYWcuY21kLm9wY29kZSA9PSBMUEZDX0lESUFHX0NNRF9QQ0lDRkdfU1QgfHwKIAkJICAgaWRpYWcuY21kLm9wY29kZSA9PSBMUEZDX0lESUFHX0NNRF9QQ0lDRkdfQ0wpIHsKKwkJLyogU2FuaXR5IGNoZWNrIG9uIFBDSSBjb25maWcgd3JpdGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAqLworCQlpZiAocmMgIT0gTFBGQ19QQ0lfQ0ZHX1dSX0NNRF9BUkcpCisJCQlnb3RvIGVycm9yX291dDsKIAkJLyogV3JpdGUgY29tbWFuZCB0byBQQ0kgY29uZmlnIHNwYWNlLCByZWFkLW1vZGlmeS13cml0ZSAqLwogCQl3aGVyZSA9IGlkaWFnLmNtZC5kYXRhWzBdOwogCQljb3VudCA9IGlkaWFnLmNtZC5kYXRhWzFdOwpAQCAtMTc1MywxMCArMTYwNSwxMiBAQAogCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19RVUVfSU5GT19HRVRfQlVGX1NJWkUtbGVuLAogCQkJIlNsb3ctcGF0aCBFUSBpbmZvcm1hdGlvbjpcbiIpOwogCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19RVUVfSU5GT19HRVRfQlVGX1NJWkUtbGVuLAotCQkJIlx0SUQgWyUwMmRdLCBFUUUtQ09VTlQgWyUwNGRdLCAiCi0JCQkiSE9TVC1JTkRFWCBbJTA0eF0sIFBPUlQtSU5ERVggWyUwNHhdXG5cbiIsCisJCQkiXHRFUUlEWyUwMmRdLCAiCisJCQkiUUUtQ09VTlRbJTA0ZF0sIFFFLVNJWkVbJTA0ZF0sICIKKwkJCSJIT1NULUlOREVYWyUwNGRdLCBQT1JULUlOREVYWyUwNGRdXG5cbiIsCiAJCQlwaGJhLT5zbGk0X2hiYS5zcF9lcS0+cXVldWVfaWQsCiAJCQlwaGJhLT5zbGk0X2hiYS5zcF9lcS0+ZW50cnlfY291bnQsCisJCQlwaGJhLT5zbGk0X2hiYS5zcF9lcS0+ZW50cnlfc2l6ZSwKIAkJCXBoYmEtPnNsaTRfaGJhLnNwX2VxLT5ob3N0X2luZGV4LAogCQkJcGhiYS0+c2xpNF9oYmEuc3BfZXEtPmhiYV9pbmRleCk7CiAKQEAgLTE3NjUsMTAgKzE2MTksMTIgQEAKIAkJCSJGYXN0LXBhdGggRVEgaW5mb3JtYXRpb246XG4iKTsKIAlmb3IgKGZjcF9xaWR4ID0gMDsgZmNwX3FpZHggPCBwaGJhLT5jZmdfZmNwX2VxX2NvdW50OyBmY3BfcWlkeCsrKSB7CiAJCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19RVUVfSU5GT19HRVRfQlVGX1NJWkUtbGVuLAotCQkJCSJcdElEIFslMDJkXSwgRVFFLUNPVU5UIFslMDRkXSwgIgotCQkJCSJIT1NULUlOREVYIFslMDR4XSwgUE9SVC1JTkRFWCBbJTA0eF1cbiIsCisJCQkJIlx0RVFJRFslMDJkXSwgIgorCQkJCSJRRS1DT1VOVFslMDRkXSwgUUUtU0laRVslMDRkXSwgIgorCQkJCSJIT1NULUlOREVYWyUwNGRdLCBQT1JULUlOREVYWyUwNGRdXG4iLAogCQkJCXBoYmEtPnNsaTRfaGJhLmZwX2VxW2ZjcF9xaWR4XS0+cXVldWVfaWQsCiAJCQkJcGhiYS0+c2xpNF9oYmEuZnBfZXFbZmNwX3FpZHhdLT5lbnRyeV9jb3VudCwKKwkJCQlwaGJhLT5zbGk0X2hiYS5mcF9lcVtmY3BfcWlkeF0tPmVudHJ5X3NpemUsCiAJCQkJcGhiYS0+c2xpNF9oYmEuZnBfZXFbZmNwX3FpZHhdLT5ob3N0X2luZGV4LAogCQkJCXBoYmEtPnNsaTRfaGJhLmZwX2VxW2ZjcF9xaWR4XS0+aGJhX2luZGV4KTsKIAl9CkBAIC0xNzc2LDg5ICsxNjMyLDEwMSBAQAogCiAJLyogR2V0IG1haWxib3ggY29tcGxldGUgcXVldWUgaW5mb3JtYXRpb24gKi8KIAlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfUVVFX0lORk9fR0VUX0JVRl9TSVpFLWxlbiwKLQkJCSJNYWlsYm94IENRIGluZm9ybWF0aW9uOlxuIik7CisJCQkiU2xvdy1wYXRoIE1CWCBDUSBpbmZvcm1hdGlvbjpcbiIpOwogCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19RVUVfSU5GT19HRVRfQlVGX1NJWkUtbGVuLAotCQkJIlx0XHRBc3NvY2lhdGVkIEVRLUlEIFslMDJkXTpcbiIsCisJCQkiQXNzb2NpYXRlZCBFUUlEWyUwMmRdOlxuIiwKIAkJCXBoYmEtPnNsaTRfaGJhLm1ieF9jcS0+YXNzb2NfcWlkKTsKIAlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfUVVFX0lORk9fR0VUX0JVRl9TSVpFLWxlbiwKLQkJCSJcdElEIFslMDJkXSwgQ1FFLUNPVU5UIFslMDRkXSwgIgotCQkJIkhPU1QtSU5ERVggWyUwNHhdLCBQT1JULUlOREVYIFslMDR4XVxuXG4iLAorCQkJIlx0Q1FJRFslMDJkXSwgIgorCQkJIlFFLUNPVU5UWyUwNGRdLCBRRS1TSVpFWyUwNGRdLCAiCisJCQkiSE9TVC1JTkRFWFslMDRkXSwgUE9SVC1JTkRFWFslMDRkXVxuXG4iLAogCQkJcGhiYS0+c2xpNF9oYmEubWJ4X2NxLT5xdWV1ZV9pZCwKIAkJCXBoYmEtPnNsaTRfaGJhLm1ieF9jcS0+ZW50cnlfY291bnQsCisJCQlwaGJhLT5zbGk0X2hiYS5tYnhfY3EtPmVudHJ5X3NpemUsCiAJCQlwaGJhLT5zbGk0X2hiYS5tYnhfY3EtPmhvc3RfaW5kZXgsCiAJCQlwaGJhLT5zbGk0X2hiYS5tYnhfY3EtPmhiYV9pbmRleCk7CiAKIAkvKiBHZXQgc2xvdy1wYXRoIGNvbXBsZXRlIHF1ZXVlIGluZm9ybWF0aW9uICovCiAJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLCBMUEZDX1FVRV9JTkZPX0dFVF9CVUZfU0laRS1sZW4sCi0JCQkiU2xvdy1wYXRoIENRIGluZm9ybWF0aW9uOlxuIik7CisJCQkiU2xvdy1wYXRoIEVMUyBDUSBpbmZvcm1hdGlvbjpcbiIpOwogCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19RVUVfSU5GT19HRVRfQlVGX1NJWkUtbGVuLAotCQkJIlx0XHRBc3NvY2lhdGVkIEVRLUlEIFslMDJkXTpcbiIsCisJCQkiQXNzb2NpYXRlZCBFUUlEWyUwMmRdOlxuIiwKIAkJCXBoYmEtPnNsaTRfaGJhLmVsc19jcS0+YXNzb2NfcWlkKTsKIAlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfUVVFX0lORk9fR0VUX0JVRl9TSVpFLWxlbiwKLQkJCSJcdElEIFslMDJkXSwgQ1FFLUNPVU5UIFslMDRkXSwgIgotCQkJIkhPU1QtSU5ERVggWyUwNHhdLCBQT1JULUlOREVYIFslMDR4XVxuXG4iLAorCQkJIlx0Q1FJRCBbJTAyZF0sICIKKwkJCSJRRS1DT1VOVFslMDRkXSwgUUUtU0laRVslMDRkXSwgIgorCQkJIkhPU1QtSU5ERVhbJTA0ZF0sIFBPUlQtSU5ERVhbJTA0ZF1cblxuIiwKIAkJCXBoYmEtPnNsaTRfaGJhLmVsc19jcS0+cXVldWVfaWQsCiAJCQlwaGJhLT5zbGk0X2hiYS5lbHNfY3EtPmVudHJ5X2NvdW50LAorCQkJcGhiYS0+c2xpNF9oYmEuZWxzX2NxLT5lbnRyeV9zaXplLAogCQkJcGhiYS0+c2xpNF9oYmEuZWxzX2NxLT5ob3N0X2luZGV4LAogCQkJcGhiYS0+c2xpNF9oYmEuZWxzX2NxLT5oYmFfaW5kZXgpOwogCiAJLyogR2V0IGZhc3QtcGF0aCBjb21wbGV0ZSBxdWV1ZSBpbmZvcm1hdGlvbiAqLwogCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19RVUVfSU5GT19HRVRfQlVGX1NJWkUtbGVuLAotCQkJIkZhc3QtcGF0aCBDUSBpbmZvcm1hdGlvbjpcbiIpOworCQkJIkZhc3QtcGF0aCBGQ1AgQ1EgaW5mb3JtYXRpb246XG4iKTsKIAlmb3IgKGZjcF9xaWR4ID0gMDsgZmNwX3FpZHggPCBwaGJhLT5jZmdfZmNwX2VxX2NvdW50OyBmY3BfcWlkeCsrKSB7CiAJCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19RVUVfSU5GT19HRVRfQlVGX1NJWkUtbGVuLAotCQkJCSJcdFx0QXNzb2NpYXRlZCBFUS1JRCBbJTAyZF06XG4iLAorCQkJCSJBc3NvY2lhdGVkIEVRSURbJTAyZF06XG4iLAogCQkJCXBoYmEtPnNsaTRfaGJhLmZjcF9jcVtmY3BfcWlkeF0tPmFzc29jX3FpZCk7CiAJCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19RVUVfSU5GT19HRVRfQlVGX1NJWkUtbGVuLAotCQkiXHRJRCBbJTAyZF0sIEVRRS1DT1VOVCBbJTA0ZF0sICIKLQkJIkhPU1QtSU5ERVggWyUwNHhdLCBQT1JULUlOREVYIFslMDR4XVxuIiwKLQkJcGhiYS0+c2xpNF9oYmEuZmNwX2NxW2ZjcF9xaWR4XS0+cXVldWVfaWQsCi0JCXBoYmEtPnNsaTRfaGJhLmZjcF9jcVtmY3BfcWlkeF0tPmVudHJ5X2NvdW50LAotCQlwaGJhLT5zbGk0X2hiYS5mY3BfY3FbZmNwX3FpZHhdLT5ob3N0X2luZGV4LAotCQlwaGJhLT5zbGk0X2hiYS5mY3BfY3FbZmNwX3FpZHhdLT5oYmFfaW5kZXgpOworCQkJCSJcdENRSURbJTAyZF0sICIKKwkJCQkiUUUtQ09VTlRbJTA0ZF0sIFFFLVNJWkVbJTA0ZF0sICIKKwkJCQkiSE9TVC1JTkRFWFslMDRkXSwgUE9SVC1JTkRFWFslMDRkXVxuIiwKKwkJCQlwaGJhLT5zbGk0X2hiYS5mY3BfY3FbZmNwX3FpZHhdLT5xdWV1ZV9pZCwKKwkJCQlwaGJhLT5zbGk0X2hiYS5mY3BfY3FbZmNwX3FpZHhdLT5lbnRyeV9jb3VudCwKKwkJCQlwaGJhLT5zbGk0X2hiYS5mY3BfY3FbZmNwX3FpZHhdLT5lbnRyeV9zaXplLAorCQkJCXBoYmEtPnNsaTRfaGJhLmZjcF9jcVtmY3BfcWlkeF0tPmhvc3RfaW5kZXgsCisJCQkJcGhiYS0+c2xpNF9oYmEuZmNwX2NxW2ZjcF9xaWR4XS0+aGJhX2luZGV4KTsKIAl9CiAJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLCBMUEZDX1FVRV9JTkZPX0dFVF9CVUZfU0laRS1sZW4sICJcbiIpOwogCiAJLyogR2V0IG1haWxib3ggcXVldWUgaW5mb3JtYXRpb24gKi8KIAlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfUVVFX0lORk9fR0VUX0JVRl9TSVpFLWxlbiwKLQkJCSJNYWlsYm94IE1RIGluZm9ybWF0aW9uOlxuIik7CisJCQkiU2xvdy1wYXRoIE1CWCBNUSBpbmZvcm1hdGlvbjpcbiIpOwogCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19RVUVfSU5GT19HRVRfQlVGX1NJWkUtbGVuLAotCQkJIlx0XHRBc3NvY2lhdGVkIENRLUlEIFslMDJkXTpcbiIsCisJCQkiQXNzb2NpYXRlZCBDUUlEWyUwMmRdOlxuIiwKIAkJCXBoYmEtPnNsaTRfaGJhLm1ieF93cS0+YXNzb2NfcWlkKTsKIAlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfUVVFX0lORk9fR0VUX0JVRl9TSVpFLWxlbiwKLQkJCSJcdElEIFslMDJkXSwgTVFFLUNPVU5UIFslMDRkXSwgIgotCQkJIkhPU1QtSU5ERVggWyUwNHhdLCBQT1JULUlOREVYIFslMDR4XVxuXG4iLAorCQkJIlx0V1FJRFslMDJkXSwgIgorCQkJIlFFLUNPVU5UWyUwNGRdLCBRRS1TSVpFWyUwNGRdLCAiCisJCQkiSE9TVC1JTkRFWFslMDRkXSwgUE9SVC1JTkRFWFslMDRkXVxuXG4iLAogCQkJcGhiYS0+c2xpNF9oYmEubWJ4X3dxLT5xdWV1ZV9pZCwKIAkJCXBoYmEtPnNsaTRfaGJhLm1ieF93cS0+ZW50cnlfY291bnQsCisJCQlwaGJhLT5zbGk0X2hiYS5tYnhfd3EtPmVudHJ5X3NpemUsCiAJCQlwaGJhLT5zbGk0X2hiYS5tYnhfd3EtPmhvc3RfaW5kZXgsCiAJCQlwaGJhLT5zbGk0X2hiYS5tYnhfd3EtPmhiYV9pbmRleCk7CiAKIAkvKiBHZXQgc2xvdy1wYXRoIHdvcmsgcXVldWUgaW5mb3JtYXRpb24gKi8KIAlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfUVVFX0lORk9fR0VUX0JVRl9TSVpFLWxlbiwKLQkJCSJTbG93LXBhdGggV1EgaW5mb3JtYXRpb246XG4iKTsKKwkJCSJTbG93LXBhdGggRUxTIFdRIGluZm9ybWF0aW9uOlxuIik7CiAJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLCBMUEZDX1FVRV9JTkZPX0dFVF9CVUZfU0laRS1sZW4sCi0JCQkiXHRcdEFzc29jaWF0ZWQgQ1EtSUQgWyUwMmRdOlxuIiwKKwkJCSJBc3NvY2lhdGVkIENRSURbJTAyZF06XG4iLAogCQkJcGhiYS0+c2xpNF9oYmEuZWxzX3dxLT5hc3NvY19xaWQpOwogCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19RVUVfSU5GT19HRVRfQlVGX1NJWkUtbGVuLAotCQkJIlx0SUQgWyUwMmRdLCBXUUUtQ09VTlQgWyUwNGRdLCAiCi0JCQkiSE9TVC1JTkRFWCBbJTA0eF0sIFBPUlQtSU5ERVggWyUwNHhdXG5cbiIsCisJCQkiXHRXUUlEWyUwMmRdLCAiCisJCQkiUUUtQ09VTlRbJTA0ZF0sIFFFLVNJWkVbJTA0ZF0sICIKKwkJCSJIT1NULUlOREVYWyUwNGRdLCBQT1JULUlOREVYWyUwNGRdXG5cbiIsCiAJCQlwaGJhLT5zbGk0X2hiYS5lbHNfd3EtPnF1ZXVlX2lkLAogCQkJcGhiYS0+c2xpNF9oYmEuZWxzX3dxLT5lbnRyeV9jb3VudCwKKwkJCXBoYmEtPnNsaTRfaGJhLmVsc193cS0+ZW50cnlfc2l6ZSwKIAkJCXBoYmEtPnNsaTRfaGJhLmVsc193cS0+aG9zdF9pbmRleCwKIAkJCXBoYmEtPnNsaTRfaGJhLmVsc193cS0+aGJhX2luZGV4KTsKIAogCS8qIEdldCBmYXN0LXBhdGggd29yayBxdWV1ZSBpbmZvcm1hdGlvbiAqLwogCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19RVUVfSU5GT19HRVRfQlVGX1NJWkUtbGVuLAotCQkJIkZhc3QtcGF0aCBXUSBpbmZvcm1hdGlvbjpcbiIpOworCQkJIkZhc3QtcGF0aCBGQ1AgV1EgaW5mb3JtYXRpb246XG4iKTsKIAlmb3IgKGZjcF9xaWR4ID0gMDsgZmNwX3FpZHggPCBwaGJhLT5jZmdfZmNwX3dxX2NvdW50OyBmY3BfcWlkeCsrKSB7CiAJCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19RVUVfSU5GT19HRVRfQlVGX1NJWkUtbGVuLAotCQkJCSJcdFx0QXNzb2NpYXRlZCBDUS1JRCBbJTAyZF06XG4iLAorCQkJCSJBc3NvY2lhdGVkIENRSURbJTAyZF06XG4iLAogCQkJCXBoYmEtPnNsaTRfaGJhLmZjcF93cVtmY3BfcWlkeF0tPmFzc29jX3FpZCk7CiAJCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19RVUVfSU5GT19HRVRfQlVGX1NJWkUtbGVuLAotCQkJCSJcdElEIFslMDJkXSwgV1FFLUNPVU5UIFslMDRkXSwgIgotCQkJCSJIT1NULUlOREVYIFslMDR4XSwgUE9SVC1JTkRFWCBbJTA0eF1cbiIsCisJCQkJIlx0V1FJRFslMDJkXSwgIgorCQkJCSJRRS1DT1VOVFslMDRkXSwgV1FFLVNJWkVbJTA0ZF0sICIKKwkJCQkiSE9TVC1JTkRFWFslMDRkXSwgUE9SVC1JTkRFWFslMDRkXVxuIiwKIAkJCQlwaGJhLT5zbGk0X2hiYS5mY3Bfd3FbZmNwX3FpZHhdLT5xdWV1ZV9pZCwKIAkJCQlwaGJhLT5zbGk0X2hiYS5mY3Bfd3FbZmNwX3FpZHhdLT5lbnRyeV9jb3VudCwKKwkJCQlwaGJhLT5zbGk0X2hiYS5mY3Bfd3FbZmNwX3FpZHhdLT5lbnRyeV9zaXplLAogCQkJCXBoYmEtPnNsaTRfaGJhLmZjcF93cVtmY3BfcWlkeF0tPmhvc3RfaW5kZXgsCiAJCQkJcGhiYS0+c2xpNF9oYmEuZmNwX3dxW2ZjcF9xaWR4XS0+aGJhX2luZGV4KTsKIAl9CkBAIC0xODY4LDI2ICsxNzM2LDU5NyBAQAogCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19RVUVfSU5GT19HRVRfQlVGX1NJWkUtbGVuLAogCQkJIlNsb3ctcGF0aCBSUSBpbmZvcm1hdGlvbjpcbiIpOwogCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19RVUVfSU5GT19HRVRfQlVGX1NJWkUtbGVuLAotCQkJIlx0XHRBc3NvY2lhdGVkIENRLUlEIFslMDJkXTpcbiIsCisJCQkiQXNzb2NpYXRlZCBDUUlEWyUwMmRdOlxuIiwKIAkJCXBoYmEtPnNsaTRfaGJhLmhkcl9ycS0+YXNzb2NfcWlkKTsKIAlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfUVVFX0lORk9fR0VUX0JVRl9TSVpFLWxlbiwKLQkJCSJcdElEIFslMDJkXSwgUkhRRS1DT1VOVCBbJTA0ZF0sICIKLQkJCSJIT1NULUlOREVYIFslMDR4XSwgUE9SVC1JTkRFWCBbJTA0eF1cbiIsCisJCQkiXHRIUUlEWyUwMmRdLCAiCisJCQkiUUUtQ09VTlRbJTA0ZF0sIFFFLVNJWkVbJTA0ZF0sICIKKwkJCSJIT1NULUlOREVYWyUwNGRdLCBQT1JULUlOREVYWyUwNGRdXG4iLAogCQkJcGhiYS0+c2xpNF9oYmEuaGRyX3JxLT5xdWV1ZV9pZCwKIAkJCXBoYmEtPnNsaTRfaGJhLmhkcl9ycS0+ZW50cnlfY291bnQsCisJCQlwaGJhLT5zbGk0X2hiYS5oZHJfcnEtPmVudHJ5X3NpemUsCiAJCQlwaGJhLT5zbGk0X2hiYS5oZHJfcnEtPmhvc3RfaW5kZXgsCiAJCQlwaGJhLT5zbGk0X2hiYS5oZHJfcnEtPmhiYV9pbmRleCk7CiAJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLCBMUEZDX1FVRV9JTkZPX0dFVF9CVUZfU0laRS1sZW4sCi0JCQkiXHRJRCBbJTAyZF0sIFJEUUUtQ09VTlQgWyUwNGRdLCAiCi0JCQkiSE9TVC1JTkRFWCBbJTA0eF0sIFBPUlQtSU5ERVggWyUwNHhdXG4iLAorCQkJIlx0RFFJRFslMDJkXSwgIgorCQkJIlFFLUNPVU5UWyUwNGRdLCBRRS1TSVpFWyUwNGRdLCAiCisJCQkiSE9TVC1JTkRFWFslMDRkXSwgUE9SVC1JTkRFWFslMDRkXVxuIiwKIAkJCXBoYmEtPnNsaTRfaGJhLmRhdF9ycS0+cXVldWVfaWQsCiAJCQlwaGJhLT5zbGk0X2hiYS5kYXRfcnEtPmVudHJ5X2NvdW50LAorCQkJcGhiYS0+c2xpNF9oYmEuZGF0X3JxLT5lbnRyeV9zaXplLAogCQkJcGhiYS0+c2xpNF9oYmEuZGF0X3JxLT5ob3N0X2luZGV4LAogCQkJcGhiYS0+c2xpNF9oYmEuZGF0X3JxLT5oYmFfaW5kZXgpOwogCiAJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgbmJ5dGVzLCBwcG9zLCBwYnVmZmVyLCBsZW4pOwogfQogCisvKioKKyAqIGxwZmNfaWRpYWdfcXVlX3BhcmFtX2NoZWNrIC0gcXVldWUgYWNjZXNzIGNvbW1hbmQgcGFyYW1ldGVyIHNhbml0eSBjaGVjaworICogQHE6IFRoZSBwb2ludGVyIHRvIHF1ZXVlIHN0cnVjdHVyZS4KKyAqIEBpbmRleDogVGhlIGluZGV4IGludG8gYSBxdWV1ZSBlbnRyeS4KKyAqIEBjb3VudDogVGhlIG51bWJlciBvZiBxdWV1ZSBlbnRyaWVzIHRvIGFjY2Vzcy4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoZSByb3V0aW5lIHBlcmZvcm1zIHNhbml0eSBjaGVjayBvbiBkZXZpY2UgcXVldWUgYWNjZXNzIG1ldGhvZCBjb21tYW5kcy4KKyAqCisgKiBSZXR1cm5zOgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIC1FSU5WQUwgd2hlbiBmYWlscyB0aGUgc2FuaXR5IGNoZWNrLCBvdGhlcndpc2UsIGl0CisgKiByZXR1cm5zIDAuCisgKiovCitzdGF0aWMgaW50CitscGZjX2lkaWFnX3F1ZV9wYXJhbV9jaGVjayhzdHJ1Y3QgbHBmY19xdWV1ZSAqcSwgaW50IGluZGV4LCBpbnQgY291bnQpCit7CisJLyogT25seSBzdXBwb3J0IHNpbmdsZSBlbnRyeSByZWFkIG9yIGJyb3dzaW5nICovCisJaWYgKChjb3VudCAhPSAxKSAmJiAoY291bnQgIT0gTFBGQ19RVUVfQUNDX0JST1dTRSkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChpbmRleCA+IHEtPmVudHJ5X2NvdW50IC0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbHBmY19pZGlhZ19xdWVhY2NfcmVhZF9xZSAtIHJlYWQgYSBzaW5nbGUgZW50cnkgZnJvbSB0aGUgZ2l2ZW4gcXVldWUgaW5kZXgKKyAqIEBwYnVmZmVyOiBUaGUgcG9pbnRlciB0byBidWZmZXIgdG8gY29weSB0aGUgcmVhZCBkYXRhIGludG8uCisgKiBAcHF1ZTogVGhlIHBvaW50ZXIgdG8gdGhlIHF1ZXVlIHRvIGJlIHJlYWQuCisgKiBAaW5kZXg6IFRoZSBpbmRleCBpbnRvIHRoZSBxdWV1ZSBlbnRyeS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgcm91dGluZSByZWFkcyBvdXQgYSBzaW5nbGUgZW50cnkgZnJvbSB0aGUgZ2l2ZW4gcXVldWUncyBpbmRleCBsb2NhdGlvbgorICogYW5kIGNvcGllcyBpdCBpbnRvIHRoZSBidWZmZXIgcHJvdmlkZWQuCisgKgorICogUmV0dXJuczoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIHdoZW4gaXQgZmFpbHMsIG90aGVyd2lzZSwgaXQgcmV0dXJucyB0aGUgbGVuZ3RoIG9mCisgKiB0aGUgZGF0YSByZWFkIGludG8gdGhlIGJ1ZmZlciBwcm92aWRlZC4KKyAqKi8KK3N0YXRpYyBpbnQKK2xwZmNfaWRpYWdfcXVlYWNjX3JlYWRfcWUoY2hhciAqcGJ1ZmZlciwgaW50IGxlbiwgc3RydWN0IGxwZmNfcXVldWUgKnBxdWUsCisJCQkgIHVpbnQzMl90IGluZGV4KQoreworCWludCBvZmZzZXQsIGVzaXplOworCXVpbnQzMl90ICpwZW50cnk7CisKKwlpZiAoIXBidWZmZXIgfHwgIXBxdWUpCisJCXJldHVybiAwOworCisJZXNpemUgPSBwcXVlLT5lbnRyeV9zaXplOworCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19RVUVfQUNDX0JVRl9TSVpFLWxlbiwKKwkJCSJRRS1JTkRFWFslMDRkXTpcbiIsIGluZGV4KTsKKworCW9mZnNldCA9IDA7CisJcGVudHJ5ID0gcHF1ZS0+cWVbaW5kZXhdLmFkZHJlc3M7CisJd2hpbGUgKGVzaXplID4gMCkgeworCQlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfUVVFX0FDQ19CVUZfU0laRS1sZW4sCisJCQkJIiUwOHggIiwgKnBlbnRyeSk7CisJCXBlbnRyeSsrOworCQlvZmZzZXQgKz0gc2l6ZW9mKHVpbnQzMl90KTsKKwkJZXNpemUgLT0gc2l6ZW9mKHVpbnQzMl90KTsKKwkJaWYgKGVzaXplID4gMCAmJiAhKG9mZnNldCAlICg0ICogc2l6ZW9mKHVpbnQzMl90KSkpKQorCQkJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLAorCQkJCQlMUEZDX1FVRV9BQ0NfQlVGX1NJWkUtbGVuLCAiXG4iKTsKKwl9CisJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLCBMUEZDX1FVRV9BQ0NfQlVGX1NJWkUtbGVuLCAiXG4iKTsKKworCXJldHVybiBsZW47Cit9CisKKy8qKgorICogbHBmY19pZGlhZ19xdWVhY2NfcmVhZCAtIGlkaWFnIGRlYnVnZnMgcmVhZCBwb3J0IHF1ZXVlCisgKiBAZmlsZTogVGhlIGZpbGUgcG9pbnRlciB0byByZWFkIGZyb20uCisgKiBAYnVmOiBUaGUgYnVmZmVyIHRvIGNvcHkgdGhlIGRhdGEgdG8uCisgKiBAbmJ5dGVzOiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuCisgKiBAcHBvczogVGhlIHBvc2l0aW9uIGluIHRoZSBmaWxlIHRvIHN0YXJ0IHJlYWRpbmcgZnJvbS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgcm91dGluZSByZWFkcyBkYXRhIGZyb20gdGhlIEBwaGJhIGRldmljZSBxdWV1ZSBtZW1vcnkgYWNjb3JkaW5nIHRvIHRoZQorICogaWRpYWcgY29tbWFuZCwgYW5kIGNvcGllcyB0byB1c2VyIEBidWYuIERlcGVuZGluZyBvbiB0aGUgcXVldWUgZHVtcCByZWFkCisgKiBjb21tYW5kIHNldHVwLCBpdCBkb2VzIGVpdGhlciBhIHNpbmdsZSBxdWV1ZSBlbnRyeSByZWFkIG9yIGJyb3dpbmcgdGhyb3VnaAorICogYWxsIGVudHJpZXMgb2YgdGhlIHF1ZXVlLgorICoKKyAqIFJldHVybnM6CisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFtb3VudCBvZiBkYXRhIHRoYXQgd2FzIHJlYWQgKHRoaXMgY291bGQgYmUgbGVzcworICogdGhhbiBAbmJ5dGVzIGlmIHRoZSBlbmQgb2YgdGhlIGZpbGUgd2FzIHJlYWNoZWQpIG9yIGEgbmVnYXRpdmUgZXJyb3IgdmFsdWUuCisgKiovCitzdGF0aWMgc3NpemVfdAorbHBmY19pZGlhZ19xdWVhY2NfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywKKwkJICAgICAgIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgbHBmY19kZWJ1ZyAqZGVidWcgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdWludDMyX3QgbGFzdF9pbmRleCwgaW5kZXgsIGNvdW50OworCXN0cnVjdCBscGZjX3F1ZXVlICpwcXVlID0gTlVMTDsKKwljaGFyICpwYnVmZmVyOworCWludCBsZW4gPSAwOworCisJLyogVGhpcyBpcyBhIHVzZXIgcmVhZCBvcGVyYXRpb24gKi8KKwlkZWJ1Zy0+b3AgPSBMUEZDX0lESUFHX09QX1JEOworCisJaWYgKCFkZWJ1Zy0+YnVmZmVyKQorCQlkZWJ1Zy0+YnVmZmVyID0ga21hbGxvYyhMUEZDX1FVRV9BQ0NfQlVGX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghZGVidWctPmJ1ZmZlcikKKwkJcmV0dXJuIDA7CisJcGJ1ZmZlciA9IGRlYnVnLT5idWZmZXI7CisKKwlpZiAoKnBwb3MpCisJCXJldHVybiAwOworCisJaWYgKGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfUVVFQUNDX1JEKSB7CisJCWluZGV4ID0gaWRpYWcuY21kLmRhdGFbMl07CisJCWNvdW50ID0gaWRpYWcuY21kLmRhdGFbM107CisJCXBxdWUgPSAoc3RydWN0IGxwZmNfcXVldWUgKilpZGlhZy5wdHJfcHJpdmF0ZTsKKwl9IGVsc2UKKwkJcmV0dXJuIDA7CisKKwkvKiBCcm93c2UgdGhlIHF1ZXVlIHN0YXJ0aW5nIGZyb20gaW5kZXggKi8KKwlpZiAoY291bnQgPT0gTFBGQ19RVUVfQUNDX0JST1dTRSkKKwkJZ290byBxdWVfYnJvd3NlOworCisJLyogUmVhZCBhIHNpbmdsZSBlbnRyeSBmcm9tIHRoZSBxdWV1ZSAqLworCWxlbiA9IGxwZmNfaWRpYWdfcXVlYWNjX3JlYWRfcWUocGJ1ZmZlciwgbGVuLCBwcXVlLCBpbmRleCk7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBuYnl0ZXMsIHBwb3MsIHBidWZmZXIsIGxlbik7CisKK3F1ZV9icm93c2U6CisKKwkvKiBCcm93c2UgYWxsIGVudHJpZXMgZnJvbSB0aGUgcXVldWUgKi8KKwlsYXN0X2luZGV4ID0gaWRpYWcub2Zmc2V0Lmxhc3RfcmQ7CisJaW5kZXggPSBsYXN0X2luZGV4OworCisJd2hpbGUgKGxlbiA8IExQRkNfUVVFX0FDQ19TSVpFIC0gcHF1ZS0+ZW50cnlfc2l6ZSkgeworCQlsZW4gPSBscGZjX2lkaWFnX3F1ZWFjY19yZWFkX3FlKHBidWZmZXIsIGxlbiwgcHF1ZSwgaW5kZXgpOworCQlpbmRleCsrOworCQlpZiAoaW5kZXggPiBwcXVlLT5lbnRyeV9jb3VudCAtIDEpCisJCQlicmVhazsKKwl9CisKKwkvKiBTZXQgdXAgdGhlIG9mZnNldCBmb3IgbmV4dCBwb3J0aW9uIG9mIHBjaSBjZmcgcmVhZCAqLworCWlmIChpbmRleCA+IHBxdWUtPmVudHJ5X2NvdW50IC0gMSkKKwkJaW5kZXggPSAwOworCWlkaWFnLm9mZnNldC5sYXN0X3JkID0gaW5kZXg7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBuYnl0ZXMsIHBwb3MsIHBidWZmZXIsIGxlbik7Cit9CisKKy8qKgorICogbHBmY19pZGlhZ19xdWVhY2Nfd3JpdGUgLSBTeW50YXggY2hlY2sgYW5kIHNldCB1cCBpZGlhZyBxdWVhY2MgY29tbWFuZHMKKyAqIEBmaWxlOiBUaGUgZmlsZSBwb2ludGVyIHRvIHJlYWQgZnJvbS4KKyAqIEBidWY6IFRoZSBidWZmZXIgdG8gY29weSB0aGUgdXNlciBkYXRhIGZyb20uCisgKiBAbmJ5dGVzOiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGdldC4KKyAqIEBwcG9zOiBUaGUgcG9zaXRpb24gaW4gdGhlIGZpbGUgdG8gc3RhcnQgcmVhZGluZyBmcm9tLgorICoKKyAqIFRoaXMgcm91dGluZSBnZXQgdGhlIGRlYnVnZnMgaWRpYWcgY29tbWFuZCBzdHJ1Y3QgZnJvbSB1c2VyIHNwYWNlIGFuZCB0aGVuCisgKiBwZXJmb3JtIHRoZSBzeW50YXggY2hlY2sgZm9yIHBvcnQgcXVldWUgcmVhZCAoZHVtcCkgb3Igd3JpdGUgKHNldCkgY29tbWFuZAorICogYWNjb3JkaW5nbHkuIEluIHRoZSBjYXNlIG9mIHBvcnQgcXVldWUgcmVhZCBjb21tYW5kLCBpdCBzZXRzIHVwIHRoZSBjb21tYW5kCisgKiBpbiB0aGUgaWRpYWcgY29tbWFuZCBzdHJ1Y3QgZm9yIHRoZSBmb2xsb3dpbmcgZGVidWdmcyByZWFkIG9wZXJhdGlvbi4gSW4KKyAqIHRoZSBjYXNlIG9mIHBvcnQgcXVldWUgd3JpdGUgb3BlcmF0aW9uLCBpdCBleGVjdXRlcyB0aGUgd3JpdGUgb3BlcmF0aW9uCisgKiBpbnRvIHRoZSBwb3J0IHF1ZXVlIGVudHJ5IGFjY29yZGluZ2x5LgorICoKKyAqIEl0IHJldHVybnMgdGhlIEBuYnl0Z2VzIHBhc3NpbmcgaW4gZnJvbSBkZWJ1Z2ZzIHVzZXIgc3BhY2Ugd2hlbiBzdWNjZXNzZnVsLgorICogSW4gY2FzZSBvZiBlcnJvciBjb25kaXRpb25zLCBpdCByZXR1cm5zIHByb3BlciBlcnJvciBjb2RlIGJhY2sgdG8gdGhlIHVzZXIKKyAqIHNwYWNlLgorICoqLworc3RhdGljIHNzaXplX3QKK2xwZmNfaWRpYWdfcXVlYWNjX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBscGZjX2RlYnVnICpkZWJ1ZyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhICopZGVidWctPmlfcHJpdmF0ZTsKKwl1aW50MzJfdCBxaWR4LCBxdWV0cCwgcXVlaWQsIGluZGV4LCBjb3VudCwgb2Zmc2V0LCB2YWx1ZTsKKwl1aW50MzJfdCAqcGVudHJ5OworCXN0cnVjdCBscGZjX3F1ZXVlICpwcXVlOworCWludCByYzsKKworCS8qIFRoaXMgaXMgYSB1c2VyIHdyaXRlIG9wZXJhdGlvbiAqLworCWRlYnVnLT5vcCA9IExQRkNfSURJQUdfT1BfV1I7CisKKwlyYyA9IGxwZmNfaWRpYWdfY21kX2dldChidWYsIG5ieXRlcywgJmlkaWFnLmNtZCk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJLyogR2V0IGFuZCBzYW5pdHkgY2hlY2sgb24gY29tbWFuZCBmZWlsZHMgKi8KKwlxdWV0cCAgPSBpZGlhZy5jbWQuZGF0YVswXTsKKwlxdWVpZCAgPSBpZGlhZy5jbWQuZGF0YVsxXTsKKwlpbmRleCAgPSBpZGlhZy5jbWQuZGF0YVsyXTsKKwljb3VudCAgPSBpZGlhZy5jbWQuZGF0YVszXTsKKwlvZmZzZXQgPSBpZGlhZy5jbWQuZGF0YVs0XTsKKwl2YWx1ZSAgPSBpZGlhZy5jbWQuZGF0YVs1XTsKKworCS8qIFNhbml0eSBjaGVjayBvbiBjb21tYW5kIGxpbmUgYXJndW1lbnRzICovCisJaWYgKGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfUVVFQUNDX1dSIHx8CisJICAgIGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfUVVFQUNDX1NUIHx8CisJICAgIGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfUVVFQUNDX0NMKSB7CisJCWlmIChyYyAhPSBMUEZDX1FVRV9BQ0NfV1JfQ01EX0FSRykKKwkJCWdvdG8gZXJyb3Jfb3V0OworCQlpZiAoY291bnQgIT0gMSkKKwkJCWdvdG8gZXJyb3Jfb3V0OworCX0gZWxzZSBpZiAoaWRpYWcuY21kLm9wY29kZSA9PSBMUEZDX0lESUFHX0NNRF9RVUVBQ0NfUkQpIHsKKwkJaWYgKHJjICE9IExQRkNfUVVFX0FDQ19SRF9DTURfQVJHKQorCQkJZ290byBlcnJvcl9vdXQ7CisJfSBlbHNlCisJCWdvdG8gZXJyb3Jfb3V0OworCisJc3dpdGNoIChxdWV0cCkgeworCWNhc2UgTFBGQ19JRElBR19FUToKKwkJLyogU2xvdy1wYXRoIGV2ZW50IHF1ZXVlICovCisJCWlmIChwaGJhLT5zbGk0X2hiYS5zcF9lcS0+cXVldWVfaWQgPT0gcXVlaWQpIHsKKwkJCS8qIFNhbml0eSBjaGVjayAqLworCQkJcmMgPSBscGZjX2lkaWFnX3F1ZV9wYXJhbV9jaGVjaygKKwkJCQkJcGhiYS0+c2xpNF9oYmEuc3BfZXEsIGluZGV4LCBjb3VudCk7CisJCQlpZiAocmMpCisJCQkJZ290byBlcnJvcl9vdXQ7CisJCQlpZGlhZy5wdHJfcHJpdmF0ZSA9IHBoYmEtPnNsaTRfaGJhLnNwX2VxOworCQkJZ290byBwYXNzX2NoZWNrOworCQl9CisJCS8qIEZhc3QtcGF0aCBldmVudCBxdWV1ZSAqLworCQlmb3IgKHFpZHggPSAwOyBxaWR4IDwgcGhiYS0+Y2ZnX2ZjcF9lcV9jb3VudDsgcWlkeCsrKSB7CisJCQlpZiAocGhiYS0+c2xpNF9oYmEuZnBfZXFbcWlkeF0tPnF1ZXVlX2lkID09IHF1ZWlkKSB7CisJCQkJLyogU2FuaXR5IGNoZWNrICovCisJCQkJcmMgPSBscGZjX2lkaWFnX3F1ZV9wYXJhbV9jaGVjaygKKwkJCQkJCXBoYmEtPnNsaTRfaGJhLmZwX2VxW3FpZHhdLAorCQkJCQkJaW5kZXgsIGNvdW50KTsKKwkJCQlpZiAocmMpCisJCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJCWlkaWFnLnB0cl9wcml2YXRlID0gcGhiYS0+c2xpNF9oYmEuZnBfZXFbcWlkeF07CisJCQkJZ290byBwYXNzX2NoZWNrOworCQkJfQorCQl9CisJCWdvdG8gZXJyb3Jfb3V0OworCQlicmVhazsKKwljYXNlIExQRkNfSURJQUdfQ1E6CisJCS8qIE1CWCBjb21wbGV0ZSBxdWV1ZSAqLworCQlpZiAocGhiYS0+c2xpNF9oYmEubWJ4X2NxLT5xdWV1ZV9pZCA9PSBxdWVpZCkgeworCQkJLyogU2FuaXR5IGNoZWNrICovCisJCQlyYyA9IGxwZmNfaWRpYWdfcXVlX3BhcmFtX2NoZWNrKAorCQkJCQlwaGJhLT5zbGk0X2hiYS5tYnhfY3EsIGluZGV4LCBjb3VudCk7CisJCQlpZiAocmMpCisJCQkJZ290byBlcnJvcl9vdXQ7CisJCQlpZGlhZy5wdHJfcHJpdmF0ZSA9IHBoYmEtPnNsaTRfaGJhLm1ieF9jcTsKKwkJCWdvdG8gcGFzc19jaGVjazsKKwkJfQorCQkvKiBFTFMgY29tcGxldGUgcXVldWUgKi8KKwkJaWYgKHBoYmEtPnNsaTRfaGJhLmVsc19jcS0+cXVldWVfaWQgPT0gcXVlaWQpIHsKKwkJCS8qIFNhbml0eSBjaGVjayAqLworCQkJcmMgPSBscGZjX2lkaWFnX3F1ZV9wYXJhbV9jaGVjaygKKwkJCQkJcGhiYS0+c2xpNF9oYmEuZWxzX2NxLCBpbmRleCwgY291bnQpOworCQkJaWYgKHJjKQorCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJaWRpYWcucHRyX3ByaXZhdGUgPSBwaGJhLT5zbGk0X2hiYS5lbHNfY3E7CisJCQlnb3RvIHBhc3NfY2hlY2s7CisJCX0KKwkJLyogRkNQIGNvbXBsZXRlIHF1ZXVlICovCisJCWZvciAocWlkeCA9IDA7IHFpZHggPCBwaGJhLT5jZmdfZmNwX2VxX2NvdW50OyBxaWR4KyspIHsKKwkJCWlmIChwaGJhLT5zbGk0X2hiYS5mY3BfY3FbcWlkeF0tPnF1ZXVlX2lkID09IHF1ZWlkKSB7CisJCQkJLyogU2FuaXR5IGNoZWNrICovCisJCQkJcmMgPSBscGZjX2lkaWFnX3F1ZV9wYXJhbV9jaGVjaygKKwkJCQkJCXBoYmEtPnNsaTRfaGJhLmZjcF9jcVtxaWR4XSwKKwkJCQkJCWluZGV4LCBjb3VudCk7CisJCQkJaWYgKHJjKQorCQkJCQlnb3RvIGVycm9yX291dDsKKwkJCQlpZGlhZy5wdHJfcHJpdmF0ZSA9CisJCQkJCQlwaGJhLT5zbGk0X2hiYS5mY3BfY3FbcWlkeF07CisJCQkJZ290byBwYXNzX2NoZWNrOworCQkJfQorCQl9CisJCWdvdG8gZXJyb3Jfb3V0OworCQlicmVhazsKKwljYXNlIExQRkNfSURJQUdfTVE6CisJCS8qIE1CWCB3b3JrIHF1ZXVlICovCisJCWlmIChwaGJhLT5zbGk0X2hiYS5tYnhfd3EtPnF1ZXVlX2lkID09IHF1ZWlkKSB7CisJCQkvKiBTYW5pdHkgY2hlY2sgKi8KKwkJCXJjID0gbHBmY19pZGlhZ19xdWVfcGFyYW1fY2hlY2soCisJCQkJCXBoYmEtPnNsaTRfaGJhLm1ieF93cSwgaW5kZXgsIGNvdW50KTsKKwkJCWlmIChyYykKKwkJCQlnb3RvIGVycm9yX291dDsKKwkJCWlkaWFnLnB0cl9wcml2YXRlID0gcGhiYS0+c2xpNF9oYmEubWJ4X3dxOworCQkJZ290byBwYXNzX2NoZWNrOworCQl9CisJCWJyZWFrOworCWNhc2UgTFBGQ19JRElBR19XUToKKwkJLyogRUxTIHdvcmsgcXVldWUgKi8KKwkJaWYgKHBoYmEtPnNsaTRfaGJhLmVsc193cS0+cXVldWVfaWQgPT0gcXVlaWQpIHsKKwkJCS8qIFNhbml0eSBjaGVjayAqLworCQkJcmMgPSBscGZjX2lkaWFnX3F1ZV9wYXJhbV9jaGVjaygKKwkJCQkJcGhiYS0+c2xpNF9oYmEuZWxzX3dxLCBpbmRleCwgY291bnQpOworCQkJaWYgKHJjKQorCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJaWRpYWcucHRyX3ByaXZhdGUgPSBwaGJhLT5zbGk0X2hiYS5lbHNfd3E7CisJCQlnb3RvIHBhc3NfY2hlY2s7CisJCX0KKwkJLyogRkNQIHdvcmsgcXVldWUgKi8KKwkJZm9yIChxaWR4ID0gMDsgcWlkeCA8IHBoYmEtPmNmZ19mY3Bfd3FfY291bnQ7IHFpZHgrKykgeworCQkJaWYgKHBoYmEtPnNsaTRfaGJhLmZjcF93cVtxaWR4XS0+cXVldWVfaWQgPT0gcXVlaWQpIHsKKwkJCQkvKiBTYW5pdHkgY2hlY2sgKi8KKwkJCQlyYyA9IGxwZmNfaWRpYWdfcXVlX3BhcmFtX2NoZWNrKAorCQkJCQkJcGhiYS0+c2xpNF9oYmEuZmNwX3dxW3FpZHhdLAorCQkJCQkJaW5kZXgsIGNvdW50KTsKKwkJCQlpZiAocmMpCisJCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJCWlkaWFnLnB0cl9wcml2YXRlID0KKwkJCQkJcGhiYS0+c2xpNF9oYmEuZmNwX3dxW3FpZHhdOworCQkJCWdvdG8gcGFzc19jaGVjazsKKwkJCX0KKwkJfQorCQlnb3RvIGVycm9yX291dDsKKwkJYnJlYWs7CisJY2FzZSBMUEZDX0lESUFHX1JROgorCQkvKiBIRFIgcXVldWUgKi8KKwkJaWYgKHBoYmEtPnNsaTRfaGJhLmhkcl9ycS0+cXVldWVfaWQgPT0gcXVlaWQpIHsKKwkJCS8qIFNhbml0eSBjaGVjayAqLworCQkJcmMgPSBscGZjX2lkaWFnX3F1ZV9wYXJhbV9jaGVjaygKKwkJCQkJcGhiYS0+c2xpNF9oYmEuaGRyX3JxLCBpbmRleCwgY291bnQpOworCQkJaWYgKHJjKQorCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJaWRpYWcucHRyX3ByaXZhdGUgPSBwaGJhLT5zbGk0X2hiYS5oZHJfcnE7CisJCQlnb3RvIHBhc3NfY2hlY2s7CisJCX0KKwkJLyogREFUIHF1ZXVlICovCisJCWlmIChwaGJhLT5zbGk0X2hiYS5kYXRfcnEtPnF1ZXVlX2lkID09IHF1ZWlkKSB7CisJCQkvKiBTYW5pdHkgY2hlY2sgKi8KKwkJCXJjID0gbHBmY19pZGlhZ19xdWVfcGFyYW1fY2hlY2soCisJCQkJCXBoYmEtPnNsaTRfaGJhLmRhdF9ycSwgaW5kZXgsIGNvdW50KTsKKwkJCWlmIChyYykKKwkJCQlnb3RvIGVycm9yX291dDsKKwkJCWlkaWFnLnB0cl9wcml2YXRlID0gcGhiYS0+c2xpNF9oYmEuZGF0X3JxOworCQkJZ290byBwYXNzX2NoZWNrOworCQl9CisJCWdvdG8gZXJyb3Jfb3V0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlnb3RvIGVycm9yX291dDsKKwkJYnJlYWs7CisJfQorCitwYXNzX2NoZWNrOgorCisJaWYgKGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfUVVFQUNDX1JEKSB7CisJCWlmIChjb3VudCA9PSBMUEZDX1FVRV9BQ0NfQlJPV1NFKQorCQkJaWRpYWcub2Zmc2V0Lmxhc3RfcmQgPSBpbmRleDsKKwl9CisKKwlpZiAoaWRpYWcuY21kLm9wY29kZSA9PSBMUEZDX0lESUFHX0NNRF9RVUVBQ0NfV1IgfHwKKwkgICAgaWRpYWcuY21kLm9wY29kZSA9PSBMUEZDX0lESUFHX0NNRF9RVUVBQ0NfU1QgfHwKKwkgICAgaWRpYWcuY21kLm9wY29kZSA9PSBMUEZDX0lESUFHX0NNRF9RVUVBQ0NfQ0wpIHsKKwkJLyogQWRkaXRpb25hbCBzYW5pdHkgY2hlY2tzIG9uIHdyaXRlIG9wZXJhdGlvbiAqLworCQlwcXVlID0gKHN0cnVjdCBscGZjX3F1ZXVlICopaWRpYWcucHRyX3ByaXZhdGU7CisJCWlmIChvZmZzZXQgPiBwcXVlLT5lbnRyeV9zaXplL3NpemVvZih1aW50MzJfdCkgLSAxKQorCQkJZ290byBlcnJvcl9vdXQ7CisJCXBlbnRyeSA9IHBxdWUtPnFlW2luZGV4XS5hZGRyZXNzOworCQlwZW50cnkgKz0gb2Zmc2V0OworCQlpZiAoaWRpYWcuY21kLm9wY29kZSA9PSBMUEZDX0lESUFHX0NNRF9RVUVBQ0NfV1IpCisJCQkqcGVudHJ5ID0gdmFsdWU7CisJCWlmIChpZGlhZy5jbWQub3Bjb2RlID09IExQRkNfSURJQUdfQ01EX1FVRUFDQ19TVCkKKwkJCSpwZW50cnkgfD0gdmFsdWU7CisJCWlmIChpZGlhZy5jbWQub3Bjb2RlID09IExQRkNfSURJQUdfQ01EX1FVRUFDQ19DTCkKKwkJCSpwZW50cnkgJj0gfnZhbHVlOworCX0KKwlyZXR1cm4gbmJ5dGVzOworCitlcnJvcl9vdXQ6CisJLyogQ2xlYW4gb3V0IGNvbW1hbmQgc3RydWN0dXJlIG9uIGNvbW1hbmQgZXJyb3Igb3V0ICovCisJbWVtc2V0KCZpZGlhZywgMCwgc2l6ZW9mKGlkaWFnKSk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qKgorICogbHBmY19pZGlhZ19kcmJhY2NfcmVhZF9yZWcgLSBpZGlhZyBkZWJ1Z2ZzIHJlYWQgYSBkb29yYmVsbCByZWdpc3RlcgorICogQHBoYmE6IFRoZSBwb2ludGVyIHRvIGhiYSBzdHJ1Y3R1cmUuCisgKiBAcGJ1ZmZlcjogVGhlIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byBjb3B5IHRoZSBkYXRhIHRvLgorICogQGxlbjogVGhlIGxlbmdodCBvZiBieXRlcyB0byBjb3BpZWQuCisgKiBAZHJicmVnaWQ6IFRoZSBpZCB0byBkb29yYmVsbCByZWdpc3RlcnMuCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIHJvdXRpbmUgcmVhZHMgYSBkb29yYmVsbCByZWdpc3RlciBhbmQgY29waWVzIGl0cyBjb250ZW50IHRvIHRoZQorICogdXNlciBidWZmZXIgcG9pbnRlZCB0byBieSBAcGJ1ZmZlci4KKyAqCisgKiBSZXR1cm5zOgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBhbW91bnQgb2YgZGF0YSB0aGF0IHdhcyBjb3BpZWQgaW50byBAcGJ1ZmZlci4KKyAqKi8KK3N0YXRpYyBpbnQKK2xwZmNfaWRpYWdfZHJiYWNjX3JlYWRfcmVnKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgY2hhciAqcGJ1ZmZlciwKKwkJCSAgIGludCBsZW4sIHVpbnQzMl90IGRyYnJlZ2lkKQoreworCisJaWYgKCFwYnVmZmVyKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoZHJicmVnaWQpIHsKKwljYXNlIExQRkNfRFJCX0VRQ1E6CisJCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19EUkJfQUNDX0JVRl9TSVpFLWxlbiwKKwkJCQkiRVFDUS1EUkItUkVHOiAweCUwOHhcbiIsCisJCQkJcmVhZGwocGhiYS0+c2xpNF9oYmEuRVFDUURCcmVnYWRkcikpOworCQlicmVhazsKKwljYXNlIExQRkNfRFJCX01ROgorCQlsZW4gKz0gc25wcmludGYocGJ1ZmZlcitsZW4sIExQRkNfRFJCX0FDQ19CVUZfU0laRS1sZW4sCisJCQkJIk1RLURSQi1SRUc6ICAgMHglMDh4XG4iLAorCQkJCXJlYWRsKHBoYmEtPnNsaTRfaGJhLk1RREJyZWdhZGRyKSk7CisJCWJyZWFrOworCWNhc2UgTFBGQ19EUkJfV1E6CisJCWxlbiArPSBzbnByaW50ZihwYnVmZmVyK2xlbiwgTFBGQ19EUkJfQUNDX0JVRl9TSVpFLWxlbiwKKwkJCQkiV1EtRFJCLVJFRzogICAweCUwOHhcbiIsCisJCQkJcmVhZGwocGhiYS0+c2xpNF9oYmEuV1FEQnJlZ2FkZHIpKTsKKwkJYnJlYWs7CisJY2FzZSBMUEZDX0RSQl9SUToKKwkJbGVuICs9IHNucHJpbnRmKHBidWZmZXIrbGVuLCBMUEZDX0RSQl9BQ0NfQlVGX1NJWkUtbGVuLAorCQkJCSJSUS1EUkItUkVHOiAgIDB4JTA4eFxuIiwKKwkJCQlyZWFkbChwaGJhLT5zbGk0X2hiYS5SUURCcmVnYWRkcikpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gbGVuOworfQorCisvKioKKyAqIGxwZmNfaWRpYWdfZHJiYWNjX3JlYWQgLSBpZGlhZyBkZWJ1Z2ZzIHJlYWQgcG9ydCBkb29yYmVsbAorICogQGZpbGU6IFRoZSBmaWxlIHBvaW50ZXIgdG8gcmVhZCBmcm9tLgorICogQGJ1ZjogVGhlIGJ1ZmZlciB0byBjb3B5IHRoZSBkYXRhIHRvLgorICogQG5ieXRlczogVGhlIG51bWJlciBvZiBieXRlcyB0byByZWFkLgorICogQHBwb3M6IFRoZSBwb3NpdGlvbiBpbiB0aGUgZmlsZSB0byBzdGFydCByZWFkaW5nIGZyb20uCisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIHJvdXRpbmUgcmVhZHMgZGF0YSBmcm9tIHRoZSBAcGhiYSBkZXZpY2UgZG9vcmJlbGwgcmVnaXN0ZXIgYWNjb3JkaW5nCisgKiB0byB0aGUgaWRpYWcgY29tbWFuZCwgYW5kIGNvcGllcyB0byB1c2VyIEBidWYuIERlcGVuZGluZyBvbiB0aGUgZG9vcmJlbGwKKyAqIHJlZ2lzdGVyIHJlYWQgY29tbWFuZCBzZXR1cCwgaXQgZG9lcyBlaXRoZXIgYSBzaW5nbGUgZG9vcmJlbGwgcmVnaXN0ZXIKKyAqIHJlYWQgb3IgZHVtcCBhbGwgZG9vcmJlbGwgcmVnaXN0ZXJzLgorICoKKyAqIFJldHVybnM6CisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFtb3VudCBvZiBkYXRhIHRoYXQgd2FzIHJlYWQgKHRoaXMgY291bGQgYmUgbGVzcworICogdGhhbiBAbmJ5dGVzIGlmIHRoZSBlbmQgb2YgdGhlIGZpbGUgd2FzIHJlYWNoZWQpIG9yIGEgbmVnYXRpdmUgZXJyb3IgdmFsdWUuCisgKiovCitzdGF0aWMgc3NpemVfdAorbHBmY19pZGlhZ19kcmJhY2NfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywKKwkJICAgICAgIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgbHBmY19kZWJ1ZyAqZGVidWcgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSAqKWRlYnVnLT5pX3ByaXZhdGU7CisJdWludDMyX3QgZHJiX3JlZ19pZCwgaTsKKwljaGFyICpwYnVmZmVyOworCWludCBsZW4gPSAwOworCisJLyogVGhpcyBpcyBhIHVzZXIgcmVhZCBvcGVyYXRpb24gKi8KKwlkZWJ1Zy0+b3AgPSBMUEZDX0lESUFHX09QX1JEOworCisJaWYgKCFkZWJ1Zy0+YnVmZmVyKQorCQlkZWJ1Zy0+YnVmZmVyID0ga21hbGxvYyhMUEZDX0RSQl9BQ0NfQlVGX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghZGVidWctPmJ1ZmZlcikKKwkJcmV0dXJuIDA7CisJcGJ1ZmZlciA9IGRlYnVnLT5idWZmZXI7CisKKwlpZiAoKnBwb3MpCisJCXJldHVybiAwOworCisJaWYgKGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfRFJCQUNDX1JEKQorCQlkcmJfcmVnX2lkID0gaWRpYWcuY21kLmRhdGFbMF07CisJZWxzZQorCQlyZXR1cm4gMDsKKworCWlmIChkcmJfcmVnX2lkID09IExQRkNfRFJCX0FDQ19BTEwpCisJCWZvciAoaSA9IDE7IGkgPD0gTFBGQ19EUkJfTUFYOyBpKyspCisJCQlsZW4gPSBscGZjX2lkaWFnX2RyYmFjY19yZWFkX3JlZyhwaGJhLAorCQkJCQkJCSBwYnVmZmVyLCBsZW4sIGkpOworCWVsc2UKKwkJbGVuID0gbHBmY19pZGlhZ19kcmJhY2NfcmVhZF9yZWcocGhiYSwKKwkJCQkJCSBwYnVmZmVyLCBsZW4sIGRyYl9yZWdfaWQpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgbmJ5dGVzLCBwcG9zLCBwYnVmZmVyLCBsZW4pOworfQorCisvKioKKyAqIGxwZmNfaWRpYWdfZHJiYWNjX3dyaXRlIC0gU3ludGF4IGNoZWNrIGFuZCBzZXQgdXAgaWRpYWcgZHJiYWNjIGNvbW1hbmRzCisgKiBAZmlsZTogVGhlIGZpbGUgcG9pbnRlciB0byByZWFkIGZyb20uCisgKiBAYnVmOiBUaGUgYnVmZmVyIHRvIGNvcHkgdGhlIHVzZXIgZGF0YSBmcm9tLgorICogQG5ieXRlczogVGhlIG51bWJlciBvZiBieXRlcyB0byBnZXQuCisgKiBAcHBvczogVGhlIHBvc2l0aW9uIGluIHRoZSBmaWxlIHRvIHN0YXJ0IHJlYWRpbmcgZnJvbS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgZ2V0IHRoZSBkZWJ1Z2ZzIGlkaWFnIGNvbW1hbmQgc3RydWN0IGZyb20gdXNlciBzcGFjZSBhbmQgdGhlbgorICogcGVyZm9ybSB0aGUgc3ludGF4IGNoZWNrIGZvciBwb3J0IGRvb3JiZWxsIHJlZ2lzdGVyIHJlYWQgKGR1bXApIG9yIHdyaXRlCisgKiAoc2V0KSBjb21tYW5kIGFjY29yZGluZ2x5LiBJbiB0aGUgY2FzZSBvZiBwb3J0IHF1ZXVlIHJlYWQgY29tbWFuZCwgaXQgc2V0cworICogdXAgdGhlIGNvbW1hbmQgaW4gdGhlIGlkaWFnIGNvbW1hbmQgc3RydWN0IGZvciB0aGUgZm9sbG93aW5nIGRlYnVnZnMgcmVhZAorICogb3BlcmF0aW9uLiBJbiB0aGUgY2FzZSBvZiBwb3J0IGRvb3JiZWxsIHJlZ2lzdGVyIHdyaXRlIG9wZXJhdGlvbiwgaXQKKyAqIGV4ZWN1dGVzIHRoZSB3cml0ZSBvcGVyYXRpb24gaW50byB0aGUgcG9ydCBkb29yYmVsbCByZWdpc3RlciBhY2NvcmRpbmdseS4KKyAqCisgKiBJdCByZXR1cm5zIHRoZSBAbmJ5dGdlcyBwYXNzaW5nIGluIGZyb20gZGVidWdmcyB1c2VyIHNwYWNlIHdoZW4gc3VjY2Vzc2Z1bC4KKyAqIEluIGNhc2Ugb2YgZXJyb3IgY29uZGl0aW9ucywgaXQgcmV0dXJucyBwcm9wZXIgZXJyb3IgY29kZSBiYWNrIHRvIHRoZSB1c2VyCisgKiBzcGFjZS4KKyAqKi8KK3N0YXRpYyBzc2l6ZV90CitscGZjX2lkaWFnX2RyYmFjY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCXNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgbHBmY19kZWJ1ZyAqZGVidWcgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSAqKWRlYnVnLT5pX3ByaXZhdGU7CisJdWludDMyX3QgZHJiX3JlZ19pZCwgdmFsdWUsIHJlZ192YWw7CisJdm9pZCBfX2lvbWVtICpkcmJfcmVnOworCWludCByYzsKKworCS8qIFRoaXMgaXMgYSB1c2VyIHdyaXRlIG9wZXJhdGlvbiAqLworCWRlYnVnLT5vcCA9IExQRkNfSURJQUdfT1BfV1I7CisKKwlyYyA9IGxwZmNfaWRpYWdfY21kX2dldChidWYsIG5ieXRlcywgJmlkaWFnLmNtZCk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJLyogU2FuaXR5IGNoZWNrIG9uIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgKi8KKwlkcmJfcmVnX2lkID0gaWRpYWcuY21kLmRhdGFbMF07CisJdmFsdWUgPSBpZGlhZy5jbWQuZGF0YVsxXTsKKworCWlmIChpZGlhZy5jbWQub3Bjb2RlID09IExQRkNfSURJQUdfQ01EX0RSQkFDQ19XUiB8fAorCSAgICBpZGlhZy5jbWQub3Bjb2RlID09IExQRkNfSURJQUdfQ01EX0RSQkFDQ19TVCB8fAorCSAgICBpZGlhZy5jbWQub3Bjb2RlID09IExQRkNfSURJQUdfQ01EX0RSQkFDQ19DTCkgeworCQlpZiAocmMgIT0gTFBGQ19EUkJfQUNDX1dSX0NNRF9BUkcpCisJCQlnb3RvIGVycm9yX291dDsKKwkJaWYgKGRyYl9yZWdfaWQgPiBMUEZDX0RSQl9NQVgpCisJCQlnb3RvIGVycm9yX291dDsKKwl9IGVsc2UgaWYgKGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfRFJCQUNDX1JEKSB7CisJCWlmIChyYyAhPSBMUEZDX0RSQl9BQ0NfUkRfQ01EX0FSRykKKwkJCWdvdG8gZXJyb3Jfb3V0OworCQlpZiAoKGRyYl9yZWdfaWQgPiBMUEZDX0RSQl9NQVgpICYmCisJCSAgICAoZHJiX3JlZ19pZCAhPSBMUEZDX0RSQl9BQ0NfQUxMKSkKKwkJCWdvdG8gZXJyb3Jfb3V0OworCX0gZWxzZQorCQlnb3RvIGVycm9yX291dDsKKworCS8qIFBlcmZvcm0gdGhlIHdyaXRlIGFjY2VzcyBvcGVyYXRpb24gKi8KKwlpZiAoaWRpYWcuY21kLm9wY29kZSA9PSBMUEZDX0lESUFHX0NNRF9EUkJBQ0NfV1IgfHwKKwkgICAgaWRpYWcuY21kLm9wY29kZSA9PSBMUEZDX0lESUFHX0NNRF9EUkJBQ0NfU1QgfHwKKwkgICAgaWRpYWcuY21kLm9wY29kZSA9PSBMUEZDX0lESUFHX0NNRF9EUkJBQ0NfQ0wpIHsKKwkJc3dpdGNoIChkcmJfcmVnX2lkKSB7CisJCWNhc2UgTFBGQ19EUkJfRVFDUToKKwkJCWRyYl9yZWcgPSBwaGJhLT5zbGk0X2hiYS5FUUNRREJyZWdhZGRyOworCQkJYnJlYWs7CisJCWNhc2UgTFBGQ19EUkJfTVE6CisJCQlkcmJfcmVnID0gcGhiYS0+c2xpNF9oYmEuTVFEQnJlZ2FkZHI7CisJCQlicmVhazsKKwkJY2FzZSBMUEZDX0RSQl9XUToKKwkJCWRyYl9yZWcgPSBwaGJhLT5zbGk0X2hiYS5XUURCcmVnYWRkcjsKKwkJCWJyZWFrOworCQljYXNlIExQRkNfRFJCX1JROgorCQkJZHJiX3JlZyA9IHBoYmEtPnNsaTRfaGJhLlJRREJyZWdhZGRyOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGVycm9yX291dDsKKwkJfQorCisJCWlmIChpZGlhZy5jbWQub3Bjb2RlID09IExQRkNfSURJQUdfQ01EX0RSQkFDQ19XUikKKwkJCXJlZ192YWwgPSB2YWx1ZTsKKwkJaWYgKGlkaWFnLmNtZC5vcGNvZGUgPT0gTFBGQ19JRElBR19DTURfRFJCQUNDX1NUKSB7CisJCQlyZWdfdmFsID0gcmVhZGwoZHJiX3JlZyk7CisJCQlyZWdfdmFsIHw9IHZhbHVlOworCQl9CisJCWlmIChpZGlhZy5jbWQub3Bjb2RlID09IExQRkNfSURJQUdfQ01EX0RSQkFDQ19DTCkgeworCQkJcmVnX3ZhbCA9IHJlYWRsKGRyYl9yZWcpOworCQkJcmVnX3ZhbCAmPSB+dmFsdWU7CisJCX0KKwkJd3JpdGVsKHJlZ192YWwsIGRyYl9yZWcpOworCQlyZWFkbChkcmJfcmVnKTsgLyogZmx1c2ggKi8KKwl9CisJcmV0dXJuIG5ieXRlczsKKworZXJyb3Jfb3V0OgorCS8qIENsZWFuIG91dCBjb21tYW5kIHN0cnVjdHVyZSBvbiBjb21tYW5kIGVycm9yIG91dCAqLworCW1lbXNldCgmaWRpYWcsIDAsIHNpemVvZihpZGlhZykpOworCXJldHVybiAtRUlOVkFMOworfQorCiAjdW5kZWYgbHBmY19kZWJ1Z2ZzX29wX2Rpc2NfdHJjCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscGZjX2RlYnVnZnNfb3BfZGlzY190cmMgPSB7CiAJLm93bmVyID0gICAgICAgIFRISVNfTU9EVUxFLApAQCAtMTk4Niw2ICsyNDI1LDI2IEBACiAJLnJlbGVhc2UgPSAgICAgIGxwZmNfaWRpYWdfcmVsZWFzZSwKIH07CiAKKyN1bmRlZiBscGZjX2lkaWFnX29wX3F1ZWFjYworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHBmY19pZGlhZ19vcF9xdWVBY2MgPSB7CisJLm93bmVyID0gICAgICAgIFRISVNfTU9EVUxFLAorCS5vcGVuID0gICAgICAgICBscGZjX2lkaWFnX29wZW4sCisJLmxsc2VlayA9ICAgICAgIGxwZmNfZGVidWdmc19sc2VlaywKKwkucmVhZCA9ICAgICAgICAgbHBmY19pZGlhZ19xdWVhY2NfcmVhZCwKKwkud3JpdGUgPSAgICAgICAgbHBmY19pZGlhZ19xdWVhY2Nfd3JpdGUsCisJLnJlbGVhc2UgPSAgICAgIGxwZmNfaWRpYWdfY21kX3JlbGVhc2UsCit9OworCisjdW5kZWYgbHBmY19pZGlhZ19vcF9kcmJhY2MKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxwZmNfaWRpYWdfb3BfZHJiQWNjID0geworCS5vd25lciA9ICAgICAgICBUSElTX01PRFVMRSwKKwkub3BlbiA9ICAgICAgICAgbHBmY19pZGlhZ19vcGVuLAorCS5sbHNlZWsgPSAgICAgICBscGZjX2RlYnVnZnNfbHNlZWssCisJLnJlYWQgPSAgICAgICAgIGxwZmNfaWRpYWdfZHJiYWNjX3JlYWQsCisJLndyaXRlID0gICAgICAgIGxwZmNfaWRpYWdfZHJiYWNjX3dyaXRlLAorCS5yZWxlYXNlID0gICAgICBscGZjX2lkaWFnX2NtZF9yZWxlYXNlLAorfTsKKwogI2VuZGlmCiAKIC8qKgpAQCAtMjI2MSw2ICsyNzIwLDMyIEBACiAJCX0KIAl9CiAKKwkvKiBpRGlhZyBhY2Nlc3MgUENJIGZ1bmN0aW9uIHF1ZXVlICovCisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAicXVlQWNjIik7CisJaWYgKCFwaGJhLT5pZGlhZ19xdWVfYWNjKSB7CisJCXBoYmEtPmlkaWFnX3F1ZV9hY2MgPQorCQkJZGVidWdmc19jcmVhdGVfZmlsZShuYW1lLCBTX0lGUkVHfFNfSVJVR098U19JV1VTUiwKKwkJCQlwaGJhLT5pZGlhZ19yb290LCBwaGJhLCAmbHBmY19pZGlhZ19vcF9xdWVBY2MpOworCQlpZiAoIXBoYmEtPmlkaWFnX3F1ZV9hY2MpIHsKKwkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCQkJICIyOTI2IENhbid0IGNyZWF0ZSBpZGlhZyBkZWJ1Z2ZzXG4iKTsKKwkJCWdvdG8gZGVidWdfZmFpbGVkOworCQl9CisJfQorCisJLyogaURpYWcgYWNjZXNzIFBDSSBmdW5jdGlvbiBkb29yYmVsbCByZWdpc3RlcnMgKi8KKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJkcmJBY2MiKTsKKwlpZiAoIXBoYmEtPmlkaWFnX2RyYl9hY2MpIHsKKwkJcGhiYS0+aWRpYWdfZHJiX2FjYyA9CisJCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKG5hbWUsIFNfSUZSRUd8U19JUlVHT3xTX0lXVVNSLAorCQkJCXBoYmEtPmlkaWFnX3Jvb3QsIHBoYmEsICZscGZjX2lkaWFnX29wX2RyYkFjYyk7CisJCWlmICghcGhiYS0+aWRpYWdfZHJiX2FjYykgeworCQkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsIExPR19JTklULAorCQkJCQkgIjI5MjcgQ2FuJ3QgY3JlYXRlIGlkaWFnIGRlYnVnZnNcbiIpOworCQkJZ290byBkZWJ1Z19mYWlsZWQ7CisJCX0KKwl9CisKIGRlYnVnX2ZhaWxlZDoKIAlyZXR1cm47CiAjZW5kaWYKQEAgLTIzMzksNiArMjgyNCwxNiBAQAogCQkgKiBpRGlhZyByZWxlYXNlCiAJCSAqLwogCQlpZiAocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KSB7CisJCQlpZiAocGhiYS0+aWRpYWdfZHJiX2FjYykgeworCQkJCS8qIGlEaWFnIGRyYkFjYyAqLworCQkJCWRlYnVnZnNfcmVtb3ZlKHBoYmEtPmlkaWFnX2RyYl9hY2MpOworCQkJCXBoYmEtPmlkaWFnX2RyYl9hY2MgPSBOVUxMOworCQkJfQorCQkJaWYgKHBoYmEtPmlkaWFnX3F1ZV9hY2MpIHsKKwkJCQkvKiBpRGlhZyBxdWVBY2MgKi8KKwkJCQlkZWJ1Z2ZzX3JlbW92ZShwaGJhLT5pZGlhZ19xdWVfYWNjKTsKKwkJCQlwaGJhLT5pZGlhZ19xdWVfYWNjID0gTlVMTDsKKwkJCX0KIAkJCWlmIChwaGJhLT5pZGlhZ19xdWVfaW5mbykgewogCQkJCS8qIGlEaWFnIHF1ZUluZm8gKi8KIAkJCQlkZWJ1Z2ZzX3JlbW92ZShwaGJhLT5pZGlhZ19xdWVfaW5mbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2RlYnVnZnMuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5oCmluZGV4IDkxYjlhOTQuLjY1MjVhNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZGVidWdmcy5oCkBAIC0zOSwxMyArMzksNDIgQEAKIC8qIGhicWluZm8gb3V0cHV0IGJ1ZmZlciBzaXplICovCiAjZGVmaW5lIExQRkNfSEJRSU5GT19TSVpFIDgxOTIKIAotLyogcmRQY2lDb25mIG91dHB1dCBidWZmZXIgc2l6ZSAqLworLyogcGNpQ29uZiAqLworI2RlZmluZSBMUEZDX1BDSV9DRkdfQlJPV1NFIDB4ZmZmZgorI2RlZmluZSBMUEZDX1BDSV9DRkdfUkRfQ01EX0FSRyAyCisjZGVmaW5lIExQRkNfUENJX0NGR19XUl9DTURfQVJHIDMKICNkZWZpbmUgTFBGQ19QQ0lfQ0ZHX1NJWkUgNDA5NgogI2RlZmluZSBMUEZDX1BDSV9DRkdfUkRfQlVGX1NJWkUgKExQRkNfUENJX0NGR19TSVpFLzIpCiAjZGVmaW5lIExQRkNfUENJX0NGR19SRF9TSVpFIChMUEZDX1BDSV9DRkdfU0laRS80KQogCi0vKiBxdWV1ZSBpbmZvIG91dHB1dCBidWZmZXIgc2l6ZSAqLwotI2RlZmluZSBMUEZDX1FVRV9JTkZPX0dFVF9CVUZfU0laRSAyMDQ4CisvKiBxdWV1ZSBpbmZvICovCisjZGVmaW5lIExQRkNfUVVFX0lORk9fR0VUX0JVRl9TSVpFIDQwOTYKKworLyogcXVldWUgYWNjICovCisjZGVmaW5lIExQRkNfUVVFX0FDQ19CUk9XU0UgMHhmZmZmCisjZGVmaW5lIExQRkNfUVVFX0FDQ19SRF9DTURfQVJHIDQKKyNkZWZpbmUgTFBGQ19RVUVfQUNDX1dSX0NNRF9BUkcgNgorI2RlZmluZSBMUEZDX1FVRV9BQ0NfQlVGX1NJWkUgNDA5NgorI2RlZmluZSBMUEZDX1FVRV9BQ0NfU0laRSAoTFBGQ19RVUVfQUNDX0JVRl9TSVpFLzIpCisKKyNkZWZpbmUgTFBGQ19JRElBR19FUSAxCisjZGVmaW5lIExQRkNfSURJQUdfQ1EgMgorI2RlZmluZSBMUEZDX0lESUFHX01RIDMKKyNkZWZpbmUgTFBGQ19JRElBR19XUSA0CisjZGVmaW5lIExQRkNfSURJQUdfUlEgNQorCisvKiBkb29yYmVsbCBhY2MgKi8KKyNkZWZpbmUgTFBGQ19EUkJfQUNDX0FMTCAweGZmZmYKKyNkZWZpbmUgTFBGQ19EUkJfQUNDX1JEX0NNRF9BUkcgMQorI2RlZmluZSBMUEZDX0RSQl9BQ0NfV1JfQ01EX0FSRyAyCisjZGVmaW5lIExQRkNfRFJCX0FDQ19CVUZfU0laRSAyNTYKKworI2RlZmluZSBMUEZDX0RSQl9FUUNRIDEKKyNkZWZpbmUgTFBGQ19EUkJfTVEgICAyCisjZGVmaW5lIExQRkNfRFJCX1dRICAgMworI2RlZmluZSBMUEZDX0RSQl9SUSAgIDQKKworI2RlZmluZSBMUEZDX0RSQl9NQVggIDQKIAogI2RlZmluZSBTSVpFX1U4ICBzaXplb2YodWludDhfdCkKICNkZWZpbmUgU0laRV9VMTYgc2l6ZW9mKHVpbnQxNl90KQpAQCAtNzMsMTMgKzEwMiwyMyBAQAogCXVpbnQzMl90IGxhc3RfcmQ7CiB9OwogCi0jZGVmaW5lIExQRkNfSURJQUdfQ01EX0RBVEFfU0laRSA0CisjZGVmaW5lIExQRkNfSURJQUdfQ01EX0RBVEFfU0laRSA4CiBzdHJ1Y3QgbHBmY19pZGlhZ19jbWQgewogCXVpbnQzMl90IG9wY29kZTsKICNkZWZpbmUgTFBGQ19JRElBR19DTURfUENJQ0ZHX1JEIDB4MDAwMDAwMDEKICNkZWZpbmUgTFBGQ19JRElBR19DTURfUENJQ0ZHX1dSIDB4MDAwMDAwMDIKICNkZWZpbmUgTFBGQ19JRElBR19DTURfUENJQ0ZHX1NUIDB4MDAwMDAwMDMKICNkZWZpbmUgTFBGQ19JRElBR19DTURfUENJQ0ZHX0NMIDB4MDAwMDAwMDQKKworI2RlZmluZSBMUEZDX0lESUFHX0NNRF9RVUVBQ0NfUkQgMHgwMDAwMDAxMQorI2RlZmluZSBMUEZDX0lESUFHX0NNRF9RVUVBQ0NfV1IgMHgwMDAwMDAxMgorI2RlZmluZSBMUEZDX0lESUFHX0NNRF9RVUVBQ0NfU1QgMHgwMDAwMDAxMworI2RlZmluZSBMUEZDX0lESUFHX0NNRF9RVUVBQ0NfQ0wgMHgwMDAwMDAxNAorCisjZGVmaW5lIExQRkNfSURJQUdfQ01EX0RSQkFDQ19SRCAweDAwMDAwMDIxCisjZGVmaW5lIExQRkNfSURJQUdfQ01EX0RSQkFDQ19XUiAweDAwMDAwMDIyCisjZGVmaW5lIExQRkNfSURJQUdfQ01EX0RSQkFDQ19TVCAweDAwMDAwMDIzCisjZGVmaW5lIExQRkNfSURJQUdfQ01EX0RSQkFDQ19DTCAweDAwMDAwMDI0CiAJdWludDMyX3QgZGF0YVtMUEZDX0lESUFHX0NNRF9EQVRBX1NJWkVdOwogfTsKIApAQCAtODcsNiArMTI2LDcgQEAKIAl1aW50MzJfdCBhY3RpdmU7CiAJc3RydWN0IGxwZmNfaWRpYWdfY21kIGNtZDsKIAlzdHJ1Y3QgbHBmY19pZGlhZ19vZmZzZXQgb2Zmc2V0OworCXZvaWQgKnB0cl9wcml2YXRlOwogfTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYwppbmRleCBkMzRiNjlmLi5lMmM0NTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKQEAgLTY3MCw2ICs2NzAsNyBAQAogCQkJICogRHJpdmVyIG5lZWRzIHRvIHJlLXJlZyBWUEkgaW4gb3JkZXIgZm9yIGYvdwogCQkJICogdG8gdXBkYXRlIHRoZSBNQUMgYWRkcmVzcy4KIAkJCSAqLworCQkJbHBmY19ubHBfc2V0X3N0YXRlKHZwb3J0LCBuZGxwLCBOTFBfU1RFX1VOTUFQUEVEX05PREUpOwogCQkJbHBmY19yZWdpc3Rlcl9uZXdfdnBvcnQocGhiYSwgdnBvcnQsIG5kbHApOwogCQkJcmV0dXJuIDA7CiAJfQpAQCAtODY5LDggKzg3MCw4IEBACiAJCSAqLwogCQlpZiAoKHBoYmEtPmhiYV9mbGFnICYgSEJBX0ZJUF9TVVBQT1JUKSAmJgogCQkgICAgKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9ESVNDT1ZFUlkpICYmCi0JCSAgICAoaXJzcC0+dWxwU3RhdHVzICE9IElPU1RBVF9MT0NBTF9SRUpFQ1QpICYmCi0JCSAgICAoaXJzcC0+dW4udWxwV29yZFs0XSAhPSBJT0VSUl9TTElfQUJPUlRFRCkpIHsKKwkJICAgICEoKGlyc3AtPnVscFN0YXR1cyA9PSBJT1NUQVRfTE9DQUxfUkVKRUNUKSAmJgorCQkgICAgIChpcnNwLT51bi51bHBXb3JkWzRdID09IElPRVJSX1NMSV9BQk9SVEVEKSkpIHsKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19GSVAgfCBMT0dfRUxTLAogCQkJCQkiMjYxMSBGTE9HSSBmYWlsZWQgb24gRkNGICh4JXgpLCAiCiAJCQkJCSJzdGF0dXM6eCV4L3gleCwgdG1vOngleCwgcGVyZm9ybSAiCkBAIC0xMDg1LDE0ICsxMDg2LDE1IEBACiAJaWYgKHNwLT5jbW4uZmNwaEhpZ2ggPCBGQ19QSDMpCiAJCXNwLT5jbW4uZmNwaEhpZ2ggPSBGQ19QSDM7CiAKLQlpZiAgKChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpICYmCi0JICAgICAoYmZfZ2V0KGxwZmNfc2xpX2ludGZfaWZfdHlwZSwgJnBoYmEtPnNsaTRfaGJhLnNsaV9pbnRmKSA9PQotCSAgICAgIExQRkNfU0xJX0lOVEZfSUZfVFlQRV8wKSkgewotCQllbHNpb2NiLT5pb2NiLnVscEN0X2ggPSAoKFNMSTRfQ1RfRkNGSSA+PiAxKSAmIDEpOwotCQllbHNpb2NiLT5pb2NiLnVscEN0X2wgPSAoU0xJNF9DVF9GQ0ZJICYgMSk7Ci0JCS8qIEZMT0dJIG5lZWRzIHRvIGJlIDMgZm9yIFdRRSBGQ0ZJICovCi0JCS8qIFNldCB0aGUgZmNmaSB0byB0aGUgZmNmaSB3ZSByZWdpc3RlcmVkIHdpdGggKi8KLQkJZWxzaW9jYi0+aW9jYi51bHBDb250ZXh0ID0gcGhiYS0+ZmNmLmZjZmk7CisJaWYgIChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpIHsKKwkJaWYgKGJmX2dldChscGZjX3NsaV9pbnRmX2lmX3R5cGUsICZwaGJhLT5zbGk0X2hiYS5zbGlfaW50ZikgPT0KKwkJICAgIExQRkNfU0xJX0lOVEZfSUZfVFlQRV8wKSB7CisJCQllbHNpb2NiLT5pb2NiLnVscEN0X2ggPSAoKFNMSTRfQ1RfRkNGSSA+PiAxKSAmIDEpOworCQkJZWxzaW9jYi0+aW9jYi51bHBDdF9sID0gKFNMSTRfQ1RfRkNGSSAmIDEpOworCQkJLyogRkxPR0kgbmVlZHMgdG8gYmUgMyBmb3IgV1FFIEZDRkkgKi8KKwkJCS8qIFNldCB0aGUgZmNmaSB0byB0aGUgZmNmaSB3ZSByZWdpc3RlcmVkIHdpdGggKi8KKwkJCWVsc2lvY2ItPmlvY2IudWxwQ29udGV4dCA9IHBoYmEtPmZjZi5mY2ZpOworCQl9CiAJfSBlbHNlIGlmIChwaGJhLT5zbGkzX29wdGlvbnMgJiBMUEZDX1NMSTNfTlBJVl9FTkFCTEVEKSB7CiAJCXNwLT5jbW4ucmVxdWVzdF9tdWx0aXBsZV9OcG9ydCA9IDE7CiAJCS8qIEZvciBGTE9HSSwgTGV0IEZMT0dJIHJzcCBzZXQgdGhlIE5Qb3J0SUQgZm9yIFZQSSAwICovCkBAIC00MTA3LDEzICs0MTA5LDEzIEBACiAJcGNtZCArPSBzaXplb2YodWludDMyX3QpOwogCXJycSA9IChzdHJ1Y3QgUlJRICopcGNtZDsKIAlycnEtPnJycV9leGNoZyA9IGJlMzJfdG9fY3B1KHJycS0+cnJxX2V4Y2hnKTsKLQlyeGlkID0gYmUxNl90b19jcHUoYmZfZ2V0KHJycV9yeGlkLCBycnEpKTsKKwlyeGlkID0gYmZfZ2V0KHJycV9yeGlkLCBycnEpOwogCiAJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9JTkZPLCBMT0dfRUxTLAogCQkJIjI4ODMgQ2xlYXIgUlJRIGZvciBTSUQ6eCV4IE9YSUQ6eCV4IFJYSUQ6eCV4IgogCQkJIiB4JXggeCV4XG4iLAogCQkJYmUzMl90b19jcHUoYmZfZ2V0KHJycV9kaWQsIHJycSkpLAotCQkJYmUxNl90b19jcHUoYmZfZ2V0KHJycV9veGlkLCBycnEpKSwKKwkJCWJmX2dldChycnFfb3hpZCwgcnJxKSwKIAkJCXJ4aWQsCiAJCQlpb2NiLT5pb3RhZywgaW9jYi0+aW9jYi51bHBDb250ZXh0KTsKIApAQCAtNDEyMSw3ICs0MTIzLDcgQEAKIAkJIkNsZWFyIFJSUTogIGRpZDp4JXggZmxnOngleCBleGNoZzp4JS4wOHgiLAogCQluZGxwLT5ubHBfRElELCBuZGxwLT5ubHBfZmxhZywgcnJxLT5ycnFfZXhjaGcpOwogCWlmICh2cG9ydC0+ZmNfbXlESUQgPT0gYmUzMl90b19jcHUoYmZfZ2V0KHJycV9kaWQsIHJycSkpKQotCQl4cmkgPSBiZTE2X3RvX2NwdShiZl9nZXQocnJxX294aWQsIHJycSkpOworCQl4cmkgPSBiZl9nZXQocnJxX294aWQsIHJycSk7CiAJZWxzZQogCQl4cmkgPSByeGlkOwogCXBycnEgPSBscGZjX2dldF9hY3RpdmVfcnJxKHZwb3J0LCB4cmksIG5kbHAtPm5scF9ESUQpOwpAQCAtNzI5MCw4ICs3MjkyLDkgQEAKIAlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSBjbWRpb2NiLT52cG9ydDsKIAlJT0NCX3QgKmlyc3A7CiAJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHA7Ci0JbmRscCA9IChzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKWNtZGlvY2ItPmNvbnRleHQxOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gbHBmY19zaG9zdF9mcm9tX3Zwb3J0KHZwb3J0KTsKIAorCW5kbHAgPSAoc3RydWN0IGxwZmNfbm9kZWxpc3QgKiljbWRpb2NiLT5jb250ZXh0MTsKIAlpcnNwID0gJnJzcGlvY2ItPmlvY2I7CiAJbHBmY19kZWJ1Z2ZzX2Rpc2NfdHJjKHZwb3J0LCBMUEZDX0RJU0NfVFJDX0VMU19DTUQsCiAJCSJMT0dPIG5waXYgY21wbDogIHN0YXR1czp4JXgveCV4IGRpZDp4JXgiLApAQCAtNzMwMiw2ICs3MzA1LDE5IEBACiAKIAkvKiBUcmlnZ2VyIHRoZSByZWxlYXNlIG9mIHRoZSBuZGxwIGFmdGVyIGxvZ28gKi8KIAlscGZjX25scF9wdXQobmRscCk7CisKKwkvKiBOUElWIExPR08gY29tcGxldGVzIHRvIE5Qb3J0IDxubHBfRElEPiAqLworCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fSU5GTywgTE9HX0VMUywKKwkJCSAiMjkyOCBOUElWIExPR08gY29tcGxldGVzIHRvIE5Qb3J0IHgleCAiCisJCQkgIkRhdGE6IHgleCB4JXggeCV4IHgleFxuIiwKKwkJCSBuZGxwLT5ubHBfRElELCBpcnNwLT51bHBTdGF0dXMsIGlyc3AtPnVuLnVscFdvcmRbNF0sCisJCQkgaXJzcC0+dWxwVGltZW91dCwgdnBvcnQtPm51bV9kaXNjX25vZGVzKTsKKworCWlmIChpcnNwLT51bHBTdGF0dXMgPT0gSU9TVEFUX1NVQ0NFU1MpIHsKKwkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJdnBvcnQtPmZjX2ZsYWcgJj0gfkZDX0ZBQlJJQzsKKwkJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCX0KIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCmluZGV4IDMwMTQ5ODMuLjdhMzVkZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBFbXVsZXggTGludXggRGV2aWNlIERyaXZlciBmb3IgICAgICAgICAqCiAgKiBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDExIEVtdWxleC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAqCiAgKiBFTVVMRVggYW5kIFNMSSBhcmUgdHJhZGVtYXJrcyBvZiBFbXVsZXguICAgICAgICAgICAgICAgICAgICAgICAgKgogICogd3d3LmVtdWxleC5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IENocmlzdG9waCBIZWxsd2lnICAgICAgICAgICAgICAqCkBAIC0zNTY5LDYgKzM1NjksMTAgQEAKIAkJInJwb3J0IGFkZDogICAgICAgZGlkOngleCBmbGc6eCV4IHR5cGUgeCV4IiwKIAkJbmRscC0+bmxwX0RJRCwgbmRscC0+bmxwX2ZsYWcsIG5kbHAtPm5scF90eXBlKTsKIAorCS8qIERvbid0IGFkZCB0aGUgcmVtb3RlIHBvcnQgaWYgdW5sb2FkaW5nLiAqLworCWlmICh2cG9ydC0+bG9hZF9mbGFnICYgRkNfVU5MT0FESU5HKQorCQlyZXR1cm47CisKIAluZGxwLT5ycG9ydCA9IHJwb3J0ID0gZmNfcmVtb3RlX3BvcnRfYWRkKHNob3N0LCAwLCAmcnBvcnRfaWRzKTsKIAlpZiAoIXJwb3J0IHx8ICFnZXRfZGV2aWNlKCZycG9ydC0+ZGV2KSkgewogCQlkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnBoYmEtPnBjaWRldi0+ZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19odzQuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHc0LmgKaW5kZXggODQzM2FjMC4uNGRmZjY2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19odzQuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3NC5oCkBAIC0xMDU5LDYgKzEwNTksMTEgQEAKICNkZWZpbmUgbHBmY19ycV9jb250ZXh0X3JxZV9zaXplX1NISUZUCTgJCS8qIFZlcnNpb24gMSBPbmx5ICovCiAjZGVmaW5lIGxwZmNfcnFfY29udGV4dF9ycWVfc2l6ZV9NQVNLCTB4MDAwMDAwMEYKICNkZWZpbmUgbHBmY19ycV9jb250ZXh0X3JxZV9zaXplX1dPUkQJd29yZDAKKyNkZWZpbmUgTFBGQ19SUUVfU0laRV84CQkyCisjZGVmaW5lIExQRkNfUlFFX1NJWkVfMTYJMworI2RlZmluZSBMUEZDX1JRRV9TSVpFXzMyCTQKKyNkZWZpbmUgTFBGQ19SUUVfU0laRV82NAk1CisjZGVmaW5lIExQRkNfUlFFX1NJWkVfMTI4CTYKICNkZWZpbmUgbHBmY19ycV9jb250ZXh0X3BhZ2Vfc2l6ZV9TSElGVAkwCQkvKiBWZXJzaW9uIDEgT25seSAqLwogI2RlZmluZSBscGZjX3JxX2NvbnRleHRfcGFnZV9zaXplX01BU0sJMHgwMDAwMDBGRgogI2RlZmluZSBscGZjX3JxX2NvbnRleHRfcGFnZV9zaXplX1dPUkQJd29yZDAKQEAgLTIxMDgsNiArMjExMyw4IEBACiAjZGVmaW5lIHNnbF9wcF9hbGlnbl9XT1JECQkJd29yZDEyCiAJdWludDMyX3QgcnN2ZF8xM182M1s1MV07CiB9OworI2RlZmluZSBTTEk0X1BBR0VfQUxJR04oYWRkcikgKCgoYWRkcikrKChTTEk0X1BBR0VfU0laRSktMSkpIFwKKwkJCSAgICAgICAmKH4oKFNMSTRfUEFHRV9TSVpFKS0xKSkpCiAKIHN0cnVjdCBscGZjX3NsaTRfcGFyYW1ldGVycyB7CiAJdWludDMyX3Qgd29yZDA7CkBAIC0yNDkxLDYgKzI0OTgsOSBAQAogI2RlZmluZSB3cWVfcmVxdGFnX1NISUZUICAgICAgMAogI2RlZmluZSB3cWVfcmVxdGFnX01BU0sgICAgICAgMHgwMDAwRkZGRgogI2RlZmluZSB3cWVfcmVxdGFnX1dPUkQgICAgICAgd29yZDkKKyNkZWZpbmUgd3FlX3RlbXBfcnBpX1NISUZUICAgIDE2CisjZGVmaW5lIHdxZV90ZW1wX3JwaV9NQVNLICAgICAweDAwMDBGRkZGCisjZGVmaW5lIHdxZV90ZW1wX3JwaV9XT1JEICAgICB3b3JkOQogI2RlZmluZSB3cWVfcmN2b3hpZF9TSElGVCAgICAgMTYKICNkZWZpbmUgd3FlX3Jjdm94aWRfTUFTSyAgICAgIDB4MDAwMEZGRkYKICNkZWZpbmUgd3FlX3Jjdm94aWRfV09SRCAgICAgIHdvcmQ5CkBAIC0yNTI0LDcgKzI1MzQsNyBAQAogI2RlZmluZSB3cWVfd3Flc19XT1JEICAgICAgICAgd29yZDEwCiAvKiBOb3RlIHRoYXQgdGhpcyBmaWVsZCBvdmVybGFwcyBhYm92ZSBmaWVsZHMgKi8KICNkZWZpbmUgd3FlX3dxaWRfU0hJRlQgICAgICAgIDEKLSNkZWZpbmUgd3FlX3dxaWRfTUFTSyAgICAgICAgIDB4MDAwMDAwN2YKKyNkZWZpbmUgd3FlX3dxaWRfTUFTSyAgICAgICAgIDB4MDAwMDdmZmYKICNkZWZpbmUgd3FlX3dxaWRfV09SRCAgICAgICAgIHdvcmQxMAogI2RlZmluZSB3cWVfcHJpX1NISUZUICAgICAgICAgMTYKICNkZWZpbmUgd3FlX3ByaV9NQVNLICAgICAgICAgIDB4MDAwMDAwMDcKQEAgLTI2MjEsNyArMjYzMSwxMSBAQAogCXVpbnQzMl90IHJzdmQ0OwogCXN0cnVjdCB3cWVfZGlkIHdxZV9kZXN0OwogCXN0cnVjdCB3cWVfY29tbW9uIHdxZV9jb207IC8qIHdvcmRzIDYtMTEgKi8KLQl1aW50MzJfdCByc3ZkXzEyXzE1WzRdOworCXVpbnQzMl90IHdvcmQxMjsKKyNkZWZpbmUgd3FlX3JzcF90ZW1wX3JwaV9TSElGVCAgICAwCisjZGVmaW5lIHdxZV9yc3BfdGVtcF9ycGlfTUFTSyAgICAgMHgwMDAwRkZGRgorI2RlZmluZSB3cWVfcnNwX3RlbXBfcnBpX1dPUkQgICAgIHdvcmQxMgorCXVpbnQzMl90IHJzdmRfMTNfMTVbM107CiB9OwogCiBzdHJ1Y3QgeG1pdF9ibHNfcnNwNjRfd3FlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKaW5kZXggNTA1Zjg4NC4uN2RkYTAzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKQEAgLTMyMDksOSArMzIwOSw5IEBACiAJcGhiYS0+c2xpNF9oYmEubGlua19zdGF0ZS5sb2dpY2FsX3NwZWVkID0KIAkJCWJmX2dldChscGZjX2FjcWVfbG9naWNhbF9saW5rX3NwZWVkLCBhY3FlX2xpbmspOwogCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19TTEksCi0JCQkiMjkwMCBBc3luYyBGQ29FIExpbmsgZXZlbnQgLSBTcGVlZDolZEdCaXQgZHVwbGV4OngleCAiCi0JCQkiTEEgVHlwZTp4JXggUG9ydCBUeXBlOiVkIFBvcnQgTnVtYmVyOiVkIExvZ2ljYWwgIgotCQkJInNwZWVkOiVkTWJwcyBGYXVsdDolZFxuIiwKKwkJCSIyOTAwIEFzeW5jIEZDL0ZDb0UgTGluayBldmVudCAtIFNwZWVkOiVkR0JpdCAiCisJCQkiZHVwbGV4OngleCBMQSBUeXBlOngleCBQb3J0IFR5cGU6JWQgUG9ydCBOdW1iZXI6JWQgIgorCQkJIkxvZ2ljYWwgc3BlZWQ6JWRNYnBzIEZhdWx0OiVkXG4iLAogCQkJcGhiYS0+c2xpNF9oYmEubGlua19zdGF0ZS5zcGVlZCwKIAkJCXBoYmEtPnNsaTRfaGJhLmxpbmtfc3RhdGUudG9wb2xvZ3ksCiAJCQlwaGJhLT5zbGk0X2hiYS5saW5rX3N0YXRlLnN0YXR1cywKQEAgLTQ5MDYsNiArNDkwNiw3IEBACiAJdWludDE2X3QgcnBpX2xpbWl0LCBjdXJyX3JwaV9yYW5nZTsKIAlzdHJ1Y3QgbHBmY19kbWFidWYgKmRtYWJ1ZjsKIAlzdHJ1Y3QgbHBmY19ycGlfaGRyICpycGlfaGRyOworCXVpbnQzMl90IHJwaV9jb3VudDsKIAogCXJwaV9saW1pdCA9IHBoYmEtPnNsaTRfaGJhLm1heF9jZmdfcGFyYW0ucnBpX2Jhc2UgKwogCQkgICAgcGhiYS0+c2xpNF9oYmEubWF4X2NmZ19wYXJhbS5tYXhfcnBpIC0gMTsKQEAgLTQ5MjAsNyArNDkyMSw5IEBACiAJICogYW5kIHRvIGFsbG93IHRoZSBmdWxsIG1heF9ycGkgcmFuZ2UgcGVyIHBvcnQuCiAJICovCiAJaWYgKChjdXJyX3JwaV9yYW5nZSArIChMUEZDX1JQSV9IRFJfQ09VTlQgLSAxKSkgPiBycGlfbGltaXQpCi0JCXJldHVybiBOVUxMOworCQlycGlfY291bnQgPSBycGlfbGltaXQgLSBjdXJyX3JwaV9yYW5nZTsKKwllbHNlCisJCXJwaV9jb3VudCA9IExQRkNfUlBJX0hEUl9DT1VOVDsKIAogCS8qCiAJICogRmlyc3QgYWxsb2NhdGUgdGhlIHByb3RvY29sIGhlYWRlciByZWdpb24gZm9yIHRoZSBwb3J0LiAgVGhlCkBAIC00OTYxLDcgKzQ5NjQsNyBAQAogCSAqIFRoZSBuZXh0X3JwaSBzdG9yZXMgdGhlIG5leHQgbW9kdWxlLTY0IHJwaSB2YWx1ZSB0byBwb3N0CiAJICogaW4gYW55IHN1YnNlcXVlbnQgcnBpIG1lbW9yeSByZWdpb24gcG9zdGluZ3MuCiAJICovCi0JcGhiYS0+c2xpNF9oYmEubmV4dF9ycGkgKz0gTFBGQ19SUElfSERSX0NPVU5UOworCXBoYmEtPnNsaTRfaGJhLm5leHRfcnBpICs9IHJwaV9jb3VudDsKIAlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCXJldHVybiBycGlfaGRyOwogCkBAIC03MDA0LDcgKzcwMDcsOCBAQAogCQlscGZjX3NsaTRfYmFyMF9yZWdpc3Rlcl9tZW1tYXAocGhiYSwgaWZfdHlwZSk7CiAJfQogCi0JaWYgKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKSkgeworCWlmICgoaWZfdHlwZSA9PSBMUEZDX1NMSV9JTlRGX0lGX1RZUEVfMCkgJiYKKwkgICAgKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKSkpIHsKIAkJLyoKIAkJICogTWFwIFNMSTQgaWYgdHlwZSAwIEhCQSBDb250cm9sIFJlZ2lzdGVyIGJhc2UgdG8gYSBrZXJuZWwKIAkJICogdmlydHVhbCBhZGRyZXNzIGFuZCBzZXR1cCB0aGUgcmVnaXN0ZXJzLgpAQCAtNzAyMSw3ICs3MDI1LDggQEAKIAkJbHBmY19zbGk0X2JhcjFfcmVnaXN0ZXJfbWVtbWFwKHBoYmEpOwogCX0KIAotCWlmIChwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgNCkpIHsKKwlpZiAoKGlmX3R5cGUgPT0gTFBGQ19TTElfSU5URl9JRl9UWVBFXzApICYmCisJICAgIChwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgNCkpKSB7CiAJCS8qCiAJCSAqIE1hcCBTTEk0IGlmIHR5cGUgMCBIQkEgRG9vcmJlbGwgUmVnaXN0ZXIgYmFzZSB0byBhIGtlcm5lbAogCQkgKiB2aXJ0dWFsIGFkZHJlc3MgYW5kIHNldHVwIHRoZSByZWdpc3RlcnMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21ib3guYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWJveC5jCmluZGV4IGZiYWI5NzMuLmU2Y2U5MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWJveC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWJveC5jCkBAIC0xNzM2LDcgKzE3MzYsNyBAQAogCX0KIAogCS8qIFNldHVwIGZvciB0aGUgbm9uZS1lbWJlZGRlZCBtYm94IGNvbW1hbmQgKi8KLQlwY291bnQgPSAoUEFHRV9BTElHTihsZW5ndGgpKS9TTEk0X1BBR0VfU0laRTsKKwlwY291bnQgPSAoU0xJNF9QQUdFX0FMSUdOKGxlbmd0aCkpL1NMSTRfUEFHRV9TSVpFOwogCXBjb3VudCA9IChwY291bnQgPiBMUEZDX1NMSTRfTUJYX1NHRV9NQVhfUEFHRVMpID8KIAkJCQlMUEZDX1NMSTRfTUJYX1NHRV9NQVhfUEFHRVMgOiBwY291bnQ7CiAJLyogQWxsb2NhdGUgcmVjb3JkIGZvciBrZWVwaW5nIFNHRSB2aXJ0dWFsIGFkZHJlc3NlcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYwppbmRleCBmZTdjYzg0Li44NGU0NDgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYwpAQCAtMzIzOCw5ICszMjM4LDggQEAKIAlpZiAoIWxwZmNfY21kKSB7CiAJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fV0FSTklORywgTE9HX0ZDUCwKIAkJCSAiMjg3MyBTQ1NJIExheWVyIEkvTyBBYm9ydCBSZXF1ZXN0IElPIENNUEwgU3RhdHVzICIKLQkJCSAieCV4IElEICVkICIKLQkJCSAiTFVOICVkIHNudW0gJSNseFxuIiwgcmV0LCBjbW5kLT5kZXZpY2UtPmlkLAotCQkJIGNtbmQtPmRldmljZS0+bHVuLCBjbW5kLT5zZXJpYWxfbnVtYmVyKTsKKwkJCSAieCV4IElEICVkIExVTiAlZFxuIiwKKwkJCSByZXQsIGNtbmQtPmRldmljZS0+aWQsIGNtbmQtPmRldmljZS0+bHVuKTsKIAkJcmV0dXJuIFNVQ0NFU1M7CiAJfQogCkBAIC0zMzE4LDE2ICszMzE3LDE1IEBACiAJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fRVJSLCBMT0dfRkNQLAogCQkJCSAiMDc0OCBhYm9ydCBoYW5kbGVyIHRpbWVkIG91dCB3YWl0aW5nICIKIAkJCQkgImZvciBhYm9ydCB0byBjb21wbGV0ZTogcmV0ICUjeCwgSUQgJWQsICIKLQkJCQkgIkxVTiAlZCwgc251bSAlI2x4XG4iLAotCQkJCSByZXQsIGNtbmQtPmRldmljZS0+aWQsIGNtbmQtPmRldmljZS0+bHVuLAotCQkJCSBjbW5kLT5zZXJpYWxfbnVtYmVyKTsKKwkJCQkgIkxVTiAlZFxuIiwKKwkJCQkgcmV0LCBjbW5kLT5kZXZpY2UtPmlkLCBjbW5kLT5kZXZpY2UtPmx1bik7CiAJfQogCiAgb3V0OgogCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fV0FSTklORywgTE9HX0ZDUCwKIAkJCSAiMDc0OSBTQ1NJIExheWVyIEkvTyBBYm9ydCBSZXF1ZXN0IFN0YXR1cyB4JXggSUQgJWQgIgotCQkJICJMVU4gJWQgc251bSAlI2x4XG4iLCByZXQsIGNtbmQtPmRldmljZS0+aWQsCi0JCQkgY21uZC0+ZGV2aWNlLT5sdW4sIGNtbmQtPnNlcmlhbF9udW1iZXIpOworCQkJICJMVU4gJWRcbiIsIHJldCwgY21uZC0+ZGV2aWNlLT5pZCwKKwkJCSBjbW5kLT5kZXZpY2UtPmx1bik7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMKaW5kZXggZGFjYWJiZS4uODM3ZDI3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jCkBAIC00NzY5LDggKzQ3NjksNyBAQAogCWVsc2UKIAkJcGhiYS0+aGJhX2ZsYWcgJj0gfkhCQV9GSVBfU1VQUE9SVDsKIAotCWlmIChwaGJhLT5zbGlfcmV2ICE9IExQRkNfU0xJX1JFVjQgfHwKLQkgICAgIShwaGJhLT5oYmFfZmxhZyAmIEhCQV9GQ09FX01PREUpKSB7CisJaWYgKHBoYmEtPnNsaV9yZXYgIT0gTFBGQ19TTElfUkVWNCkgewogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19NQk9YIHwgTE9HX1NMSSwKIAkJCSIwMzc2IFJFQURfUkVWIEVycm9yLiBTTEkgTGV2ZWwgJWQgIgogCQkJIkZDb0UgZW5hYmxlZCAlZFxuIiwKQEAgLTUwMTgsMTAgKzUwMTcsMTEgQEAKIAkJbHBmY19yZWdfZmNmaShwaGJhLCBtYm94cSk7CiAJCW1ib3hxLT52cG9ydCA9IHBoYmEtPnBwb3J0OwogCQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgbWJveHEsIE1CWF9QT0xMKTsKLQkJaWYgKHJjID09IE1CWF9TVUNDRVNTKQotCQkJcmMgPSAwOwotCQllbHNlCisJCWlmIChyYyAhPSBNQlhfU1VDQ0VTUykKIAkJCWdvdG8gb3V0X3Vuc2V0X3F1ZXVlOworCQlyYyA9IDA7CisJCXBoYmEtPmZjZi5mY2ZpID0gYmZfZ2V0KGxwZmNfcmVnX2ZjZmlfZmNmaSwKKwkJCQkJJm1ib3hxLT51Lm1xZS51bi5yZWdfZmNmaSk7CiAJfQogCS8qCiAJICogVGhlIHBvcnQgaXMgcmVhZHksIHNldCB0aGUgaG9zdCdzIGxpbmsgc3RhdGUgdG8gTElOS19ET1dOCkBAIC02NDAyLDYgKzY0MDIsNyBAQAogCXVpbnQzMl90IGVsc19pZCA9IExQRkNfRUxTX0lEX0RFRkFVTFQ7CiAJaW50IG51bUJkZXMsIGk7CiAJc3RydWN0IHVscF9iZGU2NCBiZGU7CisJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHA7CiAKIAlmaXAgPSBwaGJhLT5oYmFfZmxhZyAmIEhCQV9GSVBfU1VQUE9SVDsKIAkvKiBUaGUgZmNwIGNvbW1hbmRzIHdpbGwgc2V0IGNvbW1hbmQgdHlwZSAqLwpAQCAtNjQ0Nyw2ICs2NDQ4LDcgQEAKIAogCXN3aXRjaCAoaW9jYnEtPmlvY2IudWxwQ29tbWFuZCkgewogCWNhc2UgQ01EX0VMU19SRVFVRVNUNjRfQ1I6CisJCW5kbHAgPSAoc3RydWN0IGxwZmNfbm9kZWxpc3QgKilpb2NicS0+Y29udGV4dDE7CiAJCWlmICghaW9jYnEtPmlvY2IudWxwTGUpIHsKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX1NMSSwKIAkJCQkiMjAwNyBPbmx5IExpbWl0ZWQgRWRpdGlvbiBjbWQgRm9ybWF0IgpAQCAtNjQ3Miw2ICs2NDc0LDcgQEAKIAkJCWVsc19pZCA9ICgoaW9jYnEtPmlvY2JfZmxhZyAmIExQRkNfRklQX0VMU19JRF9NQVNLKQogCQkJCQk+PiBMUEZDX0ZJUF9FTFNfSURfU0hJRlQpOwogCQl9CisJCWJmX3NldCh3cWVfdGVtcF9ycGksICZ3cWUtPmVsc19yZXEud3FlX2NvbSwgbmRscC0+bmxwX3JwaSk7CiAJCWJmX3NldCh3cWVfZWxzX2lkLCAmd3FlLT5lbHNfcmVxLndxZV9jb20sIGVsc19pZCk7CiAJCWJmX3NldCh3cWVfZGJkZSwgJndxZS0+ZWxzX3JlcS53cWVfY29tLCAxKTsKIAkJYmZfc2V0KHdxZV9pb2QsICZ3cWUtPmVsc19yZXEud3FlX2NvbSwgTFBGQ19XUUVfSU9EX1JFQUQpOwpAQCAtNjYwNCw2ICs2NjA3LDcgQEAKIAkJY29tbWFuZF90eXBlID0gT1RIRVJfQ09NTUFORDsKIAlicmVhazsKIAljYXNlIENNRF9YTUlUX0VMU19SU1A2NF9DWDoKKwkJbmRscCA9IChzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKWlvY2JxLT5jb250ZXh0MTsKIAkJLyogd29yZHMwLTIgQkRFIG1lbWNweSAqLwogCQkvKiB3b3JkMyBpb2NiPWlvdGFnMzIgd3FlPXJlc3BvbnNlX3BheWxvYWRfbGVuICovCiAJCXdxZS0+eG1pdF9lbHNfcnNwLnJlc3BvbnNlX3BheWxvYWRfbGVuID0geG1pdF9sZW47CkBAIC02NjI2LDYgKzY2MzAsNyBAQAogCQliZl9zZXQod3FlX2xlbmxvYywgJndxZS0+eG1pdF9lbHNfcnNwLndxZV9jb20sCiAJCSAgICAgICBMUEZDX1dRRV9MRU5MT0NfV09SRDMpOwogCQliZl9zZXQod3FlX2ViZGVfY250LCAmd3FlLT54bWl0X2Vsc19yc3Aud3FlX2NvbSwgMCk7CisJCWJmX3NldCh3cWVfcnNwX3RlbXBfcnBpLCAmd3FlLT54bWl0X2Vsc19yc3AsIG5kbHAtPm5scF9ycGkpOwogCQljb21tYW5kX3R5cGUgPSBPVEhFUl9DT01NQU5EOwogCWJyZWFrOwogCWNhc2UgQ01EX0NMT1NFX1hSSV9DTjoKQEAgLTEwNTIyLDggKzEwNTI3LDggQEAKIAliZl9zZXQobHBmY19tYm94X2hkcl92ZXJzaW9uLCAmc2hkci0+cmVxdWVzdCwKIAkgICAgICAgcGhiYS0+c2xpNF9oYmEucGNfc2xpNF9wYXJhbXMuY3F2KTsKIAlpZiAocGhiYS0+c2xpNF9oYmEucGNfc2xpNF9wYXJhbXMuY3F2ID09IExQRkNfUV9DUkVBVEVfVkVSU0lPTl8yKSB7Ci0JCWJmX3NldChscGZjX21ieF9jcV9jcmVhdGVfcGFnZV9zaXplLCAmY3FfY3JlYXRlLT51LnJlcXVlc3QsCi0JCSAgICAgICAoUEFHRV9TSVpFL1NMSTRfUEFHRV9TSVpFKSk7CisJCS8qIEZXIG9ubHkgc3VwcG9ydHMgMS4gU2hvdWxkIGJlIFBBR0VfU0laRS9TTEk0X1BBR0VfU0laRSAqLworCQliZl9zZXQobHBmY19tYnhfY3FfY3JlYXRlX3BhZ2Vfc2l6ZSwgJmNxX2NyZWF0ZS0+dS5yZXF1ZXN0LCAxKTsKIAkJYmZfc2V0KGxwZmNfY3FfZXFfaWRfMiwgJmNxX2NyZWF0ZS0+dS5yZXF1ZXN0LmNvbnRleHQsCiAJCSAgICAgICBlcS0+cXVldWVfaWQpOwogCX0gZWxzZSB7CkBAIC0xMDk2Nyw2ICsxMDk3MiwxMiBAQAogCQkgICAgICAgJnJxX2NyZWF0ZS0+dS5yZXF1ZXN0LmNvbnRleHQsCiAJCSAgICAgICBocnEtPmVudHJ5X2NvdW50KTsKIAkJcnFfY3JlYXRlLT51LnJlcXVlc3QuY29udGV4dC5idWZmZXJfc2l6ZSA9IExQRkNfSERSX0JVRl9TSVpFOworCQliZl9zZXQobHBmY19ycV9jb250ZXh0X3JxZV9zaXplLAorCQkgICAgICAgJnJxX2NyZWF0ZS0+dS5yZXF1ZXN0LmNvbnRleHQsCisJCSAgICAgICBMUEZDX1JRRV9TSVpFXzgpOworCQliZl9zZXQobHBmY19ycV9jb250ZXh0X3BhZ2Vfc2l6ZSwKKwkJICAgICAgICZycV9jcmVhdGUtPnUucmVxdWVzdC5jb250ZXh0LAorCQkgICAgICAgKFBBR0VfU0laRS9TTEk0X1BBR0VfU0laRSkpOwogCX0gZWxzZSB7CiAJCXN3aXRjaCAoaHJxLT5lbnRyeV9jb3VudCkgewogCQlkZWZhdWx0OgpAQCAtMTEwNDIsOSArMTEwNTMsMTIgQEAKIAkgICAgICAgcGhiYS0+c2xpNF9oYmEucGNfc2xpNF9wYXJhbXMucnF2KTsKIAlpZiAocGhiYS0+c2xpNF9oYmEucGNfc2xpNF9wYXJhbXMucnF2ID09IExQRkNfUV9DUkVBVEVfVkVSU0lPTl8xKSB7CiAJCWJmX3NldChscGZjX3JxX2NvbnRleHRfcnFlX2NvdW50XzEsCi0JCSAgICAgICAmcnFfY3JlYXRlLT51LnJlcXVlc3QuY29udGV4dCwKLQkJICAgICAgIGhycS0+ZW50cnlfY291bnQpOworCQkgICAgICAgJnJxX2NyZWF0ZS0+dS5yZXF1ZXN0LmNvbnRleHQsIGhycS0+ZW50cnlfY291bnQpOwogCQlycV9jcmVhdGUtPnUucmVxdWVzdC5jb250ZXh0LmJ1ZmZlcl9zaXplID0gTFBGQ19EQVRBX0JVRl9TSVpFOworCQliZl9zZXQobHBmY19ycV9jb250ZXh0X3JxZV9zaXplLCAmcnFfY3JlYXRlLT51LnJlcXVlc3QuY29udGV4dCwKKwkJICAgICAgIExQRkNfUlFFX1NJWkVfOCk7CisJCWJmX3NldChscGZjX3JxX2NvbnRleHRfcGFnZV9zaXplLCAmcnFfY3JlYXRlLT51LnJlcXVlc3QuY29udGV4dCwKKwkJICAgICAgIChQQUdFX1NJWkUvU0xJNF9QQUdFX1NJWkUpKTsKIAl9IGVsc2UgewogCQlzd2l0Y2ggKGRycS0+ZW50cnlfY291bnQpIHsKIAkJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmgKaW5kZXggMjQwNGQxZC4uYzAzOTIxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmgKQEAgLTE4LDcgKzE4LDcgQEAKICAqIGluY2x1ZGVkIHdpdGggdGhpcyBwYWNrYWdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2RlZmluZSBMUEZDX0RSSVZFUl9WRVJTSU9OICI4LjMuMjIiCisjZGVmaW5lIExQRkNfRFJJVkVSX1ZFUlNJT04gIjguMy4yMyIKICNkZWZpbmUgTFBGQ19EUklWRVJfTkFNRQkJImxwZmMiCiAjZGVmaW5lIExQRkNfU1BfRFJJVkVSX0hBTkRMRVJfTkFNRQkibHBmYzpzcCIKICNkZWZpbmUgTFBGQ19GUF9EUklWRVJfSEFORExFUl9OQU1FCSJscGZjOmZwIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYwppbmRleCBmMjY4NGRkLi41YzE3NzY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYworKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYwpAQCAtMTQ2OSw4ICsxNDY5LDggQEAKIAkJCWlmKCBzY2ItPnN0YXRlICYgU0NCX0FCT1JUICkgewogCiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCSJtZWdhcmFpZDogYWJvcnRlZCBjbWQgJWx4WyV4XSBjb21wbGV0ZS5cbiIsCi0JCQkJCXNjYi0+Y21kLT5zZXJpYWxfbnVtYmVyLCBzY2ItPmlkeCk7CisJCQkJIm1lZ2FyYWlkOiBhYm9ydGVkIGNtZCBbJXhdIGNvbXBsZXRlLlxuIiwKKwkJCQkJc2NiLT5pZHgpOwogCiAJCQkJc2NiLT5jbWQtPnJlc3VsdCA9IChESURfQUJPUlQgPDwgMTYpOwogCkBAIC0xNDg4LDggKzE0ODgsOCBAQAogCQkJaWYoIHNjYi0+c3RhdGUgJiBTQ0JfUkVTRVQgKSB7CiAKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJIm1lZ2FyYWlkOiByZXNldCBjbWQgJWx4WyV4XSBjb21wbGV0ZS5cbiIsCi0JCQkJCXNjYi0+Y21kLT5zZXJpYWxfbnVtYmVyLCBzY2ItPmlkeCk7CisJCQkJIm1lZ2FyYWlkOiByZXNldCBjbWQgWyV4XSBjb21wbGV0ZS5cbiIsCisJCQkJCXNjYi0+aWR4KTsKIAogCQkJCXNjYi0+Y21kLT5yZXN1bHQgPSAoRElEX1JFU0VUIDw8IDE2KTsKIApAQCAtMTk1OCw4ICsxOTU4LDggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCSpwb3MsICpuZXh0OwogCXNjYl90CQkJKnNjYjsKIAotCXByaW50ayhLRVJOX1dBUk5JTkcgIm1lZ2FyYWlkOiAlcy0lbHggY21kPSV4IDxjPSVkIHQ9JWQgbD0lZD5cbiIsCi0JICAgICAoYW9yID09IFNDQl9BQk9SVCk/ICJBQk9SVElORyI6IlJFU0VUIiwgY21kLT5zZXJpYWxfbnVtYmVyLAorCXByaW50ayhLRVJOX1dBUk5JTkcgIm1lZ2FyYWlkOiAlcyBjbWQ9JXggPGM9JWQgdD0lZCBsPSVkPlxuIiwKKwkgICAgIChhb3IgPT0gU0NCX0FCT1JUKT8gIkFCT1JUSU5HIjoiUkVTRVQiLAogCSAgICAgY21kLT5jbW5kWzBdLCBjbWQtPmRldmljZS0+Y2hhbm5lbCwgCiAJICAgICBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOwogCkBAIC0xOTgzLDkgKzE5ODMsOSBAQAogCQkJaWYoIHNjYi0+c3RhdGUgJiBTQ0JfSVNTVUVEICkgewogCiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCQkibWVnYXJhaWQ6ICVzLSVseFsleF0sIGZ3IG93bmVyLlxuIiwKKwkJCQkJIm1lZ2FyYWlkOiAlc1sleF0sIGZ3IG93bmVyLlxuIiwKIAkJCQkJKGFvcj09U0NCX0FCT1JUKSA/ICJBQk9SVElORyI6IlJFU0VUIiwKLQkJCQkJY21kLT5zZXJpYWxfbnVtYmVyLCBzY2ItPmlkeCk7CisJCQkJCXNjYi0+aWR4KTsKIAogCQkJCXJldHVybiBGQUxTRTsKIAkJCX0KQEAgLTE5OTYsOSArMTk5Niw5IEBACiAJCQkJICogbGlzdAogCQkJCSAqLwogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCQkJIm1lZ2FyYWlkOiAlcy0lbHhbJXhdLCBkcml2ZXIgb3duZXIuXG4iLAorCQkJCQkibWVnYXJhaWQ6ICVzLVsleF0sIGRyaXZlciBvd25lci5cbiIsCiAJCQkJCShhb3I9PVNDQl9BQk9SVCkgPyAiQUJPUlRJTkciOiJSRVNFVCIsCi0JCQkJCWNtZC0+c2VyaWFsX251bWJlciwgc2NiLT5pZHgpOworCQkJCQlzY2ItPmlkeCk7CiAKIAkJCQltZWdhX2ZyZWVfc2NiKGFkYXB0ZXIsIHNjYik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbWJveC5jCmluZGV4IDFkYmEzMjguLjJlNjYxOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21ib3guYwpAQCAtMjMxNSw4ICsyMzE1LDggQEAKIAkJLy8gV2FzIGFuIGFib3J0IGlzc3VlZCBmb3IgdGhpcyBjb21tYW5kIGVhcmxpZXIKIAkJaWYgKHNjYi0+c3RhdGUgJiBTQ0JfQUJPUlQpIHsKIAkJCWNvbl9sb2coQ0xfQU5OLCAoS0VSTl9OT1RJQ0UKLQkJCSJtZWdhcmFpZDogYWJvcnRlZCBjbWQgJWx4WyV4XSBjb21wbGV0ZWRcbiIsCi0JCQkJc2NwLT5zZXJpYWxfbnVtYmVyLCBzY2ItPnNubykpOworCQkJIm1lZ2FyYWlkOiBhYm9ydGVkIGNtZCBbJXhdIGNvbXBsZXRlZFxuIiwKKwkJCQlzY2ItPnNubykpOwogCQl9CiAKIAkJLyoKQEAgLTI0NzIsOCArMjQ3Miw4IEBACiAJcmFpZF9kZXYJPSBBREFQMlJBSURERVYoYWRhcHRlcik7CiAKIAljb25fbG9nKENMX0FOTiwgKEtFUk5fV0FSTklORwotCQkibWVnYXJhaWQ6IGFib3J0aW5nLSVsZCBjbWQ9JXggPGM9JWQgdD0lZCBsPSVkPlxuIiwKLQkJc2NwLT5zZXJpYWxfbnVtYmVyLCBzY3AtPmNtbmRbMF0sIFNDUDJDSEFOTkVMKHNjcCksCisJCSJtZWdhcmFpZDogYWJvcnRpbmcgY21kPSV4IDxjPSVkIHQ9JWQgbD0lZD5cbiIsCisJCXNjcC0+Y21uZFswXSwgU0NQMkNIQU5ORUwoc2NwKSwKIAkJU0NQMlRBUkdFVChzY3ApLCBTQ1AyTFVOKHNjcCkpKTsKIAogCS8vIElmIEZXIGhhcyBzdG9wcGVkIHJlc3BvbmRpbmcsIHNpbXBseSByZXR1cm4gZmFpbHVyZQpAQCAtMjQ5Niw5ICsyNDk2LDggQEAKIAkJCWxpc3RfZGVsX2luaXQoJnNjYi0+bGlzdCk7CS8vIGZyb20gY29tcGxldGVkIGxpc3QKIAogCQkJY29uX2xvZyhDTF9BTk4sIChLRVJOX1dBUk5JTkcKLQkJCSJtZWdhcmFpZDogJWxkOiVkWyVkOiVkXSwgYWJvcnQgZnJvbSBjb21wbGV0ZWQgbGlzdFxuIiwKLQkJCQlzY3AtPnNlcmlhbF9udW1iZXIsIHNjYi0+c25vLAotCQkJCXNjYi0+ZGV2X2NoYW5uZWwsIHNjYi0+ZGV2X3RhcmdldCkpOworCQkJIm1lZ2FyYWlkOiAlZFslZDolZF0sIGFib3J0IGZyb20gY29tcGxldGVkIGxpc3RcbiIsCisJCQkJc2NiLT5zbm8sIHNjYi0+ZGV2X2NoYW5uZWwsIHNjYi0+ZGV2X3RhcmdldCkpOwogCiAJCQlzY3AtPnJlc3VsdCA9IChESURfQUJPUlQgPDwgMTYpOwogCQkJc2NwLT5zY3NpX2RvbmUoc2NwKTsKQEAgLTI1MjcsOSArMjUyNiw4IEBACiAJCQlBU1NFUlQoIShzY2ItPnN0YXRlICYgU0NCX0lTU1VFRCkpOwogCiAJCQljb25fbG9nKENMX0FOTiwgKEtFUk5fV0FSTklORwotCQkJCSJtZWdhcmFpZCBhYm9ydDogJWxkWyVkOiVkXSwgZHJpdmVyIG93bmVyXG4iLAotCQkJCXNjcC0+c2VyaWFsX251bWJlciwgc2NiLT5kZXZfY2hhbm5lbCwKLQkJCQlzY2ItPmRldl90YXJnZXQpKTsKKwkJCQkibWVnYXJhaWQgYWJvcnQ6IFslZDolZF0sIGRyaXZlciBvd25lclxuIiwKKwkJCQlzY2ItPmRldl9jaGFubmVsLCBzY2ItPmRldl90YXJnZXQpKTsKIAogCQkJc2NwLT5yZXN1bHQgPSAoRElEX0FCT1JUIDw8IDE2KTsKIAkJCXNjcC0+c2NzaV9kb25lKHNjcCk7CkBAIC0yNTYwLDI1ICsyNTU4LDIxIEBACiAKIAkJCWlmICghKHNjYi0+c3RhdGUgJiBTQ0JfSVNTVUVEKSkgewogCQkJCWNvbl9sb2coQ0xfQU5OLCAoS0VSTl9XQVJOSU5HCi0JCQkJIm1lZ2FyYWlkIGFib3J0OiAlbGQlZFslZDolZF0sIGludmFsaWQgc3RhdGVcbiIsCi0JCQkJc2NwLT5zZXJpYWxfbnVtYmVyLCBzY2ItPnNubywgc2NiLT5kZXZfY2hhbm5lbCwKLQkJCQlzY2ItPmRldl90YXJnZXQpKTsKKwkJCQkibWVnYXJhaWQgYWJvcnQ6ICVkWyVkOiVkXSwgaW52YWxpZCBzdGF0ZVxuIiwKKwkJCQlzY2ItPnNubywgc2NiLT5kZXZfY2hhbm5lbCwgc2NiLT5kZXZfdGFyZ2V0KSk7CiAJCQkJQlVHKCk7CiAJCQl9CiAJCQllbHNlIHsKIAkJCQljb25fbG9nKENMX0FOTiwgKEtFUk5fV0FSTklORwotCQkJCSJtZWdhcmFpZCBhYm9ydDogJWxkOiVkWyVkOiVkXSwgZncgb3duZXJcbiIsCi0JCQkJc2NwLT5zZXJpYWxfbnVtYmVyLCBzY2ItPnNubywgc2NiLT5kZXZfY2hhbm5lbCwKLQkJCQlzY2ItPmRldl90YXJnZXQpKTsKKwkJCQkibWVnYXJhaWQgYWJvcnQ6ICVkWyVkOiVkXSwgZncgb3duZXJcbiIsCisJCQkJc2NiLT5zbm8sIHNjYi0+ZGV2X2NoYW5uZWwsIHNjYi0+ZGV2X3RhcmdldCkpOwogCQkJfQogCQl9CiAJfQogCXNwaW5fdW5sb2NrX2lycSgmYWRhcHRlci0+bG9jayk7CiAKIAlpZiAoIWZvdW5kKSB7Ci0JCWNvbl9sb2coQ0xfQU5OLCAoS0VSTl9XQVJOSU5HCi0JCQkibWVnYXJhaWQgYWJvcnQ6IHNjc2kgY21kOiVsZCwgZG8gbm93IG93blxuIiwKLQkJCXNjcC0+c2VyaWFsX251bWJlcikpOworCQljb25fbG9nKENMX0FOTiwgKEtFUk5fV0FSTklORyAibWVnYXJhaWQgYWJvcnQ6IGRvIG5vdyBvd25cbiIpKTsKIAogCQkvLyBGSVhNRTogU2hvdWxkIHRoZXJlIGJlIGEgY2FsbGJhY2sgZm9yIHRoaXMgY29tbWFuZD8KIAkJcmV0dXJuIFNVQ0NFU1M7CkBAIC0yNjQ5LDkgKzI2NDMsOCBAQAogCQl9IGVsc2UgewogCQkJaWYgKHNjYi0+c2NwID09IHNjcCkgewkvLyBGb3VuZCBjb21tYW5kCiAJCQkJY29uX2xvZyhDTF9BTk4sIChLRVJOX1dBUk5JTkcKLQkJCQkJIm1lZ2FyYWlkOiAlbGQ6JWRbJWQ6JWRdLCByZXNldCBmcm9tIHBlbmRpbmcgbGlzdFxuIiwKLQkJCQkJc2NwLT5zZXJpYWxfbnVtYmVyLCBzY2ItPnNubywKLQkJCQkJc2NiLT5kZXZfY2hhbm5lbCwgc2NiLT5kZXZfdGFyZ2V0KSk7CisJCQkJCSJtZWdhcmFpZDogJWRbJWQ6JWRdLCByZXNldCBmcm9tIHBlbmRpbmcgbGlzdFxuIiwKKwkJCQkJc2NiLT5zbm8sIHNjYi0+ZGV2X2NoYW5uZWwsIHNjYi0+ZGV2X3RhcmdldCkpOwogCQkJfSBlbHNlIHsKIAkJCQljb25fbG9nKENMX0FOTiwgKEtFUk5fV0FSTklORwogCQkJCSJtZWdhcmFpZDogSU8gcGFja2V0IHdpdGggJWRbJWQ6JWRdIGJlaW5nIHJlc2V0XG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19iYXNlLmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Jhc2UuYwppbmRleCA2NmQ0Y2VhLi44OWM2MjNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Jhc2UuYworKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Jhc2UuYwpAQCAtMTc1MSwxMCArMTc1MSw5IEBACiAJCQlsaXN0X2RlbF9pbml0KCZyZXNldF9jbWQtPmxpc3QpOwogCQkJaWYgKHJlc2V0X2NtZC0+c2NtZCkgewogCQkJCXJlc2V0X2NtZC0+c2NtZC0+cmVzdWx0ID0gRElEX1JFU0VUIDw8IDE2OwotCQkJCXByaW50ayhLRVJOX05PVElDRSAiJWQ6JXAgcmVzZXQgWyUwMnhdLCAlI2x4XG4iLAorCQkJCXByaW50ayhLRVJOX05PVElDRSAiJWQ6JXAgcmVzZXQgWyUwMnhdXG4iLAogCQkJCQlyZXNldF9pbmRleCwgcmVzZXRfY21kLAotCQkJCQlyZXNldF9jbWQtPnNjbWQtPmNtbmRbMF0sCi0JCQkJCXJlc2V0X2NtZC0+c2NtZC0+c2VyaWFsX251bWJlcik7CisJCQkJCXJlc2V0X2NtZC0+c2NtZC0+Y21uZFswXSk7CiAKIAkJCQlyZXNldF9jbWQtPnNjbWQtPnNjc2lfZG9uZShyZXNldF9jbWQtPnNjbWQpOwogCQkJCW1lZ2FzYXNfcmV0dXJuX2NtZChpbnN0YW5jZSwgcmVzZXRfY21kKTsKQEAgLTE4NzksOCArMTg3OCw4IEBACiAKIAlpbnN0YW5jZSA9IChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqKXNjbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7CiAKLQlzY21kX3ByaW50ayhLRVJOX05PVElDRSwgc2NtZCwgIm1lZ2FzYXM6IFJFU0VUIC0lbGQgY21kPSV4IHJldHJpZXM9JXhcbiIsCi0JCSBzY21kLT5zZXJpYWxfbnVtYmVyLCBzY21kLT5jbW5kWzBdLCBzY21kLT5yZXRyaWVzKTsKKwlzY21kX3ByaW50ayhLRVJOX05PVElDRSwgc2NtZCwgIm1lZ2FzYXM6IFJFU0VUIGNtZD0leCByZXRyaWVzPSV4XG4iLAorCQkgc2NtZC0+Y21uZFswXSwgc2NtZC0+cmV0cmllcyk7CiAKIAlpZiAoaW5zdGFuY2UtPmFkcHJlY292ZXJ5ID09IE1FR0FTQVNfSFdfQ1JJVElDQUxfRVJST1IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzOiBjYW5ub3QgcmVjb3ZlciBmcm9tIHByZXZpb3VzIHJlc2V0ICIKQEAgLTIzNDksOSArMjM0OCw5IEBACiAJCQkJCQkJY21kLT5mcmFtZV9waHlzX2FkZHIgLAogCQkJCQkJCTAsIGluc3RhbmNlLT5yZWdfc2V0KTsKIAkJfSBlbHNlIGlmIChjbWQtPnNjbWQpIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAibWVnYXNhczogJXAgc2NzaSBjbWQgWyUwMnhdLCUjbHgiCisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIm1lZ2FzYXM6ICVwIHNjc2kgY21kIFslMDJ4XSIKIAkJCSJkZXRlY3RlZCBvbiB0aGUgaW50ZXJuYWwgcXVldWUsIGlzc3VlIGFnYWluLlxuIiwKLQkJCWNtZCwgY21kLT5zY21kLT5jbW5kWzBdLCBjbWQtPnNjbWQtPnNlcmlhbF9udW1iZXIpOworCQkJY21kLCBjbWQtPnNjbWQtPmNtbmRbMF0pOwogCiAJCQlhdG9taWNfaW5jKCZpbnN0YW5jZS0+Zndfb3V0c3RhbmRpbmcpOwogCQkJaW5zdGFuY2UtPmluc3RhbmNldC0+ZmlyZV9jbWQoaW5zdGFuY2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVzaC5jIGIvZHJpdmVycy9zY3NpL21lc2guYwppbmRleCAxOTdhYTFiLi40OTQ0NzQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVzaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tZXNoLmMKQEAgLTQxNSw4ICs0MTUsNyBAQAogI2lmIDEKIAlpZiAoREVCVUdfVEFSR0VUKGNtZCkpIHsKIAkJaW50IGk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJtZXNoX3N0YXJ0OiAlcCBzZXI9JWx1IHRndD0lZCBjbWQ9IiwKLQkJICAgICAgIGNtZCwgY21kLT5zZXJpYWxfbnVtYmVyLCBpZCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJtZXNoX3N0YXJ0OiAlcCB0Z3Q9JWQgY21kPSIsIGNtZCwgaWQpOwogCQlmb3IgKGkgPSAwOyBpIDwgY21kLT5jbWRfbGVuOyArK2kpCiAJCQlwcmludGsoIiAleCIsIGNtZC0+Y21uZFtpXSk7CiAJCXByaW50aygiIHVzZV9zZz0lZCBidWZmZXI9JXAgYnVmZmxlbj0ldVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMKaW5kZXggMzM0NjM1Ny4uZWZhMDI1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMKQEAgLTUyMiw3ICs1MjIsOCBAQAogCQlkZXNjID0gIkRldmljZSBTdGF0dXMgQ2hhbmdlIjsKIAkJYnJlYWs7CiAJY2FzZSBNUEkyX0VWRU5UX0lSX09QRVJBVElPTl9TVEFUVVM6Ci0JCWRlc2MgPSAiSVIgT3BlcmF0aW9uIFN0YXR1cyI7CisJCWlmICghaW9jLT5oaWRlX2lyX21zZykKKwkJCWRlc2MgPSAiSVIgT3BlcmF0aW9uIFN0YXR1cyI7CiAJCWJyZWFrOwogCWNhc2UgTVBJMl9FVkVOVF9TQVNfRElTQ09WRVJZOgogCXsKQEAgLTU1MywxNiArNTU0LDIwIEBACiAJCWRlc2MgPSAiU0FTIEVuY2xvc3VyZSBEZXZpY2UgU3RhdHVzIENoYW5nZSI7CiAJCWJyZWFrOwogCWNhc2UgTVBJMl9FVkVOVF9JUl9WT0xVTUU6Ci0JCWRlc2MgPSAiSVIgVm9sdW1lIjsKKwkJaWYgKCFpb2MtPmhpZGVfaXJfbXNnKQorCQkJZGVzYyA9ICJJUiBWb2x1bWUiOwogCQlicmVhazsKIAljYXNlIE1QSTJfRVZFTlRfSVJfUEhZU0lDQUxfRElTSzoKLQkJZGVzYyA9ICJJUiBQaHlzaWNhbCBEaXNrIjsKKwkJaWYgKCFpb2MtPmhpZGVfaXJfbXNnKQorCQkJZGVzYyA9ICJJUiBQaHlzaWNhbCBEaXNrIjsKIAkJYnJlYWs7CiAJY2FzZSBNUEkyX0VWRU5UX0lSX0NPTkZJR1VSQVRJT05fQ0hBTkdFX0xJU1Q6Ci0JCWRlc2MgPSAiSVIgQ29uZmlndXJhdGlvbiBDaGFuZ2UgTGlzdCI7CisJCWlmICghaW9jLT5oaWRlX2lyX21zZykKKwkJCWRlc2MgPSAiSVIgQ29uZmlndXJhdGlvbiBDaGFuZ2UgTGlzdCI7CiAJCWJyZWFrOwogCWNhc2UgTVBJMl9FVkVOVF9MT0dfRU5UUllfQURERUQ6Ci0JCWRlc2MgPSAiTG9nIEVudHJ5IEFkZGVkIjsKKwkJaWYgKCFpb2MtPmhpZGVfaXJfbXNnKQorCQkJZGVzYyA9ICJMb2cgRW50cnkgQWRkZWQiOwogCQlicmVhazsKIAl9CiAKQEAgLTYxNiw3ICs2MjEsMTAgQEAKIAkJb3JpZ2luYXRvcl9zdHIgPSAiUEwiOwogCQlicmVhazsKIAljYXNlIDI6Ci0JCW9yaWdpbmF0b3Jfc3RyID0gIklSIjsKKwkJaWYgKCFpb2MtPmhpZGVfaXJfbXNnKQorCQkJb3JpZ2luYXRvcl9zdHIgPSAiSVIiOworCQllbHNlCisJCQlvcmlnaW5hdG9yX3N0ciA9ICJXYXJwRHJpdmUiOwogCQlicmVhazsKIAl9CiAKQEAgLTE1MDgsNiArMTUxNiw3IEBACiAJCX0KIAkJaW9jLT5zY3NpX2xvb2t1cFtpXS5jYl9pZHggPSAweEZGOwogCQlpb2MtPnNjc2lfbG9va3VwW2ldLnNjbWQgPSBOVUxMOworCQlpb2MtPnNjc2lfbG9va3VwW2ldLmRpcmVjdF9pbyA9IDA7CiAJCWxpc3RfYWRkX3RhaWwoJmlvYy0+c2NzaV9sb29rdXBbaV0udHJhY2tlcl9saXN0LAogCQkgICAgJmlvYy0+ZnJlZV9saXN0KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CkBAIC0xODQ0LDEwICsxODUzLDEyIEBACiAJcHJpbnRrKCIpLCAiKTsKIAlwcmludGsoIkNhcGFiaWxpdGllcz0oIik7CiAKLQlpZiAoaW9jLT5mYWN0cy5JT0NDYXBhYmlsaXRpZXMgJgotCSAgICBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfSU5URUdSQVRFRF9SQUlEKSB7Ci0JCXByaW50aygiUmFpZCIpOwotCQlpKys7CisJaWYgKCFpb2MtPmhpZGVfaXJfbXNnKSB7CisJCWlmIChpb2MtPmZhY3RzLklPQ0NhcGFiaWxpdGllcyAmCisJCSAgICBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfSU5URUdSQVRFRF9SQUlEKSB7CisJCQlwcmludGsoIlJhaWQiKTsKKwkJCWkrKzsKKwkJfQogCX0KIAogCWlmIChpb2MtPmZhY3RzLklPQ0NhcGFiaWxpdGllcyAmIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9UTFIpIHsKQEAgLTM2ODAsNiArMzY5MSw3IEBACiAJdTMyIHJlcGx5X2FkZHJlc3M7CiAJdTE2IHNtaWQ7CiAJc3RydWN0IF90cl9saXN0ICpkZWxheWVkX3RyLCAqZGVsYXllZF90cl9uZXh0OworCXU4IGhpZGVfZmxhZzsKIAogCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzXG4iLCBpb2MtPm5hbWUsCiAJICAgIF9fZnVuY19fKSk7CkBAIC0zNzA2LDYgKzM3MTgsNyBAQAogCQlpb2MtPnNjc2lfbG9va3VwW2ldLmNiX2lkeCA9IDB4RkY7CiAJCWlvYy0+c2NzaV9sb29rdXBbaV0uc21pZCA9IHNtaWQ7CiAJCWlvYy0+c2NzaV9sb29rdXBbaV0uc2NtZCA9IE5VTEw7CisJCWlvYy0+c2NzaV9sb29rdXBbaV0uZGlyZWN0X2lvID0gMDsKIAkJbGlzdF9hZGRfdGFpbCgmaW9jLT5zY3NpX2xvb2t1cFtpXS50cmFja2VyX2xpc3QsCiAJCSAgICAmaW9jLT5mcmVlX2xpc3QpOwogCX0KQEAgLTM3NjYsNiArMzc3OSwxNSBAQAogCWlmIChzbGVlcF9mbGFnID09IENBTl9TTEVFUCkKIAkJX2Jhc2Vfc3RhdGljX2NvbmZpZ19wYWdlcyhpb2MpOwogCisJaWYgKGlvYy0+d2FpdF9mb3JfcG9ydF9lbmFibGVfdG9fY29tcGxldGUgJiYgaW9jLT5pc193YXJwZHJpdmUpIHsKKwkJaWYgKGlvYy0+bWFudV9wZzEwLk9FTUlkZW50aWZpZXIgID09IDB4ODApIHsKKwkJCWhpZGVfZmxhZyA9ICh1OCkgKGlvYy0+bWFudV9wZzEwLk9FTVNwZWNpZmljRmxhZ3MwICYKKwkJCSAgICBNRkdfUEFHRTEwX0hJREVfU1NEU19NQVNLKTsKKwkJCWlmIChoaWRlX2ZsYWcgIT0gTUZHX1BBR0UxMF9ISURFX1NTRFNfTUFTSykKKwkJCQlpb2MtPm1mZ19wZzEwX2hpZGVfZmxhZyA9IGhpZGVfZmxhZzsKKwkJfQorCX0KKwogCWlmIChpb2MtPndhaXRfZm9yX3BvcnRfZW5hYmxlX3RvX2NvbXBsZXRlKSB7CiAJCWlmIChkaWFnX2J1ZmZlcl9lbmFibGUgIT0gMCkKIAkJCW1wdDJzYXNfZW5hYmxlX2RpYWdfYnVmZmVyKGlvYywgZGlhZ19idWZmZXJfZW5hYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmgKaW5kZXggNTAwMzI4Mi4uMmEzYzA1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmgKQEAgLTY5LDExICs2OSwxMSBAQAogI2RlZmluZSBNUFQyU0FTX0RSSVZFUl9OQU1FCQkibXB0MnNhcyIKICNkZWZpbmUgTVBUMlNBU19BVVRIT1IJIkxTSSBDb3Jwb3JhdGlvbiA8REwtTVBURnVzaW9uTGludXhAbHNpLmNvbT4iCiAjZGVmaW5lIE1QVDJTQVNfREVTQ1JJUFRJT04JIkxTSSBNUFQgRnVzaW9uIFNBUyAyLjAgRGV2aWNlIERyaXZlciIKLSNkZWZpbmUgTVBUMlNBU19EUklWRVJfVkVSU0lPTgkJIjA4LjEwMC4wMC4wMCIKKyNkZWZpbmUgTVBUMlNBU19EUklWRVJfVkVSU0lPTgkJIjA4LjEwMC4wMC4wMSIKICNkZWZpbmUgTVBUMlNBU19NQUpPUl9WRVJTSU9OCQkwOAogI2RlZmluZSBNUFQyU0FTX01JTk9SX1ZFUlNJT04JCTEwMAogI2RlZmluZSBNUFQyU0FTX0JVSUxEX1ZFUlNJT04JCTAwCi0jZGVmaW5lIE1QVDJTQVNfUkVMRUFTRV9WRVJTSU9OCQkwMAorI2RlZmluZSBNUFQyU0FTX1JFTEVBU0VfVkVSU0lPTgkJMDEKIAogLyoKICAqIFNldCBNUFQyU0FTX1NHX0RFUFRIIHZhbHVlIGJhc2VkIG9uIHVzZXIgaW5wdXQuCkBAIC0xODksNiArMTg5LDE2IEBACiAjZGVmaW5lIE1QVDJTQVNfSFBfREFVR0hURVJfMl80X0lOVEVSTkFMX1NTRElEICAgICAgICAweDAwNDYKIAogLyoKKyAqICBXYXJwRHJpdmUgU3BlY2lmaWMgTG9nIGNvZGVzCisgKi8KKworI2RlZmluZSBNUFQyX1dBUlBEUklWRV9MT0dFTlRSWQkJKDB4ODAwMikKKyNkZWZpbmUgTVBUMl9XQVJQRFJJVkVfTENfU1NEVAkJKDB4NDEpCisjZGVmaW5lIE1QVDJfV0FSUERSSVZFX0xDX1NTRExXCQkoMHg0MykKKyNkZWZpbmUgTVBUMl9XQVJQRFJJVkVfTENfU1NETEYJCSgweDQ0KQorI2RlZmluZSBNUFQyX1dBUlBEUklWRV9MQ19CUk1GCQkoMHg0RCkKKworLyoKICAqIHBlciB0YXJnZXQgcHJpdmF0ZSBkYXRhCiAgKi8KICNkZWZpbmUgTVBUX1RBUkdFVF9GTEFHU19SQUlEX0NPTVBPTkVOVAkweDAxCkBAIC0xOTksNiArMjA5LDcgQEAKICAqIHN0cnVjdCBNUFQyU0FTX1RBUkdFVCAtIHN0YXJnZXQgcHJpdmF0ZSBob3N0ZGF0YQogICogQHN0YXJnZXQ6IHN0YXJnZXQgb2JqZWN0CiAgKiBAc2FzX2FkZHJlc3M6IHRhcmdldCBzYXMgYWRkcmVzcworICogQHJhaWRfZGV2aWNlOiByYWlkX2RldmljZSBwb2ludGVyIHRvIGFjY2VzcyB2b2x1bWUgZGF0YQogICogQGhhbmRsZTogZGV2aWNlIGhhbmRsZQogICogQG51bV9sdW5zOiBudW1iZXIgbHVucwogICogQGZsYWdzOiBNUFRfVEFSR0VUX0ZMQUdTX1hYWCBmbGFncwpAQCAtMjA4LDYgKzIxOSw3IEBACiBzdHJ1Y3QgTVBUMlNBU19UQVJHRVQgewogCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldDsKIAl1NjQJc2FzX2FkZHJlc3M7CisJc3RydWN0IF9yYWlkX2RldmljZSAqcmFpZF9kZXZpY2U7CiAJdTE2CWhhbmRsZTsKIAlpbnQJbnVtX2x1bnM7CiAJdTMyCWZsYWdzOwpAQCAtMjE1LDYgKzIyNyw3IEBACiAJdTgJdG1fYnVzeTsKIH07CiAKKwogLyoKICAqIHBlciBkZXZpY2UgcHJpdmF0ZSBkYXRhCiAgKi8KQEAgLTI2Miw2ICsyNzUsMTIgQEAKICAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX01BTl8xMCwKICAgTXBpMk1hbnVmYWN0dXJpbmdQYWdlMTBfdCwgTVBJMl9QT0lOVEVSIHBNcGkyTWFudWZhY3R1cmluZ1BhZ2UxMF90OwogCisjZGVmaW5lIE1GR19QQUdFMTBfSElERV9TU0RTX01BU0sJKDB4MDAwMDAwMDMpCisjZGVmaW5lIE1GR19QQUdFMTBfSElERV9BTExfRElTS1MJKDB4MDApCisjZGVmaW5lIE1GR19QQUdFMTBfRVhQT1NFX0FMTF9ESVNLUwkoMHgwMSkKKyNkZWZpbmUgTUZHX1BBR0UxMF9ISURFX0lGX1ZPTF9QUkVTRU5UCSgweDAyKQorCisKIHN0cnVjdCBNUFQyU0FTX0RFVklDRSB7CiAJc3RydWN0IE1QVDJTQVNfVEFSR0VUICpzYXNfdGFyZ2V0OwogCXVuc2lnbmVkIGludAlsdW47CkBAIC0zNDEsNiArMzYwLDcgQEAKICAqIEBzZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QgKHZvbHVtZXMgYXJlIHNpbmdsZSBsdW4pCiAgKiBAd3dpZDogdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSB2b2x1bWUKICAqIEBoYW5kbGU6IGRldmljZSBoYW5kbGUKKyAqIEBibG9ja19zaXplOiBCbG9jayBzaXplIG9mIHRoZSB2b2x1bWUKICAqIEBpZDogdGFyZ2V0IGlkCiAgKiBAY2hhbm5lbDogdGFyZ2V0IGNoYW5uZWwKICAqIEB2b2x1bWVfdHlwZTogdGhlIHJhaWQgbGV2ZWwKQEAgLTM0OCwyMCArMzY4LDMzIEBACiAgKiBAbnVtX3BkczogbnVtYmVyIG9mIGhpZGRlbiByYWlkIGNvbXBvbmVudHMKICAqIEByZXNwb25kaW5nOiB1c2VkIGluIF9zY3NpaF9yYWlkX2RldmljZV9tYXJrX3Jlc3BvbmRpbmcKICAqIEBwZXJjZW50X2NvbXBsZXRlOiByZXN5bmMgcGVyY2VudCBjb21wbGV0ZQorICogQGRpcmVjdF9pb19lbmFibGVkOiBXaGV0aGVyIGRpcmVjdCBpbyB0byBQRHMgYXJlIGFsbG93ZWQgb3Igbm90CisgKiBAc3RyaXBlX2V4cG9uZW50OiBYIHdoZXJlIDJwb3dYIGlzIHRoZSBzdHJpcGUgc3ogaW4gYmxvY2tzCisgKiBAbWF4X2xiYTogTWF4aW11bSBudW1iZXIgb2YgTEJBIGluIHRoZSB2b2x1bWUKKyAqIEBzdHJpcGVfc3o6IFN0cmlwZSBTaXplIG9mIHRoZSB2b2x1bWUKKyAqIEBkZXZpY2VfaW5mbzogRGV2aWNlIGluZm8gb2YgdGhlIHZvbHVtZSBtZW1iZXIgZGlzaworICogQHBkX2hhbmRsZTogQXJyYXkgb2YgaGFuZGxlcyBvZiB0aGUgcGh5c2ljYWwgZHJpdmVzIGZvciBkaXJlY3QgSS9PIGluIGxlMTYKICAqLworI2RlZmluZSBNUFRfTUFYX1dBUlBEUklWRV9QRFMJCTgKIHN0cnVjdCBfcmFpZF9kZXZpY2UgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQ7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2OwogCXU2NAl3d2lkOwogCXUxNgloYW5kbGU7CisJdTE2CWJsb2NrX3N6OwogCWludAlpZDsKIAlpbnQJY2hhbm5lbDsKIAl1OAl2b2x1bWVfdHlwZTsKLQl1MzIJZGV2aWNlX2luZm87CiAJdTgJbnVtX3BkczsKIAl1OAlyZXNwb25kaW5nOwogCXU4CXBlcmNlbnRfY29tcGxldGU7CisJdTgJZGlyZWN0X2lvX2VuYWJsZWQ7CisJdTgJc3RyaXBlX2V4cG9uZW50OworCXU2NAltYXhfbGJhOworCXUzMglzdHJpcGVfc3o7CisJdTMyCWRldmljZV9pbmZvOworCXUxNglwZF9oYW5kbGVbTVBUX01BWF9XQVJQRFJJVkVfUERTXTsKIH07CiAKIC8qKgpAQCAtNDcwLDYgKzUwMyw3IEBACiAgKiBAc21pZDogc3lzdGVtIG1lc3NhZ2UgaWQKICAqIEBzY21kOiBzY3NpIHJlcXVlc3QgcG9pbnRlcgogICogQGNiX2lkeDogY2FsbGJhY2sgaW5kZXgKKyAqIEBkaXJlY3RfaW86IFRvIGluZGljYXRlIHdoZXRoZXIgSS9PIGlzIGRpcmVjdCAoV0FSUERSSVZFKQogICogQGNoYWluX2xpc3Q6IGxpc3Qgb2YgY2hhaW5zIGFzc29jaWF0ZWQgdG8gdGhpcyBJTwogICogQHRyYWNrZXJfbGlzdDogbGlzdCBvZiBmcmVlIHJlcXVlc3QgKGlvYy0+ZnJlZV9saXN0KQogICovCkBAIC00NzcsMTQgKzUxMSwxNCBAQAogCXUxNglzbWlkOwogCXN0cnVjdCBzY3NpX2NtbmQgKnNjbWQ7CiAJdTgJY2JfaWR4OworCXU4CWRpcmVjdF9pbzsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNoYWluX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCB0cmFja2VyX2xpc3Q7CiB9OwogCiAvKioKLSAqIHN0cnVjdCByZXF1ZXN0X3RyYWNrZXIgLSBtaXNjIG1mIHJlcXVlc3QgdHJhY2tlcgorICogc3RydWN0IHJlcXVlc3RfdHJhY2tlciAtIGZpcm13YXJlIHJlcXVlc3QgdHJhY2tlcgogICogQHNtaWQ6IHN5c3RlbSBtZXNzYWdlIGlkCi0gKiBAc2NtZDogc2NzaSByZXF1ZXN0IHBvaW50ZXIKICAqIEBjYl9pZHg6IGNhbGxiYWNrIGluZGV4CiAgKiBAdHJhY2tlcl9saXN0OiBsaXN0IG9mIGZyZWUgcmVxdWVzdCAoaW9jLT5mcmVlX2xpc3QpCiAgKi8KQEAgLTgzMiw2ICs4NjYsMTEgQEAKIAl1MzIJCWRpYWdub3N0aWNfZmxhZ3NbTVBJMl9ESUFHX0JVRl9UWVBFX0NPVU5UXTsKIAl1MzIJCXJpbmdfYnVmZmVyX29mZnNldDsKIAl1MzIJCXJpbmdfYnVmZmVyX3N6OworCXU4CQlpc193YXJwZHJpdmU7CisJdTgJCWhpZGVfaXJfbXNnOworCXU4CQltZmdfcGcxMF9oaWRlX2ZsYWc7CisJdTgJCWhpZGVfZHJpdmVzOworCiB9OwogCiB0eXBlZGVmIHU4ICgqTVBUX0NBTExCQUNLKShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBtc2l4X2luZGV4LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMKaW5kZXggMWM2ZDJiNC4uNDM3YzJkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jCkBAIC02ODgsNiArNjg4LDEzIEBACiAJCWdvdG8gb3V0OwogCX0KIAorCS8qIENoZWNrIGZvciBvdmVyZmxvdyBhbmQgd3JhcGFyb3VuZCAqLworCWlmIChrYXJnLmRhdGFfc2dlX29mZnNldCAqIDQgPiBpb2MtPnJlcXVlc3Rfc3ogfHwKKwkgICAga2FyZy5kYXRhX3NnZV9vZmZzZXQgPiAoVUlOVF9NQVggLyA0KSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKIAkvKiBjb3B5IGluIHJlcXVlc3QgbWVzc2FnZSBmcmFtZSBmcm9tIHVzZXIgKi8KIAlpZiAoY29weV9mcm9tX3VzZXIobXBpX3JlcXVlc3QsIG1mLCBrYXJnLmRhdGFfc2dlX29mZnNldCo0KSkgewogCQlwcmludGsoS0VSTl9FUlIgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsIF9fRklMRV9fLCBfX0xJTkVfXywKQEAgLTEwMzQsNyArMTA0MSwxMCBAQAogCSAgICBfX2Z1bmNfXykpOwogCiAJbWVtc2V0KCZrYXJnLCAwICwgc2l6ZW9mKGthcmcpKTsKLQlrYXJnLmFkYXB0ZXJfdHlwZSA9IE1QVDJfSU9DVExfSU5URVJGQUNFX1NBUzI7CisJaWYgKGlvYy0+aXNfd2FycGRyaXZlKQorCQlrYXJnLmFkYXB0ZXJfdHlwZSA9IE1QVDJfSU9DVExfSU5URVJGQUNFX1NBUzJfU1NTNjIwMDsKKwllbHNlCisJCWthcmcuYWRhcHRlcl90eXBlID0gTVBUMl9JT0NUTF9JTlRFUkZBQ0VfU0FTMjsKIAlpZiAoaW9jLT5wZmFjdHMpCiAJCWthcmcucG9ydF9udW1iZXIgPSBpb2MtPnBmYWN0c1swXS5Qb3J0TnVtYmVyOwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGlvYy0+cGRldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmcmV2aXNpb24pOwpAQCAtMTk2Myw3ICsxOTczLDcgQEAKIAlNcGkyRGlhZ0J1ZmZlclBvc3RSZXBseV90ICptcGlfcmVwbHk7CiAJaW50IHJjLCBpOwogCXU4IGJ1ZmZlcl90eXBlOwotCXVuc2lnbmVkIGxvbmcgdGltZWxlZnQ7CisJdW5zaWduZWQgbG9uZyB0aW1lbGVmdCwgcmVxdWVzdF9zaXplLCBjb3B5X3NpemU7CiAJdTE2IHNtaWQ7CiAJdTE2IGlvY19zdGF0dXM7CiAJdTggaXNzdWVfcmVzZXQgPSAwOwpAQCAtMTk5OSw2ICsyMDA5LDggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJcmVxdWVzdF9zaXplID0gaW9jLT5kaWFnX2J1ZmZlcl9zeltidWZmZXJfdHlwZV07CisKIAlpZiAoKGthcmcuc3RhcnRpbmdfb2Zmc2V0ICUgNCkgfHwgKGthcmcuYnl0ZXNfdG9fcmVhZCAlIDQpKSB7CiAJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBlaXRoZXIgdGhlIHN0YXJ0aW5nX29mZnNldCAiCiAJCSAgICAib3IgYnl0ZXNfdG9fcmVhZCBhcmUgbm90IDQgYnl0ZSBhbGlnbmVkXG4iLCBpb2MtPm5hbWUsCkBAIC0yMDA2LDEzICsyMDE4LDIzIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWlmIChrYXJnLnN0YXJ0aW5nX29mZnNldCA+IHJlcXVlc3Rfc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlkaWFnX2RhdGEgPSAodm9pZCAqKShyZXF1ZXN0X2RhdGEgKyBrYXJnLnN0YXJ0aW5nX29mZnNldCk7CiAJZGN0bHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogZGlhZ19idWZmZXIoJXApLCAiCiAJICAgICJvZmZzZXQoJWQpLCBzeiglZClcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18sCiAJICAgIGRpYWdfZGF0YSwga2FyZy5zdGFydGluZ19vZmZzZXQsIGthcmcuYnl0ZXNfdG9fcmVhZCkpOwogCisJLyogVHJ1bmNhdGUgZGF0YSBvbiByZXF1ZXN0cyB0aGF0IGFyZSB0b28gbGFyZ2UgKi8KKwlpZiAoKGRpYWdfZGF0YSArIGthcmcuYnl0ZXNfdG9fcmVhZCA8IGRpYWdfZGF0YSkgfHwKKwkgICAgKGRpYWdfZGF0YSArIGthcmcuYnl0ZXNfdG9fcmVhZCA+IHJlcXVlc3RfZGF0YSArIHJlcXVlc3Rfc2l6ZSkpCisJCWNvcHlfc2l6ZSA9IHJlcXVlc3Rfc2l6ZSAtIGthcmcuc3RhcnRpbmdfb2Zmc2V0OworCWVsc2UKKwkJY29weV9zaXplID0ga2FyZy5ieXRlc190b19yZWFkOworCiAJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKil1YXJnLT5kaWFnbm9zdGljX2RhdGEsCi0JICAgIGRpYWdfZGF0YSwga2FyZy5ieXRlc190b19yZWFkKSkgeworCSAgICBkaWFnX2RhdGEsIGNvcHlfc2l6ZSkpIHsKIAkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IFVuYWJsZSB0byB3cml0ZSAiCiAJCSAgICAibXB0X2RpYWdfcmVhZF9idWZmZXJfdCBkYXRhIEAgJXBcbiIsIGlvYy0+bmFtZSwKIAkJICAgIF9fZnVuY19fLCBkaWFnX2RhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmgKaW5kZXggNjk5MTZlNC4uMTFmZjFkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5oCkBAIC0xMzMsNiArMTMzLDcgQEAKICNkZWZpbmUgTVBUMl9JT0NUTF9JTlRFUkZBQ0VfRkNfSVAJKDB4MDIpCiAjZGVmaW5lIE1QVDJfSU9DVExfSU5URVJGQUNFX1NBUwkoMHgwMykKICNkZWZpbmUgTVBUMl9JT0NUTF9JTlRFUkZBQ0VfU0FTMgkoMHgwNCkKKyNkZWZpbmUgTVBUMl9JT0NUTF9JTlRFUkZBQ0VfU0FTMl9TU1M2MjAwCSgweDA1KQogI2RlZmluZSBNUFQyX0lPQ1RMX1ZFUlNJT05fTEVOR1RICSgzMikKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKaW5kZXggZDIwNjRhMC4uZjEyZTAyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYwpAQCAtMjMzLDYgKzIzMyw5IEBACiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKIAl7IE1QSTJfTUZHUEFHRV9WRU5ET1JJRF9MU0ksIE1QSTJfTUZHUEFHRV9ERVZJRF9TQVMyMzA4XzMsCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKKwkvKiBTU1M2MjAwICovCisJeyBNUEkyX01GR1BBR0VfVkVORE9SSURfTFNJLCBNUEkyX01GR1BBR0VfREVWSURfU1NTNjIwMCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAogCXswfQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzY3NpaF9wY2lfdGFibGUpOwpAQCAtMTI1Niw2ICsxMjU5LDcgQEAKIAkJCXNhc190YXJnZXRfcHJpdl9kYXRhLT5oYW5kbGUgPSByYWlkX2RldmljZS0+aGFuZGxlOwogCQkJc2FzX3RhcmdldF9wcml2X2RhdGEtPnNhc19hZGRyZXNzID0gcmFpZF9kZXZpY2UtPnd3aWQ7CiAJCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+ZmxhZ3MgfD0gTVBUX1RBUkdFVF9GTEFHU19WT0xVTUU7CisJCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+cmFpZF9kZXZpY2UgPSByYWlkX2RldmljZTsKIAkJCXJhaWRfZGV2aWNlLT5zdGFyZ2V0ID0gc3RhcmdldDsKIAkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnJhaWRfZGV2aWNlX2xvY2ssIGZsYWdzKTsKQEAgLTE0NTUsNyArMTQ1OSwxMCBAQAogX3Njc2loX2lzX3JhaWQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CisJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gc2hvc3RfcHJpdihzZGV2LT5ob3N0KTsKIAorCWlmIChpb2MtPmlzX3dhcnBkcml2ZSkKKwkJcmV0dXJuIDA7CiAJcmV0dXJuIChzZGV2LT5jaGFubmVsID09IFJBSURfQ0hBTk5FTCkgPyAxIDogMDsKIH0KIApAQCAtMTQ4MCw3ICsxNDg3LDcgQEAKIAkgICAgc2Rldi0+Y2hhbm5lbCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5yYWlkX2RldmljZV9sb2NrLCBmbGFncyk7CiAKLQlpZiAoIXJhaWRfZGV2aWNlKQorCWlmICghcmFpZF9kZXZpY2UgfHwgaW9jLT5pc193YXJwZHJpdmUpCiAJCWdvdG8gb3V0OwogCiAJaWYgKG1wdDJzYXNfY29uZmlnX2dldF9yYWlkX3ZvbHVtZV9wZzAoaW9jLCAmbXBpX3JlcGx5LCAmdm9sX3BnMCwKQEAgLTE2NDAsNiArMTY0NywyMTIgQEAKIAogCWtmcmVlKHZvbF9wZzApOwogfQorLyoqCisgKiBfc2NzaWhfZGlzYWJsZV9kZGlvIC0gRGlzYWJsZSBkaXJlY3QgSS9PIGZvciBhbGwgdGhlIHZvbHVtZXMKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICovCitzdGF0aWMgdm9pZAorX3Njc2loX2Rpc2FibGVfZGRpbyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCit7CisJTXBpMlJhaWRWb2xQYWdlMV90IHZvbF9wZzE7CisJTXBpMkNvbmZpZ1JlcGx5X3QgbXBpX3JlcGx5OworCXN0cnVjdCBfcmFpZF9kZXZpY2UgKnJhaWRfZGV2aWNlOworCXUxNiBoYW5kbGU7CisJdTE2IGlvY19zdGF0dXM7CisKKwloYW5kbGUgPSAweEZGRkY7CisJd2hpbGUgKCEobXB0MnNhc19jb25maWdfZ2V0X3JhaWRfdm9sdW1lX3BnMShpb2MsICZtcGlfcmVwbHksCisJICAgICZ2b2xfcGcxLCBNUEkyX1JBSURfVk9MVU1FX1BHQURfRk9STV9HRVRfTkVYVF9IQU5ETEUsIGhhbmRsZSkpKSB7CisJCWlvY19zdGF0dXMgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuSU9DU3RhdHVzKSAmCisJCSAgICBNUEkyX0lPQ1NUQVRVU19NQVNLOworCQlpZiAoaW9jX3N0YXR1cyA9PSBNUEkyX0lPQ1NUQVRVU19DT05GSUdfSU5WQUxJRF9QQUdFKQorCQkJYnJlYWs7CisJCWhhbmRsZSA9IGxlMTZfdG9fY3B1KHZvbF9wZzEuRGV2SGFuZGxlKTsKKwkJcmFpZF9kZXZpY2UgPSBfc2NzaWhfcmFpZF9kZXZpY2VfZmluZF9ieV9oYW5kbGUoaW9jLCBoYW5kbGUpOworCQlpZiAocmFpZF9kZXZpY2UpCisJCQlyYWlkX2RldmljZS0+ZGlyZWN0X2lvX2VuYWJsZWQgPSAwOworCX0KKwlyZXR1cm47Cit9CisKKworLyoqCisgKiBfc2NzaWhfZ2V0X251bV92b2x1bWVzIC0gR2V0IG51bWJlciBvZiB2b2x1bWVzIGluIHRoZSBpb2MKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICovCitzdGF0aWMgdTgKK19zY3NpaF9nZXRfbnVtX3ZvbHVtZXMoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jKQoreworCU1waTJSYWlkVm9sUGFnZTFfdCB2b2xfcGcxOworCU1waTJDb25maWdSZXBseV90IG1waV9yZXBseTsKKwl1MTYgaGFuZGxlOworCXU4IHZvbF9jbnQgPSAwOworCXUxNiBpb2Nfc3RhdHVzOworCisJaGFuZGxlID0gMHhGRkZGOworCXdoaWxlICghKG1wdDJzYXNfY29uZmlnX2dldF9yYWlkX3ZvbHVtZV9wZzEoaW9jLCAmbXBpX3JlcGx5LAorCSAgICAmdm9sX3BnMSwgTVBJMl9SQUlEX1ZPTFVNRV9QR0FEX0ZPUk1fR0VUX05FWFRfSEFORExFLCBoYW5kbGUpKSkgeworCQlpb2Nfc3RhdHVzID0gbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cykgJgorCQkgICAgTVBJMl9JT0NTVEFUVVNfTUFTSzsKKwkJaWYgKGlvY19zdGF0dXMgPT0gTVBJMl9JT0NTVEFUVVNfQ09ORklHX0lOVkFMSURfUEFHRSkKKwkJCWJyZWFrOworCQl2b2xfY250Kys7CisJCWhhbmRsZSA9IGxlMTZfdG9fY3B1KHZvbF9wZzEuRGV2SGFuZGxlKTsKKwl9CisJcmV0dXJuIHZvbF9jbnQ7Cit9CisKKworLyoqCisgKiBfc2NzaWhfaW5pdF93YXJwZHJpdmVfcHJvcGVydGllcyAtIFNldCBwcm9wZXJ0aWVzIGZvciB3YXJwZHJpdmUgZGlyZWN0IEkvTy4KKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHJhaWRfZGV2aWNlOiB0aGUgcmFpZF9kZXZpY2Ugb2JqZWN0CisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfaW5pdF93YXJwZHJpdmVfcHJvcGVydGllcyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisJc3RydWN0IF9yYWlkX2RldmljZSAqcmFpZF9kZXZpY2UpCit7CisJTXBpMlJhaWRWb2xQYWdlMF90ICp2b2xfcGcwOworCU1waTJSYWlkUGh5c0Rpc2tQYWdlMF90IHBkX3BnMDsKKwlNcGkyQ29uZmlnUmVwbHlfdCBtcGlfcmVwbHk7CisJdTE2IHN6OworCXU4IG51bV9wZHMsIGNvdW50OworCXU2NCBtYiA9IDEwMjQgKiAxMDI0OworCXU2NCB0Yl8yID0gMiAqIG1iICogbWI7CisJdTY0IGNhcGFjaXR5OworCXUzMiBzdHJpcGVfc3o7CisJdTggaSwgc3RyaXBlX2V4cDsKKworCWlmICghaW9jLT5pc193YXJwZHJpdmUpCisJCXJldHVybjsKKworCWlmIChpb2MtPm1mZ19wZzEwX2hpZGVfZmxhZyA9PSAgTUZHX1BBR0UxMF9FWFBPU0VfQUxMX0RJU0tTKSB7CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJXYXJwRHJpdmUgOiBEaXJlY3QgSU8gaXMgZGlzYWJsZWQgIgorCQkgICAgImdsb2JhbGx5IGFzIGRyaXZlcyBhcmUgZXhwb3NlZFxuIiwgaW9jLT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoX3Njc2loX2dldF9udW1fdm9sdW1lcyhpb2MpID4gMSkgeworCQlfc2NzaWhfZGlzYWJsZV9kZGlvKGlvYyk7CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJXYXJwRHJpdmUgOiBEaXJlY3QgSU8gaXMgZGlzYWJsZWQgIgorCQkgICAgImdsb2JhbGx5IGFzIG51bWJlciBvZiBkcml2ZXMgPiAxXG4iLCBpb2MtPm5hbWUpOworCQlyZXR1cm47CisJfQorCWlmICgobXB0MnNhc19jb25maWdfZ2V0X251bWJlcl9wZHMoaW9jLCByYWlkX2RldmljZS0+aGFuZGxlLAorCSAgICAmbnVtX3BkcykpIHx8ICFudW1fcGRzKSB7CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJXYXJwRHJpdmUgOiBEaXJlY3QgSU8gaXMgZGlzYWJsZWQgIgorCQkgICAgIkZhaWx1cmUgaW4gY29tcHV0aW5nIG51bWJlciBvZiBkcml2ZXNcbiIsIGlvYy0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlzeiA9IG9mZnNldG9mKE1waTJSYWlkVm9sUGFnZTBfdCwgUGh5c0Rpc2spICsgKG51bV9wZHMgKgorCSAgICBzaXplb2YoTXBpMlJhaWRWb2wwUGh5c0Rpc2tfdCkpOworCXZvbF9wZzAgPSBremFsbG9jKHN6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZvbF9wZzApIHsKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIldhcnBEcml2ZSA6IERpcmVjdCBJTyBpcyBkaXNhYmxlZCAiCisJCSAgICAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBmb3IgUlZQRzBcbiIsIGlvYy0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKG1wdDJzYXNfY29uZmlnX2dldF9yYWlkX3ZvbHVtZV9wZzAoaW9jLCAmbXBpX3JlcGx5LCB2b2xfcGcwLAorCSAgICAgTVBJMl9SQUlEX1ZPTFVNRV9QR0FEX0ZPUk1fSEFORExFLCByYWlkX2RldmljZS0+aGFuZGxlLCBzeikpKSB7CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJXYXJwRHJpdmUgOiBEaXJlY3QgSU8gaXMgZGlzYWJsZWQgIgorCQkgICAgIkZhaWx1cmUgaW4gcmV0cmlldmluZyBSVlBHMFxuIiwgaW9jLT5uYW1lKTsKKwkJa2ZyZWUodm9sX3BnMCk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFdBUlBEUklWRTpJZiBudW1iZXIgb2YgcGh5c2ljYWwgZGlza3MgaW4gYSB2b2x1bWUgZXhjZWVkcyB0aGUgbWF4IHBkcworCSAqIGFzc3VtZWQgZm9yIFdBUlBEUklWRSwgZGlzYWJsZSBkaXJlY3QgSS9PCisJICovCisJaWYgKG51bV9wZHMgPiBNUFRfTUFYX1dBUlBEUklWRV9QRFMpIHsKKwkJcHJpbnRrKE1QVDJTQVNfV0FSTl9GTVQgIldhcnBEcml2ZSA6IERpcmVjdCBJTyBpcyBkaXNhYmxlZCAiCisJCSAgICAiZm9yIHRoZSBkcml2ZSB3aXRoIGhhbmRsZSgweCUwNHgpOiBudW1fbWVtPSVkLCAiCisJCSAgICAibWF4X21lbV9hbGxvd2VkPSVkXG4iLCBpb2MtPm5hbWUsIHJhaWRfZGV2aWNlLT5oYW5kbGUsCisJCSAgICBudW1fcGRzLCBNUFRfTUFYX1dBUlBEUklWRV9QRFMpOworCQlrZnJlZSh2b2xfcGcwKTsKKwkJcmV0dXJuOworCX0KKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBudW1fcGRzOyBjb3VudCsrKSB7CisJCWlmIChtcHQyc2FzX2NvbmZpZ19nZXRfcGh5c19kaXNrX3BnMChpb2MsICZtcGlfcmVwbHksCisJCSAgICAmcGRfcGcwLCBNUEkyX1BIWVNESVNLX1BHQURfRk9STV9QSFlTRElTS05VTSwKKwkJICAgIHZvbF9wZzAtPlBoeXNEaXNrW2NvdW50XS5QaHlzRGlza051bSkgfHwKKwkJICAgIHBkX3BnMC5EZXZIYW5kbGUgPT0gTVBUMlNBU19JTlZBTElEX0RFVklDRV9IQU5ETEUpIHsKKwkJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJXYXJwRHJpdmUgOiBEaXJlY3QgSU8gaXMgIgorCQkJICAgICJkaXNhYmxlZCBmb3IgdGhlIGRyaXZlIHdpdGggaGFuZGxlKDB4JTA0eCkgbWVtYmVyIgorCQkJICAgICJoYW5kbGUgcmV0cmlldmFsIGZhaWxlZCBmb3IgbWVtYmVyIG51bWJlcj0lZFxuIiwKKwkJCSAgICBpb2MtPm5hbWUsIHJhaWRfZGV2aWNlLT5oYW5kbGUsCisJCQkgICAgdm9sX3BnMC0+UGh5c0Rpc2tbY291bnRdLlBoeXNEaXNrTnVtKTsKKwkJCWdvdG8gb3V0X2Vycm9yOworCQl9CisJCXJhaWRfZGV2aWNlLT5wZF9oYW5kbGVbY291bnRdID0gbGUxNl90b19jcHUocGRfcGcwLkRldkhhbmRsZSk7CisJfQorCisJLyoKKwkgKiBBc3N1bXB0aW9uIGZvciBXRDogRGlyZWN0IEkvTyBpcyBub3Qgc3VwcG9ydGVkIGlmIHRoZSB2b2x1bWUgaXMKKwkgKiBub3QgUkFJRDAsIGlmIHRoZSBzdHJpcGUgc2l6ZSBpcyBub3QgNjRLQiwgaWYgdGhlIGJsb2NrIHNpemUgaXMKKwkgKiBub3QgNTEyIGFuZCBpZiB0aGUgdm9sdW1lIHNpemUgaXMgPjJUQgorCSAqLworCWlmIChyYWlkX2RldmljZS0+dm9sdW1lX3R5cGUgIT0gTVBJMl9SQUlEX1ZPTF9UWVBFX1JBSUQwIHx8CisJICAgIGxlMTZfdG9fY3B1KHZvbF9wZzAtPkJsb2NrU2l6ZSkgIT0gNTEyKSB7CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJXYXJwRHJpdmUgOiBEaXJlY3QgSU8gaXMgZGlzYWJsZWQgIgorCQkgICAgImZvciB0aGUgZHJpdmUgd2l0aCBoYW5kbGUoMHglMDR4KTogdHlwZT0lZCwgIgorCQkgICAgInNfc3o9JXVLLCBibGtfc2l6ZT0ldVxuIiwgaW9jLT5uYW1lLAorCQkgICAgcmFpZF9kZXZpY2UtPmhhbmRsZSwgcmFpZF9kZXZpY2UtPnZvbHVtZV90eXBlLAorCQkgICAgbGUzMl90b19jcHUodm9sX3BnMC0+U3RyaXBlU2l6ZSkvMiwKKwkJICAgIGxlMTZfdG9fY3B1KHZvbF9wZzAtPkJsb2NrU2l6ZSkpOworCQlnb3RvIG91dF9lcnJvcjsKKwl9CisKKwljYXBhY2l0eSA9ICh1NjQpIGxlMTZfdG9fY3B1KHZvbF9wZzAtPkJsb2NrU2l6ZSkgKgorCSAgICAobGU2NF90b19jcHUodm9sX3BnMC0+TWF4TEJBKSArIDEpOworCisJaWYgKGNhcGFjaXR5ID4gdGJfMikgeworCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiV2FycERyaXZlIDogRGlyZWN0IElPIGlzIGRpc2FibGVkICIKKwkJImZvciB0aGUgZHJpdmUgd2l0aCBoYW5kbGUoMHglMDR4KSBzaW5jZSBkcml2ZSBzeiA+IDJUQlxuIiwKKwkJaW9jLT5uYW1lLCByYWlkX2RldmljZS0+aGFuZGxlKTsKKwkJZ290byBvdXRfZXJyb3I7CisJfQorCisJc3RyaXBlX3N6ID0gbGUzMl90b19jcHUodm9sX3BnMC0+U3RyaXBlU2l6ZSk7CisJc3RyaXBlX2V4cCA9IDA7CisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJaWYgKHN0cmlwZV9zeiAmIDEpCisJCQlicmVhazsKKwkJc3RyaXBlX2V4cCsrOworCQlzdHJpcGVfc3ogPj49IDE7CisJfQorCWlmIChpID09IDMyKSB7CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJXYXJwRHJpdmUgOiBEaXJlY3QgSU8gaXMgZGlzYWJsZWQgIgorCQkgICAgImZvciB0aGUgZHJpdmUgd2l0aCBoYW5kbGUoMHglMDR4KSBpbnZhbGlkIHN0cmlwZSBzeiAldUtcbiIsCisJCSAgICBpb2MtPm5hbWUsIHJhaWRfZGV2aWNlLT5oYW5kbGUsCisJCSAgICBsZTMyX3RvX2NwdSh2b2xfcGcwLT5TdHJpcGVTaXplKS8yKTsKKwkJZ290byBvdXRfZXJyb3I7CisJfQorCXJhaWRfZGV2aWNlLT5zdHJpcGVfZXhwb25lbnQgPSBzdHJpcGVfZXhwOworCXJhaWRfZGV2aWNlLT5kaXJlY3RfaW9fZW5hYmxlZCA9IDE7CisKKwlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiV2FycERyaXZlIDogRGlyZWN0IElPIGlzIEVuYWJsZWQgZm9yIHRoZSBkcml2ZSIKKwkgICAgIiB3aXRoIGhhbmRsZSgweCUwNHgpXG4iLCBpb2MtPm5hbWUsIHJhaWRfZGV2aWNlLT5oYW5kbGUpOworCS8qCisJICogV0FSUERSSVZFOiBUaG91Z2ggdGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIG5vdCB1c2VkIGZvciBkaXJlY3QgSU8sCisJICogc3RvcmVkIGZvciBmdXR1cmUgcHVycG9zZToKKwkgKi8KKwlyYWlkX2RldmljZS0+bWF4X2xiYSA9IGxlNjRfdG9fY3B1KHZvbF9wZzAtPk1heExCQSk7CisJcmFpZF9kZXZpY2UtPnN0cmlwZV9zeiA9IGxlMzJfdG9fY3B1KHZvbF9wZzAtPlN0cmlwZVNpemUpOworCXJhaWRfZGV2aWNlLT5ibG9ja19zeiA9IGxlMTZfdG9fY3B1KHZvbF9wZzAtPkJsb2NrU2l6ZSk7CisKKworCWtmcmVlKHZvbF9wZzApOworCXJldHVybjsKKworb3V0X2Vycm9yOgorCXJhaWRfZGV2aWNlLT5kaXJlY3RfaW9fZW5hYmxlZCA9IDA7CisJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgbnVtX3BkczsgY291bnQrKykKKwkJcmFpZF9kZXZpY2UtPnBkX2hhbmRsZVtjb3VudF0gPSAwOworCWtmcmVlKHZvbF9wZzApOworCXJldHVybjsKK30KIAogLyoqCiAgKiBfc2NzaWhfZW5hYmxlX3RsciAtIHNldHRpbmcgVExSIGZsYWdzCkBAIC0xNzEwLDYgKzE5MjMsMTEgQEAKIAogCQlfc2NzaWhfZ2V0X3ZvbHVtZV9jYXBhYmlsaXRpZXMoaW9jLCByYWlkX2RldmljZSk7CiAKKwkJLyoKKwkJICogV0FSUERSSVZFOiBJbml0aWFsaXplIHRoZSByZXF1aXJlZCBkYXRhIGZvciBEaXJlY3QgSU8KKwkJICovCisJCV9zY3NpaF9pbml0X3dhcnBkcml2ZV9wcm9wZXJ0aWVzKGlvYywgcmFpZF9kZXZpY2UpOworCiAJCS8qIFJBSUQgUXVldWUgRGVwdGggU3VwcG9ydAogCQkgKiBJUyB2b2x1bWUgPSB1bmRlcmx5aW5nIHFkZXB0aCBvZiBkcml2ZSB0eXBlLCBlaXRoZXIKIAkJICogICAgTVBUMlNBU19TQVNfUVVFVUVfREVQVEggb3IgTVBUMlNBU19TQVRBX1FVRVVFX0RFUFRICkBAIC0xNzU3LDE0ICsxOTc1LDE2IEBACiAJCQlicmVhazsKIAkJfQogCi0JCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwgIiVzOiAiCi0JCSAgICAiaGFuZGxlKDB4JTA0eCksIHd3aWQoMHglMDE2bGx4KSwgcGRfY291bnQoJWQpLCB0eXBlKCVzKVxuIiwKLQkJICAgIHJfbGV2ZWwsIHJhaWRfZGV2aWNlLT5oYW5kbGUsCi0JCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXJhaWRfZGV2aWNlLT53d2lkLAotCQkgICAgcmFpZF9kZXZpY2UtPm51bV9wZHMsIGRzKTsKKwkJaWYgKCFpb2MtPmhpZGVfaXJfbXNnKQorCQkJc2Rldl9wcmludGsoS0VSTl9JTkZPLCBzZGV2LCAiJXM6IGhhbmRsZSgweCUwNHgpLCAiCisJCQkgICAgInd3aWQoMHglMDE2bGx4KSwgcGRfY291bnQoJWQpLCB0eXBlKCVzKVxuIiwKKwkJCSAgICByX2xldmVsLCByYWlkX2RldmljZS0+aGFuZGxlLAorCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmFpZF9kZXZpY2UtPnd3aWQsCisJCQkgICAgcmFpZF9kZXZpY2UtPm51bV9wZHMsIGRzKTsKIAkJX3Njc2loX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgsIFNDU0lfUURFUFRIX0RFRkFVTFQpOwogCQkvKiByYWlkIHRyYW5zcG9ydCBzdXBwb3J0ICovCi0JCV9zY3NpaF9zZXRfbGV2ZWwoc2RldiwgcmFpZF9kZXZpY2UpOworCQlpZiAoIWlvYy0+aXNfd2FycGRyaXZlKQorCQkJX3Njc2loX3NldF9sZXZlbChzZGV2LCByYWlkX2RldmljZSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjEzMyw4ICsyMzUzLDcgQEAKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIE1QSTJfU0NTSVRBU0tNR01UX1RBU0tUWVBFX0FCT1JUX1RBU0s6CiAJCXNjbWRfbG9va3VwID0gX3Njc2loX3Njc2lfbG9va3VwX2dldChpb2MsIHNtaWRfdGFzayk7Ci0JCWlmIChzY21kX2xvb2t1cCAmJiAoc2NtZF9sb29rdXAtPnNlcmlhbF9udW1iZXIgPT0KLQkJICAgIHNjbWQtPnNlcmlhbF9udW1iZXIpKQorCQlpZiAoc2NtZF9sb29rdXApCiAJCQlyYyA9IEZBSUxFRDsKIAkJZWxzZQogCQkJcmMgPSBTVUNDRVNTOwpAQCAtMjE4MiwxNiArMjQwMSwyMCBAQAogCXN0cnVjdCBNUFQyU0FTX1RBUkdFVCAqcHJpdl90YXJnZXQgPSBzdGFyZ2V0LT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2UgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJY2hhciAqZGV2aWNlX3N0ciA9IE5VTEw7CiAKIAlpZiAoIXByaXZfdGFyZ2V0KQogCQlyZXR1cm47CisJaWYgKGlvYy0+aGlkZV9pcl9tc2cpCisJCWRldmljZV9zdHIgPSAiV2FycERyaXZlIjsKKwllbHNlCisJCWRldmljZV9zdHIgPSAidm9sdW1lIjsKIAogCXNjc2lfcHJpbnRfY29tbWFuZChzY21kKTsKIAlpZiAocHJpdl90YXJnZXQtPmZsYWdzICYgTVBUX1RBUkdFVF9GTEFHU19WT0xVTUUpIHsKLQkJc3RhcmdldF9wcmludGsoS0VSTl9JTkZPLCBzdGFyZ2V0LCAidm9sdW1lIGhhbmRsZSgweCUwNHgpLCAiCi0JCSAgICAidm9sdW1lIHd3aWQoMHglMDE2bGx4KVxuIiwKLQkJICAgIHByaXZfdGFyZ2V0LT5oYW5kbGUsCi0JCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXByaXZfdGFyZ2V0LT5zYXNfYWRkcmVzcyk7CisJCXN0YXJnZXRfcHJpbnRrKEtFUk5fSU5GTywgc3RhcmdldCwgIiVzIGhhbmRsZSgweCUwNHgpLCAiCisJCSAgICAiJXMgd3dpZCgweCUwMTZsbHgpXG4iLCBkZXZpY2Vfc3RyLCBwcml2X3RhcmdldC0+aGFuZGxlLAorCQkgICAgZGV2aWNlX3N0ciwgKHVuc2lnbmVkIGxvbmcgbG9uZylwcml2X3RhcmdldC0+c2FzX2FkZHJlc3MpOwogCX0gZWxzZSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOwogCQlzYXNfZGV2aWNlID0gbXB0MnNhc19zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfc2FzX2FkZHJlc3MoaW9jLApAQCAtMzEzMCw2ICszMzUzLDkgQEAKIAlhID0gMDsKIAliID0gMDsKIAorCWlmIChpb2MtPmlzX3dhcnBkcml2ZSkKKwkJcmV0dXJuOworCiAJLyogVm9sdW1lIFJlc2V0cyBmb3IgRGVsZXRlZCBvciBSZW1vdmVkICovCiAJZWxlbWVudCA9IChNcGkyRXZlbnRJckNvbmZpZ0VsZW1lbnRfdCAqKSZldmVudF9kYXRhLT5Db25maWdFbGVtZW50WzBdOwogCWZvciAoaSA9IDA7IGkgPCBldmVudF9kYXRhLT5OdW1FbGVtZW50czsgaSsrLCBlbGVtZW50KyspIHsKQEAgLTMzNDcsNiArMzU3MywxMDUgQEAKIH0KIAogLyoqCisgKiBfc2NzaWhfc2NzaV9kaXJlY3RfaW9fZ2V0IC0gcmV0dXJucyBkaXJlY3QgaW8gZmxhZworICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAorICoKKyAqIFJldHVybnMgdGhlIHNtaWQgc3RvcmVkIHNjbWQgcG9pbnRlci4KKyAqLworc3RhdGljIGlubGluZSB1OAorX3Njc2loX3Njc2lfZGlyZWN0X2lvX2dldChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKQoreworCXJldHVybiBpb2MtPnNjc2lfbG9va3VwW3NtaWQgLSAxXS5kaXJlY3RfaW87Cit9CisKKy8qKgorICogX3Njc2loX3Njc2lfZGlyZWN0X2lvX3NldCAtIHNldHMgZGlyZWN0IGlvIGZsYWcKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKKyAqIEBkaXJlY3RfaW86IFplcm8gb3Igbm9uLXplcm8gdmFsdWUgdG8gc2V0IGluIHRoZSBkaXJlY3RfaW8gZmxhZworICoKKyAqIFJldHVybnMgTm90aGluZy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitfc2NzaWhfc2NzaV9kaXJlY3RfaW9fc2V0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IGRpcmVjdF9pbykKK3sKKwlpb2MtPnNjc2lfbG9va3VwW3NtaWQgLSAxXS5kaXJlY3RfaW8gPSBkaXJlY3RfaW87Cit9CisKKworLyoqCisgKiBfc2NzaWhfc2V0dXBfZGlyZWN0X2lvIC0gc2V0dXAgTVBJIHJlcXVlc3QgZm9yIFdBUlBEUklWRSBEaXJlY3QgSS9PCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzY21kOiBwb2ludGVyIHRvIHNjc2kgY29tbWFuZCBvYmplY3QKKyAqIEByYWlkX2RldmljZTogcG9pbnRlciB0byByYWlkIGRldmljZSBkYXRhIHN0cnVjdHVyZQorICogQG1waV9yZXF1ZXN0OiBwb2ludGVyIHRvIHRoZSBTQ1NJX0lPIHJlcWVzdCBtZXNzYWdlIGZyYW1lCisgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAorICoKKyAqIFJldHVybnMgbm90aGluZworICovCitzdGF0aWMgdm9pZAorX3Njc2loX3NldHVwX2RpcmVjdF9pbyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsCisJc3RydWN0IF9yYWlkX2RldmljZSAqcmFpZF9kZXZpY2UsIE1waTJTQ1NJSU9SZXF1ZXN0X3QgKm1waV9yZXF1ZXN0LAorCXUxNiBzbWlkKQoreworCXUzMiB2X2xiYSwgcF9sYmEsIHN0cmlwZV9vZmYsIHN0cmlwZV91bml0LCBjb2x1bW4sIGlvX3NpemU7CisJdTMyIHN0cmlwZV9zeiwgc3RyaXBlX2V4cDsKKwl1OCBudW1fcGRzLCAqY2RiX3B0ciwgKnRtcF9wdHIsICpsYmFfcHRyMSwgKmxiYV9wdHIyOworCXU4IGNkYjAgPSBzY21kLT5jbW5kWzBdOworCisJLyoKKwkgKiBUcnkgRGlyZWN0IEkvTyB0byBSQUlEIG1lbWViZXIgZGlza3MKKwkgKi8KKwlpZiAoY2RiMCA9PSBSRUFEXzE2IHx8IGNkYjAgPT0gUkVBRF8xMCB8fAorCSAgICBjZGIwID09IFdSSVRFXzE2IHx8IGNkYjAgPT0gV1JJVEVfMTApIHsKKwkJY2RiX3B0ciA9IG1waV9yZXF1ZXN0LT5DREIuQ0RCMzI7CisKKwkJaWYgKChjZGIwIDwgUkVBRF8xNikgfHwgIShjZGJfcHRyWzJdIHwgY2RiX3B0clszXSB8IGNkYl9wdHJbNF0KKwkJCXwgY2RiX3B0cls1XSkpIHsKKwkJCWlvX3NpemUgPSBzY3NpX2J1ZmZsZW4oc2NtZCkgPj4gOTsKKwkJCS8qIGdldCB2aXJ0dWFsIGxiYSAqLworCQkJbGJhX3B0cjEgPSBsYmFfcHRyMiA9IChjZGIwIDwgUkVBRF8xNikgPyAmY2RiX3B0clsyXSA6CisJCQkgICAgJmNkYl9wdHJbNl07CisJCQl0bXBfcHRyID0gKHU4ICopJnZfbGJhICsgMzsKKwkJCSp0bXBfcHRyLS0gPSAqbGJhX3B0cjErKzsKKwkJCSp0bXBfcHRyLS0gPSAqbGJhX3B0cjErKzsKKwkJCSp0bXBfcHRyLS0gPSAqbGJhX3B0cjErKzsKKwkJCSp0bXBfcHRyID0gKmxiYV9wdHIxOworCisJCQlpZiAoKCh1NjQpdl9sYmEgKyAodTY0KWlvX3NpemUgLSAxKSA8PQorCQkJICAgICh1MzIpcmFpZF9kZXZpY2UtPm1heF9sYmEpIHsKKwkJCQlzdHJpcGVfc3ogPSByYWlkX2RldmljZS0+c3RyaXBlX3N6OworCQkJCXN0cmlwZV9leHAgPSByYWlkX2RldmljZS0+c3RyaXBlX2V4cG9uZW50OworCQkJCXN0cmlwZV9vZmYgPSB2X2xiYSAmIChzdHJpcGVfc3ogLSAxKTsKKworCQkJCS8qIENoZWNrIHdoZXRoZXIgSU8gZmFsbHMgd2l0aGluIGEgc3RyaXBlICovCisJCQkJaWYgKChzdHJpcGVfb2ZmICsgaW9fc2l6ZSkgPD0gc3RyaXBlX3N6KSB7CisJCQkJCW51bV9wZHMgPSByYWlkX2RldmljZS0+bnVtX3BkczsKKwkJCQkJcF9sYmEgPSB2X2xiYSA+PiBzdHJpcGVfZXhwOworCQkJCQlzdHJpcGVfdW5pdCA9IHBfbGJhIC8gbnVtX3BkczsKKwkJCQkJY29sdW1uID0gcF9sYmEgJSBudW1fcGRzOworCQkJCQlwX2xiYSA9IChzdHJpcGVfdW5pdCA8PCBzdHJpcGVfZXhwKSArCisJCQkJCSAgICBzdHJpcGVfb2ZmOworCQkJCQltcGlfcmVxdWVzdC0+RGV2SGFuZGxlID0KKwkJCQkJCWNwdV90b19sZTE2KHJhaWRfZGV2aWNlLT4KKwkJCQkJCSAgICBwZF9oYW5kbGVbY29sdW1uXSk7CisJCQkJCXRtcF9wdHIgPSAodTggKikmcF9sYmEgKyAzOworCQkJCQkqbGJhX3B0cjIrKyA9ICp0bXBfcHRyLS07CisJCQkJCSpsYmFfcHRyMisrID0gKnRtcF9wdHItLTsKKwkJCQkJKmxiYV9wdHIyKysgPSAqdG1wX3B0ci0tOworCQkJCQkqbGJhX3B0cjIgPSAqdG1wX3B0cjsKKwkJCQkJLyoKKwkJCQkJKiBXRDogVG8gaW5kaWNhdGUgdGhpcyBJL08gaXMgZGlyZWN0SS9PCisJCQkJCSovCisJCQkJCV9zY3NpaF9zY3NpX2RpcmVjdF9pb19zZXQoaW9jLCBzbWlkLCAxKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9Cit9CisKKy8qKgogICogX3Njc2loX3FjbWQgLSBtYWluIHNjc2kgcmVxdWVzdCBlbnRyeSBwb2ludAogICogQHNjbWQ6IHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIG9iamVjdAogICogQGRvbmU6IGZ1bmN0aW9uIHBvaW50ZXIgdG8gYmUgaW52b2tlZCBvbiBjb21wbGV0aW9uCkBAIC0zMzYzLDYgKzM2ODgsNyBAQAogCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IHNob3N0X3ByaXYoc2NtZC0+ZGV2aWNlLT5ob3N0KTsKIAlzdHJ1Y3QgTVBUMlNBU19ERVZJQ0UgKnNhc19kZXZpY2VfcHJpdl9kYXRhOwogCXN0cnVjdCBNUFQyU0FTX1RBUkdFVCAqc2FzX3RhcmdldF9wcml2X2RhdGE7CisJc3RydWN0IF9yYWlkX2RldmljZSAqcmFpZF9kZXZpY2U7CiAJTXBpMlNDU0lJT1JlcXVlc3RfdCAqbXBpX3JlcXVlc3Q7CiAJdTMyIG1waV9jb250cm9sOwogCXUxNiBzbWlkOwpAQCAtMzQyNCw4ICszNzUwLDEwIEBACiAKIAl9IGVsc2UKIAkJbXBpX2NvbnRyb2wgfD0gTVBJMl9TQ1NJSU9fQ09OVFJPTF9TSU1QTEVROwotCS8qIE1ha2Ugc3VyZSBEZXZpY2UgaXMgbm90IHJhaWQgdm9sdW1lICovCi0JaWYgKCFfc2NzaWhfaXNfcmFpZCgmc2NtZC0+ZGV2aWNlLT5zZGV2X2dlbmRldikgJiYKKwkvKiBNYWtlIHN1cmUgRGV2aWNlIGlzIG5vdCByYWlkIHZvbHVtZS4KKwkgKiBXZSBkbyBub3QgZXhwb3NlIHJhaWQgZnVuY3Rpb25hbGl0eSB0byB1cHBlciBsYXllciBmb3Igd2FycGRyaXZlLgorCSAqLworCWlmICghaW9jLT5pc193YXJwZHJpdmUgJiYgIV9zY3NpaF9pc19yYWlkKCZzY21kLT5kZXZpY2UtPnNkZXZfZ2VuZGV2KSAmJgogCSAgICBzYXNfaXNfdGxyX2VuYWJsZWQoc2NtZC0+ZGV2aWNlKSAmJiBzY21kLT5jbWRfbGVuICE9IDMyKQogCQltcGlfY29udHJvbCB8PSBNUEkyX1NDU0lJT19DT05UUk9MX1RMUl9PTjsKIApAQCAtMzQ3Myw5ICszODAxLDE0IEBACiAJCX0KIAl9CiAKKwlyYWlkX2RldmljZSA9IHNhc190YXJnZXRfcHJpdl9kYXRhLT5yYWlkX2RldmljZTsKKwlpZiAocmFpZF9kZXZpY2UgJiYgcmFpZF9kZXZpY2UtPmRpcmVjdF9pb19lbmFibGVkKQorCQlfc2NzaWhfc2V0dXBfZGlyZWN0X2lvKGlvYywgc2NtZCwgcmFpZF9kZXZpY2UsIG1waV9yZXF1ZXN0LAorCQkgICAgc21pZCk7CisKIAlpZiAobGlrZWx5KG1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9PSBNUEkyX0ZVTkNUSU9OX1NDU0lfSU9fUkVRVUVTVCkpCiAJCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9zY3NpX2lvKGlvYywgc21pZCwKLQkJICAgIHNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0LT5oYW5kbGUpOworCQkgICAgbGUxNl90b19jcHUobXBpX3JlcXVlc3QtPkRldkhhbmRsZSkpOwogCWVsc2UKIAkJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkKTsKIAlyZXR1cm4gMDsKQEAgLTM1NDAsMTAgKzM4NzMsMTYgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCA9IHNjbWQtPmRldmljZS0+c2Rldl90YXJnZXQ7CiAJc3RydWN0IE1QVDJTQVNfVEFSR0VUICpwcml2X3RhcmdldCA9IHN0YXJnZXQtPmhvc3RkYXRhOworCWNoYXIgKmRldmljZV9zdHIgPSBOVUxMOwogCiAJaWYgKCFwcml2X3RhcmdldCkKIAkJcmV0dXJuOwogCisJaWYgKGlvYy0+aGlkZV9pcl9tc2cpCisJCWRldmljZV9zdHIgPSAiV2FycERyaXZlIjsKKwllbHNlCisJCWRldmljZV9zdHIgPSAidm9sdW1lIjsKKwogCWlmIChsb2dfaW5mbyA9PSAweDMxMTcwMDAwKQogCQlyZXR1cm47CiAKQEAgLTM2NjAsOCArMzk5OSw4IEBACiAJc2NzaV9wcmludF9jb21tYW5kKHNjbWQpOwogCiAJaWYgKHByaXZfdGFyZ2V0LT5mbGFncyAmIE1QVF9UQVJHRVRfRkxBR1NfVk9MVU1FKSB7Ci0JCXByaW50ayhNUFQyU0FTX1dBUk5fRk1UICJcdHZvbHVtZSB3d2lkKDB4JTAxNmxseClcbiIsIGlvYy0+bmFtZSwKLQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcHJpdl90YXJnZXQtPnNhc19hZGRyZXNzKTsKKwkJcHJpbnRrKE1QVDJTQVNfV0FSTl9GTVQgIlx0JXMgd3dpZCgweCUwMTZsbHgpXG4iLCBpb2MtPm5hbWUsCisJCSAgICBkZXZpY2Vfc3RyLCAodW5zaWduZWQgbG9uZyBsb25nKXByaXZfdGFyZ2V0LT5zYXNfYWRkcmVzcyk7CiAJfSBlbHNlIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CiAJCXNhc19kZXZpY2UgPSBtcHQyc2FzX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9zYXNfYWRkcmVzcyhpb2MsCkBAIC0zODQwLDYgKzQxNzksMjAgQEAKIAkJc2NtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CiAJCWdvdG8gb3V0OwogCX0KKwkvKgorCSAqIFdBUlBEUklWRTogSWYgZGlyZWN0X2lvIGlzIHNldCB0aGVuIGl0IGlzIGRpcmVjdElPLAorCSAqIHRoZSBmYWlsZWQgZGlyZWN0IEkvTyBzaG91bGQgYmUgcmVkaXJlY3RlZCB0byB2b2x1bWUKKwkgKi8KKwlpZiAoX3Njc2loX3Njc2lfZGlyZWN0X2lvX2dldChpb2MsIHNtaWQpKSB7CisJCV9zY3NpaF9zY3NpX2RpcmVjdF9pb19zZXQoaW9jLCBzbWlkLCAwKTsKKwkJbWVtY3B5KG1waV9yZXF1ZXN0LT5DREIuQ0RCMzIsIHNjbWQtPmNtbmQsIHNjbWQtPmNtZF9sZW4pOworCQltcGlfcmVxdWVzdC0+RGV2SGFuZGxlID0KKwkJICAgIGNwdV90b19sZTE2KHNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0LT5oYW5kbGUpOworCQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfc2NzaV9pbyhpb2MsIHNtaWQsCisJCSAgICBzYXNfZGV2aWNlX3ByaXZfZGF0YS0+c2FzX3RhcmdldC0+aGFuZGxlKTsKKwkJcmV0dXJuIDA7CisJfQorCiAKIAkvKiB0dXJuaW5nIG9mZiBUTFIgKi8KIAlzY3NpX3N0YXRlID0gbXBpX3JlcGx5LT5TQ1NJU3RhdGU7CkBAIC0zODQ4LDcgKzQyMDEsMTAgQEAKIAkJICAgIGxlMzJfdG9fY3B1KG1waV9yZXBseS0+UmVzcG9uc2VJbmZvKSAmIDB4RkY7CiAJaWYgKCFzYXNfZGV2aWNlX3ByaXZfZGF0YS0+dGxyX3Nub29wX2NoZWNrKSB7CiAJCXNhc19kZXZpY2VfcHJpdl9kYXRhLT50bHJfc25vb3BfY2hlY2srKzsKLQlpZiAoIV9zY3NpaF9pc19yYWlkKCZzY21kLT5kZXZpY2UtPnNkZXZfZ2VuZGV2KSAmJgorCS8qIE1ha2Ugc3VyZSBEZXZpY2UgaXMgbm90IHJhaWQgdm9sdW1lLgorCSAqIFdlIGRvIG5vdCBleHBvc2UgcmFpZCBmdW5jdGlvbmFsaXR5IHRvIHVwcGVyIGxheWVyIGZvciB3YXJwZHJpdmUuCisJICovCisJaWYgKCFpb2MtPmlzX3dhcnBkcml2ZSAmJiAhX3Njc2loX2lzX3JhaWQoJnNjbWQtPmRldmljZS0+c2Rldl9nZW5kZXYpICYmCiAJCXNhc19pc190bHJfZW5hYmxlZChzY21kLT5kZXZpY2UpICYmCiAJCSAgICByZXNwb25zZV9jb2RlID09IE1QSTJfU0NTSVRBU0tNR01UX1JTUF9JTlZBTElEX0ZSQU1FKSB7CiAJCQlzYXNfZGlzYWJsZV90bHIoc2NtZC0+ZGV2aWNlKTsKQEAgLTQ2ODEsOCArNTAzNywxMCBAQAogCiAJX3Njc2loX3VibG9ja19pb19kZXZpY2UoaW9jLCBzYXNfZGV2aWNlX2JhY2t1cC5oYW5kbGUpOwogCi0JbXB0MnNhc190cmFuc3BvcnRfcG9ydF9yZW1vdmUoaW9jLCBzYXNfZGV2aWNlX2JhY2t1cC5zYXNfYWRkcmVzcywKLQkgICAgc2FzX2RldmljZV9iYWNrdXAuc2FzX2FkZHJlc3NfcGFyZW50KTsKKwlpZiAoIWlvYy0+aGlkZV9kcml2ZXMpCisJCW1wdDJzYXNfdHJhbnNwb3J0X3BvcnRfcmVtb3ZlKGlvYywKKwkJICAgIHNhc19kZXZpY2VfYmFja3VwLnNhc19hZGRyZXNzLAorCQkgICAgc2FzX2RldmljZV9iYWNrdXAuc2FzX2FkZHJlc3NfcGFyZW50KTsKIAogCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJyZW1vdmluZyBoYW5kbGUoMHglMDR4KSwgc2FzX2FkZHIiCiAJICAgICIoMHglMDE2bGx4KVxuIiwgaW9jLT5uYW1lLCBzYXNfZGV2aWNlX2JhY2t1cC5oYW5kbGUsCkBAIC01NDEzLDYgKzU3NzEsNyBAQAogCSAgICAmc2FzX2RldmljZS0+dm9sdW1lX3d3aWQpOwogCXNldF9iaXQoaGFuZGxlLCBpb2MtPnBkX2hhbmRsZXMpOwogCV9zY3NpaF9yZXByb2JlX3RhcmdldChzYXNfZGV2aWNlLT5zdGFyZ2V0LCAxKTsKKwogfQogCiAvKioKQEAgLTU1OTEsNyArNTk1MCw4IEBACiAJTXBpMkV2ZW50RGF0YUlyQ29uZmlnQ2hhbmdlTGlzdF90ICpldmVudF9kYXRhID0gZndfZXZlbnQtPmV2ZW50X2RhdGE7CiAKICNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKLQlpZiAoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX0VWRU5UX1dPUktfVEFTSykKKwlpZiAoKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19FVkVOVF9XT1JLX1RBU0spCisJICAgICYmICFpb2MtPmhpZGVfaXJfbXNnKQogCQlfc2NzaWhfc2FzX2lyX2NvbmZpZ19jaGFuZ2VfZXZlbnRfZGVidWcoaW9jLCBldmVudF9kYXRhKTsKIAogI2VuZGlmCkBAIC01NjE0LDE2ICs1OTc0LDIwIEBACiAJCQkJICAgIGxlMTZfdG9fY3B1KGVsZW1lbnQtPlZvbERldkhhbmRsZSkpOwogCQkJYnJlYWs7CiAJCWNhc2UgTVBJMl9FVkVOVF9JUl9DSEFOR0VfUkNfUERfQ1JFQVRFRDoKLQkJCV9zY3NpaF9zYXNfcGRfaGlkZShpb2MsIGVsZW1lbnQpOworCQkJaWYgKCFpb2MtPmlzX3dhcnBkcml2ZSkKKwkJCQlfc2NzaWhfc2FzX3BkX2hpZGUoaW9jLCBlbGVtZW50KTsKIAkJCWJyZWFrOwogCQljYXNlIE1QSTJfRVZFTlRfSVJfQ0hBTkdFX1JDX1BEX0RFTEVURUQ6Ci0JCQlfc2NzaWhfc2FzX3BkX2V4cG9zZShpb2MsIGVsZW1lbnQpOworCQkJaWYgKCFpb2MtPmlzX3dhcnBkcml2ZSkKKwkJCQlfc2NzaWhfc2FzX3BkX2V4cG9zZShpb2MsIGVsZW1lbnQpOwogCQkJYnJlYWs7CiAJCWNhc2UgTVBJMl9FVkVOVF9JUl9DSEFOR0VfUkNfSElERToKLQkJCV9zY3NpaF9zYXNfcGRfYWRkKGlvYywgZWxlbWVudCk7CisJCQlpZiAoIWlvYy0+aXNfd2FycGRyaXZlKQorCQkJCV9zY3NpaF9zYXNfcGRfYWRkKGlvYywgZWxlbWVudCk7CiAJCQlicmVhazsKIAkJY2FzZSBNUEkyX0VWRU5UX0lSX0NIQU5HRV9SQ19VTkhJREU6Ci0JCQlfc2NzaWhfc2FzX3BkX2RlbGV0ZShpb2MsIGVsZW1lbnQpOworCQkJaWYgKCFpb2MtPmlzX3dhcnBkcml2ZSkKKwkJCQlfc2NzaWhfc2FzX3BkX2RlbGV0ZShpb2MsIGVsZW1lbnQpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC01NjU0LDkgKzYwMTgsMTAgQEAKIAogCWhhbmRsZSA9IGxlMTZfdG9fY3B1KGV2ZW50X2RhdGEtPlZvbERldkhhbmRsZSk7CiAJc3RhdGUgPSBsZTMyX3RvX2NwdShldmVudF9kYXRhLT5OZXdWYWx1ZSk7Ci0JZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogaGFuZGxlKDB4JTA0eCksICIKLQkgICAgIm9sZCgweCUwOHgpLCBuZXcoMHglMDh4KVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywgIGhhbmRsZSwKLQkgICAgbGUzMl90b19jcHUoZXZlbnRfZGF0YS0+UHJldmlvdXNWYWx1ZSksIHN0YXRlKSk7CisJaWYgKCFpb2MtPmhpZGVfaXJfbXNnKQorCQlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBoYW5kbGUoMHglMDR4KSwgIgorCQkgICAgIm9sZCgweCUwOHgpLCBuZXcoMHglMDh4KVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywgIGhhbmRsZSwKKwkJICAgIGxlMzJfdG9fY3B1KGV2ZW50X2RhdGEtPlByZXZpb3VzVmFsdWUpLCBzdGF0ZSkpOwogCiAJc3dpdGNoIChzdGF0ZSkgewogCWNhc2UgTVBJMl9SQUlEX1ZPTF9TVEFURV9NSVNTSU5HOgpAQCAtNTczNiw5ICs2MTAxLDEwIEBACiAJaGFuZGxlID0gbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+UGh5c0Rpc2tEZXZIYW5kbGUpOwogCXN0YXRlID0gbGUzMl90b19jcHUoZXZlbnRfZGF0YS0+TmV3VmFsdWUpOwogCi0JZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogaGFuZGxlKDB4JTA0eCksICIKLQkgICAgIm9sZCgweCUwOHgpLCBuZXcoMHglMDh4KVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywgIGhhbmRsZSwKLQkgICAgbGUzMl90b19jcHUoZXZlbnRfZGF0YS0+UHJldmlvdXNWYWx1ZSksIHN0YXRlKSk7CisJaWYgKCFpb2MtPmhpZGVfaXJfbXNnKQorCQlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBoYW5kbGUoMHglMDR4KSwgIgorCQkgICAgIm9sZCgweCUwOHgpLCBuZXcoMHglMDh4KVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywgIGhhbmRsZSwKKwkJICAgIGxlMzJfdG9fY3B1KGV2ZW50X2RhdGEtPlByZXZpb3VzVmFsdWUpLCBzdGF0ZSkpOwogCiAJc3dpdGNoIChzdGF0ZSkgewogCWNhc2UgTVBJMl9SQUlEX1BEX1NUQVRFX09OTElORToKQEAgLTU3NDcsNyArNjExMyw4IEBACiAJY2FzZSBNUEkyX1JBSURfUERfU1RBVEVfT1BUSU1BTDoKIAljYXNlIE1QSTJfUkFJRF9QRF9TVEFURV9IT1RfU1BBUkU6CiAKLQkJc2V0X2JpdChoYW5kbGUsIGlvYy0+cGRfaGFuZGxlcyk7CisJCWlmICghaW9jLT5pc193YXJwZHJpdmUpCisJCQlzZXRfYml0KGhhbmRsZSwgaW9jLT5wZF9oYW5kbGVzKTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAkJc2FzX2RldmljZSA9IF9zY3NpaF9zYXNfZGV2aWNlX2ZpbmRfYnlfaGFuZGxlKGlvYywgaGFuZGxlKTsKQEAgLTU4NTEsNyArNjIxOCw4IEBACiAJdTE2IGhhbmRsZTsKIAogI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORwotCWlmIChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfRVZFTlRfV09SS19UQVNLKQorCWlmICgoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX0VWRU5UX1dPUktfVEFTSykKKwkgICAgJiYgIWlvYy0+aGlkZV9pcl9tc2cpCiAJCV9zY3NpaF9zYXNfaXJfb3BlcmF0aW9uX3N0YXR1c19ldmVudF9kZWJ1Zyhpb2MsCiAJCSAgICAgZXZlbnRfZGF0YSk7CiAjZW5kaWYKQEAgLTU5MTAsNyArNjI3OCw3IEBACiBfc2NzaWhfbWFya19yZXNwb25kaW5nX3Nhc19kZXZpY2Uoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1NjQgc2FzX2FkZHJlc3MsCiAgICAgdTE2IHNsb3QsIHUxNiBoYW5kbGUpCiB7Ci0Jc3RydWN0IE1QVDJTQVNfVEFSR0VUICpzYXNfdGFyZ2V0X3ByaXZfZGF0YTsKKwlzdHJ1Y3QgTVBUMlNBU19UQVJHRVQgKnNhc190YXJnZXRfcHJpdl9kYXRhID0gTlVMTDsKIAlzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQ7CiAJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC01OTE4LDcgKzYyODYsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2FzX2RldmljZSwgJmlvYy0+c2FzX2RldmljZV9saXN0LCBsaXN0KSB7CiAJCWlmIChzYXNfZGV2aWNlLT5zYXNfYWRkcmVzcyA9PSBzYXNfYWRkcmVzcyAmJgotCQkgICAgc2FzX2RldmljZS0+c2xvdCA9PSBzbG90ICYmIHNhc19kZXZpY2UtPnN0YXJnZXQpIHsKKwkJICAgIHNhc19kZXZpY2UtPnNsb3QgPT0gc2xvdCkgewogCQkJc2FzX2RldmljZS0+cmVzcG9uZGluZyA9IDE7CiAJCQlzdGFyZ2V0ID0gc2FzX2RldmljZS0+c3RhcmdldDsKIAkJCWlmIChzdGFyZ2V0ICYmIHN0YXJnZXQtPmhvc3RkYXRhKSB7CkBAIC01OTI3LDEzICs2Mjk1LDE1IEBACiAJCQkJc2FzX3RhcmdldF9wcml2X2RhdGEtPmRlbGV0ZWQgPSAwOwogCQkJfSBlbHNlCiAJCQkJc2FzX3RhcmdldF9wcml2X2RhdGEgPSBOVUxMOwotCQkJc3RhcmdldF9wcmludGsoS0VSTl9JTkZPLCBzYXNfZGV2aWNlLT5zdGFyZ2V0LAotCQkJICAgICJoYW5kbGUoMHglMDR4KSwgc2FzX2FkZHIoMHglMDE2bGx4KSwgZW5jbG9zdXJlICIKLQkJCSAgICAibG9naWNhbCBpZCgweCUwMTZsbHgpLCBzbG90KCVkKVxuIiwgaGFuZGxlLAotCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2FzX2RldmljZS0+c2FzX2FkZHJlc3MsCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKLQkJCSAgICBzYXNfZGV2aWNlLT5lbmNsb3N1cmVfbG9naWNhbF9pZCwKLQkJCSAgICBzYXNfZGV2aWNlLT5zbG90KTsKKwkJCWlmIChzdGFyZ2V0KQorCQkJCXN0YXJnZXRfcHJpbnRrKEtFUk5fSU5GTywgc3RhcmdldCwKKwkJCQkgICAgImhhbmRsZSgweCUwNHgpLCBzYXNfYWRkcigweCUwMTZsbHgpLCAiCisJCQkJICAgICJlbmNsb3N1cmUgbG9naWNhbCBpZCgweCUwMTZsbHgpLCAiCisJCQkJICAgICJzbG90KCVkKVxuIiwgaGFuZGxlLAorCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXNhc19kZXZpY2UtPnNhc19hZGRyZXNzLAorCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJCSAgICBzYXNfZGV2aWNlLT5lbmNsb3N1cmVfbG9naWNhbF9pZCwKKwkJCQkgICAgc2FzX2RldmljZS0+c2xvdCk7CiAJCQlpZiAoc2FzX2RldmljZS0+aGFuZGxlID09IGhhbmRsZSkKIAkJCQlnb3RvIG91dDsKIAkJCXByaW50ayhLRVJOX0lORk8gIlx0aGFuZGxlIGNoYW5nZWQgZnJvbSgweCUwNHgpISEhXG4iLApAQCAtNjAyNSw2ICs2Mzk1LDEyIEBACiAJCQlzdGFyZ2V0X3ByaW50ayhLRVJOX0lORk8sIHJhaWRfZGV2aWNlLT5zdGFyZ2V0LAogCQkJICAgICJoYW5kbGUoMHglMDR4KSwgd3dpZCgweCUwMTZsbHgpXG4iLCBoYW5kbGUsCiAJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyYWlkX2RldmljZS0+d3dpZCk7CisJCQkvKgorCQkJICogV0FSUERSSVZFOiBUaGUgaGFuZGxlcyBvZiB0aGUgUERzIG1pZ2h0IGhhdmUgY2hhbmdlZAorCQkJICogYWNyb3NzIHRoZSBob3N0IHJlc2V0IHNvIHJlLWluaXRpYWxpemUgdGhlCisJCQkgKiByZXF1aXJlZCBkYXRhIGZvciBEaXJlY3QgSU8KKwkJCSAqLworCQkJX3Njc2loX2luaXRfd2FycGRyaXZlX3Byb3BlcnRpZXMoaW9jLCByYWlkX2RldmljZSk7CiAJCQlpZiAocmFpZF9kZXZpY2UtPmhhbmRsZSA9PSBoYW5kbGUpCiAJCQkJZ290byBvdXQ7CiAJCQlwcmludGsoS0VSTl9JTkZPICJcdGhhbmRsZSBjaGFuZ2VkIGZyb20oMHglMDR4KSEhIVxuIiwKQEAgLTYwODYsMTggKzY0NjIsMjAgQEAKIAl9CiAKIAkvKiByZWZyZXNoIHRoZSBwZF9oYW5kbGVzICovCi0JcGh5c19kaXNrX251bSA9IDB4RkY7Ci0JbWVtc2V0KGlvYy0+cGRfaGFuZGxlcywgMCwgaW9jLT5wZF9oYW5kbGVzX3N6KTsKLQl3aGlsZSAoIShtcHQyc2FzX2NvbmZpZ19nZXRfcGh5c19kaXNrX3BnMChpb2MsICZtcGlfcmVwbHksCi0JICAgICZwZF9wZzAsIE1QSTJfUEhZU0RJU0tfUEdBRF9GT1JNX0dFVF9ORVhUX1BIWVNESVNLTlVNLAotCSAgICBwaHlzX2Rpc2tfbnVtKSkpIHsKLQkJaW9jX3N0YXR1cyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5JT0NTdGF0dXMpICYKLQkJICAgIE1QSTJfSU9DU1RBVFVTX01BU0s7Ci0JCWlmIChpb2Nfc3RhdHVzID09IE1QSTJfSU9DU1RBVFVTX0NPTkZJR19JTlZBTElEX1BBR0UpCi0JCQlicmVhazsKLQkJcGh5c19kaXNrX251bSA9IHBkX3BnMC5QaHlzRGlza051bTsKLQkJaGFuZGxlID0gbGUxNl90b19jcHUocGRfcGcwLkRldkhhbmRsZSk7Ci0JCXNldF9iaXQoaGFuZGxlLCBpb2MtPnBkX2hhbmRsZXMpOworCWlmICghaW9jLT5pc193YXJwZHJpdmUpIHsKKwkJcGh5c19kaXNrX251bSA9IDB4RkY7CisJCW1lbXNldChpb2MtPnBkX2hhbmRsZXMsIDAsIGlvYy0+cGRfaGFuZGxlc19zeik7CisJCXdoaWxlICghKG1wdDJzYXNfY29uZmlnX2dldF9waHlzX2Rpc2tfcGcwKGlvYywgJm1waV9yZXBseSwKKwkJICAgICZwZF9wZzAsIE1QSTJfUEhZU0RJU0tfUEdBRF9GT1JNX0dFVF9ORVhUX1BIWVNESVNLTlVNLAorCQkgICAgcGh5c19kaXNrX251bSkpKSB7CisJCQlpb2Nfc3RhdHVzID0gbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cykgJgorCQkJICAgIE1QSTJfSU9DU1RBVFVTX01BU0s7CisJCQlpZiAoaW9jX3N0YXR1cyA9PSBNUEkyX0lPQ1NUQVRVU19DT05GSUdfSU5WQUxJRF9QQUdFKQorCQkJCWJyZWFrOworCQkJcGh5c19kaXNrX251bSA9IHBkX3BnMC5QaHlzRGlza051bTsKKwkJCWhhbmRsZSA9IGxlMTZfdG9fY3B1KHBkX3BnMC5EZXZIYW5kbGUpOworCQkJc2V0X2JpdChoYW5kbGUsIGlvYy0+cGRfaGFuZGxlcyk7CisJCX0KIAl9CiB9CiAKQEAgLTYyNDMsNiArNjYyMSw1MCBAQAogfQogCiAvKioKKyAqIF9zY3NpaF9oaWRlX3VuaGlkZV9zYXNfZGV2aWNlcyAtIGFkZC9yZW1vdmUgZGV2aWNlIHRvL2Zyb20gT1MKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorX3Njc2loX2hpZGVfdW5oaWRlX3Nhc19kZXZpY2VzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYykKK3sKKwlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2UsICpzYXNfZGV2aWNlX25leHQ7CisKKwlpZiAoIWlvYy0+aXNfd2FycGRyaXZlIHx8IGlvYy0+bWZnX3BnMTBfaGlkZV9mbGFnICE9CisJICAgIE1GR19QQUdFMTBfSElERV9JRl9WT0xfUFJFU0VOVCkKKwkJcmV0dXJuOworCisJaWYgKGlvYy0+aGlkZV9kcml2ZXMpIHsKKwkJaWYgKF9zY3NpaF9nZXRfbnVtX3ZvbHVtZXMoaW9jKSkKKwkJCXJldHVybjsKKwkJaW9jLT5oaWRlX2RyaXZlcyA9IDA7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzYXNfZGV2aWNlLCBzYXNfZGV2aWNlX25leHQsCisJCSAgICAmaW9jLT5zYXNfZGV2aWNlX2xpc3QsIGxpc3QpIHsKKwkJCWlmICghbXB0MnNhc190cmFuc3BvcnRfcG9ydF9hZGQoaW9jLCBzYXNfZGV2aWNlLT5oYW5kbGUsCisJCQkJc2FzX2RldmljZS0+c2FzX2FkZHJlc3NfcGFyZW50KSkgeworCQkJCV9zY3NpaF9zYXNfZGV2aWNlX3JlbW92ZShpb2MsIHNhc19kZXZpY2UpOworCQkJfSBlbHNlIGlmICghc2FzX2RldmljZS0+c3RhcmdldCkgeworCQkJCW1wdDJzYXNfdHJhbnNwb3J0X3BvcnRfcmVtb3ZlKGlvYywKKwkJCQkgICAgc2FzX2RldmljZS0+c2FzX2FkZHJlc3MsCisJCQkJICAgIHNhc19kZXZpY2UtPnNhc19hZGRyZXNzX3BhcmVudCk7CisJCQkJX3Njc2loX3Nhc19kZXZpY2VfcmVtb3ZlKGlvYywgc2FzX2RldmljZSk7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlpZiAoIV9zY3NpaF9nZXRfbnVtX3ZvbHVtZXMoaW9jKSkKKwkJCXJldHVybjsKKwkJaW9jLT5oaWRlX2RyaXZlcyA9IDE7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzYXNfZGV2aWNlLCBzYXNfZGV2aWNlX25leHQsCisJCSAgICAmaW9jLT5zYXNfZGV2aWNlX2xpc3QsIGxpc3QpIHsKKwkJCW1wdDJzYXNfdHJhbnNwb3J0X3BvcnRfcmVtb3ZlKGlvYywKKwkJCSAgICBzYXNfZGV2aWNlLT5zYXNfYWRkcmVzcywKKwkJCSAgICBzYXNfZGV2aWNlLT5zYXNfYWRkcmVzc19wYXJlbnQpOworCQl9CisJfQorfQorCisvKioKICAqIG1wdDJzYXNfc2NzaWhfcmVzZXRfaGFuZGxlciAtIHJlc2V0IGNhbGxiYWNrIGhhbmRsZXIgKGZvciBzY3NpaCkKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHJlc2V0X3BoYXNlOiBwaGFzZQpAQCAtNjMyNiw2ICs2NzQ4LDcgQEAKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssCiAJCQkgICAgZmxhZ3MpOwogCQlfc2NzaWhfcmVtb3ZlX3VucmVzcG9uZGluZ19zYXNfZGV2aWNlcyhpb2MpOworCQlfc2NzaWhfaGlkZV91bmhpZGVfc2FzX2RldmljZXMoaW9jKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNjQyNSw2ICs2ODQ4LDUzIEBACiAJCSAgICAoTXBpMkV2ZW50RGF0YUlyVm9sdW1lX3QgKikKIAkJICAgIG1waV9yZXBseS0+RXZlbnREYXRhKTsKIAkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX0xPR19FTlRSWV9BRERFRDoKKwl7CisJCU1waTJFdmVudERhdGFMb2dFbnRyeUFkZGVkX3QgKmxvZ19lbnRyeTsKKwkJdTMyICpsb2dfY29kZTsKKworCQlpZiAoIWlvYy0+aXNfd2FycGRyaXZlKQorCQkJYnJlYWs7CisKKwkJbG9nX2VudHJ5ID0gKE1waTJFdmVudERhdGFMb2dFbnRyeUFkZGVkX3QgKikKKwkJICAgIG1waV9yZXBseS0+RXZlbnREYXRhOworCQlsb2dfY29kZSA9ICh1MzIgKilsb2dfZW50cnktPkxvZ0RhdGE7CisKKwkJaWYgKGxlMTZfdG9fY3B1KGxvZ19lbnRyeS0+TG9nRW50cnlRdWFsaWZpZXIpCisJCSAgICAhPSBNUFQyX1dBUlBEUklWRV9MT0dFTlRSWSkKKwkJCWJyZWFrOworCisJCXN3aXRjaCAobGUzMl90b19jcHUoKmxvZ19jb2RlKSkgeworCQljYXNlIE1QVDJfV0FSUERSSVZFX0xDX1NTRFQ6CisJCQlwcmludGsoTVBUMlNBU19XQVJOX0ZNVCAiV2FycERyaXZlIFdhcm5pbmc6ICIKKwkJCSAgICAiSU8gVGhyb3R0bGluZyBoYXMgb2NjdXJyZWQgaW4gdGhlIFdhcnBEcml2ZSAiCisJCQkgICAgInN1YnN5c3RlbS4gQ2hlY2sgV2FycERyaXZlIGRvY3VtZW50YXRpb24gZm9yICIKKwkJCSAgICAiYWRkaXRpb25hbCBkZXRhaWxzLlxuIiwgaW9jLT5uYW1lKTsKKwkJCWJyZWFrOworCQljYXNlIE1QVDJfV0FSUERSSVZFX0xDX1NTRExXOgorCQkJcHJpbnRrKE1QVDJTQVNfV0FSTl9GTVQgIldhcnBEcml2ZSBXYXJuaW5nOiAiCisJCQkgICAgIlByb2dyYW0vRXJhc2UgQ3ljbGVzIGZvciB0aGUgV2FycERyaXZlIHN1YnN5c3RlbSAiCisJCQkgICAgImluIGRlZ3JhZGVkIHJhbmdlLiBDaGVjayBXYXJwRHJpdmUgZG9jdW1lbnRhdGlvbiAiCisJCQkgICAgImZvciBhZGRpdGlvbmFsIGRldGFpbHMuXG4iLCBpb2MtPm5hbWUpOworCQkJYnJlYWs7CisJCWNhc2UgTVBUMl9XQVJQRFJJVkVfTENfU1NETEY6CisJCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJXYXJwRHJpdmUgRmF0YWwgRXJyb3I6ICIKKwkJCSAgICAiVGhlcmUgYXJlIG5vIFByb2dyYW0vRXJhc2UgQ3ljbGVzIGZvciB0aGUgIgorCQkJICAgICJXYXJwRHJpdmUgc3Vic3lzdGVtLiBUaGUgc3RvcmFnZSBkZXZpY2Ugd2lsbCBiZSAiCisJCQkgICAgImluIHJlYWQtb25seSBtb2RlLiBDaGVjayBXYXJwRHJpdmUgZG9jdW1lbnRhdGlvbiAiCisJCQkgICAgImZvciBhZGRpdGlvbmFsIGRldGFpbHMuXG4iLCBpb2MtPm5hbWUpOworCQkJYnJlYWs7CisJCWNhc2UgTVBUMl9XQVJQRFJJVkVfTENfQlJNRjoKKwkJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIldhcnBEcml2ZSBGYXRhbCBFcnJvcjogIgorCQkJICAgICJUaGUgQmFja3VwIFJhaWwgTW9uaXRvciBoYXMgZmFpbGVkIG9uIHRoZSAiCisJCQkgICAgIldhcnBEcml2ZSBzdWJzeXN0ZW0uIENoZWNrIFdhcnBEcml2ZSAiCisJCQkgICAgImRvY3VtZW50YXRpb24gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy5cbiIsCisJCQkgICAgaW9jLT5uYW1lKTsKKwkJCWJyZWFrOworCQl9CisKKwkJYnJlYWs7CisJfQogCWNhc2UgTVBJMl9FVkVOVF9TQVNfREVWSUNFX1NUQVRVU19DSEFOR0U6CiAJY2FzZSBNUEkyX0VWRU5UX0lSX09QRVJBVElPTl9TVEFUVVM6CiAJY2FzZSBNUEkyX0VWRU5UX1NBU19ESVNDT1ZFUlk6CkBAIC02NTgzLDcgKzcwNTMsOCBAQAogCW1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fUkFJRF9BQ1RJT047CiAJbXBpX3JlcXVlc3QtPkFjdGlvbiA9IE1QSTJfUkFJRF9BQ1RJT05fU1lTVEVNX1NIVVRET1dOX0lOSVRJQVRFRDsKIAotCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJJUiBzaHV0ZG93biAoc2VuZGluZylcbiIsIGlvYy0+bmFtZSk7CisJaWYgKCFpb2MtPmhpZGVfaXJfbXNnKQorCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiSVIgc2h1dGRvd24gKHNlbmRpbmcpXG4iLCBpb2MtPm5hbWUpOwogCWluaXRfY29tcGxldGlvbigmaW9jLT5zY3NpaF9jbWRzLmRvbmUpOwogCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCk7CiAJd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPnNjc2loX2NtZHMuZG9uZSwgMTAqSFopOwpAQCAtNjU5NywxMCArNzA2OCwxMSBAQAogCWlmIChpb2MtPnNjc2loX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUkVQTFlfVkFMSUQpIHsKIAkJbXBpX3JlcGx5ID0gaW9jLT5zY3NpaF9jbWRzLnJlcGx5OwogCi0JCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJJUiBzaHV0ZG93biAoY29tcGxldGUpOiAiCi0JCSAgICAiaW9jX3N0YXR1cygweCUwNHgpLCBsb2dpbmZvKDB4JTA4eClcbiIsCi0JCSAgICBpb2MtPm5hbWUsIGxlMTZfdG9fY3B1KG1waV9yZXBseS0+SU9DU3RhdHVzKSwKLQkJICAgIGxlMzJfdG9fY3B1KG1waV9yZXBseS0+SU9DTG9nSW5mbykpOworCQlpZiAoIWlvYy0+aGlkZV9pcl9tc2cpCisJCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiSVIgc2h1dGRvd24gKGNvbXBsZXRlKTogIgorCQkJICAgICJpb2Nfc3RhdHVzKDB4JTA0eCksIGxvZ2luZm8oMHglMDh4KVxuIiwKKwkJCSAgICBpb2MtPm5hbWUsIGxlMTZfdG9fY3B1KG1waV9yZXBseS0+SU9DU3RhdHVzKSwKKwkJCSAgICBsZTMyX3RvX2NwdShtcGlfcmVwbHktPklPQ0xvZ0luZm8pKTsKIAl9CiAKICBvdXQ6CkBAIC02NzU5LDYgKzcyMzEsOSBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAkJbGlzdF9tb3ZlX3RhaWwoJnNhc19kZXZpY2UtPmxpc3QsICZpb2MtPnNhc19kZXZpY2VfbGlzdCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisKKwkJaWYgKGlvYy0+aGlkZV9kcml2ZXMpCisJCQlyZXR1cm47CiAJCWlmICghbXB0MnNhc190cmFuc3BvcnRfcG9ydF9hZGQoaW9jLCBzYXNfZGV2aWNlLT5oYW5kbGUsCiAJCSAgICBzYXNfZGV2aWNlLT5zYXNfYWRkcmVzc19wYXJlbnQpKSB7CiAJCQlfc2NzaWhfc2FzX2RldmljZV9yZW1vdmUoaW9jLCBzYXNfZGV2aWNlKTsKQEAgLTY4MTIsNiArNzI4Nyw5IEBACiAJCWxpc3RfbW92ZV90YWlsKCZzYXNfZGV2aWNlLT5saXN0LCAmaW9jLT5zYXNfZGV2aWNlX2xpc3QpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOwogCisJCWlmIChpb2MtPmhpZGVfZHJpdmVzKQorCQkJY29udGludWU7CisKIAkJaWYgKCFtcHQyc2FzX3RyYW5zcG9ydF9wb3J0X2FkZChpb2MsIHNhc19kZXZpY2UtPmhhbmRsZSwKIAkJICAgIHNhc19kZXZpY2UtPnNhc19hZGRyZXNzX3BhcmVudCkpIHsKIAkJCV9zY3NpaF9zYXNfZGV2aWNlX3JlbW92ZShpb2MsIHNhc19kZXZpY2UpOwpAQCAtNjg4Miw2ICs3MzYwLDExIEBACiAJaW9jLT5pZCA9IG1wdF9pZHMrKzsKIAlzcHJpbnRmKGlvYy0+bmFtZSwgIiVzJWQiLCBNUFQyU0FTX0RSSVZFUl9OQU1FLCBpb2MtPmlkKTsKIAlpb2MtPnBkZXYgPSBwZGV2OworCWlmIChpZC0+ZGV2aWNlID09IE1QSTJfTUZHUEFHRV9ERVZJRF9TU1M2MjAwKSB7CisJCWlvYy0+aXNfd2FycGRyaXZlID0gMTsKKwkJaW9jLT5oaWRlX2lyX21zZyA9IDE7CisJfSBlbHNlCisJCWlvYy0+bWZnX3BnMTBfaGlkZV9mbGFnID0gTUZHX1BBR0UxMF9FWFBPU0VfQUxMX0RJU0tTOwogCWlvYy0+c2NzaV9pb19jYl9pZHggPSBzY3NpX2lvX2NiX2lkeDsKIAlpb2MtPnRtX2NiX2lkeCA9IHRtX2NiX2lkeDsKIAlpb2MtPmN0bF9jYl9pZHggPSBjdGxfY2JfaWR4OwpAQCAtNjk0Nyw2ICs3NDMwLDIwIEBACiAJfQogCiAJaW9jLT53YWl0X2Zvcl9wb3J0X2VuYWJsZV90b19jb21wbGV0ZSA9IDA7CisJaWYgKGlvYy0+aXNfd2FycGRyaXZlKSB7CisJCWlmIChpb2MtPm1mZ19wZzEwX2hpZGVfZmxhZyA9PSAgTUZHX1BBR0UxMF9FWFBPU0VfQUxMX0RJU0tTKQorCQkJaW9jLT5oaWRlX2RyaXZlcyA9IDA7CisJCWVsc2UgaWYgKGlvYy0+bWZnX3BnMTBfaGlkZV9mbGFnID09ICBNRkdfUEFHRTEwX0hJREVfQUxMX0RJU0tTKQorCQkJaW9jLT5oaWRlX2RyaXZlcyA9IDE7CisJCWVsc2UgeworCQkJaWYgKF9zY3NpaF9nZXRfbnVtX3ZvbHVtZXMoaW9jKSkKKwkJCQlpb2MtPmhpZGVfZHJpdmVzID0gMTsKKwkJCWVsc2UKKwkJCQlpb2MtPmhpZGVfZHJpdmVzID0gMDsKKwkJfQorCX0gZWxzZQorCQlpb2MtPmhpZGVfZHJpdmVzID0gMDsKKwogCV9zY3NpaF9wcm9iZV9kZXZpY2VzKGlvYyk7CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tdnNhcy9LY29uZmlnIGIvZHJpdmVycy9zY3NpL212c2FzL0tjb25maWcKaW5kZXggNmRlN2FmMi4uYzgyYjAxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL212c2FzL0tjb25maWcKKysrIGIvZHJpdmVycy9zY3NpL212c2FzL0tjb25maWcKQEAgLTMsNiArMyw3IEBACiAjCiAjIENvcHlyaWdodCAyMDA3IFJlZCBIYXQsIEluYy4KICMgQ29weXJpZ2h0IDIwMDggTWFydmVsbC4gPGtld2VpQG1hcnZlbGwuY29tPgorIyBDb3B5cmlnaHQgMjAwOS0yMDAxMSBNYXJ2ZWxsLiA8eXV4aWFuZ2xAbWFydmVsbC5jb20+CiAjCiAjIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciBHUEx2Mi4KICMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tdnNhcy9NYWtlZmlsZSBiL2RyaXZlcnMvc2NzaS9tdnNhcy9NYWtlZmlsZQppbmRleCBmZmJmNzU5Li44N2IyMzFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXZzYXMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zY3NpL212c2FzL01ha2VmaWxlCkBAIC0zLDYgKzMsNyBAQAogIwogIyBDb3B5cmlnaHQgMjAwNyBSZWQgSGF0LCBJbmMuCiAjIENvcHlyaWdodCAyMDA4IE1hcnZlbGwuIDxrZXdlaUBtYXJ2ZWxsLmNvbT4KKyMgQ29weXJpZ2h0IDIwMDktMjAxMSBNYXJ2ZWxsLiA8eXV4aWFuZ2xAbWFydmVsbC5jb20+CiAjCiAjIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciBHUEx2Mi4KICMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl82NHh4LmMgYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfNjR4eC5jCmluZGV4IGFmYzdmNmYuLjEzYzk2MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl82NHh4LmMKKysrIGIvZHJpdmVycy9zY3NpL212c2FzL212XzY0eHguYwpAQCAtMyw2ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgMjAwNyBSZWQgSGF0LCBJbmMuCiAgKiBDb3B5cmlnaHQgMjAwOCBNYXJ2ZWxsLiA8a2V3ZWlAbWFydmVsbC5jb20+CisgKiBDb3B5cmlnaHQgMjAwOS0yMDExIE1hcnZlbGwuIDx5dXhpYW5nbEBtYXJ2ZWxsLmNvbT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL212c2FzL212XzY0eHguaCBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl82NHh4LmgKaW5kZXggNDJlOTQ3ZC4uNTQ1ODg5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL212c2FzL212XzY0eHguaAorKysgYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfNjR4eC5oCkBAIC0zLDYgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAyMDA3IFJlZCBIYXQsIEluYy4KICAqIENvcHlyaWdodCAyMDA4IE1hcnZlbGwuIDxrZXdlaUBtYXJ2ZWxsLmNvbT4KKyAqIENvcHlyaWdodCAyMDA5LTIwMTEgTWFydmVsbC4gPHl1eGlhbmdsQG1hcnZlbGwuY29tPgogICoKICAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciBHUEx2Mi4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfOTR4eC5jIGIvZHJpdmVycy9zY3NpL212c2FzL212Xzk0eHguYwppbmRleCBlZWQ0YzVjLi43ODE2MmMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfOTR4eC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl85NHh4LmMKQEAgLTMsNiArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDcgUmVkIEhhdCwgSW5jLgogICogQ29weXJpZ2h0IDIwMDggTWFydmVsbC4gPGtld2VpQG1hcnZlbGwuY29tPgorICogQ29weXJpZ2h0IDIwMDktMjAxMSBNYXJ2ZWxsLiA8eXV4aWFuZ2xAbWFydmVsbC5jb20+CiAgKgogICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl85NHh4LmggYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfOTR4eC5oCmluZGV4IDIzZWQ5YjEuLjg4MzViZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl85NHh4LmgKKysrIGIvZHJpdmVycy9zY3NpL212c2FzL212Xzk0eHguaApAQCAtMyw2ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgMjAwNyBSZWQgSGF0LCBJbmMuCiAgKiBDb3B5cmlnaHQgMjAwOCBNYXJ2ZWxsLiA8a2V3ZWlAbWFydmVsbC5jb20+CisgKiBDb3B5cmlnaHQgMjAwOS0yMDExIE1hcnZlbGwuIDx5dXhpYW5nbEBtYXJ2ZWxsLmNvbT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL212c2FzL212X2NoaXBzLmggYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfY2hpcHMuaAppbmRleCBhNjdlMWM0Li4xNzUzYTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfY2hpcHMuaAorKysgYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfY2hpcHMuaApAQCAtMyw2ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgMjAwNyBSZWQgSGF0LCBJbmMuCiAgKiBDb3B5cmlnaHQgMjAwOCBNYXJ2ZWxsLiA8a2V3ZWlAbWFydmVsbC5jb20+CisgKiBDb3B5cmlnaHQgMjAwOS0yMDExIE1hcnZlbGwuIDx5dXhpYW5nbEBtYXJ2ZWxsLmNvbT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL212c2FzL212X2RlZnMuaCBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9kZWZzLmgKaW5kZXggMTg0OWRhMS4uYmMwMGM5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL212c2FzL212X2RlZnMuaAorKysgYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfZGVmcy5oCkBAIC0zLDYgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAyMDA3IFJlZCBIYXQsIEluYy4KICAqIENvcHlyaWdodCAyMDA4IE1hcnZlbGwuIDxrZXdlaUBtYXJ2ZWxsLmNvbT4KKyAqIENvcHlyaWdodCAyMDA5LTIwMTEgTWFydmVsbC4gPHl1eGlhbmdsQG1hcnZlbGwuY29tPgogICoKICAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciBHUEx2Mi4KICAqCkBAIC0zNCw2ICszNSw4IEBACiAJY2hpcF82NDg1LAogCWNoaXBfOTQ4MCwKIAljaGlwXzkxODAsCisJY2hpcF85NDQ1LAorCWNoaXBfOTQ4NSwKIAljaGlwXzEzMDAsCiAJY2hpcF8xMzIwCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL212c2FzL212X2luaXQuYyBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9pbml0LmMKaW5kZXggOTM4ZDA0NS4uOTBiNjM2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL212c2FzL212X2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfaW5pdC5jCkBAIC0zLDYgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAyMDA3IFJlZCBIYXQsIEluYy4KICAqIENvcHlyaWdodCAyMDA4IE1hcnZlbGwuIDxrZXdlaUBtYXJ2ZWxsLmNvbT4KKyAqIENvcHlyaWdodCAyMDA5LTIwMTEgTWFydmVsbC4gPHl1eGlhbmdsQG1hcnZlbGwuY29tPgogICoKICAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciBHUEx2Mi4KICAqCkBAIC0yNSwxMyArMjYsMjQgQEAKIAogI2luY2x1ZGUgIm12X3Nhcy5oIgogCitzdGF0aWMgaW50IGxsZGRfbWF4X2V4ZWN1dGVfbnVtID0gMTsKK21vZHVsZV9wYXJhbV9uYW1lZChjb2xsZWN0b3IsIGxsZGRfbWF4X2V4ZWN1dGVfbnVtLCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhjb2xsZWN0b3IsICJcbiIKKwkiXHRJZiBncmVhdGVyIHRoYW4gb25lLCB0ZWxscyB0aGUgU0FTIExheWVyIHRvIHJ1biBpbiBUYXNrIENvbGxlY3RvclxuIgorCSJcdE1vZGUuICBJZiAxIG9yIDAsIHRlbGxzIHRoZSBTQVMgTGF5ZXIgdG8gcnVuIGluIERpcmVjdCBNb2RlLlxuIgorCSJcdFRoZSBtdnNhcyBTQVMgTExERCBzdXBwb3J0cyBib3RoIG1vZGVzLlxuIgorCSJcdERlZmF1bHQ6IDEgKERpcmVjdCBNb2RlKS5cbiIpOworCiBzdGF0aWMgc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlICptdnNfc3R0Oworc3RydWN0IGttZW1fY2FjaGUgKm12c190YXNrX2xpc3RfY2FjaGU7CiBzdGF0aWMgY29uc3Qgc3RydWN0IG12c19jaGlwX2luZm8gbXZzX2NoaXBzW10gPSB7CiAJW2NoaXBfNjMyMF0gPQl7IDEsIDIsIDB4NDAwLCAxNywgMTYsICA5LCAmbXZzXzY0eHhfZGlzcGF0Y2gsIH0sCiAJW2NoaXBfNjQ0MF0gPQl7IDEsIDQsIDB4NDAwLCAxNywgMTYsICA5LCAmbXZzXzY0eHhfZGlzcGF0Y2gsIH0sCiAJW2NoaXBfNjQ4NV0gPQl7IDEsIDgsIDB4ODAwLCAzMywgMzIsIDEwLCAmbXZzXzY0eHhfZGlzcGF0Y2gsIH0sCiAJW2NoaXBfOTE4MF0gPQl7IDIsIDQsIDB4ODAwLCAxNywgNjQsICA5LCAmbXZzXzk0eHhfZGlzcGF0Y2gsIH0sCiAJW2NoaXBfOTQ4MF0gPQl7IDIsIDQsIDB4ODAwLCAxNywgNjQsICA5LCAmbXZzXzk0eHhfZGlzcGF0Y2gsIH0sCisJW2NoaXBfOTQ0NV0gPQl7IDEsIDQsIDB4ODAwLCAxNywgNjQsIDExLCAmbXZzXzk0eHhfZGlzcGF0Y2gsIH0sCisJW2NoaXBfOTQ4NV0gPQl7IDIsIDQsIDB4ODAwLCAxNywgNjQsIDExLCAmbXZzXzk0eHhfZGlzcGF0Y2gsIH0sCiAJW2NoaXBfMTMwMF0gPQl7IDEsIDQsIDB4NDAwLCAxNywgMTYsICA5LCAmbXZzXzY0eHhfZGlzcGF0Y2gsIH0sCiAJW2NoaXBfMTMyMF0gPQl7IDIsIDQsIDB4ODAwLCAxNywgNjQsICA5LCAmbXZzXzk0eHhfZGlzcGF0Y2gsIH0sCiB9OwpAQCAtMTA3LDcgKzExOSw2IEBACiAKIHN0YXRpYyB2b2lkIG12c19mcmVlKHN0cnVjdCBtdnNfaW5mbyAqbXZpKQogewotCWludCBpOwogCXN0cnVjdCBtdnNfd3EgKm13cTsKIAlpbnQgc2xvdF9ucjsKIApAQCAtMTE5LDEyICsxMzAsOCBAQAogCWVsc2UKIAkJc2xvdF9uciA9IE1WU19TTE9UUzsKIAotCWZvciAoaSA9IDA7IGkgPCBtdmktPnRhZ3NfbnVtOyBpKyspIHsKLQkJc3RydWN0IG12c19zbG90X2luZm8gKnNsb3QgPSAmbXZpLT5zbG90X2luZm9baV07Ci0JCWlmIChzbG90LT5idWYpCi0JCQlkbWFfZnJlZV9jb2hlcmVudChtdmktPmRldiwgTVZTX1NMT1RfQlVGX1NaLAotCQkJCQkgIHNsb3QtPmJ1Ziwgc2xvdC0+YnVmX2RtYSk7Ci0JfQorCWlmIChtdmktPmRtYV9wb29sKQorCQlwY2lfcG9vbF9kZXN0cm95KG12aS0+ZG1hX3Bvb2wpOwogCiAJaWYgKG12aS0+dHgpCiAJCWRtYV9mcmVlX2NvaGVyZW50KG12aS0+ZGV2LApAQCAtMjEzLDYgKzIyMCw3IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBtdnNfYWxsb2Moc3RydWN0IG12c19pbmZvICptdmksIHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQogewogCWludCBpID0gMCwgc2xvdF9ucjsKKwljaGFyIHBvb2xfbmFtZVszMl07CiAKIAlpZiAobXZpLT5mbGFncyAmIE1WRl9GTEFHX1NPQykKIAkJc2xvdF9uciA9IE1WU19TT0NfU0xPVFM7CkBAIC0yNzIsMTggKzI4MCwxNCBAQAogCWlmICghbXZpLT5idWxrX2J1ZmZlcikKIAkJZ290byBlcnJfb3V0OwogI2VuZGlmCi0JZm9yIChpID0gMDsgaSA8IHNsb3RfbnI7IGkrKykgewotCQlzdHJ1Y3QgbXZzX3Nsb3RfaW5mbyAqc2xvdCA9ICZtdmktPnNsb3RfaW5mb1tpXTsKLQotCQlzbG90LT5idWYgPSBkbWFfYWxsb2NfY29oZXJlbnQobXZpLT5kZXYsIE1WU19TTE9UX0JVRl9TWiwKLQkJCQkJICAgICAgICZzbG90LT5idWZfZG1hLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFzbG90LT5idWYpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHImZhaWxlZCB0byBhbGxvY2F0ZSBzbG90LT5idWYuXG4iKTsKKwlzcHJpbnRmKHBvb2xfbmFtZSwgIiVzJWQiLCAibXZzX2RtYV9wb29sIiwgbXZpLT5pZCk7CisJbXZpLT5kbWFfcG9vbCA9IHBjaV9wb29sX2NyZWF0ZShwb29sX25hbWUsIG12aS0+cGRldiwgTVZTX1NMT1RfQlVGX1NaLCAxNiwgMCk7CisJaWYgKCFtdmktPmRtYV9wb29sKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiZmFpbGVkIHRvIGNyZWF0ZSBkbWEgcG9vbCAlcy5cbiIsIHBvb2xfbmFtZSk7CiAJCQlnb3RvIGVycl9vdXQ7Ci0JCX0KLQkJbWVtc2V0KHNsb3QtPmJ1ZiwgMCwgTVZTX1NMT1RfQlVGX1NaKTsKLQkJKyttdmktPnRhZ3NfbnVtOwogCX0KKwltdmktPnRhZ3NfbnVtID0gc2xvdF9ucjsKKwogCS8qIEluaXRpYWxpemUgdGFncyAqLwogCW12c190YWdfaW5pdChtdmkpOwogCXJldHVybiAwOwpAQCAtNDg0LDcgKzQ4OCw3IEBACiAKIAlzaGEtPm51bV9waHlzID0gbnJfY29yZSAqIGNoaXBfaW5mby0+bl9waHk7CiAKLQlzaGEtPmxsZGRfbWF4X2V4ZWN1dGVfbnVtID0gMTsKKwlzaGEtPmxsZGRfbWF4X2V4ZWN1dGVfbnVtID0gbGxkZF9tYXhfZXhlY3V0ZV9udW07CiAKIAlpZiAobXZpLT5mbGFncyAmIE1WRl9GTEFHX1NPQykKIAkJY2FuX3F1ZXVlID0gTVZTX1NPQ19DQU5fUVVFVUU7CkBAIC02NzAsNiArNjc0LDI0IEBACiAJeyBQQ0lfVkRFVklDRShUVEksIDB4Mjc0MCksIGNoaXBfOTQ4MCB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDI3NDQpLCBjaGlwXzk0ODAgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHgyNzYwKSwgY2hpcF85NDgwIH0sCisJeworCQkudmVuZG9yCQk9IDB4MWI0YiwKKwkJLmRldmljZQkJPSAweDk0NDUsCisJCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAorCQkuc3ViZGV2aWNlCT0gMHg5NDgwLAorCQkuY2xhc3MJCT0gMCwKKwkJLmNsYXNzX21hc2sJPSAwLAorCQkuZHJpdmVyX2RhdGEJPSBjaGlwXzk0NDUsCisJfSwKKwl7CisJCS52ZW5kb3IJCT0gMHgxYjRiLAorCQkuZGV2aWNlCQk9IDB4OTQ4NSwKKwkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsCisJCS5zdWJkZXZpY2UJPSAweDk0ODAsCisJCS5jbGFzcwkJPSAwLAorCQkuY2xhc3NfbWFzawk9IDAsCisJCS5kcml2ZXJfZGF0YQk9IGNoaXBfOTQ4NSwKKwl9LAogCiAJeyB9CS8qIHRlcm1pbmF0ZSBsaXN0ICovCiB9OwpAQCAtNjkwLDYgKzcxMiwxNCBAQAogCWlmICghbXZzX3N0dCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwltdnNfdGFza19saXN0X2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoIm12c190YXNrX2xpc3QiLCBzaXplb2Yoc3RydWN0IG12c190YXNrX2xpc3QpLAorCQkJCQkJCSAwLCBTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwpOworCWlmICghbXZzX3Rhc2tfbGlzdF9jYWNoZSkgeworCQlyYyA9IC1FTk9NRU07CisJCW12X3ByaW50aygiJXM6IG12c190YXNrX2xpc3RfY2FjaGUgYWxsb2MgZmFpbGVkISBcbiIsIF9fZnVuY19fKTsKKwkJZ290byBlcnJfb3V0OworCX0KKwogCXJjID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmbXZzX3BjaV9kcml2ZXIpOwogCiAJaWYgKHJjKQpAQCAtNzA2LDYgKzczNiw3IEBACiB7CiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZtdnNfcGNpX2RyaXZlcik7CiAJc2FzX3JlbGVhc2VfdHJhbnNwb3J0KG12c19zdHQpOworCWttZW1fY2FjaGVfZGVzdHJveShtdnNfdGFza19saXN0X2NhY2hlKTsKIH0KIAogbW9kdWxlX2luaXQobXZzX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL212c2FzL212X3Nhcy5jIGIvZHJpdmVycy9zY3NpL212c2FzL212X3Nhcy5jCmluZGV4IGFkZWRhYTkuLjBlZjI3NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9zYXMuYworKysgYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfc2FzLmMKQEAgLTMsNiArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDcgUmVkIEhhdCwgSW5jLgogICogQ29weXJpZ2h0IDIwMDggTWFydmVsbC4gPGtld2VpQG1hcnZlbGwuY29tPgorICogQ29weXJpZ2h0IDIwMDktMjAxMSBNYXJ2ZWxsLiA8eXV4aWFuZ2xAbWFydmVsbC5jb20+CiAgKgogICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyLgogICoKQEAgLTg2MiwxNzggKzg2MywyODYgQEAKIH0KIAogI2RlZmluZQlERVZfSVNfR09ORShtdmlfZGV2KQkoKCFtdmlfZGV2IHx8IChtdmlfZGV2LT5kZXZfdHlwZSA9PSBOT19ERVZJQ0UpKSkKLXN0YXRpYyBpbnQgbXZzX3Rhc2tfZXhlYyhzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssIGNvbnN0IGludCBudW0sIGdmcF90IGdmcF9mbGFncywKLQkJCQlzdHJ1Y3QgY29tcGxldGlvbiAqY29tcGxldGlvbixpbnQgaXNfdG1mLAotCQkJCXN0cnVjdCBtdnNfdG1mX3Rhc2sgKnRtZikKK3N0YXRpYyBpbnQgbXZzX3Rhc2tfcHJlcChzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssIHN0cnVjdCBtdnNfaW5mbyAqbXZpLCBpbnQgaXNfdG1mLAorCQkJCXN0cnVjdCBtdnNfdG1mX3Rhc2sgKnRtZiwgaW50ICpwYXNzKQogewogCXN0cnVjdCBkb21haW5fZGV2aWNlICpkZXYgPSB0YXNrLT5kZXY7Ci0Jc3RydWN0IG12c19kZXZpY2UgKm12aV9kZXYgPSAoc3RydWN0IG12c19kZXZpY2UgKilkZXYtPmxsZGRfZGV2OwotCXN0cnVjdCBtdnNfaW5mbyAqbXZpID0gbXZpX2Rldi0+bXZpX2luZm87CisJc3RydWN0IG12c19kZXZpY2UgKm12aV9kZXYgPSBkZXYtPmxsZGRfZGV2OwogCXN0cnVjdCBtdnNfdGFza19leGVjX2luZm8gdGVpOwotCXN0cnVjdCBzYXNfdGFzayAqdCA9IHRhc2s7CiAJc3RydWN0IG12c19zbG90X2luZm8gKnNsb3Q7Ci0JdTMyIHRhZyA9IDB4ZGVhZGJlZWYsIHJjLCBuX2VsZW0gPSAwOwotCXUzMiBuID0gbnVtLCBwYXNzID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gMCwgIGZsYWdzX2xpYnNhcyA9IDA7CisJdTMyIHRhZyA9IDB4ZGVhZGJlZWYsIG5fZWxlbSA9IDA7CisJaW50IHJjID0gMDsKIAogCWlmICghZGV2LT5wb3J0KSB7Ci0JCXN0cnVjdCB0YXNrX3N0YXR1c19zdHJ1Y3QgKnRzbSA9ICZ0LT50YXNrX3N0YXR1czsKKwkJc3RydWN0IHRhc2tfc3RhdHVzX3N0cnVjdCAqdHNtID0gJnRhc2stPnRhc2tfc3RhdHVzOwogCiAJCXRzbS0+cmVzcCA9IFNBU19UQVNLX1VOREVMSVZFUkVEOwogCQl0c20tPnN0YXQgPSBTQVNfUEhZX0RPV047CisJCS8qCisJCSAqIGxpYnNhcyB3aWxsIHVzZSBkZXYtPnBvcnQsIHNob3VsZAorCQkgKiBub3QgY2FsbCB0YXNrX2RvbmUgZm9yIHNhdGEKKwkJICovCiAJCWlmIChkZXYtPmRldl90eXBlICE9IFNBVEFfREVWKQotCQkJdC0+dGFza19kb25lKHQpOwotCQlyZXR1cm4gMDsKKwkJCXRhc2stPnRhc2tfZG9uZSh0YXNrKTsKKwkJcmV0dXJuIHJjOwogCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZtdmktPmxvY2ssIGZsYWdzKTsKLQlkbyB7Ci0JCWRldiA9IHQtPmRldjsKLQkJbXZpX2RldiA9IGRldi0+bGxkZF9kZXY7Ci0JCWlmIChERVZfSVNfR09ORShtdmlfZGV2KSkgewotCQkJaWYgKG12aV9kZXYpCi0JCQkJbXZfZHByaW50aygiZGV2aWNlICVkIG5vdCByZWFkeS5cbiIsCi0JCQkJCW12aV9kZXYtPmRldmljZV9pZCk7Ci0JCQllbHNlCi0JCQkJbXZfZHByaW50aygiZGV2aWNlICUwMTZsbHggbm90IHJlYWR5LlxuIiwKLQkJCQkJU0FTX0FERFIoZGV2LT5zYXNfYWRkcikpOworCWlmIChERVZfSVNfR09ORShtdmlfZGV2KSkgeworCQlpZiAobXZpX2RldikKKwkJCW12X2RwcmludGsoImRldmljZSAlZCBub3QgcmVhZHkuXG4iLAorCQkJCW12aV9kZXYtPmRldmljZV9pZCk7CisJCWVsc2UKKwkJCW12X2RwcmludGsoImRldmljZSAlMDE2bGx4IG5vdCByZWFkeS5cbiIsCisJCQkJU0FTX0FERFIoZGV2LT5zYXNfYWRkcikpOwogCiAJCQlyYyA9IFNBU19QSFlfRE9XTjsKLQkJCWdvdG8gb3V0X2RvbmU7Ci0JCX0KKwkJCXJldHVybiByYzsKKwl9CisJdGVpLnBvcnQgPSBkZXYtPnBvcnQtPmxsZGRfcG9ydDsKKwlpZiAodGVpLnBvcnQgJiYgIXRlaS5wb3J0LT5wb3J0X2F0dGFjaGVkICYmICF0bWYpIHsKKwkJaWYgKHNhc19wcm90b2NvbF9hdGEodGFzay0+dGFza19wcm90bykpIHsKKwkJCXN0cnVjdCB0YXNrX3N0YXR1c19zdHJ1Y3QgKnRzID0gJnRhc2stPnRhc2tfc3RhdHVzOworCQkJbXZfZHByaW50aygiU0FUQS9TVFAgcG9ydCAlZCBkb2VzIG5vdCBhdHRhY2giCisJCQkJCSJkZXZpY2UuXG4iLCBkZXYtPnBvcnQtPmlkKTsKKwkJCXRzLT5yZXNwID0gU0FTX1RBU0tfQ09NUExFVEU7CisJCQl0cy0+c3RhdCA9IFNBU19QSFlfRE9XTjsKIAotCQlpZiAoZGV2LT5wb3J0LT5pZCA+PSBtdmktPmNoaXAtPm5fcGh5KQotCQkJdGVpLnBvcnQgPSAmbXZpLT5wb3J0W2Rldi0+cG9ydC0+aWQgLSBtdmktPmNoaXAtPm5fcGh5XTsKLQkJZWxzZQotCQkJdGVpLnBvcnQgPSAmbXZpLT5wb3J0W2Rldi0+cG9ydC0+aWRdOworCQkJdGFzay0+dGFza19kb25lKHRhc2spOwogCi0JCWlmICh0ZWkucG9ydCAmJiAhdGVpLnBvcnQtPnBvcnRfYXR0YWNoZWQpIHsKLQkJCWlmIChzYXNfcHJvdG9jb2xfYXRhKHQtPnRhc2tfcHJvdG8pKSB7Ci0JCQkJc3RydWN0IHRhc2tfc3RhdHVzX3N0cnVjdCAqdHMgPSAmdC0+dGFza19zdGF0dXM7Ci0KLQkJCQltdl9kcHJpbnRrKCJwb3J0ICVkIGRvZXMgbm90IgotCQkJCQkiYXR0YWNoZWQgZGV2aWNlLlxuIiwgZGV2LT5wb3J0LT5pZCk7Ci0JCQkJdHMtPnN0YXQgPSBTQVNfUFJPVE9fUkVTUE9OU0U7Ci0JCQkJdHMtPnN0YXQgPSBTQVNfUEhZX0RPV047Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShkZXYtPnNhdGFfZGV2LmFwLT5sb2NrLAotCQkJCQkJICAgICAgIGZsYWdzX2xpYnNhcyk7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXZpLT5sb2NrLCBmbGFncyk7Ci0JCQkJdC0+dGFza19kb25lKHQpOwotCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZtdmktPmxvY2ssIGZsYWdzKTsKLQkJCQlzcGluX2xvY2tfaXJxc2F2ZShkZXYtPnNhdGFfZGV2LmFwLT5sb2NrLAotCQkJCQkJICBmbGFnc19saWJzYXMpOwotCQkJCWlmIChuID4gMSkKLQkJCQkJdCA9IGxpc3RfZW50cnkodC0+bGlzdC5uZXh0LAotCQkJCQkJICAgICAgIHN0cnVjdCBzYXNfdGFzaywgbGlzdCk7Ci0JCQkJY29udGludWU7Ci0JCQl9IGVsc2UgewotCQkJCXN0cnVjdCB0YXNrX3N0YXR1c19zdHJ1Y3QgKnRzID0gJnQtPnRhc2tfc3RhdHVzOwotCQkJCXRzLT5yZXNwID0gU0FTX1RBU0tfVU5ERUxJVkVSRUQ7Ci0JCQkJdHMtPnN0YXQgPSBTQVNfUEhZX0RPV047Ci0JCQkJdC0+dGFza19kb25lKHQpOwotCQkJCWlmIChuID4gMSkKLQkJCQkJdCA9IGxpc3RfZW50cnkodC0+bGlzdC5uZXh0LAotCQkJCQkJCXN0cnVjdCBzYXNfdGFzaywgbGlzdCk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoIXNhc19wcm90b2NvbF9hdGEodC0+dGFza19wcm90bykpIHsKLQkJCWlmICh0LT5udW1fc2NhdHRlcikgewotCQkJCW5fZWxlbSA9IGRtYV9tYXBfc2cobXZpLT5kZXYsCi0JCQkJCQkgICAgdC0+c2NhdHRlciwKLQkJCQkJCSAgICB0LT5udW1fc2NhdHRlciwKLQkJCQkJCSAgICB0LT5kYXRhX2Rpcik7Ci0JCQkJaWYgKCFuX2VsZW0pIHsKLQkJCQkJcmMgPSAtRU5PTUVNOwotCQkJCQlnb3RvIGVycl9vdXQ7Ci0JCQkJfQotCQkJfQogCQl9IGVsc2UgewotCQkJbl9lbGVtID0gdC0+bnVtX3NjYXR0ZXI7CisJCQlzdHJ1Y3QgdGFza19zdGF0dXNfc3RydWN0ICp0cyA9ICZ0YXNrLT50YXNrX3N0YXR1czsKKwkJCW12X2RwcmludGsoIlNBUyBwb3J0ICVkIGRvZXMgbm90IGF0dGFjaCIKKwkJCQkiZGV2aWNlLlxuIiwgZGV2LT5wb3J0LT5pZCk7CisJCQl0cy0+cmVzcCA9IFNBU19UQVNLX1VOREVMSVZFUkVEOworCQkJdHMtPnN0YXQgPSBTQVNfUEhZX0RPV047CisJCQl0YXNrLT50YXNrX2RvbmUodGFzayk7CiAJCX0KKwkJcmV0dXJuIHJjOworCX0KIAotCQlyYyA9IG12c190YWdfYWxsb2MobXZpLCAmdGFnKTsKLQkJaWYgKHJjKQotCQkJZ290byBlcnJfb3V0OwotCi0JCXNsb3QgPSAmbXZpLT5zbG90X2luZm9bdGFnXTsKLQotCi0JCXQtPmxsZGRfdGFzayA9IE5VTEw7Ci0JCXNsb3QtPm5fZWxlbSA9IG5fZWxlbTsKLQkJc2xvdC0+c2xvdF90YWcgPSB0YWc7Ci0JCW1lbXNldChzbG90LT5idWYsIDAsIE1WU19TTE9UX0JVRl9TWik7Ci0KLQkJdGVpLnRhc2sgPSB0OwotCQl0ZWkuaGRyID0gJm12aS0+c2xvdFt0YWddOwotCQl0ZWkudGFnID0gdGFnOwotCQl0ZWkubl9lbGVtID0gbl9lbGVtOwotCQlzd2l0Y2ggKHQtPnRhc2tfcHJvdG8pIHsKLQkJY2FzZSBTQVNfUFJPVE9DT0xfU01QOgotCQkJcmMgPSBtdnNfdGFza19wcmVwX3NtcChtdmksICZ0ZWkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0FTX1BST1RPQ09MX1NTUDoKLQkJCXJjID0gbXZzX3Rhc2tfcHJlcF9zc3AobXZpLCAmdGVpLCBpc190bWYsIHRtZik7Ci0JCQlicmVhazsKLQkJY2FzZSBTQVNfUFJPVE9DT0xfU0FUQToKLQkJY2FzZSBTQVNfUFJPVE9DT0xfU1RQOgotCQljYXNlIFNBU19QUk9UT0NPTF9TQVRBIHwgU0FTX1BST1RPQ09MX1NUUDoKLQkJCXJjID0gbXZzX3Rhc2tfcHJlcF9hdGEobXZpLCAmdGVpKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgbXZpLT5kZXYsCi0JCQkJICAgInVua25vd24gc2FzX3Rhc2sgcHJvdG86IDB4JXhcbiIsCi0JCQkJICAgdC0+dGFza19wcm90byk7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCQlicmVhazsKKwlpZiAoIXNhc19wcm90b2NvbF9hdGEodGFzay0+dGFza19wcm90bykpIHsKKwkJaWYgKHRhc2stPm51bV9zY2F0dGVyKSB7CisJCQluX2VsZW0gPSBkbWFfbWFwX3NnKG12aS0+ZGV2LAorCQkJCQkgICAgdGFzay0+c2NhdHRlciwKKwkJCQkJICAgIHRhc2stPm51bV9zY2F0dGVyLAorCQkJCQkgICAgdGFzay0+ZGF0YV9kaXIpOworCQkJaWYgKCFuX2VsZW0pIHsKKwkJCQlyYyA9IC1FTk9NRU07CisJCQkJZ290byBwcmVwX291dDsKKwkJCX0KIAkJfQorCX0gZWxzZSB7CisJCW5fZWxlbSA9IHRhc2stPm51bV9zY2F0dGVyOworCX0KIAotCQlpZiAocmMpIHsKLQkJCW12X2RwcmludGsoInJjIGlzICV4XG4iLCByYyk7Ci0JCQlnb3RvIGVycl9vdXRfdGFnOwotCQl9Ci0JCXNsb3QtPnRhc2sgPSB0OwotCQlzbG90LT5wb3J0ID0gdGVpLnBvcnQ7Ci0JCXQtPmxsZGRfdGFzayA9IHNsb3Q7Ci0JCWxpc3RfYWRkX3RhaWwoJnNsb3QtPmVudHJ5LCAmdGVpLnBvcnQtPmxpc3QpOwotCQkvKiBUT0RPOiBzZWxlY3Qgbm9ybWFsIG9yIGhpZ2ggcHJpb3JpdHkgKi8KLQkJc3Bpbl9sb2NrKCZ0LT50YXNrX3N0YXRlX2xvY2spOwotCQl0LT50YXNrX3N0YXRlX2ZsYWdzIHw9IFNBU19UQVNLX0FUX0lOSVRJQVRPUjsKLQkJc3Bpbl91bmxvY2soJnQtPnRhc2tfc3RhdGVfbG9jayk7CisJcmMgPSBtdnNfdGFnX2FsbG9jKG12aSwgJnRhZyk7CisJaWYgKHJjKQorCQlnb3RvIGVycl9vdXQ7CiAKLQkJbXZzX2hiYV9tZW1vcnlfZHVtcChtdmksIHRhZywgdC0+dGFza19wcm90byk7Ci0JCW12aV9kZXYtPnJ1bm5pbmdfcmVxKys7Ci0JCSsrcGFzczsKLQkJbXZpLT50eF9wcm9kID0gKG12aS0+dHhfcHJvZCArIDEpICYgKE1WU19DSElQX1NMT1RfU1ogLSAxKTsKLQkJaWYgKG4gPiAxKQotCQkJdCA9IGxpc3RfZW50cnkodC0+bGlzdC5uZXh0LCBzdHJ1Y3Qgc2FzX3Rhc2ssIGxpc3QpOwotCQlpZiAobGlrZWx5KHBhc3MpKQotCQkJTVZTX0NISVBfRElTUC0+c3RhcnRfZGVsaXZlcnkobXZpLCAobXZpLT50eF9wcm9kIC0gMSkgJgotCQkJCQkJICAgICAgKE1WU19DSElQX1NMT1RfU1ogLSAxKSk7CisJc2xvdCA9ICZtdmktPnNsb3RfaW5mb1t0YWddOwogCi0JfSB3aGlsZSAoLS1uKTsKLQlyYyA9IDA7Ci0JZ290byBvdXRfZG9uZTsKKwl0YXNrLT5sbGRkX3Rhc2sgPSBOVUxMOworCXNsb3QtPm5fZWxlbSA9IG5fZWxlbTsKKwlzbG90LT5zbG90X3RhZyA9IHRhZzsKIAorCXNsb3QtPmJ1ZiA9IHBjaV9wb29sX2FsbG9jKG12aS0+ZG1hX3Bvb2wsIEdGUF9BVE9NSUMsICZzbG90LT5idWZfZG1hKTsKKwlpZiAoIXNsb3QtPmJ1ZikKKwkJZ290byBlcnJfb3V0X3RhZzsKKwltZW1zZXQoc2xvdC0+YnVmLCAwLCBNVlNfU0xPVF9CVUZfU1opOworCisJdGVpLnRhc2sgPSB0YXNrOworCXRlaS5oZHIgPSAmbXZpLT5zbG90W3RhZ107CisJdGVpLnRhZyA9IHRhZzsKKwl0ZWkubl9lbGVtID0gbl9lbGVtOworCXN3aXRjaCAodGFzay0+dGFza19wcm90bykgeworCWNhc2UgU0FTX1BST1RPQ09MX1NNUDoKKwkJcmMgPSBtdnNfdGFza19wcmVwX3NtcChtdmksICZ0ZWkpOworCQlicmVhazsKKwljYXNlIFNBU19QUk9UT0NPTF9TU1A6CisJCXJjID0gbXZzX3Rhc2tfcHJlcF9zc3AobXZpLCAmdGVpLCBpc190bWYsIHRtZik7CisJCWJyZWFrOworCWNhc2UgU0FTX1BST1RPQ09MX1NBVEE6CisJY2FzZSBTQVNfUFJPVE9DT0xfU1RQOgorCWNhc2UgU0FTX1BST1RPQ09MX1NBVEEgfCBTQVNfUFJPVE9DT0xfU1RQOgorCQlyYyA9IG12c190YXNrX3ByZXBfYXRhKG12aSwgJnRlaSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9wcmludGsoS0VSTl9FUlIsIG12aS0+ZGV2LAorCQkJInVua25vd24gc2FzX3Rhc2sgcHJvdG86IDB4JXhcbiIsCisJCQl0YXNrLT50YXNrX3Byb3RvKTsKKwkJcmMgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlpZiAocmMpIHsKKwkJbXZfZHByaW50aygicmMgaXMgJXhcbiIsIHJjKTsKKwkJZ290byBlcnJfb3V0X3Nsb3RfYnVmOworCX0KKwlzbG90LT50YXNrID0gdGFzazsKKwlzbG90LT5wb3J0ID0gdGVpLnBvcnQ7CisJdGFzay0+bGxkZF90YXNrID0gc2xvdDsKKwlsaXN0X2FkZF90YWlsKCZzbG90LT5lbnRyeSwgJnRlaS5wb3J0LT5saXN0KTsKKwlzcGluX2xvY2soJnRhc2stPnRhc2tfc3RhdGVfbG9jayk7CisJdGFzay0+dGFza19zdGF0ZV9mbGFncyB8PSBTQVNfVEFTS19BVF9JTklUSUFUT1I7CisJc3Bpbl91bmxvY2soJnRhc2stPnRhc2tfc3RhdGVfbG9jayk7CisKKwltdnNfaGJhX21lbW9yeV9kdW1wKG12aSwgdGFnLCB0YXNrLT50YXNrX3Byb3RvKTsKKwltdmlfZGV2LT5ydW5uaW5nX3JlcSsrOworCSsrKCpwYXNzKTsKKwltdmktPnR4X3Byb2QgPSAobXZpLT50eF9wcm9kICsgMSkgJiAoTVZTX0NISVBfU0xPVF9TWiAtIDEpOworCisJcmV0dXJuIHJjOworCitlcnJfb3V0X3Nsb3RfYnVmOgorCXBjaV9wb29sX2ZyZWUobXZpLT5kbWFfcG9vbCwgc2xvdC0+YnVmLCBzbG90LT5idWZfZG1hKTsKIGVycl9vdXRfdGFnOgogCW12c190YWdfZnJlZShtdmksIHRhZyk7CiBlcnJfb3V0OgogCi0JZGV2X3ByaW50ayhLRVJOX0VSUiwgbXZpLT5kZXYsICJtdnNhcyBleGVjIGZhaWxlZFslZF0hXG4iLCByYyk7Ci0JaWYgKCFzYXNfcHJvdG9jb2xfYXRhKHQtPnRhc2tfcHJvdG8pKQorCWRldl9wcmludGsoS0VSTl9FUlIsIG12aS0+ZGV2LCAibXZzYXMgcHJlcCBmYWlsZWRbJWRdIVxuIiwgcmMpOworCWlmICghc2FzX3Byb3RvY29sX2F0YSh0YXNrLT50YXNrX3Byb3RvKSkKIAkJaWYgKG5fZWxlbSkKLQkJCWRtYV91bm1hcF9zZyhtdmktPmRldiwgdC0+c2NhdHRlciwgbl9lbGVtLAotCQkJCSAgICAgdC0+ZGF0YV9kaXIpOwotb3V0X2RvbmU6CisJCQlkbWFfdW5tYXBfc2cobXZpLT5kZXYsIHRhc2stPnNjYXR0ZXIsIG5fZWxlbSwKKwkJCQkgICAgIHRhc2stPmRhdGFfZGlyKTsKK3ByZXBfb3V0OgorCXJldHVybiByYzsKK30KKworc3RhdGljIHN0cnVjdCBtdnNfdGFza19saXN0ICptdnNfdGFza19hbGxvY19saXN0KGludCAqbnVtLCBnZnBfdCBnZnBfZmxhZ3MpCit7CisJc3RydWN0IG12c190YXNrX2xpc3QgKmZpcnN0ID0gTlVMTDsKKworCWZvciAoOyAqbnVtID4gMDsgLS0qbnVtKSB7CisJCXN0cnVjdCBtdnNfdGFza19saXN0ICptdnNfbGlzdCA9IGttZW1fY2FjaGVfemFsbG9jKG12c190YXNrX2xpc3RfY2FjaGUsIGdmcF9mbGFncyk7CisKKwkJaWYgKCFtdnNfbGlzdCkKKwkJCWJyZWFrOworCisJCUlOSVRfTElTVF9IRUFEKCZtdnNfbGlzdC0+bGlzdCk7CisJCWlmICghZmlyc3QpCisJCQlmaXJzdCA9IG12c19saXN0OworCQllbHNlCisJCQlsaXN0X2FkZF90YWlsKCZtdnNfbGlzdC0+bGlzdCwgJmZpcnN0LT5saXN0KTsKKworCX0KKworCXJldHVybiBmaXJzdDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG12c190YXNrX2ZyZWVfbGlzdChzdHJ1Y3QgbXZzX3Rhc2tfbGlzdCAqbXZzX2xpc3QpCit7CisJTElTVF9IRUFEKGxpc3QpOworCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKmE7CisJc3RydWN0IG12c190YXNrX2xpc3QgKm1saXN0ID0gTlVMTDsKKworCV9fbGlzdF9hZGQoJmxpc3QsIG12c19saXN0LT5saXN0LnByZXYsICZtdnNfbGlzdC0+bGlzdCk7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBhLCAmbGlzdCkgeworCQlsaXN0X2RlbF9pbml0KHBvcyk7CisJCW1saXN0ID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBtdnNfdGFza19saXN0LCBsaXN0KTsKKwkJa21lbV9jYWNoZV9mcmVlKG12c190YXNrX2xpc3RfY2FjaGUsIG1saXN0KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbXZzX3Rhc2tfZXhlYyhzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssIGNvbnN0IGludCBudW0sIGdmcF90IGdmcF9mbGFncywKKwkJCQlzdHJ1Y3QgY29tcGxldGlvbiAqY29tcGxldGlvbiwgaW50IGlzX3RtZiwKKwkJCQlzdHJ1Y3QgbXZzX3RtZl90YXNrICp0bWYpCit7CisJc3RydWN0IGRvbWFpbl9kZXZpY2UgKmRldiA9IHRhc2stPmRldjsKKwlzdHJ1Y3QgbXZzX2luZm8gKm12aSA9IE5VTEw7CisJdTMyIHJjID0gMDsKKwl1MzIgcGFzcyA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKwltdmkgPSAoKHN0cnVjdCBtdnNfZGV2aWNlICopdGFzay0+ZGV2LT5sbGRkX2RldiktPm12aV9pbmZvOworCisJaWYgKChkZXYtPmRldl90eXBlID09IFNBVEFfREVWKSAmJiAoZGV2LT5zYXRhX2Rldi5hcCAhPSBOVUxMKSkKKwkJc3Bpbl91bmxvY2tfaXJxKGRldi0+c2F0YV9kZXYuYXAtPmxvY2spOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm12aS0+bG9jaywgZmxhZ3MpOworCXJjID0gbXZzX3Rhc2tfcHJlcCh0YXNrLCBtdmksIGlzX3RtZiwgdG1mLCAmcGFzcyk7CisJaWYgKHJjKQorCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCBtdmktPmRldiwgIm12c2FzIGV4ZWMgZmFpbGVkWyVkXSFcbiIsIHJjKTsKKworCWlmIChsaWtlbHkocGFzcykpCisJCQlNVlNfQ0hJUF9ESVNQLT5zdGFydF9kZWxpdmVyeShtdmksIChtdmktPnR4X3Byb2QgLSAxKSAmCisJCQkJKE1WU19DSElQX1NMT1RfU1ogLSAxKSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXZpLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoKGRldi0+ZGV2X3R5cGUgPT0gU0FUQV9ERVYpICYmIChkZXYtPnNhdGFfZGV2LmFwICE9IE5VTEwpKQorCQlzcGluX2xvY2tfaXJxKGRldi0+c2F0YV9kZXYuYXAtPmxvY2spOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IG12c19jb2xsZWN0b3JfdGFza19leGVjKHN0cnVjdCBzYXNfdGFzayAqdGFzaywgY29uc3QgaW50IG51bSwgZ2ZwX3QgZ2ZwX2ZsYWdzLAorCQkJCXN0cnVjdCBjb21wbGV0aW9uICpjb21wbGV0aW9uLCBpbnQgaXNfdG1mLAorCQkJCXN0cnVjdCBtdnNfdG1mX3Rhc2sgKnRtZikKK3sKKwlzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2ID0gdGFzay0+ZGV2OworCXN0cnVjdCBtdnNfcHJ2X2luZm8gKm1waSA9IGRldi0+cG9ydC0+aGEtPmxsZGRfaGE7CisJc3RydWN0IG12c19pbmZvICptdmkgPSBOVUxMOworCXN0cnVjdCBzYXNfdGFzayAqdCA9IHRhc2s7CisJc3RydWN0IG12c190YXNrX2xpc3QgKm12c19saXN0ID0gTlVMTCwgKmE7CisJTElTVF9IRUFEKHEpOworCWludCBwYXNzWzJdID0gezB9OworCXUzMiByYyA9IDA7CisJdTMyIG4gPSBudW07CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKwltdnNfbGlzdCA9IG12c190YXNrX2FsbG9jX2xpc3QoJm4sIGdmcF9mbGFncyk7CisJaWYgKG4pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogbXZzIGFsbG9jIGxpc3QgZmFpbGVkLlxuIiwgX19mdW5jX18pOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV9saXN0OworCX0KKworCV9fbGlzdF9hZGQoJnEsIG12c19saXN0LT5saXN0LnByZXYsICZtdnNfbGlzdC0+bGlzdCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGEsICZxLCBsaXN0KSB7CisJCWEtPnRhc2sgPSB0OworCQl0ID0gbGlzdF9lbnRyeSh0LT5saXN0Lm5leHQsIHN0cnVjdCBzYXNfdGFzaywgbGlzdCk7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShhLCAmcSAsIGxpc3QpIHsKKworCQl0ID0gYS0+dGFzazsKKwkJbXZpID0gKChzdHJ1Y3QgbXZzX2RldmljZSAqKXQtPmRldi0+bGxkZF9kZXYpLT5tdmlfaW5mbzsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbXZpLT5sb2NrLCBmbGFncyk7CisJCXJjID0gbXZzX3Rhc2tfcHJlcCh0LCBtdmksIGlzX3RtZiwgdG1mLCAmcGFzc1ttdmktPmlkXSk7CisJCWlmIChyYykKKwkJCWRldl9wcmludGsoS0VSTl9FUlIsIG12aS0+ZGV2LCAibXZzYXMgZXhlYyBmYWlsZWRbJWRdIVxuIiwgcmMpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdmktPmxvY2ssIGZsYWdzKTsKKwl9CisKKwlpZiAobGlrZWx5KHBhc3NbMF0pKQorCQkJTVZTX0NISVBfRElTUC0+c3RhcnRfZGVsaXZlcnkobXBpLT5tdmlbMF0sCisJCQkJKG1waS0+bXZpWzBdLT50eF9wcm9kIC0gMSkgJiAoTVZTX0NISVBfU0xPVF9TWiAtIDEpKTsKKworCWlmIChsaWtlbHkocGFzc1sxXSkpCisJCQlNVlNfQ0hJUF9ESVNQLT5zdGFydF9kZWxpdmVyeShtcGktPm12aVsxXSwKKwkJCQkobXBpLT5tdmlbMV0tPnR4X3Byb2QgLSAxKSAmIChNVlNfQ0hJUF9TTE9UX1NaIC0gMSkpOworCisJbGlzdF9kZWxfaW5pdCgmcSk7CisKK2ZyZWVfbGlzdDoKKwlpZiAobXZzX2xpc3QpCisJCW12c190YXNrX2ZyZWVfbGlzdChtdnNfbGlzdCk7CisKIAlyZXR1cm4gcmM7CiB9CiAKIGludCBtdnNfcXVldWVfY29tbWFuZChzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2ssIGNvbnN0IGludCBudW0sCiAJCQlnZnBfdCBnZnBfZmxhZ3MpCiB7Ci0JcmV0dXJuIG12c190YXNrX2V4ZWModGFzaywgbnVtLCBnZnBfZmxhZ3MsIE5VTEwsIDAsIE5VTEwpOworCXN0cnVjdCBtdnNfZGV2aWNlICptdmlfZGV2ID0gdGFzay0+ZGV2LT5sbGRkX2RldjsKKwlzdHJ1Y3Qgc2FzX2hhX3N0cnVjdCAqc2FzID0gbXZpX2Rldi0+bXZpX2luZm8tPnNhczsKKworCWlmIChzYXMtPmxsZGRfbWF4X2V4ZWN1dGVfbnVtIDwgMikKKwkJcmV0dXJuIG12c190YXNrX2V4ZWModGFzaywgbnVtLCBnZnBfZmxhZ3MsIE5VTEwsIDAsIE5VTEwpOworCWVsc2UKKwkJcmV0dXJuIG12c19jb2xsZWN0b3JfdGFza19leGVjKHRhc2ssIG51bSwgZ2ZwX2ZsYWdzLCBOVUxMLCAwLCBOVUxMKTsKIH0KIAogc3RhdGljIHZvaWQgbXZzX3Nsb3RfZnJlZShzdHJ1Y3QgbXZzX2luZm8gKm12aSwgdTMyIHJ4X2Rlc2MpCkBAIC0xMDY3LDYgKzExNzYsMTEgQEAKIAkJLyogZG8gbm90aGluZyAqLwogCQlicmVhazsKIAl9CisKKwlpZiAoc2xvdC0+YnVmKSB7CisJCXBjaV9wb29sX2ZyZWUobXZpLT5kbWFfcG9vbCwgc2xvdC0+YnVmLCBzbG90LT5idWZfZG1hKTsKKwkJc2xvdC0+YnVmID0gTlVMTDsKKwl9CiAJbGlzdF9kZWxfaW5pdCgmc2xvdC0+ZW50cnkpOwogCXRhc2stPmxsZGRfdGFzayA9IE5VTEw7CiAJc2xvdC0+dGFzayA9IE5VTEw7CkBAIC0xMjU1LDYgKzEzNjksNyBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbXZpLT5sb2NrLCBmbGFncyk7CiAJcG9ydC0+cG9ydF9hdHRhY2hlZCA9IDE7CiAJcGh5LT5wb3J0ID0gcG9ydDsKKwlzYXNfcG9ydC0+bGxkZF9wb3J0ID0gcG9ydDsKIAlpZiAocGh5LT5waHlfdHlwZSAmIFBPUlRfVFlQRV9TQVMpIHsKIAkJcG9ydC0+d2lkZV9wb3J0X3BoeW1hcCA9IHNhc19wb3J0LT5waHlfbWFzazsKIAkJbXZfcHJpbnRrKCJzZXQgd2lkZSBwb3J0IHBoeSBtYXAgJXhcbiIsIHNhc19wb3J0LT5waHlfbWFzayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfc2FzLmggYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfc2FzLmgKaW5kZXggNzdkZGM3Yy4uMTM2N2Q4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL212c2FzL212X3Nhcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9zYXMuaApAQCAtMyw2ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgMjAwNyBSZWQgSGF0LCBJbmMuCiAgKiBDb3B5cmlnaHQgMjAwOCBNYXJ2ZWxsLiA8a2V3ZWlAbWFydmVsbC5jb20+CisgKiBDb3B5cmlnaHQgMjAwOS0yMDExIE1hcnZlbGwuIDx5dXhpYW5nbEBtYXJ2ZWxsLmNvbT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIuCiAgKgpAQCAtNjcsNiArNjgsNyBAQAogZXh0ZXJuIHN0cnVjdCBtdnNfaW5mbyAqdGd0X212aTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbXZzX2Rpc3BhdGNoIG12c182NHh4X2Rpc3BhdGNoOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBtdnNfZGlzcGF0Y2ggbXZzXzk0eHhfZGlzcGF0Y2g7CitleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKm12c190YXNrX2xpc3RfY2FjaGU7CiAKICNkZWZpbmUgREVWX0lTX0VYUEFOREVSKHR5cGUpCVwKIAkoKHR5cGUgPT0gRURHRV9ERVYpIHx8ICh0eXBlID09IEZBTk9VVF9ERVYpKQpAQCAtMzQxLDYgKzM0Myw3IEBACiAJZG1hX2FkZHJfdCBidWxrX2J1ZmZlcl9kbWE7CiAjZGVmaW5lIFRSQVNIX0JVQ0tFVF9TSVpFICAgIAkweDIwMDAwCiAjZW5kaWYKKwl2b2lkICpkbWFfcG9vbDsKIAlzdHJ1Y3QgbXZzX3Nsb3RfaW5mbyBzbG90X2luZm9bMF07CiB9OwogCkBAIC0zNjcsNiArMzcwLDExIEBACiAJaW50IG5fZWxlbTsKIH07CiAKK3N0cnVjdCBtdnNfdGFza19saXN0IHsKKwlzdHJ1Y3Qgc2FzX3Rhc2sgKnRhc2s7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKwogCiAvKioqKioqKioqKioqKioqKioqKiogZnVuY3Rpb24gcHJvdG90eXBlICoqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgbXZzX2dldF9zYXNfYWRkcih2b2lkICpidWYsIHUzMiBidWZsZW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL25jcjUzYzh4eC5jIGIvZHJpdmVycy9zY3NpL25jcjUzYzh4eC5jCmluZGV4IDgzNWQ4ZDYuLjRiM2I0NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9uY3I1M2M4eHguYworKysgYi9kcml2ZXJzL3Njc2kvbmNyNTNjOHh4LmMKQEAgLTgxNDcsNyArODE0Nyw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpkb25lX2xpc3Q7CiAKLQlwcmludGsoIm5jcjUzYzh4eF9hYm9ydDogY29tbWFuZCBwaWQgJWx1XG4iLCBjbWQtPnNlcmlhbF9udW1iZXIpOworCXByaW50aygibmNyNTNjOHh4X2Fib3J0XG4iKTsKIAogCU5DUl9MT0NLX05DQihucCwgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcG1jcmFpZC5jIGIvZHJpdmVycy9zY3NpL3BtY3JhaWQuYwppbmRleCA5NmQ1YWQwLi43ZjYzNmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcG1jcmFpZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMKQEAgLTM4MTQsNiArMzgxNCw5IEBACiAJCQlyYyA9IC1FRkFVTFQ7CiAJCQlnb3RvIG91dF9mcmVlX2J1ZmZlcjsKIAkJfQorCX0gZWxzZSBpZiAocmVxdWVzdF9zaXplIDwgMCkgeworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2ZyZWVfYnVmZmVyOwogCX0KIAogCS8qIGNoZWNrIGlmIHdlIGhhdmUgYW55IGFkZGl0aW9uYWwgY29tbWFuZCBwYXJhbWV0ZXJzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMTI4MC5jIGIvZHJpdmVycy9zY3NpL3FsYTEyODAuYwppbmRleCA4YmE1NzQ0Li5kODM4MjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMTI4MC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGExMjgwLmMKQEAgLTQwNjYsNyArNDA2Niw3IEBACiAJICAgfSAqLwogCXByaW50aygiICB0YWc9JWQsIHRyYW5zZmVyc2l6ZT0weCV4IFxuIiwKIAkgICAgICAgY21kLT50YWcsIGNtZC0+dHJhbnNmZXJzaXplKTsKLQlwcmludGsoIiAgUGlkPSVsaSwgU1A9MHglcFxuIiwgY21kLT5zZXJpYWxfbnVtYmVyLCBDTURfU1AoY21kKSk7CisJcHJpbnRrKCIgIFNQPTB4JXBcbiIsIENNRF9TUChjbWQpKTsKIAlwcmludGsoIiB1bmRlcmZsb3cgc2l6ZSA9IDB4JXgsIGRpcmVjdGlvbj0weCV4XG4iLAogCSAgICAgICBjbWQtPnVuZGVyZmxvdywgY21kLT5zY19kYXRhX2RpcmVjdGlvbik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYwppbmRleCBkM2U1OGQ3Li41MzIzMTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogUUxvZ2ljIEZpYnJlIENoYW5uZWwgSEJBIERyaXZlcgotICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDEwIFFMb2dpYyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDExIFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKICAqIFNlZSBMSUNFTlNFLnFsYTJ4eHggZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KQEAgLTQ5Niw4ICs0OTYsOCBAQAogCQkJb2Zmc2V0ID0gMDsKIAkJfQogCi0JCXJ2YWwgPSBxbGEyeDAwX3JlYWRfc2ZwKHZoYSwgaGEtPnNmcF9kYXRhX2RtYSwgYWRkciwgb2Zmc2V0LAotCQkgICAgU0ZQX0JMT0NLX1NJWkUpOworCQlydmFsID0gcWxhMngwMF9yZWFkX3NmcCh2aGEsIGhhLT5zZnBfZGF0YV9kbWEsIGhhLT5zZnBfZGF0YSwKKwkJICAgIGFkZHIsIG9mZnNldCwgU0ZQX0JMT0NLX1NJWkUsIDApOwogCQlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAogCQkJICAgICJVbmFibGUgdG8gcmVhZCBTRlAgZGF0YSAoJXgvJXgvJXgpLlxuIiwgcnZhbCwKQEAgLTYyOCwxMiArNjI4LDEyIEBACiAKIAltZW1jcHkoaGEtPmVkY19kYXRhLCAmYnVmWzhdLCBsZW4pOwogCi0JcnZhbCA9IHFsYTJ4MDBfd3JpdGVfZWRjKHZoYSwgZGV2LCBhZHIsIGhhLT5lZGNfZGF0YV9kbWEsCi0JICAgIGhhLT5lZGNfZGF0YSwgbGVuLCBvcHQpOworCXJ2YWwgPSBxbGEyeDAwX3dyaXRlX3NmcCh2aGEsIGhhLT5lZGNfZGF0YV9kbWEsIGhhLT5lZGNfZGF0YSwKKwkgICAgZGV2LCBhZHIsIGxlbiwgb3B0KTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAogCQkgICAgIlVuYWJsZSB0byB3cml0ZSBFREMgKCV4KSAlMDJ4OiUwMng6JTA0eDolMDJ4OiUwMnguXG4iLAotCQkgICAgcnZhbCwgZGV2LCBhZHIsIG9wdCwgbGVuLCAqYnVmKSk7CisJCSAgICBydmFsLCBkZXYsIGFkciwgb3B0LCBsZW4sIGJ1Zls4XSkpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTY4NSw4ICs2ODUsOCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAltZW1zZXQoaGEtPmVkY19kYXRhLCAwLCBsZW4pOwotCXJ2YWwgPSBxbGEyeDAwX3JlYWRfZWRjKHZoYSwgZGV2LCBhZHIsIGhhLT5lZGNfZGF0YV9kbWEsCi0JICAgIGhhLT5lZGNfZGF0YSwgbGVuLCBvcHQpOworCXJ2YWwgPSBxbGEyeDAwX3JlYWRfc2ZwKHZoYSwgaGEtPmVkY19kYXRhX2RtYSwgaGEtPmVkY19kYXRhLAorCQkJZGV2LCBhZHIsIGxlbiwgb3B0KTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAogCQkgICAgIlVuYWJsZSB0byB3cml0ZSBFREMgc3RhdHVzICgleCkgJTAyeDolMDJ4OiUwNHg6JTAyeC5cbiIsCkBAIC0xNTY4LDcgKzE1NjgsNyBAQAogCiAJLyogTm93IHRoYXQgdGhlIHJwb3J0IGhhcyBiZWVuIGRlbGV0ZWQsIHNldCB0aGUgZmNwb3J0IHN0YXRlIHRvCiAJICAgRkNTX0RFVklDRV9ERUFEICovCi0JYXRvbWljX3NldCgmZmNwb3J0LT5zdGF0ZSwgRkNTX0RFVklDRV9ERUFEKTsKKwlxbGEyeDAwX3NldF9mY3BvcnRfc3RhdGUoZmNwb3J0LCBGQ1NfREVWSUNFX0RFQUQpOwogCiAJLyoKIAkgKiBUcmFuc3BvcnQgaGFzIGVmZmVjdGl2ZWx5ICdkZWxldGVkJyB0aGUgcnBvcnQsIGNsZWFyCkBAIC0xODc3LDE0ICsxODc3LDE1IEBACiAKIAlzY3NpX3JlbW92ZV9ob3N0KHZoYS0+aG9zdCk7CiAKKwkvKiBBbGxvdyB0aW1lciB0byBydW4gdG8gZHJhaW4gcXVldWVkIGl0ZW1zLCB3aGVuIHJlbW92aW5nIHZwICovCisJcWxhMjR4eF9kZWFsbG9jYXRlX3ZwX2lkKHZoYSk7CisKIAlpZiAodmhhLT50aW1lcl9hY3RpdmUpIHsKIAkJcWxhMngwMF92cF9zdG9wX3RpbWVyKHZoYSk7CiAJCURFQlVHMTUocHJpbnRrKEtFUk5fSU5GTyAic2NzaSglbGQpOiB0aW1lciBmb3IgdGhlIHZwb3J0WyVkXSIKIAkJIiA9ICVwIGhhcyBzdG9wcGVkXG4iLCB2aGEtPmhvc3Rfbm8sIHZoYS0+dnBfaWR4LCB2aGEpKTsKIAl9CiAKLQlxbGEyNHh4X2RlYWxsb2NhdGVfdnBfaWQodmhhKTsKLQogCS8qIE5vIHBlbmRpbmcgYWN0aXZpdGllcyBzaGFsbCBiZSB0aGVyZSBvbiB0aGUgdmhhIG5vdyAqLwogCURFQlVHKG1zbGVlcChyYW5kb20zMigpJTEwKSk7ICAvKiBKdXN0IHRvIHNlZSBpZiBzb21ldGhpbmcgZmFsbHMgb24KIAkJCQkJKiB0aGUgbmV0IHdlIGhhdmUgcGxhY2VkIGJlbG93ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYnNnLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYnNnLmMKaW5kZXggOTAzYjA1OC4uOGMxMGUyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2JzZy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ic2cuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTEgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2JzZy5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2JzZy5oCmluZGV4IDA3NGE5OTkuLjBmMGY1NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ic2cuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYnNnLmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogUUxvZ2ljIEZpYnJlIENoYW5uZWwgSEJBIERyaXZlcgotICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDEwIFFMb2dpYyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDExIFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKICAqIFNlZSBMSUNFTlNFLnFsYTJ4eHggZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kYmcuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kYmcuYwppbmRleCAwOTYxNDExLi5jNTM3MTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGJnLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RiZy5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMSBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGJnLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGJnLmgKaW5kZXggYjc0ZTZiNS4uOTMwNDE0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RiZy5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kYmcuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTEgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCmluZGV4IGVlMjAzNTMuLmNjNWE3OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogUUxvZ2ljIEZpYnJlIENoYW5uZWwgSEJBIERyaXZlcgotICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDEwIFFMb2dpYyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDExIFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKICAqIFNlZSBMSUNFTlNFLnFsYTJ4eHggZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KQEAgLTE3MTcsNiArMTcxNywxNCBAQAogI2RlZmluZSBGQ1NfREVWSUNFX0xPU1QJCTMKICNkZWZpbmUgRkNTX09OTElORQkJNAogCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBvcnRfc3RhdGVfc3RyW10gPSB7CisJIlVua25vd24iLAorCSJVTkNPTkZJR1VSRUQiLAorCSJERUFEIiwKKwkiTE9TVCIsCisJIk9OTElORSIKK307CisKIC8qCiAgKiBGQyBwb3J0IGZsYWdzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGZzLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGZzLmMKaW5kZXggNjI3MTM1My4uYTVhNGUxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Rmcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZnMuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTEgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Z3LmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZncuaAppbmRleCBmNWJhMDljLi42OTE3ODNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZncuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZncuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTEgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpAQCAtNDE2LDggKzQxNiw3IEBACiAJdWludDhfdCB2cF9pbmRleDsKIAogCXVpbnQzMl90IGZjcF9kYXRhX2RzZWdfYWRkcmVzc1syXTsJLyogRGF0YSBzZWdtZW50IGFkZHJlc3MuICovCi0JdWludDE2X3QgZmNwX2RhdGFfZHNlZ19sZW47CQkvKiBEYXRhIHNlZ21lbnQgbGVuZ3RoLiAqLwotCXVpbnQxNl90IHJlc2VydmVkXzE7CQkJLyogTVVTVCBiZSBzZXQgdG8gMC4gKi8KKwl1aW50MzJfdCBmY3BfZGF0YV9kc2VnX2xlbjsJCS8qIERhdGEgc2VnbWVudCBsZW5ndGguICovCiB9OwogCiAjZGVmaW5lIENPTU1BTkRfVFlQRV83CTB4MTgJCS8qIENvbW1hbmQgVHlwZSA3IGVudHJ5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmgKaW5kZXggZDQ4MzI2ZS4uMGIzODEyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTEgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpAQCAtMzksNiArMzksOCBAQAogZXh0ZXJuIGludCBxbGEyeDAwX3BlcmZvcm1fbG9vcF9yZXN5bmMoc2NzaV9xbGFfaG9zdF90ICopOwogZXh0ZXJuIGludCBxbGEyeDAwX2xvb3BfcmVzeW5jKHNjc2lfcWxhX2hvc3RfdCAqKTsKIAorZXh0ZXJuIGludCBxbGEyeDAwX2ZpbmRfbmV3X2xvb3BfaWQoc2NzaV9xbGFfaG9zdF90ICosIGZjX3BvcnRfdCAqKTsKKwogZXh0ZXJuIGludCBxbGEyeDAwX2ZhYnJpY19sb2dpbihzY3NpX3FsYV9ob3N0X3QgKiwgZmNfcG9ydF90ICosIHVpbnQxNl90ICopOwogZXh0ZXJuIGludCBxbGEyeDAwX2xvY2FsX2RldmljZV9sb2dpbihzY3NpX3FsYV9ob3N0X3QgKiwgZmNfcG9ydF90ICopOwogCkBAIC0xMDAsNiArMTAyLDggQEAKIGV4dGVybiBpbnQgcWwyeGVuYWJsZWRpZjsKIGV4dGVybiBpbnQgcWwyeGVuYWJsZWhiYV9lcnJfY2hrOwogZXh0ZXJuIGludCBxbDJ4dGFyZ2V0cmVzZXQ7CitleHRlcm4gaW50IHFsMnhkb250cmVzZXRoYmE7CitleHRlcm4gdW5zaWduZWQgaW50IHFsMnhtYXhsdW47CiAKIGV4dGVybiBpbnQgcWxhMngwMF9sb29wX3Jlc2V0KHNjc2lfcWxhX2hvc3RfdCAqKTsKIGV4dGVybiB2b2lkIHFsYTJ4MDBfYWJvcnRfYWxsX2NtZHMoc2NzaV9xbGFfaG9zdF90ICosIGludCk7CkBAIC0zMTksMTUgKzMyMywxMiBAQAogcWxhMngwMF9kaXNhYmxlX2ZjZV90cmFjZShzY3NpX3FsYV9ob3N0X3QgKiwgdWludDY0X3QgKiwgdWludDY0X3QgKik7CiAKIGV4dGVybiBpbnQKLXFsYTJ4MDBfcmVhZF9zZnAoc2NzaV9xbGFfaG9zdF90ICosIGRtYV9hZGRyX3QsIHVpbnQxNl90LCB1aW50MTZfdCwgdWludDE2X3QpOworcWxhMngwMF9yZWFkX3NmcChzY3NpX3FsYV9ob3N0X3QgKiwgZG1hX2FkZHJfdCwgdWludDhfdCAqLAorCXVpbnQxNl90LCB1aW50MTZfdCwgdWludDE2X3QsIHVpbnQxNl90KTsKIAogZXh0ZXJuIGludAotcWxhMngwMF9yZWFkX2VkYyhzY3NpX3FsYV9ob3N0X3QgKiwgdWludDE2X3QsIHVpbnQxNl90LCBkbWFfYWRkcl90LAotICAgIHVpbnQ4X3QgKiwgdWludDE2X3QsIHVpbnQxNl90KTsKLQotZXh0ZXJuIGludAotcWxhMngwMF93cml0ZV9lZGMoc2NzaV9xbGFfaG9zdF90ICosIHVpbnQxNl90LCB1aW50MTZfdCwgZG1hX2FkZHJfdCwKLSAgICB1aW50OF90ICosIHVpbnQxNl90LCB1aW50MTZfdCk7CitxbGEyeDAwX3dyaXRlX3NmcChzY3NpX3FsYV9ob3N0X3QgKiwgZG1hX2FkZHJfdCwgdWludDhfdCAqLAorCXVpbnQxNl90LCB1aW50MTZfdCwgdWludDE2X3QsIHVpbnQxNl90KTsKIAogZXh0ZXJuIGludAogcWxhMngwMF9zZXRfaWRtYV9zcGVlZChzY3NpX3FsYV9ob3N0X3QgKiwgdWludDE2X3QsIHVpbnQxNl90LCB1aW50MTZfdCAqKTsKQEAgLTU0OSw3ICs1NTAsNiBAQAogZXh0ZXJuIGludCBxbGE4Mnh4X3JkXzMyKHN0cnVjdCBxbGFfaHdfZGF0YSAqLCB1bG9uZyk7CiBleHRlcm4gaW50IHFsYTgyeHhfcmRtZW0oc3RydWN0IHFsYV9od19kYXRhICosIHU2NCwgdm9pZCAqLCBpbnQpOwogZXh0ZXJuIGludCBxbGE4Mnh4X3dybWVtKHN0cnVjdCBxbGFfaHdfZGF0YSAqLCB1NjQsIHZvaWQgKiwgaW50KTsKLWV4dGVybiB2b2lkIHFsYTgyeHhfcm9tX3VubG9jayhzdHJ1Y3QgcWxhX2h3X2RhdGEgKik7CiAKIC8qIElTUCA4MDIxIElEQyAqLwogZXh0ZXJuIHZvaWQgcWxhODJ4eF9jbGVhcl9kcnZfYWN0aXZlKHN0cnVjdCBxbGFfaHdfZGF0YSAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9ncy5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dzLmMKaW5kZXggNzRhOTFiNi4uOGNkOTA2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dzLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dzLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogUUxvZ2ljIEZpYnJlIENoYW5uZWwgSEJBIERyaXZlcgotICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDEwIFFMb2dpYyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDExIFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKICAqIFNlZSBMSUNFTlNFLnFsYTJ4eHggZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCmluZGV4IDg1NzU4MDguLjkyMGI3NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTEgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpAQCAtMzUsOCArMzUsNiBAQAogCiBzdGF0aWMgaW50IHFsYTJ4MDBfcmVzdGFydF9pc3Aoc2NzaV9xbGFfaG9zdF90ICopOwogCi1zdGF0aWMgaW50IHFsYTJ4MDBfZmluZF9uZXdfbG9vcF9pZChzY3NpX3FsYV9ob3N0X3QgKiwgZmNfcG9ydF90ICopOwotCiBzdGF0aWMgc3RydWN0IHFsYV9jaGlwX3N0YXRlXzg0eHggKnFsYTg0eHhfZ2V0X2NoaXAoc3RydWN0IHNjc2lfcWxhX2hvc3QgKik7CiBzdGF0aWMgaW50IHFsYTg0eHhfaW5pdF9jaGlwKHNjc2lfcWxhX2hvc3RfdCAqKTsKIHN0YXRpYyBpbnQgcWxhMjV4eF9pbml0X3F1ZXVlcyhzdHJ1Y3QgcWxhX2h3X2RhdGEgKik7CkBAIC0zODUsOCArMzgzLDE4IEBACiAKIAlzd2l0Y2ggKGRhdGFbMF0pIHsKIAljYXNlIE1CU19DT01NQU5EX0NPTVBMRVRFOgorCQkvKgorCQkgKiBEcml2ZXIgbXVzdCB2YWxpZGF0ZSBsb2dpbiBzdGF0ZSAtIElmIFBSTEkgbm90IGNvbXBsZXRlLAorCQkgKiBmb3JjZSBhIHJlbG9naW4gYXR0ZW1wdCB2aWEgaW1wbGljaXQgTE9HTywgUExPR0ksIGFuZCBQUkxJCisJCSAqIHJlcXVlc3RzLgorCQkgKi8KKwkJcnZhbCA9IHFsYTJ4MDBfZ2V0X3BvcnRfZGF0YWJhc2UodmhhLCBmY3BvcnQsIDApOworCQlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgeworCQkJcWxhMngwMF9wb3N0X2FzeW5jX2xvZ291dF93b3JrKHZoYSwgZmNwb3J0LCBOVUxMKTsKKwkJCXFsYTJ4MDBfcG9zdF9hc3luY19sb2dpbl93b3JrKHZoYSwgZmNwb3J0LCBOVUxMKTsKKwkJCWJyZWFrOworCQl9CiAJCWlmIChmY3BvcnQtPmZsYWdzICYgRkNGX0ZDUDJfREVWSUNFKSB7Ci0JCQlmY3BvcnQtPmZsYWdzIHw9IEZDRl9BU1lOQ19TRU5UOwogCQkJcWxhMngwMF9wb3N0X2FzeW5jX2FkaXNjX3dvcmsodmhhLCBmY3BvcnQsIGRhdGEpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTM5Nyw3ICs0MDUsNyBAQAogCQlpZiAoZGF0YVsxXSAmIFFMQV9MT0dJT19MT0dJTl9SRVRSSUVEKQogCQkJc2V0X2JpdChSRUxPR0lOX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKIAkJZWxzZQotCQkJcWxhMngwMF9tYXJrX2RldmljZV9sb3N0KHZoYSwgZmNwb3J0LCAxLCAxKTsKKwkJCXFsYTJ4MDBfbWFya19kZXZpY2VfbG9zdCh2aGEsIGZjcG9ydCwgMSwgMCk7CiAJCWJyZWFrOwogCWNhc2UgTUJTX1BPUlRfSURfVVNFRDoKIAkJZmNwb3J0LT5sb29wX2lkID0gZGF0YVsxXTsKQEAgLTQwOSw3ICs0MTcsNyBAQAogCQlydmFsID0gcWxhMngwMF9maW5kX25ld19sb29wX2lkKHZoYSwgZmNwb3J0KTsKIAkJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJCWZjcG9ydC0+ZmxhZ3MgJj0gfkZDRl9BU1lOQ19TRU5UOwotCQkJcWxhMngwMF9tYXJrX2RldmljZV9sb3N0KHZoYSwgZmNwb3J0LCAxLCAxKTsKKwkJCXFsYTJ4MDBfbWFya19kZXZpY2VfbG9zdCh2aGEsIGZjcG9ydCwgMSwgMCk7CiAJCQlicmVhazsKIAkJfQogCQlxbGEyeDAwX3Bvc3RfYXN5bmNfbG9naW5fd29yayh2aGEsIGZjcG9ydCwgTlVMTCk7CkBAIC00NDEsNyArNDQ5LDcgQEAKIAlpZiAoZGF0YVsxXSAmIFFMQV9MT0dJT19MT0dJTl9SRVRSSUVEKQogCQlzZXRfYml0KFJFTE9HSU5fTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOwogCWVsc2UKLQkJcWxhMngwMF9tYXJrX2RldmljZV9sb3N0KHZoYSwgZmNwb3J0LCAxLCAxKTsKKwkJcWxhMngwMF9tYXJrX2RldmljZV9sb3N0KHZoYSwgZmNwb3J0LCAxLCAwKTsKIAogCXJldHVybjsKIH0KQEAgLTI1MzYsNyArMjU0NCw3IEBACiAJZmNwb3J0LT52cF9pZHggPSB2aGEtPnZwX2lkeDsKIAlmY3BvcnQtPnBvcnRfdHlwZSA9IEZDVF9VTktOT1dOOwogCWZjcG9ydC0+bG9vcF9pZCA9IEZDX05PX0xPT1BfSUQ7Ci0JYXRvbWljX3NldCgmZmNwb3J0LT5zdGF0ZSwgRkNTX1VOQ09ORklHVVJFRCk7CisJcWxhMngwMF9zZXRfZmNwb3J0X3N0YXRlKGZjcG9ydCwgRkNTX1VOQ09ORklHVVJFRCk7CiAJZmNwb3J0LT5zdXBwb3J0ZWRfY2xhc3NlcyA9IEZDX0NPU19VTlNQRUNJRklFRDsKIAogCXJldHVybiBmY3BvcnQ7CkBAIC0yNzIyLDcgKzI3MzAsNyBAQAogCQkJICAgICJsb29wX2lkPTB4JTA0eFxuIiwKIAkJCSAgICB2aGEtPmhvc3Rfbm8sIGZjcG9ydC0+bG9vcF9pZCkpOwogCi0JCQlhdG9taWNfc2V0KCZmY3BvcnQtPnN0YXRlLCBGQ1NfREVWSUNFX0xPU1QpOworCQkJcWxhMngwMF9zZXRfZmNwb3J0X3N0YXRlKGZjcG9ydCwgRkNTX0RFVklDRV9MT1NUKTsKIAkJfQogCX0KIApAQCAtMjkzNCw3ICsyOTQyLDcgQEAKIAlxbGEyeDAwX2lpZG1hX2ZjcG9ydCh2aGEsIGZjcG9ydCk7CiAJcWxhMjR4eF91cGRhdGVfZmNwb3J0X2ZjcF9wcmlvKHZoYSwgZmNwb3J0KTsKIAlxbGEyeDAwX3JlZ19yZW1vdGVfcG9ydCh2aGEsIGZjcG9ydCk7Ci0JYXRvbWljX3NldCgmZmNwb3J0LT5zdGF0ZSwgRkNTX09OTElORSk7CisJcWxhMngwMF9zZXRfZmNwb3J0X3N0YXRlKGZjcG9ydCwgRkNTX09OTElORSk7CiB9CiAKIC8qCkBAIC0zMzkxLDcgKzMzOTksNyBAQAogICogQ29udGV4dDoKICAqCUtlcm5lbCBjb250ZXh0LgogICovCi1zdGF0aWMgaW50CitpbnQKIHFsYTJ4MDBfZmluZF9uZXdfbG9vcF9pZChzY3NpX3FsYV9ob3N0X3QgKnZoYSwgZmNfcG9ydF90ICpkZXYpCiB7CiAJaW50CXJ2YWw7CkBAIC01MjAyLDcgKzUyMTAsNyBAQAogCX0KIAogCS8qIFJlc2V0IEluaXRpYWxpemF0aW9uIGNvbnRyb2wgYmxvY2sgKi8KLQltZW1zZXQoaWNiLCAwLCBzaXplb2Yoc3RydWN0IGluaXRfY2JfODF4eCkpOworCW1lbXNldChpY2IsIDAsIGhhLT5pbml0X2NiX3NpemUpOwogCiAJLyogQ29weSAxc3Qgc2VnbWVudC4gKi8KIAlkcHRyMSA9ICh1aW50OF90ICopaWNiOwpAQCAtNTQyNyw2ICs1NDM1LDEzIEBACiAJCWhhLT5pc3BfYWJvcnRfY250ID0gMDsKIAkJY2xlYXJfYml0KElTUF9BQk9SVF9SRVRSWSwgJnZoYS0+ZHBjX2ZsYWdzKTsKIAorCQkvKiBVcGRhdGUgdGhlIGZpcm13YXJlIHZlcnNpb24gKi8KKwkJcWxhMngwMF9nZXRfZndfdmVyc2lvbih2aGEsICZoYS0+ZndfbWFqb3JfdmVyc2lvbiwKKwkJICAgICZoYS0+ZndfbWlub3JfdmVyc2lvbiwgJmhhLT5md19zdWJtaW5vcl92ZXJzaW9uLAorCQkgICAgJmhhLT5md19hdHRyaWJ1dGVzLCAmaGEtPmZ3X21lbW9yeV9zaXplLAorCQkgICAgaGEtPm1waV92ZXJzaW9uLCAmaGEtPm1waV9jYXBhYmlsaXRpZXMsCisJCSAgICBoYS0+cGh5X3ZlcnNpb24pOworCiAJCWlmIChoYS0+ZmNlKSB7CiAJCQloYS0+ZmxhZ3MuZmNlX2VuYWJsZWQgPSAxOwogCQkJbWVtc2V0KGhhLT5mY2UsIDAsCkBAIC01NTA4LDI2ICs1NTIzLDI2IEBACiAgKgogICogUmV0dXJuOgogICoJbm9uLXplcm8gKGlmIGZvdW5kKQotICogCTAgKGlmIG5vdCBmb3VuZCkKKyAqCS0xIChpZiBub3QgZm91bmQpCiAgKgogICogQ29udGV4dDoKICAqIAlLZXJuZWwgY29udGV4dAogICovCi11aW50OF90CitzdGF0aWMgaW50CiBxbGEyNHh4X2dldF9mY3BfcHJpbyhzY3NpX3FsYV9ob3N0X3QgKnZoYSwgZmNfcG9ydF90ICpmY3BvcnQpCiB7CiAJaW50IGksIGVudHJpZXM7CiAJdWludDhfdCBwaWRfbWF0Y2gsIHd3bl9tYXRjaDsKLQl1aW50OF90IHByaW9yaXR5OworCWludCBwcmlvcml0eTsKIAl1aW50MzJfdCBwaWQxLCBwaWQyOwogCXVpbnQ2NF90IHd3bjEsIHd3bjI7CiAJc3RydWN0IHFsYV9mY3BfcHJpb19lbnRyeSAqcHJpX2VudHJ5OwogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwogCiAJaWYgKCFoYS0+ZmNwX3ByaW9fY2ZnIHx8ICFoYS0+ZmxhZ3MuZmNwX3ByaW9fZW5hYmxlZCkKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtMTsKIAotCXByaW9yaXR5ID0gMDsKKwlwcmlvcml0eSA9IC0xOwogCWVudHJpZXMgPSBoYS0+ZmNwX3ByaW9fY2ZnLT5udW1fZW50cmllczsKIAlwcmlfZW50cnkgPSAmaGEtPmZjcF9wcmlvX2NmZy0+ZW50cnlbMF07CiAKQEAgLTU2MTAsNyArNTYyNSw3IEBACiBxbGEyNHh4X3VwZGF0ZV9mY3BvcnRfZmNwX3ByaW8oc2NzaV9xbGFfaG9zdF90ICp2aGEsIGZjX3BvcnRfdCAqZmNwb3J0KQogewogCWludCByZXQ7Ci0JdWludDhfdCBwcmlvcml0eTsKKwlpbnQgcHJpb3JpdHk7CiAJdWludDE2X3QgbWJbNV07CiAKIAlpZiAoZmNwb3J0LT5wb3J0X3R5cGUgIT0gRkNUX1RBUkdFVCB8fApAQCAtNTYxOCw2ICs1NjMzLDkgQEAKIAkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAKIAlwcmlvcml0eSA9IHFsYTI0eHhfZ2V0X2ZjcF9wcmlvKHZoYSwgZmNwb3J0KTsKKwlpZiAocHJpb3JpdHkgPCAwKQorCQlyZXR1cm4gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKKwogCXJldCA9IHFsYTI0eHhfc2V0X2ZjcF9wcmlvKHZoYSwgZmNwb3J0LT5sb29wX2lkLCBwcmlvcml0eSwgbWIpOwogCWlmIChyZXQgPT0gUUxBX1NVQ0NFU1MpCiAJCWZjcG9ydC0+ZmNwX3ByaW8gPSBwcmlvcml0eTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbmxpbmUuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbmxpbmUuaAppbmRleCA0OGY5N2E5Li40YzgxNjdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5saW5lLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lubGluZS5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMSBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCkBAIC04MywzICs4MywyMiBAQAogCX0KIAlJTklUX0xJU1RfSEVBRCgmKChzdHJ1Y3QgY3JjX2NvbnRleHQgKilzcC0+Y3R4KS0+ZHNkX2xpc3QpOwogfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3FsYTJ4MDBfc2V0X2ZjcG9ydF9zdGF0ZShmY19wb3J0X3QgKmZjcG9ydCwgaW50IHN0YXRlKQoreworCWludCBvbGRfc3RhdGU7CisKKwlvbGRfc3RhdGUgPSBhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSk7CisJYXRvbWljX3NldCgmZmNwb3J0LT5zdGF0ZSwgc3RhdGUpOworCisJLyogRG9uJ3QgcHJpbnQgc3RhdGUgdHJhbnNpdGlvbnMgZHVyaW5nIGluaXRpYWwgYWxsb2NhdGlvbiBvZiBmY3BvcnQgKi8KKwlpZiAob2xkX3N0YXRlICYmIG9sZF9zdGF0ZSAhPSBzdGF0ZSkgeworCQlERUJVRyhxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgZmNwb3J0LT52aGEtPmh3LAorCQkgICAgInNjc2koJWxkKTogRkNQb3J0IHN0YXRlIHRyYW5zaXRpb25lZCBmcm9tICVzIHRvICVzIC0gIgorCQkgICAgInBvcnRpZD0lMDJ4JTAyeCUwMnguXG4iLCBmY3BvcnQtPnZoYS0+aG9zdF9ubywKKwkJICAgIHBvcnRfc3RhdGVfc3RyW29sZF9zdGF0ZV0sIHBvcnRfc3RhdGVfc3RyW3N0YXRlXSwKKwkJICAgIGZjcG9ydC0+ZF9pZC5iLmRvbWFpbiwgZmNwb3J0LT5kX2lkLmIuYXJlYSwKKwkJICAgIGZjcG9ydC0+ZF9pZC5iLmFsX3BhKSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lvY2IuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pb2NiLmMKaW5kZXggZDc4ZDU4OS4uN2JhYzNjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lvY2IuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW9jYi5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMSBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKaW5kZXggNzEyNTE4ZC4uOWMwZjBlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTEgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpAQCAtODQzLDcgKzg0MywxMCBAQAogCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCiAJCSAgICAiSW52YWxpZCBTQ1NJIGNvbXBsZXRpb24gaGFuZGxlICVkLlxuIiwgaW5kZXgpOwogCi0JCXNldF9iaXQoSVNQX0FCT1JUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKKwkJaWYgKElTX1FMQTgyWFgoaGEpKQorCQkJc2V0X2JpdChGQ09FX0NUWF9SRVNFVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CisJCWVsc2UKKwkJCXNldF9iaXQoSVNQX0FCT1JUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtODYxLDcgKzg2NCwxMCBAQAogCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCiAJCSAgICAiSW52YWxpZCBJU1AgU0NTSSBjb21wbGV0aW9uIGhhbmRsZVxuIik7CiAKLQkJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOworCQlpZiAoSVNfUUxBODJYWChoYSkpCisJCQlzZXRfYml0KEZDT0VfQ1RYX1JFU0VUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKKwkJZWxzZQorCQkJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOwogCX0KIH0KIApAQCAtODc4LDcgKzg4NCwxMCBAQAogCWlmIChpbmRleCA+PSBNQVhfT1VUU1RBTkRJTkdfQ09NTUFORFMpIHsKIAkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAogCQkgICAgIiVzOiBJbnZhbGlkIGNvbXBsZXRpb24gaGFuZGxlICgleCkuXG4iLCBmdW5jLCBpbmRleCk7Ci0JCXNldF9iaXQoSVNQX0FCT1JUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKKwkJaWYgKElTX1FMQTgyWFgoaGEpKQorCQkJc2V0X2JpdChGQ09FX0NUWF9SRVNFVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CisJCWVsc2UKKwkJCXNldF9iaXQoSVNQX0FCT1JUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKIAkJZ290byBkb25lOwogCX0KIAlzcCA9IHJlcS0+b3V0c3RhbmRpbmdfY21kc1tpbmRleF07CkBAIC0xNTY0LDcgKzE1NzMsMTAgQEAKIAkJICAgICJzY3NpKCVsZCk6IEludmFsaWQgc3RhdHVzIGhhbmRsZSAoMHgleCkuXG4iLCB2aGEtPmhvc3Rfbm8sCiAJCSAgICBzdHMtPmhhbmRsZSk7CiAKLQkJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOworCQlpZiAoSVNfUUxBODJYWChoYSkpCisJCQlzZXRfYml0KEZDT0VfQ1RYX1JFU0VUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKKwkJZWxzZQorCQkJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOwogCQlxbGEyeHh4X3dha2VfZHBjKHZoYSk7CiAJCXJldHVybjsKIAl9CkBAIC0xNzk0LDEyICsxODA2LDEzIEBACiAJaWYgKGxvZ2l0KQogCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAogCQkgICAgInNjc2koJWxkOiVkOiVkKSBGQ1AgY29tbWFuZCBzdGF0dXM6IDB4JXgtMHgleCAoMHgleCkgIgotCQkgICAgIm94aWQ9MHgleCBjZGI9JTAyeCUwMnglMDJ4IGxlbj0weCV4ICIKKwkJICAgICJwb3J0aWQ9JTAyeCUwMnglMDJ4IG94aWQ9MHgleCBjZGI9JTAyeCUwMnglMDJ4IGxlbj0weCV4ICIKIAkJICAgICJyc3BfaW5mbz0weCV4IHJlc2lkPTB4JXggZndfcmVzaWQ9MHgleFxuIiwgdmhhLT5ob3N0X25vLAogCQkgICAgY3AtPmRldmljZS0+aWQsIGNwLT5kZXZpY2UtPmx1biwgY29tcF9zdGF0dXMsIHNjc2lfc3RhdHVzLAotCQkgICAgY3AtPnJlc3VsdCwgb3hfaWQsIGNwLT5jbW5kWzBdLAotCQkgICAgY3AtPmNtbmRbMV0sIGNwLT5jbW5kWzJdLCBzY3NpX2J1ZmZsZW4oY3ApLCByc3BfaW5mb19sZW4sCi0JCSAgICByZXNpZF9sZW4sIGZ3X3Jlc2lkX2xlbikpOworCQkgICAgY3AtPnJlc3VsdCwgZmNwb3J0LT5kX2lkLmIuZG9tYWluLCBmY3BvcnQtPmRfaWQuYi5hcmVhLAorCQkgICAgZmNwb3J0LT5kX2lkLmIuYWxfcGEsIG94X2lkLCBjcC0+Y21uZFswXSwgY3AtPmNtbmRbMV0sCisJCSAgICBjcC0+Y21uZFsyXSwgc2NzaV9idWZmbGVuKGNwKSwgcnNwX2luZm9fbGVuLCByZXNpZF9sZW4sCisJCSAgICBmd19yZXNpZF9sZW4pKTsKIAogCWlmIChyc3AtPnN0YXR1c19zcmIgPT0gTlVMTCkKIAkJcWxhMngwMF9zcF9jb21wbChoYSwgc3ApOwpAQCAtMTkwOCwxMyArMTkyMSwxNyBAQAogCQlxbGEyeDAwX3NwX2NvbXBsKGhhLCBzcCk7CiAKIAl9IGVsc2UgaWYgKHBrdC0+ZW50cnlfdHlwZSA9PSBDT01NQU5EX0E2NF9UWVBFIHx8IHBrdC0+ZW50cnlfdHlwZSA9PQotCSAgICBDT01NQU5EX1RZUEUgfHwgcGt0LT5lbnRyeV90eXBlID09IENPTU1BTkRfVFlQRV83KSB7CisJCUNPTU1BTkRfVFlQRSB8fCBwa3QtPmVudHJ5X3R5cGUgPT0gQ09NTUFORF9UWVBFXzcKKwkJfHwgcGt0LT5lbnRyeV90eXBlID09IENPTU1BTkRfVFlQRV82KSB7CiAJCURFQlVHMihwcmludGsoInNjc2koJWxkKTogRXJyb3IgZW50cnkgLSBpbnZhbGlkIGhhbmRsZVxuIiwKLQkJICAgIHZoYS0+aG9zdF9ubykpOworCQkJdmhhLT5ob3N0X25vKSk7CiAJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKLQkJICAgICJFcnJvciBlbnRyeSAtIGludmFsaWQgaGFuZGxlXG4iKTsKKwkJCSJFcnJvciBlbnRyeSAtIGludmFsaWQgaGFuZGxlXG4iKTsKIAotCQlzZXRfYml0KElTUF9BQk9SVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CisJCWlmIChJU19RTEE4MlhYKGhhKSkKKwkJCXNldF9iaXQoRkNPRV9DVFhfUkVTRVRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOworCQllbHNlCisJCQlzZXRfYml0KElTUF9BQk9SVF9ORUVERUQsICZ2aGEtPmRwY19mbGFncyk7CiAJCXFsYTJ4eHhfd2FrZV9kcGModmhhKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMKaW5kZXggMzQ4OTMzOS4uYzI2ZjBhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTEgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpAQCAtMTI2MSwxMSArMTI2MSwxMiBAQAogCQkvKiBDaGVjayBmb3IgbG9nZ2VkIGluIHN0YXRlLiAqLwogCQlpZiAocGQyNC0+Y3VycmVudF9sb2dpbl9zdGF0ZSAhPSBQRFNfUFJMSV9DT01QTEVURSAmJgogCQkgICAgcGQyNC0+bGFzdF9sb2dpbl9zdGF0ZSAhPSBQRFNfUFJMSV9DT01QTEVURSkgewotCQkJREVCVUcyKHByaW50aygiJXMoJWxkKTogVW5hYmxlIHRvIHZlcmlmeSAiCi0JCQkgICAgImxvZ2luLXN0YXRlICgleC8leCkgZm9yIGxvb3BfaWQgJXhcbiIsCi0JCQkgICAgX19mdW5jX18sIHZoYS0+aG9zdF9ubywKLQkJCSAgICBwZDI0LT5jdXJyZW50X2xvZ2luX3N0YXRlLAotCQkJICAgIHBkMjQtPmxhc3RfbG9naW5fc3RhdGUsIGZjcG9ydC0+bG9vcF9pZCkpOworCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJCSAgICJzY3NpKCVsZCk6IFVuYWJsZSB0byB2ZXJpZnkgbG9naW4tc3RhdGUgKCV4LyV4KSAiCisJCQkgICAiIC0gcG9ydGlkPSUwMnglMDJ4JTAyeC5cbiIsIHZoYS0+aG9zdF9ubywKKwkJCSAgIHBkMjQtPmN1cnJlbnRfbG9naW5fc3RhdGUsIHBkMjQtPmxhc3RfbG9naW5fc3RhdGUsCisJCQkgICBmY3BvcnQtPmRfaWQuYi5kb21haW4sIGZjcG9ydC0+ZF9pZC5iLmFyZWEsCisJCQkgICBmY3BvcnQtPmRfaWQuYi5hbF9wYSkpOwogCQkJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAJCQlnb3RvIGdwZF9lcnJvcl9vdXQ7CiAJCX0KQEAgLTEyODksNiArMTI5MCwxMiBAQAogCQkvKiBDaGVjayBmb3IgbG9nZ2VkIGluIHN0YXRlLiAqLwogCQlpZiAocGQtPm1hc3Rlcl9zdGF0ZSAhPSBQRF9TVEFURV9QT1JUX0xPR0dFRF9JTiAmJgogCQkgICAgcGQtPnNsYXZlX3N0YXRlICE9IFBEX1NUQVRFX1BPUlRfTE9HR0VEX0lOKSB7CisJCQlERUJVRzIocWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkJICAgInNjc2koJWxkKTogVW5hYmxlIHRvIHZlcmlmeSBsb2dpbi1zdGF0ZSAoJXgvJXgpICIKKwkJCSAgICIgLSBwb3J0aWQ9JTAyeCUwMnglMDJ4LlxuIiwgdmhhLT5ob3N0X25vLAorCQkJICAgcGQtPm1hc3Rlcl9zdGF0ZSwgcGQtPnNsYXZlX3N0YXRlLAorCQkJICAgZmNwb3J0LT5kX2lkLmIuZG9tYWluLCBmY3BvcnQtPmRfaWQuYi5hcmVhLAorCQkJICAgZmNwb3J0LT5kX2lkLmIuYWxfcGEpKTsKIAkJCXJ2YWwgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCQkJZ290byBncGRfZXJyb3Jfb3V0OwogCQl9CkBAIC0xODgzLDcgKzE4OTAsOCBAQAogCWxnLT5oYW5kbGUgPSBNQUtFX0hBTkRMRShyZXEtPmlkLCBsZy0+aGFuZGxlKTsKIAlsZy0+bnBvcnRfaGFuZGxlID0gY3B1X3RvX2xlMTYobG9vcF9pZCk7CiAJbGctPmNvbnRyb2xfZmxhZ3MgPQotCSAgICBfX2NvbnN0YW50X2NwdV90b19sZTE2KExDRl9DT01NQU5EX0xPR098TENGX0lNUExfTE9HTyk7CisJICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoTENGX0NPTU1BTkRfTE9HT3xMQ0ZfSU1QTF9MT0dPfAorCQlMQ0ZfRlJFRV9OUE9SVCk7CiAJbGctPnBvcnRfaWRbMF0gPSBhbF9wYTsKIAlsZy0+cG9ydF9pZFsxXSA9IGFyZWE7CiAJbGctPnBvcnRfaWRbMl0gPSBkb21haW47CkBAIC0yMzYyLDcgKzIzNzAsNyBAQAogCWFidC0+ZW50cnlfY291bnQgPSAxOwogCWFidC0+aGFuZGxlID0gTUFLRV9IQU5ETEUocmVxLT5pZCwgYWJ0LT5oYW5kbGUpOwogCWFidC0+bnBvcnRfaGFuZGxlID0gY3B1X3RvX2xlMTYoZmNwb3J0LT5sb29wX2lkKTsKLQlhYnQtPmhhbmRsZV90b19hYm9ydCA9IGhhbmRsZTsKKwlhYnQtPmhhbmRsZV90b19hYm9ydCA9IE1BS0VfSEFORExFKHJlcS0+aWQsIGhhbmRsZSk7CiAJYWJ0LT5wb3J0X2lkWzBdID0gZmNwb3J0LT5kX2lkLmIuYWxfcGE7CiAJYWJ0LT5wb3J0X2lkWzFdID0gZmNwb3J0LT5kX2lkLmIuYXJlYTsKIAlhYnQtPnBvcnRfaWRbMl0gPSBmY3BvcnQtPmRfaWQuYi5kb21haW47CkBAIC0yNzc5LDQ0ICsyNzg3LDYgQEAKIH0KIAogaW50Ci1xbGEyeDAwX3JlYWRfc2ZwKHNjc2lfcWxhX2hvc3RfdCAqdmhhLCBkbWFfYWRkcl90IHNmcF9kbWEsIHVpbnQxNl90IGFkZHIsCi0gICAgdWludDE2X3Qgb2ZmLCB1aW50MTZfdCBjb3VudCkKLXsKLQlpbnQgcnZhbDsKLQltYnhfY21kX3QgbWM7Ci0JbWJ4X2NtZF90ICptY3AgPSAmbWM7Ci0KLQlpZiAoIUlTX0ZXSTJfQ0FQQUJMRSh2aGEtPmh3KSkKLQkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7Ci0KLQlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKLQotCW1jcC0+bWJbMF0gPSBNQkNfUkVBRF9TRlA7Ci0JbWNwLT5tYlsxXSA9IGFkZHI7Ci0JbWNwLT5tYlsyXSA9IE1TVyhzZnBfZG1hKTsKLQltY3AtPm1iWzNdID0gTFNXKHNmcF9kbWEpOwotCW1jcC0+bWJbNl0gPSBNU1coTVNEKHNmcF9kbWEpKTsKLQltY3AtPm1iWzddID0gTFNXKE1TRChzZnBfZG1hKSk7Ci0JbWNwLT5tYls4XSA9IGNvdW50OwotCW1jcC0+bWJbOV0gPSBvZmY7Ci0JbWNwLT5tYlsxMF0gPSAwOwotCW1jcC0+b3V0X21iID0gTUJYXzEwfE1CWF85fE1CWF84fE1CWF83fE1CWF82fE1CWF8zfE1CWF8yfE1CWF8xfE1CWF8wOwotCW1jcC0+aW5fbWIgPSBNQlhfMDsKLQltY3AtPnRvdiA9IE1CWF9UT1ZfU0VDT05EUzsKLQltY3AtPmZsYWdzID0gMDsKLQlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQodmhhLCBtY3ApOwotCi0JaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKLQkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQ9JXggKCV4KS5cbiIsIF9fZnVuY19fLAotCQkgICAgdmhhLT5ob3N0X25vLCBydmFsLCBtY3AtPm1iWzBdKSk7Ci0JfSBlbHNlIHsKLQkJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGRvbmUuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7Ci0JfQotCi0JcmV0dXJuIHJ2YWw7Ci19Ci0KLWludAogcWxhMngwMF9nZXRfaWRtYV9zcGVlZChzY3NpX3FsYV9ob3N0X3QgKnZoYSwgdWludDE2X3QgbG9vcF9pZCwKIAl1aW50MTZfdCAqcG9ydF9zcGVlZCwgdWludDE2X3QgKm1iKQogewpAQCAtMzU4MSwxNSArMzU1MSwyMiBAQAogfQogCiBpbnQKLXFsYTJ4MDBfcmVhZF9lZGMoc2NzaV9xbGFfaG9zdF90ICp2aGEsIHVpbnQxNl90IGRldiwgdWludDE2X3QgYWRyLAotICAgIGRtYV9hZGRyX3Qgc2ZwX2RtYSwgdWludDhfdCAqc2ZwLCB1aW50MTZfdCBsZW4sIHVpbnQxNl90IG9wdCkKK3FsYTJ4MDBfcmVhZF9zZnAoc2NzaV9xbGFfaG9zdF90ICp2aGEsIGRtYV9hZGRyX3Qgc2ZwX2RtYSwgdWludDhfdCAqc2ZwLAorCXVpbnQxNl90IGRldiwgdWludDE2X3Qgb2ZmLCB1aW50MTZfdCBsZW4sIHVpbnQxNl90IG9wdCkKIHsKIAlpbnQgcnZhbDsKIAltYnhfY21kX3QgbWM7CiAJbWJ4X2NtZF90ICptY3AgPSAmbWM7CisJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CisKKwlpZiAoIUlTX0ZXSTJfQ0FQQUJMRShoYSkpCisJCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCiAJREVCVUcxMShwcmludGsoIiVzKCVsZCk6IGVudGVyZWQuXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vKSk7CiAKKwlpZiAobGVuID09IDEpCisJCW9wdCB8PSBCSVRfMDsKKwogCW1jcC0+bWJbMF0gPSBNQkNfUkVBRF9TRlA7CiAJbWNwLT5tYlsxXSA9IGRldjsKIAltY3AtPm1iWzJdID0gTVNXKHNmcF9kbWEpOwpAQCAtMzU5NywxNyArMzU3NCwxNiBAQAogCW1jcC0+bWJbNl0gPSBNU1coTVNEKHNmcF9kbWEpKTsKIAltY3AtPm1iWzddID0gTFNXKE1TRChzZnBfZG1hKSk7CiAJbWNwLT5tYls4XSA9IGxlbjsKLQltY3AtPm1iWzldID0gYWRyOworCW1jcC0+bWJbOV0gPSBvZmY7CiAJbWNwLT5tYlsxMF0gPSBvcHQ7CiAJbWNwLT5vdXRfbWIgPSBNQlhfMTB8TUJYXzl8TUJYXzh8TUJYXzd8TUJYXzZ8TUJYXzN8TUJYXzJ8TUJYXzF8TUJYXzA7Ci0JbWNwLT5pbl9tYiA9IE1CWF8wOworCW1jcC0+aW5fbWIgPSBNQlhfMXxNQlhfMDsKIAltY3AtPnRvdiA9IE1CWF9UT1ZfU0VDT05EUzsKIAltY3AtPmZsYWdzID0gMDsKIAlydmFsID0gcWxhMngwMF9tYWlsYm94X2NvbW1hbmQodmhhLCBtY3ApOwogCiAJaWYgKG9wdCAmIEJJVF8wKQotCQlpZiAoc2ZwKQotCQkJKnNmcCA9IG1jcC0+bWJbOF07CisJCSpzZnAgPSBtY3AtPm1iWzFdOwogCiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJREVCVUcyXzNfMTEocHJpbnRrKCIlcyglbGQpOiBmYWlsZWQ9JXggKCV4KS5cbiIsIF9fZnVuY19fLApAQCAtMzYyMCwxOCArMzU5NiwyNCBAQAogfQogCiBpbnQKLXFsYTJ4MDBfd3JpdGVfZWRjKHNjc2lfcWxhX2hvc3RfdCAqdmhhLCB1aW50MTZfdCBkZXYsIHVpbnQxNl90IGFkciwKLSAgICBkbWFfYWRkcl90IHNmcF9kbWEsIHVpbnQ4X3QgKnNmcCwgdWludDE2X3QgbGVuLCB1aW50MTZfdCBvcHQpCitxbGEyeDAwX3dyaXRlX3NmcChzY3NpX3FsYV9ob3N0X3QgKnZoYSwgZG1hX2FkZHJfdCBzZnBfZG1hLCB1aW50OF90ICpzZnAsCisJdWludDE2X3QgZGV2LCB1aW50MTZfdCBvZmYsIHVpbnQxNl90IGxlbiwgdWludDE2X3Qgb3B0KQogewogCWludCBydmFsOwogCW1ieF9jbWRfdCBtYzsKIAltYnhfY21kX3QgKm1jcCA9ICZtYzsKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKworCWlmICghSVNfRldJMl9DQVBBQkxFKGhhKSkKKwkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CiAKIAlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKIAorCWlmIChsZW4gPT0gMSkKKwkJb3B0IHw9IEJJVF8wOworCiAJaWYgKG9wdCAmIEJJVF8wKQotCQlpZiAoc2ZwKQotCQkJbGVuID0gKnNmcDsKKwkJbGVuID0gKnNmcDsKIAogCW1jcC0+bWJbMF0gPSBNQkNfV1JJVEVfU0ZQOwogCW1jcC0+bWJbMV0gPSBkZXY7CkBAIC0zNjQwLDEwICszNjIyLDEwIEBACiAJbWNwLT5tYls2XSA9IE1TVyhNU0Qoc2ZwX2RtYSkpOwogCW1jcC0+bWJbN10gPSBMU1coTVNEKHNmcF9kbWEpKTsKIAltY3AtPm1iWzhdID0gbGVuOwotCW1jcC0+bWJbOV0gPSBhZHI7CisJbWNwLT5tYls5XSA9IG9mZjsKIAltY3AtPm1iWzEwXSA9IG9wdDsKIAltY3AtPm91dF9tYiA9IE1CWF8xMHxNQlhfOXxNQlhfOHxNQlhfN3xNQlhfNnxNQlhfM3xNQlhfMnxNQlhfMXxNQlhfMDsKLQltY3AtPmluX21iID0gTUJYXzA7CisJbWNwLT5pbl9tYiA9IE1CWF8xfE1CWF8wOwogCW1jcC0+dG92ID0gTUJYX1RPVl9TRUNPTkRTOwogCW1jcC0+ZmxhZ3MgPSAwOwogCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZCh2aGEsIG1jcCk7CkBAIC00MTYwLDYzICs0MTQyLDMyIEBACiBxbGEyeDAwX2dldF90aGVybWFsX3RlbXAoc2NzaV9xbGFfaG9zdF90ICp2aGEsIHVpbnQxNl90ICp0ZW1wLCB1aW50MTZfdCAqZnJhYykKIHsKIAlpbnQgcnZhbDsKLQltYnhfY21kX3QgbWM7Ci0JbWJ4X2NtZF90ICptY3AgPSAmbWM7CisJdWludDhfdCBieXRlOwogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwogCi0JREVCVUcxMShwcmludGsoS0VSTl9JTkZPICIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKSk7CisJREVCVUcxMShwcmludGsoS0VSTl9JTkZPICIlcyglbGQpOiBlbnRlcmVkLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOwogCi0JLyogSGlnaCBiaXRzLiAqLwotCW1jcC0+bWJbMF0gPSBNQkNfUkVBRF9TRlA7Ci0JbWNwLT5tYlsxXSA9IDB4OTg7Ci0JbWNwLT5tYlsyXSA9IDA7Ci0JbWNwLT5tYlszXSA9IDA7Ci0JbWNwLT5tYls2XSA9IDA7Ci0JbWNwLT5tYls3XSA9IDA7Ci0JbWNwLT5tYls4XSA9IDE7Ci0JbWNwLT5tYls5XSA9IDB4MDE7Ci0JbWNwLT5tYlsxMF0gPSBCSVRfMTN8QklUXzA7Ci0JbWNwLT5vdXRfbWIgPSBNQlhfMTB8TUJYXzl8TUJYXzh8TUJYXzd8TUJYXzZ8TUJYXzN8TUJYXzJ8TUJYXzF8TUJYXzA7Ci0JbWNwLT5pbl9tYiA9IE1CWF8xfE1CWF8wOwotCW1jcC0+dG92ID0gTUJYX1RPVl9TRUNPTkRTOwotCW1jcC0+ZmxhZ3MgPSAwOwotCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZCh2aGEsIG1jcCk7CisJLyogSW50ZWdlciBwYXJ0ICovCisJcnZhbCA9IHFsYTJ4MDBfcmVhZF9zZnAodmhhLCAwLCAmYnl0ZSwgMHg5OCwgMHgwMSwgMSwgQklUXzEzfEJJVF8wKTsKIAlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgewogCQlERUJVRzJfM18xMShwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAiJXMoJWxkKTogZmFpbGVkPSV4ICgleCkuXG4iLCBfX2Z1bmNfXywKLQkJICAgIHZoYS0+aG9zdF9ubywgcnZhbCwgbWNwLT5tYlswXSkpOworCQkgICAgIiVzKCVsZCk6IGZhaWxlZD0leC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sIHJ2YWwpKTsKIAkJaGEtPmZsYWdzLnRoZXJtYWxfc3VwcG9ydGVkID0gMDsKIAkJZ290byBmYWlsOwogCX0KLQkqdGVtcCA9IG1jcC0+bWJbMV0gJiAweEZGOworCSp0ZW1wID0gYnl0ZTsKIAotCS8qIExvdyBiaXRzLiAqLwotCW1jcC0+bWJbMF0gPSBNQkNfUkVBRF9TRlA7Ci0JbWNwLT5tYlsxXSA9IDB4OTg7Ci0JbWNwLT5tYlsyXSA9IDA7Ci0JbWNwLT5tYlszXSA9IDA7Ci0JbWNwLT5tYls2XSA9IDA7Ci0JbWNwLT5tYls3XSA9IDA7Ci0JbWNwLT5tYls4XSA9IDE7Ci0JbWNwLT5tYls5XSA9IDB4MTA7Ci0JbWNwLT5tYlsxMF0gPSBCSVRfMTN8QklUXzA7Ci0JbWNwLT5vdXRfbWIgPSBNQlhfMTB8TUJYXzl8TUJYXzh8TUJYXzd8TUJYXzZ8TUJYXzN8TUJYXzJ8TUJYXzF8TUJYXzA7Ci0JbWNwLT5pbl9tYiA9IE1CWF8xfE1CWF8wOwotCW1jcC0+dG92ID0gTUJYX1RPVl9TRUNPTkRTOwotCW1jcC0+ZmxhZ3MgPSAwOwotCXJ2YWwgPSBxbGEyeDAwX21haWxib3hfY29tbWFuZCh2aGEsIG1jcCk7CisJLyogRnJhY3Rpb24gcGFydCAqLworCXJ2YWwgPSBxbGEyeDAwX3JlYWRfc2ZwKHZoYSwgMCwgJmJ5dGUsIDB4OTgsIDB4MTAsIDEsIEJJVF8xM3xCSVRfMCk7CiAJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJREVCVUcyXzNfMTEocHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgIiVzKCVsZCk6IGZhaWxlZD0leCAoJXgpLlxuIiwgX19mdW5jX18sCi0JCSAgICB2aGEtPmhvc3Rfbm8sIHJ2YWwsIG1jcC0+bWJbMF0pKTsKKwkJICAgICIlcyglbGQpOiBmYWlsZWQ9JXguXG4iLCBfX2Z1bmNfXywgdmhhLT5ob3N0X25vLCBydmFsKSk7CiAJCWhhLT5mbGFncy50aGVybWFsX3N1cHBvcnRlZCA9IDA7CiAJCWdvdG8gZmFpbDsKIAl9Ci0JKmZyYWMgPSAoKG1jcC0+bWJbMV0gJiAweEZGKSA+PiA2KSAqIDI1OworCSpmcmFjID0gKGJ5dGUgPj4gNikgKiAyNTsKIAotCWlmIChydmFsID09IFFMQV9TVUNDRVNTKQotCQlERUJVRzExKHByaW50ayhLRVJOX0lORk8KLQkJICAgICIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIGhhLT5ob3N0X25vKSk7CisJREVCVUcxMShwcmludGsoS0VSTl9JTkZPICIlcyglbGQpOiBkb25lLlxuIiwgX19mdW5jX18sIHZoYS0+aG9zdF9ubykpOwogZmFpbDoKIAlyZXR1cm4gcnZhbDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9taWQuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9taWQuYwppbmRleCAyYjY5MzkyLi41ZTM0MzkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWlkLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21pZC5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMSBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCkBAIC0xMzYsNyArMTM2LDcgQEAKIAkJICAgIHZoYS0+aG9zdF9ubywgZmNwb3J0LT5sb29wX2lkLCBmY3BvcnQtPnZwX2lkeCkpOwogCiAJCXFsYTJ4MDBfbWFya19kZXZpY2VfbG9zdCh2aGEsIGZjcG9ydCwgMCwgMCk7Ci0JCWF0b21pY19zZXQoJmZjcG9ydC0+c3RhdGUsIEZDU19VTkNPTkZJR1VSRUQpOworCQlxbGEyeDAwX3NldF9mY3BvcnRfc3RhdGUoZmNwb3J0LCBGQ1NfVU5DT05GSUdVUkVEKTsKIAl9CiB9CiAKQEAgLTQ1Niw3ICs0NTYsNyBAQAogCWVsc2UKIAkJaG9zdC0+bWF4X2NtZF9sZW4gPSBNQVhfQ01EU1o7CiAJaG9zdC0+bWF4X2NoYW5uZWwgPSBNQVhfQlVTRVMgLSAxOwotCWhvc3QtPm1heF9sdW4gPSBNQVhfTFVOUzsKKwlob3N0LT5tYXhfbHVuID0gcWwyeG1heGx1bjsKIAlob3N0LT51bmlxdWVfaWQgPSBob3N0LT5ob3N0X25vOwogCWhvc3QtPm1heF9pZCA9IE1BWF9UQVJHRVRTXzIyMDA7CiAJaG9zdC0+dHJhbnNwb3J0dCA9IHFsYTJ4eHhfdHJhbnNwb3J0X3Zwb3J0X3RlbXBsYXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX254LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbnguYwppbmRleCA0NTVmZTEzLi5lMTEzOGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbnguYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbnguYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTEgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpAQCAtODQ0LDYgKzg0NCwxMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZAorcWxhODJ4eF9yb21fdW5sb2NrKHN0cnVjdCBxbGFfaHdfZGF0YSAqaGEpCit7CisJcWxhODJ4eF9yZF8zMihoYSwgUUxBODJYWF9QQ0lFX1JFRyhQQ0lFX1NFTTJfVU5MT0NLKSk7Cit9CisKIHN0YXRpYyBpbnQKIHFsYTgyeHhfd2FpdF9yb21fYnVzeShzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhKQogewpAQCAtOTI0LDcgKzkzMCw3IEBACiAJCXJldHVybiAtMTsKIAl9CiAJcmV0ID0gcWxhODJ4eF9kb19yb21fZmFzdF9yZWFkKGhhLCBhZGRyLCB2YWxwKTsKLQlxbGE4Mnh4X3JkXzMyKGhhLCBRTEE4MlhYX1BDSUVfUkVHKFBDSUVfU0VNMl9VTkxPQ0spKTsKKwlxbGE4Mnh4X3JvbV91bmxvY2soaGEpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEwNTYsNyArMTA2Miw3IEBACiAJcmV0ID0gcWxhODJ4eF9mbGFzaF93YWl0X3dyaXRlX2ZpbmlzaChoYSk7CiAKIGRvbmVfd3JpdGU6Ci0JcWxhODJ4eF9yZF8zMihoYSwgUUxBODJYWF9QQ0lFX1JFRyhQQ0lFX1NFTTJfVU5MT0NLKSk7CisJcWxhODJ4eF9yb21fdW5sb2NrKGhhKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMDgxLDEyICsxMDg3LDI2IEBACiAJLyogSGFsdCBhbGwgdGhlIGluZGl2aXVhbCBQRUdzIGFuZCBvdGhlciBibG9ja3Mgb2YgdGhlIElTUCAqLwogCXFsYTgyeHhfcm9tX2xvY2soaGEpOwogCi0JLyogbWFzayBhbGwgbml1IGludGVycnVwdHMgKi8KKwkvKiBkaXNhYmxlIGFsbCBJMlEgKi8KKwlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9JMlEgKyAweDEwLCAweDApOworCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX0kyUSArIDB4MTQsIDB4MCk7CisJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfSTJRICsgMHgxOCwgMHgwKTsKKwlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9JMlEgKyAweDFjLCAweDApOworCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX0kyUSArIDB4MjAsIDB4MCk7CisJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfSTJRICsgMHgyNCwgMHgwKTsKKworCS8qIGRpc2FibGUgYWxsIG5pdSBpbnRlcnJ1cHRzICovCiAJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfTklVICsgMHg0MCwgMHhmZik7CiAJLyogZGlzYWJsZSB4Z2UgcngvdHggKi8KIAlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9OSVUgKyAweDcwMDAwLCAweDAwKTsKIAkvKiBkaXNhYmxlIHhnMSByeC90eCAqLwogCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX05JVSArIDB4ODAwMDAsIDB4MDApOworCS8qIGRpc2FibGUgc2lkZWJhbmQgbWFjICovCisJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfTklVICsgMHg5MDAwMCwgMHgwMCk7CisJLyogZGlzYWJsZSBhcDAgbWFjICovCisJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfTklVICsgMHhhMDAwMCwgMHgwMCk7CisJLyogZGlzYWJsZSBhcDEgbWFjICovCisJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfTklVICsgMHhiMDAwMCwgMHgwMCk7CiAKIAkvKiBoYWx0IHNyZSAqLwogCXZhbCA9IHFsYTgyeHhfcmRfMzIoaGEsIFFMQTgyWFhfQ1JCX1NSRSArIDB4MTAwMCk7CkBAIC0xMTAxLDYgKzExMjEsNyBAQAogCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX1RJTUVSICsgMHgxMCwgMHgwKTsKIAlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9USU1FUiArIDB4MTgsIDB4MCk7CiAJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfVElNRVIgKyAweDEwMCwgMHgwKTsKKwlxbGE4Mnh4X3dyXzMyKGhhLCBRTEE4MlhYX0NSQl9USU1FUiArIDB4MjAwLCAweDApOwogCiAJLyogaGFsdCBwZWdzICovCiAJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfUEVHX05FVF8wICsgMHgzYywgMSk7CkBAIC0xMTA4LDkgKzExMjksOSBAQAogCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX1BFR19ORVRfMiArIDB4M2MsIDEpOwogCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX1BFR19ORVRfMyArIDB4M2MsIDEpOwogCXFsYTgyeHhfd3JfMzIoaGEsIFFMQTgyWFhfQ1JCX1BFR19ORVRfNCArIDB4M2MsIDEpOworCW1zbGVlcCgyMCk7CiAKIAkvKiBiaWcgaGFtbWVyICovCi0JbXNsZWVwKDEwMDApOwogCWlmICh0ZXN0X2JpdChBQk9SVF9JU1BfQUNUSVZFLCAmdmhhLT5kcGNfZmxhZ3MpKQogCQkvKiBkb24ndCByZXNldCBDQU0gYmxvY2sgb24gcmVzZXQgKi8KIAkJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9ST01VU0JfR0xCX1NXX1JFU0VULCAweGZlZmZmZmZmKTsKQEAgLTExMjksNyArMTE1MCw3IEBACiAJcWxhODJ4eF93cl8zMihoYSwgUUxBODJYWF9DUkJfUURSX05FVCArIDB4ZTQsIHZhbCk7CiAJbXNsZWVwKDIwKTsKIAotCXFsYTgyeHhfcmRfMzIoaGEsIFFMQTgyWFhfUENJRV9SRUcoUENJRV9TRU0yX1VOTE9DSykpOworCXFsYTgyeHhfcm9tX3VubG9jayhoYSk7CiAKIAkvKiBSZWFkIHRoZSBzaWduYXR1cmUgdmFsdWUgZnJvbSB0aGUgZmxhc2guCiAJICogT2Zmc2V0IDA6IENvbnRhaW4gc2lnbmF0dXJlICgweGNhZmVjYWZlKQpAQCAtMjM5NSw5ICsyNDE2LDEzIEBACiAKIAlpZiAocWxhODJ4eF9md19sb2FkX2Zyb21fZmxhc2goaGEpID09IFFMQV9TVUNDRVNTKSB7CiAJCXFsYV9wcmludGsoS0VSTl9FUlIsIGhhLAotCQkJIkZpcm13YXJlIGxvYWRlZCBzdWNjZXNzZnVsbHkgZnJvbSBmbGFzaFxuIik7CisJCSAgICAiRmlybXdhcmUgbG9hZGVkIHN1Y2Nlc3NmdWxseSBmcm9tIGZsYXNoXG4iKTsKIAkJcmV0dXJuIFFMQV9TVUNDRVNTOworCX0gZWxzZSB7CisJCXFsYV9wcmludGsoS0VSTl9FUlIsIGhhLAorCQkgICAgIkZpcm13YXJlIGxvYWQgZnJvbSBmbGFzaCBmYWlsZWRcbiIpOwogCX0KKwogdHJ5X2Jsb2JfZnc6CiAJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAogCSAgICAiQXR0ZW1wdGluZyB0byBsb2FkIGZpcm13YXJlIGZyb20gYmxvYlxuIik7CkBAIC0yNTQ4LDExICsyNTczLDExIEBACiAJCQlkc2Rfc2VnID0gKHVpbnQzMl90ICopJmNtZF9wa3QtPmZjcF9kYXRhX2RzZWdfYWRkcmVzczsKIAkJCSpkc2Rfc2VnKysgPSBjcHVfdG9fbGUzMihMU0QoZHNkX3B0ci0+ZHNkX2xpc3RfZG1hKSk7CiAJCQkqZHNkX3NlZysrID0gY3B1X3RvX2xlMzIoTVNEKGRzZF9wdHItPmRzZF9saXN0X2RtYSkpOwotCQkJY21kX3BrdC0+ZmNwX2RhdGFfZHNlZ19sZW4gPSBkc2RfbGlzdF9sZW47CisJCQkqZHNkX3NlZysrID0gY3B1X3RvX2xlMzIoZHNkX2xpc3RfbGVuKTsKIAkJfSBlbHNlIHsKIAkJCSpjdXJfZHNkKysgPSBjcHVfdG9fbGUzMihMU0QoZHNkX3B0ci0+ZHNkX2xpc3RfZG1hKSk7CiAJCQkqY3VyX2RzZCsrID0gY3B1X3RvX2xlMzIoTVNEKGRzZF9wdHItPmRzZF9saXN0X2RtYSkpOwotCQkJKmN1cl9kc2QrKyA9IGRzZF9saXN0X2xlbjsKKwkJCSpjdXJfZHNkKysgPSBjcHVfdG9fbGUzMihkc2RfbGlzdF9sZW4pOwogCQl9CiAJCWN1cl9kc2QgPSAodWludDMyX3QgKiluZXh0X2RzZDsKIAkJd2hpbGUgKGF2YWlsX2RzZHMpIHsKQEAgLTI5OTEsNyArMzAxNiw3IEBACiAJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwgIldyaXRlIGRpc2FibGUgZmFpbGVkXG4iKTsKIAogZG9uZV91bnByb3RlY3Q6Ci0JcWxhODJ4eF9yZF8zMihoYSwgUUxBODJYWF9QQ0lFX1JFRyhQQ0lFX1NFTTJfVU5MT0NLKSk7CisJcWxhODJ4eF9yb21fdW5sb2NrKGhhKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zMDIwLDcgKzMwNDUsNyBAQAogCWlmIChxbGE4Mnh4X3dyaXRlX2Rpc2FibGVfZmxhc2goaGEpICE9IDApCiAJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwgIldyaXRlIGRpc2FibGUgZmFpbGVkXG4iKTsKIGRvbmVfcHJvdGVjdDoKLQlxbGE4Mnh4X3JkXzMyKGhhLCBRTEE4MlhYX1BDSUVfUkVHKFBDSUVfU0VNMl9VTkxPQ0spKTsKKwlxbGE4Mnh4X3JvbV91bmxvY2soaGEpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMwNDgsNyArMzA3Myw3IEBACiAJfQogCXJldCA9IHFsYTgyeHhfZmxhc2hfd2FpdF93cml0ZV9maW5pc2goaGEpOwogZG9uZToKLQlxbGE4Mnh4X3JkXzMyKGhhLCBRTEE4MlhYX1BDSUVfUkVHKFBDSUVfU0VNMl9VTkxPQ0spKTsKKwlxbGE4Mnh4X3JvbV91bmxvY2soaGEpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMyMjgsNyArMzI1Myw3IEBACiAJICogZWxzZSBkaWVkIHdoaWxlIGhvbGRpbmcgaXQuCiAJICogSW4gZWl0aGVyIGNhc2UsIHVubG9jay4KIAkgKi8KLQlxbGE4Mnh4X3JkXzMyKGhhLCBRTEE4MlhYX1BDSUVfUkVHKFBDSUVfU0VNMl9VTkxPQ0spKTsKKwlxbGE4Mnh4X3JvbV91bmxvY2soaGEpOwogfQogCiAvKgpAQCAtMzUyOCwxNSArMzU1MywxOCBAQAogcWxhODJ4eF9kZXZpY2Vfc3RhdGVfaGFuZGxlcihzY3NpX3FsYV9ob3N0X3QgKnZoYSkKIHsKIAl1aW50MzJfdCBkZXZfc3RhdGU7CisJdWludDMyX3Qgb2xkX2Rldl9zdGF0ZTsKIAlpbnQgcnZhbCA9IFFMQV9TVUNDRVNTOwogCXVuc2lnbmVkIGxvbmcgZGV2X2luaXRfdGltZW91dDsKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKwlpbnQgbG9vcGNvdW50ID0gMDsKIAogCXFsYTgyeHhfaWRjX2xvY2soaGEpOwogCWlmICghdmhhLT5mbGFncy5pbml0X2RvbmUpCiAJCXFsYTgyeHhfc2V0X2Rydl9hY3RpdmUodmhhKTsKIAogCWRldl9zdGF0ZSA9IHFsYTgyeHhfcmRfMzIoaGEsIFFMQTgyWFhfQ1JCX0RFVl9TVEFURSk7CisJb2xkX2Rldl9zdGF0ZSA9IGRldl9zdGF0ZTsKIAlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsICIxOkRldmljZSBzdGF0ZSBpcyAweCV4ID0gJXNcbiIsIGRldl9zdGF0ZSwKIAkJZGV2X3N0YXRlIDwgTUFYX1NUQVRFUyA/IHFkZXZfc3RhdGVbZGV2X3N0YXRlXSA6ICJVbmtub3duIik7CiAKQEAgLTM1NTMsMTAgKzM1ODEsMTYgQEAKIAkJCWJyZWFrOwogCQl9CiAJCWRldl9zdGF0ZSA9IHFsYTgyeHhfcmRfMzIoaGEsIFFMQTgyWFhfQ1JCX0RFVl9TVEFURSk7Ci0JCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKLQkJCSIyOkRldmljZSBzdGF0ZSBpcyAweCV4ID0gJXNcbiIsIGRldl9zdGF0ZSwKLQkJCWRldl9zdGF0ZSA8IE1BWF9TVEFURVMgPwotCQkJcWRldl9zdGF0ZVtkZXZfc3RhdGVdIDogIlVua25vd24iKTsKKwkJaWYgKG9sZF9kZXZfc3RhdGUgIT0gZGV2X3N0YXRlKSB7CisJCQlsb29wY291bnQgPSAwOworCQkJb2xkX2Rldl9zdGF0ZSA9IGRldl9zdGF0ZTsKKwkJfQorCQlpZiAobG9vcGNvdW50IDwgNSkgeworCQkJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLAorCQkJICAgICIyOkRldmljZSBzdGF0ZSBpcyAweCV4ID0gJXNcbiIsIGRldl9zdGF0ZSwKKwkJCSAgICBkZXZfc3RhdGUgPCBNQVhfU1RBVEVTID8KKwkJCSAgICBxZGV2X3N0YXRlW2Rldl9zdGF0ZV0gOiAiVW5rbm93biIpOworCQl9CiAKIAkJc3dpdGNoIChkZXZfc3RhdGUpIHsKIAkJY2FzZSBRTEE4MlhYX0RFVl9SRUFEWToKQEAgLTM1NzAsNiArMzYwNCw3IEBACiAJCQlxbGE4Mnh4X2lkY19sb2NrKGhhKTsKIAkJCWJyZWFrOwogCQljYXNlIFFMQTgyWFhfREVWX05FRURfUkVTRVQ6CisJCSAgICBpZiAoIXFsMnhkb250cmVzZXRoYmEpCiAJCQlxbGE4Mnh4X25lZWRfcmVzZXRfaGFuZGxlcih2aGEpOwogCQkJZGV2X2luaXRfdGltZW91dCA9IGppZmZpZXMgKwogCQkJCShoYS0+bnhfZGV2X2luaXRfdGltZW91dCAqIEhaKTsKQEAgLTM2MDQsNiArMzYzOSw3IEBACiAJCQltc2xlZXAoMTAwMCk7CiAJCQlxbGE4Mnh4X2lkY19sb2NrKGhhKTsKIAkJfQorCQlsb29wY291bnQrKzsKIAl9CiBleGl0OgogCXFsYTgyeHhfaWRjX3VubG9jayhoYSk7CkBAIC0zNjIxLDcgKzM2NTcsOCBAQAogCQlpZiAoZGV2X3N0YXRlID09IFFMQTgyWFhfREVWX05FRURfUkVTRVQgJiYKIAkJICAgICF0ZXN0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpKSB7CiAJCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCi0JCQkgICAgIiVzKCk6IEFkYXB0ZXIgcmVzZXQgbmVlZGVkIVxuIiwgX19mdW5jX18pOworCQkJICAgICJzY3NpKCVsZCkgJXM6IEFkYXB0ZXIgcmVzZXQgbmVlZGVkIVxuIiwKKwkJCQl2aGEtPmhvc3Rfbm8sIF9fZnVuY19fKTsKIAkJCXNldF9iaXQoSVNQX0FCT1JUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKIAkJCXFsYTJ4eHhfd2FrZV9kcGModmhhKTsKIAkJfSBlbHNlIGlmIChkZXZfc3RhdGUgPT0gUUxBODJYWF9ERVZfTkVFRF9RVUlFU0NFTlQgJiYKQEAgLTM2MzIsMTAgKzM2NjksMjcgQEAKIAkJCXNldF9iaXQoSVNQX1FVSUVTQ0VfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOwogCQkJcWxhMnh4eF93YWtlX2RwYyh2aGEpOwogCQl9IGVsc2UgewotCQkJcWxhODJ4eF9jaGVja19md19hbGl2ZSh2aGEpOwogCQkJaWYgKHFsYTgyeHhfY2hlY2tfZndfYWxpdmUodmhhKSkgewogCQkJCWhhbHRfc3RhdHVzID0gcWxhODJ4eF9yZF8zMihoYSwKIAkJCQkgICAgUUxBODJYWF9QRUdfSEFMVF9TVEFUVVMxKTsKKwkJCQlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCisJCQkJICAgICJzY3NpKCVsZCk6ICVzLCBEdW1waW5nIGh3L2Z3IHJlZ2lzdGVyczpcbiAiCisJCQkJICAgICIgUEVHX0hBTFRfU1RBVFVTMTogMHgleCwgUEVHX0hBTFRfU1RBVFVTMjogMHgleCxcbiAiCisJCQkJICAgICIgUEVHX05FVF8wX1BDOiAweCV4LCBQRUdfTkVUXzFfUEM6IDB4JXgsXG4gIgorCQkJCSAgICAiIFBFR19ORVRfMl9QQzogMHgleCwgUEVHX05FVF8zX1BDOiAweCV4LFxuICIKKwkJCQkgICAgIiBQRUdfTkVUXzRfUEM6IDB4JXhcbiIsCisJCQkJICAgIHZoYS0+aG9zdF9ubywgX19mdW5jX18sIGhhbHRfc3RhdHVzLAorCQkJCSAgICBxbGE4Mnh4X3JkXzMyKGhhLCBRTEE4MlhYX1BFR19IQUxUX1NUQVRVUzIpLAorCQkJCSAgICBxbGE4Mnh4X3JkXzMyKGhhLAorCQkJCQkgICAgUUxBODJYWF9DUkJfUEVHX05FVF8wICsgMHgzYyksCisJCQkJICAgIHFsYTgyeHhfcmRfMzIoaGEsCisJCQkJCSAgICBRTEE4MlhYX0NSQl9QRUdfTkVUXzEgKyAweDNjKSwKKwkJCQkgICAgcWxhODJ4eF9yZF8zMihoYSwKKwkJCQkJICAgIFFMQTgyWFhfQ1JCX1BFR19ORVRfMiArIDB4M2MpLAorCQkJCSAgICBxbGE4Mnh4X3JkXzMyKGhhLAorCQkJCQkgICAgUUxBODJYWF9DUkJfUEVHX05FVF8zICsgMHgzYyksCisJCQkJICAgIHFsYTgyeHhfcmRfMzIoaGEsCisJCQkJCSAgICBRTEE4MlhYX0NSQl9QRUdfTkVUXzQgKyAweDNjKSk7CiAJCQkJaWYgKGhhbHRfc3RhdHVzICYgSEFMVF9TVEFUVVNfVU5SRUNPVkVSQUJMRSkgewogCQkJCQlzZXRfYml0KElTUF9VTlJFQ09WRVJBQkxFLAogCQkJCQkgICAgJnZoYS0+ZHBjX2ZsYWdzKTsKQEAgLTM2NTEsOCArMzcwNSw5IEBACiAJCQkJaWYgKGhhLT5mbGFncy5tYm94X2J1c3kpIHsKIAkJCQkJaGEtPmZsYWdzLm1ib3hfaW50ID0gMTsKIAkJCQkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9FUlIsIGhhLAotCQkJCQkgICAgIkR1ZSB0byBmdyBodW5nLCBkb2luZyBwcmVtYXR1cmUgIgotCQkJCQkgICAgImNvbXBsZXRpb24gb2YgbWJ4IGNvbW1hbmRcbiIpKTsKKwkJCQkJICAgICJzY3NpKCVsZCkgRHVlIHRvIGZ3IGh1bmcsIGRvaW5nICIKKwkJCQkJICAgICJwcmVtYXR1cmUgY29tcGxldGlvbiBvZiBtYnggIgorCQkJCQkgICAgImNvbW1hbmRcbiIsIHZoYS0+aG9zdF9ubykpOwogCQkJCQlpZiAodGVzdF9iaXQoTUJYX0lOVFJfV0FJVCwKIAkJCQkJICAgICZoYS0+bWJ4X2NtZF9mbGFncykpCiAJCQkJCQljb21wbGV0ZSgmaGEtPm1ieF9pbnRyX2NvbXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX254LmggYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbnguaAppbmRleCBlZDU4ODNmLi44YTIxODMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbnguaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbnguaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTEgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwppbmRleCBhYTc3NDc1Li5mNDYxOTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTEgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpAQCAtMTY0LDYgKzE2NCwyMCBAQAogTU9EVUxFX1BBUk1fREVTQyhxbDJ4YXN5bmN0bWZlbmFibGUsCiAJCSJFbmFibGVzIGlzc3VlIG9mIFRNIElPQ0JzIGFzeW5jaHJvbm91c2x5IHZpYSBJT0NCIG1lY2hhbmlzbSIKIAkJIkRlZmF1bHQgaXMgMCAtIElzc3VlIFRNIElPQ0JzIHZpYSBtYWlsYm94IG1lY2hhbmlzbS4iKTsKKworaW50IHFsMnhkb250cmVzZXRoYmE7Cittb2R1bGVfcGFyYW0ocWwyeGRvbnRyZXNldGhiYSwgaW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MocWwyeGRvbnRyZXNldGhiYSwKKwkiT3B0aW9uIHRvIHNwZWNpZnkgcmVzZXQgYmVoYXZpb3VyXG4iCisJIiAwIChEZWZhdWx0KSAtLSBSZXNldCBvbiBmYWlsdXJlLlxuIgorCSIgMSAtLSBEbyBub3QgcmVzZXQgb24gZmFpbHVyZS5cbiIpOworCit1aW50IHFsMnhtYXhsdW4gPSBNQVhfTFVOUzsKK21vZHVsZV9wYXJhbShxbDJ4bWF4bHVuLCB1aW50LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MocWwyeG1heGx1biwKKwkJIkRlZmluZXMgdGhlIG1heGltdW0gTFUgbnVtYmVyIHRvIHJlZ2lzdGVyIHdpdGggdGhlIFNDU0kgIgorCQkibWlkbGF5ZXIuIERlZmF1bHQgaXMgNjU1MzUuIik7CisKIC8qCiAgKiBTQ1NJIGhvc3QgdGVtcGxhdGUgZW50cnkgcG9pbnRzCiAgKi8KQEAgLTUyOCw3ICs1NDIsNyBAQAogc3RhdGljIGludAogcWxhMnh4eF9xdWV1ZWNvbW1hbmQoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCwgc3RydWN0IHNjc2lfY21uZCAqY21kKQogewotCXNjc2lfcWxhX2hvc3RfdCAqdmhhID0gc2hvc3RfcHJpdihjbWQtPmRldmljZS0+aG9zdCk7CisJc2NzaV9xbGFfaG9zdF90ICp2aGEgPSBzaG9zdF9wcml2KGhvc3QpOwogCWZjX3BvcnRfdCAqZmNwb3J0ID0gKHN0cnVjdCBmY19wb3J0ICopIGNtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0gc3RhcmdldF90b19ycG9ydChzY3NpX3RhcmdldChjbWQtPmRldmljZSkpOwogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwpAQCAtMjEyOCw3ICsyMTQyLDcgQEAKIAllbHNlCiAJCWhvc3QtPm1heF9jbWRfbGVuID0gTUFYX0NNRFNaOwogCWhvc3QtPm1heF9jaGFubmVsID0gTUFYX0JVU0VTIC0gMTsKLQlob3N0LT5tYXhfbHVuID0gTUFYX0xVTlM7CisJaG9zdC0+bWF4X2x1biA9IHFsMnhtYXhsdW47CiAJaG9zdC0+dHJhbnNwb3J0dCA9IHFsYTJ4eHhfdHJhbnNwb3J0X3RlbXBsYXRlOwogCXNodC0+dmVuZG9yX2lkID0gKFNDU0lfTkxfVklEX1RZUEVfUENJIHwgUENJX1ZFTkRPUl9JRF9RTE9HSUMpOwogCkBAIC0yMzYwLDIxICsyMzc0LDI2IEBACiAJYmFzZV92aGEgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJaGEgPSBiYXNlX3ZoYS0+aHc7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPnZwb3J0X3Nsb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeSh2aGEsICZoYS0+dnBfbGlzdCwgbGlzdCkgewotCQlhdG9taWNfaW5jKCZ2aGEtPnZyZWZfY291bnQpOworCW11dGV4X2xvY2soJmhhLT52cG9ydF9sb2NrKTsKKwl3aGlsZSAoaGEtPmN1cl92cG9ydF9jb3VudCkgeworCQlzdHJ1Y3QgU2NzaV9Ib3N0ICpzY3NpX2hvc3Q7CiAKLQkJaWYgKHZoYS0+ZmNfdnBvcnQpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT52cG9ydF9zbG9jaywgZmxhZ3MpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPnZwb3J0X3Nsb2NrLCBmbGFncyk7CiAKLQkJCWZjX3Zwb3J0X3Rlcm1pbmF0ZSh2aGEtPmZjX3Zwb3J0KTsKKwkJQlVHX09OKGJhc2VfdmhhLT5saXN0Lm5leHQgPT0gJmhhLT52cF9saXN0KTsKKwkJLyogVGhpcyBhc3N1bWVzIGZpcnN0IGVudHJ5IGluIGhhLT52cF9saXN0IGlzIGFsd2F5cyBiYXNlIHZoYSAqLworCQl2aGEgPSBsaXN0X2ZpcnN0X2VudHJ5KCZiYXNlX3ZoYS0+bGlzdCwgc2NzaV9xbGFfaG9zdF90LCBsaXN0KTsKKwkJc2NzaV9ob3N0ID0gc2NzaV9ob3N0X2dldCh2aGEtPmhvc3QpOwogCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPnZwb3J0X3Nsb2NrLCBmbGFncyk7Ci0JCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPnZwb3J0X3Nsb2NrLCBmbGFncyk7CisJCW11dGV4X3VubG9jaygmaGEtPnZwb3J0X2xvY2spOwogCi0JCWF0b21pY19kZWMoJnZoYS0+dnJlZl9jb3VudCk7CisJCWZjX3Zwb3J0X3Rlcm1pbmF0ZSh2aGEtPmZjX3Zwb3J0KTsKKwkJc2NzaV9ob3N0X3B1dCh2aGEtPmhvc3QpOworCisJCW11dGV4X2xvY2soJmhhLT52cG9ydF9sb2NrKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPnZwb3J0X3Nsb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZoYS0+dnBvcnRfbG9jayk7CiAKIAlzZXRfYml0KFVOTE9BRElORywgJmJhc2VfdmhhLT5kcGNfZmxhZ3MpOwogCkBAIC0yNTQ0LDcgKzI1NjMsNyBAQAogewogCWlmIChhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSkgPT0gRkNTX09OTElORSAmJgogCSAgICB2aGEtPnZwX2lkeCA9PSBmY3BvcnQtPnZwX2lkeCkgewotCQlhdG9taWNfc2V0KCZmY3BvcnQtPnN0YXRlLCBGQ1NfREVWSUNFX0xPU1QpOworCQlxbGEyeDAwX3NldF9mY3BvcnRfc3RhdGUoZmNwb3J0LCBGQ1NfREVWSUNFX0xPU1QpOwogCQlxbGEyeDAwX3NjaGVkdWxlX3Jwb3J0X2RlbCh2aGEsIGZjcG9ydCwgZGVmZXIpOwogCX0KIAkvKgpAQCAtMjU1Miw3ICsyNTcxLDcgQEAKIAkgKiBwb3J0IGJ1dCBkbyB0aGUgcmV0cmllcy4KIAkgKi8KIAlpZiAoYXRvbWljX3JlYWQoJmZjcG9ydC0+c3RhdGUpICE9IEZDU19ERVZJQ0VfREVBRCkKLQkJYXRvbWljX3NldCgmZmNwb3J0LT5zdGF0ZSwgRkNTX0RFVklDRV9MT1NUKTsKKwkJcWxhMngwMF9zZXRfZmNwb3J0X3N0YXRlKGZjcG9ydCwgRkNTX0RFVklDRV9MT1NUKTsKIAogCWlmICghZG9fbG9naW4pCiAJCXJldHVybjsKQEAgLTI2MDcsNyArMjYyNiw3IEBACiAJCWlmIChhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSkgPT0gRkNTX0RFVklDRV9ERUFEKQogCQkJY29udGludWU7CiAJCWlmIChhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSkgPT0gRkNTX09OTElORSkgewotCQkJYXRvbWljX3NldCgmZmNwb3J0LT5zdGF0ZSwgRkNTX0RFVklDRV9MT1NUKTsKKwkJCXFsYTJ4MDBfc2V0X2ZjcG9ydF9zdGF0ZShmY3BvcnQsIEZDU19ERVZJQ0VfTE9TVCk7CiAJCQlpZiAoZGVmZXIpCiAJCQkJcWxhMngwMF9zY2hlZHVsZV9ycG9ydF9kZWwodmhhLCBmY3BvcnQsIGRlZmVyKTsKIAkJCWVsc2UgaWYgKHZoYS0+dnBfaWR4ID09IGZjcG9ydC0+dnBfaWR4KQpAQCAtMzIxNCw2ICszMjMzLDE3IEBACiAJCQkJCQkJZmNwb3J0LT5kX2lkLmIuYXJlYSwKIAkJCQkJCQlmY3BvcnQtPmRfaWQuYi5hbF9wYSk7CiAKKwkJCQlpZiAoZmNwb3J0LT5sb29wX2lkID09IEZDX05PX0xPT1BfSUQpIHsKKwkJCQkJZmNwb3J0LT5sb29wX2lkID0gbmV4dF9sb29waWQgPQorCQkJCQkgICAgaGEtPm1pbl9leHRlcm5hbF9sb29waWQ7CisJCQkJCXN0YXR1cyA9IHFsYTJ4MDBfZmluZF9uZXdfbG9vcF9pZCgKKwkJCQkJICAgIHZoYSwgZmNwb3J0KTsKKwkJCQkJaWYgKHN0YXR1cyAhPSBRTEFfU1VDQ0VTUykgeworCQkJCQkJLyogUmFuIG91dCBvZiBJRHMgdG8gdXNlICovCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwogCQkJCWlmIChJU19BTE9HSU9fQ0FQQUJMRShoYSkpIHsKIAkJCQkJZmNwb3J0LT5mbGFncyB8PSBGQ0ZfQVNZTkNfU0VOVDsKIAkJCQkJZGF0YVswXSA9IDA7CkBAIC0zNjA0LDcgKzM2MzQsOCBAQAogCWlmICghcGNpX2NoYW5uZWxfb2ZmbGluZShoYS0+cGRldikpCiAJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGhhLT5wZGV2LCBQQ0lfVkVORE9SX0lELCAmdyk7CiAKLQlpZiAoSVNfUUxBODJYWChoYSkpIHsKKwkvKiBNYWtlIHN1cmUgcWxhODJ4eF93YXRjaGRvZyBpcyBydW4gb25seSBmb3IgcGh5c2ljYWwgcG9ydCAqLworCWlmICghdmhhLT52cF9pZHggJiYgSVNfUUxBODJYWChoYSkpIHsKIAkJaWYgKHRlc3RfYml0KElTUF9RVUlFU0NFX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKSkKIAkJCXN0YXJ0X2RwYysrOwogCQlxbGE4Mnh4X3dhdGNoZG9nKHZoYSk7CkBAIC0zNjEyLDcgKzM2NDMsOCBAQAogCiAJLyogTG9vcCBkb3duIGhhbmRsZXIuICovCiAJaWYgKGF0b21pY19yZWFkKCZ2aGEtPmxvb3BfZG93bl90aW1lcikgPiAwICYmCi0JICAgICEodGVzdF9iaXQoQUJPUlRfSVNQX0FDVElWRSwgJnZoYS0+ZHBjX2ZsYWdzKSkKKwkgICAgISh0ZXN0X2JpdChBQk9SVF9JU1BfQUNUSVZFLCAmdmhhLT5kcGNfZmxhZ3MpKSAmJgorCSAgICAhKHRlc3RfYml0KEZDT0VfQ1RYX1JFU0VUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKSkKIAkJJiYgdmhhLT5mbGFncy5vbmxpbmUpIHsKIAogCQlpZiAoYXRvbWljX3JlYWQoJnZoYS0+bG9vcF9kb3duX3RpbWVyKSA9PQpAQCAtMzY0OCw3ICszNjgwLDExIEBACiAJCQkJCWlmICghKHNmY3AtPmZsYWdzICYgRkNGX0ZDUDJfREVWSUNFKSkKIAkJCQkJCWNvbnRpbnVlOwogCi0JCQkJCXNldF9iaXQoSVNQX0FCT1JUX05FRURFRCwKKwkJCQkJaWYgKElTX1FMQTgyWFgoaGEpKQorCQkJCQkJc2V0X2JpdChGQ09FX0NUWF9SRVNFVF9ORUVERUQsCisJCQkJCQkJJnZoYS0+ZHBjX2ZsYWdzKTsKKwkJCQkJZWxzZQorCQkJCQkJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELAogCQkJCQkJCSZ2aGEtPmRwY19mbGFncyk7CiAJCQkJCWJyZWFrOwogCQkJCX0KQEAgLTM2NjcsNyArMzcwMywxMiBAQAogCQkJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKIAkJCQkgICAgIkxvb3AgZG93biAtIGFib3J0aW5nIElTUC5cbiIpOwogCi0JCQkJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOworCQkJCWlmIChJU19RTEE4MlhYKGhhKSkKKwkJCQkJc2V0X2JpdChGQ09FX0NUWF9SRVNFVF9ORUVERUQsCisJCQkJCQkmdmhhLT5kcGNfZmxhZ3MpOworCQkJCWVsc2UKKwkJCQkJc2V0X2JpdChJU1BfQUJPUlRfTkVFREVELAorCQkJCQkJJnZoYS0+ZHBjX2ZsYWdzKTsKIAkJCX0KIAkJfQogCQlERUJVRzMocHJpbnRrKCJzY3NpKCVsZCk6IExvb3AgRG93biAtIHNlY29uZHMgcmVtYWluaW5nICVkXG4iLApAQCAtMzY3NSw4ICszNzE2LDggQEAKIAkJICAgIGF0b21pY19yZWFkKCZ2aGEtPmxvb3BfZG93bl90aW1lcikpKTsKIAl9CiAKLQkvKiBDaGVjayBpZiBiZWFjb24gTEVEIG5lZWRzIHRvIGJlIGJsaW5rZWQgKi8KLQlpZiAoaGEtPmJlYWNvbl9ibGlua19sZWQgPT0gMSkgeworCS8qIENoZWNrIGlmIGJlYWNvbiBMRUQgbmVlZHMgdG8gYmUgYmxpbmtlZCBmb3IgcGh5c2ljYWwgaG9zdCBvbmx5ICovCisJaWYgKCF2aGEtPnZwX2lkeCAmJiAoaGEtPmJlYWNvbl9ibGlua19sZWQgPT0gMSkpIHsKIAkJc2V0X2JpdChCRUFDT05fQkxJTktfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOwogCQlzdGFydF9kcGMrKzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfc2V0dGluZ3MuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9zZXR0aW5ncy5oCmluZGV4IGYwYjJiOTkuLmQ3MGYwMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9zZXR0aW5ncy5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9zZXR0aW5ncy5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIFFMb2dpYyBGaWJyZSBDaGFubmVsIEhCQSBEcml2ZXIKLSAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMCBRTG9naWMgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAxMSBRTG9naWMgQ29ycG9yYXRpb24KICAqCiAgKiBTZWUgTElDRU5TRS5xbGEyeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfc3VwLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfc3VwLmMKaW5kZXggMjIwNzA2Mi4uNjkzNjQ3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3N1cC5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9zdXAuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBRTG9naWMgRmlicmUgQ2hhbm5lbCBIQkEgRHJpdmVyCi0gKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTAgUUxvZ2ljIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpICAyMDAzLTIwMTEgUUxvZ2ljIENvcnBvcmF0aW9uCiAgKgogICogU2VlIExJQ0VOU0UucWxhMnh4eCBmb3IgY29weXJpZ2h0IGFuZCBsaWNlbnNpbmcgZGV0YWlscy4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV92ZXJzaW9uLmgKaW5kZXggM2EyNjBjMy4uMDYyYzk3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oCkBAIC0xLDE1ICsxLDE1IEBACiAvKgogICogUUxvZ2ljIEZpYnJlIENoYW5uZWwgSEJBIERyaXZlcgotICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDEwIFFMb2dpYyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAgMjAwMy0yMDExIFFMb2dpYyBDb3Jwb3JhdGlvbgogICoKICAqIFNlZSBMSUNFTlNFLnFsYTJ4eHggZm9yIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGRldGFpbHMuCiAgKi8KIC8qCiAgKiBEcml2ZXIgdmVyc2lvbgogICovCi0jZGVmaW5lIFFMQTJYWFhfVkVSU0lPTiAgICAgICI4LjAzLjA3LjAwIgorI2RlZmluZSBRTEEyWFhYX1ZFUlNJT04gICAgICAiOC4wMy4wNy4wMy1rIgogCiAjZGVmaW5lIFFMQV9EUklWRVJfTUFKT1JfVkVSCTgKICNkZWZpbmUgUUxBX0RSSVZFUl9NSU5PUl9WRVIJMwogI2RlZmluZSBRTEFfRFJJVkVSX1BBVENIX1ZFUgk3Ci0jZGVmaW5lIFFMQV9EUklWRVJfQkVUQV9WRVIJMAorI2RlZmluZSBRTEFfRFJJVkVSX0JFVEFfVkVSCTMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9vcy5jIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X29zLmMKaW5kZXggMjMwYmEwOS4uYzIyZjJhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X29zLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X29zLmMKQEAgLTIwNjgsMTUgKzIwNjgsMTQgQEAKIAlzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEgPSB0b19xbGFfaG9zdChjbWQtPmRldmljZS0+aG9zdCk7CiAJdW5zaWduZWQgaW50IGlkID0gY21kLT5kZXZpY2UtPmlkOwogCXVuc2lnbmVkIGludCBsdW4gPSBjbWQtPmRldmljZS0+bHVuOwotCXVuc2lnbmVkIGxvbmcgc2VyaWFsID0gY21kLT5zZXJpYWxfbnVtYmVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHNyYiAqc3JiID0gTlVMTDsKIAlpbnQgcmV0ID0gU1VDQ0VTUzsKIAlpbnQgd2FpdCA9IDA7CiAKIAlxbDRfcHJpbnRrKEtFUk5fSU5GTywgaGEsCi0JICAgICJzY3NpJWxkOiVkOiVkOiBBYm9ydCBjb21tYW5kIGlzc3VlZCBjbWQ9JXAsIHBpZD0lbGRcbiIsCi0JICAgIGhhLT5ob3N0X25vLCBpZCwgbHVuLCBjbWQsIHNlcmlhbCk7CisJICAgICJzY3NpJWxkOiVkOiVkOiBBYm9ydCBjb21tYW5kIGlzc3VlZCBjbWQ9JXBcbiIsCisJICAgIGhhLT5ob3N0X25vLCBpZCwgbHVuLCBjbWQpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CiAJc3JiID0gKHN0cnVjdCBzcmIgKikgQ01EX1NQKGNtZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxvZ2ljcHRpLmMgYi9kcml2ZXJzL3Njc2kvcWxvZ2ljcHRpLmMKaW5kZXggZTJkNDVjOS4uOTY4OWQ0MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbG9naWNwdGkuYworKysgYi9kcml2ZXJzL3Njc2kvcWxvZ2ljcHRpLmMKQEAgLTEyOTIsOCArMTI5MiwxMCBAQAogCS51c2VfY2x1c3RlcmluZwkJPSBFTkFCTEVfQ0xVU1RFUklORywKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHFwdGlfbWF0Y2hbXTsKIHN0YXRpYyBpbnQgX19kZXZpbml0IHFwdGlfc2J1c19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCkKIHsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKIAlzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICp0cG50OwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBvcC0+ZGV2Lm9mX25vZGU7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKQEAgLTEzMDEsOSArMTMwMywxMCBAQAogCXN0YXRpYyBpbnQgbnFwdGlzOwogCWNvbnN0IGNoYXIgKmZjb2RlOwogCi0JaWYgKCFvcC0+ZGV2Lm9mX21hdGNoKQorCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKHFwdGlfbWF0Y2gsICZvcC0+ZGV2KTsKKwlpZiAoIW1hdGNoKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl0cG50ID0gb3AtPmRldi5vZl9tYXRjaC0+ZGF0YTsKKwl0cG50ID0gbWF0Y2gtPmRhdGE7CiAKIAkvKiBTb21ldGltZXMgQW50YXJlcyBjYXJkcyBjb21lIHVwIG5vdCBjb21wbGV0ZWx5CiAJICogc2V0dXAsIGFuZCB3ZSBnZXQgYSByZXBvcnQgb2YgYSB6ZXJvIElSUS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCmluZGV4IDYzM2MyMzkuLmFiZWEyY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYwpAQCAtMzIxLDYgKzMyMSwxMiBAQAogCQkJCSAgICAiY2hhbmdlZC4gVGhlIExpbnV4IFNDU0kgbGF5ZXIgZG9lcyBub3QgIgogCQkJCSAgICAiYXV0b21hdGljYWxseSBhZGp1c3QgdGhlc2UgcGFyYW1ldGVycy5cbiIpOwogCisJCWlmIChzc2hkci5hc2MgPT0gMHgzOCAmJiBzc2hkci5hc2NxID09IDB4MDcpCisJCQlzY21kX3ByaW50ayhLRVJOX1dBUk5JTkcsIHNjbWQsCisJCQkJICAgICJXYXJuaW5nISBSZWNlaXZlZCBhbiBpbmRpY2F0aW9uIHRoYXQgdGhlICIKKwkJCQkgICAgIkxVTiByZWFjaGVkIGEgdGhpbiBwcm92aXNpb25pbmcgc29mdCAiCisJCQkJICAgICJ0aHJlc2hvbGQuXG4iKTsKKwogCQkvKgogCQkgKiBQYXNzIHRoZSBVQSB1cHdhcmRzIGZvciBhIGRldGVybWluYXRpb24gaW4gdGhlIGNvbXBsZXRpb24KIAkJICogZnVuY3Rpb25zLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwppbmRleCBhYjU1YzJmLi5lYzE4MDNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwpAQCAtNzQsOCArNzQsNiBAQAogICovCiAjZGVmaW5lIFNDU0lfUVVFVUVfREVMQVkJMwogCi1zdGF0aWMgdm9pZCBzY3NpX3J1bl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7Ci0KIC8qCiAgKiBGdW5jdGlvbjoJc2NzaV91bnByZXBfcmVxdWVzdCgpCiAgKgpAQCAtMTYxLDcgKzE1OSw3IEBACiAJYmxrX3JlcXVldWVfcmVxdWVzdChxLCBjbWQtPnJlcXVlc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwogCi0Jc2NzaV9ydW5fcXVldWUocSk7CisJa2Jsb2NrZF9zY2hlZHVsZV93b3JrKHEsICZkZXZpY2UtPnJlcXVldWVfd29yayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQwMCwxMCArMzk4LDE1IEBACiBzdGF0aWMgdm9pZCBzY3NpX3J1bl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSBxLT5xdWV1ZWRhdGE7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBzZGV2LT5ob3N0OworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OwogCUxJU1RfSEVBRChzdGFydmVkX2xpc3QpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwkvKiBpZiB0aGUgZGV2aWNlIGlzIGRlYWQsIHNkZXYgd2lsbCBiZSBOVUxMLCBzbyBubyBxdWV1ZSB0byBydW4gKi8KKwlpZiAoIXNkZXYpCisJCXJldHVybjsKKworCXNob3N0ID0gc2Rldi0+aG9zdDsKIAlpZiAoc2NzaV90YXJnZXQoc2RldiktPnNpbmdsZV9sdW4pCiAJCXNjc2lfc2luZ2xlX2x1bl9ydW4oc2Rldik7CiAKQEAgLTQxMSw4ICs0MTQsNiBAQAogCWxpc3Rfc3BsaWNlX2luaXQoJnNob3N0LT5zdGFydmVkX2xpc3QsICZzdGFydmVkX2xpc3QpOwogCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZzdGFydmVkX2xpc3QpKSB7Ci0JCWludCBmbGFnc2V0OwotCiAJCS8qCiAJCSAqIEFzIGxvbmcgYXMgc2hvc3QgaXMgYWNjZXB0aW5nIGNvbW1hbmRzIGFuZCB3ZSBoYXZlCiAJCSAqIHN0YXJ2ZWQgcXVldWVzLCBjYWxsIGJsa19ydW5fcXVldWUuIHNjc2lfcmVxdWVzdF9mbgpAQCAtNDM2LDE4ICs0MzcsOSBAQAogCQl9CiAKIAkJc3Bpbl91bmxvY2soc2hvc3QtPmhvc3RfbG9jayk7Ci0KIAkJc3Bpbl9sb2NrKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2spOwotCQlmbGFnc2V0ID0gdGVzdF9iaXQoUVVFVUVfRkxBR19SRUVOVEVSLCAmcS0+cXVldWVfZmxhZ3MpICYmCi0JCQkJIXRlc3RfYml0KFFVRVVFX0ZMQUdfUkVFTlRFUiwKLQkJCQkJJnNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2ZsYWdzKTsKLQkJaWYgKGZsYWdzZXQpCi0JCQlxdWV1ZV9mbGFnX3NldChRVUVVRV9GTEFHX1JFRU5URVIsIHNkZXYtPnJlcXVlc3RfcXVldWUpOwogCQlfX2Jsa19ydW5fcXVldWUoc2Rldi0+cmVxdWVzdF9xdWV1ZSk7Ci0JCWlmIChmbGFnc2V0KQotCQkJcXVldWVfZmxhZ19jbGVhcihRVUVVRV9GTEFHX1JFRU5URVIsIHNkZXYtPnJlcXVlc3RfcXVldWUpOwogCQlzcGluX3VubG9jayhzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrKTsKLQogCQlzcGluX2xvY2soc2hvc3QtPmhvc3RfbG9jayk7CiAJfQogCS8qIHB1dCBhbnkgdW5wcm9jZXNzZWQgZW50cmllcyBiYWNrICovCkBAIC00NTcsNiArNDQ5LDE2IEBACiAJYmxrX3J1bl9xdWV1ZShxKTsKIH0KIAordm9pZCBzY3NpX3JlcXVldWVfcnVuX3F1ZXVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnE7CisKKwlzZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzY3NpX2RldmljZSwgcmVxdWV1ZV93b3JrKTsKKwlxID0gc2Rldi0+cmVxdWVzdF9xdWV1ZTsKKwlzY3NpX3J1bl9xdWV1ZShxKTsKK30KKwogLyoKICAqIEZ1bmN0aW9uOglzY3NpX3JlcXVldWVfY29tbWFuZCgpCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfcHJvYy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfcHJvYy5jCmluZGV4IGM5OWRhOTIuLmY0Njg1NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3Byb2MuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9wcm9jLmMKQEAgLTM4NiwxMyArMzg2LDU5IEBACiAgKiBAczogb3V0cHV0IGdvZXMgaGVyZQogICogQHA6IG5vdCB1c2VkCiAgKi8KLXN0YXRpYyBpbnQgcHJvY19zY3NpX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwKQorc3RhdGljIGludCBhbHdheXNfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewotCXNlcV9wcmludGYocywgIkF0dGFjaGVkIGRldmljZXM6XG4iKTsKLQlidXNfZm9yX2VhY2hfZGV2KCZzY3NpX2J1c190eXBlLCBOVUxMLCBzLCBwcm9jX3ByaW50X3Njc2lkZXZpY2UpOwotCXJldHVybiAwOworCXJldHVybiAxOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2UgKm5leHRfc2NzaV9kZXZpY2Uoc3RydWN0IGRldmljZSAqc3RhcnQpCit7CisJc3RydWN0IGRldmljZSAqbmV4dCA9IGJ1c19maW5kX2RldmljZSgmc2NzaV9idXNfdHlwZSwgc3RhcnQsIE5VTEwsCisJCQkJCSAgICAgIGFsd2F5c19tYXRjaCk7CisJcHV0X2RldmljZShzdGFydCk7CisJcmV0dXJuIG5leHQ7Cit9CisKK3N0YXRpYyB2b2lkICpzY3NpX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmaWxlLCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBOVUxMOworCWxvZmZfdCBuID0gKnBvczsKKworCXdoaWxlICgoZGV2ID0gbmV4dF9zY3NpX2RldmljZShkZXYpKSkgeworCQlpZiAoIW4tLSkKKwkJCWJyZWFrOworCQlzZmlsZS0+cHJpdmF0ZSsrOworCX0KKwlyZXR1cm4gZGV2OworfQorCitzdGF0aWMgdm9pZCAqc2NzaV9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNmaWxlLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwkoKnBvcykrKzsKKwlzZmlsZS0+cHJpdmF0ZSsrOworCXJldHVybiBuZXh0X3Njc2lfZGV2aWNlKHYpOworfQorCitzdGF0aWMgdm9pZCBzY3NpX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2ZpbGUsIHZvaWQgKnYpCit7CisJcHV0X2RldmljZSh2KTsKK30KKworc3RhdGljIGludCBzY3NpX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2ZpbGUsIHZvaWQgKmRldikKK3sKKwlpZiAoIXNmaWxlLT5wcml2YXRlKQorCQlzZXFfcHV0cyhzZmlsZSwgIkF0dGFjaGVkIGRldmljZXM6XG4iKTsKKworCXJldHVybiBwcm9jX3ByaW50X3Njc2lkZXZpY2UoZGV2LCBzZmlsZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2NzaV9zZXFfb3BzID0geworCS5zdGFydAk9IHNjc2lfc2VxX3N0YXJ0LAorCS5uZXh0CT0gc2NzaV9zZXFfbmV4dCwKKwkuc3RvcAk9IHNjc2lfc2VxX3N0b3AsCisJLnNob3cJPSBzY3NpX3NlcV9zaG93Cit9OworCiAvKioKICAqIHByb2Nfc2NzaV9vcGVuIC0gZ2x1ZSBmdW5jdGlvbgogICogQGlub2RlOiBub3QgdXNlZApAQCAtNDA2LDcgKzQ1Miw3IEBACiAJICogV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcyBmb3IgdGhlIHdyaXRlIGNhc2UgYnV0IGl0IGRvZXNuJ3QKIAkgKiBoYXJtIGVpdGhlci4KIAkgKi8KLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcHJvY19zY3NpX3Nob3csIE5VTEwpOworCXJldHVybiBzZXFfb3BlbihmaWxlLCAmc2NzaV9zZXFfb3BzKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19zY3NpX29wZXJhdGlvbnMgPSB7CkBAIC00MTUsNyArNDYxLDcgQEAKIAkucmVhZAkJPSBzZXFfcmVhZCwKIAkud3JpdGUJCT0gcHJvY19zY3NpX3dyaXRlLAogCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCmluZGV4IDA4NzgyMWYuLjU4NTg0ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKQEAgLTI0Miw2ICsyNDIsNyBAQAogCWludCBkaXNwbGF5X2ZhaWx1cmVfbXNnID0gMSwgcmV0OwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KHN0YXJnZXQtPmRldi5wYXJlbnQpOwogCWV4dGVybiB2b2lkIHNjc2lfZXZ0X3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCWV4dGVybiB2b2lkIHNjc2lfcmVxdWV1ZV9ydW5fcXVldWUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAogCXNkZXYgPSBremFsbG9jKHNpemVvZigqc2RldikgKyBzaG9zdC0+dHJhbnNwb3J0dC0+ZGV2aWNlX3NpemUsCiAJCSAgICAgICBHRlBfQVRPTUlDKTsKQEAgLTI2NCw2ICsyNjUsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZzZGV2LT5ldmVudF9saXN0KTsKIAlzcGluX2xvY2tfaW5pdCgmc2Rldi0+bGlzdF9sb2NrKTsKIAlJTklUX1dPUksoJnNkZXYtPmV2ZW50X3dvcmssIHNjc2lfZXZ0X3RocmVhZCk7CisJSU5JVF9XT1JLKCZzZGV2LT5yZXF1ZXVlX3dvcmssIHNjc2lfcmVxdWV1ZV9ydW5fcXVldWUpOwogCiAJc2Rldi0+c2Rldl9nZW5kZXYucGFyZW50ID0gZ2V0X2RldmljZSgmc3RhcmdldC0+ZGV2KTsKIAlzZGV2LT5zZGV2X3RhcmdldCA9IHN0YXJnZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYwppbmRleCBlNDRmZjY0Li5lNjM5MTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKQEAgLTMyMiwxNCArMzIyLDggQEAKIAkJa2ZyZWUoZXZ0KTsKIAl9CiAKLQlpZiAoc2Rldi0+cmVxdWVzdF9xdWV1ZSkgewotCQlzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZWRhdGEgPSBOVUxMOwotCQkvKiB1c2VyIGNvbnRleHQgbmVlZGVkIHRvIGZyZWUgcXVldWUgKi8KLQkJc2NzaV9mcmVlX3F1ZXVlKHNkZXYtPnJlcXVlc3RfcXVldWUpOwotCQkvKiB0ZW1wb3JhcnkgZXhwZWRpZW50LCB0cnkgdG8gY2F0Y2ggdXNlIG9mIHF1ZXVlIGxvY2sKLQkJICogYWZ0ZXIgZnJlZSBvZiBzZGV2ICovCi0JCXNkZXYtPnJlcXVlc3RfcXVldWUgPSBOVUxMOwotCX0KKwkvKiBOVUxMIHF1ZXVlIG1lYW5zIHRoZSBkZXZpY2UgY2FuJ3QgYmUgdXNlZCAqLworCXNkZXYtPnJlcXVlc3RfcXVldWUgPSBOVUxMOwogCiAJc2NzaV90YXJnZXRfcmVhcChzY3NpX3RhcmdldChzZGV2KSk7CiAKQEAgLTkzNyw2ICs5MzEsMTIgQEAKIAlpZiAoc2Rldi0+aG9zdC0+aG9zdHQtPnNsYXZlX2Rlc3Ryb3kpCiAJCXNkZXYtPmhvc3QtPmhvc3R0LT5zbGF2ZV9kZXN0cm95KHNkZXYpOwogCXRyYW5zcG9ydF9kZXN0cm95X2RldmljZShkZXYpOworCisJLyogY2F1c2UgdGhlIHJlcXVlc3QgZnVuY3Rpb24gdG8gcmVqZWN0IGFsbCBJL08gcmVxdWVzdHMgKi8KKwlzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZWRhdGEgPSBOVUxMOworCisJLyogRnJlZWluZyB0aGUgcXVldWUgc2lnbmFscyB0byBibG9jayB0aGF0IHdlJ3JlIGRvbmUgKi8KKwlzY3NpX2ZyZWVfcXVldWUoc2Rldi0+cmVxdWVzdF9xdWV1ZSk7CiAJcHV0X2RldmljZShkZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90Z3RfbGliLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90Z3RfbGliLmMKaW5kZXggOGJjYThjMi4uODRhMWZkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdGd0X2xpYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RndF9saWIuYwpAQCAtMjc1LDEwICsyNzUsOCBAQAogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocWRhdGEtPmNtZF9oYXNoKTsgaSsrKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0Y21kLCBuLCAmcWRhdGEtPmNtZF9oYXNoW2ldLAotCQkJCQkgaGFzaF9saXN0KSB7Ci0JCQlsaXN0X2RlbCgmdGNtZC0+aGFzaF9saXN0KTsKLQkJCWxpc3RfYWRkKCZ0Y21kLT5oYXNoX2xpc3QsICZjbWRzKTsKLQkJfQorCQkJCQkgaGFzaF9saXN0KQorCQkJbGlzdF9tb3ZlKCZ0Y21kLT5oYXNoX2xpc3QsICZjbWRzKTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxZGF0YS0+Y21kX2hhc2hfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwppbmRleCAyOGMzMzUwLi4xYjIxNDkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwpAQCAtNDIyLDggKzQyMiw3IEBACiAKIAlzbnByaW50ZihmY19ob3N0LT53b3JrX3FfbmFtZSwgc2l6ZW9mKGZjX2hvc3QtPndvcmtfcV9uYW1lKSwKIAkJICJmY193cV8lZCIsIHNob3N0LT5ob3N0X25vKTsKLQlmY19ob3N0LT53b3JrX3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgKLQkJCQkJZmNfaG9zdC0+d29ya19xX25hbWUpOworCWZjX2hvc3QtPndvcmtfcSA9IGFsbG9jX3dvcmtxdWV1ZShmY19ob3N0LT53b3JrX3FfbmFtZSwgMCwgMCk7CiAJaWYgKCFmY19ob3N0LT53b3JrX3EpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC00MzEsOCArNDMwLDggQEAKIAlzbnByaW50ZihmY19ob3N0LT5kZXZsb3NzX3dvcmtfcV9uYW1lLAogCQkgc2l6ZW9mKGZjX2hvc3QtPmRldmxvc3Nfd29ya19xX25hbWUpLAogCQkgImZjX2RsXyVkIiwgc2hvc3QtPmhvc3Rfbm8pOwotCWZjX2hvc3QtPmRldmxvc3Nfd29ya19xID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoCi0JCQkJCWZjX2hvc3QtPmRldmxvc3Nfd29ya19xX25hbWUpOworCWZjX2hvc3QtPmRldmxvc3Nfd29ya19xID0KKwkJCWFsbG9jX3dvcmtxdWV1ZShmY19ob3N0LT5kZXZsb3NzX3dvcmtfcV9uYW1lLCAwLCAwKTsKIAlpZiAoIWZjX2hvc3QtPmRldmxvc3Nfd29ya19xKSB7CiAJCWRlc3Ryb3lfd29ya3F1ZXVlKGZjX2hvc3QtPndvcmtfcSk7CiAJCWZjX2hvc3QtPndvcmtfcSA9IE5VTEw7CkBAIC0yNDg5LDYgKzI0ODgsOCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGRvX2NhbGxiYWNrID0gMDsKIAorCWZjX3Rlcm1pbmF0ZV9ycG9ydF9pbyhycG9ydCk7CisKIAkvKgogCSAqIGlmIGEgc2NhbiBpcyBwZW5kaW5nLCBmbHVzaCB0aGUgU0NTSSBIb3N0IHdvcmtfcSBzbyB0aGF0CiAJICogdGhhdCB3ZSBjYW4gcmVjbGFpbSB0aGUgcnBvcnQgc2NhbiB3b3JrIGVsZW1lbnQuCkBAIC0yNDk2LDggKzI0OTcsNiBAQAogCWlmIChycG9ydC0+ZmxhZ3MgJiBGQ19SUE9SVF9TQ0FOX1BFTkRJTkcpCiAJCXNjc2lfZmx1c2hfd29yayhzaG9zdCk7CiAKLQlmY190ZXJtaW5hdGVfcnBvcnRfaW8ocnBvcnQpOwotCiAJLyoKIAkgKiBDYW5jZWwgYW55IG91dHN0YW5kaW5nIHRpbWVycy4gVGhlc2Ugc2hvdWxkIHJlYWxseSBleGlzdAogCSAqIG9ubHkgd2hlbiBybW1vZCdpbmcgdGhlIExMREQgYW5kIHdlJ3JlIGFza2luZyBmb3IKQEAgLTM4MTYsMjggKzM4MTUsMTcgQEAKIHN0YXRpYyB2b2lkCiBmY19ic2dfZ29vc2VfcXVldWUoc3RydWN0IGZjX3Jwb3J0ICpycG9ydCkKIHsKLQlpbnQgZmxhZ3NldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCiAJaWYgKCFycG9ydC0+cnFzdF9xKQogCQlyZXR1cm47CiAKKwkvKgorCSAqIFRoaXMgZ2V0L3B1dCBkYW5jZSBtYWtlcyBubyBzZW5zZQorCSAqLwogCWdldF9kZXZpY2UoJnJwb3J0LT5kZXYpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUocnBvcnQtPnJxc3RfcS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCWZsYWdzZXQgPSB0ZXN0X2JpdChRVUVVRV9GTEFHX1JFRU5URVIsICZycG9ydC0+cnFzdF9xLT5xdWV1ZV9mbGFncykgJiYKLQkJICAhdGVzdF9iaXQoUVVFVUVfRkxBR19SRUVOVEVSLCAmcnBvcnQtPnJxc3RfcS0+cXVldWVfZmxhZ3MpOwotCWlmIChmbGFnc2V0KQotCQlxdWV1ZV9mbGFnX3NldChRVUVVRV9GTEFHX1JFRU5URVIsIHJwb3J0LT5ycXN0X3EpOwotCV9fYmxrX3J1bl9xdWV1ZShycG9ydC0+cnFzdF9xKTsKLQlpZiAoZmxhZ3NldCkKLQkJcXVldWVfZmxhZ19jbGVhcihRVUVVRV9GTEFHX1JFRU5URVIsIHJwb3J0LT5ycXN0X3EpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocnBvcnQtPnJxc3RfcS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCisJYmxrX3J1bl9xdWV1ZV9hc3luYyhycG9ydC0+cnFzdF9xKTsKIAlwdXRfZGV2aWNlKCZycG9ydC0+ZGV2KTsKIH0KIAotCiAvKioKICAqIGZjX2JzZ19ycG9ydF9kaXNwYXRjaCAtIHByb2Nlc3MgcnBvcnQgYnNnIHJlcXVlc3RzIGFuZCBkaXNwYXRjaCB0byBMTERECiAgKiBAcToJCXJwb3J0IHJlcXVlc3QgcXVldWUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS90bXNjc2ltLmMgYi9kcml2ZXJzL3Njc2kvdG1zY3NpbS5jCmluZGV4IGExMjRhMjhmLi5hMWJhY2NjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvdG1zY3NpbS5jCisrKyBiL2RyaXZlcnMvc2NzaS90bXNjc2ltLmMKQEAgLTU2NSwxMiArNTY1LDEyIEBACiAJcERDQi0+VGFnTWFzayB8PSAxIDw8IHRhZ1sxXTsKIAlwU1JCLT5UYWdOdW1iZXIgPSB0YWdbMV07CiAJREMzOTBfd3JpdGU4KFNjc2lGaWZvLCB0YWdbMV0pOwotCURFQlVHMShwcmludGsoS0VSTl9JTkZPICJEQzM5MDogU2VsZWN0IHcvRGlzQ24gZm9yIENtZCAlbGkgKFNSQiAlcCksIGJsb2NrIHRhZyAlMDJ4XG4iLCBzY21kLT5zZXJpYWxfbnVtYmVyLCBwU1JCLCB0YWdbMV0pKTsKKwlERUJVRzEocHJpbnRrKEtFUk5fSU5GTyAiREMzOTA6IFNlbGVjdCB3L0Rpc0NuIGZvciBTUkIgJXAsIGJsb2NrIHRhZyAlMDJ4XG4iLCBwU1JCLCB0YWdbMV0pKTsKIAljbWQgPSBTRUxfV19BVE4zOwogICAgIH0gZWxzZSB7CiAJLyogTm8gVGFnUSAqLwogLy9ub190YWc6Ci0JREVCVUcxKHByaW50ayhLRVJOX0lORk8gIkRDMzkwOiBTZWxlY3QgdyVzL0Rpc0NuIGZvciBDbWQgJWxpIChTUkIgJXApLCBObyBUYWdRXG4iLCBkaXNjX2FsbG93ZWQgPyAiIiA6ICJvIiwgc2NtZC0+c2VyaWFsX251bWJlciwgcFNSQikpOworCURFQlVHMShwcmludGsoS0VSTl9JTkZPICJEQzM5MDogU2VsZWN0IHclcy9EaXNDbiBmb3IgU1JCICVwLCBObyBUYWdRXG4iLCBkaXNjX2FsbG93ZWQgPyAiIiA6ICJvIiwgcFNSQikpOwogICAgIH0KIAogICAgIHBTUkItPlNSQlN0YXRlID0gU1JCX1NUQVJUXzsKQEAgLTYyMCw4ICs2MjAsOCBAQAogICAgIGlmIChEQzM5MF9yZWFkOCAoU2NzaV9TdGF0dXMpICYgSU5URVJSVVBUKQogICAgIHsKIAlkYzM5MF9mcmVldGFnIChwRENCLCBwU1JCKTsKLQlERUJVRzAocHJpbnRrICgiREMzOTA6IEludGVycnVwdCBkdXJpbmcgU3RhcnQgU0NTSSAocGlkICVsaSwgdGFyZ2V0ICUwMmktJTAyaSlcbiIsCi0JCXNjbWQtPnNlcmlhbF9udW1iZXIsIHNjbWQtPmRldmljZS0+aWQsIHNjbWQtPmRldmljZS0+bHVuKSk7CisJREVCVUcwKHByaW50ayAoIkRDMzkwOiBJbnRlcnJ1cHQgZHVyaW5nIFN0YXJ0IFNDU0kgKHRhcmdldCAlMDJpLSUwMmkpXG4iLAorCQlzY21kLT5kZXZpY2UtPmlkLCBzY21kLT5kZXZpY2UtPmx1bikpOwogCXBTUkItPlNSQlN0YXRlID0gU1JCX1JFQURZOwogCS8vREMzOTBfd3JpdGU4IChTY3NpQ21kLCBDTEVBUl9GSUZPX0NNRCk7CiAJcEFDQi0+U2VsTG9zdCsrOwpAQCAtMTcwNSw4ICsxNzA1LDcgQEAKIAogICAgIHN0YXR1cyA9IHBTUkItPlRhcmdldFN0YXR1czsKIAotICAgIERFQlVHMChwcmludGsgKCIgU1JCZG9uZSAoJTAyeCwlMDh4KSwgU1JCICVwLCBwaWQgJWxpXG4iLCBzdGF0dXMsIHBjbWQtPnJlc3VsdCxcCi0JCXBTUkIsIHBjbWQtPnNlcmlhbF9udW1iZXIpKTsKKyAgICBERUJVRzAocHJpbnRrICgiIFNSQmRvbmUgKCUwMngsJTA4eCksIFNSQiAlcFxuIiwgc3RhdHVzLCBwY21kLT5yZXN1bHQsIHBTUkIpKTsKICAgICBpZihwU1JCLT5TUkJGbGFnICYgQVVUT19SRVFTRU5TRSkKICAgICB7CS8qIExhc3QgY29tbWFuZCB3YXMgYSBSZXF1ZXN0IFNlbnNlICovCiAJcFNSQi0+U1JCRmxhZyAmPSB+QVVUT19SRVFTRU5TRTsKQEAgLTE3MjcsNyArMTcyNiw3IEBACiAJICAgIH0gZWxzZSB7CiAJCVNFVF9SRVNfRFJWKHBjbWQtPnJlc3VsdCwgRFJJVkVSX1NFTlNFKTsKIAkJLy9wU1JCLT5TY3NpQ21kTGVuCSA9ICh1OCkgKHBTUkItPlNlZ21lbnQxWzBdID4+IDgpOwotCQlERUJVRzAgKHByaW50ayAoIkRDMzkwOiBSRVRSWSBwaWQgJWxpICglMDJ4KSwgdGFyZ2V0ICUwMmktJTAyaVxuIiwgcGNtZC0+c2VyaWFsX251bWJlciwgcGNtZC0+Y21uZFswXSwgcGNtZC0+ZGV2aWNlLT5pZCwgcGNtZC0+ZGV2aWNlLT5sdW4pKTsKKwkJREVCVUcwIChwcmludGsgKCJEQzM5MDogUkVUUlkgKCUwMngpLCB0YXJnZXQgJTAyaS0lMDJpXG4iLCBwY21kLT5jbW5kWzBdLCBwY21kLT5kZXZpY2UtPmlkLCBwY21kLT5kZXZpY2UtPmx1bikpOwogCQlwU1JCLT5Ub3RhbFhmZXJyZWRMZW4gPSAwOwogCQlTRVRfUkVTX0RJRChwY21kLT5yZXN1bHQsIERJRF9TT0ZUX0VSUk9SKTsKIAkgICAgfQpAQCAtMTc0Nyw3ICsxNzQ2LDcgQEAKIAllbHNlIGlmIChzdGF0dXMgPT0gU0FNX1NUQVRfVEFTS19TRVRfRlVMTCkKIAl7CiAJICAgIHNjc2lfdHJhY2tfcXVldWVfZnVsbChwY21kLT5kZXZpY2UsIHBEQ0ItPkdvaW5nU1JCQ250IC0gMSk7Ci0JICAgIERFQlVHMCAocHJpbnRrICgiREMzOTA6IFJFVFJZIHBpZCAlbGkgKCUwMngpLCB0YXJnZXQgJTAyaS0lMDJpXG4iLCBwY21kLT5zZXJpYWxfbnVtYmVyLCBwY21kLT5jbW5kWzBdLCBwY21kLT5kZXZpY2UtPmlkLCBwY21kLT5kZXZpY2UtPmx1bikpOworCSAgICBERUJVRzAgKHByaW50ayAoIkRDMzkwOiBSRVRSWSAoJTAyeCksIHRhcmdldCAlMDJpLSUwMmlcbiIsIHBjbWQtPmNtbmRbMF0sIHBjbWQtPmRldmljZS0+aWQsIHBjbWQtPmRldmljZS0+bHVuKSk7CiAJICAgIHBTUkItPlRvdGFsWGZlcnJlZExlbiA9IDA7CiAJICAgIFNFVF9SRVNfRElEKHBjbWQtPnJlc3VsdCwgRElEX1NPRlRfRVJST1IpOwogCX0KQEAgLTE4MDEsNyArMTgwMCw3IEBACiAgICAgLyogQWRkIHRvIGZyZWUgbGlzdCAqLwogICAgIGRjMzkwX0ZyZWVfaW5zZXJ0IChwQUNCLCBwU1JCKTsKIAotICAgIERFQlVHMChwcmludGsgKEtFUk5fREVCVUcgIkRDMzkwOiBTUkJkb25lOiBkb25lIHBpZCAlbGlcbiIsIHBjbWQtPnNlcmlhbF9udW1iZXIpKTsKKyAgICBERUJVRzAocHJpbnRrIChLRVJOX0RFQlVHICJEQzM5MDogU1JCZG9uZTogZG9uZVxuIikpOwogICAgIHBjbWQtPnNjc2lfZG9uZSAocGNtZCk7CiAKICAgICByZXR1cm47CkBAIC0xOTk3LDggKzE5OTYsNyBAQAogCXN0cnVjdCBkYzM5MF9hY2IgKnBBQ0IgPSAoc3RydWN0IGRjMzkwX2FjYiopIGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgZGMzOTBfZGNiICpwRENCID0gKHN0cnVjdCBkYzM5MF9kY2IqKSBjbWQtPmRldmljZS0+aG9zdGRhdGE7CiAKLQlzY21kX3ByaW50ayhLRVJOX1dBUk5JTkcsIGNtZCwKLQkJIkRDMzkwOiBBYm9ydCBjb21tYW5kIChwaWQgJWxpKVxuIiwgY21kLT5zZXJpYWxfbnVtYmVyKTsKKwlzY21kX3ByaW50ayhLRVJOX1dBUk5JTkcsIGNtZCwgIkRDMzkwOiBBYm9ydCBjb21tYW5kXG4iKTsKIAogCS8qIGFib3J0KCkgaXMgdG9vIHN0dXBpZCBmb3IgYWxyZWFkeSBzZW50IGNvbW1hbmRzIGF0IHRoZSBtb21lbnQuIAogCSAqIElmIGl0J3MgY2FsbGVkIHdlIGFyZSBpbiB0cm91YmxlIGFueXdheSwgc28gbGV0J3MgZHVtcCBzb21lIGluZm8gCkBAIC0yMDA2LDcgKzIwMDQsNyBAQAogCWRjMzkwX2R1bXBpbmZvKHBBQ0IsIHBEQ0IsIE5VTEwpOwogCiAJcERDQi0+RENCRmxhZyB8PSBBQk9SVF9ERVZfOwotCXByaW50ayhLRVJOX0lORk8gIkRDMzkwOiBBYm9ydGVkIHBpZCAlbGlcbiIsIGNtZC0+c2VyaWFsX251bWJlcik7CisJcHJpbnRrKEtFUk5fSU5GTyAiREMzOTA6IEFib3J0ZWQuXG4iKTsKIAogCXJldHVybiBGQUlMRUQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvdTE0LTM0Zi5jIGIvZHJpdmVycy9zY3NpL3UxNC0zNGYuYwppbmRleCBlZGZjNWRhLi45MGUxMDRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvdTE0LTM0Zi5jCisrKyBiL2RyaXZlcnMvc2NzaS91MTQtMzRmLmMKQEAgLTEyNTYsOCArMTI1Niw4IEBACiAgICBqID0gKChzdHJ1Y3QgaG9zdGRhdGEgKikgU0NwbnQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGEpLT5ib2FyZF9udW1iZXI7CiAKICAgIGlmIChTQ3BudC0+aG9zdF9zY3JpYmJsZSkKLSAgICAgIHBhbmljKCIlczogcWNvbW0sIHBpZCAlbGQsIFNDcG50ICVwIGFscmVhZHkgYWN0aXZlLlxuIiwKLSAgICAgICAgICAgIEJOKGopLCBTQ3BudC0+c2VyaWFsX251bWJlciwgU0NwbnQpOworICAgICAgcGFuaWMoIiVzOiBxY29tbSwgU0NwbnQgJXAgYWxyZWFkeSBhY3RpdmUuXG4iLAorICAgICAgICAgICAgQk4oaiksIFNDcG50KTsKIAogICAgLyogaSBpcyB0aGUgbWFpbGJveCBudW1iZXIsIGxvb2sgZm9yIHRoZSBmaXJzdCBmcmVlIG1haWxib3gKICAgICAgIHN0YXJ0aW5nIGZyb20gbGFzdF9jcF91c2VkICovCkBAIC0xMjg2LDkgKzEyODYsOSBAQAogICAgY3BwLT5jcHBfaW5kZXggPSBpOwogICAgU0NwbnQtPmhvc3Rfc2NyaWJibGUgPSAodW5zaWduZWQgY2hhciAqKSAmY3BwLT5jcHBfaW5kZXg7CiAKLSAgIGlmIChkb190cmFjZSkgcHJpbnRrKCIlczogcWNvbW0sIG1ib3ggJWQsIHRhcmdldCAlZC4lZDolZCwgcGlkICVsZC5cbiIsCisgICBpZiAoZG9fdHJhY2UpIHByaW50aygiJXM6IHFjb21tLCBtYm94ICVkLCB0YXJnZXQgJWQuJWQ6JWQuXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgQk4oaiksIGksIFNDcG50LT5kZXZpY2UtPmNoYW5uZWwsIFNDcG50LT5kZXZpY2UtPmlkLAotICAgICAgICAgICAgICAgICAgICAgICAgU0NwbnQtPmRldmljZS0+bHVuLCBTQ3BudC0+c2VyaWFsX251bWJlcik7CisgICAgICAgICAgICAgICAgICAgICAgICBTQ3BudC0+ZGV2aWNlLT5sdW4pOwogCiAgICBjcHAtPm9wY29kZSA9IE9QX1NDU0k7CiAgICBjcHAtPmNoYW5uZWwgPSBTQ3BudC0+ZGV2aWNlLT5jaGFubmVsOwpAQCAtMTMxNSw3ICsxMzE1LDcgQEAKICAgICAgIHVubWFwX2RtYShpLCBqKTsKICAgICAgIFNDcG50LT5ob3N0X3NjcmliYmxlID0gTlVMTDsKICAgICAgIHNjbWRfcHJpbnRrKEtFUk5fSU5GTywgU0NwbnQsCi0gICAgICAJCSJxY29tbSwgcGlkICVsZCwgYWRhcHRlciBidXN5LlxuIiwgU0NwbnQtPnNlcmlhbF9udW1iZXIpOworICAgICAgCQkicWNvbW0sIGFkYXB0ZXIgYnVzeS5cbiIpOwogICAgICAgcmV0dXJuIDE7CiAgICAgICB9CiAKQEAgLTEzMzcsMTQgKzEzMzcsMTIgQEAKICAgIGogPSAoKHN0cnVjdCBob3N0ZGF0YSAqKSBTQ2FyZy0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YSktPmJvYXJkX251bWJlcjsKIAogICAgaWYgKFNDYXJnLT5ob3N0X3NjcmliYmxlID09IE5VTEwpIHsKLSAgICAgIHNjbWRfcHJpbnRrKEtFUk5fSU5GTywgU0NhcmcsICJhYm9ydCwgcGlkICVsZCBpbmFjdGl2ZS5cbiIsCi0gICAgICAgICAgICAgU0NhcmctPnNlcmlhbF9udW1iZXIpOworICAgICAgc2NtZF9wcmludGsoS0VSTl9JTkZPLCBTQ2FyZywgImFib3J0LCBjb21tYW5kIGluYWN0aXZlLlxuIik7CiAgICAgICByZXR1cm4gU1VDQ0VTUzsKICAgICAgIH0KIAogICAgaSA9ICoodW5zaWduZWQgaW50ICopU0NhcmctPmhvc3Rfc2NyaWJibGU7Ci0gICBzY21kX3ByaW50ayhLRVJOX0lORk8sIFNDYXJnLCAiYWJvcnQsIG1ib3ggJWQsIHBpZCAlbGQuXG4iLAotCSAgICAgICBpLCBTQ2FyZy0+c2VyaWFsX251bWJlcik7CisgICBzY21kX3ByaW50ayhLRVJOX0lORk8sIFNDYXJnLCAiYWJvcnQsIG1ib3ggJWQuXG4iLCBpKTsKIAogICAgaWYgKGkgPj0gc2hbal0tPmNhbl9xdWV1ZSkKICAgICAgIHBhbmljKCIlczogYWJvcnQsIGludmFsaWQgU0NhcmctPmhvc3Rfc2NyaWJibGUuXG4iLCBCTihqKSk7CkBAIC0xMzg3LDggKzEzODUsNyBAQAogICAgICAgU0NhcmctPnJlc3VsdCA9IERJRF9BQk9SVCA8PCAxNjsKICAgICAgIFNDYXJnLT5ob3N0X3NjcmliYmxlID0gTlVMTDsKICAgICAgIEhEKGopLT5jcF9zdGF0W2ldID0gRlJFRTsKLSAgICAgIHByaW50aygiJXMsIGFib3J0LCBtYm94ICVkIHJlYWR5LCBESURfQUJPUlQsIHBpZCAlbGQgZG9uZS5cbiIsCi0gICAgICAgICAgICAgQk4oaiksIGksIFNDYXJnLT5zZXJpYWxfbnVtYmVyKTsKKyAgICAgIHByaW50aygiJXMsIGFib3J0LCBtYm94ICVkIHJlYWR5LCBESURfQUJPUlQsIGRvbmUuXG4iLCBCTihqKSwgaSk7CiAgICAgICBTQ2FyZy0+c2NzaV9kb25lKFNDYXJnKTsKICAgICAgIHJldHVybiBTVUNDRVNTOwogICAgICAgfQpAQCAtMTQwMywxMiArMTQwMCwxMiBAQAogICAgc3RydWN0IHNjc2lfY21uZCAqU0NwbnQ7CiAKICAgIGogPSAoKHN0cnVjdCBob3N0ZGF0YSAqKSBTQ2FyZy0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YSktPmJvYXJkX251bWJlcjsKLSAgIHNjbWRfcHJpbnRrKEtFUk5fSU5GTywgU0NhcmcsICJyZXNldCwgZW50ZXIsIHBpZCAlbGQuXG4iLCBTQ2FyZy0+c2VyaWFsX251bWJlcik7CisgICBzY21kX3ByaW50ayhLRVJOX0lORk8sIFNDYXJnLCAicmVzZXQsIGVudGVyLlxuIik7CiAKICAgIHNwaW5fbG9ja19pcnEoc2hbal0tPmhvc3RfbG9jayk7CiAKICAgIGlmIChTQ2FyZy0+aG9zdF9zY3JpYmJsZSA9PSBOVUxMKQotICAgICAgcHJpbnRrKCIlczogcmVzZXQsIHBpZCAlbGQgaW5hY3RpdmUuXG4iLCBCTihqKSwgU0NhcmctPnNlcmlhbF9udW1iZXIpOworICAgICAgcHJpbnRrKCIlczogcmVzZXQsIGluYWN0aXZlLlxuIiwgQk4oaikpOwogCiAgICBpZiAoSEQoaiktPmluX3Jlc2V0KSB7CiAgICAgICBwcmludGsoIiVzOiByZXNldCwgZXhpdCwgYWxyZWFkeSBpbiByZXNldC5cbiIsIEJOKGopKTsKQEAgLTE0NDUsMTQgKzE0NDIsMTIgQEAKIAogICAgICAgaWYgKEhEKGopLT5jcF9zdGF0W2ldID09IFJFQURZIHx8IEhEKGopLT5jcF9zdGF0W2ldID09IEFCT1JUSU5HKSB7CiAgICAgICAgICBIRChqKS0+Y3Bfc3RhdFtpXSA9IEFCT1JUSU5HOwotICAgICAgICAgcHJpbnRrKCIlczogcmVzZXQsIG1ib3ggJWQgYWJvcnRpbmcsIHBpZCAlbGQuXG4iLAotICAgICAgICAgICAgICAgIEJOKGopLCBpLCBTQ3BudC0+c2VyaWFsX251bWJlcik7CisgICAgICAgICBwcmludGsoIiVzOiByZXNldCwgbWJveCAlZCBhYm9ydGluZy5cbiIsIEJOKGopLCBpKTsKICAgICAgICAgIH0KIAogICAgICAgZWxzZSB7CiAgICAgICAgICBIRChqKS0+Y3Bfc3RhdFtpXSA9IElOX1JFU0VUOwotICAgICAgICAgcHJpbnRrKCIlczogcmVzZXQsIG1ib3ggJWQgaW4gcmVzZXQsIHBpZCAlbGQuXG4iLAotICAgICAgICAgICAgICAgIEJOKGopLCBpLCBTQ3BudC0+c2VyaWFsX251bWJlcik7CisgICAgICAgICBwcmludGsoIiVzOiByZXNldCwgbWJveCAlZCBpbiByZXNldC5cbiIsIEJOKGopLCBpKTsKICAgICAgICAgIH0KIAogICAgICAgaWYgKFNDcG50LT5ob3N0X3NjcmliYmxlID09IE5VTEwpCkBAIC0xNTAwLDggKzE0OTUsNyBAQAogICAgICAgICAgLyogVGhpcyBtYWlsYm94IGlzIHN0aWxsIHdhaXRpbmcgZm9yIGl0cyBpbnRlcnJ1cHQgKi8KICAgICAgICAgIEhEKGopLT5jcF9zdGF0W2ldID0gTE9DS0VEOwogCi0gICAgICAgICBwcmludGsoIiVzLCByZXNldCwgbWJveCAlZCBsb2NrZWQsIERJRF9SRVNFVCwgcGlkICVsZCBkb25lLlxuIiwKLSAgICAgICAgICAgICAgICBCTihqKSwgaSwgU0NwbnQtPnNlcmlhbF9udW1iZXIpOworICAgICAgICAgcHJpbnRrKCIlcywgcmVzZXQsIG1ib3ggJWQgbG9ja2VkLCBESURfUkVTRVQsIGRvbmUuXG4iLCBCTihqKSwgaSk7CiAgICAgICAgICB9CiAKICAgICAgIGVsc2UgaWYgKEhEKGopLT5jcF9zdGF0W2ldID09IEFCT1JUSU5HKSB7CkBAIC0xNTEzLDggKzE1MDcsNyBAQAogICAgICAgICAgLyogVGhpcyBtYWlsYm94IHdhcyBuZXZlciBxdWV1ZWQgdG8gdGhlIGFkYXB0ZXIgKi8KICAgICAgICAgIEhEKGopLT5jcF9zdGF0W2ldID0gRlJFRTsKIAotICAgICAgICAgcHJpbnRrKCIlcywgcmVzZXQsIG1ib3ggJWQgYWJvcnRpbmcsIERJRF9SRVNFVCwgcGlkICVsZCBkb25lLlxuIiwKLSAgICAgICAgICAgICAgICBCTihqKSwgaSwgU0NwbnQtPnNlcmlhbF9udW1iZXIpOworICAgICAgICAgcHJpbnRrKCIlcywgcmVzZXQsIG1ib3ggJWQgYWJvcnRpbmcsIERJRF9SRVNFVCwgZG9uZS5cbiIsIEJOKGopLCBpKTsKICAgICAgICAgIH0KIAogICAgICAgZWxzZQpAQCAtMTUyOCw3ICsxNTIxLDcgQEAKICAgIEhEKGopLT5pbl9yZXNldCA9IEZBTFNFOwogICAgZG9fdHJhY2UgPSBGQUxTRTsKIAotICAgaWYgKGFyZ19kb25lKSBwcmludGsoIiVzOiByZXNldCwgZXhpdCwgcGlkICVsZCBkb25lLlxuIiwgQk4oaiksIFNDYXJnLT5zZXJpYWxfbnVtYmVyKTsKKyAgIGlmIChhcmdfZG9uZSkgcHJpbnRrKCIlczogcmVzZXQsIGV4aXQsIGRvbmUuXG4iLCBCTihqKSk7CiAgICBlbHNlICAgICAgICAgIHByaW50aygiJXM6IHJlc2V0LCBleGl0LlxuIiwgQk4oaikpOwogCiAgICBzcGluX3VubG9ja19pcnEoc2hbal0tPmhvc3RfbG9jayk7CkBAIC0xNjcxLDEwICsxNjY0LDEwIEBACiAgICBpZiAobGlua19zdGF0aXN0aWNzICYmIChvdmVybGFwIHx8ICEoZmx1c2hjb3VudCAlIGxpbmtfc3RhdGlzdGljcykpKQogICAgICAgZm9yIChuID0gMDsgbiA8IG5fcmVhZHk7IG4rKykgewogICAgICAgICAgayA9IGlsW25dOyBjcHAgPSAmSEQoaiktPmNwW2tdOyBTQ3BudCA9IGNwcC0+U0NwbnQ7Ci0gICAgICAgICBwcmludGsoIiVzICVkLiVkOiVkIHBpZCAlbGQgbWIgJWQgZmMgJWQgbnIgJWQgc2VjICVsZCBucyAldSJcCisgICAgICAgICBwcmludGsoIiVzICVkLiVkOiVkIG1iICVkIGZjICVkIG5yICVkIHNlYyAlbGQgbnMgJXUiXAogICAgICAgICAgICAgICAgICIgY3VyICVsZCBzOiVjIHI6JWMgcmV2OiVjIGluOiVjIG92OiVjIHhkICVkLlxuIiwKICAgICAgICAgICAgICAgICAoaWhkbHIgPyAiaWhkbHIiIDogInFjb21tIiksIFNDcG50LT5jaGFubmVsLCBTQ3BudC0+dGFyZ2V0LAotICAgICAgICAgICAgICAgIFNDcG50LT5sdW4sIFNDcG50LT5zZXJpYWxfbnVtYmVyLCBrLCBmbHVzaGNvdW50LCBuX3JlYWR5LAorICAgICAgICAgICAgICAgIFNDcG50LT5sdW4sIGssIGZsdXNoY291bnQsIG5fcmVhZHksCiAgICAgICAgICAgICAgICAgYmxrX3JxX3BvcyhTQ3BudC0+cmVxdWVzdCksIGJsa19ycV9zZWN0b3JzKFNDcG50LT5yZXF1ZXN0KSwKIAkJY3Vyc2VjLCBZRVNOTyhzKSwgWUVTTk8ociksIFlFU05PKHJldiksIFlFU05PKGlucHV0X29ubHkpLAogICAgICAgICAgICAgICAgIFlFU05PKG92ZXJsYXApLCBjcHAtPnhkaXIpOwpAQCAtMTcwOSw5ICsxNzAyLDkgQEAKIAogICAgICAgaWYgKHdhaXRfb25fYnVzeShzaFtqXS0+aW9fcG9ydCwgTUFYTE9PUCkpIHsKICAgICAgICAgIHNjbWRfcHJpbnRrKEtFUk5fSU5GTywgU0NwbnQsCi0JIAkiJXMsIHBpZCAlbGQsIG1ib3ggJWQsIGFkYXB0ZXIiCisJIAkiJXMsIG1ib3ggJWQsIGFkYXB0ZXIiCiAgICAgICAgICAgICAgICAgIiBidXN5LCB3aWxsIGFib3J0LlxuIiwgKGloZGxyID8gImloZGxyIiA6ICJxY29tbSIpLAotICAgICAgICAgICAgICAgIFNDcG50LT5zZXJpYWxfbnVtYmVyLCBrKTsKKyAgICAgICAgICAgICAgICBrKTsKICAgICAgICAgIEhEKGopLT5jcF9zdGF0W2tdID0gQUJPUlRJTkc7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KQEAgLTE3OTMsMTIgKzE3ODYsMTIgQEAKICAgIGlmIChTQ3BudCA9PSBOVUxMKSBwYW5pYygiJXM6IGloZGxyLCBtYm94ICVkLCBTQ3BudCA9PSBOVUxMLlxuIiwgQk4oaiksIGkpOwogCiAgICBpZiAoU0NwbnQtPmhvc3Rfc2NyaWJibGUgPT0gTlVMTCkKLSAgICAgIHBhbmljKCIlczogaWhkbHIsIG1ib3ggJWQsIHBpZCAlbGQsIFNDcG50ICVwIGdhcmJsZWQuXG4iLCBCTihqKSwgaSwKLSAgICAgICAgICAgIFNDcG50LT5zZXJpYWxfbnVtYmVyLCBTQ3BudCk7CisgICAgICBwYW5pYygiJXM6IGloZGxyLCBtYm94ICVkLCBTQ3BudCAlcCBnYXJibGVkLlxuIiwgQk4oaiksIGksCisgICAgICAgICAgICBTQ3BudCk7CiAKICAgIGlmICgqKHVuc2lnbmVkIGludCAqKVNDcG50LT5ob3N0X3NjcmliYmxlICE9IGkpCi0gICAgICBwYW5pYygiJXM6IGloZGxyLCBtYm94ICVkLCBwaWQgJWxkLCBpbmRleCBtaXNtYXRjaCAlZC5cbiIsCi0gICAgICAgICAgICBCTihqKSwgaSwgU0NwbnQtPnNlcmlhbF9udW1iZXIsICoodW5zaWduZWQgaW50ICopU0NwbnQtPmhvc3Rfc2NyaWJibGUpOworICAgICAgcGFuaWMoIiVzOiBpaGRsciwgbWJveCAlZCwgaW5kZXggbWlzbWF0Y2ggJWQuXG4iLAorICAgICAgICAgICAgQk4oaiksIGksICoodW5zaWduZWQgaW50ICopU0NwbnQtPmhvc3Rfc2NyaWJibGUpOwogCiAgICBzeW5jX2RtYShpLCBqKTsKIApAQCAtMTg0MSw4ICsxODM0LDggQEAKICAgICAgICAgICAgICAoISh0c3RhdHVzID09IENIRUNLX0NPTkRJVElPTiAmJiBIRChqKS0+aW9jb3VudCA8PSAxMDAwICYmCiAgICAgICAgICAgICAgICAoU0NwbnQtPnNlbnNlX2J1ZmZlclsyXSAmIDB4ZikgPT0gTk9UX1JFQURZKSkpCiAgICAgICAgICAgICBzY21kX3ByaW50ayhLRVJOX0lORk8sIFNDcG50LAotCSAgICAJImloZGxyLCBwaWQgJWxkLCB0YXJnZXRfc3RhdHVzIDB4JXgsIHNlbnNlIGtleSAweCV4LlxuIiwKLSAgICAgICAgICAgICAgICAgICBTQ3BudC0+c2VyaWFsX251bWJlciwgc3BwLT50YXJnZXRfc3RhdHVzLAorCSAgICAJImloZGxyLCB0YXJnZXRfc3RhdHVzIDB4JXgsIHNlbnNlIGtleSAweCV4LlxuIiwKKyAgICAgICAgICAgICAgICAgICBzcHAtPnRhcmdldF9zdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgU0NwbnQtPnNlbnNlX2J1ZmZlclsyXSk7CiAKICAgICAgICAgIEhEKGopLT50YXJnZXRfdG9bc2NtZF9pZChTQ3BudCldW3NjbWRfY2hhbm5lbChTQ3BudCldID0gMDsKQEAgLTE5MTMsOCArMTkwNiw4IEBACiAgICAgICAgIGRvX3RyYWNlIHx8IG1zZ19ieXRlKHNwcC0+dGFyZ2V0X3N0YXR1cykpCiAjZW5kaWYKICAgICAgIHNjbWRfcHJpbnRrKEtFUk5fSU5GTywgU0NwbnQsICJpaGRsciwgbWJveCAlMmQsIGVyciAweCV4OiV4LCJcCi0gICAgICAgICAgICAgIiBwaWQgJWxkLCByZWcgMHgleCwgY291bnQgJWQuXG4iLAotICAgICAgICAgICAgIGksIHNwcC0+YWRhcHRlcl9zdGF0dXMsIHNwcC0+dGFyZ2V0X3N0YXR1cywgU0NwbnQtPnNlcmlhbF9udW1iZXIsCisgICAgICAgICAgICAgIiByZWcgMHgleCwgY291bnQgJWQuXG4iLAorICAgICAgICAgICAgIGksIHNwcC0+YWRhcHRlcl9zdGF0dXMsIHNwcC0+dGFyZ2V0X3N0YXR1cywKICAgICAgICAgICAgICByZWcsIEhEKGopLT5pb2NvdW50KTsKIAogICAgdW5tYXBfZG1hKGksIGopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3dkMzNjOTMuYyBiL2RyaXZlcnMvc2NzaS93ZDMzYzkzLmMKaW5kZXggNDQ2OGFlMy4uOTdhZTcxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3dkMzNjOTMuYworKysgYi9kcml2ZXJzL3Njc2kvd2QzM2M5My5jCkBAIC0zODEsNyArMzgxLDcgQEAKIAlob3N0ZGF0YSA9IChzdHJ1Y3QgV0QzM0M5M19ob3N0ZGF0YSAqKSBjbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7CiAKIAlEQihEQl9RVUVVRV9DT01NQU5ELAotCSAgIHByaW50aygiUS0lZC0lMDJ4LSVsZCggIiwgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmNtbmRbMF0sIGNtZC0+c2VyaWFsX251bWJlcikpCisJICAgcHJpbnRrKCJRLSVkLSUwMngoICIsIGNtZC0+ZGV2aWNlLT5pZCwgY21kLT5jbW5kWzBdKSkKIAogLyogU2V0IHVwIGEgZmV3IGZpZWxkcyBpbiB0aGUgc2NzaV9jbW5kIHN0cnVjdHVyZSBmb3Igb3VyIG93biB1c2U6CiAgKiAgLSBob3N0X3NjcmliYmxlIGlzIHRoZSBwb2ludGVyIHRvIHRoZSBuZXh0IGNtZCBpbiB0aGUgaW5wdXQgcXVldWUKQEAgLTQ2Miw3ICs0NjIsNyBAQAogCiAJd2QzM2M5M19leGVjdXRlKGNtZC0+ZGV2aWNlLT5ob3N0KTsKIAotCURCKERCX1FVRVVFX0NPTU1BTkQsIHByaW50aygiKVEtJWxkICIsIGNtZC0+c2VyaWFsX251bWJlcikpCisJREIoREJfUVVFVUVfQ09NTUFORCwgcHJpbnRrKCIpUSAiKSkKIAogCXNwaW5fdW5sb2NrX2lycSgmaG9zdGRhdGEtPmxvY2spOwogCXJldHVybiAwOwpAQCAtNjg3LDcgKzY4Nyw3IEBACiAJICovCiAKIAlEQihEQl9FWEVDVVRFLAotCSAgIHByaW50aygiJXMlbGQpRVgtMiAiLCAoY21kLT5TQ3AucGhhc2UpID8gImQ6IiA6ICIiLCBjbWQtPnNlcmlhbF9udW1iZXIpKQorCSAgIHByaW50aygiJXMpRVgtMiAiLCAoY21kLT5TQ3AucGhhc2UpID8gImQ6IiA6ICIiKSkKIH0KIAogc3RhdGljIHZvaWQKQEAgLTk2Myw3ICs5NjMsNyBAQAogCWNhc2UgQ1NSX1hGRVJfRE9ORSB8IFBIU19DT01NQU5EOgogCWNhc2UgQ1NSX1VORVhQIHwgUEhTX0NPTU1BTkQ6CiAJY2FzZSBDU1JfU1JWX1JFUSB8IFBIU19DT01NQU5EOgotCQlEQihEQl9JTlRSLCBwcmludGsoIkNNTkQtJTAyeCwlbGQiLCBjbWQtPmNtbmRbMF0sIGNtZC0+c2VyaWFsX251bWJlcikpCisJCURCKERCX0lOVFIsIHByaW50aygiQ01ORC0lMDJ4IiwgY21kLT5jbW5kWzBdKSkKIAkJICAgIHRyYW5zZmVyX3BpbyhyZWdzLCBjbWQtPmNtbmQsIGNtZC0+Y21kX2xlbiwgREFUQV9PVVRfRElSLAogCQkJCSBob3N0ZGF0YSk7CiAJCWhvc3RkYXRhLT5zdGF0ZSA9IFNfQ09OTkVDVEVEOwpAQCAtMTAwNyw3ICsxMDA3LDcgQEAKIAkJc3dpdGNoIChtc2cpIHsKIAogCQljYXNlIENPTU1BTkRfQ09NUExFVEU6Ci0JCQlEQihEQl9JTlRSLCBwcmludGsoIkNDTVAtJWxkIiwgY21kLT5zZXJpYWxfbnVtYmVyKSkKKwkJCURCKERCX0lOVFIsIHByaW50aygiQ0NNUCIpKQogCQkJICAgIHdyaXRlX3dkMzNjOTNfY21kKHJlZ3MsIFdEX0NNRF9ORUdBVEVfQUNLKTsKIAkJCWhvc3RkYXRhLT5zdGF0ZSA9IFNfUFJFX0NNUF9ESVNDOwogCQkJYnJlYWs7CkBAIC0xMTc0LDcgKzExNzQsNyBAQAogCiAJCXdyaXRlX3dkMzNjOTMocmVncywgV0RfU09VUkNFX0lELCBTUkNJRF9FUik7CiAJCWlmIChwaHMgPT0gMHg2MCkgewotCQkJREIoREJfSU5UUiwgcHJpbnRrKCJTWC1ET05FLSVsZCIsIGNtZC0+c2VyaWFsX251bWJlcikpCisJCQlEQihEQl9JTlRSLCBwcmludGsoIlNYLURPTkUiKSkKIAkJCSAgICBjbWQtPlNDcC5NZXNzYWdlID0gQ09NTUFORF9DT01QTEVURTsKIAkJCWx1biA9IHJlYWRfd2QzM2M5MyhyZWdzLCBXRF9UQVJHRVRfTFVOKTsKIAkJCURCKERCX0lOVFIsIHByaW50aygiOiVkLiVkIiwgY21kLT5TQ3AuU3RhdHVzLCBsdW4pKQpAQCAtMTIwMCw4ICsxMjAwLDggQEAKIAkJCXdkMzNjOTNfZXhlY3V0ZShpbnN0YW5jZSk7CiAJCX0gZWxzZSB7CiAJCQlwcmludGsKLQkJCSAgICAoIiUwMng6JTAyeDolMDJ4LSVsZDogVW5rbm93biBTRUxfWEZFUl9ET05FIHBoYXNlISEtLS0iLAotCQkJICAgICBhc3IsIHNyLCBwaHMsIGNtZC0+c2VyaWFsX251bWJlcik7CisJCQkgICAgKCIlMDJ4OiUwMng6JTAyeDogVW5rbm93biBTRUxfWEZFUl9ET05FIHBoYXNlISEtLS0iLAorCQkJICAgICBhc3IsIHNyLCBwaHMpOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdGRhdGEtPmxvY2ssIGZsYWdzKTsKIAkJfQogCQlicmVhazsKQEAgLTEyNjYsNyArMTI2Niw3IEBACiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0ZGF0YS0+bG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuOwogCQl9Ci0JCURCKERCX0lOVFIsIHByaW50aygiVU5FWFBfRElTQy0lbGQiLCBjbWQtPnNlcmlhbF9udW1iZXIpKQorCQlEQihEQl9JTlRSLCBwcmludGsoIlVORVhQX0RJU0MiKSkKIAkJICAgIGhvc3RkYXRhLT5jb25uZWN0ZWQgPSBOVUxMOwogCQlob3N0ZGF0YS0+YnVzeVtjbWQtPmRldmljZS0+aWRdICY9IH4oMSA8PCBjbWQtPmRldmljZS0+bHVuKTsKIAkJaG9zdGRhdGEtPnN0YXRlID0gU19VTkNPTk5FQ1RFRDsKQEAgLTEyOTIsNyArMTI5Miw3IEBACiAgKi8KIAogCQl3cml0ZV93ZDMzYzkzKHJlZ3MsIFdEX1NPVVJDRV9JRCwgU1JDSURfRVIpOwotCQlEQihEQl9JTlRSLCBwcmludGsoIkRJU0MtJWxkIiwgY21kLT5zZXJpYWxfbnVtYmVyKSkKKwkJREIoREJfSU5UUiwgcHJpbnRrKCJESVNDIikpCiAJCSAgICBpZiAoY21kID09IE5VTEwpIHsKIAkJCXByaW50aygiIC0gQWxyZWFkeSBkaXNjb25uZWN0ZWQhICIpOwogCQkJaG9zdGRhdGEtPnN0YXRlID0gU19VTkNPTk5FQ1RFRDsKQEAgLTE0OTEsNyArMTQ5MSw2IEBACiAJCX0gZWxzZQogCQkJaG9zdGRhdGEtPnN0YXRlID0gU19DT05ORUNURUQ7CiAKLQkJREIoREJfSU5UUiwgcHJpbnRrKCItJWxkIiwgY21kLT5zZXJpYWxfbnVtYmVyKSkKIAkJICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3RkYXRhLT5sb2NrLCBmbGFncyk7CiAJCWJyZWFrOwogCkBAIC0xNjM3LDggKzE2MzYsOCBAQAogCQkJY21kLT5ob3N0X3NjcmliYmxlID0gTlVMTDsKIAkJCWNtZC0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OwogCQkJcHJpbnRrCi0JCQkgICAgKCJzY3NpJWQ6IEFib3J0IC0gcmVtb3ZpbmcgY29tbWFuZCAlbGQgZnJvbSBpbnB1dF9RLiAiLAotCQkJICAgICBpbnN0YW5jZS0+aG9zdF9ubywgY21kLT5zZXJpYWxfbnVtYmVyKTsKKwkJCSAgICAoInNjc2klZDogQWJvcnQgLSByZW1vdmluZyBjb21tYW5kIGZyb20gaW5wdXRfUS4gIiwKKwkJCSAgICAgaW5zdGFuY2UtPmhvc3Rfbm8pOwogCQkJZW5hYmxlX2lycShjbWQtPmRldmljZS0+aG9zdC0+aXJxKTsKIAkJCWNtZC0+c2NzaV9kb25lKGNtZCk7CiAJCQlyZXR1cm4gU1VDQ0VTUzsKQEAgLTE2NjIsOCArMTY2MSw4IEBACiAJCXVjaGFyIHNyLCBhc3I7CiAJCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAotCQlwcmludGsoInNjc2klZDogQWJvcnRpbmcgY29ubmVjdGVkIGNvbW1hbmQgJWxkIC0gIiwKLQkJICAgICAgIGluc3RhbmNlLT5ob3N0X25vLCBjbWQtPnNlcmlhbF9udW1iZXIpOworCQlwcmludGsoInNjc2klZDogQWJvcnRpbmcgY29ubmVjdGVkIGNvbW1hbmQgLSAiLAorCQkgICAgICAgaW5zdGFuY2UtPmhvc3Rfbm8pOwogCiAJCXByaW50aygic3RvcHBpbmcgRE1BIC0gIik7CiAJCWlmIChob3N0ZGF0YS0+ZG1hID09IERfRE1BX1JVTk5JTkcpIHsKQEAgLTE3MjksOCArMTcyOCw4IEBACiAJd2hpbGUgKHRtcCkgewogCQlpZiAodG1wID09IGNtZCkgewogCQkJcHJpbnRrCi0JCQkgICAgKCJzY3NpJWQ6IEFib3J0IC0gY29tbWFuZCAlbGQgZm91bmQgb24gZGlzY29ubmVjdGVkX1EgLSAiLAotCQkJICAgICBpbnN0YW5jZS0+aG9zdF9ubywgY21kLT5zZXJpYWxfbnVtYmVyKTsKKwkJCSAgICAoInNjc2klZDogQWJvcnQgLSBjb21tYW5kIGZvdW5kIG9uIGRpc2Nvbm5lY3RlZF9RIC0gIiwKKwkJCSAgICAgaW5zdGFuY2UtPmhvc3Rfbm8pOwogCQkJcHJpbnRrKCJBYm9ydCBTTk9PWkUuICIpOwogCQkJZW5hYmxlX2lycShjbWQtPmRldmljZS0+aG9zdC0+aXJxKTsKIAkJCXJldHVybiBGQUlMRUQ7CkBAIC0yMTgwLDggKzIxNzksOCBAQAogCQlzdHJjYXQoYnAsICJcbmNvbm5lY3RlZDogICAgICIpOwogCQlpZiAoaGQtPmNvbm5lY3RlZCkgewogCQkJY21kID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaGQtPmNvbm5lY3RlZDsKLQkJCXNwcmludGYodGJ1ZiwgIiAlbGQtJWQ6JWQoJTAyeCkiLAotCQkJCWNtZC0+c2VyaWFsX251bWJlciwgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuLCBjbWQtPmNtbmRbMF0pOworCQkJc3ByaW50Zih0YnVmLCAiICVkOiVkKCUwMngpIiwKKwkJCQljbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4sIGNtZC0+Y21uZFswXSk7CiAJCQlzdHJjYXQoYnAsIHRidWYpOwogCQl9CiAJfQpAQCAtMjE4OSw4ICsyMTg4LDggQEAKIAkJc3RyY2F0KGJwLCAiXG5pbnB1dF9ROiAgICAgICAiKTsKIAkJY21kID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgaGQtPmlucHV0X1E7CiAJCXdoaWxlIChjbWQpIHsKLQkJCXNwcmludGYodGJ1ZiwgIiAlbGQtJWQ6JWQoJTAyeCkiLAotCQkJCWNtZC0+c2VyaWFsX251bWJlciwgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuLCBjbWQtPmNtbmRbMF0pOworCQkJc3ByaW50Zih0YnVmLCAiICVkOiVkKCUwMngpIiwKKwkJCQljbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4sIGNtZC0+Y21uZFswXSk7CiAJCQlzdHJjYXQoYnAsIHRidWYpOwogCQkJY21kID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgY21kLT5ob3N0X3NjcmliYmxlOwogCQl9CkBAIC0yMTk5LDggKzIxOTgsOCBAQAogCQlzdHJjYXQoYnAsICJcbmRpc2Nvbm5lY3RlZF9ROiIpOwogCQljbWQgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBoZC0+ZGlzY29ubmVjdGVkX1E7CiAJCXdoaWxlIChjbWQpIHsKLQkJCXNwcmludGYodGJ1ZiwgIiAlbGQtJWQ6JWQoJTAyeCkiLAotCQkJCWNtZC0+c2VyaWFsX251bWJlciwgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuLCBjbWQtPmNtbmRbMF0pOworCQkJc3ByaW50Zih0YnVmLCAiICVkOiVkKCUwMngpIiwKKwkJCQljbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4sIGNtZC0+Y21uZFswXSk7CiAJCQlzdHJjYXQoYnAsIHRidWYpOwogCQkJY21kID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgY21kLT5ob3N0X3NjcmliYmxlOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9kcml2ZXJfY2hpcGNvbW1vbi5jIGIvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb24uYwppbmRleCA3YzAzMWZkLi4wNmQxNWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9kcml2ZXJfY2hpcGNvbW1vbi5jCisrKyBiL2RyaXZlcnMvc3NiL2RyaXZlcl9jaGlwY29tbW9uLmMKQEAgLTQ2LDQwICs0Niw2NiBAQAogCWlmICghY2NkZXYpCiAJCXJldHVybjsKIAlidXMgPSBjY2Rldi0+YnVzOworCisJLyogV2Ugc3VwcG9ydCBTTE9XIG9ubHkgb24gNi4uOSAqLworCWlmIChjY2Rldi0+aWQucmV2aXNpb24gPj0gMTAgJiYgbW9kZSA9PSBTU0JfQ0xLTU9ERV9TTE9XKQorCQltb2RlID0gU1NCX0NMS01PREVfRFlOQU1JQzsKKworCWlmIChjYy0+Y2FwYWJpbGl0aWVzICYgU1NCX0NISVBDT19DQVBfUE1VKQorCQlyZXR1cm47IC8qIFBNVSBjb250cm9scyBjbG9ja21vZGUsIHNlcGFyYXRlZCBmdW5jdGlvbiBuZWVkZWQgKi8KKwlTU0JfV0FSTl9PTihjY2Rldi0+aWQucmV2aXNpb24gPj0gMjApOworCiAJLyogY2hpcGNvbW1vbiBjb3JlcyBwcmlvciB0byByZXY2IGRvbid0IHN1cHBvcnQgZHluYW1pYyBjbG9jayBjb250cm9sICovCiAJaWYgKGNjZGV2LT5pZC5yZXZpc2lvbiA8IDYpCiAJCXJldHVybjsKLQkvKiBjaGlwY29tbW9uIGNvcmVzIHJldjEwIGFyZSBhIHdob2xlIG5ldyBiYWxsIGdhbWUgKi8KKworCS8qIENoaXBDb21tb24gY29yZXMgcmV2MTArIG5lZWQgdGVzdGluZyAqLwogCWlmIChjY2Rldi0+aWQucmV2aXNpb24gPj0gMTApCiAJCXJldHVybjsKKwogCWlmICghKGNjLT5jYXBhYmlsaXRpZXMgJiBTU0JfQ0hJUENPX0NBUF9QQ1RMKSkKIAkJcmV0dXJuOwogCiAJc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBTU0JfQ0xLTU9ERV9TTE9XOgorCWNhc2UgU1NCX0NMS01PREVfU0xPVzogLyogRm9yIHJldnMgNi4uOSBvbmx5ICovCiAJCXRtcCA9IGNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fU0xPV0NMS0NUTCk7CiAJCXRtcCB8PSBTU0JfQ0hJUENPX1NMT1dDTEtDVExfRlNMT1c7CiAJCWNoaXBjb193cml0ZTMyKGNjLCBTU0JfQ0hJUENPX1NMT1dDTEtDVEwsIHRtcCk7CiAJCWJyZWFrOwogCWNhc2UgU1NCX0NMS01PREVfRkFTVDoKLQkJc3NiX3BjaV94dGFsKGJ1cywgU1NCX0dQSU9fWFRBTCwgMSk7IC8qIEZvcmNlIGNyeXN0YWwgb24gKi8KLQkJdG1wID0gY2hpcGNvX3JlYWQzMihjYywgU1NCX0NISVBDT19TTE9XQ0xLQ1RMKTsKLQkJdG1wICY9IH5TU0JfQ0hJUENPX1NMT1dDTEtDVExfRlNMT1c7Ci0JCXRtcCB8PSBTU0JfQ0hJUENPX1NMT1dDTEtDVExfSVBMTDsKLQkJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fU0xPV0NMS0NUTCwgdG1wKTsKKwkJaWYgKGNjZGV2LT5pZC5yZXZpc2lvbiA8IDEwKSB7CisJCQlzc2JfcGNpX3h0YWwoYnVzLCBTU0JfR1BJT19YVEFMLCAxKTsgLyogRm9yY2UgY3J5c3RhbCBvbiAqLworCQkJdG1wID0gY2hpcGNvX3JlYWQzMihjYywgU1NCX0NISVBDT19TTE9XQ0xLQ1RMKTsKKwkJCXRtcCAmPSB+U1NCX0NISVBDT19TTE9XQ0xLQ1RMX0ZTTE9XOworCQkJdG1wIHw9IFNTQl9DSElQQ09fU0xPV0NMS0NUTF9JUExMOworCQkJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fU0xPV0NMS0NUTCwgdG1wKTsKKwkJfSBlbHNlIHsKKwkJCWNoaXBjb193cml0ZTMyKGNjLCBTU0JfQ0hJUENPX1NZU0NMS0NUTCwKKwkJCQkoY2hpcGNvX3JlYWQzMihjYywgU1NCX0NISVBDT19TWVNDTEtDVEwpIHwKKwkJCQkgU1NCX0NISVBDT19TWVNDTEtDVExfRk9SQ0VIVCkpOworCQkJLyogdWRlbGF5KDE1MCk7IFRPRE86IG5vdCBhdmFpbGFibGUgaW4gZWFybHkgaW5pdCAqLworCQl9CiAJCWJyZWFrOwogCWNhc2UgU1NCX0NMS01PREVfRFlOQU1JQzoKLQkJdG1wID0gY2hpcGNvX3JlYWQzMihjYywgU1NCX0NISVBDT19TTE9XQ0xLQ1RMKTsKLQkJdG1wICY9IH5TU0JfQ0hJUENPX1NMT1dDTEtDVExfRlNMT1c7Ci0JCXRtcCAmPSB+U1NCX0NISVBDT19TTE9XQ0xLQ1RMX0lQTEw7Ci0JCXRtcCAmPSB+U1NCX0NISVBDT19TTE9XQ0xLQ1RMX0VOWFRBTDsKLQkJaWYgKCh0bXAgJiBTU0JfQ0hJUENPX1NMT1dDTEtDVExfU1JDKSAhPSBTU0JfQ0hJUENPX1NMT1dDTEtDVExfU1JDX1hUQUwpCi0JCQl0bXAgfD0gU1NCX0NISVBDT19TTE9XQ0xLQ1RMX0VOWFRBTDsKLQkJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fU0xPV0NMS0NUTCwgdG1wKTsKKwkJaWYgKGNjZGV2LT5pZC5yZXZpc2lvbiA8IDEwKSB7CisJCQl0bXAgPSBjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX1NMT1dDTEtDVEwpOworCQkJdG1wICY9IH5TU0JfQ0hJUENPX1NMT1dDTEtDVExfRlNMT1c7CisJCQl0bXAgJj0gflNTQl9DSElQQ09fU0xPV0NMS0NUTF9JUExMOworCQkJdG1wICY9IH5TU0JfQ0hJUENPX1NMT1dDTEtDVExfRU5YVEFMOworCQkJaWYgKCh0bXAgJiBTU0JfQ0hJUENPX1NMT1dDTEtDVExfU1JDKSAhPQorCQkJICAgIFNTQl9DSElQQ09fU0xPV0NMS0NUTF9TUkNfWFRBTCkKKwkJCQl0bXAgfD0gU1NCX0NISVBDT19TTE9XQ0xLQ1RMX0VOWFRBTDsKKwkJCWNoaXBjb193cml0ZTMyKGNjLCBTU0JfQ0hJUENPX1NMT1dDTEtDVEwsIHRtcCk7CiAKLQkJLyogZm9yIGR5bmFtaWMgY29udHJvbCwgd2UgaGF2ZSB0byByZWxlYXNlIG91ciB4dGFsX3B1ICJmb3JjZSBvbiIgKi8KLQkJaWYgKHRtcCAmIFNTQl9DSElQQ09fU0xPV0NMS0NUTF9FTlhUQUwpCi0JCQlzc2JfcGNpX3h0YWwoYnVzLCBTU0JfR1BJT19YVEFMLCAwKTsKKwkJCS8qIEZvciBkeW5hbWljIGNvbnRyb2wsIHdlIGhhdmUgdG8gcmVsZWFzZSBvdXIgeHRhbF9wdQorCQkJICogImZvcmNlIG9uIiAqLworCQkJaWYgKHRtcCAmIFNTQl9DSElQQ09fU0xPV0NMS0NUTF9FTlhUQUwpCisJCQkJc3NiX3BjaV94dGFsKGJ1cywgU1NCX0dQSU9fWFRBTCwgMCk7CisJCX0gZWxzZSB7CisJCQljaGlwY29fd3JpdGUzMihjYywgU1NCX0NISVBDT19TWVNDTEtDVEwsCisJCQkJKGNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fU1lTQ0xLQ1RMKSAmCisJCQkJIH5TU0JfQ0hJUENPX1NZU0NMS0NUTF9GT1JDRUhUKSk7CisJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJU1NCX1dBUk5fT04oMSk7CkBAIC0yNjAsNiArMjg2LDEyIEBACiAJaWYgKGNjLT5kZXYtPmlkLnJldmlzaW9uID49IDExKQogCQljYy0+c3RhdHVzID0gY2hpcGNvX3JlYWQzMihjYywgU1NCX0NISVBDT19DSElQU1RBVCk7CiAJc3NiX2RwcmludGsoS0VSTl9JTkZPIFBGWCAiY2hpcGNvbW1vbiBzdGF0dXMgaXMgMHgleFxuIiwgY2MtPnN0YXR1cyk7CisKKwlpZiAoY2MtPmRldi0+aWQucmV2aXNpb24gPj0gMjApIHsKKwkJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fR1BJT1BVTExVUCwgMCk7CisJCWNoaXBjb193cml0ZTMyKGNjLCBTU0JfQ0hJUENPX0dQSU9QVUxMRE9XTiwgMCk7CisJfQorCiAJc3NiX3BtdV9pbml0KGNjKTsKIAljaGlwY29fcG93ZXJjb250cm9sX2luaXQoY2MpOwogCXNzYl9jaGlwY29fc2V0X2Nsb2NrbW9kZShjYywgU1NCX0NMS01PREVfRkFTVCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9kcml2ZXJfY2hpcGNvbW1vbl9wbXUuYyBiL2RyaXZlcnMvc3NiL2RyaXZlcl9jaGlwY29tbW9uX3BtdS5jCmluZGV4IDU3MzJiYjIuLjMwNWFkZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL2RyaXZlcl9jaGlwY29tbW9uX3BtdS5jCisrKyBiL2RyaXZlcnMvc3NiL2RyaXZlcl9jaGlwY29tbW9uX3BtdS5jCkBAIC00MjMsNiArNDIzLDggQEAKIAogCXN3aXRjaCAoYnVzLT5jaGlwX2lkKSB7CiAJY2FzZSAweDQzMTI6CisJCSBtaW5fbXNrID0gMHhDQkI7CisJCSBicmVhazsKIAljYXNlIDB4NDMyMjoKIAkJLyogV2Uga2VlcCB0aGUgZGVmYXVsdCBzZXR0aW5nczoKIAkJICogbWluX21zayA9IDB4Q0JCCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9kcml2ZXJfcGNpY29yZS5jIGIvZHJpdmVycy9zc2IvZHJpdmVyX3BjaWNvcmUuYwppbmRleCAwZThkMzUyLi44MmZlYjM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9kcml2ZXJfcGNpY29yZS5jCisrKyBiL2RyaXZlcnMvc3NiL2RyaXZlcl9wY2ljb3JlLmMKQEAgLTE1LDYgKzE1LDExIEBACiAKICNpbmNsdWRlICJzc2JfcHJpdmF0ZS5oIgogCitzdGF0aWMgdTMyIHNzYl9wY2llX3JlYWQoc3RydWN0IHNzYl9wY2ljb3JlICpwYywgdTMyIGFkZHJlc3MpOworc3RhdGljIHZvaWQgc3NiX3BjaWVfd3JpdGUoc3RydWN0IHNzYl9wY2ljb3JlICpwYywgdTMyIGFkZHJlc3MsIHUzMiBkYXRhKTsKK3N0YXRpYyB1MTYgc3NiX3BjaWVfbWRpb19yZWFkKHN0cnVjdCBzc2JfcGNpY29yZSAqcGMsIHU4IGRldmljZSwgdTggYWRkcmVzcyk7CitzdGF0aWMgdm9pZCBzc2JfcGNpZV9tZGlvX3dyaXRlKHN0cnVjdCBzc2JfcGNpY29yZSAqcGMsIHU4IGRldmljZSwKKwkJCQl1OCBhZGRyZXNzLCB1MTYgZGF0YSk7CiAKIHN0YXRpYyBpbmxpbmUKIHUzMiBwY2ljb3JlX3JlYWQzMihzdHJ1Y3Qgc3NiX3BjaWNvcmUgKnBjLCB1MTYgb2Zmc2V0KQpAQCAtNDAzLDYgKzQwOCwxMDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfU1NCX1BDSUNPUkVfSE9TVE1PREUgKi8KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBXb3JrYXJvdW5kcy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgc3NiX3BjaWNvcmVfZml4X3Nwcm9tX2NvcmVfaW5kZXgoc3RydWN0IHNzYl9wY2ljb3JlICpwYykKK3sKKwl1MTYgdG1wID0gcGNpY29yZV9yZWFkMTYocGMsIFNTQl9QQ0lDT1JFX1NQUk9NKDApKTsKKwlpZiAoKCh0bXAgJiAweEYwMDApID4+IDEyKSAhPSBwYy0+ZGV2LT5jb3JlX2luZGV4KSB7CisJCXRtcCAmPSB+MHhGMDAwOworCQl0bXAgfD0gKHBjLT5kZXYtPmNvcmVfaW5kZXggPDwgMTIpOworCQlwY2ljb3JlX3dyaXRlMTYocGMsIFNTQl9QQ0lDT1JFX1NQUk9NKDApLCB0bXApOworCX0KK30KKworc3RhdGljIHU4IHNzYl9wY2ljb3JlX3BvbGFyaXR5X3dvcmthcm91bmQoc3RydWN0IHNzYl9wY2ljb3JlICpwYykKK3sKKwlyZXR1cm4gKHNzYl9wY2llX3JlYWQocGMsIDB4MjA0KSAmIDB4MTApID8gMHhDMCA6IDB4ODA7Cit9CisKK3N0YXRpYyB2b2lkIHNzYl9wY2ljb3JlX3NlcmRlc193b3JrYXJvdW5kKHN0cnVjdCBzc2JfcGNpY29yZSAqcGMpCit7CisJY29uc3QgdTggc2VyZGVzX3BsbF9kZXZpY2UgPSAweDFEOworCWNvbnN0IHU4IHNlcmRlc19yeF9kZXZpY2UgPSAweDFGOworCXUxNiB0bXA7CisKKwlzc2JfcGNpZV9tZGlvX3dyaXRlKHBjLCBzZXJkZXNfcnhfZGV2aWNlLCAxIC8qIENvbnRyb2wgKi8sCisJCQkgICAgc3NiX3BjaWNvcmVfcG9sYXJpdHlfd29ya2Fyb3VuZChwYykpOworCXRtcCA9IHNzYl9wY2llX21kaW9fcmVhZChwYywgc2VyZGVzX3BsbF9kZXZpY2UsIDEgLyogQ29udHJvbCAqLyk7CisJaWYgKHRtcCAmIDB4NDAwMCkKKwkJc3NiX3BjaWVfbWRpb193cml0ZShwYywgc2VyZGVzX3BsbF9kZXZpY2UsIDEsIHRtcCAmIH4weDQwMDApOworfQorCitzdGF0aWMgdm9pZCBzc2JfcGNpY29yZV9wY2lfc2V0dXBfd29ya2Fyb3VuZHMoc3RydWN0IHNzYl9wY2ljb3JlICpwYykKK3sKKwlzdHJ1Y3Qgc3NiX2RldmljZSAqcGRldiA9IHBjLT5kZXY7CisJc3RydWN0IHNzYl9idXMgKmJ1cyA9IHBkZXYtPmJ1czsKKwl1MzIgdG1wOworCisJdG1wID0gcGNpY29yZV9yZWFkMzIocGMsIFNTQl9QQ0lDT1JFX1NCVE9QQ0kyKTsKKwl0bXAgfD0gU1NCX1BDSUNPUkVfU0JUT1BDSV9QUkVGOworCXRtcCB8PSBTU0JfUENJQ09SRV9TQlRPUENJX0JVUlNUOworCXBjaWNvcmVfd3JpdGUzMihwYywgU1NCX1BDSUNPUkVfU0JUT1BDSTIsIHRtcCk7CisKKwlpZiAocGRldi0+aWQucmV2aXNpb24gPCA1KSB7CisJCXRtcCA9IHNzYl9yZWFkMzIocGRldiwgU1NCX0lNQ0ZHTE8pOworCQl0bXAgJj0gflNTQl9JTUNGR0xPX1NFUlRPOworCQl0bXAgfD0gMjsKKwkJdG1wICY9IH5TU0JfSU1DRkdMT19SRVFUTzsKKwkJdG1wIHw9IDMgPDwgU1NCX0lNQ0ZHTE9fUkVRVE9fU0hJRlQ7CisJCXNzYl93cml0ZTMyKHBkZXYsIFNTQl9JTUNGR0xPLCB0bXApOworCQlzc2JfY29tbWl0X3NldHRpbmdzKGJ1cyk7CisJfSBlbHNlIGlmIChwZGV2LT5pZC5yZXZpc2lvbiA+PSAxMSkgeworCQl0bXAgPSBwY2ljb3JlX3JlYWQzMihwYywgU1NCX1BDSUNPUkVfU0JUT1BDSTIpOworCQl0bXAgfD0gU1NCX1BDSUNPUkVfU0JUT1BDSV9NUk07CisJCXBjaWNvcmVfd3JpdGUzMihwYywgU1NCX1BDSUNPUkVfU0JUT1BDSTIsIHRtcCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzc2JfcGNpY29yZV9wY2llX3NldHVwX3dvcmthcm91bmRzKHN0cnVjdCBzc2JfcGNpY29yZSAqcGMpCit7CisJdTMyIHRtcDsKKwl1OCByZXYgPSBwYy0+ZGV2LT5pZC5yZXZpc2lvbjsKKworCWlmIChyZXYgPT0gMCB8fCByZXYgPT0gMSkgeworCQkvKiBUTFAgV29ya2Fyb3VuZCByZWdpc3Rlci4gKi8KKwkJdG1wID0gc3NiX3BjaWVfcmVhZChwYywgMHg0KTsKKwkJdG1wIHw9IDB4ODsKKwkJc3NiX3BjaWVfd3JpdGUocGMsIDB4NCwgdG1wKTsKKwl9CisJaWYgKHJldiA9PSAxKSB7CisJCS8qIERMTFAgTGluayBDb250cm9sIHJlZ2lzdGVyLiAqLworCQl0bXAgPSBzc2JfcGNpZV9yZWFkKHBjLCAweDEwMCk7CisJCXRtcCB8PSAweDQwOworCQlzc2JfcGNpZV93cml0ZShwYywgMHgxMDAsIHRtcCk7CisJfQorCisJaWYgKHJldiA9PSAwKSB7CisJCWNvbnN0IHU4IHNlcmRlc19yeF9kZXZpY2UgPSAweDFGOworCisJCXNzYl9wY2llX21kaW9fd3JpdGUocGMsIHNlcmRlc19yeF9kZXZpY2UsCisJCQkJCTIgLyogVGltZXIgKi8sIDB4ODEyOCk7CisJCXNzYl9wY2llX21kaW9fd3JpdGUocGMsIHNlcmRlc19yeF9kZXZpY2UsCisJCQkJCTYgLyogQ0RSICovLCAweDAxMDApOworCQlzc2JfcGNpZV9tZGlvX3dyaXRlKHBjLCBzZXJkZXNfcnhfZGV2aWNlLAorCQkJCQk3IC8qIENEUiBCVyAqLywgMHgxNDY2KTsKKwl9IGVsc2UgaWYgKHJldiA9PSAzIHx8IHJldiA9PSA0IHx8IHJldiA9PSA1KSB7CisJCS8qIFRPRE86IERMTFAgUG93ZXIgTWFuYWdlbWVudCBUaHJlc2hvbGQgKi8KKwkJc3NiX3BjaWNvcmVfc2VyZGVzX3dvcmthcm91bmQocGMpOworCQkvKiBUT0RPOiBBU1BNICovCisJfSBlbHNlIGlmIChyZXYgPT0gNykgeworCQkvKiBUT0RPOiBObyBQTEwgZG93biAqLworCX0KKworCWlmIChyZXYgPj0gNikgeworCQkvKiBNaXNjZWxsYW5lb3VzIENvbmZpZ3VyYXRpb24gRml4dXAgKi8KKwkJdG1wID0gcGNpY29yZV9yZWFkMTYocGMsIFNTQl9QQ0lDT1JFX1NQUk9NKDUpKTsKKwkJaWYgKCEodG1wICYgMHg4MDAwKSkKKwkJCXBjaWNvcmVfd3JpdGUxNihwYywgU1NCX1BDSUNPUkVfU1BST00oNSksCisJCQkJCXRtcCB8IDB4ODAwMCk7CisJfQorfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEdlbmVyaWMgYW5kIENsaWVudG1vZGUgb3BlcmF0aW9uIGNvZGUuCkBAIC00MTcsMTQgKzUyMywxNCBAQAogdm9pZCBzc2JfcGNpY29yZV9pbml0KHN0cnVjdCBzc2JfcGNpY29yZSAqcGMpCiB7CiAJc3RydWN0IHNzYl9kZXZpY2UgKmRldiA9IHBjLT5kZXY7Ci0Jc3RydWN0IHNzYl9idXMgKmJ1czsKIAogCWlmICghZGV2KQogCQlyZXR1cm47Ci0JYnVzID0gZGV2LT5idXM7CiAJaWYgKCFzc2JfZGV2aWNlX2lzX2VuYWJsZWQoZGV2KSkKIAkJc3NiX2RldmljZV9lbmFibGUoZGV2LCAwKTsKIAorCXNzYl9wY2ljb3JlX2ZpeF9zcHJvbV9jb3JlX2luZGV4KHBjKTsKKwogI2lmZGVmIENPTkZJR19TU0JfUENJQ09SRV9IT1NUTU9ERQogCXBjLT5ob3N0bW9kZSA9IHBjaWNvcmVfaXNfaW5faG9zdG1vZGUocGMpOwogCWlmIChwYy0+aG9zdG1vZGUpCkBAIC00MzIsNiArNTM4LDExIEBACiAjZW5kaWYgLyogQ09ORklHX1NTQl9QQ0lDT1JFX0hPU1RNT0RFICovCiAJaWYgKCFwYy0+aG9zdG1vZGUpCiAJCXNzYl9wY2ljb3JlX2luaXRfY2xpZW50bW9kZShwYyk7CisKKwkvKiBBZGRpdGlvbmFsIGFsd2F5cyBvbmNlLWV4ZWN1dGVkIHdvcmthcm91bmRzICovCisJc3NiX3BjaWNvcmVfc2VyZGVzX3dvcmthcm91bmQocGMpOworCS8qIFRPRE86IEFTUE0gKi8KKwkvKiBUT0RPOiBDbG9jayBSZXF1ZXN0IFVwZGF0ZSAqLwogfQogCiBzdGF0aWMgdTMyIHNzYl9wY2llX3JlYWQoc3RydWN0IHNzYl9wY2ljb3JlICpwYywgdTMyIGFkZHJlc3MpCkBAIC00NDYsMjggKzU1Nyw5OCBAQAogCXBjaWNvcmVfd3JpdGUzMihwYywgMHgxMzQsIGRhdGEpOwogfQogCi1zdGF0aWMgdm9pZCBzc2JfcGNpZV9tZGlvX3dyaXRlKHN0cnVjdCBzc2JfcGNpY29yZSAqcGMsIHU4IGRldmljZSwKLQkJCQl1OCBhZGRyZXNzLCB1MTYgZGF0YSkKK3N0YXRpYyB2b2lkIHNzYl9wY2llX21kaW9fc2V0X3BoeShzdHJ1Y3Qgc3NiX3BjaWNvcmUgKnBjLCB1OCBwaHkpCiB7CiAJY29uc3QgdTE2IG1kaW9fY29udHJvbCA9IDB4MTI4OwogCWNvbnN0IHUxNiBtZGlvX2RhdGEgPSAweDEyQzsKIAl1MzIgdjsKIAlpbnQgaTsKIAorCXYgPSAoMSA8PCAzMCk7IC8qIFN0YXJ0IG9mIFRyYW5zYWN0aW9uICovCisJdiB8PSAoMSA8PCAyOCk7IC8qIFdyaXRlIFRyYW5zYWN0aW9uICovCisJdiB8PSAoMSA8PCAxNyk7IC8qIFR1cm5hcm91bmQgKi8KKwl2IHw9ICgweDFGIDw8IDE4KTsKKwl2IHw9IChwaHkgPDwgNCk7CisJcGNpY29yZV93cml0ZTMyKHBjLCBtZGlvX2RhdGEsIHYpOworCisJdWRlbGF5KDEwKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjAwOyBpKyspIHsKKwkJdiA9IHBjaWNvcmVfcmVhZDMyKHBjLCBtZGlvX2NvbnRyb2wpOworCQlpZiAodiAmIDB4MTAwIC8qIFRyYW5zIGNvbXBsZXRlICovKQorCQkJYnJlYWs7CisJCW1zbGVlcCgxKTsKKwl9Cit9CisKK3N0YXRpYyB1MTYgc3NiX3BjaWVfbWRpb19yZWFkKHN0cnVjdCBzc2JfcGNpY29yZSAqcGMsIHU4IGRldmljZSwgdTggYWRkcmVzcykKK3sKKwljb25zdCB1MTYgbWRpb19jb250cm9sID0gMHgxMjg7CisJY29uc3QgdTE2IG1kaW9fZGF0YSA9IDB4MTJDOworCWludCBtYXhfcmV0cmllcyA9IDEwOworCXUxNiByZXQgPSAwOworCXUzMiB2OworCWludCBpOworCiAJdiA9IDB4ODA7IC8qIEVuYWJsZSBQcmVhbWJsZSBTZXF1ZW5jZSAqLwogCXYgfD0gMHgyOyAvKiBNRElPIENsb2NrIERpdmlzb3IgKi8KIAlwY2ljb3JlX3dyaXRlMzIocGMsIG1kaW9fY29udHJvbCwgdik7CiAKKwlpZiAocGMtPmRldi0+aWQucmV2aXNpb24gPj0gMTApIHsKKwkJbWF4X3JldHJpZXMgPSAyMDA7CisJCXNzYl9wY2llX21kaW9fc2V0X3BoeShwYywgZGV2aWNlKTsKKwl9CisKKwl2ID0gKDEgPDwgMzApOyAvKiBTdGFydCBvZiBUcmFuc2FjdGlvbiAqLworCXYgfD0gKDEgPDwgMjkpOyAvKiBSZWFkIFRyYW5zYWN0aW9uICovCisJdiB8PSAoMSA8PCAxNyk7IC8qIFR1cm5hcm91bmQgKi8KKwlpZiAocGMtPmRldi0+aWQucmV2aXNpb24gPCAxMCkKKwkJdiB8PSAodTMyKWRldmljZSA8PCAyMjsKKwl2IHw9ICh1MzIpYWRkcmVzcyA8PCAxODsKKwlwY2ljb3JlX3dyaXRlMzIocGMsIG1kaW9fZGF0YSwgdik7CisJLyogV2FpdCBmb3IgdGhlIGRldmljZSB0byBjb21wbGV0ZSB0aGUgdHJhbnNhY3Rpb24gKi8KKwl1ZGVsYXkoMTApOworCWZvciAoaSA9IDA7IGkgPCBtYXhfcmV0cmllczsgaSsrKSB7CisJCXYgPSBwY2ljb3JlX3JlYWQzMihwYywgbWRpb19jb250cm9sKTsKKwkJaWYgKHYgJiAweDEwMCAvKiBUcmFucyBjb21wbGV0ZSAqLykgeworCQkJdWRlbGF5KDEwKTsKKwkJCXJldCA9IHBjaWNvcmVfcmVhZDMyKHBjLCBtZGlvX2RhdGEpOworCQkJYnJlYWs7CisJCX0KKwkJbXNsZWVwKDEpOworCX0KKwlwY2ljb3JlX3dyaXRlMzIocGMsIG1kaW9fY29udHJvbCwgMCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc3NiX3BjaWVfbWRpb193cml0ZShzdHJ1Y3Qgc3NiX3BjaWNvcmUgKnBjLCB1OCBkZXZpY2UsCisJCQkJdTggYWRkcmVzcywgdTE2IGRhdGEpCit7CisJY29uc3QgdTE2IG1kaW9fY29udHJvbCA9IDB4MTI4OworCWNvbnN0IHUxNiBtZGlvX2RhdGEgPSAweDEyQzsKKwlpbnQgbWF4X3JldHJpZXMgPSAxMDsKKwl1MzIgdjsKKwlpbnQgaTsKKworCXYgPSAweDgwOyAvKiBFbmFibGUgUHJlYW1ibGUgU2VxdWVuY2UgKi8KKwl2IHw9IDB4MjsgLyogTURJTyBDbG9jayBEaXZpc29yICovCisJcGNpY29yZV93cml0ZTMyKHBjLCBtZGlvX2NvbnRyb2wsIHYpOworCisJaWYgKHBjLT5kZXYtPmlkLnJldmlzaW9uID49IDEwKSB7CisJCW1heF9yZXRyaWVzID0gMjAwOworCQlzc2JfcGNpZV9tZGlvX3NldF9waHkocGMsIGRldmljZSk7CisJfQorCiAJdiA9ICgxIDw8IDMwKTsgLyogU3RhcnQgb2YgVHJhbnNhY3Rpb24gKi8KIAl2IHw9ICgxIDw8IDI4KTsgLyogV3JpdGUgVHJhbnNhY3Rpb24gKi8KIAl2IHw9ICgxIDw8IDE3KTsgLyogVHVybmFyb3VuZCAqLwotCXYgfD0gKHUzMilkZXZpY2UgPDwgMjI7CisJaWYgKHBjLT5kZXYtPmlkLnJldmlzaW9uIDwgMTApCisJCXYgfD0gKHUzMilkZXZpY2UgPDwgMjI7CiAJdiB8PSAodTMyKWFkZHJlc3MgPDwgMTg7CiAJdiB8PSBkYXRhOwogCXBjaWNvcmVfd3JpdGUzMihwYywgbWRpb19kYXRhLCB2KTsKIAkvKiBXYWl0IGZvciB0aGUgZGV2aWNlIHRvIGNvbXBsZXRlIHRoZSB0cmFuc2FjdGlvbiAqLwogCXVkZWxheSgxMCk7Ci0JZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbWF4X3JldHJpZXM7IGkrKykgewogCQl2ID0gcGNpY29yZV9yZWFkMzIocGMsIG1kaW9fY29udHJvbCk7CiAJCWlmICh2ICYgMHgxMDAgLyogVHJhbnMgY29tcGxldGUgKi8pCiAJCQlicmVhazsKQEAgLTQ3NiwzMCArNjU3LDYgQEAKIAlwY2ljb3JlX3dyaXRlMzIocGMsIG1kaW9fY29udHJvbCwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNzYl9icm9hZGNhc3RfdmFsdWUoc3RydWN0IHNzYl9kZXZpY2UgKmRldiwKLQkJCQl1MzIgYWRkcmVzcywgdTMyIGRhdGEpCi17Ci0JLyogVGhpcyBpcyB1c2VkIGZvciBib3RoLCBQQ0kgYW5kIENoaXBDb21tb24gY29yZSwgc28gYmUgY2FyZWZ1bC4gKi8KLQlCVUlMRF9CVUdfT04oU1NCX1BDSUNPUkVfQkNBU1RfQUREUiAhPSBTU0JfQ0hJUENPX0JDQVNUX0FERFIpOwotCUJVSUxEX0JVR19PTihTU0JfUENJQ09SRV9CQ0FTVF9EQVRBICE9IFNTQl9DSElQQ09fQkNBU1RfREFUQSk7Ci0KLQlzc2Jfd3JpdGUzMihkZXYsIFNTQl9QQ0lDT1JFX0JDQVNUX0FERFIsIGFkZHJlc3MpOwotCXNzYl9yZWFkMzIoZGV2LCBTU0JfUENJQ09SRV9CQ0FTVF9BRERSKTsgLyogZmx1c2ggKi8KLQlzc2Jfd3JpdGUzMihkZXYsIFNTQl9QQ0lDT1JFX0JDQVNUX0RBVEEsIGRhdGEpOwotCXNzYl9yZWFkMzIoZGV2LCBTU0JfUENJQ09SRV9CQ0FTVF9EQVRBKTsgLyogZmx1c2ggKi8KLX0KLQotc3RhdGljIHZvaWQgc3NiX2NvbW1pdF9zZXR0aW5ncyhzdHJ1Y3Qgc3NiX2J1cyAqYnVzKQotewotCXN0cnVjdCBzc2JfZGV2aWNlICpkZXY7Ci0KLQlkZXYgPSBidXMtPmNoaXBjby5kZXYgPyBidXMtPmNoaXBjby5kZXYgOiBidXMtPnBjaWNvcmUuZGV2OwotCWlmIChXQVJOX09OKCFkZXYpKQotCQlyZXR1cm47Ci0JLyogVGhpcyBmb3JjZXMgYW4gdXBkYXRlIG9mIHRoZSBjYWNoZWQgcmVnaXN0ZXJzLiAqLwotCXNzYl9icm9hZGNhc3RfdmFsdWUoZGV2LCAweEZEOCwgMCk7Ci19Ci0KIGludCBzc2JfcGNpY29yZV9kZXZfaXJxdmVjc19lbmFibGUoc3RydWN0IHNzYl9wY2ljb3JlICpwYywKIAkJCQkgICBzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2KQogewpAQCAtNTUwLDQ4ICs3MDcsMTAgQEAKIAlpZiAocGMtPnNldHVwX2RvbmUpCiAJCWdvdG8gb3V0OwogCWlmIChwZGV2LT5pZC5jb3JlaWQgPT0gU1NCX0RFVl9QQ0kpIHsKLQkJdG1wID0gcGNpY29yZV9yZWFkMzIocGMsIFNTQl9QQ0lDT1JFX1NCVE9QQ0kyKTsKLQkJdG1wIHw9IFNTQl9QQ0lDT1JFX1NCVE9QQ0lfUFJFRjsKLQkJdG1wIHw9IFNTQl9QQ0lDT1JFX1NCVE9QQ0lfQlVSU1Q7Ci0JCXBjaWNvcmVfd3JpdGUzMihwYywgU1NCX1BDSUNPUkVfU0JUT1BDSTIsIHRtcCk7Ci0KLQkJaWYgKHBkZXYtPmlkLnJldmlzaW9uIDwgNSkgewotCQkJdG1wID0gc3NiX3JlYWQzMihwZGV2LCBTU0JfSU1DRkdMTyk7Ci0JCQl0bXAgJj0gflNTQl9JTUNGR0xPX1NFUlRPOwotCQkJdG1wIHw9IDI7Ci0JCQl0bXAgJj0gflNTQl9JTUNGR0xPX1JFUVRPOwotCQkJdG1wIHw9IDMgPDwgU1NCX0lNQ0ZHTE9fUkVRVE9fU0hJRlQ7Ci0JCQlzc2Jfd3JpdGUzMihwZGV2LCBTU0JfSU1DRkdMTywgdG1wKTsKLQkJCXNzYl9jb21taXRfc2V0dGluZ3MoYnVzKTsKLQkJfSBlbHNlIGlmIChwZGV2LT5pZC5yZXZpc2lvbiA+PSAxMSkgewotCQkJdG1wID0gcGNpY29yZV9yZWFkMzIocGMsIFNTQl9QQ0lDT1JFX1NCVE9QQ0kyKTsKLQkJCXRtcCB8PSBTU0JfUENJQ09SRV9TQlRPUENJX01STTsKLQkJCXBjaWNvcmVfd3JpdGUzMihwYywgU1NCX1BDSUNPUkVfU0JUT1BDSTIsIHRtcCk7Ci0JCX0KKwkJc3NiX3BjaWNvcmVfcGNpX3NldHVwX3dvcmthcm91bmRzKHBjKTsKIAl9IGVsc2UgewogCQlXQVJOX09OKHBkZXYtPmlkLmNvcmVpZCAhPSBTU0JfREVWX1BDSUUpOwotCQkvL1RPRE86IEJldHRlciBtYWtlIGRlZmluZXMgZm9yIGFsbCB0aGVzZSBtYWdpYyBQQ0lFIHZhbHVlcy4KLQkJaWYgKChwZGV2LT5pZC5yZXZpc2lvbiA9PSAwKSB8fCAocGRldi0+aWQucmV2aXNpb24gPT0gMSkpIHsKLQkJCS8qIFRMUCBXb3JrYXJvdW5kIHJlZ2lzdGVyLiAqLwotCQkJdG1wID0gc3NiX3BjaWVfcmVhZChwYywgMHg0KTsKLQkJCXRtcCB8PSAweDg7Ci0JCQlzc2JfcGNpZV93cml0ZShwYywgMHg0LCB0bXApOwotCQl9Ci0JCWlmIChwZGV2LT5pZC5yZXZpc2lvbiA9PSAwKSB7Ci0JCQljb25zdCB1OCBzZXJkZXNfcnhfZGV2aWNlID0gMHgxRjsKLQotCQkJc3NiX3BjaWVfbWRpb193cml0ZShwYywgc2VyZGVzX3J4X2RldmljZSwKLQkJCQkJICAgIDIgLyogVGltZXIgKi8sIDB4ODEyOCk7Ci0JCQlzc2JfcGNpZV9tZGlvX3dyaXRlKHBjLCBzZXJkZXNfcnhfZGV2aWNlLAotCQkJCQkgICAgNiAvKiBDRFIgKi8sIDB4MDEwMCk7Ci0JCQlzc2JfcGNpZV9tZGlvX3dyaXRlKHBjLCBzZXJkZXNfcnhfZGV2aWNlLAotCQkJCQkgICAgNyAvKiBDRFIgQlcgKi8sIDB4MTQ2Nik7Ci0JCX0gZWxzZSBpZiAocGRldi0+aWQucmV2aXNpb24gPT0gMSkgewotCQkJLyogRExMUCBMaW5rIENvbnRyb2wgcmVnaXN0ZXIuICovCi0JCQl0bXAgPSBzc2JfcGNpZV9yZWFkKHBjLCAweDEwMCk7Ci0JCQl0bXAgfD0gMHg0MDsKLQkJCXNzYl9wY2llX3dyaXRlKHBjLCAweDEwMCwgdG1wKTsKLQkJfQorCQlzc2JfcGNpY29yZV9wY2llX3NldHVwX3dvcmthcm91bmRzKHBjKTsKIAl9CiAJcGMtPnNldHVwX2RvbmUgPSAxOwogb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvbWFpbi5jIGIvZHJpdmVycy9zc2IvbWFpbi5jCmluZGV4IGUwNWJhNmUuLmY4YTEzZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL21haW4uYworKysgYi9kcml2ZXJzL3NzYi9tYWluLmMKQEAgLTExMTcsMjMgKzExMTcsMjIgQEAKIHsKIAl1MzIgcmV2ID0gc3NiX3JlYWQzMihkZXYsIFNTQl9JRExPVykgJiBTU0JfSURMT1dfU1NCUkVWOwogCi0JLyogVGhlIFJFSkVDVCBiaXQgY2hhbmdlZCBwb3NpdGlvbiBpbiBUTVNMT1cgYmV0d2VlbgotCSAqIEJhY2twbGFuZSByZXZpc2lvbnMuICovCisJLyogVGhlIFJFSkVDVCBiaXQgc2VlbXMgdG8gYmUgZGlmZmVyZW50IGZvciBCYWNrcGxhbmUgcmV2IDIuMyAqLwogCXN3aXRjaCAocmV2KSB7CiAJY2FzZSBTU0JfSURMT1dfU1NCUkVWXzIyOgotCQlyZXR1cm4gU1NCX1RNU0xPV19SRUpFQ1RfMjI7CisJY2FzZSBTU0JfSURMT1dfU1NCUkVWXzI0OgorCWNhc2UgU1NCX0lETE9XX1NTQlJFVl8yNjoKKwkJcmV0dXJuIFNTQl9UTVNMT1dfUkVKRUNUOwogCWNhc2UgU1NCX0lETE9XX1NTQlJFVl8yMzoKIAkJcmV0dXJuIFNTQl9UTVNMT1dfUkVKRUNUXzIzOwotCWNhc2UgU1NCX0lETE9XX1NTQlJFVl8yNDogICAgIC8qIFRPRE8gLSBmaW5kIHRoZSBwcm9wZXIgUkVKRUNUIGJpdHMgKi8KLQljYXNlIFNTQl9JRExPV19TU0JSRVZfMjU6ICAgICAvKiBzYW1lIGhlcmUgKi8KLQljYXNlIFNTQl9JRExPV19TU0JSRVZfMjY6ICAgICAvKiBzYW1lIGhlcmUgKi8KKwljYXNlIFNTQl9JRExPV19TU0JSRVZfMjU6ICAgICAvKiBUT0RPIC0gZmluZCB0aGUgcHJvcGVyIFJFSkVDVCBiaXQgKi8KIAljYXNlIFNTQl9JRExPV19TU0JSRVZfMjc6ICAgICAvKiBzYW1lIGhlcmUgKi8KLQkJcmV0dXJuIFNTQl9UTVNMT1dfUkVKRUNUXzIzOwkvKiB0aGlzIGlzIGEgZ3Vlc3MgKi8KKwkJcmV0dXJuIFNTQl9UTVNMT1dfUkVKRUNUOwkvKiB0aGlzIGlzIGEgZ3Vlc3MgKi8KIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9JTkZPICJzc2I6IEJhY2twbGFuZSBSZXZpc2lvbiAweCUuOFhcbiIsIHJldik7CiAJCVdBUk5fT04oMSk7CiAJfQotCXJldHVybiAoU1NCX1RNU0xPV19SRUpFQ1RfMjIgfCBTU0JfVE1TTE9XX1JFSkVDVF8yMyk7CisJcmV0dXJuIChTU0JfVE1TTE9XX1JFSkVDVCB8IFNTQl9UTVNMT1dfUkVKRUNUXzIzKTsKIH0KIAogaW50IHNzYl9kZXZpY2VfaXNfZW5hYmxlZChzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2KQpAQCAtMTMwOSwyMCArMTMwOCwyMCBAQAogCiBpbnQgc3NiX2J1c19wb3dlcnVwKHN0cnVjdCBzc2JfYnVzICpidXMsIGJvb2wgZHluYW1pY19wY3RsKQogewotCXN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2M7CiAJaW50IGVycjsKIAllbnVtIHNzYl9jbGttb2RlIG1vZGU7CiAKIAllcnIgPSBzc2JfcGNpX3h0YWwoYnVzLCBTU0JfR1BJT19YVEFMIHwgU1NCX0dQSU9fUExMLCAxKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycm9yOwotCWNjID0gJmJ1cy0+Y2hpcGNvOwotCW1vZGUgPSBkeW5hbWljX3BjdGwgPyBTU0JfQ0xLTU9ERV9EWU5BTUlDIDogU1NCX0NMS01PREVfRkFTVDsKLQlzc2JfY2hpcGNvX3NldF9jbG9ja21vZGUoY2MsIG1vZGUpOwogCiAjaWZkZWYgQ09ORklHX1NTQl9ERUJVRwogCWJ1cy0+cG93ZXJlZF91cCA9IDE7CiAjZW5kaWYKKworCW1vZGUgPSBkeW5hbWljX3BjdGwgPyBTU0JfQ0xLTU9ERV9EWU5BTUlDIDogU1NCX0NMS01PREVfRkFTVDsKKwlzc2JfY2hpcGNvX3NldF9jbG9ja21vZGUoJmJ1cy0+Y2hpcGNvLCBtb2RlKTsKKwogCXJldHVybiAwOwogZXJyb3I6CiAJc3NiX3ByaW50ayhLRVJOX0VSUiBQRlggIkJ1cyBwb3dlcnVwIGZhaWxlZFxuIik7CkBAIC0xMzMwLDYgKzEzMjksMzcgQEAKIH0KIEVYUE9SVF9TWU1CT0woc3NiX2J1c19wb3dlcnVwKTsKIAorc3RhdGljIHZvaWQgc3NiX2Jyb2FkY2FzdF92YWx1ZShzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LAorCQkJCXUzMiBhZGRyZXNzLCB1MzIgZGF0YSkKK3sKKyNpZmRlZiBDT05GSUdfU1NCX0RSSVZFUl9QQ0lDT1JFCisJLyogVGhpcyBpcyB1c2VkIGZvciBib3RoLCBQQ0kgYW5kIENoaXBDb21tb24gY29yZSwgc28gYmUgY2FyZWZ1bC4gKi8KKwlCVUlMRF9CVUdfT04oU1NCX1BDSUNPUkVfQkNBU1RfQUREUiAhPSBTU0JfQ0hJUENPX0JDQVNUX0FERFIpOworCUJVSUxEX0JVR19PTihTU0JfUENJQ09SRV9CQ0FTVF9EQVRBICE9IFNTQl9DSElQQ09fQkNBU1RfREFUQSk7CisjZW5kaWYKKworCXNzYl93cml0ZTMyKGRldiwgU1NCX0NISVBDT19CQ0FTVF9BRERSLCBhZGRyZXNzKTsKKwlzc2JfcmVhZDMyKGRldiwgU1NCX0NISVBDT19CQ0FTVF9BRERSKTsgLyogZmx1c2ggKi8KKwlzc2Jfd3JpdGUzMihkZXYsIFNTQl9DSElQQ09fQkNBU1RfREFUQSwgZGF0YSk7CisJc3NiX3JlYWQzMihkZXYsIFNTQl9DSElQQ09fQkNBU1RfREFUQSk7IC8qIGZsdXNoICovCit9CisKK3ZvaWQgc3NiX2NvbW1pdF9zZXR0aW5ncyhzdHJ1Y3Qgc3NiX2J1cyAqYnVzKQoreworCXN0cnVjdCBzc2JfZGV2aWNlICpkZXY7CisKKyNpZmRlZiBDT05GSUdfU1NCX0RSSVZFUl9QQ0lDT1JFCisJZGV2ID0gYnVzLT5jaGlwY28uZGV2ID8gYnVzLT5jaGlwY28uZGV2IDogYnVzLT5wY2ljb3JlLmRldjsKKyNlbHNlCisJZGV2ID0gYnVzLT5jaGlwY28uZGV2OworI2VuZGlmCisJaWYgKFdBUk5fT04oIWRldikpCisJCXJldHVybjsKKwkvKiBUaGlzIGZvcmNlcyBhbiB1cGRhdGUgb2YgdGhlIGNhY2hlZCByZWdpc3RlcnMuICovCisJc3NiX2Jyb2FkY2FzdF92YWx1ZShkZXYsIDB4RkQ4LCAwKTsKK30KK0VYUE9SVF9TWU1CT0woc3NiX2NvbW1pdF9zZXR0aW5ncyk7CisKIHUzMiBzc2JfYWRtYXRjaF9iYXNlKHUzMiBhZG0pCiB7CiAJdTMyIGJhc2UgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvcGNpLmMgYi9kcml2ZXJzL3NzYi9wY2kuYwppbmRleCA2ZjM0OTYzLi43YWQ0ODU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9wY2kuYworKysgYi9kcml2ZXJzL3NzYi9wY2kuYwpAQCAtNjYyLDcgKzY2Miw2IEBACiBzdGF0aWMgaW50IHNzYl9wY2lfc3Byb21fZ2V0KHN0cnVjdCBzc2JfYnVzICpidXMsCiAJCQkgICAgIHN0cnVjdCBzc2Jfc3Byb20gKnNwcm9tKQogewotCWNvbnN0IHN0cnVjdCBzc2Jfc3Byb20gKmZhbGxiYWNrOwogCWludCBlcnI7CiAJdTE2ICpidWY7CiAKQEAgLTcwNywxMCArNzA2LDE3IEBACiAJCWlmIChlcnIpIHsKIAkJCS8qIEFsbCBDUkMgYXR0ZW1wdHMgZmFpbGVkLgogCQkJICogTWF5YmUgdGhlcmUgaXMgbm8gU1BST00gb24gdGhlIGRldmljZT8KLQkJCSAqIElmIHdlIGhhdmUgYSBmYWxsYmFjaywgdXNlIHRoYXQuICovCi0JCQlmYWxsYmFjayA9IHNzYl9nZXRfZmFsbGJhY2tfc3Byb20oKTsKLQkJCWlmIChmYWxsYmFjaykgewotCQkJCW1lbWNweShzcHJvbSwgZmFsbGJhY2ssIHNpemVvZigqc3Byb20pKTsKKwkJCSAqIE5vdyB3ZSBhc2sgdGhlIGFyY2ggY29kZSBpZiB0aGVyZSBpcyBzb21lIHNwcm9tCisJCQkgKiBhdmFpbGFibGUgZm9yIHRoaXMgZGV2aWNlIGluIHNvbWUgb3RoZXIgc3RvcmFnZSAqLworCQkJZXJyID0gc3NiX2ZpbGxfc3Byb21fd2l0aF9mYWxsYmFjayhidXMsIHNwcm9tKTsKKwkJCWlmIChlcnIpIHsKKwkJCQlzc2JfcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIldBUk5JTkc6IFVzaW5nIgorCQkJCQkgICAiIGZhbGxiYWNrIFNQUk9NIGZhaWxlZCAoZXJyICVkKVxuIiwKKwkJCQkJICAgZXJyKTsKKwkJCX0gZWxzZSB7CisJCQkJc3NiX2RwcmludGsoS0VSTl9ERUJVRyBQRlggIlVzaW5nIFNQUk9NIgorCQkJCQkgICAgIiByZXZpc2lvbiAlZCBwcm92aWRlZCBieSIKKwkJCQkJICAgICIgcGxhdGZvcm0uXG4iLCBzcHJvbS0+cmV2aXNpb24pOwogCQkJCWVyciA9IDA7CiAJCQkJZ290byBvdXRfZnJlZTsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL3NjYW4uYyBiL2RyaXZlcnMvc3NiL3NjYW4uYwppbmRleCAyOTg4NGMwLi40NWU1YmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9zY2FuLmMKKysrIGIvZHJpdmVycy9zc2Ivc2Nhbi5jCkBAIC0yNTgsNyArMjU4LDEwIEBACiAjaWZkZWYgQ09ORklHX1NTQl9QQ0lIT1NUCiAJaWYgKGJ1cy0+YnVzdHlwZSA9PSBTU0JfQlVTVFlQRV9QQ0kpIHsKIAkJaWYgKGJ1cy0+aG9zdF9wY2ktPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0JST0FEQ09NICYmCi0JCSAgICBidXMtPmhvc3RfcGNpLT5kZXZpY2UgPT0gMHg0MzI0KQorCQkgICAgKChidXMtPmhvc3RfcGNpLT5kZXZpY2UgPT0gMHg0MzEzKSB8fAorCQkgICAgIChidXMtPmhvc3RfcGNpLT5kZXZpY2UgPT0gMHg0MzFBKSB8fAorCQkgICAgIChidXMtPmhvc3RfcGNpLT5kZXZpY2UgPT0gMHg0MzIxKSB8fAorCQkgICAgIChidXMtPmhvc3RfcGNpLT5kZXZpY2UgPT0gMHg0MzI0KSkpCiAJCQlyZXR1cm4gMTsKIAl9CiAjZW5kaWYgLyogQ09ORklHX1NTQl9QQ0lIT1NUICovCkBAIC0zMDcsNyArMzEwLDcgQEAKIAl9IGVsc2UgewogCQlpZiAoYnVzLT5idXN0eXBlID09IFNTQl9CVVNUWVBFX1BDSSkgewogCQkJYnVzLT5jaGlwX2lkID0gcGNpZGV2X3RvX2NoaXBpZChidXMtPmhvc3RfcGNpKTsKLQkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGJ1cy0+aG9zdF9wY2ksIFBDSV9SRVZJU0lPTl9JRCwKKwkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGJ1cy0+aG9zdF9wY2ksIFBDSV9SRVZJU0lPTl9JRCwKIAkJCQkJICAgICAmYnVzLT5jaGlwX3Jldik7CiAJCQlidXMtPmNoaXBfcGFja2FnZSA9IDA7CiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9zcHJvbS5jIGIvZHJpdmVycy9zc2Ivc3Byb20uYwppbmRleCA1ZjM0ZDdhLi40NWZmMGUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9zcHJvbS5jCisrKyBiL2RyaXZlcnMvc3NiL3Nwcm9tLmMKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzc2Jfc3Byb20gKmZhbGxiYWNrX3Nwcm9tOworc3RhdGljIGludCgqZ2V0X2ZhbGxiYWNrX3Nwcm9tKShzdHJ1Y3Qgc3NiX2J1cyAqZGV2LCBzdHJ1Y3Qgc3NiX3Nwcm9tICpvdXQpOwogCiAKIHN0YXRpYyBpbnQgc3Byb20yaGV4KGNvbnN0IHUxNiAqc3Byb20sIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sCkBAIC0xNDUsMzYgKzE0NSw0MyBAQAogfQogCiAvKioKLSAqIHNzYl9hcmNoX3NldF9mYWxsYmFja19zcHJvbSAtIFNldCBhIGZhbGxiYWNrIFNQUk9NIGZvciB1c2UgaWYgbm8gU1BST00gaXMgZm91bmQuCisgKiBzc2JfYXJjaF9yZWdpc3Rlcl9mYWxsYmFja19zcHJvbSAtIFJlZ2lzdGVycyBhIG1ldGhvZCBwcm92aWRpbmcgYQorICogZmFsbGJhY2sgU1BST00gaWYgbm8gU1BST00gaXMgZm91bmQuCiAgKgotICogQHNwcm9tOiBUaGUgU1BST00gZGF0YSBzdHJ1Y3R1cmUgdG8gcmVnaXN0ZXIuCisgKiBAc3Byb21fY2FsbGJhY2s6IFRoZSBjYWxsYmFjayBmdW5jdGlvbi4KICAqCi0gKiBXaXRoIHRoaXMgZnVuY3Rpb24gdGhlIGFyY2hpdGVjdHVyZSBpbXBsZW1lbnRhdGlvbiBtYXkgcmVnaXN0ZXIgYSBmYWxsYmFjawotICogU1BST00gZGF0YSBzdHJ1Y3R1cmUuIFRoZSBmYWxsYmFjayBpcyBvbmx5IHVzZWQgZm9yIFBDSSBiYXNlZCBTU0IgZGV2aWNlcywKLSAqIHdoZXJlIG5vIHZhbGlkIFNQUk9NIGNhbiBiZSBmb3VuZCBpbiB0aGUgc2hhZG93IHJlZ2lzdGVycy4KKyAqIFdpdGggdGhpcyBmdW5jdGlvbiB0aGUgYXJjaGl0ZWN0dXJlIGltcGxlbWVudGF0aW9uIG1heSByZWdpc3RlciBhCisgKiBjYWxsYmFjayBoYW5kbGVyIHdoaWNoIGZpbGxzIHRoZSBTUFJPTSBkYXRhIHN0cnVjdHVyZS4gVGhlIGZhbGxiYWNrIGlzCisgKiBvbmx5IHVzZWQgZm9yIFBDSSBiYXNlZCBTU0IgZGV2aWNlcywgd2hlcmUgbm8gdmFsaWQgU1BST00gY2FuIGJlIGZvdW5kCisgKiBpbiB0aGUgc2hhZG93IHJlZ2lzdGVycy4KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCBmb3Igd2VpcmQgYXJjaGl0ZWN0dXJlcyB0aGF0IGhhdmUgYSBoYWxmLWFzc2VkIFNTQiBkZXZpY2UKLSAqIGhhcmR3aXJlZCB0byB0aGVpciBQQ0kgYnVzLgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yIHdlaXJkIGFyY2hpdGVjdHVyZXMgdGhhdCBoYXZlIGEgaGFsZi1hc3NlZAorICogU1NCIGRldmljZSBoYXJkd2lyZWQgdG8gdGhlaXIgUENJIGJ1cy4KICAqCi0gKiBOb3RlIHRoYXQgaXQgZG9lcyBvbmx5IHdvcmsgd2l0aCBQQ0kgYXR0YWNoZWQgU1NCIGRldmljZXMuIFBDTUNJQSBkZXZpY2VzIGN1cnJlbnRseQotICogZG9uJ3QgdXNlIHRoaXMgZmFsbGJhY2suCi0gKiBBcmNoaXRlY3R1cmVzIG11c3QgcHJvdmlkZSB0aGUgU1BST00gZm9yIG5hdGl2ZSBTU0IgZGV2aWNlcyBhbnl3YXksCi0gKiBzbyB0aGUgZmFsbGJhY2sgYWxzbyBpc24ndCB1c2VkIGZvciBuYXRpdmUgZGV2aWNlcy4KKyAqIE5vdGUgdGhhdCBpdCBkb2VzIG9ubHkgd29yayB3aXRoIFBDSSBhdHRhY2hlZCBTU0IgZGV2aWNlcy4gUENNQ0lBCisgKiBkZXZpY2VzIGN1cnJlbnRseSBkb24ndCB1c2UgdGhpcyBmYWxsYmFjay4KKyAqIEFyY2hpdGVjdHVyZXMgbXVzdCBwcm92aWRlIHRoZSBTUFJPTSBmb3IgbmF0aXZlIFNTQiBkZXZpY2VzIGFueXdheSwgc28KKyAqIHRoZSBmYWxsYmFjayBhbHNvIGlzbid0IHVzZWQgZm9yIG5hdGl2ZSBkZXZpY2VzLgogICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGZvciBhcmNoaXRlY3R1cmUgY29kZSwgb25seS4gU28gaXQgaXMgbm90IGV4cG9ydGVkLgorICogVGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgZm9yIGFyY2hpdGVjdHVyZSBjb2RlLCBvbmx5LiBTbyBpdCBpcyBub3QKKyAqIGV4cG9ydGVkLgogICovCi1pbnQgc3NiX2FyY2hfc2V0X2ZhbGxiYWNrX3Nwcm9tKGNvbnN0IHN0cnVjdCBzc2Jfc3Byb20gKnNwcm9tKQoraW50IHNzYl9hcmNoX3JlZ2lzdGVyX2ZhbGxiYWNrX3Nwcm9tKGludCAoKnNwcm9tX2NhbGxiYWNrKShzdHJ1Y3Qgc3NiX2J1cyAqYnVzLAorCQkJCSAgICAgc3RydWN0IHNzYl9zcHJvbSAqb3V0KSkKIHsKLQlpZiAoZmFsbGJhY2tfc3Byb20pCisJaWYgKGdldF9mYWxsYmFja19zcHJvbSkKIAkJcmV0dXJuIC1FRVhJU1Q7Ci0JZmFsbGJhY2tfc3Byb20gPSBzcHJvbTsKKwlnZXRfZmFsbGJhY2tfc3Byb20gPSBzcHJvbV9jYWxsYmFjazsKIAogCXJldHVybiAwOwogfQogCi1jb25zdCBzdHJ1Y3Qgc3NiX3Nwcm9tICpzc2JfZ2V0X2ZhbGxiYWNrX3Nwcm9tKHZvaWQpCitpbnQgc3NiX2ZpbGxfc3Byb21fd2l0aF9mYWxsYmFjayhzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCBzdHJ1Y3Qgc3NiX3Nwcm9tICpvdXQpCiB7Ci0JcmV0dXJuIGZhbGxiYWNrX3Nwcm9tOworCWlmICghZ2V0X2ZhbGxiYWNrX3Nwcm9tKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXJldHVybiBnZXRfZmFsbGJhY2tfc3Byb20oYnVzLCBvdXQpOwogfQogCiAvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL0lzU3Byb21BdmFpbGFibGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL3NzYl9wcml2YXRlLmggYi9kcml2ZXJzL3NzYi9zc2JfcHJpdmF0ZS5oCmluZGV4IDAzMzExMzkuLjc3NjUzMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL3NzYl9wcml2YXRlLmgKKysrIGIvZHJpdmVycy9zc2Ivc3NiX3ByaXZhdGUuaApAQCAtMTcxLDcgKzE3MSw4IEBACiAJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAogCQkJICAgICBpbnQgKCpzcHJvbV9jaGVja19jcmMpKGNvbnN0IHUxNiAqc3Byb20sIHNpemVfdCBzaXplKSwKIAkJCSAgICAgaW50ICgqc3Byb21fd3JpdGUpKHN0cnVjdCBzc2JfYnVzICpidXMsIGNvbnN0IHUxNiAqc3Byb20pKTsKLWV4dGVybiBjb25zdCBzdHJ1Y3Qgc3NiX3Nwcm9tICpzc2JfZ2V0X2ZhbGxiYWNrX3Nwcm9tKHZvaWQpOworZXh0ZXJuIGludCBzc2JfZmlsbF9zcHJvbV93aXRoX2ZhbGxiYWNrKHN0cnVjdCBzc2JfYnVzICpidXMsCisJCQkJCXN0cnVjdCBzc2Jfc3Byb20gKm91dCk7CiAKIAogLyogY29yZS5jICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC1wY21jaWEvZnQxMDAwX2h3LmMgYi9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC1wY21jaWEvZnQxMDAwX2h3LmMKaW5kZXggZWViN2RkNC4uODMwODIyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtcGNtY2lhL2Z0MTAwMF9ody5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXBjbWNpYS9mdDEwMDBfaHcuYwpAQCAtMjI4OCw3ICsyMjg4LDMgQEAKIAlmcmVlX25ldGRldihkZXYpOwogCXJldHVybiBOVUxMOwogfQotCi1FWFBPUlRfU1lNQk9MKGluaXRfZnQxMDAwX2NhcmQpOwotRVhQT1JUX1NZTUJPTChzdG9wX2Z0MTAwMF9jYXJkKTsKLUVYUE9SVF9TWU1CT0woZmxhcmlvbl9mdDEwMDBfY250KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXBjbWNpYS9mdDEwMDBfcHJvYy5jIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtcGNtY2lhL2Z0MTAwMF9wcm9jLmMKaW5kZXggOTM1NjA4ZS4uYmRmYjFhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtcGNtY2lhL2Z0MTAwMF9wcm9jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtcGNtY2lhL2Z0MTAwMF9wcm9jLmMKQEAgLTIxNCw2ICsyMTQsMyBAQAogCXJlbW92ZV9wcm9jX2VudHJ5KEZUMTAwMF9QUk9DLCBpbml0X25ldC5wcm9jX25ldCk7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmZ0MTAwMF9uZXRkZXZfbm90aWZpZXIpOwogfQotCi1FWFBPUlRfU1lNQk9MKGZ0MTAwMEluaXRQcm9jKTsKLUVYUE9SVF9TWU1CT0woZnQxMDAwQ2xlYW51cFByb2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9LY29uZmlnCmluZGV4IDU1MDFlYjkuLmNlOGJlZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgRFJNX1BTQgogCXRyaXN0YXRlICJJbnRlbCBHTUE1MDAgS01TIEZyYW1lYnVmZmVyIgotCWRlcGVuZHMgb24gRFJNICYmIFBDSQorCWRlcGVuZHMgb24gRFJNICYmIFBDSSAmJiBYODYKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCiAgICAgICAgIHNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKICAgICAgICAgc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2NfZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjX2Rydi5jCmluZGV4IDMzOTczNTYuLmFhYTgxODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2NfZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzY19kcnYuYwpAQCAtMzE3LDggKzMxNyw2IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvCT0gbmV0dnNjX2dldF9kcnZpbmZvLAotCS5nZXRfc2cJCT0gZXRodG9vbF9vcF9nZXRfc2csCi0JLnNldF9zZwkJPSBldGh0b29sX29wX3NldF9zZywKIAkuZ2V0X2xpbmsJPSBldGh0b29sX29wX2dldF9saW5rLAogfTsKIApAQCAtNDA2LDYgKzQwNCw3IEBACiAJbmV0LT5uZXRkZXZfb3BzID0gJmRldmljZV9vcHM7CiAKIAkvKiBUT0RPOiBBZGQgR1NPIGFuZCBDaGVja3N1bSBvZmZsb2FkICovCisJbmV0LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfU0c7CiAJbmV0LT5mZWF0dXJlcyA9IE5FVElGX0ZfU0c7CiAKIAlTRVRfRVRIVE9PTF9PUFMobmV0LCAmZXRodG9vbF9vcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF92MV9jb250cm9sLmMgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkX3YxX2NvbnRyb2wuYwppbmRleCA5Y2MxNWMxLi4xZWE4MTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkX3YxX2NvbnRyb2wuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkX3YxX2NvbnRyb2wuYwpAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAogCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8YXNtL21yc3QuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWRfdjJfY29udHJvbC5jIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF92Ml9jb250cm9sLmMKaW5kZXggMjZkODE1YS4uM2M2YjNhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF92Ml9jb250cm9sLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF92Ml9jb250cm9sLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKIAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgImludGVsX3NzdC5oIgogI2luY2x1ZGUgImludGVsbWlkX3NuZF9jb250cm9sLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2xwY19kY29uL29scGNfZGNvbl94b18xLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2xwY19kY29uL29scGNfZGNvbl94b18xLmMKaW5kZXggYjVkMjFmNi4uMjJjMDRlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9vbHBjX2Rjb25feG9fMS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uX3hvXzEuYwpAQCAtMTIsNiArMTIsNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvY3M1NTM1Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL29scGMuaD4KIAogI2luY2x1ZGUgIm9scGNfZGNvbi5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2lub2RlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvaW5vZGUuYwppbmRleCBjOTNlZjIwNy4uYzBmMGFjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2lub2RlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2lub2RlLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdGZzLmg+CiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgIm5ldGZzLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhX3BjaS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGFfcGNpLmMKaW5kZXggYmVmMGJiZC4uZjAxYTUxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGFfcGNpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGFfcGNpLmMKQEAgLTQ0NCw3ICs0NDQsNyBAQAogCQkJcmV0dXJuIChORElTX1NUQVRVU19GQUlMVVJFKTsKIAkJfQogCX0KLQkvKiBEcm9wIG5vdCBVMk0gZnJhbWVzLCBjYW4ndCdzIGRyb3AgaGVyZSBiZWNhdXNlIHdlIHdpbGwgZHJvcCBiZWFjb24gaW4gdGhpcyBjYXNlICovCisJLyogRHJvcCBub3QgVTJNIGZyYW1lcywgY2FuJ3QgZHJvcCBoZXJlIGJlY2F1c2Ugd2Ugd2lsbCBkcm9wIGJlYWNvbiBpbiB0aGlzIGNhc2UgKi8KIAkvKiBJIGFtIGtpbmQgb2YgZG91YnRpbmcgdGhlIFUyTSBiaXQgb3BlcmF0aW9uICovCiAJLyogaWYgKHBSeEQtPlUyTSA9PSAwKSAqLwogCS8qICAgICAgcmV0dXJuKE5ESVNfU1RBVFVTX0ZBSUxVUkUpOyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGFfdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV91c2IuYwppbmRleCA1NjM3ODU3Li44M2E2MmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV91c2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV91c2IuYwpAQCAtODYwLDcgKzg2MCw3IEBACiAJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJyZWNlaXZlZCBwYWNrZXQgdG9vIGxvbmdcbiIpKTsKIAkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7CiAJfQotCS8qIERyb3Agbm90IFUyTSBmcmFtZXMsIGNhbid0J3MgZHJvcCBoZXJlIGJlY2F1c2Ugd2Ugd2lsbCBkcm9wIGJlYWNvbiBpbiB0aGlzIGNhc2UgKi8KKwkvKiBEcm9wIG5vdCBVMk0gZnJhbWVzLCBjYW4ndCBkcm9wIGhlcmUgYmVjYXVzZSB3ZSB3aWxsIGRyb3AgYmVhY29uIGluIHRoaXMgY2FzZSAqLwogCS8qIEkgYW0ga2luZCBvZiBkb3VidGluZyB0aGUgVTJNIGJpdCBvcGVyYXRpb24gKi8KIAkvKiBpZiAocFJ4RC0+VTJNID09IDApICovCiAJLyogICAgICByZXR1cm4oTkRJU19TVEFUVVNfRkFJTFVSRSk7ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL2RlYnVnLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL2RlYnVnLmgKaW5kZXggZTE0MDhiMC4uYWIzMDViZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvZGVidWcuaApAQCAtMjgsNyArMjgsNyBAQAogCiAjZGVmaW5lIFJUU1hfU1RPUiAicnRzX3BzdG9yOiAiCiAKLSNpZiBDT05GSUdfUlRTX1BTVE9SX0RFQlVHCisjaWZkZWYgQ09ORklHX1JUU19QU1RPUl9ERUJVRwogI2RlZmluZSBSVFNYX0RFQlVHUCh4Li4uKSBwcmludGsoS0VSTl9ERUJVRyBSVFNYX1NUT1IgeCkKICNkZWZpbmUgUlRTWF9ERUJVR1BOKHguLi4pIHByaW50ayhLRVJOX0RFQlVHIHgpCiAjZGVmaW5lIFJUU1hfREVCVUdQWCh4Li4uKSBwcmludGsoeCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvbXMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvbXMuYwppbmRleCA4MTBlMTcwLi5kODk3OTVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL21zLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9tcy5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCiAjaW5jbHVkZSAicnRzeC5oIgogI2luY2x1ZGUgInJ0c3hfdHJhbnNwb3J0LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3J0c3hfY2hpcC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9ydHN4X2NoaXAuYwppbmRleCBkMmYxYzcxLi40ZTYwNzgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3J0c3hfY2hpcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvcnRzeF9jaGlwLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKICNpbmNsdWRlICJydHN4LmgiCiAjaW5jbHVkZSAicnRzeF90cmFuc3BvcnQuaCIKQEAgLTEzMTEsMTEgKzEzMTIsMTEgQEAKIAogI2lmZGVmIFNVUFBPUlRfT0NQCiAJaWYgKENIRUNLX0xVTl9NT0RFKGNoaXAsIFNEX01TXzJMVU4pKSB7Ci0JCSNpZiBDT05GSUdfUlRTX1BTVE9SX0RFQlVHCisjaWZkZWYgQ09ORklHX1JUU19QU1RPUl9ERUJVRwogCQlpZiAoY2hpcC0+b2NwX3N0YXQgJiAoU0RfT0NfTk9XIHwgU0RfT0NfRVZFUiB8IE1TX09DX05PVyB8IE1TX09DX0VWRVIpKSB7CiAJCQlSVFNYX0RFQlVHUCgiT3ZlciBjdXJyZW50LCBPQ1BTVEFUIGlzIDB4JXhcbiIsIGNoaXAtPm9jcF9zdGF0KTsKIAkJfQotCQkjZW5kaWYKKyNlbmRpZgogCiAJCWlmIChjaGlwLT5vY3Bfc3RhdCAmIChTRF9PQ19OT1cgfCBTRF9PQ19FVkVSKSkgewogCQkJaWYgKGNoaXAtPmNhcmRfZXhpc3QgJiBTRF9DQVJEKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3J0c3hfc2NzaS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9ydHN4X3Njc2kuYwppbmRleCAyMGMyNDY0Li43ZGUxZmFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3J0c3hfc2NzaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvcnRzeF9zY3NpLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKICNpbmNsdWRlICJydHN4LmgiCiAjaW5jbHVkZSAicnRzeF90cmFuc3BvcnQuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3Ivc2QuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3Ivc2QuYwppbmRleCA4ZDA2NmJkLi5iMTI3N2E2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3NkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9zZC5jCkBAIC05MDksNyArOTA5LDcgQEAKIAkJUlRTWF9XUklURV9SRUcoY2hpcCwgU0RfVlBDTEswX0NUTCwgUEhBU0VfTk9UX1JFU0VULCBQSEFTRV9OT1RfUkVTRVQpOwogCQlSVFNYX1dSSVRFX1JFRyhjaGlwLCBDTEtfQ1RMLCBDSEFOR0VfQ0xLLCAwKTsKIAl9IGVsc2UgewotI2lmIENPTkZJR19SVFNfUFNUT1JfREVCVUcKKyNpZmRlZiBDT05GSUdfUlRTX1BTVE9SX0RFQlVHCiAJCXJ0c3hfcmVhZF9yZWdpc3RlcihjaGlwLCBTRF9WUF9DVEwsICZ2YWwpOwogCQlSVFNYX0RFQlVHUCgiU0RfVlBfQ1RMOiAweCV4XG4iLCB2YWwpOwogCQlydHN4X3JlYWRfcmVnaXN0ZXIoY2hpcCwgU0RfRENNUFNfQ1RMLCAmdmFsKTsKQEAgLTk1OCw3ICs5NTgsNyBAQAogCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKIAogRmFpbDoKLSNpZiBDT05GSUdfUlRTX1BTVE9SX0RFQlVHCisjaWZkZWYgQ09ORklHX1JUU19QU1RPUl9ERUJVRwogCXJ0c3hfcmVhZF9yZWdpc3RlcihjaGlwLCBTRF9WUF9DVEwsICZ2YWwpOwogCVJUU1hfREVCVUdQKCJTRF9WUF9DVEw6IDB4JXhcbiIsIHZhbCk7CiAJcnRzeF9yZWFkX3JlZ2lzdGVyKGNoaXAsIFNEX0RDTVBTX0NUTCwgJnZhbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3RyYWNlLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3RyYWNlLmgKaW5kZXggMmM2NjhiYS4uYmM4M2I0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci90cmFjZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvdHJhY2UuaApAQCAtODIsNyArODIsNyBAQAogI2RlZmluZSBUUkFDRV9HT1RPKGNoaXAsIGxhYmVsKQlnb3RvIGxhYmVsCiAjZW5kaWYKIAotI2lmIENPTkZJR19SVFNfUFNUT1JfREVCVUcKKyNpZmRlZiBDT05GSUdfUlRTX1BTVE9SX0RFQlVHCiBzdGF0aWMgaW5saW5lIHZvaWQgcnRzeF9kdW1wKHU4ICpidWYsIGludCBidWZfbGVuKQogewogCWludCBpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci94ZC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci94ZC5jCmluZGV4IDdiY2Q0NjguLjlmM2FkZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IveGQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3hkLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKICNpbmNsdWRlICJydHN4LmgiCiAjaW5jbHVkZSAicnRzeF90cmFuc3BvcnQuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL0tjb25maWcKaW5kZXggMmNmNzdjOS4uMDNkY2FjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL0tjb25maWcKQEAgLTIsNiArMiw3IEBACiAJdHJpc3RhdGUgIlNvZnRsb2dpYyA2eDEwIE1QRUcgY29kZWMgY2FyZHMiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgVklERU9fREVWICYmIFNORCAmJiBJMkMKIAlzZWxlY3QgVklERU9CVUZfRE1BX1NHCisJc2VsZWN0IFNORF9QQ00KIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgU29mdGxvZ2ljIGJhc2VkIE1QRUctNCBhbmQgaC4yNjQgY29kZWMKIAkgIGNvZGVjIGNhcmRzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvZmZzcG9ydC5jIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvZmZzcG9ydC5jCmluZGV4IDIwZGFlNzMuLjUwNjU0N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2Zmc3BvcnQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9mZnNwb3J0LmMKQEAgLTY1Myw3ICs2NTMsNyBAQAogCX0KIAlkZXYtPnF1ZXVlLT5xdWV1ZWRhdGEgPSBkZXY7CiAKLQkvKiBBcyBMaW51eCBibG9jayBsYXllciBkb2VzJ3Qgc3VwcG9ydCA+NEtCIGhhcmR3YXJlIHNlY3RvciwgICovCisJLyogQXMgTGludXggYmxvY2sgbGF5ZXIgZG9lc24ndCBzdXBwb3J0ID40S0IgaGFyZHdhcmUgc2VjdG9yLCAgKi8KIAkvKiBIZXJlIHdlIGZvcmNlIHJlcG9ydCA1MTIgYnl0ZSBoYXJkd2FyZSBzZWN0b3Igc2l6ZSB0byBLZXJuZWwgKi8KIAlibGtfcXVldWVfbG9naWNhbF9ibG9ja19zaXplKGRldi0+cXVldWUsIDUxMik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL2Nsb2FkLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9jbG9hZC5jCmluZGV4IDVjZWNkMjMuLmZlMWVmMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL2Nsb2FkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvY2xvYWQuYwpAQCAtNzE4LDcgKzcxOCw3IEBACiAJICogYXMgYSB0ZW1wb3JhcnkgZm9yIC5kbGx2aWV3IHJlY29yZCBjb25zdHJ1Y3Rpb24uCiAJICogQWxsb2NhdGUgc3RvcmFnZSBmb3IgdGhlIHdob2xlIHRhYmxlLiAgQWRkIDEgdG8gdGhlIHNlY3Rpb24gY291bnQKIAkgKiBpbiBjYXNlIGEgdHJhbXBvbGluZSBzZWN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGFzIHdlbGwgYXMgdGhlCi0JICogc2l6ZSBvZiB0aGUgdHJhbXBvbGluZSBzZWN0aW9uIG5hbWUgc28gRExMVmlldyBkb2VzJ3QgZ2V0IGxvc3QuCisJICogc2l6ZSBvZiB0aGUgdHJhbXBvbGluZSBzZWN0aW9uIG5hbWUgc28gRExMVmlldyBkb2Vzbid0IGdldCBsb3N0LgogCSAqLwogCiAJc2l6ID0gc3ltX2NvdW50ICogc2l6ZW9mKHN0cnVjdCBsb2NhbF9zeW1ib2wpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3R0eS9zcGVjaWFsaXguYyBiL2RyaXZlcnMvc3RhZ2luZy90dHkvc3BlY2lhbGl4LmMKaW5kZXggY2IyNGM2ZC4uNWMzNTk4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3R0eS9zcGVjaWFsaXguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdHR5L3NwZWNpYWxpeC5jCkBAIC05NzgsNyArOTc4LDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYnAtPmxvY2ssIGZsYWdzKTsKIAlzeF9vdXQoYnAsIENEMTg2eF9DQVIsIHBvcnRfTm8ocG9ydCkpOwogCi0JLyogVGhlIFNwZWNpYWxpeCBib2FyZCBkb2VzJ3QgaW1wbGVtZW50IHRoZSBSVFMgbGluZXMuCisJLyogVGhlIFNwZWNpYWxpeCBib2FyZCBkb2Vzbid0IGltcGxlbWVudCB0aGUgUlRTIGxpbmVzLgogCSAgIFRoZXkgYXJlIHVzZWQgdG8gc2V0IHRoZSBJUlEgbGV2ZWwuIERvbid0IHRvdWNoIHRoZW0uICovCiAJaWYgKHN4X2NydHNjdHModHR5KSkKIAkJcG9ydC0+TVNWUiA9IE1TVlJfRFRSIHwgKHN4X2luKGJwLCBDRDE4NnhfTVNWUikgJiBNU1ZSX1JUUyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9oY2QuYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX2hjZC5jCmluZGV4IDBmMDJhNGIuLjRmNGYxMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX2hjZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX2hjZC5jCkBAIC04NzYsOCArODc2LDEwIEBACiAJfQogCiAJLyoga2lsbCB0aHJlYWRzIHJlbGF0ZWQgdG8gdGhpcyBzZGV2LCBpZiB2LmMuIGV4aXN0cyAqLwotCWt0aHJlYWRfc3RvcCh2ZGV2LT51ZC50Y3BfcngpOwotCWt0aHJlYWRfc3RvcCh2ZGV2LT51ZC50Y3BfdHgpOworCWlmICh2ZGV2LT51ZC50Y3BfcngpCisJCWt0aHJlYWRfc3RvcCh2ZGV2LT51ZC50Y3BfcngpOworCWlmICh2ZGV2LT51ZC50Y3BfdHgpCisJCWt0aHJlYWRfc3RvcCh2ZGV2LT51ZC50Y3BfdHgpOwogCiAJdXNiaXBfdWluZm8oInN0b3AgdGhyZWFkc1xuIik7CiAKQEAgLTk0OSw5ICs5NTEsNiBAQAogewogCW1lbXNldCh2ZGV2LCAwLCBzaXplb2YoKnZkZXYpKTsKIAotCXZkZXYtPnVkLnRjcF9yeCA9IGt0aHJlYWRfY3JlYXRlKHZoY2lfcnhfbG9vcCwgJnZkZXYtPnVkLCAidmhjaV9yeCIpOwotCXZkZXYtPnVkLnRjcF90eCA9IGt0aHJlYWRfY3JlYXRlKHZoY2lfdHhfbG9vcCwgJnZkZXYtPnVkLCAidmhjaV90eCIpOwotCiAJdmRldi0+dWQuc2lkZSAgID0gVVNCSVBfVkhDSTsKIAl2ZGV2LT51ZC5zdGF0dXMgPSBWREVWX1NUX05VTEw7CiAJLyogdmRldi0+dWQubG9jayAgID0gU1BJTl9MT0NLX1VOTE9DS0VEOyAqLwpAQCAtMTEzOSw3ICsxMTM4LDcgQEAKIAkJdXNiaXBfdWVycigiY3JlYXRlIGhjZCBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0KKwloY2QtPmhhc190dCA9IDE7CiAKIAkvKiB0aGlzIGlzIHByaXZhdGUgZGF0YSBmb3IgdmhjaV9oY2QgKi8KIAl0aGVfY29udHJvbGxlciA9IGhjZF90b192aGNpKGhjZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9zeXNmcy5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfc3lzZnMuYwppbmRleCAzZjI0NTlmLi5lMmRhZGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3N5c2ZzLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJ2aGNpLmgiCiAKICNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KIAogLyogVE9ETzogcmVmaW5lIGxvY2tpbmcgPyovCiAKQEAgLTIyMCwxMyArMjIxLDEzIEBACiAJdmRldi0+dWQudGNwX3NvY2tldCA9IHNvY2tldDsKIAl2ZGV2LT51ZC5zdGF0dXMgICAgID0gVkRFVl9TVF9OT1RBU1NJR05FRDsKIAotCXdha2VfdXBfcHJvY2Vzcyh2ZGV2LT51ZC50Y3BfcngpOwotCXdha2VfdXBfcHJvY2Vzcyh2ZGV2LT51ZC50Y3BfdHgpOwotCiAJc3Bpbl91bmxvY2soJnZkZXYtPnVkLmxvY2spOwogCXNwaW5fdW5sb2NrKCZ0aGVfY29udHJvbGxlci0+bG9jayk7CiAJLyogZW5kIHRoZSBsb2NrICovCiAKKwl2ZGV2LT51ZC50Y3BfcnggPSBrdGhyZWFkX3J1bih2aGNpX3J4X2xvb3AsICZ2ZGV2LT51ZCwgInZoY2lfcngiKTsKKwl2ZGV2LT51ZC50Y3BfdHggPSBrdGhyZWFkX3J1bih2aGNpX3R4X2xvb3AsICZ2ZGV2LT51ZCwgInZoY2lfdHgiKTsKKwogCXJoX3BvcnRfY29ubmVjdChyaHBvcnQsIHNwZWVkKTsKIAogCXJldHVybiBjb3VudDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2NmZzgwMjExLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9jZmc4MDIxMS5jCmluZGV4IDZhNzFmNTIuLjc2Mzc4MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2NmZzgwMjExLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvY2ZnODAyMTEuYwpAQCAtMjczLDcgKzI3Myw3IEBACiB9CiAKIGludCBwcmlzbTJfc2V0X2RlZmF1bHRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICB1OCBrZXlfaW5kZXgpCisJCQkgICB1OCBrZXlfaW5kZXgsIGJvb2wgdW5pY2FzdCwgYm9vbCBtdWx0aWNhc3QpCiB7CiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC9LY29uZmlnIGIvZHJpdmVycy90YXJnZXQvS2NvbmZpZwppbmRleCA5ZWYyZGJiLi41Y2IwZjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdGFyZ2V0L0tjb25maWcKQEAgLTMwLDUgKzMwLDYgQEAKIAlwYXNzdGhyb3VnaCBhY2Nlc3MgdG8gTGludXgvU0NTSSBkZXZpY2UKIAogc291cmNlICJkcml2ZXJzL3RhcmdldC9sb29wYmFjay9LY29uZmlnIgorc291cmNlICJkcml2ZXJzL3RhcmdldC90Y21fZmMvS2NvbmZpZyIKIAogZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L01ha2VmaWxlIGIvZHJpdmVycy90YXJnZXQvTWFrZWZpbGUKaW5kZXggMTE3OGJiZi4uMjFkZjgwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy90YXJnZXQvTWFrZWZpbGUKQEAgLTI0LDMgKzI0LDUgQEAKIAogIyBGYWJyaWMgbW9kdWxlcwogb2JqLSQoQ09ORklHX0xPT1BCQUNLX1RBUkdFVCkJKz0gbG9vcGJhY2svCisKK29iai0kKENPTkZJR19UQ01fRkMpCQkrPSB0Y21fZmMvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90Y21fZmMvS2NvbmZpZyBiL2RyaXZlcnMvdGFyZ2V0L3RjbV9mYy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwY2FmNDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3RhcmdldC90Y21fZmMvS2NvbmZpZwpAQCAtMCwwICsxLDUgQEAKK2NvbmZpZyBUQ01fRkMKKwl0cmlzdGF0ZSAiVENNX0ZDIGZhYnJpYyBQbHVnaW4iCisJZGVwZW5kcyBvbiBMSUJGQworCWhlbHAKKwlTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUgVENNIEZDIHBsdWdpbiBmb3IgYWNjZXNzaW5nIEZDIGZhYnJpY3MgaW4gVENNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90Y21fZmMvTWFrZWZpbGUgYi9kcml2ZXJzL3RhcmdldC90Y21fZmMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E1YzJiNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RjbV9mYy9NYWtlZmlsZQpAQCAtMCwwICsxLDE1IEBACitFWFRSQV9DRkxBR1MgKz0gLUkkKHNyY3RyZWUpL2RyaXZlcnMvdGFyZ2V0LyBcCisJCS1JJChzcmN0cmVlKS9kcml2ZXJzL3Njc2kvIFwKKwkJLUkkKHNyY3RyZWUpL2luY2x1ZGUvc2NzaS8gXAorCQktSSQoc3JjdHJlZSkvZHJpdmVycy90YXJnZXQvdGNtX2ZjLworCit0Y21fZmMteSArPQl0ZmNfY21kLm8gXAorCQl0ZmNfY29uZi5vIFwKKwkJdGZjX2lvLm8gXAorCQl0ZmNfc2Vzcy5vCisKK29iai0kKENPTkZJR19UQ01fRkMpCSs9IHRjbV9mYy5vCisKK2lmZGVmIENPTkZJR0ZTX1RDTV9GQ19ERUJVRworRVhUUkFfQ0ZMQUdTCSs9IC1EVENNX0ZDX0RFQlVHCitlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGNtX2ZjL3RjbV9mYy5oIGIvZHJpdmVycy90YXJnZXQvdGNtX2ZjL3RjbV9mYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZmZmMzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3RhcmdldC90Y21fZmMvdGNtX2ZjLmgKQEAgLTAsMCArMSwyMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKyNpZm5kZWYgX19UQ01fRkNfSF9fCisjZGVmaW5lIF9fVENNX0ZDX0hfXworCisjZGVmaW5lIEZUX1ZFUlNJT04gIjAuMyIKKworI2RlZmluZSBGVF9OQU1FTEVOIDMyCQkvKiBsZW5ndGggb2YgQVNDSUkgV1dQTnMgaW5jbHVkaW5nIHBhZCAqLworI2RlZmluZSBGVF9UUEdfTkFNRUxFTiAzMgkvKiBtYXggbGVuZ3RoIG9mIFRQRyBuYW1lICovCisjZGVmaW5lIEZUX0xVTl9OQU1FTEVOIDMyCS8qIG1heCBsZW5ndGggb2YgTFVOIG5hbWUgKi8KKworLyoKKyAqIERlYnVnIG9wdGlvbnMuCisgKi8KKyNkZWZpbmUgRlRfREVCVUdfQ09ORgkweDAxCS8qIGNvbmZpZ3VyYXRpb24gbWVzc2FnZXMgKi8KKyNkZWZpbmUJRlRfREVCVUdfU0VTUwkweDAyCS8qIHNlc3Npb24gbWVzc2FnZXMgKi8KKyNkZWZpbmUJRlRfREVCVUdfVE0JMHgwNAkvKiBUTSBvcGVyYXRpb25zICovCisjZGVmaW5lCUZUX0RFQlVHX0lPCTB4MDgJLyogSS9PIGNvbW1hbmRzICovCisjZGVmaW5lCUZUX0RFQlVHX0RBVEEJMHgxMAkvKiBEYXRhIHRyYW5zZmVyICovCisKK2V4dGVybiB1bnNpZ25lZCBpbnQgZnRfZGVidWdfbG9nZ2luZzsJLyogZGVidWcgb3B0aW9ucyAqLworCisjZGVmaW5lIEZUX0RFQlVHKG1hc2ssIGZtdCwgYXJncy4uLikJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmIChmdF9kZWJ1Z19sb2dnaW5nICYgKG1hc2spKQkJCQlcCisJCQlwcmludGsoS0VSTl9JTkZPICJ0Y21fZmM6ICVzOiAiIGZtdCwJCVwKKwkJCQlfX2Z1bmNfXywgIyNhcmdzKTsJCQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZQlGVF9DT05GX0RCRyhmbXQsIGFyZ3MuLi4pCUZUX0RFQlVHKEZUX0RFQlVHX0NPTkYsIGZtdCwgIyNhcmdzKQorI2RlZmluZQlGVF9TRVNTX0RCRyhmbXQsIGFyZ3MuLi4pCUZUX0RFQlVHKEZUX0RFQlVHX1NFU1MsIGZtdCwgIyNhcmdzKQorI2RlZmluZQlGVF9UTV9EQkcoZm10LCBhcmdzLi4uKQkJRlRfREVCVUcoRlRfREVCVUdfVE0sIGZtdCwgIyNhcmdzKQorI2RlZmluZQlGVF9JT19EQkcoZm10LCBhcmdzLi4uKQkJRlRfREVCVUcoRlRfREVCVUdfSU8sIGZtdCwgIyNhcmdzKQorI2RlZmluZQlGVF9EQVRBX0RCRyhmbXQsIGFyZ3MuLi4pCUZUX0RFQlVHKEZUX0RFQlVHX0RBVEEsIGZtdCwgIyNhcmdzKQorCitzdHJ1Y3QgZnRfdHJhbnNwb3J0X2lkIHsKKwlfX3U4CWZvcm1hdDsKKwlfX3U4CV9fcmVzdmQxWzddOworCV9fdTgJd3dwbls4XTsKKwlfX3U4CV9fcmVzdmQyWzhdOworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisKKy8qCisgKiBTZXNzaW9uIChyZW1vdGUgcG9ydCkuCisgKi8KK3N0cnVjdCBmdF9zZXNzIHsKKwl1MzIgcG9ydF9pZDsJCQkvKiBmb3IgaGFzaCBsb29rdXAgdXNlIG9ubHkgKi8KKwl1MzIgcGFyYW1zOworCXUxNiBtYXhfZnJhbWU7CQkJLyogbWF4aW11bSBmcmFtZSBzaXplICovCisJdTY0IHBvcnRfbmFtZTsJCQkvKiBwb3J0IG5hbWUgZm9yIHRyYW5zcG9ydCBJRCAqLworCXN0cnVjdCBmdF90cG9ydCAqdHBvcnQ7CisJc3RydWN0IHNlX3Nlc3Npb24gKnNlX3Nlc3M7CisJc3RydWN0IGhsaXN0X25vZGUgaGFzaDsJCS8qIGxpbmthZ2UgaW4gZnRfc2Vzc19oYXNoIHRhYmxlICovCisJc3RydWN0IHJjdV9oZWFkIHJjdTsKKwlzdHJ1Y3Qga3JlZiBrcmVmOwkJLyogcmVmIGZvciBoYXNoIGFuZCBvdXRzdGFuZGluZyBJL09zICovCit9OworCisvKgorICogSGFzaCB0YWJsZSBvZiBzZXNzaW9ucyBwZXIgbG9jYWwgcG9ydC4KKyAqIEhhc2ggbG9va3VwIGJ5IHJlbW90ZSBwb3J0IEZDX0lELgorICovCisjZGVmaW5lCUZUX1NFU1NfSEFTSF9CSVRTCTYKKyNkZWZpbmUJRlRfU0VTU19IQVNIX1NJWkUJKDEgPDwgRlRfU0VTU19IQVNIX0JJVFMpCisKKy8qCisgKiBQZXIgbG9jYWwgcG9ydCBkYXRhLgorICogVGhpcyBpcyBjcmVhdGVkIG9ubHkgYWZ0ZXIgYSBUUEcgZXhpc3RzIHRoYXQgYWxsb3dzIHRhcmdldCBmdW5jdGlvbgorICogZm9yIHRoZSBsb2NhbCBwb3J0LiAgSWYgdGhlIFRQRyBleGlzdHMsIHRoaXMgaXMgYWxsb2NhdGVkIHdoZW4KKyAqIHdlJ3JlIG5vdGlmaWVkIHRoYXQgdGhlIGxvY2FsIHBvcnQgaGFzIGJlZW4gY3JlYXRlZCwgb3Igd2hlbgorICogdGhlIGZpcnN0IFBSTEkgcHJvdmlkZXIgY2FsbGJhY2sgaXMgcmVjZWl2ZWQuCisgKi8KK3N0cnVjdCBmdF90cG9ydCB7CisJc3RydWN0IGZjX2xwb3J0ICpscG9ydDsKKwlzdHJ1Y3QgZnRfdHBnICp0cGc7CQkvKiBOVUxMIGlmIFRQRyBkZWxldGVkIGJlZm9yZSB0cG9ydCAqLworCXUzMglzZXNzX2NvdW50OwkJLyogbnVtYmVyIG9mIHNlc3Npb25zIGluIGhhc2ggKi8KKwlzdHJ1Y3QgcmN1X2hlYWQgcmN1OworCXN0cnVjdCBobGlzdF9oZWFkIGhhc2hbRlRfU0VTU19IQVNIX1NJWkVdOwkvKiBsaXN0IG9mIHNlc3Npb25zICovCit9OworCisvKgorICogTm9kZSBJRCBhbmQgYXV0aGVudGljYXRpb24uCisgKi8KK3N0cnVjdCBmdF9ub2RlX2F1dGggeworCXU2NAlwb3J0X25hbWU7CisJdTY0CW5vZGVfbmFtZTsKK307CisKKy8qCisgKiBOb2RlIEFDTCBmb3IgRkMgcmVtb3RlIHBvcnQgc2Vzc2lvbi4KKyAqLworc3RydWN0IGZ0X25vZGVfYWNsIHsKKwlzdHJ1Y3QgZnRfbm9kZV9hdXRoIG5vZGVfYXV0aDsKKwlzdHJ1Y3Qgc2Vfbm9kZV9hY2wgc2Vfbm9kZV9hY2w7Cit9OworCitzdHJ1Y3QgZnRfbHVuIHsKKwl1MzIgaW5kZXg7CisJY2hhciBuYW1lW0ZUX0xVTl9OQU1FTEVOXTsKK307CisKKy8qCisgKiBUYXJnZXQgcG9ydGFsIGdyb3VwIChsb2NhbCBwb3J0KS4KKyAqLworc3RydWN0IGZ0X3RwZyB7CisJdTMyIGluZGV4OworCXN0cnVjdCBmdF9scG9ydF9hY2wgKmxwb3J0X2FjbDsKKwlzdHJ1Y3QgZnRfdHBvcnQgKnRwb3J0OwkJLyogYWN0aXZlIHRwb3J0IG9yIE5VTEwgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CQkvKiBsaW5rYWdlIGluIGZ0X2xwb3J0X2FjbCB0cGdfbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQgbHVuX2xpc3Q7CS8qIGhlYWQgb2YgTFVOcyAqLworCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgc2VfdHBnOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGhyZWFkOwkvKiBwcm9jZXNzaW5nIHRocmVhZCAqLworCXN0cnVjdCBzZV9xdWV1ZV9vYmogcW9iajsJLyogcXVldWUgZm9yIHByb2Nlc3NpbmcgdGhyZWFkICovCit9OworCitzdHJ1Y3QgZnRfbHBvcnRfYWNsIHsKKwl1NjQgd3dwbjsKKwljaGFyIG5hbWVbRlRfTkFNRUxFTl07CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBsaXN0X2hlYWQgdHBnX2xpc3Q7CisJc3RydWN0IHNlX3d3biBmY19scG9ydF93d247Cit9OworCitlbnVtIGZ0X2NtZF9zdGF0ZSB7CisJRkNfQ01EX1NUX05FVyA9IDAsCisJRkNfQ01EX1NUX1JFSgorfTsKKworLyoKKyAqIENvbW1hbmRzCisgKi8KK3N0cnVjdCBmdF9jbWQgeworCWVudW0gZnRfY21kX3N0YXRlIHN0YXRlOworCXUxNiBsdW47CQkJLyogTFVOIGZyb20gcmVxdWVzdCAqLworCXN0cnVjdCBmdF9zZXNzICpzZXNzOwkJLyogc2Vzc2lvbiBoZWxkIGZvciBjbWQgKi8KKwlzdHJ1Y3QgZmNfc2VxICpzZXE7CQkvKiBzZXF1ZW5jZSBpbiBleGNoYW5nZSBtZ3IgKi8KKwlzdHJ1Y3Qgc2VfY21kIHNlX2NtZDsJCS8qIExvY2FsIFRDTSBJL08gZGVzY3JpcHRvciAqLworCXN0cnVjdCBmY19mcmFtZSAqcmVxX2ZyYW1lOworCXVuc2lnbmVkIGNoYXIgKmNkYjsJCS8qIHBvaW50ZXIgdG8gQ0RCIGluc2lkZSBmcmFtZSAqLworCXUzMiB3cml0ZV9kYXRhX2xlbjsJCS8qIGRhdGEgcmVjZWl2ZWQgb24gd3JpdGVzICovCisJc3RydWN0IHNlX3F1ZXVlX3JlcSBzZV9yZXE7CisJLyogTG9jYWwgc2Vuc2UgYnVmZmVyICovCisJdW5zaWduZWQgY2hhciBmdF9zZW5zZV9idWZmZXJbVFJBTlNQT1JUX1NFTlNFX0JVRkZFUl07CisJdTMyIHdhc19kZHBfc2V0dXA6MTsJCS8qIFNldCBvbmx5IGlmIGRkcCBpcyBzZXR1cCAqLworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CQkvKiBTZXQgb25seSBpZiBERFAgaXMgc2V0dXAgKi8KKwl1MzIgc2dfY250OwkJCS8qIE5vLiBvZiBpdGVtIGluIHNjYXR0ZXJsaXN0ICovCit9OworCitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBmdF9scG9ydF9saXN0OworZXh0ZXJuIHN0cnVjdCBtdXRleCBmdF9scG9ydF9sb2NrOworZXh0ZXJuIHN0cnVjdCBmYzRfcHJvdiBmdF9wcm92OworZXh0ZXJuIHN0cnVjdCB0YXJnZXRfZmFicmljX2NvbmZpZ2ZzICpmdF9jb25maWdmczsKKworLyoKKyAqIEZhYnJpYyBtZXRob2RzLgorICovCisKKy8qCisgKiBTZXNzaW9uIG9wcy4KKyAqLwordm9pZCBmdF9zZXNzX3B1dChzdHJ1Y3QgZnRfc2VzcyAqKTsKK2ludCBmdF9zZXNzX3NodXRkb3duKHN0cnVjdCBzZV9zZXNzaW9uICopOwordm9pZCBmdF9zZXNzX2Nsb3NlKHN0cnVjdCBzZV9zZXNzaW9uICopOwordm9pZCBmdF9zZXNzX3N0b3Aoc3RydWN0IHNlX3Nlc3Npb24gKiwgaW50LCBpbnQpOworaW50IGZ0X3Nlc3NfbG9nZ2VkX2luKHN0cnVjdCBzZV9zZXNzaW9uICopOwordTMyIGZ0X3Nlc3NfZ2V0X2luZGV4KHN0cnVjdCBzZV9zZXNzaW9uICopOwordTMyIGZ0X3Nlc3NfZ2V0X3BvcnRfbmFtZShzdHJ1Y3Qgc2Vfc2Vzc2lvbiAqLCB1bnNpZ25lZCBjaGFyICosIHUzMik7Cit2b2lkIGZ0X3Nlc3Nfc2V0X2VybDAoc3RydWN0IHNlX3Nlc3Npb24gKik7CisKK3ZvaWQgZnRfbHBvcnRfYWRkKHN0cnVjdCBmY19scG9ydCAqLCB2b2lkICopOwordm9pZCBmdF9scG9ydF9kZWwoc3RydWN0IGZjX2xwb3J0ICosIHZvaWQgKik7CitpbnQgZnRfbHBvcnRfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nLCB2b2lkICopOworCisvKgorICogSU8gbWV0aG9kcy4KKyAqLwordm9pZCBmdF9jaGVja19zdG9wX2ZyZWUoc3RydWN0IHNlX2NtZCAqKTsKK3ZvaWQgZnRfcmVsZWFzZV9jbWQoc3RydWN0IHNlX2NtZCAqKTsKK2ludCBmdF9xdWV1ZV9zdGF0dXMoc3RydWN0IHNlX2NtZCAqKTsKK2ludCBmdF9xdWV1ZV9kYXRhX2luKHN0cnVjdCBzZV9jbWQgKik7CitpbnQgZnRfd3JpdGVfcGVuZGluZyhzdHJ1Y3Qgc2VfY21kICopOworaW50IGZ0X3dyaXRlX3BlbmRpbmdfc3RhdHVzKHN0cnVjdCBzZV9jbWQgKik7Cit1MzIgZnRfZ2V0X3Rhc2tfdGFnKHN0cnVjdCBzZV9jbWQgKik7CitpbnQgZnRfZ2V0X2NtZF9zdGF0ZShzdHJ1Y3Qgc2VfY21kICopOwordm9pZCBmdF9uZXdfY21kX2ZhaWx1cmUoc3RydWN0IHNlX2NtZCAqKTsKK2ludCBmdF9xdWV1ZV90bV9yZXNwKHN0cnVjdCBzZV9jbWQgKik7CitpbnQgZnRfaXNfc3RhdGVfcmVtb3ZlKHN0cnVjdCBzZV9jbWQgKik7CisKKy8qCisgKiBvdGhlciBpbnRlcm5hbCBmdW5jdGlvbnMuCisgKi8KK2ludCBmdF90aHJlYWQodm9pZCAqKTsKK3ZvaWQgZnRfcmVjdl9yZXEoc3RydWN0IGZ0X3Nlc3MgKiwgc3RydWN0IGZjX2ZyYW1lICopOworc3RydWN0IGZ0X3RwZyAqZnRfbHBvcnRfZmluZF90cGcoc3RydWN0IGZjX2xwb3J0ICopOworc3RydWN0IGZ0X25vZGVfYWNsICpmdF9hY2xfZ2V0KHN0cnVjdCBmdF90cGcgKiwgc3RydWN0IGZjX3Jwb3J0X3ByaXYgKik7CisKK3ZvaWQgZnRfcmVjdl93cml0ZV9kYXRhKHN0cnVjdCBmdF9jbWQgKiwgc3RydWN0IGZjX2ZyYW1lICopOwordm9pZCBmdF9kdW1wX2NtZChzdHJ1Y3QgZnRfY21kICosIGNvbnN0IGNoYXIgKmNhbGxlcik7CisKK3NzaXplX3QgZnRfZm9ybWF0X3d3bihjaGFyICosIHNpemVfdCwgdTY0KTsKKworI2VuZGlmIC8qIF9fVENNX0ZDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGNtX2ZjL3RmY19jbWQuYyBiL2RyaXZlcnMvdGFyZ2V0L3RjbV9mYy90ZmNfY21kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDllNTE3NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RjbV9mYy90ZmNfY21kLmMKQEAgLTAsMCArMSw2OTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworLyogWFhYIFRCRCBzb21lIGluY2x1ZGVzIG1heSBiZSBleHRyYW5lb3VzICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxnZW5lcmF0ZWQvdXRzcmVsZWFzZS5oPgorI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZ2ZzLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVkZSA8c2NzaS9saWJmYy5oPgorI2luY2x1ZGUgPHNjc2kvZmNfZW5jb2RlLmg+CisKKyNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfYmFzZS5oPgorI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV90cmFuc3BvcnQuaD4KKyNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfZmFicmljX29wcy5oPgorI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV9kZXZpY2UuaD4KKyNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfdHBnLmg+CisjaW5jbHVkZSA8dGFyZ2V0L3RhcmdldF9jb3JlX2NvbmZpZ2ZzLmg+CisjaW5jbHVkZSA8dGFyZ2V0L3RhcmdldF9jb3JlX2Jhc2UuaD4KKyNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfdG1yLmg+CisjaW5jbHVkZSA8dGFyZ2V0L2NvbmZpZ2ZzX21hY3Jvcy5oPgorCisjaW5jbHVkZSAidGNtX2ZjLmgiCisKKy8qCisgKiBEdW1wIGNtZCBzdGF0ZSBmb3IgZGVidWdnaW5nLgorICovCit2b2lkIGZ0X2R1bXBfY21kKHN0cnVjdCBmdF9jbWQgKmNtZCwgY29uc3QgY2hhciAqY2FsbGVyKQoreworCXN0cnVjdCBmY19leGNoICplcDsKKwlzdHJ1Y3QgZmNfc2VxICpzcDsKKwlzdHJ1Y3Qgc2VfY21kICpzZV9jbWQ7CisJc3RydWN0IHNlX21lbSAqbWVtOworCXN0cnVjdCBzZV90cmFuc3BvcnRfdGFzayAqdGFzazsKKworCWlmICghKGZ0X2RlYnVnX2xvZ2dpbmcgJiBGVF9ERUJVR19JTykpCisJCXJldHVybjsKKworCXNlX2NtZCA9ICZjbWQtPnNlX2NtZDsKKwlwcmludGsoS0VSTl9JTkZPICIlczogY21kICVwIHN0YXRlICVkIHNlc3MgJXAgc2VxICVwIHNlX2NtZCAlcFxuIiwKKwkJY2FsbGVyLCBjbWQsIGNtZC0+c3RhdGUsIGNtZC0+c2VzcywgY21kLT5zZXEsIHNlX2NtZCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNtZCAlcCBjZGIgJXBcbiIsCisJCWNhbGxlciwgY21kLCBjbWQtPmNkYik7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNtZCAlcCBsdW4gJWRcbiIsIGNhbGxlciwgY21kLCBjbWQtPmx1bik7CisKKwl0YXNrID0gVF9UQVNLKHNlX2NtZCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNtZCAlcCB0YXNrICVwIHNlX251bSAldSBidWYgJXAgbGVuICV1IHNlX2NtZF9mbGFncyA8MHgleD5cbiIsCisJICAgICAgIGNhbGxlciwgY21kLCB0YXNrLCB0YXNrLT50X3Rhc2tzX3NlX251bSwKKwkgICAgICAgdGFzay0+dF90YXNrX2J1Ziwgc2VfY21kLT5kYXRhX2xlbmd0aCwgc2VfY21kLT5zZV9jbWRfZmxhZ3MpOworCWlmICh0YXNrLT50X21lbV9saXN0KQorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1lbSwgdGFzay0+dF9tZW1fbGlzdCwgc2VfbGlzdCkKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjbWQgJXAgbWVtICVwIHBhZ2UgJXAgIgorCQkJICAgICAgICJsZW4gMHgleCBvZmYgMHgleFxuIiwKKwkJCSAgICAgICBjYWxsZXIsIGNtZCwgbWVtLAorCQkJICAgICAgIG1lbS0+c2VfcGFnZSwgbWVtLT5zZV9sZW4sIG1lbS0+c2Vfb2ZmKTsKKwlzcCA9IGNtZC0+c2VxOworCWlmIChzcCkgeworCQllcCA9IGZjX3NlcV9leGNoKHNwKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNtZCAlcCBzaWQgJXggZGlkICV4ICIKKwkJCSJveF9pZCAleCByeF9pZCAleCBzZXFfaWQgJXggZV9zdGF0ICV4XG4iLAorCQkJY2FsbGVyLCBjbWQsIGVwLT5zaWQsIGVwLT5kaWQsIGVwLT5veGlkLCBlcC0+cnhpZCwKKwkJCXNwLT5pZCwgZXAtPmVzYl9zdGF0KTsKKwl9CisJcHJpbnRfaGV4X2R1bXAoS0VSTl9JTkZPLCAiZnRfZHVtcF9jbWQgIiwgRFVNUF9QUkVGSVhfTk9ORSwKKwkJMTYsIDQsIGNtZC0+Y2RiLCBNQVhfQ09NTUFORF9TSVpFLCAwKTsKK30KKworLyoKKyAqIEdldCBMVU4gZnJvbSBDREIuCisgKi8KK3N0YXRpYyBpbnQgZnRfZ2V0X2x1bl9mb3JfY21kKHN0cnVjdCBmdF9jbWQgKmNtZCwgdTggKmx1bnApCit7CisJdTY0IGx1bjsKKworCWx1biA9IGx1bnBbMV07CisJc3dpdGNoIChsdW5wWzBdID4+IDYpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgMToKKwkJbHVuIHw9IChsdW5wWzBdICYgMHgzZikgPDwgODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAobHVuID49IFRSQU5TUE9SVF9NQVhfTFVOU19QRVJfVFBHKQorCQlyZXR1cm4gLTE7CisJY21kLT5sdW4gPSBsdW47CisJcmV0dXJuIHRyYW5zcG9ydF9nZXRfbHVuX2Zvcl9jbWQoJmNtZC0+c2VfY21kLCBOVUxMLCBsdW4pOworfQorCitzdGF0aWMgdm9pZCBmdF9xdWV1ZV9jbWQoc3RydWN0IGZ0X3Nlc3MgKnNlc3MsIHN0cnVjdCBmdF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3Qgc2VfcXVldWVfb2JqICpxb2JqOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlxb2JqID0gJnNlc3MtPnRwb3J0LT50cGctPnFvYmo7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnFvYmotPmNtZF9xdWV1ZV9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmY21kLT5zZV9yZXEucXJfbGlzdCwgJnFvYmotPnFvYmpfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcW9iai0+Y21kX3F1ZXVlX2xvY2ssIGZsYWdzKTsKKwlhdG9taWNfaW5jKCZxb2JqLT5xdWV1ZV9jbnQpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcW9iai0+dGhyZWFkX3dxKTsKK30KKworc3RhdGljIHN0cnVjdCBmdF9jbWQgKmZ0X2RlcXVldWVfY21kKHN0cnVjdCBzZV9xdWV1ZV9vYmogKnFvYmopCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc2VfcXVldWVfcmVxICpxcjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZxb2JqLT5jbWRfcXVldWVfbG9jaywgZmxhZ3MpOworCWlmIChsaXN0X2VtcHR5KCZxb2JqLT5xb2JqX2xpc3QpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFvYmotPmNtZF9xdWV1ZV9sb2NrLCBmbGFncyk7CisJCXJldHVybiBOVUxMOworCX0KKwlxciA9IGxpc3RfZmlyc3RfZW50cnkoJnFvYmotPnFvYmpfbGlzdCwgc3RydWN0IHNlX3F1ZXVlX3JlcSwgcXJfbGlzdCk7CisJbGlzdF9kZWwoJnFyLT5xcl9saXN0KTsKKwlhdG9taWNfZGVjKCZxb2JqLT5xdWV1ZV9jbnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFvYmotPmNtZF9xdWV1ZV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihxciwgc3RydWN0IGZ0X2NtZCwgc2VfcmVxKTsKK30KKworc3RhdGljIHZvaWQgZnRfZnJlZV9jbWQoc3RydWN0IGZ0X2NtZCAqY21kKQoreworCXN0cnVjdCBmY19mcmFtZSAqZnA7CisJc3RydWN0IGZjX2xwb3J0ICpscG9ydDsKKworCWlmICghY21kKQorCQlyZXR1cm47CisJZnAgPSBjbWQtPnJlcV9mcmFtZTsKKwlscG9ydCA9IGZyX2RldihmcCk7CisJaWYgKGZyX3NlcShmcCkpCisJCWxwb3J0LT50dC5zZXFfcmVsZWFzZShmcl9zZXEoZnApKTsKKwlmY19mcmFtZV9mcmVlKGZwKTsKKwlmdF9zZXNzX3B1dChjbWQtPnNlc3MpOwkvKiB1bmRvIGdldCBmcm9tIGxvb2t1cCBhdCByZWN2ICovCisJa2ZyZWUoY21kKTsKK30KKwordm9pZCBmdF9yZWxlYXNlX2NtZChzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpCit7CisJc3RydWN0IGZ0X2NtZCAqY21kID0gY29udGFpbmVyX29mKHNlX2NtZCwgc3RydWN0IGZ0X2NtZCwgc2VfY21kKTsKKworCWZ0X2ZyZWVfY21kKGNtZCk7Cit9CisKK3ZvaWQgZnRfY2hlY2tfc3RvcF9mcmVlKHN0cnVjdCBzZV9jbWQgKnNlX2NtZCkKK3sKKwl0cmFuc3BvcnRfZ2VuZXJpY19mcmVlX2NtZChzZV9jbWQsIDAsIDEsIDApOworfQorCisvKgorICogU2VuZCByZXNwb25zZS4KKyAqLworaW50IGZ0X3F1ZXVlX3N0YXR1cyhzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpCit7CisJc3RydWN0IGZ0X2NtZCAqY21kID0gY29udGFpbmVyX29mKHNlX2NtZCwgc3RydWN0IGZ0X2NtZCwgc2VfY21kKTsKKwlzdHJ1Y3QgZmNfZnJhbWUgKmZwOworCXN0cnVjdCBmY3BfcmVzcF93aXRoX2V4dCAqZmNwOworCXN0cnVjdCBmY19scG9ydCAqbHBvcnQ7CisJc3RydWN0IGZjX2V4Y2ggKmVwOworCXNpemVfdCBsZW47CisKKwlmdF9kdW1wX2NtZChjbWQsIF9fZnVuY19fKTsKKwllcCA9IGZjX3NlcV9leGNoKGNtZC0+c2VxKTsKKwlscG9ydCA9IGVwLT5scDsKKwlsZW4gPSBzaXplb2YoKmZjcCkgKyBzZV9jbWQtPnNjc2lfc2Vuc2VfbGVuZ3RoOworCWZwID0gZmNfZnJhbWVfYWxsb2MobHBvcnQsIGxlbik7CisJaWYgKCFmcCkgeworCQkvKiBYWFggc2hvdWxkbid0IGp1c3QgZHJvcCBpdCAtIHJlcXVldWUgYW5kIHJldHJ5PyAqLworCQlyZXR1cm4gMDsKKwl9CisJZmNwID0gZmNfZnJhbWVfcGF5bG9hZF9nZXQoZnAsIGxlbik7CisJbWVtc2V0KGZjcCwgMCwgbGVuKTsKKwlmY3AtPnJlc3AuZnJfc3RhdHVzID0gc2VfY21kLT5zY3NpX3N0YXR1czsKKworCWxlbiA9IHNlX2NtZC0+c2NzaV9zZW5zZV9sZW5ndGg7CisJaWYgKGxlbikgeworCQlmY3AtPnJlc3AuZnJfZmxhZ3MgfD0gRkNQX1NOU19MRU5fVkFMOworCQlmY3AtPmV4dC5mcl9zbnNfbGVuID0gaHRvbmwobGVuKTsKKwkJbWVtY3B5KChmY3AgKyAxKSwgc2VfY21kLT5zZW5zZV9idWZmZXIsIGxlbik7CisJfQorCisJLyoKKwkgKiBUZXN0IHVuZGVyZmxvdyBhbmQgb3ZlcmZsb3cgd2l0aCBvbmUgbWFzay4gIFVzdWFsbHkgYm90aCBhcmUgb2ZmLgorCSAqIEJpZGlyZWN0aW9uYWwgY29tbWFuZHMgYXJlIG5vdCBoYW5kbGVkIHlldC4KKwkgKi8KKwlpZiAoc2VfY21kLT5zZV9jbWRfZmxhZ3MgJiAoU0NGX09WRVJGTE9XX0JJVCB8IFNDRl9VTkRFUkZMT1dfQklUKSkgeworCQlpZiAoc2VfY21kLT5zZV9jbWRfZmxhZ3MgJiBTQ0ZfT1ZFUkZMT1dfQklUKQorCQkJZmNwLT5yZXNwLmZyX2ZsYWdzIHw9IEZDUF9SRVNJRF9PVkVSOworCQllbHNlCisJCQlmY3AtPnJlc3AuZnJfZmxhZ3MgfD0gRkNQX1JFU0lEX1VOREVSOworCQlmY3AtPmV4dC5mcl9yZXNpZCA9IGNwdV90b19iZTMyKHNlX2NtZC0+cmVzaWR1YWxfY291bnQpOworCX0KKworCS8qCisJICogU2VuZCByZXNwb25zZS4KKwkgKi8KKwljbWQtPnNlcSA9IGxwb3J0LT50dC5zZXFfc3RhcnRfbmV4dChjbWQtPnNlcSk7CisJZmNfZmlsbF9mY19oZHIoZnAsIEZDX1JDVExfRERfQ01EX1NUQVRVUywgZXAtPmRpZCwgZXAtPnNpZCwgRkNfVFlQRV9GQ1AsCisJCSAgICAgICBGQ19GQ19FWF9DVFggfCBGQ19GQ19MQVNUX1NFUSB8IEZDX0ZDX0VORF9TRVEsIDApOworCisJbHBvcnQtPnR0LnNlcV9zZW5kKGxwb3J0LCBjbWQtPnNlcSwgZnApOworCWxwb3J0LT50dC5leGNoX2RvbmUoY21kLT5zZXEpOworCXJldHVybiAwOworfQorCitpbnQgZnRfd3JpdGVfcGVuZGluZ19zdGF0dXMoc3RydWN0IHNlX2NtZCAqc2VfY21kKQoreworCXN0cnVjdCBmdF9jbWQgKmNtZCA9IGNvbnRhaW5lcl9vZihzZV9jbWQsIHN0cnVjdCBmdF9jbWQsIHNlX2NtZCk7CisKKwlyZXR1cm4gY21kLT53cml0ZV9kYXRhX2xlbiAhPSBzZV9jbWQtPmRhdGFfbGVuZ3RoOworfQorCisvKgorICogU2VuZCBUWF9SRFkgKHRyYW5zZmVyIHJlYWR5KS4KKyAqLworaW50IGZ0X3dyaXRlX3BlbmRpbmcoc3RydWN0IHNlX2NtZCAqc2VfY21kKQoreworCXN0cnVjdCBmdF9jbWQgKmNtZCA9IGNvbnRhaW5lcl9vZihzZV9jbWQsIHN0cnVjdCBmdF9jbWQsIHNlX2NtZCk7CisJc3RydWN0IGZjX2ZyYW1lICpmcDsKKwlzdHJ1Y3QgZmNwX3R4cmR5ICp0eHJkeTsKKwlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0OworCXN0cnVjdCBmY19leGNoICplcDsKKwlzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICpmaDsKKwl1MzIgZl9jdGw7CisKKwlmdF9kdW1wX2NtZChjbWQsIF9fZnVuY19fKTsKKworCWVwID0gZmNfc2VxX2V4Y2goY21kLT5zZXEpOworCWxwb3J0ID0gZXAtPmxwOworCWZwID0gZmNfZnJhbWVfYWxsb2MobHBvcnQsIHNpemVvZigqdHhyZHkpKTsKKwlpZiAoIWZwKQorCQlyZXR1cm4gUFlYX1RSQU5TUE9SVF9PVVRfT0ZfTUVNT1JZX1JFU09VUkNFUzsKKworCXR4cmR5ID0gZmNfZnJhbWVfcGF5bG9hZF9nZXQoZnAsIHNpemVvZigqdHhyZHkpKTsKKwltZW1zZXQodHhyZHksIDAsIHNpemVvZigqdHhyZHkpKTsKKwl0eHJkeS0+ZnRfYnVyc3RfbGVuID0gaHRvbmwoc2VfY21kLT5kYXRhX2xlbmd0aCk7CisKKwljbWQtPnNlcSA9IGxwb3J0LT50dC5zZXFfc3RhcnRfbmV4dChjbWQtPnNlcSk7CisJZmNfZmlsbF9mY19oZHIoZnAsIEZDX1JDVExfRERfREFUQV9ERVNDLCBlcC0+ZGlkLCBlcC0+c2lkLCBGQ19UWVBFX0ZDUCwKKwkJICAgICAgIEZDX0ZDX0VYX0NUWCB8IEZDX0ZDX0VORF9TRVEgfCBGQ19GQ19TRVFfSU5JVCwgMCk7CisKKwlmaCA9IGZjX2ZyYW1lX2hlYWRlcl9nZXQoZnApOworCWZfY3RsID0gbnRvaDI0KGZoLT5maF9mX2N0bCk7CisKKwkvKiBPbmx5IGlmIGl0IGlzICdFeGNoYW5nZSBSZXNwb25kZXInICovCisJaWYgKGZfY3RsICYgRkNfRkNfRVhfQ1RYKSB7CisJCS8qIFRhcmdldCBpcyAnZXhjaGFuZ2UgcmVzcG9uZGVyJyBhbmQgc2VuZGluZyBYRkVSX1JFQURZCisJCSAqIHRvICdleGNoYW5nZSBpbml0aWF0b3IgKGluaXRpYXRvciknCisJCSAqLworCQlpZiAoKGVwLT54aWQgPD0gbHBvcnQtPmxyb194aWQpICYmCisJCSAgICAoZmgtPmZoX3JfY3RsID09IEZDX1JDVExfRERfREFUQV9ERVNDKSkgeworCQkJaWYgKHNlX2NtZC0+c2VfY21kX2ZsYWdzICYgU0NGX1NDU0lfREFUQV9TR19JT19DREIpIHsKKwkJCQkvKgorCQkJCSAqIE1hcCBzZV9tZW0gbGlzdCB0byBzY2F0dGVybGlzdCwgc28gdGhhdAorCQkJCSAqIEREUCBjYW4gYmUgc2V0dXAuIEREUCBzZXR1cCBmdW5jdGlvbiByZXF1aXJlCisJCQkJICogc2NhdHRlcmxpc3QuIHNlX21lbV9saXN0IGlzIGludGVybmFsIHRvCisJCQkJICogVENNL0xJTyB0YXJnZXQKKwkJCQkgKi8KKwkJCQl0cmFuc3BvcnRfZG9fdGFza19zZ19jaGFpbihzZV9jbWQpOworCQkJCWNtZC0+c2cgPSBUX1RBU0soc2VfY21kKS0+dF90YXNrc19zZ19jaGFpbmVkOworCQkJCWNtZC0+c2dfY250ID0KKwkJCQkJVF9UQVNLKHNlX2NtZCktPnRfdGFza3Nfc2dfY2hhaW5lZF9ubzsKKwkJCX0KKwkJCWlmIChjbWQtPnNnICYmIGxwb3J0LT50dC5kZHBfc2V0dXAobHBvcnQsIGVwLT54aWQsCisJCQkJCQkgICAgY21kLT5zZywgY21kLT5zZ19jbnQpKQorCQkJCWNtZC0+d2FzX2RkcF9zZXR1cCA9IDE7CisJCX0KKwl9CisJbHBvcnQtPnR0LnNlcV9zZW5kKGxwb3J0LCBjbWQtPnNlcSwgZnApOworCXJldHVybiAwOworfQorCit1MzIgZnRfZ2V0X3Rhc2tfdGFnKHN0cnVjdCBzZV9jbWQgKnNlX2NtZCkKK3sKKwlzdHJ1Y3QgZnRfY21kICpjbWQgPSBjb250YWluZXJfb2Yoc2VfY21kLCBzdHJ1Y3QgZnRfY21kLCBzZV9jbWQpOworCisJcmV0dXJuIGZjX3NlcV9leGNoKGNtZC0+c2VxKS0+cnhpZDsKK30KKworaW50IGZ0X2dldF9jbWRfc3RhdGUoc3RydWN0IHNlX2NtZCAqc2VfY21kKQoreworCXN0cnVjdCBmdF9jbWQgKmNtZCA9IGNvbnRhaW5lcl9vZihzZV9jbWQsIHN0cnVjdCBmdF9jbWQsIHNlX2NtZCk7CisKKwlyZXR1cm4gY21kLT5zdGF0ZTsKK30KKworaW50IGZ0X2lzX3N0YXRlX3JlbW92ZShzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpCit7CisJcmV0dXJuIDA7CS8qIFhYWCBUQkQgKi8KK30KKwordm9pZCBmdF9uZXdfY21kX2ZhaWx1cmUoc3RydWN0IHNlX2NtZCAqc2VfY21kKQoreworCS8qIFhYWCBUQkQgKi8KKwlwcmludGsoS0VSTl9JTkZPICIlczogc2VfY21kICVwXG4iLCBfX2Z1bmNfXywgc2VfY21kKTsKK30KKworLyoKKyAqIEZDIHNlcXVlbmNlIHJlc3BvbnNlIGhhbmRsZXIgZm9yIGZvbGxvdy1vbiBzZXF1ZW5jZXMgKGRhdGEpIGFuZCBhYm9ydHMuCisgKi8KK3N0YXRpYyB2b2lkIGZ0X3JlY3Zfc2VxKHN0cnVjdCBmY19zZXEgKnNwLCBzdHJ1Y3QgZmNfZnJhbWUgKmZwLCB2b2lkICphcmcpCit7CisJc3RydWN0IGZ0X2NtZCAqY21kID0gYXJnOworCXN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKmZoOworCisJaWYgKElTX0VSUihmcCkpIHsKKwkJLyogWFhYIG5lZWQgdG8gZmluZCBjbWQgaWYgcXVldWVkICovCisJCWNtZC0+c2VfY21kLnRfc3RhdGUgPSBUUkFOU1BPUlRfUkVNT1ZFOworCQljbWQtPnNlcSA9IE5VTEw7CisJCXRyYW5zcG9ydF9nZW5lcmljX2ZyZWVfY21kKCZjbWQtPnNlX2NtZCwgMCwgMSwgMCk7CisJCXJldHVybjsKKwl9CisKKwlmaCA9IGZjX2ZyYW1lX2hlYWRlcl9nZXQoZnApOworCisJc3dpdGNoIChmaC0+Zmhfcl9jdGwpIHsKKwljYXNlIEZDX1JDVExfRERfU09MX0RBVEE6CS8qIHdyaXRlIGRhdGEgKi8KKwkJZnRfcmVjdl93cml0ZV9kYXRhKGNtZCwgZnApOworCQlicmVhazsKKwljYXNlIEZDX1JDVExfRERfVU5TT0xfQ1RMOgkvKiBjb21tYW5kICovCisJY2FzZSBGQ19SQ1RMX0REX1NPTF9DVEw6CS8qIHRyYW5zZmVyIHJlYWR5ICovCisJY2FzZSBGQ19SQ1RMX0REX0RBVEFfREVTQzoJLyogdHJhbnNmZXIgcmVhZHkgKi8KKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9JTkZPICIlczogdW5oYW5kbGVkIGZyYW1lIHJfY3RsICV4XG4iLAorCQkgICAgICAgX19mdW5jX18sIGZoLT5maF9yX2N0bCk7CisJCWZjX2ZyYW1lX2ZyZWUoZnApOworCQl0cmFuc3BvcnRfZ2VuZXJpY19mcmVlX2NtZCgmY21kLT5zZV9jbWQsIDAsIDEsIDApOworCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBTZW5kIGEgRkNQIHJlc3BvbnNlIGluY2x1ZGluZyBTQ1NJIHN0YXR1cyBhbmQgb3B0aW9uYWwgRkNQIHJzcF9jb2RlLgorICogc3RhdHVzIGlzIFNBTV9TVEFUX0dPT0QgKHplcm8pIGlmZiBjb2RlIGlzIHZhbGlkLgorICogVGhpcyBpcyB1c2VkIGluIGVycm9yIGNhc2VzLCBzdWNoIGFzIGFsbG9jYXRpb24gZmFpbHVyZXMuCisgKi8KK3N0YXRpYyB2b2lkIGZ0X3NlbmRfcmVzcF9zdGF0dXMoc3RydWN0IGZjX2xwb3J0ICpscG9ydCwKKwkJCQljb25zdCBzdHJ1Y3QgZmNfZnJhbWUgKnJ4X2ZwLAorCQkJCXUzMiBzdGF0dXMsIGVudW0gZmNwX3Jlc3BfcnNwX2NvZGVzIGNvZGUpCit7CisJc3RydWN0IGZjX2ZyYW1lICpmcDsKKwlzdHJ1Y3QgZmNfc2VxICpzcDsKKwljb25zdCBzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICpmaDsKKwlzaXplX3QgbGVuOworCXN0cnVjdCBmY3BfcmVzcF93aXRoX2V4dCAqZmNwOworCXN0cnVjdCBmY3BfcmVzcF9yc3BfaW5mbyAqaW5mbzsKKworCWZoID0gZmNfZnJhbWVfaGVhZGVyX2dldChyeF9mcCk7CisJRlRfSU9fREJHKCJGQ1AgZXJyb3IgcmVzcG9uc2U6IGRpZCAleCBveGlkICV4IHN0YXR1cyAleCBjb2RlICV4XG4iLAorCQkgIG50b2gyNChmaC0+Zmhfc19pZCksIG50b2hzKGZoLT5maF9veF9pZCksIHN0YXR1cywgY29kZSk7CisJbGVuID0gc2l6ZW9mKCpmY3ApOworCWlmIChzdGF0dXMgPT0gU0FNX1NUQVRfR09PRCkKKwkJbGVuICs9IHNpemVvZigqaW5mbyk7CisJZnAgPSBmY19mcmFtZV9hbGxvYyhscG9ydCwgbGVuKTsKKwlpZiAoIWZwKQorCQlyZXR1cm47CisJZmNwID0gZmNfZnJhbWVfcGF5bG9hZF9nZXQoZnAsIGxlbik7CisJbWVtc2V0KGZjcCwgMCwgbGVuKTsKKwlmY3AtPnJlc3AuZnJfc3RhdHVzID0gc3RhdHVzOworCWlmIChzdGF0dXMgPT0gU0FNX1NUQVRfR09PRCkgeworCQlmY3AtPmV4dC5mcl9yc3BfbGVuID0gaHRvbmwoc2l6ZW9mKCppbmZvKSk7CisJCWZjcC0+cmVzcC5mcl9mbGFncyB8PSBGQ1BfUlNQX0xFTl9WQUw7CisJCWluZm8gPSAoc3RydWN0IGZjcF9yZXNwX3JzcF9pbmZvICopKGZjcCArIDEpOworCQlpbmZvLT5yc3BfY29kZSA9IGNvZGU7CisJfQorCisJZmNfZmlsbF9yZXBseV9oZHIoZnAsIHJ4X2ZwLCBGQ19SQ1RMX0REX0NNRF9TVEFUVVMsIDApOworCXNwID0gZnJfc2VxKGZwKTsKKwlpZiAoc3ApCisJCWxwb3J0LT50dC5zZXFfc2VuZChscG9ydCwgc3AsIGZwKTsKKwllbHNlCisJCWxwb3J0LT50dC5mcmFtZV9zZW5kKGxwb3J0LCBmcCk7Cit9CisKKy8qCisgKiBTZW5kIGVycm9yIG9yIHRhc2sgbWFuYWdlbWVudCByZXNwb25zZS4KKyAqIEFsd2F5cyBmcmVlcyB0aGUgY21kIGFuZCBhc3NvY2lhdGVkIHN0YXRlLgorICovCitzdGF0aWMgdm9pZCBmdF9zZW5kX3Jlc3BfY29kZShzdHJ1Y3QgZnRfY21kICpjbWQsIGVudW0gZmNwX3Jlc3BfcnNwX2NvZGVzIGNvZGUpCit7CisJZnRfc2VuZF9yZXNwX3N0YXR1cyhjbWQtPnNlc3MtPnRwb3J0LT5scG9ydCwKKwkJCSAgICBjbWQtPnJlcV9mcmFtZSwgU0FNX1NUQVRfR09PRCwgY29kZSk7CisJZnRfZnJlZV9jbWQoY21kKTsKK30KKworLyoKKyAqIEhhbmRsZSBUYXNrIE1hbmFnZW1lbnQgUmVxdWVzdC4KKyAqLworc3RhdGljIHZvaWQgZnRfc2VuZF90bShzdHJ1Y3QgZnRfY21kICpjbWQpCit7CisJc3RydWN0IHNlX3Rtcl9yZXEgKnRtcjsKKwlzdHJ1Y3QgZmNwX2NtbmQgKmZjcDsKKwl1OCB0bV9mdW5jOworCisJZmNwID0gZmNfZnJhbWVfcGF5bG9hZF9nZXQoY21kLT5yZXFfZnJhbWUsIHNpemVvZigqZmNwKSk7CisKKwlzd2l0Y2ggKGZjcC0+ZmNfdG1fZmxhZ3MpIHsKKwljYXNlIEZDUF9UTUZfTFVOX1JFU0VUOgorCQl0bV9mdW5jID0gVE1SX0xVTl9SRVNFVDsKKwkJaWYgKGZ0X2dldF9sdW5fZm9yX2NtZChjbWQsIGZjcC0+ZmNfbHVuKSA8IDApIHsKKwkJCWZ0X2R1bXBfY21kKGNtZCwgX19mdW5jX18pOworCQkJdHJhbnNwb3J0X3NlbmRfY2hlY2tfY29uZGl0aW9uX2FuZF9zZW5zZSgmY21kLT5zZV9jbWQsCisJCQkJY21kLT5zZV9jbWQuc2NzaV9zZW5zZV9yZWFzb24sIDApOworCQkJZnRfc2Vzc19wdXQoY21kLT5zZXNzKTsKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKwljYXNlIEZDUF9UTUZfVEdUX1JFU0VUOgorCQl0bV9mdW5jID0gVE1SX1RBUkdFVF9XQVJNX1JFU0VUOworCQlicmVhazsKKwljYXNlIEZDUF9UTUZfQ0xSX1RBU0tfU0VUOgorCQl0bV9mdW5jID0gVE1SX0NMRUFSX1RBU0tfU0VUOworCQlicmVhazsKKwljYXNlIEZDUF9UTUZfQUJUX1RBU0tfU0VUOgorCQl0bV9mdW5jID0gVE1SX0FCT1JUX1RBU0tfU0VUOworCQlicmVhazsKKwljYXNlIEZDUF9UTUZfQ0xSX0FDQToKKwkJdG1fZnVuYyA9IFRNUl9DTEVBUl9BQ0E7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qCisJCSAqIEZDUDRyMDEgaW5kaWNhdGVzIGhhdmluZyBhIGNvbWJpbmF0aW9uIG9mCisJCSAqIHRtX2ZsYWdzIHNldCBpcyBpbnZhbGlkLgorCQkgKi8KKwkJRlRfVE1fREJHKCJpbnZhbGlkIEZDUCB0bV9mbGFncyAleFxuIiwgZmNwLT5mY190bV9mbGFncyk7CisJCWZ0X3NlbmRfcmVzcF9jb2RlKGNtZCwgRkNQX0NNTkRfRklFTERTX0lOVkFMSUQpOworCQlyZXR1cm47CisJfQorCisJRlRfVE1fREJHKCJhbGxvYyB0bSBjbWQgZm4gJWRcbiIsIHRtX2Z1bmMpOworCXRtciA9IGNvcmVfdG1yX2FsbG9jX3JlcSgmY21kLT5zZV9jbWQsIGNtZCwgdG1fZnVuYyk7CisJaWYgKCF0bXIpIHsKKwkJRlRfVE1fREJHKCJhbGxvYyBmYWlsZWRcbiIpOworCQlmdF9zZW5kX3Jlc3BfY29kZShjbWQsIEZDUF9UTUZfRkFJTEVEKTsKKwkJcmV0dXJuOworCX0KKwljbWQtPnNlX2NtZC5zZV90bXJfcmVxID0gdG1yOworCXRyYW5zcG9ydF9nZW5lcmljX2hhbmRsZV90bXIoJmNtZC0+c2VfY21kKTsKK30KKworLyoKKyAqIFNlbmQgc3RhdHVzIGZyb20gY29tcGxldGVkIHRhc2sgbWFuYWdlbWVudCByZXF1ZXN0LgorICovCitpbnQgZnRfcXVldWVfdG1fcmVzcChzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpCit7CisJc3RydWN0IGZ0X2NtZCAqY21kID0gY29udGFpbmVyX29mKHNlX2NtZCwgc3RydWN0IGZ0X2NtZCwgc2VfY21kKTsKKwlzdHJ1Y3Qgc2VfdG1yX3JlcSAqdG1yID0gc2VfY21kLT5zZV90bXJfcmVxOworCWVudW0gZmNwX3Jlc3BfcnNwX2NvZGVzIGNvZGU7CisKKwlzd2l0Y2ggKHRtci0+cmVzcG9uc2UpIHsKKwljYXNlIFRNUl9GVU5DVElPTl9DT01QTEVURToKKwkJY29kZSA9IEZDUF9UTUZfQ01QTDsKKwkJYnJlYWs7CisJY2FzZSBUTVJfTFVOX0RPRVNfTk9UX0VYSVNUOgorCQljb2RlID0gRkNQX1RNRl9JTlZBTElEX0xVTjsKKwkJYnJlYWs7CisJY2FzZSBUTVJfRlVOQ1RJT05fUkVKRUNURUQ6CisJCWNvZGUgPSBGQ1BfVE1GX1JFSkVDVEVEOworCQlicmVhazsKKwljYXNlIFRNUl9UQVNLX0RPRVNfTk9UX0VYSVNUOgorCWNhc2UgVE1SX1RBU0tfU1RJTExfQUxMRUdJQU5UOgorCWNhc2UgVE1SX1RBU0tfRkFJTE9WRVJfTk9UX1NVUFBPUlRFRDoKKwljYXNlIFRNUl9UQVNLX01HTVRfRlVOQ1RJT05fTk9UX1NVUFBPUlRFRDoKKwljYXNlIFRNUl9GVU5DVElPTl9BVVRIT1JJWkFUSU9OX0ZBSUxFRDoKKwlkZWZhdWx0OgorCQljb2RlID0gRkNQX1RNRl9GQUlMRUQ7CisJCWJyZWFrOworCX0KKwlGVF9UTV9EQkcoInRtciBmbiAlZCByZXNwICVkIGZjcCBjb2RlICVkXG4iLAorCQkgIHRtci0+ZnVuY3Rpb24sIHRtci0+cmVzcG9uc2UsIGNvZGUpOworCWZ0X3NlbmRfcmVzcF9jb2RlKGNtZCwgY29kZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBIYW5kbGUgaW5jb21pbmcgRkNQIGNvbW1hbmQuCisgKi8KK3N0YXRpYyB2b2lkIGZ0X3JlY3ZfY21kKHN0cnVjdCBmdF9zZXNzICpzZXNzLCBzdHJ1Y3QgZmNfZnJhbWUgKmZwKQoreworCXN0cnVjdCBmdF9jbWQgKmNtZDsKKwlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gc2Vzcy0+dHBvcnQtPmxwb3J0OworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9BVE9NSUMpOworCWlmICghY21kKQorCQlnb3RvIGJ1c3k7CisJY21kLT5zZXNzID0gc2VzczsKKwljbWQtPnNlcSA9IGxwb3J0LT50dC5zZXFfYXNzaWduKGxwb3J0LCBmcCk7CisJaWYgKCFjbWQtPnNlcSkgeworCQlrZnJlZShjbWQpOworCQlnb3RvIGJ1c3k7CisJfQorCWNtZC0+cmVxX2ZyYW1lID0gZnA7CQkvKiBob2xkIGZyYW1lIGR1cmluZyBjbWQgKi8KKwlmdF9xdWV1ZV9jbWQoc2VzcywgY21kKTsKKwlyZXR1cm47CisKK2J1c3k6CisJRlRfSU9fREJHKCJjbWQgb3Igc2VxIGFsbG9jYXRpb24gZmFpbHVyZSAtIHNlbmRpbmcgQlVTWVxuIik7CisJZnRfc2VuZF9yZXNwX3N0YXR1cyhscG9ydCwgZnAsIFNBTV9TVEFUX0JVU1ksIDApOworCWZjX2ZyYW1lX2ZyZWUoZnApOworCWZ0X3Nlc3NfcHV0KHNlc3MpOwkJLyogdW5kbyBnZXQgZnJvbSBsb29rdXAgKi8KK30KKworCisvKgorICogSGFuZGxlIGluY29taW5nIEZDUCBmcmFtZS4KKyAqIENhbGxlciBoYXMgdmVyaWZpZWQgdGhhdCB0aGUgZnJhbWUgaXMgdHlwZSBGQ1AuCisgKi8KK3ZvaWQgZnRfcmVjdl9yZXEoc3RydWN0IGZ0X3Nlc3MgKnNlc3MsIHN0cnVjdCBmY19mcmFtZSAqZnApCit7CisJc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqZmggPSBmY19mcmFtZV9oZWFkZXJfZ2V0KGZwKTsKKworCXN3aXRjaCAoZmgtPmZoX3JfY3RsKSB7CisJY2FzZSBGQ19SQ1RMX0REX1VOU09MX0NNRDoJLyogY29tbWFuZCAqLworCQlmdF9yZWN2X2NtZChzZXNzLCBmcCk7CisJCWJyZWFrOworCWNhc2UgRkNfUkNUTF9ERF9TT0xfREFUQToJLyogd3JpdGUgZGF0YSAqLworCWNhc2UgRkNfUkNUTF9ERF9VTlNPTF9DVEw6CisJY2FzZSBGQ19SQ1RMX0REX1NPTF9DVEw6CisJY2FzZSBGQ19SQ1RMX0REX0RBVEFfREVTQzoJLyogdHJhbnNmZXIgcmVhZHkgKi8KKwljYXNlIEZDX1JDVExfRUxTNF9SRVE6CQkvKiBTUlIsIHBlcmhhcHMgKi8KKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9JTkZPICIlczogdW5oYW5kbGVkIGZyYW1lIHJfY3RsICV4XG4iLAorCQkgICAgICAgX19mdW5jX18sIGZoLT5maF9yX2N0bCk7CisJCWZjX2ZyYW1lX2ZyZWUoZnApOworCQlmdF9zZXNzX3B1dChzZXNzKTsJLyogdW5kbyBnZXQgZnJvbSBsb29rdXAgKi8KKwkJYnJlYWs7CisJfQorfQorCisvKgorICogU2VuZCBuZXcgY29tbWFuZCB0byB0YXJnZXQuCisgKi8KK3N0YXRpYyB2b2lkIGZ0X3NlbmRfY21kKHN0cnVjdCBmdF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICpmaCA9IGZjX2ZyYW1lX2hlYWRlcl9nZXQoY21kLT5yZXFfZnJhbWUpOworCXN0cnVjdCBzZV9jbWQgKnNlX2NtZDsKKwlzdHJ1Y3QgZmNwX2NtbmQgKmZjcDsKKwlpbnQgZGF0YV9kaXI7CisJdTMyIGRhdGFfbGVuOworCWludCB0YXNrX2F0dHI7CisJaW50IHJldDsKKworCWZjcCA9IGZjX2ZyYW1lX3BheWxvYWRfZ2V0KGNtZC0+cmVxX2ZyYW1lLCBzaXplb2YoKmZjcCkpOworCWlmICghZmNwKQorCQlnb3RvIGVycjsKKworCWlmIChmY3AtPmZjX2ZsYWdzICYgRkNQX0NGTF9MRU5fTUFTSykKKwkJZ290byBlcnI7CQkvKiBub3QgaGFuZGxpbmcgbG9uZ2VyIENEQnMgeWV0ICovCisKKwlpZiAoZmNwLT5mY190bV9mbGFncykgeworCQl0YXNrX2F0dHIgPSBGQ1BfUFRBX1NJTVBMRTsKKwkJZGF0YV9kaXIgPSBETUFfTk9ORTsKKwkJZGF0YV9sZW4gPSAwOworCX0gZWxzZSB7CisJCXN3aXRjaCAoZmNwLT5mY19mbGFncyAmIChGQ1BfQ0ZMX1JEREFUQSB8IEZDUF9DRkxfV1JEQVRBKSkgeworCQljYXNlIDA6CisJCQlkYXRhX2RpciA9IERNQV9OT05FOworCQkJYnJlYWs7CisJCWNhc2UgRkNQX0NGTF9SRERBVEE6CisJCQlkYXRhX2RpciA9IERNQV9GUk9NX0RFVklDRTsKKwkJCWJyZWFrOworCQljYXNlIEZDUF9DRkxfV1JEQVRBOgorCQkJZGF0YV9kaXIgPSBETUFfVE9fREVWSUNFOworCQkJYnJlYWs7CisJCWNhc2UgRkNQX0NGTF9XUkRBVEEgfCBGQ1BfQ0ZMX1JEREFUQToKKwkJCWdvdG8gZXJyOwkvKiBUQkQgbm90IHN1cHBvcnRlZCBieSB0Y21fZmMgeWV0ICovCisJCX0KKworCQkvKiBGQ1BfUFRBXyBtYXBzIDE6MSB0byBUQVNLX0FUVFJfICovCisJCXRhc2tfYXR0ciA9IGZjcC0+ZmNfcHJpX3RhICYgRkNQX1BUQV9NQVNLOworCQlkYXRhX2xlbiA9IG50b2hsKGZjcC0+ZmNfZGwpOworCQljbWQtPmNkYiA9IGZjcC0+ZmNfY2RiOworCX0KKworCXNlX2NtZCA9ICZjbWQtPnNlX2NtZDsKKwkvKgorCSAqIEluaXRpYWxpemUgc3RydWN0IHNlX2NtZCBkZXNjcmlwdG9yIGZyb20gdGFyZ2V0X2NvcmVfbW9kCisJICogaW5mcmFzdHJ1Y3R1cmUKKwkgKi8KKwl0cmFuc3BvcnRfaW5pdF9zZV9jbWQoc2VfY21kLCAmZnRfY29uZmlnZnMtPnRmX29wcywgY21kLT5zZXNzLT5zZV9zZXNzLAorCQkJICAgICAgZGF0YV9sZW4sIGRhdGFfZGlyLCB0YXNrX2F0dHIsCisJCQkgICAgICAmY21kLT5mdF9zZW5zZV9idWZmZXJbMF0pOworCS8qCisJICogQ2hlY2sgZm9yIEZDUCB0YXNrIG1hbmFnZW1lbnQgZmxhZ3MKKwkgKi8KKwlpZiAoZmNwLT5mY190bV9mbGFncykgeworCQlmdF9zZW5kX3RtKGNtZCk7CisJCXJldHVybjsKKwl9CisKKwlmY19zZXFfZXhjaChjbWQtPnNlcSktPmxwLT50dC5zZXFfc2V0X3Jlc3AoY21kLT5zZXEsIGZ0X3JlY3Zfc2VxLCBjbWQpOworCisJcmV0ID0gZnRfZ2V0X2x1bl9mb3JfY21kKGNtZCwgZmNwLT5mY19sdW4pOworCWlmIChyZXQgPCAwKSB7CisJCWZ0X2R1bXBfY21kKGNtZCwgX19mdW5jX18pOworCQl0cmFuc3BvcnRfc2VuZF9jaGVja19jb25kaXRpb25fYW5kX3NlbnNlKCZjbWQtPnNlX2NtZCwKKwkJCWNtZC0+c2VfY21kLnNjc2lfc2Vuc2VfcmVhc29uLCAwKTsKKwkJcmV0dXJuOworCX0KKworCXJldCA9IHRyYW5zcG9ydF9nZW5lcmljX2FsbG9jYXRlX3Rhc2tzKHNlX2NtZCwgY21kLT5jZGIpOworCisJRlRfSU9fREJHKCJyX2N0bCAleCBhbGxvYyB0YXNrIHJldCAlZFxuIiwgZmgtPmZoX3JfY3RsLCByZXQpOworCWZ0X2R1bXBfY21kKGNtZCwgX19mdW5jX18pOworCisJaWYgKHJldCA9PSAtMSkgeworCQl0cmFuc3BvcnRfc2VuZF9jaGVja19jb25kaXRpb25fYW5kX3NlbnNlKHNlX2NtZCwKKwkJCQlUQ01fTE9HSUNBTF9VTklUX0NPTU1VTklDQVRJT05fRkFJTFVSRSwgMCk7CisJCXRyYW5zcG9ydF9nZW5lcmljX2ZyZWVfY21kKHNlX2NtZCwgMCwgMSwgMCk7CisJCXJldHVybjsKKwl9CisJaWYgKHJldCA9PSAtMikgeworCQlpZiAoc2VfY21kLT5zZV9jbWRfZmxhZ3MgJiBTQ0ZfU0NTSV9SRVNFUlZBVElPTl9DT05GTElDVCkKKwkJCWZ0X3F1ZXVlX3N0YXR1cyhzZV9jbWQpOworCQllbHNlCisJCQl0cmFuc3BvcnRfc2VuZF9jaGVja19jb25kaXRpb25fYW5kX3NlbnNlKHNlX2NtZCwKKwkJCQkJc2VfY21kLT5zY3NpX3NlbnNlX3JlYXNvbiwgMCk7CisJCXRyYW5zcG9ydF9nZW5lcmljX2ZyZWVfY21kKHNlX2NtZCwgMCwgMSwgMCk7CisJCXJldHVybjsKKwl9CisJdHJhbnNwb3J0X2dlbmVyaWNfaGFuZGxlX2NkYihzZV9jbWQpOworCXJldHVybjsKKworZXJyOgorCWZ0X3NlbmRfcmVzcF9jb2RlKGNtZCwgRkNQX0NNTkRfRklFTERTX0lOVkFMSUQpOworCXJldHVybjsKK30KKworLyoKKyAqIEhhbmRsZSByZXF1ZXN0IGluIHRoZSBjb21tYW5kIHRocmVhZC4KKyAqLworc3RhdGljIHZvaWQgZnRfZXhlY19yZXEoc3RydWN0IGZ0X2NtZCAqY21kKQoreworCUZUX0lPX0RCRygiY21kIHN0YXRlICV4XG4iLCBjbWQtPnN0YXRlKTsKKwlzd2l0Y2ggKGNtZC0+c3RhdGUpIHsKKwljYXNlIEZDX0NNRF9TVF9ORVc6CisJCWZ0X3NlbmRfY21kKGNtZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworLyoKKyAqIFByb2Nlc3NpbmcgdGhyZWFkLgorICogQ3VycmVudGx5IG9uZSB0aHJlYWQgcGVyIHRwZy4KKyAqLworaW50IGZ0X3RocmVhZCh2b2lkICphcmcpCit7CisJc3RydWN0IGZ0X3RwZyAqdHBnID0gYXJnOworCXN0cnVjdCBzZV9xdWV1ZV9vYmogKnFvYmogPSAmdHBnLT5xb2JqOworCXN0cnVjdCBmdF9jbWQgKmNtZDsKKwlpbnQgcmV0OworCisJc2V0X3VzZXJfbmljZShjdXJyZW50LCAtMjApOworCisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHFvYmotPnRocmVhZF93cSwKKwkJCWF0b21pY19yZWFkKCZxb2JqLT5xdWV1ZV9jbnQpIHx8IGt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7CisJCWlmIChyZXQgPCAwIHx8IGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKKwkJCWdvdG8gb3V0OworCQljbWQgPSBmdF9kZXF1ZXVlX2NtZChxb2JqKTsKKwkJaWYgKGNtZCkKKwkJCWZ0X2V4ZWNfcmVxKGNtZCk7CisJfQorCitvdXQ6CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90Y21fZmMvdGZjX2NvbmYuYyBiL2RyaXZlcnMvdGFyZ2V0L3RjbV9mYy90ZmNfY29uZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZGJiZmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3RhcmdldC90Y21fZmMvdGZjX2NvbmYuYwpAQCAtMCwwICsxLDY3NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOiAgdGNtX2ZjLmMKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGNvbmZpZ2ZzIGltcGxlbWVudGF0aW9uIGZvciBUQ01fZmMgZmFicmljIG5vZGUuCisgKiBCYXNlZCBvbiB0Y21fbG9vcF9jb25maWdmcy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIENpc2NvIFN5c3RlbXMsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIFJpc2luZyBUaWRlLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBMaW51eC1pU0NTSS5vcmcKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBOaWNob2xhcyBBLiBCZWxsaW5nZXIgPG5hYkBsaW51eC1pc2NzaS5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxnZW5lcmF0ZWQvdXRzcmVsZWFzZS5oPgorI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZ2ZzLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KKyNpbmNsdWRlIDxzY3NpL2xpYmZjLmg+CisKKyNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfYmFzZS5oPgorI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV90cmFuc3BvcnQuaD4KKyNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfZmFicmljX29wcy5oPgorI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV9mYWJyaWNfY29uZmlnZnMuaD4KKyNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfZmFicmljX2xpYi5oPgorI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV9kZXZpY2UuaD4KKyNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfdHBnLmg+CisjaW5jbHVkZSA8dGFyZ2V0L3RhcmdldF9jb3JlX2NvbmZpZ2ZzLmg+CisjaW5jbHVkZSA8dGFyZ2V0L3RhcmdldF9jb3JlX2Jhc2UuaD4KKyNpbmNsdWRlIDx0YXJnZXQvY29uZmlnZnNfbWFjcm9zLmg+CisKKyNpbmNsdWRlICJ0Y21fZmMuaCIKKworc3RydWN0IHRhcmdldF9mYWJyaWNfY29uZmlnZnMgKmZ0X2NvbmZpZ2ZzOworCitMSVNUX0hFQUQoZnRfbHBvcnRfbGlzdCk7CitERUZJTkVfTVVURVgoZnRfbHBvcnRfbG9jayk7CisKK3Vuc2lnbmVkIGludCBmdF9kZWJ1Z19sb2dnaW5nOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnX2xvZ2dpbmcsIGZ0X2RlYnVnX2xvZ2dpbmcsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWdfbG9nZ2luZywgImEgYml0IG1hc2sgb2YgbG9nZ2luZyBsZXZlbHMiKTsKKworLyoKKyAqIFBhcnNlIFdXTi4KKyAqIElmIHN0cmljdCwgd2UgcmVxdWlyZSBsb3dlci1jYXNlIGhleCBhbmQgY29sb24gc2VwYXJhdG9ycyB0byBiZSBzdXJlCisgKiB0aGUgbmFtZSBpcyB0aGUgc2FtZSBhcyB3aGF0IHdvdWxkIGJlIGdlbmVyYXRlZCBieSBmdF9mb3JtYXRfd3duKCkKKyAqIHNvIHRoZSBuYW1lIGFuZCB3d24gYXJlIG1hcHBlZCBvbmUtdG8tb25lLgorICovCitzdGF0aWMgc3NpemVfdCBmdF9wYXJzZV93d24oY29uc3QgY2hhciAqbmFtZSwgdTY0ICp3d24sIGludCBzdHJpY3QpCit7CisJY29uc3QgY2hhciAqY3A7CisJY2hhciBjOworCXUzMiBuaWJibGU7CisJdTMyIGJ5dGUgPSAwOworCXUzMiBwb3MgPSAwOworCXUzMiBlcnI7CisKKwkqd3duID0gMDsKKwlmb3IgKGNwID0gbmFtZTsgY3AgPCAmbmFtZVtGVF9OQU1FTEVOIC0gMV07IGNwKyspIHsKKwkJYyA9ICpjcDsKKwkJaWYgKGMgPT0gJ1xuJyAmJiBjcFsxXSA9PSAnXDAnKQorCQkJY29udGludWU7CisJCWlmIChzdHJpY3QgJiYgcG9zKysgPT0gMiAmJiBieXRlKysgPCA3KSB7CisJCQlwb3MgPSAwOworCQkJaWYgKGMgPT0gJzonKQorCQkJCWNvbnRpbnVlOworCQkJZXJyID0gMTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQlpZiAoYyA9PSAnXDAnKSB7CisJCQllcnIgPSAyOworCQkJaWYgKHN0cmljdCAmJiBieXRlICE9IDgpCisJCQkJZ290byBmYWlsOworCQkJcmV0dXJuIGNwIC0gbmFtZTsKKwkJfQorCQllcnIgPSAzOworCQlpZiAoaXNkaWdpdChjKSkKKwkJCW5pYmJsZSA9IGMgLSAnMCc7CisJCWVsc2UgaWYgKGlzeGRpZ2l0KGMpICYmIChpc2xvd2VyKGMpIHx8ICFzdHJpY3QpKQorCQkJbmliYmxlID0gdG9sb3dlcihjKSAtICdhJyArIDEwOworCQllbHNlCisJCQlnb3RvIGZhaWw7CisJCSp3d24gPSAoKnd3biA8PCA0KSB8IG5pYmJsZTsKKwl9CisJZXJyID0gNDsKK2ZhaWw6CisJRlRfQ09ORl9EQkcoImVyciAldSBsZW4gJXp1IHBvcyAldSBieXRlICV1XG4iLAorCQkgICAgZXJyLCBjcCAtIG5hbWUsIHBvcywgYnl0ZSk7CisJcmV0dXJuIC0xOworfQorCitzc2l6ZV90IGZ0X2Zvcm1hdF93d24oY2hhciAqYnVmLCBzaXplX3QgbGVuLCB1NjQgd3duKQoreworCXU4IGJbOF07CisKKwlwdXRfdW5hbGlnbmVkX2JlNjQod3duLCBiKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBsZW4sCisJCSAiJTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMngiLAorCQkgYlswXSwgYlsxXSwgYlsyXSwgYlszXSwgYls0XSwgYls1XSwgYls2XSwgYls3XSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGZ0X3d3bl9zaG93KHZvaWQgKmFyZywgY2hhciAqYnVmKQoreworCXU2NCAqd3duID0gYXJnOworCXNzaXplX3QgbGVuOworCisJbGVuID0gZnRfZm9ybWF0X3d3bihidWYsIFBBR0VfU0laRSAtIDIsICp3d24pOworCWJ1ZltsZW4rK10gPSAnXG4nOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90IGZ0X3d3bl9zdG9yZSh2b2lkICphcmcsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzc2l6ZV90IHJldDsKKwl1NjQgd3duOworCisJcmV0ID0gZnRfcGFyc2Vfd3duKGJ1ZiwgJnd3biwgMCk7CisJaWYgKHJldCA+IDApCisJCSoodTY0ICopYXJnID0gd3duOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBBQ0wgYXV0aCBvcHMuCisgKi8KKworc3RhdGljIHNzaXplX3QgZnRfbmFjbF9zaG93X3BvcnRfbmFtZSgKKwlzdHJ1Y3Qgc2Vfbm9kZV9hY2wgKnNlX25hY2wsCisJY2hhciAqcGFnZSkKK3sKKwlzdHJ1Y3QgZnRfbm9kZV9hY2wgKmFjbCA9IGNvbnRhaW5lcl9vZihzZV9uYWNsLAorCQkJc3RydWN0IGZ0X25vZGVfYWNsLCBzZV9ub2RlX2FjbCk7CisKKwlyZXR1cm4gZnRfd3duX3Nob3coJmFjbC0+bm9kZV9hdXRoLnBvcnRfbmFtZSwgcGFnZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGZ0X25hY2xfc3RvcmVfcG9ydF9uYW1lKAorCXN0cnVjdCBzZV9ub2RlX2FjbCAqc2VfbmFjbCwKKwljb25zdCBjaGFyICpwYWdlLAorCXNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZnRfbm9kZV9hY2wgKmFjbCA9IGNvbnRhaW5lcl9vZihzZV9uYWNsLAorCQkJc3RydWN0IGZ0X25vZGVfYWNsLCBzZV9ub2RlX2FjbCk7CisKKwlyZXR1cm4gZnRfd3duX3N0b3JlKCZhY2wtPm5vZGVfYXV0aC5wb3J0X25hbWUsIHBhZ2UsIGNvdW50KTsKK30KKworVEZfTkFDTF9CQVNFX0FUVFIoZnQsIHBvcnRfbmFtZSwgU19JUlVHTyB8IFNfSVdVU1IpOworCitzdGF0aWMgc3NpemVfdCBmdF9uYWNsX3Nob3dfbm9kZV9uYW1lKAorCXN0cnVjdCBzZV9ub2RlX2FjbCAqc2VfbmFjbCwKKwljaGFyICpwYWdlKQoreworCXN0cnVjdCBmdF9ub2RlX2FjbCAqYWNsID0gY29udGFpbmVyX29mKHNlX25hY2wsCisJCQlzdHJ1Y3QgZnRfbm9kZV9hY2wsIHNlX25vZGVfYWNsKTsKKworCXJldHVybiBmdF93d25fc2hvdygmYWNsLT5ub2RlX2F1dGgubm9kZV9uYW1lLCBwYWdlKTsKK30KKworc3RhdGljIHNzaXplX3QgZnRfbmFjbF9zdG9yZV9ub2RlX25hbWUoCisJc3RydWN0IHNlX25vZGVfYWNsICpzZV9uYWNsLAorCWNvbnN0IGNoYXIgKnBhZ2UsCisJc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBmdF9ub2RlX2FjbCAqYWNsID0gY29udGFpbmVyX29mKHNlX25hY2wsCisJCQlzdHJ1Y3QgZnRfbm9kZV9hY2wsIHNlX25vZGVfYWNsKTsKKworCXJldHVybiBmdF93d25fc3RvcmUoJmFjbC0+bm9kZV9hdXRoLm5vZGVfbmFtZSwgcGFnZSwgY291bnQpOworfQorCitURl9OQUNMX0JBU0VfQVRUUihmdCwgbm9kZV9uYW1lLCBTX0lSVUdPIHwgU19JV1VTUik7CisKK3N0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICpmdF9uYWNsX2Jhc2VfYXR0cnNbXSA9IHsKKwkmZnRfbmFjbF9wb3J0X25hbWUuYXR0ciwKKwkmZnRfbmFjbF9ub2RlX25hbWUuYXR0ciwKKwlOVUxMLAorfTsKKworLyoKKyAqIEFDTCBvcHMuCisgKi8KKworLyoKKyAqIEFkZCBBQ0wgZm9yIGFuIGluaXRpYXRvci4gIFRoZSBBQ0wgaXMgbmFtZWQgYXJiaXRyYXJpbHkuCisgKiBUaGUgcG9ydF9uYW1lIGFuZC9vciBub2RlX25hbWUgYXJlIGF0dHJpYnV0ZXMuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2Vfbm9kZV9hY2wgKmZ0X2FkZF9hY2woCisJc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnLAorCXN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLAorCWNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGZ0X25vZGVfYWNsICphY2w7CisJc3RydWN0IGZ0X3RwZyAqdHBnOworCXU2NCB3d3BuOworCXUzMiBxX2RlcHRoOworCisJRlRfQ09ORl9EQkcoImFkZCBhY2wgJXNcbiIsIG5hbWUpOworCXRwZyA9IGNvbnRhaW5lcl9vZihzZV90cGcsIHN0cnVjdCBmdF90cGcsIHNlX3RwZyk7CisKKwlpZiAoZnRfcGFyc2Vfd3duKG5hbWUsICZ3d3BuLCAxKSA8IDApCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJYWNsID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZ0X25vZGVfYWNsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCEoYWNsKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJYWNsLT5ub2RlX2F1dGgucG9ydF9uYW1lID0gd3dwbjsKKworCXFfZGVwdGggPSAzMjsJCS8qIFhYWCBib2d1cyBkZWZhdWx0IC0gZ2V0IGZyb20gdHBnPyAqLworCXJldHVybiBjb3JlX3RwZ19hZGRfaW5pdGlhdG9yX25vZGVfYWNsKCZ0cGctPnNlX3RwZywKKwkJCQkmYWNsLT5zZV9ub2RlX2FjbCwgbmFtZSwgcV9kZXB0aCk7Cit9CisKK3N0YXRpYyB2b2lkIGZ0X2RlbF9hY2woc3RydWN0IHNlX25vZGVfYWNsICpzZV9hY2wpCit7CisJc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnID0gc2VfYWNsLT5zZV90cGc7CisJc3RydWN0IGZ0X3RwZyAqdHBnOworCXN0cnVjdCBmdF9ub2RlX2FjbCAqYWNsID0gY29udGFpbmVyX29mKHNlX2FjbCwKKwkJCQlzdHJ1Y3QgZnRfbm9kZV9hY2wsIHNlX25vZGVfYWNsKTsKKworCUZUX0NPTkZfREJHKCJkZWwgYWNsICVzXG4iLAorCQljb25maWdfaXRlbV9uYW1lKCZzZV9hY2wtPmFjbF9ncm91cC5jZ19pdGVtKSk7CisKKwl0cGcgPSBjb250YWluZXJfb2Yoc2VfdHBnLCBzdHJ1Y3QgZnRfdHBnLCBzZV90cGcpOworCUZUX0NPTkZfREJHKCJkZWwgYWNsICVwIHNlX2FjbCAlcCB0cGcgJXAgc2VfdHBnICVwXG4iLAorCQkgICAgYWNsLCBzZV9hY2wsIHRwZywgJnRwZy0+c2VfdHBnKTsKKworCWNvcmVfdHBnX2RlbF9pbml0aWF0b3Jfbm9kZV9hY2woJnRwZy0+c2VfdHBnLCBzZV9hY2wsIDEpOworCWtmcmVlKGFjbCk7Cit9CisKK3N0cnVjdCBmdF9ub2RlX2FjbCAqZnRfYWNsX2dldChzdHJ1Y3QgZnRfdHBnICp0cGcsIHN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YSkKK3sKKwlzdHJ1Y3QgZnRfbm9kZV9hY2wgKmZvdW5kID0gTlVMTDsKKwlzdHJ1Y3QgZnRfbm9kZV9hY2wgKmFjbDsKKwlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGcgPSAmdHBnLT5zZV90cGc7CisJc3RydWN0IHNlX25vZGVfYWNsICpzZV9hY2w7CisKKwlzcGluX2xvY2tfYmgoJnNlX3RwZy0+YWNsX25vZGVfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZV9hY2wsICZzZV90cGctPmFjbF9ub2RlX2xpc3QsIGFjbF9saXN0KSB7CisJCWFjbCA9IGNvbnRhaW5lcl9vZihzZV9hY2wsIHN0cnVjdCBmdF9ub2RlX2FjbCwgc2Vfbm9kZV9hY2wpOworCQlGVF9DT05GX0RCRygiYWNsICVwIHBvcnRfbmFtZSAlbGx4XG4iLAorCQkJYWNsLCAodW5zaWduZWQgbG9uZyBsb25nKWFjbC0+bm9kZV9hdXRoLnBvcnRfbmFtZSk7CisJCWlmIChhY2wtPm5vZGVfYXV0aC5wb3J0X25hbWUgPT0gcmRhdGEtPmlkcy5wb3J0X25hbWUgfHwKKwkJICAgIGFjbC0+bm9kZV9hdXRoLm5vZGVfbmFtZSA9PSByZGF0YS0+aWRzLm5vZGVfbmFtZSkgeworCQkJRlRfQ09ORl9EQkcoImFjbCAlcCBwb3J0X25hbWUgJWxseCBtYXRjaGVkXG4iLCBhY2wsCisJCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmRhdGEtPmlkcy5wb3J0X25hbWUpOworCQkJZm91bmQgPSBhY2w7CisJCQkvKiBYWFggbmVlZCB0byBob2xkIG9udG8gQUNMICovCisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9ja19iaCgmc2VfdHBnLT5hY2xfbm9kZV9sb2NrKTsKKwlyZXR1cm4gZm91bmQ7Cit9CisKK3N0cnVjdCBzZV9ub2RlX2FjbCAqZnRfdHBnX2FsbG9jX2ZhYnJpY19hY2woc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnKQoreworCXN0cnVjdCBmdF9ub2RlX2FjbCAqYWNsOworCisJYWNsID0ga3phbGxvYyhzaXplb2YoKmFjbCksIEdGUF9LRVJORUwpOworCWlmICghKGFjbCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gYWxsb2NhdGUgc3RydWN0IGZ0X25vZGVfYWNsXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCUZUX0NPTkZfREJHKCJhY2wgJXBcbiIsIGFjbCk7CisJcmV0dXJuICZhY2wtPnNlX25vZGVfYWNsOworfQorCitzdGF0aWMgdm9pZCBmdF90cGdfcmVsZWFzZV9mYWJyaWNfYWNsKHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZywKKwkJCQkgICAgICBzdHJ1Y3Qgc2Vfbm9kZV9hY2wgKnNlX2FjbCkKK3sKKwlzdHJ1Y3QgZnRfbm9kZV9hY2wgKmFjbCA9IGNvbnRhaW5lcl9vZihzZV9hY2wsCisJCQkJc3RydWN0IGZ0X25vZGVfYWNsLCBzZV9ub2RlX2FjbCk7CisKKwlGVF9DT05GX0RCRyhLRVJOX0lORk8gImFjbCAlcFxuIiwgYWNsKTsKKwlrZnJlZShhY2wpOworfQorCisvKgorICogbG9jYWxfcG9ydCBwb3J0X2dyb3VwICh0cGcpIG9wcy4KKyAqLworc3RhdGljIHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKmZ0X2FkZF90cGcoCisJc3RydWN0IHNlX3d3biAqd3duLAorCXN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLAorCWNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGZ0X2xwb3J0X2FjbCAqbGFjbDsKKwlzdHJ1Y3QgZnRfdHBnICp0cGc7CisJdW5zaWduZWQgbG9uZyBpbmRleDsKKwlpbnQgcmV0OworCisJRlRfQ09ORl9EQkcoInRjbV9mYzogYWRkIHRwZyAlc1xuIiwgbmFtZSk7CisKKwkvKgorCSAqIE5hbWUgbXVzdCBiZSAidHBndF8iIGZvbGxvd2VkIGJ5IHRoZSBpbmRleC4KKwkgKi8KKwlpZiAoc3Ryc3RyKG5hbWUsICJ0cGd0XyIpICE9IG5hbWUpCisJCXJldHVybiBOVUxMOworCWlmIChzdHJpY3Rfc3RydG91bChuYW1lICsgNSwgMTAsICZpbmRleCkgfHwgaW5kZXggPiBVSU5UX01BWCkKKwkJcmV0dXJuIE5VTEw7CisKKwlsYWNsID0gY29udGFpbmVyX29mKHd3biwgc3RydWN0IGZ0X2xwb3J0X2FjbCwgZmNfbHBvcnRfd3duKTsKKwl0cGcgPSBremFsbG9jKHNpemVvZigqdHBnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0cGcpCisJCXJldHVybiBOVUxMOworCXRwZy0+aW5kZXggPSBpbmRleDsKKwl0cGctPmxwb3J0X2FjbCA9IGxhY2w7CisJSU5JVF9MSVNUX0hFQUQoJnRwZy0+bHVuX2xpc3QpOworCXRyYW5zcG9ydF9pbml0X3F1ZXVlX29iaigmdHBnLT5xb2JqKTsKKworCXJldCA9IGNvcmVfdHBnX3JlZ2lzdGVyKCZmdF9jb25maWdmcy0+dGZfb3BzLCB3d24sICZ0cGctPnNlX3RwZywKKwkJCQkodm9pZCAqKXRwZywgVFJBTlNQT1JUX1RQR19UWVBFX05PUk1BTCk7CisJaWYgKHJldCA8IDApIHsKKwkJa2ZyZWUodHBnKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJdHBnLT50aHJlYWQgPSBrdGhyZWFkX3J1bihmdF90aHJlYWQsIHRwZywgImZ0X3RwZyVsdSIsIGluZGV4KTsKKwlpZiAoSVNfRVJSKHRwZy0+dGhyZWFkKSkgeworCQlrZnJlZSh0cGcpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwltdXRleF9sb2NrKCZmdF9scG9ydF9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZ0cGctPmxpc3QsICZsYWNsLT50cGdfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZmdF9scG9ydF9sb2NrKTsKKworCXJldHVybiAmdHBnLT5zZV90cGc7Cit9CisKK3N0YXRpYyB2b2lkIGZ0X2RlbF90cGcoc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnKQoreworCXN0cnVjdCBmdF90cGcgKnRwZyA9IGNvbnRhaW5lcl9vZihzZV90cGcsIHN0cnVjdCBmdF90cGcsIHNlX3RwZyk7CisKKwlGVF9DT05GX0RCRygiZGVsIHRwZyAlc1xuIiwKKwkJICAgIGNvbmZpZ19pdGVtX25hbWUoJnRwZy0+c2VfdHBnLnRwZ19ncm91cC5jZ19pdGVtKSk7CisKKwlrdGhyZWFkX3N0b3AodHBnLT50aHJlYWQpOworCisJLyogV2FpdCBmb3Igc2Vzc2lvbnMgdG8gYmUgZnJlZWQgdGhydSBSQ1UsIGZvciBCVUdfT04gYmVsb3cgKi8KKwlzeW5jaHJvbml6ZV9yY3UoKTsKKworCW11dGV4X2xvY2soJmZ0X2xwb3J0X2xvY2spOworCWxpc3RfZGVsKCZ0cGctPmxpc3QpOworCWlmICh0cGctPnRwb3J0KSB7CisJCXRwZy0+dHBvcnQtPnRwZyA9IE5VTEw7CisJCXRwZy0+dHBvcnQgPSBOVUxMOworCX0KKwltdXRleF91bmxvY2soJmZ0X2xwb3J0X2xvY2spOworCisJY29yZV90cGdfZGVyZWdpc3RlcihzZV90cGcpOworCWtmcmVlKHRwZyk7Cit9CisKKy8qCisgKiBWZXJpZnkgdGhhdCBhbiBscG9ydCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgdGNtX2ZjIG1vZHVsZSwgYW5kIHJldHVybgorICogdGhlIHRhcmdldCBwb3J0IGdyb3VwIHRoYXQgc2hvdWxkIGJlIHVzZWQuCisgKgorICogVGhlIGNhbGxlciBob2xkcyBmdF9scG9ydF9sb2NrLgorICovCitzdHJ1Y3QgZnRfdHBnICpmdF9scG9ydF9maW5kX3RwZyhzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KQoreworCXN0cnVjdCBmdF9scG9ydF9hY2wgKmxhY2w7CisJc3RydWN0IGZ0X3RwZyAqdHBnOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShsYWNsLCAmZnRfbHBvcnRfbGlzdCwgbGlzdCkgeworCQlpZiAobGFjbC0+d3dwbiA9PSBscG9ydC0+d3dwbikgeworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0cGcsICZsYWNsLT50cGdfbGlzdCwgbGlzdCkKKwkJCQlyZXR1cm4gdHBnOyAvKiBYWFggZm9yIG5vdyByZXR1cm4gZmlyc3QgZW50cnkgKi8KKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCXJldHVybiBOVUxMOworfQorCisvKgorICogdGFyZ2V0IGNvbmZpZyBpbnN0YW5jZSBvcHMuCisgKi8KKworLyoKKyAqIEFkZCBscG9ydCB0byBhbGxvd2VkIGNvbmZpZy4KKyAqIFRoZSBuYW1lIGlzIHRoZSBXV1BOIGluIGxvd2VyLWNhc2UgQVNDSUksIGNvbG9uLXNlcGFyYXRlZCBieXRlcy4KKyAqLworc3RhdGljIHN0cnVjdCBzZV93d24gKmZ0X2FkZF9scG9ydCgKKwlzdHJ1Y3QgdGFyZ2V0X2ZhYnJpY19jb25maWdmcyAqdGYsCisJc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsCisJY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZnRfbHBvcnRfYWNsICpsYWNsOworCXN0cnVjdCBmdF9scG9ydF9hY2wgKm9sZF9sYWNsOworCXU2NCB3d3BuOworCisJRlRfQ09ORl9EQkcoImFkZCBscG9ydCAlc1xuIiwgbmFtZSk7CisJaWYgKGZ0X3BhcnNlX3d3bihuYW1lLCAmd3dwbiwgMSkgPCAwKQorCQlyZXR1cm4gTlVMTDsKKwlsYWNsID0ga3phbGxvYyhzaXplb2YoKmxhY2wpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxhY2wpCisJCXJldHVybiBOVUxMOworCWxhY2wtPnd3cG4gPSB3d3BuOworCUlOSVRfTElTVF9IRUFEKCZsYWNsLT50cGdfbGlzdCk7CisKKwltdXRleF9sb2NrKCZmdF9scG9ydF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9sZF9sYWNsLCAmZnRfbHBvcnRfbGlzdCwgbGlzdCkgeworCQlpZiAob2xkX2xhY2wtPnd3cG4gPT0gd3dwbikgeworCQkJbXV0ZXhfdW5sb2NrKCZmdF9scG9ydF9sb2NrKTsKKwkJCWtmcmVlKGxhY2wpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisJbGlzdF9hZGRfdGFpbCgmbGFjbC0+bGlzdCwgJmZ0X2xwb3J0X2xpc3QpOworCWZ0X2Zvcm1hdF93d24obGFjbC0+bmFtZSwgc2l6ZW9mKGxhY2wtPm5hbWUpLCB3d3BuKTsKKwltdXRleF91bmxvY2soJmZ0X2xwb3J0X2xvY2spOworCisJcmV0dXJuICZsYWNsLT5mY19scG9ydF93d247Cit9CisKK3N0YXRpYyB2b2lkIGZ0X2RlbF9scG9ydChzdHJ1Y3Qgc2Vfd3duICp3d24pCit7CisJc3RydWN0IGZ0X2xwb3J0X2FjbCAqbGFjbCA9IGNvbnRhaW5lcl9vZih3d24sCisJCQkJc3RydWN0IGZ0X2xwb3J0X2FjbCwgZmNfbHBvcnRfd3duKTsKKworCUZUX0NPTkZfREJHKCJkZWwgbHBvcnQgJXNcbiIsCisJCQljb25maWdfaXRlbV9uYW1lKCZ3d24tPnd3bl9ncm91cC5jZ19pdGVtKSk7CisJbXV0ZXhfbG9jaygmZnRfbHBvcnRfbG9jayk7CisJbGlzdF9kZWwoJmxhY2wtPmxpc3QpOworCW11dGV4X3VubG9jaygmZnRfbHBvcnRfbG9jayk7CisKKwlrZnJlZShsYWNsKTsKK30KKworc3RhdGljIHNzaXplX3QgZnRfd3duX3Nob3dfYXR0cl92ZXJzaW9uKAorCXN0cnVjdCB0YXJnZXRfZmFicmljX2NvbmZpZ2ZzICp0ZiwKKwljaGFyICpwYWdlKQoreworCXJldHVybiBzcHJpbnRmKHBhZ2UsICJUQ00gRkMgIiBGVF9WRVJTSU9OICIgb24gJXMvJXMgb24gIgorCQkiIlVUU19SRUxFQVNFIlxuIiwgIHV0c25hbWUoKS0+c3lzbmFtZSwgdXRzbmFtZSgpLT5tYWNoaW5lKTsKK30KKworVEZfV1dOX0FUVFJfUk8oZnQsIHZlcnNpb24pOworCitzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqZnRfd3duX2F0dHJzW10gPSB7CisJJmZ0X3d3bl92ZXJzaW9uLmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBjaGFyICpmdF9nZXRfZmFicmljX25hbWUodm9pZCkKK3sKKwlyZXR1cm4gImZjIjsKK30KKworc3RhdGljIGNoYXIgKmZ0X2dldF9mYWJyaWNfd3duKHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZykKK3sKKwlzdHJ1Y3QgZnRfdHBnICp0cGcgPSBzZV90cGctPnNlX3RwZ19mYWJyaWNfcHRyOworCisJcmV0dXJuIHRwZy0+bHBvcnRfYWNsLT5uYW1lOworfQorCitzdGF0aWMgdTE2IGZ0X2dldF90YWcoc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnKQoreworCXN0cnVjdCBmdF90cGcgKnRwZyA9IHNlX3RwZy0+c2VfdHBnX2ZhYnJpY19wdHI7CisKKwkvKgorCSAqIFRoaXMgdGFnIGlzIHVzZWQgd2hlbiBmb3JtaW5nIFNDU0kgTmFtZSBpZGVudGlmaWVyIGluIEVWUEQ9MSAweDgzCisJICogdG8gcmVwcmVzZW50IHRoZSBTQ1NJIFRhcmdldCBQb3J0LgorCSAqLworCXJldHVybiB0cGctPmluZGV4OworfQorCitzdGF0aWMgdTMyIGZ0X2dldF9kZWZhdWx0X2RlcHRoKHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZykKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBmdF9jaGVja19mYWxzZShzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGcpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZ0X3NldF9kZWZhdWx0X25vZGVfYXR0cihzdHJ1Y3Qgc2Vfbm9kZV9hY2wgKnNlX25hY2wpCit7Cit9CisKK3N0YXRpYyB1MTYgZnRfZ2V0X2ZhYnJpY19zZW5zZV9sZW4odm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUxNiBmdF9zZXRfZmFicmljX3NlbnNlX2xlbihzdHJ1Y3Qgc2VfY21kICpzZV9jbWQsIHUzMiBzZW5zZV9sZW4pCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgZnRfdHBnX2dldF9pbnN0X2luZGV4KHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZykKK3sKKwlzdHJ1Y3QgZnRfdHBnICp0cGcgPSBzZV90cGctPnNlX3RwZ19mYWJyaWNfcHRyOworCisJcmV0dXJuIHRwZy0+aW5kZXg7Cit9CisKK3N0YXRpYyB1NjQgZnRfcGFja19sdW4odW5zaWduZWQgaW50IGluZGV4KQoreworCVdBUk5fT04oaW5kZXggPj0gMjU2KTsKKwkvKiBDYWxsZXIgd2FudHMgdGhpcyBieXRlLXN3YXBwZWQgKi8KKwlyZXR1cm4gY3B1X3RvX2xlNjQoKGluZGV4ICYgMHhmZikgPDwgOCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGFyZ2V0X2NvcmVfZmFicmljX29wcyBmdF9mYWJyaWNfb3BzID0geworCS5nZXRfZmFicmljX25hbWUgPQkJZnRfZ2V0X2ZhYnJpY19uYW1lLAorCS5nZXRfZmFicmljX3Byb3RvX2lkZW50ID0JZmNfZ2V0X2ZhYnJpY19wcm90b19pZGVudCwKKwkudHBnX2dldF93d24gPQkJCWZ0X2dldF9mYWJyaWNfd3duLAorCS50cGdfZ2V0X3RhZyA9CQkJZnRfZ2V0X3RhZywKKwkudHBnX2dldF9kZWZhdWx0X2RlcHRoID0JZnRfZ2V0X2RlZmF1bHRfZGVwdGgsCisJLnRwZ19nZXRfcHJfdHJhbnNwb3J0X2lkID0JZmNfZ2V0X3ByX3RyYW5zcG9ydF9pZCwKKwkudHBnX2dldF9wcl90cmFuc3BvcnRfaWRfbGVuID0JZmNfZ2V0X3ByX3RyYW5zcG9ydF9pZF9sZW4sCisJLnRwZ19wYXJzZV9wcl9vdXRfdHJhbnNwb3J0X2lkID0gZmNfcGFyc2VfcHJfb3V0X3RyYW5zcG9ydF9pZCwKKwkudHBnX2NoZWNrX2RlbW9fbW9kZSA9CQlmdF9jaGVja19mYWxzZSwKKwkudHBnX2NoZWNrX2RlbW9fbW9kZV9jYWNoZSA9CWZ0X2NoZWNrX2ZhbHNlLAorCS50cGdfY2hlY2tfZGVtb19tb2RlX3dyaXRlX3Byb3RlY3QgPSBmdF9jaGVja19mYWxzZSwKKwkudHBnX2NoZWNrX3Byb2RfbW9kZV93cml0ZV9wcm90ZWN0ID0gZnRfY2hlY2tfZmFsc2UsCisJLnRwZ19hbGxvY19mYWJyaWNfYWNsID0JCWZ0X3RwZ19hbGxvY19mYWJyaWNfYWNsLAorCS50cGdfcmVsZWFzZV9mYWJyaWNfYWNsID0JZnRfdHBnX3JlbGVhc2VfZmFicmljX2FjbCwKKwkudHBnX2dldF9pbnN0X2luZGV4ID0JCWZ0X3RwZ19nZXRfaW5zdF9pbmRleCwKKwkuY2hlY2tfc3RvcF9mcmVlID0JCWZ0X2NoZWNrX3N0b3BfZnJlZSwKKwkucmVsZWFzZV9jbWRfdG9fcG9vbCA9CQlmdF9yZWxlYXNlX2NtZCwKKwkucmVsZWFzZV9jbWRfZGlyZWN0ID0JCWZ0X3JlbGVhc2VfY21kLAorCS5zaHV0ZG93bl9zZXNzaW9uID0JCWZ0X3Nlc3Nfc2h1dGRvd24sCisJLmNsb3NlX3Nlc3Npb24gPQkJZnRfc2Vzc19jbG9zZSwKKwkuc3RvcF9zZXNzaW9uID0JCQlmdF9zZXNzX3N0b3AsCisJLmZhbGxfYmFja190b19lcmwwID0JCWZ0X3Nlc3Nfc2V0X2VybDAsCisJLnNlc3NfbG9nZ2VkX2luID0JCWZ0X3Nlc3NfbG9nZ2VkX2luLAorCS5zZXNzX2dldF9pbmRleCA9CQlmdF9zZXNzX2dldF9pbmRleCwKKwkuc2Vzc19nZXRfaW5pdGlhdG9yX3NpZCA9CU5VTEwsCisJLndyaXRlX3BlbmRpbmcgPQkJZnRfd3JpdGVfcGVuZGluZywKKwkud3JpdGVfcGVuZGluZ19zdGF0dXMgPQkJZnRfd3JpdGVfcGVuZGluZ19zdGF0dXMsCisJLnNldF9kZWZhdWx0X25vZGVfYXR0cmlidXRlcyA9CWZ0X3NldF9kZWZhdWx0X25vZGVfYXR0ciwKKwkuZ2V0X3Rhc2tfdGFnID0JCQlmdF9nZXRfdGFza190YWcsCisJLmdldF9jbWRfc3RhdGUgPQkJZnRfZ2V0X2NtZF9zdGF0ZSwKKwkubmV3X2NtZF9mYWlsdXJlID0JCWZ0X25ld19jbWRfZmFpbHVyZSwKKwkucXVldWVfZGF0YV9pbiA9CQlmdF9xdWV1ZV9kYXRhX2luLAorCS5xdWV1ZV9zdGF0dXMgPQkJCWZ0X3F1ZXVlX3N0YXR1cywKKwkucXVldWVfdG1fcnNwID0JCQlmdF9xdWV1ZV90bV9yZXNwLAorCS5nZXRfZmFicmljX3NlbnNlX2xlbiA9CQlmdF9nZXRfZmFicmljX3NlbnNlX2xlbiwKKwkuc2V0X2ZhYnJpY19zZW5zZV9sZW4gPQkJZnRfc2V0X2ZhYnJpY19zZW5zZV9sZW4sCisJLmlzX3N0YXRlX3JlbW92ZSA9CQlmdF9pc19zdGF0ZV9yZW1vdmUsCisJLnBhY2tfbHVuID0JCQlmdF9wYWNrX2x1biwKKwkvKgorCSAqIFNldHVwIGZ1bmN0aW9uIHBvaW50ZXJzIGZvciBnZW5lcmljIGxvZ2ljIGluCisJICogdGFyZ2V0X2NvcmVfZmFicmljX2NvbmZpZ2ZzLmMKKwkgKi8KKwkuZmFicmljX21ha2Vfd3duID0JCSZmdF9hZGRfbHBvcnQsCisJLmZhYnJpY19kcm9wX3d3biA9CQkmZnRfZGVsX2xwb3J0LAorCS5mYWJyaWNfbWFrZV90cGcgPQkJJmZ0X2FkZF90cGcsCisJLmZhYnJpY19kcm9wX3RwZyA9CQkmZnRfZGVsX3RwZywKKwkuZmFicmljX3Bvc3RfbGluayA9CQlOVUxMLAorCS5mYWJyaWNfcHJlX3VubGluayA9CQlOVUxMLAorCS5mYWJyaWNfbWFrZV9ucCA9CQlOVUxMLAorCS5mYWJyaWNfZHJvcF9ucCA9CQlOVUxMLAorCS5mYWJyaWNfbWFrZV9ub2RlYWNsID0JCSZmdF9hZGRfYWNsLAorCS5mYWJyaWNfZHJvcF9ub2RlYWNsID0JCSZmdF9kZWxfYWNsLAorfTsKKworaW50IGZ0X3JlZ2lzdGVyX2NvbmZpZ2ZzKHZvaWQpCit7CisJc3RydWN0IHRhcmdldF9mYWJyaWNfY29uZmlnZnMgKmZhYnJpYzsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBSZWdpc3RlciB0aGUgdG9wIGxldmVsIHN0cnVjdCBjb25maWdfaXRlbV90eXBlIHdpdGggVENNIGNvcmUKKwkgKi8KKwlmYWJyaWMgPSB0YXJnZXRfZmFicmljX2NvbmZpZ2ZzX2luaXQoVEhJU19NT0RVTEUsICJmYyIpOworCWlmICghZmFicmljKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiB0YXJnZXRfZmFicmljX2NvbmZpZ2ZzX2luaXQoKSBmYWlsZWQhXG4iLAorCQkgICAgICAgX19mdW5jX18pOworCQlyZXR1cm4gLTE7CisJfQorCWZhYnJpYy0+dGZfb3BzID0gZnRfZmFicmljX29wczsKKworCS8qIEFsbG93aW5nIHN1cHBvcnQgZm9yIHRhc2tfc2dfY2hhaW5pbmcgKi8KKwlmYWJyaWMtPnRmX29wcy50YXNrX3NnX2NoYWluaW5nID0gMTsKKworCS8qCisJICogU2V0dXAgZGVmYXVsdCBhdHRyaWJ1dGUgbGlzdHMgZm9yIHZhcmlvdXMgZmFicmljLT50Zl9jaXRfdG1wbAorCSAqLworCVRGX0NJVF9UTVBMKGZhYnJpYyktPnRmY193d25fY2l0LmN0X2F0dHJzID0gZnRfd3duX2F0dHJzOworCVRGX0NJVF9UTVBMKGZhYnJpYyktPnRmY190cGdfYmFzZV9jaXQuY3RfYXR0cnMgPSBOVUxMOworCVRGX0NJVF9UTVBMKGZhYnJpYyktPnRmY190cGdfYXR0cmliX2NpdC5jdF9hdHRycyA9IE5VTEw7CisJVEZfQ0lUX1RNUEwoZmFicmljKS0+dGZjX3RwZ19wYXJhbV9jaXQuY3RfYXR0cnMgPSBOVUxMOworCVRGX0NJVF9UTVBMKGZhYnJpYyktPnRmY190cGdfbnBfYmFzZV9jaXQuY3RfYXR0cnMgPSBOVUxMOworCVRGX0NJVF9UTVBMKGZhYnJpYyktPnRmY190cGdfbmFjbF9iYXNlX2NpdC5jdF9hdHRycyA9CisJCQkJCQkgICAgZnRfbmFjbF9iYXNlX2F0dHJzOworCVRGX0NJVF9UTVBMKGZhYnJpYyktPnRmY190cGdfbmFjbF9hdHRyaWJfY2l0LmN0X2F0dHJzID0gTlVMTDsKKwlURl9DSVRfVE1QTChmYWJyaWMpLT50ZmNfdHBnX25hY2xfYXV0aF9jaXQuY3RfYXR0cnMgPSBOVUxMOworCVRGX0NJVF9UTVBMKGZhYnJpYyktPnRmY190cGdfbmFjbF9wYXJhbV9jaXQuY3RfYXR0cnMgPSBOVUxMOworCS8qCisJICogcmVnaXN0ZXIgdGhlIGZhYnJpYyBmb3IgdXNlIHdpdGhpbiBUQ00KKwkgKi8KKwlyZXQgPSB0YXJnZXRfZmFicmljX2NvbmZpZ2ZzX3JlZ2lzdGVyKGZhYnJpYyk7CisJaWYgKHJldCA8IDApIHsKKwkJRlRfQ09ORl9EQkcoInRhcmdldF9mYWJyaWNfY29uZmlnZnNfcmVnaXN0ZXIoKSBmb3IiCisJCQkgICAgIiBGQyBUYXJnZXQgZmFpbGVkIVxuIik7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICIlczogdGFyZ2V0X2ZhYnJpY19jb25maWdmc19yZWdpc3RlcigpIGZhaWxlZCFcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCXRhcmdldF9mYWJyaWNfY29uZmlnZnNfZnJlZShmYWJyaWMpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyoKKwkgKiBTZXR1cCBvdXIgbG9jYWwgcG9pbnRlciB0byAqZmFicmljLgorCSAqLworCWZ0X2NvbmZpZ2ZzID0gZmFicmljOworCXJldHVybiAwOworfQorCit2b2lkIGZ0X2RlcmVnaXN0ZXJfY29uZmlnZnModm9pZCkKK3sKKwlpZiAoIWZ0X2NvbmZpZ2ZzKQorCQlyZXR1cm47CisJdGFyZ2V0X2ZhYnJpY19jb25maWdmc19kZXJlZ2lzdGVyKGZ0X2NvbmZpZ2ZzKTsKKwlmdF9jb25maWdmcyA9IE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZnRfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBmdF9scG9ydF9ub3RpZnkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGZ0X2luaXQodm9pZCkKK3sKKwlpZiAoZnRfcmVnaXN0ZXJfY29uZmlnZnMoKSkKKwkJcmV0dXJuIC0xOworCWlmIChmY19mYzRfcmVnaXN0ZXJfcHJvdmlkZXIoRkNfVFlQRV9GQ1AsICZmdF9wcm92KSkgeworCQlmdF9kZXJlZ2lzdGVyX2NvbmZpZ2ZzKCk7CisJCXJldHVybiAtMTsKKwl9CisJYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJmZjX2xwb3J0X25vdGlmaWVyX2hlYWQsICZmdF9ub3RpZmllcik7CisJZmNfbHBvcnRfaXRlcmF0ZShmdF9scG9ydF9hZGQsIE5VTEwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZnRfZXhpdCh2b2lkKQoreworCWJsb2NraW5nX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJmZjX2xwb3J0X25vdGlmaWVyX2hlYWQsCisJCQkJCSAgICZmdF9ub3RpZmllcik7CisJZmNfZmM0X2RlcmVnaXN0ZXJfcHJvdmlkZXIoRkNfVFlQRV9GQ1AsICZmdF9wcm92KTsKKwlmY19scG9ydF9pdGVyYXRlKGZ0X2xwb3J0X2RlbCwgTlVMTCk7CisJZnRfZGVyZWdpc3Rlcl9jb25maWdmcygpOworCXN5bmNocm9uaXplX3JjdSgpOworfQorCisjaWZkZWYgTU9EVUxFCitNT0RVTEVfREVTQ1JJUFRJT04oIkZDIFRDTSBmYWJyaWMgZHJpdmVyICIgRlRfVkVSU0lPTik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7Cittb2R1bGVfaW5pdChmdF9pbml0KTsKK21vZHVsZV9leGl0KGZ0X2V4aXQpOworI2VuZGlmIC8qIE1PRFVMRSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGNtX2ZjL3RmY19pby5jIGIvZHJpdmVycy90YXJnZXQvdGNtX2ZjL3RmY19pby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjM2MwZWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3RhcmdldC90Y21fZmMvdGZjX2lvLmMKQEAgLTAsMCArMSwzNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqIFBvcnRpb25zIGJhc2VkIG9uIHRjbV9sb29wX2ZhYnJpY19zY3NpLmMgYW5kIGxpYmZjL2ZjX2ZjcC5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTWlrZSBDaHJpc3RpZQorICogQ29weXJpZ2h0IChjKSAyMDA5IFJpc2luZyBUaWRlLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgTGludXgtaVNDU0kub3JnCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgTmljaG9sYXMgQS4gQmVsbGluZ2VyIDxuYWJAbGludXgtaXNjc2kub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworLyogWFhYIFRCRCBzb21lIGluY2x1ZGVzIG1heSBiZSBleHRyYW5lb3VzICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxnZW5lcmF0ZWQvdXRzcmVsZWFzZS5oPgorI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZ2ZzLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVkZSA8c2NzaS9saWJmYy5oPgorI2luY2x1ZGUgPHNjc2kvZmNfZW5jb2RlLmg+CisKKyNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfYmFzZS5oPgorI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV90cmFuc3BvcnQuaD4KKyNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfZmFicmljX29wcy5oPgorI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV9kZXZpY2UuaD4KKyNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfdHBnLmg+CisjaW5jbHVkZSA8dGFyZ2V0L3RhcmdldF9jb3JlX2NvbmZpZ2ZzLmg+CisjaW5jbHVkZSA8dGFyZ2V0L3RhcmdldF9jb3JlX2Jhc2UuaD4KKyNpbmNsdWRlIDx0YXJnZXQvY29uZmlnZnNfbWFjcm9zLmg+CisKKyNpbmNsdWRlICJ0Y21fZmMuaCIKKworLyoKKyAqIERlbGl2ZXIgcmVhZCBkYXRhIGJhY2sgdG8gaW5pdGlhdG9yLgorICogWFhYIFRCRCBoYW5kbGUgcmVzb3VyY2UgcHJvYmxlbXMgbGF0ZXIuCisgKi8KK2ludCBmdF9xdWV1ZV9kYXRhX2luKHN0cnVjdCBzZV9jbWQgKnNlX2NtZCkKK3sKKwlzdHJ1Y3QgZnRfY21kICpjbWQgPSBjb250YWluZXJfb2Yoc2VfY21kLCBzdHJ1Y3QgZnRfY21kLCBzZV9jbWQpOworCXN0cnVjdCBzZV90cmFuc3BvcnRfdGFzayAqdGFzazsKKwlzdHJ1Y3QgZmNfZnJhbWUgKmZwID0gTlVMTDsKKwlzdHJ1Y3QgZmNfZXhjaCAqZXA7CisJc3RydWN0IGZjX2xwb3J0ICpscG9ydDsKKwlzdHJ1Y3Qgc2VfbWVtICptZW07CisJc2l6ZV90IHJlbWFpbmluZzsKKwl1MzIgZl9jdGwgPSBGQ19GQ19FWF9DVFggfCBGQ19GQ19SRUxfT0ZGOworCXUzMiBtZW1fb2ZmOworCXUzMiBmaF9vZmYgPSAwOworCXUzMiBmcmFtZV9vZmYgPSAwOworCXNpemVfdCBmcmFtZV9sZW4gPSAwOworCXNpemVfdCBtZW1fbGVuOworCXNpemVfdCB0bGVuOworCXNpemVfdCBvZmZfaW5fcGFnZTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlpbnQgdXNlX3NnOworCWludCBlcnJvcjsKKwl2b2lkICpwYWdlX2FkZHI7CisJdm9pZCAqZnJvbTsKKwl2b2lkICp0byA9IE5VTEw7CisKKwllcCA9IGZjX3NlcV9leGNoKGNtZC0+c2VxKTsKKwlscG9ydCA9IGVwLT5scDsKKwljbWQtPnNlcSA9IGxwb3J0LT50dC5zZXFfc3RhcnRfbmV4dChjbWQtPnNlcSk7CisKKwl0YXNrID0gVF9UQVNLKHNlX2NtZCk7CisJQlVHX09OKCF0YXNrKTsKKwlyZW1haW5pbmcgPSBzZV9jbWQtPmRhdGFfbGVuZ3RoOworCisJLyoKKwkgKiBTZXR1cCB0byB1c2UgZmlyc3QgbWVtIGxpc3QgZW50cnkgaWYgYW55LgorCSAqLworCWlmICh0YXNrLT50X3Rhc2tzX3NlX251bSkgeworCQltZW0gPSBsaXN0X2ZpcnN0X2VudHJ5KHRhc2stPnRfbWVtX2xpc3QsCisJCQkgc3RydWN0IHNlX21lbSwgc2VfbGlzdCk7CisJCW1lbV9sZW4gPSBtZW0tPnNlX2xlbjsKKwkJbWVtX29mZiA9IG1lbS0+c2Vfb2ZmOworCQlwYWdlID0gbWVtLT5zZV9wYWdlOworCX0gZWxzZSB7CisJCW1lbSA9IE5VTEw7CisJCW1lbV9sZW4gPSByZW1haW5pbmc7CisJCW1lbV9vZmYgPSAwOworCQlwYWdlID0gTlVMTDsKKwl9CisKKwkvKiBubyBzY2F0dGVyL2dhdGhlciBpbiBza2IgZm9yIG9kZCB3b3JkIGxlbmd0aCBkdWUgdG8gZmNfc2VxX3NlbmQoKSAqLworCXVzZV9zZyA9ICEocmVtYWluaW5nICUgNCk7CisKKwl3aGlsZSAocmVtYWluaW5nKSB7CisJCWlmICghbWVtX2xlbikgeworCQkJQlVHX09OKCFtZW0pOworCQkJbWVtID0gbGlzdF9lbnRyeShtZW0tPnNlX2xpc3QubmV4dCwKKwkJCQlzdHJ1Y3Qgc2VfbWVtLCBzZV9saXN0KTsKKwkJCW1lbV9sZW4gPSBtaW4oKHNpemVfdCltZW0tPnNlX2xlbiwgcmVtYWluaW5nKTsKKwkJCW1lbV9vZmYgPSBtZW0tPnNlX29mZjsKKwkJCXBhZ2UgPSBtZW0tPnNlX3BhZ2U7CisJCX0KKwkJaWYgKCFmcmFtZV9sZW4pIHsKKwkJCS8qCisJCQkgKiBJZiBscG9ydCdzIGhhcyBjYXBhYmlsaXR5IG9mIExhcmdlIFNlbmQgT2ZmbG9hZCBMU08pCisJCQkgKiAsIHRoZW4gYWxsb3cgJ2ZyYW1lX2xlbicgdG8gYmUgYXMgYmlnIGFzICdsc29fbWF4JworCQkJICogaWYgaW5kaWNhdGVkIHRyYW5zZmVyIGxlbmd0aCBpcyA+PSBscG9ydC0+bHNvX21heAorCQkJICovCisJCQlmcmFtZV9sZW4gPSAobHBvcnQtPnNlcV9vZmZsb2FkKSA/IGxwb3J0LT5sc29fbWF4IDoKKwkJCQkJCQkgIGNtZC0+c2Vzcy0+bWF4X2ZyYW1lOworCQkJZnJhbWVfbGVuID0gbWluKGZyYW1lX2xlbiwgcmVtYWluaW5nKTsKKwkJCWZwID0gZmNfZnJhbWVfYWxsb2MobHBvcnQsIHVzZV9zZyA/IDAgOiBmcmFtZV9sZW4pOworCQkJaWYgKCFmcCkKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCXRvID0gZmNfZnJhbWVfcGF5bG9hZF9nZXQoZnAsIDApOworCQkJZmhfb2ZmID0gZnJhbWVfb2ZmOworCQkJZnJhbWVfb2ZmICs9IGZyYW1lX2xlbjsKKwkJCS8qCisJCQkgKiBTZXR1cCB0aGUgZnJhbWUncyBtYXggcGF5bG9hZCB3aGljaCBpcyB1c2VkIGJ5IGJhc2UKKwkJCSAqIGRyaXZlciB0byBpbmRpY2F0ZSBIVyBhYm91dCBtYXggZnJhbWUgc2l6ZSwgc28gdGhhdAorCQkJICogSFcgY2FuIGRvIGZyYWdtZW50YXRpb24gYXBwcm9wcmlhdGVseSBiYXNlZCBvbgorCQkJICogImdzb19tYXhfc2l6ZSIgb2YgdW5kZXJsaW5lIG5ldGRldi4KKwkJCSAqLworCQkJZnJfbWF4X3BheWxvYWQoZnApID0gY21kLT5zZXNzLT5tYXhfZnJhbWU7CisJCX0KKwkJdGxlbiA9IG1pbihtZW1fbGVuLCBmcmFtZV9sZW4pOworCisJCWlmICh1c2Vfc2cpIHsKKwkJCWlmICghbWVtKSB7CisJCQkJQlVHX09OKCF0YXNrLT50X3Rhc2tfYnVmKTsKKwkJCQlwYWdlX2FkZHIgPSB0YXNrLT50X3Rhc2tfYnVmICsgbWVtX29mZjsKKwkJCQkvKgorCQkJCSAqIEluIHRoaXMgY2FzZSwgb2Zmc2V0IGlzICdvZmZzZXRfaW5fcGFnZScgb2YKKwkJCQkgKiAodF90YXNrX2J1ZiArIG1lbV9vZmYpIGluc3RlYWQgb2YgJ21lbV9vZmYnLgorCQkJCSAqLworCQkJCW9mZl9pbl9wYWdlID0gb2Zmc2V0X2luX3BhZ2UocGFnZV9hZGRyKTsKKwkJCQlwYWdlID0gdmlydF90b19wYWdlKHBhZ2VfYWRkcik7CisJCQkJdGxlbiA9IG1pbih0bGVuLCBQQUdFX1NJWkUgLSBvZmZfaW5fcGFnZSk7CisJCQl9IGVsc2UKKwkJCQlvZmZfaW5fcGFnZSA9IG1lbV9vZmY7CisJCQlCVUdfT04oIXBhZ2UpOworCQkJZ2V0X3BhZ2UocGFnZSk7CisJCQlza2JfZmlsbF9wYWdlX2Rlc2MoZnBfc2tiKGZwKSwKKwkJCQkJICAgc2tiX3NoaW5mbyhmcF9za2IoZnApKS0+bnJfZnJhZ3MsCisJCQkJCSAgIHBhZ2UsIG9mZl9pbl9wYWdlLCB0bGVuKTsKKwkJCWZyX2xlbihmcCkgKz0gdGxlbjsKKwkJCWZwX3NrYihmcCktPmRhdGFfbGVuICs9IHRsZW47CisJCQlmcF9za2IoZnApLT50cnVlc2l6ZSArPQorCQkJCQlQQUdFX1NJWkUgPDwgY29tcG91bmRfb3JkZXIocGFnZSk7CisJCX0gZWxzZSBpZiAobWVtKSB7CisJCQlCVUdfT04oIXBhZ2UpOworCQkJZnJvbSA9IGttYXBfYXRvbWljKHBhZ2UgKyAobWVtX29mZiA+PiBQQUdFX1NISUZUKSwKKwkJCQkJICAgS01fU09GVElSUTApOworCQkJcGFnZV9hZGRyID0gZnJvbTsKKwkJCWZyb20gKz0gbWVtX29mZiAmIH5QQUdFX01BU0s7CisJCQl0bGVuID0gbWluKHRsZW4sIChzaXplX3QpKFBBR0VfU0laRSAtCisJCQkJCQkobWVtX29mZiAmIH5QQUdFX01BU0spKSk7CisJCQltZW1jcHkodG8sIGZyb20sIHRsZW4pOworCQkJa3VubWFwX2F0b21pYyhwYWdlX2FkZHIsIEtNX1NPRlRJUlEwKTsKKwkJCXRvICs9IHRsZW47CisJCX0gZWxzZSB7CisJCQlmcm9tID0gdGFzay0+dF90YXNrX2J1ZiArIG1lbV9vZmY7CisJCQltZW1jcHkodG8sIGZyb20sIHRsZW4pOworCQkJdG8gKz0gdGxlbjsKKwkJfQorCisJCW1lbV9vZmYgKz0gdGxlbjsKKwkJbWVtX2xlbiAtPSB0bGVuOworCQlmcmFtZV9sZW4gLT0gdGxlbjsKKwkJcmVtYWluaW5nIC09IHRsZW47CisKKwkJaWYgKGZyYW1lX2xlbiAmJgorCQkgICAgKHNrYl9zaGluZm8oZnBfc2tiKGZwKSktPm5yX2ZyYWdzIDwgRkNfRlJBTUVfU0dfTEVOKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXJlbWFpbmluZykKKwkJCWZfY3RsIHw9IEZDX0ZDX0VORF9TRVE7CisJCWZjX2ZpbGxfZmNfaGRyKGZwLCBGQ19SQ1RMX0REX1NPTF9EQVRBLCBlcC0+ZGlkLCBlcC0+c2lkLAorCQkJICAgICAgIEZDX1RZUEVfRkNQLCBmX2N0bCwgZmhfb2ZmKTsKKwkJZXJyb3IgPSBscG9ydC0+dHQuc2VxX3NlbmQobHBvcnQsIGNtZC0+c2VxLCBmcCk7CisJCWlmIChlcnJvcikgeworCQkJLyogWFhYIEZvciBub3csIGluaXRpYXRvciB3aWxsIHJldHJ5ICovCisJCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byBzZW5kIGZyYW1lICVwLCAiCisJCQkJCQkieGlkIDwweCV4PiwgcmVtYWluaW5nIDwweCV4PiwgIgorCQkJCQkJImxzb19tYXggPDB4JXg+XG4iLAorCQkJCQkJX19mdW5jX18sIGZwLCBlcC0+eGlkLAorCQkJCQkJcmVtYWluaW5nLCBscG9ydC0+bHNvX21heCk7CisJCX0KKwl9CisJcmV0dXJuIGZ0X3F1ZXVlX3N0YXR1cyhzZV9jbWQpOworfQorCisvKgorICogUmVjZWl2ZSB3cml0ZSBkYXRhIGZyYW1lLgorICovCit2b2lkIGZ0X3JlY3Zfd3JpdGVfZGF0YShzdHJ1Y3QgZnRfY21kICpjbWQsIHN0cnVjdCBmY19mcmFtZSAqZnApCit7CisJc3RydWN0IHNlX2NtZCAqc2VfY21kID0gJmNtZC0+c2VfY21kOworCXN0cnVjdCBmY19zZXEgKnNlcSA9IGNtZC0+c2VxOworCXN0cnVjdCBmY19leGNoICplcDsKKwlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0OworCXN0cnVjdCBzZV90cmFuc3BvcnRfdGFzayAqdGFzazsKKwlzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICpmaDsKKwlzdHJ1Y3Qgc2VfbWVtICptZW07CisJdTMyIG1lbV9vZmY7CisJdTMyIHJlbF9vZmY7CisJc2l6ZV90IGZyYW1lX2xlbjsKKwlzaXplX3QgbWVtX2xlbjsKKwlzaXplX3QgdGxlbjsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl2b2lkICpwYWdlX2FkZHI7CisJdm9pZCAqZnJvbTsKKwl2b2lkICp0bzsKKwl1MzIgZl9jdGw7CisJdm9pZCAqYnVmOworCisJdGFzayA9IFRfVEFTSyhzZV9jbWQpOworCUJVR19PTighdGFzayk7CisKKwlmaCA9IGZjX2ZyYW1lX2hlYWRlcl9nZXQoZnApOworCWlmICghKG50b2gyNChmaC0+ZmhfZl9jdGwpICYgRkNfRkNfUkVMX09GRikpCisJCWdvdG8gZHJvcDsKKworCS8qCisJICogRG9lc24ndCBleHBlY3QgZXZlbiBzaW5nbGUgYnl0ZSBvZiBwYXlsb2FkLiBQYXlsb2FkCisJICogaXMgZXhwZWN0ZWQgdG8gYmUgY29waWVkIGRpcmVjdGx5IHRvIHVzZXIgYnVmZmVycworCSAqIGR1ZSB0byBERFAgKExhcmdlIFJ4IG9mZmxvYWQpIGZlYXR1cmUsIGhlbmNlCisJICogQlVHX09OIGlmIEJVRiBpcyBub24tTlVMTAorCSAqLworCWJ1ZiA9IGZjX2ZyYW1lX3BheWxvYWRfZ2V0KGZwLCAxKTsKKwlpZiAoY21kLT53YXNfZGRwX3NldHVwICYmIGJ1ZikgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogV2hlbiBERFAgd2FzIHNldHVwLCBub3QgZXhwZWN0ZWQgdG8iCisJCQkJICJyZWNlaXZlIGZyYW1lIHdpdGggcGF5bG9hZCwgUGF5bG9hZCBzaGFsbCBiZSIKKwkJCQkgImNvcGllZCBkaXJlY3RseSB0byBidWZmZXIgaW5zdGVhZCBvZiBjb21pbmcgIgorCQkJCSAidmlhLiBsZWdhY3kgcmVjZWl2ZSBxdWV1ZXNcbiIsIF9fZnVuY19fKTsKKwkJQlVHX09OKGJ1Zik7CisJfQorCisJLyoKKwkgKiBJZiBmdF9jbWQgaW5kaWNhdGVkICdkZHBfc2V0dXAnLCBpbiB0aGF0IGNhc2Ugb25seSB0aGUgbGFzdCBmcmFtZQorCSAqIHNob3VsZCBjb21lIHdpdGggJ1RTSSBiaXQgYmVpbmcgc2V0Jy4gSWYgJ1RTSSBiaXQgaXMgbm90IHNldCBhbmQgaWYKKwkgKiBkYXRhIGZyYW1lIGFwcGVhcnMgaGVyZSwgbWVhbnMgZXJyb3IgY29uZGl0aW9uLiBJbiBib3RoIHRoZSBjYXNlcworCSAqIHJlbGVhc2UgdGhlIEREUCBjb250ZXh0IChkZHBfcHV0KSBhbmQgaW4gZXJyb3IgY2FzZSwgYXMgd2VsbAorCSAqIGluaXRpYXRlIGVycm9yIHJlY292ZXJ5IG1lY2hhbmlzbS4KKwkgKi8KKwllcCA9IGZjX3NlcV9leGNoKHNlcSk7CisJaWYgKGNtZC0+d2FzX2RkcF9zZXR1cCkgeworCQlCVUdfT04oIWVwKTsKKwkJbHBvcnQgPSBlcC0+bHA7CisJCUJVR19PTighbHBvcnQpOworCX0KKwlpZiAoY21kLT53YXNfZGRwX3NldHVwICYmIGVwLT54aWQgIT0gRkNfWElEX1VOS05PV04pIHsKKwkJZl9jdGwgPSBudG9oMjQoZmgtPmZoX2ZfY3RsKTsKKwkJLyoKKwkJICogSWYgVFNJIGJpdCBzZXQgaW4gZl9jdGwsIG1lYW5zIGxhc3Qgd3JpdGUgZGF0YSBmcmFtZSBpcworCQkgKiByZWNlaXZlZCBzdWNjZXNzZnVsbHkgd2hlcmUgcGF5bG9hZCBpcyBwb3N0ZWQgZGlyZWN0bHkKKwkJICogdG8gdXNlciBidWZmZXIgYW5kIG9ubHkgdGhlIGxhc3QgZnJhbWUncyBoZWFkZXIgaXMgcG9zdGVkCisJCSAqIGluIGxlZ2FjeSByZWNlaXZlIHF1ZXVlCisJCSAqLworCQlpZiAoZl9jdGwgJiBGQ19GQ19TRVFfSU5JVCkgeyAvKiBUU0kgYml0IHNldCBpbiBGQyBmcmFtZSAqLworCQkJY21kLT53cml0ZV9kYXRhX2xlbiA9IGxwb3J0LT50dC5kZHBfZG9uZShscG9ydCwKKwkJCQkJCQkJZXAtPnhpZCk7CisJCQlnb3RvIGxhc3RfZnJhbWU7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogVXBkYXRpbmcgdGhlIHdyaXRlX2RhdGFfbGVuIG1heSBiZSBtZWFuaW5nbGVzcyBhdAorCQkJICogdGhpcyBwb2ludCwgYnV0IGp1c3QgaW4gY2FzZSBpZiByZXF1aXJlZCBpbiBmdXR1cmUKKwkJCSAqIGZvciBkZWJ1Z2dpbmcgb3IgYW55IG90aGVyIHB1cnBvc2UKKwkJCSAqLworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogUmVjZWl2ZWQgZnJhbWUgd2l0aCBUU0kgYml0IG5vdCIKKwkJCQkJIiBiZWluZyBTRVQsIGRyb3BwaW5nIHRoZSBmcmFtZSwgIgorCQkJCQkiY21kLT5zZyA8JXA+LCBjbWQtPnNnX2NudCA8MHgleD5cbiIsCisJCQkJCV9fZnVuY19fLCBjbWQtPnNnLCBjbWQtPnNnX2NudCk7CisJCQljbWQtPndyaXRlX2RhdGFfbGVuID0gbHBvcnQtPnR0LmRkcF9kb25lKGxwb3J0LAorCQkJCQkJCSAgICAgIGVwLT54aWQpOworCQkJbHBvcnQtPnR0LnNlcV9leGNoX2Fib3J0KGNtZC0+c2VxLCAwKTsKKwkJCWdvdG8gZHJvcDsKKwkJfQorCX0KKworCXJlbF9vZmYgPSBudG9obChmaC0+ZmhfcGFybV9vZmZzZXQpOworCWZyYW1lX2xlbiA9IGZyX2xlbihmcCk7CisJaWYgKGZyYW1lX2xlbiA8PSBzaXplb2YoKmZoKSkKKwkJZ290byBkcm9wOworCWZyYW1lX2xlbiAtPSBzaXplb2YoKmZoKTsKKwlmcm9tID0gZmNfZnJhbWVfcGF5bG9hZF9nZXQoZnAsIDApOworCWlmIChyZWxfb2ZmID49IHNlX2NtZC0+ZGF0YV9sZW5ndGgpCisJCWdvdG8gZHJvcDsKKwlpZiAoZnJhbWVfbGVuICsgcmVsX29mZiA+IHNlX2NtZC0+ZGF0YV9sZW5ndGgpCisJCWZyYW1lX2xlbiA9IHNlX2NtZC0+ZGF0YV9sZW5ndGggLSByZWxfb2ZmOworCisJLyoKKwkgKiBTZXR1cCB0byB1c2UgZmlyc3QgbWVtIGxpc3QgZW50cnkgaWYgYW55LgorCSAqLworCWlmICh0YXNrLT50X3Rhc2tzX3NlX251bSkgeworCQltZW0gPSBsaXN0X2ZpcnN0X2VudHJ5KHRhc2stPnRfbWVtX2xpc3QsCisJCQkJICAgICAgIHN0cnVjdCBzZV9tZW0sIHNlX2xpc3QpOworCQltZW1fbGVuID0gbWVtLT5zZV9sZW47CisJCW1lbV9vZmYgPSBtZW0tPnNlX29mZjsKKwkJcGFnZSA9IG1lbS0+c2VfcGFnZTsKKwl9IGVsc2UgeworCQltZW0gPSBOVUxMOworCQlwYWdlID0gTlVMTDsKKwkJbWVtX29mZiA9IDA7CisJCW1lbV9sZW4gPSBmcmFtZV9sZW47CisJfQorCisJd2hpbGUgKGZyYW1lX2xlbikgeworCQlpZiAoIW1lbV9sZW4pIHsKKwkJCUJVR19PTighbWVtKTsKKwkJCW1lbSA9IGxpc3RfZW50cnkobWVtLT5zZV9saXN0Lm5leHQsCisJCQkJCSBzdHJ1Y3Qgc2VfbWVtLCBzZV9saXN0KTsKKwkJCW1lbV9sZW4gPSBtZW0tPnNlX2xlbjsKKwkJCW1lbV9vZmYgPSBtZW0tPnNlX29mZjsKKwkJCXBhZ2UgPSBtZW0tPnNlX3BhZ2U7CisJCX0KKwkJaWYgKHJlbF9vZmYgPj0gbWVtX2xlbikgeworCQkJcmVsX29mZiAtPSBtZW1fbGVuOworCQkJbWVtX2xlbiA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCQltZW1fb2ZmICs9IHJlbF9vZmY7CisJCW1lbV9sZW4gLT0gcmVsX29mZjsKKwkJcmVsX29mZiA9IDA7CisKKwkJdGxlbiA9IG1pbihtZW1fbGVuLCBmcmFtZV9sZW4pOworCisJCWlmIChtZW0pIHsKKwkJCXRvID0ga21hcF9hdG9taWMocGFnZSArIChtZW1fb2ZmID4+IFBBR0VfU0hJRlQpLAorCQkJCQkgS01fU09GVElSUTApOworCQkJcGFnZV9hZGRyID0gdG87CisJCQl0byArPSBtZW1fb2ZmICYgflBBR0VfTUFTSzsKKwkJCXRsZW4gPSBtaW4odGxlbiwgKHNpemVfdCkoUEFHRV9TSVpFIC0KKwkJCQkJCShtZW1fb2ZmICYgflBBR0VfTUFTSykpKTsKKwkJCW1lbWNweSh0bywgZnJvbSwgdGxlbik7CisJCQlrdW5tYXBfYXRvbWljKHBhZ2VfYWRkciwgS01fU09GVElSUTApOworCQl9IGVsc2UgeworCQkJdG8gPSB0YXNrLT50X3Rhc2tfYnVmICsgbWVtX29mZjsKKwkJCW1lbWNweSh0bywgZnJvbSwgdGxlbik7CisJCX0KKwkJZnJvbSArPSB0bGVuOworCQlmcmFtZV9sZW4gLT0gdGxlbjsKKwkJbWVtX29mZiArPSB0bGVuOworCQltZW1fbGVuIC09IHRsZW47CisJCWNtZC0+d3JpdGVfZGF0YV9sZW4gKz0gdGxlbjsKKwl9CitsYXN0X2ZyYW1lOgorCWlmIChjbWQtPndyaXRlX2RhdGFfbGVuID09IHNlX2NtZC0+ZGF0YV9sZW5ndGgpCisJCXRyYW5zcG9ydF9nZW5lcmljX2hhbmRsZV9kYXRhKHNlX2NtZCk7Citkcm9wOgorCWZjX2ZyYW1lX2ZyZWUoZnApOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGNtX2ZjL3RmY19zZXNzLmMgYi9kcml2ZXJzL3RhcmdldC90Y21fZmMvdGZjX3Nlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2JkNTdmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy90YXJnZXQvdGNtX2ZjL3RmY19zZXNzLmMKQEAgLTAsMCArMSw1NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworLyogWFhYIFRCRCBzb21lIGluY2x1ZGVzIG1heSBiZSBleHRyYW5lb3VzICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxnZW5lcmF0ZWQvdXRzcmVsZWFzZS5oPgorI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZ2ZzLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorI2luY2x1ZGUgPHNjc2kvbGliZmMuaD4KKworI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV9iYXNlLmg+CisjaW5jbHVkZSA8dGFyZ2V0L3RhcmdldF9jb3JlX3RyYW5zcG9ydC5oPgorI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV9mYWJyaWNfb3BzLmg+CisjaW5jbHVkZSA8dGFyZ2V0L3RhcmdldF9jb3JlX2RldmljZS5oPgorI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV90cGcuaD4KKyNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfY29uZmlnZnMuaD4KKyNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfYmFzZS5oPgorI2luY2x1ZGUgPHRhcmdldC9jb25maWdmc19tYWNyb3MuaD4KKworI2luY2x1ZGUgPHNjc2kvbGliZmMuaD4KKyNpbmNsdWRlICJ0Y21fZmMuaCIKKworc3RhdGljIHZvaWQgZnRfc2Vzc19kZWxldGVfYWxsKHN0cnVjdCBmdF90cG9ydCAqKTsKKworLyoKKyAqIExvb2t1cCBvciBhbGxvY2F0ZSB0YXJnZXQgbG9jYWwgcG9ydC4KKyAqIENhbGxlciBob2xkcyBmdF9scG9ydF9sb2NrLgorICovCitzdGF0aWMgc3RydWN0IGZ0X3Rwb3J0ICpmdF90cG9ydF9jcmVhdGUoc3RydWN0IGZjX2xwb3J0ICpscG9ydCkKK3sKKwlzdHJ1Y3QgZnRfdHBnICp0cGc7CisJc3RydWN0IGZ0X3Rwb3J0ICp0cG9ydDsKKwlpbnQgaTsKKworCXRwb3J0ID0gcmN1X2RlcmVmZXJlbmNlKGxwb3J0LT5wcm92W0ZDX1RZUEVfRkNQXSk7CisJaWYgKHRwb3J0ICYmIHRwb3J0LT50cGcpCisJCXJldHVybiB0cG9ydDsKKworCXRwZyA9IGZ0X2xwb3J0X2ZpbmRfdHBnKGxwb3J0KTsKKwlpZiAoIXRwZykKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAodHBvcnQpIHsKKwkJdHBvcnQtPnRwZyA9IHRwZzsKKwkJcmV0dXJuIHRwb3J0OworCX0KKworCXRwb3J0ID0ga3phbGxvYyhzaXplb2YoKnRwb3J0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0cG9ydCkKKwkJcmV0dXJuIE5VTEw7CisKKwl0cG9ydC0+bHBvcnQgPSBscG9ydDsKKwl0cG9ydC0+dHBnID0gdHBnOworCXRwZy0+dHBvcnQgPSB0cG9ydDsKKwlmb3IgKGkgPSAwOyBpIDwgRlRfU0VTU19IQVNIX1NJWkU7IGkrKykKKwkJSU5JVF9ITElTVF9IRUFEKCZ0cG9ydC0+aGFzaFtpXSk7CisKKwlyY3VfYXNzaWduX3BvaW50ZXIobHBvcnQtPnByb3ZbRkNfVFlQRV9GQ1BdLCB0cG9ydCk7CisJcmV0dXJuIHRwb3J0OworfQorCisvKgorICogRnJlZSB0cG9ydCB2aWEgUkNVLgorICovCitzdGF0aWMgdm9pZCBmdF90cG9ydF9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkKK3sKKwlzdHJ1Y3QgZnRfdHBvcnQgKnRwb3J0ID0gY29udGFpbmVyX29mKHJjdSwgc3RydWN0IGZ0X3Rwb3J0LCByY3UpOworCisJa2ZyZWUodHBvcnQpOworfQorCisvKgorICogRGVsZXRlIGEgdGFyZ2V0IGxvY2FsIHBvcnQuCisgKiBDYWxsZXIgaG9sZHMgZnRfbHBvcnRfbG9jay4KKyAqLworc3RhdGljIHZvaWQgZnRfdHBvcnRfZGVsZXRlKHN0cnVjdCBmdF90cG9ydCAqdHBvcnQpCit7CisJc3RydWN0IGZjX2xwb3J0ICpscG9ydDsKKwlzdHJ1Y3QgZnRfdHBnICp0cGc7CisKKwlmdF9zZXNzX2RlbGV0ZV9hbGwodHBvcnQpOworCWxwb3J0ID0gdHBvcnQtPmxwb3J0OworCUJVR19PTih0cG9ydCAhPSBscG9ydC0+cHJvdltGQ19UWVBFX0ZDUF0pOworCXJjdV9hc3NpZ25fcG9pbnRlcihscG9ydC0+cHJvdltGQ19UWVBFX0ZDUF0sIE5VTEwpOworCisJdHBnID0gdHBvcnQtPnRwZzsKKwlpZiAodHBnKSB7CisJCXRwZy0+dHBvcnQgPSBOVUxMOworCQl0cG9ydC0+dHBnID0gTlVMTDsKKwl9CisJY2FsbF9yY3UoJnRwb3J0LT5yY3UsIGZ0X3Rwb3J0X3JjdV9mcmVlKTsKK30KKworLyoKKyAqIEFkZCBsb2NhbCBwb3J0LgorICogQ2FsbGVkIHRocnUgZmNfbHBvcnRfaXRlcmF0ZSgpLgorICovCit2b2lkIGZ0X2xwb3J0X2FkZChzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0LCB2b2lkICphcmcpCit7CisJbXV0ZXhfbG9jaygmZnRfbHBvcnRfbG9jayk7CisJZnRfdHBvcnRfY3JlYXRlKGxwb3J0KTsKKwltdXRleF91bmxvY2soJmZ0X2xwb3J0X2xvY2spOworfQorCisvKgorICogRGVsZXRlIGxvY2FsIHBvcnQuCisgKiBDYWxsZWQgdGhydSBmY19scG9ydF9pdGVyYXRlKCkuCisgKi8KK3ZvaWQgZnRfbHBvcnRfZGVsKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZnRfdHBvcnQgKnRwb3J0OworCisJbXV0ZXhfbG9jaygmZnRfbHBvcnRfbG9jayk7CisJdHBvcnQgPSBscG9ydC0+cHJvdltGQ19UWVBFX0ZDUF07CisJaWYgKHRwb3J0KQorCQlmdF90cG9ydF9kZWxldGUodHBvcnQpOworCW11dGV4X3VubG9jaygmZnRfbHBvcnRfbG9jayk7Cit9CisKKy8qCisgKiBOb3RpZmljYXRpb24gb2YgbG9jYWwgcG9ydCBjaGFuZ2UgZnJvbSBsaWJmYy4KKyAqIENyZWF0ZSBvciBkZWxldGUgbG9jYWwgcG9ydCBhbmQgYXNzb2NpYXRlZCB0cG9ydC4KKyAqLworaW50IGZ0X2xwb3J0X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICphcmcpCit7CisJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IGFyZzsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEZDX0xQT1JUX0VWX0FERDoKKwkJZnRfbHBvcnRfYWRkKGxwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisJY2FzZSBGQ19MUE9SVF9FVl9ERUw6CisJCWZ0X2xwb3J0X2RlbChscG9ydCwgTlVMTCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKKy8qCisgKiBIYXNoIGZ1bmN0aW9uIGZvciBGQ19JRHMuCisgKi8KK3N0YXRpYyB1MzIgZnRfc2Vzc19oYXNoKHUzMiBwb3J0X2lkKQoreworCXJldHVybiBoYXNoXzMyKHBvcnRfaWQsIEZUX1NFU1NfSEFTSF9CSVRTKTsKK30KKworLyoKKyAqIEZpbmQgc2Vzc2lvbiBpbiBsb2NhbCBwb3J0LgorICogU2Vzc2lvbnMgYW5kIGhhc2ggbGlzdHMgYXJlIFJDVS1wcm90ZWN0ZWQuCisgKiBBIHJlZmVyZW5jZSBpcyB0YWtlbiB3aGljaCBtdXN0IGJlIGV2ZW50dWFsbHkgZnJlZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZnRfc2VzcyAqZnRfc2Vzc19nZXQoc3RydWN0IGZjX2xwb3J0ICpscG9ydCwgdTMyIHBvcnRfaWQpCit7CisJc3RydWN0IGZ0X3Rwb3J0ICp0cG9ydDsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zOworCXN0cnVjdCBmdF9zZXNzICpzZXNzOworCisJcmN1X3JlYWRfbG9jaygpOworCXRwb3J0ID0gcmN1X2RlcmVmZXJlbmNlKGxwb3J0LT5wcm92W0ZDX1RZUEVfRkNQXSk7CisJaWYgKCF0cG9ydCkKKwkJZ290byBvdXQ7CisKKwloZWFkID0gJnRwb3J0LT5oYXNoW2Z0X3Nlc3NfaGFzaChwb3J0X2lkKV07CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNlc3MsIHBvcywgaGVhZCwgaGFzaCkgeworCQlpZiAoc2Vzcy0+cG9ydF9pZCA9PSBwb3J0X2lkKSB7CisJCQlrcmVmX2dldCgmc2Vzcy0+a3JlZik7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCUZUX1NFU1NfREJHKCJwb3J0X2lkICV4IGZvdW5kICVwXG4iLCBwb3J0X2lkLCBzZXNzKTsKKwkJCXJldHVybiBzZXNzOworCQl9CisJfQorb3V0OgorCXJjdV9yZWFkX3VubG9jaygpOworCUZUX1NFU1NfREJHKCJwb3J0X2lkICV4IG5vdCBmb3VuZFxuIiwgcG9ydF9pZCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBzZXNzaW9uIGFuZCBlbnRlciBpdCBpbiB0aGUgaGFzaCBmb3IgdGhlIGxvY2FsIHBvcnQuCisgKiBDYWxsZXIgaG9sZHMgZnRfbHBvcnRfbG9jay4KKyAqLworc3RhdGljIHN0cnVjdCBmdF9zZXNzICpmdF9zZXNzX2NyZWF0ZShzdHJ1Y3QgZnRfdHBvcnQgKnRwb3J0LCB1MzIgcG9ydF9pZCwKKwkJCQkgICAgICBzdHJ1Y3QgZnRfbm9kZV9hY2wgKmFjbCkKK3sKKwlzdHJ1Y3QgZnRfc2VzcyAqc2VzczsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zOworCisJaGVhZCA9ICZ0cG9ydC0+aGFzaFtmdF9zZXNzX2hhc2gocG9ydF9pZCldOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZXNzLCBwb3MsIGhlYWQsIGhhc2gpCisJCWlmIChzZXNzLT5wb3J0X2lkID09IHBvcnRfaWQpCisJCQlyZXR1cm4gc2VzczsKKworCXNlc3MgPSBremFsbG9jKHNpemVvZigqc2VzcyksIEdGUF9LRVJORUwpOworCWlmICghc2VzcykKKwkJcmV0dXJuIE5VTEw7CisKKwlzZXNzLT5zZV9zZXNzID0gdHJhbnNwb3J0X2luaXRfc2Vzc2lvbigpOworCWlmICghc2Vzcy0+c2Vfc2VzcykgeworCQlrZnJlZShzZXNzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXNlc3MtPnNlX3Nlc3MtPnNlX25vZGVfYWNsID0gJmFjbC0+c2Vfbm9kZV9hY2w7CisJc2Vzcy0+dHBvcnQgPSB0cG9ydDsKKwlzZXNzLT5wb3J0X2lkID0gcG9ydF9pZDsKKwlrcmVmX2luaXQoJnNlc3MtPmtyZWYpOwkvKiByZWYgZm9yIHRhYmxlIGVudHJ5ICovCisJaGxpc3RfYWRkX2hlYWRfcmN1KCZzZXNzLT5oYXNoLCBoZWFkKTsKKwl0cG9ydC0+c2Vzc19jb3VudCsrOworCisJRlRfU0VTU19EQkcoInBvcnRfaWQgJXggc2VzcyAlcFxuIiwgcG9ydF9pZCwgc2Vzcyk7CisKKwl0cmFuc3BvcnRfcmVnaXN0ZXJfc2Vzc2lvbigmdHBvcnQtPnRwZy0+c2VfdHBnLCAmYWNsLT5zZV9ub2RlX2FjbCwKKwkJCQkgICBzZXNzLT5zZV9zZXNzLCBzZXNzKTsKKwlyZXR1cm4gc2VzczsKK30KKworLyoKKyAqIFVuaGFzaCB0aGUgc2Vzc2lvbi4KKyAqIENhbGxlciBob2xkcyBmdF9scG9ydF9sb2NrLgorICovCitzdGF0aWMgdm9pZCBmdF9zZXNzX3VuaGFzaChzdHJ1Y3QgZnRfc2VzcyAqc2VzcykKK3sKKwlzdHJ1Y3QgZnRfdHBvcnQgKnRwb3J0ID0gc2Vzcy0+dHBvcnQ7CisKKwlobGlzdF9kZWxfcmN1KCZzZXNzLT5oYXNoKTsKKwlCVUdfT04oIXRwb3J0LT5zZXNzX2NvdW50KTsKKwl0cG9ydC0+c2Vzc19jb3VudC0tOworCXNlc3MtPnBvcnRfaWQgPSAtMTsKKwlzZXNzLT5wYXJhbXMgPSAwOworfQorCisvKgorICogRGVsZXRlIHNlc3Npb24gZnJvbSBoYXNoLgorICogQ2FsbGVyIGhvbGRzIGZ0X2xwb3J0X2xvY2suCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZnRfc2VzcyAqZnRfc2Vzc19kZWxldGUoc3RydWN0IGZ0X3Rwb3J0ICp0cG9ydCwgdTMyIHBvcnRfaWQpCit7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IGhsaXN0X25vZGUgKnBvczsKKwlzdHJ1Y3QgZnRfc2VzcyAqc2VzczsKKworCWhlYWQgPSAmdHBvcnQtPmhhc2hbZnRfc2Vzc19oYXNoKHBvcnRfaWQpXTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2VzcywgcG9zLCBoZWFkLCBoYXNoKSB7CisJCWlmIChzZXNzLT5wb3J0X2lkID09IHBvcnRfaWQpIHsKKwkJCWZ0X3Nlc3NfdW5oYXNoKHNlc3MpOworCQkJcmV0dXJuIHNlc3M7CisJCX0KKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBEZWxldGUgYWxsIHNlc3Npb25zIGZyb20gdHBvcnQuCisgKiBDYWxsZXIgaG9sZHMgZnRfbHBvcnRfbG9jay4KKyAqLworc3RhdGljIHZvaWQgZnRfc2Vzc19kZWxldGVfYWxsKHN0cnVjdCBmdF90cG9ydCAqdHBvcnQpCit7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IGhsaXN0X25vZGUgKnBvczsKKwlzdHJ1Y3QgZnRfc2VzcyAqc2VzczsKKworCWZvciAoaGVhZCA9IHRwb3J0LT5oYXNoOworCSAgICAgaGVhZCA8ICZ0cG9ydC0+aGFzaFtGVF9TRVNTX0hBU0hfU0laRV07IGhlYWQrKykgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2VzcywgcG9zLCBoZWFkLCBoYXNoKSB7CisJCQlmdF9zZXNzX3VuaGFzaChzZXNzKTsKKwkJCXRyYW5zcG9ydF9kZXJlZ2lzdGVyX3Nlc3Npb25fY29uZmlnZnMoc2Vzcy0+c2Vfc2Vzcyk7CisJCQlmdF9zZXNzX3B1dChzZXNzKTsJLyogcmVsZWFzZSBmcm9tIHRhYmxlICovCisJCX0KKwl9Cit9CisKKy8qCisgKiBUQ00gb3BzIGZvciBzZXNzaW9ucy4KKyAqLworCisvKgorICogRGV0ZXJtaW5lIHdoZXRoZXIgc2Vzc2lvbiBpcyBhbGxvd2VkIHRvIGJlIHNodXRkb3duIGluIHRoZSBjdXJyZW50IGNvbnRleHQuCisgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIHRoZSBzZXNzaW9uIHNob3VsZCBiZSBzaHV0ZG93bi4KKyAqLworaW50IGZ0X3Nlc3Nfc2h1dGRvd24oc3RydWN0IHNlX3Nlc3Npb24gKnNlX3Nlc3MpCit7CisJc3RydWN0IGZ0X3Nlc3MgKnNlc3MgPSBzZV9zZXNzLT5mYWJyaWNfc2Vzc19wdHI7CisKKwlGVF9TRVNTX0RCRygicG9ydF9pZCAleFxuIiwgc2Vzcy0+cG9ydF9pZCk7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBSZW1vdmUgc2Vzc2lvbiBhbmQgc2VuZCBQUkxPLgorICogVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgQUNMIGlzIGJlaW5nIGRlbGV0ZWQgb3IgcXVldWUgZGVwdGggaXMgY2hhbmdpbmcuCisgKi8KK3ZvaWQgZnRfc2Vzc19jbG9zZShzdHJ1Y3Qgc2Vfc2Vzc2lvbiAqc2Vfc2VzcykKK3sKKwlzdHJ1Y3QgZnRfc2VzcyAqc2VzcyA9IHNlX3Nlc3MtPmZhYnJpY19zZXNzX3B0cjsKKwlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0OworCXUzMiBwb3J0X2lkOworCisJbXV0ZXhfbG9jaygmZnRfbHBvcnRfbG9jayk7CisJbHBvcnQgPSBzZXNzLT50cG9ydC0+bHBvcnQ7CisJcG9ydF9pZCA9IHNlc3MtPnBvcnRfaWQ7CisJaWYgKHBvcnRfaWQgPT0gLTEpIHsKKwkJbXV0ZXhfbG9jaygmZnRfbHBvcnRfbG9jayk7CisJCXJldHVybjsKKwl9CisJRlRfU0VTU19EQkcoInBvcnRfaWQgJXhcbiIsIHBvcnRfaWQpOworCWZ0X3Nlc3NfdW5oYXNoKHNlc3MpOworCW11dGV4X3VubG9jaygmZnRfbHBvcnRfbG9jayk7CisJdHJhbnNwb3J0X2RlcmVnaXN0ZXJfc2Vzc2lvbl9jb25maWdmcyhzZV9zZXNzKTsKKwlmdF9zZXNzX3B1dChzZXNzKTsKKwkvKiBYWFggU2VuZCBMT0dPIG9yIFBSTE8gKi8KKwlzeW5jaHJvbml6ZV9yY3UoKTsJCS8qIGxldCB0cmFuc3BvcnQgZGVyZWdpc3RlciBoYXBwZW4gKi8KK30KKwordm9pZCBmdF9zZXNzX3N0b3Aoc3RydWN0IHNlX3Nlc3Npb24gKnNlX3Nlc3MsIGludCBzZXNzX3NsZWVwLCBpbnQgY29ubl9zbGVlcCkKK3sKKwlzdHJ1Y3QgZnRfc2VzcyAqc2VzcyA9IHNlX3Nlc3MtPmZhYnJpY19zZXNzX3B0cjsKKworCUZUX1NFU1NfREJHKCJwb3J0X2lkICV4XG4iLCBzZXNzLT5wb3J0X2lkKTsKK30KKworaW50IGZ0X3Nlc3NfbG9nZ2VkX2luKHN0cnVjdCBzZV9zZXNzaW9uICpzZV9zZXNzKQoreworCXN0cnVjdCBmdF9zZXNzICpzZXNzID0gc2Vfc2Vzcy0+ZmFicmljX3Nlc3NfcHRyOworCisJcmV0dXJuIHNlc3MtPnBvcnRfaWQgIT0gLTE7Cit9CisKK3UzMiBmdF9zZXNzX2dldF9pbmRleChzdHJ1Y3Qgc2Vfc2Vzc2lvbiAqc2Vfc2VzcykKK3sKKwlzdHJ1Y3QgZnRfc2VzcyAqc2VzcyA9IHNlX3Nlc3MtPmZhYnJpY19zZXNzX3B0cjsKKworCXJldHVybiBzZXNzLT5wb3J0X2lkOwkvKiBYWFggVEJEIHByb2JhYmx5IG5vdCB3aGF0IGlzIG5lZWRlZCAqLworfQorCit1MzIgZnRfc2Vzc19nZXRfcG9ydF9uYW1lKHN0cnVjdCBzZV9zZXNzaW9uICpzZV9zZXNzLAorCQkJICB1bnNpZ25lZCBjaGFyICpidWYsIHUzMiBsZW4pCit7CisJc3RydWN0IGZ0X3Nlc3MgKnNlc3MgPSBzZV9zZXNzLT5mYWJyaWNfc2Vzc19wdHI7CisKKwlyZXR1cm4gZnRfZm9ybWF0X3d3bihidWYsIGxlbiwgc2Vzcy0+cG9ydF9uYW1lKTsKK30KKwordm9pZCBmdF9zZXNzX3NldF9lcmwwKHN0cnVjdCBzZV9zZXNzaW9uICpzZV9zZXNzKQoreworCS8qIFhYWCBUQkQgY2FsbGVkIHdoZW4gb3V0IG9mIG1lbW9yeSAqLworfQorCisvKgorICogbGliZmMgb3BzIGludm9sdmluZyBzZXNzaW9ucy4KKyAqLworCitzdGF0aWMgaW50IGZ0X3BybGlfbG9ja2VkKHN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YSwgdTMyIHNwcF9sZW4sCisJCQkgIGNvbnN0IHN0cnVjdCBmY19lbHNfc3BwICpyc3BwLCBzdHJ1Y3QgZmNfZWxzX3NwcCAqc3BwKQoreworCXN0cnVjdCBmdF90cG9ydCAqdHBvcnQ7CisJc3RydWN0IGZ0X3Nlc3MgKnNlc3M7CisJc3RydWN0IGZ0X25vZGVfYWNsICphY2w7CisJdTMyIGZjcF9wYXJtOworCisJdHBvcnQgPSBmdF90cG9ydF9jcmVhdGUocmRhdGEtPmxvY2FsX3BvcnQpOworCWlmICghdHBvcnQpCisJCXJldHVybiAwOwkvKiBub3QgYSB0YXJnZXQgZm9yIHRoaXMgbG9jYWwgcG9ydCAqLworCisJYWNsID0gZnRfYWNsX2dldCh0cG9ydC0+dHBnLCByZGF0YSk7CisJaWYgKCFhY2wpCisJCXJldHVybiAwOworCisJaWYgKCFyc3BwKQorCQlnb3RvIGZpbGw7CisKKwlpZiAocnNwcC0+c3BwX2ZsYWdzICYgKEZDX1NQUF9PUEFfVkFMIHwgRkNfU1BQX1JQQV9WQUwpKQorCQlyZXR1cm4gRkNfU1BQX1JFU1BfTk9fUEE7CisKKwkvKgorCSAqIElmIGJvdGggdGFyZ2V0IGFuZCBpbml0aWF0b3IgYml0cyBhcmUgb2ZmLCB0aGUgU1BQIGlzIGludmFsaWQuCisJICovCisJZmNwX3Bhcm0gPSBudG9obChyc3BwLT5zcHBfcGFyYW1zKTsKKwlpZiAoIShmY3BfcGFybSAmIChGQ1BfU1BQRl9JTklUX0ZDTiB8IEZDUF9TUFBGX1RBUkdfRkNOKSkpCisJCXJldHVybiBGQ19TUFBfUkVTUF9JTlZMOworCisJLyoKKwkgKiBDcmVhdGUgc2Vzc2lvbiAoaW1hZ2UgcGFpcikgb25seSBpZiByZXF1ZXN0ZWQgYnkKKwkgKiBFU1RfSU1HX1BBSVIgZmxhZyBhbmQgaWYgdGhlIHJlcXVlc3RvciBpcyBhbiBpbml0aWF0b3IuCisJICovCisJaWYgKHJzcHAtPnNwcF9mbGFncyAmIEZDX1NQUF9FU1RfSU1HX1BBSVIpIHsKKwkJc3BwLT5zcHBfZmxhZ3MgfD0gRkNfU1BQX0VTVF9JTUdfUEFJUjsKKwkJaWYgKCEoZmNwX3Bhcm0gJiBGQ1BfU1BQRl9JTklUX0ZDTikpCisJCQlyZXR1cm4gRkNfU1BQX1JFU1BfQ09ORjsKKwkJc2VzcyA9IGZ0X3Nlc3NfY3JlYXRlKHRwb3J0LCByZGF0YS0+aWRzLnBvcnRfaWQsIGFjbCk7CisJCWlmICghc2VzcykKKwkJCXJldHVybiBGQ19TUFBfUkVTUF9SRVM7CisJCWlmICghc2Vzcy0+cGFyYW1zKQorCQkJcmRhdGEtPnBybGlfY291bnQrKzsKKwkJc2Vzcy0+cGFyYW1zID0gZmNwX3Bhcm07CisJCXNlc3MtPnBvcnRfbmFtZSA9IHJkYXRhLT5pZHMucG9ydF9uYW1lOworCQlzZXNzLT5tYXhfZnJhbWUgPSByZGF0YS0+bWF4ZnJhbWVfc2l6ZTsKKworCQkvKiBYWFggVEJEIC0gY2xlYXJpbmcgYWN0aW9ucy4gIHVuaXQgYXR0biwgc2VlIDQuMTAgKi8KKwl9CisKKwkvKgorCSAqIE9SIGluIG91ciBzZXJ2aWNlIHBhcmFtZXRlcnMgd2l0aCBvdGhlciBwcm92aWRlciAoaW5pdGlhdG9yKSwgaWYgYW55LgorCSAqIFRCRCBYWFggLSBpbmRpY2F0ZSBSRVRSWSBjYXBhYmlsaXR5PworCSAqLworZmlsbDoKKwlmY3BfcGFybSA9IG50b2hsKHNwcC0+c3BwX3BhcmFtcyk7CisJc3BwLT5zcHBfcGFyYW1zID0gaHRvbmwoZmNwX3Bhcm0gfCBGQ1BfU1BQRl9UQVJHX0ZDTik7CisJcmV0dXJuIEZDX1NQUF9SRVNQX0FDSzsKK30KKworLyoqCisgKiB0Y21fZmNwX3BybGkoKSAtIEhhbmRsZSBpbmNvbWluZyBvciBvdXRnb2luZyBQUkxJIGZvciB0aGUgRkNQIHRhcmdldAorICogQHJkYXRhOiByZW1vdGUgcG9ydCBwcml2YXRlCisgKiBAc3BwX2xlbjogc2VydmljZSBwYXJhbWV0ZXIgcGFnZSBsZW5ndGgKKyAqIEByc3BwOiByZWNlaXZlZCBzZXJ2aWNlIHBhcmFtZXRlciBwYWdlIChOVUxMIGZvciBvdXRnb2luZyBQUkxJKQorICogQHNwcDogcmVzcG9uc2Ugc2VydmljZSBwYXJhbWV0ZXIgcGFnZQorICoKKyAqIFJldHVybnMgc3BwIHJlc3BvbnNlIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgZnRfcHJsaShzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGEsIHUzMiBzcHBfbGVuLAorCQkgICBjb25zdCBzdHJ1Y3QgZmNfZWxzX3NwcCAqcnNwcCwgc3RydWN0IGZjX2Vsc19zcHAgKnNwcCkKK3sKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmZnRfbHBvcnRfbG9jayk7CisJcmV0ID0gZnRfcHJsaV9sb2NrZWQocmRhdGEsIHNwcF9sZW4sIHJzcHAsIHNwcCk7CisJbXV0ZXhfdW5sb2NrKCZmdF9scG9ydF9sb2NrKTsKKwlGVF9TRVNTX0RCRygicG9ydF9pZCAleCBmbGFncyAleCByZXQgJXhcbiIsCisJICAgICAgIHJkYXRhLT5pZHMucG9ydF9pZCwgcnNwcCA/IHJzcHAtPnNwcF9mbGFncyA6IDAsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZnRfc2Vzc19yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkKK3sKKwlzdHJ1Y3QgZnRfc2VzcyAqc2VzcyA9IGNvbnRhaW5lcl9vZihyY3UsIHN0cnVjdCBmdF9zZXNzLCByY3UpOworCisJdHJhbnNwb3J0X2RlcmVnaXN0ZXJfc2Vzc2lvbihzZXNzLT5zZV9zZXNzKTsKKwlrZnJlZShzZXNzKTsKK30KKworc3RhdGljIHZvaWQgZnRfc2Vzc19mcmVlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBmdF9zZXNzICpzZXNzID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBmdF9zZXNzLCBrcmVmKTsKKworCWNhbGxfcmN1KCZzZXNzLT5yY3UsIGZ0X3Nlc3NfcmN1X2ZyZWUpOworfQorCit2b2lkIGZ0X3Nlc3NfcHV0KHN0cnVjdCBmdF9zZXNzICpzZXNzKQoreworCWludCBzZXNzX2hlbGQgPSBhdG9taWNfcmVhZCgmc2Vzcy0+a3JlZi5yZWZjb3VudCk7CisKKwlCVUdfT04oIXNlc3NfaGVsZCk7CisJa3JlZl9wdXQoJnNlc3MtPmtyZWYsIGZ0X3Nlc3NfZnJlZSk7Cit9CisKK3N0YXRpYyB2b2lkIGZ0X3BybG8oc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhKQoreworCXN0cnVjdCBmdF9zZXNzICpzZXNzOworCXN0cnVjdCBmdF90cG9ydCAqdHBvcnQ7CisKKwltdXRleF9sb2NrKCZmdF9scG9ydF9sb2NrKTsKKwl0cG9ydCA9IHJjdV9kZXJlZmVyZW5jZShyZGF0YS0+bG9jYWxfcG9ydC0+cHJvdltGQ19UWVBFX0ZDUF0pOworCWlmICghdHBvcnQpIHsKKwkJbXV0ZXhfdW5sb2NrKCZmdF9scG9ydF9sb2NrKTsKKwkJcmV0dXJuOworCX0KKwlzZXNzID0gZnRfc2Vzc19kZWxldGUodHBvcnQsIHJkYXRhLT5pZHMucG9ydF9pZCk7CisJaWYgKCFzZXNzKSB7CisJCW11dGV4X3VubG9jaygmZnRfbHBvcnRfbG9jayk7CisJCXJldHVybjsKKwl9CisJbXV0ZXhfdW5sb2NrKCZmdF9scG9ydF9sb2NrKTsKKwl0cmFuc3BvcnRfZGVyZWdpc3Rlcl9zZXNzaW9uX2NvbmZpZ2ZzKHNlc3MtPnNlX3Nlc3MpOworCWZ0X3Nlc3NfcHV0KHNlc3MpOwkJLyogcmVsZWFzZSBmcm9tIHRhYmxlICovCisJcmRhdGEtPnBybGlfY291bnQtLTsKKwkvKiBYWFggVEJEIC0gY2xlYXJpbmcgYWN0aW9ucy4gIHVuaXQgYXR0biwgc2VlIDQuMTAgKi8KK30KKworLyoKKyAqIEhhbmRsZSBpbmNvbWluZyBGQ1AgcmVxdWVzdC4KKyAqIENhbGxlciBoYXMgdmVyaWZpZWQgdGhhdCB0aGUgZnJhbWUgaXMgdHlwZSBGQ1AuCisgKi8KK3N0YXRpYyB2b2lkIGZ0X3JlY3Yoc3RydWN0IGZjX2xwb3J0ICpscG9ydCwgc3RydWN0IGZjX2ZyYW1lICpmcCkKK3sKKwlzdHJ1Y3QgZnRfc2VzcyAqc2VzczsKKwl1MzIgc2lkID0gZmNfZnJhbWVfc2lkKGZwKTsKKworCUZUX1NFU1NfREJHKCJzaWQgJXhcbiIsIHNpZCk7CisKKwlzZXNzID0gZnRfc2Vzc19nZXQobHBvcnQsIHNpZCk7CisJaWYgKCFzZXNzKSB7CisJCUZUX1NFU1NfREJHKCJzaWQgJXggc2VzcyBsb29rdXAgZmFpbGVkXG4iLCBzaWQpOworCQkvKiBUQkQgWFhYIC0gaWYgRkNQX0NNTkQsIHNlbmQgUFJMTyAqLworCQlmY19mcmFtZV9mcmVlKGZwKTsKKwkJcmV0dXJuOworCX0KKwlmdF9yZWN2X3JlcShzZXNzLCBmcCk7CS8qIG11c3QgZG8gZnRfc2Vzc19wdXQoKSAqLworfQorCisvKgorICogUHJvdmlkZXIgb3BzIGZvciBsaWJmYy4KKyAqLworc3RydWN0IGZjNF9wcm92IGZ0X3Byb3YgPSB7CisJLnBybGkgPSBmdF9wcmxpLAorCS5wcmxvID0gZnRfcHJsbywKKwkucmVjdiA9IGZ0X3JlY3YsCisJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L25fZ3NtLmMgYi9kcml2ZXJzL3R0eS9uX2dzbS5jCmluZGV4IDQ3ZjhjZGIuLjc0MjczZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L25fZ3NtLmMKKysrIGIvZHJpdmVycy90dHkvbl9nc20uYwpAQCAtMTY1OCw4ICsxNjU4LDEyIEBACiAKIAlpZiAoKGdzbS0+Y29udHJvbCAmIH5QRikgPT0gVUkpCiAJCWdzbS0+ZmNzID0gZ3NtX2Zjc19hZGRfYmxvY2soZ3NtLT5mY3MsIGdzbS0+YnVmLCBnc20tPmxlbik7Ci0JLyogZ2VuZXJhdGUgZmluYWwgQ1JDIHdpdGggcmVjZWl2ZWQgRkNTICovCi0JZ3NtLT5mY3MgPSBnc21fZmNzX2FkZChnc20tPmZjcywgZ3NtLT5yZWNlaXZlZF9mY3MpOworCWlmIChnc20tPmVuY29kaW5nID09IDApeworCQkvKiBXQVJOSU5HOiBnc20tPnJlY2VpdmVkX2ZjcyBpcyB1c2VkIGZvciBnc20tPmVuY29kaW5nID0gMCBvbmx5LgorCQkgICAgICAgICAgICBJbiB0aGlzIGNhc2UgaXQgY29udGFpbiB0aGUgbGFzdCBwaWVjZSBvZiBkYXRhCisJCSAgICAgICAgICAgIHJlcXVpcmVkIHRvIGdlbmVyYXRlIGZpbmFsIENSQyAqLworCQlnc20tPmZjcyA9IGdzbV9mY3NfYWRkKGdzbS0+ZmNzLCBnc20tPnJlY2VpdmVkX2Zjcyk7CisJfQogCWlmIChnc20tPmZjcyAhPSBHT09EX0ZDUykgewogCQlnc20tPmJhZF9mY3MrKzsKIAkJaWYgKGRlYnVnICYgNCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWcKaW5kZXggODA0ODRhZi4uYjFmMGY4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWcKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWcKQEAgLTEzOTEsNiArMTM5MSwxNCBAQAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIENvbnNvbGUgb24gdGhlIE5XUCBzZXJpYWwgcG9ydHMuCiAKK2NvbmZpZyBTRVJJQUxfTEFOVElRCisJYm9vbCAiTGFudGlxIHNlcmlhbCBkcml2ZXIiCisJZGVwZW5kcyBvbiBMQU5USVEKKwlzZWxlY3QgU0VSSUFMX0NPUkUKKwlzZWxlY3QgU0VSSUFMX0NPUkVfQ09OU09MRQorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIGNvbnNvbGUgYW5kIFVBUlQgb24gTGFudGlxIFNvQ3MuCisKIGNvbmZpZyBTRVJJQUxfUUUKIAl0cmlzdGF0ZSAiRnJlZXNjYWxlIFFVSUNDIEVuZ2luZSBzZXJpYWwgcG9ydCBzdXBwb3J0IgogCWRlcGVuZHMgb24gUVVJQ0NfRU5HSU5FCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvTWFrZWZpbGUgYi9kcml2ZXJzL3R0eS9zZXJpYWwvTWFrZWZpbGUKaW5kZXggZmVlMDY5MC4uMzUyNzYwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9NYWtlZmlsZQpAQCAtOTQsMyArOTQsNCBAQAogb2JqLSQoQ09ORklHX1NFUklBTF9QQ0hfVUFSVCkJKz0gcGNoX3VhcnQubwogb2JqLSQoQ09ORklHX1NFUklBTF9NU01fU01EKQkrPSBtc21fc21kX3R0eS5vCiBvYmotJChDT05GSUdfU0VSSUFMX01YU19BVUFSVCkgKz0gbXhzLWF1YXJ0Lm8KK29iai0kKENPTkZJR19TRVJJQUxfTEFOVElRKQkrPSBsYW50aXEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL2lteC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL2lteC5jCmluZGV4IGNiMzZiMGQuLjYyZGY3MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9pbXguYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvaW14LmMKQEAgLTM4MiwxMiArMzgyLDEzIEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgaW14X3J0c2ludChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IGlteF9wb3J0ICpzcG9ydCA9IGRldl9pZDsKLQl1bnNpZ25lZCBpbnQgdmFsID0gcmVhZGwoc3BvcnQtPnBvcnQubWVtYmFzZSArIFVTUjEpICYgVVNSMV9SVFNTOworCXVuc2lnbmVkIGludCB2YWw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzcG9ydC0+cG9ydC5sb2NrLCBmbGFncyk7CiAKIAl3cml0ZWwoVVNSMV9SVFNELCBzcG9ydC0+cG9ydC5tZW1iYXNlICsgVVNSMSk7CisJdmFsID0gcmVhZGwoc3BvcnQtPnBvcnQubWVtYmFzZSArIFVTUjEpICYgVVNSMV9SVFNTOwogCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UoJnNwb3J0LT5wb3J0LCAhIXZhbCk7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzcG9ydC0+cG9ydC5zdGF0ZS0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9sYW50aXEuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9sYW50aXEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGNmMjc5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL2xhbnRpcS5jCkBAIC0wLDAgKzEsNzU2IEBACisvKgorICogIEJhc2VkIG9uIGRyaXZlcnMvY2hhci9zZXJpYWwuYywgYnkgTGludXMgVG9ydmFsZHMsIFRoZW9kb3JlIFRzJ28uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBJbmZpbmVvbiBJRkFQIERDIENPTSBDUEUKKyAqIENvcHlyaWdodCAoQykgMjAwNyBGZWxpeCBGaWV0a2F1IDxuYmRAb3BlbndydC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhvbWFzIExhbmdlciwgPHRob21hcy5sYW5nZXJAbGFudGlxLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgPGxhbnRpcV9zb2MuaD4KKworI2RlZmluZSBQT1JUX0xUUV9BU0MJCTExMQorI2RlZmluZSBNQVhQT1JUUwkJMgorI2RlZmluZSBVQVJUX0RVTU1ZX1VFUl9SWAkxCisjZGVmaW5lIERSVk5BTUUJCQkibHRxX2FzYyIKKyNpZmRlZiBfX0JJR19FTkRJQU4KKyNkZWZpbmUgTFRRX0FTQ19UQlVGCQkoMHgwMDIwICsgMykKKyNkZWZpbmUgTFRRX0FTQ19SQlVGCQkoMHgwMDI0ICsgMykKKyNlbHNlCisjZGVmaW5lIExUUV9BU0NfVEJVRgkJMHgwMDIwCisjZGVmaW5lIExUUV9BU0NfUkJVRgkJMHgwMDI0CisjZW5kaWYKKyNkZWZpbmUgTFRRX0FTQ19GU1RBVAkJMHgwMDQ4CisjZGVmaW5lIExUUV9BU0NfV0hCU1RBVEUJMHgwMDE4CisjZGVmaW5lIExUUV9BU0NfU1RBVEUJCTB4MDAxNAorI2RlZmluZSBMVFFfQVNDX0lSTkNSCQkweDAwRjgKKyNkZWZpbmUgTFRRX0FTQ19DTEMJCTB4MDAwMAorI2RlZmluZSBMVFFfQVNDX0lECQkweDAwMDgKKyNkZWZpbmUgTFRRX0FTQ19QSVNFTAkJMHgwMDA0CisjZGVmaW5lIExUUV9BU0NfVFhGQ09OCQkweDAwNDQKKyNkZWZpbmUgTFRRX0FTQ19SWEZDT04JCTB4MDA0MAorI2RlZmluZSBMVFFfQVNDX0NPTgkJMHgwMDEwCisjZGVmaW5lIExUUV9BU0NfQkcJCTB4MDA1MAorI2RlZmluZSBMVFFfQVNDX0lSTlJFTgkJMHgwMEY0CisKKyNkZWZpbmUgQVNDX0lSTlJFTl9UWAkJMHgxCisjZGVmaW5lIEFTQ19JUk5SRU5fUlgJCTB4MgorI2RlZmluZSBBU0NfSVJOUkVOX0VSUgkJMHg0CisjZGVmaW5lIEFTQ19JUk5SRU5fVFhfQlVGCTB4OAorI2RlZmluZSBBU0NfSVJOQ1JfVElSCQkweDEKKyNkZWZpbmUgQVNDX0lSTkNSX1JJUgkJMHgyCisjZGVmaW5lIEFTQ19JUk5DUl9FSVIJCTB4NAorCisjZGVmaW5lIEFTQ09QVF9DU0laRQkJMHgzCisjZGVmaW5lIFRYRklGT19GTAkJMQorI2RlZmluZSBSWEZJRk9fRkwJCTEKKyNkZWZpbmUgQVNDQ0xDX0RJU1MJCTB4MgorI2RlZmluZSBBU0NDTENfUk1DTUFTSwkJMHgwMDAwRkYwMAorI2RlZmluZSBBU0NDTENfUk1DT0ZGU0VUCTgKKyNkZWZpbmUgQVNDQ09OX01fOEFTWU5DCQkweDAKKyNkZWZpbmUgQVNDQ09OX01fN0FTWU5DCQkweDIKKyNkZWZpbmUgQVNDQ09OX09ERAkJMHgwMDAwMDAyMAorI2RlZmluZSBBU0NDT05fU1RQCQkweDAwMDAwMDgwCisjZGVmaW5lIEFTQ0NPTl9CUlMJCTB4MDAwMDAxMDAKKyNkZWZpbmUgQVNDQ09OX0ZERQkJMHgwMDAwMDIwMAorI2RlZmluZSBBU0NDT05fUgkJMHgwMDAwODAwMAorI2RlZmluZSBBU0NDT05fRkVOCQkweDAwMDIwMDAwCisjZGVmaW5lIEFTQ0NPTl9ST0VOCQkweDAwMDgwMDAwCisjZGVmaW5lIEFTQ0NPTl9UT0VOCQkweDAwMTAwMDAwCisjZGVmaW5lIEFTQ1NUQVRFX1BFCQkweDAwMDEwMDAwCisjZGVmaW5lIEFTQ1NUQVRFX0ZFCQkweDAwMDIwMDAwCisjZGVmaW5lIEFTQ1NUQVRFX1JPRQkJMHgwMDA4MDAwMAorI2RlZmluZSBBU0NTVEFURV9BTlkJCShBU0NTVEFURV9ST0V8QVNDU1RBVEVfUEV8QVNDU1RBVEVfRkUpCisjZGVmaW5lIEFTQ1dIQlNUQVRFX0NMUlJFTgkweDAwMDAwMDAxCisjZGVmaW5lIEFTQ1dIQlNUQVRFX1NFVFJFTgkweDAwMDAwMDAyCisjZGVmaW5lIEFTQ1dIQlNUQVRFX0NMUlBFCTB4MDAwMDAwMDQKKyNkZWZpbmUgQVNDV0hCU1RBVEVfQ0xSRkUJMHgwMDAwMDAwOAorI2RlZmluZSBBU0NXSEJTVEFURV9DTFJST0UJMHgwMDAwMDAyMAorI2RlZmluZSBBU0NUWEZDT05fVFhGRU4JCTB4MDAwMQorI2RlZmluZSBBU0NUWEZDT05fVFhGRkxVCTB4MDAwMgorI2RlZmluZSBBU0NUWEZDT05fVFhGSVRMTUFTSwkweDNGMDAKKyNkZWZpbmUgQVNDVFhGQ09OX1RYRklUTE9GRgk4CisjZGVmaW5lIEFTQ1JYRkNPTl9SWEZFTgkJMHgwMDAxCisjZGVmaW5lIEFTQ1JYRkNPTl9SWEZGTFUJMHgwMDAyCisjZGVmaW5lIEFTQ1JYRkNPTl9SWEZJVExNQVNLCTB4M0YwMAorI2RlZmluZSBBU0NSWEZDT05fUlhGSVRMT0ZGCTgKKyNkZWZpbmUgQVNDRlNUQVRfUlhGRkxNQVNLCTB4MDAzRgorI2RlZmluZSBBU0NGU1RBVF9UWEZGTE1BU0sJMHgzRjAwCisjZGVmaW5lIEFTQ0ZTVEFUX1RYRlJFRU1BU0sJMHgzRjAwMDAwMAorI2RlZmluZSBBU0NGU1RBVF9UWEZSRUVPRkYJMjQKKworc3RhdGljIHZvaWQgbHFhc2NfdHhfY2hhcnMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCk7CitzdGF0aWMgc3RydWN0IGx0cV91YXJ0X3BvcnQgKmxxYXNjX3BvcnRbTUFYUE9SVFNdOworc3RhdGljIHN0cnVjdCB1YXJ0X2RyaXZlciBscWFzY19yZWc7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGx0cV9hc2NfbG9jayk7CisKK3N0cnVjdCBsdHFfdWFydF9wb3J0IHsKKwlzdHJ1Y3QgdWFydF9wb3J0CXBvcnQ7CisJc3RydWN0IGNsawkJKmNsazsKKwl1bnNpZ25lZCBpbnQJCXR4X2lycTsKKwl1bnNpZ25lZCBpbnQJCXJ4X2lycTsKKwl1bnNpZ25lZCBpbnQJCWVycl9pcnE7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdAorbHRxX3VhcnRfcG9ydCAqdG9fbHRxX3VhcnRfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXJldHVybiBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IGx0cV91YXJ0X3BvcnQsIHBvcnQpOworfQorCitzdGF0aWMgdm9pZAorbHFhc2Nfc3RvcF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2xxYXNjX3N0YXJ0X3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbHRxX2FzY19sb2NrLCBmbGFncyk7CisJbHFhc2NfdHhfY2hhcnMocG9ydCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHRxX2FzY19sb2NrLCBmbGFncyk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAorbHFhc2Nfc3RvcF9yeChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCWx0cV93MzIoQVNDV0hCU1RBVEVfQ0xSUkVOLCBwb3J0LT5tZW1iYXNlICsgTFRRX0FTQ19XSEJTVEFURSk7Cit9CisKK3N0YXRpYyB2b2lkCitscWFzY19lbmFibGVfbXMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKK30KKworc3RhdGljIGludAorbHFhc2NfcnhfY2hhcnMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+c3RhdGUtPnBvcnQpOworCXVuc2lnbmVkIGludCBjaCA9IDAsIHJzciA9IDAsIGZpZm9jbnQ7CisKKwlpZiAoIXR0eSkgeworCQlkZXZfZGJnKHBvcnQtPmRldiwgIiVzOnR0eSBpcyBidXN5IG5vdyIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJZmlmb2NudCA9CisJCWx0cV9yMzIocG9ydC0+bWVtYmFzZSArIExUUV9BU0NfRlNUQVQpICYgQVNDRlNUQVRfUlhGRkxNQVNLOworCXdoaWxlIChmaWZvY250LS0pIHsKKwkJdTggZmxhZyA9IFRUWV9OT1JNQUw7CisJCWNoID0gbHRxX3I4KHBvcnQtPm1lbWJhc2UgKyBMVFFfQVNDX1JCVUYpOworCQlyc3IgPSAobHRxX3IzMihwb3J0LT5tZW1iYXNlICsgTFRRX0FTQ19TVEFURSkKKwkJCSYgQVNDU1RBVEVfQU5ZKSB8IFVBUlRfRFVNTVlfVUVSX1JYOworCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQlwb3J0LT5pY291bnQucngrKzsKKworCQkvKgorCQkgKiBOb3RlIHRoYXQgdGhlIGVycm9yIGhhbmRsaW5nIGNvZGUgaXMKKwkJICogb3V0IG9mIHRoZSBtYWluIGV4ZWN1dGlvbiBwYXRoCisJCSAqLworCQlpZiAocnNyICYgQVNDU1RBVEVfQU5ZKSB7CisJCQlpZiAocnNyICYgQVNDU1RBVEVfUEUpIHsKKwkJCQlwb3J0LT5pY291bnQucGFyaXR5Kys7CisJCQkJbHRxX3czMl9tYXNrKDAsIEFTQ1dIQlNUQVRFX0NMUlBFLAorCQkJCQlwb3J0LT5tZW1iYXNlICsgTFRRX0FTQ19XSEJTVEFURSk7CisJCQl9IGVsc2UgaWYgKHJzciAmIEFTQ1NUQVRFX0ZFKSB7CisJCQkJcG9ydC0+aWNvdW50LmZyYW1lKys7CisJCQkJbHRxX3czMl9tYXNrKDAsIEFTQ1dIQlNUQVRFX0NMUkZFLAorCQkJCQlwb3J0LT5tZW1iYXNlICsgTFRRX0FTQ19XSEJTVEFURSk7CisJCQl9CisJCQlpZiAocnNyICYgQVNDU1RBVEVfUk9FKSB7CisJCQkJcG9ydC0+aWNvdW50Lm92ZXJydW4rKzsKKwkJCQlsdHFfdzMyX21hc2soMCwgQVNDV0hCU1RBVEVfQ0xSUk9FLAorCQkJCQlwb3J0LT5tZW1iYXNlICsgTFRRX0FTQ19XSEJTVEFURSk7CisJCQl9CisKKwkJCXJzciAmPSBwb3J0LT5yZWFkX3N0YXR1c19tYXNrOworCisJCQlpZiAocnNyICYgQVNDU1RBVEVfUEUpCisJCQkJZmxhZyA9IFRUWV9QQVJJVFk7CisJCQllbHNlIGlmIChyc3IgJiBBU0NTVEFURV9GRSkKKwkJCQlmbGFnID0gVFRZX0ZSQU1FOworCQl9CisKKwkJaWYgKChyc3IgJiBwb3J0LT5pZ25vcmVfc3RhdHVzX21hc2spID09IDApCisJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGNoLCBmbGFnKTsKKworCQlpZiAocnNyICYgQVNDU1RBVEVfUk9FKQorCQkJLyoKKwkJCSAqIE92ZXJydW4gaXMgc3BlY2lhbCwgc2luY2UgaXQncyByZXBvcnRlZAorCQkJICogaW1tZWRpYXRlbHksIGFuZCBkb2Vzbid0IGFmZmVjdCB0aGUgY3VycmVudAorCQkJICogY2hhcmFjdGVyCisJCQkgKi8KKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX09WRVJSVU4pOworCX0KKwlpZiAoY2ggIT0gMCkKKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwl0dHlfa3JlZl9wdXQodHR5KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2xxYXNjX3R4X2NoYXJzKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPnN0YXRlLT54bWl0OworCWlmICh1YXJ0X3R4X3N0b3BwZWQocG9ydCkpIHsKKwkJbHFhc2Nfc3RvcF90eChwb3J0KTsKKwkJcmV0dXJuOworCX0KKworCXdoaWxlICgoKGx0cV9yMzIocG9ydC0+bWVtYmFzZSArIExUUV9BU0NfRlNUQVQpICYKKwkJQVNDRlNUQVRfVFhGUkVFTUFTSykgPj4gQVNDRlNUQVRfVFhGUkVFT0ZGKSAhPSAwKSB7CisJCWlmIChwb3J0LT54X2NoYXIpIHsKKwkJCWx0cV93OChwb3J0LT54X2NoYXIsIHBvcnQtPm1lbWJhc2UgKyBMVFFfQVNDX1RCVUYpOworCQkJcG9ydC0+aWNvdW50LnR4Kys7CisJCQlwb3J0LT54X2NoYXIgPSAwOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAodWFydF9jaXJjX2VtcHR5KHhtaXQpKQorCQkJYnJlYWs7CisKKwkJbHRxX3c4KHBvcnQtPnN0YXRlLT54bWl0LmJ1Zltwb3J0LT5zdGF0ZS0+eG1pdC50YWlsXSwKKwkJCXBvcnQtPm1lbWJhc2UgKyBMVFFfQVNDX1RCVUYpOworCQl4bWl0LT50YWlsID0gKHhtaXQtPnRhaWwgKyAxKSAmIChVQVJUX1hNSVRfU0laRSAtIDEpOworCQlwb3J0LT5pY291bnQudHgrKzsKKwl9CisKKwlpZiAodWFydF9jaXJjX2NoYXJzX3BlbmRpbmcoeG1pdCkgPCBXQUtFVVBfQ0hBUlMpCisJCXVhcnRfd3JpdGVfd2FrZXVwKHBvcnQpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QKK2xxYXNjX3R4X2ludChpbnQgaXJxLCB2b2lkICpfcG9ydCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAoc3RydWN0IHVhcnRfcG9ydCAqKV9wb3J0OworCXNwaW5fbG9ja19pcnFzYXZlKCZsdHFfYXNjX2xvY2ssIGZsYWdzKTsKKwlsdHFfdzMyKEFTQ19JUk5DUl9USVIsIHBvcnQtPm1lbWJhc2UgKyBMVFFfQVNDX0lSTkNSKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsdHFfYXNjX2xvY2ssIGZsYWdzKTsKKwlscWFzY19zdGFydF90eChwb3J0KTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorbHFhc2NfZXJyX2ludChpbnQgaXJxLCB2b2lkICpfcG9ydCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAoc3RydWN0IHVhcnRfcG9ydCAqKV9wb3J0OworCXNwaW5fbG9ja19pcnFzYXZlKCZsdHFfYXNjX2xvY2ssIGZsYWdzKTsKKwkvKiBjbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJbHRxX3czMl9tYXNrKDAsIEFTQ1dIQlNUQVRFX0NMUlBFIHwgQVNDV0hCU1RBVEVfQ0xSRkUgfAorCQlBU0NXSEJTVEFURV9DTFJST0UsIHBvcnQtPm1lbWJhc2UgKyBMVFFfQVNDX1dIQlNUQVRFKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsdHFfYXNjX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorbHFhc2NfcnhfaW50KGludCBpcnEsIHZvaWQgKl9wb3J0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdWFydF9wb3J0ICopX3BvcnQ7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmx0cV9hc2NfbG9jaywgZmxhZ3MpOworCWx0cV93MzIoQVNDX0lSTkNSX1JJUiwgcG9ydC0+bWVtYmFzZSArIExUUV9BU0NfSVJOQ1IpOworCWxxYXNjX3J4X2NoYXJzKHBvcnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmx0cV9hc2NfbG9jaywgZmxhZ3MpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorbHFhc2NfdHhfZW1wdHkoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlpbnQgc3RhdHVzOworCXN0YXR1cyA9IGx0cV9yMzIocG9ydC0+bWVtYmFzZSArIExUUV9BU0NfRlNUQVQpICYgQVNDRlNUQVRfVFhGRkxNQVNLOworCXJldHVybiBzdGF0dXMgPyAwIDogVElPQ1NFUl9URU1UOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CitscWFzY19nZXRfbWN0cmwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlyZXR1cm4gVElPQ01fQ1RTIHwgVElPQ01fQ0FSIHwgVElPQ01fRFNSOworfQorCitzdGF0aWMgdm9pZAorbHFhc2Nfc2V0X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVfaW50IG1jdHJsKQoreworfQorCitzdGF0aWMgdm9pZAorbHFhc2NfYnJlYWtfY3RsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSkKK3sKK30KKworc3RhdGljIGludAorbHFhc2Nfc3RhcnR1cChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBsdHFfdWFydF9wb3J0ICpsdHFfcG9ydCA9IHRvX2x0cV91YXJ0X3BvcnQocG9ydCk7CisJaW50IHJldHZhbDsKKworCXBvcnQtPnVhcnRjbGsgPSBjbGtfZ2V0X3JhdGUobHRxX3BvcnQtPmNsayk7CisKKwlsdHFfdzMyX21hc2soQVNDQ0xDX0RJU1MgfCBBU0NDTENfUk1DTUFTSywgKDEgPDwgQVNDQ0xDX1JNQ09GRlNFVCksCisJCXBvcnQtPm1lbWJhc2UgKyBMVFFfQVNDX0NMQyk7CisKKwlsdHFfdzMyKDAsIHBvcnQtPm1lbWJhc2UgKyBMVFFfQVNDX1BJU0VMKTsKKwlsdHFfdzMyKAorCQkoKFRYRklGT19GTCA8PCBBU0NUWEZDT05fVFhGSVRMT0ZGKSAmIEFTQ1RYRkNPTl9UWEZJVExNQVNLKSB8CisJCUFTQ1RYRkNPTl9UWEZFTiB8IEFTQ1RYRkNPTl9UWEZGTFUsCisJCXBvcnQtPm1lbWJhc2UgKyBMVFFfQVNDX1RYRkNPTik7CisJbHRxX3czMigKKwkJKChSWEZJRk9fRkwgPDwgQVNDUlhGQ09OX1JYRklUTE9GRikgJiBBU0NSWEZDT05fUlhGSVRMTUFTSykKKwkJfCBBU0NSWEZDT05fUlhGRU4gfCBBU0NSWEZDT05fUlhGRkxVLAorCQlwb3J0LT5tZW1iYXNlICsgTFRRX0FTQ19SWEZDT04pOworCS8qIG1ha2Ugc3VyZSBvdGhlciBzZXR0aW5ncyBhcmUgd3JpdHRlbiB0byBoYXJkd2FyZSBiZWZvcmUKKwkgKiBzZXR0aW5nIGVuYWJsZSBiaXRzCisJICovCisJd21iKCk7CisJbHRxX3czMl9tYXNrKDAsIEFTQ0NPTl9NXzhBU1lOQyB8IEFTQ0NPTl9GRU4gfCBBU0NDT05fVE9FTiB8CisJCUFTQ0NPTl9ST0VOLCBwb3J0LT5tZW1iYXNlICsgTFRRX0FTQ19DT04pOworCisJcmV0dmFsID0gcmVxdWVzdF9pcnEobHRxX3BvcnQtPnR4X2lycSwgbHFhc2NfdHhfaW50LAorCQlJUlFGX0RJU0FCTEVELCAiYXNjX3R4IiwgcG9ydCk7CisJaWYgKHJldHZhbCkgeworCQlwcl9lcnIoImZhaWxlZCB0byByZXF1ZXN0IGxxYXNjX3R4X2ludFxuIik7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJcmV0dmFsID0gcmVxdWVzdF9pcnEobHRxX3BvcnQtPnJ4X2lycSwgbHFhc2NfcnhfaW50LAorCQlJUlFGX0RJU0FCTEVELCAiYXNjX3J4IiwgcG9ydCk7CisJaWYgKHJldHZhbCkgeworCQlwcl9lcnIoImZhaWxlZCB0byByZXF1ZXN0IGxxYXNjX3J4X2ludFxuIik7CisJCWdvdG8gZXJyMTsKKwl9CisKKwlyZXR2YWwgPSByZXF1ZXN0X2lycShsdHFfcG9ydC0+ZXJyX2lycSwgbHFhc2NfZXJyX2ludCwKKwkJSVJRRl9ESVNBQkxFRCwgImFzY19lcnIiLCBwb3J0KTsKKwlpZiAocmV0dmFsKSB7CisJCXByX2VycigiZmFpbGVkIHRvIHJlcXVlc3QgbHFhc2NfZXJyX2ludFxuIik7CisJCWdvdG8gZXJyMjsKKwl9CisKKwlsdHFfdzMyKEFTQ19JUk5SRU5fUlggfCBBU0NfSVJOUkVOX0VSUiB8IEFTQ19JUk5SRU5fVFgsCisJCXBvcnQtPm1lbWJhc2UgKyBMVFFfQVNDX0lSTlJFTik7CisJcmV0dXJuIDA7CisKK2VycjI6CisJZnJlZV9pcnEobHRxX3BvcnQtPnJ4X2lycSwgcG9ydCk7CitlcnIxOgorCWZyZWVfaXJxKGx0cV9wb3J0LT50eF9pcnEsIHBvcnQpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkCitscWFzY19zaHV0ZG93bihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBsdHFfdWFydF9wb3J0ICpsdHFfcG9ydCA9IHRvX2x0cV91YXJ0X3BvcnQocG9ydCk7CisJZnJlZV9pcnEobHRxX3BvcnQtPnR4X2lycSwgcG9ydCk7CisJZnJlZV9pcnEobHRxX3BvcnQtPnJ4X2lycSwgcG9ydCk7CisJZnJlZV9pcnEobHRxX3BvcnQtPmVycl9pcnEsIHBvcnQpOworCisJbHRxX3czMigwLCBwb3J0LT5tZW1iYXNlICsgTFRRX0FTQ19DT04pOworCWx0cV93MzJfbWFzayhBU0NSWEZDT05fUlhGRU4sIEFTQ1JYRkNPTl9SWEZGTFUsCisJCXBvcnQtPm1lbWJhc2UgKyBMVFFfQVNDX1JYRkNPTik7CisJbHRxX3czMl9tYXNrKEFTQ1RYRkNPTl9UWEZFTiwgQVNDVFhGQ09OX1RYRkZMVSwKKwkJcG9ydC0+bWVtYmFzZSArIExUUV9BU0NfVFhGQ09OKTsKK30KKworc3RhdGljIHZvaWQKK2xxYXNjX3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCisJc3RydWN0IGt0ZXJtaW9zICpuZXcsIHN0cnVjdCBrdGVybWlvcyAqb2xkKQoreworCXVuc2lnbmVkIGludCBjZmxhZzsKKwl1bnNpZ25lZCBpbnQgaWZsYWc7CisJdW5zaWduZWQgaW50IGRpdmlzb3I7CisJdW5zaWduZWQgaW50IGJhdWQ7CisJdW5zaWduZWQgaW50IGNvbiA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNmbGFnID0gbmV3LT5jX2NmbGFnOworCWlmbGFnID0gbmV3LT5jX2lmbGFnOworCisJc3dpdGNoIChjZmxhZyAmIENTSVpFKSB7CisJY2FzZSBDUzc6CisJCWNvbiA9IEFTQ0NPTl9NXzdBU1lOQzsKKwkJYnJlYWs7CisKKwljYXNlIENTNToKKwljYXNlIENTNjoKKwlkZWZhdWx0OgorCQluZXctPmNfY2ZsYWcgJj0gfiBDU0laRTsKKwkJbmV3LT5jX2NmbGFnIHw9IENTODsKKwkJY29uID0gQVNDQ09OX01fOEFTWU5DOworCQlicmVhazsKKwl9CisKKwljZmxhZyAmPSB+Q01TUEFSOyAvKiBNYXJrL1NwYWNlIHBhcml0eSBpcyBub3Qgc3VwcG9ydGVkICovCisKKwlpZiAoY2ZsYWcgJiBDU1RPUEIpCisJCWNvbiB8PSBBU0NDT05fU1RQOworCisJaWYgKGNmbGFnICYgUEFSRU5CKSB7CisJCWlmICghKGNmbGFnICYgUEFST0REKSkKKwkJCWNvbiAmPSB+QVNDQ09OX09ERDsKKwkJZWxzZQorCQkJY29uIHw9IEFTQ0NPTl9PREQ7CisJfQorCisJcG9ydC0+cmVhZF9zdGF0dXNfbWFzayA9IEFTQ1NUQVRFX1JPRTsKKwlpZiAoaWZsYWcgJiBJTlBDSykKKwkJcG9ydC0+cmVhZF9zdGF0dXNfbWFzayB8PSBBU0NTVEFURV9GRSB8IEFTQ1NUQVRFX1BFOworCisJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrID0gMDsKKwlpZiAoaWZsYWcgJiBJR05QQVIpCisJCXBvcnQtPmlnbm9yZV9zdGF0dXNfbWFzayB8PSBBU0NTVEFURV9GRSB8IEFTQ1NUQVRFX1BFOworCisJaWYgKGlmbGFnICYgSUdOQlJLKSB7CisJCS8qCisJCSAqIElmIHdlJ3JlIGlnbm9yaW5nIHBhcml0eSBhbmQgYnJlYWsgaW5kaWNhdG9ycywKKwkJICogaWdub3JlIG92ZXJydW5zIHRvbyAoZm9yIHJlYWwgcmF3IHN1cHBvcnQpLgorCQkgKi8KKwkJaWYgKGlmbGFnICYgSUdOUEFSKQorCQkJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrIHw9IEFTQ1NUQVRFX1JPRTsKKwl9CisKKwlpZiAoKGNmbGFnICYgQ1JFQUQpID09IDApCisJCXBvcnQtPmlnbm9yZV9zdGF0dXNfbWFzayB8PSBVQVJUX0RVTU1ZX1VFUl9SWDsKKworCS8qIHNldCBlcnJvciBzaWduYWxzICAtIGZyYW1pbmcsIHBhcml0eSAgYW5kIG92ZXJydW4sIGVuYWJsZSByZWNlaXZlciAqLworCWNvbiB8PSBBU0NDT05fRkVOIHwgQVNDQ09OX1RPRU4gfCBBU0NDT05fUk9FTjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsdHFfYXNjX2xvY2ssIGZsYWdzKTsKKworCS8qIHNldCB1cCBDT04gKi8KKwlsdHFfdzMyX21hc2soMCwgY29uLCBwb3J0LT5tZW1iYXNlICsgTFRRX0FTQ19DT04pOworCisJLyogU2V0IGJhdWQgcmF0ZSAtIHRha2UgYSBkaXZpZGVyIG9mIDIgaW50byBhY2NvdW50ICovCisJYmF1ZCA9IHVhcnRfZ2V0X2JhdWRfcmF0ZShwb3J0LCBuZXcsIG9sZCwgMCwgcG9ydC0+dWFydGNsayAvIDE2KTsKKwlkaXZpc29yID0gdWFydF9nZXRfZGl2aXNvcihwb3J0LCBiYXVkKTsKKwlkaXZpc29yID0gZGl2aXNvciAvIDIgLSAxOworCisJLyogZGlzYWJsZSB0aGUgYmF1ZHJhdGUgZ2VuZXJhdG9yICovCisJbHRxX3czMl9tYXNrKEFTQ0NPTl9SLCAwLCBwb3J0LT5tZW1iYXNlICsgTFRRX0FTQ19DT04pOworCisJLyogbWFrZSBzdXJlIHRoZSBmcmFjdGlvbmFsIGRpdmlkZXIgaXMgb2ZmICovCisJbHRxX3czMl9tYXNrKEFTQ0NPTl9GREUsIDAsIHBvcnQtPm1lbWJhc2UgKyBMVFFfQVNDX0NPTik7CisKKwkvKiBzZXQgdXAgdG8gdXNlIGRpdmlzb3Igb2YgMiAqLworCWx0cV93MzJfbWFzayhBU0NDT05fQlJTLCAwLCBwb3J0LT5tZW1iYXNlICsgTFRRX0FTQ19DT04pOworCisJLyogbm93IHdlIGNhbiB3cml0ZSB0aGUgbmV3IGJhdWRyYXRlIGludG8gdGhlIHJlZ2lzdGVyICovCisJbHRxX3czMihkaXZpc29yLCBwb3J0LT5tZW1iYXNlICsgTFRRX0FTQ19CRyk7CisKKwkvKiB0dXJuIHRoZSBiYXVkcmF0ZSBnZW5lcmF0b3IgYmFjayBvbiAqLworCWx0cV93MzJfbWFzaygwLCBBU0NDT05fUiwgcG9ydC0+bWVtYmFzZSArIExUUV9BU0NfQ09OKTsKKworCS8qIGVuYWJsZSByeCAqLworCWx0cV93MzIoQVNDV0hCU1RBVEVfU0VUUkVOLCBwb3J0LT5tZW1iYXNlICsgTFRRX0FTQ19XSEJTVEFURSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsdHFfYXNjX2xvY2ssIGZsYWdzKTsKKworCS8qIERvbid0IHJld3JpdGUgQjAgKi8KKyAgICAgICAgaWYgKHR0eV90ZXJtaW9zX2JhdWRfcmF0ZShuZXcpKQorCQl0dHlfdGVybWlvc19lbmNvZGVfYmF1ZF9yYXRlKG5ldywgYmF1ZCwgYmF1ZCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKgorbHFhc2NfdHlwZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCWlmIChwb3J0LT50eXBlID09IFBPUlRfTFRRX0FTQykKKwkJcmV0dXJuIERSVk5BTUU7CisJZWxzZQorCQlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK2xxYXNjX3JlbGVhc2VfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCWlmIChwb3J0LT5mbGFncyAmIFVQRl9JT1JFTUFQKSB7CisJCWlvdW5tYXAocG9ydC0+bWVtYmFzZSk7CisJCXBvcnQtPm1lbWJhc2UgPSBOVUxMOworCX0KK30KKworc3RhdGljIGludAorbHFhc2NfcmVxdWVzdF9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShwb3J0LT5kZXYpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBzaXplOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3Qgb2J0YWluIEkvTyBtZW1vcnkgcmVnaW9uIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlzaXplID0gcmVzb3VyY2Vfc2l6ZShyZXMpOworCisJcmVzID0gZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKKwkJc2l6ZSwgZGV2X25hbWUoJnBkZXYtPmRldikpOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZXF1ZXN0IEkvTyBtZW1vcnkgcmVnaW9uIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKHBvcnQtPmZsYWdzICYgVVBGX0lPUkVNQVApIHsKKwkJcG9ydC0+bWVtYmFzZSA9IGRldm1faW9yZW1hcF9ub2NhY2hlKCZwZGV2LT5kZXYsCisJCQlwb3J0LT5tYXBiYXNlLCBzaXplKTsKKwkJaWYgKHBvcnQtPm1lbWJhc2UgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2xxYXNjX2NvbmZpZ19wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBmbGFncykKK3sKKwlpZiAoZmxhZ3MgJiBVQVJUX0NPTkZJR19UWVBFKSB7CisJCXBvcnQtPnR5cGUgPSBQT1JUX0xUUV9BU0M7CisJCWxxYXNjX3JlcXVlc3RfcG9ydChwb3J0KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK2xxYXNjX3ZlcmlmeV9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCisJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgKnNlcikKK3sKKwlpbnQgcmV0ID0gMDsKKwlpZiAoc2VyLT50eXBlICE9IFBPUlRfVU5LTk9XTiAmJiBzZXItPnR5cGUgIT0gUE9SVF9MVFFfQVNDKQorCQlyZXQgPSAtRUlOVkFMOworCWlmIChzZXItPmlycSA8IDAgfHwgc2VyLT5pcnEgPj0gTlJfSVJRUykKKwkJcmV0ID0gLUVJTlZBTDsKKwlpZiAoc2VyLT5iYXVkX2Jhc2UgPCA5NjAwKQorCQlyZXQgPSAtRUlOVkFMOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9vcHMgbHFhc2NfcG9wcyA9IHsKKwkudHhfZW1wdHkgPQlscWFzY190eF9lbXB0eSwKKwkuc2V0X21jdHJsID0JbHFhc2Nfc2V0X21jdHJsLAorCS5nZXRfbWN0cmwgPQlscWFzY19nZXRfbWN0cmwsCisJLnN0b3BfdHggPQlscWFzY19zdG9wX3R4LAorCS5zdGFydF90eCA9CWxxYXNjX3N0YXJ0X3R4LAorCS5zdG9wX3J4ID0JbHFhc2Nfc3RvcF9yeCwKKwkuZW5hYmxlX21zID0JbHFhc2NfZW5hYmxlX21zLAorCS5icmVha19jdGwgPQlscWFzY19icmVha19jdGwsCisJLnN0YXJ0dXAgPQlscWFzY19zdGFydHVwLAorCS5zaHV0ZG93biA9CWxxYXNjX3NodXRkb3duLAorCS5zZXRfdGVybWlvcyA9CWxxYXNjX3NldF90ZXJtaW9zLAorCS50eXBlID0JCWxxYXNjX3R5cGUsCisJLnJlbGVhc2VfcG9ydCA9CWxxYXNjX3JlbGVhc2VfcG9ydCwKKwkucmVxdWVzdF9wb3J0ID0JbHFhc2NfcmVxdWVzdF9wb3J0LAorCS5jb25maWdfcG9ydCA9CWxxYXNjX2NvbmZpZ19wb3J0LAorCS52ZXJpZnlfcG9ydCA9CWxxYXNjX3ZlcmlmeV9wb3J0LAorfTsKKworc3RhdGljIHZvaWQKK2xxYXNjX2NvbnNvbGVfcHV0Y2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgY2gpCit7CisJaW50IGZpZm9mcmVlOworCisJaWYgKCFwb3J0LT5tZW1iYXNlKQorCQlyZXR1cm47CisKKwlkbyB7CisJCWZpZm9mcmVlID0gKGx0cV9yMzIocG9ydC0+bWVtYmFzZSArIExUUV9BU0NfRlNUQVQpCisJCQkmIEFTQ0ZTVEFUX1RYRlJFRU1BU0spID4+IEFTQ0ZTVEFUX1RYRlJFRU9GRjsKKwl9IHdoaWxlIChmaWZvZnJlZSA9PSAwKTsKKwlsdHFfdzgoY2gsIHBvcnQtPm1lbWJhc2UgKyBMVFFfQVNDX1RCVUYpOworfQorCisKK3N0YXRpYyB2b2lkCitscWFzY19jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqcywgdV9pbnQgY291bnQpCit7CisJc3RydWN0IGx0cV91YXJ0X3BvcnQgKmx0cV9wb3J0OworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChjby0+aW5kZXggPj0gTUFYUE9SVFMpCisJCXJldHVybjsKKworCWx0cV9wb3J0ID0gbHFhc2NfcG9ydFtjby0+aW5kZXhdOworCWlmICghbHRxX3BvcnQpCisJCXJldHVybjsKKworCXBvcnQgPSAmbHRxX3BvcnQtPnBvcnQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbHRxX2FzY19sb2NrLCBmbGFncyk7CisJdWFydF9jb25zb2xlX3dyaXRlKHBvcnQsIHMsIGNvdW50LCBscWFzY19jb25zb2xlX3B1dGNoYXIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmx0cV9hc2NfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IF9faW5pdAorbHFhc2NfY29uc29sZV9zZXR1cChzdHJ1Y3QgY29uc29sZSAqY28sIGNoYXIgKm9wdGlvbnMpCit7CisJc3RydWN0IGx0cV91YXJ0X3BvcnQgKmx0cV9wb3J0OworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQ7CisJaW50IGJhdWQgPSAxMTUyMDA7CisJaW50IGJpdHMgPSA4OworCWludCBwYXJpdHkgPSAnbic7CisJaW50IGZsb3cgPSAnbic7CisKKwlpZiAoY28tPmluZGV4ID49IE1BWFBPUlRTKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWx0cV9wb3J0ID0gbHFhc2NfcG9ydFtjby0+aW5kZXhdOworCWlmICghbHRxX3BvcnQpCisJCXJldHVybiAtRU5PREVWOworCisJcG9ydCA9ICZsdHFfcG9ydC0+cG9ydDsKKworCXBvcnQtPnVhcnRjbGsgPSBjbGtfZ2V0X3JhdGUobHRxX3BvcnQtPmNsayk7CisKKwlpZiAob3B0aW9ucykKKwkJdWFydF9wYXJzZV9vcHRpb25zKG9wdGlvbnMsICZiYXVkLCAmcGFyaXR5LCAmYml0cywgJmZsb3cpOworCXJldHVybiB1YXJ0X3NldF9vcHRpb25zKHBvcnQsIGNvLCBiYXVkLCBwYXJpdHksIGJpdHMsIGZsb3cpOworfQorCitzdGF0aWMgc3RydWN0IGNvbnNvbGUgbHFhc2NfY29uc29sZSA9IHsKKwkubmFtZSA9CQkidHR5TFRRIiwKKwkud3JpdGUgPQlscWFzY19jb25zb2xlX3dyaXRlLAorCS5kZXZpY2UgPQl1YXJ0X2NvbnNvbGVfZGV2aWNlLAorCS5zZXR1cCA9CWxxYXNjX2NvbnNvbGVfc2V0dXAsCisJLmZsYWdzID0JQ09OX1BSSU5UQlVGRkVSLAorCS5pbmRleCA9CS0xLAorCS5kYXRhID0JCSZscWFzY19yZWcsCit9OworCitzdGF0aWMgaW50IF9faW5pdAorbHFhc2NfY29uc29sZV9pbml0KHZvaWQpCit7CisJcmVnaXN0ZXJfY29uc29sZSgmbHFhc2NfY29uc29sZSk7CisJcmV0dXJuIDA7Cit9Citjb25zb2xlX2luaXRjYWxsKGxxYXNjX2NvbnNvbGVfaW5pdCk7CisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgbHFhc2NfcmVnID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5kcml2ZXJfbmFtZSA9CURSVk5BTUUsCisJLmRldl9uYW1lID0JInR0eUxUUSIsCisJLm1ham9yID0JMCwKKwkubWlub3IgPQkwLAorCS5uciA9CQlNQVhQT1JUUywKKwkuY29ucyA9CQkmbHFhc2NfY29uc29sZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0CitscWFzY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBsdHFfdWFydF9wb3J0ICpsdHFfcG9ydDsKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0OworCXN0cnVjdCByZXNvdXJjZSAqbW1yZXMsICppcnFyZXM7CisJaW50IHR4X2lycSwgcnhfaXJxLCBlcnJfaXJxOworCXN0cnVjdCBjbGsgKmNsazsKKwlpbnQgcmV0OworCisJbW1yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlycXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKCFtbXJlcyB8fCAhaXJxcmVzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChwZGV2LT5pZCA+PSBNQVhQT1JUUykKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmIChscWFzY19wb3J0W3BkZXYtPmlkXSAhPSBOVUxMKQorCQlyZXR1cm4gLUVCVVNZOworCisJY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiZnBpIik7CisJaWYgKElTX0VSUihjbGspKSB7CisJCXByX2VycigiZmFpbGVkIHRvIGdldCBmcGkgY2xrXG4iKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJdHhfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgInR4Iik7CisJcnhfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgInJ4Iik7CisJZXJyX2lycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJlcnIiKTsKKwlpZiAoKHR4X2lycSA8IDApIHwgKHJ4X2lycSA8IDApIHwgKGVycl9pcnEgPCAwKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlsdHFfcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsdHFfdWFydF9wb3J0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsdHFfcG9ydCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwb3J0ID0gJmx0cV9wb3J0LT5wb3J0OworCisJcG9ydC0+aW90eXBlCT0gU0VSSUFMX0lPX01FTTsKKwlwb3J0LT5mbGFncwk9IEFTWU5DX0JPT1RfQVVUT0NPTkYgfCBVUEZfSU9SRU1BUDsKKwlwb3J0LT5vcHMJPSAmbHFhc2NfcG9wczsKKwlwb3J0LT5maWZvc2l6ZQk9IDE2OworCXBvcnQtPnR5cGUJPSBQT1JUX0xUUV9BU0MsCisJcG9ydC0+bGluZQk9IHBkZXYtPmlkOworCXBvcnQtPmRldgk9ICZwZGV2LT5kZXY7CisKKwlwb3J0LT5pcnEJPSB0eF9pcnE7IC8qIHVudXNlZCwganVzdCB0byBiZSBiYWNrd2FyZC1jb21wYXRpYmUgKi8KKwlwb3J0LT5tYXBiYXNlCT0gbW1yZXMtPnN0YXJ0OworCisJbHRxX3BvcnQtPmNsawk9IGNsazsKKworCWx0cV9wb3J0LT50eF9pcnEgPSB0eF9pcnE7CisJbHRxX3BvcnQtPnJ4X2lycSA9IHJ4X2lycTsKKwlsdHFfcG9ydC0+ZXJyX2lycSA9IGVycl9pcnE7CisKKwlscWFzY19wb3J0W3BkZXYtPmlkXSA9IGx0cV9wb3J0OworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGx0cV9wb3J0KTsKKworCXJldCA9IHVhcnRfYWRkX29uZV9wb3J0KCZscWFzY19yZWcsIHBvcnQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbHFhc2NfZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9IERSVk5BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitpbnQgX19pbml0Citpbml0X2xxYXNjKHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHVhcnRfcmVnaXN0ZXJfZHJpdmVyKCZscWFzY19yZWcpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmbHFhc2NfZHJpdmVyLCBscWFzY19wcm9iZSk7CisJaWYgKHJldCAhPSAwKQorCQl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZscWFzY19yZWcpOworCisJcmV0dXJuIHJldDsKK30KKworbW9kdWxlX2luaXQoaW5pdF9scWFzYyk7CisKK01PRFVMRV9ERVNDUklQVElPTigiTGFudGlxIHNlcmlhbCBwb3J0IGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL29mX3NlcmlhbC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL29mX3NlcmlhbC5jCmluZGV4IDBlOGVlYzUuLmM5MTFiMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9vZl9zZXJpYWwuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvb2Zfc2VyaWFsLmMKQEAgLTgwLDE0ICs4MCwxNyBAQAogLyoKICAqIFRyeSB0byByZWdpc3RlciBhIHNlcmlhbCBwb3J0CiAgKi8KK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX3BsYXRmb3JtX3NlcmlhbF90YWJsZVtdOwogc3RhdGljIGludCBfX2RldmluaXQgb2ZfcGxhdGZvcm1fc2VyaWFsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KQogeworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCXN0cnVjdCBvZl9zZXJpYWxfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgdWFydF9wb3J0IHBvcnQ7CiAJaW50IHBvcnRfdHlwZTsKIAlpbnQgcmV0OwogCi0JaWYgKCFvZmRldi0+ZGV2Lm9mX21hdGNoKQorCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKG9mX3BsYXRmb3JtX3NlcmlhbF90YWJsZSwgJm9mZGV2LT5kZXYpOworCWlmICghbWF0Y2gpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKG9mX2ZpbmRfcHJvcGVydHkob2ZkZXYtPmRldi5vZl9ub2RlLCAidXNlZC1ieS1ydGFzIiwgTlVMTCkpCkBAIC05Nyw3ICsxMDAsNyBAQAogCWlmIChpbmZvID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcG9ydF90eXBlID0gKHVuc2lnbmVkIGxvbmcpb2ZkZXYtPmRldi5vZl9tYXRjaC0+ZGF0YTsKKwlwb3J0X3R5cGUgPSAodW5zaWduZWQgbG9uZyltYXRjaC0+ZGF0YTsKIAlyZXQgPSBvZl9wbGF0Zm9ybV9zZXJpYWxfc2V0dXAob2ZkZXYsIHBvcnRfdHlwZSwgJnBvcnQpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91aW8vdWlvLmMgYi9kcml2ZXJzL3Vpby91aW8uYwppbmRleCA1MWZlMTc5Li5kMmVmZTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Vpby91aW8uYworKysgYi9kcml2ZXJzL3Vpby91aW8uYwpAQCAtMzgxLDcgKzM4MSwxMyBAQAogCQkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBleGl0OwogCX0KLQlpZGV2LT5taW5vciA9IGlkICYgTUFYX0lEX01BU0s7CisJaWYgKGlkIDwgVUlPX01BWF9ERVZJQ0VTKSB7CisJCWlkZXYtPm1pbm9yID0gaWQ7CisJfSBlbHNlIHsKKwkJZGV2X2VycihpZGV2LT5kZXYsICJ0b28gbWFueSB1aW8gZGV2aWNlc1xuIik7CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWlkcl9yZW1vdmUoJnVpb19pZHIsIGlkKTsKKwl9CiBleGl0OgogCW11dGV4X3VubG9jaygmbWlub3JfbG9jayk7CiAJcmV0dXJuIHJldHZhbDsKQEAgLTU4NywxNCArNTkzLDEyIEBACiAKIHN0YXRpYyBpbnQgdWlvX2ZpbmRfbWVtX2luZGV4KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewotCWludCBtaTsKIAlzdHJ1Y3QgdWlvX2RldmljZSAqaWRldiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwogCi0JZm9yIChtaSA9IDA7IG1pIDwgTUFYX1VJT19NQVBTOyBtaSsrKSB7Ci0JCWlmIChpZGV2LT5pbmZvLT5tZW1bbWldLnNpemUgPT0gMCkKKwlpZiAodm1hLT52bV9wZ29mZiA8IE1BWF9VSU9fTUFQUykgeworCQlpZiAoaWRldi0+aW5mby0+bWVtW3ZtYS0+dm1fcGdvZmZdLnNpemUgPT0gMCkKIAkJCXJldHVybiAtMTsKLQkJaWYgKHZtYS0+dm1fcGdvZmYgPT0gbWkpCi0JCQlyZXR1cm4gbWk7CisJCXJldHVybiAoaW50KXZtYS0+dm1fcGdvZmY7CiAJfQogCXJldHVybiAtMTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL3Vpb19uZXR4LmMgYi9kcml2ZXJzL3Vpby91aW9fbmV0eC5jCmluZGV4IDVmZmRiNDguLmE4NzlmZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdWlvL3Vpb19uZXR4LmMKKysrIGIvZHJpdmVycy91aW8vdWlvX25ldHguYwpAQCAtMTgsNiArMTgsOSBAQAogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfSElMU0NIRVIJCTB4MTVDRgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVFgJMHgwMDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUUExDCTB4MDAxMAorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX05FVFBMQ19SQU0JMHgwMDAwCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfTkVUUExDX0ZMQVNICTB4MDAwMQogI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX05YU0JfUENBCTB4MzIzNQogI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX05YUENBCQkweDMzMzUKIApAQCAtNjYsNiArNjksMTAgQEAKIAkJYmFyID0gMDsKIAkJaW5mby0+bmFtZSA9ICJuZXR4IjsKIAkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVFBMQzoKKwkJYmFyID0gMDsKKwkJaW5mby0+bmFtZSA9ICJuZXRwbGMiOworCQlicmVhazsKIAlkZWZhdWx0OgogCQliYXIgPSAyOwogCQlpbmZvLT5uYW1lID0gIm5ldHhfcGx4IjsKQEAgLTEzNCw2ICsxNDEsMTggQEAKIAkJLnN1YmRldmljZSA9CTAsCiAJfSwKIAl7CisJCS52ZW5kb3IgPSAgICAgICBQQ0lfVkVORE9SX0lEX0hJTFNDSEVSLAorCQkuZGV2aWNlID0gICAgICAgUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRQTEMsCisJCS5zdWJ2ZW5kb3IgPSAgICBQQ0lfVkVORE9SX0lEX0hJTFNDSEVSLAorCQkuc3ViZGV2aWNlID0gICAgUENJX1NVQkRFVklDRV9JRF9ORVRQTENfUkFNLAorCX0sCisJeworCQkudmVuZG9yID0gICAgICAgUENJX1ZFTkRPUl9JRF9ISUxTQ0hFUiwKKwkJLmRldmljZSA9ICAgICAgIFBDSV9ERVZJQ0VfSURfSElMU0NIRVJfTkVUUExDLAorCQkuc3VidmVuZG9yID0gICAgUENJX1ZFTkRPUl9JRF9ISUxTQ0hFUiwKKwkJLnN1YmRldmljZSA9ICAgIFBDSV9TVUJERVZJQ0VfSURfTkVUUExDX0ZMQVNILAorCX0sCisJewogCQkudmVuZG9yID0JUENJX1ZFTkRPUl9JRF9QTFgsCiAJCS5kZXZpY2UgPQlQQ0lfREVWSUNFX0lEX1BMWF85MDMwLAogCQkuc3VidmVuZG9yID0JUENJX1ZFTkRPUl9JRF9QTFgsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Vpby91aW9fcGRydl9nZW5pcnEuYyBiL2RyaXZlcnMvdWlvL3Vpb19wZHJ2X2dlbmlycS5jCmluZGV4IDcxNzRkNTEuLjBmNDI0YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdWlvL3Vpb19wZHJ2X2dlbmlycS5jCisrKyBiL2RyaXZlcnMvdWlvL3Vpb19wZHJ2X2dlbmlycS5jCkBAIC0xODksNiArMTg5LDEwIEBACiAKIAl1aW9fdW5yZWdpc3Rlcl9kZXZpY2UocHJpdi0+dWlvaW5mbyk7CiAJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCisJcHJpdi0+dWlvaW5mby0+aGFuZGxlciA9IE5VTEw7CisJcHJpdi0+dWlvaW5mby0+aXJxY29udHJvbCA9IE5VTEw7CisKIAlrZnJlZShwcml2KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5jCmluZGV4IDM2NjEzYjMuLjNhNjhlMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuYwpAQCAtMjUzOSwxNSArMjUzOSwxOCBAQAogfQogCiAvKiBEcml2ZXIgcHJvYmUgZnVuY3Rpb25zICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBxZV91ZGNfbWF0Y2hbXTsKIHN0YXRpYyBpbnQgX19kZXZpbml0IHFlX3VkY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldikKIHsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZkZXYtPmRldi5vZl9ub2RlOwogCXN0cnVjdCBxZV9lcCAqZXA7CiAJdW5zaWduZWQgaW50IHJldCA9IDA7CiAJdW5zaWduZWQgaW50IGk7CiAJY29uc3Qgdm9pZCAqcHJvcDsKIAotCWlmICghb2ZkZXYtPmRldi5vZl9tYXRjaCkKKwltYXRjaCA9IG9mX21hdGNoX2RldmljZShxZV91ZGNfbWF0Y2gsICZvZmRldi0+ZGV2KTsKKwlpZiAoIW1hdGNoKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJtb2RlIiwgTlVMTCk7CkBAIC0yNTYxLDcgKzI1NjQsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQl1ZGNfY29udHJvbGxlci0+c29jX3R5cGUgPSAodW5zaWduZWQgbG9uZylvZmRldi0+ZGV2Lm9mX21hdGNoLT5kYXRhOworCXVkY19jb250cm9sbGVyLT5zb2NfdHlwZSA9ICh1bnNpZ25lZCBsb25nKW1hdGNoLT5kYXRhOwogCXVkY19jb250cm9sbGVyLT51c2JfcmVncyA9IG9mX2lvbWFwKG5wLCAwKTsKIAlpZiAoIXVkY19jb250cm9sbGVyLT51c2JfcmVncykgewogCQlyZXQgPSAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dva3VfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYwppbmRleCA0OGE3NjAyLi5iZjZlMTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9jaDkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvZ2FkZ2V0Lmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5jCmluZGV4IDU0MDgxODYuLmFkZTQwMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgPGxpbnV4L3VzYi9jaDkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvZ2FkZ2V0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jCmluZGV4IGNiNWNkNDIuLjgyZmQyNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyNXhfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjV4X3VkYy5jCmluZGV4IDQ0NGI2MGEuLjM2NWMwMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyNXhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI1eF91ZGMuYwpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYwppbmRleCA3OGEzOWE0Li41NzYwNzY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW9tYXAuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vbWFwLmMKaW5kZXggN2U0MWE5NS4uNjI3ZjNhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW9tYXAuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb21hcC5jCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi91bHBpLmg+CiAjaW5jbHVkZSA8cGxhdC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KIAogLyogRUhDSSBSZWdpc3RlciBTZXQgKi8KICNkZWZpbmUgRUhDSV9JTlNOUkVHMDQJCQkJCSgweEEwKQpAQCAtMTE4LDYgKzExOSw4IEBACiAJc3RydWN0IGVoY2lfaGNkCQkJCSpvbWFwX2VoY2k7CiAJaW50CQkJCQlyZXQgPSAtRU5PREVWOwogCWludAkJCQkJaXJxOworCWludAkJCQkJaTsKKwljaGFyCQkJCQlzdXBwbHlbN107CiAKIAlpZiAodXNiX2Rpc2FibGVkKCkpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTU4LDYgKzE2MSwyMyBAQAogCWhjZC0+cnNyY19sZW4gPSByZXNvdXJjZV9zaXplKHJlcyk7CiAJaGNkLT5yZWdzID0gcmVnczsKIAorCS8qIGdldCBlaGNpIHJlZ3VsYXRvciBhbmQgZW5hYmxlICovCisJZm9yIChpID0gMCA7IGkgPCBPTUFQM19IU19VU0JfUE9SVFMgOyBpKyspIHsKKwkJaWYgKHBkYXRhLT5wb3J0X21vZGVbaV0gIT0gT01BUF9FSENJX1BPUlRfTU9ERV9QSFkpIHsKKwkJCXBkYXRhLT5yZWd1bGF0b3JbaV0gPSBOVUxMOworCQkJY29udGludWU7CisJCX0KKwkJc25wcmludGYoc3VwcGx5LCBzaXplb2Yoc3VwcGx5KSwgImhzdXNiJWQiLCBpKTsKKwkJcGRhdGEtPnJlZ3VsYXRvcltpXSA9IHJlZ3VsYXRvcl9nZXQoZGV2LCBzdXBwbHkpOworCQlpZiAoSVNfRVJSKHBkYXRhLT5yZWd1bGF0b3JbaV0pKSB7CisJCQlwZGF0YS0+cmVndWxhdG9yW2ldID0gTlVMTDsKKwkJCWRldl9kYmcoZGV2LAorCQkJImZhaWxlZCB0byBnZXQgZWhjaSBwb3J0JWQgcmVndWxhdG9yXG4iLCBpKTsKKwkJfSBlbHNlIHsKKwkJCXJlZ3VsYXRvcl9lbmFibGUocGRhdGEtPnJlZ3VsYXRvcltpXSk7CisJCX0KKwl9CisKIAlyZXQgPSBvbWFwX3VzYmhzX2VuYWJsZShkZXYpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gc3RhcnQgdXNiaHMgd2l0aCBlcnIgJWRcbiIsIHJldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjItaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjItaGNkLmMKaW5kZXggZjk3NTcwYS4uOWMzN2RhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMzYyLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTM2Mi1oY2QuYwpAQCAtODEsNiArODEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuYwppbmRleCA3OTUzNDVhLi43YjJlNjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5jCkBAIC0xNjMzLDYgKzE2MzMsNyBAQAogCQkJaW50c1tpXS5xaCA9IE5VTEw7CiAJCQlpbnRzW2ldLnF0ZCA9IE5VTEw7CiAKKwkJCXVyYi0+c3RhdHVzID0gc3RhdHVzOwogCQkJaXNwMTc2MF91cmJfZG9uZShoY2QsIHVyYik7CiAJCQlpZiAocXRkKQogCQkJCXBlKGhjZCwgcWgsIHF0ZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYwppbmRleCAxOGI3MDk5Li5mYWZjY2MyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlIDxsaW51eC91c2Ivc2w4MTEuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvaGNkLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1odWIuYwppbmRleCBhNzhmMmViLi43M2Y3NWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaHViLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLWh1Yi5jCkBAIC03NzcsNyArNzc3LDcgQEAKIAkJaWYgKHQxICE9IHQyKQogCQkJeGhjaV93cml0ZWwoeGhjaSwgdDIsIHBvcnRfYXJyYXlbcG9ydF9pbmRleF0pOwogCi0JCWlmIChERVZfSElHSFNQRUVEKHQxKSkgeworCQlpZiAoaGNkLT5zcGVlZCAhPSBIQ0RfVVNCMykgewogCQkJLyogZW5hYmxlIHJlbW90ZSB3YWtlIHVwIGZvciBVU0IgMi4wICovCiAJCQl1MzIgX19pb21lbSAqYWRkcjsKIAkJCXUzMiB0bXA7CkBAIC04NjYsNiArODY2LDIxIEBACiAJCQkJdGVtcCB8PSBQT1JUX0xJTktfU1RST0JFIHwgWERFVl9VMDsKIAkJCQl4aGNpX3dyaXRlbCh4aGNpLCB0ZW1wLCBwb3J0X2FycmF5W3BvcnRfaW5kZXhdKTsKIAkJCX0KKwkJCS8qIHdhaXQgZm9yIHRoZSBwb3J0IHRvIGVudGVyIFUwIGFuZCByZXBvcnQgcG9ydCBsaW5rCisJCQkgKiBzdGF0ZSBjaGFuZ2UuCisJCQkgKi8KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKKwkJCW1zbGVlcCgyMCk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOworCisJCQkvKiBDbGVhciBQTEMgKi8KKwkJCXRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksIHBvcnRfYXJyYXlbcG9ydF9pbmRleF0pOworCQkJaWYgKHRlbXAgJiBQT1JUX1BMQykgeworCQkJCXRlbXAgPSB4aGNpX3BvcnRfc3RhdGVfdG9fbmV1dHJhbCh0ZW1wKTsKKwkJCQl0ZW1wIHw9IFBPUlRfUExDOworCQkJCXhoY2lfd3JpdGVsKHhoY2ksIHRlbXAsIHBvcnRfYXJyYXlbcG9ydF9pbmRleF0pOworCQkJfQorCiAJCQlzbG90X2lkID0geGhjaV9maW5kX3Nsb3RfaWRfYnlfcG9ydChoY2QsCiAJCQkJCXhoY2ksIHBvcnRfaW5kZXggKyAxKTsKIAkJCWlmIChzbG90X2lkKQpAQCAtODczLDcgKzg4OCw3IEBACiAJCX0gZWxzZQogCQkJeGhjaV93cml0ZWwoeGhjaSwgdGVtcCwgcG9ydF9hcnJheVtwb3J0X2luZGV4XSk7CiAKLQkJaWYgKERFVl9ISUdIU1BFRUQodGVtcCkpIHsKKwkJaWYgKGhjZC0+c3BlZWQgIT0gSENEX1VTQjMpIHsKIAkJCS8qIGRpc2FibGUgcmVtb3RlIHdha2UgdXAgZm9yIFVTQiAyLjAgKi8KIAkJCXUzMiBfX2lvbWVtICphZGRyOwogCQkJdTMyIHRtcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYwppbmRleCA2ZGZiZjlmLi5mNDdjMjAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jCkBAIC0xODg3LDExICsxODg3LDkgQEAKIAkJCW90Z19zZXRfdmJ1cyhtdXNiLT54Y2VpdiwgMSk7CiAKIAkJaGNkLT5zZWxmLnVzZXNfcGlvX2Zvcl9jb250cm9sID0gMTsKLQotCQlpZiAobXVzYi0+eGNlaXYtPmxhc3RfZXZlbnQgPT0gVVNCX0VWRU5UX05PTkUpCi0JCQlwbV9ydW50aW1lX3B1dChtdXNiLT5jb250cm9sbGVyKTsKLQogCX0KKwlpZiAobXVzYi0+eGNlaXYtPmxhc3RfZXZlbnQgPT0gVVNCX0VWRU5UX05PTkUpCisJCXBtX3J1bnRpbWVfcHV0KG11c2ItPmNvbnRyb2xsZXIpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2Ivb21hcDI0MzAuYyBiL2RyaXZlcnMvdXNiL211c2Ivb21hcDI0MzAuYwppbmRleCA1N2EyN2ZhLi5lOWU2MGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL29tYXAyNDMwLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9vbWFwMjQzMC5jCkBAIC0yNzAsNyArMjcwLDcgQEAKIAkJREJHKDQsICJWQlVTIERpc2Nvbm5lY3RcbiIpOwogCiAjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDCi0JCWlmIChpc19vdGdfZW5hYmxlZChtdXNiKSkKKwkJaWYgKGlzX290Z19lbmFibGVkKG11c2IpIHx8IGlzX3BlcmlwaGVyYWxfZW5hYmxlZChtdXNiKSkKIAkJCWlmIChtdXNiLT5nYWRnZXRfZHJpdmVyKQogI2VuZGlmCiAJCQl7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuYwppbmRleCAwOWU1MmJhLi5mZmM0MTkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMKQEAgLTQ5OSw3ICs0OTksNiBAQAogCW1lbXNldCgmYXRhLCAwLCBzaXplb2YoYXRhKSk7CiAJc3JiLT5jbW5kID0gaW5mby0+Y21uZDsKIAlzcmItPmRldmljZSA9ICZzcmJfZGV2OwotCSsrc3JiLT5zZXJpYWxfbnVtYmVyOwogCiAJYXRhLmdlbmVyaWMuU2lnbmF0dXJlQnl0ZTAgPSBpbmZvLT5Db25maWdEYXRhLkFUQU1ham9yQ29tbWFuZDsKIAlhdGEuZ2VuZXJpYy5TaWduYXR1cmVCeXRlMSA9IGluZm8tPkNvbmZpZ0RhdGEuQVRBTWlub3JDb21tYW5kOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5jIGIvZHJpdmVycy92aG9zdC92aG9zdC5jCmluZGV4IDJhYjI5MTIuLjdhYTRlZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYworKysgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmMKQEAgLTQsNyArNCw3IEBACiAgKiBBdXRob3I6IE1pY2hhZWwgUy4gVHNpcmtpbiA8bXN0QHJlZGhhdC5jb20+CiAgKgogICogSW5zcGlyYXRpb24sIHNvbWUgY29kZSwgYW5kIG1vc3Qgd2l0dHkgY29tbWVudHMgY29tZSBmcm9tCi0gKiBEb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYywgYnkgUnVzdHkgUnVzc2VsbAorICogRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2xndWVzdC9sZ3Vlc3QuYywgYnkgUnVzdHkgUnVzc2VsbAogICoKICAqIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwsIHZlcnNpb24gMi4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKaW5kZXggZTZhOGQ4Yy4uNmQxMzk2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwpAQCAtMTU2Miw2ICsxNTYyLDE3IEBACiAJICBjb3JyZWN0IG91dHB1dCBkZXZpY2UgY29uZmlndXJhdGlvbi4KIAkgIEl0cyB1c2UgaXMgc3Ryb25nbHkgZGlzY291cmFnZWQuCiAKK2NvbmZpZyBGQl9WSUFfWF9DT01QQVRJQklMSVRZCisJYm9vbCAiWCBzZXJ2ZXIgY29tcGF0aWJpbGl0eSIKKwlkZXBlbmRzIG9uIEZCX1ZJQQorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIHJlZHVjZXMgdGhlIGZ1bmN0aW9uYWxpdHkgKHBvd2VyIHNhdmluZywgLi4uKSBvZiB0aGUKKwkgIGZyYW1lYnVmZmVyIHRvIGF2b2lkIG5lZ2F0aXZlIGltcGFjdCBvbiB0aGUgT3BlbkNocm9tZSBYIHNlcnZlci4KKwkgIElmIHlvdSB1c2UgYW55IFggc2VydmVyIG90aGVyIHRoYW4gZmJkZXYgeW91IHNob3VsZCBlbmFibGUgdGhpcworCSAgb3RoZXJ3aXNlIGl0IHNob3VsZCBiZSBzYWZlIHRvIGRpc2FibGUgaXQgYW5kIGFsbG93IHVzaW5nIGFsbAorCSAgZmVhdHVyZXMuCisKIGVuZGlmCiAKIGNvbmZpZyBGQl9ORU9NQUdJQwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hY29ybmZiLmMgYi9kcml2ZXJzL3ZpZGVvL2Fjb3JuZmIuYwppbmRleCA4MmFjYjhkLi42MTgzYTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2Fjb3JuZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2Fjb3JuZmIuYwpAQCAtNjYsNyArNjYsNyBAQAogICogaGF2ZS4gIEFsbG93IDElIGVpdGhlciB3YXkgb24gdGhlIG5vbWluYWwgZm9yIFRWcy4KICAqLwogI2RlZmluZSBOUl9NT05UWVBFUwk2Ci1zdGF0aWMgc3RydWN0IGZiX21vbnNwZWNzIG1vbnNwZWNzW05SX01PTlRZUEVTXSBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBmYl9tb25zcGVjcyBtb25zcGVjc1tOUl9NT05UWVBFU10gX19kZXZpbml0ZGF0YSA9IHsKIAl7CS8qIFRWCQkqLwogCQkuaGZtaW4JPSAxNTQ2OSwKIAkJLmhmbWF4CT0gMTU3ODEsCkBAIC04NzMsNyArODczLDcgQEAKIC8qCiAgKiBFdmVyeXRoaW5nIGFmdGVyIGhlcmUgaXMgaW5pdGlhbGlzYXRpb24hISEKICAqLwotc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgbW9kZWRiW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZmJfdmlkZW9tb2RlIG1vZGVkYltdIF9fZGV2aW5pdGRhdGEgPSB7CiAJewkvKiAzMjB4MjU2IEAgNTBIeiAqLwogCQlOVUxMLCA1MCwgIDMyMCwgIDI1NiwgMTI1MDAwLCAgOTIsICA2MiwgIDM1LCAxOSwgIDM4LCAyLAogCQlGQl9TWU5DX0NPTVBfSElHSF9BQ1QsCkBAIC05MjUsOCArOTI1LDcgQEAKIAl9CiB9OwogCi1zdGF0aWMgc3RydWN0IGZiX3ZpZGVvbW9kZSBfX2luaXRkYXRhCi1hY29ybmZiX2RlZmF1bHRfbW9kZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZmJfdmlkZW9tb2RlIGFjb3JuZmJfZGVmYXVsdF9tb2RlIF9fZGV2aW5pdGRhdGEgPSB7CiAJLm5hbWUgPQkJTlVMTCwKIAkucmVmcmVzaCA9CTYwLAogCS54cmVzID0JCTY0MCwKQEAgLTk0Miw3ICs5NDEsNyBAQAogCS52bW9kZSA9CUZCX1ZNT0RFX05PTklOVEVSTEFDRUQKIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBhY29ybmZiX2luaXRfZmJpbmZvKHZvaWQpCitzdGF0aWMgdm9pZCBfX2RldmluaXQgYWNvcm5mYl9pbml0X2ZiaW5mbyh2b2lkKQogewogCXN0YXRpYyBpbnQgZmlyc3QgPSAxOwogCkBAIC0xMDE4LDggKzEwMTcsNyBAQAogICoJc2l6ZSBjYW4gb3B0aW9uYWxseSBiZSBmb2xsb3dlZCBieSAnTScgb3IgJ0snIGZvcgogICoJTUIgb3IgS0IgcmVzcGVjdGl2ZWx5LgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQKLWFjb3JuZmJfcGFyc2VfbW9uKGNoYXIgKm9wdCkKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBhY29ybmZiX3BhcnNlX21vbihjaGFyICpvcHQpCiB7CiAJY2hhciAqcCA9IG9wdDsKIApAQCAtMTA2Niw4ICsxMDY0LDcgQEAKIAljdXJyZW50X3Bhci5tb250eXBlID0gLTE7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdAotYWNvcm5mYl9wYXJzZV9tb250eXBlKGNoYXIgKm9wdCkKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBhY29ybmZiX3BhcnNlX21vbnR5cGUoY2hhciAqb3B0KQogewogCWN1cnJlbnRfcGFyLm1vbnR5cGUgPSAtMjsKIApAQCAtMTEwOCw4ICsxMTA1LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdAotYWNvcm5mYl9wYXJzZV9kcmFtKGNoYXIgKm9wdCkKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBhY29ybmZiX3BhcnNlX2RyYW0oY2hhciAqb3B0KQogewogCXVuc2lnbmVkIGludCBzaXplOwogCkBAIC0xMTM0LDE1ICsxMTMwLDE0IEBACiBzdGF0aWMgc3RydWN0IG9wdGlvbnMgewogCWNoYXIgKm5hbWU7CiAJdm9pZCAoKnBhcnNlKShjaGFyICpvcHQpOwotfSBvcHRfdGFibGVbXSBfX2luaXRkYXRhID0geworfSBvcHRfdGFibGVbXSBfX2RldmluaXRkYXRhID0gewogCXsgIm1vbiIsICAgICBhY29ybmZiX3BhcnNlX21vbiAgICAgfSwKIAl7ICJtb250eXBlIiwgYWNvcm5mYl9wYXJzZV9tb250eXBlIH0sCiAJeyAiZHJhbSIsICAgIGFjb3JuZmJfcGFyc2VfZHJhbSAgICB9LAogCXsgTlVMTCwgTlVMTCB9CiB9OwogCi1pbnQgX19pbml0Ci1hY29ybmZiX3NldHVwKGNoYXIgKm9wdGlvbnMpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhY29ybmZiX3NldHVwKGNoYXIgKm9wdGlvbnMpCiB7CiAJc3RydWN0IG9wdGlvbnMgKm9wdHA7CiAJY2hhciAqb3B0OwpAQCAtMTE3OSw4ICsxMTc0LDcgQEAKICAqIERldGVjdCB0eXBlIG9mIG1vbml0b3IgY29ubmVjdGVkCiAgKiAgRm9yIG5vdywgd2UganVzdCBhc3N1bWUgU1ZHQQogICovCi1zdGF0aWMgaW50IF9faW5pdAotYWNvcm5mYl9kZXRlY3RfbW9uaXRvcnR5cGUodm9pZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGFjb3JuZmJfZGV0ZWN0X21vbml0b3J0eXBlKHZvaWQpCiB7CiAJcmV0dXJuIDQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0YWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2F0YWZiLmMKaW5kZXggNWIyYjVlZi4uNjRlNDFmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdGFmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXRhZmIuYwpAQCAtMzExNyw3ICszMTE3LDcgQEAKIAkJCWF0YWZiX29wcy5mYl9zZXRjb2xyZWcgPSAmZmFsY29uX3NldGNvbHJlZzsKIAkJCWVycm9yID0gcmVxdWVzdF9pcnEoSVJRX0FVVE9fNCwgZmFsY29uX3ZibF9zd2l0Y2hlciwKIAkJCQkJICAgIElSUV9UWVBFX1BSSU8sCi0JCQkJCSAgICAiZnJhbWVidWZmZXIvbW9kZXN3aXRjaCIsCisJCQkJCSAgICAiZnJhbWVidWZmZXI6bW9kZXN3aXRjaCIsCiAJCQkJCSAgICBmYWxjb25fdmJsX3N3aXRjaGVyKTsKIAkJCWlmIChlcnJvcikKIAkJCQlyZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMgYi9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKaW5kZXggZTBjMjI4NC4uNWFhYzAwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYm1lbS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwpAQCAtNDIsOSArNDIsMzQgQEAKIAogI2RlZmluZSBGQlBJWE1BUFNJWkUJKDEwMjQgKiA4KQogCitzdGF0aWMgREVGSU5FX01VVEVYKHJlZ2lzdHJhdGlvbl9sb2NrKTsKIHN0cnVjdCBmYl9pbmZvICpyZWdpc3RlcmVkX2ZiW0ZCX01BWF0gX19yZWFkX21vc3RseTsKIGludCBudW1fcmVnaXN0ZXJlZF9mYiBfX3JlYWRfbW9zdGx5OwogCitzdGF0aWMgc3RydWN0IGZiX2luZm8gKmdldF9mYl9pbmZvKHVuc2lnbmVkIGludCBpZHgpCit7CisJc3RydWN0IGZiX2luZm8gKmZiX2luZm87CisKKwlpZiAoaWR4ID49IEZCX01BWCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CisKKwltdXRleF9sb2NrKCZyZWdpc3RyYXRpb25fbG9jayk7CisJZmJfaW5mbyA9IHJlZ2lzdGVyZWRfZmJbaWR4XTsKKwlpZiAoZmJfaW5mbykKKwkJYXRvbWljX2luYygmZmJfaW5mby0+Y291bnQpOworCW11dGV4X3VubG9jaygmcmVnaXN0cmF0aW9uX2xvY2spOworCisJcmV0dXJuIGZiX2luZm87Cit9CisKK3N0YXRpYyB2b2lkIHB1dF9mYl9pbmZvKHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKQoreworCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmZmJfaW5mby0+Y291bnQpKQorCQlyZXR1cm47CisJaWYgKGZiX2luZm8tPmZib3BzLT5mYl9kZXN0cm95KQorCQlmYl9pbmZvLT5mYm9wcy0+ZmJfZGVzdHJveShmYl9pbmZvKTsKK30KKwogaW50IGxvY2tfZmJfaW5mbyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAltdXRleF9sb2NrKCZpbmZvLT5sb2NrKTsKQEAgLTY0Nyw2ICs2NzIsNyBAQAogCiBzdGF0aWMgdm9pZCAqZmJfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCiB7CisJbXV0ZXhfbG9jaygmcmVnaXN0cmF0aW9uX2xvY2spOwogCXJldHVybiAoKnBvcyA8IEZCX01BWCkgPyBwb3MgOiBOVUxMOwogfQogCkBAIC02NTgsNiArNjg0LDcgQEAKIAogc3RhdGljIHZvaWQgZmJfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogeworCW11dGV4X3VubG9jaygmcmVnaXN0cmF0aW9uX2xvY2spOwogfQogCiBzdGF0aWMgaW50IGZiX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKQEAgLTY5MCwxMyArNzE3LDMwIEBACiAJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKIH07CiAKKy8qCisgKiBXZSBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBmYl9pbmZvIGluIGZpbGUtPnByaXZhdGVfZGF0YSwKKyAqIGJ1dCBpZiB0aGUgY3VycmVudCByZWdpc3RlcmVkIGZiIGhhcyBjaGFuZ2VkLCB3ZSBkb24ndAorICogYWN0dWFsbHkgd2FudCB0byB1c2UgaXQuCisgKgorICogU28gbG9vayB1cCB0aGUgZmJfaW5mbyB1c2luZyB0aGUgaW5vZGUgbWlub3IgbnVtYmVyLAorICogYW5kIGp1c3QgdmVyaWZ5IGl0IGFnYWluc3QgdGhlIHJlZmVyZW5jZSB3ZSBoYXZlLgorICovCitzdGF0aWMgc3RydWN0IGZiX2luZm8gKmZpbGVfZmJfaW5mbyhzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwlpbnQgZmJpZHggPSBpbWlub3IoaW5vZGUpOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0ZXJlZF9mYltmYmlkeF07CisKKwlpZiAoaW5mbyAhPSBmaWxlLT5wcml2YXRlX2RhdGEpCisJCWluZm8gPSBOVUxMOworCXJldHVybiBpbmZvOworfQorCiBzdGF0aWMgc3NpemVfdAogZmJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJdW5zaWduZWQgbG9uZyBwID0gKnBwb3M7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0JaW50IGZiaWR4ID0gaW1pbm9yKGlub2RlKTsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHJlZ2lzdGVyZWRfZmJbZmJpZHhdOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZmlsZV9mYl9pbmZvKGZpbGUpOwogCXU4ICpidWZmZXIsICpkc3Q7CiAJdTggX19pb21lbSAqc3JjOwogCWludCBjLCBjbnQgPSAwLCBlcnIgPSAwOwpAQCAtNzYxLDkgKzgwNSw3IEBACiBmYl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJdW5zaWduZWQgbG9uZyBwID0gKnBwb3M7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0JaW50IGZiaWR4ID0gaW1pbm9yKGlub2RlKTsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHJlZ2lzdGVyZWRfZmJbZmJpZHhdOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZmlsZV9mYl9pbmZvKGZpbGUpOwogCXU4ICpidWZmZXIsICpzcmM7CiAJdTggX19pb21lbSAqZHN0OwogCWludCBjLCBjbnQgPSAwLCBlcnIgPSAwOwpAQCAtMTE0MSwxMCArMTE4MywxMCBAQAogCiBzdGF0aWMgbG9uZyBmYl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0JaW50IGZiaWR4ID0gaW1pbm9yKGlub2RlKTsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHJlZ2lzdGVyZWRfZmJbZmJpZHhdOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZmlsZV9mYl9pbmZvKGZpbGUpOwogCisJaWYgKCFpbmZvKQorCQlyZXR1cm4gLUVOT0RFVjsKIAlyZXR1cm4gZG9fZmJfaW9jdGwoaW5mbywgY21kLCBhcmcpOwogfQogCkBAIC0xMjY1LDEyICsxMzA3LDEzIEBACiBzdGF0aWMgbG9uZyBmYl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkgICAgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0JaW50IGZiaWR4ID0gaW1pbm9yKGlub2RlKTsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHJlZ2lzdGVyZWRfZmJbZmJpZHhdOwotCXN0cnVjdCBmYl9vcHMgKmZiID0gaW5mby0+ZmJvcHM7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBmaWxlX2ZiX2luZm8oZmlsZSk7CisJc3RydWN0IGZiX29wcyAqZmI7CiAJbG9uZyByZXQgPSAtRU5PSU9DVExDTUQ7CiAKKwlpZiAoIWluZm8pCisJCXJldHVybiAtRU5PREVWOworCWZiID0gaW5mby0+ZmJvcHM7CiAJc3dpdGNoKGNtZCkgewogCWNhc2UgRkJJT0dFVF9WU0NSRUVOSU5GTzoKIAljYXNlIEZCSU9QVVRfVlNDUkVFTklORk86CkBAIC0xMzAzLDE2ICsxMzQ2LDE4IEBACiBzdGF0aWMgaW50CiBmYl9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEpCiB7Ci0JaW50IGZiaWR4ID0gaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0ZXJlZF9mYltmYmlkeF07Ci0Jc3RydWN0IGZiX29wcyAqZmIgPSBpbmZvLT5mYm9wczsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGZpbGVfZmJfaW5mbyhmaWxlKTsKKwlzdHJ1Y3QgZmJfb3BzICpmYjsKIAl1bnNpZ25lZCBsb25nIG9mZjsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0OwogCXUzMiBsZW47CiAKKwlpZiAoIWluZm8pCisJCXJldHVybiAtRU5PREVWOwogCWlmICh2bWEtPnZtX3Bnb2ZmID4gKH4wVUwgPj4gUEFHRV9TSElGVCkpCiAJCXJldHVybiAtRUlOVkFMOwogCW9mZiA9IHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVDsKKwlmYiA9IGluZm8tPmZib3BzOwogCWlmICghZmIpCiAJCXJldHVybiAtRU5PREVWOwogCW11dGV4X2xvY2soJmluZm8tPm1tX2xvY2spOwpAQCAtMTM2MSwxNCArMTQwNiwxNiBAQAogCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCWludCByZXMgPSAwOwogCi0JaWYgKGZiaWR4ID49IEZCX01BWCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JaW5mbyA9IHJlZ2lzdGVyZWRfZmJbZmJpZHhdOwotCWlmICghaW5mbykKKwlpbmZvID0gZ2V0X2ZiX2luZm8oZmJpZHgpOworCWlmICghaW5mbykgewogCQlyZXF1ZXN0X21vZHVsZSgiZmIlZCIsIGZiaWR4KTsKLQlpbmZvID0gcmVnaXN0ZXJlZF9mYltmYmlkeF07Ci0JaWYgKCFpbmZvKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJaW5mbyA9IGdldF9mYl9pbmZvKGZiaWR4KTsKKwkJaWYgKCFpbmZvKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWlmIChJU19FUlIoaW5mbykpCisJCXJldHVybiBQVFJfRVJSKGluZm8pOworCiAJbXV0ZXhfbG9jaygmaW5mby0+bG9jayk7CiAJaWYgKCF0cnlfbW9kdWxlX2dldChpbmZvLT5mYm9wcy0+b3duZXIpKSB7CiAJCXJlcyA9IC1FTk9ERVY7CkBAIC0xMzg2LDYgKzE0MzMsOCBAQAogI2VuZGlmCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwlpZiAocmVzKQorCQlwdXRfZmJfaW5mbyhpbmZvKTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC0xNDAxLDYgKzE0NTAsNyBAQAogCQlpbmZvLT5mYm9wcy0+ZmJfcmVsZWFzZShpbmZvLDEpOwogCW1vZHVsZV9wdXQoaW5mby0+ZmJvcHMtPm93bmVyKTsKIAltdXRleF91bmxvY2soJmluZm8tPmxvY2spOworCXB1dF9mYl9pbmZvKGluZm8pOwogCXJldHVybiAwOwogfQogCkBAIC0xNDg3LDggKzE1MzcsMTAgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKK3N0YXRpYyBpbnQgZG9fdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyk7CisKICNkZWZpbmUgVkdBX0ZCX1BIWVMgMHhBMDAwMAotdm9pZCByZW1vdmVfY29uZmxpY3RpbmdfZnJhbWVidWZmZXJzKHN0cnVjdCBhcGVydHVyZXNfc3RydWN0ICphLAorc3RhdGljIHZvaWQgZG9fcmVtb3ZlX2NvbmZsaWN0aW5nX2ZyYW1lYnVmZmVycyhzdHJ1Y3QgYXBlcnR1cmVzX3N0cnVjdCAqYSwKIAkJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgcHJpbWFyeSkKIHsKIAlpbnQgaTsKQEAgLTE1MTAsNDMgKzE1NjIsMzIgQEAKIAkJCXByaW50ayhLRVJOX0lORk8gImZiOiBjb25mbGljdGluZyBmYiBodyB1c2FnZSAiCiAJCQkgICAgICAgIiVzIHZzICVzIC0gcmVtb3ZpbmcgZ2VuZXJpYyBkcml2ZXJcbiIsCiAJCQkgICAgICAgbmFtZSwgcmVnaXN0ZXJlZF9mYltpXS0+Zml4LmlkKTsKLQkJCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIocmVnaXN0ZXJlZF9mYltpXSk7CisJCQlkb191bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKHJlZ2lzdGVyZWRfZmJbaV0pOwogCQl9CiAJfQogfQotRVhQT1JUX1NZTUJPTChyZW1vdmVfY29uZmxpY3RpbmdfZnJhbWVidWZmZXJzKTsKIAotLyoqCi0gKglyZWdpc3Rlcl9mcmFtZWJ1ZmZlciAtIHJlZ2lzdGVycyBhIGZyYW1lIGJ1ZmZlciBkZXZpY2UKLSAqCUBmYl9pbmZvOiBmcmFtZSBidWZmZXIgaW5mbyBzdHJ1Y3R1cmUKLSAqCi0gKglSZWdpc3RlcnMgYSBmcmFtZSBidWZmZXIgZGV2aWNlIEBmYl9pbmZvLgotICoKLSAqCVJldHVybnMgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IsIG9yIHplcm8gZm9yIHN1Y2Nlc3MuCi0gKgotICovCi0KLWludAotcmVnaXN0ZXJfZnJhbWVidWZmZXIoc3RydWN0IGZiX2luZm8gKmZiX2luZm8pCitzdGF0aWMgaW50IGRvX3JlZ2lzdGVyX2ZyYW1lYnVmZmVyKHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKQogewogCWludCBpOwogCXN0cnVjdCBmYl9ldmVudCBldmVudDsKIAlzdHJ1Y3QgZmJfdmlkZW9tb2RlIG1vZGU7CiAKLQlpZiAobnVtX3JlZ2lzdGVyZWRfZmIgPT0gRkJfTUFYKQotCQlyZXR1cm4gLUVOWElPOwotCiAJaWYgKGZiX2NoZWNrX2ZvcmVpZ25uZXNzKGZiX2luZm8pKQogCQlyZXR1cm4gLUVOT1NZUzsKIAotCXJlbW92ZV9jb25mbGljdGluZ19mcmFtZWJ1ZmZlcnMoZmJfaW5mby0+YXBlcnR1cmVzLCBmYl9pbmZvLT5maXguaWQsCisJZG9fcmVtb3ZlX2NvbmZsaWN0aW5nX2ZyYW1lYnVmZmVycyhmYl9pbmZvLT5hcGVydHVyZXMsIGZiX2luZm8tPmZpeC5pZCwKIAkJCQkJIGZiX2lzX3ByaW1hcnlfZGV2aWNlKGZiX2luZm8pKTsKIAorCWlmIChudW1fcmVnaXN0ZXJlZF9mYiA9PSBGQl9NQVgpCisJCXJldHVybiAtRU5YSU87CisKIAludW1fcmVnaXN0ZXJlZF9mYisrOwogCWZvciAoaSA9IDAgOyBpIDwgRkJfTUFYOyBpKyspCiAJCWlmICghcmVnaXN0ZXJlZF9mYltpXSkKIAkJCWJyZWFrOwogCWZiX2luZm8tPm5vZGUgPSBpOworCWF0b21pY19zZXQoJmZiX2luZm8tPmNvdW50LCAxKTsKIAltdXRleF9pbml0KCZmYl9pbmZvLT5sb2NrKTsKIAltdXRleF9pbml0KCZmYl9pbmZvLT5tbV9sb2NrKTsKIApAQCAtMTU5Miw2ICsxNjMzLDY5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZG9fdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbykKK3sKKwlzdHJ1Y3QgZmJfZXZlbnQgZXZlbnQ7CisJaW50IGksIHJldCA9IDA7CisKKwlpID0gZmJfaW5mby0+bm9kZTsKKwlpZiAoaSA8IDAgfHwgaSA+PSBGQl9NQVggfHwgcmVnaXN0ZXJlZF9mYltpXSAhPSBmYl9pbmZvKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghbG9ja19mYl9pbmZvKGZiX2luZm8pKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlldmVudC5pbmZvID0gZmJfaW5mbzsKKwlyZXQgPSBmYl9ub3RpZmllcl9jYWxsX2NoYWluKEZCX0VWRU5UX0ZCX1VOQklORCwgJmV2ZW50KTsKKwl1bmxvY2tfZmJfaW5mbyhmYl9pbmZvKTsKKworCWlmIChyZXQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGZiX2luZm8tPnBpeG1hcC5hZGRyICYmCisJICAgIChmYl9pbmZvLT5waXhtYXAuZmxhZ3MgJiBGQl9QSVhNQVBfREVGQVVMVCkpCisJCWtmcmVlKGZiX2luZm8tPnBpeG1hcC5hZGRyKTsKKwlmYl9kZXN0cm95X21vZGVsaXN0KCZmYl9pbmZvLT5tb2RlbGlzdCk7CisJcmVnaXN0ZXJlZF9mYltpXSA9IE5VTEw7CisJbnVtX3JlZ2lzdGVyZWRfZmItLTsKKwlmYl9jbGVhbnVwX2RldmljZShmYl9pbmZvKTsKKwlkZXZpY2VfZGVzdHJveShmYl9jbGFzcywgTUtERVYoRkJfTUFKT1IsIGkpKTsKKwlldmVudC5pbmZvID0gZmJfaW5mbzsKKwlmYl9ub3RpZmllcl9jYWxsX2NoYWluKEZCX0VWRU5UX0ZCX1VOUkVHSVNURVJFRCwgJmV2ZW50KTsKKworCS8qIHRoaXMgbWF5IGZyZWUgZmIgaW5mbyAqLworCXB1dF9mYl9pbmZvKGZiX2luZm8pOworCXJldHVybiAwOworfQorCit2b2lkIHJlbW92ZV9jb25mbGljdGluZ19mcmFtZWJ1ZmZlcnMoc3RydWN0IGFwZXJ0dXJlc19zdHJ1Y3QgKmEsCisJCQkJICAgICBjb25zdCBjaGFyICpuYW1lLCBib29sIHByaW1hcnkpCit7CisJbXV0ZXhfbG9jaygmcmVnaXN0cmF0aW9uX2xvY2spOworCWRvX3JlbW92ZV9jb25mbGljdGluZ19mcmFtZWJ1ZmZlcnMoYSwgbmFtZSwgcHJpbWFyeSk7CisJbXV0ZXhfdW5sb2NrKCZyZWdpc3RyYXRpb25fbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKHJlbW92ZV9jb25mbGljdGluZ19mcmFtZWJ1ZmZlcnMpOworCisvKioKKyAqCXJlZ2lzdGVyX2ZyYW1lYnVmZmVyIC0gcmVnaXN0ZXJzIGEgZnJhbWUgYnVmZmVyIGRldmljZQorICoJQGZiX2luZm86IGZyYW1lIGJ1ZmZlciBpbmZvIHN0cnVjdHVyZQorICoKKyAqCVJlZ2lzdGVycyBhIGZyYW1lIGJ1ZmZlciBkZXZpY2UgQGZiX2luZm8uCisgKgorICoJUmV0dXJucyBuZWdhdGl2ZSBlcnJubyBvbiBlcnJvciwgb3IgemVybyBmb3Igc3VjY2Vzcy4KKyAqCisgKi8KK2ludAorcmVnaXN0ZXJfZnJhbWVidWZmZXIoc3RydWN0IGZiX2luZm8gKmZiX2luZm8pCit7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJnJlZ2lzdHJhdGlvbl9sb2NrKTsKKwlyZXQgPSBkb19yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihmYl9pbmZvKTsKKwltdXRleF91bmxvY2soJnJlZ2lzdHJhdGlvbl9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CiAKIC8qKgogICoJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlciAtIHJlbGVhc2VzIGEgZnJhbWUgYnVmZmVyIGRldmljZQpAQCAtMTYwOSw0NiArMTcxMywxNSBAQAogICogICAgICB0aGF0IHRoZSBkcml2ZXIgaW1wbGVtZW50cyBmYl9vcGVuKCkgYW5kIGZiX3JlbGVhc2UoKSB0bwogICogICAgICBjaGVjayB0aGF0IG5vIHByb2Nlc3NlcyBhcmUgdXNpbmcgdGhlIGRldmljZS4KICAqLwotCiBpbnQKIHVucmVnaXN0ZXJfZnJhbWVidWZmZXIoc3RydWN0IGZiX2luZm8gKmZiX2luZm8pCiB7Ci0Jc3RydWN0IGZiX2V2ZW50IGV2ZW50OwotCWludCBpLCByZXQgPSAwOworCWludCByZXQ7CiAKLQlpID0gZmJfaW5mby0+bm9kZTsKLQlpZiAoIXJlZ2lzdGVyZWRfZmJbaV0pIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBkb25lOwotCX0KKwltdXRleF9sb2NrKCZyZWdpc3RyYXRpb25fbG9jayk7CisJcmV0ID0gZG9fdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihmYl9pbmZvKTsKKwltdXRleF91bmxvY2soJnJlZ2lzdHJhdGlvbl9sb2NrKTsKIAotCi0JaWYgKCFsb2NrX2ZiX2luZm8oZmJfaW5mbykpCi0JCXJldHVybiAtRU5PREVWOwotCWV2ZW50LmluZm8gPSBmYl9pbmZvOwotCXJldCA9IGZiX25vdGlmaWVyX2NhbGxfY2hhaW4oRkJfRVZFTlRfRkJfVU5CSU5ELCAmZXZlbnQpOwotCXVubG9ja19mYl9pbmZvKGZiX2luZm8pOwotCi0JaWYgKHJldCkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JaWYgKGZiX2luZm8tPnBpeG1hcC5hZGRyICYmCi0JICAgIChmYl9pbmZvLT5waXhtYXAuZmxhZ3MgJiBGQl9QSVhNQVBfREVGQVVMVCkpCi0JCWtmcmVlKGZiX2luZm8tPnBpeG1hcC5hZGRyKTsKLQlmYl9kZXN0cm95X21vZGVsaXN0KCZmYl9pbmZvLT5tb2RlbGlzdCk7Ci0JcmVnaXN0ZXJlZF9mYltpXT1OVUxMOwotCW51bV9yZWdpc3RlcmVkX2ZiLS07Ci0JZmJfY2xlYW51cF9kZXZpY2UoZmJfaW5mbyk7Ci0JZGV2aWNlX2Rlc3Ryb3koZmJfY2xhc3MsIE1LREVWKEZCX01BSk9SLCBpKSk7Ci0JZXZlbnQuaW5mbyA9IGZiX2luZm87Ci0JZmJfbm90aWZpZXJfY2FsbF9jaGFpbihGQl9FVkVOVF9GQl9VTlJFR0lTVEVSRUQsICZldmVudCk7Ci0KLQkvKiB0aGlzIG1heSBmcmVlIGZiIGluZm8gKi8KLQlpZiAoZmJfaW5mby0+ZmJvcHMtPmZiX2Rlc3Ryb3kpCi0JCWZiX2luZm8tPmZib3BzLT5mYl9kZXN0cm95KGZiX2luZm8pOwotZG9uZToKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3VkbGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3VkbGZiLmMKaW5kZXggNjgwNDFkOS4uNjk1MDY2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby91ZGxmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdWRsZmIuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8dmlkZW8vdWRsZmIuaD4KICNpbmNsdWRlICJlZGlkLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vdmlhL01ha2VmaWxlCmluZGV4IDk2ZjAxZWUuLjUxMDgxMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL01ha2VmaWxlCkBAIC02LDQgKzYsNCBAQAogCiB2aWFmYi15CTo9dmlhZmJkZXYubyBody5vIHZpYV9pMmMubyBkdmkubyBsY2QubyBpb2N0bC5vIGFjY2VsLm8gXAogCXZpYV91dGlsaXR5Lm8gdnQxNjM2Lm8gZ2xvYmFsLm8gdGJsRFBBU2V0dGluZy5vIHZpYW1vZGUubyBcCi0JdmlhLWNvcmUubyB2aWEtZ3Bpby5vIHZpYV9tb2Rlc2V0dGluZy5vCisJdmlhLWNvcmUubyB2aWEtZ3Bpby5vIHZpYV9tb2Rlc2V0dGluZy5vIHZpYV9jbG9jay5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9jaGlwLmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS9jaGlwLmgKaW5kZXggMjlkNzAyNC4uM2ViZjIwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvY2hpcC5oCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2NoaXAuaApAQCAtMTM3LDE3ICsxMzcsMTEgQEAKIAlzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uIGx2ZHNfY2hpcF9pbmZvMjsKIH07CiAKLXN0cnVjdCBjcnRfc2V0dGluZ19pbmZvcm1hdGlvbiB7Ci0JaW50IGlnYV9wYXRoOwotfTsKLQogc3RydWN0IHRtZHNfc2V0dGluZ19pbmZvcm1hdGlvbiB7CiAJaW50IGlnYV9wYXRoOwogCWludCBoX2FjdGl2ZTsKIAlpbnQgdl9hY3RpdmU7CiAJaW50IG1heF9waXhlbF9jbG9jazsKLQlpbnQgbWF4X2hyZXM7Ci0JaW50IG1heF92cmVzOwogfTsKIAogc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9kdmkuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL2R2aS5jCmluZGV4IDQxY2ExOTguLmIxZjM2NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL2R2aS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2R2aS5jCkBAIC0yOCwxNyArMjgsMTEgQEAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBkdmlfZ2V0X3BhbmVsX3NpemVfZnJvbV9EREN2MSgKIAlzdHJ1Y3QgdG1kc19jaGlwX2luZm9ybWF0aW9uICp0bWRzX2NoaXAsCiAJc3RydWN0IHRtZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqdG1kc19zZXR0aW5nKTsKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBkdmlfZ2V0X3BhbmVsX3NpemVfZnJvbV9EREN2MigKLQlzdHJ1Y3QgdG1kc19jaGlwX2luZm9ybWF0aW9uICp0bWRzX2NoaXAsCi0Jc3RydWN0IHRtZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqdG1kc19zZXR0aW5nKTsKIHN0YXRpYyBpbnQgdmlhZmJfZHZpX3F1ZXJ5X0VESUQodm9pZCk7CiAKLXN0YXRpYyBpbnQgY2hlY2tfdG1kc19jaGlwKGludCBkZXZpY2VfaWRfc3ViYWRkciwgaW50IGRldmljZV9pZCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBjaGVja190bWRzX2NoaXAoaW50IGRldmljZV9pZF9zdWJhZGRyLCBpbnQgZGV2aWNlX2lkKQogewotCWlmICh0bWRzX3JlZ2lzdGVyX3JlYWQoZGV2aWNlX2lkX3N1YmFkZHIpID09IGRldmljZV9pZCkKLQkJcmV0dXJuIE9LOwotCWVsc2UKLQkJcmV0dXJuIEZBSUw7CisJcmV0dXJuIHRtZHNfcmVnaXN0ZXJfcmVhZChkZXZpY2VfaWRfc3ViYWRkcikgPT0gZGV2aWNlX2lkOwogfQogCiB2b2lkIF9fZGV2aW5pdCB2aWFmYl9pbml0X2R2aV9zaXplKHN0cnVjdCB0bWRzX2NoaXBfaW5mb3JtYXRpb24gKnRtZHNfY2hpcCwKQEAgLTQ3LDIyICs0MSwxMyBAQAogCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX2luaXRfZHZpX3NpemUoKVxuIik7CiAKIAl2aWFmYl9kdmlfc2Vuc2UoKTsKLQlzd2l0Y2ggKHZpYWZiX2R2aV9xdWVyeV9FRElEKCkpIHsKLQljYXNlIDE6CisJaWYgKHZpYWZiX2R2aV9xdWVyeV9FRElEKCkgPT0gMSkKIAkJZHZpX2dldF9wYW5lbF9zaXplX2Zyb21fRERDdjEodG1kc19jaGlwLCB0bWRzX3NldHRpbmcpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCWR2aV9nZXRfcGFuZWxfc2l6ZV9mcm9tX0REQ3YyKHRtZHNfY2hpcCwgdG1kc19zZXR0aW5nKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAidmlhZmJfaW5pdF9kdmlfc2l6ZTogRFZJIHBhbmVsIHNpemUgdW5kZXRlY3RlZCFcbiIpOwotCQlicmVhazsKLQl9CiAKIAlyZXR1cm47CiB9CiAKLWludCBfX2RldmluaXQgdmlhZmJfdG1kc190cmFzbWl0dGVyX2lkZW50aWZ5KHZvaWQpCitib29sIF9fZGV2aW5pdCB2aWFmYl90bWRzX3RyYXNtaXR0ZXJfaWRlbnRpZnkodm9pZCkKIHsKIAl1bnNpZ25lZCBjaGFyIHNyMmEgPSAwLCBzcjFlID0gMCwgc3IzZSA9IDA7CiAKQEAgLTEwMSw3ICs4Niw3IEBACiAJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT4KIAkJdG1kc19jaGlwX2luZm8udG1kc19jaGlwX3NsYXZlX2FkZHIgPSBWVDE2MzJfVE1EU19JMkNfQUREUjsKIAl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLmkyY19wb3J0ID0gVklBX1BPUlRfMzE7Ci0JaWYgKGNoZWNrX3RtZHNfY2hpcChWVDE2MzJfREVWSUNFX0lEX1JFRywgVlQxNjMyX0RFVklDRV9JRCkgIT0gRkFJTCkgeworCWlmIChjaGVja190bWRzX2NoaXAoVlQxNjMyX0RFVklDRV9JRF9SRUcsIFZUMTYzMl9ERVZJQ0VfSUQpKSB7CiAJCS8qCiAJCSAqIEN1cnJlbnRseSBvbmx5IHN1cHBvcnQgMTJiaXRzLGR1YWwgZWRnZSxhZGQgMjRiaXRzIG1vZGUgbGF0ZXIKIAkJICovCkBAIC0xMTIsMTEgKzk3LDEwIEBACiAJCQkgIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8udG1kc19jaGlwX25hbWUpOwogCQlERUJVR19NU0coS0VSTl9JTkZPICJcbiAlMmQiLAogCQkJICB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLmkyY19wb3J0KTsKLQkJcmV0dXJuIE9LOworCQlyZXR1cm4gdHJ1ZTsKIAl9IGVsc2UgewogCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLmkyY19wb3J0ID0gVklBX1BPUlRfMkM7Ci0JCWlmIChjaGVja190bWRzX2NoaXAoVlQxNjMyX0RFVklDRV9JRF9SRUcsIFZUMTYzMl9ERVZJQ0VfSUQpCi0JCSAgICAhPSBGQUlMKSB7CisJCWlmIChjaGVja190bWRzX2NoaXAoVlQxNjMyX0RFVklDRV9JRF9SRUcsIFZUMTYzMl9ERVZJQ0VfSUQpKSB7CiAJCQl0bWRzX3JlZ2lzdGVyX3dyaXRlKDB4MDgsIDB4M2IpOwogCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG4gVlQxNjMyIFRNRFMgISBcbiIpOwogCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG4gJTJkIiwKQEAgLTEyNSw3ICsxMDksNyBAQAogCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG4gJTJkIiwKIAkJCQkgIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+CiAJCQkJICB0bWRzX2NoaXBfaW5mby5pMmNfcG9ydCk7Ci0JCQlyZXR1cm4gT0s7CisJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCX0KIApAQCAtMTM1LDcgKzExOSw3IEBACiAJICAgICgodmlhZmJfZGlzcGxheV9oYXJkd2FyZV9sYXlvdXQgPT0gSFdfTEFZT1VUX0RWSV9PTkxZKSB8fAogCSAgICAgKHZpYWZiX2Rpc3BsYXlfaGFyZHdhcmVfbGF5b3V0ID09IEhXX0xBWU9VVF9MQ0RfRFZJKSkpIHsKIAkJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG4gSW50ZWdyYXRlZCBUTURTICEgXG4iKTsKLQkJcmV0dXJuIE9LOworCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKIAlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgewpAQCAtMTU5LDcgKzE0Myw3IEBACiAJCXRtZHNfY2hpcF9pbmZvLnRtZHNfY2hpcF9uYW1lID0gTk9OX1RNRFNfVFJBTlNNSVRURVI7CiAJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby4KIAkJdG1kc19jaGlwX3NsYXZlX2FkZHIgPSBWVDE2MzJfVE1EU19JMkNfQUREUjsKLQlyZXR1cm4gRkFJTDsKKwlyZXR1cm4gZmFsc2U7CiB9CiAKIHN0YXRpYyB2b2lkIHRtZHNfcmVnaXN0ZXJfd3JpdGUoaW50IGluZGV4LCB1OCBkYXRhKQpAQCAtMzA2LDEyICsyOTAsNyBAQAogCQlyZXR1cm4gRURJRF9WRVJTSU9OXzE7CS8qIEZvdW5kIEVESUQxIFRhYmxlICovCiAJfQogCi0JZGF0YTAgPSAodTgpIHRtZHNfcmVnaXN0ZXJfcmVhZCgweDAwKTsKLQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLnRtZHNfY2hpcF9zbGF2ZV9hZGRyID0gcmVzdG9yZTsKLQlpZiAoZGF0YTAgPT0gMHgyMCkKLQkJcmV0dXJuIEVESURfVkVSU0lPTl8yOwkvKiBGb3VuZCBFRElEMiBUYWJsZSAqLwotCWVsc2UKLQkJcmV0dXJuIGZhbHNlOworCXJldHVybiBmYWxzZTsKIH0KIAogLyogR2V0IFBhbmVsIFNpemUgVXNpbmcgRURJRDEgVGFibGUgKi8KQEAgLTMxOSw1MCArMjk4LDE1IEBACiAJc3RydWN0IHRtZHNfY2hpcF9pbmZvcm1hdGlvbiAqdG1kc19jaGlwLAogCXN0cnVjdCB0bWRzX3NldHRpbmdfaW5mb3JtYXRpb24gKnRtZHNfc2V0dGluZykKIHsKLQlpbnQgaSwgbWF4X2ggPSAwLCB0bXAsIHJlc3RvcmU7Ci0JdW5zaWduZWQgY2hhciByRGF0YTsKKwlpbnQgaSwgcmVzdG9yZTsKIAl1bnNpZ25lZCBjaGFyIEVESURfREFUQVsxOF07CiAKIAlERUJVR19NU0coS0VSTl9JTkZPICJcbiBkdmlfZ2V0X3BhbmVsX3NpemVfZnJvbV9EREN2MSBcbiIpOwogCiAJcmVzdG9yZSA9IHRtZHNfY2hpcC0+dG1kc19jaGlwX3NsYXZlX2FkZHI7CiAJdG1kc19jaGlwLT50bWRzX2NoaXBfc2xhdmVfYWRkciA9IDB4QTA7Ci0KLQlyRGF0YSA9IHRtZHNfcmVnaXN0ZXJfcmVhZCgweDIzKTsKLQlpZiAockRhdGEgJiAweDNDKQotCQltYXhfaCA9IDY0MDsKLQlpZiAockRhdGEgJiAweEMwKQotCQltYXhfaCA9IDcyMDsKLQlpZiAockRhdGEgJiAweDAzKQotCQltYXhfaCA9IDgwMDsKLQotCXJEYXRhID0gdG1kc19yZWdpc3Rlcl9yZWFkKDB4MjQpOwotCWlmIChyRGF0YSAmIDB4QzApCi0JCW1heF9oID0gODAwOwotCWlmIChyRGF0YSAmIDB4MUUpCi0JCW1heF9oID0gMTAyNDsKLQlpZiAockRhdGEgJiAweDAxKQotCQltYXhfaCA9IDEyODA7Ci0KIAlmb3IgKGkgPSAweDI1OyBpIDwgMHg2RDsgaSsrKSB7CiAJCXN3aXRjaCAoaSkgewotCQljYXNlIDB4MjY6Ci0JCWNhc2UgMHgyODoKLQkJY2FzZSAweDJBOgotCQljYXNlIDB4MkM6Ci0JCWNhc2UgMHgyRToKLQkJY2FzZSAweDMwOgotCQljYXNlIDB4MzI6Ci0JCWNhc2UgMHgzNDoKLQkJCXJEYXRhID0gdG1kc19yZWdpc3Rlcl9yZWFkKGkpOwotCQkJaWYgKHJEYXRhID09IDEpCi0JCQkJYnJlYWs7Ci0JCQkvKiBkYXRhID0gKGRhdGEgKyAzMSkgKiA4ICovCi0JCQl0bXAgPSAockRhdGEgKyAzMSkgPDwgMzsKLQkJCWlmICh0bXAgPiBtYXhfaCkKLQkJCQltYXhfaCA9IHRtcDsKLQkJCWJyZWFrOwotCiAJCWNhc2UgMHgzNjoKIAkJY2FzZSAweDQ4OgogCQljYXNlIDB4NUE6CkBAIC0zODMsOTEgKzMyNywxMSBAQAogCQl9CiAJfQogCi0JdG1kc19zZXR0aW5nLT5tYXhfaHJlcyA9IG1heF9oOwotCXN3aXRjaCAobWF4X2gpIHsKLQljYXNlIDY0MDoKLQkJdG1kc19zZXR0aW5nLT5tYXhfdnJlcyA9IDQ4MDsKLQkJYnJlYWs7Ci0JY2FzZSA4MDA6Ci0JCXRtZHNfc2V0dGluZy0+bWF4X3ZyZXMgPSA2MDA7Ci0JCWJyZWFrOwotCWNhc2UgMTAyNDoKLQkJdG1kc19zZXR0aW5nLT5tYXhfdnJlcyA9IDc2ODsKLQkJYnJlYWs7Ci0JY2FzZSAxMjgwOgotCQl0bWRzX3NldHRpbmctPm1heF92cmVzID0gMTAyNDsKLQkJYnJlYWs7Ci0JY2FzZSAxNDAwOgotCQl0bWRzX3NldHRpbmctPm1heF92cmVzID0gMTA1MDsKLQkJYnJlYWs7Ci0JY2FzZSAxNDQwOgotCQl0bWRzX3NldHRpbmctPm1heF92cmVzID0gMTA1MDsKLQkJYnJlYWs7Ci0JY2FzZSAxNjAwOgotCQl0bWRzX3NldHRpbmctPm1heF92cmVzID0gMTIwMDsKLQkJYnJlYWs7Ci0JY2FzZSAxOTIwOgotCQl0bWRzX3NldHRpbmctPm1heF92cmVzID0gMTA4MDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiVW5rbm93biBwYW5lbCBzaXplIG1heCByZXNvbHV0aW9uID0gJWQgISAiCi0JCQkJCSAic2V0IGRlZmF1bHQgcGFuZWwgc2l6ZS5cbiIsIG1heF9oKTsKLQkJYnJlYWs7Ci0JfQotCiAJREVCVUdfTVNHKEtFUk5fSU5GTyAiRFZJIG1heCBwaXhlbGNsb2NrID0gJWRcbiIsCiAJCXRtZHNfc2V0dGluZy0+bWF4X3BpeGVsX2Nsb2NrKTsKIAl0bWRzX2NoaXAtPnRtZHNfY2hpcF9zbGF2ZV9hZGRyID0gcmVzdG9yZTsKIH0KIAotLyogR2V0IFBhbmVsIFNpemUgVXNpbmcgRURJRDIgVGFibGUgKi8KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBkdmlfZ2V0X3BhbmVsX3NpemVfZnJvbV9EREN2MigKLQlzdHJ1Y3QgdG1kc19jaGlwX2luZm9ybWF0aW9uICp0bWRzX2NoaXAsCi0Jc3RydWN0IHRtZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqdG1kc19zZXR0aW5nKQotewotCWludCByZXN0b3JlOwotCXVuc2lnbmVkIGNoYXIgUl9CdWZmZXJbMl07Ci0KLQlERUJVR19NU0coS0VSTl9JTkZPICJcbiBkdmlfZ2V0X3BhbmVsX3NpemVfZnJvbV9EREN2MiBcbiIpOwotCi0JcmVzdG9yZSA9IHRtZHNfY2hpcC0+dG1kc19jaGlwX3NsYXZlX2FkZHI7Ci0JdG1kc19jaGlwLT50bWRzX2NoaXBfc2xhdmVfYWRkciA9IDB4QTI7Ci0KLQkvKiBIb3Jpem9udGFsOiAweDc2LCAweDc3ICovCi0JdG1kc19yZWdpc3Rlcl9yZWFkX2J5dGVzKDB4NzYsIFJfQnVmZmVyLCAyKTsKLQl0bWRzX3NldHRpbmctPm1heF9ocmVzID0gUl9CdWZmZXJbMF0gKyAoUl9CdWZmZXJbMV0gPDwgOCk7Ci0KLQlzd2l0Y2ggKHRtZHNfc2V0dGluZy0+bWF4X2hyZXMpIHsKLQljYXNlIDY0MDoKLQkJdG1kc19zZXR0aW5nLT5tYXhfdnJlcyA9IDQ4MDsKLQkJYnJlYWs7Ci0JY2FzZSA4MDA6Ci0JCXRtZHNfc2V0dGluZy0+bWF4X3ZyZXMgPSA2MDA7Ci0JCWJyZWFrOwotCWNhc2UgMTAyNDoKLQkJdG1kc19zZXR0aW5nLT5tYXhfdnJlcyA9IDc2ODsKLQkJYnJlYWs7Ci0JY2FzZSAxMjgwOgotCQl0bWRzX3NldHRpbmctPm1heF92cmVzID0gMTAyNDsKLQkJYnJlYWs7Ci0JY2FzZSAxNDAwOgotCQl0bWRzX3NldHRpbmctPm1heF92cmVzID0gMTA1MDsKLQkJYnJlYWs7Ci0JY2FzZSAxNDQwOgotCQl0bWRzX3NldHRpbmctPm1heF92cmVzID0gMTA1MDsKLQkJYnJlYWs7Ci0JY2FzZSAxNjAwOgotCQl0bWRzX3NldHRpbmctPm1heF92cmVzID0gMTIwMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiVW5rbm93biBwYW5lbCBzaXplIG1heCByZXNvbHV0aW9uID0gJWQhICIKLQkJCSJzZXQgZGVmYXVsdCBwYW5lbCBzaXplLlxuIiwgdG1kc19zZXR0aW5nLT5tYXhfaHJlcyk7Ci0JCWJyZWFrOwotCX0KLQotCXRtZHNfY2hpcC0+dG1kc19jaGlwX3NsYXZlX2FkZHIgPSByZXN0b3JlOwotfQotCiAvKiBJZiBEaXNhYmxlIERWSSwgdHVybiBvZmYgcGFkICovCiB2b2lkIHZpYWZiX2R2aV9kaXNhYmxlKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9kdmkuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL2R2aS5oCmluZGV4IDJjNTI1YzAuLmY0NzNkZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL2R2aS5oCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2R2aS5oCkBAIC01Niw3ICs1Niw3IEBACiBpbnQgdmlhZmJfZHZpX3NlbnNlKHZvaWQpOwogdm9pZCB2aWFmYl9kdmlfZGlzYWJsZSh2b2lkKTsKIHZvaWQgdmlhZmJfZHZpX2VuYWJsZSh2b2lkKTsKLWludCBfX2RldmluaXQgdmlhZmJfdG1kc190cmFzbWl0dGVyX2lkZW50aWZ5KHZvaWQpOworYm9vbCBfX2RldmluaXQgdmlhZmJfdG1kc190cmFzbWl0dGVyX2lkZW50aWZ5KHZvaWQpOwogdm9pZCBfX2RldmluaXQgdmlhZmJfaW5pdF9kdmlfc2l6ZShzdHJ1Y3QgdG1kc19jaGlwX2luZm9ybWF0aW9uICp0bWRzX2NoaXAsCiAJc3RydWN0IHRtZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqdG1kc19zZXR0aW5nKTsKIHZvaWQgdmlhZmJfZHZpX3NldF9tb2RlKHN0cnVjdCBWaWRlb01vZGVUYWJsZSAqdmlkZW9Nb2RlLCBpbnQgbW9kZV9icHAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9nbG9iYWwuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL2dsb2JhbC5jCmluZGV4IDFlZTUxMWIuLmUxMGQ4MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL2dsb2JhbC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2dsb2JhbC5jCkBAIC00MCwxMCArNDAsNiBAQAogaW50IHZpYWZiX2hvdHBsdWdfYnBwID0gMzI7CiBpbnQgdmlhZmJfaG90cGx1Z19yZWZyZXNoID0gNjA7CiBpbnQgdmlhZmJfcHJpbWFyeV9kZXYgPSBOb25lX0RldmljZTsKLXVuc2lnbmVkIGludCB2aWFmYl9zZWNvbmRfeHJlcyA9IDY0MDsKLXVuc2lnbmVkIGludCB2aWFmYl9zZWNvbmRfeXJlcyA9IDQ4MDsKLXVuc2lnbmVkIGludCB2aWFmYl9zZWNvbmRfdmlydHVhbF94cmVzOwotdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF92aXJ0dWFsX3lyZXM7CiBpbnQgdmlhZmJfbGNkX3BhbmVsX2lkID0gTENEX1BBTkVMX0lEX01BWElNVU0gKyAxOwogc3RydWN0IGZiX2luZm8gKnZpYWZiaW5mbzsKIHN0cnVjdCBmYl9pbmZvICp2aWFmYmluZm8xOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvZ2xvYmFsLmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS9nbG9iYWwuaAppbmRleCAzOGVmNWFjLi5mZjk2OWRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS9nbG9iYWwuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9nbG9iYWwuaApAQCAtNzMsOCArNzMsNiBAQAogZXh0ZXJuIGludCB2aWFmYl9ob3RwbHVnX3JlZnJlc2g7CiBleHRlcm4gaW50IHZpYWZiX3ByaW1hcnlfZGV2OwogCi1leHRlcm4gdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF94cmVzOwotZXh0ZXJuIHVuc2lnbmVkIGludCB2aWFmYl9zZWNvbmRfeXJlczsKIGV4dGVybiBpbnQgdmlhZmJfbGNkX3BhbmVsX2lkOwogCiAjZW5kaWYgLyogX19HTE9CQUxfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9ody5jIGIvZHJpdmVycy92aWRlby92aWEvaHcuYwppbmRleCBkYzRjNzc4Li40N2IxMzUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS9ody5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2h3LmMKQEAgLTIwLDI3NCArMjAsODQgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvdmlhLWNvcmUuaD4KKyNpbmNsdWRlIDxhc20vb2xwYy5oPgogI2luY2x1ZGUgImdsb2JhbC5oIgorI2luY2x1ZGUgInZpYV9jbG9jay5oIgogCi1zdGF0aWMgc3RydWN0IHBsbF9jb25maWcgY2xlMjY2X3BsbF9jb25maWdbXSA9IHsKLQl7MTksIDQsIDB9LAotCXsyNiwgNSwgMH0sCi0JezI4LCA1LCAwfSwKLQl7MzEsIDUsIDB9LAotCXszMywgNSwgMH0sCi0JezU1LCA1LCAwfSwKLQl7MTAyLCA1LCAwfSwKLQl7NTMsIDYsIDB9LAotCXs5MiwgNiwgMH0sCi0Jezk4LCA2LCAwfSwKLQl7MTEyLCA2LCAwfSwKLQl7NDEsIDcsIDB9LAotCXs2MCwgNywgMH0sCi0Jezk5LCA3LCAwfSwKLQl7MTAwLCA3LCAwfSwKLQl7ODMsIDgsIDB9LAotCXs4NiwgOCwgMH0sCi0JezEwOCwgOCwgMH0sCi0Jezg3LCA5LCAwfSwKLQl7MTE4LCA5LCAwfSwKLQl7OTUsIDEyLCAwfSwKLQl7MTE1LCAxMiwgMH0sCi0JezEwOCwgMTMsIDB9LAotCXs4MywgMTcsIDB9LAotCXs2NywgMjAsIDB9LAotCXs4NiwgMjAsIDB9LAotCXs5OCwgMjAsIDB9LAotCXsxMjEsIDI0LCAwfSwKLQl7OTksIDI5LCAwfSwKLQl7MzMsIDMsIDF9LAotCXsxNSwgNCwgMX0sCi0JezIzLCA0LCAxfSwKLQl7MzcsIDUsIDF9LAotCXs4MywgNSwgMX0sCi0Jezg1LCA1LCAxfSwKLQl7OTQsIDUsIDF9LAotCXsxMDMsIDUsIDF9LAotCXsxMDksIDUsIDF9LAotCXsxMTMsIDUsIDF9LAotCXsxMjEsIDUsIDF9LAotCXs4MiwgNiwgMX0sCi0JezMxLCA3LCAxfSwKLQl7NTUsIDcsIDF9LAotCXs4NCwgNywgMX0sCi0JezgzLCA4LCAxfSwKLQl7NzYsIDksIDF9LAotCXsxMjcsIDksIDF9LAotCXszMywgNCwgMn0sCi0Jezc1LCA0LCAyfSwKLQl7MTE5LCA0LCAyfSwKLQl7MTIxLCA0LCAyfSwKLQl7OTEsIDUsIDJ9LAotCXsxMTgsIDUsIDJ9LAotCXs4MywgNiwgMn0sCi0JezEwOSwgNiwgMn0sCi0JezkwLCA3LCAyfSwKLQl7OTMsIDIsIDN9LAotCXs1MywgMywgM30sCi0JezczLCA0LCAzfSwKLQl7ODksIDQsIDN9LAotCXsxMDUsIDQsIDN9LAotCXsxMTcsIDQsIDN9LAotCXsxMDEsIDUsIDN9LAotCXsxMjEsIDUsIDN9LAotCXsxMjcsIDUsIDN9LAotCXs5OSwgNywgM30KK3N0YXRpYyBzdHJ1Y3QgcGxsX2xpbWl0IGNsZTI2Nl9wbGxfbGltaXRzW10gPSB7CisJezE5LCAxOSwgNCwgMH0sCisJezI2LCAxMDIsIDUsIDB9LAorCXs1MywgMTEyLCA2LCAwfSwKKwl7NDEsIDEwMCwgNywgMH0sCisJezgzLCAxMDgsIDgsIDB9LAorCXs4NywgMTE4LCA5LCAwfSwKKwl7OTUsIDExNSwgMTIsIDB9LAorCXsxMDgsIDEwOCwgMTMsIDB9LAorCXs4MywgODMsIDE3LCAwfSwKKwl7NjcsIDk4LCAyMCwgMH0sCisJezEyMSwgMTIxLCAyNCwgMH0sCisJezk5LCA5OSwgMjksIDB9LAorCXszMywgMzMsIDMsIDF9LAorCXsxNSwgMjMsIDQsIDF9LAorCXszNywgMTIxLCA1LCAxfSwKKwl7ODIsIDgyLCA2LCAxfSwKKwl7MzEsIDg0LCA3LCAxfSwKKwl7ODMsIDgzLCA4LCAxfSwKKwl7NzYsIDEyNywgOSwgMX0sCisJezMzLCAxMjEsIDQsIDJ9LAorCXs5MSwgMTE4LCA1LCAyfSwKKwl7ODMsIDEwOSwgNiwgMn0sCisJezkwLCA5MCwgNywgMn0sCisJezkzLCA5MywgMiwgM30sCisJezUzLCA1MywgMywgM30sCisJezczLCAxMTcsIDQsIDN9LAorCXsxMDEsIDEyNywgNSwgM30sCisJezk5LCA5OSwgNywgM30KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxsX2NvbmZpZyBrODAwX3BsbF9jb25maWdbXSA9IHsKLQl7MjIsIDIsIDB9LAotCXsyOCwgMywgMH0sCi0JezgxLCAzLCAxfSwKLQl7ODUsIDMsIDF9LAotCXs5OCwgMywgMX0sCi0JezExMiwgMywgMX0sCi0Jezg2LCA0LCAxfSwKLQl7MTY2LCA0LCAxfSwKLQl7MTA5LCA1LCAxfSwKLQl7MTEzLCA1LCAxfSwKLQl7MTIxLCA1LCAxfSwKLQl7MTMxLCA1LCAxfSwKLQl7MTQzLCA1LCAxfSwKLQl7MTUzLCA1LCAxfSwKLQl7NjYsIDMsIDJ9LAotCXs2OCwgMywgMn0sCi0Jezk1LCAzLCAyfSwKLQl7MTA2LCAzLCAyfSwKLQl7MTE2LCAzLCAyfSwKLQl7OTMsIDQsIDJ9LAotCXsxMTksIDQsIDJ9LAotCXsxMjEsIDQsIDJ9LAotCXsxMzMsIDQsIDJ9LAotCXsxMzcsIDQsIDJ9LAotCXsxMTcsIDUsIDJ9LAotCXsxMTgsIDUsIDJ9LAotCXsxMjAsIDUsIDJ9LAotCXsxMjQsIDUsIDJ9LAotCXsxMzIsIDUsIDJ9LAotCXsxMzcsIDUsIDJ9LAotCXsxNDEsIDUsIDJ9LAotCXsxNjYsIDUsIDJ9LAotCXsxNzAsIDUsIDJ9LAotCXsxOTEsIDUsIDJ9LAotCXsyMDYsIDUsIDJ9LAotCXsyMDgsIDUsIDJ9LAotCXszMCwgMiwgM30sCi0JezY5LCAzLCAzfSwKLQl7ODIsIDMsIDN9LAotCXs4MywgMywgM30sCi0JezEwOSwgMywgM30sCi0JezExNCwgMywgM30sCi0JezEyNSwgMywgM30sCi0Jezg5LCA0LCAzfSwKLQl7MTAzLCA0LCAzfSwKLQl7MTE3LCA0LCAzfSwKLQl7MTI2LCA0LCAzfSwKLQl7MTUwLCA0LCAzfSwKLQl7MTYxLCA0LCAzfSwKLQl7MTIxLCA1LCAzfSwKLQl7MTI3LCA1LCAzfSwKLQl7MTMxLCA1LCAzfSwKLQl7MTM0LCA1LCAzfSwKLQl7MTQ4LCA1LCAzfSwKLQl7MTY5LCA1LCAzfSwKLQl7MTcyLCA1LCAzfSwKLQl7MTgyLCA1LCAzfSwKLQl7MTk1LCA1LCAzfSwKLQl7MTk2LCA1LCAzfSwKLQl7MjA4LCA1LCAzfSwKLQl7NjYsIDIsIDR9LAotCXs4NSwgMywgNH0sCi0JezE0MSwgNCwgNH0sCi0JezE0NiwgNCwgNH0sCi0JezE2MSwgNCwgNH0sCi0JezE3NywgNSwgNH0KK3N0YXRpYyBzdHJ1Y3QgcGxsX2xpbWl0IGs4MDBfcGxsX2xpbWl0c1tdID0geworCXsyMiwgMjIsIDIsIDB9LAorCXsyOCwgMjgsIDMsIDB9LAorCXs4MSwgMTEyLCAzLCAxfSwKKwl7ODYsIDE2NiwgNCwgMX0sCisJezEwOSwgMTUzLCA1LCAxfSwKKwl7NjYsIDExNiwgMywgMn0sCisJezkzLCAxMzcsIDQsIDJ9LAorCXsxMTcsIDIwOCwgNSwgMn0sCisJezMwLCAzMCwgMiwgM30sCisJezY5LCAxMjUsIDMsIDN9LAorCXs4OSwgMTYxLCA0LCAzfSwKKwl7MTIxLCAyMDgsIDUsIDN9LAorCXs2NiwgNjYsIDIsIDR9LAorCXs4NSwgODUsIDMsIDR9LAorCXsxNDEsIDE2MSwgNCwgNH0sCisJezE3NywgMTc3LCA1LCA0fQogfTsKIAotc3RhdGljIHN0cnVjdCBwbGxfY29uZmlnIGN4NzAwX3BsbF9jb25maWdbXSA9IHsKLQl7OTgsIDMsIDF9LAotCXs4NiwgNCwgMX0sCi0JezEwOSwgNSwgMX0sCi0JezExMCwgNSwgMX0sCi0JezExMywgNSwgMX0sCi0JezEyMSwgNSwgMX0sCi0JezEzMSwgNSwgMX0sCi0JezEzNSwgNSwgMX0sCi0JezE0MiwgNSwgMX0sCi0JezE0MywgNSwgMX0sCi0JezE1MywgNSwgMX0sCi0JezE4NywgNSwgMX0sCi0JezIwOCwgNSwgMX0sCi0JezY4LCAyLCAyfSwKLQl7OTUsIDMsIDJ9LAotCXsxMTYsIDMsIDJ9LAotCXs5MywgNCwgMn0sCi0JezExOSwgNCwgMn0sCi0JezEzMywgNCwgMn0sCi0JezEzNywgNCwgMn0sCi0JezE1MSwgNCwgMn0sCi0JezE2NiwgNCwgMn0sCi0JezExMCwgNSwgMn0sCi0JezExMiwgNSwgMn0sCi0JezExNywgNSwgMn0sCi0JezExOCwgNSwgMn0sCi0JezEyMCwgNSwgMn0sCi0JezEzMiwgNSwgMn0sCi0JezEzNywgNSwgMn0sCi0JezE0MSwgNSwgMn0sCi0JezE1MSwgNSwgMn0sCi0JezE2NiwgNSwgMn0sCi0JezE3NSwgNSwgMn0sCi0JezE5MSwgNSwgMn0sCi0JezIwNiwgNSwgMn0sCi0JezE3NCwgNywgMn0sCi0JezgyLCAzLCAzfSwKLQl7MTA5LCAzLCAzfSwKLQl7MTE3LCA0LCAzfSwKLQl7MTUwLCA0LCAzfSwKLQl7MTYxLCA0LCAzfSwKLQl7MTEyLCA1LCAzfSwKLQl7MTE1LCA1LCAzfSwKLQl7MTIxLCA1LCAzfSwKLQl7MTI3LCA1LCAzfSwKLQl7MTI5LCA1LCAzfSwKLQl7MTMxLCA1LCAzfSwKLQl7MTM0LCA1LCAzfSwKLQl7MTM4LCA1LCAzfSwKLQl7MTQ4LCA1LCAzfSwKLQl7MTU3LCA1LCAzfSwKLQl7MTY5LCA1LCAzfSwKLQl7MTcyLCA1LCAzfSwKLQl7MTkwLCA1LCAzfSwKLQl7MTk1LCA1LCAzfSwKLQl7MTk2LCA1LCAzfSwKLQl7MjA4LCA1LCAzfSwKLQl7MTQxLCA1LCA0fSwKLQl7MTUwLCA1LCA0fSwKLQl7MTY2LCA1LCA0fSwKLQl7MTc2LCA1LCA0fSwKLQl7MTc3LCA1LCA0fSwKLQl7MTgzLCA1LCA0fSwKLQl7MjAyLCA1LCA0fQorc3RhdGljIHN0cnVjdCBwbGxfbGltaXQgY3g3MDBfcGxsX2xpbWl0c1tdID0geworCXs5OCwgOTgsIDMsIDF9LAorCXs4NiwgODYsIDQsIDF9LAorCXsxMDksIDIwOCwgNSwgMX0sCisJezY4LCA2OCwgMiwgMn0sCisJezk1LCAxMTYsIDMsIDJ9LAorCXs5MywgMTY2LCA0LCAyfSwKKwl7MTEwLCAyMDYsIDUsIDJ9LAorCXsxNzQsIDE3NCwgNywgMn0sCisJezgyLCAxMDksIDMsIDN9LAorCXsxMTcsIDE2MSwgNCwgM30sCisJezExMiwgMjA4LCA1LCAzfSwKKwl7MTQxLCAyMDIsIDUsIDR9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBsbF9jb25maWcgdng4NTVfcGxsX2NvbmZpZ1tdID0gewotCXs4NiwgNCwgMX0sCi0JezEwOCwgNSwgMX0sCi0JezExMCwgNSwgMX0sCi0JezExMywgNSwgMX0sCi0JezEyMSwgNSwgMX0sCi0JezEzMSwgNSwgMX0sCi0JezEzNSwgNSwgMX0sCi0JezE0MiwgNSwgMX0sCi0JezE0MywgNSwgMX0sCi0JezE1MywgNSwgMX0sCi0JezE2NCwgNSwgMX0sCi0JezE4NywgNSwgMX0sCi0JezIwOCwgNSwgMX0sCi0JezExMCwgNSwgMn0sCi0JezExMiwgNSwgMn0sCi0JezExNywgNSwgMn0sCi0JezExOCwgNSwgMn0sCi0JezEyNCwgNSwgMn0sCi0JezEzMiwgNSwgMn0sCi0JezEzNywgNSwgMn0sCi0JezE0MSwgNSwgMn0sCi0JezE0OSwgNSwgMn0sCi0JezE1MSwgNSwgMn0sCi0JezE1OSwgNSwgMn0sCi0JezE2NiwgNSwgMn0sCi0JezE2NywgNSwgMn0sCi0JezE3MiwgNSwgMn0sCi0JezE4OSwgNSwgMn0sCi0JezE5MSwgNSwgMn0sCi0JezE5NCwgNSwgMn0sCi0JezIwNiwgNSwgMn0sCi0JezIwOCwgNSwgMn0sCi0JezgzLCAzLCAzfSwKLQl7ODgsIDMsIDN9LAotCXsxMDksIDMsIDN9LAotCXsxMTIsIDMsIDN9LAotCXsxMDMsIDQsIDN9LAotCXsxMDUsIDQsIDN9LAotCXsxNjEsIDQsIDN9LAotCXsxMTIsIDUsIDN9LAotCXsxMTUsIDUsIDN9LAotCXsxMjEsIDUsIDN9LAotCXsxMjcsIDUsIDN9LAotCXsxMzQsIDUsIDN9LAotCXsxMzcsIDUsIDN9LAotCXsxNDgsIDUsIDN9LAotCXsxNTcsIDUsIDN9LAotCXsxNjksIDUsIDN9LAotCXsxNzIsIDUsIDN9LAotCXsxODIsIDUsIDN9LAotCXsxOTEsIDUsIDN9LAotCXsxOTUsIDUsIDN9LAotCXsyMDksIDUsIDN9LAotCXsxNDIsIDQsIDR9LAotCXsxNDYsIDQsIDR9LAotCXsxNjEsIDQsIDR9LAotCXsxNDEsIDUsIDR9LAotCXsxNTAsIDUsIDR9LAotCXsxNjUsIDUsIDR9LAotCXsxNzYsIDUsIDR9CitzdGF0aWMgc3RydWN0IHBsbF9saW1pdCB2eDg1NV9wbGxfbGltaXRzW10gPSB7CisJezg2LCA4NiwgNCwgMX0sCisJezEwOCwgMjA4LCA1LCAxfSwKKwl7MTEwLCAyMDgsIDUsIDJ9LAorCXs4MywgMTEyLCAzLCAzfSwKKwl7MTAzLCAxNjEsIDQsIDN9LAorCXsxMTIsIDIwOSwgNSwgM30sCisJezE0MiwgMTYxLCA0LCA0fSwKKwl7MTQxLCAxNzYsIDUsIDR9CiB9OwogCiAvKiBhY2NvcmRpbmcgdG8gVklBIFRlY2hub2xvZ2llcyB0aGVzZSB2YWx1ZXMgYXJlIGJhc2VkIG9uIGV4cGVyaW1lbnQgKi8KQEAgLTMwOCw2ICsxMTgsNDIgQEAKIAl7VklBQ1IsIENSODcsIDB4RkYsIDB4MUZ9LAkvKiBMQ0QgU2NhbGluZyBQYXJhbWV0ZXIgMTQgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaW9fcmVnIGNvbW1vbl92Z2FbXSA9IHsKKwl7VklBQ1IsIENSMDcsIDB4MTAsIDB4MTB9LCAvKiBbMF0gdmVydGljYWwgdG90YWwgKGJpdCA4KQorCQkJCQlbMV0gdmVydGljYWwgZGlzcGxheSBlbmQgKGJpdCA4KQorCQkJCQlbMl0gdmVydGljYWwgcmV0cmFjZSBzdGFydCAoYml0IDgpCisJCQkJCVszXSBzdGFydCB2ZXJ0aWNhbCBibGFua2luZyAoYml0IDgpCisJCQkJCVs0XSBsaW5lIGNvbXBhcmUgKGJpdCA4KQorCQkJCQlbNV0gdmVydGljYWwgdG90YWwgKGJpdCA5KQorCQkJCQlbNl0gdmVydGljYWwgZGlzcGxheSBlbmQgKGJpdCA5KQorCQkJCQlbN10gdmVydGljYWwgcmV0cmFjZSBzdGFydCAoYml0IDkpICovCisJe1ZJQUNSLCBDUjA4LCAweEZGLCAweDAwfSwgLyogWzAtNF0gcHJlc2V0IHJvdyBzY2FuCisJCQkJCVs1LTZdIGJ5dGUgcGFubmluZyAqLworCXtWSUFDUiwgQ1IwOSwgMHhERiwgMHg0MH0sIC8qIFswLTRdIG1heCBzY2FuIGxpbmUKKwkJCQkJWzVdIHN0YXJ0IHZlcnRpY2FsIGJsYW5raW5nIChiaXQgOSkKKwkJCQkJWzZdIGxpbmUgY29tcGFyZSAoYml0IDkpCisJCQkJCVs3XSBzY2FuIGRvdWJsaW5nICovCisJe1ZJQUNSLCBDUjBBLCAweEZGLCAweDFFfSwgLyogWzAtNF0gY3Vyc29yIHN0YXJ0CisJCQkJCVs1XSBjdXJzb3IgZGlzYWJsZSAqLworCXtWSUFDUiwgQ1IwQiwgMHhGRiwgMHgwMH0sIC8qIFswLTRdIGN1cnNvciBlbmQKKwkJCQkJWzUtNl0gY3Vyc29yIHNrZXcgKi8KKwl7VklBQ1IsIENSMEUsIDB4RkYsIDB4MDB9LCAvKiBbMC03XSBjdXJzb3IgbG9jYXRpb24gKGhpZ2gpICovCisJe1ZJQUNSLCBDUjBGLCAweEZGLCAweDAwfSwgLyogWzAtN10gY3Vyc29yIGxvY2F0aW9uIChsb3cpICovCisJe1ZJQUNSLCBDUjExLCAweEYwLCAweDgwfSwgLyogWzAtM10gdmVydGljYWwgcmV0cmFjZSBlbmQKKwkJCQkJWzZdIG1lbW9yeSByZWZyZXNoIGJhbmR3aWR0aAorCQkJCQlbN10gQ1JUQyByZWdpc3RlciBwcm90ZWN0IGVuYWJsZSAqLworCXtWSUFDUiwgQ1IxNCwgMHhGRiwgMHgwMH0sIC8qIFswLTRdIHVuZGVybGluZSBsb2NhdGlvbgorCQkJCQlbNV0gZGl2aWRlIG1lbW9yeSBhZGRyZXNzIGNsb2NrIGJ5IDQKKwkJCQkJWzZdIGRvdWJsZSB3b3JkIGFkZHJlc3NpbmcgKi8KKwl7VklBQ1IsIENSMTcsIDB4RkYsIDB4NjN9LCAvKiBbMC0xXSBtYXBwaW5nIG9mIGRpc3BsYXkgYWRkcmVzcyAxMy0xNAorCQkJCQlbMl0gZGl2aWRlIHNjYW4gbGluZSBjbG9jayBieSAyCisJCQkJCVszXSBkaXZpZGUgbWVtb3J5IGFkZHJlc3MgY2xvY2sgYnkgMgorCQkJCQlbNV0gYWRkcmVzcyB3cmFwCisJCQkJCVs2XSBieXRlIG1vZGUgc2VsZWN0CisJCQkJCVs3XSBzeW5jIGVuYWJsZSAqLworCXtWSUFDUiwgQ1IxOCwgMHhGRiwgMHhGRn0sIC8qIFswLTddIGxpbmUgY29tcGFyZSAqLworfTsKKwogc3RhdGljIHN0cnVjdCBmaWZvX2RlcHRoX3NlbGVjdCBkaXNwbGF5X2ZpZm9fZGVwdGhfcmVnID0gewogCS8qIElHQTEgRklGTyBEZXB0aF9TZWxlY3QgKi8KIAl7SUdBMV9GSUZPX0RFUFRIX1NFTEVDVF9SRUdfTlVNLCB7e1NSMTcsIDAsIDd9IH0gfSwKQEAgLTY3Niw2ICs1MjIsOSBAQAogCXtWSUFfTFZEUzIsICJMVkRTMiJ9CiB9OwogCisvKiBzdHJ1Y3R1cmUgd2l0aCBmdW5jdGlvbiBwb2ludGVycyB0byBzdXBwb3J0IGNsb2NrIGNvbnRyb2wgKi8KK3N0YXRpYyBzdHJ1Y3QgdmlhX2Nsb2NrIGNsb2NrOworCiBzdGF0aWMgdm9pZCBsb2FkX2ZpeF9iaXRfY3J0Y19yZWcodm9pZCk7CiBzdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9nZnhfY2hpcF9pbmZvKGludCBjaGlwX3R5cGUpOwogc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfdG1kc19jaGlwX2luZm8odm9pZCk7CkBAIC03NzAsMTMgKzYxOSwxNCBAQAogLypTZXQgSUdBIHBhdGggZm9yIGVhY2ggZGV2aWNlKi8KIHZvaWQgdmlhZmJfc2V0X2lnYV9wYXRoKHZvaWQpCiB7CisJaW50IGNydF9pZ2FfcGF0aCA9IDA7CiAKIAlpZiAodmlhZmJfU0FNTV9PTiA9PSAxKSB7CiAJCWlmICh2aWFmYl9DUlRfT04pIHsKIAkJCWlmICh2aWFmYl9wcmltYXJ5X2RldiA9PSBDUlRfRGV2aWNlKQotCQkJCXZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMTsKKwkJCQljcnRfaWdhX3BhdGggPSBJR0ExOwogCQkJZWxzZQotCQkJCXZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMjsKKwkJCQljcnRfaWdhX3BhdGggPSBJR0EyOwogCQl9CiAKIAkJaWYgKHZpYWZiX0RWSV9PTikgewpAQCAtNzkzLDggKzY0Myw3IEBACiAJCQkJCVVOSUNIUk9NRV9DTEUyNjYpKSB7CiAJCQkJCXZpYXBhcmluZm8tPgogCQkJCQlsdmRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPSBJR0EyOwotCQkJCQl2aWFwYXJpbmZvLT4KLQkJCQkJY3J0X3NldHRpbmdfaW5mby0+aWdhX3BhdGggPSBJR0ExOworCQkJCQljcnRfaWdhX3BhdGggPSBJR0ExOwogCQkJCQl2aWFwYXJpbmZvLT4KIAkJCQkJdG1kc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMTsKIAkJCQl9IGVsc2UKQEAgLTgxNCwxMCArNjYzLDEwIEBACiAJCXZpYWZiX1NBTU1fT04gPSAwOwogCiAJCWlmICh2aWFmYl9DUlRfT04gJiYgdmlhZmJfTENEX09OKSB7Ci0JCQl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTE7CisJCQljcnRfaWdhX3BhdGggPSBJR0ExOwogCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMjsKIAkJfSBlbHNlIGlmICh2aWFmYl9DUlRfT04gJiYgdmlhZmJfRFZJX09OKSB7Ci0JCQl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTE7CisJCQljcnRfaWdhX3BhdGggPSBJR0ExOwogCQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMjsKIAkJfSBlbHNlIGlmICh2aWFmYl9MQ0RfT04gJiYgdmlhZmJfRFZJX09OKSB7CiAJCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPSBJR0ExOwpAQCAtODI2LDcgKzY3NSw3IEBACiAJCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPSBJR0EyOwogCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5pZ2FfcGF0aCA9IElHQTI7CiAJCX0gZWxzZSBpZiAodmlhZmJfQ1JUX09OKSB7Ci0JCQl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTE7CisJCQljcnRfaWdhX3BhdGggPSBJR0ExOwogCQl9IGVsc2UgaWYgKHZpYWZiX0xDRF9PTikgewogCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID0gSUdBMjsKIAkJfSBlbHNlIGlmICh2aWFmYl9EVklfT04pIHsKQEAgLTgzNyw3ICs2ODYsNyBAQAogCXZpYXBhcmluZm8tPnNoYXJlZC0+aWdhMV9kZXZpY2VzID0gMDsKIAl2aWFwYXJpbmZvLT5zaGFyZWQtPmlnYTJfZGV2aWNlcyA9IDA7CiAJaWYgKHZpYWZiX0NSVF9PTikgewotCQlpZiAodmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+aWdhX3BhdGggPT0gSUdBMSkKKwkJaWYgKGNydF9pZ2FfcGF0aCA9PSBJR0ExKQogCQkJdmlhcGFyaW5mby0+c2hhcmVkLT5pZ2ExX2RldmljZXMgfD0gVklBX0NSVDsKIAkJZWxzZQogCQkJdmlhcGFyaW5mby0+c2hhcmVkLT5pZ2EyX2RldmljZXMgfD0gVklBX0NSVDsKQEAgLTg3NSw2ICs3MjQsMTAgQEAKIAkJCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPgogCQkJCWx2ZHNfY2hpcF9pbmZvMi5vdXRwdXRfaW50ZXJmYWNlKTsKIAl9CisKKwkvKiBsb29rcyBsaWtlIHRoZSBPTFBDIGhhcyBpdHMgZGlzcGxheSB3aXJlZCB0byBEVlAxIGFuZCBMVkRTMiAqLworCWlmIChtYWNoaW5lX2lzX29scGMoKSkKKwkJdmlhcGFyaW5mby0+c2hhcmVkLT5pZ2EyX2RldmljZXMgPSBWSUFfRFZQMSB8IFZJQV9MVkRTMjsKIH0KIAogc3RhdGljIHZvaWQgc2V0X2NvbG9yX3JlZ2lzdGVyKHU4IGluZGV4LCB1OCByZWQsIHU4IGdyZWVuLCB1OCBibHVlKQpAQCAtMTE2MiwyNSArMTAxNSwxNyBAQAogCiBzdGF0aWMgdm9pZCBsb2FkX2ZpeF9iaXRfY3J0Y19yZWcodm9pZCkKIHsKKwl2aWFmYl91bmxvY2tfY3J0KCk7CisKIAkvKiBhbHdheXMgc2V0IHRvIDEgKi8KIAl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjAzLCBWSUFDUiwgMHg4MCwgQklUNyk7CiAJLyogbGluZSBjb21wYXJlIHNob3VsZCBzZXQgYWxsIGJpdHMgPSAxIChleHRlbmQgbW9kZXMpICovCi0JdmlhZmJfd3JpdGVfcmVnKENSMTgsIFZJQUNSLCAweGZmKTsKLQkvKiBsaW5lIGNvbXBhcmUgc2hvdWxkIHNldCBhbGwgYml0cyA9IDEgKGV4dGVuZCBtb2RlcykgKi8KLQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjA3LCBWSUFDUiwgMHgxMCwgQklUNCk7Ci0JLyogbGluZSBjb21wYXJlIHNob3VsZCBzZXQgYWxsIGJpdHMgPSAxIChleHRlbmQgbW9kZXMpICovCi0JdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IwOSwgVklBQ1IsIDB4NDAsIEJJVDYpOwotCS8qIGxpbmUgY29tcGFyZSBzaG91bGQgc2V0IGFsbCBiaXRzID0gMSAoZXh0ZW5kIG1vZGVzKSAqLwogCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMzUsIFZJQUNSLCAweDEwLCBCSVQ0KTsKIAkvKiBsaW5lIGNvbXBhcmUgc2hvdWxkIHNldCBhbGwgYml0cyA9IDEgKGV4dGVuZCBtb2RlcykgKi8KIAl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjMzLCBWSUFDUiwgMHgwNiwgQklUMCArIEJJVDEgKyBCSVQyKTsKIAkvKnZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMzIsIFZJQUNSLCAweDAxLCBCSVQwKTsgKi8KLQkvKiBleHRlbmQgbW9kZSBhbHdheXMgc2V0IHRvIGUzaCAqLwotCXZpYWZiX3dyaXRlX3JlZyhDUjE3LCBWSUFDUiwgMHhlMyk7Ci0JLyogZXh0ZW5kIG1vZGUgYWx3YXlzIHNldCB0byAwaCAqLwotCXZpYWZiX3dyaXRlX3JlZyhDUjA4LCBWSUFDUiwgMHgwMCk7Ci0JLyogZXh0ZW5kIG1vZGUgYWx3YXlzIHNldCB0byAwaCAqLwotCXZpYWZiX3dyaXRlX3JlZyhDUjE0LCBWSUFDUiwgMHgwMCk7CisKKwl2aWFmYl9sb2NrX2NydCgpOwogCiAJLyogSWYgSzhNODAwLCBlbmFibGUgUHJlZmV0Y2ggTW9kZS4gKi8KIAlpZiAoKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfSzgwMCkKQEAgLTE2MDEsNjkgKzE0NDYsNTQgQEAKIAogfQogCi1zdGF0aWMgdTMyIGNsZTI2Nl9lbmNvZGVfcGxsKHN0cnVjdCBwbGxfY29uZmlnIHBsbCkKLXsKLQlyZXR1cm4gKHBsbC5tdWx0aXBsaWVyIDw8IDgpCi0JCXwgKHBsbC5yc2hpZnQgPDwgNikKLQkJfCBwbGwuZGl2aXNvcjsKLX0KLQotc3RhdGljIHUzMiBrODAwX2VuY29kZV9wbGwoc3RydWN0IHBsbF9jb25maWcgcGxsKQotewotCXJldHVybiAoKHBsbC5kaXZpc29yIC0gMikgPDwgMTYpCi0JCXwgKHBsbC5yc2hpZnQgPDwgMTApCi0JCXwgKHBsbC5tdWx0aXBsaWVyIC0gMik7Ci19Ci0KLXN0YXRpYyB1MzIgdng4NTVfZW5jb2RlX3BsbChzdHJ1Y3QgcGxsX2NvbmZpZyBwbGwpCi17Ci0JcmV0dXJuIChwbGwuZGl2aXNvciA8PCAxNikKLQkJfCAocGxsLnJzaGlmdCA8PCAxMCkKLQkJfCBwbGwubXVsdGlwbGllcjsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgZ2V0X3BsbF9pbnRlcm5hbF9mcmVxdWVuY3kodTMyIHJlZl9mcmVxLAotCXN0cnVjdCBwbGxfY29uZmlnIHBsbCkKLXsKLQlyZXR1cm4gcmVmX2ZyZXEgLyBwbGwuZGl2aXNvciAqIHBsbC5tdWx0aXBsaWVyOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBnZXRfcGxsX291dHB1dF9mcmVxdWVuY3kodTMyIHJlZl9mcmVxLCBzdHJ1Y3QgcGxsX2NvbmZpZyBwbGwpCi17Ci0JcmV0dXJuIGdldF9wbGxfaW50ZXJuYWxfZnJlcXVlbmN5KHJlZl9mcmVxLCBwbGwpPj5wbGwucnNoaWZ0OwotfQotCi1zdGF0aWMgc3RydWN0IHBsbF9jb25maWcgZ2V0X3BsbF9jb25maWcoc3RydWN0IHBsbF9jb25maWcgKmNvbmZpZywgaW50IHNpemUsCitzdGF0aWMgc3RydWN0IHZpYV9wbGxfY29uZmlnIGdldF9wbGxfY29uZmlnKHN0cnVjdCBwbGxfbGltaXQgKmxpbWl0cywgaW50IHNpemUsCiAJaW50IGNsaykKIHsKLQlzdHJ1Y3QgcGxsX2NvbmZpZyBiZXN0ID0gY29uZmlnWzBdOworCXN0cnVjdCB2aWFfcGxsX2NvbmZpZyBjdXIsIHVwLCBkb3duLCBiZXN0ID0gezAsIDEsIDB9OwogCWNvbnN0IHUzMiBmMCA9IDE0MzE4MTgwOyAvKiBYMSBmcmVxdWVuY3kgKi8KLQlpbnQgaTsKKwlpbnQgaSwgZjsKIAotCWZvciAoaSA9IDE7IGkgPCBzaXplOyBpKyspIHsKLQkJaWYgKGFicyhnZXRfcGxsX291dHB1dF9mcmVxdWVuY3koZjAsIGNvbmZpZ1tpXSkgLSBjbGspCi0JCQk8IGFicyhnZXRfcGxsX291dHB1dF9mcmVxdWVuY3koZjAsIGJlc3QpIC0gY2xrKSkKLQkJCWJlc3QgPSBjb25maWdbaV07CisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQljdXIucnNoaWZ0ID0gbGltaXRzW2ldLnJzaGlmdDsKKwkJY3VyLmRpdmlzb3IgPSBsaW1pdHNbaV0uZGl2aXNvcjsKKwkJY3VyLm11bHRpcGxpZXIgPSBjbGsgLyAoKGYwIC8gY3VyLmRpdmlzb3IpPj5jdXIucnNoaWZ0KTsKKwkJZiA9IGFicyhnZXRfcGxsX291dHB1dF9mcmVxdWVuY3koZjAsIGN1cikgLSBjbGspOworCQl1cCA9IGRvd24gPSBjdXI7CisJCXVwLm11bHRpcGxpZXIrKzsKKwkJZG93bi5tdWx0aXBsaWVyLS07CisJCWlmIChhYnMoZ2V0X3BsbF9vdXRwdXRfZnJlcXVlbmN5KGYwLCB1cCkgLSBjbGspIDwgZikKKwkJCWN1ciA9IHVwOworCQllbHNlIGlmIChhYnMoZ2V0X3BsbF9vdXRwdXRfZnJlcXVlbmN5KGYwLCBkb3duKSAtIGNsaykgPCBmKQorCQkJY3VyID0gZG93bjsKKworCQlpZiAoY3VyLm11bHRpcGxpZXIgPCBsaW1pdHNbaV0ubXVsdGlwbGllcl9taW4pCisJCQljdXIubXVsdGlwbGllciA9IGxpbWl0c1tpXS5tdWx0aXBsaWVyX21pbjsKKwkJZWxzZSBpZiAoY3VyLm11bHRpcGxpZXIgPiBsaW1pdHNbaV0ubXVsdGlwbGllcl9tYXgpCisJCQljdXIubXVsdGlwbGllciA9IGxpbWl0c1tpXS5tdWx0aXBsaWVyX21heDsKKworCQlmID0gYWJzKGdldF9wbGxfb3V0cHV0X2ZyZXF1ZW5jeShmMCwgY3VyKSAtIGNsayk7CisJCWlmIChmIDwgYWJzKGdldF9wbGxfb3V0cHV0X2ZyZXF1ZW5jeShmMCwgYmVzdCkgLSBjbGspKQorCQkJYmVzdCA9IGN1cjsKIAl9CiAKIAlyZXR1cm4gYmVzdDsKIH0KIAotdTMyIHZpYWZiX2dldF9jbGtfdmFsdWUoaW50IGNsaykKK3N0YXRpYyBzdHJ1Y3QgdmlhX3BsbF9jb25maWcgZ2V0X2Jlc3RfcGxsX2NvbmZpZyhpbnQgY2xrKQogewotCXUzMiB2YWx1ZSA9IDA7CisJc3RydWN0IHZpYV9wbGxfY29uZmlnIGNvbmZpZzsKIAogCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CiAJY2FzZSBVTklDSFJPTUVfQ0xFMjY2OgogCWNhc2UgVU5JQ0hST01FX0s0MDA6Ci0JCXZhbHVlID0gY2xlMjY2X2VuY29kZV9wbGwoZ2V0X3BsbF9jb25maWcoY2xlMjY2X3BsbF9jb25maWcsCi0JCQlBUlJBWV9TSVpFKGNsZTI2Nl9wbGxfY29uZmlnKSwgY2xrKSk7CisJCWNvbmZpZyA9IGdldF9wbGxfY29uZmlnKGNsZTI2Nl9wbGxfbGltaXRzLAorCQkJQVJSQVlfU0laRShjbGUyNjZfcGxsX2xpbWl0cyksIGNsayk7CiAJCWJyZWFrOwogCWNhc2UgVU5JQ0hST01FX0s4MDA6CiAJY2FzZSBVTklDSFJPTUVfUE04MDA6CiAJY2FzZSBVTklDSFJPTUVfQ043MDA6Ci0JCXZhbHVlID0gazgwMF9lbmNvZGVfcGxsKGdldF9wbGxfY29uZmlnKGs4MDBfcGxsX2NvbmZpZywKLQkJCUFSUkFZX1NJWkUoazgwMF9wbGxfY29uZmlnKSwgY2xrKSk7CisJCWNvbmZpZyA9IGdldF9wbGxfY29uZmlnKGs4MDBfcGxsX2xpbWl0cywKKwkJCUFSUkFZX1NJWkUoazgwMF9wbGxfbGltaXRzKSwgY2xrKTsKIAkJYnJlYWs7CiAJY2FzZSBVTklDSFJPTUVfQ1g3MDA6CiAJY2FzZSBVTklDSFJPTUVfQ043NTA6CkBAIC0xNjcxLDkyICsxNTAxLDI4IEBACiAJY2FzZSBVTklDSFJPTUVfUDRNODkwOgogCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKIAljYXNlIFVOSUNIUk9NRV9WWDgwMDoKLQkJdmFsdWUgPSBrODAwX2VuY29kZV9wbGwoZ2V0X3BsbF9jb25maWcoY3g3MDBfcGxsX2NvbmZpZywKLQkJCUFSUkFZX1NJWkUoY3g3MDBfcGxsX2NvbmZpZyksIGNsaykpOworCQljb25maWcgPSBnZXRfcGxsX2NvbmZpZyhjeDcwMF9wbGxfbGltaXRzLAorCQkJQVJSQVlfU0laRShjeDcwMF9wbGxfbGltaXRzKSwgY2xrKTsKIAkJYnJlYWs7CiAJY2FzZSBVTklDSFJPTUVfVlg4NTU6CiAJY2FzZSBVTklDSFJPTUVfVlg5MDA6Ci0JCXZhbHVlID0gdng4NTVfZW5jb2RlX3BsbChnZXRfcGxsX2NvbmZpZyh2eDg1NV9wbGxfY29uZmlnLAotCQkJQVJSQVlfU0laRSh2eDg1NV9wbGxfY29uZmlnKSwgY2xrKSk7CisJCWNvbmZpZyA9IGdldF9wbGxfY29uZmlnKHZ4ODU1X3BsbF9saW1pdHMsCisJCQlBUlJBWV9TSVpFKHZ4ODU1X3BsbF9saW1pdHMpLCBjbGspOwogCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gdmFsdWU7CisJcmV0dXJuIGNvbmZpZzsKIH0KIAogLyogU2V0IFZDTEsqLwogdm9pZCB2aWFmYl9zZXRfdmNsb2NrKHUzMiBjbGssIGludCBzZXRfaWdhKQogewotCS8qIEguVy4gUmVzZXQgOiBPTiAqLwotCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMTcsIFZJQUNSLCAweDAwLCBCSVQ3KTsKKwlzdHJ1Y3QgdmlhX3BsbF9jb25maWcgY29uZmlnID0gZ2V0X2Jlc3RfcGxsX2NvbmZpZyhjbGspOwogCi0JaWYgKHNldF9pZ2EgPT0gSUdBMSkgewotCQkvKiBDaGFuZ2UgRCxOIEZPUiBWQ0xLICovCi0JCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7Ci0JCWNhc2UgVU5JQ0hST01FX0NMRTI2NjoKLQkJY2FzZSBVTklDSFJPTUVfSzQwMDoKLQkJCXZpYV93cml0ZV9yZWcoVklBU1IsIFNSNDYsIChjbGsgJiAweDAwRkYpKTsKLQkJCXZpYV93cml0ZV9yZWcoVklBU1IsIFNSNDcsIChjbGsgJiAweEZGMDApID4+IDgpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBVTklDSFJPTUVfSzgwMDoKLQkJY2FzZSBVTklDSFJPTUVfUE04MDA6Ci0JCWNhc2UgVU5JQ0hST01FX0NONzAwOgotCQljYXNlIFVOSUNIUk9NRV9DWDcwMDoKLQkJY2FzZSBVTklDSFJPTUVfQ043NTA6Ci0JCWNhc2UgVU5JQ0hST01FX0s4TTg5MDoKLQkJY2FzZSBVTklDSFJPTUVfUDRNODkwOgotCQljYXNlIFVOSUNIUk9NRV9QNE05MDA6Ci0JCWNhc2UgVU5JQ0hST01FX1ZYODAwOgotCQljYXNlIFVOSUNIUk9NRV9WWDg1NToKLQkJY2FzZSBVTklDSFJPTUVfVlg5MDA6Ci0JCQl2aWFfd3JpdGVfcmVnKFZJQVNSLCBTUjQ0LCAoY2xrICYgMHgwMDAwRkYpKTsKLQkJCXZpYV93cml0ZV9yZWcoVklBU1IsIFNSNDUsIChjbGsgJiAweDAwRkYwMCkgPj4gOCk7Ci0JCQl2aWFfd3JpdGVfcmVnKFZJQVNSLCBTUjQ2LCAoY2xrICYgMHhGRjAwMDApID4+IDE2KTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKHNldF9pZ2EgPT0gSUdBMikgewotCQkvKiBDaGFuZ2UgRCxOIEZPUiBMQ0sgKi8KLQkJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKLQkJY2FzZSBVTklDSFJPTUVfQ0xFMjY2OgotCQljYXNlIFVOSUNIUk9NRV9LNDAwOgotCQkJdmlhX3dyaXRlX3JlZyhWSUFTUiwgU1I0NCwgKGNsayAmIDB4MDBGRikpOwotCQkJdmlhX3dyaXRlX3JlZyhWSUFTUiwgU1I0NSwgKGNsayAmIDB4RkYwMCkgPj4gOCk7Ci0JCQlicmVhazsKLQotCQljYXNlIFVOSUNIUk9NRV9LODAwOgotCQljYXNlIFVOSUNIUk9NRV9QTTgwMDoKLQkJY2FzZSBVTklDSFJPTUVfQ043MDA6Ci0JCWNhc2UgVU5JQ0hST01FX0NYNzAwOgotCQljYXNlIFVOSUNIUk9NRV9DTjc1MDoKLQkJY2FzZSBVTklDSFJPTUVfSzhNODkwOgotCQljYXNlIFVOSUNIUk9NRV9QNE04OTA6Ci0JCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKLQkJY2FzZSBVTklDSFJPTUVfVlg4MDA6Ci0JCWNhc2UgVU5JQ0hST01FX1ZYODU1OgotCQljYXNlIFVOSUNIUk9NRV9WWDkwMDoKLQkJCXZpYV93cml0ZV9yZWcoVklBU1IsIFNSNEEsIChjbGsgJiAweDAwMDBGRikpOwotCQkJdmlhX3dyaXRlX3JlZyhWSUFTUiwgU1I0QiwgKGNsayAmIDB4MDBGRjAwKSA+PiA4KTsKLQkJCXZpYV93cml0ZV9yZWcoVklBU1IsIFNSNEMsIChjbGsgJiAweEZGMDAwMCkgPj4gMTYpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQkvKiBILlcuIFJlc2V0IDogT0ZGICovCi0JdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IxNywgVklBQ1IsIDB4ODAsIEJJVDcpOwotCi0JLyogUmVzZXQgUExMICovCi0JaWYgKHNldF9pZ2EgPT0gSUdBMSkgewotCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjQwLCBWSUFTUiwgMHgwMiwgQklUMSk7Ci0JCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSNDAsIFZJQVNSLCAweDAwLCBCSVQxKTsKLQl9Ci0KLQlpZiAoc2V0X2lnYSA9PSBJR0EyKSB7Ci0JCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSNDAsIFZJQVNSLCAweDA0LCBCSVQyKTsKLQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1I0MCwgVklBU1IsIDB4MDAsIEJJVDIpOwotCX0KKwlpZiAoc2V0X2lnYSA9PSBJR0ExKQorCQljbG9jay5zZXRfcHJpbWFyeV9wbGwoY29uZmlnKTsKKwlpZiAoc2V0X2lnYSA9PSBJR0EyKQorCQljbG9jay5zZXRfc2Vjb25kYXJ5X3BsbChjb25maWcpOwogCiAJLyogRmlyZSEgKi8KIAl2aWFfd3JpdGVfbWlzY19yZWdfbWFzaygweDBDLCAweDBDKTsgLyogc2VsZWN0IGV4dGVybmFsIGNsb2NrICovCkBAIC0yMDAyLDcgKzE3NjgsNyBAQAogCWludCBpOwogCWludCBpbmRleCA9IDA7CiAJaW50IGhfYWRkciwgdl9hZGRyOwotCXUzMiBwbGxfRF9OLCBjbG9jaywgcmVmcmVzaCA9IHZpYWZiX3JlZnJlc2g7CisJdTMyIGNsb2NrLCByZWZyZXNoID0gdmlhZmJfcmVmcmVzaDsKIAogCWlmICh2aWFmYl9TQU1NX09OICYmIHNldF9pZ2EgPT0gSUdBMikKIAkJcmVmcmVzaCA9IHZpYWZiX3JlZnJlc2gxOwpAQCAtMjAzMyw4ICsxNzk5LDYgQEAKIAl2X2FkZHIgPSBjcnRfcmVnLnZlcl9hZGRyOwogCWlmIChzZXRfaWdhID09IElHQTEpIHsKIAkJdmlhZmJfdW5sb2NrX2NydCgpOwotCQl2aWFmYl93cml0ZV9yZWcoQ1IwOSwgVklBQ1IsIDB4MDApOwkvKmluaXRpYWwgQ1IwOT0wICovCi0JCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMTEsIFZJQUNSLCAweDAwLCBCSVQ0ICsgQklUNSArIEJJVDYpOwogCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjE3LCBWSUFDUiwgMHgwMCwgQklUNyk7CiAJfQogCkBAIC0yMDQ3LDcgKzE4MTEsNiBAQAogCQlicmVhazsKIAl9CiAKLQlsb2FkX2ZpeF9iaXRfY3J0Y19yZWcoKTsKIAl2aWFmYl9sb2NrX2NydCgpOwogCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMTcsIFZJQUNSLCAweDgwLCBCSVQ3KTsKIAl2aWFmYl9sb2FkX2ZldGNoX2NvdW50X3JlZyhoX2FkZHIsIGJwcF9ieXRlLCBzZXRfaWdhKTsKQEAgLTIwNTksMjAgKzE4MjIsMTcgQEAKIAogCWNsb2NrID0gY3J0X3JlZy5ob3JfdG90YWwgKiBjcnRfcmVnLnZlcl90b3RhbAogCQkqIGNydF90YWJsZVtpbmRleF0ucmVmcmVzaF9yYXRlOwotCXBsbF9EX04gPSB2aWFmYl9nZXRfY2xrX3ZhbHVlKGNsb2NrKTsKLQlERUJVR19NU0coS0VSTl9JTkZPICJQTEw9JXgiLCBwbGxfRF9OKTsKLQl2aWFmYl9zZXRfdmNsb2NrKHBsbF9EX04sIHNldF9pZ2EpOworCXZpYWZiX3NldF92Y2xvY2soY2xvY2ssIHNldF9pZ2EpOwogCiB9CiAKIHZvaWQgX19kZXZpbml0IHZpYWZiX2luaXRfY2hpcF9pbmZvKGludCBjaGlwX3R5cGUpCiB7CisJdmlhX2Nsb2NrX2luaXQoJmNsb2NrLCBjaGlwX3R5cGUpOwogCWluaXRfZ2Z4X2NoaXBfaW5mbyhjaGlwX3R5cGUpOwogCWluaXRfdG1kc19jaGlwX2luZm8oKTsKIAlpbml0X2x2ZHNfY2hpcF9pbmZvKCk7CiAKLQl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9IElHQTE7Ci0KIAkvKlNldCBJR0EgcGF0aCBmb3IgZWFjaCBkZXZpY2UgKi8KIAl2aWFmYl9zZXRfaWdhX3BhdGgoKTsKIApAQCAtMjM1NCw2ICsyMTE0LDcgQEAKIAlvdXRiKDB4MDAsIFZJQUFSKTsKIAogCS8qIFdyaXRlIENvbW1vbiBTZXR0aW5nIGZvciBWaWRlbyBNb2RlICovCisJdmlhZmJfd3JpdGVfcmVneChjb21tb25fdmdhLCBBUlJBWV9TSVpFKGNvbW1vbl92Z2EpKTsKIAlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgewogCWNhc2UgVU5JQ0hST01FX0NMRTI2NjoKIAkJdmlhZmJfd3JpdGVfcmVneChDTEUyNjZfTW9kZVhyZWdzLCBOVU1fVE9UQUxfQ0xFMjY2X01vZGVYcmVncyk7CkBAIC0yNDAwLDkgKzIxNjEsNiBAQAogCiAJdmlhZmJfd3JpdGVfcmVnX21hc2soMHgxNSwgVklBU1IsIDB4QTIsIDB4QTIpOwogCi0JLyogV3JpdGUgQ1JUQyAqLwotCXZpYWZiX2ZpbGxfY3J0Y190aW1pbmcoY3J0X3RpbWluZywgdm1vZGVfdGJsLCB2aWRlb19icHAgLyA4LCBJR0ExKTsKLQogCS8qIFdyaXRlIEdyYXBoaWMgQ29udHJvbGxlciAqLwogCWZvciAoaSA9IDA7IGkgPCBTdGRHUjsgaSsrKQogCQl2aWFfd3JpdGVfcmVnKFZJQUdSLCBpLCBWUElULkdSW2ldKTsKQEAgLTI0MzIsNiArMjE5MCw3IEBACiAJCX0KIAl9CiAKKwlsb2FkX2ZpeF9iaXRfY3J0Y19yZWcoKTsKIAl2aWFfc2V0X3ByaW1hcnlfcGl0Y2godmlhZmJpbmZvLT5maXgubGluZV9sZW5ndGgpOwogCXZpYV9zZXRfc2Vjb25kYXJ5X3BpdGNoKHZpYWZiX2R1YWxfZmIgPyB2aWFmYmluZm8xLT5maXgubGluZV9sZW5ndGgKIAkJOiB2aWFmYmluZm8tPmZpeC5saW5lX2xlbmd0aCk7CkBAIC0yNDUxLDE1ICsyMjEwLDE1IEBACiAKIAkvKiBDUlQgc2V0IG1vZGUgKi8KIAlpZiAodmlhZmJfQ1JUX09OKSB7Ci0JCWlmICh2aWFmYl9TQU1NX09OICYmICh2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9PQotCQkJSUdBMikpIHsKKwkJaWYgKHZpYWZiX1NBTU1fT04gJiYKKwkJCXZpYXBhcmluZm8tPnNoYXJlZC0+aWdhMl9kZXZpY2VzICYgVklBX0NSVCkgewogCQkJdmlhZmJfZmlsbF9jcnRjX3RpbWluZyhjcnRfdGltaW5nMSwgdm1vZGVfdGJsMSwKLQkJCQl2aWRlb19icHAxIC8gOCwKLQkJCQl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCk7CisJCQkJdmlkZW9fYnBwMSAvIDgsIElHQTIpOwogCQl9IGVsc2UgewogCQkJdmlhZmJfZmlsbF9jcnRjX3RpbWluZyhjcnRfdGltaW5nLCB2bW9kZV90YmwsCiAJCQkJdmlkZW9fYnBwIC8gOCwKLQkJCQl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCk7CisJCQkJKHZpYXBhcmluZm8tPnNoYXJlZC0+aWdhMV9kZXZpY2VzICYgVklBX0NSVCkKKwkJCQk/IElHQTEgOiBJR0EyKTsKIAkJfQogCiAJCS8qIFBhdGNoIGlmIHNldF9ocmVzIGlzIG5vdCA4IGFsaWdubWVudCAoMTM2NikgdG8gdmlhZmJfc2V0bW9kZQpAQCAtMjU1Nyw2ICsyMzE2LDMzIEBACiAJCQlnZXRfc3luYyh2aWFmYmluZm8xKSk7CiAJfQogCisJY2xvY2suc2V0X2VuZ2luZV9wbGxfc3RhdGUoVklBX1NUQVRFX09OKTsKKwljbG9jay5zZXRfcHJpbWFyeV9jbG9ja19zb3VyY2UoVklBX0NMS1NSQ19YMSwgdHJ1ZSk7CisJY2xvY2suc2V0X3NlY29uZGFyeV9jbG9ja19zb3VyY2UoVklBX0NMS1NSQ19YMSwgdHJ1ZSk7CisKKyNpZmRlZiBDT05GSUdfRkJfVklBX1hfQ09NUEFUSUJJTElUWQorCWNsb2NrLnNldF9wcmltYXJ5X3BsbF9zdGF0ZShWSUFfU1RBVEVfT04pOworCWNsb2NrLnNldF9wcmltYXJ5X2Nsb2NrX3N0YXRlKFZJQV9TVEFURV9PTik7CisJY2xvY2suc2V0X3NlY29uZGFyeV9wbGxfc3RhdGUoVklBX1NUQVRFX09OKTsKKwljbG9jay5zZXRfc2Vjb25kYXJ5X2Nsb2NrX3N0YXRlKFZJQV9TVEFURV9PTik7CisjZWxzZQorCWlmICh2aWFwYXJpbmZvLT5zaGFyZWQtPmlnYTFfZGV2aWNlcykgeworCQljbG9jay5zZXRfcHJpbWFyeV9wbGxfc3RhdGUoVklBX1NUQVRFX09OKTsKKwkJY2xvY2suc2V0X3ByaW1hcnlfY2xvY2tfc3RhdGUoVklBX1NUQVRFX09OKTsKKwl9IGVsc2UgeworCQljbG9jay5zZXRfcHJpbWFyeV9wbGxfc3RhdGUoVklBX1NUQVRFX09GRik7CisJCWNsb2NrLnNldF9wcmltYXJ5X2Nsb2NrX3N0YXRlKFZJQV9TVEFURV9PRkYpOworCX0KKworCWlmICh2aWFwYXJpbmZvLT5zaGFyZWQtPmlnYTJfZGV2aWNlcykgeworCQljbG9jay5zZXRfc2Vjb25kYXJ5X3BsbF9zdGF0ZShWSUFfU1RBVEVfT04pOworCQljbG9jay5zZXRfc2Vjb25kYXJ5X2Nsb2NrX3N0YXRlKFZJQV9TVEFURV9PTik7CisJfSBlbHNlIHsKKwkJY2xvY2suc2V0X3NlY29uZGFyeV9wbGxfc3RhdGUoVklBX1NUQVRFX09GRik7CisJCWNsb2NrLnNldF9zZWNvbmRhcnlfY2xvY2tfc3RhdGUoVklBX1NUQVRFX09GRik7CisJfQorI2VuZGlmIC8qQ09ORklHX0ZCX1ZJQV9YX0NPTVBBVElCSUxJVFkqLworCiAJdmlhX3NldF9zdGF0ZShkZXZpY2VzLCBWSUFfU1RBVEVfT04pOwogCWRldmljZV9zY3JlZW5fb24oKTsKIAlyZXR1cm4gMTsKQEAgLTI1OTgsOCArMjM4NCwxMiBAQAogCQkJYmVzdCA9ICZ2bW9kZS0+Y3J0Y1tpXTsKIAl9CiAKLQlpZiAoYWJzKGJlc3QtPnJlZnJlc2hfcmF0ZSAtIGxvbmdfcmVmcmVzaCkgPiAzKQotCQlyZXR1cm4gNjA7CisJaWYgKGFicyhiZXN0LT5yZWZyZXNoX3JhdGUgLSBsb25nX3JlZnJlc2gpID4gMykgeworCQlpZiAoaHJlcyA9PSAxMjAwICYmIHZyZXMgPT0gOTAwKQorCQkJcmV0dXJuIDQ5OyAvKiBPTFBDIERDT04gb25seSBzdXBwb3J0cyA1MCBIeiAqLworCQllbHNlCisJCQlyZXR1cm4gNjA7CisJfQogCiAJcmV0dXJuIGJlc3QtPnJlZnJlc2hfcmF0ZTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2h3LmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS9ody5oCmluZGV4IDg4NTg1OTMuLmM3MjM5ZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL2h3LmgKKysrIGIvZHJpdmVycy92aWRlby92aWEvaHcuaApAQCAtNzMyLDIwICs3MzIsMTMgQEAKIAlzdHJ1Y3QgX2xjZF92ZXJfc2NhbGluZ19mYWN0b3IgbGNkX3Zlcl9zY2FsaW5nX2ZhY3RvcjsKIH07CiAKLXN0cnVjdCBwbGxfY29uZmlnIHsKLQl1MTYgbXVsdGlwbGllcjsKK3N0cnVjdCBwbGxfbGltaXQgeworCXUxNiBtdWx0aXBsaWVyX21pbjsKKwl1MTYgbXVsdGlwbGllcl9tYXg7CiAJdTggZGl2aXNvcjsKIAl1OCByc2hpZnQ7CiB9OwogCi1zdHJ1Y3QgcGxsX21hcCB7Ci0JdTMyIGNsazsKLQlzdHJ1Y3QgcGxsX2NvbmZpZyBjbGUyNjZfcGxsOwotCXN0cnVjdCBwbGxfY29uZmlnIGs4MDBfcGxsOwotCXN0cnVjdCBwbGxfY29uZmlnIGN4NzAwX3BsbDsKLQlzdHJ1Y3QgcGxsX2NvbmZpZyB2eDg1NV9wbGw7Ci19OwotCiBzdHJ1Y3QgcmdiTFVUIHsKIAl1OCByZWQ7CiAJdTggZ3JlZW47CkBAIC05MTAsNyArOTAzLDYgQEAKIAljb25zdCBjaGFyICpuYW1lOwogfTsKIAotZXh0ZXJuIHVuc2lnbmVkIGludCB2aWFmYl9zZWNvbmRfdmlydHVhbF94cmVzOwogZXh0ZXJuIGludCB2aWFmYl9TQU1NX09OOwogZXh0ZXJuIGludCB2aWFmYl9kdWFsX2ZiOwogZXh0ZXJuIGludCB2aWFmYl9MQ0QyX09OOwpAQCAtOTM2LDcgKzkyOCw2IEBACiB2b2lkIHZpYWZiX3VubG9ja19jcnQodm9pZCk7CiB2b2lkIHZpYWZiX2xvYWRfZmV0Y2hfY291bnRfcmVnKGludCBoX2FkZHIsIGludCBicHBfYnl0ZSwgaW50IHNldF9pZ2EpOwogdm9pZCB2aWFmYl93cml0ZV9yZWd4KHN0cnVjdCBpb19yZWcgUmVnVGFibGVbXSwgaW50IEl0ZW1OdW0pOwotdTMyIHZpYWZiX2dldF9jbGtfdmFsdWUoaW50IGNsayk7CiB2b2lkIHZpYWZiX2xvYWRfRklGT19yZWcoaW50IHNldF9pZ2EsIGludCBob3JfYWN0aXZlLCBpbnQgdmVyX2FjdGl2ZSk7CiB2b2lkIHZpYWZiX3NldF9kcGFfZ2Z4KGludCBvdXRwdXRfaW50ZXJmYWNlLCBzdHJ1Y3QgR0ZYX0RQQV9TRVRUSU5HXAogCQkJCQkqcF9nZnhfZHBhX3NldHRpbmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvbGNkLmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2QuYwppbmRleCA2NGJjN2U3Li42ZTA2OTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2QuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2QuYwpAQCAtNDgsNyArNDgsNiBAQAogCXtMQ0RfVkVSX1NDQUxJTkdfRkFDVE9SX1JFR19OVU1fQ0xFLCB7e0NSNzgsIDAsIDd9LCB7Q1I3OSwgNiwgN30gfSB9CiB9OwogCi1zdGF0aWMgaW50IGNoZWNrX2x2ZHNfY2hpcChpbnQgZGV2aWNlX2lkX3N1YmFkZHIsIGludCBkZXZpY2VfaWQpOwogc3RhdGljIGJvb2wgbHZkc19pZGVudGlmeV9pbnRlZ3JhdGVkbHZkcyh2b2lkKTsKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBmcF9pZF90b192aW5kZXgoaW50IHBhbmVsX2lkKTsKIHN0YXRpYyBpbnQgbHZkc19yZWdpc3Rlcl9yZWFkKGludCBpbmRleCk7CkBAIC04NCwxMiArODMsOSBAQAogCQkJCQkgICAgbW9kZV9jcnRfcmVnLAogCQkJCQkgICBzdHJ1Y3QgZGlzcGxheV90aW1pbmcgcGFuZWxfY3J0X3JlZyk7CiAKLXN0YXRpYyBpbnQgY2hlY2tfbHZkc19jaGlwKGludCBkZXZpY2VfaWRfc3ViYWRkciwgaW50IGRldmljZV9pZCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBjaGVja19sdmRzX2NoaXAoaW50IGRldmljZV9pZF9zdWJhZGRyLCBpbnQgZGV2aWNlX2lkKQogewotCWlmIChsdmRzX3JlZ2lzdGVyX3JlYWQoZGV2aWNlX2lkX3N1YmFkZHIpID09IGRldmljZV9pZCkKLQkJcmV0dXJuIE9LOwotCWVsc2UKLQkJcmV0dXJuIEZBSUw7CisJcmV0dXJuIGx2ZHNfcmVnaXN0ZXJfcmVhZChkZXZpY2VfaWRfc3ViYWRkcikgPT0gZGV2aWNlX2lkOwogfQogCiB2b2lkIF9fZGV2aW5pdCB2aWFmYl9pbml0X2xjZF9zaXplKHZvaWQpCkBAIC0xNTAsNyArMTQ2LDcgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotaW50IF9fZGV2aW5pdCB2aWFmYl9sdmRzX3RyYXNtaXR0ZXJfaWRlbnRpZnkodm9pZCkKK2Jvb2wgX19kZXZpbml0IHZpYWZiX2x2ZHNfdHJhc21pdHRlcl9pZGVudGlmeSh2b2lkKQogewogCWlmICh2aWFmYl9sdmRzX2lkZW50aWZ5X3Z0MTYzNihWSUFfUE9SVF8zMSkpIHsKIAkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5pMmNfcG9ydCA9IFZJQV9QT1JUXzMxOwpAQCAtMTc1LDIwICsxNzEsMjAgQEAKIAl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9zbGF2ZV9hZGRyID0KIAkJVlQxNjMxX0xWRFNfSTJDX0FERFI7CiAKLQlpZiAoY2hlY2tfbHZkc19jaGlwKFZUMTYzMV9ERVZJQ0VfSURfUkVHLCBWVDE2MzFfREVWSUNFX0lEKSAhPSBGQUlMKSB7CisJaWYgKGNoZWNrX2x2ZHNfY2hpcChWVDE2MzFfREVWSUNFX0lEX1JFRywgVlQxNjMxX0RFVklDRV9JRCkpIHsKIAkJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG4gVlQxNjMxIExWRFMgISBcbiIpOwogCQlERUJVR19NU0coS0VSTl9JTkZPICJcbiAlMmQiLAogCQkJICB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9uYW1lKTsKIAkJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG4gJTJkIiwKIAkJCSAgdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfbmFtZSk7Ci0JCXJldHVybiBPSzsKKwkJcmV0dXJuIHRydWU7CiAJfQogCiAJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfbmFtZSA9CiAJCU5PTl9MVkRTX1RSQU5TTUlUVEVSOwogCXZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8ubHZkc19jaGlwX3NsYXZlX2FkZHIgPQogCQlWVDE2MzFfTFZEU19JMkNfQUREUjsKLQlyZXR1cm4gRkFJTDsKKwlyZXR1cm4gZmFsc2U7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBmcF9pZF90b192aW5kZXgoaW50IHBhbmVsX2lkKQpAQCAtNTYyLDcgKzU1OCw3IEBACiAJaW50IHNldF92cmVzID0gcGx2ZHNfc2V0dGluZ19pbmZvLT52X2FjdGl2ZTsKIAlpbnQgcGFuZWxfaHJlcyA9IHBsdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXM7CiAJaW50IHBhbmVsX3ZyZXMgPSBwbHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF92cmVzOwotCXUzMiBwbGxfRF9OLCBjbG9jazsKKwl1MzIgY2xvY2s7CiAJc3RydWN0IGRpc3BsYXlfdGltaW5nIG1vZGVfY3J0X3JlZywgcGFuZWxfY3J0X3JlZzsKIAlzdHJ1Y3QgY3J0X21vZGVfdGFibGUgKnBhbmVsX2NydF90YWJsZSA9IE5VTEw7CiAJc3RydWN0IFZpZGVvTW9kZVRhYmxlICp2bW9kZV90YmwgPSB2aWFmYl9nZXRfbW9kZShwYW5lbF9ocmVzLApAQCAtNjEzLDEwICs2MDksNyBAQAogCQl2aWFmYl9sb2FkX0ZJRk9fcmVnKHNldF9pZ2EsIHNldF9ocmVzLCBzZXRfdnJlcyk7CiAKIAlmaWxsX2xjZF9mb3JtYXQoKTsKLQotCXBsbF9EX04gPSB2aWFmYl9nZXRfY2xrX3ZhbHVlKGNsb2NrKTsKLQlERUJVR19NU0coS0VSTl9JTkZPICJQTEw9MHgleCIsIHBsbF9EX04pOwotCXZpYWZiX3NldF92Y2xvY2socGxsX0RfTiwgc2V0X2lnYSk7CisJdmlhZmJfc2V0X3ZjbG9jayhjbG9jaywgc2V0X2lnYSk7CiAJbGNkX3BhdGNoX3NrZXcocGx2ZHNfc2V0dGluZ19pbmZvLCBwbHZkc19jaGlwX2luZm8pOwogCiAJLyogSWYgSzhNODAwLCBlbmFibGUgTENEIFByZWZldGNoIE1vZGUuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2QuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL2xjZC5oCmluZGV4IGM3OTA5ZmUuLjc1ZjYwYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL2xjZC5oCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2xjZC5oCkBAIC03OSw3ICs3OSw3IEBACiB2b2lkIHZpYWZiX2xjZF9zZXRfbW9kZShzdHJ1Y3QgY3J0X21vZGVfdGFibGUgKm1vZGVfY3J0X3RhYmxlLAogCQkgIHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24gKnBsdmRzX3NldHRpbmdfaW5mbywKIAkJICBzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uICpwbHZkc19jaGlwX2luZm8pOwotaW50IF9fZGV2aW5pdCB2aWFmYl9sdmRzX3RyYXNtaXR0ZXJfaWRlbnRpZnkodm9pZCk7Citib29sIF9fZGV2aW5pdCB2aWFmYl9sdmRzX3RyYXNtaXR0ZXJfaWRlbnRpZnkodm9pZCk7CiB2b2lkIHZpYWZiX2luaXRfbHZkc19vdXRwdXRfaW50ZXJmYWNlKHN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24KIAkJCQkqcGx2ZHNfY2hpcF9pbmZvLAogCQkJCXN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3NoYXJlLmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS9zaGFyZS5oCmluZGV4IDRiNzgzMWYuLjYxYjBiZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL3NoYXJlLmgKKysrIGIvZHJpdmVycy92aWRlby92aWEvc2hhcmUuaApAQCAtMjIsMTQgKzIyLDYgQEAKICNpZm5kZWYgX19TSEFSRV9IX18KICNkZWZpbmUgX19TSEFSRV9IX18KIAotLyogRGVmaW5lIFJldHVybiBWYWx1ZSAqLwotI2RlZmluZSBGQUlMICAgICAgICAtMQotI2RlZmluZSBPSyAgICAgICAgICAxCi0KLSNpZm5kZWYgTlVMTAotI2RlZmluZSBOVUxMIDAKLSNlbmRpZgotCiAvKiBEZWZpbmUgQml0IEZpZWxkICovCiAjZGVmaW5lIEJJVDAgICAgMHgwMQogI2RlZmluZSBCSVQxICAgIDB4MDIKQEAgLTI5MCw2ICsyODIsNyBAQAogI2RlZmluZSBIV19MQVlPVVRfTENEX0VYVEVSTkFMX0xDRDIgMHgxMAogCiAvKiBEZWZpbml0aW9uIFJlZnJlc2ggUmF0ZSAqLworI2RlZmluZSBSRUZSRVNIXzQ5ICAgICAgNDkKICNkZWZpbmUgUkVGUkVTSF81MCAgICAgIDUwCiAjZGVmaW5lIFJFRlJFU0hfNjAgICAgICA2MAogI2RlZmluZSBSRUZSRVNIXzc1ICAgICAgNzUKQEAgLTU3NSwxMCArNTY4LDYgQEAKICNkZWZpbmUgTTEyODBYNzIwX1I1MF9IU1AgICAgICAgTkVHQVRJVkUKICNkZWZpbmUgTTEyODBYNzIwX1I1MF9WU1AgICAgICAgUE9TSVRJVkUKIAotLyogMTI4MHg3MjBANjAgU3luYyBQb2xhcml0eSAgKENFQSBNb2RlKSAqLwotI2RlZmluZSBNMTI4MFg3MjBfQ0VBX1I2MF9IU1AgICAgICAgUE9TSVRJVkUKLSNkZWZpbmUgTTEyODBYNzIwX0NFQV9SNjBfVlNQICAgICAgIFBPU0lUSVZFCi0KIC8qIDE0NDB4OTAwQDYwIFN5bmMgUG9sYXJpdHkgKENWVCBNb2RlKSAqLwogI2RlZmluZSBNMTQ0MFg5MDBfUjYwX0hTUCAgICAgICBORUdBVElWRQogI2RlZmluZSBNMTQ0MFg5MDBfUjYwX1ZTUCAgICAgICBQT1NJVElWRQpAQCAtNjE5LDEwICs2MDgsNiBAQAogI2RlZmluZSBNMTkyMFgxMjAwX1JCX1I2MF9IU1AgIFBPU0lUSVZFCiAjZGVmaW5lIE0xOTIwWDEyMDBfUkJfUjYwX1ZTUCAgTkVHQVRJVkUKIAotLyogMTkyMHgxMDgwQDYwIFN5bmMgUG9sYXJpdHkgIChDRUEgTW9kZSkgKi8KLSNkZWZpbmUgTTE5MjBYMTA4MF9DRUFfUjYwX0hTUCAgICAgICBQT1NJVElWRQotI2RlZmluZSBNMTkyMFgxMDgwX0NFQV9SNjBfVlNQICAgICAgIFBPU0lUSVZFCi0KIC8qIDIwNDh4MTUzNkA2MCBTeW5jIFBvbGFyaXR5IChDVlQgTW9kZSkgKi8KICNkZWZpbmUgTTIwNDh4MTUzNl9SNjBfSFNQICAgICAgTkVHQVRJVkUKICNkZWZpbmUgTTIwNDh4MTUzNl9SNjBfVlNQICAgICAgUE9TSVRJVkUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYS1jb3JlLmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWEtY29yZS5jCmluZGV4IDY3MjNkNjkuLmViMTEyYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYS1jb3JlLmMKKysrIGIvZHJpdmVycy92aWRlby92aWEvdmlhLWNvcmUuYwpAQCAtNTA1LDcgKzUwNSwxNCBAQAogCXJldCA9IHZkZXYtPmZibWVtX2xlbiA9IHZpYWZiX2dldF9mYl9zaXplX2Zyb21fcGNpKHZkZXYtPmNoaXBfdHlwZSk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0X3VubWFwOwotCXZkZXYtPmZibWVtID0gaW9yZW1hcF9ub2NhY2hlKHZkZXYtPmZibWVtX3N0YXJ0LCB2ZGV2LT5mYm1lbV9sZW4pOworCisJLyogdHJ5IHRvIG1hcCBsZXNzIG1lbW9yeSBvbiBmYWlsdXJlLCA4IE1CIHNob3VsZCBiZSBzdGlsbCBlbm91Z2ggKi8KKwlmb3IgKDsgdmRldi0+ZmJtZW1fbGVuID49IDggPDwgMjA7IHZkZXYtPmZibWVtX2xlbiAvPSAyKSB7CisJCXZkZXYtPmZibWVtID0gaW9yZW1hcF93Yyh2ZGV2LT5mYm1lbV9zdGFydCwgdmRldi0+ZmJtZW1fbGVuKTsKKwkJaWYgKHZkZXYtPmZibWVtKQorCQkJYnJlYWs7CisJfQorCiAJaWYgKHZkZXYtPmZibWVtID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXRfdW5tYXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfY2xvY2suYyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYV9jbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmOGYyNmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfY2xvY2suYwpAQCAtMCwwICsxLDM0OSBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMTEgRmxvcmlhbiBUb2JpYXMgU2NoYW5kaW5hdCA8RmxvcmlhblNjaGFuZGluYXRAZ214LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlM7IHdpdGhvdXQgZXZlbgorICogdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5TZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKy8qCisgKiBjbG9jayBhbmQgUExMIG1hbmFnZW1lbnQgZnVuY3Rpb25zCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpYS1jb3JlLmg+CisjaW5jbHVkZSAidmlhX2Nsb2NrLmgiCisjaW5jbHVkZSAiZ2xvYmFsLmgiCisjaW5jbHVkZSAiZGVidWcuaCIKKworY29uc3QgY2hhciAqdmlhX3NsYXAgPSAiUGxlYXNlIHNsYXAgVklBIFRlY2hub2xvZ2llcyB0byBtb3RpdmF0ZSB0aGVtICIKKwkicmVsZWFzaW5nIGZ1bGwgZG9jdW1lbnRhdGlvbiBmb3IgeW91ciBwbGF0Zm9ybSFcbiI7CisKK3N0YXRpYyBpbmxpbmUgdTMyIGNsZTI2Nl9lbmNvZGVfcGxsKHN0cnVjdCB2aWFfcGxsX2NvbmZpZyBwbGwpCit7CisJcmV0dXJuIChwbGwubXVsdGlwbGllciA8PCA4KQorCQl8IChwbGwucnNoaWZ0IDw8IDYpCisJCXwgcGxsLmRpdmlzb3I7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGs4MDBfZW5jb2RlX3BsbChzdHJ1Y3QgdmlhX3BsbF9jb25maWcgcGxsKQoreworCXJldHVybiAoKHBsbC5kaXZpc29yIC0gMikgPDwgMTYpCisJCXwgKHBsbC5yc2hpZnQgPDwgMTApCisJCXwgKHBsbC5tdWx0aXBsaWVyIC0gMik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHZ4ODU1X2VuY29kZV9wbGwoc3RydWN0IHZpYV9wbGxfY29uZmlnIHBsbCkKK3sKKwlyZXR1cm4gKHBsbC5kaXZpc29yIDw8IDE2KQorCQl8IChwbGwucnNoaWZ0IDw8IDEwKQorCQl8IHBsbC5tdWx0aXBsaWVyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlMjY2X3NldF9wcmltYXJ5X3BsbF9lbmNvZGVkKHUzMiBkYXRhKQoreworCXZpYV93cml0ZV9yZWdfbWFzayhWSUFTUiwgMHg0MCwgMHgwMiwgMHgwMik7IC8qIGVuYWJsZSByZXNldCAqLworCXZpYV93cml0ZV9yZWcoVklBU1IsIDB4NDYsIGRhdGEgJiAweEZGKTsKKwl2aWFfd3JpdGVfcmVnKFZJQVNSLCAweDQ3LCAoZGF0YSA+PiA4KSAmIDB4RkYpOworCXZpYV93cml0ZV9yZWdfbWFzayhWSUFTUiwgMHg0MCwgMHgwMCwgMHgwMik7IC8qIGRpc2FibGUgcmVzZXQgKi8KK30KKworc3RhdGljIGlubGluZSB2b2lkIGs4MDBfc2V0X3ByaW1hcnlfcGxsX2VuY29kZWQodTMyIGRhdGEpCit7CisJdmlhX3dyaXRlX3JlZ19tYXNrKFZJQVNSLCAweDQwLCAweDAyLCAweDAyKTsgLyogZW5hYmxlIHJlc2V0ICovCisJdmlhX3dyaXRlX3JlZyhWSUFTUiwgMHg0NCwgZGF0YSAmIDB4RkYpOworCXZpYV93cml0ZV9yZWcoVklBU1IsIDB4NDUsIChkYXRhID4+IDgpICYgMHhGRik7CisJdmlhX3dyaXRlX3JlZyhWSUFTUiwgMHg0NiwgKGRhdGEgPj4gMTYpICYgMHhGRik7CisJdmlhX3dyaXRlX3JlZ19tYXNrKFZJQVNSLCAweDQwLCAweDAwLCAweDAyKTsgLyogZGlzYWJsZSByZXNldCAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlMjY2X3NldF9zZWNvbmRhcnlfcGxsX2VuY29kZWQodTMyIGRhdGEpCit7CisJdmlhX3dyaXRlX3JlZ19tYXNrKFZJQVNSLCAweDQwLCAweDA0LCAweDA0KTsgLyogZW5hYmxlIHJlc2V0ICovCisJdmlhX3dyaXRlX3JlZyhWSUFTUiwgMHg0NCwgZGF0YSAmIDB4RkYpOworCXZpYV93cml0ZV9yZWcoVklBU1IsIDB4NDUsIChkYXRhID4+IDgpICYgMHhGRik7CisJdmlhX3dyaXRlX3JlZ19tYXNrKFZJQVNSLCAweDQwLCAweDAwLCAweDA0KTsgLyogZGlzYWJsZSByZXNldCAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgazgwMF9zZXRfc2Vjb25kYXJ5X3BsbF9lbmNvZGVkKHUzMiBkYXRhKQoreworCXZpYV93cml0ZV9yZWdfbWFzayhWSUFTUiwgMHg0MCwgMHgwNCwgMHgwNCk7IC8qIGVuYWJsZSByZXNldCAqLworCXZpYV93cml0ZV9yZWcoVklBU1IsIDB4NEEsIGRhdGEgJiAweEZGKTsKKwl2aWFfd3JpdGVfcmVnKFZJQVNSLCAweDRCLCAoZGF0YSA+PiA4KSAmIDB4RkYpOworCXZpYV93cml0ZV9yZWcoVklBU1IsIDB4NEMsIChkYXRhID4+IDE2KSAmIDB4RkYpOworCXZpYV93cml0ZV9yZWdfbWFzayhWSUFTUiwgMHg0MCwgMHgwMCwgMHgwNCk7IC8qIGRpc2FibGUgcmVzZXQgKi8KK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9lbmdpbmVfcGxsX2VuY29kZWQodTMyIGRhdGEpCit7CisJdmlhX3dyaXRlX3JlZ19tYXNrKFZJQVNSLCAweDQwLCAweDAxLCAweDAxKTsgLyogZW5hYmxlIHJlc2V0ICovCisJdmlhX3dyaXRlX3JlZyhWSUFTUiwgMHg0NywgZGF0YSAmIDB4RkYpOworCXZpYV93cml0ZV9yZWcoVklBU1IsIDB4NDgsIChkYXRhID4+IDgpICYgMHhGRik7CisJdmlhX3dyaXRlX3JlZyhWSUFTUiwgMHg0OSwgKGRhdGEgPj4gMTYpICYgMHhGRik7CisJdmlhX3dyaXRlX3JlZ19tYXNrKFZJQVNSLCAweDQwLCAweDAwLCAweDAxKTsgLyogZGlzYWJsZSByZXNldCAqLworfQorCitzdGF0aWMgdm9pZCBjbGUyNjZfc2V0X3ByaW1hcnlfcGxsKHN0cnVjdCB2aWFfcGxsX2NvbmZpZyBjb25maWcpCit7CisJY2xlMjY2X3NldF9wcmltYXJ5X3BsbF9lbmNvZGVkKGNsZTI2Nl9lbmNvZGVfcGxsKGNvbmZpZykpOworfQorCitzdGF0aWMgdm9pZCBrODAwX3NldF9wcmltYXJ5X3BsbChzdHJ1Y3QgdmlhX3BsbF9jb25maWcgY29uZmlnKQoreworCWs4MDBfc2V0X3ByaW1hcnlfcGxsX2VuY29kZWQoazgwMF9lbmNvZGVfcGxsKGNvbmZpZykpOworfQorCitzdGF0aWMgdm9pZCB2eDg1NV9zZXRfcHJpbWFyeV9wbGwoc3RydWN0IHZpYV9wbGxfY29uZmlnIGNvbmZpZykKK3sKKwlrODAwX3NldF9wcmltYXJ5X3BsbF9lbmNvZGVkKHZ4ODU1X2VuY29kZV9wbGwoY29uZmlnKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZTI2Nl9zZXRfc2Vjb25kYXJ5X3BsbChzdHJ1Y3QgdmlhX3BsbF9jb25maWcgY29uZmlnKQoreworCWNsZTI2Nl9zZXRfc2Vjb25kYXJ5X3BsbF9lbmNvZGVkKGNsZTI2Nl9lbmNvZGVfcGxsKGNvbmZpZykpOworfQorCitzdGF0aWMgdm9pZCBrODAwX3NldF9zZWNvbmRhcnlfcGxsKHN0cnVjdCB2aWFfcGxsX2NvbmZpZyBjb25maWcpCit7CisJazgwMF9zZXRfc2Vjb25kYXJ5X3BsbF9lbmNvZGVkKGs4MDBfZW5jb2RlX3BsbChjb25maWcpKTsKK30KKworc3RhdGljIHZvaWQgdng4NTVfc2V0X3NlY29uZGFyeV9wbGwoc3RydWN0IHZpYV9wbGxfY29uZmlnIGNvbmZpZykKK3sKKwlrODAwX3NldF9zZWNvbmRhcnlfcGxsX2VuY29kZWQodng4NTVfZW5jb2RlX3BsbChjb25maWcpKTsKK30KKworc3RhdGljIHZvaWQgazgwMF9zZXRfZW5naW5lX3BsbChzdHJ1Y3QgdmlhX3BsbF9jb25maWcgY29uZmlnKQoreworCXNldF9lbmdpbmVfcGxsX2VuY29kZWQoazgwMF9lbmNvZGVfcGxsKGNvbmZpZykpOworfQorCitzdGF0aWMgdm9pZCB2eDg1NV9zZXRfZW5naW5lX3BsbChzdHJ1Y3QgdmlhX3BsbF9jb25maWcgY29uZmlnKQoreworCXNldF9lbmdpbmVfcGxsX2VuY29kZWQodng4NTVfZW5jb2RlX3BsbChjb25maWcpKTsKK30KKworc3RhdGljIHZvaWQgc2V0X3ByaW1hcnlfcGxsX3N0YXRlKHU4IHN0YXRlKQoreworCXU4IHZhbHVlOworCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgVklBX1NUQVRFX09OOgorCQl2YWx1ZSA9IDB4MjA7CisJCWJyZWFrOworCWNhc2UgVklBX1NUQVRFX09GRjoKKwkJdmFsdWUgPSAweDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJdmlhX3dyaXRlX3JlZ19tYXNrKFZJQVNSLCAweDJELCB2YWx1ZSwgMHgzMCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9zZWNvbmRhcnlfcGxsX3N0YXRlKHU4IHN0YXRlKQoreworCXU4IHZhbHVlOworCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgVklBX1NUQVRFX09OOgorCQl2YWx1ZSA9IDB4MDg7CisJCWJyZWFrOworCWNhc2UgVklBX1NUQVRFX09GRjoKKwkJdmFsdWUgPSAweDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJdmlhX3dyaXRlX3JlZ19tYXNrKFZJQVNSLCAweDJELCB2YWx1ZSwgMHgwQyk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9lbmdpbmVfcGxsX3N0YXRlKHU4IHN0YXRlKQoreworCXU4IHZhbHVlOworCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgVklBX1NUQVRFX09OOgorCQl2YWx1ZSA9IDB4MDI7CisJCWJyZWFrOworCWNhc2UgVklBX1NUQVRFX09GRjoKKwkJdmFsdWUgPSAweDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJdmlhX3dyaXRlX3JlZ19tYXNrKFZJQVNSLCAweDJELCB2YWx1ZSwgMHgwMyk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9wcmltYXJ5X2Nsb2NrX3N0YXRlKHU4IHN0YXRlKQoreworCXU4IHZhbHVlOworCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgVklBX1NUQVRFX09OOgorCQl2YWx1ZSA9IDB4MjA7CisJCWJyZWFrOworCWNhc2UgVklBX1NUQVRFX09GRjoKKwkJdmFsdWUgPSAweDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJdmlhX3dyaXRlX3JlZ19tYXNrKFZJQVNSLCAweDFCLCB2YWx1ZSwgMHgzMCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9zZWNvbmRhcnlfY2xvY2tfc3RhdGUodTggc3RhdGUpCit7CisJdTggdmFsdWU7CisKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBWSUFfU1RBVEVfT046CisJCXZhbHVlID0gMHg4MDsKKwkJYnJlYWs7CisJY2FzZSBWSUFfU1RBVEVfT0ZGOgorCQl2YWx1ZSA9IDB4MDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisKKwl2aWFfd3JpdGVfcmVnX21hc2soVklBU1IsIDB4MUIsIHZhbHVlLCAweEMwKTsKK30KKworc3RhdGljIGlubGluZSB1OCBzZXRfY2xvY2tfc291cmNlX2NvbW1vbihlbnVtIHZpYV9jbGtzcmMgc291cmNlLCBib29sIHVzZV9wbGwpCit7CisJdTggZGF0YSA9IDA7CisKKwlzd2l0Y2ggKHNvdXJjZSkgeworCWNhc2UgVklBX0NMS1NSQ19YMToKKwkJZGF0YSA9IDB4MDA7CisJCWJyZWFrOworCWNhc2UgVklBX0NMS1NSQ19UVlgxOgorCQlkYXRhID0gMHgwMjsKKwkJYnJlYWs7CisJY2FzZSBWSUFfQ0xLU1JDX1RWUExMOgorCQlkYXRhID0gMHgwNDsgLyogMHgwNiBzaG91bGQgYmUgdGhlIHNhbWUgKi8KKwkJYnJlYWs7CisJY2FzZSBWSUFfQ0xLU1JDX0RWUDFUVkNMS1I6CisJCWRhdGEgPSAweDBBOworCQlicmVhazsKKwljYXNlIFZJQV9DTEtTUkNfQ0FQMDoKKwkJZGF0YSA9IDB4QzsKKwkJYnJlYWs7CisJY2FzZSBWSUFfQ0xLU1JDX0NBUDE6CisJCWRhdGEgPSAweDBFOworCQlicmVhazsKKwl9CisKKwlpZiAoIXVzZV9wbGwpCisJCWRhdGEgfD0gMTsKKworCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgdm9pZCBzZXRfcHJpbWFyeV9jbG9ja19zb3VyY2UoZW51bSB2aWFfY2xrc3JjIHNvdXJjZSwgYm9vbCB1c2VfcGxsKQoreworCXU4IGRhdGEgPSBzZXRfY2xvY2tfc291cmNlX2NvbW1vbihzb3VyY2UsIHVzZV9wbGwpIDw8IDQ7CisJdmlhX3dyaXRlX3JlZ19tYXNrKFZJQUNSLCAweDZDLCBkYXRhLCAweEYwKTsKK30KKworc3RhdGljIHZvaWQgc2V0X3NlY29uZGFyeV9jbG9ja19zb3VyY2UoZW51bSB2aWFfY2xrc3JjIHNvdXJjZSwgYm9vbCB1c2VfcGxsKQoreworCXU4IGRhdGEgPSBzZXRfY2xvY2tfc291cmNlX2NvbW1vbihzb3VyY2UsIHVzZV9wbGwpOworCXZpYV93cml0ZV9yZWdfbWFzayhWSUFDUiwgMHg2QywgZGF0YSwgMHgwRik7Cit9CisKK3N0YXRpYyB2b2lkIGR1bW15X3NldF9jbG9ja19zdGF0ZSh1OCBzdGF0ZSkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJVc2luZyB1bmRvY3VtZW50ZWQgc2V0IGNsb2NrIHN0YXRlLlxuJXMiLCB2aWFfc2xhcCk7Cit9CisKK3N0YXRpYyB2b2lkIGR1bW15X3NldF9jbG9ja19zb3VyY2UoZW51bSB2aWFfY2xrc3JjIHNvdXJjZSwgYm9vbCB1c2VfcGxsKQoreworCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIHVuZG9jdW1lbnRlZCBzZXQgY2xvY2sgc291cmNlLlxuJXMiLCB2aWFfc2xhcCk7Cit9CisKK3N0YXRpYyB2b2lkIGR1bW15X3NldF9wbGxfc3RhdGUodTggc3RhdGUpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgdW5kb2N1bWVudGVkIHNldCBQTEwgc3RhdGUuXG4lcyIsIHZpYV9zbGFwKTsKK30KKworc3RhdGljIHZvaWQgZHVtbXlfc2V0X3BsbChzdHJ1Y3QgdmlhX3BsbF9jb25maWcgY29uZmlnKQoreworCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIHVuZG9jdW1lbnRlZCBzZXQgUExMLlxuJXMiLCB2aWFfc2xhcCk7Cit9CisKK3ZvaWQgdmlhX2Nsb2NrX2luaXQoc3RydWN0IHZpYV9jbG9jayAqY2xvY2ssIGludCBnZnhfY2hpcCkKK3sKKwlzd2l0Y2ggKGdmeF9jaGlwKSB7CisJY2FzZSBVTklDSFJPTUVfQ0xFMjY2OgorCWNhc2UgVU5JQ0hST01FX0s0MDA6CisJCWNsb2NrLT5zZXRfcHJpbWFyeV9jbG9ja19zdGF0ZSA9IGR1bW15X3NldF9jbG9ja19zdGF0ZTsKKwkJY2xvY2stPnNldF9wcmltYXJ5X2Nsb2NrX3NvdXJjZSA9IGR1bW15X3NldF9jbG9ja19zb3VyY2U7CisJCWNsb2NrLT5zZXRfcHJpbWFyeV9wbGxfc3RhdGUgPSBkdW1teV9zZXRfcGxsX3N0YXRlOworCQljbG9jay0+c2V0X3ByaW1hcnlfcGxsID0gY2xlMjY2X3NldF9wcmltYXJ5X3BsbDsKKworCQljbG9jay0+c2V0X3NlY29uZGFyeV9jbG9ja19zdGF0ZSA9IGR1bW15X3NldF9jbG9ja19zdGF0ZTsKKwkJY2xvY2stPnNldF9zZWNvbmRhcnlfY2xvY2tfc291cmNlID0gZHVtbXlfc2V0X2Nsb2NrX3NvdXJjZTsKKwkJY2xvY2stPnNldF9zZWNvbmRhcnlfcGxsX3N0YXRlID0gZHVtbXlfc2V0X3BsbF9zdGF0ZTsKKwkJY2xvY2stPnNldF9zZWNvbmRhcnlfcGxsID0gY2xlMjY2X3NldF9zZWNvbmRhcnlfcGxsOworCisJCWNsb2NrLT5zZXRfZW5naW5lX3BsbF9zdGF0ZSA9IGR1bW15X3NldF9wbGxfc3RhdGU7CisJCWNsb2NrLT5zZXRfZW5naW5lX3BsbCA9IGR1bW15X3NldF9wbGw7CisJCWJyZWFrOworCWNhc2UgVU5JQ0hST01FX0s4MDA6CisJY2FzZSBVTklDSFJPTUVfUE04MDA6CisJY2FzZSBVTklDSFJPTUVfQ043MDA6CisJY2FzZSBVTklDSFJPTUVfQ1g3MDA6CisJY2FzZSBVTklDSFJPTUVfQ043NTA6CisJY2FzZSBVTklDSFJPTUVfSzhNODkwOgorCWNhc2UgVU5JQ0hST01FX1A0TTg5MDoKKwljYXNlIFVOSUNIUk9NRV9QNE05MDA6CisJY2FzZSBVTklDSFJPTUVfVlg4MDA6CisJCWNsb2NrLT5zZXRfcHJpbWFyeV9jbG9ja19zdGF0ZSA9IHNldF9wcmltYXJ5X2Nsb2NrX3N0YXRlOworCQljbG9jay0+c2V0X3ByaW1hcnlfY2xvY2tfc291cmNlID0gc2V0X3ByaW1hcnlfY2xvY2tfc291cmNlOworCQljbG9jay0+c2V0X3ByaW1hcnlfcGxsX3N0YXRlID0gc2V0X3ByaW1hcnlfcGxsX3N0YXRlOworCQljbG9jay0+c2V0X3ByaW1hcnlfcGxsID0gazgwMF9zZXRfcHJpbWFyeV9wbGw7CisKKwkJY2xvY2stPnNldF9zZWNvbmRhcnlfY2xvY2tfc3RhdGUgPSBzZXRfc2Vjb25kYXJ5X2Nsb2NrX3N0YXRlOworCQljbG9jay0+c2V0X3NlY29uZGFyeV9jbG9ja19zb3VyY2UgPSBzZXRfc2Vjb25kYXJ5X2Nsb2NrX3NvdXJjZTsKKwkJY2xvY2stPnNldF9zZWNvbmRhcnlfcGxsX3N0YXRlID0gc2V0X3NlY29uZGFyeV9wbGxfc3RhdGU7CisJCWNsb2NrLT5zZXRfc2Vjb25kYXJ5X3BsbCA9IGs4MDBfc2V0X3NlY29uZGFyeV9wbGw7CisKKwkJY2xvY2stPnNldF9lbmdpbmVfcGxsX3N0YXRlID0gc2V0X2VuZ2luZV9wbGxfc3RhdGU7CisJCWNsb2NrLT5zZXRfZW5naW5lX3BsbCA9IGs4MDBfc2V0X2VuZ2luZV9wbGw7CisJCWJyZWFrOworCWNhc2UgVU5JQ0hST01FX1ZYODU1OgorCWNhc2UgVU5JQ0hST01FX1ZYOTAwOgorCQljbG9jay0+c2V0X3ByaW1hcnlfY2xvY2tfc3RhdGUgPSBzZXRfcHJpbWFyeV9jbG9ja19zdGF0ZTsKKwkJY2xvY2stPnNldF9wcmltYXJ5X2Nsb2NrX3NvdXJjZSA9IHNldF9wcmltYXJ5X2Nsb2NrX3NvdXJjZTsKKwkJY2xvY2stPnNldF9wcmltYXJ5X3BsbF9zdGF0ZSA9IHNldF9wcmltYXJ5X3BsbF9zdGF0ZTsKKwkJY2xvY2stPnNldF9wcmltYXJ5X3BsbCA9IHZ4ODU1X3NldF9wcmltYXJ5X3BsbDsKKworCQljbG9jay0+c2V0X3NlY29uZGFyeV9jbG9ja19zdGF0ZSA9IHNldF9zZWNvbmRhcnlfY2xvY2tfc3RhdGU7CisJCWNsb2NrLT5zZXRfc2Vjb25kYXJ5X2Nsb2NrX3NvdXJjZSA9IHNldF9zZWNvbmRhcnlfY2xvY2tfc291cmNlOworCQljbG9jay0+c2V0X3NlY29uZGFyeV9wbGxfc3RhdGUgPSBzZXRfc2Vjb25kYXJ5X3BsbF9zdGF0ZTsKKwkJY2xvY2stPnNldF9zZWNvbmRhcnlfcGxsID0gdng4NTVfc2V0X3NlY29uZGFyeV9wbGw7CisKKwkJY2xvY2stPnNldF9lbmdpbmVfcGxsX3N0YXRlID0gc2V0X2VuZ2luZV9wbGxfc3RhdGU7CisJCWNsb2NrLT5zZXRfZW5naW5lX3BsbCA9IHZ4ODU1X3NldF9lbmdpbmVfcGxsOworCQlicmVhazsKKworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYV9jbG9jay5oIGIvZHJpdmVycy92aWRlby92aWEvdmlhX2Nsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg3MTRhZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYV9jbG9jay5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMTk5OC0yMDA4IFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDAxLTIwMDggUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDExIEZsb3JpYW4gVG9iaWFzIFNjaGFuZGluYXQgPEZsb3JpYW5TY2hhbmRpbmF0QGdteC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KKyAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisvKgorICogY2xvY2sgYW5kIFBMTCBtYW5hZ2VtZW50IGZ1bmN0aW9ucworICovCisKKyNpZm5kZWYgX19WSUFfQ0xPQ0tfSF9fCisjZGVmaW5lIF9fVklBX0NMT0NLX0hfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworZW51bSB2aWFfY2xrc3JjIHsKKwlWSUFfQ0xLU1JDX1gxID0gMCwKKwlWSUFfQ0xLU1JDX1RWWDEsCisJVklBX0NMS1NSQ19UVlBMTCwKKwlWSUFfQ0xLU1JDX0RWUDFUVkNMS1IsCisJVklBX0NMS1NSQ19DQVAwLAorCVZJQV9DTEtTUkNfQ0FQMSwKK307CisKK3N0cnVjdCB2aWFfcGxsX2NvbmZpZyB7CisJdTE2IG11bHRpcGxpZXI7CisJdTggZGl2aXNvcjsKKwl1OCByc2hpZnQ7Cit9OworCitzdHJ1Y3QgdmlhX2Nsb2NrIHsKKwl2b2lkICgqc2V0X3ByaW1hcnlfY2xvY2tfc3RhdGUpKHU4IHN0YXRlKTsKKwl2b2lkICgqc2V0X3ByaW1hcnlfY2xvY2tfc291cmNlKShlbnVtIHZpYV9jbGtzcmMgc3JjLCBib29sIHVzZV9wbGwpOworCXZvaWQgKCpzZXRfcHJpbWFyeV9wbGxfc3RhdGUpKHU4IHN0YXRlKTsKKwl2b2lkICgqc2V0X3ByaW1hcnlfcGxsKShzdHJ1Y3QgdmlhX3BsbF9jb25maWcgY29uZmlnKTsKKworCXZvaWQgKCpzZXRfc2Vjb25kYXJ5X2Nsb2NrX3N0YXRlKSh1OCBzdGF0ZSk7CisJdm9pZCAoKnNldF9zZWNvbmRhcnlfY2xvY2tfc291cmNlKShlbnVtIHZpYV9jbGtzcmMgc3JjLCBib29sIHVzZV9wbGwpOworCXZvaWQgKCpzZXRfc2Vjb25kYXJ5X3BsbF9zdGF0ZSkodTggc3RhdGUpOworCXZvaWQgKCpzZXRfc2Vjb25kYXJ5X3BsbCkoc3RydWN0IHZpYV9wbGxfY29uZmlnIGNvbmZpZyk7CisKKwl2b2lkICgqc2V0X2VuZ2luZV9wbGxfc3RhdGUpKHU4IHN0YXRlKTsKKwl2b2lkICgqc2V0X2VuZ2luZV9wbGwpKHN0cnVjdCB2aWFfcGxsX2NvbmZpZyBjb25maWcpOworfTsKKworCitzdGF0aWMgaW5saW5lIHUzMiBnZXRfcGxsX2ludGVybmFsX2ZyZXF1ZW5jeSh1MzIgcmVmX2ZyZXEsCisJc3RydWN0IHZpYV9wbGxfY29uZmlnIHBsbCkKK3sKKwlyZXR1cm4gcmVmX2ZyZXEgLyBwbGwuZGl2aXNvciAqIHBsbC5tdWx0aXBsaWVyOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBnZXRfcGxsX291dHB1dF9mcmVxdWVuY3kodTMyIHJlZl9mcmVxLAorCXN0cnVjdCB2aWFfcGxsX2NvbmZpZyBwbGwpCit7CisJcmV0dXJuIGdldF9wbGxfaW50ZXJuYWxfZnJlcXVlbmN5KHJlZl9mcmVxLCBwbGwpID4+IHBsbC5yc2hpZnQ7Cit9CisKK3ZvaWQgdmlhX2Nsb2NrX2luaXQoc3RydWN0IHZpYV9jbG9jayAqY2xvY2ssIGludCBnZnhfY2hpcCk7CisKKyNlbmRpZiAvKiBfX1ZJQV9DTE9DS19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jCmluZGV4IGE1NDJiZWQuLmNmNDNjODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmMKKysrIGIvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlhLWNvcmUuaD4KKyNpbmNsdWRlIDxhc20vb2xwYy5oPgogCiAjZGVmaW5lIF9NQVNURVJfRklMRQogI2luY2x1ZGUgImdsb2JhbC5oIgpAQCAtMzcsNiArMzgsOCBAQAogc3RhdGljIGludCB2aWFmYl9icHAgPSAzMjsKIHN0YXRpYyBpbnQgdmlhZmJfYnBwMSA9IDMyOwogCitzdGF0aWMgdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF94cmVzID0gNjQwOworc3RhdGljIHVuc2lnbmVkIGludCB2aWFmYl9zZWNvbmRfeXJlcyA9IDQ4MDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX29mZnNldDsKIHN0YXRpYyBpbnQgdmlhZmJfc2Vjb25kX3NpemU7CiAKQEAgLTQ0MCw4ICs0NDMsOCBAQAogCQlpZiAodmlhZmJfU0FNTV9PTiA9PSAxKSB7CiAJCQl1LnZpYW1vZGUueHJlc19zZWMgPSB2aWFmYl9zZWNvbmRfeHJlczsKIAkJCXUudmlhbW9kZS55cmVzX3NlYyA9IHZpYWZiX3NlY29uZF95cmVzOwotCQkJdS52aWFtb2RlLnZpcnR1YWxfeHJlc19zZWMgPSB2aWFmYl9zZWNvbmRfdmlydHVhbF94cmVzOwotCQkJdS52aWFtb2RlLnZpcnR1YWxfeXJlc19zZWMgPSB2aWFmYl9zZWNvbmRfdmlydHVhbF95cmVzOworCQkJdS52aWFtb2RlLnZpcnR1YWxfeHJlc19zZWMgPSB2aWFmYl9kdWFsX2ZiID8gdmlhZmJpbmZvMS0+dmFyLnhyZXNfdmlydHVhbCA6IHZpYWZiaW5mby0+dmFyLnhyZXNfdmlydHVhbDsKKwkJCXUudmlhbW9kZS52aXJ0dWFsX3lyZXNfc2VjID0gdmlhZmJfZHVhbF9mYiA/IHZpYWZiaW5mbzEtPnZhci55cmVzX3ZpcnR1YWwgOiB2aWFmYmluZm8tPnZhci55cmVzX3ZpcnR1YWw7CiAJCQl1LnZpYW1vZGUucmVmcmVzaF9zZWMgPSB2aWFmYl9yZWZyZXNoMTsKIAkJCXUudmlhbW9kZS5icHBfc2VjID0gdmlhZmJfYnBwMTsKIAkJfSBlbHNlIHsKQEAgLTkzMCwxMCArOTMzLDggQEAKIAkvKiBSdWxlOiBkZXZpY2Ugb24gaWdhMSBwYXRoIGFyZSB0aGUgcHJpbWFyeSBkZXZpY2UuICovCiAJaWYgKHZpYWZiX1NBTU1fT04pIHsKIAkJaWYgKHZpYWZiX0NSVF9PTikgewotCQkJaWYgKHZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPmlnYV9wYXRoID09IElHQTEpIHsKLQkJCQlERUJVR19NU0coS0VSTl9JTkZPICJDUlQgSUdBIFBhdGg6JWRcbiIsCi0JCQkJCXZpYXBhcmluZm8tPgotCQkJCQljcnRfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCk7CisJCQlpZiAodmlhcGFyaW5mby0+c2hhcmVkLT5pZ2ExX2RldmljZXMgJiBWSUFfQ1JUKSB7CisJCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiQ1JUIElHQSBQYXRoOiVkXG4iLCBJR0ExKTsKIAkJCQlwcmltYXJ5X2RldmljZSA9IENSVF9EZXZpY2U7CiAJCQl9CiAJCX0KQEAgLTEwMTEsOCArMTAxMiwxMyBAQAogCS8qICAgIE5vdGU6IFRoZSBwcmV2aW91cyBvZiBhY3RpdmVfZGV2IGlzIHByaW1hcnkgZGV2aWNlLAogCSAgIGFuZCB0aGUgZm9sbG93aW5nIGlzIHNlY29uZGFyeSBkZXZpY2UuICovCiAJaWYgKCF2aWFmYl9hY3RpdmVfZGV2KSB7Ci0JCXZpYWZiX0NSVF9PTiA9IFNUQVRFX09OOwotCQl2aWFmYl9TQU1NX09OID0gU1RBVEVfT0ZGOworCQlpZiAobWFjaGluZV9pc19vbHBjKCkpIHsgLyogTENEIG9ubHkgKi8KKwkJCXZpYWZiX0xDRF9PTiA9IFNUQVRFX09OOworCQkJdmlhZmJfU0FNTV9PTiA9IFNUQVRFX09GRjsKKwkJfSBlbHNlIHsKKwkJCXZpYWZiX0NSVF9PTiA9IFNUQVRFX09OOworCQkJdmlhZmJfU0FNTV9PTiA9IFNUQVRFX09GRjsKKwkJfQogCX0gZWxzZSBpZiAoIXN0cmNtcCh2aWFmYl9hY3RpdmVfZGV2LCAiQ1JUK0RWSSIpKSB7CiAJCS8qIENSVCtEVkkgKi8KIAkJdmlhZmJfQ1JUX09OID0gU1RBVEVfT047CkBAIC0xNjY1LDggKzE2NzEsMTMgQEAKIAljaGFyICpwdHI7CiAKIAlpZiAoIXN0cikgewotCQkqeHJlcyA9IDY0MDsKLQkJKnlyZXMgPSA0ODA7CisJCWlmIChtYWNoaW5lX2lzX29scGMoKSkgeworCQkJKnhyZXMgPSAxMjAwOworCQkJKnlyZXMgPSA5MDA7CisJCX0gZWxzZSB7CisJCQkqeHJlcyA9IDY0MDsKKwkJCSp5cmVzID0gNDgwOworCQl9CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTc0Niw3ICsxNzU3LDYgQEAKIAl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbyA9ICZ2aWFwYXJpbmZvLT5zaGFyZWQtPmx2ZHNfc2V0dGluZ19pbmZvOwogCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMiA9CiAJCSZ2aWFwYXJpbmZvLT5zaGFyZWQtPmx2ZHNfc2V0dGluZ19pbmZvMjsKLQl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvID0gJnZpYXBhcmluZm8tPnNoYXJlZC0+Y3J0X3NldHRpbmdfaW5mbzsKIAl2aWFwYXJpbmZvLT5jaGlwX2luZm8gPSAmdmlhcGFyaW5mby0+c2hhcmVkLT5jaGlwX2luZm87CiAKIAlpZiAodmlhZmJfZHVhbF9mYikKQEAgLTE3OTMsMTQgKzE4MDMsMTAgQEAKIAogCXBhcnNlX21vZGUodmlhZmJfbW9kZSwgJmRlZmF1bHRfeHJlcywgJmRlZmF1bHRfeXJlcyk7CiAJdm1vZGVfZW50cnkgPSB2aWFmYl9nZXRfbW9kZShkZWZhdWx0X3hyZXMsIGRlZmF1bHRfeXJlcyk7Ci0JaWYgKHZpYWZiX1NBTU1fT04gPT0gMSkgeworCWlmICh2aWFmYl9TQU1NX09OID09IDEpCiAJCXBhcnNlX21vZGUodmlhZmJfbW9kZTEsICZ2aWFmYl9zZWNvbmRfeHJlcywKIAkJCSZ2aWFmYl9zZWNvbmRfeXJlcyk7CiAKLQkJdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeHJlcyA9IHZpYWZiX3NlY29uZF94cmVzOwotCQl2aWFmYl9zZWNvbmRfdmlydHVhbF95cmVzID0gdmlhZmJfc2Vjb25kX3lyZXM7Ci0JfQotCiAJZGVmYXVsdF92YXIueHJlcyA9IGRlZmF1bHRfeHJlczsKIAlkZWZhdWx0X3Zhci55cmVzID0gZGVmYXVsdF95cmVzOwogCWRlZmF1bHRfdmFyLnhyZXNfdmlydHVhbCA9IGRlZmF1bHRfeHJlczsKQEAgLTE4NDQsOCArMTg1MCw4IEBACiAKIAkJZGVmYXVsdF92YXIueHJlcyA9IHZpYWZiX3NlY29uZF94cmVzOwogCQlkZWZhdWx0X3Zhci55cmVzID0gdmlhZmJfc2Vjb25kX3lyZXM7Ci0JCWRlZmF1bHRfdmFyLnhyZXNfdmlydHVhbCA9IHZpYWZiX3NlY29uZF92aXJ0dWFsX3hyZXM7Ci0JCWRlZmF1bHRfdmFyLnlyZXNfdmlydHVhbCA9IHZpYWZiX3NlY29uZF92aXJ0dWFsX3lyZXM7CisJCWRlZmF1bHRfdmFyLnhyZXNfdmlydHVhbCA9IHZpYWZiX3NlY29uZF94cmVzOworCQlkZWZhdWx0X3Zhci55cmVzX3ZpcnR1YWwgPSB2aWFmYl9zZWNvbmRfeXJlczsKIAkJZGVmYXVsdF92YXIuYml0c19wZXJfcGl4ZWwgPSB2aWFmYl9icHAxOwogCQl2aWFmYl9maWxsX3Zhcl90aW1pbmdfaW5mbygmZGVmYXVsdF92YXIsIHZpYWZiX2dldF9yZWZyZXNoKAogCQkJZGVmYXVsdF92YXIueHJlcywgZGVmYXVsdF92YXIueXJlcywgdmlhZmJfcmVmcmVzaDEpLApAQCAtMTkyNywxMSArMTkzMywxNiBAQAogfQogCiAjaWZuZGVmIE1PRFVMRQotc3RhdGljIGludCBfX2luaXQgdmlhZmJfc2V0dXAoY2hhciAqb3B0aW9ucykKK3N0YXRpYyBpbnQgX19pbml0IHZpYWZiX3NldHVwKHZvaWQpCiB7CiAJY2hhciAqdGhpc19vcHQ7CisJY2hhciAqb3B0aW9uczsKKwogCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX3NldHVwIVxuIik7CiAKKwlpZiAoZmJfZ2V0X29wdGlvbnMoInZpYWZiIiwgJm9wdGlvbnMpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWlmICghb3B0aW9ucyB8fCAhKm9wdGlvbnMpCiAJCXJldHVybiAwOwogCkBAIC0yMDA1LDExICsyMDE2LDE2IEBACiBpbnQgX19pbml0IHZpYWZiX2luaXQodm9pZCkKIHsKIAl1MzIgZHVtbXlfeCwgZHVtbXlfeTsKKwlpbnQgcjsKKworCWlmIChtYWNoaW5lX2lzX29scGMoKSkKKwkJLyogQXBwbHkgWE8tMS41LXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uICovCisJCXZpYWZiX2xjZF9wYW5lbF9pZCA9IDIzOworCiAjaWZuZGVmIE1PRFVMRQotCWNoYXIgKm9wdGlvbiA9IE5VTEw7Ci0JaWYgKGZiX2dldF9vcHRpb25zKCJ2aWFmYiIsICZvcHRpb24pKQotCQlyZXR1cm4gLUVOT0RFVjsKLQl2aWFmYl9zZXR1cChvcHRpb24pOworCXIgPSB2aWFmYl9zZXR1cCgpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CiAjZW5kaWYKIAlpZiAocGFyc2VfbW9kZSh2aWFmYl9tb2RlLCAmZHVtbXlfeCwgJmR1bW15X3kpCiAJCXx8ICF2aWFmYl9nZXRfbW9kZShkdW1teV94LCBkdW1teV95KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmgKaW5kZXggMTM3OTk2ZC4uZDk0NDA2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5oCkBAIC01MCw3ICs1MCw2IEBACiAKIAkvKiBBbGwgdGhlIGluZm9ybWF0aW9uIHdpbGwgYmUgbmVlZGVkIHRvIHNldCBlbmdpbmUgKi8KIAlzdHJ1Y3QgdG1kc19zZXR0aW5nX2luZm9ybWF0aW9uIHRtZHNfc2V0dGluZ19pbmZvOwotCXN0cnVjdCBjcnRfc2V0dGluZ19pbmZvcm1hdGlvbiBjcnRfc2V0dGluZ19pbmZvOwogCXN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24gbHZkc19zZXR0aW5nX2luZm87CiAJc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiBsdmRzX3NldHRpbmdfaW5mbzI7CiAJc3RydWN0IGNoaXBfaW5mb3JtYXRpb24gY2hpcF9pbmZvOwpAQCAtNzksMTQgKzc4LDExIEBACiAJLyogQWxsIHRoZSBpbmZvcm1hdGlvbiB3aWxsIGJlIG5lZWRlZCB0byBzZXQgZW5naW5lICovCiAJLyogZGVwcmVjaWF0ZWQsIHVzZSB0aGUgb25lcyBpbiBzaGFyZWQgZGlyZWN0bHkgKi8KIAlzdHJ1Y3QgdG1kc19zZXR0aW5nX2luZm9ybWF0aW9uICp0bWRzX3NldHRpbmdfaW5mbzsKLQlzdHJ1Y3QgY3J0X3NldHRpbmdfaW5mb3JtYXRpb24gKmNydF9zZXR0aW5nX2luZm87CiAJc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqbHZkc19zZXR0aW5nX2luZm87CiAJc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqbHZkc19zZXR0aW5nX2luZm8yOwogCXN0cnVjdCBjaGlwX2luZm9ybWF0aW9uICpjaGlwX2luZm87CiB9OwogCi1leHRlcm4gdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF92aXJ0dWFsX3lyZXM7Ci1leHRlcm4gdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF92aXJ0dWFsX3hyZXM7CiBleHRlcm4gaW50IHZpYWZiX1NBTU1fT047CiBleHRlcm4gaW50IHZpYWZiX2R1YWxfZmI7CiBleHRlcm4gaW50IHZpYWZiX0xDRDJfT047CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFtb2RlLmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFtb2RlLmMKaW5kZXggOGM1YmM0MS4uNThkZjc0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvdmlhbW9kZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYW1vZGUuYwpAQCAtMzAsMTAgKzMwLDYgQEAKIHtWSUFTUiwgU1IxQSwgMHhGQiwgMHgwOH0sCiB7VklBU1IsIFNSMUUsIDB4MEYsIDB4MDF9LAoge1ZJQVNSLCBTUjJBLCAweEZGLCAweDAwfSwKLXtWSUFDUiwgQ1IwQSwgMHhGRiwgMHgxRX0sCS8qIEN1cnNvciBTdGFydCAgICAgICAgICAgICAgICAgICAgICAgICovCi17VklBQ1IsIENSMEIsIDB4RkYsIDB4MDB9LAkvKiBDdXJzb3IgRW5kICAgICAgICAgICAgICAgICAgICAgICAgICAqLwote1ZJQUNSLCBDUjBFLCAweEZGLCAweDAwfSwJLyogQ3Vyc29yIExvY2F0aW9uIEhpZ2ggICAgICAgICAgICAgICAgKi8KLXtWSUFDUiwgQ1IwRiwgMHhGRiwgMHgwMH0sCS8qIEN1cnNvciBMb2NhbHRpb24gTG93ICAgICAgICAgICAgICAgICovCiB7VklBQ1IsIENSMzIsIDB4RkYsIDB4MDB9LAoge1ZJQUNSLCBDUjMzLCAweEZGLCAweDAwfSwKIHtWSUFDUiwgQ1IzNSwgMHhGRiwgMHgwMH0sCkBAIC00MSw3ICszNyw2IEBACiB7VklBQ1IsIENSNjksIDB4RkYsIDB4MDB9LAoge1ZJQUNSLCBDUjZBLCAweEZGLCAweDQwfSwKIHtWSUFDUiwgQ1I2QiwgMHhGRiwgMHgwMH0sCi17VklBQ1IsIENSNkMsIDB4RkYsIDB4MDB9LAoge1ZJQUNSLCBDUjg4LCAweEZGLCAweDQwfSwJLyogTENEIFBhbmVsIFR5cGUgICAgICAgICAgICAgICAgICAgICAgKi8KIHtWSUFDUiwgQ1I4OSwgMHhGRiwgMHgwMH0sCS8qIExDRCBUaW1pbmcgQ29udHJvbCAwICAgICAgICAgICAgICAgICovCiB7VklBQ1IsIENSOEEsIDB4RkYsIDB4ODh9LAkvKiBMQ0QgVGltaW5nIENvbnRyb2wgMSAgICAgICAgICAgICAgICAqLwpAQCAtODcsNyArODIsNiBAQAoge1ZJQUNSLCBDUjY5LCAweEZGLCAweDAwfSwKIHtWSUFDUiwgQ1I2QSwgMHhGRCwgMHg0MH0sCiB7VklBQ1IsIENSNkIsIDB4RkYsIDB4MDB9LAote1ZJQUNSLCBDUjZDLCAweEZGLCAweDAwfSwKIHtWSUFDUiwgQ1I3NywgMHhGRiwgMHgwMH0sCS8qIExDRCBzY2FsaW5nIEZhY3RvciAqLwoge1ZJQUNSLCBDUjc4LCAweEZGLCAweDAwfSwJLyogTENEIHNjYWxpbmcgRmFjdG9yICovCiB7VklBQ1IsIENSNzksIDB4RkYsIDB4MDB9LAkvKiBMQ0Qgc2NhbGluZyBGYWN0b3IgKi8KQEAgLTEyNSwxMCArMTE5LDYgQEAKIAl7VklBU1IsIFNSMkEsIDB4RkYsIDB4MDB9LAkvKiBQb3dlciBNYW5hZ2VtZW50IENvbnRyb2wgNSAgICAgICovCiAJe1ZJQVNSLCBTUjJELCAweEZGLCAweEZGfSwJLyogUG93ZXIgTWFuYWdlbWVudCBDb250cm9sIDEgICAgICAqLwogCXtWSUFTUiwgU1IyRSwgMHhGRiwgMHhGRn0sCS8qIFBvd2VyIE1hbmFnZW1lbnQgQ29udHJvbCAyICAgICAgKi8KLQl7VklBQ1IsIENSMEEsIDB4RkYsIDB4MUV9LAkvKiBDdXJzb3IgU3RhcnQgICAgICAgICAgICAgICAgICAgICovCi0Je1ZJQUNSLCBDUjBCLCAweEZGLCAweDAwfSwJLyogQ3Vyc29yIEVuZCAgICAgICAgICAgICAgICAgICAgICAqLwotCXtWSUFDUiwgQ1IwRSwgMHhGRiwgMHgwMH0sCS8qIEN1cnNvciBMb2NhdGlvbiBIaWdoICAgICAgICAgICAgKi8KLQl7VklBQ1IsIENSMEYsIDB4RkYsIDB4MDB9LAkvKiBDdXJzb3IgTG9jYWx0aW9uIExvdyAgICAgICAgICAgICovCiAJe1ZJQUNSLCBDUjMzLCAweEZGLCAweDAwfSwKIAl7VklBQ1IsIENSNTUsIDB4ODAsIDB4MDB9LAogCXtWSUFDUiwgQ1I1RCwgMHg4MCwgMHgwMH0sCkBAIC0xNjEsMTEgKzE1MSw3IEBACiB7VklBU1IsIFNSMUIsIDB4RkYsIDB4RjB9LAoge1ZJQVNSLCBTUjFFLCAweEZGLCAweDAxfSwKIHtWSUFTUiwgU1IyQSwgMHhGRiwgMHgwMH0sCi17VklBU1IsIFNSMkQsIDB4RkYsIDB4RkZ9LAkvKiBWQ0sgYW5kIExDSyBQTEwgcG93ZXIgb24uICAgICAgICAgICAqLwote1ZJQUNSLCBDUjBBLCAweEZGLCAweDFFfSwJLyogQ3Vyc29yIFN0YXJ0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KLXtWSUFDUiwgQ1IwQiwgMHhGRiwgMHgwMH0sCS8qIEN1cnNvciBFbmQgICAgICAgICAgICAgICAgICAgICAgICAgICovCi17VklBQ1IsIENSMEUsIDB4RkYsIDB4MDB9LAkvKiBDdXJzb3IgTG9jYXRpb24gSGlnaCAgICAgICAgICAgICAgICAqLwote1ZJQUNSLCBDUjBGLCAweEZGLCAweDAwfSwJLyogQ3Vyc29yIExvY2FsdGlvbiBMb3cgICAgICAgICAgICAgICAgKi8KK3tWSUFTUiwgU1IyRCwgMHhDMCwgMHhDMH0sCS8qIGRlbGF5ZWQgRTNfRUNLICovCiB7VklBQ1IsIENSMzIsIDB4RkYsIDB4MDB9LAoge1ZJQUNSLCBDUjMzLCAweEZGLCAweDAwfSwKIHtWSUFDUiwgQ1IzNSwgMHhGRiwgMHgwMH0sCkBAIC0xNzQsNyArMTYwLDYgQEAKIHtWSUFDUiwgQ1I2OSwgMHhGRiwgMHgwMH0sCiB7VklBQ1IsIENSNkEsIDB4RkYsIDB4NDB9LAoge1ZJQUNSLCBDUjZCLCAweEZGLCAweDAwfSwKLXtWSUFDUiwgQ1I2QywgMHhGRiwgMHgwMH0sCiB7VklBQ1IsIENSODgsIDB4RkYsIDB4NDB9LAkvKiBMQ0QgUGFuZWwgVHlwZSAgICAgICAgICAgICAgICAgICAgICAqLwoge1ZJQUNSLCBDUjg5LCAweEZGLCAweDAwfSwJLyogTENEIFRpbWluZyBDb250cm9sIDAgICAgICAgICAgICAgICAgKi8KIHtWSUFDUiwgQ1I4QSwgMHhGRiwgMHg4OH0sCS8qIExDRCBUaW1pbmcgQ29udHJvbCAxICAgICAgICAgICAgICAgICovCkBAIC0yMDQsMTQgKzE4OSw3IEBACiB7VklBU1IsIFNSMkEsIDB4RjAsIDB4MDB9LAoge1ZJQVNSLCBTUjU4LCAweEZGLCAweDAwfSwKIHtWSUFTUiwgU1I1OSwgMHhGRiwgMHgwMH0sCi17VklBU1IsIFNSMkQsIDB4RkYsIDB4RkZ9LAkvKiBWQ0sgYW5kIExDSyBQTEwgcG93ZXIgb24uICAgICAgICAgICAqLwote1ZJQUNSLCBDUjA5LCAweEZGLCAweDAwfSwJLyogSW5pdGlhbCBDUjA5PTAqLwote1ZJQUNSLCBDUjExLCAweDhGLCAweDAwfSwJLyogSUdBMSBpbml0aWFsICBWZXJ0aWNhbCBlbmQgICAgICAgKi8KLXtWSUFDUiwgQ1IxNywgMHg3RiwgMHgwMH0sIAkvKiBJR0ExIENSVCBNb2RlIGNvbnRyb2wgaW5pdCAgICovCi17VklBQ1IsIENSMEEsIDB4RkYsIDB4MUV9LAkvKiBDdXJzb3IgU3RhcnQgICAgICAgICAgICAgICAgICAgICAgICAqLwote1ZJQUNSLCBDUjBCLCAweEZGLCAweDAwfSwJLyogQ3Vyc29yIEVuZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLXtWSUFDUiwgQ1IwRSwgMHhGRiwgMHgwMH0sCS8qIEN1cnNvciBMb2NhdGlvbiBIaWdoICAgICAgICAgICAgICAgICovCi17VklBQ1IsIENSMEYsIDB4RkYsIDB4MDB9LAkvKiBDdXJzb3IgTG9jYWx0aW9uIExvdyAgICAgICAgICAgICAgICAqLwore1ZJQVNSLCBTUjJELCAweEMwLCAweEMwfSwJLyogZGVsYXllZCBFM19FQ0sgKi8KIHtWSUFDUiwgQ1IzMiwgMHhGRiwgMHgwMH0sCiB7VklBQ1IsIENSMzMsIDB4N0YsIDB4MDB9LAoge1ZJQUNSLCBDUjM1LCAweEZGLCAweDAwfSwKQEAgLTIxOSw3ICsxOTcsNiBAQAoge1ZJQUNSLCBDUjY5LCAweEZGLCAweDAwfSwKIHtWSUFDUiwgQ1I2QSwgMHhGRCwgMHg2MH0sCiB7VklBQ1IsIENSNkIsIDB4RkYsIDB4MDB9LAote1ZJQUNSLCBDUjZDLCAweEZGLCAweDAwfSwKIHtWSUFDUiwgQ1I4OCwgMHhGRiwgMHg0MH0sICAgICAgICAgIC8qIExDRCBQYW5lbCBUeXBlICAgICAgICAgICAgICAgICAgICAgICovCiB7VklBQ1IsIENSODksIDB4RkYsIDB4MDB9LCAgICAgICAgICAvKiBMQ0QgVGltaW5nIENvbnRyb2wgMCAgICAgICAgICAgICAgICAqLwoge1ZJQUNSLCBDUjhBLCAweEZGLCAweDg4fSwgICAgICAgICAgLyogTENEIFRpbWluZyBDb250cm9sIDEgICAgICAgICAgICAgICAgKi8KQEAgLTYwNiw3ICs1ODMsNyBAQAogLyogMTIwMHg5MDAgKERDT04pICovCiBzdGF0aWMgc3RydWN0IGNydF9tb2RlX3RhYmxlIERDT04xMjAweDkwMFtdID0gewogCS8qIHJfcmF0ZSwgICAgICAgICAgICAgICBoc3AsICAgICAgICAgICAgICAgdnNwICAgKi8KLQl7UkVGUkVTSF82MCwgTTEyMDBYOTAwX1I2MF9IU1AsIE0xMjAwWDkwMF9SNjBfVlNQLAorCXtSRUZSRVNIXzQ5LCBNMTIwMFg5MDBfUjYwX0hTUCwgTTEyMDBYOTAwX1I2MF9WU1AsCiAJLyogVGhlIGNvcnJlY3QgaHRvdGFsIGlzIDEyNDAsIGJ1dCB0aGlzIGRvZXNuJ3QgcmFzdGVyIG9uIFZYODU1LiAqLwogCS8qIFZpYSBzdWdnZXN0ZWQgY2hhbmdpbmcgdG8gYSBtdWx0aXBsZSBvZiAxNiwgaGVuY2UgMTI2NC4gICAgICAgKi8KIAkvKiAgSFQsICAgSEEsICBIQlMsIEhCRSwgIEhTUywgSFNFLCAgVlQsICBWQSwgVkJTLCBWQkUsIFZTUywgVlNFICovCkBAIC04NzcsMjMgKzg1NCw2IEBACiAJe0NSVE0xOTIweDEyMDBfUkIsIEFSUkFZX1NJWkUoQ1JUTTE5MjB4MTIwMF9SQil9CiB9OwogCi1zdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ0VBTTEyODB4NzIwW10gPSB7Ci0Je1JFRlJFU0hfNjAsIE0xMjgwWDcyMF9DRUFfUjYwX0hTUCwgTTEyODBYNzIwX0NFQV9SNjBfVlNQLAotCSAvKiBIVCwgICAgSEEsICAgSEJTLCAgSEJFLCAgSFNTLCBIU0UsICBWVCwgICBWQSwgIFZCUywgVkJFLCBWU1MsIFZTRSAqLwotCSB7MTY1MCwgMTI4MCwgMTI4MCwgMzcwLCAxMzkwLCA0MCwgNzUwLCA3MjAsIDcyMCwgMzAsIDcyNSwgNX0gfQotfTsKLXN0cnVjdCBjcnRfbW9kZV90YWJsZSBDRUFNMTkyMHgxMDgwW10gPSB7Ci0Je1JFRlJFU0hfNjAsIE0xOTIwWDEwODBfQ0VBX1I2MF9IU1AsIE0xOTIwWDEwODBfQ0VBX1I2MF9WU1AsCi0JIC8qIEhULCAgICBIQSwgICBIQlMsICBIQkUsICBIU1MsIEhTRSwgIFZULCAgVkEsIFZCUywgVkJFLCAgVlNTLCBWU0UgKi8KLQkgezIyMDAsIDE5MjAsIDE5MjAsIDMwMCwgMjAwOCwgNDQsIDExMjUsIDEwODAsIDEwODAsIDQ1LCAxMDg0LCA1fSB9Ci19Owotc3RydWN0IFZpZGVvTW9kZVRhYmxlIENFQV9IRE1JX01vZGVzW10gPSB7Ci0JLyogRGlzcGxheSA6IDEyODB4NzIwICovCi0Je0NFQU0xMjgweDcyMCwgQVJSQVlfU0laRShDRUFNMTI4MHg3MjApfSwKLQl7Q0VBTTE5MjB4MTA4MCwgQVJSQVlfU0laRShDRUFNMTkyMHgxMDgwKX0KLX07Ci0KLWludCBOVU1fVE9UQUxfQ0VBX01PREVTID0gQVJSQVlfU0laRShDRUFfSERNSV9Nb2Rlcyk7CiBpbnQgTlVNX1RPVEFMX0NONDAwX01vZGVYcmVncyA9IEFSUkFZX1NJWkUoQ040MDBfTW9kZVhyZWdzKTsKIGludCBOVU1fVE9UQUxfQ043MDBfTW9kZVhyZWdzID0gQVJSQVlfU0laRShDTjcwMF9Nb2RlWHJlZ3MpOwogaW50IE5VTV9UT1RBTF9LTTQwMF9Nb2RlWHJlZ3MgPSBBUlJBWV9TSVpFKEtNNDAwX01vZGVYcmVncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFtb2RlLmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFtb2RlLmgKaW5kZXggOGE2N2VhMS4uMzc1MTI4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvdmlhbW9kZS5oCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYW1vZGUuaApAQCAtNDEsNyArNDEsNiBAQAogCXN0cnVjdCBpb19yZWcgKmlvX3JlZ190YWJsZTsKIH07CiAKLWV4dGVybiBpbnQgTlVNX1RPVEFMX0NFQV9NT0RFUzsKIGV4dGVybiBpbnQgTlVNX1RPVEFMX0NONDAwX01vZGVYcmVnczsKIGV4dGVybiBpbnQgTlVNX1RPVEFMX0NONzAwX01vZGVYcmVnczsKIGV4dGVybiBpbnQgTlVNX1RPVEFMX0tNNDAwX01vZGVYcmVnczsKQEAgLTUwLDE0ICs0OSw2IEBACiBleHRlcm4gaW50IE5VTV9UT1RBTF9DTEUyNjZfTW9kZVhyZWdzOwogZXh0ZXJuIGludCBOVU1fVE9UQUxfUEFUQ0hfTU9ERTsKIAotLyoqKioqKioqKioqKioqKioqKioqLwotLyogTW9kZSBUYWJsZSAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqLwotCi1leHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENFQU0xMjgweDcyMFtdOwotZXh0ZXJuIHN0cnVjdCBjcnRfbW9kZV90YWJsZSBDRUFNMTkyMHgxMDgwW107Ci1leHRlcm4gc3RydWN0IFZpZGVvTW9kZVRhYmxlIENFQV9IRE1JX01vZGVzW107Ci0KIGV4dGVybiBzdHJ1Y3QgaW9fcmVnIENONDAwX01vZGVYcmVnc1tdOwogZXh0ZXJuIHN0cnVjdCBpb19yZWcgQ043MDBfTW9kZVhyZWdzW107CiBleHRlcm4gc3RydWN0IGlvX3JlZyBLTTQwMF9Nb2RlWHJlZ3NbXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYwppbmRleCA0ZmI1YjJiLi40YmNjOGI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMKKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jCkBAIC01OTAsMTUgKzU5MCwxMCBAQAogCiBzdGF0aWMgdm9pZCB2aXJ0aW9fcGNpX3JlbGVhc2VfZGV2KHN0cnVjdCBkZXZpY2UgKl9kKQogewotCXN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2YoX2QsIHN0cnVjdCB2aXJ0aW9fZGV2aWNlLCBkZXYpOworCXN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2YoX2QsIHN0cnVjdCB2aXJ0aW9fZGV2aWNlLAorCQkJCQkJIGRldik7CiAJc3RydWN0IHZpcnRpb19wY2lfZGV2aWNlICp2cF9kZXYgPSB0b192cF9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IHZwX2Rldi0+cGNpX2RldjsKIAotCXZwX2RlbF92cXMoZGV2KTsKLQlwY2lfc2V0X2RydmRhdGEocGNpX2RldiwgTlVMTCk7Ci0JcGNpX2lvdW5tYXAocGNpX2RldiwgdnBfZGV2LT5pb2FkZHIpOwotCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGNpX2Rldik7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBjaV9kZXYpOwogCWtmcmVlKHZwX2Rldik7CiB9CiAKQEAgLTY4MSw2ICs2NzYsMTIgQEAKIAlzdHJ1Y3QgdmlydGlvX3BjaV9kZXZpY2UgKnZwX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKIAogCXVucmVnaXN0ZXJfdmlydGlvX2RldmljZSgmdnBfZGV2LT52ZGV2KTsKKworCXZwX2RlbF92cXMoJnZwX2Rldi0+dmRldik7CisJcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIE5VTEwpOworCXBjaV9pb3VubWFwKHBjaV9kZXYsIHZwX2Rldi0+aW9hZGRyKTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBjaV9kZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwY2lfZGV2KTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKaW5kZXggY2MyZjczZS4uYjAwNDNmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYworKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCkBAIC0zNzEsNiArMzcxLDcgQEAKIAkJLyogZGV0YWNoX2J1ZiBjbGVhcnMgZGF0YSwgc28gZ3JhYiBpdCBub3cuICovCiAJCWJ1ZiA9IHZxLT5kYXRhW2ldOwogCQlkZXRhY2hfYnVmKHZxLCBpKTsKKwkJdnEtPnZyaW5nLmF2YWlsLT5pZHgtLTsKIAkJRU5EX1VTRSh2cSk7CiAJCXJldHVybiBidWY7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCmluZGV4IDFiMGY5OGIuLjAyMmY5ZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZworKysgYi9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKQEAgLTk5MCw2ICs5OTAsMTIgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBsb2FkYWJsZSBtb2R1bGUsIGNob29zZSBNIGhlcmUuCiAJICBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGJjbTYzeHhfd2R0LgogCitjb25maWcgTEFOVElRX1dEVAorCXRyaXN0YXRlICJMYW50aXEgU29DIHdhdGNoZG9nIgorCWRlcGVuZHMgb24gTEFOVElRCisJaGVscAorCSAgSGFyZHdhcmUgZHJpdmVyIGZvciB0aGUgTGFudGlxIFNvQyBXYXRjaGRvZyBUaW1lci4KKwogIyBQQVJJU0MgQXJjaGl0ZWN0dXJlCiAKICMgUE9XRVJQQyBBcmNoaXRlY3R1cmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUgYi9kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlCmluZGV4IDNmODYwOGIuLmVkMjZmNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUKKysrIGIvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZQpAQCAtMTIzLDYgKzEyMyw3IEBACiBvYmotJChDT05GSUdfVFhYOV9XRFQpICs9IHR4eDl3ZHQubwogb2JqLSQoQ09ORklHX09DVEVPTl9XRFQpICs9IG9jdGVvbi13ZHQubwogb2N0ZW9uLXdkdC15IDo9IG9jdGVvbi13ZHQtbWFpbi5vIG9jdGVvbi13ZHQtbm1pLm8KK29iai0kKENPTkZJR19MQU5USVFfV0RUKSArPSBsYW50aXFfd2R0Lm8KIAogIyBQQVJJU0MgQXJjaGl0ZWN0dXJlCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT193ZHQuYwppbmRleCAzNWEwZDEyLi41ZmQwMjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2lUQ09fd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9pVENPX3dkdC5jCkBAIC0zNSw2ICszNSw3IEBACiAgKglkb2N1bWVudCBudW1iZXIgMzI0NjQ1LTAwMSwgMzI0NjQ2LTAwMTogQ291Z2FyIFBvaW50IChDUFQpCiAgKglkb2N1bWVudCBudW1iZXIgVEJEICAgICAgICAgICAgICAgICAgIDogUGF0c2J1cmcgKFBCRykKICAqCWRvY3VtZW50IG51bWJlciBUQkQgICAgICAgICAgICAgICAgICAgOiBESDg5eHhDQworICoJZG9jdW1lbnQgbnVtYmVyIFRCRCAgICAgICAgICAgICAgICAgICA6IFBhbnRoZXIgUG9pbnQKICAqLwogCiAvKgpAQCAtMTUzLDYgKzE1NCwzOCBAQAogCVRDT19QQkcxLAkvKiBQYXRzYnVyZyAqLwogCVRDT19QQkcyLAkvKiBQYXRzYnVyZyAqLwogCVRDT19ESDg5WFhDQywJLyogREg4OXh4Q0MgKi8KKwlUQ09fUFBUMCwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxLAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDIsCS8qIFBhbnRoZXIgUG9pbnQgKi8KKwlUQ09fUFBUMywJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQ0LAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDUsCS8qIFBhbnRoZXIgUG9pbnQgKi8KKwlUQ09fUFBUNiwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQ3LAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDgsCS8qIFBhbnRoZXIgUG9pbnQgKi8KKwlUQ09fUFBUOSwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxMCwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxMSwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxMiwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxMywJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxNCwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxNSwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxNiwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxNywJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxOCwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxOSwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyMCwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyMSwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyMiwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyMywJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyNCwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyNSwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyNiwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyNywJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyOCwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyOSwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQzMCwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQzMSwJLyogUGFudGhlciBQb2ludCAqLwogfTsKIAogc3RhdGljIHN0cnVjdCB7CkBAIC0yNDQsNiArMjc3LDM4IEBACiAJeyJQYXRzYnVyZyIsIDJ9LAogCXsiUGF0c2J1cmciLCAyfSwKIAl7IkRIODl4eENDIiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCiAJe05VTEwsIDB9CiB9OwogCkBAIC0zNjMsNiArNDI4LDM4IEBACiAJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZDQwLAkJCQlUQ09fUEJHMSl9LAogCXsgSVRDT19QQ0lfREVWSUNFKDB4MWQ0MSwJCQkJVENPX1BCRzIpfSwKIAl7IElUQ09fUENJX0RFVklDRSgweDIzMTAsCQkJCVRDT19ESDg5WFhDQyl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU0MCwJCQkJVENPX1BQVDApfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNDEsCQkJCVRDT19QUFQxKX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTQyLAkJCQlUQ09fUFBUMil9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU0MywJCQkJVENPX1BQVDMpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNDQsCQkJCVRDT19QUFQ0KX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTQ1LAkJCQlUQ09fUFBUNSl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU0NiwJCQkJVENPX1BQVDYpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNDcsCQkJCVRDT19QUFQ3KX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTQ4LAkJCQlUQ09fUFBUOCl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU0OSwJCQkJVENPX1BQVDkpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNGEsCQkJCVRDT19QUFQxMCl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU0YiwJCQkJVENPX1BQVDExKX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTRjLAkJCQlUQ09fUFBUMTIpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNGQsCQkJCVRDT19QUFQxMyl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU0ZSwJCQkJVENPX1BQVDE0KX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTRmLAkJCQlUQ09fUFBUMTUpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNTAsCQkJCVRDT19QUFQxNil9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU1MSwJCQkJVENPX1BQVDE3KX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTUyLAkJCQlUQ09fUFBUMTgpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNTMsCQkJCVRDT19QUFQxOSl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU1NCwJCQkJVENPX1BQVDIwKX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTU1LAkJCQlUQ09fUFBUMjEpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNTYsCQkJCVRDT19QUFQyMil9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU1NywJCQkJVENPX1BQVDIzKX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTU4LAkJCQlUQ09fUFBUMjQpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNTksCQkJCVRDT19QUFQyNSl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU1YSwJCQkJVENPX1BQVDI2KX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTViLAkJCQlUQ09fUFBUMjcpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNWMsCQkJCVRDT19QUFQyOCl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU1ZCwJCQkJVENPX1BQVDI5KX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTVlLAkJCQlUQ09fUFBUMzApfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNWYsCQkJCVRDT19QUFQzMSl9LAogCXsgMCwgfSwJCQkvKiBFbmQgb2YgbGlzdCAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpVENPX3dkdF9wY2lfdGJsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvbGFudGlxX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9sYW50aXFfd2R0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q4MmFkYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvbGFudGlxX3dkdC5jCkBAIC0wLDAgKzEsMjYxIEBACisvKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICogIEJhc2VkIG9uIEVQOTN4eCB3ZHQgZHJpdmVyCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxsYW50aXEuaD4KKworLyogU2VjdGlvbiAzLjQgb2YgdGhlIGRhdGFzaGVldAorICogVGhlIHBhc3N3b3JkIHNlcXVlbmNlIHByb3RlY3RzIHRoZSBXRFQgY29udHJvbCByZWdpc3RlciBmcm9tIHVuaW50ZW5kZWQKKyAqIHdyaXRlIGFjdGlvbnMsIHdoaWNoIG1pZ2h0IGNhdXNlIG1hbGZ1bmN0aW9uIG9mIHRoZSBXRFQuCisgKgorICogZXNzZW50aWFsbHkgdGhlIGZvbGxvd2luZyB0d28gbWFnaWMgcGFzc3dvcmRzIG5lZWQgdG8gYmUgd3JpdHRlbiB0byBhbGxvdworICogSU8gYWNjZXNzIHRvIHRoZSBXRFQgY29yZQorICovCisjZGVmaW5lIExUUV9XRFRfUFcxCQkweDAwQkUwMDAwCisjZGVmaW5lIExUUV9XRFRfUFcyCQkweDAwREMwMDAwCisKKyNkZWZpbmUgTFRRX1dEVF9DUgkJMHgwCS8qIHdhdGNoZG9nIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTFRRX1dEVF9TUgkJMHg4CS8qIHdhdGNoZG9nIHN0YXR1cyByZWdpc3RlciAqLworCisjZGVmaW5lIExUUV9XRFRfU1JfRU4JCSgweDEgPDwgMzEpCS8qIGVuYWJsZSBiaXQgKi8KKyNkZWZpbmUgTFRRX1dEVF9TUl9QV0QJCSgweDMgPDwgMjYpCS8qIHR1cm4gb24gcG93ZXIgKi8KKyNkZWZpbmUgTFRRX1dEVF9TUl9DTEtESVYJKDB4MyA8PCAyNCkJLyogdHVybiBvbiBjbG9jayBhbmQgc2V0ICovCisJCQkJCQkvKiBkaXZpZGVyIHRvIDB4NDAwMDAgKi8KKyNkZWZpbmUgTFRRX1dEVF9ESVZJREVSCQkweDQwMDAwCisjZGVmaW5lIExUUV9NQVhfVElNRU9VVAkJKCgxIDw8IDE2KSAtIDEpCS8qIHRoZSByZWxvYWQgZmllbGQgaXMgMTYgYml0ICovCisKK3N0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKKworc3RhdGljIHZvaWQgX19pb21lbSAqbHRxX3dkdF9tZW1iYXNlOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbHRxX2lvX3JlZ2lvbl9jbGtfcmF0ZTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbHRxX3dkdF9ib290c3RhdHVzOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbHRxX3dkdF9pbl91c2U7CitzdGF0aWMgaW50IGx0cV93ZHRfdGltZW91dCA9IDMwOworc3RhdGljIGludCBsdHFfd2R0X29rX3RvX2Nsb3NlOworCitzdGF0aWMgdm9pZAorbHRxX3dkdF9lbmFibGUodm9pZCkKK3sKKwlsdHFfd2R0X3RpbWVvdXQgPSBsdHFfd2R0X3RpbWVvdXQgKgorCQkJKGx0cV9pb19yZWdpb25fY2xrX3JhdGUgLyBMVFFfV0RUX0RJVklERVIpICsgMHgxMDAwOworCWlmIChsdHFfd2R0X3RpbWVvdXQgPiBMVFFfTUFYX1RJTUVPVVQpCisJCWx0cV93ZHRfdGltZW91dCA9IExUUV9NQVhfVElNRU9VVDsKKworCS8qIHdyaXRlIHRoZSBmaXJzdCBwYXNzd29yZCBtYWdpYyAqLworCWx0cV93MzIoTFRRX1dEVF9QVzEsIGx0cV93ZHRfbWVtYmFzZSArIExUUV9XRFRfQ1IpOworCS8qIHdyaXRlIHRoZSBzZWNvbmQgbWFnaWMgcGx1cyB0aGUgY29uZmlndXJhdGlvbiBhbmQgbmV3IHRpbWVvdXQgKi8KKwlsdHFfdzMyKExUUV9XRFRfU1JfRU4gfCBMVFFfV0RUX1NSX1BXRCB8IExUUV9XRFRfU1JfQ0xLRElWIHwKKwkJTFRRX1dEVF9QVzIgfCBsdHFfd2R0X3RpbWVvdXQsIGx0cV93ZHRfbWVtYmFzZSArIExUUV9XRFRfQ1IpOworfQorCitzdGF0aWMgdm9pZAorbHRxX3dkdF9kaXNhYmxlKHZvaWQpCit7CisJLyogd3JpdGUgdGhlIGZpcnN0IHBhc3N3b3JkIG1hZ2ljICovCisJbHRxX3czMihMVFFfV0RUX1BXMSwgbHRxX3dkdF9tZW1iYXNlICsgTFRRX1dEVF9DUik7CisJLyogd3JpdGUgdGhlIHNlY29uZCBwYXNzd29yZCBtYWdpYyB3aXRoIG5vIGNvbmZpZworCSAqIHRoaXMgdHVybnMgdGhlIHdhdGNoZG9nIG9mZgorCSAqLworCWx0cV93MzIoTFRRX1dEVF9QVzIsIGx0cV93ZHRfbWVtYmFzZSArIExUUV9XRFRfQ1IpOworfQorCitzdGF0aWMgc3NpemVfdAorbHRxX3dkdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmRhdGEsCisJCXNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKK3sKKwlpZiAobGVuKSB7CisJCWlmICghbm93YXlvdXQpIHsKKwkJCXNpemVfdCBpOworCisJCQlsdHFfd2R0X29rX3RvX2Nsb3NlID0gMDsKKwkJCWZvciAoaSA9IDA7IGkgIT0gbGVuOyBpKyspIHsKKwkJCQljaGFyIGM7CisKKwkJCQlpZiAoZ2V0X3VzZXIoYywgZGF0YSArIGkpKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQlpZiAoYyA9PSAnVicpCisJCQkJCWx0cV93ZHRfb2tfdG9fY2xvc2UgPSAxOworCQkJCWVsc2UKKwkJCQkJbHRxX3dkdF9va190b19jbG9zZSA9IDA7CisJCQl9CisJCX0KKwkJbHRxX3dkdF9lbmFibGUoKTsKKwl9CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CisJLm9wdGlvbnMgPSBXRElPRl9NQUdJQ0NMT1NFIHwgV0RJT0ZfU0VUVElNRU9VVCB8IFdESU9GX0tFRVBBTElWRVBJTkcgfAorCQkJV0RJT0ZfQ0FSRFJFU0VULAorCS5pZGVudGl0eSA9ICJsdHFfd2R0IiwKK307CisKK3N0YXRpYyBsb25nCitsdHFfd2R0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLAorCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlpbnQgcmV0ID0gLUVOT1RUWTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBXRElPQ19HRVRTVVBQT1JUOgorCQlyZXQgPSBjb3B5X3RvX3VzZXIoKHN0cnVjdCB3YXRjaGRvZ19pbmZvIF9fdXNlciAqKWFyZywgJmlkZW50LAorCQkJCXNpemVvZihpZGVudCkpID8gLUVGQVVMVCA6IDA7CisJCWJyZWFrOworCisJY2FzZSBXRElPQ19HRVRCT09UU1RBVFVTOgorCQlyZXQgPSBwdXRfdXNlcihsdHFfd2R0X2Jvb3RzdGF0dXMsIChpbnQgX191c2VyICopYXJnKTsKKwkJYnJlYWs7CisKKwljYXNlIFdESU9DX0dFVFNUQVRVUzoKKwkJcmV0ID0gcHV0X3VzZXIoMCwgKGludCBfX3VzZXIgKilhcmcpOworCQlicmVhazsKKworCWNhc2UgV0RJT0NfU0VUVElNRU9VVDoKKwkJcmV0ID0gZ2V0X3VzZXIobHRxX3dkdF90aW1lb3V0LCAoaW50IF9fdXNlciAqKWFyZyk7CisJCWlmICghcmV0KQorCQkJbHRxX3dkdF9lbmFibGUoKTsKKwkJLyogaW50ZW50aW9uYWwgZHJvcCB0aHJvdWdoICovCisJY2FzZSBXRElPQ19HRVRUSU1FT1VUOgorCQlyZXQgPSBwdXRfdXNlcihsdHFfd2R0X3RpbWVvdXQsIChpbnQgX191c2VyICopYXJnKTsKKwkJYnJlYWs7CisKKwljYXNlIFdESU9DX0tFRVBBTElWRToKKwkJbHRxX3dkdF9lbmFibGUoKTsKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2x0cV93ZHRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmbHRxX3dkdF9pbl91c2UpKQorCQlyZXR1cm4gLUVCVVNZOworCWx0cV93ZHRfaW5fdXNlID0gMTsKKwlsdHFfd2R0X2VuYWJsZSgpOworCisJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworfQorCitzdGF0aWMgaW50CitsdHFfd2R0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaWYgKGx0cV93ZHRfb2tfdG9fY2xvc2UpCisJCWx0cV93ZHRfZGlzYWJsZSgpOworCWVsc2UKKwkJcHJfZXJyKCJsdHFfd2R0OiB3YXRjaGRvZyBjbG9zZWQgd2l0aG91dCB3YXJuaW5nXG4iKTsKKwlsdHFfd2R0X29rX3RvX2Nsb3NlID0gMDsKKwljbGVhcl9iaXQoMCwgJmx0cV93ZHRfaW5fdXNlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsdHFfd2R0X2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS53cml0ZQkJPSBsdHFfd2R0X3dyaXRlLAorCS51bmxvY2tlZF9pb2N0bAk9IGx0cV93ZHRfaW9jdGwsCisJLm9wZW4JCT0gbHRxX3dkdF9vcGVuLAorCS5yZWxlYXNlCT0gbHRxX3dkdF9yZWxlYXNlLAorCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAorfTsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIGx0cV93ZHRfbWlzY2RldiA9IHsKKwkubWlub3IJPSBXQVRDSERPR19NSU5PUiwKKwkubmFtZQk9ICJ3YXRjaGRvZyIsCisJLmZvcHMJPSAmbHRxX3dkdF9mb3BzLAorfTsKKworc3RhdGljIGludCBfX2luaXQKK2x0cV93ZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJc3RydWN0IGNsayAqY2xrOworCisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IG9idGFpbiBJL08gbWVtb3J5IHJlZ2lvbiIpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisJcmVzID0gZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKKwkJcmVzb3VyY2Vfc2l6ZShyZXMpLCBkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlcXVlc3QgSS9PIG1lbW9yeSByZWdpb24iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJbHRxX3dkdF9tZW1iYXNlID0gZGV2bV9pb3JlbWFwX25vY2FjaGUoJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKKwkJcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIWx0cV93ZHRfbWVtYmFzZSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVtYXAgSS9PIG1lbW9yeSByZWdpb25cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiB3ZSBkbyBub3QgbmVlZCB0byBlbmFibGUgdGhlIGNsb2NrIGFzIGl0IGlzIGFsd2F5cyBydW5uaW5nICovCisJY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiaW8iKTsKKwlXQVJOX09OKCFjbGspOworCWx0cV9pb19yZWdpb25fY2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKKwljbGtfcHV0KGNsayk7CisKKwlpZiAobHRxX3Jlc2V0X2NhdXNlKCkgPT0gTFRRX1JTVF9DQVVTRV9XRFRSU1QpCisJCWx0cV93ZHRfYm9vdHN0YXR1cyA9IFdESU9GX0NBUkRSRVNFVDsKKworCXJldHVybiBtaXNjX3JlZ2lzdGVyKCZsdHFfd2R0X21pc2NkZXYpOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdAorbHRxX3dkdF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwltaXNjX2RlcmVnaXN0ZXIoJmx0cV93ZHRfbWlzY2Rldik7CisKKwlpZiAobHRxX3dkdF9tZW1iYXNlKQorCQlpb3VubWFwKGx0cV93ZHRfbWVtYmFzZSk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBsdHFfd2R0X2RyaXZlciA9IHsKKwkucmVtb3ZlID0gX19kZXZleGl0X3AobHRxX3dkdF9yZW1vdmUpLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImx0cV93ZHQiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQKK2luaXRfbHRxX3dkdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmx0cV93ZHRfZHJpdmVyLCBsdHFfd2R0X3Byb2JlKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0CitleGl0X2x0cV93ZHQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmx0cV93ZHRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9sdHFfd2R0KTsKK21vZHVsZV9leGl0KGV4aXRfbHRxX3dkdCk7CisKK21vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQiKTsKKworTU9EVUxFX0FVVEhPUigiSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxhbnRpcSBTb0MgV2F0Y2hkb2ciKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvbXBjOHh4eF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXBjOHh4eF93ZHQuYwppbmRleCA1MjhiY2ViLi5lZWQ1NDM2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9tcGM4eHh4X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXBjOHh4eF93ZHQuYwpAQCAtMTg1LDE3ICsxODUsMjAgQEAKIAkuZm9wcwk9ICZtcGM4eHh4X3dkdF9mb3BzLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjOHh4eF93ZHRfbWF0Y2hbXTsKIHN0YXRpYyBpbnQgX19kZXZpbml0IG1wYzh4eHhfd2R0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KQogewogCWludCByZXQ7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mZGV2LT5kZXYub2Zfbm9kZTsKIAlzdHJ1Y3QgbXBjOHh4eF93ZHRfdHlwZSAqd2R0X3R5cGU7CiAJdTMyIGZyZXEgPSBmc2xfZ2V0X3N5c19mcmVxKCk7CiAJYm9vbCBlbmFibGVkOwogCi0JaWYgKCFvZmRldi0+ZGV2Lm9mX21hdGNoKQorCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKG1wYzh4eHhfd2R0X21hdGNoLCAmb2ZkZXYtPmRldik7CisJaWYgKCFtYXRjaCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0Jd2R0X3R5cGUgPSBvZmRldi0+ZGV2Lm9mX21hdGNoLT5kYXRhOworCXdkdF90eXBlID0gbWF0Y2gtPmRhdGE7CiAKIAlpZiAoIWZyZXEgfHwgZnJlcSA9PSAtMSkKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL210eC0xX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9tdHgtMV93ZHQuYwppbmRleCA1ZWM1YWMxLi4xNDc5ZGM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL210eC0xX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXR4LTFfd2R0LmMKQEAgLTY2LDYgKzY2LDcgQEAKIAlpbnQgZGVmYXVsdF90aWNrczsKIAl1bnNpZ25lZCBsb25nIGludXNlOwogCXVuc2lnbmVkIGdwaW87CisJaW50IGdzdGF0ZTsKIH0gbXR4MV93ZHRfZGV2aWNlOwogCiBzdGF0aWMgdm9pZCBtdHgxX3dkdF90cmlnZ2VyKHVuc2lnbmVkIGxvbmcgdW51c2VkKQpAQCAtNzUsMTMgKzc2LDEzIEBACiAJc3Bpbl9sb2NrKCZtdHgxX3dkdF9kZXZpY2UubG9jayk7CiAJaWYgKG10eDFfd2R0X2RldmljZS5ydW5uaW5nKQogCQl0aWNrcy0tOwotCS8qCi0JICogdG9nZ2xlIEdQSU8yXzE1Ci0JICovCi0JdG1wID0gYXVfcmVhZGwoR1BJTzJfRElSKTsKLQl0bXAgPSAodG1wICYgfigxIDw8IG10eDFfd2R0X2RldmljZS5ncGlvKSkgfAotCSAgICAgICgofnRtcCkgJiAoMSA8PCBtdHgxX3dkdF9kZXZpY2UuZ3BpbykpOwotCWF1X3dyaXRlbCh0bXAsIEdQSU8yX0RJUik7CisKKwkvKiB0b2dnbGUgd2R0IGdwaW8gKi8KKwltdHgxX3dkdF9kZXZpY2UuZ3N0YXRlID0gfm10eDFfd2R0X2RldmljZS5nc3RhdGU7CisJaWYgKG10eDFfd2R0X2RldmljZS5nc3RhdGUpCisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChtdHgxX3dkdF9kZXZpY2UuZ3BpbywgMSk7CisJZWxzZQorCQlncGlvX2RpcmVjdGlvbl9pbnB1dChtdHgxX3dkdF9kZXZpY2UuZ3Bpbyk7CiAKIAlpZiAobXR4MV93ZHRfZGV2aWNlLnF1ZXVlICYmIHRpY2tzKQogCQltb2RfdGltZXIoJm10eDFfd2R0X2RldmljZS50aW1lciwgamlmZmllcyArIE1UWDFfV0RUX0lOVEVSVkFMKTsKQEAgLTEwMyw3ICsxMDQsOCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZtdHgxX3dkdF9kZXZpY2UubG9jaywgZmxhZ3MpOwogCWlmICghbXR4MV93ZHRfZGV2aWNlLnF1ZXVlKSB7CiAJCW10eDFfd2R0X2RldmljZS5xdWV1ZSA9IDE7Ci0JCWdwaW9fc2V0X3ZhbHVlKG10eDFfd2R0X2RldmljZS5ncGlvLCAxKTsKKwkJbXR4MV93ZHRfZGV2aWNlLmdzdGF0ZSA9IDE7CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChtdHgxX3dkdF9kZXZpY2UuZ3BpbywgMSk7CiAJCW1vZF90aW1lcigmbXR4MV93ZHRfZGV2aWNlLnRpbWVyLCBqaWZmaWVzICsgTVRYMV9XRFRfSU5URVJWQUwpOwogCX0KIAltdHgxX3dkdF9kZXZpY2UucnVubmluZysrOwpAQCAtMTE3LDcgKzExOSw4IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJm10eDFfd2R0X2RldmljZS5sb2NrLCBmbGFncyk7CiAJaWYgKG10eDFfd2R0X2RldmljZS5xdWV1ZSkgewogCQltdHgxX3dkdF9kZXZpY2UucXVldWUgPSAwOwotCQlncGlvX3NldF92YWx1ZShtdHgxX3dkdF9kZXZpY2UuZ3BpbywgMCk7CisJCW10eDFfd2R0X2RldmljZS5nc3RhdGUgPSAwOworCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQobXR4MV93ZHRfZGV2aWNlLmdwaW8sIDApOwogCX0KIAl0aWNrcyA9IG10eDFfd2R0X2RldmljZS5kZWZhdWx0X3RpY2tzOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm10eDFfd2R0X2RldmljZS5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9NYWtlZmlsZSBiL2RyaXZlcnMveGVuL01ha2VmaWxlCmluZGV4IGY0MjBmMWYuLjQ3ODFmODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL01ha2VmaWxlCisrKyBiL2RyaXZlcnMveGVuL01ha2VmaWxlCkBAIC00LDIxICs0LDIxIEBACiBub3N0YWNrcCA6PSAkKGNhbGwgY2Mtb3B0aW9uLCAtZm5vLXN0YWNrLXByb3RlY3RvcikKIENGTEFHU19mZWF0dXJlcy5vCQkJOj0gJChub3N0YWNrcCkKIAotb2JqLSQoQ09ORklHX0JMT0NLKQkJKz0gYmlvbWVyZ2Uubwotb2JqLSQoQ09ORklHX0hPVFBMVUdfQ1BVKQkrPSBjcHVfaG90cGx1Zy5vCi1vYmotJChDT05GSUdfWEVOX1hFTkNPTU0pCSs9IHhlbmNvbW0ubwotb2JqLSQoQ09ORklHX1hFTl9CQUxMT09OKQkrPSB4ZW4tYmFsbG9vbi5vCi1vYmotJChDT05GSUdfWEVOX0RFVl9FVlRDSE4pCSs9IHhlbi1ldnRjaG4ubwotb2JqLSQoQ09ORklHX1hFTl9HTlRERVYpCSs9IHhlbi1nbnRkZXYubworb2JqLSQoQ09ORklHX0JMT0NLKQkJCSs9IGJpb21lcmdlLm8KK29iai0kKENPTkZJR19IT1RQTFVHX0NQVSkJCSs9IGNwdV9ob3RwbHVnLm8KK29iai0kKENPTkZJR19YRU5fWEVOQ09NTSkJCSs9IHhlbmNvbW0ubworb2JqLSQoQ09ORklHX1hFTl9CQUxMT09OKQkJKz0geGVuLWJhbGxvb24ubworb2JqLSQoQ09ORklHX1hFTl9ERVZfRVZUQ0hOKQkJKz0geGVuLWV2dGNobi5vCitvYmotJChDT05GSUdfWEVOX0dOVERFVikJCSs9IHhlbi1nbnRkZXYubwogb2JqLSQoQ09ORklHX1hFTl9HUkFOVF9ERVZfQUxMT0MpCSs9IHhlbi1nbnRhbGxvYy5vCi1vYmotJChDT05GSUdfWEVORlMpCQkrPSB4ZW5mcy8KK29iai0kKENPTkZJR19YRU5GUykJCQkrPSB4ZW5mcy8KIG9iai0kKENPTkZJR19YRU5fU1lTX0hZUEVSVklTT1IpCSs9IHN5cy1oeXBlcnZpc29yLm8KLW9iai0kKENPTkZJR19YRU5fUExBVEZPUk1fUENJKQkrPSB4ZW4tcGxhdGZvcm0tcGNpLm8KLW9iai0kKENPTkZJR19TV0lPVExCX1hFTikJKz0gc3dpb3RsYi14ZW4ubwotb2JqLSQoQ09ORklHX1hFTl9ET00wKQkJKz0gcGNpLm8KK29iai0kKENPTkZJR19YRU5fUExBVEZPUk1fUENJKQkJKz0geGVuLXBsYXRmb3JtLXBjaS5vCitvYmotJChDT05GSUdfU1dJT1RMQl9YRU4pCQkrPSBzd2lvdGxiLXhlbi5vCitvYmotJChDT05GSUdfWEVOX0RPTTApCQkJKz0gcGNpLm8KIAoteGVuLWV2dGNobi15CQkJOj0gZXZ0Y2huLm8KK3hlbi1ldnRjaG4teQkJCQk6PSBldnRjaG4ubwogeGVuLWdudGRldi15CQkJCTo9IGdudGRldi5vCiB4ZW4tZ250YWxsb2MteQkJCQk6PSBnbnRhbGxvYy5vCiAKLXhlbi1wbGF0Zm9ybS1wY2kteQkJOj0gcGxhdGZvcm0tcGNpLm8KK3hlbi1wbGF0Zm9ybS1wY2kteQkJCTo9IHBsYXRmb3JtLXBjaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9iYWxsb29uLmMgYi9kcml2ZXJzL3hlbi9iYWxsb29uLmMKaW5kZXggMDQzYWY4YS4uZjU0MjkwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vYmFsbG9vbi5jCisrKyBiL2RyaXZlcnMveGVuL2JhbGxvb24uYwpAQCAtMTE0LDcgKzExNCw2IEBACiAJaWYgKFBhZ2VIaWdoTWVtKHBhZ2UpKSB7CiAJCWxpc3RfYWRkX3RhaWwoJnBhZ2UtPmxydSwgJmJhbGxvb25lZF9wYWdlcyk7CiAJCWJhbGxvb25fc3RhdHMuYmFsbG9vbl9oaWdoKys7Ci0JCWRlY190b3RhbGhpZ2hfcGFnZXMoKTsKIAl9IGVsc2UgewogCQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmYmFsbG9vbmVkX3BhZ2VzKTsKIAkJYmFsbG9vbl9zdGF0cy5iYWxsb29uX2xvdysrOwpAQCAtMTI0LDYgKzEyMyw4IEBACiBzdGF0aWMgdm9pZCBiYWxsb29uX2FwcGVuZChzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlfX2JhbGxvb25fYXBwZW5kKHBhZ2UpOworCWlmIChQYWdlSGlnaE1lbShwYWdlKSkKKwkJZGVjX3RvdGFsaGlnaF9wYWdlcygpOwogCXRvdGFscmFtX3BhZ2VzLS07CiB9CiAKQEAgLTE5Myw3ICsxOTQsNyBAQAogCXJldHVybiBCUF9FQUdBSU47CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGN1cnJlbnRfdGFyZ2V0KHZvaWQpCitzdGF0aWMgbG9uZyBjdXJyZW50X2NyZWRpdCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgdGFyZ2V0ID0gYmFsbG9vbl9zdGF0cy50YXJnZXRfcGFnZXM7CiAKQEAgLTIwMiw3ICsyMDMsNyBAQAogCQkgICAgIGJhbGxvb25fc3RhdHMuYmFsbG9vbl9sb3cgKwogCQkgICAgIGJhbGxvb25fc3RhdHMuYmFsbG9vbl9oaWdoKTsKIAotCXJldHVybiB0YXJnZXQ7CisJcmV0dXJuIHRhcmdldCAtIGJhbGxvb25fc3RhdHMuY3VycmVudF9wYWdlczsKIH0KIAogc3RhdGljIGVudW0gYnBfc3RhdGUgaW5jcmVhc2VfcmVzZXJ2YXRpb24odW5zaWduZWQgbG9uZyBucl9wYWdlcykKQEAgLTI0Niw3ICsyNDcsNyBAQAogCQlzZXRfcGh5c190b19tYWNoaW5lKHBmbiwgZnJhbWVfbGlzdFtpXSk7CiAKIAkJLyogTGluayBiYWNrIGludG8gdGhlIHBhZ2UgdGFibGVzIGlmIG5vdCBoaWdobWVtLiAqLwotCQlpZiAoIXhlbl9odm1fZG9tYWluKCkgJiYgcGZuIDwgbWF4X2xvd19wZm4pIHsKKwkJaWYgKHhlbl9wdl9kb21haW4oKSAmJiAhUGFnZUhpZ2hNZW0ocGFnZSkpIHsKIAkJCWludCByZXQ7CiAJCQlyZXQgPSBIWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nKAogCQkJCSh1bnNpZ25lZCBsb25nKV9fdmEocGZuIDw8IFBBR0VfU0hJRlQpLApAQCAtMjkzLDcgKzI5NCw3IEBACiAKIAkJc2NydWJfcGFnZShwYWdlKTsKIAotCQlpZiAoIXhlbl9odm1fZG9tYWluKCkgJiYgIVBhZ2VIaWdoTWVtKHBhZ2UpKSB7CisJCWlmICh4ZW5fcHZfZG9tYWluKCkgJiYgIVBhZ2VIaWdoTWVtKHBhZ2UpKSB7CiAJCQlyZXQgPSBIWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nKAogCQkJCSh1bnNpZ25lZCBsb25nKV9fdmEocGZuIDw8IFBBR0VfU0hJRlQpLAogCQkJCV9fcHRlX21hKDApLCAwKTsKQEAgLTMzNyw3ICszMzgsNyBAQAogCW11dGV4X2xvY2soJmJhbGxvb25fbXV0ZXgpOwogCiAJZG8gewotCQljcmVkaXQgPSBjdXJyZW50X3RhcmdldCgpIC0gYmFsbG9vbl9zdGF0cy5jdXJyZW50X3BhZ2VzOworCQljcmVkaXQgPSBjdXJyZW50X2NyZWRpdCgpOwogCiAJCWlmIChjcmVkaXQgPiAwKQogCQkJc3RhdGUgPSBpbmNyZWFzZV9yZXNlcnZhdGlvbihjcmVkaXQpOwpAQCAtNDIwLDcgKzQyMSw3IEBACiAJfQogCiAJLyogVGhlIGJhbGxvb24gbWF5IGJlIHRvbyBsYXJnZSBub3cuIFNocmluayBpdCBpZiBuZWVkZWQuICovCi0JaWYgKGN1cnJlbnRfdGFyZ2V0KCkgIT0gYmFsbG9vbl9zdGF0cy5jdXJyZW50X3BhZ2VzKQorCWlmIChjdXJyZW50X2NyZWRpdCgpKQogCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmJhbGxvb25fd29ya2VyLCAwKTsKIAogCW11dGV4X3VubG9jaygmYmFsbG9vbl9tdXRleCk7CkBAIC00MjksNyArNDMwLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgYmFsbG9vbl9pbml0KHZvaWQpCiB7Ci0gCXVuc2lnbmVkIGxvbmcgcGZuLCBucl9wYWdlcywgZXh0cmFfcGZuX2VuZDsKKwl1bnNpZ25lZCBsb25nIHBmbiwgZXh0cmFfcGZuX2VuZDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCWlmICgheGVuX2RvbWFpbigpKQpAQCAtNDM3LDExICs0MzgsNyBAQAogCiAJcHJfaW5mbygieGVuL2JhbGxvb246IEluaXRpYWxpc2luZyBiYWxsb29uIGRyaXZlci5cbiIpOwogCi0gCWlmICh4ZW5fcHZfZG9tYWluKCkpCi0gCQlucl9wYWdlcyA9IHhlbl9zdGFydF9pbmZvLT5ucl9wYWdlczsKLSAJZWxzZQotIAkJbnJfcGFnZXMgPSBtYXhfcGZuOwotIAliYWxsb29uX3N0YXRzLmN1cnJlbnRfcGFnZXMgPSBtaW4obnJfcGFnZXMsIG1heF9wZm4pOworCWJhbGxvb25fc3RhdHMuY3VycmVudF9wYWdlcyA9IHhlbl9wdl9kb21haW4oKSA/IG1pbih4ZW5fc3RhcnRfaW5mby0+bnJfcGFnZXMsIG1heF9wZm4pIDogbWF4X3BmbjsKIAliYWxsb29uX3N0YXRzLnRhcmdldF9wYWdlcyAgPSBiYWxsb29uX3N0YXRzLmN1cnJlbnRfcGFnZXM7CiAJYmFsbG9vbl9zdGF0cy5iYWxsb29uX2xvdyAgID0gMDsKIAliYWxsb29uX3N0YXRzLmJhbGxvb25faGlnaCAgPSAwOwpAQCAtNDY2LDcgKzQ2Myw3IEBACiAJICAgICBwZm4gPCBleHRyYV9wZm5fZW5kOwogCSAgICAgcGZuKyspIHsKIAkJcGFnZSA9IHBmbl90b19wYWdlKHBmbik7Ci0JCS8qIHRvdGFscmFtX3BhZ2VzIGRvZXNuJ3QgaW5jbHVkZSB0aGUgYm9vdC10aW1lCisJCS8qIHRvdGFscmFtX3BhZ2VzIGFuZCB0b3RhbGhpZ2hfcGFnZXMgZG8gbm90IGluY2x1ZGUgdGhlIGJvb3QtdGltZQogCQkgICBiYWxsb29uIGV4dGVuc2lvbiwgc28gZG9uJ3Qgc3VidHJhY3QgZnJvbSBpdC4gKi8KIAkJX19iYWxsb29uX2FwcGVuZChwYWdlKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9ldmVudHMuYyBiL2RyaXZlcnMveGVuL2V2ZW50cy5jCmluZGV4IDMzMTY3YjQuLjNmZjgyMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL2V2ZW50cy5jCisrKyBiL2RyaXZlcnMveGVuL2V2ZW50cy5jCkBAIC0xMDEsNiArMTAxLDcgQEAKIAkJCXVuc2lnbmVkIHNob3J0IGdzaTsKIAkJCXVuc2lnbmVkIGNoYXIgdmVjdG9yOwogCQkJdW5zaWduZWQgY2hhciBmbGFnczsKKwkJCXVpbnQxNl90IGRvbWlkOwogCQl9IHBpcnE7CiAJfSB1OwogfTsKQEAgLTExOCw2ICsxMTksOCBAQAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB4ZW5fZHluYW1pY19jaGlwOwogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB4ZW5fcGVyY3B1X2NoaXA7CiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHhlbl9waXJxX2NoaXA7CitzdGF0aWMgdm9pZCBlbmFibGVfZHluaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSk7CitzdGF0aWMgdm9pZCBkaXNhYmxlX2R5bmlycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpOwogCiAvKiBHZXQgaW5mbyBmb3IgSVJRICovCiBzdGF0aWMgc3RydWN0IGlycV9pbmZvICppbmZvX2Zvcl9pcnEodW5zaWduZWQgaXJxKQpAQCAtMTg0LDYgKzE4Nyw3IEBACiAJCQkJICAgdW5zaWduZWQgc2hvcnQgcGlycSwKIAkJCQkgICB1bnNpZ25lZCBzaG9ydCBnc2ksCiAJCQkJICAgdW5zaWduZWQgc2hvcnQgdmVjdG9yLAorCQkJCSAgIHVpbnQxNl90IGRvbWlkLAogCQkJCSAgIHVuc2lnbmVkIGNoYXIgZmxhZ3MpCiB7CiAJc3RydWN0IGlycV9pbmZvICppbmZvID0gaW5mb19mb3JfaXJxKGlycSk7CkBAIC0xOTMsNiArMTk3LDcgQEAKIAlpbmZvLT51LnBpcnEucGlycSA9IHBpcnE7CiAJaW5mby0+dS5waXJxLmdzaSA9IGdzaTsKIAlpbmZvLT51LnBpcnEudmVjdG9yID0gdmVjdG9yOworCWluZm8tPnUucGlycS5kb21pZCA9IGRvbWlkOwogCWluZm8tPnUucGlycS5mbGFncyA9IGZsYWdzOwogfQogCkBAIC00NzMsMTYgKzQ3OCw2IEBACiAJaXJxX2ZyZWVfZGVzYyhpcnEpOwogfQogCi1zdGF0aWMgdm9pZCBwaXJxX3VubWFza19ub3RpZnkoaW50IGlycSkKLXsKLQlzdHJ1Y3QgcGh5c2Rldl9lb2kgZW9pID0geyAuaXJxID0gcGlycV9mcm9tX2lycShpcnEpIH07Ci0KLQlpZiAodW5saWtlbHkocGlycV9uZWVkc19lb2koaXJxKSkpIHsKLQkJaW50IHJjID0gSFlQRVJWSVNPUl9waHlzZGV2X29wKFBIWVNERVZPUF9lb2ksICZlb2kpOwotCQlXQVJOX09OKHJjKTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIHBpcnFfcXVlcnlfdW5tYXNrKGludCBpcnEpCiB7CiAJc3RydWN0IHBoeXNkZXZfaXJxX3N0YXR1c19xdWVyeSBpcnFfc3RhdHVzOwpAQCAtNTA2LDYgKzUwMSwyOSBAQAogCXJldHVybiBkZXNjICYmIGRlc2MtPmFjdGlvbiA9PSBOVUxMOwogfQogCitzdGF0aWMgdm9pZCBlb2lfcGlycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCit7CisJaW50IGV2dGNobiA9IGV2dGNobl9mcm9tX2lycShkYXRhLT5pcnEpOworCXN0cnVjdCBwaHlzZGV2X2VvaSBlb2kgPSB7IC5pcnEgPSBwaXJxX2Zyb21faXJxKGRhdGEtPmlycSkgfTsKKwlpbnQgcmMgPSAwOworCisJaXJxX21vdmVfaXJxKGRhdGEpOworCisJaWYgKFZBTElEX0VWVENITihldnRjaG4pKQorCQljbGVhcl9ldnRjaG4oZXZ0Y2huKTsKKworCWlmIChwaXJxX25lZWRzX2VvaShkYXRhLT5pcnEpKSB7CisJCXJjID0gSFlQRVJWSVNPUl9waHlzZGV2X29wKFBIWVNERVZPUF9lb2ksICZlb2kpOworCQlXQVJOX09OKHJjKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG1hc2tfYWNrX3BpcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQoreworCWRpc2FibGVfZHluaXJxKGRhdGEpOworCWVvaV9waXJxKGRhdGEpOworfQorCiBzdGF0aWMgdW5zaWduZWQgaW50IF9fc3RhcnR1cF9waXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJc3RydWN0IGV2dGNobl9iaW5kX3BpcnEgYmluZF9waXJxOwpAQCAtNTM5LDcgKzU1Nyw3IEBACiAKIG91dDoKIAl1bm1hc2tfZXZ0Y2huKGV2dGNobik7Ci0JcGlycV91bm1hc2tfbm90aWZ5KGlycSk7CisJZW9pX3BpcnEoaXJxX2dldF9pcnFfZGF0YShpcnEpKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTc5LDE4ICs1OTcsNyBAQAogCiBzdGF0aWMgdm9pZCBkaXNhYmxlX3BpcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQogewotfQotCi1zdGF0aWMgdm9pZCBhY2tfcGlycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCi17Ci0JaW50IGV2dGNobiA9IGV2dGNobl9mcm9tX2lycShkYXRhLT5pcnEpOwotCi0JaXJxX21vdmVfaXJxKGRhdGEpOwotCi0JaWYgKFZBTElEX0VWVENITihldnRjaG4pKSB7Ci0JCW1hc2tfZXZ0Y2huKGV2dGNobik7Ci0JCWNsZWFyX2V2dGNobihldnRjaG4pOwotCX0KKwlkaXNhYmxlX2R5bmlycShkYXRhKTsKIH0KIAogc3RhdGljIGludCBmaW5kX2lycV9ieV9nc2kodW5zaWduZWQgZ3NpKQpAQCAtNjM5LDkgKzY0Niw2IEBACiAJaWYgKGlycSA8IDApCiAJCWdvdG8gb3V0OwogCi0JaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmeGVuX3BpcnFfY2hpcCwgaGFuZGxlX2xldmVsX2lycSwKLQkJCQkgICAgICBuYW1lKTsKLQogCWlycV9vcC5pcnEgPSBpcnE7CiAJaXJxX29wLnZlY3RvciA9IDA7CiAKQEAgLTY1NSw5ICs2NTksMzUgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JeGVuX2lycV9pbmZvX3BpcnFfaW5pdChpcnEsIDAsIHBpcnEsIGdzaSwgaXJxX29wLnZlY3RvciwKKwl4ZW5faXJxX2luZm9fcGlycV9pbml0KGlycSwgMCwgcGlycSwgZ3NpLCBpcnFfb3AudmVjdG9yLCBET01JRF9TRUxGLAogCQkJICAgICAgIHNoYXJlYWJsZSA/IFBJUlFfU0hBUkVBQkxFIDogMCk7CiAKKwlwaXJxX3F1ZXJ5X3VubWFzayhpcnEpOworCS8qIFdlIHRyeSB0byB1c2UgdGhlIGhhbmRsZXIgd2l0aCB0aGUgYXBwcm9wcmlhdGUgc2VtYW50aWMgZm9yIHRoZQorCSAqIHR5cGUgb2YgaW50ZXJydXB0OiBpZiB0aGUgaW50ZXJydXB0IGRvZXNuJ3QgbmVlZCBhbiBlb2kKKwkgKiAocGlycV9uZWVkc19lb2kgcmV0dXJucyBmYWxzZSksIHdlIHRyZWF0IGl0IGxpa2UgYW4gZWRnZQorCSAqIHRyaWdnZXJlZCBpbnRlcnJ1cHQgc28gd2UgdXNlIGhhbmRsZV9lZGdlX2lycS4KKwkgKiBBcyBhIG1hdHRlciBvZiBmYWN0IHRoaXMgb25seSBoYXBwZW5zIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcKKwkgKiBwaHlzaWNhbCBpbnRlcnJ1cHQgaXMgZWRnZSB0cmlnZ2VyZWQgb3IgYW4gbXNpLgorCSAqCisJICogT24gdGhlIG90aGVyIGhhbmQgaWYgdGhlIGludGVycnVwdCBuZWVkcyBhbiBlb2kgKHBpcnFfbmVlZHNfZW9pCisJICogcmV0dXJucyB0cnVlKSB3ZSB0cmVhdCBpdCBsaWtlIGEgbGV2ZWwgdHJpZ2dlcmVkIGludGVycnVwdCBzbyB3ZQorCSAqIHVzZSBoYW5kbGVfZmFzdGVvaV9pcnEgbGlrZSB0aGUgbmF0aXZlIGNvZGUgZG9lcyBmb3IgdGhpcyBraW5kIG9mCisJICogaW50ZXJydXB0cy4KKwkgKiBEZXBlbmRpbmcgb24gdGhlIFhlbiB2ZXJzaW9uLCBwaXJxX25lZWRzX2VvaSBtaWdodCByZXR1cm4gdHJ1ZQorCSAqIG5vdCBvbmx5IGZvciBsZXZlbCB0cmlnZ2VyZWQgaW50ZXJydXB0cyBidXQgZm9yIGVkZ2UgdHJpZ2dlcmVkCisJICogaW50ZXJydXB0cyB0b28uIEluIGFueSBjYXNlIFhlbiBhbHdheXMgaG9ub3JzIHRoZSBlb2kgbWVjaGFuaXNtLAorCSAqIG5vdCBpbmplY3RpbmcgYW55IG1vcmUgcGlycXMgb2YgdGhlIHNhbWUga2luZCBpZiB0aGUgZmlyc3Qgb25lCisJICogaGFzbid0IHJlY2VpdmVkIGFuIGVvaSB5ZXQuIFRoZXJlZm9yZSB1c2luZyB0aGUgZmFzdGVvaSBoYW5kbGVyCisJICogaXMgdGhlIHJpZ2h0IGNob2ljZSBlaXRoZXIgd2F5LgorCSAqLworCWlmIChwaXJxX25lZWRzX2VvaShpcnEpKQorCQlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZ4ZW5fcGlycV9jaGlwLAorCQkJCWhhbmRsZV9mYXN0ZW9pX2lycSwgbmFtZSk7CisJZWxzZQorCQlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZ4ZW5fcGlycV9jaGlwLAorCQkJCWhhbmRsZV9lZGdlX2lycSwgbmFtZSk7CisKIG91dDoKIAlzcGluX3VubG9jaygmaXJxX21hcHBpbmdfdXBkYXRlX2xvY2spOwogCkBAIC02ODAsNyArNzEwLDggQEAKIH0KIAogaW50IHhlbl9iaW5kX3BpcnFfbXNpX3RvX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgbXNpX2Rlc2MgKm1zaWRlc2MsCi0JCQkgICAgIGludCBwaXJxLCBpbnQgdmVjdG9yLCBjb25zdCBjaGFyICpuYW1lKQorCQkJICAgICBpbnQgcGlycSwgaW50IHZlY3RvciwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgZG9taWRfdCBkb21pZCkKIHsKIAlpbnQgaXJxLCByZXQ7CiAKQEAgLTY5MCwxMCArNzIxLDEwIEBACiAJaWYgKGlycSA9PSAtMSkKIAkJZ290byBvdXQ7CiAKLQlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZ4ZW5fcGlycV9jaGlwLCBoYW5kbGVfbGV2ZWxfaXJxLAotCQkJCSAgICAgIG5hbWUpOworCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJnhlbl9waXJxX2NoaXAsIGhhbmRsZV9lZGdlX2lycSwKKwkJCW5hbWUpOwogCi0JeGVuX2lycV9pbmZvX3BpcnFfaW5pdChpcnEsIDAsIHBpcnEsIDAsIHZlY3RvciwgMCk7CisJeGVuX2lycV9pbmZvX3BpcnFfaW5pdChpcnEsIDAsIHBpcnEsIDAsIHZlY3RvciwgZG9taWQsIDApOwogCXJldCA9IGlycV9zZXRfbXNpX2Rlc2MoaXJxLCBtc2lkZXNjKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJvcl9pcnE7CkBAIC03MjIsOSArNzUzLDE2IEBACiAKIAlpZiAoeGVuX2luaXRpYWxfZG9tYWluKCkpIHsKIAkJdW5tYXBfaXJxLnBpcnEgPSBpbmZvLT51LnBpcnEucGlycTsKLQkJdW5tYXBfaXJxLmRvbWlkID0gRE9NSURfU0VMRjsKKwkJdW5tYXBfaXJxLmRvbWlkID0gaW5mby0+dS5waXJxLmRvbWlkOwogCQlyYyA9IEhZUEVSVklTT1JfcGh5c2Rldl9vcChQSFlTREVWT1BfdW5tYXBfcGlycSwgJnVubWFwX2lycSk7Ci0JCWlmIChyYykgeworCQkvKiBJZiBhbm90aGVyIGRvbWFpbiBxdWl0cyB3aXRob3V0IG1ha2luZyB0aGUgcGNpX2Rpc2FibGVfbXNpeAorCQkgKiBjYWxsLCB0aGUgWGVuIGh5cGVydmlzb3IgdGFrZXMgY2FyZSBvZiBmcmVlaW5nIHRoZSBQSVJRcworCQkgKiAoZnJlZV9kb21haW5fcGlycXMpLgorCQkgKi8KKwkJaWYgKChyYyA9PSAtRVNSQ0ggJiYgaW5mby0+dS5waXJxLmRvbWlkICE9IERPTUlEX1NFTEYpKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiZG9tYWluICVkIGRvZXMgbm90IGhhdmUgJWQgYW55bW9yZVxuIiwKKwkJCQlpbmZvLT51LnBpcnEuZG9taWQsIGluZm8tPnUucGlycS5waXJxKTsKKwkJZWxzZSBpZiAocmMpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgInVubWFwIGlycSBmYWlsZWQgJWRcbiIsIHJjKTsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC03NTksNiArNzk3LDEyIEBACiAJcmV0dXJuIGlycTsKIH0KIAorCitpbnQgeGVuX3BpcnFfZnJvbV9pcnEodW5zaWduZWQgaXJxKQoreworCXJldHVybiBwaXJxX2Zyb21faXJxKGlycSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh4ZW5fcGlycV9mcm9tX2lycSk7CiBpbnQgYmluZF9ldnRjaG5fdG9faXJxKHVuc2lnbmVkIGludCBldnRjaG4pCiB7CiAJaW50IGlycTsKQEAgLTc3Myw3ICs4MTcsNyBAQAogCQkJZ290byBvdXQ7CiAKIAkJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmeGVuX2R5bmFtaWNfY2hpcCwKLQkJCQkJICAgICAgaGFuZGxlX2Zhc3Rlb2lfaXJxLCAiZXZlbnQiKTsKKwkJCQkJICAgICAgaGFuZGxlX2VkZ2VfaXJxLCAiZXZlbnQiKTsKIAogCQl4ZW5faXJxX2luZm9fZXZ0Y2huX2luaXQoaXJxLCBldnRjaG4pOwogCX0KQEAgLTExNzksOSArMTIyMyw2IEBACiAJCQkJcG9ydCA9ICh3b3JkX2lkeCAqIEJJVFNfUEVSX0xPTkcpICsgYml0X2lkeDsKIAkJCQlpcnEgPSBldnRjaG5fdG9faXJxW3BvcnRdOwogCi0JCQkJbWFza19ldnRjaG4ocG9ydCk7Ci0JCQkJY2xlYXJfZXZ0Y2huKHBvcnQpOwotCiAJCQkJaWYgKGlycSAhPSAtMSkgewogCQkJCQlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAkJCQkJaWYgKGRlc2MpCkBAIC0xMzM3LDEwICsxMzc4LDE2IEBACiB7CiAJaW50IGV2dGNobiA9IGV2dGNobl9mcm9tX2lycShkYXRhLT5pcnEpOwogCi0JaXJxX21vdmVfbWFza2VkX2lycShkYXRhKTsKKwlpcnFfbW92ZV9pcnEoZGF0YSk7CiAKIAlpZiAoVkFMSURfRVZUQ0hOKGV2dGNobikpCi0JCXVubWFza19ldnRjaG4oZXZ0Y2huKTsKKwkJY2xlYXJfZXZ0Y2huKGV2dGNobik7Cit9CisKK3N0YXRpYyB2b2lkIG1hc2tfYWNrX2R5bmlycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCit7CisJZGlzYWJsZV9keW5pcnEoZGF0YSk7CisJYWNrX2R5bmlycShkYXRhKTsKIH0KIAogc3RhdGljIGludCByZXRyaWdnZXJfZHluaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKQEAgLTE1MDIsNiArMTU0OSwxOCBAQAogCXhlbl9wb2xsX2lycV90aW1lb3V0KGlycSwgMCAvKiBubyB0aW1lb3V0ICovKTsKIH0KIAorLyogQ2hlY2sgd2hldGhlciB0aGUgSVJRIGxpbmUgaXMgc2hhcmVkIHdpdGggb3RoZXIgZ3Vlc3RzLiAqLworaW50IHhlbl90ZXN0X2lycV9zaGFyZWQoaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxX2luZm8gKmluZm8gPSBpbmZvX2Zvcl9pcnEoaXJxKTsKKwlzdHJ1Y3QgcGh5c2Rldl9pcnFfc3RhdHVzX3F1ZXJ5IGlycV9zdGF0dXMgPSB7IC5pcnEgPSBpbmZvLT51LnBpcnEucGlycSB9OworCisJaWYgKEhZUEVSVklTT1JfcGh5c2Rldl9vcChQSFlTREVWT1BfaXJxX3N0YXR1c19xdWVyeSwgJmlycV9zdGF0dXMpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gIShpcnFfc3RhdHVzLmZsYWdzICYgWEVOSVJRU1RBVF9zaGFyZWQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoeGVuX3Rlc3RfaXJxX3NoYXJlZCk7CisKIHZvaWQgeGVuX2lycV9yZXN1bWUodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1LCBldnRjaG47CkBAIC0xNTM1LDcgKzE1OTQsOSBAQAogCS5pcnFfbWFzawkJPSBkaXNhYmxlX2R5bmlycSwKIAkuaXJxX3VubWFzawkJPSBlbmFibGVfZHluaXJxLAogCi0JLmlycV9lb2kJCT0gYWNrX2R5bmlycSwKKwkuaXJxX2FjawkJPSBhY2tfZHluaXJxLAorCS5pcnFfbWFza19hY2sJCT0gbWFza19hY2tfZHluaXJxLAorCiAJLmlycV9zZXRfYWZmaW5pdHkJPSBzZXRfYWZmaW5pdHlfaXJxLAogCS5pcnFfcmV0cmlnZ2VyCQk9IHJldHJpZ2dlcl9keW5pcnEsCiB9OwpAQCAtMTU0NSwxNCArMTYwNiwxNSBAQAogCiAJLmlycV9zdGFydHVwCQk9IHN0YXJ0dXBfcGlycSwKIAkuaXJxX3NodXRkb3duCQk9IHNodXRkb3duX3BpcnEsCi0KIAkuaXJxX2VuYWJsZQkJPSBlbmFibGVfcGlycSwKLQkuaXJxX3VubWFzawkJPSBlbmFibGVfcGlycSwKLQogCS5pcnFfZGlzYWJsZQkJPSBkaXNhYmxlX3BpcnEsCi0JLmlycV9tYXNrCQk9IGRpc2FibGVfcGlycSwKIAotCS5pcnFfYWNrCQk9IGFja19waXJxLAorCS5pcnFfbWFzawkJPSBkaXNhYmxlX2R5bmlycSwKKwkuaXJxX3VubWFzawkJPSBlbmFibGVfZHluaXJxLAorCisJLmlycV9hY2sJCT0gZW9pX3BpcnEsCisJLmlycV9lb2kJCT0gZW9pX3BpcnEsCisJLmlycV9tYXNrX2FjawkJPSBtYXNrX2Fja19waXJxLAogCiAJLmlycV9zZXRfYWZmaW5pdHkJPSBzZXRfYWZmaW5pdHlfaXJxLAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9nbnRhbGxvYy5jIGIvZHJpdmVycy94ZW4vZ250YWxsb2MuYwppbmRleCBhN2ZmZGZlLi5mNjgzMmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9nbnRhbGxvYy5jCisrKyBiL2RyaXZlcnMveGVuL2dudGFsbG9jLmMKQEAgLTQyNyw2ICs0MjcsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZ250YWxsb2Nfdm1hX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IGdudGFsbG9jX2dyZWYgKmdyZWYgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKwlpZiAoIWdyZWYpCisJCXJldHVybjsKKworCXNwaW5fbG9jaygmZ3JlZl9sb2NrKTsKKwlncmVmLT51c2VycysrOworCXNwaW5fdW5sb2NrKCZncmVmX2xvY2spOworfQorCiBzdGF0aWMgdm9pZCBnbnRhbGxvY192bWFfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJc3RydWN0IGdudGFsbG9jX2dyZWYgKmdyZWYgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKQEAgLTQ0MSw2ICs0NTIsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdudGFsbG9jX3Ztb3BzID0geworCS5vcGVuID0gZ250YWxsb2Nfdm1hX29wZW4sCiAJLmNsb3NlID0gZ250YWxsb2Nfdm1hX2Nsb3NlLAogfTsKIApAQCAtNDcxLDggKzQ4Myw2IEBACiAJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBncmVmOwogCiAJdm1hLT52bV9mbGFncyB8PSBWTV9SRVNFUlZFRDsKLQl2bWEtPnZtX2ZsYWdzIHw9IFZNX0RPTlRDT1BZOwotCXZtYS0+dm1fZmxhZ3MgfD0gVk1fUEZOTUFQIHwgVk1fUEZOX0FUX01NQVA7CiAKIAl2bWEtPnZtX29wcyA9ICZnbnRhbGxvY192bW9wczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vZ250ZGV2LmMgYi9kcml2ZXJzL3hlbi9nbnRkZXYuYwppbmRleCBiMGY5ZThmLi5mOTE0YjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9nbnRkZXYuYworKysgYi9kcml2ZXJzL3hlbi9nbnRkZXYuYwpAQCAtMzMwLDE3ICszMzAsMjYgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKK3N0YXRpYyB2b2lkIGdudGRldl92bWFfb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgZ3JhbnRfbWFwICptYXAgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKworCXByX2RlYnVnKCJnbnRkZXZfdm1hX29wZW4gJXBcbiIsIHZtYSk7CisJYXRvbWljX2luYygmbWFwLT51c2Vycyk7Cit9CisKIHN0YXRpYyB2b2lkIGdudGRldl92bWFfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJc3RydWN0IGdyYW50X21hcCAqbWFwID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CiAKLQlwcl9kZWJ1ZygiY2xvc2UgJXBcbiIsIHZtYSk7CisJcHJfZGVidWcoImdudGRldl92bWFfY2xvc2UgJXBcbiIsIHZtYSk7CiAJbWFwLT52bWEgPSBOVUxMOwogCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gTlVMTDsKIAlnbnRkZXZfcHV0X21hcChtYXApOwogfQogCiBzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdudGRldl92bW9wcyA9IHsKKwkub3BlbiA9IGdudGRldl92bWFfb3BlbiwKIAkuY2xvc2UgPSBnbnRkZXZfdm1hX2Nsb3NlLAogfTsKIApAQCAtNjUyLDcgKzY2MSwxMCBAQAogCiAJdm1hLT52bV9vcHMgPSAmZ250ZGV2X3Ztb3BzOwogCi0Jdm1hLT52bV9mbGFncyB8PSBWTV9SRVNFUlZFRHxWTV9ET05UQ09QWXxWTV9ET05URVhQQU5EfFZNX1BGTk1BUDsKKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX1JFU0VSVkVEfFZNX0RPTlRFWFBBTkQ7CisKKwlpZiAodXNlX3B0ZW1vZCkKKwkJdm1hLT52bV9mbGFncyB8PSBWTV9ET05UQ09QWXxWTV9QRk5NQVA7CiAKIAl2bWEtPnZtX3ByaXZhdGVfZGF0YSA9IG1hcDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vZ3JhbnQtdGFibGUuYyBiL2RyaXZlcnMveGVuL2dyYW50LXRhYmxlLmMKaW5kZXggMzc0NWEzMS4uZmQ3MjVjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vZ3JhbnQtdGFibGUuYworKysgYi9kcml2ZXJzL3hlbi9ncmFudC10YWJsZS5jCkBAIC00NjYsMTMgKzQ2NiwzMCBAQAogCQlpZiAobWFwX29wc1tpXS5zdGF0dXMpCiAJCQljb250aW51ZTsKIAotCQkvKiBtMnAgb3ZlcnJpZGUgb25seSBzdXBwb3J0ZWQgZm9yIEdOVE1BUF9jb250YWluc19wdGUgbWFwcGluZ3MgKi8KLQkJaWYgKCEobWFwX29wc1tpXS5mbGFncyAmIEdOVE1BUF9jb250YWluc19wdGUpKQotCQkJY29udGludWU7Ci0JCXB0ZSA9IChwdGVfdCAqKSAobWZuX3RvX3ZpcnQoUEZOX0RPV04obWFwX29wc1tpXS5ob3N0X2FkZHIpKSArCisJCWlmIChtYXBfb3BzW2ldLmZsYWdzICYgR05UTUFQX2NvbnRhaW5zX3B0ZSkgeworCQkJcHRlID0gKHB0ZV90ICopIChtZm5fdG9fdmlydChQRk5fRE9XTihtYXBfb3BzW2ldLmhvc3RfYWRkcikpICsKIAkJCQkobWFwX29wc1tpXS5ob3N0X2FkZHIgJiB+UEFHRV9NQVNLKSk7Ci0JCW1mbiA9IHB0ZV9tZm4oKnB0ZSk7Ci0JCXJldCA9IG0ycF9hZGRfb3ZlcnJpZGUobWZuLCBwYWdlc1tpXSk7CisJCQltZm4gPSBwdGVfbWZuKCpwdGUpOworCQl9IGVsc2UgeworCQkJLyogSWYgeW91IHJlYWxseSB3YW50ZWQgdG8gZG8gdGhpczoKKwkJCSAqIG1mbiA9IFBGTl9ET1dOKG1hcF9vcHNbaV0uZGV2X2J1c19hZGRyKTsKKwkJCSAqCisJCQkgKiBUaGUgcmVhc29uIHdlIGRvIG5vdCBpbXBsZW1lbnQgaXQgaXMgYi9jIG9uIHRoZQorCQkJICogdW5tYXAgcGF0aCAoZ250dGFiX3VubWFwX3JlZnMpIHdlIGhhdmUgbm8gbWVhbnMgb2YKKwkJCSAqIGNoZWNraW5nIHdoZXRoZXIgdGhlIHBhZ2UgaXMgIUdOVE1BUF9jb250YWluc19wdGUuCisJCQkgKgorCQkJICogVGhhdCBpcyB3aXRob3V0IHNvbWUgZXh0cmEgZGF0YS1zdHJ1Y3R1cmUgdG8gY2FycnkKKwkJCSAqIHRoZSBzdHJ1Y3QgcGFnZSwgYm9vbCBjbGVhcl9wdGUsIGFuZCBsaXN0X2hlYWQgbmV4dAorCQkJICogdHVwbGVzIGFuZCBkZWFsIHdpdGggYWxsb2NhdGlvbi9kZWxhbGxvY2F0aW9uLCBldGMuCisJCQkgKgorCQkJICogVGhlIHVzZXJzIG9mIHRoaXMgQVBJIHNldCB0aGUgR05UTUFQX2NvbnRhaW5zX3B0ZQorCQkJICogZmxhZyBzbyBsZXRzIGp1c3QgcmV0dXJuIG5vdCBzdXBwb3J0ZWQgdW50aWwgaXQKKwkJCSAqIGJlY29tZXMgbmVjY2Vzc2FyeSB0byBpbXBsZW1lbnQuCisJCQkgKi8KKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJfQorCQlyZXQgPSBtMnBfYWRkX292ZXJyaWRlKG1mbiwgcGFnZXNbaV0sCisJCQkJICAgICAgIG1hcF9vcHNbaV0uZmxhZ3MgJiBHTlRNQVBfY29udGFpbnNfcHRlKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtNDk0LDcgKzUxMSw3IEBACiAJCXJldHVybiByZXQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQlyZXQgPSBtMnBfcmVtb3ZlX292ZXJyaWRlKHBhZ2VzW2ldKTsKKwkJcmV0ID0gbTJwX3JlbW92ZV9vdmVycmlkZShwYWdlc1tpXSwgdHJ1ZSAvKiBjbGVhciB0aGUgUFRFICovKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vbWFuYWdlLmMgYi9kcml2ZXJzL3hlbi9tYW5hZ2UuYwppbmRleCAxYWM5NDEyLi4wYjUzNjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9tYW5hZ2UuYworKysgYi9kcml2ZXJzL3hlbi9tYW5hZ2UuYwpAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNycS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0b3BfbWFjaGluZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogCiAjaW5jbHVkZSA8eGVuL3hlbi5oPgogI2luY2x1ZGUgPHhlbi94ZW5idXMuaD4KQEAgLTY5LDkgKzcwLDkgQEAKIAogCUJVR19PTighaXJxc19kaXNhYmxlZCgpKTsKIAotCWVyciA9IHN5c2Rldl9zdXNwZW5kKFBNU0dfRlJFRVpFKTsKKwllcnIgPSBzeXNjb3JlX3N1c3BlbmQoKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAieGVuX3N1c3BlbmQ6IHN5c2Rldl9zdXNwZW5kIGZhaWxlZDogJWRcbiIsCisJCXByaW50ayhLRVJOX0VSUiAieGVuX3N1c3BlbmQ6IHN5c3RlbSBjb3JlIHN1c3BlbmQgZmFpbGVkOiAlZFxuIiwKIAkJCWVycik7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtOTUsNyArOTYsNyBAQAogCQl4ZW5fdGltZXJfcmVzdW1lKCk7CiAJfQogCi0Jc3lzZGV2X3Jlc3VtZSgpOworCXN5c2NvcmVfcmVzdW1lKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL3N5cy1oeXBlcnZpc29yLmMgYi9kcml2ZXJzL3hlbi9zeXMtaHlwZXJ2aXNvci5jCmluZGV4IDYwZjE4MjcuLjFlMGZlMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL3N5cy1oeXBlcnZpc29yLmMKKysrIGIvZHJpdmVycy94ZW4vc3lzLWh5cGVydmlzb3IuYwpAQCAtMjE1LDcgKzIxNSw3IEBACiAJLmF0dHJzID0geGVuX2NvbXBpbGVfYXR0cnMsCiB9OwogCi1pbnQgX19pbml0IHN0YXRpYyB4ZW5fY29tcGlsYXRpb25faW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgeGVuX2NvbXBpbGF0aW9uX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gc3lzZnNfY3JlYXRlX2dyb3VwKGh5cGVydmlzb3Jfa29iaiwgJnhlbl9jb21waWxhdGlvbl9ncm91cCk7CiB9CmRpZmYgLS1naXQgYS9maXJtd2FyZS9NYWtlZmlsZSBiL2Zpcm13YXJlL01ha2VmaWxlCmluZGV4IDAzODRhZmEuLjBkMTVhM2QgMTAwNjQ0Ci0tLSBhL2Zpcm13YXJlL01ha2VmaWxlCisrKyBiL2Zpcm13YXJlL01ha2VmaWxlCkBAIC0zMiw5ICszMiw5IEBACiAJCQkJCSBhZGFwdGVjL3N0YXJmaXJlX3R4LmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19BVEFSSV9EU1A1NkspICs9IGRzcDU2ay9ib290c3RyYXAuYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX0FUTV9BTUJBU1NBRE9SKSArPSBhdG1zYXIxMS5mdwotZnctc2hpcHBlZC0kKENPTkZJR19CTlgyWCkgKz0gYm54MngvYm54MngtZTEtNi4yLjUuMC5mdyBcCi0JCQkgICAgICBibngyeC9ibngyeC1lMWgtNi4yLjUuMC5mdyBcCi0JCQkgICAgICBibngyeC9ibngyeC1lMi02LjIuNS4wLmZ3Citmdy1zaGlwcGVkLSQoQ09ORklHX0JOWDJYKSArPSBibngyeC9ibngyeC1lMS02LjIuOS4wLmZ3IFwKKwkJCSAgICAgIGJueDJ4L2JueDJ4LWUxaC02LjIuOS4wLmZ3IFwKKwkJCSAgICAgIGJueDJ4L2JueDJ4LWUyLTYuMi45LjAuZncKIGZ3LXNoaXBwZWQtJChDT05GSUdfQk5YMikgKz0gYm54Mi9ibngyLW1pcHMtMDktNi4yLjFhLmZ3IFwKIAkJCSAgICAgYm54Mi9ibngyLXJ2MnAtMDktNi4wLjE3LmZ3IFwKIAkJCSAgICAgYm54Mi9ibngyLXJ2MnAtMDlheC02LjAuMTcuZncgXApkaWZmIC0tZ2l0IGEvZmlybXdhcmUvV0hFTkNFIGIvZmlybXdhcmUvV0hFTkNFCmluZGV4IDc2NDA0ZjkuLjE4MmVjYjYgMTAwNjQ0Ci0tLSBhL2Zpcm13YXJlL1dIRU5DRQorKysgYi9maXJtd2FyZS9XSEVOQ0UKQEAgLTY3OSwxNCArNjc5LDE1IEBACiAKIERyaXZlcjogYm54Mng6IEJyb2FkY29tIEV2ZXJlc3QKIAotRmlsZTogYm54MngvYm54MngtZTEtNS4yLjEzLjAuZncKLUZpbGU6IGJueDJ4L2JueDJ4LWUxaC01LjIuMTMuMC5mdworRmlsZTogYm54MngvYm54MngtZTEtNi4yLjkuMC5mdworRmlsZTogYm54MngvYm54MngtZTFoLTYuMi45LjAuZncKK0ZpbGU6IGJueDJ4L2JueDJ4LWUyLTYuMi45LjAuZncKIAogTGljZW5zZToKLSAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMTEgQnJvYWRjb20gQ29ycG9yYXRpb24KIAogICBUaGlzIGZpbGUgY29udGFpbnMgZmlybXdhcmUgZGF0YSBkZXJpdmVkIGZyb20gcHJvcHJpZXRhcnkgdW5wdWJsaXNoZWQKLSAgc291cmNlIGNvZGUsIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uLgorICBzb3VyY2UgY29kZSwgQ29weXJpZ2h0IChjKSAyMDA3LTIwMTEgQnJvYWRjb20gQ29ycG9yYXRpb24uCiAKICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIGRhdGEKICAgaW4gaGV4YWRlY2ltYWwgb3IgZXF1aXZhbGVudCBmb3JtYXQsIHByb3ZpZGVkIHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvYm54MngvYm54MngtZTEtNi4yLjUuMC5mdy5paGV4IGIvZmlybXdhcmUvYm54MngvYm54MngtZTEtNi4yLjUuMC5mdy5paGV4CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjUzNTgyLi4wMDAwMDAwCi0tLSBhL2Zpcm13YXJlL2JueDJ4L2JueDJ4LWUxLTYuMi41LjAuZncuaWhleAorKysgL2Rldi9udWxsCkBAIC0xLDk0ODMgKzAsMCBAQAotOjEwMDAwMDAwMDAwMDNCQjAwMDAwMDA2ODAwMDAwNzBDMDAwMDNDMjAyRQotOjEwMDAxMDAwMDAwMDFBRjgwMDAwNDMzMDAwMDAwMDdDMDAwMDVFMzA1MQotOjEwMDAyMDAwMDAwMDdBMkMwMDAwNUVCMDAwMDAwMEIwMDAwMEQ4RTBCNAotOjEwMDAzMDAwMDAwMDgwMjAwMDAwRDk5ODAwMDAwMDg4MDAwMTU5QzAwRAotOjEwMDA0MDAwMDAwMDM5ODgwMDAxNUE1MDAwMDAwMDkwMDAwMTkzRTA0MAotOjEwMDA1MDAwMDAwMEFCRkMwMDAxOTQ3ODAwMDAwRkZDMDAwMjQwNzgyNwotOjEwMDA2MDAwMDAwMDAwMDQwMDAyNTA3ODAyMDQwMDQ4MDAwMDAwMEY2NQotOjEwMDA3MDAwMDIwNDAwNTQwMDAwMDA0NTAyMDQwMDU4MDAwMDAwMDA4MwotOjEwMDA4MDAwMDIwNDAwNUMwMDAwMDAwNjAyMDQwMDcwMDAwMDAwMDQ4RQotOjEwMDA5MDAwMDIwNDAwNzgwMDAwMDAwMDAyMDQwMDdDMTIxNzAwMDAzNwotOjEwMDBBMDAwMDIwNDAwODAyMjE3MDAwMDAyMDQwMDg0MzIxNzAwMDBCRQotOjEwMDBCMDAwMDYwNDAwODgwMDAwMDAwNTAyMDQwMDlDMTIxNTAwMDBFMAotOjEwMDBDMDAwMDIwNDAwQTAyMjE1MDAwMDAyMDQwMEE0MzIxNTAwMDA2MgotOjEwMDBEMDAwMDYwNDAwQTgwMDAwMDAwNDAyMDQwMEI4MDIxMDAwMDA5QQotOjEwMDBFMDAwMDIwNDAwQkMwMDEwMDAwMDAyMDQwMEMwMTAxMDAwMDA1OAotOjEwMDBGMDAwMDIwNDAwQzQyMDEwMDAwMDAyMDQwMEM4MzAxMDAwMDBGOAotOjEwMDEwMDAwMDYwNDAwQ0MwMDAwMDAwNDAyMDQwMERDMDAxMDAwMDAyMwotOjEwMDExMDAwMDIwNDAwRTAxMjE0MDAwMDAyMDQwMEU0MjIxNDAwMDBCMwotOjEwMDEyMDAwMDIwNDAwRTgzMjE0MDAwMDA2MDQwMEVDMDAwMDAwMDRBMQotOjEwMDEzMDAwMDEwNDAxMjQwMDAwMDAwMDAxMDQwMTI4MDAwMDAwMDA2NwotOjEwMDE0MDAwMDEwNDAxMkMwMDAwMDAwMDAxMDQwMTMwMDAwMDAwMDA0NwotOjEwMDE1MDAwMDIwNDAwMDQwMDAwMDBGRjAyMDQwMDA4MDAwMDAwRkY4OQotOjEwMDE2MDAwMDIwNDAwMEMwMDAwMDBGRjAyMDQwMDEwMDAwMDAwRkY2OQotOjEwMDE3MDAwMDIwNDAwMTQwMDAwMDBGRjAyMDQwMDE4MDAwMDAwRkY0OQotOjEwMDE4MDAwMDIwNDAwMUMwMDAwMDBGRjAyMDQwMDIwMDAwMDAwRkYyOQotOjEwMDE5MDAwMDIwNDAwMjQwMDAwMDAzRTAyMDQwMDI4MDAwMDAwMDBDOQotOjEwMDFBMDAwMDIwNDAwMkMwMDAwMDAzRjAyMDQwMDMwMDAwMDAwM0Y2OQotOjEwMDFCMDAwMDIwNDAwMzQwMDAwMDAzRjAyMDQwMDM4MDAwMDAwMDA4OAotOjEwMDFDMDAwMDIwNDAwM0MwMDAwMDAzRjAyMDQwMDQwMDAwMDAwM0YyOQotOjEwMDFEMDAwMDIwNDAwNDQwMDAwMDAzRjAyMDQyMDA4MDAwMDAyMTE1NQotOjEwMDFFMDAwMDIwNDIwMEMwMDAwMDIwMDAyMDQyMDEwMDAwMDAyMDQ5RgotOjEwMDFGMDAwMDIwNDIwMTQwMDAwMDIxOTAyMDQyMDFDMDAwMEZGRkY2QQotOjEwMDIwMDAwMDIwNDIwMjAwMDAwRkZGRjAyMDQyMDI0MDAwMEZGRkY2MgotOjEwMDIxMDAwMDIwNDIwMjgwMDAwRkZGRjA2MDQyMDM4MDAwMDAwODBCMAotOjEwMDIyMDAwMDIwNDIyMzgwN0ZGRkZGRjAyMDQyMjNDMDAwMDAwM0ZDNwotOjEwMDIzMDAwMDIwNDIyNDAwN0ZGRkZGRjAyMDQyMjQ0MDAwMDAwMEZENwotOjEwMDI0MDAwMDEwNDIyNDgwMDAwMDAwMDAxMDQyMjRDMDAwMDAwMDBDQwotOjEwMDI1MDAwMDEwNDIyNTAwMDAwMDAwMDAxMDQyMjU0MDAwMDAwMDBBQwotOjEwMDI2MDAwMDEwNDIyNTgwMDAwMDAwMDAxMDQyMjVDMDAwMDAwMDA4QwotOjEwMDI3MDAwMDEwNDIyNjAwMDAwMDAwMDAxMDQyMjY0MDAwMDAwMDA2QwotOjEwMDI4MDAwMDEwNDIyNjgwMDAwMDAwMDAxMDQyMjZDMDAwMDAwMDA0QwotOjEwMDI5MDAwMDEwNDIyNzAwMDAwMDAwMDAxMDQyMjc0MDAwMDAwMDAyQwotOjEwMDJBMDAwMDEwNDIyNzgwMDAwMDAwMDAxMDQyMjdDMDAwMDAwMDAwQwotOjEwMDJCMDAwMDIwNDI0QkMwMDAwMDAwMTBDMDQyMDAwMDAwMDAzRTgzQwotOjEwMDJDMDAwMEEwNDIwMDAwMDAwMDAwMTBCMDQyMDAwMDAwMDAwMEFDNgotOjEwMDJEMDAwMDYwNTQwMDAwMDAwMEQwMDAyMDUwMDQ0MDAwMDAwMjA1QgotOjEwMDJFMDAwMDIwNTAwNDgwMDAwMDAzMjAyMDUwMDkwMDIxNTAwMjBCRgotOjEwMDJGMDAwMDIwNTAwOTQwMjE1MDAyMDAyMDUwMDk4MDAwMDAwMzA1RAotOjEwMDMwMDAwMDIwNTAwOUMwODEwMDAwMDAyMDUwMEEwMDAwMDAwMzM1OAotOjEwMDMxMDAwMDIwNTAwQTQwMDAwMDAzMDAyMDUwMEE4MDAwMDAwMzEyMgotOjEwMDMyMDAwMDIwNTAwQUMwMDAwMDAwMjAyMDUwMEIwMDAwMDAwMDU1QwotOjEwMDMzMDAwMDIwNTAwQjQwMDAwMDAwNjAyMDUwMEI4MDAwMDAwMDIzQgotOjEwMDM0MDAwMDIwNTAwQkMwMDAwMDAwMjAyMDUwMEMwMDAwMDAwMDAyMQotOjEwMDM1MDAwMDIwNTAwQzQwMDAwMDAwNTAyMDUwMEM4MDAwMDAwMDJGQwotOjEwMDM2MDAwMDIwNTAwQ0MwMDAwMDAwMjAyMDUwMEQwMDAwMDAwMDJERgotOjEwMDM3MDAwMDIwNTAwRDQwMDAwMDAwMTAyMDUwMTE0MDAwMDAwMDE4NAotOjEwMDM4MDAwMDIwNTAxMUMwMDAwMDAwMTAyMDUwMTIwMDAwMDAwMDIxRQotOjEwMDM5MDAwMDIwNTAyMDQwMDAwMDAwMTAyMDUwMjBDMDAwMDAwNDBGQQotOjEwMDNBMDAwMDIwNTAyMTAwMDAwMDA0MDAyMDUwMjFDMDAwMDAwMjBBRgotOjEwMDNCMDAwMDIwNTAyMjAwMDAwMDAxMzAyMDUwMjI0MDAwMDAwMjBCNAotOjEwMDNDMDAwMDYwNTAyNDAwMDAwMDAwQTA0MDUwMjgwMDAyMDAwMDAyQgotOjEwMDNEMDAwMDIwNTAwNTAwMDAwMDAwNzAyMDUwMDU0MDAwMDAwMDc1RAotOjEwMDNFMDAwMDIwNTAwNTgwMDAwMDAwMDAyMDUwMDVDMDAwMDAwMDg0MwotOjEwMDNGMDAwMDYwNTAwNjAwMDAwMDAwNDAyMDUwMEQ4MDAwMDAwMDZBOQotOjEwMDQwMDAwMDIwNTAwRTAwMDAwMDAwRDAyMDUwMEU0MDAwMDAwMkRFMAotOjEwMDQxMDAwMDIwNTAwRTgwMDAwMDAwMDAyMDUwMEVDMDAwMDAwMjBEQQotOjEwMDQyMDAwMDIwNTAwRjAwMDAwMDAwMDAyMDUwMEY0MDAwMDAwMjBCQQotOjEwMDQzMDAwMDIwNTAwRjgwMDAwMDAwMDAyMDUwMEZDMDAwMDAwMjA5QQotOjEwMDQ0MDAwMDIwNTAwMDQwMDAwMDAwMTAyMDUwMDA4MDAwMDAwMDE5MAotOjEwMDQ1MDAwMDIwNTAwMEMwMDAwMDAwMTAyMDUwMDEwMDAwMDAwMDE3MAotOjEwMDQ2MDAwMDIwNTAwMTQwMDAwMDAwMTAyMDUwMDE4MDAwMDAwMDE1MAotOjEwMDQ3MDAwMDIwNTAwMUMwMDAwMDAwMTAyMDUwMDIwMDAwMDAwMDEzMAotOjEwMDQ4MDAwMDIwNTAwMjQwMDAwMDAwMTAyMDUwMDI4MDAwMDAwMDExMAotOjEwMDQ5MDAwMDIwNTAwMkMwMDAwMDAwMTAyMDUwMDMwMDAwMDAwMDFGMAotOjEwMDRBMDAwMDIwNTAwMzQwMDAwMDAwMTAyMDUwMDM4MDAwMDAwMDFEMAotOjEwMDRCMDAwMDIwNTAwM0MwMDAwMDAwMTAyMDUwMDQwMDAwMDAwMDFCMAotOjEwMDRDMDAwMDQwNjEwMDAwMjAwMDAyMDAyMDYwMERDMDAwMDAwMDEwQgotOjEwMDREMDAwMDEwNjAwRDgwMDAwMDAwMDA0MDYwMjAwMDAwMzAyMjAwQwotOjEwMDRFMDAwMDIwNjAwREMwMDAwMDAwMDAyMDYwMDY4MDAwMDAwQjgwMAotOjEwMDRGMDAwMDIwNjAwNzgwMDAwMDExNDAxMDYwMEI4MDAwMDAwMDBBOAotOjEwMDUwMDAwMDEwNjAwQzgwMDAwMDAwMDAyMDYwMDZDMDAwMDAwQjhGMAotOjEwMDUxMDAwMDIwNjAwN0MwMDAwMDExNDAxMDYwMEJDMDAwMDAwMDA3RgotOjEwMDUyMDAwMDEwNjAwQ0MwMDAwMDAwMDA3MTgwNDAwMDA3QjAwMDA1QQotOjEwMDUzMDAwMDgxODA3NjAwMDE0MDIyMzA3MUMwMDAwMkEwNDAwMDBBQQotOjEwMDU0MDAwMDcxQzgwMDAzMjExMEE4MjA3MUQwMDAwMUUwQzE3MDdDRAotOjEwMDU1MDAwMDgxRDQ1NTA1NzU2MDIyNTAxMTgwMDAwMDAwMDAwMDBGNAotOjEwMDU2MDAwMDExODAwMDQwMDAwMDAwMDAxMTgwMDA4MDAwMDAwMDA0RAotOjEwMDU3MDAwMDExODAwMEMwMDAwMDAwMDAxMTgwMDEwMDAwMDAwMDAyRAotOjEwMDU4MDAwMDExODAwMTQwMDAwMDAwMDAyMTgwMDIwMDAwMDAwMDEwMwotOjEwMDU5MDAwMDIxODAwMjQwMDAwMDAwMjAyMTgwMDI4MDAwMDAwMDNENgotOjEwMDVBMDAwMDIxODAwMkMwMDAwMDAwMDAyMTgwMDMwMDAwMDAwMDRCNwotOjEwMDVCMDAwMDIxODAwMzQwMDAwMDAwMTAyMTgwMDM4MDAwMDAwMDA5QQotOjEwMDVDMDAwMDIxODAwM0MwMDAwMDAwMTAyMTgwMDQwMDAwMDAwMDQ3NgotOjEwMDVEMDAwMDIxODAwNDQwMDAwMDAwMDAyMTgwMDQ4MDAwMDAwMDE1QQotOjEwMDVFMDAwMDIxODAwNEMwMDAwMDAwMzAyMTgwMDUwMDAwMDAwMDAzOAotOjEwMDVGMDAwMDIxODAwNTQwMDAwMDAwMTAyMTgwMDU4MDAwMDAwMDQxNgotOjEwMDYwMDAwMDIxODAwNUMwMDAwMDAwMDAyMTgwMDYwMDAwMDAwMDFGOQotOjEwMDYxMDAwMDIxODAwNjQwMDAwMDAwMzAyMTgwMDY4MDAwMDAwMDBENwotOjEwMDYyMDAwMDIxODAwNkMwMDAwMDAwMTAyMTgwMDcwMDAwMDAwMDRCNQotOjEwMDYzMDAwMDIxODAwNzQwMDAwMDAwMDAyMTgwMDc4MDAwMDAwMDQ5NgotOjEwMDY0MDAwMDIxODAwN0MwMDAwMDAwMzA2MTgwMDgwMDAwMDAwMDI3MQotOjEwMDY1MDAwMDIxODAwQTQwMDAwM0ZGRjAyMTgwMEE4MDAwMDAzRkZEQQotOjEwMDY2MDAwMDIxODAyMjQwMDAwMDAwMDAyMTgwMjM0MDAwMDAwMDBGQQotOjEwMDY3MDAwMDIxODAyNEMwMDAwMDAwMDAyMTgwMkU0MDAwMDAwRkYxMwotOjEwMDY4MDAwMDYxODEwMDAwMDAwMDQwMDAyMUI4QkMwMDAwMDAwMDFDRgotOjEwMDY5MDAwMDIxQjgwMDAwMDAwMDAzNDAyMUI4MDQwMDAwMDAwMTg5NAotOjEwMDZBMDAwMDIxQjgwODAwMDAwMDAwQzAyMUI4MEMwMDAwMDAwMjBBNAotOjEwMDZCMDAwMEMxQjgzMDAwMDA3QTEyMDBBMUI4MzAwMDAwMDAxMzhFNwotOjEwMDZDMDAwMEIxQjgzMDAwMDAwMTM4ODBBMUI4MzQwMDAwMDAwMDBGRQotOjEwMDZEMDAwMEMxQjgzNDAwMDAwMDFGNDBCMUI4MzQwMDAwMDAwMDU0RAotOjEwMDZFMDAwMDIxQjgzODAwMDA3QTEyMDAyMUI4M0MwMDAwMDAxRjRDRAotOjEwMDZGMDAwMDYxQTEwMDAwMDAwMDI3MzA0MUExOUNDMDAwMTAyMjcyOAotOjEwMDcwMDAwMDYxQTIwMDgwMDAwMDBDODA2MUEyMDAwMDAwMDAwMDI5NwotOjEwMDcxMDAwMDQxQTQ5OTgwMDA0MDIyODA2MUEyRTI4MDAwMDAwMDIzNAotOjEwMDcyMDAwMDYxQTJFMjAwMDAwMDAwMjA2MUEwODAwMDAwMDAwMDIyRgotOjEwMDczMDAwMDYxQTA4MDgwMDAwMDAwNDA2MUEwODE4MDAwMDAwMDI0MwotOjEwMDc0MDAwMDQxQTA4QjAwMDAyMDIyQzA2MUEyRkQwMDAwMDAwMDY3RQotOjEwMDc1MDAwMDQxQTJGRTgwMDAyMDIyRTA0MUEyRkMwMDAwNDAyMzBFRgotOjEwMDc2MDAwMDQxQTMwMDAwMDAxMDIzNDA2MUEzMDA0MDAwMDAwMDNBRAotOjEwMDc3MDAwMDQxQTMwMTAwMDAxMDIzNTA2MUEzMDE0MDAwMDAwMDM3QwotOjEwMDc4MDAwMDQxQTMwMjAwMDAxMDIzNjA2MUEzMDI0MDAwMDAwMDM0QgotOjEwMDc5MDAwMDQxQTMwMzAwMDAxMDIzNzA2MUEzMDM0MDAwMDAwMDMxQQotOjEwMDdBMDAwMDQxQTMwNDAwMDAxMDIzODA2MUEzMDQ0MDAwMDAwMDNFOQotOjEwMDdCMDAwMDQxQTMwNTAwMDAxMDIzOTA2MUEzMDU0MDAwMDAwMDNCOAotOjEwMDdDMDAwMDQxQTMwNjAwMDAxMDIzQTA2MUEzMDY0MDAwMDAwMDM4NwotOjEwMDdEMDAwMDQxQTMwNzAwMDAxMDIzQjA2MUEzMDc0MDAwMDAwMDM1NgotOjEwMDdFMDAwMDQxQTMwODAwMDAxMDIzQzA2MUEzMDg0MDAwMDAwMDMyNQotOjEwMDdGMDAwMDQxQTMwOTAwMDAxMDIzRDA2MUEzMDk0MDAwMDAwMDNGNAotOjEwMDgwMDAwMDQxQTMwQTAwMDAxMDIzRTA2MUEzMEE0MDAwMDAwMDNDMgotOjEwMDgxMDAwMDQxQTMwQjAwMDAxMDIzRjA2MUEzMEI0MDAwMDAwMDM5MQotOjEwMDgyMDAwMDQxQTMwQzAwMDAxMDI0MDA2MUEzMEM0MDAwMDAwMDM2MAotOjEwMDgzMDAwMDQxQTMwRDAwMDAxMDI0MTA2MUEzMEQ0MDAwMDAwMDMyRgotOjEwMDg0MDAwMDQxQTMwRTAwMDAxMDI0MjA2MUEzMEU0MDAwMDAwMDNGRQotOjEwMDg1MDAwMDQxQTMwRjAwMDAxMDI0MzA2MUEzMEY0MDAwMDAwMDNDRAotOjEwMDg2MDAwMDQxQTMxMDAwMDAxMDI0NDA2MUEzMTA0MDAwMDAwMDM5QQotOjEwMDg3MDAwMDQxQTMxMTAwMDAxMDI0NTA2MUEzMTE0MDAwMDAwMDM2OQotOjEwMDg4MDAwMDQxQTMxMjAwMDAxMDI0NjA2MUEzMTI0MDAwMDAwMDMzOAotOjEwMDg5MDAwMDQxQTMxMzAwMDAxMDI0NzA2MUEzMTM0MDAwMDAwMDMwNwotOjEwMDhBMDAwMDQxQTMxNDAwMDAxMDI0ODA2MUEzMTQ0MDAwMDAwMDNENgotOjEwMDhCMDAwMDQxQTMxNTAwMDAxMDI0OTA2MUEzMTU0MDAwMDAwMDNBNQotOjEwMDhDMDAwMDQxQTMxNjAwMDAxMDI0QTA2MUEzMTY0MDAwMDAwMDM3NAotOjEwMDhEMDAwMDQxQTMxNzAwMDAxMDI0QjA2MUEzMTc0MDAwMDAwMDM0MwotOjEwMDhFMDAwMDQxQTMxODAwMDAxMDI0QzA2MUEzMTg0MDAwMDAwMDMxMgotOjEwMDhGMDAwMDQxQTMxOTAwMDAxMDI0RDA2MUEzMTk0MDAwMDAwMDNFMQotOjEwMDkwMDAwMDQxQTMxQTAwMDAxMDI0RTA2MUEzMUE0MDAwMDAwMDNBRgotOjEwMDkxMDAwMDQxQTMxQjAwMDAxMDI0RjA2MUEzMUI0MDAwMDAwMDM3RQotOjEwMDkyMDAwMDQxQTMxQzAwMDAxMDI1MDA2MUEzMUM0MDAwMDAwMDM0RAotOjEwMDkzMDAwMDQxQTMxRDAwMDAxMDI1MTA2MUEzMUQ0MDAwMDAwMDMxQwotOjEwMDk0MDAwMDQxQTMxRTAwMDAxMDI1MjA2MUEzMUU0MDAwMDAwMDNFQgotOjEwMDk1MDAwMDQxQTMxRjAwMDAxMDI1MzA2MUEzMUY0MDAwMDAwMDNCQQotOjEwMDk2MDAwMDQxQTMyMDAwMDAxMDI1NDA2MUEzMjA0MDAwMDAwMDM4NwotOjEwMDk3MDAwMDQxQTMyMTAwMDAxMDI1NTA2MUEzMjE0MDAwMDAwMDM1NgotOjEwMDk4MDAwMDQxQTMyMjAwMDAxMDI1NjA2MUEzMjI0MDAwMDAwMDMyNQotOjEwMDk5MDAwMDQxQTMyMzAwMDAxMDI1NzA2MUEzMjM0MDAwMDAwMDNGNAotOjEwMDlBMDAwMDQxQTMyNDAwMDAxMDI1ODA2MUEzMjQ0MDAwMDAwMDNDMwotOjEwMDlCMDAwMDQxQTMyNTAwMDAxMDI1OTA2MUEzMjU0MDAwMDAwMDM5MgotOjEwMDlDMDAwMDQxQTMyNjAwMDAxMDI1QTA2MUEzMjY0MDAwMDAwMDM2MQotOjEwMDlEMDAwMDQxQTMyNzAwMDAxMDI1QjA2MUEzMjc0MDAwMDAwMDMzMAotOjEwMDlFMDAwMDQxQTMyODAwMDAxMDI1QzA2MUEzMjg0MDAwMDAwMDNGRgotOjEwMDlGMDAwMDQxQTMyOTAwMDAxMDI1RDA2MUEzMjk0MDAwMDAwMDNDRQotOjEwMEEwMDAwMDQxQTMyQTAwMDAxMDI1RTA2MUEzMkE0MDAwMDAwMDM5QwotOjEwMEExMDAwMDQxQTMyQjAwMDAxMDI1RjA2MUEzMkI0MDAwMDAwMDM2QgotOjEwMEEyMDAwMDQxQTMyQzAwMDAxMDI2MDA2MUEzMkM0MDAwMDAwMDMzQQotOjEwMEEzMDAwMDQxQTMyRDAwMDAxMDI2MTA2MUEzMkQ0MDAwMDAwMDMwOQotOjEwMEE0MDAwMDQxQTMyRTAwMDAxMDI2MjA2MUEzMkU0MDAwMDAwMDNEOAotOjEwMEE1MDAwMDQxQTMyRjAwMDAxMDI2MzA2MUEzMkY0MDAwMDAwMDNBNwotOjEwMEE2MDAwMDQxQTMzMDAwMDAxMDI2NDA2MUEzMzA0MDAwMDAwMDM3NAotOjEwMEE3MDAwMDQxQTMzMTAwMDAxMDI2NTA2MUEzMzE0MDAwMDAwMDM0MwotOjEwMEE4MDAwMDQxQTMzMjAwMDAxMDI2NjA2MUEzMzI0MDAwMDAwMDMxMgotOjEwMEE5MDAwMDQxQTMzMzAwMDAxMDI2NzA2MUEzMzM0MDAwMDAwMDNFMQotOjEwMEFBMDAwMDQxQTMzNDAwMDAxMDI2ODA2MUEzMzQ0MDAwMDAwMDNCMAotOjEwMEFCMDAwMDQxQTMzNTAwMDAxMDI2OTA2MUEzMzU0MDAwMDAwMDM3RgotOjEwMEFDMDAwMDQxQTMzNjAwMDAxMDI2QTA2MUEzMzY0MDAwMDAwMDM0RQotOjEwMEFEMDAwMDQxQTMzNzAwMDAxMDI2QjA2MUEzMzc0MDAwMDAwMDMxRAotOjEwMEFFMDAwMDQxQTMzODAwMDAxMDI2QzA2MUEzMzg0MDAwMDAwMDNFQwotOjEwMEFGMDAwMDQxQTMzOTAwMDAxMDI2RDA2MUEzMzk0MDAwMDAwMDNCQgotOjEwMEIwMDAwMDQxQTMzQTAwMDAxMDI2RTA2MUEzM0E0MDAwMDAwMDM4OQotOjEwMEIxMDAwMDQxQTMzQjAwMDAxMDI2RjA2MUEzM0I0MDAwMDAwMDM1OAotOjEwMEIyMDAwMDQxQTMzQzAwMDAxMDI3MDA2MUEzM0M0MDAwMDAwMDMyNwotOjEwMEIzMDAwMDQxQTMzRDAwMDAxMDI3MTA2MUEzM0Q0MDAwMDAwMDNGNgotOjEwMEI0MDAwMDQxQTMzRTAwMDAxMDI3MjA2MUEzM0U0MDAwMDAwMDNDNQotOjEwMEI1MDAwMDQxQTMzRjAwMDAxMDI3MzA2MUEzM0Y0MDAwMDAwMDM5NAotOjEwMEI2MDAwMDQxQTM0MDAwMDAxMDI3NDA2MUEzNDA0MDAwMDAwMDM2MQotOjEwMEI3MDAwMDQxQTM0MTAwMDAxMDI3NTA2MUEzNDE0MDAwMDAwMDMzMAotOjEwMEI4MDAwMDQxQTM0MjAwMDAxMDI3NjA2MUEzNDI0MDAwMDAwMDNGRgotOjEwMEI5MDAwMDQxQTM0MzAwMDAxMDI3NzA2MUEzNDM0MDAwMDAwMDNDRQotOjEwMEJBMDAwMDQxQTM0NDAwMDAxMDI3ODA2MUEzNDQ0MDAwMDAwMDM5RAotOjEwMEJCMDAwMDQxQTM0NTAwMDAxMDI3OTA2MUEzNDU0MDAwMDAwMDM2QwotOjEwMEJDMDAwMDQxQTM0NjAwMDAxMDI3QTA2MUEzNDY0MDAwMDAwMDMzQgotOjEwMEJEMDAwMDQxQTM0NzAwMDAxMDI3QjA2MUEzNDc0MDAwMDAwMDMwQQotOjEwMEJFMDAwMDQxQTM0ODAwMDAxMDI3QzA2MUEzNDg0MDAwMDAwMDNEOQotOjEwMEJGMDAwMDQxQTM0OTAwMDAxMDI3RDA2MUEzNDk0MDAwMDAwMDNBOAotOjEwMEMwMDAwMDQxQTM0QTAwMDAxMDI3RTA2MUEzNEE0MDAwMDAwMDM3NgotOjEwMEMxMDAwMDQxQTM0QjAwMDAxMDI3RjA2MUEzNEI0MDAwMDAwMDM0NQotOjEwMEMyMDAwMDQxQTM0QzAwMDAxMDI4MDA2MUEzNEM0MDAwMDAwMDMxNAotOjEwMEMzMDAwMDQxQTM0RDAwMDAxMDI4MTA2MUEzNEQ0MDAwMDAwMDNFMwotOjEwMEM0MDAwMDQxQTM0RTAwMDAxMDI4MjA2MUEzNEU0MDAwMDAwMDNCMgotOjEwMEM1MDAwMDQxQTM0RjAwMDAxMDI4MzA2MUEzNEY0MDAwMDAwMDM4MQotOjEwMEM2MDAwMDQxQTM1MDAwMDAxMDI4NDA2MUEzNTA0MDAwMDAwMDM0RQotOjEwMEM3MDAwMDQxQTM1MTAwMDAxMDI4NTA2MUEzNTE0MDAwMDAwMDMxRAotOjEwMEM4MDAwMDQxQTM1MjAwMDAxMDI4NjA2MUEzNTI0MDAwMDAwMDNFQwotOjEwMEM5MDAwMDQxQTM1MzAwMDAxMDI4NzA2MUEzNTM0MDAwMDAwMDNCQgotOjEwMENBMDAwMDQxQTM1NDAwMDAxMDI4ODA2MUEzNTQ0MDAwMDAwMDM4QQotOjEwMENCMDAwMDQxQTM1NTAwMDAxMDI4OTA2MUEzNTU0MDAwMDAwMDM1OQotOjEwMENDMDAwMDQxQTM1NjAwMDAxMDI4QTA2MUEzNTY0MDAwMDAwMDMyOAotOjEwMENEMDAwMDQxQTM1NzAwMDAxMDI4QjA2MUEzNTc0MDAwMDAwMDNGNwotOjEwMENFMDAwMDQxQTM1ODAwMDAxMDI4QzA2MUEzNTg0MDAwMDAwMDNDNgotOjEwMENGMDAwMDQxQTM1OTAwMDAxMDI4RDA2MUEzNTk0MDAwMDAwMDM5NQotOjEwMEQwMDAwMDQxQTM1QTAwMDAxMDI4RTA2MUEzNUE0MDAwMDAwMDM2MwotOjEwMEQxMDAwMDQxQTM1QjAwMDAxMDI4RjA2MUEzNUI0MDAwMDAwMDMzMgotOjEwMEQyMDAwMDQxQTM1QzAwMDAxMDI5MDA2MUEzNUM0MDAwMDAwMDMwMQotOjEwMEQzMDAwMDQxQTM1RDAwMDAxMDI5MTA2MUEzNUQ0MDAwMDAwMDNEMAotOjEwMEQ0MDAwMDQxQTM1RTAwMDAxMDI5MjA2MUEzNUU0MDAwMDAwMDM5RgotOjEwMEQ1MDAwMDQxQTM1RjAwMDAxMDI5MzA2MUEzNUY0MDAwMDAwMDM2RQotOjEwMEQ2MDAwMDQxQTM2MDAwMDAxMDI5NDA2MUEzNjA0MDAwMDAwMDMzQgotOjEwMEQ3MDAwMDQxQTM2MTAwMDAxMDI5NTA2MUEzNjE0MDAwMDAwMDMwQQotOjEwMEQ4MDAwMDQxQTM2MjAwMDAxMDI5NjA2MUEzNjI0MDAwMDAwMDNEOQotOjEwMEQ5MDAwMDQxQTM2MzAwMDAxMDI5NzA2MUEzNjM0MDAwMDAwMDNBOAotOjEwMERBMDAwMDQxQTM2NDAwMDAxMDI5ODA2MUEzNjQ0MDAwMDAwMDM3NwotOjEwMERCMDAwMDQxQTM2NTAwMDAxMDI5OTA2MUEzNjU0MDAwMDAwMDM0NgotOjEwMERDMDAwMDQxQTM2NjAwMDAxMDI5QTA2MUEzNjY0MDAwMDAwMDMxNQotOjEwMEREMDAwMDQxQTM2NzAwMDAxMDI5QjA2MUEzNjc0MDAwMDAwMDNFNAotOjEwMERFMDAwMDQxQTM2ODAwMDAxMDI5QzA2MUEzNjg0MDAwMDAwMDNCMwotOjEwMERGMDAwMDQxQTM2OTAwMDAxMDI5RDA2MUEzNjk0MDAwMDAwMDM4MgotOjEwMEUwMDAwMDQxQTM2QTAwMDAxMDI5RTA2MUEzNkE0MDAwMDAwMDM1MAotOjEwMEUxMDAwMDQxQTM2QjAwMDAxMDI5RjA2MUEzNkI0MDAwMDAwMDMxRgotOjEwMEUyMDAwMDQxQTM2QzAwMDAxMDJBMDA2MUEzNkM0MDAwMDAwMDNFRQotOjEwMEUzMDAwMDQxQTM2RDAwMDAxMDJBMTA2MUEzNkQ0MDAwMDAwMDNCRAotOjEwMEU0MDAwMDQxQTM2RTAwMDAxMDJBMjA2MUEzNkU0MDAwMDAwMDM4QwotOjEwMEU1MDAwMDQxQTM2RjAwMDAxMDJBMzA2MUEzNkY0MDAwMDAwMDM1QgotOjEwMEU2MDAwMDQxQTM3MDAwMDAxMDJBNDA2MUEzNzA0MDAwMDAwMDMyOAotOjEwMEU3MDAwMDQxQTM3MTAwMDAxMDJBNTA2MUEzNzE0MDAwMDAwMDNGNwotOjEwMEU4MDAwMDQxQTM3MjAwMDAxMDJBNjA2MUEzNzI0MDAwMDAwMDNDNgotOjEwMEU5MDAwMDQxQTM3MzAwMDAxMDJBNzA2MUEzNzM0MDAwMDAwMDM5NQotOjEwMEVBMDAwMDQxQTM3NDAwMDAxMDJBODA2MUEzNzQ0MDAwMDAwMDM2NAotOjEwMEVCMDAwMDQxQTM3NTAwMDAxMDJBOTA2MUEzNzU0MDAwMDAwMDMzMwotOjEwMEVDMDAwMDQxQTM3NjAwMDAxMDJBQTA2MUEzNzY0MDAwMDAwMDMwMgotOjEwMEVEMDAwMDQxQTM3NzAwMDAxMDJBQjA2MUEzNzc0MDAwMDAwMDNEMQotOjEwMEVFMDAwMDQxQTM3ODAwMDAxMDJBQzA2MUEzNzg0MDAwMDAwMDNBMAotOjEwMEVGMDAwMDQxQTM3OTAwMDAxMDJBRDA2MUEzNzk0MDAwMDAwMDM2RgotOjEwMEYwMDAwMDQxQTM3QTAwMDAxMDJBRTA2MUEzN0E0MDAwMDAwMDMzRAotOjEwMEYxMDAwMDQxQTM3QjAwMDAxMDJBRjA2MUEzN0I0MDAwMDAwMDMwQwotOjEwMEYyMDAwMDQxQTM3QzAwMDAxMDJCMDA2MUEzN0M0MDAwMDAwMDNEQgotOjEwMEYzMDAwMDQxQTM3RDAwMDAxMDJCMTA2MUEzN0Q0MDAwMDAwMDNBQQotOjEwMEY0MDAwMDQxQTM3RTAwMDAxMDJCMjA2MUEzN0U0MDAwMDAwMDM3OQotOjEwMEY1MDAwMDQxQTM3RjAwMDAxMDJCMzA2MUEzN0Y0MDAwMDAwMDM0OAotOjEwMEY2MDAwMDQxQTM4MDAwMDAxMDJCNDA2MUEzODA0MDAwMDAwMDMxNQotOjEwMEY3MDAwMDQxQTM4MTAwMDAxMDJCNTA2MUEzODE0MDAwMDAwMDNFNAotOjEwMEY4MDAwMDQxQTM4MjAwMDAxMDJCNjA2MUEzODI0MDAwMDAwMDNCMwotOjEwMEY5MDAwMDQxQTM4MzAwMDAxMDJCNzA2MUEzODM0MDAwMDAwMDM4MgotOjEwMEZBMDAwMDQxQTM4NDAwMDAxMDJCODA2MUEzODQ0MDAwMDAwMDM1MQotOjEwMEZCMDAwMDQxQTM4NTAwMDAxMDJCOTA2MUEzODU0MDAwMDAwMDMyMAotOjEwMEZDMDAwMDQxQTM4NjAwMDAxMDJCQTA2MUEzODY0MDAwMDAwMDNFRgotOjEwMEZEMDAwMDQxQTM4NzAwMDAxMDJCQjA2MUEzODc0MDAwMDAwMDNCRQotOjEwMEZFMDAwMDQxQTM4ODAwMDAxMDJCQzA2MUEzODg0MDAwMDAwMDM4RAotOjEwMEZGMDAwMDQxQTM4OTAwMDAxMDJCRDA2MUEzODk0MDAwMDAwMDM1QwotOjEwMTAwMDAwMDQxQTM4QTAwMDAxMDJCRTA2MUEzOEE0MDAwMDAwMDMyQQotOjEwMTAxMDAwMDQxQTM4QjAwMDAxMDJCRjA2MUEzOEI0MDAwMDAwMDNGOQotOjEwMTAyMDAwMDQxQTM4QzAwMDAxMDJDMDA2MUEzOEM0MDAwMDAwMDNDOAotOjEwMTAzMDAwMDQxQTM4RDAwMDAxMDJDMTA2MUEzOEQ0MDAwMDAwMDM5NwotOjEwMTA0MDAwMDQxQTM4RTAwMDAxMDJDMjA2MUEzOEU0MDAwMDAwMDM2NgotOjEwMTA1MDAwMDQxQTM4RjAwMDAxMDJDMzA2MUEzOEY0MDAwMDAwMDMzNQotOjEwMTA2MDAwMDQxQTM5MDAwMDAxMDJDNDA2MUEzOTA0MDAwMDAwMDMwMgotOjEwMTA3MDAwMDQxQTM5MTAwMDAxMDJDNTA2MUEzOTE0MDAwMDAwMDNEMQotOjEwMTA4MDAwMDQxQTM5MjAwMDAxMDJDNjA2MUEzOTI0MDAwMDAwMDNBMAotOjEwMTA5MDAwMDQxQTM5MzAwMDAxMDJDNzA2MUEzOTM0MDAwMDAwMDM2RgotOjEwMTBBMDAwMDQxQTM5NDAwMDAxMDJDODA2MUEzOTQ0MDAwMDAwMDMzRQotOjEwMTBCMDAwMDQxQTM5NTAwMDAxMDJDOTA2MUEzOTU0MDAwMDAwMDMwRAotOjEwMTBDMDAwMDQxQTM5NjAwMDAxMDJDQTA2MUEzOTY0MDAwMDAwMDNEQwotOjEwMTBEMDAwMDQxQTM5NzAwMDAxMDJDQjA2MUEzOTc0MDAwMDAwMDNBQgotOjEwMTBFMDAwMDQxQTM5ODAwMDAxMDJDQzA2MUEzOTg0MDAwMDAwMDM3QQotOjEwMTBGMDAwMDQxQTM5OTAwMDAxMDJDRDA2MUEzOTk0MDAwMDAwMDM0OQotOjEwMTEwMDAwMDQxQTM5QTAwMDAxMDJDRTA2MUEzOUE0MDAwMDAwMDMxNwotOjEwMTExMDAwMDQxQTM5QjAwMDAxMDJDRjA2MUEzOUI0MDAwMDAwMDNFNgotOjEwMTEyMDAwMDQxQTM5QzAwMDAxMDJEMDA2MUEzOUM0MDAwMDAwMDNCNQotOjEwMTEzMDAwMDQxQTM5RDAwMDAxMDJEMTA2MUEzOUQ0MDAwMDAwMDM4NAotOjEwMTE0MDAwMDQxQTM5RTAwMDAxMDJEMjA2MUEzOUU0MDAwMDAwMDM1MwotOjEwMTE1MDAwMDQxQTM5RjAwMDAxMDJEMzA2MUEzOUY0MDAwMDAwMDMyMgotOjEwMTE2MDAwMDQxQTNBMDAwMDAxMDJENDA2MUEzQTA0MDAwMDAwMDNFRgotOjEwMTE3MDAwMDQxQTNBMTAwMDAxMDJENTA2MUEzQTE0MDAwMDAwMDNCRQotOjEwMTE4MDAwMDQxQTNBMjAwMDAxMDJENjA2MUEzQTI0MDAwMDAwMDM4RAotOjEwMTE5MDAwMDQxQTNBMzAwMDAxMDJENzA2MUEzQTM0MDAwMDAwMDM1QwotOjEwMTFBMDAwMDQxQTNBNDAwMDAxMDJEODA2MUEzQTQ0MDAwMDAwMDMyQgotOjEwMTFCMDAwMDQxQTNBNTAwMDAxMDJEOTA2MUEzQTU0MDAwMDAwMDNGQQotOjEwMTFDMDAwMDQxQTNBNjAwMDAxMDJEQTA2MUEzQTY0MDAwMDAwMDNDOQotOjEwMTFEMDAwMDQxQTNBNzAwMDAxMDJEQjA2MUEzQTc0MDAwMDAwMDM5OAotOjEwMTFFMDAwMDQxQTNBODAwMDAxMDJEQzA2MUEzQTg0MDAwMDAwMDM2NwotOjEwMTFGMDAwMDQxQTNBOTAwMDAxMDJERDA2MUEzQTk0MDAwMDAwMDMzNgotOjEwMTIwMDAwMDQxQTNBQTAwMDAxMDJERTA2MUEzQUE0MDAwMDAwMDMwNAotOjEwMTIxMDAwMDQxQTNBQjAwMDAxMDJERjA2MUEzQUI0MDAwMDAwMDNEMwotOjEwMTIyMDAwMDQxQTNBQzAwMDAxMDJFMDA2MUEzQUM0MDAwMDAwMDNBMgotOjEwMTIzMDAwMDQxQTNBRDAwMDAxMDJFMTA2MUEzQUQ0MDAwMDAwMDM3MQotOjEwMTI0MDAwMDQxQTNBRTAwMDAxMDJFMjA2MUEzQUU0MDAwMDAwMDM0MAotOjEwMTI1MDAwMDQxQTNBRjAwMDAxMDJFMzA2MUEzQUY0MDAwMDAwMDMwRgotOjEwMTI2MDAwMDQxQTNCMDAwMDAxMDJFNDA2MUEzQjA0MDAwMDAwMDNEQwotOjEwMTI3MDAwMDQxQTNCMTAwMDAxMDJFNTA2MUEzQjE0MDAwMDAwMDNBQgotOjEwMTI4MDAwMDQxQTNCMjAwMDAxMDJFNjA2MUEzQjI0MDAwMDAwMDM3QQotOjEwMTI5MDAwMDQxQTNCMzAwMDAxMDJFNzA2MUEzQjM0MDAwMDAwMDM0OQotOjEwMTJBMDAwMDQxQTNCNDAwMDAxMDJFODA2MUEzQjQ0MDAwMDAwMDMxOAotOjEwMTJCMDAwMDQxQTNCNTAwMDAxMDJFOTA2MUEzQjU0MDAwMDAwMDNFNwotOjEwMTJDMDAwMDQxQTNCNjAwMDAxMDJFQTA2MUEzQjY0MDAwMDAwMDNCNgotOjEwMTJEMDAwMDQxQTNCNzAwMDAxMDJFQjA2MUEzQjc0MDAwMDAwMDM4NQotOjEwMTJFMDAwMDQxQTNCODAwMDAxMDJFQzA2MUEzQjg0MDAwMDAwMDM1NAotOjEwMTJGMDAwMDQxQTNCOTAwMDAxMDJFRDA2MUEzQjk0MDAwMDAwMDMyMwotOjEwMTMwMDAwMDQxQTNCQTAwMDAxMDJFRTA2MUEzQkE0MDAwMDAwMDNGMQotOjEwMTMxMDAwMDQxQTNCQjAwMDAxMDJFRjA2MUEzQkI0MDAwMDAwMDNDMAotOjEwMTMyMDAwMDQxQTNCQzAwMDAxMDJGMDA2MUEzQkM0MDAwMDAwMDM4RgotOjEwMTMzMDAwMDQxQTNCRDAwMDAxMDJGMTA2MUEzQkQ0MDAwMDAwMDM1RQotOjEwMTM0MDAwMDQxQTNCRTAwMDAxMDJGMjA2MUEzQkU0MDAwMDAwMDMyRAotOjEwMTM1MDAwMDQxQTNCRjAwMDAxMDJGMzA2MUEzQkY0MDAwMDAwMDNGQwotOjEwMTM2MDAwMDQxQTNDMDAwMDAxMDJGNDA2MUEzQzA0MDAwMDAwMDNDOQotOjEwMTM3MDAwMDQxQTNDMTAwMDAxMDJGNTA2MUEzQzE0MDAwMDAwMDM5OAotOjEwMTM4MDAwMDQxQTNDMjAwMDAxMDJGNjA2MUEzQzI0MDAwMDAwMDM2NwotOjEwMTM5MDAwMDQxQTNDMzAwMDAxMDJGNzA2MUEzQzM0MDAwMDAwMDMzNgotOjEwMTNBMDAwMDQxQTNDNDAwMDAxMDJGODA2MUEzQzQ0MDAwMDAwMDMwNQotOjEwMTNCMDAwMDQxQTNDNTAwMDAxMDJGOTA2MUEzQzU0MDAwMDAwMDNENAotOjEwMTNDMDAwMDQxQTNDNjAwMDAxMDJGQTA2MUEzQzY0MDAwMDAwMDNBMwotOjEwMTNEMDAwMDQxQTNDNzAwMDAxMDJGQjA2MUEzQzc0MDAwMDAwMDM3MgotOjEwMTNFMDAwMDQxQTNDODAwMDAxMDJGQzA2MUEzQzg0MDAwMDAwMDM0MQotOjEwMTNGMDAwMDQxQTNDOTAwMDAxMDJGRDA2MUEzQzk0MDAwMDAwMDMxMAotOjEwMTQwMDAwMDQxQTNDQTAwMDAxMDJGRTA2MUEzQ0E0MDAwMDAwMDNERQotOjEwMTQxMDAwMDQxQTNDQjAwMDAxMDJGRjA2MUEzQ0I0MDAwMDAwMDNBRAotOjEwMTQyMDAwMDQxQTNDQzAwMDAxMDMwMDA2MUEzQ0M0MDAwMDAwMDM3QgotOjEwMTQzMDAwMDQxQTNDRDAwMDAxMDMwMTA2MUEzQ0Q0MDAwMDAwMDM0QQotOjEwMTQ0MDAwMDQxQTNDRTAwMDAxMDMwMjA2MUEzQ0U0MDAwMDAwMDMxOQotOjEwMTQ1MDAwMDQxQTNDRjAwMDAxMDMwMzA2MUEzQ0Y0MDAwMDAwMDNFOAotOjEwMTQ2MDAwMDQxQTNEMDAwMDAxMDMwNDA2MUEzRDA0MDAwMDAwMDNCNQotOjEwMTQ3MDAwMDQxQTNEMTAwMDAxMDMwNTA2MUEzRDE0MDAwMDAwMDM4NAotOjEwMTQ4MDAwMDQxQTNEMjAwMDAxMDMwNjA2MUEzRDI0MDAwMDAwMDM1MwotOjEwMTQ5MDAwMDQxQTNEMzAwMDAxMDMwNzA2MUEzRDM0MDAwMDAwMDMyMgotOjEwMTRBMDAwMDQxQTNENDAwMDAxMDMwODA2MUEzRDQ0MDAwMDAwMDNGMQotOjEwMTRCMDAwMDQxQTNENTAwMDAxMDMwOTA2MUEzRDU0MDAwMDAwMDNDMAotOjEwMTRDMDAwMDQxQTNENjAwMDAxMDMwQTA2MUEzRDY0MDAwMDAwMDM4RgotOjEwMTREMDAwMDQxQTNENzAwMDAxMDMwQjA2MUEzRDc0MDAwMDAwMDM1RQotOjEwMTRFMDAwMDQxQTNEODAwMDAxMDMwQzA2MUEzRDg0MDAwMDAwMDMyRAotOjEwMTRGMDAwMDQxQTNEOTAwMDAxMDMwRDA2MUEzRDk0MDAwMDAwMDNGQwotOjEwMTUwMDAwMDQxQTNEQTAwMDAxMDMwRTA2MUEzREE0MDAwMDAwMDNDQQotOjEwMTUxMDAwMDQxQTNEQjAwMDAxMDMwRjA2MUEzREI0MDAwMDAwMDM5OQotOjEwMTUyMDAwMDQxQTNEQzAwMDAxMDMxMDA2MUEzREM0MDAwMDAwMDM2OAotOjEwMTUzMDAwMDQxQTNERDAwMDAxMDMxMTA2MUEzREQ0MDAwMDAwMDMzNwotOjEwMTU0MDAwMDQxQTNERTAwMDAxMDMxMjA2MUEzREU0MDAwMDAwMDMwNgotOjEwMTU1MDAwMDQxQTNERjAwMDAxMDMxMzA2MUEzREY0MDAwMDAwMDNENQotOjEwMTU2MDAwMDQxQTNFMDAwMDAxMDMxNDA2MUEzRTA0MDAwMDAwMDNBMgotOjEwMTU3MDAwMDQxQTNFMTAwMDAxMDMxNTA2MUEzRTE0MDAwMDAwMDM3MQotOjEwMTU4MDAwMDQxQTNFMjAwMDAxMDMxNjA2MUEzRTI0MDAwMDAwMDM0MAotOjEwMTU5MDAwMDQxQTNFMzAwMDAxMDMxNzA2MUEzRTM0MDAwMDAwMDMwRgotOjEwMTVBMDAwMDQxQTNFNDAwMDAxMDMxODA2MUEzRTQ0MDAwMDAwMDNERQotOjEwMTVCMDAwMDQxQTNFNTAwMDAxMDMxOTA2MUEzRTU0MDAwMDAwMDNBRAotOjEwMTVDMDAwMDQxQTNFNjAwMDAxMDMxQTA2MUEzRTY0MDAwMDAwMDM3QwotOjEwMTVEMDAwMDQxQTNFNzAwMDAxMDMxQjA2MUEzRTc0MDAwMDAwMDM0QgotOjEwMTVFMDAwMDQxQTNFODAwMDAxMDMxQzA2MUEzRTg0MDAwMDAwMDMxQQotOjEwMTVGMDAwMDQxQTNFOTAwMDAxMDMxRDA2MUEzRTk0MDAwMDAwMDNFOQotOjEwMTYwMDAwMDQxQTNFQTAwMDAxMDMxRTA2MUEzRUE0MDAwMDAwMDNCNwotOjEwMTYxMDAwMDQxQTNFQjAwMDAxMDMxRjA2MUEzRUI0MDAwMDAwMDM4NgotOjEwMTYyMDAwMDQxQTNFQzAwMDAxMDMyMDA2MUEzRUM0MDAwMDAwMDM1NQotOjEwMTYzMDAwMDQxQTNFRDAwMDAxMDMyMTA2MUEzRUQ0MDAwMDAwMDMyNAotOjEwMTY0MDAwMDQxQTNFRTAwMDAxMDMyMjA2MUEzRUU0MDAwMDAwMDNGMwotOjEwMTY1MDAwMDQxQTNFRjAwMDAxMDMyMzA2MUEzRUY0MDAwMDAwMDNDMgotOjEwMTY2MDAwMDQxQTNGMDAwMDAxMDMyNDA2MUEzRjA0MDAwMDAwMDM4RgotOjEwMTY3MDAwMDQxQTNGMTAwMDAxMDMyNTA2MUEzRjE0MDAwMDAwMDM1RQotOjEwMTY4MDAwMDQxQTNGMjAwMDAxMDMyNjA2MUEzRjI0MDAwMDAwMDMyRAotOjEwMTY5MDAwMDQxQTNGMzAwMDAxMDMyNzA2MUEzRjM0MDAwMDAwMDNGQwotOjEwMTZBMDAwMDQxQTNGNDAwMDAxMDMyODA2MUEzRjQ0MDAwMDAwMDNDQgotOjEwMTZCMDAwMDQxQTNGNTAwMDAxMDMyOTA2MUEzRjU0MDAwMDAwMDM5QQotOjEwMTZDMDAwMDQxQTNGNjAwMDAxMDMyQTA2MUEzRjY0MDAwMDAwMDM2OQotOjEwMTZEMDAwMDQxQTNGNzAwMDAxMDMyQjA2MUEzRjc0MDAwMDAwMDMzOAotOjEwMTZFMDAwMDQxQTNGODAwMDAxMDMyQzA2MUEzRjg0MDAwMDAwMDMwNwotOjEwMTZGMDAwMDQxQTNGOTAwMDAxMDMyRDA2MUEzRjk0MDAwMDAwMDNENgotOjEwMTcwMDAwMDQxQTNGQTAwMDAxMDMyRTA2MUEzRkE0MDAwMDAwMDNBNAotOjEwMTcxMDAwMDQxQTNGQjAwMDAxMDMyRjA2MUEzRkI0MDAwMDAwMDM3MwotOjEwMTcyMDAwMDQxQTNGQzAwMDAxMDMzMDA2MUEzRkM0MDAwMDAwMDM0MgotOjEwMTczMDAwMDQxQTNGRDAwMDAxMDMzMTA2MUEzRkQ0MDAwMDAwMDMxMQotOjEwMTc0MDAwMDQxQTNGRTAwMDAxMDMzMjA2MUEzRkU0MDAwMDAwMDdEQwotOjEwMTc1MDAwMDQxQTRDQjAwMDA4MDMzMzA2MUE0MDAwMDAwMDAxMjRBQwotOjEwMTc2MDAwMDIxQTQ5MjAwMDAwMDAwMDA2MUEyNTAwMDAwMDAwMTA5RgotOjEwMTc3MDAwMDYxQTI1ODAwMDAwMDAxMjA2MUEwOUMwMDAwMDAwNDg2MQotOjEwMTc4MDAwMDYxQTA4MDAwMDAwMDAwMjA2MUEwODIwMDAwMDAwMTJENQotOjEwMTc5MDAwMDQxQTJGQjAwMDAyMDMzQjA0MUE0Q0YwMDAwMjAzM0Q3MAotOjEwMTdBMDAwMDYxQTUwMDAwMDAwMDAwNDA2MUE0NDkwMDAwMDAxMjRBQwotOjEwMTdCMDAwMDIxQTQ5MjQwMDAwMDAwMDA2MUEyNTQwMDAwMDAwMTAwQgotOjEwMTdDMDAwMDYxQTI1QzgwMDAwMDAxMjA2MUEwQUUwMDAwMDAwNDhBOAotOjEwMTdEMDAwMDYxQTA4MTAwMDAwMDAwMjA2MUEwODY4MDAwMDAwMTIyRAotOjEwMTdFMDAwMDQxQTJGQjgwMDAyMDMzRjA0MUE0Q0Y4MDAwMjAzNDEwOAotOjEwMTdGMDAwMDYxQTUwMTAwMDAwMDAwNDAyMDBBNDY4MDAwQUZGREM3MgotOjEwMTgwMDAwMDIwMEEyODAwMDAwMDAwMTAyMDBBMjk0MDcxRDI5MTExRAotOjEwMTgxMDAwMDIwMEEyOTgwMDAwMDAwMDAyMDBBMjlDMDA5QzA0MjQ4OAotOjEwMTgyMDAwMDIwMEEyQTAwMDAwMDAwMDAyMDBBMkE0MDAwMDAyMDkyMQotOjEwMTgzMDAwMDIwMEE0RkNGRjAwMDAwMDAyMDEwMEI0MDAwMDAwMDE0RgotOjEwMTg0MDAwMDIwMTAwQjgwMDAwMDAwMTAyMDEwMERDMDAwMDAwMDFGQwotOjEwMTg1MDAwMDIwMTAxMDAwMDAwMDAwMTAyMDEwMTA0MDAwMDAwMDE3QQotOjEwMTg2MDAwMDIwMTAwN0MwMDMwMDAwMDAyMDEwMDg0MDAwMDAwMjgxQQotOjEwMTg3MDAwMDIwMTAwOEMwMDAwMDAwMDAyMDEwMTMwMDAwMDAwMDRBMQotOjEwMTg4MDAwMDIwMTAyNUMwMDAwMDAwMTAyMDEwMzI4MDAwMDAwMDBDOAotOjEwMTg5MDAwMDIwMTA1NTQwMDAwMDAzMDAyMDEwMEM0MDAwMDAwMDFGNAotOjEwMThBMDAwMDIwMTAwQ0MwMDAwMDAwMTAyMDEwMEY4MDAwMDAwMDE2QwotOjEwMThCMDAwMDIwMTAwRjAwMDAwMDAwMTAyMDEwMDgwMDAzMDAwMDA4MQotOjEwMThDMDAwMDIwMTAwODgwMDAwMDAyODAyMDEwMDkwMDAwMDAwMDBEMgotOjEwMThEMDAwMDIwMTAxMzQwMDAwMDAwNDAyMDEwMkRDMDAwMDAwMDFFQQotOjEwMThFMDAwMDIwMTAzMkMwMDAwMDAwMDAyMDEwNTY0MDAwMDAwMzAyQQotOjEwMThGMDAwMDIwMTAwQzgwMDAwMDAwMTAyMDEwMEQwMDAwMDAwMDE0OAotOjEwMTkwMDAwMDIwMTAwRkMwMDAwMDAwMTAyMDEwMEY0MDAwMDAwMDFERgotOjEwMTkxMDAwMDIwQzEwMDAwMDAwMDAyODAyMEMyMDA4MDAwMDBBMTEzMAotOjEwMTkyMDAwMDIwQzIwMEMwMDAwMEEwMDAyMEMyMDEwMDAwMDBBMDQyNwotOjEwMTkzMDAwMDIwQzIwMUMwMDAwRkZGRjAyMEMyMDIwMDAwMEZGRkYxMwotOjEwMTk0MDAwMDIwQzIwMjQwMDAwRkZGRjAyMEMyMDI4MDAwMEZGRkZGMwotOjEwMTk1MDAwMDIwQzIwMzgwMDAwMDAyMDAyMEMyMDNDMDAwMDAwMjE3NgotOjEwMTk2MDAwMDIwQzIwNDAwMDAwMDAyMjAyMEMyMDQ0MDAwMDAwMjM1MgotOjEwMTk3MDAwMDIwQzIwNDgwMDAwMDAyNDAyMEMyMDRDMDAwMDAwMjUyRQotOjEwMTk4MDAwMDIwQzIwNTAwMDAwMDAyNjAyMEMyMDU0MDAwMDAwMjcwQQotOjEwMTk5MDAwMDIwQzIwNTgwMDAwMDAyODAyMEMyMDVDMDAwMDAwMjlFNgotOjEwMTlBMDAwMDIwQzIwNjAwMDAwMDAyQTAyMEMyMDY0MDAwMDAwMkJDMgotOjEwMTlCMDAwMDIwQzIwNjgwMDAwMDAyQzAyMEMyMDZDMDAwMDAwMkQ5RQotOjEwMTlDMDAwMDIwQzIwNzAwMDAwMDAyRTAyMEMyMDc0MDAwMDAwMkY3QQotOjEwMTlEMDAwMDIwQzIwNzgwMDAwMDAxMDA2MEMyMDdDMDAwMDAwNEY1NAotOjEwMTlFMDAwMDIwQzIxQjgwMDAwMDAwMTAyMEMyMUJDMDAwMDAwMDEyMwotOjEwMTlGMDAwMDIwQzIxQzAwMDAwMDAwMTAyMEMyMUM0MDAwMDAwMDEwMwotOjEwMUEwMDAwMDIwQzIxQzgwMDAwMDAwMTAyMEMyMUNDMDAwMDAwMDFFMgotOjEwMUExMDAwMDIwQzIxRDAwMDAwMDAwMTAyMEMyMUQ0MDAwMDAwMDFDMgotOjEwMUEyMDAwMDIwQzIxRDgwMDAwMDAwMTAyMEMyMURDMDAwMDAwMDFBMgotOjEwMUEzMDAwMDIwQzIxRTAwMDAwMDAwMTAyMEMyMUU0MDAwMDAwMDE4MgotOjEwMUE0MDAwMDIwQzIxRTgwMDAwMDAwMTAyMEMyMUVDMDAwMDAwMDE2MgotOjEwMUE1MDAwMDIwQzIxRjAwMDAwMDAwMTAyMEMyMUY0MDAwMDAwMDE0MgotOjEwMUE2MDAwMDIwQzIxRjgwMDAwMDAwMTA2MEMyMUZDMDAwMDAwMEYxMAotOjEwMUE3MDAwMDIwQzIyMzgwN0ZGRkZGRjAyMEMyMjNDMDAwMDAwM0Y0RgotOjEwMUE4MDAwMDIwQzIyNDAwN0ZGRkZGRjAyMEMyMjQ0MDAwMDAwMEY1RgotOjEwMUE5MDAwMDEwQzIyNDgwMDAwMDAwMDAxMEMyMjRDMDAwMDAwMDA1NAotOjEwMUFBMDAwMDEwQzIyNTAwMDAwMDAwMDAxMEMyMjU0MDAwMDAwMDAzNAotOjEwMUFCMDAwMDEwQzIyNTgwMDAwMDAwMDAxMEMyMjVDMDAwMDAwMDAxNAotOjEwMUFDMDAwMDEwQzIyNjAwMDAwMDAwMDAxMEMyMjY0MDAwMDAwMDBGNAotOjEwMUFEMDAwMDEwQzIyNjgwMDAwMDAwMDAxMEMyMjZDMDAwMDAwMDBENAotOjEwMUFFMDAwMDEwQzIyNzAwMDAwMDAwMDAxMEMyMjc0MDAwMDAwMDBCNAotOjEwMUFGMDAwMDEwQzIyNzgwMDAwMDAwMDAxMEMyMjdDMDAwMDAwMDA5NAotOjEwMUIwMDAwMDIwQzI0QkMwMDAwMDAwMTBDMEMyMDAwMDAwMDAzRThDMwotOjEwMUIxMDAwMEEwQzIwMDAwMDAwMDAwMTBCMEMyMDAwMDAwMDAwMEE0RAotOjEwMUIyMDAwMDIwQzQwMDgwMDAwMDU2MjAyMEM0MDBDMDAwMDA1NTE0OAotOjEwMUIzMDAwMDIwQzQwMTAwMDAwMDU1NTAyMEM0MDE0MDAwMDA1NzIxNAotOjEwMUI0MDAwMDIwQzQwMUMwMDAwRkZGRjAyMEM0MDIwMDAwMEZGRkZDMQotOjEwMUI1MDAwMDIwQzQwMjQwMDAwRkZGRjAyMEM0MDI4MDAwMEZGRkZBMQotOjEwMUI2MDAwMDIwQzQwMzgwMDAwMDA0NjAyMEM0MDNDMDAwMDAwMEMxMwotOjEwMUI3MDAwMDYwQzQwNDAwMDAwMDA1RTAyMEM0MUI4MDAwMDAwMDE2RAotOjEwMUI4MDAwMDYwQzQxQkMwMDAwMDAxRjAyMEM0MjM4MDdGRkZGRkY5QgotOjEwMUI5MDAwMDIwQzQyM0MwMDAwMDAzRjAyMEM0MjQwMDdGRkZGRkZFNgotOjEwMUJBMDAwMDIwQzQyNDQwMDAwMDAwRjAxMEM0MjQ4MDAwMDAwMDBGQgotOjEwMUJCMDAwMDEwQzQyNEMwMDAwMDAwMDAxMEM0MjUwMDAwMDAwMDBFQgotOjEwMUJDMDAwMDEwQzQyNTQwMDAwMDAwMDAxMEM0MjU4MDAwMDAwMDBDQgotOjEwMUJEMDAwMDEwQzQyNUMwMDAwMDAwMDAxMEM0MjYwMDAwMDAwMDBBQgotOjEwMUJFMDAwMDEwQzQyNjQwMDAwMDAwMDAxMEM0MjY4MDAwMDAwMDA4QgotOjEwMUJGMDAwMDEwQzQyNkMwMDAwMDAwMDAxMEM0MjcwMDAwMDAwMDA2QgotOjEwMUMwMDAwMDEwQzQyNzQwMDAwMDAwMDAxMEM0Mjc4MDAwMDAwMDA0QQotOjEwMUMxMDAwMDEwQzQyN0MwMDAwMDAwMDAxMEM0MjgwMDAwMDAwMDAyQQotOjEwMUMyMDAwMDIwQzQ0QzAwMDAwMDAwMTBDMEM0MDAwMDAwMDAzRTg1RQotOjEwMUMzMDAwMEEwQzQwMDAwMDAwMDAwMTBCMEM0MDAwMDAwMDAwMEFFQwotOjEwMUM0MDAwMDYwRDQwMDAwMDAwMEEwMDAyMEQwMDQ0MDAwMDAwMzJCMgotOjEwMUM1MDAwMDIwRDAwOEMwMjE1MDAyMDAyMEQwMDkwMDIxNTAwMjBEQwotOjEwMUM2MDAwMDIwRDAwOTQwODEwMDAwMDAyMEQwMDk4MDAwMDAwMzNERgotOjEwMUM3MDAwMDIwRDAwOUMwMDAwMDAwMjAyMEQwMEEwMDAwMDAwMDAwOAotOjEwMUM4MDAwMDIwRDAwQTQwMDAwMDAwNTAyMEQwMEE4MDAwMDAwMDVFMAotOjEwMUM5MDAwMDYwRDAwQUMwMDAwMDAwMjAyMEQwMEI0MDAwMDAwMDJCRQotOjEwMUNBMDAwMDIwRDAwQjgwMDAwMDAwMzAyMEQwMEJDMDAwMDAwMDI5RAotOjEwMUNCMDAwMDIwRDAwQzAwMDAwMDAwMTAyMEQwMEM4MDAwMDAwMDI3QgotOjEwMUNDMDAwMDIwRDAwQ0MwMDAwMDAwMjAyMEQwMTVDMDAwMDAwMDFDQQotOjEwMUNEMDAwMDIwRDAxNjQwMDAwMDAwMTAyMEQwMTY4MDAwMDAwMDIxNQotOjEwMUNFMDAwMDIwRDAyMDQwMDAwMDAwMTAyMEQwMjBDMDAwMDAwMjBBMQotOjEwMUNGMDAwMDIwRDAyMTAwMDAwMDA0MDAyMEQwMjE0MDAwMDAwNDAxRQotOjEwMUQwMDAwMDIwRDAyMjAwMDAwMDAwMzAyMEQwMjI0MDAwMDAwMTg1MgotOjEwMUQxMDAwMDYwRDAyODAwMDAwMDAxMjA0MEQwMzAwMDAxODAzNDNBQQotOjEwMUQyMDAwMDYwRDAzNjAwMDAwMDAwQzAyMEQwMDRDMDAwMDAwMDFENQotOjEwMUQzMDAwMDIwRDAwNTAwMDAwMDAwMjAyMEQwMDU0MDAwMDAwMDBERgotOjEwMUQ0MDAwMDIwRDAwNTgwMDAwMDAwODA2MEQwMDVDMDAwMDAwMDRCMQotOjEwMUQ1MDAwMDIwRDAwQzQwMDAwMDAwNDAyMEQwMTE0MDAwMDAwMDk3RgotOjEwMUQ2MDAwMDIwRDAxMTgwMDAwMDAyOTAyMEQwMTFDMDAwMDAwMEFFQwotOjEwMUQ3MDAwMDIwRDAxMjAwMDAwMDAyQTAyMEQwMTI0MDAwMDAwMDBENQotOjEwMUQ4MDAwMDIwRDAxMjgwMDAwMDAyMDAyMEQwMTJDMDAwMDAwMDBCRgotOjEwMUQ5MDAwMDIwRDAxMzAwMDAwMDAyMDAyMEQwMTM0MDAwMDAwMDA5RgotOjEwMURBMDAwMDIwRDAxMzgwMDAwMDAyMDAyMEQwMTNDMDAwMDAwMDA3RgotOjEwMURCMDAwMDIwRDAxNDAwMDAwMDAyMDAyMEQwMTQ0MDAwMDAwMDA1RgotOjEwMURDMDAwMDIwRDAxNDgwMDAwMDAyMDAyMEQwMDA0MDAwMDAwMDE4NwotOjEwMUREMDAwMDIwRDAwMDgwMDAwMDAwMTAyMEQwMDBDMDAwMDAwMDFDRgotOjEwMURFMDAwMDIwRDAwMTAwMDAwMDAwMTAyMEQwMDE0MDAwMDAwMDFBRgotOjEwMURGMDAwMDIwRDAwMTgwMDAwMDAwMTAyMEQwMDFDMDAwMDAwMDE4RgotOjEwMUUwMDAwMDIwRDAwMjAwMDAwMDAwMTAyMEQwMDI0MDAwMDAwMDE2RQotOjEwMUUxMDAwMDIwRDAwMjgwMDAwMDAwMTAyMEQwMDJDMDAwMDAwMDE0RQotOjEwMUUyMDAwMDIwRDAwMzAwMDAwMDAwMTAyMEQwMDM0MDAwMDAwMDEyRQotOjEwMUUzMDAwMDIwRDAwMzgwMDAwMDAwMTAyMEQwMDNDMDAwMDAwMDEwRQotOjEwMUU0MDAwMDYwRTIwMDAwMDAwMDgwMDAyMEUwMDRDMDAwMDAwMzJDOAotOjEwMUU1MDAwMDIwRTAwOTQwMjE1MDAyMDAyMEUwMDk4MDIxNTAwMjBDOAotOjEwMUU2MDAwMDIwRTAwOUMwMDAwMDAzMDAyMEUwMEEwMDgxMDAwMDBDRQotOjEwMUU3MDAwMDIwRTAwQTQwMDAwMDAzMzAyMEUwMEE4MDAwMDAwMzA5MwotOjEwMUU4MDAwMDIwRTAwQUMwMDAwMDAzMTAyMEUwMEIwMDAwMDAwMDJBMwotOjEwMUU5MDAwMDIwRTAwQjQwMDAwMDAwNDAyMEUwMEI4MDAwMDAwMDBCMgotOjEwMUVBMDAwMDIwRTAwQkMwMDAwMDAwMjAyMEUwMEMwMDAwMDAwMDI5MgotOjEwMUVCMDAwMDIwRTAwQzQwMDAwMDAwMDAyMEUwMEM4MDAwMDAwMDI3NAotOjEwMUVDMDAwMDIwRTAwQ0MwMDAwMDAwNzAyMEUwMEQwMDAwMDAwMDI0RAotOjEwMUVEMDAwMDIwRTAwRDQwMDAwMDAwMjAyMEUwMEQ4MDAwMDAwMDEzMwotOjEwMUVFMDAwMDIwRTAxNDQwMDAwMDAwMTAyMEUwMTRDMDAwMDAwMDEzRQotOjEwMUVGMDAwMDIwRTAxNTAwMDAwMDAwMjAyMEUwMjA0MDAwMDAwMDE2OAotOjEwMUYwMDAwMDIwRTAyMEMwMDAwMDA0MDAyMEUwMjEwMDAwMDAwNDAxMQotOjEwMUYxMDAwMDIwRTAyMUMwMDAwMDAwNDAyMEUwMjIwMDAwMDAwMjAzRAotOjEwMUYyMDAwMDIwRTAyMjQwMDAwMDAwRTAyMEUwMjI4MDAwMDAwMUIxOAotOjEwMUYzMDAwMDYwRTAzMDAwMDAwMDAxMjA0MEUwMjgwMDAxQjAzNUI2QgotOjEwMUY0MDAwMDYwRTAyRUMwMDAwMDAwNTAyMEUwMDU0MDAwMDAwMEMxQQotOjEwMUY1MDAwMDIwRTAwNTgwMDAwMDAwQzAyMEUwMDVDMDAwMDAwMDBBMQotOjEwMUY2MDAwMDIwRTAwNjAwMDAwMDAxMDA2MEUwMDY0MDAwMDAwMDQ3NQotOjEwMUY3MDAwMDIwRTAwREMwMDAwMDAwMzAyMEUwMTEwMDAwMDAwMEY0MgotOjEwMUY4MDAwMDIwRTAxMTQwMDAwMDAyRjAyMEUwMTE4MDAwMDAwMDBENAotOjEwMUY5MDAwMDIwRTAxMUMwMDAwMDAyMDAyMEUwMDA0MDAwMDAwMDFERgotOjEwMUZBMDAwMDIwRTAwMDgwMDAwMDAwMTAyMEUwMDBDMDAwMDAwMDFGQgotOjEwMUZCMDAwMDIwRTAwMTAwMDAwMDAwMTAyMEUwMDE0MDAwMDAwMDFEQgotOjEwMUZDMDAwMDIwRTAwMTgwMDAwMDAwMTAyMEUwMDFDMDAwMDAwMDFCQgotOjEwMUZEMDAwMDIwRTAwMjAwMDAwMDAwMTAyMEUwMDI0MDAwMDAwMDE5QgotOjEwMUZFMDAwMDIwRTAwMjgwMDAwMDAwMTAyMEUwMDJDMDAwMDAwMDE3QgotOjEwMUZGMDAwMDIwRTAwMzAwMDAwMDAwMTAyMEUwMDM0MDAwMDAwMDE1QgotOjEwMjAwMDAwMDIwRTAwMzgwMDAwMDAwMTAyMEUwMDNDMDAwMDAwMDEzQQotOjEwMjAxMDAwMDIwRTAwNDAwMDAwMDAwMTAyMEUwMDQ0MDAwMDAwMDExQQotOjEwMjAyMDAwMDczMDA0MDAwMEFGMDAwMDA4MzAwNzY4MDAxMzAzNzY5MwotOjEwMjAzMDAwMDczNDAwMDAzMzFDMDAwMDA3MzQ4MDAwMzI3ODBDQzhERAotOjEwMjA0MDAwMDczNTAwMDAxQTgwMTk2NzA4MzUzOUIwNThDQTAzNzg3NwotOjEwMjA1MDAwMDEzMDAwMDAwMDAwMDAwMDAxMzAwMDA0MDAwMDAwMDAxQQotOjEwMjA2MDAwMDEzMDAwMDgwMDAwMDAwMDAxMzAwMDBDMDAwMDAwMDBGQQotOjEwMjA3MDAwMDEzMDAwMTAwMDAwMDAwMDAxMzAwMDE0MDAwMDAwMDBEQQotOjEwMjA4MDAwMDIzMDAwMjAwMDAwMDAwMTAyMzAwMDI0MDAwMDAwMDJBNQotOjEwMjA5MDAwMDIzMDAwMjgwMDAwMDAwMzAyMzAwMDJDMDAwMDAwMDA4NQotOjEwMjBBMDAwMDIzMDAwMzAwMDAwMDAwNDAyMzAwMDM0MDAwMDAwMDE2MwotOjEwMjBCMDAwMDIzMDAwMzgwMDAwMDAwMDAyMzAwMDNDMDAwMDAwMDE0NwotOjEwMjBDMDAwMDIzMDAwNDAwMDAwMDAwNDAyMzAwMDQ0MDAwMDAwMDAyNAotOjEwMjBEMDAwMDIzMDAwNDgwMDAwMDAwMTAyMzAwMDRDMDAwMDAwMDMwNAotOjEwMjBFMDAwMDIzMDAwNTAwMDAwMDAwMDAyMzAwMDU0MDAwMDAwMDFFNwotOjEwMjBGMDAwMDIzMDAwNTgwMDAwMDAwNDAyMzAwMDVDMDAwMDAwMDBDNAotOjEwMjEwMDAwMDIzMDAwNjAwMDAwMDAwMTAyMzAwMDY0MDAwMDAwMDNBMwotOjEwMjExMDAwMDIzMDAwNjgwMDAwMDAwMDAyMzAwMDZDMDAwMDAwMDE4NgotOjEwMjEyMDAwMDIzMDAwNzAwMDAwMDAwNDAyMzAwMDc0MDAwMDAwMDA2MwotOjEwMjEzMDAwMDIzMDAwNzgwMDAwMDAwNDAyMzAwMDdDMDAwMDAwMDM0MAotOjEwMjE0MDAwMDYzMDAwODAwMDAwMDAwMjAyMzAwMEE0MDAwMDNGRkZDMwotOjEwMjE1MDAwMDIzMDAwQTgwMDAwMDNGRjAyMzAwMjI0MDAwMDAwMDA0QgotOjEwMjE2MDAwMDIzMDAyMzQwMDAwMDAwMDAyMzAwMjRDMDAwMDAwMDA4NwotOjEwMjE3MDAwMDIzMDAyRTQwMDAwRkZGRjA2MzAyMDAwMDAwMDA4MDBFQgotOjEwMjE4MDAwMDIzMzhCQzAwMDAwMDAwMTAyMzM4MDAwMDAwMDAwMUFGRgotOjEwMjE5MDAwMDIzMzgwNDAwMDAwMDA0RTAyMzM4MDgwMDAwMDAwMTBCNwotOjEwMjFBMDAwMDIzMzgwQzAwMDAwMDAyMDBDMzM4MzAwMDAwN0ExMjAxMAotOjEwMjFCMDAwMEEzMzgzMDAwMDAwMDEzODBCMzM4MzAwMDAwMDEzODhDQQotOjEwMjFDMDAwMEEzMzgzNDAwMDAwMDAwMDBDMzM4MzQwMDAwMDAxRjQxOAotOjEwMjFEMDAwMEIzMzgzNDAwMDAwMDAwNTAyMzM4MzgwMDAwN0ExMjBGOQotOjEwMjFFMDAwMDIzMzgzQzAwMDAwMDFGNDA2MzIyQTg4MDAwMDAwQzJENgotOjEwMjFGMDAwMDYzMjIwMDgwMDAwMDBDODA2MzIyMDAwMDAwMDAwMDI1RAotOjEwMjIwMDAwMDYzMjIzRTgwMDAwMDA0MDA0MzIyRTU4MDAwNDAzN0EwRQotOjEwMjIxMDAwMDYzMjUwQTAwMDAwMDAwNDA2MzI1MEI4MDAwMDAwMDI1MAotOjEwMjIyMDAwMDYzMjUwODAwMDAwMDAwNjA0MzI1MDk4MDAwMjAzN0VGRgotOjEwMjIzMDAwMDYzMjUwMDAwMDAwMDAyMDA2MzIzMDAwMDAwMDA0MDA4QQotOjEwMjI0MDAwMDYzMjFDMDAwMDAwMDAwNDA0MzIxODMwMDAwMjAzODAzMwotOjEwMjI1MDAwMDYzMjI0RTgwMDAwMDBCNDAyMzIyREIwMDAwMDAwMDA3NQotOjEwMjI2MDAwMDYzMjQwMDAwMDAwMDBCNDA2MzIzMDAwMDAwMDAwMjBCQQotOjEwMjI3MDAwMDYzMjMxMDAwMDAwMDAyMDA2MzIzMjAwMDAwMDAwMjA0QgotOjEwMjI4MDAwMDYzMjMzMDAwMDAwMDAyMDA2MzIzNDAwMDAwMDAwMjAzNwotOjEwMjI5MDAwMDYzMjM1MDAwMDAwMDAyMDA2MzIzNjAwMDAwMDAwMjAyMwotOjEwMjJBMDAwMDYzMjM3MDAwMDAwMDAyMDA2MzIzODAwMDAwMDAwMjAwRgotOjEwMjJCMDAwMDYzMjM5MDAwMDAwMDAyMDA2MzIzQTAwMDAwMDAwMjBGQgotOjEwMjJDMDAwMDYzMjNCMDAwMDAwMDAyMDA2MzIzQzAwMDAwMDAwMjBFNwotOjEwMjJEMDAwMDYzMjNEMDAwMDAwMDAyMDA2MzIzRTAwMDAwMDAwMjBEMwotOjEwMjJFMDAwMDYzMjNGMDAwMDAwMDAyMDA2MzIxQzEwMDAwMDAwMDJGMQotOjEwMjJGMDAwMDYzMjQ1QTAwMDAwMDAyNDA2MzIyN0I4MDAwMDAwQjREMgotOjEwMjMwMDAwMDIzMjJEQjQwMDAwMDAwMDA2MzI0MkQwMDAwMDAwQjRCQQotOjEwMjMxMDAwMDYzMjMwODAwMDAwMDAyMDA2MzIzMTgwMDAwMDAwMjBBQwotOjEwMjMyMDAwMDYzMjMyODAwMDAwMDAyMDA2MzIzMzgwMDAwMDAwMjA5OAotOjEwMjMzMDAwMDYzMjM0ODAwMDAwMDAyMDA2MzIzNTgwMDAwMDAwMjA4NAotOjEwMjM0MDAwMDYzMjM2ODAwMDAwMDAyMDA2MzIzNzgwMDAwMDAwMjA3MAotOjEwMjM1MDAwMDYzMjM4ODAwMDAwMDAyMDA2MzIzOTgwMDAwMDAwMjA1QwotOjEwMjM2MDAwMDYzMjNBODAwMDAwMDAyMDA2MzIzQjgwMDAwMDAwMjA0OAotOjEwMjM3MDAwMDYzMjNDODAwMDAwMDAyMDA2MzIzRDgwMDAwMDAwMjAzNAotOjEwMjM4MDAwMDYzMjNFODAwMDAwMDAyMDA2MzIzRjgwMDAwMDAwMjAyMAotOjEwMjM5MDAwMDYzMjFDMjAwMDAwMDAwMjA2MzI0NjMwMDAwMDAwMjRGNQotOjEwMjNBMDAwMDcyMDA0MDAwMDg3MDAwMDA4MjAwNzgwMDAxMDAzODIzNwotOjEwMjNCMDAwMDcyNDAwMDAzMTY1MDAwMDA3MjQ4MDAwMDgxRDBDNUEyNgotOjEwMjNDMDAwMDgyNDhFQjA2QzkwMDM4NDAxMjAwMDAwMDAwMDAwMDBGRgotOjEwMjNEMDAwMDEyMDAwMDQwMDAwMDAwMDAxMjAwMDA4MDAwMDAwMDBBRgotOjEwMjNFMDAwMDEyMDAwMEMwMDAwMDAwMDAxMjAwMDEwMDAwMDAwMDA4RgotOjEwMjNGMDAwMDEyMDAwMTQwMDAwMDAwMDAyMjAwMDIwMDAwMDAwMDE2NQotOjEwMjQwMDAwMDIyMDAwMjQwMDAwMDAwMjAyMjAwMDI4MDAwMDAwMDMzNwotOjEwMjQxMDAwMDIyMDAwMkMwMDAwMDAwMDAyMjAwMDMwMDAwMDAwMDQxOAotOjEwMjQyMDAwMDIyMDAwMzQwMDAwMDAwMTAyMjAwMDM4MDAwMDAwMDBGQgotOjEwMjQzMDAwMDIyMDAwM0MwMDAwMDAwMTAyMjAwMDQwMDAwMDAwMDRENwotOjEwMjQ0MDAwMDIyMDAwNDQwMDAwMDAwMDAyMjAwMDQ4MDAwMDAwMDFCQgotOjEwMjQ1MDAwMDIyMDAwNEMwMDAwMDAwMzAyMjAwMDUwMDAwMDAwMDA5OQotOjEwMjQ2MDAwMDIyMDAwNTQwMDAwMDAwMTAyMjAwMDU4MDAwMDAwMDQ3NwotOjEwMjQ3MDAwMDIyMDAwNUMwMDAwMDAwMDAyMjAwMDYwMDAwMDAwMDE1QgotOjEwMjQ4MDAwMDIyMDAwNjQwMDAwMDAwMzAyMjAwMDY4MDAwMDAwMDAzOQotOjEwMjQ5MDAwMDIyMDAwNkMwMDAwMDAwMTAyMjAwMDcwMDAwMDAwMDQxNwotOjEwMjRBMDAwMDIyMDAwNzQwMDAwMDAwMDAyMjAwMDc4MDAwMDAwMDRGOAotOjEwMjRCMDAwMDIyMDAwN0MwMDAwMDAwMzA2MjAwMDgwMDAwMDAwMDJEMwotOjEwMjRDMDAwMDIyMDAwQTQwMDAwM0ZGRjAyMjAwMEE4MDAwMDAzRkYzQwotOjEwMjREMDAwMDIyMDAyMjQwMDAwMDAwMDAyMjAwMjM0MDAwMDAwMDA1QwotOjEwMjRFMDAwMDIyMDAyNEMwMDAwMDAwMDAyMjAwMkU0MDAwMEZGRkY3NgotOjEwMjRGMDAwMDYyMDIwMDAwMDAwMDgwMDAyMjM4QkMwMDAwMDAwMDExRAotOjEwMjUwMDAwMDIyMzgwMDAwMDAwMDAxMDAyMjM4MDQwMDAwMDAwMTIxRgotOjEwMjUxMDAwMDIyMzgwODAwMDAwMDAzMDAyMjM4MEMwMDAwMDAwMEVGMwotOjEwMjUyMDAwMEMyMzgzMDAwMDA3QTEyMDBBMjM4MzAwMDAwMDAxMzg0OAotOjEwMjUzMDAwMEIyMzgzMDAwMDAwMTM4ODBBMjM4MzQwMDAwMDAwMDA1RgotOjEwMjU0MDAwMEMyMzgzNDAwMDAwMDFGNDBCMjM4MzQwMDAwMDAwMDVBRQotOjEwMjU1MDAwMDIyMzgzODAwMDA3QTEyMDAyMjM4M0MwMDAwMDAxRjQyRQotOjEwMjU2MDAwMDYyMjUwMDAwMDAwMDA0MjA2MjIyMDA4MDAwMDAwQzg5OQotOjEwMjU3MDAwMDYyMjIwMDAwMDAwMDAwMjA2MjI0MDAwMDAwMDAwQzZFMwotOjEwMjU4MDAwMDQyMjQzMTgwMDA1MDM4NjA2MjI0MzJDMDAwMDAwMEI5QQotOjEwMjU5MDAwMDQyMjQzNTgwMDA1MDM4QjA2MjI0MzZDMDAwMDAwMEIwNQotOjEwMjVBMDAwMDQyMjQzOTgwMDA1MDM5MDA2MjI0M0FDMDAwMDAwMEI3MAotOjEwMjVCMDAwMDQyMjQzRDgwMDA1MDM5NTA2MjI0M0VDMDAwMDAwMEJEQgotOjEwMjVDMDAwMDQyMjQ0MTgwMDA1MDM5QTA2MjI0NDJDMDAwMDAwMEI0NAotOjEwMjVEMDAwMDQyMjQ0NTgwMDA1MDM5RjA2MjI0NDZDMDAwMDAwMEJBRgotOjEwMjVFMDAwMDQyMjQ0OTgwMDA1MDNBNDA2MjI0NEFDMDAwMDAwMEIxQQotOjEwMjVGMDAwMDQyMjQ0RDgwMDA1MDNBOTA2MjI0NEVDMDAwMDAwMEI4NQotOjEwMjYwMDAwMDQyMjQ1MTgwMDA1MDNBRTA2MjI0NTJDMDAwMDAwMEJFRAotOjEwMjYxMDAwMDQyMjQ1NTgwMDA1MDNCMzA2MjI0NTZDMDAwMDAwMEI1OAotOjEwMjYyMDAwMDQyMjQ1OTgwMDA1MDNCODA2MjI0NUFDMDAwMDAwMEJDMwotOjEwMjYzMDAwMDQyMjQ1RDgwMDA1MDNCRDA2MjI0NUVDMDAwMDAwMEIyRQotOjEwMjY0MDAwMDQyMjQ2MTgwMDA1MDNDMjA2MjI0NjJDMDAwMDAwMEI5NwotOjEwMjY1MDAwMDQyMjQ2NTgwMDA1MDNDNzA2MjI0NjZDMDAwMDAwMEIwMgotOjEwMjY2MDAwMDQyMjQ2OTgwMDA1MDNDQzA2MjI0NkFDMDAwMDAwMEI2RAotOjEwMjY3MDAwMDQyMjQ2RDgwMDA1MDNEMTA2MjI0NkVDMDAwMDAwMEJEOAotOjEwMjY4MDAwMDQyMjQ3MTgwMDA1MDNENjA2MjI0NzJDMDAwMDAwMEI0MQotOjEwMjY5MDAwMDQyMjQ3NTgwMDA1MDNEQjA2MjI0NzZDMDAwMDAwMEJBQwotOjEwMjZBMDAwMDQyMjQ3OTgwMDA1MDNFMDA2MjI0N0FDMDAwMDAwMEIxNwotOjEwMjZCMDAwMDQyMjQ3RDgwMDA1MDNFNTA2MjI0N0VDMDAwMDAwMEI4MgotOjEwMjZDMDAwMDQyMjQ4MTgwMDA1MDNFQTA2MjI0ODJDMDAwMDAwMEJFQgotOjEwMjZEMDAwMDQyMjQ4NTgwMDA1MDNFRjA2MjI0ODZDMDAwMDAwMEI1NgotOjEwMjZFMDAwMDQyMjQ4OTgwMDA1MDNGNDA2MjI0OEFDMDAwMDAwMEJDMQotOjEwMjZGMDAwMDQyMjQ4RDgwMDA1MDNGOTA2MjI0OEVDMDAwMDAwMEIyQwotOjEwMjcwMDAwMDQyMjQ5MTgwMDA1MDNGRTA2MjI0OTJDMDAwMDAwMEI5NAotOjEwMjcxMDAwMDQyMjQ5NTgwMDA1MDQwMzA2MjI0OTZDMDAwMDAwMEJGRQotOjEwMjcyMDAwMDQyMjQ5OTgwMDA1MDQwODA2MjI0OUFDMDAwMDAwMEI2OQotOjEwMjczMDAwMDQyMjQ5RDgwMDA1MDQwRDA2MjI0OUVDMDAwMDAwMEJENAotOjEwMjc0MDAwMDQyMjRBMTgwMDA1MDQxMjA2MjI0QTJDMDAwMDAwMEIzRAotOjEwMjc1MDAwMDQyMjRBNTgwMDA1MDQxNzA2MjI0QTZDMDAwMDAwMEJBOAotOjEwMjc2MDAwMDQyMjRBOTgwMDA1MDQxQzA2MjI0QUFDMDAwMDAwMEIxMwotOjEwMjc3MDAwMDQyMjRBRDgwMDA1MDQyMTA2MjI0QUVDMDAwMDAwMDU4NAotOjEwMjc4MDAwMDYyMjRCMDAwMDAwMDAxNzA0MjI0QjVDMDAwMTA0MjZDNwotOjEwMjc5MDAwMDYyMjRCNjAwMDAwMDAwMzA0MjI0QjZDMDAwMTA0Mjc1QQotOjEwMjdBMDAwMDYyMjM4MDAwMDAwMDA0MDA2MjIzMDAwMDAwMDAyMDAyRgotOjEwMjdCMDAwMDQyMjUxQzAwMDA0MDQyODA2MjIxMDAwMDAwMDAwQzBCQQotOjEwMjdDMDAwMDYyMjE1QzAwMDAwMDI0MDA0MjIxRUM4MDAwODA0MkM4NgotOjEwMjdEMDAwMDYyMjM5MDAwMDAwMDAwODAyMjI1MTE4MDAwMDAwMDAwMwotOjEwMjdFMDAwMDYyMjUxRDAwMDAwMDAwNjA2MjIxMzAwMDAwMDAwMDI1RAotOjEwMjdGMDAwMDYyMjE0MTAwMDAwMDAzMDA2MjIzOTIwMDAwMDAwMDhENAotOjEwMjgwMDAwMDIyMjUxMUMwMDAwMDAwMDA2MjI1MUU4MDAwMDAwMDZEMAotOjEwMjgxMDAwMDYyMjEzMDgwMDAwMDAwMjA2MjIxNEQwMDAwMDAwMzAzNwotOjEwMjgyMDAwMDIxNjEwMDAwMDAwMDAyODAyMTcwMDA4MDAwMDAwMDIzNQotOjEwMjgzMDAwMDIxNzAwMkMwMDAwMDAwMzAyMTcwMDNDMDAwMDAwMDRGNwotOjEwMjg0MDAwMDIxNzAwNDQwMDAwMDAwMDAyMTcwMDQ4MDAwMDAwMDJDOAotOjEwMjg1MDAwMDIxNzAwNEMwMDAwMDA5MDAyMTcwMDUwMDAwMDAwOTA4QQotOjEwMjg2MDAwMDIxNzAwNTQwMDgwMDA5MDAyMTcwMDU4MDgxMDAwMDA2MgotOjEwMjg3MDAwMDIxNzAwNjAwMDAwMDA4QTAyMTcwMDY0MDAwMDAwODA1OAotOjEwMjg4MDAwMDIxNzAwNjgwMDAwMDA4MTAyMTcwMDZDMDAwMDAwODA0MQotOjEwMjg5MDAwMDIxNzAwNzAwMDAwMDAwNjAyMTcwMDc4MDAwMDA3RDA0MQotOjEwMjhBMDAwMDIxNzAwN0MwMDAwMDc2QzAyMTcwMDM4MDA3QzEwMDQzRgotOjEwMjhCMDAwMDIxNzAwMDQwMDAwMDAwRjA2MTY0MDI0MDAwMDAwMDI2QQotOjEwMjhDMDAwMDIxNjQwNzAwMDAwMDAxQzAyMTY0MjA4MDAwMDAwMDFDMQotOjEwMjhEMDAwMDIxNjQyMTAwMDAwMDAwMTAyMTY0MjIwMDAwMDAwMDExMgotOjEwMjhFMDAwMDIxNjQyMjgwMDAwMDAwMTAyMTY0MjMwMDAwMDAwMDFEQQotOjEwMjhGMDAwMDIxNjQyMzgwMDAwMDAwMTAyMTY0MjYwMDAwMDAwMDE4QQotOjEwMjkwMDAwMEMxNjQwMUMwMDAzRDA5MDBBMTY0MDFDMDAwMDAwOUNDRQotOjEwMjkxMDAwMEIxNjQwMUMwMDAwMDlDNDAyMTY0MDMwMDAwMDAwMDhERAotOjEwMjkyMDAwMDIxNjQwMzQwMDAwMDAwQzAyMTY0MDM4MDAwMDAwMTA2RgotOjEwMjkzMDAwMDIxNjQwNDQwMDAwMDAyMDAyMTY0MDAwMDAwMDAwMDE4MgotOjEwMjk0MDAwMDIxNjQwRDgwMDAwMDAwMTAyMTY0MDA4MDAwMDAwMDFGNQotOjEwMjk1MDAwMDIxNjQwMEMwMDAwMDAwMTAyMTY0MDEwMDAwMDAwMDFBOQotOjEwMjk2MDAwMDIxNjQyNDAwMDAwMDAwMDAyMTY0MjQ4MDAwMDAwMDAyQgotOjEwMjk3MDAwMDYxNjQyNzAwMDAwMDAwMjAyMTY0MjUwMDAwMDAwMDBERAotOjEwMjk4MDAwMDIxNjQyNTgwMDAwMDAwMDA2MTY0MjgwMDAwMDAwMDJCNQotOjEwMjk5MDAwMDIxNjYwMDgwMDAwMDYxNDAyMTY2MDBDMDAwMDA2MDAxMwotOjEwMjlBMDAwMDIxNjYwMTAwMDAwMDYwNDAyMTY2MDFDMDAwMEZGRkYwMwotOjEwMjlCMDAwMDIxNjYwMjAwMDAwRkZGRjAyMTY2MDI0MDAwMEZGRkZFNwotOjEwMjlDMDAwMDIxNjYwMjgwMDAwRkZGRjAyMTY2MDM4MDAwMDAwMjA5OQotOjEwMjlEMDAwMDIxNjYwM0MwMDAwMDAyMDA2MTY2MDQwMDAwMDAwMDI2NQotOjEwMjlFMDAwMDIxNjYwNDgwMDAwMDAyMzAyMTY2MDRDMDAwMDAwMjQxQwotOjEwMjlGMDAwMDIxNjYwNTAwMDAwMDAyNTAyMTY2MDU0MDAwMDAwMjZGOAotOjEwMkEwMDAwMDIxNjYwNTgwMDAwMDAyNzAyMTY2MDVDMDAwMDAwMjlEMgotOjEwMkExMDAwMDIxNjYwNjAwMDAwMDAyQTAyMTY2MDY0MDAwMDAwMkJBRAotOjEwMkEyMDAwMDIxNjYwNjgwMDAwMDAyQzAyMTY2MDZDMDAwMDAwMkQ4OQotOjEwMkEzMDAwMDYxNjYwNzAwMDAwMDAxMjAyMTY2MEI4MDAwMDAwMDE2NwotOjEwMkE0MDAwMDIxNjYwQkMwMDAwMDAwMTA2MTY2MEMwMDAwMDAwM0VENwotOjEwMkE1MDAwMDIxNjYxQjgwMDAwMDAwMTA2MTY2MUJDMDAwMDAwMUZFQwotOjEwMkE2MDAwMDIxNjYyMzgwN0ZGRkZGRjAyMTY2MjNDMDAwMDAwM0ZCQgotOjEwMkE3MDAwMDIxNjYyNDAwN0ZGRkZGRjAyMTY2MjQ0MDAwMDAwMEZDQgotOjEwMkE4MDAwMDExNjYyNDgwMDAwMDAwMDAxMTY2MjRDMDAwMDAwMDBDMAotOjEwMkE5MDAwMDExNjYyNTAwMDAwMDAwMDAxMTY2MjU0MDAwMDAwMDBBMAotOjEwMkFBMDAwMDExNjYyNTgwMDAwMDAwMDAxMTY2MjVDMDAwMDAwMDA4MAotOjEwMkFCMDAwMDExNjYyNjAwMDAwMDAwMDAxMTY2MjY0MDAwMDAwMDA2MAotOjEwMkFDMDAwMDExNjYyNjgwMDAwMDAwMDAxMTY2MjZDMDAwMDAwMDA0MAotOjEwMkFEMDAwMDExNjYyNzAwMDAwMDAwMDAxMTY2Mjc0MDAwMDAwMDAyMAotOjEwMkFFMDAwMDExNjYyNzgwMDAwMDAwMDAxMTY2MjdDMDAwMDAwMDAwMAotOjEwMkFGMDAwMDIxNjY0QkMwMDAwMDAwMTBDMTY2MDAwMDAwMDAzRTgzMAotOjEwMkIwMDAwMEExNjYwMDAwMDAwMDAwMTBCMTY2MDAwMDAwMDAwMEFCOQotOjEwMkIxMDAwMDIxNjgwNDAwMDAwMDAwNjAyMTY4MDQ0MDAwMDAwMDVGNgotOjEwMkIyMDAwMDIxNjgwNDgwMDAwMDAwQTAyMTY4MDRDMDAwMDAwMDVEMgotOjEwMkIzMDAwMDIxNjgwNTQwMDAwMDAwMjAyMTY4MENDMDAwMDAwMDQzRgotOjEwMkI0MDAwMDIxNjgwRDAwMDAwMDAwNDAyMTY4MEQ0MDAwMDAwMDRBOQotOjEwMkI1MDAwMDIxNjgwRDgwMDAwMDAwNDAyMTY4MERDMDAwMDAwMDQ4OQotOjEwMkI2MDAwMDIxNjgwRTAwMDAwMDAwNDAyMTY4MEU0MDAwMDAwMDQ2OQotOjEwMkI3MDAwMDIxNjgwRTgwMDAwMDAwNDAyMTY4ODA0MDAwMDAwMDQyOQotOjEwMkI4MDAwMDIxNjgwMzAwMDAwMDA3QzAyMTY4MDM0MDAwMDAwM0RGOAotOjEwMkI5MDAwMDIxNjgwMzgwMDAwMDAzRjAyMTY4MDNDMDAwMDAwOUNCNgotOjEwMkJBMDAwMDIxNjgwRjAwMDAwMDAwNzA2MTY4MEY0MDAwMDAwMDUwMQotOjEwMkJCMDAwMDIxNjg4MEMwMTAxMDEwMTAyMTY4MTA4MDAwMDAwMDBDNAotOjEwMkJDMDAwMDIxNjgxMEMwMDAwMDAwNDAyMTY4MTEwMDAwMDAwMDRBRgotOjEwMkJEMDAwMDIxNjgxMTQwMDAwMDAwMjAyMTY4ODEwMDgwMTIwMDQ2OQotOjEwMkJFMDAwMDIxNjgxMTgwMDAwMDAwNTAyMTY4MTFDMDAwMDAwMDU3NQotOjEwMkJGMDAwMDIxNjgxMjAwMDAwMDAwNTAyMTY4MTI0MDAwMDAwMDU1NQotOjEwMkMwMDAwMDIxNjg4MkMyMDA4MTAwMTAyMTY4MTI4MDAwMDAwMDhGNgotOjEwMkMxMDAwMDIxNjgxMkMwMDAwMDAwNjAyMTY4MTMwMDAwMDAwMDcxOQotOjEwMkMyMDAwMDIxNjgxMzQwMDAwMDAwMDAyMTY4ODMwMDEwMTAxMjBFNAotOjEwMkMzMDAwMDYxNjgxMzgwMDAwMDAwNDAyMTY4ODM0MDEwMTAxMDFFMwotOjEwMkM0MDAwMDYxNjgxNDgwMDAwMDAwNDAyMTY4ODM4MDEwMTAxMDFCRgotOjEwMkM1MDAwMDYxNjgxNTgwMDAwMDAwNDAyMTY4ODNDMDEwMTAxMDE5QgotOjEwMkM2MDAwMDYxNjgxNjgwMDAwMDAwMzAyMTY4MTc0MDAwMDAwMDE0RQotOjEwMkM3MDAwMDIxNjg4NDAwMTAxMDEwMTAyMTY4MTc4MDAwMDAwMDE1RQotOjEwMkM4MDAwMDIxNjgxN0MwMDAwMDAwMTAyMTY4MTgwMDAwMDAwMDExNAotOjEwMkM5MDAwMDIxNjgxODQwMDAwMDAwMTAyMTY4ODQ0MDEwMTAxMDEyRQotOjEwMkNBMDAwMDIxNjgxODgwMDAwMDAwMTAyMTY4MThDMDAwMDAwMDREOQotOjEwMkNCMDAwMDIxNjgxOTAwMDAwMDAwNDAyMTY4MTk0MDAwMDAwMDJCOAotOjEwMkNDMDAwMDIxNjg4NDgwODAxMjAwNDAyMTY4MTk4MDAwMDAwMDVCOQotOjEwMkNEMDAwMDIxNjgxOUMwMDAwMDAwNTAyMTY4MUEwMDAwMDAwMDU3QwotOjEwMkNFMDAwMDIxNjgxQTQwMDAwMDAwNTAyMTY4ODE0MjAwODEwMDFCNQotOjEwMkNGMDAwMDIxNjgxQTgwMDAwMDAwODAyMTY4MUFDMDAwMDAwMDY0MAotOjEwMkQwMDAwMDIxNjgxQjAwMDAwMDAwNzAyMTY4MUI0MDAwMDAwMDEyNQotOjEwMkQxMDAwMDIxNjg4MTgwMTAxMDEyMDAyMTY4MUI4MDAwMDAwMDE4NgotOjEwMkQyMDAwMDIxNjgxQkMwMDAwMDAwMTAyMTY4MUMwMDAwMDAwMDFGMwotOjEwMkQzMDAwMDIxNjgxQzQwMDAwMDAwMTAyMTY4ODFDMDEwMTAxMDE3NQotOjEwMkQ0MDAwMDIxNjgxQzgwMDAwMDAwMTAyMTY4MUNDMDAwMDAwMDFCQgotOjEwMkQ1MDAwMDIxNjgxRDAwMDAwMDAwMTAyMTY4MUQ0MDAwMDAwMDE5QgotOjEwMkQ2MDAwMDIxNjg4MjAwMTAxMDEwMTAyMTY4MUQ4MDAwMDAwMDEyRAotOjEwMkQ3MDAwMDIxNjgxREMwMDAwMDAwMTAyMTY4MUUwMDAwMDAwMDE2MwotOjEwMkQ4MDAwMDIxNjgxRTQwMDAwMDAwMTAyMTY4ODI0MDEwMTAxMDFGRAotOjEwMkQ5MDAwMDIxNjgxRTgwMDAwMDAwMTAyMTY4MUVDMDAwMDAwMDEyQgotOjEwMkRBMDAwMDIxNjgxRjAwMDAwMDAwMTAyMTY4ODI4MDEwMTAxMDFDRAotOjEwMkRCMDAwMDIxNjgyNDBGRkZGMDAzRjA2MTY4MjQ0MDAwMDAwMDIxOAotOjEwMkRDMDAwMDIxNjgyNENGRkZGMDAzRjAyMTY4MjUwMDAwMDAxMDBGNQotOjEwMkREMDAwMDIxNjgyNTQwMDAwMDEwMDA2MTY4MjU4MDAwMDAwMDIwQwotOjEwMkRFMDAwMDIxNjgyNjAwMDAwMDBDMDAyMTY4MjY0MDAwMDAwQzA2QgotOjEwMkRGMDAwMDIxNjgyNjgwMDAwMUUwMDAyMTY4MjZDMDAwMDFFMDA4RgotOjEwMkUwMDAwMDIxNjgyNzAwMDAwNDAwMDAyMTY4Mjc0MDAwMDQwMDAyQQotOjEwMkUxMDAwMDIxNjgyNzgwMDAwODAwMDAyMTY4MjdDMDAwMDgwMDA4QQotOjEwMkUyMDAwMDIxNjgyODAwMDAwMjAwMDAyMTY4Mjg0MDAwMDIwMDAyQQotOjEwMkUzMDAwMDYxNjgyODgwMDAwMDAwNzAyMTY4MkE0MDAwMDAwMDEyNgotOjEwMkU0MDAwMDYxNjgyQTgwMDAwMDAwQTAyMTY4MUY0MDAwMDBDMDg5MQotOjEwMkU1MDAwMDIxNjgxRjgwMDAwMDA0MDAyMTY4MUZDMDAwMDAxMDAwQgotOjEwMkU2MDAwMDIxNjgyMDAwMDAwMDAyMDAyMTY4MjA0MDAwMDAwMTdGMwotOjEwMkU3MDAwMDIxNjgyMDgwMDAwMDA4MDAyMTY4MjBDMDAwMDAyMDA4OAotOjEwMkU4MDAwMDIxNjgyMTAwMDAwMDAwMDAyMTY4MjE4RkZGRjAxRkZFOAotOjEwMkU5MDAwMDIxNjgyMTRGRkZGMDFGRjAyMTY4MjNDMDAwMDAwMTM5RAotOjEwMkVBMDAwMDIxNjgwOTAwMDAwMDEzRjAyMTY4MDYwMDAwMDAxNDA4MQotOjEwMkVCMDAwMDIxNjgwNjQwMDAwMDE0MDA2MTY4MDY4MDAwMDAwMDJDRgotOjEwMkVDMDAwMDIxNjgwNzAwMDAwMDBDMDA2MTY4MDc0MDAwMDAwMDcyMwotOjEwMkVEMDAwMDIxNjgwOUMwMDAwMDA0ODAyMTY4MEEwMDAwMDAwNDhGNgotOjEwMkVFMDAwMDYxNjgwQTQwMDAwMDAwMjAyMTY4MEFDMDAwMDAwNDgxNAotOjEwMkVGMDAwMDYxNjgwQjAwMDAwMDAwNzAyMTY4MjM4MDAwMDgwMDAyRAotOjEwMkYwMDAwMDIxNjgyMzQwMDAwMjVFNDAyMTY4MDk0MDAwMDdGRkY0MAotOjEwMkYxMDAwMDIxNjgyMjAwMDAwMDAwNzAyMTY4MjFDMDAwMDAwMDczMwotOjEwMkYyMDAwMDIxNjgyMjgwMDAwMDAwMDAyMTY4MjI0RkZGRkZGRkYyNQotOjEwMkYzMDAwMDIxNjgyMzAwMDAwMDAwMDAyMTY4MjJDRkZGRkZGRkYwNQotOjEwMkY0MDAwMDIxNjgwRUMwMDAwMDBGRjAyMTQwMDAwMDAwMDAwMDFFNwotOjEwMkY1MDAwMDIxNDAwMEMwMDAwMDAwMTAyMTQwMDQwMDAwMDAwMDFGNwotOjEwMkY2MDAwMDIxNDAwNDQwMDAwN0ZGRjAyMTQwMDBDMDAwMDAwMDA2NwotOjEwMkY3MDAwMDIxNDAwMDAwMDAwMDAwMDAyMTQwMDZDMDAwMDAwMDBCOQotOjEwMkY4MDAwMDIxNDAwMDQwMDAwMDAwMTAyMTQwMDMwMDAwMDAwMDFERgotOjEwMkY5MDAwMDIxNDAwMDQwMDAwMDAwMDAyMTQwMDVDMDAwMDAwMDBBNQotOjEwMkZBMDAwMDIxNDAwMDgwMDAwMDAwMTAyMTQwMDM0MDAwMDAwMDFCNwotOjEwMkZCMDAwMDIxNDAwMDgwMDAwMDAwMDAyMTQwMDYwMDAwMDAwMDA3RAotOjEwMkZDMDAwMDYwMjgwMDAwMDAwMjAwMDAyMDIwMDU4MDAwMDAwMzJDQgotOjEwMkZEMDAwMDIwMjAwQTAwMzE1MDAyMDAyMDIwMEE0MDMxNTAwMjAzNQotOjEwMkZFMDAwMDIwMjAwQTgwMTAwMDAzMDAyMDIwMEFDMDgxMDAwMDAzQwotOjEwMkZGMDAwMDIwMjAwQjAwMDAwMDAzMzAyMDIwMEI0MDAwMDAwMzAwMgotOjEwMzAwMDAwMDIwMjAwQjgwMDAwMDAzMTAyMDIwMEJDMDAwMDAwMDMxMAotOjEwMzAxMDAwMDIwMjAwQzAwMDAwMDAwNjAyMDIwMEM0MDAwMDAwMDMxQgotOjEwMzAyMDAwMDIwMjAwQzgwMDAwMDAwMzAyMDIwMENDMDAwMDAwMDJGRgotOjEwMzAzMDAwMDIwMjAwRDAwMDAwMDAwMDAyMDIwMEQ0MDAwMDAwMDJFMgotOjEwMzA0MDAwMDIwMjAwREMwMDAwMDAwMDAyMDIwMEUwMDAwMDAwMDZCNgotOjEwMzA1MDAwMDIwMjAwRTQwMDAwMDAwNDAyMDIwMEU4MDAwMDAwMDI5NgotOjEwMzA2MDAwMDIwMjAwRUMwMDAwMDAwMjAyMDIwMEYwMDAwMDAwMDE3OQotOjEwMzA3MDAwMDIwMjAwRkMwMDAwMDAwNjAyMDIwMTIwMDAwMDAwMDAyNQotOjEwMzA4MDAwMDIwMjAxMzQwMDAwMDAwMjAyMDIwMUIwMDAwMDAwMDE0RgotOjEwMzA5MDAwMDIwMjAyMEMwMDAwMDAwMTAyMDIwMjE0MDAwMDAwMDEwMgotOjEwMzBBMDAwMDIwMjAyMTgwMDAwMDAwMjAyMDIwNDA0MDAwMDAwMDFGMwotOjEwMzBCMDAwMDIwMjA0MEMwMDAwMDA0MDAyMDIwNDEwMDAwMDAwNDA2NAotOjEwMzBDMDAwMDIwMjA0MUMwMDAwMDAwNDAyMDIwNDIwMDAwMDAwMjA5MAotOjEwMzBEMDAwMDIwMjA0MjQwMDAwMDAwMjAyMDIwNDI4MDAwMDAwMUY3MwotOjEwMzBFMDAwMDYwMjA1MDAwMDAwMDAxMjA0MDIwNDgwMDAyMDA0MzRERgotOjEwMzBGMDAwMDIwMjAwNjAwMDAwMDAwRjAyMDIwMDY0MDAwMDAwMDdFRQotOjEwMzEwMDAwMDIwMjAwNjgwMDAwMDAwMDAyMDIwMDZDMDAwMDAwMEVENQotOjEwMzExMDAwMDYwMjAwNzAwMDAwMDAwNDAyMDIwMEY0MDAwMDAwMDQzNwotOjEwMzEyMDAwMDIwMjAwMDQwMDAwMDAwMTAyMDIwMDA4MDAwMDAwMDE4OQotOjEwMzEzMDAwMDIwMjAwMEMwMDAwMDAwMTAyMDIwMDEwMDAwMDAwMDE2OQotOjEwMzE0MDAwMDIwMjAwMTQwMDAwMDAwMTAyMDIwMDE4MDAwMDAwMDE0OQotOjEwMzE1MDAwMDIwMjAwMUMwMDAwMDAwMTAyMDIwMDIwMDAwMDAwMDEyOQotOjEwMzE2MDAwMDIwMjAwMjQwMDAwMDAwMTAyMDIwMDI4MDAwMDAwMDEwOQotOjEwMzE3MDAwMDIwMjAwMkMwMDAwMDAwMTAyMDIwMDMwMDAwMDAwMDFFOQotOjEwMzE4MDAwMDIwMjAwMzQwMDAwMDAwMTAyMDIwMDM4MDAwMDAwMDFDOQotOjEwMzE5MDAwMDIwMjAwM0MwMDAwMDAwMTAyMDIwMDQwMDAwMDAwMDFBOQotOjEwMzFBMDAwMDIwMjAwNDQwMDAwMDAwMTAyMDIwMDQ4MDAwMDAwMDE4OQotOjEwMzFCMDAwMDIwMjAwNEMwMDAwMDAwMTAyMDIwMDUwMDAwMDAwMDE2OQotOjEwMzFDMDAwMDIwMjAxMDgwMDAwMDBDODAyMDIwMTE4MDAwMDAwMDIwQgotOjEwMzFEMDAwMDIwMjAxQzQwMDAwMDAwMDAyMDIwMUNDMDAwMDAwMDA1NQotOjEwMzFFMDAwMDIwMjAxRDQwMDAwMDAwMjAyMDIwMURDMDAwMDAwMDIyMQotOjEwMzFGMDAwMDIwMjAxRTQwMDAwMDBGRjAyMDIwMUVDMDAwMDAwRkZGNwotOjEwMzIwMDAwMDIwMjAxMEMwMDAwMDBDODAyMDIwMTFDMDAwMDAwMDJDMgotOjEwMzIxMDAwMDIwMjAxQzgwMDAwMDAwMDAyMDIwMUQwMDAwMDAwMDAwQwotOjEwMzIyMDAwMDIwMjAxRDgwMDAwMDAwMjAyMDIwMUUwMDAwMDAwMDJEOAotOjEwMzIzMDAwMDIwMjAxRTgwMDAwMDBGRjAyMDIwMUYwMDAwMDAwRkZBRQotOjEwMzI0MDAwMDcyODA0MDAwMDhEMDAwMDA4MjgwNzY4MDAxMzA0NTRCNAotOjEwMzI1MDAwMDcyQzAwMDAzNDA5MDAwMDA3MkM4MDAwMzg5OTBEMDM2QQotOjEwMzI2MDAwMDcyRDAwMDAzOTBDMUIyQTA3MkQ4MDAwMDY0MTI5NkUwRQotOjEwMzI3MDAwMDgyRDhBQjA0RUFBMDQ1NjAxMjgwMDAwMDAwMDAwMDA2NAotOjEwMzI4MDAwMDEyODAwMDQwMDAwMDAwMDAxMjgwMDA4MDAwMDAwMDBFMAotOjEwMzI5MDAwMDEyODAwMEMwMDAwMDAwMDAxMjgwMDEwMDAwMDAwMDBDMAotOjEwMzJBMDAwMDEyODAwMTQwMDAwMDAwMDAyMjgwMDIwMDAwMDAwMDE5NgotOjEwMzJCMDAwMDIyODAwMjQwMDAwMDAwMjAyMjgwMDI4MDAwMDAwMDM2OQotOjEwMzJDMDAwMDIyODAwMkMwMDAwMDAwMDAyMjgwMDMwMDAwMDAwMDQ0QQotOjEwMzJEMDAwMDIyODAwMzQwMDAwMDAwMTAyMjgwMDM4MDAwMDAwMDAyRAotOjEwMzJFMDAwMDIyODAwM0MwMDAwMDAwMTAyMjgwMDQwMDAwMDAwMDQwOQotOjEwMzJGMDAwMDIyODAwNDQwMDAwMDAwMDAyMjgwMDQ4MDAwMDAwMDFFRAotOjEwMzMwMDAwMDIyODAwNEMwMDAwMDAwMzAyMjgwMDUwMDAwMDAwMDBDQQotOjEwMzMxMDAwMDIyODAwNTQwMDAwMDAwMTAyMjgwMDU4MDAwMDAwMDRBOAotOjEwMzMyMDAwMDIyODAwNUMwMDAwMDAwMDAyMjgwMDYwMDAwMDAwMDE4QwotOjEwMzMzMDAwMDIyODAwNjQwMDAwMDAwMzAyMjgwMDY4MDAwMDAwMDA2QQotOjEwMzM0MDAwMDIyODAwNkMwMDAwMDAwMTAyMjgwMDcwMDAwMDAwMDQ0OAotOjEwMzM1MDAwMDIyODAwNzQwMDAwMDAwMDAyMjgwMDc4MDAwMDAwMDQyOQotOjEwMzM2MDAwMDIyODAwN0MwMDAwMDAwMzA2MjgwMDgwMDAwMDAwMDIwNAotOjEwMzM3MDAwMDIyODAwQTQwMDAwM0ZGRjAyMjgwMEE4MDAwMDAzRkY2RAotOjEwMzM4MDAwMDIyODAyMjQwMDAwMDAwMDAyMjgwMjM0MDAwMDAwMDA4RAotOjEwMzM5MDAwMDIyODAyNEMwMDAwMDAwMDAyMjgwMkU0MDAwMEZGRkZBNwotOjEwMzNBMDAwMDYyODIwMDAwMDAwMDgwMDAyMkI4QkMwMDAwMDAwMDE0RQotOjEwMzNCMDAwMDIyQjgwMDAwMDAwMDAwMDAyMkI4MDQwMDAwMDAwMTg1QgotOjEwMzNDMDAwMDIyQjgwODAwMDAwMDAwQzAyMkI4MEMwMDAwMDAwNjZGMQotOjEwMzNEMDAwMEMyQjgzMDAwMDA3QTEyMDBBMkI4MzAwMDAwMDAxMzg3QQotOjEwMzNFMDAwMEIyQjgzMDAwMDAwMTM4ODBBMkI4MzQwMDAwMDAwMDA5MQotOjEwMzNGMDAwMEMyQjgzNDAwMDAwMDFGNDBCMkI4MzQwMDAwMDAwMDVFMAotOjEwMzQwMDAwMDIyQjgzODAwMDA3QTEyMDAyMkI4M0MwMDAwMDAxRjQ1RgotOjEwMzQxMDAwMDYyQTNENDgwMDAwMDAwNDA0MkEzRDU4MDAwMjA0NThEMgotOjEwMzQyMDAwMDYyQTNENjAwMDAwMDAwNjA2MkEzMDAwMDAwMDAwNDgyMQotOjEwMzQzMDAwMDYyQTIwMDgwMDAwMDBDODA2MkEyMDAwMDAwMDAwMDIxQQotOjEwMzQ0MDAwMDYyQTMxMjgwMDAwMDA4RTA2MkEzMzY4MDAwMDAwMDM5NwotOjEwMzQ1MDAwMDQyQTMzNzQwMDAxMDQ1QTA2MkEzQTc4MDAwMDAwMDI1NAotOjEwMzQ2MDAwMDQyQTNBODAwMDAyMDQ1QjA0MkEzQTcwMDAwMjA0NUREOAotOjEwMzQ3MDAwMDQyQTNFMjgwMDAyMDQ1RjA0MkEzRUIwMDAwNDA0NjFDRQotOjEwMzQ4MDAwMDQyQTI1MDAwMDAyMDQ2NTA2MkEyNTA4MDAwMDAxMDAyMAotOjEwMzQ5MDAwMDYyQTI5NzAwMDAwMDAwNDA0MkEyOTYwMDAwNDA0NjczOQotOjEwMzRBMDAwMDQyQTJGNDgwMDAyMDQ2QjA2MkEzMzc4MDAwMDAwRDg1MwotOjEwMzRCMDAwMDIyQTNBMzgwMDAwMDAwMDA2MkEzQTg4MDAwMDAwMzI0QQotOjEwMzRDMDAwMDQyQTNEODgwMDEwMDQ2RDA2MkE1MDIwMDAwMDAwMDJFNgotOjEwMzREMDAwMDYyQTUwMzAwMDAwMDAwMjA2MkE1MDAwMDAwMDAwMDJCOAotOjEwMzRFMDAwMDYyQTUwMTAwMDAwMDAwMjAyMkE1MEI4MDAwMDAwMDExNQotOjEwMzRGMDAwMDYyQTUwNDgwMDAwMDAwRTA0MkEzRDc4MDAwMjA0N0Q5MAotOjEwMzUwMDAwMDYyQTNDMTgwMDAwMDAyNjAyMkE1MDQwMDAwMDAwMDA1NQotOjEwMzUxMDAwMDYyQTM2RDgwMDAwMDBEODAyMkEzQTNDMDAwMDAwMDBGMwotOjEwMzUyMDAwMDYyQTNCNTAwMDAwMDAzMjA0MkEzREM4MDAxMDA0N0ZFOAotOjEwMzUzMDAwMDYyQTUwMjgwMDAwMDAwMjA2MkE1MDM4MDAwMDAwMDIyNwotOjEwMzU0MDAwMDYyQTUwMDgwMDAwMDAwMjA2MkE1MDE4MDAwMDAwMDI1NwotOjEwMzU1MDAwMDIyQTUwQkMwMDAwMDAwMTA2MkE1MDgwMDAwMDAwMEUyNAotOjEwMzU2MDAwMDQyQTNEODAwMDAyMDQ4RjA2MkEzQ0IwMDAwMDAwMjY5OQotOjEwMzU3MDAwMDIyQTUwNDQwMDAwMDAwMDAyMTAxMDA4MDAwMDAwMDE2MAotOjEwMzU4MDAwMDIxMDEwMTAwMDAwMDI2NDAyMTAxMDAwMDAwM0QwMDBBRQotOjEwMzU5MDAwMDIxMDEwMDQwMDAwMDAzRDA5MTAxODAwMDIwMDA0OTEwMAotOjEwMzVBMDAwMDkxMDExMDAwMDEwMDY5MTA2MTAxMTQwMDAwMDAwMDhEQgotOjEwMzVCMDAwMDkxMDExNjAwMDA4MDZBMTA2MTAxMTgwMDAwMDAwMDIyOQotOjEwMzVDMDAwMDkxMDExODgwMDA2MDZBOTA2MTAxMUEwMDAwMDAwMThCNQotOjEwMzVEMDAwMDIxMDEwMTAwMDAwMDAwMDA2MTAyNDAwMDAwMDAwRTA5RgotOjEwMzVFMDAwMDIxMDIwMUMwMDAwMDAwMDAyMTAyMDIwMDAwMDAwMDEzQQotOjEwMzVGMDAwMDIxMDIwQzAwMDAwMDAwMTAyMTAyMDA0MDAwMDAwMDFBMQotOjEwMzYwMDAwMDIxMDIwMDgwMDAwMDAwMTA5MTAzQzAwMDAwNTA2QUY3MAotOjEwMzYxMDAwMDkxMDNDMjAwMDA1MDZCNDA5MTAzODAwMDAwNTA2Qjk2MQotOjEwMzYyMDAwMDIxMDQwMjgwMDAwMDAxMDAyMTA0MDQ0MDAwMDNGRkYzQwotOjEwMzYzMDAwMDIxMDQwNTgwMDI4MDAwMDAyMTA0MDg0MDA4NDkyNEE4MgotOjEwMzY0MDAwMDYxMDRDMDAwMDAwMDEwMDAyMTA0MDU4MDAwMDAwMDA2RAotOjEwMzY1MDAwMDYxMDgwNjgwMDAwMDAwNDAyMTA4MDAwMDAwMDEwODA0NgotOjEwMzY2MDAwMDYxMDgwMjgwMDAwMDAwMjAyMTA4MDM4MDAwMDAwMTBDMAotOjEwMzY3MDAwMDIxMDgwNDAwMDAwRkZGRjAyMTA4MDQ0MDAwMEZGRkZBNgotOjEwMzY4MDAwMDIxMDgwNTAwMDAwMDAwMDAyMTA4MTAwMDAwMDAwMDBDNQotOjEwMzY5MDAwMDYxMDgxMjAwMDAwMDAwMjAyMTA4MDA4MDAwMDAyQjUyMAotOjEwMzZBMDAwMDIxMDgwMTAwMDAwMDAwMDA2MTA4MjAwMDAwMDAwNEE5NgotOjEwMzZCMDAwMDIxMDgxMDgwMDAxRkZGRjA2MTA4MTQwMDAwMDAwMDI5NwotOjEwMzZDMDAwMDIxMDgwMDAwMDAwMUE4MDA2MTA5MDAwMDAwMDAwMjQwNAotOjEwMzZEMDAwMDYxMDkxMjAwMDAwMDA0QTA2MTA5MzcwMDAwMDAwNEE3NgotOjEwMzZFMDAwMDYxMDk1QzAwMDAwMDA0QTAyMTA4MDA0MDAwMDEwODBGRgotOjEwMzZGMDAwMDYxMDgwMzAwMDAwMDAwMjAyMTA4MDNDMDAwMDAwMTAyNAotOjEwMzcwMDAwMDIxMDgwNDgwMDAwRkZGRjAyMTA4MDRDMDAwMEZGRkYwNQotOjEwMzcxMDAwMDIxMDgwNTQwMDAwMDAwMDAyMTA4MTA0MDAwMDAwMDAyQwotOjEwMzcyMDAwMDYxMDgxMjgwMDAwMDAwMjAyMTA4MDBDMDAwMDAyQjU4MwotOjEwMzczMDAwMDIxMDgwMTQwMDAwMDAwMDA2MTA4NDAwMDAwMDAwNEFGRgotOjEwMzc0MDAwMDIxMDgxMEMwMDAxRkZGRjA2MTA4MTQ4MDAwMDAwMDJGQQotOjEwMzc1MDAwMDIxMDgwMDQwMDAwMUE4MDA2MTA5MDkwMDAwMDAwMjRERgotOjEwMzc2MDAwMDYxMDkyNDgwMDAwMDA0QTA2MTA5NDk4MDAwMDAwNEE5MwotOjEwMzc3MDAwMDYxMDk2RTgwMDAwMDA0QTAyMTIwNDkwMDBFMzgzNDAxRAotOjEwMzc4MDAwMDIxMjA1MTQwMDAwM0MxMDAyMTIwNTIwMDAwMDAwMDI4NQotOjEwMzc5MDAwMDIxMjA0OTRGRkZGRkZGRjAyMTIwNDk4RkZGRkZGRkZENQotOjEwMzdBMDAwMDIxMjA0OUNGRkZGRkZGRjAyMTIwNEEwRkZGRkZGRkZCNQotOjEwMzdCMDAwMDIxMjA0QTRGRkZGRkZGRjAyMTIwNEE4RkZGRkZGRkY5NQotOjEwMzdDMDAwMDIxMjA0QUNGRkZGRkZGRjAyMTIwNEIwRkZGRkZGRkY3NQotOjEwMzdEMDAwMDIxMjA0QjhGRkZGRkZGRjAyMTIwNEJDRkZGRkZGRkY0RAotOjEwMzdFMDAwMDIxMjA0QzBGRkZGRkZGRjAyMTIwNEM0RkZGRkZGRkYyRAotOjEwMzdGMDAwMDIxMjA0QzhGRkZGRkZGRjAyMTIwNENDRkZGRkZGRkYwRAotOjEwMzgwMDAwMDIxMjA0RDBGRkZGRkZGRjAyMTIwNERDRkZGRkZGRkZFNAotOjEwMzgxMDAwMDIxMjA0RTBGRkZGRkZGRjAyMTIwNEU0RkZGRkZGRkZCQwotOjEwMzgyMDAwMDIxMjA0RThGRkZGRkZGRjAyMTIwNEVDRkZGRkZGRkY5QwotOjEwMzgzMDAwMDIxMjA0RjBGRkZGRkZGRjAyMTIwNEY0RkZGRkZGRkY3QwotOjEwMzg0MDAwMDIxMjA0RjhGRkZGRkZGRjAyMTIwNEZDRkZGRkZGRkY1QwotOjEwMzg1MDAwMDIxMjA1MDBGRkZGRkZGRjAyMTIwNTA0RkZGRkZGRkYzQQotOjEwMzg2MDAwMDIxMjA1MDhGRkZGRkZGRjAyMTIwNTBDRkZGRkZGRkYxQQotOjEwMzg3MDAwMDIxMjA1MTBGRkZGRkZGRjAyMTIwNEQ0RkZGRjMzMzBENgotOjEwMzg4MDAwMDIxMjA0RDhGRkZGMzM0MDAyMTIwNEI0RjAwMDMwMDBFQgotOjEwMzg5MDAwMDIxMjAzOTAwMDAwMDAwODAyMTIwMzlDMDAwMDAwMDhCRQotOjEwMzhBMDAwMDYxMjAzQTAwMDAwMDAwMjAyMTIwM0JDMDAwMDAwMDQ4NAotOjEwMzhCMDAwMDIxMjAzQzQwMDAwMDAwNDAyMTIwM0QwMDAwMDAwMDA0MgotOjEwMzhDMDAwMDIxMjAzREMwMDAwMDAwMDAyMTIwMzZDMDAwMDAwMDE4MQotOjEwMzhEMDAwMDIxMjAzNjgwMDAwMDAzRjAyMTIwMUJDMDAwMDAwNDAxOQotOjEwMzhFMDAwMDIxMjAxQzAwMDAwMTgwODAyMTIwMUM0MDAwMDA4MDNGRgotOjEwMzhGMDAwMDIxMjAxQzgwMDAwMDgwMzAyMTIwMUNDMDAwMDAwNDBCRgotOjEwMzkwMDAwMDIxMjAxRDAwMDAwMDAwMzAyMTIwMUQ0MDAwMDA4MDNEQgotOjEwMzkxMDAwMDIxMjAxRDgwMDAwMDgwMzAyMTIwMURDMDAwMDA4MDNCMwotOjEwMzkyMDAwMDIxMjAxRTAwMDAxMDAwMzAyMTIwMUU0MDAwMDA4MDM5QQotOjEwMzkzMDAwMDIxMjAxRTgwMDAwMDgwMzAyMTIwMUVDMDAwMDAwMDM3QgotOjEwMzk0MDAwMDIxMjAxRjAwMDAwMDAwMzAyMTIwMUY0MDAwMDAwMDM2MwotOjEwMzk1MDAwMDIxMjAxRjgwMDAwMDAwMzAyMTIwMUZDMDAwMDAwMDM0MwotOjEwMzk2MDAwMDIxMjAyMDAwMDAwMDAwMzAyMTIwMjA0MDAwMDAwMDMyMQotOjEwMzk3MDAwMDIxMjAyMDgwMDAwMDAwMzAyMTIwMjBDMDAwMDAwMDMwMQotOjEwMzk4MDAwMDIxMjAyMTAwMDAwMDAwMzAyMTIwMjE0MDAwMDAwMDNFMQotOjEwMzk5MDAwMDIxMjAyMTgwMDAwMDAwMzAyMTIwMjFDMDAwMDAwMDNDMQotOjEwMzlBMDAwMDIxMjAyMjAwMDAwMDAwMzAyMTIwMjI0MDAwMDAwMDNBMQotOjEwMzlCMDAwMDIxMjAyMjgwMDAwMjQwMzAyMTIwMjJDMDAwMDAwMkYzMQotOjEwMzlDMDAwMDIxMjAyMzAwMDAwMDAwOTAyMTIwMjM0MDAwMDAwMTk0NQotOjEwMzlEMDAwMDIxMjAyMzgwMDAwMDE4NDAyMTIwMjNDMDAwMDAxODMzRQotOjEwMzlFMDAwMDIxMjAyNDAwMDAwMDMwNjAyMTIwMjQ0MDAwMDAwMTkwNQotOjEwMzlGMDAwMDIxMjAyNDgwMDAwMDAwNjAyMTIwMjRDMDAwMDAzMDZGOAotOjEwM0EwMDAwMDIxMjAyNTAwMDAwMDMwNjAyMTIwMjU0MDAwMDAzMDZENAotOjEwM0ExMDAwMDIxMjAyNTgwMDAwMEM4NjAyMTIwMjVDMDAwMDAzMDYyQgotOjEwM0EyMDAwMDIxMjAyNjAwMDAwMDMwNjAyMTIwMjY0MDAwMDAwMDY5NwotOjEwM0EzMDAwMDIxMjAyNjgwMDAwMDAwNjAyMTIwMjZDMDAwMDAwMDY3QQotOjEwM0E0MDAwMDIxMjAyNzAwMDAwMDAwNjAyMTIwMjc0MDAwMDAwMDY1QQotOjEwM0E1MDAwMDIxMjAyNzgwMDAwMDAwNjAyMTIwMjdDMDAwMDAwMDYzQQotOjEwM0E2MDAwMDIxMjAyODAwMDAwMDAwNjAyMTIwMjg0MDAwMDAwMDYxQQotOjEwM0E3MDAwMDIxMjAyODgwMDAwMDAwNjAyMTIwMjhDMDAwMDAwMDZGQQotOjEwM0E4MDAwMDIxMjAyOTAwMDAwMDAwNjAyMTIwMjk0MDAwMDAwMDZEQQotOjEwM0E5MDAwMDIxMjAyOTgwMDAwMDAwNjAyMTIwMjlDMDAwMDAwMDZCQQotOjEwM0FBMDAwMDIxMjAyQTAwMDAwMDMwNjAyMTIwMkE0MDAwMDAwMTM4QQotOjEwM0FCMDAwMDIxMjAyQTgwMDAwMDAwNjAyMTIwMkIwMDAwMDEwMDQ2OAotOjEwM0FDMDAwMDIxMjAyQjQwMDAwMTAwNDAyMTIwMzI0MDAxMDY0NDAyOQotOjEwM0FEMDAwMDIxMjAzMjgwMDEwNjQ0MDAyMTIwMUIwMDAwMDAwMDEyRAotOjEwM0FFMDAwMDYwMEEwMDAwMDAwMDAxNjAyMDBBMDZDQkY1QzAwMDBGMQotOjEwM0FGMDAwMDIwMEEwNzBGRkY1MUZFRjAyMDBBMDc0MDAwMEZGRkY5RQotOjEwM0IwMDAwMDIwMEEwNzhGMDAwMDNFMDAyMDBBMDdDMDAwMDAwMDBBQQotOjEwM0IxMDAwMDIwMEEwODAwMDAwQTAwMDA2MDBBMDg0MDAwMDAwMDVCNAotOjEwM0IyMDAwMDIwMEEwOTgwRkUwMDAwMDA2MDBBMDlDMDAwMDAwMTQxNgotOjEwM0IzMDAwMDIwMEEwRUM1NTU0MDAwMDAyMDBBMEYwNTU1NTU1NTU2OAotOjEwM0I0MDAwMDIwMEEwRjQwMDAwNTU1NTAyMDBBMEY4RjAwMDAwMDBBQgotOjEwM0I1MDAwMDIwMEEwRkM1NTU0MDAwMDAyMDBBMTAwNTU1NTU1NTUyNwotOjEwM0I2MDAwMDIwMEExMDQwMDAwNTU1NTAyMDBBMTA4RjAwMDAwMDA2OQotOjEwM0I3MDAwMDYwMEEyMkMwMDAwMDAwNDAyMDBBMDYwMDAwMDAzMDc2MQotOjEwM0I4MDAwMDIwMEExMENCRjVDMDAwMDAyMDBBMTEwRkZGNTFGRUZCNgotOjEwM0I5MDAwMDIwMEExMTQwMDAwRkZGRjAyMDBBMTE4RjAwMDAzRTBFMgotOjEwM0JBMDAwMDIwMEExMUMwMDAwMDAwMDAyMDBBMTIwMDAwMEEwMDBGMwotOjEwM0JCMDAwMDYwMEExMjQwMDAwMDAwNTAyMDBBMTM4MEZFMDAwMDA2QgotOjEwM0JDMDAwMDYwMEExM0MwMDAwMDAxNDAyMDBBMThDNTU1NDAwMDAyNgotOjEwM0JEMDAwMDIwMEExOTA1NTU1NTU1NTAyMDBBMTk0MDAwMDU1NTU3RAotOjEwM0JFMDAwMDIwMEExOThGMDAwMDAwMDAyMDBBMTlDNTU1NDAwMDBDMgotOjEwM0JGMDAwMDIwMEExQTA1NTU1NTU1NTAyMDBBMUE0MDAwMDU1NTUzRAotOjEwM0MwMDAwMDIwMEExQThGMDAwMDAwMDA2MDBBMjNDMDAwMDAwMDQ5MQotOjEwM0MxMDAwMDIwMEEwNjQwMDAwMDMwNzAwMDAwMDAwMDAwMDAwMDA5NAotOjEwM0MyMDAwMDAwMDAwMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgotOjEwM0MzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAotOjEwM0M0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NAotOjEwM0M1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAotOjEwM0M2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAotOjEwM0M3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUwMDREMDAwMDAwMDBDOQotOjEwM0M4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAotOjEwM0M5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAotOjEwM0NBMDAwMDAwMDAwMDAwMDREMDA4QjAwMDAwMDAwMDAwMDAwMDAzQwotOjEwM0NCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAotOjEwM0NDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAotOjEwM0NEMDAwMDA4QjAwOTAwMDkwMDA5NDAwOTQwMDk4MDAwMDAwMDA3OQotOjEwM0NFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAotOjEwM0NGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ODAyREU0QwotOjEwM0QwMDAwMDJERTAyRTgwMkU4MDJGMjAwMDAwMDAwMDAwMDAwMDAwQgotOjEwM0QxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMwotOjEwM0QyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MwotOjEwM0QzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MwotOjEwM0Q0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MwotOjEwM0Q1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MwotOjEwM0Q2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MwotOjEwM0Q3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MwotOjEwM0Q4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMwotOjEwM0Q5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMwotOjEwM0RBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMwotOjEwM0RCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMwotOjEwM0RDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMwotOjEwM0REMDAwMDAwMDAwMDAwMDAwMDAwMDAyRjIwMkZBMDAwMDAwMDBGMwotOjEwM0RFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMwotOjEwM0RGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMwotOjEwM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMgotOjEwM0UxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgotOjEwM0UyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgotOjEwM0UzMDAwMDJGQTAyRkYwMkZGMDMwQTAzMEEwMzE1MDAwMDAwMDA1MgotOjEwM0U0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgotOjEwM0U1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgotOjEwM0U2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgotOjEwM0U3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgotOjEwM0U4MDAwMDAwMDAwMDAwMDAwMDAwMDAzMTUwMzE2MDAwMDAwMDAwMQotOjEwM0U5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgotOjEwM0VBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgotOjEwM0VCMDAwMDAwMDAwMDAwMzE2MDM1NzAwMDAwMDAwMDAwMDAwMDA4RgotOjEwM0VDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgotOjEwM0VEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgotOjEwM0VFMDAwMDM1NzAzN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQQotOjEwM0VGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgotOjEwM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3QjAzQkI3NQotOjEwM0YxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQotOjEwM0YyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQotOjEwM0YzMDAwMDAwMDAwMDAwMDAwMDAwMDAzQkIwM0Y3MDAwMDAwMDBDOQotOjEwM0Y0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQotOjEwM0Y1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQotOjEwM0Y2MDAwMDAwMDAwMDAwM0Y3MDQzRDA0M0QwNDUyMDQ1MjA0NjdCRQotOjEwM0Y3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQotOjEwM0Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQotOjEwM0Y5MDAwMDQ2NzA0RUQwNEVEMDRGMjA0RjIwNEY3MDAwMDAwMDBFRAotOjEwM0ZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQotOjEwM0ZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGNzA0RjgwQQotOjEwM0ZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQotOjEwM0ZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQotOjEwM0ZFMDAwMDAwMDAwMDAwMDAwMDAwMDA0RjgwNTBBMDAwMDAwMDBDNgotOjEwM0ZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQotOjEwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAotOjEwNDAxMDAwMDAwMDAwMDAwNTBBMDUxRjA1MUYwNTIyMDUyMjA1MjVEMQotOjEwNDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAotOjEwNDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAotOjEwNDA0MDAwMDUyNTA1NTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQwotOjEwNDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAotOjEwNDA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1NTA1REMxNQotOjEwNDA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAotOjEwNDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAotOjEwNDA5MDAwMDAwMDAwMDAwMDAwMDAwMDA1REMwNUUzMDVFMzA1RTc4MwotOjEwNDBBMDAwMDVFNzA1RUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAotOjEwNDBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotOjEwNDBDMDAwMDAwMDAwMDAwNUVCMDYyQjA2MkIwNjMzMDYzMzA2M0JFQgotOjEwNDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAotOjEwNDBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAotOjEwNDBGMDAwMDYzQjA2ODgwNjg4MDY5NTA2OTUwNkEyMDAwMDAwMDA4NQotOjEwNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgotOjEwNDExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBMjA2QUU0MwotOjEwNDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgotOjEwNDEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgotOjEwNDE0MDAwMDAwMDAwMDAwMDAwMDAwMDA2QUUwNkI0MDAwMDAwMDAwMQotOjEwNDE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgotOjEwNDE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgotOjEwNDE3MDAwMDAwMDAwMDAwNkI0MDZCNzAwMDAwMDAwMDAwMDAwMDBDOAotOjEwNDE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgotOjEwNDE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgotOjEwNDFBMDAwMDZCNzA2QkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgotOjEwNDFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgotOjEwNDFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZCRDA2QkU2OAotOjEwNDFEMDAwMDZCRTA2RDAwNkQwMDZFMjAwMDAwMDAwMDAwMDAwMDA4NwotOjEwNDFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgotOjEwNDFGMDAwMDAwMDAwMDAwMDAwMDAwMDA2RTIwNzRGMDAwMDAwMDA4MQotOjEwNDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQotOjEwNDIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQotOjEwNDIyMDAwMDAwMDAwMDAwNzRGMDc1MDA3NTAwNzYzMDc2MzA3NzYzOQotOjEwNDIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQotOjEwNDI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQotOjEwNDI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQotOjEwNDI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQotOjEwNDI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQotOjEwNDI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQotOjEwNDI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQotOjEwNDJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQotOjEwNDJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQotOjEwNDJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRQotOjEwNDJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQotOjEwNDJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQotOjEwNDJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQotOjEwNDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAotOjEwNDMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAotOjEwNDMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAotOjEwNDMzMDAwMDAwMTAwMDAwMDAyMDRDMDAwMDMwOTgwMDAwNDBFNDBEOAotOjEwNDM0MDAwMDAwNTEzMDAwMDA2MTdDMDAwMDcxQzgwMDAwODIxNDA2QwotOjEwNDM1MDAwMDAwOTI2MDAwMDBBMkFDMDAwMEIyRjgwMDAwQzM0NDAwMAotOjEwNDM2MDAwMDAwRDM5MDAwMDBFM0RDMDAwMEY0MjgwMDAxMDQ3NDA5NAotOjEwNDM3MDAwMDAxMTRDMDAwMDEyNTBDMDAwMTM1NTgwMDAxNDVBNDAyOAotOjEwNDM4MDAwMDAxNTVGMDAwMDE2NjNDMDAwMTc2ODgwMDAxODZENDBCQwotOjEwNDM5MDAwMDAxOTcyMDAwMDFBNzZDMDAwMUI3QjgwMDAxQzgwNDA1MAotOjEwNDNBMDAwMDAxRDg1MDAwMDFFODlDMDAwMUY4RTgwMDAwMDkzNDAwNAotOjEwNDNCMDAwMDAwMDIwMDAwMDAwNDAwMDAwMDA2MDAwMDAwMDgwMDBCRAotOjEwNDNDMDAwMDAwMEEwMDAwMDAwQzAwMDAwMDBFMDAwMDAwMTAwMDBBQwotOjEwNDNEMDAwMDAwMTIwMDAwMDAxNDAwMDAwMDE2MDAwMDAwMTgwMDA5OQotOjEwNDNFMDAwMDAwMUEwMDAwMDAxQzAwMDAwMDFFMDAwMDAwMjAwMDA4OAotOjEwNDNGMDAwMDAwMjIwMDAwMDAyNDAwMDAwMDI2MDAwMDAwMjgwMDA3NQotOjEwNDQwMDAwMDAwMkEwMDAwMDAyQzAwMDAwMDJFMDAwMDAwMzAwMDA2MwotOjEwNDQxMDAwMDAwMzIwMDAwMDAzNDAwMDAwMDM2MDAwMDAwMzgwMDA1MAotOjEwNDQyMDAwMDAwM0EwMDAwMDAzQzAwMDAwMDNFMDAwMDAwNDAwMDAzRgotOjEwNDQzMDAwMDAwNDIwMDAwMDA0NDAwMDAwMDQ2MDAwMDAwNDgwMDAyQwotOjEwNDQ0MDAwMDAwNEEwMDAwMDA0QzAwMDAwMDRFMDAwMDAwNTAwMDAxQgotOjEwNDQ1MDAwMDAwNTIwMDAwMDA1NDAwMDAwMDU2MDAwMDAwNTgwMDAwOAotOjEwNDQ2MDAwMDAwNUEwMDAwMDA1QzAwMDAwMDVFMDAwMDAwNjAwMDBGNwotOjEwNDQ3MDAwMDAwNjIwMDAwMDA2NDAwMDAwMDY2MDAwMDAwNjgwMDBFNAotOjEwNDQ4MDAwMDAwNkEwMDAwMDA2QzAwMDAwMDZFMDAwMDAwNzAwMDBEMwotOjEwNDQ5MDAwMDAwNzIwMDAwMDA3NDAwMDAwMDc2MDAwMDAwNzgwMDBDMAotOjEwNDRBMDAwMDAwN0EwMDAwMDA3QzAwMDAwMDdFMDAwMDAwODAwMDBBRgotOjEwNDRCMDAwMDAwODIwMDAwMDA4NDAwMDAwMDg2MDAwMDAwODgwMDA5QwotOjEwNDRDMDAwMDAwOEEwMDAwMDA4QzAwMDAwMDhFMDAwMDAwOTAwMDA4QgotOjEwNDREMDAwMDAwOTIwMDAwMDA5NDAwMDAwMDk2MDAwMDAwOTgwMDA3OAotOjEwNDRFMDAwMDAwOUEwMDAwMDA5QzAwMDAwMDlFMDAwMDAwQTAwMDA2NwotOjEwNDRGMDAwMDAwQTIwMDAwMDBBNDAwMDAwMEE2MDAwMDAwQTgwMDA1NAotOjEwNDUwMDAwMDAwQUEwMDAwMDBBQzAwMDAwMEFFMDAwMDAwQjAwMDA0MgotOjEwNDUxMDAwMDAwQjIwMDAwMDBCNDAwMDAwMEI2MDAwMDAwQjgwMDAyRgotOjEwNDUyMDAwMDAwQkEwMDAwMDBCQzAwMDAwMEJFMDAwMDAwQzAwMDAxRQotOjEwNDUzMDAwMDAwQzIwMDAwMDBDNDAwMDAwMEM2MDAwMDAwQzgwMDAwQgotOjEwNDU0MDAwMDAwQ0EwMDAwMDBDQzAwMDAwMENFMDAwMDAwRDAwMDBGQQotOjEwNDU1MDAwMDAwRDIwMDAwMDBENDAwMDAwMEQ2MDAwMDAwRDgwMDBFNwotOjEwNDU2MDAwMDAwREEwMDAwMDBEQzAwMDAwMERFMDAwMDAwRTAwMDBENgotOjEwNDU3MDAwMDAwRTIwMDAwMDBFNDAwMDAwMEU2MDAwMDAwRTgwMDBDMwotOjEwNDU4MDAwMDAwRUEwMDAwMDBFQzAwMDAwMEVFMDAwMDAwRjAwMDBCMgotOjEwNDU5MDAwMDAwRjIwMDAwMDBGNDAwMDAwMEY2MDAwMDAwRjgwMDA5RgotOjEwNDVBMDAwMDAwRkEwMDAwMDBGQzAwMDAwMEZFMDAwMDAxMDAwMDA4RQotOjEwNDVCMDAwMDAxMDIwMDAwMDEwNDAwMDAwMTA2MDAwMDAxMDgwMDA3QgotOjEwNDVDMDAwMDAxMEEwMDAwMDEwQzAwMDAwMTBFMDAwMDAxMTAwMDA2QQotOjEwNDVEMDAwMDAxMTIwMDAwMDExNDAwMDAwMTE2MDAwMDAxMTgwMDA1NwotOjEwNDVFMDAwMDAxMUEwMDAwMDExQzAwMDAwMTFFMDAwMDAxMjAwMDA0NgotOjEwNDVGMDAwMDAxMjIwMDAwMDEyNDAwMDAwMTI2MDAwMDAxMjgwMDAzMwotOjEwNDYwMDAwMDAxMkEwMDAwMDEyQzAwMDAwMTJFMDAwMDAxMzAwMDAyMQotOjEwNDYxMDAwMDAxMzIwMDAwMDEzNDAwMDAwMTM2MDAwMDAxMzgwMDAwRQotOjEwNDYyMDAwMDAxM0EwMDAwMDEzQzAwMDAwMTNFMDAwMDAxNDAwMDBGRAotOjEwNDYzMDAwMDAxNDIwMDAwMDE0NDAwMDAwMTQ2MDAwMDAxNDgwMDBFQQotOjEwNDY0MDAwMDAxNEEwMDAwMDE0QzAwMDAwMTRFMDAwMDAxNTAwMDBEOQotOjEwNDY1MDAwMDAxNTIwMDAwMDE1NDAwMDAwMTU2MDAwMDAxNTgwMDBDNgotOjEwNDY2MDAwMDAxNUEwMDAwMDE1QzAwMDAwMTVFMDAwMDAxNjAwMDBCNQotOjEwNDY3MDAwMDAxNjIwMDAwMDE2NDAwMDAwMTY2MDAwMDAxNjgwMDBBMgotOjEwNDY4MDAwMDAxNkEwMDAwMDE2QzAwMDAwMTZFMDAwMDAxNzAwMDA5MQotOjEwNDY5MDAwMDAxNzIwMDAwMDE3NDAwMDAwMTc2MDAwMDAxNzgwMDA3RQotOjEwNDZBMDAwMDAxN0EwMDAwMDE3QzAwMDAwMTdFMDAwMDAxODAwMDA2RAotOjEwNDZCMDAwMDAxODIwMDAwMDE4NDAwMDAwMTg2MDAwMDAxODgwMDA1QQotOjEwNDZDMDAwMDAxOEEwMDAwMDE4QzAwMDAwMThFMDAwMDAxOTAwMDA0OQotOjEwNDZEMDAwMDAxOTIwMDAwMDE5NDAwMDAwMTk2MDAwMDAxOTgwMDAzNgotOjEwNDZFMDAwMDAxOUEwMDAwMDE5QzAwMDAwMTlFMDAwMDAxQTAwMDAyNQotOjEwNDZGMDAwMDAxQTIwMDAwMDFBNDAwMDAwMUE2MDAwMDAxQTgwMDAxMgotOjEwNDcwMDAwMDAxQUEwMDAwMDFBQzAwMDAwMUFFMDAwMDAxQjAwMDAwMAotOjEwNDcxMDAwMDAxQjIwMDAwMDFCNDAwMDAwMUI2MDAwMDAxQjgwMDBFRAotOjEwNDcyMDAwMDAxQkEwMDAwMDFCQzAwMDAwMUJFMDAwMDAxQzAwMDBEQwotOjEwNDczMDAwMDAxQzIwMDAwMDFDNDAwMDAwMUM2MDAwMDAxQzgwMDBDOQotOjEwNDc0MDAwMDAxQ0EwMDAwMDFDQzAwMDAwMUNFMDAwMDAxRDAwMDBCOAotOjEwNDc1MDAwMDAxRDIwMDAwMDFENDAwMDAwMUQ2MDAwMDAxRDgwMDBBNQotOjEwNDc2MDAwMDAxREEwMDAwMDFEQzAwMDAwMURFMDAwMDAxRTAwMDA5NAotOjEwNDc3MDAwMDAxRTIwMDAwMDFFNDAwMDAwMUU2MDAwMDAxRTgwMDA4MQotOjEwNDc4MDAwMDAxRUEwMDAwMDFFQzAwMDAwMUVFMDAwMDAxRjAwMDA3MAotOjEwNDc5MDAwMDAxRjIwMDAwMDFGNDAwMDAwMUY2MDAwMDAxRjgwMDA1RAotOjEwNDdBMDAwMDAxRkEwMDAwMDFGQzAwMDAwMUZFMDAwMDAyMDAwMDA0QwotOjEwNDdCMDAwMDAyMDIwMDAwMDIwNDAwMDAwMjA2MDAwMDAyMDgwMDAzOQotOjEwNDdDMDAwMDAyMEEwMDAwMDIwQzAwMDAwMjBFMDAwMDAyMTAwMDAyOAotOjEwNDdEMDAwMDAyMTIwMDAwMDIxNDAwMDAwMjE2MDAwMDAyMTgwMDAxNQotOjEwNDdFMDAwMDAyMUEwMDAwMDIxQzAwMDAwMjFFMDAwMDAyMjAwMDAwNAotOjEwNDdGMDAwMDAyMjIwMDAwMDIyNDAwMDAwMjI2MDAwMDAyMjgwMDBGMQotOjEwNDgwMDAwMDAyMkEwMDAwMDIyQzAwMDAwMjJFMDAwMDAyMzAwMDBERgotOjEwNDgxMDAwMDAyMzIwMDAwMDIzNDAwMDAwMjM2MDAwMDAyMzgwMDBDQwotOjEwNDgyMDAwMDAyM0EwMDAwMDIzQzAwMDAwMjNFMDAwMDAyNDAwMDBCQgotOjEwNDgzMDAwMDAyNDIwMDAwMDI0NDAwMDAwMjQ2MDAwMDAyNDgwMDBBOAotOjEwNDg0MDAwMDAyNEEwMDAwMDI0QzAwMDAwMjRFMDAwMDAyNTAwMDA5NwotOjEwNDg1MDAwMDAyNTIwMDAwMDI1NDAwMDAwMjU2MDAwMDAyNTgwMDA4NAotOjEwNDg2MDAwMDAyNUEwMDAwMDI1QzAwMDAwMjVFMDAwMDAyNjAwMDA3MwotOjEwNDg3MDAwMDAyNjIwMDAwMDI2NDAwMDAwMjY2MDAwMDAyNjgwMDA2MAotOjEwNDg4MDAwMDAyNkEwMDAwMDI2QzAwMDAwMjZFMDAwMDAyNzAwMDA0RgotOjEwNDg5MDAwMDAyNzIwMDAwMDI3NDAwMDAwMjc2MDAwMDAyNzgwMDAzQwotOjEwNDhBMDAwMDAyN0EwMDAwMDI3QzAwMDAwMjdFMDAwMDAyODAwMDAyQgotOjEwNDhCMDAwMDAyODIwMDAwMDI4NDAwMDAwMjg2MDAwMDAyODgwMDAxOAotOjEwNDhDMDAwMDAyOEEwMDAwMDI4QzAwMDAwMjhFMDAwMDAyOTAwMDAwNwotOjEwNDhEMDAwMDAyOTIwMDAwMDI5NDAwMDAwMjk2MDAwMDAyOTgwMDBGNAotOjEwNDhFMDAwMDAyOUEwMDAwMDI5QzAwMDAwMjlFMDAwMDAyQTAwMDBFMwotOjEwNDhGMDAwMDAyQTIwMDAwMDJBNDAwMDAwMkE2MDAwMDAyQTgwMDBEMAotOjEwNDkwMDAwMDAyQUEwMDAwMDJBQzAwMDAwMkFFMDAwMDAyQjAwMDBCRQotOjEwNDkxMDAwMDAyQjIwMDAwMDJCNDAwMDAwMkI2MDAwMDAyQjgwMDBBQgotOjEwNDkyMDAwMDAyQkEwMDAwMDJCQzAwMDAwMkJFMDAwMDAyQzAwMDA5QQotOjEwNDkzMDAwMDAyQzIwMDAwMDJDNDAwMDAwMkM2MDAwMDAyQzgwMDA4NwotOjEwNDk0MDAwMDAyQ0EwMDAwMDJDQzAwMDAwMkNFMDAwMDAyRDAwMDA3NgotOjEwNDk1MDAwMDAyRDIwMDAwMDJENDAwMDAwMkQ2MDAwMDAyRDgwMDA2MwotOjEwNDk2MDAwMDAyREEwMDAwMDJEQzAwMDAwMkRFMDAwMDAyRTAwMDA1MgotOjEwNDk3MDAwMDAyRTIwMDAwMDJFNDAwMDAwMkU2MDAwMDAyRTgwMDAzRgotOjEwNDk4MDAwMDAyRUEwMDAwMDJFQzAwMDAwMkVFMDAwMDAyRjAwMDAyRQotOjEwNDk5MDAwMDAyRjIwMDAwMDJGNDAwMDAwMkY2MDAwMDAyRjgwMDAxQgotOjEwNDlBMDAwMDAyRkEwMDAwMDJGQzAwMDAwMkZFMDAwMDAzMDAwMDAwQQotOjEwNDlCMDAwMDAzMDIwMDAwMDMwNDAwMDAwMzA2MDAwMDAzMDgwMDBGNwotOjEwNDlDMDAwMDAzMEEwMDAwMDMwQzAwMDAwMzBFMDAwMDAzMTAwMDBFNgotOjEwNDlEMDAwMDAzMTIwMDAwMDMxNDAwMDAwMzE2MDAwMDAzMTgwMDBEMwotOjEwNDlFMDAwMDAzMUEwMDAwMDMxQzAwMDAwMzFFMDAwMDAzMjAwMDBDMgotOjEwNDlGMDAwMDAzMjIwMDAwMDMyNDAwMDAwMzI2MDAwMDAzMjgwMDBBRgotOjEwNEEwMDAwMDAzMkEwMDAwMDMyQzAwMDAwMzJFMDAwMDAzMzAwMDA5RAotOjEwNEExMDAwMDAzMzIwMDAwMDMzNDAwMDAwMzM2MDAwMDAzMzgwMDA4QQotOjEwNEEyMDAwMDAzM0EwMDAwMDMzQzAwMDAwMzNFMDAwMDAzNDAwMDA3OQotOjEwNEEzMDAwMDAzNDIwMDAwMDM0NDAwMDAwMzQ2MDAwMDAzNDgwMDA2NgotOjEwNEE0MDAwMDAzNEEwMDAwMDM0QzAwMDAwMzRFMDAwMDAzNTAwMDA1NQotOjEwNEE1MDAwMDAzNTIwMDAwMDM1NDAwMDAwMzU2MDAwMDAzNTgwMDA0MgotOjEwNEE2MDAwMDAzNUEwMDAwMDM1QzAwMDAwMzVFMDAwMDAzNjAwMDAzMQotOjEwNEE3MDAwMDAzNjIwMDAwMDM2NDAwMDAwMzY2MDAwMDAzNjgwMDAxRQotOjEwNEE4MDAwMDAzNkEwMDAwMDM2QzAwMDAwMzZFMDAwMDAzNzAwMDAwRAotOjEwNEE5MDAwMDAzNzIwMDAwMDM3NDAwMDAwMzc2MDAwMDAzNzgwMDBGQQotOjEwNEFBMDAwMDAzN0EwMDAwMDM3QzAwMDAwMzdFMDAwMDAzODAwMDBFOQotOjEwNEFCMDAwMDAzODIwMDAwMDM4NDAwMDAwMzg2MDAwMDAzODgwMDBENgotOjEwNEFDMDAwMDAzOEEwMDAwMDM4QzAwMDAwMzhFMDAwMDAzOTAwMDBDNQotOjEwNEFEMDAwMDAzOTIwMDAwMDM5NDAwMDAwMzk2MDAwMDAzOTgwMDBCMgotOjEwNEFFMDAwMDAzOUEwMDAwMDM5QzAwMDAwMzlFMDAwMDAzQTAwMDBBMQotOjEwNEFGMDAwMDAzQTIwMDAwMDNBNDAwMDAwM0E2MDAwMDAzQTgwMDA4RQotOjEwNEIwMDAwMDAzQUEwMDAwMDNBQzAwMDAwM0FFMDAwMDAzQjAwMDA3QwotOjEwNEIxMDAwMDAzQjIwMDAwMDNCNDAwMDAwM0I2MDAwMDAzQjgwMDA2OQotOjEwNEIyMDAwMDAzQkEwMDAwMDNCQzAwMDAwM0JFMDAwMDAzQzAwMDA1OAotOjEwNEIzMDAwMDAzQzIwMDAwMDNDNDAwMDAwM0M2MDAwMDAzQzgwMDA0NQotOjEwNEI0MDAwMDAzQ0EwMDAwMDNDQzAwMDAwM0NFMDAwMDAzRDAwMDAzNAotOjEwNEI1MDAwMDAzRDIwMDAwMDNENDAwMDAwM0Q2MDAwMDAzRDgwMDAyMQotOjEwNEI2MDAwMDAzREEwMDAwMDNEQzAwMDAwM0RFMDAwMDAzRTAwMDAxMAotOjEwNEI3MDAwMDAzRTIwMDAwMDNFNDAwMDAwM0U2MDAwMDAzRTgwMDBGRAotOjEwNEI4MDAwMDAzRUEwMDAwMDNFQzAwMDAwM0VFMDAwMDAzRjAwMDBFQwotOjEwNEI5MDAwMDAzRjIwMDAwMDNGNDAwMDAwM0Y2MDAwMDAzRjgwMDBEOQotOjEwNEJBMDAwMDAzRkEwMDAwMDNGQzAwMDAwM0ZFMDAwMDAzRkUwMDFFOAotOjEwNEJCMDAwMDAwMDAwMDAwMDAwMDFGRjAwMDAwMjAwMDAwMDdGRjg3QwotOjEwNEJDMDAwMDAwMDdGRjgwMDAwMDE2QTAwMDAxNTAwMDAwMDAwMDFFRAotOjEwNEJEMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBENwotOjEwNEJFMDAwMDAwMDAwMDAxNDBBRkYwMDAwMDAwMDAxMDAwMDAwMDBBNwotOjEwNEJGMDAwMDAyMDEwMDEwMDAwMDAwMDAxMDA4NjAwMDAwMDAxMDBGQwotOjEwNEMwMDAwMDAwMDg2MDIwMDAwODYwNDAwMDA4NjA2MDAwMDg2MDg3OAotOjEwNEMxMDAwMDAwMDg2MEEwMDAwODYwQzAwMDA4NjBFMDAwMDg2MTA0OAotOjEwNEMyMDAwMDAwMDg2MTIwMDAwODYxNDAwMDA4NjE2MDAwMDg2MTgxOAotOjEwNEMzMDAwMDAwMDg2MUEwMDAwODYxQzAwMDA4NjFFMDAwMDg2MjBFOAotOjEwNEM0MDAwMDAwMDg2MjIwMDAwODYyNDAwMDA4NjI2MDAwMDg2MjhCOAotOjEwNEM1MDAwMDAwMDg2MkEwMDAwODYyQzAwMDA4NjJFMDAwMDg2MzA4OAotOjEwNEM2MDAwMDAwMDg2MzIwMDAwODYzNDAwMDA4NjM2MDAwMDg2Mzg1OAotOjEwNEM3MDAwMDAwMDg2M0EwMDAwODYzQzAwMDA4NjNFMDAwMDg2NDAyOAotOjEwNEM4MDAwMDAwMDg2NDIwMDAwODY0NDAwMDA4NjQ2MDAwMDg2NDhGOAotOjEwNEM5MDAwMDAwMDg2NEEwMDAwODY0QzAwMDA4NjRFMDAwMDg2NTBDOAotOjEwNENBMDAwMDAwMDg2NTIwMDAwODY1NDAwMDA4NjU2MDAwMDg2NTg5OAotOjEwNENCMDAwMDAwMDg2NUEwMDAwODY1QzAwMDA4NjVFMDAwMDg2NjA2OAotOjEwNENDMDAwMDAwMDg2NjIwMDAwODY2NDAwMDA4NjY2MDAwMDg2NjgzOAotOjEwNENEMDAwMDAwMDg2NkEwMDAwODY2QzAwMDA4NjZFMDAwMDg2NzAwOAotOjEwNENFMDAwMDAwMDg2NzIwMDAwODY3NDAwMDA4Njc2MDAwMDg2NzhEOAotOjEwNENGMDAwMDAwMDg2N0EwMDAwODY3QzAwMDA4NjdFMDAwMDg2ODBBOAotOjEwNEQwMDAwMDAwMDg2ODIwMDAwODY4NDAwMDA4Njg2MDAwMDg2ODg3NwotOjEwNEQxMDAwMDAwMDg2OEEwMDAwODY4QzAwMDA4NjhFMDAwMDg2OTA0NwotOjEwNEQyMDAwMDAwMDg2OTIwMDAwODY5NDAwMDA4Njk2MDAwMDg2OTgxNwotOjEwNEQzMDAwMDAwMDg2OUEwMDAwODY5QzAwMDA4NjlFMDAwMDg2QTBFNwotOjEwNEQ0MDAwMDAwMDg2QTIwMDAwODZBNDAwMDA4NkE2MDAwMDg2QThCNwotOjEwNEQ1MDAwMDAwMDg2QUEwMDAwODZBQzAwMDA4NkFFMDAwMDg2QjA4NwotOjEwNEQ2MDAwMDAwMDg2QjIwMDAwODZCNDAwMDA4NkI2MDAwMDg2Qjg1NwotOjEwNEQ3MDAwMDAwMDg2QkEwMDAwODZCQzAwMDA4NkJFMDAwMDg2QzAyNwotOjEwNEQ4MDAwMDAwMDg2QzIwMDAwODZDNDAwMDA4NkM2MDAwMDg2QzhGNwotOjEwNEQ5MDAwMDAwMDg2Q0EwMDAwODZDQzAwMDA4NkNFMDAwMDg2RDBDNwotOjEwNERBMDAwMDAwMDg2RDIwMDAwODZENDAwMDA4NkQ2MDAwMDg2RDg5NwotOjEwNERCMDAwMDAwMDg2REEwMDAwODZEQzAwMDA4NkRFMDAwMDg2RTA2NwotOjEwNERDMDAwMDAwMDg2RTIwMDAwODZFNDAwMDA4NkU2MDAwMDg2RTgzNwotOjEwNEREMDAwMDAwMDg2RUEwMDAwODZFQzAwMDA4NkVFMDAwMDg2RjAwNwotOjEwNERFMDAwMDAwMDg2RjIwMDAwODZGNDAwMDA4NkY2MDAwMDg2RjhENwotOjEwNERGMDAwMDAwMDg2RkEwMDAwODZGQzAwMDA4NkZFMDAwMDg3MDBBNgotOjEwNEUwMDAwMDAwMDg3MDIwMDAwODcwNDAwMDA4NzA2MDAwMDg3MDg3MgotOjEwNEUxMDAwMDAwMDg3MEEwMDAwODcwQzAwMDA4NzBFMDAwMDg3MTA0MgotOjEwNEUyMDAwMDAwMDg3MTIwMDAwODcxNDAwMDA4NzE2MDAwMDg3MTgxMgotOjEwNEUzMDAwMDAwMDg3MUEwMDAwODcxQzAwMDA4NzFFMDAwMDg3MjBFMgotOjEwNEU0MDAwMDAwMDg3MjIwMDAwODcyNDAwMDA4NzI2MDAwMDg3MjhCMgotOjEwNEU1MDAwMDAwMDg3MkEwMDAwODcyQzAwMDA4NzJFMDAwMDg3MzA4MgotOjEwNEU2MDAwMDAwMDg3MzIwMDAwODczNDAwMDA4NzM2MDAwMDg3Mzg1MgotOjEwNEU3MDAwMDAwMDg3M0EwMDAwODczQzAwMDA4NzNFMDAwMDg3NDAyMgotOjEwNEU4MDAwMDAwMDg3NDIwMDAwODc0NDAwMDA4NzQ2MDAwMDg3NDhGMgotOjEwNEU5MDAwMDAwMDg3NEEwMDAwODc0QzAwMDA4NzRFMDAwMDg3NTBDMgotOjEwNEVBMDAwMDAwMDg3NTIwMDAwODc1NDAwMDA4NzU2MDAwMDg3NTg5MgotOjEwNEVCMDAwMDAwMDg3NUEwMDAwODc1QzAwMDA4NzVFMDAwMDg3NjA2MgotOjEwNEVDMDAwMDAwMDg3NjIwMDAwODc2NDAwMDA4NzY2MDAwMDg3NjgzMgotOjEwNEVEMDAwMDAwMDg3NkEwMDAwODc2QzAwMDA4NzZFMDAwMDg3NzAwMgotOjEwNEVFMDAwMDAwMDg3NzIwMDAwODc3NDAwMDA4Nzc2MDAwMDg3NzhEMgotOjEwNEVGMDAwMDAwMDg3N0EwMDAwODc3QzAwMDA4NzdFMDAwMDg3ODBBMgotOjEwNEYwMDAwMDAwMDg3ODIwMDAwODc4NDAwMDA4Nzg2MDAwMDg3ODg3MQotOjEwNEYxMDAwMDAwMDg3OEEwMDAwODc4QzAwMDA4NzhFMDAwMDg3OTA0MQotOjEwNEYyMDAwMDAwMDg3OTIwMDAwODc5NDAwMDA4Nzk2MDAwMDg3OTgxMQotOjEwNEYzMDAwMDAwMDg3OUEwMDAwODc5QzAwMDA4NzlFMDAwMDg3QTBFMQotOjEwNEY0MDAwMDAwMDg3QTIwMDAwODdBNDAwMDA4N0E2MDAwMDg3QThCMQotOjEwNEY1MDAwMDAwMDg3QUEwMDAwODdBQzAwMDA4N0FFMDAwMDg3QjA4MQotOjEwNEY2MDAwMDAwMDg3QjIwMDAwODdCNDAwMDA4N0I2MDAwMDg3Qjg1MQotOjEwNEY3MDAwMDAwMDg3QkEwMDAwODdCQzAwMDA4N0JFMDAwMDg3QzAyMQotOjEwNEY4MDAwMDAwMDg3QzIwMDAwODdDNDAwMDA4N0M2MDAwMDg3QzhGMQotOjEwNEY5MDAwMDAwMDg3Q0EwMDAwODdDQzAwMDA4N0NFMDAwMDg3RDBDMQotOjEwNEZBMDAwMDAwMDg3RDIwMDAwODdENDAwMDA4N0Q2MDAwMDg3RDg5MQotOjEwNEZCMDAwMDAwMDg3REEwMDAwODdEQzAwMDA4N0RFMDAwMDg3RTA2MQotOjEwNEZDMDAwMDAwMDg3RTIwMDAwODdFNDAwMDA4N0U2MDAwMDg3RTgzMQotOjEwNEZEMDAwMDAwMDg3RUEwMDAwODdFQzAwMDA4N0VFMDAwMDg3RjAwMQotOjEwNEZFMDAwMDAwMDg3RjIwMDAwODdGNDAwMDA4N0Y2MDAwMDg3RjhEMQotOjEwNEZGMDAwMDAwMDg3RkEwMDAwODdGQzAwMDA4N0ZFRkZGRkZGRkYyQwotOjEwNTAwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZCMAotOjEwNTAxMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDAwMDAwMDM5OQotOjEwNTAyMDAwMDBCRUJDMjAwMDAwMDAwMDAwMDAwMDA1MDAwMDAwMDNERQotOjEwNTAzMDAwMDBCRUJDMjAwMDAwMDAwMDAwMDAwMDA1MDAwMDIwMDBCMQotOjEwNTA0MDAwMDAwMDQwQzAwMDAwNjE4MDAwMDA4MjQwMDAwMEEzMDAxQQotOjEwNTA1MDAwMDAwMEMzQzAwMDAwRTQ4MDAwMDEwNTQwMDAwMTI2MDBGQwotOjEwNTA2MDAwMDAwMTQ2QzAwMDAxNjc4MDAwMDE4ODQwMDAwMUE5MDBERQotOjEwNTA3MDAwMDAwMUM5QzAwMDAxRUE4MDAwMDIwQjQwMDAwMjJDMDBDMAotOjEwNTA4MDAwMDAwMjRDQzAwMDAyNkQ4MDAwMDI4RTQwMDAwMkFGMDBBMgotOjEwNTA5MDAwMDAwMkNGQzAwMDAyRjA4MDAwMDAxMTQwMDAwMDgwMDAzQwotOjEwNTBBMDAwMDAwMTAzODAwMDAxODcwMDAwMDIwQTgwMDAwMjhFMDBEOAotOjEwNTBCMDAwMDAwMzExODAwMDAzOTUwMDAwMDQxODgwMDAwNDlDMDA4OAotOjEwNTBDMDAwMDAwNTFGODAwMDA1QTMwMDAwMDYyNjgwMDAwNkFBMDAzOAotOjEwNTBEMDAwMDAwNzJEODAwMDA3QjEwMDAwMDgzNDgwMDAwOEI4MDBFOAotOjEwNTBFMDAwMDAwOTNCODAwMDA5QkYwMDAwMEE0MjgwMDAwQUM2MDA5OAotOjEwNTBGMDAwMDAwQjQ5ODAwMDBCQ0QwMDAwMEM1MDgwMDAwQ0Q0MDA0OAotOjEwNTEwMDAwMDAwRDU3ODAwMDAwNUIwMDAwMDA3RkY4MDAwMDdGRjg3MgotOjEwNTExMDAwMDAwMDAxNjYwMDAwMTUwMDAwMDBGRjAwMDAwMDAwMDAxNAotOjEwNTEyMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDAxOTAwMDAwMDAwMDA2NwotOjEwNTEzMDAwMDAwMDAwMDBGRkZGRkZGRjAwMDA3RkY4MDAwMDdGRjg4NQotOjEwNTE0MDAwMDAwMDAzNjEwMDAwMTUwMDAwMDBGRjAwMEZGRkZGRkZEQgotOjEwNTE1MDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDA0NgotOjEwNTE2MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYyOQotOjEwNTE3MDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYxOQotOjEwNTE4MDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAxNgotOjEwNTE5MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkZGOQotOjEwNTFBMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDBGNgotOjEwNTFCMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZEOQotOjEwNTFDMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkZDOQotOjEwNTFEMDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBDNgotOjEwNTFFMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkZBOQotOjEwNTFGMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDBBNgotOjEwNTIwMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY4OAotOjEwNTIxMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkY3OAotOjEwNTIyMDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA3NQotOjEwNTIzMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkY1OAotOjEwNTI0MDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDA1NQotOjEwNTI1MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYzOAotOjEwNTI2MDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYyOAotOjEwNTI3MDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAyNQotOjEwNTI4MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwOAotOjEwNTI5MDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwNQotOjEwNTJBMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZFOAotOjEwNTJCMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkZEOAotOjEwNTJDMDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBENQotOjEwNTJEMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkZCOAotOjEwNTJFMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDBCNQotOjEwNTJGMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY5OAotOjEwNTMwMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkY4NwotOjEwNTMxMDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA4NAotOjEwNTMyMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkY2NwotOjEwNTMzMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDA2NAotOjEwNTM0MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY0NwotOjEwNTM1MDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYzNwotOjEwNTM2MDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAzNAotOjEwNTM3MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYxNwotOjEwNTM4MDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAxNAotOjEwNTM5MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZGNwotOjEwNTNBMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkZFNwotOjEwNTNCMDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBFNAotOjEwNTNDMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDAwMEZGMDAwMDAwRkZENAotOjEwNTNEMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBDRgotOjEwNTNFMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZDRAotOjEwNTNGMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZCRAotOjEwNTQwMDAwMDAwMDEwMDAwMDAwMjA4MDAwMDAzMTAwMDAwMDQxODBGQQotOjEwNTQxMDAwMDAwMDUyMDAwMDAwNjI4MDAwMDA3MzAwMDAwMDgzODBFMgotOjEwNTQyMDAwMDAwMDk0MDAwMDAwQTQ4MDAwMDBCNTAwMDAwMEM1ODBDQQotOjEwNTQzMDAwMDAwMEQ2MDAwMDAwRTY4MDAwMDBGNzAwMDAwMTA3ODBCMQotOjEwNTQ0MDAwMDAwMTE4MDAwMDAxMjg4MDAwMDEzOTAwMDAwMTQ5ODA5NgotOjEwNTQ1MDAwMDAwMTVBMDAwMDAxNkE4MDAwMDE3QjAwMDAwMThCODA3RQotOjEwNTQ2MDAwMDAwMTlDMDAwMDAxQUM4MDAwMDFCRDAwMDAwMUNEODA2NgotOjEwNTQ3MDAwMDAwMURFMDAwMDAxRUU4MDAwMDAwRjAwMDAwMDAwMDBDRgotOjEwNTQ4MDAwMDAwMDdGRjgwMDAwN0ZGODAwMDAwMjFEMDAwMDE1MDBGQQotOjEwNTQ5MDAwMTAwMDAwMDAwMDAwMjhBRDAwMDEwMDAxRkZGRkZGRkYyOQotOjEwNTRBMDAwRkZGRkZGRkYwMDA1MDIwNkNDQ0NDQ0MxNzA1ODEwM0NCQQotOjEwNTRCMDAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDBFRQotOjEwNTRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQ0NDQzAyMDE0MAotOjEwNTREMDAwQ0NDQ0NDQ0NDQ0NDMDIwMUNDQ0NDQ0NDMDAwMDAwMDBEMQotOjEwNTRFMDAwRkZGRkZGRkYwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkZDNAotOjEwNTRGMDAwMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkZCMAotOjEwNTUwMDAwMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkY5RgotOjEwNTUxMDAwMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkY4RgotOjEwNTUyMDAwMDAwMDAwMDAwMDBFMDAwMDAxMTYwMEQ2MDAwMEZGRkY4MgotOjEwNTUzMDAwMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkY2RgotOjEwNTU0MDAwMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkY1RgotOjEwNTU1MDAwMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkY0RgotOjEwNTU2MDAwMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDA3MjAwMDBDQgotOjEwNTU3MDAwMDEyMzAwRjNGRkZGRkZGMzMxOEZGRkZGMEMzMEMzMEM1QgotOjEwNTU4MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0M1RgotOjEwNTU5MDAwQ0RDRENEQ0RGRkZGRkZGMTMwRUZGRkZGMEMzMEMzMENDMQotOjEwNTVBMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0MzRQotOjEwNTVCMDAwQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMEMyQwotOjEwNTVDMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0MxRAotOjEwNTVEMDAwQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDVDMgotOjEwNTVFMDAwQzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0NFNgotOjEwNTVGMDAwQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMEMwMAotOjEwNTYwMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NENgotOjEwNTYxMDAwQ0RDRENEQ0RGRkZGRkZGQTMwMkZGRkZGMEMzMEMzMENGNwotOjEwNTYyMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAxMENGM0NBRQotOjEwNTYzMDAwQ0RDRENEQ0RGRkZGRkZGNzMxRUZGRkZGMEMzMEMzMEMxOQotOjEwNTY0MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAyMENGM0M3RQotOjEwNTY1MDAwQ0RDRENEQ0RGRkZGRkZGNTMwMkZGRkZGMEMzMEMzMENCQwotOjEwNTY2MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0MzRQotOjEwNTY3MDAwQ0RDRENEQ0RGRkZGRkZGMzMxOEZGRkZGMEMzMEMzMEMzRAotOjEwNTY4MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0M1RQotOjEwNTY5MDAwQ0RDRENEQ0RGRkZGRkZGMTMxMEZGRkZGMEMzMEMzMEM5RgotOjEwNTZBMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0MzRAotOjEwNTZCMDAwQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMEMyQgotOjEwNTZDMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0MxQwotOjEwNTZEMDAwQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDVDMQotOjEwNTZFMDAwQzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0NFNQotOjEwNTZGMDAwQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMENGRgotOjEwNTcwMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NENQotOjEwNTcxMDAwQ0RDRENEQ0RGRkZGRkZGQTMwMkZGRkZGMEMzMEMzMENGNgotOjEwNTcyMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAxMENGM0NBRAotOjEwNTczMDAwQ0RDRENEQ0RGRkZGRkZGNzMwRUZGRkZGMEMzMEMzMEMxOQotOjEwNTc0MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAyMENGM0M3RAotOjEwNTc1MDAwQ0RDRENEQ0RGRkZGRkZGNTMwNEZGRkZGMEMzMEMzMEM5QgotOjEwNTc2MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0MzRAotOjEwNTc3MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENGMQotOjEwNTc4MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0M5MQotOjEwNTc5MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENEMQotOjEwNTdBMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0M3MAotOjEwNTdCMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENCMQotOjEwNTdDMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0M0RgotOjEwNTdEMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM5MQotOjEwNTdFMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0MyRAotOjEwNTdGMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM3MQotOjEwNTgwMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0MwOAotOjEwNTgxMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM1MAotOjEwNTgyMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0NFMAotOjEwNTgzMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEMzMAotOjEwNTg0MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0NCMAotOjEwNTg1MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEMxMAotOjEwNTg2MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0M3MAotOjEwNTg3MDAwQ0RDRENEQ0RGRkZGRkZGMzMyMEZGRkZGMEMzMEMzMENCQQotOjEwNTg4MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0M1QwotOjEwNTg5MDAwQ0RDRENEQ0RGRkZGRkZGMTMxMEZGRkZGMEMzMEMzMEM5RAotOjEwNThBMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0MzQgotOjEwNThCMDAwQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMEMyOQotOjEwNThDMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0MxQQotOjEwNThEMDAwQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDVCRgotOjEwNThFMDAwQzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0NFMwotOjEwNThGMDAwQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMENGRAotOjEwNTkwMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NEMwotOjEwNTkxMDAwQ0RDRENEQ0RGRkZGRkY4QTA0MkZGRkZGMEMzMEMzMEM5MAotOjEwNTkyMDAwQzMwQzMwQzNDRjNDQzAwMEYzQ0YzQ0YzMDAxMENGM0NERQotOjEwNTkzMDAwQ0RDRENEQ0RGRkZGRkY5NzA1Q0ZGRkZGMEMzMEMzMENDMgotOjEwNTk0MDAwQzMwQzMwQzNDRjNDQzAwMEYzQ0YzQ0YzMDAyMENGM0NBRQotOjEwNTk1MDAwQ0RDRENEQ0RGRkZGRkZGNTMxMEZGRkZGMEMzMEMzMENEOAotOjEwNTk2MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0MzQgotOjEwNTk3MDAwQ0RDRENEQ0RGRkZGRkZGMzMwMEZGRkZGMEMzMEMzMENCQgotOjEwNTk4MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0M1QgotOjEwNTk5MDAwQ0RDRENEQ0RGRkZGRkZGMTMwMEZGRkZGMEMzMEMzMEM5RAotOjEwNTlBMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0MzQQotOjEwNTlCMDAwQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMEMyOAotOjEwNTlDMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0MxOQotOjEwNTlEMDAwQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDVCRQotOjEwNTlFMDAwQzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0NFMgotOjEwNTlGMDAwQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMENGQwotOjEwNUEwMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0NEMgotOjEwNUExMDAwQ0RDRENEQ0RGRkZGRkZGQTMwMkZGRkZGMEMzMEMzMENGMwotOjEwNUEyMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAxMENGM0NBQQotOjEwNUEzMDAwQ0RDRENEQ0RGRkZGRkY5NzA0MEZGRkZGMEMzMEMzMEM4MgotOjEwNUE0MDAwQzMwQzMwQzNDRjNDQzAwMEYzQ0YzQ0YzMDAyMENGM0NBRAotOjEwNUE1MDAwQ0RDRENEQ0RGRkZGRkZGNTMwMEZGRkZGMEMzMEMzMENEOAotOjEwNUE2MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0MzQQotOjEwNUE3MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENFRQotOjEwNUE4MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0M4RQotOjEwNUE5MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDRQotOjEwNUFBMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0M2RAotOjEwNUFCMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENBRQotOjEwNUFDMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0M0QwotOjEwNUFEMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM4RQotOjEwNUFFMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0MyQQotOjEwNUFGMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM2RQotOjEwNUIwMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0MwNQotOjEwNUIxMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM0RAotOjEwNUIyMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0NERAotOjEwNUIzMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEMyRAotOjEwNUI0MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0NBRAotOjEwNUI1MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEMwRAotOjEwNUI2MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0M2RAotOjEwNUI3MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENFRAotOjEwNUI4MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0M4RAotOjEwNUI5MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDRAotOjEwNUJBMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0M2QwotOjEwNUJCMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENBRAotOjEwNUJDMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0M0QgotOjEwNUJEMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM4RAotOjEwNUJFMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0MyOQotOjEwNUJGMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM2RAotOjEwNUMwMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0MwNAotOjEwNUMxMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM0QwotOjEwNUMyMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0NEQwotOjEwNUMzMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEMyQwotOjEwNUM0MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0NBQwotOjEwNUM1MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEMwQwotOjEwNUM2MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0M2QwotOjEwNUM3MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENFQwotOjEwNUM4MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0M4QwotOjEwNUM5MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDQwotOjEwNUNBMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0M2QgotOjEwNUNCMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENBQwotOjEwNUNDMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0M0QQotOjEwNUNEMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM4QwotOjEwNUNFMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0MyOAotOjEwNUNGMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM2QwotOjEwNUQwMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0MwMwotOjEwNUQxMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM0QgotOjEwNUQyMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0NEQgotOjEwNUQzMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEMyQgotOjEwNUQ0MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0NBQgotOjEwNUQ1MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEMwQgotOjEwNUQ2MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0M2QgotOjEwNUQ3MDAwQ0RDRENEQ0QwMDBDMDAwMDAwMDcwMEMwMDAwMjgxMzA2OQotOjEwNUQ4MDAwMDAwQjgxNTgwMDAyMDIxMDAwMDEwMjMwMDAwRjAyNDA5NwotOjEwNUQ5MDAwMDAwMTAzMzAwMDBDMDAwMDAwMDgwMEMwMDAwMjgxNDAzOAotOjEwNURBMDAwMDAwQjgxNjgwMDAyMDIyMDAwMDEwMjQwMDAwNzAyNTAzRgotOjEwNURCMDAwMDAwMjAyQzAwMDEwMDAwMDAwMDgwMTAwMDAwMjgxODAwMwotOjEwNURDMDAwMDAwQjgxQTgwMDAyMDI2MDAwMDE4MjgwMDAwRTgyOTgxMAotOjEwNUREMDAwMDAwODAzODAwMDAyODAwMDAwMEI4MDI4MDAwMjAwRTAyMQotOjEwNURFMDAwMDAwMTAxMDAwMDAwODExMDAwMDAwMTE4Q0NDQ0NDQ0NENwotOjEwNURGMDAwQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDMDAwMDIwMDBGMwotOjEwNUUwMDAwQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NEMgotOjEwNUUxMDAwMDAwMDIwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NEMgotOjEwNUUyMDAwQ0NDQ0NDQ0MwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAyMgotOjEwNUUzMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJGQjUxQ0ZDMEYwMDNENwotOjEwNUU0MDAwOEFCQjU4MTkxODAyMzgxMDdDN0FFMEE1OEM5NEU5REZENwotOjEwNUU1MDAwQzhDQ0MwQjAwMzg4QUYwMkYxN0U2NkQyRjVCMzRBMjM0NgotOjEwNUU2MDAwRDhGNzI0MTgxODE4MjQxOTE4NEU4OTMxMzBFQzkyNDRBOAotOjEwNUU3MDAwODhFNzAyRDUwODRBMzEzMERDODU4QTA1MDBEOTY3QTU1NAotOjEwNUU4MDAwRTgxQjRFQTM5ODM2RjhCQjNBMkFGRjkxMkE4NENFODdBNgotOjEwNUU5MDAwODlBM0M5M0Y4NkNBNkY1NDgwRDAzRkQ1QjE5QkJCMDk0NwotOjEwNUVBMDAwMkEwRjAwRkU2OTRGNjc2MDAzMDAwMDAwMDAwMDAwMDAzOQotOjEwNUVCMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFRDdEMEI3ODU0RDUwRgotOjEwNUVDMDAwQjlFOERBQ0ZEOTMzOTk0Qzc2NDI0MjI2MTA3MDA3MDNFRAotOjEwNUVEMDAwMDQwRDMwMjA4RkE4NTQyN0UxRDFFMEU1RThGMDQ2MkVFQwotOjEwNUVFMDAwQ0E4MEFGMDg5MjQ0OEQzNTZEMzkzNzNCNjQxMjAyMDI4NwotOjEwNUVGMDAwOEVDQUExQjRBNTNBMjA3QUEyNDdEQkQ0NDY0QjdCRjVFMwotOjEwNUYwMDAwREMyMDZBNzNEQUQzN0I5MTUyQTUyREI2NDEzRDI4MTY2OQotOjEwNUYxMDAwNjhGNDk0MDNCREQ3OTZCQkZFN0ZBRDNERDk3QjY3MjY2MQotOjEwNUYyMDAwMEY1RkRGMzk1RjFCM0VERDU5N0JBRkJERDZCRkZFRjc4QwotOjEwNUYzMDAwRkFGRjdGRURBOEEyNDJENDRCMDhCOTA4M0ZENzEyQjJBRQotOjEwNUY0MDAwNEUyMDg0RTRGNTVFQURGQjQ0OEI1NjkzNUM0MkFBODJGRQotOjEwNUY1MDAwQUFCMTk1M0U1QjJGODU4REM2NjlGNEZFMjU2MkU4MDlERQotOjEwNUY2MDAwMDJGN0M3Q0QyMTkzMDg1MUUwQkQwMjQyQTZDMkZGQTZBOQotOjEwNUY3MDAwMTMyMkU3QjQwRThGRkFFOTNENjk1NTE2NUNBREYxQUMxQQotOjEwNUY4MDAwNkI5NTRDODgzRTE1OUU2RjFCOTdFQTc5NzJGRTg0RDIwMgotOjEwNUY5MDAwRDNBRDExRkNCOTM4ODY5MEZBRTMzN0NFN0ZDNTZBRDMwQQotOjEwNUZBMDAwRkY0NjkyQ0NEQzkzOTdEMzVGNjY5Mjk5MTcyNTQyM0VDOQotOjEwNUZCMDAwMkE1Qzk0RDU2OUE0MUZFRjgzODYyRTVEMUU0QkM4RjkxOQotOjEwNUZDMDAwODYxNUYzNUYxOURCRjdGOTdBODlENEI2OTdGNkJEN0ZBQQotOjEwNUZEMDAwMTVEMTEwMkY0NDMzRDVDOEM0REU3NUFGMjdBNEQzOTM5MQotOjEwNUZFMDAwNDNDOEU2QzI0RDZDQkRCOTE0NTk1N0QyRkI2REZGQTIzMAotOjEwNUZGMDAwQ0IyNUJENzBBRTk3NjlCRkE5N0RENzQzODg4OUUzNUE4OQotOjEwNjAwMDAwRTMyNERGNEY3NDM5REU3N0JGOTcxQzhGQkY0RjY0RkFFQwotOjEwNjAxMDAwNkYwNjIxRDg4NUFFN0ZCQTEwQkQxNkVFN0IwQTE3OTlBMAotOjEwNjAyMDAwMjM2ODdCRkQzM0U1MjQ1QTlBMUVGRTI0QkQzRTIxRkNFNQotOjEwNjAzMDAwRDY3QjY5RTlDOEZCN0RCNEJGQTk4NUQwRjc0RUFBRjEyQwotOjEwNjA0MDAwRUJBRkEyN0NGNERFRjdBNUQwMjZFMEEzM0RFM0U3OTAxQQotOjEwNjA1MDAwMDBCRDRGMTgxRjU5NzQzQUI1QkY2OTc4MkFGRTQ4NDdFQQotOjEwNjA2MDAwQTdCRjI3NUVFNDNGOEJCRkFBQzQ1NTU5OURFNDkzRjNCNQotOjEwNjA3MDAwRDcxREMwNUYxOTM2RkU2QTVGRENFRjc4OUY5NEJGNjI2MAotOjEwNjA4MDAwNkVGRUUyRjgzOEREQ0VENjRGNzYwRjYzNzRFMUY0NzIxRgotOjEwNjA5MDAwRDMyNzJENUQzRUU5N0I3REY5NjkwQkUwRDVEM0JFRDhEMgotOjEwNjBBMDAwMUM0MTUyRjAxMzg3RDdBMkQ3QTc4NTc3MjAzRTIyMjQyMAotOjEwNjBCMDAwOEU3NDI2MjQyMkMxRkNCREY3RDkzNUEzQ0MxMDgwQ0YyNQotOjEwNjBDMDAwNjhGMzMwQUMyM0M4QTYyMkMxNUI1QkVFMTYyOTlDMDFBNQotOjEwNjBEMDAwOTI2ODFENTc0NERCREQ2QjE2MDBEQzgxRTNGMzRGODFEMgotOjEwNjBFMDAwM0MzNDg3MkFCNEQ5NzRCREZBMzRFM0ExNzlGNDlBNTFDNwotOjEwNjBGMDAwQUEwQkIwOUVBRDQ0MDQyNTQwQzdBQjM2Q0I0QjgxNUVBNgotOjEwNjEwMDAwMDREQjRGOUJCNzg0NERDMDAzMDkxMzMyOUM5MEZCRjgwRQotOjEwNjExMDAwOUEwODExMEQ5OUI2NTVGODc1NENBQTc1QThBNDkzRTE4MwotOjEwNjEyMDAwNDNCOEU4RTlGQjdFQkFGNUFCQkRFRjkxOEI0NUYwRkZENAotOjEwNjEzMDAwN0IwOEFDNkZBMEY3NDg5NEJENjdEMjdGODBFRjFDRDc3NwotOjEwNjE0MDAwMzhGQTFDREFCNkYxN0Q4MEQ4REFGNEY5NTFGODA1RjFBNQotOjEwNjE1MDAwN0RGNzE3MzI1RjM2RDlBNzE5NTQzRkE4MjVBMjlFODAzNAotOjEwNjE2MDAwRkVDNEM4OTY2OTNCQTM5MjJBMjI3ODFFMjQwNzI5NDVCQgotOjEwNjE3MDAwMDZBNDRCMzMyMTk1RURDMDhGQTQ5RDJDOUNEODBCREYzQQotOjEwNjE4MDAwMjkyMkUwN0EwQTZFREZCOUE2ODVBQUFFNzM2NUZFMTBGMQotOjEwNjE5MDAwRjA3OTUwMjc2NDU4NEVERkY1NkM2QkEwOEMzQ0RFRDY0RQotOjEwNjFBMDAwMEUzRDg3RkMxRkEzN0MzNDg2QkU2Rjg2OTgzRERDNUE2QgotOjEwNjFCMDAwRjJCMjFFQjVDOTc3ODYyMDcwQkU3NEYzMDczMUU0MTlCOAotOjEwNjFDMDAwMjA2NkMwMkFGNDVBMjI4NkJEODE0RkNGMUZCMjBCOEZBMgotOjEwNjFEMDAwODNFNTBGN0ZENDQ2MUYzMjc0N0EwNUI5REYzMDU4RkU0RAotOjEwNjFFMDAwRjhCNEYzNTk3NEVEMkI1NzhEMTY1RDM1NDJFOUIwQTUxRgotOjEwNjFGMDAwNzg1MTRBRkYyMzNENURGNzExRTg5RjUxNDJDMjg5MTQ0RgotOjEwNjIwMDAwRUY4RDEyMDQyRTA3QTY0M0RGRTA5NUQyNDc0QTkyRjc5RQotOjEwNjIxMDAwNUUwN0JEQTRGQzE5MkJGNkY2ODMwRjI5RDc4OTBGNkJGNwotOjEwNjIyMDAwNUM2RkJENjRCQzRCNTUyMjkxNzUxMUM2NTM2MTNDQ0E2RAotOjEwNjIzMDAwQTc1QjgyMEY5Qjg0Q0FDMzM5RTA2RDhBMEYyOTNFQTVGNAotOjEwNjI0MDAwMTNEQUE0OTgyMDFGRDI5RjRFODFCNkJEQzE3MDYyMkI3NQotOjEwNjI1MDAwRjI0MTAyRTk2MkMxRTczMTQ0MDc3RUU1NUM5RkEzNEQ0QwotOjEwNjI2MDAwNTY5ODgyMUQ3RTZGQkQ4QTcwQThFODIzRDA3MTc0M0E1QgotOjEwNjI3MDAwMjA0NTg1RUMyNzlEQzBCNzE2QkYwMjFCNUNCQzE0REExNQotOjEwNjI4MDAwNUY3N0YwNDFBQjMxOTVBNEEyODNDNUFGODA1NkM2QUYwRQotOjEwNjI5MDAwNUYxRjlDN0U3MUNGQjdDNDA5RUZBMERGRjNDQkM2NDk2NwotOjEwNjJBMDAwOUIxRDRBRkY5RTRDNEU1QUY0QTE0OEFDODIwMTZDN0M2NwotOjEwNjJCMDAwQjA1OTIxMDc4NEM5ODQzNDE1MkUyMzUxN0E3NzMzM0M5MQotOjEwNjJDMDAwQTI3NkFDMDVBRTA1RTAxRjRFNDVCRDQwREEwNDE5RTBFQwotOjEwNjJEMDAwQjRFQzJBMDlFNjYwQkZFOTgyODFFMzg5NUEyREVBMTUwOAotOjEwNjJFMDAwQzkxRjY2RjY5NTNGNEYwRjE3OUI3RkI4MTEwRkVCMTQzMAotOjEwNjJGMDAwQkZGOTI0MUUxNjI5N0RBOEFFMEM3NTEyRDA5QjYxMDIzMQotOjEwNjMwMDAwN0M0MDQyOEMyRjI0RUVBNzVCRUZDNzM4M0Y3QkM5NTFGRQotOjEwNjMxMDAwN0M5RjZBNTc1MzQ3N0JFNjk0RTNCOTEyN0Q0OEM3RDlGRgotOjEwNjMyMDAwNTI0MjEyMUVBNDUzNUM4M0I2NUMyMjEzRDgxNzUwRkQ1MAotOjEwNjMzMDAwRTQyRkEwRkRCMzJDRjY5NzE2ODQwMEZFMkM2RTVGQzlFNwotOjEwNjM0MDAwMkNDRURGMDJENTY3MTRDRkZFNjk0RUY5RjZCOUU0NUZCMwotOjEwNjM1MDAwRTZGNkI4OEYzRTRCQjM5RkIwQUU2RUZGRUQzMTgxRkJEQQotOjEwNjM2MDAwNkYxOUM0OEZGNEU2RUYxMzdGNkE3RkQ1RjJEQjJDQkM4NAotOjEwNjM3MDAwRTY4OTA0RjE0OTdFQUEyNDlFMjhFMjZCQTNFRDdCREUyOAotOjEwNjM4MDAwQ0E0RUMwQkFDRDhBQzg5QTY2OEEwN0YzNkQyMUQ0MDQ3MgotOjEwNjM5MDAwRjQ5NEMzM0Q1OUY0RjlDOTI3MjVEQzJGRTUyREFCQkY5MwotOjEwNjNBMDAwMDRFNkRCREU2MDhFMkRCNkY5ODNEQkU1NUEwREYwNEQ5OQotOjEwNjNCMDAwRjk0MkIzREI4QjFCNDhGNDA1QzFCNkZGRjIwNDVCQzZBMAotOjEwNjNDMDAwMTYwRjQzRkU3QkJCQkIwNDRDODU4MEZDRTdGNUM3ODIwMAotOjEwNjNEMDAwQUY4MjVDRjJGQjQ5RkNEOERCNTJERjc2NkUzRUUxRjYyMQotOjEwNjNFMDAwRjI4NkYyMzA5REI3MTU3NEQ3MDg3QzZDMEExNDlFRDZERAotOjEwNjNGMDAwMDJENkZFNDlFM0YwNzJCMDlGQUQ5OUFDRkQ1MUUzM0I4QwotOjEwNjQwMDAwRTE0NkU0OEJBODE2QTFGN0VBMDlDNzRCMTdDNTBCRDJFMgotOjEwNjQxMDAwREZDOEI3REI1N0Y3RDVCREZFMURCMkVFMDMzRURCRUJBMQotOjEwNjQyMDAwQ0ZCOUFFMDRFQzY3OTkxODAyQjRFRjhEMUREMUQ3RDg1RgotOjEwNjQzMDAwRjBGMTRENEZDNTFCODA4RjkxMjQyMTEwQTA1RjJDMTdDOAotOjEwNjQ0MDAwRTVDN0YyRTc4MEYxQTA1REMwRTVBOTkwMUNDNjdFQTM3OAotOjEwNjQ1MDAwMjMzREU1MEFEQzVBQTFCRjBDRDc5NkUwNzNEOTI4NEYzQgotOjEwNjQ2MDAwNjQ4RTdFMTJFNTVGMTIyRTVFM0U3ODc5NEZCN0RFODAzNQotOjEwNjQ3MDAwNDAyMkE5RkNGOUZCQTUxQzk0QUJDMDM0QkE2RTg3NUUyMAotOjEwNjQ4MDAwMkZENDkxMUZGOUI4NUYwMzFBODFGRUM4QTYzMDREMDZCQwotOjEwNjQ5MDAwM0QxMjVGMTE0OTMxREU0RjA0MTFGQjY5NjAwRkFFQTA2MAotOjEwNjRBMDAwNjgyODVDNTZGNjZGNzRCRDlBMTY5RUYyMkE4NUNCOTNDNwotOjEwNjRCMDAwRUIwRjk5MDgzNkIzMTMwNjk3MDE0RkJDNTEwM0ZDOTJCQQotOjEwNjRDMDAwQTMxMjAxRjlENzBBQzM5MURCODA0RjQ5MjQyQ0QwRkJEQQotOjEwNjREMDAwNUEzMDFDREE2QUY0NUQ5RjRBOTg3REM4QTFENzhCNEM2QwotOjEwNjRFMDAwQkUwOUY0QkYyNzRGQzdGRTA0RUM4NUI1QUUzMTAwOTc1NwotOjEwNjRGMDAwOEE3MDdEMDZGNENFMTVBNzBGNENFNzExQTRCRDFDOEM0NQotOjEwNjUwMDAwNTkzQTdBN0ZENjc0NEVGN0JFOUJCRTAxODFDOUQ3RkQzQQotOjEwNjUxMDAwNERFN0MzMjY5NUE3OTZFMzgyMjg4MTUyOEMxNzIzNUQwOQotOjEwNjUyMDAwMzQ0RTk3RjM0QTU0MDNCRjcxQ0I1NzQ1QjI4RkI2MUYxMQotOjEwNjUzMDAwQURFRkRGNEY4OTgxOUZFMkIxRDk0RDlERDE2RkU0NUQxMQotOjEwNjU0MDAwRkE1NDYwQTE3NEVGRURCQTRCQUM0Q0E0RTBBNzRBOTFBOQotOjEwNjU1MDAwRTlGRDJENzczRDFDMUYwQkY0N0NDNUI5REY1MzU2ODUzMwotOjEwNjU2MDAwRDEyRkE1RkJCRTRBQTA4N0Y1OUVCNzk4RDkyN0IyOUYyOQotOjEwNjU3MDAwQUU4N0Y2NTdCODNGNzIzRTZGNTExNjQ5MzE4Rjc1RERDMQotOjEwNjU4MDAwRTM4MkJGOTBFMjM5OTVEQ0RDMjc3MUZGNkEyNzFCREZDRAotOjEwNjU5MDAwRjI3N0NFMTdGNDNGQkU4NTlGMEI5NTIyMzk1QzhBNjQ1MwotOjEwNjVBMDAwRjU5MTUyQkUxODhBRjdDMkE0REY5RDg3NkQwRjdGOTRDNAotOjEwNjVCMDAwQTgxNTdEMDRFQzVFNjE2NzM5NUMxNUQyRDMwODdDQkFGRQotOjEwNjVDMDAwNEIyNDU1QTlFMDVCMkI4OTA4NUY2MTk4NkUzREE4REVERQotOjEwNjVEMDAwMkYzNDQ1RDA0Q0U0NUVDOUMwRkJGOUFCNkEwRjJBOTQ1NgotOjEwNjVFMDAwMkVBREEzNDgwOENDQ0MyNTMwMUVFOEQ1ODM1RUI0OUZFMQotOjEwNjVGMDAwNkEyRTQ5NzhBOTlFN0VBREU4MkIyNkQ4NjVCRDkwODQ4OQotOjEwNjYwMDAwMDExNkJEMTZGNjlDRjQzRjZBNUYwREZBNUNEOTE4MzU4OQotOjEwNjYxMDAwMTFBRTYwMDRGNzA4ODc4QTk2MjFCRDVCQTg3RkU3NjEwOQotOjEwNjYyMDAwMEI3MUYwNTM4QjI5NzYwMkRGQzZFOUY4RTAwRkM2OERCNwotOjEwNjYzMDAwMEE5NEQ3NzM0MTZBRjlFMUU3NjMwQUJGQjVERkI4MTQ3QQotOjEwNjY0MDAwRTI0Mjk0OTQwMEU3MDQxOUUxQTQyMzMxN0FFQTBDMkY4MgotOjEwNjY1MDAwMjM3N0NGMjI5REQ0RUVCNDY2RUY0Mjc5MzBBRjI0Mjg2MQotOjEwNjY2MDAwQUYzMjM5NkMwQTYwNjdFNDg0Mjk1Mjc4NjM1NTRDMUY1NQotOjEwNjY3MDAwMjhCOTcxQzE2RUM3RjY5MEU4ODM3NkJFOTFGNTRFRjRFNQotOjEwNjY4MDAwRkY1QUZGMkNBRDQ4ODVENzZBOTFFOUI3RkJCODNFM0M2RAotOjEwNjY5MDAwQUZCNENGNDc3RkEzOTlDQTQ3NTFERkZFNjE0RTg3NkZFMgotOjEwNjZBMDAwQzcxNjNEMzgxRUY1MTlCMzRCRDZGMzJFQzE3MEM0MzE1MQotOjEwNjZCMDAwNDc1RTUwNzEzRDZFQkY2NjFFRjc2QjVBMEFBOTVGODMzNQotOjEwNjZDMDAwRjI0RTE2ODAxRjkzQzFGOUEzMDVCMDQ3OUY3QkIyNDlENAotOjEwNjZEMDAwQzJBNDcwNjQ4MDNGNDNGRDEyNTJDQUZDMTI4REZFMDNCNwotOjEwNjZFMDAwRkQ5N0JGQzJFOUNGNzg1QzdFNEIzQTdGRTY2QjQyRTQxMAotOjEwNjZGMDAwMDdBOEVGQThBQTAyRjg3NzBCRjFGOUUzMDBERjA1NzQwOQotOjEwNjcwMDAwM0Y2OUY0NUQ3NzE3REY0RkNFOTVCNjE1QjU1MEI4MUVDQgotOjEwNjcxMDAwQ0IxNTFERkMzMDlBQ0JDQjYzQzQzQzcxOTEzRThGMTdENwotOjEwNjcyMDAwOEEwNkMwMURBRjE3NzExREU3MENFNkI3OTM3N0JEMEU0MwotOjEwNjczMDAwM0JEMTZDMkVEMjg4NERGRkVDRTBGMkI0QUQ0MTczQzg3MgotOjEwNjc0MDAwQURGQkVBNTdFM0QxNDgwQUJEQTU3M0ZBNjRDQzBBNjNFRQotOjEwNjc1MDAwRkNDMzFGNEEyMEZENjE5REE5RkNGNDA3NEEyQkI0RkUyRgotOjEwNjc2MDAwRjQ5RjVDQTJBRTQxRkMxNTU2OUM5MkUxNUFFNkRFMkZFNgotOjEwNjc3MDAwQTUxRUQ3N0QyNTc2M0Y1MzRBREY2RkIwRDcyRDE0NEYyNgotOjEwNjc4MDAwNkYyQjBFN0ZCQzUzODI3RDk3NDlEMEZGRjM4NkE4QTk1QgotOjEwNjc5MDAwMEFDMDU1MUYwRUYwN0I0MzU0RENFMERBNUQ1RTA5Rjc1QQotOjEwNjdBMDAwOEQ1OTExMERFNEM4QjJDRkRFNTA2NDJCRENDRkZBOTJDNAotOjEwNjdCMDAwQkMwNUU4RTUyRDE3NDU4OUQyNEY5MzREOTI2MzkzOUIxNQotOjEwNjdDMDAwQTk3MEQzQzZERjk5NTQ1RERBRjFBMTQ1QkY1MjA5N0VBNQotOjEwNjdEMDAwMkEyOTE0Qzk1ODBBQzdFNjhGMUIzNDNCOURCQUU4MzZFQwotOjEwNjdFMDAwODRFRDVCOUQ3QzEzQUZFRjVGQ0Y3RTVBQkVGOEI5NjgzNgotOjEwNjdGMDAwQzU0MzlDRjRDMjFGN0IzQzg0RDMzOTQ5RkYzRTcxOEQ1NQotOjEwNjgwMDAwRkYxQ0Y0RDYzOEZEMEM0QUJGNEQwNkQwOTNFOTBCQkFGNQotOjEwNjgxMDAwRjE0MkZGMjFBRTk5NjE2OEM3MEQ0MzM0NkQ3QUVDNjM5NAotOjEwNjgyMDAwMzEwN0YxMjA1RjkwNTEyRkVENUVEMzEyMDY3QUU5NzRBMwotOjEwNjgzMDAwMEMyMDJEQkQ4NjUzRDlFRDJFNDE0NUI5QTI3QUUzMkEwRAotOjEwNjg0MDAwNjkzQTJBNjQwMUUyOUY3M0E1OEQ0OEVGQzcyOEJENDFDQwotOjEwNjg1MDAwOEYzRDQ2NkFCQjJFRTZGNkNBQkYxNjU1RDE4RkVGNkE0QQotOjEwNjg2MDAwMzRDQjFCOEI4N0EyMzcyOTdDRDRBRjIzN0I5OEZGNzI1NAotOjEwNjg3MDAwODlFNUJGRkMzREU1OTM0MUY4MkJFN0E5RDFFMEY2RDhDNwotOjEwNjg4MDAwMEI3QzI1Nzc1Mzk2QTY3MDE1NkU2NDc2MTM3Q0I1MUMyOQotOjEwNjg5MDAwREEzNkE4RERFQjE0N0FGOUQxQzNFNzUxNEExMzg3Qzc3QQotOjEwNjhBMDAwMjNCRDlERjZFOUIxQzI5NzA1MEZEOEI3NjI2NkRGNTRFNAotOjEwNjhCMDAwQjMzMzBDN0EyNjUwNENFRDEzNDFGQkIzMUFGMDMzQTJEQwotOjEwNjhDMDAwMjQ1RTBFRUQ5MUJCRTdFMTNBQkUwRDdFQTgxRkVDMEJGNgotOjEwNjhEMDAwNDE3QzdDNTM0QzM0OUE5NDY2QkU3MEE0NTM5NDYwRkYwMAotOjEwNjhFMDAwNEM3MDdGNjdEMUNGM0QyRkI1N0E0ODRGNUZCNkI4MTc1MAotOjEwNjhGMDAwRTgxNEE4M0QwQ0NCQjREQkJENkEyOUFGRDcxRThFMjhBNwotOjEwNjkwMDAwRTk0NDc1RUJGNjE3RDJGQTA5N0Y5NkY4N0U2QzY2NjM1OAotOjEwNjkxMDAwOThCNjQ3QzFBRkQ0OUZEQzI5M0VERTA4RkJCMTg4Mjc3QgotOjEwNjkyMDAwNUM4Rjc0NzdFRDIzOTI3MTI4MUVFRjVFNUI2NjA5OTU4QwotOjEwNjkzMDAwQjFGQzM3NzQ5RTNCQkIxNDBBMDAwMTNGNDBCMkM3ODFEMwotOjEwNjk0MDAwRUUwNEJCNDRGNUNENUE2RUQ3NkUyNTkxMDAzQzNDNDMxNgotOjEwNjk1MDAwNDQ4Q0FGOUQyMTQ3MDI1N0Q4Rjg3MEE3QTRCMjc5NUE0QQotOjEwNjk2MDAwOTVCNzIxN0U2RkM1Nzc2RjhCQjNCNkE1N0ZFRUQ4RUQ1NwotOjEwNjk3MDAwNkNERjRFMTYwRDg3RjhFREVEM0IxNTVDRkY5REFFN0Q4RgotOjEwNjk4MDAwNkI0Q0QyNzFEQzNCNDg2RDBCRTBBMTU5MjFFODI3QUM4MAotOjEwNjk5MDAwRDU4OTBDRjFEODBEM0ZGQ0NFMENEODI3N0M5QkRCOTUxQwotOjEwNjlBMDAwMEYyODdGMTkzNkZEQjNDRTlGNTA2MTNGRkI0RUM3MTVCMAotOjEwNjlCMDAwQ0JBRTI2RjA3RUEyNjUwNEVDQ0JCMzQ5NEEzQjdBNEJDMgotOjEwNjlDMDAwQUIxM0JFODFFMDc3QzM0QkM4QTY3RUUxOTBEQjg0OTQxNQotOjEwNjlEMDAwRjFDM0E3MjRDMTExMzdBQ0Q3MDI5MzIwNjg3MkRFQ0I3NAotOjEwNjlFMDAwQUU2NjA1RDMxRkU2NkZCRDg5MjZGMDEzMjU4M0Y3QUY4QQotOjEwNjlGMDAwOURDQ0YyMUNCNTMzRTEzQUQwN0IzRkUzRkVFODUwREY5QgotOjEwNkEwMDAwM0I5Q0U2QkQwRDVBQjcwQUZDNUYyMzlCOTU4MkQ4MUJDMQotOjEwNkExMDAwQUZEMjk0REFGMDQ4OTBFMzAzRTU5RDIzODlBMzVGRUJCRQotOjEwNkEyMDAwMjBGQjU1OEFGREY0NzNDMzdCNEFENzRDNzE3MjVGQjg2MwotOjEwNkEzMDAwNkYyMEQxQjc0MEVFQ0U4QkQxNkE4QzEzNzBCODNEODBGOQotOjEwNkE0MDAwNjcwOUFFMzJEMjEzRTMyNzQ1MzBBRkJGNTVDODgyMzg0RAotOjEwNkE1MDAwNEEwN0ZBMjc1RTQzNzZEMEJCQzZEMjAzNTQyRjQxRENFNwotOjEwNkE2MDAwMjdBM0M0RjlEQzFENTdFOTQ5RDJCNTEzRTUwQjQzQTJBRQotOjEwNkE3MDAwNzQ0OTAxQ0RERjI5ODFCRjU4MjY5RjRFRjZBN0YzNTVGMwotOjEwNkE4MDAwQzNCQTI2NjMyN0Q0MkY3NTVDQkY1NDEzRTNDMTU5RDMwRgotOjEwNkE5MDAwNTBCRTMwNUU1NzM3N0Y4QzA5NzBENEU1MTkyMUQzMDA4MgotOjEwNkFBMDAwMzUxQTBBRTMxODJFQkVBQUI5MjA5MDg0NkRGRjVEMjMyMwotOjEwNkFCMDAwRjdBODIwNDczNTU0N0ZEQkVGREYxMzY0RjFFNDc0N0FFNQotOjEwNkFDMDAwNUIyMTlBRTEyRjAxQkY1NjQ0M0M0OTNBNkREQkQ2RkQ2QwotOjEwNkFEMDAwNTE1Q0E4NkM2N0ZCQUFBQzI1RkRFQzhCRUYwOUIyNzg4MgotOjEwNkFFMDAwRjFEQTJENjNCMzU4RENDNUE5QUZDRTcyRkJGMDkzNjcyMgotOjEwNkFGMDAwMUU1N0JCNDFDRjNDN0RFMjdBNThFN0ZBRkYyOTExOEQ0MgotOjEwNkIwMDAwQ0U3QkY2OTk0Q0QyODk3NjIzQTE4MkRENThENzIxQTU3OAotOjEwNkIxMDAwQjQ4Nzg0MzRCMUZDRjlGNzMyOTE1RUVCOUVGMzI0MTYwRQotOjEwNkIyMDAwRDBGN0Q3QkRGMENFMjQ0MkUxM0JCQkE5RTdCNTkxRTA1OQotOjEwNkIzMDAwNEYzRjJEQjBCOEI4RDkzRDY5MzFCREJGNEUyNkFCNTNEQwotOjEwNkI0MDAwQzU1OTI2Qzg2QzFGNzJGQTQ3MTkyQjQwN0U4NUI2ODMzQgotOjEwNkI1MDAwMzdFM0I4RURDQjE1QjBBQjU2M0Y0MzU2OTA1RjY5M0Y3NgotOjEwNkI2MDAwQjREQkU2NTM0MjYyQUM5MDBBM0U5NjhGMzhGRDk0QzA4NwotOjEwNkI3MDAwRTAzQkEwRTBGRTZGNUREQjVFMzU0QUUxQTg2OUZCMTBGQgotOjEwNkI4MDAwRjVDNUVDRUYzRDFCMDAzQ0Q0MUM5MDFDN0U1QzREOUI3RQotOjEwNkI5MDAwRDRFOTk5ODRENzEzNzA4NTM4QUIzMDAzRjg4NEYzNEI2QwotOjEwNkJBMDAwQzcwNjhDQUY1NkI3M0ZGMEExMTQ4MEY3OUQ3QThCRTJGMQotOjEwNkJCMDAwMjVENDA5Nzg3RDUzMEEyRDgwRjYwRkZFMzE2MDUwNTQ5QwotOjEwNkJDMDAwN0Q3MEY4ODkwMEUwOTU4RUJCNDZDRDgyMzhCRTkzQkZCQwotOjEwNkJEMDAwNjFGQzBCMzk3REM3QTM5QzhFRjlERTlBRjYyRDZDM0VDNQotOjEwNkJFMDAwOTc1RUZDMDA3RTI5RTgxQjg3OERDOENFM0MzQTY5MUI2NgotOjEwNkJGMDAwNUM5RTc3RkRCM0U3MUUzNUU5N0NBNzlGRkJGREEzMjZDRQotOjEwNkMwMDAwODVGQkFFQkZGQ0ZCQTM1RjA3QjlGQzY3QUYwRTdBQkQ4NwotOjEwNkMxMDAwRTZFOTVGMDY4ODhEMEZEN0M5MkM3RTcwNzYxNERENDJCOQotOjEwNkMyMDAwRDE3RTY3N0ZFNTQ5ODA0MzcwRjZBNUY3NDYxQjc0QkRBQQotOjEwNkMzMDAwNjdCRkZGQTdFMTA2RUQ1RkY3RDJEQzdDNTg3RkRERjM4RAotOjEwNkM0MDAwQjNGM0ZCRjM2MzgwNEYxMzFFM0I1QzA5MUNERjM4MjA1QQotOjEwNkM1MDAwMzA2N0UxNDU3RTc1RDFFNTUwQzdBMUQxMDBFNzk5NjM2MgotOjEwNkM2MDAwMUVEQzlGRDVEMDdCRjU1MzgxNEUxQkQwQ0U0MjdCMjNCQgotOjEwNkM3MDAwQzU2RkY1MzM5QjNGMDRGREQwMTdDRkU2NDgxMTgzNUYwNgotOjEwNkM4MDAwNTQwRDA2ODFDRUVGQ0M0MzdBOTExRUI0OEZFRUZFMzVDMwotOjEwNkM5MDAwNDcyOTFEMjdBN0E3REIzOUYyQjEwQTdBQUVFNjk5MkQ1RAotOjEwNkNBMDAwNkMzRTE3RERDRUMwMkY1N0Y2QTVEQjY2MTdERENFOTEwMwotOjEwNkNCMDAwQkIxRTJCODBDNDZCQzczMDQ3MUVDMUJBRjZDNkNGMjM5QwotOjEwNkNDMDAwNTk5MTdFRjQ4MzI1RkYwM0UxMTVGMzJDMTRBRUE1NzJEMAotOjEwNkNEMDAwRjgxQjMyQzhEMTczMTk0OUJBMkUwMEJBM0U3QjZFMzQwNAotOjEwNkNFMDAwQTE3Q0YxQkVEMjczMzNEODgzOUU5NzNDRkEzRTdBN0Y2MwotOjEwNkNGMDAwREQ0QjZGQTI1QzlEN0RGRTc1RDU0MDNCNDZGQzAyRjVFOQotOjEwNkQwMDAwMkJDRjkyRTRDRjYxRjAzM0FCOTlDRjQ5NkFGNjY3NzYyNwotOjEwNkQxMDAwN0EwMkJERjRBOTRFMkNBQzM0MDI3OEZGMDRERTRGMzA2OQotOjEwNkQyMDAwN0VBRjRFMUM1QzIyQTRBMEQ3RUJGMjE4QTZGRjEzNzkwRAotOjEwNkQzMDAwODg5NzBERkI3RkEzMTJCRjkzOEU0MjE5RDBGMUM0M0NGQwotOjEwNkQ0MDAwQjg5RjhFOEVENkZBNzU1OEZGNEMxQjNERjczMzM5NzVCOAotOjEwNkQ1MDAwRjdBRkE2RjIwOEY2MkU0OUQ3ODRGMDI2NDkyMTk3NjdBNwotOjEwNkQ2MDAwRjc3QTY0QjA3NzY3QzFBRjRBOTkzNzY1RkVDQzUwRjNDNAotOjEwNkQ3MDAwMkIzRjkzOURGNTU3QzlGQzBBQzc0MzdBRkU2MEYyM0Q0RAotOjEwNkQ4MDAwRDBGQTg2OEFCRjFGQzkwNjhFRUJDNkUzRTk4RjUzRUJBNAotOjEwNkQ5MDAwRkJGN0I4QkVBODI2NjZFNTg4NEJGQkZBMjEzMjg5OTgzNgotOjEwNkRBMDAwMjM4QjdBRTEzRDBEMUI1NENBN0ZBNzlGOTYzMDFFRDREQQotOjEwNkRCMDAwRDI3RTA4RjVCNjVCNEY1NEE3ODk2RjVFOTA5OTlGNTBCRAotOjEwNkRDMDAwN0RFMEUwMjREMDY3QTc1RkZFMTFGMjY3RjUzMzI3NTQxQQotOjEwNkREMDAwODgxN0JGRDZGNjAzQjVCQkI0NTcxRUMwMUUyNDZDRjY4OQotOjEwNkRFMDAwRTBGNDc3MEY0RTYyN0E4MDhFOUY4MjRFOEFDMkM2QUZFMQotOjEwNkRGMDAwNzlEMTM5N0VDRDMzMUYzQUM2NUY2RkI2QTM3RjMwRDBDRAotOjEwNkUwMDAwM0MxRkM4RTFFNUIwREUwRjBFMkIwNEY0RTgwN0VENTI5RAotOjEwNkUxMDAwNjUyQUJGRjYwMzZFMEYyRDNDQjVCQzNFRUYzNzkwMDdEOQotOjEwNkUyMDAwOUI3NkM0Njc4MERERUNEODE0Q0VERjBFRkVEQTExODVDOAotOjEwNkUzMDAwODBERTI2NzJGOEY3MUVEQUVFNzhERDY3NDA3RUJBRTM3MAotOjEwNkU0MDAwQzgzMkM5QjBFRDQzN0ZFOEMyRTdDQ0EzRTZFQzRDM0FDOAotOjEwNkU1MDAwREVDQ0VFQzgzNDcwNTFERDdBQTNFQzM4REQ1N0Q5RjhCQQotOjEwNkU2MDAwQTBFRUY1Q0E3Q0QwRjdCMDBGMzVDNkMzN0NBMTIwRUNFQwotOjEwNkU3MDAwNzNBNUMwQkM0QTk2QkYxNjc1NkY0QTdCQ0RDNjUzRkMzRQotOjEwNkU4MDAwMTE4QzU3MjlCQTk4OEM5MUMxQjgyMzQ5QTIxMUUyQUI1MQotOjEwNkU5MDAwQzRFRjc3RTcyNzIyOUEzRDBGQjVFMkYwNDFEODYyRTZDQQotOjEwNkVBMDAwMkU3RUIxMDBDNjA5OTA5ODdFMTJGRDRGMTJCQUQ4OEY3RgotOjEwNkVCMDAwRkZFNUNFNDc1OEY4NENDQTVGOUFGQzQ0ODY3RTczRjBEMwotOjEwNkVDMDAwMjBFOTNCNUVERjNDNEM1NDgzRjg3NjhCN0Y2RDZCOTEwMQotOjEwNkVEMDAwMkQwRkQzMTJFQzkzODc5OUFCNTAzQ0I0MEEyNDY1QkNCOAotOjEwNkVFMDAwNzZCQzUyMzE1RkM5QzNERDcxMzRENUYzOUIxNDI2NTc4QwotOjEwNkVGMDAwRDc5MkVFN0JENzAwOUMxMTk2Q0Y5OUU1QzJENzk3MzhGMQotOjEwNkYwMDAwQkVGRTc5MzI1RDM4NTVBMUU1RTA1OTUxRkNDRTVFMTJFNgotOjEwNkYxMDAwOEUyOUY0RkVEQzU1M0Q5N0JGOENERDc5M0VDNzFDMkZEMgotOjEwNkYyMDAwNUVDQzE4M0NGRTg2OUFCNzhCNzgxNkREQUUwQzIyNkZDRAotOjEwNkYzMDAwOTcyRTdGREMwQjg3QzlGN0UzMzk4RTNDQzZBMUI3RUVFRAotOjEwNkY0MDAwRDdCQTMxQ0Y1MERCNUE2NDhCRkIwREVGRjQ5MjMwRTZBOQotOjEwNkY1MDAwRjEwQ0Y0MEY4Nzc3REVGOUNEREIyMEVFOUM1QjE4RjJBNQotOjEwNkY2MDAwOTJCRUUzQzgxN0FFQzZCODkxOTVDRjk3MEJDMzlEMTBEQwotOjEwNkY3MDAwRUY5Nzc1QTM1Q0MyNzk5Njg3MjFCRkIwRDk2MEY5ODI3QgotOjEwNkY4MDAwQ0RDMUZFRTM3QTMzOTQ2OEIzODJGMUE4NkI3MDVDNTE5MwotOjEwNkY5MDAwRTNGNTA3ODM1Q0U3MzcxNjA3MTBDRjAxOEE2NzkwNzcyMAotOjEwNkZBMDAwRENGRkMwRkE4RTBCM0M2RkRFNkQ0QTkwM0YzQzkxOEQ0QQotOjEwNkZCMDAwRjk4MjgwNEM0QTIwMUU3MDVFRjA4NTM2NjEzRUMxOTk5MAotOjEwNkZDMDAwMzc0RkM3QkZEQjY1MTNGM0U2QUQ0NjlGQkNGOTc3MTRCNwotOjEwNkZEMDAwNUJCRTQxNEI5MzM3RDdGQzRCMzA2RkFFMTE5QkJGNUIxMQotOjEwNkZFMDAwRDREQkFGNTdFRTVDNzk3MzE4MEJFMzMyREI2NzQzNUM5RAotOjEwNkZGMDAwQTYzOTlCMzhGMkU2Q0QyMEY4NTcxMUYyOUM3MkY1NkM1OQotOjEwNzAwMDAwQUMzQkYzRjJFN0U2QUNEOTYxN0I5QjFDN0YxOURCM0MyMAotOjEwNzAxMDAwRkVGNEM3RTY3MzlCQTA3RkVFNDg1MjhCNzU2QTcyODRCQwotOjEwNzAyMDAwMkNCNUU5QzFGNzE0MTZBN0REQTA4NDdGQThEOEVCOEU5NAotOjEwNzAzMDAwMzgzRjU4Rjk5RjQzNkZCRDg3N0MwNUQ3MzExNEFGQ0REQQotOjEwNzA0MDAwOTRBRjNDQzg1N0E3ODg1REFGNUE1NzhCN0Y5QThERkU4NwotOjEwNzA1MDAwRjk0MkJEMzAwNUUzNjZDOTc2RDA0NEJFMDgwNEEzRTExOQotOjEwNzA2MDAwNzA4QUY3MjY3OTk4REM1QkYzMDZDQUE4MUVBNUYyQTZGQgotOjEwNzA3MDAwMTgxMUNDNDdBOTNBRERGMDFBODM4NzNGMUQ1QzE2OUY5MwotOjEwNzA4MDAwMzYxQjYzNTgxRDk0NEVCMDdFMkZGRDNBQTZCMTM4MjZBQwotOjEwNzA5MDAwNDRCODI4NUNCQjZFQkMzREQ0OUY5RjYzQUQ3Mzg2MTIyMQotOjEwNzBBMDAwM0U2OUM3N0JFRTI1QTlFQjc3QUI1NUI2RUVFNkM4MkE1RAotOjEwNzBCMDAwOTY1RkFGNzJFNjUzMjE3RDZEOEZCMzRFMTdBMkZGQUU4MAotOjEwNzBDMDAwNjA5QzkwRTU1MzQ1MkRDMkYzMjNBNjE1MUYwRjI2RTNDMAotOjEwNzBEMDAwRTEwNkQ0MTlERTY1ODIzRTU0NTZCNTlCMDI1QzczNTlCNQotOjEwNzBFMDAwM0UyNTU3OEI3RUFDRDhFQzgzQUM3NzMzQjk3NUU1MDc3QQotOjEwNzBGMDAwRTc0QUE3ODc4NDVGQUIyRTZFNkI4MzhFN0VGQTk2ODZGNwotOjEwNzEwMDAwMjBCNjM3MzcxODc4NkQ2OTA4RTM3RDM3MUQ5QjhEOTc1QQotOjEwNzExMDAwODNCNzYwNUQ5QTBGRTNCMkU5QzY3RkIwMjE4NEUzQzQxMAotOjEwNzEyMDAwMUFDQUQ4NzgzQzZGNEU0ODY2MTNGMDk1MkE1QUYyMzI0NAotOjEwNzEzMDAwMENEQjdFODkzRjM3MEI5QTQwRkVCNjBCRUNGOTM1MkQwMAotOjEwNzE0MDAwOTdBMkJDNTlGQ0IzQzNFODNGMkUyRDI1NjYyMDFGMEMyNwotOjEwNzE1MDAwNzVGQ0JFRkNGQTEzNUM2N0YzMkMzRkVBRDc4MUU0Mjg4OAotOjEwNzE2MDAwQUI5M0NEM0JEODc5OTRBNEJENjBGM0VDOThBNUUxM0NGQQotOjEwNzE3MDAwM0I3MjA3OTgyN0NFRTYxOTE4N0U4NkFGNkQwNzRGNjFFMAotOjEwNzE4MDAwMUQ4MjQyRjkwMTU0OTRBMjg3NTNEN0U5NzE3OUVCM0JGMAotOjEwNzE5MDAwOEUwN0Y1N0M3MzkwRDU4NUE5QzVGRTMwMjhGRjY2ODNFMAotOjEwNzFBMDAwRTcxQjBCNTlCRTUxMkQxOTVFMDFGN0Q1RDA2NTU4Mjc0NQotOjEwNzFCMDAwQUU5NkZBMzE5RkE3MTYwRkJGMDVEQURCMEU2RUQxMkIwNAotOjEwNzFDMDAwQzA3RTE0OEEyMUFGMDE3NkJCOUJDOEI5MjgzNjE4QkY5MAotOjEwNzFEMDAwNTU4QjRCNkU4M0ZFM0FDODMxODU2Mzk0ODdFREI3RDRFNwotOjEwNzFFMDAwRTJBQkVFODBGNzBGNEU3OUNENjhBMkZEOUIwQjdEMjFCRgotOjEwNzFGMDAwMEZDODVCQjdFQ0UwRkY0MUVCODk0MjY3MUU4REM4NTRCNgotOjEwNzIwMDAwNUY1MEZEQjU2RENBRUQyNTI4OUY5QUFENEUzMjQ1QkQ0NAotOjEwNzIxMDAwQTA0RDZGNkM1MDZEN0E0MzI1NzM0Q0MwNDMzQUJENDMwQgotOjEwNzIyMDAwRURFRjdENkE1RURGNzFBQ0Y3MzcyODkxN0ExNUY1NDI5NAotOjEwNzIzMDAwODQzOEVCREQ1M0U3QjMyRDdBODA5QjA1Rjk0ODM5OTgwNAotOjEwNzI0MDAwQUNEMzVCNTAzMEJDMzdCRjZERDVFOUI5RjNEQTcxRkExNgotOjEwNzI1MDAwMkY1NTVFREI1RDdGRkU1OUQ1RTlFRDU0OTM3NTdBQTMxQQotOjEwNzI2MDAwQTA0RUVGQzcwQTA5NzU0MjVFRkU5NzUyNjg5RkQxOTdGQwotOjEwNzI3MDAwRUZEQ0UzQjlDRjVCNTBGRjQ3ODM3RDRFM0FCOUZDOTkxMQotOjEwNzI4MDAwRUFDQzlGMTY0NDVENzRCRkQ1RUI5OEVGMTU5MDk3RDI2QQotOjEwNzI5MDAwODFGNUNCQzgyQUU3MzhBMzZBOUQ3NUI1OTdENEU3MzgzRQotOjEwNzJBMDAwREE0NUU2MDg0N0ZGNEI1QkM3Mzg5RThGOEQ1RkU2Nzg2RgotOjEwNzJCMDAwM0U3RUY3NTQ0NzdCNDJFMjJBNDdGRkNCREIyQTFDRUQ5OAotOjEwNzJDMDAwODlFREQ3MzlGQTRGM0VCMEM4RDE5RUQyQjlEMkQxRkY5RAotOjEwNzJEMDAwOEFBRUI1OEVFN0QzMEZBRjczM0M5Rjc5RUMxRTQ3RkJBOAotOjEwNzJFMDAwQ0FFRUFGMzlGQUQ3NTM3NzQ4MDVCOUNERTU3NUM4QjlCNQotOjEwNzJGMDAwRjlBMjNENEZEQjlBNDdFRDEyRERFN0VGQzhBMzBDODNGRgotOjEwNzMwMDAwRjE2RjU2RDdBNUIyQzdDOUJDQTFGQjNERDk1MEMzM0E0RQotOjEwNzMxMDAwRTZGREM3Q0Q4MTJCOTFFQkQwOUVDQUM2RjAwQTAzRUZFNAotOjEwNzMyMDAwQ0Y5ODA3NTczMkNENTk1RkFCMUFBQzNFMTlGNjcxQ0VFNAotOjEwNzMzMDAwN0EwMTY3OURCMTJBNkRDMzNDOURFN0Y4OTdCQjg0NDlFQwotOjEwNzM0MDAwN0RFOUFBMTYzQUU1NjBCMDc1Q0E4QUUxN0E2Rjg4NzI1QgotOjEwNzM1MDAwNzFERTkyOEI1MTU0MkUzMEZFRjZCMTg0RTc1QUU2NjQwQQotOjEwNzM2MDAwQTI3RjYxREI0RjIxMUVBREZERDQzNTFBODk4MThCNjk2NwotOjEwNzM3MDAwQzk0NUY5QUE5RTkxQUY2MjM3NkIxRkU1MTE4NzUyMTc3NQotOjEwNzM4MDAwNjdDOTVGQzBBNkY3NjFCRjYyRTk5OUU2QjJDMUU5NTc3NAotOjEwNzM5MDAwMjk3MTg1QzM5Rjc0NUY5QjAyRUJEMkU5QzcwMjhGQ0QzMQotOjEwNzNBMDAwQkY3N0VCQzcxOTRBQTQxMDlFNkI3MkQ4MjRCNjc4MEQyQwotOjEwNzNCMDAwQTk1NTFDNzAwRjE2Q0U0RjZBMDdFRUEyMEM0NzUyRTg3MwotOjEwNzNDMDAwNzE5NUQ0NjJERDU1Q0I4QTMwMDYwMTQ4MUQ3MUYwRTkxNAotOjEwNzNEMDAwQ0VDNUZGQTMwQ0M2QTU3RUUxMENFNzNBOTk1RkU4RjY5RgotOjEwNzNFMDAwQTdBOTdFNDM3RjdBMDdGNUE3RDFERUI5RjQyM0Q1NTM0OQotOjEwNzNGMDAwMjZBRkZGMzI5ODFGQzFGNEExN0I5RDlGOTcxRkZENkZBMQotOjEwNzQwMDAwRTBBQ0Y2NDNBRjQwNTFBODEyRjc4Nzc5MjI4MUZENjFDNQotOjEwNzQxMDAwRjNBQzQ4MTBFMjczNTZEREJDRjU1RUFCRTc1MjFDMjdCNwotOjEwNzQyMDAwOTZBQjhBMTBCRjhDNzVDREM1Nzg3RDkzMTZENTU4OUVDNgotOjEwNzQzMDAwMzg4QUUzMzQ2NThCN0FBQTNBQjEzQTBGQ0IxNzZCRjVFOQotOjEwNzQ0MDAwMEY4Q0REREY0RkRDNDU1MzQ5MzQ1NTNDNkRBNzg3RTU5NAotOjEwNzQ1MDAwODM2MkZBREEyRUIwQTM5OTc5QUEwMTdCRUVENjgzQTdDQwotOjEwNzQ2MDAwMjIxMDQ3OTJDQjY0MURGNkVCODQwMkYzOEUyREJGNDdBQQotOjEwNzQ3MDAwNDgxNEUzNEM1QTUwNDRCQkFCRDVFRkMwRjkwNzgyRjczMAotOjEwNzQ4MDAwNjY4RkMwQ0Y3RDZDRTkxNzVFQUY5QTNBRUU5MjBFREU0MgotOjEwNzQ5MDAwMkQwMEVGQjQ4MUUxRjUwMkJDNDUzMEZGMzY5Q0JGQzYzQwotOjEwNzRBMDAwNjNBNEM0QkY0MkMyOTVCMzgxNkUyN0JFMUNDMTc0MkJCNgotOjEwNzRCMDAwNjUxQjkwOEYxRDY1NkM1RjRFMEQ4MTgzQkZBRDdEMEU4QQotOjEwNzRDMDAwRTVFRjg3M0Q3OTU4QkY4QTdDNkQ5RDczQjhEMUEzRTMwMgotOjEwNzREMDAwM0MxNjVENDk2MTBFQzYzNTAyRDFEOEQ4NjJDQTZGOTk5MwotOjEwNzRFMDAwNTFCNjlGRUZENTRGOEM4RjMyOTUzMDgxNzg5NkVDMTczRgotOjEwNzRGMDAwMzEzRkE4RjI3ODg4RDVFRjBGMUM5RjREQjNCQTkxNUU0QgotOjEwNzUwMDAwOUJBRjk0QzkyNkExQjdDRTNBNTY0OEQ3MzVCOTc3NUQxNwotOjEwNzUxMDAwRkZDNzkzQ0RGODkzQ0ZFQjIzNEJCMkIwMkU0NTdBMjYxRAotOjEwNzUyMDAwRDg5RkRFRjY3MTdDQjlGNUY3RjczQzVDN0YxNzkwMDJDNwotOjEwNzUzMDAwQTZCRjRCOTc0M0JFM0JERDM4NkUzRkE2OUVDNzc5ODdGQgotOjEwNzU0MDAwNUU1RkNGQ0YxN0Y4RUZFOTgyMzg5MzE1RTcyM0MxNjk2MwotOjEwNzU1MDAwMjlFM0YyQkQ3ODY1RjlDQTVFRkEyRTM3M0EyOUZERTRDRgotOjEwNzU2MDAwRTk1MzMxNEY2RTlENTdBMEVBQ0M1OTJGQ0NFOTZCRDEyRQotOjEwNzU3MDAwRDU4QUEzOTMyMDhCMUY1OTc0RjYyNkYxQjlBNzVGN0M5NwotOjEwNzU4MDAwN0E0MTVFQUVFODhCQ0Y1Rjc5NzhCRUUxQkYxODNFNUY4RgotOjEwNzU5MDAwMDE5Rjg2NUUzMzMzRDlGOTc0NzJFOEFCMDRGMzUyODVFOAotOjEwNzVBMDAwNEUzOUI0REVCM0Y4RERCREZFM0ZGRDE3RTUyNzZCRkRCOAotOjEwNzVCMDAwMTYzRkE0RUY2RkE2RENENzU4RjlENTRDQ0U2RjFBOUNCNgotOjEwNzVDMDAwQjJBMjhBRTdENUIyQjc1QjJGODVGRDZCRDA4RkZCQkUyOQotOjEwNzVEMDAwQ0NCMjE4OUVFRjU1ODhBOTgzNUVDOEI0RjYzNUZDQkNDMgotOjEwNzVFMDAwOTE1NUFGRTQyQjc1RkE2NTlBNkJGRkEyRjJCQUE4M0VFQgotOjEwNzVGMDAwRTc2REI5RkZFNjNFNDc5NUM0QUY4QjVFOTNCNTM0RjlBRQotOjEwNzYwMDAwQjE0MTlFM0ZEQUM1RjM3NTA1NzVGMTQ2RDgwRjE3REMxOQotOjEwNzYxMDAwQ0FFQUZERjcyODY0MzVENDU3OEVBODMyNDU1RjJFRTRCOAotOjEwNzYyMDAwNkY4QUJFOUY0MUQ3NUZGMEUyNDM4RDIzODEyNEI3MUE1MgotOjEwNzYzMDAwNDVFMDY2M0NBMzE5MEUzQjVDNzA1N0JDRENDNzlFNEYwRgotOjEwNzY0MDAwODE3MTlFRDI5OERFMkRBODhDRTMzOUU3QTZFN0M3Njc0MwotOjEwNzY1MDAwODE5RkYwQ0E1QkNCNzU4ODBGN0M5NDVCOENGQkE3MzM1MgotOjEwNzY2MDAwMkY3OEMyQTBGRkNGRTQ5MDJBQUMwQjdCNjFFNjZCRTBFMQotOjEwNzY3MDAwQzdGRkJFQTEyQjQ3QjZGMUM5OTlFRkJFM0U0M0ExNDQ1NwotOjEwNzY4MDAwM0FGM0RDRUIzMzY0MjQ1NkMyMzFGRjg2OEJCRjk4MDE5QQotOjEwNzY5MDAwNzA5QjE1QTRBNDE2RjI3N0JBNEE2MERDMUE4REU1Q0I2QwotOjEwNzZBMDAwQUM3QTlGNURDM0Q1MTZCOEZFRDQ5QkNERTI4OUY5RTJEMgotOjEwNzZCMDAwMEU2OEQ3NDM0MDBDRkMwNjFFQ0ZCRkZBQjRCMTFDRUFEQgotOjEwNzZDMDAwMkZCM0JCMTQwMUVBRjExRTEyNENEMzRGQUZFNzRGM0M2RQotOjEwNzZEMDAwMjQ4MDlGQTU3NkQ2NDI5ODg1REUwRjFEMDI5NDlCNjM3OQotOjEwNzZFMDAwRDlCRUU0N0MxMTI5MjlBMjdBREY3N0I4NzYzQ0ZBRDM5NwotOjEwNzZGMDAwQUU3QTI3OEJGRkU1RDkwNEYzN0QzRDM3NkEwOUIwRDcxMQotOjEwNzcwMDAwREI2NUUzMUJBQkMwN0VBRjkyQjExRTY3QkI3QzE4RTVBNwotOjEwNzcxMDAwQzI0REM3RTNERTMxQ0VGQTVDMUU4RjNFRjRENjFERjFCQQotOjEwNzcyMDAwNzJGQUZFM0Q1MzQ0RTQ1N0ZGODkyOTU5MjQ4NUZDNkVDMwotOjEwNzczMDAwNkYyOEMzRjkwMzA1NkY1Nzk2MDM1ODFGRDNCQjMzN0FERAotOjEwNzc0MDAwRjc0OTdFOTk5ODU5RDQ0NDJBNDVBMkE5NTBCQ0Y4Q0I1MAotOjEwNzc1MDAwMDg3OURCQzY3NzJEMjIwOUVCRjRGOTBCMEQwNEM3RTk5NAotOjEwNzc2MDAwNjhEMEYwREFENkEwOEYyREE2MUI4MzZGMzUwNEYxQkE0RQotOjEwNzc3MDAwQjNDMUMwRUJDMzBEMjVGOEZDQzE4NjkwNDNFRTYxQkVEQQotOjEwNzc4MDAwQjc0Qjc4M0I4NUJGRjI3OTVEMUY2OEEwRjNEQUUwRDg4QwotOjEwNzc5MDAwMzU5MTRBM0RBNUQ3MkU5RThGN0FBMDc0NkFENkRBN0U5RgotOjEwNzdBMDAwRTI2MDdCMUFCQTg2Q0QxOUNCOTEwNUY1QTY3NUZBREU5MwotOjEwNzdCMDAwQURGREMwQkZBNzUxNThCRDA4RkM5QUJCRTVDODNFRDQ3QgotOjEwNzdDMDAwOEZEMTgyNDUzNkZENDhGREI2MDI0MjU5RjFERTk2MTE1MQotOjEwNzdEMDAwNzNFNjE0QTAzQ0EyQkM0QzNCMUM0NTdGQkMyMDE4MTc5MAotOjEwNzdFMDAwMjA4RTU4NzA5NEREQjdDRTVCMjBCREE4QTBGRDMwNzcwOQotOjEwNzdGMDAwOEVBMDgwREUyQzI1RUQwMDk2NUExQTI1MTVCNEZGQ0NGQwotOjEwNzgwMDAwQkMyNUU1NzA5RjRDNzRERTlGQTEzMkY5ODY3MTJCRTg5MAotOjEwNzgxMDAwNzVCNjE2Rjk5MTM2MURCRUQzQjFEQjdDOTZBRUU3OEZGNwotOjEwNzgyMDAwMUQxRTAzRjIzQzBGQkVGQzI3MTVGNjA1QjE1RkE5MUExOQotOjEwNzgzMDAwRjgzMTA1MkY5RUMwQkE4Nzk4RDBBRDQyNjVFQzcxQUQ4NgotOjEwNzg0MDAwN0E4RTRDRjUwQzZFMDYzMUJFNEExNTBCRTU5MzE4RTg5RQotOjEwNzg1MDAwNTg4QzdGRjZDNEU2RjhFMUJDNEJGNDk0QkRGRjJFNUY3NAotOjEwNzg2MDAwRjQ2RTdFNzIyNEFDMDUyOTFGMjVGMzE3RUI2MzYxQkExMQotOjEwNzg3MDAwRTk3QzgxRTcyRjhFNkJFQjYyNjYyMUI0NjlGRjI5QUM0RQotOjEwNzg4MDAwMURBM0VGQkY5MDFEMUQyOTY2NDNEMTQ1NTVBQ0VCNEJBMQotOjEwNzg5MDAwRDBCNkZBNTdDNUEwREVGNjREQUU3Nzg4M0Y1QTA0RjI0RgotOjEwNzhBMDAwOTY2Q0VCQjQ5RDY5NkJDQkFDNEQzNDc2QjVENkJCRTEzMQotOjEwNzhCMDAwRDA5RjVFMDMzRDU3RkRBMkQwMEVBMDUxQkRDN0YwN0YwMwotOjEwNzhDMDAwRTAyMUFDQkI2RDZCRThEMjYzMEFBN0JGNDUwNzJBOTJFMwotOjEwNzhEMDAwMTM4MjA0RUJFOUQ0ODQ5MDE4NDNGNUM3MDRGRTdEOEEzMwotOjEwNzhFMDAwODI2OTYxQTMxMUY0NkI0MjA5ODFERTBDRjk5OERGMzhEQgotOjEwNzhGMDAwMjE0MUM3QjFDOUQ1ODQzNERGNDFDMUJDMkZEMDcxMUIzMAotOjEwNzkwMDAwQUIxQjc2RjNEN0IzNUU5NjFGQTgyN0U2NTZDODgzOTFDNAotOjEwNzkxMDAwNjcxNDFERjM5MTNDNEU3OURBQjI3MzdDQkY3QTk3OTc2NgotOjEwNzkyMDAwMzU5NTREQTZFRjMyRDAzRjZCNjQ4QzgzQUQyRjhBOTc4RgotOjEwNzkzMDAwQUI3NDlFRjUzRjJBMEE1MUNCMEE3OTI1QUM2QjU4OUY1MAotOjEwNzk0MDAwREQzRTdDMkFDQjRCMzlEQTBGRjEzQURBNjBCNjk5MEQ3RAotOjEwNzk1MDAwRTcwN0FBMEYzQzM0MUFFQTAyQUE0OUZDRTZBRjAxQkNDOQotOjEwNzk2MDAwRkZDQUYyOEZBNzBFNUU5OTc1MzU2RDZGQTA2RDg4QkY0NwotOjEwNzk3MDAwNkVFODc4NUQ4REQyN0VDMzM4RENENTFENTNBRTgzRjVCRAotOjEwNzk4MDAwNTU2RjEzODk1OEM0RTQzMzNDOUVFMjM5MUNCRjRDQTZBMgotOjEwNzk5MDAwN0M3MkNERDY5MTczQkQ5NENFNEY4RDA5RUIyMkU1ODNEOQotOjEwNzlBMDAwOTVCRTcxQ0QxQUI0NTU3RDAyQzhDRDRBREZDNDY2RTBEQwotOjEwNzlCMDAwQUJGNTEzRjlGNzFBQzhDNDU3QzMzMkFGOTdBMjdDMzE5RAotOjEwNzlDMDAwNkM0QjQzMENFQTEzRjZBRkFDQkMwRUNDRUM3MDkxQzkxNwotOjEwNzlEMDAwMkQ2NTQ0Q0MxRjRBRDkzMUNDNUJGQ0ExOTk5RDc3ODFBMAotOjEwNzlFMDAwOTRGRTQ2NEE4NzYyOTk3NEM5RjRCQTRCNjVGNDMzNUJENgotOjEwNzlGMDAwNjQ4QzE3RDNGQkFEQ0E1NEEwNEIzQzhDRTcyQjVBOTkyRgotOjEwN0EwMDAwREUxRkZCQTIwN0UzQ0VDNUI1RTEzQkQxMkZEMDRCNzEwMgotOjEwN0ExMDAwOUYzMjlBMjQ3RjMwMkY3RDA5RkM0NkM3MTlBRjkzNzI5RAotOjEwN0EyMDAwMzg4N0YwNjMyRjhCMTcxNkFGNThCNjFFREU5MzMyOTc0OAotOjEwN0EzMDAwRjg3MDVGMkVCMTczNTBFNERCMkM0RUJENEI0Q0I0NkIzMQotOjEwN0E0MDAwMjBFNzgxNjJBNEVGQUUwMEUzMEJGM0UxNTJFNDhCRkQ4QgotOjEwN0E1MDAwNjJDNTY1Nzc0MzVDNTI1OEIzRjU1RjgwQUVEOUM1MDQwMwotOjEwN0E2MDAwRTgwQUY3RUZBMUY3Rjc3MzdBNEFEOTIxMURFOEI3OUYyMwotOjEwN0E3MDAwRDMzMzk2MTA0REE4OEZCMUVFQkYyMEFDQkQxM0U0NkQ4QgotOjEwN0E4MDAwOURGN0Y5MzkxQUM1RUI3MDRGMzgzRThDRDJFMTRFRUZCNQotOjEwN0E5MDAwRjNCMTYwMDFEMjYxOEM0NkYxN0VFNzk2OEU5ODM2OEEwQQotOjEwN0FBMDAwOEVEMzE4MUVBMURCREFFM0ZGNENCRDExQ0M0Rjc2QTBCQwotOjEwN0FCMDAwM0NDQkQ5MEZBRjAzNzlBN0NGNUZEMUU4M0E5RkNBRTE5QQotOjEwN0FDMDAwRkE4MjNGMkYxRTkzRDQxRjYxNDI2RDhERDREOEFCNEZFNQotOjEwN0FEMDAwMzQ2QTFGOEE2REZERTc1MDdERjBFNEEzQUM4RUZEN0ExOQotOjEwN0FFMDAwM0ExRkM4M0I1RDA3RTY3RjdCMjZDODA5QThDRkYyNTE0NQotOjEwN0FGMDAwNThDMDZGRjE0RDFDODNGNTc5NzRERDA0RkM5MjlFODlBQQotOjEwN0IwMDAwMzJEQTU5MkI4RUVEOTkyMDYyN0MwOUZBMDMzRkY4NDY1MAotOjEwN0IxMDAwQjFGRTU0NTAyMkEwMzdFNTQyMTlGN0FCQjJCNDI3M0M2RQotOjEwN0IyMDAwQzE4MEYwMzFDQkVCMEFGQTQyM0NCN0VBMkRCMUU1NzFFNgotOjEwN0IzMDAwNDk2RjFEMzBCNjhCRjAzMzM3OEVGNjU4NEY3NzgxNDgzQQotOjEwN0I0MDAwRkRDQURDRTMwQjg1RDE3NEJDM0JCQ0RDREZDRUE1RkVGQgotOjEwN0I1MDAwMzZCREJGREVDQkY0RDJGRDExRjNDQjEwRTIyMDQ2Nzc2OQotOjEwN0I2MDAwMDFFQTI3MTI5OTBBRDdGQzlCOEFGM0EzRkREOEE1QkU4OAotOjEwN0I3MDAwN0U3NTM3RkEwRjNCRkNBOUNGNjk0RUY3QjFGRDdDOTNCOAotOjEwN0I4MDAwRkY4ODBFRkM1NjRGQThGQzgzNUNFODhDREYyQ0ZENjE1RgotOjEwN0I5MDAwOUQ0RjcwRDcxMzVCRkE0NEM5NjY2QkFDOUI1RjkxMEYyNgotOjEwN0JBMDAwN0E0MEU2RjU0OUIyMUVEMkExQkVCMjNDNzMxQUZBN0QwNAotOjEwN0JCMDAwNEY3QTk5REU5MzBFNUU3OTAzOUNEMzUwRkY5NUU1ODU0RAotOjEwN0JDMDAwRjY3OEEzMTg0RkVBMjkyMEVEQzBBRjcyMzA0Q0VDRjlEQgotOjEwN0JEMDAwNUY0QjFGQjQzNDY4Nzg3RDYyRUFCODBBOTA5MzI3QTY5OQotOjEwN0JFMDAwMEVBRkQwQTkwQzFDOUFGNEUzMkVDODMzOUREQkMzRTQ3RQotOjEwN0JGMDAwRjdEQ0UxREJGMEZDRTMzOTkzQzU5QjgwQUQzMDJFRDk5NwotOjEwN0MwMDAwRjkwODlFRDc3RDVDOEUzQzg4NzVCNTUwMUY0MTQxREFERQotOjEwN0MxMDAwOTZFREFDREYyQUU2NzgzMUI5N0U2QTU2RDhGM0NEMEQwMQotOjEwN0MyMDAwMkM3RUFDNUVCODFDRTM1QTJBRDdFMzlFRThBRDc4NkU5MgotOjEwN0MzMDAwQzM0MzZEMTk5Q0FGRDQ4ODY5QjJFRjFEMzAzQzY4ODU5MQotOjEwN0M0MDAwQ0VFRjYxQTgxNzI2RTFGQkE2OTdDNThGQUM3QTExNzcxNgotOjEwN0M1MDAwNUQ4ODA1Q0YwQzBFNEZERjczMTk0RTdBNThGQjJGOEJDMgotOjEwN0M2MDAwMEVENkZCNzU0MjM4NUZFRjg3NkY2QTJFNDgyNDYxOEIxMgotOjEwN0M3MDAwN0ZGNEQ2NzdBQjc4RkYyQ0Q0QzU2NzQxMUQ0RjM0N0U5NwotOjEwN0M4MDAwNzUxMUM4NDEwMkY3NDc1RTdGMUQyMUZDRkI0QUM4QTc1QQotOjEwN0M5MDAwNDFCOUM3NUU4NzlFRTFBQThCRUYyMzJGODZCM0VEQUU3NQotOjEwN0NBMDAwOEI1ODBGQ0NDMUVCRjhCMDlFNTUyNkRGMTQyOEJEQ0YwMgotOjEwN0NCMDAwNjRGQzc2MDZGOEI1MzU1NDNENjgxMDIwOTI0RDFERTZGQgotOjEwN0NDMDAwM0ZDQkZEN0RGOUM1QkJDMzIzMEQxQjlGMEI4NjYzOUY3NwotOjEwN0NEMDAwNTA3RDYwMjFDNjExNkFGNkZCQjFERUJGMUFGNERGNjQ4NQotOjEwN0NFMDAwMzgzNzYwNzY3OTFDRTcwNUMyOUQ1MDlGQTcxQzYwRTM3QQotOjEwN0NGMDAwM0QwOUYwRDBGQjdGRDRBQjBBNjBEREM3NjFGRjkzMDc3RAotOjEwN0QwMDAwRjYyNDJBQjE0MzJGODcxMTBGMzE2RkY4MThEMTk5M0UwRAotOjEwN0QxMDAwOTMyOTRGQzRCMjJEN0Q1NjFEODMwREMzMkU5NTM4RkM3QgotOjEwN0QyMDAwQTU1RDNFREVGNjU1Qzc2MkE1QkRGNTFGQzdCNUZGODc0OQotOjEwN0QzMDAwRkFDREFBRUYzOEFFRkQwN0ZBNDNCQkQ0NzgyN0U4M0I2QgotOjEwN0Q0MDAwRjMwNThGMDFGNjhCQkU4RkU3NzdDRDk1MjU2ODA3NjIyNwotOjEwN0Q1MDAwNDU2NDA0RTBFMTk1NkMxNUY1NUNFQzc5Q0YzRUQwNzM5OQotOjEwN0Q2MDAwQjNCNUU4OUI5QTZEREY3MDI2RkI4REQxQjBGRjRBMzEyOQotOjEwN0Q3MDAwOUVFOTE4NkZENEQwQzZBM0YzNzcwMDVFQURFN0FGNjQ3OQotOjEwN0Q4MDAwRUZDMjczOEJGNDNEMDNGMzg2ODU4NzQ3QUZBMUVERTEyNgotOjEwN0Q5MDAwMkY3OEYwREM5MEI1REY3NEYzNjUzRTk3QUYxNkQ3Nzk5NgotOjEwN0RBMDAwNDAxNUU0Q0QwRkZBQjYxNkU1Q0MxMzc0RTZDMTJDQjkzNAotOjEwN0RCMDAwNTMyRjRDNzBFNDAzOUUwNDNCNEJFOUE3Q0E1MTA4NTE3MgotOjEwN0RDMDAwRDJFN0E1RjhEQ0U0N0NENkMyRUIxMUQyQ0Y5MzkzNjY2MAotOjEwN0REMDAwOUUyQjUwOUVEM0NGMzM4M0NCM0JFMTcyMkNFQkM5RUY2QwotOjEwN0RFMDAwQzJGNDczNkVEMDlEMjc3MUVCMjlFQjZBRTlBOTZGNzExQwotOjEwN0RGMDAwRkU5NDQ5RjQwQTFGOUQ2NzVEQTI3RDlFMEZERjhFNEVBMwotOjEwN0UwMDAwMDIzRkY4MDM4RDlEODMyQTY5N0JFODY1MzBDRkRGRjQ1QwotOjEwN0UxMDAwODRFRkY3NEVDNzczNUZGRkU0Q0QxQkJBM0NBQ0Y0MTE5RgotOjEwN0UyMDAwNUU5N0Q5NDcwRjMxRkZFQTU2RTZBRkQ2Q0Q5RjhBRkU1RgotOjEwN0UzMDAwNUREREY2MzFCQUZEOUNBMkZCNUE3NTIxQzNBMTg3ODY5MAotOjEwN0U0MDAwNzkwREZFQkQzRDEzRjU1MUQ1ODUwMDNFRkZFQ0U2RjNGRgotOjEwN0U1MDAwM0FDRUFGRjQ5RENGOEZDRkFERjlFRTcyRTlEOTQzOTMwRgotOjEwN0U2MDAwN0VCQTBCQ0VCOUQ3N0Q1RjExM0RCNjc5RUFCRUNGRUJCNgotOjEwN0U3MDAwRkZCRDU0RUYzQUU1M0QwQ0YyMkUxNzkxNjQ3RDE3RThGMwotOjEwN0U4MDAwODc2REFBRDUwRTM3Q0Y5OTA1N0VBRDREM0Y5NDgxRkYwMgotOjEwN0U5MDAwRDVGQjNFN0NFNzZFOUI4RkY3MzcyQjUzRjdDRjcwRjUwMgotOjEwN0VBMDAwMUY2MzhEQkYxMEZCQkJFMTQ5RUExRkQ4OEZEMUZFRjJFMwotOjEwN0VCMDAwOUYzRDE2N0NBOEJGMUUxMjVERTNFNTU4RjNERjg4RTMwMwotOjEwN0VDMDAwNTk3RUY3NDU2REVEQUJBNjBDN0MxQTJGODdGRDUzQ0Y3RAotOjEwN0VEMDAwNkRDNDgwRUY0RjNDMkU4NzdDMjEzQkRGNkE4QzVGQUIwQgotOjEwN0VFMDAwMkU1Q0VBQTA3NzJGREVDNzM5RUVCRkQ3MTA3NEQ0RUIzMwotOjEwN0VGMDAwREUxMUFEQzMzQUVEOEIzQ0ZFNTQ0NTNENzM3QzZGQ0YzNAotOjEwN0YwMDAwNDg0NzlERUVERkUwRjhBNDcwNUM5RDA2OEU2QkJFNjA3NgotOjEwN0YxMDAwMzg4QTFDRjJEOTBCNDdCMUUzRkUyNzg1NjNBMUM2RjQ2QQotOjEwN0YyMDAwRDc3MjdFOURBQkIzNzNCMzczMEQyMUQ0NDQ2RkNEQTVDRgotOjEwN0YzMDAwRjdCRDk0RDdCRjRDQUYxQUJEQ0U5NTg5RTlDN0VGQTI2NAotOjEwN0Y0MDAwMjY1ODdGREE4NkZERkQwRDdGQkVGN0RENkIzMTUxMTVCQQotOjEwN0Y1MDAwNzRENDE1NDhCQ0NFREJBRDc3RTA5QzM3QUI3N0QzMUMyRgotOjEwN0Y2MDAwREY4N0IzQUUzRTg5RDU2QkJBRUY3RkU4NjM3OEY5QzY5OQotOjEwN0Y3MDAwRTVENTA0RkM2OUVBQUJBNzNDQjdCNkNCMkZGMEVGN0RBMwotOjEwN0Y4MDAwMDY0NTQ3OUM5QkI3QUQzQURGQ0YwQTJFMzk4M0NERjcyNAotOjEwN0Y5MDAwOERDQkFGMjcxMEQ3OTU3MzUzN0ZERkVFQTA5RkMxREY0NgotOjEwN0ZBMDAwQTI4NUIxNEUzQ0E2RjdGRjVEOUE0RjBBQ0ZGMDI0M0M2NAotOjEwN0ZCMDAwRDcyMDlFQTQzNDc4QUFCNUUwRDE1OTVFQjAyNUY4Rjk0RgotOjEwN0ZDMDAwQzA1MzkyNjFEMUFEN0ZGQzZDRTU3MDkzMEI5NzIwMUY3RAotOjEwN0ZEMDAwNDk5QzRFMkRCMDdGNEJEMURGQ0E3RkI0Njg5RjJGRkNFOAotOjEwN0ZFMDAwRTE0MUQyRjdCOThDMkY4NkJFOEIwNjQ5REY2MjJFMDc5RQotOjEwN0ZGMDAwMkRGQUU3MEJDRkFEODM4NEU3M0E4QkRGODI2MUE0RDdGQwotOjEwODAwMDAwRTcwNUNGNTcwNjA5Q0YzMThCNUVDNkU3OEI5RkQ2MjQ5NQotOjEwODAxMDAwRkZGNzBGQ0Y1RjM4RENGOTE5MkMwRUQyNTJDMkNFOTM4NgotOjEwODAyMDAwRjhBNEM4ODM0NUMyQzA3MkUxMkI3NkVFQjNCNTQyOUY3NwotOjEwODAzMDAwQjNDRUU2NUQ2N0RENTdCQTc1RkU5QUFGMzM5RDNDQURCMgotOjEwODA0MDAwNTQxMjc5NDBCRjYzMEQyQzFFRjAwNkRGOUZGQ0JBQUFDNAotOjEwODA1MDAwMjkxM0UzRjNBRTc5NUE4MkZCMzJGQjhCREJGQ0Y3MkE2MAotOjEwODA2MDAwRTdCOURDODFFNDc4NTIwNkNCRkZEQzE4NzVCRUI3N0MzQgotOjEwODA3MDAwNDU4NkFCOEVDQ0M0N0UxNkZFRDI4REY3RDc4MkI3MzA0NAotOjEwODA4MDAwMjQzMTA3ODEzNzhBQUZBQ0EyN0VGNjBEOUYzNUJFRDI3MAotOjEwODA5MDAwQzlERDUwRjExNUQzODc4NkFGODFFNEZEMkI0M0M0OTcyQQotOjEwODBBMDAwMjVBRjdGQURGOENBMDc3QzRERkYxQjdGMEQxNjVGOEI5OAotOjEwODBCMDAwRkUyNjhGNDNDMkQ3QUQ0Mzk1NDdFRUQ3RkVCNUUyNkJBMAotOjEwODBDMDAwQjBGMkU4REVCN0QxRkQ1REE4QkZFRjBCN0NENkY4NzM0OAotOjEwODBEMDAwQ0ZGRjY5RjE2ODhEQjczMkNEM0UyRjFEM0UwNzgyQzNCOQotOjEwODBFMDAwQkE3RUU4MUIyNDVFRERGQkNGMkYxQUFGQUVGOTNGMzUxOQotOjEwODBGMDAwNUVGOTc4NDNDNkVCMDA3MDU4NTc3OTkwRjI2REY5NzVDOAotOjEwODEwMDAwNkQ2QUVBRUY4ODhFQ0I2NERGNzExQjJGRDQxRTk5MEY0NgotOjEwODExMDAwRjlFM0JGOTMzMDNGN0Q2NENGOUMwREY2N0FBMDcxOTk0RgotOjEwODEyMDAwQ0NERjNFNTIzOTdCMDNDNDRGQ0Y0NTMyQjBGNkVDQThDQQotOjEwODEzMDAwMThGQUY5MzRDODJCMkY2MkVGQjlDNzNGQzJGMUU1Qzk2RAotOjEwODE0MDAwQ0NCNkUyQkY3OTQwRDdBMzkxQzVGRENBMjNBOUI0QUQ4RgotOjEwODE1MDAwMEJGMzQ2MzZGQTRBN0RGMTdEODQxOERCQTc0MTFFNjI5NwotOjEwODE2MDAwNDE2QTM4MkMzQUE3OUI3N0E4RjQzRDFBNzk3QzQ4RkFFMwotOjEwODE3MDAwNjdBMEY1RkU4NzdGQ0MyMEY1NEYwMkZCRTU5MkU0REY5OAotOjEwODE4MDAwRERCOTBDRjBEOTI2QjI3QUI4RTM3MEFCMDBCRUVCNDY4RAotOjEwODE5MDAwQjBEM0YyMTVGOTdCODE0RTc3NjdCMkZDNjE4NzZBNkNDOAotOjEwODFBMDAwODBGQzg5NjdGMTgyMDczMjI5REQ4RTJFQ0QxNkVDRTczRgotOjEwODFCMDAwMkZFNzY0QjJGREQ3OEM1NUE5Rjc1RDBCMzkxRkY0QkVDQwotOjEwODFDMDAwMkY5MEYxMjlGODNCQ0NGQjJENURDNUJFM0Y0NkU0RjA3NgotOjEwODFEMDAwQTg0NUI2NzNBN0VCNURDRkZCRDAyMzMzODA3MDFDNEQ1MQotOjEwODFFMDAwNzNFRTdGMDE3RjdGRjk5MkZFREYyN0I1RUNGQjNFOTRCMwotOjEwODFGMDAwRUY0NkQ5Q0ZCRDI2Rjk4Q0NCQzcxOTdGNzQ2OTI2QkQ1MAotOjEwODIwMDAwQkUyMTQ0QkY3MzFGRjBEMTA0M0YzQjM3MjQ5MzIyQTgwMwotOjEwODIxMDAwQkZCMkM2Qzk5NTQ5QTc0QUYxRkVBRTYyOEM4MkJDNjY2MAotOjEwODIyMDAwOEE3MTZFQ0U5QzlFN0U5Qzc0NzhCNUQ2NjNDRDAzQTI3NwotOjEwODIzMDAwMDhERkU5OTlBQkIxMzhFMkI0MzAyMUIzMjA3RUU4MDkxOAotOjEwODI0MDAwRERDREYyODc4QzBGNzI3ODFERTJDQ0RBOEM0NDIzRUMwMgotOjEwODI1MDAwN0I2NUJBNEUxQkJDMURGRjc3RjY3RjgzRTcxRDQ3NDQ0NQotOjEwODI2MDAwMURDRkI3QkJGMDMwOTA3RTY4Q0E2NEY5RTQ1QzI5QkFEMAotOjEwODI3MDAwQzkwQjc5OTNENTQyQ0FFRkQ4NkRDQzY0N0ZFRjY4NTJCMQotOjEwODI4MDAwNjZCMjVFMEFFNzE5QjczM0FBQzBGNzJGOTZDOTJDRkY2QQotOjEwODI5MDAwNDU0ODc0RDQ0MkRCRkM5MzM4QkZCOURGQ0I5NTU4QkQ1OQotOjEwODJBMDAwMTE3OTkzQzk3M0RCQkU3NUEzNTJDOUNGMkZCODlDNEUwOQotOjEwODJCMDAwQ0EyQzcxRDQzOTJFODlEQ0FEODA3QzJFNTlCMDUwMzE1NgotOjEwODJDMDAwRkNGMERDQzBGMTk3NzIzOERBRDRFOEE4MjlGRTVFM0NGNQotOjEwODJEMDAwQTVENTQzMUMzRjFEQzdBMjRERjBERDhGRDVGNTAyRDZCNQotOjEwODJFMDAwMDk5NDZFNjQ3Q0I3N0FFMzQxNzEwM0JERUVFNUYyQjdBMQotOjEwODJGMDAwMTA2ODYwMUJFRkJCOUNBRTZERkI3Q0EzMDFGRUI2NjRGNwotOjEwODMwMDAwRkU4NjBFNENFMUI4NzkzN0MxN0NDODkzREI0RkI3NDA4RAotOjEwODMxMDAwM0VBNDVCMjAzQzdGNzI2MzI1RDQzNTc0RjNGQUI2OTc5NAotOjEwODMyMDAwRTlGMzQ2QzBERjlDM0M5NEVGNzExQjNGQUMwM0ZERENERQotOjEwODMzMDAwQTExMjNDMkZGM0JCMkQ5RTA0OUMyN0IwRjgyNUE5Mjc0MgotOjEwODM0MDAwMzY5RTZGODBGQUUxNDdENENFODlDMDM3Nzk0REI1RjdCNAotOjEwODM1MDAwQTVDQTlGQkVDNEU5RjA0NzdGMjQyQjk1MUY2ODVEMkRGOQotOjEwODM2MDAwN0Q2RUY1NUIyNDFCNEFBQUZFOEIyQjVENzY4REMzM0Q4QgotOjEwODM3MDAwQ0NEMzc5ODZBNEM4NjMyNkY5MzBEMUJGOUZGNjRCQUUyMwotOjEwODM4MDAwQzc3RkUxQ0FGMzJFMzk5NjNBQ0VGODJCQ0VCRjZEODk1RQotOjEwODM5MDAwOEFGNTY4Qjc0QzBGOUU0M0IxRTBCMUYwOTU2QjMyM0M2MwotOjEwODNBMDAwMkQ1QjIyMzlGNEVERUEwNTE5MkVCRjg3RTFGNTA2OEYyMgotOjEwODNCMDAwRjEyOEFDRTM5MTdEM0Y5RDg4RTdBODVDRjZDMTI3NDU5NQotOjEwODNDMDAwNTU3ODdFMDdFOTU0NDA0RkJDMkYxOTc4N0RBM0MxRjkzOQotOjEwODNEMDAwNzc1RURFMjBEMUVERDNDMTdFRDY0QjI5RTVFQThGOUNCNgotOjEwODNFMDAwN0ZERTU4NzFDQjUyODQzRjI2RTkwMEZGODk1NUMzQUUyQQotOjEwODNGMDAwMkYwM0ZEQjI0MjA5QzE3N0QzNEZDNEVFQ0RCQ0NEQjYzOQotOjEwODQwMDAwRkVBNDVGRTM4MkVCRDc1NUI3RjQ2QkI3OTZBRjcwRDI5QgotOjEwODQxMDAwQUQ0RDY1N0U4MTc5MUQ5M0MzM0IyOThGQ0U0MkZFRUEyNwotOjEwODQyMDAwREUzRTkzQ0U3RjI0OTEzMzY1MkJFQjRFRTBFRjRDMkQ1NwotOjEwODQzMDAwRTZCRkJGMkY0Njc3Q0NBNEZBRTY5NEM4RjIyNEU2NTdFRAotOjEwODQ0MDAwOThERTU4QjIzM0QyMENBOUQzNTNGNTU3QkNENDRERkJBOAotOjEwODQ1MDAwNzkwMzhDRUY3RTVCREZCRjdENzRGM0QzQjg5RDRFN0ZENQotOjEwODQ2MDAwNkZDNjMxQTJDMkZCRDFCQUQ0RjZFMERCN0EwNkZGN0IzRAotOjEwODQ3MDAwNjJBMUQxQTA1RjZFREE5OEJBREZGRjAyNjZBNkYwOUMxNwotOjEwODQ4MDAwRkE4QjU0OTUyQTNFNzk5NUNFRTA1RDFENDlGREZFNTU0NwotOjEwODQ5MDAwN0EyNjdCMEU3NjI5MDU5RUNGMDUzMkI4OUVEMzQ3ODM3OAotOjEwODRBMDAwOUU1RTlEMDZERTBGMDMwMTg0Rjc5REU2RkI2RjgyM0ExOAotOjEwODRCMDAwOTBGNzVEREY4MTdGMjdDMEY4RTI2MDgwRjFGN0E5N0Q0QQotOjEwODRDMDAwMkI5NTNDQTA1MzhCQTAwMzNGQkM5RDFEOUEwMEZDQjY4RQotOjEwODREMDAwMjY3NjAyQ0ZCQjFDRTA3ODdFRDMxNzk5MTI5ODBFRjI1NQotOjEwODRFMDAwQjI2ODZFMUVBNTRCQzcyQTEyMTI4Q0Y0RkFGRkNBMDA5RQotOjEwODRGMDAwRjMxQjcyNzlCQzk2REFCRjc3QzFGRUQxNTdERjQ1RkYxNwotOjEwODUwMDAwNDMwRThGQkU3MTIyMkI4MTgyM0FGMDUzQTJCOTBFRUIzQgotOjEwODUxMDAwMENGN0Y5NTg1RDI5MDk0REI3RkJGMTVGRTY3MDlDREE1RAotOjEwODUyMDAwM0YzNDdBMkY4REI4RkNBMDNFRkU1RkJDMUFFN0REOUY3QQotOjEwODUzMDAwQTE0MzVEQ0E5MTRBQTlGMzVBMEFFNEM5RkQxOUY4N0QxRAotOjEwODU0MDAwNUNCNzVDQTQ5QjdGQTg3RUUwQTlGRDQzRjMwMzA3NUFCOAotOjEwODU1MDAwRjc4NjQwRDFBMEZDQzA3Mzk1OEZFQzk4MDY3MkE0QzYzNAotOjEwODU2MDAwMjdBNUQyQkY5NjlFM0VDQUUzRUY2RUZFQjFBRTVGRTU5MQotOjEwODU3MDAwN0NGNDdFQTI3RkI4RUVEOEVEODRFN0E2NUEyNzNDOTYxRAotOjEwODU4MDAwQkNCQzlGNjhGMkFEMDEzQzkxQ0U4OTc2QkY5NENDOTk3QQotOjEwODU5MDAwM0U4MDlENjVGOUE5NzQ3MDZFNzdFOTA5RTAzQ0EwQzMzRgotOjEwODVBMDAwOUQ1Q0RGRkNCNkZFOTE4MDlEMEVFRUY1OUYxMkY5RkVGQwotOjEwODVCMDAwRTA1MTU2OTczQjM2QjJBNjIyQ0ZFOEU1Q0Y2RjdENEUwRAotOjEwODVDMDAwN0M2OUQ5MTlGNzM4RkZEOUY5RDBCMjczMDNGMTYxNkUxQwotOjEwODVEMDAwOUEzQ0NFMjQzOEU4NENERjVGMjNFQjJBRTRFQjI3MDVGNgotOjEwODVFMDAwMENENjI2RkEzQzM4QUE0NUNBNzhERDI4MzE0NkMzRjlBQwotOjEwODVGMDAwQUY1M0ZCN0NGOEY3QTFDQ0FEOUVDNDU4MkEwMkVGRUYzNQotOjEwODYwMDAwQkI3QTgyN0QzREJGRTI3Q0JBN0E0OTM2N0U3RUUyN0RDRQotOjEwODYxMDAwMzEzNDNGMUZFQkNFMjRGQzhFREIxQkM3NzJFNjQxRkJERgotOjEwODYyMDAwOTFDMzIyNjg2ODcyNTNERDFBMDlENkY3NDY4MEVEM0I4NAotOjEwODYzMDAwNTc2RjdDMURGREMxQTFGMkY5RUE1QUE3RkRCRjhBQUZCMQotOjEwODY0MDAwMjNFOTY3QzkzREQzODA3RkQyRTFFMTM1OEU4N0E1OTFDQgotOjEwODY1MDAwODU3MzQxM0ZERkIyNTE0MDdERkIxMzE4ODcyRUU0MTYyRQotOjEwODY2MDAwMzk4QzdBOUJDNDk4N0QyNDFBQzUwNzM1MjEyNzYwMTE1RgotOjEwODY3MDAwODA4RjdGRTBERkFEOTIyM0FBRkQ5Q0RDNkREQkVFOUY1NwotOjEwODY4MDAwMEJGRUExNUI1RTU2NjQzMTNFQUVDODYyNzZFMTRENUY4MwotOjEwODY5MDAwRjQwRkEwRUYyREZERkNCNjUwN0IzMDlGNzZEOTE4RDA5QgotOjEwODZBMDAwQURFRjA0QTM5QzVBRUJEOUM4RTFBMjdFREFCM0Y4RkQ4MgotOjEwODZCMDAwNjJCRTNFRDJFM0UyMzczMTVFRkQ2M0MwN0Y4NTg2N0VENwotOjEwODZDMDAwODFDRjQzRjUzRUQ0NDUzRkVFQzMzQTJBNEJBRTJDN0ZEMwotOjEwODZEMDAwQzdGREZFMzIzOUVBRjAxQjMzQjM4QTFDRkVCQkRCMEY0OQotOjEwODZFMDAwRjk5QkJENDhEREZGOEFBQzJGRDY1RTVDOUJGNUQ5RDhERgotOjEwODZGMDAwOEI2MTlDQ0ZEQzc2MjMyOUQ3MkRFQzNDQzg4OTYzMUY4NgotOjEwODcwMDAwQ0Q0RDI1RDc5MTRGMDg4NzVCOUVERkRGRTc2M0RGNERCNwotOjEwODcxMDAwQkUyNjEzRjU0RUVGN0UyQTNGMDFGQjY1Qjc1Q0MwN0U5NwotOjEwODcyMDAwMEFCRUZCRjFDOEJFOUY0RDg0QkFERTEzREJFRkJGMjk0MgotOjEwODczMDAwMTUzRDY3RTlDQzZGMjJEREY5OEU3OERFREEwMEMxRkFFQgotOjEwODc0MDAwNkY0MkU3N0JDMjM2QkVGNTVFNTI1RTA2ODg1RjJFNUJFNwotOjEwODc1MDAwNzkyNUVFMjdERjU4NzlGNUU4MzVBNTdERjcxNTdERkFGRgotOjEwODc2MDAwMEJEMTdGNTgwQUYzMzZGMkZERjQwRTRGRDVCRTU0RkIwMQotOjEwODc3MDAwNDA4RUQ3QkU3MTYyQTc3RkJGNzQ2Mzc5MzM2Q0E5MzcwRgotOjEwODc4MDAwNjU1Q0YzQTU2ODhBRjk5M0ZCOUE4REE5RTM3MTBGNzI3MgotOjEwODc5MDAwM0Q5NURDRDc5ODc0NUY0M0YxRDFCRDRBMEE5NDRERUIwNwotOjEwODdBMDAwRERENzc0OUI5RkNGQkVFNjc3QTRFN0U3MzM1MUZFNTMzNgotOjEwODdCMDAwQzNGNzNEOEJCRkQ0RTg4RTJCMjk3Q0E3RThGRUM3MDQwNgotOjEwODdDMDAwRjkxMUU5N0JDMDJGREY0QUJENUY3QjlDQkZGN0JCOERGMgotOjEwODdEMDAwNDNENDU3Qzc5Q0ZCOTk3NEYyRjdCRENGNDhGRURBRDQ1NwotOjEwODdFMDAwOUU1MUEwMDc3RUI3RjdFM0I3RUU4N0Y1RUNGNTIxQkUwMwotOjEwODdGMDAwRERFMzQ0NzQ4OUVGMkY3Q0M4Qjc5NjdERUU1MDk5RkU3NwotOjEwODgwMDAwRkZERERGOERDMEJGOUJFRDk2MEY0MkUyRDc1RjQ1OUYzNgotOjEwODgxMDAwMUZERjI3NEU4MUVGMkNCNkVEQ0JBODRBQjVDRjU5QUY1RAotOjEwODgyMDAwMEIzQ0JFRTQ4Q0Y3MTBFRURGMkRFNUZDQTZFRjdCQkEyNwotOjEwODgzMDAwRDYxRThGN0U5M0VCMkIyQjBFRjBCRkIzOTg5RDVEQjJBRgotOjEwODg0MDAwNjBBMTBBRjE5RURCOTJGMTI2ODI5QjE1RkRCMkMyQkRBQQotOjEwODg1MDAwRjBGRDhCNUZGMkYzNUNFNkRBQ0M5NEU3RTM3RUMzRjFFNAotOjEwODg2MDAwM0I1MDFDNjJDNTJBNjc5QzYwQzk4MkZFRURDREM5NDQ5RAotOjEwODg3MDAwRUFCQTJDOEI5RkQzQ0QzNzU0RkJEMjk2MTg1QTVFNkMzNAotOjEwODg4MDAwQTA3NThFRDAwNzY3NUY5NjkyREEyRjQxQkM2MzE5MDlGNQotOjEwODg5MDAwMjk3MDVENDI2QTI3RkU5OEEyRjJFNEVFQzUwOENGMkY0OAotOjEwODhBMDAwQURCRjdGRkNGMUJEMTNFRDdFQ0NGRjA3MTBGNjY3Mjc0RgotOjEwODhCMDAwMDA4MDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDA4NgotOjEwODhDMDAwMDAwQkREN0QwQjc4NTQ0NTk2NzBEREJFRkQ0QUQyNDkyNAotOjEwODhEMDAwM0E5REVFQkMwOTFEMDIwODE4NjIwNzQyMDAxRkQwMjExNAotOjEwODhFMDAwNDQ4MkIyREE4MTAwNDE1MTlBODcxODQ5NDhBMkUyQ0EwQgotOjEwODhGMDAwRkVCQTQzODcyMDQ2NzQ2NkMyQUE4Q0JGRTNCODBEODJENQotOjEwODkwMDAwRUIyODZBQTJEMTQxOENEOEEwRjhEOEQ1OURBMEFFOEIxNwotOjEwODkxMDAwQjNFODQ2Qzc0MTVFNDMyMkEzMkJCM0NCMENGRjM5QTc3NAotOjEwODkyMDAwQUFEMkY3REU3NDQzNzBDN0ZERjZGQkUzMzhEN0JBQjdCNwotOjEwODkzMDAwOUVFNzdENEU5REFBQjYzOTE1QzYzQzhDN0Q1QjczRkJDOAotOjEwODk0MDAwNUY0RDYyOENGREFCQjU3OUJDRDNDMUQ4NTlGQzlCMUU4MQotOjEwODk1MDAwN0RGRUNCM0FDNjIyMTczMUY2RTEzQTNCOEJEOEEwMUNGQwotOjEwODk2MDAwMzY1NTg1NjNENEZCNTNBQTg5MzFFOEU4NUZFMUMxNEFGMwotOjEwODk3MDAwMTkwQjJENTBDMzNCOTRDMUY1QjI3MDVDQUNCNzc4NUU1NwotOjEwODk4MDAwNkEzMDQ2M0ZGMkI5QTA0NjY1MTEzQkEzQkZCM0YwNkYxMgotOjEwODk5MDAwQ0Q5QzI0NURGOTIyQTc1M0Y0RDM5QTE4MkM2MkVDODg1RAotOjEwODlBMDAwMUNGNzUxM0VFRTkxMzA3RjJGRkJCQjQ4OEM3QjI0N0MyMwotOjEwODlCMDAwRUU3MTZGN0UwNEM2MUQxMzFERTc4NjY2RkRCOEJEMkNFMwotOjEwODlDMDAwQjQ4QUI5NjE5QzcwQTI3MzQ3MDFDM0ZGOENEODI2NDQ1NgotOjEwODlEMDAwREJFRjc1OUEwOEFFRUM0OEE2ODk2NTMwNzY4NzZDMUI4QwotOjEwODlFMDAwNjdCQzBGMDU3QzhERjU2QkNDN0U4QjE2MUZCN0E3N0EwNQotOjEwODlGMDAwNjlGRUIyNUMzMzQ3M0Y0RjZGOEE5MzhGQ0I5Q0Y5ODFGRQotOjEwOEEwMDAwNjRDNjhFNkU0QkY0MTMzQ0E2MjU4NzQ3QzEzQzJCRUQwNAotOjEwOEExMDAwMkNFNDgwNzkzRUY4RTRDNTlGQjExMThDMkQxM0Y4QUY5QQotOjEwOEEyMDAwMDk3QzZENDE3ODFDMzVGNURGOTM4Q0VCRkFDMEU0RENGMgotOjEwOEEzMDAwMDE0Mzk1MURGNDVCQjRGMEJCMkI4NUMzRUZFOEY2NzNERgotOjEwOEE0MDAwQzNFRkFFMTQzRUNGNzk1NUZBRjlDRDNGOThBODJCMUI1MgotOjEwOEE1MDAwRDdGQkVGN0Y3QkVGMDRFQ0Y3REZGRkY2M0I4QkI2RkYzNgotOjEwOEE2MDAwMDVBNzczNTkyNDNENUE1RTUyQUJGOEMzNDU4M0M3N0RCMQotOjEwOEE3MDAwMjlENTNBMjRCOEJGNjQ4MEUzOTJEM0Y5RDRCRjVCNjVBQgotOjEwOEE4MDAwQ0QxRDMxRDY1NUVFQjQ1M0ZERjk4MTcyOEIwN0UwQjk5NwotOjEwOEE5MDAwRkM2RUM1QTc0MDE3MzM5Q0JDOUZFNTY2RTZFRjgwRjlFNgotOjEwOEFBMDAwMzBCMzM3QkYxQUUwRUU2OTZEQkUyMzEwQTM5RkZGMjNEQQotOjEwOEFCMDAwRTBGRDhEMjM5MDFBOEJDRkU0RjM2MzQxMEZCMkRFMDIwOQotOjEwOEFDMDAwNzNEMDEyQUJGRUMyNUEzRDdDN0IxOUFCOEEzNUZGMUZCNwotOjEwOEFEMDAwM0IzOTVGMEU5NTFFRTVGOEM2RkE0MzlEQzdERDgyMEU1MQotOjEwOEFFMDAwRDM2RDkxREYzMzE1NUU5QzgwN0VDQTJFNjA1QzQzN0QyMgotOjEwOEFGMDAwRTNCOEY3M0JGNUY4MzM4RTdGRjRDRjZBNUQyQzM4QkNEMgotOjEwOEIwMDAwMjZGODNGMTgwMEZBODlGOTNEOTlCRTdGQzBEQTFCNzczNQotOjEwOEIxMDAwMTM3RjI3Rjk3NjIwMThCNjJGRkYwOUEwOURBRDlDN0QwNQotOjEwOEIyMDAwQzc1QkYwOUEyNUE2MTREMEZBMTYwNzBFNTQxMkJCOUQwNwotOjEwOEIzMDAwNzlCMDE4RjFGRTZERDU4MzNGMjk4NUE5MURCNTA2NUI3NwotOjEwOEI0MDAwOTNBMUMxRDFGNThBMkZFNDFEM0NDRTA3Qjg0RTkwQTM2NgotOjEwOEI1MDAwMUZBMTNDQkQwOEZCNjM5QzZFNjdDMkZGNjUzMzM2NDZCMAotOjEwOEI2MDAwRjVEN0EzNTA2MTc3RDlCQzNCMzQ3Q0VCNUVGQkREM0E5MwotOjEwOEI3MDAwNTZDQ0Q4NTNENkMwRkE2NDc4M0ZGQUVFQUZENzMwOTRDQgotOjEwOEI4MDAwNzkyQzRDRjNGRUMyRTJCQjg1RTBDRDE4RjFGREExNkQ1RQotOjEwOEI5MDAwOEVBRDlCQTA1RTZBMEE5NzkzOENGOUYyMDNFMzM1NzI1RgotOjEwOEJBMDAwQzJFQ0E0RjI1MEYxRjM2MTFDRkM1Q0E4OUM5MkVCOEMyQgotOjEwOEJCMDAwMzcwRTQwOUVFNjM3Nzc4NkEzNEQ0OTY1QUNDQkVBQkRCQwotOjEwOEJDMDAwMDlEN0QzM0YzQkMxQjkwRDUwMzhEN0VBQkYxQUUxRjNGQgotOjEwOEJEMDAwQzEwMTkzQTlBNTgwQkEzNTIzOURDRUUzNDNCMDgyNkIzMgotOjEwOEJFMDAwMEFFRTFGNTc4QUYyQzdFMjRGODBBOTU0NDMxQjM2MTU3RAotOjEwOEJGMDAwRTg2ODg2MjM4NEZEOTU3RTM4RTcxOUM0Q0Y4M0I1MzZBRgotOjEwOEMwMDAwQUY4QUZENERGMzdFQUE0Mjc5RUU1NTM2RUY3QUU4QUY5MgotOjEwOEMxMDAwQUM2N0M0NUUzN0Y0M0Y3RjhFRTI2NEQwN0VFNkVDNTFGMQotOjEwOEMyMDAwOUU1RTU4NUZEMjVBRTgyNzA3NDdCOEI3QUFDMkNDRDg4OQotOjEwOEMzMDAwRDNGODlGOTczMjNFNjE4MEM1NUM0NTk2NUY2QzlCMDk3NwotOjEwOEM0MDAwRjI2MDlDQTdDQkU0MDA1MEFGNEM3QkIxQ0QwRUZEREVCMwotOjEwOEM1MDAwRDMxMkM4NzJBNkMxRDIzNkRGRDc2NjFGQzY1ODQ2ODY2MQotOjEwOEM2MDAwQkY2N0JBOEZCMUQ5OUJFRkFGQjI1RjAxRUI3QzU0QjQ1MQotOjEwOEM3MDAwMEYzREQwRTZDRjYzRUM1NTUzQjA0MDgxRUZDRDlCNzdFRAotOjEwOEM4MDAwNTQ5OTAxNUVFRTQyMzlGRTJCNkRGRUNCNjEzRDU3RERGRQotOjEwOEM5MDAwQjI2MzBERjRCRjI1RUQ5RkFBQ0MzOEVGQzU3MkZDOUVFMAotOjEwOENBMDAwQUE4QTkxMzBGRkNCNjVGOTVGRUMzODVGNzc5MjZDMEY0MQotOjEwOENCMDAwRjM5REMyOTg2NTQ0NzRGRUU2MkMxOERGMjVDQjlGNTRDMwotOjEwOENDMDAwQ0Q4NEYxM0YyRTZGQUUzMEMzRjhDN0QyRkVCREFENjg4NAotOjEwOENEMDAwMkM2MzkzRTc5NDNCRkQ1MEVFREJGQzFGNTU0OTgwOUZDRQotOjEwOENFMDAwMkUwNjc0MEFFNTNGNkMzRTRERjM3N0FCMjZERTdGRTgzNwotOjEwOENGMDAwOEYzNEJGQjJDNUExNzFGODVENjE3RjZBQUI4Mjc1QUY3OQotOjEwOEQwMDAwQjZGN0JFODVFNERBQjQzNjY0Q0Y0MDkxQTQ3MDNBQjFDOAotOjEwOEQxMDAwNUI5QUZEQjkwMDNCQ0JBRUYyNDgyRTREQTc5REQzNkJCRAotOjEwOEQyMDAwNUU2NDNDRUFCMTgxRjIxODI4OEZENzk0QjM3OEI5NkJBRQotOjEwOEQzMDAwM0Q1QjEyNEJERTc2QkFCODFFRUU0QThDRkRCRDIyOEQyRAotOjEwOEQ0MDAwQ0IwMzgwMUJFOTkzRDQ4M0NDQkYzMzg2NUUxOTk3RTZBRgotOjEwOEQ1MDAwQTA3RUY2MjdCMjkwREQxNUU1Qjc2QjgxODdBNzAwNUY4RgotOjEwOEQ2MDAwMzIzQjlGQTdFQzY3OTBGRTQ4RTM3MjlGODVBRTc1MjE2QQotOjEwOEQ3MDAwREZDQ0MxMkU2MEU5ODUzRTI1ODQ3NENEOUE5M0MyQTNEMQotOjEwOEQ4MDAwOTA3NjU4QzQzQzBGRjU4NzZBQTJGOTdBNTQ2NTQ5MzU0NAotOjEwOEQ5MDAwRjQ5NzkxQzg4MjlERjBGNEE0MzMyQTQzN0I3RkE3MjNFNAotOjEwOERBMDAwREFERjdCODJFRTJCMEIwM0RCQjFCRkNBQ0NFQzkyRDZCMQotOjEwOERCMDAwODI2ODNGMzBFRjBERjYwOUJBNzk5QkE3QjhGMEZCREM2QgotOjEwOERDMDAwOTI1QjhCMzRGMDJDRTJFQjAwM0FBMDc2MzBDQzMzRDNCQwotOjEwOEREMDAwODEwRkJBN0FDNjhERDgwNEYzRkIwNkU1QUUyN0JBQUU4QQotOjEwOERFMDAwQjI5RUI5MTYwNkY1QjZCODg0M0NGMUYyRjY5RTBBMkU4QwotOjEwOERGMDAwN0ZGQTZGNEQwQTZGNDNGRUI0RkI0QTEwNEZCMkREMEQ5MAotOjEwOEUwMDAwMDJFRTE1RjdDRUY5MTlENjZCRThCMTMwMUJENDVCRDM1RgotOjEwOEUxMDAwNTk5RUM5Q0VBMTE3MUI0RTVGQzZDMjEzMzU2NTczQzREOAotOjEwOEUyMDAwOEE3MkE3RTFGNDM0N0E1RjcxRUY3QjU2RTQ1M0VDQzdBMgotOjEwOEUzMDAwMEJFQjVBOTNFMENGRjQyMURDNUE2M0UzOUZCMTE2OUEwRgotOjEwOEU0MDAwNDdDM0U5MzQxNjlBQTg3RENGRTExNEVEREY0RERGQ0Y5QgotOjEwOEU1MDAwQjdBRTY4N0YyQTBCQTc5RkFCM0YyQjdEMUY4MEJCNTkwNgotOjEwOEU2MDAwQzBERDFBN0I5RTFCMDRGRDIwQkM0RDFBRkE5QTJGRTgyOAotOjEwOEU3MDAwMERBNDlGMUZFNUUxQTE2QjhBQjZBMUJDOEY4RUJCOUU5RQotOjEwOEU4MDAwRkFFRjMyMDMxRUQxMEVFQzQ5RjRBMjVENUM2NkU2RjIwNQotOjEwOEU5MDAwQjNBQ0M3RTUwQzI5NTFGQTkwNzQyMUYxREFFNTZBMkVEQQotOjEwOEVBMDAwQTdGNTU2MkJDRTZEMDU4M0U3NzVCRjlDOTdEMEE3OTk4NAotOjEwOEVCMDAwOEI4M0VBNTJDREZDMjQzRjQwRkY1REEyRkZEMjI5QzQ0MAotOjEwOEVDMDAwM0ZCRkUwRjQwMjdDNzMwM0YyMkZEQTJEQjgwRTVGNjQyQgotOjEwOEVEMDAwRkNEQ0U0QzFGMzNGMERFNDg1NEZDMDIzODdGRjVGMzkxRAotOjEwOEVFMDAwQzJBODA3MjREQzA2QzMzRkY3M0NGOENDQTdFRjY1M0REQQotOjEwOEVGMDAwRkJBQ0I4Q0U4NjM4N0NGQjgwMkI4NURBNjUxRThDQTQ1MwotOjEwOEYwMDAwNzhBMURFMTk2MTc3NzQ3NTRDNENCODBDRjk2MjhFODlDMgotOjEwOEYxMDAwQTEwOEMzNzVBM0JENUEzNjIwNkZBRjdDNzcwNkM4REJBNgotOjEwOEYyMDAwQ0M4MTMyQzg1QjJGRTI2MTQwRkU0NkVDRjY2OEZEMUY0MwotOjEwOEYzMDAwQjlBRTlDQkQwMUU0QjVEQjA2RjgyRjIyM0JENENFMzQ5QwotOjEwOEY0MDAwRkVDNEVFMzQ2RUJGNEQwOUIyOTg3NkNCREZCOTkyNzU5MAotOjEwOEY1MDAwNzJFQ0ZGQUVBRDYwQkY4NUY1OTlEM0I4REU5RkQyMUIzMgotOjEwOEY2MDAwNTIxMDJGOTJBRjhENzJFQTEzQzE4RjFGOEJFN0ZGQkM5NwotOjEwOEY3MDAwOUM1MkNFMjNBN0FBODU5Q0UyRUZGNzgzOTk4RkY1MzIwNgotOjEwOEY4MDAwMzIyMkUzMTVEMDg5Q0JERTlEMzgwQUZEOTlEQkIyNTQzRAotOjEwOEY5MDAwRUY5N0MwNTdGMzE0REZCMDY3QTFERjFBQkJGNzlFNjRFOQotOjEwOEZBMDAwNkY5NDRFNkE5OERERUI0MEI4ODNEMTc0MTZGNUZFOUM0MQotOjEwOEZCMDAwMDQyQUUzMUZEQTI1QTdEQTE1NEU4N0NDOUI1QTMzM0VFNQotOjEwOEZDMDAwQkUxQzkyRjNCODJEQ0I0QUUzMkRCQjZGNTQ2QTUwM0JDNQotOjEwOEZEMDAwM0ZBMTI3QUVCNTQ1OUU2NTg1ODNGOTVDOTY2MUZFQUJFMgotOjEwOEZFMDAwNERBQUU2QkI4M0VCQjNCMUM5RkU2RkQyRDAwRTU1NTg4NAotOjEwOEZGMDAwMkRDREM3NjAyRjM5MDRERjE5RURBNTg3QjE2RjBGRkRBNwotOjEwOTAwMDAwMkY2MjIzM0UzNjkxNzM5QUQ5NjYwQjMzREUyNDg0N0UxOQotOjEwOTAxMDAwNkE2NjA3MTNGQzFBMzEzNTY4RThDMEVFQ0FBMzc5MkNEQQotOjEwOTAyMDAwNUUwODFGMkYwMUE2QjRCRjcxQzk5NzFBM0U3QTA3RTdFMQotOjEwOTAzMDAwNDM3QTIxMzIwOUY5MzRDMUM1NzQ3NkRFNjIzNTkwQTdDRQotOjEwOTA0MDAwQTBERDlBNjlGM0ExOUMwMTNDMTExQ0Y2MjczMDczMDI0NAotOjEwOTA1MDAwOENGQjM2M0MxMTZGOTVFQUFEN0IyRDZFQTQwM0M1RDcxMgotOjEwOTA2MDAwNEFEMERGMkFGQzU2MTY0MTdENzNFREY0MjRCMjVCRDk1OQotOjEwOTA3MDAwOTlEQjQ3NTYwMzNDM0M0OTlDNkVBMTFGQkJFOEM3NEU5OQotOjEwOTA4MDAwNzQyMkU0REVBRkYzQzc2RTQzRkQyNEU1QTdDNDAzM0JCRgotOjEwOTA5MDAwQTM1MjdGRjJGQjdFQTUzQUNGMDlFNUZEOUU4QjRBNUE4QgotOjEwOTBBMDAwMTVCREZEODNGNjUwRDQ3RTRBQkY2RjE2RjBFM0U0QUFFNwotOjEwOTBCMDAwOEU4ODA5NThBODI1RTQ5OTdEMjdENEFGNENFMjZCMUUxMQotOjEwOTBDMDAwRTlFMjdBNzA3RjQxNDg0REMxRkU0NkMxM0FFMEQ1NUI4NgotOjEwOTBEMDAwODlDMUEyNjY0NzE0MUY2MEUzMDQxMTdGMTk1Njc4M0FDQwotOjEwOTBFMDAwMzg3RkUwNzM5RjhCRjNEOTlDNzQ4RTk0MkRFOUJDOUNFMAotOjEwOTBGMDAwOTFDMkVCMUJFOUVENDlGMTdEOTVDMkYxQkJBOTlDQ0I3NwotOjEwOTEwMDAwMDk2M0JERTkyRURFREY2QTdCQTgyQTYzODRENkJFMEEyNgotOjEwOTExMDAwMzBBNDQzMzNFMzc2OTZERjI1RThBNDgyQzNBQkUyREVENgotOjEwOTEyMDAwQzVBOUE4MzdCRkVEOTk5RkNBOEFBMjcyRjQxRTI1RTg4NwotOjEwOTEzMDAwRjQ0MUZEN0IyQzgxOUY1MkJDRTM1RjU0ODZGRTg4MzU1MQotOjEwOTE0MDAwMkRFODc0NDFCREY0QTREOEZFRjI0RDYyMUVFOUU4NEY0QgotOjEwOTE1MDAwNDNCRDlGMDg3RkM3NzJGQTYyRjJCMzE3QkFCODNDNEI5RgotOjEwOTE2MDAwQzlBQTIxNzk4RTMwRjRBMjlGQzJGQTQzNEUwREZFNTI1NQotOjEwOTE3MDAwQTc5ODc0N0U4M0U1NzQzMUI1QkY3MEJCQTEyNDhFRERFMgotOjEwOTE4MDAwNTBBQUIzMUJFNEI4NDZGQkUxRDM3NTU5MzQ3RkQ5RkUyRQotOjEwOTE5MDAwODZBQzhGMkE5OUE2RkU4REFDRjcxRUVDRUZDNjM1QjlDQQotOjEwOTFBMDAwQkEzODUxM0NCQkUzMkUwMTFGQjQxMzQyMzFFNzY1RDVGOQotOjEwOTFCMDAwQkRGRjE0RkNDNDkwNzZGQzIzN0NGQ0U4Qjg0OUMwNjg3MQotOjEwOTFDMDAwRDE3MUZEMkVGRkREMkVFMkE3Q0I5RDg3MkY4NjQ3MDJCMgotOjEwOTFEMDAwQkM1NzQ5REY5MERDMDdCREU0REZFQTIwN0Q1NDg1RjIwRgotOjEwOTFFMDAwNUFGQTQ3QzhGN0NFNTRBNEYxRjIwREFFNDkxQUZEMjgzOQotOjEwOTFGMDAwREExOUU1RDA5RjQ1M0NFM0NGNEU2RUZGQTUxRTk0RjZFRAotOjEwOTIwMDAwNjJBMjU3NTFBMkZBNjZCMEJFMTI3QUM2MjAxN0NGNjc4MwotOjEwOTIxMDAwNUYwM0JEODZCNEZBREZEOEVGNTNBRUVGNkI1NzE2QzZDNwotOjEwOTIyMDAwQTE4RkQxRkYyMzc2NjVEOUU1NDE3NTNDQ0FDRDJBODU0QQotOjEwOTIzMDAwOEQ4MkM3RTQ5OTdBM0RERkVERTJGRTQ3QjcyQjQ5QTc1RgotOjEwOTI0MDAwRTdFNzJFRDZENzhCNjBCRDQ5Rjg0QzFBOTJCRkEyRDU1RQotOjEwOTI1MDAwNDM4QThBRjI4RUY3RDcyOEU4QTFFMEQ4MDc1NjJGQzhBQwotOjEwOTI2MDAwREZGRjEyNzZEMDE3RTlGRUI3OTFBRTM2MjRBNjE0QTMxRAotOjEwOTI3MDAwN0VEOEZBQTc4QTMxNUI2MURFRkRFRjVCN0NEQkIwQkI5OQotOjEwOTI4MDAwNUQ5QzNFQ0ExN0FENjkzNUMzN0I0Qjg3RTJCNDMxOEQxNwotOjEwOTI5MDAwREU1QURCNzlDOTBBNThFRjA3OTJGRUREN0MxRDBERUUyMAotOjEwOTJBMDAwODg3NTI0OEM5QkQzQzBDN0NGRUJEOEFCOTgzNUYyMkRGMwotOjEwOTJCMDAwQUY4RUQ3M0JFNEIyRThGNDVFQUYyODdGMjZGRDBGMTZGMQotOjEwOTJDMDAwNkVBOTJDQzVGQTdFRjMyNjEwN0QzOTFEMEFDNTgzNzM1RAotOjEwOTJEMDAwOUEwMTAwNDAwNzM5M0VERUJGQzMxNzU2OTYxNzQ1RDc5RgotOjEwOTJFMDAwRDk2NkFBMkU0MkJERDA5NjkxRTQ0M0JEMzBENjFEM0MyRQotOjEwOTJGMDAwOENGNERGNzAyODEyNDEzMDREM0VENDYzNDZGQkFFQzI4MQotOjEwOTMwMDAwRURGRjBBREZDQjc1N0E1NTY3MEVDQUQ1QTQ0MzdDN0U4NAotOjEwOTMxMDAwRUQwNjdBMDcwQjU5RDBGOTM2MkU2RjU1RjYwRTQzN0NDMQotOjEwOTMyMDAwQTBFQzgwRjEzMkQ2OEYyMUJEMjRFQjY3Qjg4NDlFQzhCMwotOjEwOTMzMDAwNjBDMTE3QzhBRTYyNkQ4Q0YwQzU2ODFEMTlFQjQ3OTMwQwotOjEwOTM0MDAwN0QyRkYxMTlCNUEzQzY0RTQwM0JBQUYwODE4ODc5MTk0QgotOjEwOTM1MDAwQjREQkZENThFQ0Y4QkM0NUU4MTE1ODA3NEJGNzQ0RDc4RgotOjEwOTM2MDAwMTE4RjJGQTQxRTkzRjUyQzcxRkM2ODQ5RUY0OTU1QjE1QwotOjEwOTM3MDAwRUQ1M0QwMDBGNEJEN0M5MUZCM0E1Qzc3QzMwNjJCQjM3MAotOjEwOTM4MDAwMjk1MUY4NTdCODAzRTkzODlGOUM4RUFEMEFDMjQ2RDJERQotOjEwOTM5MDAwRDcwNkQ3RDM0QTJFQUNFRkY2NUI5ODUzNjVGMUU3REJERgotOjEwOTNBMDAwQjBGNkM1NEI1NjY4RkMyREU4OUZGMEIxRDVDQUVBQjRCQgotOjEwOTNCMDAwRkE1NEZBMTMxN0E3NzNGRDczQTczQjMwMDJDNzZEREM4RAotOjEwOTNDMDAwQjVEOThBRjhCRDY1RkJFNzU2NkRCQzdCRDAzQTg2MDhGNwotOjEwOTNEMDAwMkZBNThFRkIyOTBEQjVGNjMwQUVCMzdDOTE5OUYwNTdEMQotOjEwOTNFMDAwQkZDMTFBNDY3OUQ0QjBCMzMzNjI0MjdCRkE2RUU2NDMwQQotOjEwOTNGMDAwN0U2RkU4RTg3QzJCMDdFMDkyREJFMDlGQTQ3QUEzRkQ3OAotOjEwOTQwMDAwRTUzNjg0MTU5QzRGMDYxMDYxMEZGOTc5MTEyQkVBNjczOAotOjEwOTQxMDAwMjM1REEzM0Q4Qzc2Qzk1QjA5OUNERjRGOTQzQjQyMEFEOAotOjEwOTQyMDAwQzBFRjg0MjVEODgwRjU0RTY0MjdGOTQyMDU1MTc4QkZGNgotOjEwOTQzMDAwREQzOUVCMUQwNTU4M0FGOTA1NUIwNDlGNkRBNjZENTlBMgotOjEwOTQ0MDAwNzZBOEQ3MzZDRUVBNDMzQUFBNzAwNzY3QTUwMzdDNUNCNAotOjEwOTQ1MDAwRTY0MDE3QjY0RjczMjdGQjVBQTBBREQ3QzYyNjkwN0VCRAotOjEwOTQ2MDAwMUUyMjFDMjYxQkU4NjFGMkREOUM0RkZFMjYzRDQ1REFEQwotOjEwOTQ3MDAwN0IxMzUwMEUyRDRENEY5NkY2MTJDOUE3QjcyQzdDMURBRAotOjEwOTQ4MDAwMUIxODlGRUYzRTk3N0YwMUQxQUJEMzQ1RTNFNjM0NDRGMQotOjEwOTQ5MDAwMTRCNEY3OERFMzQ2RTlDOUJGRjg0MkU4MUJFQzNDMkI1NgotOjEwOTRBMDAwQ0FGNTdBMjE2N0NBMTc2RDU3N0VBQkExODM3QTMwNjRGQgotOjEwOTRCMDAwOTA1RTcyNzY2RTU1RDAwRjg0RUYyRDk1NkVBQUNGNkNBQwotOjEwOTRDMDAwMjg2Nzc2RjJGRDg4N0FGODdFOTM0NkFFQzg3NUM0OTAxOAotOjEwOTREMDAwMkZCNzIxN0MxRDg3N0FERUU0RjIyNTQyRjQyN0U3NkI2MwotOjEwOTRFMDAwQzRFNzhGRDJCOTFENzcyNTk4MDVGNERFMUExQUUzODVGMwotOjEwOTRGMDAwRkVERTFBOTE0OEZENDk3RTM3RjJFNzhGMDQ5REU3RDRERQotOjEwOTUwMDAwNkU1NzMwNkVFMDRFRTI3NkEzOUM5RkFDRjc0NUZBOEMyNgotOjEwOTUxMDAwRjUzODlGQzk1NTNEMDQ4N0Q1QjU2NkMyOUI5QzRGQTVCQwotOjEwOTUyMDAwMzUzMDEyRkRBRjc2RDFERkJFODU5RjU5N0JBMUZDRDBDRgotOjEwOTUzMDAwQUYwRTEwM0RBRTZFNTdGQ0U0MTdCNDFGQjBDRUM3RjhBNwotOjEwOTU0MDAwNUNFODk3MkFDNjYzQUZFNjI2MDlEQkYyRDIwMUQyMjM5NAotOjEwOTU1MDAwNTc3N0YxMzhDMUVBQUU0RUYzNzI0Nzk0NEUwQjhFRUQ1OQotOjEwOTU2MDAwQkIxMUU5NkM3NTg3OEQyNTI4ODgzRkJFNUUyMzlEODJERgotOjEwOTU3MDAwN0MyMUJBNjcyMTJCRUQ2NzgxN0MwQzkxM0M2NUMxMDI4RgotOjEwOTU4MDAwRjQ0N0E0RkNERDI3RUM0QkU2RTBFRjlGMTBGMzk2RkREQgotOjEwOTU5MDAwNDZFNTY2MDJEMTdCQzFCMTA5RkJFQzAwQ0ZENTNFQzVFMwotOjEwOTVBMDAwMDdBNjEyRDhEQkJDMUVGNDFGMjFGOUNCRDgwOEY0Q0JEOAotOjEwOTVCMDAwNjRGRjQ2RjhGRDVBQzhENTE4Nzg3RTNFM0Q4NjFFOTE1OAotOjEwOTVDMDAwN0FCNUUwRjExOTBDOUYxMjdGNjYwMTc3RDlFRjlFNzQ4RQotOjEwOTVEMDAwQkU5RkI1MjdERDRDRkQ2RjI4RTdGMUVCMEQxNkFFM0ZDMgotOjEwOTVFMDAwMzZCNEQ4QzNDOEQ3NkZBNzVERjk4RTUyMEM3MDcyNTlDNAotOjEwOTVGMDAwMjNGOERDNkY1QUQ2ODBERkY3RTdGMDc5QjQ5OUQ2OEY3RAotOjEwOTYwMDAwNjlFNkZBRUJGNTc0QzI1RjBBRTNGMjg5Q0JBMzg3NUVFMQotOjEwOTYxMDAwRTRGMkE0MjFFNDIwM0ZCMTIxNThCMzgyRjYxRkRDMDkxMwotOjEwOTYyMDAwM0VCNEY3NTlGMDRERUJGQ0U0MjgzRDE4RjFFQjdENjFCOQotOjEwOTYzMDAwQUZENTBCREZBRkVFRTA3QzEwODU1QjU4NDdCNzIwRTc3NgotOjEwOTY0MDAwMDhFRkZCNUM3MjNGMjI1ODgwNzAwNUZGQkQwNUUzMENGQwotOjEwOTY1MDAwRDI3RjRGNTkxQzA4MjU3QjA3RjM2QkJBRjBERjI3MDkyRgotOjEwOTY2MDAwRkZERDMyQzVGRTE3RjVERkVCRDdGRTUzMzY5NjU3NjVBMwotOjEwOTY3MDAwQkQ0QjRGQzkyRkUwMjdFQUY4RUE4NEYwREIwRTA4QkNBNwotOjEwOTY4MDAwRkY0MUQwNEI3RDY5MDdGMTQzRkQ5N0NEQzQ0NzhFMkEzQQotOjEwOTY5MDAwMkU0RjFDODdGNDcyOTBCMTFGOEJGNTNGNDBGRDU0MjY2RQotOjEwOTZBMDAwNzU1Q0E5QTIzRkZDRjc4QUIzOTVDNTlGRjdDRDRBRjMzNQotOjEwOTZCMDAwM0Y0RjQ1QkM3NEFBQjQyRkM1Q0U4MDU1NUYwNjcwNEQ5MAotOjEwOTZDMDAwMTAzMDEwRjUyQzZFMUVGNzNFRjExNDIwMDJGOUQyREM5QQotOjEwOTZEMDAwNkMzRDk3RkQ3QkJFN0U1OUU0MjMwNUYxNUQyRjYwN0RENwotOjEwOTZFMDAwNjI2N0M1RDRERjYxM0NGMUE5NTRERjI4NThGQUYxOURDNwotOjEwOTZGMDAwRjNGRUU2NzdEMEZFQzRGNkU5M0VENEQzRUVENjAwRDEzMQotOjEwOTcwMDAwNEZCRjI3QzE4NzcxNDNCNzBBOTYyREQwNDM0QkM3MUI2NAotOjEwOTcxMDAwMjk5N0UxQkVEODMzOTc0QzQwQjk5OUU3RTY3Qzc5RUNCQwotOjEwOTcyMDAwNDU3NTJEQzI2N0ZEM0YzQzNGMERCRkQ3ODc5NTc0QjQ4QgotOjEwOTczMDAwMUI0RjNDRjVGNzdGNDZCRDU4QjdCRDA5M0QwREQ2RkEyNgotOjEwOTc0MDAwQ0NFQjY0ODc5QkMyNUJGOUZCQTc1MkM5QkUzQ0ZBQzQ1MQotOjEwOTc1MDAwRTY2OTA4RjdENjhFNTZGQTdFRUM4OUFENTRERUY3MEYyRgotOjEwOTc2MDAwQ0ZFRkY5NEZCNDM3MDIyOTNFQUM3N0VDQzVDRDNGRkFDNQotOjEwOTc3MDAwNEZBNEYzOUExNDFGQUVBMzIxNjhFNkZCQjY5MkJFOERFOAotOjEwOTc4MDAwNzJBQjczMkZGMUE5QTQ5N0FCNTFFRjIyOUM2QUI5RkM3RAotOjEwOTc5MDAwOTFGNEZDODVEODU3NUE1NkUxNjg0Mzc5RjZDNUE2RTQ5QQotOjEwOTdBMDAwQkE1OEYxNDRCRjU4MkZDNjVDNDg4RUQ1MkExNDRGNkI2NwotOjEwOTdCMDAwMDNBQUMxQjg0NjVCMjI5QjgyQ0ZBNEEyODgzNTE3QzZGNAotOjEwOTdDMDAwNTlCOEI4NzMxQUQ5M0RBMUNGNTc2MkZENzlCQjEyRDhFOQotOjEwOTdEMDAwMjY4QUJGNjFGMDE2RUM3RjIyNzVDNkM2ODMxODNDMEM0MgotOjEwOTdFMDAwN0UzMkY0QkVGRDJDRDhENzFGNUIzMDk2NDNGREU5RUNFQQotOjEwOTdGMDAwRkY3OTZERUZGRTExRTU2ODhEQkQ3N0FGQzcxQjdEREY4QgotOjEwOTgwMDAwMjZFMjM0NTA5RkY0NEVEOTlBRDhGMUQwMkFCNzQzRDBFQgotOjEwOTgxMDAwMkRENzlCMzk1REQ1Nzk1RTkyMTMzNkRGMjg4RDVEM0E2MQotOjEwOTgyMDAwRUM2MEYzMjYxMDQzMkNBN0FFRTc0QTVDQzc1NTYzOTY1RAotOjEwOTgzMDAwNEUyNEJBQzAzODFGRUE5RjkwODNGQTVGOEQ3MTRBRTBDOAotOjEwOTg0MDAwQjM0NTZFQ0U0RjE5NEVFNkJFMTRDNkFGMzQzM0I3MDNFMAotOjEwOTg1MDAwOUY4QzdENjQyMTM5QjI4M0ZBMDVGQjgzRUMyQUVGRUIwMAotOjEwOTg2MDAwMEI3N0EwM0RCMkM1MTJDQzlFODRGREI0MDlCREI1OUQ1OQotOjEwOTg3MDAwQ0YxQkRBM0I3MUJGMTRGQTczNUUzQTgxRkFFOUIxQjhEMwotOjEwOTg4MDAwQTg3RDg4Qjc5RkI1QkQ0NTg5Q0UxNzI4MzUxRkY1MTYyOQotOjEwOTg5MDAwRjY1N0VBNDAzRDEzQUEyNUZDNzhBREI0QUU2MzU4MjVDRgotOjEwOThBMDAwOUJENjVEN0NDM0Y4MjhGRjFBRTMzQjI4Q0Y3MDFGRjhENgotOjEwOThCMDAwNEU3N0Y5NkRFRTQ5RDFBNzhDRkIxOEUxRjkzMjdFODcxRQotOjEwOThDMDAwNzU3RkVCRjZEMzkzM0Q5NUFFRDMyQkYxRUM5NTdEMEJFNQotOjEwOThEMDAwNEY3MkZERkJFQUU3MjQ2RjFBOTE4RTcxRkNFMDk3M0ExNAotOjEwOThFMDAwRkRCQjVDRDJGMTJCOUYxMzFEMkZERkM1RjU2RkUzQUVERgotOjEwOThGMDAwMTIyQkQyRURGMTc1N0VGNjVCMzA0MDFCQzUzRUVCMTZBOAotOjEwOTkwMDAwQTU3NzI1QzU3OTVFNDk3MDYyRkNFRUE0RDAzN0Y1MEZDNgotOjEwOTkxMDAwN0M3RTE4Rjc0NzQ3RUNDQTI2QkZGRUU0MkIwOUI1RDg3MgotOjEwOTkyMDAwQ0Y3RTkzODlFMEI5N0ZEQkM1NUI1QjE1RUQzQ0I5M0YyQQotOjEwOTkzMDAwMDA3NjMwOTE2QTIzRDhBOURDMEU1RUIxMTlGREIzRDU0QgotOjEwOTk0MDAwNzVDQzg3RkNERjY4QTA5RkM2NUQwNzg4NUVBNDFENUNBMAotOjEwOTk1MDAwRjBGOERDMTVEQ0ZFNENGMDI1QTBGRjM2OTNEQkEzMEMwMQotOjEwOTk2MDAwRUM1MUFDOUYzNjMzREM2MjI1RkEyQTI5NDNGQURBQjc4OAotOjEwOTk3MDAwNzBDRjQ2RDRFMzhEMzM5OTEzRkJERjMyQ0NGRjRBMkVGMAotOjEwOTk4MDAwQUQ0NzYxOThDRkIyQzVEMjNFQzMwQ0VEQjc1NDdBOURCNgotOjEwOTk5MDAwMDA0OTgwREI3NkIyN0JEOTE4QUJEMDczMkJDODVFNkVFMgotOjEwOTlBMDAwQ0NCQURFNDc3QzY2OTQwN0FGQjQ5MERERDVFODREQTQxMQotOjEwOTlCMDAwRjk1Q0JENEJCOThEREIyMzBFQzZFN0FGMTA3RDVFMUQ5NAotOjEwOTlDMDAwQkUyQzhDRkJDQUJGMTdGMDkzNzAzQzY5RTlCOTExRTE1QQotOjEwOTlEMDAwNzFGMjI1MjA0NEY4N0VGNTRDNEVBRjY5MzMzQjQ4OEUzQQotOjEwOTlFMDAwQkNGRENBMkNEMkUzOTIyRTkzNUZCNjkxM0U3Nzk5OUQyRgotOjEwOTlGMDAwOEE4RkY0REEzQzlCMTZBRkVEMTZBRTk3RDI4NDlFMjk3RgotOjEwOUEwMDAwN0M4MEUzMzcyMkY4MjkyMkY0NDBDNDZERDVDNzVCOUNFMwotOjEwOUExMDAwQTE2MkQ0QkJCRjE3RjgyNzMxODJGMjVEQzg5M0Q1MkI2MgotOjEwOUEyMDAwMjJDNDRGMEQzQjc5N0Y2RTlCQkZFNDc2MERGREJBMkJCMAotOjEwOUEzMDAwQjg1RTk0NzE3RkRDMDdBODhFMjEyRjdFRTdFNkZBQjEyRAotOjEwOUE0MDAwRTBGMTY1OUJEMTVFQkUwQUYwOEUyQTI1Njc4QzkwQTM1QgotOjEwOUE1MDAwNDAxNzA4Qjc5Q0JBMDBEMUMxNTVFRTlCN0Q2QTAxRUQ1NQotOjEwOUE2MDAwMUY5MDlGRDhERjYyNjVCMUUyM0M0Nzg1MUNGNUE0MDdEMwotOjEwOUE3MDAwNEEzMURFRUNDOTRDMjYzQkM3QTM5NjlCMTJCMDVEODlFOAotOjEwOUE4MDAwRTJEQkU2QTVGRDREQjJGM0ZBM0REOUJFNkQzQTdFMEY5RAotOjEwOUE5MDAwOTQ5QUEwREU5MThDNjQ4RUU3RjBBRkNENzNDNzIzMUYzQwotOjEwOUFBMDAwN0FBNTlGQUVCM0ZCMDZGQkRCREM2RTlDRDMxRTJBNDY3OQotOjEwOUFCMDAwM0Y0NEVFNUY0ODM4ODQ1QjEyNkJCNUYyQjM0RkMwMjE3MAotOjEwOUFDMDAwM0M5NkM3RjNDMUJFNzc1MEZDREEwOUUzQTA1RkJGRUQ1NwotOjEwOUFEMDAwQjIyN0I4NUZERjRBRTMxRjc0RjM3ODQ2MjVBQzBGRUQ3OQotOjEwOUFFMDAwMzY0RjYxNjAwREQ3QTdDOUJFNThGMEI4NTNFMDc5REY5MwotOjEwOUFGMDAwQzIxQjRCRDBBRjZDQUM3MUY4OTBERjFFN0E1NTU5NDY0MwotOjEwOUIwMDAwRjQ4Q0MxNDFGNEI3ODMyQjA4MEYwQ0YwODBGQ0MwODJBOQotOjEwOUIxMDAwREMyRjZENkMwRTg0NjNEMzdCMzVGMTVGMjNGMjlGNDJBMwotOjEwOUIyMDAwRjQ0RUYxNzZBMEY3MzBBNzc3QUVGRkE0REY4RkYyQjE0NQotOjEwOUIzMDAwM0FDNjdFQTg5NDJGOERENkRFRDE0OEM3OTIxRjFBQTdBOQotOjEwOUI0MDAwRjU4RTQ2QjgwRDU1OUU5Q0I0MDBGRjIzRkYwMDFDOTA3NwotOjEwOUI1MDAwN0YyNEJGMjRFRkU2N0NCMkE5QzU1QjhFREYzNzU1MzI4OAotOjEwOUI2MDAwNjdBQjQ2MUYxOUZEMjU5QzI3RkE5RDUyQUU4Rjc1MDdERQotOjEwOUI3MDAwMEEzRDE4MDczMDQ1MzY2MjFFODU5NEMzOERCQkVGMUIyNgotOjEwOUI4MDAwMUQyQkNGNERDQTYxQkI5OUNCMzc3QjM4MjlEQ0FBQTFFRAotOjEwOUI5MDAwMkZEQ0RCNEI5RTQwNEZDQURCNDk1QTFCM0IyRTUyRTY2MwotOjEwOUJBMDAwNzE4ODc4RkREMEYyMjIzMjUwOTdBM0JDRDk5NjE0NDYyMgotOjEwOUJCMDAwNzkyNUUzNDRDNjdFQzc3ODE0NUQzQzQ2RkEyREI4QkZDQwotOjEwOUJDMDAwODBGNUU3N0EzOEJENTQ3QUI4OUNCODVFM0NFNUZDMjU1MAotOjEwOUJEMDAwRkQ3QjREQzFDRjMxOUYyODlFRkU5MkVERkU1MjcxMkIzMQotOjEwOUJFMDAwMzk4RUQ0QTM0NkZDQ0JGRDExNUM0Rjc1NTFGQzdBRUQ0OAotOjEwOUJGMDAwN0JCOTdDMzJEMkUzNzJDMTI3NUU1QzJCRDQ3QjRFRUMwNgotOjEwOUMwMDAwNjcwREM2MkZFRjg3RDU5QTc1Rjk2RjZEQTZDRUJBNTgzNgotOjEwOUMxMDAwRjEyRkI5QkZDMTFFMzIwRjI5QkY2RUVGM0E5RTQ3RjUzMwotOjEwOUMyMDAwOUNDOEE3NjU4QkNEQkE3QzJBODdDRkRCODJGMUQzMTk3QwotOjEwOUMzMDAwRjY4MjEyOTVDNkU1NzFBQ0U0NjlFQzZCRDRDM0M1QkI4MgotOjEwOUM0MDAwREFDNzYwOUU5MjI3QTBERjFGQzlBQzRERDRFRDNGNjRGOAotOjEwOUM1MDAwMDc1REJBNzI2RTVEOEVBRUZFQjBFNjExQkFFRkMzRDc4NQotOjEwOUM2MDAwOEVEMzdEMkYwODRERDA5NTBCREIyRUQ1RDUxRkQ1M0UzRAotOjEwOUM3MDAwNDM5RjhGRkJDODU1QkFGQTYzQzM3Mzc1RTU0RDJEMUQxRAotOjEwOUM4MDAwQjU4ODk3OEI5RkJBNEVENzZFODZEOTY5MkUwMUI4OEU0QwotOjEwOUM5MDAwRUY1OEE2Q0YxMzMzQzAzM0Y1Q0Y2QTRDM0E3Q0QyNTM3QQotOjEwOUNBMDAwNDA3ODlENjFENkU3MEI1RkIyNEIwRjBGNEM4QkMzRkUyNAotOjEwOUNCMDAwOEE5OUU4NkZEQTkxMDlFN0NBNjMyRDY2RTY2RjdBNjVEQgotOjEwOUNDMDAwRkI4MkMxRjRDMEVDQkRCRTQwMEMzRjUzRDJCOTJDMUI4QgotOjEwOUNEMDAwRjdCMUE0RkNCODUwRkE4QjM3NEY0OTdGRjFCRUM3ODM2OAotOjEwOUNFMDAwREJCQjFFQjkwRkMzRTE2MjE5ODA0QkFERUY1QzcwQjFGNQotOjEwOUNGMDAwOUMwRjJFMENFMDkyRkNGREUxNjJFQzZGN0Q1MjIzRTU5RgotOjEwOUQwMDAwMDM3Rjg0MDU4RDdEREMyQkY4NDg5NjE3ODQ1MkI5MUU5RAotOjEwOUQxMDAwMEFDQzNCOEYxRENERTNDMDQxMUJERjlGMzQ3RUI3Njc2QwotOjEwOUQyMDAwNzBCOTM2MUFFNjQwRjAxOTIyNUY3RjI2RjA3MDI4MUVCRgotOjEwOUQzMDAwNUZBRkZEN0E3RjI2Q0FFRjJBNDY3RUIzQjNCOUU1NkJFMwotOjEwOUQ0MDAwRDQ1QjRCQ0MxMTg2RjRGRjkwNThDRjE2OTExN0ZBQzgwQwotOjEwOUQ1MDAwM0EyN0Y1RjNBOEQ4N0Y3QzZDOUQ5N0RFM0ZCRTZFMEM0QQotOjEwOUQ2MDAwM0RDM0VCN0NGNDdFREJCQTI5RjREQzBFRjYxQzNFOUY4RgotOjEwOUQ3MDAwNUM1NzQ1Q0ZBN0Q2MDVBOERFRDNFQjZBRTlCOTczNUQ3QQotOjEwOUQ4MDAwOTBDRjZCMTBCRTU4MTlEOTM5ODFGNDk4RjFEMkE1MjEyMgotOjEwOUQ5MDAwNzU0ODc4NjI2QTVFNEM3RDE5QjcxRjc1RjEzOUYzQzg1MgotOjEwOURBMDAwRDcxRTVBMzRGQjREMERGRjY2NjUyNEJCMEY2MzBFRTNDRgotOjEwOURCMDAwNjQzNjE5RjczM0NGRDdGRUJCNzVCNUIzREYxQzM1NzRFNgotOjEwOURDMDAwM0U5MkY0QzRDRUE0OEY4RUM1RDc0MTkxM0ZGOUJCODc5NAotOjEwOUREMDAwQ0Y2RTBBMTVDNTg3NTc5NENFNjJDM0E5QzY3RTMyMDdENwotOjEwOURFMDAwOURGNTYyQjQxOTM0RUQwRjFBRjhCODI2OTgxQUQzNkU5RgotOjEwOURGMDAwQTgxMUY0NTk2QkUzRkJFRjhCMENGQ0ZEOTJGOEZFNTJCQgotOjEwOUUwMDAwMDZENzc3OUZDNDkxMzM1NzY3OThBNDNGNkZBMUZEQzBEMQotOjEwOUUxMDAwNDE3Q0Y3OTMyQjYyQzE3NzdGODY1N0M3Qzc4QjgyMDYzOQotOjEwOUUyMDAwQkMxQUZBRjlDNEQyM0VDQzE3ODNDRkNFRDc4RjVDOUYzMQotOjEwOUUzMDAwQjFEREMzMTk1QzZFQkRGOEZGMjk3RjdFNzI1MzMyRjkyNAotOjEwOUU0MDAwMEYwODM3OEY2NkZEOUZEQzk0NTQxQjJCMkVGMzVBMDZBOAotOjEwOUU1MDAwREYwNzA1RUI5QzE1QjhDOEQ0MEY1OUQxNTYxQ0MzQkNGRAotOjEwOUU2MDAwN0M5Rjc3QTQxM0UzNDMzMjBGMjAzRUJEOUEyOThFNDQ5MgotOjEwOUU3MDAwMzA1NDA3QzMxNUYwRTFCNTE2NDJGRkU2ODE3MTIyNjY0MgotOjEwOUU4MDAwMUNDNzY3OEFFQTU5Q0NBOTYxOUE3MzFFRUE2MDdBODA3NgotOjEwOUU5MDAwRjYyMTJCRTVFRkY0RTZEMEJFRkYwNUQyMTM1MzFGMUJDRQotOjEwOUVBMDAwNzVBRTdEQkE0MUVEMkY1MENFRUNGODgxRTU4Q0U0NzNCMAotOjEwOUVCMDAwNzZFNkMxNTFCMUY0NjQyRDhFN0QyOUFDNjNDQkQ0RkIyMQotOjEwOUVDMDAwNDlDRTlDQTdERjBCODU1RkFEREE0QkZCRDY0Mzg2REYxRgotOjEwOUVEMDAwMkVGNzkwRTI1MjZCRUQyOUM1MENGQ0JBRUYxMkY4MzM2NQotOjEwOUVFMDAwMzQ4M0YxRjM1ODlGMjU4NEQxQ0UzRjIwRTYwOThFRkZCRAotOjEwOUVGMDAwMjVEQ0FGNkU5RThDQ0Y3RkNFMEE3Qzk4MDFFRDk3NTkwMgotOjEwOUYwMDAwQjk5RjM4M0VDM0ZGMTE5NjEzQzUzRUIwMzVEM0JBMTE4MQotOjEwOUYxMDAwOUZDQ0M5RDc3MTg5NThDNzQ2OTMzNzFGRDdGMUE1RTI5RgotOjEwOUYyMDAwMUI4QjdFOEFEMzE0RjZFMTMzODU0NUM2RjNCQ0JCNzAyOAotOjEwOUYzMDAwMTBGREIzRjQ4QjEzQkRFOERGMjY4RTY2QUM4N0UyRTEzQgotOjEwOUY0MDAwQkUwNDhDOUI1OTkzRkFGRjcxMjRGMkZCRUIyNjhDMzBGNAotOjEwOUY1MDAwQjJFNzlEN0NCRUNGM0Y5MjRCRkIyQUU4MDFBMTdDMjg1MwotOjEwOUY2MDAwQzZGNzMwRjU0RDY4ODc0M0ZCNkI1OUYwMThDRUVGQTg2NAotOjEwOUY3MDAwRDMxRTMyQzFCQzhBNjc3RkUxQzI3Q0E4RTdCQjY3RDAzMQotOjEwOUY4MDAwM0U0MkU0MjkzNTY0QzU3MzBCM0QyN0ZFRUU2QUU4RUZENwotOjEwOUY5MDAwOTIxRTBCQzU5QjJGNjEyQUM5RjM3QTMzN0IwMEY5MjZFOQotOjEwOUZBMDAwMUUzQzhGRkY3NUVDRkNBRTJCMzJCOURDOTM3OTVCQzY5RgotOjEwOUZCMDAwRUY3OUUyRkJGMTM4NzlDNDhFNENBRTE3NjQ3RThDNDVBNAotOjEwOUZDMDAwRTZDNzc4RkNFN0NDOEZCMTE4RjI2MzJDRTYwMEMzN0RCRQotOjEwOUZEMDAwNjBDQjQwN0VDQzYyNDZGOTMxRDA4RjM2M0ZFNkY4OENCQwotOjEwOUZFMDAwRDhGMzcwOEI3OTU4NEUyN0M1RTkzNzg1REUxRjFGNzE2RQotOjEwOUZGMDAwRUU3NTVBNEUyN0U4RjJBQ0EzRUQxREY0M0U1RTdFQ0UyMAotOjEwQTAwMDAwNzgzMUZFRjEzOEY5NDk2MzA3RkFDRjY2QTE3NDZEM0JFOAotOjEwQTAxMDAwMkY5RkY3QzAzODc5RjRERDYyQzhGMzg5N0VFN0Y5M0RGOAotOjEwQTAyMDAwMUJEMjM4OURFQ0NENzJCQTk3NDJENzRCNTlBRjA1RTk5OAotOjEwQTAzMDAwNzQ4OUMzNkRDMUY4NTE4MEY5M0FFOURDOEVEOUQyREY1OQotOjEwQTA0MDAwMkJGOTZFMDRENjMzN0Y4MTc2QjYwOTI0MkREQUQ5NEJFRAotOjEwQTA1MDAwRDY1QUJFRThENUM4QTk2QUJGQkVDQ0IwQkU0NkVFNkUyMQotOjEwQTA2MDAwQ0E2MjM0REZDNDcxNjMyOEFGRUYxNEYzQTYzQUNGMjE3QwotOjEwQTA3MDAwMzcxN0RCNTVCQjU5QjNERTQzNzFFQzg2NUIwNUZDMEUyRAotOjEwQTA4MDAwNjVDNzg2REY3NTk5RENFRTg4NzcxRUUyRDZDQzE0RERENQotOjEwQTA5MDAwMzlCRERCOURFNzk2OTcwOERGNjBCQUI2N0YyMzFFRENFQgotOjEwQTBBMDAwRjRGRDdDNzBGNkUwRTYxQUM2RDFDQTE1OUVCRkZGMTcxNAotOjEwQTBCMDAwODc3NzlBMzg1N0M1Q0YwNTU4MEM3OUU4OUJCMkI4RkMxQQotOjEwQTBDMDAwOEJDRTlCRTdBMTdGRTQwQ0RDOUU4OTcyRDFFQzFEQURBOQotOjEwQTBEMDAwM0QwN0QwNjVGNjI3NEQ4MEU3MjEyMTc3OEM3MEQ5OUQwQgotOjEwQTBFMDAwQzlFRDM3RTNCQUJCNDQzRTdEQTJDQTlBM0IzNUYwMzc4RgotOjEwQTBGMDAwQUVGNzM5NDFFN0IyRkUwNjBCREZCRjgyQkY4MDFERjAyRAotOjEwQTEwMDAwNzIwM0UzNzJFRkUxQ0MxMTIyMkYzQ0NEOENGMjcwMzE1RgotOjEwQTExMDAwRUY4MkRERTA3QzhCRjY5MzI0OUMwN0MxNEZDMEREMDgwNQotOjEwQTEyMDAwQzcwMEYzREU4ODc5REJFNzgzNjc0Nzk2RkY2MTg0Q0I1RQotOjEwQTEzMDAwRDIwMzg5NTY5NEZGMzdEQUZCRjdBMzhGREFEQjYzRkE5MQotOjEwQTE0MDAwNzgyNDNDM0Y3NzhDM0NCQzlERTFGRURCOTg5N0Y3QzFCRgotOjEwQTE1MDAwMzM2NThBOEZFNzUxQjA5OTY0RUYyOEExNUNGNUVDQzVBRgotOjEwQTE2MDAwNDNCNzc3MzZBNjA0QzcyMDdGN0MyOUYyQUVBNTNFREEzNgotOjEwQTE3MDAwOTg3MzZDMzRFNkNGN0I1REU1QUJCMjNDMTQ3N0Y3QTcwMAotOjEwQTE4MDAwMjMxREJENjZFMzc0RjQwOEY0MDRFNUE2M0Q2M0I3QTI5RAotOjEwQTE5MDAwOUU3OTMwMkI1ODg3RjU2NDFFMUZGM0Y3OEZDNjNDODREOQotOjEwQTFBMDAwMEI4NTEzRkM1OTkwOEVDRTA3QTcyNzMyMTlFMUU3NTA5MwotOjEwQTFCMDAwNEE2QzNBRjk0RDFDM0EzMUYyMDc5RDJGMkJGREUxRjgxQwotOjEwQTFDMDAwNDNDMjUzRUU1QkM4RjlENTY1NzEzQTk0NEYwOTM3NjNDMgotOjEwQTFEMDAwRkU1MDVEOTY0OUQ0RTNGOTg4MEY2NjA1MDhDRTdEQzMyRAotOjEwQTFFMDAwQkUzRTlDMDA3MzNGNjRDOEY3OTJDRjkzNDIxRTlENkZBMgotOjEwQTFGMDAwRkQxMkRFM0Y5NDFDM0U5NDE4N0I3RUE2QUNBMUUxRTdFNQotOjEwQTIwMDAwODc5QTVGQkQ5QzVGNzFFQ0Y5NjU2NjBEMEQ3RTAxRDY4NgotOjEwQTIxMDAwRkY1OURBMEZBMEM3MDBDRkY1ODg2N0I2QTE5RkU0RTMyNgotOjEwQTIyMDAwMjE1N0VDNzk5NjBENzk5RTQxQ0IwRkExNkYyNTdEQjMxNwotOjEwQTIzMDAwRDBEMjNBREFBRkNGNEE4Q0I5NUZCRjAwRkMyN0Y0N0ZBNwotOjEwQTI0MDAwOENGQkY2NzI3RjFFRTQwN0FEQjdDNkRFN0Y2MzNBRTI5MQotOjEwQTI1MDAwN0RBNjU4NzcwNjhCQTRFMTdFRTYxRTFCQzVGRjhERUIxRAotOjEwQTI2MDAwQkY0MkQwMTFDMEFCODJFMDM1QTc5RkUyMTg4NzQ2QzczNgotOjEwQTI3MDAwOTYwQjE1QzZGQTZEN0M5Qzc4RTcwQkFFQ0U1Mjg2NzRCMQotOjEwQTI4MDAwQkU4MDk1MDYyOUZFNTc2RTc3NDQ1NEMwQzM2RDAyMUZFOQotOjEwQTI5MDAwRDZEQzU1M0VCNDBGQ0JCM0RFM0I4OEVCMDRGODlGMThGOQotOjEwQTJBMDAwODBBNzI2OUZFRkQ4QkE3NzlDMjMyREYxRTU3NkJERkFEQgotOjEwQTJCMDAwNDI1OTczOENGNTA0M0RDMTFCQjMzNDdFNTBGRDUzRUZGRQotOjEwQTJDMDAwM0E0NzZBRjAzNTlFRjU5QUY4RjlFODdFOTNDRTJGQ0U5QwotOjEwQTJEMDAwNjQxN0U0MTc1NzYzOUY5ODhGRTAwQTkwM0U0MEZEODAxMwotOjEwQTJFMDAwN0E2N0UzRUVBOTI1ODg0Q0I0MzMzMDlGQTczRjM5OTFCNAotOjEwQTJGMDAwRTQ2ODZCQ0VBNTYzQkMxQTc4ODZCMkE0N0RBOUM2QjEwQQotOjEwQTMwMDAwMUJGRjdCRjlGRjUxQkI0OUQxRDlBRkQxRkVDREY0NUUyNAotOjEwQTMxMDAwRTJBN0RDRjE4RjMxRjExMUY0RjhFRjIxM0RFNkYyNkZBNQotOjEwQTMyMDAwQzRBNzExN0VBMTdCMkY0RkEzRjMwNTA4QkZFOUQxRkU3RgotOjEwQTMzMDAwMDZGMDFGMDdDRjFEMUU3RjNCRjZENzIwQ0VEMTI4MzI1NwotOjEwQTM0MDAwOEY2RjIwNUU2MTc2MUVCNjQ3RTEzRDU0QkMyNDhBNzg0QgotOjEwQTM1MDAwMUFEODBEOEYyMTFENTg2RDgyMUY5OTgzQ0U4NzRCQkI1NAotOjEwQTM2MDAwODUxOUVDMUIzNjg2RkJCNzM3NjRCREY3NDc4Q0Y3NkM1NQotOjEwQTM3MDAwNENFMTJDQkJGMTQ3MDlFNDA3MkU1MTlDNTY1QzM3RDhDMQotOjEwQTM4MDAwMUY5RkZFMUNFQTA3NTlFNEQzQkJDODNGOTQ3NjQ2OTI1MAotOjEwQTM5MDAwN0EzNjY5RThGMzk0RkVGMkY5RjJBOUY3QTEzRDA2RjNFMwotOjEwQTNBMDAwOTk2MTcyRDBGRUU2M0U1ODVGMzZDODhEMTk1NkZFMkM3NAotOjEwQTNCMDAwOUYwNTU0MDVGRENENTBGM0JBN0I2MTVFREZCMjMzODk1MgotOjEwQTNDMDAwNTdDMEYzQTc4Q0MzNjFDRDgxREZCOUQwMUY5RDYxQjZBMwotOjEwQTNEMDAwMUNEM0NBMkQ2M0JDRTM4REFDNjQzN0UxNTFDNDNCQkVEMgotOjEwQTNFMDAwNjU3MzdFN0QzMUMyRTU3MjE3QzFBNUY4OTU5OTk5REEzQQotOjEwQTNGMDAwNzhDQjQwQkM0M0FDNjM1RTY4Mjk5N0E3MDYzOTI3RTU1NAotOjEwQTQwMDAwOTlDOUNFRUYxMTYxN0VFNjc1NjY1MERDODhDMzNEQTQyNAotOjEwQTQxMDAwMzAzMzk0QUY5MDY1NzQ1MkEwN0NCOTQwOTI4MkVENjE2NAotOjEwQTQyMDAwREQ1Nzg4Mjc1QjE2Q0M0MjM5ODM2OTNDMzgxRTc4N0YxQwotOjEwQTQzMDAwNTlGODZDOURFQUYzRTI3M0JBMTIzMEYzNzk4NDc5REU0RAotOjEwQTQ0MDAwMjE2QkNFQzNGQTI2N0JBRkNBQ0ZFN0MxMEMzMkIwQkRCOQotOjEwQTQ1MDAwMUM4Rjk3OTM0NTc5NDNDREE5MUI2RkYyMEU4RTYzMzAwNQotOjEwQTQ2MDAwNDczMkQ5QkQ1NjMxQUZBMzRFNDdDODA0RUY2RDhFQzhGMQotOjEwQTQ3MDAwNTFDQTRGMTU0RjYzQkNFMzNCNTMyODg0RjlEOTc3QUFERgotOjEwQTQ4MDAwNjE5QTZGMTI4QjQ0N0EzMDNFNjEwNzEwOTgyODhFRjBFMwotOjEwQTQ5MDAwMDdFNDAzRjA2RTFBNzE5RTA5Q0U1MzkxQkIxOEU2Mzk5QQotOjEwQTRBMDAwRkExNTJDQTcxQkY0OTFDN0IxODZGMjlFM0QwMUIzNDE2QQotOjEwQTRCMDAwMEYwNTE1RTQ5QkNDNUFFMzdCQkQ3RUIyQjM0Mzc0MUVGQgotOjEwQTRDMDAwNDg4OTA0QjJDRUE2OUYzRjVFNjM4Q0QzNTg2NjcwMTQ1MQotOjEwQTREMDAwRjdERkMyRURERThGMTM3OTNCNDkxN0U5RDk1Q0ZGMzYxMAotOjEwQTRFMDAwQkFBQzhDRjI1RDMyRUM3NkI0REI0RjI2MUZDMTIzOTdGOQotOjEwQTRGMDAwQTgzN0RBNTA2RkQ4MkQ3RTgyODdENDFGQUJCQjZFNjUyQwotOjEwQTUwMDAwODg5RkM2NURENTBDRTVFODZGMTRCRUZGMTlCQTQxQTE1RQotOjEwQTUxMDAwM0MwNTc5NkY0MzZEMTE3QjFGNUFCMkE2RUMxMTM0Q0UwNgotOjEwQTUyMDAwRkM3NzgyMzczNDQwQjlFNjNEMzYzRTAyRjU0QUE2MDc0RAotOjEwQTUzMDAwMkFGMTdFOTZENkYxQ0NCNzFFQ0FBRDA5QzE2NzVGQzJCQgotOjEwQTU0MDAwRjUxQzUwQTk5RjI2NzEyRTk2MzE2N0ZENEVFODdGRUJEMgotOjEwQTU1MDAwNzVDMzdDOUI3MDQ5MTVGRDFCMzEwRkE4RkYzRUU2QzRGNwotOjEwQTU2MDAwQkM5MTQxNzQ3QTA2RDYwN0Y4N0YwMkNCMzBFRkE2MTU2RQotOjEwQTU3MDAwQzE1RkRDMDFGNUIzREY2MzNFQUEyM0JFQTMyRjgyNzg1RgotOjEwQTU4MDAwNTMwNDNERTBGQkU5RjBCRTQ5RDA0RDYxQjdDMkY3RUY5RgotOjEwQTU5MDAwREQzNkNBOUY2MDA3MzM4OTVGRTZEQkY5Mzg0RERERTVCQwotOjEwQTVBMDAwRDc0RTgyNzkxNUY2NEMyNDMyMUUwOUY1MzFCRjA5MzM5NgotOjEwQTVCMDAwMEM3ODdFMUQyMzdGRDk1ODdGMjRENkY3NTJCNDhBRTdDMgotOjEwQTVDMDAwRDVFNDU4RTlGRTIzMjZFNERDNjQwM0JGNUQxNkE1N0ZDRAotOjEwQTVEMDAwRkE1RTIyQ0E0RDQyMUZFOUY4MDRGQjAxRkZEQzVGQzZBOAotOjEwQTVFMDAwQjdGM0E5OUQ5QkYzODM4RkM5M0ZDRUI3OTdCMkU4MUZGRQotOjEwQTVGMDAwRjY1QjExMUQ4N0U0RUY0Q0YxNkRGRkEyRDk5NEQ3M0RCNgotOjEwQTYwMDAwRDkxQ0Q5OEI3QzdEOTk3ODk2ODgyN0YyQjUxREUwQjg0NgotOjEwQTYxMDAwRDBEQ0JDREYwM0VCNDk1QkNCN0MyRDM4Q0E2MjZGMkJFRgotOjEwQTYyMDAwRjY1N0NBMDIyQUMyQjlDQzc5NUYyQkNFNkZFQUUyMDM5MQotOjEwQTYzMDAwRTk0ODVGNEY2NjE3MTIzRDVENkVGNzE1MjYwMDg5QjQzNQotOjEwQTY0MDAwNEVGMUY5OUNGMEFBNzZCMTQyNzA5OTVGNkIwRjYzRkVGMAotOjEwQTY1MDAwREFGQzgxRkI3QTgyMDUwQjgwNkYxNjA2MTU3MThFM0UzRgotOjEwQTY2MDAwNThCMDU4MTM4Rjk1Nzk3RDBCNkNFMDQ3QzdEQTc3Q0VEOQotOjEwQTY3MDAwRTY3QTVDQjY2RjEyRTc0RUU0Rjc2REQ5MEU5RTVGOTlFRAotOjEwQTY4MDAwN0Q2NTUzMzZFNTU3RjA3QzY3RTBGQkRCQjIyNzQ1RTU5NwotOjEwQTY5MDAwMDg4QzRCRjkyOEYzOThERjgyRUI5QTI3Rjg1NkYyRkRFNQotOjEwQTZBMDAwN0NGRkVENjRCN0NFMEZFOEVEQ0ZERjI4MUNERkExNDVCRQotOjEwQTZCMDAwMEFEOTgzMEI2QkNGNkQ5RkI2NjRDQkZEREUzQzI3QzVGQgotOjEwQTZDMDAwQjc5OUQ0NDc5Q0FFQTREQzlFOEI3QTFDRTU2RDE1RTg0NwotOjEwQTZEMDAwNkQ4RDdEQkNGOENFMzM2OUQ0MkVGM0M5RDU2Nzg3NDcxRAotOjEwQTZFMDAwQ0ZCOTM0MTlDRUI5MzQ4QTczMkU0REJCNUEyQzE5NDhDMAotOjEwQTZGMDAwRUZFMjlDNEI1M0Y3RTcxQkI1Rjk3RDEyNEU4M0NGQjlDMAotOjEwQTcwMDAwRjQ1MzVFRTMwMjZCNzgyRjlFRkY1OUIwMEFENjA4RjUyQQotOjEwQTcxMDAwREYxMEU3MjJERUM0NzMxMTEzQTI3NDk0N0M1RDQyODRCRgotOjEwQTcyMDAwRTdDREY5Mjk3RjJGQ0Y5OUU0QzM3QzkzMzZEMzA0Q0FCMAotOjEwQTczMDAwMTc2QTRCNDlGNjY5RjM3MzM2QjUzNDU3NjIzRDk5Mjc2QQotOjEwQTc0MDAwMjRDRkI1MkM4OEIzMUZGQzlDOTA2QjVCMTQ5RUFGMTU3NwotOjEwQTc1MDAwNUE2NDI3Nzg3QjU0NzY1MDdCNEVERjUzMThBMDNDQjk1RgotOjEwQTc2MDAwQTY2QzJGOERCMzQ1QzQxMTMwQUY3NDIyM0NDMzYwOEVFQwotOjEwQTc3MDAwNzE3Q0YxRjY0NkY5MDBGRDZEQzBGRTJBMEE3RDk0MUYzQQotOjEwQTc4MDAwNTM5MUNBRjNDQzNDRTk4MTkyREI4QUEyRkRENjc0RjNFMwotOjEwQTc5MDAwQkNCQzlBQzBENzZGRjFGQ0RBRUE1Mjg0QTc1MTlFNEIzOQotOjEwQTdBMDAwRkEzMkNBNzVBMEJGN0Q0ODhGREY5OUI4REU4OUNBRjczMwotOjEwQTdCMDAwQzBBMjlCQTBCRkJFRjdBRDk0M0ZDN0VFRjYyQjE2NjhCNAotOjEwQTdDMDAwRjdFMkJCNEUxRjlFQTdEQjUwMUVBOEFFQTRFRjY2M0E3MQotOjEwQTdEMDAwRUY5NzUxQ0IyMjM2Rjg1RUZBOUU3NTFCRTZFREQ1QjFBOAotOjEwQTdFMDAwNzYyQkY2NTc2N0QwNUJBQjFDNkY1QTkxM0Y1NzZEQjcwRQotOjEwQTdGMDAwNDRFOTkxNjFCRUExQUYxMDA1NURDM0NFNDE3MTBGOTJENgotOjEwQTgwMDAwM0Y1MjJFMTlFOTk4OERENENCOUYxMjI5NkY0MTJFNzA5QgotOjEwQTgxMDAwN0RCNTk4RUIzOUY2QTQ4MkYxOUZCRUU0MjNBQUYwOUZBMAotOjEwQTgyMDAwNDlERTREOTI0MkNBMjBFNzI3NzVCRjRERjZDQTM0OTBFMwotOjEwQTgzMDAwMEZFODlGMjk1ODJFQTZGQTU0MDZGOTM5MDZGMzQ3MkYzOAotOjEwQTg0MDAwNjM4OTQ0NUY4M0VDMDQzMUFGRDI4MTc5NzM3QjQ4Q0E1QQotOjEwQTg1MDAwQzVGMjI5OENFMTdEMDYxMjJGMzAwRUQxQjNEQ0FGOUJGRgotOjEwQTg2MDAwODRGN0YwQzBGMzMyMzFFRTlEMjY3RjUxNDQ0MTNDQjE3NAotOjEwQTg3MDAwQjBBOTEwRUQ4ODIwRDkzQjQ2RkJBN0NDREU5QzY0ODdBRAotOjEwQTg4MDAwRjU0RDYxRUQyNDE3MjdFRjdGOTNFNDI0RTBGOTJDQ0FGRQotOjEwQTg5MDAwOTlENzk4QzRCM0NGOEU3MkE2MTIxM0ZGNTQ3Q0VBRjFGNQotOjEwQThBMDAwMzRDQkYxOTAxOUUxMzQyQkNCODg4RjkwMTlFMTNBREI0RQotOjEwQThCMDAwM0IwODRGNzQ0RUMwMUYwNzRGN0UyOTQ3OTg1RThFMTQ4OQotOjEwQThDMDAwQjAzM0ZDNUNGMjdENkZERDgxN0VFRkY5RUM5MDBGM0RFMwotOjEwQThEMDAwQzFBQzFDOTI5RjdBN0IyNDVFNUU1RDQxOEVFMzgyRjI2NgotOjEwQThFMDAwRUFGQTJDREM0RkI4OTRGNUFFRENBOTBDQTY4QjkzRkJFRQotOjEwQThGMDAwRDdBQTU5MUFGQTkxNzRCOTVCRTREOTJCQUY4QkJDREQ5NgotOjEwQTkwMDAwRDI2NEQyNzM1MUJEQzhGMTVGMjY0QTk3MjI1RDY5RjBDNwotOjEwQTkxMDAwN0ZDNUFFODQ4ODBBRjQ1NjIyREE1RjhBRjQzMDIxQUExMQotOjEwQTkyMDAwMTcyMzI2ODdENzBBRTM2RTU0N0M2RDZBMENCQzY3Qjg4MAotOjEwQTkzMDAwQkNBNEZGMjY5QUZDMkFEOTUzQ0M5NzhFNzgwNkJDNEYyQwotOjEwQTk0MDAwNDM3ODREQjE3N0I0OUE2MTlFODdBREJFOUZBM0JGNTI0NQotOjEwQTk1MDAwQ0VCQzg0Rjc3MjgzN0VBOTcwRDQ5ODkxM0YyQkVDNDZDRAotOjEwQTk2MDAwRkNGQTA5RUY5NUNFNDFFRjREREYwN0VGQzMxMUVGNTIyRgotOjEwQTk3MDAwN0YwQ0MxRkUwNEJDMkZDQzg5QjE1RjE4MEZFRkMxRUY3MwotOjEwQTk4MDAwODk3NzIzQkUyNURGNzcyNjM4MkIxQzE4RDdBREUzRjk0RQotOjEwQTk5MDAwQzQxM0RGMUZEOThBRTU4Q0Q1MDU3NENFQTUzM0NERjc1NgotOjEwQTlBMDAwMDY3RDZGRTZERjRCN0JGQzJBREU5RjU4QjgwNkJFNDM3MAotOjEwQTlCMDAwQjlCMzIwNTA4MUU1QTZCNTBBQzlDQjQ5MUYwNTVCQjFFMwotOjEwQTlDMDAwM0NGMjZFRkVCRDY0N0RGMzFCNzgwRjU5NTM4OEI3REZGMAotOjEwQTlEMDAwN0Q3NDIzREQyNzExREUyOERBOTdCNzU3NjBCOUE5OEQ3QQotOjEwQTlFMDAwQjdGRjJBRDkxRTQyRkZCQUVDNjBCODE1REY4RjdEODAxMQotOjEwQTlGMDAwQ0Y0M0RBNzVEMzA1OUQ3NTJBMkZCQzQxRUREQTc5QkJCQgotOjEwQUEwMDAwOUJERkIyMjc5MjdDMTI3NkRBMzRCMUNFRTk4RkYxNzVGMgotOjEwQUExMDAwQkE3RjdCNTU5NTE3RThGMEE2RkU5MDA1RTlFMEIwQTk0RQotOjEwQUEyMDAwQTE4Q0U0NjUxQzdGQUI1QzY5Q0ZDM0U3MkM5MDBCOENEOQotOjEwQUEzMDAwRjAwREY0Mzk4MkU3OUI2RTgzMjExRUNCRTE3Njg2Q0M0NAotOjEwQUE0MDAwRDNDNDdDRjE2QTBEQkUxRUNCRTE3MTI3NTkyRkMzQzU1QgotOjEwQUE1MDAwNzg1RUYxQTNDOTY0QjdDQTNDRDJDOENGOTg4MjcxMDBBRQotOjEwQUE2MDAwNUMyM0U5RDczODc5QTVCMzBBOUI0OTVGQ0UxQTJFRjM0OAotOjEwQUE3MDAwNDk3QkNEQ0I2MERDOTJCMzdGQjgzMjk2N0ZGRDg0MThFMgotOjEwQUE4MDAwRjc4OEM4N0Y5N0VGRUJDMjA1MjZGNDNGM0E5MTc4RTg0NAotOjEwQUE5MDAwMUVCM0RBRjdEMTJFRTk0QzYzQkE3QjQyM0EwQjc4Qjk5MAotOjEwQUFBMDAwRjNEMTlBMUZCN0U1MDE3QzREQ0RFNjEwMEFGRDdDODVGOAotOjEwQUFCMDAwRUUzREI5QTY4NzQ1NTI1MzA2Q0Y3Rjk2OTk0NTc4REU3RAotOjEwQUFDMDAwMDM5RkZGQ0E1NkVCQjY0RDFBM0I3REJFMTQxQjk3OEZGMgotOjEwQUFEMDAwMjIzRDUyMjNGMDI0RTVDNTdDODEyRkUwRUZEREM4REY2NQotOjEwQUFFMDAwMEJFQ0NENjQxNzJFMTJGMkZEMTYxNkE2MzhDNTJEMDZGNgotOjEwQUFGMDAwRkVBRTc3N0NGMzk5Qzk4NEYxMzAzRDFGQUY4NkU5NzBEMwotOjEwQUIwMDAwQkREMEZGRjgyNzAwRkZCQTQ3OTI5REE4RTc1Nzc3RTgyNgotOjEwQUIxMDAwRUJENTNERjJGRTQxNkU1RkU5RjlCQzRFRjI3OTU4Q0ZCQwotOjEwQUIyMDAwRTc2MDM4NzAzRUZGRDkzOERBN0Y5MUU3RkExMkVDRkQyMgotOjEwQUIzMDAwOUY4NTU4NzRCRDAzRkFEREMwN0YwOTc4Q0U2RjBDRkE4QgotOjEwQUI0MDAwMkQyNjlFNUYyOENBNzJEQzUzRUQ1QzBGODc0MDBGMEJFOQotOjEwQUI1MDAwM0Y4NzQ0RURBOTQzQjNDMzQ4MEYyNTgyN0YyNTFGOTc0NAotOjEwQUI2MDAwMDg3RDNFNDg1RjU3MTlGRDk4ODc4ODNGMjY4QTkyODQ2MgotOjEwQUI3MDAwQkJENENGRDAwRkU5Njc3OTZFMTBGNEYyRkI3RUYyRUYxMQotOjEwQUI4MDAwQzFGRkM0Nzk4RUQzRjNDQjI2MDVFNDczNDFENDVGMDFCMgotOjEwQUI5MDAwQkM3RDhENzgwMzc5NkNFNzcxOEE3Njg2RjIyQ0FFREQwOAotOjEwQUJBMDAwRUY1ODEzRDNFRTA3NDk0N0ZCMDA4M0VERkQ4OENFOEVBNwotOjEwQUJCMDAwMzdFMjJCOUU1RDNGODBBRjA0QjA5NzkyRDA4RjY3QzQ4MQotOjEwQUJDMDAwMUZGRjg4Q0YyMUU0NzU4MDlDNzZFNEM2OTBEM0Q2N0RBNAotOjEwQUJEMDAwQkM1RUZGRDYwNDhBMTdDOEY4QjhFNDM3MjU4RkRCRDVFQQotOjEwQUJFMDAwRUY2NkY5NURCOUI4RkYyMEZBM0Y3NEVCMkNEQUFGRkVERgotOjEwQUJGMDAwODZGOTY5QkYxQUYzOEQ3MjYzRTQ0QkUwN0VGNTA2NEQ2QQotOjEwQUMwMDAwOUNGNDUwNUFFQ0I4RjVGMDVDQ0VFRjRCNzJGOUJBQzYzMgotOjEwQUMxMDAwN0JGQzVFMUNFRjg4OTVDN0M1OEYyNDhBNjcwQURGNTdDNwotOjEwQUMyMDAwQjgzODk3QzdCOTk3ODg2N0I5NzgxRTExNzlEODQ3NUM0MwotOjEwQUMzMDAwRkE3OEJBQUM1NzIxQzZGOTcyOUREREJFNDEyMzU3QkNFNAotOjEwQUM0MDAwM0ZCMzM1QTNCRUYyMTQ4QUJDRjUzNTlDNUVGQjVFNDk2QQotOjEwQUM1MDAwREJBQUJEQUZFRDlBRENGMjI1MDg0NzRGQTFERjlBOEQ0NAotOjEwQUM2MDAwNzE5NjU3Qjg1RTY4MzRGNzVBMzFCRkU0MUE3NzcwMkE4NAotOjEwQUM3MDAwN0U2RkY0MzJGRjBCRDg4RkI3RDczQTBGRTBEQzI3RjZBMAotOjEwQUM4MDAwRTlGQjJDRENERkU4NEJFMDRGMzlBRjZCNzJBQjk3RTBCMAotOjEwQUM5MDAwN0FGQjZFRUQyNUY5MzA1MEFFRUUyNUZFQkYyNjM3NDAyQgotOjEwQUNBMDAwRTNGNkNEOTdERjQ1RjlDN0JDQ0M4NDdGNTgyRUY4ODJGOAotOjEwQUNCMDAwRTJCQzMxRTJCQTgzRTNCOEZBRkI2NzlBQUNCMUY3OTcyQQotOjEwQUNDMDAwNTk1RUIyMkUzRTdCNDMzNzhGMUJERTY4NjcxQjczRTFGNAotOjEwQUNEMDAwRkI5MkVFNENGMjFGRUE1MjQyQTM5RDE0QzdGQkVGQzU1NAotOjEwQUNFMDAwNURGQjg2RjVEMEJBMzY5NUY3RTczRjVBNEFGQkI4MTRCNAotOjEwQUNGMDAwRjc1OURERkQzNkM5QjlENTkyNEZCQUY0N0M1MjJGRjAyMQotOjEwQUQwMDAwN0JCRUZEMEY2MzVDN0MwOEZDQjMyNjE2RkZCQzhDRkE4RgotOjEwQUQxMDAwQzkxMjg1RkY2RDIyMEZBOTUyNkRBOEMwQjhEMEE5MTUyMAotOjEwQUQyMDAwOENDRUJGREVGNkFFNEFGNDc0REJCMzBBREQwNzIxRUQ0QwotOjEwQUQzMDAwQjNENTAyQkVGMUQ2ODNFNzA3QkMxQUY5ODFFNzA3QkM5OQotOjEwQUQ0MDAwMUFGRjBDQ0YwRjY4Q0I3ODdFNDA1QjFGQ0YwRjY4QkYxOAotOjEwQUQ1MDAwRTNGOTAxRUQ3NzNDM0ZBMDJEOTdCMEU1QUQxODY3NkJBNwotOjEwQUQ2MDAwNkE2M0NFQjA5NzlGMjdEMEI2QzdGMzA0REEzMjlFMjcyNgotOjEwQUQ3MDAwRDBCNkM3RjMwNERBRjIyOUM2RTE3OEVBMzE5NUUyRjRGNQotOjEwQUQ4MDAwNzhBRTQwREJGRUU2NzcyNzY2MjFERDc0MjVGMDNDMzJBNQotOjEwQUQ5MDAwMTZGMkY3MTQwMTVDNTYwOEI4RTA3OTAzNkQ3RkM3NTNDQgotOjEwQURBMDAwQUU3Qzg3MDFEREFERTg1OTM5MDc5Rjk3RUM1QUE1RUJEQQotOjEwQURCMDAwQUY1RTZEMjAzQTY0RUQ1Q0VFMzZDMzNGMjQzRkQ1MjI5MgotOjEwQURDMDAwMTVFN0YxRUQyRTg1QTUxN0UwRkRFMTA2RkREOUJENzk2QQotOjEwQUREMDAwMjM4QTlFNUJDMkZBRjdGNTRDMTNBRjJEMTgxQzk3N0ZBMAotOjEwQURFMDAwMzk1N0U0MjFFNkIwMUM2RDlDMjY0QTA3MEU1RjA0RDc1NAotOjEwQURGMDAwRkY5MUVBOEI0NTA3MjVFQ0EyNTQ4QUNGQkNBMzYyRUNGNQotOjEwQUUwMDAwODE3REM1OUFCNzVDQUU2OEUyRjcwNjc4RDhCMkY0RjRGMwotOjEwQUUxMDAwOTBFMEQ1RDM0M0QyMTgzRDNEMjRGQkY0RjQ5MDNBNDU1RAotOjEwQUUyMDAwNEYwRjY5RkU3MUU3ODQ2RjdBOTU5RTNFOENGMDlEMDIwQwotOjEwQUUzMDAwRkYyMDdDMjdFMENEOTAxODU3ODI3NTYyOUNGNzJGMDU4NAotOjEwQUU0MDAwREYyRjcyQzVCRTg3ODBFRkI3RUNGMjBBODc5NzNFRDczNwotOjEwQUU1MDAwRDhDQkEyRjY0OUU5M0JDREI0NDk2QjhDN0I0QTM4NEE0MgotOjEwQUU2MDAwM0I0MUM2MkYyNzMxRUVBN0RCRjFCQzY1MjFEQTAxRENCRgotOjEwQUU3MDAwN0Y0M0ZEOEY3QzdFRDhDQUZEMzZBNDIwOTQ5MzM3QjFFMgotOjEwQUU4MDAwMjBDOUEzOUIwQ0ZBRkY2NkM3NDM1NkQ0RkY4M0Q2MEI5OQotOjEwQUU5MDAwMTYxN0RFMUI2ODVDMkZEQTUxNEMxMzRGMzJFQTdGQTU4MAotOjEwQUVBMDAwNUI4OTI0MTdFMzcyQkJBNTVDMEU5RTI1NjNDN0FGMENCQwotOjEwQUVCMDAwNDU1RUZDREVFMUI3RTU3OTY4MUM2NjJGRDNDNTdCNjM5MAotOjEwQUVDMDAwREE3MzcyMUUxMjJFNzI3QzFCNkI1NkIzOTA5RUM3MThEQgotOjEwQUVEMDAwRUQyRkJEQkYyQ0ZENkJFQTU0MTM4Rjk2RkVCMUY0NEZERQotOjEwQUVFMDAwOEM3MDU2ODcxNzkwREQzNUQxMjlGREUyOUVFQkYxQkRDMAotOjEwQUVGMDAwRjQ4NzhEN0VFOEY5RjZBNUU2ODU5NERFOUYxNzQ0RUQ4QwotOjEwQUYwMDAwQzkyQkM0NzM5RTg4MTdDMUIyN0VGQjZGRDBGODcyQzU3RgotOjEwQUYxMDAwM0IwQ0M3OUJCQkZCMjIwRkQyQ0I0NkE1OTkxOUU2NzcwQQotOjEwQUYyMDAwRjA1NUU4NDczNUY1QTdGM0Y4NEI1MEI3NUZGNUI2RDJDMwotOjEwQUYzMDAwNEJGMzVFQzBGQ0Y3RTBCMzUxQzREMzFBQkJERUE2N0Q3MQotOjEwQUY0MDAwRDRDNjJFMUUyRjYwQkJGNDc4MzFEQUZCQUI1ODg3QjUyMAotOjEwQUY1MDAwNDAxOTZDRUYzN0IwMUVFQUNGNjhERjBGQTI5M0YzRTgxOQotOjEwQUY2MDAwRjE4RTNDNzlERjE2Q0YxNzYwNDIyRUQ1MDk3OEM1RjNGNAotOjEwQUY3MDAwMEJDQzA4RTBBOUQxRkIzQjgxMUZFNkU1NEQ4QUU2RDE2OQotOjEwQUY4MDAwNjZCOEMwOEY1MTMxMEZDMzZCOEQ5NTI3QzVGMDcyMTUxMAotOjEwQUY5MDAwQjA0OTk3M0I2QTQ4NEUyQzZGMUIxNDk3QjAxMjNGQjVDRgotOjEwQUZBMDAwOUY3QjdERDIwRUI4MUY3QzM3N0M5NkU2Nzk3OURDMjBCQQotOjEwQUZCMDAwNzFDRTNCN0VGQzVDREE5M0FGM0RGRkQxNjRFNUU3MEVEQQotOjEwQUZDMDAwNTlCM0ZFN0NGRURBM0M5MzNDM0ZBNTBFNjVGRDgzRTE2MAotOjEwQUZEMDAwRkFGREYyRjI2NUZFMDFDMEVGMkUyREZDRTQzRTgyNUMyQwotOjEwQUZFMDAwQ0ZFRjI3RjUzQzg5RjE0MzM1NzlBNjFERkQ1QUFGMkJFQwotOjEwQUZGMDAwRDg4MkY1ODcxREVDM0RBQ0EwM0M3Mzc4MjkzRkU0RTQ5MgotOjEwQjAwMDAwQUVBMzFGQTNGRjJFRDdDNzU4RUYxNkJDREZCNjZFOTdBRgotOjEwQjAxMDAwNEFGRTYwRERBRTM3QzgyRThBRUZFRkI1MEZEQ0EzMjAwNQotOjEwQjAyMDAwRjYzNzdFMTI2QjVFMzJBRkI5NTIyRDRBRURENUQ4RTlCNAotOjEwQjAzMDAwNEI4NTFGMzA3OTc4RTAyMTZDNTdGQTYxNUUwQUNFRDdENAotOjEwQjA0MDAwMzJBMjgzRUVDNUVBQkY4M0RCQzE2RTk1Q0Q0NEY4ODFBMQotOjEwQjA1MDAwREVFMzdBREY2MUE2N0QwNzc3NTI0ODRENDEzQjZFMjlEQQotOjEwQjA2MDAwRTNGN0QwRjk5QTdENDgyQUVBQjAyMjhBRDM2NkRDQTFCOAotOjEwQjA3MDAwMDZEMEZFRkU3NENERjIzNDNDQUY5QzkxQkMyMkFEMTBFNAotOjEwQjA4MDAwOUVEMzZERkM1RTlBMENDNTE0RTBFNzRFOTdBNUUxM0Q5QQotOjEwQjA5MDAwMjAzN0Q4RjhCRTdDQzE1RjI3NDUwQTgxREY1RUI3RjI1MgotOjEwQjBBMDAwRkI0NkRENDk0MUJBQkZBMDNGNERBNUY5MUM1QjA3NEJFQwotOjEwQjBCMDAwMUI4NUZCMUVERjRDQzQ3QjA3NzJDRTM4MjZFMDdDQjJCQQotOjEwQjBDMDAwQzVCRDE2M0ZDQUUzRjdEQzFDN0ZGNkJCODlFOEFGQUExMwotOjEwQjBEMDAwNjcxRDc0QkU1REQyOUZCQjMwQjZCRkIyNDJDMEEzRDE2NAotOjEwQjBFMDAwQzNGM0RFNEYwQUZCRjE5MEQ4NkY5NTc5RjA2QkM0M0U0NQotOjEwQjBGMDAwRTBBMUQxMDNGNzgzNzkzMDJGQTQzMUMxOUZCQTEwRTNDNwotOjEwQjEwMDAwMTEwNzU0Q0E2QkZGQzZFOTRGNEQyM0JCOTlFN0IzQUY5NAotOjEwQjExMDAwMTFGNkMzNDk5MUY3Qjk2NkY2OEM0Q0Y0MkZFMkU1NEI3MgotOjEwQjEyMDAwMUZDOEUzNzZFRjBGNzU1RkE1Q0MzRjhEMEI4NzM0MzNENwotOjEwQjEzMDAwMzM1RjQyRjcyRTA1Q0U1NUVGRDUzRkFCMzFFMTc5NUE1QgotOjEwQjE0MDAwN0M4Rjk3MzdERjk3QTdFOEYyRTIxQjMxMkYxRTVFQURBOQotOjEwQjE1MDAwNzlBNTNDOTM5RDIzNUZCQTExRUYyM0Q3RTREN0EwOUYzNQotOjEwQjE2MDAwODZFQjZCQzRGQkM4RTk5RUQyMTM3NDRGMDdGNjgzRjdENgotOjEwQjE3MDAwODY5REVGREVDODE1NjIxRThEOTg0RjlFQUU3RENGRjk3RAotOjEwQjE4MDAwMzlEQUJGOUJCRTNGMkRFMEY2RjQzQkE2QUE2RDMxRTY0RgotOjEwQjE5MDAwOTkzNzhDQ0JBNzcxMUU3MzAwRjcyNTJGOEVGMDdCM0Y1QwotOjEwQjFBMDAwRTNENTkzRTdCOEUzQ0RBQjZCNDZFRjhEMzg2RkNDQ0ZFQgotOjEwQjFCMDAwOEMzNTVFQ0EzMDRFMjc3MkJFNURBRURFOTUwMUJFOUZGNQotOjEwQjFDMDAwMzdCQTNBNTk1Mzc2RjZFN0NGRDVDOEQ3RDkwMjNGNUQ5QgotOjEwQjFEMDAwNTdGNUU2RDM3RDAwQjNCOUZGMUEwRkNGNjVFNjY2MDVENAotOjEwQjFFMDAwRTE5MEUwMEEwNkQxMUU5MUY3MTVFMzdEQzYzQ0NGMjMxRQotOjEwQjFGMDAwNzQ0RTdDNDdFMUFDRUFDRTFGMEM4NkIzOTVCRUNCRkUwNQotOjEwQjIwMDAwQTREQzM5RkE4ODRBNzJFN0U4MDc4MjFGOTlERkExOTQyMwotOjEwQjIxMDAwQTFCRUUyN0M3NTk0RjFCOEVFRDE3NkZFRkIxRkNCODIyNQotOjEwQjIyMDAwQTAyQjQwN0UyQ0RENUUzRjA3MEYxRkFGREMzMTcxMjM2QQotOjEwQjIzMDAwOEE3RjdDN0YzN0M4OUZBNTU5OEM0RDgzRTdCMjBERkE3MgotOjEwQjI0MDAwRkRCMTZGRDkwM0E0RTc1NjNDNjBENDY3MDEyQkNBRDk3RQotOjEwQjI1MDAwOTUwRkU5RUJEN0IxMDdCRTQ2RkJBMENFNjBGNzY2MDhCNQotOjEwQjI2MDAwQkQ2QkI0N0Y2NzBDMTNGNjZGMTkyQkJCOTA3MzRFOEZCOQotOjEwQjI3MDAwMzBGRkVDNjFBNEZGRjk3RURCMjRCMTlGNkVBQ0ZGQkMxNAotOjEwQjI4MDAwOTdEM0MzNkQzQkZFNjBDNTlGMDQ4QUQ3RUYzMTkwMTdGQgotOjEwQjI5MDAwMjNBMURGMTNFQjlDRjQ1QzMyQ0M1RjMzMENEQTM1MEQ2OQotOjEwQjJBMDAwMEIyRUM0NzFGQTBFNzAzODlGNkEzOEI1OTJFMkQyQjU4RgotOjEwQjJCMDAwREMwRUIwRTEyNTJCRjA5RkI2RUJFREU0NDdERjhCRjcxQQotOjEwQjJDMDAwOEMwMTlDNkQzNjZFNUY0OEJCNEE1NTZGNTdGMTI3NUIwQQotOjEwQjJEMDAwQTZGRTZFNDUxQUFFQ0ZGRENDQUMyQUY0M0YzQ0NGMjQ3RgotOjEwQjJFMDAwRjkxMTFGOUJDQUZEMjUyOEJGMzc1NTNCNjg5Rjc4QUJENgotOjEwQjJGMDAwODlERjQzNjhCN0YxRkRCOUYwRDM1M0Y3NjEzODc4NjQ1QgotOjEwQjMwMDAwQzdFNjE5RTg2NzM4QkJGNzQ2MzAyRUQxNjZFMkZCQUZENwotOjEwQjMxMDAwNkREMzk4QjhDNzlBOEZEN0Q0NURERDg5RjNDQUFGMDFEMgotOjEwQjMyMDAwNzkwRkZENkQyQUYwOTczODM1RkQzMzYxMkYzNTBBNUNCMgotOjEwQjMzMDAwRjRCRDc2RDE0RkYxREVBQjlGQkY0M0U2MkFBQzczMDQ3OAotOjEwQjM0MDAwQzVCRkM2MzE0RTM3MzJCRjg0N0UxQjQzMTMyRjNBMDEyRgotOjEwQjM1MDAwRkE4NzY5Q0UzRjhGRUI1MDIyOTYxNEJBNUY4RkUyRDhGRQotOjEwQjM2MDAwMERFQjIzMTlEN0EzRkVGQzI1REZBRjk1RjM3M0JGOUUyQQotOjEwQjM3MDAwM0QwM0UzRkQ1MjlGNUU4RkY5NkQxODA3MTY3NkVGMjJBRAotOjEwQjM4MDAwMjZGRkY4N0U0MUFEQTBFQjQ1QzJERUJEM0U4OUMzNzkwNAotOjEwQjM5MDAwMTlGM0QxRjlBQkVCRUMyQzA1RTNDQkQ3NTc3NDRDQTJFNgotOjEwQjNBMDAwRkJBRkVCMkQ2OTY4QUZDOEI4NzczQ0JDQzc4QkNGMzQxNwotOjEwQjNCMDAwM0U5OUNDRUZDQjUxRkE0NzYzMjdDNzMwMDY1MjFBQ0RERQotOjEwQjNDMDAwQjczN0Y2QjM2Mzk4RTBFN0QxQzI0RTFCQzlGQ0I4Q0ZEQwotOjEwQjNEMDAwRDJCOEU3MjJDQUM3QjcyNUYyN0QzNTkwNkY3NkM0RUJBNQotOjEwQjNFMDAwN0VENEU3QjBFRTVCNUU0RDg4RjA3REUzQjBCODE3ODdBMgotOjEwQjNGMDAwODU2ODNGNjY0RjI2RUQyQkI4MEJGREI0RUY3RUQyRDJBOQotOjEwQjQwMDAwOUI0RkYyMDBFNDk3MDJCQTczQ0ZCMDRGQUUzMUUzRkQyOQotOjEwQjQxMDAwMjAzOTYwNDc0MUY5RjgyRjBFNUY4M0JGQ0ZEMjM4QTJBMQotOjEwQjQyMDAwNzcyNURFMTc5RUZFRjg1OTVFMUVENzdCMThDQkMzMUUwQwotOjEwQjQzMDAwNEZCQzk2Q0ExMzdBNTdBQTUwOUVGMjc4RDZCNUQ0MUUzRQotOjEwQjQ0MDAwMUQyODIwQUNDQUM3ODc1RjhCRTdGQzhFODlGODI1RjNERgotOjEwQjQ1MDAwRjVEMjNENDE4REJCMkYzMjY5RTM4MzI1Rjk1QzRFMUY0OAotOjEwQjQ2MDAwNEJFMEY1OEUxNUIwMjU3MzExREU2MzdBNDc2QjdGMzc5RAotOjEwQjQ3MDAwQzE5MzJGRUQ1MjZFOTdDOTc1Q0E3NjJDMkI3NkZGRUZDQwotOjEwQjQ4MDAwMEIzRDcwOEJCOERGNjc3QTEyNkI0QkUwRkIxNTIxQjQ3NAotOjEwQjQ5MDAwQUZERUVDQkU4OEUwRjJDMjMwOTc4MDU3MkZERERCMjhBQwotOjEwQjRBMDAwRkIzMTlFRUY5N0UzQUU0MkJEOEQ3MkREQTIzRjRGRjRCQwotOjEwQjRCMDAwMUJBMTJGNjA5QzBEMzQ0RTkxQkYwNEVGRTU2OTlDOUI0RQotOjEwQjRDMDAwNTc4Mjc4MDM3Qzk5MDVCRUNDREMwRkRDNEE3OEM2N0VCNwotOjEwQjREMDAwRDM4QTQ5OEY0Q0M0M0NCMTM3Q0Y0MEZEODJFOEJDOEQ0NAotOjEwQjRFMDAwRjQ3MTU4OEM3MzRCMkJERjY3RUE0RjJCMjQzQTlBOUVFQQotOjEwQjRGMDAwQzRFRDNGNTYwQUYwMDMzOTM2NDVDMEFEMjQ1RjlDRTNFNgotOjEwQjUwMDAwMTlDMDQzQTY0MkZEQjcwQUY4RTVGMUZBMTdCQURFRDMyRgotOjEwQjUxMDAwM0ZEMDdBMzU3OEYyNjNERUYxOUJCQkM2MTI5RUE2MEM1MwotOjEwQjUyMDAwRDBDMTY2NUQzRkM3NUEwQ0VEQTZGMEJDOTQ0NjU3MjFDQQotOjEwQjUzMDAwQjVCQjU3RENCMzJGRUYyREM2NzYwNUQwNkU3QTQ1RkYyRAotOjEwQjU0MDAwNDRFNDA3Nzk2RjFCMEI0RDIzNjdCRDQxNDg4QjgxN0IxQQotOjEwQjU1MDAwRDgzQTc4N0UwQTFCRTlFN0Y3MTFDRDlENTMyQUQ2RTc0MgotOjEwQjU2MDAwMTRFQjczNkFFRkE1MUJFMEMzOEZGQUYzNkIzNEY3NTI0OQotOjEwQjU3MDAwQ0JGNzAzNzAxRkU4QUY2ODgyRTg0RkM3Q0ZCMUZBNDMzQgotOjEwQjU4MDAwQkU4ODg3OEY3MUY5N0Y2MTdDQzg3OTFBRTAzOTAwNjdCRQotOjEwQjU5MDAwQzNGQzI0M0M5MThGQTk1RDkxOUU5RkU0M0M4N0U1OUI3MQotOjEwQjVBMDAwODRCRjZERTBFNzgyRUYzOTlFQzhFRjVGRkQzNzIyMUY1MQotOjEwQjVCMDAwRDJBQkE3RTdENTVEMDUyNkRDM0Y5NUVEREEzQTVBMDIxNgotOjEwQjVDMDAwMjhFNzY1QkNEQkQ2NTUxRDQyRkREN0Q0NUQ0RTc5OUI3RgotOjEwQjVEMDAwQUI3RkY1RUNDQjIxNjhCRkVBRjk4NzUzMzA5OUY2QTgyOQotOjEwQjVFMDAwQjkzRDAzRUREQzg2MURGN0E0Rjg3MUJGQzQxQzRBNDFDOAotOjEwQjVGMDAwRjk3OTM0QUM1NkM1M0EwRjE4MTI3ODkwNzY1NEEzRDAyNgotOjEwQjYwMDAwMzdDNzlFQkVGRjFBODRDNzdGRUNCMDM4NTE4RjM2M0RENgotOjEwQjYxMDAwNjU4QkQ4MjgwRTcyMEJEOTUxNTBGRTlDOTdFRkZEMUFGRQotOjEwQjYyMDAwRkREMkE2NUQ3QTNCNjlENTNGM0M5Q0UxMjU3QTBBRTVDRgotOjEwQjYzMDAwOUFGMDhDMEI4QkU0MzI3ODM2NkVCN0Y4MjI2RTFFNEY4MAotOjEwQjY0MDAwODQ2MTU4MTNFQkRGODhGMzMzQjZDNzc5OUMwNkJDMzdBNwotOjEwQjY1MDAwNzVBODRCRjEzQ0FGRjEzQjQ4MTJCMkMzOUFCQUVFMjc0MgotOjEwQjY2MDAwQkJBQjQ5MUI2NzAwM0NENEM1QjFCQjZFQ0REN0U3NUIxNAotOjEwQjY3MDAwNEJCOEIwQjA4N0VDOUFENjVGRkVBQ0Y4NzMwN0RFQTc4NAotOjEwQjY4MDAwRjk0RjI5NEE5MTU2NUZBRTI3Mzg5REVBNThGRUY3QkIxRAotOjEwQjY5MDAwQkRGMUY1RUE0OUI0MEI2Q0RBNzYxQ0FGREU1RDBBRUQ1QwotOjEwQjZBMDAwNDlCMDZFRkU2Q0IwNDQ1MkQwQ0Y2RkQ4NkFGMTgxRTZEQgotOjEwQjZCMDAwNjUwRENGM0VGMTI0RUU4N0IwNEY2Qzc0RkY0MUZEQjNCMgotOjEwQjZDMDAwRkIzRkJFMTRDQUY1OUQxNkY3MUMzRTdEODc5MjExQzUzRgotOjEwQjZEMDAwNEY5Mzk3REIyNzEyMUZBQjVFREM0RkY3MENFMjdCQjQ3NgotOjEwQjZFMDAwNkIyNTVFRUEzQkY3NUFEOUY4QzFGMEFCRThEODJCN0U2MAotOjEwQjZGMDAwNzdDMTgwOUY4RUNGQUZBNEZCM0M3RkY5OUQxNUU5RkFGRgotOjEwQjcwMDAwRTgxRTg1NjUxNjBDNkU1RkI3NzU3RjBBRDIxRkMyMDlFOQotOjEwQjcxMDAwRkQ0Qjg5QTcwMUJDMERDMjU3RTQ5QUREQTU1NDhGRTIwOQotOjEwQjcyMDAwMUFGMUYwMzYzNzlGRjE3OEQwQUY5RTdEMEU3RjA3QjBDQgotOjEwQjczMDAwRUUzNzM2MUZBRUJGRUVCOURCNTM3MDFENUY5OTlCMzlGNAotOjEwQjc0MDAwN0RGRkUyOUUwQzNGOEM1QjY3MDk2NTM4RTlDOURGRDc1NgotOjEwQjc1MDAwM0Q3RTA3RDFERENEMDdFRUM4RTBCRkE3RTFDRjM2NEQ3NgotOjEwQjc2MDAwQTE3NTY2RTNGQTZFN0E2QzNFQUQ2RjI1MEIxMkRERDVERQotOjEwQjc3MDAwRkQ4MkM3MjdCRTE1QkZDNzYwQzRFNzY5QzExRjVGNkRFMwotOjEwQjc4MDAwQjNFMThGNjRCMEFGMzAxMTFERjMwODNGNTA0NTlFRUYxOQotOjEwQjc5MDAwQUQ0QzdCOEYwNTU4REM1NEZFNTZDNDA3REUxRkQwMDMyQQotOjEwQjdBMDAwQ0NDRTM0NzFEOUE2RURGN0Y2MjA3RThFMERGMzY3RTI4QwotOjEwQjdCMDAwQkUxQUMwMjEyNEUwQTVFMEZEQkFFQTgxQ0E0QzhFMUY2MgotOjEwQjdDMDAwRTYzNUNCQjgzMkQ4REYxNUY4MUVFQkY3NThGQzA5QzVDMwotOjEwQjdEMDAwQkE3NjYyQkY5RThGMkZFMzEzMzBFRjQ0RENGN0ZCMkE2QgotOjEwQjdFMDAwMjNGNkI5QUREMUMzMTUyMURGNTgwRkQzRDI1NzNDN0UxNAotOjEwQjdGMDAwREY3RTFGRDFENTM3MUY3MUJFNjkwQzU3NTdEMUY3MUU5OQotOjEwQjgwMDAwNEIwNDhGMTYzNzg2RjdENjI4MjQwRjZDQkFGQjlGMDY5OQotOjEwQjgxMDAwRTg2MkJCNDVGMEIzRkUzQkNDRDNBQzY4RTFCQjg3RTc0NQotOjEwQjgyMDAwRDVBRTdDQzhBNkJCMEYyMTRBMzdENkU4RkI4MjI4N0Y1RAotOjEwQjgzMDAwNEEzRkVBNjZDMUZGQzZGNTFBRTVDMTFGMENGMjgwM0QxQQotOjEwQjg0MDAwRTYxOUQyQkQzMjBEOTZGMDkzOEYyMkZGMDJCRkEyOUY2MAotOjEwQjg1MDAwRDlGMEFDODVGQ0ZDRTMzQkRGRjhGODNBQTBGM0UzMUQzQwotOjEwQjg2MDAwOTI2RkY1NzJENUM4Qjc3NTJGNEM2MkIxRjhGNkI4QzNCMAotOjEwQjg3MDAwQzc2MkYyMkRCQzhGQzlCNzhFRTgzRThEOTdGRDcwNzJGRQotOjEwQjg4MDAwRjVFNjM4NzIzNTZGQjhGMTFDNEI1MTJBRTZCQTFGN0JDQQotOjEwQjg5MDAwQkE3RTM4QzUwNTBDNzA5NUZFQUM1MTVFQkU5Q0VGOEQyRQotOjEwQjhBMDAwMjkyRjE5NUU0MUE1ODFBMzg0OUZBNEM3NTVDRkFDQTZCQgotOjEwQjhCMDAwNzEwNkU4NTZEMkE1QTREQjAxQkExQzk0NUZBOTgzQTM0NAotOjEwQjhDMDAwRjFGQjE3Mjg4RjI2NDVGMTZFNTkwRjdFMEFEQUIxQUZDQQotOjEwQjhEMDAwQTlGNDNCMjg3RDMwOTc4RDAwRjdCRTlEMDVCNDBGN0EwMwotOjEwQjhFMDAwOEZCMEYzRkI5Q0ZEMjkxOEQ3QkI0N0Y4MTVGRDE4NEYwNwotOjEwQjhGMDAwNEM4REJFRUY0RjEwNzkwMzgxRkU5NDM0OEQ1REY0Nzk0OQotOjEwQjkwMDAwQjc5QTgyNzY1QzZGMzhGNkVGQzlDQTdCMkE3QkUzRkM3NAotOjEwQjkxMDAwREVBQzNDQkY1NEE5M0FGMkQ3NjI5Q0I2OURFRjRGQUU2NQotOjEwQjkyMDAwNjg1OTk4ODJGMThDQkVFRTQyRkEzREExOUJERTA1N0ZGQwotOjEwQjkzMDAwMTdFNkRCMjdFMzlBMjFCRjM5QkIyQzdBQkZFOTExMTY0MgotOjEwQjk0MDAwQTJGRENBRTVEREY1QjQ1RjY4OEM4M0FDNzRENEE0RTJEMwotOjEwQjk1MDAwN0VBMDMxMEU3MjMzRTY0MTYxMUVGMjYzRkFGN0FCMzAxRQotOjEwQjk2MDAwM0U4Mjc4MzJEMDUzMTBFOTI5N0IzMDNEQUQxQzJFRjY1MwotOjEwQjk3MDAwNUY0QjU4ODk2RUZGNTVDOEI1NEFCNUU4QTc2ODlGRjQ3NAotOjEwQjk4MDAwODFERjhFRjEyMEE2MTZGRDFBRjVFOUI3RThDNzIzMDM3QgotOjEwQjk5MDAwODQzQzQ0QTdGNUMxMjMzMkNGOEFFODVBRDI5REQxN0Y5NwotOjEwQjlBMDAwMzczRTRGQkNGNDY5MTk5RTA3NkE3OEY5REY4QTdGMEUyQgotOjEwQjlCMDAwQ0YxMzJGN0YzMkZBNTUyQ0ZGRUE1RkYzRkY4RDBEQUVDOAotOjEwQjlDMDAwNUZCMUU3OEZFNEFGRjRFREIxRDE3Q0ZBRjZCQzlEN0ZCNwotOjEwQjlEMDAwMTc5Njc3REI3QzM4REZCRUY1MzZGRTdCRDA3QjkyRTlBRAotOjEwQjlFMDAwREVFOUJFNjEzQ0NFRDZGQURBNzdDNUJEQTRBNzM2MTAzMwotOjEwQjlGMDAwREVGRTZFMzhCRjJGRjY1NEY3N0Y3RDg2RjdBQjlFRUFFQQotOjEwQkEwMDAwQjY3OTMxRUVEMEI0Mjc4OUZDRjBBNkREMDk3NDRGN0NGRAotOjEwQkExMDAwREY2QkRGOTU2OUUzNDVGRkRERjUzNDhBRjMxNjdEQzlGOQotOjEwQkEyMDAwQUMxNkYzNUJGQUQyQjhCRkQ2RjRFQUQ0Mjc1QTBBRDBFMAotOjEwQkEzMDAwMkVERDRCRjcxNjU3QkNGRUE3NjI5NDNGN0QyRjcwQkJERgotOjEwQkE0MDAwMDJGQ0YzQzc3MTEzRjExN0MzQkI3RjZBOTk4QUU3OERCNAotOjEwQkE1MDAwMThGOUQ1NTNCRDdGQkEzNkU0ODgwNTE3MEU4NzNFODBBNgotOjEwQkE2MDAwMDNBRTBCRTA0MkY3NzVDNzgzNDdENzcwN0UwRkZGRkYyOQotOjEwQkE3MDAwM0U3ODdDNERGRTQyNDNGNzY0RTJBMzI4NUMxNEZFRkI1MwotOjEwQkE4MDAwMjNEREM5NjFCQjQyRUJFN0VGRjc3QzU3OEM3NkQyRjEzRgotOjEwQkE5MDAwOEUxNkQyRkJFNzVCRjc4N0ZGNkJFOUUwRkJBRTVCODlCNQotOjEwQkFBMDAwMEM2NUREQTdGRUQ3QUU5QkQzRkZEQUUxNUMzRjE5Rjk0OQotOjEwQkFCMDAwNjAzMDlERkZFQUFGQTlGQzVDQjI4RkU2NkJFMEZGRkY1MAotOjEwQkFDMDAwMDdBQkEzNTlGMzAwODAwMDAwMDAwMDAwMUY4QjA4MDBBMwotOjEwQkFEMDAwMDAwMDAwMDAwMDBCQ0QzQzBCNzgxNEQ1QjlGRkVDQ0M3NgotOjEwQkFFMDAwM0U5MjZDQzIyNjA0MDg0MjYwRjIyNDRBMUUwQjc5MTA3MgotOjEwQkFGMDAwMUVBOTlCODQyMDA4RTIwNkE0QTIyMjJFRjhFMDE1OTIzQgotOjEwQkIwMDAwMDhCNkM2NkFDRDYyMjIwMkY1QjY1MTZDQUY2REQxNkYzMAotOjEwQkIxMDAwNDE0MURBREE2QjhBNDFCMTAyNUQxMDExNUFBQUFCODI1NwotOjEwQkIyMDAwQTI0NkJBNTJBQjUwMDMxQjQxMDUyQUJEREVGRkZGQ0YzMAotOjEwQkIzMDAwNENCMjMzMjQzQ0ZDQUVERkQ3RTQyM0M3MzNFN0NDMzkyNwotOjEwQkI0MDAwRkZGQjc1Q0UxODQ5ODU5OUFEQjkwMDREREI0RUU1ODdGMQotOjEwQkI1MDAwQjEwNTY4MDYyODA2NDg1MjZEMDBGRDAwNEU2Q0ZERkFERQotOjEwQkI2MDAwOTA5NDRDQUQ1RDg1MzQ4MEJBRUQ3MTAwNDVEOEZFMzFCRQotOjEwQkI3MDAwMjYwMDEyNDA2NERCQTkxMjlGMTNFMDFCRkFCOTEyQTA0MQotOjEwQkI4MDAwQTMxMTk3MThENkREMzdCNzFEOUIzRjJDQjkxN0E3RDQ0MwotOjEwQkI5MDAwQkNGMDQxRkVBRkIxRUQ3OEUxQkRFQzk3QTlGRkUyQkI4RgotOjEwQkJBMDAwNDMzRUMwQjZENjA2QkU1NjVDMkYxMjBGMzMzNzIxM0MzQgotOjEwQkJCMDAwOTE0NEYwMDBFRTVGRjdGMkU4QTc5NkUxRkU4QkRCM0VFMgotOjEwQkJDMDAwOUY0REZCRDc2QzFEMDUzMkY2MkJGRkY0RUZGQzMwQ0RGQgotOjEwQkJEMDAwREYyNDc5QzRGM0Y4ODAwM0UxQUFEQzdFNDYzQ0RGN0VGMwotOjEwQkJFMDAwMkExRkIwRkQ2QzkzMTQ5NDEzQjBGRjgwN0Q3RTgwRDYyNQotOjEwQkJGMDAwRUQwNUVGMTE4NDc3RjE3RjIyREUzQjZDQjdFMjc4QzM2RAotOjEwQkMwMDAwNTA5NUUxRUJDNjdCODcwREYyMDhERkJEQjM2OTdFNjQxQQotOjEwQkMxMDAwN0JCQ0NCOUU0NkYwRkQ3QjA4NDRFMTdGMjFCQ0JERkY5MQotOjEwQkMyMDAwQjFGQzNFM0ZERTAwN0U4NkRCMkE3QjFERTkwOERGQzNEOAotOjEwQkMzMDAwMTAwQ0E5RDgzRTA4MzBCMUQ1NzkyRTNDM0ZBNkMxNjI4MAotOjEwQkM0MDAwN0EwRjQyRDAxRjQwMDZGMTIzMjcyRjlDMDIwOUQ0QUU2MQotOjEwQkM1MDAwRkE1Q0NFQTdGN0E3NEQ0QzQzMzhGQ0FBQzVCRDVFQTUzQwotOjEwQkM2MDAwMTkxNkE2QzM4QUMxRUVDMDJBODQwQjE0RUZGQ0I1RDhGRQotOjEwQkM3MDAwQjcwRUFENzFBRkUyMTVFRTA0MjgwMUY4ODE0MzVCQUY1QQotOjEwQkM4MDAwRkY5NDg5MTJBRUQ3QjQwQ0UxQzI3NTlBRkE1OTVDNEQ5MwotOjEwQkM5MDAwQjg4RUEyNUE4MkY2N0M2RTNGQTJGNkExRkU1N0VGQTFBMwotOjEwQkNBMDAwN0QxNUE3MEQ4MkRBQkJERkUwM0YyNzYwM0Y0N0VCRTM1RQotOjEwQkNCMDAwN0VCMTk5NTE3REZDMTcwMzNCNUQwQUVFMUZFMzU2MjBEMAotOjEwQkNDMDAwODAyOEQ5MjFFQTdEOUM3RjkzRUE2MkJBQzQ0MkMwRUYwMgotOjEwQkNEMDAwNzI1RTNBOUQ3RTRGODNGRDdBQTc5Mzk5M0UzQUREQ0UwMAotOjEwQkNFMDAwQTExMzgwODNERTU3RThCRjA4RkZFNDU1MjFEMjQzMDU0NgotOjEwQkNGMDAwMTQ3RjU4RTAyMzdEMjMxMTNEREQyOTBFNUNDRkRBRTc2OAotOjEwQkQwMDAwMEVGNzJBODk5RkFCNEE4OUY2OUU4NUZFMkMzMUQwMTcwMwotOjEwQkQxMDAwRTlFNzg5QzlFRkE2NzNENDdBOENCRjk5Q0U5NzRBNUZCOQotOjEwQkQyMDAwOUQyRjMxMzA4REY5MUMzM0Q4RTkwRTIwRkMwRkFBODJFQgotOjEwQkQzMDAwRUUwRjIyREQyNUE5OUJCRTNBRERDQzdDRjA5M0VDMTRGRQotOjEwQkQ0MDAwNzdEM0JGQkIxREU3RkE2NDM4MzMxMkJFNDFFMkZBMkI0QQotOjEwQkQ1MDAwMjBBNzFFRDdBOTkyQzc4NUZEQjhGRTg5RDIzOEI3OUQwNgotOjEwQkQ2MDAwRjQ0NTgyQTAzNDEyREJGMkZFMTU4MDc4NzRBNERBMTQ1NAotOjEwQkQ3MDAwNkFDQjNBMTFBNzI4NzhBRjNDRUQwMDI1MEFCRjcyNDg3QwotOjEwQkQ4MDAwMzRGNDNCNTJCM0Y5RkQ0QUM3NDBDMzdCMUQwMzRCMUQzRQotOjEwQkQ5MDAwRjRCQ0NBOTU2Njk4RkY0NjRDNDIzRTE0RDA3QjEzMjZFRAotOjEwQkRBMDAwRDJGODU1Mjk5NzFCREU5QjdBQjg2M0NEMUM2Q0FGOTVGMgotOjEwQkRCMDAwQzI0NTI0MUMxRDdCNjc1NTEwQkQyNkE5MjMwQ0YzQjY3NAotOjEwQkRDMDAwQTA1OTIxN0RFRUFDOTIwM0VCOTAxRUQ1NTJCMDdGM0U4MAotOjEwQkREMDAwRDI2RDcyQ0U2ODIzN0MxMjhDMjczQzZCMkMyODVBMzg4QgotOjEwQkRFMDAwRUYxQTc3Qjk2MUZDREFEMjQ5ODY3NUFCM0RENTg2N0UwQwotOjEwQkRGMDAwNERDMzU3QTBGNDA1MThEQjcwMTY5NDQyQjRFM0MxNTY0NgotOjEwQkUwMDAwQzNGQjg1N0JCNjE4RTYyN0VDMDMzOTFFREIxMUZCRDU5NwotOjEwQkUxMDAwMjY2QTBCREI0MzQ5MjRCRUI2QkUwRUJGQTUwRjhBNzA0RgotOjEwQkUyMDAwRDg1Qjg5RTg0MEM5OTFGQTU3QTg2RDcwMjAzREYwRjlCOAotOjEwQkUzMDAwQTkxOEQxMjJCRjU4Q0VGRDg3NjIwMjREMDhFRjI5NEJDOQotOjEwQkU0MDAwQzA0Nzc0Qjg1QjBFRTQ1MDFCM0JFODhFN0M0ODA3Mzg1MwotOjEwQkU1MDAwOUFGMkIwREM4N0UwMDc1RkE3OEE3MjMwRkE4QjQwMTM1MgotOjEwQkU2MDAwRjVBRjNDREIyQUZCQzgwRTZGOTRGREI2MDJFMkZCOTRGMwotOjEwQkU3MDAwQjhCRjkyREQ2RDk1ODBGODVFRTNCNDc4MDJFNEI3OTJDNgotOjEwQkU4MDAwNUFGMzk3NDZDOUQ3NjczRjg0NUJCQ0I5RTdFQUVCOEJBNwotOjEwQkU5MDAwNTlFNTk2MzQ1Q0JGMzlDNUQzQjI4M0VDNjZDNTg3QjMyOAotOjEwQkVBMDAwRTVGNDczRTc4MTRCRTkwQ0VCNzQ0OUE3RjdCQzQ1ODNENAotOjEwQkVCMDAwNTExRUU1RjhGMTBFQjJFQkIxOTUzMkUzMDU1NzU5MDM4NwotOjEwQkVDMDAwRUI3MTlERTUxNjc3OENBNkZDRUM1RjVEMTNBQzZCNDlCRQotOjEwQkVEMDAwQUZEN0E0MDlGQjEwRkIxNzUwMjU4NDNGQjZBRjRGQ0U1OAotOjEwQkVFMDAwQTNGNzdFMjZDMTdBRThERUVGRDY1MjYwM0NCMkQyMkNCMAotOjEwQkVGMDAwNDIwRjE0NTdCRjlCRjNFOEZENzg3RUJGQTQ1NEQwMTFDNgotOjEwQkYwMDAwQTY1ODAyNTlCODY0QzI0MUY3NkUyQkY2NTdFN0VDNzc5MgotOjEwQkYxMDAwOTExOTY4OUI3MkQ4MkYyMzVEREEwRTg2Q0EyNEQ0QTVBNgotOjEwQkYyMDAwMDEwRjk3OUZDQzE0RjMyMTBCRkI2RDM5RTNFM0YyRDg5QgotOjEwQkYzMDAwOEZFNTU4QzhDRTJDNDFCMzQ3NzY2NjQ3RDkzMzM5RTRFQwotOjEwQkY0MDAwMjc5NjVDN0VDNTAwRThDMUJFRTk2REMyNjkwOUQ0QzIwRQotOjEwQkY1MDAwRUVGRTlBMzQ5NUUxNEE1MEMyNDA3QTlENzA1QUUxNzFFMgotOjEwQkY2MDAwNjhDOEI2OTBGREQxRDc0Rjk4QTVCRUJCOTRFMEQ4NjMwMgotOjEwQkY3MDAwODUyQ0RBNUVGMTJDMjIzQzU2NUREMUFFQUU2MjNDMDREQgotOjEwQkY4MDAwREUwMEUxMTQyRkEyRkE0RkY0OTMyQTMxNTYwOUE3REMwMAotOjEwQkY5MDAwMUM3RjJFMUNGRkRDNTg5Q0E4MjIxRTdEQ0JERDg5NkVFOQotOjEwQkZBMDAwNkE3RjhGNDQxRkMzNzRGNzEzMUQ3RTRBN0YyRUEzREU2MgotOjEwQkZCMDAwREFEMDc4MUNERjQ4MzY1MThDMDcwMUU1N0E5NTREMUJBNQotOjEwQkZDMDAwMjc5MzgyRkRCRTkyMzZFRTVGRUIxRDRGN0M5NThERjM3RAotOjEwQkZEMDAwMEJEMkJCRTY3QjFDMjlEREVCN0JEN0FFMEQzNUY3NDhEQQotOjEwQkZFMDAwNEYzQkZCRTU1NTEzQUMwMUJCNzQzMTc0OERCQjAwNUQ1OQotOjEwQkZGMDAwMTMwNDVEQ0ZBMkY1Qzc3REVFNzI4ODdEM0U5NkQ0MjFGNQotOjEwQzAwMDAwMjQ2RkFCMkQ2ODA1MzIwMEY2QkI3Q0Q3OTM1Q0M3Q0FBMgotOjEwQzAxMDAwQzEzQzdBM0UzN0MxMzNBMDBDRTVBRkNERTYxOTcyMEZCMwotOjEwQzAyMDAwRDk5NTZEMzFFRTc1Rjg1RUY1OUQ5RjNEREU0MDdBM0QwOAotOjEwQzAzMDAwRjU5RjM5Q0QyNDM3OEEyNzZFMjRFRTUzRTdGQThBRUQyRgotOjEwQzA0MDAwNDE5NTlDREI4N0UyOUQyRTNBOTIzQ0UzOUUzRkI1NzQ3RQotOjEwQzA1MDAwRjdDOTNFMjQ3NEQzRDU5Mzg5RTNBQkEyRThFQzcwOTA4MgotOjEwQzA2MDAwRkQxMkZENDdEM0RBQkM0Q0E3REIxQzRDQTdBNTlBNEVBQQotOjEwQzA3MDAwMzUyNzQyOEIwNUY1RTFBNDZCQzNGNzQ5MUU0RTZFQjQxQwotOjEwQzA4MDAwMDJDNTRENkQzNDQ4RkUzMkM3QzE3QTA1QzlFMTk0NkFENAotOjEwQzA5MDAwRDQ4M0JDMzcyRDVFOEFDQkRBNTEzRTNDMjQxRkY1RDlDMAotOjEwQzBBMDAwODZGNTRFOEU3QjM3MjkwRkRGM0I5OUFDMjQxMTdEMTYyOAotOjEwQzBCMDAwODY2RDRDQjc5QjE1MDhEQUQxNUVCNjI1REY1NjU5Q0U5MgotOjEwQzBDMDAwRkFBMUYyNzhBQkI2Q0U2QjU5OUVGQkQyRDhFRjhDNzc0MwotOjEwQzBEMDAwN0Q4Mjc4NDk5RTMxRjIzN0MzN0JFNzE3NzlEMDRGNzQ2MAotOjEwQzBFMDAwRkI4ODc0QUUyMzM0OTM3QTk3ODNFNjcyNDc4MEUyQ0M2MAotOjEwQzBGMDAwQkFEMjY1QjlFNDFGOTYyNDY2MEYwMEM0QTM2RUJDQzQwRgotOjEwQzEwMDAwRkVCNkFFRTEwQkE2QkJCRUJFNzI1QTA2QjU2Rjc3N0YxOAotOjEwQzExMDAwN0M4NkNBRjY0MDUxM0MyQzBGQ0E2OTFCOEZENzM0OUNEMQotOjEwQzEyMDAwNjQzQjhFRTBBNDkxREU3NDJDMTNGNkFFQzUwQUI3NTRCRQotOjEwQzEzMDAwNjM1QkYzQkZGMjJERDUzOEJGMDY0MzBDRjYxN0IwRDNCRgotOjEwQzE0MDAwQjYyNENBMUU0MkVCRTc1RDc2QkYwMDc5Qjc3QUNBNUJCOAotOjEwQzE1MDAwQjE2NDY3QUIyNUQ3MEM0MDFDOEVBNkJCQUE5NUQxRDg3RAotOjEwQzE2MDAwOEY3MUNEOTBCMERGQjZFRThDOTdGQkE5QUUxOTE2RUNBRgotOjEwQzE3MDAwRUY0QUJCNDk4QzBGNzRGRERDRTIwNkY4N0NERDVEQTI2MgotOjEwQzE4MDAwOUZFNjNBNDBGRDBGRDMxRUE5NTYwNjYyM0Y1RUM4QzEyNgotOjEwQzE5MDAwNkZEMjZBQUJGREI5MjQ1RjRFQTZDQjg5MTU3MUFDMUY3NwotOjEwQzFBMDAwQkREMTc5NUVDM0NCMDZCQTlDMzMyRTRCQjc3OEM5NkUyRQotOjEwQzFCMDAwQ0MxNDc2RjFEOENBNDE2QjM5MUVDQTBDNjVEMzlFNUI4QwotOjEwQzFDMDAwRDM0NEZDREExRjc5NTM4QUZGNUU0NUJENzcyMDFEOTI2OAotOjEwQzFEMDAwMzNDMDYzQzFGOUM5MkZBMjNGQTJGOTFGODc4NjEwRkRBMgotOjEwQzFFMDAwRTZCRDE4MTM5NDkwMUY4QjlGNzhDNTQ2RkU2OEFFQUNEMQotOjEwQzFGMDAwNjY5MzVFQkQzRkNDQjc5M0U0RTM3ODdDODhGQkYzMUE4QgotOjEwQzIwMDAwQjYzMzVDMjk1OTJFNjFBNzVEOURCOTVFOTRDRkY5RDBGNAotOjEwQzIxMDAwNjJBM0YxRjlBMDFDMjZCRjYxNDE2MUE2Qjg2NkExNzNCMwotOjEwQzIyMDAwOTc4REUyQjI4NTRGNUIwRjg3QTNGQ0VBMjIwODFGMjI5RAotOjEwQzIzMDAwM0RBRDc5RDY3QTM4MUNFNTdGODFERThGOTJBRkMzMTY4QgotOjEwQzI0MDAwMDE4N0EyRDE2M0FFMUM5QTZEMTM3MDFEMjBCODE2MjcwQQotOjEwQzI1MDAwNjE3QzJGOTNCQjA4RjVGNzcxNUM1NDkzQzM3OTQ5NEEwRAotOjEwQzI2MDAwMkM5MERDMkRCRkVDRkQ3QzVGMEY3RUIwQjUxMUZEM0U0OAotOjEwQzI3MDAwQUFEQ0E2QzYyRERDQUVDMTM1QzlFRTBDNTBDMjM2MzdERAotOjEwQzI4MDAwQUU1M0FCRDlFNTkyRDA2MTFCNDRCRDdGNDJBMzZCOUZGNwotOjEwQzI5MDAwMkQxMjhGRUJGNkEyN0IzQzVFRDAyNUQ3MzNDMjgyNzA4NQotOjEwQzJBMDAwMkM5RUI2NkYxQ0YxNDVFN0U3OTU3MUQwMUE5M0M0N0NCQwotOjEwQzJCMDAwNzE2QjdDNzExMzVGNzRGQTIzM0QwQjE1N0M2RkQ3NTkzQQotOjEwQzJDMDAwN0MyRkFEMjdCOUQwRTkyRkUwNkQ4QjE1RjZBMjczNzNFMwotOjEwQzJEMDAwMENDNzRENjZGOEUzRDIwNUJDM0ExRTQzRDNDRjBGRkYxRgotOjEwQzJFMDAwRDBGNEVGMDZGRUExRTk0MjhGQ0Q3OEU4N0FBQzNGRDdEMwotOjEwQzJGMDAwRjVEODhDQjcwRUY3QTVDQjU5Qzg3NjMxNzJBNkRCOTk2NQotOjEwQzMwMDAwNUFGMEU1RDBGQUJBNUREMUU5QUNDM0E5RDNBQjhERjI0RQotOjEwQzMxMDAwQTExRUUwNTQxQTVFMzJFMEEzODQyQTI4ODk4MDcxRTlDNAotOjEwQzMyMDAwRTlDMjhFQjU0RTAyRTI4M0QyQjA5NUU3NUQyQTNFQkFFRAotOjEwQzMzMDAwQkRFRDBEMkZERENFOUFGMUQzRURBRDhFQTc2RTc3NzVFNQotOjEwQzM0MDAwN0NDQkQwOTBCMDNEQzQzNDlFRjJBQzJCNEZGQjBDNzEzMwotOjEwQzM1MDAwNzAzOTJDMzBDNEM5OTU4RTNCMERGRDJBRDczRDg2RjkyNgotOjEwQzM2MDAwNTdBNTJDMzM4QzRGNTI1NzFBQzYyN0U3M0M2MkU4NUYxQgotOjEwQzM3MDAwRTNGRUE1Mjk4RTVGNkI4QUUzN0Y2MzE4MUYxNzBFNzE5QQotOjEwQzM4MDAwRENGRDdBRTM0NDUwOTA0N0RGM0JEMkM5RjE3N0IwRDE2RQotOjEwQzM5MDAwQzVGRDlEOEQyOURDRUU2QTU0NTlCRjc3MzdFNjcwQkIyOQotOjEwQzNBMDAwQTdEMUNEQ0ZGRkRDNThDQUVEQkU0NjBGQjdBMTQ2MkZBRgotOjEwQzNCMDAwQjc2NkJCMzBGNUY5RUIxNUNBNTc0QTQzMkQ5NTY0Q0FFOQotOjEwQzNDMDAwNzc2NEY4N0U5MjhFRjQ3QkMzMTI2ODhBNDczQThENkE0RQotOjEwQzNEMDAwMTdGMTM5Q0MzN0ZCRTM1Mzg3RUUyNUJGRUVCMkI5Qzk2RAotOjEwQzNFMDAwMUYzNkVGMTgyREE5M0RDNDczMDlFOEVGM0M1MUYyOTJCNgotOjEwQzNGMDAwMzAyNTBDMUU4QTdCRDAzREY3MjQ1RjJERTkxNjk2NDcyOQotOjEwQzQwMDAwMzJGQjgwN0EzN0QzMDFENjY0RDRCNzk5MzMyNTc3MTNCQQotOjEwQzQxMDAwRjA3MzNGMjQ3MTFCRjRFMUY4NTQwNUZDRTRGRkFCOUQ3RAotOjEwQzQyMDAwNEFEMDlFQzBBMDc5MUQwOEU3MEMwMTI2RDg2OTlDRkM2MwotOjEwQzQzMDAwNzc3MjVGODVFMkQ2RUJFODIxQzIyQjdCNjRGODFFM0U2MwotOjEwQzQ0MDAwOUY1MUZBOTczMzk0MzdERkU4NkNCNTkyOUNEQ0IwRTdFNAotOjEwQzQ1MDAwODE2M0Y3RTIzODM0RkI4QjQ5M0ZCQUUyMDZGRkZCOTY3MwotOjEwQzQ2MDAwNEI4OTFCNUEyOEFFNDQzQTQ2MjQ3N0M4NDNGMTRFQTI2MgotOjEwQzQ3MDAwRTI4RUNFMDdGNEY2QjY3NDkxMEY0QzZERjJDQjA5NDhGQwotOjEwQzQ4MDAwQ0ZDRTM3ODFFMzM4NUQxRjExQkYxNTA0QkZBRTE3RDU3RQotOjEwQzQ5MDAwMkUyNTM4MkM4MUZDRkQyMzk1MzRCRjY2QkZDQTc0RDE4QwotOjEwQzRBMDAwRjU0MkQ3MDMzRDBGRDRGNUEwNEE3RUI2ODlFNjlGMzgwMgotOjEwQzRCMDAwMDg5QzRGOEZFQUYwMUQ3OTlFRjAzNEM1OURBNTlEMkRGNwotOjEwQzRDMDAwOTU5NDk3NUQyODZGMUM3M0JBRjUxNTlBQjdCREQxQzdCRgotOjEwQzREMDAwNzJCNEI1NzEyNkI3QzFDNkY5OUE3Q0Q2NzM3RjU3NjMxQgotOjEwQzRFMDAwMDNGNzc3MzdGQUI5REREM0I4NDI5M0NGMTYxRURGRDdGQgotOjEwQzRGMDAwRjgzOEY3NUY2RjBDNjg3MkJBOTE5RjhGQ0YxMEZFRjcxNAotOjEwQzUwMDAwOEI1MEU1MDA5MkJGMTdEMzQ1MUQwNzFDRTU5QzQ3ODA2MwotOjEwQzUxMDAwMjJEQThCOTU5MzlBOTQ5NzQ1M0M2NTkyMEZCMzVDRTgyOQotOjEwQzUyMDAwRjIwMDY4MzcyNEE0RDc4REU4NjdDOTNGREMwNEZFQkM1RAotOjEwQzUzMDAwMzlEOENFOUNENzYyMUQyQjdEN0JCOTU4RTg2Q0U2RjhDNAotOjEwQzU0MDAwQzM2QzBGMTc0MDkwRUREREI5RjY1REM0RkYxN0IyRUY3NQotOjEwQzU1MDAwMzJFNkFCRTRBRjc0RkJCNzE4QzJCQzlFNURCRUQzNERGMAotOjEwQzU2MDAwRjU5NEVGQ0VBRkI4MzRCRjAyNzM2ODdFNTdERTFEREJBMwotOjEwQzU3MDAwM0U1QkI2NUMzOEVGMkUxQTJDRjhBQUU3REQxODNGMDJCNgotOjEwQzU4MDAwRjlFNTQ4NDBFNkI4N0E3RTVBNEIwMkU3RERBNTlEMDlGOQotOjEwQzU5MDAwMTQwNzJDRDgyNjMzM0YzMENGNTQwNjIyREZFNjY5N0NCRgotOjEwQzVBMDAwRUI4MEUwM0JDNDk3NzlFM0U2NzE1RDZFRkUxQTIzM0VCMwotOjEwQzVCMDAwMEI5REQ3RjUwOUFBM0RDNjY5M0RFMjU5MEIwRjdGNEU4OQotOjEwQzVDMDAwRjVCOTVBOEQ1RUZDMUNFMTY5NjhCRjYxRDJBRUE4NzlFRAotOjEwQzVEMDAwMzExOUYxQzk5RkM0OTE0MkMxMjhBMjA3QzJFRjBFOTIzRQotOjEwQzVFMDAwOUVFRDk3NTlDRjdBOTM4QkUzOTg5RjkwOUM5RjZBOUM3RQotOjEwQzVGMDAwMzk2OTE3Q0FGREYxQjM4RDlDN0YyNTY1M0NGMjg4N0ZCMAotOjEwQzYwMDAwREM3N0M3QUZCNTU5REVBMTE5OUMwRjg1NkRBNDNGM0EwMQotOjEwQzYxMDAwRkY5NjkzOEQ0NEI4OTc1NzM4MDI5NDY4NDc4QTVEMEEwRAotOjEwQzYyMDAwRUQxRjkxM0M3MjNDRjFFMzIzNzAyRjQzRkE5NTZGN0QyRgotOjEwQzYzMDAwRUQyMEU5NDdCOUMzQzlFNzA4ODg0NDQ3MzQzRjQ3RUZDRAotOjEwQzY0MDAwRjczNTM5NzFERUE4N0QxRTk5QzJGN0UyNURFMTI2OUFDMQotOjEwQzY1MDAwQTZGQjFCRERGRjhDRURFODk0N0Q1QzE3Qzg2NDNEMDJGMgotOjEwQzY2MDAwQ0MyNUJFQzlCODc4M0QzMkU3OUI0RDk0NkZBMjQxM0FDNAotOjEwQzY3MDAwRTk5Q0MwRjA5RTBDODI5QjlFNzdEN0I1NDRCRDY5RUNDNwotOjEwQzY4MDAwNTk4RjlDODBGMDJERDdGMkMzRDExRjdCMTk4RTZBODdGQQotOjEwQzY5MDAwQ0E3MjY4RDdGMjQ5N0I4QTA1M0M1MTc0NzREOTdDMUJGNQotOjEwQzZBMDAwQTlGRTA5N0Y4Q0UxM0FBRjE5QkVDOTE5QzI4RUFCNDkwOAotOjEwQzZCMDAwREVDOTRDNUZBNzlBNEQ3OTQzOTVEQ0IxRTFENzI0MEZEMQotOjEwQzZDMDAwNkQ3MTZFM0JCRTY3QjZCN0JBN0RFQjJENkVBRjczOURENQotOjEwQzZEMDAwRUMzMThFRDREQjNBOEIzODM3MTg1OUE5MTY1MkZFNDcwNQotOjEwQzZFMDAwRjEyNUU1ODU3QTlFNjg5RUVGQ0JBQTk4OUREMThGRUJDOAotOjEwQzZGMDAwQUIyMTBGQzFFNUIyOUM1NzRFRUIxQTNFM0Y2RjlFQTY5MQotOjEwQzcwMDAwRUY1RkI3QUREODM1MzdBQTBFQjIyNjQzM0Y1RjUwNUMxNgotOjEwQzcxMDAwOUYzOEJBRjk3NkIxRkMyREVCOUM2OUYwM0ZGRkU5RjE0NwotOjEwQzcyMDAwREE1NDBDNzMyNEQ0QTEzQzI5MjBFMjA4MTBGMUM0MkM2MwotOjEwQzczMDAwMDg3MTNCMUIzQUI5RjVBMTI0NTEzQjE3RENEQ0RFMDYzRQotOjEwQzc0MDAwNUU2RUJGQ0VGNEFEMjZCOTg5NTgzQkZCOTMxRTFGN0JBRQotOjEwQzc1MDAwRTFFQjVDOTI4QjYzREYxQkVCNEE1M0JCRkRBQkVFNkZFRgotOjEwQzc2MDAwMkZENUFGQzZEMkY5NTIwRkYyQjA0MTkzNUJERDZFRjcxMQotOjEwQzc3MDAwQ0ExRjkzREQ4RThDNDBGQjgwNzA0NjM2OEI3M0IxNDhBOAotOjEwQzc4MDAwN0M2QzgwQ0UwMTc0RkIwMDdFNjNCQ0E4REI4QkMyNTkzRAotOjEwQzc5MDAwRUUzN0I4NUVCODRGRTZCQUE1RDk3RTU0MjkyMjhGMDc4NgotOjEwQzdBMDAwQzU5RDQzRjU1MTdERkYyNjBCQ0MyNzM5REI4OEVEMUY1NgotOjEwQzdCMDAwMTA4RjNFQjNDMjhBMUE4NUNGNzYwRDhGRjIxQkM2MDM0NwotOjEwQzdDMDAwRTUyRjUzNUQyMjNGOUNFQTgwRTREMzY0REJDRTlFQ0MxMAotOjEwQzdEMDAwOUQ4MTg2NjAyQUM1QTMyOENGQTM5MjNDN0YyMjdBRkI0NQotOjEwQzdFMDAwMUYxQTk3QzhFNzBGNjQ3Rjg2MjJGRjNFMTJFNzM2QjAxNAotOjEwQzdGMDAwNDAwQTY0MjEzREI2QjQ4OTdFREVFRDg5OENERjREMTBBMAotOjEwQzgwMDAwNjQzRURFMEM2MTJCRTE3RjBCMDBEQkREMzlBMDcyN0IyNwotOjEwQzgxMDAwMkI3ODk4OUZCODcyNUMzRURBQTFEQkRCOTQ5MUFCMTA2OQotOjEwQzgyMDAwQ0Y4MkE0Q0U3NEQyQ0ZCQ0QxRUYyNTQ5MDg1NzNFQzVFNAotOjEwQzgzMDAwQkY0RUFFQ0RBQ0EwMzg0NUM3QzM5MjI5RjBCODJDRDNCQgotOjEwQzg0MDAwRjMzNkMxNTc5MDE0NUFCNTlBRTJDMkNEMTZBMEI4RjA4QgotOjEwQzg1MDAwRDNEMUY3REMwMTUxN0VCNTI0QUJFMjIwQ0Q3QjRFMTI2MwotOjEwQzg2MDAwRTc4NUZFNkQ3NjUxNTc4M0NFRkVERUE4NzhGQ0VCQ0NEMwotOjEwQzg3MDAwQ0E0M0E0RjdGRjIwRDgzOEZGNURDNUU3NDhENTJFNDE0RAotOjEwQzg4MDAwN0IxOERGOEY2OTgwRUYwREYxRTZGNUE0OUY3RUI2OEZGMAotOjEwQzg5MDAwMDU0NDRCNTEyN0Y0NDMyOUVGQ0JGREFGOUVGQUEyQkFEMgotOjEwQzhBMDAwNTlFMEUzQTc3OEFDMjRDQjE3QTFGRDBBNkM2ODBBMDkwQwotOjEwQzhCMDAwRkUyN0VDODE3NTFDMzdENTBGQTFGQUM1QkMyN0VEMTZGNAotOjEwQzhDMDAwRjJFM0VGQTExREE2NzNEMzBGMUExRERDN0U4OEY5MERDQwotOjEwQzhEMDAwQjU3RkMzRkM4NkRBOEYzMEJGQTFGNkVGOThERjUwN0JCRgotOjEwQzhFMDAwRkJFOTExMjg0NDAwM0ZDQ0Y0RkM2RkM2NzlGMEU4REQ4OQotOjEwQzhGMDAwQ0UwODNDMjIxMkNDRUNFOUJDRUY1NDg2QzgzRkYyREJGOAotOjEwQzkwMDAwM0U3RTIwOEVFNDYwOEJFQzI2MzlDRERCQUM3MDFERTJFMAotOjEwQzkxMDAwRjhENjUxMDEzOTJEOUFBRUJFQjg0Qzg0MjM3RkNCREJCQgotOjEwQzkyMDAwOEY4RTJEQTJGNzE0OTc4NEYzOEY2RjM5RDk5RkYzMjYzQQotOjEwQzkzMDAwMTM3QzVERjREODY2MTNGNEQwRTA3RDJFMzFCNDhBREUyQQotOjEwQzk0MDAwN0Y2RTczM0E0MTg4NzYwNDg0MUMxMjNGN0JBOEEzMDE1MgotOjEwQzk1MDAwMkM2MzNFQkU5RTIxRTJBNzZCRUQ5RDQ1RDFFNzlCNDAzNwotOjEwQzk2MDAwMjEwM0Q1MkIzNTNGNTMyNTlGNEQwOEU3NkE3NURCRDE1MQotOjEwQzk3MDAwMjRENzk5NkZEMDdFRkUzRDQyMEY5MUFGODZCQTQ0QTU3MQotOjEwQzk4MDAwMjY4NzdBOUJCN0NERTYyNTdEN0E2RURCM0JEMzI2MjNCRgotOjEwQzk5MDAwMURBNjhFOTk1NDJDQUJEREYzMEIzM0ZCRjFCRTc5QTNBRQotOjEwQzlBMDAwQ0ZGQzZBNzUzMkNGRTc3MzhCMUI2MDZEOTUwQkU3RERBQgotOjEwQzlCMDAwRTREOEYxMkE5MUUwNjZENzQ3NTU4OUQ4QkYyNTQ1REFGMgotOjEwQzlDMDAwNERFRDFDMzU2RDQyMTJEOTAxMDhGMDNFQjdFNjk0RUZFQgotOjEwQzlEMDAwMjYxMTlCRTJBRUI2OTE1RjJFMjdBNThBQjJCQjk1OEUzQgotOjEwQzlFMDAwMzgzQTQ5RURFQTU3QjlGQTFBRkE1N0E1MEMzMkNDOUZGMgotOjEwQzlGMDAwQTQ2NjE4QzYyN0U3MEMzNzhDRUJGQjRFNzExNzFBRTZCNgotOjEwQ0EwMDAwOTFCRTUyREM4Qzc4MzBERjYxQkRDQ0U3MzI3OTlCQkZDMAotOjEwQ0ExMDAwNzg3RjExRTM3RjQzMTFFMTFGNDFGQUQ5MzBCMDM4NTJEQQotOjEwQ0EyMDAwQkFGMjE3QUJDOTZDNkNERTk5QzBFN0I0QTZGOEI0NjY2RAotOjEwQ0EzMDAwREI1M0JCM0Q2QUVGRjFFOTk3QjBCNUM3QjhBRUI2OTcyNwotOjEwQ0E0MDAwQjhFRTYyRTM1M0I0MUY4RjkyRkQyODc4RTEzQTNFNzc0NwotOjEwQ0E1MDAwN0Y2RUY0OTlDQjU0QzRDQjk3ODk3MTJCRDkzRDUzRENBRAotOjEwQ0E2MDAwMUFEMUUyNTZCM0ZDNzRDOUE5QTQwQUI5RDkyQjAzQzVEQgotOjEwQ0E3MDAwNDE3QUZDNkE5NjFGODAwNzM0RkYyRkRBNEJENUYzQTk2MQotOjEwQ0E4MDAwNkYwOTdGRjUwRkQyRjdCRUQxNzJBREI1QTY3QTQ0ODE5QQotOjEwQ0E5MDAwMERGRDBBRDUwOUZGMkFDMzNBN0E3MDE2RTFEMEU5OUY0NQotOjEwQ0FBMDAwRDEyREY3NzBEQkRBNTcwNzE2RjE3MzdGM0M2RTU5QUI2NwotOjEwQ0FCMDAwRDUyNzdFOTVBOTlERjNEN0VDNzg3NTYwNzJGNzM4RENBMQotOjEwQ0FDMDAwRjU5MTYxM0VEQzI3RUQzNkY0OUJEMzhDRkQ4N0NCNzc2NwotOjEwQ0FEMDAwNDdCRkRGOUIxRDlBQjdFNjRFOUI4RkVBRDI4Rjg5M0FGQwotOjEwQ0FFMDAwQTU3OTVDODdBNzZBNjc4Qzg3RUNBNUIyRDVDRUY5NTA4QgotOjEwQ0FGMDAwQURDQkMzRjUxM0E1OTdGQTg5NkUxNzZFOTBBMUJFMjcyQgotOjEwQ0IwMDAwRkJCNjVFNUI3N0NBQ0UxODkwQkZDNUJBRUZBMUFDMTA3QQotOjEwQ0IxMDAwM0NGRTE3ODU5Rjc5QUY4RjA3QkM1MUZCQjQ2NjhBQjg3RQotOjEwQ0IyMDAwRUY1ODYyQ0I4RkJGQzI3OUM3NUUwMjM3OTFGRTU4QTIyMQotOjEwQ0IzMDAwQjBCN0Y5NkQ5RjVBMkNFNDI3NjI4NUJDRTRCQkMyOTY1RQotOjEwQ0I0MDAwMjRCQUVGMzIzRkNFNEZFN0M5NzUwQkUyRkQ3NDZFNTQ0NQotOjEwQ0I1MDAwOTBERUY5OEUwMzU5QkZFNTY5REZBMzBFOTRCQkY3MkQ3NAotOjEwQ0I2MDAwMTY4M0RGODk5MEFEQzNGRThFNENERjM0RjIzQjkzNzdBMgotOjEwQ0I3MDAwQzYwNDJEREYwMjlGMUQ5OTIwRkM1QTg1RDBGN0Q5MjRDOQotOjEwQ0I4MDAwMzdGQUI5MTg5QTlBQkEwN0MxNzA0RTQ2Rjg1M0ZGQ0NEMwotOjEwQ0I5MDAwRDNCN0JFRjUxOEM1QkQ3Qjg1RkVFM0IwRDM5QzhGREU1MQotOjEwQ0JBMDAwMTQ5NThGQzIxQUExQkYwRUZDQTUzODY3RTFBRTE2MUIwMwotOjEwQ0JCMDAwRTU0OURGOTVERUI3NjczQUJCRjU3QkQ4QjlGQUFDRUI1MAotOjEwQ0JDMDAwN0JERDAxQTFFRjI3QjY3RUY5MTZEOUY1MTNFOEVGQTJCOAotOjEwQ0JEMDAwRjVCRENCMkY2QTdBNUVGN0I4Q0NGQUE4M0YzRkJFNTVCOQotOjEwQ0JFMDAwOUUxOEU4ODFCRUFGNjk3MjAwQUU2Q0MzQjlEOTkyQjIyQgotOjEwQ0JGMDAwNTNEM0M4QUYyREQ5QTZGMDc5NjA2RkZFQkE2RTg1RjExOAotOjEwQ0MwMDAwOUNFQ0I5RURGNkY5RTIxQzU5RTAxMUQxRkRFOUI2MkYyMwotOjEwQ0MxMDAwOTNDQTczNDVCQjhDQ0Y2QjVCMzRCQjIzRTIxOEY0QTM4MAotOjEwQ0MyMDAwRDY2NEYyQTNENTEyRDdERjBFNkMxQkMwRjczMzBFNDhDMwotOjEwQ0MzMDAwMTA1NDQ3RjIxMkQ3Mzk5MDZGRDNDNTcyRjREQzQ5RjEyMgotOjEwQ0M0MDAwMThBNEU0MjhCNENGMzQ4RDlGRDNCNUJBRDA4QzZEMzNGQgotOjEwQ0M1MDAwQjI4ODVGRUZCNENEM0RFMDIxRjRCMjMyNTg3RUFFMDcyQQotOjEwQ0M2MDAwM0ZDNzgzMDcxMkJEQTk3NDRGNjE2QTkzOTBFRjAzODk5MAotOjEwQ0M3MDAwOUQxRDU0NDczQTUwMTYyN0QxNzkxNEFFREYxQzFERUY4NQotOjEwQ0M4MDAwMURCMDdBNTNFQjE5MkZGRDdDRjIwQUY5OUJCODRCQzgwMwotOjEwQ0M5MDAwODMzNTdCODhGQ0Y0NEIyMjlGNjNGOTU3MDYzRUNDNzJBOAotOjEwQ0NBMDAwQjUwMDAyQkIzREI4NkZBRDNCQzg3MUU5MjIxMDc5QkQzQwotOjEwQ0NCMDAwMzk5RUFGMURGNzk5OERGQzgyMzlGRjJDREZCMkUzMjAzRQotOjEwQ0NDMDAwOUQ3QjlDNTM4NzMwQzlFQjg1RUEwRUU2QkNCN0I3RkE2QgotOjEwQ0NEMDAwQzFBODI0NkY2MTU2NTRERENGMUM5Rjc3QzVBMTdBMUM3MwotOjEwQ0NFMDAwQjUzRThFQ0Y4NTVFMjlGQkVGRTM4QkIwN0ZEN0ZBMzg1OAotOjEwQ0NGMDAwMTdFNUQ5NDc5RkI0RkJDOTJFMUY1RDY3MEY0ODM4N0VFMwotOjEwQ0QwMDAwMzRBOUIzOURGMjhFQTM5QkYyRENCODAyQ0NCM0E4QkZDQQotOjEwQ0QxMDAwN0I5NkZDRkE2RkFEMkMxNzAwQzY3QjBENEJDQUVFRTY3NgotOjEwQ0QyMDAwRkI3RjRCRDZDNzRCNzQwRjA3NTJDNEI4OUVGM0M5Q0ZENQotOjEwQ0QzMDAwQzQ3MzVDQjBFMEY5ODE3Q0NFQTlGQjE3RDIwRjNBOTc5RgotOjEwQ0Q0MDAwM0VGMjQ0OEM4NzgyRkNBMzdCQTZGN0ExN0E1Rjg3RTUzRAotOjEwQ0Q1MDAwMEY3QzlFMEZGMjdEODdFOEJDN0VEMTg2Rjg5MTE0M0Y1MAotOjEwQ0Q2MDAwNDAyRTMwREZFNkFGQkI5Q0NGMzc3RkFFRjg2NjEwRkVCQgotOjEwQ0Q3MDAwOTVDRjVDMzM4MEVFOTUyRDc4QkIxRjEwM0U5MUFEQ0ZFMwotOjEwQ0Q4MDAwRjNGOTVGNzc5Q0RFNzM3Qzc3NjI2QjQ2MUZDOEVEQTY3NAotOjEwQ0Q5MDAwOTM1RTA3NUNGMUY0MzIyRkYxQkQ1ODUyQzUzOTBERDRDMgotOjEwQ0RBMDAwN0IwNjkxNUM2Q0E5MDY1QTc3QTQyQ0VFOEQ3NkFFOEMyRQotOjEwQ0RCMDAwRTNCOEQ0MkM3NzM1NTkyMjBFQUNEMUVCMEQ3REMxOTE1RgotOjEwQ0RDMDAwNDJGQUUzMDNBNjQzNjRFNUYwNzU3NDFFRDY5Qzk1QTQ2RAotOjEwQ0REMDAwRjlFOUNFRUM2OTUxRjcxMkFCRTRGNkRBOTc0OTNFRDdBMAotOjEwQ0RFMDAwRDhCOTBFRDIxMUQzRjMzOTU4NDM1NjIyQ0Y5RkU3MzAyQQotOjEwQ0RGMDAwOUU5QkQ3MzY5QzMxRjY3MzMxQkZDM0Y3NDczNkE5ODU2MgotOjEwQ0UwMDAwNzc2MkJCNTRBM0ZGRUE1NEVGQkQ1OUY4RkVDMkQ2NDc4MAotOjEwQ0UxMDAwNUVEOEM3NzQ1OUYzQzNGNzY5REYzRDRFNTE3RkQ5MjdGOAotOjEwQ0UyMDAwRTg2NzhFRkZFNzM5NDQ5RDAzNjAyREVGQUYzRkZGRjRDNQotOjEwQ0UzMDAwODk3N0Y5N0NGNUQzQ0RDM0IzQzVCOTcxRTg5MzVGQTcwMgotOjEwQ0U0MDAwRjE3OUYxQTE3QkIxRERCNEU3MkRFNjhCMTlERTczQ0U2QwotOjEwQ0U1MDAwRkQyNDg5RjFBRDIxM0NGQUQyRjlBRUY3MTE4MjEzMTkwNAotOjEwQ0U2MDAwQzE3OURCREM1NTc5NEMzRkZERkMyRDcyQjRFN0ZDNDQwNQotOjEwQ0U3MDAwODc1MzVGNUY4NzRGNUY1RjlGRjc2NDk2Qzg2MzY2NkJGQQotOjEwQ0U4MDAwRjlDMTMxNUJFODM4OUZBM0JGMzA1Q0EyRkE1RUQ3RjNFQgotOjEwQ0U5MDAwQTQ1MDdFNjI5NEJDN0M1N0Y1RjQxQkI1N0FDODQxQ0I5NAotOjEwQ0VBMDAwQjIxRkQ4RTg5RTVDRUI2QUFCMkZEQUVFNUQ2MjFEQkQ2NwotOjEwQ0VCMDAwMkIwRUY0ODBFQUVBMkY1QzA5RkIyRDQ0NEVFOTRGRTc4NAotOjEwQ0VDMDAwN0Q1QTlGOTQwMUZCRTMzNEYwMjQ4Mjg3RUUwRDZBMkQ5NgotOjEwQ0VEMDAwMkNGNEE1NzA5RDlDRDY5M0U5MUE2MjgwRkI0REU1NkVGQgotOjEwQ0VFMDAwOTVEQTJCMjVBRjIyRUU3RDA1NThGRTI3NDBGRDYwQzI2NgotOjEwQ0VGMDAwQzNFMjA4RjNCOTk4N0VDRjY1NDZFMkYyNkJEMjcwQkYwOQotOjEwQ0YwMDAwRTY3RUIwOUNFMjk4NjZBQkQwMEJGRjlDMzhDRURGNzQxNwotOjEwQ0YxMDAwM0FFOTdFMDY1Q0I5MDZGRkQyRUMwMjU1QzE3NTY2MkE3NQotOjEwQ0YyMDAwQjBDMjlBMjRFNjBENDUzQTFGRDgzM0Y3NTU4QTEzREU2RQotOjEwQ0YzMDAwNTVFQUZCRDFCRUVGMzkxRkNCOTMyQzE0REYwNUUyMjk1NAotOjEwQ0Y0MDAwNDc3Q0ZGQURERjE2RkYxNUU3N0UwMDlFMzIyN0NBQ0Y3NAotOjEwQ0Y1MDAwNzVBRjM5RDhFRTlCRUIxMUI3ODM4RkZCRjMyMDZDRkRENwotOjEwQ0Y2MDAwMDJERkZCREJFODdGQURERjA5REQ3OEZENkRDQzU3OUI5MQotOjEwQ0Y3MDAwMjkzRkI4MjlGMTgxNjI3QTVGQkY4NzY5QkVFRjc3RDQxNAotOjEwQ0Y4MDAwRTVFNDdCODFFNjdCN0ZENzgyRUYzM0IyNUJBNzJDQkVFMwotOjEwQ0Y5MDAwNUE1MUZGQTgxRjQ1RkUzNzkyNjgwMzA5RTc0N0ZBNjkwRgotOjEwQ0ZBMDAwRjQzODA2NEM4Rjg4NTU3QkZGNzM5NUZCNDU5NTIzQjk2NAotOjEwQ0ZCMDAwMUUwOUE3NTRCNkM3NjM0REZFQTY2OEI4NDVFNDYxREZGNQotOjEwQ0ZDMDAwODhGOTY1OUQ4QUMxREYxNDE1Njg3NTlCQUY1NThFNEIzNgotOjEwQ0ZEMDAwQUYzQ0FEOUNENzFGM0Q5NDJERUM1OTUxNUY0QjdENEYxRAotOjEwQ0ZFMDAwRjFBMTlBMkRGNEE3MDk4MkIyQzA0N0M0MDk2M0JCRTQzQQotOjEwQ0ZGMDAwQ0EyMzEzRkY2QUI1N0UyREY5MzM5NEE3NDg4MkMzNEYyNQotOjEwRDAwMDAwMTcxREM3NkUxNUYyMzU1NjA5RUVBMDE2QUQyQjM0NTAxQwotOjEwRDAxMDAwNUNCMTA1RkQ5RDBFMDc5RDExQTYwQzY3MzkxOEEzQ0JDOQotOjEwRDAyMDAwMjdBRTM1MEJFNzJEOTdFQTM5NkY3MTUwM0M4M0VEMkExNwotOjEwRDAzMDAwMjlDNDcwN0MwRjNBQjlGNTY4N0VCQzAyRENEQzhFMDcyRgotOjEwRDA0MDAwMkZCNzI4OUZEQzRFODQxNjZFQUY4NjU2NkVBNzQwNDhEOQotOjEwRDA1MDAwRjhGRDJCODI0REVDQ0ZFMDNFMTc5RjVCNEM5QTY3QTEwOQotOjEwRDA2MDAwNzhBM0U4RkE5RUYzODUwQThENEVCREQzMDExNUFFRTQ5MAotOjEwRDA3MDAwRDJFOTMwMDE1MEVGMzI3QUEwQzdFMDFDQjYxRjY2N0FDMQotOjEwRDA4MDAwOThGNUIzMENDMjMyRUIyNzE5ODYwQ0FBMTNBOEFDQTdFQgotOjEwRDA5MDAwOTVFMEUxN0VENTQ1RDJBMTM0RUM1M0I4NEU2M0E2NDc2NgotOjEwRDBBMDAwNjVDRjcyMzE1OUEzQzdCRkIyODFFNTQzRTdEM0ZERDkzQwotOjEwRDBCMDAwMkEzRkQ3Rjk4NTdBOTU0MkYyNkZFNkEzRkVCQzI4QUVFNwotOjEwRDBDMDAwRTIyNDVENERCRjIzN0JGODc0QkE1NzU1NTQ1OEIxOTQ5MAotOjEwRDBEMDAwNENGMkREMUJDNjRDQTc3QjU1NDU2MzJCOUVBNzIzQ0Y4NwotOjEwRDBFMDAwN0JCMkM3ODk3RTQxNDVBMUQ1OEQ1OThCNTQzNjdEM0M5NQotOjEwRDBGMDAwQ0VGNzY5Rjc5MjYxQTY4OEFGRUZEMkUyMTZERkIyMUZEMgotOjEwRDEwMDAwQjg1REE4MjdCRTU0QTc5QkYwNzM2MDcwNEZGNzU5RTQzMQotOjEwRDExMDAwMEM3MTNFMzg2NDYyNzBBNzE1RTcxRDUyN0M3M0IyMjkwQQotOjEwRDEyMDAwM0U3MDA0MTM1NEE0RkI1RENCQUFGOERFREE0MzM2MzExQgotOjEwRDEzMDAwREY2RTE3NzU1ODFEMkY3Q0VFOEZDMUZFQTY0REMzOTc2RAotOjEwRDE0MDAwNEFFOUJERUY4RkVCRDZEMkJBQkU2NTU5N0VEMjU3REYyMgotOjEwRDE1MDAwNjZDOTJEMzg1OTMxNjAyNkVBNjc0N0M4MEE1NDBGRDU4OQotOjEwRDE2MDAwRjdDOTRFRjUyRENERTY3M0RENkNBRTkzMEREMkUyOTk4NQotOjEwRDE3MDAwOEU0REMzODcxMzVGRUVDRkQ2RUU2MTI1QTcxNTEyREQ2NgotOjEwRDE4MDAwOTZBNTdBRUZBN0Y5OTE3ODIxNUZGNzZCN0NFOEFEREQ4MgotOjEwRDE5MDAwOTBFREI5MkZCQkY4RENFNzkxN0YyMDAwRjhGRUNGQjIwRAotOjEwRDFBMDAwN0QwRkQwN0E3NTcxNjdEOUJGMUYxRkYxRjZGMjcwNUFFMwotOjEwRDFCMDAwQjc5QzRBQzhBNDU5ODg3NzkzMDcwMjM2RjYwM0RBN0RFQwotOjEwRDFDMDAwNzVFREJDMkE3MjNCQUU4Mzc0MjhGMkZBOUFDOEE0OEQxRQotOjEwRDFEMDAwOUFENTU5NDJGNjEzRDdGRDJGNUVENzE2MUUzMjAyREZCRAotOjEwRDFFMDAwN0I2Q0ZBMjE5QjkwQjNDMTQyQ0UzNDNCQjQ2REZCREUyNQotOjEwRDFGMDAwN0IwNzg5QUUxN0EyRjRBQTZFRkI5OUFGM0U0MEZBRDUyMQotOjEwRDIwMDAwOUQ3MEJBNjk3QUI3M0VGRDcyMjlFNzkzRTAzNEQ4MEQ3NAotOjEwRDIxMDAwNURDRkM2NkNCMTczNUMzRDc2RUJFNUI3RDNCQ0IyQjdGRQotOjEwRDIyMDAwREIzMzA4QUYyQkRCQzM3QzBFMTZEOUY2RUUyMDAxODc2QgotOjEwRDIzMDAwOUU2RjlDOTJCRThEREZBNTczNUFDRUUzMzY4QjczREE1OAotOjEwRDI0MDAwMjU1MkZEMkJGMUQ0RkZCREU0RjYyM0ZDOUY2QTdFNDNGQgotOjEwRDI1MDAwQ0Y4QkU3NkI3ODJEREVCQjdFMzlENTQ1RTZBRkI5NzU1MAotOjEwRDI2MDAwMEFERkUzMDk4OEJDNDFDNTVGRDJGRjJGNjExRjlGOEY5MgotOjEwRDI3MDAwMkZEQTY4Q0UyNzNBNkRDNEZGQzVBREE2RkI0MDk0MEZFOAotOjEwRDI4MDAwRDNCRDg3NjhGQkRFNDMzRUJDM0Q1QjNCQTc0RDg1NTQ2OQotOjEwRDI5MDAwQzY0MzlFRDVDN0Q3ODNCRDMzRTdCQjhGODNFNzU1OTY3QgotOjEwRDJBMDAwNEZGMENBQjQ3RkIxRDI3MzNERTFCOUVFRUY2OTU4MUZCOAotOjEwRDJCMDAwRTY2OTdCMTM5RDlDOUNFRkRBQzQ3REUxMjc5NkJBNURGRAotOjEwRDJDMDAwRDREN0Y0NzMyRENBNEEyOUM1RDE5REJGNjRGOUQ3REZERAotOjEwRDJEMDAwRDNGNTc1QzEwQTcxMkYxQkQ2RjQ2NTk5MkJEODYwRjc2OQotOjEwRDJFMDAwMTA1RjBCMzYwQ0UwRkMwMkYzMjA4RUZCRDY2RUIwQUY2NQotOjEwRDJGMDAwQTA3RUQzODNCMTdFQjk4MEVBQzk5RDk3NTE1REE1MjlFRgotOjEwRDMwMDAwNDY3Q0U3NDRFRTkxRUU4OTE2QTQ4QjNBQzcxOUREQUU1MAotOjEwRDMxMDAwNkI3RTVEQkY2RkRCOTVGRkM0NjdGM0JERTZBRUYxQjAxQQotOjEwRDMyMDAwNjJDODM3OUFCNEY4Qjk4OEUwQTMzOEIwREUyQUYyQTcwOQotOjEwRDMzMDAwMTgwMUZGOEUzN0JGMUY0NzcxRUM2NkM1MUI0Nzc1RTlBMwotOjEwRDM0MDAwMTNGQkQzRkI0MDBGNzREM0RCNjI3NDJGNzA5RTczQzY0NAotOjEwRDM1MDAwRTI3N0E3NjQ5QzhGNUY0NThGNkJGN0QzMzVGOUZDNjM0OQotOjEwRDM2MDAwQTMwN0ZFNkVFREU2ODc4RTU3OTVGQzZDQTU4REVBMUMzMwotOjEwRDM3MDAwQjc4MThCRUExRTRCRjYzRUQ1NDRERkRCMkM1OTA5NUNBNgotOjEwRDM4MDAwNTEzODQxN0YyODVGMzg2MkUxNzNGMDMxN0IwQjUzNDg5RAotOjEwRDM5MDAwMUVEQjM0N0I0N0U3QzI2QTk0NUM5NTUwNTEwOEU3MTc1RgotOjEwRDNBMDAwMEY4NjAwN0Q3RjE0QTNDNjgyMUE5NTE3QzdFNTI0MTkzRQotOjEwRDNCMDAwRkFGMUVFQ0IwQ0VGRjcyOTREMzc4QzgzREYxM0NBMkQzMgotOjEwRDNDMDAwRTk4RTVGMTMzRDU3MThFNjNGOTQzMDgxQkZDNzI5MEJBNAotOjEwRDNEMDAwRERDMTc1QTVCRTEzNDcxQUM2RUQyOEQ3NzRDRjAxQkVBRgotOjEwRDNFMDAwMTBGMTRGMjlGRUIyNUY4NTdBOTlFMDFDMUIwNkY4MTVGMwotOjEwRDNGMDAwQ0FERDk4MEU2MzdDNTQxQTZFRTEzQzMwNjZCRjYyQzg4OQotOjEwRDQwMDAwRUJFRDE3QTgzMzVEM0U0Q0QzQUJDMTMwNThEODA3MzM5MgotOjEwRDQxMDAwQkQ4REY3MjE5NkVDOTUzOThFNUI5MjhBODE2NzVBRUYyNAotOjEwRDQyMDAwRjRENkY1NEZBNzdCM0ZBRjkxRUUwMzY2MUFFOTNDRDBFNwotOjEwRDQzMDAwNjdBNEYzQTBGOTQ2M0FBN0Q2MUJFOTNDQjRDMTQ4RDc4NAotOjEwRDQ0MDAwMzRCRjkxOEUxOTJCQzYxOEU2NjdCNTU0MThGQUMzMUU1RgotOjEwRDQ1MDAwQkZEQTMwRkZGMkMwMzQ0MzdGRjhDNjFCMERGM0YzNUEzNgotOjEwRDQ2MDAwRTcxQUM2MEJCNjJDM0MyRkRGNDcwNDk3MThDNkNEN0NCNQotOjEwRDQ3MDAwMkZEQ0YzMjM5MzFDMkE0Q0U3NjJFREZCMkM5REZGN0VFRgotOjEwRDQ4MDAwRkMyNUZFOEYwNTZGOUZBMDQ0RTU0MDdGMTNFOUUzRkY3NQotOjEwRDQ5MDAwMTdGRjE3MENEM0NFMTE3NEZFNUZBNDVEQkQ0QUYzQzMxMgotOjEwRDRBMDAwRTZFRkJDQTZDNjA5N0JGM0ZBOUUxM0ZCM0REODdGNDM4QgotOjEwRDRCMDAwMkRCNEE2NTBEQ0E0QzUwNzVFRkQzQ0MyOTRGN0U5NzkwMwotOjEwRDRDMDAwQ0FCNUE1OTJFOTlDM0VDNjcwNEU3RkExN0I2REM1QTFGMQotOjEwRDREMDAwQTBBMTNGNjJCRkY4M0U2QUU0NDFGNzJCRDQxNjdGRUM2RgotOjEwRDRFMDAwOTFBM0JGODcxQUZEMDVCQkU1NzNGMjRFRkQ3RTlDOUU5RQotOjEwRDRGMDAwMzc0MUYzOTM5Qzg3Q0VEMkUxMjcyNTI4MzlCN0JFQThDMAotOjEwRDUwMDAwRTdBN0U2QkM1NUNGNTdDRkZEREU0QUM0MjU3N0NCQkQ5NAotOjEwRDUxMDAwRTVCMTIyN0ZENUYzRDZFRjgzODdCRjJCQkI2QUIwNkYwRgotOjEwRDUyMDAwRUQzMEI0RkZCMkE1QjMyRjhERUJGOTJDMTE5NkNFOEQ1MwotOjEwRDUzMDAwMjM0NDU4RkU2RUU2OURFOTlFNUNGRTFFOTVFQkRFMEJENQotOjEwRDU0MDAwQTVCN0E3RDMzRDdGMDRERjE1MkUxMUU1MUZGQTc5NjkzMgotOjEwRDU1MDAwOThFRjc3QjRERTYxQzlCNUJDMTBERjdEN0RDQzY3NDM0MQotOjEwRDU2MDAwNjhCREZGMTkyNkUyMzdCQjhDMTQ0MkZGMzM2MDk2MDc3MwotOjEwRDU3MDAwRThGOUE4MjRDRjczMzRERjdDM0ZEQkRDOUFFRjBEQjVFQwotOjEwRDU4MDAwMzUwNkI5NTU1QzZFQkVCNzYzQUUwRjg2MkQyQUM3OURCMgotOjEwRDU5MDAwRkUxRjQ5N0M0RkU3MzMwMjZFNzQ3N0JDNzI2Mjg1OTUzQgotOjEwRDVBMDAwRTMxNUQwRjJGMTlCMzVGQUVCNzU4QjU5MUEzRTg3NzE3MgotOjEwRDVCMDAwODlGOUU4N0Y2RkRFRjIxQUYzNjU1MTRBODc1NkVGQThDMgotOjEwRDVDMDAwRTdGOEZBRDZDMUNFOTE3QzBGQ0Q1M0U4MTY3NTJFQkQ4MwotOjEwRDVEMDAwOEUzMUU4OTJCRTJGQjkxMEZFOEI1MjhFMUFFQTQ4RjBCNwotOjEwRDVFMDAwNkNERjhCM0FERkVFQzY1QkFDN0Y3OEE1QTg0NzFFNUU4QQotOjEwRDVGMDAwOTlDQUY1RUZFRUY1OEY3MzNERTlFNkZBMzcwRDdBNzFDQQotOjEwRDYwMDAwNEJDMzdCMDYzRDk4RTNGRkM4MzAxRTRFRUVCNDUyRkQ3RgotOjEwRDYxMDAwMzBGQ0MyQzAwOTM3MjFGRDhFNkRCNkYzRjdEMDI4MDc2NAotOjEwRDYyMDAwMURDNDU3N0RGREYwQ0FFMUUzRjlCQkNBMEJFMkY5MTk0RAotOjEwRDYzMDAwQzNEMURFMTg2MkZFRUE3ODFFNkEzQ0M4RkQ3MDYzOThBQQotOjEwRDY0MDAwNUIzMzlFN0E5RDQyNkY2RDNCMjE4N0VFRTc3NzRBQjE0RgotOjEwRDY1MDAwNkVBQTBCOUJFQjE3Nzc1QkQ0NEY0ODBGMUVDQTQ5RDdCNgotOjEwRDY2MDAwRTJCNUZBMDIyRkYzNEZENDJCREFCNUVGNEJEQkI1RUY2RgotOjEwRDY3MDAwNEJEQkI1RUY0NURCQjVFRjQzREJCNUVGNDAyMzU2RTdCQQotOjEwRDY4MDAwMEFBQTZCQjQ0QkUyREVDRjJDQzlGM0U0MUNEQzJGNkQ4RAotOjEwRDY5MDAwQjBDRjk5NDM3MUZGQzJDRTdDMDVGN0E5MkIwOENGOTY3NgotOjEwRDZBMDAwOTBDRjc5RkQ3QzdERThCOTg0RTlDMjQwRkU5RUM4Q0Y2OQotOjEwRDZCMDAwRjdDMzhFNThGQ0Y5RjRGRENERTQ4RDU5RDc1MTFFNzg4RgotOjEwRDZDMDAwMjRENjdGOUMyMjkxQ0E5Q0I0RUIyOEVGM0I2MjEzN0E0QwotOjEwRDZEMDAwMzg3RDYzRUM3NUE0NzcxRkUzNjI4NDlGRkYyNTQ5RDRFRQotOjEwRDZFMDAwOTU5QzYxMUI3RDNGMzUzNUQ5MzcyOEE3NThEQ0ZCRTI3NwotOjEwRDZGMDAwRUY2NkYwMzlDOUE1NUVFNzhDNTg0NTFDMThEMUUyQzEyOAotOjEwRDcwMDAwRjQxQzcxMEU5ODkxMjNFMjU2QkQyRDIzOUVFM0YzRTk5QwotOjEwRDcxMDAwRDRCMjdFM0U5Q0NEREY5QkFDQjEwM0M1QUZCODNGN0Y5QQotOjEwRDcyMDAwNUZBM0RGMzMzMTdGN0YzM0YyNEY3NkZFNEU0MkFGODcwOAotOjEwRDczMDAwOTZFNEE0RjEzQUY0NUQwRUU5NjVGMjRGRTJEODZFNDE0OQotOjEwRDc0MDAwMzgzNDg0QkVFM0U5ODI3N0JGRjhBRUYyMThENTkxQTNFRQotOjEwRDc1MDAwRUFDRjI1MzlBMjBFMDNCNzgxRTEzQkEwQzU3QjBGMUY5RAotOjEwRDc2MDAwQTIzQ0VCRkQ2MUJFMzE0NEQ3QjkxNkI1ODRGOEJBMzg5NgotOjEwRDc3MDAwNjEwN0Q3QkJBNkU0QThCQzJGQzJDQkY4QTJGRDY5MjZERgotOjEwRDc4MDAwM0UyRDc2ODRCOTNFNzZBMTdBNzg2RkY4MUZCQjNERjRDMgotOjEwRDc5MDAwOEI1Q0FFRkZBQUY5RkMxRDlFQjYyRkMyMzE4NUU4QUZBNwotOjEwRDdBMDAwRTNBREMzRDFCRENFRjlFNTVGQUZFQkVBRkQ0RjlGNzhBNgotOjEwRDdCMDAwMjg1QkFCQ0JERkUyRURDMTlGREVBQUQxQTVERERBNzMzQQotOjEwRDdDMDAwMURGRDdFOERCRkU3RjA2NzE4MDBENUVERURCMUU4MjNCNAotOjEwRDdEMDAwQjBBREQ3RTg3NEVDMDZDNDg3RUIxMzlFMTFDNERGQzU2NwotOjEwRDdFMDAwRDM5Q0ZDRkRCOUJFM0VBRUUzRkJDMzc5RjY1OTlERUE3RQotOjEwRDdGMDAwNUQ0OEY4MkZBQzE3NzU3NzdEM0MyMjA5QkVGQTU3OEEzMQotOjEwRDgwMDAwM0FFOEUyRURFRjFEQTJGRjBGQzI4MjY3RjIwQTM5QkZDQwotOjEwRDgxMDAwRDdERTM3RDMxOUU5Q0JERjQ1Q0Q5NUM1QjkxNUQyRjc5QQotOjEwRDgyMDAwNkVFMkIzQjlERUZFNkRFOTFBNDkxNUU3QUI5MUI1Njc1MwotOjEwRDgzMDAwODZEMDNEQjJDNTc0NkY4REJFMEZEM0VBNTdEMDY2QUNBQgotOjEwRDg0MDAwNEIyMUJERkM1NEFGMzhGNzNDMEFGODVDQ0JBRUY5MTE2NAotOjEwRDg1MDAwQkJGRUZFNjBDNUYwRkUzMUE3RjdBNzQ0OUYxNzM0QkI5RgotOjEwRDg2MDAwODFGMzAzMTZEQ0JGNERDRjkzNEQ3NTk0QjY5MEE4NzcyNgotOjEwRDg3MDAwQjZBNUQ4Mzg0RUE2Nzg4N0ZDOTMxRUVGRENGNUE2QTg4RgotOjEwRDg4MDAwNzdERTk1MjZFMjY4ODI4RkY4MkIxRERDQ0Q3MTQyOTdGQQotOjEwRDg5MDAwRkY5N0RDMkFEMUNGNjlGNTA1Njg3RkYwMkQ2NUZGMjU1QwotOjEwRDhBMDAwMEY0NUZFRDJGOUM1OUZBRkQ2RUEwMUMyMUYxNjZCRkUyNwotOjEwRDhCMDAwQUY5OEQ2QTEwMDI3QjcwRkZCQzUyMjZENUY4QzFGQjlBQgotOjEwRDhDMDAwRUUzNjFBN0M0RDAyMThBRDZFQjY3MkI3QTE4RUYwN0Y5RgotOjEwRDhEMDAwOTQ3ODE3RjI1MDQ1MDAwMDAwMDAwMDAwMDAwMDAwMDA5RQotOjEwRDhFMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJGQjUxQ0ZDMEYwMDNBRAotOjEwRDhGMDAwMDkxN0IxQTFGMjZGQTBGMTUzMzk1MUY5QkY1OTUxRjk4QwotOjEwRDkwMDAwOTdEMEY4ODRCMDJFMTMwM0MzMEE0NkQyRjQyMEUzOURDNwotOjEwRDkxMDAwNDBGRDA3ODBGODM4MTA5RjYzMjJERjFDMTAzRTJDQ0M5RQotOjEwRDkyMDAwQzBGMDREOEM4MTYxMEU5MDZFMDNEMkU3ODFGODNCMTAwMAotOjEwRDkzMDAwREYwNUYyQzU0NDE4MTg1NDgxNzhBMTI4MDM0MzBDOTBFMAotOjEwRDk0MDAwNUUwRUM0NDUyMjEwN0Q0NzgwNzQ5RDI4Nzk3NjZBRjI2OAotOjEwRDk1MDAwNTBFNkU2NTE0QzE5NUUyRDhEQ0EyRjU3MDFBNjQ3NTU0QQotOjEwRDk2MDAwMDY4NkI3NkExMEZFNjIyNDc5MjY3NTA2ODYwQTE1MDhBRgotOjEwRDk3MDAwREI0MDhFODFBMTBCQTg2NkI2MzQ3NjczMEQ4MUYyREQ5MwotOjEwRDk4MDAwNDA3OTIxNzUwODFGMDBCNTg4MkNFQzY4MDMwMDAwMDA2MQotOjEwRDk5MDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDBENQotOjEwRDlBMDAwMDAwQkNEN0QwOTc4NTVENUI1RjAzRUMzOUQ4NzlDMjRFRAotOjEwRDlCMDAwMzc3MDMzQzk0OTBDMTgzNUMwNEQwQzgzODg3ODEyMDM3MQotOjEwRDlDMDAwMDY0REYxMDZEMUM2RkVCNDVFRDBEQTQ4MTkyMkYyNkFERAotOjEwRDlEMDAwQjRCNkI5NDAxMkMyQTQ0MUI0QTU2OEU5OEQ1NTRCNzlEQgotOjEwRDlFMDAwQjY0NkM1M0VEQUE3RjQ4MkY4NDQ2QjZCQjRENEUxNjk1RAotOjEwRDlGMDAwRkY0NjlFQjVENjVGRjlFMjgwNTM2REY5RDc1QTdCOUZGQgotOjEwREEwMDAwRTQ5QzkzOUIwNEI1RUY3RDBGODdDMzNFNjcwRjZCQUYxQwotOjEwREExMDAwQkRFNkJERjZCRTZFRDlDNUQ4MDRDNjRFRTA5RkYzMTg2QwotOjEwREEyMDAwQkI1QTYyOENFNTBEM0Q5OTM3RDZDNDIyOEMzNTZCNkU5RQotOjEwREEzMDAwN0Q1MzA5NjNERjU0NjI4N0Y1NkE3ODNGNUU4RUREQTMwQwotOjEwREE0MDAwRTNGQjQ5NzUyQ0NDOTg4MkY1RjMxOThCRTFGRkEwREQzRgotOjEwREE1MDAwRkFFMEJBNzE4OTIwQkM1MzE2NjdFMUQzRUNERjdDMzY1QgotOjEwREE2MDAwQUI4QzY5NTVGODdEQ0JBNDRDREZDRDI3NEJCOTA2RkFCQQotOjEwREE3MDAwQkQ4Q0ZFOUMyODY1QUNGNTk1OTcyNjFGMzJDQkYwNUZEOAotOjEwREE4MDAwMDEwQjQ1NUUwRkMwNUY2NkIwMTkyNzE0QzZERTBEMkU3MAotOjEwREE5MDAwQ0M0QUIzOTFGQjdCQjNBREZCNEM3NTIyNjMxRkI2QkQ4MwotOjEwREFBMDAwMzhGOUQwQzRFMURGQkZBOUIwOTZERThBRTFFRjY3MzA3NAotOjEwREFCMDAwMTg3NDFBRTIyM0U5OEU0RjFFOUFGN0UwM0M4MzgwQTQ4MwotOjEwREFDMDAwQjNBMTNENjM2OTRGMEUzQzc3NkYzQjUzMkQxRjgyRDM0QgotOjEwREFEMDAwMzkwRkM2OTIxQ0JGOUZCMzlEMjc1MjlCMkU4MDUyQTUyMwotOjEwREFFMDAwOTQ5ODRENzBBOUYwQ0Y3NEM2QTgyQUFDQ0JCMkREOEQ0NgotOjEwREFGMDAwOENFMDcyQzBEQjExRjlFN0MwM0JFMjdBODk3QUVGMDY2RAotOjEwREIwMDAwRDc3NTMyNjhCN0RFQzVFOUE1M0Q0RjhFQUQ2M0MzRTk3MQotOjEwREIxMDAwQzU1QzBGMTM4RjI3QkIxRTM3MzAxRjhENjNEMjUxQjNFNwotOjEwREIyMDAwQkM3OEQ0NzUxRjhCOEVBRTQ0M0EzQUYzQkY5RjhFOTI2OQotOjEwREIzMDAwRkY3QkU5QTg4M0ZBRjk1RjQ2NDc4Qzc1NzM3Q0IxN0U1OQotOjEwREI0MDAwMTVDNzFGN0FDRjlGOTFDNUJEMTJEMjE5MTRGQjEwRUVENQotOjEwREI1MDAwNjIzRTE0MkI2RUVEQkM1NjlFMDI2MjhBQzU5RTNDMEQ0MQotOjEwREI2MDAwRTQ1NjcxRkY5MjA2ODQ3QkZDMkJGM0ZGOEFDRkNFNDVFRgotOjEwREI3MDAwQjVGNTczNjE3RUY5NERCRENGNUUwMENGNDgzQzI1MjVEQwotOjEwREI4MDAwNjBCREI2MzMxOTg1MEFGNEI3M0M1OTAzRjM2QkM3Q0VCMQotOjEwREI5MDAwNjYzMTc2NkY3Mjg5OTFDNEY5MzI4M0IxNzE4Q0ZEOEJENQotOjEwREJBMDAwOTgxMzYzQjJBRTQyMzk0NDdGQ0QzNDBGMzc0QjczN0M0OAotOjEwREJCMDAwNDgyNzNDQzNEQjhGMzRGRjEwQjYzM0VCOTRFMEZGNTdBQwotOjEwREJDMDAwMzM5Q0RGNThFREQ4MUEzRTVFMTJGRTQxN0MxNzBFOEQ1NQotOjEwREJEMDAwNEZGREU0Mzc1QkNBMENGMTYzRkZERTg3N0YyMUZDNUVGQgotOjEwREJFMDAwRkIzRjMyNUUwMUFCRjJBMTdDMDgzNUM4NUEwQUVCQjNBOQotOjEwREJGMDAwREU2QzE1Q0E5MUU1MkE0QjgzOEMyOEE4RUU5NjVDRkE1OAotOjEwREMwMDAwRDhFQkQyQzk1ODdEMkY1RjFGQTkzMTM0MDRERjlGOTkwQgotOjEwREMxMDAwNDRGNDczQ0E4REFGRjU2QzAwOTIzQkJFMzgxODIzRkFGQQotOjEwREMyMDAwRDAxOENCQ0QxOTNFOUZEQkRCOTA5MDJERTU0NUI1NTI0QQotOjEwREMzMDAwODJDNjhCM0Q1OTA2RUQ5MzhCQjhERURCREVCMDMwREI2MAotOjEwREM0MDAwMkFBRjNDOTIyNEYwRTZBNDBGQTZBQkQzOTFBRDM4N0Q2OQotOjEwREM1MDAwQTgwREIyRTE5QkYyQzVFOTQzRkQ5Q0Y0OTFCN0M2RDI5MQotOjEwREM2MDAwOEU3REY2RjU4QTk4NzZDMTQ5RDJDNzE3MURDRjVDRDc0RAotOjEwREM3MDAwRTE3Q0I1NTZBQzZCOTk4RjAxREZERTVBQkYzMEEzOURCNgotOjEwREM4MDAwMzFGMkJBNTYxMUJGNDcxQTk4OTFDQUQwMkU3RjcwM0QxMwotOjEwREM5MDAwOTNDMzlGQjAzRUNBRTBGMjVFNjc1QjJGNjVGQ0Y0QTZCQgotOjEwRENBMDAwOUU1MUYwQTE0NEVDRjMzNUZCRjVCNTJBRkE2QkI5NTA1RgotOjEwRENCMDAwNTQzNTE5RkI3MzYzN0Y0MDY3MUJBM0I3MjYxOUYwQzM2NAotOjEwRENDMDAwNzFBNDZEQzA4N0QyNUQ5OUM2MzIyQjYzQjE3QjA0MDQwOQotOjEwRENEMDAwMzI5NDdENTEyM0I1ODlFODIwNDVFQjYyQzJFN0QxNjVENgotOjEwRENFMDAwMUJGRUQ1ODhERjU2NjY0RDQ5QzkwQUJGQUZENTRENzBCQQotOjEwRENGMDAwQjg3MTNDQTA3NzQ1ODMwRTAxMTU2QTkwQTU3RDYxQUM5MwotOjEwREQwMDAwQzFFMTQ3MzIzODcxMkE5NkJGNkRBMzgzMkVCRDhBNjU2MwotOjEwREQxMDAwNUEwNzkzNUUxMUFEOUM1RUJGN0Q3MkYyQzUzOURFMjI1QgotOjEwREQyMDAwM0JCQzI3REQyRUE4RUFBRjVCRjREMEM4RUQ1NEY2QkFCMQotOjEwREQzMDAwQjkzRTgwQzRBQkIwODM2OTQzRUJCNEMxQzVGNjQ5NTM2NwotOjEwREQ0MDAwNDE1RjE3NURDNjEyRjA3NjAzN0UzQTlCRTg5NEVDOTkyQQotOjEwREQ1MDAwMEQ0NTU1MUFEMjE1REIyREE5MDhBN0E5NDc1OTM0ODdCNwotOjEwREQ2MDAwRUE1NTRBM0FGNTIzN0I1QjE4RDY1MzgyMDYzRENERUY0MAotOjEwREQ3MDAwMjNDMzI1RTgyRjY5MUMyODgzN0VCRjI0RDZGNzRCNDI5NgotOjEwREQ4MDAwQUZCMTZBRDc2QkZEMjZEQ0E0NjdENUExMzJDQ0UzRUQzOQotOjEwREQ5MDAwMUJFMDdGNDAyN0M5NEEyOTc1OEYzNEZDN0IwM0VBNDU4NQotOjEwRERBMDAwOTA0QjBERjhERTIyNTc3NjBDRjI0MTk0RDZBQjQxN0NCNQotOjEwRERCMDAwN0JFQ0UxMTcyNjlEMDVGNEQxMTc1MzE4OEFBRDc1MEYzQQotOjEwRERDMDAwN0I4QzNBRThGRkQ5NzNBNTk0NDcxMkYwMDI5QzBCMDRCMAotOjEwREREMDAwOUM0RjFCQjlDNTQ4QTc3RDc1MUVBMkUzMDUxNzdDMTg4QgotOjEwRERFMDAwNDEzMjNFQjZFRkY3NkEyNjdBNTkzMERCMzUwNDA3RkMzQwotOjEwRERGMDAwQjdDQTNBM0ZGOEVGMjc4M0VCNTI0NEUzOTg3MEFEQThENwotOjEwREUwMDAwNTIwODhFQkVEOTUyMEFDNzM5RjRDN0JGREM3QzBFQzA5NwotOjEwREUxMDAwRjk3NEI1MTRGM0U4MDQ2Rjg4QzE3ODdEQzY3QjkxNTExRAotOjEwREUyMDAwRkQwRTczN0M5RDY5ODg0RkU3RjhFNjdBODQwQjE5RTE1MwotOjEwREUzMDAwOTVGRDA5RjAwQUUzMjU2QjA3RkFENzIzOUU4RjRBQjFCNwotOjEwREU0MDAwRjUzMDVFRDY5Q0Q2MDkzODRFODkyQzEzQkMxQjY3N0JGNwotOjEwREU1MDAwNjUwNUU4ODdCRDM4NEU0NjdDMDYwNTlGNjdCOUJCQkRBMgotOjEwREU2MDAwQTcwMjlDOUQxMzY1NzYxN0JDREE1ODM2QkEzQzZCNzdDRgotOjEwREU3MDAwQzgzMzU1OEIxQjEyQjRENzkzNUE5NTMyMEE1RkE0MEM0MgotOjEwREU4MDAwQjkzRTkzQkM3QjRBRTI3QUIyMjNCOTUwMkJDM0U5MUQ1OQotOjEwREU5MDAwQjJEQjgxQTg5N0UyMTZCRDBBRjZFMjUzMTJDQ0RGMTU3OQotOjEwREVBMDAwRTE3NDlDNUQxN0U3NzY2MkRGMzg5MjVGMDFCMTFFNTkxRAotOjEwREVCMDAwNTMxNjY2QjEwQzc2RjA4OEYzODA4MTMyRDlDREQ5MzIxMQotOjEwREVDMDAwODc4RkJEQzJGQjU3Q0RGRTczNDZFRjdGODNFOEZGQTM2QwotOjEwREVEMDAwNjY4OUY1MjE3QzZBREM4QkVCQ0Y4QzRBQTI2N0JGQTBGOAotOjEwREVFMDAwNEZCNjI2ODdDQUE2RENGNTk0QzdCQjRBNjAxRDNENTFENAotOjEwREVGMDAwOTlFOTNBQ0UyRjQ5RUJCQzE5RDZCODA4NDBGMUQ3QzEwMQotOjEwREYwMDAwNzdBOEJBRjlFRjBBRDkyNUQ5RjJGMTY0MTJFMEQ4N0NFMgotOjEwREYxMDAwRTAxQUE2ODM5REVBOEZBNjE4OTUyNzVGRUQ0NUZDNkM1NQotOjEwREYyMDAwMDZBNUMwQzdFRjY1Mzg3RTAwQzgxNkU1NkIwMEU0QUJGOAotOjEwREYzMDAwOEVGMjU1RUY0RENCNTA1NkVCNTlDQzgwNEYyMTJEMjYwQwotOjEwREY0MDAwRjk4MTY0MEU0NjRCRDdBQUYwQkU3RDMxMjNGQTY1Njg4RAotOjEwREY1MDAwNDU1OEYwREIxRTdEQ0U1MDAwQUVDRTI2NDY3NjRENjc4RQotOjEwREY2MDAwQTQ5NkU2RDc1RTUxRUIyRDQxN0JBNzQxQTVGN0VDNTM3NAotOjEwREY3MDAwQzA4NzY5ODc4MDNDRjQ5NzMzMDNDN0RCOUNDRjUyNDE0RAotOjEwREY4MDAwRTRBNUJBM0NBMjQ3QjdDNkU3QUZFRjI4NjNFOUIzRTAyMAotOjEwREY5MDAwN0JGNkY0MDMzODdFRjIzQjJDMzY5MTBGNDk3MjREMzVGNwotOjEwREZBMDAwRTk0MjREMjQyNUY0RUY1QUI1RDhBNjBDNzRCNzgzMjU2MQotOjEwREZCMDAwQjJFNDY5MzYzQTI1QkRFQkM0NUI5NjlCNUQ4OEY4RUQwQgotOjEwREZDMDAwQUMwNEZBMkYxOURFNEYxMUYyMEZEMDVCMkFCNkYwRTI0MwotOjEwREZEMDAwRDIwQ0UzOTRDODNBRDE4NzU5RDYzRjcyMTNGQzIzRDVBQgotOjEwREZFMDAwMUZBQTA3NzY2NjJFNzY2RDQ4ODgxNzU2MTdBMUY5RTVBMQotOjEwREZGMDAwQjBDMTNGMDY5NjczQzU3Q0M3QjExNkFBMTc5REQ5N0RERgotOjEwRTAwMDAwMDBGOUFDQzBFOEFENDE1Q0RDMUVCQUVDNTk1QTM3NzY3OQotOjEwRTAxMDAwQTc4NkYxMDg4MEI2RUM0NEVFOTA5QzMwODI1QzRFQkM0MgotOjEwRTAyMDAwMUI5MzQ5M0U4NkU0QjQ2NjQwMDcyMTVGNUY5NDk0QjUzNAotOjEwRTAzMDAwQ0VDODhGQzhDMjI2MDBGMEE2QjZFRUM5RTg1Rjg2NTlFMgotOjEwRTA0MDAwNENDMkVGQTE5ODlBQjRDQTlGMkMwNjY1OUJGREM3OEU1RgotOjEwRTA1MDAwOTQ0RDI3RDJFMjdDQzFCNDAzQzgzMjVBNzlDQjY5RDgzNwotOjEwRTA2MDAwREY3NjAwQzgwNzdFRjI5NjUwODJGNEM1ODdCRUYwMTRCMgotOjEwRTA3MDAwMUNFQzQzMzk5RTk1RTZFRENCRDFFRUJFNUVGMUM3MzY4MgotOjEwRTA4MDAwMjEzREM0Qjg3RUYwQzIzRjI4RkZCMjY2QUEzNjc5OUMxMwotOjEwRTA5MDAwNkREOENCQjkwRUJEMzE0RjA5RDI3Q0IzQkZDNDg0M0UxRAotOjEwRTBBMDAwMzAxQTI2OEUxQjgyMEYyMDZCNDRCQUQ5NTZBNzMyMUMxOQotOjEwRTBCMDAwMkYxOEU0NzA5OTcwRTYyQTlGQTY2NTQ2NzAxQzQ1MzhCMwotOjEwRTBDMDAwMDAzRDA0NDdCODlDOTFCRjA3RjAxQzc1QzA3M0Q0MDE5NAotOjEwRTBEMDAwQ0Y1MTJCM0NBRDVFM0U1RkE3REZCRjU0MTY3RTNGRjhBRAotOjEwRTBFMDAwQkRBODA3OEZCM0I3OEM3QTI0MThBMzk4RjQ0QTU4RTNENQotOjEwRTBGMDAwNzU4M0RFM0UzMkFBMzRBNkQxRkEzQkZEN0U1ODlGNzc2NwotOjEwRTEwMDAwNkRGQTYxQTYyOEVCNjBENzk3MTI3Q0Y2RUZBQzg4RTgzMQotOjEwRTExMDAwODRDQTBBMUJGNDVGOTdDRTM0RjFBMzdGRjk2NUUwQkI5NAotOjEwRTEyMDAwNkIwRUJCMThGMjE1RjBBRjgyREY1REUyRUIzNUMyOEZFQwotOjEwRTEzMDAwNUQ4QUZBMUZGNEY2NTUyQzFFNDZGOERFNjYzMkQ5Q0JGRQotOjEwRTE0MDAwNkZCM0U3QzI2NzU5RTRFMjc2RDkyREY0MzgyQ0E4OTU2RAotOjEwRTE1MDAwN0Y1OTJDOEE3RUI1MUFFQ0VDNTNDMjg0MDY5M0NFQTQ2OAotOjEwRTE2MDAwMTNCNDZFMzE0NjdFNzc5MEQzNUI5Mjc5RDc5MjdERDE4RQotOjEwRTE3MDAwQzVGNUEzRTlGNzdEQkREQkFFQUZCRkIxQzM1RUJFOUEwNwotOjEwRTE4MDAwMkQxQzg3RjQ3NUY1NkQyRTk2ODI3RUFGQjFEQTFGQjAyNwotOjEwRTE5MDAwM0UzN0NBMUFDMUY3MERENkQyQTkwNUM5Q0U2QUMyNzlDRgotOjEwRTFBMDAwMkNENTk4OEE3RURBOEE3RkZCRTFGNDI1MzA5RjlENDI0OAotOjEwRTFCMDAwOEZCRTA5NzI1REI3RTg4RDY1OTE5NERCQTgxODNFQkZFQwotOjEwRTFDMDAwRjU1MjZDQzEzOUQyQzhGM0RCRTBFQTVCODBGNjQxNzJFQwotOjEwRTFEMDAwQUI4QkZDM0FFNkY0RDdGNjJBRTRBRjU5REExMUJDNTcxOAotOjEwRTFFMDAwNzZEOUU3MzdENkZDOURGMzA1OEY4NUU2QkI2Q0Y3MTIzMQotOjEwRTFGMDAwRDI5QjIzQ0RDN0JENUIzMjUyMTlGNERCMDNBNjNFMTQ3QwotOjEwRTIwMDAwRjJDNUE0NkY5M0FGOTNCNThDREI3QkZGRDc5NzVBMEYwMgotOjEwRTIxMDAwRTNGRDAxRTUyM0FEN0ZDQjU0MUU0NzY5OTk4MUNGQjE2MgotOjEwRTIyMDAwREFGREU3RTc2Q0Y3QTdDRkQ5RUUzNTIxQzc5REVENTZBQwotOjEwRTIzMDAwNzhGQkREQjg5RUFCRDQ2NEJEMjQwRkQ5RDE1RTU3OEI3QgotOjEwRTI0MDAwNTEwOEE4NzBFREFCNDlBMzI5NjZBOUQ3NzU5MkY1MEVDMAotOjEwRTI1MDAwNEJBNTI3NTVBRjVFMUVBNUJGNjNDMkNFNzhFMkJFMUY5OQotOjEwRTI2MDAwQkJGQjkxRkZGNkJDQkEwMEY1RkIzN0ZGNUQ2MTVFOTgyMgotOjEwRTI3MDAwRDdCMUZCNDIyQzhERjRBOUE2REM2OEFGMkMwM0JBNEFCNwotOjEwRTI4MDAwNTEzOTNERkQxMjhCNUQwNTE0NEJGRDdGRjNGRTEwRDkxNgotOjEwRTI5MDAwMDdDQjFFRjRBNDFBQTBGREIyNUZGQ0Q3MTQwNjc4Mzg5MQotOjEwRTJBMDAwQjY2RUUwM0YwQTkxNUVGNzQ4RENGRjRCRjY0RkI5MDRDQgotOjEwRTJCMDAwREUyRjUzRDkxNUYxMEM3NDIyMkI5QzVGREVGQTY1QTA3QQotOjEwRTJDMDAwMDlFRDNFNjlGNzgxQUY1MUJGQkQ1Rjc2QTE1QzM2RUJDQQotOjEwRTJEMDAwN0Q4Q0ZCMDA3OTU0Q0ZDMEVGQzk5RjRBQTk4OTEyODc3MgotOjEwRTJFMDAwQUY3MUYyNzBCRkZCQUQ5RjRBMUNCRTdEQUU5NDBGRTFEMwotOjEwRTJGMDAwREJEREUzNEU0MEJENTVCQkRGMjFCQTNERkZGRTlGODUxMAotOjEwRTMwMDAwMTEwRkFCRjYyOTM2N0Y3N0Q1NkUyNUVEOTk0MkNGNTdBMQotOjEwRTMxMDAwRjE4OTlBNTEwMjdFNUIyOUY4NzVFNURFMTVBNDA3NTY0RQotOjEwRTMyMDAwRjY2RTdFMDdGOTc1RDUzRTk3NERBRTAzNUU2MjY5QzQwMQotOjEwRTMzMDAwRUIwQjRBQUMwMUNCMEZGRDI0QUMwM0FBREU4Q0VFMDkzQgotOjEwRTM0MDAwNkIxNUQ0RUYxMjM3RDBENUM1MzNFREVEQjBGRjhGNzIxQQotOjEwRTM1MDAwODZGN0M3RDgwMEM1MzU1N0Y1NkVFNEUzMzFBRTZGNEM4QwotOjEwRTM2MDAwM0U3RDEzRkY5MjNGNUM2RjlDQUVEOEY3MUQ4RUIzQTcyNgotOjEwRTM3MDAwQTc1MzFDNzI3NzZFNDYzRkNFRDQxNzI2QkY3RUYzNjczNQotOjEwRTM4MDAwQzc3NzI1NjFEQ0I3MUVGQzdGQkI5MjAwRkZGMjdGQkMyNAotOjEwRTM5MDAwQjdFQkRCMzAyRkI2REZBN0ExMUM1QUI1RTcwRjYxNjZEQwotOjEwRTNBMDAwQzE3QjlEQzJGREIwNjMzRkZEQzlCRDNCODE1RjhFQkQ5QQotOjEwRTNCMDAwRTQyMUJCRUVEOEEzN0YzOTQ1ODc3OTFGN0JFMEUzNzE2OQotOjEwRTNDMDAwNjg3N0FFNzk3NEVFNzhBNEFGMzUwRjlGM0Y5RThERTJFQgotOjEwRTNEMDAwM0YyMEJEQTYzQ0Q2NzU0REQxQkFFQUZCMjQwQ0MyMzAxNQotOjEwRTNFMDAwRjY4ODc4M0FENkU3QjFCRDRBMUE0M0I3NkZCRkU4NDkxNQotOjEwRTNGMDAwNzkwMDNGQUJFMDVENkIxNUFFRDcwQUQyNDM1OEJFMDkzQQotOjEwRTQwMDAwRjBCQ0YyQkUwREVGMjg1MzMyRTEzQjU5Mjg0N0YxMDkyOQotOjEwRTQxMDAwNkMxM0M1RjVCRUU0RTI3M0FCRjFFOThBRTk0ODFGNkMwMQotOjEwRTQyMDAwODBFNEJGQjNEREFBMjNCMEFFNTM0NzVFQzdFM0VDNTMyRAotOjEwRTQzMDAwMzdFMjdGRDU3RDFCRjlCODhFNzU3QzFCRkY3Mjc2MDY5RgotOjEwRTQ0MDAwRkQzRjZDMUQ5N0ZGNjgyNzdFREM5QjRCRUIzRUQyM0E2RAotOjEwRTQ1MDAwQUU3OEY4RDI1MUZEMzM1MzFFOEM4NURGNjY4OUMzMzUwMwotOjEwRTQ2MDAwNTUzMTU2MkJDODU3MEZGRUVCQkQzQjIzN0M3RDFCMDA1RgotOjEwRTQ3MDAwMjFDNzdFNzZGQzE0MEMyRUJGRTExQUY4MUFDQUM5ODE5NgotOjEwRTQ4MDAwNDczRERBNUREMDY2RDlBMzJGMTA5RjFEN0JGODU5QjdBMQotOjEwRTQ5MDAwNEU3MjkyMDUyNUQwN0JDN0Q4RTA5RjNFRDQ4MzJCMjVCMgotOjEwRTRBMDAwNUU1ODc1NzcyOEVEMDkwRkFERDNDQTU0NjNCRDFFQTYxQgotOjEwRTRCMDAwRjdBRkQyRkIxNEE3RkY5NUE5MDM4QkE0MENFQkI2NDdDQgotOjEwRTRDMDAwMjlFNTcyMzk5NTQ3Nzg1OUExRjdCOUI1QTA3RDNEQTVFMQotOjEwRTREMDAwOTlCODhFQUZDRTQzQkExQjY5MURDREY5NkIzOEZGMTlDMQotOjEwRTRFMDAwOTZGNUJDOUJGM0VENDhGQzc5QUNDN0EzNEE1OTQzRUJDNgotOjEwRTRGMDAwN0I0Q0Q4MDdBQjUyRDIwQjJDMDNERjMyQjY4RUMzM0IxQQotOjEwRTUwMDAwQzJGRUEzRjk3NEQyQzNERDBFN0EzMERCOUJGMzFFOEJGRgotOjEwRTUxMDAwQUZDNzlFQ0Y2N0MzRDc2RDhBNkVBMzFCMTM2RjZGN0Q4NgotOjEwRTUyMDAwOUE1OURFQTc4NTlDNThDOTkyRjUwNUE3MEVENzU3MkE5OAotOjEwRTUzMDAwOEIyNzBCNEI4NkUwRURFQzU1NDg4RUJGQjU1QjIxM0IzRQotOjEwRTU0MDAwREQyOTE3NTY4RUUwOEZGRjRFRTFGNkM3Q0E3RDA3QTY3QwotOjEwRTU1MDAwQTBGQzdBRUJFMDJGMDUxRDcyM0E1Rjc5REZBQkVFQTRFOQotOjEwRTU2MDAwOTBGRjI5QUJGQ0M3RkUzMkFDQzc4QjAyRUU1NThGNjQxRgotOjEwRTU3MDAwRUU2RkQ1N0RFRjY0RUNFRjRERDVGODMyQzJGRjY2OUZBQwotOjEwRTU4MDAwOEIyNUExOEIzNzdCOTU4Q0YxOEQ4MzhBQ0IxNkM3RURCQwotOjEwRTU5MDAwMEM0RDdGMzEwQkUzOUI2MUJGOEVGMzVFQkZDRTc4MjFDNAotOjEwRTVBMDAwODk3NkM4NzMyRTQ2NzZBMDFBN0JDMzAzREZENzg3RkMxMwotOjEwRTVCMDAwQjRFRkJEM0U3QzM1RDMyRDdBQkFERDgxMjczNTFBMjdERAotOjEwRTVDMDAwM0Y1ODhEQzRBQjc5RUMzNTY1RjM0NzVEOUE2QzgzOUJGRQotOjEwRTVEMDAwQTlDOTIyOENBN0ZDQUVFNDJGMkFGNkZCMENEQTdGQTc5MAotOjEwRTVFMDAwMERENTdGNDY2NTFEQjlEMERGMzM4NjE0NUJDQjMyQzRCMQotOjEwRTVGMDAwQTcxQ0ZEQzc2NzJCNENCN0QyOTk1MTJFNUJFM0FCRTE0QgotOjEwRTYwMDAwODMzNzUwNUNBMjk1QjVBNDMxNEVDNDhBNThFRjNEOTYyRAotOjEwRTYxMDAwN0VFRjZDRDM1ODFBQzY2N0Y1RTVCMjM1QkVFQTY5Njk3NAotOjEwRTYyMDAwMzEzQzAwNDdEMTFBQUQxNDREQjM5MUM2MkY2RTkxRUQxOAotOjEwRTYzMDAwNzE2RDMxRkU2QTExNEY2MEJCRjdFQ0Q5MDNGREQ2RTM3MwotOjEwRTY0MDAwQjc1MkY0NjM3OEJDMEFEQzI5QjI2M0NFMTc3MkYwRDdGNAotOjEwRTY1MDAwQzIwRTNFMjhDNTBGQTE5RjY1RThEQjU0OTQ3MzUyRDlDMgotOjEwRTY2MDAwMzYxNUVEODlGOTlGNzZBQjRCMkRGNDM4QkY2QzZEMTFFMwotOjEwRTY3MDAwRDJDQkUxQkYyQjREOTlFODZBOTFDQUU5NkE2REM5ODY5MAotOjEwRTY4MDAwMjI2QzdGRDg3NzdEMTE3NzQyQTMzNENGMDIzMUNGNDNGQwotOjEwRTY5MDAwQzVERjA4RjY0M0JGMDc0QUJFQjE2NTEyQzA1NTFGNTUxNgotOjEwRTZBMDAwMThDNjVCRUEyMzRCQjY1NEMyRkMwQjhFMjgzMTFGOTQ2QwotOjEwRTZCMDAwMEI5QTkzNkE2MkYyRjA3MTc2QTFCQzA3RkNERDg1Nzg1MwotOjEwRTZDMDAwMDRGOEVGNkU4QjUyRjlERTM2OUQ5RUJCREJDQUU5QjlDQQotOjEwRTZEMDAwQTcyRDQ2REZFRjZCOUI0OUU1REVCNjdBN0EzRUQ4MTY2QQotOjEwRTZFMDAwQTdGN0UxMUJGRDA5QTRERkJENkQ0REY0RkUxNzZEMDkxMQotOjEwRTZGMDAwN0FENkFBOUNERkU2MEI3QzU4RTY0REZCNjA4QkRBQzMyQQotOjEwRTcwMDAwRUIzMDhFNjJFMkNGODlFRjNBQTBCODFDREEzNzkwNzQxMgotOjEwRTcxMDAwQzRGNzc4OTVDQjE1Mjc1RTVCNUI4MzY0OTdFRTkyOTg4MAotOjEwRTcyMDAwMEQ5RkQzNTU2RTQ3QzYwNTFDQkZGNjI2MkU1NEUxRjk0MgotOjEwRTczMDAwNkU3RDU5MDVEOTNEMkMxRTQzMzlCRDRCOEFERjUyMDlFOAotOjEwRTc0MDAwRkNGMjQ0RjE4Q0E4NTVFRTY2MDUxMzcxMzU2RkE4N0M3OAotOjEwRTc1MDAwNEExNzhGQ0ZDQzUwQjk3Q0FBNjc2QjBGNjUwMTdDQzY3NgotOjEwRTc2MDAwQTc0QzQ3M0EzM0U3NzlCMDQ2MkY0MkI5Nzg3MDJEQzBBRAotOjEwRTc3MDAwNTM4MURGNjU1NjZFQTEzM0IzQkY1OTAyM0UxNkNDMkNEMAotOjEwRTc4MDAwQTc4N0U4OTZGMzdGNzQ1NkY5MzY4QzEzODNFMzE5OUJCOQotOjEwRTc5MDAwQTg5M0Q1NkQ2QkI3NEQzNUUzREUzQUQxQjE0OTI3QzBBQgotOjEwRTdBMDAwM0Y0RjE0NDdBODFCRUUyRjM2OTdGMEVGM0U0RUU3QURENAotOjEwRTdCMDAwRkRFRjUwN0MyQjNBOEVEOUUyOEQxRENEMzJGOTM5M0JERAotOjEwRTdDMDAwNUZFMTcxRTlFM0NEQTVEQjI2NDFGRDFBQzAxQkZBRUQzRgotOjEwRTdEMDAwMzlGM0NCQjIxMjE2QkFERTIyRTg2OUE3Mzc5RUE1OERBRgotOjEwRTdFMDAwQTJCRjNBNDUzREIzRkNCQzJGRjE1RDVDOTdFRjRGRjhGQgotOjEwRTdGMDAwNzkzRUQyRjM0RTU3RUE3Mjk0OEZBREFGNzhGNDc1MzAwQwotOjEwRTgwMDAwQTU3RjA0RTI0OUZDMUUyRjgyRjcwMEQyRjFGQTM1MUVFMwotOjEwRTgxMDAwOUE1QTkwRUYzRkI0REVBNDZGM0JDREMyRTdBMTk4OUQxQQotOjEwRTgyMDAwQUY3N0I1OEUxRTk3MzZFMURFODU3MDhGMTI5NzM1RTE5MgotOjEwRTgzMDAwMzZEN0UzNzhGREEyODE2RkIwRTE3ODcwRjY5QjMzN0YyNQotOjEwRTg0MDAwRDFBOEUzREY4OTdDRTcyMTNDRUNCMkQyNUI1MThCNDY1NwotOjEwRTg1MDAwRkIwQzY2N0I3M0JFQ0VGNkNFRjkwRUU1MkI5Q0RDRkU4MAotOjEwRTg2MDAwNENBRjhCRTVFMjdBM0VGMEI3NTMxRTdBODZFMTkyQzc1MQotOjEwRTg3MDAwMTU5NDYzNTdBODg5NUU4NDY3M0E2QkExMzI1MzA3RjJGNwotOjEwRTg4MDAwOTE1RjVFRjQ3M0ZBREZEOTc5NkYzRUYxOTE5QTJBNDE3NAotOjEwRTg5MDAwQkQ3MEIyRTM3NUIwNzhCQzA2RjU1NjRDOEU1OUU1QjkzQgotOjEwRThBMDAwRjk3QzVDMzVFMzA0Njk4QTFGRDExNjMzMEMyOTA3NkVBNQotOjEwRThCMDAwOEE2NkMyRjM2MEZGNDVFQTVCRDZGREE0MkQ4QzcxM0ZFQQotOjEwRThDMDAwM0RFREE1N0QwRTBDODg2ODUwMkUzOUNDQUEzNjQxN0ZDRgotOjEwRThEMDAwN0I4NDNDQTk1MUI5NUY3OEQ2NjFCRDQ3RTFGMTIzQTU5RQotOjEwRThFMDAwMzE2NEMxQTM4OEE3OUE3MUFDMEU3NjEzRDNBMEE5NUIzQgotOjEwRThGMDAwQUQzQzgwRDU0RDNFNkM3NDI3OUU0NzdDQjlBMzNBRUQ2NAotOjEwRTkwMDAwQkZCQjIyMDlFMjJCMjZFMkRGQzUyMjRFM0Y1N0M0MTlDNgotOjEwRTkxMDAwRUY2OUU1NzFDNjU2MTZCRkYwMzRFNEVCMjMwQTIzRkYxNgotOjEwRTkyMDAwMzg3MUFBOEQ3RjlERjMzQzIwRThFQURGODVGRUZCQTVDOAotOjEwRTkzMDAwOTBEQjY1RUEwMTI5MEJGQTBGQkQ5MTNFMTg4NkU3QkYwRgotOjEwRTk0MDAwMDkzOUZFQjA5MEUzMDdCN0ZENDcwOUU2MTM3NDI0RENFQwotOjEwRTk1MDAwMzFDNDY5QjhEQTlGOTZDMDBFQkQ3OUZBMUJGQTM1NTBGQQotOjEwRTk2MDAwQkZBMzdCNTIzQkUyNjdDMzFBMUU5NzdGMDhFNTNFQjQwNAotOjEwRTk3MDAwN0I0MEM4RkQ3MDRCRTdCNUI0NkYyN0U0NEI5MTk5MkZFRQotOjEwRTk4MDAwMjBFNDQ5OTE5MDI3OEY2RDdCN0VDOTA2OUM1RkMyNEIyNgotOjEwRTk5MDAwRTNCNEIyRjQ5MzE4RDc2NzZCNjRCMjUzQzJCRERGQkI2NAotOjEwRTlBMDAwMEVGQkI5QkZDREUwRkQ3NkVGRjkxN0I0RUY3RkU4NEQ3MAotOjEwRTlCMDAwNTdGRDA2RTNGRkIzRERCMTI0Q0FBOUQ0NDQ5QjlDMEFFQQotOjEwRTlDMDAwRjdFRUJCMUVFQjg1N0I5RkJBODFGMjYxMDQxRTNDOEY4NAotOjEwRTlEMDAwQzA3Q0ExNEFENkFEODdEMzIxQTg1N0Q4OUY0NkIzMUI4OAotOjEwRTlFMDAwRDZCNTY3RkVFOUQwNUY1OTgzNENFMUVBRkJBNEY4Rjk5QwotOjEwRTlGMDAwMjFBNDg3NDZCRTBGOUQ1NUI5NjgyREQ2RUY1RUZFNUNGQgotOjEwRUEwMDAwMTJEQjhGN0JCQTQ1QzI2NUNGRjk5N0JCNkExMDdGRjdERgotOjEwRUExMDAwMTRCREY2NjQwRDNDMjdCOTRBODgwRTgyQUZFOEY5M0Y3MQotOjEwRUEyMDAwNjFEODdGM0M3QThEM0UzMjFEM0VCNjdDMzU0MzM5RTY1NwotOjEwRUEzMDAwQjk0REE2N0RGQTdCNkU1QkNEQkU2MUNEQkI1OEFFNjY4RgotOjEwRUE0MDAwOEM4RjRENzI3OUY4N0VENjZEMEJGQjUwQ0U5QUZCNTdBQQotOjEwRUE1MDAwODUyQkVBQkNDNEZGNEYzM0RCRkVBQ0I5OEY2NUI2QUY4NAotOjEwRUE2MDAwOTQxMjkzNUM3OUI0NUZDMUY3QjU0NEZCMDIwNTZEM0MyOQotOjEwRUE3MDAwMjg1RTI3NzMzRTg4QTc3REQ2N0M5M0UwQjU3MjNDMTM1MQotOjEwRUE4MDAwM0MzMzVDMkFDMUQzMUVBQkRCRkQxRjMwOUUzQUUzMzIyMAotOjEwRUE5MDAwRDJDQkFDREIwRTg3QjMxREMwMzE4M0MzQzFFMTMzRTEwMAotOjEwRUFBMDAwMjgwNjkzMjAwOEUzREYzQUZGRjk3Qzg0RUZBM0ZBNDFCQwotOjEwRUFCMDAwN0RFMzQ3RkZCRkUzNzYzOTNEMDFENjY3NkJCQjRDRkI3NwotOjEwRUFDMDAwRjcwN0FCMEY3QTExOEY1QkFBNkJGRERDRkVFMTc0OTc0MQotOjEwRUFEMDAwMjNGOEU4RUU3QTk5RjhGNjc4MzVERkVGNjc5RjlFQTA4NQotOjEwRUFFMDAwRkQzMDk3Rjg5RTkzNzdEMDRCN0IxODQ5MjM1ODMzMUQwMAotOjEwRUFGMDAwRDMwRkNDM0Y5NkZDMDJDMDRENTVEMjZGOTM5RjcyNkJFMwotOjEwRUIwMDAwOEUyRERGQTA5ODE1MzhGMjU2NEE4N0VBQTNGRjVEN0Y2NQotOjEwRUIxMDAwNDQ0MkJEMTQxMkZCRDE2NUU2RkVCNkYyNEEwQ0U3N0YxMwotOjEwRUIyMDAwODdBOTE3REJCQ0Y0RUM2OTM5RThEMzAxQUVDNzVCODA3OQotOjEwRUIzMDAwNEU2ODVFRjZCQzE0NEYzM0EzNzkxNUI0RjA3REI2MkQ0NAotOjEwRUI0MDAwNUFERjAxMzc5NDhCNkUwN0Q0RUI2OENGRjU5MjdDNjE2NgotOjEwRUI1MDAwREQzQzVGQzBEQ0VGOThCOERDOUVCNzUyRTRDOEI3MTk2MwotOjEwRUI2MDAwOTY5RkY1MTlGRENDNkI1REY2N0NDM0UzNkNDQkU5NDQ1NQotOjEwRUI3MDAwMEY3REE1QjY3NUU5MzkxQkRDOUFBOUMzRkRDREMxN0UxMQotOjEwRUI4MDAwODUzRkM1QTI1Q0NFRTVGOEY4MTgzN0RGQTgzNEEzQkRGMQotOjEwRUI5MDAwMTRCRUIwMkFEQkJBM0ZEQUU5RTI3NkQyQTEzRjdBMTg5NgotOjEwRUJBMDAwQzZFMzM3RDQ3OTI5OEU2M0VFQTM5QkVCQkQxNTkzQUVGNAotOjEwRUJCMDAwMzBERkExRkQ1RTFGRDJDQkNFNDgyOTNEMUY5QkY1OTRDRgotOjEwRUJDMDAwQUY5RkU4OTBFNzAzNzhDNDlDRDZDRDdBNkE3RTMzRTBBNQotOjEwRUJEMDAwRjU4Nzc5MzJFOTk4OEVBMkU3RjI3MTdGRjFENjNBMkY2NAotOjEwRUJFMDAwRURGNzg3MDNGREJEOEY0MTM5Rjg3RDc3MENGN0I3RUY1RgotOjEwRUJGMDAwQTk0OTM3NTlGREQ3RkI1RERDREVEQUUxMTJGQTZBOEJGMQotOjEwRUMwMDAwN0RGRjE5Rjg2MDA3RjI4MTI3MThBN0ZENEJEOTJCRjI3OQotOjEwRUMxMDAwMjYxQzdFOEU4OThGRjBDMTdDQjk2NDMyN0Y5NjRFMUU5MQotOjEwRUMyMDAwQjJDRkVGMTQ3NEIzNTNDOEZCMkQ0MkRFM0JGQjI5NjkwRQotOjEwRUMzMDAwRDYwRUJBRDFFRTVGQUU1NTI5MTlGODcyNDJBQkRENEU1MQotOjEwRUM0MDAwMjg2RUIxRTdENTE0MzZEQkU5M0UxNDJCNzBEODE1Njk3MAotOjEwRUM1MDAwRDI2M0E2M0VERUUwMEI5RThBNzQ1RjA1RkE5MkRCMDc2NAotOjEwRUM2MDAwOUE2Q0RENkY3N0VBRTMzREFBQjFDRjQ1RjZFRUM5RDlEQwotOjEwRUM3MDAwMDlFMTQwQkMwNUYxRURCNDczMEYwOTdDRkY0RDMxMEU4NQotOjEwRUM4MDAwMjI3RTAzNkFGQzkwOEJGMjQwRTMyNDY3OUM3NkMzMzBCQgotOjEwRUM5MDAwMzgxOUMwMzk3OTU0Mzg3RkVCRkEwQ0Y2RDM1OEZCMDM5NgotOjEwRUNBMDAwMUZDQUYxMURDRjAwQzg3M0IyOThDOEJCMDg5MTFDRUVGMwotOjEwRUNCMDAwMDg3MTdGQTVDM0M1RkQ4NDc3QzVCQ0ZFQ0JBNTUwQkYzOQotOjEwRUNDMDAwMDM4MkJFRTYwNDU4NEJFNjdDMzIxRTJGN0ExRjBEMTNEQQotOjEwRUNEMDAwQUMzNzNFNzNGRTJFNUEyQ0Y0QkQzMEYzRjdGNzVEN0M1MwotOjEwRUNFMDAwOUY2RENFODREMUM3RjkwMEM3ODFFN0VGNTRFMzFEOTcyQwotOjEwRUNGMDAwNjUxRkU3NTE5N0YxOUVDQjEyQTdGOEM4QTU3MTdFMzAyQQotOjEwRUQwMDAwRDc0M0U0RTc5QUY2RDMzRUQ1RjhEOERBREU3Q0U2Q0NGMgotOjEwRUQxMDAwNTc2OTNGRjczOEYzQzcxNEMwQ0ZGRTdDQjY5NzgxMUMwNAotOjEwRUQyMDAwRDkyRjA5N0NGRUQxNDc3OTQwMjZCRTA3RUQ2Qjk0MUY5MQotOjEwRUQzMDAwQTgwNzVFMDlBNDMwOUU2MkFFODNCOTBGMzMyODQ3NDQwQQotOjEwRUQ0MDAwRkQzM0RDNUM5RTAwREQwNERDMzQ3RTlDRUYxN0IyMzRDNgotOjEwRUQ1MDAwQzk4NzAyNDEzNzNCN0Q4QjZGQTk4M0U3Q0RCM0RFN0M0QQotOjEwRUQ2MDAwMTFGMzE1REU3RUQ4QTcyMzVDNUJBQjhGODZBRDcyOTM2MwotOjEwRUQ3MDAwMzVEQkU5Qzc3Q0VGRkFBODkwRjZFOUJGMjUyNUYyREQ3RgotOjEwRUQ4MDAwMTZCQkRFMTUxOTcwNjNGQkZEOTI0RUZFNUNGMjBGMEE5NgotOjEwRUQ5MDAwRDkyM0ZCQTVENEU5NjRBOEE4OENGNjMzRjY1RjEzNERGQwotOjEwRURBMDAwNkRCMkVDNzczOEVERkMxQzVGRkYxREFCNzBERUNENjAwMwotOjEwRURCMDAwMkZCMTBDRjEyOTYxQTcwRkRBMUQ1MTdCRkJCODlCMDkxQwotOjEwRURDMDAwM0IxQkE2MEI3QzVEMjlFNjFENTMwRDA1RTE5OEM2MTI4MQotOjEwRUREMDAwRjQ5Q0MxNzQ3QTgyM0Y1MEU1ODZGQTY3QjE4MTdDRTQ4NQotOjEwRURFMDAwQTM3NTgxNTNDRUUxNzZDNjdGMUJERThDRkY4RDc4MUIyOQotOjEwRURGMDAwQTI1QkJCREUzNkY3MURGMjA0MUU0MkFDODVGNkRGMUZCOAotOjEwRUUwMDAwNkY1QUJBNzEyMjhDRTcyRTBBOTIzRDlDRDdENDdFQUQwMAotOjEwRUUxMDAwMUNDNjZDQkYzRTBERkRDRDNDQjExRkNFMTY3MUZENkMwNgotOjEwRUUyMDAwRUU0RkU3MzREOEY1Qjk1MzdGN0I4NEJERTExOTQxQUY4QwotOjEwRUUzMDAwM0JFNUU2NDg3QTdEQjlEQkFFRDcwN0UzQzcyM0M4M0Y5OQotOjEwRUU0MDAwNjdGQzc4NkNGOUE3REY1MjU3ODI3OTFBQzYwQjc1Njg5MAotOjEwRUU1MDAwRDdDRDU2MjlERTE5M0U5NTVEMTFCN0QwQzNGRjc1MTM4NgotOjEwRUU2MDAwRDFDMTkzRTdDRDZDMDI3RTREOURDNkY5OUNBMTlGMTA0OAotOjEwRUU3MDAwMDAwNTg0RkIwOUM1NzIwQUYzNkQzNjI0NTNGNTk4N0ZBQgotOjEwRUU4MDAwQjY0MTlEQTg1OUQ3QjFBNjk4REJCMzVCNkJGRENENTZCMwotOjEwRUU5MDAwQkJGNjc1M0Y4RkE3NUUxQkE4NzkwQUU5QUEyMjk4QUEzQwotOjEwRUVBMDAwMjU3N0NGMDA0NzcwMUNDRkJCQzQ3NTNCNTM2M0ZEQjhCQgotOjEwRUVCMDAwMEZFQjYxNUM2RjAzNDc3OEI5NUVBOUQzNUVBN0ZDQ0MwQQotOjEwRUVDMDAwMDQzQjExMTg0RDJGRDhGMzMxRjdBOEE5NzU3RUM0NDcxQwotOjEwRUVEMDAwODRDNzVGNDIzQjI0NEFDRTUxN0E4RDM0RTY3MjREMEQ5MQotOjEwRUVFMDAwMkNCQ0QzQ0RGNTU3Mzk4RTczNjAzQTk4QkI1MEZGODM1NQotOjEwRUVGMDAwMDM2RUIyNzM3QTQzODUyQURBOTNGQkU1QTUzRjQyM0I2MgotOjEwRUYwMDAwNzBFMDI1MEZDM0ZEOTRERUJGOUY0MUU3MUE3QTQzRTcwNwotOjEwRUYxMDAwQ0M0MzNBRTg5NTE4NzhCNjMwN0ZFMDFGOUVGQ0MzMDJEOAotOjEwRUYyMDAwMThCNzBGOUY2RjMwOEM1QjBFM0NDRTYyNzdDMUY4QUU4NgotOjEwRUYzMDAwRTg0MzcxQ0FEQjY1NDY0MDlFMDlFRDdDQUMwQkYzNTc5NAotOjEwRUY0MDAwNjI5RkY4REYzQjBGRThFRUMxNjBENUY2QTk2QzI4MEU5MgotOjEwRUY1MDAwNjBGQUZGRTdGOTEzMEYyMTlDMURFM0ZFQjMxOUY5QUMyQQotOjEwRUY2MDAwMEJFMDU0QzgwRTMzQTIwODc3NTU5RTRDRkNDN0YyODJDMgotOjEwRUY3MDAwQTk4OUYwQkVFNjcwQTQwRUYzRDE2QUQ0NEE5NDM0MDA5NQotOjEwRUY4MDAwMDc1RkVGRTc3RDg5NDdCMTlGM0FBREIxMkUxQkVBNTc4NgotOjEwRUY5MDAwMUZEMUM5NUU5OTE3QkRGNjEwOTZBN0JGQzJDQjFENkVEMwotOjEwRUZBMDAwNDZGNjIwRjIyRkIzRjA1RkNENDdBN0QwRkMwRTBCMzkwOQotOjEwRUZCMDAwREUxRTM1RkEwQzY5OTRGNUQwNTRDNzc5MEU3QjFFOEI5MgotOjEwRUZDMDAwOTUwRUI0RTkzNjNBNDhCOEFDNzQzMDEzRTg2MEIyOTU5RgotOjEwRUZEMDAwMEUwQ0U5QjNEMEMxRjc4NEJDMUQ5QjVGMzg5RjVDQUZCQQotOjEwRUZFMDAwNzBCRTE5NEVGNzJEREU5QzhBRTFGQzYxOEVCQkE5M0FGQQotOjEwRUZGMDAwMjc4MkZCQUIyNjFGNjgzMzZFRDJCMEVDNTlFMjhFMjMxQQotOjEwRjAwMDAwREY5OTdDNjFGMkMzM0ZCQzJFODIwQkY4RTI0MjFGM0NDOQotOjEwRjAxMDAwMTcwNUY1Qjk5OUY4MDJGRDM4MkJGRDVGMzIwMjlGMkNEOAotOjEwRjAyMDAwNjAwMzg3MzBFNzdFODFDQTkyNTkyMDQyN0U3N0Y2MUJDMwotOjEwRjAzMDAwNjVBNzU4RThERTg5QTcwNUIzMjU3NkQ0MjI4RjRFOUNCNAotOjEwRjA0MDAwRTA2NTBCMUVCNUMxM0M2OEU1RTRGMUZEOUNBQTc3NDQ4MAotOjEwRjA1MDAwMkM3Q0Q3MDlGNjMzMUE4NTVENzI4Q0U1OTUyMERGMkQ1RgotOjEwRjA2MDAwMEQ3QUE2RTFGOTg2MDdBMjE0REZGN0M0OUIyOTZGNkQxQwotOjEwRjA3MDAwQzY1QjgxQUI4MTBFM0YxODI3RUIzOEY5MEU3REU5RkRBOQotOjEwRjA4MDAwQzRCRjJGMDYxOERBNkQ1QkE3MkY5QjgwRkVDOTA3RDc3OAotOjEwRjA5MDAwMjQyNjYwOUM3MzIzRTBGRjI4MTkzN0E5RjEzMkU1NDI0QQotOjEwRjBBMDAwRjU4RkU3RkI2NTdBOTQzRjEzNTFGRTlFODlFRjI5NTE1NgotOjEwRjBCMDAwMzY0NEJEN0VBQTA3RUI2QzkzODdEQkJEOUNCRUI3N0I1NQotOjEwRjBDMDAwQjk1REI4RDFEREVENDVGRTFBMjhGMUQyN0VBQTU5RUYxRgotOjEwRjBEMDAwM0M4NURCNkRCMzNDMjI5RUZDRTk3QTFERkRGQjU5MUU4RAotOjEwRjBFMDAwREU2RTdCNUIyQUZFREE0NDg0NzMzNzNENzMxQjUyMEM2MQotOjEwRjBGMDAwRjcwM0ZDRTU0OTFERTNGMURFNzUyQzkxQzlFRUJCREQ5QwotOjEwRjEwMDAwQ0JGRDdGRUZDMTFGRDAzRTUyNkU1OThDRkNDRTQ4MDMyMQotOjEwRjExMDAwRjQ2NzU5QUYwNTgwOUEyQzkwMUYwMEFFODE3NERDQTE3MgotOjEwRjEyMDAwRkJDOTBFNUIxMEE5RkRBQjNBNjVGOEZBRTI5RkEzOTYwNgotOjEwRjEzMDAwNzVGMkZFNDM0OUY0NzJGRjhDRkM4QjM1QzI5RkFCMkJGQQotOjEwRjE0MDAwRjUxMjVGNzRCNEJBN0I3MDJBOEIzQ0Q5RENERThERDRBNwotOjEwRjE1MDAwOEU5QTNGOEI3RTUzMTJENjM5MDU3RTEzM0U3MTdGMjNFNAotOjEwRjE2MDAwNzkxQURGREZDMDMyRUU2RkUwMTNGNzM3RjA4OUZCMUI0RgotOjEwRjE3MDAwRjgxREY3MzdCMEZDRjMzNjgzQ0FCOENGODE2NURDRTdGQQotOjEwRjE4MDAwQzAzMkVFNkY2MDE5RjczN0YwQjlBRkFEOTk5RUJGNkEyNAotOjEwRjE5MDAwNkJBMUVGOEZCNEI1NTJGOTNDMEZCN0IzNTk3OTMyQkFCRQotOjEwRjFBMDAwMTBGMERDNzU4M0RCQzA3REVCQ0Q2MjdEMUUzMzRBNzNDRQotOjEwRjFCMDAwNjNCMDhFQkUwOEY3M0I3RDRGREZDQTcwM0VCRTI4OEYxRQotOjEwRjFDMDAwMTc3NTQ2NkY2NTU3QzJCMzZCNUFBODBCMDM1OURFRkIyMAotOjEwRjFEMDAwODNGNEY0QTlEQjE5QzYwRDc2NDlDOTY2OENEMEFERjY2NwotOjEwRjFFMDAwRkNFMjdDMTVGNDczNTlGNERBREExQzI4Qjc3QTFFNTk1QwotOjEwRjFGMDAwOEY3OTNCOTNGNEI1QjFBNURBNTA1OTBGNTUyRDdCQzBFQgotOjEwRjIwMDAwNTI5RTUwRDFBM0ZBQTFGRTc3MzZFQzVGOEY3QzhBNzBCNAotOjEwRjIxMDAwQTBGMUI2QzE3M0UwRkNCNUIwRTRFOTUyNDZFNzM3MDZBOQotOjEwRjIyMDAwNEFEQzI5QTRCM0FCNzBCRDI2MjJGQ0RDQUVCRjg4QUQ5RQotOjEwRjIzMDAwOEZBMjlGM0M0MTc3NTcyMTdGNDBGRDM0QTdDQjkzQUJGMgotOjEwRjI0MDAwQkYxOTM3QTlBNjBENkYzNzVBM0RCOUZBQTRFQTMxNjUzRgotOjEwRjI1MDAwOTRGRUYwQkIzNDRBM0YxRDZDQkQ4NjY3QzkzNjIzMkYzMAotOjEwRjI2MDAwNjMzRTkxMkY0MDdFNUE5NzhCRjM2NTk3OEYzRkRGRjQ3MwotOjEwRjI3MDAwNzJCRkVDRDdERURBOEJCQ0YwQkM0OEYwNjk5NzJGNUUyQQotOjEwRjI4MDAwOEY3MUNFODFDOTMyQzUwQjdBNUREMDA1MjZFNUI2OTY2MQotOjEwRjI5MDAwRkNCRTE0QzZGREQ2NTMyQUMzQjhGMzVEMUU2RURGNEMwOAotOjEwRjJBMDAwOUMxMEUyRkFGMkRCNUVEMjk3MTc0Q0Y4NTk3QjBFOTQ3MQotOjEwRjJCMDAwMjdGRTM4MTY0M0ZEQjc5OUM1RkM0ODI3QzkyRDNDNkU3QgotOjEwRjJDMDAwRkFBRkQ1QTdFNjM0NDJGNTMzQTczRDlDNDM3MTNGQzE2MQotOjEwRjJEMDAwREYyOTNDNkYwNEU1QjUxRDU3NEZDMDM4QzcwN0NGNzIxMwotOjEwRjJFMDAwQjlGNDgwQTBCNzFFNTc1RjBCQURFN0I0MjBEOTBEOENFMQotOjEwRjJGMDAwNzU5MzVEQjAzNkFBRDJCRUJDOUNDRjlGNkU5N0Y2MTVCMwotOjEwRjMwMDAwQUNFNzA2QzU5QjA0NzhEQzdGOUZFMTI1RkZGQjIzOEZEQwotOjEwRjMxMDAwMzhBN0Q2NDdGNjgyREI5N0QwQjJFMTdENzc1MjI2N0VCQQotOjEwRjMyMDAwNUZBRkY5NTM5ODhBQkYzOTU4NDVFNzY2OTMxNTJBRTVDOAotOjEwRjMzMDAwNUQ2RkFFRTBGMUI5NDBFOEIyMTREQTA5QjcxQ0YwNzFDNAotOjEwRjM0MDAwRjkxMEY0NTJGRTU1QUE2MkVGRTFEQTA4M0U2NTBERjlCNAotOjEwRjM1MDAwM0Q2NTJDQUMyN0JDNkJCMjQ2Nzk1Q0YwMzdGQURFMUNGRAotOjEwRjM2MDAwQTEzQ0VEQ0Q0Q0FDNEJCMzRDN0U2MEM3Qjg0RjdFMzM2NwotOjEwRjM3MDAwMTVGN0JCQkZBRUM1QzREOTIxQ0E4MzI0RDM0NkM2NzMxMwotOjEwRjM4MDAwQkMwMzA3MDMwOENGNTdDRDczNDdGREVCMDI1MEJGN0Q4OQotOjEwRjM5MDAwQTkxNkMzNzU5OEEyRDVENjYzN0NCMDQzQUJGNTIyNUY5RQotOjEwRjNBMDAwMDUyNkQ3Nzk5NzkwMUMxQUNDNTNBNkYzNkRFRDE1REM4MgotOjEwRjNCMDAwNUVDNUVGQzg5N0FDOUQxREMyRjMyQzg1NDI5NjA1QjI4MQotOjEwRjNDMDAwQUIyNEI0NzMzQTFBMjg2Qzg0NzlCQ0I2QkNDQkY2OUNENwotOjEwRjNEMDAwMEIyOUFGNUQ1OTkwNDM3MDc2MzBDMzhCRjU5MzBEMkE5RQotOjEwRjNFMDAwRTlBNUMyQTAzNzhENzY1Q0ExMTkzN0M0OTQ2MzhCMUY0MQotOjEwRjNGMDAwOTFCQkRDOUVCNzlDREZBQ0RBQ0U3NThDNEZEOENCNzk1NQotOjEwRjQwMDAwQzIyRkM4NzNFNDM3N0ZFQTMxRjc1NUVDNzg3MkNFMzdGNAotOjEwRjQxMDAwMzc3MjU3MzZDMjlCOEIwNzk1RjVFMUYzRDkxRUE5NkE1RgotOjEwRjQyMDAwQzQ3OTE2NkE3RTgyM0JBQUFEQUI0MUY5MzU5RUI1QUM3NAotOjEwRjQzMDAwNDVCQUZCQ0NGMDNBRTA5QzUyRDFERTg3RUIzRTQ1NTcxMwotOjEwRjQ0MDAwRTkxQ0MzNTQzNkIwMEVGQkREMkNFOEJDQUJDNEFFMjdDMAotOjEwRjQ1MDAwRUZGMjI4NjI3RkI3QjZEQTNCOERDN0I5OTI5NkYxNEJDRgotOjEwRjQ2MDAwOTI3RTk2QjQ4Qzc3NkE1NzhFQUQzQ0IxQkJDMDU2RkY4NgotOjEwRjQ3MDAwQjQxREE1QjZFRkE3QTdDRUIwN0QzRjczNzc5NUFEM0M4MQotOjEwRjQ4MDAwQjk3Nzk2QURGRUQ0N0RCNUI2NzI2NUZBNDI1QkZEQjMzMQotOjEwRjQ5MDAwMEUyRkI0OTVBN0Y1N0RDNTU2N0ZDNjhCNEI2RERGQ0Y3QwotOjEwRjRBMDAwRUU1RjY2RkI3RUNFMUJBQjZERTU3MzA3NkVCNEQ1MzdBMgotOjEwRjRCMDAwRUQ2NkE3NUU5Q0UyRkQ3Q0Y2QjIwN0NGNzlEOUUyODJDOQotOjEwRjRDMDAwNzY3QkRDNjk0RjdCRkZCMTVFNUY4NzcyMkRFQzI2RkE5RAotOjEwRjREMDAwNTY1MThGNDM3OUY1MEREQzlGRjFDRTg5RTkyODU3Q0E0MwotOjEwRjRFMDAwODQ1RDkzMTUzNENFNDEzOTVBMTNGNjkyM0U1MDgzQkM1NQotOjEwRjRGMDAwOUUxQTlDNDc3NkM3MjkzQjQwMUU5RDg1NTYyMDFCRkNDMwotOjEwRjUwMDAwMUU0MEI5REM5NjhDOTdCOTg2RTBGNjY5REQ3NDY2QTE3OQotOjEwRjUxMDAwMjY1QzRGNzE3NUIzQkRBQTE5MkMxMUMyRjE3NDZFQ0Y2MAotOjEwRjUyMDAwODBCNzg4RjU3QzNBQjRCN0NDNjNCRjJDRDMxMUVGMDExOAotOjEwRjUzMDAwRjBCQkVFQjJGODVEMjNGOTU5NEVCRkVBNjRGREE4NTM2MwotOjEwRjU0MDAwNjRFNkM3Njc4RjE0NkZDMTY3NDVDQkIzQjU5ODVFMDc5NAotOjEwRjU1MDAwRkVENTE1ODg4N0FERUU3ODczMEZGNEJCQjVENENGRjcyMQotOjEwRjU2MDAwQzE4NDdGRDU1NUQyNEI3QzMxNTBBMjkyN0U2MUFBNUU3OAotOjEwRjU3MDAwQjFEMDEyREZEQUU0RTU3QTI1RTBCRDgzRkMzQkI1NzQ1NwotOjEwRjU4MDAwRTY2MTFERjFCRTU2QTVCOEMzNjY4OUM3NDc5MkIwMEVBNQotOjEwRjU5MDAwQThENzc2Q0Q3QUUzOURFRkMwN0I2RkE5QjdEMDBCRjJFOQotOjEwRjVBMDAwMjhGNjk4REJDMEZEQ0ZFRDAyQUZBNTVBNjUyRDU4NUM1QgotOjEwRjVCMDAwNjA1RjM0MUVDNEU3MjQxREVDMEM3ODk2OTc2RjNCODg3RgotOjEwRjVDMDAwQ0Y5QkJDM0NCRkVFOENEODAzQjUyODRCQkM3M0I4RkRCOQotOjEwRjVEMDAwQTc0QzcxQTdENkUxRkE2OTFDOEU5MUU4NENDREQ5QzEzMAotOjEwRjVFMDAwRjdBOUNBRDRENzkxREVEMERBM0UyMTBGRDE4MTBGRTkzNQotOjEwRjVGMDAwNDBBMjI3RDE4RjJGMTIyNEJERTFDMzhEMUMyQ0FCNTIwQQotOjEwRjYwMDAwMkEwMERGMjM2NTg2ODQ3OTE3MzVFMTFEQjRFRkU2NEJDOAotOjEwRjYxMDAwREJFRDU1RjAzNzM3MjE1RTIzMERGNkY1MEU3ODc3MTFDNwotOjEwRjYyMDAwN0NFRDEyOEZCRjc2NjVFQjRGRDcwMkZDNUQ3OUE1Mzk3MwotOjEwRjYzMDAwMTgzQkMxRjg0NEEzNDVERTZDMTdGQUY0MkIzRUQ5RDQyRAotOjEwRjY0MDAwRkYyNDZGRTg1Q0Q3QjQyMTdCMDdFODdGODc3QzJBQzI2MAotOjEwRjY1MDAwRDdDRDUwNkVGOTZFRUE2NjQ4RUYzRTBENTYxM0VERURDQwotOjEwRjY2MDAwRUYyNjg5RkU0RDdCRjczQUMxNUI3NUE1NERCNERGRjVGQQotOjEwRjY3MDAwNUVBNDhBRUM1QjVGRUJDRjMzRTJDRkQ3QUYzMEUzQUM3NQotOjEwRjY4MDAwOTFGMTFBOUVCNDkzRjQzRDJCNzVFQjY4NTdCNEVBNkU3MgotOjEwRjY5MDAwQTMyNzgzM0NBOEYyNzAzQjY2MjNFNjdEMjAzQzIyRUY0MwotOjEwRjZBMDAwQTM0QkUwQzNEQzZGN0JDRkNDODcxMkZCQkNENzY1MzNBOQotOjEwRjZCMDAwREJCRURGNzU3OTU1RTM0N0IzQzc3REUwRjcyNTJDRjA1NgotOjEwRjZDMDAwNkU4NDcxMTAyRjFEOUYzNkQ2Qzc2OUZGOEZGMTczNkE0NAotOjEwRjZEMDAwN0ZBRkU4QTFGM0MwQzI3RkE5MTI3NkQyMkMwQTlBMDFBQgotOjEwRjZFMDAwREZCODE5RjkwOUU3NjNGQ0UyMkNGNDM2MkZBQTQ3QkUwQwotOjEwRjZGMDAwMzRFMzFEQUY3OTczQTg1RTJDQzk5NDE2QjI1NzVDQTY4QgotOjEwRjcwMDAwREU5MjRGNEMyNTk4NzVCNzE5QTcyNDkzOTdFQjM1RjhERgotOjEwRjcxMDAwRjcwMDlFQUIzOEI1Q0I3RTVFNjk2MkI3QkQ3Q0RBMEU3MgotOjEwRjcyMDAwN0JGOUY0OTRCRDBDNTZGMzExQjQwQjFBMTlDN0NGOTk5OQotOjEwRjczMDAwQkJFRERGMUJDRDM4NUYxRDNGNjdFMTg1OTE0RjcwRkQ0RAotOjEwRjc0MDAwNkIzQkQ3Q0E4NEZFMzdFM0E5QzVCREU5MUExNEFGNDVBMAotOjEwRjc1MDAwNkJFQzdBQjU0MEU4RjkwMjg3RkVBQzBBMjlFNEU3RDdGQQotOjEwRjc2MDAwMUM4RTFDNDJGQkQxOENCRjNDRUZEMzZERjk2RjY2MUMyNQotOjEwRjc3MDAwQzUyOUNGRkRBRjZDNjNGMDg1RkNFNTg0ODdDNzE3MTIwMAotOjEwRjc4MDAwRTBERkI0MTY4OUI4NDUzMTdGQkExNEZEOTlDNTY0QTc4NgotOjEwRjc5MDAwQjU5Qzg2RjJFOUQ3REVDNDA3NUUzMjVBRUNFNzIwREU3QwotOjEwRjdBMDAwQUQ1NzFGOTc3NDNFNEVDMjMyQ0VGNUU1QzkwQkY4RjQ0MwotOjEwRjdCMDAwNTM5NDU3NjJDNjMxNEMzRkZEMUYwMUUzMjJFNEFGQ0RBNQotOjEwRjdDMDAwQjFFNzVBMUVDMzM4RDI0QjFFODZGRENDNTU5RTNFREM5NwotOjEwRjdEMDAwMDZFNUQ1QzUyQUU1NDE2QTMzOTZGRkM4OEY3MTQwRkMxRQotOjEwRjdFMDAwMEVFNTlBMTI3RDNDRDFGRjkzMkVGMkQ3MzcwODdBMzY3OAotOjEwRjdGMDAwQ0ZFNzk4NzE4RjVDOUZEMDNGM0VDOURDODdGMDhCM0M5MAotOjEwRjgwMDAwNTczRkRBQjk2N0VFMDZEOTZDRDM3MzNDOUU2NkM2Q0QxNgotOjEwRjgxMDAwMjZGN0RBQkZGNzMyMjk1NzgzRjU5QkRBOTQ5MkI5NUQ2MAotOjEwRjgyMDAwNjUwNDZCMkM3MUY1MzNDNDdBNEQ1OTlDQkU3NTMxOTRDNwotOjEwRjgzMDAwRUY2M0E5MkFCQzJGQTI1MkQwNDVFQzkwRkQzQ0Q4MzhFQQotOjEwRjg0MDAwMjZEMUI5ODE3MTQ3OTQ1ODBBRUE0Rjc5QzRGRUJEQzJFNgotOjEwRjg1MDAwNzE1RUVDMENFN0Y5MzE0NzlDMzdBNEIwNzc5NkMwNzgxRAotOjEwRjg2MDAwNUJGNDE2MDlFNUU3OTZDNTYwQzM0M0I5QzIyN0YyODc4MgotOjEwRjg3MDAwMjdCMTQ5NDg3RjczOTU2MDJDOERGOEZEODM0MjdBQzM4OAotOjEwRjg4MDAwRjNFQTY5MkYyQzQxN0RGRTJDQ0Y0RkQxNEVENUI3RDU1MQotOjEwRjg5MDAwNDE1OUZCOEQ0MkZBNDkwQkIwQ0FDQUUwNTA1Q0Y4N0I3MwotOjEwRjhBMDAwMjc2MkFDREQzNTE0NjdEQTAzRUI1QTM2MTFGRDZCMkY5NgotOjEwRjhCMDAwNDNCREYyNzM1ODVGMkNGNzgyM0Y4RUU1MDdDMTFGQzcyNwotOjEwRjhDMDAwRTc1RUYwQzdGMUZEMkZDMDFGQzdGMjNFRjBDN0YxRjlBOAotOjEwRjhEMDAwMkJGMEM3RjFGRDIzRTA4RjYzRjlEQTQwNEQ4RDJGQ0Y3OAotOjEwRjhFMDAwMUVBN0IyQzZFRDg2RTI1NEZEOTIxOUE3NDI1MUYyQkVBMAotOjEwRjhGMDAwOUJEM0ZGNjBCQzJBQzFFMzU1NjNGNzYzOThGRDUwM0M3RQotOjEwRjkwMDAwNzA1ODNGMjIyRUY4RjYwREZGNzkyRjlFOUY1RTMxNkRDNQotOjEwRjkxMDAwNUQxNzlFODNGNUJBQ0NCODE4Q0Y3RjMwRjM5QTRERkVCMQotOjEwRjkyMDAwNUJCMUY3NUFEQTBGNzZFNzFGNjlDMUY1RDg1QjFEQTQwMgotOjEwRjkzMDAwM0I4NkRDQUU4NDg2RjJEMUU5N0Y5OTdFOTdEM0ZFMzU5MwotOjEwRjk0MDAwOUY0RTdERTQ0NzNCRTAyQ0I0OTNCQTI5RUVCM0M5QzU4MgotOjEwRjk1MDAwQ0FFOTVDQUNFNDhGMjE1RjM4RTM5MDI2MUYzRkVCMkJCNAotOjEwRjk2MDAwQ0Q3ODlFNjkzMDNGNTZDNDY3M0MyQ0U1QzU3ODk5NUJERAotOjEwRjk3MDAwMTJGMzE0Rjk5QjI0QzJBMDhCQ0RDOENGOTY3Q0UzNjAxMAotOjEwRjk4MDAwNDU5QUUyMUNDMUEwNDFGNjk3MDQ3NjE5RDk2OTVBMjIxQQotOjEwRjk5MDAwOEE3MUE4Q0UxMUYyNjE3NzA5M0U1RDlCRUZBNjdCMjRBOAotOjEwRjlBMDAwM0FGM0Y5RkU3RjVENTEyQzhBRUREN0U3NEY4RjVBRjM3QQotOjEwRjlCMDAwNjNDREZDREQ0M0ExRTlERTdFNEI3RkFCNDNBNUEzRUEyQgotOjEwRjlDMDAwMjkwNUY0QUEzRThBNUU1NTNDM0M3RjdERkRDMUIzQkQ0RQotOjEwRjlEMDAwOTg5N0JDMjlCOEI0MEZFREFCNEREMTA4OUQ1RjNGOTAwRgotOjEwRjlFMDAwM0Y5REVDOEZDMUZBRDE5OTk0QkZBQzA0QjlEREFBNDQxNAotOjEwRjlGMDAwQkQ2NEI3QUEzOEZGOEFBMUZBNjZCRDFCODU3QzA2RjZFRQotOjEwRkEwMDAwQTNGODVDMjBEODRCRjUzQzZBOUNFMjFGOUUwOEEzRkQzRQotOjEwRkExMDAwMkE4Rjk3RTcwQjA0QzFCRkY2REFFMkE2NDIxRkZCQjhCNAotOjEwRkEyMDAwN0NEQkE0MjdFMkQ4NkU1MzU0RDU1MTFDNkQyQUFGMjIzQgotOjEwRkEzMDAwM0NBRjE3Nzg1RTlGNjdFQUZEMThEOTFCMEYwQTM5NjgzQgotOjEwRkE0MDAwRjZCMzVFRjhFQkVCOUJERDY0NzdDNTVCQjM4REJBNUMxOAotOjEwRkE1MDAwQ0FDN0ZDMDlGMkRGQTZFMDVENUVDQzZGNzdFNzU3OEY3RgotOjEwRkE2MDAwREFFRkEzNjNGNkZCNkE2RERENTlENEVGODMxODdGNzY3NgotOjEwRkE3MDAwODc5NjZBRDhBRjZCODRCQ0ZCQTc0NDdGOUZEN0JFMDQzMAotOjEwRkE4MDAwQ0M2OUI0REZDNTRDN0Q5QjhBNUFGNzg5OUQ0RjNGREExQwotOjEwRkE5MDAwODk2NzBENkZCNzQyRUY5Rjg3NzlCRjJBNEJENkZCOTVEOQotOjEwRkFBMDAwRTFFNzE2NTZFRUUzRjc1MDZENTVGQkM4REVEOUZBQTkyQgotOjEwRkFCMDAwOTRGMUZDNDNCNkRGRDQzRjgzN0VCOENENUUyOTE0RkNCRAotOjEwRkFDMDAwNTQyOEJFRUI2OEFGOTRBMDVGNjlCNzJGQ0UzQTZDMkY3NQotOjEwRkFEMDAwNEZFQkIzOTc2N0JDRThCNDU3OEMzRkEwQkRCMjQ4QzhBMgotOjEwRkFFMDAwQkIzRTkwQ0YzQzY5NjI0MDQ1MzkxMDRGQTY2QTEwRUU4QwotOjEwRkFGMDAwNDZENkJCMTZGNzI5NUQyMkNFQkM0OEU4QUI4QkNERkRDMAotOjEwRkIwMDAwNDc3RjM2QzE1RkQ4RUNCN0Y5ODlFNjdEMUE0NUEyRkY3OQotOjEwRkIxMDAwRTJCQTQzRDdCNkEzNzA4RDlCRjY4RjRFRkU2NUYxRkMxQgotOjEwRkIyMDAwMDc2QjQ4NEMzQUVDQTA0NkMzN0UxRUY1NjI4NzlERTMwNgotOjEwRkIzMDAwQjQ4NzZBRDQxRUNBQjcyQzcwQzQxRkNDN0Q0QTlDMjdEOAotOjEwRkI0MDAwOUVDQjc1OEVGRjU5QzczNUZCREIwOTdBMEJFRDE1RjM5QwotOjEwRkI1MDAwOUUwMkJBQzcwQkRBMTdBQjY5MjkxNkE0RkMyRENBRjNBQgotOjEwRkI2MDAwMkI1Q0MzOEM5RTBDNzQzQ0QzQ0ZFNURBMzBCQzI1Q0YyNAotOjEwRkI3MDAwMjNCQzlEMkZERTE1MDRGOTNEMjgwNTc1NEE0QTJGRTE2NwotOjEwRkI4MDAwRjk1RjI4NEYxNjJFODdGOTkwQkQ3QzgyRjZBMUNERkEzOQotOjEwRkI5MDAwMzlEOUJEOTQyRkI2QjM0MUUyRkU2MzkyOTExRDYyQUU5NgotOjEwRkJBMDAwRjNDRTIwM0YzRkQzNzhBRTk0OTJCMTdENEIyOThENEY1OQotOjEwRkJCMDAwNzA5NTBFQUQyRkUwRTkyOEM3MTNDRjJGQkJBNERFN0VEMgotOjEwRkJDMDAwQ0VBN0QxNjE2Rjk4RjQ3MEIxRTNGRENCM0U3RTRFREFFMwotOjEwRkJEMDAwRTQ4M0I3Q0Y3RTcxRDIyOTAwQzcwQTI5NTkxRjUwNEUzRQotOjEwRkJFMDAwNUU0RjVBRjhDMzc1MDJGOTEwRkYzRThFQTY0MkZDNzFCMwotOjEwRkJGMDAwRDBGQjkwNDZGOTAxRDlGRDc3MzAyMEM5MDYzRjRCRDY5RQotOjEwRkMwMDAwQ0QwNkJERTgxRjM4NTM4MkYyMjVGRUM5MUQ1REU3RTIyRgotOjEwRkMxMDAwNzFDNTgxN0Y0NUEzQ0NFM0E5OUE1QjVGM0M1NEY2RkI5OQotOjEwRkMyMDAwRTc1MDM5MjJDNjAxRDcyMkM5RDdEQjcyNkYwMUMwRkI2QQotOjEwRkMzMDAwMDM5MTFGQjBEOTYwREIxNENDQUQ5NEI1NkRCMTkyQTEyNgotOjEwRkM0MDAwNzYzOUQ4NEUxQUE1NUQ5QzZENTMzM0I0MEI5QUVEMDBFRQotOjEwRkM1MDAwNUQ5REU2M0QxRkE1RjhFNERGNjUwMThGNzU3QzE1RjExQwotOjEwRkM2MDAwQTZFOTQxM0FDNzMzNEZENTMwRUZFMThCQzIzMTZFQUNENAotOjEwRkM3MDAwNzkyN0Q4MzZEN0E5QzNEQjAxRDg2QjRERjhFNUNDRjA4RQotOjEwRkM4MDAwQTdGMEJCNzU3Q0Q3MjhGMEZGQjNGMTMxNTY3RjZFRjEzQQotOjEwRkM5MDAwRkQzM0MzMDdENUQ3OEQxQjc5QkUwODk3OEJFRUNCRDAyQwotOjEwRkNBMDAwODNCMkE1OUY1QjBFN0M0Q0YxNkJGNTcyNDZFNzc0NTRGMgotOjEwRkNCMDAwOTdBMUM1ODBDRTJCQjREQkM4MEY1N0IzRUIzNEI0MDM4OAotOjEwRkNDMDAwMzY0MjE5RUQ4MDhEQkRERDE0QTdBRTI4QkJCNTBCODk3QQotOjEwRkNEMDAwQkUyMkVENjcyODBGMjYzMzJERkIzRUU4NzdCMkE2NjJFMQotOjEwRkNFMDAwMjYwRTUzQ0YzRDI0NjNEQzlCN0Q4OUQxMzk5MUFDMDMzMwotOjEwRkNGMDAwN0U3RUFGNDVDOUFDMUZBMzdGOTQ5REVEQTUzODUwMjBGMwotOjEwRkQwMDAwN0JGQThGQjlCMUNCRTNDMTI2RkM4MTlBMjNCNTE4MjdDMgotOjEwRkQxMDAwNTcxQjU5MEM1OTUxOTU1MkFDMDY5OUVDNzQ0NkZCMTA3RgotOjEwRkQyMDAwN0U2M0VGRjU3OERFMTIxNDFGRTkyN0JBRUIwMUY1QUExRQotOjEwRkQzMDAwODg4QjhGRTcyNEMzQkFEQzVBMjNGQTA5QzlBNzU0OEFFRgotOjEwRkQ0MDAwQkY4RjQ3RDMxNDg4QjJBMjIyNjcxQkMyNTM5MTgwMEU4MwotOjEwRkQ1MDAwMjQ4NDlGQzdCNTI2MjdFNDU4MUFGQUFGN0E4N0I3NjM3OQotOjEwRkQ2MDAwQkZFNUU3MDNDMDk3Njg3QTM4Mzg4NDU3NTNBRThDMTdERAotOjEwRkQ3MDAwRjFGMkU4NjI3QjNDOTkwREMwOUNBMTdERDU2RjE3REU0NgotOjEwRkQ4MDAwODNGMTg0NzFDM0U0MzdGN0FGQ0Q3Qjc0QjJERTYxRjFFOAotOjEwRkQ5MDAwODc2OTVGRDNBRTM3RkNFMkJFMEFCRkUzMUU4NDkyQTA0MAotOjEwRkRBMDAwQ0I3NjhGQzEzMEJGRTFCQjcxRDIwMzFFMTZGM0JBQzk0NwotOjEwRkRCMDAwQkU1ODRDNzY4M0U5OEZFQ0M0OEExOEZGMkY2NkZDNUUzMAotOjEwRkRDMDAwMkI2N0ZCRTlCQzNEOEI3MkZGQzRFMzA3MzNBRjBBQkU3MAotOjEwRkREMDAwMkZGMzFCQTQ2RjNENTAwNjNDNEE2RUU2Q0Q4N0Y3MDUxNgotOjEwRkRFMDAwMzI4RjhCQUM5NTk4OEFFNUExRjFEMkI0NEZCRjQxOEE4RQotOjEwRkRGMDAwNzVDNUE0MjFGRjc3QkQxNkEzRkMwMUI2MjZDNzY2MkZFMwotOjEwRkUwMDAwOUI3OUE4QUJBRjI5MTk5RjAzQ0ZBQ0ExRjM0MDFBRDJCRAotOjEwRkUxMDAwRTNFQUJDMzJCMjlGQzNCOUZERkYwN0U1RUJGQjlCMzZCQgotOjEwRkUyMDAwQ0ZGNUEyRkNDNEZDODU1OUYwNUZBMEIzMjMwOUYyRDYzQwotOjEwRkUzMDAwRjM1MTIxRDMyRDc2OTk0NzZEQTEzODk4RTdBMzUzNkNFMAotOjEwRkU0MDAwRUZEMzZERjZGMzgzNDY1MEFFQzM3MUM2MDc3NDdFMkVCMgotOjEwRkU1MDAwODM2OUVERDhBRTg2RDlDRjA5N0EzRUNBQjdEOUU5NDNDRQotOjEwRkU2MDAwRkQxN0Q5REVBN0MxOUVCMURFNEYzMTcyRkYwMUE2OTcwMwotOjEwRkU3MDAwNUJGQjNGNzU4NEZFMjczOUZBRDczMkY2M0ZENDZGQUU2RAotOjEwRkU4MDAwQURERjBFOTVDNzQ3OTMxMTNGQURCQkQzMUU5ODFBQTg5RgotOjEwRkU5MDAwMkQwQTRDMUIyNTdFMUZFMEYxQzcwREQxMTY4QURGRDczNgotOjEwRkVBMDAwMzI2MDc4QTA5M0YzM0UzREFBRjBGMzZDOENFQzM2NTZBQQotOjEwRkVCMDAwNjQ4RkRGRDcwQUZBOTU4MTIyOTA3RUNGNTNFREY3ODJDNwotOjEwRkVDMDAwQ0Q2MUNFN0JDMkVDRjZEMDczQzgyODMwQUUxQ0FBRUU1MgotOjEwRkVEMDAwQTMzOEZFQzc0MTFERkRBRjkxRUNFNUJFMzY0NkYxRTMwOAotOjEwRkVFMDAwMzk4MUZFRUI3MDlGRkE4MkNENzdCQTNBNjY4QUZDRDdFOQotOjEwRkVGMDAwMDJDNjJFRERGQ0MwNUNCNEVGRkJDNDc5QkQ4RTg4NEMxRAotOjEwRkYwMDAwNzg4OUQ3OEVBN0YzMzc2NjNGNzEzNzlCODhGMjMwMkVGQQotOjEwRkYxMDAwRjNGQzA0RkEwM0UzRjdFNTE1RENCNTI5MDNGRTlDRTdERgotOjEwRkYyMDAwM0IxQjBEMjk1RTY2QTE5QjNFMTlGMDZBMURFRkZDQzJDQQotOjEwRkYzMDAwMUVDNTMyOEZCODg3NERBM0YxODQ5RDNCMzhERUI4Q0YwNAotOjEwRkY0MDAwMzdERUIzMjJFRTY0OEVENzM4Q0YzRUJGNDZCNzQ2RjNENgotOjEwRkY1MDAwNkIxNEZDNkI4RUY3MkNDRTJGMDM3RUM3MUM0RkU2NzQwMAotOjEwRkY2MDAwMzMzOERFMDVGNkY5MzU3QTM0OUE1RkEzQjhFNzc3NzA0RgotOjEwRkY3MDAwQkM3MTlGNkZCQzBEQUU5NjA0REE2RERCMjRDRUZGREQ0NQotOjEwRkY4MDAwODE1Rjc1RTBCQUJFRDdCMDNBNEFGQTQwRDhDNTE3NjM2OAotOjEwRkY5MDAwMDNBODc3QjFDQUM3NUI1MEU0NERBREI1OENCNzEzRTQ4NQotOjEwRkZBMDAwODAyMUYyREMwRDBGRTY2RjY4NTQ0RUI1NDVFOTc5MTdGNAotOjEwRkZCMDAwRDhEOTA2RTU2Rjk0RDNGNzdCREI2MjU0REVERDM2OTM0OAotOjEwRkZDMDAwOUU2NjNGRTUzM0Y5QkQzM0E3Q0Y5NjMyREFEQjg3MDM3MAotOjEwRkZEMDAwRENDRkRBOTZBRjVEN0UxNUVBQTUxQTNGM0YwRjM5RjMwNQotOjEwRkZFMDAwMUM2NjU4RUM1RjMwODgwRkZBNzBGRkU1MzI1Njg5QkEwQwotOjEwRkZGMDAwNkREMjBFMEU3N0E0NkU1QzBBRDdDRjVGNzlBOEFGMERENQotOjAyMDAwMDAyMTAwMEVDCi06MTAwMDAwMDBDQTFFOTc0QjQ3N0QwQUJDMTBDRkU0QTczRTE2RTA3RTgwCi06MTAwMDEwMDBCOEM3Q0RFNTNEOUJDNUVGMzE1QzIwRjQwQTUzMUEyNEU3Ci06MTAwMDIwMDAxN0UyRTNFMjZDREFFRjVGQjhDODA4Njk4MEI3NDU5MjdGCi06MTAwMDMwMDBGNDg3MzJBMUE3RjBEQ0NBQTU2MkE5OUM3NjdFMDQzNUJDCi06MTAwMDQwMDAwNkY0MUIzMTk0MTRERTRGNzQ2OUQxRTEyNkQ0Q0JGMTUwCi06MTAwMDUwMDBEMDI1RTQxRkM0QTE2MTBFRjQ3M0E5RDA5MzM1QUY3QTAzCi06MTAwMDYwMDAxOEU2M0JCMEI5NkU4MjYzRDEyMkJCM0RCRkNEOTdENkI3Ci06MTAwMDcwMDBEMDNFRDk1NjE5NjFCODNFMEIxQkVDREYzRDZFQ0U4N0UyCi06MTAwMDgwMDA3MUM3QkQwNTBCQzZCOEM3ODBFRUQyQ0E5MDQ3RUE4Q0NGCi06MTAwMDkwMDA0RjNFMUFCMEM3MjE4RkIzOEE1QkVBRjA2MzUxNjRENDM0Ci06MTAwMEEwMDA3QjBDRDY2MDlCQkMyMUZEMzY5QzhFMzkzQ0FGRkI5OTA2Ci06MTAwMEIwMDBGMERCRjY1MTNDQ0M4NEFGNDA0RDQ5MjhBRjBCOUJGN0E5Ci06MTAwMEMwMDBEOUYyOUEwMEIxNjQwQzlCNzE3OEE2REM1Nzg5N0U4OEJFCi06MTAwMEQwMDA3MzNFM0JBNUZCRjI0N0JCQjdBNDgwQTlBRkY3OTc4QjU0Ci06MTAwMEUwMDA3QjNEQTVFMUYzN0UyNTIwRjI2RjA3RTczREZCOTkzMkNBCi06MTAwMEYwMDA5Njg5N0Y3OERDNzVDMTYxMjVCNjU2MUZDMjhCODk4N0NBCi06MTAwMTAwMDBGRjY5M0VFQTEyNzg3RkU2RkNGN0FCQjlGRjU2NjRCQkE1Ci06MTAwMTEwMDAzRkQzQkMxN0Y4OTJDMUIyQ0E1NDBCM0Q1RkJDQ0M0RDYzCi06MTAwMTIwMDBGNjBDMzMwNjJBOTBFRThFOUMxQkUwRjdCODk5RjY0QjNFCi06MTAwMTMwMDBGQTI1MTlFRDk3MkZERUJGNTE2Q0NCREIxNEZEOEVCNDgxCi06MTAwMTQwMDA1RUNFM0M0MkNCMzlEMEExM0M3N0NDMkY5MUY4M0U1NkM1Ci06MTAwMTUwMDAwMUU2Qjk4NUY5RkJBMzc2M0JEMzk2RTdCNkZFQzA0RjFGCi06MTAwMTYwMDAyNThDRjNERDgxRjk3ODk2N0RFQjQyRjBFNzUxNkUxNjMwCi06MTAwMTcwMDAyREI3RTdENTM5RTEzMkYzQUEwNkNGRDFDRTVFQTREREEzCi06MTAwMTgwMDBBN0QzQkQ4OURENzgxMTRERDc4RTY0OUM1OUYyMjNDRDVDCi06MTAwMTkwMDBGMzgxQTYzRkVEM0MxN0E4MDRGOUZENzk1MTcxREVDMjQ5Ci06MTAwMUEwMDAxOTBGQkU1RTRFNkEyNTEyRTZBM0E2QkMzNUYwOUM5MkRFCi06MTAwMUIwMDA5M0E4QzJBM0VBRDcyQkM5N0E3Q0FGOEM5RkQ1OEM3ODQxCi06MTAwMUMwMDA1OERDRkFFRDE4QzZFRkI0RENDQzcxRTlDNTQyN0Y5RjZDCi06MTAwMUQwMDAxQkU0RjE4RTU3NUNFOTYyOEM2MzJGQ0RBOTNEMzczODYzCi06MTAwMUUwMDAyRDQzRkRENkVGNTI3RjczNDZCODhGRkVCMjIwQTdCRkQ2Ci06MTAwMUYwMDAzQjg0M0U3NzdFQkY1ODhDRjNFNTE1MzJERDZGRTE2M0JCCi06MTAwMjAwMDBBMTk0NTQ4MkZCQzZERDMzRTkzQ0RFQ0E5REIxNENFN0M0Ci06MTAwMjEwMDBERTlFMEEyNzE2MDQyRDcxMDc1RjE5M0Y3RkNENThFRjI4Ci06MTAwMjIwMDBEOTg4QUY4RDdGQkJCM0Y3N0U0MDY1Q0VERjgyMjQ0NzkwCi06MTAwMjMwMDA3MzE0REVBRkE1RkQ2NTk5REFFRkZGRjg3OTNBQjdCQzI0Ci06MTAwMjQwMDAxRkNGQTlBMDlEQ0NFRTk4ODdGRURDRDZDMTMyNEI0QUM5Ci06MTAwMjUwMDAxODFGQ0MxNkU1NjQyQkZGM0U1OEFFOUE1NzgzNjVBNDUxCi06MTAwMjYwMDA0MTIwQjI5NzgyNzMzQjkxNUVCNjRBNEMxMEUzM0M1RUVDCi06MTAwMjcwMDBERkM1RUJGRjQyN0M5RjczRTE1QjNGQkUwNUU1RkQ3NDhDCi06MTAwMjgwMDAzN0Y5ODE1Qjg1M0Q2MkMyRjc3MjkwRTdDREJDM0MwNkQxCi06MTAwMjkwMDAzRTVCQzVGNzIwRTIzM0YyOTlGMEQ5OUEwOTFGMkZFN0E4Ci06MTAwMkEwMDAxODM3RTBCQUZCMzA5MzAyNDBGMEZEQ0RCQjA2RjM4ODZGCi06MTAwMkIwMDA3RkQwQzY2MjU3QzExQ0VFODhFREZERTkyRDhDREEyNzkwCi06MTAwMkMwMDBBREY0NjFCNkJGMjhDNzU4MUIyNDc4OEVEMkZDNDI2NUI2Ci06MTAwMkQwMDA0MTc0NkZEOEM2MTk4Q0ZBQzkwMEM3QzY0Q0ZEOThFQjlCCi06MTAwMkUwMDA3QTMwOEJDQkIxMEZEMTc2OUU4NkVCQ0FFRDNGQzVEMzZBCi06MTAwMkYwMDAxN0M1RkQ3RkFERkE3QkQ3NjkyMDQ3M0E0QkJBOUIzMkQxCi06MTAwMzAwMDBEMUY3Rjc0MzdDOUYzQTdCODQ3OEY1Q0YwNTNEQkVBNEI3Ci06MTAwMzEwMDBDNTdGODA3MEI0NkJCN0QyRkRBQTZFODlEQjBEMUI2N0Y5Ci06MTAwMzIwMDBGNjMzQzlEMkVFQjcyMThFNkY4MEJCMDdFQkJCQ0ZFNkE5Ci06MTAwMzMwMDBGNzlFODYwMEVGOTg2MDE2QUFFNkYwNkZENDhGMzBDQzU3Ci06MTAwMzQwMDBFQjBFNDU4RjUwNUU2OEE4QkE5RkY4OUQ4RTJBMTQ3MEY4Ci06MTAwMzUwMDBCQTQyN0ZDRDJCRUNCMzlGMDdCRjMyMEZFRkRCQzg1MTAyCi06MTAwMzYwMDA0Q0JBN0JBQjEzRTk0NjE5MkExMzFERjVFNEYwRjZCRjJFCi06MTAwMzcwMDAwRkJERDU5OTA0OTFCQjBCRUMxN0JDODcyMzU5QzBGMzczCi06MTAwMzgwMDA0NjlDRjNGQkE1ODA3NzQ3RDhEODhCRUIzMjBDOUY5RTE5Ci06MTAwMzkwMDBGRTFGREYwMkVEQjc0RUU0RTc2REU2Qzg3RDRENTcyMjQ0Ci06MTAwM0EwMDA1RDVFMTgyNEZCMEJERTM3NTlFRkJGNzk1REUwRUJGNTlFCi06MTAwM0IwMDAyMEI3OUZCNjdFRUNBNUVGQ0VGNTE4ODk1RTdGMjdEQUQxCi06MTAwM0MwMDA3RjBFN0FGRDVEMjYzQTAxN0E3RDA2RTc2NUExRDdGN0IzCi06MTAwM0QwMDA1OTY2N0E3RDdFMDQ3QTdEMjExMzVFOUM2NTg1MTkzQjgyCi06MTAwM0UwMDA3MDdGNTZGRDY0REU2RUVDNEZCRDY4RjY4RUZCRTFBOUIyCi06MTAwM0YwMDA3QzcyNTM5MjU2MzMyNkQ5Q0U5NzlBRTM1NDRBODkzRjVBCi06MTAwNDAwMDAwNzJERjJEREJDOUZGQjlCNDFERUZGQjA3RTY3NENERjFBCi06MTAwNDEwMDA4MTcyRUMyNEZBMURDMEY5MzhGQkREMUZFNEYwQ0VCOTdGCi06MTAwNDIwMDAzMDk4Qzg3NDZGRDFDRTEwQ0YxQkJGNUJDQzZCMjRCRThECi06MTAwNDMwMDA3OTJBQzRGREQ5OTFGOEU2ODFEMDIwREZCMDUwREVEODBBCi06MTAwNDQwMDA3Q0YzQUFBODBGRUJFMEM1RkE2M0YzQ0Q2REY0RjQ5NTQ1Ci06MTAwNDUwMDA3MUJFQTE2M0M4QjM4NkYzMEQ0QkJFNDg3Q0QyNTlDMkFFCi06MTAwNDYwMDBGOTIyN0ZFQjlGM0IzMUNFMzFDODQ3QzkwRkVDN0M5NDFBCi06MTAwNDcwMDBGQ0MwQzY0NzdGRDlGQTAxRDU3N0I2MEY4RjcwNEY5NTZDCi06MTAwNDgwMDAzRUM4RkZGMTA5MzgwRkUzNENBRDlEOUZCM0U5MjdCRDhFCi06MTAwNDkwMDBEREMzMDYwRTc4MjhDRjk2RTdCNUZBOTM0OTgzOUIwRDA2Ci06MTAwNEEwMDA3RDBDRUYzRDJDMTc3OEQ4ODUzRTE4RkEzOUQzNDU5QzQyCi06MTAwNEIwMDA0OUVENjMwQjQzQzNGOTM5NTQ5REFFQjZERTIzRjA2QkFGCi06MTAwNEMwMDAzMUZFNDdBMUY4RDREMDM0MUNBRkZGNzRCNEJGNDY1QUY0Ci06MTAwNEQwMDBBNzZBNTE3RjVCQjY1MTFEQ0E0MEQ3NjNFOUExQ0I0M0UwCi06MTAwNEUwMDBGQ0JDRUJFNTAyRUU5Q0JGNzk1QkQwRkU3NEYyRkI5QzlBCi06MTAwNEYwMDA5NUJGRkFFQkJEQTNGNDczOTk2OEJGMjBGNEI5Rjk3RkY3Ci06MTAwNTAwMDA0MTI4MzNGRjVGMUNCMkYzN0YzNURFQkY5OTgxRkYyRjk3Ci06MTAwNTEwMDBDQkQ0MUVGOEZGQ0JBMTBDRkNGRjA1RjhGRENBNTAwNjlBCi06MTAwNTIwMDA3RTlGMURFMkZEOEY4NUVGN0IwNUJFRUZGRDgyRjg2RTlECi06MTAwNTMwMDAxN0VENkYwQTdENkVGQkUwQTY1MDY2RkJFMDNCQTE2OUZDCi06MTAwNTQwMDAyNzg1RUZGNjExRjBERDExMjI3ODFFMjRGODQzN0E5MDBBCi06MTAwNTUwMDBFMkQ4NUQzM0Q4NUVBOTM0MjMxQzVCQURGRDc4NzVERTJGCi06MTAwNTYwMDAwRkUwRkQ3RDA5RTg3RUNFMjc1REIxNENGN0NFNDBCQkE0Ci06MTAwNTcwMDBEQkFDRjA5QkVEQUE0MzlBOTlCQzdEMkRGQUU3Nzc1QzQyCi06MTAwNTgwMDAxNEE0NzgzRkU4QzcxREZGNjQzQUI4M0I5NDQxM0VDRkJFCi06MTAwNTkwMDA5MUI5MUNGQTIwRjgyMEQ5ODE1RkEwRkZERTRDRkQyRjE1Ci06MTAwNUEwMDAxMzc0MzY5NjVERjA5OEEwMEY5OEY3QkY4NUE2MEQ5NzQ3Ci06MTAwNUIwMDA3RjNERTI3NzUyNzY4NDEzRkI0Mzg0QUZGRUY5MjhBRjg4Ci06MTAwNUMwMDA3NkREOTgyMzYxM0NBQUM4NDg0QkU4MjdFQzE1RkE2NjBCCi06MTAwNUQwMDA3MjQ4RTdFNzE5NDRCQjVENkE1QUMyN0M5NjVEMkQ5QTYyCi06MTAwNUUwMDA4NEU3OEQyQ0ZEMUQwRTREMUJCOTNGMjcxQzAwREY2RkNFCi06MTAwNUYwMDA0MjI0RUY4Q0E3QjE1REY1OTAxREY4OTlFQ0E0NEJCMkE1Ci06MTAwNjAwMDA4RDIzMjFEMjNGRjFFNzQ5NkU5RjY2OTdEQkU2M0NFNEZDCi06MTAwNjEwMDA3ODM3RTVCREY4NjY2NkZFMUQ5N0JENDFENTk0RkY3RjJFCi06MTAwNjIwMDBCMkNBRkYxNzQyOUFGOUJCNTJENERGNjdENTNGMDBERjQ5Ci06MTAwNjMwMDAxQjAyQkUzNzMzQzFFN0M0Q0I1ODcwOEUxNzdBMUVGQTNGCi06MTAwNjQwMDA3QjNGOTM5RTcyRjY2N0ZBQURFNjNBQjk1MTI3NTlFMkJECi06MTAwNjUwMDAzQTUyNzhEMEVFNjU2MTk0REYxRDMyOUQ0MzVBMjBFNDEyCi06MTAwNjYwMDBDOTgyOTlEOUMyNkVEN0ZDRDhGRjFEMjI0RTdFQzdGMjJGCi06MTAwNjcwMDA1QjZCNzBCRkJCRTcyNkFEMTI1MTUwRDBDQ0Y1OUVCRTcwCi06MTAwNjgwMDBGQzE0OEE3RjA2NDRCRjRFRjgwN0RCQkI3QjRGQzc3QjU5Ci06MTAwNjkwMDBDNzYxREMyQzFDRjdCQ0Q5MkM4RDdFNjMxNkRBMEQxNEQ3Ci06MTAwNkEwMDA4RkQwRTg3N0JDNzIzQ0RENTE4QzlGNkU5NEJBOUI5NkRDCi06MTAwNkIwMDBBMjVFOUQxRkU0RTc0QUEyOEJDNkI4QkY2RDlEOEQ2RUZBCi06MTAwNkMwMDA1OUI0N0E4Q0ZBNkJBOUJFMTZFOEE2RkIyRjRFQkFCRUI3Ci06MTAwNkQwMDBBN0JCMjk1MzdFNDkyQzJDOUI3NkQxOTlBM0UyMzUxQUNFCi06MTAwNkUwMDBBMUI4OTY4OURGRTFFM0YwRjVBQjg5Qjc0ODg4RUY1MDEwCi06MTAwNkYwMDBCNUE0RTFEMUFCMTBEMDA5REE0QjcyNTkxRkU1MzM3REI3Ci06MTAwNzAwMDBBOTlBRDMwQjAzQkY2NEY0RkIzMzNBQ0RGNTlFMTNDRTA1Ci06MTAwNzEwMDBGQkUyNzA5OUY1NDYxRTRGRDQ3MzlDNTdDMDdEMkY4QTFCCi06MTAwNzIwMDBDRjA2QjkxQ0EzOEE1MDdFRjc3MDZFQzZCOEJGRjlEQzNECi06MTAwNzMwMDBEMEE2MTVBOTJFNkJGRjI5QkUzRjMzOTgzRjFEOEJBMjczCi06MTAwNzQwMDBCREQ1Q0EzODNEQjJBODk3RUMzMEJBQTdEREIyOUU0QkYyCi06MTAwNzUwMDBDM0RDN0ZGQzQxNTZGQ0FCNjFFMkVGMThERDRCQzgzNEQzCi06MTAwNzYwMDBFREE0RTYwM0VEQUVBMjc2MkFCNDBCOUQ3Q0JCOTE5RjZGCi06MTAwNzcwMDBFNkVGRDdDNUY0QjhFNTFFMzQ5MzVGQzcyNzkyMENFRkI4Ci06MTAwNzgwMDA5OUYxNTczMDREODJGNThGODRDQzdENDI0RTA3QjcwNUU1Ci06MTAwNzkwMDBDRDcyOTIzNkM5RTM2NUREM0MyRjVGMzdFOTg0Q0IxNTE2Ci06MTAwN0EwMDAyREQwNkJDODk1OEM2REJGNzlGRTA1RDFEM0ExQkZCMjlBCi06MTAwN0IwMDA0NDE0QUZENDg3RjIxMzc4OEY1QThFQzJDQkMwNjg0RkRGCi06MTAwN0MwMDAxQzIyN0RBMTlEMjFDNTQwNEZCNUNGN0RFMjcwMzFFMzU0Ci06MTAwN0QwMDA0N0E1RThGN0Q1RTYzRTgxRjk4NDNENjYxOTJGQTQyOEEwCi06MTAwN0UwMDA4N0IyN0ZCMDZDNzhBMzUwMkUxRDJDMjdCMUJDNEJFODhDCi06MTAwN0YwMDBDOUVEMzdDRjdEQTIzRDQ4NzJFQzY2MkI3RkQ0MDgzQTE1Ci06MTAwODAwMDBGQzY3RDM1RjhGREVBRUUxMzk4MzY0NTQyNUJCNkFBM0Y2Ci06MTAwODEwMDA4MzFFN0UxNTc2MTNGRUE3NkE4OTE0RjJDNTgyOUIwNjk1Ci06MTAwODIwMDA1NDNDQkFFMjJEODk4NDkwMUYyNjQ0REY0RkUyRkQ3OUMzCi06MTAwODMwMDAxMzY2OEIzNEQ1MzI3RTRGNDM0Rjc0MERGMTY1MEZBRTg2Ci06MTAwODQwMDAwQkUzNjkwOTE4OUYxQzVBOUY1NEU2RjUyOTRGRDFGQTBBCi06MTAwODUwMDBGODc1RkU1REM2MzJGOURCM0NGRTE2MjhFN0ZDQUM3OTg0Ci06MTAwODYwMDA3ODdDRUYyMTQxQUYwN0MzM0M3RTc0NTBDOEQ3QUM2ODk5Ci06MTAwODcwMDAzQkY5NTNERTdBOTlFMkM3NTlGNUIyNEQ2RkQwMkZFMEJDCi06MTAwODgwMDA1MTdERDU0NjZGMkZFNzI0RjY4NzJEN0EwMTk2MkY1RThFCi06MTAwODkwMDAwRUYzRjA5RjFFQzlDMUZEOTc5QTcyNzUwREZBREIzRkVBCi06MTAwOEEwMDAxMkY2MUZBQ0QzMEY0OTVFNTQ0NkZDMDk5MkRCRjFDNzI4Ci06MTAwOEIwMDAzM0FFOUJDMENCNThFQkY2N0M1QjIyNTZFNzFBNzlERDUyCi06MTAwOEMwMDAyRUJCOUNFN0QzM0JERkJGMjhFNEVBQjFBNjNGN0YwRkY2Ci06MTAwOEQwMDBEOTY1ODU3NzgwRUVGM0VFMkE1QjRCNzE1ODMzRUVFQUVCCi06MTAwOEUwMDBEOTVCOTMyRUQ0ODdGMjAxRDcwNUMyQjNFOTVDOEE2MzQyCi06MTAwOEYwMDBEQ0U3M0ZGREJFNDZFNzQ0M0VGNjY0REM0RkZBODdDMEM2Ci06MTAwOTAwMDBGMzkxQjYyNjZBMDcwQjRDQkZCRjcyMDU0RTg1RTdCMTVGCi06MTAwOTEwMDBEOUNFRjE5OUU3MTFCRUM2MzgzMTJDOEEyRkY5MTJDQTA3Ci06MTAwOTIwMDBBMUE1NEQwQUREREI3MDA1QjNFNzUzN0NDRENDRkI2QTk2Ci06MTAwOTMwMDAzNUYzRTM3OERFNTc4MjY1Q0Y0MzM2NUM5Mjc0RkM3RUY0Ci06MTAwOTQwMDAwNDhCQ0RDMzczRjRDMzdFNTc0MkVDNkY3REREOTEzN0NBCi06MTAwOTUwMDBGMUU1QTYyNUIxM0E1MUVGM0RGQTdGOEFGMEI3NDhFN0I1Ci06MTAwOTYwMDBGMjc3NTE4Q0RGREY3MzY5RkNGMjU4OUQ2NTNGRkE4NUExCi06MTAwOTcwMDBCRjJCMTlGMzI2MkZDQTMyRjExMThGRDU0RDFDOEU4RjQ0Ci06MTAwOTgwMDBBNTcxQzlBREU5NjNFM0U1NjRGMUIwNDRBRDlDOTdBN0Y3Ci06MTAwOTkwMDAwRkM3ODM3M0ZFODBCMUFEODhFN0FGMDM5RUQxRUUxQzE1Ci06MTAwOUEwMDAwOTFGNTA4RkQ2RTM4NUNCMTVGQTNEOTk3OTRBODMwQjAxCi06MTAwOUIwMDBGNzQxQUU2Qzk0Njg4RjA5RjAxQjE2Nzk3MTBENzMyRDk5Ci06MTAwOUMwMDBGMDNBRjFFOEM0RDc5NThGMzIzQTM3NzBFNUVEMjE4QUQ1Ci06MTAwOUQwMDBCNzNENjdFMjI3N0QxRUVENUY5OEZCMjc5Njc5MUVFNTAwCi06MTAwOUUwMDBGOTVCMUFDRDczRTFDQ0NBQzdGMURFODQ0NDNCNDg1QkE2Ci06MTAwOUYwMDAzRTVGREIzRUUwNTIxNkNGQzI3MzBCMzBFRkEzMjNBQzU5Ci06MTAwQTAwMDBCQjZEM0ZEMDA5OUYxMzdFOUZEMDJCQ0U3RDMxQTZBNjE0Ci06MTAwQTEwMDAyQjUwMEYxQTU5NjI1RjcwMEE4Qjg5RkRCMTJDNEFDNzlGCi06MTAwQTIwMDAyRENCMkM2RjlERjdDRDk5NzQ3NjQ1NkJFM0UwQjhEODRDCi06MTAwQTMwMDBCRkM0MTI4MzY1MERDRjZCM0RBOTZDQkQxNEZFQkUzQUQ5Ci06MTAwQTQwMDBDQTdGRDczMDdFNzk2RTA3N0U1QkMwQ0NERjFCMzI2OEYxCi06MTAwQTUwMDBCRkU5MEE4MUJGNDZGMEY4RjBCN0QwQ0UwM0UxODRGQkNFCi06MTAwQTYwMDA3QTBCMEM5RjFFQjRDQ0YzREQ2RUE5NUU5Q0EzQ0E1QTEwCi06MTAwQTcwMDAzNDE5REIyNTBGMjg1Mzg2QzNCQjNBQ0E3RkJGMTBFODYxCi06MTAwQTgwMDBGMDdEMkIxREZBMjZGMjdCNjU5RDc4MzFGMTc1NjU5NjE4Ci06MTAwQTkwMDBEODM3OUNDMkE2N0MxNkJDQkM4NDhBNzMxQUVERDc5MDRBCi06MTAwQUEwMDA5RDNCMjA3OUU5M0NCQ0I5OEYwMzdGNERCQTQxNzRCNkI4Ci06MTAwQUIwMDA2Njk1MDgzQjgwQ0ZEQkJDQkY4QkIxMTZCMkVGMTc4QkJFCi06MTAwQUMwMDBGMzU4QUZCODU4RDMwMzQxQkVBRjUzNjU5MTVCMzdFNEQ5Ci06MTAwQUQwMDBENEI0NjY1OUVDNkU3MzVGQzdCQzJGQ0FBNEU3QUY3OTc0Ci06MTAwQUUwMDA4MzY5ODVEM0ExRUQzRUE4QTEzQ0E2MDRFNTMxMjk1OTJGCi06MTAwQUYwMDBDQjc1QzQ0NzE3N0UzQTlCRUM5RUY1RDhCRjEyRTBGQjNFCi06MTAwQjAwMDA1NUJFMjcxRkVBQkE1NDFGNUFCRjRENTczRERDM0QwRDU1Ci06MTAwQjEwMDBDQUZFQUZGRjNFNDk5REVBMzk4NEI3OTA1OEI3MUFCMTczCi06MTAwQjIwMDA2RTI2N0NGRTBBRkVERUIyN0UzQzdFNTYyRUUyNjc2MkI4Ci06MTAwQjMwMDAxRDQ3RDIxM0U2M0E5QUVCODY3NjE0RDJBRkFGNUNGRDJFCi06MTAwQjQwMDAyNEQzRUZGMEIxNDNENTAzQzhBNzg5QTg0QTM5NzQwOTYzCi06MTAwQjUwMDBFOUI1MEVCQTY3OEJFOUJCNzBGRkZEOEE1Njk3RURGN0QyCi06MTAwQjYwMDA5NzEyNzg0RTFGRUI2RkY0MDlCRjI0NDZFRDk3RTZGMzFBCi06MTAwQjcwMDBGNkFDOUNEQjhEODM3NDlGODRGNjk2M0MyMEU2MEQ4RjRCCi06MTAwQjgwMDBDMzc1RUI4N0I2OTgyNzA2RkQ4RDQzN0RDRkJBMkNFMzVFCi06MTAwQjkwMDA5NDBFMUY3N0M0RkUxQ0VEOTRDMTdEOTM1ODJDNjY5MTcyCi06MTAwQkEwMDBENzBGNjU3MTNERjk2RUI0QkE1N0NFMTA3RjMxOUY0QkE4Ci06MTAwQkIwMDBCREI5NDVBQTI1M0ZFQzY4QkVCNzI5RDNCREE0NjY3RjYxCi06MTAwQkMwMDA4M0Y3QzYwRERBODk2RjNGNzFBODY4Qzg0RURDRUM3QUVFCi06MTAwQkQwMDBDMzZFMjdCMjM3QkU5MDlERjg3MkQ2MUI0RkI0MDMzQzRDCi06MTAwQkUwMDAxRkZFRDE0M0ZBRUFERDdBM0ZBRDQzNkVFQkY5RUNCRjZECi06MTAwQkYwMDBGMEJDQUQ4QUJGRUQ0N0Y2M0RERDdCRTM2RDJEQTRGOTdBCi06MTAwQzAwMDA0ODJBNjAwRTdGMUY0QzhGNDk4OEVGRDdGMDkyNUU4Qzg4Ci06MTAwQzEwMDBERkU5MkMxRDAyRTA3MkQ1OTg4NEY4QkE1NUY4QTM0MDlDCi06MTAwQzIwMDA2N0E3NUJFRjY3N0QyRDhCREI1QkU2MzgxRTJGNEJFMjAyCi06MTAwQzMwMDAzOTYzQjM1RkEwODNCNTk0NTdEQUMwNDg4Rjk4RkJCMDhGCi06MTAwQzQwMDAyNjNGOUJGRDBDNjREOUZERTA5M0UwREY4MTRDRkNGQjZCCi06MTAwQzUwMDBCNERDRjJBN0VGQTBGREZBOTQ0MkY5QTA1RjhEREU0MDZDCi06MTAwQzYwMDBFRjJGNkJCRDkyOUU5N0I3NUU0M0NGNEZDNDc4REY5MjU0Ci06MTAwQzcwMDAxMjlGNjRDMTdBRjUzNUZERkVBQkQ3MDNCREFFREFFQjRBCi06MTAwQzgwMDBBMTczNjUyQkJFRjVENzlCOTEzRkJEQURCMEVFRDhFRUZECi06MTAwQzkwMDBFQjU3REUzRTBEQkVCQjI3Q0E2NEJGNzYxNUYzN0MwRTU0Ci06MTAwQ0EwMDBGNzVBODlDN0ZCNzU3NzNEQzY1MEZFM0YzNzhCOUFBODI4Ci06MTAwQ0IwMDAwMDgwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAyCi06MTAwQ0MwMDAwMDBCRTU3RDA5N0M1NEQ1QjlGOEI5NzNFRjJDNDk2NjYyCi06MTAwQ0QwMDAyNjkzM0QyMTBCMzc4NDI1NDhDMDQ5MjAyMTI4RDYwOTc5Ci06MTAwQ0UwMDA1QjYzMjUxMEM0MDUyNUMwODQ0MDA4MTA5MjgwNTY4Nzk4Ci06MTAwQ0YwMDA0QTY1NDIwMEEzNDY4RDc1QzNBNUJDODE2MkFCQURGQUJGCi06MTAwRDAwMDA4MjUyQTU2REE0MTM3MTAxQTUxOEFCQjVCODIwNDE3ODI2Ci06MTAwRDEwMDA0QUREMTI0MTFFQTNENUZBQ0VGNzlENzM5MjdCNkY2NjEyCi06MTAwRDIwMDA0MjY4N0RCRjdGRkZCRjE3N0ZFREM3QjlFN0RDQjM3Q0FCCi06MTAwRDMwMDBGQkY5Q0U3N0VFQUM3MDk2RTRCQTBBMDlGOTBFRkUyRUY2Ci06MTAwRDQwMDAyNjY0ODU3MzFBOTY0OUFBRDM0NDhBMDg1OTYzQTNGRjc3Ci06MTAwRDUwMDA1NjA5Mzk3M0Y4RTZENEM1ODk4NDQ0REJFRDZFRkE4NDBDCi06MTAwRDYwMDA1ODFBQjNFRjM0RDEzMkQ5MkY5MzQ3Mjg5MDYzQzhBMkQxCi06MTAwRDcwMDBGMjNDMEFBRDBDMEU3MTI5ODQyNDAxMzQyMThDMDc0ODAxCi06MTAwRDgwMDBGQkI1ODUyNDQyMTJBMDlEREJERDYwQTc2NUM1NEY1Q0U1Ci06MTAwRDkwMDAwMDQzMEEzRUI3NDg1Mjc5NUI1RURGN0MwNDE0RkREOUZDCi06MTAwREEwMDA0MjMyMjFFMzYxM0NFM0ZCMTY3QzdFOEI2QTI5ODVGN0E2Ci06MTAwREIwMDBFNTA0MzYwRkYxN0UwRTdGM0Y4N0NGQzcxNjhBNjFGM0I5Ci06MTAwREMwMDA0ODMwRjZFMzY0Q0Y2NUQyRDA2NkVGM0Y4RkY1QjE1MzdDCi06MTAwREQwMDA0N0I5OTIwMDRGOUU1QzgwODQ3NDk5Q0IxRDg0MkNCNERCCi06MTAwREUwMDBCRjcyNDgxQTQ3QTFDRDFFOTQyOTI0M0VGM0E3NURCOUNFCi06MTAwREYwMDAwNEZGQkUxQjA2RkY1RkUxRkE3MDBDMjExMkU5OTJCRUYwCi06MTAwRTAwMDBBMzQzQ0ZGQTQ2MEEwRUE1Rjg4QjJBOTEwMzFCQjIyOUY5Ci06MTAwRTEwMDA5NDVDNjUxMzI2RDA2NjI1NjYzN0UwQjM3Mzc4QTI2M0M5Ci06MTAwRTIwMDA5ODY2RkMwQjVDMTJFMkVGNzVDNUU1ODA3OTk2NEY5N0VBCi06MTAwRTMwMDBDQjAzNzlEODdERDJFNUQwQ0ZGNEFBQTI1QkQ5NzAzNkE2Ci06MTAwRTQwMDA5MjRDQzgyMkY2NkZGMkJBQkFBMzc5MThBREY3RkJDRDZGCi06MTAwRTUwMDBFRTExOTQ4RThCNkNGRTAwQ0M2RjExNTFGQzVEMzY2Q0U0Ci06MTAwRTYwMDAyMjdEMjcyMTU0OTUyMkZFMUU5REVGQTI2OUIyMjdDQTNBCi06MTAwRTcwMDBBOTZCNDdCRUEzRjMyNDFCQzkwQkMzNjlGRjBCMjUzRTE3Ci06MTAwRTgwMDA4MDlGOTZFOTdCRUZGM0UyOTE2OUE3QUU4MDY1NzQxMUNDCi06MTAwRTkwMDA5NzY1MTg2REJGQjBBQjcyMjYxOTg3NTU3NkUwQTdBNTg4Ci06MTAwRUEwMDBCQ0REMjI5RkY5Nzg2RkJGRjQ3Rjk1N0U3RDc5NzE3MUVCCi06MTAwRUIwMDBGRTRCOTQwQzE0MkY4MUQyMDlDMDY3QTM0REM4Njc1NTBGCi06MTAwRUMwMDBDREZBNzY0QkRGQkJFNDZGQzQwOUZEMkFDNzdCRjEwRDc5Ci06MTAwRUQwMDBGMzI0NzczMTNBNEY2RjcyQTkxNDRGRTdCQjU0MkNDRkVDCi06MTAwRUUwMDA5QTc2NkMxQUExRTVEOTg0NUMwMUZEQ0U5RTI2QkI4MjYwCi06MTAwRUYwMDBCNDc1OEJDRjQ0M0M3NEUyMDczRDcyNDBBMjZCM0I5OEMzCi06MTAwRjAwMDBEQkI1RkY2MkMwNUJCMTU5N0QwNEQ2OUE0QjZFOUY5QkU3Ci06MTAwRjEwMDAwOEY1RTM1RDgwRTc3Mjc4OTY4NkVEMDk4MTc2QTlCNkRCCi06MTAwRjIwMDBDMDA4RkFBQ0QzNzNDQzVFQTVFMUJCODNDNUM3NDY3QkQyCi06MTAwRjMwMDAyOUJEQjY5QTQ4NEQzODdFMjJBNDExRTlGQUMyNEZBMkMzCi06MTAwRjQwMDBCMTlGMjNGNzQ4MDEyQjlERkY3NEY5OUIzRjREQTRGM0ZDCi06MTAwRjUwMDBBOUZBQTlEOTZENTU3MTU5MjZBMEVCNEMzNzkzNDc0MjkwCi06MTAwRjYwMDAzQ0Y2RTkxNDlGMEIwOTJCMUYyM0U1NDU0MTNBN0U1NUJBCi06MTAwRjcwMDBGRUUxMTIyQkVEQTc2QTkzODQ3MjJBRjA0RkYxRkQ4MUY2Ci06MTAwRjgwMDAxNjZGREU4NkYyRDhBMDhBNzhENzNEQTc5RDU5ODA5RjNDCi06MTAwRjkwMDAyOTlFM0Y4ODgwRTcwRkI0NzhGNkJERjdGNkQ4MTczNDVFCi06MTAwRkEwMDBFRDVBNUM4RTQ0RTA3MzUyNDAwQUJFQTNBODM5NEQyNjI4Ci06MTAwRkIwMDBDNzhFMjdGREQ3MkRFMDk5RjU4N0M2QkUzMDgyOTA3QjdFCi06MTAwRkMwMDA4OEU3NkUyRTRGNEFGOTU4NEEyNzg1NzhDMkU5ODE1MjQwCi06MTAwRkQwMDAyNzkzODNFOUYyQTc0ODlGOTNDNUIyMEFGODNBRThGQjQyCi06MTAwRkUwMDBEODRFMzk4QzFDRkM0NjJFMDUzQzEzMEZFRDZDNTJERjlECi06MTAwRkYwMDA3QjhGQjkyQzQ4RkZBRDE2RTIwMTNDNkYxRDYyMEIzNEFDCi06MTAxMDAwMDBEMkFFM0E3RTcyNUU0QTE3RDI0N0JEN0YzMkQwRjExNTFBCi06MTAxMDEwMDAzMzc5NDQ4RDNDNUY4NzRGMjZDMzI5NjM5NkY5MjQ4NDM2Ci06MTAxMDIwMDA4MjdFNDM3RDUxNDQxOURGRDc2RTI4MDkzRkZGREY4MzVECi06MTAxMDMwMDAxQ0QzNzkyNEFEMjMyNjk1OEUxQkU3Mjc5RTQwMThCRTJFCi06MTAxMDQwMDAxMEVENTZEOTdBNjYyODA0REIwN0UzRThGQ0VBNTQ1MzJFCi06MTAxMDUwMDA0MEEyRUJDRDk3MTgzRkRCQ0MwRDlFNzREQTU0Njk5RjBDCi06MTAxMDYwMDBFMzRGMjczMDBGMTlFN0ExRDJGOTI5NzQ3RUQ5QkUxOEIyCi06MTAxMDcwMDAyQzBGRjMyNTIwQ0NGMUM1MjExQ0VFNEJDN0ZBMTFCRTc1Ci06MTAxMDgwMDAxQzg0MjM3REQ5Rjg3Qzk0NkYwQzk2NzM3REUzMTE4RUJDCi06MTAxMDkwMDBGNkU1MjMzQ0NGNzcyMUMyMzFCRUE5RDgyRUNGNTc4MkE3Ci06MTAxMEEwMDA3MEFDRUY1MjdDM0VDRTM3MTdFMUY5QkUzOTA4RERCRTk5Ci06MTAxMEIwMDBGOTU4OUZFRkFCNDI1OEUwQUJDNEU3RTM3RDJCQjEzQzVFCi06MTAxMEMwMDBDMTc3MkQ5NjBCN0RBQjExMTZGOTZFNDQzOEQxRDc4NEJDCi06MTAxMEQwMDBCMEQ4RDc4OEVEMjZGOTZFQzNGMjA1QkVCQjExNUVFODI1Ci06MTAxMEUwMDBCQjBCRTE2NERGNDM1ODBGMEEwOEYwMTBDREU1RjEzNjgxCi06MTAxMEYwMDA3NTg5OEI0QTBBNzBCODBBN0MxQzQ5RUVCRUUyRjZBOEQ0Ci06MTAxMTAwMDBEMkU1MzkwQUY2NEVCNEIzOTg4ODU3REI1RUI0M0JDRENFCi06MTAxMTEwMDA2MTFDRDAzNTRDN0YzRDVDM0Y3RkVFRkVFMEJFNTFBNEFDCi06MTAxMTIwMDA4RjZFQ0RBOThERTU0NEVFQTM5Nzc1NTc0OTMwOURGRThFCi06MTAxMTMwMDBCMzZFRjcxQzAyN0E4MUU0MjZFQUY4QjRCRjdFNjBFQjU2Ci06MTAxMTQwMDBFQkUyRkE2QkFCRDJFOTkxODE3RjFCODhEQjRGMUY5NUY1Ci06MTAxMTUwMDA0RDc4NUQ4MjdFQjZBOTRBNjkyMDBDQkY4RDhFMzNFMzNGCi06MTAxMTYwMDA3QkU3QkJCQzI0OEVDRTJGMjZGQkY4MEJBMDRGNjZGQjgzCi06MTAxMTcwMDA1RDdGOUEwMkZDOTI5N0Y4Q0ExNERBREZEMDhEMjYxOEE4Ci06MTAxMTgwMDA4MUFBMTI1N0M3MTRBQTc3RDQ2OTA0RjVFMjM2MkE3MkU1Ci06MTAxMTkwMDBCMERFNkREMTdBN0I5QTFEQzdFQzI4MjE2REZCODZBMTRDCi06MTAxMUEwMDAzQzBEMkY2MEY2QTdFQjEyOTAyRkNCNEY4NjkxNUJCM0NGCi06MTAxMUIwMDA0MURFODI5MjQyRkJGM0FGMjFFNDExNjEzM0EwRkRFNkYwCi06MTAxMUMwMDBDNUJGODRGQUJFRkUyQzRDOEU5QUM5RjMzNjNBOTFFQzE4Ci06MTAxMUQwMDA1Njc1NEExNDg1Mzk1QjNDQ0Y0N0QxNTc0NjA0QkM1M0ZBCi06MTAxMUUwMDBBMjY5NzlENEEzRkVFNzAxOEU2RTBCNEM4OUExNzBDQzY1Ci06MTAxMUYwMDBFRUUwRjNENDlDOTJCMUMxQUUyOTc2NUEzRTdGMUZEOTVFCi06MTAxMjAwMDAwQjY4Q0RFRjU0QTczQTY4NzlGQzIxQ0Y1RUNBMDZBNERCCi06MTAxMjEwMDBCMENCM0JENUE5QzI3QzAyNEQ0RTNBOUZBREVGMTM3N0MwCi06MTAxMjIwMDAyMzJEMTc3RkRBMkFDNzEyMERGRDJEQzRCQjUzNDMxNzk4Ci06MTAxMjMwMDBDNzg0Q0U2OTA5RjQ5RjE5RDdCOUYyNjU3ODVGRTk4QTQ2Ci06MTAxMjQwMDA4QUNCRUI0RjlGNkRCMDZFNTgyN0I1MjM4RkQwNzU2NTU1Ci06MTAxMjUwMDA3ODgyOTI0QkMzMjc2NTcxOTJBMDQzN0UxQ0Q4QTE3NUZBCi06MTAxMjYwMDAzRDBBQUM3M0RCQzY3ODA3RDIyRkRBNTUwMjQzRjY0QzQxCi06MTAxMjcwMDAyN0FFRUQyQUYwQjE4Mjc4QjI2QzFBODZGMjJFRjg4RTgzCi06MTAxMjgwMDBFMjc3RjQxQzg3MTY2RjkyRDA2QjM1NkQ3OTkxRjE1QjI0Ci06MTAxMjkwMDBGNjZGODZERkY3MzgzRjQ3QzJBRjBENzg2NUQyRDlFNUU0Ci06MTAxMkEwMDA3ODYxNUNBRjFDNUYwMzc4OERENEFFMjk4RUM5QTcxMTFECi06MTAxMkIwMDBDRkRCNEM2NDFGQjU1NTc0NUNDQUE3NENBRTg4OUYzNjEzCi06MTAxMkMwMDBCRDg5RjNGN0Q5RjBFQUZCMzdDM0VCMTU3MTAzRTM5NTVBCi06MTAxMkQwMDBBODg5QTgyNzI5QkY4RTI2Mzk5MUY1MERGNDE3Q0U3RTRGCi06MTAxMkUwMDBERENFRjk0REEzRTcyQ0UwMkYzNkJCQTg5RUNCODlBQzExCi06MTAxMkYwMDBFN0FFOEUzQjhCRkVFMjdBQzZDMkY1QjgxOEVGNDEzRUYwCi06MTAxMzAwMDBERTJCQ0VGMjJEQTBCRkVDOUI0QzdFOTBCMzEyRTI0MEMwCi06MTAxMzEwMDBCOTIwQTk4OTlDNEY1Q0QxQzAyNzMzNjU1NzA5RTgxQkM4Ci06MTAxMzIwMDAzMjhBQTAxRjFEOTMxN0YwQzMzRTY1QTg1RjJEOTBBMUMwCi06MTAxMzMwMDAxOTI4NjVDMEUzOTBEQ0MwQURCNEVCNkNFQTY3Mjg5NDczCi06MTAxMzQwMDBGRUI0QUIyMDQwOUJFQTMyMkRBNkVCOEUxNUYyRTZBQTQ2Ci06MTAxMzUwMDA0Q0Q1Q0E5QkIwRjc3REYyMjhGODIyN0VEQkFERDk4QzQ0Ci06MTAxMzYwMDA1RkU3NTBGRkU1NkRDRTZGN0RGRDQ4RDg2RUYzREEyMTYzCi06MTAxMzcwMDBEQjZFRDVFOEMxNkRBOUE5NTgxNkVEMjNGMUVGMTlDMUFGCi06MTAxMzgwMDBCRjFCMzcxMDJGQzhDN0U0RjA3RUMzMUI3MTMyRTdEQkU5Ci06MTAxMzkwMDAxRTBGRjBCOUZGMDdDNDA1RkU0Q0RDQzYwRjUwM0ZDNTU5Ci06MTAxM0EwMDA1MUZEMjRBMTdFNjJFMzY3RjhBMjdGRTlBN0U1M0ZDNzZDCi06MTAxM0IwMDAyNTczN0RFRThBQkVEMkYxRkY4RTlGN0Y0NTExMEJGMzIwCi06MTAxM0MwMDAxODNBRDlENTIxRDNGQUExRDQwRUE5MjBBNzkzRTlEQ0U0Ci06MTAxM0QwMDAyNzAwQkUyQzQ4Nzc5NTMwM0FBQTkzNDkwMEZDNUU4QUQ0Ci06MTAxM0UwMDBCN0EwMDlGNEFGQzkxMTAwM0I2M0IxQjQ3QTQwOUU4OTNDCi06MTAxM0YwMDAyNTBFRDdGRjhBRDM3QjM0NkUwMEI5NzBDNUE4Rjk0MDlCCi06MTAxNDAwMDBENDkzNzE1Rjk1REEyOUZGNkRDRTc2NDU0M0I5OUI5NkVCCi06MTAxNDEwMDA1QjUyRTlCOEYxNUQ4NDk3OUJFRDI4M0ZGNDZGMDg1MjY5Ci06MTAxNDIwMDAzMTQ4RjcwNjYwMUY0NUQ5NjM4M0Y2QzM3QUNCN0UyODFGCi06MTAxNDMwMDA2RjA1OUZFNDAyREFGRjVENjdGNjZEQTQ4ODk5MUJFN0VDCi06MTAxNDQwMDBFOTg5NjM3QzdEMTJGOERBMzM4QTZFNTA3M0ZBRjhGOTExCi06MTAxNDUwMDA2Q0ZFODA5MENGM0U3OTcyRTUwQjc5QUFDQzQzN0RGODgzCi06MTAxNDYwMDAwREY0MkZGQThCRTRERjNDQzNGNUE3MjM3RTYwRkY0NjIzCi06MTAxNDcwMDBGMEZEMzlGQjM3N0NCRTdGMDdGOTJGOEMyQ0ZGNTFGQjI5Ci06MTAxNDgwMDBERkQ4QjI4Mzk2RDdBNENBRUE3MUVBREYzOTg2QkNENTIxCi06MTAxNDkwMDBBOUQwQjI4REZBOUJDNzY4RDk2NEVCNTRBMDVEMTk5NUE5Ci06MTAxNEEwMDA1MDNCQzVCNzg3M0E3OUIwRkZCMDRENjA2NUY4ODNGRDEyCi06MTAxNEIwMDBDN0M5NTZBOTk0RTk2QjM1RjZGMkIxMDNFMTMxODBGMzVGCi06MTAxNEMwMDA1OTkzNkFDMUYxQTI0NjBDOEYwNUI5NzI3MkJFMjI4QTg1Ci06MTAxNEQwMDAxNDAwM0JFRTJDNzYyOThCQjFCRjJFNzIxOUVERUYzQzM4Ci06MTAxNEUwMDA4RTI3MjFEN0EwQjc5RUNBMDNCRDE0QUZDMDdFREQ2QTg4Ci06MTAxNEYwMDAyMzdFNDc3QzVGRkY1MDhFMkRFOEQzNEY4NEVGRTNBRTExCi06MTAxNTAwMDBFNTdCQTZENjBERUVEOEUxMjBBNzA3NTkxQ0E1RjUyNjQ4Ci06MTAxNTEwMDAyNjk3NjUxOTI0QjAwMUY0ODQ4N0E4MkVEQTNFOEE4OEJDCi06MTAxNTIwMDAzRjJBQjhCNDZDRTZBNTk5NUY0QkM0NDNFNzdGRTA2QkY0Ci06MTAxNTMwMDAxOUExMzQ5QzA0MUQ3NEJGNTdFNjk2ODJCMDBGQjQ5ODZECi06MTAxNTQwMDA2QzAxQjBBNTI1NDM2Q0M0MDI2NUE3Mjk2MDA1RjlGOEI0Ci06MTAxNTUwMDA0MEMyNzU1QTBBNjIwMkEwRkNBNjBEMjk4RUVEQTJFQkNDCi06MTAxNTYwMDAzODc1NjBBRkREMUI4NkZFNTc3OTJCREREM0M2NDdDNkM1Ci06MTAxNTcwMDA2MzZGQkIwNTJGQkEwMDhGMEZBOTFCNURFMDQ3RkE1M0JECi06MTAxNTgwMDAxNThDM0JEQzAyNEQzNTdBRkRFQTc4NjYzN0E5M0YzNDhECi06MTAxNTkwMDAzNzlFQzI1OTRCN0EzNjVBODBERUQ5ODlFODBGOTFFMURECi06MTAxNUEwMDBGMUM4Qjc2OUE5QkI2RTI5MDE5MzU1Q0JGQ0QzMjEyNDlGCi06MTAxNUIwMDBEMEE4RjVBQjA0N0ZCRDFCRUY1RDEwNEZFMTQzREM4RTdGCi06MTAxNUMwMDA1MEIxRUMxQzA5RjFBQUQxODlGMUUwOTc5NkQ0MEY2OUNBCi06MTAxNUQwMDAwNzdGRjc4MUY1QzRCREM0OENGQUEwMUNEQTdCMTJEQTUwCi06MTAxNUUwMDBGMjgxN0YxRjcyRUY3QUVDNEVDMEE3OTVFRThCNDE4RjkwCi06MTAxNUYwMDA4RjNGNkM1NzI5QkQyQTBBRjcyNkMxN0FGRTY0OThCRjJGCi06MTAxNjAwMDA4MDE1QkU5QjEwMkZDNjdERjBBQTc4QkEwRjA2ODUzOENDCi06MTAxNjEwMDA4RThDODM3REYwMjlGN0RDRDgyMEYyNTY0MjU4RjlBRTQzCi06MTAxNjIwMDBGMEREODhGRDg4RkRGMDdCRTY2MEE2MkJBQzFDRUFGMUJFCi06MTAxNjMwMDAyREM2QUY5MEQ4QkU5Njk4MjVBNkZGQjgxREE1RkE2NTExCi06MTAxNjQwMDAzREUwOTdCRTg2NzZEMzYzOTVCNjgzQkQzOUU1MUVFRjQwCi06MTAxNjUwMDAwNkJCMUQ0OURGODhGOTUwM0M4RTI4Nzc4NEE5OTc0ODNFCi06MTAxNjYwMDA3OTM4M0RGMTQwM0NCM0Q3MTU2NkJBNUZBMEY1RDJFQUIwCi06MTAxNjcwMDBDMjA2OTg1Nzg1QzMyRTAxREY4OTc2OUJFMjk5M0QxM0Y4Ci06MTAxNjgwMDBGQzJDRTI1NTcyRUMzNzg1NDA3Rjg4MEY4NjVCRkYyMjg5Ci06MTAxNjkwMDBBMjdDQTk4RDQ3NkQwMjU5NEI2MkY4NzI4N0YxNTcyMkRGCi06MTAxNkEwMDBFMUVCOTBCOUI1MENFNjc1NjhBOTRDMUE2OTNGQTdCQzg3Ci06MTAxNkIwMDAxMzUzNDg5OEY3MDU3QzA3Rjg4NkQyQTUzRTgxOERENzRECi06MTAxNkMwMDA0QkNGRTFFMUYxNzc2ODdEOEQ3QjlBQjk4RjlFRkRFQTgyCi06MTAxNkQwMDAyQkEzRTY4MUZEOUUwNzc4RDQ4Q0ZCMEFDN0RGMzE4MUZFCi06MTAxNkUwMDAxRkFCNTc3NUQxN0FDQkUyN0I1RDY0MkNFOEE5MkYwQjM5Ci06MTAxNkYwMDBGRDBFODg4QkY1RkNCNjExRThGRDUzMDdDNjJCRTY1NUE5Ci06MTAxNzAwMDA5RTJFNkMxQ0FCQzE2NzMxNDEyM0I5NjhFRjAzMkU5NTQ3Ci06MTAxNzEwMDAzRTlGMzc2MjYzOTJERjFFMTk4RkM3MzgxRTZGODMwN0EzCi06MTAxNzIwMDA5MzMwMUVGMzIyRjJDRDIwRTMzMTI0MkYxRUY5OERFQ0VECi06MTAxNzMwMDA4RDcyMDcyMTFFRjkxN0Q5MEQ3RTAzOENFQjQ1RkRDOTZCCi06MTAxNzQwMDBFMkM5RDdCOUQ4QkNBMjBDN0VERTNDNUY5RDRFQkZDNEI3Ci06MTAxNzUwMDA4NDI0MTI0OEQwOTQ5NTM2OENDRkM2ODQxNDdDNkU5NDIxCi06MTAxNzYwMDBCNzVGMTlFNDRERTAzRjEyM0QwNUZFOERDRjlGRTc3ODRFCi06MTAxNzcwMDAzRjU0Qjk1Qzg1QjhBMTI1M0FCQzFGOUM5NkMwRTgyNEFCCi06MTAxNzgwMDBDQTZGQURGN0VBQzZGQkVCQjdCMjZFQkYyQ0UwN0Y3MzUyCi06MTAxNzkwMDBGQTlFRjI0RTRBODE3OEQ1M0M4QjdGQzQ2MEU0NUNFMENGCi06MTAxN0EwMDBFN0FENkZFRTc3NDFCRjUxNUY1OUMzQ0E1RjM3Qjc0RjlGCi06MTAxN0IwMDBENDlFMzY1RkExNkFFQ0U5RDVGMjQ2QzA3QjhDQzJGNUI3Ci06MTAxN0MwMDA5QjQxRUUzQzYwNTcyOTNFMkYwNkJCNEFBNzE4NzMxNjczCi06MTAxN0QwMDBCQkJBODhGODNCMjA4RTZDMUM1RkQ4NTMyMzdGMDlGQjczCi06MTAxN0UwMDA2QUE0OUJFMDgzODQwNDFFMzdFNEY0MTM3MUMzNDhGMkI3Ci06MTAxN0YwMDAyNUU0RUE1REUwREJDMkZFRjgzN0MyQUIyQzdBQkY0N0Q2Ci06MTAxODAwMDBDMDEzQkRGNDg4MjI3RUFBMUZBRjJEOTEwMzQ0NDJGRTZGCi06MTAxODEwMDA0MEZCNzhFODVFMDlGRENENjBBNTE1RUQ3MjU1NjUxNEI1Ci06MTAxODIwMDBDNjY3QUJGMjY1QUNBRkJBNUQ0NkZCMTlBNEZBQTE5NkU4Ci06MTAxODMwMDBDRUU3NEY1QzRGMThFM0IzMjU0NDcyNEZEM0FDN0JENjUxCi06MTAxODQwMDA4NDI4NURGOUVBQTU3N0ZGNjkzREM0OTc4QkNEMkE4QzgyCi06MTAxODUwMDA3NzUwNjVGMTY2QkY0NzQ2RkY5NUY2RTEwRTQyN0NGQTg4Ci06MTAxODYwMDA5RThCREM2MENGMDQzRjFDRjRDODI4NkZGRTM3NjUzN0MxCi06MTAxODcwMDAwQ0RCQzlFM0QxMDc5QkYzMDMzMkQwNTlGMkY2OEVBM0Y4Ci06MTAxODgwMDBFNjQwRkY1NTJBRDBFMUVERDQyRDJFRDA3NzUxREZERTkyCi06MTAxODkwMDA1RjVFOEVGQjQ3QUY5QThGNzY5MzNBQUI3NERFNTE1Q0Y2Ci06MTAxOEEwMDA0RUE3MEUyOUJFMTJFQ0Y4OTExNjMzODFCOEQxOTE3NTZFCi06MTAxOEIwMDBBNzUwOUVCQkQ2MzdCOEE3OERFODhCMkY4QkY4QjAzMUQ5Ci06MTAxOEMwMDBDRTZDOEMyRkY3OEIyQjFCRTJDOTgyMUY4QzdDNzI1NTQwCi06MTAxOEQwMDAwNEZFMTBGQTJBMTI3RjUwM0RCNjMwRTE5RkQwNjM0MkQ5Ci06MTAxOEUwMDA3RkJDQzNENzM5NzVDODk2REIxQjI5MUU2Mjk2Qzg4ODkyCi06MTAxOEYwMDAwN0MxOTc2RjdGNzNGM0NGNDEwRjQ3NTFGRUQ4MDBGQ0FDCi06MTAxOTAwMDBGQ0VEQUY1RTg0N0QwODU5MkU4NThEMjNGRjA3RTczN0Y4Ci06MTAxOTEwMDBCQTRGNzQ0RkNCRURBM0NCRDVERUU1QkQ2NTEwRkZGOTEzCi06MTAxOTIwMDAzNUFCN0JDQkIwN0VBMzVEODlBQ0Q3MDZENjVCRDkwOTNFCi06MTAxOTMwMDAyQzBFNkVCNDNCNDY3OUY4QkVFRENFQkNDQTdCNzNFMThCCi06MTAxOTQwMDBGRDc5OTU0QjAzMDA2RjE5NjJBQjAxRkQ2QkQ0MTM0NjEzCi06MTAxOTUwMDAzQjIxRTY2MzlDNjc0QzQ4MjY4MUYxREE3OUFCRDhBRTJGCi06MTAxOTYwMDBDRjRFNThCMERFNjc3MzhFMDM2N0ZENEMxNDgzN0U3MEQ0Ci06MTAxOTcwMDAwMkMxMkY3RDNGMkFEMDg0RTMzNTlDNUY4RUYzNkY5OEEwCi06MTAxOTgwMDAwOEQwNDdEQzVEN0U1ODVGNkEzNEM2MEY1QTMzNTg3QkY3Ci06MTAxOTkwMDBGOTkyNjhFNjhGNEY4OEM3NzVDQUMyMjFGRjMyMEVDQjE1Ci06MTAxOUEwMDA0RDdDMERFM0UyQkQ0RjAyQkYzNTc5NEM1MTcwQUUzMDM2Ci06MTAxOUIwMDBENUExRUM4NzkwNEJFQjE0MTNCMTkyM0UzQzA5RkY5REVGCi06MTAxOUMwMDA0MDY0ODBBRTE3RUIyNEQ4NzdFNkRCMkMzOUU4OUYzRUU1Ci06MTAxOUQwMDA5MzAwNzRCODg5RUUwQjI5QkYxRjM4MjBFRkRBNDY5N0MxCi06MTAxOUUwMDA3OEMwM0QzRTM2OUM3RjJFRTA4MkQ0QjVBODE3QUVGNDc5Ci06MTAxOUYwMDA1NTIxM0NGQ0UzQkY2NjgxQkM1RTJGNzkzQjYwNUU5RDU4Ci06MTAxQTAwMDBGM0FBNkUyRkE0RjNBOURGMkRFM0I5RDI4MkVCREYxRTc4Ci06MTAxQTEwMDBDOUY2NjlGQUYzNDlEOTY5Q0I4NTM4NEE5MzE0RUQwNkJBCi06MTAxQTIwMDAzRDIyRjBEOEUxQjBBMDdFNjkzQUNDRjQ2MEQzNTE4OTcwCi06MTAxQTMwMDA5N0Q5M0VFMjA1NUU3RkVBM0QwN0VFMzMwNERFRTk3QUEwCi06MTAxQTQwMDAzQTYxM0Q5RUJCRTM3MDNENjI5RkYxMkZBQ0U3NURFOERDCi06MTAxQTUwMDAyRkYyN0EzMjVDRTgwRjAwNUZDOTdERjM5NzFEMEFBRTYyCi06MTAxQTYwMDBBQjlCNDRCQjYxRkUzRTFFMEYyMkVGNDVBMURGMkNFODdECi06MTAxQTcwMDA1QkNGRjk0RkQwQjc4RUQzQjdCQkZERjQxRDE3RDJGNkFECi06MTAxQTgwMDBBRDlFNzgzQzY1OTAzMzA5QUVCN0ZCQkQxOEU0MEZCMTRECi06MTAxQTkwMDA1RUNBMDdERDgwRUZCREVEQ0M0RUI0QkVFRjYwRjg3MkRDCi06MTAxQUEwMDAxNEU1QzJGQzg0N0ZFRDRBNjA3RUIyNzFERDE1N0M5RjM3Ci06MTAxQUIwMDBGRTc1MDJEMzRCRTBERjQyOUM2MjcxRkM5NEFGMTMwQUM3Ci06MTAxQUMwMDBDM0I0RTc3RTJEQzVGM0I3ODA5NzEyMTdGOTMyNDBGQUY5Ci06MTAxQUQwMDBGMDJDQzYxMUUzOEFGN0EyMTJGNUYyNTVDMUUzMEFFRjIyCi06MTAxQUUwMDA5OUM5M0M4Q0QzRDI3MTBCMzRGMzVCMUI1RjEyOTU5ODcwCi06MTAxQUYwMDBENDdGREM3RjgxOEU4OTg5MDNGMkE1OUU4RUY1OEFCRDE1Ci06MTAxQjAwMDA1OThBMjVCREZCNjIwQ0E1QTlGREU1REMyODY3NTI3QjNGCi06MTAxQjEwMDBDNzU3NzAzRTZGOTRGRjMzQTYwNjIyRDE3RTZGOTBCREVCCi06MTAxQjIwMDA4N0UyMjk2Q0YyOTIyRTZCNEU3Rjc5Mzg5QjFFQTFGNENFCi06MTAxQjMwMDBDRTRCNENFQUFGNEYwNjRCRTc4OTg5RkRFODNDMzE3MTRCCi06MTAxQjQwMDAwMDNBMEY4QjJGOUYwNEY1QjBGRUY0MDJEQ0U3NUQwODJFCi06MTAxQjUwMDA2NUQwMTM5NjYxMzgxRUYyNjU0RjFDMDk2Q0E3OEQxMjczCi06MTAxQjYwMDA3ODFDNDVDQzA3RTIxMjUxRjRCRDFGMjU2NjIzRkQyNUU0Ci06MTAxQjcwMDA4NUY4Q0RCNDlDOTBFQjk2NDBFRjBGODIwRjdFQTQ5RDJDCi06MTAxQjgwMDBERkY3QzAwNzU3MENDQzA3NDFGNDRCNTY3MTdBQUYxMjAwCi06MTAxQjkwMDA3OTE2QkIwNkNFQjMxODA0RERBQTYwREMzMzI2Nzc4RjM2Ci06MTAxQkEwMDAzN0ZCRENFOTU2RDc5RjZFNzUwM0QzQ0RCQjFBRUE5QjkyCi06MTAxQkIwMDAyQ0U0NEJGNEMzOEIyQjUzNjFCQzU3OUM5RUUzQjFGNEQ0Ci06MTAxQkMwMDBGOTlFNDZBRTRGQjIyOURENjhGRDhCODkzMkVBQUI5RkE0Ci06MTAxQkQwMDA5MUYzNTAwRkZGQzA2NEMyRjk3NzUzRkRCQjNEM0IxQzJFCi06MTAxQkUwMDBERkZCOTU3OEZBRkU5OUNCMDg5RUM3RDFGNUY5MTk1RjBFCi06MTAxQkYwMDBGQTI1Nzg3RUMzMjI2MjgyRTdBOTZBMjMzMTlEODMxRTdCCi06MTAxQzAwMDBCQThERUIwOUNEM0E2RjRCMEM2Mzk3MzU3QUU4MEVBODg1Ci06MTAxQzEwMDBBN0ZDNzgxREYwQTM0RDc1MjkwM0U5QTEwN0NGNUQwRjNGCi06MTAxQzIwMDAzREY4M0RFQkExNDcwNkU2QkY3M0U2QUIyN0MzRTkwM0VBCi06MTAxQzMwMDBDMUM3NjI1RjEwMjk1Rjg4Q0EyMzQ5OEZFRjNGMkUyMUY5Ci06MTAxQzQwMDA2RTNDMEYyQjcxREE5OEREREQyOUExOUQ2RDNBOUFFRjdDCi06MTAxQzUwMDBDNUIyQzM4NjRBNDFEOEUxOTNCQjU4QkQzQzI1QkMzRkMxCi06MTAxQzYwMDBGODZDNjIzQ0YyRUZBQUI2RDU2RTQ1OTcwN0UyNDc3QTY4Ci06MTAxQzcwMDBEQ0U5MzlFOTFBNEVGNUUyMENEOThFRUI0QjI4NjNGMTE5Ci06MTAxQzgwMDA0M0IxN0VBQTY3Njc0RTRGRTY3MTUzQkE5RTg0NEM4Njc1Ci06MTAxQzkwMDA4NzA0RUEwRkMwMzk5QTkzRUYwRjYyOEIxNTlEREYyRkVGCi06MTAxQ0EwMDBGMDc2ODM1QzJFNDFEQzNCMkU5MTQwREEwREY1RUJEN0NDCi06MTAxQ0IwMDA4RDgyRjNGQjM4OEZCRTdEMTI2OUY5NDJDNjQxMDhDQTk2Ci06MTAxQ0MwMDA0MzNDQjVERjEwQzc0QTI4MzVCNDgzN0RDODM4NjhBRkI4Ci06MTAxQ0QwMDA3OTlFREQ3RjNGNzEzNDkxRUYyNzJDMjQxNUVDMEE5MTFBCi06MTAxQ0UwMDAyQjA2RTQxQkNEN0VFMjQ0RTIyMEY2MTM5RjI3OEFGMzA1Ci06MTAxQ0YwMDA3MUJERkQ2QThCMjI2MUUzMDJFQjkyQjhERkZENjUxQ0NBCi06MTAxRDAwMDBGQUJGMzJCNzVCRDNCQUIyMzEzRjY1OEQ0M0M1Nzg4MTM0Ci06MTAxRDEwMDAyQ0JCNkQzM0IzRkJCRjFGRTczMTExNTVCM0JFODREMjZCCi06MTAxRDIwMDA2OEEyNkFGNjBGNDlFNUYxQkE3MkNBQkMyMUJBRjY2OTJGCi06MTAxRDMwMDBERTYxQkFGQUY0OUFGMzc0RjU5OTBEMDVCQUYyNTBERjQwCi06MTAxRDQwMDAwNUJBRjZEOTU0MDBCNEU1OUNFNjFGRTlEQThGNjhCRDAwCi06MTAxRDUwMDA0QzU3MUVCNUU1MUE1REZCRDE4MUM1QkFGQTMxOEZBRTdECi06MTAxRDYwMDBEMEQ1OEY2RDVCQTMyQjlGQkZGQjI3QkFGNjREM0NFRTAyCi06MTAxRDcwMDA2QkM0Q0JDNTQ5NEMzRjM3Mjk0Q0VGMzREQTBCMzAxRUNFCi06MTAxRDgwMDBEOTY0RDdDNzIzRDMzOEZFNEI2MjI3RTc0MjFDQkNFOThFCi06MTAxRDkwMDA4M0ZDNUNDMEY3MEJDRTBCMzAyRTFFODkyRjhDN0EyQzY3Ci06MTAxREEwMDA5MkZFMzQzRTJGRTZFMzdERkVCQ0M1MDQ3MjUwQjc5NzI5Ci06MTAxREIwMDBDQUVCRjlCNDZDN0Y2NzMzQUNBOTM5OEY5REE3MkE4NDJECi06MTAxREMwMDBFNUY3ODhGMzE1RjE3RUVGRjk4QUUyNjZGMTU1QTc5REY0Ci06MTAxREQwMDBEQzFBODYyRkQyOTJGNEVGMDkzRDI5RjgyODEyREUwNDhFCi06MTAxREUwMDAzRjlFMEQ2RjlFRUYwOTZGRUY0OTY0OUU3NjFFMTVGQ0I2Ci06MTAxREYwMDAzQ0RCRjhERURBMjQxMzNGMEZGNjVFOTNDNEZDOUQwOTRBCi06MTAxRTAwMDBEMUU4ODlCQjUwMUVDRjU1RkY4Qjc5NTBGREJGMzQwOUY3Ci06MTAxRTEwMDBGNzEzNkYyQ0I4MDFGNEZGMkVBQjFCRjY2NDlGQ0Y3QjNBCi06MTAxRTIwMDBBM0ZBN0UxNURBNTdCM0Y2MjY3NzJFRDAyNTUyRkM3QjFGCi06MTAxRTMwMDA2RDUyQkZGODc3MEQ4QjdGNDdFQkYwQjY0Q0M4QkIyMUQ2Ci06MTAxRTQwMDAwRUQ3RTRGQzFBRTNERjREMTY3N0VFNjBFMkRGQ0JBMDlECi06MTAxRTUwMDAwRjM4M0ZFNDc0RUVBNTJGOEY5RjQ3REEwN0Y5MDhEOUIyCi06MTAxRTYwMDAyRkMxQkVDN0FFQTg3MENFNzVCNjdEMkRERENGRTZDMjQwCi06MTAxRTcwMDA3OTZBMkJFQzlCMzRGQjFDQkFCRkU1RkI5QjI4QjQwQkE3Ci06MTAxRTgwMDBENEVFREQ5MTg0RUIyMkZCNTVGQUZDMENEREY3REVBQUUzCi06MTAxRTkwMDA0MjUxRDgzRjhGQ0UyRkI3MTJCN0NEMjIyMzNERUZDMThECi06MTAxRUEwMDBGNzZFMjJENzQ1QzkxMDJGMEIxRTk4OUNGRDJGRDlGMzMyCi06MTAxRUIwMDBGRjQ4MUE3MDdGNjhCNEFCNjczRDk3NDNCQjUzNDZENzYyCi06MTAxRUMwMDBCRjIxOENERjY1M0M4N0VCRjVCRkMxNEY5M0YwM0MwRTIzCi06MTAxRUQwMDBGMUI0ODlEQTQ1Mzg4RkVCNDg2MkY2NzlEMzYxQjY0RkIxCi06MTAxRUUwMDBERTc0NzQ0RTJBQ0E0RDUyRDE4MEU3NzA4M0Q1MzcxREY3Ci06MTAxRUYwMDA0OUZERkNCNThFQTQwMUZDMzVCMUZFMzU3Q0RGM0I1REIwCi06MTAxRjAwMDBDRTZCODM3OEUzQzk5MDA1RjEyNjEzOTYxRjU5QkZDRjk2Ci06MTAxRjEwMDA0QzAyNDg0Rjk2NjcyQ0U4NjgwRTZERUUwNEZCNkMyNjY5Ci06MTAxRjIwMDBDNkJDNjIzNTE2RDY2RERFMjdBMzdFMjI4OUFDREU0Rjk1Ci06MTAxRjMwMDA2QzhERTBFN0M0MTZFQkVENTY5QzQ3NkZCNzEyNEFFMzkxCi06MTAxRjQwMDAwRDc2NEM2RkI3NTJFNkU5RUQ1NjlBNTc2RkI3RDI2QkU0Ci06MTAxRjUwMDAwQTBDNzY0QzZGQjc4NkZBQTYxOEVDOThERTZFRTUzNDVDCi06MTAxRjYwMDA1RjY2QjA2MzdBQkIzNTZBOEJERTZFOEQwRUU4RURENkE4Ci06MTAxRjcwMDA5ODQ3RDcxOEVDOThERTZFOURCRjdCODNBRTNFM0Y3OEM2Ci06MTAxRjgwMDBBQkFFN0VGQ0JFOUZFOUNBODU5RDBGRUFEQTJGREJGRjcwCi06MTAxRjkwMDAzNEU2REY0QzNDQjQ1REQ3NkU1MkQ3QUY3NUVEMjhDMjQ2Ci06MTAxRkEwMDAzQjIxNEY3QjA5OTI4NDkwMEI0RjNDQTVBQjVGQzJGRDU4Ci06MTAxRkIwMDBCNDhCN0E3RUFGRUI4N0I0QjI3QzZCM0ZGRDBGRThGNTU0Ci06MTAxRkMwMDAxMUYxNUFDMDM5NTE0OENGNEJFOTk0QUU3NTAxQzkxRDgyCi06MTAxRkQwMDBBNENEOTZFRkRFNTkwNEYzRjhFNEZENEJGNjQxM0ZDQjc4Ci06MTAxRkUwMDBCNkU4RjNCNDk3MDdGNEU1N0EzMjJDMTZGNDQzM0RFNUVFCi06MTAxRkYwMDA4QjAwRTU5Mzk1OTBCRkFERDE2QjJCNDk4MzEzRjMyMUYzCi06MTAyMDAwMDAwNkM5NjdDQkY2Q0YyNTk4RjdFOUY3NzQ0MjdFQkE1ODMwCi06MTAyMDEwMDBBN0UwMzcwRkU3MzczMTNGQjFERTk1RDRFRjBCQUE3RDRDCi06MTAyMDIwMDBFQkY0RDBGRkQ4M0VCMkNCMDI3QzVCQkQ1QjIyMEY0QTAzCi06MTAyMDMwMDBGREQ3NTNEMzdFRDdFNkY0MzBFQjMyQUVDM0U4NzdCQUEwCi06MTAyMDQwMDA5M0Y1RTc1NEQzNjUzQkM2RjU0RkJFMjlCQjU5N0M1MDg5Ci06MTAyMDUwMDAyRjg3NkJGNkIzNzhGRTlBMjcyNDhDQUYxOUYxMjFGQ0Y5Ci06MTAyMDYwMDBEMjQ4Nzg5MUZENkM5RjUwOUY0ODAyMDE4REZDQTkxQ0JECi06MTAyMDcwMDAxRkQ2NTRCREZDOUQ4NDdGQzA3QzFFOTYwMzkwMTcxNDEwCi06MTAyMDgwMDBBNTQ2MUJGOUFEMjg0OEZBRTMzOTI2NTcyRkE3NDYzQzQ5Ci06MTAyMDkwMDAzQkRDNDNDMkYyOTU0QUZGODM3OTU0MTM3NjJFNjVFNDA0Ci06MTAyMEEwMDAyQjIzREVFQjc2REY2NTAxQkQ3OEFFNzg1RjY0QzBCQkM1Ci06MTAyMEIwMDAzODNGMjhBMUFCQjU4NEM5ODMxMzc4QTVGQkYyQTVDOTI1Ci06MTAyMEMwMDA0OTkxRjdBREFCOTMyNUZERjlGMkQ5RjdBREFCOTNCRkNECi06MTAyMEQwMDBERkI4QzlCQUU0MDFGNkFEREQxMDJGQTM3RUE1MzE1RUVECi06MTAyMEUwMDBENjNGM0VCNkY3MkJDOTg5NzE2ODE2RkZGMkJBNkQyQzQwCi06MTAyMEYwMDA1RkM1NjAyNzczNTM3NTc2QjI3N0RGRkI4MTE0NjgwMjgyCi06MTAyMTAwMDAzOTc2N0E2RTgzRjlENDNBM0QyRDAwN0ZFNEY0RENBRTYzCi06MTAyMTEwMDA1RDZGMTNDNTBCREVDRkExNzY2QTY3MThGRkYwRTU2NDJCCi06MTAyMTIwMDBFMTE3OTU2MzVDNjQ1MzA5NkI2RjZDQjczMzU5NDFCQzFECi06MTAyMTMwMDA3NzI0MTVBNUEyREY3OTM0OUZEOTRGNDdEMTgwN0VFNzU4Ci06MTAyMTQwMDA5REZDM0NFNzM2MzgyRjFDRDE5N0M3NzMzQjNGNTdBMTA2Ci06MTAyMTUwMDA2MkU3MDFCQTZEMzI5N0E3NkFGMzdDRUY0OThFQzNGMTRCCi06MTAyMTYwMDA5QzkzOUVFQTg0N0NFNzI2OTdDOTI1QTlFMDNGOUJGMEQzCi06MTAyMTcwMDA1Qzc0QTNDNzVFQkEyQjhGQkQ5N0E4N0I4RkREM0I5MkEzCi06MTAyMTgwMDAwMURGRTBDRkRCOTVBRkI1N0NGQjMyQzUyNUY0MUI2OUUxCi06MTAyMTkwMDA5RDJGMjczMzdGRDc0QzNDMzZEMEJCRTIzQ0Q3RkM0MTQ4Ci06MTAyMUEwMDBCRTBERjRBRDIyQjk1REUxRjIzOENEM0M0RjZBMEEzRjc1Ci06MTAyMUIwMDBDRjk1NURFQzdDQjc1N0NFQ0Y5MjI3NTVFN0Y0QkU5NDEwCi06MTAyMUMwMDBBQ0YxMTdDNEI5RUU5NTRFQ0ZDQjQwNEY5RkUyQjc4MjJBCi06MTAyMUQwMDA3RkU5QjM4NURGRkZGRTg5RDNGMTU2QkUzRUVBNjgyMjcwCi06MTAyMUUwMDAxRkUxRjhGMkEwRTIyNzZGMjU2MzVDQ0U4RkY5OEEzN0YyCi06MTAyMUYwMDBDOEVFMTMxMDlGMUI2Q0JDRUE2ODcyQkZCOERDNTEyRDhGCi06MTAyMjAwMDAxRjFBRTU4RkZBOUZDNzYzRTE3QzIyNzY4ODgyREIwOTdCCi06MTAyMjEwMDBDNTlEMEJGQ0RGMENGRjlFODRGMUQ1MTNGMDdFQkZGQzQ3Ci06MTAyMjIwMDA1MzM1OUVFN0QzQUEwM0U2RDM4QTdFRTZDNjc5QkE5M0VFCi06MTAyMjMwMDA1OURFREYxNzAwM0RBMzVDMUI2NTREM0ZDRUIzRjQ0MzcxCi06MTAyMjQwMDBGMTk0REI2MDFGMTRGRUZFQzFGMEU3M0VDMTgyMDlFNzk2Ci06MTAyMjUwMDAxNkQ3OEM0QUU5RTczRjQ2QTUwQ0UwM0Y5RTM5M0MyQTU5Ci06MTAyMjYwMDAxNkNFOTM0NURDQ0FEOENFRTY0QkM4RDBERThGNjk4RTM5Ci06MTAyMjcwMDBEMzhGQkZCOTgwOTUxM0Y5QjhDQjYzMTlERkU3RjJCMkZBCi06MTAyMjgwMDBDODAzMTQ3MTZCREI0Q0UyODFGQjBFM0ZFM0Y5RDlBMjZBCi06MTAyMjkwMDA5RkRDMTQwN0I2OEY4QjlGOTI5QjUyMDhFNzY5MTJFRTYyCi06MTAyMkEwMDAyQjM3Qzc0OUJBRkRFNUYxRTQ5MjVDNThDRjMwREU3RkE5Ci06MTAyMkIwMDA2RTBBRTNEMzZEQzM1ODdDQzY5ODA3RjkxOTZGRkY1OUFFCi06MTAyMkMwMDBGMjE0ODQ5NDYwQTMwMTlGMTY1OTBFOEJDN0IxMjk2QzM4Ci06MTAyMkQwMDBGRUM3NjM1OUJGMjI3RTU2NzUyRkJCREYyNUUyNjYyMkZCCi06MTAyMkUwMDAwRTQ4M0Q4M0I3NjJBODVFMzlENjYyMjYxMEQ3NUEyQUI3Ci06MTAyMkYwMDBEQjM3MDMxRkY2REU5RkUzRTdFQTJFRkExRkQ4Q0JDQUNGCi06MTAyMzAwMDBCQzcyQ0MzRkZBNTdFRjZGMDEzRTYzRTJGQkRCQ0JFOUQ3Ci06MTAyMzEwMDAyOUJERjZEMjdEOEVGN0I4NjYzMkZDMENFRUJDQkQyQjIzCi06MTAyMzIwMDA5QUYxNkQ4RkMzOEVGMTZDNjNCQjZBNEU5RjE2MUVBNzI4Ci06MTAyMzMwMDAwMDdEMEQ3NjIzNUUyNjBERTFFQzQ3MzVDN0ZCOTlDMzgyCi06MTAyMzQwMDA1NjBGRkEzMUE1RDE5OENGMjFDRTNGMTRDQTlGQjFGMUQzCi06MTAyMzUwMDA5ODA2RUUwNzY4RjNBNTY3QzA3REEyREVGMzBGOTVFMDRGCi06MTAyMzYwMDA3QjA5NzYzQkJFQTdBODI0RTg4MDJCQTE4QTVCODJGQzcwCi06MTAyMzcwMDBCMjJFNEJEN0E2MTQ5OEVGNDU5MjFCRUUwRkE0NTRCODdCCi06MTAyMzgwMDAzQTUyMTJFMTFFQTE4QTYyQjYzOTlCMzg4QkExM0VERjE4Ci06MTAyMzkwMDA4NEY1NzE5N0JCMzY5QjIxRUY1QTI1NzA5MjREQ0M3NDEyCi06MTAyM0EwMDAxQzA3MURFNzhFOTQ2QzVDN0Y4QjdGNkU0NzBBNkQxNzUwCi06MTAyM0IwMDBBQkY2OTA2MTc5QTA0NzVDMzM1MjQxOEVFN0IxRkM3NTcyCi06MTAyM0MwMDBFM0ZBRDZBNzMwQkNEOTM3RDE3RDAzRTA0MzBEOUYwNzkwCi06MTAyM0QwMDBCRTNFODVFNTAxNTEzRDczMTNEMEEzNDQyNUJCRDhCRDU2Ci06MTAyM0UwMDAyODk2ODcwQTY5RDY5ODJGRTg2NkY5RDIzMTkwNkY5NEJCCi06MTAyM0YwMDBDM0Y0MENENERGMTUzNzc1MjNDODhGOTAyRjk5RTMxQkQ2Ci06MTAyNDAwMDBGODVFOUIwRjdGMDdDNzc3ODI0MTNFMDUzRUU5MDA4RDRFCi06MTAyNDEwMDA5MDBGQTFDQzI0QzhEN0IzMkJDMkNGRjczMTRFRTc3QUE3Ci06MTAyNDIwMDA2N0Y5M0QzMEVFRUNDOThEOThFNzRFQkVGOUVFM0JCOTQ5Ci06MTAyNDMwMDAwODlDNUUyNjI3RjQ3RDAyNzE4OEE4NDRBNjdGQTM1NEQ5Ci06MTAyNDQwMDAxNUY1MzE3MTQ5OTg2NzZBNTNERDM1NTA4RUIyNUZFMEZBCi06MTAyNDUwMDA5MkMxRUU1OUY5NzlFMTEyMTM1MUE4QkM0REU1RkQ3ODBFCi06MTAyNDYwMDBFNjExRTlDMzVDMTY2NzY1RkE1NTIxMUYwQUI5OTAzOTcwCi06MTAyNDcwMDA3MjhBQzA3RUIyM0ZFQTE3QjVDNEQwRjU0Q0I1MUZDMDEyCi06MTAyNDgwMDA3M0M0QThFMTBEMjU3MEFGRTBDNTQ1QUM4RjlGNDVDODZBCi06MTAyNDkwMDBEQjNGQ0VGNTU4QkNFQzREMzU4MTRGNEY4RUJERkE0MjM3Ci06MTAyNEEwMDAwNkQyRjkzQ0I4QTE3OURCQTZDM0FGRUVCQjg4QzdDRjkzCi06MTAyNEIwMDAyMTVGREM3RkY4NTU0RkRFM0Y5RjVGRkVEMkZEODc1RkQ3Ci06MTAyNEMwMDA4NUZDRjI3RjlFRkZERDEyRThGMUUzOTRCMTYwREU0NjA5Ci06MTAyNEQwMDBGRTE3RkFFQzkwRUMzRDc0MjNDNUZGMTU5NEE5N0MwNTFBCi06MTAyNEUwMDAwMDE1NTI4MUY0NjZGOTQzOTc3MzNDRkJCRkE2NzhCNjlBCi06MTAyNEYwMDBGNUUxRjk4QUY2RkQ4OEJGNDM2NjNBNkYzQUJFNzkwQTdDCi06MTAyNTAwMDA0M0I1RjkyN0IxM0MxRjIzODBGRDVGNjk2QjlEMEVGRTJCCi06MTAyNTEwMDA0REI3QTU2NzFDOENEQkZEREM1RjMzRkQ1NDlGMUNGRUIzCi06MTAyNTIwMDBFOTI5MDdBMUZDNzc0NEU5NzFDMEYzMTNFQkRFNzA3ODY5Ci06MTAyNTMwMDBFODdBMEZBRjkzRjFGRTFCREU0QkQ2RTQwMzlERTA3Q0ZGCi06MTAyNTQwMDAzNTNEQjVGQzA4RjBENUEyRjVERjE2NjlGRDZDRTI0QjEwCi06MTAyNTUwMDA0MkJCQkIzQzIwQzMxRERGNUVGREI3RjJEMTE4Q0U3NDc5Ci06MTAyNTYwMDBBQ0JDQUEyRDQxNTcxNkY2Nzg5NTM1RkMzREYxQ0M1NEZDCi06MTAyNTcwMDA0NkY3RTU4RjZGQjM0MDNFRkNGNDU0RUYxNzMwRkUwOTg5Ci06MTAyNTgwMDA5RTZGNzA2Mjk3MDNGNzU3NjIzRThCMUZDRkI3QzA3RTc2Ci06MTAyNTkwMDBGMjQ4QkI5NTA0ODFFRjk1NEUzM0MxMzg5NTY3QTY0NDQ4Ci06MTAyNUEwMDBGOUQ2Q0JGOUQwMzhDRjk3RjZDNDYwN0Y0QkVGOTUzMTkxCi06MTAyNUIwMDA4RTU0NDlDN0YyNTFCQzdBREI5N0IzRkRBRDYxMUQ0QjE4Ci06MTAyNUMwMDAwRkFCMzM0MDVGMkRCRDQ1MjI3RTk1QjU1RjQ3RTlFNkYxCi06MTAyNUQwMDBGNUREOENFNzJCQzY3NTFBRURDQjY5QjJDRTAyN0FDNDU1Ci06MTAyNUUwMDA2ODVGOTYxMDc3RjM2NEIwNUJBREZBRTdDQkRBNkZDMzQwCi06MTAyNUYwMDA3RTk3OURFNTNDMjYyMTk1REI5QjIyMzJGMUJCMUM4ODEyCi06MTAyNjAwMDAzMzBGQzM3Q0MxNDhGNkU2QzQ3QTI2OTQxRkFGQjcyMUM2Ci06MTAyNjEwMDBGQzc0QkQwQkUxMTE1MEE2MTRDRjJCNzc3N0JDOTQ4RUMwCi06MTAyNjIwMDA2MkRENTkwNDc2Mjg2QUZGNTREQjM1QTRDRjdGNTZCNkE1Ci06MTAyNjMwMDBDRDBEM0VBNDAyNUZFQUYzMjEyQjM4OUU4NUZGQkM4Q0IyCi06MTAyNjQwMDBERjMzMzg5QkZGNUMwMUVCMUMyMDFGQjI2MjkwRjk5MEQ2Ci06MTAyNjUwMDAyN0Y3OERCN0MxRjNDMjU0N0UzRTM1OTFFMjAzRUQ2RjhCCi06MTAyNjYwMDBERTZCMkEzOUJCRkQ4RDg0OTc0OEVGQUQ4MkVGMUM4NDY5Ci06MTAyNjcwMDBDMUIzOTA5QjIzREM4RTJDRDkzMTY3RjMxMDNBODFBNjJECi06MTAyNjgwMDBFNzNFQ0FFQTQyQkU2NDcxMDg3MTRFMjVBNzZFRUU4NDI5Ci06MTAyNjkwMDBGNUNCQzQxMEZGRjM5MzM3ODk4NjdGOERGQ0I5OENCOEQ2Ci06MTAyNkEwMDA5OUREQjFCM0Y3NkMzQzJFRDFDQjk3RURCNzIzNUUwNTI2Ci06MTAyNkIwMDAxRkMxOEQwMjUzMkFDMDYwQUFBOUI4RkY3NzAzRkE3RDEzCi06MTAyNkMwMDAxRkEwNTU1RkZFRENEQzk1MDU3QTYzOTkyMTVFRjBCOUE5Ci06MTAyNkQwMDAxNDdFRkZGNUMzRDQ2MTZDRkRBQTY3MDZFNDQ1MkMyNTgyCi06MTAyNkUwMDBFNTlCNTk1Q0JEMTU5RjlGNTA1QTVGQkExMUU0NzkwNzZECi06MTAyNkYwMDA5M0E3NTVDRjNFRjEwQ0U4QTkxNUZGNzlBRjEzRjRENDk5Ci06MTAyNzAwMDBERjk0RDY2NDE4QUZGNjkxNEQ0RUQwRUIyNzE0QkYxMzZCCi06MTAyNzEwMDBERUZGNUI0MDBFN0I1Rjc3N0JBQTI0RjJFMkVEOTAxNzMxCi06MTAyNzIwMDA1Njg3MkMwNjAyRTY5RjA1N0FGMkJGMUYzMUJCMjA4RTJBCi06MTAyNzMwMDA1QUZGQTgzNTY4QTVGOEE4REJDNUYwNDhDQjQ3NTlGOTdBCi06MTAyNzQwMDA2NkM0NTdGRDZFQkQxQ0FFRjhENUJEQzkyQUVFRTdGREM3Ci06MTAyNzUwMDBFOTFDN0ZFOUEwQUFFQjc2OTgzMTdGQjRFRTRERDkwRDQ0Ci06MTAyNzYwMDBDM0Q0OTMxRTVDOUZGMTdEOTg0Nzg4RDJBREJFNERBRTE5Ci06MTAyNzcwMDBCNEM0RjZBRkE3MUU4RjA1RTRBQzdFMTdBMzUzQkRDMTRBCi06MTAyNzgwMDBDRkFDRTE3QUQ5QzhFRjNGMTM3MkNGRjk5Q0UyMDVFM0YxCi06MTAyNzkwMDA2MTIyOUY5NTA0OTg3RTZFN0FFQ0ZFNzE0N0U5QkMzRUZCCi06MTAyN0EwMDBEREYxQUE1M0NBRUJFMzc3MDI1OTk3MTQ1RjI3REJBQTNFCi06MTAyN0IwMDAxNjQxOUU0MTI0M0VGRjlDQ0I0NUFGREVFNzc2NDZEREM5Ci06MTAyN0MwMDA0RDI3MDZCRTdGM0I4M0I1RTZBMEYzNDI4QThGREE2REM0Ci06MTAyN0QwMDA2NkI3OUYzRUFFN0Q0MkY2RDhDMTRGN0FEQjhBREY3NzdGCi06MTAyN0UwMDA1OEY5QzQ4QjZGNUQ0MEU3Qjc3MkE3Mzk3MTI2NUI4NkQ1Ci06MTAyN0YwMDAxREY0QjNBMDUzM0RGMDc3NDExRjVENTYzQ0ZEQTIwNThCCi06MTAyODAwMDBGMjIwRTFGOUJBRjgzRUZBQUNEQ0Q5NjE4MUJDNEEyMzg2Ci06MTAyODEwMDAxRUE3QjY3NTU4OTg3QzE5RThENDc2NzQwNkQ4RTVBNjM0Ci06MTAyODIwMDBDN0NFNTg4MDBGRkVCNjQ3MjJFMDQyMUFERkFGRDlGNjc2Ci06MTAyODMwMDBBMjEzRjQwN0UwMDlFQzg3QTA1NzJGRkRGQUQxMkQzODM5Ci06MTAyODQwMDBFQkY3MTNCMDlEMEJDRTY5MjJEMUVGNUE5ODRCMTJGMkUxCi06MTAyODUwMDBGNzkzQkZBN0UzRDdCQzYzNzVDM0ZBNkI5RUJDRDYwOUQ5Ci06MTAyODYwMDBFQkY4NDg2OTYwN0NGRUYzNERDOTYwOEY2QkNDRkU2NDY5Ci06MTAyODcwMDAxNzQyRjZCQzY2RUI4RjkxRkY5NkJERkVFMzY0ODI3QTQ5Ci06MTAyODgwMDBEMzkzMDZGMjRCRDc5OTA2RUI1QkZBRjAxNUI4QkU2QTA0Ci06MTAyODkwMDBFMjQ1RkVBQkY5Qjk1QzBFN0VFMjY5ODU5NDg2RjNGM0ZFCi06MTAyOEEwMDBEM0QzOTg5QzdDQjRERDhBOUI4MjhGMkM4NDdEODdFMzc0Ci06MTAyOEIwMDBDRjMyQ0JFMzIzQUJEMTBGRjkzMTVGMkJENUM0NTgzRUQ4Ci06MTAyOEMwMDA2RDYzNzRFQTRFMzU3MTM5NjM3QUFDOUVCN0FBREY3MUQ1Ci06MTAyOEQwMDAzM0VBQjE4RjMzM0QyOTIwRUYxNDBGRkE3OEVBRUJEM0I2Ci06MTAyOEUwMDA1M0I4RkVDM0VGQTVFMDdCOTRFRkE2QzI3MzY4REY2OTFGCi06MTAyOEYwMDBGNjQ0OEREM0JEQzdGMzVBRDlGOEQ3RjFGMUU5QkNBMzlCCi06MTAyOTAwMDAyMTJFRjc1MUIyN0VGRjJBRTAyNTY5MjIwRTQ2M0E4OTMwCi06MTAyOTEwMDA5NkJGMjJDOUZEOEU1QjkwQUZCRTdDOTNFOTk1QkFDMDhECi06MTAyOTIwMDA5QzUyQUNFRjM0MDc1M0EwM0VEMDcxQjk4NDdBODFGQTNGCi06MTAyOTMwMDAxN0UxRTQ3QTg3OTlDQkI1QkU5RUNFNTM5MUI0RjhERDBBCi06MTAyOTQwMDBDM0VFQzU1NURGNDNEQjY5RkM5MDNFQkVCMUY0M0RDRjFECi06MTAyOTUwMDBFRTkzNEY5MTVGQjFDQ0UwOUYwOTY4RDQwQjQ5Njk3QTNGCi06MTAyOTYwMDBGQjI3REUyNzBGMjc4NUJEODdENUE3MEZGQzg4Qjc1QTIxCi06MTAyOTcwMDA3M0UwOTcwRjgyMUNCRjZEQzU3Qjg2QjU0Rjk4RjE3QkM2Ci06MTAyOTgwMDAzOTlGM0NCRUY3QUQ2QjI4QkY3RkQyMjZFNDU3QUY2N0I3Ci06MTAyOTkwMDA4REYyNUJGM0Q0MTUyNDlDRkM3RTkyNTg0RUMyQ0EyRjU0Ci06MTAyOUEwMDA3RDFFNTY3RTEzNTlGRUZFRkZCNjlFNUQxNjQxQ0Y1RTFDCi06MTAyOUIwMDA5Q0E2RDdCM0Q0OUY4OEJEOTAxNjNGRkVGNUNBQTFCODk4Ci06MTAyOUMwMDBDRjMyRTA1NUUwRDNBODM3MEZBNUFBODg1RkEzREVBNEQ1Ci06MTAyOUQwMDA3RjZGMTIwRDFFMDVGRTA0NUZBRUY4Q0QyQTFDQTc5NzZGCi06MTAyOUUwMDA3RjA1N0YwQUZFRURFNTRGRTM3QUY1NzgzNEQ2MkI3MDRDCi06MTAyOUYwMDBFN0E4QjA4RkVFRTYwRDc0N0YwREU3QUVDRkM5NzhFRTk1Ci06MTAyQTAwMDBEQUFERjYzOEUzMjEyRUNCRjM2RUJBNURCQzFDQzdDQTMzCi06MTAyQTEwMDAzRDQ5OTZDREEwM0ZDNEYzOUUyODk2ODdEMDVEREVFMzY2Ci06MTAyQTIwMDA4Q0QzRjhGNTQ3REI2NTI3RTRENTc3MDVDMkU3NEI2MDIzCi06MTAyQTMwMDAyNjQ1MTJEQzEyOEQ1NERGQzhCRjVCNjNDRkYyQzFCRUU2Ci06MTAyQTQwMDBBQzk1OURGNzJDNjlCQ0NBMDlGRTc0Nzc3QkNFRUM3OUY2Ci06MTAyQTUwMDBFMEM3RUY5N0QxQTdFQThFRTZGOTU1N0U4RjkyNDZGMTRGCi06MTAyQTYwMDA1QUM1OTY0QzRFMTBGRjdERTA2NzU3QjVBRjlDMDk5QjQ5Ci06MTAyQTcwMDBDNjI1MkQ3QTdDNTREQjJGQzdGM0FDRUE3QkNDN0Q3QzVBCi06MTAyQTgwMDA0MUMwREYwOTU4QzBDRkFBNzk1OEZGN0MwNUU0NTUwMTQxCi06MTAyQTkwMDA3RDBDN0NFNDA1M0UwQTczMEZBMzU5RjA1MTNFQzk2N0QzCi06MTAyQUEwMDBGQjY0N0U1RUM1RjVEQTc0Mzk2RkY2M0NDODVGRENDNzNGCi06MTAyQUIwMDBFRTQ5OUM2Qzk3Qzk2NjU4RUZFM0ZDRkNDQTlGODRGQzA2Ci06MTAyQUMwMDA1OTQ3Rjk1ODFCRTdGQzE0Rjg2QzU0NjRGQkZERTk2Rjk3Ci06MTAyQUQwMDAwRjE3REQ0ODlCRDQzRUYzRUVCODg3MjhGQ0Y0OTlCNzc2Ci06MTAyQUUwMDA0N0ZFMDFDQUNGRkUzNUVCNUREMkJGRkRENDNENUYyRDYxCi06MTAyQUYwMDBDNDNDQ0EzRDU2MDJGQkEyRUUzRDJGNjdERDA4RTVERjcwCi06MTAyQjAwMDA1QkREQThGRjM3QjBGREIxN0Y4RjAzRUQ3QTc3MjZGMzQ5Ci06MTAyQjEwMDBGRjlBOUUzQjMzQUUwQkVERDM0NkE0RDdEMzY5RUM5RTEwCi06MTAyQjIwMDBFQUM5RjZCRkJGMkY0MTNFNUQzQjVEMTVEODVEQkVFRkU0Ci06MTAyQjMwMDBBQUZGN0QxNEVFQUZCQjlGM0JBM0RCNTdGRUFCRUJBOTE3Ci06MTAyQjQwMDBFM0Y3OTVCQTFENjQxRURDMkZFRThFNjNGNzNCRUJGRkI3Ci06MTAyQjUwMDAzMEU5MTc3MDVGNzFENUFFMEU0QjE1QUQ5RkZBQzc2Rjk4Ci06MTAyQjYwMDBDNzgxQkVFOTdFOEFGOTEzRDRCRkREMEEyRUY1OUUwNzIwCi06MTAyQjcwMDAwRUI0OTgyOUZEM0UwNzlGNkYwODIxNTczRDY4MkY4M0FCCi06MTAyQjgwMDA3QjE4RkRGMUMyRjBEMDRERjEwMEVCQTI3OEE5MDEzRDE4Ci06MTAyQjkwMDAxOTA5MUY3RkY5QjdDNUM3MTcwQjYxRkNEQUY2ODkwNDVECi06MTAyQkEwMDBFMkU5N0Q3ODkxM0NFQ0I5MDNGMzJFRThGQUQ5RjMzREU0Ci06MTAyQkIwMDA2N0M2ODE3Rjc0QjZGNTlFNEE2M0Y3NjVGRUFGQUMzNzkyCi06MTAyQkMwMDA2RUM4QkZFQjdBMTlCRjNGOTBBNkUyM0M4RDdDREY5RkI5Ci06MTAyQkQwMDBBRjlGQkQxRUNCNEYzQURDMzhERjQxQ0E3QkZFOTBGRjcyCi06MTAyQkUwMDA1QkZDM0RGQkRGNzZCRDY3QTNGNzdFNEU2Rjg3MEJDRUE4Ci06MTAyQkYwMDA1M0JBOUZGQjM2OEI5Q0MzQkFFQkZFM0Y1RDc3QUY5RjBBCi06MTAyQzAwMDA2MzcyREIyNkQwRjlCRDQzMDI1Nzk0NDg5MUYzMzgxRjE1Ci06MTAyQzEwMDAxQUEyREY0N0NDRTI3RUM0QUNDNDZBRjQxRjY2Nzk1OEJFCi06MTAyQzIwMDA3Q0E1ODkxNEVDODM3QjZBN0U4RjhDRTcwRTk4NEM0M0RECi06MTAyQzMwMDBGMUQwNzk3OTdFMDBGM0I2MTRGRjg4RkIyMDhGRUJDQUMwCi06MTAyQzQwMDA1NTZFRjY5RDJGRkRGRTZBNTY3MjY5MjlGODZGMDcxQkI3Ci06MTAyQzUwMDBFOUJDNjhCQjgzMEU5M0FCODkyRTYxQjY0NzQ2N0Y4Rjc0Ci06MTAyQzYwMDA0MkY0RjNGRTMyRTU1MkNDMEI5OTVEQUNERjY3NUM2MzU2Ci06MTAyQzcwMDBEODM3NUMzNTRGNUY3RjI1RDk5RTA0Rjk3NzU3RDY5OEIyCi06MTAyQzgwMDAzMTVGRTgwQTQzRkJCNTQzNUNCOENFQUI0OEMzMjYxNkI4Ci06MTAyQzkwMDA5RjM5MzczQ0JEQ0FGMUQ0MUYwRjAzRTNBRDFGOUVGODI3Ci06MTAyQ0EwMDA3RTEyNzM3OUQ0RkU3OEIzN0FEOUZFRDI0QTJCQjhCRjlDCi06MTAyQ0IwMDBDNUYzRTRENjBDMEE5Rjg0RUYzQkFEN0M2ODgxNUZBQjIzCi06MTAyQ0MwMDA4NzdEQUY1M0QzMkZFMjQ1RTBGRDVDRjEyREU4NjRDNDZFCi06MTAyQ0QwMDBCQkMwQUZDMDlCOTEwRTVCRTE0QzQyRTM4RkY3NDE5MUNCCi06MTAyQ0UwMDA0N0UyMjVEQTdDQ0I1OUJEN0VBMzFERjFGOERBMEU3NkRBCi06MTAyQ0YwMDA1RkUxQjVFMkFBOTY3QzI4M0YyRUExQkY3NjdBRjI3OEYyCi06MTAyRDAwMDA2MkEzRUIzRDY4MjZCQkQ5RkQyRjhGRUEyQUVBQ0I2Nzg5Ci06MTAyRDEwMDA5MThBNUZDNjczMDVDODI3RDRFRTRCMjE5RjUwQkIyRTA2Ci06MTAyRDIwMDBDODI3RDQ5NjIxOUY1MERCMUVGMjA5QjVGNTkwNEZBODE1Ci06MTAyRDMwMDBBRDg3N0M0MjZEMTlGMjA5QjVFRDIxOUY1MDVCODY3QzExCi06MTAyRDQwMDA0MjZEN0JDODI3RDQ5NjIxOUY1MERCMUVGMjA5QjVGNTUyCi06MTAyRDUwMDA5MDRGQThBRDg3N0M0MjZEMTlGMjA5QjVFRDIxOUY1MEM3Ci06MTAyRDYwMDA1QjBGRjk4NERBN0FDODI3RDQ5NjIxOUY1MERCMUVGMkQ0Ci06MTAyRDcwMDAwOEI1RjU5MDQ3QThBRDg3QkM0MTZEMTlGMjA1QjVFREQyCi06MTAyRDgwMDAyRjBFM0RBRjJCOTc5MDU3NzVFREE3REFERUQwOTVBN0E0Ci06MTAyRDkwMDBCQkRFRDVCNUZGNjFFQTMxNURGRDI1RUEyN0JBN0E0MTkwCi06MTAyREEwMDBGRjRCNzM0RkU5OUVDMzk5ODVCRjA4RjYzMUVDQUZDQzVBCi06MTAyREIwMDBGRDc3NUQzRjBBMjlDNzM4QjM4NTM0MjBCNDQxRkM5NkJFCi06MTAyREMwMDBDMjY4RDI4NkQwNEVDNTFDRTBGNDkxREUxMUU5QzBBRkQ2Ci06MTAyREQwMDA1QkZEOUI4MUI5MEU0RTNBOTMwNUZBRkZCNUM5NzM1OTU1Ci06MTAyREUwMDBGQzgxOUYxM0NDODY3RkFBOTQ4OTYzQkVDOTgwN0RBRDg4Ci06MTAyREYwMDAzOEY3NzQ4NjY0MTIxQzRGRjkzMDI0MjE3NDg1NjI0OEI4Ci06MTAyRTAwMDAzMDgxRjI2MTI4MEE2MTdDMjgwMTlGMjc4NEUyMTAyNjI0Ci06MTAyRTEwMDA4NkQyRjE3OTUyMjgwRDYxNzIyODA3NjE0QTI4MUI2MTE4Ci06MTAyRTIwMDA2QTY4MENDMkI0RDA2ODg0NDM0MkUzRjFCREY0NTAzRUZBCi06MTAyRTMwMDBDMjhDRDA4NUY4M0MzMzM0MDk2MTU2NjgyQTNFMUYxQThCCi06MTAyRTQwMDAyQTQxQTg4NjJFNDU5ODFEQkEwNEUxQjBEMDVDNkM5NzQzCi06MTAyRTUwMDAxMzlBODM3MDc4NjgzRTNFMUYxMUJBMUFFMUM4NTAxNTY0Ci06MTAyRTYwMDBDMjUxQTE0QTg0QjlBMTk1MDg0Nzg3OTYyMzNDMkY3NDgzCi06MTAyRTcwMDAyREJFMzcyNkI0MUE2MTVFRTg0NjdDM0UzNkI0MTZFMUI0Ci06MTAyRTgwMDBCODUwMTNDMkYzNDM4RDA4RERBMURCQjA1RDdFRTgxNkI4Ci06MTAyRTkwMDA4NDA1QTFCQkYxRjlGOEQwNUQwODI3ODQxRUMyRTc4NTNGCi06MTAyRUEwMDBBMTA3MTAxNjg1N0U4MTcwNjI2ODFCQzJFMkQwNkYxMDg4Ci06MTAyRUIwMDA0RTBBM0Q4NkYwODJEMEQzRjhERTg1QTE5RDA4Mjc4NzkzCi06MTAyRUMwMDBGRTgwQ0YyRjBBRkQwRUUxMEY0MjdCRjFGOUM1QTEwRTY2Ci06MTAyRUQwMDA4NDlFRDBBQkY4QkMyNEI0MUZFMTk0RDAxQkY4N0M2QTZDCi06MTAyRUUwMDBFODc1ODREMzQyRUZFMkYzRTlBMUI3MTFDRTA4MUQ0M0EwCi06MTAyRUYwMDBGOEMzRDA1MTg0QTVBMTRGMTA1RTEyRkExQkMyMUY4NUUyCi06MTAyRjAwMDA0RUUxN0I5Nzg2QkU0MDM4MzNGNDc3N0M1RTE2RkEwQTMyCi06MTAyRjEwMDA2MUVGN0U3RjcyQTQ3Qjg5NUVEMzc3MTBEN0IyQzcwRjMzCi06MTAyRjIwMDBFQTNCNUY4NDZDRDE5RDRCREQxRkUzNDQzRDM5N0IxRDQzCi06MTAyRjMwMDBDQjIzRDk1QzcyNkExQUZBQjVBQkFEMkFGRkJFQTY0MUEzCi06MTAyRjQwMDBBRjdFNjMwN0ZGNjExM0Q0QTRCMTNFMjAwRjcwMDFFNzg5Ci06MTAyRjUwMDBERkQ3OEFGNzI2ODFCRkI0QjlBMEFCMTZFMjIxQjc2N0U1Ci06MTAyRjYwMDA3NzU1MDBCQzMzOURDNTU3Mzc3Mzc4N0IzQTNCQ0ZBQzYwCi06MTAyRjcwMDAxOEU5QzI3MkM1RUExMTc4N0U0NTEyMDdCNzhFRDc4NjY2Ci06MTAyRjgwMDBCMEY3NDRGQkJBNEM1RUI2Rjc2NEUxQkQ4MDQxRjYzMzVFCi06MTAyRjkwMDBEODc2NjdDQjhGQkEyRUREQkIxREU1QkNERkZEQkM0MTBCCi06MTAyRkEwMDBCRkZGRUJGNEMyN0ZFOUZEQTcwNjdBRkYwOEE3OTcyQkM2Ci06MTAyRkIwMDBBM0ZDMTk5Q0E3RTIxOTA3RjU1MzM2QTRDOTg5QjQ5RjRECi06MTAyRkMwMDBDQTE2QzkwNTc2QjI2QTYzRkUwQ0EwNUYwMUYxNjAzQ0M3Ci06MTAyRkQwMDA3MTQxODRCQ0FFNzczOUZEMTYzNzk4MDlDNDE1MTdBQjFCCi06MTAyRkUwMDAwNEUzQjk4Qjc3QjEzQzVGODg4Mzk2NTFCRUE4RTE3QzNFCi06MTAyRkYwMDBCMUVBOTY5RDE2NzA0MTZCMUE5NkIxRkNBMzAwOEIzMzEzCi06MTAzMDAwMDBEOUU4N0ZDMENGMkI1QUU2NjBGRUQxQ0E0N0Y1RjFBN0I5Ci06MTAzMDEwMDA1QTg4RUJDODcwOEVBQzdGNUVDRkUzNENDNjc4QTUzMTgyCi06MTAzMDIwMDBCRUY0NjYzQThGRkJCQTU5REUxMTkxMzM3MEJEQTdFOTQxCi06MTAzMDMwMDA3QTIxOUZDMzdCQkRDMzA2RkE5RkUyMDFDRjQ5QzRGQTQwCi06MTAzMDQwMDA0NUJDNTJFMDgxRjRCRkNGODA3OUExMjdGNzhEQzAzQzA5Ci06MTAzMDUwMDBCNTkzQUE5QTAyRURCQzU0OUMzQUVEOTBGRkUwOUQwODBFCi06MTAzMDYwMDBDRjI5RkUzMDlGQTRBNzMxMDZGMzkxOEU1MjdEQUU0MjQ4Ci06MTAzMDcwMDBFMjkzQ0IzQjExQkU5RkQ2RjU0RTI2RTFERjZGRDQ5Rjg2Ci06MTAzMDgwMDAxQkQ4NUEzMEZGQkFEMjRDMDdBNkVEMkExRjQ5QzBGQjA1Ci06MTAzMDkwMDA4RkI0QkY3MUJCMjExRUY5ODgxOUYzODFGQzY0NEQyQURFCi06MTAzMEEwMDAyOUVFN0ZBRTUwQkVDOThDRkNCMTc4NzcxQ0NCMEZGM0Y0Ci06MTAzMEIwMDA3QkRFODQ3QzdENDE4RkEzMUI3MzY2NDA1RUQxRTJFNjlDCi06MTAzMEMwMDBFQzdDMENCQkVEMzZBMzlGMjdDRTRCMDU5REZBRTc0NTY0Ci06MTAzMEQwMDA5N0M3QzJGNzExNTczNEJGOEVGNEE0RjREMkQ1RDdCNjMwCi06MTAzMEUwMDA3QzgxRjcwNzI4QkQ4RTQ3QTBEN0YxODFFODE1OURDMUU3Ci06MTAzMEYwMDBFMzgxNkU5MTI3OTYxNzdCMTU1NEFFNEI0MDM5QUREOEJFCi06MTAzMTAwMDAxMDFDRDFBMEUxNDc2MzlDOUU2NEQ4RjFCRUEzQzgyN0UwCi06MTAzMTEwMDAyRTFEQzJFODQxMTQ3NzMyRDBGNTU0NEIyMUQyQ0I0ODUyCi06MTAzMTIwMDBBN0QyN0Y1NDIxM0RDODNCMEVGQ0RFRUU4MjFDQjJFOEU0Ci06MTAzMTMwMDAzMkZBN0MxMThGNUIyRTY4QkEwNEZERTc5QzBDRTZENzRGCi06MTAzMTQwMDBCRkI2MUU3MjJEMDk3OTdEQkQ4RDc4QThGM0ZDQzY3QUI1Ci06MTAzMTUwMDAxNzk2RkZCMjNFMTVDQjdGNURBRjIyN0M3QjdEMkVDMkUyCi06MTAzMTYwMDBFMzE2OTZDRjIzRTQ4OTMyMDBFNkQ1OERDRTYwNzIzNDIzCi06MTAzMTcwMDAzQTQzRUNBQkFFNEI4NUI4NzRFOTNGREUyODg0RkM5RTQ1Ci06MTAzMTgwMDAyNDdGRDJBQ0U5OTlFODc3RUJGMjM0RTY1REFFQ0ZDM0E5Ci06MTAzMTkwMDBFODMyRjMzQ0FGNUIyNDM3N0M0NzY1NzFGOTg1QkFGNkJBCi06MTAzMUEwMDAyNDc3N0M1RjE5RUMwN0NGMUI1OURDMUM4N0RGNkZCQkQyCi06MTAzMUIwMDA3QTY2ODJBRUZEOTVDREU5QkE3MjQ5ODY4QUZBNzU0RTc1Ci06MTAzMUMwMDA2OThFRUVGOTM1MTU2Mzc0RTU0QUZFQkIwOUM0MTY2REM4Ci06MTAzMUQwMDBEMjlFNEY1MUNBQjIzQzZGMTc2QkZCNjVDM0M0OTQxQkEwCi06MTAzMUUwMDBFOEY4NUYxRTMwNjNCRDkxMUVDNzJEN0VEQzhGRkJCN0Y0Ci06MTAzMUYwMDA1QkRENjA4NzRFQzAzRDMyNUEzRUYxMTcxOUY1REQwOTlGCi06MTAzMjAwMDAzM0YxQkJBOEVBM0UyMTkxOEQwMDg5QzJFNEU5RjQyMUEzCi06MTAzMjEwMDAyNjRGQTVGRjkwMDlFQ0MzQzlBRkFENzg3RTU3QjU0NUUxCi06MTAzMjIwMDAyMjdFQjg0M0Q1NDMzMTRGQzdCREVFMzEyQkFFN0JDOUFCCi06MTAzMjMwMDAxNjk5NzhGMUJFOTJEQTA2RTdENkQ3M0QzMkNBMERFNzg1Ci06MTAzMjQwMDA5NjBCNzI4Mjk5NzA2RkFGRTdCNzUxRUVFREI0QjZBQUU0Ci06MTAzMjUwMDA4QkJEN0Y4MkVFQUZFMzIwMkY0OTJBQzBGMzgzQ0ZDQTE0Ci06MTAzMjYwMDA1QUFCNEQ5MDZGMjAxRjQ4MDIzOUZERUMyOTE5RTMyOTE0Ci06MTAzMjcwMDBDQjU3RkZBNUM4MDU3QUVEQTVCNkI3OEFFOTM4Qzc1Qjc1Ci06MTAzMjgwMDA2NTFDRjc5MzQ3QUREQjY0OTQ3NzRGMEE3Q0Q3QjU2RjI1Ci06MTAzMjkwMDBERDAxOEMzM0JDOTQ1QUJFMjI4M0YyQzFDN0Q1ODE3MTQzCi06MTAzMkEwMDBBODc3RDZCMUY4NzY3RkZDRDBGNTAyQkQ4MTVGMzU3QTdDCi06MTAzMkIwMDBBQ0NGNkVCMTczMzJBQTdDRDI0MDNGNTQ5OURENzg2RUE4Ci06MTAzMkMwMDA3QUJDQzU4Q0U3Nzk1NEZGRTNGOUZGRjFENjA0MTNEMzM4Ci06MTAzMkQwMDAzRjRGMjFERjJENTY1NDhCNzZEQ0M1MkRCMjg3RkQyRTU2Ci06MTAzMkUwMDA4NDZBODFGOTkyQkI2NDJGOTkwODY1OTZBRkUwNkY5NjY2Ci06MTAzMkYwMDBCQ0VDQkM0NjRGREY2QjU3NEZDNEZCQzVDNkZDMjkwMTc1Ci06MTAzMzAwMDAzRkE3MzJFNUQ1OUMwM0FENzg4RTlEQ0Y5MjA5NUQ4QUFCCi06MTAzMzEwMDAzNjdGNUNDNDU3NDgyQUVCNUY3Q0M3QTc3NkQ4RkQ3NzE5Ci06MTAzMzIwMDA0Q0E2RjBBNDg3N0Q3MkYwRjQwRTA3RUFDNzRGNERDRjhDCi06MTAzMzMwMDAxN0RENDBFMTI3NjVGRTBGMTU0QTk3MDZEOTdCNUYwNjJBCi06MTAzMzQwMDBFNEVGOTg1QUI2NEE3ODJFNzJFQzBFMzg4RkZGRjgwOURGCi06MTAzMzUwMDBCMzFCQzU5MEU3NkJBREY4RjVGMkExMDNFNTA3QzEwQzBGCi06MTAzMzYwMDBEOEY5NzIzMDU5NEE4NUFGRjIxMkNDREY5ODRGREE3ODJCCi06MTAzMzcwMDA3QzIwQzBDRUZGNjExMjE0M0ZBRTVBNzY4RTc1QUNEMDYxCi06MTAzMzgwMDA3MTJCRENDM0FEMzJEQ0RCM0RDNkVGMkQzQzk2QzFGQ0JFCi06MTAzMzkwMDAyMTYxOUYzRkUyRTUyQTEzOTM0RkIyODc3RDdGMTFGMkFGCi06MTAzM0EwMDA1RTg2NkJFQ0E5RDBBN0JCMzM4NkExREVFOEI1QUJBNEUzCi06MTAzM0IwMDAwREY1NEEzNUZGM0U3MEVEQTM1Njc2NEY0NzI1MkU5MDBBCi06MTAzM0MwMDBDN0U1ODRDQjFGQzgzMzdENkY4NUU1ODlGQjgwOUQ5NzVBCi06MTAzM0QwMDA5MTRFQjQ3MzFGOUIwM0Q1OUREOUYwRkVCNjhERjFGOEM1Ci06MTAzM0UwMDBCRUQ5MUQwMEY5RTU3NkMwNDYxNTA3RTg4RjY1ODRDRDg2Ci06MTAzM0YwMDA2RjU1QUIxNDA4NkFFMjE0RTJGNzM4MDhEODA1OERCRUExCi06MTAzNDAwMDBFOTZGMEZGNDc2NjAyOUI3Nzc0Qjg5MjFERkE3NTU2RkY1Ci06MTAzNDEwMDA5N0NBNjMxQ0I4QUUxNUFEM0NFRkI5Nzc1RTMyRjk4RTMyCi06MTAzNDIwMDBFMkFDREExQjc4NjkxNkNFNUI3MjA3QzJDQzYzMTlFOThECi06MTAzNDMwMDAwOUMyNzc4MDU3M0RDRUVFMDMxOUU3NjU1Q0M3NjBFN0E4Ci06MTAzNDQwMDA1OUVEOUUzMzBEQkUyN0RDM0JBRTYxREUwMkRGMDQyRTVDCi06MTAzNDUwMDAyODY5RTgyMEYwNUVFRDY3RjhBQzZFOTc5MDVFRkZDNUQ2Ci06MTAzNDYwMDBGRDJBNzFDRjRFRDA3RDE5Mjk5RjA1N0E2REQ5M0Q3NDAzCi06MTAzNDcwMDA1Rjk4RERDNzA3QkRGNjdBNjcwMEZEQTU0RjQ4QUJEMzVGCi06MTAzNDgwMDA0RUY5QkY3NkNCQ0UyQjI3QzE3QjBGQkY2RTAxRkVBRUIwCi06MTAzNDkwMDA4ODBGOEUzMEM1QzE0RkQyREM3ODQ3RTk0NTYxRUNCQjVGCi06MTAzNEEwMDBDMTlFN0Y1RkY4MjEzQ0NFODRFRjUxN0MyQ0REMjE2M0VGCi06MTAzNEIwMDA1RTgzQTYxRDNGREZGNzMzN0VGNjEzQ0MyM0FBNzk1MzM0Ci06MTAzNEMwMDA3NjM3RDFBNzM1RjA3MzNFMDVFNzNFNUY4MTlGRkZFRDZDCi06MTAzNEQwMDA3OTFCRkQ5ODlDQ0M4MUZEMThBMzdFRTlFN0M3MThFQzA5Ci06MTAzNEUwMDAyN0RDOUIwMDdCRDk5M0M0RjJDMEJGNTQzQ0IxRjFBODQ4Ci06MTAzNEYwMDA5NzBEN0EzN0E5MDBCRjNCMkFGNDZFMzVCNzdCNjI5Q0UzCi06MTAzNTAwMDBBNTYwRUY2OEY5QzMyRDRGM0IyMUZFRjA1RkY3M0M5REFFCi06MTAzNTEwMDA4Qzc5MTQ2MDVGRjJGQUVDQ0JGNTU1NkNCQ0VCOUY4REE3Ci06MTAzNTIwMDBDMkJDQTVDRkNBM0FDNzgxREY1N0YxRjM5NzlEREFFRjQ2Ci06MTAzNTMwMDA5QUFFNDhGNTk2NjQ4MjdFRTZGNjcwOTVCQzJEQ0IwNTcyCi06MTAzNTQwMDBGNkQwMTczRUFGQTJERkZFMkJEMjNBMUQ2NzU5QTc0MzM0Ci06MTAzNTUwMDBCRkNFQzVCMDRFQ0Q3RDkwMkFCRUNFMEY5QUQ5RkE4RTgxCi06MTAzNTYwMDBCNUIwRjUyRUU5Qjc0RTNGOUU4MzVDRkYwQkFCREI4RjBBCi06MTAzNTcwMDA3RTQ2MTBFREY4ODk5RDMyODFGQjY3QkQ3RTg2QzFFRUU3Ci06MTAzNTgwMDA5RjI2QUQ1QjAxMUZBQkQ2RkNGNTdEODVGMkM1RjI5MUEwCi06MTAzNTkwMDAxNDNGOTQwRjJBRUVCMkEyOUQ1RkZFNUI3NkZFRjlCMTU2Ci06MTAzNUEwMDA1NDkyODIwN0YwMkYwNDlENkJFOUYzMTVENDNGMDBGRjdFCi06MTAzNUIwMDBBMjZGMUVCRDc2N0YzOUUwQjFEN0VFMEYxMjdGNzUzQzRBCi06MTAzNUMwMDAwRTU1RDdGRTMyRkU1RTk0RTQ2MUY5OTA3NUUyM0IzMDExCi06MTAzNUQwMDBCQjBEREY4MTUxNDEwN0IwN0JGMjM2QTA1MzA2NTFEOUI0Ci06MTAzNUUwMDAzRTUxMUY0RkZERUYxMTVGMkM1QzgzRkNERjMzNTJGQjFDCi06MTAzNUYwMDBCRERFRkFFOEEwMTlGMjdEN0I3NjRBRTgxN0FEQkFBRUQ3Ci06MTAzNjAwMDBDNDU5NDIyMEJGOTVDNUMxMzY2NzMyRkIyNTc5M0M5ODI1Ci06MTAzNjEwMDBGNzYyQTU3NDhEQTZFM0REOTJBOUIyRTdBQThCRTU3NUUyCi06MTAzNjIwMDAzRjRDRjBCQjMzNjJCRUM2RTcxMDFGQjc4MUZEQjM5QkIyCi06MTAzNjMwMDBEMEZFMTlEN0JGM0I5M0Y5Q0JBQjY0MTNGQUQzQjUxNkMxCi06MTAzNjQwMDBFNjU3NzdGM0VGM0VEQ0M3RUJFRkNCNjRGRUY1QzM5OUFCCi06MTAzNjUwMDAyQzlFREYwRDdFMjQ5QzRGNUY2NEM1REZFQjIxNjQxQTM2Ci06MTAzNjYwMDBDNkM5MTVDMkY4NEYxMTc4NzMyOTlGRjdDQTM3RkFDQjJDCi06MTAzNjcwMDAzRDE5ODBBNzg1QTREMzBDRjQ5QzU1M0M0Nzg1N0IwMzVBCi06MTAzNjgwMDBFRjI3REJGMDNCNEFGNEFGMUNGQTk5Q0ZGQjM5Njg2NkIxCi06MTAzNjkwMDBGNzA0REU4NzMxRThCQUU2RjM3OEYyRkJGMDE5NTAzQTI2Ci06MTAzNkEwMDBGRUZCNjkxNkY0NjNGRENGNTlEMTRGQjgzOTlBQzVGQkJCCi06MTAzNkIwMDA0ODYyQUMwMjdDN0UwREQ3NTMwQjI2NUIzRDcwM0UzMERBCi06MTAzNkMwMDA3RkYyQ0RFNTAwNjk3RjdFNDJGMTU1NjFFQkQ5OTQ0RkUxCi06MTAzNkQwMDBDNzY5MzQzMTNCREYxODRGRjBCRTI0RDlEODU1MDhGOEZDCi06MTAzNkUwMDAzQjlGQkFDNTkwMjc0RjU3QkZFQkJCODQ4MUY4NDg3RkZCCi06MTAzNkYwMDA0RkExMTZFMjBBMTcxMEM2NjBDNTg4NUY1REI5RDZDMjMxCi06MTAzNzAwMDBFQTBGNjYxRTk5NzU0RjA2MjE3Rjg2NkMyNkIwMzM4MEJFCi06MTAzNzEwMDAyM0UwOEJDQTU4RENFN0NFODYzQ0ZFNzg4MDBBRjJEQkQ5Ci06MTAzNzIwMDA2NTBBRjE5QjE4NkNCNkUzNzc4ODU4NUVCRjM4MDdCOTE1Ci06MTAzNzMwMDBBMjk4MDQ2M0U5RkE4MkZCRjVGNzI4QUUwQTlBODJBM0ZECi06MTAzNzQwMDBFMDdDNDcwOTc2MDBGRTRDMzZENUVDQTJFMzk0OTc0QTFDCi06MTAzNzUwMDAwNTgwRjdEQTBEODM5QkVGRDFDQzhGNjdERDMzOTk5NjI3Ci06MTAzNzYwMDBFMTdCNTczMENGQjUxMkU2RjNDQ0E3NDIwRjdDQkE1MEJECi06MTAzNzcwMDAyMTJGQzgwNThDN0VDMDg3RjVGMUFBMUZEQkFENjY3Q0MyCi06MTAzNzgwMDAyRUVFNkYwOEJBRTREM0VFQjVGODlEQ0ZFNzQ3RkI2OTlDCi06MTAzNzkwMDA3NkMyRkI5NkYwNzE5M0NGMzJDNTNFOEZGOTY5MkJCOTkzCi06MTAzN0EwMDBEQ0FFMTQ3Q0Y3Qjg1RTVFNjNCMzU0RjYzRDM1RjAwN0NCCi06MTAzN0IwMDAyOURFRTY3MzE4ODlFRkVENTlBQzdGN0IxNkUzRkIxMDI5Ci06MTAzN0MwMDA5N0M3QzE4RUI3Q0E0QTgyQjhFRUU3QUM0ODQ3MzFFRTE4Ci06MTAzN0QwMDA2QzBFQTNCMzU4RkVCMjk4ODdFMERGNkFEMjgwRjkzNzQ3Ci06MTAzN0UwMDBENTNDMUU2M0EyOUEwNEYzNzQ1QjdGODFGOUZEQzYzQzRECi06MTAzN0YwMDAyMUVBMjA2MURFRDk4QTFEQzZFNzlBNzg4RUFDRDM0QkM4Ci06MTAzODAwMDAxOEU3OTQyQzNENEI2MDdFRDIwRkEyRENDMEVGRjMyRDY1Ci06MTAzODEwMDA2RDE4MEYzMEI2MzNCNzRBMjhFN0U2NjZFQTRGNDlGQzIxCi06MTAzODIwMDA3QzhCOTZBRDJEMTJGRUJFQzNGQzhDOUVCMUY4QkQ3MjkyCi06MTAzODMwMDBFRTU3NTc3M0JBNTJFRDNEMDNFRTAxNTU4MzNGODVFN0NFCi06MTAzODQwMDA1RkZDM0I1MTVCOTgxRkE5NzBGRjc3NzE4QkRFQ0Y5OEFGCi06MTAzODUwMDBCRjUxRTM2NzMyQTBCQjU3NkYzNUU0ODc5QkI5QkY3MTk3Ci06MTAzODYwMDBDNEQyMzMxNkY0QkRGMTlFRkQxMTEzOUJCRjNGOTk2MDg2Ci06MTAzODcwMDA3RUE0Qjg2N0FGNzA3RjUyRjA1MzdBOTY1OTc3M0UyNjkwCi06MTAzODgwMDBFRTczNTY4MDlFNjJERjNCMzBFNDUzRDlGMUJCMkIxNUJCCi06MTAzODkwMDAxMkZGNUUyNThGMkI5RUE0RkUyNjdFNTdFNjcwMTREQTVCCi06MTAzOEEwMDAyRDExNjdFQzJFNzFGODREQjFGMDM5NEI1NjVFMTA3QjNGCi06MTAzOEIwMDBGRDJDRjAzMzJCOUMxNjA1RTAxOTUzMTc4RTczODNEQzE3Ci06MTAzOEMwMDBFOUM4Q0VFRThCRTM2RTJFMTlCRjA1RjI4NkU2NkNDRDBECi06MTAzOEQwMDA5RDZEQ0JDNDUzMEU3RTFGNjlFQzZCOTBDRjdCRjkzNzg3Ci06MTAzOEUwMDA3NEZFNTgxRTM3REI0M0Y3NDdERDJGRjYyQ0I0NTExNTE1Ci06MTAzOEYwMDBCRDJDRUJGQ0Q5MEFCNUU3RERGN0Y2NkM4NUYyREFBQzQ2Ci06MTAzOTAwMDA2MjU2QkVCRDI3MEJCRTIxQkM3NkVCNjQ1NjZFMTRGRDFECi06MTAzOTEwMDA0RDlFMEQ3OUYwREQwRkIwRjI5NUI0REUwRjdFMkVCRjE3Ci06MTAzOTIwMDAwNzU0NzE4MTg0N0E3NjJEQjczRjIyN0U1NDYxN0E5RTQ2Ci06MTAzOTMwMDBDMTI5RUM3NzNFQ0VENjZFNDM1NkY5REFDQzI0RjhERUI4Ci06MTAzOTQwMDBFNzcxRkMzRDgxMTZENUIzMTZFQ0Y1RkEwQzZGNjUxNkUwCi06MTAzOTUwMDBFQ0EzRTY0ODdFMEJEQzhCN0YzMzMwOTJEQkFGQjBCRjRECi06MTAzOTYwMDA3QkIxMzY5M0U1MDk2RjFDNUE4RUVGMEI3Q0QxN0U1NkU2Ci06MTAzOTcwMDA2NDE1OUU3QjNGRjFGREZCQjlGNjlGOTlDRjkxQTE2QzM5Ci06MTAzOTgwMDA3RDlBN0VENkZEMzNGRDRDNTFGNUYzMTFGRTk5RjhDRUFDCi06MTAzOTkwMDBEQ0JFNkNDRjE2RTg3N0U1NEQ2QzNGNEM4RURCNzVGN0RGCi06MTAzOUEwMDBGRjRGMzUzQzNCMTJFQ0ZFQTlDN0FEMDlDMDg3MkI5RkVBCi06MTAzOUIwMDBGQzVENTYzNUY4N0ZEQzFGRkFBNEUzNkQwQkU0N0RENzgwCi06MTAzOUMwMDA4NUQ4Nzc3MUVBNDNFQzNCMzk3NUJCM0EyQzMzRjIyMDRBCi06MTAzOUQwMDA4RkI1QzMzMjU1MzNCRkRBQkVERkI5NTIyRUQzRjgzMUJCCi06MTAzOUUwMDAzRkNGMTJGOURBRUM3NzFENTczRUY5MzdGQzlFRTA0QURCCi06MTAzOUYwMDA1M0RCODc5MEU3NEIyRTYwNzEzNEUzM0EzN0YxRjdERTAzCi06MTAzQTAwMDA4NzczRkYzMEYxODI1RjcwRkRGQjU1OEU2NzNCQUM3M0FGCi06MTAzQTEwMDA2MzE2QzFGNjcyODRFRjc2N0RDQUZCQUI4ODY2N0FCQzBBCi06MTAzQTIwMDBBQUM4NjE1MzI5QkUwQkRGRjQzNjQxREU2OUY1QzNEOTVDCi06MTAzQTMwMDAwNTMyOURDN0Y2OEMyOThGMDM3RjQ0OEU2RkY2QjBGODUwCi06MTAzQTQwMDA2NjNCOEI2RjU2QzQ3NzVFNDc4RDE0Rjk2ODZCQzU5REQ2Ci06MTAzQTUwMDAzNkJBQ0ZCQkY0N0VEMjdCREYwRkUyODZBNTU2MjEzRjdDCi06MTAzQTYwMDBEN0NFOUU5NkMxRTI2NTUwN0UyNTZCRDU5RDIwM0ZGQjRCCi06MTAzQTcwMDBGOEVGQjMyRDk4MzgzNjFBRTRCQzJCM0JDNkU0QTJGMjFCCi06MTAzQTgwMDBGRjc0N0FFNTQ3MzA4RjA1MTMyRjlBMDFDRjRCQUM4RTI4Ci06MTAzQTkwMDA5MTk1MkMzRThFRkNGMTc0N0FGOUYzNTAwRkVEMjFFRUU2Ci06MTAzQUEwMDBFMUI1MDQ5M0FFQTJFQkYwQkUyMjYzREVCNDc3NUM4QzhBCi06MTAzQUIwMDAzN0RDM0Q5NTIwQjc1NzFGNjUzMTNGNkQ5Rjg5Q0VCM0U5Ci06MTAzQUMwMDBBMDZGMUU2MjdDRUE5ODVERDcwOTcxQUIwRDY5RjlFMEMxCi06MTAzQUQwMDA0N0JCMzI0QTNFQ0M0QUVBMUJERjk1RTE3RDAzQ0E2MjBFCi06MTAzQUUwMDA3Q0JBREM3MUYwN0NCMEYzRThFNEY0RjgxMEU4NDZGQjUzCi06MTAzQUYwMDAyOTlGMkNDMzk3MTI3QUY1RkE2NUQzNjI3NEU1Q0I2N0Q4Ci06MTAzQjAwMDAyNjEwOEYzNjZFN0E3OUJBQUUzQ0FGMjI0N0Q3RkU5QTJFCi06MTAzQjEwMDAyNTYzNzRGNTY1RDZDRTA5MERFN0UwRUZENzNCMUVDNUVBCi06MTAzQjIwMDBGQ0RFQzNFREE3REY5QTBGN0VFQzBFRDkyREQxRjUyQzZDCi06MTAzQjMwMDA3RkVFOTFCNzIwRkZGQTI0RkMwNDQ5MDE4QjhCQjFFRjkzCi06MTAzQjQwMDAzNUYyRjMxOEM1QTNFOENFNjNGNjNGNkQwMUJGNUQxM0YwCi06MTAzQjUwMDBFNzM3RENDQjNCODA3MTdDRTM3OThDQzgxN0ZGNjdDRkZDCi06MTAzQjYwMDA2MzJDNDNGOUJFQjhGN0Y3M0MzRjdEODlBRThDNENERDQyCi06MTAzQjcwMDBERDgxRjQ2OURBQ0ZGMjk4OUJBOERGMDJERjEzRkJFMTY1Ci06MTAzQjgwMDAyRTZCMDBCRUUxRkVEOUVGOEU1QTU0Q0RCOTRDN0RBODA0Ci06MTAzQjkwMDAxMTdGNTc3N0VBRUVBMzc4NkVGM0FCMkNBNkI3RUJEQTdBCi06MTAzQkEwMDBCRkIwQzAzREE5MUZCNkFGNDY3OTlFNDFGNTU3MkNFNTgxCi06MTAzQkIwMDA5QkNFMEUzMjc2MTdDNDkzQjMxRDk4ODdCM0IyRjkxMjE5Ci06MTAzQkMwMDA4QzUzQzc4NkU2MjNBQzZEQkQwNEZCNUIxNTlBOEJFNTcxCi06MTAzQkQwMDAzQUZFN0JCRUZCQTIzQjY3ODAxRERFRjc0QzFDRUUwNzY2Ci06MTAzQkUwMDA1RjkzODMyMzFGODI3RUFDMEVENDBGNjVFOTBCMzY4MDcyCi06MTAzQkYwMDA5RkIwMkZEQTlGNzcyRDFEQUZFQzNGN0Y4ODc5RTg3NTU2Ci06MTAzQzAwMDBCQjI0OEM5Qjk2Qzk2NDlGMDRGOUY3QTEyOEVDQUY0Q0E4Ci06MTAzQzEwMDBGRUYzODRENUY0RjlBNTUzOTk1RDJEMDMxRjg3RDZDQjA4Ci06MTAzQzIwMDA0NThFNUJGMTdCRDIxMTdFMjdBRDYwMjhEMzJCRTYyRTJCCi06MTAzQzMwMDAzNkVGRTlBMTM5RDg5RkE4MkYxRTNBNENGN0REMTg3MzRCCi06MTAzQzQwMDBEMjBFNjVCMUJENkYzREU2MkUwOUUxOEY0MjYzMTBENkZECi06MTAzQzUwMDBFRjlBQTM0MEZFRjkyQkI5QkY0ODA0M0NEMUY2Rjg3RDlBCi06MTAzQzYwMDBCMEZFRkE3ODYyMkMwOUEzQjcwNEI0NzIzRDNDMUZGNDhECi06MTAzQzcwMDAzMDlDRDM2NzdCNjYwRDREODJERjIzRUM1MjZDQTA0N0VFCi06MTAzQzgwMDBFRDM2MTdGODJGQjM4QUYzRDU2QUNEQkFFNEU3QUZDNjlECi06MTAzQzkwMDA3QjEwRDZDNDFFMzNGODAzRjMyOUQ0RUFFRDQ1MTFFQ0FBCi06MTAzQ0EwMDBDQ0U1NDM0RERDN0Y2RUM0RjUwQTdCNDQ4RUZGMThDRjE0Ci06MTAzQ0IwMDBCNTE3RjJGODgwOTBBNzkyQTEyNjFENUUzQTI1MjYxNzI3Ci06MTAzQ0MwMDBGRURGQjI3MzgxRDI2QzZGMzVDQ0I3QjM4NENDN0IwQTg0Ci06MTAzQ0QwMDBGNTY4NjcxNkRDNDdGRkJFRTY0RkU5NkIwM0ZBM0I5NUQ0Ci06MTAzQ0UwMDAyRTAyNzE4Qzk1QkRGMzY3RjI3Q0I2Rjk1RkNERTdGRkNDCi06MTAzQ0YwMDA5QTRDN0NDMDE3QUY1RDdDNzFBNzg3Q0VBQkUzQzZGMTUxCi06MTAzRDAwMDBFM0MxMkU4OEYxRDYwRDY1Rjk4N0M0RDVGMzBERTYxQjA2Ci06MTAzRDEwMDBFRTg5NTEyMUFFNUYwNjY3MUUxM0ZBRkM3OUM4NDc4NDBECi06MTAzRDIwMDBGODYxRkQxRUVCNzZGODQwNkFCRDkzRUVFRkVEOTAxNzVCCi06MTAzRDMwMDAxODE1MDRCRUVERjg2Mzk0MDJGNjYzRUM3MEVGQkFBMUI3Ci06MTAzRDQwMDA5ODJGMzg2QTFBN0NDN0M3RDM2RTU1MDhGQTQxOUU5RkQwCi06MTAzRDUwMDBDMkYzNDhGMzNEOUJGRTEyRjI2OEU0MzM2RjMzOTMzRkE2Ci06MTAzRDYwMDAyRjk3QzM0QUNFQjc4QkI5MUM1NjJBRUU1ODM4OEY1OUI1Ci06MTAzRDcwMDA3NDQwQzY3QjkxOEJENzQ5NjM3NzQxN0M0MDc1RTAzREE5Ci06MTAzRDgwMDA3RDIxODc0MkRFQ0NDMDk3RTM4MTNGMTk1RkQ2ODZFMjcyCi06MTAzRDkwMDBCODdDNjdGMzdFOTkxQzk0QzkyQ0RGQUU2QzRDMUNFRThBCi06MTAzREEwMDA5RkVCNDIwOUQ4NEVDOEFCOTBEM0NERDlERUM3NjFEREI5Ci06MTAzREIwMDA2NTRENTRCRUU5MzhERTBENjkxMzQwNUVGQUY4QzRFMjgxCi06MTAzREMwMDAwMjdFQTI3QzkyNUFBREUxODNBNjhFQUYxNEUwMTNGMzdCCi06MTAzREQwMDA2NDA5RjlDNDRBRTE1NDBEMUY5NUY3RkEyN0FFMTlDOUQxCi06MTAzREUwMDA3NDFFQjMzNjY2RTNGNzk0NDVGRENFQTFDMjRGMTkxQzhECi06MTAzREYwMDBCRjZGRTVGQ0I1RDgxRTFDMDE3RUFEQjkyMUNBMERERjMxCi06MTAzRTAwMDA5MTNGOTlBOEEyMUU1QjczOEI4NDNGNEVCOEM2NUMzRTVGCi06MTAzRTEwMDAxNUZDOEIzNTBGNDgxOERGMDNCRjAzRjQ0RkQxQTEwNjAzCi06MTAzRTIwMDA4QkY2MUNFNEVBRDAzODNDQUY5RTFCMUE4RTcwN0I4NjYyCi06MTAzRTMwMDBGNzhGODA4N0NBRDA5NTFDOEZFM0MyOUVGNzdERDk3MDFCCi06MTAzRTQwMDAzM0M2RDVCRTBDNThEREVDM0I2M0ZBRjg1REExQzc4REQ3Ci06MTAzRTUwMDBFNzdGRTYwMzY2QjI0RDg1Qjg5QjU3QzZGM0JENENFMkRCCi06MTAzRTYwMDBCQTVCNjJGMTNCODhFNzg5Rjg5QjM4QTcxMzcxMzgyQjVFCi06MTAzRTcwMDA3QzBGNTc2MzQ3NEYyQkFENTlCMDBGRTkxNzhGMkI2MTVDCi06MTAzRTgwMDA3NkZGRDMxRDY2NzY2RkFCRTNDRjQ1MjY1QUZGNzFCNjNBCi06MTAzRTkwMDAwN0UzNzIyRkE1N0FERjg2RjVBQ0I4MkNGMEE0OTk5NkNCCi06MTAzRUEwMDA1N0RFRkVCNDEzRTJFNTAyOUY2RDRBNzAwNEVDOTdEQTI4Ci06MTAzRUIwMDAyODFFMjEzRUQ4RDYyMjk3MDY5OEJGMTMzMzQ3OTM1RjFBCi06MTAzRUMwMDAxMTg5QUY1Nzg0NzIxMDNGQzJERTA4RkRGREVDRkE1NDMxCi06MTAzRUQwMDBEQzk0MEEzRDdFMzYzQjI0Rjg3QjE1OTc4MzU1MjAwN0ZBCi06MTAzRUUwMDA0NDZCNkZFNjk0QzNFRjlBOTE1QzA5RUZCOUY2RDkxQjY2Ci06MTAzRUYwMDAyNjBGNDI0RjUzN0U0N0I5MjlDQkM5QzRCOEJBRDBEQjhECi06MTAzRjAwMDA0NjdCQjQ1NzZFQkJGQjAyQjBCQkFBMzc0NkE1RUI5QjAyCi06MTAzRjEwMDBGMjlCQkYzRkZEMEVBREFBN0RFQUIxNjk0MEE3OTIzMTg5Ci06MTAzRjIwMDAxMjgxNzM0Q0EzOUVGQzFGMkI5NzA4OUQwMDgwMDAwMEZDCi06MTAzRjMwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCQjU1QkI0Ci06MTAzRjQwMDAwQjc4NTRENUI1NUU2N0NFOUM5OTQ5MzIyRjkyMTBDMjNBCi06MTAzRjUwMDAyM0YxQ0NFNDQxQTgwMTg3NDcyNDNDRkMzQzEwMDgyMDE1Ci06MTAzRjYwMDAwNjI3RjgxNTUxNTM5OTQ0MDRDNEJDNDBCOUE2NDJCRjcyCi06MTAzRjcwMDAzOTIxMDkwMkE1MzY1NEFCRDRBMjlENTBCMEQ0QUE4REU0Ci06MTAzRjgwMDA4MDM1QUQzQzA2NDExQThBRDU2OUI1QjdGNDE2RTgyOEU0Ci06MTAzRjkwMDA1Q0RFNjBDMDVBRjExNkU1QUVCNUY3Mzk5OTM5OTMwNDg1Ci06MTAzRkEwMDBCNUZEM0E3RTdFOUI3NUY2REE3QkFGQkRENkJGRDY1RTk5Ci06MTAzRkIwMDA2QjlGOTM1OUM1MjNFNTA1ODUwMEQ3RTg3NzJCODBGOERCCi06MTAzRkMwMDBFNjY3OTIzQzFDQzBCQUEyMUMxNDNCQzBCREQ4OTZEODcwCi06MTAzRkQwMDA2M0ZEMTI4MEQyOEUzNDQwRDQzQ0RCMTE3QkVFOTY0REQzCi06MTAzRkUwMDAwMEZERTk3OTIzNDAxMUMwMkM5REVGQzQzMjgwMEM4MDg0Ci06MTAzRkYwMDBGQkRDQzA3RjBEQzgzNDEwRTA4QjFCMzhGRjc0MkJDQzZBCi06MTA0MDAwMDBGM0UzRkE2MDhFNjRDN0NGMzdERDMzRDkyQjYzRkY1MEZCCi06MTA0MDEwMDA1OUUwRjNBRDg4OUE2REU5Qzg2N0I3QjlCNzc4OTBGRUYzCi06MTA0MDIwMDAxN0U1MkUxM0MxMjZBNDAyMzhDRDUxNDgyREE0Rjk0RDExCi06MTA0MDMwMDA2QzdFMDA5NUM5RjM2NTcyRjdEN0Y2RjlBRTA4MERFRDAxCi06MTA0MDQwMDAzOEZFREQ1QjZGOEQyODI4RDdERUU1QTM0NzhCNzI2Q0M5Ci06MTA0MDUwMDBCREYxQjI4NUYxOTVBNUUxRDgzMTAwNURCQkFDQTE0REI0Ci06MTA0MDYwMDAyODM3RTA3QzAyRjI3RkI0NkI1ODY4MkQ2RUVEMTg3NDJGCi06MTA0MDcwMDA1RDA1QTRENTlEMjkzMkVEQUI2RTc3MEFFM0FGNEI3NjkzCi06MTA0MDgwMDA4NTA0RUNBRjczNzZFNUZCNTE5RTkyM0Q0OTYxMTg4MTQyCi06MTA0MDkwMDBFQkVDNDkzMjAzQUVGQjU5Q0VGREUzRTUyMjdBM0U3NEU4Ci06MTA0MEEwMDA4QUUwNDRBMTc3NUFDRDgwN0MyQkIzOTUwOUE0QjdCRTkyCi06MTA0MEIwMDBFNEQ3RTU0QjZDRjVGRDk3OTYwQkFBQ0IwNTMwQjNDNDVFCi06MTA0MEMwMDBBMTlBQjA1RDdDMjUwNzYwMzRDMDQzQUI2N0IwRjZGNUJDCi06MTA0MEQwMDA2MDI2MkExOTYwRUE5NTcyMDBEQzVCQ0Q5NTNCRDlGMzI2Ci06MTA0MEUwMDBEQTJCMjk4QzlFRjlERDQ4MjlFRDA3NUUxNzYwMEJDQTkzCi06MTA0MEYwMDA1RjM2Rjg1QjJCMDFFNUVCNEM4NkUxM0I3MDVGOURERUE0Ci06MTA0MTAwMDAyQzVGMTM3NjU3QjdDRTYwRkM2NUJGOUMzNjlERjY1NTg1Ci06MTA0MTEwMDBCQjAzOTk2OTVDODExMENBMjMzRDlEQjA5QjQ4RkU4NzEzCi06MTA0MTIwMDA2RDVDRkM4RkVCRkYzQzQ2QzZGMTFGOEY3MThDMDQ2NDA1Ci06MTA0MTMwMDBERDI3QjYzRjM5NUU2MEY2RUMyNDdCNEVGRUM1M0ZCNzA3Ci06MTA0MTQwMDBGRjBGRjI0OTU3NDQ1MDUwMUVFQjE1ODFCNTdGOTQwMzgxCi06MTA0MTUwMDBENUE0MjdFNDAzNDBCRUVBNkQwM0M3MDRFQzVGMDU0RjE2Ci06MTA0MTYwMDBCRjk2NjRDNEEzNTQ3RDQ5MjIzQzU5QjEyRDg5RUI5RjZECi06MTA0MTcwMDBBN0UxMjQ1MThGNEJCQUYxRjRENUZDNjA5RUM2RkY2NUQwCi06MTA0MTgwMDA3ODZBRkVDRkUzQTlCOTBGM0NCNUZDM0I3OEJBOEUxRDI3Ci06MTA0MTkwMDA3REUwODlFMTZDRTYyMThFMEZDODcxRjhCNjAwQzMwQjkzCi06MTA0MUEwMDA5M0JCRDM5MjE1NkE0MkJFN0JDOUFFODRBRjZCNTA0RkFFCi06MTA0MUIwMDBGQTlDNDdGNjREOEJFMUY1OTc5RUMwQ0Y0OTRFRERDRTc4Ci06MTA0MUMwMDA5REM5NkFFMTkyQzJBRjYyRTdCQjgxRTJDNkJERTlGNTczCi06MTA0MUQwMDBBMEUwRjM3OUQ4QzZDNzBEMkJEOUFGQjBFN0ZFNUVGOUUyCi06MTA0MUUwMDA5QUYxNkVFMzU3QjRGMzFFQjIzM0UxQzc4RDc2MUNDMzY4Ci06MTA0MUYwMDBFQzI3OTM1RDEzRUQ0RTc2MjVCQkQ3RURCNjZFQkE5RUQ4Ci06MTA0MjAwMDA1RDg3RTcwNjdFNDc3QTQ5QjQyQkI4OTM0RDcwNzNCQzNGCi06MTA0MjEwMDA1REFDNzcxMjZFM0UwRTlCODFGQ0FCMkZCQjRBMUJCODg4Ci06MTA0MjIwMDBERTc1QkEyNTZDOUUxRTYyRTcwMUE0OTUwRjY3NzgzOThBCi06MTA0MjMwMDBGNEVGRTBBNUFDQTRGREVGQjY3RTAwNjdFNDI1N0UzMzg1Ci06MTA0MjQwMDBGMkNGMjlDNkFFNDFENEJGQjQ1NTMxNTM3Q0MxN0Y4RTY1Ci06MTA0MjUwMDA2NzMzMkE2MDYzRkFENEU4ODcyMzUzNTA4RTk5NEY3NkU4Ci06MTA0MjYwMDBGN0FCRDQzRjc1QTI0QjFCMEYwQTZFQUI5QkZGQjQ1QzQwCi06MTA0MjcwMDAxRjU5QzdFNDZFRTVGQTBFNDRDREZFRTE3MUY0MThBNEFGCi06MTA0MjgwMDAxRDcxNzQ3MTAyQkQ5MUYzRDMzOUUyNjZGMzg0RDg3MzYyCi06MTA0MjkwMDBDMjlGMzA4QTY4N0QzRUNEMEZBMEFCQjQxRkRBNkZENkM3Ci06MTA0MkEwMDAwRUMxQkQxNkVEN0RDRkM0OEYyQzY0OUZCMjkyRTg4MTA0Ci06MTA0MkIwMDBDMUI4REZBQkYyNjM3RTdCMTIzRUE3Mzg4OEYyREEzREVECi06MTA0MkMwMDAyQjVCNTVCMzM2MUVGNTU4QURBOUQxREEyRTI4MjJEQTZDCi06MTA0MkQwMDBBOUJBNTgwODc5M0QzREY1NjhGN0U4QjhENEQ3QzVBMzIxCi06MTA0MkUwMDBENTM4MUUyQzYzQkVERTc4QzIwOTFCRUY2NUUzQzNENjRBCi06MTA0MkYwMDBBRkIxRkU1RDEzNDEwOUY1MTIyNzA3NzlCNDM4NzkxNTdFCi06MTA0MzAwMDA2OTdEN0VENEREOURCOEJGNTAyRkZFRTZENUU2OEQ5ODQxCi06MTA0MzEwMDA0QzM1ODBGQUZBODZFN0U5NTY1QjE2REExNzM4M0UwQTFBCi06MTA0MzIwMDAzRDNGRjRBQjFDODdBMDI0RUNGNzdBRjJCQTNEQzZGMzBDCi06MTA0MzMwMDA5RjdFQjI3MTdDRjg3QUZBQ0FFODMxNUVDM0M3MjIyMzQ1Ci06MTA0MzQwMDA1RTVDNjZGRkZFOEY1MTBFNTdCQUUwNTZEMUZFQjVGRTk5Ci06MTA0MzUwMDBBNDc1RTAyMkZCRUJGODBFRjk5NTIxQjhCRjI0RThDNjVFCi06MTA0MzYwMDBBQjExREY2REZFMjlBODk3NUFEMEZCN0ZEQTRBRjFDQTVDCi06MTA0MzcwMDA2RkVBRTZFNzc4REYyOTc0OEYyRjQwRkNCODgwOEYyRjMzCi06MTA0MzgwMDBGNTZDNkE1NTBCOTkzRDU4M0ZBM0NERDdDMTdCN0IwMjk1Ci06MTA0MzkwMDAzRDMxQzEzRjM0N0MzM0ZGQTRCODhERkFDOUVCMjU2RUEzCi06MTA0M0EwMDBEQ0FGRDlFRDgyMDA3MzI5RUU0NTI2RjM3QzJGRTJFNUUwCi06MTA0M0IwMDA2RDkzODdFNzc3MEY2OTdBN0M1ODZCMjNDOTcxN0ExOEY4Ci06MTA0M0MwMDAxMkIzMzNGRUMyNTA2MEQ4MzdEM0QzRERFOURBQkVENTlECi06MTA0M0QwMDBCREZFREI3MTVGOTE1NDE4MkUyMDRFQkVEM0I2QUJCNTM3Ci06MTA0M0UwMDBGOTk2RDhGODYwREI1RTg2OTNFRUY5RDQzRDExM0FERjlBCi06MTA0M0YwMDBFRkQ2RjRENEQ0MTY4RTY4MzgxMkM4RUY2QTE4MjAxMDlECi06MTA0NDAwMDAwNzNCMDQ1NUM0N0RENjEwMEU3QUQ5Njc1OTRGQkY1MTZBCi06MTA0NDEwMDAxM0M2MkJEMjc1QzZERkQ5NzNCQzkyMzAxRUE0RjRBRjdECi06MTA0NDIwMDAzMzVFQjNEM0VEMDk3NjlDOUU2MEM3MjkwOTc0ODU0RTJGCi06MTA0NDMwMDA4NzBDRjE0QzhGNzM1NTFERUI1QjMyNTA4RTg3QjYwQTlCCi06MTA0NDQwMDA3NDRDNTBCQ0I2MDgyMzAxMzY3ODBFRjlFREUzMDhBRjgyCi06MTA0NDUwMDBCMjM0MTg2M0ZFNDZDRkVGMjNCNjYxMDBFNTE0Q0YxOERGCi06MTA0NDYwMDA3RURGNjk1NTcyNTE0RUYyNzc0NkJGRUI1NzZFMjJGQ0U0Ci06MTA0NDcwMDBENEI3NjQyMkZGMjY0RkE0RDU4NkFDRjczNEFGOTcyODczCi06MTA0NDgwMDBBNzc5QzFGM0M3NTYzM0NFN0JGNzk4NUYxRUEwRjlDQzRFCi06MTA0NDkwMDBDMkZCOTFEQjNERDdDMTZCNkJDMjNFMzYyNkQwNkEwMkIwCi06MTA0NEEwMDBGRjUzNUYxMkRGOUIxM0M2QUY0OEU4NUY5NzQwNkY0ODJBCi06MTA0NEIwMDBBMDU3MUJDNzU3Q0UxNzk4OUY1NEEyRkQ0ODcxNUZFNkJGCi06MTA0NEMwMDAzNzNCM0REREY5NDJGNzc5MjZEODU5OUU2NEMwRkRDQ0QzCi06MTA0NEQwMDAyNjRFMUZGMDdDRTg1RjZEOEZBM0RCOEVGQkM5REY3NTc2Ci06MTA0NEUwMDAxQzRCQzA3RkY3QTY4MzRBRTc4N0Q0NDczQ0RCRDExNzM0Ci06MTA0NEYwMDA4RTBBMTJDRjNCREVGRjM3RkFFNzQwQ0EzQkMxNzAyRTZGCi06MTA0NTAwMDBFRjEzOERGNDVFNTFGN0I3NEI5MTQ3MEFFOUExNEU3NzRGCi06MTA0NTEwMDBGOTAzNDhDRjdDQzZCODJGQUMwQkI1RkU4QkZFMjlFODVCCi06MTA0NTIwMDBGRjMzQkZBRkY3NUZGNDUzRENEM0Y3QTlGMzk3N0U3RTc5Ci06MTA0NTMwMDA0REE0RjU4RUI0NURGMDZGQzZGRThBQzlFMUJDN0E5NEQ1Ci06MTA0NTQwMDBCMzIyOTVCNzc4Q0U4ODc0OEVENUQ5QjgzRjk1RUUxMjQwCi06MTA0NTUwMDBGRDc0Q0U1NDI0ODdGMzk2MTZDNkVEMTNEQUYzNjk5RkUzCi06MTA0NTYwMDA3Qjk3OEJDQzNFNkExM0FGNDdBQUMwNjcwMTJDODVGNkI4Ci06MTA0NTcwMDBCQTVDMEQyRjIwRkZCRUU1NjIwMzlENkJDNzFBRDIzMkQ1Ci06MTA0NTgwMDBBODlFMThFRUU1NzlEQjNFRDcwRDE5MEYyMEJEMzc2NUUzCi06MTA0NTkwMDA5RTQ1NDZCRUJEOEY0RjY1RUQ5QkEyQjJBQTBCNzFGQzM2Ci06MTA0NUEwMDA3RjlFQ0ZGREY2NjFENEVGNjJGQUY5NDdEQjE1N0YyM0RBCi06MTA0NUIwMDBGQUM1NjcxRTk5RTkzMzkwRUFDRUU4QTA3Qzc1QUQwNDkwCi06MTA0NUMwMDA1QjY0OTJDN0Y3M0NDM0NERjdBQzIzRDdBMjFDOTU4RDkzCi06MTA0NUQwMDAzNzY2NTBGRTU2RjVDM0YyRDI4MUM4NTdENTIyRjkwNDhBCi06MTA0NUUwMDBDNjA3MjM0OEVFQzBEQUE5MTZFQTlGREZBQ0I1RUEzNDY1Ci06MTA0NUYwMDBENkVFRjk2MkZCQTExMUM4REZCNTQ2RjQ2RDQyRTZEREU3Ci06MTA0NjAwMDA1N0JDQ0UyQTk0RUI3ODEyOEZDMzFGOUVDRjc1OTI5QzE1Ci06MTA0NjEwMDBFQkJEMDFDOThCNzI1NDNBMURDOTAyMUQxRTZFRDkzOUZBCi06MTA0NjIwMDAxQkU3N0QyMjQ3QjE3ODhCNjJGQzdCQkUxMEU3NTFCRTUxCi06MTA0NjMwMDBGOUM2RjlBQTBDQjI5RkRCQ0JGMUJBRkI0QTU1NDY1NTM1Ci06MTA0NjQwMDBEQzc5QkZFMDgyOTlFOTc5OEY0NTdFODRGMkNCM0RDOTYwCi06MTA0NjUwMDA1OTgyMkEzMDNEQTc5NUEzQkZDQ0Q3RjI2QkM0NEJDMzc4Ci06MTA0NjYwMDBGNjVFQ0VGRENGM0QyMkQzQ0IwOTZCMDMxQzQ3MTBFRjg2Ci06MTA0NjcwMDBGRDZFRkY4OTI0QTczRUFFRThGRDQwOTM4M0YwM0M0NEU1Ci06MTA0NjgwMDAxRTE1OUY0N0Y3Q0I5RTNDODRGNjExQzM1OURBMUYwOENECi06MTA0NjkwMDAzNzJDOEY0NjdBQThEN0JENUU0NTVDQzEzRUNDRkY0OTFBCi06MTA0NkEwMDA4RTc0QTU5NENFMDE1ODgxMEMxOEM3MjBCMzNEM0ZGRUVGCi06MTA0NkIwMDAzRTIyOTZBN0FFRDRFMjAxRTczQkFBM0E1OEREN0FGNDRGCi06MTA0NkMwMDBBNUE0MTBENTMzNDdENUJGM0FDMDFFQ0ZDRkZENjRBMUY2Ci06MTA0NkQwMDBEM0ExRDI2MTdDQ0FFMTMwOTM1RThGOTk4MzI3QkY4RENECi06MTA0NkUwMDBFMzE2M0MyN0IxMzhCQUUwQjlGRTJCQkEyODFFQTAzRDJDCi06MTA0NkYwMDBGM0EwRTdCQUFBNTc2MkYzRjRFOTI3RTAyOTM3Rjg4OTZCCi06MTA0NzAwMDAyQTk3MkJGNkJFRkQ2NDkyNTcyRUJGOUU5RjJDRDRGMkEzCi06MTA0NzEwMDBGNkQyRTcyNDNGRTE3QzYxOTFDMzBDMThBRjI3M0ZGNzQ1Ci06MTA0NzIwMDBENjE2QzJFM0MyMjU0OUEzQUMyOEY4QzJFN0FDQ0NCRTdBCi06MTA0NzMwMDA1MTg3NDM3NTYzN0ZDMEU5MzBGN0EzQjhFRUU1NzEyNDc0Ci06MTA0NzQwMDBEQTk4QzRFQTE0MzFDM0MyRTI5RUI4QUE0ODI2RkQ5NDlFCi06MTA0NzUwMDA4ODYwQjZFMUI5MjIzQTdEQjI5RkQzQ0Q2RUFDREI1QTA4Ci06MTA0NzYwMDAxQ0M1MzJEOUY3M0I1RUVFMEZEREZEQUVCOUI3MDk1ODc3Ci06MTA0NzcwMDBENzVDQzY3REE0RTFCODMzMEQ0RjNFM0QxNkU1M0IwQjNCCi06MTA0NzgwMDBBMTM5NjM1MUVGOTdDOUQwQjhDRUU1MUQ2MjQ4QTU3MzMyCi06MTA0NzkwMDBDMkFDOThDQjMwRUUyRDAyRUVFRjM1MDdCNzVCMjZFMUM5Ci06MTA0N0EwMDAzRjE3RDUyRkJDOURFQUEzMDc0M0QyODc1MUFERjZCOTc5Ci06MTA0N0IwMDA4NkZGN0YwMjZGNUIyOEJGN0Q2OEFCRjEzOTdBOEM4NUZECi06MTA0N0MwMDBGQ0FBQTZEREY4QkMwRUQ2NUQxMjQ3NTA2QkZFMzA1QTJGCi06MTA0N0QwMDBBMDNEQzc3NTFCOEVGQzY1RjhGRTM4QkU1QUFGMjNGREExCi06MTA0N0UwMDAyNDk2RTAzMDBBNDZBMTY2NzE5RDQyRDc1RDA0QkIwNjVGCi06MTA0N0YwMDA5MUM5MkJBRTRDMEE5MTFFQzU2QzdFM0U0QzAzMjE5NDkwCi06MTA0ODAwMDA0NDgwNzBFM0JFNzFERDRGODM4Nzg3RUY0NzQwODg4RjE4Ci06MTA0ODEwMDA4RDY2N0EzOTExNDQzQzBENDU3RDM4NkQ4QzVGN0M0QzNBCi06MTA0ODIwMDAwQzU5NzFERDkyMzQ1MEZBOTEzRTlGMkUwNzcwMzA3RDA1Ci06MTA0ODMwMDBBQTZFQTRBN0E1RDc5QjI5M0U5REQzRTI0QkE1MDBGRTU3Ci06MTA0ODQwMDA3NkU2RjdCRTZDQUE4RjE3M0M5N0M0RUNCN0YwRjkwNzcxCi06MTA0ODUwMDBGRkZCNDc2M0M4NUU2NUU5RjE3RUI0NDZDMzFEQ0UwNzIyCi06MTA0ODYwMDBCNkQ0RDgzQ0E3MUFCRjkzNERGMjk0RkMwNEVCNEFBQUU1Ci06MTA0ODcwMDAzN0M1QzBEMzc3QjM3ODk5RTI2MzcxQ0IxREZEREU1ODlECi06MTA0ODgwMDBDMjQ5NjNDQUM4QjU0MDM4MTk5OEVEMkQ4QzhENUZCODAwCi06MTA0ODkwMDA3Mjc5M0UxRjhGRjVBQTkzRTI1NTEyREI0RkY1MEUyQjZFCi06MTA0OEEwMDBDMzQ5RTUxQTUxNjFFNzYzOTY4NTlEOEYxRjM2MjczMTBECi06MTA0OEIwMDBCQTdBNDgzMUYzQjM0QTEzMDQ2ODFGOTgwQjY2QjJCODRBCi06MTA0OEMwMDBDRTU1MEVENTc2NTBCNkRCMjlDRUFGOEI4ODRFNjYxRkZGCi06MTA0OEQwMDA1NUIzOUI4NUVDQjNEOTlCQzZGQzc3MUVFOTE4Q0ZBREM5Ci06MTA0OEUwMDBGRDg0QjMyMjM2MUZCRjdGREEyRDg0QjZCMEY4NTQyRjczCi06MTA0OEYwMDA5M0ZGNTc5ODA0MTZFNzEyRkRGMTM1MkZDRjVCMkJCM0NBCi06MTA0OTAwMDA3REY3RDFCODlBMjdBQ0JFOTUxRTJFODNBOENCODM3OEFECi06MTA0OTEwMDBBQTMxNDUxNkZDOThFNkZEOTU5NURENkJENEUxM0U5MkYzCi06MTA0OTIwMDA5Q0FDQkU1MEI2QTFGQzc1NjYzMDVCRTg1RTRBRTZGMTExCi06MTA0OTMwMDA0Qzk3QTc0RTJFOUY0NjM4QzVGRUMzNjZFQ0FGNzFGMDZDCi06MTA0OTQwMDA3ODVDRDM4RkRGRjc4MEMzMTZEQTEyQkYxRUM5OUNDMzExCi06MTA0OTUwMDBDN0M5NEVGMkIzNzEwQzJGRTRGNzI2RUNGRjA4Nzg3RjNECi06MTA0OTYwMDA4OUIzNTg4RUUyRjM0RTEzQUNBNjdCMTI5MjY3RDg4OEI3Ci06MTA0OTcwMDBCODc1OTExRTM4ODJGMEI4QzRFQzc1OTAxREQyRTZDQ0EzCi06MTA0OTgwMDBBNUY1NUUxNjU5NUM0MjY3N0FBMjk4RjJCRjk3QzVEMTI5Ci06MTA0OTkwMDA1NEM3NTZBRUQ5NTdCQTgxRTg1NzQ3QkE0OTg0Q0E1NzVGCi06MTA0OUEwMDBERTYzRTdEMzQzMUFDRUEyOTRGN0QzNzk4NUY0QUJEODZDCi06MTA0OUIwMDAxRUQ1RTI0MjQwRTRGNzM4NDc0OThGRkQ2MzdBRDVGQkM0Ci06MTA0OUMwMDA2QkQ2NDhDQzFFMzUyRDFDMEYzNThEN0Y2NkYzRDYzODNGCi06MTA0OUQwMDAyMjE5NjQ4RjlBRDdBNDlCMDlENzI3MzVCOUFCMUFCMzhDCi06MTA0OUUwMDAyNjFFNDY3QzU0NDkyRUI3ODA4RkFBRDUzMjBCRDFENUNFCi06MTA0OUYwMDBBRDAyQTNGNUY1NkFENkZDMjlDMzU0QzhFN0EzRDZBQTJECi06MTA0QTAwMDBFMTI4MzY2RkZGNkMzQUNGQ0VCRDk0OTY1RDE5NjdGN0ZCCi06MTA0QTEwMDA3M0NEQUYzQjY1M0JGOTREMzhDRjRERjczMDRCOTI3Q0IyCi06MTA0QTIwMDA5Qjk4OUY3MjdCOUM2QkNFREI0NEY3MzRGM0REMTE4NzQwCi06MTA0QTMwMDA4MEZERjMxRkM5NDlBNTczRUU5ODNCNkNBMUZFNjNFREExCi06MTA0QTQwMDAxRTEzRDE4QURCM0Q5MTY4QzU3QzEzQTNDRjYxMDg2RjJCCi06MTA0QTUwMDAyRkQ0QzA4Qjc2QUExNTM4NkVBQTVGREE2N0YxRTI3QTk2Ci06MTA0QTYwMDAyOTM5NUMzRjE3NUU3RTJGOUZFRTBCNkFCMjIzRjk3NEUzCi06MTA0QTcwMDBGRTIyQUVGMjA3OTM1RDVFMTQ1ODlFNTBGQjkyQTgyNDZFCi06MTA0QTgwMDA4RDg4RTFBQTk2NzA4NUZFQkY1OEMzNTVFRDhFRDcxRjVECi06MTA0QTkwMDAyNTNGQUQyNTNDOERFQTg5NEJBQzJCRjdCM0U3REJEQTNDCi06MTA0QUEwMDA0QTgxOEZERjRGQjhEM0NGN0JBNDlCMjVCQTU3QjM2ODE5Ci06MTA0QUIwMDAzNEFFNDNCNDNEODdFQjFGRkJBN0YwN0VCNTkwOUQyMzNBCi06MTA0QUMwMDAxMEI1NTAzRTVDMjdGMjNDMDFGRDI5OTNGMjg4QkEwRUU2Ci06MTA0QUQwMDA0OUVEOEU5N0I0MkVGNTE3QzZGQUZCQzJDREYwMUM5M0E0Ci06MTA0QUUwMDA2NjY3MkIzQjhGODZFNzcwRkY4QkFFNzlDRDQ5QjhCOEYwCi06MTA0QUYwMDBGMEYyQkUwM0UzQTlCRURBMjZCODI5REVGN0YwNDM0RDkzCi06MTA0QjAwMDA2Rjc1QTQyNzI3REIyN0NCOEJFQTQ4MkZDRTk4OUVCQTU4Ci06MTA0QjEwMDBGRDREQzM0NTFENzAzREU4N0FBOTMzNkI3QUQyRkJCNUQ0Ci06MTA0QjIwMDBGMTIzMzQzRDU0ODNBNkQ3MUQ0M0I5QkY2QkZFQUQ5RjFGCi06MTA0QjMwMDAyM0ZBRkUwMkE5N0NCQzhFQUY3OURBRkUyNjZBNkQzNUI3Ci06MTA0QjQwMDBFMkM2NTdDOEYwQTU1ODZFRDZFQTdFRUNCQUYwNkExQkVBCi06MTA0QjUwMDBCQjM3RDJFREE5Q0JGREE4QjYzRUM2NjlBNTVGNkFDQzJFCi06MTA0QjYwMDBDRTUxMTMyQ0VBRUQ5RTdBQjY4NjJCQzlDRUUzQ0EwNzQ2Ci06MTA0QjcwMDA4RDgzRUY2QjQwRkQyRDdFNDlGNDMxRTU1MUNEMTVCN0E2Ci06MTA0QjgwMDBBRUQ1MTQ3NUIwQkNGNDMxRDE0REZCMkFGOTQ1Rjk2REExCi06MTA0QjkwMDBCNDZGMUQ3N0QyNTZDMURDMzE4NkVBOEM3RTRDRkZCQUU5Ci06MTA0QkEwMDA3QzI1MDNGQ0I3RjVFM0I4MEI5MzNDQkE5QzFGMDg2MTY2Ci06MTA0QkIwMDA2NjJGRjU1NUMxQ0RGM0RDQTg4NUVFMEY3NTNGNEQ5NEZBCi06MTA0QkMwMDA3NzlFNjY2RkQxMjk4QzE3NkUyMjc5N0MzMkY5MzdFMDk3Ci06MTA0QkQwMDAzOUM4RTRCMTFGNUVDRUQ2NTM4RjJFRjc4Qzg4QUQ3M0UzCi06MTA0QkUwMDA0Qzc1OTg4OUVGMThGMDM4QTBFM0YyMDNFRDNFRTI4M0FDCi06MTA0QkYwMDA5NkQ3NTkxRUFDQUZCMzRDRDM0QkRDM0E4MTg2RjQ5RUFBCi06MTA0QzAwMDBFQkU4RkMzNTFBQkZFRTE3OURBOTFDRkYyNUNEN0Y2NjhBCi06MTA0QzEwMDA3QzdBOUNBNTFGRERDM0U5RkFENEY1MTZFNzk3MDZGRDVCCi06MTA0QzIwMDBFOEZFQTVGQjkzNkVENzdGRDVBRjYwNDU3Rjk2QUYzRTdDCi06MTA0QzMwMDBBRUVEOUJGOTQ4NDZFQzVDMjA3Q0QyNzk2N0I1MjAyRTFFCi06MTA0QzQwMDBFRDg2NzM5M0U1MzVEMzg2NUNCMjA0N0E3OUFFRUIyOUIxCi06MTA0QzUwMDBGMTc5QUM5RTcyNjc5M0ZFQTdEOTMzNEQ5NDA3NDA3M0U4Ci06MTA0QzYwMDBFNkZFRENCOEJDRUMzOERENzc1MTNDRUQwRkZDN0QwNjkwCi06MTA0QzcwMDA4Njk0RjhGMzVDQ0ZEN0Y0RjMxQTdGRUJCQTcxODlFMzJCCi06MTA0QzgwMDBFQkQyOTUzM0Q0QkY2OENDOTI3Q0NBMjMyRUU1NzhEOTc5Ci06MTA0QzkwMDBCQTY3QTFERDMyMDlFN0FCM0UxRDI5NzVDQUIxN0FFNUQ1Ci06MTA0Q0EwMDA5NkJGODc0NTE3REQwN0VFRjAxOEVBODVFQUYzRkI5OTEyCi06MTA0Q0IwMDA3RkQ3NDA2NDE1RDVCNzk1NkJERTJCMUI0Qjc2RkYzOTNDCi06MTA0Q0MwMDBFNkUzQzgzN0JGRDVDM0NFQkQzMzlCRUYxRjREQTU2QzAwCi06MTA0Q0QwMDA2NTRCMUVBMzFGRENGMjAwQTdEN0YwN0NBRUIyQTVFODlGCi06MTA0Q0UwMDAwNUJBOEYzRjlFQTQ5NDEyQkVCQkQ2MEI2RUFBQjcyNjAwCi06MTA0Q0YwMDA2QzI5NUE3MTBGRjY0RjcwRENEMDhGRTQzRUJBRjk3ODA4Ci06MTA0RDAwMDBEOTc4QUExQjFBNDRFNjJGQ0FFNjI3RTc1MEJGRDIyMTVBCi06MTA0RDEwMDBGQTY4QUJGM0MxQkRFMjFFQzJCN0Q5QzVGQ0VEOTg3NjA3Ci06MTA0RDIwMDA0RTM0NDkxQzY3NkY2QjcxNjI3RjBFM0YyRkY3NkIzOEYzCi06MTA0RDMwMDAyQzY5NkFDQTM3RDFCQTZENzgzRUUxRkUyQjJDNzI3QkEyCi06MTA0RDQwMDA5OEVBQkU1RDAzN0M5QjQ4NUY1OEE2NjYyMjhFNEUwQjk4Ci06MTA0RDUwMDAzQ0ZGNUU2NDAxMUJFMUVBQTAxNDU5NDZGMjFGNUNFNkM5Ci06MTA0RDYwMDAxOEQ5NDgwMjg4NTc2RkFFRTI3NTNBOEIyRjU4MzdCMTgxCi06MTA0RDcwMDA3NTc1N0RFOUVCMUZEMkQ2RDVFN0QxQzc3NTUyM0U0NTkzCi06MTA0RDgwMDBFNzg3MjZFRjk5RTY5RkNGQTEzQ0UxQ0NENkJDNTQ4OEJCCi06MTA0RDkwMDBEM0ZCMTlEQTE3RUFGQjQxOEM4QkRCN0FBOUZGMEVFNzBDCi06MTA0REEwMDBFOEY3QUIyMUQ2MkVEMkVFMEQwRjRBQUQ0M0U4RkQyRDJDCi06MTA0REIwMDBFNkYxMjdFMkYzRjI1MzZENDkzNkMyMjNFNkYxQzZFNzg2Ci06MTA0REMwMDAxMjNGNEYzMDhGMzczQzQ3QkYzOTYxQ0NGN0I1RkE0RUIxCi06MTA0REQwMDBBQzcwMDU3QTg5NDM3QTlCOThFNzlGQ0JCMUE3OUZCQ0JCCi06MTA0REUwMDAxMTdBRTRGOUJBREYyNThFRDdGM0ZBRUU3Qjk2MjNGNjMzCi06MTA0REYwMDA4NEY3MzE2MzVENzA5REY1Q0YwN0QxMzA1OEZCRkQ5NDhBCi06MTA0RTAwMDA3QzE3Qzc0RjQ5Rjk3QzdCODRFQUM5NTZBQkRCOEFGQTI5Ci06MTA0RTEwMDAzRDQxN0U0NUVGMDE1RjEzNzk5RTY4MDM1RjE4NzE3MTE0Ci06MTA0RTIwMDBFMjRGQTM3REU0ODcwQjhFNzBCRjVCRDAyRTg0RTgxNTI0Ci06MTA0RTMwMDBGQkZFRjU4RjhCQzRGRkMwNDYwMTA2MDg3MTc1RDY1MzgzCi06MTA0RTQwMDBFQkU3OTBEQjVERjYwNTU2MEQ0NEZFQ0I1QjA1OUZDQTk0Ci06MTA0RTUwMDAyNDU0RUMwOUY1RDU4MTgxNzJERkY1RDVCRjVCNTdFOUE0Ci06MTA0RTYwMDBGNzRDODk3QTFGOTRBQkQ1NTczRUYwMTlGNUNFRUJGMzhBCi06MTA0RTcwMDAzRDA4OUZFMjUxM0RGNTdFM0UxODYwNzVENEM1RTAyMkE1Ci06MTA0RTgwMDBENjhFNkI2RjJCMTk4Q0YyN0YyNDdDRjBDNDA0RjIxRjNBCi06MTA0RTkwMDA4NzhCREQ5MzlDMEZENkIzOTc4MDE3M0I0NjVGOUQ4NTJDCi06MTA0RUEwMDBGQTc5QzNFRTcyNTNEQ0I4MTg2QzYwQ0ZCQkYxQTJFMUEzCi06MTA0RUIwMDBGMzk2MUQ3QkM1QzFDMEY4Nzc0RTQwRkVERDc2MTdCRDY5Ci06MTA0RUMwMDBENkU4RTU3RDFCQjcyRjQwMzI3RjNGQUFENURCMEYyRkY5Ci06MTA0RUQwMDAxOTNCODA5RUVCRkIzREZCNkQ2RTY3NURGRUIzNUJFRkE4Ci06MTA0RUUwMDA3NzUyN0VCQUY3Qzc2OTNCQzc5MTdENTM1QzZFODJEMTFBCi06MTA0RUYwMDBDMjBEMjIwNDQ2NjMzRUJDODFDN0ExRDMzNkQ3MEI3NEQyCi06MTA0RjAwMDA1RjdBN0FFMzlEMTk1NDBGM0UyMDc1NTk3QzM4QUY2RjU0Ci06MTA0RjEwMDA1N0I5OTNFRTQxRkVENzFDNzVCQUE5NDVGRTMwQzk2MTU5Ci06MTA0RjIwMDAwRTg5MTRGRkM2NEYwN0Y2MUU3MDdDRDgwQ0IyODdCREUxCi06MTA0RjMwMDBBMjY3MzgxOTc3REUxQzBBMjM3RDhFREUwRkQyQjk3RDc5Ci06MTA0RjQwMDAzNTk5QkZBN0Q3REVGQjNERjA2QjdFOUZENjdEN0ZBMjU0Ci06MTA0RjUwMDBERDIzNENEMEY2RkI1RkI5QTkxQ0U3REFGMzkyNjJGRUMxCi06MTA0RjYwMDBGQ0Q0QzZFREIzNjhCRTMzOUIyNTM3Qzk3QjcxQjNDNDhGCi06MTA0RjcwMDBFNjVGOEM3NUJDMDk3MTc4MUFGMTQ2RjE2QkYxRkJBMjAyCi06MTA0RjgwMDA4RjIwN0Q2NjJCQUY5MzE3MjM2RUU5QkVCODY2ODlBNDg4Ci06MTA0RjkwMDA1ODVDM0RGMTU4QTJGM0VEMTQ1ODdEQURFMzcyQjExMkE3Ci06MTA0RkEwMDAyQTY1N0FEN0YwNjlDM0ZGQUVFMTkxRDEwRkRBNTc5MTQ0Ci06MTA0RkIwMDAzRTEyNzFGQUFGRDZGRDM1QjlCREQ3RkQ4OTM4RDBGNUFGCi06MTA0RkMwMDBBNUUzMjE4NjRGNjBCOEQ0RUQ5RURBM0U3MkQyNjAzNkZBCi06MTA0RkQwMDA0MDY1N0E1NDI3NDMwMUU1MDU0RDE2MjgzMDEzMEU0Q0UxCi06MTA0RkUwMDBDOTNFRjJGMzA2OUI3MzA0REQzMzdEOUFDNERCNDc0RDYzCi06MTA0RkYwMDBFRUI3QTg1RUZFRDQyNDRCMDJCNkQxNUMwRjFCRkZBODBGCi06MTA1MDAwMDBFODlCNEFCNDk0MUU2NUY3MDM2Mjg5NDkzMUQxNzlENzg4Ci06MTA1MDEwMDA2NDY1RjEyMjMxREVBQ0M5RTU3MTM4MkI4RkM3OUIyRDU5Ci06MTA1MDIwMDBCOTZFOUUzRjQyM0RDQjFGRjQxNjM3OTg0NUY5NDk3OTNBCi06MTA1MDMwMDA0QUVBMjczMkIyM0NCRDc5QzY2QzMzRUVBRjdDNDJFQTE1Ci06MTA1MDQwMDBCMjFDQ0MyQzlGREY3Q0M3NkM3QUFGNUIzRTNBRjUzNTQ3Ci06MTA1MDUwMDAyRkQyQTFEQzU5QkNGRkE2RDQyMjA5RTlDNjQ2RkZFQzM5Ci06MTA1MDYwMDAyOUQ4QkYyQjU3NzkyQUI3MjhCNjhFM0UyRjNFN0Y4Njg4Ci06MTA1MDcwMDA5RUZGNzY0MEUwRDlEQ0ZFNzQ5RUQ5NTc1M0JDRkY0OEIyCi06MTA1MDgwMDBFOEFBMzU4OTMxRkUzRjA4NzBFQzBEMjE0NjQ3MjVDODU2Ci06MTA1MDkwMDBBNjdDN0E0QjJFQjA3REY0RDU5RUM5NTU3RTlBREJDQjhCCi06MTA1MEEwMDBGMzJBODAxNkQyNjM5NUZBREJDMzk0QUZFMUNGNkY0MzQ2Ci06MTA1MEIwMDBCQ0REQTFFMUFEQ0E2NjBGMTMyRTYwQjU3NEJFMUIxNzJGCi06MTA1MEMwMDA1RThBNEIyRTMzRjlGNzJDQ0REQzc3OThDMzdCNjlGQ0Q1Ci06MTA1MEQwMDAzMDY4NzY5RkI0QjE1NDcwRTNCNUI0QkVFMzNDM0EyNjcxCi06MTA1MEUwMDA5Q0Q0RTdDM0ZEN0QyNEUxN0VEMUFFODI4MkI2NDY5NzkzCi06MTA1MEYwMDAxMjUwQzkxNTE4REY4NDlEQkZGRDhDRTY2RDUyMjE5QUIwCi06MTA1MTAwMDBDNEVDNTBFMUE2RjM0ODgwODBFOTFBQjYzNTI5ODgwNzM3Ci06MTA1MTEwMDBENEQzRDJENzJFRUMyN0Y4M0ZBOEU3NTM5OUZDRkI4Q0M5Ci06MTA1MTIwMDA2NTFBMUVFRjg4MjhDRkI0QTE1MEE3ODI5MDlFOEJCNjM3Ci06MTA1MTMwMDBCRTAwNkY1RTM0RTNCQTY3NEM4MTgzQTQ5NzZBRDNEQjA5Ci06MTA1MTQwMDBEOTRCNjVGMkRCMjYyN0U1MkYxNzVFMTE3REI3RTNCODUzCi06MTA1MTUwMDA2QTJENkY4N0FCNjJGODU2N0NERUU5MTlCNjY5NkQxQzYzCi06MTA1MTYwMDA4RUZFOThDQkYzOTRGMzlFNzBGNjcyOEExRjFFNUU3N0M0Ci06MTA1MTcwMDBDMkQ1N0REOUNCOTE3RkJBNzc0NjExOUQ0QjRGODFGMjM1Ci06MTA1MTgwMDA3RTZFRENGQkM1NTlFNkRFQkZCRkY4RkQyMDlFNzdDMDEyCi06MTA1MTkwMDA2NjdFQkU1QUNEQTAzQTUyNTkwQjRFRDRDNzBDOTRBNTg4Ci06MTA1MUEwMDAxODY5MDk2OTkxQkQ4RjBGMzEzQjEyOUY5M0YyMTRGOTcxCi06MTA1MUIwMDBGRTRDRkVCRTA2RkNFNDhGQkExRDc1RkJGNEIwMUI4QUU0Ci06MTA1MUMwMDA0Q0Y5QjlDOTA2MTJGOUNCMzBEOEU4MjZGRkQ2RUQzNzJECi06MTA1MUQwMDA1NUI0QjM3OEIzRjQzNTdFMUZCNzU0ODgzNkE3MTFGREE0Ci06MTA1MUUwMDAzMjlFOTdBNDJGQ0QyRjdCOUU5QjVCMkM2NDhBNDUxQjAwCi06MTA1MUYwMDBFRjY3RjE0OThGNEIzMkZFNDdGOEY5NEZERDRCMEE3OUUzCi06MTA1MjAwMDAwRTlFQUY4Qzg0OTE4NEFCMkZDQjc3RjRCODg0RjZCMTJCCi06MTA1MjEwMDBFNTdEMURGQjkwOEE3MEJGMEJCNUI1QTc4QTE1QjI5OUM1Ci06MTA1MjIwMDBGNEQyREZFNkEzQjhCQ0Y0QjkxQzc2REVDMUJBMUZCMDc1Ci06MTA1MjMwMDBGQjBGOUQwRjM2QTYzMTdDQUVGMjg4Q0M4RTY1MUQ4M0E4Ci06MTA1MjQwMDA0MUM2NDcwRjc2MDgyMEUzMzk3NzdCNDcxQUEzOUQ1NzVECi06MTA1MjUwMDAwNjMyQkFFQzY3MDMyNjUzRkVERkZEREVGMjY3NDMxOTIwCi06MTA1MjYwMDA3REU2ODU0MzYzMDJGQzdFQzU0NjcyRjg0MTk3QTNCMDk0Ci06MTA1MjcwMDA5REYyQTFDQjc2OTQwM0VERTBCN0FGNjZGNzg1N0VFOEFCCi06MTA1MjgwMDBBRTYzODQ2QjAyRDE4ODEyRjIyNzQ1NTJCOTVENkM4REYyCi06MTA1MjkwMDBDQ0FGQjU3RDJENzU3MzNCMkUzREM4Q0ZEREE1OTNGODAyCi06MTA1MkEwMDBGQjNEQjMzQUNDNDU3ODkwM0E0NTA4MjFGRENEODM2MjY5Ci06MTA1MkIwMDA1MTE4NTk5QkI0Qjg2Q0NEMzQ4MTFDNjc4RjI0MzkxOUFGCi06MTA1MkMwMDBFNEI4RkEwRDU0MjU0Mjc1RDI1QzBEMjcyOTA1QTk4NjRDCi06MTA1MkQwMDBGRUM3ODU4MDQ0NzJDREI1MkY2MEI4NzFGODA2MTlFNjE3Ci06MTA1MkUwMDA4QjY0OTc3NjMyN0QwNDc4N0VBQkUzMDlDNEYzNjY5MkQzCi06MTA1MkYwMDBGMzkzODkwMkE0MjEyRUJFMzkxN0ZCRTNFNjk1MjY1RUJGCi06MTA1MzAwMDA5QTIyQjBENjk4MTdBMzVFNEU1QzBGNEYzM0YzQjRGM0Q2Ci06MTA1MzEwMDA2RTE4MEM2Mzc4NEFEMDBGRkEwN0NCM0YyRkUzMzk0RTUzCi06MTA1MzIwMDA2OTEzNjYxN0NGNEM0NDdBNEVBNzA0MjE5OUU1OUJDQ0FDCi06MTA1MzMwMDA3RjJFMkIyOUVDRkVCRTQ1RDM5MzhFM0JGRjUwNzAyODY5Ci06MTA1MzQwMDAzOEFGQUJEOEE4Qjc3RThBNTE2RjY5RDM4RDdBRUFFRkIwCi06MTA1MzUwMDAzN0VBNjVDMDVDQUZBMTdGNjBFMDFCODZGRUMxOEI0NjZCCi06MTA1MzYwMDAxOUU4QUNGQUYxMDZGRTFCMUEyNjFCNjg4RjdBOUI4MTlFCi06MTA1MzcwMDAzRjY3RjU2QzAzOURENzdBOEY4MTdGRTg4NjJBNDNGRkNDCi06MTA1MzgwMDBCMEQwNjI0M0ZGOEQ1Qjk3MUFFOEUxRUQ4RjE5Rjg2RjlCCi06MTA1MzkwMDBFQTU4NjlFODFGMTk1RTZCRTgxRkRERjkwMzAzNUQxNDI1Ci06MTA1M0EwMDA3OUQ2QzAzRkY2RjAyNjQzRkZCOEU4OEI4NkZFMDlBNzAyCi06MTA1M0IwMDBCNzE5RTg1QkJBN0U2M0UwQkZGNUNBOUIwNjdBMTIxQzk4Ci06MTA1M0MwMDAzMkYwOTdEOERFMzNEMDUzREQ3RjM1RjA0RkNCM0M2RUQzCi06MTA1M0QwMDBFODlGMjE5RjMzRjRDRjJDRjhEODQwOTdGOUZFNjlFMDdECi06MTA1M0UwMDBERjM4MjhGMDJDQzU5RkI5QTY3NTQ3NTVBMEY4MkM3RjRCCi06MTA1M0YwMDA3RjIyRTJGOUFFNzRCMzJGNEM0QzVGQjM2RURCQTRDN0NGCi06MTA1NDAwMDA0MTBEQjc5RjgwRkQzRTkzRjdDQkUzRTBFMzVBNUUzMDVBCi06MTA1NDEwMDA1NUJDMURFOEJFRjc3MkJCQzA3MERERDdGOUVDQzI3QzhECi06MTA1NDIwMDBENzFDQjc4RjdFOEEwRDBCRjAxODlEMzZERDZEQTBGQjYzCi06MTA1NDMwMDBGQjMzMERGQzAzRTZDQTg2RkU4MTgxMDI0M0ZGRTA0NTkzCi06MTA1NDQwMDAzRTAzOUQ1NTVGNkNFMEJGQTE0MTMxRDAxRTc1QkE4MTBFCi06MTA1NDUwMDAzRjY3QjVERjQwRTdCNUNFMzVGMDBGREQxMDMwRjQwRjE0Ci06MTA1NDYwMDAwQjJEMzJGNERGQjhCNURFNDAwRjZGNkYzMEYwREZENEI0Ci06MTA1NDcwMDBBMTFBRkE0Nzg2NTcxQkZBNDc3N0I2MUFFOEEyQzgwNjU4Ci06MTA1NDgwMDAwM0ZGRDhDMzIxNDNGRkI4RTg1NjQzRkY4NEQzRUQwNjlBCi06MTA1NDkwMDBGQTk2QUUwRTAzRkZBRDU3QzIwNjdBMTIxQzM0RjA5NzhGCi06MTA1NEEwMDBEOEZFNjBBMEE3QkFGRjYyRTA5Rjk2Rjk4MUExN0Y4NjJGCi06MTA1NEIwMDA3Q0M2RDA1RjdEMEVFMTQ3RjlGMzFCMDI3QkZGMzVCMzVECi06MTA1NEMwMDBFMDkyQTE1RjRBQzczQzlERUVBNzIxRDkyNzBBM0RGMzkwCi06MTA1NEQwMDA3NDNEN0YyQkYzN0Q2NjU4RTc1MTUzM0RGQjJFRUU1MzExCi06MTA1NEUwMDAxM0NGRUI2Q0Y5RkM3RTBCRjM3NzlCOERDNTU5M0NBMTc4Ci06MTA1NEYwMDA4NkIzQUI5NjQ2Q0E0RjVEQUFDMDcwNDdBOTQ2MDVCQkE2Ci06MTA1NTAwMDAyRjRDNjdFNzJBM0IxQTY1RkEwRTBERjMxQjI0NTI0RDA4Ci06MTA1NTEwMDAxRTBGRDUwRjI5QjEzQzc0QzhCNUQxNUYzRDBGQ0RDODYyCi06MTA1NTIwMDAwNzhFRkZGQzQwNEE3RTExRDU2M0FGOTY1MjdERjIyMDc0Ci06MTA1NTMwMDBBOEFCNDgwRTNDNUY1REY0OUVFOTlEMjRFM0JEOTFERTdGCi06MTA1NTQwMDBDRUIwQTFGRUUyRDYzQjk4RDQzQTY0RDQ3NUZDNzY4NjAwCi06MTA1NTUwMDBFRDNDRTNFRjlFNTdCQjU3MTI3MDdGNEJFM0U2N0YwMkIzCi06MTA1NTYwMDBFQjI2MzM5NjkwQUQ0MUY0MkZGNEQzMUYwNEREOEM3RUVGCi06MTA1NTcwMDAyQTk4QzlFOEE3ODMzMjZCMzcwNDBCNThGQjZDRDBDNzU1Ci06MTA1NTgwMDBGQTM3MDY4QjE5RkQ3QzUwNjE3NDI4Mzg5REI1OUI4MkQzCi06MTA1NTkwMDA3RUY2N0M3MzcwMkVBMzVGMDgwNjU4QkIzNUI4ODhCNUJECi06MTA1NUEwMDAyRjA2RUI1OUZGNEJDMTA2NDZCRjEyNTQ1OURCMUU1QzU4Ci06MTA1NUIwMDBDRDlFNkYwQkI2MzI3QTQ3NzAwM0EzN0YxNTBDQjFCNjQwCi06MTA1NUMwMDAyM0I4OTVCNUJGMDlCNkIzRkU5REMxMEU0NkVGMEU4NjUyCi06MTA1NUQwMDAxOTFEMEU3NjMyRkFDRDYwODREMUZCODM4NzE5N0QyMEE4Ci06MTA1NUUwMDAxODY1NkQ2N0YwMzQ2QjdGMTdFQzYyRkQ2RjA3QUYzMEE1Ci06MTA1NUYwMDBGQUJDNzZERjVGOTI2RjdDQUZBNkQzMDA1MzE4MUVGNDFGCi06MTA1NjAwMDBCQzc2MTZENTJEMDQ4RTYyRTlBMkExNkU0OUE4MUYxMkEwCi06MTA1NjEwMDBFRDcxNTY1QjQ3OUE4Q0M3MzZFNTM5ODNGMjM3MzVDNTRECi06MTA1NjIwMDBFNUZCNzc2OEVCM0Q5RTBDNkExMkM2QkY0NjJBRTYxMTgxCi06MTA1NjMwMDA4QThEQTkxMDZBNjJFRjU3NzlERUJENTBDMzI1QTRGM0E1Ci06MTA1NjQwMDA3QzdCODEyNkQ3NDJDRDFGOEEwODlGMDUwQzlGNkY3RkU4Ci06MTA1NjUwMDA5RDNBNDlBRjkzODM0MzAyRjNGMkIxNUQ5QzY1NTJEOTAxCi06MTA1NjYwMDAzRDgxM0Q5NDRGNzlGRkE2MjE4MTJBQzJFREU1RkEwN0RECi06MTA1NjcwMDAwRUIwRjVEQ0JFN0M1QUE0Q0MxQUVFN0YxN0RERkYxQzAxCi06MTA1NjgwMDAxNEQ5N0Q2OTVGRUJENTY5N0ZCRkQwNjdGRkVFMzM0M0U3Ci06MTA1NjkwMDBFODFDOUFGRTg1QzhFRUQzREY5MTFDNzNFOTdFRTQ5MTg1Ci06MTA1NkEwMDA3Q0ZFMUVFMzkxN0M5M0ExMUQ5NkU1N0Y5OEU0M0M5NURBCi06MTA1NkIwMDA1N0ZGQzJDM0M4NTJCMTI0Q0Y0NTc5RUIxRDU0NUFBMzNBCi06MTA1NkMwMDBERjk3ODMyQ0IxRUY2MzQxNzk4QjNFOTlGQzI2MjY3NkQ4Ci06MTA1NkQwMDA0NERGMDUyQTZCQjcwRjBFQUNBMEYxNzc2MzAxNDE3NDZDCi06MTA1NkUwMDA2MEJDMzVCQkI3RkQyNENBQjM0QUIzRDNBQTdDOTNBMTJGCi06MTA1NkYwMDAyRENERjJCN0QwN0MyN0YyMTQ4MzNDQ0JCMzY0RURFRjExCi06MTA1NzAwMDA2NEJBOUUyN0I5RkVCMUVCRDI0OTIxMjdBNjZGRkQ1RTkwCi06MTA1NzEwMDA2MkQ1MjRFREZCQTkyNTgyRkU5RTlBRTc4MzM2RDBGMzVECi06MTA1NzIwMDA0MUQ2NUZCMThDREZDRjdDMEJFQjMyN0E1Rjc5NDQ4QjUzCi06MTA1NzMwMDA4Nzk3RUIyNTE2MkYyQjg0NjQxRkU1RDM5N0VCOTcwREU2Ci06MTA1NzQwMDBBNUZEMjRDNkNEMEExQzY3QzI3MTE1QzBCRjg3QTgzODQ1Ci06MTA1NzUwMDA5MkMyRjA4NUYzMDFCRDc3QUJDMENDOURFQUJGREEyQ0Q1Ci06MTA1NzYwMDBGRERFMjM2QUVGQ0ZFNTUxRTgzREVDQkM5REQ2MzZBQUJECi06MTA1NzcwMDA1MzExMjc5QjU5MUMxQjI3QUExNkFDOTNERjMxODVGMkM2Ci06MTA1NzgwMDAwNTkxRTFDMzIyQTBCQzBCRDMxMTFGQkRFNDA1M0EwRTY1Ci06MTA1NzkwMDA2QUI1QkY4RkQxOUYyM0JFNUVBMUY5MkVGRTdBNkMwMTQwCi06MTA1N0EwMDA3QjZGQjI3QjlDNENGQTZCMzJBMTNERThCRUU2NzcyMjYwCi06MTA1N0IwMDBGRjRFODJBRUQ4RTkzQjBFNTc2MTFCRkJDRTlGOTIwODhECi06MTA1N0MwMDBCMkQ3MzgwNzdCMUZCMjU3ODQ4NjU3N0I4OTlGRUY2QTExCi06MTA1N0QwMDAzODdBMjc1MzlBMUU2MkYzMUFERkYzNzU2QTc2RUNENDhGCi06MTA1N0UwMDBFQzVCRjZFNkMxQUM0NzcxREVEQTRFODlENTNCMzAyNjdDCi06MTA1N0YwMDA1QUU4RUZFNUZCQTZCQTg2NDMwMzczRTNGNjUxRDdGMTA3Ci06MTA1ODAwMDAwMUZGMkUwQUEyODVGMURGNDM5REQyRDZEN0YxMjQ1QTlCCi06MTA1ODEwMDAxQzgxMzY3QkJDN0NEREI4N0U0N0MzRjU0OUNBRUI2NzhCCi06MTA1ODIwMDA1OTY1RDc1RDM4MzQ4QUFBMDk2MzFCRjg4OTlCN0Q1NzZGCi06MTA1ODMwMDBBNzdGNUYzNzFGRkNBQzVEODg3MDIwMUNGQkQ1RjVBQ0UzCi06MTA1ODQwMDBGRTVEMENFREVDNzk2REYxRkREOTQ0RDc0MUQ3OTQ0QzU4Ci06MTA1ODUwMDBBQTVGNTYzN0JFOTU4OUQyREREOUJBN0UyQUREM0ZDRjAxCi06MTA1ODYwMDAwRTU1QkU0NTZERjk2NkUxMjRENURERTgxNzdGQTNGNTM5Ci06MTA1ODcwMDBBMzQyN0QwQjk1QTRGN0JDMzRBOTg1RUU3OTY3ODlEQzNBCi06MTA1ODgwMDAwRTcwODhEQjAxNzFBNDg4QTkzREY3ODc3RTcwNTJGMzAyCi06MTA1ODkwMDAwMzI2QkZFRTA3MTUyQjM5N0VGNEJGQzdFOEY2OEJFMjZGCi06MTA1OEEwMDA4N0ZFMzY5OERFN0Q5OEJCRDg3NzIxNzVCQkFEQTk4NDdECi06MTA1OEIwMDBBRkM1NTQ3OThBRjE3OUExN0UzRUYzQkNFMDIxQ0MwQkNGCi06MTA1OEMwMDA4OEVGQUNDNEVEN0ZGNjY4MTJGQkJCOTdCMzAyRTI2M0NFCi06MTA1OEQwMDA1NDRGRENFQjc5RTZBNzI2N0VFRkY2QTg4ODVCMTRBOTg3Ci06MTA1OEUwMDA1RTdFOTJFOTY5OTEyRDM0ODJGNDg0RTczMzBDMjU1QzY1Ci06MTA1OEYwMDAxRjZGNUYzNTkyRUVGQjI2ODdCMjI5NUY5NTVFQjRGQTgzCi06MTA1OTAwMDA5QTNDODYzODBGRDc1MjYyRjc3ODRGNDhGQzVFMkQ1MThCCi06MTA1OTEwMDBERTFFNzk0QkYxODFDRjI4OUZCMDVBNDBBNUY3NDlFOEE4Ci06MTA1OTIwMDBGRkRDRUY4RjcxRjkzRjM1MDUzMjZGMTY3OUJFQzJFQUExCi06MTA1OTMwMDBFODIxN0U1NkZGNDM4NkNEQjc1NkU4Qjk3RUIzQjY2RUYyCi06MTA1OTQwMDBFN0U3QkM5RTU2QjM4MDdEOEY5MzI4ODdFMEU2RUIyNjgxCi06MTA1OTUwMDBDQTYzNERFNjcyRThFNzRFNEY3OUI4MUQ3NDc5MEE4NjNFCi06MTA1OTYwMDA3QUY4RkQ3REI2QzJGNkRENjhFQUM3RTJENzQ3NjI2MDI1Ci06MTA1OTcwMDBFODUwM0EyRkI1RkIzMUJEOEVFREY0OUM2MjcxMURBRTNGCi06MTA1OTgwMDAzNjBERTFERkY3ODZGQjNBNEZDRjc3RDdDRkRFRDg3OUY4Ci06MTA1OTkwMDBBN0RGMzNDMUM0REVFRjA1RkQzNkI3NDQ3NjlCMEQzRTZECi06MTA1OUEwMDAxNkY3ODdDMTExNUQzRkVDOUVFOUZGMDE5RUNERUUxODExCi06MTA1OUIwMDBCMDM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCi06MTA1OUMwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQjdCQzRDRUMwRjBBM0JBCi06MTA1OUQwMDAxRTgyMjUzODEwNkM2MjcxMUQwQjAzQzMwNzU2RDJGNTY5Ci06MTA1OUUwMDBDMTcwMjU1MDdGMDkxMEU3MDM3MTE2MTBBNzAyNzEwMkRDCi06MTA1OUYwMDAxMDQ3MDM3MTE4MTBCRjA2OUFGRDBDODgxRjAyRjExRDk1Ci06MTA1QTAwMDAyMEJFMEVDNDk3ODBGODJDMTA5RjQwQjI3NzE5MUIwMzVDCi06MTA1QTEwMDBDMzVBMzZEMkVERkY4M0U0RTc4OTQwNzYzOTEwQ0YyNEFDCi06MTA1QTIwMDAyMzFDNDZGMUYwQzBGMjNDMEMwQ0RBQkMwOEZFM0U1RUQyCi06MTA1QTMwMDA1NDc5MDUxRTA0N0JCOTIwNjU3NjZEMDNFQTA3MDBFOUY5Ci06MTA1QTQwMDBDRDQyNEE4MDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCi06MTA1QTUwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkQ1N0QwQjc4NTRENThCCi06MTA1QTYwMDBCNUYwM0U4Rjc5MjUzMzkzQzk4MzkwNDBDNDkzOTcwNDUyCi06MTA1QTcwMDAwOTM4MjQyMUYyQUExRTA4NDJBNEQ0MDZGNDJBNUFBRUY4Ci06MTA1QTgwMDAwRUM4MjM4NjkwNDRCMDJEQjc3MjlCMjEwOTJGNDExQjZECi06MTA1QTkwMDAxNTJENUFCNDgzNDU4QjBBMzZGMjY4RDEwNkVFRjAyOEVDCi06MTA1QUEwMDBDNjVCQjREMUEyODJENTM2RDQ1QjQ1MEI0OTQ0MTE2Rjk1Ci06MTA1QUIwMDBCNUJGNzdBREI1RjdDOUNDMzkzMzQ5NDA2QkZGN0JDMzcwCi06MTA1QUMwMDBDN0I3QjNDRkQ5NjdFRkI1RDc1RTZCRURGNURBM0I3NkU1Ci06MTA1QUQwMDBEOUM2RTQyQjE5RkIwMjdGQTA5Q0EzMzBDNjA2NDRDQTlBCi06MTA1QUUwMDA1MTc3NUVCQjY4N0IwOUZDRkU5OURERkZCODE2Njk2N0RDCi06MTA1QUYwMDA5NDE3MzM4OUIxRDFGMDlFNjUzMDU2Q0FEODk1NEVGOEM3Ci06MTA1QjAwMDAxNURBOTVCRDcwRUEwRjk3QTUzMUI2OUYyOUNDMDE4RkE0Ci06MTA1QjEwMDBDMjZBNTlFQUI3QTA5RkZEOUYzMzNGQkU5NzVGNzA2Nzg3Ci06MTA1QjIwMDA3NUI4RjFCQjIwNjNFOThDNURDMUY4NzdFMTZDMkRDQkQyCi06MTA1QjMwMDA1Nzg4MTUyNkUzNzNERDQ5QkY0MzNGQjk5QkVBRTBGQjc1Ci06MTA1QjQwMDBCMzlGQkFFOTdCMkIxQzQ2QzkzRTk3NTk1ODdDRjM0NTU1Ci06MTA1QjUwMDAwRUY2QUI3RURDNTEyMEVBRDkwQzA2NjcwMkRFMkMxQTY5Ci06MTA1QjYwMDBENzgwRjdEMERCRUYxMUJDMDc1NDgwNTc4QjMzQkUxM0JGCi06MTA1QjcwMDBFMDRGOEJDMEJGOUY1RDlCQzQwQTM5RkM3QTY5MDRGRTZECi06MTA1QjgwMDAwQjg1ODdFNjBGNzg2RUFDRDdCRTk5OTdDRkQ4QkE3QUQ3Ci06MTA1QjkwMDA0NkU1REE3QTI3OTVBQkVCN0RERkNDQjMzMUI2QjIzRTgyCi06MTA1QkEwMDA4M0NBNDYxNTNFMDEzODFBQjdCMDUwMTA1MEVGMkU4NDA0Ci06MTA1QkIwMDBGNjQ2RkZGMDNGMjFDRjY5QUEzQkIzN0NBNkJBM0QwRDY0Ci06MTA1QkMwMDBGQTI5ODhENDU1Qjc2NkFBMzdCQTI3MzkwMzZFMUMxRjNECi06MTA1QkQwMDBFNkVFQzBGMTlENTQwMjk4NDczMzAwMUY5NzhBNzlCQUM4Ci06MTA1QkUwMDBCNEUwMkMwNkVCOTFFN0I2NkIyMTgwRTM1MkY3ODJFOTMzCi06MTA1QkYwMDA2QzI0QjZDQjI3QkNEOTA1NUU5NzY0MzY3NDIwQkMxRkQ1Ci06MTA1QzAwMDA0MzNCMDZGMzFERTY5RUYyM0VGMzMyRjY5RkQ5NEZGMDdBCi06MTA1QzEwMDA3OTZDNjA2QzIwM0M1RkZERUY3NTFEMTJGNEI3MzJEM0Q4Ci06MTA1QzIwMDBBRTM1NDA3RjRGQzBGODZCMUM1MTc4RENBQUZFQjkwMzNCCi06MTA1QzMwMDBGQTc0QzIzRkM0RTNEMDhEQkMxRTk5MzdENEEzRTYzMUI5Ci06MTA1QzQwMDA4QzQ1QkRDRjhFRjQ3M0ExRkRFNjM3OUJFQkQ2N0VGMzdBCi06MTA1QzUwMDAzNDdEMTJEMkFCRDE2RjNFQUI2OEYwQjlGRkY3RjY3QjYzCi06MTA1QzYwMDAyOUUwM0MzNTI1RDJBRjMxNEVCRkZEMDIzOTU0QzBCN0QzCi06MTA1QzcwMDBGOTFCNTkyODlDMUQzQjRFOUVFNjJGMEZDMkZCQkM4RDg1Ci06MTA1QzgwMDAyQTBCNjVGM0U3NjlDMDE3NzlGQzU3RDZFNDlCOTQxMDlCCi06MTA1QzkwMDAyODhDODU4NzQ1OEY5MzEzNTk5N0JDMzRGQjFDMTlFOEQyCi06MTA1Q0EwMDAyOTJGRTNGQTQ1MTJEMjU1NzNENEZBRTYzMDY2RjBDREM3Ci06MTA1Q0IwMDA4RkVBN0Q0QzFGQ0FEOERERjUwNTU0NkVBOUY3RTlDOEY3Ci06MTA1Q0MwMDAyNzc3RkY1RDk5RDU1MjE4Q0I4RjdGMTFGMkVBMUUxQjAzCi06MTA1Q0QwMDAyM0ZBMEIzRUNFNDI4RjRCRDg1RkM1QUMzOTUwNUYzRkE1Ci06MTA1Q0UwMDAyQUJERTgyRThEODg1QzQ2NzlFNjEyNzRCQzVFRDI2RUMxCi06MTA1Q0YwMDBDOEMxRjZBRjI4MENFNUEwOTUxRkVFQjZFOUQzQjBCRjNBCi06MTA1RDAwMDBCNUEzNjRBOTAxRjE5Q0M3RjkyMUNGMTY3NkU2NjJCRjVECi06MTA1RDEwMDBDRDM5QTM4MkQ4OEZGRjU1RTI4N0JDRkM0QjM0MDVDNjMyCi06MTA1RDIwMDAxRDk2MjdGODYxRjQ4MzRFOTQ4NzNERjM1Rjk2QUVFN0E2Ci06MTA1RDMwMDAxNTMzOTY2NEExMDNERjc5RDI4MTZGNDJERjc0RjA3NTY5Ci06MTA1RDQwMDBGMUMzRDc0NzVGQ0Q3REQyRDc3QUZGN0RFRjNCRTBGRDMyCi06MTA1RDUwMDA5NjNDQkJBNjY0QzdDMjk1Nzk3MTM4QTNDMjFENEI2RjMwCi06MTA1RDYwMDA3OTc5ODJDRUZDN0REMzk5QjU3Q0IwM0VDNERFMDExQTMwCi06MTA1RDcwMDBCQUJGM0U4M0U4RUVERTdBOERDQUI1NDg4NzMwRUYwN0JBCi06MTA1RDgwMDBCMEU5NThBODIzMURFMkI4RDcxNTUxQkRENzdEOEJBRDFBCi06MTA1RDkwMDAyMEJBNEM5RkQ1Q0M1MEZFREU4RkY0MzkwRTg3NUJBOTFDCi06MTA1REEwMDBFQjEzNjBBRTc5QTIwRTVCQTQwQzdCQzBCREY4N0UxMDM1Ci06MTA1REIwMDBENTc1RENDQUVFOTI4Q0Y2Q0YwNjc1QzA3NzhBNjgzRjNGCi06MTA1REMwMDA3NUM1QjNDMTQ2RjhGRDdFMTdBRjVGQkRBMjUzMEY2NjIwCi06MTA1REQwMDA0NTdEMUY1Q0E3RUI1OTkxRjY1MDBGNEY1MkEzRkFDM0I0Ci06MTA1REUwMDBGRTBCQTNFMTM5NDhFRDhERkVFNkFGMzhBMTA3MDFCRUY5Ci06MTA1REYwMDA3QjVEQkNCRkI1MkI4RUZENTNGQTVGMkIwNTMyNDBCNUUyCi06MTA1RTAwMDA2MEFCMkNGREFDRURBOURGQUIyMzFFOEM3MTcyQTQ1RkRGCi06MTA1RTEwMDBFOEMxRThGN0MxNjc3NEREMUQ3OTdGQjk3NDZGMTBERkUxCi06MTA1RTIwMDA2RjY0MTU3OTEyQUM0M0U2RjQ4QTBDMDZFQjZGQUY2ODI5Ci06MTA1RTMwMDAwRUUyOTZEQjAzOUZDMDc3NjQ3RTBGMTJCQ0FFMENGRUIxCi06MTA1RTQwMDA3RUM0OEFERkVCOEQ1MUVCMzM2OUM1Q0I0MTg0RDdEMDVCCi06MTA1RTUwMDA3MzE0NDFBRkYyMEI1OTRCOEYwMEJEMkE0OTc2M0ZFOUNECi06MTA1RTYwMDAxQkQ3MDFEMzY0QzI3OEIzMkE5ODA2NzBDOTY5MTUwQzkwCi06MTA1RTcwMDBFNTgxOTJBNkJFMUJDRDA3MDZGRDAxOUM2MzA5Q0VDOTM0Ci06MTA1RTgwMDAxNUIzN0E4MTMzMTgwREE3MDE0NzdGNzAxQjcwRjQ0RTRDCi06MTA1RTkwMDBBNzdDN0MyQjNENERCQTY2Q0NFRjI2QzBGRTZENkZCNzVDCi06MTA1RUEwMDBGOTUxNUQ0ODQ1M0M0MTU3RUNGMzVCODMzNjc4OUUzQUE3Ci06MTA1RUIwMDAxMzcwQUREMUJBQ0Q2MkI5QjFGREE2NEQxRkM0NDI1MTI4Ci06MTA1RUMwMDBGQkY3M0Y3QTVERjNCMENFRjExNjg4NUU1RkE4Q0Y5NTAxCi06MTA1RUQwMDAwNjQ0RjAzODU2QjRCM0QyOUYzMTNGNUJDQ0ZDQUUzNUFDCi06MTA1RUUwMDBDRDhGQTk4MThDMEE0RkZGRjNCQkQ3RTU5RjU1RTE4RTdCCi06MTA1RUYwMDA2REY3NUI0OUEyRjEyNzREMTlGMzZEQzZDNzYzMEU5MDhDCi06MTA1RjAwMDA1RkM5Mzg1RTUxNjRCQ0U0NjkzMDFFNzZBNjM2QzcxRDkxCi06MTA1RjEwMDAyRjY1MzI4Q0U3RkNGQUYwNjlFNTQ3MDM1RTdCMENCQzI5Ci06MTA1RjIwMDBCNzlBRTA1RDZCMDNCRThEQjNGRTVGMzdCQ0U3Q0I3RkY2Ci06MTA1RjMwMDAyRTkwQkZDNDdGNzk3REYzREYzRkJBQkY2NEZDMTUzRTZFCi06MTA1RjQwMDBGOTQ4NjVFMTJCMDE1Rjc3NUNFNTI0RkRERTkwNzNGRjg2Ci06MTA1RjUwMDA2QzdDQTVFMkE3QjA3RTc3QkM1NDdDRTI0QTE5MkI0MDRBCi06MTA1RjYwMDBENzIzMjJFM0Q3NEExQUVENTdCREQxNzc2RkYzODEwREJFCi06MTA1RjcwMDBENkQ0Q0ZGRkFGRjlGNDg2RDdBRjVCMEU5REFGN0M2RDYzCi06MTA1RjgwMDA3ODNEODEyMTNGQUQyQzY0MjEwN0Y0QjFCMkVEMkFCMkY2Ci06MTA1RjkwMDAzNzU3MUUyOTFCQzhBMDVGREI5QUUxNEM4NzQ5MjU2MzUwCi06MTA1RkEwMDBGRkQwREY0QTQzQ0Y5ODVDRDI0RkZGNUNDRjAwRkI0RTVGCi06MTA1RkIwMDA2RjAyQTU2QkI3Qjc4MkY0QTI5NTEyQTNFRkQ3ODNERTY5Ci06MTA1RkMwMDAxNjAyM0RBNkU0OTUwRENFMzk1OEY3RUY3MENFQzE3MTlCCi06MTA1RkQwMDA2RDhDRjRFOTkyNTcwRUY5Q0E4MENFNUQyMzUyNDYyOUEyCi06MTA1RkUwMDA0MDAyMkI1REM2RjNBM0U1QThFN0RFNTUyODlFN0I3ODJCCi06MTA1RkYwMDA3RkYwQkMwMkRCMjc4OEY2QkRDMTk1OTAwN0YwNDRBRDY5Ci06MTA2MDAwMDA3RkEyQkQzOTUwMTE0NzdGRDc2NTk5RjBGMzkwRDBCQjdGCi06MTA2MDEwMDBFRTQ2QkQwQjA0NzI2MjQyNEIwMEY1NkE1N0JBNUQ3QkQ3Ci06MTA2MDIwMDA0QzhBRkRFRTI2NTkxMkYzMDZCRDBERURFQzExNTMzMkVDCi06MTA2MDMwMDA1MUNGM0EzMEUzODkxNTc2ODRBRjkwOTE1Qzc3RTU4NTRFCi06MTA2MDQwMDA3NDE5RUFFRTAyQ0VEQjBGNTlGNjdEMzdBRTIxRTk1RDE5Ci06MTA2MDUwMDA5OTUyOTk0QURGOTlFQTc3RjdFODMxRDkxMzUxNkZGM0VBCi06MTA2MDYwMDAxNkYwRjc2NTBENTc0QzZDOEM3RUNGRkMxMzcxRkYzNTI1Ci06MTA2MDcwMDBERTA3MUE0QUU5N0RBNkIzRTJEODA0MTgzRjEzRTQ2OEE0Ci06MTA2MDgwMDAyM0UwMkI1MzZEOTZFQTY4NUREM0UyRUE4RjFCRTYzQjczCi06MTA2MDkwMDA2Nzg1MDA4NjBEMzMxRUNDOUUxRjY3M0Y4MUQ1MzRGMTg2Ci06MTA2MEEwMDBFOUEwNzk2NjNFN0I0OEUwRUY2RTgxQ0Y0Q0U0RjVEMTA0Ci06MTA2MEIwMDA4MjBFNDFCRUI5NzhEMzFFRjlFNjFBQ0FFNTVCNDI0MUE5Ci06MTA2MEMwMDBGMzBBQzRGN0EwNzlDQzhGRkFGNjg2MTk0RjkwREU2QUVFCi06MTA2MEQwMDA4Q0UzMkEzMENCQjk0Q0Q1M0NBRkFGNkIzRTFCOTlGRTVECi06MTA2MEUwMDAxRDc5NzRFRkZENUJGOTZDMjMwQkRDOEFFRDMzQzU3RTAzCi06MTA2MEYwMDA5RTUwMTA5MjAyODVGRENGREYzQURGREVFNkZEMkRDNDEzCi06MTA2MTAwMDAyNzFGQTc0RTFFMTAzQkNFM0YwQjJGOTk2RTE4QTdFNEZBCi06MTA2MTEwMDAxRjNGNEVDMjNDQjNCQzNDNUZCQ0MzM0UyMEU4OEMyOTUxCi06MTA2MTIwMDBCODFGNThFREFCODQxMjlGQzQ2NEFBQjZBMzFENEVGMkVCCi06MTA2MTMwMDAxQkUwRjZCMEU2RjI0QjgwREU1MjJCNTZERDJFODNEREZGCi06MTA2MTQwMDBFQzc5RUJFQUY3RDFDRTRFRUQ5ODQzRjY3NjUzNjE1MUY4Ci06MTA2MTUwMDBEQjI0Njg5N0U0RjdDRDk4NDI3NENBMDhDRjZCQjEzMzVCCi06MTA2MTYwMDBFMkJCQUExNTEzNjE1RThEOENGM0RENjZGOTk2ODk1QzNFCi06MTA2MTcwMDAzRkQwNjlCREJGMkI3MDA2MkJBRUE5NTA0Nzc2NjUzOTVECi06MTA2MTgwMDBGMUU2NjE2NzYxM0U2RkU5MEI0N0VDRjdCRENEREYxNkM1Ci06MTA2MTkwMDBGOTRFRjhGRjk2OTBERkI0QkZFRkQ4NzQzQkY5MTE4MzQ2Ci06MTA2MUEwMDBGMDBGRUREMjY0NEIzRjQ5QkEzREUyNjc2NDg4QTdBODdGCi06MTA2MUIwMDAzQUJDRkY2RDBGNUZERkZFNEYxOUNGQzdFRTczNkE0MDI5Ci06MTA2MUMwMDAwQUI2M0NEOTg3RjY3QTEyRjMyNUFCMjg2NzI3ODM0MkIzCi06MTA2MUQwMDAwMEEyRDg5N0Q2MUQ5NEI1RkVEN0E1ODlCMUYyOTY0MkY0Ci06MTA2MUUwMDA0RTc3MzNBMkY0REMwRTk5RUJDOTY5MzMyNzY3QUY4NDhECi06MTA2MUYwMDA3RUNGOTY3MEJGNzBBQTBGRkUxN0M1Q0U2NzFERUM2QkUxCi06MTA2MjAwMDBFMTI4M0ZDN0JBQzJDNzg4N0YxQjgxOUU3MjgwMkY4MjU4Ci06MTA2MjEwMDA4NTMyRjlCN0Q3RTZFREYwNDVGM0I1QUMxOEZFNkQyQjM2Ci06MTA2MjIwMDA3RDMwNEQyRDE1RkExRkUwNDdDOTkzNzVEN0M4QUY0RTg1Ci06MTA2MjMwMDAxRkNBOTdBNDhGQzRFOTUxREZCMTBCNUZBRjI0RTVDMjM5Ci06MTA2MjQwMDBFOEUzQUI4RTY3QUM2QjJDNUY3MUZEMjQ2REU2M0MyN0Y5Ci06MTA2MjUwMDBFQTNCQUIzMjY2MjZDNTkzQjNCREFGRUI3REI0QUVBOEM3Ci06MTA2MjYwMDA0Rjg0RTJGNDlGQTY0ODcxRkQzOTU2N0Q5RUIxQTVBNkU0Ci06MTA2MjcwMDBGNTUyMDY5NkNFREFEQ0Q3QkFBNTk5RjE2MUY0RUI1QTVECi06MTA2MjgwMDBBNjY4RkY4NUMyNEJGNTkxNUZEQzI5RkE1QkFCREQxNzkxCi06MTA2MjkwMDBDNEZERjMyQ0VFRUQ4MDBGQTU3OTU0MThGNTNEOTZDNzlCCi06MTA2MkEwMDBGQzhGRjMyNkE0ODdCODM0M0Q0NDNBMjRDQURERDIwOEQzCi06MTA2MkIwMDA3Q0Y2MkNEOTM0OUU5QTk2NjBDMjM3OUIwNURBNzYxNDA4Ci06MTA2MkMwMDBGQ0FFNjU3NjgyQzM4OUUzQzEzODhBMEYzQTk0RDBGRjY5Ci06MTA2MkQwMDBDRkMyMkUyRkY1NDhGREUxNTA1RkU0NjJGRDRFMTMxRDQ1Ci06MTA2MkUwMDBBQ0NFMkE4QUJCREZBOTYyNUREMTZDRTVGNDdBRTdGOTBFCi06MTA2MkYwMDBDOTE3RUI3OEQ3OTlFMTNERUZFRkRDQUFGNjZFMUNGRkVBCi06MTA2MzAwMDA3MUVDNzcyQTdCRDdDMDE3MjBGMTk2MUU3QUU3RUJCNEExCi06MTA2MzEwMDBDQUM2RjY0ODQ5MjAwRjMyQUU2NzAxMERFQUY4MEEzNkMwCi06MTA2MzIwMDBFQjM1NTg4RTQ1M0EyQ0YyOTE1RUIwNTU1MjExNEU2MkMzCi06MTA2MzMwMDA2OTBERkY3MzdEQkUxMDk1NUJFODRGNzYwNjA4NEY4QUE2Ci06MTA2MzQwMDA1QjY3RDQ1RTNCM0Y3REZGOUNEMEFGRDM4NDNFNkZCQzg4Ci06MTA2MzUwMDBGRkExNjJBNzdFNTU1NkMxRDA2RTNFRjdGNkQ0MENFQTc3Ci06MTA2MzYwMDA1Nzg3NDdBNTExMzhBQ0ZEMTYyQTgxMUYyQTAzOTBFQ0U4Ci06MTA2MzcwMDAzODNDRjgwMUZBMDk1ODQ3MDFGOUI1RjMwNUNFQ0UzRDhFCi06MTA2MzgwMDAzMDMzODlGNUMxNUYwRjU5RjhFQjIxODlDM0M5MkFDRTkzCi06MTA2MzkwMDBDRkNFMzgwNzYzQjY2MzdCMzU5MDQwRjFCMjkzMDVDNDI2Ci06MTA2M0EwMDAwN0I5NjJGQzI3RDZDRjREQzBGMTlGRDhEODM3OUYxQkM1Ci06MTA2M0IwMDA3MEZDQjRERUM5QzJBMEE3ODZFQTdENTQxQUVGNDNDMkJFCi06MTA2M0MwMDBERkJGNTlEODMxQzZGMzczOEE0QzcwRUMxMzdDRkY4NDVECi06MTA2M0QwMDBCMzIyODFGQ0U3MDc2RjlDMzYwQ0Y4MkJFN0E4RTI0NzU1Ci06MTA2M0UwMDAxRDRGNUJDQjUyRkExQTNGM0I2OEU2MzdBNkNDRUUxMzQzCi06MTA2M0YwMDBERTY1NkY0RDlDNzEyODhBMUY3RkExNzhEMkRFMUQwRTRECi06MTA2NDAwMDBCRjVDQ0UyRTQ3RkFFQkVGRkI3M0Y1RkE4QzQzRjk1RkQ2Ci06MTA2NDEwMDAxRDJGOUI4NUZENzlBRUYxNzcyQjQ4Q0YwOTVGNDlGQzk1Ci06MTA2NDIwMDA5OTIzRTQ0OENFM0MyRTBGNzJBQjU5NDg0M0ZFRkRGQzQ1Ci06MTA2NDMwMDAwQjE2NEQxRjYwOTkxMDlFMzJBQjU1OERGQzRENEM3NzVECi06MTA2NDQwMDBDRjgxRjc0M0M1REI0QzY1QkE4QzVCRjg1MEQ0QkY1MEE1Ci06MTA2NDUwMDA4RTZDRTJGRTczQzNDRjBGRUI3RTE3Q0FCOUNEQUYyOUE2Ci06MTA2NDYwMDA2NDBCRTc1NTZBMERCOERFMzlFQkNERkVGREMxMkNDQUQxCi06MTA2NDcwMDBFRjhFRkU3QUExRDc2NTVBRkNGODVGNzUxRDNBNzAxRDQ0Ci06MTA2NDgwMDAxMkZGRjlFQjEwNTIxOUQxOUQ1MUQ3MjQ1NjExNkZGRjBECi06MTA2NDkwMDBGQjQ0RDBBOUI2RTIxMEI3NDNDMEY4N0IyNzJBMUUwMUZGCi06MTA2NEEwMDBFQjk5ODI5QkMwNEY4M0Y3NEQ0NEJCMzVCODg2RjlGMzE3Ci06MTA2NEIwMDBFM0M4NEI5QjlBNDg3NDZGNjM3QTc4MjhGQTBGRTY1Q0JFCi06MTA2NEMwMDBERkIxMTdFNUQ1MDQ2NjkyNUY3MUU0ODY0REM1RUZEMjYyCi06MTA2NEQwMDBCOERDMDgwNTY3RjJGMjczODVFMjY1RjlFQjU5MDhFMzY5Ci06MTA2NEUwMDA1QjkzMzdENEVENDdCRjVFNjYzNUI3OUIzM0Q3MDQyNTQyCi06MTA2NEYwMDAzQkQ0NzNFQTk4MUY4N0M5QUQ2NEJDRkQ2QzE2RDI3OTkyCi06MTA2NTAwMDBCQ0U2NjgwNkQwQ0QxMDQxMzc0MzBDN0E1OTY2QTY5NzkxCi06MTA2NTEwMDBDMTc1OTZCOEQwMUE3MzdEMjBEMjA1N0MzN0QwNDIyRjMyCi06MTA2NTIwMDBENjdFNzIzNDQ2RjFCOEJDRjUzMjhGMTdDRDMyQzc3REI2Ci06MTA2NTMwMDBGMjU5RjdGQjNGMDc3OEYzMEZCOUZENjExNjFCNkZCMkY1Ci06MTA2NTQwMDBGNkFGQjI0MDAxRTI2NUY3MEZEREZGNTkwMDEzRkNEOTQ5Ci06MTA2NTUwMDBGQTQ5QTk4ODE3OTAyNzQ5MjQ0RjJBRTJEQjNEMzFGNEY0Ci06MTA2NTYwMDA2QUU4MUJCREI0OEZDODRGREVBRUI3RjdBQkYyRDM5NzY2Ci06MTA2NTcwMDBDRTA1MzhENjdBNzQ0NkUzMDdCMzQ5QUUyQjIyNUU3OTRFCi06MTA2NTgwMDAzMEYzN0E2NzA3RkE2RERDNDUyNERGRjc2MzFERkQzQ0M1Ci06MTA2NTkwMDAxOTk3MEM4Qzk2Rjc4QUYwMjMxOUY1NDZFMTQ3QjI4RUNECi06MTA2NUEwMDAzNzU1RTU3QUYwN0I0QzlGOEE3ODE4RTUwODY0NjA1QzgzCi06MTA2NUIwMDBDRjk2OTFCRTczMEU4QzY3RjM4MUJFMTVFN0JCQjE2QUFGCi06MTA2NUMwMDAwMjlGQUZBNkZFMkQxQUZGQjA3MUZCNDgxRTMyQkUxRjAwCi06MTA2NUQwMDAzMzc3Q0E3OUUxQTM0NDBERENBNDQyMTk5QzA0NjYwNDE0Ci06MTA2NUUwMDBEMjdGMEUwQjM1RTJGQUQ2MzVGM0ZEMkREMkVFMTZEMTYxCi06MTA2NUYwMDAyRTg4NzkwNTNERUQwMkQwNkU4NEE5REQzQzlDMEZCNDU4Ci06MTA2NjAwMDBEMzRERUQyQTYyREFERDI2RkE2M0E2NzFGNTk4NzE2QjM3Ci06MTA2NjEwMDA0NDdGQTRDRkY1QjRGM0M3RjRCNzU0QjQyMzNEQjBBNzc3Ci06MTA2NjIwMDA5RDE2RDNERjMyMzFBRTZFNkFFNzhCNjlGN0VGMDY3Q0Q5Ci06MTA2NjMwMDBBNjcxOTk3OURDOUVGN0E1NzZFMzNERjk2MzBGRTQ0RkU3Ci06MTA2NjQwMDAyMTdBMzk5NDNGQTU3QzJFOENCM0Y0NDUxQjk3MTE1QkJFCi06MTA2NjUwMDA3OTNFODc0MTU3RkI0NUJCMjZBNEFCNDJDQzVCNjE2M0M3Ci06MTA2NjYwMDBBQTI5NEY4NUU3QUQzNEJBNjczQTAzNTFDRjdCRThDQTEwCi06MTA2NjcwMDAzREQzMTdGRkY5NUM1MzdCNzU4RDhCRTlDNUY0OUNEQTJDCi06MTA2NjgwMDAzN0ZENUQxMUYxQUExRjRDNDI3RkVCRUEzNDU5RjhEQjZDCi06MTA2NjkwMDBBRTY5RDA1NTkwNjMwMzU0NTM3RDREODY3ODZGQkJBNjg5Ci06MTA2NkEwMDA4MTAyNjIyMjNFMDJCMkYyOUI4NTUxRkNERDMzRkUzRjQ1Ci06MTA2NkIwMDAwQjdFRTEzRjhFQzAzRkRCMDJGRjZDMzNGQ0EyRUVDQ0QxCi06MTA2NkMwMDBFNEVGRDU5NUIzMjdFMTdDMENGRkYyRDlBNkU1MEQ0MUE3Ci06MTA2NkQwMDBGN0ZGRTZGOTU1NTlFNjU3NjU5OTVGOTU2OTdFRjY5NTk2Ci06MTA2NkUwMDA1NTkzODI3OUZGOTdFNkI3Q0MzMkJGNjU5NkY5MkQzMzgzCi06MTA2NkYwMDBDRENGQjk3MkQ5MDVBRDlGQjVEREREQjY2NjkyQjc2QjZBCi06MTA2NzAwMDBGMzVGMjdGRDdGQUQ4OEUzMjZBQ0Q0MUI1NkUwN0JFMDJBCi06MTA2NzEwMDBFRDc2RUE0RjIzRjkzRThBRTk5RkEzM0NFOEVGQkI0N0I5Ci06MTA2NzIwMDA1NDhERTQ4MkQzMjM5MzVDNjBGOUY2NTA3RTM2ODc2QkY4Ci06MTA2NzMwMDAyNkM4ODVFNzU0MUY5N0RGMDJDRUQ3MkNGNTBGMkQ3NTlECi06MTA2NzQwMDBGOEU1NkZCODZGRkE5ODYxNDc1QUU0N0MzRkZCREFDQTA0Ci06MTA2NzUwMDA0Q0JFOUZBQ0YyRjhFNUU4N0Q0RDE1QjgzOTM4QTA5NEYxCi06MTA2NzYwMDBFNDRGQTM4RkNCOUZGRDAzODQzQzRBODM3RDhERkM0NDgzCi06MTA2NzcwMDAxOTI0QUY2QzQyNUVERDU3Q0ZGM0Q4OUE0NTdFNTA2MzQzCi06MTA2NzgwMDA1QTExRTFBNzU5RDgwQjJDOTQ2NURBMzcwRjRDOUNEMkRCCi06MTA2NzkwMDA4NjdFQUIzMzQ3NzlERUUyM0ExQkQ3Qzc1NkQ2MzM5REE4Ci06MTA2N0EwMDBFOEFCREU0OUY5NDVGQkEwREYwMDM0NjgwNTdEMEZDQjdGCi06MTA2N0IwMDBFNzQxREZDMzcyNEY3RDA2OTVCRkFDRDdBOERDMDFFMzhDCi06MTA2N0MwMDA2MkY5NENCRDlGMDU2MEZDNkRGNTYzQThGQzMxRUE4QjU2Ci06MTA2N0QwMDA1MDNFMjBGNEM1MkJEMjY0RjI1NzZDQUU4NzJEMzM5RjA4Ci06MTA2N0UwMDBGNDQ4MkExRkE5Rjc4RDU1NjFCQzlGRDQ2NzUwRkQyMzNCCi06MTA2N0YwMDA2OUU2NTgxQkQ5QUQxRDhENDkwMEU3RUU1N0YzMjg1RkI4Ci06MTA2ODAwMDA2OTQyOUE0QUZCMkY1M0MzNEE1MjQ5RTRCOTgxRDc4RjUwCi06MTA2ODEwMDBBNDQ5NTdFMDc3RTMzMjY0REVDRTE5NkFGNEM2NkY1N0I1Ci06MTA2ODIwMDA4NkVEQzY2NEE4MDQwRjczMDcxNTZGNUFEQzc2RTUzNjRCCi06MTA2ODMwMDBDMDRCQTk1QkY0RTcwQjM0N0FFMkY3RjcyRDZDNTdFNDExCi06MTA2ODQwMDAxNkZEQTU2OThERUVGOEZEQ0RDNDcxNDdGQTM4MUU1OEM2Ci06MTA2ODUwMDA0NjQ3NDM2MkZDNzYzNzYwQkI0MjlGOTg2RjU2NTg0RTVFCi06MTA2ODYwMDA4QzNGRUU2QzFDMzcyNUE1Mzk4MEYxQUQyQjY3MzNEMkY4Ci06MTA2ODcwMDA0NzZENjlEQTY2MjkyQTNFMTQxQTUwQzE2NEEwRjM5NDYwCi06MTA2ODgwMDBENEU2M0E2Q0Y3OEQ4MDlGRTVDMEY4OUFEN0NGNjRBMDI0Ci06MTA2ODkwMDA2NzlCMUJERTE3NjI0RTEzOEY0NzhEQkYwRURFQTMzRTM0Ci06MTA2OEEwMDA4Q0VGNDc0NEJEQzdFRkExMUMzQjRCN0M5RjY0N0VERjUwCi06MTA2OEIwMDBBMzk3QUY2MTNENzkzQzk4QkM2NDZCMzJENzkzNjVDRUFBCi06MTA2OEMwMDA5RkNCNTcxRTk4ODQ3QzlGNkNFN0VGN0Y4QTc1RDRCNzY3Ci06MTA2OEQwMDA5NjMzNDMxRUYxRjYwOUZDRkQ4RjhDRjY1RUZFRkUxNzIzCi06MTA2OEUwMDBBMjdENEEwQTlGQjc2QjhBMzM4NDcxQjE0N0JFN0I0OTQ4Ci06MTA2OEYwMDBFNkRDQzJDODdDMkZGQTVFQzFCMEI5NTFGMzdCRTQ3QjAxCi06MTA2OTAwMDBFMzMyRTdCQTIzRjNCOUU4RkIxMzg2Q0RFREMzRUU0OUQyCi06MTA2OTEwMDAyRDk3N0I3MjY0NTE2RTI1MzcxNzkyRkMxQ0U1QTgyMEQ5Ci06MTA2OTIwMDBCOTMzNkE2MEE5OEVGQ0FDQUNFNzcwRkQ4N0VEQUU4NjJBCi06MTA2OTMwMDA4NjNDODIyQjg4RjJDNjgwRUIyNzhCQ0Q3MDBEQUUzMTYyCi06MTA2OTQwMDBDM0Y1OTMxQTMzNUM4MzZCRkI4NjZCOUQ4RENCQjVERUYxCi06MTA2OTUwMDBFMDgzRjFGNUU4RjExRkZEMzdGM0Y4NDM3RTYwMUVGRjk5Ci06MTA2OTYwMDBEMTFGOThDNzFGNzJFNzU3MUUzRjFDQkQyRTlCNkUzNzY1Ci06MTA2OTcwMDA4RjlGQjVDNDNDRkVBNjI1RTZGMUIzOTY3RUI1RjFGRjI4Ci06MTA2OTgwMDA1MUZBNzg5MjJENzBDNDI2RjQ1RDI1NUFFRkFDMEI5ODFECi06MTA2OTkwMDBGNDUzNjhGNzhBNjgxNzU0QTJGNUQ4NDBDMEE0OUY0MjAwCi06MTA2OUEwMDBCQkQ3NkQ0MkRGMzVCNUFCODg2OUY3MDdEMTFGMzM4RDkzCi06MTA2OUIwMDBBQkM3OENEQjIxRkEwQkNCRDFGREY5NjNGQUZCOEI2OEZCCi06MTA2OUMwMDAxNzk0QTNGQkQzNjJGQUZCQzA4MENGRDRDRTE3RDNBRTBCCi06MTA2OUQwMDA0QkI0NjNBNjcxOTk3OTVDRjgyOTUwQTE5RkVGQjMwNDc5Ci06MTA2OUUwMDAzRkZBNDc5NjRENUU0MzcxQUY4MTJDMjBBMUJGQ0Y5N0YwCi06MTA2OUYwMDBDQTQ2MUQ4MkVGNTkyRUNGQkY0RjlFQjJFQzYyQjQzQjA4Ci06MTA2QTAwMDBENzI0OUJGRDVDRTk3NjZFOUZEOUVDMEE5NUJFNDQ1NjZGCi06MTA2QTEwMDA0N0Y5MDBDRTYwRTY4Q0E4N0M4QjZBM0JERkNGN0FERTNDCi06MTA2QTIwMDBCQjgzOTlENzQ2QkQxRjI4QkU1RjIzRTJENDY5RjZEMjQ3Ci06MTA2QTMwMDA0Njk0MkJCRUMxRDAzRThFQkYyMjUzOEM2QkJDNjc2OTdGCi06MTA2QTQwMDBGRTc2MURFMERERjhBRjMzNDdBM0JGMjgzMkFFOERCNzI5Ci06MTA2QTUwMDBCQjU4OEM5QjE1MUZBRTM1RDk3Q0RDNDUzODZFMjEzRTZBCi06MTA2QTYwMDAzN0Y0OEI2MDI2RTFEN0M3NEJFM0Y5ODM5RUVGNDlGRkVDCi06MTA2QTcwMDAwNTc4NTkzREQ5MjkyQjQ5RjA3RTNERjc2RjFBN0VGNkVFCi06MTA2QTgwMDA2NDdCOUQxM0YzNzYxQjJGOTJEOTYzRDgyRUFCNkYzRjk3Ci06MTA2QTkwMDA0RTUzQkREOURGQTlGQTJBNzRCNEY3MDY1NUZBOEExNDAxCi06MTA2QUEwMDBENkZCNzcwRjk3Q0JFNUYxRTIwREEzQzVCQzlBMkEyNzU5Ci06MTA2QUIwMDAzNUU3QzFGOEVDOTBEOTZGMEI4NENEQTJGMzYxMEE5NTRDCi06MTA2QUMwMDBDMDY4N0IzQ0JGNkQ1MzgxMjlBRjNFNzk1MERGN0VEQkQwCi06MTA2QUQwMDA0NkExNUZGNENDMDMzQThBQjc3RTM3MEFGOEQ4QzYwMkRCCi06MTA2QUUwMDA5MzlFOTU5QzMyOTNGNEFCRTQ4NkFCOURCRTM4REZBREFDCi06MTA2QUYwMDBCNUY0RUY2MjMzNzU2Qzk3OThENkNDNjRFRTVDMzRFOUVDCi06MTA2QjAwMDA2MTREQkVDN0Y4M0U5NDA5MzIwOUUzM0Y2OTNCQzJDOEY0Ci06MTA2QjEwMDAzRjY3NEJGODc5MEEzNTIzMTQ5NDI4Q0VDMUU3ODk2QTc4Ci06MTA2QjIwMDAyNUZFMjRBQUUxQTAwQ0VEMDc2RDU0NTkzODk1QjFGQjYwCi06MTA2QjMwMDBFNUMwOEQ4ODFGNTc1RTMzRjlDNzU0OUYyRTIxOUVDRTI2Ci06MTA2QjQwMDBEOTQyNTdEMzc5MDI1MDE3RTNFNTdGQ0NCMzczM0ZGMEI2Ci06MTA2QjUwMDBDM0RBQ0NERjY1Qzc1OUM3REJFQzlBNDkyRjFERjRBOTBFCi06MTA2QjYwMDA5RDg1OEI3QjZGMUY2OUM3RTFFQUExRDMwQ0EwNEZFNDIxCi06MTA2QjcwMDA2RjhERDNFOUVEOEFCRUQ4NEVGQTVBOTY4RkZDOEU4Njc5Ci06MTA2QjgwMDA3QzM1Rjg1RkM0QjdFNzhFNjFFMjQ3QkJFMTBGMzA4RjE5Ci06MTA2QjkwMDBEQkRBNkMzQ0JGRUY3MzY4MUQxNUY3Qjk0REY4QkZFNjQzCi06MTA2QkEwMDA4QTc4RjczQzU2RTFDNTk3QTc5OTVDOEU3Qzc1OUFCREFCCi06MTA2QkIwMDBFQTJEOEU1QUFGQjU3NjNCMUY2NzhEOERGQzVCNDYzQzQ4Ci06MTA2QkMwMDA3NzdFQjNDREU0RUY1QUI4RDE1QzVGQzA2NkE2QTM1QzE0Ci06MTA2QkQwMDA1QUIwQzFDNkYwN0NDNzZEMTY3RkQ4QkZFMTdDNjE1RTNDCi06MTA2QkUwMDAwQjU5REQyQUQ0RDM4REZDQTBCOTNFQTY2MkZFRjdFMjk0Ci06MTA2QkYwMDA1RjNENTI4QTc5NDNDRDc2OUVBRkYzMDFEMDhCMTZDNUE3Ci06MTA2QzAwMDA1NzU1RUU5MDFERURGOTc3NzYxNTVGM0Y5RUUxRjdBMUEwCi06MTA2QzEwMDA1NTgzNTA5RTI2QjNCOEU3OEM2RTVENjM4NkFGM0ZGODEwCi06MTA2QzIwMDBBREYwMzJENjQwRjBGNjA2ODdCQTU1OEFFQkJGN0FENDdCCi06MTA2QzMwMDAyRTk5RTI0NENCOUNERTkxMENFNENDMzkxNzJGN0JGQ0RGCi06MTA2QzQwMDAyOTdGNzQ5MTdDREYyN0U4MDgzNkMwQ0JCODlDQUZCQkE2Ci06MTA2QzUwMDAxQ0NCRkVCRTNCRDhDQjc3OEI5RDFENzZFNDhGNUFCNUZGCi06MTA2QzYwMDBBRTVDOTIyMzcxMjY4NzJEQTAwRjg2RUY2QzdCMjY4NjYzCi06MTA2QzcwMDAwNzMzNTNCQjM1RTdEOUFFNERDQTM5QUY3NkU1NzIxRjNFCi06MTA2QzgwMDBGRDc1MEE3OUY5QzJCNjlGRDlEMUJGNzhGQUE5MTNENzkxCi06MTA2QzkwMDAyMDFGMkVGQUI1QzI5Q0QwQUU3MzlCODc4NTcxNUY1MEMyCi06MTA2Q0EwMDA0Mzc2OTQyNzU1QkI5NEI4NzE1OThBRkNDM0ZDMTdGREYxCi06MTA2Q0IwMDBDMjQzNzJBMjZBODcyMzM0MURCRUFGRkFFNTNCMjMxOTkzCi06MTA2Q0MwMDBFMEExQjNBMUZCRjA2MERDNDc5RjkyNzg3QzM0RDgzMTFGCi06MTA2Q0QwMDAxMkY3QUQyQTk1REQxMjJGNEZFQzg0QTBCQjUzQ0YyNUMwCi06MTA2Q0UwMDBDRUMyNzU5NUI2RUVCRjk5RkE2REI5QzFFNjg4OTIwRjFFCi06MTA2Q0YwMDBDN0M0QkUwNEVEQjg3RkVENDkyOTk0MUY0NzdFMThGMTQzCi06MTA2RDAwMDBBQzUzNEY0QTFDQkUzREI2OTAwQkUxREJCQUQ5MUUwMDE2Ci06MTA2RDEwMDAzODZBQjc3RTQ4NzQ1NEY2OEJFRDVFQzQ0M0VEMUVDNUU5Ci06MTA2RDIwMDBFNEY3QUREREFBODQxRDIzQTkzQzgxMjVDNjUxMjRFMEVBCi06MTA2RDMwMDBFQjFBQzZFNTYzQ0RBRUM1RTQwRkFGNjk1OUY3QTFFMjIyCi06MTA2RDQwMDBDNUVGQ0RGNDBDNzhGMTg3MTFBRjZGMjhGRUU5NThERjVECi06MTA2RDUwMDBGOTczQUYwNkE4RkFBMEZENzEyRkUyMTVGQTlENjM0RkYzCi06MTA2RDYwMDBDMjc4QUVEOThGOERGRDdGOUExMkRCMUY2M0RENzZBNENBCi06MTA2RDcwMDBBRkRBOTZCNTdDM0MwQkJGN0M4MEJGNjRDNkM2NEY5QzI3Ci06MTA2RDgwMDAwRTRCMUM2QjZCRUE3OUU5ODk4QkI2OUY3RDM0MDhFMzY3Ci06MTA2RDkwMDA5RERBRjFENzQ3ODNCODdGRkZCRjhGMUVCRDEzRjU5QUU5Ci06MTA2REEwMDA3RDJFMUZGMjdCRUQ1M0FGNzk1OUQ0M0U5OEUzRTA3QzAyCi06MTA2REIwMDBEN0Y5RTRDRjlGNzgxOEY4QTRGM0I4ODM4RUVFNzVFRTc4Ci06MTA2REMwMDA3RDZGODgwNkYzRUQ3Q0Y2QkZEMzM1Njg3RkM3REVBQkY5Ci06MTA2REQwMDBDOEVFQkY2Mzc3RDlDMEJFRjY0M0E0RDM1MEY0MzkxN0M5Ci06MTA2REUwMDA5MUM3QTRFRDkxNTBEOTAyNDM1RTk0OTY3NTM5Qjg0QjgyCi06MTA2REYwMDA2MTJFODBGM0Y0MzE0NzA4RjM5QTZCRTFEOUIyMjI1QzNCCi06MTA2RTAwMDBBN0M1MjQ3RkIxQkUxQ0YwNUJCMzZERjU4N0NBQzg3OEY3Ci06MTA2RTEwMDA3ODBFMEU5NjMxQzc5RTAxQkI2NEUwM0E1RkZCRUQ2RkMyCi06MTA2RTIwMDA5NDYwNjlBMzM4NDkyREVCMjZGOTY5RkRBRUY2MjhBQ0NDCi06MTA2RTMwMDBFNzY1QkRBRkRGNTlGNkI5MUQ4Mzc4QjVEQkQ2RjI3MUQyCi06MTA2RTQwMDAyREVCNzcxQTdGMTkxQkJCN0VCQTY1RkRDRUIyRUE5Rjg4Ci06MTA2RTUwMDAzRThDMkY3N0E1QzY4REU3MUFGMUFGQzVCQkZGQTU0RkI2Ci06MTA2RTYwMDBCREM5OTAwM0ZERTFCNzUyRTI3MDc5MUM3QTg1MDNGOTQwCi06MTA2RTcwMDA2OUM3RDM0RjNDOUNDNkQ3NzczQTIwQTQ3M0ZCRDkyMTZFCi06MTA2RTgwMDAwQ0U4RTNBNEFERkI2Njk0OEZERDdCMUQzRURDQ0ZBQjRECi06MTA2RTkwMDBGNkJFNDFGQ0Q1QjlGQjE1QkI0NkYyOTFCOTI1RDAxMzFFCi06MTA2RUEwMDAzQTU5Q0Y0RjNCRUEwRDM1MTJBRkQ0NkVGMTg0MURERTU3Ci06MTA2RUIwMDBDODNBRDU4NDY2OTQ2QjVFN0E3RTgyOUU4NzM4RERENzI5Ci06MTA2RUMwMDA4NEY2NUYyN0M1NTlCN0Q1OEUxQzJFOEY0MzNDNjk2RjVBCi06MTA2RUQwMDBGMTk2M0ZEODk5REJCQzlFRDIxODVDQzcxMzUzRjA3OTZBCi06MTA2RUUwMDA2RkVCNjhDQ0RGODdGM0JGM0M2QTNEQjc3MDdFRUQ4REZBCi06MTA2RUYwMDAyRjNCMzczQjU0Q0M0NzMwRDZCN0QzQzZGNUZEREE5MDlECi06MTA2RjAwMDBGNDA2OEJDM0FGQzZGRTc2QTFGMUQwMDY4NzI1MUUyQUY0Ci06MTA2RjEwMDBFNkRCMUYzRkY3M0Y4RjBCQzNEMzEyNENBQTFDMUQ4QjIwCi06MTA2RjIwMDBBRjUzOUZDNzk3RUY4RjM4MjQwMTQ3NURGOUEwRENEODk2Ci06MTA2RjMwMDBGRDQ5NjUxNUMxQzFEOTExNzg0Rjg5NzNCM0E3OUU1MjE4Ci06MTA2RjQwMDA0MjQxNzhCRUFBRTUyMEM5NjlBQjVDQThFOTQ1NEY3RUZECi06MTA2RjUwMDBDNjE4NkZDRkZFOTEyOEJGNEUxRDc4OEVFOEIwNjZEQjU1Ci06MTA2RjYwMDAwOTNCREE0Nzg3QjdFRUI0NzcxNDQ2RTgxRUU1N0Y3NDJECi06MTA2RjcwMDA1RUU0QTk2N0Y2OEYyNDM5OERGREM3NTk5RjVGMEI3OUIxCi06MTA2RjgwMDA1N0RCNkFFRUJGNzZEQjg3QTZGRTE3MDU1QkVDRTQxN0RFCi06MTA2RjkwMDBFRDY3OUMwRjU0RkQwNjlDRUYwN0VEMzY4Njc5RjcxRkQxCi06MTA2RkEwMDBCNDI4RTVGMUY0OUI5MEMzNjZDQTgzNUFFNTI5M0Q4NjZGCi06MTA2RkIwMDA3RTQ1MjVDNUFFQTFCQzZCNUFBMUJGMTFBNDczOEYzNjA3Ci06MTA2RkMwMDA3RUVFNTFENThGMzk4MDJGMUI5M0VEMUFEQUFCNEQ5RTkzCi06MTA2RkQwMDBFQjk5MTYyNUI3OUIyREY4RjRBNUY5MjY2MjVDQ0QzNzAxCi06MTA2RkUwMDBCOUEyMjREQTdFMzJFMDRGRDY2NTEzRkM3Nzc4Q0EwNzVGCi06MTA2RkYwMDBFMjc5MDlCNEMzMzQ0QzMyNTBGREU0NTc1NkJDNTNDQTRECi06MTA3MDAwMDA3MTNFOEE0RkY2QjlFMkVFQ0ZCQzNGRjRCNzIxRkREQjBCCi06MTA3MDEwMDA3QzMyRDNBMkU4NkI1NEQ5RjVDM0QxRDVBNjMyQ0Q5NDM2Ci06MTA3MDIwMDBCRjdBRUY2NDFFQzczNUU2N0ZFRjQ1NkMxMzAzQjk3QjZCCi06MTA3MDMwMDBBRkQ0REQ4NkY5RUNDMUFCNzk1RTIwMTM3NkJBMTdFRERCCi06MTA3MDQwMDBGNEVDNTg3RDhFRTlCQTg2RjI4N0M0MEY2RkNGNzQyM0IzCi06MTA3MDUwMDA3RjE0N0VCRTBGRTBDODk4QkYyM0ZCNDk5OUZGQkVBMkY0Ci06MTA3MDYwMDA1MzNFOEYxREM3Q0Q0NUZCMjk0NENGMTM1OTk4RUE4QTVCCi06MTA3MDcwMDA5M0NCMUYwRkFCQTNFNzQ5QUNBMzE5Q0YzMEJERURBODRECi06MTA3MDgwMDBGOEQ0MDFDRkVGMkI0RjkxMzhEQzYxQ0FENzQ4MTZFMzEzCi06MTA3MDkwMDBDODg5NTk5OTdERjEzRjlCQUM5RThBRjZGQjM4RDgyNjZBCi06MTA3MEEwMDBCMjRCRDBFREY4NDU2QTA0MEY0NjNFOUNEMUVGQkRBRTIxCi06MTA3MEIwMDAwOTEyRUUzNzM4QkZDMTc4QUU0NzlDOUZGN0Y1Q0M1NzIxCi06MTA3MEMwMDBBN0ZBMDBBMzZFMTkwNzVCRkE0QUM1MTY0QkFDMTg5MEQ1Ci06MTA3MEQwMDA1NDA1NkYwRDY4MjYzRkM3MjBENjQyNjUxNjZCQTczMjUwCi06MTA3MEUwMDBDNUU5OTM1NDgyRUYyREYyNEJDOUVDQ0ZFQzhCNDQwQkU2Ci06MTA3MEYwMDA3Q0U3QTE4RjlGOTNGNUUzMDEyODFCNkRFMkY5REI5RUVFCi06MTA3MTAwMDBEMEUzNTBERjkwQ0M0Q0U3ODM3MzlEOUNCRjJGNzdDQUIwCi06MTA3MTEwMDA4NjVGMjYxMDZENzczNUIyNkE5QUJCMkI4RDFGNjMzMTVGCi06MTA3MTIwMDBCRUJCREUxOTE4RUU4Q0EyMjdDNUREQ0VGM0JFODRGREYyCi06MTA3MTMwMDA2QkQ4RUI1NzI5Q0IyOUZFQkUzQTgzREJENUJEQURDRjRCCi06MTA3MTQwMDBDQUZBMEE5MzVENkQyRDlCMDczOEU3NkM2NjA0M0ZGNzFBCi06MTA3MTUwMDA1MzQ5NEU3RTdFNTk2NzlBMkY5QUZFNjA1QzY3Njk3NDI4Ci06MTA3MTYwMDAzRUEzQUU5MzdEMkZERURCNjA3QUY4RDI4MTc4NTQ2MjQ1Ci06MTA3MTcwMDBFOTZGMDZEMkRGNjhBNEJGMEVEMTQ5MzdGOTI5NkU1N0VGCi06MTA3MTgwMDAwMjU3RTM3QzMzRjJFQTI0RkUzQzIwNzFCRjk3QUVFMDY1Ci06MTA3MTkwMDA3Q0QzNDVGRjcyNjI3NTY2QTA4Rjc5QjI1OTQwMUY1MTRBCi06MTA3MUEwMDA3OTJEMUI4NEZEQThBQTRDNEQyODQyNzgzNjg5NzVCN0U1Ci06MTA3MUIwMDBEMkE1MzkzRkQ1RDBEN0RDQTJFNjEwNzk3MkJGMjk3OUE0Ci06MTA3MUMwMDA5NUNFQTNBODY5NkVDQTRGNzE5NzM0REQ4RUU3N0M1NUMyCi06MTA3MUQwMDA1NkU3NDNGOUU5MzZGMjRGRkMzQzlGRDBCMDhCNUQwNTkyCi06MTA3MUUwMDBFNjNDNEU4NzI1NkZENTI2RUNFRjk4M0M2RUIxRUZERTdFCi06MTA3MUYwMDA4MzBGRTJFOEMzRDY3REY3NzY2N0ZDM0MyNDM2MjY3RTEzCi06MTA3MjAwMDBCRUEwQTE4NzlEMkZERDVCRURDODZBNjdGQjYxMUFEQzFDCi06MTA3MjEwMDBBNzUzOUVBNTJBRkMwRDEzQUZGMzkxMUZCQzZCOUJDNDEzCi06MTA3MjIwMDBDRkFENTlFOEE4NkI0N0QyNDg5NDg3QzhCRjc4Q0Y0NUZGCi06MTA3MjMwMDBBMjc4MkU2RERCQkYxRkY1QTYyNjJGRDM5MzUzNDhDRTIxCi06MTA3MjQwMDA2OTRBMkU5RTk3MUFFNTk0QTA1Q0JDRUJDMzk3N0Y4RDhDCi06MTA3MjUwMDBGRUY1NTY4NUUxRDZEQ0U1MzZFMjkzN0EzMjJFNTYyMkVCCi06MTA3MjYwMDA1QjZGNUFERjBCOUQ0RjZDNUM5MUYzREIxMjlGQzE2RjFDCi06MTA3MjcwMDA2RUZBRkVDQzM2ODlDRTRGMjk2Q0Y4OEZGMUZDNDM2RDQ3Ci06MTA3MjgwMDA5QjhEODVFMEZEMTlDNkZCM0ZCMzg5RUIwMzBCNUY4NDQzCi06MTA3MjkwMDA1MUYwM0NBODE4MUZGN0E1RThGRDIzQjUzQzgxNjlEMTQyCi06MTA3MkEwMDA3OTNDNDFCRDFEQ0ZGRkNGMTNGODE4NTA5MTYyN0FGRjkyCi06MTA3MkIwMDBEN0I5RTU2REU0OUYwOUYwN0IwMDA2Q0UxQTY0RUE2RjRBCi06MTA3MkMwMDA5MUIyN0MyODI1RTEwOTNGODYwNkZGOTBGRThDRjk5RjRDCi06MTA3MkQwMDA5MzAzNzZCRTRGNTQyNDg1NDk5RjAxRkIxN0VEODY5MDlBCi06MTA3MkUwMDA0NEY5NEE1NjdGNDdDRDFFODlGNkE3REI2MDdGQzJGMzdCCi06MTA3MkYwMDAzOEI3ODUyQ0Y2QTMyNThGQ0VDMEI3OTUyRTBGMzk4NUNDCi06MTA3MzAwMDA3REUwNjZFRTVFRjBFQTBGOTc1MDdDOTRGODZBQzk4QkQ4Ci06MTA3MzEwMDAzQzJGNkNDOTc2Mjk0NDc5Q0MxRDQzOTMxOEUxNTkyMTNGCi06MTA3MzIwMDBCRkQxN0JBQ0VFNDFEODM5MjJGNDZCQzE5QjIzQzM4QzE3Ci06MTA3MzMwMDA2Nzk3NjZDNjczNjI4MTE5QUYxRUJGMTk4RjU2M0MyN0M3Ci06MTA3MzQwMDA4REM5MzFCNTVGQTQ1NERCODlDODA0OUUwQkUwMUZFMkYwCi06MTA3MzUwMDAxOUU0MjBDREEzMDZFNjExRDY2MkYxNTlEOTdBRUYyQUI1Ci06MTA3MzYwMDBGNDZGRjQ4QjQ3MEJGRTRFNTlGMDc3OTZCNUVFRTc2RjRFCi06MTA3MzcwMDA1OTg1MzM5RDU4OUJFNjlEQTk4Njg5N0ZBQ0ZDNjZFMEM0Ci06MTA3MzgwMDAyOUNCRDczRTkxOUVGOTNERTQyRkNFMTA5RDQ4RjNGOENFCi06MTA3MzkwMDA3NzgzOUMyRDlDNzk4QUZDQzQ2RjQ2N0U3MDYyQ0Y3RTc5Ci06MTA3M0EwMDBGOTBFRkIwMkNBQTUzMzBFOUQ5OENCNjJGOTZCMTM5NkJBCi06MTA3M0IwMDBDMEQ3MkRGNTRFREZCQzdDOEM0RjMzREYzQzFCQzZBQkZBCi06MTA3M0MwMDA3RDU0QzZEOTQ3QTk3RkEwNDdEQTBGRUVDMUI4NjQxQTI5Ci06MTA3M0QwMDBGMkI1NEFGMTJCNUNBQUU5NTA0RjZDQjVGOUQwNkY3OTQwCi06MTA3M0UwMDA0RjUxRjczNUE4QjdEN0NFRTc3OThFMzcyNzcwRkZFQjI3Ci06MTA3M0YwMDA5MjA0QkVCRkRBMTI3ODVFRjM1RDE1MzJEM0QxQkU2RjUwCi06MTA3NDAwMDA1NTQyMTJGQThCN0NGQThCNTdBMkRFRDU2QUQzNjg1RjlECi06MTA3NDEwMDBGMzc1QkZGQzFEN0E1RkVDQzNGODZFQTZEQzNDMEFFMTk1Ci06MTA3NDIwMDA4MEY2RTQ2RkVGNkE3REM3N0I2Qjk0QkVEM0I5RTdGRTRECi06MTA3NDMwMDA2MUI4RUYzQzI0QjNDQTc4N0E3Q0JFOEJDM0QxNTlGMEQzCi06MTA3NDQwMDBFNzc0MjRDN0M1Q0U2RUIyQTM1Nzc3RDQ1NUUwQkMwQzAxCi06MTA3NDUwMDAzQkMyQkU4QkZCQjc2QUY2Q0MyMDdERjJEMDAyN0UxRTBCCi06MTA3NDYwMDA3M0Y3Mjk3RTFFNzM4QTMyRkI5QjIzQTAzRUY2MzU5NTY3Ci06MTA3NDcwMDBDQjREQTY0RjlGOTNDRTUzMjg3MDFEMzc2MEJFMjRGMjhDCi06MTA3NDgwMDBDMTdGQzlBMTA2QzI0RkYzRUYzMTRFRDVGODE3OTVBMUMwCi06MTA3NDkwMDBGRTU4NTJCNzgwRjY5RjVGN0JBN0I0NjE1OUFBQjcxNDE0Ci06MTA3NEEwMDAyMzVGNEY2RTREOUU4OEU3NjQ2QURGRTI3OTk1QTNEQjI4Ci06MTA3NEIwMDBDREZFMUNBNjU0MUY0NDNGRDhEOTYzN0M1QkJFRkM5ODBDCi06MTA3NEMwMDA2QUI1QkIxNERDOEZDNzc2OTg5RjhGRUY4NzZFQ0I1QzU1Ci06MTA3NEQwMDA2MjNGRjJCMkY0MEJDOThCRkQ5MUFDNEY3MzkxN0Y5NDc0Ci06MTA3NEUwMDA5RkUzRjJBQkYxRURBNzQ3MTNCODdEMDM3ODkxNTA0RUJGCi06MTA3NEYwMDA3NTc1MzM3RjAzRTBBOTZCREUyMDlBNkZEN0M3RkM2QUVFCi06MTA3NTAwMDBBNkFFQ0Y5NUYyNzhGNkQxMkQyRTRFMkYwRkQ5NzlEQzdECi06MTA3NTEwMDBGNkExMDVFRUQwMEE5OEM3ODEwNTU1MTdBMzVERjRDOUY5Ci06MTA3NTIwMDBCRjA1MkU4RTE3QTc4OEQ4MDcyQzQ5QTYzRDRGNEY2MjVFCi06MTA3NTMwMDA2MzkwMkY5QUY4RjkzMkQ2OUMxOUVGRkNCQ0MxMEYwNjY0Ci06MTA3NTQwMDA3RjE4N0M5MUI5MjAyMTEwQ0Y3RkY5OEU4QkNGNkZEMjFECi06MTA3NTUwMDA4MjAyQ0E4M0VEREMyNzUxOENBN0IzMDFFMEVBMDM4RkQ2Ci06MTA3NTYwMDA0MUQ2MzAxOEUxQTlEREYzMTFGOTE3OUNBREYxRkREMDNBCi06MTA3NTcwMDBGNTc4NDgwM0U5QjYyMUI4NjIzQ0UwRUI3QkMwRDQ0MTIyCi06MTA3NTgwMDBFNDA3N0I3Mzc2QkNGRTgzNkMwM0Y5OUIxNkI4MzRFMjg4Ci06MTA3NTkwMDBCNzRFMjdCN0EzOTlEQTlDMzlEMzgzN0M1Mjc2RjUyQTY0Ci06MTA3NUEwMDA4MEYzNjFFMDNGMjRGOTg3NkM3RTgyM0JCODk4MzFGMjJBCi06MTA3NUIwMDBBRkFBOUNGRkIzQUU2MTlCRUY4QUIyQjdENkJBMjYzRUE0Ci06MTA3NUMwMDBFMDgyRkUxRTcwRjE3ODQ3NkFDMDJGMjFEQ0ZFQkY5RjZCCi06MTA3NUQwMDBGMzYyRkY1RDlGM0E2OEZEMDYwOTNGOEZGMTVEOEJDMDQ2Ci06MTA3NUUwMDA0RjU5ODJGRTIzRkM5RTU1QTY5MTMwRjQwN0JDQkU3OTBDCi06MTA3NUYwMDBCMEZGNUZCNjA3RjAxRDI3QkZDQkQwNzc1MjAyMjBGQjRDCi06MTA3NjAwMDAwMDlFMTRCNzRDRTc1NkQwREU0MjdCQTI5NjE5M0Y0MTRDCi06MTA3NjEwMDA1MjNFMERGRUMzNDM2Njc4M0VDQjkwQjc1MkFCMTRGNjk0Ci06MTA3NjIwMDA4MERDMkM3MUJBQzNFODRGNDlBOTg0Nzk2MzNDOEEzOTVDCi06MTA3NjMwMDA3OTdGRUQ2NjdEMTQyNTJGQ0E1RDk0MDEzQzU5OUVEQjUwCi06MTA3NjQwMDAzQjg2MUMzNkU0Nzc1MzMyOTc4MzRERjdBQUExNDYwOTRGCi06MTA3NjUwMDBEM0RGM0I1Q0U4M0ZDRUQ2QjU0OTk4NUE5NUEyNkE5NEYxCi06MTA3NjYwMDBFNzcwNTEyNUYzMDc1MTQ4RTYzRTkyRENBM0Y3OEM2NzlCCi06MTA3NjcwMDBFQ0Q5QkYyQjcxRkQxQjI3NUREQzFFMjk0QjA4RkMwQUQyCi06MTA3NjgwMDBGMTM1QjJBREZCMDBBQTRGN0UxNzRCQzVGNTlFMjJGNDMzCi06MTA3NjkwMDA5QkIxQTdCOTNDMzJGMkZBNkI4NUJENjE5NTQ3Q0YwMTJBCi06MTA3NkEwMDA5REEzQzAxOEZCMERCRUVGOEQzREVERjYyM0ZERjRDODg0Ci06MTA3NkIwMDBBMTA1NTM2ODFGMkQ2QTJEM0U4OEY5Mzk0NTZGNzE3RUVCCi06MTA3NkMwMDA2NDQyRkU4MEY1NDY3ODI5NkQwQjJBODgwRkFCRENFOTExCi06MTA3NkQwMDA0RkRFMThGMkM0QkFDRUEwNUNGN0Q0QjMwMDI5QzU2RDUyCi06MTA3NkUwMDBDMDY3NTFGQkI3NTU0RTFENzM4OUZENTVDOEE5QjM2Q0QyCi06MTA3NkYwMDBDMkMwQUJCNDA4M0QxNTJERjMxRjc0NDREMThGMjFBNzMwCi06MTA3NzAwMDAyMkY0MTQyMjNBQjQ4RTIzMzE2NzRGREQ5NzhCRjJFNUQxCi06MTA3NzEwMDA4ODgyN0U5MEFFODkzQzNFQjk0MkYwNTFGMkM3QTFBQjVGCi06MTA3NzIwMDA3MUZFMUI1QUE3QkE5MEVFNzdCNDk1Mzk5MUFEOTY2NDY1Ci06MTA3NzMwMDBGMDczNUVFQUZFRUI4MjRDOTA0Rjc0NUNEN0M2OUMxQUU1Ci06MTA3NzQwMDA5RTI5MUYwRjJCOEZGODUwN0M1MDhGOUFENzk5NjY0OTJFCi06MTA3NzUwMDA5QzczRDQ5MkFFOEI3MzNGODI1MTJFQzlFMEU3Qjg3NjBBCi06MTA3NzYwMDBCNEU1MjQ3MTNCMzM0Q0VCREU0M0Y3QzIwRjYxRjA4NTg3Ci06MTA3NzcwMDA0MUVGNTZGQTM2RjhBMTkxNzFCRjg0QTEzRjI4NTI4QjkwCi06MTA3NzgwMDBCMDBCQ0Q3RTgxNDZDM0NGMTE3NDUxOUNGODBFQTEwRjcyCi06MTA3NzkwMDAzNkJBMkY1OTM3MDE3RTZEMEE0RkYyNjE1Q0UyMEU0RjA3Ci06MTA3N0EwMDAwRUU1MzNERjMxODBFM0NEOEEwN0EzQUNGRDE0RjRDM0NCCi06MTA3N0IwMDBBOEJDRjM1QUI1OUJGQzVBQjU5RkRBNERDRjBEQkNGNjY5Ci06MTA3N0MwMDA4NjBGMDNBRkUzMTBBRkQyOTdDN0VCQTdCOEJFQTM2MzkyCi06MTA3N0QwMDBGMUZCNjVFNzlEQjU2NDRDRENGMzcyRkY1N0U2M0Q5RTE3Ci06MTA3N0UwMDAwNTdFREQ0MTc2MTczRkI3NjFEMDk3MjEyRjRBOTc2RTBFCi06MTA3N0YwMDBDQzI0RTI2ODM3REZFQjY1Qzg5MTMxN0JFQTBFQTI4QUMwCi06MTA3ODAwMDA2ODk1MTM5N0I1QjI2QjExNEY2M0MzMkFDM0EzMkVGREJFCi06MTA3ODEwMDBDOThEOEZGMTk3NEMzQTdGNzE2MzAyRjBERkE4MTc2NjJDCi06MTA3ODIwMDAyRERBMDY4RjQ2NkEyQzc1M0EwMDM1QjI1RDI1MzlDNkM5Ci06MTA3ODMwMDBEQUNGMkYwRUQ1MTJGRTM4MURGRDhCODY1RTFBODM1N0M4Ci06MTA3ODQwMDBBMTk3MUFGQjhCMTEwNzVBOTcxMEE4QzRGMUE1M0RDMDQ4Ci06MTA3ODUwMDAzNzVFQ0MzRkU1RjZFRTVBNTc2MDUxMDJCNDRGMDQ5OEJDCi06MTA3ODYwMDAxMzMwRDdBRTIwOUNDREVENTMzMzVGRjZDNjg3ODkxNjEzCi06MTA3ODcwMDAzRTZCMDFCQ0QwMzkwNEQ4RTdGMkE1NTgzODhDRjFGMzNGCi06MTA3ODgwMDAxMjkyMzk5QzQwNkRBOEJGNjQ5NTMyM0U1ODBEQkZDRjBGCi06MTA3ODkwMDAyRTZCMjQwQkUwM0U4Q0M3MzY3MTlFNkI4NUZFNzU5NzcwCi06MTA3OEEwMDBBNTVDRUJBQTY4QzA3OUQ5NTQxNjc0MTQ3RDc5QjgwRDFCCi06MTA3OEIwMDBCRkUwQkEwNDNEODhGODcwOTZFQjM0OEZDMTNFRTY0N0NFCi06MTA3OEMwMDBCRDdFQjBEQTIyRjkwMThFOTQ2QTRERUE3MUQ2MThGQkJBCi06MTA3OEQwMDAzNzlFRkI5OUFFNEQ0NEJBMTg5Q0M3RTgzQ0VDNjBENDg3Ci06MTA3OEUwMDA4M0UyQUNDRkE2MDQxRUFGNURFQ0VDMzg4QzIxRjNEQTVBCi06MTA3OEYwMDBFOTc1RTVERTNFRTJEMzkxN0IwNkZDQzI0RjY1Q0VDMzVGCi06MTA3OTAwMDBFOERBRkJDNjQ1MTg5NzdDRkJERjNGRjI2MERDRTk0RjA1Ci06MTA3OTEwMDA2QUI3MDdFMTNDQjlGQ0Y3MUVCQ0JGRTVFREU1RENDRTdDCi06MTA3OTIwMDBCOEQ5QTJDRkVDMTRGODRCNEVBQzc4MEFGMTc3NEJGREU2Ci06MTA3OTMwMDBERjRCQTNGOTlEMkRFMzcxOTREQjQyMEExQTlEM0RGNEMwCi06MTA3OTQwMDBCRDY4NkIyMkY5RTY4Q0ZBRTI5NjU0NTNEREEwRDNDNUVDCi06MTA3OTUwMDAwRTlFMjc2NTlERkZGQkMyOEVCQTZEREI2NkZCNjAwRDM4Ci06MTA3OTYwMDBDNzBGQjQyMkJFNEYwQTdERURFNDJFMEZGOTMzMEM3ODE5Ci06MTA3OTcwMDBFNjZFMUI2NTQ3M0NGQ0E5RDUyMUUyRjBFRDM2OEU3RjEzCi06MTA3OTgwMDA3RDNBQzZDRjAyNjIyOUFDNzAxRURFOTc0OEZEQ0Q3RkRFCi06MTA3OTkwMDA0MDIxRkQ2MjBFOENCNTBDRTgzQkQwN0ExQkQ5RDlENkJDCi06MTA3OUEwMDA3OUNDN0Y1QjlCMzIxMEQ2NkZGRTVBODlGNDUyNkNCRjQ0Ci06MTA3OUIwMDAxQ0U4MjFCMDZDMzVDNUQ5QUNGMzlDMTNCNEM2MzM5NzIxCi06MTA3OUMwMDA5MzlENkVDREYzOThDN0I0NzUxM0IyRTNFNDdCQjRGMjI0Ci06MTA3OUQwMDAzOEY5QzI3RUVDOUEzRjI2MDg3REExOTQ1RDhFRjlFOEM1Ci06MTA3OUUwMDA2NzU5RTE4RjBBQjVGRUVEOUE5M0Y1OEM5MkI0M0VBOEUzCi06MTA3OUYwMDA3NzUyNzlBQURFNDdFNTUzMDkxQThGNjdFRkQ5N0Y5ODQ2Ci06MTA3QTAwMDBFODRCNkQyRjQ1N0VERkQxRjY0RUUyNEQ1QTQ0NkU1RjU2Ci06MTA3QTEwMDBCMUY5QTM4MzNGODE3QTMxRTNGRTFCQzMzRjNFNUJFMEI0Ci06MTA3QTIwMDBGQjRBMjFCRjE3MEE3REEwRjhEM0JFRTVGNzZDOUNFRjk3Ci06MTA3QTMwMDBDODU4NzgwREI5M0QxQkVGOTU4REMyODMyMUM3QURGOEFECi06MTA3QTQwMDAzOEQzOTY5Qjg4NzQyMTI1NUFFM0MwNUYwRDJGQkQ3REU2Ci06MTA3QTUwMDBCNzU4ODk5RjM3NjhGMENGNTNDMjFGMzA2RkNCOEM1NTEyCi06MTA3QTYwMDA4MzYwRkNDNkJERUYwREUxRjcwMkIzQTMyODFGMENGQTNCCi06MTA3QTcwMDBCNEQyMUY2Mzc1NzZFNEU3MUUzQTZCQkQ5QkYwNjNEMDBBCi06MTA3QTgwMDAwNUYwNTE4Njg4M0Y2NkEwREQ2N0E1QjdGRUYyODkzQTBBCi06MTA3QTkwMDA2RDFENDM1MDBFNThFOUFCNTM2MjcxRUYxNTRENERFNDI3Ci06MTA3QUEwMDBGRUYyNzk5QTNFMDVFRDUwRDg1RTU2RjEzODFEOTczRkFCCi06MTA3QUIwMDAyN0Q1RTZDMzc3MjI3RjZFRTFGQ0IxRjg1N0RCN0Y4OURCCi06MTA3QUMwMDA3MkE3RUExNzBGNzg1MUVFQkNBRjM2QTdFMzc4RDU4RkNGCi06MTA3QUQwMDBBRkY0NjI5Q0ZCQTQxQUY0RTJGN0VGODc5NEI4Nzk4NUJGCi06MTA3QUUwMDAwQjEzMjVFMTBGMzdFNzJCQjAzNUMxNkI5MDZGM0Y3OTUyCi06MTA3QUYwMDBEQ0U2NDMzRjQzRUQ1NjA3OEY4M0VGRTI3ODgzM0E4RjBFCi06MTA3QjAwMDA3RkVGOEE5RkFGNTBGNUYzMDdEMjM1OUVDNzZBQ0U1QkYxCi06MTA3QjEwMDBEODYyQTNGQzEzRjQ5N0UxMzBCREM1NzE3QkUyQzIyRDlFCi06MTA3QjIwMDA3REM3Qjc2Qjc3QUQ4QjlCNzc2MkU0MDc1OEU5RjYwNkE0Ci06MTA3QjMwMDAwQkJEMDI1RUM4OEUwOTAyM0NFNDE2MTc3MUVCQzYyNzI2Ci06MTA3QjQwMDA3RjNDRjIwNEMwNzU2QUNCNkZCRDUyNjFCNERGOUNDNzQ1Ci06MTA3QjUwMDBDN0NGQjREQ0ZBNTMwQ0YxRjQ0NkFGOUQ4MkJFMjM3QTUyCi06MTA3QjYwMDA0MzI4NkUxRTQzQjUyREVDNDUzQkJDN0FCMzhERUNCQTcxCi06MTA3QjcwMDBFQUVEMEE3MzYyM0VDQjcxMDdFRERCOEJCNkZGRTZGNUVCCi06MTA3QjgwMDA3MTAwREZBMjY3NkQ2OUQzRjkzNDI4NUZDMTU4QTc5RUUxCi06MTA3QjkwMDAzQzEyQjEyRTU1M0I3RkMzRTNCRDlBQzgyNzExRUJCMzBFCi06MTA3QkEwMDBFOEQ5RkQ3NkNDOEJCMUUyQjFBQzY1QkZCREMzOTI4Rjk1Ci06MTA3QkIwMDA0MEVCRDQ3MjYyMEE5RENCN0JGMjlDMURGN0QzRjdGN0EyCi06MTA3QkMwMDA0OTc0QkZCMkY1RkJDQUNEQkZGMUEyN0M0MDNDNTE1QzA5Ci06MTA3QkQwMDA1RUFDNTdFRkY5NDJFMTZCOUUyRkExNzZFNDg3RUI2RDI3Ci06MTA3QkUwMDBGREM2RTBERTNBOUFFOEZCOTlFNzYxRkNDQTM3MUQ5NENFCi06MTA3QkYwMDBBRjU0RjlDQzUyQ0FFRjc5NEZBREUzNzRGRUM4Q0E3NEUyCi06MTA3QzAwMDBEQzVGMkI2REMxNzQxRjk1RkM3OUU1QTNERjI1RkE1QjYyCi06MTA3QzEwMDBGOENBNzdEM0Y5NzkxRTNEOTNGQjZEODI5OTM4QkZGOTg1Ci06MTA3QzIwMDA5QkZFODVFNkI3ODAwNTg4RkUyQTFGNTEyQUQwNUY3MjI5Ci06MTA3QzMwMDA1NjY1RTVDRkM2RTE5MzNGMDkzRTc5RUYzMTA3MDY1MTFFCi06MTA3QzQwMDBEOTdCQzI2RjE5N0M1NTExRjdGRTVBRTM0OUZDQkU5NUVBCi06MTA3QzUwMDBCM0MyOEVERTk1MjgxQkY3MTQzOUEzRURBQURBMkRBQjNCCi06MTA3QzYwMDBEQjcxN0QzRUI4NDgxRkU4QTNCOEJFMUExNEY4OTI0OEVECi06MTA3QzcwMDAxRjdGRTVBQTgxNDI4RUQxM0QzMTg2OUU1Mzg2Q0ZCMUNBCi06MTA3QzgwMDA3REJCOERFRThCODlGQUNFNzRERkNCMUQ2MjdDODAzQjkxCi06MTA3QzkwMDA0MUJBMENDQUY0RjhGRTRDOEY1QjMyRTBFM0Y5MkYwNkQwCi06MTA3Q0EwMDA3REY1QzZGNzVCNzgzRUM5Qzc0N0I5NUNDMUJDMTg3QTk5Ci06MTA3Q0IwMDBERjZFMEIwRjM0RTVDMzM4NENGNzg5NDRGMjNENkM4MjFDCi06MTA3Q0MwMDBBRkNERUYwMTRFQ0E1N0U5QzFFRjNFODlFMkFDMEIzNkFBCi06MTA3Q0QwMDAzOENDNzk3MDNENzQ2M0JERTdDNjlDQkZCMkQwQTI2RjRCCi06MTA3Q0UwMDAxOUE1NTUyRUJDNjk5MTBCNkNEM0Y5RTVBRjU0REI0MjU1Ci06MTA3Q0YwMDA5NDc3NTQ3RERDNDFGNjQzRjU3NjVCMDVFMkUzQUZEQjM4Ci06MTA3RDAwMDAwRUJFN0UxM0QwRjk1RjVCMENCRTM1Q0I1NzJCREY1NjEyCi06MTA3RDEwMDBFRTE4Q0RFMkYxRUQ1RkREN0UxNjk3NkZFMTc5NUNCRTg2Ci06MTA3RDIwMDA3NTQ3RTIxMTFBRkJGQUU0RUJDMjVFRTRBQkUyOEVEMUQ2Ci06MTA3RDMwMDAwNzkyMzAyRkY3ODNBNzE2NUQ0QzdFMDYwQjVFMERCOUI4Ci06MTA3RDQwMDA2QTk1OTc4RjI0NkFGQ0ZFODI5OEJDM0FCRTlGNDdGMkUwCi06MTA3RDUwMDAxRDM5RkUwQzdBQUM3QTdBMzE4REQzNDNCNzA2NUQxQUExCi06MTA3RDYwMDA3NERCNEI5RTk2MTU4RkQ2RjcyRkEyM0MxQTEwRUJDRkUzCi06MTA3RDcwMDAwODRFNjIwNTc4QUY1RUEzOUQxNUEwRkYzOTI4MjdGODRECi06MTA3RDgwMDAxRkNGOEU5M0Q3QzFFQTg2QTI5RUQxRThDRThFOUI5RjRECi06MTA3RDkwMDBFQjc3RkJEMDhDQzU3MzY1NEFCQzc4QjdCRjRDOEVBQjE0Ci06MTA3REEwMDBDNzk3QjhCOTVDRDk4QkI0MDA2NUI1OUJFM0FENDlDNDNFCi06MTA3REIwMDA1N0MwMTJBNEJDN0ZGNDI5MTIzRjI1N0I4OTlGNkNGMDI5Ci06MTA3REMwMDA5Q0QxQjk0QTNGOUREQkY2MjdDQTFGNjlBMDgyNTVCOEVFCi06MTA3REQwMDBCNTI5MkFGQTUzOEJFNUE1Qjk1MDVGRTgyRUU2RjVGMUVGCi06MTA3REUwMDBGMkNFMUNBOERGRTYyRUUxRjVDQkU0NjIxQjkwRTYxMzkxCi06MTA3REYwMDA2Q0Y0OTRDOTUwQUYzMUU2MzkyRkM5RTRERjUwRTUxMzc0Ci06MTA3RTAwMDAwRjYyREM0NTdEOUVERjE3QjcwRUY4REE1OTE0ODlGNzRCCi06MTA3RTEwMDAyNjNBNThEMDU1ODRGNzM0NDIwOUY1NTVEOUJGNUY4NUM1Ci06MTA3RTIwMDA0NkUwMDY0N0UwMUEzN0M5QTM0OTFBRTJGNTk0Q0Y0OTVDCi06MTA3RTMwMDBGOTMyNzczQzc3MTVFNTY3NTZCQkI5REY3OEY4Q0VGMUI0Ci06MTA3RTQwMDA3NEZGRUVENzMwRkVDREVFMDFCRDhGREY2NEUzRkQ5QzA1Ci06MTA3RTUwMDBEQTMxQkMwQ0YxM0FGQzYyNDY3RTA4MDNGRjQ1QUE0NkMzCi06MTA3RTYwMDBDRjVEMkQ3OEY0OTRGODNGMDNDRjdGMzQyNkRCQTk5RkI0Ci06MTA3RTcwMDBFQTlFRjUzQUJGQjI1MUU0MzUyODg5OUMwRTk0MjRCOUE0Ci06MTA3RTgwMDBFRTU5Mjg5NzhBRjVCRjQzRTAwMzdGRDA1RUVFREEzQkQ4Ci06MTA3RTkwMDBGMDMxN0VERjUzRjcxMDVDNUY0NTM5RjM0N0Q0MUJCQkVECi06MTA3RUEwMDBGRjM1RDE4RkU3NTdERTRDRTBGOEJBMjE2OUJERUQ1MkJFCi06MTA3RUIwMDBBODE3Mzk4NzJDNDVBMjdFNTNEQUY2NUQyQ0JGRUQwOTUxCi06MTA3RUMwMDBGQzkwRTM5Rjg1QjFCRjlCNkU1Njc4N0ZFRTNBMEZERTQ0Ci06MTA3RUQwMDA5RjI2RTk1QzhGOTY4MDY4NjYwMzFFMUE3NUE2RDk3MzgzCi06MTA3RUUwMDA5MTQ1Q0RGOTE2OEE1MkQ0MURBNjcxM0RBNjcxNTkxNjM5Ci06MTA3RUYwMDBFQzgzQjA0RTM3OENFNUVCMDQzOEE1N0RGMThEMzFCQ0I5Ci06MTA3RjAwMDAzRTJCOTREM0Q4QTExMTFDRjcyMDFDQTMxQ0ExOEJEMDBECi06MTA3RjEwMDBGRUI5MDlENDIyNEVENzY2RkJEQjg4RDNEN0ZFNDUyNkFGCi06MTA3RjIwMDAzQkIzNTZEMjFBREQ1MERGRjkxNjIzQjlEQzk5RTAxNUMwCi06MTA3RjMwMDBGOTA3RkNERTE5QzMyRjMxRjZBNUI5NjVCODY0MjU3QkI2Ci06MTA3RjQwMDAxNkYxM0MwRUUxODczMkUyRTg2NzU5QUI4MjkzODlGMTgyCi06MTA3RjUwMDA1MzVCRTRFMTc4QjY5RUU0NjQ3RkYxQjE5RkJCNDU3QzVFCi06MTA3RjYwMDA2QzEwMUI3NDgxRjFCMTY3RENFNzExMUZCQkM4NkRFOEIxCi06MTA3RjcwMDBGMzIyREUyRUY2RkYzMzQ3NzIyODVGNDg1NTMxMjc4RkY0Ci06MTA3RjgwMDAzMUJCQTY1MDhBODhGMUREMkU4QkZDMzVFODc4QzQ1MUQwCi06MTA3RjkwMDBERkFEODg5NzExNDdEOTJEREM1RUVBMjUzRkUyMjRBM0E3Ci06MTA3RkEwMDBCQ0U2NTExRDA1OTQxRjYxQjNFNjQ3MUM5MzI5RTFBOTY2Ci06MTA3RkIwMDBGNEM1NjIwREYxRDkyNEUyQzYxNzFBQjczN0UyRkVDNTNGCi06MTA3RkMwMDBGQzUxNEMxQ0ZGNzk2RjM5QzU0MThCN0RGMUUzRjhFMzFGCi06MTA3RkQwMDA5NEQ5MTQ3NzYwNDdGOEZBMTk3MTdDQTYxNDJBMDhFNzM3Ci06MTA3RkUwMDBEOTMwRDg2MDA4RTc1MUYzREYwMUI5M0MyREE4NTA1QUM5Ci06MTA3RkYwMDBDRDVCRTZFN0UzMkM3NDYwNURFRkJGNThEN0ZCN0NGMzA1Ci06MTA4MDAwMDAyMERFRTdGN0FBOEQ2MjIzMjkwRkMyMjZGMjIwN0VDOTVGCi06MTA4MDEwMDAwMkY3NDdFNzQxMTg3OEVDMkZDRkM0OUE1NzYyQ0QyMzc3Ci06MTA4MDIwMDBDOTBDOThGMTM0QjhGMjUyRDNGQjhCRUE4QTRDRjU4QjI5Ci06MTA4MDMwMDA5NzhEMzNCNUNGODY4RDMwQkE5RUJCNjY5QUE5N0Q3RTZCCi06MTA4MDQwMDBGMzRDNTM3REU4QzY5QjRDRUQ4Nzg1RTY5QURFMEZERjQ3Ci06MTA4MDUwMDA1QUQ1RTdCQThGNjg1OTYyN0FBRkM4QTE2MkJDMEZEMjBECi06MTA4MDYwMDA1OEY3Q0JGNkZDMjAyRTVEMThFQjZFRTQ2OTYxQkExMTZGCi06MTA4MDcwMDBFMjc3MzRBQ0ZCQzNEOUU0M0YyQTkzQjREOEY1Rjc4NzUxCi06MTA4MDgwMDA4M0I0MkY1RkU4RkFFNzdCODQzRTc0ODFGQzNFMEE4OTYzCi06MTA4MDkwMDAwREUzNDQzQUQ3MTNCQjZDRUUzNUE4MTcyNzAzNkMyOEMxCi06MTA4MEEwMDA2RkFERkE0NTcyRUIwQkZGMkQ3OUUzRTU1QjY4MkI5MDIyCi06MTA4MEIwMDA4RUJFQUZFODYzNzFCRjFGMjBGMjIzOUI2NDcxOUU3NDc0Ci06MTA4MEMwMDA5MjkzRjQ4MTdCNjRGOTk2RTg3QkU0QUZGMDcwMzk3MkE3Ci06MTA4MEQwMDA4NTg3RkI1NTdFMDJGQjI2RUU5MzgzMTM1OTkwRjY0RjVFCi06MTA4MEUwMDA3MUJFOUNBMTQzMEFFNkVCNEQ2NUUyRkNGOTYzQUIyNjQ5Ci06MTA4MEYwMDA0RkMwNzg2NjQ3ODE5NjhDMjIwNUVBREY4OEM4RkQ5QkQxCi06MTA4MTAwMDAxQzVBMjNDNjAzNDYyOTVDOEU4MzdDOUZFNjE5OERGQjhGCi06MTA4MTEwMDBDRTcyMUJENzdGODIzNkM0RjM2MDI3MEI3QThCNjhERjYxCi06MTA4MTIwMDBBM0I4NjYzMjRCOTM5NjE0QTJFOUQ1QjNCRjY4NUYwMDNCCi06MTA4MTMwMDAzMTFDQUMxQTlFODQ3NkQwQ0IzODM0MDY2OTlEMDlCNEM0Ci06MTA4MTQwMDBGRkRGNjhDOEJEQ0E2MTI0RjdDRUI4N0JFRUI1QTBGM0U3Ci06MTA4MTUwMDA4RTY3RTZFNUQyRjNFMzM3MDNENzAxRkYxQ0I3OUJFRDRCCi06MTA4MTYwMDBBMkZFRkM1Mzk1OUJFRkY3QTBGRkZGNzgwMTMzRTUxOUMyCi06MTA4MTcwMDA1NDdCQjgxRDU1RUQ1MTc4QkMzQ0Y0OTc3NDQ0NEJEN0YzCi06MTA4MTgwMDBGQ0NGMkU0MUEwNkJBNUY2NTUyOEEyNTc2RkJDQkQ4MjJGCi06MTA4MTkwMDBGMjc2NzdDRDA4QTJGRkNGRjAzQjFCRkRENEI2NEU2NDNDCi06MTA4MUEwMDAzREY3MDc0MzNGMzdCQ0MxRkQ1RjM3N0M2NkY2RTdERTJFCi06MTA4MUIwMDBFOUUxNzlENzc3OEFGMUFFODdDMjA3NzhCQjFFRUZGNDgxCi06MTA4MUMwMDBDNkYyODUwOTUzOTAxRkUwNzk1ODgyRkFCN0RCNDBGNTczCi06MTA4MUQwMDAwM0JBOUYxMUM4QjYyMTNDQkY2N0ZFRDc3NjRCOThBRjU0Ci06MTA4MUUwMDBBREQxRjdEN0IxMEExQkMyRjVGQUNEOEIzREQ4QUVBN0ZBCi06MTA4MUYwMDAzRkEzOUZDMTc4QTYxM0Y2RTlFNEEwMkQxREU4QTdGQkQ1Ci06MTA4MjAwMDAxQjEyRURFQjMwOUUxMzlGNTdDQzFFQkMxMkI3MEU2M0IyCi06MTA4MjEwMDBCQ0Q3NTlFMEY0NkJCMERFMzM5OTlGRkEzNUZBNjcyQzdFCi06MTA4MjIwMDBDMTI0MDc3NzU0MkVGQTUzNkEwRUNBM0Y5OUZDMUY0QjlDCi06MTA4MjMwMDBGNjNBNDhGRTc1NTU5RERCRkUyMEJDQkY2NTcwQzc0NTBDCi06MTA4MjQwMDBBODVGQkM1OUY1RDkyNTg4OTcxQjM3MkE0QzgzRjUwRkIxCi06MTA4MjUwMDAyNTA0RUVGMzQ0RTFFREY4QkM4RjNDRjgxRUY0ODRDNzJFCi06MTA4MjYwMDAxRkM0NERGRTY5MDc5REYzN0FCM0VBRTk0QkEyRjVFQTE0Ci06MTA4MjcwMDA0RDlFODkzRkY2RTAzRTM5RTZGQ0UyM0Q2NTRGMEQyMzE5Ci06MTA4MjgwMDA3QkRCQTBBRkRCMDQ3RDJENzk3MjI4RTk4MzRCM0NFNkQ0Ci06MTA4MjkwMDA3QjUzOTYzQzlFNEJFNzg5NEEyNTE2RDc4RUM0N0IzRjdECi06MTA4MkEwMDAzMDJGN0QwN0QwMTU5RTIzRENGNzI5Q0YxRkRGNzkyNERGCi06MTA4MkIwMDBBNTk4Q0VBM0IyQzA3Njg0Q0Y2OEJGRjNFNTlCODY1MzYyCi06MTA4MkMwMDA1RUU3QjFCNEYzQkIxNzE5RTAwQkEyN0VDNTM4OUMyRjUzCi06MTA4MkQwMDAwOUZFOThENTlBNUEyQ0Y0QkJFNzEwNkYzN0ZERkFDOUZFCi06MTA4MkUwMDBEMzdGNDBGQ0VDN0RGQUYxM0JCMTREQzlGOUUxODM4OUM0Ci06MTA4MkYwMDA3RENDMkZGMDAwRkIxOEQ5M0Y1RDJDQzFFRjg4NjNGRkM4Ci06MTA4MzAwMDAzQzJCRjRBRkVGQ0IzQUQ5MjVFN0U0MEE5MUJGQ0VFRDkxCi06MTA4MzEwMDAxMDQ1RjY2NzYwMUU3NzRCQUI5Mjg4NzhGM0EyQzE2Mjc2Ci06MTA4MzIwMDBDODE3RDAwOUJENzhGRkEyQjgzRkREMDlGNkQ5NzAyMTgyCi06MTA4MzMwMDA3RkRBM0QxRjRGNjlFMjcxMDg5MzVFNTc3MkE4Q0FBNEE1Ci06MTA4MzQwMDBDRjU1QzAzRjk0Rjc5NzZGMEEzNEUyM0Q4REJERUE3NTczCi06MTA4MzUwMDA2MTk5RUNFMTJGQUJERkJERjMyNUU1N0RBNzg3RjM3RkM2Ci06MTA4MzYwMDA0QjAxOTdERjJERTE4NDEwQjcxQjU4MzFFQTdCQ0ZFMDNBCi06MTA4MzcwMDA1Q0UwRkRCNDY0QkUyRkQ4QTVDRTAyMjdGQzdFQzZGMzE4Ci06MTA4MzgwMDBDOUFBMzU1OUIwREM3OTFDMUY1OEM3QkZEM0MzREEzODI2Ci06MTA4MzkwMDA5REY2RTg3Rjg3MkVFNTdGNjc0RTlDMDMyRTExRTdBMkFFCi06MTA4M0EwMDA2M0VDNDlFMDJCQkVDOTI2OThGNEM3RjBFMUJGRDEzOTkwCi06MTA4M0IwMDA5N0VEMjlEQUVGQzZBMzNFMEY3QTBBRjJCRDRCRURCMDc2Ci06MTA4M0MwMDAyN0M3OTlERjJGNTE3RTAyN0Q4RkY1NzJGQkM0Qjk4N0Q1Ci06MTA4M0QwMDBDN0UxOUM5QTRFRjc5RUI5N0NCRTUxNjgyRjE5RUQ0RkFDCi06MTA4M0UwMDA4OUZENjZGMUUxMzc4N0Q4NjE5RDRFQ0I0N0JDMTg0N0MwCi06MTA4M0YwMDBBOERFQkRDMzhCNjZGMjY1ODk4MTI0MkZDNjRCOEVCRjc0Ci06MTA4NDAwMDA1QUVBQTM3Q0FCQ0Q0M0QwQUU2RDA5RjNGOEM0MDg5NTBFCi06MTA4NDEwMDAwNUQ1MzhGNzM1RDc2RTJDQTY0QkJGNkIzNkE2NTIzOTJCCi06MTA4NDIwMDAwQ0ZEMDlGMEE4MzZDQ0U3RDlCOUE3MzEyNTlFQkQ1RDcyCi06MTA4NDMwMDBGQjFGN0IwN0UxQkEzRDNEODA5Rjk3MUFEMTVBQkMxMEM0Ci06MTA4NDQwMDBFNTFGQzI2MjAzMzlGN0Q0QTdDM0E5QkY0QkJDRDkzNDE3Ci06MTA4NDUwMDAzRjE4NUZDNUU3MjA5MTY0QkNFRkU4Njk2MUFGNzU3RUE2Ci06MTA4NDYwMDBBQTUwM0JBM0RGMTE3QjI2MkEzRTU4Q0JDMjcwRjMwMUYyCi06MTA4NDcwMDBCMjBGNUIxRDFBQUVCMzZCMEJCRjBGQ0VENUVBMjJCOTlDCi06MTA4NDgwMDA1N0JCNkYyQUI3RTM5Mjc5REM3MzdCNDJGNzFGQzUzOTdDCi06MTA4NDkwMDAzNkZBQkIwNDJFNUYzMzRCODFGRUI3REJGOUZFMzgwQzk2Ci06MTA4NEEwMDAxODYwODczQkYyREMxOENGRDVGQTYzNEE2QTc3RTZGMUE5Ci06MTA4NEIwMDA3QkY1NUM2QTMzRkI4NjNCMUFFRjFFQzJGQjU0MkZBNzg5Ci06MTA4NEMwMDBBQkVEMDk2MTE5RjM3NkJBODEyNjFGMjNCODIyNzAzMjA5Ci06MTA4NEQwMDAxQUQ3ODA3MzE4RTlGM0RCRUREREVGRTJGOTRCM0E1RjcxCi06MTA4NEUwMDBBNzIxMUMxQzRFRDYzQTU0NDNCREMyRTVFM0YxNUI5NzZECi06MTA4NEYwMDA0RkYzMDdBNTU4Qjg2QTQ3ODI5RTBCRkM3NjRGMDM4QjUzCi06MTA4NTAwMDBGQzdEMDRDQzYzNEI4OEQ0OURDMDEzREI3Mzk4OTAwNzJCCi06MTA4NTEwMDBDMzU2NEZDRThBQUU4MzQwMUExM0Y5N0VGNjNEQzM1NzM5Ci06MTA4NTIwMDAzNzREMjAzQjI3QThBMDVEMEZBNTI3MDVFN0M5RjczN0UyCi06MTA4NTMwMDBCQ0JGNjA0MDExQzcwM0ZBODkxMzlERkM3RDRGN0IyN0E4Ci06MTA4NTQwMDBCRkIyNDQ3NUYzNzZGRTI0NUZFMjM0ODlGNURDNjc2QUQ2Ci06MTA4NTUwMDBGODlERUU5MEMyRUY1RTg5RkVBREYwODE5MTFBQzA1Mjk3Ci06MTA4NTYwMDBGREMyRjM0NEI3OEJFNEQ2MDc0NzY4NzgyRTMxQjAwMERDCi06MTA4NTcwMDBFOUY1NTc2RkM5MENFRjQ3RkFFMDQ5MTc5RDQzMkU3ODhDCi06MTA4NTgwMDA2RTMzRjlBQkFERkRBRDNFRDY3MDFGRTY2NTc3M0QyNzg2Ci06MTA4NTkwMDA2OTk4MDdEQTY1RUJBNkI4NTE0REVCN0I3NDVFNzFFQTFBCi06MTA4NUEwMDA5RTEzNzQ2RTRCNDkwQUQ0Nzk0NzYzNUVDNDhBMzJDNDAxCi06MTA4NUIwMDBERjU4RDZEQzg4RkUzRDkwODcxNEE3NkZDOUUwRjJFMzUwCi06MTA4NUMwMDBDQ0QxNEIxRTVCMTE4NUVGMDdCREMyQkZEQjFEQjgxOEI4Ci06MTA4NUQwMDBGOUE2NTVGMEU3M0VENDZGQTBEQzJERjRBQ0RERkI2RkJGCi06MTA4NUUwMDBDQzhEM0U4NzE1NjQwN0M4MUZENkMwMEU1MTdFQTFGMTAxCi06MTA4NUYwMDBCQzJCQTREMjM5QjBFMUFGM0I2RkQxQTNFOEFENTlGMEE5Ci06MTA4NjAwMDA3QkIzMTgyRjNGMjlCMDhBRjg3NkZGOUZFRDVFMERGM0ZDCi06MTA4NjEwMDA1ODVCODZBMERDNkQwMTNEQUNBRjdDQzY1QTBCREZGNDI1Ci06MTA4NjIwMDBFNEI3OUNFNEY3NzFDM0JBMzYyNUMxM0EzREZERkE5RTIyCi06MTA4NjMwMDA0QkYxRUY4QjAwRkM4Q0VFQUIzQUVFMjBCOUI5M0I5QkQzCi06MTA4NjQwMDBGM0RGOEFENzNFMTk4OTcyRUI5M0JEOEIyRTQ2N0MyREMyCi06MTA4NjUwMDBGM0RBMEMzQTlGOTQ4MEZDRjQyQzIzMzk2NkYwNjMyMTAyCi06MTA4NjYwMDBGMkEzODRGNzQyNzEzRjRBMjFEMjM5RjI5RkJEN0QxQUFECi06MTA4NjcwMDBGMURGNkU3RTJGMDREMDM5RDEzREQwQjkwRkY1OEI0MjlBCi06MTA4NjgwMDAxRkQwM0Q3RDNGOTRGODc5N0JCQkNDQ0Y4MTgzMUNDRjNECi06MTA4NjkwMDBBN0ZBMjRDQTU3RDlERTNFRDk0N0ZDMkMwMzZBOEI5MDJGCi06MTA4NkEwMDAyRkMzMDdBODlGMTZGQURCNzVBQ0M0NzI5RkVCMjk0QzQ5Ci06MTA4NkIwMDBEMjE4MTA5MThGN0ZGMzcwM0U2RDI5RDA5MkZDMzA5RkJECi06MTA4NkMwMDA0NDQ1MzFGMTQxRDQzRUM5RUI2MjFGOTU3Rjc0RDNFQTMyCi06MTA4NkQwMDAwREY4RjdDM0RBQzVCRTIwRjRBRTdENDJDRjY1QzdCODRBCi06MTA4NkUwMDBCQzVGMkFGNkIyMjVCRjE5RjdFRDZEMzBERjI1MkYyOUMzCi06MTA4NkYwMDA1Q0ZFMEIzQTM5MjBGNEUwNDNGNTE5NTRDN0ZENDI4MzgwCi06MTA4NzAwMDA3NTFBMEQyNURFMDc1NEFBRDdFMTlGMkY2MTYzQ0E5QjE2Ci06MTA4NzEwMDAwRjYyMzlBRUEyQTUwQzhGNEM0RDk4RDU3RTkwOUY2MTBCCi06MTA4NzIwMDBEMzg3MjNGREVEM0E3MEY1NzBDQURGM0RFRTYwOThBMjY1Ci06MTA4NzMwMDBCOEVCNkZERDdGN0MwQUYzNTFGNzAxRkVFM0VDNEJFODA5Ci06MTA4NzQwMDA5RjY1MTRCRkE5MjA3QUVDOEQ2RUJBQTQ4RTZCQzZGQjEwCi06MTA4NzUwMDA0MTBGQkNBNzdBQUEwQTFCN0QwRDEyMDZFMEUzRjU3QjQ4Ci06MTA4NzYwMDBBQTU2RTNCRDgwMzcyNUU5Qzc5MTFFOTdGQjAyQzc5MTQyCi06MTA4NzcwMDA4RkJBNUVGOTVCM0FDQUY0REQ0N0ZGRUM0NTc5QkZDQkFGCi06MTA4NzgwMDBBRTBGNDczQURCOTUwM0Y2NDAxQ0ZBM0MyQ0U4QTdBNDUxCi06MTA4NzkwMDA5N0JDOEFDRkJDREM1RUJBMjRDOEQ2MjFGREQ0RUM1MjhCCi06MTA4N0EwMDBFOEVGMTY5Q0RFQTVFODc4MEVGQjVEM0Q5MDhFN0FDRTU0Ci06MTA4N0IwMDA0OTE2QkM3RTNDRUVFRkMyQUU5RENGRDFDRUU2QTNERTI1Ci06MTA4N0MwMDAzMjkyRUVDQjMwRDk5OTRDNTkyRUQzM0RFRkFEMTJGOTAwCi06MTA4N0QwMDAyNzJBMkQ3QTQ4MzU2QjVFMzUxOEY3OERENkNENzY5Q0Q1Ci06MTA4N0UwMDA0N0Q1MTZGM0Y3RDVBOEJGOENDNEIyNkY3QkY1MzNBRjZFCi06MTA4N0YwMDBEMDVGNzI1OTJFRUEyRjQwM0ZFNDlGRTg3RTRERjEzRjUzCi06MTA4ODAwMDBDNjI4QkZBNzBERjM3QjlFOTYzOTdFNDA1RTEyMUYxQUM1Ci06MTA4ODEwMDA3QUNDNTY5RjdFMUFGNUNBRDM4MjRFQjcwQjdCQjQ3QkI3Ci06MTA4ODIwMDBCQjQ0RjlGREMzQjZGMkJDRUI3MTI3QjVDRDhDQ0Y5RjJECi06MTA4ODMwMDBGMkMyMkE4NTFDMUNBN0YyRjhDNUI4QTNCOTE0MEYxREYzCi06MTA4ODQwMDBBMzMzRjI4NzJDNjg5NTQyODhDNzRBNDNBRjEzRTcyOUMwCi06MTA4ODUwMDA2MERCMjVCRDZFMkMwQjM1RTJGRDcyMEJCNzRBNzQwRTQyCi06MTA4ODYwMDA2M0QxNTZCM0ZGQkU3QUUzMkI4N0QxM0M1Q0RDNjIzOTFGCi06MTA4ODcwMDAxRjJGRjA2MjhENkZFQ0MwNUZFMkM0MzcyRTRFMTJGRUU4Ci06MTA4ODgwMDA5QzIxNkM4OEU5QkM1NURCRjk5REI3RkFBQjM4N0ZGREJDCi06MTA4ODkwMDBBQUU4REY2ODM3MjE4OUQzNEQ4RDk4NkY3NTQ4MDk4OTFCCi06MTA4OEEwMDBCRjRGRTlDNkZDREI1QjA1N0REQzJBRThBMzk2ODVFREJFCi06MTA4OEIwMDA5OEJGQkY3ODAzOUYyRjVCNkYzM0RENUJCQzYwRDdFRDQ0Ci06MTA4OEMwMDA3NDFFQzE0QTQ3OTVEQjc4REMwRDEwNDhGMTlEQ0E0REY2Ci06MTA4OEQwMDBFNkY3NTUwMjFGNTUxNjdDRDQwNDI0MEI1QzVDREY4RTMyCi06MTA4OEUwMDA4NUFCRTU3QTVDREZDNURCNkNGNEY3MzlBQzcwOUQ2NTcwCi06MTA4OEYwMDBCMzI5OEZFODFGMEQ5Rjc1OURBRTMzRDZFOTUyNzZBOTM3Ci06MTA4OTAwMDA2OTlEQ0FGQkJFOUYyMDYyREY5OEY1REY2NzBGNUY0QTUzCi06MTA4OTEwMDBGOTJFNjdEQTcyQzg3RjYwRDA4N0I1OUYyOTQyN0Y5RUEzCi06MTA4OTIwMDBCQTkxRUI5OUE3Rjc5NDI1OEU0MEJCRTg4OEVBOTdBMDA3Ci06MTA4OTMwMDA5RkUyOTczRUY2RTI3OThGQTJCRDBBQzNCODYwNTc2QkZCCi06MTA4OTQwMDBGMTNBM0NBN0JEQjMyREVGNUFCQzhGQTJFODI1OTVGNkFFCi06MTA4OTUwMDA4REUyOTc4QUU4NUU5MEEyOTc4QTEyNzMyOThGNDI0QjI0Ci06MTA4OTYwMDA0NTdDNDAzRkI0RUY3NjFEQzlGQjdEMjFDQUNGQjZDOTE3Ci06MTA4OTcwMDAyNTg4RTYxNTQ3OEExMjUxM0ZEOEM5QjgzRjQyN0FBOURGCi06MTA4OTgwMDAyNEI1MjM2QTFGNTk5Q0M0RkQwM0FCMzJERUI5MDdGNTM5Ci06MTA4OTkwMDBGN0E5Q0ZEQUU4QkNDOTU0NUJGN0NCOTg3RkIwQjM0REU5Ci06MTA4OUEwMDBGNUFGODA3QUY1NEI3MzFCRjA5RThBRUEyNzI1M0ZBQTI0Ci06MTA4OUIwMDBEOTg3REI5N0E0N0QwN0U5QUNENUU2NzMxMEJDREYzRDEyCi06MTA4OUMwMDA4MEVGODNEQjI0N0YzRUI0QUZERDdCRDVGMEVEOThFNzBECi06MTA4OUQwMDBCREI5RDgxRjdEMkVCQjI4NTlCQjFGRjMyQTU5NjYyMjZCCi06MTA4OUUwMDBEOURGNTMyRkIyRDE3RTdBNkE1MEUyQ0ZFODNFMTY3REFFCi06MTA4OUYwMDBGMzE0OTRCM0E3OUVERjY5QTc3MzgzREIyNTk2MDExMzU1Ci06MTA4QTAwMDAzOTlDNzFGMDE5QkFERkUzOTdBRjUwQkU0MkQ5QUU1NzI3Ci06MTA4QTEwMDAyODNGQTEzNzc5N0YzQUE0QjAzMEQ5RERDRDc0MkZDQzZGCi06MTA4QTIwMDBFMkNENDZCRDgzQ0U0MTU0MDhCREE5NjZDQjA5QUE1NzA1Ci06MTA4QTMwMDBBMUZFMEZFMzU1NkQ1MjQyMUFGQzdBNzBFRkFGMjhCRkNBCi06MTA4QTQwMDBBMTY2MUJDRjZGODBGNzI0N0ZBQTMwN0VBQTQ1RTg3QzAxCi06MTA4QTUwMDAyRUUzNzQzMDU3Qzg5RjQ1OENERjMzQjRBODk5OUZBMzg5Ci06MTA4QTYwMDAzM0VFNDUzMkU4N0NGRUI2Mzk5NDg3MTY5MzZGODZGNjZFCi06MTA4QTcwMDAyNUM1MjE5QTg5QkU2M0VGMUJFMkY0NkRCRDc3Qzg0QTE0Ci06MTA4QTgwMDBERjJEMDY3RDBGNjNDMzkwQkUzRjk5QzhGM0MzM0U3OUM3Ci06MTA4QTkwMDAyNTIxQjExMEU2RjNDOThCMEFFNURERjc0MUU3QjQ5RjY0Ci06MTA4QUEwMDAxRTExRkJGRjk5QjA0Q0ZCOTNEMUFFNzNDRjQ3QjQ4RjJGCi06MTA4QUIwMDBENDFFMzk2MzQ3N0Q3NTRBRUI4N0I0MEVEMzVCRjc0RkZECi06MTA4QUMwMDA0NjNDN0Y4QjA1QUExMTZGREY2QTRERjQyMTlGNEZFRjYzCi06MTA4QUQwMDBFMDcyNkI1QUFCMjM4NDdFRUE2RkIxOTYyNjVDREZBRTAwCi06MTA4QUUwMDA3RDNGNkY0QTQxN0E3OTgyRDM4QjIxQ0YxNjBBN0MyRTQzCi06MTA4QUYwMDAxNEY4NUNBOEYyRkI5RUFBMEFGNzNGODhGOUQwRDMxOEI1Ci06MTA4QjAwMDA5NzM3RDM1QTg0QkNEOTY0QzY2Rjk3QUQ0NTI1QkExOTM3Ci06MTA4QjEwMDAyMUIxRTZFQ0Q4RkQ2RTExRUJBMDczOEY1RDk5QzNFOTJFCi06MTA4QjIwMDBFRjQ5MDZDMTVFNDUzREFDN0E5QjM1MEVDRUVERkExQTkzCi06MTA4QjMwMDBDQjdFN0EzMEM5RjZBNUVFQzE3OEM3QjIyRUQzQkJGOTg5Ci06MTA4QjQwMDA3RTM2MERFODA5RTMyMTZERTE4NjQyOTQ3QjA2N0VBQzFBCi06MTA4QjUwMDBFQkQyQTZFNTI2RjU3NURFRjk2NUExQjcxQkY1NkY4QjlGCi06MTA4QjYwMDA3QjI2NUE3Q0NERUU2ODNCQkNEQ0M3RjVGMEFBQjE0QTQ3Ci06MTA4QjcwMDAxMEQ3QjVDNzVFQzkzQjM4NTI5MzIzRjYwQUQ4Mjk5RjUwCi06MTA4QjgwMDAyNTBERTA3NkNCMjhFOEZBODUyQzg1QTVBNTQ1RUM5NTQyCi06MTA4QjkwMDBENTE5Rjc0RjJGNEFDM0ZCMjNCOEJDRTgxQzAzRkQ2MTZFCi06MTA4QkEwMDBCRTgwQ0E0ODRFRDU2RTczODREMENFRjgxRjg0QkZCODNECi06MTA4QkIwMDBCQjAwODAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMEM4Ci06MTA4QkMwMDAwMDBCOEQ1NzZENkM1M0U3MTUzRUY3QzMxRjg5MTNGQkUwCi06MTA4QkQwMDA5QTc4NjYyQzM0QkIzMUY5MjAyNTg0REIxMDlBNDBENzczCi06MTA4QkUwMDBGNjI2QTUxRDgzMTQxQzU4Mjk2QUFCRTJCNjVCRDkwQTg4Ci06MTA4QkYwMDA0RTUwODUyODEyOTVCODg5QTlENjk1Njk0MkRBN0U1NEQ3Ci06MTA4QzAwMDBFQTU2REQyMjZENjIxQkFCNEMwOTZBOTg5MkM4QTFBMTlECi06MTA4QzEwMDAyNUU5OTBBMDQwMUJEMEQ2NTlGQzYwRUI5NDkwQzAzNDVECi06MTA4QzIwMDBEMjREOTVEODczREU3QjhEMUQxMkI0M0E1MjhFREZBRkQ0Ci06MTA4QzMwMDBGMzlFRjM5Q0U3N0RERUQ3NUQ3REZGRjI5QUY1NDRERjdFCi06MTA4QzQwMDBFREJGRUVDREMyQzZGQkE1NDcwOUI2M0E5NEYwNjlERjg5Ci06MTA4QzUwMDAyMEVBMjBGMjQ0OUE2MEZCMjQyMzQzQjBBQkFGN0IxMzlECi06MTA4QzYwMDAyNTQ0MjM1NThCNDIwOUNDQkJBMUVBRjMzNUI0NkZGMUZGCi06MTA4QzcwMDBFN0UxQkNFREZBNTIyMTJBMjNFQTg0RDVDQkYyRkQ5RDJGCi06MTA4QzgwMDA2QUQ2Q0JGMzNCRkIyNUQzODZFRDNERjk5RjhBQ0E1MkNBCi06MTA4QzkwMDBBMkM5ODFFOThBRTc2MDU3NjgzMkZFNzFGRkY3OTZBODlBCi06MTA4Q0EwMDBEODc3RUE5MjhGNjI5NUQ4RDgzMjJGRDBGRDQ0MkY5MjkwCi06MTA4Q0IwMDBGM0Q5QTYxMUVEOTk4N0Y2RjA0QkVERDQ4MDBFNjk3RkJDCi06MTA4Q0MwMDAzOUI1QzBBRjg3OEMwQ0Q2NzU1RTU0MEM0QjQ3RkYwOTg1Ci06MTA4Q0QwMDAwRjUxMzM1MUY3Mjc3RjFBOUUxNzIxQkFGNkFFNjRGODY5Ci06MTA4Q0UwMDA3NDY3RkRBQjhENjgzRjZGRUY5Rjg3RjkzNzdGMjcxOTVBCi06MTA4Q0YwMDAxNkE2QkZGODREQTI4N0QwQkZFRDREQ0Y5NUFDREZEOUZBCi06MTA4RDAwMDBFQjk2Rjg5RkJFQjIxN0YzOTI0N0ZDRkExQjY4NzU1M0I3Ci06MTA4RDEwMDA0RjM5NjE2RTBGRUQxNzM2NDkzRkJCQUUwNEUxQUYyRkZGCi06MTA4RDIwMDBFNTY1NUNDODJFNTgxRjIzREE3RTc4QTZCRjI0QTlGOTEyCi06MTA4RDMwMDAzNkYyREJGMzk3RDY4RUUxODJGMTM1NUE2OUU0NkEwMEE4Ci06MTA4RDQwMDA1RkVBQThFRTk2QzJGMTE3MUY5MEIwRkZFNDg4QTJGOTdGCi06MTA4RDUwMDAyNDgxREJEQkRGMkFDNEU3MzRDMDU4QzBGRDQ1MjYyMTZGCi06MTA4RDYwMDBDRkM5NzMyNTc2MTFFNkZENzMxRkM2NkE4OUM2RjdDMUEwCi06MTA4RDcwMDBCOTBGN0U1QTE0ODE4N0JDRDJCMTRCMDZERjhGNzEzRDhCCi06MTA4RDgwMDAxOUZGQzQ1MkEyM0YwQ0JFN0YyRkYzMDEwOTg4M0E2QzMxCi06MTA4RDkwMDAzRjhDNzk4QjBCRTI0RTIzQTg4MjM4MTE5NzkxQzE3RUNDCi06MTA4REEwMDA1RDlGMkEwNkRDNzM1QzM1REU0ODNFQUVFMzZBMzY2OEJBCi06MTA4REIwMDAxNEYwNjM3QTlGRDkzMTVDOEQ3MjQ5Mjc0NUJENjQ2OThGCi06MTA4REMwMDA1OEQ4REJCQzM5QTFDNEVERkE3QzFCRjk2QzM1QjFGRTc3Ci06MTA4REQwMDAyOTk3MTdBNDRFNDVFMzg4RjM1OTBENDUwNDNGQkJGQjgzCi06MTA4REUwMDA5REZBQ0EwMzhFQzVGRTlCODk3MTQxOUJGNzlGMzVERUI0Ci06MTA4REYwMDA2NkVERTBGMTlCOTUwMUIyMThCNzJGQUQ3NjZFRUY4RTYwCi06MTA4RTAwMDAyOUY0MDZEQUJCM0Y3OUE5OTYwQUY2Mjc4RTEzRjVFRDA5Ci06MTA4RTEwMDBGMjRDNDU5OUI3NURFNzY0MTE1RkQ3QjkxQkQxMkFCNDBECi06MTA4RTIwMDBEN0QyM0JBQjM1QjRENzUxN0EzRjhGN0YxODBCRkM4ODM0Ci06MTA4RTMwMDA3OTZERjFCRUYzRjM3RUJFMDgyOTIyNUVFMjdDRTFDRkJDCi06MTA4RTQwMDBBMjVGM0E3RUREN0M3QjY4QTNDMEExQzdFNUQ1MEIyMTdDCi06MTA4RTUwMDA1OUNDN0Y1NTRCQkNDMkU3NzBGMkRDN0ZBMzQ4OUI4RTk4Ci06MTA4RTYwMDA1RkI4MTJFNDdBRTVFQTdERTdCOUJCMUQzNzc2RTBGNTM1Ci06MTA4RTcwMDAzNzVCRjVGMzRGODMwNzhEMjNBQTE1NDI5RUM3QzY4QTM5Ci06MTA4RTgwMDBFQzc2QzY2NTYwREJERkY2NzJERDJFRkI4OENGQzNFRUM1Ci06MTA4RTkwMDBDMTZEQjVDNDdFMTM4OTY1NzE5Q0MzOUI4MzNGNUVDNjVCCi06MTA4RUEwMDAzODkwRDQyM0UyQjIzODNFQzQzNUQxNzczMUFBQTMzRkZCCi06MTA4RUIwMDAzOTcwMzFDQUUzQzlFMzJCN0U2MTYxRkVGMjMzOERFQjc5Ci06MTA4RUMwMDBCOEZGRDg2OTU1RjBBRkYxNEM5M0UwREZCMTNGMzc5NTZCCi06MTA4RUQwMDAyREUyQzBDOTA4QjBERkU0ODgxQTY3N0M5MjIzNEQxRkQ5Ci06MTA4RUUwMDBCNzYzNUVGMjRDNUI5M0M0REI5QzY5MkE2M0ZENTkyRTI5Ci06MTA4RUYwMDA1MTNDOEQ3MTY5QTQ0QUI0NzNGOUZDNUM3M0YwOUIxQ0ZFCi06MTA4RjAwMDAwMjFGRDAyRjUxQ0NFMTBGNTVDREUwQ0Y4RURFNTM1RTQ2Ci06MTA4RjEwMDBDRTYzNDc5RjYyMTZGMjI4QjdFRTkwQTYwQTNGQkY2NTYwCi06MTA4RjIwMDBGRTgwNEZERDY5QzkxNEZDMzhFQUQ4MUQ3REM3NDQ3RTM4Ci06MTA4RjMwMDBEQjNENjk1MUVGRUUyMzFFNjdGQzhGOEUyNTNBMjhENjY0Ci06MTA4RjQwMDA1OTM0Q0Y2MjNDM0VFNjJFRDQ2MUFERDc1RTQ4MDg3MUZECi06MTA4RjUwMDBCNDkyQjZBNEU3RDBDMzlBQjAyNEQ2OEQ1RTRBN0M5QjY3Ci06MTA4RjYwMDBGOTMyREE5QUE4RDVFQTY3Q0ZCM0E4NERFNDQzOTI4QkQ5Ci06MTA4RjcwMDA3N0FGNjc4RDNEODdCRjJBRjY4NzNDODI2NUI0MzUzRTYzCi06MTA4RjgwMDBDNzc4MzhFQ0YwNjdBRDk3MTI3M0M1RjM3OUVFM0MxMUYyCi06MTA4RjkwMDAxRDkwQzE4QkYzRUQxRThERjk0RjY0OTYyQzgwQ0VBRUUzCi06MTA4RkEwMDA3Nzc1NzZEM0UzMUVEM0JCMENFM0E0OUQyQUMyRjhGQUVGCi06MTA4RkIwMDA5Q0RFQjY0MENGQTAwQjcxRkNCMUJFQzVERjhDODczMjAyCi06MTA4RkMwMDA4MEI0QzM5Q0E5NzMxQjI5RUVBMTQ1RjBCMzY2NjZGRjZDCi06MTA4RkQwMDAxM0FDOTcwRDZDNTVFMUU3NkUzQUY4MjlFQkUwMTI3QzgzCi06MTA4RkUwMDBBOUExMUFENjQxNTI0QTAyMTI3OEYzRUZEMzFFNEQxMUFECi06MTA4RkYwMDBGMURBNTVBQzA3NzdFNjk3RDM5OTBGQTE3RjNBRjRFRkYyCi06MTA5MDAwMDAzNEY0OEY2RDc3REQ2NzBENTlFMDMxM0E3NEU5RERCMEU2Ci06MTA5MDEwMDBEMENGMjI4QTMxMDFCRjgyNzdFNDlERDREQ0JERUZGMDRFCi06MTA5MDIwMDBENzdERkI3QzdFN0YwNkRGNzJGNTk5ODA2NEE3RUI2N0I2Ci06MTA5MDMwMDBEN0U3ODZFNkQ0MjFFOTFGRjc4MkFDRDQ0NTNCNUY5NzlBCi06MTA5MDQwMDA5MTQ3QkRFMkYwQ0ZFNzQ5OThFNUM4QzNEM0Q3OUEyOTQ1Ci06MTA5MDUwMDA2NzNEQUQ4MzhBMjJCRjg5NDcyNTlCNzUxRTcxNTZGOEVGCi06MTA5MDYwMDAwQTc0N0U2MjgxMjRDNjc3NkY5NjZDMEI1Rjg3RUEzRTM2Ci06MTA5MDcwMDAxM0Y3NzYzMjczRDZDQjdDQUFFOTdERUUzNTcxNkUyRDZGCi06MTA5MDgwMDBCQTQwRDE3QzFEMzdGODlERkJGMjc2RkQ3MkY5RjJBMDUzCi06MTA5MDkwMDBDRUY5ODFDRjQyOEYyM0MyRjI3Q0JFMUZEN0JCRjdFMTRFCi06MTA5MEEwMDA4Njk2OTlGNUFCQTVCMzhGOTUyMzhFMjc0REM5QjBFNzZBCi06MTA5MEIwMDBBQUZCOTZGQjRFQjFEQzdERERCQTJGMDkyNzIyNjFFMEM5Ci06MTA5MEMwMDAzMTc5RjZDNkU2QTVGMDM3NUFGN0Y3MEFCRTQ3M0JFRjA3Ci06MTA5MEQwMDBDMkRGMEE5N0RGNUQ4MTYwMDM4NUEwMkVCNTdBMkEwQjc3Ci06MTA5MEUwMDAzQ0RFMkI0RERDMTM2NjlEOTBCRjBBREU0QkJDM0VGQjg1Ci06MTA5MEYwMDBGNkNCMTJENzgzMDRERTc3M0IyRjU1QUVCRkFBQjBFNjdFCi06MTA5MTAwMDBFODc0ODQ5NjMzQUY3RUFGNjlDRUI5RjVEODBCNTkwRkFBCi06MTA5MTEwMDBBODFFOEY5OTk1RkY1Rjc3QkI0RjdDRDRDMDc1QjkzNjc5Ci06MTA5MTIwMDAzNEQyRTAyREE4REZGOENCMzhGNzdDOEYwQzdDMTBENTNCCi06MTA5MTMwMDA0QjBBRjkyNUJCRkM1Mjg1OTVBNDhERUVGRDM4OTM2RjQzCi06MTA5MTQwMDBFM0NDMzdBRUY3RDEwRkQ2M0ZDRDNDRTlERDE0OTFGNDM3Ci06MTA5MTUwMDA4MkZCRjNGOEY5NjA3NTgxREY4OTdFNDVDQzI3MzU1QkFBCi06MTA5MTYwMDBGMzQ0Njk2MTlDQUY4OTM4MjdEMjhFM0ZBMjZDQ0RBNkFCCi06MTA5MTcwMDBBNTg1RTMyOTk3Qjc1OUMxREI5RjJDREUxOUU3NzM5Q0JFCi06MTA5MTgwMDBFM0FENEEwRTZGM0JGQjNBNDhEQzQ3NkVERTY5MkZCRTBCCi06MTA5MTkwMDAyMDJFNkJEMDY3RkYwNkUzOTM5RUE5OEE3MEMxQjlGOEIxCi06MTA5MUEwMDBBMThCNzM3MzQ2MTI3QzVDNDk5NkMyN0U5QkUxRjExOUQ4Ci06MTA5MUIwMDA2RUFCOTQ1MTYxMUZBMDhDRTgyNzVBNDhDQ0UzRkI1RDRECi06MTA5MUMwMDAxRTM3QUI5OTIxQTk0MUNDQjM1NEYwNzIxNTlEMTVGMzBDCi06MTA5MUQwMDAxRUEyMjk2MTREODJDMEMzQjY5MTIxNkM4QjNGQjM4RTE0Ci06MTA5MUUwMDBFNUEzM0U5RDU2OTg0Rjk5QTgxQUJFMEEzRUIyOTRDQzZDCi06MTA5MUYwMDA1NUJGN0NGRTJBNURDREYxMTM5M0YxQjhEOTFBOUY0Mzc4Ci06MTA5MjAwMDBBRjBGQkFFN0RDRTBCNzFBRDc3OTgyRUM0M0U4N0E5MDdGCi06MTA5MjEwMDBCMjBBNkZGMjgwNEE2QjE0RTRGM0EwNEFGRTYyQzQ3Qjg4Ci06MTA5MjIwMDA3NDU4MTZFNzc3MzBBQkRCQUM1RjQ2OTlCQkVFMEJBQ0ZFCi06MTA5MjMwMDA0M0JCRDk3NENFMjk1RjM1Q0YzNEU2RjNCRDEzODc1NUQwCi06MTA5MjQwMDBGMDE3RTI3OTJBQkRFRTExMzg2NkM0N0UwRjczRTBDOENDCi06MTA5MjUwMDBCQjk1NzQ5NURCQTk3MEE1QzM2NzlBN0E5NkY3NzlBNDM0Ci06MTA5MjYwMDBERjI3REUzOUIyREYxMjc4RkMzNEVDRDQzMzAwM0M4M0U0Ci06MTA5MjcwMDBGMEIzRUFBMDQ0NjNEOEQ3NThFNEU0OUJGM0JGMEFBRjQ1Ci06MTA5MjgwMDBCRTUwMjNDRjc3RUUzMUI0NjkwQ0ZEMDFCRkIzOEU2OEI5Ci06MTA5MjkwMDBCNUM2Nzg0OTk5QTg3QzJCRjBGNTcxOUQ4QzkyODgzQkQ2Ci06MTA5MkEwMDBGOEMyRDRCNUJERTJEREU2RDMwRTIxMjRBM0ZGQTMzMTdECi06MTA5MkIwMDAwOUVGNjlDOTM0NjkwRkM3RTMyRkM5RjBGQjFBRUMxODJECi06MTA5MkMwMDAyRjdDNTdGRjNBRkNGQzVCN0NERTI1NUQxMzc4NTE4MkQ2Ci06MTA5MkQwMDA3NDdFNjdDQ0E3NUY2OTdDNkZDODNDQUZDQzgxRUYxRjAxCi06MTA5MkUwMDBDMEVGNDk1N0VGMkUxNzNCQkE3MUQ4REVBOENCQThDN0ZECi06MTA5MkYwMDA5Njg4REZFMDdBMzRGQTJCOTYxM0ZDNkUyODREMDhCRjZGCi06MTA5MzAwMDA5N0E1MjNENUMyODk2QUFGNjBCRjM5OUUwN0M4NkM2MTMzCi06MTA5MzEwMDA5QzI1Qjc1RTdCRkM4RUJGRTkyMkM3RjI5OTY0M0UwN0FECi06MTA5MzIwMDAyMEU3N0VDNDc1MDBFN0MyOEZCNkQ1RTZENERCRkFCQzcxCi06MTA5MzMwMDBDODRFNjFCRjY5MzkyRUM4Rjg4QTYyRjgwNURGNjM4OUIzCi06MTA5MzQwMDBCMTY2NThCNUNERDQ3Nzk2RjA5MzFENzkwNEYyNzlBNDFGCi06MTA5MzUwMDA3ODFGRENDN0Y0MDMzQzEwNDE4NjVEOUE5MzRGQUE0NDAyCi06MTA5MzYwMDA1RUNDQkY5NzUyNTQ2Q0UwNzE0NEJCNEExRDlFRURGQTJGCi06MTA5MzcwMDA2QjkxNEQ5NUIzRTMzQkU5NEI5Q0U0RkNBNjY1NjM2Q0I0Ci06MTA5MzgwMDA1NERDQTMzQjlCNTlFRjE4QTdFRkU0NzA5MkYzMzg2REMwCi06MTA5MzkwMDBCMTYzQTlBQzJFNzAxOTYxOURCRUNGNjdERjkzQzFCQUNFCi06MTA5M0EwMDBBNzdDNzYzNUM3OUZDMzAzMDUxMjI0RDU1QzlDNzNGODUwCi06MTA5M0IwMDA2ODVDM0ZFNkIxODlGQUU1RUExRkNCRTM3NEEwRDhDMTQ3Ci06MTA5M0MwMDAwNzNGREYxQzFDNzRENDcxRTlFQ0ZDRkYwNzUzQjdBN0ZGCi06MTA5M0QwMDBFQkIwMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Ci06MTA5M0UwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQjdCQ0JDN0MwRjBBMzYwCi06MTA5M0YwMDAxRTgxRkREMEY4RThCODlEMTdCRjNDQTk1ODg2MDFDMTcxCi06MTA5NDAwMDBDRUU3NjI2MDA4RTE2MDYwMDgwNUUyRkQ0MDdDMDA4ODBDCi06MTA5NDEwMDBFNTM5MTkxODIyODAzODEyODhBNzAzRjkzMzgwQjgwMDdCCi06MTA5NDIwMDA4OEQzODE2QTlCOTkxOTE4NzZCMTMxMzAxQzA0RTIxM0Y0Ci06MTA5NDMwMDA0MDdDOUU4RDc0RkIzRjg4MzMzMDU0QzgyMEY4Qzc4MDMxCi06MTA5NDQwMDBFQzIzNzJENEY1RTMyODFFQkMzOENGMDA5NUJGNEUxMzMxCi06MTA5NDUwMDA5NUJGNEQ5QjgxRTEzRDkyOUFGNTlBQTQ5OUFGNkNDODU2Ci06MTA5NDYwMDBDMEEwMDJDNDAwM0E0Q0U5NTk2ODAzMDAwMDAwMDAwMEEzCi06MTA5NDcwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDNBCi06MTA5NDgwMDAwMDBCRUQ3RDBCNzg1NEQ1QjlFOERBOEZEOUYzOUVFQzVCCi06MTA5NDkwMDA0OTQyMTg0MjFFM0IyMTQwODAwNDg3MTAyMjUwQjA5MzVECi06MTA5NEEwMDAxNDE0MkRCNTExM0QyRDdBQkMzQTg0NDc5MDY3NDBBQjFBCi06MTA5NEIwMDBFOTExNEYzNjI0ODQwMDAxMDY4QTM1NzIyMjRFMTAzNDk5Ci06MTA5NEMwMDA1QUE4NDFGMUQxNTM2Qzg3ODcxNkFERUQ4REQ2NTZEQjg2Ci06MTA5NEQwMDBGQTg4QThBMEE4OUM1NDQ1QTdFN0Q0NzJEN0ZGQUZCNUQ3Ci06MTA5NEUwMDA5M0JEMjczMzAxREJERTczRUZGN0REOUI3RTc1RjFFRjc0Ci06MTA5NEYwMDBGNUZFRDdGRjVBRkZGQUQ3MUE0NUI0MTFGOUVCODQ5QzUxCi06MTA5NTAwMDA4NzNGOUFFNjhBODQ5MDIxRkQyOTIxQjJENkUzODA5NDkwCi06MTA5NTEwMDBFOEU3NDc1ODYwNzI1RUJBMThGODJGQTNBREIwQ0VEQjBCCi06MTA5NTIwMDBGRDE3NDJCMjA4RjkxRUNGQTM3RjIxODA2NzcwQzAxOEQzCi06MTA5NTMwMDA4RjkxOTJBMDQyNjJDNUZERURDQzIwMENENjQ0ODE5QzU3Ci06MTA5NTQwMDAxN0UwQUIzNURGRThBN0RFRTExQjRGRDIwOEY5QzJDOTRGCi06MTA5NTUwMDA1MkJEOEE2Njk1RDNGNDRENjdCNEIxODAxMDg3MTAxRTUyCi06MTA5NTYwMDBDMUM2NTM3NzQ5NzUyOUE2OTc0MkRBMjg5MEI5NUQ5RUZFCi06MTA5NTcwMDAyNEUzMjBFQjA4OTk0NDkzRkRDMzQ0NTJEMTNGRkVDNDM5Ci06MTA5NTgwMDA3MjQ2REFENDQwNDhDQ0RFMEZDQjMyMDkyNTZCQjc4MjY1Ci06MTA5NTkwMDA4RTFGREE3RDVGMDg1N0UwNzgzQzQ0MDY3QzI4MUMxRjRDCi06MTA5NUEwMDAzNjEyMjQ4NENFRUI4OEZGRjJDMDNDM0FGRUQ2Njk0QURDCi06MTA5NUIwMDBEMDBFMTkzQjg3NDE2NUUyMzNGMDM4MzcxRjYxMDc4N0NBCi06MTA5NUMwMDAyQjg5QzZGMTFENkIxOTQxRUIzOTgzMjJEOTQ0QTFBNjIxCi06MTA5NUQwMDA4MjJBMDcyOTIxNjRFQjk0Q0YwMzYxM0ExRUE3MUMyMTNDCi06MTA5NUUwMDAyQUE0OUVFNEUzQkI5QTg4QkM5REJCQzhDNUNDM0I3MTUyCi06MTA5NUYwMDAzRDY0NThBMzQ5MDg4QTMwMkY2M0JDREI2Qzc0NUM5OUM2Ci06MTA5NjAwMDA3NDNEMjY4OTY0MUY4NUI3OTRDRjQ5ODNGMTE4RjM3MjlFCi06MTA5NjEwMDBBNEU4QTcxOUYwM0E5QTkwQ0QwRDBFNEM5QjI2Q0Y0OTlECi06MTA5NjIwMDAyMzUwOEZGNENFODVGNUREM0EyNTRCREMyNEY0OTczRkFCCi06MTA5NjMwMDAzMkU1Mzk0NzBGOUQ2RjIzQUZEN0FBMUQ3NTQwNzk2Mzc3Ci06MTA5NjQwMDA5RDEzRjFCNjk1RTMyNzQ0MDQxQ0Y3RTY1MkQ3REM2ODc2Ci06MTA5NjUwMDBDOUMwNzE4NDg4MEZGM0I3M0E2OTI1OTg4Nzk3NDRGNzkyCi06MTA5NjYwMDAxNTQwMEIzRDZERjMyOUVDOUJBQzk2NkREMjA2RDJDQjI5Ci06MTA5NjcwMDA4QzUyMzkxOEEzRTNGNDc4M0M0MTNCQ0RGNzA0NTg3RDc0Ci06MTA5NjgwMDBDN0VCNDI1NEMzRkEyMUNGMzA1QURFNjVBQ0ZGNjRCMTU4Ci06MTA5NjkwMDAxRjlGRjRGRjNFNTI0RDA4RTU0NzVGNEVFRjZCRDA4RkEyCi06MTA5NkEwMDBGRDc1N0IzMDQ0QkZCQkZGRkNFOTZCRjM2OUJCRTQ2RDI4Ci06MTA5NkIwMDAyMUI4MEZGQTI1QUIyQ0VCNDVGNjMyQkNEQTU0RkE2RjIxCi06MTA5NkMwMDA5QUVGOUFCNjY4MzY0Q0MxRkRFNUUzRDU4MEI3OEQ0NTczCi06MTA5NkQwMDBBQjVENkI2MUFEOEFEOUZBQTlGNDdGRTcwQjY5RkI5QUEwCi06MTA5NkUwMDA2MkU5REY2NjVFREYwMjIwNEQyQkVDMUUzOUU3REIyM0VCCi06MTA5NkYwMDBCNEQ0RjRFMUVFRjE5MTU4MDYyRDJDREQ4OEVCOURBQTRGCi06MTA5NzAwMDA1Q0ZERUIxMzJFM0I2RUVBQjc4RDc4MzM0RkI5RTkzRjIyCi06MTA5NzEwMDAyRTI1OTcyMjlGNUZBMEZFMTcwREMxQ0I4RURCNzBERTNBCi06MTA5NzIwMDBBMjU5REVBNDJBQkY5RUQzNDcxRjlEMTU1MEZBMjhDMTE3Ci06MTA5NzMwMDBGNTBDNUM1M0RBRkZGRDI1QTAwQkUwMDdCRDEyRTUxODIwCi06MTA5NzQwMDBGMjIyOUQ2RkYzNzREMjJCRDFGNTY4MUFBOTY4RUIyODI5Ci06MTA5NzUwMDAxRUVDQUExMjEzN0NBQ0NGNUVBMDJGRjgwN0FENkEyRkM3Ci06MTA5NzYwMDA2QUVFMTZDNjAzRjAzRDhCMUM2QzE5RkFBRkMxRDgyMDA3Ci06MTA5NzcwMDBFMzRCNUM4N0FGOEFCRjE4RTA2RjVDM0ZGRUVDQTQzQTE2Ci06MTA5NzgwMDAyRDA2RUI1RDFENDBGQzc4RjkzODM2NENCRjVEOEJEMTYyCi06MTA5NzkwMDBGOTZDQzhGRTYxRTg2RDYyQzJFM0E1OENDRkZBQzY5MzhFCi06MTA5N0EwMDAxMzI1RTZGRTBERkVCQTQ0MDhCRDA4Rjg5MTk0RTA2QjVGCi06MTA5N0IwMDA2MThBMEYzMjU1MDlFRTRCMzIyRjU5NjA3MkE1MUZDRkM3Ci06MTA5N0MwMDAwRTk5MTg3ODAyRkEzREFDMDdBRUYxRTI5MEFBMUQyNjc4Ci06MTA5N0QwMDAzQ0RCMDNDRkZEMTlGMDI3Njc5Mjk4N0IzQzdFNkY5MkFDCi06MTA5N0UwMDBEM0E5RkNDQTI0QkEzQjBENUI5MTAxRkUzMzI5NDBGRThDCi06MTA5N0YwMDBBNEY5MzM5NDMyOTAwQjk3MDdDM0I0OUY2NjFCRUY0RkM1Ci06MTA5ODAwMDA1RDZCNTlENzNGRjM3NUVEQ0ZENzAzRkY2NEM5Qjc2MURGCi06MTA5ODEwMDA3QkNENUUyRTM3RDQ0NjFDREY4MEZBN0U1NjNGNzFCRTZDCi06MTA5ODIwMDA3RjAyMzkzQTA5Q0FBOTlDN0UxQTAzQTA2RjFDQzM5QTA5Ci06MTA5ODMwMDA2NzFEMDFCQzhGQUVFQjlBMEY3MzU0MDlFMkMxOTBGRjE0Ci06MTA5ODQwMDA1NDAxMTIyODQ3RjVDMzlGQTE5RTQzQUI0NkJDREI3MzZFCi06MTA5ODUwMDA0MjI0OEM3OEIzRUFEMzk0NzIzOTQxOEYwRUEwMjc5NUI1Ci06MTA5ODYwMDBDMjQ2MUI4NUYwREYxQzE1Rjk4RDI0RUE2RjlFODY3MkI3Ci06MTA5ODcwMDAyRjRBMEYzNjI2RjAxNTZEMkFBOTlFMjkxNTk4QkMyNTZBCi06MTA5ODgwMDA3QTI2Q0U1RjM2RTg4MERCMDczNjAzMUQzQjE5M0ZBQkY3Ci06MTA5ODkwMDBCQzVGMDVDNjQzRTVBMTkzNDRCMTcxMzdBNTc0ODBCRDkzCi06MTA5OEEwMDBBNDBFRTE3M0ExQjI5ODAwNzQyMzkzOEQyMEU3RUMyMUZDCi06MTA5OEIwMDA5MUU4MDUwM0ZCREZDQUY1NDlBQTc5NkM5RDkyNUMwRjFDCi06MTA5OEMwMDBFNDBBNEMwRjQ4OUUzQUJFMUUzN0FBQzA2NzgyMUUyNjg1Ci06MTA5OEQwMDBFNzgxREY0ODg0RUJCRjIwQUVGNzg2ODY3QUYyMEU5REUzCi06MTA5OEUwMDA4Q0VCRTg5NTQ0QTNGNDIzRTdENDg1NDJCNDlFMDRCQ0YyCi06MTA5OEYwMDA0ODQ1MzRGMTk0QjM1NDBFNkE2NkZBRUE1QjQ3QjIxNkVGCi06MTA5OTAwMDBEQkIzNTFCNEMwM0M2RDFFQzczQzMyMUU1MkY1MUE0QzNECi06MTA5OTEwMDA4QkM3MkUwNEZFQjBBNTVENUUwRkE2MUNBNTlCNEEwMTU5Ci06MTA5OTIwMDBGQTc3MjRBNzJCRTJBMTRDM0EwNTYxQUQzQTY5N0Y3QzE2Ci06MTA5OTMwMDBCRDc5Qjk5NEY0RDU0NzFGQzY3QzM1QTVEQTNCOTA2RTQ2Ci06MTA5OTQwMDA1Q0U1QUEwMEFDNDBDMTZFMThDRjUwM0U5QUExRTFFNjlBCi06MTA5OTUwMDA1NUUyNzg1OEI3QzhBQzUxNzQ3RDg2RjZDQzQzRkRFNDI3Ci06MTA5OTYwMDA3REZEQ0EwRjYwNUVFQjRCQ0E0RTgwMDk5NzE2NTRBRjVGCi06MTA5OTcwMDBCOTlDQUVBN0FCOTgwODgwRUY4REQwRDg1NDY4RTE4NDJECi06MTA5OTgwMDA1RTA5N0ExREZFOTk0REM4RkYxMDlFMDlFOTFFNDYzRUVDCi06MTA5OTkwMDA1NjdCNTNENDY0NDM5RTg4ODNEQTJGQzI3OUZCQzBGQTg2Ci06MTA5OUEwMDAyOUU1MzMzMUYxMEZFQUYxRDUxNzY3MkZEREM4RkFEMzc2Ci06MTA5OUIwMDBFOUZGODBFRkZDMDlGQTM0MkQ2NDZBOTcwMDdFQUNGRDY0Ci06MTA5OUMwMDA2QzAwQkE0MUZDQUVGQTZGRTk0RjI1M0IxQzFBRDgxRDVBCi06MTA5OUQwMDA0NUEyMUFBNTdEQTcxMUQ1NEY2NTMxNzFDRDkwMDlFODMzCi06MTA5OUUwMDAxMzM1QTc1Nzg3RTVCREQwQkFBQzI3NjQxNkNBNTFDQTRDCi06MTA5OUYwMDBCNzY2M0E2RkU3NzIyMDUwRDM1NEQwNENEQjNENTdFRTM4Ci06MTA5QTAwMDAwOTgyMUMxODRBQzU2NjQ2RkFDMEY5NkM0RUIwQjMzN0Q1Ci06MTA5QTEwMDA5N0VDNDFGOUQ4NDhFOUE4MTBFQ0ZEMTIxMUVEQTE4REExCi06MTA5QTIwMDA0NThGQTk2NjdERjUzMzQzREUwQ0EwMEZBMkM5MTUyODJBCi06MTA5QTMwMDAzQTA4QTFGODkxOEFDNDkwNzNGQ0RGNEYxRjg5NzZEMjRGCi06MTA5QTQwMDBDNUQyODdGQjQ2RUI3QTdDRDVGNUZBNjU5RkZEN0Q3MTIzCi06MTA5QTUwMDBGNEYxRjdGNjY3QUM2QjJBQjk0NUQ3MTVFREVGMTY2RDQzCi06MTA5QTYwMDBDRUEwRjZDQkMwNzVERDgxRUJFQTJBMjJBMTY0NzJCOEU0Ci06MTA5QTcwMDA1QjEwQUNGQUM5OUM5QUY1MDdCOUQ1QjI1RUI2NEJCRjdDCi06MTA5QTgwMDAzM0Y3ODE0MUYwNjE5QjZCOURBRkQxQUVCMzVFRDJERTA3Ci06MTA5QTkwMDAwNTNCNTY1NjUxMUYxOUZCODc4RERBMEUxREVDRjk3M0U1Ci06MTA5QUEwMDAzOTg0RDk3QjkxNTUzMTAxRUNBMDIyODI3NjEwMzQyMDgzCi06MTA5QUIwMDA1MkQ4QTk4NUEyOUIwNDQ2RkZCMDJFODY3RDYzQTNFNkZCCi06MTA5QUMwMDA5OEI5M0Y0OTc1NTlGQjlGQUIwQkU2RjEzQkVCMTUxQzcxCi06MTA5QUQwMDA4NzAzRkEwM0JFRjREMDA2NjlCQjUyMEU4OTM5RDFGRTYyCi06MTA5QUUwMDA2NEVCMDc1REIxN0RGQzlEMTc0NTA3MDZCRDAyNUExOTYxCi06MTA5QUYwMDBCRDVBRUIzNTA3Q0E0OEIyRjUxQkQwREY3NUQ2RjFBNkMzCi06MTA5QjAwMDA5NDRCODlGNTNDQjI3NkNBNjQ4RkE0QUUyNzkzNTMyNjUyCi06MTA5QjEwMDBCQjY2Nzg5RkZGNDIzN0VDQjlBNzA1NkExNzM2MDZCRUM5Ci06MTA5QjIwMDBBM0UzQjhFMTNGNTRCRkI2NDA0QUY1OTkzNEFDOEE4NDA4Ci06MTA5QjMwMDAzNUQwOTMxQUUzMTMyRDlERTlERjRFQzFCMjBGMzdCRTI2Ci06MTA5QjQwMDBBNzFFMDdFQjJGQkU5MEQyMjJDODM1NTlCM0Q4Q0I4OUI4Ci06MTA5QjUwMDA2OTYzNDNFMDZCMzIyNTRBNzdGRDAzNTNFNTg5RDQ4ODc2Ci06MTA5QjYwMDA1RDFCOUE1QjREQ0I2RjZDRTg5QzBBREY4RDcyMzM0NUIxCi06MTA5QjcwMDA2M0ZGNERENUE2QzkzRTk2MDkyREU3QzBBRkU0RkM0NDZFCi06MTA5QjgwMDBGOEE4MTJDREE0REYxREE0MEJGM0U5NTdCRTdFMDREN0JECi06MTA5QjkwMDAwMUVEMkFEQTY0OURBODYxQkIwQTc5MUFDQjQxNDM1MEQyCi06MTA5QkEwMDA4RTRBRjFBOTcyMzE2QjBFRTBDREI2NTAwOEM3MjU0NzM5Ci06MTA5QkIwMDAxQ0FCMjlERjZENzY3MjU4RTNCMDlGQzMyQTg3MEIzODQwCi06MTA5QkMwMDA0Q0Y1MDRDMDZFODVDMjM0NzVEQTIyMkFDMjJFMEUxN0Y3Ci06MTA5QkQwMDA3MDM4OURDMzdFMEUxNzcyNThEODgxRjA2Njg1QjVCNzcwCi06MTA5QkUwMDA0OThFQjJGNjVEMUNENjM4OUNDRTYxOTVDMzg1MUMyNjg1Ci06MTA5QkYwMDA3QjU4RkY3NjA2QkI2QzUxRDZCRTlCQzMwNTFDQ0VFMERFCi06MTA5QzAwMDBCMDlGQzMyMzM4MkNFQzQxMzhENUZBQjk4QTNBMTk5RTUzCi06MTA5QzEwMDBGQUU0NDI1NzNGOENDQTgzRTNCNTBGOEUyNUMwOEM1RUIxCi06MTA5QzIwMDAzMjA0NDY4N0YxNkYxOTc0MTM0NEY5NDgzQzc5Qzg2RkMwCi06MTA5QzMwMDBFMzFDNkNCRDFCRjc5N0ExNUY4MjcwM0Y4QUU5RkIwOUFCCi06MTA5QzQwMDBEMEM3RTczQUM1RTA2MEZDRjU0MzJFNEY3NzgyOUQ0QkM1Ci06MTA5QzUwMDBEM0VEMEQyQUE2REIxQTAyNjhGNzZFNjlEMEI4NUZBNUFFCi06MTA5QzYwMDAxOEJGNkY2QzA4MjJCQ0ExNjEzMkE2RUIxQjQyRjhCRDg1Ci06MTA5QzcwMDBCMTYxMTZDMjlEMERENTk4M0VEODMwMTdEM0JEMEQ2MTg4Ci06MTA5QzgwMDA0Q0Y3MzQyQ0M2NzJEMTg2M0E4NDc3NTM3QjE3RDJGNkMwCi06MTA5QzkwMDAwNjFERDM1RDBEMkQ5OERGRDYxMDQxRjg5MUZENjVDRkRGCi06MTA5Q0EwMDAxNzUxM0Q3RDJFMkNBMjlFNEYzNUZFQTE3M0FEN0U5MEE3Ci06MTA5Q0IwMDAyMUQ1NTZCOTk4M0UyM0REOTJBRjRFQ0JCNkZBNERDQUE4Ci06MTA5Q0MwMDAwQjJEQjBBNzY0QUMwNTc2MTU5NTU5REE3M0U0NENCNTQ1Ci06MTA5Q0QwMDBFNDJCOTk1NTE2NThGNjVDNjU4MUM3NDRFNzU4RTBEMUU2Ci06MTA5Q0UwMDA2RDM3NThEQTFCMTlBOUIxRTQ4RjY4NTk2MkM5MkZEMEIyCi06MTA5Q0YwMDA1NzVCRTBGQ0ZBN0ZCMTk0Q0ZBRDVCNjdDOURGRTYwQzQwCi06MTA5RDAwMDAzRjIzNTI3OTM1N0NGMTI2NEJCOTYxRTExREQ2N0RERENCCi06MTA5RDEwMDBFQ0NDOEI5MjVCRTQzMzNEQ0JFQ0NGNDg5NEY3NTIxRUY2Ci06MTA5RDIwMDAwOTg1NTA2RjMxRkREMjA4NzQwQjdFQUY1QzEyREQyN0MwCi06MTA5RDMwMDA4MEZGRUE4QTEzQjBFRkIwMTczMUJEMzM2MDdGOTlEMDRFCi06MTA5RDQwMDA5RUUyNzlGMDM1OURGNjUzRTkzQjExRTgzMUYxMTkwOUFFCi06MTA5RDUwMDA5OEVBNTFCOTdGNTI2NEZCRTY0RDc3QjE3RDc1RUI1REIyCi06MTA5RDYwMDBDOUY3RDcyOEQ5RTkzQzVBQkY0Q0VFQkZFRDExMjU2RTkzCi06MTA5RDcwMDAwN0U5OTY3RDRBRUI1RDAyOTZGRjdCREIzN0YyMTNEQjRBCi06MTA5RDgwMDBFREVGOEZEMjVDODVEOTBFODkxQTdFNTFBMjY3RjVFRjZGCi06MTA5RDkwMDA3NzZEM0RGRUY5QjBFRjMxRjZCOTEyRTdGM0NBQjlDMUZDCi06MTA5REEwMDBCNzlCMjg5RkFDNTcwOUZBMERENzdCQUEwOEQ4MTVFN0FGCi06MTA5REIwMDA1NEM2Rjc2NDZGMUVFRUM3OERGMjAzQzc2N0IyMkI1MDBGCi06MTA5REMwMDBGRUI4QUM3RTVBQ0YxQzk0MkZFQjMzMDdCN0NCOTRCOEI4Ci06MTA5REQwMDA4NEZFM0IyOTJFOTAxOEQ1M0I4QTVDM0RBQjgwOEU0QjkwCi06MTA5REUwMDA3OTQ1MEFBRTI1QTg3RjkyRUVFRjA5RDk4MTc4OTAxMkM1Ci06MTA5REYwMDBFQzlCQTYwNTA5NzI2RjQ2MkVDRURCNjZDOEI3Q0MyQTRGCi06MTA5RTAwMDBGQ0RFQTQwRTNFMkUzQjhDMEJDNkMzQzc2NThCQkIzMTVDCi06MTA5RTEwMDA5NUUyNEUxQ0VGOTQ3ODA2QzI5M0UzN0U0QzJGOEQwRjkzCi06MTA5RTIwMDBDN0I0MjIzRTBDRDM0OUYxMTE5ODk2QzcwQjMwOUQxODQ4Ci06MTA5RTMwMDAxRjg3RjVDQUUyNjMzMDlEMTA5Rjg4REY4M0YxMDk5ODgwCi06MTA5RTQwMDA1RTEyRkYxQTdFMUYxRjlGODI2OTY5RkMxQkY4QkQyNEVBCi06MTA5RTUwMDA1RTg5RTlCOEY4MzdGMUZCRDhGODk1OTg4RTg5NUY4QjYxCi06MTA5RTYwMDBERjhCRTNENzYwM0EzQUZFQ0Y5ODhFOEE1RjhGRTlDOERFCi06MTA5RTcwMDBGODdDNEM4QkUyRjMzMDFEMTE1RjhBRjUwQUUzQjc2MDgyCi06MTA5RTgwMDA1QTEwQkYxNUJGNkJGMTU1OThFNkM3RUZDNDM0MkZGRUNCCi06MTA5RTkwMDA3RDRDNzNFMzhEOThFNkM0RDc2MjNBM0NCRTE5RUI2NUZFCi06MTA5RUEwMDBDNzM3NjIzQTJDRkUwM0ZDMUU4ODZGQzczNDJCN0UyRjA3Ci06MTA5RUIwMDBBNkZFRjgwMzk4QUZDNjNCMzA0RDhCRkYwOEJGRkJFMjEwCi06MTA5RUMwMDAwRjYzRUE4RDNGOEVERjNERjE4Mzk4QkFFMzNGQzVFRjI0Ci06MTA5RUQwMDBBRUY4NEYzMDc1QzY4RkUxNzc0N0ZDMDhBNjE3NUEyN0IyCi06MTA5RUUwMDAyNUM3MkFDN0E1NEM5NzA1OUVGQzZFQkE4NTNFMkE1RUZCCi06MTA5RUYwMDBCN0NBRjFGMjU3MEEyREY5NjUyRjVBRTU3OEYwNzg5OTJCCi06MTA5RjAwMDAwNTFFN0Y3OEFBQTU3Q0M5QTEyQTBCM0M3NkJGNTU4RTc5Ci06MTA5RjEwMDAxN0VGQjVDQUYxNTFFRDU2Mzk1RUI0RDMyQUM3MEI1QkMyCi06MTA5RjIwMDBBRDcyNUM2QkIyQ0FGMUJDMzU1NjM5OUU3MzlCNTU4RUNGCi06MTA5RjMwMDA2NzJGQjNDQUVGQzAwMkFCRkNDRTIyQkJBQ0ZCRUYxOTVDCi06MTA5RjQwMDA3QkFDN0E2RERBMjM5NkY2M0NFNThGMjVFQzU3QTIyODk4Ci06MTA5RjUwMDA2NzVDMjVGRjZFQTlFNzI4M0E5QTIwOUY3NTI2QTcxMjBECi06MTA5RjYwMDBGQ0U1ODAxMjk5RjJGNzFEQzQxNTM0OUZBQjE4NjkzQUNECi06MTA5RjcwMDA5NzA3MTlDMDc3MzRDREU0N0MzNzA0Rjg4RUE2RTlERjYzCi06MTA5RjgwMDA1Qzg2RTc0QzVGN0NBQkU1MTc0REI0QjFGNEUxODRGOTM2Ci06MTA5RjkwMDAwNUY0NDg1NTg4N0U2RjFFQzY2MUZBNDUwMDM4OTdBMEMzCi06MTA5RkEwMDA5RjgwRTg2NzJBQzEyRkQ2NUNDMEUwN0Y5MzRFNTVFQUI4Ci06MTA5RkIwMDBDQzdGQ0JGMkM5NTk5NkVGNjRGMDIzOERCRjVBMEJGOUQxCi06MTA5RkMwMDBFOTY5RDFFQzIwNEQxRkIxMjU5N0QzOEY0OUVDQkNFRDQ5Ci06MTA5RkQwMDBBQzE4RUE5MEU4N0NGRkEzQjJFNzc2RjBBM0ZERDUxRUFCCi06MTA5RkUwMDBERTI3RDFFRkNCMUNFMTdDNzA0RDdGNkMwQjNGMjQ4M0NGCi06MTA5RkYwMDA1QzI0QTEwN0UxN0IxQTA5M0QyNEExQkNCNkZBNDUxQkVDCi06MTBBMDAwMDBDMUUwQTZFRDdDMjY1NkVGODdGQzhDQUIxN0EzNUZDQTk4Ci06MTBBMDEwMDA5ODc3QjM3N0YwRjE0NDI1QTY5NzlBRkQwNEY3OERGQTY3Ci06MTBBMDIwMDAxMTg1OUYyMzExNzY1RTAzMjlENTgzRjdCODdEMjFDODVBCi06MTBBMDMwMDBERjcwNDREOTYzQTdFQjYwQ0JDOTlBNEZDNkIzNjIxNkYxCi06MTBBMDQwMDBGRDExNkI1RTA1N0FEODAxN0E2ODA0NDhGOTJFNEMzRDAzCi06MTBBMDUwMDBBNDlCOUQxQjkxNUU0QzU1QTIwQTkwMUFGM0VGOUI3NzJGCi06MTBBMDYwMDAyRTlCMzdDNUM3MkYyNERDMUZENDYxRjk3NUVFQUIyN0IzCi06MTBBMDcwMDBDMzdDMjgzRTRFQzA3NzhBOEZFN0E1MjFBOUYxNDFFMDM1Ci06MTBBMDgwMDA2NDgxOEUzRkNGQTBBMkZEODJDNUZGRjhCRTEwRkU4RDc5Ci06MTBBMDkwMDA2NEYyNjNFNkQ1MDc3MTNGNzk0MDUyMTExRjA2RkVFODZFCi06MTBBMEEwMDBERjZERTk4NjNGODZENUZCMjNGNjlCRDA5RUNDQ0ZDNURFCi06MTBBMEIwMDA3RTIzRjFGRUI5M0UzNEU4Mzg0MzI0RTE2NDdBREQzODhBCi06MTBBMEMwMDBGNzIxOUQ3OTVGQzk5RjJEMjhDQzJFNDlFQ0M3MjY1N0QzCi06MTBBMEQwMDBFMzc5RUEwMEI5OTc5OUIwQUZDRjBDQzNBMjUwRkQ0OTFDCi06MTBBMEUwMDBGNTY1OTI3MTRENTdCODdGNEFDRUJGQThGMzJCQzM1Rjc5Ci06MTBBMEYwMDA0MkY2RTc3REE1RjMyRUEwMDQyODZGOTAxQzM5OUU4N0I5Ci06MTBBMTAwMDA3MDkwRUJERjAyQjBFQkE4M0Q3MkVDOERBNzYyQ0JBOTlCCi06MTBBMTEwMDAxQ0Q4NTA0NDc1MkRGQTJEQUNGNkRDODY5ODg4RTdFQkY4Ci06MTBBMTIwMDAwNTdFMkE3MDY4NjNGNURDMEU5MEI5M0Q2OEY0MkIzNzI0Ci06MTBBMTMwMDA1OUZEMjk5QjZEN0M3RjdCRDg4QUM3MDI0QUQwRkY0RTkwCi06MTBBMTQwMDBCN0RDQzQ5M0NGQzZDN0NGMkQ4RDc2RjZGNDhEREYzQTNBCi06MTBBMTUwMDA4RTA3NEFBODM5NjRDMjY3NjEyOTI1MUQxODQ3OEM4RDZFCi06MTBBMTYwMDAyM0IxN0ZDMkNGMTcwQ0ZFOTEzRERDNkZBMkU2NjNCQjJCCi06MTBBMTcwMDA0NkJGODlGRDEwNjkzNjlFMjdBNUMyRUY4MDdFQkVFMkVDCi06MTBBMTgwMDA3OTVEODU5Q0ZDQkM5M0FFMEZFMjY5NkM4QUY1MzVDRTk3Ci06MTBBMTkwMDBFQjBDRjhEODFCQjU3OEZFREREQzU5ODM3NjU0NzM4MDYwCi06MTBBMUEwMDA5RkIzRkY4NUI2MEFFRDEwOTJENDVFRENDQkYxQkI4OTdDCi06MTBBMUIwMDBFRjE3Rjc0NkFBMUM1ODJGMzNERkIyNEU0NURCNjdCOEJFCi06MTBBMUMwMDAwMDBGNEQ2QTU1M0FBNEZCNzZCMjcyMjNFRkJFQ0UxNTRFCi06MTBBMUQwMDA2Njc2NUIzQUE0OUI4QUQ5NzdENzk4QkQwRTU2N0U4RjU4Ci06MTBBMUUwMDAwQUU5RTYxMkY2REQ1RDdBQzhDMUNBMzMzRjJEQTlBNzk4Ci06MTBBMUYwMDA3RkE2NzNBMDIyQjU1QTE0Q0E0MUZGOTI5MDRDNjE5NzcyCi06MTBBMjAwMDAxQTI1RTA0Nzc2QUI1RDk4MUFFM0NFOEU4OEUyMTg1QTlECi06MTBBMjEwMDAyNUJCMzM5NDdFMjVGOERERUE0ODcwMjQxQkFBMDNENkJCCi06MTBBMjIwMDAzOUNBOTcyRkM3QzhBRkE3RjlCNEJEMzEzQjhGNTY0MjgzCi06MTBBMjMwMDAzREU3Q0VCRDk1NTc2QUZERTU3N0YzRkVDNzc0NDY1QkYzCi06MTBBMjQwMDAwQUExN0M4RUI1QkQ3NkRFOUVCM0IzRUIwNEY4OUIyOUU0Ci06MTBBMjUwMDA4RUIxM0QyMzdGMTdDRkI3NDM3RTI2NTIxQkQ2OTc0QjM3Ci06MTBBMjYwMDBERThEQzE3OTg2ODFFNzQwQjFEODA4NzAyMkJGMUJFRDMxCi06MTBBMjcwMDBCNEYxNzEwNDNCQTM5MTJBRTg2N0FFNzUxQzNGMzRDODYyCi06MTBBMjgwMDBCMjkzODRBMjFFOTMzQ0UwRjkxMTlFQkYwMUY2RkRCNDg3Ci06MTBBMjkwMDAzRkI5OTNGOTUxOERGQ0FEQzYzODIzQUM3RTIzRjcwQjQzCi06MTBBMkEwMDAxODc4MURDM0U1OTE0MTNGQTlFODk4RThBMjY1RkY0NkVCCi06MTBBMkIwMDBFQTVENTZCOENFNjRERjAxQkMzOERCOUExRjJFQjRDMjBCCi06MTBBMkMwMDA3M0M3NUFFMTUwOTkxNTlFM0NENUQyREUxNzdEN0U5NDE2Ci06MTBBMkQwMDBBODEzRkQyNURDOEY2MkY4NUU3NkE5MzVCOENGRTlGN0MzCi06MTBBMkUwMDBEMzQ1NUM1ODhFRUYzQjcyNzhCOTg3RUI5OEJGQTVEMTA4Ci06MTBBMkYwMDBDM0Y5ODVGQjVEOUM1QzJFMzYxN0IxN0Q0OTlGNURDMTFFCi06MTBBMzAwMDBGMUREQzVGRDFBOEYzNkI0QjFGODk0MEJEOEMzRURCQzlFCi06MTBBMzEwMDBERTJFN0VGRUQ4QzZGRDMyM0YwNEZDREI2MUJEOTg1RkI5Ci06MTBBMzIwMDAyNkMyRkQzMjVCQzEyRjQzRDM1NkYwQ0JEODgxM0Y5OTczCi06MTBBMzMwMDA1RkE2MDVGQzMyMzQzREMwRkQzMjNGMDJCRjBDODUxRkQ1Ci06MTBBMzQwMDAwNkJGMEM0RDFGRTI3RTk5N0REQzJGRjMwMEY4NjUyOEQ3Ci06MTBBMzUwMDA3QzcwNDJGNzVDRjBCNzc1ODA3Rjg2QzJGNzczRkY4QzI0Ci06MTBBMzYwMDA5RkNCRTU4MzMzQTNEOUUwMEY3QjY0NjZGMjdEQjFERjM5Ci06MTBBMzcwMDBDNkZDRUVCOTYwQTg1MEZBQjg4NDA0OEZBMUJGOUI4QUNFCi06MTBBMzgwMDA2MUYwNzc0RkFDMEIzNjJBOTk2MEI3MzJCQzREMEMwN0ExCi06MTBBMzkwMDAxQjZERTU2MEI3MzIzOERGQzZGNDI4RTgwQkQwMUZFNDQ4Ci06MTBBM0EwMDAzMEYzMjc1MDNFQ0IwNDdDNkZFMTc0NTk3NjIyMkNDQ0RECi06MTBBM0IwMDBBM0UzRjhBM0NDRjVBMjQ2MDIxOEI3QzBGOTAyRjI0MTE0Ci06MTBBM0MwMDA5RUJDMjE4NDVFOTcyNzQxQkIwNEM3OTVCRkI3QUUwQUU4Ci06MTBBM0QwMDBDNDY4RjFEM0Q1NDc1REI0RENBOEFFRTAzQTcwN0QxNjExCi06MTBBM0UwMDA5NUE4RTA1OTIwQ0UyMjREODRGNTM5NTgxOTQ0M0ZEQTFBCi06MTBBM0YwMDA5NkRGNEFDMTNERDA2NjI2QjFEMDAzMUQxQkNBQkQzMUQwCi06MTBBNDAwMDAwNjNDQ0Q0QTBGOTdDNDc3QTNGRERCNUMzNzI3MERFOUU3Ci06MTBBNDEwMDA0OTIzODNFRUM3RkQyMUVCM0UyODZEQjJENTlGRDVCQzA1Ci06MTBBNDIwMDA5N0I1OTM4QTZFOEFEQkFERjZDNEE4OURENjdENTQ3MzJBCi06MTBBNDMwMDBEMTlDNDFGRENGNDVBREQ2RkUwQjlCMTJFQTdCMDZBRjBBCi06MTBBNDQwMDA5RjFGQkYxQUVERkI1NEY0M0Q0RUFDNDlCMzRERUE4NzU0Ci06MTBBNDUwMDAzREYxQ0JCMDdDQTI3RDI3MDNBMTUwQkI0RDNFQUU2MDQ5Ci06MTBBNDYwMDA0ODk1N0M1QzBEODE1RDJCMUZENzc4MUFFNERGNDMxQzc3Ci06MTBBNDcwMDBBRTY2QjBDQUUyMjBBODNEOTg2QjFCODJFQjkzNzBCRTFCCi06MTBBNDgwMDAxRDIyNzBGRTdDMTA5NTAxRkRCRkJFNzA1RDg4RDJEQzgwCi06MTBBNDkwMDBDMTdGMjJCOERGNzg0MzVFNTVBNTUzNzhENzZDODcyOEYzCi06MTBBNEEwMDA1RDAyRjRDNkUyMTkxNEJFNUUxOTRBNzQ2MzAxRDBDMzlBCi06MTBBNEIwMDBDMzIyMDE3QTc4QTQ3MzcwM0UxRTEwRTdFMDA5QTE3RkUxCi06MTBBNEMwMDBBNkEwNDkyRDAzRjU5REFBREVDRTI2NzE1NjM0NDlCQkMwCi06MTBBNEQwMDA1MzM5NUY5MUUzMjREMTZFOUUwQUYzNURERjM0NDc0NTIzCi06MTBBNEUwMDAzRDcyNUQxMEY3MDc0NDYzRTMzN0U0NUM0NkZBRTBFQjQ2Ci06MTBBNEYwMDBCN0FCQzE3QUJFOTY0RDkyREJBMTZCNkM5Q0RGOEE5OTlCCi06MTBBNTAwMDA3QzM0RTgzRkUzQzFDMURCREZDMERCOEY3NzA5MTZGRjk2Ci06MTBBNTEwMDBDRTkwRUJBQTJCNkQ5OUI4REYwOTdBNDA4RTdFMjkzMTU3Ci06MTBBNTIwMDAzRkQ5NjExNjlGNjZGMDUzNjNEMTBFMTc5NDM3RkFDRjY3Ci06MTBBNTMwMDBDRTg5QzFGNjg0MzQxRjk5QzJFMjI2Mjg3RTcxM0Y3ODA1Ci06MTBBNTQwMDA4NENBRjExMjk0RTM2OEY3MzkxN0Q3ODU5ODlGM0M4MjQzCi06MTBBNTUwMDBGMTBEQ0VCQUEwMEVFRDQ4MUU0NjJGQjBERkU0RTU3MTM2Ci06MTBBNTYwMDAzQzFCRjc4QTE4NzJEMTM4OTdEOUFEODY5QzM3RThBMDgyCi06MTBBNTcwMDAzMUMwRkRFQjczNjVFNjY3RkIwQjlEOUZCMTFGODFGRDRECi06MTBBNTgwMDBBMTVBODdFNzdCQ0Q5M0Q4N0M2Qzk5MkMwRUM0NTYxQ0JFCi06MTBBNTkwMDA4QkMxRDk1OUIzNzdEMTVBOThBRkJFRDBEMEQ3M0NFRTQyCi06MTBBNUEwMDA4MkIwQjgyQjIzMUUwRkYwMDNFN0UwMDU2REUzNTE4RTU4Ci06MTBBNUIwMDAxODc4RkNCNjEwQUUwNzNFQjI2NUVBNDIxOEU3RDE4NUJFCi06MTBBNUMwMDBFRDFCNzg0QkM0RkI3N0I5M0MxRDlFQzIwRjk3QTYzMDlDCi06MTBBNUQwMDBCOTlFQTFBODU3ODFCQ0RENzI4NEQyNzc5MjdEQkQ5M0NDCi06MTBBNUUwMDA5N0VCODhDREQ5MDYzNkEyQzFBRjQ2RkUwMTQ5QzM3RTlFCi06MTBBNUYwMDAwQ0I4MjBBRUIwQjhCRTk4NzVGRkYxRkZCQTFERkZBODI5Ci06MTBBNjAwMDBDRDFBNzdGN0ZGRURGOEZGREJFRDc4OUEwRjc2NDhGODczCi06MTBBNjEwMDAwMjc2M0NCN0YzRjdGNkQxNkY4MjlENUUyQzFGQzEzMEY2Ci06MTBBNjIwMDBCQTA0N0IzRUFCNzg0NkFDMEFGMjNCQkJCQUQxOEU5RkY0Ci06MTBBNjMwMDAzQ0I4MUQ0RjEyRUM3N0MzQUUzN0VDNzdDMzlFMzdFQ0I2Ci06MTBBNjQwMDA3NTMyRDA5RUU3RkFFRjFCRUI0MjMyQzQ4OTExRDQ3RkZBCi06MTBBNjUwMDBFMzlBQkZCMTRFODdGRTEzRkMxRTEyMTU3MzY2RkY0NUM5Ci06MTBBNjYwMDAyRkYwRjkxMDEzM0Y3OEFDNzZDM0M1Q0IwNzE5RjUzRjJGCi06MTBBNjcwMDAwOUU2NUFFNDZCNDZGNkUwNzY4RTExRUZGRDQ1QUU2MUQxCi06MTBBNjgwMDBBRjg3RDgzOTY4NTEzMTMxREI2MzRENTQ4RUZCRTg3QzlDCi06MTBBNjkwMDBEQUU3QjJGMzI5QzJFNTc4QjZFMTk3MjkwRUZCNDdBM0MyCi06MTBBNkEwMDA3Q0I3Q0FEREY2QzUzNTNBOUVBMzk0MTMzQzdGRjRFNDJCCi06MTBBNkIwMDA3NDg1RTA3QzNDNkI2RTA0RUQ0OTJBN0Y4QjE1OTNGQzFFCi06MTBBNkMwMDAyRDY4QUI0MDM5QTc3M0ZCMzIxMTlGMjBFRjAyNjVEMDk0Ci06MTBBNkQwMDA0RjgyOUMyMUMxOTc0NUM4Q0Y4NUIzNkJFMDg3QTg4MDg2Ci06MTBBNkUwMDBGQTAzRTIzNEM2MEYyMjZGMkUzMjVFQzM4ODlGQzhBM0RFCi06MTBBNkYwMDA3RjIwNjczNkM4NkM3Q0U0Njk2QkZDMzk1MTI5N0Q1NDM2Ci06MTBBNzAwMDBGNERCQ0RFNEZERjk4MjM5RUVDRkIwNjMxMkVCNTFCOTQxCi06MTBBNzEwMDBBMDI2OTM3QjZGMDhFMTZGMjk4M0QwNDdBMjNGOEEyNDRDCi06MTBBNzIwMDBDODY5MkE4ODQ0RThCRjYwRjYyQ0Y0MzNGNUY5QTU2NEJCCi06MTBBNzMwMDBBQkRDOTYwMzQ2M0NDQjdGQUZGQ0FFNTVGRUM2QjhGMzEwCi06MTBBNzQwMDBBRkU4QjdEQkM4RTVGMzAwN0U0RTY4NDcyQ0U5MjIzRDUxCi06MTBBNzUwMDA0OUZBRjc5NDU4RjFFRTJBQjJEQUYzMDIwODVCODgxRjNGCi06MTBBNzYwMDBDRUIxOUU5M0NCOUVFQ0U0RTcwMDNDM0VCMzY2QjJCMTIzCi06MTBBNzcwMDA2Q0RBNzdGRjQ4RjlFNDk2MTMzNkJDNDc2MkU4MURDM0VDCi06MTBBNzgwMDAyRjdCMEJDNDY5RDJGNUE5ODFCODRENEFDRjBCNDhCNUQwCi06MTBBNzkwMDAwRjMyM0YyNjIyQzY4MzdENEM1RUY2NEQzNEFERDM3RDBECi06MTBBN0EwMDA4QUMyRkE2OUIxOUQ4NDdCNDI0NjNDRTJDMjA4ODNGQkJGCi06MTBBN0IwMDBGMERGNjY4NTE3OTEzOTU5NzAxRUIxNjhBNzBEMzg4ODhBCi06MTBBN0MwMDBEQzQyRTQ5MzNEQzZGODI5N0Y2RjUxNTg3Qzc1MkRBOTcyCi06MTBBN0QwMDA2QjA2MzlCNjlFQzc3M0Q3QTg0NDg2RjhDMUU1NEZERDJFCi06MTBBN0UwMDA1NzMxOEZDMjdCQjlGRkY2MENDNUJGNjZCMjgzOTc3ODJECi06MTBBN0YwMDBBMjBBOUMyQkJDNzM2OEUyNzdCRTQ2QTA3RUI0MzkxQkNDCi06MTBBODAwMDBFMjA4QTlCRDBBNzE4NDg5Nzg5RkRGNjIxRERGODVDNkQxCi06MTBBODEwMDA5RjM4NUVFMzVFNTFBQTcxQzg5RDQyMjhEOUZFRTAzMTlGCi06MTBBODIwMDBDNTFBRUY3NkExRkI0RUJGNTMzNDdFREU2Q0JERUY3NENDCi06MTBBODMwMDBBMTdBN0Y1NDM0OTJFQzlFRDQ4NUVBRjVGQzhERkRCRDVGCi06MTBBODQwMDA5N0EyREU3MjQ3OEYwMjcyNjBBNTFDOUUyNTE0RjZDNzgwCi06MTBBODUwMDA2QjI5QjZFQUQwNzA4QTBBRjlFOTA5MzEzODVBMzI5NTdCCi06MTBBODYwMDA2QkI5Qzg3MjI3NjA2MzcxMTFFNTY2ODk4M0I0Nzc5NjA2Ci06MTBBODcwMDBGM0YxMkZGNjNGQTAwMDdGN0VGQ0M4REI1N0MzNzlDREY0Ci06MTBBODgwMDBEMjlGNEFDNDQxRTc3NTc2QkY5N0M0NzBERjExNTU0MDI3Ci06MTBBODkwMDA3RjJEMzkyNDMxRkY5QjFDQUJCOEQ2MjQ3RjMxNTI5NkQzCi06MTBBOEEwMDBFMjdCRTlBMzVFOENBRjU4RjI5ODNEM0E5QkQ2NUZGMjBCCi06MTBBOEIwMDBFNDNCRTMwOUM1QzNEOTc1QkRDRjBEODdGREM0MjMwMkIxCi06MTBBOEMwMDA4QjI3RDQ3QkM2NUY0QkJGMkY5MUM5Q0RENTQ5RTRBMDYwCi06MTBBOEQwMDA2NDY3NzRGRUQxNEZEQzczODE4RTg0Q0UyMzM3NjFCQkY1Ci06MTBBOEUwMDA1RERGQjVEOTRENzZGRjdGMkEzNkEzMUM5RTMzRTkwRjc1Ci06MTBBOEYwMDAwQkQxOTEwMjFCOUZGOTlFODQxMUM3RjlEMUMzMDIxQjkyCi06MTBBOTAwMDBERkQzQjZBODEzQzZEN0Q5QTE4NDY5Qjk5NTlEN0Y0Mjc0Ci06MTBBOTEwMDBCQUZEQzZBMzA3N0M4MDg3OTU0RjRCMTZGOUIyQjI1Mzk4Ci06MTBBOTIwMDA4QUQ5Qzc2M0ZBQjYxRENGQUY0MjFFODFDQTkxMTUyOEQ2Ci06MTBBOTMwMDA2MjY4N0E2ODM5QzY3REFGRThEQUZDMjdDOTA3RjVBREU5Ci06MTBBOTQwMDBGQzQzRjExMjhDMDE1RTVGOTU4MkIzMDE3RUZDMjExRkY2Ci06MTBBOTUwMDBFQzA3Q0Y3NEVGRjMwMTVFNjlCQkYzMTQ0QTU3OTc3REEwCi06MTBBOTYwMDA2NkUyMzNDMkRBOEZBNzBGNkM4RjVBMzgwQUQwRDdDQTgzCi06MTBBOTcwMDBBRThEQUNCRjA0RkUzQzAzRkYxODM2NTAyRjhDQjU1Qjg4Ci06MTBBOTgwMDBFREZBNzNFNEM1MEFEQzg3Nzc2NjI0OEQ5M0VGRDMwQjY5Ci06MTBBOTkwMDA5QzVGOTcxRTM4Qjc1QkE3RkQ3RUY0RDg4N0JCNzUzQURFCi06MTBBOUEwMDBGRTY1N0ZGRDc0Rjc5RDYwNTdGRUNDQTk4MjlDNTlGOTI2Ci06MTBBOUIwMDBDODZGN0RDNDg0Rjc5OTc2QzZFRjY3MUY3RUU4QzE1REQ2Ci06MTBBOUMwMDA5NDVGQ0VGRURFOEVGQkQxQjNDRjlDQ0VEM0U4QkNDRjVFCi06MTBBOUQwMDAxRUZDNzM5NjQ2Q0JERkY2Q0NDQ0ExODA4N0RCOUVGOEJECi06MTBBOUUwMDBDNkQwQzFGNkU3NDBBRjUxQkI3OTVEQTNCOEFFREFEM0FDCi06MTBBOUYwMDAwMjBCQ0EzRkNDRDM4NEY1Mzk3NkU4NTgxRThDRjNFM0JBCi06MTBBQTAwMDBEN0VDNzgwRjcxMjVGRDU2NUYwNkVCQjUxQ0U1M0VDMDBGCi06MTBBQTEwMDA2QjI4OUU1N0VDREZGMDI3Njk3QzMyN0NFQkMzNDVCODhFCi06MTBBQTIwMDBGMzQ2MjhEQjA0NjBCREFGRkRGNkY0NzI0ODZENDEwREJFCi06MTBBQTMwMDBEQTIzQkQyOEI3MTNFQkFEN0M4NUFFRUIyNUE5RDdGMUEyCi06MTBBQTQwMDAxQ0Y5OEIwMkY4NUZCOTdGMjNFQjM3NjExRDNGODY3RkNFCi06MTBBQTUwMDA0QzE5Qjg4RUYzRUQ1NkZEN0U4RTJDQkIxRjZERkQ0MzU5Ci06MTBBQTYwMDAxOTQ5RTNBNjhDNzU1Q0ZFQzQzRjBENkEwNzE4RjJFMDM1Ci06MTBBQTcwMDA0MkY4NURDQ0UzRkY4MkY2RDBBRDc2RTBBQkM3REM3QTdFCi06MTBBQTgwMDA4MEFENkY3NDM2Q0QzQjdCRTA1QzFFMTg2QkVGREI3QURDCi06MTBBQTkwMDA2RjAyMzlEOUZCOEM1RDg1RkRGQTkyNjc1RTQ1M0UzQkJFCi06MTBBQUEwMDBGQkM0NEI4QTg2NzI5Mjc4MDQ2QTI3OUMyNTdEN0ZEREUxCi06MTBBQUIwMDA2MDM3QUM2MEI2MzA1OUI5RDcxQkIzRkJGQUQ3Njk0NURDCi06MTBBQUMwMDBGNDlBNTk5QTBGQkZCRjhEREZBMzhDRkU1NzQ0OEY1QzU5Ci06MTBBQUQwMDAyNzI0NTlCNzAzRjY0MjI2OTdBMzQzMTAyRkNCNDlCNzMzCi06MTBBQUUwMDBBMjk2NThENzUzOTgwQ0VCRjhGNkU1NDA3N0E5RDZEMTQzCi06MTBBQUYwMDA5OEJGMEFGM0JGRDRCNDlFN0IxOURGMjY5NjVGNDFGOTU1Ci06MTBBQjAwMDAxM0ZDODM3REVCMUExNTVFMjU0OUY4RjQ2Qzg3NUQ4NjhFCi06MTBBQjEwMDAzOERGQjMyOUNFRDlGQkVFRUY3RTQ1RkJFRjIxN0I4QUYwCi06MTBBQjIwMDBGRDNCQzdDMzg1RjhGQzQyRjNGQkFBRjhCQjFCODJCRjAxCi06MTBBQjMwMDAyNjBEQzRFMzQ3N0Y0OTJFRkY4RkQ5OTlGRjZDMDUwOTg1Ci06MTBBQjQwMDBDRkNBOTYwNkVBMkY4OTg0RjRFMTA1RkRFMzZERUU5MjAzCi06MTBBQjUwMDA1MEFFN0ZENDI5NDVBMTZBQTI5QzU4OTFDMjRGRjg5MjY5Ci06MTBBQjYwMDBEMUNGRDM0N0M2ODMzQ0ZCRThFODRGMzg1RDMyQkE1RkFDCi06MTBBQjcwMDBCMUZGNkQ0NUU3RkEyMDZBRDYwNzI5RkM1NDdGRTRFRDYyCi06MTBBQjgwMDBBRDNDOUNCQ0JEOTVGQkZGOTRCNEJEMzM3MkU4QkIzMEJCCi06MTBBQjkwMDBGRTMzREQzNkEyRDMyNkNFNzQ0OTQ5RkRBQkNGREE2RDQ0Ci06MTBBQkEwMDBENjM4NzE2RkM1NkI2OUI0OUVFNDczNjlEMDc1RTNCQTJBCi06MTBBQkIwMDBEMEFCQjA5RkQzNUZCNjExQkM0RjJCMDdERkI3RDNGQzMwCi06MTBBQkMwMDA0NkFGNEJEQjQ0RjFENUU4NUI4NDdFNDhBM0JEQTYwNEM5Ci06MTBBQkQwMDAzQ0M5ODE2QTFERkMxQzcyNjY3NTM5QjM5MUEzOTZGRDUwCi06MTBBQkUwMDBCMDREMTUyREUzQTY3QTM2MDdGNEQwOUIxMzRFREI2MEVCCi06MTBBQkYwMDA5RTZGMjVEODgzNkZDOUE0NzkyODZERUYyRDVEMDhBRUFGCi06MTBBQzAwMDBENTkyRDFCN0I1RkRGMDFBODk2ODY2RkQ2N0VGN0QxMzVGCi06MTBBQzEwMDBDNjQzN0VFRTI0NzBCRTIyRkRDQ0E5ODMzQzU5QjlEQjJECi06MTBBQzIwMDAxOUI1RDNGOTFDN0JFMjhCMDcwMTZGNjdFRkI3MTNCQjM0Ci06MTBBQzMwMDAyOTVFQkM1NjY1NkQ5QzdFRTI4QkRERkY0NUYzNEY0MzdDCi06MTBBQzQwMDA2NURBN0ZFRDZFNUExRUVDRjBGRDZFMENEQUZGOEZDN0YxCi06MTBBQzUwMDBEMkM2MTMyQTlGNkI3RjdFRTdENTIwNUY2QTQxQTZEMkJBCi06MTBBQzYwMDBGMkI1OEYwRTQ1QkJFRUQ0MTAwNjlGM0E5MDFCODU3NTRBCi06MTBBQzcwMDA1OUY2RjgzMzJCNDA4RjJDRkRCMTlCODBBQkUwRDgxM0Y1Ci06MTBBQzgwMDBBRkRFMDRGMEQ5OUY3QjMxQkVGMUVDQ0Y0RjVGMDY3Qzg1Ci06MTBBQzkwMDA0MEVENjdDREFDQzc2RjMxQkYzMzQwREI1RDBBMzBDQkQxCi06MTBBQ0EwMDAxN0NFNzM1OTA3RkI5MkE1OTA1MkI5QjFGNEU5MzRCQ0ExCi06MTBBQ0IwMDBCRjYzMkE4N0Y1NTZEQTdCNkYwRkEyN0Y0NUNGMTY3MUU3Ci06MTBBQ0MwMDA4RjEzQ0IwNjNFNUNEQTY5RUQ0RjczMzAzRkU4NEFBNTNGCi06MTBBQ0QwMDA3NzExMkIxRkM5NjZGQ0RBOERGNTRBMUQ5QzRFNzk3RUQzCi06MTBBQ0UwMDA2MjdEQTNGQzM4NDc2MTQyM0JBQ0ZFMEEzQkE5NEI0NjYwCi06MTBBQ0YwMDBGRjkzMUQ0Q0RGMkZFREZDNzJCNEI1M0Q5RDdGNEZFQ0YzCi06MTBBRDAwMDA4NzdERkY5RUMwRUU5NzkwODM0RThDMjM1QUE2QzQ0NjQzCi06MTBBRDEwMDBBNTUzN0U3RDUyMjE4QjgxNkY5N0Y5NjJBM0ZDQjRCRjRFCi06MTBBRDIwMDA5RjcyMzlCOUNDNDU2MUZBM0Q5QjhGMDNDQTAzNEMxQzE1Ci06MTBBRDMwMDAzRDNGODZGNTVERkU5NDkzMDBCRDJGRkZCOTE3Q0Y1RkIxCi06MTBBRDQwMDA5NjNGRjlDNUE5N0ZBM0RGM0Y3QUMyOERGRTkyRTUzRjBBCi06MTBBRDUwMDBCRjAzRDc3QkI5M0Q3NjEzRjg1MTdBMEZEQUM5MUU1QTczCi06MTBBRDYwMDBGRUEzODNDRkU3ODExREYyOTEyRDk2OTczRUM4RkU3QzBFCi06MTBBRDcwMDA3OTk3OUQ1RjZBQjBDRTgzRUUwQjhBRUJFODc4RjRFREFECi06MTBBRDgwMDAyQ0ZFQUM5RUI4ODI2QjIxQUUwNDFDMDc0MEM3QUYzQkMzCi06MTBBRDkwMDBEOTM5MjEzRkI3NURDREZENDk5RjJDRDBEMjcwRkMyNTFDCi06MTBBREEwMDBDQ0FGQjU5QUZCMEY1NjdGNEIxQkVBMzc4RDAzRTI0M0JFCi06MTBBREIwMDBDOTQ0NDJFRTUwRUE0NjgzOUM5NUUyREYyNDFBODVFNUI5Ci06MTBBREMwMDBGODA4NEM4RDcyOTJDQUZDRDA1MjI2RjNCN0Q5MzI4MzYwCi06MTBBREQwMDBBNEI2MDRFQUIxNzgyMkUyQjlBQThGQ0ZGRTI3NURFMkQ5Ci06MTBBREUwMDBENUY3NkE0M0ExQkQ3OTBFNjY0RjZGNzM4NjU2Mzg3MEVBCi06MTBBREYwMDAzRkUzQzE3QkExMzg0RjJBMTBGNDI3RDhCQ0JFMTBEODNFCi06MTBBRTAwMDBCQzEyQzdGQjg1NERCNzgzM0NFRjNGQ0Y2NkU3MjdGNTA0Ci06MTBBRTEwMDBCMkY2QUEwNkYzM0ZDMUU1RDI4MEY5MzMzRUZCNDQ0REJBCi06MTBBRTIwMDA0NzNFMzNFNkIxQjk0MTQ1NzlCMkIxMjE4MEU5ODY4NjIyCi06MTBBRTMwMDA2MkEyNjE1QzdGMTA2MTg5RTNDMzVFQTIxMzA5RUVDOTVGCi06MTBBRTQwMDA2QTZDQUM3NjRGNzUwOEZDNTZEMDI2RjgzQjI1NEYxODM3Ci06MTBBRTUwMDBFOUNCMUVBOEMzQkRCRkMzQzNGQzk0OTI0NzI3QjUxRTUwCi06MTBBRTYwMDBGNDg3MjE5RUUwQkMwNUYwQTQ3MDU4NkU5QjhENzhBNUY4Ci06MTBBRTcwMDBGNUYxRkI3MjY3Rjg2RUMwOEIyMzY3QUM0NTRFMjk5OURDCi06MTBBRTgwMDA2NTE2NzgwMERFMENCQTM4RjBERjhEM0Y4MkY4MDIzRjlECi06MTBBRTkwMDA4REM2RUY0NTAwREVFMDVFMDRDMEZGMDdGMEY3MENDMzhGCi06MTBBRUEwMDBERjU0MkFBM0NDRjhBQkIyQzAyOUYxNzcyRkM1NUY2Njc3Ci06MTBBRUIwMDAzRjVGMjVFMkExOUVDN0E1MTlGQzk0OEE3RkUxNUUwOTQ4Ci06MTBBRUMwMDA1QzFBRDhEMUQwODZBOUYxM0QzRDg1NUVDRjc1MzJCOUU3Ci06MTBBRUQwMDA1NjRGQzI3ODJFNDY1NEU2NTcyMTk5M0FDOTMxRjk5MzE0Ci06MTBBRUUwMDA0ODQwQzdGQjRDNzgyRjFBRjIzRENDOEY2OEFDQUZBNDFBCi06MTBBRUYwMDBDQUE3QUNGMjRGN0IxNUU2NzNDNzBCMzYxMUU0OTU1NDI1Ci06MTBBRjAwMDBGRjAwNzlDNzc0OEUyNkNEQUU3NjZBODhFNzIwRkE3NTgxCi06MTBBRjEwMDAxQkI5N0U1RERGQjc5RTU2RkVEOERDQTA2MUJBODVGMzEzCi06MTBBRjIwMDBDOTM2Q0UyN0RCNjFEREMxM0YxNzE0NzE0RDVCNjcxMTU4Ci06MTBBRjMwMDBENDlGNzc1Mzk4RURFRjYzOTY3MzJCN0ZCMDJCMDZGMTc4Ci06MTBBRjQwMDAwRTI4OTMzNDRDNjMyOEJGNUVCMzQ3NDdEMjdBRUUxMjgzCi06MTBBRjUwMDAxMjAyN0FGMUJGRjZGRDI4Q0U5NTc0MDVDMDFGRUFFNzBDCi06MTBBRjYwMDBGODIzODcwQkZERDdCMzc3MTA2QzRDNEYxMTg5QTUxMUNGCi06MTBBRjcwMDAxQkVDOUYxMkYxREIxODNDRUE4MDdENzdBQUYxNjQwNTk3Ci06MTBBRjgwMDA3NTdCMUVFRDJGRUI3NTNCQ0FFRkNDMUJCQjVFQUJBMUY3Ci06MTBBRjkwMDBGM0YwQjRCQTcxM0Y5OTE1NjRGNEU4MDk4Njg1NUFEMzgxCi06MTBBRkEwMDBGQTY1QTVCMEZCRUU3MzVFRTk3NkQyRjVGNDQwMUMyRThGCi06MTBBRkIwMDBBNUM3MUQ2RDIzOUM3ODFFNjRFQjBBODAxQ0RDRUM2NzIyCi06MTBBRkMwMDA3QTQ2OUI0QjdCQkJCNEJGREVFNzBFNjY3RkY5Q0FBRDBBCi06MTBBRkQwMDBGQzZGQzg2Mzc1NUE5OTg1OEUwRDc5OUIzRUMzNEFFRjA1Ci06MTBBRkUwMDA4NkJDRURFOTkzQjdENUI5MzA5RThDNzgzQkYyNjMyMkVECi06MTBBRkYwMDBGRDM3REExNDVEQTA3NjRBMjNEODkyNjBERkJEMkRCMDBDCi06MTBCMDAwMDA3OERCODE3MjAwRTM1MTNFRTkyOUQ4MDNFRjA1QUNFMzE4Ci06MTBCMDEwMDA3MUQwM0FFNTE3RDQzQkRDRkY2OTlDQjcxRjIwRDUyREQyCi06MTBCMDIwMDBGMDdFNEIwQkE1MjMwMkVGQ0M1MEZBMjExOEFGNTM4Q0M2Ci06MTBCMDMwMDA2OTg0RDIwRkUzOTNDOTk4MUFGNDM5MTM5QzI3MjZGRjI5Ci06MTBCMDQwMDBCOTU0RjQ5Q0M4RUU2MTg4QTA3Mzg4NENGNzgxMUVGMDU3Ci06MTBCMDUwMDAzMzFEOTlFMjAwQkI1MEI2MDU0RjgwRkNFQUY1OEE1RENFCi06MTBCMDYwMDAxMDk3QjBERTMzQzcwMTcxRDQ4MkJGMUNEN0ZENzM2RjU4Ci06MTBCMDcwMDA0REZFNjBFNzI5RjAxMjA4RDA4REVBMDk5MjkzMjVGRDc0Ci06MTBCMDgwMDBGNzc1MjVCNThDQzA3RUYyODBBNzFCQ0ZGQkNBOURBMkE5Ci06MTBCMDkwMDBDNTlFRENFNjBDNUZFNTM0QzFBNUQwM0I1RkI3QUZFM0VFCi06MTBCMEEwMDBGQzkzREZGQkZEMEVFNzc3OTJBMzkzMjIxMzdGMUJGMTQ2Ci06MTBCMEIwMDBBMTQ0RDM0OUIxODlDRkQ3OERCQzlDQzAzOUU3NDBGRUFDCi06MTBCMEMwMDA0RTIxQzdGNkZENjNFNDU4NjM3RTE0RDdDRDk2MjgzNzJBCi06MTBCMEQwMDAzMkE5N0NGNzYwQUE4QjJBOENGRjUwRDMzRjRGNDAzQUFECi06MTBCMEUwMDA1QjBBRjgyMDlFM0Q3REY2Q0JENzBCMDc4RTMzNTE2RTYxCi06MTBCMEYwMDBGNUVCMjMwREZENTU1NDFGREQzMzE5RTQ2MDBBN0Q3NDEzCi06MTBCMTAwMDBFNDhERDFERjg2RjhBOTc3OUU5NzA0QjNCRjZFNzE3QzdBCi06MTBCMTEwMDAyM0VBODNEQUY4MTRBMkQxRjFENkI0RkQwMEQzNDU2RDQ5Ci06MTBCMTIwMDAxRDQ4RjdFRjQ3RDdGQjMwM0VBNjg1RURFN0RFOEZEQTA3Ci06MTBCMTMwMDBBMjUyMDFEMkVENzkwOUZDRkE4NEI1RkY3RTdCMjM5NkY5Ci06MTBCMTQwMDAyM0UwN0QzMUY1RkI3RTNCQUI0RkNBMzVCNEE3M0ZFMTMxCi06MTBCMTUwMDA3M0FDRDk2NjBGQzEzOUNERkI2REI0REUyMEY4QUM4MTdDCi06MTBCMTYwMDBDRDUwMTJGQjE0REYwMTgwOTg3RjUyMzcxQUU0OUNDMTQ2Ci06MTBCMTcwMDBFRjc3Mjg1NDJFMDExRURFQjQyN0Y1QjMyRjc3Q0VEQ0VGCi06MTBCMTgwMDAwRTdDQkREQzE5NkE4Mzk0NzhEMjJGRUEzRDhBNzc0NDFECi06MTBCMTkwMDA2QUY3MjJCRUMzQkU2QjJDN0U1NkU2Qzc3Qzg3REJDNTMyCi06MTBCMUEwMDBDNDkxMjJERkM3RUJBQkM5RjM5N0I3N0VGOERDNUQxNDFGCi06MTBCMUIwMDA2QTJFMDk1NzEzRDNGRTVBMjI2QzdGQkRFMkU5NEFGRTdDCi06MTBCMUMwMDAyRTA4MUI0RjEyRkE2NEY2NkNBQjFERTVEMDAyRUUwRjkxCi06MTBCMUQwMDAzMkU4QjU5RjVFQzIzRTdFMkZENDQyNEZCN0M0QjdFMzdDCi06MTBCMUUwMDA3QTBCOUI0QkVGOTk0MkYxRjcyOUE1MjNGMENCMDk5QkYyCi06MTBCMUYwMDBBNzBGMDUzRTVBQkJFOTZCREI2RUE0RUQ3RkY2QTI4NDc4Ci06MTBCMjAwMDBERjE3Qzc5RDU4RkU4M0JCODJGN0RDMDhGNkZBQUY2Q0U4Ci06MTBCMjEwMDAxOERGRjREOTg5OTk3ODBFRkI4MUNERUE0N0E4NzFCMTdFCi06MTBCMjIwMDBGRENENUI0RTk2MkU4QTZGQjZEOEM3OEI1QUU2MkJFMEMzCi06MTBCMjMwMDA3RjVDMTRERjhBREYxN0MxQTEwQ0RFQ0ZGOEYwNzhBNUEwCi06MTBCMjQwMDAwQ0U3MzUwNENGNDdERkRBNzg3QUM2M0FENDY3NjVFODg5Ci06MTBCMjUwMDBDN0FBREQ2MjRGN0E5RkU0MkRBNzY2OTEzQkI1M0RBRDRECi06MTBCMjYwMDBEODJFQTFGNjUxNjYxNjZGQ0YyNDNGNkFFMzcwRjkwNDE5Ci06MTBCMjcwMDBENjQ3Mjc3MERGNjAxMTk3MjM3REUzNkJCNzU5RTRDODg5Ci06MTBCMjgwMDAwN0NFRTQ3RTkyRkZFODlCREZENzkwOEYwNkNFRUYzMkE5Ci06MTBCMjkwMDBDNjVGNDZCRjNEOENFRkZBRTc3M0NGOTQ2NEYzRTk5RjM2Ci06MTBCMkEwMDBDNzM0MkNGRjgxM0Y3OUZGNTkxQ0NGQTcxQTE2OTMxMDgyCi06MTBCMkIwMDA5NTQzMzU3NjVBQ0UwM0ZEREZEQTNDMTlGNkQ5RURGRTFCCi06MTBCMkMwMDA3NEMxMzRBRkRBQjZBNTI0NjQzRUE3NkM5RkE3RDQ5OEE2Ci06MTBCMkQwMDBEQUVENUYwN0RCQjM5NTQ1RkRFQjkwRTUyMjMzNjExREE5Ci06MTBCMkUwMDBFRTczNTY4QjJFREE1RkNERTZFOUUzQzNCOENGNjZGMjk0Ci06MTBCMkYwMDBFNDFENUIzMDBGRTRFQUU5QjY1QjkzRjI3Nzk2MkI2MUNECi06MTBCMzAwMDA3RERBRjhGQTUwQkJCN0RDQjQzRUM2QkEyNEQ2M0ZGNUI2Ci06MTBCMzEwMDA0NkVERTc3NzgxMUZFMDVFNjZENEE0QzJENzgwNzUyQjI3Ci06MTBCMzIwMDA0ODhFQjdBMDhCRTk5NzUzNTRDRjg2MTE2RkRBOTNBRjRECi06MTBCMzMwMDAwMTVENkY3MTYzMUM2NzZBRkM4RDIzRTFDMUYwOTdDMkU4Ci06MTBCMzQwMDA3RUE1RjZDRTE4RDcxMEU4OTcyMDFFNkFEQjE4MUQ1Qzg0Ci06MTBCMzUwMDAwODZGRkRGRDcyM0FBODRDM0U5RjlCRkFFOEEwOUVFODVDCi06MTBCMzYwMDA5NDYxNEYyQTE3QTI4MzNCODlFRTE4NjQxRTdENzQzMEM2Ci06MTBCMzcwMDBFNjU5MzMzRkRFQjQ0OTQzM0E3ODFGRUM5NEQxMDNENzAyCi06MTBCMzgwMDBGRkE0QTJGQkE2QzIzOUQwMjYwOUNGOTk0RUJBRjRBQ0NECi06MTBCMzkwMDAxQjE4M0MwMUU0RjM0OTVGRTRFQUE5RTVGREYwMkRGQjRECi06MTBCM0EwMDA0NkZBRTY5OUZBM0RERDcyQUIyRjk5OUZGNUE2NTRGNDYzCi06MTBCM0IwMDA1M0E0OTM5MjhBRkY3REY0RjM4RTJENzlGQ0YyNzI2Nzg5Ci06MTBCM0MwMDA2NTBERjAwMTg5MjRGN0U3MUFBOTIxQkZBNTM0NEZERkU1Ci06MTBCM0QwMDBCRTEzRjRFOTQ5NEZFMUU3NTE5QUZCQTgzM0JDMUNFOERFCi06MTBCM0UwMDBFMjBFNTExQjNGNEZFOERGN0YwRUIwM0YxQjY2NEQ3RkUzCi06MTBCM0YwMDA3NzI0RjgwQkFCQTdCRjZCNDM3QjA4REIyMzYwNTcxNkEyCi06MTBCNDAwMDBGMEI4MDhGNDZGMEM0MzdEOTA3ODVFQkFDMzU1OTBGNEExCi06MTBCNDEwMDAzQzc2N0Q0M0RENDQ2ODk3Mzg3NEEyOUFFM0UwMDhCMzM0Ci06MTBCNDIwMDBBM0ZFOTMzMEJGOTczMTFGQzUxNjU2RTE1RTlBMjI5MDU2Ci06MTBCNDMwMDA2QUEwNzM5QjFDNkU4MTdCQkNCNjQwRTYwNEREODRENzlBCi06MTBCNDQwMDA4ODhCRjlCRjlDQzc4RkI3MTREMEZBQ0VGNzVFNTQ2MUQyCi06MTBCNDUwMDBEMDc2REEwRkY4RDcxQzM5RjIyNzY2RkZCNDJEOTNDNUUyCi06MTBCNDYwMDAyNzkyMjJEM0Y3NDI4ODRGQTBCMDY1OUY0RkM3M0JDOEIxCi06MTBCNDcwMDAzRUY1QTcwMkMzODNFRUI1MzMzRjBGRDEyNUQwN0JENzZFCi06MTBCNDgwMDAzQjg5RjE4N0Y2RjdFRjhEMzgxMEI5ODlFNUZCOERFQzM0Ci06MTBCNDkwMDAyNjk2Q0ZGRDk3MkI2Qjk4N0YzMjcxNURBRjNGQkNBMTk1Ci06MTBCNEEwMDAxQkVDOTlFQjBGMEZDM0ZCNzRENzdCNDZCRjA3RTcwQjcxCi06MTBCNEIwMDAzRjA1MUYzRUQwQkI5RkU5RTVDNDdBOEY3MzNFRkRFNzkxCi06MTBCNEMwMDAwRTUxQjdEMTc1Mzk2RUVCM0RFQTg2RjE3RThGQkRCRjY3Ci06MTBCNEQwMDA3OEMzNkY4RkRCREMzNEZEQzMyQjI3NkQxMDRGNzQzM0MzCi06MTBCNEUwMDAwNEU4RDA3OUNEMjM5QUMyOENFMDI4RDY5RjRGQkFCQzBECi06MTBCNEYwMDAwQ0VFMUEzMkM3NkI2RThGNkU1NUExQkQ1NUVDOUNGN0UyCi06MTBCNTAwMDA4NkRGQkUzMjEzRDQyNzZENkYzREE0MzdCRjQ4MTQ2ODYxCi06MTBCNTEwMDA3RkRFMjFBRDk5NURCRkUzRUQxREE2RUQ4OUZERURGNTYzCi06MTBCNTIwMDBFMzkxREYyQjk0MUQ4ODk3N0UzQzM5MTA2RjA2OUVGMEM3Ci06MTBCNTMwMDAwMjQ3ODUwNUNGNjg2RjE4NzhFRUMzNUJEQURDQUJDOENECi06MTBCNTQwMDBGOEQ0RkM3MkJENjdENDdCRUM3RTIyMUI1NzIyOUUzRjUxCi06MTBCNTUwMDA4MzJDQ0E2RkNGQjg0MjJGMDNERkVDNzU4NTdFMDNFOUQ5Ci06MTBCNTYwMDAzMjQ3NkY5RTVDODhGNzBGNUYwNUJFNUMyMTg1RjNCM0ExCi06MTBCNTcwMDA0NkUwQkRDNEQxNDNFMDVEOThFRUU0RTdBQjg5N0NGQUQ4Ci06MTBCNTgwMDAyNkYwMEJDNDc1RjMzOENCOUJGOEZDOEU3REZGQjQxNzA3Ci06MTBCNTkwMDBFMzI4OUY3ODM1MEZEMkU1NTJDRjk2RUYwMkJGRkQ1MkQ4Ci06MTBCNUEwMDA0MkZCRkI5MzQzQTMwNzhENDc3QjkzRkIzQkNFQkE4Q0I3Ci06MTBCNUIwMDA3NzU5RDhGQzZFRTY3NkRDQ0Q4N0RDNTE3ODQ3RjNFNjI4Ci06MTBCNUMwMDA3QUM5NjJGRkRFNUNDRkUyMzg4OERDM0RGRTNBOEIxRDMzCi06MTBCNUQwMDBEOUM0RTMxRDA2QjYwM0ZCQ0VDNDc2OENGOTFEQ0RDQkQyCi06MTBCNUUwMDAxRTA3RkJDM0ZCMjcyOTFBRjgxRjhFQkNGOEM5RUY2Qjk3Ci06MTBCNUYwMDAyOUVDQ0E3NUUwQjlFQzE2M0ZBN0RGNEExMUQ3RkQ3RUVBCi06MTBCNjAwMDA3RkM4NUQwQTdFQTc0REU5NDE5RENFNzNEM0IzQTQ0QjlECi06MTBCNjEwMDBBNEY4MzkzQUU2RjYyOEM0MjE2RTlEMkVBMkNGNkE1QkMzCi06MTBCNjIwMDBGQzgxNDgxNUQ0MkI2MUVGMTVBOURDMUVEREQ2N0RCMjU3Ci06MTBCNjMwMDAwREU4RjFGNDZCNzZGNEY3M0JCRDEyOEU2MzkzQUQzQUVGCi06MTBCNjQwMDAwRkVDRjdGNzNBOTRBNEVGRTM5REY3QzgyQzhFNThFODc3Ci06MTBCNjUwMDBDMTc4QjdGOTI0RTIwMEI5NzFBODdCQ0U1MDE4OEYyRkJBCi06MTBCNjYwMDA0ODU0MjBGRkQzRUQ5MkM4RUM2NEMzQ0YxMTkzOTk5RjQ3Ci06MTBCNjcwMDA1RDk3MTkxQ0UyQTlFQTM0QzdBQjZEOUMzNTAzRTMyOTM5Ci06MTBCNjgwMDAxNkI0QkU4NEY3Mjk3REU1QzlERjg3QkFDNENERUVEOUVCCi06MTBCNjkwMDA3QUJCRDNBRjA0RkM3QTY3ODhGOEI2OTEzN0Q4MkI0MEQxCi06MTBCNkEwMDBCREZDRUUyQTA1RUI0Nzg0NDFFQkU3QUY1MUFGMDRCQzhDCi06MTBCNkIwMDA0MjdEOTBGRkY5MTc1OTdGQjQ5QkM1M0I2REU3RkJFNEQyCi06MTBCNkMwMDAwRTVCQjA3OTA2NkRBNzYzOEI1RjgwRjUzMENBODVEQ0IxCi06MTBCNkQwMDBDQzlFMzkzREMzRjBERkIwQjhGNkJDMjJENTA5RUZBNDRCCi06MTBCNkUwMDBFNDg1OTBCOTg5QjczQzgyRjFCNzdCQTAxQ0YzNkYyMjQ3Ci06MTBCNkYwMDAxRTNBQzYzQzE5ODNGM0UzNERBMDFCNjA5RDZEOEM5RUUyCi06MTBCNzAwMDAzNjZEMTFEMDlGNDlGMTk3MERGQUUyQkRCQkVEREY4NDk0Ci06MTBCNzEwMDA3OUU0QjcwODJBRUNCRDY5OUE3NERDRjUxRTA3QTNGMzM3Ci06MTBCNzIwMDBENjdCNzAxRjA4RUU1MTY4MzdBRkZEMzczODJFNkY4QTExCi06MTBCNzMwMDBGOUVFRjEzMEZBNzhFRjAyRjQ5MUUxNjY3RTlCQkNGQTAzCi06MTBCNzQwMDA2RUJFNEY4QUUxM0I4OTExQzAxM0MwQTE3MkY2M0VBMUMzCi06MTBCNzUwMDAxQ0QyQ0M3MTI4RkRGQ0MzRjY2MTc0OUUyMTM4REZBQThGCi06MTBCNzYwMDA5OUFDNDRDMTBGMjBCNjc0RTA3QkMwRjMyMzc2NzIwNTE4Ci06MTBCNzcwMDA5RDVGQUJEMDFEMDI3RUQxMjc4OUZDMURBRUQwOUI4MDgyCi06MTBCNzgwMDBBN0FEREI4NzYyM0NEQjA2MzE5NDg3RkU5RDdGNTVGMEQ5Ci06MTBCNzkwMDA3Q0VDNjhFODkzN0JFMTNERERERDkzMTVFNDhCQTMyMTMwCi06MTBCN0EwMDA3NkJGRjVGRTM1ODUxREIwMEZGN0Q2NTdFMTNCQkY1MThCCi06MTBCN0IwMDA1NTQxQzlEMjU4NEU1RTE4MERFNzgzNkI0NDU1QTBFNTNDCi06MTBCN0MwMDAyM0Q1QzYzRDAzMTVFRjMxNEM5MDNFQkRCMjE4Q0VDRjA4Ci06MTBCN0QwMDA4Njg5RTA0QjIyQTcwNUY2M0VDOEZBMzU1NTJBQUNFQjIwCi06MTBCN0UwMDA3QTM1NTMzMEVGNUJFRTcwMzNGREYyQjJCRkZBMEUzN0FECi06MTBCN0YwMDBDNTYzRTBBRTFEMkEzNUUzMjk3RjY2OEMwMzdGQTFERTk5Ci06MTBCODAwMDBBMjY4QzYzRDcxNzg1NzI0ODNBRjRCNDZCNzE4NUJFNEY2Ci06MTBCODEwMDA0M0Q4QjM5ODZFOTFCNzRENjM3RUNBMUY1QzE1NjZGRTIwCi06MTBCODIwMDA0NTM4OTNBQzQwRkYyMkZGMEJFMEJBNjY3MjY4RDM1OEVDCi06MTBCODMwMDAxNzAyM0JENzJEQzJGMkQwNEUxNjZEMjdBMzVDOEM1NTU0Ci06MTBCODQwMDBEMDc2RjdGODQzQkI1MTlGQ0M3NDIwOUU4OERDRDMwNjlBCi06MTBCODUwMDA3ODhBQ0VDQzBFNDI1Q0VCOEUyOUEzNUU4MkZCNTUxOTEyCi06MTBCODYwMDAyNzdBRTc4MDFFOERFNkJBRkVEMDAxNzI2QUJEQTIwMTdBCi06MTBCODcwMDA5RjY3QUMzOTc1MjM3Q0Y3MDc3Rjc4MkJBNDE5NERCRkUwCi06MTBCODgwMDBCQjEzRjQ4MUJGRTc0RjBERjg3RDk2NjJGMUVGNjVCQzA1Ci06MTBCODkwMDBGRUMxOTc5MDlGNTFBRDU4RkM4NEJERkVFQTVEODA5NzM0Ci06MTBCOEEwMDBERDI1OTE0ODhEQzZCRTg3QjJGQUU3NzE2MDZERjcyQzMxCi06MTBCOEIwMDA3OEY3RkFGNDM1NjI3MDBGQ0ZDNzc5RUQ1NEEzOUIxODZGCi06MTBCOEMwMDBERUNBNDFBRjE5NzhEQjIwNkE1REYwMkVCMzdFQjUwMzg2Ci06MTBCOEQwMDBFOUEzODg3NEEzQkMxQTA2QTdDODIzNENGNEZBRkFDNkQ1Ci06MTBCOEUwMDA1NTEwMjc5MTM4OUUxRjczQkU4NTNGNzg1RjEyRDYwQTg4Ci06MTBCOEYwMDBFMjUxOTQ2MTJDQUVGRTYwNTk3NzAwRUNGODJERkVFNDI1Ci06MTBCOTAwMDBGMTA5NjczREFDQkUzREM1M0RGNTMzMUU0NjBGMjAxMjIzCi06MTBCOTEwMDBEQkNBMzAwRDk1NDJFQTIxN0ExQUE0Mzk4RTEwQzRDN0M5Ci06MTBCOTIwMDAxRTE0QjUzRjIyOURFRjkwMzQ1ODFGMjg2RkEzRUI3NzZDCi06MTBCOTMwMDBFNDg1MzNFODFGM0MxMkY5MERBNkNGN0I4QThERjY2MkIxCi06MTBCOTQwMDA1OUYwM0U2RUY5NDkzQzFGRDlBQTMyMUFBOTZENjFGMjJECi06MTBCOTUwMDBBMjM2RDBFMzgwRjM4QURBMTJBMkVFRTFGNEE2MUI3OEQ1Ci06MTBCOTYwMDAwNjdGMTdENzU3MzVENzMxQkM2Njk2MTAzQzZGMDU5RkI5Ci06MTBCOTcwMDAxOEJDNTc5NjA1RTUyOEZFMzI1QkQ2QUVDMjc1MjREREFECi06MTBCOTgwMDBGQTA4NUE2RTJCQjQwQkVCRDMyNDEyRDY2RThGMDNGOTQwCi06MTBCOTkwMDAzNzIyRTE3OTIzRTVGNzVGQzM3OTYyNERFQjUwM0M2RkM1Ci06MTBCOUEwMDA4NzZCRUFEMDVFM0FFRjM3OURCN0Q3NDFEQjAxRkZERjA3Ci06MTBCOUIwMDBFOTE2MDlFRkIxNDBEODBCQzBEQTFBNEFDQjQ4OUZCRDRGCi06MTBCOUMwMDA5NUM1QjQ1REFENUM1NTM3MTk3NDYwQzgzMUNBMUEwQkEyCi06MTBCOUQwMDBBOEJFMDBCQzJERDBGNTU1NDA3RjI3MURFQTBCMzAwRUM4Ci06MTBCOUUwMDBGNzRFQkIwNkYzNUZCMEYzQTkzQkMwNkU3MTA3N0E1QUZFCi06MTBCOUYwMDA0MDNFRDQ0RTY2RTM0RDZGQTVERkQxQkVEMTdFMERFNTRFCi06MTBCQTAwMDA2QjVCRUQxQUVCOEZFM0FGOUNEMzE5QzdDMzQyM0VFRURECi06MTBCQTEwMDA4NUVENkNEQ0FFREM2ODA0RThCMzc2MERDNTJCRTQ4NUZGCi06MTBCQTIwMDAxOUREODM0QkYzQkM4ODdDNzUwMkU2RUZENUIzQjBERDNFCi06MTBCQTMwMDAyMTczMTNGODIyODFGRThDNzlENUYwNzlENUFDNjFGM0FFCi06MTBCQTQwMDAyMjlDOUZFOEIwNjJEMDZFNEQzOTlCRTcwMkMyRUE4QjIwCi06MTBCQTUwMDBGMDlEQjZCRjkwQ0ZBNzQ2N0YxMkQzODUyRDc2NEJGQkM2Ci06MTBCQTYwMDBCQjhCRjc3NkUzN0RCNjEyNDUxMzEwQ0ZFQzlEQ0MzQzMzCi06MTBCQTcwMDAzRUFGQkMyNkQ2NUY1RUM5OTM4ODJGNTI2RjFBMkZGQTRECi06MTBCQTgwMDA0NTREMzBFNUFCRDNDRjUzQzZBMjc2QUU5MEU3NDA2MkNBCi06MTBCQTkwMDAzQUY5N0QwNUNGNTE4QTc2NUFFNzc1N0FFM0U4MDc1QTc1Ci06MTBCQUEwMDBDMUZGNzlCNzgyRTcxNTA3QzVFMDlCRjlCODBGNTUzNDk4Ci06MTBCQUIwMDAyNjdGODJCRjk5MEQ3MjdBNjE1MzEwRTRGODgxNEE4NjFECi06MTBCQUMwMDBGRkQzREYyMjUxQTA4NzkxMjdBQUQzMDFERjIzNEY4NDIwCi06MTBCQUQwMDA3OTVBODdFN0Q4MTQyMTQyOUZEQ0EzRTNBMzVCQTcxNjFBCi06MTBCQUUwMDAwMUU0NjU3Q0M0OEYxNjgzMUNBMEVCMENGNjYwQUU3OTc0Ci06MTBCQUYwMDBEQzc0N0MxOTJENTk1NTEwODc5NDM5MzlCRDRBQzFBNzdBCi06MTBCQjAwMDA3RjEzRjI0RkVDOUEwM0VGRDg2NjFFREY3NTJCRjQzM0U4Ci06MTBCQjEwMDA4Qzk4RTY0M0YzNDc3OTQ3QjBGQjU3Qzc2OTJFOTRBQjNGCi06MTBCQjIwMDAzRjc1MTdBQzQ3MkI3RjhGN0UyNDhDMkMxREQzRTM5MDYxCi06MTBCQjMwMDA2NjUwRkVERTlDMEVFMzk0Qzk4Q0IyN0U3OUIwRUZFRUM3Ci06MTBCQjQwMDA4QTA5MjA1N0YwRUU0ODE5QTYzMTUyMzY1MDZFOThDQTJECi06MTBCQjUwMDA4RkUxRTU3NTIxNDlCOTUyQUY2NkQ5OTdFRkJCRkJGMjhBCi06MTBCQjYwMDAzMUIwN0ZERjBBNzY2MjFBQkNFN0E3N0UwQUYxMzE3QTJDCi06MTBCQjcwMDA1MDQ0QkM2RkI1QzUxQzI1OTlGMDVFQjg0OEMwN0VEOTRECi06MTBCQjgwMDA1NkZDM0IxMUY4NkVFQjIxMTIwNEZBQzhBOEZFQUJERDlGCi06MTBCQjkwMDBCQzhFQjUxRTNGQ0U1QjU2Qzg2NkUwRkZBMzYzNEVDRDlDCi06MTBCQkEwMDA4Mjc1OEExRTExRjEzRDg5QUE1Rjc4NzZCOUMxMUVGQUE1Ci06MTBCQkIwMDAzRDhCM0ZFOTc4QkUwRUY1RjdFRDc5NEFEMkY3OUFDOTg5Ci06MTBCQkMwMDAwNUVDQzRDNEYyRTkyM0U3QTAxRjJGN0ZFNzc2N0MxN0JBCi06MTBCQkQwMDBCNjc2OTYxQ0JDODI5NkNFREM1OTU5MDk3NjhDNTY0REE5Ci06MTBCQkUwMDBBOTZCMjgxRDc3RkI4NEI1QzA4NERBNkM3NjVFQTVDRDgxCi06MTBCQkYwMDA2MkRGQjUxOTJDREREQ0IwNzgyMkVDREIyMzlEQjJCMzFCCi06MTBCQzAwMDA4ODhFNzdFQzQ2RjY2RURERTY5MjRGMUM2MTZBOTc5NjU5Ci06MTBCQzEwMDA1NzNFRTZGODE2RkRGRTZFMzlENTgyRjRGQkJCRDMzRUU3Ci06MTBCQzIwMDA3MUMyRjlDQ0ZERTU1NTE5ODBDRjQzMkQ1NkJCOEVDMEFFCi06MTBCQzMwMDBBMzZBNzQxRjU0NkE4Rjg0QkM3NDVDQURCRjI1ODg0RjlGCi06MTBCQzQwMDBDOTFFNkJBQkExQjBGNDk0MDcyQzlDMDFGQjlCOERBRDdFCi06MTBCQzUwMDAxRDczODE0RTE3MTQ2Mzc4RjI4MEY5N0VDRUY1QzlGQzBFCi06MTBCQzYwMDBGQURFNTk3MDVGQTk0MDI3RUMxQzM1NzIwRjBBRTU4NTkyCi06MTBCQzcwMDA1QzY0MTRFOEREMjg3NEJDM0JEOUZFMjQyMjg3OUUwMzUzCi06MTBCQzgwMDBCOTFDMjkwOTJCNTBDNTkwNjdBRDIzNkIxRTA0NzlGNkFBCi06MTBCQzkwMDAyNUI3RUI0OERENjJCQzA3ODlGQzJGODEzREQ0NUI5OTU5Ci06MTBCQ0EwMDA2Q0RGNzQ5RERCODU3NDc1QkFGRERBNTdDMTNGQkRBMEFBCi06MTBCQ0IwMDA5RUQ5RkJGOUVEOUYwQUI4MUVENEVFMUI0NkRCQ0YyRkIxCi06MTBCQ0MwMDBDN0E3MkFDOTgyMzUxMTQ3MjlBQzRGOTE0ODM0MERDNjAwCi06MTBCQ0QwMDBEMzQ1NjA5RjEwQTFGQUM3OEMwN0EzRERCRkI1RkU3NkUwCi06MTBCQ0UwMDA4RjFERUI1RjA3OUJFNzQ5RkRGM0YxRjBGOUU0MDVFOUYwCi06MTBCQ0YwMDA3QzkyRThFOTM5QkNERkVGRERGN0U5OTEyOTgwRkYzNTc3Ci06MTBCRDAwMDA2QzhCOTQxRjc5NUI3MDk4QzY5MUFGNUZEQzM4QUU4NTAxCi06MTBCRDEwMDBGNjI4M0UxRkYxQjA3QjBCREVGMjFFQkM2Nzk0MjhERkQ1Ci06MTBCRDIwMDBDMTlDMDdCRURERUQzRTNCODFFREVGQURGMjc0MDBDQzcyCi06MTBCRDMwMDBFOTJBRjE3QjVFODJCQzJBQjU3N0UxM0REMEQ2MDNFQ0RGCi06MTBCRDQwMDA1RDc0RDg3OTQzQkU0MDQ0OERCRDE3MUIzNURFMkZBRkRGCi06MTBCRDUwMDA4MzcyNjNCRDFFMTVFOEEwNzVDQ0VGQ0EwMDNGNUJCOEM3Ci06MTBCRDYwMDBCREIwQjA4NEUwN0U3NTYxNEUzN0RBMEJGMzlCQjhCRDkxCi06MTBCRDcwMDAyMDA3OUI0MUM4QkFEQkZENjQ5M0M5N0U0MDUzMDlCNkQ2Ci06MTBCRDgwMDBEMDREREM1RTMwRjQzRkQ3REJCNTgxRUUxNkQ0QUI0RDQxCi06MTBCRDkwMDBFQzdFNkE5RjlEQTEzM0JEOUExRjYwN0FCREI2ODVGNjgxCi06MTBCREEwMDBBMzcxNjJBRTMwREIyNTRDOEY2QjNCQjlGREMwRjU3MEUzCi06MTBCREIwMDAwNkVGMzdCMzg1RTlBQjBDQjAyMzdDMTA3RUEwQTM1RTAxCi06MTBCREMwMDBDNkIzQkNBQzdFQkI2NTQ4MDlEMzk3MTlBRDA3NTFBRjZDCi06MTBCREQwMDA3NTgzRDM2NTA4QzgwREE2MkY3MzVGN0E0NTA3MzQwNUIwCi06MTBCREUwMDBFOEU3MzYyQUE3N0ZFQTY2NzIzNEEwNTJGQjJDQkRERjUzCi06MTBCREYwMDAzRURCMjBGMjczMjZDMkVDNDM4Q0FEQTdFMzdDOUNCN0ZDCi06MTBCRTAwMDA2NzdDREZDQkM3NzdGMDc4RkEzNzQxQkVFRThCMTQ0RUY0Ci06MTBCRTEwMDA5MDRDN0M2QkRDREJDQTJCNjdFN0Y0NzlGNUVDOUNEQUExCi06MTBCRTIwMDAxQjVDRjRBMDY0M0E3RjY4RjFCMDc3QUU1QTBDQkFBQUYyCi06MTBCRTMwMDA4RjA1QTA1REJDNDc4ODcyNUM0MUJGREE0Njc4MTcwQTVGCi06MTBCRTQwMDBFODg1RUZBRjZFNzBGMzc3OEQzOEZEQTREMjI3ODYxQzlFCi06MTBCRTUwMDBGMjkyOTBBRjg0RTJGN0RERTg4MzI4QUY3NUJBNUY4MjkzCi06MTBCRTYwMDBCOUJEMUI2OUNDNUUwMkZDMUVCOUE2MUNDNkJGNzVDQTUzCi06MTBCRTcwMDBFNzE4Nzc5MTlGNjJCRjc4REVEODY3N0U0NUI5RUU5RDVGCi06MTBCRTgwMDBGNTBBREI4Nzc2OEI0OUVGQzk0Q0YzQ0EzODlGMkU5OUE4Ci06MTBCRTkwMDBCODAxOUZDRTA4N0JBN0QwMzk1OTQ5NUFGRTEyMkY5MzdCCi06MTBCRUEwMDA5QjJFMkY3QkE3NjBFQjk0MDdGMTVFNjM0QUZEMkMxMzVBCi06MTBCRUIwMDA1RDRBQTI0RjBEN0REQjBBRUIzQzk1OTA5OTlFMUI5QTQzCi06MTBCRUMwMDA3NTk0RkJEMTZBMDlFNTJCQzE3RDY3ODRGRjVFOEM1RUFBCi06MTBCRUQwMDBBQ0EwREZCMEQ1MTY3MUMwN0E2QzJCRTdFQkFBM0EzQTZBCi06MTBCRUUwMDBFMDVFRkE1NzVFMTc4QTBGNThFNzhEMjEzMTJBMTRDMDk5Ci06MTBCRUYwMDAzQTQ3RDU1MkU2RDdDMTc3Mzk0RUQzRkRCQkY5OUNFMjFDCi06MTBCRjAwMDA0QTJGRjM2Nzc1Qzk5QTA4RjE4OUY5MkQ4Q0JFQjY0RTkwCi06MTBCRjEwMDA1MTcwMUM5QjI2NjQ3NTQ4MDU2NkY5Q0JGMDc0OUQ5Qjk3Ci06MTBCRjIwMDBEMUQ3QTYyOUNGMjE3RDVERUNGODE2RDVERjM5RjU1RDk3Ci06MTBCRjMwMDBEMzM5RTJBOTdCMUYyQTA0M0NGN0JGQ0IxMjFBRjRGRUM3Ci06MTBCRjQwMDBDMkEyRkE5N0E2RUU0RDcyM0VEMDk3MEZGQjI4MEZFQ0Q3Ci06MTBCRjUwMDAwM0EzMzc5OENGNTlFNkYxRjU1REUwQjVGQUVGNDBCRTlGCi06MTBCRjYwMDBEQTcwNzMxMUNEMDZGRkQyODFFOTUxMUZGQUVGOTdCMTU0Ci06MTBCRjcwMDBGM0RBNUJGODc5RUQ5OUJERDdFMkJCMDdBNTcwOTczNjg4Ci06MTBCRjgwMDBDOUJBN0ZEMDYwN0QwN0UyODM3RDBGNjUzM0JGNDZENDk5Ci06MTBCRjkwMDA2MjVGRERGMkUwNEZDNkIyNzc2NTc0RkU3QjFBNDRDQjc4Ci06MTBCRkEwMDBBQzYwRUY1RkEzOUU3RTJFQThEQkE1RkU3N0NEOEM3N0RECi06MTBCRkIwMDBEODJFRjY1REI3NzQ2QTg2RTFCRThCNTQ2MzlBNDVFQTYzCi06MTBCRkMwMDAzMDBEOTAwOEE2RDlBNDBCRDMxQ0Q4RTdDMkZCNkJBNEY0Ci06MTBCRkQwMDAxNzUzOERBODIyMzFDOUZENDIxMjQ0Qjg4ODU0NjMyQUYwCi06MTBCRkUwMDBDM0JBNjVGNDlGNEJDODlEMEU4Q0JGODBGMzBCRTA3QkZBCi06MTBCRkYwMDBFMzlDQzIzOERGQUZGNkQ2NDRCQzQ5Q0UyQjU2N0I0MzE4Ci06MTBDMDAwMDBEQkJEQTg1NzYyMjhCN0U3NzMxMTdFRTJDNzYzQkJFMEM4Ci06MTBDMDEwMDA3RUNGRUEyREVDN0U4OTIxRDc3MTVGNDNEQkZGNTEzQTU5Ci06MTBDMDIwMDBEMzAzRkEwRTAxRTVENzNBRjdENTk3MjExRTVCNkQxRkIyCi06MTBDMDMwMDA5OUNGMUI4OEMzNTEwNEJGMUI2M0I0M0I5RkZCMTdFNjFBCi06MTBDMDQwMDA3M0ZEMDdFRTZENzZGRjJFODhGNzdGRTY4MzlGQzE5NDIwCi06MTBDMDUwMDA0RkZBRjJEOTdENkFBMzFERDEzRDZERDQ2MEU3N0JBNjZFCi06MTBDMDYwMDBGQTE4OEY1QzkzNjBGRjVGNTA2RjI3QzAwQjEyRUJGRkQ1Ci06MTBDMDcwMDA4NTBFMjhBQkRGMEZGN0EzQ0JCNDNDNzZDRUM0RjQzNkU1Ci06MTBDMDgwMDAyNTI0MERFQkI1RDhERkM2N0Q1ODY0NjZDODhDOTcxM0EwCi06MTBDMDkwMDA5Q0ZFMEQ3REIyMjBDMUFGOUY5ODJFOTAzOTVGMjRCNEQ1Ci06MTBDMEEwMDA0MzM1OUYxRkVFQ0RFMERCMjYyNkJFMzZERUJGMzU3RTU0Ci06MTBDMEIwMDA1RkVCOTY1MDU4MTlDNkFBMDU2MDFENTUzRUVFMDg2OUZCCi06MTBDMEMwMDBBRjFBNDZEM0Y3MDEzNkY5RjM1RkY0ODU3RkU3MzVDNTNDCi06MTBDMEQwMDA0M0E5QTEzQUQxRkNGRUQyMjJDRTg3MzNBNUQ2NEE5MEZECi06MTBDMEUwMDA2RkE3QzMyNDA4RkI4NzVCNDhERDU2QjBDN0M4MkIxMjc3Ci06MTBDMEYwMDBDQUI3RTE3NERDRjBCQjNGQjk3MEEwOTE4RUIwQUVEMDhFCi06MTBDMTAwMDBGNEUzMDY3NjJGRTc1NEMyRkJENTFGRjI3NzkxNEFEQkEyCi06MTBDMTEwMDBFRUI4MUFFOEUwMEM3RkI3REFFMDdGQTNERkQyMkVGN0EzCi06MTBDMTIwMDAzQ0QwRkJBNTVERDM2QkExNUM2OUE3MUQ3RkU3QTlGODk3Ci06MTBDMTMwMDBEMEM2NkFGMDBCQzEzQjJEMkVEQTRGMEVFRENGOTEwRTFCCi06MTBDMTQwMDA3Mjg0QTBCRUZEQjBENTE1NUQ0N0M3Rjk2MTlCODQ3MkFFCi06MTBDMTUwMDBGOTVDODk4OEVGOERDMDczOTcxMjFGNUY1QTNBQjRGMzY4Ci06MTBDMTYwMDA1RjM3ODExRDcyODZDQjExRTNEREM3MEYyQjM1REMxRkQ2Ci06MTBDMTcwMDAzRjdCNjA4MzAwRjcxMjNFOUNBN0UxQkMzRjFDRDY5NTM1Ci06MTBDMTgwMDA5NzRFRjE5M0UzNjNGNzczOEFGNkRCNjM4NTc0MUM0Qjc4Ci06MTBDMTkwMDAxRUY5N0Q2MTBEQzhCRkMyQzg5MjY0RTdDQzQzN0M0Q0Q4Ci06MTBDMUEwMDBGRTdERjgwNEMxNzhCODBGOURGQzc3OEQxQzVEM0VCMzExCi06MTBDMUIwMDA5RjM1Q0QyNzU4RTRENjg3NUVGRUZCNDgzOTE3MjhDNzQwCi06MTBDMUMwMDBFM0NCODlBN0NCQzdGOEJFQ0IwN0U3NTFGN0I4N0Y4Qzg1Ci06MTBDMUQwMDBGN0Q3NEUzREMxQ0UyOTlFQkRCNzM2MEZGQzUxQzM3RDZBCi06MTBDMUUwMDAxQTNCRjczRUYwMzhDNjhEQzMzQzYwMUY0REM3QTdDMTUwCi06MTBDMUYwMDBGOEVFNzFCRjc5MDZGQzBGQjQxRURFQ0YzMEVBOUQzQTJGCi06MTBDMjAwMDA1MENCQ0FCN0QxRjIzRUM0M0JGMTk1MDEzRDMwQkM5MzRGCi06MTBDMjEwMDBGRDRDNEUxOEY2RTNEMjY4MTZGRUVFNDI3RkJFODhGOTVBCi06MTBDMjIwMDAzMDQ0MjdDNTdGRTlGRTZCRjA1Q0FCRDQ5N0NFRTg1OTZDCi06MTBDMjMwMDBFRDFBM0IwN0M3MUZDOTgzNzkxQzk4MUVDRTAzM0ZERTRBCi06MTBDMjQwMDAyOUUzNzdBMEU0NDgxRUUwQTFEQTFCMkVGNTk5RTZGRjZBCi06MTBDMjUwMDBDMURCNEZBMTdDMkYxNkVCREVCQTBCRThGMjMxRjYzQkM3Ci06MTBDMjYwMDAyNDc3QkNCRTVEMzRDQjhGNjlGMDgzNzg5MzYwN0UyQkRFCi06MTBDMjcwMDA3QzcwMUU3NUFBRUZCRDlDMDg4QkY3MzlDQ0RFNjM1RDIwCi06MTBDMjgwMDBDQTc5RUY1NDA3REQzRjUxN0M3Q0IwRkYwNzk4N0ZBQTQ1Ci06MTBDMjkwMDBFRjNEOUIyRThDMjdGQjYwRkZCMTc0NDg2Qjc4M0MzRkQxCi06MTBDMkEwMDA4OTVFOEJGQzQ1RjFEMkUyNDhBMkFGRkFFRTQ1NDVEOTUyCi06MTBDMkIwMDA3REI3QjMwMjdGODdGNDNFMDM2Rjc1Q0ExQ0NCNzkxNTM3Ci06MTBDMkMwMDBFM0VGOUNGNjgyRTM2ODJGNDc5M0RGOTM0QkQ0Rjc4OTIzCi06MTBDMkQwMDBFRkNBNUVFODFFRjA0OUNFQTdFRkYyNzdEMTU2N0JDM0Q2Ci06MTBDMkUwMDBEN0ZCNTA1RjU4RjU0OENERTZFNTc5ODBFNzFBQjg1MzlCCi06MTBDMkYwMDA4NzcxMEVEM0FGODBGRDM2REUzNzYxRUZDQUM2MTA0RkFGCi06MTBDMzAwMDA3REVGQzY0RUJDMDJFMjFDNEZGOTE5NUNFNzlCQkQ0MUI0Ci06MTBDMzEwMDBFNzc4NjRFRkQyNTZCMkZBMDUyQ0JGOTVFN0ZGQ0E1QjA3Ci06MTBDMzIwMDBCRDk4RjU0RjA0RjZCQjQ2MzYzRkZDM0U4NTIxRkY1MkQzCi06MTBDMzMwMDBDRkRGRkFGQjE0Rjc4MzRDMUU4MkVEQURGNjBEQzE2QzE2Ci06MTBDMzQwMDA4MUNERTdFRjZCQ0Y5MDM3N0Y3NzNCOEU3RjZDM0I4NjVECi06MTBDMzUwMDAxQzA2QkU4NDkwM0QxMjBDOEVGRDQ3RTBFRjZGQUQ0RjgyCi06MTBDMzYwMDBFNkU2NUJFNEY5MTdGNzhFNjg4NjczQTA3MzAxODJGMTQ1Ci06MTBDMzcwMDBDRkY2RDZCNTA0RjREMkMyOUREQjkzRkVCRTVEMUZDQ0QyCi06MTBDMzgwMDBFMzQ5OTQxMTk0Q0Y0Q0ZDMUNGMzMxM0IzREM2RTUyMUFECi06MTBDMzkwMDBGQ0MxRjlDQzI4NDJGODdCMTc5NEE2QjIzMEU0MDZGNzJBCi06MTBDM0EwMDA3RkEzRjk3QkVGQzUyNDgyRjZENTU4RDI4NTY5MDlFOUM4Ci06MTBDM0IwMDBDNjc0M0NFOUM1MTQ4RjQ5NDc4MEFCMkYyOEYxNzc3QkMxCi06MTBDM0MwMDAyQjYwRjJDQjFDRTFGQjIxNTRGN0FGRjZGMDMzNDA0RjZBCi06MTBDM0QwMDBGMDdFQUYyMDgxNURCNDYyMkE4Q0ZGQTg0RjM1N0UwN0M2Ci06MTBDM0UwMDA5NDI0RkNBRTVBRkZFRjgxNjg2MEQ3Q0MwRTBDNjZENzYwCi06MTBDM0YwMDAxMDU1RkVBODJGN0VBMzkwQkRGRkNCRjgyMUQ1RUZDNDJBCi06MTBDNDAwMDAyNUZDRkUyNEJGNDc2Q0UwNjEzOUU5QzIzODg4NjdEQjUwCi06MTBDNDEwMDA1N0JGMzA4NkUyN0ZDOTdFMkZFQTgzNTFFRDRERjgzQjRFCi06MTBDNDIwMDA2MDRCNDg3NzE2REMyRjFEQzVERjkzMjA2REVDMUQwRjg4Ci06MTBDNDMwMDBFMzlEODgzMTZENzZDQkJCMUVDQjEzN0U4NzY4MjlGRkM5Ci06MTBDNDQwMDBEREIwQTUwOURGOERGQjlCOUJFMTQzOTIzODgyQzRGQkU1Ci06MTBDNDUwMDA5RkE3N0QyOURFNjEyRDQ5RkU3QjMwODlGNzNGRjc3NzY1Ci06MTBDNDYwMDA4OTE4REZCMzFBRTI4NTg0N0VCOTM3NjY2RjlEREQ0QThECi06MTBDNDcwMDA1RjVEOTcxNTk5REU3QjZBMTQ4MjZDM0ZFRDc1ODVGNkRBCi06MTBDNDgwMDAwOTAzRkIxOUFCMzIzQkVFODAyMDI0OEQyM0JCMjY4REE0Ci06MTBDNDkwMDBFRjE3NDkxM0I5OEFCNkQzQjg0QzU2NjFCRkQ5MTg3NThFCi06MTBDNEEwMDBFMTM5NjhBM0NBRjY4NUMzQkQ1NTBFRDhBNzEzQkZBODQ2Ci06MTBDNEIwMDBDMkZEOTRDQkE1NjkxODVGQUUyQzk3MjdDMkI5RTdGMUVFCi06MTBDNEMwMDAzRDRCQkFFMUZFNDI2MzQwNDYzRkVENzAzRjNCMDcyNURFCi06MTBDNEQwMDBDMzQ0N0MxRkEwNDk3RENDM0YxRkQ2QzlDM0NFMTk3MzZFCi06MTBDNEUwMDA1NTgyQkY2MzdBQTRFMzc2MTFFMDQ2QkE2RDE5MEFGRDVFCi06MTBDNEYwMDAwOEUxNkVCQzc3MzM0QzI2RkNGQzc1RjYwNDRBN0ZGOUU0Ci06MTBDNTAwMDA5QzFFNjREMjhBRjc4RjY3MkM3RkQ3MDk3QTNEOUZBRjM0Ci06MTBDNTEwMDBGQjk0QjQwMjlDODdDQ0Q3NzM3N0ZENDkzRkQwRTlGM0Y1Ci06MTBDNTIwMDAxRENEMkY1RjRFREJCMzQ1NjU4QzZCMkRGRUIyRjEwRjM5Ci06MTBDNTMwMDA5N0QzRkU3QTNCMTQ4QzY3MzVGMDkwQjc0NkI2REM5RkY0Ci06MTBDNTQwMDBDREI5Q0QwQTJCMDlGNzg4NjU2MkNBQTdGMDM4REUzRjVFCi06MTBDNTUwMDAzQ0I4MUEzM0M3NTU2NTg2OThCMzUwRjVFMEZERTA0QkZCCi06MTBDNTYwMDBEMzA0NjYxNzczQjgxNDYwOEE5MjRFNUJBNENBNDVDNzk5Ci06MTBDNTcwMDBEOUY5ODY4MDdFODdBMzFEOEJGMjMxNEVGRjI3RTE3QzlGCi06MTBDNTgwMDBBMDZGODMxRTEyRDdFRjRCQjA4NzkwOEY3NDI3QkYxRjA5Ci06MTBDNTkwMDBFQzg0QzNCQTQ0RkE2OTZBMjAyM0MxMUZFRDg4MUU3NzcwCi06MTBDNUEwMDA4RDgzNzUzQzYxQzNGN0E0RDY3M0ZCNUJGNkIwRjg3NzU3Ci06MTBDNUIwMDA4MzVFMTJEM0Y1MDk3NEI3RkVDQjZCOTFFRTdBMjlERDU5Ci06MTBDNUMwMDAyNTdCMTdDRUE4MjdBQjFBREEwOUI2MUMxMjA0RjZCMEUxCi06MTBDNUQwMDA2NTc2NjdBQkI0REVCOEE3OTRBMDg3QTJFQ0YyNDc0QkIwCi06MTBDNUUwMDBEMkMwOUUxOTc3RUM3QUY2NUUxRkM1MTdCRUY3NThBRjFBCi06MTBDNUYwMDA4Qzg0N0RCRkJEM0U3M0E0OUMwMUU1M0M0ODhGOUY3ODMxCi06MTBDNjAwMDBEOEY5OEY1Q0VGMEU0MjdFNjM0NzQ1NDAzM0QxNzU3Mzk2Ci06MTBDNjEwMDA4MzNBNTIxRTA5RUZBNTNBNDZDMkVGMjMzNUE3Rjg5RDhCCi06MTBDNjIwMDBFNjVDQkY1ODBERkUyNTg1RUZGRjk3QTRCMUYxMkU0OUJBCi06MTBDNjMwMDA3MzYzN0EwQjg3RUY5M0Y1MzkzMEZFRkIyOEZENDBCQzFFCi06MTBDNjQwMDBDMDkxREIxOEZEQUUxRUU2QzA3QkNGQUI5RjFGMzE3NERGCi06MTBDNjUwMDBCMDM4QTAwNzFCMDIyMzAxNkZFREI3RDVBMERGQTM3MjhFCi06MTBDNjYwMDBENTcxRTcxNUMwRTc1RTg3MEFGNDI4Rjk0NkREMzMwRDdBCi06MTBDNjcwMDBFOEZEMDUxQkRFRkI2QUY0NTY2OEYzNERFRDQ5QkVDOUMzCi06MTBDNjgwMDBFODU3OTI0NDNEMUIzNjQ1MEQ2OTdGQjg0MjFFMDZGNEJCCi06MTBDNjkwMDBBMkVGMDI0REI0NjFEQjExMDY3QkY1NkM4MUU2NkZEQjI2Ci06MTBDNkEwMDBGNjJDODM4N0U4QkIwNDlBN0ZDRkI2RTcxOTlDQUI2NzZCCi06MTBDNkIwMDBDMzJGODBEQ0JGRUQ1NzBDMUVBOUVGMDJGOEExNkQyRjMwCi06MTBDNkMwMDAzMTE4NkMwQjZBQzczQ0JBRURCNzU3ODBFRkE3RDExNjhCCi06MTBDNkQwMDA5QzBCRkU5RDFGRDNGMTk3RDhFMEJENUE5NjFFRTQ3OEJGCi06MTBDNkUwMDAzMUYyMUY4M0VGMTRERjg3Nzg5QTk4RkYyNEFGRjc3NDM1Ci06MTBDNkYwMDA4QUZDN0ZFN0Y5ODc1M0I0RkYzMzVFMkY5NkEyRkU1MTgxCi06MTBDNzAwMDA1RUVGNzg4QUZBQ0ZGMTdBMjc1MkU0QkZDMEYzNUY0QzJDCi06MTBDNzEwMDBEMUZFQUY3OUJERUUxNEY1NUZFNkY1NUU0OTUxRkY3N0M2Ci06MTBDNzIwMDBCQ0RFNkIyOUYyRkZDMEYzNUY0RjY4RkY0RDVFQkU4NzMyCi06MTBDNzMwMDA3RkNGRjFCNkZDNDFBNzc0OTdEM0MxNUVGODJDRjZCNjUzCi06MTBDNzQwMDBBMEZEREU1RTU3OEVGNERGMzg4OUQ5MTkwNkJERTc0MEJCCi06MTBDNzUwMDBCQzI2Qzg1Qjk1QzU1NThENTJEOTNFRUU5NzY5Q0NERTk3Ci06MTBDNzYwMDBBODVDNTVCNDBERTg2RUY1QUYyNEQ0QTc1NDhGRTBFRjY0Ci06MTBDNzcwMDBGMEVBQUI1OERDQ0JFQUU3RDk3RDkwRDVBQjY0N0MyN0Y3Ci06MTBDNzgwMDBDREEwNDdBM0JFMzFGRUREN0M3QzREN0NCQ0M3RDIwQTY4Ci06MTBDNzkwMDBGOTc5NEI2MEU0NkM3M0JDQTc2QTg1MUQ5NDlGMjA2NDkzCi06MTBDN0EwMDBBNzI5OTNFOTk3RTI1NTU1OEVEMUEwM0ZBODdFMDFCOUZDCi06MTBDN0IwMDBCOURFQTNDNEUwMUVGRDdBNTVDNkZDQTZDQzJBMTVGMjRDCi06MTBDN0MwMDA3NTU1NDZGREIzM0VCM0NBMzExRkZEMzlFOUU4OUZDODMwCi06MTBDN0QwMDBFNzcxN0I0REFBOENGN0Y4NjVGRjBDQ0NCRkZDRDFEOTczCi06MTBDN0UwMDAyQUM4RDEyNkQyRUJBRjg0RjlBRDkxRjFCQ0Y2NDg1REYxCi06MTBDN0YwMDAxNTdFQ0ZGNzdGRTYwN0Y5RkNBQzlGRTFGREI4RjczOTZFCi06MTBDODAwMDAyN0JDRTcyQTdGNEY0NDdEODFGOEEzRkQxNkFFMTFBMzE0Ci06MTBDODEwMDAxQTJENzI1QzVEMkQwMkZDNDAxM0QzNTdGNENGM0JBMTVGCi06MTBDODIwMDA4MkM3NzFEMEJGQ0VEQjJCNUU4MEY4OURDNjJENzIxMDAzCi06MTBDODMwMDBDRTczRTA0RjM2RTk4MzIyRkU3QkE1NDM1NUI2NkYzNEI1Ci06MTBDODQwMDBGNEQ1N0REQzhGQUIwNzFDMTg4NzU3MjQ5MzgwRjk3N0NDCi06MTBDODUwMDAyQzg3QUFGQzNDOERCRjYzMzYyMjYyRDU0RjA1MkRENkFFCi06MTBDODYwMDA3NzZDRjIxM0Y0NTNBMkJFQ0FBREEzRjJEMTU0REUxRTBDCi06MTBDODcwMDA1MDJEQjBBMEIyRjcyQ0ZFMTcwNDRDRDAzOTAwODAwMDI4Ci06MTBDODgwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCREQ3RDkxCi06MTBDODkwMDAwQjc4NTRENUQ1RTgzRTY3Q0UzQzMzNDk2NjkyOTk2NDBGCi06MTBDOEEwMDAyNkNGNDk4MDEwMjBDMDA0NDIwNDQ0OUQ4NDgwMTFCMUU5Ci06MTBDOEIwMDAwRTBGMTVENEUyODQ2NzgwQkNBMEE4NThFOUM3ODQwNDkxCi06MTBDOEMwMDAwQzE0MzVGRTQ2MDQ3RUEwMDNBMjg1MTZFQ0QwQTIwMjBECi06MTBDOEQwMDAwNjNCMjAyMkZFQzUzNjU4REI4QjhGREExMUI5ODgzQzI3Ci06MTBDOEUwMDBDNzQ3OTUzRUQ0QkJEN0RBN0IyNzczNEUxMkM1QjZGNzQwCi06MTBDOEYwMDBGRkVGNzdEM0NGMUVGNkQ5OEZCM0Y2NUE2QkFGQjVGNkVECi06MTBDOTAwMDA1QTZCRUYyMTVFRTJGRDVBNDdDOEUyM0Q4QjZGQjQxMENGCi06MTBDOTEwMDA0MkM2RkZBMjI4Mzk1QTQ0Qzg1MjUzRDIxMDkyNENDODdBCi06MTBDOTIwMDBEN0YwNzcwMzIxNERDQkMzRDdGN0Q1MTNCMjY5QjlBOTk3Ci06MTBDOTMwMDA5RjQyOUY0RDVGMEU5RjQ2NEEwODg5MjU1QTdDREIyNDAzCi06MTBDOTQwMDA0MjU2MkRCN0Y1NTNGQTc1QjUxRjY4QTMyRjlEODQ2QzE5Ci06MTBDOTUwMDA1NjgyOTM4OTgzM0U0MzBBNjlDQzIzRTREMDEyOTk0MERFCi06MTBDOTYwMDA3OUIxREIxNDMyRDIyNjhCNUZGQkZENERGREExQkM0OEIzCi06MTBDOTcwMDBGNjEyNEY1NzdGRURGMzk5RTVBRTdFRjBGRERGNTA5ODRDCi06MTBDOTgwMDA2MDVDN0Q0MEVBNzc3QTM4RkRCNzEyNzBGOTEzMDlFOUU3Ci06MTBDOTkwMDBEM0FBOUM4QTlBMDhGRTdENERGRkNCNkJBMUU1QzJBRTVGCi06MTBDOUEwMDBCMjVFRUZCN0Q5QUM4NEU0OTJCODc2MTQxRTQ1NTNENjg0Ci06MTBDOUIwMDAzQkRGQjQwNzhBNjA3QzA1QzdEN0MyOTFERDQwRTcxRjIzCi06MTBDOUMwMDAzN0FFRDE2NTUzOTU1NzQ5MEQ4NUE0MEY3RDUyNTgwMTU3Ci06MTBDOUQwMDAzRjQxQTcxQzdBOUFDRTMzNkJFOTgzQTM0RkE3MTI5MkVCCi06MTBDOUUwMDA3OUQ0RDIwQzc4MjVBRDRGMTI5MjQ2ODgwRUJFNERFNzExCi06MTBDOUYwMDBBRDQ4M0UwRkExNzQ2OENFMkJGNjRBRjQ3OUVDNTkwQjgyCi06MTBDQTAwMDBDMzUzQjYxNUYxNjQ5MEJDRTkzN0QzQTc1MUY2REI2MDg4Ci06MTBDQTEwMDA3Q0ZBRTc4M0YxMUZDQUI2NkM1RDkzMDdDNTgwMDlGMDA1Ci06MTBDQTIwMDA5MEI1ODMwRTk4NDE4QkMxOUNENTNFODVEMjg5QTI5QjNGCi06MTBDQTMwMDA4Qzg2RkEzNzVBN0M3NDVFM0JBNENFNzIyNTk0QzMyMTRGCi06MTBDQTQwMDAwMzZCNEY0ODA0RkU2RjhGMkNGMTdBRTI1MzVDODRFQzQ5Ci06MTBDQTUwMDA5NjI0NUU1RjU0NTk5MTQ1REIyQkI2NDE4QTk3OTBCOTc1Ci06MTBDQTYwMDBBRDQzNUJGNEQ3NDFCRDJDRkFGQkM4NDgzQTNGRjgxRUYyCi06MTBDQTcwMDAyRjAzNUU3RTdFODRENzA3QUY2QkE5RTg0QkM3Mzc4ODRDCi06MTBDQTgwMDBFRjkzMjBCNERGMjNDQkFDMUMyQzZEODFGMTc3OTdGM0FGCi06MTBDQTkwMDBGRTQxQ0Y2QURGMTg4NEU3NjY5RDlEOTAyNUI2QjIxNkU5Ci06MTBDQUEwMDBBQkJCMEJERTk1RjYxQjVCMUFFOUZDMkU3QUEyNDk3NDMwCi06MTBDQUIwMDAxQUE0NzZFQkU5MzQ0Mjg3NUEzNTJERTAwNzNDMTJFMjlFCi06MTBDQUMwMDAyNUZFQzE4NDlDOTUyODcyNDc3NEQxNEZCRkI3MkM5ODFFCi06MTBDQUQwMDA0OTVGNUQzRUZBQjdBNDIyRkFBQ0Q3NDU4RjI2NTBGQ0Q5Ci06MTBDQUUwMDBENUVFMEI5OEY0RjkxNENGN0E1RjMwMzNBRkFCNUZFRDJFCi06MTBDQUYwMDBERTQ5MjQ0MEY5QTZCRUJEMTg5RjNERjQzQkE2QzhGRjAxCi06MTBDQjAwMDA1NDNGOTNFMTJBQkU3NzMxRjI0NkREMkU1QTU1QUIwQkU2Ci06MTBDQjEwMDBCNDU4RkI2MDdCQzJFOERGRjNGQzQ0RkY4QkJCREVCODlDCi06MTBDQjIwMDAxREJFNzdDOTEzNEQ5QjAwN0MxOUExNzhFOUExOUY2OEIwCi06MTBDQjMwMDA1RkI3QUY4QzAwREY1RkIxRjg5QTZDRjRGRDVENzZCNjNECi06MTBDQjQwMDBDRTg4RDJFMDg1RjY2MTUzQUJDRDRCRUJDREZBNTZCRjI0Ci06MTBDQjUwMDA5N0I2QTdBNDBDQzkyM0JCOUVBQjZDN0Q3MTNDRUQ3QjQzCi06MTBDQjYwMDBFREZBMDk5QjQ4RUE0NENBRDdDMTFBQzVGQjM0ODE3MjYxCi06MTBDQjcwMDAzMDYxMDgyREFGQUQ1NTg2Mzc1MjkwNTYxNEZGNzE1ODZECi06MTBDQjgwMDAxMTk0OUZCMzEyMjMyRDM3RDUxQzcxMTVDMTNBRjIxQTk3Ci06MTBDQjkwMDAwODE1MkY2NEVEQThCMDFCRDY3MTczQUQ2MURBNzZFMDhECi06MTBDQkEwMDBERkM4NjJENzlDQTJBRUYxNTdEQUY1MDhGN0VBNTdFODdBCi06MTBDQkIwMDAzQTFCNEE5RkZBQjA1RDgyRkVGRDE0MDJFQkQwNkNBN0NGCi06MTBDQkMwMDA3NEE2NjVCMzNCODUwNEYzQTA5RDc1MkRBQ0M3RDVGQTVCCi06MTBDQkQwMDA0MDY1MzlCNDczQ0JFNDY5RkE1RDczQkZBOTk1RTUxNDc4Ci06MTBDQkUwMDAwRTk3NTM5Njc0MDg0N0M1QzlCOUI0QkVDOTY2MDBDOTQzCi06MTBDQkYwMDA0NkRFQjBDRkRDMDU3OEZBQjlFMjZEODA3NUY4NzNBQjJDCi06MTBDQzAwMDBENTE2QTQxNTU0MzZGQTYwREQyQUZEMUMyMTI4MUI3NUEzCi06MTBDQzEwMDBBNDIxNENFMUNCMkMyNkZFQjBCNTBCQ0UzNzYwOTQxMThECi06MTBDQzIwMDBGMDM0MjBCQzZCQ0RFMTQ5NjU3NDFDQ0I2MkQ5MTZBNEVECi06MTBDQzMwMDBERjVCNURCQkFFNjMzQ0ZEQ0U3RkQ2M0U3RkEyOTFCRTg3Ci06MTBDQzQwMDA1RjkzQTYxMDgwQzNFQTUwMjI4NjI0Q0FDN0I3NTAxODQzCi06MTBDQzUwMDAyOURDQkIxQkZEMzY5MDlGMzFBNzQyQjZEMTdBNEI1RkQyCi06MTBDQzYwMDAwM0YxQzRDOTQxNkIxMTJEQzdDOUE3NTQ4N0UyMzNEMzVGCi06MTBDQzcwMDBGRTMxN0JFMDY1MUJGREVFRjBEN0RGMzQ0MTdGRDcwODQ2Ci06MTBDQzgwMDA1OTg2NjUxMzU2MTg5RDkzNEFENEUzRDhDNkE4Qzc0OTU4Ci06MTBDQzkwMDBBOTUwRDczQjI2QUFFQkQzQTZBQUVCNUQ3N0FCQ0IxOTVECi06MTBDQ0EwMDBCM0Q1RTU4OTgyREZBOENDQjE5NkQyNzlCMDJBNjI4OTYyCi06MTBDQ0IwMDA3RUJDOUMyNDIxN0VERTAyRkM1QjBBNjQyRkUwQzc1QzA0Ci06MTBDQ0MwMDBCQkZERUM1QzVBOUYwOUYyODRDMjRGODY5MEQwRDM5NDhFCi06MTBDQ0QwMDA5RTg3NzM3RUU4ODk1MjNDMUI1MzFBM0NGNkEyRUVGOEZECi06MTBDQ0UwMDBDOENDMzZERDBDRjRCMkY2NTU2Qzg0QjZCN0JFRkJEMUI5Ci06MTBDQ0YwMDA5NzMwQkU5NUM0QjVDQjAzRkNGODRFMDM3REUxQ0Y0NTFDCi06MTBDRDAwMDBFMTQ5ODQ3Rjc4MDBERjBEN0ZGRTExRThCRDEzM0EyRkUzCi06MTBDRDEwMDBFMDNCQjM1NkMxRUYzRjNDRDUxM0QyRTVCMUU2ODRCNjU0Ci06MTBDRDIwMDA0RkUyRUQ5MzRDNkIzQjc0NDNFOEYzRERENThCNzQ0OUQ0Ci06MTBDRDMwMDBEREYxOUE0NjFBMjQ1ODk3OTQzRjUwNUY5MDJBODJGQTYwCi06MTBDRDQwMDBFMjIxOTk1NDAzREZEMEU1NEE2MDNDMUI3NEEwNzJFNkVGCi06MTBDRDUwMDBDNjE0MDNGMkNEREZCOTdFQTU5QzI2NDM3RDlBOEQ4RDQ2Ci06MTBDRDYwMDA2OTcwQ0YzNkMzN0E1RTc5OTRGMUZGNEEwMzFCQTc3M0NCCi06MTBDRDcwMDAzQzBGN0UxNDU1MTBDODQ5QTM1REM2RjFDNDM4RUI2QzU2Ci06MTBDRDgwMDBCQzBEMkYzQkVEQUNCQ0U3NDhDQUNEQjAyRUQ3NEQ0RDA2Ci06MTBDRDkwMDAxOTA2N0M2Mjk0NDkwMEM2NEJDRTMyRjkwNkQwRjk5OTQ3Ci06MTBDREEwMDA1RjMzMDQyNTNBNjhCMjQyOEVFODUzNjg3QjBCQjlDN0ZCCi06MTBDREIwMDA0RkUxRDg3MENDMTJENEQxRjdFNjM5RkY2MUEzNDgyNkYxCi06MTBDREMwMDA4NTc2MDZGNzlFMTVERURGODMxQzg4NTUyOTg4NDdCM0Q0Ci06MTBDREQwMDBCM0Q1MzZBQzg4Q0QyMTQ4RTE0QjgxN0Y1MEY5NThENjg4Ci06MTBDREUwMDBBRkNEMDZGNDM0OTdCNUEyRkUzNjE3QjdCNjAyOUUzNjFECi06MTBDREYwMDA0Qzk0RDE5RTQ4OTkyRDIzM0Y5QkIzQzMyN0ZBRDJGNzc5Ci06MTBDRTAwMDBGQTM5QjIwREM2NEJBMThBREQ0MDA3NzkzQ0FCRDVFRkFDCi06MTBDRTEwMDA4NzcxMjlDRUU1NTJDNjJBMzAyRUNFOTA3RTI3OTVFMzIzCi06MTBDRTIwMDBENUUxRDg3QkJGNDRDNzQ5ODVGMTg2QjBGNjgwMjczQjYyCi06MTBDRTMwMDBDNzkzRDdFRTQxQjgxRDdDRENENEJFQjRGRDEwMzY0RThFCi06MTBDRTQwMDA3MzY5RDczODgyOEUxQjJBNDkwOEUwMTNERjE1RTM3NDEzCi06MTBDRTUwMDA4RTRGN0MxMkM4NTVGRDZGMjhERTI4OURBNDFDMTMwMjNFCi06MTBDRTYwMDBCNzcyMDEwOTE5RjMwMDNGRkU4NkFEQjhBRUFENjQxQjgxCi06MTBDRTcwMDBBQzE3NDc1NjM5RjA1MUM2QjE4RDkzRTUyMUQwQ0Y4MjFBCi06MTBDRTgwMDBERkQxQ0YyMTIxRTBFMzBDODU5OEFFNEYwMUZCQzU4RkE4Ci06MTBDRTkwMDA3OEQ0QUU1N0Y3OTFENjI5NzQ4RDc0RDI0NUJCN0VERDE4Ci06MTBDRUEwMDAwQTY5RDFBNTc0NUZDNzZFODdBM0JDNjA0ODBGRUI1OUIwCi06MTBDRUIwMDBCMzVFRENDNzYyRjcwMkQzNkJEN0Y1OTY4NDRCQzU4MEFGCi06MTBDRUMwMDAxNzEyREY1RUY3RUQ2NTlEMkU3QzYyM0MxMDJCOURFQTBDCi06MTBDRUQwMDAwOThBRkExQ0NERjcwOEY5Q0EwODY1ODlDODlFQUZGQjE0Ci06MTBDRUUwMDA4MERDQjdGM0Y1NDBGNTE1NURBQzdCODZEOUM2NUE2MTk5Ci06MTBDRUYwMDA5RDJFMjJDODVGRTUyRkFDQkRGMzM3NzRCQ0NGRkIxOTY0Ci06MTBDRjAwMDA2Q0EwNTdCMjhGQjU3NjgwN0UyNEZCMDJGRDgxMEU5QjBDCi06MTBDRjEwMDA5NEMwNEYxMjY4RkRBNjkzRTkwNEU0RjY2QTMzOTkwNkJCCi06MTBDRjIwMDBGQ0FENzAzRUQ3RUE5Nzk1N0NERDc4NDBDRkI5RkVGOTJECi06MTBDRjMwMDBBN0IwMDdDMzdERDMwNkQ5RThEQTVCRjlEOEUxNjMyNjQ5Ci06MTBDRjQwMDBFNzdGQTM5RDQ1RkFBMzlEOTU3NUE0QTNEMTBBREY2RjQyCi06MTBDRjUwMDAyRDZGMzE1MUZDOUE1RjY3RUQ5QjY5MzlBODAwRkU2QTFECi06MTBDRjYwMDA3MjYxMUQxRUNFOUU4Qjc4NTJERTM2MTJFMEQzQzEzQTFFCi06MTBDRjcwMDA1RjA4Q0FFNDFEMzMwMUY5QkJFM0I5QkJBQjNEMjA3RkI5Ci06MTBDRjgwMDBEMjI2Nzg0MDBFQURFM0VCQkRDRDJFRjU4ODJGQzVFMDVGCi06MTBDRjkwMDAwQjgwM0RBMTdERkYwOEUwMTdFOUU5M0Y1QjQ1RTkzOERCCi06MTBDRkEwMDBGODI5MDM1OTQzMkIwQkU1OTkyRDc5QjAyRTU2NTNGOUU3Ci06MTBDRkIwMDA0QjZCNjdFQTNDNzUzRjk2QkFFOEYzMEI3M0Q5NzYzQjQ3Ci06MTBDRkMwMDBFQzNCOTY5QjQ4QzA0OEU3NzU0NTIyMDFCQTM4QjMxRDMzCi06MTBDRkQwMDA2Rjk0ODFGQ0M5MjExMTA5RjQ2QzRFMDMzNTc4ODFBRjNGCi06MTBDRkUwMDA5NjU4NDgyMDhFREZCM0FFMjhEOEZFMTc2NkRGNzYzQjEyCi06MTBDRkYwMDA5N0ZGMjYyQTA3RjRFQzlGRTRFNzI5N0U1MkU1NjAzMjhBCi06MTBEMDAwMDAwQUVDMTdGRDJFQ0JGQjIwMzc4OEEzQzJEN0I5REZDOEE3Ci06MTBEMDEwMDAwN0ZFQTU3QTlGN0U2RjBGOUZCRjlFRTI1MDNGOENGRTVBCi06MTBEMDIwMDA2Nzk1MjNDNjIxREREQjNGQ0ZGMUEzOThBQzExOTA5NzI0Ci06MTBEMDMwMDA4QUY1Rjg0OTk0MkYzNkU1NDI3QzNCNTM4OEU5MUI1MjI4Ci06MTBEMDQwMDA0MzQyRkQyNDg2MTcyQ0ZGQzA4NkU1NEMyQTdGOERDMzAyCi06MTBEMDUwMDBEMEVFMEYxQTAxQ0UyNEI2RkYyMDNFOUZDNzkxMDZFQkZCCi06MTBEMDYwMDA4NTIwOTJCMzRDQTRDNTQ0REIyMUI3RDNGNUU2MjYxRDM5Ci06MTBEMDcwMDA2NkI0OUI4RjEwMEZBQzA3OEEzMUZCOTkwNDE0NTkwNEQ2Ci06MTBEMDgwMDBGMEJBODk5MENBRjg3NTIwOUUwNTM2NDYyNzY1QTkwRTI0Ci06MTBEMDkwMDBGNzRCODM1RTM2MjMzQ0ZBMDYxMjMyODMzRDA0QjA1MUNGCi06MTBEMEEwMDA3QzJCNEI0ODQ4ODFGREQ2NTIwM0I2MkJCMDc5QjA5RkZDCi06MTBEMEIwMDA4MTM0QTAzREJCRkJDQkY3MzI0MDRFNUI4RTUyN0I2Qzg0Ci06MTBEMEMwMDAyOEQwNTk0NjM5NjVCMUE4RDcxRjIxOEQ4OEE3RDM5QzkwCi06MTBEMEQwMDAzRjM2MkZCNzIxOUQzQkY3Njc4MTM3Mzk5REEzOERBMDQwCi06MTBEMEUwMDAyRjcyOTZBNEE4RTgyQkRBNjU1REM5MjQ4MUUxRjFFM0VCCi06MTBEMEYwMDA4NjcwRENBQ0JFNDcyNDUyMDRGNTM5NThCRjc5QjlFN0Q1Ci06MTBEMTAwMDA1QkM2Q0ZFRjY1N0MzN0YyNTFFRkUzNjc2MUZERTZDOEEwCi06MTBEMTEwMDA5QkY2RUY1MTU0NkM4QTFEQjFGQjNENURGNkI1MTZDRjAxCi06MTBEMTIwMDA1OTRCRDQ3Mjc5RTgzRTc1NTlFMEM1QUNGNzM5MjY1MUIwCi06MTBEMTMwMDA5QzlCRUY5NUJENUJFOTc4RDc5QzU0QjdBQkNDRkIwM0M4Ci06MTBEMTQwMDBFRTZGQkJEQTQ3MUM1M0EwM0RERDdGNkZBNTZGQUYzRDhGCi06MTBEMTUwMDBBQjZFRUYyRjdCQzUwRUVCQjhBQjNEODNFRjg2MkJFQUIyCi06MTBEMTYwMDA3NjVBRkE2OEUxQTU3MDM5NkY4QjgzNkJBQ0M5QThBQUFGCi06MTBEMTcwMDA5RjU2RDUwRDJFRTcxRDcxNzBEREU4NTJCNzBGMzRGNkJFCi06MTBEMTgwMDAwQ0Q3Q0Q4NUM2NkY4NDRCQjRCQjc1RTRENUI1RDNDRTczCi06MTBEMTkwMDA2MzRBQTVCMTE3QkNCM0Y2Nzc0Q0JCQkE3MUVGQUFGRUQwCi06MTBEMUEwMDBFNjc2RjcyQ0Q1N0UyNzg4RkM3RUIzRTRCQjI2ODUzRTQ5Ci06MTBEMUIwMDA2N0MyMkJCMDE3QUQxNkI0N0JCNUZDQjI5REVCQTdFQkU1Ci06MTBEMUMwMDBDMTlFQTM0RjdGQTJFRjdBRTgzNzA2RDYxRDJEMUI3NkFFCi06MTBEMUQwMDBGRUYxNEU5MDJGQzc5RTFEOTgwRTcyM0QxM0Y0MUNFMjc3Ci06MTBEMUUwMDA5M0Y5MTVGNkQ0QjhEMEFGMzA5NUFGNTNBQTRGOUE0MTAyCi06MTBEMUYwMDA1RUVDRDk0MUZCMjUzMUI4RTJFREE3RDQxQUI2QUZCMDQ5Ci06MTBEMjAwMDA5MTE4QUU2NzYxMkZBNTEwOUJDNEY2RTNDQ0RFRTlFRDYzCi06MTBEMjEwMDAzQkRBRjExQkVEMENFRTU5NEJDNzkyMEZFODNBN0NERTdFCi06MTBEMjIwMDA2MDJCNTM2MDdGQjY0NTQyN0I2MDU2ODU0Rjk3NDhGOTI3Ci06MTBEMjMwMDA2Mzc0OEI4NDdFQTM1OTBGRkM2MDM4Qzg5NTUxQTczRDU5Ci06MTBEMjQwMDBGQkEyRjRGREFDOTBERDBCOUZBREVCMjBCRTEwRTVBQjc3Ci06MTBEMjUwMDA3NEREQTJFMjFGRDFFNzEzODdBOUZEQzNDQjhCODBERjZBCi06MTBEMjYwMDBBQzNFMEZFQzM3QUEwMDIyM0FDRTA1N0Q0M0IxMERFNDY3Ci06MTBEMjcwMDBFNkY3QUQzRTkwOUI1NTUzN0Q2RkUxN0NGRjQxQUQxMkNCCi06MTBEMjgwMDBEQTZFMEU5QjNBNzlBMTZEOTJDMTQzRUQ4Q0FBQkIzRDNCCi06MTBEMjkwMDAyM0MxRUVBOTBBOUI3REY4MzQxMUM1NDJFNzUxNDVFRDQzCi06MTBEMkEwMDAzMTc4QTYxQjg4NjI4NkE3ODU5OEUwNTlCQTgyRDk1RjMzCi06MTBEMkIwMDA0OTIzRkQ4NjJBRkFGREFBRjY5RkZFMDVGQUNENTMyMkUwCi06MTBEMkMwMDA4Nzk4M0QxOUMyNzk1N0I1QkZGNjU3QjBEN0U2RjhGQzM1Ci06MTBEMkQwMDAwNjkwMTc4Mzc2MTg5ODREQ0FGOTYxNzA1ODVEMDY3OUUzCi06MTBEMkUwMDAxMDVGMkU4RUE4Q0JDMzhGQTlDQjdGNEE2MUY4M0QyMDVCCi06MTBEMkYwMDA4NTA2MDE3RDBFNTAwNTA3RkJFMkUwNkUyM0VBOEJDMzM1Ci06MTBEMzAwMDAwNzhENDg5Rjg1RTcyRDVCQzFGRjM0NzZBMTE1RTVGQUFGCi06MTBEMzEwMDBGOTlGOTlEMTFGNzU0MDBFM0YwQkU1RTBCMzA5QjhBRkY3Ci06MTBEMzIwMDAzRUY0RjY4MTUyODk5NjE3RkMyMjUxODZGQTE3QkZENDMzCi06MTBEMzMwMDAyMTlFNjEzQTdBRkE3RUUxQjMwM0I2QUVBMUVGMTcwRUYxCi06MTBEMzQwMDAwRjk3REFFOEZCRTcwNzEyRDIwMUY1NEE2ODA4Q0NFRjNECi06MTBEMzUwMDBGOUFGNzQzODdFNkNBNzMxQjQ4REYyQzNGOUZEM0Y3RDBGCi06MTBEMzYwMDBGNjQxRkFGREYzM0IzMzUzMjQ0QTk3NkI0MTFGRDA3NkM1Ci06MTBEMzcwMDBBMzlGMzI1OTYwOUYzMUZBRkNBRTNFMjAyRjE2RUUzMDRCCi06MTBEMzgwMDBBQUU2QjUzNTQ1RTJGQjE5NEYxMkYwNUI2RkZFQzQ1M0I4Ci06MTBEMzkwMDBBQjdGOEFGRDBCQ0Y5RTQ0N0UzQkEwMEZDQTE2OThGRjQxCi06MTBEM0EwMDA2QUM2NUZEQUY2M0I1MkQ4N0ExMjcwNDBCRjNDNEE5Rjk5Ci06MTBEM0IwMDBDQjFGNTlFRTAxM0Y1QUZGRjU2QUZDMEUwOEE5Q0I2MTVECi06MTBEM0MwMDAwRUQ3NEMxMkY3M0UwRkM2Q0I1RkU1MDIzQjc1MkI0MUUzCi06MTBEM0QwMDA3QkE2RjBFQ0JCNzdFNjgxMUQ2RDY0RjY4MzE2OEVGREFGCi06MTBEM0UwMDAxQzhFOUZGRDhDOEVDM0U0ODM4RUQ5Q0Y3NEM2NzQzRDkyCi06MTBEM0YwMDAyRUU0N0NGQ0EyQzRFQzU3RkFCNzI0OTNGMkVENDI1MDIxCi06MTBENDAwMDBGQ0Y5NURFRjE3NkFFMDEwRTNERkNCQzc3N0YwN0Q3NUJECi06MTBENDEwMDBFQzc1MUREMkUzRENGMkVBRTFBN0ZCNzU4N0U3Q0NGMkZECi06MTBENDIwMDA4NjAxMTVGQUFFRjJEQ0Y1OEI4RUJBNjlCRjlBM0Q0RUQ1Ci06MTBENDMwMDBEQzI3OEFGNzM1M0I1RjRFQkI4QkJFQkZCMDQzRjE4MjIyCi06MTBENDQwMDBFOTVBMzNGRDk5NDc0NjQzQkI5REJBMzBDMDBCRjUzRUMwCi06MTBENDUwMDAzQURGMEJFMTU3OTJBMEREREM0REY2NjFCQTM4M0FDQ0U5Ci06MTBENDYwMDA1QjdGRUY4MDhBMzg3OUY4NURENzgzNThCRjM1N0M3RjQyCi06MTBENDcwMDBGQkMyQzg4RUYxOTlDMERGRUIyNTJGMzQ1QjE4QkU2RDVGCi06MTBENDgwMDBDQTJENjBBQjZDRDI3OUZCRDFGQTUyODVGODc1QzM3MEE2Ci06MTBENDkwMDBFQjNEMTU5RTM1N0I5RTNCOUE0MUVCRUIwRjhFMjg4NTJECi06MTBENEEwMDA3OUFEOTFGRDM3MEYwNkZFREZBMjQ3M0Y5NjE2MkY5RkZECi06MTBENEIwMDA3MDdBRDNGRTExOTlGNjVGNzNCQkI1M0E2NEM1NzE4RjZDCi06MTBENEMwMDA0MEY5NzBFMTM2MURGOEQ5OTNDRTUyRjlDNERFOUY5NDJECi06MTBENEQwMDBFOTlBM0NEQkJFNzIwOEY4MTMwRkU4QUQyREMwRTcwN0YwCi06MTBENEUwMDAxMjE5MUQ4MkJCNzUyOEU3NDk4NENENjMzNEY3MUIyRkMxCi06MTBENEYwMDBGQzUzOUI0MUExQ0ZCMzY3NTcyNDk1QjE3NTg0RjIwNUM2Ci06MTBENTAwMDA4NEIyODNDRUFGRkFBOUMxQjhFRUU2QUQ1N0FGMTNEMTVFCi06MTBENTEwMDA0RUMwM0IzRkE0QUVEN0YyNDc0QUFBNTg1N0E0MzA5RTBDCi06MTBENTIwMDBDRkI0RUQ1MjI3MDYwREIwQUU2QTk2NTI3OTFDNjdGRjU0Ci06MTBENTMwMDBENDlDNkUzNTgwRERBNEZEMEU1ODgwNDREMDU1ODdGQzA4Ci06MTBENTQwMDA0OTNDMzg1RjMzOUIyRjM1NTk0RDc0QkVFN0UwNUZDQ0MzCi06MTBENTUwMDBFRjJEQzFCRTdDODE4NDUzMjQwQjA3OTIwQTBGQzVFN0NGCi06MTBENTYwMDBDMkM5QTQxMjlFMDdBNEM4MjMzQTJFQ0ZEMEZGQkUzQjQ3Ci06MTBENTcwMDAwMUU1RDkwNTVCRjQ5OUZGMDRGRURCOTVFRDBERDJBQTE4Ci06MTBENTgwMDAwQ0VFOTdCQkUwODkyNEE1RDBFNzY1NTgxN0MwN0YzNjFECi06MTBENTkwMDA1NjVFRDA0RUU1Mzk1RERGRTcyRjFBNTBBRTM3ODY1RjE1Ci06MTBENUEwMDA0RTAyN0E1RDc4RDYyQ0NCOTQyRUU3RjdBNDk2ODMzRjczCi06MTBENUIwMDBFNzQyRjgzNzQ5MzBBRjczRTFENDcyRjBDQkY1MjY2RjBDCi06MTBENUMwMDBCNDcyNEFFOEYzRjdFMTlGQTNBODlEOTZFQTFCOTYwQTc2Ci06MTBENUQwMDBGQjlERTY1NDMwQzY0OTdBNkE0MzcxNDMwRkVCNUZGNDEyCi06MTBENUUwMDA3MzE4MUE4QTNEMjAzN0JFNkZGNUMyRkFCQzIxRDVDMzI1Ci06MTBENUYwMDBGNDg2QzRDNjgzM0YxRkFERkZFNDU4RUEzNkEwRkZCMUVFCi06MTBENjAwMDA0MzA1QzlBMEU3M0YyMTlFNjQ5MEJGQjczOUZERTVBOTU2Ci06MTBENjEwMDBCNEJEQUJCQ0MzQTcwM0ZGREYwNEUyNkRBMjdEM0VEMDY3Ci06MTBENjIwMDA3OUVGQjM1MTNDQ0YyNjU0RUZDMEIzMjQ2MDQwN0Y0OTFCCi06MTBENjMwMDBCMzEzRTE5QUE1OTA4ODQyRjk3NDE2RThDNTIxNTg0NkJCCi06MTBENjQwMDAzQ0NGREEyNDg1OUEyODFDQjNEN0FBRTczOUI3Q0REOEJFCi06MTBENjUwMDA0NTVGRkFERjdDNDIwNTIzMkNBMDRENzFFREU4RjhGMzFECi06MTBENjYwMDA0MUZGNTFGQzJEMzA5MTQ4MDIxRDc3QzE3Njc1QkY4NTcxCi06MTBENjcwMDAyNDgyRjBENEVDRkFEQUQ4MTMxRUZGQzJGMTc4OUJEM0RGCi06MTBENjgwMDA3NzU3QUE0QTdFRTk1MTdFMkQyNEZFRUJFMUJCMEJCOTA4Ci06MTBENjkwMDA5RTlENjMzQzg0NzBENDNGRjBDMDgwRDlENDZFQjhCQ0VBCi06MTBENkEwMDBGNEMxMDFCMzUzQzEwRkM4RkE5MUY1MTJGMkRGQzIwQUY3Ci06MTBENkIwMDAxMkM5QTY3MDJENkM5NzIyODNDMTBFNzg5M0QxNDc4QzI2Ci06MTBENkMwMDA0RkI2QjA3Njc3NzIzQjY1MEVDNTA3RThGREQxQkJBNEI3Ci06MTBENkQwMDA2MDIyRERDN0NDMzFEMTJEMThDODBGM0UyRkE4NEZBNjMwCi06MTBENkUwMDBFNTZBRDI4QUYzQTkyNTUxODRFMzdFNEUzRjg4NDgwMTNBCi06MTBENkYwMDAzRUZGRjIyNkEzREJFOEVBQUQzQTAwRUFEOEExNTI4QzVECi06MTBENzAwMDBDQjdENEFCQzQ4M0Y2QTRGMTA3MzRBNzdGRTAwN0NGQkQyCi06MTBENzEwMDBFMkYwNTNCRDQ5NUQyNkRCRTNDQUY5ODA0RjVBOEVDMzYwCi06MTBENzIwMDA3M0REREVBRjhEQkUxRUYwRkI0NEE3M0UwOTBEOTgzNEJECi06MTBENzMwMDA5ODc0QjM1N0RGRTNGODdGRTJCNkI5NkU1OEZGOEY4MjczCi06MTBENzQwMDBGRDk2QzEwNzE4MDlGMjkyMDg3RjQ0QzQ0NEM3QjcwQzdDCi06MTBENzUwMDAyNzJBRkYwNEI1OEJCMERDRjZGODZCMzdBRENGMjI2NDE3Ci06MTBENzYwMDA5RDNFODA3RUZFNTkzQUZGNTEwODQ5N0RFNjBDQUMwNzhDCi06MTBENzcwMDBCQUNFOTI3RDM5MEFDQTAxNUYwMUVFNTM5NzMyN0EzQ0U0Ci06MTBENzgwMDAzOUFDNjE0MDQzMEZGQjUzMDFGRjNBMjkxQzkxNDExRTA0Ci06MTBENzkwMDBFQzY3RkEzREIxMjRBNjBGQzRBREFGNUY3MkY5OTY3Qzc5Ci06MTBEN0EwMDAzODdBMzQxM0Y4RTYzOTA5RkRFOTFCMjREMjJDNTEzQ0IwCi06MTBEN0IwMDBCQjI4NTk0MDBGNkM5MERFM0YwQTdBNjNDMzREMUVEMkRFCi06MTBEN0MwMDA0NEVCNEJGNjRFNUFGNDBBRUU3MTJENUU4ODRGRDRFRUMwCi06MTBEN0QwMDAyREQzRDU1QTcxRkVDQ0NFNEM2OEQ4MkFEM0ZBRjQ3QjFGCi06MTBEN0UwMDAwQTg3QzFGQUEwRjNCRTY3MzI3REZGMDJBN0I3REJDQTgyCi06MTBEN0YwMDBGOEMxQjUyMjk4QjcxOEZDQTk4N0ZEOEI1RTgxNzUzREVECi06MTBEODAwMDBEODgyN0VBQjc0OEFBQkM0MTQ3Q0I2ODBGREU4MjI4RENFCi06MTBEODEwMDAxMkI0NUJFNTk0OTAxRUFCQUFDOEI0NUYxNjIxRDcyODVBCi06MTBEODIwMDBDOTI5RUM3OTkyM0UyNTg1MzQ4MzFGMzY1REExRjYyOEZGCi06MTBEODMwMDA3QkRGMENERjc5MjI4OUMxRTU5NDc1Rjc0QzAyN0I3ODk4Ci06MTBEODQwMDAxODJCQTcyQzkzN0NEQjkwRjkxRjQzN0NBNTFCNDkyNTQzCi06MTBEODUwMDBDQzFCREU4M0ZENENDMUYwRURDMUZBMTBDMjlEM0VCNjdCCi06MTBEODYwMDBBMTE4RTA0OEVGQzM5RTBFNDMyNDBCQzYzOTJFRjhBNDNFCi06MTBEODcwMDBERDJEODM5QzVFQzJGNUVEOTIzRDY1RTkyOUI0RkZGMTkzCi06MTBEODgwMDAwQjI2MDVFNEU3NzE5N0IwRkYyMjU2QjBGRjQ4REY0MjUwCi06MTBEODkwMDBENjlFRUJCNTI1QzU2M0QzODFFRjFEMzlFQTc2OTdGNUEyCi06MTBEOEEwMDBCRUU0RTFBMDFGNEVFODMwNEVGMzk5RDU5NzZDQTdFRDhBCi06MTBEOEIwMDBBRTM1QjA3OTY4RTk3Rjk2RDNCNUZFOEE0NDQyNzFGQkY0Ci06MTBEOEMwMDBGREZBNjk5RkEzNUQ1RDdGNDU1MUJEQkZCMERDNDQ0MjU5Ci06MTBEOEQwMDA3MUZCRkQ5QUVBQzNFM0ExNUQyREU5NTgwNUZDNTgxQkQ1Ci06MTBEOEUwMDA0RTIwQTFCOEY1NzFBREE1RTdFRjhBNzU1MTdGNDU0Nzg4Ci06MTBEOEYwMDA4MkMzOTFFREIzQzAyRjc5NUMxRjVCMzUwN0Y4RjBBMEIwCi06MTBEOTAwMDA4NEZFQTM3QUJBOEYwRUM2QzM3NTI1OTUwNDUzN0I4MjE1Ci06MTBEOTEwMDAzMzRERkQ5RUNFNDc1NURFRjcwNUI2MjMyM0EzNDlGMEQwCi06MTBEOTIwMDA5RDRCQjY2ODkyOURDRjBGREEwOTdENzczOTI0MDdGNUI0Ci06MTBEOTMwMDA0MzMxMkVDOEY0MUVGODc1QUNDQ0FFOUQwNEY0NTU2MjhDCi06MTBEOTQwMDA0OTkzMTNCQkM2MTVGNTMwNUU0QURDM0MyRjREMzM5MDJFCi06MTBEOTUwMDAwOEQyMjU4NkRGMDVCQzA1RkIxM0IyQjFGRDYzODMwNzQyCi06MTBEOTYwMDBGNDdGRkIyMUM0OUJFMDk3NzhGQzA1RTNFMzQ0NEQxRDY1Ci06MTBEOTcwMDAxMTk5Q0E4QTdDODc2RDRERDEwMENBN0E4Nzg1NUM0ODI3Ci06MTBEOTgwMDA1OTAzN0VDOTM0OURBQzkyMTMwOTI1OUQ3MjAzQzVENEY5Ci06MTBEOTkwMDAxMzEwQjU0MjM5OTNCQUE2NjI0QzdDOTlCNUVGRUFFRjAxCi06MTBEOUEwMDA5ODAwN0VDRjkyMjJENkJGQzhFMUZDQUYxNTdERTE3RDA1Ci06MTBEOUIwMDAyQjkzQkI0QTJDQzc5RjE4NTczNjY5Q0E1NjVBMUUxQzUwCi06MTBEOUMwMDA1N0I2NjlFQTFEOUE3QTk3QTY5Q0M1REE1RjQ4OENFNDM3Ci06MTBEOUQwMDBFOEJDNTRERjNCREMxMzE0MkEyRjJGQjgyMzMzRTgwRUE2Ci06MTBEOUUwMDA5NkFDNkRDQTlDNTA0MUU1NTg2RDA5RDNDNzc1RUQ5MjUwCi06MTBEOUYwMDAxNzdENzUxQzdGNzU1RTY2Mjc1QUJENTFDM0FDMjJDMDZBCi06MTBEQTAwMDA0M0M3NTE5MDJCMzVGQjI0OUI0NEQ3ODEzNUJDMjc4MkRCCi06MTBEQTEwMDA2NUU4RTc4OUVCMTc5NkIwNUY0REY4N0RFQ0Q3RUJGODNBCi06MTBEQTIwMDA4NTMyQUVGMzM1ODVBNzU4QkJGMDg3QThGNzU3MzU1NzMxCi06MTBEQTMwMDA2MTNDNURDNDhCNzVDNEVGQ0I5NEJBRTJDNTQyQkU1RTU3Ci06MTBEQTQwMDA3MkZCNUU5NjE5NUZEQkUyRjc0RkY1MzA2RTlDOUY0NkU2Ci06MTBEQTUwMDBCNDdGNjc3MEZCMUZDMEFDNDg1OEYyNzEyM0Q4QUY3RjBBCi06MTBEQTYwMDBBQUZENzAwNEQ4NzNFRjQwOTM1MTIwQUY0MzAzRTBCQjhECi06MTBEQTcwMDAxQjQ5NjAwMEU4QzlFRkQ3RjYzQjI0RDM3NkVGRTlBMzUyCi06MTBEQTgwMDA5QjIxMjY3NjlGQTMxOEYxRjc1RTYyMzQ1QkEyMzI2NjczCi06MTBEQTkwMDA2OURCQjVBQ0VDOEM2RTA2N0NGRUI2NkQwQzJCNjc0NzczCi06MTBEQUEwMDBCMzY1NUE1RUU2OThDN0NBRkRBMjlCQTFCQ0JENkRGMkU0Ci06MTBEQUIwMDAwNDg1RTJGQkJEQzFEMTZDMURFRDlGMUY5QzMyQTE4MjhDCi06MTBEQUMwMDBENjNGNkRFQjc5M0RENzNBOTgxQzExRjBGRDU3QkVBRkFDCi06MTBEQUQwMDBEQTAxRjNBOTYxRkE2NzMzQjUzNzRENTQ1RUNFNTg3MDU5Ci06MTBEQUUwMDA2RUY3RDMxNDBGMzM3RTk4ODA3MkVDRTkwQjUzMjYzMDE3Ci06MTBEQUYwMDA3QjNDRTg1NzRBQzFERkNBRkU1MDNGQTI5QzU3RDAzRTRDCi06MTBEQjAwMDA3MTgzNEU0Q0U5QTI0NzYyNEU4NzA3RjVDN0MwODYzRDM4Ci06MTBEQjEwMDA2MDY3QTRDRjI4NDJGREUxNERGNUZEMEVCRTJCOUVGN0I4Ci06MTBEQjIwMDA2N0IwRTdFRjFDMzYyNkI3NzUzMkM2OUZEMzFGNEM0NDRCCi06MTBEQjMwMDA3QkVDNTEzMzlCMEY1RDM3NDg1RjJCQTdDNzBBMDdGMzc4Ci06MTBEQjQwMDA0QkFGNzAzMDNGRUFGNEQ0NzEzOENFREI5MjZGODM4OUVCCi06MTBEQjUwMDBFMkZENkQzRDA5OUE0MUNFQ0VCN0EwRkQ3Q0Q3NTYyQTk1Ci06MTBEQjYwMDAzNzkyQzE4RkNGRTA2RTdCQ0MxRDgyRjhGOTVEMTJGMTQ4Ci06MTBEQjcwMDA4MzVDMTFGMkEzQ0RFRTczQTdDNEVENDNEQThBNjlEOUIxCi06MTBEQjgwMDBEQUI1RUY2QzlCRTQ3MzVCMUNGMDRDOTMyMUNFMjJFNDdFCi06MTBEQjkwMDA1MjVCMUVFQjI3RjQ1MTdBMTNGQjRFRkFBMzAzQjZDMTc2Ci06MTBEQkEwMDAzQzEyMTRFNjJGOUEzM0FENjA1QjIzREEwMzkzN0ZFN0QwCi06MTBEQkIwMDAwMDdCRDlFNzczODNERkUxRjRGQzdDMTlGQzQ4ODIzRUVCCi06MTBEQkMwMDBFN0YzN0Q5QkEwRkU0RUVFODcxNzc0MTJGNEZDMUQ5RkI5Ci06MTBEQkQwMDBGNzJDMURCNTI3RTg3QzhGM0IwMzM4MUVCNTJGODY3MEM4Ci06MTBEQkUwMDA3RjE1REExN0JGMDNERDFFODc1RkEyNDQ0N0MwRkJGRjI2Ci06MTBEQkYwMDA4RkYwNzQwOEU4RkVBRkUyQTk3NjI5OTUxN0YyNTVDOEIwCi06MTBEQzAwMDAwQjhFQkY3NTUyNDQ5RkNFRTQwNUVFOUZFMTNERTg5RDJCCi06MTBEQzEwMDBDREE5ODEzRkMwRjhFMkZCMzMxRUFDNDU3QjUyQzA5NUQ1Ci06MTBEQzIwMDA3MEZGMEI5NTc3OTBFRUVCNEM2QkVGRkQxOUU4MTU2N0U1Ci06MTBEQzMwMDA5NzdBODVERjkxN0ZFN0JEQjc0RDE4Njc3OENGMTA0NjlCCi06MTBEQzQwMDBCOUY5MUVEREZGMzQ4MjdDRTE3MUYyRDIxRjJFM0MwRTQ5Ci06MTBEQzUwMDBGQjNGMzFFRTM4QTcwRUM3NUIyREY5REMzMEJGRDU5NDAyCi06MTBEQzYwMDBFRTI2ODA3RjkyMDFFRDdGQTE1N0RCRUNBMTBEOTBBN0ZFCi06MTBEQzcwMDBEMDc2NUIxNkU2Mjk1QzI2MkMxRjI0QjgzNDAxREI1REM4Ci06MTBEQzgwMDAyQjlGMjJFMEM3OEM4REIyNjE5QzlBRjIwOUQ2Qjc0RENBCi06MTBEQzkwMDAyRkMwN0MxMUNBMEY0MTMzRDQ1MzdFODJCQ0JBQjY2MjA2Ci06MTBEQ0EwMDAzQTIxMTg2RkZBNDBBQzg3RkQzMUVFNkJBNzlCNzBCQzMwCi06MTBEQ0IwMDAxRUY4ODRGOTg1RkJCMzdDODhCNjNDQ0U4N0YzRjM5MURDCi06MTBEQ0MwMDAwRkQzOUE5OEZGOTEyOEJFMjE5M0UyRjQ3QzlFOTNGOTlBCi06MTBEQ0QwMDA3RDEyNEFBMkNGRkQyRkUwRjlCNTY2QjQ2NzQxQzc2MjU1Ci06MTBEQ0UwMDAwQ0E3MzUxREM3QTNGNEI3Mzg5OTFGMDBGOTZDRjYyM0FDCi06MTBEQ0YwMDA4OTNDRkZDQzVCMEE3ODdEMjg5MUYxRTUyNjMzOEIyRjk4Ci06MTBERDAwMDA2REEyRjYzM0NBNDVDRUJGMjJFRjJEQzBFREJDNjhCNTdCCi06MTBERDEwMDA5QzA0RjY4MkNCRDlFOTVGRjBDMTdFMUZGRERCQjQ3RUE3Ci06MTBERDIwMDA2NjU0N0ExRkY2NkIzMzgzQkE4ODExRjY1RjJERTM3QzU1Ci06MTBERDMwMDBEMUI4RkQwQkZDNDE3Q0VFMUUyRTU3Qzk3QTgyN0VCRjA2Ci06MTBERDQwMDA3QkEwNUYxMjhDNkY0OTgyNzhFNDNERDAxRkZDQUJDQjg3Ci06MTBERDUwMDBDNkE5RTI2RTAzOUQ2QzdEMEJGOEI0NzI3RkEwOTNDOUQ3Ci06MTBERDYwMDA0OTBBQjcyRkZFM0I2MjdDRUQ3ODc0RkYzOUM4RTk0NDVECi06MTBERDcwMDAzQzQ3OTI2MTFGRDFBODQzM0E2QUUxOENBRTY3N0VFQUM0Ci06MTBERDgwMDBFOEZBNUNFNDNCMzE1RTZGNzBGRTU5MTdCQjU3QTI3QTJDCi06MTBERDkwMDA3MEVFNThCNjJGMTdGQjlFMzk3Q0RGNEM5NkE5Rjc3NUFECi06MTBEREEwMDBFMDU3RTkyQ0VCQkE5N0I1RkI0NDg4QTdBQkRCMzNCQjU0Ci06MTBEREIwMDAyNUExMjg2NkMwMzg4QjQ3NTJDMTJGRjBENTFCMUUyNkRGCi06MTBEREMwMDA3RDQ3QkMwOUJERjdBNDk5Q0FEMzE0RDg3RTRCQzhCNzA4Ci06MTBEREQwMDBFQjFGNDg0MDNERTYzMDg0MDYwMDVGRERFREY0NjBCQjlDCi06MTBEREUwMDA4RDkwRDc4MjdBOTVFRDk3M0YzRDJFRkMxQ0VBN0Q3MjhGCi06MTBEREYwMDBCRDI1QjYwNUYwNTU2RjYxRUJFOEQyQzE0NDVDMDdBNEMwCi06MTBERTAwMDA2Rjc0MDZFNDg1NUQzRTYwMjRDMEJGNzU1MkI0MDBENkQxCi06MTBERTEwMDBGNTI1Qzk1Nzg1RUQxQTEzM0NCMDlFM0U5MDNCMTBERkE3Ci06MTBERTIwMDBGNTgwNDEwQTU3N0RGMEVGOTg4RjU0QkY0RkJENkZCRTBDCi06MTBERTMwMDA0NEZGQUJBNkZDN0U0OThFOTZDMjM4NDIxRUMwRkE0NzBDCi06MTBERTQwMDBCQkE4OUFDNTY5RUE2NDEyODQ3REQ1QjVGMkNDRjlBODVECi06MTBERTUwMDBGRkE3Njc5MDZERjhGRUZEMDJEODQ3MDkzOTRGREIxRDFCCi06MTBERTYwMDA5MTUyMThEQkMwN0FBOUUxRjhBQjkzNEY2MUJCMUFDODk1Ci06MTBERTcwMDAyQjAyM0NDMkZFMEFGQzYxNTAxOUU3QzdBRDVCN0IxRTVBCi06MTBERTgwMDBGMzlBRUFGNkFBRTk1Q0QzQzUwN0QyRDcxMkY0OEJFMzdBCi06MTBERTkwMDAwQjVDQzc0MUE0MUJEQUQ5QjBFRTJCNTg5QzM5OTE5NzgzCi06MTBERUEwMDAxMzJBM0IzMENGQTk5RUZCM0I5Qzg3QTNFMzQxOUUyNEQyCi06MTBERUIwMDA5Njg0Qzk0Q0ZBQUMzRkNCRUM4Q0QxRUQ1QjVGODY3RDkwCi06MTBERUMwMDBCNEJEQjIyMzFCRDhCRjlFRkIwMzA1OUQwNTlDQTNEQUZFCi06MTBERUQwMDAxRjQzRkY4NkIwNEZFMkY2OTkwMzI2QUJGQzBDMkJCMDM0Ci06MTBERUUwMDAxRkVDNUJFMTdCNTE3OEU1MDZGMjMzQkRCNjhFRUJCNUY2Ci06MTBERUYwMDAwNEQ4MDA4M0ZFNkJFRDhGRkEwRkY0MTNDODI1QjFFRjQxCi06MTBERjAwMDAwNTM5MDVGMkUxMzM2N0Y5NEY0MThFQUQ0RDJCREZDNjgwCi06MTBERjEwMDBFNDE5RTUyRkIwRTc2MUIzMzRBQTc3M0Y5RUMwOEY2ODVDCi06MTBERjIwMDAwN0ZCREY2RkYyRDNGRDkyRjNBQkMzQzBFNTJFNjE3RTNBCi06MTBERjMwMDBCOUM1QUYzOTg1NUYwRUUzNkY4QjI1NEYzQUYwRUIxOTBBCi06MTBERjQwMDA1RDAwRkQ2RkYzNDgxMEZENDJGM0MxRUY0NTlGMzU3QzQ2Ci06MTBERjUwMDA5RENGRTVGRUE0QjlEQzhGMDQ3RURERjgzODIxRjg1N0FCCi06MTBERjYwMDBFM0NCMEIwOEUzNUZCMkMzRDg5NTNGMDM3RTlGMEExMjUxCi06MTBERjcwMDA0OUE0RTNENTgyNUYwQTlFNjE3NUJGM0ExMjYzN0NCRkY0Ci06MTBERjgwMDBFRjZCQTMyQTBFRDlDNkU2N0QwRkE3QkZCRDIyQTQwMzVGCi06MTBERjkwMDBGOUIwQzFDQ0ZDNTE0MjZFOEM1RUM2RkM1NkM5QzM3QzQ0Ci06MTBERkEwMDA3OTJCODFDRjVGRDNBMzNGRTM3RjczQkEwOTNDRERFNkQyCi06MTBERkIwMDAyQ0RGMDVGOEI3QzAzRTBEREFBRDM0QTJCQzNDNERGNTAwCi06MTBERkMwMDBGMDFFRUU0Nzk5MENGQkNGRTU4MTAxOTBGRjREMTQ1QkVECi06MTBERkQwMDA0RUZDRkU1NDNDRDcxQzMwNTcwM0ZGRkM4OUVCMzFGMTVCCi06MTBERkUwMDBGRTMxQTc5RUY5RTE1NzMwRkU4RDM1MjZBMEJENERDNTA3Ci06MTBERkYwMDBDNjEwRTBBRkQyN0NBMTBGQzkxMEYwNkJCREFGNjc3RTM5Ci06MTBFMDAwMDBFMEJBREJBRDAxMTgyRjJBMzMzOTczOEVDQkIzNzM0RUQwCi06MTBFMDEwMDA5NjdGMjdDQTlERkIzQkNFM0YyMkJFMDc3RTlFNzhGRkEwCi06MTBFMDIwMDBGQUM3OURFRDFGRTM3NjI0QzFGOUFFOUJDRkYzQjczQjUyCi06MTBFMDMwMDBGOTU4NDY3OTk0NTBFNDQ3Qjk3QkFENUM4RUYyMjhGNkU2Ci06MTBFMDQwMDA5MUQ1MDM3OEE5M0M1RjMzMUZFNkYxQzkzNDBCODEzOEMxCi06MTBFMDUwMDBEQjZDRUVFRjk1RDJFQzA4ODdGMEVGN0U1QkZDQUI3MkU5Ci06MTBFMDYwMDBDRDAwOTQ5M0EyM0RDNDcyQTFCRkQ2NEY3QzgwQ0JCMUFBCi06MTBFMDcwMDAwMzg0QzExQjZDMzYzMkJGM0M4N0ZGQzBEOTgxMjFFMENECi06MTBFMDgwMDA2MzZBRDcwNjQxQ0VDNUY2OTg5OUJFQTM3NjI4QzhENzRECi06MTBFMDkwMDAwMzdCRkI4NzYwM0VFRkVCOTlCRDEwQTRGMjk3RjUwRjcxCi06MTBFMEEwMDA2QzAwM0ZDODgxNUYzQUJEOTBENzUzQkZFMERDMTBCMDMxCi06MTBFMEIwMDAxRjBGOUNGREQ5QUY3RTBCRUYwRjFBQkRCMERGM0JDMDI5Ci06MTBFMEMwMDBGREYyMzU4NjQ4MDFEQUNCM0M5RkIxMjYyOTUyMDA3RTBECi06MTBFMEQwMDA5RjE3MzlCRDZBMkNCNDRDREY1Nzk4MDJEOTY5MjNCQTBGCi06MTBFMEUwMDBFMjY3RDAwRkRFOUYwQTMxQkJGQzE0NjE3QzEwNUNDQjcxCi06MTBFMEYwMDBFMjlDMTRCRjZFODAyM0I2M0ExREUzNkYzMDJGQTBDMzlECi06MTBFMTAwMDAwNzA3MDcyM0RDRUJGNEJDRkRDM0NDN0UzQkM1Q0JBN0U0Ci06MTBFMTEwMDBGNjE3NjM3RURGNjVCRjAxRjM3MUVCMUY2NUY2RTIyQzM2Ci06MTBFMTIwMDBEOUIzNjUyOUM4Q0E5NzEyRDBDRjM4QTdFRDA0QzY0MzIyCi06MTBFMTMwMDBFQTFGOTkzNzExRUFFQjE3MkNGQjFFRjk4NjM4MDFFODI0Ci06MTBFMTQwMDA5NTc4RkZGNjI1MTJDQkMxN0Q3MDc1N0UzODQyQkY3Qjc2Ci06MTBFMTUwMDBBOTdEODA5Nzg1RkI1QzE4NUNBQUUzNzk5RkE3Mjk3RTNGCi06MTBFMTYwMDAwMUVFRDg0MTNERTJGRjZBQzc0Nzg3NjEyOUQzNkZFOEQ2Ci06MTBFMTcwMDAwRjhGOEZDN0EwM0U1MEM3NjdCRUFEN0M0OTFGMkQ3ODVCCi06MTBFMTgwMDA4MDdFM0Y5ODEyQjgzNUNEQzlDNDFERDBCREZFMjUzNzVECi06MTBFMTkwMDBDQUJCMEYxRUZFMjIwN0VEODk1NjE2NEYzOEFERjdDRENDCi06MTBFMUEwMDA4MDc1NjJBRjg4MTg2NkM2RDk1RkYzRDJGOEJFQzNDODVGCi06MTBFMUIwMDBFRDQ2MkEwN0UzRDdCREE4MkYyRDU3QUYzM0YxOUM5QjFGCi06MTBFMUMwMDBDNkVDQzk0NDFFRkZFRjVFMkZGMjVFQTcxODQxN0YzMkY2Ci06MTBFMUQwMDA5NzEyOENFQkMxNzE3Mzc5NUM2RUY0RDlEODIxQzhBMzA2Ci06MTBFMUUwMDBBQTA5MTc2M0RDMkY3NzU5MDRENzI1QzU3NzA0RUNGRkZDCi06MTBFMUYwMDBEMzFCMTI5OTNDQTFEMzg0NzFFNjhFMjQ2OEI3Q0VENTg3Ci06MTBFMjAwMDBCMTdDODZCOTQ2NkEwNzMzM0Q4RUVEQ0Y2QzQ4NDczQ0ZBCi06MTBFMjEwMDA5NEFFNjBGNjVGRUMzOTA5RTVBMjg4NEY1NjExRDZGRjNGCi06MTBFMjIwMDA4NUU2Rjc4MzNBREFCRTZBODc1NDRDNDUyQkE5NkEyRUY1Ci06MTBFMjMwMDBDMzdDODcwNTlCRjI5MEZFQTNCOUZDOUQ2NUY0MTU2QzI5Ci06MTBFMjQwMDAwMDdFN0IyMTExRjk4RDdFMEZFREVEMUFDOEU5MUE4NjRCCi06MTBFMjUwMDA3MkM5MDBGQUIwN0E4NzQ0RDY5MEY4NzhBQTg2MEY0MjNECi06MTBFMjYwMDBFQTc4Q0NFODMwOTNERkEwMzc0ODlDOUQyNkY0MTBFODhDCi06MTBFMjcwMDAwQkEyQjExRkQ1N0MxMUU0NzEyQTQ2OUZDNzAxQUYyM0MxCi06MTBFMjgwMDBCQUU0M0Y2MkVDMUJGNDIwQjVBM0RCNjAxRDk3OTZCM0E0Ci06MTBFMjkwMDBGNTE2REIyMzIxOUU2QjQ5MDM4QjFGNzEzREQ0MDkwRkJCCi06MTBFMkEwMDBENzYzNjc3NDRDNkZDRTM1M0U4NkNGOUQ2OTc5MDhDN0JBCi06MTBFMkIwMDAwMjg4QjM2MERDMjA2NjAwQjlEODFCNUZFQ0VDODUyRkM4Ci06MTBFMkMwMDAwNDNGRkM4Q0NGQTNFNjJDODk1QzQ3QkY1N0IzOEM0NDNBCi06MTBFMkQwMDA2QTg3QjA2N0UyMTBENENCNEMzRjlCOTg3RTg2QTdFNTU3Ci06MTBFMkUwMDAyQUY0QjQ1NjNGNkJGNUIxNTYwRkE3MUI5OEJFMTU3Q0E4Ci06MTBFMkYwMDAxMEVGOTcwNzdCNjRGNEIyOTA4RUY5NUZCMzZDOTBDNzEwCi06MTBFMzAwMDAyN0U4MzIzREQ1NzczMEMzRDk2NTZGRDU5RjM0OTkzQzI2Ci06MTBFMzEwMDA0M0ExRUMyN0Y5NTZGMDJCOTU1NTY2ODFERjlBQ0E2RjE5Ci06MTBFMzIwMDA1ODc3MDkxNDRGNUJFOUZCQ0REQzJFMUY5MUM1RTZFRjUyCi06MTBFMzMwMDBFMkY5M0E3QUM1NEY4QUFENDBBNzBFREM0N0M3OUMwNDg0Ci06MTBFMzQwMDBGN0I1MDJCRjlCMTM2OUJGNjFEMDhGQURDN0NFRkUyNjY0Ci06MTBFMzUwMDBEMjZDODlFQjVGN0VDMDhDRkFFNEYzRkQ4OTk4NUY0MjUyCi06MTBFMzYwMDBGNTQzQUU5RDhFOTdGNjBFQjVDRjY5RjlEMjgxNDRENEIwCi06MTBFMzcwMDBFRjk3QjhCQzc3MDg3RjA1NTk4NUY0RkQxM0E3NzM5MDE0Ci06MTBFMzgwMDA5NDY3ODJERjk3NDgxMzMyNDE0NDBBQkJCMUQ2REU5QkMzCi06MTBFMzkwMDA5RjlFRDdFNzc1RENDRUY4Q0M4ODdBRjY3MzdCRjQzRTg3Ci06MTBFM0EwMDAyODUzNzgzMDFGRjgwRjVDMkVENEVGMUQ1QkZDMjBFNDVGCi06MTBFM0IwMDAwMUY4QUQ1RTg2RDU0MDMxRDgwRDQ2REQ5MkRCQzExRjM4Ci06MTBFM0MwMDAzNDVFQjcyQ0Y2MDA5RDQ3NkRCNjE1RjM4QzJCNzJERkNCCi06MTBFM0QwMDBGREUzNzQ1QUZFNjhBRjlFMTg4MUVFNEY0RjQ5OEU0MEEwCi06MTBFM0UwMDAzN0M1RTdFQTQ5M0ZDRjBGRTk1NUU3RDgxNkVFNTA5NzEyCi06MTBFM0YwMDA2QkMzRUE3MjNEODkzQkU3NDY1MUIwRjREREUyRUI4RjM3Ci06MTBFNDAwMDBDNEYxQzk1NzY5ODk4RTMzODMwOEM4MTQyRkU0NDkxM0FFCi06MTBFNDEwMDBEREREQzk4MTFFRTRBNTc4N0VCMURDN0JGRDExM0RFNjIyCi06MTBFNDIwMDA5OUU5RDM1OTFFOEQwMUVDOUE5OUMwMEYzREY0NkI0RkI5Ci06MTBFNDMwMDA2Mzc2OEREMUQ4NzAxNkYyRDU4RDJGMUFCRDhEQjREN0Q1Ci06MTBFNDQwMDA4OUI0NDAxMkY0QUY5MzYzNDc4MTlFQzZEQzBCNDM0MDBFCi06MTBFNDUwMDAwRjk2RTdGRTAzRTM2NzlGRkY4ODc4MDEzRjlGOUJDQjAyCi06MTBFNDYwMDBEMEJFRjk3QzgzRDkwM0ZCQjJCNjFDMkJGMzU3QkMyNDc2Ci06MTBFNDcwMDA4NTI0NjZCRjRGMUM1MTBBRjE1MjlDMDNBOTVGN0ZEM0NDCi06MTBFNDgwMDA0N0VDNzAwNTMxQzk0ODVGQkE3QjcxODE5Q0YxRTE3RTMwCi06MTBFNDkwMDBFQUNDMjQ4QjZEMDVFRDU3QkQ5RUU5REIxQUQyOTEwNEMxCi06MTBFNEEwMDA3MjYwNEEzQUE3OUY2RTk3QzE0NEZGOTlEN0VDMUJEMDgwCi06MTBFNEIwMDA0OEUxNURFOEI3RTBCOTFBRTU0QkM1MEZGQ0Y1MTAwQzczCi06MTBFNEMwMDAxOTY3RkYwRjRDNjdGMkEwRDYxNDM1OTRDMUY3RkYzMURFCi06MTBFNEQwMDBCQkQyOTlERkU1REYzMkU4OTk3RjRCRDk1NzFDQzlBNDNECi06MTBFNEUwMDA1REU3MkQ5RDg1RkI5Q0NFRjhGMzA2OTZDRjM0RUY4MTNBCi06MTBFNEYwMDAyQTdDRkZGMjA2MjNDRUVGQ0M0MTA5RjlGQ0NDNjYzNjJDCi06MTBFNTAwMDBGRjc5RUJDRDFFQzhCQkJFQzFDRUY2QjNGMzY4QkY5RThDCi06MTBFNTEwMDBFNzdGRTM0NzMwQUYwRjM3RERFRjA1RkZGQzg3ODQ3REYyCi06MTBFNTIwMDAyNzY4NjM3RUE4MEY2RDJDNEUwRTZENjE5QzBGRjdGNjY5Ci06MTBFNTMwMDA0MTNCQTY3QUZERkM4OTk4NjdCNjU5RTcwNTNCODIxQ0VBCi06MTBFNTQwMDA0QzQ0RkZDRUJDQ0RGN0ZFNzYxNEY4OEYyNkRGNTkwMjdGCi06MTBFNTUwMDA3OEI4QzFCRTI0MERGQzI1QjQ5RDNGQzRFQzYyOTZCRkMzCi06MTBFNTYwMDA5QjMyRjIxOTU4ODczNzdDMzlCNkUzMDZCMDk3MzZEMzE5Ci06MTBFNTcwMDA3NTkyQzdGMkUzQzE0RTNGQjJGOTQ2QjQ0QkU3NERCMkQ0Ci06MTBFNTgwMDBEODYxNUU5RTRENEY4RjA3RkRGMUUxQTQwQzE5RTdCM0YyCi06MTBFNTkwMDA1QjIyMzZDMDgzN0Q2OTFBQkM5RjI3MjlGRTlFRjhFOTVECi06MTBFNUEwMDBBMzM0RTY2NzJCQ0JCNTdBMjNEMEVGMEYzQUU0MTNCQTQ2Ci06MTBFNUIwMDBBRTZFMDdGRDU5QkI1OThGNzZFRjkxQzk2RkZGNzFCQUU3Ci06MTBFNUMwMDBBMzZCNURDREQzQjVERTNFM0FDRUVFQTlERjc0OEJFMDEyCi06MTBFNUQwMDAxMzEyMjk4NUZEMTRDMzg5NzY3RDE5NzM5NzE1MDAzQ0E0Ci06MTBFNUUwMDBEQTc1MzY2RjQ1NDMwMThCNTc3REI3RjU0NjM2QjFGNTgxCi06MTBFNUYwMDA1NjkzMkU5MUFGRTVFRkI0REU3RTkwRUVCQ0ZBRjU0NjcxCi06MTBFNjAwMDBCMjUyNTRGQkE4RUU3MjJEODhFRDg0QkZERkU0MjVCRTI0Ci06MTBFNjEwMDBBN0FEMThEN0Y1NDlFMDk3NEI1N0IwN0U1MzNBREJDRkZCCi06MTBFNjIwMDAyODdGNURCQ0UzNzU1ODE3RTk4MTk1MDA0NzJFRjExNUU5Ci06MTBFNjMwMDAwMzFGNzk2MkI2NzIzODJCNjRFNTc2MUNEOUM0RUM2Njg4Ci06MTBFNjQwMDBCMEVGODFERUVCOUNFNDk5MzU3MTdFODdGNUU5RUMzQzE3Ci06MTBFNjUwMDAxQjVERkY4RkMwMzg5N0RFRkFDNzUxQTA0RjVEQ0U4NTk2Ci06MTBFNjYwMDAyMTJDREVGOTE5QzYwN0FERUQyQ0FFNkNGNUM2MzBERUY3Ci06MTBFNjcwMDBBRTc3Rjg5MUZGODQ1Q0FGRjczMkJEQTM5REQ3OUZEM0VGCi06MTBFNjgwMDBEOUY5OEI3QTQ3MENDNzM5RTA2MkVCNTBGOERCMzcyRUFCCi06MTBFNjkwMDBCNUEwOUY3NEEzMjM2NDY2N0U4NTIwMDFCRDM0NzFBNDU4Ci06MTBFNkEwMDA4RUM1QzVCODlENzUwQkY3M0Y5QTRBNUUyNjEwMEYyMzlECi06MTBFNkIwMDA2MzU4REVEN0VCMjUyRjJCQTlCNEZDREI5MUUzQkM3OEE0Ci06MTBFNkMwMDBERUFFRTRBOTk2N0M5OEY3MTgzREFGRUYxMzg0NzlGRjhFCi06MTBFNkQwMDBDRTU3ODZGNThCNUQzQTBGQUNFQjg5MjUyQzdGOTE1NDk0Ci06MTBFNkUwMDAyN0ExQkZFNEY1OTIwRjFDQjNFM0UwRjcxMzkzQzc0QUU5Ci06MTBFNkYwMDBGOTY0MzJEREU0QzRFN0RCN0Q2RjhDRDk2MzhERTNBRjcxCi06MTBFNzAwMDA0RjVBQTU0QTY2RUY3QTkyQTcwRTY2RkUxMEQ0QzMyNTJCCi06MTBFNzEwMDA2QTdDMkM3NjE5RjBCQjZCRDNDQUY2MDM5RTZGQjg5RTQ5Ci06MTBFNzIwMDBEMUUzREM2RTYzMDhFNERGMzk3RTdFNDU4QkJGNjNFOUFECi06MTBFNzMwMDBEQ0NGN0E3N0ExMkEzRUVGMzA4NDczNDAzRjlFOTdENDk2Ci06MTBFNzQwMDBGRDE2QjRFODMwM0UzRUJGNDUyMjIxRkFCRDczM0I1RjYzCi06MTBFNzUwMDBDODAxMzlGRUQxRDMyRkU0Q0M4QzgzNDdEQjRGM0NERjlCCi06MTBFNzYwMDA0ODU3RkIwMUI1N0VERERFRkNCOUEyRERFNUY1MjQ2MDhFCi06MTBFNzcwMDBFQUQzRDVGRTcyRjVERkQwOUYzQkIzOURGQjgzN0RCRTEwCi06MTBFNzgwMDBCRTBFRDgwN0YxRjZEQUYxRkVDRUY5NDNEQTI3QTFCRkMzCi06MTBFNzkwMDA0M0Y4MzM0RjFEN0IwQTIyMjc5REY0MzNCN0U3QzlGMUI1Ci06MTBFN0EwMDBGOThBRTIzOTlBRDM2RDBBRDA4RDRFQzVEQ0MyQ0FCRDUyCi06MTBFN0IwMDBEMUFCQjdGNUY4NjQzQTgzNDNEMEVENTQ0QjlGNjRDMEI2Ci06MTBFN0MwMDBBM0ExQ0VBQTEwNzY4RUFDMTBFQ0Y0Q0RDNEUyODVGNUYwCi06MTBFN0QwMDA2NEM4NzA1OTQxN0U4OTczRjg1Rjk4RDlEMzYxQTE0RjlECi06MTBFN0UwMDA2QUFGNjU2NzE0NjJCRkZCNjUzRkU2QzU3RDIxQjdFMjhFCi06MTBFN0YwMDAzOUMyRkI3NTBEOTg2RkZEMTVGRjVFOTZDREJGNjcyRTc0Ci06MTBFODAwMDBFRTRGQzI5ODdGNEQ1QUQ0Rjg0RDZCNjJGQTIzNTY2NThECi06MTBFODEwMDA0MDNEMjVGMDdDRURDQ0ZCNzA5RkRBMDM3REQ2MDNERjE1Ci06MTBFODIwMDA2NDhDNjRFRkFFNzFFNTcxQkY0NjE0RTMwNEU2OTFDNEY1Ci06MTBFODMwMDAwNkZCRjlBNjUxNDE4NDQ3RDBBNzlFMzUyNzUyQkI4NEQ5Ci06MTBFODQwMDA3NjMyRTRCNTI0QTQ2MDNDMzRDODlGQzQ5QTQyM0FFM0NCCi06MTBFODUwMDAwMzA5N0M1RjRCMzRGMTAwMkFCNjgyRDA0RUMwMDk2MkI2Ci06MTBFODYwMDAwQ0YyNjMxRUI1ODc1QjBCNEEzMDlFOEFGNjI3OEMwQjMxCi06MTBFODcwMDBFRjY3MTYyOUU4NEY4Nzc2ODY2MURGQ0U2RjlEN0NDOUVBCi06MTBFODgwMDBGMzBDMjc4QUY3RDU5NjFFRTMwRjEzRTFCQzBFNkQ5RjlDCi06MTBFODkwMDA0REY1MjBEODdGQzRBQjU3OUREN0Q5NDRFRDY2RDg4RkFFCi06MTBFOEEwMDA4OUY4QUU0RTBFMTdCQjcwMUZEMjExMDVGRjg4QTFENDk4Ci06MTBFOEIwMDBFNDAxQkQ5QUEwMEIxNzAyRERCNEYxNUVEQTJFOEZFNUZDCi06MTBFOEMwMDAxOTY0RDk0MUFGODhGMzM4NzU0QkM3RkEyMURGQkREMzNFCi06MTBFOEQwMDBDRTM4QzhGNjQ3NzUwRjk0RTFGQkIxRURDQzdGNUVERjEzCi06MTBFOEUwMDA2MkM0RjM4NEY1RkIyNDhDNTdENUY5MEQyMTEzRkEzMTVBCi06MTBFOEYwMDAzQzhENDBBRjIwQjVDMzYwREZEODY2NjdGOTUxNkQzN0Y2Ci06MTBFOTAwMDBEOUJDNDExMkVGQkY4RTZFNzkxMEZERDc1NjhDRDNGRDY2Ci06MTBFOTEwMDBCM0YxQ0JDQjg5MTQwMTQzRTNFMjUzQzkyNkE2NDdCODMwCi06MTBFOTIwMDA3RjNCOERGMzkzQTBCRjU4Q0YyMkRFOTk1OEU0Q0YwM0VECi06MTBFOTMwMDA4QkZCRDdFQjY2RkZDNkUyRkMyRTc5MjFENzNFMEM3OTI0Ci06MTBFOTQwMDAxRkJERTc4NTFDQkQwNUYyNDY0QzYwQ0RGMzdBMDA4QkY4Ci06MTBFOTUwMDBFQUNEQ0VGMzc1NjYwRkM2QjUzQUVCRTE1RTA0RDMzRTYxCi06MTBFOTYwMDA4OUY3RkZDMTJERTNGQTYyRkUyODNGNUY3N0RENUFDOEMxCi06MTBFOTcwMDA2MzdFRDQ0QzU0REY4Qjg3NEZEMThDQUZBN0UzNUIzREQ0Ci06MTBFOTgwMDBBMkZEM0QzNzhGNTMzMEJFQ0JDQjJGRkREODQ3RTE3RjYzCi06MTBFOTkwMDA1NEFGMUUwRjU5NTA5QzA3MzQ3NTdEQUYzMjMzRTFFMUZGCi06MTBFOUEwMDBCNTYzQkFGNDM3RDVFN0NCNURDRTJFM0RGRUQwREIxMzkxCi06MTBFOUIwMDA1Qjg3N0E2MDdEN0Q4QUY5Qjg0MjFGRDczQjU4OUU4ODc1Ci06MTBFOUMwMDA1NjZFQUQ3MTQ5QzJGRTFEMEYyQTc2RDVCNDJBQkM0N0RBCi06MTBFOUQwMDBBMDMzQkVEQjNFQzkwN0Y3Mjk4OEY4NkVGRDMyM0ZFNjVCCi06MTBFOUUwMDBFNTgyRkU3N0ExRkVCRjcwRTYxMDAxRkJGMjFDREFGRkE0Ci06MTBFOUYwMDBGNTU3MTRFNjBGQTI3Njg0NDRGOUQwRDQ1RTg2N0U0Rjk0Ci06MTBFQTAwMDA0ODM3MDVCRDI5RThCRjgwRUIyNUIwRDU4MUJGRUIzNzdFCi06MTBFQTEwMDBEREYxQjQwRUVDNjU5N0VGNDkxQzk3RUYwM0I1RjA4Njc2Ci06MTBFQTIwMDA1RENDNUVBRjJGMkNERjAwRjI4MDZDOTcwOEU4RUQzNUVGCi06MTBFQTMwMDA4NTlGQTA5RDUxQjc3RkRDODhGOEJDRjJGOUZCOUU2MEYyCi06MTBFQTQwMDA3OUM5M0JGNDNEQ0UzRkVDRDJBMTdDQUJEQkZGMUNGQTk1Ci06MTBFQTUwMDAzM0NGODVEODcxOTY2QTI1QjQ3QTM0Rjg1NUFBNjVCMDUzCi06MTBFQTYwMDBCNDQ4NDlBODZBM0FFQUZGNjk3NDFFRTAzNzA0QkQwMzU2Ci06MTBFQTcwMDA3NkNBOEUyOTQxQzg3M0FGQTdGRjAxQ0EzNkZBRTdBMjRBCi06MTBFQTgwMDBCREJGNzE5QUM5MEFGMTlBRkFDMjk5OEI3MDNERDgyQzEwCi06MTBFQTkwMDAzRTk4QkYxNkNFQ0VGOEYwMDMxNkY0MzdBRUQ5QTdBRjI2Ci06MTBFQUEwMDAwNEJCQTk5NERBNDlCRkEyRjA2NkE3NENBOEY0NTJCOUY2Ci06MTBFQUIwMDA5NEE5REI1M0ZDMDMyQkM0RDU3QkQ2QzM1MzMzOTgxRUQ4Ci06MTBFQUMwMDA2RTk2RkNDMTVCNEIzMDBGOTJDNEU3RTlFNEVFNjNGNjRGCi06MTBFQUQwMDBEOEFCMkU2NkJGODlGN0FGNDJFMjIzQzVFNzk4NjBDNzdGCi06MTBFQUUwMDA1OEUwQjk5Nzk0NjgwMkQ4QzVGNUM0RjczMUVDNzM4OTNBCi06MTBFQUYwMDBERkVBODE3MUUwMjYwNkIwQjMxQ0NCM0RFOENGMzUzOUEzCi06MTBFQjAwMDBBMjNGMUU4QTc2OTM4MkZCMENCMThGQjhCNDlGRjlCRkU3Ci06MTBFQjEwMDA0NkI5MDM2RjAyMUQ0Qjc1RDFDNzZGMDVCQ0ZEOTg5REFCCi06MTBFQjIwMDBGMzI1MEE5MzM3Mzk1M0FDQzNDMDVGNjU3NjQ0MUZBRkYyCi06MTBFQjMwMDBGNDYwN0UwREZBMUY5MkFGNkI0NjNBQkNFNDIwMzZDMEZCCi06MTBFQjQwMDBDRkQ4NjA5NTIyQzVFOTE5MjEzN0M2NzY5RUE3NzFBMDU2Ci06MTBFQjUwMDA5RkI0OUM4Qjk3N0U5NDVBNjc0Q0M4QTJDRDVGQTc3NkQyCi06MTBFQjYwMDBEOTA1QzdGRTMxNTU4MTk3QzI1RTkwNEQwMURDQ0Y1NDY3Ci06MTBFQjcwMDA0Q0EzRkI0M0UwQ0I1NUIxQTMzMkY4RTUxRDFENjgyRjM0Ci06MTBFQjgwMDBENjg2MjVGQzRFNkRFMTJGMzFGRjZEMjFDRkIzRUFDQzQ3Ci06MTBFQjkwMDA3NzUyQTI5OEZGNzVDOTk1QzBGNTYzMzNFMzRCRDI4MUQ0Ci06MTBFQkEwMDBGQjVGQjI4QkUxOUZFQTREQ0MwQkVCQjJEQjFCQjE5RDVGCi06MTBFQkIwMDAxOENGQzBFMzA5QjVEQzVGNDMxMTg1RjU3Rjc1ODk3ODBGCi06MTBFQkMwMDBDMjBBRUVBRjEyNzk2Q0VDQkI0NEYxOTRDNkZCMTdENkM3Ci06MTBFQkQwMDA0REEyOUEwNEUxRjIyNDAxQkNCRjMwRkI2NTM3NkQ3RjgyCi06MTBFQkUwMDBBQTVBNjZGRUVDOTY4NDEwMUMwRTVEMjc3NUY4QzBFRkRECi06MTBFQkYwMDAxODJDRUVGOTFDNENCQTVCRTI3OUIyQjFGMUU4RUZERjA4Ci06MTBFQzAwMDBERjVCOUUyQ0NCOEJERDMwNjIyMEU2OTU5N0VDRkI3OEFBCi06MTBFQzEwMDAzQ0YwMDdBOTI0QjgxRUE5QkNCOEFBM0NEOTJDMzc1Qjg0Ci06MTBFQzIwMDA0N0ZGQ0ZFNEM5N0EyNURGMzZGQTFDRUNCNkFCRjM2NEI0Ci06MTBFQzMwMDBCRDhDNUUyMjdFQTlDRDhGQkRFNDhFMjgyQzlGMkRCQTdGCi06MTBFQzQwMDBFNTY5RDBCQkZCOEM5ODI3Mzc3MURGQUIyN0MxN0YzOUQzCi06MTBFQzUwMDBEMTQ0QzIxOENGRDVEODBGQUZBNTRFMjkwNTNBNURCRTE1Ci06MTBFQzYwMDA3ODY2Q0I0QTAyRjlENUNGN0I1OURFOUREQTFFRThDRDE2Ci06MTBFQzcwMDBGRUM3OTg0NkRDM0VCMUQyRkRFRkI1RkY4NUJDQUVFN0RFCi06MTBFQzgwMDBGQkE5RjM1MkVDOTEwMjk4REY0MTlEQURBNzczMzFCNzE4Ci06MTBFQzkwMDA4OUVGRjc5NkU3RDFERTczOUU4NzM4Nzc1NTE5Q0Q1MzA0Ci06MTBFQ0EwMDBDNUE3RUVFOTFDRUZCQkM1QkI2NjgyMEZCQTg3Nzg5Nzk0Ci06MTBFQ0IwMDBDMkYzQjcxNDg5ODkwRTkyNkQ1MEM1QkIxNDdCNDE2RkE2Ci06MTBFQ0MwMDBGMUFFMDhENjNGRDcxRkVCMUZFQTE2RUY2Mjc5MDVDREVDCi06MTBFQ0QwMDAwN0QzM0Q2MERGRDczODYzQ0YzQ0UzODFGMTBDMzg0RTdBCi06MTBFQ0UwMDBGM0ZFODQxMEU0QjkzNzczRkNENzVDN0RCQ0VCNDE3NzRECi06MTBFQ0YwMDAwRkYxQUVBRERDN0VGQkEwNTA4RTE4Mjg1RUI3MTIwNjc5Ci06MTBFRDAwMDA3RkIwNURDNEJENjREQ0M3QzYxRUNFMTZGMDYzRkRFNUYyCi06MTBFRDEwMDA4NzA3QTFCRjY4OTY4ODY3QkRDNEZDNjhCMzc4RENFQTQyCi06MTBFRDIwMDA4M0M5MDU5OEU3RDUxQjlFNjdCNUE4RTMwMjBGMDM5RTJDCi06MTBFRDMwMDA5REU4RTc0MzdGRkM3REZGMzEwOUZENTM3M0MxOEZERjAxCi06MTBFRDQwMDBBN0VCMUMwNEUxRkUzQzRGMEIzQkRGRUVEOTIxODUzQ0Q5Ci06MTBFRDUwMDAyQ0FFNjI5MkQxMzZCNEM5RjA3RTIxMTVBMzFCNDFGNENBCi06MTBFRDYwMDAwNjI5RDc1QzQzNUY0QjE0NkJCNERFRDM0Q0NCRDRFODlECi06MTBFRDcwMDA1NzU2MkI0MTE3NkRCN0Y1NjQwMkZBQ0YxRTcyNzgxMDAzCi06MTBFRDgwMDBERTg3OUE1OTdDMzlCODU2MEFGNTYzRTNFMkJENjFDMTYyCi06MTBFRDkwMDA2NkQ5MDdFM0VDNzYzM0JGRDMyQjZFQTZGRjNDOUFGQjE0Ci06MTBFREEwMDAwODlBRjUzQzRFQ0NCRkQ3NDhFNDA4M0M2NTg5M0QxRjI2Ci06MTBFREIwMDBCMjI5OTUzREQ5MEY2MkJDNjY3RDgzQTkwQ0YwOURDRDJCCi06MTBFREMwMDBFRTI3RjlEQ0UwOUI4NkZFRTU5NDAyQkM4N0E4MzlCMTBBCi06MTBFREQwMDBBMUE1OTJENUUzOUFGRERDMUNGMzYzRkQ3NTBBMzM0OEM3Ci06MTBFREUwMDA4OTI3MDVFMDdEQ0FDREVDMUIyRDlFRTdCNEFBQ0JEQUJFCi06MTBFREYwMDBGODhFRjZEQ0Q1MkMxMkU4RUZFRUQzRkQ1Q0QyNTM2RTI0Ci06MTBFRTAwMDBBNkZGM0U1RjkzQzdFOUUyQzU3ODQ5QjNERUYzNDYxRTJECi06MTBFRTEwMDBGMEZCNkE3NkNGNTA2MzE2QzM5QjlDQ0Q5RUY5RjYwQTMxCi06MTBFRTIwMDBCQzBGOEVEOEI5MUQ0NzE4RkNGOUQ3MzkyNDU4MEZDRDFGCi06MTBFRTMwMDA3NkM2QjdGRjJBREM1QTc4NUY3NzE3MzBGQ0RBRDk3QUMyCi06MTBFRTQwMDA2RDVFMkQ4NTE4QkUxOERDNTdFQjE3MzlGRjZGOTY4QjVBCi06MTBFRTUwMDAxRjQ4REU2NzIyNzlEODBGRTU0MkYwNjEzREFFQkI1MzEzCi06MTBFRTYwMDAyNDk0QzlGMjI2NkQyODM3NjdGMjdERUU2NzVDQ0Y2RDdBCi06MTBFRTcwMDBBQ0NFNEY4MjM4RThBQ0IzQUJGMEJFQTBCMTUzQUMwODE3Ci06MTBFRTgwMDA3RkRENEI2NkRDQzdENTJFOEJFNjAwM0Y2QkYxMDhEMEVCCi06MTBFRTkwMDAyQTQyOUVEMkZBOTkwRUMyRUU5OTY5NTFDN0Y1QjRGMTkxCi06MTBFRUEwMDBEQTYwOEE1Rjg2Nzg1MDVENzlCNDAwRTI0NjRGQzgxRjA5Ci06MTBFRUIwMDBFQzc5OTVDOTM1RDRBQjc1Q0I2MkNGODA5Rjc5NkE0QTFFCi06MTBFRUMwMDBDMDlDNDFGMTczRTE4MUI3Qzc0QjFFRUM4RUYyRURGMkFECi06MTBFRUQwMDBDMUZFNzhCRTcwNjZCM0ZBQkMxNjU5QUI4RTFCOTI5NjEzCi06MTBFRUUwMDAxNDc2MkVBRDRERkQxRUNFMjdBOUZBNzU4QjIzMzJCQkFECi06MTBFRUYwMDA2NjlEMjEzMDAwRUNDRTFCQUU2Nzc5MTIxN0U3Q0IwNDdDCi06MTBFRjAwMDBFODc5RDE0Qzc4N0M1RUM4NTk2RjQxQkMxRTI4RTA3NjA4Ci06MTBFRjEwMDA2Rjc3QkFEMjc2ODA2NzlFMTcyQURBRDcwMjVEMjkzRENECi06MTBFRjIwMDA2QjM4NUQyRjNFNzc0RDAxRDBGNUMyOUU2QjBBODBBRUU3Ci06MTBFRjMwMDBFQkY0QUQzRTU4MTc5RjM5MDMwMzAxMUZBN0M3RjlEMTYyCi06MTBFRjQwMDAyRTE0NzlCMDU3Q0I2RkEzMzJGRTY3RjVGMDc4ODE5NzE2Ci06MTBFRjUwMDBFRkE4ODdFMTJGREU1RkYyRDIzRjU4QkU2QUIwOUQ5REQ5Ci06MTBFRjYwMDA0RkVERjJEMzlEQzM3QkI2MkU1RjkxMjU5MEMzQkQ4RDJGCi06MTBFRjcwMDA3NzkyRUY5MzVDMjYxMjA0RkJBQkI0M0M4QUZENEFGRjA4Ci06MTBFRjgwMDAyNjEzQjAwMzg1RkRBQjg1N0YzQUM3REY4MjBDREY0QkNDCi06MTBFRjkwMDAyRUMwMjNGN0VCNTZGM0IxNERBMTRGOTk5REJENUQ0MkI1Ci06MTBFRkEwMDBCRkFEQzkxMzRDMUE4REZCQUEzOUMzNzUyODU3N0U4NThFCi06MTBFRkIwMDBFNzIwNDhCQjY0ODNGREM5RkNFRDhENTg3RjY5REYyQ0Q5Ci06MTBFRkMwMDBBQzk3NEQ5MTA4RUNDMzZBNjkzRDk0NTc4RDUxRTczNTc0Ci06MTBFRkQwMDBFQkY3MTY0N0UyRjdCRDE0OEUwM0IwOUY0OTcwQzQwQ0RGCi06MTBFRkUwMDBDMDlGNzU2MDU3NTMxMEVCMTRFNkRGQUU3MzEwRjRBQjlGCi06MTBFRkYwMDA5NEVDNTNFRjEzNDVEQzc2QTM5RkRERTNCMkIxNURDMjIxCi06MTBGMDAwMDBGQjlDRDIwQzgxQkMyQ0EwQUIyNjdFN0I3Rjg2NkYxRDI3Ci06MTBGMDEwMDBBQzU3MTE0N0JGQ0RFOTdCMjA4M0U1OTdFNTAwOUU4MjgxCi06MTBGMDIwMDAxOTBDOUY1MUJEMzhBRkE3M0U0Rjc4RUNEMEVENjgwNzYzCi06MTBGMDMwMDBGRDg1Rjg5MzdCQ0UzNzBCQTlFMkVCNzNGOTc5Q0ZCOTU1Ci06MTBGMDQwMDBGQ0JDMjdDOEU3ODg0NjNFQzc5NzZCRTJGMkNEMjIzRDVECi06MTBGMDUwMDBFNTBEQzRFNTlCQzVGNzhCQ0YzNzhCQThFNDFBNUJGRkEyCi06MTBGMDYwMDBFOUJBQzUxOEQ3QUVBNzdDQkU3NDU4MTcxRkQ2MTBGRUQ0Ci06MTBGMDcwMDBCNzNFRjYwMTlFNkJEOTYxNDQ3RjVBMERDRjMzQURBRkQ5Ci06MTBGMDgwMDAzRTg1RkI5NDdBMzgyN0MzRDYyM0NCQzdFNkY3MUNENDNBCi06MTBGMDkwMDBEMEZEMUZFNkRCODZENUY5QThCQjdCOTUxQkZGNzdGQzZGCi06MTBGMEEwMDBFNEZCODQzQ0UwRUI1MUNDNEJDQ0EzQTY1RDYyRUI0Nzg4Ci06MTBGMEIwMDAwM0E3NzZERkFCRjU3NzhCN0RFQkQ1Q0FBNUUzRkZDMzVFCi06MTBGMEMwMDA3MkU5QUQ3RjkzNUNFQTE2MzdFODFCNEJGMkZFMUJFMjU4Ci06MTBGMEQwMDAwNjFGNzk1QUQzQzA5NUQ4MjIzMTdFMURBRkIzRkE1ODk2Ci06MTBGMEUwMDA1QzUyQzdGMjE2QjRGMTVBQ0Y3ODhDNDMwQTNGQURFOUFGCi06MTBGMEYwMDA3OTVENjg0NTFFQjZDNzM4NkNFREMxNDRDQzIzQThGNkNGCi06MTBGMTAwMDA1NEEzOURBRDhENEYyRTIwN0JDNjAzMDlGRTQyOEVFMzk2Ci06MTBGMTEwMDA3OUFDN0YzNTFGODA2NDc2RTYwM0U0N0RDNzdDMDA2M0FECi06MTBGMTIwMDBFNjc3ODg0RkJFNkNGRDM0MzUxMEM3MjdFNTQ1RDQ2MEJGCi06MTBGMTMwMDAyRkVBM0Q1RkNCOTlDOUY4MkU4MUU3OEQ5ODk0MjBCMUQ1Ci06MTBGMTQwMDBDN0Y1RUZBRDVGNzYyNkNCMDM3Qjk5RTcxOTNEOUE5ODFCCi06MTBGMTUwMDA4MEU3RjY1RDA2NzZGRUMwMjVCMzdDQTgzMzJFN0Y2RTcxCi06MTBGMTYwMDBFNjA4RDAwMzhDOEUzRkQ5N0YwNzgxRkNDMjlGRThDMzlECi06MTBGMTcwMDA3ODhFM0U1ODZCRjU4MkZFMTI3RTI2MzFGRTgzRENDRjAwCi06MTBGMTgwMDA3MkI1RUJBNzI0RjNERkJCN0VCRTRENkU1QzJGQkU3NzVFCi06MTBGMTkwMDBCNUYxQjVGNTE0MDc3MUVCNEFCQjBFN0FFQkQ3OUI1QzYyCi06MTBGMUEwMDBCOTM1RDMzRjIxMTNFNTk2NkYwOEM2MjlBRTUyMUUyNTA3Ci06MTBGMUIwMDA5NDUwNzkwREZBNzlBRkQxMDNGQjA1MTMzRjI3NDNENjVECi06MTBGMUMwMDBCQTU1RkJFRDU5OEY2NkEzREVCQTY4NjZGQjA3NzE5RUUwCi06MTBGMUQwMDA0N0NDN0Y2NkFGRjhGRUU3RUNCQkUzNEVGRjZDOThDRjAxCi06MTBGMUUwMDBFOTMyMUY5RTA3NzgyODkxRTk5NUQ4NEU5NjE3QTQzRERECi06MTBGMUYwMDBEN0EyRDUyN0UyNUM4NkY4REU3REZGNjY3RUY4QUVGMjA4Ci06MTBGMjAwMDBCNDQ5N0NGRjVGOTRBNzU0QkZBMjdGQTVENzM4NkNCN0UxCi06MTBGMjEwMDBGRTQxOUU5RkQ5RTFFM0YxMjkzQ0U3MjBFMEFBRUY2MDlGCi06MTBGMjIwMDBGOTc0OEY2NzRBMkE3RkYzN0Q1Q0ZFOUZDQ0Y0QjUwMUE5Ci06MTBGMjMwMDAxRDJFQkM2NTMyNDFEQ0IzQTQ4NEM5Q0YzQUJGMTVFM0FGCi06MTBGMjQwMDAwNjc1NjE5NjQ3NTNCNzhDRTAzRTVGOUM1RkNENEIwRkQwCi06MTBGMjUwMDA2QzAxMzlGNUQwREI1NkJDNzdCNDZFREZENjk2N0NDQzJBCi06MTBGMjYwMDAyRjA4QTA1RDc3RTkyREY2RkU0NDVBNjAxQjhDNUZCRjI2Ci06MTBGMjcwMDAyQ0FBOEE0Rjk0N0VGREU5QUFDQTEyODQxN0Y3RTkwRUQ4Ci06MTBGMjgwMDBBM0ZBNUNEMDkxNENCNkZGMTZDRjQzOURGOEE1RkIxMkI0Ci06MTBGMjkwMDBEQUVGNDIzNUNCREZBRTc3Rjg2QzY1OTg1N0MwRkNERjBDCi06MTBGMkEwMDAwOTlFMEVGNDVCRDdFRDQ1MjU0MTMwOTkxNEVBMUZDQzM5Ci06MTBGMkIwMDA0MkJFQTlEQjVCNTY4Q0Y3MDg4NENEQzU3OEZGQ0MzQkZBCi06MTBGMkMwMDA1NkRDNUY1RDc4MjAyM0E0NjNGRUYyRkQwMDZGNjI0OTg3Ci06MTBGMkQwMDBFODI2QjAyRjczRTk3N0MwRkY3RDYxQ0Y0REM1RTgwRkY5Ci06MTBGMkUwMDBENEFDM0JCMURFM0FDRjgzREU2NTBBMzU0OTVERUI3MUM0Ci06MTBGMkYwMDA5RDlFRTk0N0ExRDc3NjgyMzE4Qjc5MTUzQzJGQjA3RDUxCi06MTBGMzAwMDAxMjk5NjNFRDJBNUIxREVBN0NDOTA1MTlFMzc2MDIzQzdDCi06MTBGMzEwMDAzQjMzNTkxRTg5ODhBM0U3OTlFOEVFMzNCRjNCMUZFNkNDCi06MTBGMzIwMDBGMTM4RkEyNDlFRkY0MDgyQTZBRUJDODdGQzZGOEZBMzAzCi06MTBGMzMwMDAwQkY4NDQ1OUM0RDExM0FFMzBGQjM2REY2NjQwQkU0OEVCCi06MTBGMzQwMDA2QzYxNzI4MzUwQkUwMEZCN0E0Q0FDNjMyQzlDQzNFQUE4Ci06MTBGMzUwMDBEQjE2MTkwM0Y4NEEwNkY0NjNGRTY5RjRDNzQzMjE1RTFECi06MTBGMzYwMDA5MUFBOEM4MTc4QzU5NkE1QzMwRTlCMUNFMDNGRUFCODk0Ci06MTBGMzcwMDAwRTQ4RTM2OUI1OTVDM0Q2MzIyRkREN0YwNkY1OUVEMkUwCi06MTBGMzgwMDA1MDA4RkM1RkZFMDczRENCNTM1QzlEODBGQUJFMkRBNzY1Ci06MTBGMzkwMDAwNkYzMTQyRkJENkQ1NDlEQkZEMTNFODM2NDg1MEJGQ0Q1Ci06MTBGM0EwMDA0NEY5MkRCRkM3Nzg0MUUyNUVBOUM3RkNEMzdFNjBGNDYzCi06MTBGM0IwMDA4RjYwRURDMUVGOTREOEQyMTExQzA5N0U5NDg3MjU3NjE5Ci06MTBGM0MwMDA3NzIzODU1RTcyQzFGRTVGOTFDMUVFOThCNThGOURFMzk0Ci06MTBGM0QwMDA5RUQ1NkEyRjM3QTEzQzk1NThCQzY1OEMwM0U1QTRCMjM1Ci06MTBGM0UwMDBGQTY2MTlGNjY3NEEyM0MxN0JEMkIyQjJEODM5ODE3RTU4Ci06MTBGM0YwMDA2RDM2MTlFOEZFRUIyRjc1M0RDNkQxMTJCMjk4NUU4NUM5Ci06MTBGNDAwMDBCQzM3NDA1N0FEMzE3NjE0NDJGRDIyRkUyN0YyRERDNEYxCi06MTBGNDEwMDA3RUE4NTNCRUYyRkJDNDg1M0VEMkRBQjFEREVDNTdBRTE2Ci06MTBGNDIwMDA4RjNBRUQ3ODBEMUZGN0Q2NEZGMEI3RTBFNzVGRUIwOUE1Ci06MTBGNDMwMDBEQTYxQkY5NjRDNzhCRTRCRjA3NUIzQzhERkZGOTJGOTI2Ci06MTBGNDQwMDA3MTczNzkzRUNEQTkzNTdGMUZDMkVFMEYxNEYxOTMxMDcxCi06MTBGNDUwMDBDQjgzRDI0NzU3NjUyMkJFQTJENzA3NjFERTdCRUQ3MjEwCi06MTBGNDYwMDA1RDExRkFCRkVBNzA5Q0Q1RUNCRUIzREM5NjNFMkI0NjJDCi06MTBGNDcwMDA5NkMwRDM0NjAwMDVBNzBFMkNDQzg1NzUxOUE0N0NEMDY4Ci06MTBGNDgwMDBBRjA3M0UzODk3QzlGMjk2OTRENTA5NDgzN0U1MzFCQ0E1Ci06MTBGNDkwMDBEOTk5MjhGNjM0QTQ5QkYyMDRBM0NGNjlDRUU3MjI3RTQzCi06MTBGNEEwMDAyQkZDOTQyNzMzMDNBM0IzOUM3MUU3QjI5NjVBRDhCOUM3Ci06MTBGNEIwMDAyQzdFREUzNzcxRTlEQkJCRTFCQ0QzMTZFRTJGM0VGQ0MwCi06MTBGNEMwMDBEMjIwRkNERDg1Q0Y1NzJCMTJGODhEM0VCNzU3RTVDMjExCi06MTBGNEQwMDA3RTZGMUNBNzZCQTJEMjQxNkNENjc4RkUzQzhDRjlCMjMxCi06MTBGNEUwMDBGOTA3NTlERTlGQzJFRjRGNTI1NjNCQjYwMjNFQkRBOTA3Ci06MTBGNEYwMDAwMUNDMEJCRUFFMzk4MjNGNTlGMDkyRUQzNEM2RTVBODdGCi06MTBGNTAwMDA1RDg0RTc5RkNGRUQ5Nzg0NURBNEQyODc2MkJGQTZEREJGCi06MTBGNTEwMDA4NzREQ0ZGQUVGQjU5MzY2NjdBOUY3MTU1N0JEQkYyMkEwCi06MTBGNTIwMDBFQTdENjY2NzdCQjE2RkQ0RUUyMzM0RkQ3QkIzN0Y4OEMxCi06MTBGNTMwMDAyRkE4Q0E4QkI5OUZFNzQ1MEJGRDlFQzE2NUEzQzg5NzRECi06MTBGNTQwMDBFOTNDQkY0QzQyNjYzODA3OTEwQ0I5QUY0Q0FGNjNERTYzCi06MTBGNTUwMDBEMDdBQzlFMjA1M0I0OTlCMkZENDk5Qzc0MzFBRkFCMzI1Ci06MTBGNTYwMDAzQzkyODZBMUVDNUU4QTg2NkJFMDI5RjI4OUNDOTA0RkIyCi06MTBGNTcwMDAxMjlGQjc5QUM4RjI4MUNDOTA0RjQyREYzN0Y1N0FERUZFCi06MTBGNTgwMDBEOUQzMDhERjZGRkI5MTREOUM3NzY2N0VGNjRBQzJFM0M0Ci06MTBGNTkwMDAwQ0RCRjAzQzc0RUNCNjJDM0M1RjMzQjY5MkY5RUY1MkM2Ci06MTBGNUEwMDBGQzA2MTlGOEYyRjlBRjc0M0U5MEJCMzFCQTZFQzFCRUQ5Ci06MTBGNUIwMDA0QUU5RUI3MzgzQkQ2NUE2RjU5MEE3RDI3OURFQjk4QUQ3Ci06MTBGNUMwMDBGNDc4REU1OUU0MzM4OUY4NkU0NkZGNzUxMkU4OUZDRTcxCi06MTBGNUQwMDAzQzkzRkFBRTczRDBGMEREQjY0NTFFRjQwRjc3RTYzREVFCi06MTBGNUUwMDA3RDlGRTAzQ0NCODU5QzMxQTlFOTk3RTQ2M0VEOTJBNjMxCi06MTBGNUYwMDAxOUQwQ0U0ODkzMDMzQjMxOEVCN0IxQzM4Q0ZFOEFBQzkxCi06MTBGNjAwMDA3Q0U0QUJBNjkxMjFCQzNGMzdBNUE4MTVGREFGMkI1M0Q5Ci06MTBGNjEwMDA3REJCQjI0Njc0RjE4RjgwOEZBQzY3RjNCRjBDRTdCQzQzCi06MTBGNjIwMDBBNEFFRUY1RTlFRkZCNzFDQjBBN0NBREI4RDhDMEYzNTcyCi06MTBGNjMwMDA3MDZDRUNCQzZGODU3RTg3M0UwRjY1MzFGQTdCMzVGNkNBCi06MTBGNjQwMDBBRDc4MUUxMkZDQ0VFNUIwRjg3RTZGRjMxNEZDRjg2REI5Ci06MTBGNjUwMDA3NkJCOTZCRjgyRTU5QzNFRUY5OTQzMkM1RjQ5Q0Q1RjE4Ci06MTBGNjYwMDA4Nzk3NTcwRTNGNEQ2NUM5OTFFNTdFN0M1RTM2NEI2MUFECi06MTBGNjcwMDAxREU0MTU5OTYzMzM0MDAyRkUzOEJCRkU3QjcwMEZDNzUzCi06MTBGNjgwMDBFNUM0NTgwRURDRTNGMTc4Q0U2REI3QzIzRDFEOTc5RDAxCi06MTBGNjkwMDBCMUY3QTBGQzRDRjY0M0FDREMyRkI2MDVFRUY1NjhDRjE1Ci06MTBGNkEwMDA0RTY0NjVGODU2MDYyMTZGNkQ5MjZFMEQ1QUYxMUVBRENGCi06MTBGNkIwMDA1NTFEQTA5RjRBMzRGOTI5OUFGQjA3MjA4RjEyRUY0QjYyCi06MTBGNkMwMDBCMDMyN0FBNkYzM0M1NjUyQzFFRDc3ODgyQ0QxNzI5M0IyCi06MTBGNkQwMDBCQkQ4MEJGOTA3NTZFMkQ5REIwMUY1NTk0Njc2NEYwMTQ1Ci06MTBGNkUwMDA2MTc5NTM0REZERjI1ODlFMDNFNzc3OTJDNUZEQ0YyNDEzCi06MTBGNkYwMDAxQTA0RkU2RENBQjM2M0ZGNEU3OUJERDdDOEUzNEVFQzYyCi06MTBGNzAwMDBGQjI3OUU2M0U3Q0I0NDdFMkUyMUI2NkNCMDdCQUMxRUZDCi06MTBGNzEwMDBBMjJBOEJGQjNCODg2MkNCODZGM0ZBNERDMkFGQzdDQkU0Ci06MTBGNzIwMDBFRjVBMDI3RkNGOEFCMzhCNEU4Q0JCQkYwODdGRkZFM0JCCi06MTBGNzMwMDBGOTA3RkJDMjdDNkYzNEE4RUY0RjE2Q0Y2NTM5NENGRTNBCi06MTBGNzQwMDA1RUU2RjcwQ0I2NTkwMjRBMzYyRDlGNEM5ODMxMUVBRTM0Ci06MTBGNzUwMDA2RTlEOTY1QTY2QjBBMzlEQjY1MzA3RjJDOEM5RjlDMjBBCi06MTBGNzYwMDAzRTk1QzE2N0FGRjA0QkYwQkIxQkUyOUUzRjY3NDA0MTQ3Ci06MTBGNzcwMDA3RjAwMDlCNEU5NDA3RjNBNEZGQjMxMEZCMEM2MTRDQjhDCi06MTBGNzgwMDA1MUYyQzFBQjFGQjA2NTQzMUNCMEVBRkRGQjMwMEU5OENGCi06MTBGNzkwMDA3MUUyM0RDOERCMzhBMTZGMUQ5QjA0RkEyMjhGREYwM0E1Ci06MTBGN0EwMDA0MTM3N0U0MTVBM0U5QTk5OEJGQkJFQ0U3QjQxRkI0OTQ1Ci06MTBGN0IwMDAyODFGMjY0RTY1RTc1NjI3OTBCMDgyRkUxNzFCM0I0NzUxCi06MTBGN0MwMDAzNUJFMjRDRkRCNDRCRjM3OTFFNzdEOEMzRkU5NEYwMjQ0Ci06MTBGN0QwMDAzRkMwRjgzQkEyMEE4QkI3QzQ5NEY4M0MwQkYxMjQyRTJGCi06MTBGN0UwMDBCRDI3N0UxRERDRTQ4OTJCMTNCODRGNTg1REJFQzVBQjI5Ci06MTBGN0YwMDAyRURGM0FGMkNCRkVGMUU1NjRFMjFCMDRGMzdDNTE4QTgyCi06MTBGODAwMDBFMjM5RTRFMDI4NjI2M0YzNjJGOTg0M0ZFM0ZCQjY0MTQ2Ci06MTBGODEwMDAyRTYyQ0E4NTdDNDc4NzE0ODQ3REMxQTAxNzMyMzA4RTQyCi06MTBGODIwMDBGMkMyNDg4MkU1QjQxREE2NkRBNkY4RjkzRjI2QjMzOEFBCi06MTBGODMwMDAyREY3NzM4QkRGMEQ4MjNBRDBBQkNGQkY5NTg2Rjg0QTk4Ci06MTBGODQwMDBCM0NBMjg0RkMxMDMwRUZDNTY5QTY5QjI4MDdDRDc3MUE3Ci06MTBGODUwMDAzOTJGQ0U2RDhGNEIzMkUxN0RBRjREOEJEOEVGMEQ2OEQ4Ci06MTBGODYwMDBFRkJCNkNEMkRCMEUwMTFEOUIzRUEyNzNBMERGRDk5RUM1Ci06MTBGODcwMDA2ODg4Qzg0OTQwMkY0MjBDOEUyRTc5MkNGODA3QzZCQkU5Ci06MTBGODgwMDAxRUY4N0UwNEZCNUQyN0NBRTU3REUzRUYxQjZGNzIzMjM1Ci06MTBGODkwMDA1ODlCN0VBNEYwRjgxQ0ZCN0Q4OUMyQ0VERjlCQTBDQkQ5Ci06MTBGOEEwMDA4RUI2MDc5QjkyRTAzQTYxRjFCMTZDMzE0RkEyRjhBMDlECi06MTBGOEIwMDBCRDlCODgzMjNCOUY5NUM2Q0JFMjlFNEQ0MkNBMTRCQzhECi06MTBGOEMwMDA2NzQ3MTJFRDFBQjFGQzI0NkYyN0I1QkZGQTU3RTA4RkQ2Ci06MTBGOEQwMDBCRTQ5NzQzRUY0RDk5NENERTRDNDUzRjI4OUY1QzgyN0U3Ci06MTBGOEUwMDBENjgwMDdGOEM0OUJEMEYzNzlBMUJBNkNCNjZFQzYyNTUyCi06MTBGOEYwMDA4RDc0NDFERTQwOTNEQkVCMDJCQjRBRTBBN0YzM0QxRjcyCi06MTBGOTAwMDA1N0Q0OEJFRjc5NTM3QjFFQjc4OThGMUJFNkU3OERCNUY0Ci06MTBGOTEwMDBGNTNGQ0E2Njc2NUJFN0Y4N0EzQUFFRjUxQkJFRUI1NDY0Ci06MTBGOTIwMDA3RkI3QUJCRUI3N0VFQ0JENjg4RjNGMDc1NTBBRUI4QzQ3Ci06MTBGOTMwMDBFMTZEMDJDRjczMjU4NUVBRkMxNDMyRDI2QjYyRjI1RTcwCi06MTBGOTQwMDA5RDhGNzJBM0I0Q0MwREVCRjMyNjUzNkQ3Qjk0RjY3RkExCi06MTBGOTUwMDA5NUYzQzk4RDcyRTAzMzg4MzdCQzNBQTNFMDA4QUNDRjg5Ci06MTBGOTYwMDA0QUI4RDA5RThFNzMzMzg5QUMwMjY2Qjk1QzE2Rjg4OUFBCi06MTBGOTcwMDBCRDBGQ0E4Qjc1MjA4RkVBNzQ4MUZFMjlCNDdDNTFERkRDCi06MTBGOTgwMDBEQTc3NTExRUFFQUYyN0IzNDc3NDg3NEZGMDYxMjc5Q0RCCi06MTBGOTkwMDA5NEZGODBFRTgyRkZCNDcwMEIzRTIwREYwQjYzNDJERkVBCi06MTBGOUEwMDA2NjEyQzFBNzhCQjAzQzZBQUFCRjU4QkVCNDI3QkI2QjE2Ci06MTBGOUIwMDA1RTk0MzlDNzlCMUFGQTgyN0U3RkI1MzE4OEYyRTc0NjlBCi06MTBGOUMwMDBGQkUzOTgzN0I2MzMzN0IwMEJENkZEQjRBMTFGRTMzRDQ4Ci06MTBGOUQwMDAzOUM0NTU4NUY2MTY4NTc3RjdGRjI0QkM3NDVEQjlFMTA3Ci06MTBGOUUwMDBCREIwMDM4NUJERDcyRDdGRjgyMzgzMkE3RjU4QzBBN0RDCi06MTBGOUYwMDA1REM3MDI4RTdBQzJFRTNGMUFEQkJFMTVFREJCRkFBOUQ3Ci06MTBGQTAwMDA1NjJGOUNGM0E4ODdCQ0Q4MTI4QzdGNjE5RUYxMDFCRTUzCi06MTBGQTEwMDAyRjBCNEEyQ0RGQjc5QkJERDg3QjlFMzFCQjBGQTBENkU2Ci06MTBGQTIwMDBDNkVFQzExMUY3MjlERDlCMkZFRUM5NjE3MDUzRjlDNUYwCi06MTBGQTMwMDBFRkM5QzE3MjVCOTUwN0Y3N0Y5RDc2RTMxQzY2ODdERTkxCi06MTBGQTQwMDA1MDYwNjk4NjdCMDdCQkRGOTdDM0ZDN0JFNDA1QTM4NzE3Ci06MTBGQTUwMDBEQjg5QThCRkRCMTJEOTc3MkU5QTU5NUU3QjlDMUMyN0M1Ci06MTBGQTYwMDA1MjVBRDczRDVFRUJGNENDMUVCQzk0OURDN0UyNzhCMkVGCi06MTBGQTcwMDBCNzE0RThCMTExRTI1NkJBRUU3RUM4Q0Y5QzgxOEY4MUVGCi06MTBGQTgwMDA0RkU2MTRGOTcyRTAyNzNENjYxOTk4OUY5MUYyRDVBNkNBCi06MTBGQTkwMDAwRTAyRTk3MTBEREJFMTdFQ0I5QjQ4QzM5QjcyMUZFNDM0Ci06MTBGQUEwMDBBQjJGODA3RkE2MERGQTk4REQ3QkQ5QzU1NzU3MTg1RjFECi06MTBGQUIwMDAwNTUxMDg3RURCM0E3RDJEMzUyMEU1OENDMDNDRUY3NzgzCi06MTBGQUMwMDBFQTRBMjBDRTY4NDRGQzhCRkM0M0VERkE4RDgzRTdCNDEwCi06MTBGQUQwMDA5RUMxRTM4MDdCNzUyOTNDRTYxQzY3Nzc3OEFFODZCRkM0Ci06MTBGQUUwMDBFM0Y5Mjg5RDMwM0VFRThEQ0YyMUNGM0Y3MTU4MTc5RjBGCi06MTBGQUYwMDAyNzkzODAwQkUwRUZFNEY3NTVERTE2NUQ5RjFFRTBENkZFCi06MTBGQjAwMDA1OTkxRUVCNzRGNjdGMTk4RkEwNDY2QTc0MjVDQzY5RDFCCi06MTBGQjEwMDAwNkZFMjdGNkZEREI1NzMzRkVCOERENkM0NDdFOTlENDM0Ci06MTBGQjIwMDA1RThCRjExNzUyQzFFMjI5NUVGQTNGODA2NzFBRjE4REIwCi06MTBGQjMwMDA4MzlGRTY5ODYyOUI4NEU3MzZBNzRFNTRDNzVCQTY5OURECi06MTBGQjQwMDA2RUM0RjhDRTZEODRGOUQzNkU5RkFBNTdGREVFQTBDMEE3Ci06MTBGQjUwMDBDMzM0QjJGNjYzQzhFNzk4QTZGOUJENDEyRDVFQjRGMThGCi06MTBGQjYwMDAxQTgxOEZBNjkxREZCQ0VFQUZDRDQ5NzQ2MDlDRDg0MzVCCi06MTBGQjcwMDBGQTdGQzdCODRFNzkwRUNCOUZCQkFBQjhDRTExN0QwQ0M5Ci06MTBGQjgwMDBDRkVCQkZFMjlDQjc2OTExNUQxN0ZERkZCMzA4RUZFOTRBCi06MTBGQjkwMDAxRTk3MzY3RkZCNjNCNEZDRDM4RDAzQjFGQzRBREE1RDVDCi06MTBGQkEwMDA0QjRFNDBGRDk2MDIyQzU3QzgxRkNGQzA3QkQzNEJBN0FFCi06MTBGQkIwMDA0RjgwRkJDRDhGOThEOTM4MkU0QkEwMEQ3RUFGQzIzNTJDCi06MTBGQkMwMDAyNDdGMTg2Q0M5MkEwQzMxNkM3N0YzRDBEQUUxOTAwN0U2Ci06MTBGQkQwMDA1MzYxNjFFNUUzQzVGRjZCMTg5NkYzNzk3OUQ4OEIwMzIwCi06MTBGQkUwMDBBMTdDNDRGQTc4NDY0RjcxQTE0MTg1NTIwNDdFOTdBQUMwCi06MTBGQkYwMDAyMjg1QjU5RjM4NkM2NzA2RjgwOTJBQ0E1OTc5OTBCN0VCCi06MTBGQzAwMDA2Qzc1MUZBODk3M0Y5OUQxOTMzRTZFRTBGNkIxQjBCN0RGCi06MTBGQzEwMDBGQzdDQkRCRkUwN0JCRjE5Q0U4N0Y5QUQ5MjE3Q0UwNTQ2Ci06MTBGQzIwMDBGODQ3QkVDRkVFQzczMkIxM0MwMkJGQUY1ODgxRkIxM0RECi06MTBGQzMwMDBDQjdEQ0NCRjM3RDZEQUU4MDZGOUY3QkQ4MEExMDRGQzRFCi06MTBGQzQwMDBCODM2NkI1RTMzRkNCRTQwRjJDOEIyMTE0MEVGQjFENDlGCi06MTBGQzUwMDAwQzAzRkQ0N0Q3RDUxMjVDNTdENzdDOUM5Mzg0NzY4OERDCi06MTBGQzYwMDA3QTVEMDlCRTlEMjRENjUzODU3QURENTA3OUYwNDM0NkVFCi06MTBGQzcwMDA0N0Y1N0FBMEUzMkU4N0Y3RDNBRTU1RUJBNTRFRjlBRTQ0Ci06MTBGQzgwMDA1OUI3NUE3RUVDNTVFRjEzQjUxQ0VDRDQ0RkFCQzJDODM0Ci06MTBGQzkwMDA5NzU5ODQ5REZGRDkwQzdDQ0FENjZGMkJDMDYxOTAzQkNECi06MTBGQ0EwMDAzQ0YwM0U1N0YyMEVDNEM0OEE1RUVDMDcwMTFGOTgzRDNCCi06MTBGQ0IwMDA2NDU4NzdCOEUwNEYxMUY2MjI4M0MwNjY0QjgzRUZCMkU5Ci06MTBGQ0MwMDA3QURBQ0YwNzNGMjIyNkUwQTJERjBGMjE3RTU2MzE3ODc1Ci06MTBGQ0QwMDAzNjRCMERGQzc3Mjk5ODVEMkVGNkJENzU2MkJFRkJENEMwCi06MTBGQ0UwMDBGMzJEQjVCMDczRUMyRTQyRTUwRUZBRUU4QjA3N0UxM0MyCi06MTBGQ0YwMDBEQ0Y1NUNDRjRFMzVGOTFGMzZEMjM5REM2NjlGODU3NDUyCi06MTBGRDAwMDBCRTgzMDQ5RjAzRkJBNkMzMTJGODI1RDA1QjI3MDcwRjExCi06MTBGRDEwMDA0NjI1Rjg1RDA5MUZDNjkzMjkxRDdGOTUxMzY3MkYwODk3Ci06MTBGRDIwMDBCOEI0RjhBOEVCNDVBRTZBRTFENkUyQTE4QjNFMUQ2OEY3Ci06MTBGRDMwMDA5RkI5RjlFRkNGNzVDRTRCMzM5RjI2N0VGRjdDQUNEOEIxCi06MTBGRDQwMDBBOENBMTMzRDVFQzVGMjYwMDU1Q0M3MjU1Mjg4N0E1Mjg5Ci06MTBGRDUwMDBCMjYwMUNCNUQzRUZBNDk1NkZCRDlDNjcxM0ZBNTlDMDcwCi06MTBGRDYwMDA3OTNGM0Y0RkY1ODVDQ0U0REVGREJBMDhDMjk5NUJEOUY3Ci06MTBGRDcwMDA2MTA2M0M3RTkyQzNGQzJFMDJGRUE2OTE0MTZDNjc5MDA4Ci06MTBGRDgwMDBBNTFFRTNDNDlGRTRDOEMyNUZBNkEyQjdCOEQ3NENDNEZGCi06MTBGRDkwMDBCOTA0NUUxRDA2NEYxNkU2N0I2QUYwMzlEMzY0RUMzOTcwCi06MTBGREEwMDBBRUFBOERCRkY2RDI0RUEyRjhDQjRDRTk4RTY3MTEyRkNBCi06MTBGREIwMDBCQjQ1RUI4N0JCODlGOUE3NkVFMTdFQjhCMTk1MENGRjE3Ci06MTBGREMwMDAyOTRCMTM3MURGOTY1MjcyNDIyMTgzQkJFRTVEMTZGNDBDCi06MTBGREQwMDA3OEM3MTFGODJBMDdFMzE2RDExMUUwMjc3ODdEQzQ0RkMwCi06MTBGREUwMDAzMTRFMjRFRTM3RDRFMkM3OTJEQjMzN0U3QTVCMEZCRDBGCi06MTBGREYwMDBDMUZGQUVDNTZGQ0RBNUUzNUM5NDNBRjAxRUI0QkZCQkE2Ci06MTBGRTAwMDA2QzdDREM0MDFFQUMxN0JCMkRBRjBDRkMwQjU0QUU3RUUzCi06MTBGRTEwMDBGRDM1NkMzNkExMEFFOEU3MEMzODcyOURCMDNFRkNFMzc0Ci06MTBGRTIwMDAyMEY3M0FBNTMyQTA2N0ZFNzk4MkZFRTFDNTdDOUYzOEIzCi06MTBGRTMwMDA4RUVCRjc0Rjc2QjFGM0YzMTVCRTAxNEY4RTAxRkJGMzU2Ci06MTBGRTQwMDA5ODlFODQzQzkwQzdDREYwRjNDOTI2MURFQUY1NzlBRkEyCi06MTBGRTUwMDAwRDc3ODE3REZFMDFFN0I3RkVFQjY1RDVFRkQzMEQwODg5Ci06MTBGRTYwMDA1OTU0Rjc2QzBDREE5MUEyMkEwRjBFNjdBOERBMEZERDRECi06MTBGRTcwMDA5N0FGQUEyRjhFMEM1NEQ1MEYzRjM2NEM1NTFFRDEzMTVCCi06MTBGRTgwMDA1QUQ1RkU5QTkzRTVBQUYyQThFODA0NTVGQjZCQ0Y0RTJCCi06MTBGRTkwMDA1Njk1QUY4QkREQTlCRTI3MjRFOEVCMjg0QzgzRkJGOUYwCi06MTBGRUEwMDAxOTNFNkVCODMyNTNENUZFN0NEMkY4NjNCMEVFNjZBRjIxCi06MTBGRUIwMDA2NTc5REI2NTY0QTFBQUZGNDI1RDBERTY0MzkzNTY2NjUyCi06MTBGRUMwMDBDNzM0RDBGRjIxM0Q3NTc3MkI5ODI3NDZFREY3NTRDMEY2Ci06MTBGRUQwMDBEQjdBQjU5RDUzRERGRUQ4MkE5MEI1RERFRUE3RDBEOEVDCi06MTBGRUUwMDAzMzVBRkJBNUJGQTMwQUFFNzcyNkI3RTZGMkJDOTM2QkU1Ci06MTBGRUYwMDBDODM1RkNGNzRBQjQ3NEM1RjNGRTlGQkNBOUMzN0RDNEUyCi06MTBGRjAwMDBFMkQ3OTg3REJGNzgzN0NCODcyQjIwRkQ5MkYxMUNEOEE0Ci06MTBGRjEwMDAzMTFEMDk0OTcwRUY0MUMzQkEzMTUyOTcxREEzQzU4QkZBCi06MTBGRjIwMDBEMUE1QTZCM0Q5QTNBNjczNDJBMTlBQ0U4OTVFMzU5RDY5Ci06MTBGRjMwMDA5MzQ3QUFFOTZDRjdBOUU5OUM1QUE5QTZCM0QzQUZBNjNGCi06MTBGRjQwMDA3M0ZBMzQzNTlEREQwMTM1OUQzM0FCRDU3NENFNkU1MERCCi06MTBGRjUwMDBEMzM5NzdBOTlBQUU3OUMxMDVBQTdBMjEzN0ZCQjQyQzk3Ci06MTBGRjYwMDA1NkJENkY5MkMyQTU1NDUyOTJEOUZFNkFCQ0VGQTE1RkYyCi06MTBGRjcwMDBFQjBGN0JFNDBGNDFGRjIwRkQxRjVCQ0YwRDk4NUYzRjMwCi06MTBGRjgwMDA5N0QyMUZGMkVCRkY0MkQ2MUU4NTUwOTQ5NjBGRUFGNkU5Ci06MTBGRjkwMDAzRDg2NzFCNUVGQ0EwNzhGNkFFOTdGOTVGNjI5RDU4NzQ3Ci06MTBGRkEwMDA0RjgwM0NBMTc2Q0M3QTkwMEZEM0ZBRjM3RDg3QkY2NzYwCi06MTBGRkIwMDAzQjQ2QzhBRDc4QkIyMTdFNUZERDlCM0NFQkE2MjdGOUI1Ci06MTBGRkMwMDAzRUJCNTczREE5RDk2N0JGMDVEOTRENjg4RkFGNDVCRjI3Ci06MTBGRkQwMDBENjc0Q0VENzlGQzJBQjUxRTA1NzdEMTZGNUZGNUIxNEE4Ci06MTBGRkUwMDA5MDkxMTRBRUI3MDA2RUZBOURCNzJDODNEMDBGNzIxN0E0Ci06MTBGRkYwMDA4OUU4RjE5RTZCQzhEQ0Q0RTE3RDk5OTg4NzU5NDVFRDdECi06MDIwMDAwMDIyMDAwREMKLToxMDAwMDAwMDcyNzhDRUUyRjZDMTFDRUUyN0Y5Q0ExODM4OTBDQkZDMDQKLToxMDAwMTAwMDIzQjk2OUYwRERBQzBFNzZFRUVCNzhFQTU1REQwQkYxMzUKLToxMDAwMjAwMDdCRjgyN0Y4REQ3M0ZEODc2MTlDMEE5MzY3QzkxM0Y0OTkKLToxMDAwMzAwMEQ1NjFFRTdGMjIxMzU5RkUyNzUxRkM4M0UzRUY2MUVDN0IKLToxMDAwNDAwMDFBODdDNTRENUY5NDAyMDFEQzY3QkI0RDVFRDg2NzBGMTAKLToxMDAwNTAwMENBMjQyNjM3RTgzNzU3MjgxRkUyNTQyNzM0N0E2NTIwMDgKLToxMDAwNjAwMEU3OTFERDE5RTFDNTc2QzQ1NzI4MDVFMzA0REZGMUJCNEMKLToxMDAwNzAwMDdGQ0FGNTlEMDQ3RTEwRURCRjZEQkUwNjQzNzgxMUYzNzcKLToxMDAwODAwMDI3QjBERjRCNzk5M0QzRTVBOURCOEQxMUQ4OTcwOTNFRDMKLToxMDAwOTAwMDNBOTkzMEUzQThEMzgzRkVGMDMzQzg2Rjc3RENCNDBBMTMKLToxMDAwQTAwMENBRDJFMTU0Q0Y2MjBBREZFNUFBMjhFRUVGMjlGRUNGREIKLToxMDAwQjAwMDAxREU2QTRDMTRGRjc0OEExN0IzMDNGRDkzODExOUZDQTcKLToxMDAwQzAwMEE5REM0OUU5MUZEQ0QzNzkyNDAxQ0Y1ODg5N0RGRjVEODQKLToxMDAwRDAwMDRCRTA1MzE4RTdCMERDOTFFMzA1N0MyODFENzg2RThGNjgKLToxMDAwRTAwMDU4RDFCODIxMTcwRDNERkIwMzA1MUVDQTEzQjJFRkM2NDgKLToxMDAwRjAwMDdCNzg4RDQ2MkZFQzJGQ0EyNTQ2RDdEM0E5RjdDQzgwMjUKLToxMDAxMDAwMEQ4RTIxQ0Q5OUYxNkQxQTlFMDk2M0MwMEI3QUQyQUQ3RkEKLToxMDAxMTAwMDRERjlGMUZGMDBBQTQyRkJEOTAwODAwMDAwMDAwMDAwNjkKLToxMDAxMjAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRTU3RDBCNzg1NEQ1MDQKLToxMDAxMzAwMEI1RjAzRTczNjZDRTRDOTI0OTMyNDkyMDI0ODQ4NDk5QUUKLToxMDAxNDAwMDg0M0MyMDIxNEM4MjIwMkFFMkYwMDg4RDFBMzBCQzE0MTUKLToxMDAxNTAwMDMwRTJFNDAxODQzQzIwODBERUM2OTYzNjAzRTFBNTQyMEQKLToxMDAxNjAwMDFCMkMyQTJBQ0E4MDQwRDEwMjA2OEI4MDFBRUMyMDZBRjYKLToxMDAxNzAwMEYxNkEzNTZEQjVBNTVBQjkwOTUwRTU0RDBDM0U2OEVCRUQKLToxMDAxODAwMEFERkY1QTZCRUY5RDk5NzM0ODBBRjZERUZCN0RGREJFMEQKLToxMDAxOTAwMDNGREVERUNEM0VGQkJERDZEQTZCQUZEN0RFNzNERUUyRUYKLToxMDAxQTAwMENEOEM1NjE5NjNCNkRFOENERDAwQTlEOTk5NTMxQ0M5RDQKLToxMDAxQjAwMEQ4QjdGODc3NEIzMDY1Q0NDNzE4NTQ2OTU0RTA5RkJENjkKLToxMDAxQzAwMDIwRjcyM0M1QkZDREM1RjgxRkU0RjdGQjYyRkMwRjQxNDQKLToxMDAxRDAwMERFNkFCQUY0QzExNEM4NzcwQzM2QjlCNzQwRDFDNjcwMUMKLToxMDAxRTAwMEU4M0E5RkIxRjdCMTFFRjRGRkI0MDVGMkIxRjQ3RDM1RTIKLToxMDAxRjAwMDdFNEYwOEU3RUQxMzFFMzNGOTFCQTE3REYxOTg5NzE3ODkKLToxMDAyMDAwMEIyRUIxODdCNzZCRUREQURDMjU4QTVDQ0E5MzE5ODVGQTQKLToxMDAyMTAwMDM5RjM2ODJDOERCMUJGOENGRUZCQzEzNjI3NjNGRDlEODEKLToxMDAyMjAwMERFQkVDRTYxOENERDFCNjc0QUY5ODBFNkUxQ0Q5RTA0MUYKLToxMDAyMzAwMEYzNjYyM0UzMTg0QkJDNzJGRUM2NzUzMEI2QzZDNDg2OUYKLToxMDAyNDAwMDMzMzZEOUMxOTczMDFCRDcwNUVEQTYzMDhGMDVDNzk5MzYKLToxMDAyNTAwMEM2QkMxNjFDRjc3NzE3MzQwRjhCODJENDA0RTUzMERGNDkKLToxMDAyNjAwMEJCOTg4RkJFQ0Y2MDdFNEFFRjY2MDFBQTdGMEY2QkEzNUIKLToxMDAyNzAwMEZDNkYyMzcyOTNFQjYxN0U5MzFFQ0Y0QzY3RDBFNjYyRDYKLToxMDAyODAwMDY5REI3MDJDRkY4N0Q1RUI3NkMyQjgzNTM2RUZCREJEODQKLToxMDAyOTAwMEUwRkJGOTY0RUY2NzdEMTBFRUVCMzlEQ0FGMzZERjQ5NDgKLToxMDAyQTAwMDBBODdERkM1RkVDNTIzNzBEREUzNkNDRUVCRjI1MjE5ODEKLToxMDAyQjAwMDdCRERDNDJBOUJFRDUwMzZBRTM3Q0Q5Rjk5MURFOTkzNjcKLToxMDAyQzAwMDA3NzdEN0NGMzJDNkEwNUQ2QjY3NTQyRTFCODI3OThGMUMKLToxMDAyRDAwMDNEMTFENkZGM0Q4MUMyRUY3OUFBOEI3MDlEMDVBQTlEODUKLToxMDAyRTAwMEY1MDJGOEI3M0E1NUJGMTVDNjJDMUM1RERBMTdENzA1Q0QKLToxMDAyRjAwMDdGOTEzRUMwRDM0NDhGQ0ExMENGQkY1RTBBNUZBMERFOUQKLToxMDAzMDAwMEFGRjM1NDNGRDJDNEM0MERFMzRGNjNGQkEyRDE1Mzk2NjUKLToxMDAzMTAwMDQ3QzNGQUM3N0ZEMzc2NUQwMEQyQzI3RTk2RTM2RDU5OUMKLToxMDAzMjAwMDdDOEM2RkUxN0Y1RkIyOERFMzYyMjBCRDJENjE4Rjk5ODAKLToxMDAzMzAwMEMxRkM2RjFCQTAyRjJGQ0E4MUJDMkQ5ODlGQzhDQ0MxQjgKLToxMDAzNDAwMDcyMThGNzEwQzIwMUU4QTdGRUNGNzlBM0RFMDg2OUM3Q0IKLToxMDAzNTAwMDU4OTM1QTBDRUIyRTcxNDZGNkZBMzQwMkIyODNEOEEwQTkKLToxMDAzNjAwMDZGNzFERTZBNDlCNEQ3REUzMzdDQkY2RTcwOEY3QTAzNUIKLToxMDAzNzAwMDY4RjI3NkM1NTNFRTI0QkE3MDZBNDhGRjY1NjZFNjY5OEUKLToxMDAzODAwMEVFQTZEREFFNzQ0NUQwMEY2MDM3OUVCMTNCQzQ1QzNCM0EKLToxMDAzOTAwMDhCMkU2OTE3NjFCRDRGM0FCREYzQjE5RjQ1MTNGRTMyRjUKLToxMDAzQTAwMDBCRDdDN0NDRUMzNzQzMDE2RUYzREYwM0I4NDFGOUYxNEIKLToxMDAzQjAwMDA2ODA3QzI2NjMyNzFCNkNDQzYzNjVFQ0QzMDYwN0U1QkYKLToxMDAzQzAwMDRGMzUyNDUwN0FBNkMxNDlFOUI5ODYyQzJBQkZEMEUwMUUKLToxMDAzRDAwMEE2RkMyMTY3RjFGN0IxREZCMkQ1OUY5QkJEMzk4Q0FEOEIKLToxMDAzRTAwMDBBOTM3OEU0RjM1ODJDRTg3ODU1RjJGMDNGQkE2MUJDRjAKLToxMDAzRjAwMDU1RUY1QTI4NUZEOURDMzQxRUMxQjEzOEY5RjhCMjA4N0MKLToxMDA0MDAwMEY4QkVGODM5QzU4RERGQUI1QjNDOUExREU2MzNGQjBEQkEKLToxMDA0MTAwMEVGNEEyNDlGQjlFRkI2NEQwNEYwQjFEQUNCMEFGM0UyMEMKLToxMDA0MjAwMDE2MUE1MEJDMDJDNzFCRjZFMUM5Nzg4NERGNjcwRDIzOUEKLToxMDA0MzAwMDY4M0VBNzFCM0MzNDFGNEY0QkZCNUI3MUQwRkU2QzQzRTcKLToxMDA0NDAwMDIxRTUzRjcyMTYzRjhDRjUzREVDNzMwREVCNEZEOEQ5OEIKLToxMDA0NTAwMDZFNEU4MkYyMDI4RkUyQzFGRDNEQ0FDM0ZDN0VDMERGNTgKLToxMDA0NjAwMDA2OEJENzhCNzRCMzIxRDFFNkM2RkQzRTdBRjBFNEE3QTQKLToxMDA0NzAwMEVGODM3MTNGRTlFRjdEMTRFOTdBNUE2Qzc5NDExQzdDNzYKLToxMDA0ODAwMDlGMzhBMkQ0OENGNUVFRkE4NjMxQ0M0QkZBQkVGQUJFNzgKLToxMDA0OTAwMEU2RjBBODE1NzgzOUZGOUE0MjcwM0FCRjJGRkI4RTlCODEKLToxMDA0QTAwMEEwQkZENzhFQTg0Qzg1Nzk3NTVFMzZEMUJDM0E4Rjg2QjEKLToxMDA0QjAwMEZCOTkxMkFDQjdFODI1OTVFODdBRDE2MENEQ0Y1Qzk4NkUKLToxMDA0QzAwMENGRUVDMzcyNzA5REQwMTlBQzNGNEI3MUIyN0FBMEJGMTIKLToxMDA0RDAwMEIzQkJCRTlGODA3ODkwRTM5RjhENkRGRUVBMjNFNDdCRTMKLToxMDA0RTAwMDlGNzBCRUM3NThGM0E3NEYyMjVGRUM5N0UwN0UwODcyNUIKLToxMDA0RjAwMDE3MkM2QzNBRUQ1MzU2MTczMTE5RTg2QkJFQzZCQzNDNEQKLToxMDA1MDAwMEVGQ0RDNkZDRDk3MDc2NkYzMUU0ODdFRjRFMUE4M0ZCQ0UKLToxMDA1MTAwMDA4Qzc3MzY2MDZGOTVBQzZFRUM3NTM3RkU4MEM4RUI3NTQKLToxMDA1MjAwMEEzNzlGNjQ3NEY0MkZFQkNERkU0QjM0NDQzQ0E5QTJGOTcKLToxMDA1MzAwMEJDODI3Qzc5QUJEREJEOERFMTNDQ0RFMTM4Q0Y4NzJEMzAKLToxMDA1NDAwMDdDNUVCRTZERTFFRTZENEVFQ0NGNEY3QzAwQ0EzNTJDNkIKLToxMDA1NTAwMEFGNzlGMTg5QkVCODhFNTcwMTA2MjMyMEZGRUFCQTA4QTkKLToxMDA1NjAwMEUyNzdBRjVBRENDN0VBQjFEREQzQkNCRjlGRkZFNDgxQkQKLToxMDA1NzAwMEUzMDczMDVENUI5QkZGMDBBNEJGNzNDNjEyQkMyQjFFNUMKLToxMDA1ODAwMDk5MzcwOERCNjcyNzAxN0E4MDNGRkU2MkJGMTIwOENCRUMKLToxMDA1OTAwMDY1NkNGMEZBNDNDQjEyNjFCQzIxMUJEQjREN0QyMUNEOTQKLToxMDA1QTAwMERCQUEzNDYyOUE5RDVDNzg0NDg1RkU4RjNBOUQzNDhGMzUKLToxMDA1QjAwMEExM0I1RDZBMTI2RUQ3QkVGRThGNkU0OTIzQzAyOTg4QUIKLToxMDA1QzAwMEJGNDEwMjdGMzlFQjNGMUZEMzE3RDI1RDdEOUIxN0M1MUIKLToxMDA1RDAwMDQwRjkyMEE1RjlDQzUyMTdEMkY5MUZGMkJEMDRCRjI2NkQKLToxMDA1RTAwMEVBRTdBNTk2MjlCRkJGOUJFMTNBN0M4OTM2OUM3N0E5QUIKLToxMDA1RjAwMEU2QTZGMzA5OTY2QjgxRkNGOUJENjk5QjFGODIzNUVFNzcKLToxMDA2MDAwMDMzRjkzNkQzRjk1NTY2NzM2RjQzQkMxN0ZCOUU0MDdDQjQKLToxMDA2MTAwMEQ3NDI3RDFGRTQ2QkYzN0M1MTM3NDI3OUVEMjcwM0RDMzEKLToxMDA2MjAwMDQwNTEyQ0Y5OTlFRjE1MjIzQ0U2RUY3RDc0N0M1RkE4RDAKLToxMDA2MzAwMDc3N0UyNDczMDMwOUIwQ0E5NzJFOERDNzc2MkM5OTMxMjMKLToxMDA2NDAwMDY0MDlFN0Y3MzZDNkNGODQ3NjBGRTc4QzE5ODZGNDU1MzAKLToxMDA2NTAwMEFDMzZEMzM4NkMwMTFGRTc3MTcxRUVCMTM2MDA0RUJDNzkKLToxMDA2NjAwMDIwNTVBOEY3MzA3Q0M2RUZCMTJEMzE4NzkyNTgxMDNGNDYKLToxMDA2NzAwMDBCNUE5NkJBQ0NEMEZFM0FBRkNEQURFMkJFNzFGOTEyQUMKLToxMDA2ODAwMEVCRUNDMTczMTRDRUJGQkZFMTdFNEJENDQ0QkY4RTI5QzcKLToxMDA2OTAwMDI5QzVERkUxRkNEM0M0NzkyNkZCN0I1QzYzQkUzMEU4NkYKLToxMDA2QTAwMDI3MTlCRTJCNzgzRTZCRkNEQ0RFMDY3Q0E1M0UzRjc4MkUKLToxMDA2QjAwMDZFQzNCOEUxQUU2MUQ0REU4MzdDMzgwOTBFRTkzQzk4QTQKLToxMDA2QzAwMDY3RDJFMzU2M0EwN0FFNzVGQzhCMTZGQjZBMDVFODc2RUYKLToxMDA2RDAwMDQxMzhFNzYzNjNDNEY5M0IzREFFRjE2MDFCQUNGNzYwQTIKLToxMDA2RTAwMEI4MzdERTA1RjU2NjhCNzM5Rjk5REQ0RUU0RUY1QkMzOEIKLToxMDA2RjAwMDNEN0Q3MEZDMUE1QjQ3MEFBRTAxQ0VENTI0Q0NDRjU3QTYKLToxMDA3MDAwMEJERkRFM0QzRTg1Q0Q1QzkzMzU3OUI0NzZCQjhDNzg1QkMKLToxMDA3MTAwMEVEQUZCNUJFOTFERjJFRkVEMkM0RjI4MDBFMTYzRjZBNTkKLToxMDA3MjAwMDI1N0VEMTg4N0MxOUQ2RDUxODM5REM4NjdDODNCRDYxQkQKLToxMDA3MzAwMEFBNzkwQkNFRDk5Qjc5Q0JBRUZFMTY0N0U2MTM1RjY5M0IKLToxMDA3NDAwMDY0QUM1Qjc4QkQwNkZCREYwQkZDMjYwMEU3ODQxN0Y4ODIKLToxMDA3NTAwMEMwQThDQjFEMkFBN0Y3RDZDM0QxRDcyMTlGNjU5RTQ4MzUKLToxMDA3NjAwMEEwOUY1QjJFOUI5ODM3RTQxQzM0RjYwM0Y4RjIyMDFDMDQKLToxMDA3NzAwMDQ3QjMwOEU2MEQzOTU3M0QyQzQ2QzM3RENCRUNCMUZGOUUKLToxMDA3ODAwMERBQkFDNUZDNDcwQUZDOERFQzNDMUFDMUVDMDgwRkY4M0MKLToxMDA3OTAwMDZFRUY3OTVEMDdDNUJBN0U4NUVCODI3NDdCN0FGMTY0NzIKLToxMDA3QTAwMDg0RkZDRDVGMzhDQ0I4QkU5QkNEOTM1MjUwQUU4MTc5REIKLToxMDA3QjAwMDRGQzc3OThGRkFDMkE0OUZGNzM3RTFCQUZDQjVDRUZGRDUKLToxMDA3QzAwMDdFODVGOTRDQjgxRjNGRDdGQ0I4MUY1QkYwNzgwNDM4MjIKLToxMDA3RDAwMEI2Q0NDQkYxRTNCRURGQTdGMUJDMkY0QTIzQjlCNjI1RDcKLToxMDA3RTAwMDkyRjk5MDhGQjQ0QzhBRjdGQjVDQzgwRjE5OTc3QjdCMEEKLToxMDA3RjAwMDMzNUUxRTI2REFDRjg4QTdGNjdEQUQwMDUyRTQwNzc3NzgKLToxMDA4MDAwMDg3OEJGRUVCREUxOThDRTU0QjkzODg4RjM0NUFGQ0FCNUIKLToxMDA4MTAwMDUzQjFGRjFGQTlDNDg3OEYwQUJFQkQzRTI2NzBCNzBBMTkKLToxMDA4MjAwMEZEQUVGRjNDOUVFMTM4NDc1OTIwNjkwMThFNTMxOTRFQjkKLToxMDA4MzAwMDdDRjcyNjkzRTlERTQ5NzZBQ0U3NDk4QzA1NzhFRkZCMzcKLToxMDA4NDAwMDg3NEFFN0M0RkEzQ0M4REI4OTZGNEY2Rjg2RUZFQjI3MTYKLToxMDA4NTAwMDc5MTJDM0IxOUY0OUYxMjY5QThGQ0FFQUU4QkI4QkI3RDgKLToxMDA4NjAwMEZCQzhDMkVCQ0QxNEY4RkE5M0MwMEZFQzZCREFGN0RFREQKLToxMDA4NzAwMDg5MTE2NkE0REI0REFFQjI0NzY4M0YzMDRGQTIwMkYzNDgKLToxMDA4ODAwMDdEQjIyMjlEMjFERjlDNTk3NUFCOEJFOEE1RTk3MUUyMTEKLToxMDA4OTAwMDVGRDMwNTBFNjQ3RkQ4QzAzNjFDRTU2NkZFMzc2M0Y2NkQKLToxMDA4QTAwMEI2MzBDNEU3QjRDQUIwNzYzODU5RDlEMUNBNjU5MTRFQ0EKLToxMDA4QjAwMDY4M0ZDREFCMDZBQ0MwNEZEOUQ0MDI0Rjk3NUM5NzhBNDYKLToxMDA4QzAwMEUzN0E2OERDREFFNjgxNjkyNzQzRThCOUNDMEE3QzAyN0UKLToxMDA4RDAwMEZBN0YyMUNDRkIwNENERUI0MDFFOTUxRjAwQTFFNjVCMDcKLToxMDA4RTAwMEQ4NEZDNzJCRDI3N0UzQkU2MjE1NzE0MjdGMDk5NDIzOUMKLToxMDA4RjAwMDFFNUVFQkIwOTE5Q0RBMTMzRDM0MjJGQzg3MDgzQTQ1MkEKLToxMDA5MDAwMEJDMkNFMTc4MDc3OThERjI4REQzMDc5MTNFQjNDOUMyMzMKLToxMDA5MTAwMEU5QzZCNzI3OENGMDVBMzhEOTQ2NzhFRTlDMUVCRUQ5NjYKLToxMDA5MjAwMDBBRTVGNzBBQkVENTM4M0REQ0EzNDBCREM2OTdBQzdFQ0MKLToxMDA5MzAwMDkzOEJGNDI0QUFFNzNCMTg0OUZERDY2ODNDNUZGMzYyMjkKLToxMDA5NDAwMDNBRDFEMzNFQ0RGRkRDNzYyQzdGMkQ4Q0U4QTEyNjhBRDAKLToxMDA5NTAwMDhGNUJGMzRBOTJBMDM3OEY2QjA1OEU3QkQwNEE3NDUwMjEKLToxMDA5NjAwMDEzRUU4Q0E2RjJGRjhDMjMzQTE5NjdGM0JFODJGMDAwRDcKLToxMDA5NzAwMEJBQUI0MzM5QTI0NjBCNjRDNDAwN0M4RjA5QkEzQTA2NkQKLToxMDA5ODAwMDZEMTA3RkJFQkE0ODlBMzc2RDc5Qzg3QjFCOTNCNzIwMkMKLToxMDA5OTAwMDNFQkQxQTJGNjczRjUwQTlGQzk4ODM4RjdGNkMwRDFGQjcKLToxMDA5QTAwMEJGRTRBN0Q1RUYzMkMwREJCMUUyRjE4OUIzNjExRUM3NjYKLToxMDA5QjAwMEVBMjI0ODZFRkM3M0JEMUFEMEEyNTBFRkU5NzgyQzAzRUUKLToxMDA5QzAwMEVBNUQ1ODcyNjJGODA2OTg3RkRCQjI4RjUzOTAzRTRBMTgKLToxMDA5RDAwMDk2RDUxNjYxQkI5MkFBMjUxM0YxRENFQzY5NUY5NkQ0MUIKLToxMDA5RTAwMEMwRTYwRkQ5QzcyNzVDOUVERkUxN0FCRTc1NzkzRkM0QTgKLToxMDA5RjAwMDdEQkYyMEE3NkQwRUNBQ0YxN0I0RDY2NzUwRkY4ODhENzQKLToxMDBBMDAwMEYzMUVDNUVGMTc1RkZFNkMzQjk3QUIzQjMyRjAzQzk4OTMKLToxMDBBMTAwMDZGRTZGNDIxQ0ZENTA1ODJGRTU2QTU3QThGRDEzOTExMjQKLToxMDBBMjAwMDFFOTg4NUU3NDc0NDRFMkJFNzc3NEJBRThEQ0Y5RjY5RTUKLToxMDBBMzAwMEQ5QjY0RjgxNzFBQUMzNUJFNjUzQUFGQTczQjE5RkIzQ0IKLToxMDBBNDAwMDRBMjA0QTQ5MjNGODc5NzEzRjlENzMwNEEyMTBFRTVFNTMKLToxMDBBNTAwMDEzOTdFN0FBNzdFOEQ3ODU3RjY2OTg1NzM1RkUwM0RBQkMKLToxMDBBNjAwMDU1MzdBQjlFMzBDNDM1RjM2QjM4RkY2QUE2MDVFQkJCMzgKLToxMDBBNzAwMDgyNzg4MjdFMDg0RkNDRkVFNzU5M0YwNEY4NTczRDM3MTUKLToxMDBBODAwMDMwMUZGNTg3RUE5ODAzM0ZCOTg5RUE0MTNCQjk0RkQ0NTMKLToxMDBBOTAwMDJCRjM3MjNENTdDRTg3QUZFRjlDQTBGRjczOTJGRUE3NUEKLToxMDBBQTAwMDZCNTI5RkE3RjEyRkJDREM4N0M2M0YzQkM5OUY4MUYwRUIKLToxMDBBQjAwMEJGQTA4ODdBQ0Y1OTc5M0RBMDA2MzNDRUYzMDU0RTRGQkIKLToxMDBBQzAwMDhGNTk3Q0E2NzBCMjBCMzBBMkU3RUFCOEU2RTEwODE3QUUKLToxMDBBRDAwMEM5ODc2MDBFM0UxM0Q0M0ZCQjNCODlFQTRCQkVDNThBMzMKLToxMDBBRTAwMDE5QzM3NkQ1QkIxM0I3NzBGOTRDRThCMzM4NTFBODVGN0EKLToxMDBBRjAwMEY1MEJERTNGRTY3MTFGOUU3OTNFNDk4Q0M3RTU2OTIzMDEKLToxMDBCMDAwMEZFOENFQjRENEUzNUQxN0ExRjkzRkMzQjUyRUU3Mzc3NDIKLToxMDBCMTAwMEMyMjQ4MDdGRTYwNjRENTdGRjQyQTQ3NkFGMDdGQTFEMzgKLToxMDBCMjAwMEU4RDc3Rjk3RkQwRjRDNTU0ODNFRUI2RkMwNUI1RkI1MzQKLToxMDBCMzAwMEUzOTAxNUY3RDNCMzhDRjZBQjcxNUVFRTU0QUUzNzNFNEYKLToxMDBCNDAwMEZGN0MxNzlFNTQ4RTM3MTAwMzI1N0QzOEI5MUM2RTQxRUIKLToxMDBCNTAwMDM4RkZBOTBCMUZGNzI1MDE1RkFENDYxOEE0MDZFMUIzQzYKLToxMDBCNjAwMDJGQ0Y5Qjg0RkNGRjAyRTZGMTVDODg4MTdDMEVDQTQxOUEKLToxMDBCNzAwMDFDREUzMjJGRTE2Q0E0QjM2NTdGOUE5M0Q0MDZFREVGQUYKLToxMDBCODAwMDQ2RjgxMEJGNzdGNzQxN0FFQzkyNUYyQ0EwOEZFNEEwNzMKLToxMDBCOTAwMDNFNUEzOUY0NjQzQUVBQTk3NTAzRTEyOEU4NUFDRjlDMzEKLToxMDBCQTAwMDBENzkzNkRDNEY3MzM3RTZEOUNBNDJGMEQwQjg2M0U4MjYKLToxMDBCQjAwMDExMjdDMEY5REMwRUIzMUJEOTcyQTNEOUZGMTM5NEE3NzgKLToxMDBCQzAwMDFCNzdBOENEM0U0NkU1MzY4NEVGMzlGQkVCRUY2MUJERTAKLToxMDBCRDAwMDM5MUI2M0YyNTE1RTk2RURFNzZFQjg3RjYwNDUwOERDMjUKLToxMDBCRTAwMEIzNzdFOEYxMzBCODU5OUYxRjcyNDA5RjlGOERCQzYxNjkKLToxMDBCRjAwMEQ4Nzc2Rjk3MTdEMEU3ODcxRUQxRTc1OTA3NjAwQkYwQkEKLToxMDBDMDAwMEEwREEzODlFRjY4RjcwMUY3MTAyOUVGQUZCNTUzNzdFNzAKLToxMDBDMTAwMEVBNkY5RjNDNjUwMkNBMTcxQjU1NzczQTk0Rjc1RjUyRkIKLToxMDBDMjAwMDdDRkI2MEM4OUZEQTM4REI4RDY4QUU1NDdERjM3RjA4QUIKLToxMDBDMzAwMDM4QUNGQzc4RkMxMTNDMEZDRkIyRTYzRjRDMDAzQ0NDMEEKLToxMDBDNDAwMDY5NTlBNzk5OURCODZFM0REREVFMzMwOTdBN0Q5RURCMkIKLToxMDBDNTAwMEQ5RTZGOUY1RTU1N0VFRUJBNTAyOEYyQzJCOTQ5RThDODcKLToxMDBDNjAwMDc4ODc3MUVGRjRDMDg0NkFFQTE3MEYzRDA5NDc2NjY1MUIKLToxMDBDNzAwMDExMTAzQUMwRUM4NkU2NzUxQUNBNkQ1NzFGQzdDN0U1NTIKLToxMDBDODAwMDQxQkJDNzg5RjAyODFEQzFDQjZFQUMxRkNCNEUwQzg1NzQKLToxMDBDOTAwMDdGQUNGOUVENzg5Qzc3RTlDMzBBQzkwREE1QkZDQzdDODAKLToxMDBDQTAwMDAzQ0Y4MUY2M0QzMzZFQTNGNENFNDI1QUJGQjRFN0NERjUKLToxMDBDQjAwMDZENTEwMjkxOTA3NzhDNzAxRTY4ODM3NkIzRkQ4QTFCMEMKLToxMDBDQzAwMEU3NURCNkRDMUFFNDY3RjBCRjhBMzU4Njc5QUMwRjI5OTgKLToxMDBDRDAwMDg3RjlDRjNENzBFOEFGMEFGNDVGQjk1MURGNkUxRUYwQkYKLToxMDBDRTAwMDU5RTQ1RjU1NUJCRkI1ODY3RTk3N0FFMzhEMkQ5QjU1QTIKLToxMDBDRjAwMDVDRjc2QzM5N0ZERjI4ODZFQkJBOTE1NzY1QkQ4NDdDNDEKLToxMDBEMDAwMDczMTIzMzcwNkU0Q0VCNURCQzIzMTVEQkFERTdFRDgwRTkKLToxMDBEMTAwMDVEOTZFMjdBNkJFRDlBMTNENzVCNkI2MzgxMDg5OEM3OTcKLToxMDBEMjAwMDkxNDhDREUzODBFRjk3MzY0NDkyMUQ2RDhFMTVFNEM5NEUKLToxMDBEMzAwMDdDNEE1OTU4M0VCNjczNDc2M0JCNEZERkU3RjZCNERBRDcKLToxMDBENDAwMDM4OEVFRkRBNEQwQUU5NTFCNTY4RkNDNEZDQjMzQzNGN0MKLToxMDBENTAwMDhGMDU2ODFENDgyNzlFRDBGNUY5RjU3OUQ2QzRGNUFGMDMKLToxMDBENjAwMDFBNzNFMDEwQzJBMzhBQjU3MUZEMDlGMEU4OTFGMDAzOEYKLToxMDBENzAwMDc4RDVDMDNBOEZDNkEyQkM2NTY4Q0ZEQzVFMUM3NzgxOEYKLToxMDBEODAwMDlEQ0I0RjBCMEU3QzZCMEQyRDk3N0FBMEQ0NTNBNTdENzgKLToxMDBEOTAwMDc3NTM0NjcxMzg4RUIzNDJGMTNDNjE4Mzc5QUUxMEYyREQKLToxMDBEQTAwMEI1NkY1RDE4RDFFRkNDQ0RGQ0JDMDEzOTM2MDNFMUIyOTMKLToxMDBEQjAwMDdFNURBMjFCRTU4Qzk5MjA5Nzg3RTFCRTk5MTc0RUY1QzEKLToxMDBEQzAwMDQwREUyNUJCNEMwN0M4RDU1QjVDNThCRjM5ODBFN0M2MDEKLToxMDBERDAwMEZBNDc1RDI0NDc4M0ZDNEI3MEU5NTgxQkU2REZBMkEwNkQKLToxMDBERTAwMDFDQ0NFNTk4RjVFQjMyNDkwRTdGNTU5RTUzNkJCOURDNzAKLToxMDBERjAwMEQ1OEQ1QzRDRTVBQzBGOTdFMzNGQzJBNTg0QzhDMTVGQkQKLToxMDBFMDAwMEY0RjY3RTlBREEzQkI4QUU4QTY1OUU0NDNDNzcyQTI2OTEKLToxMDBFMTAwMDZCMjZCNDU3QjFDQUI4NkI5MjFGQjYwOTM5QjIwM0Q2NjQKLToxMDBFMjAwMDhGRUIzOEE5MTRCRjY1MEE5MTQ3QkYxNkU3QzhGMDMxQTgKLToxMDBFMzAwMDlFRURBMjlFMUJFQjU1OTgyNjNENzQwQjhFRjc5OEM5MkMKLToxMDBFNDAwMDg5RTM3NUMxREJFM0M5QzA3OTlDNUMxNzk2OEY3NDM2NjIKLToxMDBFNTAwMDdDMENCNzE3MURDQkUzRkMzREUyM0FFNkYxRTM3OTlBNEYKLToxMDBFNjAwMEM2RkI2NTY5MjY1RDlBMTAwRUY0MDdGRDlDMkNFMEY2MjIKLToxMDBFNzAwMEVBQzhFQjhBQzk0RTA3NjczNUYxNzlFMzNBRUNBMjlGREQKLToxMDBFODAwMDBBQURGODNGNkZFRTY2M0UxMjNFNkMxQzk3MTc0RTJFNzEKLToxMDBFOTAwMDU0QjZGMDc5MDE3RTIxM0ZGQzkxMzBCMkVGOUQxNEU3MEEKLToxMDBFQTAwMDhGODQzM0QwQ0QzMEIyRDMwQjdFQjU0RUQwQ0IzQTBCM0UKLToxMDBFQjAwMEE3MDNERjNDQUUzRjA1RTk4NTExM0RBQzE3N0FENjRDNjAKLToxMDBFQzAwMDgxNUZCNjk2Q0JCNTQwMkYxQ0NFNkIxMzA1QkQzMEY2QjcKLToxMDBFRDAwMDM3QTQ4NzAyMjc5N0IzQUY1MTVGMDJCQzBGNDhFQjdENjEKLToxMDBFRTAwMEE1REUyNEYxQ0RDQ0ZFNjFGRkNDMkY1MkJCN0ZENzNFRDcKLToxMDBFRjAwMDFGOUM5RjU1MkYzQzFBQzVBMERFNjk3MzUzQkMxQkRBOUIKLToxMDBGMDAwMEQ3NkM1QjExRTU4MUY0OTREOTE3RTU4MEYxNEZGQkQ1REYKLToxMDBGMTAwMDQyN0YzN0YwMkU0RDkzNzY2NThGNUQwMUZFMzMxRkZGQzQKLToxMDBGMjAwMEU5NDQ3OUU3RTE4OUI4QkVBRkI2NTkxQ0M4MTIxNkVDOUUKLToxMDBGMzAwMEIwOTJGRTM0N0ZFRjNDOTJCMzIxREZDRUYzQUIzRTU3NEQKLToxMDBGNDAwMDMxN0Y0MDZGM0ZBRkZBRjlBM0YxNEU4MkI3MkZDOTk0QkEKLToxMDBGNTAwMDgwNjkyMDg5NDEzQTdGQUJDNTFENDBCQkY0MDdBQTFCQkQKLToxMDBGNjAwMDg2MDFCOUI5NjMyNUNFQ0ZEODFFRTc3MTE5RjBCREEwQUYKLToxMDBGNzAwMDU5MkRENUEyQUYyQzVGMjBGOENCODJCRDBGN0Y4RTc2ODYKLToxMDBGODAwMEJEMDUwNjdCN0RBNUYwNUIxOEVERjU5M0QyMjI3QjdEMzgKLToxMDBGOTAwMDlBMERGRkI4OUU1RDhGNzIxMEMwQzUxREMwN0QwQkYzMEEKLToxMDBGQTAwMDQ5MjczMkUxRjZERUM2RTcxRUNGNkQ0Nzc5NjFFQjNCOUMKLToxMDBGQjAwMDUxNEE0RUQwNUUyRkZEMTk5RENERTU5QjVFNzFGNkJDNkEKLToxMDBGQzAwMDFGMkYwOEJCNkQxMDVGOUM2RjM5MEYyOEM4MDM0MDQxNkQKLToxMDBGRDAwMEU3Njk4RDI1MTA3NTEzQzBBMzY2QjM4NUY4NENDREFFQjcKLToxMDBGRTAwMDY3QjczRjg5NzRGNjI3MkI5REU3RDVCQkRFRkNDMzhEMjEKLToxMDBGRjAwMDI4RUZFRUIxRjQyQUUyQ0JCMDJCRjE0MTNDMkQ3MDcyMTgKLToxMDEwMDAwMDNCOTlDNDRCRDUyRkRGRDQ5QzgzRjlGNzI1QjE0MUZDMjQKLToxMDEwMTAwMDU0RUYzOUE0QjFDMTU3QzI3MTZDRjMyMUFEQ0RERTBEQ0YKLToxMDEwMjAwMDlFOUFEQkM3OTM5REU4QjlBRjM1REMwN0E3NUY1MzU4OUQKLToxMDEwMzAwMDFGRDc5NUVEMkIzN0JGMTk4NUYyMThDMjA5Q0YyNTg5MjcKLToxMDEwNDAwMEFGMkVGQzE5RUE0M0ZGMTM1RkI5OEVFQTM5NTBBRkU4QkYKLToxMDEwNTAwMDA5N0ZGOTc4NzZBMDVFQkUzRjkyQzVDMEY4OTUxRjU5MEEKLToxMDEwNjAwMEZENDU4OEQ3REQ4QkEzNzAxRDlGOTlFQjM4OUQzRkJENTMKLToxMDEwNzAwMDIyMUVFNUJBNEE4QjJGREU0MTI5RkY1RUY5Q0NGRDQ0RTIKLToxMDEwODAwMDdGNzM5NUJBNzg0NzBFRDE3N0EyODk2NDA2NUYyMkFFNDYKLToxMDEwOTAwMDZGRjZDNjY5QjRCRTM5Q0M0QkY0NTdGOUI0NUFFQzg3MzUKLToxMDEwQTAwMEY0NEIzMzJCRENEM0NEM0VGOTU4RjBBNUNGQjYwMDUyMkMKLToxMDEwQjAwMDYxN0Q5RkExREQwNkY5QzZFRjU0QTFFNzJFQTRGM0ZCRTUKLToxMDEwQzAwMDdFQjE1NkM2MTY1MUZFNEIyMUI3RUQ0RTMzNDk3Qjk2ODUKLToxMDEwRDAwMDJENTQ1RjVDQjA3NTU1MkJFMkU3NENCMkE3MEZDRTEzRDEKLToxMDEwRTAwMEUwRTAxM0YwNTJCRTg1N0VENURGMTZGNEUxRjg2MTRFRTQKLToxMDEwRjAwMEYzNzBEMTBFQ0VEMUIxRjgxREVCQjc1QTNDNjhGNzBFQTQKLToxMDExMDAwMDY5MjdGNDM5M0VGRTdENjI3Qzk4NzczOEVBQUI5RkM1NEIKLToxMDExMTAwMDczQjlEREI4QkVCMDAxOTIwRkIwNTYxNjRBNUYzREVEMEYKLToxMDExMjAwMEZCQUQwRjEyNUQ3REYxMDFFNzJCRjNGRDkzMEFBOUJDMjYKLToxMDExMzAwMEQ1MTJFODgzRTVGRTQzNTMxNUUyMEI1NjE2RTg2RTVGQzEKLToxMDExNDAwMDZGQjU4ODdEQUQyRjg3Nzk5QTk1NTBGOEJFQzZFNUQwRUEKLToxMDExNTAwMDM5MjA3NzA1NDJGNjcxOTA2RUI0RTA3NzVBRjcyMzYyMzIKLToxMDExNjAwMDFENkRFNDRGOTM3RUI4Qjk4MjFGMThENzZERTQwRjFGMzEKLToxMDExNzAwMDFBRjg4MzZDQ0YzNjc2RUYwNzBBRjIwNTFGOEQ1QjAzRjIKLToxMDExODAwMEU3MDlDQTE5MzU3RkIyRDJCOTUxQjNDQjUyOENGMDM5QzUKLToxMDExOTAwMEJCRjNGMDFGNjZBMjFFREEyQ0Y3QjE5RURGMUFGNzcxQkYKLToxMDExQTAwMEU1OEJDM0JBRERDNzY3RDdFNDc1QkY4RkUxN0JCN0ZCQkIKLToxMDExQjAwMDc4OEQ0MkZDRUQ3RkNBNkZFMUE0MjNCQjQxNEZGQjc1RTQKLToxMDExQzAwMDZFMEZGQ0Y2REIzNEUxMTcxNUYwRkM5MkU1NDRERjg0OEEKLToxMDExRDAwMDg1OEVEMkZFODQxRjAzNUMyNTNDOERGQ0YzRjEzNDI3MDEKLToxMDExRTAwMEMxRDdDODNGRTFFRjAzMTYwMjQ3MDkzRjQ5OUY4Qzc5RjkKLToxMDExRjAwMDY5OUMyRTNBOTY3NDJBRTlCODhCNEU4REVCRDVDM0QxRjMKLToxMDEyMDAwMDU4N0UxOEY5MTNDQ0E3Rjg2NTBCQjc5RkI1MjgyNDZGNDMKLToxMDEyMTAwMDQzQkJCNzkyQUVBMzdERUFBMUUzOEYzNUJEOTVENDJCMzYKLToxMDEyMjAwMDM0RUYzN0U0OUIwREY1M0Q4NjdDQjFBMUJFRDc5MEFGN0UKLToxMDEyMzAwMEQzRDVBRjM5NzA1OEUzRkE0MTQwNTdDRjVBN0YzQkU5RDUKLToxMDEyNDAwMDE5NTdDQTExN0VFRUY3RDlGQkI5RTY0M0JBRThEN0ExMjAKLToxMDEyNTAwMDIxNUZCNDJDNjNCRTQ4OTQ3NzBGQUEyNEVGNUU3NDc2QTYKLToxMDEyNjAwMDQ0QTE1Q0IyMjI4Q0NCNkQxNzFEMjIxRkMzRjMxREJEQTAKLToxMDEyNzAwMEI1OTVDODE3RTVGNzhFMzA2RTI3Qjk1OERDMTExNTEzRjAKLToxMDEyODAwMEEyQTdCN0I3QTg1MTY4OEY2REYzQjNDMkVFRUMyODY0N0MKLToxMDEyOTAwMDE5MDVCOEI2QjE5RUNBQjlGQzU2QTBEQTUzRUFEMTFFRjgKLToxMDEyQTAwMERBQTRCQTgxNEM1OEM1RDJCQkEyMjhFRUExMjVFRDhFOTYKLToxMDEyQjAwMEU5RjA3REY2REIyQTg1MEY1QzBDRTc3NjA1RTZGMzk4MEUKLToxMDEyQzAwMDMxRUVBMDlDQTM5MDlENjJCRUM3NDZDMkJBQ0E1Qjc4QUQKLToxMDEyRDAwMEZDNDFDNTFBM0Q3RUU3RDhBNzQ2MDc5Q0M4NzdGNDcxNDQKLToxMDEyRTAwMDAyNzM1MUFGNEI0MzdENEZGRkJEOEFBRDIxN0FBQjMyQzQKLToxMDEyRjAwMEVDMEJBRkIwRDMxQUY3NDVEOTAwQjEyRkYyNTg5RUIwMUUKLToxMDEzMDAwMEM3OTA5RjYzOTFFMEQ3MDU2QUNFMUREMzAxRkUxNzhGNkEKLToxMDEzMTAwMEE4Q0MwQUY5Q0UxNjk1QURDNEY1RUU1NEM4REY4MzBFRkQKLToxMDEzMjAwMDAxREM2RkYzNjE1RkUyN0MyNDdDQ0VFMUJFQzlFQzU5NDUKLToxMDEzMzAwMDJFMzlGN0QyMjdDMzdGODg3NEIyRUZFM0RDQTcyMDNEQjQKLToxMDEzNDAwMEI3RUY0RjE5QUY2MjdFRkYxRjUzM0U2NjU3RDYxRkZCQTQKLToxMDEzNTAwMERBNUY2NzIxMUZCRUY4OUE5NTIxN0Q1RjdDRURENzI5NjIKLToxMDEzNjAwMDY4MTdCQ0Y4OEE5NUY0RTU4QkNCQUNEQ0RFRkM1QUE0OUMKLToxMDEzNzAwMDFGRkQ5MTE3OTNCOTlDREI3OEYwRUJEQzM2M0E3Nzk3MzkKLToxMDEzODAwMDEzQkVENjBFRDBCOERDRDRGMkY3NjM2OEFGRUU2QzgxMzIKLToxMDEzOTAwMDU1QTEzQ0YxNUEwNEVEOUYwNUFGODQ5MTNGRkNFMkMxOTkKLToxMDEzQTAwMEFGODc4N0M2NERGQzRGRDcyM0ZEREQxNzIzRDlGNDE3MzAKLToxMDEzQjAwMDkxNkU4NTVDQkZFMEQ1MUI5RTQ1N0Y2RUVEREU0MzVBODYKLToxMDEzQzAwMDM5OTQ4RkZERDU3RkU3MjJGRkJDRjgyMjk3OTMyRTU4RTIKLToxMDEzRDAwMERBOUU0MTVCRTM4NkFEMzczQzYyNDk0NEZCMUM3NEQ2MjAKLToxMDEzRTAwMDE3RDBCNUVEODFDOUI4NEZBRTg0MEI4N0MzNDU4MDAzRDQKLToxMDEzRjAwMEFFMEJFMDUyODk3Q0JGMjc3OEJDRjA2RjBCOEZDRjY3QjQKLToxMDE0MDAwMDcxN0U3NjNENDNGRjZGMTAyRTBBRjcyM0I0NDRGQTZEQzgKLToxMDE0MTAwMDBBQUQ5RjdGN0ZFREVCNUNFNDM3NTc1QkVGNkY3MEJERUMKLToxMDE0MjAwMEJERkZGRjU5RUZEOTdGNUJGQzcyN0E1RjNDQzA0OUYzODcKLToxMDE0MzAwMDMzRDJGRDk1NzRCREZGM0YyOEJGM0JEMjRERjNCREM2RUYKLToxMDE0NDAwMEZEMUU5MUZFRUZCQUZFRkYxQjdDMEZGQ0I3NURFRkQ1RDIKLToxMDE0NTAwMEYwRkRCNkMwNzdBNDAzRkQ4QTE3MEZGRTc3MEFGQjBFRDYKLToxMDE0NjAwMEVCMkU0Q0ZGNzdEREQ3RkY3Q0RENTI1RTFGQTNCQThGREEKLToxMDE0NzAwMEU0NDFGRDc3NThGMzA3NkUxNzQ5MUZERENBMURGNzA3RDIKLToxMDE0ODAwMEUzRUY0ODNGMUFDQkY4MzkzREQ2NTY0REYyRTZEODdFMDkKLToxMDE0OTAwMDZCNDkyRTZFNjRGOUU0ODdGMEY1NTNDOTFGNDNDMTE3RjkKLToxMDE0QTAwMDAwODc1RjI3RTRGOUM5OUY2NDBFRjQ1QjBDRjkzMTQ5QUEKLToxMDE0QjAwMEI1MTQ5RjY1RDQxQkM3ODY0RjI4NDQ3OUY0RjA1Mjk4MjEKLToxMDE0QzAwMDE3RjQ3MzM4RDJFNDQwNUZGMUI4N0U2QUMwOUE0QjY5NzIKLToxMDE0RDAwMDNCQTY2RkE1REM3RTA0RTU5NjcxNzZCREZFNzRCQjQxMkMKLToxMDE0RTAwMDFGQkFENUE5MkYyRjY0MkZGNjQyRkY1OTYxOEU4NUY5QjcKLToxMDE0RjAwMDYxM0VFM0IxN0U4OERFMzgyNURENDFGMEJBOTUzNTJEQjkKLToxMDE1MDAwMDc3RDhCRjNCOUNCNkE1NzMzREY5NEEzOEZDNzNCODVERUMKLToxMDE1MTAwMDAxMjdBMTI3OUI0NTdEMjNEQ0NDRjY4NzVBQjE5RDk5RjUKLToxMDE1MjAwMDgxREVDQkQ3NEJGQUIyRDQ3QkFGMDY0RjI2RjQ2OUIzM0EKLToxMDE1MzAwMDE4NUFDMkQ3REM4RkZCNDk0M0ZBMjVCODQ4Qjg3RjU3MDEKLToxMDE1NDAwMDc4NEIzQzE5RTEyRUUxMkJFMTY2QzQ0MzNEMUFBMzdBQTYKLToxMDE1NTAwMDA3RTFERkNGOUM2N0M2N0Q3N0IzOTBFM0M3OTk2Mzc4RDcKLToxMDE1NjAwMEJFNUZBQjVBNENGQkQxQ0ZFOUZDMEJCNzE5RTU5M0QxNjkKLToxMDE1NzAwMEY2MTg4QUQ3NjRDRUU0MThENDY3NTFDNEZDMzYwOUU0NUYKLToxMDE1ODAwMENFMTEzMUMzMTU1ODZGOTI5OUY5QUNBMDZGQTIwRjhEOEYKLToxMDE1OTAwMEVDQTgwRjlBRkRDQjVDMzgwRUI3RDcyNjlCQjk1RDFBMjUKLToxMDE1QTAwMDc2QjcyRjNDOUZFQTdCMzRDODk3RkU2QzJFRjM0MEZENDQKLToxMDE1QjAwMEQyMjRFNjU2Nzg3RDE2MUQ0QkUxNjg0Q0M1QjgyQzQ4MDAKLToxMDE1QzAwMEIxNUQ2OTM0RUZCN0I0MEZGMzJGRTNGODI0QkMwQ0MwNUUKLToxMDE1RDAwMDM0OTVGQUY1OTg2Mjc5RkJBODdDNkFFRjMzRjFGNjFFMzAKLToxMDE1RTAwMDMzQzY3QkE1NzFGQjdBQzcwQTJCRTkxRkE1QUI5MjMzRTMKLToxMDE1RjAwMDkwN0YxNDhERDFEQjhEOTMzM0I4OUQ1OUE2QUIzM0Y4MTIKLToxMDE2MDAwMDdFNTc0REVFMDQ5NDhCQ0I5NjBGMjQ3RDQ4MEQyRkFFNjQKLToxMDE2MTAwMDdEMDlFREZEQkIyMzg4MUU0QjU3REUzMzYxMThDRTZGNkQKLToxMDE2MjAwMDc3OUMxQkE3Nzc2NkUyOUVFMUJDRkU4Q0ZCM0Y4NEVGQjQKLToxMDE2MzAwMERFMUQ2MUY0N0Q2Nzg2Rjc2ODNBRjQ3NzQ2NzFDRTdBRUQKLToxMDE2NDAwMDA5M0U5NDREM0JBQzI1QzAxMERFRTY0OUU3RDFGRTM3OUMKLToxMDE2NTAwMEQxQjdFNzNERjQzMzRFOUNBQTUyRkQ4OThDQzczREIyMDkKLToxMDE2NjAwMEU1MTFFNDhGOUVFMEZCREM5QzAwRkQ0RDAwNjUwM0NCQTMKLToxMDE2NzAwMERCQzMxQzI5MEI2MUZFQTVDMkRFN0I1MkVDMTczNTlDMzcKLToxMDE2ODAwMDc5NUZCNEUzQkM5MjMzNTJFMUZCMDRENjdEMUM3MDZBRUYKLToxMDE2OTAwMDg2QTgzRjQ2RDk4OEZFQTFGRTYzQjkzRDVFRDZDNzdFQzcKLToxMDE2QTAwMEIwREYyQzAxOEY4QkU5RENFRTI0RjMwMDU3QUE1RkIxODkKLToxMDE2QjAwMERBREE5RTg2N0FDRjZBNEIyMDEzRDI1OTU5NjMyRUUxMkIKLToxMDE2QzAwMDNBOEI1MkQ5RjgwRDA4RjcwNzU0QjY4NUU2REI1MTRBMzQKLToxMDE2RDAwMDc2RUVDODJDMjdFMkMxMEIyNDRERjE4NTREMkUyN0RBN0EKLToxMDE2RTAwMEJEREE0NzM3MDdEMDNGRDBGRTg0Q0JEREU4MjQyQzUzNEEKLToxMDE2RjAwMDNDOEVENEIzREE0NzA3MDZBMDVEQkUyMzhGRkIxOThFNUMKLToxMDE3MDAwMDM5REEyMjUxM0YyQ0I3REIyODNFNDdDNkY1Q0M3NkYwQkMKLToxMDE3MTAwMDdEREVCRkIxNkRFREY1QTg3NzNFQUFCQUI3NDA3RUY2ODMKLToxMDE3MjAwMEEzRENFRkYyMTdCQkNEQUZBMEJFQjY5RUVGNTNCNjQ2MUIKLToxMDE3MzAwMDFGQzdDMzFDNkVCMkY3OTQzNzhERDY1MEJGQUNCMDdCQjkKLToxMDE3NDAwMDM0NUM2Nzc2QTYzNzI2MDNGN0QxMzcwMEJGRTExOEM3QTgKLToxMDE3NTAwMEM5NjgzMzk0MzY5NTUyOUM4OTFBMDVGQjBFRjc4OUQ5Q0UKLToxMDE3NjAwMDE5ODU3QUFGMzEwRTY4ODE4OEZCOTFGOTE3QzJCQzdENkIKLToxMDE3NzAwMDMzMDA0RTY1RDFDRURENDgyRkM3RUJEM0M4RUUzOTQzRDkKLToxMDE3ODAwMEQwNUQxMUM2MzFBMjdGQzJEQzk2ODhGMzc5MDc4REI4OEYKLToxMDE3OTAwMDMwN0U1MUFDMjNDMzRFRjQxQ0M2MTAwRUVEMTY0NzA2MjYKLToxMDE3QTAwMEQyNzdGQjhBMzAxM0ZBRDk4QTk2NzFCQTg2N0Q2NjMzNkUKLToxMDE3QjAwMDQzRkIwN0NEMkMxQ0ZEMDZBN0QyNzlCRjI1NEJDREM1MTkKLToxMDE3QzAwMDlCMjFERkNGQzZDQzkxQjE0ODU3Nzk0NEQ3OUJCM0JDOUUKLToxMDE3RDAwMDE3RDNBMUZGNTMzRjYyMjM5MDFFQ0FEN0FDMjNGRjhBQzEKLToxMDE3RTAwMEE0MEI2NjZFMUQxNzA3RTM5Q0RBRTZDQTQ3QkUyOUU5MUIKLToxMDE3RjAwMDY4NzNENjk4M0M4NDRCMTczRDRDNTU4ODBFMjAzRDk0MTkKLToxMDE4MDAwMDQ2RjQzMDc5Mzg5NjE3OEQwOTBDNTg5NDgzRkE2ODBEOTAKLToxMDE4MTAwMEYzRTBGOTlFQzBEQzI4Mjc3NEIyMEVGMjNGNzZEQTM1ODkKLToxMDE4MjAwMDI3REFCOTI0M0Y5MTdDMDNGMEVBQjFDNTA3RTk2MDNCQjAKLToxMDE4MzAwMDlDRjc2NjBCNjMzQjFBNkM5NDNFREZFMDYwNjZFMDcxRDgKLToxMDE4NDAwMDNCMUIxMjI4QkZCQkMxNDk2OTczNDMxNjdEN0ZCMUMxRTEKLToxMDE4NTAwMDRERjlCRDBEMjMyOEJGQUZDMTQzRjkwMzBEODU5NEJFREIKLToxMDE4NjAwMEQyNTA0Q0RGMjU1RjAyQjgxMDFGOTI3QzQ1RjJBMzcyNjQKLToxMDE4NzAwMEJCRDY4RUZFNDhDOTk3OEM3NDMzMEJDMDNCMkE5RkRBQzcKLToxMDE4ODAwMDEzREY5M0ZDMEVENzYxQ0EwRkYyMjM4OURGNTRBNUQ4NkEKLToxMDE4OTAwMDk3RTA0MjNFRDYzNjAzRjE1RkEwOUVEQkI1MUZGNUYyMUUKLToxMDE4QTAwMDRBQkI5QkY0NzRDNkY5NUUyN0QwMkJDMjI1NDU2MzA3NUIKLToxMDE4QjAwMEQwRUVEQUI4RDBEM0JFQ0ExNTg0RkZERDk1MEEzMzg3REYKLToxMDE4QzAwMEQwRDUzRDc1NjFDQzFDNzI2RURDNUIxRkEzQ0I5N0Q0NjkKLToxMDE4RDAwMEZGRkVDRDNFRDBGRjFEQkRCQzU1NDg3RkM3N0VGQ0U5NTUKLToxMDE4RTAwMEQzN0Y4NEVGOUI3RTdDMjYxREYxMERGM0Q4RjYzODhFRDYKLToxMDE4RjAwMEJCMjRCQzZCMUVCMTk4NUY2RTIxN0Y1NDdGNjkwNzgxNEEKLToxMDE5MDAwMDNGQzQ0QjE5RTNGQjZERDM4RkZGNDZGQkJCQkRERUVBNDMKLToxMDE5MTAwMDQ0NzlGODIzQzQxM0MwRjVDRjAyNEY2NUY1NTY4MjVGQjIKLToxMDE5MjAwMEU5OEExM0JCRjZFMzNFNUZBMjExOUYyQjVCMkVGNkUxMjMKLToxMDE5MzAwMDZBODA2Nzg4N0ZGNzc4MjIyMzdCMDQ0OEQzMTRBRjdFQzAKLToxMDE5NDAwMEZDNDc1QTIwMDJGQTNGQUVGMEZEQUI4MDUwNTA4MjcxNDYKLToxMDE5NTAwMDdGQUI3RjdEMTRGN0JGNTI3Rjg0RkNFNzVFOUIzRDQwRTkKLToxMDE5NjAwMDcyODBDRjcyMkVCNDNGQTVGRTJEQUFDN0RBRkFDNUEwQTkKLToxMDE5NzAwMEJEODRDRUIxNUJEMEVGRThEMTlDQjA2RUE0NjlDNDVCRUUKLToxMDE5ODAwMDU5RDZFQjJDMTFGRDI2NEQ4QTAzQjc0Qzg1Rjg1RUIxNzQKLToxMDE5OTAwMDVBRTFGRTQ5QjMzQjYxMkFDODdEOEY2NEE4ODRDN0Y3MkEKLToxMDE5QTAwMEQyQ0RCNDJGNzMzMjk4ODg1RjY4QTJGMzQ5RDI2QkM1NDkKLToxMDE5QjAwMDFBNjg4N0ZCQTIyOTRGOUIxM0MyODdDQkM0RjdGMjJDNkUKLToxMDE5QzAwMDEzQTVGMkZCMTZEMTZGREZENTc5RDM1MTlFRTg4QkU1RDUKLToxMDE5RDAwMDM5OThFNjRGNDdGOEY2QjU4RjM3MkIyMUY4REY5ODYxMzUKLToxMDE5RTAwMDE2RjNFMEUzRTdFMDY2ODNGRjdCMjgyQjU1OUI5RDgzOUUKLToxMDE5RjAwMEY4RTFFNzk3MUNBNzJDMkI3RjI1QzY3MTk2QUQxOThEQjIKLToxMDFBMDAwMERDOTczNTVBREMwOUJEQTBERUI2QUU3RTFDNUM1RUIwNEMKLToxMDFBMTAwMEYxNzhFNTlBMUVDRTBGNjkzRjNCODVGRkJDODFENjREMUMKLToxMDFBMjAwMDc2RERBQUREQkZEODhENzFGQzU1MUY1QjA5QkY1NTQzMUMKLToxMDFBMzAwMDQ0RkM1NDhFN0ZGODE0MzIzNEVBRURENUUzN0VGMTQ5NEMKLToxMDFBNDAwMDE0RjkxRkY2RjJCODRBNDhCOTNENzU0OTI1QjdCRkJBMkYKLToxMDFBNTAwMDYxNUY3NUUzRkY3OTYzRjdDNzUxREREQUE5RjdBQUQ3QUMKLToxMDFBNjAwMDY0QTc1RUEwN0MxMzg1RjI4MzVDNEZDMUMxMkZFMzY5M0MKLToxMDFBNzAwMDFFQ0E2NUYyRkYyQzM4QjgyMkJFQkI3QjM3NDY3Qjc1ODkKLToxMDFBODAwMDk3M0Q1QkQ4RUQ4Q0U1NDY3QkRERDEwQ0JEMUQxQjA0N0QKLToxMDFBOTAwMDQ0QkFDNzI1RUQ3NTRDQ0Q4OTQ2RkJGRTk3RTI5RTQ3QkIKLToxMDFBQTAwMDRGN0E4REI0NkYyRkQ4MDA5REM0QzFGRTM0M0JBM0QxQjMKLToxMDFBQjAwMDVGNzVCMTA3NzlEQTk5QzlDRkZCRjNDMjFFN0U3MUE3QjIKLToxMDFBQzAwMDRBN0FDRUM1OUQ5MUI0OUZFNkVGRkNEOTVCRTgzRjlDNzYKLToxMDFBRDAwMEJGNTVBMTY5RDRCMjU2ODIxQkMwOTNEOTQyQ0YzMThDNzUKLToxMDFBRTAwMDM3OEJCQjcyREU5REZFRjQ2ODNDNDdBQTdGMTE1OTg3OTUKLToxMDFBRjAwMDc0MzZBRjU5RjE2QzgzRjk3NERBOUNEMUJENDNFNkYzQzcKLToxMDFCMDAwMDhEQTBCMzZBNkJGMzcwODJCMzlDM0ZGMkM1REVDMTdBREQKLToxMDFCMTAwMEYzNUE3RTQ2RjY2M0E4Nzc4MUU0QTAxNzIyMThCRkZGMjgKLToxMDFCMjAwMEQxRjExRUNFRjNFQ0M2QTE2RUY0RkJDRDZCREUzMzlGN0MKLToxMDFCMzAwMEU0ODg5RDExMEUxNDgxQ0U4ODM4NjFEOThGMkQ5MzhGNDIKLToxMDFCNDAwMDY3Q0JFNDcyQ0I1OUUxMEYzQUJCNUIyNTdFODZGM0M0QzkKLToxMDFCNTAwMEZENzU0NkQxQzdFMzQ1ODk3NjUxMDI2RTJGRTJGRUVFNTAKLToxMDFCNjAwMDFEQUMzRkFGQjkzRDZBMDBENEZGRUNDMEVGMjk0REM4QjIKLToxMDFCNzAwMEU0N0M2MDlFQkQzNTE3Q0ZERkNGRjY0NjkwM0ZFQkIzRDgKLToxMDFCODAwMEJENEY4RDdGMTVDNjNCREYzQ0JBMTdFRTA3RDk3RjQ2QTgKLToxMDFCOTAwMEE2ODVFQTlGREZBODE2MjJCQzk4OUZDN0JERDQyMjdDRTkKLToxMDFCQTAwMDg3ODZDRTMzNkVCM0NGMTVCQUVGNzhEQ0NGRDlCREJGMDEKLToxMDFCQjAwMDhDMzJFNTA0RjE1OTZCRjNEQTEyNTM3MUZGOTQxNjIzNUEKLToxMDFCQzAwMERGMzhBNTM4QTk5RTY1RUY2ODFGREU2MzVBRDA5MkM3M0IKLToxMDFCRDAwMDkwOUU2OURGMjU1MkZERDVBNjkwN0E5QUM1NEQ0Q0QxQ0QKLToxMDFCRTAwMDdDNjA5MjI3ODlFMDJDRUUyMTg5Nzg3OUJDNTc0N0Y3RjEKLToxMDFCRjAwMDhBMjZEOUM4M0YzMTZCODhGM0FFQkI5MTRGQkU2M0UxRjMKLToxMDFDMDAwMDc4RTlFNzdDMUNFNUI3NTlFRkM3NTFEQ0Q0MjI5N0YzOUMKLToxMDFDMTAwMDJFOUNGRkUyREZBQTE0RUYzQjZCQThFMDAzMDk2REMzMjMKLToxMDFDMjAwMDMwNkVCMTY2QjVDMjNDQjBDRTc2MTc5NzFCNkFGQzJBRkYKLToxMDFDMzAwMEYzNDJCRTJGRDA4MzBGNDAzMTMxMzM1NUYwRDM0MDA2RUQKLToxMDFDNDAwMERFMDc3Q0IyRDJFNEQxRTBGQzNCQTYzMTlGOEE3NkEzQ0EKLToxMDFDNTAwMDE3NzkzQzczNEQyQThGMUI3RTEyRTkxRUQyOUFEODQwMDkKLToxMDFDNjAwMDQ2MUNGNDc3NEVFMEIzNjY3MjIwMDNFMzI0NkE1RTRDQjAKLToxMDFDNzAwMEE0Mzg4OTczMUFGNzVCRTI3N0Y0OTNENkU0NDM3QkE4MjAKLToxMDFDODAwMEQ3NEJDNEMzNjJGQjk4MTBGQUE5Mjk3MzNCQjE5RTFBQzMKLToxMDFDOTAwMEVCNzZFNkQ5NzFCRThFMEIyNEM3QkUxNEM5NTA4RTM1QzMKLToxMDFDQTAwMEVEOEZFNDcxNEUzRjBGREI2MjBEQzE1Mzk5QTBCNzVFMUIKLToxMDFDQjAwMDAyOEY2QzI2OEY4NzdDNENDNDYzM0ZCNjJERDE4RkZBODAKLToxMDFDQzAwMDlCQUNGRjk4QzUzQjAzRTE4MEVCNDBGOTdEOUVENjk0MjkKLToxMDFDRDAwMDgxRjJBRDlDRUZCQ0E4MjY5QUU3Mzk0MURGRjNDMjlCQTUKLToxMDFDRTAwMDc4QkNCNEM2RTMyOUIxM0VFNkRCMkQ4Q0UyQjgzQjlFNUUKLToxMDFDRjAwMEIzNTIzQ0M5OTlDNEQ2N0QzOEZFOTlFNzA2MzI1QzdGNjEKLToxMDFEMDAwMEJCQ0IzRkU3MDA5NTgzRkMwODc4QUI3QURFMUFDMEY1QzEKLToxMDFEMTAwMDlDN0U4RURCOUI0RjVCQjgzQzc2N0E1MjgyMTNGMTU2RTkKLToxMDFEMjAwMDM4NzlDMzJDQjJDNzZDQjUyQTg4RjdEMzBBRDMxMkIwNUUKLToxMDFEMzAwMDdDNUI2RkI3MEZEQjM3RDQ1MzlDNzQxNUIwMDlCQzhGMzUKLToxMDFENDAwMDAzNjkyMURFQUIzOUJENkQyMEM1ODc5RDdFNUJDNTFCNTgKLToxMDFENTAwMDUxRjg3RDM1N0VGN0IyQTY1OTNGNDA3OEVDRTBGQUQzRDIKLToxMDFENjAwMDk5RTdGRjNFMzBGNDFFOUE0Q0FCQjZFQUUzRTAyNDlEQkYKLToxMDFENzAwMEM4RjI0NkIxMkYxQjA1OUM1NzY1RjI3M0FCMzZBMkY5MkEKLToxMDFEODAwMEIxNTQ1QTI3ODczQkUwODlGNDNFMzhGODIzOUZCQTBFQjYKLToxMDFEOTAwMEUzMjBEMjE1RTQxQjRGMDI1RDNEODU3Njg1MUQ1Q0JGQjcKLToxMDFEQTAwMDNBQjNEMzQyNzFFMTU1RkIyMzNEMTQ3N0I2RUE3QTEzNzcKLToxMDFEQjAwMEM1NDFBODVDMEVBRjMyMDFGODI4NTVBOERGQUFDOTU5NjEKLToxMDFEQzAwMDc0REYxN0UwNEQ3QTZDQzczNjU1OENDMzk4MUREN0JEQUMKLToxMDFERDAwMDlEQzdGOTE2QTFBQzQ4RTU4M0E5RkNCNEM4OUZERTM3QkUKLToxMDFERTAwMDk4RTQzQUU4REY4M0Y3OTVBQTdFRjA0MzBFQzcyOTk1NzkKLToxMDFERjAwMEVGMzJCMjYzRDg4OEJGRDY3NEY5NzE0NjQ2RTM3OTU3OUIKLToxMDFFMDAwMEJCRUFBNjY4QkMwN0M4REU1NzE5Q0EyNzQ2Mzg1RDMyNDgKLToxMDFFMTAwMEJCRkIyMDVGRkQ4M0UwNUZENUZCOUVENjkwMUY1NDhCRkMKLToxMDFFMjAwMEZCMjFENUNGMkJEQzlGMENGQjBDRUY0OTU2QUZCQ0U5NTcKLToxMDFFMzAwMDcxQTJDRkY3MkMyQzFERDY3M0FFRjk2NzUxQTFGODA4MEIKLToxMDFFNDAwMDA4QkVENjU1NUY3MzUzRkQ2QUE4OEZGRDU0QUY3QzI3M0IKLToxMDFFNTAwMDhBRTZCM0RENDI3MTI2NDYzQzVFNzNGQkU3RDU2QjZBQ0EKLToxMDFFNjAwMERGNDUxRkNEREM4RTcyQzVGQTU5RUI3RjdDMENGRDdGMDAKLToxMDFFNzAwMEIxMzNDQ0VEQTNBRkNENzRBRkVDQUNBNTc5MEVBRUZGMTIKLToxMDFFODAwMEVDQUUzMEUyNDc2NzYzMzg3RkY4MENGOEE3MkYxM0U3MTIKLToxMDFFOTAwMDcxRkI0RjI5MkVFQjc3NTNFODNFREM1Q0JGQkU1RjM5MDgKLToxMDFFQTAwMEVFOUJDOEI3MzE5RTI0Q0UxRDhENzE3REI1RUY3M0ZFQkMKLToxMDFFQjAwMDA2NzhCOTgzREFCRjZGQTFGNkM2NzU2QzE1RkNCRTZCRTgKLToxMDFFQzAwMDdGRUU4QTIwN0EzOERCOTdFM0U1RUNFRTRDM0E4RkRBNDYKLToxMDFFRDAwMDYzMzg5REMzN0M1M0YwRkVEQ0Q5NUQ5OTc5NzQyRjBENzYKLToxMDFFRTAwMDg1MUJBMDg3MkFBMURGOUU4RDY5NEU3MTg0OTRCNzVCMDQKLToxMDFFRjAwMDg0OUUxNjgwOUE0ODM3RDgwNkU0QkVBQTdBMkU1NzU1OTMKLToxMDFGMDAwMERCRDY1MDdDMDhDNkQ1MEVDRkE3MzQ2MDhEQkQzMjNFREYKLToxMDFGMTAwMDE2RTg5NUY0Qzc3RTU5N0M3RjMxMUMyRjVFQzQ2RjkzMDEKLToxMDFGMjAwMEJDRDNBQzIxRkZGNjBBQjlCMDY2QTczMUJFOTY5N0ZGQzUKLToxMDFGMzAwMDVERUM0RjlDNkQyRjE5Q0Y4Qjc0RTg1MzI4Q0VBNDdBOUIKLToxMDFGNDAwMEY5QzI3OTQ4RTdENTc1RUJFRUM2N0QyNkU3NUY2RDY2ODkKLToxMDFGNTAwMDg1QTg4N0I1MkIyQUNEQTMzRDhDREQzQjE5Q0Y4REQwMkQKLToxMDFGNjAwMDcxNDJFNDM2MkRBQkNCOUVDQTFDRjEyNEFGRDIzOTE2OTgKLToxMDFGNzAwMDlFRTVFNDc0ODMyNzI2REUxMzVEQUVBQ0ExNzE1QzUyNEUKLToxMDFGODAwMDlGRTVFQjkyNzAwMjcwNjgxOEQ3RDczRTVBOTRGN0IwNkQKLToxMDFGOTAwMDZFMzk0RkUzQkFFNTdDNTJCMkI4OURBNERERTVGQ0U5QTkKLToxMDFGQTAwMDQ4QzRGMzZGNTRCQTRGN0JFOTlCQTFEMUIxRERDODY1M0EKLToxMDFGQjAwMEMxNzM1RDBCQzZCN0MyRkNCMzkxRjZEMEVFOTJDOUVEMEEKLToxMDFGQzAwMEE4RDUxODNGMEJGM0NDRDhBODhGRUJDRURBQUFDRjBGNDkKLToxMDFGRDAwMERBQTlDRkU3RUNENUU3NzM1QkY0NzlGNzFCRkE3QzFDNDEKLToxMDFGRTAwMDhFREI5QkVCRDk3ODdGMTdGNTZDNEM1MUNGNzY1QUI5QzUKLToxMDFGRjAwMDlFOEQ3OUQ0QjMzMTQ1M0QxQkJGQTM5RThENzlENEIzNUIKLToxMDIwMDAwMDMxOEY3QTM2RTYyNUJDNTFERkM2M0NFQURCNTg1RTIyQ0EKLToxMDIwMTAwMEUwNTQyM0UyMjQxMTBGNDhFRkVDRTUzMEREN0Q5RjhCODcKLToxMDIwMjAwMDA3RjkzRDBFQTAwM0JFNkY2NjY4QjQ2RjlFQzQxQUE0ODQKLToxMDIwMzAwMDc3NzBCQjUyREYyOTM2MjdDNkZCRkE2MkJERTNCMzg2NTEKLToxMDIwNDAwMEUxN0Q4RkQ2OTU4OTg4Mzc3MzFCQzU5RDJFNzg4NUM3MEUKLToxMDIwNTAwMDlERDZFNDg3RDlEMUJFRDFCNkUyQjM5NTE4Q0UzOTM1MzUKLToxMDIwNjAwMEQ2N0I3QjU2NkZCQ0NGRDlCMTFERTE1QjVCN0Y5OEVFMTEKLToxMDIwNzAwMEJEQjcyRDc1QkU3RjBCQzcxRkQ5NTk1ODY1MkNDOTRERUIKLToxMDIwODAwMEE1NzhDRUM1RjY4QzQ3NjNEQzM3NUJBMzhGRjMzNkM2RTUKLToxMDIwOTAwMDdEMUJFM0JEOEQ3NDIwRTVCRDREOTY4RTQ0RTRFQjI3OUEKLToxMDIwQTAwMDlFQjNBREMxRjk5RjA4MTNGNzRGQTZEQjBDRkU3RTIxNEUKLToxMDIwQjAwMEE3QUQ1NUI2RTA3OTVEOTMxNUNCRkQ0OTQ3NDAzRUVGOUUKLToxMDIwQzAwMEU2OUM5NTY5RjlFNUExMjQ4Nzc3RTVENzI4MjZCQTE3MTQKLToxMDIwRDAwMDk3MTA0RkU3RDA2MjMxQTcxNEE1QTM3RDE1RjJCOTc5MDcKLToxMDIwRTAwMDI2M0EzNzJGODE1Qzg2RTM1REZBNDAyNUY5MjE3MzgzMTgKLToxMDIwRjAwMDQ5Qjc5RTgxRkU3MDFEN0Q2NUVGODgzNURDNkJFOEFCQ0UKLToxMDIxMDAwMEFCM0ZFNDQwQUFFMTVFQzMyMDdEMUNGREQ0QTU4NzUwMEYKLToxMDIxMTAwMEJGOUZCMjY2QThBRTVFNDVGMTREMDYzODhBNzkwQkY5Q0QKLToxMDIxMjAwMEI1MDJDRTBGMEZBQ0VGQzkyNTFCNTIxMEJGOEJFNzc1NjAKLToxMDIxMzAwMEI2QUY0MkY5RjRBNTMwQkExNzU2ODlGRjBGRjg2MjI1RjkKLToxMDIxNDAwMEY0ODlGNzE5MkJGNzhBRkJDMEY1RkE3M0I4NUM5QzQzNDYKLToxMDIxNTAwMDk1NjZFNjczQzQwNkU5QjBEMkMxM0MzMUQwN0VERUEwRkMKLToxMDIxNjAwMEQ2REMwMEVBMTU2RkZGN0VCODIzMTVGNThBRDE3RDkwODUKLToxMDIxNzAwMDFGQTU1ODNDMTQwNzVCQjMyNzNENjYyOUY0QkIyMkNENEQKLToxMDIxODAwMEZCMTREMkREQzlBNkMzM0YyOUMxRjM3MDBGRDdGNzRFQTgKLToxMDIxOTAwMEFDRjk2NTE0QzU4OTA5N0E0QkIxMzhDMjExRUY5QjlCMjQKLToxMDIxQTAwMDc4N0MxQ0RBQzdENEQ4MjA1RDZDNkU4QTBCMUY2MDBGNTgKLToxMDIxQjAwMEFFMzc0ODA3REYxMDlFMDAzRkRDOEU1M0Y5M0FGOTNERjkKLToxMDIxQzAwMDNBOUJDNTdBNDcyQjNFOTRBN0U1RkExNjg5NzM4NTBEOEQKLToxMDIxRDAwMEUwRkREQzI3RjIyNzg1N0UyMUQ3Nzk2RUUwQTE1QzI3MjAKLToxMDIxRTAwMERFQkY2ODM4OTBBMjIyM0YzN0VEREM5RTA4QTlEQkVBMEIKLToxMDIxRjAwMEREODdGQkFFNzI3M0ZBMUY0N0MyMzg1NTFGRjJGNUZDM0MKLToxMDIyMDAwMDY1RkREOEE4MUI1MEZFREM2NTcxMTc0MTdFNTVEM0IzMjAKLToxMDIyMTAwMDFBRUFEOTU1NjZCRjQ2RjE5NUNGNkRENjMwQkVGODdCMjgKLToxMDIyMjAwMDNCMzZEM0Y3MzkzQjRBMjk5RTcyMkVBQjIzRkRGMzk0RkMKLToxMDIyMzAwMDdDNzc0MEMwQTM3MjhDQjJEMTAxRjM0RTFBQzhFNUJFQzAKLToxMDIyNDAwMENBNzBFRUJGMDNGOUU4NEQ3Q0Y3RTNEMjBFMjUwRkUzMjkKLToxMDIyNTAwMDc4QTYxNkVGRDE0QUUxRkJGQjgyQ0YxOEY3NDlFN0JCMUUKLToxMDIyNjAwMDUzMEE3QTEzM0NGODdEOEQwRjE5NjhGMTY5NTdFRThCOEMKLToxMDIyNzAwMDI5OTc1REI0MkZBNjVFQ0UyNkJENkM1QTYwMjBENzdGMEQKLToxMDIyODAwMDczMENGQUVGQkJGQ0REODVDRTE2QkUwRjJBQjU0MEFGNEUKLToxMDIyOTAwMDI5Qjg0RjVFQjM5MDlDNUIwQkU3Q0Q4ODdDRDRBQjE5MUIKLToxMDIyQTAwMEJCMTFEMkUyOTFBQThFNUUxNzhDOEJEMEQxRjM3NDE2M0IKLToxMDIyQjAwMEIyNEZBMEJGM0IzMTY4MjQyNDNGQjUyODRENTdGRkFFMzUKLToxMDIyQzAwMEE5RDkwNkZBQ0YwRjk2MTMxRkI5NTE3N0JGQUU3Njg5RjkKLToxMDIyRDAwMENGQTk5MDlDMzk0NkZGOURGMTM4NDFDNjZFRDNCNUFGNkEKLToxMDIyRTAwMDY1OTM4M0Y1OTBCRUI3NzIzOUI4NzY2RkNDMTZCNEY3QTQKLToxMDIyRjAwMDU1OUFCOEZFMzRERENCQkZDRjNGQzBCRkIzRTk0Q0I3NzIKLToxMDIzMDAwMDBGRkJBN0I5RkZDOENGNDUwQkY5MDVBNDNEN0QzQUZFRTkKLToxMDIzMTAwMEJCMUJGOEMzNDlERTc1M0YxQ0VGQzVBMzNENDI3NzdGNjkKLToxMDIzMjAwMDVBRjgwMzcxREU4ODg3NUE2MTM3QUFDREUyNzZBMzVBM0MKLToxMDIzMzAwMDVGQUI4NkVGMEUwMEZDQ0Q3MUIxNTRDRjE2ODdGMTkxRTMKLToxMDIzNDAwMDREMEFEOTE1MzE1RDQyRjE5MkZBMzgyQ0VDMEZFMzE4QTEKLToxMDIzNTAwMEU3MUY1MTRCNzE5RjE4Q0IyQkYxREQxRkM0RUYyQjNDQjYKLToxMDIzNjAwMEFFNzRFRTA2NjMxQ0U0MUFGMjQ3Q0U0NzdCNTAwOERFREIKLToxMDIzNzAwMEVFMUVFODE0RjI4QTdGNjU1Rjg0NUY5MTkyNDdGNzIyMzAKLToxMDIzODAwMDc3MUVEMjMwQ0U2RUVBRDQ5ODNDREMzNzQ2RkE5MjdDODcKLToxMDIzOTAwMDFERjYzM0U5REY5REVGMUUyNkZBRUFBQzM0MTNGRDVFMkQKLToxMDIzQTAwMDBEMEVGMzNEREM4RTZBQTRCQjM5QUM1NUMzN0JFMjczRTIKLToxMDIzQjAwMEY2MkE2RUQ0NDdCMTFFQzJBMzJGRDJBMzAxMUU3MUIxNUIKLToxMDIzQzAwMDU3QzI0MUMyQTcwQjVFN0I4RDcxNkUxQzRFNzMwRjI4RTYKLToxMDIzRDAwMEZFNDAzNzcwMzJDRUJCMjdCOEM5RjVDQ0YxN0FDNzIzOUYKLToxMDIzRTAwMDVGOTBFQjlBOEJGM0M3RkU2MUZFRDhCRkY0NDNCMDExNDgKLToxMDIzRjAwMEM2RkQ5OTQ2RjZBOUY5QzUzQzNFRDY0ODBGOTMyRjczMDIKLToxMDI0MDAwMEJCQ0I5RDk3Q0Q5NDRFMkREMkVGNDc2Qzg3RkI2MkRBMDQKLToxMDI0MTAwMEU1NzgyQUZGQUVGNDMyMUZFNkM5RUYzRjVEMUI5REM4ODkKLToxMDI0MjAwMDc1NDhCRTFCREMwRkZDREVDMEQ1REUwNTMyREExREU3QzkKLToxMDI0MzAwMDBFMTRGMUM4QzNEODMwNUQzQ0IyRTBBQkM2RjZDNjc4MjYKLToxMDI0NDAwMDY0MjkwNzE4Q0Y5N0QyNDgxM0M1NEQ3NkRBNTM0OUJFOTEKLToxMDI0NTAwMDkwN0NENjJCQ0UwRkVGOEEyRkE5OUUxN0VBRjFEOUM0MTQKLToxMDI0NjAwMEVCQ0UxQkFGQjBGRjJEOEE0Q0E1RjcxODUyOTZDNkM1MTAKLToxMDI0NzAwMDIzOUU0QUMzMUMxNDdGNUZCQTU0QTVCOEU3NTJBOEU3NEQKLToxMDI0ODAwMDBDOTE0RjU2MkU0RjRCQzFGM0UyRjg4Mzk5Q0ZGODQwOTEKLToxMDI0OTAwMDZFM0ZGRTQwQUZGODExMzBDRTg5MTU5NjVFMzY2N0IwQkMKLToxMDI0QTAwMERFRjExNTA1MjkxOEE3NzE2MjlENzVCQUJGMUI3OEFEQkQKLToxMDI0QjAwMDFCQzhDRjg3REExRjFGQTVGM0VDQkNFOUREQThFOUQwNjQKLToxMDI0QzAwMEJFNjZDNTRCNTExOEU2NUZCRDgyOUZFMzAzRDNCQzREOEEKLToxMDI0RDAwMDAzN0JFMzc5QkU3OUJCMDNFMUU3RDg5QzhCNzZERjREQzQKLToxMDI0RTAwMDcwMUM2MDdCMjkzRjU0QUQyOEU4ODNGMjQ1Q0QzRjBFMzgKLToxMDI0RjAwMDNGRTNDMDdCRDY0QjJERjEyODdGOUVGRTAwQ0U0Mzg1NjcKLToxMDI1MDAwMENFMzM5MjFCNEU4NTQxMTdFNDRGOEIyNDNCQzIyOTg1NjUKLToxMDI1MTAwMDc5RDBBRjc0Q0U3NEU4QUI1NUE4MTdFNjM1NjcwNDIwQzAKLToxMDI1MjAwMDVENjhGNTZFMUE4OEYyRkY4QTY3NDk2RUE5N0E2ODY5NTQKLToxMDI1MzAwMDg2QUE2MkJGRTlEMURERDk0RDY0QkE1RDlDREIyOEJGQjQKLToxMDI1NDAwMDYzOEFGMjNCQzZDOUEwRkM4RTc5OTRERjMxNDVGOTFENDAKLToxMDI1NTAwMEJGMkZEOEEwOTdGRjVFMTBGRTQyNjk0RkVFREZEODkxRTMKLToxMDI1NjAwMDg3RkUzQkRGMTg5NjU1NDdFN0FEM0QwQkU1RjVDNTRBQkQKLToxMDI1NzAwMEI4MUJGOUQxNjI5NDk1MzBGRjQ5MThFOUIxNkM2QjIyMTAKLToxMDI1ODAwMDNGNkYwNTlFRUI2RERDNkZGNEI1Qjg5RjdCNzMwN0M4OUEKLToxMDI1OTAwMDY0MjFGNDc5Q0I2NTFCMEJCRDM3M0I5QUM1RThGMjYzMjgKLToxMDI1QTAwMDZEODlCQUZBMDUwRTk3QUVGQzdCMDkwMzc1RTVCNzNBNUIKLToxMDI1QjAwMEYzNzRGOURCQjM2RUQwRDU5RkUwMUVBRENCREYzMUUyMTMKLToxMDI1QzAwMDU2NURGRDQ5OUU0OUJBRkM5NEMyMTlCQUZBRDM4QTRCQUEKLToxMDI1RDAwMDc1RTU3NzREOUZBNzJCOUZFMTVEQThDQkRGNURGOTgwNjcKLToxMDI1RTAwMEFFRkUzRDc1NEI3NUU1NUY5QjQwMjMwNTdBNjk0MUJEQTUKLToxMDI1RjAwMENCOEFFRkE3RDgyOEZEQkVFQTMwMjNERjU4RkM5Qjc0QjYKLToxMDI2MDAwMDNCRTI3QkU0NTg1MzVENzdGNkZENTM0MjFFNEFDRkY2MUEKLToxMDI2MTAwMDlDNDA3QTQ5MTZFRkUzMjQ4Qjc3NkVCRTFBQzhGMTk5NzUKLToxMDI2MjAwMEM0ODBBQTQ4REY2RDRENDRGQTM1RDYzMzk2OEY4Qzc4MzYKLToxMDI2MzAwMEZEOTIxMzcwNThGQzdDRjQzNDMzRjA4OTkxRDdCRjNFN0YKLToxMDI2NDAwMDM0MERGMjBGM0UzRjlFRTc2RjdBRkQ5N0E5OTA1RkY3M0EKLToxMDI2NTAwMEZDQzNEM0NDQzBBNzQ2MEU3OUZEMTI5NjI3RkNFMjc2QzgKLToxMDI2NjAwMDlFOUZDMjQ4RjQ3ODdBRDBERkE3RkE3MEZFQjdBNEFFNzYKLToxMDI2NzAwMDcxNzMzQjQ5QjdGN0NDNjU4QTcwQzBGQkRBMDgwNzRDMjkKLToxMDI2ODAwMDAzNDBCRjk4QkUwRUY0OEJFOTFCNDBCRjE1QzA5RkRFMTAKLToxMDI2OTAwMDAyRkFDNUY0MDhFODlGRjhGRDNGNDFGRkM0RjQ1REQwOUQKLToxMDI2QTAwMDNGMzE3RDBGRjQ0RTRDNUI0MUVGQzRGNDc3MEREMzI5REQKLToxMDI2QjAwMEZEQTBDMTRCRURGRUQwNTA0OUU5RDE4NjNBRkFGRTUxNUEKLToxMDI2QzAwMDQzM0RBNTdGNkVGMEQxRjdEODQxRDI4RTExNjBCQUZCQTEKLToxMDI2RDAwMDAxRTg2NzQ0N0ZFMjAxQ0JCOTUwM0ZCMEY0NTc0QUZGQUQKLToxMDI2RTAwMDY0NjMxRDZCOEI0MDdFRDE2NjhFRjlENDE2RjQzQkY2ODUKLToxMDI2RjAwMDZDMDczMEIzNEY0M0U0QjE2OEU2NDkxRTQ0RTNGNzczMTcKLToxMDI3MDAwMDkwREY0ODdDRkY1NTdGNkZFQTIwRTAzQjFGQkFBNkE0MEMKLToxMDI3MTAwMDBGNTVGMURDQUE3QjEzRERCMjFGOEFGQkY1QzY3RUJGMjUKLToxMDI3MjAwMDEyRjRGMUQ3NDE5RTRDNkMyN0ZERUJEMkJGREQxNTM3N0IKLToxMDI3MzAwMDEzRTI3RjM3ODVDNEVCRDA1RjQ4REM4REY0ODNDQjM4NjAKLToxMDI3NDAwMDlGOUI2REZDOUVCMUY0NzNDQjc4MUVEOTVGQzExNzhDMzMKLToxMDI3NTAwMEY4QzNBOEQ1NjY5MjVGMjJDRDJDODBGRENCQjg5RDUxRTEKLToxMDI3NjAwMEI2RTYzQzhDNjMxODU1NjNBNzdCQjU3REUwQkI5NjRGRkUKLToxMDI3NzAwMEY1M0MyQUE0NUJGRjBBRjU3MzgzN0VGNTNFNjJGRTUwQUEKLToxMDI3ODAwMDRFRjMyRkY4QzI0Qjc2RDg1MTIyQUUwMERCREI3OEI5N0UKLToxMDI3OTAwMDBGREI4RjQyREJDMjc1OTQxMjdGN0ExQUVGRURFNjA3RUEKLToxMDI3QTAwMEZERkM1ODNGODJENzBGNjA3RjAzRkUwNkUzNDUwNUY3MjcKLToxMDI3QjAwMDRENzI2QzczMUVGMkVCRTRGOTc2QkExN0JBNzE3NDgwM0QKLToxMDI3QzAwMERFQjMyMkEzMTNDMDY1OEFENDlGNkMyMjJGRkQ3OTNCMTAKLToxMDI3RDAwMEZBOTAxRDY5QUNEOEVCQzM5Q0RFMTk4OENGNjJBQkUzREQKLToxMDI3RTAwMDkzMDhEQTY3NjlDOTY4OUY5QzI0RTRFNzdGODJCNzU5MzgKLToxMDI3RjAwMEQ4NEVDMjUzRTI0NUUyNTFFMjIzMjQ3RThBRjBEMDEzNDAKLToxMDI4MDAwMDVFOERGODM0RTI1MUUyQUZFMDhCMjA1RTEwQUU1N0UyMEQKLToxMDI4MTAwMDJEODg1N0I0RTdGRUJCRTBFRDNBMzM3RkJGQ0M1QTYzNTcKLToxMDI4MjAwMEEzNzdEMUFFODZDNzdCM0JEOEY4NjhBOEYyOTVEM0ZCRDcKLToxMDI4MzAwMDE1RjJDRkQyQ0JDRUI3MzA1RkNFNDY4RjQ3RDRDQUYyOTcKLToxMDI4NDAwMDZGN0IyOEY3N0VEMTYxODkwRUMxRjdDRDAyREYxOUFFMEIKLToxMDI4NTAwMEVFRUJDQjdBRjIzRDA2RDk3RjQxMEZGNURGMDk5MzcxOUMKLToxMDI4NjAwMDE3MUU3QkRFRjA2MEZDRTNFMjAyMEVGRjQyOTc0QUYwQTcKLToxMDI4NzAwMDFGOUIzMzk3RTQ2NDY2RTc3MkE2MTNGRTQzQkUzNEZFRTMKLToxMDI4ODAwMDlCNjI3QUQ3RjI0QkI2MTMzREI3NkM3QzJGQkQ3QzVBNTYKLToxMDI4OTAwMDY4RjA1QkRGMjZFNEQyREIwQzcyQTk1MUFFN0M3MTkwNEMKLToxMDI4QTAwMEYwNjdCQjk4RUIzQkJFNTdGOTMyRTc2QkQ3RkE1RTI1NzIKLToxMDI4QjAwMDdGRUY3NDlDRDg2NzQ5ODJDRUQyOUMyQTFCODk3NEM0NEUKLToxMDI4QzAwMEJDNzQ0RUJFODFFRjlERTZFMkJCQTAzRUNBREZDQUZDRUYKLToxMDI4RDAwMDk0REVDRTAyNzRCRTRFMDA0NjhDRjkzQjE4QTM3QkU0MTYKLToxMDI4RTAwMDg3MjMyNjk2RTBEREI4QjE0M0M3MEVDMEVGMjFFRkIyRDMKLToxMDI4RjAwMEJEODdGMzlCQUY3QUZGQ0IxMUYyMkVEQkVCRTM5Qzc0MjkKLToxMDI5MDAwMEJGRjI3NTVCMUFDOTVGQjgwRjJEMjFGNkMwQjdFMTdDMjUKLToxMDI5MTAwMDFBMDBFN0M3NjEzOEJGMzA3RDEzQ0VBRjAxQjBERTVGNkMKLToxMDI5MjAwMEMzRjk4NUY5REJCMjk2MzI2QzM3REVBOThGREI5MUVEMDYKLToxMDI5MzAwMDZGNzc4QzA1QzVBNDY3RjhERDlFRkI3MjNGODRFRjNCODMKLToxMDI5NDAwMDMxOTlFM0QwN0VGRTRFQ0NGNUUzNzBCREVGQzRGNDMxOTcKLToxMDI5NTAwMEYxRDRBQTUxM0E3OEZGODBFRUU0NDNCOTBGODJFMzhEQjcKLToxMDI5NjAwMEE3RjE4Q0YwOTVGMDM0QzI1MUMyRjc1RjgwRTdFNUVFMzUKLToxMDI5NzAwMEUwRjk5NTkwOUYzQjZEQkY4RjRBNDg0NUZGNUQ5NDc4ODUKLToxMDI5ODAwMEM3RjIzN0I5MkFFNDRGRTNENDEyMzE1RUY1MjY5QUU3NEQKLToxMDI5OTAwMEE4RkExQjk4NzkyOEY5NkQ3MjEwQUUzNTM2MEUyRkEzNjAKLToxMDI5QTAwMEREOEE2REVENjMwQThEREYzREEzNzlDM0IyNjE5Q0NGRjMKLToxMDI5QjAwMDM2QUE3NDZGRkNGQzhCNjE2NDhGM0FFNUU3RjZCNkRCRjAKLToxMDI5QzAwMDE1NkY1NDM2Q0NBRjQ2NzVBRUMxRjc0N0Q5M0JGQzlENjkKLToxMDI5RDAwMDMzRjZDREUxOTRDOTkxREY4MTRFQjdGMkZCRjYzNUI2RkYKLToxMDI5RTAwMEYxRERFMjUxRUE1M0QxMkUwRkVENzMyNkRFOEI5NDcyQTYKLToxMDI5RjAwMDQ1M0YyQjdGOTc0MEJFNUZEODkzOUMzMTNDOUNGM0MxRjEKLToxMDJBMDAwMDdFNTZDRUI3MjU1RUExMURFNTkzQTA5RkUxQzBFNzkyNUIKLToxMDJBMTAwMDdFMUE0RUZBNDU2MzZGNEYwNkFFNEZEQTExM0FGQjQ1MDgKLToxMDJBMjAwMEY4OTFERjhFMEE2NEQzQkI1Qzg1NDc1NDhBMjc3RTVEQUMKLToxMDJBMzAwMEM0Nzc3RDJGQkJDRTlFMEE3ODlBOTRFRTc1Njc5M0JFQkQKLToxMDJBNDAwMEY5OEQ4QTdDRTY1RDU4NjcxQ0RBMUY4RTBDQjU5M0ZFMDMKLToxMDJBNTAwMEY4MURGNUQwMTFEOTgyNUZFNEIyNUNERDdEMzU0OTc3OTAKLToxMDJBNjAwMEFBOURFMjc3M0EzRkUwRjdGMTE2QkRDREUzMzYxN0Y1QzAKLToxMDJBNzAwMDU2MjlGRURGMTgxNzM3OEE2NUZDMTRFRDhENjM3QjU5RTQKLToxMDJBODAwMERDN0U2NzkwQkZDODc3ODBBQzA5MjZFNjBDOTFCM0MzQTMKLToxMDJBOTAwMDlDRTFDQzE5MzI5Rjg4QUM1ODVEM0VEMkRENTc1NzNGNDAKLToxMDJBQTAwMDdBNDRBQUFFM0NDNjMzNDg1NzFFNTc5OEFGQ0JGNzJFOTAKLToxMDJBQjAwMEJFNTE1N0JGQ0ZGNDMxQkE3Q0EyRjczNjVERkRBNENBMzAKLToxMDJBQzAwMEM5RkEzQ0VFM0I4MDdCNzJERDRDNURCQkZFRjU2NUJBMUUKLToxMDJBRDAwMDdBMkU1Rjk1QUU5Q0Y5M0NBRDU5RjFDOEM3Rjk1RkRBMjMKLToxMDJBRTAwMEVBNDVCQUYyQTdBMjBBNzlGQ0I4N0QwRURENTM0QzZGMTUKLToxMDJBRjAwMEZBODFBRTNGODlERkE0Mzg4RTVGRTZFNEU3ODMwRkZFRkMKLToxMDJCMDAwMDIzQkY4NUMwNzM0MTgyRkVEQzE4RUIxOEZEODY4MzUyMUIKLToxMDJCMTAwMEJENUQyM0U5MkE3MTUwMEZGQ0FCNzQ1MENCRjQ3NEQwMjcKLToxMDJCMjAwMDhCQzdGMTE0QkMzREQ0ODk3MjhDMTFGRkU4OEYwODVEMEUKLToxMDJCMzAwMDI3RkEyMzQyRTE4MkZFODhEMDNDRkEyMzQyRUJBMzNGRUUKLToxMDJCNDAwMDIyQjQxQ0ZEMTFBMUU1NDM4RkU4RjEzRkFDNTU4RkZGODYKLToxMDJCNTAwMEVCOEY4RUY5QTc3OEJBQTE0RDRGMEY0NjNDREQ3NDRBMzIKLToxMDJCNjAwMDRGMUZBM0JDRTEwNDk3QjEyMDhGMjFCRDRCM0M0RDg3ODMKLToxMDJCNzAwMEZGRTg5QzY3QzVEMTY4MzdCODg1NzlFODVFQzBGRjE2NjUKLToxMDJCODAwMEJFNUVDODE2RjYyMzgxQUYyRkQ5OUE2MUY4Q0VFNUM1OEYKLToxMDJCOTAwMDUyQ0VDNzdCM0FFNzlGRUJFRjc5MDlGOUVFMDlFNEYzRjAKLToxMDJCQTAwMEMzQUVCNDAzQzg3ODUyREYxODhFNEZERkIxMzBFMjU3OUUKLToxMDJCQjAwMDVGOUJEQTIyRjFGQ0Y4QkVEQTQ2NzZGOTQ0RDZGMTI2QkMKLToxMDJCQzAwMEJFM0ZFM0U4RTUzRDg0RkNBODBGNDYwRjQwRjk5M0YzRDAKLToxMDJCRDAwMEVFQ0NDMzczNkVENkFGQUMyOTI4RDdDQ0VBQ0ZERjEzQzcKLToxMDJCRTAwMDY0Mzk2REY0NEU4QjlDQ0ZBQzI0MUU3RkY0NzZCNkUwMzYKLToxMDJCRjAwMEQzNkUxRTg3RjQ2RTM2QjdGRjQ0QkExRDE0MDc1RDlBNzQKLToxMDJDMDAwMDIzREVBMTMxQjM5NDU5ODM5MTBFREYwRENCNDQzQTVCOUYKLToxMDJDMTAwMENGRUQ1QzZEMTYyN0M1QjVGODgwMUVEMTRGODlGMjM2MTEKLToxMDJDMjAwMENBQzNDOTQyMUU2REZDOTNDREM2RTk4RUU5Q0VGNzgxQjkKLToxMDJDMzAwMDdFOUIyRTBFMzc3Qjg3NDM5NzFGREM5Q0EwQUIzRkU0MjcKLToxMDJDNDAwMDgwNTM1NzlFMTdDOEQyOTUwRjNERTJENkU1ODdCNThFQzMKLToxMDJDNTAwMEQwRDVCRkZFQTg0Nzk3QkZBMUFENTA1N0ZGQTY1M0M1MUIKLToxMDJDNjAwMEJBN0MxMkVCNzgwMkUxQTlFNkE0MTIzQ0ZBMkJDMjBFNjAKLToxMDJDNzAwMEUwRTQ3ODk5RjVGRDc4QkE0RjIzRjUwODE5OTdFRDE1M0EKLToxMDJDODAwMDc0NkNENDQ3RkE2QjVFOEFGMzZFNEM2NDZFQkEwRjYyNTIKLToxMDJDOTAwMDEzRkEyMEQzRUIyOTVFMTE1NzJERTU3OUU2RDNDNzU1RkEKLToxMDJDQTAwMENCNzhFQTJFN0Q0NkU4MkY1MjlGMDg4OUE3RjZFMEZDRjQKLToxMDJDQjAwMDY1M0M3NTE3REVDNUZCOTI0NkZBNzRFNDA4QkY5MDYxNjcKLToxMDJDQzAwMDFERkQzNTdFRkZBQkYxMDE4REVFQjFDOEY5MTlFNzM1NzkKLToxMDJDRDAwMDQzQzQwMzZFQjM3NUZGRkU1MDRBMEVCNzFCNkM0RTJERjYKLToxMDJDRTAwMDhFQ0Y4MTdBQ0ZDMEYxNDRGMEJDNjIzQzc3OUIwRkUwN0QKLToxMDJDRjAwMERCRjgyM0NEQkRDQzc5RjVGMTY2MERFMUVCMjlDMTc3ODkKLToxMDJEMDAwMDU1NzNFODlENEVCQUI3MjZDN0NEMTVFM0Y2Q0E1NUJBMzYKLToxMDJEMTAwMDVEREZBQzY4MUVERkM1QTIzNUJBNzdEMUYzNzgxQ0FFOTMKLToxMDJEMjAwMDA5MUE1QjRFRUYyNDg5N0IwOEY3QUM2OTVFOUIwOTQ1NjUKLToxMDJEMzAwMDI1NUE5Mzg1QkZBQkVGQjdBMDlEQTg2ODBDQzg4MTc5RDEKLToxMDJENDAwMEMwMjdCNkVENUI2RjA3RjlFNzk5N0EzM0Q5N0Q4NkU1NDEKLToxMDJENTAwMDI0REZFOTFCMTBCQzU3RDIxRkY0MzRBNDkzMjJDNDNGRDQKLToxMDJENjAwMEY0RkJGQzYwMUVFRjdDNjcwRTVGNUY4MUZBNERENzdENDAKLToxMDJENzAwMDAwQUI4RUNGNzNGREFGMUJCQTIzN0E5NEVCRjhCRkJBQ0EKLToxMDJEODAwMDFGMjBFOUQ3MDgyN0E5NUYzMzcxN0UwRDEwRjM5MkYwNTkKLToxMDJEOTAwMEVCQjI5RjA4RjhDOUZCMTlDRTg1OTZFMjJENzZCQUU3MEIKLToxMDJEQTAwMDUxODg3MTY1MTI3RjA3MDc3M0JBNUMyREUwODFGNTkwMzkKLToxMDJEQjAwMDFGRjU1NEFGNDBDRDg5NDYzQjc4Mjc3MzQ2M0JBRTYyNDIKLToxMDJEQzAwMDBGRkUzRkJBMzc0MUYwRUZFOUJFNTc0RjdDRTIwQUZFRjMKLToxMDJERDAwMEQwQzNGREFGOUVFODkzRkVCRUMzM0RCMDEwM0VDMUUzM0QKLToxMDJERTAwMDdEMDQzRUZDMDM0Q0U0NTc1RjE1QTlERkM3RkI3M0I4QjUKLToxMDJERjAwMEREQTU0NEVDMjczOEI3RUQ3OTdBM0VDMUQwQUVERkI4MTcKLToxMDJFMDAwMDQyMTU3QzYyNEVEN0VGNEZFMEY3RDkyQjJDMjQ1RjMzNkQKLToxMDJFMTAwMDU2RkMxOEM2MTlGQzY1QkQ4NUUyNjI0Nzc5MThDOTMxQjAKLToxMDJFMjAwMDY1MUIxNUZGNjYwNUNGRDE5MTA5MzhGRjUyOUZGRTNDMDcKLToxMDJFMzAwMEJFODVCOTU3QTJGRkEzN0NCNUZFRkI1QzNCRkY5RDhBMTQKLToxMDJFNDAwMEQ5QzY3NzUzODRCRTNFRjcyQUZBRkE4RTFDNzE4RUJCMjAKLToxMDJFNTAwMDk5OUJFNDJFRTFGRkFGMTQ2RDhDNzI1N0E3OUZGQkNEQjkKLToxMDJFNjAwMDUwREY1NkI5REQ4OUUyQzZFNEY5RUU0NEZGNERDODdCNzgKLToxMDJFNzAwMDIwMDBDRkYwMkMzQ0M3OTc5QkJCOERFN0VCODI2NzBGMDAKLToxMDJFODAwMEYxMEFFN0VDMjI1RUMxQ0VFMzMzM0FGNzg2NzFGRkE2ODIKLToxMDJFOTAwMEY0MkI4OUZBRTc3Qzk3QTgxQ0VCNjM2RkU3RjM3OERDRTcKLToxMDJFQTAwMDg1RjQyNzE5RkQ1NTlENzYxM0Y5NUIzQUY3NDY5MjdGMTUKLToxMDJFQjAwMDFFRkQzOEQxNDAwNzY3NEM3QkUyNDdCODgyRjNGM0I2N0EKLToxMDJFQzAwMEE5M0EzRjg4MzFGNTJFN0Q4OUY0QzU4MTY5REVERjIxN0QKLToxMDJFRDAwMDVGM0Y2Qjc2REJEQzkwN0ZEMEZFM0FCRDFGNTUyNEVDNjQKLToxMDJFRTAwMDVFQzZGOTc2RTk1RDIzRjlGQjJFOUQzRTJFQ0Y3NjE2NjAKLToxMDJFRjAwMEYyNzczODgwMkYzMkRDNDczMjBFNjExMjAzMkQxNUQyNjMKLToxMDJGMDAwMEQyQzAwRDM0OUZFRkVBQ0Y5OTcyMzk4RkZCMzEyRkRGOUEKLToxMDJGMTAwMDQ0RURCREFCNkZBMDdDRkZFNTZCMTdFMjNEOTg2OThEN0EKLToxMDJGMjAwMDczMkRFOEMyNkU3QjYyNDk0MTM4MzQ2RDRCRjYyRjBCMkUKLToxMDJGMzAwMDQ3QkM4RDU2QkFCNUNCNUYxMjc4NkIzM0M0RDdDQkI0RDAKLToxMDJGNDAwMDVDRjAyMzdDNDM4RUYzMjUxMTg3QjQ1NEExN0RCMDQ4RjcKLToxMDJGNTAwMDYxMzIyRTg5RjhCOENDNUY2QTEyRjkwMjlFNUZCQzgyOUEKLToxMDJGNjAwMEU3REJDNEZCRkFEQjg1MUQwNUQ3OEQyOUFFMUJGNUZFMUIKLToxMDJGNzAwMDlEQzJDRTgyRUJDNjE0RDc4RERGOTE2RjYxMUVGOTE2MEMKLToxMDJGODAwMEU2OTE2RjYxMUVGOTE2QTZDOEI3RjA3QjE5MkI0RUM5RTIKLToxMDJGOTAwMDUzQjkxRjZBNUNFOEJFQkI2QzYzRTM0MkY2MEJGQUExNEYKLToxMDJGQTAwMDQyRjNFODg3MEFBRDhGN0VBOEQwNzJGNDQzODU5NkEzREEKLToxMDJGQjAwMDFGMkEzNDhGN0VBOEQwRkFFODg3MEFDREIzMTFCNzA2NEUKLToxMDJGQzAwMEYzQzhFNzNDOTM3NEY5MjkyMEU3OEYwQkQ5REZFODg3MzIKLToxMDJGRDAwMDBBRUQxRkZENTBCQUZFQkMwQjc1RURFRjY2RjVCQUY2QjMKLToxMDJGRTAwMEU4ODcwQUFEN0Y2RkJEQTJGMzUzREQyQkRFMzkyRERGRkQKLToxMDJGRjAwMDEwQzdFOUM3NTlFQzFFMEM3NEYwNUYxMUZGQjhERjkyREYKLToxMDMwMDAwMDhBNzg2RTk5QzdGNUIyNzAzN0M3NzM1MzIxQzdCQjg5RTkKLToxMDMwMTAwMDcxM0M3N0NDMjAzQzJGRDE3OEJFODBDNzI3MUJFOTA3QjUKLToxMDMwMjAwMEZEM0RFMzJDRENERjgzMjlGQTdCMzA0NTdGMEZBNkU4RUEKLToxMDMwMzAwMEVGMTk5N0NFRkQzRDk4QTJCRjA3QkZBM0JGMDc1M0Y0N0EKLToxMDMwNDAwMEY3NjA4QUZFMUU0Q0QxREY4MzI5RkE3QjMwNDU3RjBGNjMKLToxMDMwNTAwMEI2NDM3RjBGQTZFOEVGQzFFRkU4RUZDMTE0RkQzREY4REUKLToxMDMwNjAwMEZEMThGQTlEMkNDMTc5QTExQzNGNDBBNzNGMDIxREVBMjMKLToxMDMwNzAwMEY0NDc4NzJFOEY3MjdDNjg3RDk0RTM0M0NCNTE4RTBGOEIKLToxMDMwODAwMDJENDczOTNFMzQ4RjcyN0M2ODdEOTRFMzQzRjM3NTM5NjQKLToxMDMwOTAwMDRFREE1RjI4Q0Y4N0I2NDM3OTNFMzQzRkI4QzlGNzI2NkEKLToxMDMwQTAwMERBQ0UyNjZDQkNGMDA2QTY2RDkxQ0EzMzBBQjA4Qzg1QzgKLToxMDMwQjAwMEJCRjZERTg5N0VCOUI2MzAyNTI1MDYzOEE3NDU3OUU1MDkKLToxMDMwQzAwMENFNzE5MEY3OEFGOEJGNUNENjYxNDI3QzdCQzU3QkVBMDMKLToxMDMwRDAwMERFMDBBMzc4Q0JDMTdGNERBNEYyMTdDNEJEN0VGQTAzRjYKLToxMDMwRTAwMEJDRTdFRDY1RjRCQjI0RDI1RjJDREJCQjk5NDNDNTU0MzAKLToxMDMwRjAwMEQ2MEZFNkJCQUY2NzFDNUZENjIzRkUxOTMyMEZCQzAxQUIKLToxMDMxMDAwMDhDRjEyQTc5NEJFQ0Y5MThFRkI5RERBNDUwOUNDNEY2ODgKLToxMDMxMTAwMDY1M0M0RUQ4NDg1N0RCMDQ1RkRBNkVEQUYzM0FERTAzREIKLToxMDMxMjAwMEU5Mjg1NUU4M0U3MDg2OTkxREIxRTQyMzlDRUFGMkYxNDYKLToxMDMxMzAwMEZDNUQzQjM4NDZBQ0FCRUU0NkJDNkYyMkU3MkRFRDlCMDkKLToxMDMxNDAwMEMwMjdFOEZFRENDODhFRDZCMUQxRDA4RkQ3Mzc5QTdFQTMKLToxMDMxNTAwMDI3QTU0OEUzNzIwM0I2NDM3RDMyREJBNzc4QjY4NEQwNTcKLToxMDMxNjAwMEY3RTM4MzM5REZGNEZBRjhGODNGREYzNDkxQjcwQkU3ODAKLToxMDMxNzAwMEVEN0VCRTI5OEFFMDM4NzFCOTQyRjE1MjIzNzczMjBGRDEKLToxMDMxODAwMERFQ0ZGNThCNzk2N0VGMENBODM4NUVFOTcyM0U5RUVDRDYKLToxMDMxOTAwMEI3NzQ2MzBBREQ1QjJDNjU2REUzMTJDODQ3QTIzMEU0QTcKLToxMDMxQTAwMERCMTI2RUIwQkUzNzcwN0RBMDM2MUM0MUZCRjRCNURFN0QKLToxMDMxQjAwMEZCQjlGOUJBOTgwMjhDQTM2MzJEOENERUIxOUM3MERENEIKLToxMDMxQzAwMDZGNzVFQjI1QjQwRkE3N0VFOTVDQ0JGNDI5RjQ1RUYwQjQKLToxMDMxRDAwMDQ0REZEMjY1QTg2RTRDRjAyRDdDQjMzN0Q2REZDQURDNTUKLToxMDMxRTAwMDJFMjcxRDQ1NzQyRjU2Q0U2NzkwNjc4RjA5OEU0NTk2MDIKLToxMDMxRjAwMEMzNUE0RDYxMEFFMjlCMUQ4RTBCQTExRkQ4Rjk1MzExRDIKLToxMDMyMDAwMERGNzk2RTBCQkRERjNCQzlFQ0IwRDBGQjExM0RDNDlGMzUKLToxMDMyMTAwMDVDQjJDQkY4MTM4M0JDNjA4ODMzNjk1QzcyMzQwNUVEMTMKLToxMDMyMjAwMEM5OEIyMjRENjRGRjVERjQxMkZGM0QwMEVGMDY4NUY4NjcKLToxMDMyMzAwMDlBOTQ4MzRBNDU5Q0RBQTVFNTZGRjZCRTBCRTFCRUM3QkEKLToxMDMyNDAwMDQyRkRDOUY4OTNEQTM0N0Y4QTA5RTNFQUZCNkVDRThEM0EKLToxMDMyNTAwMDU1NDkwRUY4RkQ2MDk0MDM3Q0JGQkM3MzA0RDY1QkMxNzYKLToxMDMyNjAwMERGQjFCQ0I0N0M1QTc0ODA3QUUyRkU5QTBBMDFBRjBBREMKLToxMDMyNzAwMDExQzc1NDhBMEY3QUFCQzFERkQzOTJGNzNCNTgxMzk3MkIKLToxMDMyODAwMEY3QTQzREE3RjQzNzQzREY0MkZDOTYzRTJEREU5NTVFNjIKLToxMDMyOTAwMDVENEFGN0IyOEQ3MTQ0RjM5NjVCMjhFRTY4OUU0MTJFMkQKLToxMDMyQTAwMEFDMTY3MjYxRjU1NUU0QzJCMzgzMEQ3MkExRkNCRDE0NzYKLToxMDMyQjAwMEQxODZBOUZERkU4MDcxN0JGMjVFNjI4OTg1RUZGRjkyNjcKLToxMDMyQzAwMDNEOENFQ0IwMjU0QkM3OUFFODFERTQ5NzM4REQ5NDJDNzMKLToxMDMyRDAwMEU1RjI0REM5Q0IxRUJBNUYyOEU1QzVGNzg1MUMzM0Y5NjkKLToxMDMyRTAwMDcyMTJDMUZERjc0MjZFOTk4NkYxOTUwMERGQTJCNjMwRTkKLToxMDMyRjAwMDExODc5NTQ4RTk1RDk3NzlCQ0U1NjQzQkU3MDM2RDA3NjUKLToxMDMzMDAwMEY5M0IxMDlEM0UyQjk3QTdERTYwRkMxRDMzMDM1RDRFRkQKLToxMDMzMTAwMDMyRkI0RDc4RTFDRTNEMTJFODEyRjIxMzUwMEU4MkZFRTAKLToxMDMzMjAwMEE2QTM1QzE0ODc3NEVFMkFBMEY4QkQ0Mjg1RUVCRDE4RjIKLToxMDMzMzAwMEU5QkNDODUyRjcyNkM2ODcxNjZENjM2RTFGMEJBNTczQ0UKLToxMDMzNDAwMEEwNUZFQ0NGQTdEMEZCMDA1RUExRDc0QUZBMzVEMkZCMzUKLToxMDMzNTAwMEFDMDg2MThGQjI3MzdCNTM5NzVEMDI2NTU0N0NBNERCMkMKLToxMDMzNjAwMDE3NzUxN0NBOERCM0QwQjdENzk3MTMwQ0M2OUQ0NUU2MEUKLToxMDMzNzAwMEYwRjJGNERENTE3NzJENDcyNUE3MDczQjg1RkEwMzhENDEKLToxMDMzODAwMEUwRTE5NUVGMjBGNDYwMzc0MDdCMDFGMkM5N0JFRUNCQTIKLToxMDMzOTAwMEQzQ0E0MkY4RTQ5NzQzQzYxNDBDRTkxREM0Nzc1OUQ3NDEKLToxMDMzQTAwMDdEQkYxQzdBMTc3NEQxODNFOUY0N0IzODNEQzlDM0U1MkUKLToxMDMzQjAwMDAwNTdEQzE3QjNBMkRCRUVDNzVGNjYxQjk3Q0IzQ0UzN0QKLToxMDMzQzAwMDQ2RTBFRjBCMzJGOTA4NzkwMEUzMDg2NzhBRkNDMkRDQkIKLToxMDMzRDAwMEVCRkY4OEJBRURBQzA4OUVGN0VDRUU3NzE3QzY4NUQ0MDQKLToxMDMzRTAwMERBREFDNjIzRDkyREM4RjExNkUyM0RDNjIwN0YyQUY2QzcKLToxMDMzRjAwMDI0MjlDODlGRjIwMkE4MTNDRUM4MTBFNzhGQzExRUIxQkUKLToxMDM0MDAwMDMwRDdDOUQ3NjlCMDRCOTRFNzcwQkUyRDdGMTdFNUY4NjgKLToxMDM0MTAwMDgzRkI3N0UzNzkyNUU3N0ZCQzg3REY2MTk4OTc2QkZBQjkKLToxMDM0MjAwMDVGQkQwNzYxQkNGRkYwRkRCRURFOTlCOUQwRkY2MzI2MkEKLToxMDM0MzAwMDdFOUZCRkFGREFDNDg0N0Q4OEZDQzI5MjVGMzBGMTBFRkMKLToxMDM0NDAwMDQ2MTBFRjFFN0E0N0I3RjE0MUM1MTE2QTlGRjJBRTU2OUEKLToxMDM0NTAwMEY4M0RGQTFFRUMzODJDQUJFMzg5NkREMDZFNTY4MzQ2RUUKLToxMDM0NjAwMEJGRTNCNzI5ODNEM0NGMjZBMDFGRkFCRDE0QURGNTREMTYKLToxMDM0NzAwMDlCMkIwOEM3OEZFQjFGQjFEMEVGRDJCMDQwM0FCRUJGMzUKLToxMDM0ODAwMDMzQjMyRUNDOERGQ0Y4Q0IyMUM1NzVCOUMzRjBGNzQ4MEEKLToxMDM0OTAwMERDQzQ4NzBBMzA4NjFDQ0ZGMzVFQzU4QjcxM0RCNTZCRUIKLToxMDM0QTAwMDBFM0Q4M0VGMDkyQzY4NzFEMUVGOTU5NDFFQzg1Qjg5OUUKLToxMDM0QjAwMEVGOUM3QzM5QzQ1QjhGRTVBNTc2MDdCREE3MzE3Rjc5OEEKLToxMDM0QzAwMDBDOUQ1RkIzRkE4ODdCQTFBQzgzRkM2QzEyRkU0REMyRUQKLToxMDM0RDAwMDdFNzVBQjlCODlERkRCMTJGNzFEODA0MTRFRDJENUVCQTkKLToxMDM0RTAwMERFOEUyN0VEODQ0NjNCODNGMTdEODk5RUVDMEJEMjlFRDgKLToxMDM0RjAwMDgwRjYwMzJEQzRDRTI4RUQxMzk2QUNFMzMzNTA2RTI4MkUKLToxMDM1MDAwMEQxRjRGNzEyNjU3QTI4NTdFOEI5NDIwRjlDREQ3NTZFNDEKLToxMDM1MTAwMEU1OENFRjgzRjJGMTNBQzU0MUVGNEREQTlENzdERDAwOUUKLToxMDM1MjAwMEY5OEEyMzE2OENFQzY0NDVCMTRFMERERjFGRTgwMEZDRDAKLToxMDM1MzAwMDYyN0M3NDE5RUM1N0U0MzMyNTIyNEVBQjYyQzMwREI0QTAKLToxMDM1NDAwMERGMkFGQzkwNzZGMzBFQTc0Q0VGNUU3NzM4Rjk2NUE0N0UKLToxMDM1NTAwMDlGODA4N0ZDOTYxNTBFOEYxNjFCQjJFRkNCOUIxNERENTgKLToxMDM1NjAwMEJCMDMzMkJGMjc5N0RCRTM0QTYwMkIyM0ZDRUVCOUNGQzYKLToxMDM1NzAwMEE1RTFEQjNFMjUyMDQ2NjBGQ0RGQTE1Q0E3Q0U3RjBDRTkKLToxMDM1ODAwMEY1MjgxRUE0Mjg5NUJEQzVERjgxODc3OUJCRjg3OEY5OTkKLToxMDM1OTAwMDIxRkQ5NzM1RjE3QkQzMzIwRkY1NDlGRTc5MzUzNzkyMEUKLToxMDM1QTAwMEYwNTdFQTgwNzVCQjMwNzVEMDNDMDEwRTA0QTc4RUI1OEMKLToxMDM1QjAwMEQwOUY5M0M2MjE3Qzk0MDdGQzE2RDRCNzRCMzAwRTA1RTAKLToxMDM1QzAwMEYyMzMxRDdFMEI4RTUzQjY5Q0JGNjNFMjVEQzNDN0YxMjEKLToxMDM1RDAwMEFFOEVEMTA2QTM3QzY0NzY2OEM5MDgzRkYxM0JBRDMwNUUKLToxMDM1RTAwMDNGOTIyMzJCMDAyRTc4MUYwQkVGQkJFMUQ5NjI4NDRGNTMKLToxMDM1RjAwMEE5OTg2RjQ1NTMwQ0JEQTMxMEZDQkVDRTgyRjg5OEQxOUMKLToxMDM2MDAwMEMzQkIwOEU3MDVERDk2MkQxRjRERjdENzJCQ0MxRUJBOUYKLToxMDM2MTAwMEU3RTAxNUYwRkRDQkMyQjA4N0QwM0YzMDYzRkRFMzE2ODUKLToxMDM2MjAwMDE3RTQzRjExRjQ3QjVFRUNCQkEyRDQ0MDNBQkQ1N0I0MjMKLToxMDM2MzAwMDMwQ0M4REYzOUNFMTY4QTJGNTc1QzFGNzUxODA4NzgyOEIKLToxMDM2NDAwMEVGREMxNDEzN0M4MTJFN0MxOEI3NTdCMTVFOEZDRkUwNkUKLToxMDM2NTAwMDdDMzg3QzJCRDY5N0QyN0U5QjYzRjY2QThFRDA3OTZDQjEKLToxMDM2NjAwMDM4OTQ4RUY3QUE2NkMwRkVDNjc3MjU5OEMzNEJGNzI1MTcKLToxMDM2NzAwMDNGN0RGNEFFMTQ1QTI3Q0MxM0UxMUFFOTc2OEVDN0Y3RDIKLToxMDM2ODAwMDg3ODA0RUY4M0QxOEIxMUU3OUFGNUI4RTY3MTlDMkVGODcKLToxMDM2OTAwMDlENUE4NjcwRkI1OUNGRkJEMjQzNzI0RDIzRTAxN0VENDQKLToxMDM2QTAwMERFM0RFRDRCMEQxOTM3OENBQjU1RjBERjkxMzBFRTUzMEQKLToxMDM2QjAwMEI5M0ZFNUJFOTRGQjU0RUVERjY3MkNDNTgxMDQyNUM4RjUKLToxMDM2QzAwMDY3RTA5Q0FEN0JCMTFCMzgxNTBDRTE3ODk4MjlGMDBBQjYKLToxMDM2RDAwMDcwN0QyM0Y0OUU1N0VFMTBCRTlGNEI1MkY1RkIxREZCRjEKLToxMDM2RTAwMEMzN0VGQjBFRTE3ODJGMTkxMzQ4Qzc3Nzk5NjQ3RDM5QTMKLToxMDM2RjAwMDZFNDkyQzZGODc3NDhGRjRENjU3OEM4N0Y1MTc1MTdERTAKLToxMDM3MDAwMDkzOEU1Rjk0NzdGMThCOUQyQkUyOTE1RkVDNTFCODFGMDQKLToxMDM3MTAwMDc0RURFMUU0RUZBM0ZDQkE4QkNCQUY2NzZCQjZDREM3MUEKLToxMDM3MjAwMEYzOTI5OUZEMjlBMUVGRkJDRjA2MzkwN0Y5QzQxQzcxNkIKLToxMDM3MzAwMDNFNTcwNEJBRTcxNzNCMzNCQ0Q5NDM0MkY2NzNDNUNGQjMKLToxMDM3NDAwMDc2NjU3ODM5QkYwOTIwQkZGOUYzQUU1NzNGQkNEMTE5NzAKLToxMDM3NTAwMDNDNEZFNTdBQ0E1NkZGRDY1MjZBMEY4NTlGMjJERTFEN0UKLToxMDM3NjAwMEU5QTRGQjc4RTU3NkNEODlGMUNFRTVDQjRCODlGRkIyQjQKLToxMDM3NzAwMDA0OTAwQjk1OTBGODMzMDM1RDk0MkU1N0U4MUU1OTc5MDkKLToxMDM3ODAwMEZENzBCRkZBQkZDOEE3Q0JENzRDQTI3NzBGMjRERUU0RTkKLToxMDM3OTAwMEZCMkNGMjdDOTVGMzlGMjhGMDM1NjkwOERGODczMzA1MTEKLToxMDM3QTAwMDdEQ0ZBQzFDQUQyNUY2MjJCOTFCQzMyQ0Q5MENGMTdEMDUKLToxMDM3QjAwMDQ2ODVGRTdCMTdERUJBRkNENzM5MkI3MUJGRTBGRDIyQjAKLToxMDM3QzAwMEQyNEZENjU4QjhCRDZGMjdCNzNGOUU1REI0RkZCRDNCMDMKLToxMDM3RDAwMEExREU5OUM3MzZBNzMwNTU4RjM3OTQ1M0U3MDg3OTc1MUUKLToxMDM3RTAwMEFFQjBGRjc1ODNCNzMyOTREQjY0N0VFRTI2OEVCN0YyRkYKLToxMDM3RjAwMEREQkZGOTA0REYxMzJCNDkxNUZDNkUyRDdGMDdBMEFDNEMKLToxMDM4MDAwMDc5MEZFMTcxQzZFQTc1MTYxN0NBNzU0MzVDQkFGNzM2QzcKLToxMDM4MTAwMENBRUJGMjFDNjg1NzlFQjk3QUIzMDVGOUM0QTIyMTFDMDEKLToxMDM4MjAwMDhFQzZGRDUwMjJFMjg0MjU5Q0YxNUM1MjQyRkMxQkIyMDQKLToxMDM4MzAwMDNFRjI0NzdDRkZGRUJFODU2MTUxMThDRjIzQzc3OTRBMEYKLToxMDM4NDAwMEQwN0Q3OTVENEMyQzhFNTc1RTU3RkExM0Q0ODdFNDc5N0UKLToxMDM4NTAwMDYwNUNFNzg5MzBCRTVGQ0FBMDNGRENCNzI3NDZCQjUzMzgKLToxMDM4NjAwMDE2RTUwNEU1NTk2M0ZENDcwNDFEM0U2NUUxQkY1MzkzMkEKLToxMDM4NzAwMDE0RDFGQzFDQzUzNTJDMDg3NzIzRkYxODMwQTBDRDhGNDAKLToxMDM4ODAwMEUzMjI3REUzQkMzNTEzRkY1RDlCMDEzNTZEOUZFMzNDNzcKLToxMDM4OTAwMDQwRDRBNkI4MUE0Q0YxN0QyQzE0QkRFMzIxQkZDNUM0OTkKLToxMDM4QTAwMEVGNkZBNUFBM0MzRDIwRTAwM0U1MDEyQzY3QkREQUU4RjcKLToxMDM4QjAwMEY3MzU0MkUyNjY3NUY0QUJCMUFERjRGQjg5NUEyRjQ2OTkKLToxMDM4QzAwMEVGOUI0OTdBOTVGRDQ4N0E5NUY0RENEM0ZBOUFBRjcxNkIKLToxMDM4RDAwMDdEMjc1QzFDOUU5QUY4REQ5NDZCNUU5Rjk1RkY4RUFFRjMKLToxMDM4RTAwMDVDOTc5QzFGQzhGMDFFN0FERkUzODc4M0M5REU3MzYyOTIKLToxMDM4RjAwMEE5M0IwNUUzMjY3QjVFRUZGQTgyRjg2RUQ2NkI1Q0E3RTgKLToxMDM5MDAwMERDMzczMjE2QkVDQjlGRDVDNEZEMEUyNzE0MzhERkEwOUUKLToxMDM5MTAwMEREODk4NTYxMTRERjI2RDdGNTVERURFMTFGMEM4OTk1MDIKLToxMDM5MjAwMEVGRjk0N0EyOUM1OTEyMUVCQzJGOEZGMDNCNTZDRjdGNTgKLToxMDM5MzAwMDVGNTc3RTk3NzI4MTdDNjc0RUYyRUY5Mzc1RTJEQzY0OEQKLToxMDM5NDAwMDZENkI3MTdGQjNGQTM0N0FGRkU0NThEMzg5NDg3QzhGNkEKLToxMDM5NTAwMEU1QzQ2ODNFM0ZEOUVFM0UwQkJGOUZDQzIyMzUyN0RFNDMKLToxMDM5NjAwMDEzOEJCOEVGQjcwNTdERDAzRkI0REU5NUE3NDBCQjdCODYKLToxMDM5NzAwMEVBODcxRUMzRjdDN0VGNTlERTg3RjRGQkQ5NzZFNzRBMUIKLToxMDM5ODAwMDNDMTc2N0ZCNUNFNDBGOEU1ODlGRjcyOUJFQTMzNzdCN0IKLToxMDM5OTAwMDc5MzZGRDZFRUY3RDBBMkIyNjdENTJFODA5NzM1OEQ3RTQKLToxMDM5QTAwMDFGRTkwOTczMDU1RjlCOEJGQzEyRUY0QkQ1MUZBNjc3QjAKLToxMDM5QjAwMEYzRTZCOEMzRjJGMDdDOUZCQjgxRUIwOTQ1MjZCNjFBNEIKLToxMDM5QzAwMEZEODlGRDFCOEJDNzIzMUZFQjc4NDJFMUJGRkJCQzUxNzgKLToxMDM5RDAwMEZGMEU1Nzc2NjZGMTQ1M0MxRjhDRUZERURENjc2OUY2MUEKLToxMDM5RTAwMEUwM0ExOEM4MjM2ODc3OUE2RDJGRTY3MkJERTA5RkM3NEEKLToxMDM5RjAwMEQ2QjdEM0VGNjUyMkJDRTlGNzcyMENGNjlCRkUxQUJGNkYKLToxMDNBMDAwMDQ3REMxMTY5MjI3QjFDRTBGRDdERkMzRDMyN0M2RkRERDMKLToxMDNBMTAwMDRBRTc4RERFN0VEM0ZGQzcyM0U4RjdEQUU0M0RBMTBBNEIKLToxMDNBMjAwMEUxNzdGQTdGODkxMDZBN0EwMDgwMDAwMDAwMDAwMDAwQzgKLToxMDNBMzAwMDFGOEIwODAwMDAwMDAwMDAwMDBCQ0Q1NjdENEM1MzU3MzMKLToxMDNBNDAwMDE0M0ZGN0JFN0U1M0U4RTMxQjQ0QjA4MDYwQjcxNTdDOUIKLToxMDNBNTAwMDA1MjU3MTI2RkEwNjZBNEM2NkI0QjhBMTM0NTFBODUxRkUKLToxMDNBNjAwMDE5MkE2NUNDMkMwMTk3MzlBQjlEQ0U2OEI2QjEwNDE1RTcKLToxMDNBNzAwMDg5MkM4NTI5RkI2NzVCNEEyNDlCNjY2QzY5MjRDRTZDODQKLToxMDNBODAwMDkyOENDODNGMjY2Q0E0MjQwQkEyOTlBMTYzNTk5MDY0MjAKLToxMDNBOTAwMEQzOUQ3MzVGOUIxQTNGOTJGREI5RjdDRjc5RjdERUYzQTEKLToxMDNBQTAwMDc1Q0ZFRjc3Q0U3QjUwNkZFMjkwMDVEMDZDMDJGMUVDRDIKLToxMDNBQjAwMEVEN0IyRDBCQUMyOEJCMjVCMDU3MDJGNEQwRTYyQTgwNTUKLToxMDNBQzAwMDEzNUQzNTU5MTEyN0MwOUU0RkQ2OUZGNTk3MDExNDMwQ0QKLToxMDNBRDAwMDcwODc1MEVGMzc1REE0MTY1NjAwQ0NGNDY1QTcxRDY1QkUKLToxMDNBRTAwMDc4RUUwQjk0MDI5RUVGRTlGQkEwODBFNDRDOUZCOTNFNzgKLToxMDNBRjAwMDg4N0FFQkU0REE3NUE5MTkwMDREMTc1MjVEOTIxREUwNDIKLToxMDNCMDAwMDExM0Q2QkQxOEY4MjQ2OTkwMEZCN0QzNUQ5NTAwNEQwOTEKLToxMDNCMTAwMEYyNzBFNDUzQjkxOEUzMTcwMkM4RThGN0FGNTA1MkQwNzcKLToxMDNCMjAwMDhGMkEyRDQ3QUUxNDQ4MUM0MDMxN0E3Mzk1OTUwMDA3QjMKLToxMDNCMzAwMEY4RjBCNjU1RThFNzFFMEIwRUU0MEE3RDdCQjY2QzREMzcKLToxMDNCNDAwMEY4N0Q1MjRFMUYwMUIwMUIwMTdDRUZERDE2N0VFRUYzQjcKLToxMDNCNTAwMEQxQ0QxRUI0NkZGMTVENEUyMTNGMDdDRThDNTdDOUI4NTEKLToxMDNCNjAwMEZGNDJCMUI3NDRDOTI0QkY3RDAzQjI4NDc3RUZFRTJCODcKLToxMDNCNzAwMDc3RTMzRDRBMTUxMDc5NkU0QTczNkZGMzYwNUVEMTFGOEIKLToxMDNCODAwMDI1QTVERkZFRkM3OENENTczMEU5Q0FDNDdBNjdEMDY2MzgKLToxMDNCOTAwMDAwQUM5RjM3MEMwNjk5QTQwQzg2MzQ5NDMzMTI3NDg0QkQKLToxMDNCQTAwMDUwNkUyQTgyQzZBREQ2QzRGRUFBNTg1RDY2NkM5RDA1Q0QKLToxMDNCQjAwMDZFRENERjM3NzBBRUMwOEVGMjZFQjJCNkRFMzFCMEZEQjUKLToxMDNCQzAwMDI3NDg0MUZEOEI0NjAzRTFFNUQ1ODE0MTQxQkJERDdFQzAKLToxMDNCRDAwMEE2MDY1MTQyNzMxQTQwNkUyMjdFOEQ5MjA0ODA3NURCRDgKLToxMDNCRTAwMEQ3OEQ0OUE1MjdGNjAxODI2MkZGQUUwRTM2NTIxRTRCRDUKLToxMDNCRjAwMDAyNTFENzVCMjgyNzc0RTFCRDg0RUI0NDlCNTlGMTE3MzAKLToxMDNDMDAwMDEyNEU3NjkxQ0Y0NEE3QjQ4MUY2RkQ2RjMzMjg2MUI0OEMKLToxMDNDMTAwMEJFOUNCQzE0RTMzN0Q4QTA4REVDOTM1Nzg0QzIxQzcxQjIKLToxMDNDMjAwMEY2MERBNTU2NDgxQUE1MDRCRjVBNjU2REIxNUVCMjZFNzEKLToxMDNDMzAwMEM4QzNGMzgzODM0QzM2QTJDQjgzNTdBRjZGMDA2RDBEOUYKLToxMDNDNDAwMEMwOUU1RkNGRkQwRjU2ODNGREIxQkNGNzBGMEQxQUVDODAKLToxMDNDNTAwMDE4QUZFNTBCQkMyRkM2NkYwOTBERkVCMDA4RkRCNDVFQjIKLToxMDNDNjAwMEQ5NTVBOUM1RUQwNEE4QzIzQ0U4MTVFM0I0MEU2OTc1QTEKLToxMDNDNzAwMEYxMEQ0RDE5NzYzQjEzN0U3NjM5RDI0RUU0MjFCNjREQzcKLToxMDNDODAwMEExMzVEQkNGQTBERTJFQzJFRDY1ODBDM0U1MTVGNTQ3N0IKLToxMDNDOTAwMDk3OTI5NEM1QkQ0MTE3MkQ3MDI3MDM5QzcyREMzMjc4MzIKLToxMDNDQTAwMEM5Q0ZGQjMxN0Y4RTVCMjc4QUM0N0Q2QkQzRTEzMTNFNjgKLToxMDNDQjAwMEJDQTFFODg1NUREQzFFRUIyMUVDQzIzRUNCNDk1ODBFNzEKLToxMDNDQzAwMEEwQjY1QTc1MjQwMzNFNkIwQUM5MEI2RERDQTFDM0JBQkEKLToxMDNDRDAwMEFBQ0NBMjQ4NThFRjBFNTM0QTM5RDgwMEU2Q0Q5QTFDMTgKLToxMDNDRTAwMEI2NjhCMjlEQkIwNzlCMzBDNTc5M0U2NjA2RTQ3REJCRDYKLToxMDNDRjAwMEQ0Qzk0OEFFNzVCNjMxQUMzNEM4MTlERUMzQzRERjFDQjQKLToxMDNEMDAwMDA4MzExMDg1MDgzM0NBN0JGNkJCM0I5NTE0N0ZDRDkyRjIKLToxMDNEMTAwMEM4OUY4MDI5RTk5OTVBQkYwRUY5NzE1QzkxMDVGRUUwQjAKLToxMDNEMjAwMDhDNTQxMkNGMzNBRjQxMjNGMUFCNTcwRjI3Q0QxNTc0MEQKLToxMDNEMzAwMDZGMzc2QzJEMjMyRkY4NEVCODJGRjBFMDI1Q0M2Rjk4RkQKLToxMDNENDAwMDg1M0YyM0ZGRjFGQjVFMjVCRUEyMUZCN0QxN0E5MjYxQUEKLToxMDNENTAwMDlFMDZCQkY3MjNDQTYzMEJEMzk3QjkzODYxMjA5NTkwQjEKLToxMDNENjAwMEZGNTlCRDc2MEU5REU3NTQxM0YyQTI1QUEzMDVFNDczRTIKLToxMDNENzAwMEYwMDM1MkQ2QjAyOEM3NEFCQzY2QUEwQTFEMThGRjk4OUQKLToxMDNEODAwMEYzREE2RUUyQzdFOUE4MDk4QzE4MzcxMEFCNDc3NUQ0OEYKLToxMDNEOTAwMDMyQzU1MDJGN0ZEMTQ2MEVFNUE4NkZDRjgwMUQ2ODdGQkEKLToxMDNEQTAwMENEQzlGRDQ2Q0NGMzM0OTg4MkE0MEZBNkY1NkFDNEExMTAKLToxMDNEQjAwMEM1Nzg4NEYzQzVDMENEQUFEMDFGQkVCMUMwNTBFNjQ5QjYKLToxMDNEQzAwMDdGOENEODUwM0ZBRjlEMjkwMUQ0Njk5ODlCRUVGRDE5OTcKLToxMDNERDAwMEU1MEUwOEJBQThBRTVCMzJCQzlGRDNCQzk5OUNEQjM4MTkKLToxMDNERTAwMEU1NDU3QzRGQ0IyMTEzRjUxOTNEOEZFNzNGN0M2ODIxREEKLToxMDNERjAwMDI1OEQyN0YyOUE4RDRFN0ZGOUNEMEE5MjI2ODVBMTVERjkKLToxMDNFMDAwMEY1QjAxNDM2OTYzRjlEQ0Y2QzhFNUQ0NzcxNTAyRkNDMjgKLToxMDNFMTAwMDQ5REZDQTgzOEM5MUZFQzg2RENBQUZEQTY0MEQ0QjI5QTUKLToxMDNFMjAwMDY0QTdGRjNENjI0QUQ4QzE1ODdFRUFGNDRCMjAyMDdFNDkKLToxMDNFMzAwMDk0MDc5MDE1RDA3MDVCMTNFQkMzMzgyRTM3MTUyRTcwOTYKLToxMDNFNDAwMEI5MTlDMzI3NUUzRjkxM0NGNkM3NDE5M0Q2MUZERjVCOEMKLToxMDNFNTAwMDA3NzYxMjdGRTJGREZBNjY2QzdGRUU0MTkxOERFNkNCMkMKLToxMDNFNjAwMERDNzBCMTBEOUNDRkVGQ0Y3MTlDQUZCMDBDRTc1Q0ExQzMKLToxMDNFNzAwMDNBNEVCOEUzQTM5QUQwN0Y1REFDM0U4ODM3OTA1RjI5NzUKLToxMDNFODAwMEU2QjcyRTU2QTczQTJCRDdFQUYyRkExMzc1ODlGMTI0MzIKLToxMDNFOTAwMENFODM3OERFNzE5Q0UzRjhDMTNCNjNENzZEODUwMkI3QjIKLToxMDNFQTAwMEIyOEY0MUUwRjUyQkM1OUY1QzE4M0Q4RTZEMDU4QjI0Q0MKLToxMDNFQjAwMDc1Q0E1QkY4N0ZDNDJCNkM1RTg2QkM4RTlFRTE0QTNGNjAKLToxMDNFQzAwMEYxOUYwQTVGMjFBNENBRjE3RUUwMDAzMTBGMUEyNDhCMTIKLToxMDNFRDAwMDcyRUExOUYzQzA0QkYzNjAzOUNEODM0RUQxRTdGMzNDNUUKLToxMDNFRTAwMDdBOUQzMzlBMDc2RDYyOUQwM0QxQTMzQTVDNEZGMjQ4RTUKLToxMDNFRjAwMDMyRTUxQjMxMjNFQjUxMTZCQThBQzQzQ0NBQTM4RTJFN0QKLToxMDNGMDAwMEQ2NzBBMkJFRUUzRDk0REM3RjBBRjUwMzRDM0Q2RjQyQjUKLToxMDNGMTAwMEZCODAzRUQ2RUZGQkFDQzE0QkI4M0YxQkU0N0UzREM2RjkKLToxMDNGMjAwMEVCNEEwRDlFNkZDMkZEQUVCQUM1OEExRkVCMzQwQjMxNTIKLToxMDNGMzAwMEJENjY4Qjk4MEJBQjM5MTdFQkE4MjcyQkQ4NUY0OEZBRDcKLToxMDNGNDAwMEQ4RDc3OENGMkVDRjhCRTIzQkZFRjU0Mzc0NEVGNzJFQjkKLToxMDNGNTAwMDAxRUREQzA1QTVERDc0NUVFQjEwRkVCRThEQ0Y5OTBGODMKLToxMDNGNjAwMDkzODVCRkFFNUEzNUQ3MjJDRUIzMzhEOTFGNEZGN0U2NjcKLToxMDNGNzAwMEI5MzIwOTU3NEQwRjdGMDQ4NDVFNEY4RjlBNEI3OEY0MDYKLToxMDNGODAwMDZDMzUwOEJEQjNDQ0VERDk0QjdFQ0FBQ0NBMjVGNDFCNDkKLToxMDNGOTAwMEYxNThCRTFBRDBFMDA4MzNEQzlGRUNEMEVFMUJFN0FGM0YKLToxMDNGQTAwMEE3NTQ5QjgzNEJGQzUzRTdFOTNGQzQ1RjBEOEUzNkU0NzcKLToxMDNGQjAwMEZEMjRGMTcwNzkwMjFGQTYyMjE2NjkwOTlDRTI3Q0Y0QTcKLToxMDNGQzAwMEVCMTFBRjBDMERBRjYzRUM2OUJDMzI2Mjc4QjEwRUU0NUIKLToxMDNGRDAwMDZEMEFFMTE2MTJGNTlGRTcxQTBFRUQxMjQ0OTJGMDRFQUIKLToxMDNGRTAwMDEyNTc3MjhDMjgyNzMyQkM1NURBM0RDNzcyRTlCQ0MxMjIKLToxMDNGRjAwMDE4NTlEOUU5MjQzQ0ExMzlGNDhDM0U3Q0M1QTVGNTM5ODIKLToxMDQwMDAwMEQwNTcxNDc5REUxOEUzNzk2MzlDOEZFRjNFQzFDN0M4OUYKLToxMDQwMTAwMEUyRDRFOUE0MTgxRkQxRkUxNzhCQkI4NkUyREQ2N0UzNkIKLToxMDQwMjAwMDU1QjQzOUZBOEY1NEZGQUMzODlCNUNEQTdGQzk5Q0QxMDgKLToxMDQwMzAwMEZCMkFFOUMzQzU2QzJFRTY4OEFDRjVGNUE4RUI0RTNFMkQKLToxMDQwNDAwMDdENjdFMEVGOTFDNUY0RERFOTRENzc2RjI2M0RGM0QyNTIKLToxMDQwNTAwMEE4QzE0QkY1Q0M4REVBRTkzRTkzOUU3QkY5RjQzRkQzQTIKLToxMDQwNjAwMEQ4NzE0M0Y0Q0Q3RkNERjM1RjhFOEE5NEUyQjAwQTAwMUQKLToxMDQwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxODAwMDAwMDAwMjgKLToxMDQwODAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwRjAKLToxMDQwOTAwMDAwMDAwMDI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwRTgKLToxMDQwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwRjAKLToxMDQwQjAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwRjAKLToxMDQwQzAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTgKLToxMDQwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKLToxMDQwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKLToxMDQwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKLToxMDQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKLToxMDQxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKLToxMDQxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKLToxMDQxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKLToxMDQxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKLToxMDQxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKLToxMDQxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKLToxMDQxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKLToxMDQxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKLToxMDQxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKLToxMDQxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKLToxMDQxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKLToxMDQxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKLToxMDQxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKLToxMDQxRTAwMDAwMDAzMzI4MDAxMDAwMDAwMDAwMDAwODAwMDAzMzMwRjkKLToxMDQxRjAwMDAwMTAwMDAwMDAwMDAwMDIwMDAwMzMyODAwMTAwMDAwNDIKLToxMDQyMDAwMDAwMDAwMDEwMDAwMDNBNzgwMDAwMDAwMDAwMDAwMDA4RTQKLToxMDQyMTAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwOUUKLToxMDQyMjAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMEUKLToxMDQyMzAwMDAwMDAwMDAwMDAwMDMxMjAwMDAwMDAwMDAwMDAwMDA4MjUKLToxMDQyNDAwMDAwMDAzMzYwMDAwMTAwMDQwMDAwMDAwMTAwMDAzMzY4M0EKLToxMDQyNTAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMzM3MDAwMDAwMDAwQjkKLToxMDQyNjAwMDAwMDAwMDA4MDAwMDMzNzQwMDAwMDAwMDAwMDAwMDAyOUQKLToxMDQyNzAwMDAwMDAzQTcwMDAwMDAwMDAwMDAwMDAwODAwMDAzQTQwMTIKLToxMDQyODAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwM0Q4ODAwNDAwMDAwMTkKLToxMDQyOTAwMDAwMDAwMDQwMDAwMDNBNTAwMDA4MDAwMDAwMDAwMDA4NDQKLToxMDQyQTAwMDAwMDAzQTYwMDAwODAwMDAwMDAwMDAwODAwMDAzQTg4QTIKLToxMDQyQjAwMDAwQzgwMDAwMDAwMDAwOTgwMDAwM0MxODAwOTgwMDAwQjIKLToxMDQyQzAwMDAwMDAwMDI4MDAwMDNDNTgwMDk4MDAwMDAwMDAwMDI4NzIKLToxMDQyRDAwMDAwMDAzMzc4MDM2MDAwMzAwMDAwMDM2MDAwMDAzRUIwNEYKLToxMDQyRTAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwM0VCMTAwMDgwMDAwQ0UKLToxMDQyRjAwMDAwMDAwMDAxMDAwMDIwMDgwMDEwMDAwMDAwMDAwMDEwNzUKLToxMDQzMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwODgwMDAwMDAwMDUKLToxMDQzMTAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMUQKLToxMDQzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKLToxMDQzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKLToxMDQzNDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwRUQKLToxMDQzNTAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKLToxMDQzNjAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwNEQKLToxMDQzNzAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwQkQKLToxMDQzODAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKLToxMDQzOTAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMUQKLToxMDQzQTAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwOEQKLToxMDQzQjAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKLToxMDQzQzAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwRUQKLToxMDQzRDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwNUQKLToxMDQzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKLToxMDQzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKLToxMDQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUMKLToxMDQ0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUMKLToxMDQ0MjAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwOEMKLToxMDQ0MzAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwRkMKLToxMDQ0NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkMKLToxMDQ0NTAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwNUMKLToxMDQ0NjAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwQ0MKLToxMDQ0NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MKLToxMDQ0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkMKLToxMDQ0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUMKLToxMDQ0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMKLToxMDQ0QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMkM4MjIKLToxMDQ0QzAwMDAwODAwMDAwMDAwMDAwODAwMDAwMDAwMTAwMDAwMDAwRUIKLToxMDQ0RDAwMDAwMDAwMDAwMDAwMDQwMDAwNDkwMDAwMDAwMDAwNDkwNzQKLToxMDQ0RTAwMDAwMDAxOUM4MDAwMDAwMDAwMDAwMDAwODAwMDA0OTQ4NTIKLToxMDQ0RjAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwNDkyODAwMDgwMDAwMzMKLToxMDQ1MDAwMDAwMDAwMDA4MDAwMDQ5MzgwMDA4MDAwMDAwMDAwMDA4MTIKLToxMDQ1MTAwMDAwMDAyMDA4MDAxMDAwMDAwMDAwMDAxMDAwMDAyMDAwMzMKLToxMDQ1MjAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwNDAxMDA0OTAwMDQwNUYKLToxMDQ1MzAwMDAwMDAwMDQwMDAwMDQ5OTgwMDA4MDAwMDAwMDAwMDAxNTEKLToxMDQ1NDAwMDAwMDA0OTk5MDAwODAwMDAwMDAwMDAwMTgwMDAwMDAwMDAKLToxMDQ1NTAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwREIKLToxMDQ1NjAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0IKLToxMDQ1NzAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwM0IKLToxMDQ1ODAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwQUIKLToxMDQ1OTAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUIKLToxMDQ1QTAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMEIKLToxMDQ1QjAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwN0IKLToxMDQ1QzAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkIKLToxMDQ1RDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwREIKLToxMDQ1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0IKLToxMDQ1RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkIKLToxMDQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUEKLToxMDQ2MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUEKLToxMDQ2MjAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEKLToxMDQ2MzAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKLToxMDQ2NDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwRUEKLToxMDQ2NTAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREEKLToxMDQ2NjAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwNEEKLToxMDQ2NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMTgwMDAwRTIKLToxMDQ2ODAwMDAwMDAwMDE4MDAwMDQzMDAwMDQwMDAwMDAwMDAwMDQwNEYKLToxMDQ2OTAwMDAwMDA0MzAwMDA0MDAwMDIwMDAwMDAwMTAwMDA0MzAxNTAKLToxMDQ2QTAwMDAwNDAwMDAyMDAwMDAwMDAwMDAwMzAwMDAwNDAwMDAwNTgKLToxMDQ2QjAwMDAwMDAwMDQwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0EKLToxMDQ2QzAwMDAwMDAzMDAwMDAwODAwNDAwMDAwMDAwNDAwMDAzMDA0M0EKLToxMDQ2RDAwMDAwMDgwMDQwMDAwMDAwMDQwMDAwNEIwMDAwMjgwMDAwMUIKLToxMDQ2RTAwMDAwMDAwMDI4MDAwMDRCNTAwMDEwMDAwMDAwMDAwMDEwRTcKLToxMDQ2RjAwMDAwMDAzODAwMDA4MDAwMDAwMDAwMDA4MDAwMDAzODAwNEEKLToxMDQ3MDAwMDAwMDgwMDgwMDAwMDAwMDIwMDAwMzkwMDAwMjAwMDAwQzYKLToxMDQ3MTAwMDAwMDAwMDIwMDAwMDIwMDgwMDEwMDAwMDAwMDAwMDEwMzEKLToxMDQ3MjAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwODAwMDA1MTA4MDgKLToxMDQ3MzAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwNTEyMDAwMDgwMDAwRjAKLToxMDQ3NDAwMDAwMDAwMDA4MDAwMDUxMzAwMDA4MDAwMDAwMDAwMDA4RDAKLToxMDQ3NTAwMDAwMDA1MUMwMDAwODAwMDAwMDAwMDAwMTAwMDA1MUMxMkQKLToxMDQ3NjAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwMzk0MDAwMTAwMDA0QjMKLToxMDQ3NzAwMDAwMDAwMDA0MDAwMDUxRDAwMDMwMDAxODAwMDAwMDEwQkMKLToxMDQ3ODAwMDAwMDA1MUQ4MDAzMDAwMTgwMDAwMDAwMjgwMDAwMDAwMzYKLToxMDQ3OTAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwOTkKLToxMDQ3QTAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKLToxMDQ3QjAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwRjkKLToxMDQ3QzAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwNjkKLToxMDQ3RDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKLToxMDQ3RTAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwQzkKLToxMDQ3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKLToxMDQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLToxMDQ4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKLToxMDQ4MjAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDgKLToxMDQ4MzAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKLToxMDQ4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyM0U4NUQKLToxMDQ4NTAwMDAwODAwMDAwMDAwMDAwODAwMDAwMDAwMTAwMDAwMDAwNTcKLToxMDQ4NjAwMDAwMDAwMDAwMDAwMDIwMDgwMDEwMDAwMDAwMDAwMDEwMDAKLToxMDQ4NzAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAyREEwNDMKLToxMDQ4ODAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwMkRCODAwMDgwMDAwMkIKLToxMDQ4OTAwMDAwMDAwMDA4MDAwMDI0RTgwMkQwMDAyODAwMDAwMkQwMzgKLToxMDQ4QTAwMDAwMDAyRTU4MDAwODAwMDAwMDAwMDAwMTAwMDAyRTU5RjIKLToxMDQ4QjAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwMkQ5MDAwMDgwMDAwMkEKLToxMDQ4QzAwMDAwMDAwMDA4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKLToxMDQ4RDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwRDgKLToxMDQ4RTAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwNDgKLToxMDQ4RjAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzgKLToxMDQ5MDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwQTcKLToxMDQ5MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKLToxMDQ5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKLToxMDQ5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKLToxMDQ5NDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwRTcKLToxMDQ5NTAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKLToxMDQ5NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwQzcKLToxMDQ5NzAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwQjcKLToxMDQ5ODAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcKLToxMDQ5OTAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNTAwNzIKLToxMDQ5QTAwMDAwNDAwMDAwMDAwMDAwMDgwMDAwMjUwODAwNDAwMDAwNTIKLToxMDQ5QjAwMDAwMDAwMDI4MDAwMDA5QzAwMTIwMDAxMDAwMDAwMDA4Q0QKLToxMDQ5QzAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwRTcKLToxMDQ5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAyMDAyRDAwMDI4N0QKLToxMDQ5RTAwMDAwMDAwMDA4MDAwMDMwMDAwMDAwMDAwMDAwMDAxMDAwN0YKLToxMDQ5RjAwMDAwMDA1MDk5MDAwMDAwMDAwMDAwMDAwMTAwMDA1MEIwQ0QKLToxMDRBMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwNDVBMDAwOTAwMDA4MjcKLToxMDRBMTAwMDAwMDAwMDA4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKLToxMDRBMjAwMDAwMDAyOTYwMDAwODAwMDAwMDAwMDAwMTAwMDAyOTYxNkEKLToxMDRBMzAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwMjk3MDAwMDgwMDA0QzgKLToxMDRBNDAwMDAwMDAwMDAyMDAwMDI5NzgwMDA4MDAwNDAwMDAwMDA0QjMKLToxMDRBNTAwMDAwMDAyRkIwMDAwODAwMDAwMDAwMDAwNDAwMDAyRkI0ODgKLToxMDRBNjAwMDAwMDgwMDAwMDAwMDAwMDQwMDAwMkZDMDAwMDAwMDAwNEIKLToxMDRBNzAwMDAwMDAwMDA4MDAwMDJGQzgwMDAwMDAwMDAwMDAwMDA4MkYKLToxMDRBODAwMDAwMDAzMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDA1MDQwNTYKLToxMDRBOTAwMDAwMDEwMDAxMDAwMDAwMDEwMDAwNTAwMDAwMDAwMDAwQzMKLToxMDRBQTAwMDAwMDAwMDIwMDAwMDA4MDgwMDEwMDAwMDAwMDAwMDA0QzIKLToxMDRBQjAwMDAwMDAwODBDMDAxMDAwMDAwMDAwMDAwMTAwMDAwOEI3MTIKLToxMDRBQzAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDhCNjAwMDAwMDAwMjcKLToxMDRBRDAwMDAwMDAwMDAxMDAwMDEwMDAwMDMwMDAxODAwMDAwMDA0NzkKLToxMDRBRTAwMDAwMDAxMDA0MDAzMDAwMTgwMDAwMDAwNDAwMDAxMDA4NEUKLToxMDRBRjAwMDAwMzAwMDE4MDAwMDAwMDIwMDAwMTAwQTAwMzAwMDE4MEEKLToxMDRCMDAwMDAwMDAwMDAyMDAwMDEwMEMwMDMwMDAxODAwMDAwMDAxM0UKLToxMDRCMTAwMDAwMDAxMDBEMDAzMDAwMTgwMDAwMDAwMTAwMDAxMDBFMTEKLToxMDRCMjAwMDAwMzAwMDE4MDAwMDAwMDEwMDAwMTAxMDAwMzAwMDE4RDQKLToxMDRCMzAwMDAwMDAwMDA0MDAwMDEwMTQwMDMwMDAxODAwMDAwMDA0MDEKLToxMDRCNDAwMDAwMDAzMDAwMDEwMDAwODAwMDA4MDAwNDAwMDAzMDA0NzQKLToxMDRCNTAwMDAxMDAwMDgwMDAwODAwMDQwMDAwMDAwQTAwMDAwMDAwQkUKLToxMDRCNjAwMDAwMDAwMDAwMDAwMDMwNjgwMTAwMDA4MDAwMDAwMDAxMkIKLToxMDRCNzAwMDAwMDAzMDY5MDEwMDAwODAwMDAwMDAwMTAwMDAzMDZDN0UKLToxMDRCODAwMDAxMDAwMDgwMDAwMDAwMDIwMDAwMzA2RTAxMDAwMDgwODMKLToxMDRCOTAwMDAwMDAwMDAyMDAwMDMwNzAwMTAwMDA4MDAwMDAwMDA0RUUKLToxMDRCQTAwMDAwMDAzMDc0MDEwMDAwODAwMDAwMDAwNDAwMDAzMDY2NDYKLToxMDRCQjAwMDAxMDAwMDgwMDAwMDAwMDIwMDAwMzA2NDAxMDAwMDgwNUQKLToxMDRCQzAwMDAwMDAwMDAxMDAwMDMwNjAwMTAwMDA4MDAwMDAwMDAyRDEKLToxMDRCRDAwMDAwMDAzMDYyMDEwMDAwODAwMDAwMDAwMjAwMDAzMDUwNDAKLToxMDRCRTAwMDAxMDAwMDgwMDAwMDAwMDQwMDAwMzA1NDAxMDAwMDgwM0IKLToxMDRCRjAwMDAwMDAwMDA0MDAwMDMwNTgwMTAwMDA4MDAwMDAwMDA0QTQKLToxMDRDMDAwMDAwMDAzMDVDMDEwMDAwODAwMDAwMDAwNDAwMDAzMDdDRTcKLToxMDRDMTAwMDAxMDAwMDgwMDAwMDAwMDEwMDAwMzA3RDAxMDAwMDgwRTQKLToxMDRDMjAwMDAwMDAwMDAxMDAwMDFDMTgwMDEwMDAwMDAwMDAwMDA0M0IKLToxMDRDMzAwMDAwMDAxQzMwMDAxMDAwMDAwMDAwMDAwNDAwMDAxQzM4QzAKLToxMDRDNDAwMDAwMTAwMDAwMDAwMDAwMDQ4MDAwMDAwMDAwMDAwMDAwRDAKLToxMDRDNTAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKLToxMDRDNjAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwNDQKLToxMDRDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEMxMDAwMDgwMDAwRDAKLToxMDRDODAwMDAwMDAwMDAyMDAwMDRDMTIwMDA4MDAwMDAwMDAwMDAyQkEKLToxMDRDOTAwMDAwMDA0QzE0MDAwODAwMDAwMDAwMDAwNDAwMDA0QzIwM0MKLToxMDRDQTAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwNEMzMDAwNDAwMDA4MzAKLToxMDRDQjAwMDAwMDAwMDA4MDAwMDRDMDAwMDA4MDAwMDAwMDAwMDAyOTYKLToxMDRDQzAwMDAwMDA0QzAyMDAwODAwMDAwMDAwMDAwMTAwMDA0QzA0M0QKLToxMDRDRDAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwNENEMDAwMDgwMDAwQTYKLToxMDRDRTAwMDAwMDAwMDA4MDAwMDRDRTAwMDA4MDAwMDAwMDAwMDA0ODQKLToxMDRDRjAwMDAwMDA0Q0U0MDAwODAwMDAwMDAwMDAwMTAwMDA0Q0YwM0YKLToxMDREMDAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwNENGNDAwMDgwMDAwNTEKLToxMDREMTAwMDAwMDAwMDAyMDAwMDREMDAwMDA4MDAwMDAwMDAwMDA0MzgKLToxMDREMjAwMDAwMDA1MDAwMDAxMDAwMDAwMDAwMDAwNDAwMDA1MDA0Q0IKLToxMDREMzAwMDAwMTAwMDAwMDAwMDAwMDQwMDAwNTAwODAwMTAwMDAwRjcKLToxMDRENDAwMDAwMDAwMDA0MDAwMDE0MDAwMDA4MDAwMDAwMDAwMDAyNDEKLToxMDRENTAwMDAwMDAxNDAyMDAwODAwMDAwMDAwMDAwMTAwMDAxNDA0MUMKLToxMDRENjAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwMTQxMDAwMDgwMDAwMEQKLToxMDRENzAwMDAwMDAwMDAyMDAwMDE0MTQwMDA4MDAwMDAwMDAwMDAyRkYKLToxMDREODAwMDAwMDAxNDE2MDAwODAwMDAwMDAwMDAwMjAwMDAxOUI4MUUKLToxMDREOTAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwMTQyMDAwMDgwMDAwQzcKLToxMDREQTAwMDAwMDAwMDAyMDAwMDE0MjQwMDA4MDAwMDAwMDAwMDAyQkYKLToxMDREQjAwMDAwMDAxOUM4MDAwODAwMDAwMDAwMDAwODAwMDAyQzEwQzYKLToxMDREQzAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwMkMxMTAwMDgwMDAwOTUKLToxMDRERDAwMDAwMDAwMDAxMDAwMDJDMTIwMDA4MDAwMDAwMDAwMDAxOEIKLToxMDRERTAwMDAwMDAyQzEzMDAwODAwMDAwMDAwMDAwMTAwMDAyQzAwNEYKLToxMDRERjAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwMkMwMjAwMDgwMDAwNzMKLToxMDRFMDAwMDAwMDAwMDAxMDAwMDJDMDQwMDA4MDAwMDAwMDAwMDAyNjcKLToxMDRFMTAwMDAwMDAyQzMwMDAwODAwMDAwMDAwMDAwMjAwMDAyQzMyQ0UKLToxMDRFMjAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwMkMzNDAwMDgwMDAwMTAKLToxMDRFMzAwMDAwMDAwMDAyMDAwMDJDMjAwMDA4MDAwMDAwMDAwMDAxMUIKLToxMDRFNDAwMDAwMDAyQzIxMDAwODAwMDAwMDAwMDAwMTAwMDAyQzIyQkUKLToxMDRFNTAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwMkMyMzAwMDgwMDAwRjIKLToxMDRFNjAwMDAwMDAwMDAxMDAwMDJDMjQwMDA4MDAwMDAwMDAwMDAxRTgKLToxMDRFNzAwMDAwMDAyQzI1MDAwODAwMDAwMDAwMDAwMTAwMDAyQzI2ODYKLToxMDRFODAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwMTQwMDAwMDgwMDAwRkQKLToxMDRFOTAwMDAwMDAwMDAyMDAwMDE0MDIwMDA4MDAwMDAwMDAwMDAxRjEKLToxMDRFQTAwMDAwMDAxNDA0MDAwODAwMDAwMDAwMDAwMjAwMDAxNDEyQkEKLToxMDRFQjAwMDAwQzAwMDE4MDAwMDAwMDIwMDAwMTQxMDAwQzAwMDE4MUMKLToxMDRFQzAwMDAwMDAwMDAyMDAwMDE0MUMwMEMwMDAxODAwMDAwMDA4RDAKLToxMDRFRDAwMDAwMDAxNDE0MDBDMDAwMTgwMDAwMDAwODAwMDAxNDI3OEYKLToxMDRFRTAwMDAwQzAwMDE4MDAwMDAwMDEwMDAwMTQyNDAwQzAwMDE4RDkKLToxMDRFRjAwMDAwMDAwMDAyMDAwMDE0MjYwMEMwMDAxODAwMDAwMDAxOUQKLToxMDRGMDAwMDAwMDAxNTkwMDAwODAwMDAwMDAwMDAwODAwMDAxNUEwMzcKLToxMDRGMTAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwMTVCMDAwMDgwMDAwQjQKLToxMDRGMjAwMDAwMDAwMDA4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKLToxMDRGMzAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwNzEKLToxMDRGNDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwRTEKLToxMDRGNTAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDEKLToxMDRGNjAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwNDEKLToxMDRGNzAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwQjEKLToxMDRGODAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKLToxMDRGOTAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMTEKLToxMDRGQTAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwODEKLToxMDRGQjAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKLToxMDRGQzAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwRTEKLToxMDRGRDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwNTEKLToxMDRGRTAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKLToxMDRGRjAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwQjEKLToxMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMjAKLToxMDUwMTAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKLToxMDUwMjAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwODAKLToxMDUwMzAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwRjAKLToxMDUwNDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKLToxMDUwNTAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKLToxMDUwNjAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwQzAKLToxMDUwNzAwMDAwMDAwMDAwMDAwMDAwMDAwNjAyMDUwMDAwMDAwMDAwMjMKLTowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9ibngyeC9ibngyeC1lMS02LjIuOS4wLmZ3LmloZXggYi9maXJtd2FyZS9ibngyeC9ibngyeC1lMS02LjIuOS4wLmZ3LmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVkN2Y1OAotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL2JueDJ4L2JueDJ4LWUxLTYuMi45LjAuZncuaWhleApAQCAtMCwwICsxLDk0ODQgQEAKKzoxMDAwMDAwMDAwMDAzQkIwMDAwMDAwNjgwMDAwMDcwQzAwMDAzQzIwMkUKKzoxMDAwMTAwMDAwMDAxQUY4MDAwMDQzMzAwMDAwMDA3QzAwMDA1RTMwNTEKKzoxMDAwMjAwMDAwMDA3QTJDMDAwMDVFQjAwMDAwMDBCMDAwMDBEOEUwQjQKKzoxMDAwMzAwMDAwMDA4MDIwMDAwMEQ5OTgwMDAwMDA4ODAwMDE1OUMwMEQKKzoxMDAwNDAwMDAwMDAzOTg4MDAwMTVBNTAwMDAwMDA5MDAwMDE5M0UwNDAKKzoxMDAwNTAwMDAwMDBBQzA0MDAwMTk0NzgwMDAwMEZGQzAwMDI0MDgwMTYKKzoxMDAwNjAwMDAwMDAwMDA0MDAwMjUwODAwMjA0MDA0ODAwMDAwMDBGNUQKKzoxMDAwNzAwMDAyMDQwMDU0MDAwMDAwNDUwMjA0MDA1ODAwMDAwMDAwODMKKzoxMDAwODAwMDAyMDQwMDVDMDAwMDAwMDYwMjA0MDA3MDAwMDAwMDA0OEUKKzoxMDAwOTAwMDAyMDQwMDc4MDAwMDAwMDAwMjA0MDA3QzEyMTcwMDAwMzcKKzoxMDAwQTAwMDAyMDQwMDgwMjIxNzAwMDAwMjA0MDA4NDMyMTcwMDAwQkUKKzoxMDAwQjAwMDA2MDQwMDg4MDAwMDAwMDUwMjA0MDA5QzEyMTUwMDAwRTAKKzoxMDAwQzAwMDAyMDQwMEEwMjIxNTAwMDAwMjA0MDBBNDMyMTUwMDAwNjIKKzoxMDAwRDAwMDA2MDQwMEE4MDAwMDAwMDQwMjA0MDBCODAyMTAwMDAwOUEKKzoxMDAwRTAwMDAyMDQwMEJDMDAxMDAwMDAwMjA0MDBDMDEwMTAwMDAwNTgKKzoxMDAwRjAwMDAyMDQwMEM0MjAxMDAwMDAwMjA0MDBDODMwMTAwMDAwRjgKKzoxMDAxMDAwMDA2MDQwMENDMDAwMDAwMDQwMjA0MDBEQzAwMTAwMDAwMjMKKzoxMDAxMTAwMDAyMDQwMEUwMTIxNDAwMDAwMjA0MDBFNDIyMTQwMDAwQjMKKzoxMDAxMjAwMDAyMDQwMEU4MzIxNDAwMDAwNjA0MDBFQzAwMDAwMDA0QTEKKzoxMDAxMzAwMDAxMDQwMTI0MDAwMDAwMDAwMTA0MDEyODAwMDAwMDAwNjcKKzoxMDAxNDAwMDAxMDQwMTJDMDAwMDAwMDAwMTA0MDEzMDAwMDAwMDAwNDcKKzoxMDAxNTAwMDAyMDQwMDA0MDAwMDAwRkYwMjA0MDAwODAwMDAwMEZGODkKKzoxMDAxNjAwMDAyMDQwMDBDMDAwMDAwRkYwMjA0MDAxMDAwMDAwMEZGNjkKKzoxMDAxNzAwMDAyMDQwMDE0MDAwMDAwRkYwMjA0MDAxODAwMDAwMEZGNDkKKzoxMDAxODAwMDAyMDQwMDFDMDAwMDAwRkYwMjA0MDAyMDAwMDAwMEZGMjkKKzoxMDAxOTAwMDAyMDQwMDI0MDAwMDAwM0UwMjA0MDAyODAwMDAwMDAwQzkKKzoxMDAxQTAwMDAyMDQwMDJDMDAwMDAwM0YwMjA0MDAzMDAwMDAwMDNGNjkKKzoxMDAxQjAwMDAyMDQwMDM0MDAwMDAwM0YwMjA0MDAzODAwMDAwMDAwODgKKzoxMDAxQzAwMDAyMDQwMDNDMDAwMDAwM0YwMjA0MDA0MDAwMDAwMDNGMjkKKzoxMDAxRDAwMDAyMDQwMDQ0MDAwMDAwM0YwMjA0MjAwODAwMDAwMjExNTUKKzoxMDAxRTAwMDAyMDQyMDBDMDAwMDAyMDAwMjA0MjAxMDAwMDAwMjA0OUYKKzoxMDAxRjAwMDAyMDQyMDE0MDAwMDAyMTkwMjA0MjAxQzAwMDBGRkZGNkEKKzoxMDAyMDAwMDAyMDQyMDIwMDAwMEZGRkYwMjA0MjAyNDAwMDBGRkZGNjIKKzoxMDAyMTAwMDAyMDQyMDI4MDAwMEZGRkYwNjA0MjAzODAwMDAwMDgwQjAKKzoxMDAyMjAwMDAyMDQyMjM4MDdGRkZGRkYwMjA0MjIzQzAwMDAwMDNGQzcKKzoxMDAyMzAwMDAyMDQyMjQwMDdGRkZGRkYwMjA0MjI0NDAwMDAwMDBGRDcKKzoxMDAyNDAwMDAxMDQyMjQ4MDAwMDAwMDAwMTA0MjI0QzAwMDAwMDAwQ0MKKzoxMDAyNTAwMDAxMDQyMjUwMDAwMDAwMDAwMTA0MjI1NDAwMDAwMDAwQUMKKzoxMDAyNjAwMDAxMDQyMjU4MDAwMDAwMDAwMTA0MjI1QzAwMDAwMDAwOEMKKzoxMDAyNzAwMDAxMDQyMjYwMDAwMDAwMDAwMTA0MjI2NDAwMDAwMDAwNkMKKzoxMDAyODAwMDAxMDQyMjY4MDAwMDAwMDAwMTA0MjI2QzAwMDAwMDAwNEMKKzoxMDAyOTAwMDAxMDQyMjcwMDAwMDAwMDAwMTA0MjI3NDAwMDAwMDAwMkMKKzoxMDAyQTAwMDAxMDQyMjc4MDAwMDAwMDAwMTA0MjI3QzAwMDAwMDAwMEMKKzoxMDAyQjAwMDAyMDQyNEJDMDAwMDAwMDEwQzA0MjAwMDAwMDAwM0U4M0MKKzoxMDAyQzAwMDBBMDQyMDAwMDAwMDAwMDEwQjA0MjAwMDAwMDAwMDBBQzYKKzoxMDAyRDAwMDA2MDU0MDAwMDAwMDBEMDAwMjA1MDA0NDAwMDAwMDIwNUIKKzoxMDAyRTAwMDAyMDUwMDQ4MDAwMDAwMzIwMjA1MDA5MDAyMTUwMDIwQkYKKzoxMDAyRjAwMDAyMDUwMDk0MDIxNTAwMjAwMjA1MDA5ODAwMDAwMDMwNUQKKzoxMDAzMDAwMDAyMDUwMDlDMDgxMDAwMDAwMjA1MDBBMDAwMDAwMDMzNTgKKzoxMDAzMTAwMDAyMDUwMEE0MDAwMDAwMzAwMjA1MDBBODAwMDAwMDMxMjIKKzoxMDAzMjAwMDAyMDUwMEFDMDAwMDAwMDIwMjA1MDBCMDAwMDAwMDA1NUMKKzoxMDAzMzAwMDAyMDUwMEI0MDAwMDAwMDYwMjA1MDBCODAwMDAwMDAyM0IKKzoxMDAzNDAwMDAyMDUwMEJDMDAwMDAwMDIwMjA1MDBDMDAwMDAwMDAwMjEKKzoxMDAzNTAwMDAyMDUwMEM0MDAwMDAwMDUwMjA1MDBDODAwMDAwMDAyRkMKKzoxMDAzNjAwMDAyMDUwMENDMDAwMDAwMDIwMjA1MDBEMDAwMDAwMDAyREYKKzoxMDAzNzAwMDAyMDUwMEQ0MDAwMDAwMDEwMjA1MDExNDAwMDAwMDAxODQKKzoxMDAzODAwMDAyMDUwMTFDMDAwMDAwMDEwMjA1MDEyMDAwMDAwMDAyMUUKKzoxMDAzOTAwMDAyMDUwMjA0MDAwMDAwMDEwMjA1MDIwQzAwMDAwMDQwRkEKKzoxMDAzQTAwMDAyMDUwMjEwMDAwMDAwNDAwMjA1MDIxQzAwMDAwMDIwQUYKKzoxMDAzQjAwMDAyMDUwMjIwMDAwMDAwMTMwMjA1MDIyNDAwMDAwMDIwQjQKKzoxMDAzQzAwMDA2MDUwMjQwMDAwMDAwMEEwNDA1MDI4MDAwMjAwMDAwMkIKKzoxMDAzRDAwMDAyMDUwMDUwMDAwMDAwMDcwMjA1MDA1NDAwMDAwMDA3NUQKKzoxMDAzRTAwMDAyMDUwMDU4MDAwMDAwMDAwMjA1MDA1QzAwMDAwMDA4NDMKKzoxMDAzRjAwMDA2MDUwMDYwMDAwMDAwMDQwMjA1MDBEODAwMDAwMDA2QTkKKzoxMDA0MDAwMDAyMDUwMEUwMDAwMDAwMEQwMjA1MDBFNDAwMDAwMDJERTAKKzoxMDA0MTAwMDAyMDUwMEU4MDAwMDAwMDAwMjA1MDBFQzAwMDAwMDIwREEKKzoxMDA0MjAwMDAyMDUwMEYwMDAwMDAwMDAwMjA1MDBGNDAwMDAwMDIwQkEKKzoxMDA0MzAwMDAyMDUwMEY4MDAwMDAwMDAwMjA1MDBGQzAwMDAwMDIwOUEKKzoxMDA0NDAwMDAyMDUwMDA0MDAwMDAwMDEwMjA1MDAwODAwMDAwMDAxOTAKKzoxMDA0NTAwMDAyMDUwMDBDMDAwMDAwMDEwMjA1MDAxMDAwMDAwMDAxNzAKKzoxMDA0NjAwMDAyMDUwMDE0MDAwMDAwMDEwMjA1MDAxODAwMDAwMDAxNTAKKzoxMDA0NzAwMDAyMDUwMDFDMDAwMDAwMDEwMjA1MDAyMDAwMDAwMDAxMzAKKzoxMDA0ODAwMDAyMDUwMDI0MDAwMDAwMDEwMjA1MDAyODAwMDAwMDAxMTAKKzoxMDA0OTAwMDAyMDUwMDJDMDAwMDAwMDEwMjA1MDAzMDAwMDAwMDAxRjAKKzoxMDA0QTAwMDAyMDUwMDM0MDAwMDAwMDEwMjA1MDAzODAwMDAwMDAxRDAKKzoxMDA0QjAwMDAyMDUwMDNDMDAwMDAwMDEwMjA1MDA0MDAwMDAwMDAxQjAKKzoxMDA0QzAwMDA0MDYxMDAwMDIwMDAwMjAwMjA2MDBEQzAwMDAwMDAxMEIKKzoxMDA0RDAwMDAxMDYwMEQ4MDAwMDAwMDAwNDA2MDIwMDAwMDMwMjIwMEMKKzoxMDA0RTAwMDAyMDYwMERDMDAwMDAwMDAwMjA2MDA2ODAwMDAwMEI4MDAKKzoxMDA0RjAwMDAyMDYwMDc4MDAwMDAxMTQwMTA2MDBCODAwMDAwMDAwQTgKKzoxMDA1MDAwMDAxMDYwMEM4MDAwMDAwMDAwMjA2MDA2QzAwMDAwMEI4RjAKKzoxMDA1MTAwMDAyMDYwMDdDMDAwMDAxMTQwMTA2MDBCQzAwMDAwMDAwN0YKKzoxMDA1MjAwMDAxMDYwMENDMDAwMDAwMDAwNzE4MDQwMDAwN0IwMDAwNUEKKzoxMDA1MzAwMDA4MTgwNzYwMDAxNDAyMjMwNzFDMDAwMDJBMDQwMDAwQUEKKzoxMDA1NDAwMDA3MUM4MDAwMzIxMTBBODIwNzFEMDAwMDFFMEMxNzA3Q0QKKzoxMDA1NTAwMDA4MUQ0NTUwNTc1NjAyMjUwMTE4MDAwMDAwMDAwMDAwRjQKKzoxMDA1NjAwMDAxMTgwMDA0MDAwMDAwMDAwMTE4MDAwODAwMDAwMDAwNEQKKzoxMDA1NzAwMDAxMTgwMDBDMDAwMDAwMDAwMTE4MDAxMDAwMDAwMDAwMkQKKzoxMDA1ODAwMDAxMTgwMDE0MDAwMDAwMDAwMjE4MDAyMDAwMDAwMDAxMDMKKzoxMDA1OTAwMDAyMTgwMDI0MDAwMDAwMDIwMjE4MDAyODAwMDAwMDAzRDYKKzoxMDA1QTAwMDAyMTgwMDJDMDAwMDAwMDAwMjE4MDAzMDAwMDAwMDA0QjcKKzoxMDA1QjAwMDAyMTgwMDM0MDAwMDAwMDEwMjE4MDAzODAwMDAwMDAwOUEKKzoxMDA1QzAwMDAyMTgwMDNDMDAwMDAwMDEwMjE4MDA0MDAwMDAwMDA0NzYKKzoxMDA1RDAwMDAyMTgwMDQ0MDAwMDAwMDAwMjE4MDA0ODAwMDAwMDAxNUEKKzoxMDA1RTAwMDAyMTgwMDRDMDAwMDAwMDMwMjE4MDA1MDAwMDAwMDAwMzgKKzoxMDA1RjAwMDAyMTgwMDU0MDAwMDAwMDEwMjE4MDA1ODAwMDAwMDA0MTYKKzoxMDA2MDAwMDAyMTgwMDVDMDAwMDAwMDAwMjE4MDA2MDAwMDAwMDAxRjkKKzoxMDA2MTAwMDAyMTgwMDY0MDAwMDAwMDMwMjE4MDA2ODAwMDAwMDAwRDcKKzoxMDA2MjAwMDAyMTgwMDZDMDAwMDAwMDEwMjE4MDA3MDAwMDAwMDA0QjUKKzoxMDA2MzAwMDAyMTgwMDc0MDAwMDAwMDAwMjE4MDA3ODAwMDAwMDA0OTYKKzoxMDA2NDAwMDAyMTgwMDdDMDAwMDAwMDMwNjE4MDA4MDAwMDAwMDAyNzEKKzoxMDA2NTAwMDAyMTgwMEE0MDAwMDNGRkYwMjE4MDBBODAwMDAwM0ZGREEKKzoxMDA2NjAwMDAyMTgwMjI0MDAwMDAwMDAwMjE4MDIzNDAwMDAwMDAwRkEKKzoxMDA2NzAwMDAyMTgwMjRDMDAwMDAwMDAwMjE4MDJFNDAwMDAwMEZGMTMKKzoxMDA2ODAwMDA2MTgxMDAwMDAwMDA0MDAwMjFCOEJDMDAwMDAwMDAxQ0YKKzoxMDA2OTAwMDAyMUI4MDAwMDAwMDAwMzQwMjFCODA0MDAwMDAwMDE4OTQKKzoxMDA2QTAwMDAyMUI4MDgwMDAwMDAwMEMwMjFCODBDMDAwMDAwMDIwQTQKKzoxMDA2QjAwMDBDMUI4MzAwMDAwN0ExMjAwQTFCODMwMDAwMDAwMTM4RTcKKzoxMDA2QzAwMDBCMUI4MzAwMDAwMDEzODgwQTFCODM0MDAwMDAwMDAwRkUKKzoxMDA2RDAwMDBDMUI4MzQwMDAwMDAxRjQwQjFCODM0MDAwMDAwMDA1NEQKKzoxMDA2RTAwMDAyMUI4MzgwMDAwN0ExMjAwMjFCODNDMDAwMDAwMUY0Q0QKKzoxMDA2RjAwMDA2MUExMDAwMDAwMDAyNzMwNDFBMTlDQzAwMDEwMjI3MjgKKzoxMDA3MDAwMDA2MUEyMDA4MDAwMDAwQzgwNjFBMjAwMDAwMDAwMDAyOTcKKzoxMDA3MTAwMDA0MUE0OTk4MDAwNDAyMjgwNjFBMkUyODAwMDAwMDAyMzQKKzoxMDA3MjAwMDA2MUEyRTIwMDAwMDAwMDIwNjFBMDgwMDAwMDAwMDAyMkYKKzoxMDA3MzAwMDA2MUEwODA4MDAwMDAwMDQwNjFBMDgxODAwMDAwMDAyNDMKKzoxMDA3NDAwMDA0MUEwOEIwMDAwMjAyMkMwNjFBMkZEMDAwMDAwMDA2N0UKKzoxMDA3NTAwMDA0MUEyRkU4MDAwMjAyMkUwNDFBMkZDMDAwMDQwMjMwRUYKKzoxMDA3NjAwMDA0MUEzMDAwMDAwMTAyMzQwNjFBMzAwNDAwMDAwMDAzQUQKKzoxMDA3NzAwMDA0MUEzMDEwMDAwMTAyMzUwNjFBMzAxNDAwMDAwMDAzN0MKKzoxMDA3ODAwMDA0MUEzMDIwMDAwMTAyMzYwNjFBMzAyNDAwMDAwMDAzNEIKKzoxMDA3OTAwMDA0MUEzMDMwMDAwMTAyMzcwNjFBMzAzNDAwMDAwMDAzMUEKKzoxMDA3QTAwMDA0MUEzMDQwMDAwMTAyMzgwNjFBMzA0NDAwMDAwMDAzRTkKKzoxMDA3QjAwMDA0MUEzMDUwMDAwMTAyMzkwNjFBMzA1NDAwMDAwMDAzQjgKKzoxMDA3QzAwMDA0MUEzMDYwMDAwMTAyM0EwNjFBMzA2NDAwMDAwMDAzODcKKzoxMDA3RDAwMDA0MUEzMDcwMDAwMTAyM0IwNjFBMzA3NDAwMDAwMDAzNTYKKzoxMDA3RTAwMDA0MUEzMDgwMDAwMTAyM0MwNjFBMzA4NDAwMDAwMDAzMjUKKzoxMDA3RjAwMDA0MUEzMDkwMDAwMTAyM0QwNjFBMzA5NDAwMDAwMDAzRjQKKzoxMDA4MDAwMDA0MUEzMEEwMDAwMTAyM0UwNjFBMzBBNDAwMDAwMDAzQzIKKzoxMDA4MTAwMDA0MUEzMEIwMDAwMTAyM0YwNjFBMzBCNDAwMDAwMDAzOTEKKzoxMDA4MjAwMDA0MUEzMEMwMDAwMTAyNDAwNjFBMzBDNDAwMDAwMDAzNjAKKzoxMDA4MzAwMDA0MUEzMEQwMDAwMTAyNDEwNjFBMzBENDAwMDAwMDAzMkYKKzoxMDA4NDAwMDA0MUEzMEUwMDAwMTAyNDIwNjFBMzBFNDAwMDAwMDAzRkUKKzoxMDA4NTAwMDA0MUEzMEYwMDAwMTAyNDMwNjFBMzBGNDAwMDAwMDAzQ0QKKzoxMDA4NjAwMDA0MUEzMTAwMDAwMTAyNDQwNjFBMzEwNDAwMDAwMDAzOUEKKzoxMDA4NzAwMDA0MUEzMTEwMDAwMTAyNDUwNjFBMzExNDAwMDAwMDAzNjkKKzoxMDA4ODAwMDA0MUEzMTIwMDAwMTAyNDYwNjFBMzEyNDAwMDAwMDAzMzgKKzoxMDA4OTAwMDA0MUEzMTMwMDAwMTAyNDcwNjFBMzEzNDAwMDAwMDAzMDcKKzoxMDA4QTAwMDA0MUEzMTQwMDAwMTAyNDgwNjFBMzE0NDAwMDAwMDAzRDYKKzoxMDA4QjAwMDA0MUEzMTUwMDAwMTAyNDkwNjFBMzE1NDAwMDAwMDAzQTUKKzoxMDA4QzAwMDA0MUEzMTYwMDAwMTAyNEEwNjFBMzE2NDAwMDAwMDAzNzQKKzoxMDA4RDAwMDA0MUEzMTcwMDAwMTAyNEIwNjFBMzE3NDAwMDAwMDAzNDMKKzoxMDA4RTAwMDA0MUEzMTgwMDAwMTAyNEMwNjFBMzE4NDAwMDAwMDAzMTIKKzoxMDA4RjAwMDA0MUEzMTkwMDAwMTAyNEQwNjFBMzE5NDAwMDAwMDAzRTEKKzoxMDA5MDAwMDA0MUEzMUEwMDAwMTAyNEUwNjFBMzFBNDAwMDAwMDAzQUYKKzoxMDA5MTAwMDA0MUEzMUIwMDAwMTAyNEYwNjFBMzFCNDAwMDAwMDAzN0UKKzoxMDA5MjAwMDA0MUEzMUMwMDAwMTAyNTAwNjFBMzFDNDAwMDAwMDAzNEQKKzoxMDA5MzAwMDA0MUEzMUQwMDAwMTAyNTEwNjFBMzFENDAwMDAwMDAzMUMKKzoxMDA5NDAwMDA0MUEzMUUwMDAwMTAyNTIwNjFBMzFFNDAwMDAwMDAzRUIKKzoxMDA5NTAwMDA0MUEzMUYwMDAwMTAyNTMwNjFBMzFGNDAwMDAwMDAzQkEKKzoxMDA5NjAwMDA0MUEzMjAwMDAwMTAyNTQwNjFBMzIwNDAwMDAwMDAzODcKKzoxMDA5NzAwMDA0MUEzMjEwMDAwMTAyNTUwNjFBMzIxNDAwMDAwMDAzNTYKKzoxMDA5ODAwMDA0MUEzMjIwMDAwMTAyNTYwNjFBMzIyNDAwMDAwMDAzMjUKKzoxMDA5OTAwMDA0MUEzMjMwMDAwMTAyNTcwNjFBMzIzNDAwMDAwMDAzRjQKKzoxMDA5QTAwMDA0MUEzMjQwMDAwMTAyNTgwNjFBMzI0NDAwMDAwMDAzQzMKKzoxMDA5QjAwMDA0MUEzMjUwMDAwMTAyNTkwNjFBMzI1NDAwMDAwMDAzOTIKKzoxMDA5QzAwMDA0MUEzMjYwMDAwMTAyNUEwNjFBMzI2NDAwMDAwMDAzNjEKKzoxMDA5RDAwMDA0MUEzMjcwMDAwMTAyNUIwNjFBMzI3NDAwMDAwMDAzMzAKKzoxMDA5RTAwMDA0MUEzMjgwMDAwMTAyNUMwNjFBMzI4NDAwMDAwMDAzRkYKKzoxMDA5RjAwMDA0MUEzMjkwMDAwMTAyNUQwNjFBMzI5NDAwMDAwMDAzQ0UKKzoxMDBBMDAwMDA0MUEzMkEwMDAwMTAyNUUwNjFBMzJBNDAwMDAwMDAzOUMKKzoxMDBBMTAwMDA0MUEzMkIwMDAwMTAyNUYwNjFBMzJCNDAwMDAwMDAzNkIKKzoxMDBBMjAwMDA0MUEzMkMwMDAwMTAyNjAwNjFBMzJDNDAwMDAwMDAzM0EKKzoxMDBBMzAwMDA0MUEzMkQwMDAwMTAyNjEwNjFBMzJENDAwMDAwMDAzMDkKKzoxMDBBNDAwMDA0MUEzMkUwMDAwMTAyNjIwNjFBMzJFNDAwMDAwMDAzRDgKKzoxMDBBNTAwMDA0MUEzMkYwMDAwMTAyNjMwNjFBMzJGNDAwMDAwMDAzQTcKKzoxMDBBNjAwMDA0MUEzMzAwMDAwMTAyNjQwNjFBMzMwNDAwMDAwMDAzNzQKKzoxMDBBNzAwMDA0MUEzMzEwMDAwMTAyNjUwNjFBMzMxNDAwMDAwMDAzNDMKKzoxMDBBODAwMDA0MUEzMzIwMDAwMTAyNjYwNjFBMzMyNDAwMDAwMDAzMTIKKzoxMDBBOTAwMDA0MUEzMzMwMDAwMTAyNjcwNjFBMzMzNDAwMDAwMDAzRTEKKzoxMDBBQTAwMDA0MUEzMzQwMDAwMTAyNjgwNjFBMzM0NDAwMDAwMDAzQjAKKzoxMDBBQjAwMDA0MUEzMzUwMDAwMTAyNjkwNjFBMzM1NDAwMDAwMDAzN0YKKzoxMDBBQzAwMDA0MUEzMzYwMDAwMTAyNkEwNjFBMzM2NDAwMDAwMDAzNEUKKzoxMDBBRDAwMDA0MUEzMzcwMDAwMTAyNkIwNjFBMzM3NDAwMDAwMDAzMUQKKzoxMDBBRTAwMDA0MUEzMzgwMDAwMTAyNkMwNjFBMzM4NDAwMDAwMDAzRUMKKzoxMDBBRjAwMDA0MUEzMzkwMDAwMTAyNkQwNjFBMzM5NDAwMDAwMDAzQkIKKzoxMDBCMDAwMDA0MUEzM0EwMDAwMTAyNkUwNjFBMzNBNDAwMDAwMDAzODkKKzoxMDBCMTAwMDA0MUEzM0IwMDAwMTAyNkYwNjFBMzNCNDAwMDAwMDAzNTgKKzoxMDBCMjAwMDA0MUEzM0MwMDAwMTAyNzAwNjFBMzNDNDAwMDAwMDAzMjcKKzoxMDBCMzAwMDA0MUEzM0QwMDAwMTAyNzEwNjFBMzNENDAwMDAwMDAzRjYKKzoxMDBCNDAwMDA0MUEzM0UwMDAwMTAyNzIwNjFBMzNFNDAwMDAwMDAzQzUKKzoxMDBCNTAwMDA0MUEzM0YwMDAwMTAyNzMwNjFBMzNGNDAwMDAwMDAzOTQKKzoxMDBCNjAwMDA0MUEzNDAwMDAwMTAyNzQwNjFBMzQwNDAwMDAwMDAzNjEKKzoxMDBCNzAwMDA0MUEzNDEwMDAwMTAyNzUwNjFBMzQxNDAwMDAwMDAzMzAKKzoxMDBCODAwMDA0MUEzNDIwMDAwMTAyNzYwNjFBMzQyNDAwMDAwMDAzRkYKKzoxMDBCOTAwMDA0MUEzNDMwMDAwMTAyNzcwNjFBMzQzNDAwMDAwMDAzQ0UKKzoxMDBCQTAwMDA0MUEzNDQwMDAwMTAyNzgwNjFBMzQ0NDAwMDAwMDAzOUQKKzoxMDBCQjAwMDA0MUEzNDUwMDAwMTAyNzkwNjFBMzQ1NDAwMDAwMDAzNkMKKzoxMDBCQzAwMDA0MUEzNDYwMDAwMTAyN0EwNjFBMzQ2NDAwMDAwMDAzM0IKKzoxMDBCRDAwMDA0MUEzNDcwMDAwMTAyN0IwNjFBMzQ3NDAwMDAwMDAzMEEKKzoxMDBCRTAwMDA0MUEzNDgwMDAwMTAyN0MwNjFBMzQ4NDAwMDAwMDAzRDkKKzoxMDBCRjAwMDA0MUEzNDkwMDAwMTAyN0QwNjFBMzQ5NDAwMDAwMDAzQTgKKzoxMDBDMDAwMDA0MUEzNEEwMDAwMTAyN0UwNjFBMzRBNDAwMDAwMDAzNzYKKzoxMDBDMTAwMDA0MUEzNEIwMDAwMTAyN0YwNjFBMzRCNDAwMDAwMDAzNDUKKzoxMDBDMjAwMDA0MUEzNEMwMDAwMTAyODAwNjFBMzRDNDAwMDAwMDAzMTQKKzoxMDBDMzAwMDA0MUEzNEQwMDAwMTAyODEwNjFBMzRENDAwMDAwMDAzRTMKKzoxMDBDNDAwMDA0MUEzNEUwMDAwMTAyODIwNjFBMzRFNDAwMDAwMDAzQjIKKzoxMDBDNTAwMDA0MUEzNEYwMDAwMTAyODMwNjFBMzRGNDAwMDAwMDAzODEKKzoxMDBDNjAwMDA0MUEzNTAwMDAwMTAyODQwNjFBMzUwNDAwMDAwMDAzNEUKKzoxMDBDNzAwMDA0MUEzNTEwMDAwMTAyODUwNjFBMzUxNDAwMDAwMDAzMUQKKzoxMDBDODAwMDA0MUEzNTIwMDAwMTAyODYwNjFBMzUyNDAwMDAwMDAzRUMKKzoxMDBDOTAwMDA0MUEzNTMwMDAwMTAyODcwNjFBMzUzNDAwMDAwMDAzQkIKKzoxMDBDQTAwMDA0MUEzNTQwMDAwMTAyODgwNjFBMzU0NDAwMDAwMDAzOEEKKzoxMDBDQjAwMDA0MUEzNTUwMDAwMTAyODkwNjFBMzU1NDAwMDAwMDAzNTkKKzoxMDBDQzAwMDA0MUEzNTYwMDAwMTAyOEEwNjFBMzU2NDAwMDAwMDAzMjgKKzoxMDBDRDAwMDA0MUEzNTcwMDAwMTAyOEIwNjFBMzU3NDAwMDAwMDAzRjcKKzoxMDBDRTAwMDA0MUEzNTgwMDAwMTAyOEMwNjFBMzU4NDAwMDAwMDAzQzYKKzoxMDBDRjAwMDA0MUEzNTkwMDAwMTAyOEQwNjFBMzU5NDAwMDAwMDAzOTUKKzoxMDBEMDAwMDA0MUEzNUEwMDAwMTAyOEUwNjFBMzVBNDAwMDAwMDAzNjMKKzoxMDBEMTAwMDA0MUEzNUIwMDAwMTAyOEYwNjFBMzVCNDAwMDAwMDAzMzIKKzoxMDBEMjAwMDA0MUEzNUMwMDAwMTAyOTAwNjFBMzVDNDAwMDAwMDAzMDEKKzoxMDBEMzAwMDA0MUEzNUQwMDAwMTAyOTEwNjFBMzVENDAwMDAwMDAzRDAKKzoxMDBENDAwMDA0MUEzNUUwMDAwMTAyOTIwNjFBMzVFNDAwMDAwMDAzOUYKKzoxMDBENTAwMDA0MUEzNUYwMDAwMTAyOTMwNjFBMzVGNDAwMDAwMDAzNkUKKzoxMDBENjAwMDA0MUEzNjAwMDAwMTAyOTQwNjFBMzYwNDAwMDAwMDAzM0IKKzoxMDBENzAwMDA0MUEzNjEwMDAwMTAyOTUwNjFBMzYxNDAwMDAwMDAzMEEKKzoxMDBEODAwMDA0MUEzNjIwMDAwMTAyOTYwNjFBMzYyNDAwMDAwMDAzRDkKKzoxMDBEOTAwMDA0MUEzNjMwMDAwMTAyOTcwNjFBMzYzNDAwMDAwMDAzQTgKKzoxMDBEQTAwMDA0MUEzNjQwMDAwMTAyOTgwNjFBMzY0NDAwMDAwMDAzNzcKKzoxMDBEQjAwMDA0MUEzNjUwMDAwMTAyOTkwNjFBMzY1NDAwMDAwMDAzNDYKKzoxMDBEQzAwMDA0MUEzNjYwMDAwMTAyOUEwNjFBMzY2NDAwMDAwMDAzMTUKKzoxMDBERDAwMDA0MUEzNjcwMDAwMTAyOUIwNjFBMzY3NDAwMDAwMDAzRTQKKzoxMDBERTAwMDA0MUEzNjgwMDAwMTAyOUMwNjFBMzY4NDAwMDAwMDAzQjMKKzoxMDBERjAwMDA0MUEzNjkwMDAwMTAyOUQwNjFBMzY5NDAwMDAwMDAzODIKKzoxMDBFMDAwMDA0MUEzNkEwMDAwMTAyOUUwNjFBMzZBNDAwMDAwMDAzNTAKKzoxMDBFMTAwMDA0MUEzNkIwMDAwMTAyOUYwNjFBMzZCNDAwMDAwMDAzMUYKKzoxMDBFMjAwMDA0MUEzNkMwMDAwMTAyQTAwNjFBMzZDNDAwMDAwMDAzRUUKKzoxMDBFMzAwMDA0MUEzNkQwMDAwMTAyQTEwNjFBMzZENDAwMDAwMDAzQkQKKzoxMDBFNDAwMDA0MUEzNkUwMDAwMTAyQTIwNjFBMzZFNDAwMDAwMDAzOEMKKzoxMDBFNTAwMDA0MUEzNkYwMDAwMTAyQTMwNjFBMzZGNDAwMDAwMDAzNUIKKzoxMDBFNjAwMDA0MUEzNzAwMDAwMTAyQTQwNjFBMzcwNDAwMDAwMDAzMjgKKzoxMDBFNzAwMDA0MUEzNzEwMDAwMTAyQTUwNjFBMzcxNDAwMDAwMDAzRjcKKzoxMDBFODAwMDA0MUEzNzIwMDAwMTAyQTYwNjFBMzcyNDAwMDAwMDAzQzYKKzoxMDBFOTAwMDA0MUEzNzMwMDAwMTAyQTcwNjFBMzczNDAwMDAwMDAzOTUKKzoxMDBFQTAwMDA0MUEzNzQwMDAwMTAyQTgwNjFBMzc0NDAwMDAwMDAzNjQKKzoxMDBFQjAwMDA0MUEzNzUwMDAwMTAyQTkwNjFBMzc1NDAwMDAwMDAzMzMKKzoxMDBFQzAwMDA0MUEzNzYwMDAwMTAyQUEwNjFBMzc2NDAwMDAwMDAzMDIKKzoxMDBFRDAwMDA0MUEzNzcwMDAwMTAyQUIwNjFBMzc3NDAwMDAwMDAzRDEKKzoxMDBFRTAwMDA0MUEzNzgwMDAwMTAyQUMwNjFBMzc4NDAwMDAwMDAzQTAKKzoxMDBFRjAwMDA0MUEzNzkwMDAwMTAyQUQwNjFBMzc5NDAwMDAwMDAzNkYKKzoxMDBGMDAwMDA0MUEzN0EwMDAwMTAyQUUwNjFBMzdBNDAwMDAwMDAzM0QKKzoxMDBGMTAwMDA0MUEzN0IwMDAwMTAyQUYwNjFBMzdCNDAwMDAwMDAzMEMKKzoxMDBGMjAwMDA0MUEzN0MwMDAwMTAyQjAwNjFBMzdDNDAwMDAwMDAzREIKKzoxMDBGMzAwMDA0MUEzN0QwMDAwMTAyQjEwNjFBMzdENDAwMDAwMDAzQUEKKzoxMDBGNDAwMDA0MUEzN0UwMDAwMTAyQjIwNjFBMzdFNDAwMDAwMDAzNzkKKzoxMDBGNTAwMDA0MUEzN0YwMDAwMTAyQjMwNjFBMzdGNDAwMDAwMDAzNDgKKzoxMDBGNjAwMDA0MUEzODAwMDAwMTAyQjQwNjFBMzgwNDAwMDAwMDAzMTUKKzoxMDBGNzAwMDA0MUEzODEwMDAwMTAyQjUwNjFBMzgxNDAwMDAwMDAzRTQKKzoxMDBGODAwMDA0MUEzODIwMDAwMTAyQjYwNjFBMzgyNDAwMDAwMDAzQjMKKzoxMDBGOTAwMDA0MUEzODMwMDAwMTAyQjcwNjFBMzgzNDAwMDAwMDAzODIKKzoxMDBGQTAwMDA0MUEzODQwMDAwMTAyQjgwNjFBMzg0NDAwMDAwMDAzNTEKKzoxMDBGQjAwMDA0MUEzODUwMDAwMTAyQjkwNjFBMzg1NDAwMDAwMDAzMjAKKzoxMDBGQzAwMDA0MUEzODYwMDAwMTAyQkEwNjFBMzg2NDAwMDAwMDAzRUYKKzoxMDBGRDAwMDA0MUEzODcwMDAwMTAyQkIwNjFBMzg3NDAwMDAwMDAzQkUKKzoxMDBGRTAwMDA0MUEzODgwMDAwMTAyQkMwNjFBMzg4NDAwMDAwMDAzOEQKKzoxMDBGRjAwMDA0MUEzODkwMDAwMTAyQkQwNjFBMzg5NDAwMDAwMDAzNUMKKzoxMDEwMDAwMDA0MUEzOEEwMDAwMTAyQkUwNjFBMzhBNDAwMDAwMDAzMkEKKzoxMDEwMTAwMDA0MUEzOEIwMDAwMTAyQkYwNjFBMzhCNDAwMDAwMDAzRjkKKzoxMDEwMjAwMDA0MUEzOEMwMDAwMTAyQzAwNjFBMzhDNDAwMDAwMDAzQzgKKzoxMDEwMzAwMDA0MUEzOEQwMDAwMTAyQzEwNjFBMzhENDAwMDAwMDAzOTcKKzoxMDEwNDAwMDA0MUEzOEUwMDAwMTAyQzIwNjFBMzhFNDAwMDAwMDAzNjYKKzoxMDEwNTAwMDA0MUEzOEYwMDAwMTAyQzMwNjFBMzhGNDAwMDAwMDAzMzUKKzoxMDEwNjAwMDA0MUEzOTAwMDAwMTAyQzQwNjFBMzkwNDAwMDAwMDAzMDIKKzoxMDEwNzAwMDA0MUEzOTEwMDAwMTAyQzUwNjFBMzkxNDAwMDAwMDAzRDEKKzoxMDEwODAwMDA0MUEzOTIwMDAwMTAyQzYwNjFBMzkyNDAwMDAwMDAzQTAKKzoxMDEwOTAwMDA0MUEzOTMwMDAwMTAyQzcwNjFBMzkzNDAwMDAwMDAzNkYKKzoxMDEwQTAwMDA0MUEzOTQwMDAwMTAyQzgwNjFBMzk0NDAwMDAwMDAzM0UKKzoxMDEwQjAwMDA0MUEzOTUwMDAwMTAyQzkwNjFBMzk1NDAwMDAwMDAzMEQKKzoxMDEwQzAwMDA0MUEzOTYwMDAwMTAyQ0EwNjFBMzk2NDAwMDAwMDAzREMKKzoxMDEwRDAwMDA0MUEzOTcwMDAwMTAyQ0IwNjFBMzk3NDAwMDAwMDAzQUIKKzoxMDEwRTAwMDA0MUEzOTgwMDAwMTAyQ0MwNjFBMzk4NDAwMDAwMDAzN0EKKzoxMDEwRjAwMDA0MUEzOTkwMDAwMTAyQ0QwNjFBMzk5NDAwMDAwMDAzNDkKKzoxMDExMDAwMDA0MUEzOUEwMDAwMTAyQ0UwNjFBMzlBNDAwMDAwMDAzMTcKKzoxMDExMTAwMDA0MUEzOUIwMDAwMTAyQ0YwNjFBMzlCNDAwMDAwMDAzRTYKKzoxMDExMjAwMDA0MUEzOUMwMDAwMTAyRDAwNjFBMzlDNDAwMDAwMDAzQjUKKzoxMDExMzAwMDA0MUEzOUQwMDAwMTAyRDEwNjFBMzlENDAwMDAwMDAzODQKKzoxMDExNDAwMDA0MUEzOUUwMDAwMTAyRDIwNjFBMzlFNDAwMDAwMDAzNTMKKzoxMDExNTAwMDA0MUEzOUYwMDAwMTAyRDMwNjFBMzlGNDAwMDAwMDAzMjIKKzoxMDExNjAwMDA0MUEzQTAwMDAwMTAyRDQwNjFBM0EwNDAwMDAwMDAzRUYKKzoxMDExNzAwMDA0MUEzQTEwMDAwMTAyRDUwNjFBM0ExNDAwMDAwMDAzQkUKKzoxMDExODAwMDA0MUEzQTIwMDAwMTAyRDYwNjFBM0EyNDAwMDAwMDAzOEQKKzoxMDExOTAwMDA0MUEzQTMwMDAwMTAyRDcwNjFBM0EzNDAwMDAwMDAzNUMKKzoxMDExQTAwMDA0MUEzQTQwMDAwMTAyRDgwNjFBM0E0NDAwMDAwMDAzMkIKKzoxMDExQjAwMDA0MUEzQTUwMDAwMTAyRDkwNjFBM0E1NDAwMDAwMDAzRkEKKzoxMDExQzAwMDA0MUEzQTYwMDAwMTAyREEwNjFBM0E2NDAwMDAwMDAzQzkKKzoxMDExRDAwMDA0MUEzQTcwMDAwMTAyREIwNjFBM0E3NDAwMDAwMDAzOTgKKzoxMDExRTAwMDA0MUEzQTgwMDAwMTAyREMwNjFBM0E4NDAwMDAwMDAzNjcKKzoxMDExRjAwMDA0MUEzQTkwMDAwMTAyREQwNjFBM0E5NDAwMDAwMDAzMzYKKzoxMDEyMDAwMDA0MUEzQUEwMDAwMTAyREUwNjFBM0FBNDAwMDAwMDAzMDQKKzoxMDEyMTAwMDA0MUEzQUIwMDAwMTAyREYwNjFBM0FCNDAwMDAwMDAzRDMKKzoxMDEyMjAwMDA0MUEzQUMwMDAwMTAyRTAwNjFBM0FDNDAwMDAwMDAzQTIKKzoxMDEyMzAwMDA0MUEzQUQwMDAwMTAyRTEwNjFBM0FENDAwMDAwMDAzNzEKKzoxMDEyNDAwMDA0MUEzQUUwMDAwMTAyRTIwNjFBM0FFNDAwMDAwMDAzNDAKKzoxMDEyNTAwMDA0MUEzQUYwMDAwMTAyRTMwNjFBM0FGNDAwMDAwMDAzMEYKKzoxMDEyNjAwMDA0MUEzQjAwMDAwMTAyRTQwNjFBM0IwNDAwMDAwMDAzREMKKzoxMDEyNzAwMDA0MUEzQjEwMDAwMTAyRTUwNjFBM0IxNDAwMDAwMDAzQUIKKzoxMDEyODAwMDA0MUEzQjIwMDAwMTAyRTYwNjFBM0IyNDAwMDAwMDAzN0EKKzoxMDEyOTAwMDA0MUEzQjMwMDAwMTAyRTcwNjFBM0IzNDAwMDAwMDAzNDkKKzoxMDEyQTAwMDA0MUEzQjQwMDAwMTAyRTgwNjFBM0I0NDAwMDAwMDAzMTgKKzoxMDEyQjAwMDA0MUEzQjUwMDAwMTAyRTkwNjFBM0I1NDAwMDAwMDAzRTcKKzoxMDEyQzAwMDA0MUEzQjYwMDAwMTAyRUEwNjFBM0I2NDAwMDAwMDAzQjYKKzoxMDEyRDAwMDA0MUEzQjcwMDAwMTAyRUIwNjFBM0I3NDAwMDAwMDAzODUKKzoxMDEyRTAwMDA0MUEzQjgwMDAwMTAyRUMwNjFBM0I4NDAwMDAwMDAzNTQKKzoxMDEyRjAwMDA0MUEzQjkwMDAwMTAyRUQwNjFBM0I5NDAwMDAwMDAzMjMKKzoxMDEzMDAwMDA0MUEzQkEwMDAwMTAyRUUwNjFBM0JBNDAwMDAwMDAzRjEKKzoxMDEzMTAwMDA0MUEzQkIwMDAwMTAyRUYwNjFBM0JCNDAwMDAwMDAzQzAKKzoxMDEzMjAwMDA0MUEzQkMwMDAwMTAyRjAwNjFBM0JDNDAwMDAwMDAzOEYKKzoxMDEzMzAwMDA0MUEzQkQwMDAwMTAyRjEwNjFBM0JENDAwMDAwMDAzNUUKKzoxMDEzNDAwMDA0MUEzQkUwMDAwMTAyRjIwNjFBM0JFNDAwMDAwMDAzMkQKKzoxMDEzNTAwMDA0MUEzQkYwMDAwMTAyRjMwNjFBM0JGNDAwMDAwMDAzRkMKKzoxMDEzNjAwMDA0MUEzQzAwMDAwMTAyRjQwNjFBM0MwNDAwMDAwMDAzQzkKKzoxMDEzNzAwMDA0MUEzQzEwMDAwMTAyRjUwNjFBM0MxNDAwMDAwMDAzOTgKKzoxMDEzODAwMDA0MUEzQzIwMDAwMTAyRjYwNjFBM0MyNDAwMDAwMDAzNjcKKzoxMDEzOTAwMDA0MUEzQzMwMDAwMTAyRjcwNjFBM0MzNDAwMDAwMDAzMzYKKzoxMDEzQTAwMDA0MUEzQzQwMDAwMTAyRjgwNjFBM0M0NDAwMDAwMDAzMDUKKzoxMDEzQjAwMDA0MUEzQzUwMDAwMTAyRjkwNjFBM0M1NDAwMDAwMDAzRDQKKzoxMDEzQzAwMDA0MUEzQzYwMDAwMTAyRkEwNjFBM0M2NDAwMDAwMDAzQTMKKzoxMDEzRDAwMDA0MUEzQzcwMDAwMTAyRkIwNjFBM0M3NDAwMDAwMDAzNzIKKzoxMDEzRTAwMDA0MUEzQzgwMDAwMTAyRkMwNjFBM0M4NDAwMDAwMDAzNDEKKzoxMDEzRjAwMDA0MUEzQzkwMDAwMTAyRkQwNjFBM0M5NDAwMDAwMDAzMTAKKzoxMDE0MDAwMDA0MUEzQ0EwMDAwMTAyRkUwNjFBM0NBNDAwMDAwMDAzREUKKzoxMDE0MTAwMDA0MUEzQ0IwMDAwMTAyRkYwNjFBM0NCNDAwMDAwMDAzQUQKKzoxMDE0MjAwMDA0MUEzQ0MwMDAwMTAzMDAwNjFBM0NDNDAwMDAwMDAzN0IKKzoxMDE0MzAwMDA0MUEzQ0QwMDAwMTAzMDEwNjFBM0NENDAwMDAwMDAzNEEKKzoxMDE0NDAwMDA0MUEzQ0UwMDAwMTAzMDIwNjFBM0NFNDAwMDAwMDAzMTkKKzoxMDE0NTAwMDA0MUEzQ0YwMDAwMTAzMDMwNjFBM0NGNDAwMDAwMDAzRTgKKzoxMDE0NjAwMDA0MUEzRDAwMDAwMTAzMDQwNjFBM0QwNDAwMDAwMDAzQjUKKzoxMDE0NzAwMDA0MUEzRDEwMDAwMTAzMDUwNjFBM0QxNDAwMDAwMDAzODQKKzoxMDE0ODAwMDA0MUEzRDIwMDAwMTAzMDYwNjFBM0QyNDAwMDAwMDAzNTMKKzoxMDE0OTAwMDA0MUEzRDMwMDAwMTAzMDcwNjFBM0QzNDAwMDAwMDAzMjIKKzoxMDE0QTAwMDA0MUEzRDQwMDAwMTAzMDgwNjFBM0Q0NDAwMDAwMDAzRjEKKzoxMDE0QjAwMDA0MUEzRDUwMDAwMTAzMDkwNjFBM0Q1NDAwMDAwMDAzQzAKKzoxMDE0QzAwMDA0MUEzRDYwMDAwMTAzMEEwNjFBM0Q2NDAwMDAwMDAzOEYKKzoxMDE0RDAwMDA0MUEzRDcwMDAwMTAzMEIwNjFBM0Q3NDAwMDAwMDAzNUUKKzoxMDE0RTAwMDA0MUEzRDgwMDAwMTAzMEMwNjFBM0Q4NDAwMDAwMDAzMkQKKzoxMDE0RjAwMDA0MUEzRDkwMDAwMTAzMEQwNjFBM0Q5NDAwMDAwMDAzRkMKKzoxMDE1MDAwMDA0MUEzREEwMDAwMTAzMEUwNjFBM0RBNDAwMDAwMDAzQ0EKKzoxMDE1MTAwMDA0MUEzREIwMDAwMTAzMEYwNjFBM0RCNDAwMDAwMDAzOTkKKzoxMDE1MjAwMDA0MUEzREMwMDAwMTAzMTAwNjFBM0RDNDAwMDAwMDAzNjgKKzoxMDE1MzAwMDA0MUEzREQwMDAwMTAzMTEwNjFBM0RENDAwMDAwMDAzMzcKKzoxMDE1NDAwMDA0MUEzREUwMDAwMTAzMTIwNjFBM0RFNDAwMDAwMDAzMDYKKzoxMDE1NTAwMDA0MUEzREYwMDAwMTAzMTMwNjFBM0RGNDAwMDAwMDAzRDUKKzoxMDE1NjAwMDA0MUEzRTAwMDAwMTAzMTQwNjFBM0UwNDAwMDAwMDAzQTIKKzoxMDE1NzAwMDA0MUEzRTEwMDAwMTAzMTUwNjFBM0UxNDAwMDAwMDAzNzEKKzoxMDE1ODAwMDA0MUEzRTIwMDAwMTAzMTYwNjFBM0UyNDAwMDAwMDAzNDAKKzoxMDE1OTAwMDA0MUEzRTMwMDAwMTAzMTcwNjFBM0UzNDAwMDAwMDAzMEYKKzoxMDE1QTAwMDA0MUEzRTQwMDAwMTAzMTgwNjFBM0U0NDAwMDAwMDAzREUKKzoxMDE1QjAwMDA0MUEzRTUwMDAwMTAzMTkwNjFBM0U1NDAwMDAwMDAzQUQKKzoxMDE1QzAwMDA0MUEzRTYwMDAwMTAzMUEwNjFBM0U2NDAwMDAwMDAzN0MKKzoxMDE1RDAwMDA0MUEzRTcwMDAwMTAzMUIwNjFBM0U3NDAwMDAwMDAzNEIKKzoxMDE1RTAwMDA0MUEzRTgwMDAwMTAzMUMwNjFBM0U4NDAwMDAwMDAzMUEKKzoxMDE1RjAwMDA0MUEzRTkwMDAwMTAzMUQwNjFBM0U5NDAwMDAwMDAzRTkKKzoxMDE2MDAwMDA0MUEzRUEwMDAwMTAzMUUwNjFBM0VBNDAwMDAwMDAzQjcKKzoxMDE2MTAwMDA0MUEzRUIwMDAwMTAzMUYwNjFBM0VCNDAwMDAwMDAzODYKKzoxMDE2MjAwMDA0MUEzRUMwMDAwMTAzMjAwNjFBM0VDNDAwMDAwMDAzNTUKKzoxMDE2MzAwMDA0MUEzRUQwMDAwMTAzMjEwNjFBM0VENDAwMDAwMDAzMjQKKzoxMDE2NDAwMDA0MUEzRUUwMDAwMTAzMjIwNjFBM0VFNDAwMDAwMDAzRjMKKzoxMDE2NTAwMDA0MUEzRUYwMDAwMTAzMjMwNjFBM0VGNDAwMDAwMDAzQzIKKzoxMDE2NjAwMDA0MUEzRjAwMDAwMTAzMjQwNjFBM0YwNDAwMDAwMDAzOEYKKzoxMDE2NzAwMDA0MUEzRjEwMDAwMTAzMjUwNjFBM0YxNDAwMDAwMDAzNUUKKzoxMDE2ODAwMDA0MUEzRjIwMDAwMTAzMjYwNjFBM0YyNDAwMDAwMDAzMkQKKzoxMDE2OTAwMDA0MUEzRjMwMDAwMTAzMjcwNjFBM0YzNDAwMDAwMDAzRkMKKzoxMDE2QTAwMDA0MUEzRjQwMDAwMTAzMjgwNjFBM0Y0NDAwMDAwMDAzQ0IKKzoxMDE2QjAwMDA0MUEzRjUwMDAwMTAzMjkwNjFBM0Y1NDAwMDAwMDAzOUEKKzoxMDE2QzAwMDA0MUEzRjYwMDAwMTAzMkEwNjFBM0Y2NDAwMDAwMDAzNjkKKzoxMDE2RDAwMDA0MUEzRjcwMDAwMTAzMkIwNjFBM0Y3NDAwMDAwMDAzMzgKKzoxMDE2RTAwMDA0MUEzRjgwMDAwMTAzMkMwNjFBM0Y4NDAwMDAwMDAzMDcKKzoxMDE2RjAwMDA0MUEzRjkwMDAwMTAzMkQwNjFBM0Y5NDAwMDAwMDAzRDYKKzoxMDE3MDAwMDA0MUEzRkEwMDAwMTAzMkUwNjFBM0ZBNDAwMDAwMDAzQTQKKzoxMDE3MTAwMDA0MUEzRkIwMDAwMTAzMkYwNjFBM0ZCNDAwMDAwMDAzNzMKKzoxMDE3MjAwMDA0MUEzRkMwMDAwMTAzMzAwNjFBM0ZDNDAwMDAwMDAzNDIKKzoxMDE3MzAwMDA0MUEzRkQwMDAwMTAzMzEwNjFBM0ZENDAwMDAwMDAzMTEKKzoxMDE3NDAwMDA0MUEzRkUwMDAwMTAzMzIwNjFBM0ZFNDAwMDAwMDA3REMKKzoxMDE3NTAwMDA0MUE0Q0IwMDAwODAzMzMwNjFBNDAwMDAwMDAwMTI0QUMKKzoxMDE3NjAwMDAyMUE0OTIwMDAwMDAwMDAwNjFBMjUwMDAwMDAwMDEwOUYKKzoxMDE3NzAwMDA2MUEyNTgwMDAwMDAwMTIwNjFBMDlDMDAwMDAwMDQ4NjEKKzoxMDE3ODAwMDA2MUEwODAwMDAwMDAwMDIwNjFBMDgyMDAwMDAwMDEyRDUKKzoxMDE3OTAwMDA0MUEyRkIwMDAwMjAzM0IwNDFBNENGMDAwMDIwMzNENzAKKzoxMDE3QTAwMDA2MUE1MDAwMDAwMDAwMDQwNjFBNDQ5MDAwMDAwMTI0QUMKKzoxMDE3QjAwMDAyMUE0OTI0MDAwMDAwMDAwNjFBMjU0MDAwMDAwMDEwMEIKKzoxMDE3QzAwMDA2MUEyNUM4MDAwMDAwMTIwNjFBMEFFMDAwMDAwMDQ4QTgKKzoxMDE3RDAwMDA2MUEwODEwMDAwMDAwMDIwNjFBMDg2ODAwMDAwMDEyMkQKKzoxMDE3RTAwMDA0MUEyRkI4MDAwMjAzM0YwNDFBNENGODAwMDIwMzQxMDgKKzoxMDE3RjAwMDA2MUE1MDEwMDAwMDAwMDQwMjAwQTQ2ODAwMEFGRkRDNzIKKzoxMDE4MDAwMDAyMDBBMjgwMDAwMDAwMDEwMjAwQTI5NDA3MUQyOTExMUQKKzoxMDE4MTAwMDAyMDBBMjk4MDAwMDAwMDAwMjAwQTI5QzAwOUMwNDI0ODgKKzoxMDE4MjAwMDAyMDBBMkEwMDAwMDAwMDAwMjAwQTJBNDAwMDAwMjA5MjEKKzoxMDE4MzAwMDAyMDBBNEZDRkYwMDAwMDAwMjAxMDBCNDAwMDAwMDAxNEYKKzoxMDE4NDAwMDAyMDEwMEI4MDAwMDAwMDEwMjAxMDBEQzAwMDAwMDAxRkMKKzoxMDE4NTAwMDAyMDEwMTAwMDAwMDAwMDEwMjAxMDEwNDAwMDAwMDAxN0EKKzoxMDE4NjAwMDAyMDEwMDdDMDAzMDAwMDAwMjAxMDA4NDAwMDAwMDI4MUEKKzoxMDE4NzAwMDAyMDEwMDhDMDAwMDAwMDAwMjAxMDEzMDAwMDAwMDA0QTEKKzoxMDE4ODAwMDAyMDEwMjVDMDAwMDAwMDEwMjAxMDMyODAwMDAwMDAwQzgKKzoxMDE4OTAwMDAyMDEwNTU0MDAwMDAwMzAwMjAxMDBDNDAwMDAwMDAxRjQKKzoxMDE4QTAwMDAyMDEwMENDMDAwMDAwMDEwMjAxMDBGODAwMDAwMDAxNkMKKzoxMDE4QjAwMDAyMDEwMEYwMDAwMDAwMDEwMjAxMDA4MDAwMzAwMDAwODEKKzoxMDE4QzAwMDAyMDEwMDg4MDAwMDAwMjgwMjAxMDA5MDAwMDAwMDAwRDIKKzoxMDE4RDAwMDAyMDEwMTM0MDAwMDAwMDQwMjAxMDJEQzAwMDAwMDAxRUEKKzoxMDE4RTAwMDAyMDEwMzJDMDAwMDAwMDAwMjAxMDU2NDAwMDAwMDMwMkEKKzoxMDE4RjAwMDAyMDEwMEM4MDAwMDAwMDEwMjAxMDBEMDAwMDAwMDAxNDgKKzoxMDE5MDAwMDAyMDEwMEZDMDAwMDAwMDEwMjAxMDBGNDAwMDAwMDAxREYKKzoxMDE5MTAwMDAyMEMxMDAwMDAwMDAwMjgwMjBDMjAwODAwMDAwQTExMzAKKzoxMDE5MjAwMDAyMEMyMDBDMDAwMDBBMDAwMjBDMjAxMDAwMDAwQTA0MjcKKzoxMDE5MzAwMDAyMEMyMDFDMDAwMEZGRkYwMjBDMjAyMDAwMDBGRkZGMTMKKzoxMDE5NDAwMDAyMEMyMDI0MDAwMEZGRkYwMjBDMjAyODAwMDBGRkZGRjMKKzoxMDE5NTAwMDAyMEMyMDM4MDAwMDAwMjAwMjBDMjAzQzAwMDAwMDIxNzYKKzoxMDE5NjAwMDAyMEMyMDQwMDAwMDAwMjIwMjBDMjA0NDAwMDAwMDIzNTIKKzoxMDE5NzAwMDAyMEMyMDQ4MDAwMDAwMjQwMjBDMjA0QzAwMDAwMDI1MkUKKzoxMDE5ODAwMDAyMEMyMDUwMDAwMDAwMjYwMjBDMjA1NDAwMDAwMDI3MEEKKzoxMDE5OTAwMDAyMEMyMDU4MDAwMDAwMjgwMjBDMjA1QzAwMDAwMDI5RTYKKzoxMDE5QTAwMDAyMEMyMDYwMDAwMDAwMkEwMjBDMjA2NDAwMDAwMDJCQzIKKzoxMDE5QjAwMDAyMEMyMDY4MDAwMDAwMkMwMjBDMjA2QzAwMDAwMDJEOUUKKzoxMDE5QzAwMDAyMEMyMDcwMDAwMDAwMkUwMjBDMjA3NDAwMDAwMDJGN0EKKzoxMDE5RDAwMDAyMEMyMDc4MDAwMDAwMTAwNjBDMjA3QzAwMDAwMDRGNTQKKzoxMDE5RTAwMDAyMEMyMUI4MDAwMDAwMDEwMjBDMjFCQzAwMDAwMDAxMjMKKzoxMDE5RjAwMDAyMEMyMUMwMDAwMDAwMDEwMjBDMjFDNDAwMDAwMDAxMDMKKzoxMDFBMDAwMDAyMEMyMUM4MDAwMDAwMDEwMjBDMjFDQzAwMDAwMDAxRTIKKzoxMDFBMTAwMDAyMEMyMUQwMDAwMDAwMDEwMjBDMjFENDAwMDAwMDAxQzIKKzoxMDFBMjAwMDAyMEMyMUQ4MDAwMDAwMDEwMjBDMjFEQzAwMDAwMDAxQTIKKzoxMDFBMzAwMDAyMEMyMUUwMDAwMDAwMDEwMjBDMjFFNDAwMDAwMDAxODIKKzoxMDFBNDAwMDAyMEMyMUU4MDAwMDAwMDEwMjBDMjFFQzAwMDAwMDAxNjIKKzoxMDFBNTAwMDAyMEMyMUYwMDAwMDAwMDEwMjBDMjFGNDAwMDAwMDAxNDIKKzoxMDFBNjAwMDAyMEMyMUY4MDAwMDAwMDEwNjBDMjFGQzAwMDAwMDBGMTAKKzoxMDFBNzAwMDAyMEMyMjM4MDdGRkZGRkYwMjBDMjIzQzAwMDAwMDNGNEYKKzoxMDFBODAwMDAyMEMyMjQwMDdGRkZGRkYwMjBDMjI0NDAwMDAwMDBGNUYKKzoxMDFBOTAwMDAxMEMyMjQ4MDAwMDAwMDAwMTBDMjI0QzAwMDAwMDAwNTQKKzoxMDFBQTAwMDAxMEMyMjUwMDAwMDAwMDAwMTBDMjI1NDAwMDAwMDAwMzQKKzoxMDFBQjAwMDAxMEMyMjU4MDAwMDAwMDAwMTBDMjI1QzAwMDAwMDAwMTQKKzoxMDFBQzAwMDAxMEMyMjYwMDAwMDAwMDAwMTBDMjI2NDAwMDAwMDAwRjQKKzoxMDFBRDAwMDAxMEMyMjY4MDAwMDAwMDAwMTBDMjI2QzAwMDAwMDAwRDQKKzoxMDFBRTAwMDAxMEMyMjcwMDAwMDAwMDAwMTBDMjI3NDAwMDAwMDAwQjQKKzoxMDFBRjAwMDAxMEMyMjc4MDAwMDAwMDAwMTBDMjI3QzAwMDAwMDAwOTQKKzoxMDFCMDAwMDAyMEMyNEJDMDAwMDAwMDEwQzBDMjAwMDAwMDAwM0U4QzMKKzoxMDFCMTAwMDBBMEMyMDAwMDAwMDAwMDEwQjBDMjAwMDAwMDAwMDBBNEQKKzoxMDFCMjAwMDAyMEM0MDA4MDAwMDA1NjIwMjBDNDAwQzAwMDAwNTUxNDgKKzoxMDFCMzAwMDAyMEM0MDEwMDAwMDA1NTUwMjBDNDAxNDAwMDAwNTcyMTQKKzoxMDFCNDAwMDAyMEM0MDFDMDAwMEZGRkYwMjBDNDAyMDAwMDBGRkZGQzEKKzoxMDFCNTAwMDAyMEM0MDI0MDAwMEZGRkYwMjBDNDAyODAwMDBGRkZGQTEKKzoxMDFCNjAwMDAyMEM0MDM4MDAwMDAwNDYwMjBDNDAzQzAwMDAwMDBDMTMKKzoxMDFCNzAwMDA2MEM0MDQwMDAwMDAwNUUwMjBDNDFCODAwMDAwMDAxNkQKKzoxMDFCODAwMDA2MEM0MUJDMDAwMDAwMUYwMjBDNDIzODA3RkZGRkZGOUIKKzoxMDFCOTAwMDAyMEM0MjNDMDAwMDAwM0YwMjBDNDI0MDA3RkZGRkZGRTYKKzoxMDFCQTAwMDAyMEM0MjQ0MDAwMDAwMEYwMTBDNDI0ODAwMDAwMDAwRkIKKzoxMDFCQjAwMDAxMEM0MjRDMDAwMDAwMDAwMTBDNDI1MDAwMDAwMDAwRUIKKzoxMDFCQzAwMDAxMEM0MjU0MDAwMDAwMDAwMTBDNDI1ODAwMDAwMDAwQ0IKKzoxMDFCRDAwMDAxMEM0MjVDMDAwMDAwMDAwMTBDNDI2MDAwMDAwMDAwQUIKKzoxMDFCRTAwMDAxMEM0MjY0MDAwMDAwMDAwMTBDNDI2ODAwMDAwMDAwOEIKKzoxMDFCRjAwMDAxMEM0MjZDMDAwMDAwMDAwMTBDNDI3MDAwMDAwMDAwNkIKKzoxMDFDMDAwMDAxMEM0Mjc0MDAwMDAwMDAwMTBDNDI3ODAwMDAwMDAwNEEKKzoxMDFDMTAwMDAxMEM0MjdDMDAwMDAwMDAwMTBDNDI4MDAwMDAwMDAwMkEKKzoxMDFDMjAwMDAyMEM0NEMwMDAwMDAwMDEwQzBDNDAwMDAwMDAwM0U4NUUKKzoxMDFDMzAwMDBBMEM0MDAwMDAwMDAwMDEwQjBDNDAwMDAwMDAwMDBBRUMKKzoxMDFDNDAwMDA2MEQ0MDAwMDAwMDBBMDAwMjBEMDA0NDAwMDAwMDMyQjIKKzoxMDFDNTAwMDAyMEQwMDhDMDIxNTAwMjAwMjBEMDA5MDAyMTUwMDIwREMKKzoxMDFDNjAwMDAyMEQwMDk0MDgxMDAwMDAwMjBEMDA5ODAwMDAwMDMzREYKKzoxMDFDNzAwMDAyMEQwMDlDMDAwMDAwMDIwMjBEMDBBMDAwMDAwMDAwMDgKKzoxMDFDODAwMDAyMEQwMEE0MDAwMDAwMDUwMjBEMDBBODAwMDAwMDA1RTAKKzoxMDFDOTAwMDA2MEQwMEFDMDAwMDAwMDIwMjBEMDBCNDAwMDAwMDAyQkUKKzoxMDFDQTAwMDAyMEQwMEI4MDAwMDAwMDMwMjBEMDBCQzAwMDAwMDAyOUQKKzoxMDFDQjAwMDAyMEQwMEMwMDAwMDAwMDEwMjBEMDBDODAwMDAwMDAyN0IKKzoxMDFDQzAwMDAyMEQwMENDMDAwMDAwMDIwMjBEMDE1QzAwMDAwMDAxQ0EKKzoxMDFDRDAwMDAyMEQwMTY0MDAwMDAwMDEwMjBEMDE2ODAwMDAwMDAyMTUKKzoxMDFDRTAwMDAyMEQwMjA0MDAwMDAwMDEwMjBEMDIwQzAwMDAwMDIwQTEKKzoxMDFDRjAwMDAyMEQwMjEwMDAwMDAwNDAwMjBEMDIxNDAwMDAwMDQwMUUKKzoxMDFEMDAwMDAyMEQwMjIwMDAwMDAwMDMwMjBEMDIyNDAwMDAwMDE4NTIKKzoxMDFEMTAwMDA2MEQwMjgwMDAwMDAwMTIwNDBEMDMwMDAwMTgwMzQzQUEKKzoxMDFEMjAwMDA2MEQwMzYwMDAwMDAwMEMwMjBEMDA0QzAwMDAwMDAxRDUKKzoxMDFEMzAwMDAyMEQwMDUwMDAwMDAwMDIwMjBEMDA1NDAwMDAwMDAwREYKKzoxMDFENDAwMDAyMEQwMDU4MDAwMDAwMDgwNjBEMDA1QzAwMDAwMDA0QjEKKzoxMDFENTAwMDAyMEQwMEM0MDAwMDAwMDQwMjBEMDExNDAwMDAwMDA5N0YKKzoxMDFENjAwMDAyMEQwMTE4MDAwMDAwMjkwMjBEMDExQzAwMDAwMDBBRUMKKzoxMDFENzAwMDAyMEQwMTIwMDAwMDAwMkEwMjBEMDEyNDAwMDAwMDAwRDUKKzoxMDFEODAwMDAyMEQwMTI4MDAwMDAwMjAwMjBEMDEyQzAwMDAwMDAwQkYKKzoxMDFEOTAwMDAyMEQwMTMwMDAwMDAwMjAwMjBEMDEzNDAwMDAwMDAwOUYKKzoxMDFEQTAwMDAyMEQwMTM4MDAwMDAwMjAwMjBEMDEzQzAwMDAwMDAwN0YKKzoxMDFEQjAwMDAyMEQwMTQwMDAwMDAwMjAwMjBEMDE0NDAwMDAwMDAwNUYKKzoxMDFEQzAwMDAyMEQwMTQ4MDAwMDAwMjAwMjBEMDAwNDAwMDAwMDAxODcKKzoxMDFERDAwMDAyMEQwMDA4MDAwMDAwMDEwMjBEMDAwQzAwMDAwMDAxQ0YKKzoxMDFERTAwMDAyMEQwMDEwMDAwMDAwMDEwMjBEMDAxNDAwMDAwMDAxQUYKKzoxMDFERjAwMDAyMEQwMDE4MDAwMDAwMDEwMjBEMDAxQzAwMDAwMDAxOEYKKzoxMDFFMDAwMDAyMEQwMDIwMDAwMDAwMDEwMjBEMDAyNDAwMDAwMDAxNkUKKzoxMDFFMTAwMDAyMEQwMDI4MDAwMDAwMDEwMjBEMDAyQzAwMDAwMDAxNEUKKzoxMDFFMjAwMDAyMEQwMDMwMDAwMDAwMDEwMjBEMDAzNDAwMDAwMDAxMkUKKzoxMDFFMzAwMDAyMEQwMDM4MDAwMDAwMDEwMjBEMDAzQzAwMDAwMDAxMEUKKzoxMDFFNDAwMDA2MEUyMDAwMDAwMDA4MDAwMjBFMDA0QzAwMDAwMDMyQzgKKzoxMDFFNTAwMDAyMEUwMDk0MDIxNTAwMjAwMjBFMDA5ODAyMTUwMDIwQzgKKzoxMDFFNjAwMDAyMEUwMDlDMDAwMDAwMzAwMjBFMDBBMDA4MTAwMDAwQ0UKKzoxMDFFNzAwMDAyMEUwMEE0MDAwMDAwMzMwMjBFMDBBODAwMDAwMDMwOTMKKzoxMDFFODAwMDAyMEUwMEFDMDAwMDAwMzEwMjBFMDBCMDAwMDAwMDAyQTMKKzoxMDFFOTAwMDAyMEUwMEI0MDAwMDAwMDQwMjBFMDBCODAwMDAwMDAwQjIKKzoxMDFFQTAwMDAyMEUwMEJDMDAwMDAwMDIwMjBFMDBDMDAwMDAwMDAyOTIKKzoxMDFFQjAwMDAyMEUwMEM0MDAwMDAwMDAwMjBFMDBDODAwMDAwMDAyNzQKKzoxMDFFQzAwMDAyMEUwMENDMDAwMDAwMDcwMjBFMDBEMDAwMDAwMDAyNEQKKzoxMDFFRDAwMDAyMEUwMEQ0MDAwMDAwMDIwMjBFMDBEODAwMDAwMDAxMzMKKzoxMDFFRTAwMDAyMEUwMTQ0MDAwMDAwMDEwMjBFMDE0QzAwMDAwMDAxM0UKKzoxMDFFRjAwMDAyMEUwMTUwMDAwMDAwMDIwMjBFMDIwNDAwMDAwMDAxNjgKKzoxMDFGMDAwMDAyMEUwMjBDMDAwMDAwNDAwMjBFMDIxMDAwMDAwMDQwMTEKKzoxMDFGMTAwMDAyMEUwMjFDMDAwMDAwMDQwMjBFMDIyMDAwMDAwMDIwM0QKKzoxMDFGMjAwMDAyMEUwMjI0MDAwMDAwMEUwMjBFMDIyODAwMDAwMDFCMTgKKzoxMDFGMzAwMDA2MEUwMzAwMDAwMDAwMTIwNDBFMDI4MDAwMUIwMzVCNkIKKzoxMDFGNDAwMDA2MEUwMkVDMDAwMDAwMDUwMjBFMDA1NDAwMDAwMDBDMUEKKzoxMDFGNTAwMDAyMEUwMDU4MDAwMDAwMEMwMjBFMDA1QzAwMDAwMDAwQTEKKzoxMDFGNjAwMDAyMEUwMDYwMDAwMDAwMTAwNjBFMDA2NDAwMDAwMDA0NzUKKzoxMDFGNzAwMDAyMEUwMERDMDAwMDAwMDMwMjBFMDExMDAwMDAwMDBGNDIKKzoxMDFGODAwMDAyMEUwMTE0MDAwMDAwMkYwMjBFMDExODAwMDAwMDAwRDQKKzoxMDFGOTAwMDAyMEUwMTFDMDAwMDAwMjAwMjBFMDAwNDAwMDAwMDAxREYKKzoxMDFGQTAwMDAyMEUwMDA4MDAwMDAwMDEwMjBFMDAwQzAwMDAwMDAxRkIKKzoxMDFGQjAwMDAyMEUwMDEwMDAwMDAwMDEwMjBFMDAxNDAwMDAwMDAxREIKKzoxMDFGQzAwMDAyMEUwMDE4MDAwMDAwMDEwMjBFMDAxQzAwMDAwMDAxQkIKKzoxMDFGRDAwMDAyMEUwMDIwMDAwMDAwMDEwMjBFMDAyNDAwMDAwMDAxOUIKKzoxMDFGRTAwMDAyMEUwMDI4MDAwMDAwMDEwMjBFMDAyQzAwMDAwMDAxN0IKKzoxMDFGRjAwMDAyMEUwMDMwMDAwMDAwMDEwMjBFMDAzNDAwMDAwMDAxNUIKKzoxMDIwMDAwMDAyMEUwMDM4MDAwMDAwMDEwMjBFMDAzQzAwMDAwMDAxM0EKKzoxMDIwMTAwMDAyMEUwMDQwMDAwMDAwMDEwMjBFMDA0NDAwMDAwMDAxMUEKKzoxMDIwMjAwMDA3MzAwNDAwMDBBRjAwMDAwODMwMDc2ODAwMTMwMzc2OTMKKzoxMDIwMzAwMDA3MzQwMDAwMzMwNTAwMDAwNzM0ODAwMDMyN0YwQ0MyRjMKKzoxMDIwNDAwMDA3MzUwMDAwMUE5NTE5NjIwODM1MzlFMDU4QzQwMzc4M0QKKzoxMDIwNTAwMDAxMzAwMDAwMDAwMDAwMDAwMTMwMDAwNDAwMDAwMDAwMUEKKzoxMDIwNjAwMDAxMzAwMDA4MDAwMDAwMDAwMTMwMDAwQzAwMDAwMDAwRkEKKzoxMDIwNzAwMDAxMzAwMDEwMDAwMDAwMDAwMTMwMDAxNDAwMDAwMDAwREEKKzoxMDIwODAwMDAyMzAwMDIwMDAwMDAwMDEwMjMwMDAyNDAwMDAwMDAyQTUKKzoxMDIwOTAwMDAyMzAwMDI4MDAwMDAwMDMwMjMwMDAyQzAwMDAwMDAwODUKKzoxMDIwQTAwMDAyMzAwMDMwMDAwMDAwMDQwMjMwMDAzNDAwMDAwMDAxNjMKKzoxMDIwQjAwMDAyMzAwMDM4MDAwMDAwMDAwMjMwMDAzQzAwMDAwMDAxNDcKKzoxMDIwQzAwMDAyMzAwMDQwMDAwMDAwMDQwMjMwMDA0NDAwMDAwMDAwMjQKKzoxMDIwRDAwMDAyMzAwMDQ4MDAwMDAwMDEwMjMwMDA0QzAwMDAwMDAzMDQKKzoxMDIwRTAwMDAyMzAwMDUwMDAwMDAwMDAwMjMwMDA1NDAwMDAwMDAxRTcKKzoxMDIwRjAwMDAyMzAwMDU4MDAwMDAwMDQwMjMwMDA1QzAwMDAwMDAwQzQKKzoxMDIxMDAwMDAyMzAwMDYwMDAwMDAwMDEwMjMwMDA2NDAwMDAwMDAzQTMKKzoxMDIxMTAwMDAyMzAwMDY4MDAwMDAwMDAwMjMwMDA2QzAwMDAwMDAxODYKKzoxMDIxMjAwMDAyMzAwMDcwMDAwMDAwMDQwMjMwMDA3NDAwMDAwMDAwNjMKKzoxMDIxMzAwMDAyMzAwMDc4MDAwMDAwMDQwMjMwMDA3QzAwMDAwMDAzNDAKKzoxMDIxNDAwMDA2MzAwMDgwMDAwMDAwMDIwMjMwMDBBNDAwMDAzRkZGQzMKKzoxMDIxNTAwMDAyMzAwMEE4MDAwMDAzRkYwMjMwMDIyNDAwMDAwMDAwNEIKKzoxMDIxNjAwMDAyMzAwMjM0MDAwMDAwMDAwMjMwMDI0QzAwMDAwMDAwODcKKzoxMDIxNzAwMDAyMzAwMkU0MDAwMEZGRkYwNjMwMjAwMDAwMDAwODAwRUIKKzoxMDIxODAwMDAyMzM4QkMwMDAwMDAwMDEwMjMzODAwMDAwMDAwMDFBRkYKKzoxMDIxOTAwMDAyMzM4MDQwMDAwMDAwNEUwMjMzODA4MDAwMDAwMDEwQjcKKzoxMDIxQTAwMDAyMzM4MEMwMDAwMDAwMjAwQzMzODMwMDAwMDdBMTIwMTAKKzoxMDIxQjAwMDBBMzM4MzAwMDAwMDAxMzgwQjMzODMwMDAwMDAxMzg4Q0EKKzoxMDIxQzAwMDBBMzM4MzQwMDAwMDAwMDAwQzMzODM0MDAwMDAwMUY0MTgKKzoxMDIxRDAwMDBCMzM4MzQwMDAwMDAwMDUwMjMzODM4MDAwMDdBMTIwRjkKKzoxMDIxRTAwMDAyMzM4M0MwMDAwMDAxRjQwNjMyMkE4ODAwMDAwMEMyRDYKKzoxMDIxRjAwMDA2MzIyMDA4MDAwMDAwQzgwNjMyMjAwMDAwMDAwMDAyNUQKKzoxMDIyMDAwMDA2MzIyM0U4MDAwMDAwNDAwNDMyMkU1ODAwMDQwMzdBMEUKKzoxMDIyMTAwMDA2MzI1MEEwMDAwMDAwMDQwNjMyNTBCODAwMDAwMDAyNTAKKzoxMDIyMjAwMDA2MzI1MDgwMDAwMDAwMDYwNDMyNTA5ODAwMDIwMzdFRkYKKzoxMDIyMzAwMDA2MzI1MDAwMDAwMDAwMjAwNjMyMzAwMDAwMDAwNDAwOEEKKzoxMDIyNDAwMDA2MzIxQzAwMDAwMDAwMDQwNDMyMTgzMDAwMDIwMzgwMzMKKzoxMDIyNTAwMDA2MzIyNEU4MDAwMDAwQjQwMjMyMkRCMDAwMDAwMDAwNzUKKzoxMDIyNjAwMDA2MzI0MDAwMDAwMDAwQjQwNjMyMzAwMDAwMDAwMDIwQkEKKzoxMDIyNzAwMDA2MzIzMTAwMDAwMDAwMjAwNjMyMzIwMDAwMDAwMDIwNEIKKzoxMDIyODAwMDA2MzIzMzAwMDAwMDAwMjAwNjMyMzQwMDAwMDAwMDIwMzcKKzoxMDIyOTAwMDA2MzIzNTAwMDAwMDAwMjAwNjMyMzYwMDAwMDAwMDIwMjMKKzoxMDIyQTAwMDA2MzIzNzAwMDAwMDAwMjAwNjMyMzgwMDAwMDAwMDIwMEYKKzoxMDIyQjAwMDA2MzIzOTAwMDAwMDAwMjAwNjMyM0EwMDAwMDAwMDIwRkIKKzoxMDIyQzAwMDA2MzIzQjAwMDAwMDAwMjAwNjMyM0MwMDAwMDAwMDIwRTcKKzoxMDIyRDAwMDA2MzIzRDAwMDAwMDAwMjAwNjMyM0UwMDAwMDAwMDIwRDMKKzoxMDIyRTAwMDA2MzIzRjAwMDAwMDAwMjAwNjMyMUMxMDAwMDAwMDAyRjEKKzoxMDIyRjAwMDA2MzI0NUEwMDAwMDAwMjQwNjMyMjdCODAwMDAwMEI0RDIKKzoxMDIzMDAwMDAyMzIyREI0MDAwMDAwMDAwNjMyNDJEMDAwMDAwMEI0QkEKKzoxMDIzMTAwMDA2MzIzMDgwMDAwMDAwMjAwNjMyMzE4MDAwMDAwMDIwQUMKKzoxMDIzMjAwMDA2MzIzMjgwMDAwMDAwMjAwNjMyMzM4MDAwMDAwMDIwOTgKKzoxMDIzMzAwMDA2MzIzNDgwMDAwMDAwMjAwNjMyMzU4MDAwMDAwMDIwODQKKzoxMDIzNDAwMDA2MzIzNjgwMDAwMDAwMjAwNjMyMzc4MDAwMDAwMDIwNzAKKzoxMDIzNTAwMDA2MzIzODgwMDAwMDAwMjAwNjMyMzk4MDAwMDAwMDIwNUMKKzoxMDIzNjAwMDA2MzIzQTgwMDAwMDAwMjAwNjMyM0I4MDAwMDAwMDIwNDgKKzoxMDIzNzAwMDA2MzIzQzgwMDAwMDAwMjAwNjMyM0Q4MDAwMDAwMDIwMzQKKzoxMDIzODAwMDA2MzIzRTgwMDAwMDAwMjAwNjMyM0Y4MDAwMDAwMDIwMjAKKzoxMDIzOTAwMDA2MzIxQzIwMDAwMDAwMDIwNjMyNDYzMDAwMDAwMDI0RjUKKzoxMDIzQTAwMDA3MjAwNDAwMDA4NzAwMDAwODIwMDc4MDAwMTAwMzgyMzcKKzoxMDIzQjAwMDA3MjQwMDAwMzE2NTAwMDAwNzI0ODAwMDA4MUQwQzVBMjYKKzoxMDIzQzAwMDA4MjQ4RUIwNkM5MDAzODQwMTIwMDAwMDAwMDAwMDAwRkYKKzoxMDIzRDAwMDAxMjAwMDA0MDAwMDAwMDAwMTIwMDAwODAwMDAwMDAwQUYKKzoxMDIzRTAwMDAxMjAwMDBDMDAwMDAwMDAwMTIwMDAxMDAwMDAwMDAwOEYKKzoxMDIzRjAwMDAxMjAwMDE0MDAwMDAwMDAwMjIwMDAyMDAwMDAwMDAxNjUKKzoxMDI0MDAwMDAyMjAwMDI0MDAwMDAwMDIwMjIwMDAyODAwMDAwMDAzMzcKKzoxMDI0MTAwMDAyMjAwMDJDMDAwMDAwMDAwMjIwMDAzMDAwMDAwMDA0MTgKKzoxMDI0MjAwMDAyMjAwMDM0MDAwMDAwMDEwMjIwMDAzODAwMDAwMDAwRkIKKzoxMDI0MzAwMDAyMjAwMDNDMDAwMDAwMDEwMjIwMDA0MDAwMDAwMDA0RDcKKzoxMDI0NDAwMDAyMjAwMDQ0MDAwMDAwMDAwMjIwMDA0ODAwMDAwMDAxQkIKKzoxMDI0NTAwMDAyMjAwMDRDMDAwMDAwMDMwMjIwMDA1MDAwMDAwMDAwOTkKKzoxMDI0NjAwMDAyMjAwMDU0MDAwMDAwMDEwMjIwMDA1ODAwMDAwMDA0NzcKKzoxMDI0NzAwMDAyMjAwMDVDMDAwMDAwMDAwMjIwMDA2MDAwMDAwMDAxNUIKKzoxMDI0ODAwMDAyMjAwMDY0MDAwMDAwMDMwMjIwMDA2ODAwMDAwMDAwMzkKKzoxMDI0OTAwMDAyMjAwMDZDMDAwMDAwMDEwMjIwMDA3MDAwMDAwMDA0MTcKKzoxMDI0QTAwMDAyMjAwMDc0MDAwMDAwMDAwMjIwMDA3ODAwMDAwMDA0RjgKKzoxMDI0QjAwMDAyMjAwMDdDMDAwMDAwMDMwNjIwMDA4MDAwMDAwMDAyRDMKKzoxMDI0QzAwMDAyMjAwMEE0MDAwMDNGRkYwMjIwMDBBODAwMDAwM0ZGM0MKKzoxMDI0RDAwMDAyMjAwMjI0MDAwMDAwMDAwMjIwMDIzNDAwMDAwMDAwNUMKKzoxMDI0RTAwMDAyMjAwMjRDMDAwMDAwMDAwMjIwMDJFNDAwMDBGRkZGNzYKKzoxMDI0RjAwMDA2MjAyMDAwMDAwMDA4MDAwMjIzOEJDMDAwMDAwMDAxMUQKKzoxMDI1MDAwMDAyMjM4MDAwMDAwMDAwMTAwMjIzODA0MDAwMDAwMDEyMUYKKzoxMDI1MTAwMDAyMjM4MDgwMDAwMDAwMzAwMjIzODBDMDAwMDAwMDBFRjMKKzoxMDI1MjAwMDBDMjM4MzAwMDAwN0ExMjAwQTIzODMwMDAwMDAwMTM4NDgKKzoxMDI1MzAwMDBCMjM4MzAwMDAwMDEzODgwQTIzODM0MDAwMDAwMDAwNUYKKzoxMDI1NDAwMDBDMjM4MzQwMDAwMDAxRjQwQjIzODM0MDAwMDAwMDA1QUUKKzoxMDI1NTAwMDAyMjM4MzgwMDAwN0ExMjAwMjIzODNDMDAwMDAwMUY0MkUKKzoxMDI1NjAwMDA2MjI1MDAwMDAwMDAwNDIwNjIyMjAwODAwMDAwMEM4OTkKKzoxMDI1NzAwMDA2MjIyMDAwMDAwMDAwMDIwNjIyNDAwMDAwMDAwMEM2RTMKKzoxMDI1ODAwMDA0MjI0MzE4MDAwNTAzODYwNjIyNDMyQzAwMDAwMDBCOUEKKzoxMDI1OTAwMDA0MjI0MzU4MDAwNTAzOEIwNjIyNDM2QzAwMDAwMDBCMDUKKzoxMDI1QTAwMDA0MjI0Mzk4MDAwNTAzOTAwNjIyNDNBQzAwMDAwMDBCNzAKKzoxMDI1QjAwMDA0MjI0M0Q4MDAwNTAzOTUwNjIyNDNFQzAwMDAwMDBCREIKKzoxMDI1QzAwMDA0MjI0NDE4MDAwNTAzOUEwNjIyNDQyQzAwMDAwMDBCNDQKKzoxMDI1RDAwMDA0MjI0NDU4MDAwNTAzOUYwNjIyNDQ2QzAwMDAwMDBCQUYKKzoxMDI1RTAwMDA0MjI0NDk4MDAwNTAzQTQwNjIyNDRBQzAwMDAwMDBCMUEKKzoxMDI1RjAwMDA0MjI0NEQ4MDAwNTAzQTkwNjIyNDRFQzAwMDAwMDBCODUKKzoxMDI2MDAwMDA0MjI0NTE4MDAwNTAzQUUwNjIyNDUyQzAwMDAwMDBCRUQKKzoxMDI2MTAwMDA0MjI0NTU4MDAwNTAzQjMwNjIyNDU2QzAwMDAwMDBCNTgKKzoxMDI2MjAwMDA0MjI0NTk4MDAwNTAzQjgwNjIyNDVBQzAwMDAwMDBCQzMKKzoxMDI2MzAwMDA0MjI0NUQ4MDAwNTAzQkQwNjIyNDVFQzAwMDAwMDBCMkUKKzoxMDI2NDAwMDA0MjI0NjE4MDAwNTAzQzIwNjIyNDYyQzAwMDAwMDBCOTcKKzoxMDI2NTAwMDA0MjI0NjU4MDAwNTAzQzcwNjIyNDY2QzAwMDAwMDBCMDIKKzoxMDI2NjAwMDA0MjI0Njk4MDAwNTAzQ0MwNjIyNDZBQzAwMDAwMDBCNkQKKzoxMDI2NzAwMDA0MjI0NkQ4MDAwNTAzRDEwNjIyNDZFQzAwMDAwMDBCRDgKKzoxMDI2ODAwMDA0MjI0NzE4MDAwNTAzRDYwNjIyNDcyQzAwMDAwMDBCNDEKKzoxMDI2OTAwMDA0MjI0NzU4MDAwNTAzREIwNjIyNDc2QzAwMDAwMDBCQUMKKzoxMDI2QTAwMDA0MjI0Nzk4MDAwNTAzRTAwNjIyNDdBQzAwMDAwMDBCMTcKKzoxMDI2QjAwMDA0MjI0N0Q4MDAwNTAzRTUwNjIyNDdFQzAwMDAwMDBCODIKKzoxMDI2QzAwMDA0MjI0ODE4MDAwNTAzRUEwNjIyNDgyQzAwMDAwMDBCRUIKKzoxMDI2RDAwMDA0MjI0ODU4MDAwNTAzRUYwNjIyNDg2QzAwMDAwMDBCNTYKKzoxMDI2RTAwMDA0MjI0ODk4MDAwNTAzRjQwNjIyNDhBQzAwMDAwMDBCQzEKKzoxMDI2RjAwMDA0MjI0OEQ4MDAwNTAzRjkwNjIyNDhFQzAwMDAwMDBCMkMKKzoxMDI3MDAwMDA0MjI0OTE4MDAwNTAzRkUwNjIyNDkyQzAwMDAwMDBCOTQKKzoxMDI3MTAwMDA0MjI0OTU4MDAwNTA0MDMwNjIyNDk2QzAwMDAwMDBCRkUKKzoxMDI3MjAwMDA0MjI0OTk4MDAwNTA0MDgwNjIyNDlBQzAwMDAwMDBCNjkKKzoxMDI3MzAwMDA0MjI0OUQ4MDAwNTA0MEQwNjIyNDlFQzAwMDAwMDBCRDQKKzoxMDI3NDAwMDA0MjI0QTE4MDAwNTA0MTIwNjIyNEEyQzAwMDAwMDBCM0QKKzoxMDI3NTAwMDA0MjI0QTU4MDAwNTA0MTcwNjIyNEE2QzAwMDAwMDBCQTgKKzoxMDI3NjAwMDA0MjI0QTk4MDAwNTA0MUMwNjIyNEFBQzAwMDAwMDBCMTMKKzoxMDI3NzAwMDA0MjI0QUQ4MDAwNTA0MjEwNjIyNEFFQzAwMDAwMDA1ODQKKzoxMDI3ODAwMDA2MjI0QjAwMDAwMDAwMTcwNDIyNEI1QzAwMDEwNDI2QzcKKzoxMDI3OTAwMDA2MjI0QjYwMDAwMDAwMDMwNDIyNEI2QzAwMDEwNDI3NUEKKzoxMDI3QTAwMDA2MjIzODAwMDAwMDAwNDAwNjIyMzAwMDAwMDAwMjAwMkYKKzoxMDI3QjAwMDA0MjI1MUMwMDAwNDA0MjgwNjIyMTAwMDAwMDAwMEMwQkEKKzoxMDI3QzAwMDA2MjIxNUMwMDAwMDAyNDAwNDIyMUVDODAwMDgwNDJDODYKKzoxMDI3RDAwMDA2MjIzOTAwMDAwMDAwMDgwMjIyNTExODAwMDAwMDAwMDMKKzoxMDI3RTAwMDA2MjI1MUQwMDAwMDAwMDYwNjIyMTMwMDAwMDAwMDAyNUQKKzoxMDI3RjAwMDA2MjIxNDEwMDAwMDAwMzAwNjIyMzkyMDAwMDAwMDA4RDQKKzoxMDI4MDAwMDAyMjI1MTFDMDAwMDAwMDAwNjIyNTFFODAwMDAwMDA2RDAKKzoxMDI4MTAwMDA2MjIxMzA4MDAwMDAwMDIwNjIyMTREMDAwMDAwMDMwMzcKKzoxMDI4MjAwMDAyMTYxMDAwMDAwMDAwMjgwMjE3MDAwODAwMDAwMDAyMzUKKzoxMDI4MzAwMDAyMTcwMDJDMDAwMDAwMDMwMjE3MDAzQzAwMDAwMDA0RjcKKzoxMDI4NDAwMDAyMTcwMDQ0MDAwMDAwMDAwMjE3MDA0ODAwMDAwMDAyQzgKKzoxMDI4NTAwMDAyMTcwMDRDMDAwMDAwOTAwMjE3MDA1MDAwMDAwMDkwOEEKKzoxMDI4NjAwMDAyMTcwMDU0MDA4MDAwOTAwMjE3MDA1ODA4MTAwMDAwNjIKKzoxMDI4NzAwMDAyMTcwMDYwMDAwMDAwOEEwMjE3MDA2NDAwMDAwMDgwNTgKKzoxMDI4ODAwMDAyMTcwMDY4MDAwMDAwODEwMjE3MDA2QzAwMDAwMDgwNDEKKzoxMDI4OTAwMDAyMTcwMDcwMDAwMDAwMDYwMjE3MDA3ODAwMDAwN0QwNDEKKzoxMDI4QTAwMDAyMTcwMDdDMDAwMDA3NkMwMjE3MDAzODAwN0MxMDA0M0YKKzoxMDI4QjAwMDAyMTcwMDA0MDAwMDAwMEYwNjE2NDAyNDAwMDAwMDAyNkEKKzoxMDI4QzAwMDAyMTY0MDcwMDAwMDAwMUMwMjE2NDIwODAwMDAwMDAxQzEKKzoxMDI4RDAwMDAyMTY0MjEwMDAwMDAwMDEwMjE2NDIyMDAwMDAwMDAxMTIKKzoxMDI4RTAwMDAyMTY0MjI4MDAwMDAwMDEwMjE2NDIzMDAwMDAwMDAxREEKKzoxMDI4RjAwMDAyMTY0MjM4MDAwMDAwMDEwMjE2NDI2MDAwMDAwMDAxOEEKKzoxMDI5MDAwMDBDMTY0MDFDMDAwM0QwOTAwQTE2NDAxQzAwMDAwMDlDQ0UKKzoxMDI5MTAwMDBCMTY0MDFDMDAwMDA5QzQwMjE2NDAzMDAwMDAwMDA4REQKKzoxMDI5MjAwMDAyMTY0MDM0MDAwMDAwMEMwMjE2NDAzODAwMDAwMDEwNkYKKzoxMDI5MzAwMDAyMTY0MDQ0MDAwMDAwMjAwMjE2NDAwMDAwMDAwMDAxODIKKzoxMDI5NDAwMDAyMTY0MEQ4MDAwMDAwMDEwMjE2NDAwODAwMDAwMDAxRjUKKzoxMDI5NTAwMDAyMTY0MDBDMDAwMDAwMDEwMjE2NDAxMDAwMDAwMDAxQTkKKzoxMDI5NjAwMDAyMTY0MjQwMDAwMDAwMDAwMjE2NDI0ODAwMDAwMDAwMkIKKzoxMDI5NzAwMDA2MTY0MjcwMDAwMDAwMDIwMjE2NDI1MDAwMDAwMDAwREQKKzoxMDI5ODAwMDAyMTY0MjU4MDAwMDAwMDAwNjE2NDI4MDAwMDAwMDAyQjUKKzoxMDI5OTAwMDAyMTY2MDA4MDAwMDA2MTQwMjE2NjAwQzAwMDAwNjAwMTMKKzoxMDI5QTAwMDAyMTY2MDEwMDAwMDA2MDQwMjE2NjAxQzAwMDBGRkZGMDMKKzoxMDI5QjAwMDAyMTY2MDIwMDAwMEZGRkYwMjE2NjAyNDAwMDBGRkZGRTcKKzoxMDI5QzAwMDAyMTY2MDI4MDAwMEZGRkYwMjE2NjAzODAwMDAwMDIwOTkKKzoxMDI5RDAwMDAyMTY2MDNDMDAwMDAwMjAwNjE2NjA0MDAwMDAwMDAyNjUKKzoxMDI5RTAwMDAyMTY2MDQ4MDAwMDAwMjMwMjE2NjA0QzAwMDAwMDI0MUMKKzoxMDI5RjAwMDAyMTY2MDUwMDAwMDAwMjUwMjE2NjA1NDAwMDAwMDI2RjgKKzoxMDJBMDAwMDAyMTY2MDU4MDAwMDAwMjcwMjE2NjA1QzAwMDAwMDI5RDIKKzoxMDJBMTAwMDAyMTY2MDYwMDAwMDAwMkEwMjE2NjA2NDAwMDAwMDJCQUQKKzoxMDJBMjAwMDAyMTY2MDY4MDAwMDAwMkMwMjE2NjA2QzAwMDAwMDJEODkKKzoxMDJBMzAwMDA2MTY2MDcwMDAwMDAwMTIwMjE2NjBCODAwMDAwMDAxNjcKKzoxMDJBNDAwMDAyMTY2MEJDMDAwMDAwMDEwNjE2NjBDMDAwMDAwMDNFRDcKKzoxMDJBNTAwMDAyMTY2MUI4MDAwMDAwMDEwNjE2NjFCQzAwMDAwMDFGRUMKKzoxMDJBNjAwMDAyMTY2MjM4MDdGRkZGRkYwMjE2NjIzQzAwMDAwMDNGQkIKKzoxMDJBNzAwMDAyMTY2MjQwMDdGRkZGRkYwMjE2NjI0NDAwMDAwMDBGQ0IKKzoxMDJBODAwMDAxMTY2MjQ4MDAwMDAwMDAwMTE2NjI0QzAwMDAwMDAwQzAKKzoxMDJBOTAwMDAxMTY2MjUwMDAwMDAwMDAwMTE2NjI1NDAwMDAwMDAwQTAKKzoxMDJBQTAwMDAxMTY2MjU4MDAwMDAwMDAwMTE2NjI1QzAwMDAwMDAwODAKKzoxMDJBQjAwMDAxMTY2MjYwMDAwMDAwMDAwMTE2NjI2NDAwMDAwMDAwNjAKKzoxMDJBQzAwMDAxMTY2MjY4MDAwMDAwMDAwMTE2NjI2QzAwMDAwMDAwNDAKKzoxMDJBRDAwMDAxMTY2MjcwMDAwMDAwMDAwMTE2NjI3NDAwMDAwMDAwMjAKKzoxMDJBRTAwMDAxMTY2Mjc4MDAwMDAwMDAwMTE2NjI3QzAwMDAwMDAwMDAKKzoxMDJBRjAwMDAyMTY2NEJDMDAwMDAwMDEwQzE2NjAwMDAwMDAwM0U4MzAKKzoxMDJCMDAwMDBBMTY2MDAwMDAwMDAwMDEwQjE2NjAwMDAwMDAwMDBBQjkKKzoxMDJCMTAwMDAyMTY4MDQwMDAwMDAwMDYwMjE2ODA0NDAwMDAwMDA1RjYKKzoxMDJCMjAwMDAyMTY4MDQ4MDAwMDAwMEEwMjE2ODA0QzAwMDAwMDA1RDIKKzoxMDJCMzAwMDAyMTY4MDU0MDAwMDAwMDIwMjE2ODBDQzAwMDAwMDA0M0YKKzoxMDJCNDAwMDAyMTY4MEQwMDAwMDAwMDQwMjE2ODBENDAwMDAwMDA0QTkKKzoxMDJCNTAwMDAyMTY4MEQ4MDAwMDAwMDQwMjE2ODBEQzAwMDAwMDA0ODkKKzoxMDJCNjAwMDAyMTY4MEUwMDAwMDAwMDQwMjE2ODBFNDAwMDAwMDA0NjkKKzoxMDJCNzAwMDAyMTY4MEU4MDAwMDAwMDQwMjE2ODgwNDAwMDAwMDA0MjkKKzoxMDJCODAwMDAyMTY4MDMwMDAwMDAwN0MwMjE2ODAzNDAwMDAwMDNERjgKKzoxMDJCOTAwMDAyMTY4MDM4MDAwMDAwM0YwMjE2ODAzQzAwMDAwMDlDQjYKKzoxMDJCQTAwMDAyMTY4MEYwMDAwMDAwMDcwNjE2ODBGNDAwMDAwMDA1MDEKKzoxMDJCQjAwMDAyMTY4ODBDMDEwMTAxMDEwMjE2ODEwODAwMDAwMDAwQzQKKzoxMDJCQzAwMDAyMTY4MTBDMDAwMDAwMDQwMjE2ODExMDAwMDAwMDA0QUYKKzoxMDJCRDAwMDAyMTY4MTE0MDAwMDAwMDIwMjE2ODgxMDA4MDEyMDA0NjkKKzoxMDJCRTAwMDAyMTY4MTE4MDAwMDAwMDUwMjE2ODExQzAwMDAwMDA1NzUKKzoxMDJCRjAwMDAyMTY4MTIwMDAwMDAwMDUwMjE2ODEyNDAwMDAwMDA1NTUKKzoxMDJDMDAwMDAyMTY4ODJDMjAwODEwMDEwMjE2ODEyODAwMDAwMDA4RjYKKzoxMDJDMTAwMDAyMTY4MTJDMDAwMDAwMDYwMjE2ODEzMDAwMDAwMDA3MTkKKzoxMDJDMjAwMDAyMTY4MTM0MDAwMDAwMDAwMjE2ODgzMDAxMDEwMTIwRTQKKzoxMDJDMzAwMDA2MTY4MTM4MDAwMDAwMDQwMjE2ODgzNDAxMDEwMTAxRTMKKzoxMDJDNDAwMDA2MTY4MTQ4MDAwMDAwMDQwMjE2ODgzODAxMDEwMTAxQkYKKzoxMDJDNTAwMDA2MTY4MTU4MDAwMDAwMDQwMjE2ODgzQzAxMDEwMTAxOUIKKzoxMDJDNjAwMDA2MTY4MTY4MDAwMDAwMDMwMjE2ODE3NDAwMDAwMDAxNEUKKzoxMDJDNzAwMDAyMTY4ODQwMDEwMTAxMDEwMjE2ODE3ODAwMDAwMDAxNUUKKzoxMDJDODAwMDAyMTY4MTdDMDAwMDAwMDEwMjE2ODE4MDAwMDAwMDAxMTQKKzoxMDJDOTAwMDAyMTY4MTg0MDAwMDAwMDEwMjE2ODg0NDAxMDEwMTAxMkUKKzoxMDJDQTAwMDAyMTY4MTg4MDAwMDAwMDEwMjE2ODE4QzAwMDAwMDA0RDkKKzoxMDJDQjAwMDAyMTY4MTkwMDAwMDAwMDQwMjE2ODE5NDAwMDAwMDAyQjgKKzoxMDJDQzAwMDAyMTY4ODQ4MDgwMTIwMDQwMjE2ODE5ODAwMDAwMDA1QjkKKzoxMDJDRDAwMDAyMTY4MTlDMDAwMDAwMDUwMjE2ODFBMDAwMDAwMDA1N0MKKzoxMDJDRTAwMDAyMTY4MUE0MDAwMDAwMDUwMjE2ODgxNDIwMDgxMDAxQjUKKzoxMDJDRjAwMDAyMTY4MUE4MDAwMDAwMDgwMjE2ODFBQzAwMDAwMDA2NDAKKzoxMDJEMDAwMDAyMTY4MUIwMDAwMDAwMDcwMjE2ODFCNDAwMDAwMDAxMjUKKzoxMDJEMTAwMDAyMTY4ODE4MDEwMTAxMjAwMjE2ODFCODAwMDAwMDAxODYKKzoxMDJEMjAwMDAyMTY4MUJDMDAwMDAwMDEwMjE2ODFDMDAwMDAwMDAxRjMKKzoxMDJEMzAwMDAyMTY4MUM0MDAwMDAwMDEwMjE2ODgxQzAxMDEwMTAxNzUKKzoxMDJENDAwMDAyMTY4MUM4MDAwMDAwMDEwMjE2ODFDQzAwMDAwMDAxQkIKKzoxMDJENTAwMDAyMTY4MUQwMDAwMDAwMDEwMjE2ODFENDAwMDAwMDAxOUIKKzoxMDJENjAwMDAyMTY4ODIwMDEwMTAxMDEwMjE2ODFEODAwMDAwMDAxMkQKKzoxMDJENzAwMDAyMTY4MURDMDAwMDAwMDEwMjE2ODFFMDAwMDAwMDAxNjMKKzoxMDJEODAwMDAyMTY4MUU0MDAwMDAwMDEwMjE2ODgyNDAxMDEwMTAxRkQKKzoxMDJEOTAwMDAyMTY4MUU4MDAwMDAwMDEwMjE2ODFFQzAwMDAwMDAxMkIKKzoxMDJEQTAwMDAyMTY4MUYwMDAwMDAwMDEwMjE2ODgyODAxMDEwMTAxQ0QKKzoxMDJEQjAwMDAyMTY4MjQwRkZGRjAwM0YwNjE2ODI0NDAwMDAwMDAyMTgKKzoxMDJEQzAwMDAyMTY4MjRDRkZGRjAwM0YwMjE2ODI1MDAwMDAwMTAwRjUKKzoxMDJERDAwMDAyMTY4MjU0MDAwMDAxMDAwNjE2ODI1ODAwMDAwMDAyMEMKKzoxMDJERTAwMDAyMTY4MjYwMDAwMDAwQzAwMjE2ODI2NDAwMDAwMEMwNkIKKzoxMDJERjAwMDAyMTY4MjY4MDAwMDFFMDAwMjE2ODI2QzAwMDAxRTAwOEYKKzoxMDJFMDAwMDAyMTY4MjcwMDAwMDQwMDAwMjE2ODI3NDAwMDA0MDAwMkEKKzoxMDJFMTAwMDAyMTY4Mjc4MDAwMDgwMDAwMjE2ODI3QzAwMDA4MDAwOEEKKzoxMDJFMjAwMDAyMTY4MjgwMDAwMDIwMDAwMjE2ODI4NDAwMDAyMDAwMkEKKzoxMDJFMzAwMDA2MTY4Mjg4MDAwMDAwMDcwMjE2ODJBNDAwMDAwMDAxMjYKKzoxMDJFNDAwMDA2MTY4MkE4MDAwMDAwMEEwMjE2ODFGNDAwMDAwQzA4OTEKKzoxMDJFNTAwMDAyMTY4MUY4MDAwMDAwNDAwMjE2ODFGQzAwMDAwMTAwMEIKKzoxMDJFNjAwMDAyMTY4MjAwMDAwMDAwMjAwMjE2ODIwNDAwMDAwMDE3RjMKKzoxMDJFNzAwMDAyMTY4MjA4MDAwMDAwODAwMjE2ODIwQzAwMDAwMjAwODgKKzoxMDJFODAwMDAyMTY4MjEwMDAwMDAwMDAwMjE2ODIxOEZGRkYwMUZGRTgKKzoxMDJFOTAwMDAyMTY4MjE0RkZGRjAxRkYwMjE2ODIzQzAwMDAwMDEzOUQKKzoxMDJFQTAwMDAyMTY4MDkwMDAwMDAxM0YwMjE2ODA2MDAwMDAwMTQwODEKKzoxMDJFQjAwMDAyMTY4MDY0MDAwMDAxNDAwNjE2ODA2ODAwMDAwMDAyQ0YKKzoxMDJFQzAwMDAyMTY4MDcwMDAwMDAwQzAwNjE2ODA3NDAwMDAwMDA3MjMKKzoxMDJFRDAwMDAyMTY4MDlDMDAwMDAwNDgwMjE2ODBBMDAwMDAwMDQ4RjYKKzoxMDJFRTAwMDA2MTY4MEE0MDAwMDAwMDIwMjE2ODBBQzAwMDAwMDQ4MTQKKzoxMDJFRjAwMDA2MTY4MEIwMDAwMDAwMDcwMjE2ODIzODAwMDA4MDAwMkQKKzoxMDJGMDAwMDAyMTY4MjM0MDAwMDI1RTQwMjE2ODA5NDAwMDA3RkZGNDAKKzoxMDJGMTAwMDAyMTY4MjIwMDAwMDAwMDcwMjE2ODIxQzAwMDAwMDA3MzMKKzoxMDJGMjAwMDAyMTY4MjI4MDAwMDAwMDAwMjE2ODIyNEZGRkZGRkZGMjUKKzoxMDJGMzAwMDAyMTY4MjMwMDAwMDAwMDAwMjE2ODIyQ0ZGRkZGRkZGMDUKKzoxMDJGNDAwMDAyMTY4MEVDMDAwMDAwRkYwMjE0MDAwMDAwMDAwMDAxRTcKKzoxMDJGNTAwMDAyMTQwMDBDMDAwMDAwMDEwMjE0MDA0MDAwMDAwMDAxRjcKKzoxMDJGNjAwMDAyMTQwMDQ0MDAwMDdGRkYwMjE0MDAwQzAwMDAwMDAwNjcKKzoxMDJGNzAwMDAyMTQwMDAwMDAwMDAwMDAwMjE0MDA2QzAwMDAwMDAwQjkKKzoxMDJGODAwMDAyMTQwMDA0MDAwMDAwMDEwMjE0MDAzMDAwMDAwMDAxREYKKzoxMDJGOTAwMDAyMTQwMDA0MDAwMDAwMDAwMjE0MDA1QzAwMDAwMDAwQTUKKzoxMDJGQTAwMDAyMTQwMDA4MDAwMDAwMDEwMjE0MDAzNDAwMDAwMDAxQjcKKzoxMDJGQjAwMDAyMTQwMDA4MDAwMDAwMDAwMjE0MDA2MDAwMDAwMDAwN0QKKzoxMDJGQzAwMDA2MDI4MDAwMDAwMDIwMDAwMjAyMDA1ODAwMDAwMDMyQ0IKKzoxMDJGRDAwMDAyMDIwMEEwMDMxNTAwMjAwMjAyMDBBNDAzMTUwMDIwMzUKKzoxMDJGRTAwMDAyMDIwMEE4MDEwMDAwMzAwMjAyMDBBQzA4MTAwMDAwM0MKKzoxMDJGRjAwMDAyMDIwMEIwMDAwMDAwMzMwMjAyMDBCNDAwMDAwMDMwMDIKKzoxMDMwMDAwMDAyMDIwMEI4MDAwMDAwMzEwMjAyMDBCQzAwMDAwMDAzMTAKKzoxMDMwMTAwMDAyMDIwMEMwMDAwMDAwMDYwMjAyMDBDNDAwMDAwMDAzMUIKKzoxMDMwMjAwMDAyMDIwMEM4MDAwMDAwMDMwMjAyMDBDQzAwMDAwMDAyRkYKKzoxMDMwMzAwMDAyMDIwMEQwMDAwMDAwMDAwMjAyMDBENDAwMDAwMDAyRTIKKzoxMDMwNDAwMDAyMDIwMERDMDAwMDAwMDAwMjAyMDBFMDAwMDAwMDA2QjYKKzoxMDMwNTAwMDAyMDIwMEU0MDAwMDAwMDQwMjAyMDBFODAwMDAwMDAyOTYKKzoxMDMwNjAwMDAyMDIwMEVDMDAwMDAwMDIwMjAyMDBGMDAwMDAwMDAxNzkKKzoxMDMwNzAwMDAyMDIwMEZDMDAwMDAwMDYwMjAyMDEyMDAwMDAwMDAwMjUKKzoxMDMwODAwMDAyMDIwMTM0MDAwMDAwMDIwMjAyMDFCMDAwMDAwMDAxNEYKKzoxMDMwOTAwMDAyMDIwMjBDMDAwMDAwMDEwMjAyMDIxNDAwMDAwMDAxMDIKKzoxMDMwQTAwMDAyMDIwMjE4MDAwMDAwMDIwMjAyMDQwNDAwMDAwMDAxRjMKKzoxMDMwQjAwMDAyMDIwNDBDMDAwMDAwNDAwMjAyMDQxMDAwMDAwMDQwNjQKKzoxMDMwQzAwMDAyMDIwNDFDMDAwMDAwMDQwMjAyMDQyMDAwMDAwMDIwOTAKKzoxMDMwRDAwMDAyMDIwNDI0MDAwMDAwMDIwMjAyMDQyODAwMDAwMDFGNzMKKzoxMDMwRTAwMDA2MDIwNTAwMDAwMDAwMTIwNDAyMDQ4MDAwMjAwNDM0REYKKzoxMDMwRjAwMDAyMDIwMDYwMDAwMDAwMEYwMjAyMDA2NDAwMDAwMDA3RUUKKzoxMDMxMDAwMDAyMDIwMDY4MDAwMDAwMDAwMjAyMDA2QzAwMDAwMDBFRDUKKzoxMDMxMTAwMDA2MDIwMDcwMDAwMDAwMDQwMjAyMDBGNDAwMDAwMDA0MzcKKzoxMDMxMjAwMDAyMDIwMDA0MDAwMDAwMDEwMjAyMDAwODAwMDAwMDAxODkKKzoxMDMxMzAwMDAyMDIwMDBDMDAwMDAwMDEwMjAyMDAxMDAwMDAwMDAxNjkKKzoxMDMxNDAwMDAyMDIwMDE0MDAwMDAwMDEwMjAyMDAxODAwMDAwMDAxNDkKKzoxMDMxNTAwMDAyMDIwMDFDMDAwMDAwMDEwMjAyMDAyMDAwMDAwMDAxMjkKKzoxMDMxNjAwMDAyMDIwMDI0MDAwMDAwMDEwMjAyMDAyODAwMDAwMDAxMDkKKzoxMDMxNzAwMDAyMDIwMDJDMDAwMDAwMDEwMjAyMDAzMDAwMDAwMDAxRTkKKzoxMDMxODAwMDAyMDIwMDM0MDAwMDAwMDEwMjAyMDAzODAwMDAwMDAxQzkKKzoxMDMxOTAwMDAyMDIwMDNDMDAwMDAwMDEwMjAyMDA0MDAwMDAwMDAxQTkKKzoxMDMxQTAwMDAyMDIwMDQ0MDAwMDAwMDEwMjAyMDA0ODAwMDAwMDAxODkKKzoxMDMxQjAwMDAyMDIwMDRDMDAwMDAwMDEwMjAyMDA1MDAwMDAwMDAxNjkKKzoxMDMxQzAwMDAyMDIwMTA4MDAwMDAwQzgwMjAyMDExODAwMDAwMDAyMEIKKzoxMDMxRDAwMDAyMDIwMUM0MDAwMDAwMDAwMjAyMDFDQzAwMDAwMDAwNTUKKzoxMDMxRTAwMDAyMDIwMUQ0MDAwMDAwMDIwMjAyMDFEQzAwMDAwMDAyMjEKKzoxMDMxRjAwMDAyMDIwMUU0MDAwMDAwRkYwMjAyMDFFQzAwMDAwMEZGRjcKKzoxMDMyMDAwMDAyMDIwMTBDMDAwMDAwQzgwMjAyMDExQzAwMDAwMDAyQzIKKzoxMDMyMTAwMDAyMDIwMUM4MDAwMDAwMDAwMjAyMDFEMDAwMDAwMDAwMEMKKzoxMDMyMjAwMDAyMDIwMUQ4MDAwMDAwMDIwMjAyMDFFMDAwMDAwMDAyRDgKKzoxMDMyMzAwMDAyMDIwMUU4MDAwMDAwRkYwMjAyMDFGMDAwMDAwMEZGQUUKKzoxMDMyNDAwMDA3MjgwNDAwMDA4RTAwMDAwODI4MDc2ODAwMTMwNDU0QjMKKzoxMDMyNTAwMDA3MkMwMDAwMzNDODAwMDAwNzJDODAwMDM4MDUwQ0YzNTEKKzoxMDMyNjAwMDA3MkQwMDAwMzhCNjFBRjUwNzJEODAwMDA3NzYyOTIzQjAKKzoxMDMyNzAwMDA4MkQ4Q0IwNEU2QTA0NTYwMTI4MDAwMDAwMDAwMDAwQTIKKzoxMDMyODAwMDAxMjgwMDA0MDAwMDAwMDAwMTI4MDAwODAwMDAwMDAwRTAKKzoxMDMyOTAwMDAxMjgwMDBDMDAwMDAwMDAwMTI4MDAxMDAwMDAwMDAwQzAKKzoxMDMyQTAwMDAxMjgwMDE0MDAwMDAwMDAwMjI4MDAyMDAwMDAwMDAxOTYKKzoxMDMyQjAwMDAyMjgwMDI0MDAwMDAwMDIwMjI4MDAyODAwMDAwMDAzNjkKKzoxMDMyQzAwMDAyMjgwMDJDMDAwMDAwMDAwMjI4MDAzMDAwMDAwMDA0NEEKKzoxMDMyRDAwMDAyMjgwMDM0MDAwMDAwMDEwMjI4MDAzODAwMDAwMDAwMkQKKzoxMDMyRTAwMDAyMjgwMDNDMDAwMDAwMDEwMjI4MDA0MDAwMDAwMDA0MDkKKzoxMDMyRjAwMDAyMjgwMDQ0MDAwMDAwMDAwMjI4MDA0ODAwMDAwMDAxRUQKKzoxMDMzMDAwMDAyMjgwMDRDMDAwMDAwMDMwMjI4MDA1MDAwMDAwMDAwQ0EKKzoxMDMzMTAwMDAyMjgwMDU0MDAwMDAwMDEwMjI4MDA1ODAwMDAwMDA0QTgKKzoxMDMzMjAwMDAyMjgwMDVDMDAwMDAwMDAwMjI4MDA2MDAwMDAwMDAxOEMKKzoxMDMzMzAwMDAyMjgwMDY0MDAwMDAwMDMwMjI4MDA2ODAwMDAwMDAwNkEKKzoxMDMzNDAwMDAyMjgwMDZDMDAwMDAwMDEwMjI4MDA3MDAwMDAwMDA0NDgKKzoxMDMzNTAwMDAyMjgwMDc0MDAwMDAwMDAwMjI4MDA3ODAwMDAwMDA0MjkKKzoxMDMzNjAwMDAyMjgwMDdDMDAwMDAwMDMwNjI4MDA4MDAwMDAwMDAyMDQKKzoxMDMzNzAwMDAyMjgwMEE0MDAwMDNGRkYwMjI4MDBBODAwMDAwM0ZGNkQKKzoxMDMzODAwMDAyMjgwMjI0MDAwMDAwMDAwMjI4MDIzNDAwMDAwMDAwOEQKKzoxMDMzOTAwMDAyMjgwMjRDMDAwMDAwMDAwMjI4MDJFNDAwMDBGRkZGQTcKKzoxMDMzQTAwMDA2MjgyMDAwMDAwMDA4MDAwMjJCOEJDMDAwMDAwMDAxNEUKKzoxMDMzQjAwMDAyMkI4MDAwMDAwMDAwMDAwMjJCODA0MDAwMDAwMDE4NUIKKzoxMDMzQzAwMDAyMkI4MDgwMDAwMDAwMEMwMjJCODBDMDAwMDAwMDY2RjEKKzoxMDMzRDAwMDBDMkI4MzAwMDAwN0ExMjAwQTJCODMwMDAwMDAwMTM4N0EKKzoxMDMzRTAwMDBCMkI4MzAwMDAwMDEzODgwQTJCODM0MDAwMDAwMDAwOTEKKzoxMDMzRjAwMDBDMkI4MzQwMDAwMDAxRjQwQjJCODM0MDAwMDAwMDA1RTAKKzoxMDM0MDAwMDAyMkI4MzgwMDAwN0ExMjAwMjJCODNDMDAwMDAwMUY0NUYKKzoxMDM0MTAwMDA2MkEzRDQ4MDAwMDAwMDQwNDJBM0Q1ODAwMDIwNDU4RDIKKzoxMDM0MjAwMDA2MkEzRDYwMDAwMDAwMDYwNjJBMzAwMDAwMDAwMDQ4MjEKKzoxMDM0MzAwMDA2MkEyMDA4MDAwMDAwQzgwNjJBMjAwMDAwMDAwMDAyMUEKKzoxMDM0NDAwMDA2MkEzMTI4MDAwMDAwOEUwNjJBMzM2ODAwMDAwMDAzOTcKKzoxMDM0NTAwMDA0MkEzMzc0MDAwMTA0NUEwNjJBM0E3ODAwMDAwMDAyNTQKKzoxMDM0NjAwMDA0MkEzQTgwMDAwMjA0NUIwNDJBM0E3MDAwMDIwNDVERDgKKzoxMDM0NzAwMDA0MkEzRTI4MDAwMjA0NUYwNDJBM0VCMDAwMDQwNDYxQ0UKKzoxMDM0ODAwMDA0MkEyNTAwMDAwMjA0NjUwNjJBMjUwODAwMDAwMTAwMjAKKzoxMDM0OTAwMDA2MkEyOTcwMDAwMDAwMDQwNDJBMjk2MDAwMDQwNDY3MzkKKzoxMDM0QTAwMDA0MkEyRjQ4MDAwMjA0NkIwNjJBMzM3ODAwMDAwMEQ4NTMKKzoxMDM0QjAwMDAyMkEzQTM4MDAwMDAwMDAwNjJBM0E4ODAwMDAwMDMyNEEKKzoxMDM0QzAwMDA0MkEzRDg4MDAxMDA0NkQwNjJBNTAyMDAwMDAwMDAyRTYKKzoxMDM0RDAwMDA2MkE1MDMwMDAwMDAwMDIwNjJBNTAwMDAwMDAwMDAyQjgKKzoxMDM0RTAwMDA2MkE1MDEwMDAwMDAwMDIwMjJBNTBCODAwMDAwMDAxMTUKKzoxMDM0RjAwMDA2MkE1MDQ4MDAwMDAwMEUwNDJBM0Q3ODAwMDIwNDdEOTAKKzoxMDM1MDAwMDA2MkEzQzE4MDAwMDAwMjYwMjJBNTA0MDAwMDAwMDAwNTUKKzoxMDM1MTAwMDA2MkEzNkQ4MDAwMDAwRDgwMjJBM0EzQzAwMDAwMDAwRjMKKzoxMDM1MjAwMDA2MkEzQjUwMDAwMDAwMzIwNDJBM0RDODAwMTAwNDdGRTgKKzoxMDM1MzAwMDA2MkE1MDI4MDAwMDAwMDIwNjJBNTAzODAwMDAwMDAyMjcKKzoxMDM1NDAwMDA2MkE1MDA4MDAwMDAwMDIwNjJBNTAxODAwMDAwMDAyNTcKKzoxMDM1NTAwMDAyMkE1MEJDMDAwMDAwMDEwNjJBNTA4MDAwMDAwMDBFMjQKKzoxMDM1NjAwMDA0MkEzRDgwMDAwMjA0OEYwNjJBM0NCMDAwMDAwMDI2OTkKKzoxMDM1NzAwMDAyMkE1MDQ0MDAwMDAwMDAwMjEwMTAwODAwMDAwMDAxNjAKKzoxMDM1ODAwMDAyMTAxMDEwMDAwMDAyNjQwMjEwMTAwMDAwMDNEMDAwQUUKKzoxMDM1OTAwMDAyMTAxMDA0MDAwMDAwM0QwOTEwMTgwMDAyMDAwNDkxMDAKKzoxMDM1QTAwMDA5MTAxMTAwMDAxMDA2OTEwNjEwMTE0MDAwMDAwMDA4REIKKzoxMDM1QjAwMDA5MTAxMTYwMDAwODA2QTEwNjEwMTE4MDAwMDAwMDAyMjkKKzoxMDM1QzAwMDA5MTAxMTg4MDAwNjA2QTkwNjEwMTFBMDAwMDAwMDE4QjUKKzoxMDM1RDAwMDAyMTAxMDEwMDAwMDAwMDAwNjEwMjQwMDAwMDAwMEUwOUYKKzoxMDM1RTAwMDAyMTAyMDFDMDAwMDAwMDAwMjEwMjAyMDAwMDAwMDAxM0EKKzoxMDM1RjAwMDAyMTAyMEMwMDAwMDAwMDEwMjEwMjAwNDAwMDAwMDAxQTEKKzoxMDM2MDAwMDAyMTAyMDA4MDAwMDAwMDEwOTEwM0MwMDAwMDUwNkFGNzAKKzoxMDM2MTAwMDA5MTAzQzIwMDAwNTA2QjQwOTEwMzgwMDAwMDUwNkI5NjEKKzoxMDM2MjAwMDAyMTA0MDI4MDAwMDAwMTAwMjEwNDA0NDAwMDAzRkZGM0MKKzoxMDM2MzAwMDAyMTA0MDU4MDAyODAwMDAwMjEwNDA4NDAwODQ5MjRBODIKKzoxMDM2NDAwMDA2MTA0QzAwMDAwMDAxMDAwMjEwNDA1ODAwMDAwMDAwNkQKKzoxMDM2NTAwMDA2MTA4MDY4MDAwMDAwMDQwMjEwODAwMDAwMDAxMDgwNDYKKzoxMDM2NjAwMDA2MTA4MDI4MDAwMDAwMDIwMjEwODAzODAwMDAwMDEwQzAKKzoxMDM2NzAwMDAyMTA4MDQwMDAwMEZGRkYwMjEwODA0NDAwMDBGRkZGQTYKKzoxMDM2ODAwMDAyMTA4MDUwMDAwMDAwMDAwMjEwODEwMDAwMDAwMDAwQzUKKzoxMDM2OTAwMDA2MTA4MTIwMDAwMDAwMDIwMjEwODAwODAwMDAwMkI1MjAKKzoxMDM2QTAwMDAyMTA4MDEwMDAwMDAwMDAwNjEwODIwMDAwMDAwMDRBOTYKKzoxMDM2QjAwMDAyMTA4MTA4MDAwMUZGRkYwNjEwODE0MDAwMDAwMDAyOTcKKzoxMDM2QzAwMDAyMTA4MDAwMDAwMDFBODAwNjEwOTAwMDAwMDAwMDI0MDQKKzoxMDM2RDAwMDA2MTA5MTIwMDAwMDAwNEEwNjEwOTM3MDAwMDAwMDRBNzYKKzoxMDM2RTAwMDA2MTA5NUMwMDAwMDAwNEEwMjEwODAwNDAwMDAxMDgwRkYKKzoxMDM2RjAwMDA2MTA4MDMwMDAwMDAwMDIwMjEwODAzQzAwMDAwMDEwMjQKKzoxMDM3MDAwMDAyMTA4MDQ4MDAwMEZGRkYwMjEwODA0QzAwMDBGRkZGMDUKKzoxMDM3MTAwMDAyMTA4MDU0MDAwMDAwMDAwMjEwODEwNDAwMDAwMDAwMkMKKzoxMDM3MjAwMDA2MTA4MTI4MDAwMDAwMDIwMjEwODAwQzAwMDAwMkI1ODMKKzoxMDM3MzAwMDAyMTA4MDE0MDAwMDAwMDAwNjEwODQwMDAwMDAwMDRBRkYKKzoxMDM3NDAwMDAyMTA4MTBDMDAwMUZGRkYwNjEwODE0ODAwMDAwMDAyRkEKKzoxMDM3NTAwMDAyMTA4MDA0MDAwMDFBODAwNjEwOTA5MDAwMDAwMDI0REYKKzoxMDM3NjAwMDA2MTA5MjQ4MDAwMDAwNEEwNjEwOTQ5ODAwMDAwMDRBOTMKKzoxMDM3NzAwMDA2MTA5NkU4MDAwMDAwNEEwMjEyMDQ5MDAwRTM4MzQwMUQKKzoxMDM3ODAwMDAyMTIwNTE0MDAwMDNDMTAwMjEyMDUyMDAwMDAwMDAyODUKKzoxMDM3OTAwMDAyMTIwNDk0RkZGRkZGRkYwMjEyMDQ5OEZGRkZGRkZGRDUKKzoxMDM3QTAwMDAyMTIwNDlDRkZGRkZGRkYwMjEyMDRBMEZGRkZGRkZGQjUKKzoxMDM3QjAwMDAyMTIwNEE0RkZGRkZGRkYwMjEyMDRBOEZGRkZGRkZGOTUKKzoxMDM3QzAwMDAyMTIwNEFDRkZGRkZGRkYwMjEyMDRCMEZGRkZGRkZGNzUKKzoxMDM3RDAwMDAyMTIwNEI4RkZGRkZGRkYwMjEyMDRCQ0ZGRkZGRkZGNEQKKzoxMDM3RTAwMDAyMTIwNEMwRkZGRkZGRkYwMjEyMDRDNEZGRkZGRkZGMkQKKzoxMDM3RjAwMDAyMTIwNEM4RkZGRkZGRkYwMjEyMDRDQ0ZGRkZGRkZGMEQKKzoxMDM4MDAwMDAyMTIwNEQwRkZGRkZGRkYwMjEyMDREQ0ZGRkZGRkZGRTQKKzoxMDM4MTAwMDAyMTIwNEUwRkZGRkZGRkYwMjEyMDRFNEZGRkZGRkZGQkMKKzoxMDM4MjAwMDAyMTIwNEU4RkZGRkZGRkYwMjEyMDRFQ0ZGRkZGRkZGOUMKKzoxMDM4MzAwMDAyMTIwNEYwRkZGRkZGRkYwMjEyMDRGNEZGRkZGRkZGN0MKKzoxMDM4NDAwMDAyMTIwNEY4RkZGRkZGRkYwMjEyMDRGQ0ZGRkZGRkZGNUMKKzoxMDM4NTAwMDAyMTIwNTAwRkZGRkZGRkYwMjEyMDUwNEZGRkZGRkZGM0EKKzoxMDM4NjAwMDAyMTIwNTA4RkZGRkZGRkYwMjEyMDUwQ0ZGRkZGRkZGMUEKKzoxMDM4NzAwMDAyMTIwNTEwRkZGRkZGRkYwMjEyMDRENEZGRkYzMzMwRDYKKzoxMDM4ODAwMDAyMTIwNEQ4RkZGRjMzNDAwMjEyMDRCNEYwMDAzMDAwRUIKKzoxMDM4OTAwMDAyMTIwMzkwMDAwMDAwMDgwMjEyMDM5QzAwMDAwMDA4QkUKKzoxMDM4QTAwMDA2MTIwM0EwMDAwMDAwMDIwMjEyMDNCQzAwMDAwMDA0ODQKKzoxMDM4QjAwMDAyMTIwM0M0MDAwMDAwMDQwMjEyMDNEMDAwMDAwMDAwNDIKKzoxMDM4QzAwMDAyMTIwM0RDMDAwMDAwMDAwMjEyMDM2QzAwMDAwMDAxODEKKzoxMDM4RDAwMDAyMTIwMzY4MDAwMDAwM0YwMjEyMDFCQzAwMDAwMDQwMTkKKzoxMDM4RTAwMDAyMTIwMUMwMDAwMDE4MDgwMjEyMDFDNDAwMDAwODAzRkYKKzoxMDM4RjAwMDAyMTIwMUM4MDAwMDA4MDMwMjEyMDFDQzAwMDAwMDQwQkYKKzoxMDM5MDAwMDAyMTIwMUQwMDAwMDAwMDMwMjEyMDFENDAwMDAwODAzREIKKzoxMDM5MTAwMDAyMTIwMUQ4MDAwMDA4MDMwMjEyMDFEQzAwMDAwODAzQjMKKzoxMDM5MjAwMDAyMTIwMUUwMDAwMTAwMDMwMjEyMDFFNDAwMDAwODAzOUEKKzoxMDM5MzAwMDAyMTIwMUU4MDAwMDA4MDMwMjEyMDFFQzAwMDAwMDAzN0IKKzoxMDM5NDAwMDAyMTIwMUYwMDAwMDAwMDMwMjEyMDFGNDAwMDAwMDAzNjMKKzoxMDM5NTAwMDAyMTIwMUY4MDAwMDAwMDMwMjEyMDFGQzAwMDAwMDAzNDMKKzoxMDM5NjAwMDAyMTIwMjAwMDAwMDAwMDMwMjEyMDIwNDAwMDAwMDAzMjEKKzoxMDM5NzAwMDAyMTIwMjA4MDAwMDAwMDMwMjEyMDIwQzAwMDAwMDAzMDEKKzoxMDM5ODAwMDAyMTIwMjEwMDAwMDAwMDMwMjEyMDIxNDAwMDAwMDAzRTEKKzoxMDM5OTAwMDAyMTIwMjE4MDAwMDAwMDMwMjEyMDIxQzAwMDAwMDAzQzEKKzoxMDM5QTAwMDAyMTIwMjIwMDAwMDAwMDMwMjEyMDIyNDAwMDAwMDAzQTEKKzoxMDM5QjAwMDAyMTIwMjI4MDAwMDI0MDMwMjEyMDIyQzAwMDAwMDJGMzEKKzoxMDM5QzAwMDAyMTIwMjMwMDAwMDAwMDkwMjEyMDIzNDAwMDAwMDE5NDUKKzoxMDM5RDAwMDAyMTIwMjM4MDAwMDAxODQwMjEyMDIzQzAwMDAwMTgzM0UKKzoxMDM5RTAwMDAyMTIwMjQwMDAwMDAzMDYwMjEyMDI0NDAwMDAwMDE5MDUKKzoxMDM5RjAwMDAyMTIwMjQ4MDAwMDAwMDYwMjEyMDI0QzAwMDAwMzA2RjgKKzoxMDNBMDAwMDAyMTIwMjUwMDAwMDAzMDYwMjEyMDI1NDAwMDAwMzA2RDQKKzoxMDNBMTAwMDAyMTIwMjU4MDAwMDBDODYwMjEyMDI1QzAwMDAwMzA2MkIKKzoxMDNBMjAwMDAyMTIwMjYwMDAwMDAzMDYwMjEyMDI2NDAwMDAwMDA2OTcKKzoxMDNBMzAwMDAyMTIwMjY4MDAwMDAwMDYwMjEyMDI2QzAwMDAwMDA2N0EKKzoxMDNBNDAwMDAyMTIwMjcwMDAwMDAwMDYwMjEyMDI3NDAwMDAwMDA2NUEKKzoxMDNBNTAwMDAyMTIwMjc4MDAwMDAwMDYwMjEyMDI3QzAwMDAwMDA2M0EKKzoxMDNBNjAwMDAyMTIwMjgwMDAwMDAwMDYwMjEyMDI4NDAwMDAwMDA2MUEKKzoxMDNBNzAwMDAyMTIwMjg4MDAwMDAwMDYwMjEyMDI4QzAwMDAwMDA2RkEKKzoxMDNBODAwMDAyMTIwMjkwMDAwMDAwMDYwMjEyMDI5NDAwMDAwMDA2REEKKzoxMDNBOTAwMDAyMTIwMjk4MDAwMDAwMDYwMjEyMDI5QzAwMDAwMDA2QkEKKzoxMDNBQTAwMDAyMTIwMkEwMDAwMDAzMDYwMjEyMDJBNDAwMDAwMDEzOEEKKzoxMDNBQjAwMDAyMTIwMkE4MDAwMDAwMDYwMjEyMDJCMDAwMDAxMDA0NjgKKzoxMDNBQzAwMDAyMTIwMkI0MDAwMDEwMDQwMjEyMDMyNDAwMTA2NDQwMjkKKzoxMDNBRDAwMDAyMTIwMzI4MDAxMDY0NDAwMjEyMDFCMDAwMDAwMDAxMkQKKzoxMDNBRTAwMDA2MDBBMDAwMDAwMDAwMTYwMjAwQTA2Q0JGNUMwMDAwRjEKKzoxMDNBRjAwMDAyMDBBMDcwRkZGNTFGRUYwMjAwQTA3NDAwMDBGRkZGOUUKKzoxMDNCMDAwMDAyMDBBMDc4RjAwMDAzRTAwMjAwQTA3QzAwMDAwMDAwQUEKKzoxMDNCMTAwMDAyMDBBMDgwMDAwMEEwMDAwNjAwQTA4NDAwMDAwMDA1QjQKKzoxMDNCMjAwMDAyMDBBMDk4MEZFMDAwMDAwNjAwQTA5QzAwMDAwMDE0MTYKKzoxMDNCMzAwMDAyMDBBMEVDNTU1NDAwMDAwMjAwQTBGMDU1NTU1NTU1NjgKKzoxMDNCNDAwMDAyMDBBMEY0MDAwMDU1NTUwMjAwQTBGOEYwMDAwMDAwQUIKKzoxMDNCNTAwMDAyMDBBMEZDNTU1NDAwMDAwMjAwQTEwMDU1NTU1NTU1MjcKKzoxMDNCNjAwMDAyMDBBMTA0MDAwMDU1NTUwMjAwQTEwOEYwMDAwMDAwNjkKKzoxMDNCNzAwMDA2MDBBMjJDMDAwMDAwMDQwMjAwQTA2MDAwMDAwMzA3NjEKKzoxMDNCODAwMDAyMDBBMTBDQkY1QzAwMDAwMjAwQTExMEZGRjUxRkVGQjYKKzoxMDNCOTAwMDAyMDBBMTE0MDAwMEZGRkYwMjAwQTExOEYwMDAwM0UwRTIKKzoxMDNCQTAwMDAyMDBBMTFDMDAwMDAwMDAwMjAwQTEyMDAwMDBBMDAwRjMKKzoxMDNCQjAwMDA2MDBBMTI0MDAwMDAwMDUwMjAwQTEzODBGRTAwMDAwNkIKKzoxMDNCQzAwMDA2MDBBMTNDMDAwMDAwMTQwMjAwQTE4QzU1NTQwMDAwMjYKKzoxMDNCRDAwMDAyMDBBMTkwNTU1NTU1NTUwMjAwQTE5NDAwMDA1NTU1N0QKKzoxMDNCRTAwMDAyMDBBMTk4RjAwMDAwMDAwMjAwQTE5QzU1NTQwMDAwQzIKKzoxMDNCRjAwMDAyMDBBMUEwNTU1NTU1NTUwMjAwQTFBNDAwMDA1NTU1M0QKKzoxMDNDMDAwMDAyMDBBMUE4RjAwMDAwMDAwNjAwQTIzQzAwMDAwMDA0OTEKKzoxMDNDMTAwMDAyMDBBMDY0MDAwMDAzMDcwMDAwMDAwMDAwMDAwMDAwOTQKKzoxMDNDMjAwMDAwMDAwMDJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjYKKzoxMDNDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODQKKzoxMDNDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQKKzoxMDNDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKKzoxMDNDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKKzoxMDNDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFMDA0RDAwMDAwMDAwQzkKKzoxMDNDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKKzoxMDNDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKKzoxMDNDQTAwMDAwMDAwMDAwMDA0RDAwOEIwMDAwMDAwMDAwMDAwMDAwM0MKKzoxMDNDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDNDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDNDRDAwMDAwOEIwMDkwMDA5MDAwOTQwMDk0MDA5ODAwMDAwMDAwNzkKKzoxMDNDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKKzoxMDNDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgwMkRFNEMKKzoxMDNEMDAwMDAyREUwMkU4MDJFODAyRjIwMDAwMDAwMDAwMDAwMDAwMEIKKzoxMDNEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKKzoxMDNEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTMKKzoxMDNEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODMKKzoxMDNENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMKKzoxMDNENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMKKzoxMDNENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTMKKzoxMDNENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMKKzoxMDNEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKKzoxMDNEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMKKzoxMDNEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKKzoxMDNEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKKzoxMDNEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDNERDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYyMDJGQTAwMDAwMDAwRjMKKzoxMDNERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKKzoxMDNERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKKzoxMDNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjIKKzoxMDNFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKKzoxMDNFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKKzoxMDNFMzAwMDAyRkEwMkZGMDJGRjAzMEEwMzBBMDMxNTAwMDAwMDAwNTIKKzoxMDNFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKKzoxMDNFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKKzoxMDNFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKKzoxMDNFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKKzoxMDNFODAwMDAwMDAwMDAwMDAwMDAwMDAwMzE1MDMxNjAwMDAwMDAwMDEKKzoxMDNFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKKzoxMDNFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKKzoxMDNFQjAwMDAwMDAwMDAwMDMxNjAzNTcwMDAwMDAwMDAwMDAwMDAwOEYKKzoxMDNFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKKzoxMDNFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDNFRTAwMDAzNTcwMzdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKKzoxMDNFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKKzoxMDNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzN0IwM0JCNzUKKzoxMDNGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKKzoxMDNGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKKzoxMDNGMzAwMDAwMDAwMDAwMDAwMDAwMDAwM0JCMDNGNzAwMDAwMDAwQzkKKzoxMDNGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKKzoxMDNGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKKzoxMDNGNjAwMDAwMDAwMDAwMDNGNzA0M0QwNDNEMDQ1MjA0NTIwNDY3QkUKKzoxMDNGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKKzoxMDNGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKKzoxMDNGOTAwMDA0NjcwNEVEMDRFRDA0RjIwNEYyMDRGNzAwMDAwMDAwRUQKKzoxMDNGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKKzoxMDNGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RjcwNEY4MEEKKzoxMDNGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjEKKzoxMDNGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKKzoxMDNGRTAwMDAwMDAwMDAwMDAwMDAwMDAwNEY4MDUwQTAwMDAwMDAwQzYKKzoxMDNGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDQwMTAwMDAwMDAwMDAwMDUwQTA1MUYwNTFGMDUyMjA1MjIwNTI1RDEKKzoxMDQwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKKzoxMDQwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKKzoxMDQwNDAwMDA1MjUwNTU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKKzoxMDQwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKKzoxMDQwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NTUwNURDMTUKKzoxMDQwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKKzoxMDQwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKKzoxMDQwOTAwMDAwMDAwMDAwMDAwMDAwMDAwNURDMDVFMzA1RTMwNUU3ODMKKzoxMDQwQTAwMDA1RTcwNUVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKKzoxMDQwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMDQwQzAwMDAwMDAwMDAwMDVFQjA2MkIwNjJCMDYzMzA2MzMwNjNCRUIKKzoxMDQwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKKzoxMDQwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKKzoxMDQwRjAwMDA2M0IwNjg4MDY4ODA2OTUwNjk1MDZBMjAwMDAwMDAwODUKKzoxMDQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDQxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QTIwNkFFNDMKKzoxMDQxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKKzoxMDQxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKKzoxMDQxNDAwMDAwMDAwMDAwMDAwMDAwMDAwNkFFMDZCNDAwMDAwMDAwMDEKKzoxMDQxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKKzoxMDQxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKKzoxMDQxNzAwMDAwMDAwMDAwMDZCNDA2QjcwMDAwMDAwMDAwMDAwMDAwQzgKKzoxMDQxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKKzoxMDQxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKKzoxMDQxQTAwMDA2QjcwNkJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKKzoxMDQxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKKzoxMDQxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QkQwNkJFNjgKKzoxMDQxRDAwMDA2QkUwNkQwMDZEMDA2RTIwMDAwMDAwMDAwMDAwMDAwODcKKzoxMDQxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKKzoxMDQxRjAwMDAwMDAwMDAwMDAwMDAwMDAwNkUyMDc0RjAwMDAwMDAwODEKKzoxMDQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUKKzoxMDQyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDQyMjAwMDAwMDAwMDAwMDc0RjA3NTAwNzUwMDc2MzA3NjMwNzc2MzkKKzoxMDQyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKKzoxMDQyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKKzoxMDQyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMDQyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKKzoxMDQyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMDQyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKKzoxMDQyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKKzoxMDQyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDQyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKKzoxMDQyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKKzoxMDQyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKKzoxMDQyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKKzoxMDQyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkUKKzoxMDQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKKzoxMDQzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKKzoxMDQzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDQzMzAwMDAwMDEwMDAwMDAwMjA0QzAwMDAzMDk4MDAwMDQwRTQwRDgKKzoxMDQzNDAwMDAwMDUxMzAwMDAwNjE3QzAwMDA3MUM4MDAwMDgyMTQwNkMKKzoxMDQzNTAwMDAwMDkyNjAwMDAwQTJBQzAwMDBCMkY4MDAwMEMzNDQwMDAKKzoxMDQzNjAwMDAwMEQzOTAwMDAwRTNEQzAwMDBGNDI4MDAwMTA0NzQwOTQKKzoxMDQzNzAwMDAwMTE0QzAwMDAxMjUwQzAwMDEzNTU4MDAwMTQ1QTQwMjgKKzoxMDQzODAwMDAwMTU1RjAwMDAxNjYzQzAwMDE3Njg4MDAwMTg2RDQwQkMKKzoxMDQzOTAwMDAwMTk3MjAwMDAxQTc2QzAwMDFCN0I4MDAwMUM4MDQwNTAKKzoxMDQzQTAwMDAwMUQ4NTAwMDAxRTg5QzAwMDFGOEU4MDAwMDA5MzQwMDQKKzoxMDQzQjAwMDAwMDAyMDAwMDAwMDQwMDAwMDAwNjAwMDAwMDA4MDAwQkQKKzoxMDQzQzAwMDAwMDBBMDAwMDAwMEMwMDAwMDAwRTAwMDAwMDEwMDAwQUMKKzoxMDQzRDAwMDAwMDEyMDAwMDAwMTQwMDAwMDAxNjAwMDAwMDE4MDAwOTkKKzoxMDQzRTAwMDAwMDFBMDAwMDAwMUMwMDAwMDAxRTAwMDAwMDIwMDAwODgKKzoxMDQzRjAwMDAwMDIyMDAwMDAwMjQwMDAwMDAyNjAwMDAwMDI4MDAwNzUKKzoxMDQ0MDAwMDAwMDJBMDAwMDAwMkMwMDAwMDAyRTAwMDAwMDMwMDAwNjMKKzoxMDQ0MTAwMDAwMDMyMDAwMDAwMzQwMDAwMDAzNjAwMDAwMDM4MDAwNTAKKzoxMDQ0MjAwMDAwMDNBMDAwMDAwM0MwMDAwMDAzRTAwMDAwMDQwMDAwM0YKKzoxMDQ0MzAwMDAwMDQyMDAwMDAwNDQwMDAwMDA0NjAwMDAwMDQ4MDAwMkMKKzoxMDQ0NDAwMDAwMDRBMDAwMDAwNEMwMDAwMDA0RTAwMDAwMDUwMDAwMUIKKzoxMDQ0NTAwMDAwMDUyMDAwMDAwNTQwMDAwMDA1NjAwMDAwMDU4MDAwMDgKKzoxMDQ0NjAwMDAwMDVBMDAwMDAwNUMwMDAwMDA1RTAwMDAwMDYwMDAwRjcKKzoxMDQ0NzAwMDAwMDYyMDAwMDAwNjQwMDAwMDA2NjAwMDAwMDY4MDAwRTQKKzoxMDQ0ODAwMDAwMDZBMDAwMDAwNkMwMDAwMDA2RTAwMDAwMDcwMDAwRDMKKzoxMDQ0OTAwMDAwMDcyMDAwMDAwNzQwMDAwMDA3NjAwMDAwMDc4MDAwQzAKKzoxMDQ0QTAwMDAwMDdBMDAwMDAwN0MwMDAwMDA3RTAwMDAwMDgwMDAwQUYKKzoxMDQ0QjAwMDAwMDgyMDAwMDAwODQwMDAwMDA4NjAwMDAwMDg4MDAwOUMKKzoxMDQ0QzAwMDAwMDhBMDAwMDAwOEMwMDAwMDA4RTAwMDAwMDkwMDAwOEIKKzoxMDQ0RDAwMDAwMDkyMDAwMDAwOTQwMDAwMDA5NjAwMDAwMDk4MDAwNzgKKzoxMDQ0RTAwMDAwMDlBMDAwMDAwOUMwMDAwMDA5RTAwMDAwMEEwMDAwNjcKKzoxMDQ0RjAwMDAwMEEyMDAwMDAwQTQwMDAwMDBBNjAwMDAwMEE4MDAwNTQKKzoxMDQ1MDAwMDAwMEFBMDAwMDAwQUMwMDAwMDBBRTAwMDAwMEIwMDAwNDIKKzoxMDQ1MTAwMDAwMEIyMDAwMDAwQjQwMDAwMDBCNjAwMDAwMEI4MDAwMkYKKzoxMDQ1MjAwMDAwMEJBMDAwMDAwQkMwMDAwMDBCRTAwMDAwMEMwMDAwMUUKKzoxMDQ1MzAwMDAwMEMyMDAwMDAwQzQwMDAwMDBDNjAwMDAwMEM4MDAwMEIKKzoxMDQ1NDAwMDAwMENBMDAwMDAwQ0MwMDAwMDBDRTAwMDAwMEQwMDAwRkEKKzoxMDQ1NTAwMDAwMEQyMDAwMDAwRDQwMDAwMDBENjAwMDAwMEQ4MDAwRTcKKzoxMDQ1NjAwMDAwMERBMDAwMDAwREMwMDAwMDBERTAwMDAwMEUwMDAwRDYKKzoxMDQ1NzAwMDAwMEUyMDAwMDAwRTQwMDAwMDBFNjAwMDAwMEU4MDAwQzMKKzoxMDQ1ODAwMDAwMEVBMDAwMDAwRUMwMDAwMDBFRTAwMDAwMEYwMDAwQjIKKzoxMDQ1OTAwMDAwMEYyMDAwMDAwRjQwMDAwMDBGNjAwMDAwMEY4MDAwOUYKKzoxMDQ1QTAwMDAwMEZBMDAwMDAwRkMwMDAwMDBGRTAwMDAwMTAwMDAwOEUKKzoxMDQ1QjAwMDAwMTAyMDAwMDAxMDQwMDAwMDEwNjAwMDAwMTA4MDAwN0IKKzoxMDQ1QzAwMDAwMTBBMDAwMDAxMEMwMDAwMDEwRTAwMDAwMTEwMDAwNkEKKzoxMDQ1RDAwMDAwMTEyMDAwMDAxMTQwMDAwMDExNjAwMDAwMTE4MDAwNTcKKzoxMDQ1RTAwMDAwMTFBMDAwMDAxMUMwMDAwMDExRTAwMDAwMTIwMDAwNDYKKzoxMDQ1RjAwMDAwMTIyMDAwMDAxMjQwMDAwMDEyNjAwMDAwMTI4MDAwMzMKKzoxMDQ2MDAwMDAwMTJBMDAwMDAxMkMwMDAwMDEyRTAwMDAwMTMwMDAwMjEKKzoxMDQ2MTAwMDAwMTMyMDAwMDAxMzQwMDAwMDEzNjAwMDAwMTM4MDAwMEUKKzoxMDQ2MjAwMDAwMTNBMDAwMDAxM0MwMDAwMDEzRTAwMDAwMTQwMDAwRkQKKzoxMDQ2MzAwMDAwMTQyMDAwMDAxNDQwMDAwMDE0NjAwMDAwMTQ4MDAwRUEKKzoxMDQ2NDAwMDAwMTRBMDAwMDAxNEMwMDAwMDE0RTAwMDAwMTUwMDAwRDkKKzoxMDQ2NTAwMDAwMTUyMDAwMDAxNTQwMDAwMDE1NjAwMDAwMTU4MDAwQzYKKzoxMDQ2NjAwMDAwMTVBMDAwMDAxNUMwMDAwMDE1RTAwMDAwMTYwMDAwQjUKKzoxMDQ2NzAwMDAwMTYyMDAwMDAxNjQwMDAwMDE2NjAwMDAwMTY4MDAwQTIKKzoxMDQ2ODAwMDAwMTZBMDAwMDAxNkMwMDAwMDE2RTAwMDAwMTcwMDAwOTEKKzoxMDQ2OTAwMDAwMTcyMDAwMDAxNzQwMDAwMDE3NjAwMDAwMTc4MDAwN0UKKzoxMDQ2QTAwMDAwMTdBMDAwMDAxN0MwMDAwMDE3RTAwMDAwMTgwMDAwNkQKKzoxMDQ2QjAwMDAwMTgyMDAwMDAxODQwMDAwMDE4NjAwMDAwMTg4MDAwNUEKKzoxMDQ2QzAwMDAwMThBMDAwMDAxOEMwMDAwMDE4RTAwMDAwMTkwMDAwNDkKKzoxMDQ2RDAwMDAwMTkyMDAwMDAxOTQwMDAwMDE5NjAwMDAwMTk4MDAwMzYKKzoxMDQ2RTAwMDAwMTlBMDAwMDAxOUMwMDAwMDE5RTAwMDAwMUEwMDAwMjUKKzoxMDQ2RjAwMDAwMUEyMDAwMDAxQTQwMDAwMDFBNjAwMDAwMUE4MDAwMTIKKzoxMDQ3MDAwMDAwMUFBMDAwMDAxQUMwMDAwMDFBRTAwMDAwMUIwMDAwMDAKKzoxMDQ3MTAwMDAwMUIyMDAwMDAxQjQwMDAwMDFCNjAwMDAwMUI4MDAwRUQKKzoxMDQ3MjAwMDAwMUJBMDAwMDAxQkMwMDAwMDFCRTAwMDAwMUMwMDAwREMKKzoxMDQ3MzAwMDAwMUMyMDAwMDAxQzQwMDAwMDFDNjAwMDAwMUM4MDAwQzkKKzoxMDQ3NDAwMDAwMUNBMDAwMDAxQ0MwMDAwMDFDRTAwMDAwMUQwMDAwQjgKKzoxMDQ3NTAwMDAwMUQyMDAwMDAxRDQwMDAwMDFENjAwMDAwMUQ4MDAwQTUKKzoxMDQ3NjAwMDAwMURBMDAwMDAxREMwMDAwMDFERTAwMDAwMUUwMDAwOTQKKzoxMDQ3NzAwMDAwMUUyMDAwMDAxRTQwMDAwMDFFNjAwMDAwMUU4MDAwODEKKzoxMDQ3ODAwMDAwMUVBMDAwMDAxRUMwMDAwMDFFRTAwMDAwMUYwMDAwNzAKKzoxMDQ3OTAwMDAwMUYyMDAwMDAxRjQwMDAwMDFGNjAwMDAwMUY4MDAwNUQKKzoxMDQ3QTAwMDAwMUZBMDAwMDAxRkMwMDAwMDFGRTAwMDAwMjAwMDAwNEMKKzoxMDQ3QjAwMDAwMjAyMDAwMDAyMDQwMDAwMDIwNjAwMDAwMjA4MDAwMzkKKzoxMDQ3QzAwMDAwMjBBMDAwMDAyMEMwMDAwMDIwRTAwMDAwMjEwMDAwMjgKKzoxMDQ3RDAwMDAwMjEyMDAwMDAyMTQwMDAwMDIxNjAwMDAwMjE4MDAwMTUKKzoxMDQ3RTAwMDAwMjFBMDAwMDAyMUMwMDAwMDIxRTAwMDAwMjIwMDAwMDQKKzoxMDQ3RjAwMDAwMjIyMDAwMDAyMjQwMDAwMDIyNjAwMDAwMjI4MDAwRjEKKzoxMDQ4MDAwMDAwMjJBMDAwMDAyMkMwMDAwMDIyRTAwMDAwMjMwMDAwREYKKzoxMDQ4MTAwMDAwMjMyMDAwMDAyMzQwMDAwMDIzNjAwMDAwMjM4MDAwQ0MKKzoxMDQ4MjAwMDAwMjNBMDAwMDAyM0MwMDAwMDIzRTAwMDAwMjQwMDAwQkIKKzoxMDQ4MzAwMDAwMjQyMDAwMDAyNDQwMDAwMDI0NjAwMDAwMjQ4MDAwQTgKKzoxMDQ4NDAwMDAwMjRBMDAwMDAyNEMwMDAwMDI0RTAwMDAwMjUwMDAwOTcKKzoxMDQ4NTAwMDAwMjUyMDAwMDAyNTQwMDAwMDI1NjAwMDAwMjU4MDAwODQKKzoxMDQ4NjAwMDAwMjVBMDAwMDAyNUMwMDAwMDI1RTAwMDAwMjYwMDAwNzMKKzoxMDQ4NzAwMDAwMjYyMDAwMDAyNjQwMDAwMDI2NjAwMDAwMjY4MDAwNjAKKzoxMDQ4ODAwMDAwMjZBMDAwMDAyNkMwMDAwMDI2RTAwMDAwMjcwMDAwNEYKKzoxMDQ4OTAwMDAwMjcyMDAwMDAyNzQwMDAwMDI3NjAwMDAwMjc4MDAwM0MKKzoxMDQ4QTAwMDAwMjdBMDAwMDAyN0MwMDAwMDI3RTAwMDAwMjgwMDAwMkIKKzoxMDQ4QjAwMDAwMjgyMDAwMDAyODQwMDAwMDI4NjAwMDAwMjg4MDAwMTgKKzoxMDQ4QzAwMDAwMjhBMDAwMDAyOEMwMDAwMDI4RTAwMDAwMjkwMDAwMDcKKzoxMDQ4RDAwMDAwMjkyMDAwMDAyOTQwMDAwMDI5NjAwMDAwMjk4MDAwRjQKKzoxMDQ4RTAwMDAwMjlBMDAwMDAyOUMwMDAwMDI5RTAwMDAwMkEwMDAwRTMKKzoxMDQ4RjAwMDAwMkEyMDAwMDAyQTQwMDAwMDJBNjAwMDAwMkE4MDAwRDAKKzoxMDQ5MDAwMDAwMkFBMDAwMDAyQUMwMDAwMDJBRTAwMDAwMkIwMDAwQkUKKzoxMDQ5MTAwMDAwMkIyMDAwMDAyQjQwMDAwMDJCNjAwMDAwMkI4MDAwQUIKKzoxMDQ5MjAwMDAwMkJBMDAwMDAyQkMwMDAwMDJCRTAwMDAwMkMwMDAwOUEKKzoxMDQ5MzAwMDAwMkMyMDAwMDAyQzQwMDAwMDJDNjAwMDAwMkM4MDAwODcKKzoxMDQ5NDAwMDAwMkNBMDAwMDAyQ0MwMDAwMDJDRTAwMDAwMkQwMDAwNzYKKzoxMDQ5NTAwMDAwMkQyMDAwMDAyRDQwMDAwMDJENjAwMDAwMkQ4MDAwNjMKKzoxMDQ5NjAwMDAwMkRBMDAwMDAyREMwMDAwMDJERTAwMDAwMkUwMDAwNTIKKzoxMDQ5NzAwMDAwMkUyMDAwMDAyRTQwMDAwMDJFNjAwMDAwMkU4MDAwM0YKKzoxMDQ5ODAwMDAwMkVBMDAwMDAyRUMwMDAwMDJFRTAwMDAwMkYwMDAwMkUKKzoxMDQ5OTAwMDAwMkYyMDAwMDAyRjQwMDAwMDJGNjAwMDAwMkY4MDAwMUIKKzoxMDQ5QTAwMDAwMkZBMDAwMDAyRkMwMDAwMDJGRTAwMDAwMzAwMDAwMEEKKzoxMDQ5QjAwMDAwMzAyMDAwMDAzMDQwMDAwMDMwNjAwMDAwMzA4MDAwRjcKKzoxMDQ5QzAwMDAwMzBBMDAwMDAzMEMwMDAwMDMwRTAwMDAwMzEwMDAwRTYKKzoxMDQ5RDAwMDAwMzEyMDAwMDAzMTQwMDAwMDMxNjAwMDAwMzE4MDAwRDMKKzoxMDQ5RTAwMDAwMzFBMDAwMDAzMUMwMDAwMDMxRTAwMDAwMzIwMDAwQzIKKzoxMDQ5RjAwMDAwMzIyMDAwMDAzMjQwMDAwMDMyNjAwMDAwMzI4MDAwQUYKKzoxMDRBMDAwMDAwMzJBMDAwMDAzMkMwMDAwMDMyRTAwMDAwMzMwMDAwOUQKKzoxMDRBMTAwMDAwMzMyMDAwMDAzMzQwMDAwMDMzNjAwMDAwMzM4MDAwOEEKKzoxMDRBMjAwMDAwMzNBMDAwMDAzM0MwMDAwMDMzRTAwMDAwMzQwMDAwNzkKKzoxMDRBMzAwMDAwMzQyMDAwMDAzNDQwMDAwMDM0NjAwMDAwMzQ4MDAwNjYKKzoxMDRBNDAwMDAwMzRBMDAwMDAzNEMwMDAwMDM0RTAwMDAwMzUwMDAwNTUKKzoxMDRBNTAwMDAwMzUyMDAwMDAzNTQwMDAwMDM1NjAwMDAwMzU4MDAwNDIKKzoxMDRBNjAwMDAwMzVBMDAwMDAzNUMwMDAwMDM1RTAwMDAwMzYwMDAwMzEKKzoxMDRBNzAwMDAwMzYyMDAwMDAzNjQwMDAwMDM2NjAwMDAwMzY4MDAwMUUKKzoxMDRBODAwMDAwMzZBMDAwMDAzNkMwMDAwMDM2RTAwMDAwMzcwMDAwMEQKKzoxMDRBOTAwMDAwMzcyMDAwMDAzNzQwMDAwMDM3NjAwMDAwMzc4MDAwRkEKKzoxMDRBQTAwMDAwMzdBMDAwMDAzN0MwMDAwMDM3RTAwMDAwMzgwMDAwRTkKKzoxMDRBQjAwMDAwMzgyMDAwMDAzODQwMDAwMDM4NjAwMDAwMzg4MDAwRDYKKzoxMDRBQzAwMDAwMzhBMDAwMDAzOEMwMDAwMDM4RTAwMDAwMzkwMDAwQzUKKzoxMDRBRDAwMDAwMzkyMDAwMDAzOTQwMDAwMDM5NjAwMDAwMzk4MDAwQjIKKzoxMDRBRTAwMDAwMzlBMDAwMDAzOUMwMDAwMDM5RTAwMDAwM0EwMDAwQTEKKzoxMDRBRjAwMDAwM0EyMDAwMDAzQTQwMDAwMDNBNjAwMDAwM0E4MDAwOEUKKzoxMDRCMDAwMDAwM0FBMDAwMDAzQUMwMDAwMDNBRTAwMDAwM0IwMDAwN0MKKzoxMDRCMTAwMDAwM0IyMDAwMDAzQjQwMDAwMDNCNjAwMDAwM0I4MDAwNjkKKzoxMDRCMjAwMDAwM0JBMDAwMDAzQkMwMDAwMDNCRTAwMDAwM0MwMDAwNTgKKzoxMDRCMzAwMDAwM0MyMDAwMDAzQzQwMDAwMDNDNjAwMDAwM0M4MDAwNDUKKzoxMDRCNDAwMDAwM0NBMDAwMDAzQ0MwMDAwMDNDRTAwMDAwM0QwMDAwMzQKKzoxMDRCNTAwMDAwM0QyMDAwMDAzRDQwMDAwMDNENjAwMDAwM0Q4MDAwMjEKKzoxMDRCNjAwMDAwM0RBMDAwMDAzREMwMDAwMDNERTAwMDAwM0UwMDAwMTAKKzoxMDRCNzAwMDAwM0UyMDAwMDAzRTQwMDAwMDNFNjAwMDAwM0U4MDAwRkQKKzoxMDRCODAwMDAwM0VBMDAwMDAzRUMwMDAwMDNFRTAwMDAwM0YwMDAwRUMKKzoxMDRCOTAwMDAwM0YyMDAwMDAzRjQwMDAwMDNGNjAwMDAwM0Y4MDAwRDkKKzoxMDRCQTAwMDAwM0ZBMDAwMDAzRkMwMDAwMDNGRTAwMDAwM0ZFMDAxRTgKKzoxMDRCQjAwMDAwMDAwMDAwMDAwMDAxRkYwMDAwMDIwMDAwMDA3RkY4N0MKKzoxMDRCQzAwMDAwMDA3RkY4MDAwMDAxNkEwMDAwMTUwMDAwMDAwMDAxRUQKKzoxMDRCRDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRDcKKzoxMDRCRTAwMDAwMDAwMDAwMTQwQUZGMDAwMDAwMDAwMTAwMDAwMDAwQTcKKzoxMDRCRjAwMDAwMjAxMDAxMDAwMDAwMDAwMTAwODYwMDAwMDAwMTAwRkMKKzoxMDRDMDAwMDAwMDA4NjAyMDAwMDg2MDQwMDAwODYwNjAwMDA4NjA4NzgKKzoxMDRDMTAwMDAwMDA4NjBBMDAwMDg2MEMwMDAwODYwRTAwMDA4NjEwNDgKKzoxMDRDMjAwMDAwMDA4NjEyMDAwMDg2MTQwMDAwODYxNjAwMDA4NjE4MTgKKzoxMDRDMzAwMDAwMDA4NjFBMDAwMDg2MUMwMDAwODYxRTAwMDA4NjIwRTgKKzoxMDRDNDAwMDAwMDA4NjIyMDAwMDg2MjQwMDAwODYyNjAwMDA4NjI4QjgKKzoxMDRDNTAwMDAwMDA4NjJBMDAwMDg2MkMwMDAwODYyRTAwMDA4NjMwODgKKzoxMDRDNjAwMDAwMDA4NjMyMDAwMDg2MzQwMDAwODYzNjAwMDA4NjM4NTgKKzoxMDRDNzAwMDAwMDA4NjNBMDAwMDg2M0MwMDAwODYzRTAwMDA4NjQwMjgKKzoxMDRDODAwMDAwMDA4NjQyMDAwMDg2NDQwMDAwODY0NjAwMDA4NjQ4RjgKKzoxMDRDOTAwMDAwMDA4NjRBMDAwMDg2NEMwMDAwODY0RTAwMDA4NjUwQzgKKzoxMDRDQTAwMDAwMDA4NjUyMDAwMDg2NTQwMDAwODY1NjAwMDA4NjU4OTgKKzoxMDRDQjAwMDAwMDA4NjVBMDAwMDg2NUMwMDAwODY1RTAwMDA4NjYwNjgKKzoxMDRDQzAwMDAwMDA4NjYyMDAwMDg2NjQwMDAwODY2NjAwMDA4NjY4MzgKKzoxMDRDRDAwMDAwMDA4NjZBMDAwMDg2NkMwMDAwODY2RTAwMDA4NjcwMDgKKzoxMDRDRTAwMDAwMDA4NjcyMDAwMDg2NzQwMDAwODY3NjAwMDA4Njc4RDgKKzoxMDRDRjAwMDAwMDA4NjdBMDAwMDg2N0MwMDAwODY3RTAwMDA4NjgwQTgKKzoxMDREMDAwMDAwMDA4NjgyMDAwMDg2ODQwMDAwODY4NjAwMDA4Njg4NzcKKzoxMDREMTAwMDAwMDA4NjhBMDAwMDg2OEMwMDAwODY4RTAwMDA4NjkwNDcKKzoxMDREMjAwMDAwMDA4NjkyMDAwMDg2OTQwMDAwODY5NjAwMDA4Njk4MTcKKzoxMDREMzAwMDAwMDA4NjlBMDAwMDg2OUMwMDAwODY5RTAwMDA4NkEwRTcKKzoxMDRENDAwMDAwMDA4NkEyMDAwMDg2QTQwMDAwODZBNjAwMDA4NkE4QjcKKzoxMDRENTAwMDAwMDA4NkFBMDAwMDg2QUMwMDAwODZBRTAwMDA4NkIwODcKKzoxMDRENjAwMDAwMDA4NkIyMDAwMDg2QjQwMDAwODZCNjAwMDA4NkI4NTcKKzoxMDRENzAwMDAwMDA4NkJBMDAwMDg2QkMwMDAwODZCRTAwMDA4NkMwMjcKKzoxMDREODAwMDAwMDA4NkMyMDAwMDg2QzQwMDAwODZDNjAwMDA4NkM4RjcKKzoxMDREOTAwMDAwMDA4NkNBMDAwMDg2Q0MwMDAwODZDRTAwMDA4NkQwQzcKKzoxMDREQTAwMDAwMDA4NkQyMDAwMDg2RDQwMDAwODZENjAwMDA4NkQ4OTcKKzoxMDREQjAwMDAwMDA4NkRBMDAwMDg2REMwMDAwODZERTAwMDA4NkUwNjcKKzoxMDREQzAwMDAwMDA4NkUyMDAwMDg2RTQwMDAwODZFNjAwMDA4NkU4MzcKKzoxMDRERDAwMDAwMDA4NkVBMDAwMDg2RUMwMDAwODZFRTAwMDA4NkYwMDcKKzoxMDRERTAwMDAwMDA4NkYyMDAwMDg2RjQwMDAwODZGNjAwMDA4NkY4RDcKKzoxMDRERjAwMDAwMDA4NkZBMDAwMDg2RkMwMDAwODZGRTAwMDA4NzAwQTYKKzoxMDRFMDAwMDAwMDA4NzAyMDAwMDg3MDQwMDAwODcwNjAwMDA4NzA4NzIKKzoxMDRFMTAwMDAwMDA4NzBBMDAwMDg3MEMwMDAwODcwRTAwMDA4NzEwNDIKKzoxMDRFMjAwMDAwMDA4NzEyMDAwMDg3MTQwMDAwODcxNjAwMDA4NzE4MTIKKzoxMDRFMzAwMDAwMDA4NzFBMDAwMDg3MUMwMDAwODcxRTAwMDA4NzIwRTIKKzoxMDRFNDAwMDAwMDA4NzIyMDAwMDg3MjQwMDAwODcyNjAwMDA4NzI4QjIKKzoxMDRFNTAwMDAwMDA4NzJBMDAwMDg3MkMwMDAwODcyRTAwMDA4NzMwODIKKzoxMDRFNjAwMDAwMDA4NzMyMDAwMDg3MzQwMDAwODczNjAwMDA4NzM4NTIKKzoxMDRFNzAwMDAwMDA4NzNBMDAwMDg3M0MwMDAwODczRTAwMDA4NzQwMjIKKzoxMDRFODAwMDAwMDA4NzQyMDAwMDg3NDQwMDAwODc0NjAwMDA4NzQ4RjIKKzoxMDRFOTAwMDAwMDA4NzRBMDAwMDg3NEMwMDAwODc0RTAwMDA4NzUwQzIKKzoxMDRFQTAwMDAwMDA4NzUyMDAwMDg3NTQwMDAwODc1NjAwMDA4NzU4OTIKKzoxMDRFQjAwMDAwMDA4NzVBMDAwMDg3NUMwMDAwODc1RTAwMDA4NzYwNjIKKzoxMDRFQzAwMDAwMDA4NzYyMDAwMDg3NjQwMDAwODc2NjAwMDA4NzY4MzIKKzoxMDRFRDAwMDAwMDA4NzZBMDAwMDg3NkMwMDAwODc2RTAwMDA4NzcwMDIKKzoxMDRFRTAwMDAwMDA4NzcyMDAwMDg3NzQwMDAwODc3NjAwMDA4Nzc4RDIKKzoxMDRFRjAwMDAwMDA4NzdBMDAwMDg3N0MwMDAwODc3RTAwMDA4NzgwQTIKKzoxMDRGMDAwMDAwMDA4NzgyMDAwMDg3ODQwMDAwODc4NjAwMDA4Nzg4NzEKKzoxMDRGMTAwMDAwMDA4NzhBMDAwMDg3OEMwMDAwODc4RTAwMDA4NzkwNDEKKzoxMDRGMjAwMDAwMDA4NzkyMDAwMDg3OTQwMDAwODc5NjAwMDA4Nzk4MTEKKzoxMDRGMzAwMDAwMDA4NzlBMDAwMDg3OUMwMDAwODc5RTAwMDA4N0EwRTEKKzoxMDRGNDAwMDAwMDA4N0EyMDAwMDg3QTQwMDAwODdBNjAwMDA4N0E4QjEKKzoxMDRGNTAwMDAwMDA4N0FBMDAwMDg3QUMwMDAwODdBRTAwMDA4N0IwODEKKzoxMDRGNjAwMDAwMDA4N0IyMDAwMDg3QjQwMDAwODdCNjAwMDA4N0I4NTEKKzoxMDRGNzAwMDAwMDA4N0JBMDAwMDg3QkMwMDAwODdCRTAwMDA4N0MwMjEKKzoxMDRGODAwMDAwMDA4N0MyMDAwMDg3QzQwMDAwODdDNjAwMDA4N0M4RjEKKzoxMDRGOTAwMDAwMDA4N0NBMDAwMDg3Q0MwMDAwODdDRTAwMDA4N0QwQzEKKzoxMDRGQTAwMDAwMDA4N0QyMDAwMDg3RDQwMDAwODdENjAwMDA4N0Q4OTEKKzoxMDRGQjAwMDAwMDA4N0RBMDAwMDg3REMwMDAwODdERTAwMDA4N0UwNjEKKzoxMDRGQzAwMDAwMDA4N0UyMDAwMDg3RTQwMDAwODdFNjAwMDA4N0U4MzEKKzoxMDRGRDAwMDAwMDA4N0VBMDAwMDg3RUMwMDAwODdFRTAwMDA4N0YwMDEKKzoxMDRGRTAwMDAwMDA4N0YyMDAwMDg3RjQwMDAwODdGNjAwMDA4N0Y4RDEKKzoxMDRGRjAwMDAwMDA4N0ZBMDAwMDg3RkMwMDAwODdGRUZGRkZGRkZGMkMKKzoxMDUwMDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQjAKKzoxMDUwMTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAzOTkKKzoxMDUwMjAwMDAwQkVCQzIwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAzREUKKzoxMDUwMzAwMDAwQkVCQzIwMDAwMDAwMDAwMDAwMDAwNTAwMDAyMDAwQjEKKzoxMDUwNDAwMDAwMDA0MEMwMDAwMDYxODAwMDAwODI0MDAwMDBBMzAwMUEKKzoxMDUwNTAwMDAwMDBDM0MwMDAwMEU0ODAwMDAxMDU0MDAwMDEyNjAwRkMKKzoxMDUwNjAwMDAwMDE0NkMwMDAwMTY3ODAwMDAxODg0MDAwMDFBOTAwREUKKzoxMDUwNzAwMDAwMDFDOUMwMDAwMUVBODAwMDAyMEI0MDAwMDIyQzAwQzAKKzoxMDUwODAwMDAwMDI0Q0MwMDAwMjZEODAwMDAyOEU0MDAwMDJBRjAwQTIKKzoxMDUwOTAwMDAwMDJDRkMwMDAwMkYwODAwMDAwMTE0MDAwMDA4MDAwM0MKKzoxMDUwQTAwMDAwMDEwMzgwMDAwMTg3MDAwMDAyMEE4MDAwMDI4RTAwRDgKKzoxMDUwQjAwMDAwMDMxMTgwMDAwMzk1MDAwMDA0MTg4MDAwMDQ5QzAwODgKKzoxMDUwQzAwMDAwMDUxRjgwMDAwNUEzMDAwMDA2MjY4MDAwMDZBQTAwMzgKKzoxMDUwRDAwMDAwMDcyRDgwMDAwN0IxMDAwMDA4MzQ4MDAwMDhCODAwRTgKKzoxMDUwRTAwMDAwMDkzQjgwMDAwOUJGMDAwMDBBNDI4MDAwMEFDNjAwOTgKKzoxMDUwRjAwMDAwMEI0OTgwMDAwQkNEMDAwMDBDNTA4MDAwMENENDAwNDgKKzoxMDUxMDAwMDAwMEQ1NzgwMDAwMDVCMDAwMDAwN0ZGODAwMDA3RkY4NzIKKzoxMDUxMTAwMDAwMDAwMTY2MDAwMDE1MDAwMDAwRkYwMDAwMDAwMDAwMTQKKzoxMDUxMjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwMTkwMDAwMDAwMDAwNjcKKzoxMDUxMzAwMDAwMDAwMDAwRkZGRkZGRkYwMDAwN0ZGODAwMDA3RkY4ODUKKzoxMDUxNDAwMDAwMDAwMzYxMDAwMDE1MDAwMDAwRkYwMDBGRkZGRkZGREIKKzoxMDUxNTAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwNDYKKzoxMDUxNjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMjkKKzoxMDUxNzAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMTkKKzoxMDUxODAwMDAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMTYKKzoxMDUxOTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGRjkKKzoxMDUxQTAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwRjYKKzoxMDUxQjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRDkKKzoxMDUxQzAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGQzkKKzoxMDUxRDAwMDAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQzYKKzoxMDUxRTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGQTkKKzoxMDUxRjAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwQTYKKzoxMDUyMDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGODgKKzoxMDUyMTAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGNzgKKzoxMDUyMjAwMDAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNzUKKzoxMDUyMzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGNTgKKzoxMDUyNDAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwNTUKKzoxMDUyNTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMzgKKzoxMDUyNjAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMjgKKzoxMDUyNzAwMDAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMjUKKzoxMDUyODAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDgKKzoxMDUyOTAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMDUKKzoxMDUyQTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRTgKKzoxMDUyQjAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGRDgKKzoxMDUyQzAwMDAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRDUKKzoxMDUyRDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGQjgKKzoxMDUyRTAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwQjUKKzoxMDUyRjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGOTgKKzoxMDUzMDAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGODcKKzoxMDUzMTAwMDAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwODQKKzoxMDUzMjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGNjcKKzoxMDUzMzAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwNjQKKzoxMDUzNDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNDcKKzoxMDUzNTAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMzcKKzoxMDUzNjAwMDAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMzQKKzoxMDUzNzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMTcKKzoxMDUzODAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMTQKKzoxMDUzOTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRjcKKzoxMDUzQTAwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGRTcKKzoxMDUzQjAwMDAwMDAwMEZGMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRTQKKzoxMDUzQzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwMDBGRjAwMDAwMEZGRDQKKzoxMDUzRDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQ0YKKzoxMDUzRTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQ0QKKzoxMDUzRjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQkQKKzoxMDU0MDAwMDAwMDAxMDAwMDAwMDIwODAwMDAwMzEwMDAwMDA0MTgwRkEKKzoxMDU0MTAwMDAwMDA1MjAwMDAwMDYyODAwMDAwNzMwMDAwMDA4MzgwRTIKKzoxMDU0MjAwMDAwMDA5NDAwMDAwMEE0ODAwMDAwQjUwMDAwMDBDNTgwQ0EKKzoxMDU0MzAwMDAwMDBENjAwMDAwMEU2ODAwMDAwRjcwMDAwMDEwNzgwQjEKKzoxMDU0NDAwMDAwMDExODAwMDAwMTI4ODAwMDAxMzkwMDAwMDE0OTgwOTYKKzoxMDU0NTAwMDAwMDE1QTAwMDAwMTZBODAwMDAxN0IwMDAwMDE4QjgwN0UKKzoxMDU0NjAwMDAwMDE5QzAwMDAwMUFDODAwMDAxQkQwMDAwMDFDRDgwNjYKKzoxMDU0NzAwMDAwMDFERTAwMDAwMUVFODAwMDAwMEYwMDAwMDAwMDAwQ0YKKzoxMDU0ODAwMDAwMDA3RkY4MDAwMDdGRjgwMDAwMDIxRDAwMDAxNTAwRkEKKzoxMDU0OTAwMDEwMDAwMDAwMDAwMDI4QUQwMDAxMDAwMUZGRkZGRkZGMjkKKzoxMDU0QTAwMEZGRkZGRkZGMDAwOTAyMDZDQ0NDQ0NDMTcwNTgxMDNDQjYKKzoxMDU0QjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRUUKKzoxMDU0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUNDQ0MwMjAxNDAKKzoxMDU0RDAwMENDQ0NDQ0NDQ0NDQzAyMDFDQ0NDQ0NDQzAwMDAwMDAwRDEKKzoxMDU0RTAwMEZGRkZGRkZGMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGQzQKKzoxMDU0RjAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGQjAKKzoxMDU1MDAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGOUYKKzoxMDU1MTAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGOEYKKzoxMDU1MjAwMDAwMDAwMDAwMDAwRTAwMDAwMTE2MDBENjAwMDBGRkZGODIKKzoxMDU1MzAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGNkYKKzoxMDU1NDAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGNUYKKzoxMDU1NTAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGNEYKKzoxMDU1NjAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwNzIwMDAwQ0IKKzoxMDU1NzAwMDAxMjMwMEYzRkZGRkZGRjMzMThGRkZGRjBDMzBDMzBDNUIKKzoxMDU1ODAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDBDRjNDNUYKKzoxMDU1OTAwMENEQ0RDRENERkZGRkZGRjEzMEVGRkZGRjBDMzBDMzBDQzEKKzoxMDU1QTAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDFDRjNDM0UKKzoxMDU1QjAwMENEQ0RDRENERkZGRkZGRjYzMDVGRkZGRjBDMzBDMzBDMkMKKzoxMDU1QzAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDJDRjNDMUQKKzoxMDU1RDAwMENEQ0RDRENERkZGRkY0MDYxQ0JGRkZGRjBDMzBDMzA1QzIKKzoxMDU1RTAwMEMzMEMzMEMzQ0YzMDAwMTRGM0NGM0NGMzAwMDRDRjNDRTYKKzoxMDU1RjAwMENEQ0RDRENERkZGRkZGRjIzMDRGRkZGRjBDMzBDMzBDMDAKKzoxMDU2MDAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDhDRjNDRDYKKzoxMDU2MTAwMENEQ0RDRENERkZGRkZGRkEzMDJGRkZGRjBDMzBDMzBDRjcKKzoxMDU2MjAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMTBDRjNDQUUKKzoxMDU2MzAwMENEQ0RDRENERkZGRkZGRjczMUVGRkZGRjBDMzBDMzBDMTkKKzoxMDU2NDAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMjBDRjNDN0UKKzoxMDU2NTAwMENEQ0RDRENERkZGRkZGRjUzMDJGRkZGRjBDMzBDMzBDQkMKKzoxMDU2NjAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwNDBDRjNDM0UKKzoxMDU2NzAwMENEQ0RDRENERkZGRkZGRjMzMThGRkZGRjBDMzBDMzBDM0QKKzoxMDU2ODAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDBDRjNDNUUKKzoxMDU2OTAwMENEQ0RDRENERkZGRkZGRjEzMTBGRkZGRjBDMzBDMzBDOUYKKzoxMDU2QTAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDFDRjNDM0QKKzoxMDU2QjAwMENEQ0RDRENERkZGRkZGRjYzMDVGRkZGRjBDMzBDMzBDMkIKKzoxMDU2QzAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDJDRjNDMUMKKzoxMDU2RDAwMENEQ0RDRENERkZGRkY0MDYxQ0JGRkZGRjBDMzBDMzA1QzEKKzoxMDU2RTAwMEMzMEMzMEMzQ0YzMDAwMTRGM0NGM0NGMzAwMDRDRjNDRTUKKzoxMDU2RjAwMENEQ0RDRENERkZGRkZGRjIzMDRGRkZGRjBDMzBDMzBDRkYKKzoxMDU3MDAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDhDRjNDRDUKKzoxMDU3MTAwMENEQ0RDRENERkZGRkZGRkEzMDJGRkZGRjBDMzBDMzBDRjYKKzoxMDU3MjAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMTBDRjNDQUQKKzoxMDU3MzAwMENEQ0RDRENERkZGRkZGRjczMEVGRkZGRjBDMzBDMzBDMTkKKzoxMDU3NDAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMjBDRjNDN0QKKzoxMDU3NTAwMENEQ0RDRENERkZGRkZGRjUzMDRGRkZGRjBDMzBDMzBDOUIKKzoxMDU3NjAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwNDBDRjNDM0QKKzoxMDU3NzAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDRjEKKzoxMDU3ODAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDBDRjNDOTEKKzoxMDU3OTAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDRDEKKzoxMDU3QTAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDFDRjNDNzAKKzoxMDU3QjAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQjEKKzoxMDU3QzAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDJDRjNDNEYKKzoxMDU3RDAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDOTEKKzoxMDU3RTAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDRDRjNDMkQKKzoxMDU3RjAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDNzEKKzoxMDU4MDAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDhDRjNDMDgKKzoxMDU4MTAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDNTAKKzoxMDU4MjAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMTBDRjNDRTAKKzoxMDU4MzAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDMzAKKzoxMDU4NDAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMjBDRjNDQjAKKzoxMDU4NTAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDMTAKKzoxMDU4NjAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwNDBDRjNDNzAKKzoxMDU4NzAwMENEQ0RDRENERkZGRkZGRjMzMjBGRkZGRjBDMzBDMzBDQkEKKzoxMDU4ODAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDBDRjNDNUMKKzoxMDU4OTAwMENEQ0RDRENERkZGRkZGRjEzMTBGRkZGRjBDMzBDMzBDOUQKKzoxMDU4QTAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDFDRjNDM0IKKzoxMDU4QjAwMENEQ0RDRENERkZGRkZGRjYzMDVGRkZGRjBDMzBDMzBDMjkKKzoxMDU4QzAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDJDRjNDMUEKKzoxMDU4RDAwMENEQ0RDRENERkZGRkY0MDYxQ0JGRkZGRjBDMzBDMzA1QkYKKzoxMDU4RTAwMEMzMEMzMEMzQ0YzMDAwMTRGM0NGM0NGMzAwMDRDRjNDRTMKKzoxMDU4RjAwMENEQ0RDRENERkZGRkZGRjIzMDRGRkZGRjBDMzBDMzBDRkQKKzoxMDU5MDAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDhDRjNDRDMKKzoxMDU5MTAwMENEQ0RDRENERkZGRkZGOEEwNDJGRkZGRjBDMzBDMzBDOTAKKzoxMDU5MjAwMEMzMEMzMEMzQ0YzQ0MwMDBGM0NGM0NGMzAwMTBDRjNDREUKKzoxMDU5MzAwMENEQ0RDRENERkZGRkZGOTcwNUNGRkZGRjBDMzBDMzBDQzIKKzoxMDU5NDAwMEMzMEMzMEMzQ0YzQ0MwMDBGM0NGM0NGMzAwMjBDRjNDQUUKKzoxMDU5NTAwMENEQ0RDRENERkZGRkZGRjUzMTBGRkZGRjBDMzBDMzBDRDgKKzoxMDU5NjAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwNDBDRjNDM0IKKzoxMDU5NzAwMENEQ0RDRENERkZGRkZGRjMzMDBGRkZGRjBDMzBDMzBDQkIKKzoxMDU5ODAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDBDRjNDNUIKKzoxMDU5OTAwMENEQ0RDRENERkZGRkZGRjEzMDBGRkZGRjBDMzBDMzBDOUQKKzoxMDU5QTAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDFDRjNDM0EKKzoxMDU5QjAwMENEQ0RDRENERkZGRkZGRjYzMDVGRkZGRjBDMzBDMzBDMjgKKzoxMDU5QzAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDJDRjNDMTkKKzoxMDU5RDAwMENEQ0RDRENERkZGRkY0MDYxQ0JGRkZGRjBDMzBDMzA1QkUKKzoxMDU5RTAwMEMzMEMzMEMzQ0YzMDAwMTRGM0NGM0NGMzAwMDRDRjNDRTIKKzoxMDU5RjAwMENEQ0RDRENERkZGRkZGRjIzMDRGRkZGRjBDMzBDMzBDRkMKKzoxMDVBMDAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMDhDRjNDRDIKKzoxMDVBMTAwMENEQ0RDRENERkZGRkZGRkEzMDJGRkZGRjBDMzBDMzBDRjMKKzoxMDVBMjAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwMTBDRjNDQUEKKzoxMDVBMzAwMENEQ0RDRENERkZGRkZGOTcwNDBGRkZGRjBDMzBDMzBDODIKKzoxMDVBNDAwMEMzMEMzMEMzQ0YzQ0MwMDBGM0NGM0NGMzAwMjBDRjNDQUQKKzoxMDVBNTAwMENEQ0RDRENERkZGRkZGRjUzMDBGRkZGRjBDMzBDMzBDRDgKKzoxMDVBNjAwMEMzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzAwNDBDRjNDM0EKKzoxMDVBNzAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDRUUKKzoxMDVBODAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDBDRjNDOEUKKzoxMDVBOTAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQ0UKKzoxMDVBQTAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDFDRjNDNkQKKzoxMDVBQjAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQUUKKzoxMDVBQzAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDJDRjNDNEMKKzoxMDVBRDAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDOEUKKzoxMDVBRTAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDRDRjNDMkEKKzoxMDVBRjAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDNkUKKzoxMDVCMDAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDhDRjNDMDUKKzoxMDVCMTAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDNEQKKzoxMDVCMjAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMTBDRjNDREQKKzoxMDVCMzAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDMkQKKzoxMDVCNDAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMjBDRjNDQUQKKzoxMDVCNTAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDMEQKKzoxMDVCNjAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwNDBDRjNDNkQKKzoxMDVCNzAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDRUQKKzoxMDVCODAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDBDRjNDOEQKKzoxMDVCOTAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQ0QKKzoxMDVCQTAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDFDRjNDNkMKKzoxMDVCQjAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQUQKKzoxMDVCQzAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDJDRjNDNEIKKzoxMDVCRDAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDOEQKKzoxMDVCRTAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDRDRjNDMjkKKzoxMDVCRjAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDNkQKKzoxMDVDMDAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDhDRjNDMDQKKzoxMDVDMTAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDNEMKKzoxMDVDMjAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMTBDRjNDREMKKzoxMDVDMzAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDMkMKKzoxMDVDNDAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMjBDRjNDQUMKKzoxMDVDNTAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDMEMKKzoxMDVDNjAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwNDBDRjNDNkMKKzoxMDVDNzAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDRUMKKzoxMDVDODAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDBDRjNDOEMKKzoxMDVDOTAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQ0MKKzoxMDVDQTAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDFDRjNDNkIKKzoxMDVDQjAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQUMKKzoxMDVDQzAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDJDRjNDNEEKKzoxMDVDRDAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDOEMKKzoxMDVDRTAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDRDRjNDMjgKKzoxMDVDRjAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDNkMKKzoxMDVEMDAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMDhDRjNDMDMKKzoxMDVEMTAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDNEIKKzoxMDVEMjAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMTBDRjNDREIKKzoxMDVEMzAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDMkIKKzoxMDVENDAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwMjBDRjNDQUIKKzoxMDVENTAwMENEQ0RDRENERkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDMEIKKzoxMDVENjAwMEMzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwNDBDRjNDNkIKKzoxMDVENzAwMENEQ0RDRENEMDAwQzAwMDAwMDA3MDBDMDAwMDI4MTMwNjkKKzoxMDVEODAwMDAwMEI4MTU4MDAwMjAyMTAwMDAxMDIzMDAwMEYwMjQwOTcKKzoxMDVEOTAwMDAwMDEwMzMwMDAwQzAwMDAwMDA4MDBDMDAwMDI4MTQwMzgKKzoxMDVEQTAwMDAwMEI4MTY4MDAwMjAyMjAwMDAxMDI0MDAwMDcwMjUwM0YKKzoxMDVEQjAwMDAwMDIwMkMwMDAxMDAwMDAwMDA4MDEwMDAwMDI4MTgwMDMKKzoxMDVEQzAwMDAwMEI4MUE4MDAwMjAyNjAwMDAxODI4MDAwMEU4Mjk4MTAKKzoxMDVERDAwMDAwMDgwMzgwMDAwMjgwMDAwMDBCODAyODAwMDIwMEUwMjEKKzoxMDVERTAwMDAwMDEwMTAwMDAwMDgxMTAwMDAwMDExOENDQ0NDQ0NDRDcKKzoxMDVERjAwMENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQzAwMDAyMDAwRjMKKzoxMDVFMDAwMENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDRDIKKzoxMDVFMTAwMDAwMDAyMDAwQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDRDIKKzoxMDVFMjAwMENDQ0NDQ0NDMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMjIKKzoxMDVFMzAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRkI1MUNGQzBGMDAzRDcKKzoxMDVFNDAwMDhBQkI1ODE5MTgwMjM4MTA3QzdBRTBBNThDOTRFOURGRDcKKzoxMDVFNTAwMEM4Q0NDMEIwMDM4OEFGMDJGMTdFNjZEMkY1QjM0QTIzNDYKKzoxMDVFNjAwMEQ4RjcyNDE4MTgxODI0MTkxODRFODkzMTMwRUM5MjQ0QTgKKzoxMDVFNzAwMDg4RTcwMkQ1MDg0QTMxMzBEQzg1OEEwNTAwRDk2N0E1NTQKKzoxMDVFODAwMEU4MUI0RUEzOTgzNkY4QkIzQTJBRkY5MTJBODRDRTg3QTYKKzoxMDVFOTAwMDg5QTNDOTNGODZDQTZGNTQ4MEQwM0ZENUIxOUJCQjA5NDcKKzoxMDVFQTAwMDJBMEYwMEZFNjk0RjY3NjAwMzAwMDAwMDAwMDAwMDAwMzkKKzoxMDVFQjAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRUQ3RDBCNzg1NEQ1MEYKKzoxMDVFQzAwMEI5RThEQUNGRDkzMzk5NEM3NjQyNDIyNjEwNzAwNzAzRUQKKzoxMDVFRDAwMDA0MEQzMDIwOEZBODU0MjdFMUQxRTBFNUU4RjA0NjJFRUMKKzoxMDVFRTAwMENBODBBRjA4OTI0NDhEMzU2RDM5MzczQjY0MTIwMjAyODcKKzoxMDVFRjAwMDhFQ0FBMUI0QTUzQTIwN0FBMjQ3REJENDQ2NEI3QkY1RTMKKzoxMDVGMDAwMERDMjA2QTczREFEMzdCOTE1MkE1MkRCNjQxM0QyODE2NjkKKzoxMDVGMTAwMDY4RjQ5NDAzQkRENzk2QkJGRTdGQUQzREQ5N0I2NzI2NjEKKzoxMDVGMjAwMDBGNUZERjM5NUYxQjNFREQ1OTdCQUZCREQ2QkZGRUY3OEMKKzoxMDVGMzAwMEZBRkY3RkVEQThBMjk3QTg5NzEwNzIxMTdFQUUyNTY0OTQKKzoxMDVGNDAwMDlENDAwOEM5RUJCRDVBRjc4OTE2QUQyNkI5ODQ1NDA1QTIKKzoxMDVGNTAwMDU1NjMyQjdEQjY1RTBBMUI4REQzRThGRDRCQzREMDEzNzEKKzoxMDVGNjAwMDA0RUU4RjlCNDMyNjExQTJDMDdCMDU4NDRDODVGRjREMTgKKzoxMDVGNzAwMDI3NDRDRTY5MUQxRUY1RDM3QkQyQUEyQ0I4NUFFMzU5MEIKKzoxMDVGODAwMEQ3MkE5OTEwN0QyQTNDREYzNjJFRDVGM0U0RkMwOUE1RUIKKzoxMDVGOTAwMEE3NUIyM0Y4NzM3MTBDMjFGNUM3NkY5Q0ZGOEFENUE2MDgKKzoxMDVGQTAwMEZGOEQyNDk5QjkyNzJGQTdCRkNDMjQzMzJGNEE4NDdDOTcKKzoxMDVGQjAwMDU0QjgyOEFCRDM0ODNGREUwNzBENURCQTNDOTY5MEYzNEEKKzoxMDVGQzAwMDBEMkJFNkJGMzJCNkVGRjNGNTEyQTk2RDJGRUQ3QkZGNzcKKzoxMDVGRDAwMDJBQTIyMTVFODg2NkFBOTE4OUJERUI1RTRGNDhBNzI3NTkKKzoxMDVGRTAwMDg3OTBDRDg1OUJEODdBNzMyOUIyQUVBNEY3REJGRTQ1QTYKKzoxMDVGRjAwMDk3NEI3QUUxNUMyRkQzN0U1M0ZCQUU4NzEwMTNDN0I1NjYKKzoxMDYwMDAwMEM2NDlCRTlGRTg3MkJDRUY3RTJGMzkxRTdGOUZDOEY0NDEKKzoxMDYwMTAwMERGMEM0MkIwMEI1REZGNzQyMTdBMkREQ0Y3MTQyRTMyQjkKKzoxMDYwMjAwMDQ3RDBGNkZBNjdDQTQ5QjQzNDNERkM0OTdBN0Q0MkY4NTQKKzoxMDYwMzAwMEFERjdEMkQyOTFGN0ZCNjg3RjUzMEJBMUVGOUQ1NEUzRUMKKzoxMDYwNDAwMEQ3NUY0NUY5RThCREVGNEJBMTREQzA0NzdCQzZDRjIxRDcKKzoxMDYwNTAwMDAxN0E5RjMwM0VCMkU4NzQ2QTdGRDNGMDU0RkM5MThFOEYKKzoxMDYwNjAwMDRFN0Y0RkJDQzg3RjE2N0Y1NTg5QUJCMjNBQzkyN0U3MzAKKzoxMDYwNzAwMEFGM0I4MEJGMzI2Q0ZDRDVCRUI4REZGMTNFMjk3RkM1OTcKKzoxMDYwODAwMERDRkNDNUYxNzFCQTlEQUQ5RkVDMUVDNkU4QzJFOUU1MjYKKzoxMDYwOTAwMEE2NEY1QUJBN0NEMkY3RkFGMkQzMTZDMEFCQTc3REIxOUQKKzoxMDYwQTAwMDM5ODJBNEUwMjcwRUFGNDVBRjRGMEJFRjQwN0M0NDQ4NDgKKzoxMDYwQjAwMDFDRTk0QzQ4NDQ4MkY5N0JFRkIzNkI0Njk5MjEwMDlGNjEKKzoxMDYwQzAwMEQxRTY2MTU4NDc5MDRENDU4MkI3QjZEQzJENTIzODAzNzIKKzoxMDYwRDAwMDI0RDEzQUFFODhCNkJCRDcyQzAwQjgwM0M3RTc5RjAyREQKKzoxMDYwRTAwMDc5NjgwRTU1NjhCM0U5N0FGNTY5QzY0M0YzRTgzNUEzRDQKKzoxMDYwRjAwMDU0MTc2MDNENUI4OTA4NEE4MDhFNTc2RDk2OTcwMkJEQTQKKzoxMDYxMDAwMDA4QjY5RjM2NkYwOTlCODAwNzEyMjY2NDM4MjFGN0YxODUKKzoxMDYxMTAwMDM1MTEyMjFBMzI2REFCRjBFQjk4NTRFQjUwNDkyN0MzN0UKKzoxMDYxMjAwMDg3NzBEMUQzRjdGRDc0RUI1NzdCREYyMzE3OEJFMEZGMkMKKzoxMDYxMzAwMEY3MTA1OERGNDBFRjkxMjg3QkNGQTRGRjAwREYzOUFFODYKKzoxMDYxNDAwMDcxRjQzOUI0NkRFM0ZCMDBCMUI1RTlGM0EzRjAwQkUyRjAKKzoxMDYxNTAwMEZCRUUyRjY0QkU2Q0IyNEYzM0E4N0U1MDRCNDQzRDAxMjIKKzoxMDYxNjAwMEZEODk5MTJERDM3NjQ2MjU1NTQ0RjAzQzQ4MEU1MjhBNDAKKzoxMDYxNzAwMDBDNDg5NzY2NDIyQURCODExRjQ5M0I1OTM4QjExN0JFNEMKKzoxMDYxODAwMDUzNDRDMEY1MTREQ0JFNzM0RDBCNTU1REU3Q0FGQzIxQ0EKKzoxMDYxOTAwMEUwRjNBMDRFQzhCMDlDQkVFQkQ5RDY0MDE5NzlCQ0FEOTcKKzoxMDYxQTAwMDFEN0EwRUY5M0Y0NkY5NjgwQzdEREYwQzMxN0JCOEI1REUKKzoxMDYxQjAwMEU0NjUzRDZBOTNFRjBDNDFFMDdDRTlFNjBGNjJDODMzODkKKzoxMDYxQzAwMDQwQ0M4MDU1RThCNTQ0MEM3QjAzOUY5RTNGNjQxNzFFNkUKKzoxMDYxRDAwMDA3Q0IxRkZFQTg4RDNFNjRFOEY0MEE3MkJGNjFCMEZDRDUKKzoxMDYxRTAwMEYxNjlFN0IzRThEQTU3QUUxQTJEQkE2QTg0RDI2MTRCODcKKzoxMDYxRjAwMEYxQTI5NEZFNDc3QUJBRUUyM0QwM0ZBMzg0ODQxMzI5RjgKKzoxMDYyMDAwMERFMUIyNTA4NUMwRTRDODdCRUMxMkJBNThGOTQyNEVGQTYKKzoxMDYyMTAwMEJEMEU3QTQ5RjkzMzU2RUNFRDA3MUY1MkFFMTMxRkQ2NjcKKzoxMDYyMjAwMEI4REU3QUM5Nzg5N0FBNDQyMkVCMjI4Q0E3QzI3ODk0NjgKKzoxMDYyMzAwMDRGQjcwNDFGMzYwOTk1ODc3M0MwREIxNDFGNTI3QzRBODEKKzoxMDYyNDAwMDI3QjQ0OTMxNDEzRUE0M0Y5RDAyNkQ3QjgzRTFDNDU2OTIKKzoxMDYyNTAwMEU0ODMwNEQyQzU4MkNGNjM4ODBFRkNDQUI5M0U0NzlCNTMKKzoxMDYyNjAwMEFDMzAwNTNCRkNERTdBMTVFMTUwRDE0N0EwRTNFODc0ODEKKzoxMDYyNzAwMDQwOEEwQUQ5NEYzQTgxNkYyRDdFMDUzNkI4NzgyOUI0MDUKKzoxMDYyODAwMEJGRUVFMDgzNTY2MzJBNDk0NTA3OEI1RjAxQUQ4QzVGMDMKKzoxMDYyOTAwMEJGM0UzOEZERTI5RTZGODkxM0RFNDFCRkU3OTc4RDkzQzUKKzoxMDYyQTAwMDM2M0I5NEZFM0Q5OTlDQjRFODQzOTE1ODA1MDNEOEY4RDkKKzoxMDYyQjAwMDYwQjM0MjBFMDg5MzA5NjkyQTVDNDZBMkY0RUU2Njc4NDAKKzoxMDYyQzAwMDQ0RUQ1ODBCNUMwQkMwM0Y5QzhBN0E4MUI0MDkzMkMwMDQKKzoxMDYyRDAwMDY5RDk1NTEyQ0NDMTdFRDMwNTAzQzcxM0I1NUFENDJCNDcKKzoxMDYyRTAwMDkyM0ZDQ0VDMkI3RjlFMUUyRTM2RkY3MDIzMUVENjI5QUMKKzoxMDYyRjAwMDdFRjM0OTNDMkM1MkZBNTA1RDE5RUEyNEEwMzdDMzA0QkUKKzoxMDYzMDAwMEY4ODA4NDE4NUY0OERDNEZCN0RFOEY3MTdFRjY5MkEzNjkKKzoxMDYzMTAwMEY4M0VENUFFQTY4RUY2Q0MyOUM3NzMyNUZBOTA4RUIzN0IKKzoxMDYzMjAwMEE1ODQyNDNDNDhBN0I4MDY2REI5NDQyNkIwMkZBMEZBMkUKKzoxMDYzMzAwMEM5NUY0MEZCNjc1OUVDMkYyRDA4MDFGQzU5RENCRTkyNjgKKzoxMDYzNDAwMDU5OUNCRjA1QUFDRjI4OUVGREQzOUNGMkVENzNDOUJGMEYKKzoxMDYzNTAwMENDRUQ3MTFGN0Q5NjY2M0Y2MTVERERGRURCNjMwMkY3NkMKKzoxMDYzNjAwMERGMzI4ODFGRTlDRERGMjdGRUQ0RkVBQUU1Qjc1OTc4RDIKKzoxMDYzNzAwMENEMTMwOUUyOTNGQzU0NDkzQzUxQzRENzQ2REJGN0JDMkEKKzoxMDYzODAwMDk1OUQ4MDc1OUIxNTkxMzVDRDE0MEZFNkRCNDJBODA5Q0MKKzoxMDYzOTAwMEU4Mjk4NzdCQjJFOEYzOTM0RjRBQjg1RkNBNUI1NjdGMjAKKzoxMDYzQTAwMDA5Q0NCN0JEQzExQzVCNkNGMzA3QjdDQkI1MUFFMDlCM0EKKzoxMDYzQjAwMEYyODU2NkI3MTczNzkwRTgwQjgyNkRGRkU1MDlCNjhDNUEKKzoxMDYzQzAwMDJEMUU4NkZDRjc3Njc3MDk5ODBBMDFGOUNGRUI4RjA1MjkKKzoxMDYzRDAwMDVGMDVCOUU0Rjc5M0Y4QjFCN0E1QkVFRERDN0NDMkVEN0IKKzoxMDYzRTAwMEU1MERFNTYxM0E2RjJCRThBRTExRjhEODE0MjgzQ0FEMDUKKzoxMDYzRjAwMDA1QUNGRDkzQzZFMUU1NjAzRjVCMzM1OUZCQTNDNjc3NkYKKzoxMDY0MDAwMEMyOERDODE3NTEyRDQyRUZENTEzOEU5NzJFOEExN0E0MkYKKzoxMDY0MTAwMEJGOTE2RkI3QUZFRUFCN0JGRDNCNjRERDA3N0NCNkQ3QkEKKzoxMDY0MjAwMDlGNzM1RDA5RDhDRjMyMzEwNDY4REYxQjNCQTJBRkIxNDcKKzoxMDY0MzAwMEUxRTM5QjlFOEEzNzAwMUYyMzQ5NDIyMDQwQkY1ODJFMkMKKzoxMDY0NDAwMENBOEZFNUNGMDFFMzQxQkI4MENCNTMyMTM5OENGRDQ2OTgKKzoxMDY0NTAwMDQ3N0FDQTE1QjhCNTQyN0YxOUFFMkRDMUU3QjI1MTlFMzEKKzoxMDY0NjAwMEM4MUNGRDI0Q0FCRjI0NUNCQzdDRjBGMjlFNkVCRDAxM0EKKzoxMDY0NzAwMDgxNDQ1MkY5RjNGNzRCMzkyODU3ODE2OTc0REQwRUJEMTkKKzoxMDY0ODAwMDVFQTgyMzNGRjI3MUJGMDYzNDAyRkQ5MTRENjE5QTBDNjQKKzoxMDY0OTAwMDdBMjRCRTIyOTI2MkJDOUYwODIyRjZEM0MwMUU1QzQxQzEKKzoxMDY0QTAwMEQxNTBCOEFDRUNERkU4N0EzNTJEM0NFNTU1MEE5NzI3OUEKKzoxMDY0QjAwMEQ3MUYzMjExNkM2NjI3MEMyRTAzOUU3OEEzMDZGODI1OTEKKzoxMDY0QzAwMDQ3MjUwMkYyQUYxNTg2MjNCNzAxOUY5MjQ4NThBMEY3REYKKzoxMDY0RDAwMEI1NjAzOEI0RDVFOEJCM0U5NTMwRkI5MDQzQUYxNzk5MTMKKzoxMDY0RTAwMDdDMTNFODdGNEY5RThFRkQwOUQ4MEI2QjVENjMwMDJFRjkKKzoxMDY0RjAwMDE1RTFGQTBDRTg5RDJCNEUxRjk4Q0UyMzQ4N0IzOTE4RTYKKzoxMDY1MDAwMEIzNzRGNEZFQUNFOTlDRUU3RDM3N0QwMzAyOTNBRkZCRTAKKzoxMDY1MTAwMDlCQ0U4NzREMkE0RjJEQzcwNTUxMDJBNTE4MkY0NkJBOEQKKzoxMDY1MjAwMDY4OUMyRUU3OTVBODA2N0VFMzk2QUY4QTY0MUY2RDNGQjAKKzoxMDY1MzAwMDVBREZCRjlGMTIwMzNGQzU2M0IzOUIzQUEzREZDOEJCQkIKKzoxMDY1NDAwMEY0QTlDMDQyRTlERURCNzU5NzU4OTk0OEMxNEY5NTIyRkUKKzoxMDY1NTAwMEQzRkI1QkVFN0EzODNFMTZFOEY5OEE3M0JGQTdBQzBBMjQKKzoxMDY1NjAwMEEzNUY0QUY3N0Q5NTQwMEZFQjNENkYzMUIzNEY2NDNGMUEKKzoxMDY1NzAwMDVEMEZFREFGNzA3RkU0N0NERUEyMkM5MjYyMUVFQkJBNjEKKzoxMDY1ODAwMEM3MDU3RjIxQzU3MzJBQjlCOTRGRTJGRUQ1NEUzNkJFODUKKzoxMDY1OTAwMEU1RUY5QzJGRTg3RjdDMEIzRjE3MkE0NTcyQjgxNEM5QTIKKzoxMDY1QTAwMEVBMjNBNTdDMzExNEVGODU0OUJGM0IwRkRCMUVGRTI4OTMKKzoxMDY1QjAwMDUxMkJGQTA4RDhCREMyQ0U3MkI4MkFBNEE3MTFGODc0MUMKKzoxMDY1QzAwMDk3NDhBQTUyQzFCNzU2MTIxMUJFQzIzMEREN0E1MEJERUIKKzoxMDY1RDAwMDVGNjg4QUEwOTlDOEJEOTI4MUY3RjM1N0Q1MUU1NDI4RTkKKzoxMDY1RTAwMDVENUE0NzkxMTA5ODk5NEI2MDNDRDBBQjA3QkQ2ODNGMEUKKzoxMDY1RjAwMEQ1NUM5MkYwNTIzREZENUFEMTU3NENCMENCN0EyMTA5NkYKKzoxMDY2MDAwMDAzMkM3QTJERUMzOUU5N0ZENEJFMUFGNEI5QjIzMTZBODEKKzoxMDY2MTAwMDIyNUNDMTA4RUUxMTBFMTUyRDQzN0FCNzUwRkZDRUMzOTAKKzoxMDY2MjAwMDE2RTJFMEE3MTY1M0VDMDRCRThERDNGMUMxMUY4QzFCRkMKKzoxMDY2MzAwMDE1MjhBRkU3ODJENEYyQzNDRkM3MTQ3RTZCQkY3MTI5OTAKKzoxMDY2NDAwMEM0ODUyODI5MDFDRTA5MzJDMjQ5NDc2MkY0RDQxOTVFQjMKKzoxMDY2NTAwMDQ2RUU5RTQ1M0FBOURENjlDRERFODVGMjYwNUU0OTUwODEKKzoxMDY2NjAwMDVFNjU3MkQ4MTRDMENFQzgwOTUzQTRGMEM2QUE5ODNFN0QKKzoxMDY2NzAwMDUwNzJFMzgyREQ4RUVEMjFEMTA3RUQ3QzIzRUI5REU4QTYKKzoxMDY2ODAwMEZGQjVGRTU5NUE5MTBBQUZENTIyRDM2RkY3NzE3RDc4QzUKKzoxMDY2OTAwMDVFNjk5RjhGRkU0NjMzOTU4RkEyQkVGREMzOUMwRURGQzEKKzoxMDY2QTAwMDhFMkQ3QTcwM0NFQTMzNjY5N0FDRTc1RDgyRTE4ODYzQjEKKzoxMDY2QjAwMDhFQkNBMEUyN0FEQzdFQ0QzQ0VFRDdCNDE0NTJCRjA2OEQKKzoxMDY2QzAwMEU1OUQyQzAwM0YyNjgzRjM0NzBCNjA4RjNFRjc2NDkzRDQKKzoxMDY2RDAwMDg0NDlFMUM4MDA3Rjg2RkEyNUE0OTRGOTI1MUFGRDA3QUMKKzoxMDY2RTAwMEZBMkY3Rjg1RDM5RkYxQjhGQzk2NzRGRUNDRDc4NEM4NkYKKzoxMDY2RjAwMDBGNTBERjUxNTUwNUYwRUYxNkUyRjNDNzAxQkUwQkU4NkUKKzoxMDY3MDAwMDdFRDJFOEJCRUUyRUJFOUY5QzJCNkQyQjZBQTE3MDNEMDYKKzoxMDY3MTAwMDk2MkIzQUY4NjEzNDk3OTdDNzg4NzlFMjIyN0QxRTJGMkQKKzoxMDY3MjAwMDE0MEQ4MDNCNUUyRkUyM0FDRTE5Q0M2RjI3RUY3QTFEMTUKKzoxMDY3MzAwMDc2QTJEOTVDQTQxMTlCRkVEOUMxRTU2OTVCODNFNjkwODIKKzoxMDY3NDAwMDVCRjdENUFGQzZBMzkxMTQ3QTRCRTdGNEM5OTgxNUM2ODkKKzoxMDY3NTAwMEY4ODczRjk0NDBGQUMzM0E1M0Y5RTkwRjk0NTY2OEZEMUQKKzoxMDY3NjAwMEU5M0ZCOTQ0NUQ4M0Y4MkJBQzM4MjVDM0I1Q0NCRDVGOTgKKzoxMDY3NzAwMDRBM0RBRUZCNEFFQzdFQTY5NEJFREY2MEFGNUIyODlFMkUKKzoxMDY3ODAwMERFNTYxQ0ZFNzhBNzA0RkIyRTkzQTBGRkU3MEQ1MTUzQTUKKzoxMDY3OTAwMDE1ODBBQjNFMUNFMEY3ODZBOEI4QzFCNUJCQkMxMkVFQjUKKzoxMDY3QTAwMDFCQjMyMjFBQzg5MTY1OUZCREExQzg1NkI4OUZGNTI1OTUKKzoxMDY3QjAwMDc5MEJEMENCNUIyRThBMTJBNTlGMjY5QjI0QzcyNjM3NDgKKzoxMDY3QzAwMDUzRTFBNjhEQkYzM0E5QkFCNEUzNDM4QjdFQTUxMkZDNzcKKzoxMDY3RDAwMDU0NTIyODkyQjExNDhFQ0QxRjM3Njg3NjNBNzVEMTZEMTgKKzoxMDY3RTAwMDA4REJCNzNBRjkyNjVFREZCRjlFRkRCNDdDRjE3M0QxQkEKKzoxMDY3RjAwMDhBODczOEU5ODUzRkY2NzgwOEE3NzM5MkZFN0RFMjFBMEEKKzoxMDY4MDAwMEZGMzlFOEFENzFGQTE5OTQ3RTlCMENBMDI3RDMxNzc0NTkKKzoxMDY4MTAwMEUzODVGRTQzNUMzM0MzRDA4RTFCODY2OERBRjREOEM3QTkKKzoxMDY4MjAwMDYyMEVFMjQxQkUyMEEzNUVEQUJEQTYyNTBDRjREMkU5RDkKKzoxMDY4MzAwMDE4NDA1QTdBMERBN0IyREI1RDgyOEE3MjQ1RjVDNjU1QkIKKzoxMDY4NDAwMEQyNzQ1NEM4MDJDNDNGRTc0QTFCOTFERThGNTE3QTgzNDkKKzoxMDY4NTAwMDFFN0I4Q0Q0NzY1RENDRUQ5NTdGMkRBQUEyMUZERkQ1NTMKKzoxMDY4NjAwMDY4OTYzNzE2MEY0NTZGNTJGOEE4NUY0N0Y2MzBGRkU1NzgKKzoxMDY4NzAwMDEyQ0I3RkY5N0JDQTI3ODNGMDU3Q0U1M0EzQzFFREIxNkEKKzoxMDY4ODAwMDE3Rjg0QUVFQTYyQzRERTEyQURDQzhFQzI2Rjg2QTM5NDYKKzoxMDY4OTAwMEI0NkQ1MEJCRDcyOUY0RjJBMzg3Q0ZBMzk0MjYwRThGRjMKKzoxMDY4QTAwMDQ3N0EzQkVERDM2Mzg1MkYwQjFFQjA2RkM1Q0NCRUE5RDUKKzoxMDY4QjAwMDY2NjcxOEY0NENBMDk4REEyNzgyRjY2NzM1RTA2NzQ0REIKKzoxMDY4QzAwMDQ5QkMxQ0RBMjM3N0NGQzM3NTdDMUJGQzUwM0ZEODE3MUIKKzoxMDY4RDAwMDgyRjhGOEE2OTg2ODM0MjlDRDdDRTE0OEE3MjhDMUZFNDMKKzoxMDY4RTAwMDk5RTBGRUNFQTI5RjdCNUU2QUY1OTA5RUJFNkM3MTJGRjIKKzoxMDY4RjAwMEQwMjk1MDdCMTg5NjY5Qjc3QkQ1NTI1RUFGM0QxQzUxQUQKKzoxMDY5MDAwMEQyODlFQUQ2RUQyRkE0RjUxM0ZFMkNGMUZERDhDQ0M2MjIKKzoxMDY5MTAwMDMwNkQ4RjgyNUZBOTNGQjk1MzdDQkMxMUY2NjMxMTRGNzQKKzoxMDY5MjAwMEI4MUVFOUVFREE0NzI0RTM1MDNDREVCREI2Q0MxMjJBQUQKKzoxMDY5MzAwMDYzRjk2RkU4M0M3Nzc2MjkxNDAwMDI3RTgwNjQ4RjAzNDgKKzoxMDY5NDAwMEREMDk3Njg5RUE5QkI1RENBRURENEEyMjAxNzg3ODg2REUKKzoxMDY5NTAwMDg4MTg1RjNCNDM4RTA0QUVCMEYxRTE0RTQ5NjVGM0I0NTUKKzoxMDY5NjAwMDJBNkY0M0ZDREU4QUVGREUxNjY3NkQ0QkZGRENCMURCN0UKKzoxMDY5NzAwMEQ5QkU5RDJDMUEwRUYxREJEQjc3MkFCOEZFM0I1REZCRkUKKzoxMDY5ODAwMEQ2OThBNEUzQjg3NzkwREExNkMwNDNCMzQyRDA0RjU4RjQKKzoxMDY5OTAwMEFCMTMxOUUyQjExQjdFRjg5RDE5QjA0RkY4MzZCNzJCMzcKKzoxMDY5QTAwMDFGNTBGRTMyNkNGQTY3OUQzRkExQzI3RUY2OUQ4RTJCNzIKKzoxMDY5QjAwMDk2NUQ0REUwRkQ0NENCMDhEODk3Njc5Mzk0NzZGNDk2QTYKKzoxMDY5QzAwMDU2Mjc3QzAzQzFFRjg2OTc5MDRERkRDMjIxQjcwOTI5NTgKKzoxMDY5RDAwMEUzODc0RjQ5ODIyMzZFNThBRjA1MjY0MUQwRTRCQzk3MjgKKzoxMDY5RTAwMDVEQ0QwQUE2M0ZDQ0RGN0ExMzRERTAyNzRBMDZFRjVGNjQKKzoxMDY5RjAwMDNCOTlFNTM5NkE2N0MyNzVBMEY3N0VDNkZERDFBMUJFOTUKKzoxMDZBMDAwMDc3MzhDRDdCMUJCNDZFMTVGOEJGNDYzNjJCMDVCMTM3RjIKKzoxMDZBMTAwMDVFQTUyOUI1RTE5MTIwQzcwN0NBM0I0NzEyNDdCRkQ2RkIKKzoxMDZBMjAwMDQxRjZBQjE0RkJFOUU3ODZGNzk0QUU5OUUyRTRCRTcwNTkKKzoxMDZBMzAwMERGNDBBMjZGODFEQzlEMTdBM0Q1MTgyN0UwNzA3QjAwOTMKKzoxMDZBNDAwMENGMTI1QzY1QTQyN0M2NEY4QTYwNUU3RkFCOTAwNTcxNEMKKzoxMDZBNTAwMDk0MEVGNDRGQkM4NkVDQTA3NzhEQTUwN0E4NUU4MkI4OTMKKzoxMDZBNjAwMDRGNDY4OUYzQjkzQkFFRDI5M0E0NkIyN0NBMTc4NjQ0MkQKKzoxMDZBNzAwMEU5OTIwMjlBQkY1MzAyN0ZCMTRDM0U5REVDNEZFN0FCQzcKKzoxMDZBODAwMDg2NzU0REM2NEVBODVGRUFCODdFQTkyNkM2ODNCM0E2MTIKKzoxMDZBOTAwMEExN0M2MUJDQUU2RUZFMTgxM0UwQThDQjMzNDJBNjAxMDgKKzoxMDZBQTAwMDZBMzQxNEM2MzE1QzdDNTU3MzQxMjAwOURCRkVCQjQ2NTkKKzoxMDZBQjAwMEVFNTE0MThFNkFBOEZFQjZERkJGMjdDOEUyQzlFOUY0RUQKKzoxMDZBQzAwMEI2NDIzNEMzNUYwMjdFQUQ4ODc4OTI3NERBQjZBREZCMEQKKzoxMDZBRDAwMEEzQjg1MEQ5Q0VGNjU1NTk0QkZBRDkxN0RGMTM2NEYxNDQKKzoxMDZBRTAwMEUyQjU1QkM2NjZCMUI4OEI1MzVGOURFNUY2RTEyN0NGOTMKKzoxMDZBRjAwMDNDQUU3NjgzOUU3OUZBQzRGNUIwQ0VGNUZGNTMyMjFBRTgKKzoxMDZCMDAwMDlERjdFQzMzOTlBNDEzRUQ0NjQyMDVCQkIxQUU0MzRBNjEKKzoxMDZCMTAwMDY5MEYwOTY5NjJGOUYzRUY2NTIyQkRENjNERTc0OTJDOUIKKzoxMDZCMjAwMEEwRUZBRjdCRTE5RDQ5ODRDMjc3NzY1M0NGNkIyM0MxNDEKKzoxMDZCMzAwMDlGN0U1QTYwNzE3MUIzN0JEMjYyN0E3RjlENEM1NkE3NUIKKzoxMDZCNDAwMDhBQjM0QzkwRDkzRUU0RjQ4RjMyNTY4MEZDMEE2RDA3MkMKKzoxMDZCNTAwMDZGQzY3MURCOTcyQjYwNTdBRDdFODZBQzIwQkZEMjdFQUYKKzoxMDZCNjAwMDY4QjdDREE3ODRDNDU4MjExNTdDMkMxRjcxRkEyOTgxRTAKKzoxMDZCNzAwMEMxNzc0MEMxRkRERkJBQjZCRDZBOTRDMjUxRDNGNjIxRDgKKzoxMDZCODAwMEVBOEJEOURGN0IzNjAwNzhBODM5MjAzOUZDQjg5QTM2RjEKKzoxMDZCOTAwMEE5RDMzMzA5QUYyN0UwMEE3MTU2NjEwNkYwMDlFNzk3RDgKKzoxMDZCQTAwMDhFMEQxODVGQUQ2RTdGRTA0MzI5MDBFRjNCRjUxNkM1RjMKKzoxMDZCQjAwMDRCQTgxM0YwRkFBNjE0NUEwMEVEMUZGQzYzQzBBMEE4NUUKKzoxMDZCQzAwMEZBRTBGMDEzMDFDMDJCMUQ3NzhEOUEwNTcxN0MyNzdGQTkKKzoxMDZCRDAwMEMzRjgxNzcyRkE4RTQ3MzkxREYzQkQzNUVENUJEODdDQ0IKKzoxMDZCRTAwMDJFQkRGODAxRkM1MkQwMzcwRTFCOTE5RDc5NzREMjM2MjAKKzoxMDZCRjAwMEI4M0NFRkZBNjdDRjNENkFEMkY5NEUzRkY3RkI0NzRERkQKKzoxMDZDMDAwMDBBRjc1RDdGRjlGNzQ3QkYwRTcyRjlDRjVFMURGNDdBODAKKzoxMDZDMTAwMENERDNCRjBDMTAxQjFGQUU5MzU5RkNFMEVDMjhCQTg1RjYKKzoxMDZDMjAwMEEyRkRDRUZFQ0E5MzAwODdFMEVDNEJFRjhEMzZFODdBRUEKKzoxMDZDMzAwMENGN0VGRjRGQzMwRERBQkZFRUE1QjlGOUIwRkVCQUU3QkMKKzoxMDZDNDAwMDY3RTdGN0U3QzcwMDlGMjYzQzc2QjgxMjM4QkU3MTQwNjkKKzoxMDZDNTAwMDYwQ0VDMjhCRkNFQUEyQ0JBMThFNDNBMzAxQ0UzM0M3ODgKKzoxMDZDNjAwMDNDQjgzRkFCQTFGN0VBQTcwMjlEMzZBMDlEODVGNjQ2NEEKKzoxMDZDNzAwMDhBREZFQTY3MzY3RjA4RkFBMTJGOUVDRDkxMjIwNkJGRjAKKzoxMDZDODAwMEE4MUEwQzAyOURERjk5ODdGNDIyM0Q2ODFGRERGRDZCNzkKKzoxMDZDOTAwMDhFNTIzQTRFNEU0RkI3NzNFNDYzMTVGNDVDQ0QzMzVCQkUKKzoxMDZDQTAwMEQ4N0MyRUJBOUQ4MTVGQUVFQzRCQjdDRDJFQkE5RDIzMUEKKzoxMDZDQjAwMDc3M0Q1NjAwODlENzhFNjE4RTNDODI3NUVEOEQ5RjQ3NUEKKzoxMDZDQzAwMEIyMjJGREU4MDc0QkZFMDdDMjJCRTY1OTI4NUM0QkU1RDQKKzoxMDZDRDAwMEYwMzc2NDkwQTNFNzMyOTI3NDVEMDA3NDdERjZEQzY4NEYKKzoxMDZDRTAwMDQyRjlFMjdEQTVFNzY2QjAwNzNEMkY3OUY0N0RGNEZFMTkKKzoxMDZDRjAwMEJBOTdERTQ0QjkzQUZCRkNFQkFBODE3NjhDRjgwNUVBMzgKKzoxMDZEMDAwMDU3OUUyNUM5OUZDM0UwNjc1NjMzOUY5M0Q0RUNDRkVDQzEKKzoxMDZEMTAwMEY0MDQ3QUU5NTM5RDU4NTg2OTA0RjBGRTA5QkM5RjYwNTkKKzoxMDZEMjAwMEZDNUU5RDM4Qjg0NDQ4NDFBRkQ3RTUzMTRDRkYyN0YyQUYKKzoxMDZEMzAwMDEwMkYxQkY2RkY0NjI1N0UyNzFEODUzMkEwRTM4OTc5OUIKKzoxMDZENDAwMDcwM0YxRDFEQURGNUVCQjBGRTk5MzY3QUVFNjc3MkVBMjUKKzoxMDZENTAwMEVFNUY0REU1MTFFQzVEOTJBRTA5RTE0RDkyNDIyRUNGMTIKKzoxMDZENjAwMEVFRjVDODYwRUZDRTgyNUY5NTMyNkZDQUZDOTlBMUU2NUUKKzoxMDZENzAwMDU3N0UyNjNCRUJBRjkyRjkxNThFODdGNEZDQzFFNDdCN0UKKzoxMDZEODAwMEEwRjUwRDE1N0YzRjkyMEQxQ0Q3OERDN0QzMUZBN0Q2MzkKKzoxMDZEOTAwMEY3RUY3MTdENTE0RENDQ0ExMTk3RjZGNTQzNjQxMjMxNkUKKzoxMDZEQTAwMDQ3MTZGNUMyN0IxQTM2QTg5NEZGNEUzRjJENjEzQ0E4Q0EKKzoxMDZEQjAwMEE1RkQxMEVBNkRCNzlFQTg0RTEzREZCQzIwMzMzRkExOUUKKzoxMDZEQzAwMEZBQzBDMTQ5QTBDRjRFQkZGQzIzRTRDRkVBNjc0RUE4NkEKKzoxMDZERDAwMDEwMkY3RUFERUQwNzZBNzc2OUFGM0M4MDNENDhEOEVDNTcKKzoxMDZERTAwMEMxRTlFRjFFOUNDNEY0MDAxRDNGMDU5RDE0ODU4RDVGMTUKKzoxMDZERjAwMEYzQTI3M0ZDOUE2NzNFNzQ4Q0JGREU2QzQ3RkY2MEEwMDEKKzoxMDZFMDAwMDc5M0U5MEMzQ0I2MUJEMUYxQzU2MDhFOEQxMEZEQUE1QUYKKzoxMDZFMTAwMENBNTQ3RUVEMDdEQzFFNUE3ODZBNzk3RERFNkYyMDBGM0EKKzoxMDZFMjAwMDM2RUQ4OENGMDBCQkQ5QjEyOTlDQkYxREZDQjUyMzBBMjQKKzoxMDZFMzAwMDAxQkQ0REU0RjBFRjNEQjREREYxQkFDRjgwRkM3NEM3ODUKKzoxMDZFNDAwMDkxNjU5MjYxREI4N0ZFRDA4NUNGOTk0N0NERDk5OTc0NDIKKzoxMDZFNTAwMEJDOTlERDkxNjlFMEEyQkFGNTQ2RDk3MUJBQUZCMkYxMzkKKzoxMDZFNjAwMDQxRERFQjk1RjlBMEVGNjExRjZBOEM4N0Y5NDI0MUQ4QUIKKzoxMDZFNzAwMEU3NEE4MTc5OTUyQzdGMkRFQURFOTRGNjlBOERBN0Y4NjIKKzoxMDZFODAwMDIzMThBRjUyNzQzMTE5MjM4MzcxNDc5MjQ0MjNDNDU3OTYKKzoxMDZFOTAwMDg5REZFRkNFNEY0NDM0N0IxRTZBQzVFMTgzQjBDNUNDOTkKKzoxMDZFQTAwMDVERkM2MjAxOEMxMzIwMzFGRDI0RkE5RjI0NzRCMTFGMTQKKzoxMDZFQjAwMEZGQ0I5RDhGQjBGMDk5OTRCRjM0Rjk4OTBDRkRFNkUwQ0IKKzoxMDZFQzAwMDQxRDI3N0JDQkU3OTk4QTgwNkYxRUQxNkZGREFENjIyM0EKKzoxMDZFRDAwMDVCMUVBNjI1RDgyNzBGMzM1N0ExNzg2ODE1NDhDQTc4QjYKKzoxMDZFRTAwMEVENzhBNTYyQkU5Mjg3QkJFMzY4QUFFNzM3Mjk0Q0FFNkUKKzoxMDZFRjAwMEFFMjVEREY3QUUwMTM4MjMyQzlGMzNDQjg1QUYyRjcxNDQKKzoxMDZGMDAwMDdDRkRGMzY0QkE3MEFBNDJDQkMxQjNBMkY4OURCRDI0NDQKKzoxMDZGMTAwMDFDNTNFOEZEQjlBQjdBMkU3RjE5QkJGMzdDOEUzOTVFMkEKKzoxMDZGMjAwMEJDOTgzMTc4RkMwRDM1NkYxN0YxMkNCQTVEMTk0NERFMzEKKzoxMDZGMzAwMDJFNURGRUI4MTcwRTkzRUZDNzczMUM3OThDNDM2RkREN0YKKzoxMDZGNDAwMEFGNzU2MzlFQTFCNkI1QzgxNkY3MUJERUU5MjU2MUNDMDcKKzoxMDZGNTAwMEUzMTlFODFGMEVFRkJDRjM5QkI3NDFEQzM5QjczMEU0MEYKKzoxMDZGNjAwMDI1N0RDNzkxMkY1QzhENzEyMzJCOUYyRjE3ODYzQjIxODkKKzoxMDZGNzAwMERFMkZFQjQ2Qjk4NEYzMkMwRjQzN0U2MUIzQzFGMjA1REIKKzoxMDZGODAwMDlCODNGREM3RjU2NjI4RDE2NjA1RTM1MUQ3RTBCOEEyMUIKKzoxMDZGOTAwMEM2RUIwRjA2QjlDRTZGMkMwRTIwOUUwMzE0Q0YyMEVGNDgKKzoxMDZGQTAwMEI4RkY4MUY1MUQxNzc4REVCQ0RCOTQyMDdGNzgyMjFCQUIKKzoxMDZGQjAwMEYzMDUwMTk5OTQ0MDNDRTBCQ0UwMEI2REMyN0M4MjMzNDgKKzoxMDZGQzAwMDZGOUU4RTdGQjdDQjI2RTZDRDVCOEQzRTc5RjNFRjI4QTMKKzoxMDZGRDAwMEI2N0M4Mzk2MjY2RkFFRjk5NzYwREU1QzIzMzY3RkI3NkEKKzoxMDZGRTAwMEE4Qjc1RkFGRENCOUYyRTYzMDE2QzY2NUI2Q0Y4NkI4OTMKKzoxMDZGRjAwMDRDNzMzNjcxRTRDRDlCNDFGMEFGMjJFNDM5RTVFQUQ5MTgKKzoxMDcwMDAwMDU4NzdFNkU1Q0ZDRDU5QjNDM0Y2MzYzOUZFMzJCNjc5QjcKKzoxMDcwMTAwMEZDRTk4RkNERTczNjQxRkZEQzkxQTQxNkVCRDRFNDA4MDAKKzoxMDcwMjAwMDU5NkFEMzgzRUYyOTJDNEVCQjQxMDlGRjUwQjFENzFEQkMKKzoxMDcwMzAwMDcxN0VCMEYyM0Y4N0RFN0EwRkY5MEFBRTYzMjg1RTlCNUQKKzoxMDcwNDAwMDI5NUY3OTkwQUY0RTExQkI1RUI1QUUxNkZGMzQxQkZEQzQKKzoxMDcwNTAwMEYzODU3QTYxMEFDNkNEOTJFREEwODk3QzExMDg0NkMzRkEKKzoxMDcwNjAwMEUxMTRFRjRERjIzMEI5QjdFNjBEOTQ1MTNENEFFNTREQ0MKKzoxMDcwNzAwMDMxMjI5ODhGNTI3NUJBRTEzNTA2MEY3RjNBQjgyQzNFMEYKKzoxMDcwODAwMDZEMzZDNkIwM0EyODlENjBGRDVFRkE3NTRDNjM3MTRDNTIKKzoxMDcwOTAwMDg4NzA1MUI4NzZERDc4N0JBODNGM0ZDNzVBRTcwQzI1NEEKKzoxMDcwQTAwMDdDRDI4RUY3REM0QjUyRDdFRjU2QUI2Q0REQ0Q5MTU1RDEKKzoxMDcwQjAwMDJDQkY1RUU1Q0NBNzQyRkFEQTFFNjc5RDJFNDRGRjVEMjkKKzoxMDcwQzAwMEMxMzgyMUNCQTc4QTVBODRFNzQ3NEMyQjNFMUU0Q0M2QjkKKzoxMDcwRDAwMEMzMERBODMzQkNDQjA0N0RBOEFDNkEzNzA1QjhFNkIyQjMKKzoxMDcwRTAwMDdDNEFBRTE2RkQ1OEIxRDkwNzU5RUY2NjcyRUJDQTBGNEMKKzoxMDcwRjAwMENFOTU0RTBGMDlCRjU2NUREQ0Q2MDYxREZERjQyRDBENTUKKzoxMDcxMDAwMDQxNkM2RjZFMzBGMERBRDIxMEM2RkI2RTNBMzYxQjJGMzAKKzoxMDcxMTAwMDA3NkZDMUJBMzQxRkM2NjVEMzhERkY2MDQzMDhDNzg5QTYKKzoxMDcxMjAwMDM1OTRCMUYxNzhERTlDOTBDQzI2RTAyQjU1QjRFNDY1MjMKKzoxMDcxMzAwMDE4QjZGRDEyN0Y2RTE2MzQ4MUZDNkQxN0Q4RjM2QjVBQUEKKzoxMDcxNDAwMDJFNDU3OUIzRjg2Nzg3RDE3RjVDNUE0QUNDNDAzRTE4MDgKKzoxMDcxNTAwMEVBRjg3REY5RjUyN0I4Q0VFNjU5N0VENEFGMDNDOTUxRDgKKzoxMDcxNjAwMDU2Mjc5Qjc3QjBGMzI4NDk3QkMxRTZEOTMxNEJDMzc5QzkKKzoxMDcxNzAwMDc2RTQwRTMwNEY5Q0NEMzMzMEZDMEM1RkRCMEU5RUMyQUMKKzoxMDcxODAwMDNBMDQ4NUYyMDNBODI4NDUwRkE3QUVEM0UzRjJENjc3RDkKKzoxMDcxOTAwMDFDMEZFQUY5RTYyMEFCMEI1MzhCRkQ2MTUwRkVDRDA2QzgKKzoxMDcxQTAwMENGMzcxNkIyN0NBMzVBMzJCQzAyRUVBQkExQ0JCMDRFQTUKKzoxMDcxQjAwMDVDMkRGNTYzM0U0RjJEMUU3RTBCQjRCNzFERENBMjU3MzAKKzoxMDcxQzAwMDgwRkQyODE0NDM1RTAzRUM3NjM3OTE3MzUxNkMzMDdFNUEKKzoxMDcxRDAwMEFCMTY5N0RDMDZGRDc1OTA2MzBBQzcyODBGREI2RkE5MTUKKzoxMDcxRTAwMEM1NTdERDAxRUYxRjlDRjI5QUQxNDRGQjM3MTdGQTQyRDUKKzoxMDcxRjAwMDFFOTBCNzZFRDlDMUZGODNENjEzODVDRTNDMUE5MUE5RDQKKzoxMDcyMDAwMEJFQTBGQTZCREI5NERCNEI1MDNFMzU1QjlENjQ4QTdBMDMKKzoxMDcyMTAwMDQxOUJERUQ4QTBEQUY0ODY0QUU2OTg4MDg3NzQ3QTg3QTQKKzoxMDcyMjAwMERBREZGQkQ0QkNCRUUzNThFRjZGNTAyMkY1MkFFQTg1QzMKKzoxMDcyMzAwMDA4NzFENkJCQTdDRTY3NUJGNDAwMzcwQkYyOTE3MjMwQjIKKzoxMDcyNDAwMDU5QTdCN0EwNjA3ODZGN0VEQkFBRDM3M0U3QjVFM0Y0RTQKKzoxMDcyNTAwMDVGQUFCQ0I2QkJGRUZDQjNBQUQzREJBOTI2RUJGNDQ2RkYKKzoxMDcyNjAwMDQxOURERThGMTUxMkVBODRCQ0ZDMkZBNUQwM0VBMzJGRDIKKzoxMDcyNzAwMERGQjlDNzczOUZCN0EwRkU4RjA2RkI5Qzc0NzJGOTMzMEEKKzoxMDcyODAwMEQ1OTkzRjJEODhCQUU4N0VBQkQ3MzFERjJCMjAyRkE1Q0IKKzoxMDcyOTAwMDAzRUI5NzkxNTVDRTcxNDZENTNBRUI2QTJGQTlDRjcxODIKKzoxMDcyQTAwMEI0OEJDQzExOEVGRTk3QjY4RTcxM0MxRjFCQkZDQ0YxRjgKKzoxMDcyQjAwMDdDRkNFRUE5OEVGNjg0QzQ1NThFRkU5N0I3NTUzOERBNUQKKzoxMDcyQzAwMDEzREJBRjczRjQ5RjdDNjA5MUEzM0RBNTczQTVBM0ZGNkYKKzoxMDcyRDAwMDE1NUQ2QjFEQ0ZBNzFGNUVFNzc4M0VGM0Q4M0Q4RUY2OTgKKzoxMDcyRTAwMDk1REQ1RjczRjRBRkE3RUU5MDBBNzI5QkNCRUI5MDczQzIKKzoxMDcyRjAwMEYzNDU3QjlFQjYzNThGREEyNUJBQ0ZERjkxNDcxOTA2NjUKKzoxMDczMDAwMEUzREZBQ0FFNEI2NThGOTM3OTQzRjc3QkIyQTE4Njc1MTMKKzoxMDczMTAwMENDRkI4RjlCMDM1NzIyRDdBMTNEOTU4REUxMTUwNkRFNEYKKzoxMDczMjAwMDlGMzEwRkFFNjQ5QUIzQkU1NjM1NTg3RDMyRUNFMzlDNjQKKzoxMDczMzAwMEY1MDJDRTNBNjM1NURBODY3OTNBQ0ZGMTJGNzcwOTkzODEKKzoxMDczNDAwMEZBRDI1NTJENzRDQUMxNjBFQjk0MTVDM0Y1REUxMEU1NzEKKzoxMDczNTAwMEUyQkMyNTE3QTNBODVDNjBGQ0VENjMwOUNGQjVDQ0M5REUKKzoxMDczNjAwMDQ0RkZDMkI2OUY0MjNDNUFGQkE5NkIzNDEyMDMxN0QzQTkKKzoxMDczNzAwMDkyOEJGMjU1M0QyMzVGQzU2RUQ2M0VDQTIzMEVBNTJFRDUKKzoxMDczODAwMENFOTJCRjgwNERFRkMzN0VDNUQyMzNDRDY1ODNEM0FGRTAKKzoxMDczOTAwMDUyRTIwQTg3M0ZFOUJFMzYwNUQ2QTVEMzhGMDUxRTlCNkMKKzoxMDczQTAwMDdGRUZENjhGMzM5NDQ4MjEzQ0Q3RTRCMDQ5NkNGMTFBNzMKKzoxMDczQjAwMDUyQUIzOEUwMUUyQzlDOUZENDBFREM0NTE5OEVBNEQwMTUKKzoxMDczQzAwMEUzMkFBOUM1QkFBQjk2MTU2MTBDMDI5MDNBRTJFMEQzNjQKKzoxMDczRDAwMDlEOEJGRjQ3MTk4QzRCRkRDMjE5Q0U3NTMyQkZEMEVEODYKKzoxMDczRTAwMDRGNTNGRDg2RkVGNDBFRUE0RkEzQkQ3M0U5NDdBQUE3RUIKKzoxMDczRjAwMDRDNUVGRjY1MzAzRjgyRTk0M0Y3M0EzRjJGM0ZGQURGQUIKKzoxMDc0MDAwMEMwNTlFRDg3NUU4MUEyNTAyNUVFMEZGMzQ0MDJGQkMzMDUKKzoxMDc0MTAwMEU2NTk5MTIwQzRFN0FDQkE3OUVCQkQ1NkNGQTUzODRFRkEKKzoxMDc0MjAwMDJDNTcxNTIxN0UxOUVCOUE4QkYxRkEyNjJEQUFCMTNDMjcKKzoxMDc0MzAwMDcxMTRDNzY5Q0ExNkY1NTQ3NTYyNzUxRTk2MkZENkVBN0YKKzoxMDc0NDAwMDFGMThCQkJGOUZCODhCQTY5MjY4QUE3OERBNEUwRkNCRTUKKzoxMDc0NTAwMDA3QzVGNEI1NUQ2MDQ3MzNGMzU0MDNGNkRDQUQwNzRGNjEKKzoxMDc0NjAwMDQ1MjA4RTI0OTdDOTNBRUNENzA5MDVFNjFENUI3RThGMkYKKzoxMDc0NzAwMDkwMjhDNjk5QjRBMDg4NzY1N0FCREY4MUYzMEYwNEVGNEMKKzoxMDc0ODAwMENEMUU4MTlGRkJEOEQyMkZCQzVFMzU3NURDMjUxREJDN0YKKzoxMDc0OTAwMDVCMDBERTY5MDNDM0VCMDU3ODhCNjBGRTZEMzg3RjhEODIKKzoxMDc0QTAwMEM3NDg4OTdGODU4NDJCNjcwM0RENEU3QzM5ODJFOTU2ODYKKzoxMDc0QjAwMENBMzYyMDFGM0JDQUQ4QkU5QzFBMDIwNzdGNUJGQjFDNDIKKzoxMDc0QzAwMENBREYwRjdCRjJCMDdFMTVGOURBM0FFNzcwQTM0N0M3M0YKKzoxMDc0RDAwMDc5MkNCQTkyQzIxQzhDNkIwNEEyQjFCMUM1OTRERjMyNzQKKzoxMDc0RTAwMEEzNkMzRkRGQUI5RjE4MUY2NTJBNjEwMkYxMkNEOTJGRDcKKzoxMDc0RjAwMDYyN0U1MEU1RjExMEFCREYxRjM4M0U5QjY2NzUyM0JEMDEKKzoxMDc1MDAwMDM2NUYyOTkzNEQ0MjZGOUQ3NUFDOTBBRTZCNzJFRkJBQUEKKzoxMDc1MTAwMEZFOEYyNzlCRjEyNzlGRDc0Nzk2NjQ2MTVEOEFGNDRDQzUKKzoxMDc1MjAwMEIwM0ZCREVERTNGODcyRUJFRkVGNzlCOEZFMkUyMDA1MkEKKzoxMDc1MzAwMDRDN0Y5NzJFODc3Qzc3QkE3MURDN0U0QzNEOEZGMzBFQTMKKzoxMDc1NDAwMEJEQkU5RTlGMkZGMERGRDMwNTcxMjYyQkNFNDc4MkQzODEKKzoxMDc1NTAwMDUyQzZFNTdCRjFDQUYyOTVCREY0NUQ2RTc0NTJGQUM5NkMKKzoxMDc1NjAwMEQzQTc2MjlFREMzQUFGNDBENTk5QjM1RTk4RDNEN0EyMzkKKzoxMDc1NzAwMEFCMTU0NzI3NDExNjNGQjJFOEVDNERFMjczNEZCRkY4MTkKKzoxMDc1ODAwMEY0ODJCQzVDRDExNzlGQkZGMkYwN0NDMzdGMzE3Q0JFMUMKKzoxMDc1OTAwMDAyM0UwREJENjY2NkIyRjNFOUU0RDA1NzA5RTZBNTBBREUKKzoxMDc1QTAwMDlENzI2OEJENjdGMUJCN0JGRDdGRkEyRkNBNEZENkZBOEIKKzoxMDc1QjAwMDJEN0U0OERGREY0Q0I5QUZCMUYyQUI5OTlDREYzNDM4OTgKKzoxMDc1QzAwMDY1NDUxNUNGQUI2NTZGQjc1RTBBRkJEN0EwMUZGNzdEOEEKKzoxMDc1RDAwMDk5NjUzMTNDREZBQjEwNTMwN0JEOTA2OUVENkJGODc5Q0QKKzoxMDc1RTAwMDIzQUI1RUM5NTdFQUY0Q0IzNEQ3RkU0NUU1NzU1MTdEMzAKKzoxMDc1RjAwMENFREI3MkZGQ0Q3RDhFMkE4OTVGMTdCRDI2NkI2OUYyQzcKKzoxMDc2MDAwMDYzODMzQzdGQjQ4QkU3RUIwQUVBRTI4REIwMUYyRUI4QjAKKzoxMDc2MTAwMDk1RDVGQkVGNTFDODZBQThBRjFDNTE2NThBQkU1Q0M4RkUKKzoxMDc2MjAwMERGMTQ3RDNGODNBRUJGRTBDNTg3MUE0NzAyNDk2RTM1NDAKKzoxMDc2MzAwMDhBQzBDRDc4NDYzMzFDNzZCOEUwQUU3OEI5OEYzRDlGQ0UKKzoxMDc2NDAwMDAyRTMzQ0E1MzFCRDVCNTAxOUM3NzNDRTREQ0Y4RkNGNDAKKzoxMDc2NTAwMDAyM0ZFMTk1Qjc5NkVCMTAxRkY4MjhCNzE4Rjc0RjY3NzAKKzoxMDc2NjAwMDVFRjA4NDQxRkY5RkM5MjE1NTU4MTdGNkMyQ0NEN0MwQTAKKzoxMDc2NzAwMDhGRkY3RDQzNTc4RTZDRTM5MzMzREY3RDdEODY0Mjg5OTgKKzoxMDc2ODAwMDc0RTZCOUQ3NjdDODQ4QUM4NDYzRkUwRDE3N0YzMTAzMzEKKzoxMDc2OTAwMEUwMzYyQjQ4NDkyREU0RUY3NDk1QzBCODM1MUFDQjk3RTYKKzoxMDc2QTAwMDU5RjUzRUJCODZBQjJENzBGREE5Mzc5QkM1MTNGM0M1QkQKKzoxMDc2QjAwMDFERDBBRTg3ODAxOEY4MEQzQzlFN0ZGNTY5NjMzOUQ0RTQKKzoxMDc2QzAwMDVGNjY3NzI5MDJENEUzM0QyNDk4QTY5RjVFQ0Y5Rjc4MUEKKzoxMDc2RDAwMDQ4MDAzRjRCRURBQzg1MzAwQkJEMUYzQTA0MjgzN0M3M0YKKzoxMDc2RTAwMEIyN0RDOUY5MjI1MjUyNDRGNUJFRUY3MEVENzhGNEE3OEQKKzoxMDc2RjAwMDVERjU0RTE2RkZDQkIzMDlFNkZCN0E2RUQ0MTI2MEFGOTAKKzoxMDc3MDAwMEI3Q0JDNjM3NTY4MUZENUUyNTYzM0RDRTc2RjkzMENBQ0MKKzoxMDc3MTAwMDg1OUI4RUM3QkQ2MzlDRjVCOTNDMUU3REU4QUQzQkUyMDEKKzoxMDc3MjAwMEU1RjRGRDdCQTY4OEM4QUZGRTEzNTNCMjQ4MEFGOUREMjUKKzoxMDc3MzAwMERFNTA4NkYzMDcwQURFQUUyQzA3QjAzRUE2Nzc2N0Y0NkMKKzoxMDc3NDAwMEVFOTNGQzMyMzFCM0E4ODk1NDhBNDQ1M0ExNzhGMTk3NUYKKzoxMDc3NTAwMDExRjJCNjhERUY1QTQ0MTJENkU5RjMxNzFBMDg4RUQzRjgKKzoxMDc3NjAwMEQxQTBFMUI1QUQ0MTFGNUI0QzM3MDZERjZBMDhFMjc1NzkKKzoxMDc3NzAwMDY3ODM4MUQ3ODcxQjRBRjBGOTgzMEQyMTg3RENDMzdDOUYKKzoxMDc3ODAwMDZGOTdGMDc2MEE3RkU1RjNCQTNFRDA0MEU3QjVDMUIxMTYKKzoxMDc3OTAwMDZCMjI5NTdBNEFBRjVEM0MxRkY1NDBFOUQ0QUNCNUZENEMKKzoxMDc3QTAwMEM0QzFGNjM0NzQwRDlCMzM5NjIzMEJFQTRERUJGNEJENDQKKzoxMDc3QjAwMDVCRkI4MTdGNEZBM0IwN0ExMUY4MzU3N0NCOTE3REE4MjEKKzoxMDc3QzAwMDFGQTMwNThCNkNGQTkxRkE2RDA1ODRCMkUyQkQyRDIzREYKKzoxMDc3RDAwMEU2Q0MyOTQwNzk0NDc5OTk3NjM4OEFGRTc4NDEzMDJFNzIKKzoxMDc3RTAwMDQwMUNCMUUwMjhCQjZGOURCNzQwN0E1MTQxRkI2MUVFNzAKKzoxMDc3RjAwMDFDNDEwMUJENTk0QURBMDEyQ0I1MzQ0QTJBNjhGRjk5NjcKKzoxMDc4MDAwMDc5NEJDQUUxM0U5OUU4QkMzRjQzNjVGMjBERTM1NkQwOUYKKzoxMDc4MTAwMEVCNkMyREYyMjM2RDNBN0NBNzYzQjdGOTJDNURDRjFGN0IKKzoxMDc4MjAwMDNCM0MwNkU0NzkxRTdDRjk0RjJBRUMwQjYyQkY1MjM1RDMKKzoxMDc4MzAwMEYwNjMwQTVFM0M4MTc1MEYzMUExNUI4NUNBRDhFMzVBQkIKKzoxMDc4NDAwMEY1MUM5OUVBMTlEQzBDNjI3Qzk1MkExNkNBMjczMUQwRkUKKzoxMDc4NTAwMEIxMThGRkVDODlDREYxQzM3OTk3RTgyOTdCRkY1REJFQjQKKzoxMDc4NjAwMEU4RERGQ0U0NDg1ODBCNTIzRTRBRTYyRkQ2QzdDMjc0MDYKKzoxMDc4NzAwMEQzRjkwMkNGNUYxQ0Q3RDZDNUNDNDI2OEQzRkU1MzU4OEMKKzoxMDc4ODAwMDNCNDZERjdGMjEzQjNBNTJDQzg2QTI4QkFBNThENzk3NDIKKzoxMDc4OTAwMEEwNkRGNUFGOEE0MUJERUQ5QjVDRUYxMDdGQjQwOEU0QUQKKzoxMDc4QTAwMDJERDlENjY5M0JEM0Q2OTY1OTlCNjhFQzZBQUQ3N0MzODAKKzoxMDc4QjAwMEExM0ZCRDA2N0FBRUZBNDVBMTFENDBBMzdBOEZFMUZGMzQKKzoxMDc4QzAwMEMwNDM1ODc3REJENkQwQTVDNzE0NEU3RjhCMEU1NDI0MDcKKzoxMDc4RDAwMDI3MDQwOUQ2RDNBOTA5MjEzMTg2RUE4RjA5RkNGQjE0QjQKKzoxMDc4RTAwMDA1RDNDMjQ2MjNFOEQ3ODQxMjAyQkQxOUYyMzFCRjcxMTUKKzoxMDc4RjAwMDQyODI4RTYzOTNBQjA5NjlCRTgzODI3OTVGQTBFMzM2Q0YKKzoxMDc5MDAwMDU2MzdFQ0U2QUY2N0JEMkMzRjUwNEZDQ0FEOTAwNzIzMDgKKzoxMDc5MTAwMENGMjgzQUU2MjM3OTlDRjJCNDY1RTdGODdFRjUyRTJGNUUKKzoxMDc5MjAwMDZCMkE5QjRDREY2NUEwN0ZENkM4MTgwNzVCNUYxNDJGQkUKKzoxMDc5MzAwMDU3RTkzQ0VCN0Y1NDE0QTI5NjE1RjI0QTU4RDdCMDNFNTMKKzoxMDc5NDAwMEJCN0RGODU0OTY5NzcyQjQxRkUyNzVCNEMxNkMzMzFCQkIKKzoxMDc5NTAwMENFMEY1NDFGNzg2ODM0RDQwNTU0OTNGOENENUYwMzc4NjQKKzoxMDc5NjAwMEZGOTVFNTFGNEYxREJDMzJFQjZBREFERTQwREIxMDdGNkUKKzoxMDc5NzAwMERERDBGMUJBMUFBNUZEODY3MUI4QUIzQkE2NUMwN0VCNkEKKzoxMDc5ODAwMEFCREUyNjEyQjE4OEM5Njc3ODNDQzU3MzM4N0U5OTRDNDYKKzoxMDc5OTAwMEY5RTQ5QUFEMjNFNzdBMjk5RDlGMUExM0Q2NDVDQTA3QzEKKzoxMDc5QTAwMDJCN0RFMzlBMzU2OEFCRkEwNDkwOUI5NUJFODlDREMwRDgKKzoxMDc5QjAwMDU3RUIyN0YyRUYzNTkwODlBRjg2NjU1RTJGNDVGOTYyNjgKKzoxMDc5QzAwMEQ4OTY4NjE4RDQyN0VDNUY1OTc5MUQ5OEQ5RTEyMjkzNkYKKzoxMDc5RDAwMDVCQ0E4ODk4M0Y5NEIyNjM5OEI3Rjg0MzMzM0JFRjAyOTEKKzoxMDc5RTAwMDI5RkQ4RDk0MEVDNTMyRTk5MkU5NzU5N0NBRTg2N0I2MEMKKzoxMDc5RjAwMEM4MTgyRkE2Rjc1Qjk1QTk0MDk3NzgxOENGNTdCNDMyQ0YKKzoxMDdBMDAwMEJEM0ZGNjQ1MEZDNjlEOEI2QkMzNzdBMjVGQTA5N0UyODMKKzoxMDdBMTAwMDNFNjUzNDQ5RkU2MDVFRkExMkY4OEQ4RTMzNUUyN0U1Q0UKKzoxMDdBMjAwMDcwMEVFMUM3NUUxNjJGMkM1RUIxNkMzREJDMjc2NTJFMzMKKzoxMDdBMzAwMEYxRTFCRTVDNjJFN0EwQzhCNzU5OUM3QTk3OTg2OEQ3MTUKKzoxMDdBNDAwMDQwQ0UwM0M1NDhERjVEMDFDNjE3RTZDM0E1QzgxN0ZCRDYKKzoxMDdBNTAwMEM1OEFDQkVFODZCOEE0QjA2NkVCQkYwMDVEQjM4QjA5RDgKKzoxMDdBNjAwMEQwMTVFRURGNDNFRkVGRTdGNDk0QjI0MzNBRDA2RjNGMjcKKzoxMDdBNzAwMEE3NjcyQzIxOUE1MDFGNjNERDdGNDE1ODdCMjdDOERCMDUKKzoxMDdBODAwMDNBRUZGMzczMzQ4QUQ3RTE5RTcwN0MxOEE1QzM5RERFNkMKKzoxMDdBOTAwMEU3NjNDMTAyQTRDMzE4OERFMkZEQ0UyRDFEMzE2RDE0MjQKKzoxMDdBQTAwMDFEQTczMTNDNDJCN0I1QzdGRjk5N0EyMzk4OUZFQzQwOTgKKzoxMDdBQjAwMDc5OTZCMzFGNUUwN0YyNEU5RkJGQTJEMTc1M0U5NUMzNjQKKzoxMDdBQzAwMEY1MDU3RjVFM0MyNkE5M0ZDMjg0REExQUE5QjE1NzlGMEIKKzoxMDdBRDAwMDY4RDQzRTE0REJGQUNGQTFGQUUwQzk0NzU5MURGQkY1ODMKKzoxMDdBRTAwMDc0M0U5MDc3QkEwRUNDRkZGNjRDOTAxMzUwOUZFNUEzRUUKKzoxMDdBRjAwMEIwODBERkUyOUIzODA2RUJGM0U4QkEwOUY4MjUzRDEzQzYKKzoxMDdCMDAwMDY1QjRCMzU2MUNEQjMzNDFDNEY4MTJGNDA3N0VGMDhEMjQKKzoxMDdCMTAwMDYyRkRBOUEwNDQ0MDZGQ0E4NTMyRUU1NzY1Njk0Rjc4NkYKKzoxMDdCMjAwMDgyMDFFMTYzOTZENzE1RjQ4NTc4NkVENTVCNjJDQkUzNkQKKzoxMDdCMzAwMDkyREUzQTYwNkMxN0UxNjc2RTFDRURCMTlFRUUwMjkxMjkKKzoxMDdCNDAwMEZBOTVCOUM3MTcwQUEzRTk3ODc3NzhCOUJGOUQ0QkZEQjUKKzoxMDdCNTAwMDZEN0E3RkJEOTdFOUE1RkIyM0U2OTcyMUM0NDE4Q0VFQTIKKzoxMDdCNjAwMDAyRDQ0RjI0MzIxNUFFRjkzNzE1RTc0N0ZCQjE0QjdERjAKKzoxMDdCNzAwMEZERUE2RUY0MUY3NkY4NTM5RkQzOUNFRTYzRkJGOTI2NjMKKzoxMDdCODAwMEZGMTExREY4QUQ5RTUwRjkwN0I5RDAxOUJGNTlGQUMzQkUKKzoxMDdCOTAwMDNBOUZFMEFFMjdCNkY0ODk5MkNERDY1ODM3QkYyMjFGNjAKKzoxMDdCQTAwMEY0ODBDQ0VCOTM2NDNEQTQ0MzdENjU3OUU2MzRGNEZCMkIKKzoxMDdCQjAwMDlFRjQzMkJEMjcxREJDRjIwNjM4QTdBMUZFMkJDQjBCQ0QKKzoxMDdCQzAwMEVERjE0NjMxOUVENDUzNDBEQTgxNUZFNTYwOThEOEYzRjkKKzoxMDdCRDAwMEJGOTYzRTY4NjlEMEYwRkFDNEQ0NzExNTIwMjc0RjRDODcKKzoxMDdCRTAwMDFENUVBMTUzMTkzODM0RTlDNzVEOTA2NzNBQjc4N0M5NUMKKzoxMDdCRjAwMEVGQjlDM0I3RTFGOUM3NzMyNjhCMzcwMTVCNjE1Q0IyOUMKKzoxMDdDMDAwMEYzMTEzQ0FGRkJCODFDNzkxMEVCNkFBMTNFODI4MkI0NDEKKzoxMDdDMTAwMDJEREI1OUJGNTVDQ0YxNjI3MkZERDRBQ0IwRTc5QjFCOTQKKzoxMDdDMjAwMDU4RkM1OEJENzAzOUM2QjU1NEFFQzczREQxNUJGMURDQzgKKzoxMDdDMzAwMDg2ODdEQTMyMzg1RkE5MTFEMzY0REYzQjYwNzhEMDBBRDcKKzoxMDdDNDAwMDlEREZDMzUwMkY0Q0MyRjc0RDJGOEIxRjU5RjUyMkVFRUQKKzoxMDdDNTAwMEJBMTAwQjlFMTkxQzlFQkVFNzMyOUNGNEIwRjY1RjE2NUMKKzoxMDdDNjAwMDFEQUNGN0VCODQ3MEJFREUwRkRGRDQ1QzkwNDhDMjE2MEIKKzoxMDdDNzAwMEZGRThBREVGNTZGMUZFNTlBODhCQ0Y4MjNBOUU2OEZDMjMKKzoxMDdDODAwMEVBMjI5MDgzMDRFRThGQkNGRTNBNDJGOEY3OTU5MDRGQkIKKzoxMDdDOTAwMDgzNzI4RkJEMEUzREMzNTUxN0RGNDc1RTBDNjdEQjVERkEKKzoxMDdDQTAwMDE3QjExRTk4ODNEN0YxNjEzREFCNENCRTI5NTA3QTlGMjYKKzoxMDdDQjAwMEM5RjhFRDBDRjA2QjZCQTg3QUQwMjA0MDI0OUIzQUNDMkQKKzoxMDdDQzAwMDdGOTZGQkZCRjI4Qjc3ODc0NzFBMzYzRTE3MENDNzNFMzEKKzoxMDdDRDAwMEExRkFDMDQyOEMyM0Q0RUNGNzYzQkQ3RjM1RThCRkM5NUQKKzoxMDdDRTAwMDcwNkVDMEVDRjIzOENFMEI4NDNCQTEzRTRGMzlDMEM2NUIKKzoxMDdDRjAwMDdCMTJFMEExRjdGRkE4NTcxNUMwQkE4RkMzRkUyNzBGNkMKKzoxMDdEMDAwMEVDNDk1NDYyODc1RTBFMjMxRTYyREVGMDMxQTIzMzdEQTEKKzoxMDdEMTAwMDI2NTM5RTg4NjU1QkZBQUMzQTA2MUI4NjVEMkE3MUY4OEQKKzoxMDdEMjAwMDRCQkI3Q0JDRURBQjhFQzU0QTdCRUIzRjhFNkJGRjBGMzQKKzoxMDdEMzAwMEY1OUI1NURGNzE1Q0ZCMEZGNDg3NzZBOUYxNEVEMDc3ODgKKzoxMDdENDAwMEU2MEIxRTAzRUMxNzdEMUZDRkVGOUEyQjRCRDAwRUM0MTIKKzoxMDdENTAwMDhBQzgwOEMwQzMyQkQ5MkFFQUI5RDhGMzlFN0RBMEU3MDgKKzoxMDdENjAwMDY2NkJEMTM3MzVEQkJFRTE0Q0Y2MUJBMzYxRkY5NTYyMzQKKzoxMDdENzAwMDNDRDMzMURFQThBMThENDdFN0VGMDBCQzVBQ0Y1RkM5RTUKKzoxMDdEODAwMERFODVFNzE2RTk3QjA2RTYwRDBCMEY4RjVFNDNEQkMzNEUKKzoxMDdEOTAwMDVGRjBFMEI5MjE2QkJGRTlFNkNCN0MyRTVGMkRBRUYzM0YKKzoxMDdEQTAwMDgwMkFDODlCMUZGNDZEMkRDQTk5MjdFOENDODM1OTcyOEQKKzoxMDdEQjAwMEE3NUU5OEUwQzgwNzNDMDk3Njk2RDI0Rjk1QTMxMEEyMUIKKzoxMDdEQzAwMEE0Q0Y0QkYxQjlDOUY5QUM4NUQ3MjNBNDlGMjcyN0NEMDAKKzoxMDdERDAwMDNDNTdBMDNDQTc5RjY3MDY5Nzc3QzJFNTU4RDY5M0RGMkMKKzoxMDdERTAwMDg1RTlFN0RDQTAzQjRGRTJENjUzRDZENUQyNTNERkUyOUMKKzoxMDdERjAwMEZDMjk5M0U4MTUzRTNBQ0ZCQTQ0RkIzQzFGQkUxRDlEQkIKKzoxMDdFMDAwMDA0N0VGMDA3MUEzQjA3NTVEMkY2RDBDQjYwOUVCRkU5M0YKKzoxMDdFMTAwMDA5REZFRjlEOEVFN0JFRkVDOTlCMzc3NDc5NThFOTIzRDEKKzoxMDdFMjAwMEJDMkVCMzhGMUU2MkZFRDVBRENDNUZBRDlCM0YxNUZENjIKKzoxMDdFMzAwMEJCQkFFRDYzNzRGQjM5NDVGN0I1RUE0Mjg2NDMwRjBERDMKKzoxMDdFNDAwMEYzMUFGQzdCN0IyNkVBQTNBQTBCMDE3Q0ZFRDlDREU3QzMKKzoxMDdFNTAwMDc1OUM1RkU5M0I5RjFGOUY1QkYzRERFNUQyQjM4NzI2RUYKKzoxMDdFNjAwMEZENzQxNzlDNzNBRkZCQkUyMjdBNkNGM0Q0N0Q5RkQ3NTEKKzoxMDdFNzAwMEZGN0JBOURFNzVDQTdCMThFNDVEMkUyMkM5RkEyRUQwREQKKzoxMDdFODAwMDBGREI1NEFCMUQ2RTlFMzMwQkZDNUE5QjdFMjgwM0ZGMDkKKzoxMDdFOTAwMEFCRjc3REY4Q0VERDM2MUZFRjZGNTZBNkVFOUZFMUVBMTkKKzoxMDdFQTAwMDNGQzYxQTdGMjFGNjc3QzM5M0Q0M0ZCMDFGQTNGREU1RTkKKzoxMDdFQjAwMDNGN0IyQ0Y4NTA3RjNEMjRCQUM2Q0JCMUU2QkYxMUM3M0IKKzoxMDdFQzAwMEIzRkNFRThCREFEQTU3NEQxOUY4MzQ1RTBFRkJBNzlFNDEKKzoxMDdFRDAwMERCODgwMURGOUY3ODVDMEVGOTQyNzZCRUQ1MThCRjU2NkQKKzoxMDdFRTAwMDVEQjhENDQxRUY1RUJDOEY3M0RDN0ZBRjIxRThBOEQ3Q0IKKzoxMDdFRjAwMEJEMjM1QTg3NzVEQTE3NzlGQ0E5OEE3QUU2RjhERTlFREYKKzoxMDdGMDAwMDkxOEUzQUREQkZDMUYxNDlFMUI4M0EwRDFDRDc3Q0MxNzEKKzoxMDdGMTAwMDcwMTQzOUU0QjMxNzhFNjJDN0ZENEYwQUM3NDI4REU5NkEKKzoxMDdGMjAwMEFGRTVGQzNBNTc2N0U3NjZFNzFBNDJBODg5REU5QTRCNDUKKzoxMDdGMzAwMEVGN0IyOUFGN0Y5OTVFMzU3QTlEMkIxM0QzOEZERjQ1NzkKKzoxMDdGNDAwMDREQjBGRUI0MERGQkZCMUJGRTdDRUZCQkQ3NjJBMjJBM0IKKzoxMDdGNTAwMEU4QTgyQjkwNzg5REI3NUJFRkMwMzk2RjU2RUZBNjM5MzQKKzoxMDdGNjAwMEJFMEY2NzVEN0QxMkFCRDc3NERGRkZEMEM3RjBGMjhEMTcKKzoxMDdGNzAwMENCQUIwOUY4RDNENDU3NEY3OTZFNkQ5NzVGRTBERkZCMzkKKzoxMDdGODAwMDBDOEE4RTM4Mzc2RjVCNzVCRTlGMTU1QzcyMDY5QkVGNEYKKzoxMDdGOTAwMDFCOTc1RjRGMjBBRTJCRTdBNkZFQkVERDQxM0Y4M0JGQTAKKzoxMDdGQTAwMDQ1MEI2MzlENzg0Q0VGRkZCQjM0OUYxNDlFRTE0OTc4RUQKKzoxMDdGQjAwMEFFNDEzQzQ5NjlGMDU0NkJDMUEzQjNCQzYwNEJGMEYzRDQKKzoxMDdGQzAwMDgxQTcyNEMzQTI1QkZGRjhEOUNBRTEyNjE3MkU0MTNFNDAKKzoxMDdGRDAwMDkyMzg5RDVBNjBGRjk2QTJCRjk1RkY2OEQxM0U1RkY4MjgKKzoxMDdGRTAwMEMzODNBNEVGNzMxOTVGMEM3RDE3MEQ5MkJFQzU1QzBFQTEKKzoxMDdGRjAwMDVBRjRDRjE3OUU1QjA3MDlDRjc1MTZCRjA1QzM0OEFGNkMKKzoxMDgwMDAwMENGMEI5RUFGMEMxMjlFNjMxNkJEOENDRjE3M0ZBRDQ5QjAKKzoxMDgwMTAwMEZFRUYxRjlFQkY3MEI4RjMzMzU4MUNBNEE1ODQ5RDI3QTQKKzoxMDgwMjAwMEYxNDk5MTA3OEI4NDgxRTVDMjU3RUNEQzY3NkI4NTNFOTMKKzoxMDgwMzAwMDY3OURDREJCQ0VCQUFGNzRFQkZDMzU1RjY3M0E3OTVBMUEKKzoxMDgwNDAwMEE5MjRGMjgwN0VDNzFBNTgzQ0UwMERCRTNGRjk3NTU1NTEKKzoxMDgwNTAwMDUzMjZDNkU3NURGM0I0MDRGNzY1RjYxN0I3RjlFRjU1OTUKKzoxMDgwNjAwMENFNzNCOTAzQzlGMUE0MEM5NkZGQjkzMUVBN0M2RkY5NUMKKzoxMDgwNzAwMDhBMEM1NzFEOTk4OUZEMkNGQ0E1MUJFRkFGMDU2RjYxN0MKKzoxMDgwODAwMDQ4NjIwRTAyNkYxNDVGNTk0NUZERUMxQjNFNkI3Q0E1RTgKKzoxMDgwOTAwMDkzQkJBMUUyMkJBNjBGMEQ1RjAzQzlGQjU3ODY4ODJGNjgKKzoxMDgwQTAwMDRCNUVGRjVBRjE5NTBGRjg5QUZFMzdGRTFBMkNCRTE2NUEKKzoxMDgwQjAwMEZENEQxRTg3ODRBRjVCODcyQThGRENBRkZENkJDNUQ3NzQKKzoxMDgwQzAwMDYwRTVEMUJENkZBM0ZCQkI1MDdGREYxN0Y4QUNGMUU3RDQKKzoxMDgwRDAwMDlFRkZEM0UyRDExQTZGNjU5QTdENUUzQTdDMEUwNDg3Q0IKKzoxMDgwRTAwMDc1RkREMDM3NDhCQ0JBRjc5RjVGMzQ1RTVERjM3RjZBOTkKKzoxMDgwRjAwMEJDRjJGMTg2OENENzAxRTBCMEFFRjIyMEU1REJGMkVCMEEKKzoxMDgxMDAwMERBRDRENERGMTExRDk3QzlCRUUzMzY1RUE4M0QzMjFGMTUKKzoxMDgxMTAwMEYyQzc3RjI3NjE3RUZBQzg5RTM5MUJFQ0Y1NDBFMzMyMzcKKzoxMDgxMjAwMDk5QkY3REE0NzJGNjA2ODg5RjlFOEI2NDYwRUREOTUxM0QKKzoxMDgxMzAwMDMxRjRGMzY5OTA1NzVFQzRERTczOEY3Rjg0RTNDQjkzOTEKKzoxMDgxNDAwMDk5NkRDNTdGRjM4MEFFNDcyMzhCRkI5NTQ3NTI2OTVCRTIKKzoxMDgxNTAwMDE3RTY4RDZDRjQ5NUZBRTJGQjA4MzFCNjRGODMzQ0M0MDgKKzoxMDgxNjAwMDgyRDQ3MDU4NzQ0RTM3RUY1MEU5N0IzNEYyRjg5MEY0QjMKKzoxMDgxNzAwMENGNDBFQkZEMEZGRjk4NDFFQTlGMDRGNkNCMjVDOUJGMjYKKzoxMDgxODAwMEJCNzMxOUUwQjM0RDY0RjU3MEM3RTE1NjAxN0NENzhEMjAKKzoxMDgxOTAwMDYwQTdFNTJCRjJGNzAyOURFRUNFNjRGOUMzMEVENUQ4QTkKKzoxMDgxQTAwMDAwRjkxM0NGRTIwNTBGNjQ1MkJBMUQ1RDlBMkREOENGQTYKKzoxMDgxQjAwMDVGQ0VDOTY0RkJBRjE5QUI1MkVGQkIxNjcyM0VFODdERDAKKzoxMDgxQzAwMDVGMjBFMzUzRjA3Nzk4Rjc1QkJBOEE3RDdGOENDOEUxMzQKKzoxMDgxRDAwMDUxOEI2Q0U3NEVEN0JCOUVGN0ExNDc2NjAwRTEzODlBRkEKKzoxMDgxRTAwMEU2RENGRjAyRkVGRUYyMjVGREJGNEY2QUQ5Rjc3RDI4Q0YKKzoxMDgxRjAwMERGOERCMjlGN0I0REYyMTk5NzhGMzNGRUU4RDI0QzdBMTgKKzoxMDgyMDAwMDdENDM4ODdFRTczRUUwQTMwOTdFNzY2RTQ4MjY0NTUwOTIKKzoxMDgyMTAwMDdGNjU4RDkzMkI5MzRFOTVFMkZENURDNTE4MDU3OUNENTUKKzoxMDgyMjAwMDE0RTNEQzlDMzkzREZEMzhFOUYwNkFBREM3OUEwNzQ0OTgKKzoxMDgyMzAwMDExQkVEMzMzNTc2MzcxQzQ2OTYxNDI2NjQxRkNEMDEzRTgKKzoxMDgyNDAwMEJBOUJFNTBGMTkxRkU0RjAzQUM0OTlCNTE5ODk0NkQ4Q0QKKzoxMDgyNTAwMEY3Q0E3NDlEMzY3ODNCRkVFRkVDRkYwNkNGM0I4RTg4NjUKKzoxMDgyNjAwMDNBOUU2Rjc3RTE2MTIwRkREMDk0QzlGMkM5Qjk1Mjc0OEEKKzoxMDgyNzAwMDkzMTdGMjI2QUI4NTk0REZCMURCOThDOUZFREVEMUE0NUIKKzoxMDgyODAwMENDNjRCRDE0Q0UzMzZFNjc1NDgxRUY1RjJDOTM1OUZFREUKKzoxMDgyOTAwMDhCOTBFOEE4ODVCNkY5Mjc3MTdFNzNCRjk3MkJCMTdBQ0EKKzoxMDgyQTAwMDIzRjIyNjkzRTdCNjdERUI0NkE1OTI5RjVGNzAzOTlEM0EKKzoxMDgyQjAwMDk0NTlFMkE4NzM1QzEyQjk1QjAxRjk1Q0IyNjBBMTYyRTcKKzoxMDgyQzAwMEY4RTFCOTgxRTMyRkU1NzBCNEE5RDE1MTUzRkNCRDc4MzEKKzoxMDgyRDAwMDRBQUI4NzM4N0UzQThFNDU5QkUwQkIxRkFCRUIwNUFDQzMKKzoxMDgyRTAwMDEzMjhEREM4Rjg2RUY1QzY4M0UyMDY3QUREQ0JFNTZGQUMKKzoxMDgyRjAwMDIxRDBDMDM2REU3NzM5NUREQkY2Rjk0NjAzRkM2REM5NjcKKzoxMDgzMDAwMEZDMEQxRDk4QzI3MUYzNkU4MkY5OTAyN0I3OUY2RTgxQTQKKzoxMDgzMTAwMDdDNDhCNzQwNzhGRUU0QzY0QUE4NkJFOEU2RjU2RDJGQzYKKzoxMDgzMjAwMEQzRTc4RDgwQkYzOTc5MjhERkUzMzY3RTU4MDdGQUI5NjUKKzoxMDgzMzAwMDQzMjU3ODVFRTY3NzVCM0MwOTM4NEY2MEYxNEI1MjRGM0UKKzoxMDgzNDAwMDZDM0NERjAwRjVDMzhGQTg5RDEzODE2RkYyOUE2QUVGMzIKKzoxMDgzNTAwMDRCOTUzRjdEODlEM0UxOEZGRTQ4NTYyQTNGRDBCQTVBQ0MKKzoxMDgzNjAwMEZBRENFQUI3NDgzNjk0NTRGRDE3NTdCQUVDMUE4NzdCMDMKKzoxMDgzNzAwMDk4QTdGMzBDNDk5MUM3NENGMjYxQTI3RjNGRUQ5NzVDM0YKKzoxMDgzODAwMDhGRkZDMjk1RTc1RDcyMkM3NTlDRjE1NzlDN0ZEQjEyQzUKKzoxMDgzOTAwMDE1RUJEMTZFOTkxRTNDODc2MkMxNjNFMTJCRDc2NDc4REYKKzoxMDgzQTAwMDVBQjY0NDcyRThEQkQ1MEIzMjVDN0UwRkMzRUIwRDFFNzAKKzoxMDgzQjAwMEUzNTE1OEM3MjNGQjdFM0ExMUNGNTFCOUVDODM0RjhBNjIKKzoxMDgzQzAwMEFBRjBGQzBFRDJBOTgwOUU3ODVGMzJGMEZBNDY4M0YzQzEKKzoxMDgzRDAwMEVGQkNCQzQxQTJEQkE3ODNGREFDOTc1MkNBRDUxRjM5QzUKKzoxMDgzRTAwMEZGQkNCMUUyOTZBNTA4N0Y0Q0QyMDFGRTEzQUI4NjVEQkYKKzoxMDgzRjAwMDVGMDZGQTY1ODUxMjgyRUZBNjlGODhERDlCNzk5QjZERUIKKzoxMDg0MDAwMEZENDlCRkM2MDVEN0FGQUI2RUU5RDc2RTJENUZFMUE0QkUKKzoxMDg0MTAwMDVCOUJDQUZDMDJGMzNBMjY4Nzc3NTIxRTlEODVGQ0Q1RUEKKzoxMDg0MjAwMEJEN0QyNjlERkY0ODIyNjdDQTU2RDY5REMwREY5OTVBNUEKKzoxMDg0MzAwMENDN0Y3RjVGOENFRTk4NDlGNUNEMjk5MUU1NDlDQ0FGOTMKKzoxMDg0NDAwMDMwQkRCMTY0NjdBNDE5NTJBN0E3RUFBRjc4QTk5QkY2MUIKKzoxMDg0NTAwMEYzMDYxOERGRkRCNkJFN0ZGQkU4RTZBNzcxM0I5REZFODUKKzoxMDg0NjAwMERFOEM2MzQ0ODVGN0EzNzVBOUVEQzFCN0Y1MENGRUY3NjMKKzoxMDg0NzAwMEM0NDJBMzQxQkZEQ0I0MzE3NUJGRkYwNUNDNENFMTM5MjgKKzoxMDg0ODAwMEY1MTdBOTJBNTU3Q0YyMkE5REMxQkIzQTkyRkFGREFCOTkKKzoxMDg0OTAwMEY0NENGNjFDRUM1MjBBM0M5RjBCNjQ3MDNEQTc4RjA2MEYKKzoxMDg0QTAwMDNEQkQzQTBEQkMxRjA2MDIwOEVGM0JDREY3REYwNDc1NUEKKzoxMDg0QjAwMDIwRUZCQkJFMDNGRjRFODBGMUM1QzEwMEUzRUY1M0ZCQ0QKKzoxMDg0QzAwMDU2MkE3OTQwQTcxNjQxMDc3RTc4M0IzQjM0MDFGODZENjgKKzoxMDg0RDAwMDRERUMwNDlFNzczOUMwRjFGQ0E2MkYzMjI1MzAxREU0MDcKKzoxMDg0RTAwMDY1RDFEQzNDNEE5NzhFNTUyNDI0MThFOUY1RkY5NTAxQTcKKzoxMDg0RjAwMEU2MzdFNEYyNzgyREI1N0ZFRjgyRkRBM0FGQkU4QkZFQTkKKzoxMDg1MDAwMDg3MUMxRTdERTM0NDU2MDIwNTc1RTBBNzQ0NzMxREQ2MDMKKzoxMDg1MTAwMDE5RUVGM0IxQkE1MjEyOUE2RUY3RTNCRkNDRTEzOEI1NTcKKzoxMDg1MjAwMDdGNjhGNDVFMUE3MUY5NDE3REZDQkY3ODM1Q0VCQjNGQTAKKzoxMDg1MzAwMDQzODdCQTk0MjM5NTUyRTdCNTE0Qzg5M0ZCMzNGMEZCRjUKKzoxMDg1NDAwMEI4NkVCOTQ4MzdGRjUwRkRDMDUzRkI4N0U2MDcwRUI0M0QKKzoxMDg1NTAwMEVFMEQ4MUEyNDFGOTgxRTcyQTFGRDkzMTBERTQ0ODhENDIKKzoxMDg1NjAwMDRGNEFBNTdGMkQzRDdEOTRDN0RGRERGQzYzNURCRkNBMEIKKzoxMDg1NzAwMEY5RThGRDQ0RkY3MEREQjFEQjA5Q0Y0REI1NEU3ODJDMzUKKzoxMDg1ODAwMDc5NzkzRkQxRTQ1QjAzNzgyMjlEMTNFRDdFMjk5OTMzRkQKKzoxMDg1OTAwMDdEMDAzQkNCRjI1M0U5RTBEQ0VFRDIxM0MwNzk0MDg3OUIKKzoxMDg1QTAwMDNCQjlCRUY5NkRGRDIzMDEzQjFERENFQjNGMjVGMkZEMjAKKzoxMDg1QjAwMEMxQTNBQzJFNzc2QzY0NEQ0NTlFRDFDQjlGREZGQTlDNTYKKzoxMDg1QzAwMEY4RDJCMjMzRUU3MUZFQjNGM0ExNjVFNzA2RTJDM0RDODUKKzoxMDg1RDAwMDM0Nzk5QzQ5NzBEMDk5QkVCRjQ2RDY1NUM4RDc0RjBBNEEKKzoxMDg1RTAwMDE4QUM0REY0Nzk3MDU0OEI5NEYxQkE1MTYyOEM4NkYzQzcKKzoxMDg1RjAwMDVGQTdGNkY5RjBFRjQzOTk1QjNEODlCMTU0MDRERURGRTQKKzoxMDg2MDAwMDc3RjUwNEZCN0E3RUM1Rjk3NEY1OTI2Q0ZDRkNDNEZCMkIKKzoxMDg2MTAwMDYyNjg3RTNFRDY5RDQ5RjgxREI3Mzc4RUU1Q0M4M0Y2NUQKKzoxMDg2MjAwMDIzODc0NUQwRDBFNEE2QkEzNTEyQUNFRjhEMDBEQjc3QjYKKzoxMDg2MzAwMEFFREVGODNBRkE4MzQzRTVGM0Q1QjU0RUZCN0YxNTVGMUUKKzoxMDg2NDAwMDQ3RDJDRjkyN0JBNjAxRkZBNEMzQzM2QjFDMEY0QjIzNjEKKzoxMDg2NTAwMDBCRTc4MjdFQkU2NUEzODBGQUY2MjczMDBFNURDODJEM0IKKzoxMDg2NjAwMDcyMThGNTM2ODkzMUZCNDgzNDhBMEY2QTQyNEVDMDIyQUYKKzoxMDg2NzAwMDAwMUZGRkMwQkY1QjI1NDc1NEZCMzlCOURCQjZERDNGQTgKKzoxMDg2ODAwMDE3RkM0M0I3QkNBQ0M4NjI3QzVDOTFDNUVDQzI5QkJFMTYKKzoxMDg2OTAwMEU4MUY0MERGNUJGQUY5NkRBMUY2NjAzRUVEQjIzMUEwNTQKKzoxMDg2QTAwMDVCREYwOTQ2MzlCNUQ2QjM5MUMzNDVGREI0NjdGMUZCMkQKKzoxMDg2QjAwMEM1N0M3REE0QzdDNTZGNjJCQ0ZBQzc4MEZGMEEwREZERUIKKzoxMDg2QzAwMDAyOUY4N0VBN0RBODhCN0VEQzg3NzU1NDk2NUM1OUZFRjUKKzoxMDg2RDAwMDhFRkJGRDY1NzJENEUxMzc2NjY2MTUzOUZDNzdCNzFGRUUKKzoxMDg2RTAwMEYyMzc3QjkxQkFGRjE1NTk1RkFDQkRCODM2RUJCM0IxMjkKKzoxMDg2RjAwMDE3QzMzODlGQjlFRDQ2NTJBRTVCRDg3OTkwMTNDNzNFODkKKzoxMDg3MDAwMDlBOUI0QUFFMjM5RjEwMEVCNzNDQkZCRkNGQzdCRTlCRkMKKzoxMDg3MTAwMDdDNEQyNkVBOURERUZENTQ3RTAyRjZDQjZFQjk4MEZEQ0YKKzoxMDg3MjAwMDE0N0NGN0UzOTE3RDNGOUIwODc1QkQyN0I2REY3RjUzMkYKKzoxMDg3MzAwMDJBN0FDRUQyOTlERjQ0QkFGMzFERjFCQ0I1MDE4MkY1OTUKKzoxMDg3NDAwMERGODRDRUY3ODQ2RDdDRUJCREE0QkMwQzEwQkY1Q0I2OUYKKzoxMDg3NTAwMEYyNEFEQzRGQkVCMUYyRUFEMTZCNEFGQkVFMkJGQUY0REYKKzoxMDg3NjAwMDE3QTJGRkIwMTRFNjZERTRGQkU5MUQ5RUFBN0RBOUY2RjEKKzoxMDg3NzAwMDgxMUNBRjdERTNDNDRFRkY3RUU5QzZGMjY2RDg1MjZGMUUKKzoxMDg3ODAwMENBQjhFNjRCRDExNEYzMjdGNzM1MUI1M0M3RTMxRUU0RjEKKzoxMDg3OTAwMDdBMkFCOUFGMzFFOUJFODZFMkEzN0I5NTE0Mjg5QkQ2MkQKKzoxMDg3QTAwMEJCQUZFOTM2M0Y5RjdEQ0RFRjQ4Q0ZDRjY3QTJGQ0E3OTcKKzoxMDg3QjAwMDg2RUY3QjE2N0ZBOUQxMUQ1NzUyRjg0RUQxRkQ4RjA5NDgKKzoxMDg3QzAwMEYyMjNEMkY3ODA1RkJFOTU3QUJGRjYzODdGRUY3NzFCMzIKKzoxMDg3RDAwMDg3QThBRjhFMzlGNzMzRTlFNEVGN0I5RjkxRkNCNUE5MDkKKzoxMDg3RTAwMDNEQTM0MDBGRkM2RUVGQzc2RkREMEZFQkQ5RUI0MzdDNzEKKzoxMDg3RjAwMEJCQzc4OUU4MTJERjVGRjg5MDZGMkRGQkRDQTEzMkZENkIKKzoxMDg4MDAwMEZGQkJCRjFCODE3RjM3REIyRDFGODRDNEFGQkY4QTNFRjgKKzoxMDg4MTAwMDNGQkU0RjlDMDJERjU5NkNEQjk3NTE5NTZBOUZCMzVFNTgKKzoxMDg4MjAwMDE3Nzg3Q0M5MTlFRjIxRENCRjVCQ0FGOTREREZGNzc0RkIKKzoxMDg4MzAwMEFEM0QxRUZEMjZENzU3NTYxQ0UwN0Y2NzMxM0JCQjY0MUMKKzoxMDg4NDAwMEMxNDIxNUUyM0RCNzI1RTM0RDA0MzcyQkZBNjU4NTdCMjAKKzoxMDg4NTAwMEUxRkIxN0JGRTRFN0I5Q0NCNTk5MjlDRkM3RkQ4NkUzQTMKKzoxMDg4NjAwMDc3QTAzOEM0OEE1NUNFMzhDMTkyMDVGRERCOUI5Mzg5MjkKKzoxMDg4NzAwMEQ0NzU1OTE2M0ZBNzlCNkZBOEY2QTUyRDMxQjRCQ0Q4NjcKKzoxMDg4ODAwMDQwRUIxQ0ExMEZDRUJFMkMyNUI1NUY4Mjc4QzczMjEyRkIKKzoxMDg4OTAwMDUyRTBCQTg0RDQ0RUZDMzE0NUU1QzlERDhCMTE5RTVGQjAKKzoxMDg4QTAwMDVBN0ZGRkY4RTM3QjI3REFGRDk4RkYwRjExRkU4NUExQzEKKzoxMDg4QjAwMDAwODAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwODYKKzoxMDg4QzAwMDAwMEJERDdEMEI3ODU0NDU5NjcwRERCRUZENEFEMjQ5MjQKKzoxMDg4RDAwMDNBOURFRUJDMDkxRDAyMDgxODYyMDc0MjAwMUZEMDIxMTQKKzoxMDg4RTAwMDQ0ODJCMkRBODEwMDQxNTE5QTg3MTg0OTQ4QTJFMkNBMEIKKzoxMDg4RjAwMEZFQkE0Mzg3MjA0Njc0NjZDMkFBOENCRkUzQjgwRDgyRDUKKzoxMDg5MDAwMEVCMjg2QUEyRDE0MThDRDhBMEY4RDhENTlEQTBBRThCMTcKKzoxMDg5MTAwMEIzRTg0NkM3NDE1RTQzMjJBMzJCQjNDQjBDRkYzOUE3NzQKKzoxMDg5MjAwMEFBRDJGN0RFNzQ0MzcwQzdGREY2RkJFMzM4RDdCQUI3QjcKKzoxMDg5MzAwMDlFRTc3RDRFOURBQUI2MzkxNUM2M0M4QzdENUI3M0ZCQzgKKzoxMDg5NDAwMDVGNEQ2MjhDRkRBQkI1NzlCQ0QzQzFEODU5RkM5QjFFODEKKzoxMDg5NTAwMDdERkVDQjNBQzYyMjE3MzFGNkUxM0EzQjhCRDhBMDFDRkMKKzoxMDg5NjAwMDM2NTU4NTYzRDRGQjUzQUE4OTMxRThFODVGRTFDMTRBRjMKKzoxMDg5NzAwMDE5MEIyRDUwQzMzQjk0QzFGNUIyNzA1Q0FDQjc3ODVFNTcKKzoxMDg5ODAwMDZBMzA0NjNGRjJCOUEwNDY2NTExM0JBM0JGQjNGMDZGMTIKKzoxMDg5OTAwMENEOUMyNDVERjkyMkE3NTNGNEQzOUExODJDNjJFQzg4NUQKKzoxMDg5QTAwMDFDRjc1MTNFRUU5MTMwN0YyRkZCQkI0ODhDN0IyNDdDMjMKKzoxMDg5QjAwMEVFNzE2RjdFMDRDNjFEMTMxREU3ODY2NkZEQjhCRDJDRTMKKzoxMDg5QzAwMEI0OEFCOTYxOUM3MEEyNzM0NzAxQzNGRjhDRDgyNjQ0NTYKKzoxMDg5RDAwMERCRUY3NTlBMDhBRUVDNDhBNjg5NjUzMDc2ODc2QzFCOEMKKzoxMDg5RTAwMDY3QkMwRjA1N0M4REY1NkJDQzdFOEIxNjFGQjdBNzdBMDUKKzoxMDg5RjAwMDY5RkVCMjVDMzM0NzNGNEY2RjhBOTM4RkNCOUNGOTgxRkUKKzoxMDhBMDAwMDY0QzY4RTZFNEJGNDEzM0NBNjI1ODc0N0MxM0MyQkVEMDQKKzoxMDhBMTAwMDJDRTQ4MDc5M0VGOEU0QzU5RkIxMTE4QzJEMTNGOEFGOUEKKzoxMDhBMjAwMDA5N0M2RDQxNzgxQzM1RjVERjkzOENFQkZBQzBFNERDRjIKKzoxMDhBMzAwMDAxNDM5NTFERjQ1QkI0RjBCQjJCODVDM0VGRThGNjczREYKKzoxMDhBNDAwMEMzRUZBRTE0M0VDRjc5NTVGQUY5Q0QzRjk4QTgyQjFCNTIKKzoxMDhBNTAwMEQ3RkJFRjdGN0JFRjA0RUNGN0RGRkZGNjNCOEJCNkZGMzYKKzoxMDhBNjAwMDA1QTc3MzU5MjQzRDVBNUU1MkFCRjhDMzQ1ODNDNzdEQjEKKzoxMDhBNzAwMDI5RDUzQTI0QjhCRjY0ODBFMzkyRDNGOUQ0QkY1QjY1QUIKKzoxMDhBODAwMENEMUQzMUQ2NTVFRUI0NTNGREY5ODE3MjhCMDdFMEI5OTcKKzoxMDhBOTAwMEZDNkVDNUE3NDAxNzMzOUNCQzlGRTU2NkU2RUY4MEY5RTYKKzoxMDhBQTAwMDMwQjMzN0JGMUFFMEVFNjk2REJFMjMxMEEzOUZGRjIzREEKKzoxMDhBQjAwMEUwRkQ4RDIzOTAxQThCQ0ZFNEYzNjM0MTBGQjJERTAyMDkKKzoxMDhBQzAwMDczRDAxMkFCRkVDMjVBM0Q3QzdCMTlBQjhBMzVGRjFGQjcKKzoxMDhBRDAwMDNCMzk1RjBFOTUxRUU1RjhDNkZBNDM5REM3REQ4MjBFNTEKKzoxMDhBRTAwMEQzNkQ5MURGMzMxNTVFOUM4MDdFQ0EyRTYwNUM0MzdEMjIKKzoxMDhBRjAwMEUzQjhGNzNCRjVGODMzOEU3RkY0Q0Y2QTVEMkMzOEJDRDIKKzoxMDhCMDAwMDI2RjgzRjE4MDBGQTg5RjkzRDk5QkU3RkMwREExQjc3MzUKKzoxMDhCMTAwMDEzN0YyN0Y5NzYyMDE4QjYyRkZGMDlBMDlEQUQ5QzdEMDUKKzoxMDhCMjAwMEM3NUJGMDlBMjVBNjE0RDBGQTE2MDcwRTU0MTJCQjlEMDcKKzoxMDhCMzAwMDc5QjAxOEYxRkU2REQ1ODMzRjI5ODVBOTFEQjUwNjVCNzcKKzoxMDhCNDAwMDkzQTFDMUQxRjU4QTJGRTQxRDNDQ0UwN0I4NEU5MEEzNjYKKzoxMDhCNTAwMDFGQTEzQ0JEMDhGQjYzOUM2RTY3QzJGRjY1MzMzNjQ2QjAKKzoxMDhCNjAwMEY1RDdBMzUwNjE3N0Q5QkMzQjM0N0NFQjVFRkJERDNBOTMKKzoxMDhCNzAwMDU2Q0NEODUzRDZDMEZBNjQ3ODNGRkFFRUFGRDczMDk0Q0IKKzoxMDhCODAwMDc5MkM0Q0YzRkVDMkUyQkI4NUUwQ0QxOEYxRkRBMTZENUUKKzoxMDhCOTAwMDhFQUQ5QkEwNUU2QTBBOTc5MzhDRjlGMjAzRTMzNTcyNUYKKzoxMDhCQTAwMEMyRUNBNEYyNTBGMUYzNjExQ0ZDNUNBODlDOTJFQjhDMkIKKzoxMDhCQjAwMDM3MEU0MDlFRTYzNzc3ODZBMzRENDk2NUFDQ0JFQUJEQkMKKzoxMDhCQzAwMDA5RDdEMzNGM0JDMUI5MEQ1MDM4RDdFQUJGMUFFMUYzRkIKKzoxMDhCRDAwMEMxMDE5M0E5QTU4MEJBMzUyMzlEQ0VFMzQzQjA4MjZCMzIKKzoxMDhCRTAwMDBBRUUxRjU3OEFGMkM3RTI0RjgwQTk1NDQzMUIzNjE1N0QKKzoxMDhCRjAwMEU4Njg4NjIzODRGRDk1N0UzOEU3MTlDNENGODNCNTM2QUYKKzoxMDhDMDAwMEFGOEFGRDRERjM3RUFBNDI3OUVFNTUzNkVGN0FFOEFGOTIKKzoxMDhDMTAwMEFDNjdDNDVFMzdGNDNGN0Y4RUUyNjREMDdFRTZFQzUxRjEKKzoxMDhDMjAwMDlFNUU1ODVGRDI1QUU4MjcwNzQ3QjhCN0FBQzJDQ0Q4ODkKKzoxMDhDMzAwMEQzRjg5Rjk3MzIzRTYxODBDNTVDNDU5NjVGNkM5QjA5NzcKKzoxMDhDNDAwMEYyNjA5Q0E3Q0JFNDAwNTBBRjRDN0JCMUNEMEVGRERFQjMKKzoxMDhDNTAwMEQzMTJDODcyQTZDMUQyMzZERkQ3NjYxRkM2NTg0Njg2NjEKKzoxMDhDNjAwMEJGNjdCQThGQjFEOTlCRUZBRkIyNUYwMUVCN0M1NEI0NTEKKzoxMDhDNzAwMDBGM0REMEU2Q0Y2M0VDNTU1M0IwNDA4MUVGQ0Q5Qjc3RUQKKzoxMDhDODAwMDU0OTkwMTVFRUU0MjM5RkUyQjZERkVDQjYxM0Q1N0RERkUKKzoxMDhDOTAwMEIyNjMwREY0QkYyNUVEOUZBQUNDMzhFRkM1NzJGQzlFRTAKKzoxMDhDQTAwMEFBOEE5MTMwRkZDQjY1Rjk1RkVDMzg1Rjc3OTI2QzBGNDEKKzoxMDhDQjAwMEYzOURDMjk4NjU0NDc0RkVFNjJDMThERjI1Q0I5RjU0QzMKKzoxMDhDQzAwMENEODRGMTNGMkU2RkFFMzBDM0Y4QzdEMkZFQkRBRDY4ODQKKzoxMDhDRDAwMDJDNjM5M0U3OTQzQkZENTBFRURCRkMxRjU1NDk4MDlGQ0UKKzoxMDhDRTAwMDJFMDY3NDBBRTUzRjZDM0U0REYzNzdBQjI2REU3RkU4MzcKKzoxMDhDRjAwMDhGMzRCRkIyQzVBMTcxRjg1RDYxN0Y2QUFCODI3NUFGNzkKKzoxMDhEMDAwMEI2RjdCRTg1RTREQUI0MzY2NENGNDA5MUE0NzAzQUIxQzgKKzoxMDhEMTAwMDVCOUFGREI5MDAzQkNCQUVGMjQ4MkU0REE3OUREMzZCQkQKKzoxMDhEMjAwMDVFNjQzQ0VBQjE4MUYyMTgyODhGRDc5NEIzNzhCOTZCQUUKKzoxMDhEMzAwMDNENUIxMjRCREU3NkJBQjgxRUVFNEE4Q0ZEQkQyMjhEMkQKKzoxMDhENDAwMENCMDM4MDFCRTk5M0Q0ODNDQ0JGMzM4NjVFMTk5N0U2QUYKKzoxMDhENTAwMEEwN0VGNjI3QjI5MEREMTVFNUI3NkI4MTg3QTcwMDVGOEYKKzoxMDhENjAwMDMyM0I5RkE3RUM2NzkwRkU0OEUzNzI5Rjg1QUU3NTIxNkEKKzoxMDhENzAwMERGQ0NDMTJFNjBFOTg1M0UyNTg0NzRDRDlBOTNDMkEzRDEKKzoxMDhEODAwMDkwNzY1OEM0M0MwRkY1ODc2QUEyRjk3QTU0NjU0OTM1NDQKKzoxMDhEOTAwMEY0OTc5MUM4ODI5REYwRjRBNDMzMkE0MzdCN0ZBNzIzRTQKKzoxMDhEQTAwMERBREY3QjgyRUUyQjBCMDNEQkIxQkZDQUNDRUM5MkQ2QjEKKzoxMDhEQjAwMDgyNjgzRjMwRUYwREY2MDlCQTc5OUJBN0I4RjBGQkRDNkIKKzoxMDhEQzAwMDkyNUI4QjM0RjAyQ0UyRUIwMDNBQTA3NjMwQ0MzM0QzQkMKKzoxMDhERDAwMDgxMEZCQTdBQzY4REQ4MDRGM0ZCMDZFNUFFMjdCQUFFOEEKKzoxMDhERTAwMEIyOUVCOTE2MDZGNUI2Qjg4NDNDRjFGMkY2OUUwQTJFOEMKKzoxMDhERjAwMDdGRkE2RjREMEE2RjQzRkVCNEZCNEExMDRGQjJERDBEOTAKKzoxMDhFMDAwMDAyRUUxNUY3Q0VGOTE5RDY2QkU4QjEzMDFCRDQ1QkQzNUYKKzoxMDhFMTAwMDU5OUVDOUNFQTExNzFCNEU1RkM2QzIxMzM1NjU3M0M0RDgKKzoxMDhFMjAwMDhBNzJBN0UxRjQzNDdBNUY3MUVGN0I1NkU0NTNFQ0M3QTIKKzoxMDhFMzAwMDBCRUI1QTkzRTBDRkY0MjFEQzVBNjNFMzlGQjExNjlBMEYKKzoxMDhFNDAwMDQ3QzNFOTM0MTY5QUE4N0RDRkUxMTRFRERGNERERkNGOUIKKzoxMDhFNTAwMEI3QUU2ODdGMkEwQkE3OUZBQjNGMkI3RDFGODBCQjU5MDYKKzoxMDhFNjAwMEMwREQxQTdCOUUxQjA0RkQyMEJDNEQxQUZBOUEyRkU4MjgKKzoxMDhFNzAwMDBEQTQ5RjFGRTVFMUExNkI4QUI2QTFCQzhGOEVCQjlFOUUKKzoxMDhFODAwMEZBRUYzMjAzMUVEMTBFRUM0OUY0QTI1RDVDNjZFNkYyMDUKKzoxMDhFOTAwMEIzQUNDN0U1MEMyOTUxRkE5MDc0MjFGMURBRTU2QTJFREEKKzoxMDhFQTAwMEE3RjU1NjJCQ0U2RDA1ODNFNzc1QkY5Qzk3RDBBNzk5ODQKKzoxMDhFQjAwMDhCODNFQTUyQ0RGQzI0M0Y0MEZGNURBMkZGRDIyOUM0NDAKKzoxMDhFQzAwMDNGQkZFMEY0MDI3QzczMDNGMjJGREEyREI4MEU1RjY0MkIKKzoxMDhFRDAwMEZDRENFNEMxRjMzRjBERTQ4NTRGQzAyMzg3RkY1RjM5MUQKKzoxMDhFRTAwMEMyQTgwNzI0REMwNkMzM0ZGNzNDRjhDQ0E3RUY2NTNEREEKKzoxMDhFRjAwMEZCQUNCOENFODYzODdDRkI4MDJCODVEQTY1MUU4Q0E0NTMKKzoxMDhGMDAwMDc4QTFERTE5NjE3Nzc0NzU0QzRDQjgwQ0Y5NjI4RTg5QzIKKzoxMDhGMTAwMEExMDhDMzc1QTNCRDVBMzYyMDZGQUY3Qzc3MDZDOERCQTYKKzoxMDhGMjAwMENDODEzMkM4NUIyRkUyNjE0MEZFNDZFQ0Y2NjhGRDFGNDMKKzoxMDhGMzAwMEI5QUU5Q0JEMDFFNEI1REIwNkY4MkYyMjNCRDRDRTM0OUMKKzoxMDhGNDAwMEZFQzRFRTM0NkVCRjREMDlCMjk4NzZDQkRGQjk5Mjc1OTAKKzoxMDhGNTAwMDcyRUNGRkFFQUQ2MEJGODVGNTk5RDNCOERFOUZEMjFCMzIKKzoxMDhGNjAwMDUyMTAyRjkyQUY4RDcyRUExM0MxOEYxRjhCRTdGRkJDOTcKKzoxMDhGNzAwMDlDNTJDRTIzQTdBQTg1OUNFMkVGRjc4Mzk5OEZGNTMyMDYKKzoxMDhGODAwMDMyMjJFMzE1RDA4OUNCREU5RDM4MEFGRDk5REJCMjU0M0QKKzoxMDhGOTAwMEVGOTdDMDU3RjMxNERGQjA2N0ExREYxQUJCRjc5RTY0RTkKKzoxMDhGQTAwMDZGOTQ0RTZBOThEREVCNDBCODgzRDE3NDE2RjVGRTlDNDEKKzoxMDhGQjAwMDA0MkFFMzFGREEyNUE3REExNTRFODdDQzlCNUEzMzNFRTUKKzoxMDhGQzAwMEJFMUM5MkYzQjgyRENCNEFFMzJEQkI2RjU0NkE1MDNCQzUKKzoxMDhGRDAwMDNGQTEyN0FFQjU0NTlFNjU4NTgzRjk1Qzk2NjFGRUFCRTIKKzoxMDhGRTAwMDREQUFFNkJCODNFQkIzQjFDOUZFNkZEMkQwMEU1NTU4ODQKKzoxMDhGRjAwMDJEQ0RDNzYwMkYzOTA0REYxOUVEQTU4N0IxNkYwRkZEQTcKKzoxMDkwMDAwMDJGNjIyMzNFMzY5MTczOUFEOTY2MEIzM0RFMjQ4NDdFMTkKKzoxMDkwMTAwMDZBNjYwNzEzRkMxQTMxMzU2OEU4QzBFRUNBQTM3OTJDREEKKzoxMDkwMjAwMDVFMDgxRjJGMDFBNkI0QkY3MUM5OTcxQTNFN0EwN0U3RTEKKzoxMDkwMzAwMDQzN0EyMTMyMDlGOTM0QzFDNTc0NzZERTYyMzU5MEE3Q0UKKzoxMDkwNDAwMEEwREQ5QTY5RjNBMTlDMDEzQzExMUNGNjI3MzA3MzAyNDQKKzoxMDkwNTAwMDhDRkIzNjNDMTE2Rjk1RUFBRDdCMkQ2RUE0MDNDNUQ3MTIKKzoxMDkwNjAwMDRBRDBERjJBRkM1NjE2NDE3RDczRURGNDI0QjI1QkQ5NTkKKzoxMDkwNzAwMDk5REI0NzU2MDMzQzNDNDk5QzZFQTExRkJCRThDNzRFOTkKKzoxMDkwODAwMDc0MjJFNERFQUZGM0M3NkU0M0ZEMjRFNUE3QzQwMzNCQkYKKzoxMDkwOTAwMEEzNTI3RkYyRkI3RUE1M0FDRjA5RTVGRDlFOEI0QTVBOEIKKzoxMDkwQTAwMDE1QkRGRDgzRjY1MEQ0N0U0QUJGNkYxNkYwRTNFNEFBRTcKKzoxMDkwQjAwMDhFODgwOTU4QTgyNUU0OTk3RDI3RDRBRjRDRTI2QjFFMTEKKzoxMDkwQzAwMEU5RTI3QTcwN0Y0MTQ4NERDMUZFNDZDMTNBRTBENTVCODYKKzoxMDkwRDAwMDg5QzFBMjY2NDcxNDFGNjBFMzA0MTE3RjE5NTY3ODNBQ0MKKzoxMDkwRTAwMDM4N0ZFMDczOUY4QkYzRDk5Qzc0OEU5NDJERTlCQzlDRTAKKzoxMDkwRjAwMDkxQzJFQjFCRTlFRDQ5RjE3RDk1QzJGMUJCQTk5Q0NCNzcKKzoxMDkxMDAwMDA5NjNCREU5MkVERURGNkE3QkE4MkE2Mzg0RDZCRTBBMjYKKzoxMDkxMTAwMDMwQTQ0MzMzRTM3Njk2REYyNUU4QTQ4MkMzQUJFMkRFRDYKKzoxMDkxMjAwMEM1QTlBODM3QkZFRDk5OUZDQThBQTI3MkY0MUUyNUU4ODcKKzoxMDkxMzAwMEY0NDFGRDdCMkM4MTlGNTJCQ0UzNUY1NDg2RkU4ODM1NTEKKzoxMDkxNDAwMDJERTg3NDQxQkRGNEE0RDhGRUYyNEQ2MjFFRTlFODRGNEIKKzoxMDkxNTAwMDQzQkQ5RjA4N0ZDNzcyRkE2MkYyQjMxN0JBQjgzQzRCOUYKKzoxMDkxNjAwMEM5QUEyMTc5OEUzMEY0QTI5RkMyRkE0MzRFMERGRTUyNTUKKzoxMDkxNzAwMEE3OTg3NDdFODNFNTc0MzFCNUJGNzBCQkExMjQ4RURERTIKKzoxMDkxODAwMDUwQUFCMzFCRTRCODQ2RkJFMUQzNzU1OTM0N0ZEOUZFMkUKKzoxMDkxOTAwMDg2QUM4RjJBOTlBNkZFOERBQ0Y3MUVFQ0VGQzYzNUI5Q0EKKzoxMDkxQTAwMEJBMzg1MTNDQkJFMzJFMDExRkI0MTM0MjMxRTc2NUQ1RjkKKzoxMDkxQjAwMEJERkYxNEZDQzQ5MDc2RkMyMzdDRkNFOEI4NDlDMDY4NzEKKzoxMDkxQzAwMEQxNzFGRDJFRkZERDJFRTJBN0NCOUQ4NzJGODY0NzAyQjIKKzoxMDkxRDAwMEJDNTc0OURGOTBEQzA3QkRFNERGRUEyMDdENTQ4NUYyMEYKKzoxMDkxRTAwMDVBRkE0N0M4RjdDRTU0QTRGMUYyMERBRTQ5MUFGRDI4MzkKKzoxMDkxRjAwMERBMTlFNUQwOUY0NTNDRTNDRjRFNkVGRkE1MUU5NEY2RUQKKzoxMDkyMDAwMDYyQTI1NzUxQTJGQTY2QjBCRTEyN0FDNjIwMTdDRjY3ODMKKzoxMDkyMTAwMDVGMDNCRDg2QjRGQURGRDhFRjUzQUVFRjZCNTcxNkM2QzcKKzoxMDkyMjAwMEExOEZEMUZGMjM3NjY1RDlFNTQxNzUzQ0NBQ0QyQTg1NEEKKzoxMDkyMzAwMDhEODJDN0U0OTk3QTNEREZFREUyRkU0N0I3MkI0OUE3NUYKKzoxMDkyNDAwMEU3RTcyRUQ2RDc4QjYwQkQ0OUY4NEMxQTkyQkZBMkQ1NUUKKzoxMDkyNTAwMDQzOEE4QUYyOEVGN0Q3MjhFOEExRTBEODA3NTYyRkM4QUMKKzoxMDkyNjAwMERGRkYxMjc2RDAxN0U5RkVCNzkxQUUzNjI0QTYxNEEzMUQKKzoxMDkyNzAwMDdFRDhGQUE3OEEzMTVCNjFERUZERUY1QjdDREJCMEJCOTkKKzoxMDkyODAwMDVEOUMzRUNBMTdBRDY5MzVDMzdCNEI4N0UyQjQzMThEMTcKKzoxMDkyOTAwMERFNUFEQjc5QzkwQTU4RUYwNzkyRkVERDdDMUQwREVFMjAKKzoxMDkyQTAwMDg4NzUyNDhDOUJEM0MwQzdDRkVCRDhBQjk4MzVGMjJERjMKKzoxMDkyQjAwMEFGOEVENzNCRTRCMkU4RjQ1RUFGMjg3RjI2RkQwRjE2RjEKKzoxMDkyQzAwMDZFQTkyQ0M1RkE3RUYzMjYxMDdEMzkxRDBBQzU4MzczNUQKKzoxMDkyRDAwMDlBMDEwMDQwMDczOTNFREVCRkMzMTc1Njk2MTc0NUQ3OUYKKzoxMDkyRTAwMEQ5NjZBQTJFNDJCREQwOTY5MUU0NDNCRDMwRDYxRDNDMkUKKzoxMDkyRjAwMDhDRjRERjcwMjgxMjQxMzA0RDNFRDQ2MzQ2RkJBRUMyODEKKzoxMDkzMDAwMEVERkYwQURGQ0I3NTdBNTU2NzBFQ0FENUE0NDM3QzdFODQKKzoxMDkzMTAwMEVEMDY3QTA3MEI1OUQwRjkzNjJFNkY1NUY2MEU0MzdDQzEKKzoxMDkzMjAwMEEwRUM4MEYxMzJENjhGMjFCRDI0RUI2N0I4ODQ5RUM4QjMKKzoxMDkzMzAwMDYwQzExN0M4QUU2MjZEOENGMEM1NjgxRDE5RUI0NzkzMEMKKzoxMDkzNDAwMDdEMkZGMTE5QjVBM0M2NEU0MDNCQUFGMDgxODg3OTE5NEIKKzoxMDkzNTAwMEI0REJGRDU4RUNGOEJDNDVFODExNTgwNzRCRjc0NEQ3OEYKKzoxMDkzNjAwMDExOEYyRkE0MUU5M0Y1MkM3MUZDNjg0OUVGNDk1NUIxNUMKKzoxMDkzNzAwMEVENTNEMDAwRjRCRDdDOTFGQjNBNUM3N0MzMDYyQkIzNzAKKzoxMDkzODAwMDI5NTFGODU3QjgwM0U5Mzg5RjlDOEVBRDBBQzI0NkQyREUKKzoxMDkzOTAwMEQ3MDZEN0QzNEEyRUFDRUZGNjVCOTg1MzY1RjFFN0RCREYKKzoxMDkzQTAwMEIwRjZDNTRCNTY2OEZDMkRFODlGRjBCMUQ1Q0FFQUI0QkIKKzoxMDkzQjAwMEZBNTRGQTEzMTdBNzczRkQ3M0E3M0IzMDAyQzc2RERDOEQKKzoxMDkzQzAwMEI1RDk4QUY4QkQ2NUZCRTc1NjZEQkM3QkQwM0E4NjA4RjcKKzoxMDkzRDAwMDJGQTU4RUZCMjkwREI1RjYzMEFFQjM3QzkxOTlGMDU3RDEKKzoxMDkzRTAwMEJGQzExQTQ2NzlENEIwQjMzMzYyNDI3QkZBNkVFNjQzMEEKKzoxMDkzRjAwMDdFNkZFOEU4N0MyQjA3RTA5MkRCRTA5RkE0N0FBM0ZENzgKKzoxMDk0MDAwMEU1MzY4NDE1OUM0RjA2MTA2MTBGRjk3OTExMkJFQTY3MzgKKzoxMDk0MTAwMDIzNURBMzNEOEM3NkM5NUIwOTlDREY0Rjk0M0I0MjBBRDgKKzoxMDk0MjAwMEMwRUY4NDI1RDg4MEY1NEU2NDI3Rjk0MjA1NTE3OEJGRjYKKzoxMDk0MzAwMEREMzlFQjFEMDU1ODNBRjkwNTVCMDQ5RjZEQTY2RDU5QTIKKzoxMDk0NDAwMDc2QThENzM2Q0VFQTQzM0FBQTcwMDc2N0E1MDM3QzVDQjQKKzoxMDk0NTAwMEU2NDAxN0I2NEY3MzI3RkI1QUEwQUREN0M2MjY5MDdFQkQKKzoxMDk0NjAwMDFFMjIxQzI2MUJFODYxRjJERDlDNEZGRTI2M0Q0NURBREMKKzoxMDk0NzAwMDdCMTM1MDBFMkQ0RDRGOTZGNjEyQzlBN0I3MkM3QzFEQUQKKzoxMDk0ODAwMDFCMTg5RkVGM0U5NzdGMDFEMUFCRDM0NUUzRTYzNDQ0RjEKKzoxMDk0OTAwMDE0QjRGNzhERTM0NkU5QzlCRkY4NDJFODFCRUMzQzJCNTYKKzoxMDk0QTAwMENBRjU3QTIxNjdDQTE3NkQ1NzdFQUJBMTgzN0EzMDY0RkIKKzoxMDk0QjAwMDkwNUU3Mjc2NkU1NUQwMEY4NEVGMkQ5NTZFQUFDRjZDQUMKKzoxMDk0QzAwMDI4Njc3NkYyRkQ4ODdBRjg3RTkzNDZBRUM4NzVDNDkwMTgKKzoxMDk0RDAwMDJGQjcyMTdDMUQ4NzdBREVFNEYyMjU0MkY0MjdFNzZCNjMKKzoxMDk0RTAwMEM0RTc4RkQyQjkxRDc3MjU5ODA1RjRERTFBMUFFMzg1RjMKKzoxMDk0RjAwMEZFREUxQTkxNDhGRDQ5N0UzN0YyRTc4RjA0OURFN0Q0REUKKzoxMDk1MDAwMDZFNTczMDZFRTA0RUUyNzZBMzlDOUZBQ0Y3NDVGQThDMjYKKzoxMDk1MTAwMEY1Mzg5RkM5NTUzRDA0ODdENUI1NjZDMjlCOUM0RkE1QkMKKzoxMDk1MjAwMDM1MzAxMkZEQUY3NkQxREZCRTg1OUY1OTdCQTFGQ0QwQ0YKKzoxMDk1MzAwMEFGMEUxMDNEQUU2RTU3RkNFNDE3QjQxRkIwQ0VDN0Y4QTcKKzoxMDk1NDAwMDVDRTg5NzJBQzY2M0FGRTYyNjA5REJGMkQyMDFEMjIzOTQKKzoxMDk1NTAwMDU3NzdGMTM4QzFFQUFFNEVGMzcyNDc5NDRFMEI4RUVENTkKKzoxMDk1NjAwMEJCMTFFOTZDNzU4NzhEMjUyODg4M0ZCRTVFMjM5RDgyREYKKzoxMDk1NzAwMDdDMjFCQTY3MjEyQkVENjc4MTdDMEM5MTNDNjVDMTAyOEYKKzoxMDk1ODAwMEY0NDdBNEZDREQyN0VDNEJFNkUwRUY5RjEwRjM5NkZEREIKKzoxMDk1OTAwMDQ2RTU2NjAyRDE3QkMxQjEwOUZCRUMwMENGRDUzRUM1RTMKKzoxMDk1QTAwMDA3QTYxMkQ4REJCQzFFRjQxRjIxRjlDQkQ4MDhGNENCRDgKKzoxMDk1QjAwMDY0RkY0NkY4RkQ1QUM4RDUxODc4N0UzRTNEODYxRTkxNTgKKzoxMDk1QzAwMDdBQjVFMEYxMTkwQzlGMTI3RjY2MDE3N0Q5RUY5RTc0OEUKKzoxMDk1RDAwMEJFOUZCNTI3REQ0Q0ZENkYyOEU3RjFFQjBEMTZBRTNGQzIKKzoxMDk1RTAwMDM2QjREOEMzQzhENzZGQTc1REY5OEU1MjBDNzA3MjU5QzQKKzoxMDk1RjAwMDIzRjhEQzZGNUFENjgwREZGN0U3RjA3OUI0OTlENjhGN0QKKzoxMDk2MDAwMDY5RTZGQUVCRjU3NEMyNUYwQUUzRjI4OUNCQTM4NzVFRTEKKzoxMDk2MTAwMEU0RjJBNDIxRTQyMDNGQjEyMTU4QjM4MkY2MUZEQzA5MTMKKzoxMDk2MjAwMDNFQjRGNzU5RjA0REVCRkNFNDI4M0QxOEYxRUI3RDYxQjkKKzoxMDk2MzAwMEFGRDUwQkRGQUZFRUUwN0MxMDg1NUI1ODQ3QjcyMEU3NzYKKzoxMDk2NDAwMDA4RUZGQjVDNzIzRjIyNTg4MDcwMDVGRkJEMDVFMzBDRkMKKzoxMDk2NTAwMEQyN0Y0RjU5MUMwODI1N0IwN0YzNkJCQUYwREYyNzA5MkYKKzoxMDk2NjAwMEZGREQzMkM1RkUxN0Y1REZFQkQ3RkU1MzM2OTY1NzY1QTMKKzoxMDk2NzAwMEJENEI0RkM5MkZFMDI3RUFGOEVBODRGMERCMEUwOEJDQTcKKzoxMDk2ODAwMEZGNDFEMDRCN0Q2OTA3RjE0M0ZEOTdDREM0NDc4RTJBM0EKKzoxMDk2OTAwMDJFNEYxQzg3RjQ3MjkwQjExRjhCRjUzRjQwRkQ1NDI2NkUKKzoxMDk2QTAwMDc1NUNBOUEyM0ZGQ0Y3OEFCMzk1QzU5RkY3Q0Q0QUYzMzUKKzoxMDk2QjAwMDNGNEY0NUJDNzRBQUI0MkZDNUNFODA1NTVGMDY3MDREOTAKKzoxMDk2QzAwMDEwMzAxMEY1MkM2RTFFRjczRUYxMTQyMDAyRjlEMkRDOUEKKzoxMDk2RDAwMDZDM0Q5N0ZEN0JCRTdFNTlFNDIzMDVGMTVEMkY2MDdERDcKKzoxMDk2RTAwMDYyNjdDNUQ0REY2MTNDRjFBOTU0REYyODU4RkFGMTlEQzcKKzoxMDk2RjAwMEYzRkVFNjc3RDBGRUM0RjZFOTNFRDREM0VFRDYwMEQxMzEKKzoxMDk3MDAwMDRGQkYyN0MxODc3MTQzQjcwQTk2MkREMDQzNEJDNzFCNjQKKzoxMDk3MTAwMDI5OTdFMUJFRDgzMzk3NEM0MEI5OTlFN0U2N0M3OUVDQkMKKzoxMDk3MjAwMDQ1NzUyREMyNjdGRDNGM0MzRjBEQkZENzg3OTU3NEI0OEIKKzoxMDk3MzAwMDFCNEYzQ0Y1Rjc3RjQ2QkQ1OEI3QkQwOTNEMERENkZBMjYKKzoxMDk3NDAwMENDRUI2NDg3OUJDMjVCRjlGQkE3NTJDOUJFM0NGQUM0NTEKKzoxMDk3NTAwMEU2NjkwOEY3RDY4RTU2RkE3RUVDODlBRDU0REVGNzBGMkYKKzoxMDk3NjAwMENGRUZGOTRGQjQzNzAyMjkzRUFDNzdFQ0M1Q0QzRkZBQzUKKzoxMDk3NzAwMDRGQTRGMzlBMTQxRkFFQTMyMTY4RTZGQkI2OTJCRThERTgKKzoxMDk3ODAwMDcyQUI3MzJGRjFBOUE0OTdBQjUxRUYyMjlDNkFCOUZDN0QKKzoxMDk3OTAwMDkxRjRGQzg1RDg1NzVBNTZFMTY4NDM3OUY2QzVBNkU0OUEKKzoxMDk3QTAwMEJBNThGMTQ0QkY1ODJGQzY1QzQ4OEVENTJBMTQ0RjZCNjcKKzoxMDk3QjAwMDAzQUFDMUI4NDY1QjIyOUI4MkNGQTRBMjg4MzUxN0M2RjQKKzoxMDk3QzAwMDU5QjhCODczMUFEOTNEQTFDRjU3NjJGRDc5QkIxMkQ4RTkKKzoxMDk3RDAwMDI2OEFCRjYxRjAxNkVDN0YyMjc1QzZDNjgzMTgzQzBDNDIKKzoxMDk3RTAwMDdFMzJGNEJFRkQyQ0Q4RDcxRjVCMzA5NjQzRkRFOUVDRUEKKzoxMDk3RjAwMEZGNzk2REVGRkUxMUU1Njg4REJENzdBRkM3MUI3RERGOEIKKzoxMDk4MDAwMDI2RTIzNDUwOUZGNDRFRDk5QUQ4RjFEMDJBQjc0M0QwRUIKKzoxMDk4MTAwMDJERDc5QjM5NURENTc5NUU5MjEzMzZERjI4OEQ1RDNBNjEKKzoxMDk4MjAwMEVDNjBGMzI2MTA0MzJDQTdBRUU3NEE1Q0M3NTU2Mzk2NUQKKzoxMDk4MzAwMDRFMjRCQUMwMzgxRkVBOUY5MDgzRkE1RjhENzE0QUUwQzgKKzoxMDk4NDAwMEIzNDU2RUNFNEYxOTRFRTZCRTE0QzZBRjM0MzNCNzAzRTAKKzoxMDk4NTAwMDlGOEM3RDY0MjEzOUIyODNGQTA1RkI4M0VDMkFFRkVCMDAKKzoxMDk4NjAwMDBCNzdBMDNEQjJDNTEyQ0M5RTg0RkRCNDA5QkRCNTlENTkKKzoxMDk4NzAwMENGMUJEQTNCNzFCRjE0RkE3MzVFM0E4MUZBRTlCMUI4RDMKKzoxMDk4ODAwMEE4N0Q4OEI3OUZCNUJENDU4OUNFMTcyODM1MUZGNTE2MjkKKzoxMDk4OTAwMEY2NTdFQTQwM0QxM0FBMjVGQzc4QURCNEFFNjM1ODI1Q0YKKzoxMDk4QTAwMDlCRDY1RDdDQzNGODI4RkYxQUUzM0IyOENGNzAxRkY4RDYKKzoxMDk4QjAwMDRFNzdGOTZERUU0OUQxQTc4Q0ZCMThFMUY5MzI3RTg3MUUKKzoxMDk4QzAwMDc1N0ZFQkY2RDM5MzNEOTVBRUQzMkJGMUVDOTU3RDBCRTUKKzoxMDk4RDAwMDRGNzJGREZCRUFFNzI0NkYxQTkxOEU3MUZDRTA5NzNBMTQKKzoxMDk4RTAwMEZEQkI1Q0QyRjEyQjlGMTMxRDJGREZDNUY1NkZFM0FFREYKKzoxMDk4RjAwMDEyMkJEMkVERjE3NTdFRjY1QjMwNDAxQkM1M0VFQjE2QTgKKzoxMDk5MDAwMEE1NzcyNUM1Nzk1RTQ5NzA2MkZDRUVBNEQwMzdGNTBGQzYKKzoxMDk5MTAwMDdDN0UxOEY3NDc0N0VDQ0EyNkJGRkVFNDJCMDlCNUQ4NzIKKzoxMDk5MjAwMENGN0U5Mzg5RTBCOTdGREJDNTVCNUIxNUVEM0NCOTNGMkEKKzoxMDk5MzAwMDAwNzYzMDkxNkEyM0Q4QTlEQzBFNUVCMTE5RkRCM0Q1NEIKKzoxMDk5NDAwMDc1Q0M4N0ZDREY2OEEwOUZDNjVEMDc4ODVFQTQxRDVDQTAKKzoxMDk5NTAwMEYwRjhEQzE1RENGRTRDRjAyNUEwRkYzNjkzREJBMzBDMDEKKzoxMDk5NjAwMEVDNTFBQzlGMzYzM0RDNjIyNUZBMkEyOTQzRkFEQUI3ODgKKzoxMDk5NzAwMDcwQ0Y0NkQ0RTM4RDMzOTkxM0ZCREYzMkNDRkY0QTJFRjAKKzoxMDk5ODAwMEFENDc2MTk4Q0ZCMkM1RDIzRUMzMENFREI3NTQ3QTlEQjYKKzoxMDk5OTAwMDAwNDk4MERCNzZCMjdCRDkxOEFCRDA3MzJCQzg1RTZFRTIKKzoxMDk5QTAwMENDQkFERTQ3N0M2Njk0MDdBRkI0OTBEREQ1RTg0REE0MTEKKzoxMDk5QjAwMEY5NUNCRDRCQjk4RERCMjMwRUM2RTdBRjEwN0Q1RTFEOTQKKzoxMDk5QzAwMEJFMkM4Q0ZCQ0FCRjE3RjA5MzcwM0M2OUU5QjkxMUUxNUEKKzoxMDk5RDAwMDcxRjIyNTIwNDRGODdFRjU0QzRFQUY2OTMzM0I0ODhFM0EKKzoxMDk5RTAwMEJDRkRDQTJDRDJFMzkyMkU5MzVGQjY5MTNFNzc5OTlEMkYKKzoxMDk5RjAwMDhBOEZGNERBM0M5QjE2QUZFRDE2QUU5N0QyODQ5RTI5N0YKKzoxMDlBMDAwMDdDODBFMzM3MjJGODI5MjJGNDQwQzQ2REQ1Qzc1QjlDRTMKKzoxMDlBMTAwMEExNjJENEJCQkYxN0Y4MjczMTgyRjI1REM4OTNENTJCNjIKKzoxMDlBMjAwMDIyQzQ0RjBEM0I3OTdGNkU5QkJGRTQ3NjBERkRCQTJCQjAKKzoxMDlBMzAwMEI4NUU5NDcxN0ZEQzA3QTg4RTIxMkY3RUU3RTZGQUIxMkQKKzoxMDlBNDAwMEUwRjE2NTlCRDE1RUJFMEFGMDhFMkEyNTY3OEM5MEEzNUIKKzoxMDlBNTAwMDQwMTcwOEI3OUNCQTAwRDFDMTU1RUU5QjdENkEwMUVENTUKKzoxMDlBNjAwMDFGOTA5RkQ4REY2MjY1QjFFMjNDNDc4NTFDRjVBNDA3RDMKKzoxMDlBNzAwMDRBMzFERUVDQzk0QzI2M0JDN0EzOTY5QjEyQjA1RDg5RTgKKzoxMDlBODAwMEUyREJFNkE1RkQ0REIyRjNGQTNERDlCRTZEM0E3RTBGOUQKKzoxMDlBOTAwMDk0OUFBMERFOTE4QzY0OEVFN0YwQUZDRDczQzcyMzFGM0MKKzoxMDlBQTAwMDdBQTU5RkFFQjNGQjA2RkJEQkRDNkU5Q0QzMUUyQTQ2NzkKKzoxMDlBQjAwMDNGNDRFRTVGNDgzODg0NUIxMjZCQjVGMkIzNEZDMDIxNzAKKzoxMDlBQzAwMDNDOTZDN0YzQzFCRTc3NTBGQ0RBMDlFM0EwNUZCRkVENTcKKzoxMDlBRDAwMEIyMjdCODVGREY0QUUzMUY3NEYzNzg0NjI1QUMwRkVENzkKKzoxMDlBRTAwMDM2NEY2MTYwMEREN0E3QzlCRTU4RjBCODUzRTA3OURGOTMKKzoxMDlBRjAwMEMyMUI0QkQwQUY2Q0FDNzFGODkwREYxRTdBNTU1OTQ2NDMKKzoxMDlCMDAwMEY0OENDMTQxRjRCNzgzMkIwODBGMENGMDgwRkNDMDgyQTkKKzoxMDlCMTAwMERDMkY2RDZDMEU4NDYzRDM3QjM1RjE1RjIzRjI5RjQyQTMKKzoxMDlCMjAwMEY0NEVGMTc2QTBGNzMwQTc3N0FFRkZBNERGOEZGMkIxNDUKKzoxMDlCMzAwMDNBQzY3RUE4OTQyRjhERDZERUQxNDhDNzkyMUYxQUE3QTkKKzoxMDlCNDAwMEY1OEU0NkI4MEQ1NTlFOUNCNDAwRkYyM0ZGMDAxQzkwNzcKKzoxMDlCNTAwMDdGMjRCRjI0RUZFNjdDQjJBOUM1NUI4RURGMzc1NTMyODgKKzoxMDlCNjAwMDY3QUI0NjFGMTlGRDI1OUMyN0ZBOUQ1MkFFOEY3NTA3REUKKzoxMDlCNzAwMDBBM0QxODA3MzA0NTM2NjIxRTg1OTRDMzhEQkJFRjFCMjYKKzoxMDlCODAwMDFEMkJDRjREQ0E2MUJCOTlDQjM3N0IzODI5RENBQUExRUQKKzoxMDlCOTAwMDJGRENEQjRCOUU0MDRGQ0FEQjQ5NUExQjNCMkU1MkU2NjMKKzoxMDlCQTAwMDcxODg3OEZERDBGMjIyMzI1MDk3QTNCQ0Q5OTYxNDQ2MjIKKzoxMDlCQjAwMDc5MjVFMzQ0QzY3RUM3NzgxNDVEM0M0NkZBMkRCOEJGQ0MKKzoxMDlCQzAwMDgwRjVFNzdBMzhCRDU0N0FCODlDQjg1RTNDRTVGQzI1NTAKKzoxMDlCRDAwMEZEN0I0REMxQ0YzMTlGMjg5RUZFOTJFREZFNTI3MTJCMzEKKzoxMDlCRTAwMDM5OEVENEEzNDZGQ0NCRkQxMTVDNEY3NTUxRkM3QUVENDgKKzoxMDlCRjAwMDdCQjk3QzMyRDJFMzcyQzEyNzVFNUMyQkQ0N0I0RUVDMDYKKzoxMDlDMDAwMDY3MERDNjJGRUY4N0Q1OUE3NUY5NkY2REE2Q0VCQTU4MzYKKzoxMDlDMTAwMEYxMkZCOUJGQzExRTMyMEYyOUJGNkVFRjNBOUU0N0Y1MzMKKzoxMDlDMjAwMDlDQzhBNzY1OEJDREJBN0MyQTg3Q0ZEQjgyRjFEMzE5N0MKKzoxMDlDMzAwMEY2ODIxMjk1QzZFNTcxQUNFNDY5RUM2QkQ0QzNDNUJCODIKKzoxMDlDNDAwMERBQzc2MDlFOTIyN0EwREYxRkM5QUM0REQ0RUQzRjY0RjgKKzoxMDlDNTAwMDA3NURCQTcyNkU1RDhFQUVGRUIwRTYxMUJBRUZDM0Q3ODUKKzoxMDlDNjAwMDhFRDM3RDJGMDg0REQwOTUwQkRCMkVENUQ1MUZENTNFM0QKKzoxMDlDNzAwMDQzOUY4RkZCQzg1NUJBRkE2M0MzNzM3NUU1NEQyRDFEMUQKKzoxMDlDODAwMEI1ODg5NzhCOUZCQTRFRDc2RTg2RDk2OTJFMDFCODhFNEMKKzoxMDlDOTAwMEVGNThBNkNGMTMzM0MwMzNGNUNGNkE0QzNBN0NEMjUzN0EKKzoxMDlDQTAwMDQwNzg5RDYxRDZFNzBCNUZCMjRCMEYwRjRDOEJDM0ZFMjQKKzoxMDlDQjAwMDhBOTlFODZGREE5MTA5RTdDQTYzMkQ2NkU2NkY3QTY1REIKKzoxMDlDQzAwMEZCODJDMUY0QzBFQ0JEQkU0MDBDM0Y1M0QyQjkyQzFCOEIKKzoxMDlDRDAwMEY3QjFBNEZDQjg1MEZBOEIzNzRGNDk3RkYxQkVDNzgzNjgKKzoxMDlDRTAwMERCQkIxRUI5MEZDM0UxNjIxOTgwNEJBREVGNUM3MEIxRjUKKzoxMDlDRjAwMDlDMEYyRTBDRTA5MkZDRkRFMTYyRUM2RjdENTIyM0U1OUYKKzoxMDlEMDAwMDAzN0Y4NDA1OEQ3RERDMkJGODQ4OTYxNzg0NTJCOTFFOUQKKzoxMDlEMTAwMDBBQ0MzQjhGMURDREUzQzA0MTFCREY5RjM0N0VCNzY3NkMKKzoxMDlEMjAwMDcwQjkzNjFBRTY0MEYwMTkyMjVGN0YyNkYwNzAyODFFQkYKKzoxMDlEMzAwMDVGQUZGRDdBN0YyNkNBRUYyQTQ2N0VCM0IzQjlFNTZCRTMKKzoxMDlENDAwMEQ0NUI0QkNDMTE4NkY0RkY5MDU4Q0YxNjkxMTdGQUM4MEMKKzoxMDlENTAwMDNBMjdGNUYzQThEODdGN0M2QzlEOTdERTNGQkU2RTBDNEEKKzoxMDlENjAwMDNEQzNFQjdDRjQ3RURCQkEyOUY0REMwRUY2MUMzRTlGOEYKKzoxMDlENzAwMDVDNTc0NUNGQTdENjA1QThERUQzRUI2QUU5Qjk3MzVEN0EKKzoxMDlEODAwMDkwQ0Y2QjEwQkU1ODE5RDkzOTgxRjQ5OEYxRDJBNTIxMjIKKzoxMDlEOTAwMDc1NDg3ODYyNkE1RTRDN0QxOUI3MUY3NUYxMzlGM0M4NTIKKzoxMDlEQTAwMEQ3MUU1QTM0RkI0RDBERkY2NjY1MjRCQjBGNjMwRUUzQ0YKKzoxMDlEQjAwMDY0MzYxOUY3MzNDRkQ3RkVCQjc1QjVCM0RGMUMzNTc0RTYKKzoxMDlEQzAwMDNFOTJGNEM0Q0VBNDhGOEVDNUQ3NDE5MTNGRjlCQjg3OTQKKzoxMDlERDAwMENGNkUwQTE1QzU4NzU3OTRDRTYyQzNBOUM2N0UzMjA3RDcKKzoxMDlERTAwMDlERjU2MkI0MTkzNEVEMEYxQUY4QjgyNjk4MUFEMzZFOUYKKzoxMDlERjAwMEE4MTFGNDU5NkJFM0ZCRUY4QjBDRkNGRDkyRjhGRTUyQkIKKzoxMDlFMDAwMDA2RDc3NzlGQzQ5MTMzNTc2Nzk4QTQzRjZGQTFGREMwRDEKKzoxMDlFMTAwMDQxN0NGNzkzMkI2MkMxNzc3Rjg2NTdDN0M3OEI4MjA2MzkKKzoxMDlFMjAwMEJDMUFGQUY5QzREMjNFQ0MxNzgzQ0ZDRUQ3OEY1QzlGMzEKKzoxMDlFMzAwMEIxRERDMzE5NUM2RUJERjhGRjI5N0Y3RTcyNTMzMkY5MjQKKzoxMDlFNDAwMDBGMDgzNzhGNjZGRDlGREM5NDU0MUIyQjJFRjM1QTA2QTgKKzoxMDlFNTAwMERGMDcwNUVCOUMxNUI4QzhENDBGNTlEMTU2MUNDM0JDRkQKKzoxMDlFNjAwMDdDOUY3N0E0MTNFMzQzMzIwRjIwM0VCRDlBMjk4RTQ0OTIKKzoxMDlFNzAwMDMwNTQwN0MzMTVGMEUxQjUxNjQyRkZFNjgxNzEyMjY2NDIKKzoxMDlFODAwMDFDQzc2NzhBRUE1OUNDQTk2MTlBNzMxRUVBNjA3QTgwNzYKKzoxMDlFOTAwMEY2MjEyQkU1RUZGNEU2RDBCRUZGMDVEMjEzNTMxRjFCQ0UKKzoxMDlFQTAwMDc1QUU3REJBNDFFRDJGNTBDRUVDRjg4MUU1OENFNDczQjAKKzoxMDlFQjAwMDc2RTZDMTUxQjFGNDY0MkQ4RTdEMjlBQzYzQ0JENEZCMjEKKzoxMDlFQzAwMDQ5Q0U5Q0E3REYwQjg1NUZBRERBNEJGQkQ2NDM4NkRGMUYKKzoxMDlFRDAwMDJFRjc5MEUyNTI2QkVEMjlDNTBDRkNCQUVGMTJGODMzNjUKKzoxMDlFRTAwMDM0ODNGMUYzNTg5RjI1ODREMUNFM0YyMEU2MDk4RUZGQkQKKzoxMDlFRjAwMDI1RENBRjZFOUU4Q0NGN0ZDRTBBN0M5ODAxRUQ5NzU5MDIKKzoxMDlGMDAwMEI5OUYzODNFQzNGRjExOTYxM0M1M0VCMDM1RDNCQTExODEKKzoxMDlGMTAwMDlGQ0NDOUQ3NzE4OTU4Qzc0NjkzMzcxRkQ3RjFBNUUyOUYKKzoxMDlGMjAwMDFCOEI3RThBRDMxNEY2RTEzMzg1NDVDNkYzQkNCQjcwMjgKKzoxMDlGMzAwMDEwRkRCM0Y0OEIxM0JERThERjI2OEU2NkFDODdFMkUxM0IKKzoxMDlGNDAwMEJFMDQ4QzlCNTk5M0ZBRkY3MTI0RjJGQkVCMjY4QzMwRjQKKzoxMDlGNTAwMEIyRTc5RDdDQkVDRjNGOTI0QkZCMkFFODAxQTE3QzI4NTMKKzoxMDlGNjAwMEM2RjczMEY1NEQ2ODg3NDNGQjZCNTlGMDE4Q0VFRkE4NjQKKzoxMDlGNzAwMEQzMUUzMkMxQkM4QTY3N0ZFMUMyN0NBOEU3QkI2N0QwMzEKKzoxMDlGODAwMDNFNDJFNDI5MzU2NEM1NzMwQjNEMjdGRUVFNkFFOEVGRDcKKzoxMDlGOTAwMDkyMUUwQkM1OUIyRjYxMkFDOUYzN0EzMzdCMDBGOTI2RTkKKzoxMDlGQTAwMDFFM0M4RkZGNzVFQ0ZDQUUyQjMyQjlEQzkzNzk1QkM2OUYKKzoxMDlGQjAwMEVGNzlFMkZCRjEzODc5QzQ4RTRDQUUxNzY0N0U4QzQ1QTQKKzoxMDlGQzAwMEU2Qzc3OEZDRTdDQzhGQjExOEYyNjMyQ0U2MDBDMzdEQkUKKzoxMDlGRDAwMDYwQ0I0MDdFQ0M2MjQ2RjkzMUQwOEYzNjNGRTZGODhDQkMKKzoxMDlGRTAwMEQ4RjM3MDhCNzk1ODRFMjdDNUU5Mzc4NURFMUYxRjcxNkUKKzoxMDlGRjAwMEVFNzU1QTRFMjdFOEYyQUNBM0VEMURGNDNFNUU3RUNFMjAKKzoxMEEwMDAwMDc4MzFGRUYxMzhGOTQ5NjMwN0ZBQ0Y2NkExNzQ2RDNCRTgKKzoxMEEwMTAwMDJGOUZGN0MwMzg3OUY0REQ2MkM4RjM4OTdFRTdGOTNERjgKKzoxMEEwMjAwMDFCRDIzODlERUNDRDcyQkE5NzQyRDc0QjU5QUYwNUU5OTgKKzoxMEEwMzAwMDc0ODlDMzZEQzFGODUxODBGOTNBRTlEQzhFRDlEMkRGNTkKKzoxMEEwNDAwMDJCRjk2RTA0RDYzMzdGODE3NkI2MDkyNDJEREFEOTRCRUQKKzoxMEEwNTAwMEQ2NUFCRUU4RDVDOEE5NkFCRkJFQ0NCMEJFNDZFRTZFMjEKKzoxMEEwNjAwMENBNjIzNERGQzQ3MTYzMjhBRkVGMTRGM0E2M0FDRjIxN0MKKzoxMEEwNzAwMDM3MTdEQjU1QkI1OUIzREU0MzcxRUM4NjVCMDVGQzBFMkQKKzoxMEEwODAwMDY1Qzc4NkRGNzU5OURDRUU4ODc3MUVFMkQ2Q0MxNERERDUKKzoxMEEwOTAwMDM5QkREQjlERTc5Njk3MDhERjYwQkFCNjdGMjMxRURDRUIKKzoxMEEwQTAwMEY0RkQ3QzcwRjZFMEU2MUFDNkQxQ0ExNTlFQkZGRjE3MTQKKzoxMEEwQjAwMDg3Nzc5QTM4NTdDNUNGMDU1ODBDNzlFODlCQjJCOEZDMUEKKzoxMEEwQzAwMDhCQ0U5QkU3QTE3RkU0MENEQzlFODk3MkQxRUMxREFEQTkKKzoxMEEwRDAwMDNEMDdEMDY1RjYyNzREODBFNzIxMjE3NzhDNzBEOTlEMEIKKzoxMEEwRTAwMEM5RUQzN0UzQkFCQjQ0M0U3REEyQ0E5QTNCMzVGMDM3OEYKKzoxMEEwRjAwMEFFRjczOTQxRTdCMkZFMDYwQkRGQkY4MkJGODAxREYwMkQKKzoxMEExMDAwMDcyMDNFMzcyRUZFMUNDMTEyMjJGM0NDRDhDRjI3MDMxNUYKKzoxMEExMTAwMEVGODJEREUwN0M4QkY2OTMyNDlDMDdDMTRGQzBERDA4MDUKKzoxMEExMjAwMEM3MDBGM0RFODg3OURCRTc4MzY3NDc5NkZGNjE4NENCNUUKKzoxMEExMzAwMEQyMDM4OTU2OTRGRjM3REFGQkY3QTM4RkRBREI2M0ZBOTEKKzoxMEExNDAwMDc4MjQzQzNGNzc4QzNDQkM5REUxRkVEQjk4OTdGN0MxQkYKKzoxMEExNTAwMDMzNjU4QThGRTc1MUIwOTk2NEVGMjhBMTVDRjVFQ0M1QUYKKzoxMEExNjAwMDQzQjc3NzM2QTYwNEM3MjA3RjdDMjlGMkFFQTUzRURBMzYKKzoxMEExNzAwMDk4NzM2QzM0RTZDRjdCNURFNUFCQjIzQzE0NzdGN0E3MDAKKzoxMEExODAwMDIzMURCRDY2RTM3NEY0MDhGNDA0RTVBNjNENjNCN0EyOUQKKzoxMEExOTAwMDlFNzkzMDJCNTg4N0Y1NjQxRTFGRjNGNzhGQzYzQzg0RDkKKzoxMEExQTAwMDBCODUxM0ZDNTk5MDhFQ0UwN0E3MjczMjE5RTFFNzUwOTMKKzoxMEExQjAwMDRBNkMzQUY5NEQxQzNBMzFGMjA3OUQyRjJCRkRFMUY4MUMKKzoxMEExQzAwMDQzQzI1M0VFNUJDOEY5RDU2NTcxM0E5NDRGMDkzNzYzQzIKKzoxMEExRDAwMEZFNTA1RDk2NDlENEUzRjk4ODBGNjYwNTA4Q0U3REMzMkQKKzoxMEExRTAwMEJFM0U5QzAwNzMzRjY0QzhGNzkyQ0Y5MzQyMUU5RDZGQTIKKzoxMEExRjAwMEZEMTJERTNGOTQxQzNFOTQxODdCN0VBNkFDQTFFMUU3RTUKKzoxMEEyMDAwMDg3OUE1RkJEOUM1RjcxRUNGOTY1NjYwRDBEN0UwMUQ2ODYKKzoxMEEyMTAwMEZGNTlEQTBGQTBDNzAwQ0ZGNTg4NjdCNkExOUZFNEUzMjYKKzoxMEEyMjAwMDIxNTdFQzc5OTYwRDc5OUU0MUNCMEZBMTZGMjU3REIzMTcKKzoxMEEyMzAwMEQwRDIzQURBQUZDRjRBOENCOTVGQkYwMEZDMjdGNDdGQTcKKzoxMEEyNDAwMDhDRkJGNjcyN0YxRUU0MDdBREI3QzZERTdGNjMzQUUyOTEKKzoxMEEyNTAwMDdEQTY1ODc3MDY4QkE0RTE3RUU2MUUxQkM1RkY4REVCMUQKKzoxMEEyNjAwMEJGNDJEMDExQzBBQjgyRTAzNUE3OUZFMjE4ODc0NkM3MzYKKzoxMEEyNzAwMDk2MEIxNUM2RkE2RDdDOUM3OEU3MEJBRUNFNTI4Njc0QjEKKzoxMEEyODAwMEJFODA5NTA2MjlGRTU3NkU3NzQ0NTRDMEMzNkQwMjFGRTkKKzoxMEEyOTAwMEQ2REM1NTNFQjQwRkNCQjNERTNCODhFQjA0Rjg5RjE4RjkKKzoxMEEyQTAwMDgwQTcyNjlGRUZEOEJBNzc5QzIzMkRGMUU1NzZCREZBREIKKzoxMEEyQjAwMDQyNTk3MzhDRjUwNDNEQzExQkIzMzQ3RTUwRkQ1M0VGRkUKKzoxMEEyQzAwMDNBNDc2QUYwMzU5RUY1OUFGOEY5RTg3RTkzQ0UyRkNFOUMKKzoxMEEyRDAwMDY0MTdFNDE3NTc2MzlGOTg4RkUwMEE5MDNFNDBGRDgwMTMKKzoxMEEyRTAwMDdBNjdFM0VFQTkyNTg4NENCNDMzMzA5RkE3M0YzOTkxQjQKKzoxMEEyRjAwMEU0Njg2QkNFQTU2M0JDMUE3ODg2QjJBNDdEQTlDNkIxMEEKKzoxMEEzMDAwMDFCRkY3QkY5RkY1MUJCNDlEMUQ5QUZEMUZFQ0RGNDVFMjQKKzoxMEEzMTAwMEUyQTdEQ0YxOEYzMUYxMTFGNEY4RUYyMTNERTZGMjZGQTUKKzoxMEEzMjAwMEM0QTcxMTdFQTE3QjJGNEZBM0YzMDUwOEJGRTlEMUZFN0YKKzoxMEEzMzAwMDA2RjAxRjA3Q0YxRDFFN0YzQkY2RDcyMENFRDEyODMyNTcKKzoxMEEzNDAwMDhGNkYyMDVFNjE3NjFFQjY0N0UxM0Q1NEJDMjQ4QTc4NEIKKzoxMEEzNTAwMDFBRDgwRDhGMjExRDU4NkQ4MjFGOTk4M0NFODc0QkJCNTQKKzoxMEEzNjAwMDg1MTlFQzFCMzY4NkZCQjczNzY0QkRGNzQ3OENGNzZDNTUKKzoxMEEzNzAwMDRDRTEyQ0JCRjE0NzA5RTQwNzJFNTE5QzU2NUMzN0Q4QzEKKzoxMEEzODAwMDFGOUZGRTFDRUEwNzU5RTREM0JCQzgzRjk0NzY0NjkyNTAKKzoxMEEzOTAwMDdBMzY2OUU4RjM5NEZFRjJGOUYyQTlGN0ExM0QwNkYzRTMKKzoxMEEzQTAwMDk5NjE3MkQwRkVFNjNFNTg1RjM2Qzg4RDE5NTZGRTJDNzQKKzoxMEEzQjAwMDlGMDU1NDA1RkRDRDUwRjNCQTdCNjE1RURGQjIzMzg5NTIKKzoxMEEzQzAwMDU3QzBGM0E3OENDMzYxQ0Q4MURGQjlEMDFGOUQ2MUI2QTMKKzoxMEEzRDAwMDFDRDNDQTJENjNCQ0UzOERBQzY0MzdFMTUxQzQzQkJFRDIKKzoxMEEzRTAwMDY1NzM3RTdEMzFDMkU1NzIxN0MxQTVGODk1OTk5OURBM0EKKzoxMEEzRjAwMDc4Q0I0MEJDNDNBQzYzNUU2ODI5OTdBNzA2MzkyN0U1NTQKKzoxMEE0MDAwMDk5QzlDRUVGMTE2MTdFRTY3NTY2NTBEQzg4QzMzREE0MjQKKzoxMEE0MTAwMDMwMzM5NEFGOTA2NTc0NTJBMDdDQjk0MDkyODJFRDYxNjQKKzoxMEE0MjAwMERENTc4ODI3NUIxNkNDNDIzOTgzNjkzQzM4MUU3ODdGMUMKKzoxMEE0MzAwMDU5Rjg2QzlERUFGM0UyNzNCQTEyMzBGMzc5ODQ3OURFNEQKKzoxMEE0NDAwMDIxNkJDRUMzRkEyNjdCQUZDQUNGRTdDMTBDMzJCMEJEQjkKKzoxMEE0NTAwMDFDOEY5NzkzNDU3OTQzQ0RBOTFCNkZGMjBFOEU2MzMwMDUKKzoxMEE0NjAwMDQ3MzJEOUJENTYzMUFGQTM0RTQ3QzgwNEVGNkQ4RUM4RjEKKzoxMEE0NzAwMDUxQ0E0RjE1NEY2M0JDRTMzQjUzMjg4NEY5RDk3N0FBREYKKzoxMEE0ODAwMDYxOUE2RjEyOEI0NDdBMzAzRTYxMDcxMDk4Mjg4RUYwRTMKKzoxMEE0OTAwMDA3RTQwM0YwNkUxQTcxOUUwOUNFNTM5MUJCMThFNjM5OUEKKzoxMEE0QTAwMEZBMTUyQ0E3MUJGNDkxQzdCMTg2RjI5RTNEMDFCMzQxNkEKKzoxMEE0QjAwMDBGMDUxNUU0OUJDQzVBRTM3QkJEN0VCMkIzNDM3NDFFRkIKKzoxMEE0QzAwMDQ4ODkwNEIyQ0VBNjlGM0Y1RTYzOENEMzU4NjY3MDE0NTEKKzoxMEE0RDAwMEY3REZDMkVEREU4RjEzNzkzQjQ5MTdFOUQ5NUNGRjM2MTAKKzoxMEE0RTAwMEJBQUM4Q0YyNUQzMkVDNzZCNERCNEYyNjFGQzEyMzk3RjkKKzoxMEE0RjAwMEE4MzdEQTUwNkZEODJEN0U4Mjg3RDQxRkFCQkI2RTY1MkMKKzoxMEE1MDAwMDg4OUZDNjVERDUwQ0U1RTg2RjE0QkVGRjE5QkE0MUExNUUKKzoxMEE1MTAwMDNDMDU3OTZGNDM2RDExN0IxRjVBQjJBNkVDMTEzNENFMDYKKzoxMEE1MjAwMEZDNzc4MjM3MzQ0MEI5RTYzRDM2M0UwMkY1NEFBNjA3NEQKKzoxMEE1MzAwMDJBRjE3RTk2RDZGMUNDQjcxRUNBQUQwOUMxNjc1RkMyQkIKKzoxMEE1NDAwMEY1MUM1MEE5OUYyNjcxMkU5NjMxNjdGRDRFRTg3RkVCRDIKKzoxMEE1NTAwMDc1QzM3QzlCNzA0OTE1RkQxQjMxMEZBOEZGM0VFNkM0RjcKKzoxMEE1NjAwMEJDOTE0MTc0N0EwNkQ2MDdGODdGMDJDQjMwRUZBNjE1NkUKKzoxMEE1NzAwMEMxNUZEQzAxRjVCM0RGNjMzRUFBMjNCRUEzMkY4Mjc4NUYKKzoxMEE1ODAwMDUzMDQzREUwRkJFOUYwQkU0OUQwNEQ2MUI3QzJGN0VGOUYKKzoxMEE1OTAwMEREMzZDQTlGNjAwNzMzODk1RkU2REJGOTM4NEREREU1QkMKKzoxMEE1QTAwMEQ3NEU4Mjc5MTVGNjRDMjQzMjFFMDlGNTMxQkYwOTMzOTYKKzoxMEE1QjAwMDBDNzg3RTFEMjM3RkQ5NTg3RjI0RDZGNzUyQjQ4QUU3QzIKKzoxMEE1QzAwMEQ1RTQ1OEU5RkUyMzI2RTREQzY0MDNCRjVEMTZBNTdGQ0QKKzoxMEE1RDAwMEZBNUUyMkNBNEQ0MjFGRTlGODA0RkIwMUZGREM1RkM2QTgKKzoxMEE1RTAwMEI3RjNBOTlEOUJGMzgzOEZDOTNGQ0VCNzk3QjJFODFGRkUKKzoxMEE1RjAwMEY2NUIxMTFEODdFNEVGNENGMTZERkZBMkQ5OTRENzNEQjYKKzoxMEE2MDAwMEQ5MUNEOThCN0M3RDk5Nzg5Njg4MjdGMkI1MURFMEI4NDYKKzoxMEE2MTAwMEQwRENCQ0RGMDNFQjQ5NUJDQjdDMkQzOENBNjI2RjJCRUYKKzoxMEE2MjAwMEY2NTdDQTAyMkFDMkI5Q0M3OTVGMkJDRTZGRUFFMjAzOTEKKzoxMEE2MzAwMEU5NDg1RjRGNjYxNzEyM0Q1RDZFRjcxNTI2MDA4OUI0MzUKKzoxMEE2NDAwMDRFRjFGOTlDRjBBQTc2QjE0MjcwOTk1RjZCMEY2M0ZFRjAKKzoxMEE2NTAwMERBRkM4MUZCN0E4MjA1MEI4MDZGMTYwNjE1NzE4RTNFM0YKKzoxMEE2NjAwMDU4QjA1ODEzOEY5NTc5N0QwQjZDRTA0N0M3REE3N0NFRDkKKzoxMEE2NzAwMEU2N0E1Q0I2NkYxMkU3NEVFNEY3NkREOTBFOUU1Rjk5RUQKKzoxMEE2ODAwMDdENjU1MzM2RTU1N0YwN0M2N0UwRkJEQkIyMjc0NUU1OTcKKzoxMEE2OTAwMDA4OEM0QkY5MjhGMzk4REY4MkVCOUEyN0Y4NTZGMkZERTUKKzoxMEE2QTAwMDdDRkZFRDY0QjdDRTBGRThFRENGREYyODFDREZBMTQ1QkUKKzoxMEE2QjAwMDBBRDk4MzBCNkJDRjZEOUZCNjY0Q0JGRERFM0MyN0M1RkIKKzoxMEE2QzAwMEI3OTlENDQ3OUNBRUE0REM5RThCN0ExQ0U1NkQxNUU4NDcKKzoxMEE2RDAwMDZEOEQ3REJDRjhDRTMzNjlENDJFRjNDOUQ1Njc4NzQ3MUQKKzoxMEE2RTAwMENGQjkzNDE5Q0VCOTM0OEE3MzJFNERCQjVBMkMxOTQ4QzAKKzoxMEE2RjAwMEVGRTI5QzRCNTNGN0U3MUJCNUY5N0QxMjRFODNDRkI5QzAKKzoxMEE3MDAwMEY0NTM1RUUzMDI2Qjc4MkY5RUZGNTlCMDBBRDYwOEY1MkEKKzoxMEE3MTAwMERGMTBFNzIyREVDNDczMTExM0EyNzQ5NDdDNUQ0Mjg0QkYKKzoxMEE3MjAwMEU3Q0RGOTI5N0YyRkNGOTlFNEMzN0M5MzM2RDMwNENBQjAKKzoxMEE3MzAwMDE3NkE0QjQ5RjY2OUYzNzMzNkI1MzQ1NzYyM0Q5OTI3NkEKKzoxMEE3NDAwMDI0Q0ZCNTJDODhCMzFGRkM5QzkwNkI1QjE0OUVBRjE1NzcKKzoxMEE3NTAwMDVBNjQyNzc4N0I1NDc2NTA3QjRFREY1MzE4QTAzQ0I5NUYKKzoxMEE3NjAwMEE2NkMyRjhEQjM0NUM0MTEzMEFGNzQyMjNDQzM2MDhFRUMKKzoxMEE3NzAwMDcxN0NGMUY2NDZGOTAwRkQ2REMwRkUyQTBBN0Q5NDFGM0EKKzoxMEE3ODAwMDUzOTFDQUYzQ0MzQ0U5ODE5MkRCOEFBMkZERDY3NEYzRTMKKzoxMEE3OTAwMEJDQkM5QUMwRDc2RkYxRkNEQUVBNTI4NEE3NTE5RTRCMzkKKzoxMEE3QTAwMEZBMzJDQTc1QTBCRjdENDg4RkRGOTlCOERFODlDQUY3MzMKKzoxMEE3QjAwMEMwQTI5QkEwQkZCRUY3QUQ5NDNGQzdFRUY2MkIxNjY4QjQKKzoxMEE3QzAwMEY3RTJCQjRFMUY5RUE3REI1MDFFQThBRUE0RUY2NjNBNzEKKzoxMEE3RDAwMEVGOTc1MUNCMjIzNkY4NUVGQTlFNzUxQkU2RURENUIxQTgKKzoxMEE3RTAwMDc2MkJGNjU3NjdEMDVCQUIxQzZGNUE5MTNGNTc2REI3MEUKKzoxMEE3RjAwMDQ0RTk5MTYxQkVBMUFGMTAwNTVEQzNDRTQxNzEwRjkyRDYKKzoxMEE4MDAwMDNGNTIyRTE5RTk5ODhERDRDQjlGMTIyOTZGNDEyRTcwOUIKKzoxMEE4MTAwMDdEQjU5OEVCMzlGNkE0ODJGMTlGQkVFNDIzQUFGMDlGQTAKKzoxMEE4MjAwMDQ5REU0RDkyNDJDQTIwRTcyNzc1QkY0REY2Q0EzNDkwRTMKKzoxMEE4MzAwMDBGRTg5RjI5NTgyRUE2RkE1NDA2RjkzOTA2RjM0NzJGMzgKKzoxMEE4NDAwMDYzODk0NDVGODNFQzA0MzFBRkQyODE3OTczN0I0OENBNUEKKzoxMEE4NTAwMEM1RjIyOThDRTE3RDA2MTIyRjMwMEVEMUIzRENBRjlCRkYKKzoxMEE4NjAwMDg0RjdGMEMwRjMzMjMxRUU5RDI2N0Y1MTQ0NDEzQ0IxNzQKKzoxMEE4NzAwMEIwQTkxMEVEODgyMEQ5M0I0NkZCQTdDQ0RFOUM2NDg3QUQKKzoxMEE4ODAwMEY1NEQ2MUVEMjQxNzI3RUY3RjkzRTQyNEUwRjkyQ0NBRkUKKzoxMEE4OTAwMDk5RDc5OEM0QjNDRjhFNzJBNjEyMTNGRjU0N0NFQUYxRjUKKzoxMEE4QTAwMDM0Q0JGMTkwMTlFMTM0MkJDQjg4OEY5MDE5RTEzQURCNEUKKzoxMEE4QjAwMDNCMDg0Rjc0NEVDMDFGMDc0RjdFMjk0Nzk4NUU4RTE0ODkKKzoxMEE4QzAwMEIwMzNGQzVDRjI3RDZGREQ4MTdFRUZGOUVDOTAwRjNERTMKKzoxMEE4RDAwMEMxQUMxQzkyOUY3QTdCMjQ1RTVFNUQ0MThFRTM4MkYyNjYKKzoxMEE4RTAwMEVBRkEyQ0RDNEZCODk0RjVBRURDQTkwQ0E2OEI5M0ZCRUUKKzoxMEE4RjAwMEQ3QUE1OTFBRkE5MTc0Qjk1QkU0RDkyQkFGOEJCQ0REOTYKKzoxMEE5MDAwMEQyNjREMjczNTFCREM4RjE1RjI2NEE5NzIyNUQ2OUYwQzcKKzoxMEE5MTAwMDdGQzVBRTg0ODgwQUY0NTYyMkRBNUY4QUY0MzAyMUFBMTEKKzoxMEE5MjAwMDE3MjMyNjg3RDcwQUUzNkU1NDdDNkQ2QTBDQkM2N0I4ODAKKzoxMEE5MzAwMEJDQTRGRjI2OUFGQzJBRDk1M0NDOTc4RTc4MDZCQzRGMkMKKzoxMEE5NDAwMDQzNzg0REIxNzdCNDlBNjE5RTg3QURCRTlGQTNCRjUyNDUKKzoxMEE5NTAwMENFQkM4NEY3NzI4MzdFQTk3MEQ0OTg5MTNGMkJFQzQ2Q0QKKzoxMEE5NjAwMEZDRkEwOUVGOTVDRTQxRUY0RERGMDdFRkMzMTFFRjUyMkYKKzoxMEE5NzAwMDdGMENDMUZFMDRCQzJGQ0M4OUIxNUYxODBGRUZDMUVGNzMKKzoxMEE5ODAwMDg5NzcyM0JFMjVERjc3MjYzODJCMUMxOEQ3QURFM0Y5NEUKKzoxMEE5OTAwMEM0MTNERjFGRDk4QUU1OENENTA1NzRDRUE1MzNDREY3NTYKKzoxMEE5QTAwMDA2N0Q2RkU2REY0QjdCRkMyQURFOUY1OEI4MDZCRTQzNzAKKzoxMEE5QjAwMEI5QjMyMDUwODFFNUE2QjUwQUM5Q0I0OTFGMDU1QkIxRTMKKzoxMEE5QzAwMDNDRjI2RUZFQkQ2NDdERjMxQjc4MEY1OTUzODhCN0RGRjAKKzoxMEE5RDAwMDdENzQyM0REMjcxMURFMjhEQTk3Qjc1NzYwQjlBOThEN0EKKzoxMEE5RTAwMEI3RkYyQUQ5MUU0MkZGQkFFQzYwQjgxNURGOEY3RDgwMTEKKzoxMEE5RjAwMENGNDNEQTc1RDMwNTlENzUyQTJGQkM0MUVEREE3OUJCQkIKKzoxMEFBMDAwMDlCREZCMjI3OTI3QzEyNzZEQTM0QjFDRUU5OEZGMTc1RjIKKzoxMEFBMTAwMEJBN0Y3QjU1OTUxN0U4RjBBNkZFOTAwNUU5RTBCMEE5NEUKKzoxMEFBMjAwMEExOENFNDY1MUM3RkFCNUM2OUNGQzNFNzJDOTAwQjhDRDkKKzoxMEFBMzAwMEYwMERGNDM5ODJFNzlCNkU4MzIxMUVDQkUxNzY4NkNDNDQKKzoxMEFBNDAwMEQzQzQ3Q0YxNkEwREJFMUVDQkUxNzEyNzU5MkZDM0M1NUIKKzoxMEFBNTAwMDc4NUVGMUEzQzk2NEI3Q0EzQ0QyQzhDRjk4ODI3MTAwQUUKKzoxMEFBNjAwMDVDMjNFOUQ3Mzg3OUE1QjMwQTlCNDk1RkNFMUEyRUYzNDgKKzoxMEFBNzAwMDQ5N0JDRENCNjBEQzkyQjM3RkI4MzI5NjdGRkQ4NDE4RTIKKzoxMEFBODAwMEY3ODhDODdGOTdFRkVCQzIwNTI2RjQzRjNBOTE3OEU4NDQKKzoxMEFBOTAwMDFFQjNEQUY3RDEyRUU5NEM2M0JBN0I0MjNBMEI3OEI5OTAKKzoxMEFBQTAwMEYzRDE5QTFGQjdFNTAxN0M0RENERTYxMDBBRkQ3Qzg1RjgKKzoxMEFBQjAwMEVFM0RCOUE2ODc0NTUyNTMwNkNGN0Y5Njk5NDU3OERFN0QKKzoxMEFBQzAwMDAzOUZGRkNBNTZFQkI2NEQxQTNCN0RCRTE0MUI5NzhGRjIKKzoxMEFBRDAwMDIyM0Q1MjIzRjAyNEU1QzU3QzgxMkZFMEVGRERDOERGNjUKKzoxMEFBRTAwMDBCRUNDRDY0MTcyRTEyRjJGRDE2MTZBNjM4QzUyRDA2RjYKKzoxMEFBRjAwMEZFQUU3NzdDRjM5OUM5ODRGMTMwM0QxRkFGODZFOTcwRDMKKzoxMEFCMDAwMEJERDBGRkY4MjcwMEZGQkE0NzkyOURBOEU3NTc3N0U4MjYKKzoxMEFCMTAwMEVCRDUzREYyRkU0MTZFNUZFOUY5QkM0RUYyNzk1OENGQkMKKzoxMEFCMjAwMEU3NjAzODcwM0VGRkQ5MzhEQTdGOTFFN0ZBMTJFQ0ZEMjIKKzoxMEFCMzAwMDlGODU1ODc0QkQwM0ZBRERDMDdGMDk3OENFNkYwQ0ZBOEIKKzoxMEFCNDAwMDJEMjY5RTVGMjhDQTcyREM1M0VENUMwRjg3NDAwRjBCRTkKKzoxMEFCNTAwMDNGODc0NEVEQTk0M0IzQzM0ODBGMjU4MjdGMjUxRjk3NDQKKzoxMEFCNjAwMDA4N0QzRTQ4NUY1NzE5RkQ5ODg3ODgzRjI2OEE5Mjg0NjIKKzoxMEFCNzAwMEJCRDRDRkQwMEZFOTY3Nzk2RTEwRjRGMkZCN0VGMkVGMTEKKzoxMEFCODAwMEMxRkZDNDc5OEVEM0YzQ0IyNjA1RTQ3MzQxRDQ1RjAxQjIKKzoxMEFCOTAwMEJDN0Q4RDc4MDM3OTZDRTc3MThBNzY4NkYyMkNBRUREMDgKKzoxMEFCQTAwMEVGNTgxM0QzRUUwNzQ5NDdGQjAwODNFREZEODhDRThFQTcKKzoxMEFCQjAwMDM3RTIyQjlFNUQzRjgwQUYwNEIwOTc5MkQwOEY2N0M0ODEKKzoxMEFCQzAwMDFGRkY4OENGMjFFNDc1ODA5Qzc2RTRDNjkwRDNENjdEQTQKKzoxMEFCRDAwMEJDNUVGRkQ2MDQ4QTE3QzhGOEI4RTQzNzI1OEZEQkQ1RUEKKzoxMEFCRTAwMEVGNjZGOTVEQjlCOEZGMjBGQTNGNzRFQjJDREFBRkZFREYKKzoxMEFCRjAwMDg2Rjk2OUJGMUFGMzhENzI2M0U0NEJFMDdFRjUwNjRENkEKKzoxMEFDMDAwMDlDRjQ1MDVBRUNCOEY1RjA1Q0NFRUY0QjcyRjlCQUM2MzIKKzoxMEFDMTAwMDdCRkM1RTFDRUY4ODk1QzdDNThGMjQ4QTY3MEFERjU3QzcKKzoxMEFDMjAwMEI4Mzg5N0M3Qjk5Nzg4NjdCOTc4MUUxMTc5RDg0NzVDNDMKKzoxMEFDMzAwMEZBNzhCQUFDNTcyMUM2Rjk3MjlERERCRTQxMjM1N0JDRTQKKzoxMEFDNDAwMDNGQjMzNUEzQkVGMjE0OEFCQ0Y1MzU5QzVFRkI1RTQ5NkEKKzoxMEFDNTAwMERCQUFCREFGRUQ5QURDRjIyNTA4NDc0RkExREY5QThENDQKKzoxMEFDNjAwMDcxOTY1N0I4NUU2ODM0Rjc1QTMxQkZFNDFBNzc3MDJBODQKKzoxMEFDNzAwMDdFNkZGNDMyRkYwQkQ4OEZCN0Q3M0EwRkUwREMyN0Y2QTAKKzoxMEFDODAwMEU5RkIyQ0RDREZFODRCRTA0RjM5QUY2QjcyQUI5N0UwQjAKKzoxMEFDOTAwMDdBRkI2RUVEMjVGOTMwNTBBRUVFMjVGRUJGMjYzNzQwMkIKKzoxMEFDQTAwMEUzRjZDRDk3REY0NUY5QzdCQ0NDODQ3RjU4MkVGODgyRjgKKzoxMEFDQjAwMEUyQkMzMUUyQkE4M0UzQjhGQUZCNjc5QUFDQjFGNzk3MkEKKzoxMEFDQzAwMDU5NUVCMjJFM0U3QjQzMzc4RjFCREU2ODY3MUI3M0UxRjQKKzoxMEFDRDAwMEZCOTJFRTRDRjIxRkVBNTI0MkEzOUQxNEM3RkJFRkM1NTQKKzoxMEFDRTAwMDVERkI4NkY1RDBCQTM2OTVGN0U3M0Y1QTRBRkJCODE0QjQKKzoxMEFDRjAwMEY3NTlEREZEMzZDOUI5RDU5MjRGQkFGNDdDNTIyRkYwMjEKKzoxMEFEMDAwMDdCQkVGRDBGNjM1QzdDMDhGQ0IzMjYxNkZGQkM4Q0ZBOEYKKzoxMEFEMTAwMEM5MTI4NUZGNkQyMjBGQTk1MjZEQThDMEI4RDBBOTE1MjAKKzoxMEFEMjAwMDhDQ0VCRkRFRjZBRTRBRjQ3NERCQjMwQUREMDcyMUVENEMKKzoxMEFEMzAwMEIzRDUwMkJFRjFENjgzRTcwN0JDMUFGOTgxRTcwN0JDOTkKKzoxMEFENDAwMDFBRkYwQ0NGMEY2OENCNzg3RTQwNUIxRkNGMEY2OEJGMTgKKzoxMEFENTAwMEUzRjkwMUVENzczQzNGQTAyRDk3QjBFNUFEMTg2NzZCQTcKKzoxMEFENjAwMDZBNjNDRUIwOTc5RjI3RDBCNkM3RjMwNERBMzI5RTI3MjYKKzoxMEFENzAwMEQwQjZDN0YzMDREQUYyMjlDNkUxNzhFQTMxOTVFMkY0RjUKKzoxMEFEODAwMDc4QUU0MERCRkVFNjc3Mjc2NjIxREQ3NDI1RjAzQzMyQTUKKzoxMEFEOTAwMDE2RjJGNzE0MDE1QzU2MDhCOEUwNzkwMzZEN0ZDNzUzQ0IKKzoxMEFEQTAwMEFFN0M4NzAxRERBREU4NTkzOTA3OUY5N0VDNUFBNUVCREEKKzoxMEFEQjAwMEFGNUU2RDIwM0E2NEVENUNFRTM2QzMzRjI0M0ZENTIyOTIKKzoxMEFEQzAwMDE1RTdGMUVEMkU4NUE1MTdFMEZERTEwNkZERDlCRDc5NkEKKzoxMEFERDAwMDIzOEE5RTVCQzJGQUY3RjU0QzEzQUYyRDE4MUM5NzdGQTAKKzoxMEFERTAwMDM5NTdFNDIxRTZCMDFDNkQ5QzI2NEEwNzBFNUYwNEQ3NTQKKzoxMEFERjAwMEZGOTFFQThCNDUwNzI1RUNBMjU0OEFDRkJDQTM2MkVDRjUKKzoxMEFFMDAwMDgxN0RDNTlBQjc1Q0FFNjhFMkY3MDY3OEQ4QjJGNEY0RjMKKzoxMEFFMTAwMDkwRTBENUQzNDNEMjE4M0QzRDI0RkJGNEY0OTAzQTQ1NUQKKzoxMEFFMjAwMDRGMEY2OUZFNzFFNzg0NkY3QTk1OUUzRThDRjA5RDAyMEMKKzoxMEFFMzAwMEZGMjA3QzI3RTBDRDkwMTg1NzgyNzU2MjlDRjcyRjA1ODQKKzoxMEFFNDAwMERGMkY3MkM1QkU4NzgwRUZCN0VDRjIwQTg3OTczRUQ3MzcKKzoxMEFFNTAwMEQ4Q0JBMkY2NDlFOTNCQ0RCNDQ5NkI4QzdCNEEzODRBNDIKKzoxMEFFNjAwMDNCNDFDNjJGMjczMUVFQTdEQkYxQkM2NTIxREEwMURDQkYKKzoxMEFFNzAwMDdGNDNGRDhGN0M3RUQ4Q0FGRDM2QTQyMDk0OTMzN0IxRTIKKzoxMEFFODAwMDIwQzlBMzlCMENGQUZGNjZDNzQzNTZENEZGODNENjBCOTkKKzoxMEFFOTAwMDE2MTdERTFCNjg1QzJGREE1MTRDMTM0RjMyRUE3RkE1ODAKKzoxMEFFQTAwMDVCODkyNDE3RTM3MkJCQTU1QzBFOUUyNTYzQzdBRjBDQkMKKzoxMEFFQjAwMDQ1NUVGQ0RFRTFCN0U1Nzk2ODFDNjYyRkQzQzU3QjYzOTAKKzoxMEFFQzAwMERBNzM3MjFFMTIyRTcyN0MxQjZCNTZCMzkwOUVDNzE4REIKKzoxMEFFRDAwMEVEMkZCREJGMkNGRDZCRUE1NDEzOEY5NkZFQjFGNDRGREUKKzoxMEFFRTAwMDhDNzA1Njg3MTc5MEREMzVEMTI5RkRFMjlFRUJGMUJEQzAKKzoxMEFFRjAwMEY0ODc4RDdFRThGOUY2QTVFNjg1OTRERTlGMTc0NEVEOEMKKzoxMEFGMDAwMEM5MkJDNDczOUU4ODE3QzFCMjdFRkI2RkQwRjg3MkM1N0YKKzoxMEFGMTAwMDNCMENDNzlCQkJGQjIyMEZEMkNCNDZBNTk5MTlFNjc3MEEKKzoxMEFGMjAwMEYwNTVFODQ3MzVGNUE3RjNGODRCNTBCNzVGRjVCNkQyQzMKKzoxMEFGMzAwMDRCRjM1RUMwRkNGN0UwQjM1MUM0RDMxQUJCREVBNjdENzEKKzoxMEFGNDAwMEQ0QzYyRTFFMkY2MEJCRjQ3ODMxREFGQkFCNTg4N0I1MjAKKzoxMEFGNTAwMDQwMTk2Q0VGMzdCMDFFRUFDRjY4REYwRkEyOTNGM0U4MTkKKzoxMEFGNjAwMEYxOEUzQzc5REYxNkNGMTc2MDQyMkVENTA5NzhDNUYzRjQKKzoxMEFGNzAwMDBCQ0MwOEUwQTlEMUZCM0I4MTFGRTZFNTREOEFFNkQxNjkKKzoxMEFGODAwMDY2QjhDMDhGNTEzMTBGQzM2QjhEOTUyN0M1RjA3MjE1MTAKKzoxMEFGOTAwMEIwNDk5NzNCNkE0ODRFMkM2RjFCMTQ5N0IwMTIzRkI1Q0YKKzoxMEFGQTAwMDlGN0I3REQyMEVCODFGN0MzNzdDOTZFNjc5NzlEQzIwQkEKKzoxMEFGQjAwMDcxQ0UzQjdFRkM1Q0RBOTNBRjNERkZEMTY0RTVFNzBFREEKKzoxMEFGQzAwMDU5QjNGRTdDRkVEQTNDOTMzQzNGQTUwRTY1RkQ4M0UxNjAKKzoxMEFGRDAwMEZBRkRGMkYyNjVGRTAxQzBFRjJFMkRGQ0U0M0U4MjVDMkMKKzoxMEFGRTAwMENGRUYyN0Y1M0M4OUYxNDMzNTc5QTYxREZENUFBRjJCRUMKKzoxMEFGRjAwMEQ4ODJGNTg3MURFQzNEQUNBMDNDNzM3ODI5M0ZFNEU0OTIKKzoxMEIwMDAwMEFFQTMxRkEzRkYyRUQ3Qzc1OEVGMTZCQ0RGQjY2RTk3QUYKKzoxMEIwMTAwMDRBRkU2MEREQUUzN0M4MkU4QUVGRUZCNTBGRENBMzIwMDUKKzoxMEIwMjAwMEY2Mzc3RTEyNkI1RTMyQUZCOTUyMkQ0QUVERDVEOEU5QjQKKzoxMEIwMzAwMDRCODUxRjMwNzk3OEUwMjE2QzU3RkE2MTVFMEFDRUQ3RDQKKzoxMEIwNDAwMDMyQTI4M0VFQzVFQUJGODNEQkMxNkU5NUNENDRGODgxQTEKKzoxMEIwNTAwMERFRTM3QURGNjFBNjdEMDc3NzUyNDg0RDQxM0I2RTI5REEKKzoxMEIwNjAwMEUzRjdEMEY5OUE3RDQ4MkFFQUIwMjI4QUQzNjZEQ0ExQjgKKzoxMEIwNzAwMDA2RDBGRUZFNzRDREYyMzQzQ0FGOUM5MUJDMjJBRDEwRTQKKzoxMEIwODAwMDlFRDM2REZDNUU5QTBDQzUxNEUwRTc0RTk3QTVFMTNEOUEKKzoxMEIwOTAwMDIwMzdEOEY4QkU3Q0MxNUYyNzQ1MEE4MURGNUVCN0YyNTIKKzoxMEIwQTAwMEZCNDZERDQ5NDFCQUJGQTAzRjREQTVGOTFDNUIwNzRCRUMKKzoxMEIwQjAwMDFCODVGQjFFREY0Q0M0N0IwNzcyQ0UzODI2RTA3Q0IyQkEKKzoxMEIwQzAwMEM1QkQxNjNGQ0FFM0Y3REMxQzdGRjZCQjg5RThBRkFBMTMKKzoxMEIwRDAwMDY3MUQ3NEJFNUREMjlGQkIzMEI2QkZCMjQyQzBBM0QxNjQKKzoxMEIwRTAwMEMzRjNERTRGMEFGQkYxOTBEODZGOTU3OUYwNkJDNDNFNDUKKzoxMEIwRjAwMEUwQTFEMTAzRjc4Mzc5MzAyRkE0MzFDMTlGQkExMEUzQzcKKzoxMEIxMDAwMDExMDc1NENBNkJGRkM2RTk0RjREMjNCQjk5RTdCM0FGOTQKKzoxMEIxMTAwMDExRjZDMzQ5OTFGN0I5NjZGNjhDNENGNDJGRTJFNTRCNzIKKzoxMEIxMjAwMDFGQzhFMzc2RUYwRjc1NUZBNUNDM0Y4RDBCODczNDMzRDcKKzoxMEIxMzAwMDMzNUY0MkY3MkUwNUNFNTVFRkQ1M0ZBQjMxRTE3OTVBNUIKKzoxMEIxNDAwMDdDOEY5NzM3REY5N0E3RThGMkUyMUIzMTJGMUU1RUFEQTkKKzoxMEIxNTAwMDc5QTUzQzkzOUQyMzVGQkExMUVGMjNEN0U0RDdBMDlGMzUKKzoxMEIxNjAwMDg2RUI2QkM0RkJDOEU5OUVEMjEzNzQ0RjA3RjY4M0Y3RDYKKzoxMEIxNzAwMDg2OURFRkRFQzgxNTYyMUU4RDk4NEY5RUFFN0RDRkY5N0QKKzoxMEIxODAwMDM5REFCRjlCQkUzRjJERTBGNkY0M0JBNkFBNkQzMUU2NEYKKzoxMEIxOTAwMDk5Mzc4Q0NCQTc3MTFFNzMwMEY3MjUyRjhFRjA3QjNGNUMKKzoxMEIxQTAwMEUzRDU5M0U3QjhFM0NEQUI2QjQ2RUY4RDM4NkZDQ0NGRUIKKzoxMEIxQjAwMDhDMzU1RUNBMzA0RTI3NzJCRTVEQUVERTk1MDFCRTlGRjUKKzoxMEIxQzAwMDM3QkEzQTU5NTM3NkY2RTdDRkQ1QzhEN0Q5MDIzRjVEOUIKKzoxMEIxRDAwMDU3RjVFNkQzN0QwMEIzQjlGRjFBMEZDRjY1RTY2NjA1RDQKKzoxMEIxRTAwMEUxOTBFMDBBMDZEMTFFOTFGNzE1RTM3REM2M0NDRjIzMUUKKzoxMEIxRjAwMDc0NEU3QzQ3RTFBQ0VBQ0UxRjBDODZCMzk1QkVDQkZFMDUKKzoxMEIyMDAwMEE0REMzOUZBODg0QTcyRTdFODA3ODIxRjk5REZBMTk0MjMKKzoxMEIyMTAwMEExQkVFMjdDNzU5NEYxQjhFRUQxNzZGRUZCMUZDQjgyMjUKKzoxMEIyMjAwMEEwMkI0MDdFMkNERDVFM0YwNzBGMUZBRkRDMzE3MTIzNkEKKzoxMEIyMzAwMDhBN0Y3QzdGMzdDODlGQTU1OThDNEQ4M0U3QjIwREZBNzIKKzoxMEIyNDAwMEZEQjE2RkQ5MDNBNEU3NTYzQzYwRDQ2NzAxMkJDQUQ5N0UKKzoxMEIyNTAwMDk1MEZFOUVCRDdCMTA3QkU0NkZCQTBDRTYwRjc2NjA4QjUKKzoxMEIyNjAwMEJENkJCNDdGNjcwQzEzRjY2RjE5MkJCQjkwNzM0RThGQjkKKzoxMEIyNzAwMDMwRkZFQzYxQTRGRkY5N0VEQjI0QjE5RjZFQUNGRkJDMTQKKzoxMEIyODAwMDk3RDNDMzZEM0JGRTYwQzU5RjA0OEFEN0VGMzE5MDE3RkIKKzoxMEIyOTAwMDIzQTFERjEzRUI5Q0Y0NUMzMkNDNUYzMzBDREEzNTBENjkKKzoxMEIyQTAwMDBCMkVDNDcxRkEwRTcwMzg5RjZBMzhCNTkyRTJEMkI1OEYKKzoxMEIyQjAwMERDMEVCMEUxMjUyQkYwOUZCNkVCRURFNDQ3REY4QkY3MUEKKzoxMEIyQzAwMDhDMDE5QzZEMzY2RTVGNDhCQjRBNTU2RjU3RjEyNzVCMEEKKzoxMEIyRDAwMEE2RkU2RTQ1MUFBRUNGRkRDQ0FDMkFGNDNGM0NDRjI0N0YKKzoxMEIyRTAwMEY5MTExRjlCQ0FGRDI1MjhCRjM3NTUzQjY4OUY3OEFCRDYKKzoxMEIyRjAwMDg5REY0MzY4QjdGMUZEQjlGMEQzNTNGNzYxMzg3ODY0NUIKKzoxMEIzMDAwMEM3RTYxOUU4NjczOEJCRjc0NjMwMkVEMTY2RTJGQkFGRDcKKzoxMEIzMTAwMDZERDM5OEI4Qzc5QThGRDdENDVEREQ4OUYzQ0FBRjAxRDIKKzoxMEIzMjAwMDc5MEZGRDZEMkFGMDk3MzgzNUZEMzM2MTJGMzUwQTVDQjIKKzoxMEIzMzAwMEY0QkQ3NkQxNEZGMURFQUI5RkJGNDNFNjJBQUM3MzA0NzgKKzoxMEIzNDAwMEM1QkZDNjMxNEUzNzMyQkY4NDdFMUI0MzEzMkYzQTAxMkYKKzoxMEIzNTAwMEZBODc2OUNFM0Y4RkVCNTAyMjk2MTRCQTVGOEZFMkQ4RkUKKzoxMEIzNjAwMDBERUIyMzE5RDdBM0ZFRkMyNURGQUY5NUYzNzNCRjlFMkEKKzoxMEIzNzAwMDNEMDNFM0ZENTI5RjVFOEZGOTZEMTgwNzE2NzZFRjIyQUQKKzoxMEIzODAwMDI2RkZGODdFNDFBREEwRUI0NUMyREVCRDNFODlDMzc5MDQKKzoxMEIzOTAwMDE5RjNEMUY5QUJFQkVDMkMwNUUzQ0JENzU3NzQ0Q0EyRTYKKzoxMEIzQTAwMEZCQUZFQjJENjk2OEFGQzhCODc3M0NCQ0M3OEJDRjM0MTcKKzoxMEIzQjAwMDNFOTlDQ0VGQ0I1MUZBNDc2MzI3QzczMDA2NTIxQUNEREUKKzoxMEIzQzAwMEI3MzdGNkIzNjM5OEUwRTdEMUMyNEUxQkM5RkNCOENGREMKKzoxMEIzRDAwMEQyQjhFNzIyQ0FDN0I3MjVGMjdEMzU5MDZGNzZDNEVCQTUKKzoxMEIzRTAwMDdFRDRFN0IwRUU1QjVFNEQ4OEYwN0RFM0IwQjgxNzg3QTIKKzoxMEIzRjAwMDg1NjgzRjY2NEYyNkVEMkJCODBCRkRCNEVGN0VEMkQyQTkKKzoxMEI0MDAwMDlCNEZGMjAwRTQ5NzAyQkE3M0NGQjA0RkFFMzFFM0ZEMjkKKzoxMEI0MTAwMDIwMzk2MDQ3NDFGOUY4MkYwRTVGODNCRkNGRDIzOEEyQTEKKzoxMEI0MjAwMDc3MjVERTE3OUVGRUY4NTk1RTFFRDc3QjE4Q0JDMzFFMEMKKzoxMEI0MzAwMDRGQkM5NkNBMTM3QTU3QUE1MDlFRjI3OEQ2QjVENDFFM0UKKzoxMEI0NDAwMDFEMjgyMEFDQ0FDNzg3NUY4QkU3RkM4RTg5RjgyNUYzREYKKzoxMEI0NTAwMEY1RDIzRDQxOERCQjJGMzI2OUUzODMyNUY5NUM0RTFGNDgKKzoxMEI0NjAwMDRCRTBGNThFMTVCMDI1NzMxMURFNjM3QTQ3NkI3RjM3OUQKKzoxMEI0NzAwMEMxOTMyRkVENTI2RTk3Qzk3NUNBNzYyQzJCNzZGRkVGQ0MKKzoxMEI0ODAwMDBCM0Q3MDhCQjhERjY3N0ExMjZCNEJFMEZCMTUyMUI0NzQKKzoxMEI0OTAwMEFGREVFQ0JFODhFMEYyQzIzMDk3ODA1NzJGREREQjI4QUMKKzoxMEI0QTAwMEZCMzE5RUVGOTdFM0FFNDJCRDhENzJEREEyM0Y0RkY0QkMKKzoxMEI0QjAwMDFCQTEyRjYwOUMwRDM0NEU5MUJGMDRFRkU1Njk5QzlCNEUKKzoxMEI0QzAwMDU3ODI3ODAzN0M5OTA1QkVDQ0RDMEZEQzRBNzhDNjdFQjcKKzoxMEI0RDAwMEQzOEE0OThGNENDNDNDQjEzN0NGNDBGRDgyRThCQzhENDQKKzoxMEI0RTAwMEY0NzE1ODhDNzM0QjJCREY2N0VBNEYyQjI0M0E5QTlFRUEKKzoxMEI0RjAwMEM0RUQzRjU2MEFGMDAzMzkzNjQ1QzBBRDI0NUY5Q0UzRTYKKzoxMEI1MDAwMDE5QzA0M0E2NDJGREI3MEFGOEU1RjFGQTE3QkFERUQzMkYKKzoxMEI1MTAwMDNGRDA3QTM1NzhGMjYzREVGMTlCQkJDNjEyOUVBNjBDNTMKKzoxMEI1MjAwMEQwQzE2NjVEM0ZDNzVBMENFREE2RjBCQzk0NDY1NzIxQ0EKKzoxMEI1MzAwMEI1QkI1N0RDQjMyRkVGMkRDNjc2MDVEMDZFN0E0NUZGMkQKKzoxMEI1NDAwMDQ0RTQwNzc5NkYxQjBCNEQyMzY3QkQ0MTQ4OEI4MTdCMUEKKzoxMEI1NTAwMEQ4M0E3ODdFMEExQkU5RTdGNzExQ0Q5RDUzMkFENkU3NDIKKzoxMEI1NjAwMDE0RUI3MzZBRUZBNTFCRTBDMzhGRkFGMzZCMzRGNzUyNDkKKzoxMEI1NzAwMENCRjcwMzcwMUZFOEFGNjg4MkU4NEZDN0NGQjFGQTQzM0IKKzoxMEI1ODAwMEJFODg4NzhGNzFGOTdGNjE3Q0M4NzkxQUUwMzkwMDY3QkUKKzoxMEI1OTAwMEMzRkMyNDNDOTE4RkE5NUQ5MTlFOUZFNDNDODdFNTlCNzEKKzoxMEI1QTAwMDg0QkY2REUwRTc4MkVGMzk5RUM4RUY1RkZEMzcyMjFGNTEKKzoxMEI1QjAwMEQyQUJBN0U3RDU1RDA1MjZEQzNGOTVFRERBM0E1QTAyMTYKKzoxMEI1QzAwMDI4RTc2NUJDREJENjU1MUQ0MkZERDdENDVENEU3OTlCN0YKKzoxMEI1RDAwMEFCN0ZGNUVDQ0IyMTY4QkZFQUY5ODc1MzMwOTlGNkE4MjkKKzoxMEI1RTAwMEI5M0QwM0VEREM4NjFERjdBNEY4NzFCRkM0MUM0QTQxQzgKKzoxMEI1RjAwMEY5NzkzNEFDNTZDNTNBMEYxODEyNzg5MDc2NTRBM0QwMjYKKzoxMEI2MDAwMDM3Qzc5RUJFRkYxQTg0Qzc3RkVDQjAzODUxOEYzNjNERDYKKzoxMEI2MTAwMDY1OEJEODI4MEU3MjBCRDk1MTUwRkU5Qzk3RUZGRDFBRkUKKzoxMEI2MjAwMEZERDJBNjVEN0EzQjY5RDUzRjNDOUNFMTI1N0EwQUU1Q0YKKzoxMEI2MzAwMDlBRjA4QzBCOEJFNDMyNzgzNjZFQjdGODIyNkUxRTRGODAKKzoxMEI2NDAwMDg0NjE1ODEzRUJERjg4RjMzM0I2Qzc3OTlDMDZCQzM3QTcKKzoxMEI2NTAwMDc1QTg0QkYxM0NBRkYxM0I0ODEyQjJDMzlBQkFFRTI3NDIKKzoxMEI2NjAwMEJCQUI0OTFCNjcwMDNDRDRDNUIxQkI2RUNERDdFNzVCMTQKKzoxMEI2NzAwMDRCQjhCMEIwODdFQzlBRDY1RkZFQUNGODczMDdERUE3ODQKKzoxMEI2ODAwMEY5NEYyOTRBOTE1NjVGQUUyNzM4OURFQTU4RkVGN0JCMUQKKzoxMEI2OTAwMEJERjFGNUVBNDlCNDBCNkNEQTc2MUNBRkRFNUQwQUVENUMKKzoxMEI2QTAwMDQ5QjA2RUZFNkNCMDQ0NTJEMENGNkZEODZBRjE4MUU2REIKKzoxMEI2QjAwMDY1MERDRjNFRjEyNEVFODdCMDRGNkM3NEZGNDFGREIzQjIKKzoxMEI2QzAwMEZCM0ZCRTE0Q0FGNTlEMTZGNzFDM0U3RDg3OTIxMUM1M0YKKzoxMEI2RDAwMDRGOTM5N0RCMjcxMjFGQUI1RURDNEZGNzBDRTI3QkI0NzYKKzoxMEI2RTAwMDZCMjU1RUVBM0JGNzVBRDlGOEMxRjBBQkU4RDgyQjdFNjAKKzoxMEI2RjAwMDc3QzE4MDlGOEVDRkFGQTRGQjNDN0ZGOTlEMTVFOUZBRkYKKzoxMEI3MDAwMEU4MUU4NTY1MTYwQzZFNUZCNzc1N0YwQUQyMUZDMjA5RTkKKzoxMEI3MTAwMEZENEI4OUE3MDFCQzBEQzI1N0U0OUFEREE1NTQ4RkUyMDkKKzoxMEI3MjAwMDFBRjFGMDM2Mzc5RkYxNzhEMEFGOUU3RDBFN0YwN0IwQ0IKKzoxMEI3MzAwMEVFMzczNjFGQUVCRkVFQjlEQjUzNzAxRDVGOTk5QjM5RjQKKzoxMEI3NDAwMDdERkZFMjlFMEMzRjhDNUI2NzA5NjUzOEU5QzlERkQ3NTYKKzoxMEI3NTAwMDNEN0UwN0QxRERDRDA3RUVDOEUwQkZBN0UxQ0YzNjRENzYKKzoxMEI3NjAwMEExNzU2NkUzRkE2RTdBNkMzRUFENkYyNTBCMTJEREQ1REUKKzoxMEI3NzAwMEZEODJDNzI3QkUxNUJGQzc2MEM0RTc2OUMxMUY1RjZERTMKKzoxMEI3ODAwMEIzRTE4RjY0QjBBRjMwMTExREYzMDgzRjUwNDU5RUVGMTkKKzoxMEI3OTAwMEFENEM3QjhGMDU1OERDNTRGRTU2QzQwN0RFMUZEMDAzMkEKKzoxMEI3QTAwMENDQ0UzNDcxRDlBNkVERjdGNjIwN0U4RTBERjM2N0UyOEMKKzoxMEI3QjAwMEJFMUFDMDIxMjRFMEE1RTBGREJBRUE4MUNBNEM4RTFGNjIKKzoxMEI3QzAwMEU2MzVDQkI4MzJEOERGMTVGODFFRUJGNzU4RkMwOUM1QzMKKzoxMEI3RDAwMEJBNzY2MkJGOUU4RjJGRTMxMzMwRUY0NERDRjdGQjJBNkIKKzoxMEI3RTAwMDIzRjZCOUFERDFDMzE1MjFERjU4MEZEM0QyNTczQzdFMTQKKzoxMEI3RjAwMERGN0UxRkQxRDUzNzFGNzFCRTY5MEM1NzU3RDFGNzFFOTkKKzoxMEI4MDAwMDRCMDQ4RjE2Mzc4NkY3RDYyODI0MEY2Q0JBRkI5RjA2OTkKKzoxMEI4MTAwMEU4NjJCQjQ1RjBCM0ZFM0JDQ0QzQUM2OEUxQkI4N0U3NDUKKzoxMEI4MjAwMEQ1QUU3Q0M4QTZCQjBGMjE0QTM3RDZFOEZCODIyODdGNUQKKzoxMEI4MzAwMDRBM0ZFQTY2QzFGRkM2RjUxQUU1QzExRjBDRjI4MDNEMUEKKzoxMEI4NDAwMEU2MTlEMkJEMzIwRDk2RjA5MzhGMjJGRjAyQkZBMjlGNjAKKzoxMEI4NTAwMEQ5RjBBQzg1RkNGQ0UzM0JERkY4RjgzQUEwRjNFMzFEM0MKKzoxMEI4NjAwMDkyNkZGNTcyRDVDOEI3NzUyRjRDNjJCMUY4RjZCOEMzQjAKKzoxMEI4NzAwMEM3NjJGMjJEQkM4RkM5Qjc4RUU4M0U4RDk3RkQ3MDcyRkUKKzoxMEI4ODAwMEY1RTYzODcyMzU2RkI4RjExQzRCNTEyQUU2QkExRjdCQ0EKKzoxMEI4OTAwMEJBN0UzOEM1MDUwQzcwOTVGRUFDNTE1RUJFOUNFRjhEMkUKKzoxMEI4QTAwMDI5MkYxOTVFNDFBNTgxQTM4NDlGQTRDNzU1Q0ZBQ0E2QkIKKzoxMEI4QjAwMDcxMDZFODU2RDJBNUE0REIwMUJBMUM5NDVGQTk4M0EzNDQKKzoxMEI4QzAwMEYxRkIxNzI4OEYyNjQ1RjE2RTU5MEY3RTBBREFCMUFGQ0EKKzoxMEI4RDAwMEE5RjQzQjI4N0QzMDk3OEQwMEY3QkU5RDA1QjQwRjdBMDMKKzoxMEI4RTAwMDhGQjBGM0ZCOUNGRDI5MThEN0JCNDdGODE1RkQxODRGMDcKKzoxMEI4RjAwMDRDOERCRUVGNEYxMDc5MDM4MUZFOTQzNDhENURGNDc5NDkKKzoxMEI5MDAwMEI3OUE4Mjc2NUM2RjM4RjZFRkM5Q0E3QjJBN0JFM0ZDNzQKKzoxMEI5MTAwMERFQUMzQ0JGNTRBOTNBRjJENzYyOUNCNjlERUY0RkFFNjUKKzoxMEI5MjAwMDY4NTk5ODgyRjE4Q0JFRUU0MkZBM0RBMTlCREUwNTdGRkMKKzoxMEI5MzAwMDE3RTZEQjI3RTM5QTIxQkYzOUJCMkM3QUJGRTkxMTE2NDIKKzoxMEI5NDAwMEEyRkRDQUU1RERGNUI0NUY2ODhDODNBQzc0RDRBNEUyRDMKKzoxMEI5NTAwMDdFQTAzMTBFNzIzM0U2NDE2MTFFRjI2M0ZBRjdBQjMwMUUKKzoxMEI5NjAwMDNFODI3ODMyRDA1MzEwRTkyOTdCMzAzREFEMUMyRUY2NTMKKzoxMEI5NzAwMDVGNEI1ODg5NkVGRjU1QzhCNTRBQjVFOEE3Njg5RkY0NzQKKzoxMEI5ODAwMDgxREY4RUYxMjBBNjE2RkQxQUY1RTlCN0U4QzcyMzAzN0IKKzoxMEI5OTAwMDg0M0M0NEE3RjVDMTIzMzJDRjhBRTg1QUQyOUREMTdGOTcKKzoxMEI5QTAwMDM3M0U0RkJDRjQ2OTE5OUUwNzZBNzhGOURGOEE3RjBFMkIKKzoxMEI5QjAwMENGMTMyRjdGMzJGQTU1MkNGRkVBNUZGM0ZGOEQwREFFQzgKKzoxMEI5QzAwMDVGQjFFNzhGRTRBRkY0RURCMUQxN0NGQUY2QkM5RDdGQjcKKzoxMEI5RDAwMDE3OTY3N0RCN0MzOERGQkVGNTM2RkU3QkQwN0I5MkU5QUQKKzoxMEI5RTAwMERFRTlCRTYxM0NDRUQ2RkFEQTc3QzVCREE0QTczNjEwMzMKKzoxMEI5RjAwMERFRkU2RTM4QkYyRkY2NTRGNzdGN0Q4NkY3QUI5RUVBRUEKKzoxMEJBMDAwMEI2NzkzMUVFRDBCNDI3ODlGQ0YwQTZERDA5NzQ0RjdDRkQKKzoxMEJBMTAwMERGNkJERjk1NjlFMzQ1RkZEREY1MzQ4QUYzMTY3REM5RjkKKzoxMEJBMjAwMEFDMTZGMzVCRkFEMkI4QkZENkY0RUFENDI3NUEwQUQwRTAKKzoxMEJBMzAwMDJFREQ0QkY3MTY1N0JDRkVBNzYyOTQzRjdEMkY3MEJCREYKKzoxMEJBNDAwMDAyRkNGM0M3NzExM0YxMTdDM0JCN0Y2QTk5OEFFNzhEQjQKKzoxMEJBNTAwMDE4RjlENTUzQkQ3RkJBMzZFNDg4MDUxNzBFODczRTgwQTYKKzoxMEJBNjAwMDAzQUUwQkUwNDJGNzc1Qzc4MzQ3RDc3MDdFMEZGRkZGMjkKKzoxMEJBNzAwMDNFNzg3QzRERkU0MjQzRjc2NEUyQTMyODVDMTRGRUZCNTMKKzoxMEJBODAwMDIzRERDOTYxQkI0MkVCRTdFRkY3N0M1NzhDNzZEMkYxM0YKKzoxMEJBOTAwMDhFMTZEMkZCRTc1QkY3ODdGRjZCRTlFMEZCQUU1Qjg5QjUKKzoxMEJBQTAwMDBDNjVEREE3RkVEN0FFOUJEM0ZGREFFMTVDM0YxOUY5NDkKKzoxMEJBQjAwMDYwMzA5REZGRUFBRkE5RkM1Q0IyOEZFNjZCRTBGRkZGNTAKKzoxMEJBQzAwMDA3QUJBMzU5RjMwMDgwMDAwMDAwMDAwMDFGOEIwODAwQTMKKzoxMEJBRDAwMDAwMDAwMDAwMDAwQkNEM0MwQjc4MTRENUI5RkZFQ0NDNzYKKzoxMEJBRTAwMDNFOTI2Q0MyMjYwNDA4NDI2MEYyMjQ0QTFFMEI3OTEwNzIKKzoxMEJBRjAwMDFFQTk5Qjg0MjAwOEUyMDZBNEEyMjIyRUY4RTAxNTkyM0IKKzoxMEJCMDAwMDA4QjZDNjZBQ0Q2MjIyMDJGNUI2NTE2Q0FGNkREMTZGMzAKKzoxMEJCMTAwMDQxNDFEQURBNkI4QTQxQjEwMjVEMTAxMTVBQUFBQjgyNTcKKzoxMEJCMjAwMEEyNDZCQTUyQUI1MDAzMUI0MTA1MkFCRERFRkZGRkNGMzAKKzoxMEJCMzAwMDRDQjIzMzI0M0NGQ0FFREZEN0U0MjNDNzMzRTdDQzM5MjcKKzoxMEJCNDAwMEZGRkI3NUNFMTg0OTg1OTlBREI5MDA0RERCNEVFNTg3RjEKKzoxMEJCNTAwMEIxMDU2ODA2MjgwNjQ4NTI2RDAwRkQwMDRFNkNGREZBREUKKzoxMEJCNjAwMDkwOTQ0Q0FENUQ4NTM0ODBCQUVENzEwMDQ1RDhGRTMxQkUKKzoxMEJCNzAwMDI2MDAxMjQwNjREQkE5MTI5RjEzRTAxQkZBQjkxMkEwNDEKKzoxMEJCODAwMEEzMTE5NzE4RDZERDM3QjcxRDlCM0YyQ0I5MTdBN0Q0NDMKKzoxMEJCOTAwMEJDRjA0MUZFQUZCMUVENzhFMUJERUM5N0E5RkZFMkJCOEYKKzoxMEJCQTAwMDQzM0VDMEI2RDYwNkJFNTY1QzJGMTIwRjMzMzcyMTNDM0IKKzoxMEJCQjAwMDkxNDRGMDAwRUU1RkY3RjJFOEE3OTZFMUZFOEJEQjNFRTIKKzoxMEJCQzAwMDlGNERGQkQ3NkMxRDA1MzJGNjJCRkZGNEVGRkMzMENERkIKKzoxMEJCRDAwMERGMjQ3OUM0RjNGODgwMDNFMUFBREM3RTQ2M0NERjdFRjMKKzoxMEJCRTAwMDJBMUZCMEZENkM5MzE0OTQxM0IwRkY4MDdEN0U4MEQ2MjUKKzoxMEJCRjAwMEVEMDVFRjExODQ3N0YxN0YyMkRFM0I2Q0I3RTI3OEMzNkQKKzoxMEJDMDAwMDUwOTVFMUVCQzY3Qjg3MERGMjA4REZCREIzNjk3RTY0MUEKKzoxMEJDMTAwMDdCQkNDQjlFNDZGMEZEN0IwODQ0RTE3RjIxQkNCREZGOTEKKzoxMEJDMjAwMEIxRkMzRTNGREUwMDdFODZEQjJBN0IxREU5MDhERkMzRDgKKzoxMEJDMzAwMDEwMENBOUQ4M0UwODMwQjFENTc5MkUzQzNGQTZDMTYyODAKKzoxMEJDNDAwMDdBMEY0MkQwMUY0MDA2RjEyMzI3MkY5QzAyMDlENEFFNjEKKzoxMEJDNTAwMEZBNUNDRUE3RjdBNzRENEM0MzM4RkNBQUM1QkQ1RUE1M0MKKzoxMEJDNjAwMDE5MTZBNkMzOEFDMUVFQzAyQTg0MEIxNEVGRkNCNUQ4RkUKKzoxMEJDNzAwMEI3MEVBRDcxQUZFMjE1RUUwNDI4MDFGODgxNDM1QkFGNUEKKzoxMEJDODAwMEZGOTQ4OTEyQUVEN0I0MENFMUMyNzU5QUZBNTk1QzREOTMKKzoxMEJDOTAwMEI4OEVBMjVBODJGNjdDNkUzRkEyRjZBMUZFNTdFRkExQTMKKzoxMEJDQTAwMDdEMTVBNzBEODJEQUJCREZFMDNGMjc2MDNGNDdFQkUzNUUKKzoxMEJDQjAwMDdFQjE5OTUxN0RGQzE3MDMzQjVEMEFFRTFGRTM1NjIwRDAKKzoxMEJDQzAwMDgwMjhEOTIxRUE3RDlDN0Y5M0VBNjJCQUM0NDJDMEVGMDIKKzoxMEJDRDAwMDcyNUUzQTlEN0U0RjgzRkQ3QUE3OTM5OTNFM0FERENFMDAKKzoxMEJDRTAwMEExMTM4MDgzREU1N0U4QkYwOEZGRTQ1NTIxRDI0MzA1NDYKKzoxMEJDRjAwMDE0N0Y1OEUwMjM3RDIzMTEzREREMjkwRTVDQ0ZEQUU3NjgKKzoxMEJEMDAwMDBFRjcyQTg5OUZBQjRBODlGNjlFODVGRTJDMzFEMDE3MDMKKzoxMEJEMTAwMEU5RTc4OUM5RUZBNjczRDQ3QThDQkY5OUNFOTc0QTVGQjkKKzoxMEJEMjAwMDlEMkYzMTMwOERGOTFDMzNEOEU5MEUyMEZDMEZBQTgyRUIKKzoxMEJEMzAwMEVFMEYyMkREMjVBOTlCQkUzQUREQ0M3Q0YwOTNFQzE0RkUKKzoxMEJENDAwMDc3RDNCRkJCMURFN0ZBNjQzODMzMTJCRTQxRTJGQTJCNEEKKzoxMEJENTAwMDIwQTcxRUQ3QTk5MkM3ODVGREI4RkU4OUQyMzhCNzlEMDYKKzoxMEJENjAwMEY0NDU4MkEwMzQxMkRCRjJGRTE1ODA3ODc0QTREQTE0NTQKKzoxMEJENzAwMDZBQ0IzQTExQTcyODc4QUYzQ0VEMDAyNTBBQkY3MjQ4N0MKKzoxMEJEODAwMDM0RjQzQjUyQjNGOUZENEFDNzQwQzM3QjFEMDM0QjFEM0UKKzoxMEJEOTAwMEY0QkNDQTk1NjY5OEZGNDY0QzQyM0UxNEQwN0IxMzI2RUQKKzoxMEJEQTAwMEQyRjg1NTI5OTcxQkRFOUI3QUI4NjNDRDFDNkNBRjk1RjIKKzoxMEJEQjAwMEMyNDUyNDFDMUQ3QjY3NTUxMEJEMjZBOTIzMENGM0I2NzQKKzoxMEJEQzAwMEEwNTkyMTdERUVBQzkyMDNFQjkwMUVENTUyQjA3RjNFODAKKzoxMEJERDAwMEQyNkQ3MkNFNjgyMzdDMTI4QzI3M0M2QjJDMjg1QTM4OEIKKzoxMEJERTAwMEVGMUE3N0I5NjFGQ0RBRDI0OTg2NzVBQjNERDU4NjdFMEMKKzoxMEJERjAwMDREQzM1N0EwRjQwNTE4REI3MDE2OTQ0MkI0RTNDMTU2NDYKKzoxMEJFMDAwMEMzRkI4NTdCQjYxOEU2MjdFQzAzMzkxRURCMTFGQkQ1OTcKKzoxMEJFMTAwMDI2NkEwQkRCNDM0OTI0QkVCNkJFMEVCRkE1MEY4QTcwNEYKKzoxMEJFMjAwMEQ4NUI4OUU4NDBDOTkxRkE1N0E4NkQ3MDIwM0RGMEY5QjgKKzoxMEJFMzAwMEE5MThEMTIyQkY1OENFRkQ4NzYyMDI0RDA4RUYyOTRCQzkKKzoxMEJFNDAwMEMwNDc3NEI4NUIwRUU0NTAxQjNCRTg4RTdDNDgwNzM4NTMKKzoxMEJFNTAwMDlBRjJCMERDODdFMDA3NUZBNzhBNzIzMEZBOEI0MDEzNTIKKzoxMEJFNjAwMEY1QUYzQ0RCMkFGQkM4MEU2Rjk0RkRCNjAyRTJGQjk0RjMKKzoxMEJFNzAwMEI4QkY5MkRENkQ5NTgwRjg1RUUzQjQ3ODAyRTRCNzkyQzYKKzoxMEJFODAwMDVBRjM5NzQ2QzlENzY3M0Y4NDVCQkNCOUU3RUFFQjhCQTcKKzoxMEJFOTAwMDU5RTU5NjM0NUNCRjM5QzVEM0IyODNFQzY2QzU4N0IzMjgKKzoxMEJFQTAwMEU1RjQ3M0U3ODE0QkU5MENFQjc0NDlBN0Y3QkM0NTgzRDQKKzoxMEJFQjAwMDUxMUVFNUY4RjEwRUIyRUJCMTk1MzJFMzA1NTc1OTAzODcKKzoxMEJFQzAwMEVCNzE5REU1MTY3NzhDQTZGQ0VDNUY1RDEzQUM2QjQ5QkUKKzoxMEJFRDAwMEFGRDdBNDA5RkIxMEZCMTc1MDI1ODQzRkI2QUY0RkNFNTgKKzoxMEJFRTAwMEEzRjc3RTI2QzE3QUU4REVFRkQ2NTI2MDNDQjJEMjJDQjAKKzoxMEJFRjAwMDQyMEYxNDU3QkY5QkYzRThGRDc4N0VCRkE0NTREMDExQzYKKzoxMEJGMDAwMEE2NTgwMjU5Qjg2NEMyNDFGNzZFMkJGNjU3RTdFQzc3OTIKKzoxMEJGMTAwMDkxMTk2ODlCNzJEODJGMjM1RERBMEU4NkNBMjRENEE1QTYKKzoxMEJGMjAwMDAxMEY5NzlGQ0MxNEYzMjEwQkZCNkQzOUUzRTNGMkQ4OUIKKzoxMEJGMzAwMDhGRTU1OEM4Q0UyQzQxQjM0Nzc2NjY0N0Q5MzMzOUU0RUMKKzoxMEJGNDAwMDI3OTY1QzdFQzUwMEU4QzFCRUU5NkRDMjY5MDlENEMyMEUKKzoxMEJGNTAwMEVFRkU5QTM0OTVFMTRBNTBDMjQwN0E5RDcwNUFFMTcxRTIKKzoxMEJGNjAwMDY4QzhCNjkwRkREMUQ3NEY5OEE1QkVCQjk0RTBEODYzMDIKKzoxMEJGNzAwMDg1MkNEQTVFRjEyQzIyM0M1NjVERDFBRUFFNjIzQzA0REIKKzoxMEJGODAwMERFMDBFMTE0MkZBMkZBNEZGNDkzMkEzMTU2MDlBN0RDMDAKKzoxMEJGOTAwMDFDN0YyRTFDRkZEQzU4OUNBODIyMUU3RENCREQ4OTZFRTkKKzoxMEJGQTAwMDZBN0Y4RjQ0MUZDMzc0RjcxMzFEN0U0QTdGMkVBM0RFNjIKKzoxMEJGQjAwMERBRDA3ODFDREY0ODM2NTE4QzA3MDFFNTdBOTU0RDFCQTUKKzoxMEJGQzAwMDI3OTM4MkZEQkU5MjM2RUU1RkVCMUQ0RjdDOTU4REYzN0QKKzoxMEJGRDAwMDBCRDJCQkU2N0IxQzI5RERFQjdCRDdBRTBEMzVGNzQ4REEKKzoxMEJGRTAwMDRGM0JGQkU1NTUxM0FDMDFCQjc0MzE3NDhEQkIwMDVENTkKKzoxMEJGRjAwMDEzMDQ1RENGQTJGNUM3N0RFRTcyODg3RDNFOTZENDIxRjUKKzoxMEMwMDAwMDI0NkZBQjJENjgwNTMyMDBGNkJCN0NENzkzNUNDN0NBQTIKKzoxMEMwMTAwMEMxM0M3QTNFMzdDMTMzQTAwQ0U1QUZDREU2MTk3MjBGQjMKKzoxMEMwMjAwMEQ5OTU2RDMxRUU3NUY4NUVGNTlEOUYzRERFNDA3QTNEMDgKKzoxMEMwMzAwMEY1OUYzOUNEMjQzNzhBMjc2RTI0RUU1M0U3RkE4QUVEMkYKKzoxMEMwNDAwMDQxOTU5Q0RCODdFMjlEMkUzQTkyM0NFMzlFM0ZCNTc0N0UKKzoxMEMwNTAwMEY3QzkzRTI0NzREM0Q1OTM4OUUzQUJBMkU4RUM3MDkwODIKKzoxMEMwNjAwMEZEMTJGRDQ3RDNEQUJDNENBN0RCMUM0Q0E3QTU5QTRFQUEKKzoxMEMwNzAwMDM1Mjc0MjhCMDVGNUUxQTQ2QkMzRjc0OTFFNEU2RUI0MUMKKzoxMEMwODAwMDAyQzU0RDZEMzQ0OEZFMzJDN0MxN0EwNUM5RTE5NDZBRDQKKzoxMEMwOTAwMEQ0ODNCQzM3MkQ1RThBQ0JEQTUxM0UzQzI0MUZGNUQ5QzAKKzoxMEMwQTAwMDg2RjU0RThFN0IzNzI5MEZERjNCOTlBQzI0MTE3RDE2MjgKKzoxMEMwQjAwMDg2NkQ0Q0I3OUIxNTA4REFEMTVFQjYyNURGNTY1OUNFOTIKKzoxMEMwQzAwMEZBQTFGMjc4QUJCNkNFNkI1OTlFRkJEMkQ4RUY4Qzc3NDMKKzoxMEMwRDAwMDdEODI3ODQ5OUUzMUYyMzdDMzdCRTcxNzc5RDA0Rjc0NjAKKzoxMEMwRTAwMEZCODg3NEFFMjMzNDkzN0E5NzgzRTY3MjQ3ODBFMkNDNjAKKzoxMEMwRjAwMEJBRDI2NUI5RTQxRjk2MjQ2NjBGMDBDNEEzNkVCQ0M0MEYKKzoxMEMxMDAwMEZFQjZBRUUxMEJBNkJCQkVCRTcyNUEwNkI1NkY3NzdGMTgKKzoxMEMxMTAwMDdDODZDQUY2NDA1MTNDMkMwRkNBNjkxQjhGRDczNDlDRDEKKzoxMEMxMjAwMDY0M0I4RUUwQTQ5MURFNzQyQzEzRjZBRUM1MEFCNzU0QkUKKzoxMEMxMzAwMDYzNUJGM0JGRjIyREQ1MzhCRjA2NDMwQ0Y2MTdCMEQzQkYKKzoxMEMxNDAwMEI2MjRDQTFFNDJFQkU3NUQ3NkJGMDA3OUI3N0FDQTVCQjgKKzoxMEMxNTAwMEIxNjQ2N0FCMjVENzBDNDAxQzhFQTZCQkFBOTVEMUQ4N0QKKzoxMEMxNjAwMDhGNzFDRDkwQjBERkI2RUU4Qzk3RkJBOUFFMTkxNkVDQUYKKzoxMEMxNzAwMEVGNEFCQjQ5OEMwRjc0RkREQ0UyMDZGODdDREQ1REEyNjIKKzoxMEMxODAwMDlGRTYzQTQwRkQwRkQzMUVBOTU2MDY2MjNGNUVDOEMxMjYKKzoxMEMxOTAwMDZGRDI2QUFCRkRCOTI0NUY0RUE2Q0I4OTE1NzFBQzFGNzcKKzoxMEMxQTAwMEJERDE3OTVFQzNDQjA2QkE5QzMzMkU0QkI3NzhDOTZFMkUKKzoxMEMxQjAwMENDMTQ3NkYxRDhDQTQxNkIzOTFFQ0EwQzY1RDM5RTVCOEMKKzoxMEMxQzAwMEQzNDRGQ0RBMUY3OTUzOEFGRjVFNDVCRDc3MjAxRDkyNjgKKzoxMEMxRDAwMDMzQzA2M0MxRjlDOTJGQTIzRkEyRjkxRjg3ODYxMEZEQTIKKzoxMEMxRTAwMEU2QkQxODEzOTQ5MDFGOEI5Rjc4QzU0NkZFNjhBRUFDRDEKKzoxMEMxRjAwMDY2OTM1RUJEM0ZDQ0I3OTNFNEUzNzg3Qzg4RkJGMzFBOEIKKzoxMEMyMDAwMEI2MzM1QzI5NTkyRTYxQTc1RDlEQjk1RTk0Q0ZGOUQwRjQKKzoxMEMyMTAwMDYyQTNGMUY5QTAxQzI2QkY2MTQxNjFBNkI4NjZBMTczQjMKKzoxMEMyMjAwMDk3OERFMkIyODU0RjVCMEY4N0EzRkNFQTIyMDgxRjIyOUQKKzoxMEMyMzAwMDNEQUQ3OUQ2N0EzODFDRTU3RjgxREU4RjkyQUZDMzE2OEIKKzoxMEMyNDAwMDAxODdBMkQxNjNBRTFDOUE2RDEzNzAxRDIwQjgxNjI3MEEKKzoxMEMyNTAwMDYxN0MyRjkzQkIwOEY1Rjc3MTVDNTQ5M0MzNzk0OTRBMEQKKzoxMEMyNjAwMDJDOTBEQzJEQkZFQ0ZEN0M1RjBGN0VCMEI1MTFGRDNFNDgKKzoxMEMyNzAwMEFBRENBNkM2MkREQ0FFQzEzNUM5RUUwQzUwQzIzNjM3REQKKzoxMEMyODAwMEFFNTNBQkQ5RTU5MkQwNjExQjQ0QkQ3RjQyQTM2QjlGRjcKKzoxMEMyOTAwMDJEMTI4RkVCRjZBMjdCM0M1RUQwMjVENzMzQzI4MjcwODUKKzoxMEMyQTAwMDJDOUVCNjZGMUNGMTQ1RTdFNzk1NzFEMDFBOTNDNDdDQkMKKzoxMEMyQjAwMDcxNkI3QzcxMTM1Rjc0RkEyMzNEMEIxNTdDNkZENzU5M0EKKzoxMEMyQzAwMDdDMkZBRDI3QjlEMEU5MkZFMDZEOEIxNUY2QTI3MzczRTMKKzoxMEMyRDAwMDBDQzc0RDY2RjhFM0QyMDVCQzNBMUU0M0QzQ0YwRkZGMUYKKzoxMEMyRTAwMEQwRjRFRjA2RkVBMUU5NDI4RkNENzhFODdBQUMzRkQ3RDMKKzoxMEMyRjAwMEY1RDg4Q0I3MEVGN0E1Q0I1OUM4NzYzMTcyQTZEQjk5NjUKKzoxMEMzMDAwMDVBRjBFNUQwRkFCQTVERDFFOUFDQzNBOUQzQUI4REYyNEUKKzoxMEMzMTAwMEExMUVFMDU0MUE1RTMyRTBBMzg0MkEyODg5ODA3MUU5QzQKKzoxMEMzMjAwMEU5QzI4RUI1NEUwMkUyODNEMkIwOTVFNzVEMkEzRUJBRUQKKzoxMEMzMzAwMEJERUQwRDJGRERDRTlBRjFEM0VEQUQ4RUE3NkU3Nzc1RTUKKzoxMEMzNDAwMDdDQ0JEMDkwQjAzREM0MzQ5RUYyQUMyQjRGRkIwQzcxMzMKKzoxMEMzNTAwMDcwMzkyQzMwQzRDOTk1OEUzQjBERkQyQUQ3M0Q4NkY5MjYKKzoxMEMzNjAwMDU3QTUyQzMzOEM0RjUyNTcxQUM2MjdFNzNDNjJFODVGMUIKKzoxMEMzNzAwMEUzRkVBNTI5OEU1RjZCOEFFMzdGNjMxODFGMTcwRTcxOUEKKzoxMEMzODAwMERDRkQ3QUUzNDQ1MDkwNDdERjNCRDJDOUYxNzdCMEQxNkUKKzoxMEMzOTAwMEM1RkQ5RDhEMjlEQ0VFNkE1NDU5QkY3NzM3RTY3MEJCMjkKKzoxMEMzQTAwMEE3RDFDRENGRkZEQzU4Q0FFREJFNDYwRkI3QTE0NjJGQUYKKzoxMEMzQjAwMEI3NjZCQjMwRjVGOUVCMTVDQTU3NEE0MzJEOTU2NENBRTkKKzoxMEMzQzAwMDc3NjRGODdFOTI4RUY0N0JDMzEyNjg4QTQ3M0E4RDZBNEUKKzoxMEMzRDAwMDE3RjEzOUNDMzdGQkUzNTM4N0VFMjVCRkVFQjJCOUM5NkQKKzoxMEMzRTAwMDFGMzZFRjE4MkRBOTNEQzQ3MzA5RThFRjNDNTFGMjkyQjYKKzoxMEMzRjAwMDMwMjUwQzFFOEE3QkQwM0RGNzI0NUYyREU5MTY5NjQ3MjkKKzoxMEM0MDAwMDMyRkI4MDdBMzdEMzAxRDY2NEQ0Qjc5OTMzMjU3NzEzQkEKKzoxMEM0MTAwMEYwNzMzRjI0NzExQkY0RTFGODU0MDVGQ0U0RkZBQjlEN0QKKzoxMEM0MjAwMDRBRDA5RUMwQTA3OTFEMDhFNzBDMDEyNkQ4Njk5Q0ZDNjMKKzoxMEM0MzAwMDc3NzI1Rjg1RTJENkVCRTgyMUMyMkI3QjY0RjgxRTNFNjMKKzoxMEM0NDAwMDlGNTFGQTk3MzM5NDM3REZFODZDQjU5MjlDRENCMEU3RTQKKzoxMEM0NTAwMDgxNjNGN0UyMzgzNEZCOEI0OTNGQkFFMjA2RkZGQjk2NzMKKzoxMEM0NjAwMDRCODkxQjVBMjhBRTQ0M0E0NjI0NzdDODQzRjE0RUEyNjIKKzoxMEM0NzAwMEUyOEVDRTA3RjRGNkI2NzQ5MTBGNEM2REYyQ0IwOTQ4RkMKKzoxMEM0ODAwMENGQ0UzNzgxRTMzODVEMUYxMUJGMTUwNEJGQUUxN0Q1N0UKKzoxMEM0OTAwMDJFMjUzODJDODFGQ0ZEMjM5NTM0QkY2NkJGQ0E3NEQxOEMKKzoxMEM0QTAwMEY1NDJENzAzM0QwRkQ0RjVBMDRBN0VCNjg5RTY5RjM4MDIKKzoxMEM0QjAwMDA4OUM0RjhGRUFGMDFENzk5RUYwMzRDNTlEQTU5RDJERjcKKzoxMEM0QzAwMDk1OTQ5NzVEMjg2RjFDNzNCQUY1MTU5QUI3QkREMUM3QkYKKzoxMEM0RDAwMDcyQjRCNTcxMjZCN0MxQzZGOTlBN0NENjczN0Y1NzYzMUIKKzoxMEM0RTAwMDAzRjc3NzM3RkFCOURERDNCODQyOTNDRjE2MUVERkQ3RkIKKzoxMEM0RjAwMEY4MzhGNzVGNkYwQzY4NzJCQTkxOUY4RkNGMTBGRUY3MTQKKzoxMEM1MDAwMDhCNTBFNTAwOTJCRjE3RDM0NTFEMDcxQ0U1OUM0NzgwNjMKKzoxMEM1MTAwMDIyREE4Qjk1OTM5QTk0OTc0NTNDNjU5MjBGQjM1Q0U4MjkKKzoxMEM1MjAwMEYyMDA2ODM3MjRBNEQ3OERFODY3QzkzRkRDMDRGRUJDNUQKKzoxMEM1MzAwMDM5RDhDRTlDRDc2MjFEMkI3RDdCQjk1OEU4NkNFNkY4QzQKKzoxMEM1NDAwMEMzNkMwRjE3NDA5MEVERERCOUY2NURDNEZGMTdCMkVGNzUKKzoxMEM1NTAwMDMyRTZBQkU0QUY3NEZCQjcxOEMyQkM5RTVEQkVEMzRERjAKKzoxMEM1NjAwMEY1OTRFRkNFQUZCODM0QkYwMjczNjg3RTU3REUxRERCQTMKKzoxMEM1NzAwMDNFNUJCNjVDMzhFRjJFMUEyQ0Y4QUFFN0REMTgzRjAyQjYKKzoxMEM1ODAwMEY5RTU0ODQwRTZCODdBN0U1QTRCMDJFN0REQTU5RDA5RjkKKzoxMEM1OTAwMDE0MDcyQ0Q4MjYzMzNGMzBDRjU0MDYyMkRGRTY2OTdDQkYKKzoxMEM1QTAwMEVCODBFMDNCQzQ5Nzc5RTNFNjcxNUQ2RUZFMUEyMzNFQjMKKzoxMEM1QjAwMDBCOUREN0Y1MDlBQTNEQzY2OTNERTI1OTBCMEY3RjRFODkKKzoxMEM1QzAwMEY1Qjk1QThENUVGQzFDRTE2OTY4QkY2MUQyQUVBODc5RUQKKzoxMEM1RDAwMDMxMTlGMUM5OUZDNDkxNDJDMTI4QTIwN0MyRUYwRTkyM0UKKzoxMEM1RTAwMDlFRUQ5NzU5Q0Y3QTkzOEJFMzk4OUY5MDlDOUY2QTlDN0UKKzoxMEM1RjAwMDM5NjkxN0NBRkRGMUIzOEQ5QzdGMjU2NTNDRjI4ODdGQjAKKzoxMEM2MDAwMERDNzdDN0FGQjU1OURFQTExOTlDMEY4NTZEQTQzRjNBMDEKKzoxMEM2MTAwMEZGOTY5MzhENDRCODk3NTczODAyOTQ2ODQ3OEE1RDBBMEQKKzoxMEM2MjAwMEVEMUY5MTNDNzIzQ0YxRTMyMzcwMkY0M0ZBOTU2RjdEMkYKKzoxMEM2MzAwMEVEMjBFOTQ3QjlDM0M5RTcwODg4NDQ0NzM0M0Y0N0VGQ0QKKzoxMEM2NDAwMEY3MzUzOTcxREVBODdEMUU5OUMyRjdFMjVERTEyNjlBQzEKKzoxMEM2NTAwMEE2RkIxQkRERkY4Q0VERTg5NDdENUMxN0M4NjQzRDAyRjIKKzoxMEM2NjAwMENDMjVCRUM5Qjg3ODNEMzJFNzlCNEQ5NDZGQTI0MTNBQzQKKzoxMEM2NzAwMEU5OUNDMEYwOUUwQzgyOUI5RTc3RDdCNTQ0QkQ2OUVDQzcKKzoxMEM2ODAwMDU5OEY5QzgwRjAyREQ3RjJDM0QxMUY3QjE5OEU2QTg3RkEKKzoxMEM2OTAwMENBNzI2OEQ3RjI0OTdCOEEwNTNDNTE3NDc0RDk3QzFCRjUKKzoxMEM2QTAwMEE5RkUwOTdGOENFMTNBQUYxOUJFQzkxOUMyOEVBQjQ5MDgKKzoxMEM2QjAwMERFQzk0QzVGQTc5QTRENzk0Mzk1RENCMUUxRDcyNDBGRDEKKzoxMEM2QzAwMDZENzE2RTNCQkU2N0I2QjdCQTdERUIyRDZFQUY3MzlERDUKKzoxMEM2RDAwMEVDMzE4RUQ0REIzQThCMzgzNzE4NTlBOTE2NTJGRTQ3MDUKKzoxMEM2RTAwMEYxMjVFNTg1N0E5RTY4OUVFRkNCQUE5ODlERDE4RkVCQzgKKzoxMEM2RjAwMEFCMjEwRkMxRTVCMjlDNTc0RUVCMUEzRTNGNkY5RUE2OTEKKzoxMEM3MDAwMEVGNUZCN0FERDgzNTM3QUEwRUIyMjY0MzNGNUY1MDVDMTYKKzoxMEM3MTAwMDlGMzhCQUY5NzZCMUZDMkRFQjlDNjlGMDNGRkZFOUYxNDcKKzoxMEM3MjAwMERBNTQwQzczMjRENEExM0MyOTIwRTIwODEwRjFDNDJDNjMKKzoxMEM3MzAwMDA4NzEzQjFCM0FCOUY1QTEyNDUxM0IxN0RDRENERTA2M0UKKzoxMEM3NDAwMDVFNkVCRkNFRjRBRDI2Qjk4OTU4M0JGQjkzMUUxRjdCQUUKKzoxMEM3NTAwMEUxRUI1QzkyOEI2M0RGMUJFQjRBNTNCQkZEQUJFRTZGRUYKKzoxMEM3NjAwMDJGRDVBRkM2RDJGOTUyMEZGMkIwNDE5MzVCREQ2RUY3MTEKKzoxMEM3NzAwMENBMUY5M0REOEU4QzQwRkI4MDcwNDYzNjhCNzNCMTQ4QTgKKzoxMEM3ODAwMDdDNkM4MENFMDE3NEZCMDA3RTYzQkNBOERCOEJDMjU5M0QKKzoxMEM3OTAwMEVFMzdCODVFQjg0RkU2QkFBNUQ5N0U1NDI5MjI4RjA3ODYKKzoxMEM3QTAwMEM1OUQ0M0Y1NTE3REZGMjYwQkNDMjczOURCODhFRDFGNTYKKzoxMEM3QjAwMDEwOEYzRUIzQzI4QTFBODVDRjc2MEQ4RkYyMUJDNjAzNDcKKzoxMEM3QzAwMEU1MkY1MzVEMjIzRkFDNzI0MDMyRTU3MzcwRjY2NEVFQTQKKzoxMEM3RDAwMDBDMzQwNDUzMjkxRTQ1NzkxRTk1RTRGOTEzRDFEQkZGNkYKKzoxMEM3RTAwMEQwQjg0NDNFN0YyMEZCMzMxNEY5Rjc5MTM4Qjc4MTA1NjgKKzoxMEM3RjAwMDUyMjAwQkU5QjFBNTRERjRGMzZFNEY2NEZDNkU4MjIwMUMKKzoxMEM4MDAwMEYzRjE2NjA4NUIwOUZGNUIwMEQ4RUVDRTAxOTVEQjVCQjgKKzoxMEM4MTAwMEMxQzNGQ0M0OTVFM0YyRDEwRUREREVBNjhDNUM4NTc4NDUKKzoxMEM4MjAwMDE2MjQ3NUE2OTM3RUU2OEQ3RTJGNDk0MkI4RjIyOUZFMjYKKzoxMEM4MzAwMDc1NzI2RDY2MDVDNTI5M0ExRTk2NEM4MUM3NjU5OTlFMkQKKzoxMEM4NDAwMEI3MDlCRTgyQTREMEFBRDUxNDE3NkVCNjAwQzU4NTlGQkQKKzoxMEM4NTAwMDhFQkVFNzBFODhGMkFCMjU1OTE1MDc2OURFNzM5MjM4NTQKKzoxMEM4NjAwMDJGRjQ2RkIzOEJCQTFBNzRGNkY3NDZDNUUzNUY2NzU2QjkKKzoxMEM4NzAwMDFFMjJCREZGMDdDMUM2RjlFRjJBM0U0N0FBNzYwOURBOTQKKzoxMEM4ODAwMEMzRjg3RTRDMDM3QzZGODgzN0FGMjdGREY0QjM3RDJDNTMKKzoxMEM4OTAwMDIwNUE4QTNBQTExRjRBNzk1RkVFN0ZGNUQ0MTdENUNEODkKKzoxMEM4QTAwMDAyMUYzRkM1NjMyNTU5QkUwOEVENTc2MDQzNTM0OEYwNEEKKzoxMEM4QjAwMDNGNjEwRkFDRTNCOEE5N0UwOEQ1MkZFNjNENjlCNzkwN0MKKzoxMEM4QzAwMDFGN0YwRkVEMzA5RDlCN0VEMEU4RTBGNjQzQ0M2RkE4MzQKKzoxMEM4RDAwMEZEMUJFNjM3RDQ3RTg0RjkwREI1N0ZDN0ZDODZEQURCMTUKKzoxMEM4RTAwMDRGOEY0MDIxMDJGODYxQTZFNzdGMzNDRTgzNDdFRjc2NzIKKzoxMEM4RjAwMDQ2RTAxMTkxNjA2NjRGRTc3REE3MzI0NEZFOTFERkY2NzYKKzoxMEM5MDAwMEYxMDM3MTI0MDc1QjY0MzdDOTY5REU2Njg1RUIxMEM3RTQKKzoxMEM5MTAwMEI3OEUwQUM4NjlEMTc0RjVDNTY1MjIxQ0Y5NUJERTdFNDUKKzoxMEM5MjAwMDc0NkMxMUJEQTdCODI0OUM3RjdDQ0JDOUZFOUMzNzk5NDEKKzoxMEM5MzAwMEUwRUJBMkM3MzY5QkEwODcwNkVGNzM4OUExNTVGNEZFRjIKKzoxMEM5NDAwMDczOUJEMzA5NDJCNDIzMjBFNDkwRjhEOTQzMUQwRDYwQjIKKzoxMEM5NTAwMDE5RjNGMUY1MEMxMTNGNUQ2QkVGMkM4QTNFREYwNDBBRjEKKzoxMEM5NjAwMDE5QTg1RUE5Rjk5OTJBRjk2QzQyMzg1N0FCREI4RTI2RDMKKzoxMEM5NzAwMEI5Q0U3QzgzRjZGM0VGMTE3QTg4N0MzNUQ0MjUyQTM1M0QKKzoxMEM5ODAwMDM5RDREQkJDNkQzNjJGRTlEMzczREJERTk5MzYxOUU5NzgKKzoxMEM5OTAwMDMwNzVDQ0E0NjI1OUVEOUU1Rjk4RDk4RkY3Q0QxQjdEODEKKzoxMEM5QTAwMEU2NTdBQjkzNzkzRTlGNUJEQzAwNkJBQjVDMzhFRjI2QzAKKzoxMEM5QjAwMEM3OEU1Nzg5MDQzN0JCM0VBQTRBQzRGRTJEMjlEMjZFQzIKKzoxMEM5QzAwMDZBRTdBODY5MTM5MkM4MEU0MDgwRjdCOTM1QTc3QzM3OEIKKzoxMEM5RDAwMDg5RDgxNDc3QjU4REZDNzIzOTI5NTU5NEREQUQ3NEM0QUUKKzoxMEM5RTAwMEQxNDk2QTU3QkZDQUQ1RDdEMEJGMkE2NTkwNjFGRTI0MDYKKzoxMEM5RjAwMDM1QzMzMDNFMzk2N0I4NjE1Q0RGNzc4QUJCRDAzMDhGOTIKKzoxMENBMDAwMEY0OTVFMjY2QzQ4M0Y5MEVFQjY1M0U5N0M5REJGQ0M1N0QKKzoxMENBMTAwMEZCOEIxOEZGMUI4QTA4RkYwOEQyQ0Y4NjgxQzU5MUQyRjUKKzoxMENBMjAwMDk1QkY1ODRENjY2M0YzQ0UwNDNFQTczNUM1QTczNURCRTkKKzoxMENBMzAwMDlFREFFRDUxN0I4RjRGQkY4NEFEM0RDNjc1QjVCREM0NDkKKzoxMENBNDAwMDc1MTcxQjlGQTJGRDc4OTRFQzQ3QzEwQkQ3RjFCOUZCN0EKKzoxMENBNTAwMDczQTNDRjVDQTYyMjVFQkU0QzhDNUJDOUVFOTlFMkQ2NzYKKzoxMENBNjAwMDg4MTZCNzlBRTVBNzRCNEUyNTU1QzhDRDVFMTkyODBFRjYKKzoxMENBNzAwMEQyRTM1N0IzRkMwMDNDQTBGOTdGRDE1RUFBOUU0RjdENjQKKzoxMENBODAwMDRCRjhBQjdGOTBCRUY3OEQ5NjZCQUQzNUQ1MjMwQTZDMTYKKzoxMENBOTAwMEU4NTdBODRFRjg1NzE5RDZEMTgzQjMwODg3NEVGRjhDQjQKKzoxMENBQTAwMDZFQjk4N0RCRDZCRTNBQjA4ODlGRkJFMzcxQ0I1QUFEMzcKKzoxMENBQjAwMDNFRjFBQjRDRUQ5Q0JGNjZDN0FCMDM5M0JCQzdFMUFFODkKKzoxMENBQzAwMDhGMENGM0UxM0U2OUI3QTFERjlDNjZFQzNGNUNCRTNCOTcKKzoxMENBRDAwMEZBRkRERUVDRDBCQzM1NzdEQTdDNTQ5NzdFNENENDI5NTUKKzoxMENBRTAwMENERTMzQTNDNTUzQjYzM0M2NDJGOTVBRDc2Q0U4NzZBRTcKKzoxMENBRjAwMDVEMUVBRTlGMjhCREQ0NEY3NEJCNzA4MzBDRjUzREQ5MkQKKzoxMENCMDAwMEI3RjVEQUJBNTM3NkM2ODBGQzJERDY3RDBGNjU4NUUwODEKKzoxMENCMTAwMEYxQkYyOEZDQ0M3QjdEM0NFMDhEREFBNzM1NTNDNDdEOEEKKzoxMENCMjAwMEM3MTI1QjdFRkMxNUNFM0JGNjEyQjg4OUY0QzcxMjg1OUUKKzoxMENCMzAwMEJEQ0Q2RkZCRDQ2MjIxM0YxMTJCRTQyNURGMTVCNjI0NTgKKzoxMENCNDAwMEQxN0Q5N0Y5NzE3RTNBNEZBRTVCMTBFRkE3NzNBMzgyNDgKKzoxMENCNTAwMEY0Q0U3NzFDQzhGQTJENEZGQjFFNzVBMERDQkQ2RkIxNUIKKzoxMENCNjAwMDE4RkM0RTg0NkMxREY2Nzc2NEZBQTY5MURGOTlCQzMzRUQKKzoxMENCNzAwMDI2NjhGOTE2RjhFQ0M4MDRFMUQ3MkE4NEJFQ0YyNkI5OTYKKzoxMENCODAwMEQxQ0ZDNUQwRDRENDNEMDg4NjczMzJDMjlGRkE2NzlFRjgKKzoxMENCOTAwMEJFRjVBREM3MjhFRUREMkJGNDFGODc5REU2N0NGNEE2MUQKKzoxMENCQTAwMEE4N0MxNEQ2MDhGRDc1RTAyRkM1MzkwQjc3QjVEODI4QjkKKzoxMENCQjAwMDRGRkFBRUY0QkUzREQzRDlBRERGQzNDRUQ1Njc1RERGNEUKKzoxMENCQzAwMEVCMEUwODdEM0ZCMUY1Q0JCN0M4QUU5RjQwN0YxN0FERTgKKzoxMENCRDAwMEVGNUQ3RTUxRDNGM0JBQzc2NUQ2NDdGREY5RjFBREYyRUIKKzoxMENCRTAwMEM0NDAwRkY0N0Q0RDkzMDM3MDY1MUJDRUNEOTY5NDlEOEMKKzoxMENCRjAwMDlBNDY3RTZEQzkzNjg1Q0YwMzdCRjNENzc1MkI4Q0U3QkMKKzoxMENDMDAwMDY0Q0Y2REI3Q0YxN0U3QzgwMjhGODhFRTRGQjc3RDk5MTUKKzoxMENDMTAwMDU0OUUyQkRBNjU3QzVFREJBMkQ5MUQxMUM3QTAxRkI1MUYKKzoxMENDMjAwMDI2OTMxRkFEOTZCOEZFNzY2MERCMDBCRTlGNzE0MDgyRjIKKzoxMENDMzAwMEEwM0E5Mjk3QjhDRTgxN0M5QjJFOTZBM0U3NEU4QUM3RTYKKzoxMENDNDAwMDIwMjU0N0ExN0RBNjY5RkM5Q0FFRDU4NTY2NkM5QjkxOEQKKzoxMENDNTAwMDQ1RkM3QUE3NkRFRTAxMEZBMTk3OTVDMUYyNzMzREY4REYKKzoxMENDNjAwMDM5MUUzQzkwRTg0REE1N0IwQTUzOUI4NDdDMUY0OEVDMDEKKzoxMENDNzAwMEVDQTAzQUQyODFCMjM4ODlDRUEzNzBGREU2RTg3OEVGMTUKKzoxMENDODAwMDgwRDU5QjVBQ0Y3OEU5RTc5MzU3QzhERkM0NUQ0MjFFMzEKKzoxMENDOTAwMEFDRDk0M0U0QTc1RjEyRjkxQ0NCQkYzMkYwNjE5NkFCNkQKKzoxMENDQTAwMDA1MTBEOEVEQzE3RDZCREQ0MThFNEIxNzgxQzhFQkNERjIKKzoxMENDQjAwMEYxN0NFREI4Q0Y2Q0U0MTdDQ0Y5NjdGOTk2MUQwN0U5NjQKKzoxMENDQzAwMERDRTM5QzNBODQ0OTVFMkY1NDc3MzBFN0JEQkRENTBGMzUKKzoxMENDRDAwMDQ2MjU3OTBCQjNBMkVBN0VFNkY4QkMyQjBFRDVFM0E4NzUKKzoxMENDRTAwMEY1NzE3QzJFRjQ0QUQ5N0YxRjVGODRGREJCRDZDN0I5OEUKKzoxMENDRjAwMDI4Q0YzRUZBQTRERDRGNzZGOUU4M0E3QjQwQzJGMUEzOTMKKzoxMENEMDAwMDQ5OURFRDk0NzcxQ0REOTRFN0M2MTU2MDlFNDVGRERERDkKKzoxMENEMTAwMEIzRTRENzdGNkI2NUI5MDAzMERFNkI1ODUyNzYzN0RGRUUKKzoxMENEMjAwMEZGNUJCMjNFNUVBMjdCMzg5MDIyQzZGNTlDNEY3RTI2MEEKKzoxMENEMzAwMDlFRTM4MjA1Q0YwRkU0NzM0RUREQkY5MDdFRDBCOUY0NDEKKzoxMENENDAwMDkxMjc2MjNDMTRFNDFGREQzM0JEMEZENUZCM0EyQzdGRTUKKzoxMENENTAwMEUwRjM3QzkwRUYzQjQ0RTdGNThCMzZDNDhGQTRGODAxRjkKKzoxMENENjAwMDcyODFGOTM2N0ZEREU1N0NCRUY5NzNDNTM3ODNGMEFGOUMKKzoxMENENzAwMDdDRTY5QTAxNzRBRjZDQzFEQkZEODBGMDg5NkM3RDlFMEUKKzoxMENEODAwMENGRkZCQUUzRjQ5RUUzQkIxMzVCMzNGQTQwNkUzNzlERUIKKzoxMENEOTAwMEY0M0FFMDhBQTc5Nzc5ODlFRkM1OTIyQUNFNjlBMERFOTYKKzoxMENEQTAwMDMzODhFNDYyNEIzNUQwQkEyMzY1NzE2RkI0NzM2NTFDNjgKKzoxMENEQjAwMEM3QTU2NkI5QUJDOTEyNzE2MDhENUU2RkU4MEI4RTE0QTIKKzoxMENEQzAwMEQyMUYxRjMwMUQyMjJCODdBRkEzRjNCMEU2QUMyNENEQkEKKzoxMENERDAwMDRGNzc2NjRGOEJCQTk3NTgyNUI3RDdCRTRDRjJCOUM2NzYKKzoxMENERTAwMENFNzU5MDhFOTg5RUNGQzExQUIyMTI3OUZFM0M4N0YxMTMKKzoxMENERjAwMERDQkNCNkUxOENCMTlGOEJGOTFEQkUzRkIyNDkyREJDQTYKKzoxMENFMDAwMDEzREJBNTFBRkQ1N0E3N0FFRkNEQzJGNzE3QjYzRUYyOEUKKzoxMENFMTAwMEMyM0VBNkNCOUExRkJFNEZGQkVFNzE4QUZBQ0IzRTQxQjMKKzoxMENFMjAwMDNGNzNGQzNGQ0YyMUVBMUMwMDZCNzk3RkZERjlBNzRGRDAKKzoxMENFMzAwMEJDQ0JFN0FCOUY2RTFFOUUyRENFOEQ0MzlGRkMzQThERTMKKzoxMENFNDAwMENGOEIwRkREOEJFREE2M0Q2RjMxNUZDQ0YwOUU3M0VFODcKKzoxMENFNTAwMDI3NDk4QzZGMERFMUQxOTdDRTc3QkQ4RjEwOUNDODA4MDQKKzoxMENFNjAwMENFREJFNkFFQ0E2M0ZBRTlFNzZGOTFBMzNERTcyNzNBNjYKKzoxMENFNzAwMDlDRkFGQTNBN0NGQUZBRkFCQzI3QjM0NDFFMzM1QkNCMkQKKzoxMENFODAwMDBGOEVEOTQyQzdGOTFDRkQ4NUUxMTJENUY3QkE5RTI3NEUKKzoxMENFOTAwMDg1RjIxM0EzRTRFNUJCQUFBN0RGQThENTQzMEU1QTk2RjMKKzoxMENFQTAwMEZEQzA0NkY3RTQ1QTU3NUI3REQxNzZFRjEyRUJFODVEQTMKKzoxMENFQjAwMDcxQTAwNzU0NTc3RkUxNEFEODZGMjE3MjRBN0YzQUVGMzkKKzoxMENFQzAwMEQzRkFBNDBDRDgxRkE3ODEyNzExM0M3NDZGNTA2QjYxNTMKKzoxMENFRDAwMEExMkY4NUVCRTRCNDlFNENENzEwMDNEQzZGMkE3N0FCMEYKKzoxMENFRTAwMEQ0NUUyOTc5MTU3MUVGMkJDMEYyM0YwMUVBMDcxMzFFQkEKKzoxMENFRjAwMDE2NDc5OENGQzVGNDdCMkUzMzEyOTc1RjkzODZGQjM1ODgKKzoxMENGMDAwMEY3ODNFNTE0QzczNDVCODU1RUY4RTdDNDcxRkVBNkQzRUEKKzoxMENGMTAwMDQ5RjczM0UwQ0EzNUY4OTc2NjE3QTgwQUFFMzM1MzgxNEMKKzoxMENGMjAwMDE1RDYyNDMxNkYyOEQyRjlDMDlFQjlBRjUyOUNGMEFFMEQKKzoxMENGMzAwMDUyREY4RkY2N0RDRkY5NTg5RTY0QTFGODJFMTA0RjM5M0QKKzoxMENGNDAwMEUyRkI2RkZEQjZGOEFGMzhGNzAzRjA5NDM5NTE3RUFFQ0YKKzoxMENGNTAwMDdCQ0RDMTc2REY1QzhGQjgxRDdDREM5RjA3NjFFQjE3NTIKKzoxMENGNjAwMEY4REVERjQ2RkY2QkZENEVFOEM2RUI2RjYzQkVEQTRDQzIKKzoxMENGNzAwMEY5QzE0RDg5MEYxNEQzRkJGQTNENENGMzdEQkZBMzJFQUQKKzoxMENGODAwMDI3REYwQjM0REZGQkJCMTY3QzlGOTFERDNBNjVGMUQ1QzMKKzoxMENGOTAwMDhBRkE0N0ZEMjhGMkJGOTE0NDFCNDgzODNGRDI0RkEzN0QKKzoxMENGQTAwMEM3MzE2MDdBNDRBQ0RBRkI5RkFCREMyRkFBMUNDOUY1MTEKKzoxMENGQjAwMDQ4MzhBNUIyM0QxRTZCRjIzNzQ1QzMyRDIyMEZGQjQ2MDQKKzoxMENGQzAwMENDMkZFQjU0MENGRUE2QTg0MEFCREI3Q0FENzI1QzdBOTgKKzoxMENGRDAwMEU1NjlFNUJDRkVFOEExNkM2MUNGOEFGQTVBRUE3QjhBNzIKKzoxMENGRTAwMDBGRDU2Q0ExM0Y0RDEwOTQwNTNFMjI0RTE4REIyNTU3RkUKKzoxMENGRjAwMDFFOTlGODU3QUJGNTZCQzk5RkExM0M0NTEyMUM3RUJBMzAKKzoxMEQwMDAwMEU4Mzg3NkFCOTBBRkIxNEE3MDA3QjU2ODVEQTE4MUUyQjAKKzoxMEQwMTAwMDhBMkRFOEVGNzQzOEU4OEMzMDY1MzhDQkMxMTg1RDNFNTYKKzoxMEQwMjAwMDcxQUQ1OTM4NkZCOTU0Q0Y3OThCODNFMjE5NkM1NzQ5NzgKKzoxMEQwMzAwMDIxODZFMzdCRDBDOUFENDdGM0UzMTVFMEU2NzYzQzc4ODMKKzoxMEQwNDAwMEI5NDVGOUU0NzYyMkI0NzA3QjM1QjQ3MjNCMDU0MkMyMkYKKzoxMEQwNTAwMEVGNUYxMTZDNjI3RjA2RjdCOUY4REM2MkQyM0MwQkM1NUEKKzoxMEQwNjAwMDFCNDVEN0Y3OUMyRjU0Njg3NEVBOUQwRUE4NzAyNTk3MkUKKzoxMEQwNzAwMDRFODcwOTgwN0E5N0QxMDMzRDA2RTdCMEZEMzBEM0MzRDAKKzoxMEQwODAwMEFDOUY2NTEwOTY1OTNGQzkzMDY0NTA5RDQwNjUzREFERDkKKzoxMEQwOTAwMDA0MEZGN0FCMkU5MjBFQTU2MTlGQzI3NTFBMzMzRDJBN0QKKzoxMEQwQTAwMDdCOTY4QkM5MUEzREZFOTUwRDJDMUYzQTlGRUVDRjU2RUQKKzoxMEQwQjAwMEY5QjlDRTJGRDRBQjE0OTI3RjMzMUZGNUU3NDU3MTE1MjQKKzoxMEQwQzAwMDI3RTk2QUZBMUREOUMzQTdEM0JEQUFBMkMyOEFBNTY0NUIKKzoxMEQwRDAwMDkyRUZERTMwNjYzQUREQUIyQTFBNUJGMTNDMUQ3OURFNTkKKzoxMEQwRTAwMDkzM0Q0RUY0MEIyQTBBQUQ2RUNDNUFBNEIyRTlFMzcxMUIKKzoxMEQwRjAwMEJFNEZCQjk3MEMzMzQ1N0M3RDk3MTZCN0Y4OTZGREMwQTUKKzoxMEQxMDAwMEVENDIzREYxQTUzQUREODQ5RjAzODM3QkFBN0ZDQTE5RDYKKzoxMEQxMTAwMEUyN0M3MEM4QzRFMDRFMkJDRTNCQTRGOEU2NjQ1MzdDOUUKKzoxMEQxMjAwMEUwMDgyNkE4NDhGN0JCOTY1NUYxQkRCNTg3NkM2MkJFRUUKKzoxMEQxMzAwMEREMkVFQUIwM0E1RUY4REMxRjgzRkQ0RDlCODYyRjk1MEQKKzoxMEQxNDAwMEQyN0JERjFGRDdBREE1NzU3RENCQjJGQ0E0QUZCRUNEMjIKKzoxMEQxNTAwMDkyNUI3MEIyNjJDMDRDRDRDRjhFOTAxNUE4MUVBQUVGMUQKKzoxMEQxNjAwMDkzOURFQTVCOUFDREU3QkFEOTVDMjcxQkE0QzUzMzFEMTIKKzoxMEQxNzAwMDlCODYwRjI3QkVEQzlGQUREREMzNEE0RTJCMjRCQTJEMDQKKzoxMEQxODAwMDRCRjVERTRGRjMyM0YxNDJCRUVFRDdGOEQwNUJCQjIxNjcKKzoxMEQxOTAwMERCNzM1Rjc2RjFCOUNGMjNGRjQwMDBGMEZEOUY2NUZCQTUKKzoxMEQxQTAwMDFFQTBGNUVBRTJDRUIyN0YzRjNFRTJFREU1RTFCNDZFQ0QKKzoxMEQxQjAwMDM5OTU5MDQ5QjMxMEVGMjYwRjA0NkNFQzA3QjRGQkVBRTUKKzoxMEQxQzAwMERBNzk1NUU0NzY1QzA3RTk1MEU0RjUzNTkxNDkxQjM1ODkKKzoxMEQxRDAwMEFCQjM4NEVDMjdBRUZCNUZCQ0FFMkQzQzY0MDRCRUY3NjIKKzoxMEQxRTAwMEQ4RjQ0MzM2MjE2NzgzODU5QzY5NzY2OERCRjZCREY3MDIKKzoxMEQxRjAwMDBFMTI1RDJGNDRFOTU1RERGNjMzNUY3RDgwRjRBQjNCQzUKKzoxMEQyMDAwMEUxNzREM0Y0NkU3REZBRTU1MkNFMjdDMTY5QjAxQkJBNDIKKzoxMEQyMTAwMDlFOEREOTYyRTdCODdBRUNENkNCNkZBNzc5NjU2RkI3RTgKKzoxMEQyMjAwMDY3MTA1RTU3QjY4N0Y5MUMyQ0IyRURERDQxMDIwRTNENEEKKzoxMEQyMzAwMERGMzgyNTdEMUJCRjRCRTdCNDlDQzc2RDE2RTdCNDRCQTkKKzoxMEQyNDAwMEE0RkE1N0UyQTlGRjdCQzlFRDQ3RjgzRkQ1RkM4NjlFQkIKKzoxMEQyNTAwMDE3Q0ZEN0YwNUFCQzc3RkQ3MkFBOEJDQzVGNzNFQjE0NTMKKzoxMEQyNjAwMEJFQzcxMzEwNzk4MzhBQkZBNEZGNUZDMjNFM0UxRjVGMTMKKzoxMEQyNzAwMEI0RDE5QzRGNzREQTg4RkY4QjVCNERGNzgxMjgxRkE2RDEKKzoxMEQyODAwMDdCMEZEMUY2QkQ4NzdDNzg3QkI2NzY0RTlCMEFBOThDNDYKKzoxMEQyOTAwMDg3M0NBQjhGQUYwNzdCNjdDRTc3MUYwN0NGQUIyQzlGNDkKKzoxMEQyQTAwMEUwOTU2OUZGNjJBNUU3N0FDMjczRERERkQzQjAzRUNDQkIKKzoxMEQyQjAwMEQzRjYyNjNBMzkzOURGQjU4OUZCQzI0RjJDNzVCQkE4QTYKKzoxMEQyQzAwMEFGRTlFNzVBOTQ5NTUyOEFBMzNCN0ZDOUYyQUZCRkE3NTMKKzoxMEQyRDAwMEVCRUI4MjE1RTI1RTM2QUNFOUNCMzI1N0IwQzFFRTIxMDIKKzoxMEQyRTAwMEJFMTY2QzE4QzBGOTA1RTY0MTFDRjdBRERENjA1RjQxNjQKKzoxMEQyRjAwMEZEQTYwNzYzRkQ3MjAxRDU5MzNCMkZBM0JBNEE1MzhDNTkKKzoxMEQzMDAwMEY4Q0U4OURDMjNERDEzMkQ0ODE3NzU4RTMzQkE1REQ3MkYKKzoxMEQzMTAwMEZDQkE3RURGQjYyQkZGODlDRkU2N0JDRDVERTM2MUM1MkUKKzoxMEQzMjAwMDkwNkYzNDY5RjE3MzExQzE0NzcxNjBCRDU1RTQ0RjMxOUQKKzoxMEQzMzAwMDAyRkUxRDZGN0UzRjhFRTJEOENEOEEzNzhFRUFEMjI3NUQKKzoxMEQzNDAwMEY2QTdGNzgxMUVFOEE2QjdDNUU4NUVFMDNDRTc4Q0M1MDYKKzoxMEQzNTAwMEVGNEVDOTM4MUZCRjhBMUVEN0VFQTc2QkYyRjlDNzQ2M0EKKzoxMEQzNjAwMDBGRkNERERBQ0QwRjFEQUYyQUY5RDk0QTFCRDUzOTZFNzYKKzoxMEQzNzAwMDAzMTdENTNEOTZFQzdEQUE4OUJFQjc1OUIyMTJCOEEyNjMKKzoxMEQzODAwMDcwODJGRTUwQkU3MEM0QzJFN0UwNjNGNjE2QTY5MDNDMDEKKzoxMEQzOTAwMEI2NjlGNjhFQ0U4NUQ1MjhCOTJBQTFBMjEwQ0UyRjFFNDkKKzoxMEQzQTAwMDBDMDFGQUZFMjg0NjhEMDUzNTJBMkY4RUNCNDkzMkY0MjIKKzoxMEQzQjAwMEUzREQ5NzE5REVFRjUzOUE2RTE4MDdCRjI3OTQ1QkQyMEYKKzoxMEQzQzAwMDFEQkYyNjdBQUUzMENDN0YyODYxMDI3RjhGNTMxNkJBRkMKKzoxMEQzRDAwMDgzRUI0QTdEMjc4RTM0OENEQjUxQUVFOTlFMDM3QzIxQTIKKzoxMEQzRTAwMEUyOUY1MkZDNjVCRjBBRjUzMkMxMzkzNjBDRjAyQjk0MkUKKzoxMEQzRjAwMEJCMzExREM2RjhBODM0RENDMjc5NjBDQzdFQzU5MEQ3OUQKKzoxMEQ0MDAwMERCMkY1MDY3QkE3Qzk4QTY1NzgzNjFCMEIwMEY2NjdBNUQKKzoxMEQ0MTAwMDFCRUY0MzJDRDkyQjczMUNCNzI0MTUwM0NGQjRERUU5QzMKKzoxMEQ0MjAwMEFERUI5RjRFRjc3RTVFMjNERDA3Q0MzNEQyNzlBMENGRTMKKzoxMEQ0MzAwMDQ4RTc0MUYzOEQ3NDRFQUQzN0QyNzk2ODgzOTFBRTY5NzgKKzoxMEQ0NDAwMDdFMjMxRDMzNTY4QzMxQ0NDRjZBQTkzMEY0ODczRDdFQzQKKzoxMEQ0NTAwMEI1NjFGRUU1ODE2OTg2RkVGMDhEMzcxQUU2RTdCNUNFNDcKKzoxMEQ0NjAwMDM1OEMxNzZDNTk3ODVFQkU4RjA4MkUzMThDOUJGOTVFMTcKKzoxMEQ0NzAwMEI4RTc0NzI2Mzk1NDk4Q0VDNURBRjc1OTNBRkZGREY4OTAKKzoxMEQ0ODAwMDRCRkMxRjBCREUzRTQxODlDQTgxRkUyNkQyQzdGRjJGMEYKKzoxMEQ0OTAwMEZFMkYxOEE2OUQyM0U4RkNCRjQ4QkI3QTk1RTY4N0NERjIKKzoxMEQ0QTAwMERGNzk0RDhEMTNGNkU2RjUzRDI3RjY3QkIwRkY4NjVBMDIKKzoxMEQ0QjAwMDY4NERBMUI4NDk4QjBGQkNGQTc5ODQyOUVGRDNGMzk0NTYKKzoxMEQ0QzAwMDZCNEIyNUQzMzk3RDhDRTE5Q0ZFNDJGN0RBOEE0MzQxRDAKKzoxMEQ0RDAwMDQzN0ZDNDdFRjE3REQ0Qzg4M0VFNTdBODJERkVEODIzQTgKKzoxMEQ0RTAwMDQ3N0YwRjM1RkEwQjc2Q0JFN0U0OURGQUZEMzgzRDZGQTkKKzoxMEQ0RjAwMDgyRTYyNzM5MEY5REE1QzM0RjRBNTA3MjZFN0Q1MUNGRUEKKzoxMEQ1MDAwMDRGQ0Q3OUFCOUVBRjlFRkJCRDk1ODg0QkVFOTY3QkNCMDYKKzoxMEQ1MTAwMDYzNDVGRUFBRTdBRERGMDcwRjdGNTc3NkQ1NjBERkRBRjgKKzoxMEQ1MjAwMDYxNjhGRjY1NEI2NzVGMUFEN0YzNTkyMjJDOUQxQjQ3MzMKKzoxMEQ1MzAwMDg4QjBGQ0REQ0MzQkQzM0RCOUZDM0QyQUQ3QkQxNzRBQjIKKzoxMEQ1NDAwMDZGNEZBNzdCRkUwOEJFMkI1QzIyQ0EzRkY0RjNEMjMwOUMKKzoxMEQ1NTAwMERGRUY2OEJEQzM5MjZCNzkyMUJFRkJGQTk4Q0Y4NkQwMEUKKzoxMEQ1NjAwMDdBRkYzMzRDQzQ2Rjc2MTkyOTg0RkU2N0MwMkMwRkQwMjQKKzoxMEQ1NzAwMEYzNTE0OTlFRTc2OEJFRjk3RUI2QjkzNURGMUI2QTZCODkKKzoxMEQ1ODAwMDBDNzJBQkI4REM3QzZGQzc1QzFGMEM1QjU0OEUzQkZEMzAKKzoxMEQ1OTAwMDNGOTJGODlFQ0U2NzA0RENFOEVFNzhFNUM0MEEyQkM3MUMKKzoxMEQ1QTAwMDJCQTBFNUUzMzc2QkY0RDdFQjE2QjMzNDdDMEVFMzEyMTQKKzoxMEQ1QjAwMEYzRDFGRkRFQkNFNTM1RTZDQkEyOTQwRUFEREU1MUNGNTQKKzoxMEQ1QzAwMEYxRjVBRDgzOUQyM0Y5MUU5QUE3RDAyREVBNUM3QTFENTMKKzoxMEQ1RDAwMDYzRDAyNTdENUY3MjIxRkMxN0E1MUMzNUQ0OTFFMEQ5NUQKKzoxMEQ1RTAwMEJFMTc3NUJFREQ4REI3NThGRkYwNEE1MThGM0NCQzMyNzcKKzoxMEQ1RjAwMDk1RUJERkRERUIxRkU3N0FEMkNERjU2RjFBRjRFMjk2RkIKKzoxMEQ2MDAwMDg2RjcwQzdBMzBDN0ZGOTE2MTNDOUNEQzY5QTVGQTYxMTIKKzoxMEQ2MTAwMEY4ODU4MTEzNkU0MkZBMUREQjZDRTdFRkExNTEwRTNBREIKKzoxMEQ2MjAwMDg4QUZGQUZBRTE5NUMzQzdGMzc3OTUxN0M0RjMzMzg2NDkKKzoxMEQ2MzAwMEEzQkQzMUM0RkNENUYxM0NENDc4OTBGQkUxQzYzMEI3MzIKKzoxMEQ2NDAwMDY2M0NGNTNBODVERURBNzY0MjBFRERDRkVGOTQ2MkREOTgKKzoxMEQ2NTAwMDU0MTczNkQ3MkZFRUI2QTg5RjkwMUUzQzk0OTNBRUM1QjQKKzoxMEQ2NjAwMDZCRjUwNTVFRTY5RkE4NTdCNDZCREY5N0I2NkJERjk3NDcKKzoxMEQ2NzAwMEI2NkJERjhCQjY2QkRGODdCNjZCREY4MTQ2QUNDRTE1NDIKKzoxMEQ2ODAwMDU0RDc2ODk3QzRCRDlGNTk5MkU3QzkzOUI4NUZEQTYwMkIKKzoxMEQ2OTAwMDlGMzM4N0UyRkU4NTlERjkwQUVFNTM1NzEwOUUyRDIxOTgKKzoxMEQ2QTAwMDlGRjNGQUY5RkFEMDczMDlEMzg1ODFGQzNEOTE5RkVGN0UKKzoxMEQ2QjAwMDg3MURCMUY4RjNFOUZCOUJDOTFCQjNBRUEzM0NGMDQ4NEYKKzoxMEQ2QzAwMEFDRkYzODQ1MjI5NTM5NjlENzUxREU3N0M0MjZGNDcwMEUKKzoxMEQ2RDAwMEZBQzZEOEVCNDhFRjNFQzZDNTA4M0ZGRjRCOTJBODJCRDEKKzoxMEQ2RTAwMDM5QzMzNkZBN0U2QTZBQjI2RjUwNEVCMUI4RjdDNURGRjkKKzoxMEQ2RjAwMENERTA3MzkyNEJCRENFMTlCMThBMzgzMEEyQzU4M0U5MTMKKzoxMEQ3MDAwMDM5RTIxQzMwMjM0N0M0QUQ3QTVCNDYzQ0M3RTdEM0E5NTYKKzoxMEQ3MTAwMDY1RkQ3QzM4OUJCRjM3NTk2MzA3OEE1RjcxN0ZGRUJFMEEKKzoxMEQ3MjAwMDQ2QkY2NzYyRkVGRTY2RTQ5RkVDRkM5RDg0NUUwRjJEQTMKKzoxMEQ3MzAwMEM5NDlFMzc1RThCQjFDRDJDQkU0OUZDNEIxREQ4MjcwNUMKKzoxMEQ3NDAwMDY4MDg3REM3RDMwNUVGN0VGMTVERTUzMUFBMjM0N0Q1OTMKKzoxMEQ3NTAwMDlGNEI3MjQ0MUQwNjZFMDNDMzc3NDA4QkY3MUUzRTQ0RjkKKzoxMEQ3NjAwMDc5RDZGQkMzN0M2Mzg4QUU3MzJENkEwOUYxNzU3MUMyRUIKKzoxMEQ3NzAwMDBFQUU3NzREQzk1MTc5NUY4NDk3RjE0NUZCRDM0QzdDNTAKKzoxMEQ3ODAwMDVBRUMwODczN0RFQzQyRjVGMERFRjAzRjc2N0JFODE3NEIKKzoxMEQ3OTAwMEI5NUNGRjU1RjNGOTNCM0M2RDVGODQ2MzBBRDE1RkM3MDkKKzoxMEQ3QTAwMDVCODdBMzdCOURGM0NCQkY1RUQ3RDVGQjlGM0VGMTUwM0MKKzoxMEQ3QjAwMEI2NTY5N0JGQzVEQjgzM0ZCRDU1QTM0QkJCQjVFNzNBMTQKKzoxMEQ3QzAwMEZBRkQxQTdGQ0ZFMUNGMzAwMEFBREJEQjYzRDE0NzYwREYKKzoxMEQ3RDAwMDVCQUZEMUU5RDgwRDg4MEZENzI3M0MyMzg4QkY4QkE3MzMKKzoxMEQ3RTAwMDM5RjlGQjczN0Q3RDVDQzdGNzg3RjNFQ0IzM0FENUJCQTIKKzoxMEQ3RjAwMDkwRjA1RjU4MkZFQUVFRkE3ODQ0MTI3Q0Y1QUYxNDc1N0EKKzoxMEQ4MDAwMEQwQzVEQkRGM0I0NEZGMUY4NDA1Q0ZFNDE1NzI3RUFGM0MKKzoxMEQ4MTAwMEJENkZBNjMzRDI5N0JGOEI5QTJCOEI3MzJCQTRFRkRERjIKKzoxMEQ4MjAwMEM0Njc3M0JERkREQkQyMzU5MjJBQ0U1NzIzNkJDRjBDNzQKKzoxMEQ4MzAwMEExN0I2NDhCRTlERTFBN0QxRkE2RDVBRkEwQ0Q1ODk3REEKKzoxMEQ4NDAwMDQyN0FGOUE5NUU3MUVFNzkxNEYwQjk5NjVERjMyMzc2MDgKKzoxMEQ4NTAwMEZERkRDMThBRTFGRDYzNEVFRjRGODkzRTJGNjg3NjAzREYKKzoxMEQ4NjAwMEU3MDcyQ0I4N0Y5QjlFMjc5QkVBMjg2RDIxNTFFRjZDMjAKKzoxMEQ4NzAwMDRCQjE3MTlDNENGMTBFRjkyNzNEREVCOUVCNEQ1MUVGRTgKKzoxMEQ4ODAwMEJDMkI0REM0RDEwNDFGRjE1NzNBQjg5QkUzODQyRUZGNDMKKzoxMEQ4OTAwMDJGQjk1NUEyOUZEM0VBMEJEMEZFRTA1QkNBRkU0QjFFMDgKKzoxMEQ4QTAwMDhBRkNBNUYzOEIzRjVGQURENTAzODQzRjJDRDZGQzVGOEMKKzoxMEQ4QjAwMDMxQUQ0MzAxNEU2RTFGRjY4QjQ1REFCRTE4M0Y3MkRENjcKKzoxMEQ4QzAwMDZEMzRGODlBMDQzMDVBREQ2Q0U1NkU0MzFERTFGRjAwQkIKKzoxMEQ4RDAwMDkwQ0VDQUJENTA0NTAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKKzoxMEQ4RTAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRkI1MUNGQzBGMDAzQUQKKzoxMEQ4RjAwMDA5MTdCMUExRjI2RkEwRjFCMzM4NTFGOUJGNTk1MUY5MkQKKzoxMEQ5MDAwMDk3RDBGODg0QjAyRTEzMDNDMzBBNDZEMkY0MjBFMzlEQzcKKzoxMEQ5MTAwMDQwRkQwNzgwRjgzODEwOUY2MzIyREYxQzEwM0UyMTBDNjkKKzoxMEQ5MjAwMEY0OEYxODAzQzM0MjIwREQwREE0QUYwMEYxMUYyMDdFNDkKKzoxMEQ5MzAwMDA0RTQ0QjhCMzAzMDY4MDFGMTMyNTEwNjg2NDQyMEJEM0YKKzoxMEQ5NDAwMDA2ODhDQjQ1MjBGQTRFMDJFOTY2NTFGMkVDRDRFM0ExRjkKKzoxMEQ5NTAwMENDQ0RBMzk4MzJCQzQxMUE5NTVGQTNDMkMwQjA1Njk1RjYKKzoxMEQ5NjAwMDgxRTE5MzFBODRCRjAyNDk5RTVEOUQ4MUExNTYwNUMyNDMKKzoxMEQ5NzAwMDM2OTU2MzYwRTgwN0FBNTkyMDhEREQ1QzMzQTBGQzA0NkUKKzoxMEQ5ODAwMEEwQkNCODNBODQwRjAwMTM0REREQ0I2ODAzMDAwMDAwNDMKKzoxMEQ5OTAwMDAwMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwRDUKKzoxMEQ5QTAwMDAwMEJDRDNEMDk3ODU1RDU5OUZGNURERUJFRTQyNjc5QTMKKzoxMEQ5QjAwMDgxOTcwNUI4MDkwMTgzMDY3QzA5NjEyREUyNEQ4QzE4MTkKKzoxMEQ5QzAwMDZDOEEyRjg4MzY0RTE5N0RBMEQ1Njg1OTIyMzIzNUI2MUIKKzoxMEQ5RDAwMERBQkM0MDEyQzJBNjQxNkQ4NzQxQTUyRjVBMkQ1MjVBN0EKKzoxMEQ5RTAwMEEzNjI0QjY3RDQ3OTJDMUREMUIxMzU1QUFBNzZBNDlENzgKKzoxMEQ5RjAwMEM4Mzg4RTVBNjVFMjQyQUI1NTg3MzlGRjdGQ0U0REVFNkYKKzoxMERBMDAwMEJENzkwOUE4OURGOThBQ0JFMURDN0I5NkZGRkNFN0RGQjUKKzoxMERBMTAwMENGN0ZFRTczQ0IzRTgwMDkwMDI3RjFDRkI5MDA1NzRCODMKKzoxMERBMjAwMDAwOTAzNzU0ODIzN0Q2MDgxMTgwMjZDREFENkYyQTA2NzQKKzoxMERBMzAwMEY4ODYxMjNCQUM1N0IxRTc2M0U1RDhGRDNBM0U5RjVDRjAKKzoxMERBNDAwMDBCNjEwMDA1REJFNzAzQzRGMDdGQUNERkZBRTBCQTMxMUQKKzoxMERBNTAwMDg5MjA3QkE2MkNDREMyRDIxQ0RGMkM5QjU0MDBBRDEyOUEKKzoxMERBNjAwMERGNkY5OTlDRTlCRDU5NDJDQTM1RDBFRjA1RkE3M0IyMTAKKzoxMERBNzAwMDA0QTBFNUU4NkZBNzFFMzJFQkVDQkYwMjA4NDU1RTBGN0QKKzoxMERBODAwMEIwQkZDQzgyNTkyNzE1ODBGNzgyOEJCM0QyMzBGMjc4QTEKKzoxMERBOTAwMDZGQjU3NjlGQTU0RTAyRjg1M0VCQ0I1MzBGNEQxQUZFOTAKKzoxMERBQTAwMEZFMUIwQTM0Rjc5NjBGN0YzRTBCRDhBNDMzMTAxRjQ5OTQKKzoxMERBQjAwMDc3N0NFQUQwQkEwN0Q3MTk2NDQ4OUFDM0ZBMDNBNDNEMjEKKzoxMERBQzAwMDM5QUNEQ0I1RUQyQ0I1NkMwODRFRTczQTAwOTIxQ0JGQzIKKzoxMERBRDAwMDlGQjM5RjI3NTI5MzJFNjBCNTBBMjkzMThGRTA1MkQ5MDgKKzoxMERBRTAwMDNGMzMwMUE4MjlEQjk3RUI3NjM1MDBDMUU1ODBCNzIzRUEKKzoxMERBRjAwMEYyOTc4MTc3QzRGRDEyRURERTBCQUVFQjA0RDY2RkJENUQKKzoxMERCMDAwMDhCRDM0QjdCOUUxQzVCMDdDM0U5QzVEQzBGMTM4RkE3MzAKKzoxMERCMTAwMEJCMUYzNzgxOEZFNjMxRTlBODQ5NUUzQUVBQkU5RjhBOEEKKzoxMERCMjAwMDhFQUU0NDNBM0FFQkZGOUU4RTkyN0ZCRDc0RDQ0MUUzQjEKKzoxMERCMzAwMEZDOTVEMTExNDAzN0M3MTdGNEFCMzhGRkQwNzM1RTQ2NjAKKzoxMERCNDAwMDk2RjY0QTQ4NjdBQ0RBODc3MDhGRTM1M0MxQjg5NkNFMzEKKzoxMERCNTAwMEVCRTU2OTRDNEM0MUVDRTkzMzk4REMxQUQ3QkZBQzFFQkQKKzoxMERCNjAwMEUxMUU3Qjc0RTE5QjU4NzYyRUE5QTkzQjlGQUQyRkJGODgKKzoxMERCNzAwMEIxRjdGOTBCNTgxOTg5QTdBNDA0REJBRjNCNDA0NkExQzQKKzoxMERCODAwMEMyQzY1QjkxQUM2NkVCNkJDN0MxRTYwMjNDOTA1QzY2QkIKKzoxMERCOTAwMDI0NzFCRDYwMDA4QzAxRjgzQkIxMjYwMDU5NTc1OTNERjYKKzoxMERCQTAwMDQ0N0ZDREI0MEUzN0E0MzkzRUE0OTM5RUUxRkQ0NzVBN0QKKzoxMERCQjAwMDdGMDhGQjk5NkQ4QUYxRkY2QjAwRDc3N0FBN0VCMDk2M0MKKzoxMERCQzAwMENGOTc2NEZGMjBCRTBCODdFNkE3NzFGMjlCMkM3NTQwQjAKKzoxMERCRDAwMEZDRDhERkY3RTE1RjA4QkZEN0ZGQkZDQzU3MDA5NTNFMDkKKzoxMERCRTAwMDk0MEZBMTdBNTk0QjYxN0JFOENENTY1OTNEQjI0Mjg1REQKKzoxMERCRjAwMDM0OTMxMTA1NTVERDkyNEIzRkY1QkU3NDAyRDRGNUYyMTYKKzoxMERDMDAwMEZEOTExQTQyNDNGMEZEMjc0ODQ0M0ZFM0JGRjU1QUNGNDgKKzoxMERDMTAwMDA2NDY3MjI3OTYwNjYzNDQxRjFBNDA2RUNFRjBGNTdDQzYKKzoxMERDMjAwMEI3MTUwOUQ5NTI1RjUyMjMyNTY4QkVEOEQzQTVBQzdGNUEKKzoxMERDMzAwMDcyMDlENzdCNzdENDJGQ0VCNkNBMkI4RjI0MDlCQzM5NzMKKzoxMERDNDAwMEU5MDM3NDc1MjZCMjE1QTcwRkI1NUUzNjdDRDNCRTM4Q0UKKzoxMERDNTAwMDdEQTg5RjkzM0VGMkQ2NUFGQUMxNjdERkFGODg2OTE3NTUKKzoxMERDNjAwMDlDMjY3RDdDRDFGOUNDN0QxRENFNTc2RDYyNUY0QjdEQUUKKzoxMERDNzAwMEMwRjhGNkY2QkFDNTE5RUQ4QzkxRjdCNTkyRjgzRDUyOTkKKzoxMERDODAwMDBGNDYyQTQzQkZGQ0MxRkQ0QzBFMkZEOUZFMjg4M0RCNzMKKzoxMERDOTAwMDdCODM2REJGOTRCMTMzMUI3QjQ2QzE4NzEyQjFBRkQ3NzUKKzoxMERDQTAwMDFDRDdEN0EyRThBRkU1QjJBQUFBQzkzODlFMUJDNzYzQTIKKzoxMERDQjAwMDc0QjYzMTdBN0IxMjE4M0Y5QzQwREE2NkY4NTBCQTJCNjIKKzoxMERDQzAwMEQyNTg4NzUyODhERDJGMjA5MDU5REQxNzM1NTI5Qjg4MTYKKzoxMERDRDAwMDBFNTJCNDJGMjY3QzFFNURCNkUxNUY4REY4NkQ3NTY4MUYKKzoxMERDRTAwMDRDNEE1NkY4N0QyRDZFODJDMzhERjMzMTdBNTczNDM2MDcKKzoxMERDRjAwMDIwNDM4NTFBODRCNDJGOEMyRDM4RkM0ODA2MjcyNzYyRDAKKzoxMEREMDAwMEZEREIzNjNBRThEMjJCMjFEMzNFOThGNDhBNjhFNUY0NUQKKzoxMEREMTAwMEZBRUREMzkzMkZDRUY5OTZEOEUxM0RFRDdFNDE1NTdGQjQKKzoxMEREMjAwMEREQTI4NzQ2RUVBN0MyRUJFNkZFMzAyNDVFODUwM0NDN0IKKzoxMEREMzAwMDE4REFBNzBEMkVEODI3OURDREY0NzVEMUE1OTA2MDRGODgKKzoxMERENDAwMDM3RTBBQjM5NDRBNzY0Q0Y2QzI4QUFENDkwQUU2MDk3NzMKKzoxMERENTAwMEE0MjI5Q0E2MUU4NTY4MEVCNUFCOTA3NDFBNDdGNjM2QjEKKzoxMERENjAwMDAzQjY1MzgyMDY5NUU2RkI5MUUxMTJGNDk3MzRGNjk3RDkKKzoxMERENzAwMEIyNzFCRjIyRjZGNzJCNDJBRjQxOTVFQkI1N0UxMzZFMjEKKzoxMEREODAwMEQyQjNFQTUwOURBREUzOUQ5QkQ4RkYxODlEMjQyQkE0RjAKKzoxMEREOTAwMEQ0RkREMkYwRjdGNUE4MTc5OTVDQUFDN0U3MTZCOUIyNzcKKzoxMEREQTAwMDdEOTAwRkEyQjQ1RkY1RTJEREMxQzc1RTlBM0M5REQxQzQKKzoxMEREQjAwMDQ3NUY0QzAxMTQ1QkVCMUVGMzE4QjU2Q0ZDRTdDRjkxODkKKzoxMEREQzAwMDUyMUU0OUMwQ0JFMDVDMjRFMDdDRDZDODFEODc3NERBQzMKKzoxMERERDAwMDU3RUIyMTNBNUU3NEMxOUYyMjQ4QzZDN0Y3RkQ1QUNENjIKKzoxMERERTAwMDQ0MkY4QkU2Qjk4NkUwNjBGRkFEQjZBRThGRkRGN0MzN0EKKzoxMERERjAwMEMxN0QyOUEyNzk0Q0I4NTY1NjJBMDQ0N0RGM0MyOTg1QjMKKzoxMERFMDAwMEYzMUNGQUREN0ZEREZBMjUwNkU3QjM1NTUyQ0NBMzEzRTgKKzoxMERFMTAwMEJDMjE2MEYzRjUxOUVGNDc0NkY1M0JDQ0Y5NzVEMDEwRkUKKzoxMERFMjAwMDlGQ0VGOUNERkQwODE3MDJFMTE1RkU5REUxOTVDRDk3MzYKKzoxMERFMzAwMEFDMTlFODVGOEY3ODNFMjZDNUQ2QjNGOUIyRTZCNzRDODkKKzoxMERFNDAwMEMwNzk4QTY1OTlFMEREMzhDRjJCMkI4QzdFRTBFNTMxRjcKKzoxMERFNTAwMDMyRTIzMzI4RjgzQ0NCRERFRDlEQzhFMEVDOUMyNEMzRDYKKzoxMERFNjAwMEJERUNEMUM2RDJEMUU1NTlCQjQzOUVBOTVBREM5MDU4MkUKKzoxMERFNzAwMDdGM0RBOTU1MkFBM0YwNDVDQTkwRUIzMkM5QkI2NzI0NjAKKzoxMERFODAwMEFFMjczQjkyOEJCNTUyNUNERTIxQkIxRDg4N0EyOTZFOTIKKzoxMERFOTAwMEQxQUJDQzVFN0M0NjYyRUI3NzQ1MzgxRDY3RDdDNkI5RkYKKzoxMERFQTAwMDlERDgzNzg2RTQ1NzQwRUM0N0Q2QjRDNTU5OTBDMTBFOEIKKzoxMERFQjAwMDFFNzExRDZDQTI0Qzc2NzNCNkNDRTE4M0EzN0M3Q0Q1MUQKKzoxMERFQzAwMDFDM0Y2N0Y0RjEzNzg4RjEzRjZDOTJBMDBGRTE1M0UzRjgKKzoxMERFRDAwMDVFREM3RjMwMkE4ODlFRkQ4MjNFNjE2RDBFRDU0REI5OTUKKzoxMERFRTAwMEVCMjk4Qjc3MTVCMzdERjQ0NDY1RDA3NTVDNUY5MkY2QjIKKzoxMERFRjAwMDc5MzNEQkUzMjIwNjhBQkY5NkJENjc0RDM3N0ZBQTkwNTAKKzoxMERGMDAwMDVEOTIyRDlGNDgyNjE5MUM5QkY3NUYwQjNBQjM1M0ZEN0EKKzoxMERGMTAwMEQxMTQ1MDdERUFENTVFQzRDRjY2QTYxNEY4RkNCRDgwNEUKKzoxMERGMjAwMEYzMDcxOEQ5QTI3QzBEMzBGOUFBQTM3Q0Q1N0JEMzMyOTQKKzoxMERGMzAwMEFCQUI3NTEwMzNEOEFCOTAxNjkzRkM4QzY0MEU0NDRCOEUKKzoxMERGNDAwMERBNTRGNkJDN0QyOTEwRkQwMjVBMTExNkZDQjY0NzVGNjMKKzoxMERGNTAwMDMwMTQwNjU3NjcyMzkwNUREMzE5QTlBMUY1QjU5N0Q3NUIKKzoxMERGNjAwMDc4OEJEMURFQTk1N0U5Mzk3Q0MyRjA2MURBMjE0QzFFRTkKKzoxMERGNzAwMEZBQ0JDMEMwRjkzNkU3NDMyQTg4QkM1NDlCNDdGNEU4ODMKKzoxMERGODAwMEQ2RjhGQUY1RURBNTkwOUVDRURFNjdDRkRDOEZGMzI3QUQKKzoxMERGOTAwMDZGODFEODI0M0UyNUM5MzVENUE0MEIzNTkxOTREMEJGQzcKKzoxMERGQTAwMDZCRDE2MjlCMzJEMERENzY0ODY0QzkzMzZDNzQ0QTdBOTcKKzoxMERGQjAwMEQ3ODlCNzJDMzc1Qzg4RjhFREFDNjBGNDVGM0M3QzlDNkIKKzoxMERGQzAwMDIyRTQxRjQ2NkZBOUQ4RTI4QjRBMzJDQzUzMkNFQjQ0OTMKKzoxMERGRDAwMDFGNjY1REZGRDA0REYwOEZENDdFQTgxREIzMzM3MzcxRTMKKzoxMERGRTAwMDY4NDM0MkJDNDA2RDg0RDY5NzAzODM3RjBDQUNFNzhBQkMKKzoxMERGRjAwMEY1OEU4MTY2NkExNzlERERCRDFGRjlBQ0MwRThBRDQ2QTAKKzoxMEUwMDAwMDVDN0MzNzc0RTlGM0I0NkY3MEI3ODZGMTA4MDY2REU5OEMKKzoxMEUwMTAwMEM5REMyMTM5NjEwNEI5OUM3ODJGMjY5MzdDMENDOTY5MkQKKzoxMEUwMjAwMENENjAwMzg0N0M3RDUxNTJENjNBOTAxRjkxODU1RDE4NTYKKzoxMEUwMzAwMEMwOUI1QUJCQTdBMjdGMTk4Njk4ODRFRjQzMzEzNTY5RUMKKzoxMEUwNDAwMDk1M0Y1OUMwRUEzNkZCMEY4RTk0Q0UyNEQyRTI3QzAxNzQKKzoxMEUwNTAwMERBN0U2NDE5QURBQ0Y5MEMxQ0VGMEUwNjkwOEZGOUM5OEQKKzoxMEUwNjAwMDVCNDIwOUQyMTc3RkYyODVBN0UxNjQ3RjkyRTM1OTY5ODkKKzoxMEUwNzAwMERFQkYwQ0VERUUxQjE1N0Y2QzEzRDI0MzhDRUIwNzJGMkMKKzoxMEUwODAwMEZCMDdFNTVGRDY2Q0Q1MjY4RkIzMEQ3QjNERDdBMTM3NTcKKzoxMEUwOTAwMDE2Mjg0MTVBNkZGNjU3NDBFODAzQTM3RUQyOTgyMUY4MUMKKzoxMEUwQTAwMDE4NjQwRDQ4MzdEQjZBNTVDMEY5ODI0MTBFOTcwOTY3M0QKKzoxMEUwQjAwMEFFRjI0OTVBMDY4MkUzMThDMkMxRDA0MzcwODRDQjgwQzUKKzoxMEUwQzAwMEZDM0QwNkNGMzEwNzNDQzcxQ0YwMUNCM0MyRDNFMkU1RDAKKzoxMEUwRDAwMEVCNzVGQUZEQ0I2NUUxRjczM0JGMTdGNUUwMDk3OERCQTcKKzoxMEUwRTAwMEE4NDM4MjMxQzY5MTVFMDk2QkJDNkREMERCNDc0Njk1NzMKKzoxMEUwRjAwMDA2MUFFREJGRDNFRjY3RkJGMzlFNEQzRkNDMTY3NTlEMUYKKzoxMEUxMDAwMEQ5RjUyNTA0OUZGRDNEMTQxMTlENTA1RDgxNDFGRjc1OUEKKzoxMEUxMTAwMEY5NkMxMzNGRkE1NzVGNjE3Qzc3RUQ2MTE3MjA1RjMxMkYKKzoxMEUxMjAwMEZFNTVGMEJENEJCQ0JENTZGOEIxQ0I1MUZGMzNCRDdEQTQKKzoxMEUxMzAwMDE1QzRDMzA4REYzQjIwOTNCREZDMEVCQzEwOUU2RTkxM0UKKzoxMEUxNDAwMDhCNzdDODZFQTFDN0Q5ODY1QUY5MTc2MjUxRjRBQkQ1M0YKKzoxMEUxNTAwMDYwNjc5RjEyMjYzNDk4NzQyNjlEQTQ3RDhCMDFGOUREOUIKKzoxMEUxNjAwMDQxNEU2RjQ5RjBCNjkxN0REMUM1RjVBM0U5Rjc3REJENkMKKzoxMEUxNzAwMERCQUVBRkFGRDk2RUFGNUYwRDhCQzcyMDdENUQ3REE3RTYKKzoxMEUxODAwMDBCNTI2Q0RDNkJBREY2MDdEQjlGNkZDOTFBQzE3NzBEQzQKKzoxMEUxOTAwMDM0Nzc2QTQxQjJCMzFBNzExRENCMzU1MEQxNEY1QkY5NTgKKzoxMEUxQTAwMEIzN0I2NjJFNjNFQkQ5MjFGNEU4NUI0Q0FFRUIxNkJENzYKKzoxMEUxQjAwMDcxNUQyNEU1MzZDQTg3QUY2RkJEMTQ1QkY0MjU2OUU0NTEKKzoxMEUxQzAwMEY1NkQ3MEY1MkQ0MkZCMjBCOUQ1NDU3RTFEMzhGREI1QTYKKzoxMEUxRDAwMEJEMEFGOTZCOTY3RTA0RUY5NTVERjZGNTlENkFGRENFNUUKKzoxMEUxRTAwMEY1MzI4Rjg1RDY3QkREQUU2NUE0Mzc0NzVBOEY3Qjk3OTYKKzoxMEUxRjAwMDY0QTQzMkU4Qjc4NzREN0QyOEU0OEI0OURGMjY1RjI3OEEKKzoxMEUyMDAwMDZCODBEQjdCQkZGN0E1RDZCM0Y5N0U4M0YyOTFGNkJGQjcKKzoxMEUyMTAwMEY5NkMxRTQ3Njk5RTg1RTVBOUZBRkREQkU3RUNGN0VGOEYKKzoxMEUyMjAwMDlGQjNERjZCNDI4RTNCRkJBREY0RjZCQjcxM0Y1N0FCNDgKKzoxMEUyMzAwMEM5M0E0OTFFQjJBM0JEQUU2NkEzOTBBMUMyQjVBRjNBMUEKKzoxMEUyNDAwMDhEQTY5OEE1NURENzY5QjYzQjJDOTU5QzU2QkIzQTc5QUYKKzoxMEUyNTAwMDk0RjE4RTBCM0JFM0E5M0RGN0I5RkI5MUZGNzZCRkJBNzIKKzoxMEUyNjAwMDA4RjVGQjM3RkU0OTAxMkY1QkQ3RjEzRDIxNDgyMzdEOUYKKzoxMEUyNzAwMEFBMjkzN0RBMkJENzMxQkE0QTUxM0QzREYzNjI4QjVEN0IKKzoxMEUyODAwMEM1Mjg5NkM2RkZDNjQzMjFCMjBGQUU3QkM0OTNBQTY3Q0EKKzoxMEUyOTAwMEZEQUZGQkU5N0Y0QzAzODY4N0UzRUIwNkZFQTUxMEU5QTMKKzoxMEUyQTAwMDc1QjdDNEZEQkY2NEZGQjQ4QkQ5RjNFQjU0QjgyMjlFOUQKKzoxMEUyQjAwMDgxNEU2NDg1RjNDQkRCM0YwRjM0QTJERDI3RUREQTdGOUYKKzoxMEUyQzAwMDM5OEREQkZCNTUxN0NBNjVCM0RENDdCMjhCRTY2NUVEQ0IKKzoxMEUyRDAwMDBDN0M5RjdDNTA0QTREOTIzODdDMEQ1Mzg3RkJERDZGNDAKKzoxMEUyRTAwMDNGMjg3MUY4RjZCOTUyM0U4NDZGNTc4RjNCQzFEQUFEQzMKKzoxMEUyRjAwMERFRjUyRUQxRUQ3OTBGRkQzODhDNzg1OEJENEZCMUY5OTAKKzoxMEUzMDAwMEJCQUI3NzI5NjlDRjM0MkE1RkM1MTIzNUEzQzRGODZEM0EKKzoxMEUzMTAwMDk1RTBENzU1N0I1NzkyMUU1OEQ1QkJGOTVERTREN0Q1MEMKKzoxMEUzMjAwMEZCNUMzNkI5Q0VGMDEyNEIyMzVFNUY1MjYyRjU1ODdGMkMKKzoxMEUzMzAwMEY0ODc2MTlEQTFFQUFERThFRUIwNTY0RUUzMkU3MzMzNEIKKzoxMEUzNDAwMEJBQkE2OEI2QkQxRjhFRkY2MUNFRjBGMTAwMDYyOEFFRTYKKzoxMEUzNTAwMEI5QkE3NzIzOUYwRkI4QkUzMUY5RjQyREZDNEJGRTcwOEMKKzoxMEUzNjAwMEJEMzE0NUIxOUYzQjlDODA2NzY3NTIxQzcyNTc2RTQ2MUEKKzoxMEUzNzAwMDNGQ0VENDE3MjZCRjdFRTNDNzI3NzYyNkQ5QkM2RjNGOTIKKzoxMEUzODAwMEYyODc5RDQ5MDZGRjhBRkY3OTdGRTdCN0Q5QkFFMDQ5NEUKKzoxMEUzOTAwMDlGODY3MjY4RjVFRURGODRDMTgyRjc1QTg1RkI2MUM3RkMKKzoxMEUzQTAwMDFGRkNFMTAzM0IxOEJGMUNGRkFEODdFQ0JBRTM0RkZDMzkKKzoxMEUzQjAwMEQ3Nzg5REFERkJGOEMzMUY4RDQxQkI3M0VEMTNFNzhGN0QKKzoxMEUzQzAwMDQ1RkE1QUZCRDg3OTYzNjExNEZGMDFFOTM1RTVCMUVFRUUKKzoxMEUzRDAwMDZCOEFGNjU1REYyNzYxMTAwNkUwNzE1MTNBRjZFN0UwRTcKKzoxMEUzRTAwMDVFMjU4REExREI3NzVFRjZBNDNDMEMzRkFCRDlCMzk2REUKKzoxMEUzRjAwMDRBRENBRjk1QTQ4N0IwN0UzM0MzRjNBQTNEMUJERTU1M0MKKzoxMEU0MDAwMEE2NjVDMjc3QjI1MDhFNjJDOUQ4MjY4QUZCN0RGMTQ1RDcKKzoxMEU0MTAwMEU3NTQ2MUU5OEFFOTQ4MUYzMDQwRjJERkQ5NkZGNTExMEUKKzoxMEU0MjAwMEI2QUY2NzhGQkM4RjI3RTAxMzM3RTI3RkY1OUU4RDdDRjgKKzoxMEU0MzAwMDVFQzczRUJFODM3Rjk5OTM0MUZGMEZEQkM3MTVERkRGQzkKKzoxMEU0NDAwMDgxMkZGN0U2RDJCRThGQjQ4RjJCMUZCQjY0NTRGRkNDNTUKKzoxMEU0NTAwMDk0MDdBN0MyNkY5M0M0RTEzQTVCMzFENjI4Qzg1NzhGOUYKKzoxMEU0NjAwMEZDRTg4MTFEMTFCRUJGRjUwQzIxQzc3RjdDNjIzQzA2MTQKKzoxMEU0NzAwMDk3REY3MDBENUM4RTcyNzJFMDA5OEY3NjJGRUI3M0REODMKKzoxMEU0ODAwMDEzMkYxMTlGMUQ3RkVDNzlCNzRFNzIxMjgyMTJEMzdCMkUKKzoxMEU0OTAwMEM3NjFGMDRGMUZFQUMxNTUxMkFGQUNGRTQxMjhFRDA5MkMKKzoxMEU0QTAwMDBGRUREM0FBNTQ0MzlEMUVBNkU3QUZEMkYzMTRBN0ZGRTYKKzoxMEU0QjAwMDU1QTlGRDRCQTQwQ0ZCQjY1QjI5RTE3MjM5OTU0Nzc4NTEKKzoxMEU0QzAwMDU5QTlGN0I5QjVBMDdEM0ZBNUQ5Qjg4RkFGMkU0MEJBRUQKKzoxMEU0RDAwMDFCNjkxRkNERjU2QkI4RkU1OTk2RkRGQzAxRTdEQjkxN0EKKzoxMEU0RTAwMEY4RjM3ODhGNDc5NUIyODZGNkY3QjhCMDBGNTZBN0E0MjEKKzoxMEU0RjAwMDk3MjAwM0RGMDJBQ0UzRjA4RTcwRkU2ODk2NEU3QUY4NDgKKzoxMEU1MDAwMDgxODMxRUNDRkVFNkJBNEZDNUQ3QTc1RUNGNjdDM0Q3QkYKKzoxMEU1MTAwMDlEOEE2RUEzMUIxMzZGNkY3RjkyNTlERUE3ODU5QzU4NEYKKzoxMEU1MjAwMDA1QzlCQTgyODlDM0Y1OTUwQUYxNjQ2MUYxMTBCQzlERjEKKzoxMEU1MzAwMEJEMEFDOUYxQjc3NzI5NjRBNzNCRTVDMkFBMTFGQ0YxNkUKKzoxMEU1NDAwMDVGMjlEQ0ZFNThCNTZGRkYzNDk0NUY2RjFGRjhCOUEwRTgKKzoxMEU1NTAwMDQzNEVFN0FCRjZCQ0VBNEUwQUY5OUZCMkNBN0YxQzJGQzYKKzoxMEU1NjAwMEMzN0VCQzJDRTA1RUZENzhFNkYxNTZFRjc5MzdFMzc4QTgKKzoxMEU1NzAwMDZGQTlDNjU3MTFGRUI3RkE1QzkwNjQ0M0JDRDVBQjY0NzMKKzoxMEU1ODAwMDhDNkYxQzUwNUNCNjM4NkU2NzY4RTZDQjU5MThERjBDOTAKKzoxMEU1OTAwMEZCNzU1Q0Y3RkE3NUM2NEI0OUI0NDM1RTcwMDFEOTgxQ0YKKzoxMEU1QTAwMDZBRUMwRDBGN0JCRjNFRTRBNzczRUZGNUUxQUI0MUI3MUIKKzoxMEU1QjAwMEU4RTk3NjA3OUVENDY4OUNGQzYwMzUxMkFGRTJCMUQ3REIKKzoxMEU1QzAwMDk0Q0QxRjc1NjlCMjBENkU1MDkzNDUxODRGRjk1NUYxRjIKKzoxMEU1RDAwMDdGQTkzOEVFNzM2OEZGOUQzMUQ0RkUzOTE1M0E3MkQ5QTAKKzoxMEU1RTAwMDc4Q0YxOTUyQUMwRDMyQzRBNzFDRTNDN0U3MjlBMDVCNTIKKzoxMEU1RjAwMEU5Q0MyODkzQURGMUQ1RjA4MTlCMjgyRUQxMDJDRDY5Q0QKKzoxMEU2MDAwMDhDMTM0MTExRjRERTZGMTlGN0VFNTYwREQyNkM3RUE4MTMKKzoxMEU2MTAwMDJCOTNBREYxNTU0RjczQjNFMTYxNzAxNEFERDU0QUQwNzIKKzoxMEU2MjAwMDM0MUI2OUZFNzFDREIyM0RBRTJERTY1RjIzRTIwOUIwMjkKKzoxMEU2MzAwMDZCRjdFRURENkNEQzNBN0M1NzgyN0UwQzhGNTczMTc3QkUKKzoxMEU2NDAwMDhBRUM5OEYzODQxQ0ZDNjc2MTA3MUY5MEUyODdEMENGQTcKKzoxMEU2NTAwMDMyRjQ2RDJBQ0EzOUE5NzQ5QjhBRjZDNEMyNEZCQUQ1NUUKKzoxMEU2NjAwMEU1MTY3QTVDNThEQTU2ODRGNDcyRjg1M0E1MzExMzVERDYKKzoxMEU2NzAwMDJENTEzOTVEQjUxNTZGMjhDMkZFODc3RDM3MTY3MTI3N0MKKzoxMEU2ODAwMDM0NEFFQjJDMTBFQjNDMzRFRTlBNjAzRjFCNzc3RkYxNjEKKzoxMEU2OTAwMDM1NUIyNjMzQjhFQUEyMEE2MEJDQTUyRUIyNkM0QjA1RTYKKzoxMEU2QTAwMDVCN0ZDMTExMjVFNjYzRjU4MkE2QTQ5QTk4M0E3QzlFMDkKKzoxMEU2QjAwMDlEMjhFRjE5RkVFRTQ1M0MzMkY4N0ZEMDFBQTVGQTAzRUIKKzoxMEU2QzAwMEFEM0E5NUJCNUFDQkE4RENERDFBQTNGNzdCNUE2NzUzNEEKKzoxMEU2RDAwMEJEQjdCNThFQ0E0NzVBRTNGNDNDRkMyRDdGMDJFOTc3RkIKKzoxMEU2RTAwMDZGNkIyMzNERkY2OTZCODJDQTFBOTVGM0RCNDI4MTBGODIKKzoxMEU2RjAwMENCQkFFOTFDNkM0OTdCNzgxREM2NTE0Q0ZDMzlGMTVERTUKKzoxMEU3MDAwMENCMjgyRTg3Q0UwRDI0MURGMTNENTZFNTcyQzU4OUQ3NDUKKzoxMEU3MTAwMDk2OTYyMEQ5QTUzQjI1QjBFMTczQTZDQUVEQzhCODgwNkUKKzoxMEU3MjAwMEUzOTAzNzcxQTFDQUNBRjdFQTRBQ0JDOUVFODE3ODBDRTcKKzoxMEU3MzAwMEU1RjQ0RTI5N0U1QjA1RTM5N0E3QzZDRDhBNUFFNTZFQzAKKzoxMEU3NDAwMDI0OTg4OEFCNzk0M0Y1RjE1RDNDM0UzMzRCRTVGMkE5NjMKKzoxMEU3NTAwMDBFREEwRTY1MzFGODhDNEY0MDQ3M0EzM0Q3NzlBMDVBMUMKKzoxMEU3NjAwMDJGNDJCOTc4QTA4REMxNTM4RUVGNjUyOEIzRDA5OTM5NjcKKzoxMEU3NzAwMERFNUMwMTFGMDQzM0NCRTkyMUJBRTVGQzFGOUQ1QkI2Q0IKKzoxMEU3ODAwMDBERTNDNENDRjE4QzRERDJDOUVBQjZGNURCQTY5QTcxODMKKzoxMEU3OTAwMDZGOURFOEQ4QTQxM0M2M0Y0RjhEOEJEMDMwREM1RjZDRTMKKzoxMEU3QTAwMDJBRTZFRjdEOUNDRTVCRkFERkE1Rjg1Njc0MENEOEUyMjIKKzoxMEU3QjAwMDhEMUQ0RDMyRjkzOTNCOEVGMkI4RjQ4OUE2OTI2RDkzRDYKKzoxMEU3QzAwMDU5RkI2QTg2MzdGNERCNzMxNjk2NjYyNTJDNzRCRDQ1QjMKKzoxMEU3RDAwMEQwRDMwRTZGM0M0QjFCNDU3Rjc1OEE3NjY2RkQxNTVGNjcKKzoxMEU3RTAwMEUyM0I4OEU3QkY5RkYwOTM3Q0E0RTcxREFFRDQ2NTI4ODkKKzoxMEU3RjAwMDFGNUI4RTdBRjQ3NTEyOUUzN0M0OTNCODZGRjEyMkY2QzAKKzoxMEU4MDAwMDlDODE3NEEyNkVBRDg3OTYxNkU0RTcwRjJEMzdFQkRCODMKKzoxMEU4MTAwMENFQjBGMDc5Mjg2NkU3RUI5RDJEQTNDN0E1NERCODc3NUMKKzoxMEU4MjAwMDIyRENBM0M0NjU0REI4Q0RGRDM4NTFCNzY0RTAxQTE4OTkKKzoxMEU4MzAwMDhFMDdFN0I4MzkwQjk3OEMzQUZGRERDODc3MUVDMkMzNDUKKzoxMEU4NDAwMDRFRDUyMjlGOEE5QTM1M0E2NzMwRkI5QkVCNzVGNjc3NTcKKzoxMEU4NTAwMEFFNzcyODVGRTFGNENFNjc3QTVEOTA4QkZCRjlGMEM3NjUKKzoxMEU4NjAwMEUzMUY3RDBFNzBDQkUzMEFDQUIxMkJENDQ0MkZFRUNCNEQKKzoxMEU4NzAwMDRDNjhBNjNBQTgwM0Y5QzgyRkJGRjM3M0ZBREZEMUY5QTEKKzoxMEU4ODAwMDQwM0VGMTkxOUEyQTQ2QkQ3MEJBRjM3NTQwM0M1RThEQzgKKzoxMEU4OTAwMDdBMkIyNkM3QUNGMkRDMkM3RkExOUE3MTgyMzRDNThGMEIKKzoxMEU4QTAwMEU4ODg5OTREMjkwNzZFOEU2NkMyRjNFMEY4NDVFQURCRTkKKzoxMEU4QjAwMEQ2RjNBNDJEMDBEQzRGNEY3QkU5OUMwMzAzMjIxQUFCNTcKKzoxMEU4QzAwMDE3MUY4NkNBNEQ2Q0JDREQ0MjlFNTRBQkRDMkY5QzdFNkMKKzoxMEU4RDAwMDU4RUY1MTc4RkM0ODY5MDg1OUYwMjhFMkE5NjYxQ0FCNEEKKzoxMEU4RTAwMDAzNkUwNjhENzU3NUFCMTVGQkIxQjlDOTg3MERFRUM0MDYKKzoxMEU4RjAwMDhCODgyRjc3NTRBN0YzNzc1NzI0NDE3QzA1MjJGRTNENjAKKzoxMEU5MDAwMDRFQzRFOUNGMTc3MUM2RkI1Qjc4OUNCMTA1RTIxNzlFMzgKKzoxMEU5MTAwMDgxN0M3RDQ0MDFGMjhGMTMxMzZERkNFQjVDRTc3RTQxM0IKKzoxMEU5MjAwMDU3RkYyNEY0REZDRjg1REMyRTU1Rjc0QjU5NkNGQ0QwMTQKKzoxMEU5MzAwMDFCRTkwMzYxNTZGRTRDQzhGMUM3ODQxQzNGQjBFRDVGNzQKKzoxMEU5NDAwMDhBMzE5RkEwMjNFMThFMjE0RUMzNTVGRUI0QzRFQ0QwODIKKzoxMEU5NTAwMDVCNjdCRUExNUZDQkRBNzc3NDRGNkU0N0ZDNkM1OENCMTgKKzoxMEU5NjAwMEUzRjI4RkEyREM2N0ZEMUUxNjcyM0ZEQ0RDNzkzRDlENzEKKzoxMEU5NzAwMERCMDlGOTUyNjRFNjBCMDg3OTUyMjRFNEM5QzE2RDJGMTIKKzoxMEU5ODAwMDJFREI4MEVCNEI3ODY5OUUxNjQ4M0Y4RDcxN0Q1ODJCQUUKKzoxMEU5OTAwMDkzOUQxMkVFRkRERTBEMzhDRTQzQUQwNjFGQjc3QkY3MUIKKzoxMEU5QTAwMERGQTE3RDdGOEYzNzVERjlBRjE4RkY5RkU3OEUyNTUxN0YKKzoxMEU5QjAwMDRFQTUyNkQ5RTQ1NEI4NzdERjhERDgyRURDRkJDQzREOUMKKzoxMEU5QzAwMDk0MEYyM0YwRTA3OTlDQUQ5NzM1QzlCQUZENzAzQUM0MzUKKzoxMEU5RDAwMERBMTVGNkE3RDFFQzY2RkJEQUIzNzAwQTFCQUZCNDVFQUEKKzoxMEU5RTAwMEE2NzBGNTFFMjk3RTVFMDhFOUExODE5RjQzNjc1NTJDMUMKKzoxMEU5RjAwMDY5QzNGNkREMkI1RTQ4NjJGRjMxQ0YzNjRCQjhFRDM5ODcKKzoxMEVBMDAwMDdGNzc2RjM1RTJFRkZFQTJENzlFQUU2NkU1NjQ1NzMxQTEKKzoxMEVBMTAwMEQxNDFGMEE4OUVGRjQzQzBGMUUzRDE2QkY1OTFFOUYwM0QKKzoxMEVBMjAwMEUwOEEzNTgwNzJDQzczQTc0Q0U3RjRGN0RGQjkwNkFFMDUKKzoxMEVBMzAwMEIxRTY1REFDNTAzM0M2QzcyNkJCM0NGQzNDRUJDRUM1NTMKKzoxMEVBNDAwMDdEMjg2N0NERjNBQkMyOTVCNTVFRTJGRjY3QzE3NjNFMjgKKzoxMEVBNTAwMDZCOUU2Mzk5RkQyQkE0QzQ2NDU3MUU5RDU3RjA3MzJEQzQKKzoxMEVBNjAwMEQxQkY0MDQxMUI4RjU1NkY5MDM5MUZDNEQzM0U2QkJFNDEKKzoxMEVBNzAwMDQ5RjA3QTM5OUUwOTlFNTkyRTk1RTA2OThGRDVFRUZBQjQKKzoxMEVBODAwMDE3MzY5RjNBRUI1MkQyQ0JEMDZEODdDM0Q5OEZDMTMxQTUKKzoxMEVBOTAwMDhCQzNDMUUxMzNFMTE4Qzc0QzgyMjA5QkZGRjY4NTJGNjEKKzoxMEVBQTAwMEU2MjM3QzFGRDYwREVBMUIzRkZBRkYxRERGOTVEMzEzMkIKKzoxMEVBQjAwMEQ4RkU2QzZEOTdFOUZDRkU0MEQ1MDEyRkUyNzE0QjU1RjUKKzoxMEVBQzAwMDhEOUZEQjNGOUNFRTcyMDQxRkZEQTA0RTI2QkUzRDUxODQKKzoxMEVBRDAwMEM1Q0ZGQkUxOTM5Mzc0MUVFNjEyRUY3M0YyMEU3OEU5NTMKKzoxMEVBRTAwMDBDMjM2OTA0QUI2NzYyRkE4MUY5Qzc5MjVGQzA3MDUzNjcKKzoxMEVBRjAwMDk5RjREQkU0QTdEQzkyNjNDQjM3MTgwNzA1OEVCQzk1NEQKKzoxMEVCMDAwMDkyQTFGNkU4N0ZENzFEOTE1MDJGODVDNDc5NzRBOTc5MTkKKzoxMEVCMTAwMEJFQUQxQzhERTFGQUVGMzJGNTYyQUI5N0NBOUVFNjAzRkIKKzoxMEVCMjAwMDNFOURDMUY1OEI2NjQ2MjdCNDJFN0I1RThBQTcwOTY4OTkKKzoxMEVCMzAwMDVEMDVDREZDOUM2RDhCRDZCN0RGQ0RFQTQ1REY2NUE4QzIKKzoxMEVCNDAwMEQ3RDE5RUVCMjVGOTAyREQzQzVGQzAzQ0VGOThCNEMyMDMKKzoxMEVCNTAwMDlFQjc1MkU0QzhCNzE5OTY5RkY1MTlGRENDRUI1REY2NDgKKzoxMEVCNjAwMDdDQzMxM0IwNjUwQUQxNDM1Rjg5NkQ1RjdBRTYzMEI3MjUKKzoxMEVCNzAwMEU2RUNFMUZFRTZFMEI4QzI5RjgyMjg5NzczMzkzRTNFOUMKKzoxMEVCODAwMEM3QURERjUyOUFEMDVFMEE1RjU4OTk2RDNEMUZFRDc0OTQKKzoxMEVCOTAwMDcxM0JFOUQwRUYzQzgwRjFGODBEQjU1RThBRTM5OEU3NzAKKzoxMEVCQTAwMEU4RTY3RTZGQzVBNDJCQ0M3NzY4N0ZDMDg3RjRCMjIzREMKKzoxMEVCQjAwMDUyNDJFNUMxQjlDRkY4RkE4OTBFNzkzRTgwNDdBQzY5NzcKKzoxMEVCQzAwMEREREM2NzE2MzYzMUJDREU5MzI3OTM4RUU5Mjg3QTIxODcKKzoxMEVCRDAwMDFGQ0YxNzZGQUZGNUQyNzk3RjM4RDBERjdCOTBENTgzMDkKKzoxMEVCRTAwMDdGRUY4RUUxRjlGNkZERDVFOTQ2QUJGRkZBOTA4QkRCQkUKKzoxMEVCRjAwMDVCREI1RDQyNUY2REIxOUYzRjMzM0VEODhFN0NFMDA5QTkKKzoxMEVDMDAwMEM2RTlGQzUyRjY4QUJDMDk4NzlGNjNFMjIzN0MyMDVGMzkKKzoxMEVDMTAwMDJFOUVDQUNCOTJBOTQzRjZGOUREODI2RTc2MDg3OUJGQTMKKzoxMEVDMjAwMDQ1Qzg3QkU3MzhDNTREREEwMTM3REFGRDJCQjQ0QTI1RjQKKzoxMEVDMzAwMDAzNUY0RTY4QjFEQjA5RTM5QUVENzkzNTg1NEQ3NkJBMEQKKzoxMEVDNDAwMDBGQzUwQTFDNzY0NTlBRjQ5OEE5OEYzN0Y4ODIxMzkxNUMKKzoxMEVDNTAwMEVFMkI5OUJFRTRGNjgxMjY1QkNGREI5REZBNzhCNzZBOEUKKzoxMEVDNjAwMEVDNzM5MUJEN0I3QTc2NDIzODEwNkY0NjdDM0JFRERDQ0QKKzoxMEVDNzAwMDQzMDJERjFGMkJDNjAxQzQ2RjQwOEQxRjcyNTExRTY4RjcKKzoxMEVDODAwMDlDRTQ4Q0QzNkUxODA2MjczMDM4QTc4RTBBRTcyRjVERDgKKzoxMEVDOTAwMDlGQzE3RTNBRDVGOUMwOUZFNEY4RjZFNzE4QzhGM0IzRjAKKzoxMEVDQTAwMDQwRTQ1RDg0NDgwRTc3ODRCOEJGRDJFMUUyN0VDMjdCNDcKKzoxMEVDQjAwMDYyNURGRkUxNTI2OERDMDE0MTVGRjMwM0QwOUMzOTlGNDQKKzoxMEVDQzAwMDhDQzc4QjNFNDBDMzA0REI4RENEOUNCRjhCMTYwQkJEMjgKKzoxMEVDRDAwMDJGQ0NGQ0ZFMDMxNzNGNjc5QjNGNjFGNDc5RkU4OEYzNUUKKzoxMEVDRTAwMEIwRjI1N0FBRjFBRUNCNzI4RUYzODRDQjc4REY2NTg5OTAKKzoxMEVDRjAwMDUzN0NFOEQyMzgzRjk4RkIyMUYyNzM0REZCNjk5RjZBNDEKKzoxMEVEMDAwMDdDNjRFRDZGOTYzOTBCNTUzQUNGM0QwMUZFOThDMkYwMDkKKzoxMEVEMTAwMEYzNjQzRUVDMDUyNjQ3OUU5NDA0M0U3RkU3QTMzQzIwMjcKKzoxMEVEMjAwMDEzREY4M0Y2MzVDQTBGRDQwMzQ3MDMyOThDQTc5OEZCNUEKKzoxMEVEMzAwMDYwOUVDMzBDQ0ExMUQxRkU0QzM3OTcyNzhDNkUwMjZFQjEKKzoxMEVENDAwMDlBM0ZDRUNGMEIyMTRERjJBMTQwRDBDRDBFREZEMkRCQ0EKKzoxMEVENTAwMDZBNTk3OUVCRENCNzVFQzY3Qzg1NzcxRUYzRTkwOEQ3ODQKKzoxMEVENjAwMEQ2QUE2MzYxQUJEQzg0MjYzQkZEOThDRjVEMUYxNkQyMkIKKzoxMEVENzAwMDM5RkQzN0E1NDRCRURCRTI0N0JBMjIwMzZFRUNGRkE0OUYKKzoxMEVEODAwMEE0OTMzRjk3RkM4RDQyRjZDODkzNTI2QTBBMTkyQTJBMjcKKzoxMEVEOTAwMEQwNzlDNjkzRDc0NjUzOUIyQ0U3MUQ0RTNCM0ZDN0Q3MzAKKzoxMEVEQTAwMDdGRDc2QTVDNzcxM0IzOTc2MEY4QkU5OTc2RkFBMERERDcKKzoxMEVEQjAwMDExQjVGNzhGQkI0MUQ4RDk2Q0I5OENBRjJCQzRCQTYzRUUKKzoxMEVEQzAwMEFBQTEyMDFDMzMyMDQxRTUyQ0QwQTk2NEZFNDBBNTlCQkMKKzoxMEVERDAwMEI1OUYwRTAzRjlDODQ3RUIwMkUzQkZDNEVEOENGRjMzQzgKKzoxMEVERTAwMEJDMTk3RjhENzgxQkEyNUJCQkRFMzZDRjFERjIwNDFFRTMKKzoxMEVERjAwMDQyRDA0Q0U3RUZCRjY4NUNCRTcxMTI5QkNGNUQxNDI0MUMKKzoxMEVFMDAwMDdCMzhBRkIxRkQ3QTM5OENEOTdFN0QxQUZBOUI3OUUyRDUKKzoxMEVFMTAwMDNDMUM5NjcwRkQ2QzlFNEZFN0Q0REJGNUI5NTM3RjdCQUQKKzoxMEVFMjAwMDg0QkRFMTE5NDFBRjNCRTVFNjQ4N0E3RDg1REJBRUQ3OEQKKzoxMEVFMzAwMDA3RTNDNzIzQzgzRjY3RkNGOEQ0RjI0RkJGQURCNjE4NEQKKzoxMEVFNDAwMEYzMzQ4Qzk3NkFEMUFFOUJBNzUyQkMzMzNDMTFBRTg4ODkKKzoxMEVFNTAwMDVCRThFMUY3NkUyMjNBNTZGMkJDOTk0RDhDNUY1MzY3M0UKKzoxMEVFNjAwMDcwM0UwN0Y0MTMwMjRDMDFFMTc5QzIzODM5ODVGOTM2NTYKKzoxMEVFNzAwMDFCOTJBOTNBQ0MzRkRCQTA0RUQyQUNGQjU4M0Q4RURCQjcKKzoxMEVFODAwMEIzNUI2QkZDNEQ1NkJCRjYwRjdFMTc4REZGQ0Q0MEY1ODcKKzoxMEVFOTAwMDMzNDhDN0U1QzE1NDBEQjk3QjA2NzMwNEM3RjBCQzRCQkEKKzoxMEVFQTAwMERDQjdCMzM0RThDNzczNTgwRjcwQkRDRDM4QzJDQkY1QUIKKzoxMEVFQjAwMDRBQURGNjNBRTU2NzI2RTA2NDYwMzRCRDYwQ0ZDN0RDNTIKKzoxMEVFQzAwMEFEQTZENkY5MTExRjExMUU3RjA5NkQ5NzI4Mzk0N0U5QTQKKzoxMEVFRDAwMDM1RDI5OENCNTUxNTU4N0NCNzlCRUJBRjMyOUM2N0ZGNkEKKzoxMEVFRTAwMDRDNjZFRUIyRjY3RkRDRUYyNjNCQTczNzU0QThBMjNENzYKKzoxMEVFRjAwMEY5QTRCQ0ZDRkI2ODA3MEVGQ0Q2MDM3ODlFRDJGQkU5QTQKKzoxMEVGMDAwMDk5NzRBRkExMzdGNEE1MDU0ODA3QkQxMjMwQ0Y5NkFENkYKKzoxMEVGMTAwMDlGRjEwRjRGRkU4MTAwQzZFREMzRTcxOTgwNzFDQjgxRDEKKzoxMEVGMjAwMDVGNDBFQzVFMzZCRjJCRkE2ODlDRjI3NkMxMDhDOEIzMkUKKzoxMEVGMzAwMDU5M0YxRjc0NjFGRTRBRUNDRkZFRjdDRjY1NzRGNzQ4NjYKKzoxMEVGNDAwMEIwRjI4RUIzNjEyODBFNjBGQUZGQjVGRUM0QTMwODY3NjUKKzoxMEVGNTAwMEM3OTg3RjZCNDIzRUVCNjI3MDJBNjQ4NzE5NTE4NEJCNkQKKzoxMEVGNjAwMDMyNEYyNkZFODNCQzYwNkExMjdCNUU3RDM4NTI4QkY5N0QKKzoxMEVGNzAwMDY4RDU2QTA1NEExQTA2MDdERkVGNTc3Qzg5MjcxMEZGMTQKKzoxMEVGODAwMEI1NUE0MzZEMzY2QjVGNzU0NDI3N0I2NTQxRjRGQTQzOTAKKzoxMEVGOTAwMDU4OUY3OTk0RDczQkRDNDBGNjIwRjIyRjU4RjhBRkZBMEYKKzoxMEVGQTAwMEMzRjFCNEJFQzM0MjhFQjc0NzhEM0U0MzFBNjUzRjM0QUEKKzoxMEVGQjAwMEQ1NzE5RkMzOUVDNzYyQTUwMzZEQTY4RDBFMTIyRTJCMjEKKzoxMEVGQzAwMDFEQ0M2Njc0MzBENTRBMDc4NkY0NTlFOEUwN0I0MkRFRjIKKzoxMEVGRDAwMDlFOUE1RjM4OUZEQ0E4NzBCRTE5NEVGN0NEREU5Q0YyN0EKKzoxMEVGRTAwMEUxRkM2MUNFQkJBOTJBMjc4MkU3QUIyNjFGNjhCMzZFN0UKKzoxMEVGRjAwMEQ2QjBFRTU5RTY4RTIzREY5OTdDNjFGMjgzRTIxQkU0MDIKKzoxMEYwMDAwMDhCOEI3QzZDN0Y5NzA0RjVGMzMzRjEwNUZBNzE1NkZBMUMKKzoxMEYwMTAwMEJGNzgwNDNFNTkwNDAzODczMEU3N0U5MTBBQzkyQzI2NDUKKzoxMEYwMjAwMDQyN0UzNUU3OEREMkYxMTZCQTc3RTI2OUQxM0MwOThFN0UKKzoxMEYwMzAwMDU5RTREMUM5OTNCQzZFQzFBMzM2OTgwN0FEOUMzRUJFQkUKKzoxMEYwNDAwMDVGNTBGNThFODg4NUVGM0E5OUZEOEM0NjYxOTcxQzgzNTkKKzoxMEYwNTAwMEJDNjJFNEJCRTU0MUNGMENCQ0RGRjA3MDk0RTJGQjlFRTgKKzoxMEYwNjAwMDc4MTNFNUFEQ0Q3QTNCNzAzNUEzQzMzRjhFOTE3NTVDQzcKKzoxMEYwNzAwMDdDODdCRUZDMjFFMkRGOTcwMzgwNzZEQkQ2OTlENzRERjMKKzoxMEYwODAwMDQwRkZFNDhGRDcyNjI2NjA5QzczMjNDM0ZGMzEzMjZFODYKKzoxMEYwOTAwMDUyNjM2NUNBODVFQTFGQ0JDRkNCRjQyODJGMTM1MUZFRUMKKzoxMEYwQTAwMDFDQzRGQjk0QTgxQkEyNUQzRkI1NjNGQjZDOTM4N0RCN0MKKzoxMEYwQjAwMEJENUMwRTZFRjc3MjNCNzBBM0JCREI4QkZDMzU1MEVDNzYKKzoxMEYwQzAwMEE1RjM1NEU3RkFDRkY1NzA3RTM4RDcwMzU1QjEwOENERDQKKzoxMEYwRDAwMDQ2RjE5NjBFQUY1MkQ3QzNFMzUwRTk3M0Q5RjM3MzI3QzUKKzoxMEYwRTAwMDk2REQ2QkQ1OEY2NkJGM0I1QTUzRjFENzI2RTE3QTc2MTIKKzoxMEYwRjAwMDUxOTk1QjlGMDIzQzM3RjA5NzI1NzU4Q0RCN0JENzQxOUMKKzoxMEYxMDAwMDIyOTM3REI4QzNDQkUzMDRERTAzRkY0MEU3NERCOUE1RUUKKzoxMEYxMTAwMDMxRjI0RjIzRjU2QzNDQ0JCRTJFNjIyOENDNjI3Mjg2NTYKKzoxMEYxMjAwMDJEQ0I0MDdBRUZEMEZENjRBRjJEOEFENEJDQTk0RTFCMDUKKzoxMEYxMzAwMDRFMDdGOEU3OTg2NTNGQkRGRkEzMjQ3QUI5MUY0NzdFQzUKKzoxMEYxNDAwMEM4NUFFMUY3RDU5Njc4ODk3RjNBNUFEQzNEMTg0RkJCMEIKKzoxMEYxNTAwMENDOTM0REY4RkEyMDUyMzM2QTlFMkRGQTU3NDk0NjBGNDgKKzoxMEYxNjAwMDI5RTY1RjYxODlFNzIwQzkzM0Y4MzkwOEQ2RjExQzA0MjQKKzoxMEYxNzAwMDRCM0MwN0MxMTJDRjQxRjAzRDlFODM2MEZEMjdBRDA2OTkKKzoxMEYxODAwMEQ1RjEzQzA0RUI3ODFFODI3NTNDMDdDMTNBOUU4MzYwNDIKKzoxMEYxOTAwMEI5QUZCNTg5Q0E3RjZDNkRBNkY3OEZCN0I2NTA5REVEMzQKKzoxMEYxQTAwMDEzRDlFMzUwOTY4QzJFNjY3OEVFQkFDOTZERTBGOTc2RTUKKzoxMEYxQjAwMEI3RDg4RjgzNDY0OTJFRUVBMzJGQzJGRDUzREZCM0I3RDYKKzoxMEYxQzAwMDAzQUVDNzE3RTU3MUE1Q0VFOEVENzAyNTJCQkI2Njg0QUQKKzoxMEYxRDAwMEJBMzBFMEU1N0QyODQ4QTU0RkJEMDMzMEJFQjA1MzRBQTQKKzoxMEYxRTAwMDM2NjEyNEVGQzYwREZCQ0U1Mzk5MUUyRjhENUU1RjkzQzMKKzoxMEYxRjAwMEMzRUFCNzZDNzg3MjNERTZGNzRDRDZEQjYyQ0JCNUExQkIKKzoxMEYyMDAwMEJBMUVBQUJDRUU2MTRCN0Q0Mjc5OEZFQTY3RURENzc5RDEKKzoxMEYyMTAwMEY2QUY0NzdFNDYzOEQwQzhEQkIyRTFFMDc5NkRBNThDMDkKKzoxMEYyMjAwMDk4NEE4MEVFNzkwQzE0QkI1MzQ4OEY1N0UxN0U0RDQyQ0IKKzoxMEYyMzAwMEY4QjlGREZGNjU1ODFGNDU3RjdBODJFRUFFNDQzRTYyMDUKKzoxMEYyNDAwMEVERDM5QzdFNEZBRjdEMzcxRTY2Q0QxOERFNkZCNDc2NTIKKzoxMEYyNTAwMDcyRDU2OUI1MDM2NTk0RjFGMEJEMzRDQTM4MURCMDVFNEUKKzoxMEYyNjAwMEMzM0I2NzlCOTFFNzMxRUZDODE3MjA3RkFFQ0JDNUY5NTEKKzoxMEYyNzAwMEI3Q0JDN0NCRkYxNjdDN0JDODVCMTNGN0IyMzJFRUU1OEEKKzoxMEYyODAwMEZCREFFNThCRDc2MTNDNzQ2MEFBNEM3MTg1NUUxNzFCNzUKKzoxMEYyOTAwMDAyOTM3NzVCOEE3RjVEQzJFNkZERTYzMzJBNjA3Q0ZBRTMKKzoxMEYyQTAwMDg3MUVDRUZGOTMyNjg0Qjg1RUZEQjY5N0Y0RUEwNTEzNTkKKzoxMEYyQjAwMDdFREM5RUMzRUE5M0VFOEJDNTUwNEY2RTg2OTgxRkU5QTUKKzoxMEYyQzAwMDI0Qjk4NUYzRkI4RkFBMjZFNjM0QjBFNjY3Q0Q3ODJDMDcKKzoxMEYyRDAwMDA3RTMwREFBODAyMzg1Rjc5MjU4QkRBREUzRUEwOTE4MkMKKzoxMEYyRTAwMDBGRjlFM0YzNUM3RUZENTRDQ0QzRTNFQTZCQTZGRDlDRkYKKzoxMEYyRjAwMDExMjRGQjgyNjE4Q0VDODdCNkE4NEFFN0Y3NzIzRTJGOTcKKzoxMEYzMDAwMEREMkVFRDZGQjA5RDlCMjlFODI0ODNDN0ZERTkyQzJGRUUKKzoxMEYzMTAwMEY5RTkxRjdBQzQ3REI2M0VCMjJCRENCRTg0OTZDRDlFNDEKKzoxMEYzMjAwMDc3Mjc2NUUyRjdGNTlBM0Y4NTI5RkI5QjgzOTU3NEJGQTQKKzoxMEYzMzAwMDM2NTlBRTUyN0VGNkU2NzIxRUM3MEI4NDJFNERBMTNEQTUKKzoxMEYzNDAwMDcxREI3RTFGOTcwRjQxMkZFNTY5QTVDQUY3MUVBRTg5QjUKKzoxMEYzNTAwMDYwMjk2QkM4RUYyOTYzNzExREUxNUQ5MzM1Q0FGNzYyQkYKKzoxMEYzNjAwMDdGQTNGNzREMTFDQUU3REUwQzYyNUY5QTY0RjIxNzNCODgKKzoxMEYzNzAwMEM2RkNGOTVGQ0ZDNjczRjFBRjZCMzE3MUM3ODhGMjI1NTgKKzoxMEYzODAwMEM5MDQ5MkYxQkVFRkMwODEwMEMyRjNCN0U2RkRBNEZFNEUKKzoxMEYzOTAwMDc1MDFENkJFN0RCOTE2QzM3RDk4QTZENUQ0NjExQ0IxQzIKKzoxMEYzQTAwMDQzQUJGMTIyNUYwNUE2RDY3QTk3OTExQzFBQ0M2N0E2Q0IKKzoxMEYzQjAwMDdCNzBFREU1RENBRUM1RjdDODk3RDAwRTg3RjBERTRCNkQKKzoxMEYzQzAwMEExOTA2NTgxRUM0QTA5RURBMThFN0EwQTJGNjFCRUFGNEEKKzoxMEYzRDAwMDJEM0ZCMzNERTc0MkNBN0Y1NzE2RTUxMDlDMUQ2MDc4NkMKKzoxMEYzRTAwMEIxN0RCMjVFMjVGRDU1MThGNEE2RDFERTJCMzRFMzhCM0EKKzoxMEYzRjAwMDk4OUE2Q0YxMzc3MjU3RDhGMzlCRjM5QjU0REJGRDhGQ0YKKzoxMEY0MDAwMEIxMDk3QjNENEZGODBGNzk4RTNDNjhDOTZCOUUyM0RBQkEKKzoxMEY0MTAwMEYxRTQ1QzZGNkVFNERFNkM4NDM3MTcyRjM0RUJDM0Q3RjYKKzoxMEY0MjAwMDczNDdBNEIyMDFENzU5QThGOTA5RUVBOEI2QUUxQUU1RjgKKzoxMEY0MzAwMEQ3NTg2ODZFNDNCQUZCQ0NGMDNBRTA5QzU2REVERTg3QzQKKzoxMEY0NDAwMEZCM0U0RDU3RTlCRUMzRDkzMEIwMEVDN0REMkNFOEJDM0EKKzoxMEY0NTAwMEFCRDhBRTRGN0ZFODUxQzQzOTcwQ0QxQ0U0NDc4Qzg3RTAKKzoxMEY0NjAwMDI1MkRGMzE3MjdGRDkwQjRDQzM3QjEyQkM3NTY5RkQ0NjkKKzoxMEY0NzAwMDVENjA2QjdGQzZGNjEyREJGQjI5QTkzMzZERUZDRkRBMzcKKzoxMEY0ODAwMDU1NjlBQjRGRUQ5RDZCNkI3RkY2QkUxQTVCQkQyMjdENjAKKzoxMEY0OTAwMEExQURGREY0QzM4QjZERjUxOTdEN0Y2MzZCM0ZFQkU1OEIKKzoxMEY0QTAwMEU1QjZGNzczRkFBRkIzQkRGRkQyMUI2QjZDRjU3MzA2MEQKKzoxMEY0QjAwMEJFNjU2QjZGREFENzRFQkQzOERERkJGOUVDNkEwRkRFNDcKKzoxMEY0QzAwMDA3QjNDNTBGRUQ3NkJCRDNFRUY2RkVDRjdBN0QxRENBMkUKKzoxMEY0RDAwMEI1QjA5QkU4NUI0NTNEQ0VFQTZCNkVFMjdFOEY3NzdFRjIKKzoxMEY0RTAwMDRDNDdCOTMyNDVEMDYzMjQ2ODE4Qjg2RkQ1NjEyRkU5MEQKKzoxMEY0RjAwMDAzMzVDOERCQTlDMTA1NjQ3NzhDREZDRUU0RDE3NEI0RDEKKzoxMEY1MDAwMDE2NjFGMDdEMDBFNTcyNkIzMjVFRUExQTgyREJBNzc1NDgKKzoxMEY1MTAwMEQzREQ4NkVBNzAxREM1REZDREZFQUE2NjQwMjI4NEYzRTYKKzoxMEY1MjAwMEU5M0NGRjg4Nzk5NUQ4Q0VBN0IzRkU5Njc1M0MyOUNCRTgKKzoxMEY1MzAwMDc0MTU3QzgwRjk2N0Y3NUFGQ0IzOTFGQzMxQTdGRjc1MEQKKzoxMEY1NDAwMEJBRkVENjc4MTlGQzU4RjY0OEYxNjYyQ0NCOUI5RkFGRDMKKzoxMEY1NTAwMEMxMzQzQ0U2ODc1REU1NjVGQkIzRDUxRDZGRUE2MUUzMjkKKzoxMEY1NjAwMDZFMkRGMUYzRjMzMkUxODc3NTE1RjcxMjVGMEMxNEFCRDIKKzoxMEY1NzAwMEE0NUY0MEQ1Q0IxNzVCRTI2MEI3MDlCQjMyRTBCRDhCMUYKKzoxMEY1ODAwMEZDNDBCNTY0RjY2MTFERjFERUE2NTI3QzYyQjNDNEUzQjMKKzoxMEY1OTAwMDI4NDlCNjBGQThENzc2Q0U3REUzREQ1QkQ4NzM2Rjg5OTcKKzoxMEY1QTAwMEI3RDBDQkU0NTFFQ0EwREJDMDczRDIzQjA0NUU0QkI0Q0MKKzoxMEY1QjAwMDhBMUE2NjcxMzFGQkEyRTEwMDk2OTM3NTY2NjdCMEIyNTQKKzoxMEY1QzAwMEFDNkNEQjAxMkNEQkJDMjUzNERGOTlCMTg3NkI1MDk2MkEKKzoxMEY1RDAwMDc4RTc3M0ZCNEY5OUU2NEVBREMzRkREMzM4MUMyM0QxQkEKKzoxMEY1RTAwMDk5OUFCMzlEOUY2Nzk1QUFBRjIzQkRBMTU1N0U1MjFFRTAKKzoxMEY1RjAwMEEyMDMxRkQyODE0NDI1RDE4RjJGMTIyNEJERTFDMzAzNjIKKzoxMEY2MDAwMDFGQUNBQjUyMkFDMERFNDc0QTBEMDlGMzMzQUFDM0RCNTUKKzoxMEY2MTAwMEU5N0NDRTk3QjZEQkFCQ0MyRkJEMERGMTFBQTlCN0VGQzUKKzoxMEY2MjAwMDc3QzBCQjkzRTA2Qjk3Nzg5Q0I2MkI1QjdGQjY4NkMxQTcKKzoxMEY2MzAwMERGOTU1NzkyODMzMTE2OEM2MzM0NThFNENENzZBMTRGMTEKKzoxMEY2NDAwMEFGRjBDOUE2RkUyNzc5RTM0M0RFQzgxQkIyNzcxOEZERTkKKzoxMEY2NTAwMDZGOTcyNzIyN0NERDgwNzJDQjc3NzMzNzIwQkRGQjM0MTgKKzoxMEY2NjAwMEI2OUI2ODZGN0YyNzQ5RjQ2RkRBQkIzNzA4REVBQTJEOTcKKzoxMEY2NzAwMDY5QTQ3M0IxRjcyMzk1NjRERkZBNUE3RTkyMTE3RkJFQjUKKzoxMEY2ODAwMDdFMDU4Q0U5MjNFMzM1M0M3OTA3RTk3QjI4NzFFQjY4M0IKKzoxMEY2OTAwMDU3QjRFODZFQTMyN0QzMzlBMDQ3RjgxRjk4MUY4MkYwMEMKKzoxMEY2QTAwMDg4RkM5MDJFODEwRkYzNUNFRTdEMzM2RjRBOUMwN0RGNjAKKzoxMEY2QjAwMDkwMERCNkYzQzExQkYyMkFDNzhFNjY4RkZCOTg3Rjk4MTgKKzoxMEY2QzAwMEIwQzBCQjkxQ0Q4Mzc4RTlGOEE0QTEyRTRFRTc4NEMwRTkKKzoxMEY2RDAwMEVGQjM3RDVBREU0M0Y3ODYzRjU5QUZFMzM5RTYyQzgxMUQKKzoxMEY2RTAwMEVGNzMzRDFDQkZFM0RENDA3RUMyNzkxOEU3OTg4RTVFNjQKKzoxMEY2RjAwMEU5OTdFQjkwMkZDREI4Qzg5QkRFMUNDMjdGMkMwOTRBM0UKKzoxMEY3MDAwMDMzRDkyQjJFNTM2RkM5MjdDRjI2OTg3NUI3MTlDRjI0MUQKKzoxMEY3MTAwMDkzOTdFQjM1RjZFRjdFQkM3RjMxQjFDQjdFQUY2OTUyNkMKKzoxMEY3MjAwMEI3QkQ3RUM2NzY3QjdENEFDQTVFNjc1NkYzMTFCNDBCQzEKKzoxMEY3MzAwMDFBODBFM0U3QUM1REY2RjcwRDY2M0NCMDk2REZDN0YwRTQKKzoxMEY3NDAwMEIyOTk0RjcyRkQ2QkJCRkYwQTQyRkY5QjcxRDc3MUJEMkYKKzoxMEY3NTAwMEU5NkExNEFGNDU2QkVEN0FCNTQwRThGOTAyODdGRUFDNzMKKzoxMEY3NjAwMDBDMjkxNDBGQTgzRTFDMzk4NEY2QTMxOUE3NzlDNUE3NDQKKzoxMEY3NzAwMERCRTI5RjY2QkNDNTI5Q0ZGRDQ3QjcwMTdCNDM3RTc1QTEKKzoxMEY3ODAwMEMyQzNFMzEwMDlFNkRGQjQxNDg5RjhDNjM4NUVCQTE0QzAKKzoxMEY3OTAwMEZEQjlBNTY0QTczNTlGODFGMkU5OTAzN0YxQjE5N0UyRjEKKzoxMEY3QTAwMENFRjZGQjEyRUZENUE5QkY5MDc0M0U0RkMyMzJDRjhEN0IKKzoxMEY3QjAwMDY1QzkwQkY4RjI1Mzk0N0Y2MkM2M0I0QzdGNUUwOTFBMTEKKzoxMEY3QzAwMDcxMUM2RjczRUM4NUU2ODMxODZGRkFBRDA3NzA5Q0YzQkMKKzoxMEY3RDAwMDk1NjcwRkI3QjJGQTlBNzEyQUU1NEI2QUIzNTY3Q0RGODgKKzoxMEY3RTAwMDhGRjE0MjdDQ0ZFQUQ1QzVGQTU4QTJGRkE3NURFNEQ3RDYKKzoxMEY3RjAwMDZGMTBGNDZDREVFMzMxRTMyMzUxOUZEMDNGM0VEMzJFRjQKKzoxMEY4MDAwMDRBRkE0NTNFQUMxRkVERENCMzc2MzFEOTZDRDM3MzNDN0MKKzoxMEY4MTAwMEVFNjZDNkQ3QTZGNkRBREZGNzgyOTRBQkIxRkQzQkJCNDYKKzoxMEY4MjAwMDMxMjU3M0JCQ0EwODU2NUJFMkVGNjc4QUZEOUFCNjM0OEUKKzoxMEY4MzAwMDdERkI1MjU2REYwM0E5NEFGQ0FFNDQ4NUEwOEJEODIxM0MKKzoxMEY4NDAwMEZCQkRCMTMxMjBEMUZEODIzMTQ3OTQ1ODhBQjU5RkY2NzYKKzoxMEY4NTAwMEI4RkQ3REI5RTM1RUQ5OTlDRTdCNjY4RTc4NzA0ODgxMUMKKzoxMEY4NjAwMDc3OTdCMUY5QjZFOENEMTJDQUNGMkQ0Qjk5Q0NDMkY5MzIKKzoxMEY4NzAwMDdEMjJDRjc4MzI0QzQ2RkEzQjVGMDlDNkQyODhERkRGNjMKKzoxMEY4ODAwMDI4QTQzNzNDQUY5RUYxRDIzMkQ0RTdDRkYzM0MxNjZEQkIKKzoxMEY4OTAwMEEyQkVBRDk2RDVCNTdGNTU0ODNGNjkwMUE4QTgwODBFMTAKKzoxMEY4QTAwMEM1OEZCRjc3MzIwNkVEQUVBMTc4RDQ2RUI2QUZBNTkzMDMKKzoxMEY4QjAwMEQwQkZGNjAyRUE5NTlGQjBGREM1N0EyRkYzQzdCMUZFMUYKKzoxMEY4QzAwMDA4RjNDN0IxRENDQkZDNzE3Q0ZFNTNFNjhGNjM3RDFGNzAKKzoxMEY4RDAwMEYzQzdCMUZDNDdFNjhGRTNGM0M3OTkzRjhFRjU2RjA2OTgKKzoxMEY4RTAwMEFBMTczOEUzNTlENkY4REU1MDNDQUI1RjMyRTM1OTI4MEIKKzoxMEY4RjAwMDRBM0U3MEVCQjRFRjgzNzFBRDA0OEY2QjlEN0ExQ0MzRUQKKzoxMEY5MDAwMDFDODdFMjg2QzNDNjExRjFDMzc3NkVGQUI3MDdGMDlFNzMKKzoxMEY5MTAwMEY1Q0ExOUVCQkFGMEJFQUNENzY1QzZDRjc4OUU4NDk5MEMKKzoxMEY5MjAwMEZGNkNGMkRGQ0FCREQ3RDNCOUIxM0JGRjQ4MzNFRUM3OTYKKzoxMEY5MzAwMERFQUEyMDdEOEJDOEVENEE2ODI4MUY5REZFOTdFOTc3RDcKKzoxMEY5NDAwMDM5RUQ1RkIzNzRFQTIzM0ZEQTAxRDNEMTRFRUFBNkI4QUEKKzoxMEY5NTAwMENGMjYxNzk0RDFGRDU5QzkxRjQzQkU3MEM2MkI0RDNFMEIKKzoxMEY5NjAwMDdFRDE1NzkyRjFCRUQ0NjAxRUFEODhDRjc4MjBFNUM1MTgKKzoxMEY5NzAwMEI4OUE1QjEyRUIxNDc5OUUyNEMyRDgxMDlCOTE5RjJERUMKKzoxMEY5ODAwMDc5QzlDMUYyMzRDNTM5ODI0MTgzRUMyRjg5RDk2NTY0QzQKKzoxMEY5OTAwMEE3Njk4OTI4QzZBMTNBNDdDODlCQkQ0RkYwNjc1QkJFREYKKzoxMEY5QTAwMDlCQkUzN0QxOTlDRkYzMDQ2QThCNjI1MUVDQkYzRTdGODcKKzoxMEY5QjAwMDY2RDQ5QTQ3NkJFNkY5MUUwQUNERjRGNjVCQzY1QjEzNzQKKzoxMEY5QzAwMDJBMTk1NTRGMjk0Q0FGRUFBM0U4NTVDNUMzRjNEQ0Q3MzQKKzoxMEY5RDAwMDFGOThFM0M1RkNFNTREQzFFNTdENjg1RjZEOEE0NkU4OEIKKzoxMEY5RTAwMDlFRkJGRUZDOTk2NDdGMENCNjhGQ0VBNjNDNjcyNUM4QjMKKzoxMEY5RjAwMEVENTYyNUVBMjVCQjU1QzVGNTk3MEZCNTM3REJCNUZBQUEKKzoxMEZBMDAwMDM4NUQzMUY2QTNGODVDMjBEODRCRUQzQzZBOUNFMjFGRDAKKzoxMEZBMTAwMDlFMDhEMEI5OTZDN0NCRjMwQTgyQ0NCRkY2REFFMkFCMjgKKzoxMEZBMjAwMDdDREUxNjExRjdEREE0MjdFMkQ4NkY1MzU0RDU1MTFDQTQKKzoxMEZBMzAwMDZEMkFBQjI0M0NBRjE3Nzg1RTlGNjdFQUZEMThEOTFCOEYKKzoxMEZBNDAwMDNGMTM3ODM2Qzc1OTJGRkNGNUY1NEQ2RUIyQkJFMjJENEEKKzoxMEZBNTAwMEQ5NDY2RDJFRTU2REVFRjFFMUY4QzE3QkJEOTgwN0VGNUIKKzoxMEZBNjAwMENFQUYxQTc1REMwMzM4RUU4Q0QxQzY3REI1QTY3NjNBREEKKzoxMEZBNzAwMDhERkIzMzFDRDcxRDVBQUVFMUI4QUUxMUYyRjM5RjEzQzQKKzoxMEZBODAwMDcwN0U1RUZCOTI2MTRFQTM3MzMxMzBGNTZEMkE2QTNENDQKKzoxMEZBOTAwMDRGNzY5NjdFQjQxM0E3MEZFRkI3NTJFRjVGODBGOUMxOTAKKzoxMEZBQTAwMDJBMjRFQkZDQ0FGMEZCMERBQkY2RjFFRjU1NkQ1NUZCQ0MKKzoxMEZBQjAwMEM4REVEOUZBODk5NEYxOUVDNDE4QkYyNENFNkIwN0ZEMjUKKzoxMEZBQzAwMDcwOUJCRDUyMjhGOEE5NTBCQ0Q3RDE1RTI5NDZCRkQyNDEKKzoxMEZBRDAwMDZFNUY0QzNGNkNBRkNGRThCM0Q3NjdCREVDQjQ1NzhDQ0IKKzoxMEZBRTAwMERGQTBCREIyNDRDOEJCM0UyNjlGNzk3MkM1ODA4QTcyMzIKKzoxMEZBRjAwMDIwOUU0QzU1MjNEQzBERDBEQjg2RTc5OTJFODVFNzExM0YKKzoxMEZCMDAwMDJDMTFGQUVBMjJBMUNGODJGRTZDODJCRkIwQzk2RkYzM0EKKzoxMEZCMTAwMDEzQ0RFRjZFMTQ4OUYxQzdENTFFQkFCRTFEODU2QkRDRkYKKzoxMEZCMjAwMEI0N0Y3NEYyMkZDNzJEN0NBNDlBQzRBNEMzMEU2QTMwOEMKKzoxMEZCMzAwMEVDRjc1NjJGNzJEODM5NEU3QkE4NUFFREExQkNDQzAyRjcKKzoxMEZCNDAwMDQ3RkNDMTNDQ0ZDNDc1RTJGRDVERTdGQzlGNzU1RTczNjkKKzoxMEZCNTAwMEJDMUQ0QzZGQTFCRDYyN0VDRjgwQkVGN0M1RkE4RjUzMkUKKzoxMEZCNjAwMEQzNTIyQzQ4Nzk1RTk0MEY1OEI4MTY4QzlFMEM3NDdDMzYKKzoxMEZCNzAwMDhFRDhGNzYxNzg0QjlFNEI3ODNCNEYzQzJCMDhGMkVGQzkKKzoxMEZCODAwMEE1MTRENDJBMjlCRDk4RTc4OUExM0M1OUJDODJBRDg3MjgKKzoxMEZCOTAwMEVDRTU5Mzc0NUU2REI2Q0ZDOUVFQTVCQ0IyMURGNTEyNEYKKzoxMEZCQTAwMEY3MUY5MzQwNzY4OEI5Q0YzQjgyRkM5RTREQzMzOTUyRjQKKzoxMEZCQjAwMDRBQzZGRUNEMjUzNDNGQzE1NTMyQjRCRjBDNEZDNzM4QkQKKzoxMEZCQzAwMDlFNzgxRURBQzU3NUY2RkI0MDBEMEU3QkMzQTQ4NzhCQUQKKzoxMEZCRDAwMDFDQ0ZGQjdEREMyRjMyRjlFMDlEMzkyRjRGMUVDRkUwOEIKKzoxMEZCRTAwMDU4MjkyNUVCMDJDQUU5RUI0OTBCN0ZCODRFMjIxRkUyRTgKKzoxMEZCRjAwMERGQzdEMDUyODgzRjBFNzgxRkQ1Mjg4RjIwQkJGRjJFM0QKKzoxMEZDMDAwMDYwMjREOUUwODc2NEVEM0M4MDdGRjYwRjlDMjVCMTdBQjMKKzoxMEZDMTAwMEUzQTZCMzNCQkFDNkUxQjVDNjgxMUZBMTUxRTZEOTUwRjAKKzoxMEZDMjAwMDc1N0VERDM5NDM3NUZGMjY4M0VBMTEzMTBGNzMyRDkyRkUKKzoxMEZDMzAwMDdDQkYyRERGMzc2MEYwRUVDNDNDMDJCNDRCMEREOEE2N0MKKzoxMEZDNDAwMDYwMEVBNkFDNkQ4QjE1MEZGNUNCQzE3RUQyMjhGREUyMDAKKzoxMEZDNTAwMEIwNERDREQwMkY2OEY2NjNFOEVBMzRCRjA3NTI4MjI1NTUKKzoxMEZDNjAwMDdGMkYwQjc4QUNGM0FCODgzNzREMEZEMjdEOUYwNUFBNjEKKzoxMEZDNzAwMDg2RTczRjVGMTQ4RTMxQTc1QTc3MDJCNkI5MjYwRUVGOUEKKzoxMEZDODAwMEM3QzA2RTMzRTE5NzMzQzM5RkMyRjdENkY5NURBM0MwRjcKKzoxMEZDOTAwMEZGOTdDNkM3QTlDNjczOEJGNzlGMTkzRUQ2N0NERDk4MjAKKzoxMEZDQTAwMDkxRDc4QjcwQjlFOEJCMUE3QTUwQjY4QzczREJGRThGOTQKKzoxMEZDQjAwMDI4N0VBRDVFMDY3NDlGNDc3NTE5NUE4Q0QxNzlCOTc2NDYKKzoxMEZDQzAwMDI3RjlFMTZBNzZBRDg2NzZDMDQ2NTY0NzNCNjA2MzZGOUEKKzoxMEZDRDAwMDM3QzVBOUNCNEI2RkVGNDJBMjJGNEZGQjAxRTVDMTU0QjMKKzoxMEZDRTAwMEQwQjJGN0IwNzFBNzZBMkE2NkVDODA3QUNFMjExOUUzMDgKKzoxMEZDRjAwMERFRjAxNUEwRkIyNDU5RkJGREZDRkIxN0M1NzNFRjQzOTkKKzoxMEZEMDAwMEZGMjgzQkRCNEI3MUEwNDBGNkNDRkJCOEIxQ0JFM0MxODUKKzoxMEZEMTAwMDI2RkM4MUVBMjMzNTE4Mjc1NzFCMjA4NkFDQTg0QTI5RTAKKzoxMEZEMjAwMEE4NDYyNjlCMDI3NDBFRTEzN0Y2REU4OEY3MzI5OUUyODgKKzoxMEZEMzAwMDIzRkQ0NERGODQ0MEJEMkFFMkUyNjMzOUM5NDA5NzVCN0EKKzoxMEZENDAwMDZCNDAzRjIxRjk4QzRBRjFGN0IxNzg2NEMxODhCMkJDQUQKKzoxMEZENTAwMDNDNjcxQkMyNTM5RTYwMDM0ODA4M0Y4RjZCNEQ0REM4RTQKKzoxMEZENjAwMEIxMzQxQkJGRjI1RERFMEY3RUM5RUYxMTMwNUZBMkYxMkYKKzoxMEZENzAwMEIxRTAxMDVFNERCOTMyNTZDNENCQTM0QkVERjE2NDE4MUYKKzoxMEZEODAwMDYwNkI2NkZEMkI3RkI5Rjg3RThDMjc4QzE5MjZCRkI5NzYKKzoxMEZEOTAwMDdGNkQ3RTZGMjdFQjVEODgzRjQ2RTc5QTc2QkRFMTE3NjIKKzoxMEZEQTAwMERGQjVGMDNCQkU5NzMwMzk2OEJGQkYzN0NDNkZGODRFMzgKKzoxMEZEQjAwMDlDRjQ4MDA3NjI1RTM3RDkxNzRCQzk2RTMwRkQ5MTFERTgKKzoxMEZEQzAwMEQ4MTBFM0ZGRTM4MDdGRkZDQUQ5N0YyNkVGMEY1MUVFMDMKKzoxMEZERDAwMDlGNzhGQ0NDQ0NBQjY0RUZBRkYzMUI5NDE3RTQ2MTc1NTgKKzoxMEZERTAwMDg2NDdDOTBEREU3Q0Y2QkM0MEU2NzE5MTM2MDk1NEFDRkQKKzoxMEZERjAwMDBGQ0Q5N0E2RjNGQzBENTJBQzJCMjYwREY5QkZFQkI1M0EKKzoxMEZFMDAwMDE4RTUxOUMwREExQzlCQkQ2Q0U2QUJBRUI5QjY3ODZDRDAKKzoxMEZFMTAwMDBFMkJCMzg2RUUwRDY5NDg4RjZCRjI0QUM5N0UwRUU3NTIKKzoxMEZFMjAwMEY2N0YwREU1RUI0N0ZFNUJDRkY3QTIzQ0M1M0M4N0I5RkIKKzoxMEZFMzAwMDRDMjg2RkVFRUE0ODMyNzlFQkY5QjAxMDc0OEI1REU2MkUKKzoxMEZFNDAwMDUxOUIyOTBFRTZGOTcwQkNFRDc5QkFENTdFQ0ZEMDA4NkEKKzoxMEZFNTAwMENBQjUzODRGNTE0MDI3QkM1NjgzRDY4RUZEQUFDMTdFMDUKKzoxMEZFNjAwMDlGRDBGMzYxQkVDRDRFMUYxQUJGQzhGNjNDQ0RFQzE5MzIKKzoxMEZFNzAwMEVCNzcyQzQ2MUUzRjAwN0E5OTc1RkM4OTIzOEMzRkQ5N0QKKzoxMEZFODAwMDMxQkU5NjcxRkNBMTcxNzM2REUzNzZBODNDM0U5QThDRUQKKzoxMEZFOTAwMEY4NjlERjlERjY0MDU1QTBBNjM4OTAzNzRBRkMzRUMwNzEKKzoxMEZFQTAwMEUzRjcxQkEyQ0QxNEJGQUYwMUM2RjA4QzRFQ0VGREU0MkMKKzoxMEZFQjAwMDk4QzJFRkJEMDFEOTZENTA2NDhGREZENzA4RkE5NTE5NEMKKzoxMEZFQzAwMDQ1MjBGRDlFQUJEQUJGMUYzNjFGOUNERjEzQjNEQjQzMUIKKzoxMEZFRDAwMDJGMjFBM0IwNzlFNTUwNTUxRkM1RjEzRjBBRUFFODdGMEQKKzoxMEZFRTAwMDhENjQyRkY3QjUwMkM1OEZFNzA3RkE2RkMwNzNFQUZBODIKKzoxMEZFRjAwMEMwRjc1RDFEQjM0NTlFNkMwMUMwREYwNEY2OUU4RkY3MTEKKzoxMEZGMDAwMDAzRkJDNEJEQkU4RTg4NEM3ODg5RDc4Q0E1N0IzQUU2QUUKKzoxMEZGMTAwMDM4NzEzNzRDNDI3OTE4OTc3OTdFMDJGRDYxRjNGN0U1MjUKKzoxMEZGMjAwMDE1RDhGMjFDQ0NEMjc5MEZCNEMxOTBFMkE1MTZCQUU5NkIKKzoxMEZGMzAwMDkzMTk1RUFERjM5RDU3RDhBMzU4RDYxMUY3QzAwQzlBMEMKKzoxMEZGNDAwMDRGRDhCOTgzRjM4REY5N0NGMzNEMkZFMjRFRTY3QzBENUIKKzoxMEZGNTAwMDBCRUNFQjZCNzA2QkI0QkUwNkMxQkZFNjdDQ0ZFM0ZBNzMKKzoxMEZGNjAwMDMyRTBGNzk0RjNDOTlDNkUwNkU3QkJDMEJFQkUwNjhGQjUKKzoxMEZGNzAwMDQ2RUI2QjEwREYwMzFFOUM2RkNDRTc5QjZGODNBQjM5QTYKKzoxMEZGODAwMDgxNzZEQjM2ODlGM0ZGNzczNzNGREU4MUZCRkE3RUZEMzIKKzoxMEZGOTAwMDlBMjhFOTAzNjExNzVGODQxRDU4QkI4QjU0M0VERkEyOEEKKzoxMEZGQTAwMDIyNkZBQUNEMzJERjBFMjYwNzBDOTEwRjZGNzgzMDdGQkIKKzoxMEZGQjAwMDQzQTM3QUFBMzU0QUU1QkRDQ0NFMzYyODdGQTM4Q0RFOTIKKzoxMEZGQzAwMDNGRDAxQUEzRkFBRUQ2RDk1NDlBRTM5NENERTZERkE3NzAKKzoxMEZGRDAwMDk5MzI0RkNBNjg2RkZGMzJDMEZEQzY2REY5REE2NTU3QjYKKzoxMEZGRTAwMEExNUVBQUY2RjM3QjkzQjNCRjA0ODZDNUZFNjUwNkYxNTYKKzoxMEZGRjAwMDAxMUY5RUJGNUMwQTE1QThEQjI2NkZFNzcwNDc2QUM3MjIKKzowMjAwMDAwMjEwMDBFQworOjEwMDAwMDAwQTQ3MEZGRkMxNTg3RkE1QTU5RERFMzcyRTlBODRGMTk2RAorOjEwMDAxMDAwMkZDNDMzRjlBOTg3MDNEQzBGRjdCOEI5QkM4N0I5RkM0MworOjEwMDAyMDAwN0I4NzhCODQ1RTAxQTU1RTcyMjEzRTJFQ0FBNkYzRkVGRAorOjEwMDAzMDAwQzU0QjhDOTBDNkYwQjY0NDkyN0U1MzJBRjQxNERFNkYwMgorOjEwMDA0MDAwQjk0NDZDOTVEM0NFOEZBMEM2NjBFMzQ2MEMyNTg1REZGRQorOjEwMDA1MDAwMzFCQUE0RTg3MDIzRUFFNTc4RTg2MkYyMEZFMkFDNjMxMworOjEwMDA2MDAwMEUxQkU3MTJBMTI3QUI1RkY1MDBFNjNCQzBGOTZFODJERAorOjEwMDA3MDAwNjNDOTEyQkIzREJGQ0Q5N0Q2RDAzRUQ5NTYxMTAxREMyNgorOjEwMDA4MDAwOUZDNUY1RjZGNzFFMzdFN0MzQjhFM0ZCMDY4QjRFRjFDNQorOjEwMDA5MDAwQkQwM0ZBRTY1Njg2N0M1MzY3N0NGMjQwNDBFNEFCOEFBNworOjEwMDBBMDAwMzhFNDA5MjhCRkFEMTY1RjE2NDU0NkZEREVDMTREMDE5NworOjEwMDBCMDAwMkU5RjRDRkQzNjlDOEUzOTNDN0YxMDcyNkM0N0VCM0U3OAorOjEwMDBDMDAwOEE4Nzk5RjAxNUE4MjkwOUU1NzU2MUQzM0U1QjVFMTMwRgorOjEwMDBEMDAwNDMyQzE5QzM2NjFDMUU5NDNEMTVFODg3MzhEN0IzNDNEQgorOjEwMDBFMDAwREE5MzNGREFGNzREMEE0MDdEQkRCRjRDN0NGRjUzMUFDRgorOjEwMDBGMDAwQkVFRTU3MDNGNkY4RUIwOTk4Rjc1QzI5NjRFMjFGMUU4MQorOjEwMDEwMDAwNzc1RDc0NTg4OUI1RTk0Mzc4MzFGMUYwRkZDRDQ3NUJFRAorOjEwMDExMDAwMTE2NjU2M0U3N0RFMDc1NURDN0YyQkIyN0Q2N0QzRkMzOAorOjEwMDEyMDAwN0VGMEM1ODM3NTE1NTQwQjNENUY3NDlEOUJFQzE5MzBCMworOjEwMDEzMDAwMDZDQTkxRUU4RTlDMTNFMERGN0IzM0VEOTdGNDZGNjU3QQorOjEwMDE0MDAwQjQ1RkJFRjhGOEM2Mzg1QjdFQTcxODc3QTRGRDcyRTZFOAorOjEwMDE1MDAwMUI1QUVFOEIwRUU1QzM2MzdFODlDNENGQjEwQTMwQ0Y0NAorOjEwMDE2MDAwMkRDQzlGMUZCM0RCOTlCNjNDQjdGNUZCMUY5NDMwQ0U2NworOjEwMDE3MDAwNzcxN0U2RTM1OUNFQUQwQjk5M0Y4RkYxQUVBMjE1RjY5NgorOjEwMDE4MDAwQkMzQTI3NUM2NjVFRDVFMDdEREI3OTRCQjQzRDNBN0RCOQorOjEwMDE5MDAwNUZCMTFCM0Y1OEQzQjUzRDE5MDc0QjFFQTU3OThGRDBEMgorOjEwMDFBMDAwRjRBNzlERjcwNzk1MjBGRkNFNUU1NERDQ0I3MEM2ODM4NQorOjEwMDFCMDAwNkY5NDkzNUFCMTg0NzlBQjI5NkYzNTJCQTdFNzI0NjZFNgorOjEwMDFDMDAwRTE5NUY2MUI5NTY0MUQzRTU3QzZDRTZENDIzQzJDNkRFNQorOjEwMDFEMDAwRjk3NjBDRTM3NzVBNkVFNkI4RjQ1MkExQkY2QjgyOUNCNQorOjEwMDFFMDAwNkU4RUJBRDJFMzMwOEU3RDRENEU0RDREMzAyRjQzRkI5NworOjEwMDFGMDAwOTZFRkQwNzhGMzQ3Rjg2RUZERDc4MjNDNkU3Mjk3RDBCOQorOjEwMDIwMDAwRTdDRUY3NEJDNEZCQUZBRTk0RTkzQjE4M0UwOEE1QTQ3QworOjEwMDIxMDAwNjIzQzM3RUU5RTRERjdGNjU2RUQ4ODY1QkExRkY3NUNFNworOjEwMDIyMDAwMzg3MUIxMTUxRTVGMjlCRkE3MEREMDNCMDdGMUI1RjE5RAorOjEwMDIzMDAwRTNCQjdCMUY2MkE4Q0NGOTM4NDg3MjM0NDdFMUUzNUEyQworOjEwMDI0MDAwRkE3RjJEMzg2Mzc4RkYyNzNGN0E5MUVFMzczRjg5RjdBMQorOjEwMDI1MDAwNTlFNkUyRjZEREIzMDBFM0RGNUJDRDNBODZFNEIxOUUxQQorOjEwMDI2MDAwNkRENkJGQ0RERjBGRDY2NzJDQTg2NkZEQjcyMjBEMzI0NQorOjEwMDI3MDAwMjJGQkZEOTYwQjNBNTFDRjZFOTU0MDdDODdCQzZFMDFGOAorOjEwMDI4MDAwRkE4NzVCNURCQ0ZEM0Y4OUY3RjMyRjdDRkJCRURCNTAzQgorOjEwMDI5MDAwREVDRjc0OTMxRkI4NTVEODIzMjY3Q0ZENDE3RTFGQTk1RAorOjEwMDJBMDAwRkYxNEY4QkM0NUVDNUIxMEYxMTlGOTRDRjhCQzI1MTNCMAorOjEwMDJCMDAwM0VGQjczOENFRjIwOUU3Qzk4NDlDMTQwRjA3REVDNUQ0NQorOjEwMDJDMDAwOEJGOUM2RkZEMDBBQjFBQkQ4MUFFRThBRUQ3REYwMzZCNQorOjEwMDJEMDAwQTBGRTFEOTlGMDE5Q0YzMTNBRjE3OTcwRTUzMTVBNUZERQorOjEwMDJFMDAwQTgzNDg4RUUwRDZDOUMwNTM0NEUwNjM4NkUxRDZENUY4QgorOjEwMDJGMDAwOUZDQUUyNzJFQzkzMTAyRjczODRGREE3NzhGQUEyNzg1QworOjEwMDMwMDAwRkVBRjU1N0RFRjA2OERDOTkxQ0VFMkVFQzY0Q0Y0N0Q3MQorOjEwMDMxMDAwNzc4OERCRTVEOTIzQzRBQjFGMTVGOEZEQkQxNkRGODk0RgorOjEwMDMyMDAwNzBCNzZCQjdEMzc3NThERDEyQjcxQjM2Q0VFRTA3Qzk1RgorOjEwMDMzMDAwRDJFRjg1MTA2RkNGRTA3RTAwRTE3NkNGRTFERjQ3MEQ5MQorOjEwMDM0MDAwMzFCQzYzODI1OUE4OEFDM0JGNTEzRjAyOThGRjFEOEFGRQorOjEwMDM1MDAwMUVBMUJDRDA1MDU1M0ZGMTNCNUQ2OTI4RTA3NDg1RkU3RAorOjEwMDM2MDAwOUE1N0Q4Njc4RjZFNTlCQTAwRTU0QzhFNjJEMkUxRjE4OAorOjEwMDM3MDAwNEVBNDFCNjVBODRFNzRENDkzQzNGQkJGQkNGNTc4Mjc2RAorOjEwMDM4MDAwRkE3MzNCOTlGRDgyREZFQjQ4MTZGMEJDMTFFN0ZBOUU0OQorOjEwMDM5MDAwMTRGMERFMTMzNjdFOEVFQjFCODY0RjRGRkY3REI3QjExOAorOjEwMDNBMDAwRkU1QjI3RjE3QjM5RjNFNUJFQzYyQjkxMkUyRjBDOTIxNQorOjEwMDNCMDAwRkRDNTlFMzc1QUJGOTNGMzA3NDE2RjdGMDg3MkZCNjlGMworOjEwMDNDMDAwRUI0NzVFN0FFRkRDOEY5MUU4RjVENzAyREY5RjgzNUUyMworOjEwMDNEMDAwN0Y5RDg5REUxOEJEMUU3MUQwRUIwNzkwOTk1RTVGQzlDNQorOjEwMDNFMDAwNDQ2NzhDNUU4RjY2QzI4QkIzQUU4MEIxMURDRjY3RDU3QworOjEwMDNGMDAwM0YyRkQ4ODVFM0E5NUY5RUI3RkQyMTU2MkE3RkJFMzlERQorOjEwMDQwMDAwNDlCQjE5OTM2Q0Y3NTBDRDc5MkFBNEM0NUI0MThCN0MwRQorOjEwMDQxMDAwMzdCRkUzNEQzOTEwOTlDNjlEMzU3MzNCQ0FCMUQzMTgyOAorOjEwMDQyMDAwRjcwNEMyRUQxQ0Y3MjA4RTNCMDNFNTRCMzA5MUU5RkI0RQorOjEwMDQzMDAwNDZERjBGRjFCQ0YxMDdDNUJBNDZFMjlCRTc0RUMxMzc3NAorOjEwMDQ0MDAwM0YwRDcxM0E2MDdDRTMwQTlEMDZERkJDMkVEQUIzN0Q3NgorOjEwMDQ1MDAwMDg4NTRFOEI2RkVFQTREMjU3Q0FGOTg2QUUyQkNGMURGRQorOjEwMDQ2MDAwQ0UzNzAwQUY3NEEyM0NFRTJDRTY3QzMxM0VGNDQ2NjdGQQorOjEwMDQ3MDAwQjJDOEMyNDdGMDExQkQ1Nzg2RUEyNEJGNEQzRTdBM0I1MQorOjEwMDQ4MDAwRjQxMUYxOTFCMzdGNzg4NEVGNTk0RDFBNUM0N0JDMTQ5NQorOjEwMDQ5MDAwRDc2RDlDQTVCNUYzRkIzOEZEQTRCNzdCNjA2MEJGODcyMworOjEwMDRBMDAwRjI2Qzc5NUVBQjNGOTkzNEI4RDlEMDA3Rjg3REM0QTkxNgorOjEwMDRCMDAwODIxRjc3QTIwRjg2N0VDRTRDMTE2NzUyRkI2MDcxNjg1NworOjEwMDRDMDAwMzgzRjg3QUFEMjU1RDZFRjBEMUMxMkYzN0YxQThBNTdGMAorOjEwMDREMDAwRTFGQzNERDAzRjA1RURBRjkxRjY2OThFOThFRjdCRDlGOQorOjEwMDRFMDAwQzY5QzUwMDYzQTNGOTUxRUJBM0NDNEYzMzcyRjE3RjMwQgorOjEwMDRGMDAwRTY3Q0VDNkQ0NkZCRDNDOUVGRjM1N0ZERTM5QjBGOEMxNQorOjEwMDUwMDAwMzJDRUQ3NDRGRjhCNDM5RjlCRkYyRjBFNjVFNkZGMjUxRQorOjEwMDUxMDAwMjEzQkZGNTdFMTc3M0EzM0YwRkZENzQyOTlGOTdGNjlFMgorOjEwMDUyMDAwMjZCQzdDMDE3RTZGMEE2NUUwQ0JFQUQzQzRGNzhGMDQ1QQorOjEwMDUzMDAwQkU3RkY0MDVGMUJENTFGNDZGRkJGQ0Y4NkUxQjAxREZDQgorOjEwMDU0MDAwRUIxMDhGQTc4MUVGOEQyM0UwN0I1Mzg4RUM5NTQ3MDg1NAorOjEwMDU1MDAwRkU5MDFFQTQzODc2RDcyQ0Q4MkI5NTY0ODRFMzc2RUJENgorOjEwMDU2MDAwMzg1RTlEOEZDM0YwRkU4MUM0RTg3RUZFOUZCQjYyOTkxQQorOjEwMDU3MDAwQkU0RkMzRkFGRDgzMTU3RUIzREY5QzkwQjgyNzBERkFGQQorOjEwMDU4MDAwRjVFODlGREZGNUU1MjBDNUZCOTk3RUJDMjdGNDk3OTUzQworOjEwMDU5MDAwRkIwRjg2MzJDOEZERjkzMjk3NDMxRjZGRDlEQjg5RkEwQQorOjEwMDVBMDAwRkUwQjhDRkY1ODI2M0E1QjJERTAzRTk1NUQ3MDU4RDBDRgorOjEwMDVCMDAwMDc1QkY3RTNBMUJDRTFGMkFGNDdGQzlFQ0EzREUxQzQ5MworOjEwMDVDMDAwQzExMEY5NTdGRDBCNTE1RUVERkM1NjhFODRGMUE4MjI0NworOjEwMDVEMDAwMjMyREExOUZGMDczQTFDNzJBNDMzQUJGQ0YyMEZBRUQ4NAorOjEwMDVFMDAwNTREMzEyRTZCM0VDNkNENjI0QkM2RjY0MTlFRjk3QTExOAorOjEwMDVGMDAwMTkyMzhGRTc4NDgzQzFENzE3MjI3OTY3M0M4RkZERTZFMworOjEwMDYwMDAwMENEOTgxOUZDOTRFNkFDQzM2N0UxQjIyQkIyREZFMEFCNworOjEwMDYxMDAwQzlFRDMzRUM3MkRCNUM4NzFDRUZBNkJDMTdERkVDQ0NCQQorOjEwMDYyMDAwQkZGN0YyRjNBMDJBRUNCRkY4NkI1NkY5N0YzNEE0MDlBOAorOjEwMDYzMDAwM0Y5NDhGRjc1OUY1MEY4M0VGOUQxMEQ3MkJGRjhEQTVCMgorOjEwMDY0MDAwMTMzRTI3NUU0RTA1NjcxMUVBNzkzRURFNDc5OUY0OTQyMgorOjEwMDY1MDAwNzMzQ0QzNkYzNUY3Qzk4RDNBQzkxMkQ3NzE4NzA3RUQ0RgorOjEwMDY2MDAwNUU1NzE4RTU0OTg3NENGNzkwMTYwOTc5QjI2ODc2QjY1NworOjEwMDY3MDAwQjBEQjM1M0Y4RTdGOTc4ODkzREZCNUUyRjY2QTNDRUZCQgorOjEwMDY4MDAwRUVCOTU5QUI0MDE0MTQzNDcxQkRBN0FGMTg0RkYxNEZGOAorOjEwMDY5MDAwMkQyQ0Q5Q0U5M0NENzJCMEJGQkI3NzBBN0U5RjlDQ0Q1NworOjEwMDZBMDAwMUJDMTc5Q0Y5RDA3NjlGNDFCQjNEMDZFQTA3ODg0NDYzNworOjEwMDZCMDAwQkZGNzk1RTNFOThFNjJGQzc0QTNENEREQjgxQ0Y1RUFCQworOjEwMDZDMDAwQzIyMEJGNTcxMjVENzI4QUVGQkNGMUY4OTNCOTZFODhGMQorOjEwMDZEMDAwNTY5REEyN0QxQkI1RDcwMkRERjQ5RDhDRDM2RUVGRTk0QworOjEwMDZFMDAwNkVDQzk0NUYzMjIzMkM5Qjc4OEQ4RDhBRDc2ODg0RTIwMAorOjEwMDZGMDAwNUEyNjdFODdDRkMzRjdBRjNBREUyQzIxQkU0MzU1OTJGMAorOjEwMDcwMDAwODY1N0FGNDI4QzRFRDA1RTkyNEJGQjI4OUZFOTJCNTUwQgorOjEwMDcxMDAwOUM1RTgwRjkyNUEzN0Y2N0EzRDNCNEQ3Q0UwQkU3N0Q3QQorOjEwMDcyMDAwNzFCOENDNzYyM0NGMjdEQTM5RUUyQkUwQjkxN0M1NjczRAorOjEwMDczMDAwODM1QzhFNTE0MzU2N0ZFRjcwNkVDNkI4QkY1OTZFNjhBQQorOjEwMDc0MDAwRDU4QTU0OTc3NUZDMTQ4RjQzMEVFNjRGQzdBMjY4NkY4NQorOjEwMDc1MDAwQjUwMEE3NDc4ODdBQzkwRUEzRUZCOTVCRjZGMzlBMzBDNAorOjEwMDc2MDAwQ0Y3M0RFOTkxNTVGMUUyNkY4NjJGNEZENDJEMEI0RDMzNAorOjEwMDc3MDAwNUEwRkVCNzcyREVFMkJBOEFDNUZFOEY0RkI4RDVDOUE1QgorOjEwMDc4MDAwQkY3MzE3RDNFMzk2RUZBNTk5RkMzQTM2OTEwNEZDMUU4QworOjEwMDc5MDAwOERCRjFDMzQ4OUVEN0YyNDY0OUUxMzcyM0FCODMzNjg5MAorOjEwMDdBMDAwRDY5Mzc0NDgxRTJGRURFNjc5RjlCQTQ5Mjc1Q0FFNjhGNgorOjEwMDdCMDAwODE1RTQzQUUwMEQ4MUVBRUJGMjAzQTg1OEQ1NzlBODgyMQorOjEwMDdDMDAwRTJBN0Y3NTlGRDI5OTVFNDJGQUYwM0Q0M0Y3NTg4RjRDQworOjEwMDdEMDAwODU3NkE2MTQ2MzdBNEFBRDdCRUFGMDM4RTA1N0E1Qzg1RgorOjEwMDdFMDAwQ0ZBRDdCOEFFNERENjAxREQyOThDRkRDRTMxRkFDMUI2QworOjEwMDdGMDAwREUyOEFCOTcwQ0Q2OTM1OERGMjlGNEU0RjY3MERENTM2RQorOjEwMDgwMDAwRURDNEZGRjEzQkFDRkM1MTJERThGMDJGNEQ3RjNEN0E1QworOjEwMDgxMDAwQkI4NkY3MEM5MjUxOTVFQ0FBOEQwRTdBRjhFN0IwOUI0NworOjEwMDgyMDAwRjA1RkE1MjVFRTQ3N0E1ODc0RjM4MDhBNTc1N0JDQzUwOAorOjEwMDgzMDAwOTExMEYyQzM4NEU4MDc0OUZDQ0VERTg0NzkyMjREQjVERAorOjEwMDg0MDAwOTQ3RkNGQTEyN0JBOTZGOEIyMDdGNzA1Nzg1QTAyQzY2NworOjEwMDg1MDAwMjc4N0Y2Mjc5NTc5N0ZDQTUyQjQzRjdFOURCRjk3QjEwRgorOjEwMDg2MDAwNEVGRTM2OEZCRjA1Q0EzODNGNkIxRTFFREZEQjI3RTQwNgorOjEwMDg3MDAwQzk1MzYxNDU5NDVDQkU2NjQ1REJDOTlGRjJENkM5MTQ3NQorOjEwMDg4MDAwM0ZDRUFBOTM2RDdBODM3RTI5OEZEQUFCMzY3QUVCQ0Y4RgorOjEwMDg5MDAwNDkxQzBDNUJFNTIzQTRFMzY1NkMxREZFMjk5MTFDM0NGRgorOjEwMDhBMDAwN0ZBOTJFNTNEN0EyQkZGRDdENjFGRkIxN0RCQTk3RTQyQQorOjEwMDhCMDAwNDU0NUM0OUZFMEZCRjY0Q0M2N0QxMzc4MzlENUJFQkRENworOjEwMDhDMDAwRDg5QTg4RDVCQTQ2REVCNzRCMkZFM0Y5RjRDRUU3QkYwNgorOjEwMDhEMDAwMTM3ODM4REVGODlGREY0Mzc2NTlFOTFEQTBFRjdFNzc2NQorOjEwMDhFMDAwOTVCNjUxMUNENjhDQkI3QUY2NTZBNzBCRjVBMTdDQzBFOQorOjEwMDhGMDAwNzU4MUYwM0MyQzlERjNCRUY4QzlERjZCNzQ0RkU0MjM4NworOjEwMDkwMDAwNEZDNkYzMjQyNThCRTNGOTQ4NkIyM0Y1NjMxQjRDQkZEQgorOjEwMDkxMDAwRDM3MjA1MkU4NUU3QjFEOUVFRjE5OUY3MTEyRTA3NEU2NgorOjEwMDkyMDAwMEM0QkUyQ0JCRTgyNzI2ODc5QTM0MkRGNzdCODAyRUM0RgorOjEwMDkzMDAwRjkxNDk3OUI3OTVGMkQ2NjdFMUNDRkZCNEE0MEY2MDIyNworOjEwMDk0MDAwNjRDMzY1NDlDN0VGNEM0MDZDMDFERUI3MUZGNkZCMTM2QgorOjEwMDk1MDAwRTI3Q0VCRUI4RUJDODlBRjM2MkU4QkQ1OEE3NkVGRDM1QgorOjEwMDk2MDAwRkY1Mzg0QkYyNTNBOTdCRjRCNjJGQzNCM0Y5N0M0MkY5MAorOjEwMDk3MDAwOEJENTVBQ0VBMzVGRkE1NEM5OTgzNzE5MUZDNDQ3M0M4OAorOjEwMDk4MDAwNTYzQjY5MzgzRTk2QzcyNUI3QTY5RjFBMkZBNzhCODc3NworOjEwMDk5MDAwNjU2QUM1ODIzQzdEMzgxRTlDRUI2NzE4REI4QTc4RkU1MQorOjEwMDlBMDAwM0FDMzMzREE5RDIzRTE4M0I1QTNGRDc4RTkzMjg1N0UyRQorOjEwMDlCMDAwNzc2NjgxNTJFRkMyNzM5MDJCMUIyNDNBNjM2MkY4MEQ2NQorOjEwMDlDMDAwOEJCQ0I4RkFGMzJERjAzQUYxRThDNEQ3OTU0RjAwRERBRgorOjEwMDlEMDAwMUJCOEYyQkIyMThBQjdCRDYwRTIyNzdEMkU5RDVGOThEMAorOjEwMDlFMDAwRTcyNzk2NzUxRUUzRjk1QjFBQUQ3M0YxRUM4QTVGRTBCOQorOjEwMDlGMDAwRjcxNTEyRUQ0Q0RBRjJGNURBQ0UwMTk3MzNDQ0UzQkQwMAorOjEwMEEwMDAwMDVCNkVFNjMyM0VDQkJFRDNDRDAwOTlGMTM3RTlGRDA2RgorOjEwMEExMDAwMkJDRTczMzE1MEQzRTVBODA3Q0ZDRjEyRTc2M0QzMjA5NQorOjEwMEEyMDAwMjZDRUM3QjIyODFEQjczNEIzQkM3NTdFOTdDRUE0QjMwQgorOjEwMEEzMDAwMkI1QTFBMDZFN0M1RjEyNTQ4MENENjM1QkNBRkY1QjREQworOjEwMEE0MDAwQjJGNTEyRjZGNzM1NTFGRUZCODdGMUNCNzIzQkYwRERDNAorOjEwMEE1MDAwMjIzMDdGOTdDOEEwRjNBNjJCMDRGRTFBOThDNzg3QkY0MQorOjEwMEE2MDAwOTk3NjJFMTM0RTc4QUVCN0M4RjBFOTQxQ0IzQURGRUI1QQorOjEwMEE3MDAwOTZFQUM0M0RBQUFDMjU1M0IxNUY3MkJGMzI2RDM4QkM1MworOjEwMEE4MDAwNkJBMkZDNzcwRTE5MUQ3RTYwQTU0M0RGMjRGRUZENTk4NQorOjEwMEE5MDAwMjc1RTRDN0MzNTBERTE2NURBNjdDMUNCRUY1MTcxRTYxRAorOjEwMEFBMDAwRDE3OTBERDlCOTAzOTI5N0VFQzM5QkU3MzhFQ0FGNDlFMgorOjEwMEFCMDAwMzcxMzlEQjc2NDE1MEIzQjgwQUZEQkZDQ0UxNzQwMzM3QgorOjEwMEFDMDAwRDlGNzRCQzU3REFDQTMyRTY4N0MzOEM4Q0Y3NTJBMkRDRAorOjEwMEFEMDAwNzJFQjNCMzlENUI3NjQ1OUZDNjNGMzVDQzdGQ0FFOTQ0OQorOjEwMEFFMDAwNDlDRjk3N0I4MzY5ODVEM0ExRURCQjUxNDM3OTRDMDlFRAorOjEwMEFGMDAwQ0E2MzUyQjI1NkU4ODg4RjJFN0MzNTg3RUM5RUFFMkNBNgorOjEwMEIwMDAwRjQ5RjAzRkNCQ0NBRjdGNEEzNUQ5N0U4NDNGQkI3RTk4NQorOjEwMEIxMDAwQUFDN0JBNjdCMEJBRkZFQkJGNEVEMkEwN0EwRUUxMkREQQorOjEwMEIyMDAwMjRGNkFENUFFQzlCMDk5RkJGOUMzRkI3RUMxRjhGOUZFQgorOjEwMEIzMDAwOTU4OUY4OTlEOEM3OTFGNDg0Qjk4RkU2QkVBMTFEODUyRgorOjEwMEI0MDAwRjRFQjJCNTNGRjlDRTlGN0ZBRTA1MEQ1MDBGMjY5MjI1MQorOjEwMEI1MDAwQUE1MjBFNUQ0MjdBQUQ4M0JFQzcwNUZBNEUzQzdGQkZGNgorOjEwMEI2MDAwQTJDNTY1RkI5REE2MDRERUQzQzdGNjFCN0RDMjJGODlGNworOjEwMEI3MDAwNTFGRkU1RjlCQzNGOTQ3MUJCNzE5MEVFOTNBQ0JGMjU3QQorOjEwMEI4MDAwMEYwOEJDRTEzMUI4NkZGREFDMkZFNjg5QjFGMUM2QTAwQQorOjEwMEI5MDAwQkU4NzJFQ0IzQzI1QzNFNzFENzEzQzQ3M0Y2NUYwREM4QgorOjEwMEJBMDAwMjQxNjhCNTlFNEY1QkUyQzZFREZCRTE3QURFQTk1MzNFMworOjEwMEJCMDAwQzQ1RkNDNzJCOTM3Qjc0OEI1RTQ4NzFEQ0JGNzM2NjY0QQorOjEwMEJDMDAwRkE3RUE5MzlERUUwRjdFNTA2RURDNDgxQTcwRUNEMUI1QworOjEwMEJEMDAwQjIxMzM3NzdCQzY1QjcxMzkzNkY3RDIxM0JCMUZGQjY3NgorOjEwMEJFMDAwQjc5RTZBNjdGREZGRjQzQjBGRTlBQkY3RUFGQ0I0MEY3MQorOjEwMEJGMDAwQjkyREU3QzE3RkUwN0Q1QjE1N0YwMzkwRUM3QkZBM0U2QQorOjEwMEMwMDAwOEVCN0E1OTBENjIzQTkwQzczRjgzQjYyN0E0QzQyN0MzMAorOjEwMEMxMDAwQkY4OTFGRjNDNUI4OEEwRUU5MTAwMzJFNTc4RDQ5ODg4NgorOjEwMEMyMDAwQUZEQjg1M0ZDQUU4NkM4QUY1M0JBRTZGNjY3MTNCQzNBQworOjEwMEMzMDAwOUNDN0UzODUyNERFMzMzNkM3NjU3NEQwNDY3OUE1RjVCNQorOjEwMEM0MDAwNDA3QUM0M0M4NzM1RjlEOTFDRTc0NDk2REQwRjNFMEQ0OAorOjEwMEM1MDAwRkUzRDkxODk3RjlGOTU5QkZGRkQxNkI0NUY5RjUxMjhCNAorOjEwMEM2MDAwMUZGNDZGQTMzN0QxRjM0QjVCQUVBNEYyQjI5NjZCRjlDRQorOjEwMEM3MDAwQkM2MkJFNkY0QTg5OTMzODRFNUZFM0FGRkZGNjQ2NDZDQgorOjEwMEM4MDAwQUZBQkY3N0FFODVFRDlDQTZGQkU3OTJCRjJBN0I3ODUwQQorOjEwMEM5MDAwRUQzQjZCRkZCRkNDOEUzODM4MDA4MDAwMDAwMDAwMDBCOQorOjEwMENBMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFNTdEMEI3QzU0QzU4NQorOjEwMENCMDAwQjlGODlDM0RGQjRBQjJCQkQ5RERCQzk2QkMzOEUxMTkwMgorOjEwMENDMDAwMjVDNDREODAxMDEwRUI4NjU3NTEwOTA0OUY1MTAyNkNDQQorOjEwMENEMDAwMDg4NDAwODEwNEE0QkFBRDE0MzYyNDYwNDBBQ0YxNTVGOAorOjEwMENFMDAwRjFBQTc0NTFBQ0I2NTdCRDQxNjlFNUI2RDE2RTQ0MkQzOQorOjEwMENGMDAwNTQwQUIxQkVEMDBBMDZBNTE2MTU0REU0NTE1NkFCRTUwRgorOjEwMEQwMDAwQ0VGN0NENEM3MkNFQzkyRTg0REFGQkZCRjdGRUZFRjE5NgorOjEwMEQxMDAwRDc3RUNDOTkzOUYzRjhERUYzQ0QzNzY3NkY1QzU4NzUyMQorOjEwMEQyMDAwRkY5ODY0NDJDQzQzMEQ0RTg5MTBEMjlDNDVDQTVCNkQzRQorOjEwMEQzMDAwQjREQzIwOTUwMURDQTg5OEE3RURBNEIwQ0U1MTMyRDI0NgorOjEwMEQ0MDAwMzk4NjkwQjNGMDc3Mzk5NDI3NjM5OTc4MUMwNjUyNDQxQQorOjEwMEQ1MDAwQzg0QTJCRkRCNzQyQzg5OTQzQjc3QkU2RDNGRUUyNkQ4NAorOjEwMEQ2MDAwMzYyRjdENDJGQkM5QjlDQjQwQ0I2NEFGNEMxRUE3NDBBOAorOjEwMEQ3MDAwNEUyMEYzQ0FGMjI4QjQzMDM4RDA2OTI0MjQwNUEwMDFFQgorOjEwMEQ4MDAwNjExQTQwREFBRjM1NDI2NzkzMDRFREJDREU3QTNBQkVCMQorOjEwMEQ5MDAwRDUxODI0NEU4MDExMjMzRTM3NEI3NDdFNzlCREYzMTE1NAorOjEwMERBMDAwNTBGNDY3OERDODg0OEM4MkYxRjRFRjlCRjEzOUFDMEI2MQorOjEwMERCMDAwREU5NzkzRDgzQ0M0RkJCOUYwRkUxODgwNjIxRTA5NkMyNAorOjEwMERDMDAwMUU0OUZBN0UxQ0VDQjk0Q0VBMDE0RkZBNzkzNDI1NEVFMworOjEwMEREMDAwQ0E3M0E2MDA5RTdDMjMwMTEyRDI2OTJBQjMxMzMyRDdBQworOjEwMERFMDAwRjY4NzgzNTIzRTg1NTY1QjU4QTY5MDA0NENDNzNCNzNFQQorOjEwMERGMDAwMDlGRTlEMUQwNEZGNUZFMUZDNzgwNDIxMTJFOTk0Q0VGOQorOjEwMEUwMDAwRDJBMTY3N0MyMzg1MDc1MkZDQzU5NUM4QTE3NTM5MTQwQQorOjEwMEUxMDAwNEFDRUQyRDFBMzY5QjMxMjkzMTdGMEQ5MzEyNEQ5M0U2NworOjEwMEUyMDAwNDgzNUZFRTU0MDQ1M0FFRkQ3OEQ0RTNCQ0NCMzZDOEE1MgorOjEwMEUzMDAwNUMxNkNBQzNFRTUzQUU4NTdFQTY1NDE1NkQ2MkMzNTlDNworOjEwMEU0MDAwNDkyQTIxRjNEOEJGQzlFQkNBRjZFNjQxQjQzRTE4MzRBQgorOjEwMEU1MDAwNzk4NzUyM0FDRUIzMDY0MzMwQkY3OUM0MThFQ0I0NjJGNgorOjEwMEU2MDAwMTNFOUFDODQ1MDMxMTZGMUY3RTg3Q0U3NEQ5NjdENzFCQgorOjEwMEU3MDAwMEU0RDNCNzI5NkNFOTMzNDkxOTc4N0QwRkVFNzRBN0MxNQorOjEwMEU4MDAwODAyMDJERDNGNzBFRjNFMjA3OTM0RjVFMDdDQkU4MjRDMworOjEwMEU5MDAwNEVGMzIwREE3RTZFNjdFNTc0OTI4RjU1MzZFMEE3ODVCMworOjEwMEVBMDAwQkNEREJDODBFOTY4NEZCRkY0N0Y5NTQxNkQ3OTdFNzFGMAorOjEwMEVCMDAwQzFBQjk0MEMxNDJGQTE2OUEzODFDRjJFMzIyMDlGNTU3MgorOjEwMEVDMDAwMzU2QkRCMkQ3Q0ZGOEE0Rjg4MDNGQTM1MUVFREMxMzc2OQorOjEwMEVEMDAwQ0M5M0RDQ0RGODY1NEFBMzUzQTE3ODFBRUQ1NEIwM0MwRAorOjEwMEVFMDAwNjNGMjQ3OTMwOTJEQ0YyNEU0M0FFODc3RTY2NEQ5MTlGMQorOjEwMEVGMDAwQTZBRDM3MDcwQ0M0NDcyN0JFREYyNzg3MjRCQUI2RkQ0NworOjEwMEYwMDAwQjk5RDdCMkYwN0JDMTU5Qjk0Qzc2MUFEQjlFNENFNkIyRgorOjEwMEYxMDAwOTJBMTdFOTQxM0YwNUMwNkNGMDY2MDdCNDJBMDlEQzczMQorOjEwMEYyMDAwMUExQTRBOUY3NUY4M0VCMjU1QTlGODZFN0ZGMTQ3MTcxNQorOjEwMEYzMDAwRjkyOUJEQjYxQTQ4NEQzNDdFMjJBNDAxRTlGQUYyOEY5MAorOjEwMEY0MDAwRTJCMTlGMEZFRTkzNDIxNjNBRkYyOUYyMzc3RjFDNEIxNgorOjEwMEY1MDAwRTc1M0Y1NjM5M0Q3QTJFMEIyMEM0MEQ3RTk1RTI2OEY0MgorOjEwMEY2MDAwODRGODZDNTMyODNFRTcxMjU2RkU4ODk0MTU4NUU5RjhGQworOjEwMEY3MDAwNTUwNTg3NEEyQ0I0OUZBQUY1MTJDQUE5QzAzRkM1RjdFOAorOjEwMEY4MDAwODc2QUJDRjlFQkNCMTJDMzBBRTI1REYzOUM3NjY2MDY3NgorOjEwMEY5MDAwN0VBNjc4RkUzMDA2OUUzRjU0RTMzOUYwRkVCQjIzNUYwOQorOjEwMEZBMDAwNTZCNUJCREI2OTRGMDYzRTI3ODVBNEYwMkM0NUNENjlCRAorOjEwMEZCMDAwMzIyMTcxMTRFOUJCNkUwMUNGQUMzRDM4RjJFNUExODQ1QQorOjEwMEZDMDAwREM0NzdDNUI1MEVGOTA0RTYzRDk0ODRBMjcyM0YxNDVCQworOjEwMEZEMDAwRDMwM0E1MEUyNjA3NTNFNEUzNDg5RjEzQzVCMjAyRjhENgorOjEwMEZFMDAwREExRkY4RDQ0NjM5OENFQ0ZGNDY5RTA2NzgyNjNFNEEzNgorOjEwMEZGMDAwRUM3MUJERUYzREUzMzRFMzdCNUJDREM0MDc3OERFOUE1MworOjEwMTAwMDAwNkUwRDM1RDBBRURBN0Y3NDcxNUEyN0QyNDc3OTYwMDJGRgorOjEwMTAxMDAwRDBGMTBGMjZGMkI4MTI3QkJFRjY4MDRDODY1MEM2MkM1QgorOjEwMTAyMDAwMEQ0ODA4MDVGRDA2MDZFMjg4NzE5NDRBNUY5MUU4RjNEMQorOjEwMTAzMDAwRkYxREM4MzE5RDVBQ0E2QTYyNTBFOEI4QUUyMEYxODVEQQorOjEwMTA0MDAwQTJGMDg1NjhCN0NDREEzREQ1NDhCMDdERDg0NUU3Qjc4MgorOjEwMTA1MDAwNUMzMTg0MjRCQURFMDI4OUYxQjNENTU0RUZDQkEwNERDNAorOjEwMTA2MDAwOEQ2REIzODIxOTA0RTYyMUUzM0MxNDNBM0YyMzlENUY2MgorOjEwMTA3MDAwNEUyMDAxQ0I4MzAyNDkwODA3MDc1QzA4ODcwNDMyQjA4MQorOjEwMTA4MDAwN0U2ODYwMzBDMjYxODExQzdDM0UzQzMwMDJDQkI5ODFGRAorOjEwMTA5MDAwNTEwODJGMEExNDIwQkMzODcwMjlDMjExODE0OUQ4MkU1QQorOjEwMTBBMDAwMkY1MDgyNzA2NEUwMkE3QzlFMUZCODA2RTEyNTgxNTk4QQorOjEwMTBCMDAwMDhCRDgxRDk1ODVGMTBBODQyNTgxOEE4QzRFN0EzMDJGOAorOjEwMTBDMDAwNEJCMTNDM0E3MDMzOTZDNzA0NTYyMDJDMEFEQzg2NzAyQworOjEwMTBEMDAwNkNBMDExNjE3MUEwMDFEQjhEMEJEQzgxRTVGMTgxN0JERQorOjEwMTBFMDAwMTE1RTFBQjgxQkUxODRDMDQzNTgwRjBBMDhGMDEwQ0ZGNAorOjEwMTBGMDAwRTVGMTBFNjU4MTkzNEEwQTcwQjgwMjdDMUM0QkVFRkU0NgorOjEwMTEwMDAwQzFFRDUyQjVEM0Y3MzFGMDlENjg2NzM2MTBCRkJBQkQ1NworOjEwMTExMDAwNjhGNzM1QjcxQjJFQTA2Qjk0RkU0RTczRkRGQzg1Rjc2OAorOjEwMTEyMDAwQzM5RjBFMjdCRDc0NkJGNjM0OTQxMUI5OTc1RTk2OUREQworOjEwMTEzMDAwMjVFMTBDRkFDRkU1QkI2NjExRDAwQjI0Mzc1OUMzQTdDNAorOjEwMTE0MDAwN0RGNTAzNUJERjVGQjhGRURBNkFFQ0YwQzlDMEJGRjU3RQorOjEwMTE1MDAwQzQxQkE0OEY0QTQ3QkYyRTQxM0ZEQjE0RTNCNDUwMTQ5NQorOjEwMTE2MDAwN0VDQjc3OTk3MDVFQTM5RDdFOTM4QkMyODQ5Q0EzMkZDOAorOjEwMTE3MDAwODMzRTk5MTk3NEZFNzEyMkYwNEI1RUYyMUYyNkQyRkU1NworOjEwMTE4MDAwMDYzNjE5NjAwNEFBNEE5Q0VEMTNBOURFNTEyNjEzRDQzMQorOjEwMTE5MDAwOEJEQjA4NDE3OURBMTZBRkI1QTdDMzVDMEMxRjg0QjRBQQorOjEwMTFBMDAwRUUxOTg0RjIzNEE0OTBEOTlGQ0UyQjQwQkVDQzNGMUFDNgorOjEwMTFCMDAwNDQzNkU1ODBCQzg1MjUyM0VEMkZCODkyOTBDNzg1Q0RCOAorOjEwMTFDMDAwODBGNjFCRTZGRjFDRUE3QkZCMzMzMzdGQTE5OUJDNjRFRQorOjEwMTFEMDAwQTUxM0M5Njk1MTI2QzY1MTM4Nzg4QkVGQTUzOEZBQ0FDQworOjEwMTFFMDAwRDA5MDdGNjIzQzJEMEY3RjMyRjgxMkMwOEI1QTQzMTM5MAorOjEwMTFGMDAwMTMyODFDQjEyQkZDMTIzNUE3NjQ2NEI4NzNBMjhEOTYxQQorOjEwMTIwMDAwMkZEOTQzNzYwMzVBMEIzQTk0NDk3NjVBMUU3NUQwQjdCNAorOjEwMTIxMDAwOUJCMjAxMTlEM0U5OUZFNDUwNjAzRUExNDYwNzlEQ0ZFMAorOjEwMTIyMDAwRDZDM0M0REI0MENCQzVDNzVCRTQ0NEEyQTJCRjk5RjhEOAorOjEwMTIzMDAwNzdBOEU4NjIxRkREMzEzOTg5RkUzMzczOTVCMzQwODZBNAorOjEwMTI0MDAwRjc4RDlENzFBRUJDQkVGNEQ5MDZFQjg2NzU1MjNCRjJBQworOjEwMTI1MDAwMzg1RDU3QTYyRjJDMzk1NTdDNzJCNTRCMTI3NDI4MDI3NQorOjEwMTI2MDAwM0FDQzU4REQ2RDg0NzU2RTZCNzJEQjkxN0VGMUNFMTJENworOjEwMTI3MDAwMThCMjdCMEE3MTNFQUEwMDFGMUIxMTRGRTZGNTgzNTA3RQorOjEwMTI4MDAwREUwNURGNTFGQzVFMzRDQkFFQzY5QjI0RjQ1QTRENkJCOQorOjEwMTI5MDAwNUU2Q0ZDNUVGRDZGODZERjIzQzA2RDYzNjJFM0Q3MEE4MAorOjEwMTJBMDAwQkMzMkVFRkM3MjVDRTVFQTkxRTM3OUFFMzFCMURCMzUzQworOjEwMTJCMDAwQkI5ODNFRDVFMzc5OUI4MUVDQTFCNjhBOEU0QkY5OTQxRAorOjEwMTJDMDAwQzkxNTA5RDJBNjhEOUNCRkNGODdENzFGQkI5ODVERjlFMgorOjEwMTJEMDAwNzdDMUVCNEQyRUE2Mjc2MkUxOTUyOEM5QTgyNzI5QkYyMworOjEwMTJFMDAwNUU0NDA2QzdENjM3RDA1RjM0RkI3NThGQUI4RjlFMzMxNQorOjEwMTJGMDAwODNCRkQ4RUNBNDdBNkU3MDZDM0QzN0Q3QzVFODFENTMxOAorOjEwMTMwMDAwN0Y3MTNENjNFNjdBNUM4Q0Y3MzM0RUI3MDM4RUIyNDc0QworOjEwMTMxMDAwODBCRUI2RjU4NjIwQzg1OTA5QjFBMzVDMTA0RjMyRTdFQworOjEwMTMyMDAwMTM2NzNDRjBDOTc0RDk1OTAyRkE4NjBDMjdFODQ3Mjc5RAorOjEwMTMzMDAwRTQ4NTgyQjA0RjE5MTg1NDBBNjU2ODA2NEExOUYwOTg3NgorOjEwMTM0MDAwOUUxQkRBNDRCQkNFQTE3RTg2OTFEMjlGNzYxNTA2Njg5RAorOjEwMTM1MDAwNTU5Qzg2Rjk3NEREODk0MkRFOUM5NTFFQjVCQzA5N0JERgorOjEwMTM2MDAwREYyQjhGODIyRkRDREIzNkU1MzA3RTlENDVGRDk3QzM3QQorOjEwMTM3MDAwN0NERUJERkQ0OEQ4NkVDMzBGRDNCNzZENTJFOUMxNkQ5OQorOjEwMTM4MDAwMUUwRjk2NDVGQjU4RkNGQjhERTBERkE2NzVDNDBGRjJERgorOjEwMTM5MDAwMzEyMUJBREY3MEQwMjU3M0JFRURGNjAxOUYwN0JGNDczQworOjEwMTNBMDAwOUNFMENGQjg5QTNFNDRGREU0QTJGQTQ5NDJGREM0QzY4RgorOjEwMTNCMDAwQ0YwQ0M0RkYzQzQ4Q0JFRkI4NTJCMTdGQzBFM0Y1RjY4OQorOjEwMTNDMDAwRkY3N0ZDRkM5NDhCMzA3OTlBRTA2Qzk3NjlGRDQwNkE1QQorOjEwMTNEMDAwODcxNDkwRDMwOTc0RUVBMzAxNUY2NkE0QkI0MjE4MUQ2NQorOjEwMTNFMDAwOTUwOTI0MDQ3RTJGQzU1QkQ4MDBGQUQ3NjAwRjgxOUQzNAorOjEwMTNGMDAwMzE5QjVCN0MyMENGQzRFQ0MyRjUxRjcwRjgzRjc2OUQxQgorOjEwMTQwMDAwNDNERjM4MTM5NDAyMjBFQTk5QkJGRjNFQ0Q0NkY5NkZDMworOjEwMTQxMDAwNDM4RTMzMUVDQUE3Njg3OUIzODc4RUVCRUUyNEJDRENGQgorOjEwMTQyMDAwNkM0M0Y5QTE3RkU5NDhDNTMwREQxQjgwN0QxNDY1OUZDMQorOjEwMTQzMDAwMTVEQTBGRUEyOTA3QTFCQzE1N0M5MkYxQjQ3RkQ3RDc0MgorOjEwMTQ0MDAwN0I5QTI4NjJDQTVEQkVEMzMwMUZDQUQ3NjcwMEZBODY2RQorOjEwMTQ1MDAwRDMwREVBRTA1RTdFM0U5RjNGMjBFNEIzNTc5RTlDMDU5RAorOjEwMTQ2MDAwNDI5RTJBRjM1MDFGNEFFRTk0REVGRTYyRjkzN0JGRTUzMgorOjEwMTQ3MDAwRkFEM0VENjYzMDk2N0YyM0Y4RkU4MkZEMUIzRTVGRTJENQorOjEwMTQ4MDAwNTZDRUU5QkZDNEVEN0Q2M0NCNzY1QTVFRTk5MTk1QTM1NAorOjEwMTQ5MDAwRDRCRkIzQTdCRkRENjFBNDY1MkJGNTM3M0ZBMjY1ODMzOQorOjEwMTRBMDAwQjVDMzA4RUQ0QUE5ODREQTI4QkU3REQ0Qzk4M0ZEODc3NworOjEwMTRCMDAwNzUzNDJCQzMxRkVDM0Y0RUI0NDhEMzk4QkU1NjEyQUZDMQorOjEwMTRDMDAwMUQ3OTJFM0M4NjcwM0QyQjNENjYxQzJGNkVFODkwNDRBNgorOjEwMTREMDAwOTAyQjA3RTcyQjYyOTQ0MjYwQzcxREM1NEVFMzdDRUM1RQorOjEwMTRFMDAwQUY5MzVDNERGQkJCQzRDREVDODI5MDZCRDA1QkNGRTY4MQorOjEwMTRGMDAwODE1RTcyMUI2MUJGNkVCMTkyQTBEREREREIzRjk0MTM5NAorOjEwMTUwMDAwMEI3QkY1MTNFMUZCQjg5QkY5OUVBOTY1OUQzNzcxMDgyQworOjEwMTUxMDAwQzhFOTdFMTY0NzY5NTlDM0U0QjIzNDkzODRENjgxOUVFNAorOjEwMTUyMDAwRjAxMUM1NDlEQkM3MTFGMTQ3MDU5Nzk2NERCQzM0RkQ1NQorOjEwMTUzMDAwNkI4OUY4RThGQ0Y3N0QyRDIzOTQ4NjkwQjA5REVFRjczQgorOjEwMTU0MDAwNEFCRDUyMThGNjgxNjY4MzM1MDRCNkI0MjRERDRBQ0MxMAorOjEwMTU1MDAwNTA3NjE4NDIxNjkwOEYwRjI1NUNBN0I5MzAyMTA0Q0EyNworOjEwMTU2MDAwNkY3MjdBNzE2MjI3NURDN0M5N0RCQjZERkUyOEY0QkZCQgorOjEwMTU3MDAwQzE1RkU5OUQzQzJBMzYxRTdCREFDRDc5QzUwOTc4N0NBRQorOjEwMTU4MDAwNDg2OTcyODIxRjE5RjQxODMxRUVCMDExOUFBQUY0RkE2MAorOjEwMTU5MDAwNUMzN0YzNDdBODNGNTQwRTdDM0E2MzQxNzc5MzE5RThEMAorOjEwMTVBMDAwOUQ5MzhDRkUxMDE5RTI0NkJFMURFMEQ5QjlCMTA0NENFMgorOjEwMTVCMDAwNTYyREYzNEZEMzQ5QTg0MUVENTcwOUZFRUE3NEZCRTdENgorOjEwMTVDMDAwQkJFOTNDMUVFMjc2ODQ4QTY1QzczMDg4NTc1RDk0RUM5RgorOjEwMTVEMDAwMDZCRkI0QTQyRUJEMERGQ0REMDdENzEyRUYwMjEzRUEzRgorOjEwMTVFMDAwODNFQjYwNUM1RjUyNkIwMUYwRUY0M0RFOURCRkI4MEI5NQorOjEwMTVGMDAwRjA2OUExRkI2MkQwRTNBMzBFRDkxNDRBQUY4QTMxQkJENAorOjEwMTYwMDAwNTM2MDNEN0ZENENENUZDMDhBQzAxQUM0OEI3RTFGQkM5RgorOjEwMTYxMDAwRDJDREY3QzFGOTI0MUZGNkMxMjdCREQ3MjQ4NjkxQjdEMworOjEwMTYyMDAwOTJBMkNBNzc0NUUwMzZFQzQ3RUM4N0RGMzc4NUIzOUM1QQorOjEwMTYzMDAwNTFFNTUwOEI2RjMxN0U4NUM0RjZCNUM0MjQzMUZEQzdBQQorOjEwMTY0MDAwRUQyOEQ1MkY0REE4MDc0MjA0RURBNkNGMjIzRDBBRjY3RQorOjEwMTY1MDAwRTZBNDc3OTQxN0VDNzYyQzdEMjNFNjQzRjEzOEI0Q0NERQorOjEwMTY2MDAwMUVBNTVFMjI2NUQxRjRDNDU2MzdGMzBGMkE0Qzc0QkYxMQorOjEwMTY3MDAwNDBFQkE1MTU2M0VBNjE1RTE1NzY5QjA0N0MyN0RBNkQ2NQorOjEwMTY4MDAwRTJFRDA0M0Y4Qjc4OTU5Q0Y4Q0QxOEEwM0ZDNDA3QTNFQQorOjEwMTY5MDAwQUQ3RjFFMzE5RTUyQzdBMzM2ODFBQ0E1MzA3Qzc5QTNBNQorOjEwMTZBMDAwRjgyQkIxRjA3NUQwRDQ1MjBBRjMzQUI4NTAyNjBEQjRFNQorOjEwMTZCMDAwOUY5M0ZFQjE2OTI0Q0FGQjAyQkUwNzdDNDNFOUIyMkFBQworOjEwMTZDMDAwODk4REQ3NDNDRjIxRDFGMTc3NzA2RDhENzdCMkE5OTdFRQorOjEwMTZEMDAwOUU3REVBMkJFM0NBQzE3RTk3MDMxRTU1RTMxRTcwMzMzRAorOjEwMTZFMDAwM0I3RjhDNDM2MkYxMkI0RTVBNkY5RTdGQkY5MzhDMDRERAorOjEwMTZGMDAwM0Q3NTZBNENEMDBFNzFCMUVFNUYzNTAwQkQ3RjZDQzc5MQorOjEwMTcwMDAwNzg0NTc5RTVFOTMxMEQyMzU1RjgyQzI2NjgyNEU3RUQ3NQorOjEwMTcxMDAwN0VEMEE5RDBFN0U1NDM5QjUyODJCNkQ4NzgzQzA2NzhDNAorOjEwMTcyMDAwQTQ3OEJBMDMxRThDQzM3OENDMUZEQzE3MTA4RjIxNzlFNAorOjEwMTczMDAwNkVFNDM3QjIzQkNFMUI4Njc4RTQ1QkIyMTdGQzA2MTgyQQorOjEwMTc0MDAwRDc4RkZBOTNDNTkzNTczOUQ5QkNFMjc0N0U1RTc5NjAxRQorOjEwMTc1MDAwQjk0NkJGMjQ0NDI0MTI0QTUyOTU4REFEMTg5RjREODgzNgorOjEwMTc2MDAwMThGMUI5NUVERTlFRDJDOTlCQzA3RjJDN0EwQUZDRUJEMQorOjEwMTc3MDAwOUZGRjlFRjNFNUMxQ0FDNTBBQzQwRENERjFEMUZERTBCRQorOjEwMTc4MDAwRUMyNDQ5QzM1NzZGQUZGNTZCQzY3QkU3NUI1OUIzNUY3QQorOjEwMTc5MDAwMTZGMEVGQkNGRjkzRkU3MTY5MTBBRjJBMzcwNzg3RjY4QQorOjEwMTdBMDAwNDdDRTA1N0VERUZFRTYwMTI3RjQxQkY3OTUyNUFBRkM1MQorOjEwMTdCMDAwOURFMkY2ODlEQUQzRTZFQjE0OTUzREJENTE2RTAyQkM4RAorOjEwMTdDMDAwMjcxOEI5N0VEM0M5OUQwRkVDMkFDNUU3RTU2MDU3RTkxNAorOjEwMTdEMDAwMTQxM0NFNjM1N0U3OTE2MDNCQzQ5MUY1RTMwQjdCQUFFQQorOjEwMTdFMDAwRTcyRjYxNUZGNTc0MTM3Q0UwNDlBMkY0NEJFOEE1OUZGNQorOjEwMTdGMDAwODgxQkM2OTIyRjIxNTc5RDVDRkVGNUY4RDdDMzFCQ0NFMgorOjEwMTgwMDAwNUFCRjQ3QzBDRkI5OUM5REY0Qzc5MTIwRDU4RjM3OTc1OQorOjEwMTgxMDAwQzgyMTIyMjE3RkEwN0QzQzc4QkY4NEZFNjZCOEQyODI5OQorOjEwMTgyMDAwNzZCOUFBMzIwRUUzQjM1NTA1MzJENjU3REQyOUEzRkRBQQorOjEwMTgzMDAwMEM1M0ZENTA0QkU3RjM0N0FFMjdGNEYxRDkxMjIyNzk1MAorOjEwMTg0MDAwMjdBQkQ2M0Q2Mzc0OUNBNjdDRTNDMjdCRkZCODE2RTI0RgorOjEwMTg1MDAwQ0JDNTI2MDVDNkRCQUZCMDc4NzNEMDI3QTNGRjRBRkIwNAorOjEwMTg2MDAwRjA4NjIxM0U3RERGNjU1RUIwNjc4MjFGRjZGQjY0OTRFMworOjEwMTg3MDAwQjdFMDlCQjIxNzg2RURFMEYxRThGRENEMDUyMTE5RTg1MAorOjEwMTg4MDAwMkNGOTdCQzY1MTA2NDNGRjU1MEFEMEUxNURDRjE2MjdFMAorOjEwMTg5MDAwRThCQkI4NkYxRjI4MkJDM0ZEQTM1RjI5NDBCQjQ5OUQ0MAorOjEwMThBMDAwNTUzQUVGMzgyRUE3OTNEMjhCQUYwNzNCRkVDMTY2MTM5NAorOjEwMThCMDAwODFCOEQxMDdBQjRGQTIzQzc3QUVBREY3NEUxRURBMUIxNQorOjEwMThDMDAwNUYxNkYxNjE3RDlDNTkxRjVGRUUxMzU3RDZDNTkzMDVENgorOjEwMThEMDAwM0ZFOEY5QTQyMjA2N0YwODdEMTU4QjNGQTgxRUFCNEE3RQorOjEwMThFMDAwNEFCOTcwM0QyNkY0Qzc3QjdDOUQ5M0QyQjdEQ0Q5NDBDMgorOjEwMThGMDAwRjE5MEIwNDA0NjNDMDhCRTdDRjc5QkRCMUYwMTNEMUNDRAorOjEwMTkwMDAwNDdGOTYzMURGMEYzQjc0RkJDMDJGQjEwQjI1ODhBMUFCNworOjEwMTkxMDAwNDdERURFNjNGNzI4NUQ3MjdCRTk3MkEzN0Y3MTRGMTlBMgorOjEwMTkyMDAwQzQ3Rjc2Q0Q4QTlFMzJBQzVGNkY1NzYyRUJCNTczRUJBNgorOjEwMTkzMDAwQUQ2MTQ5MkM1RUExQjczQjdBNzlGODU3REI5REYyQ0FCRAorOjEwMTk0MDAwRkI3M0UxRkRGMkNBODUyMTgwMUJEM0FEMzVBMDdGRjU4NQorOjEwMTk1MDAwN0E0MjZGMjdDNDdDRjRGMzRDODhDODI0MzQ0QTNENkYyNAorOjEwMTk2MDAwMDVEQkY1REEwOTMzRDYwN0FDOEU3QzcwRDZDRkM0MzFFRgorOjEwMTk3MDAwMTgwNDI3MTBGQ0QyQzM3MUExNDYxQ0FGRkU5MjMyOUMwMgorOjEwMTk4MDAwN0ZGRDU4ODAwMUUyRUQwQ0MyRkEzQ0YxMTgzRjY4QzlCNgorOjEwMTk5MDAwNjRFREU1MkJFMjk5M0YzRURBOERFQjk0ODU0MzdFQ0FGOAorOjEwMTlBMDAwODVFNTQ2QkU4NjUxNkVGRjczNDkxNEJGOEQzRTQzMUNDQworOjEwMTlCMDAwOUMyQjRDQjIxQkY3NDJDOEE1NjVBMjgxNTg0ODJGOUVBQworOjEwMTlDMDAwODRGRjRFMjAzMjQwRDc4Qjc1MTJFQzNCMEJBQ0U2QzE0NgorOjEwMTlEMDAwRTg5RkZFMTZGQTIxNkJFOEJFOTBGMkZCQkU3REYyQ0VDOAorOjEwMTlFMDAwNkQ3NDg5RkJCQ0EzMTJBM0Y5RTcwMkNFRjFGQzEwRjVEQworOjEwMTlGMDAwQzJGNTgxMkE4NDg3N0VGMDRFMzZDOEVCMkQ5MkZGNTVDMgorOjEwMUEwMDAwOTA4MzhFRjJBQTNCRTE1Q0I4NkU5NzhDRTc0QTczNkVDNgorOjEwMUExMDAwNzk3NzE4REJBNzY5Q0YyNzY1ODczNTE3RTIyODhENTJCQworOjEwMUEyMDAwQkMxN0Y0ODhDMDYzQkJERDhDRkFBNUYxMTBEMzgzOEQ5RAorOjEwMUEzMDAwNDcyNDVFNjZGQjg4OTc3OUZEQzlGN0VEQjhDRjEwNzgyQgorOjEwMUE0MDAwQTdFQjc5MEJDNkY3RERFQkMyRjU4ODdEQzY3NzU4NEY1QgorOjEwMUE1MDAwMjdFMDI3RjY3QTMyOURBODJGODBBRkU0REVGOUNCNzYxNworOjEwMUE2MDAwMjNBRUFCOEJDNDdCNjFGRTAxMUUwRjIyRUZDN0ExREY0QgorOjEwMUE3MDAwMkNFODVCQzdGOTRGRDA3NzM5QTc2RjU3REJFOTlGNUMzQworOjEwMUE4MDAwNEFEQkI3RjhEQzc4Q0EyMDY3MTE1QzZGRDdGQjA5Qzg1RQorOjEwMUE5MDAwMUY2MkJEOTQwRjRFQzFGQzc2QjczMTNCRDE3MkQ4Q0VEOAorOjEwMUFBMDAwRjA2NTJGQ0E4NUY5MDlGRkRBOTlDNEZDNjRGREJBMkJFOQorOjEwMUFCMDAwQzQzRTlERkIxOUUwREY0MjlDNjI5MTdCRTJEOUE0MzFEOAorOjEwMUFDMDAwNTFEQTczQkY5NkUyRDk5MDRDRUI0QjlDRTQ1NDg4RjQwNgorOjEwMUFEMDAwRTI1OThDMjNDNjE1RUYzOTkyQjU3RTRDMDU4RjJCQkM4RAorOjEwMUFFMDAwNkYyMkU1MTA0Rjg0NzEwQjU1RjM1QkUzMkU3MTI0QTczMQorOjEwMUFGMDAwRjQxREY3M0JEMDcxNDBGMjM5Rjk1MjRCQzczQUEzQUQxMAorOjEwMUIwMDAwNTk0QTI0M0RGQjYyMENBNTI5N0RFNTVDMkY2NzUyNUI5OQorOjEwMUIxMDAwRkI1NzcwM0VBRjk3RkYzMzg2N0EyMkQxN0U2Rjk1RkREQgorOjEwMUIyMDAwMDdERDE0MzZGQTQ5QTc2NTcwNUY3OTM4OUYxRUExRjQ2NgorOjEwMUIzMDAwMkU0ODRFRTlBQjRGRkE0QkU3MDlDOTUyQ0YzRTg2RDM0OAorOjEwMUI0MDAwNzk0MjcyMTRCRDI3RjAzRERDNURGNjNEQTg4N0Y1Njc0QworOjEwMUI1MDAwMTRFMjNFQ0YwNzc0MDczRDYxMUU4NEUzMjE1Rjc2QkIyQworOjEwMUI2MDAwNDhFODUxREEyODg5Qzc1MUM0N0MyMDJFMTE0N0RGOUJGMQorOjEwMUI3MDAwOTk5QzgzRTM0QTQ2MTIzNEQxNzI1MkFFNTcwMkJEREZCQworOjEwMUI4MDAwMEYzRTk4RjkyRkU2ODM5QjkyQ0YyOUNGNjFGNDRCOTZCNQorOjEwMUI5MDAwNzE3QTJGMTM3OTE2M0JDRjlENjdEMTBGQkFENUMwM0ExMgorOjEwMUJBMDAwQ0UxOEJDRERGRTlDMEJBN0RCQ0RDOTdERTRGM0U2RTREQgorOjEwMUJCMDAwNzNDOEU3NzBCN0ZGMTYxOEFGRDE0QzRFQTExRjVFNUMxQgorOjEwMUJDMDAwRTk4MUYxMEUzODdDOUYyNEQyRTcyRjM2NzA3RDkyNDM1NQorOjEwMUJEMDAwRTk0NkVCNUY0OTk2NTE1RkRENDMyRTQ2M0RGQzNEODM3MAorOjEwMUJFMDAwMDFFN0RGNDVGNUVGQTMzOUQxRjgzRTY4NzREM0Y3Q0ZBRAorOjEwMUJGMDAwNUM0REYwM0M4RUFFNkYzREUzQ0JBMDA0Q0Y2RjlENDdCNAorOjEwMUMwMDAwMENGMERDQTMzNDEwQzMwNUU4QTE5NkJFRkNEOTcyMkVGQgorOjEwMUMxMDAwRkVBNDdBRTg1RUE4QTdGQ0I4MEFGOEQxQUEzODhERTczNgorOjEwMUMyMDAwRDI0MzNGNEJENkRBRjk3RUYwREZDRkQ0NzhGRTE3RjBGRgorOjEwMUMzMDAwREYyRkNGQ0Q3RjE3Q0M1N0NGNDVEMzA3ODI4RkM1QkVCRgorOjEwMUM0MDAwMjA1NkJFMTA5NTQ3OTJFMUVFM0IyRTIxNUUzQzBGMkJCNQorOjEwMUM1MDAwNzE1ODk5RERERDIxQTE5RDZEM0M1MkUwQzdCMkREOEE0RQorOjEwMUM2MDAwNEE0MUQ4RTExMzNCNTlCRDNDMzFCQTNGRDg5NkVDNjZBNgorOjEwMUM3MDAwNzkwNkFEMkJCQzQ2NEQxRTQ4MTA5RkRGRTUzQkUxMUNBRAorOjEwMUM4MDAwNDJGNUUyNTREOTg2RUI0QjJBNjVGMTQzQjE3RUFBNjc0RgorOjEwMUM5MDAwQTc0RjQ5RTU3MTUzQkE5RUE0MkM4Njg3MjRFQTBGQzA0QQorOjEwMUNBMDAwMzk5QTgzRUYwRjEyOEI4RDFBQkY1RkUwRUQ1NkI5NEM1NgorOjEwMUNCMDAwODJCOEI3MkI5OTQwREEwREY1RUI1NzBGODdGMzdCOTc3NgorOjEwMUNDMDAwNEZEQjNFODU2Q0ZFNTJDNjQxMDhDQTgzOUJEQTZGODhBMworOjEwMUNEMDAwNjMyNTRERDNCNTgzN0Q0ODNFQjQ1NzNEQ0ZFOUJCOUZDNworOjEwMUNFMDAwRjgzODk5RUYyN0NDQzQwMzc2ODVDODE1RTdFNDFCRDVFRgorOjEwMUNGMDAwN0VFMkYzRTQ3RUM0NDU0RTI2MUJGODc5OEFENjdFQjU5MworOjEwMUQwMDAwQzY5MUE4NzE4MTg2MTRCRTJGMzhFNTQyRkY1N0U2NzY0QQorOjEwMUQxMDAwNkI3MjY3MEVFNkE3QUNCNDJCMTgyRjkwNjVBRjc1N0E3RgorOjEwMUQyMDAwNEVERkY3NUQzRTAzNTE1NEVCNEI5QTE2NEYxNEQ1RkUzMAorOjEwMUQzMDAwMjFBNUNDQUQyOUE3OTVBNzZCREEwRkYwMEZEMkQ0NjdGOAorOjEwMUQ0MDAwRDQ1Q0FDQTlDRkFBMkZENDk0MDcwNkM2NkJEQUU3NTBBRgorOjEwMUQ1MDAwMDE1MDk3MDczNzVGQTk2OTNGQjRFNTZBNEQ3OUY4OTY1NgorOjEwMUQ2MDAwOUIzNEVEMkYwQUNERDdENDhGNzg3Mjg5QTY3RTY0RUI5MQorOjEwMUQ3MDAwNEE0REY5OTI1RDNGRDJCNDZGRTQ3MTVGM0Q1RTI2NzNDOAorOjEwMUQ4MDAwQkMzNjFBOTlERTY5QjAxNTYyM0NCMkQxQTY4RDQ3NjZBMQorOjEwMUQ5MDAwRjM3NjI1ODkxMzcyMjEwRURFRjg2MTQxMkVFMEZCNjU5MgorOjEwMURBMDAwQzc3ODhDOEJDN0UyMEJCRDFFOEJBNTNGRjVDRjJGNEJBMQorOjEwMURCMDAwNjFGQUVFOEI5N0NDMDY5MDgzRTVCQkE5QkM1RTQyQ0I2MworOjEwMURDMDAwQjZGNzM2QzA5QTlBRjNEODc5QUE5MUIwRkMxRTcxQkVDNAorOjEwMUREMDAwMjJERUVGMzk1RjMxN0E1OTdDRDU2MTIzOUJBMkYwNDUzMQorOjEwMURFMDAwNzY4QTEyMzVGRTI5RjgyODE2REUxQUZBODlCNzI5N0M3OAorOjEwMURGMDAwMURERjE1NkZFRjRCMkMzRjU1QURGRjc3NDQ5OUQ3OUFGOAorOjEwMUUwMDAwMTQxNkRGQTJGNjY1NUUwQUYzNzc0NkM3QTMyN0VFNDRGMQorOjEwMUUxMDAwNzlCQzUwRkQyRkU2NDFGNUZGOTIxNEY0NDNERjk4NzMyRgorOjEwMUUyMDAwMkJFOEZGOUQxNjJGRUNDOUJFMjg3RkEzRkEwMTA1REEyNworOjEwMUUzMDAwNTdCM0Y2MDY2RjJFRDAyNTU2RkM3QjRENEE5RkY4Nzc5OAorOjEwMUU0MDAwMEQ4QjdGQzc2QkYwNTYyQkU0NUQxNzg3NkI3NDdDOEQxMQorOjEwMUU1MDAwRjFFRjQ2QjMzN0I3M0ZGMUVGNUFEMDMxMjk0MDA3QzYwQgorOjEwMUU2MDAwMUYzREY0RTVGMUYzNThGQkEwMDAyMTdCMjVEOEY3RDhGRQorOjEwMUU3MDAwOEMwQTlDNzM5RDZGNUY0QkY3QjNCOTcwOUVEQTAyRkJCRgorOjEwMUU4MDAwMjZENTNFODdFRTZGRjlGRTI2MEVFRDAyQjU3QkY3QTY0RQorOjEwMUU5MDAwQTBERTIzN0IxNUZBRkMwQ0RERjc2RTUyQTAyOEVDOUYyOAorOjEwMUVBMDAwNEZFMzk3NUI4OEQ3NkE5NjkxOUUwRkE2RTA3RTk3QUMyQQorOjEwMUVCMDAwOEE5MzIxNUUxNkRFMzcyMUU3M0JEOUYzRUQyOTE3NjBCRgorOjEwMUVDMDAwQ0ZDOUY5Q0ZFNUQwRUU5NEQyRjVBRjhCRTI3N0U5Q0Y2OQorOjEwMUVEMDAwRTE3QUZDNkZGMEQzMjQzQzhGNDMzQ0FEQTc3NjExQ0U2MgorOjEwMUVFMDAwRTNEQTUzOTg3RDVFN0Y4OEVEOTNENzFGOTlFNTQxQjk3QQorOjEwMUVGMDAwNDkyOTNBRTczOTVDN0ZGNUNEQUIyOTdERkNEMjU3NTNCMAorOjEwMUYwMDAwQ0VFMTk3OEFGNUFGRTRGQkRFMjk3MjVFMkJDNDFCNEY0RQorOjEwMUYxMDAwNDRDQzg4Mzc5OUIwRkNDOEJBM0QyNjEyNDI3QUIyM0MwQworOjEwMUYyMDAwNjM0MTQ3NTM2NDQzMDdEODY3MTNEMUU3MTUyQjg5QjA0MgorOjEwMUYzMDAwNkVEMzFFMTlGNTEzNDk2NkY1NDE2MjZEMDAzRjI3QjE1NgorOjEwMUY0MDAwNTg2QkI3NUMzRUFEREQ0QTlBRTZENkQ5MzFBRERENEE3NQorOjEwMUY1MDAwMkJEN0RBQUQwMTdFQURERENBQTgyOUQ0RDkzMUFERERFQworOjEwMUY2MDAwMUExODk4QThCMzYzNUFCQjM1QjhGOTZBOUQxREQzREExRAorOjEwMUY3MDAwQURFMTVCQjQ3NkVCQTI5MEQ2NkU4RDc4NzJBNUNFOEU3NQorOjEwMUY4MDAwNjlFREQ2MjVCQkQ2NjlFQTBCQzI5QjM0RjVBM0Y2REMxNgorOjEwMUY5MDAwQTMyOThGRTlGODBGNERGQjQ1N0I5RkMzRkM5QkIxMDczRAorOjEwMUZBMDAwMUZENUI0MUJEN0Y5NEI0RDNCOEFGMDBFQzhEMzVFODBDQQorOjEwMUZCMDAwMjQyMUU0RDI2M0NGNkFFQTE3NzAzRkVEQjJFRURGNjgwNgorOjEwMUZDMDAwRkEyMTJEMkNERjNBNDhGRjAzN0FGRDk1RjhDREUwOUNFRAorOjEwMUZEMDAwMTg0OUY3QUIxOTk0QUVDQjQzOTIzNzRDOUIyRERFQjUyNQorOjEwMUZFMDAwQTMwOEU2RjFEOUUxMkJGNjQwM0Y4QkI2NjhGM0I0MTdBRQorOjEwMUZGMDAwODdCNEU1M0EzMjI4MTFGNDQzMURFNThCMTBFNTkzQTUyQgorOjEwMjAwMDAwOTBCRkFERDI2QjRCNDlCRDAzRjMyMUZBQzk2NzhCRjY4NAorOjEwMjAxMDAwNUU0MzMwRUYzM0U4RUI4MEZDNzRCMTRFQzE2RjNFQ0VDRgorOjEwMjAyMDAwNkY2MjdFNjJCRDRCQTlERjE3NTY3QUQ3RTlBM0ZGQjE3NQorOjEwMjAzMDAwN0Q2NEE3MTlGOEI2N0E5NzQ0RkU0M0VBQkI5RTlBQjYyOAorOjEwMjA0MDAwQkIzNzY0NDQ1OTk3N0UxRDdBQkY3MzRDQUEzNjhFM0RDOAorOjEwMjA1MDAwNDVCNjYxNUNGRkM0OUJCMjk3QzUwN0I1NzJCODcyMkZENQorOjEwMjA2MDAwOEJFN0FGN0M1QUMyRjg5QTFFMUZDMjJGOEQ4NTE3Mzk5NQorOjEwMjA3MDAwQzhGNjA5NzVDOTI0MTQ1MkM5OUZDMkYxNjFGMTY4RTUxNworOjEwMjA4MDAwRUYwNEZDMDNFNkYzQjAxQzgyQkNBMDM4MjU1RUNGNkZFMgorOjEwMjA5MDAwNDU2MUQyMTdDRjA5Qjk1QTM5RDVFM0Q5RUU0RDhGQ0E2OAorOjEwMjBBMDAwNTcwQUZEMEZFNjUxNEREOEI5OTQ5RUFGRjQ3ODVGQkU0NAorOjEwMjBCMDAwRUI2RTMzRThDNTBCQzVGQjgyNTRFREY5QTAzODNGMjgyMQorOjEwMjBDMDAwQTFBQjM1NDdDOTgzMTM3OEE1RkJGMjI1QTkyOUIxRjc0MAorOjEwMjBEMDAwQURCN0E0NUVGMEJFRjU5NkQ0N0ZFREJFQjUyMUY1MUM3QworOjEwMjBFMDAwRjFCMzJFODg5NzUxQkY1MjFGMkZFQjFCMUZEQkZEOTVCRAorOjEwMjBGMDAwRTRDMDM4MzQ4QjdGRjlCRDU2OTZBRkEyQjM5M0I5MUVCNgorOjEwMjEwMDAwOEQ5REVDRDlGNzdFMjg4NTFBNjlFN0Y1MEU1RjBCQUMzQgorOjEwMjExMDAwNkY4NUMzNzczN0MwOTkwRURGM0RBOTJBRkMzNDUyQkNDNgorOjEwMjEyMDAwRTBGRDFDNkFBNzc2NDRGMTBGRjdBNTBBQkZBODBDRTNFRgorOjEwMjEzMDAwMjJFQjRCNTg3QjdEQkI1RkE3QjJGQjQwRUQyOTQ1MUVEMAorOjEwMjE0MDAwRjQzQjhGMTQzMEZCNjkyRjNBQTdERjc5MTczRkNGQjlFMworOjEwMjE1MDAwMDNDRTBCODdGNkU2RjFEQ0M5Q0Y1NUE4RDhGOTgwNkUxRgorOjEwMjE2MDAwRUI0RDY1MUU3NTlFRUY4M0E5MkUxQ0NGMzFFRUQ5MEU2NworOjEwMjE3MDAwQzg3NzZFNzQxQTlDOTIwMkZFQjMwMUNGNDU5QjdDQjY2MQorOjEwMjE4MDAwNjkzQkYzRDg3QkM5OUFGN0Q4QkQyMzE5RjAwREZFQkM4MworOjEwMjE5MDAwQ0RGOEI1OUE2RkY3NTE1QzQyQkZCMUQ2QjkyRjk1RjkxQQorOjEwMjFBMDAwQkIyNkUyQjM4MkRFMTVFN0I5QTYwRjBCQUNBMDZGOEQ5QworOjEwMjFCMDAwOTJENzE5MkQ4RkQzQzRGM0E0MjZGMkYzNUNEOUM5Q0VEQworOjEwMjFDMDAwNzc3QkU0RkMzQzc5NTIzNzNCRkNBRkE5Rjk1NDlDRUI5QworOjEwMjFEMDAwQ0U3NkY4RjZDMUYzODAzMTY4MDFGRjMyNjA4REJFRkYyNAorOjEwMjFFMDAwRkQxM0E3RTM1REIwM0VBNEE3MERGOTA4Qzc5N0ZCMTU0MworOjEwMjFGMDAwM0ZGOTczMkFDNkU1ODI5OEFGNzhBQkVDM0QwNkYxQjk5QQorOjEwMjIwMDAwRkVDNkFCM0U0RUVEMTNBRkZBNThDRDg3N0FGOUEzRkU2QQorOjEwMjIxMDAwRTcyNzg5OTA4Nzk3OTg2RUM0RUQ4NEQxOUIwQkZDREZFQworOjEwMjIyMDAwMENGRjFFODdGMUQ1Q0Y2MUREN0RGMjRGMTUzN0NGQTdBQgorOjEwMjIzMDAwNTVDRTk5NEYyQkZBMjk3N0Y5NEVBNUIyQkNCRkJGQTU1MQorOjEwMjI0MDAwQjJCQ0JGMjY1OUQ1OEZFMzNDRkQ1MDNDRTVENkRCRkE0NgorOjEwMjI1MDAwODUzRjM5NkQwQ0M2MzU4RkIxNjBDMjg1QzUzNTFENjlBNgorOjEwMjI2MDAwN0RGQzQ3NDdEQTM5RkNDNzMzODc4NjI3QzI3OUIyODhCNQorOjEwMjI3MDAwNUJFOURCNTkwMzQ5OTlFQUZCMzFDRDJFRURGODFCMEFFNgorOjEwMjI4MDAwNTk3OTAwMUY3Nzc5MjJFM0ZCOTE2OThDOEUyMjBGNTBEOAorOjEwMjI5MDAwQzRBREFERDM4OTBGRUUzQkRDQzNGM0IzNDUzRjIzRDNDRAorOjEwMjJBMDAwRUNEODNFRDUzRDcxNjQ1QTBBOUNBNzQ5QjhBRkRDRTAzMgorOjEwMjJCMDAwOTIzNEZCQ0I0RjUyNEI0NkMyN0E4NkYzRkU0N0E2MzE4RgorOjEwMjJDMDAwM0VERDM2ODhDNTY3RjQ3OTkwMjc3OEZCMTNBOTEzMTE5MgorOjEwMjJEMDAwNTI4MjVEMDRGODM0Q0I3MjU0M0MxNkE2QjFGOTdGOTI1OQorOjEwMjJFMDAwQzhFNDVCQzRDRkFBRUU2N0Y3QkI0NERDNENDNDAxMDk2OQorOjEwMjJGMDAwRjFCRTlENDBGNUNBNDc5QjREMDRFMjVBMEI2NURCMDZEMworOjEwMjMwMDAwRTBDMzlFRkI3M0ZDNUNERDQ5RkYwMzdCNTk5OTU3ODY1NAorOjEwMjMxMDAwRjk0N0RGRjVGRTE2RTAzM0MxRERENzVFNUU5OUQ2RTNGRgorOjEwMjMyMDAwQTc3ODJGRjAxRUQ3QUNCNDBCMzg2RkVGOEM2NzdDREIyRgorOjEwMjMzMDAwNkRCNzYxM0M1QkRGNkUyOUU3ODdDRDNDNEUwMUZBMUEzMQorOjEwMjM0MDAwRUM4NjVCMjZGNUQxRUNDNzUyOEVGNzMzODcyQzNFRjQzMgorOjEwMjM1MDAwNjNBNkM1NjMzRTg3MzhGRjMwNTJGRTRDNzQ2MzFBNzgxQgorOjEwMjM2MDAwMTBBMDM1OTA5MTA5Rjc4OTdBQ0UzRjE0ODJFRjI1RDlENAorOjEwMjM3MDAwNkNGODlFNTEyMTYxM0I1QzA5MzU3QTI1QzgyRkVCMzRGRQorOjEwMjM4MDAwNzdBRTRGODNGOTVFMjY3OUUxRkU0MDVBODVCMzNEMkQ0NQorOjEwMjM5MDAwMTlFRTExMkEyODY2MUI3Mjg4QTMxOEVBMEIwQzU4RUY1NQorOjEwMjNBMDAwQkFENkI5QzEwNDc5RDcwQTgxOTM2QzYyQTJFM0Q4RTk5RAorOjEwMjNCMDAwMzhGN0E2RTVCMDc1MDVBRjY5NEZBM0VEMTI5NTZFMzJGQgorOjEwMjNDMDAwMjgwRkY0ODg3M0FBMDdFNEI4OUNFNUFGRUJEN0Q3QzQwRAorOjEwMjNEMDAwRjlENUI2OUVFRTFCMDAxRjRBRjQzQ0YwQTYzNDgzQzgyNAorOjEwMjNFMDAwOUI2RjA0N0UyRDUxQzg0RTc2MkY4QUU1QTE0MjlBMzUwNworOjEwMjNGMDAwRTYwQjdBNTlCRTc0MDJFNDFCMEQ2NjdBMDZFQTdGRUFBMAorOjEwMjQwMDAwOUFCNDExREUxM0YyMjU3MzdDMDNERkFCRjNFMUVGRTU0MQorOjEwMjQxMDAwRTMyNEU5RTQ1M0UwOTMwRUQwMDBGOTEwQzZFOTA0Rjk4RgorOjEwMjQyMDAwN0E2NjQ1RjRGOTNFQzNFOUJDQ0E1MUY2MjBGMENGQ0MzOAorOjEwMjQzMDAwMDkwRDk4RTc0RUJFMzk3QjU2MkUwMkE3OTdDOTA5N0QzNAorOjEwMjQ0MDAwOUY0MDFDMjIyRTk5RTlERjM4NDU0MTdENEM5QzEyRTZDNQorOjEwMjQ1MDAwOTk1QTE1NkYwRDk0RTM2Q0UzOUQzMkQ4M0QwQjNGMkZENQorOjEwMjQ2MDAwNUM2MDIwNDYyQTZGOTM3ODNGQkU3MjIyN0Q5Q0NCRTI0RgorOjEwMjQ3MDAwQUM0Q0JGMUFDOUM3NDIyRTY0OEU5QzIyQjA5RkVDOEYxMQorOjEwMjQ4MDAwRkE0NTlCMTNFODdBMjZEOUY2RTEzOTYyREM5MEZBMTIxNAorOjEwMjQ5MDAwQjg1N0YwQ0EzQ0Q2QzczRDMxRjJGNjNGRTE3QUNDMkRCMQorOjEwMjRBMDAwRkIzRDA2RjBFOTgzN0Y3OUVERTUwOTQ4RTc4QkUxODY5RQorOjEwMjRCMDAwRTYxREE2Q0VEN0Y2NUNDNkUzRTc5ODJGREVGOTlBMkY4NQorOjEwMjRDMDAwRUY5RkNGMkY3RjJEQURGM0I1QTZCQ0VGQzJGRjVFMDkwNgorOjEwMjREMDAwRjRGODI3OTRCMTYwREU3QUZFMTdGQUVDQTBFQzNGNzhBRQorOjEwMjRFMDAwMUJDNUZGNzU5NEE5MDI4NTAwOERBNDAyRTlDREYyODc3MgorOjEwMjRGMDAwQUVFNTc4MEU3RTRERjE2Q0VEQzVGMzc1NkQ3QjExN0YwOQorOjEwMjUwMDAwMDc0RDc0REU3NDdDRDM0NDg2NkFEMzhGMTI3OTNFNDZCRAorOjEwMjUxMDAwMDhDN0JEREVEQTMyMDVGQzlCMkU3Mzc3M0U4Q0RCRjVGNworOjEwMjUyMDAwQzIzQjU5NDFBQTRGMEVGREY4QTQ5RDUwRkVGQkMwRDhGNgorOjEwMjUzMDAwNkQ4N0U3Qzc1NkJGNjFGNzUxQkMxRjVBMkRFM0ZEMzdDMgorOjEwMjU0MDAwQkM5N0FDQ0EwN0ZBOUNDQkNCOTU5RUIyQTNDMDU3RjNGRAorOjEwMjU1MDAwRDY3RTVCQTRGNkIzNDkyMDA1RURFRUUyOTAwQzc3N0NDNQorOjEwMjU2MDAwN0JGNERGRDIyNzEzMzhEM0IxRjJCMkQ2MjQ0RDU5RDgzOQorOjEwMjU3MDAwRTM2NTk2RThGN0M0MDc3OTk4NUMyQzdFNkE5QjE5RjJBQworOjEwMjU4MDAwRTFBRkY0RjhGRjA2RTMxRkUzRjkwNkM3NzZEQTcxN0ZERgorOjEwMjU5MDAwMjVFNjMzRkZBOTAyMzNFQzI3M0Y2OEIzOTAzMEYwQkQ0NgorOjEwMjVBMDAwQjFDMzQ0MzA0RUU1OUIyRTUxQkVGNTczM0VENENGRjNGQworOjEwMjVCMDAwRDUxNzEzQjBCRjg1RjdDQjE4NDdBQUE0NjMwNTI4NUVDQgorOjEwMjVDMDAwRkQ2RDhCRDlGRTU2Qjc4RTg1ODc5NEE5QTBBRjE2NkU4OAorOjEwMjVEMDAwOTQ0ODUwNjFFRDU3NTNCQUY5MDNCN0UzRjk4QTdFOURFOQorOjEwMjVFMDAwN0FGQjcyOUFBQzM2ODMxRUQxREI5NzA1QzREQjNDMDFDMworOjEwMjVGMDAwRUM1NjhCRjZGOUEyQjYzQkIwREY0NUU3Mzk4RkYxNzhBMAorOjEwMjYwMDAwRjhGRUFDODg4QzNEM0IxOEUyQ0M4MzMwNUYzMDk2QkQ0MQorOjEwMjYxMDAwMzlCNjk2MDlFNUE3NkJBRDA4OEZBRjc1MjIzQzBBQ0E5QgorOjEwMjYyMDAwOTRFMjc5RTlBRUY2NTczMzUwQUMzQjhBQzAwRUM1RUQ2MworOjEwMjYzMDAwOUQ2NEJEODlGNEZBQ0ZDNjZERDc4NDFGNTI4MDJGQjUzMworOjEwMjY0MDAwRjk5MDE1MUNDRkMyN0Y1RUM0RUYxOTlDQ0Y3RkFFODA3RQorOjEwMjY1MDAwNzU5RTIzMUZCMkEyOUZGOTkwMjdGNjhDQjJDMkYzRjFBOAorOjEwMjY2MDAwMDIxRjYzMjkzRUQwRkVFNjFENTBDOEY5RUQ2RjJDQkM1OQorOjEwMjY3MDAwQzQ3QTZGMTk3Q0U3MjAwQTlFODVEQzFDRTVGQTdEQzFDRgorOjEwMjY4MDAwRjY1OTFCRDJFOTA0MUE1RkY4NkI3NjI3RjIyNThCNDNDMworOjEwMjY5MDAwODg3MzJBRDlCM0ExMDNENjJGMTM1REZDMkY0OERFMjRGQgorOjEwMjZBMDAwMkFGRUQ1RjNFNzIyRTI2NTc2QzdDNkRFQjNGMkI4NDQ2OAorOjEwMjZCMDAwMEY1RkI2REQ4OTc4MTU3QzA0MzcwQTBDMUU4MDYxOEZBOAorOjEwMjZDMDAwQTFCOEVGNzcwM0ZBN0MxRkEwNDU1QkZFQzJENDk5MEQzOQorOjEwMjZEMDAwN0E2MzkxMkU1RUYwODUxNDdERkYzNUREMzM4OEFENUYyMgorOjEwMjZFMDAwRjE0RDg1QkM4ODg1QTQ2QzAzOEJBQkI3QTA5RTNBNjY4MAorOjEwMjZGMDAwNkM3OUY1MzY5MEU3RUQ0QzlFOTYzREZGRjRBRjQxNEY3NworOjEwMjcwMDAwMkRGOUFGRkIxREEwQTczRTMxQjZBNEMyNzhCNThGQUY5RgorOjEwMjcxMDAwNzc4MDVFM0Y2NjBDM0FFMEZENEY0MjcyRDRGQkJBNEZDMQorOjEwMjcyMDAwNzg3QUNFMDU2QzkwMTdCNjFDNTkwQzA0MkMzODAzRjQzQgorOjEwMjczMDAwRTRERjFFMzczOTIxOEU1QUY3QTQyNTZDQTFGODU4QkU2NAorOjEwMjc0MDAwOTNFMTkxOTY4RkIwRjJFRDg4QUZCQTVENUEzOTVDRjJBMQorOjEwMjc1MDAwQzRGREE5MEFFRUU3ODMxOTFDN0YxOUEwQUE5NzZGMzc1OQorOjEwMjc2MDAwNjFGRUU4RjIzNzY1MkYwQzUzNDdCQTcxN0RGQUY3NjFDNQorOjEwMjc3MDAwMUUxMTRBQjdCQTU2QjlEMjlDRDhCNzlFN0EzQzY2OTAxOQorOjEwMjc4MDAwQjNCQTlEOEM0RTc1M0EzRkIzODZFQjY1M0RCRjNGRTBEMworOjEwMjc5MDAwRTE3RTI2RTc3MzhBMTc4Qzg3ODk3QzU2MTI2MkZBQjkyNAorOjEwMjdBMDAwRjExNzBGRTQxRkExRjMzQUJFRkQzNTg3OTREN0NCRUZBNQorOjEwMjdCMDAwMDRCMjJFQzEyRjZGQUQ5QTA3NzkwNkIxRjhGQzBCMkUyQgorOjEwMjdDMDAwMTczRDdBOUZEQjE5NjUxNzlEMThGOEZFNkQwQ0Q2OUE5OAorOjEwMjdEMDAwQzI4RTRCMjkzRTZBQjc5OUJDNDFGQUI4RjY2OUQ5NjdFRgorOjEwMjdFMDAwMDMzRkU5NUQwQjdFREY2MUU5RDNBRkJDM0Q5RUNFNkY1OQorOjEwMjdGMDAwRTkwRTUzRjI3NEI2MEMxQkU4Njc0MUE3M0FFMEVGQzI0QQorOjEwMjgwMDAwNUVCQTJDNzlFRTE1MzNFNDQxQzJGM0Q1RUU1RUZBMkNCNAorOjEwMjgxMDAwREREMTZFODZCQzRBM0QxRTI3QjVCNjlCOTk3Q0U5RThBMgorOjEwMjgyMDAwRDQ3QTY0MkFEOEU1QzY1RjlDMzEwMzFGN0NGMkEyNDRBNworOjEwMjgzMDAwQzA4NUQ0QkY1RkIzRUQxNTA3RTgwRkMwMTNEODBGNDFCMworOjEwMjg0MDAwQUYxRUZBRjVBMTVCNzhDNjZGNDY2MzNCMjc5Q0QzQzRFNQorOjEwMjg1MDAwQTI1RjAwRTYzMjA2RjlGQjk5REZEMEYxNkJERUIzNzhCOAorOjEwMjg2MDAwNjFGRDM1Q0ZEQ0VDODA3NUZDRDU1OENGRjhGQzkxRjVENworOjEwMjg3MDAwQTk2MDhGNkI0Q0MxNTQyNzQyRjZCQzY2RUIwRjkwRkZFQQorOjEwMjg4MDAwMTZCREZFODM1NDgyN0FEMzM3MDBFNDk3QUU3MzAwQUM1MgorOjEwMjg5MDAwNkZFMUMzRDdFMUZBQUE4OTFGRjlBRkU2MTFCOTBDRkNDMQorOjEwMjhBMDAwQzREMzQ2MzIyRDlBOUZBRjBDNjBGQUU5QUY4RjVBNzBBRAorOjEwMjhCMDAwNTNGMDU3MzM2MURGRTFGODkzQ0NGMkY4QzgwQUY0NDNFMAorOjEwMjhDMDAwN0VDMEQ3NEEzNTMxOTY0RjVCMTk5RDRFNzlDNEZENzU1MAorOjEwMjhEMDAwQTZDN0VBNzhBQkJBRURCN0EzMUVGQjM0Q0I5NzA2RjJENgorOjEwMjhFMDAwNEVGMUEwOERBN0JFM0UyNThERUIzRkZDNUUwQUJFNDc5NAorOjEwMjhGMDAwRjk2RTEyM0M4N0Y2MUQyNjVGNUNCRUU2M0Q5RUQ3Q0E4OAorOjEwMjkwMDAwQzY1RkM1QzdBN0YzOEU4N0I4REM1RjUzQjVGQjU3MDExOQorOjEwMjkxMDAwNjcwQzEwN0E4MDc0MTAzNTdGQzU5MkZCRUQxQjkxQUY2OAorOjEwMjkyMDAwNEVCREM5RjRDQUYyRDBBQzY5NThERjYxMEFBNzQxN0QzNworOjEwMjkzMDAwQThGRDVBMDlGNTAyRjUyRkEyQzlGNTc2MTM5NzZCNkQxQworOjEwMjk0MDAwM0Q5REE3NTE1MkUzRjc0NTc2MkZBRUZBM0VEQTRFRTVBQworOjEwMjk1MDAwODdGNEYyOERCOUY3Nzk0RUFGN0M4QUZDOEE0NTNBRkY0RAorOjEwMjk2MDAwNEM0MEJENUU0ODFGQTBCNTdGRTI3REYyNzA0QUQ0N0IyQgorOjEwMjk3MDAwNThCREZBMjA4ODdDNTE2QjBBRkRGQzNGNDA4RURGQjVDNAorOjEwMjk4MDAwRTAzREMzREFBNzRERjhCRDlDQ0Y5RURBRkRGNjREOTQyRAorOjEwMjk5MDAwREYzRjZCMTVGMkFCRDVCMzdBRjlBRDc5RjYzQTEyNEQ0QworOjEwMjlBMDAwN0UzRjRCMkUyMzUxRTU5NzNFOEYyQUJGQzkyQzdGRkZEOAorOjEwMjlCMDAwN0Y1QkNGMkU4QUExNjcyNzBGRDBFQTU5RUE0RjI0NUVBQQorOjEwMjlDMDAwNEE4QjlGRkU3MkU5NDBEQzY3RTlGMDJBRjBBOUQ3OUJBOQorOjEwMjlEMDAwODczQzBBRTI1N0FGMzdFOURGOUI0NDg1NDc4MTNGQzExNworOjEwMjlFMDAwOTc0QkZFNzMxOThFRDNDM0JGODIzRjA1RkZGNkYwQTc0NgorOjEwMjlGMDAwN0VCRDVBM0NFQUVCRTNFMENFNTE0QTJGREQ0REVCRThEOQorOjEwMkEwMDAwRkUxQUNFNUQ1RjkwRjFEQ0I1NEJFOTc2QjgyMTJFQ0I5NgorOjEwMkExMDAwRjM2RUJBOUNCQ0VDNjJFNUVFMTRGMzA2RDAxRkUyNzlDQgorOjEwMkEyMDAwNzcxQ0NCNDNFODJBRUI3NkI4NTQ3RUZEOTEzNkQ5MDE2QQorOjEwMkEzMDAwNzlGNTlEQTFFOEY5MTI5ODQ5OTEwMkI3NDQ2M0Q1MzcxOQorOjEwMkE0MDAwRjBFRkQ2RDhCMjAzQjAyRjZCNjFFNzNEMEIxQTZFNzA3MgorOjEwMkE1MDAwODAzRkRERDUzNjc4NjYzOUY4RjE3QjY1RjRBOUJBRTJCNgorOjEwMkE2MDAwNzk3RTU1RDA2NzFDNDBGMTVBQzU5NjRDOEU5MUUwNEY0NworOjEwMkE3MDAwQzFDRkFFNkE1QjNBMUQzNjhEMEIzNjZCRjE1MTZEQkIyMworOjEwMkE4MDAwMTZDRkIzQUFFRjMzRjVGMjA1MDE3RjI3NjQwNjNGQUJGQgorOjEwMkE5MDAwRTY2MUVERjMyNTkwNTcwNUY0RDFGMTkxMUZGODI4Q0FBRQorOjEwMkFBMDAwM0Q4QzNCMDUxRjE1OTAwMkI2NEZFNkU3NTU1Q0FGNEREOAorOjEwMkFCMDAwOTFGMzY2OTY0M0ZFRTIxRTc2NEZFMjQ0OUI0QzM2QzA4RAorOjEwMkFDMDAwN0E5RkUyRTc1N0MxMTRFNENGRTU5NDhGRDU3MUNFRTM0NgorOjEwMkFEMDAwQzA2N0MzNjNEQkVGRTNCRjNBNTQ3NDFCNkQ1MkZCRUI3QgorOjEwMkFFMDAwM0ZFNzNGNDRFMUYxNUZCRjNCRUNCNzUwN0VGRTlERUMxQQorOjEwMkFGMDAwM0Y5M0JFRUQyN0JERjhENTVDQ0NBMzdDRDE0MjYwNUY4RgorOjEwMkIwMDAwRDRGNUUyRUZCMzZGODNGMjZGMkM1RTk4NjdENzNBQjZENQorOjEwMkIxMDAwM0YwRUJFNjg0N0JCREU5NUM1RkNCRkM2MTdDRUU0Nzc0NworOjEwMkIyMDAwQTI3RDZBNDI3QUVEMUFDMEVFQTk5RTY4RkJGQjYxMDk5QworOjEwMkIzMDAwRjJFOURBRThBQUMwRUVGMjdENTdERDZGRTI3MDdGRERFMAorOjEwMkI0MDAwRjVDMjE5Q0RCRUYyQkJBRTY3MzlCRkFGRDQ2NTI3RTU3QworOjEwMkI1MDAwNzBCRkI4Q0JDNUVFNzdENkZENzZEQzYzNzA1RjcxRDlGOAorOjEwMkI2MDAwQ0U3NjczMTVBRDlGRjRCQjZGRjM0MURGNzQzRENCRkNBNAorOjEwMkI3MDAwMDlFQURGNkUwNTk3N0FGNzgwMDM5QjREMTRDRjVGODBEQgorOjEwMkI4MDAwQ0Y5NzRFRjcxRkU5ODlBNTcwMEZBMzJGNUUxODFFQkFDNQorOjEwMkI5MDAwMjgxRTYwNUQxNDJGMzVBMDI3NjNFMUUzQkQwMUVDRkUyNAorOjEwMkJBMDAwQzhCRjFGM0VCRTlDMEJFM0Q3QjY4RDI1MTA0RkVGQzVBNworOjEwMkJCMDAwOEJFNDYzQ0ZFRDk4Nzc0MUQ3Q0Y5RUJGNzgyNjFGRkM3QgorOjEwMkJDMDAwQTNGM0FEMzdGMkZGRDk3QTUzRDNGRjVERDdDQkY4N0RBRQorOjEwMkJEMDAwRUIwMDY2N0ZGNDdDREY5N0FGOUZCRjA1Q0JDRkQ4QkRGRQorOjEwMkJFMDAwMzhERjdFQ0E3QjUxRkFCRkFCQkNGRkVGRDBGQkRBRkYwOAorOjEwMkJGMDAwQjNGNERFQ0JFOTZENzdDMjc5NEFENzBCREY2NjkzMEI2RQorOjEwMkMwMDAwNThGN0NERkY0N0Q3RERFM0U3MThCQ0Q2RDE3NDdFRUY4OAorOjEwMkMxMDAwOTFEMDc1MjU1MkVDM0NDRTUwQkE3NjFGMzE4M0ZCMTExMgorOjEwMkMyMDAwMzM5MkFCRDE3Rjk4RTE2M0YxOTU0NjUyQjgwN0VFQTk5NAorOjEwMkMzMDAwMDU3RDMyOUUzQjYwMzIwREM1NDNDN0I1MDUyMUNDREIxNworOjEwMkM0MDAwMzIwNjg3RkUxNEYyQjhBRTVGRTY2NURGRjlEMkVFQUY2QQorOjEwMkM1MDAwNjZBNDRFOUIwNkZFREJGRTA2M0EyRkRBNkVCRkRERTA3MQorOjEwMkM2MDAwNkNBNDRCOThFOTkzRDFERkEzMTBGREJDQjcyNjVFODUxOQorOjEwMkM3MDAwNzkyMTMzOEJCNUZCOEM5Qjc0RkI4NjFCQ0FCNUY1RDdDQQorOjEwMkM4MDAwOTM0NzUzMjBGRkVFRkExQTEzRTYwQjVEQTc2QkJGMjY5RQorOjEwMkM5MDAwREQ4OUVCQkM4MUQ0QUY2N0YxOTkwQkMzNTM0NzNBREJCNQorOjEwMkNBMDAwNEZGNkM1QzNCOUYxRDYwNzRGN0MzRjg5QjkzQzRBNUY5RgorOjEwMkNCMDAwQkM1OUZDNkM3RjY5QTExNURDREZFMjc5NzIyQkZCODVDNgorOjEwMkNDMDAwNEZDMkY3OUQxNjNFQjRDMEFGQzVDN0JFRDdBOUVBMTcxRAorOjEwMkNEMDAwRjEyMkYwN0VBMUY4MTY3NEQyRTM1REUwNTdFMDRENEY4QgorOjEwMkNFMDAwODdDN0UwNEM0MkU1OEZGNzQyOTE0N0UyMjdFQTdDQ0I2OQorOjEwMkNGMDAwMTkzRDdFQTMwREYxNzg2MDNCQkJBRjcwQTBCODZBNzMzRAorOjEwMkQwMDAwMDE5NDlGOTJEMDVGM0IzRDYxMTRCMUQyRjVFRTM3OTFCMworOjEwMkQxMDAwNURFQ0ZFOTc0RjcxMTZGNUU2QjM0OEM1QkZDNzczMDU2NgorOjEwMkQyMDAwQzgyNzU0RUY0QjIxOUY1MEJEMkVDODI3NTQ5NzIxOUY5MQorOjEwMkQzMDAwNTBERDFFRjIwOUQ1RjU5MDRGQThBRTg3N0M0Mjc1MTk3QgorOjEwMkQ0MDAwRjIwOUQ1RUQyMTlGNTA1RDg2N0M0Mjc1N0JDODI3NTRFMgorOjEwMkQ1MDAwOTcyMTlGNTBERDFFRjIwOUQ1RjU5MDRGQThBRTg3N0NENAorOjEwMkQ2MDAwNDI3NTE5RjIwOUQ1RUQyMTlGNTA1RDBGRjk4NEVBN0E3OQorOjEwMkQ3MDAwQzgyNzU0OTcyMTlGNTBERDFFRjIwOEQ1RjU5MDQ3QTgyQgorOjEwMkQ4MDAwQUU4N0JDNDE3NTE5RjIwNUQ1RUQyRjhGQkNBNDI5OTdFQworOjEwMkQ5MDAwOTBENzM0RUQyNzU5REZEMDk0QTczOEZGQUM2OUZGN0Q3OQorOjEwMkRBMDAwQ0Y0NzlBRkEyQjk0Q0YzNEY1ODJGRTU3RTU5RUQ0M0M1OAorOjEwMkRCMDAwODczMzhCNjAxMUVDNjNEODVGQTlGN0VGOUE3RThDQTQwMAorOjEwMkRDMDAwMENFM0NDNjY1MjhGRDAwQUYxNUIwQUUzNDkyQjQyMUIxRAorOjEwMkREMDAwMTU3MzgwNTcwRUYzNUY5QzAxRkNCQTM1QjgwMTk4NkJGMAorOjEwMkRFMDAwRkZCODMzRDlBMEZGMEY0Q0I4ODZDNTFGRjgzOUMxNENDNgorOjEwMkRGMDAwRjhBNzQyOTkzOEUxOUI0Q0Q4RDc4QTczNEY0NzQ0MjZBRAorOjEwMkUwMDAwRTE1MTk0MEYyMzEyNDI2NzI0ODE4NDkzMjgxRjQ2RTJFNAorOjEwMkUxMDAwMTBCQTIzNDlGODNDMjlFMjQyOTgxQ0M5QzBFNzI5OTExRAorOjEwMkUyMDAwMDEwODUzMjM4MzExQTY0NTcyMTA3QTIyMjMxMDBFODhCRAorOjEwMkUzMDAwNUM4NDMwM0QzMjBBREZDQjg4MTQyMENDOEM1QzhBQ0Y5NgorOjEwMkU0MDAwQjMyMkUzMTA2NjQ3MjZFMUYzODE5MTEyODQ0QUU0MkExMworOjEwMkU1MDAwODQzOTkxMkIxMDBFOEE1QzgzRUQwNjQ3NjYyMTFDMTI4MworOjEwMkU2MDAwOTk4RENGODc0NjZFNDQzODJDNTI4NTcwNzhBNDEyNjFCNAorOjEwMkU3MDAwNkU2NDI5QzI4QjIyOEIxMTVFMUNCOTE5REYxQjExNTk5QworOjEwMkU4MDAwODEzMDJGNzIxQjNFMUYxOUY5MjFDMkZDNDgyM0MyNEIwRgorOjEwMkU5MDAwMjIwRDA4QkQ5MTNCQjA1RDQxNjQyM0MyQzJDOEJERjg5QworOjEwMkVBMDAwN0M1NEU0NkU4NEEzMjMwRkUxRjMzMTkxMDcxMTE2NDU5RQorOjEwMkVCMDAwMUU0MzM4MzZCMjBENjE3MUU0M0YxMThFOEJGQzAyRTE4NgorOjEwMkVDMDAwRjhDODczRjhERUE1OTExRDA4Mjc0NDdFOEJDRjJGOEJBMQorOjEwMkVEMDAwRkMzN0MyRUY0NTc2RTNGM0NCMjNFRDA4N0Q5MUQ3RjBDNQorOjEwMkVFMDAwNzk0OTY0MkZDMjg5OTEzN0YwRjlBNEM4RUIwODI3NDdDNAorOjEwMkVGMDAwRkU4Q0NGQTc0NERFNDUzODM1RjIxMUMyRUY0NzhFMjA1NQorOjEwMkYwMDAwOUMxNkY5MENFMTE1OTE0RjEwNUUxOTM5ODlFRjVEMTU4QQorOjEwMkYxMDAwRjkxMkUxRjRDOERGRjE3OTY5RTQyQjg0M0RGQkZEMDk4NgorOjEwMkYyMDAwQjFFRTI1RkEwRDY3MjFBRTY1NzNGN0VCM0I1Rjg0NkM1QworOjEwMkYzMDAwRDE5QzRCM0Q5MEUwNDAzRDM5NzMzNUNCMjNEOTUwNzI0NQorOjEwMkY0MDAwNzIzMkZBQjUyQjJDMEFGRkJFQTY0RUFGN0U2MzAzRkY4QQorOjEwMkY1MDAwNjEzREQ0MEM2MDdENDAxRUUwMUNDRUJGMDc4QTc3QTc4MAorOjEwMkY2MDAwODBCRkI0QTFCMEIzMTZFMjIxNzdFNjc0NTYwMEJDMkYzRgorOjEwMkY3MDAwODNGOTBENzc2NDMwQkI3ODRGMDY4Qjk3NTYwRTczQjI4QQorOjEwMkY4MDAwN0IwNjJCODZFMkY5MTU0OUVFREYzQURFRTRGNjU5QjQwQQorOjEwMkY5MDAwQkYzOThCOTc2RERERDk3ODJGQTA5RkZERjRCN0RERjk5MAorOjEwMkZBMDAwRjJBMzdFOThFMTdGMjIwM0ZEMjJGREZEQkM3RUJGRkZFMAorOjEwMkZCMDAwNUZBODI3RkVGOUY3OUYzRkQ3RkIxRjcwN0FBNTY0OTY5RAorOjEwMkZDMDAwRkQxNkU3NjlGNEU1NDNGREM0NzUwM0U0NjREQTRGRTVGMworOjEwMkZEMDAwNjZDOTA5NzZCMkFBQTk2MDJBRDBBRjkwRjgzMDlFMzhBNworOjEwMkZFMDAwMjc0NjVFNTcyN0E3REZGQzdBMTM4MUI4RTI3Qzg1NjAwRAorOjEwMkZGMDAwM0M3N0ZFNEU5NkU3MEI3MUQwNTJDQTE3MzU5QzJGOTY0MAorOjEwMzAwMDAwNkREQzYxMDYxN0I0QTY3RTExQ0IzRjBBQjEzODkzOTVFQgorOjEwMzAxMDAwRkUwN0ZDQkM2NEYzMkNDQzNGNUFGQUE0MzZGRTU0MEJEQQorOjEwMzAyMDAwNzExRDE5Q0U5MUI1Q0ZFQjc4OUNBOUNGQjk4MjJFQkU3OAorOjEwMzAzMDAwRjQ2RTA2OEYyRjc5NTlERTExOTEzMzcxQkRBN0U5N0FBRAorOjEwMzA0MDAwMjE5RkMzN0Y4QkREMEFGQTlGRTIwMUNGNDlDNEZBNDU3NQorOjEwMzA1MDAwQkM1MkUwODFGNEJEQ0Y4MDc5QTEyN0Y2MENDNTNDQjUwOAorOjEwMzA2MDAwMTM4QTkyMDZFREZDNTQ5QzNBNkM5MEZGRTAxRjBCQ0Y0NAorOjEwMzA3MDAwMjlGRTMwOUZBNEJCMjEwMUYzOTE4RTUwN0RBRTQwRTIyQQorOjEwMzA4MDAwOTNEMzNGMTZCRTlGRDZGOTVFMTZFMURGNkZENDlFMUIyOQorOjEwMzA5MDAwNTgzNzYzRkU3NUE1ODkwRTRDREI1NTNFOUU4NEY3MUY5RAorOjEwMzBBMDAwNjk3RkY5QkIyMDFFRjlCODA5RjM4MTgyNjRBNTg3MTRGMgorOjEwMzBCMDAwRjczRDU3Mjg1QjZGNDJGRTk4QkZDQkM1RjJDMzgyQkU3NworOjEwMzBDMDAwMzcyMTVGNUZEMEUzNDhEM0UwQTk5MDU3MzRCRjM5QTdEOQorOjEwMzBEMDAwMDBDMzZFQkI0Q0U4RTc4OUYzNTI0MUE3QkU3OUQxNjVDNgorOjEwMzBFMDAwODlGMDdEQzQyNUNEQUYyMzNEMjlCRDM0RjVCNTlCQkYwNworOjEwMzBGMDAwQzRGQjAzOTQ1RTQ3NjNEMEVCRThCOUU4OTU5OEE5QTVCMworOjEwMzEwMDAwMTdDNDk1NkY4MENBRDU0OTI4QTcxNUVCQzI0M0VCNTU2NAorOjEwMzExMDAwRkNBODhGRDM5MzRDMUJERTc3MTRGOUM0RDNEMjE5M0Q4RQorOjEwMzEyMDAwODhEMTlCMEE3NDNEQjk3OTBDRDI0QjRGQTc2OUZGQTg4RgorOjEwMzEzMDAwNDI3QTkwRjdFQ0Y4QkRERDM5ODNDOUJDQUJFOUYzNzk4RAorOjEwMzE0MDAwM0M2RTM5QTdGMTBBRjQ5RjczMzM5OTFFM0JCMDE2NzI5NworOjEwMzE1MDAwMkQwOTc5N0RBRDk1RjhBOEYzRkNDNjVBMjc5NkRGNUE1QworOjEwMzE2MDAwRUJDMUYyM0I2QjE1ODRFRkFFQ0Q0NTc4RDRDQ0YyNzk1MAorOjEwMzE3MDAwODQzQzUxMDZDMEJDQkFGQzRDMjY0N0Y5OTk2MjVGQjU0NQorOjEwMzE4MDAwQ0EwMzcxRTk2OUZGNzg2MzhDMDE1NUEzNjdDNjk0MkM2MworOjEwMzE5MDAwRjRCQjM1NzkxQUU1RDc2QUYzMzAzQTREM0NDRjZCQTNDRgorOjEwMzFBMDAwRTQ4NUVGQThDQzJGQkI1NEQzOUVFNDhFRUEyRDgzRkQ5QgorOjEwMzFCMDAwRTA3OTIzRjM5QjVERjhGREI2MUJBNzI3NjlEQTVGREY5MworOjEwMzFDMDAwOUNBMTI5NEZDRDU0MTBCRkIzQTYwREQ2M0NCRkE5NjIxOAorOjEwMzFEMDAwODRBNjVDQzk3RjM3ODE1OEUzMERFQUYzMjlFQTE5QjE2NworOjEwMzFFMDAwM0M2RjI3NkI3QkFBN0U2Q0RBQUQ3NEZDNTNGQjRDNThBQQorOjEwMzFGMDAwQUZBN0M3NTE3MzEwRjdFM0MxNDcyRDVFQjA0M0M3RTBENworOjEwMzIwMDAwMUUxOTJEMUY3QjRCNDY3RDc3Q0M0NDgyNEVBQUJBOEY2OAorOjEwMzIxMDAwNDlBNDA5MjAzMTMyNzkzQTdEOTBDOUQzQjQ3RkM4MDREQQorOjEwMzIyMDAwRjZFMUU0OTcxNjNDQkZBQkRBMjI5MTIwRENBMUVBQTZENgorOjEwMzIzMDAwOThBN0UzQUVGQTg1MDVEN0JENjA4QjRDRkM3ODVGNDk1MworOjEwMzI0MDAwNjk4NTczRUI1NThGMEZGN0MyQjlFNTlDQzFFMTJDQjhDNgorOjEwMzI1MDAwQjdEN0ZEQUIzOEVGQTNCNEI2QUE5M0JEN0Y4Q0VFQUY2MgorOjEwMzI2MDAwNUQ5MDk3MjQxNUUyRjlDMUU3QTUyREQ1MDZDODM3OTBFMgorOjEwMzI3MDAwRjdBNTgwOUM3RUZFQUM4Q0YxOTRDNTJCREUyQTcyODI3MQorOjEwMzI4MDAwNUU3QkI1RjVFRDYyM0FDRUQxMTYxOUM3RkRFQzQ5Q0JBMAorOjEwMzI5MDAwMzYxOUU1REQ5NzA2REY3NUVENUQ3NzA4RTMwQ0FGNzk0QworOjEwMzJBMDAwQ0FFQTMyMjkxRjdDNUExRENBNDdCREIzOUFDNUI3RkI2QgorOjEwMzJCMDAwRTI4N0FFMTdFODBERkNBQUQyNjNCRDc2OEI5RDkzNTFEMQorOjEwMzJDMDAwRTUzMzAwRjQ0Mzk1Qzk4QkU3QTY0NzM3OUJGMDNDOEY2NQorOjEwMzJEMDAwRUE3RjNDRkYzRkRBOTI2NDYwRkFFNzU5RTRCQkY5NDZDMworOjEwMzJFMDAwQzVBQzFFNzdGRTY2RDlDNzdFMTc0MjMxQzM3Q0M5RERFNworOjEwMzJGMDAwQjI5RjhDODUzMkNCNTcwODM2NEI3RTc2NUVBM0E1RUYwNgorOjEwMzMwMDAwQ0QyQkM2RTJGRDYyN0RGRTk0ODA1RjUwOTlGMkFCQ0U3QworOjEwMzMxMDAwODE5NkJDQzBDRTY3QzlFODRFQTMzQTdGNUNDNDU3ODg4QgorOjEwMzMyMDAwODdGNTJGQkVFMzUzM0JFODgxOUY0Q0EwRjA4NDhGN0Q0RgorOjEwMzMzMDAwNzJGMEY0NzYzQkVBQzdFMzg2OTc4QTZFQTVGMEIzRDJDMworOjEwMzM0MDAwRTBDNzQ2NEE5NzdBRDlGRjUwMjZFNEVGMTgzNjZGOTVDMgorOjEwMzM1MDAwRjA1Q0U0QTM5RkMwNzlGQ0E3NEY5QkJDMjg4NjNDNUYzMAorOjEwMzM2MDAwNkJDOTJGMTcwRjNDNTc3RTEwQ0M4MDlEMkY4NzUzMjU5QworOjEwMzM3MDAwMEY3Qzk1OTc2MEZFQzY2Q0QyQ0FFMzAzMjE3NkZFMEZFMAorOjEwMzM4MDAwOTNBMEY4NzFENkIyNzNBQzhGQzZEODM3QzEzRERDMkE5MgorOjEwMzM5MDAwRERCREREOEZGOEJEODU2NzMyMjU4RDdEM0VDRUNCNTVGOQorOjEwMzNBMDAwMDYyNjlGRTQ0NUY2RkQ0NUM4N0IxOUEyQjJBNzQyOUZCOQorOjEwMzNCMDAwQkU5MEM5RjI0OTdBRUMyQTY5NDVCRDUyQ0RCRjBGNUM3NworOjEwMzNDMDAwRkJBNDg1REREMzUxODgxM0U0NzEzMTIzMEZGOTBBRTQ5RQorOjEwMzNEMDAwOTlDRTc3ODlGOUU5OUYwMjNCMkYyMjFENjhFNzNFMzU5OAorOjEwMzNFMDAwODVBQTNCNzJFMEZENkQ0RDZFN0NERkU0MEQ4MUZDNzJDMQorOjEwMzNGMDAwM0I2MEE1OEEwM0Y0QzcyMkMyRTZCN0FDNDUwQTg1NTVFRgorOjEwMzQwMDAwNzEwQUYxN0IxQzA0RUM4MjRBREZGNEI1MDc1QTNCQjAyOQorOjEwMzQxMDAwOTBEQkJCODU0NDk3RUZEM0EyQjU0QjY1MDk3NjVDRDdBQgorOjEwMzQyMDAwOTIxNjlFRjdEQzMzMkY5OTlDQTUzOEFCRjY4NzVFOURFQworOjEwMzQzMDAwODFGMzk2QkNBMTI4RjM1ODQ0QkFDM0YwMURFMDY1NEY1MAorOjEwMzQ0MDAwQjFGQjQwRkE3OUU5RDdEMURGNzk1NjdCNjc0RDg2RUYzQQorOjEwMzQ1MDAwMDlGNzhDQUI5QkI3QzAzNzgxMEI0QTJBM0EwOEJDNTc5NworOjEwMzQ2MDAwMDcxOTNFQUJEQjI0QTRENzVGQjg1RjI1RUVEOTA5QkFCNAorOjEwMzQ3MDAwMkYyMjY1MzM0MEFGMkRCQThGRUUwQjczN0FGOUEwQzdCOAorOjEwMzQ4MDAwNUVFRjA4QTFCRkY0MTk2OTcxRDgyOEZGRDc2RUQ5NzExMgorOjEwMzQ5MDAwRkQzODc4RUZFMUQ3Q0RDMERGMTVFRUYwNTA4MzhCRUUyRAorOjEwMzRBMDAwMTc4MzNGRkVDOUI0QUMyOEY2NUQ2N0NGRkY1NUY4MjFGRQorOjEwMzRCMDAwM0NDRTg0RUY1MTdDMkNEQzJFNjM1RTgzQUExRDNGREY2MworOjEwMzRDMDAwMEYzMjdFMEUxMkNDMjNBQTc5NTNGNjM2RDJBNzM1RjBFRQorOjEwMzREMDAwNzMzRTg1MTczRTVGODE5RkZGRUQ3OUVCRkQ5OERDMkNGNQorOjEwMzRFMDAwOUU2RjEwQzM4RkQxRUI5NzNFN0U4Q0NFN0VDMkJEMDlGRQorOjEwMzRGMDAwQjA5N0REMjkyQzBGRkM5NEQxOTdFODQ2QkRBQ0QzQkIyNworOjEwMzUwMDAwMjk4NUY4REQ1MUExNzdBQkI5REQxM0UzMkMwNDdCNDdBNgorOjEwMzUxMDAwQ0IxRjZGNzlDRTAxRjE4N0JGRENGNzVDMkFFNjUxODBDMworOjEwMzUyMDAwN0RDOUVCQjUyRkI3NTRCMUYxNkU3OTNFMEVGMzk2M0VERgorOjEwMzUzMDAwMkZFREM4MDdCRkFGRTI5MURGM0JENERGMzVBREYzRjgyNQorOjEwMzU0MDAwQTc2NkMxN0NCOTNENUMyNjZGQ0I3NjgyM0QwQzQ0Q0YyQgorOjEwMzU1MDAwQUJFOEIzRkY4QUI1NEVGQjc5RDY2OUQ3QUU3MzNFQUMwNAorOjEwMzU2MDAwNTM3NTFGQTQ4QUFGRjNDMzY2QjZCRThGMzZCM0Y1MkU2QworOjEwMzU3MDAwRThCM0NFMjA5RTgzRENGMjk4QzUxQjQ0M0YyMzhDNzZCMworOjEwMzU4MDAwRkNEODBFOTlDMEZEQjMxRTNGNDM2N0Y3NEY5Mzk2QUQyRAorOjEwMzU5MDAwODA4RjY1MkJERjM5NkNBNDdDQjE3ODE4QzUwRkU1ODM2QgorOjEwMzVBMDAwOEFCQjJENjhFNzE3RkY4QTlEN0Y3RTJBOTVBNEUxMDFEQgorOjEwMzVCMDAwRkNDQjYxQzcwRkU5RjMyNUQ0M0YwMEZGQTI3NzFFM0Q4NgorOjEwMzVDMDAwNzY3Rjc5OTZEQUVFRjcxMzdGQ0I3OTFDNkE3OURCRUY5OQorOjEwMzVEMDAwRjFGN0EyMjQxRkNCODc1QzJFQkUwM0IzNEJGNzFEMTg1NworOjEwMzVFMDAwMDU3NDAwQkIyNzZGMDUzQTY1MTI4NUVEMTNCNUYxRDQ1QworOjEwMzVGMDAwQkYwREZENzJFRTRBRTRGRkVFNjFFQUVGRjVENkM1ODczNgorOjEwMzYwMDAwNEQ5MEVGREJCRDQzNDJCRjY4RDlBQTEyNDcwOTgxRkM0OAorOjEwMzYxMDAwNTYxNjA3QkIyMzhCRDkyRkM5RTdDM0JDMTcwQkE1NkI2NQorOjEwMzYyMDAwM0MxREVGMjc1OTBBN0JBRTM4NTk1RUY3QzMwNEJGM0JGOAorOjEwMzYzMDAwMjNFNkFCN0YwRUYxNzEyQkQ4M0Y5QjAxRUQ5RjdFRkQwMgorOjEwMzY0MDAwMkZGMDcxOTZDOTA2RjRBNzZCQ0RDQ0FGRUVFMkRGN0QwQgorOjEwMzY1MDAwNzgyODhCRjlEMzBGNjUzMUZGN0ExQjhGMEY3NDgxMUY4OAorOjEwMzY2MDAwMDlFN0QzOTc1OUYwRjc3QTA4OTk4QzcxNzIyMzYxRkNCNgorOjEwMzY3MDAwNjcxNDc4NzMxQUJGRTg5MTZGRjQ5N0JCMzMwMTRGNzNFNworOjEwMzY4MDAwNDk4NzA5RTgzOUEzNzg5NjAyRjcwNjBFQTc1QUYxM0I1NQorOjEwMzY5MDAwNEFGNEFGMENGQTk5Q0RGQkQ5NkY2MkY3MDQwRUMzMTg0OAorOjEwMzZBMDAwNzQ1REIzNzkzQ0Y5MzA3QzA2OTQ4RTdGNzg4MDE5RkQ4NworOjEwMzZCMDAwRDhFMDBCMTZGNDEzNkU4RjY3RjEzRTkyOUM2ODA0M0VCRgorOjEwMzZDMDAwQkY4OUVCQTkzOTEzMkMzRTM4MUY5ODNERTFGNjMyODBCMworOjEwMzZEMDAwQjRCRjIwQTFGOEFBQjA3NkFGMkZBMEUzMzQxODk4OUQwQworOjEwMzZFMDAwNkY3MDEzQkMyRjQ5OUEzQUM3MDBGRTJFQTE2RTMxRTRDOQorOjEwMzZGMDAwQzlEM0Q1RUYzQzlCNzQyRTNFRDJERTUzQTg4NUI4QzIwOQorOjEwMzcwMDAwNzhDMjE4QUMxOEYxQUIyOUQ3OUE1OUZEMUI4RjFDOTlCOAorOjEwMzcxMDAwNzE1RjI2MjE3RjgyNkMyNkIwMzM4MDIzRTA4QkNBNDQwMAorOjEwMzcyMDAwRENFN0NFODQzQzdFMzc0MDIzRjJEQkQ1NDYxMjM0MzBEMgorOjEwMzczMDAwRDg2Q0MzRUYxMEIxQkM3RTcxMEU3MjVEMzEwOTI3RDIxNworOjEwMzc0MDAwRjU4NUY3NkFFRjUxREMxMDM2ODQ4N0MzRjk4RTMxRENEQQorOjEwMzc1MDAwMEVGODMzNTgxNTkzOTM4RTUzMzY0RDJBMDRCQ0Q3QUVDQQorOjEwMzc2MDAwRUJERjdDM0Y3RUU0Rjg4Q0ZCMjZEMDMyN0NFRjBBRTY3MAorOjEwMzc3MDAwRjk0MzA5RjM3OTY2NTNBMTA3M0U5RDZCMjQyRkNCODU0RQorOjEwMzc4MDAwOEM3RUMwODc3NTZFMjU4OEVENTYzMDNFMTdGNzM3MDQ1RQorOjEwMzc5MDAwNUQwQTY4Rjc2QUZDQ0VFNkYzQTNGRDM0M0JFMDdENzM3NworOjEwMzdBMDAwRjRCOEM5ODkyQ0IxQ0Y2MzdFREE1MjJFQjc0QjA1REY0RQorOjEwMzdCMDAwM0RBNTk1RDdFNDZDMkUzN0UwMEY1MkJDQ0RFNjMwMTYxMAorOjEwMzdDMDAwREZCQkIyOTk1Q0I4QjI1OTlFRjVCNzE3MzhERTMyMEI0MQorOjEwMzdEMDAwMDlFM0JBNUZCMDIwMURDNUI4MzMzOTRDQ0MxRTg0RkQ1NworOjEwMzdFMDAwODk3OTA4RkVBRDI2RjU5ODdGNTNDREUzMzEwNkFBNDlDNQorOjEwMzdGMDAwMzA0RkI3RTUzMUNDRUZEN0U3MDk1MTA3MDlGM0NFOTY0MworOjEwMzgwMDAwNkNENzNGNTdDNTczNjQ4RDVFQzIzOEE3NjRFRTVFMDAwNworOjEwMzgxMDAwRjM5M0JFMTdFNzA1N0U5RjZENkVDNTc4ODBCRTlEQTlBOAorOjEwMzgyMDAwNDU0MjM5MzczNTUzN0Y0QUUyRTc1QkI0NkNEOTJDRTEyNgorOjEwMzgzMDAwRUYzQkNDQ0VFQzFFODlERjJCRTc3RTc1MzVBNzJCRDU3MQorOjEwMzg0MDAwREU1M0UxMUU1MDM1Rjg1Mzc4RkVDNUJGMTNCNTg1RjkzOAorOjEwMzg1MDAwOTE0NkVFRkZDRURGQUNGNTMzNjYzN0E5RkM0QzA2MzQ1QgorOjEwMzg2MDAwRjdFQTJEQkFGQzcwMTNGNzM3M0UzMDc3OEYwNDdEQUYzRgorOjEwMzg3MDAwQkY2N0ZGODE4MUNEM0Y5ODRBMzAzRjUyRENCMzM3NzIzQQorOjEwMzg4MDAwN0Y1MkYwOTM5MjZERDI5QzhCODlGQjlDMTVBMEE3RDg5OAorOjEwMzg5MDAwRjcwRTc0Rjk1NDM2RkNFRTRBODVDNEJGNTdDOUUzOEE2MworOjEwMzhBMDAwMjdBOEJGODlERjk1MzkxNDg3NzY0QkM0MTlCQjRBRUMyQQorOjEwMzhCMDAwNDE0MzIyN0NDRTkyOTVFNzI0REUzMjAzRkNDQzBBODc3QQorOjEwMzhDMDAwRDkwOEYwOENBMTEzQzdCOTU1RUVCMEU3RTRGNEM2NzE3RQorOjEwMzhEMDAwMzc5NDhDREEwMjc5NDNENzY3OEY5ODY5Q0RDMjUzMEUzQgorOjEwMzhFMDAwN0VCRkM4N0IwMEYyRDZBRkZEODZDRTFGQ0IwNTMzN0RGMQorOjEwMzhGMDAwNzQ3RkQ0RjU0QUY3NUMyQjU1RDFCNTVCMEI2NjFBQTlEQQorOjEwMzkwMDAwM0RFRkJBQkY3QjJCOTRENzZDMUQzRkQzNDhFRDYwRDdGQQorOjEwMzkxMDAwOUREREQ5RjAwREUxMzVEOTk3QjNGQTA2RDFERkU1MzM1NgorOjEwMzkyMDAwMjEzRkI4RUI0MTU2OUU0REVCODNFMEU3RjI3QjQwMTUxQgorOjEwMzkzMDAwRTMyNUQ0QjM2QkI4RkQxMUYxQTMwQUMzNEIwQzRFNjQ1RAorOjEwMzk0MDAwQkZGMzcxQkU3NkI3Njc5N0FEMDFGQjJDREI4RkUyRUY1QgorOjEwMzk1MDAwMDlEQ0FERjhENjgwREZEMzk0RTlBRkNFQTY3MEM5MkNEMAorOjEwMzk2MDAwMjk2ODg2N0JGMTZGODY4NjcxRkIxNUY1NzcyRkQ2NjQwMworOjEwMzk3MDAwMzFCOURDMzg5MEY1MjdGMDQ1RkJBOUZCNjdGQTQ5ODM5QworOjEwMzk4MDAwN0U1MjM0RkQwNEZFOTk3RThFRjZFREE3RTE5RkU5RTdCNQorOjEwMzk5MDAwRkI4QUI2MUZFMTlGODlFRkNDRkQzMUM3RjcwOEY0QkI2NgorOjEwMzlBMDAwNzQwRERCMEY5M0EzMzZDREZERkY5M0Y1Q0YwRjAzQkI1MworOjEwMzlCMDAwN0ZGMjI5NEIxMkYwRTFEMjY3RkUzQkJCMUFGQzNGRUVDRgorOjEwMzlDMDAwMEY3REQ2RkVBRTE5RjJCRTk3NDdEODc3NzFFQTIyRUM4QQorOjEwMzlEMDAwM0IzOUNCNzdCNjlCQTdFNjQxMUU2QkJCNzk5MjZBN0VEQgorOjEwMzlFMDAwQjVCREJGNzM2NUJDNUFFNUM3M0M5QTJERjJCNUQ5RUY5QQorOjEwMzlGMDAwM0EyRTdERTYxM0ZDOUVFMDUyNDNFQkM3OTBFNzRCQzZBMAorOjEwM0EwMDAwQjMzODlBN0U5RDlCRjg3Qjg3RTFEQzNGNEFCQ0UwQzlENgorOjEwM0ExMDAwNkNBNjZGRkYzMUQ4Rjc0NDM2ODUxQkIzMDlGNjJGQzc2NAorOjEwM0EyMDAwRjg2RUQ3OTdCQ0JGOEE3OEE2QzdBQjhBRUM1Njg1RTJGQQorOjEwM0EzMDAwN0JDQzlCRkU0NkM4M0JBRDdFMzhBNzUwQTZGMzc4MjJEMAorOjEwM0E0MDAwNzNFMjBFRTgyRjc2N0NCMzlCQzUzN0RCNTg3Q0IzQzI5QworOjEwM0E1MDAwRERCMThBMUEyOTcyM0M3QkRFNURENkNCMDhCOUVBMDE1QQorOjEwM0E2MDAwRDI3M0RGMEZFMjg2RDMyQ0EyN0NDQkNDQzkxMzU4QkMxNworOjEwM0E3MDAwMENDQTA3QjZENkREMDVGMkIzODdGRjNFREI5Q0IxMjM0NworOjEwM0E4MDAwRTM0MUNFM0I3MzEyMEM0RTJBRkZCQjMyMkE4RkMzM0M1QworOjEwM0E5MDAwRTY4Q0JENkMyQTNDMkZCMUQ4ODc1NUIyRjgzOEYyQzdGNgorOjEwM0FBMDAwQUU4Q0IyREYwMzdEQTEzREM0M0RGQ0U2NzBDQTBENzQ0RgorOjEwM0FCMDAwMURGRTNGQzg5ODM3RURDRjRGRjA0N0JCQTdGMjBBQjdCRQorOjEwM0FDMDAwNTdDN0IzOTk5RkI2Qzc0MEU3NTlEODNCMEYzMTNFNzVFQQorOjEwM0FEMDAwQ0M1Njc1NDBEQzZBREQ4MDAyRjBBMzUzMzI0QjNFQ0JGRQorOjEwM0FFMDAwMUVEMzNCN0U0QUE2RkYyMDk0QzVGODc0QjlGOUYwQkNGQQorOjEwM0FGMDAwQkZGMzc4OEJEM0UzMzNBMDFCODU2NTEzNjRGODUyNDI4MAorOjEwM0IwMDAwOEY1RUJGN0E3MjgyQTY3Q0VERjQyNEUyNTNDNzREQUY3QworOjEwM0IxMDAwQ0REMDk0Q0IyQjA2NkJEQURGQjQ2MDg0QTZCRUQ0RDJCMgorOjEwM0IyMDAwMzFCQUZFMDJGQ0ZEM0FGQjkzOThERjdCQThFREY0REI5MworOjEwM0IzMDAwQjNDMThGREQyRTdCMjVCQTlFQzUyRjNDRkUzNkU0NUZEOAorOjEwM0I0MDAwOUY4MDlGMjAyOTY0NzEzMUY2QkQ0NjdFMUU2M0Y0MTk2MworOjEwM0I1MDAwMzVFNzMxN0I5RjMzODNERkFFOEFGM0VCRUVFNUVEQzNEMAorOjEwM0I2MDAwMzhCRUZFM0M0NkU0OEJGRkIzRTczMTA5MDNGNUJGRTdGRgorOjEwM0I3MDAwNzlGQzU1QkEzMjMyNjk1NzNCRDJBNzcxMkZDQjYzNkVBRAorOjEwM0I4MDAwQTQ3RTBCN0M0RkVDRkIzQjJEMjFGODg2RkJFN0ZGN0RGMQorOjEwM0I5MDAwQzRBQ0E4Q0U2NUVBMjIwREY4QkJCQTkzNzYxREMxNzNGQQorOjEwM0JBMDAwOUJBN0I4OUZCNEJDRUQ0QjMzREM5M0ZBN0VEQjBBOTQ0MQorOjEwM0JCMDAwRTdBOTU0N0YyNTUyQkVFOTY4MjcyMzc3NDIzQzM5QzdERAorOjEwM0JDMDAwOEU3OTM4NEI5QkFGQzAzODc1NjI2NDM2QzJEQTk2MkI1QgorOjEwM0JEMDAwQjBCRjY1OTE2QkIwQkM5Q0ZGOUVFRjlFRjg4RUE5NjA1NAorOjEwM0JFMDAwODdGN0ZDREE4NUZCQzEwMzcyNzhEODQzRDA4RkM1OEU4NgorOjEwM0JGMDAwRkFBMTM0NjNDRTNBRjAxM0Y2QzQwN0YzNkVBNkUzOTU0OAorOjEwM0MwMDAwRkVEN0Y3MzEwRjdERjk0RTA5RTNBNkE1MzJEOTIzNDEzRQorOjEwM0MxMDAwRkU3RDI0MEVGQjJCOTVGRjM0N0EwNTdEN0VENTI0NjYzMAorOjEwM0MyMDAwNTc0QkMxQzdBMUY1NzI5MTdEMTM3RTRGM0FDNkVGQTRFMQorOjEwM0MzMDAwOEQxREM4RkMzQTUzMjc5QkY3OTRDODJDRUM0RkQ0NUZEQQorOjEwM0M0MDAwMzY3MDkwRTZCQjdDQTY5NEVEQzZGOUI2REVGNTk4M0FFMAorOjEwM0M1MDAwMjU4NDU3NDY0NjIwQUNEQjM5Q0IwOEY5RTc3RkM4N0Q4MQorOjEwM0M2MDAwMkMxOUYwNDREQkUzRjdDMUZBRUFFM0IxODkyNDhBREVEOAorOjEwM0M3MDAwMTJEMEMyRjVGMDZDRDBDMzcwRkU5RUUzQkI2NjYwMEE0MgorOjEwM0M4MDAwRkMxRTYxQTdEMTBBN0FENDY2NzU4MkZGMzJBM0I4NDBDMAorOjEwM0M5MDAwQTk1NkFENEI3RUU5NDZCQzA3NjE0OUVFMzY4MUZEOUVEMworOjEwM0NBMDAwNERBMTVBNkZDRjhCNjE2NzZFMUMyOEY0NzYwMzQyNjE3OQorOjEwM0NCMDAwOEY0OEU0MDdFQzNCQTgzQzNFMjBFNDY5RUE0MDgzRTZGOQorOjEwM0NDMDAwN0IzQTFEMTI5MzhCRTBBRkQ4Qjk0MDY5OEU3RkU5NDBGMworOjEwM0NEMDAwREE0RjQ3MDkyOTdGMTZGNTY4NDczNkRDNDdGRjU3Q0Q4RAorOjEwM0NFMDAwOUZEMkQ3MEFGNDc3MTgzQjA5QzQzMUVBRjk3Qzg0M0NBNworOjEwM0NGMDAwOUY2RkZFNzM3OUZCMDMzMjA5MDA1RjFDQjhGQ0YyMEU2NAorOjEwM0QwMDAwMUY5RDU3RkI2REEzNDY4MTVEMTBFMzM1MEM2NDc5QTZCQQorOjEwM0QxMDAwQzREOUZEMERFNjFCQkU5OEEwNDA1Q0JGMTRDRTNDNDY0NgorOjEwM0QyMDAwRjdGQUYzOTA4RjA4RjFDM0JBMTcyRDhGQzIwNzUyRUI0MQorOjEwM0QzMDAwMUM3NDdGNkY4M0JDQzBCODMwRjA2REZCRUZFMjhDNjAwOQorOjEwM0Q0MDAwM0YwQTg3RjgxQjAwMkY5MzdFMzc3QzMyN0NDN0M3RDc4QQorOjEwM0Q1MDAwNjYzMTEyRjQ4MzdDRUJFMDc5QUNGOTlFNEY3RjA5NzlGMAorOjEwM0Q2MDAwRDRGMzk5QkY5OUM5OUY5RkNCNjEyNUU3REJGOTVDMEUxRQorOjEwM0Q3MDAwMkI4RERFNDQzODhGOTlCNzRGQzY3QjkxRjM1NzRCMjM3OQorOjEwM0Q4MDAwNzc0MjdDNDBCMUUzM0Q3RDIxODc0MkRFNENDMDk3QTM2MgorOjEwM0Q5MDAwODAzRjE5NUZENjQ2NUM1Q0JFNzM3OEJGNEMwRTRBNjVBNworOjEwM0RBMDAwOTY2RjU3M0FDMjg1RkJFN0U1OTEyNDZDMjdFNDU1QzgyNgorOjEwM0RCMDAwRTkxRDM5RkUxREMwRDdBNThENTRCRUU5MzhGRTc1MDMzNworOjEwM0RDMDAwNDY4M0JDRjRGMjg5RDkwOUZDNDRGOUM0NTNBREUyODNCQgorOjEwM0REMDAwQzZGNkFGOENDMDI3QTYwOTEyRjI4OTg1QzI0OTJBM0VEMQorOjEwM0RFMDAwMkFFQkYxNEY5QzUzNTNFOTNDNjYzNEU1RTBGNzk0NDVFOAorOjEwM0RGMDAwRkRBRjdCRjhBNTdGRkNGRTE4OTc4RkY5QjZGMDUwRjA2OQorOjEwM0UwMDAwNkI0REY1NzE1RUY4OEVGQzg5NjQwNUY1RDhDQThEMTI4QworOjEwM0UxMDAwRkUzOEUxNEE1M0Q5MjRGMDJGNTYzRTI4NjE3QzBGRkMyRQorOjEwM0UyMDAwMEVEMDNGNDUwN0VCQ0RFQTczOTAxQjIzRjk3ODVFN0RGQQorOjEwM0UzMDAwNEQ2NDA4QzIyNzMyRkQyRjAzRkQyQjIzRDc3MzNDRTZDOAorOjEwM0U0MDAwNDczREVGM0I1NTdGM0JDNkQ1NEU4NTJDNUVGNjlEMzFGOQorOjEwM0U1MDAwNkRGQzZFOENDRjhCRTc3RkE2N0QyNkIyNEQ4MUI4OUIyMworOjEwM0U2MDAwNUZDNkYzQkQyQ0UyQkM1NzYyRjEzQjg4RTc4OUY4OUI0MworOjEwM0U3MDAwMzhBNzEzNzEzODBCN0MwRjU3NjU0NzRGMUI1QkIyNjEzNgorOjEwM0U4MDAwMUZEMjI3MUU1N0MyRUNGRUYxRUQyNjc2NkZBQkZENEYxOQorOjEwM0U5MDAwNDUwNjVBRkY2OThFMEZFMzcyQUY3OUZDODc2MTNENEI4RgorOjEwM0VBMDAwQUUwRTNENjNBMkU1QTU3NzNFRTc4MDc4QjlDMDY3QUI2QgorOjEwM0VCMDAwMzEzQzE0RjY0QkFEMTQ4RjEwMUY2Q0REMkM0RjBCMzFDMQorOjEwM0VDMDAwN0YyNzYxOTYyQUJGMjIxNjVGMkY4OTBDNDZGQzA4N0I0QworOjEwM0VEMDAwMjNGNEY3RjM2QjNEQjgyOTE1N0FGQzdDNzY0OEYwRjdBQworOjEwM0VFMDAwMzIyRTA3Q0I0MDBFODhEQURFQ0MyQTgzREYzNTIzQjlBOQorOjEwM0VGMDAwMTJERTczRURCNTM3NEMxRTg0OUVBNkZDOEU3MjUzM0FDQgorOjEwM0YwMDAwMzgwQkUzRUE0MjZGRUJFREQxNkVCOUY1REVGMUMwMzc2NQorOjEwM0YxMDAwOEFERkE5NTBGQ0ZDMEY0RDYyQjM4OTAwODAwMDAwMDBDRAorOjEwM0YyMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJCNTVCMEI3ODU0RDUxOAorOjEwM0YzMDAwQjU1RTY3Q0U5Qzk5NDkzMkFGM0MwOTg2QzQzMzkzMDc3RQorOjEwM0Y0MDAwNzAwRDM4M0MyMkUxRTFDNzgxNDAwMDIxMzhDMTVCNDU1QQorOjEwM0Y1MDAwNEQ2NTQwMjQxMTEzMTI1MEFFNTFCOERGOUM5MDgwODAwMworOjEwM0Y2MDAwRDQ4NkVBNTVEQTgyNEUyODI4NUFCNTUxQjBDNjhBMzAyRQorOjEwM0Y3MDAwM0NCNEExNUExREFCQURGNDU2RThBMDE0NzkxQkIxNTY2MAorOjEwM0Y4MDAwRkNBNDcyRDdEQUZCOUNDQzlDNDk4MjUyNkY4NzRGMzdENgorOjEwM0Y5MDAwRUJFQ0I1Rjc1RTdCQUQ3RkFEQkRENjNFODc4OUJGRkM1MAorOjEwM0ZBMDAwN0FGQkZGMDI0MEVEOEI0RjRGODIwQzgwMDk1NzA5MjBBRQorOjEwM0ZCMDAwMEEwMDMzOTc0N0NEMzZBNEMxNkU3MzZGRjUyMDVEM0E4MgorOjEwM0ZDMDAwNEM1RTUwMEM3MDkxN0VFMzAxQzRCRDVGNDlGMjEwMDA1RAorOjEwM0ZEMDAwRUJGMjRBNTBFQzAwQjc2MjVCNjY4RkY1NEIwMDRBM0I1MAorOjEwM0ZFMDAwRDIwMDUxRjMyQzQ3RUM3OUE2NkNDMkZGRDFGMzI2ODBBNgorOjEwM0ZGMDAwMTI5QzU3RTczQkJGMTRFMDFBODBEQkRDQzA3RjhEQzgwMgorOjEwNDAwMDAwRDQxRkQ3MjE3RUU0OUI2QTg1Mzk3RTVDMUZDQzkxQkM4RQorOjEwNDAxMDAwRjhGOTJBM0MxMzA3Q0FDODVBMkMwQjZDREVGRjJGQjlEQgorOjEwNDAyMDAwMkI0NEIwMDk2OTAwNEU3MzE0RDI4QTY5N0U1RDZFOTU4NworOjEwNDAzMDAwQUZGMzJENzI1RkExRjFCRjIzNDI2MzNCOEU3RjY3RkMxQworOjEwNDA0MDAwRjg4ODgyNzJFRDU5MzY2Mjg0MjhDN0Q2MUIyRjVCMTgxOAorOjEwNDA1MDAwNUY0NTNBOEUxRDA5RDBGNTlBMzVCNDE5RTUwNjlDNEY5NworOjEwNDA2MDAwNDBGRTRGNUYxQjFDNUE4QjVCM0IwQzVEMTdDODNFRUE0MgorOjEwNDA3MDAwQ0UxNDk5RjY1NUJGMkI4NUYxRDcyN0JCNDIwMkY2RDc1MAorOjEwNDA4MDAwM0JCQjhBRkMyODRGRDlFRUE0MzAwQ0M1NzU3NjI3OTkyNgorOjEwNDA5MDAwMDFEN0ZEMjZGRkY2RjFBNDlGQjJERDAzMjcwOTRFMTREOAorOjEwNDBBMDAwN0FBN0Q1MENDOEY3NDA5RUEyRDBGM0JFRTREN0U1NEI2MworOjEwNDBCMDAwNkNGNUZEOTc1NzBBQUFDQjA1MzBCRENDQTE5QUIwNUQyRgorOjEwNDBDMDAwNzgzRTFGNjAwNEMwNURBQkE3QjFGNkU1NjAzNjJBMTlFMworOjEwNDBEMDAwNjBGMkY5NEEwMERDNUJEREY5MUJEOEYzNDVFNzUzMThDMQorOjEwNDBFMDAwM0RGREMxNDgzOUVEMDc1RTE2NjAyQkNBNUY5MUYzQzNGMQorOjEwNDBGMDAwMTU4MEYyNzUyNkMzOTAxREI4QUY0RTZGQUVBRjk5NzBBNAorOjEwNDEwMDAwRDkzQThERjE1N0ZDNkFDQTU0REFEN0EyMURDODRDRTNEQworOjEwNDExMDAwMDYwOUExNDJEMkQzNTFCQjA5QjIwMEVFQjY3MUYxM0ZGQworOjEwNDEyMDAwNkZGODYwQTQ4Q0UzM0YxRkU5MTgwNkM4QkE0RjZDN0Y5NAorOjEwNDEzMDAwNzg4Q0MwRUNEOTQ5RjY5Q0E4RTE1RDNBMkY4MjgyRjJENgorOjEwNDE0MDAwNThDRjBCQUNGRDQwMEUyQzk2NEIxODFGNDAxQUY5NDM2QworOjEwNDE1MDAwRkY5MTAxRkI3N0MxRDMyQjkyOEM3ODk0NkEzRjkzMDgyRgorOjEwNDE2MDAwNEY1NjZDQ0JFMkZBRTc2ODM4NDlENEUzN0Y1REE2MUY2RgorOjEwNDE3MDAwQ0NGRjhFNzg1QTQzNzgyQUY5QjdFMjY5MERFOUE5MTc3RQorOjEwNDE4MDAwM0NBREZEM0U3OEJBODQxRDdERTA4OUUxNkNGQTlCMUM1NAorOjEwNDE5MDAwMUY5MEVGRjA2RDA1ODYxNzI2NzdBNzI1MzdENDhDN0MwNgorOjEwNDFBMDAwQjc5MjVEMDk1RjE3QTE4MUY0Mzk4N0VDOUIxRUMzRUJDMQorOjEwNDFCMDAwMEU0RkUwRjk3ODNCNzcyNkFCQzU4QjhCQkY4QjlENkY5RAorOjEwNDFDMDAwMDY4QTFCQjc2NjM0ODA4MkNGRTc2MDFCMUYzN0FDNjQ1QQorOjEwNDFEMDAwQkZFMjlFRkJEQjdFOTk3NjZFRkI4RTc2REVBRkQ5MTk1MQorOjEwNDFFMDAwREM2OEM3OTFDQzdFMzJEOTM1RDFFRTY0NTdCMjdCRkQwNQorOjEwNDFGMDAwMkVFQkU2NEJEOTc1Nzg0MUUwOURERUVDMEFFRTY0MTNCOAorOjEwNDIwMDAwQzkxOUIzOEJGNTA2QzJDREU3NjEzMzkwN0ZGNTY1NTdDOQorOjEwNDIxMDAwNjkwM0Q3QkI0RUFGMEM5QkE3ODZEODc5MDBFOTk1NDNCRAorOjEwNDIyMDAwMTg1RTIyREYwNzJGMTU2NUVEN0ZCN0E1MDI5QzBEREQxNworOjEwNDIzMDAwRUQzNzhGMDZCOEIxMTRCQkFFQTBFRTdCNUE5NTAyOEE1QgorOjEwNDI0MDAwMkZGOEY3MzE2QzQ2MDU2QzRDOUY5QzU2OTc0NjI2RTEzQgorOjEwNDI1MDAwN0VBNzNGRENEREFGNTJGRkU0NzEyRTNFMUVGOTcxNUI5RAorOjEwNDI2MDAwRERGQzY3NDI0QjIyRUI5OERDQUQ1Q0RGODFBOEQ5M0ZENworOjEwNDI3MDAwMjQ4RTFFODlCNDIzOEUyRTREQTAzNzcyN0UzQTQ3RENFMQorOjEwNDI4MDAwNkM5RTEwRjc0RjlDNUYxODRFQjQzRTlGRTYwN0QwNTVDQQorOjEwNDI5MDAwOUU4QUY2OUJCOTQzNzBBRjQ1N0JERjMyRUU1MzBCRDk1NAorOjEwNDJBMDAwQTdBMjJDRkE0NjBFRUU1NzY4NUJFRUI3MEZDNkU3MTRDRQorOjEwNDJCMDAwMDc1MURFRDRCNjk2NTZCNTQwMUI4RkZFNTNBQkE5RDEzRAorOjEwNDJDMDAwREEyRTI4MjJEQUE5QjY1NDA4NzkzRDNERjU5OEVBMzE2QworOjEwNDJEMDAwOUU2N0Y0MzMxQkM3ODM2NUU0RTU4RDI3M0JCMkYxNUUyRgorOjEwNDJFMDAwMzYzRTZDQkQ4Q0Y1NkYxQTA3NEFBODk3Mzg3OUE1ODdCQQorOjEwNDJGMDAwOUZGRjcwMDE2OTdEN0VENEREMERCOEJGNTAyRkZFMzY2MworOjEwNDMwMDAwNTA5QjM3NjIzMkQ1MDFFQUVCRUFCNjBEQURCNjVDQjQyQworOjEwNDMxMDAwMkY3MDdDMEM2QjdCQ0NBRjcyMUM4MjkyQjBERjRCQzlEMAorOjEwNDMyMDAwOUJBOUNCMTFCNzVGRDkzODNFN0MyOTdERTVGNEQwOTdBNgorOjEwNDMzMDAwODY4RjFBMjM1RTVDNjZGRkZFQ0Y1MTBFNTc4NkUwNTZDRAorOjEwNDM0MDAwRDFGRThCRkM0OUVCQzA0NUY2RDdGMUJERDlBRjBDQzAwRgorOjEwNDM1MDAwRkQyNTQxMzc1RThERjhGRTg1OUZGMEJEMDg3NEZFQURFQQorOjEwNDM2MDAwQUQ3NDJFRjk0RERERkMxQ0VGM0I4NUVFRjE4M0QwOTU0RAorOjEwNDM3MDAwNURDMEM3NEY2RkRCRDJBQTE2MzM3QkIwN0U0NjlCMkY0MgorOjEwNDM4MDAwODFGN0Y2MDQ3QTVDODI3RjY4Rjg2NkZFNDk3MTFCRjU1NgorOjEwNDM5MDAwNTNEODRCRENBOEQxRjQ3QjQ2ODBEOTE0RjcyMjEzNzk4QgorOjEwNDNBMDAwQkUxN0YxRjI3NkI1ODdFNzc3MEQxQTVGQTM2RUU3RTRFMworOjEwNDNCMDAwMzgzRDBDODhEOTE5N0Y2MTE4NjREODM3RDNEM0NEMTkwQgorOjEwNDNDMDAwRkFCRUY3RkI2N0EwREY0NEQyNjA4ODgwMzg1OUUxMDk2NAorOjEwNDNEMDAwQjdCNkM0RTFBNEM1QjM5RkUxMjQzNkRGREUwOEM1RkQ0RQorOjEwNDNFMDAwOUIzNTNEQURGNkVDOEI2ODM4MTJDOEVGRUExODIwMTAwQgorOjEwNDNGMDAwMDczQjA0NTVDNDdERDYxMTBFN0FEOUU3QUM5RTM4NTJERQorOjEwNDQwMDAwMTNDNjJCRDIyNUM2Q0ZFRTM5NUU0OTE4MEY1MkM2RTUyQQorOjEwNDQxMDAwOENEN0VDMzQyM0MxOEU1MzEzRUMzODI5ODFBRUQyRTkwQQorOjEwNDQyMDAwOTAyMTlFRTk3MTZFNUVDN0ZBOTU1OTI4Qzc1RERCMDQzRAorOjEwNDQzMDAwM0EyNjI4NUU1Qjg0NjEwMDlCREE3RUVGQjdGNzI3QkNFMworOjEwNDQ0MDAwQ0E1MjBFQzZGQ0I2QjY3NzIyMzZDNDcyMjVDNTMzODY2QworOjEwNDQ1MDAwREY0OEFCODI3OEJCODFGQzlERDFFRkZBMTUxN0UxQTc0RAorOjEwNDQ2MDAwNjE2NTM2RjIzRkQ1RjY4NzU2MUJCMkRFRDJCMjVFQTI0OAorOjEwNDQ3MDAwOUNFNjk3NkRFRkI3OUE3MURFOUI0N0ZFRUEwRDlBQ0ZFNworOjEwNDQ4MDAwRENGNEE3QzgwQ0NGMjVGMERBOUFCMDhGOEQwOUI0OUE2NgorOjEwNDQ5MDAwQzBGRkM4QjdDNEY3OTY4NEYxQ0IxM0ZBRDcyNUQwMUI1OQorOjEwNDRBMDAwMTJFOEQ1QzZGMTczRTcwQkNDNEZFNkEyRkQ0ODcxREZFOQorOjEwNDRCMDAwRTYzNzdCMzQ3Qjc2RkIzRkVFNDBCMEIzM0NDOTgwRkJGNAorOjEwNDRDMDAwRTlDRDlDN0VCM0VEQTg3RkI1M0Q4RUY2MUNGMzkzQkY3RQorOjEwNDREMDAwRUIzODk2ODBGRjZFQ0QwMDk1Q0UwRkE5OEY3OEY2NEEwNworOjEwNDRFMDAwNUYzODFBOTQ3OERFRjFGRUJGRDI1RkZCNTNERTA5ODY5NworOjEwNDRGMDAwNzM3OTlGNjhBNEY3ODhCQURDN0Y4RkRDNjNBNzg3M0E1QgorOjEwNDUwMDAwRkRCOTlGRjJGMUU5OEYxOUY3ODU3NUExNDY3RkU2OUYwNgorOjEwNDUxMDAwODRGRTNGRkRDNzFBQUQ3NkY5OTVCODdERUFGQ0U1RkY0QworOjEwNDUyMDAwQkMyOEQyN0E0NzNDNURGRTJEQjhFRkFBODlFMUMyMDZDRAorOjEwNDUzMDAwRTRBQjRBRTMyRDlFMzMyMjlENjNGNTM2RUU0RkU1QUZBMworOjEwNDU0MDAwODk3RTNBNjdBQTkyQzM4NTRCOEFFM0Y2MDlFRDQ1QjRBMgorOjEwNDU1MDAwQ0YzRENCNDQ2NjFGQjU5OUQ3MjNGM0MwNjcwMTJDODVBNworOjEwNDU2MDAwRjZCODVDOEQ0RjIyRkZCRTY1NjIyMzlENkI4NzFCRDMxRgorOjEwNDU3MDAwQjM0OEZFRTE1RTVFRUZFRDczNUQ5OTc1MDdEMjdCNTI0NQorOjEwNDU4MDAwRTY1ODY0RTREQkYzQzA2NEQ2RUUxNTk1NTU1RDg4RTMyOAorOjEwNDU5MDAwOEI2RDE3RDkzOUJGMjdDNUM1RjRGM0I1RTc2QjdGMTMwQQorOjEwNDVBMDAwQzZBQjZGM0MzMjVCM0Y5MEU2Q0VFQUEwN0M3NUFEMDRCMworOjEwNDVCMDAwNUI2NTkyQzdGNzM4QzNDRDhGQUNDM0Q2QTIxQzczOUI4MworOjEwNDVDMDAwQUVDQUEyRkM2RERFRkY1NDk2Rjc0N0JFNzkyQjI1OUYzRAorOjEwNDVEMDAwQzBGODYwMjhDOTFENTgzQkQ5NDJGREYzNUJCNDU2OUQxNQorOjEwNDVFMDAwQzJEQUREREY2QzdGNzMyOEYyNzdBRDExN0Q5QjkxNzlBNAorOjEwNDVGMDAwRDc3OUFGNzMxRUNBRjU3MTEyOEZDMzFGOUQyRTcwOTJBQgorOjEwNDYwMDAwOUM4RjdBMDNDOTVFQzJBQkQzOTEyQ0QwRTFFMTk2OUQxOQorOjEwNDYxMDAwQjM3MERFODdGMzk1MTQ2RjY2OEM3RkY3MzdFMjFDQ0FBMAorOjEwNDYyMDAwMzc1RjNEM0QyRjJCODA3NEE2OTdFMzY2RDdGOTc5NTkwNAorOjEwNDYzMDAwRjNFMkNFRkIwNTY3Q0M0Q0NGQkIyREYyM0Q5NDVGRUU5MQorOjEwNDY0MDAwNEVDRTE1NTQ4MUU5MzlCRDEyRkQ2NUJFOTY1RjIzNUVERAorOjEwNDY1MDAwMUFCN0Y3NzJFRTlCQkMyMkQzRUI1MTZCMjM3QzhDMjBGNAorOjEwNDY2MDAwREVGMzYwRTYzODkyNTMxRjU3RjI3RUEwRDk0MTc4MUVFMAorOjEwNDY3MDAwMjAwRjhGQ0ZBM0IzRjIyNjdBNDhERTE4Q0VCMkRFMjUwNAorOjEwNDY4MDAwRENCMDNDMUFFOUUyQ0Q2OUVCNTUzQTBCRjc2MUZFNEYxRAorOjEwNDY5MDAwNzI2NDI4RTVENDBGQ0I5MTAxRjM0RUM4NkUyRjhBQkYwOAorOjEwNDZBMDAwOEY4OEU1QTkyQkI0NzhDMEY5MEVBOTBFNTZCNzFFN0FFQgorOjEwNDZCMDAwMzYyOTQ0RjVDQzIxRjUyRjBFQjBDN0YzNzMzRkE5NzYwOAorOjEwNDZDMDAwM0E1NDNBOEMzRjcxMzhDQ0E0RDdDM0U2RTBCMUZCNzBDMgorOjEwNDZEMDAwREM4MjREMTI4QkEzMEIzNjY1MkVFRkEyNzg4MEY2MkM3MAorOjEwNDZFMDAwODQ5RUVCQUVGNDRBNkM5RTNFRkQ0NENEQUYzNEY4MDk5NworOjEwNDZGMDAwRTQ1N0QyQjlENjk3OUY5NDZGRjY1NjZFQjFGN0VEMjc2RgorOjEwNDcwMDAwRDU1QURFNUVCRTQ5RjIxM0NFQUI0QjFDNjZCODFBRUIyRgorOjEwNDcxMDAwRUM0REFGNkYyNTNDNTYyRjRFMUE2RTQ1QzFBQjM3NTk0NQorOjEwNDcyMDAwOTk3REEzMEU4N0VBQzZGRTgwRDM2MTRFQzVGNjU2MEQ2RAorOjEwNDczMDAwMEZEMUE2MjQ1NkE3ODg1OTE2MTZGN0M0NTUyNTMyRTk3NQorOjEwNDc0MDAwQTc0QzA0QjMwRENGMTVEMUU5OTNGRDlDNkU3MTYzRERDOQorOjEwNDc1MDAwQjZEMjUxMkE5MzdENTc3ODY1QjZERkVFN0VEN0VDRUI2MworOjEwNDc2MDAwMDRBQzZCQ0VFMTNFRDI3MURDODlDNjg3MUYxRDg1RjI5OQorOjEwNDc3MDAwOUQ4NEQwOERBMzUwRUZFN0M4RDBCOENFQjkxRDYyNDg1NAorOjEwNDc4MDAwQTU3M0MyQUM5ODJCMzBFRUQ1MDBGN0Y3QkEwM0RCMkQzQQorOjEwNDc5MDAwMTNGMEFGMzUwREQ1MzNBODNFQkEzMzI0N0QxNEQ1NkE1NgorOjEwNDdBMDAwOUY4QkY4REYxN0YwOTY4NUYyREJCQkI2MTk5RkEzQzc4NgorOjEwNDdCMDAwNThDOEFGRUFEQThEQ0ZFQjYxREQ2N0UyNTA2QUNEMUZGMgorOjEwNDdDMDAwNDUwNzY5Q0Y3MUREQzYwRkZGM0M2NDdGMUNERkRENUVFRQorOjEwNDdEMDAwNDdDNjMxMkNDMTYxMzgwQzQ3Q0RFMjNBQzVBRTlCMDhDMworOjEwNDdFMDAwNzY4RDIyOTM1NzVDOTExNDIyM0Q4QTc5RkM3Qzk4MDI0NQorOjEwNDdGMDAwNDIyODg5MDBFMUM2N0RFM0JBNUYwNjBGMEVEOThGODA5QgorOjEwNDgwMDAwMTBFRjFGQzFGNDcyMzQ4ODc4MUE4OEZBNzBEQTE4QkY3MgorOjEwNDgxMDAwNzhCRjE4QjJFMkJBNjVFOUEwQTQ5MjNFMUZBRDA0NzA1OQorOjEwNDgyMDAwMzA3REFBNkVBNEE3NjQzNDk4MjkzRTc1NzlCODNFRTcxNgorOjEwNDgzMDAwMEFFMDZGNjc3RUVGQ0JBM0ZBNzhDMUE2MjQ2NkJGRUFEMQorOjEwNDg0MDAwQzdFRkZDRDM0RjQ3OTJCRDJBMzJFMkZERTgyMUMyNUQ5QgorOjEwNDg1MDAwMDk5QjBGNkM2OUIxNzkzRTY5RkFFRjNDOTJBN0VDMDlBQworOjEwNDg2MDAwQUMyQkE5REUxNDAzOEZERUNDRTI2NThBOEZDNTJENzdEMQorOjEwNDg3MDAwRjQ0N0EzMDgyNzREMjlDM0Q2MDJFMUE0N0Y5RUI3Mzg4OQorOjEwNDg4MDAwMzZCRTdBQzVCMjIyM0UxRUVCNTUyN0M1QUIyNEI2OUY3NQorOjEwNDg5MDAwREExRDU2ODY5M0I5NkI0NDg1OUQ4RkI5MTY3NjNFN0U5OAorOjEwNDhBMDAwRDQ5MkM0RThEQTAxQTVDQ0NGRTY5QTIwNDBGQkMwNUNFNAorOjEwNDhCMDAwMzA5QkM1NzVBRTcyQThCNTgzQjJERDRFNzE3RTVENDQ4NgorOjEwNDhDMDAwNzQzMkZCQTg5QUREMkM2NDlGQTdCREU5NkNGRDM5QTQ2NgorOjEwNDhEMDAwNjMzQ0I3MEU2ODM4OUI2QkUyRjg4MTVENDI2ODJCOEJCNgorOjEwNDhFMDAwNEYwRDMyRjk3Rjk1NDk2MDcxMkVEMTFGN0Y0MzQ5MThEMgorOjEwNDhGMDAwQzVDOTNDREY2RDM0QUVFRTIxQUI2Rjg1ODdDQjIwRUFCNgorOjEwNDkwMDAwRjIyMDlFRUE0QzkxMDUzRkE3Nzk3RjZENjVGNzFBRjU3NQorOjEwNDkxMDAwQjg4RjI0MjdBQjJGOTQxNzUxRkU3QTMzOTgyRDc0MkYxQworOjEwNDkyMDAwMjVGMzc4QTZDQjUzMkY1NzRFMjE5QzYyRkY0MTMzRjZENworOjEwNDkzMDAwRDczOTc4M0NBRTRCRTVGNzNERTBCMDg1QjZDNkFGNDcxQQorOjEwNDk0MDAwMzJFN0YzNzFCMjkzRkM2QzM0QzMwQkY5QkQwOUZCM0Y0MgorOjEwNDk1MDAwMDVERTVGRTYyQzk1QTNGOEJDRDMwNEFCRTk5RTg0RTRBNgorOjEwNDk2MDAwMTkzQzM0NkU1REE0RkIwRjI1M0MyRTM2N0IxRDY0ODdGRAorOjEwNDk3MDAwRjQxQjY3RDM3QUNGODkyQzJFQTEzMzNENTQ0QUY5REYzQgorOjEwNDk4MDAwNzNFMjA4QUE2M0U3QUVEOTU3QkU4MUU4MTc4NkI5NDkzMgorOjEwNDk5MDAwODRCOUNGQkZDN0NFQTdCQjM0OUM0NTI5RUZBN0YzMEE4NAorOjEwNDlBMDAwRTkxN0IwRkRDOENCRjNGQjgwQzhFRjcxM0VGMkYyRkMxMworOjEwNDlCMDAwNUZEN0FCREU1RkI3NDY2MkY2QTg1QkM5RjE1MEQ3RjRBQworOjEwNDlDMDAwMDE5QkI3Q0UxMUM5MjI3QkQ0QkQyNDVENDNCODNFQTU1RgorOjEwNDlEMDAwQzkzREFGMjk3N0RDNDFDNEM3M0NDOUU1MTZGMDUxQURFQworOjEwNDlFMDAwNUE2MTIxQkFCNjU1NjBCNEJFNUVERDlBM0Y2Njk5OEFCNworOjEwNDlGMDAwRjk3Q0Q0NUEzNTFDQzVFNkNEQ0NBM0YzRUNENEIzRTk4RAorOjEwNEEwMDAwNzk3M0UzRUM3RUFBRTU2NUE3NkMyN0JGMDkxN0JBRTlCRAorOjEwNEExMDAwMUU2NjcxOTI2RjMzRjM1MzZFOEY1MzJEODU5QkU5OUUwMworOjEwNEEyMDAwNjZCRTNCRTIxMEIwN0ZGRTNERjk2OTc0Q0UxRDc2ODcwRAorOjEwNEEzMDAwMkRENDdGQjhERDYzMjI1QTcxQkJDNzExQUQ5OEFGNjYyNAorOjEwNEE0MDAwRjQyOTBDRTFFREM1MUE3OEQxNEU4QjA0OEU5QkRBNjcwMAorOjEwNEE1MDAwRjc1OUJDQjg5RTNCOUZFQkU3Q0M3M0VGMTVEMTdENDE3NgorOjEwNEE2MDAwNUQ1RUE0ODhDRTVGQzQ1NTUxMEVEOUU1MTk4MUU1MDk3NAorOjEwNEE3MDAwOEI5RTE1OTVBNEExMzE1QzJEMjI1Q0ExRkYyRkQ0NzBEMworOjEwNEE4MDAwQjU2OEM3Q0JGNzkyOUYyRTIyM0MwREVGODk0QkFDMkIxQworOjEwNEE5MDAwRjdCM0U3MkZCNjk1MDMxRkJGOUY3MEE3OUZGNzQ4QjdERgorOjEwNEFBMDAwNDg3NEFGNjZEMTY4NUM4N0U4RDQ3Qzk5RjkwMUY2NEYwOQorOjEwNEFCMDAwRTJGRDZBMzEzQjQ3MjA2QUExN0NCODVFRTQ3OTAyRkFFNAorOjEwNEFDMDAwNTMzNkU1MTFGNTFEOTJEQTFEMkY2OTVERUEyRjhFRjUzQgorOjEwNEFEMDAwRjc4NTlCRTFGOTI2Q0RDRTU2NzYxRTBERDdGNDEyNURGMworOjEwNEFFMDAwRjM5MjkzNzA3MUU2Qjk3RDZGOENBMUZBRUE0NUMxNERERQorOjEwNEFGMDAwRjFCRTg3MUY2QTdBQUIyNzNEMzlEOTNFNTk1RTU0NEZDNAorOjEwNEIwMDAwN0E3MUM2RjRENEVENkYxQTJFRUE4MUVCNDFENzRCQkQxMgorOjEwNEIxMDAwNTlEMzkzREVBRjhEMUZBMUU5QTExNjM0QkRFRTE4Qzg5RAorOjEwNEIyMDAwRkQ1REYzNkZGRDFDRDFGNzE3NDhFM0UzNzU3Q0NERDcyRQorOjEwNEIzMDAwRjYzNzIxOUY5RjlCQjU4ODFCNUYzMUMzOTc2MkI5NDZBQgorOjEwNEI0MDAwQUJGQkIxRUJDQzBCNkRFQ0RFNDhCN0E3MkVGN0YyN0NEQworOjEwNEI1MDAwRUUwNzE4QTc5NUQ0QjQ5ODlEQTMyNkE4RTlFRDlFRkE3MAorOjEwNEI2MDAwMjY0RDdGOTI5REM3OTUyMzREMzlCNzM1QTJGRTE2M0UzRgorOjEwNEI3MDAwMkJGQTk4RjJBOEU2OEE1QkQ3NkE4QTNBNTg1RTdBQkYxRgorOjEwNEI4MDAwRThBNjdEOTVGREIyRjIzQURBQjc4RTNCNjk5QjYwRUVGRQorOjEwNEI5MDAwMTg0OTc1NDYyQUQzQkYyRTVGNTkzRkZGNzVBOTFDNzc2OAorOjEwNEJBMDAwNjE5MjQ3OTdGMzg4MTA2NkY2NTI1RjEwREMzQ0NGOEQxOAorOjEwNEJCMDAwNUFFOEZFNTBGN0QzNDQ3OUU3NkJGMjhBNEU2MThDNzA2NQorOjEwNEJDMDAwMzVDOUUzOTNDOUJGMDFDRjQxMjY4RkZERTAzMkI2OUVDMAorOjEwNEJEMDAwN0E2ODk5Njc2ODZDOURDM0FBQzM0QzdDODc4MUM3MDFCQQorOjEwNEJFMDAwMUQ5NzQ3QjRGQjg4MjMyQjVGNjY3OUIwQkVDRUZEM0Q5MQorOjEwNEJGMDAwRDcwOTM0NjZGNDVDNDdFNzVGOTJDRkNGMDFERDJGM0FFNworOjEwNEMwMDAwRDMzOEZFQ0I1QTNFNjA3QzdBOUNBNTFGRERDM0U5RkFGRgorOjEwNEMxMDAwRDRGNTE2RTc5NzA2RkRFOEZFQTVGQjkzNkVENzdGRDU4MgorOjEwNEMyMDAwQUY2MDc5MjZDQjU3MUZEMEY2Q0Q3QzI0MkI3NjJFMTA4MworOjEwNEMzMDAwM0VFOUJDQjM1QTEwOTc3NkMzQjlDOUYyOUEyOTAzM0UyQworOjEwNEM0MDAwQjMwNDdBNzlBRUVCMjlGMTc5QUM5RTcyRTc5MUZFQTdCNQorOjEwNEM1MDAwRDhCMzREOTQwNzQwNEJGNkZFODJCOEJDRUM2M0JBRUY3NAorOjEwNEM2MDAwQTI3ODlBMDlGQzdEMDZBMDU3QzY5REU3N0FCRUE2OUY0QQorOjEwNEM3MDAwRDdGODVCRDc4RDRCMUM1RjlGQTE5Q0EwRkU5QTkxOEJCMAorOjEwNEM4MDAwOEIyODhGRjg0N0JFOTdFOUVGMjRCNDVCMjZFMDdDQjUwQworOjEwNEM5MDAwQzcyM0U1NEUzOTU2QUY1Q0ZCRjdCMEU4QTJGQkMwMUQ1OQorOjEwNENBMDAwMUU0M0JENTA3QjdBM0ZGM0VGM0E4OEFDQTJGQTc2RUUxMgorOjEwNENCMDAwOUFGNzJBNDY5MUREOUZDNjdDMUNGOUU2Qjc3QUQ4QjlFNworOjEwNENDMDAwNzc2MkNCRUQyM0E4OTQ5REJCQjI5MEQxNzc2RUJEODM2NAorOjEwNENEMDAwRDM2Qjc4M0UzNzc3NjVDOTkzNzQxRkZGNzE5MjUyNEUzQworOjEwNENFMDAwRjhFRTVBMkZCOEE5REUxQUJCQjU2NEY5MkREODNGRDYxNQorOjEwNENGMDAwNzE2NTJBQzk3RDY4Q0JDNzE1NjNBODZFNjgxNDk5QkYxMgorOjEwNEQwMDAwMjg1QjFFQkU5MUZBOTUwRUQxNDc1QjlEMEZFRUU1Qjc2RAorOjEwNEQxMDAwMTBCRUNEMkVFNjZGODdCNTczQTI1OUUyMzg3QjU3OEI1NAorOjEwNEQyMDAwMTMwN0JBNUI4RUMzQjJFNkU2MjIxM0FEREI4NkU3MTM0OAorOjEwNEQzMDAwRUVCRkNBMjJCNzg3QTlFRTdCQUQ5RjZGMzNFOTBCQ0JERAorOjEwNEQ0MDAwRDQ2Q0M0RDE3MTgxRTdERjM1MTZCMDExQUUwRTQ4OTEzNQorOjEwNEQ1MDAwQTUyNEZGODFBNThFNjE0RDI0ODA3OEUxMUFGMjBCNDVEMAorOjEwNEQ2MDAwQUJCM0IwNkU2MkVCRUFGQUQyRDc4RjY4RkVBMkNGQTNFNAorOjEwNEQ3MDAwOEZFQkE0N0M4QUNFMEY0RERFMTMyRDRGREY0ODc5QzIxNgorOjEwNEQ4MDAwODk2RDg1NjkxMEE3RjcxM0I0MkZENEY3OUQxODE3NUZBNQorOjEwNEQ5MDAwRUNBNUZFM0I5NEFGREY0Nzg0NTg1QkEzREQxQjFFOTA2MAorOjEwNERBMDAwNUEwN0QwRkI1QkNDRTM4RkM2RTdFNTlGQjQyNUQ5MDg1MworOjEwNERCMDAwOEY5OEM3MUI5RjRCRkMzQ0MxM0NERUYwMUNGREU2QTg1NgorOjEwNERDMDAwMzFERkQ3RUEzQkIxQ0ExNUU4MjUwRUU5NkQ2MjlFREZGNworOjEwNEREMDAwOTU2RkNGMzg3NjE1RjRDOEYzNzVCRjRCMUNBRkU3RjU2OAorOjEwNERFMDAwRERGNzJDMUZEQTEzREVDNzhDNzJDMTI1RDYzRjFENDRCOAorOjEwNERGMDAwQzM2MEVEQjc4RDdDMTdFNTlEOTRGMkNGRUQxMUFBMjcyNgorOjEwNEUwMDAwNUJBRDZFMkJFQUY3MjhGOTE1QkQwNzdDNDlFNDc5QTI2MgorOjEwNEUxMDAwMEQ3QzYxQzRDNUQxM0Y4RUYwOTExRjJFRjg5MEZCREQ1MworOjEwNEUyMDAwODI3NjIxNDRBRkQ4RjdBRjdGNDAyNEZFM0IzNjBBRDBDQworOjEwNEUzMDAwNEY4OEFCQjMxRTU5N0YyM0I5REQzOTVGNjA1NTdGRTRERQorOjEwNEU0MDAwM0ZCNzRERjBBOTRDNDJDNTlFNTA1RkJERDE1RkVFQkI1MAorOjEwNEU1MDAwQkVGQUJFNzU5NTdFQ0Y5NEE4RjcyQjBCQjRGQUNBMDc5RAorOjEwNEU2MDAwM0VBM0RFNzk3REJFMUJFMTUzM0FCQ0E3REU0RjA3MDNBQworOjEwNEU3MDAwQUM4RTNBMUJBQzYxRURFOEY2QjZCMjFDOTRGRjUzRTE4MAorOjEwNEU4MDAwQzg0MzYzQzk3RjFDMkU3NjRGNzIzQUQ4QzA1RTAyOUUxQgorOjEwNEU5MDAwRUQxODcxNjEyNkVBRTc1NUJCQ0I0RDcxRTM2Q0IwOTExQgorOjEwNEVBMDAwM0RFRkM2OEI4NkNGNkI3N0VDMTE3MzgwRjFFRjFDOEJENworOjEwNEVCMDAwRkNCQkVDMkU3QUFERDFDQkZCMzY2RTVGODA2NEZFN0UwMAorOjEwNEVDMDAwNTRBQkI3RUY1RTNDQUExRjNERDdGNzdCRjIzRTZFNjc0RgorOjEwNEVEMDAwNURGRTkzREI2RTc3NTI3RUJBRTdFN0U5M0I0NzkzN0Q1MQorOjEwNEVFMDAwNTM1QzZFODI1MUY1MDYxMTAyMjMwMDhFNkRFMDcxRTg2RAorOjEwNEVGMDAwQjhDREY1MjRERDk3MUVERjc4NDMxNkQ1ODM3NzQ4NUQ1RQorOjEwNEYwMDAwMTYxRkNFRUI3QkFERDI0OUY3MDI3RjMzNDc5RDZFNkEwOQorOjEwNEYxMDAwOTEzRjRDNzI5ODQzMjJDNUJGMzE1MzgxQkQwNzFDMTM4QQorOjEwNEYyMDAwMzY4M0VDNjFBRkU4MTk0RTQ2OUYzNjg3QzI0ODlGQTI5MAorOjEwNEYzMDAwRjc4Mzc0NkU1RjQ4RTZFRkU5QjVGNzdFNzdCQ0MyRUZBMgorOjEwNEY0MDAwRDNCQUVGNEZCNDdCODRCMURBN0U5NzE1QTRFOUVGN0IzNworOjEwNEY1MDAwRDhGM0IyNTJGRUZDOTM4RERCNjdEMjdDMjdCNjQ4NkU0NQorOjEwNEY2MDAwOTJGN0VDMTY4OUNEQkYxMEVCNzgxM0UyRjAzOEUyOERBMgorOjEwNEY3MDAwRTJEN0MyRjc0NTFGNDFGQUM0MzY1RTI3MkY0NERDRDI4MAorOjEwNEY4MDAwN0Q3MURENjI0OUIxQjg3QUUyQjE0Q0U3REIyOUIwRkE1NAorOjEwNEY5MDAwNUFDN0U1NDIyNTU0Q0VGNEFFRTFEMzg2N0YyRUUyOTE4NgorOjEwNEZBMDAwOTEwQUVEQUI0ODFGODkzOEZENTdFQkZFMjU4NENCREUxNworOjEwNEZCMDAwRTI0MTAyMEU3NDdERTk3ODg4RTExMzE4MkU3NUJCQTdEMworOjEwNEZDMDAwQjUwRjlCOTBDMzA2QTgyQzVFQTgxMzYxMTBFNTA1Q0QxNAorOjEwNEZEMDAwMTYxODY0MjYxQzk4OTI3REU0RTc4RDM2RTc1MEJBNjc3MAorOjEwNEZFMDAwRkEzMjg5QjdGNzlBRENBRjUzQkRGQ0E1NDk5NjA0NkMzOQorOjEwNEZGMDAwRkY1NkUwNjFFM0VGMTU3RDkzODk5NjMyQTJFQzdFNDA4NworOjEwNTAwMDAwMkMzMzI5MjYzQUVGOUFBRDJDNUUyNEM2OUI4NzBBNzg2QQorOjEwNTAxMDAwN0VFQTI1QjA2MUZCNEM4MTlCRTc4RkQwQzBGMjA3QkREMworOjEwNTAyMDAwQzUwREU2NTI3RTUyOTk5MkY2ODU4QzJDM0YyRjk4MzExMQorOjEwNTAzMDAwOEJERUUzNTY4RTRENUI5QThGOTlFNTJGMEE2NkNEMzI1MworOjEwNTA0MDAwMjNBRTJCNDdBNEJERTQ0NTdBRUIxNjNGQTdBRjRFMkIwQQorOjEwNTA1MDAwOTE5MDZFMTI2RTk4MzUwOUY5RjcxNjI4M0YyRDI4ODkyMAorOjEwNTA2MDAwQURBM0NGOEJDRjM3RDJGM0I3RkEwNTlFQTBCNkRFNjJFMQorOjEwNTA3MDAwNUY0REYxRkU1M0ExNkI5MTQ5OENGMUJGMkJDMEUxNTdGRAorOjEwNTA4MDAwODUxODFEOTUyMDhGRjJFOTY3RTg5RDZBNDlERkVERDkwMworOjEwNTA5MDAwMDI2NTVCNDEyRkNGRTcwMUFDMjQzRENFNTM3RjdCOTA2RgorOjEwNTBBMDAwRjIzNUZDRjk2RDg4QjdFQjM1QkNDREIzRDlDMzg0MEJCMQorOjEwNTBCMDAwNTgyRDlERUVDNjg1OTdFMjkyQ0I0Q0ZFM0Q1MzMzRjdCQgorOjEwNTBDMDAwRjVFNkYwMUUxQTNGMTg1QURDQzc2QzJDMTVEQzc4MzE1NworOjEwNTBEMDAwQkRFRjM4OEY4RTA5QzdGNEY5NzA3RjlGNEFCODVGQjQ2RgorOjEwNTBFMDAwQUJBMEEwQUREMUE1MDQ1NDcyMTVDNjM3NjFFNzZGQkY2MAorOjEwNTBGMDAwQTI3OTlCNTU4ODI2MzEzQjU0QjkwOTdGMDIwNDRDMTc4RAorOjEwNTEwMDAwQjFBRDRCNDEzQ0EwOUU5NkJDNzQ2NjNGQzFGRjRFM0Q4NQorOjEwNTExMDAwOUZDQUU2REY2NzJDRDVGMDc4N0Q0NDc5QUMwRDg1RkExRgorOjEwNTEyMDAwMjQwODE5MDU2OEVCMzNCMEY3QUMxOUQ3M0Q2MTBBQkMwOAorOjEwNTEzMDAwNUQ4MDdBQUMzNUJEOTVCNzQ0MjZCRjZENzY1MkZFNzI2MAorOjEwNTE0MDAwRTY3OUQxMzcwM0M3RDU2QTc5M0I1QzEwQzNFM0YxNzlCRgorOjEwNTE1MDAwQTc2N0YwRTZCNTcxMzhGQTQwQzNDRjY5NEYzODZGMTlDOQorOjEwNTE2MDAwQzUwRjBGQUYzQkUxQzJCRUJDNjVDODNGRDUzQkFEODRBOAorOjEwNTE3MDAwQ0VBNTQ3NDBGOTczMDFCMzM3N0ZERjMwRDNEQ0ZCRjdBRgorOjEwNTE4MDAwMTc3RkI4ODJFNzNCQjA4NTlGQUY1NjMzQTg4RTM0RDZFMQorOjEwNTE5MDAwODIxM0Y1MzEwRDY1Mjk0NTVBNDI1QTY0RUZFMzQzOEM3OQorOjEwNTFBMDAwOUZGODlDOTRBN0M4Qjc2N0YzRjczNUUwMjc3RkQ0RUQ0NQorOjEwNTFCMDAwQThEQkE3ODdERDUwNjRDQUNGNEQzNjkwQzg1RjA2QzMxMQorOjEwNTFDMDAwNDYzNzlEM0JCQUZEMjY4Qjc2MTY2Rjk2QkNDNEVGRTMzRgorOjEwNTFEMDAwOTYwOEQxOTY3NEEyOUZDM0YzOTJGNEE1Rjk2NUNGNzM5NAorOjEwNTFFMDAwNzNBQjg1NEM1MUIzRjE3NjE2OUZGNEI4MjRFMzFGQzIxQworOjEwNTFGMDAwQ0ZCRkVCNUVEMjUyQTg5RDlCQzM2MDE4RTFFQURCRjIwMQorOjEwNTIwMDAwMUQzRDJFQTE3RDFDODU3MUVGN0ZCRkQ1M0VBNDIyREMwNAorOjEwNTIxMDAwNkZCNUI2RjY2NEIxNEEzNjkzNUUzMjZEM0U4QUNCNEJCQgorOjEwNTIyMDAwMzZFNUY3RTNGMUY4MjcxMENGMDcxQkQzMTkzRTU3Nzk3RQorOjEwNTIzMDAwNDQ2NkM3OEE4RTFDOTBGMUQxOUQxRDAyQzg3OENFQ0RFMAorOjEwNTI0MDAwRTg0ODY3QjRGMzdDN0Y0NjU3M0NENTZGMjJFNUZGREQyNQorOjEwNTI1MDAwRUYyRDlGMUFDOEU4MTM0RkJFMzkzMkMwRUY1NzZDMzQ5OAorOjEwNTI2MDAwQkYxRjc0Mzk4QURCMjkxRjNBNjc0NzM5RDAwRTdFRkI4RQorOjEwNTI3MDAwNkE3NjVGRTg4N0VFM0E0NkI4MjgxMDhEMjgyMTdGNTI3QgorOjEwNTI4MDAwMjQ5NURCQzVENkM0RkM1QURCRDcxMjM3QjdFMzkyMDNBQgorOjEwNTI5MDAwRkNEQzVEMzI4MUJGREYzM0FCODM1RDg0MDdBOTUzODRCRgorOjEwNTJBMDAwMTBEMjNGMzgyMDk2ODQ5MUI1NTk4QkNCRDY2QzEzQzg1OQorOjEwNTJCMDAwNzFGNjQ4OTI5MzQxOEVBQkRGNDA1NTIyNTQyN0NERDZFQworOjEwNTJDMDAwNzA5MjMyMjhDREQwRkY4MDEwOTA0OEFFRDlGNjA1MENGMAorOjEwNTJEMDAwMzcwRURGMTU4NkY5MjI3OUU1OUQ0QzFGMDE5RURGRUEyNgorOjEwNTJFMDAwNzgwMkYxQjQ5OUU0RkM2MjlDMDBFOTg4OEIxRkNDQzY3QgorOjEwNTJGMDAwRkVCODc5QTU3MTlGNEQxMjU4NkJDQzhCNTEyRjQ3MkY1QgorOjEwNTMwMDAwODUyN0JGOEVBN0MxMzA5OEUxMjk0MTNGRTgxRjJDRkZCOAorOjEwNTMxMDAwM0M4N0U3MzhBNTREOTg1RDNDMzYwRUU5MUIzQjI1MDhEOAorOjEwNTMyMDAwQzkyQ0RGNjRGRTczNEU0OTYxRjdGNzJCMzUzREU5QjhCMAorOjEwNTMzMDAwRjMwRjA0ODc4MkYzQkE0QThEN0E0QjU1OEM3QTRCOUZEMAorOjEwNTM0MDAwNkFENDUzQTZERkE4OTc3RUIzQkQ4NkZFRkU4MUZGMzBFOAorOjEwNTM1MDAwRjRFN0Q0MEMzN0QwQjkwRDYzMENGQzU3MzY0RTM0RDA3QgorOjEwNTM2MDAwMUVGNTNBMDM3RkZFRUE1OTA2QkFCMEY1MTYwM0ZGQzBGMAorOjEwNTM3MDAwMERGMzBDRkQ4MzQzMEIwREZENTc2RDVCNjJBMDg3QjRFRAorOjEwNTM4MDAwREY2RkUwQkZCQTYzODVBMTdGNTg3OEFEQTE3RjQ0RTdBNgorOjEwNTM5MDAwNEYwQzc0NDlFNDY3MDZGRTUxMDczNzFCRkE0NzQ3OUZENQorOjEwNTNBMDAwMzFGNDhGM0RGRUEyODFCRUI2RUIzNzA2RkVGMUU3Rjc4MgorOjEwNTNCMDAwMUFFODA5RjBBNjgxQkZDQ0Y2OUU4MTlFRUNGRThCODE5NworOjEwNTNDMDAwN0Y0QUY2Qzc4NkZFNjlGMjI5NDNGRkY0NDE5RjFCRTgzNgorOjEwNTNEMDAwMEFERkQ3MDZGRUI2MkIwMjRGMTQ2MkM4OUY2RDVBNzdCQworOjEwNTNFMDAwNDgwNThBQ0ZGMjhGQzcyMTlFNkZDQTMwRkJDMkM0NzRCMgorOjEwNTNGMDAwOTk3NURCNTM4NTVBOUVBNkUxRjYwQkIwREY2NkYyN0UwNworOjEwNTQwMDAwN0IxQzVDNDc3OTQxMjZFMTdBMDZEMDdERUZCOTc2ODEzNQorOjEwNTQxMDAwRTFCQUFGRjNEOTg1RjlBRTM5NkUxRkE5OEEwRDBCRjA0OQorOjEwNTQyMDAwMTg5RDNFRDU2REEwMzNGREQ5MDZGRTdFQjM2NTQzN0Y0MgorOjEwNTQzMDAwRkZDMDIwNDM3RjRFOERDRjQwRTczNjk0MUFGOEFGNkMwMworOjEwNTQ0MDAwNTQwQ0I0NDc5RDZBRTBDRjVGRUQzN0QwODVBREIzMEQwNgorOjEwNTQ1MDAwRkMwMzM3MDQwQ0ZEODM0MzM1ODZGRUFCQjYzNTE4RThGNAorOjEwNTQ2MDAwMjFFRDhEMDZGRUFCM0I1NDQzRkZCMEYwNkE0M0ZGODg0RAorOjEwNTQ3MDAwQ0U1NjAzNUQxMkQ5NjBFMDFGNzUzMDY0RTgxRjFEREQ1NAorOjEwNTQ4MDAwNjZFODFGN0JCQ0RENDA1RkRCRDU2MUUwMUY3RjNFNkNDMworOjEwNTQ5MDAwQTAyN0MwMDEwMzdGOTlFRDVEMDMzREQ5RkQ2NzAzRkZBMAorOjEwNTRBMDAwOTRFQzIzODZGRTY5RjIwOTQzN0ZFRDI5ODQxRkU1Q0Y0MgorOjEwNTRCMDAwQUYwQUVDRkREN0Y0NDE5RjE5RkFBNTBDQ0NEM0U5N0VENQorOjEwNTRDMDAwMUE5MjdERjQxRDdFNjI5RUFFRTc2RjE1QkVBRjBDRUJBNworOjEwNTREMDAwREM2QjZBNjBERkM1N0Q2OUUyNzk5REEzQzhDQkNFMzdGRQorOjEwNTRFMDAwQ0NERjZEMzYxNjY3RjE4NDFBQzJBRTVBOUEyODNGNzUyMgorOjEwNTRGMDAwQTkwMkMzMURBNTFBNTVFQ0JFMzA4M0JENTc2MDQ3QTM1MgorOjEwNTUwMDAwNENERkExNjE3RTgzNDQ5QUM5RTNBMUZBMjEyNTk2ODdFNQorOjEwNTUxMDAwMEVCODM4RTJCQkU3QTEzOTQ1QzBGMDdGNUQ1MUMwNURGMAorOjEwNTUyMDAwNTQ0MkY1RDgwQkU1NTQ5RkRDMDlFQTJBOTIwM0NGNTc4MQorOjEwNTUzMDAwMTdCRDY3N0EzQkM5Nzg2RkE0QjdEMzZDQThCRkI4RjUxRAorOjEwNTU0MDAwMEUyNEI1MEUxODdFMDlCRjlENjYzQkNERjhCQkU3RDU4RQorOjEwNTU1MDAwRUU5NTA0RENERjkyQjhGOTFGQzJCQUM5OEMyNTY0NkJFMgorOjEwNTU2MDAwMTBGRDBCRkRGNDI3NDEzN0EzMUYwOTY2MzNGQUQxQTBDNAorOjEwNTU3MDAwQ0NEQTBEQzE0MUFDRkQ1OUQwQzdGQTM3MDY0QjE5RkQ0NQorOjEwNTU4MDAwNzg1MDYxNzQyODM4OTVCNTlCODM3RUY2N0M0QjcwMzZENQorOjEwNTU5MDAwQTM5RjBDMDY1OEJCMkQ1OEMzREE2NzgyMERBQ0ZGRDkwOAorOjEwNTVBMDAwNjAyM0EzOUYwRkFBQUM2RDBGQUU2NkNGNUYwQ0I2MzIxRgorOjEwNTVCMDAwN0E0NzcwMDNBMzdGMUQwQ0IxQjYyM0I4OERCNUJGMDkyMAorOjEwNTVDMDAwQjZCM0ZFOURDMTBFNDZFRjBBODYxOTFEMEU3NjMyN0FERAorOjEwNTVEMDAwNkYzMEMyRThGREMxODM4QzdFMjMxODY1NkQ2N0YwMzg5QgorOjEwNTVFMDAwNkI3RjE3RUM2MkZENkYwNUNGMzNGQUI0NzZERjNGQjUwMgorOjEwNTVGMDAwODhFNzVGQkE1RTc0MUE2MDEyQzM4MzlFRDdDRUE0QkFERQorOjEwNTYwMDAwODVDMDUxMkE5RDM1RDQyRDA5RjU0M0EyM0Q0RTZBRUI0NAorOjEwNTYxMDAwNDgxM0YxRDhBNjNDRTc4QUEyQ0RDRDcxRjlGRTdGMTZEQQorOjEwNTYyMDAwRjE3QkMxMDc5MjQxNERDMkY4RDc0NEM1M0M0MkIxMjkzNAorOjEwNTYzMDAwMEQ0MkNERUNGRDJBQ0ZCQkFCMzU1QzQyMDZDRkI3MTc5MAorOjEwNTY0MDAwNjg3MjU1NkJGRTUwNDJGODFDQzRGMEY5RDZFNUQ0NDk5NworOjEwNTY1MDAwN0E5RERDMzIyMDMwQkYwOERCODVCOTI2OTVERDEzRDg3MgorOjEwNTY2MDAwNDM0NTk0RjczRjM1MjA1MDREQjgzREQ3NzBDNzFCNkM2QworOjEwNTY3MDAwM0RCN0FGODgxNkE5QjA4NjMzNkZBMkZCOUYwMzIyQkI0QworOjEwNTY4MDAwMkZFRDZCQkQ3QUVEREYyRkY0RDlCRkVCQzQwMDNBODc2NQorOjEwNTY5MDAwQTY3RTIzQjJGQkY0QjcyNUM3NkNCQTFGQjk0RkQzQ0I5NAorOjEwNTZBMDAwN0Q0NTI2NDMzQjM0RDdERjQ4NzI3RTUyRDhGMEU0REQ5NworOjEwNTZCMDAwQzg1MkI1QjhEMDQ1NzlFQkY1NTQ1QUEzREY1NzgyMkNDMAorOjEwNTZDMDAwQjFFRjYzNDE3OTlEM0U5OUZDMDEyNjc2NDRERjA0MkFCRgorOjEwNTZEMDAwNkIzQjcyMDI0RDM0RkU2NjJDMjA4ODBFOENCMUU2RjVEMQorOjEwNTZFMDAwQjY5RjQ0NzkxRUQ0NzBGMTYwOTFDOUQwNEVDRkY1QUYwQQorOjEwNTZGMDAwMjVGRDFDMkQ1NDBDRjJBOEI5QjJGNkJEN0JEN0UzMjRDRQorOjEwNTcwMDAwRDczRjVFRkJFQzk4OTAxRkQzQjc3RTJGQjE2QTgyRjYyRAorOjEwNTcxMDAwRkRENDYyNDE3RjRGQ0RGMzQxMUJFOEY5MjBFQkFGNUEzNgorOjEwNTcyMDAwQ0FFRjY3N0U4ODc1MTlCREFGRkM1MDhCODdFNzFBMjRENgorOjEwNTczMDAwMTYyRkFCODQ2NDFGRTVEM0U3MUE5NjBFQTRGRDI0QzY4QQorOjEwNTc0MDAwQ0QyQTFDNjdDMjcxNTVDMEJGODdBOEZBMzA4NUUxMEIwRQorOjEwNTc1MDAwRTcwMzdBRUY1Njg1OTkzQkQ1N0Y3N0U3RUFGNzFFNTE0NQorOjEwNTc2MDAwN0IyNjk3NDdBMUY3QjA3Mzc2NUFEQkE4NEU0NTlDM0M0MQorOjEwNTc3MDAwQ0RFMkQ4Njg1MUI1NjA5REZDQjYyOTU0MjQ4ODBDMUYzMQorOjEwNTc4MDAwMTYwMUU1QURDRTQwN0NGNDkyMTdFODM4NThBNEZERkIzNQorOjEwNTc5MDAwMThGRDM5RTI2QjNCQ0Q3N0Y2OTU1MTgzRDg3QjkzNUQ0RAorOjEwNTdBMDAwQTM2NUQyNUZCMzA5RUQ0MUY3MzVCRjEzRjk3NzEyNzRFMgorOjEwNTdCMDAwQzU0RURGNzFCODhBREJEODc3RkU5NDQ0OTBCRDQ2M0I3NgorOjEwNTdDMDAwRDhGQjkwM0QyMjM0QkVEMDRCRkM3QzVGQjNEQkRCRDlGMQorOjEwNTdEMDAwRDJENDEwOUJEN0Y4OUVFRkY3MUFBRTdFQUZFMUFENjI0MAorOjEwNTdFMDAwRUY4MURDN0I3MURFNDU5RDEyQUI3NzYwNjRCNEQ4REY1RQorOjEwNTdGMDAwQ0JGNzRERjU4RDZGRjYyRjg4REI0NzdEQzcxMUZFNUQyQQorOjEwNTgwMDAwMTQ0NDhCRTNCRjg3M0FBRENEQUJFMzQ5QjQzODAyNkRBNgorOjEwNTgxMDAwRjY3OEY5Mzg4RTEwRDdFRjkxMUUxMEQ3QzcyOEFGOUZCMgorOjEwNTgyMDAwNjk5NTVEMzdFMUQwMjhBQTI2OEM2REUwMDkzN0ZCQUU3QgorOjEwNTgzMDAwNEVGRkJFNkUzRUY4NTk1QjhENzAyMDFDRkJENUY1QUM1QgorOjEwNTg0MDAwRkU1RDA4RURFQ0Y5QTJEMkRCRjM4OEFFODdBRTQ5RDk1NAorOjEwNTg1MDAwNTRCRkFDNkU3QTNEMUJBNUJCQTE3NUZENjRCQTdGOUU5QgorOjEwNTg2MDAwMTU5QUZCM0FCNTk1NUI4NDYzNTQ3N0EzNUYxQzI1QkZGQgorOjEwNTg3MDAwODgwQTBEMkJBOTI0QkRFNUQ5MDkyQkU5OUU3N0E2Qzg3NgorOjEwNTg4MDAwRUQwMDZGNzIzQjIwOEUxNDMxQURFN0ZFRDAwRjRFRDE4QworOjEwNTg5MDAwNzhGNDAzMjZCRkVFMDc1NTJCMzg3RUY0N0Y4RkQxRURDOQorOjEwNThBMDAwMTdBNTc3RkQzNTg3REU3RDk4QkJEODc3MjFGNUJCQUM5MgorOjEwNThCMDAwNjk4NEFGODU1NDc5OEFGMTc5QTE3RTNFRjNCQ0UwMkVFQworOjEwNThDMDAwQ0MwQjg4RUZBNEM0RUQ3RkYyNTAxMkZCNzcyRjI3MDU5NQorOjEwNThEMDAwQzRDN0YwOUVCOEQ3RjNDQzJGNERGQ0RFRUQ1RTExQjdGOAorOjEwNThFMDAwMjg1MkJERkMzMEQzNTM4RDJEMzQ5NEY0ODRFN0IzMzQ2NworOjEwNThGMDAwOTA3MEZENzFGQkFBNjE3NERGMzczMTk0NDdGOUFBRjQwNworOjEwNTkwMDAwOENENUQ3RUMzMUM0NzlCODk4MTJCQkM3N0I0OEUyRjc4NQorOjEwNTkxMDAwNkE4OUYyRjZDODVCNEFERkY4OEFGMjA5QUIwNTU0N0E2NQorOjEwNTkyMDAwOUY4NEZFQ0ZGREZFMzA5N0ZGNEI1MzIwRkIxQTkxRTc3QgorOjEwNTkzMDAwMkJBQzhFMUVFMDY3RjUzRjY0RDk3QzZCODU5RUVCQjc4MAorOjEwNTk0MDAwNjhFQjc2RkU5M0Q3RDM2QTJFQjBFRjcxMTJFNTEwRENDOAorOjEwNTk1MDAwN0NERDQ0NzlBQ0M5NUMwRUZERENFOTI5MEZCNzgzMkVGMAorOjEwNTk2MDAwQ0Y5MDgxMUU3RTJFRTYyOTZDREY0REE2NTQxNkJGM0VEOQorOjEwNTk3MDAwMTUwM0M1QTQzN0ZEN0U0Q0FGNjMzQjNEOUZCMEI4MEUwOQorOjEwNTk4MDAwMTc5QTA3RjBFRjdCQzM3RDlEQTdBN0JCRUI2NzZGRUM3MgorOjEwNTk5MDAwQkNEM0VGOTk2MDVDRUZGNzgyN0U5QjVCMjJCQkNEMDJBQworOjEwNTlBMDAwMUY4QkZCODNFMTQzNUQzRjg2N0JDMkZGMDM1MDczQUZEOAorOjEwNTlCMDAwODZFMDM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNTlDMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEI3QkM0Q0VDMEYwQTNCQQorOjEwNTlEMDAwMUU4MjI1MzgxMDZDNjI3MTFEMEIwM0MzMDc1NkQyRjU2OQorOjEwNTlFMDAwQzE3MDI1NTA3RjA5MTBFNzAzNzExNjEwQTcwMjcxMDJEQworOjEwNTlGMDAwMTA0NzAzNzExODEwQkYwNjlBRkQwQzg4MUYwMkYxMUQ5NQorOjEwNUEwMDAwMjBCRTBFQzQ5NzgwRjgyQzEwOUY0MEIyNzcxOTFCMDM1QworOjEwNUExMDAwQzM1QTM2RDJFREZGODNFNEU3ODk0MDc2MzkxMENGMjRBQworOjEwNUEyMDAwMjMxQzQ2RjFGMEMwRjIzQzBDMENEQUJDMDhGRTNFNUVEMgorOjEwNUEzMDAwNTQ3OTA1MUUwNDdCQjkyMDY1NzY2RDAzRUEwNzAwRTlGOQorOjEwNUE0MDAwQ0Q0MjRBODAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QQorOjEwNUE1MDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJENTdEMEI3ODU0RDU4QgorOjEwNUE2MDAwQjVGMDNFOEY3OTI1MzM5M0M5ODM5MDQwQzQ5Mzk3MDQ1MgorOjEwNUE3MDAwMDkzODI0MjFGMkFBMUUwODQyQTRENDA2RjQyQTVBQUVGOAorOjEwNUE4MDAwMEVDODIzODY5MDQ0QjAyREI3NzI5QjIxMDkyRjQxMUI2RAorOjEwNUE5MDAwMTUyRDVBQjQ4MzQ1OEIwQTM2RjI2OEQxMDZFRUYwMjhFQworOjEwNUFBMDAwQzY1QkI0RDFBMjgyRDUzNkQ0NUI0NTBCNDk0NDExNkY5NQorOjEwNUFCMDAwQjVCRjc3QURCNUY3QzlDQzM5MzM0OTQwNkJGRjdCQzM3MAorOjEwNUFDMDAwQzdCN0IzQ0ZEOTY3RUZCNUQ3NUU2QkVERjVEQTNCNzZFNQorOjEwNUFEMDAwRDlDNUU0MkIxOUZCMDI3RkEwOUNBMzMwQzYwNjQ0Q0E5QgorOjEwNUFFMDAwNTE3NzVFQkI2ODdCMDlGQ0ZFOTlEREZGQjgxNjY5NjdEQworOjEwNUFGMDAwOTQxNzMzODlCMUQxRjA5RTY1MzA1NkNBRDg5NTRFRjhDNworOjEwNUIwMDAwMTVEQTk1QkQ3MEVBMEY5N0E1MzFCNjlGMjlDQzAxOEZBNAorOjEwNUIxMDAwQzI2QTU5RUFCN0EwOUZGRDlGMzMzRkJFOTc1RjcwNjc4NworOjEwNUIyMDAwNzVCOEYxQkIyMDYzRTk4QzVEQzFGODc3RTE2QzJEQ0JEMgorOjEwNUIzMDAwNTc4ODE1MjZFMzczREQ0OUJGNDMzRkI5OUJFQUUwRkI3NQorOjEwNUI0MDAwQjM5RkJBRTk3QjJCMUM0NkM5M0U5NzU5NTg3Q0YzNDU1NQorOjEwNUI1MDAwMEVGNkFCN0VEQzUxMjBFQUQ5MEMwNjY3MDJERTJDMUE2OQorOjEwNUI2MDAwRDc4MEY3RDBEQkVGMTFCQzA3NTQ4MDU3OEIzM0JFMTNCRgorOjEwNUI3MDAwRTA0RjhCQzBCRjlGNUQ5QkM0MEEzOUZDN0E2OTA0RkU2RAorOjEwNUI4MDAwMEI4NTg3RTYwRjc4NkVBQ0Q3QkU5OTk3Q0ZEOEJBN0FENworOjEwNUI5MDAwNDZFNURBN0EyNzk1QUJFQjdEREZDQ0IzMzFCNkIyM0U4MgorOjEwNUJBMDAwODNDQTQ2MTUzRTAxMzgxQUI3QjA1MDEwNTBFRjJFODQwNAorOjEwNUJCMDAwRjY0NkZGRjAzRjIxQ0Y2OUFBM0JCMzdDQTZCQTNEMEQ2NAorOjEwNUJDMDAwRkEyOTg4RDQ1NUI3NjZBQTM3QkEyNzM5MDM2RTFDMUYzRAorOjEwNUJEMDAwRTZFRUMwRjE5RDU0MDI5ODQ3MzMwMDFGOTc4QTc5QkFDOAorOjEwNUJFMDAwQjRFMDJDMDZFQjkxRTdCNjZCMjE4MEUzNTJGNzgyRTkzMworOjEwNUJGMDAwNkMyNEI2Q0IyN0JDRDkwNTVFOTc2NDM2NzQyMEJDMUZENQorOjEwNUMwMDAwNDMzQjA2RjMxREU2OUVGMjNFRjMzMkY2OUZEOTRGRjA3QQorOjEwNUMxMDAwNzk2QzYwNkMyMDNDNUZGREVGNzUxRDEyRjRCNzMyRDNEOAorOjEwNUMyMDAwQUUzNTQwN0Y0RkMwRjg2QjFDNTE3OERDQUFGRUI5MDMzQgorOjEwNUMzMDAwRkE3NEMyM0ZDNEUzRDA4REJDMUU5OTM3RDRBM0U2MzFCOQorOjEwNUM0MDAwOEM0NUJEQ0Y4RUY0NzNBMUZERTYzNzlCRUJENjdFRjM3QQorOjEwNUM1MDAwMzQ3RDEyRDJBQkQxNkYzRUFCNjhGMEI5RkZGN0Y2N0I2MworOjEwNUM2MDAwMjlFMDNDMzUyNUQyQUYzMTRFQkZGRDAyMzk1NEMwQjdEMworOjEwNUM3MDAwRjkxQjU5Mjg5QzFEM0I0RTlFRTYyRjBGQzJGQkJDOEQ4NQorOjEwNUM4MDAwMkEwQjY1RjNFNzY5QzAxNzc5RkM1N0Q2RTQ5Qjk0MTA5QgorOjEwNUM5MDAwMjg4Qzg1ODc0NThGOTMxMzU5OTdCQzM0RkIxQzE5RThEMgorOjEwNUNBMDAwMjkyRkUzRkE0NTEyRDI1NTczRDRGQUU2MzA2NkYwQ0RDNworOjEwNUNCMDAwOEZFQTdENEMxRkNBRDhEREY1MDU1NDZFQTlGN0U5QzhGNworOjEwNUNDMDAwMjc3N0ZGNUQ5OUQ1NTIxOENCOEY3RjExRjJFQTFFMUIwMworOjEwNUNEMDAwMjNGQTBCM0VDRTQyOEY0QkQ4NUZDNUFDMzk1MDVGM0ZBNQorOjEwNUNFMDAwMkFCREU4MkU4RDg4NUM0Njc5RTYxMjc0QkM1RUQyNkVDMQorOjEwNUNGMDAwQzhDMUY2QUYyODBDRTVBMDk1MUZFRUI2RTlEM0IwQkYzQQorOjEwNUQwMDAwQjVBMzY0QTkwMUYxOUNDN0Y5MjFDRjE2NzZFNjYyQkY1RAorOjEwNUQxMDAwQ0QzOUEzODJEODhGRkY1NUUyODdCQ0ZDNEIzNDA1QzYzMgorOjEwNUQyMDAwMUQ5NjI3Rjg2MUY0ODM0RTk0ODczREYzNUY5NkFFRTdBNgorOjEwNUQzMDAwMTUzMzk2NjRBMTAzREY3OUQyODE2RjQyREY3NEYwNzU2OQorOjEwNUQ0MDAwRjFDM0Q3NDc1RkNEN0REMkQ3N0FGRjdERUYzQkUwRkQzMgorOjEwNUQ1MDAwOTYzQ0JCQTY2NEM3QzI5NTc5NzEzOEEzQzIxRDRCNkYzMAorOjEwNUQ2MDAwNzk3OTgyQ0VGQzdERDM5OUI1N0NCMDNFQzRERTAxMUEzMAorOjEwNUQ3MDAwQkFCRjNFODNFOEVFREU3QThEQ0FCNTQ4ODczMEVGMDdCQQorOjEwNUQ4MDAwQjBFOTU4QTgyMzFERTJCOEQ3MTU1MUJERDc3RDhCQUQxQQorOjEwNUQ5MDAwMjBCQTRDOUZENUNDNTBGRURFOEZGNDM5MEU4NzVCQTkxQworOjEwNURBMDAwRUIxMzYwQUU3OUEyMEU1QkE0MEM3QkMwQkRGODdFMTAzNQorOjEwNURCMDAwRDU3NURDQ0FFRTkyOENGNkNGMDY3NUMwNzc4QTY4M0YzRgorOjEwNURDMDAwNzVDNUIzQzE0NkY4RkQ3RTE3QUY1RkJEQTI1MzBGNjYyMAorOjEwNUREMDAwNDU3RDFGNUNBN0VCNTk5MUY2NTAwRjRGNTJBM0ZBQzNCNAorOjEwNURFMDAwRkUwQkEzRTEzOTQ4RUQ4REZFRTZBRjM4QTEwNzAxQkVGOQorOjEwNURGMDAwN0I1REJDQkZCNTJCOEVGRDUzRkE1RjJCMDUzMjQwQjVFMgorOjEwNUUwMDAwNjBBQjJDRkRBQ0VEQTlERkFCMjMxRThDNzE3MkE0NUZERgorOjEwNUUxMDAwRThDMUU4RjdDMTY3NzRERDFENzk3RkI5NzQ2RjEwREZFMQorOjEwNUUyMDAwNkY2NDE1NzkxMkFDNDNFNkY0OEEwQzA2RUI2RkFGNjgyOQorOjEwNUUzMDAwMEVFMjk2REIwMzlGQzA3NzY0N0UwRjEyQkNBRTBDRkVCMQorOjEwNUU0MDAwN0VDNDhBREZFQjhENTFFQjMzNjlDNUNCNDE4NEQ3RDA1QgorOjEwNUU1MDAwNzMxNDQxQUZGMjBCNTk0QjhGMDBCRDJBNDk3NjNGRTlDRAorOjEwNUU2MDAwMUJENzAxRDM2NEMyNzhCMzJBOTgwNjcwQzk2OTE1MEM5MAorOjEwNUU3MDAwRTU4MTkyQTZCRTFCQ0QwNzA2RkQwMTlDNjMwOUNFQzkzNAorOjEwNUU4MDAwMTVCMzdBODEzMzE4MERBNzAxNDc3RjcwMUI3MEY0NEU0QworOjEwNUU5MDAwQTc3QzdDMkIzRDREQkE2NkNDRUYyNkMwRkU2RDZGQjc1QworOjEwNUVBMDAwRjk1MTVENDg0NTNDNDE1N0VDRjM1QjgzMzY3ODlFM0FBNworOjEwNUVCMDAwMTM3MEFERDFCQUNENjJCOUIxRkRBNjREMUZDNDQyNTEyOAorOjEwNUVDMDAwRkJGNzNGN0E1REYzQjBDRUYxMTY4ODVFNUZBOENGOTUwMQorOjEwNUVEMDAwMDY0NEYwMzg1NkI0QjNEMjlGMzEzRjVCQ0NGQ0FFMzVBQworOjEwNUVFMDAwQ0Q4RkE5ODE4QzBBNEZGRkYzQkJEN0U1OUY1NUUxOEU3QgorOjEwNUVGMDAwNkRGNzVCNDlBMkYxMjc0RDE5RjM2REM2Qzc2MzBFOTA4QworOjEwNUYwMDAwNUZDOTM4NUU1MTY0QkNFNDY5MzAxRTc2QTYzNkM3MUQ5MQorOjEwNUYxMDAwMkY2NTMyOENFN0ZDRkFGMDY5RTU0NzAzNUU3QjBDQkMyOQorOjEwNUYyMDAwQjc5QUUwNUQ2QjAzQkU4REIzRkU1RjM3QkNFN0NCN0ZGNgorOjEwNUYzMDAwMkU5MEJGQzQ3Rjc5N0RGM0RGM0ZCQUJGNjRGQzE1M0U2RQorOjEwNUY0MDAwRjk0ODY1RTEyQjAxNUY3NzVDRTUyNEZEREU5MDczRkY4NgorOjEwNUY1MDAwNkM3Q0E1RTJBN0IwN0U3N0JDNTQ3Q0UyNEExOTJCNDA0QQorOjEwNUY2MDAwRDcyMzIyRTNENzRBMUFFRDU3QkREMTc3NkZGMzgxMERCRQorOjEwNUY3MDAwRDZENENGRkZBRkY5RjQ4NkQ3QUY1QjBFOURBRjdDNkQ2MworOjEwNUY4MDAwNzgzRDgxMjEzRkFEMkM2NDIxMDdGNEIxQjJFRDJBQjJGNgorOjEwNUY5MDAwMzc1NzFFMjkxQkM4QTA1RkRCOUFFMTRDODc0OTI1NjM1MAorOjEwNUZBMDAwRkZEMERGNEE0M0NGOTg1Q0QyNEZGRjVDQ0YwMEZCNEU1RgorOjEwNUZCMDAwNkYwMkE1NkJCN0I3ODJGNEEyOTUxMkEzRUZENzgzREU2OQorOjEwNUZDMDAwMTYwMjNEQTZFNDk1MERDRTM5NThGN0VGNzBDRUMxNzE5QgorOjEwNUZEMDAwNkQ4Q0Y0RTk5MjU3MEVGOUNBODBDRTVEMjM1MjQ2MjlBMgorOjEwNUZFMDAwNDAwMjJCNURDNkYzQTNFNUE4RTdERTU1Mjg5RTdCNzgyQgorOjEwNUZGMDAwN0ZGMEJDMDJEQjI3ODhGNkJEQzE5NTkwMDdGMDQ0QUQ2OQorOjEwNjAwMDAwN0ZBMkJEMzk1MDExNDc3RkQ3NjU5OUYwRjM5MEQwQkI3RgorOjEwNjAxMDAwRUU0NkJEMEIwNDcyNjI0MjRCMDBGNTZBNTdCQTVEN0JENworOjEwNjAyMDAwNEM4QUZERUUyNjU5MTJGMzA2QkQwREVERUMxMTUzMzJFQworOjEwNjAzMDAwNTFDRjNBMzBFMzg5MTU3Njg0QUY5MDkxNUM3N0U1ODU0RQorOjEwNjA0MDAwNzQxOUVBRUUwMkNFREIwRjU5RjY3RDM3QUUyMUU5NUQxOQorOjEwNjA1MDAwOTk1Mjk5NEFERjk5RUE3N0Y3RTgzMUQ5MTM1MTZGRjNFQQorOjEwNjA2MDAwMTZGMEY3NjUwRDU3NEM2QzhDN0VDRkZDMTM3MUZGMzUyNQorOjEwNjA3MDAwREUwNzFBNEFFOTdEQTZCM0UyRDgwNDE4M0YxM0U0NjhBNAorOjEwNjA4MDAwMjNFMDJCNTM2RDk2RUE2ODVERDNFMkVBOEYxQkU2M0I3MworOjEwNjA5MDAwNjc4NTAwODYwRDMzMUVDQzlFMUY2NzNGODFENTM0RjE4NgorOjEwNjBBMDAwRTlBMDc5NjYzRTdCNDhFMEVGNkU4MUNGNENFNEY1RDEwNAorOjEwNjBCMDAwODIwRTQxQkVCOTc4RDMxRUY5RTYxQUNBRTU1QjQyNDFBOQorOjEwNjBDMDAwRjMwQUM0RjdBMDc5Q0M4RkZBRjY4NjE5NEY5MERFNkFFRQorOjEwNjBEMDAwOENFMzJBMzBDQkI5NENENTNDQUZBRjZCM0UxQjk5RkU1RAorOjEwNjBFMDAwMUQ3OTc0RUZGRDVCRjk2QzIzMEJEQzhBRUQzM0M1N0UwMworOjEwNjBGMDAwOUU1MDEwOTIwMjg1RkRDRkRGM0FERkRFRTZGRDJEQzQxMworOjEwNjEwMDAwMjcxRkE3NEUxRTEwM0JDRTNGMEIyRjk5NkUxOEE3RTRGQQorOjEwNjExMDAwMUYzRjRFQzIzQ0IzQkMzQzVGQkNDMzNFMjBFODhDMjk1MQorOjEwNjEyMDAwQjgxRjU4RURBQjg0MTI5RkM0NjRBQUI2QTMxRDRFRjJFQgorOjEwNjEzMDAwMUJFMEY2QjBFNkYyNEI4MERFNTIyQjU2REQyRTgzRERGRgorOjEwNjE0MDAwRUM3OUVCRUFGN0QxQ0U0RUVEOTg0M0Y2NzY1MzYxNTFGOAorOjEwNjE1MDAwREIyNDY4OTdFNEY3Q0Q5ODQyNzRDQTA4Q0Y2QkIxMzM1QgorOjEwNjE2MDAwRTJCQkFBMTUxMzYxNUU4RDhDRjNERDY2Rjk5Njg5NUMzRQorOjEwNjE3MDAwM0ZEMDY5QkRCRjJCNzAwNjJCQUVBOTUwNDc3NjY1Mzk1RAorOjEwNjE4MDAwRjFFNjYxNjc2MTNFNkZFOTBCNDdFQ0Y3QkRDRERGMTZDNQorOjEwNjE5MDAwRjk0RUY4RkY5NjkwREZCNEJGRUZEODc0M0JGOTExODM0NgorOjEwNjFBMDAwRjAwRkVERDI2NDRCM0Y0OUJBM0RFMjY3NjQ4OEE3QTg3RgorOjEwNjFCMDAwM0FCQ0ZGNkQwRjVGREZGRTRGMTlDRkM3RUU3MzZBNDAyOQorOjEwNjFDMDAwMEFCNjNDRDk4N0Y2N0ExMkYzMjVBQjI4NjcyNzgzNDJCMworOjEwNjFEMDAwMDBBMkQ4OTdENjFEOTRCNUZFRDdBNTg5QjFGMjk2NDJGNAorOjEwNjFFMDAwNEU3NzMzQTJGNERDMEU5OUVCQzk2OTMzMjc2N0FGODQ4RAorOjEwNjFGMDAwN0VDRjk2NzBCRjcwQUEwRkZFMTdDNUNFNjcxREVDNkJFMQorOjEwNjIwMDAwRTEyODNGQzdCQUMyQzc4ODdGMUI4MTlFNzI4MDJGODI1OAorOjEwNjIxMDAwODUzMkY5QjdEN0U2RURGMDQ1RjNCNUFDMThGRTZEMkIzNgorOjEwNjIyMDAwN0QzMDREMkQxNUZBMUZFMDQ3Qzk5Mzc1RDdDOEFGNEU4NQorOjEwNjIzMDAwMUZDQTk3QTQ4RkM0RTk1MURGQjEwQjVGQUYyNEU1QzIzOQorOjEwNjI0MDAwRThFM0FCOEU2N0FDNkIyQzVGNzFGRDI0NkRFNjNDMjdGOQorOjEwNjI1MDAwRUEzQkFCMzI2NjI2QzU5M0IzQkRBRkVCN0RCNEFFQThDNworOjEwNjI2MDAwNEY4NEUyRjQ5RkE2NDg3MUZEMzk1NjdEOUVCMUE1QTZFNAorOjEwNjI3MDAwRjU1MjA2OTZDRURBRENEN0JBQTU5OUYxNjFGNEVCNUE1RAorOjEwNjI4MDAwQTY2OEZGODVDMjRCRjU5MTVGREMyOUZBNUJBQkREMTc5MQorOjEwNjI5MDAwQzRGREYzMkNFRUVEODAwRkE1Nzk1NDE4RjUzRDk2Qzc5QgorOjEwNjJBMDAwRkM4RkYzMjZBNDg3QjgzNDNENDQzQTI0Q0FEREQyMDhEMworOjEwNjJCMDAwN0NGNjJDRDkzNDlFOUE5NjYwQzIzNzlCMDVEQTc2MTQwOAorOjEwNjJDMDAwRkNBRTY1NzY4MkMzODlFM0MxMzg4QTBGM0E5NEQwRkY2OQorOjEwNjJEMDAwQ0ZDMjJFMkZGNTQ4RkRFMTUwNUZFNDYyRkQ0RTEzMUQ0NQorOjEwNjJFMDAwQUNDRTJBOEFCQkRGQTk2MjVERDE2Q0U1RjQ3QUU3RjkwRQorOjEwNjJGMDAwQzkxN0VCNzhENzk5RTEzREVGRUZEQ0FBRjY2RTFDRkZFQQorOjEwNjMwMDAwNzFFQzc3MkE3QkQ3QzAxNzIwRjE5NjFFN0FFN0VCQjRBMQorOjEwNjMxMDAwQ0FDNkY2NDg0OTIwMEYzMkFFNjcwMTBERUFGODBBMzZDMAorOjEwNjMyMDAwRUIzNTU4OEU0NTNBMkNGMjkxNUVCMDU1NTIxMTRFNjJDMworOjEwNjMzMDAwNjkwREZGNzM3REJFMTA5NTVCRTg0Rjc2MDYwODRGOEFBNgorOjEwNjM0MDAwNUI2N0Q0NUUzQjNGN0RGRjlDRDBBRkQzODQzRTZGQkM4OAorOjEwNjM1MDAwRkZBMTYyQTc3RTU1NTZDMUQwNkUzRUY3RjZENDBDRUE3NworOjEwNjM2MDAwNTc4NzQ3QTUxMTM4QUNGRDE2MkE4MTFGMkEwMzkwRUNFOAorOjEwNjM3MDAwMzgzQ0Y4MDFGQTA5NTg0NzAxRjlCNUYzMDVDRUNFM0Q4RQorOjEwNjM4MDAwMzAzMzg5RjVDMTVGMEY1OUY4RUIyMTg5QzNDOTJBQ0U5MworOjEwNjM5MDAwQ0ZDRTM4MDc2M0I2NjM3QjM1OTA0MEYxQjI5MzA1QzQyNgorOjEwNjNBMDAwMDdCOTYyRkMyN0Q2Q0Y0REMwRjE5RkQ4RDgzNzlGMUJDNQorOjEwNjNCMDAwNzBGQ0I0REVDOUMyQTBBNzg2RUE3RDU0MUFFRjQzQzJCRQorOjEwNjNDMDAwREZCRjU5RDgzMUM2RjM3MzhBNEM3MEVDMTM3Q0ZGODQ1RAorOjEwNjNEMDAwQjMyMjgxRkNFNzA3NkY5QzM2MENGODJCRTdBOEUyNDc1NQorOjEwNjNFMDAwMUQ0RjVCQ0I1MkZBMUEzRjNCNjhFNjM3QTZDQ0VFMTM0MworOjEwNjNGMDAwREU2NTZGNEQ5QzcxMjg4QTFGN0ZBMTc4RDJERTFEMEU0RAorOjEwNjQwMDAwQkY1Q0NFMkU0N0ZBRUJFRkZCNzNGNUZBOEM0M0Y5NUZENgorOjEwNjQxMDAwMUQyRjlCODVGRDc5QUVGMTc3MkI0OENGMDk1RjQ5RkM5NQorOjEwNjQyMDAwOTkyM0U0NDhDRTNDMkUwRjcyQUI1OTQ4NDNGRUZERkM0NQorOjEwNjQzMDAwMEIxNjREMUY2MDk5MTA5RTMyQUI1NThERkM0RDRDNzc1RAorOjEwNjQ0MDAwQ0Y4MUY3NDNDNURCNEM2NUJBOEM1QkY4NTBENEJGNTBBNQorOjEwNjQ1MDAwOEU2Q0UyRkU3M0MzQ0YwRkVCN0UxN0NBQjlDREFGMjlBNgorOjEwNjQ2MDAwNjQwQkU3NTU2QTBEQjhERTM5RUJDREZFRkRDMTJDQ0FEMQorOjEwNjQ3MDAwRUY4RUZFN0FBMUQ3NjU1QUZDRjg1Rjc1MUQzQTcwMUQ0NAorOjEwNjQ4MDAwMTJGRkY5RUIxMDUyMTlEMTlENTFENzI0NTYxMTZGRkYwRAorOjEwNjQ5MDAwRkI0NEQwQTlCNkUyMTBCNzQzQzBGODdCMjcyQTFFMDFGRgorOjEwNjRBMDAwRUI5OTgyOUJDMDRGODNGNzRENDRCQjM1Qjg4NkY5RjMxNworOjEwNjRCMDAwRTNDODRCOUI5QTQ4NzQ2RjYzN0E3ODI4RkEwRkU2NUNCRQorOjEwNjRDMDAwREZCMTE3RTVENTA0NjY5MjVGNzFFNDg2NERDNUVGRDI2MgorOjEwNjREMDAwQjhEQzA4MDU2N0YyRjI3Mzg1RTI2NUY5RUI1OTA4RTM2OQorOjEwNjRFMDAwNUI5MzM3RDRFRDQ3QkY1RTY2MzVCNzlCMzNENzA0MjU0MgorOjEwNjRGMDAwM0JENDczRUE5ODFGODdDOUFENjRCQ0ZENkMxNkQyNzk5MgorOjEwNjUwMDAwQkNFNjY4MDZEMENEMTA0MTM3NDMwQzdBNTk2NkE2OTc5MQorOjEwNjUxMDAwQzE3NTk2QjhEMDFBNzM3RDIwRDIwNTdDMzdEMDQyMkYzMgorOjEwNjUyMDAwRDY3RTcyMzQ0NkYxQjhCQ0Y1MzI4RjE3Q0QzMkM3N0RCNgorOjEwNjUzMDAwRjI1OUY3RkIzRjA3NzhGMzBGQjlGRDYxMTYxQjZGQjJGNQorOjEwNjU0MDAwRjZBRkIyNDAwMUUyNjVGNzBGRERGRjU5MDAxM0ZDRDk0OQorOjEwNjU1MDAwRkE0OUE5ODgxNzkwMjc0OTI0NEYyQUUyREIzRDMxRjRGNAorOjEwNjU2MDAwNkFFODFCQkRCNDhGQzg0RkRFQUVCN0Y3QUJGMkQzOTc2NgorOjEwNjU3MDAwQ0UwNTM4RDY3QTc0NDZFMzA3QjM0OUFFMkIyMjVFNzk0RQorOjEwNjU4MDAwMzBGMzdBNjcwN0ZBNkREQzQ1MjRERkY3NjMxREZEM0NDNQorOjEwNjU5MDAwMTk5NzBDOEM5NkY3OEFGMDIzMTlGNTQ2RTE0N0IyOEVDRAorOjEwNjVBMDAwMzc1NUU1N0FGMDdCNEM5RjhBNzgxOEU1MDg2NDYwNUM4MworOjEwNjVCMDAwQ0Y5NjkxQkU3MzBFOEM2N0YzODFCRTE1RTdCQkIxNkFBRgorOjEwNjVDMDAwMDI5RkFGQTZGRTJEMUFGRkIwNzFGQjQ4MUUzMkJFMUYwMAorOjEwNjVEMDAwMzM3N0NBNzlFMUEzNDQwRERDQTQ0MjE5OUMwNDY2MDQxNAorOjEwNjVFMDAwRDI3RjBFMEIzNUUyRkFENjM1RjNGRDJERDJFRTE2RDE2MQorOjEwNjVGMDAwMkU4ODc5MDUzREVEMDJEMDZFODRBOUREM0M5QzBGQjQ1OAorOjEwNjYwMDAwRDM0REVEMkE2MkRBREQyNkZBNjNBNjcxRjU5ODcxNkIzNworOjEwNjYxMDAwNDQ3RkE0Q0ZGNUI0RjNDN0Y0Qjc1NEI0MjMzREIwQTc3NworOjEwNjYyMDAwOUQxNkQzREYzMjMxQUU2RTZBRTc4QjY5RjdFRjA2N0NEOQorOjEwNjYzMDAwQTY3MTk5NzlEQzlFRjdBNTc2RTMzREY5NjMwRkU0NEZFNworOjEwNjY0MDAwMjE3QTM5OTQzRkE1N0MyRThDQjNGNDQ1MUI5NzExNUJCRQorOjEwNjY1MDAwNzkzRTg3NDE1N0ZCNDVCQjI2QTRBQjQyQ0M1QjYxNjNDNworOjEwNjY2MDAwQUEyOTRGODVFN0FEMzRCQTY3M0EwMzUxQ0Y3QkU4Q0ExMAorOjEwNjY3MDAwM0REMzE3RkZGOTVDNTM3Qjc1OEQ4QkU5QzVGNDlDREEyQworOjEwNjY4MDAwMzdGRDVEMTFGMUFBMUY0QzQyN0ZFQkVBMzQ1OUY4REI2QworOjEwNjY5MDAwQUU2OUQwNTU5MDYzMDM1NDUzN0Q0RDg2Nzg2RkJCQTY4OQorOjEwNjZBMDAwODEwMjYyMjIzRTAyQjJGMjlCODU1MUZDREQzM0ZFM0Y0NQorOjEwNjZCMDAwMEI3RUUxM0Y4RUMwM0ZEQjAyRkY2QzMzRkNBMkVFQ0NEMQorOjEwNjZDMDAwRTRFRkQ1OTVCMzI3RTE3QzBDRkZGMkQ5QTZFNTBENDFBNworOjEwNjZEMDAwRjdGRkU2Rjk1NTU5RTY1NzY1OTk1Rjk1Njk3RUY2OTU5NgorOjEwNjZFMDAwNTU5MzgyNzlGRjk3RTZCN0NDMzJCRjY1OTZGOTJEMzM4MworOjEwNjZGMDAwQ0RDRkI5NzJEOTA1QUQ5RkI1REREREI2NjY5MkI3NkI2QQorOjEwNjcwMDAwRjM1RjI3RkQ3RkFEODhFMzI2QUNENDFCNTZFMDdCRTAyQQorOjEwNjcxMDAwRUQ3NkVBNEYyM0Y5M0U4QUU5OUZBMzNDRThFRkJCNDdCOQorOjEwNjcyMDAwNTQ4REU0ODJEMzIzOTM1QzYwRjlGNjUwN0UzNjg3NkJGOAorOjEwNjczMDAwMjZDODg1RTc1NDFGOTdERjAyQ0VENzJDRjUwRjJENzU5RAorOjEwNjc0MDAwRjhFNTZGQjg2RkZBOTg2MTQ3NUFFNDdDM0ZGQkRBQ0EwNAorOjEwNjc1MDAwNENCRTlGQUNGMkY4RTVFODdENEQxNUI4MzkzOEEwOTRGMQorOjEwNjc2MDAwRTQ0RkEzOEZDQjlGRkQwMzg0M0M0QTgzN0Q4REZDNDQ4MworOjEwNjc3MDAwMTkyNEFGNkM0MjVFREQ1N0NGRjNEODlBNDU3RTUwNjM0MworOjEwNjc4MDAwNUExMUUxQTc1OUQ4MEIyQzk0NjVEQTM3MEY0QzlDRDJEQgorOjEwNjc5MDAwODY3RUFCMzM0Nzc5REVFMjNBMUJEN0M3NTZENjMzOURBOAorOjEwNjdBMDAwRThBQkRFNDlGOTQ1RkJBMERGMDAzNDY4MDU3RDBGQ0I3RgorOjEwNjdCMDAwRTc0MURGQzM3MjRGN0QwNjk1QkZBQ0Q3QThEQzAxRTM4QworOjEwNjdDMDAwNjJGOTRDQkQ5RjA1NjBGQzZERjU2M0E4RkMzMUVBOEI1NgorOjEwNjdEMDAwNTAzRTIwRjRDNTJCRDI2NEYyNTc2Q0FFODcyRDMzOUYwOAorOjEwNjdFMDAwRjQ0ODJBMUZBOUY3OEQ1NTYxQkM5RkQ0Njc1MEZEMjMzQgorOjEwNjdGMDAwNjlFNjU4MUJEOUFEMUQ4RDQ5MDBFN0VFNTdGMzI4NUZCOAorOjEwNjgwMDAwNjk0MjlBNEFGQjJGNTNDMzRBNTI0OUU0Qjk4MUQ3OEY1MAorOjEwNjgxMDAwQTQ0OTU3RTA3N0UzMzI2NERFQ0UxOTZBRjRDNjZGNTdCNQorOjEwNjgyMDAwODZFREM2NjRBODA0MEY3MzA3MTU2RjVBREM3NkU1MzY0QgorOjEwNjgzMDAwQzA0QkE5NUJGNEU3MEIzNDdBRTJGN0Y3MkQ2QzU3RTQxMQorOjEwNjg0MDAwMTZGREE1Njk4REVFRjhGRENEQzQ3MTQ3RkEzODFFNThDNgorOjEwNjg1MDAwNDY0NzQzNjJGQzc2Mzc2MEJCNDI5Rjk4NkY1NjU4NEU1RQorOjEwNjg2MDAwOEMzRkVFNkMxQzM3MjVBNTM5ODBGMUFEMkI2NzMzRDJGOAorOjEwNjg3MDAwNDc2RDY5REE2NjI5MkEzRTE0MUE1MEMxNjRBMEYzOTQ2MAorOjEwNjg4MDAwRDRFNjNBNkNGNzhEODA5RkU1QzBGODlBRDdDRjY0QTAyNAorOjEwNjg5MDAwNjc5QjFCREUxNzYyNEUxMzhGNDc4REJGMEVERUEzM0UzNAorOjEwNjhBMDAwOENFRjQ3NDRCREM3RUZBMTFDM0I0QjdDOUY2NDdFREY1MAorOjEwNjhCMDAwQTM5N0FGNjEzRDc5M0M5OEJDNjQ2QjMyRDc5MzY1Q0VBQQorOjEwNjhDMDAwOUZDQjU3MUU5ODg0N0M5RjZDRTdFRjdGOEE3NUQ0Qjc2NworOjEwNjhEMDAwOTYzMzQzMUVGMUY2MDlGQ0ZEOEY4Q0Y2NUVGRUZFMTcyMworOjEwNjhFMDAwQTI3RDRBMEE5RkI3NkI4QTMzODQ3MUIxNDdCRTdCNDk0OAorOjEwNjhGMDAwRTZEQ0MyQzg3QzJGRkE1RUMxQjBCOTUxRjM3QkU0N0IwMQorOjEwNjkwMDAwRTMzMkU3QkEyM0YzQjlFOEZCMTM4NkNERURDM0VFNDlEMgorOjEwNjkxMDAwMkQ5NzdCNzI2NDUxNkUyNTM3MTc5MkZDMUNFNUE4MjBEOQorOjEwNjkyMDAwQjkzMzZBNjBBOThFRkNBQ0FDRTc3MEZEODdFREFFODYyQQorOjEwNjkzMDAwODYzQzgyMkI4OEYyQzY4MEVCMjc4QkNENzAwREFFMzE2MgorOjEwNjk0MDAwQzNGNTkzMUEzMzVDODM2QkZCODY2QjlEOERDQkI1REVGMQorOjEwNjk1MDAwRTA4M0YxRjVFOEYxMUZGRDM3RjNGODQzN0U2MDFFRkY5OQorOjEwNjk2MDAwRDExRjk4QzcxRjcyRTc1NzFFM0YxQ0JEMkU5QjZFMzc2NQorOjEwNjk3MDAwOEY5RkI1QzQzQ0ZFQTYyNUU2RjFCMzk2N0VCNUYxRkYyOAorOjEwNjk4MDAwNTFGQTc4OTIyRDcwQzQyNkY0NUQyNTVBRUZBQzBCOTgxRAorOjEwNjk5MDAwRjQ1MzY4Rjc4QTY4MTc1NEEyRjVEODQwQzBBNDlGNDIwMAorOjEwNjlBMDAwQkJENzZENDJERjM1QjVBQjg4NjlGNzA3RDExRjMzOEQ5MworOjEwNjlCMDAwQUJDNzhDREIyMUZBMEJDQkQxRkRGOTYzRkFGQjhCNjhGQgorOjEwNjlDMDAwMTc5NEEzRkJEMzYyRkFGQkMwODBDRkQ0Q0UxN0QzQUUwQgorOjEwNjlEMDAwNEJCNDYzQTY3MTk5Nzk1Q0Y4Mjk1MEExOUZFRkIzMDQ3OQorOjEwNjlFMDAwM0ZGQTQ3OTY0RDVFNDM3MUFGODEyQzIwQTFCRkNGOTdGMAorOjEwNjlGMDAwQ0E0NjFEODJFRjU5MkVDRkJGNEY5RUIyRUM2MkI0M0IwOAorOjEwNkEwMDAwRDcyNDlCRkQ1Q0U5NzY2RTlGRDlFQzBBOTVCRTQ0NTY2RgorOjEwNkExMDAwNDdGOTAwQ0U2MEU2OENBODdDOEI2QTNCREZDRjdBREUzQworOjEwNkEyMDAwQkI4Mzk5RDc0NkJEMUYyOEJFNUYyM0UyRDQ2OUY2RDI0NworOjEwNkEzMDAwNDY5NDJCQkVDMUQwM0U4RUJGMjI1MzhDNkJCQzY3Njk3RgorOjEwNkE0MDAwRkU3NjFERTBEREY4QUYzMzQ3QTNCRjI4MzJBRThEQjcyOQorOjEwNkE1MDAwQkI1ODhDOUIxNTFGQUUzNUQ5N0NEQzQ1Mzg2RTIxM0U2QQorOjEwNkE2MDAwMzdGNDhCNjAyNkUxRDdDNzRCRTNGOTgzOUVFRjQ5RkZFQworOjEwNkE3MDAwMDU3ODU5M0REOTI5MkI0OUYwN0UzREY3NkYxQTdFRjZFRQorOjEwNkE4MDAwNjQ3QjlEMTNGMzc2MUIyRjkyRDk2M0Q4MkVBQjZGM0Y5NworOjEwNkE5MDAwNEU1M0JERDlERkE5RkEyQTc0QjRGNzA2NTVGQThBMTQwMQorOjEwNkFBMDAwRDZGQjc3MEY5N0NCRTVGMUUyMERBM0M1QkM5QTJBMjc1OQorOjEwNkFCMDAwMzVFN0MxRjhFQzkwRDk2RjBCODRDREEyRjM2MTBBOTU0QworOjEwNkFDMDAwQzA2ODdCM0NCRjZENTM4MTI5QUYzRTc5NTBERjdFREJEMAorOjEwNkFEMDAwNDZBMTVGRjRDQzAzM0E4QUI3N0UzNzBBRjhEOEM2MDJEQgorOjEwNkFFMDAwOTM5RTk1OUMzMjkzRjRBQkU0ODZBQjlEQkUzOERGQURBQworOjEwNkFGMDAwQjVGNEVGNjIzMzc1NkM5Nzk4RDZDQzY0RUU1QzM0RTlFQworOjEwNkIwMDAwNjE0REJFQzdGODNFOTQwOTMyMDlFMzNGNjkzQkMyQzhGNAorOjEwNkIxMDAwM0Y2NzRCRjg3OTBBMzUyMzE0OTQyOENFQzFFNzg5NkE3OAorOjEwNkIyMDAwMjVGRTI0QUFFMUEwMENFRDA3NkQ1NDU5Mzg5NUIxRkI2MAorOjEwNkIzMDAwRTVDMDhEODgxRjU3NUUzM0Y5Qzc1NDlGMkUyMTlFQ0UyNgorOjEwNkI0MDAwRDk0MjU3RDM3OTAyNTAxN0UzRTU3RkNDQjM3MzNGRjBCNgorOjEwNkI1MDAwQzNEQUNDREY2NUM3NTlDN0RCRUM5QTQ5MkYxREY0QTkwRQorOjEwNkI2MDAwOUQ4NThCN0I2RjFGNjlDN0UxRUFBMUQzMENBMDRGRTQyMQorOjEwNkI3MDAwNkY4REQzRTlFRDhBQkVEODRFRkE1QTk2OEZGQzhFODY3OQorOjEwNkI4MDAwN0MzNUY4NUZDNEI3RTc4RTYxRTI0N0JCRTEwRjMwOEYxOQorOjEwNkI5MDAwREJEQTZDM0NCRkVGNzM2ODFEMTVGN0I5NERGOEJGRTY0MworOjEwNkJBMDAwOEE3OEY3M0M1NkUxQzU5N0E3OTk1QzhFN0M3NTlBQkRBQgorOjEwNkJCMDAwRUEyRDhFNUFBRkI1NzYzQjFGNjc4RDhERkM1QjQ2M0M0OAorOjEwNkJDMDAwNzc3RUIzQ0RFNEVGNUFCOEQxNUM1RkMwNjZBNkEzNUMxNAorOjEwNkJEMDAwNUFCMEMxQzZGMDdDQzc2RDE2N0ZEOEJGRTE3QzYxNUUzQworOjEwNkJFMDAwMEI1OUREMkFENEQzOERGQ0EwQjkzRUE2NjJGRUY3RTI5NAorOjEwNkJGMDAwNUYzRDUyOEE3OTQzQ0Q3NjlFQUZGMzAxRDA4QjE2QzVBNworOjEwNkMwMDAwNTc1NUVFOTAxREVERjk3Nzc2MTU1RjNGOUVFMUY3QTFBMAorOjEwNkMxMDAwNTU4MzUwOUUyNkIzQjhFNzhDNkU1RDYzODZBRjNGRjgxMAorOjEwNkMyMDAwQURGMDMyRDY0MEYwRjYwNjg3QkE1NThBRUJCRjdBRDQ3QgorOjEwNkMzMDAwMkU5OUUyNDRDQjlDREU5MTBDRTRDQzM5MTcyRjdCRkNERgorOjEwNkM0MDAwMjk3Rjc0OTE3Q0RGMjdFODA4MzZDMENCQjg5Q0FGQkJBNgorOjEwNkM1MDAwMUNDQkZFQkUzQkQ4Q0I3NzhCOUQxRDc2RTQ4RjVBQjVGRgorOjEwNkM2MDAwQUU1QzkyMjM3MTI2ODcyREEwMEY4NkVGNkM3QjI2ODY2MworOjEwNkM3MDAwMDczMzUzQkIzNUU3RDlBRTREQ0EzOUFGNzZFNTcyMUYzRQorOjEwNkM4MDAwRkQ3NTBBNzlGOUMyQjY5RkQ5RDFCRjc4RkFBOTEzRDc5MQorOjEwNkM5MDAwMjAxRjJFRkFCNUMyOUNEMEFFNzM5Qjg3ODU3MTVGNTBDMgorOjEwNkNBMDAwNDM3Njk0Mjc1NUJCOTRCODcxNTk4QUZDQzNGQzE3RkRGMQorOjEwNkNCMDAwQzI0MzcyQTI2QTg3MjMzNDFEQkVBRkZBRTUzQjIzMTk5MworOjEwNkNDMDAwRTBBMUIzQTFGQkYwNjBEQzQ3OUY5Mjc4N0MzNEQ4MzExRgorOjEwNkNEMDAwMTJGN0FEMkE5NUREMTIyRjRGRUM4NEEwQkI1M0NGMjVDMAorOjEwNkNFMDAwQ0VDMjc1OTVCNkVFQkY5OUZBNkRCOUMxRTY4ODkyMEYxRQorOjEwNkNGMDAwQzdDNEJFMDRFREI4N0ZFRDQ5Mjk5NDFGNDc3RTE4RjE0MworOjEwNkQwMDAwQUM1MzRGNEExQ0JFM0RCNjkwMEJFMURCQkFEOTFFMDAxNgorOjEwNkQxMDAwMzg2QUI3N0U0ODc0NTRGNjhCRUQ1RUM0NDNFRDFFQzVFOQorOjEwNkQyMDAwRTRGN0FERERBQTg0MUQyM0E5M0M4MTI1QzY1MTI0RTBFQQorOjEwNkQzMDAwRUIxQUM2RTU2M0NEQUVDNUU0MEZBRjY5NTlGN0ExRTIyMgorOjEwNkQ0MDAwQzVFRkNERjQwQzc4RjE4NzExQUY2RjI4RkVFOTU4REY1RAorOjEwNkQ1MDAwRjk3M0FGMDZBOEZBQTBGRDcxMkZFMjE1RkE5RDYzNEZGMworOjEwNkQ2MDAwQzI3OEFFRDk4RjhERkQ3RjlBMTJEQjFGNjNERDc2QTRDQQorOjEwNkQ3MDAwQUZEQTk2QjU3QzNDMEJCRjdDODBCRjY0QzZDNjRGOUMyNworOjEwNkQ4MDAwMEU0QjFDNkI2QkVBNzlFOTg5OEJCNjlGN0QzNDA4RTM2NworOjEwNkQ5MDAwOUREQUYxRDc0NzgzQjg3RkZGQkY4RjFFQkQxM0Y1OUFFOQorOjEwNkRBMDAwN0QyRTFGRjI3QkVENTNBRjc5NTlENDNFOThFM0UwN0MwMgorOjEwNkRCMDAwRDdGOUU0Q0Y5Rjc4MThGOEE0RjNCODgzOEVFRTc1RUU3OAorOjEwNkRDMDAwN0Q2Rjg4MDZGM0VEN0NGNkJGRDMzNTY4N0ZDN0RFQUJGOQorOjEwNkREMDAwQzhFRUJGNjM3N0Q5QzBCRUY2NDNBNEQzNTBGNDM5MTdDOQorOjEwNkRFMDAwOTFDN0E0RUQ5MTUwRDkwMjQzNUU5NDk2NzUzOUI4NEI4MgorOjEwNkRGMDAwNjEyRTgwRjNGNDMxNDcwOEYzOUE2QkUxRDlCMjIyNUMzQgorOjEwNkUwMDAwQTdDNTI0N0ZCMUJFMUNGMDVCQjM2REY1ODdDQUM4NzhGNworOjEwNkUxMDAwNzgwRTBFOTYzMUM3OUUwMUJCNjRFMDNBNUZGQkVENkZDMgorOjEwNkUyMDAwOTQ2MDY5QTMzODQ5MkRFQjI2Rjk2OUZEQUVGNjI4QUNDQworOjEwNkUzMDAwRTc2NUJEQUZERjU5RjZCOTFEODM3OEI1REJENkYyNzFEMgorOjEwNkU0MDAwMkRFQjc3MUE3RjE5MUJCQjdFQkE2NUZEQ0VCMkVBOUY4OAorOjEwNkU1MDAwM0U4QzJGNzdBNUM2OERFNzFBRjFBRkM1QkJGRkE1NEZCNgorOjEwNkU2MDAwQkRDOTkwMDNGREUxQjc1MkUyNzA3OTFDN0E4NTAzRjk0MAorOjEwNkU3MDAwNjlDN0QzNEYzQzlDQzZENzc3M0EyMEE0NzNGQkQ5MjE2RQorOjEwNkU4MDAwMENFOEUzQTRBREZCNjY5NDhGREQ3QjFEM0VEQ0NGQUI0RAorOjEwNkU5MDAwRjZCRTQxRkNENUI5RkIxNUJCNDZGMjkxQjkyNUQwMTMxRQorOjEwNkVBMDAwM0E1OUNGNEYzQkVBMEQzNTEyQUZENDZFRjE4NDFEREU1NworOjEwNkVCMDAwQzgzQUQ1ODQ2Njk0NkI1RTdBN0U4MjlFODczOERERDcyOQorOjEwNkVDMDAwODRGNjVGMjdDNTU5QjdENThFMUMyRThGNDMzQzY5NkY1QQorOjEwNkVEMDAwRjE5NjNGRDg5OURCQkM5RUQyMTg1Q0M3MTM1M0YwNzk2QQorOjEwNkVFMDAwNkZFQjY4Q0NERjg3RjNCRjNDNkEzREI3NzA3RUVEOERGQQorOjEwNkVGMDAwMkYzQjM3M0I1NENDNDczMEQ2QjdEM0M2RjVGRERBOTA5RAorOjEwNkYwMDAwRjQwNjhCQzNBRkM2RkU3NkExRjFEMDA2ODcyNTFFMkFGNAorOjEwNkYxMDAwRTZEQjFGM0ZGNzNGOEYwQkMzRDMxMjRDQUExQzFEOEIyMAorOjEwNkYyMDAwQUY1MzlGQzc5N0VGOEYzODI0MDE0NzVERjlBMERDRDg5NgorOjEwNkYzMDAwRkQ0OTY1MTVDMUMxRDkxMTc4NEY4OTczQjNBNzlFNTIxOAorOjEwNkY0MDAwNDI0MTc4QkVBQUU1MjBDOTY5QUI1Q0E4RTk0NTRGN0VGRAorOjEwNkY1MDAwQzYxODZGQ0ZGRTkxMjhCRjRFMUQ3ODhFRThCMDY2REI1NQorOjEwNkY2MDAwMDkzQkRBNDc4N0I3RUVCNDc3MTQ0NkU4MUVFNTdGNzQyRAorOjEwNkY3MDAwNUVFNEE5NjdGNjhGMjQzOThERkRDNzU5OUY1RjBCNzlCMQorOjEwNkY4MDAwNTdEQjZBRUVCRjc2REI4N0E2RkUxNzA1NUJFQ0U0MTdERQorOjEwNkY5MDAwRUQ2NzlDMEY1NEZEMDY5Q0VGMDdFRDM2ODY3OUY3MUZEMQorOjEwNkZBMDAwQjQyOEU1RjFGNDlCOTBDMzY2Q0E4MzVBRTUyOTNEODY2RgorOjEwNkZCMDAwN0U0NTI1QzVBRUExQkM2QjVBQTFCRjExQTQ3MzhGMzYwNworOjEwNkZDMDAwN0VFRTUxRDU4RjM5ODAyRjFCOTNFRDFBREFBQjREOUU5MworOjEwNkZEMDAwRUI5OTE2MjVCNzlCMkRGOEY0QTVGOTI2NjI1Q0NEMzcwMQorOjEwNkZFMDAwQjlBMjI0REE3RTMyRTA0RkQ2NjUxM0ZDNzc3OENBMDc1RgorOjEwNkZGMDAwRTI3OTA5QjRDMzM0NEMzMjUwRkRFNDU3NTZCQzUzQ0E0RAorOjEwNzAwMDAwNzEzRThBNEZGNkI5RTJFRUNGQkMzRkY0QjcyMUZEREIwQgorOjEwNzAxMDAwN0MzMkQzQTJFODZCNTREOUY1QzNEMUQ1QTYzMkNEOTQzNgorOjEwNzAyMDAwQkY3QUVGNjQxRUM3MzVFNjdGRUY0NTZDMTMwM0I5N0I2QgorOjEwNzAzMDAwQUZENEREODZGOUVDQzFBQjc5NUUyMDEzNzZCQTE3RUREQgorOjEwNzA0MDAwRjRFQzU4N0Q4RUU5QkE4NkYyODdDNDBGNkZDRjc0MjNCMworOjEwNzA1MDAwN0YxNDdFQkUwRkUwQzg5OEJGMjNGQjQ5OTlGRkJFQTJGNAorOjEwNzA2MDAwNTMzRThGMURDN0NENDVGQjI5NDRDRjEzNTk5OEVBOEE1QgorOjEwNzA3MDAwOTNDQjFGMEZBQkEzRTc0OUFDQTMxOUNGMzBCREVEQTg0RAorOjEwNzA4MDAwRjhENDAxQ0ZFRjJCNEY5MTM4REM2MUNBRDc0ODE2RTMxMworOjEwNzA5MDAwQzg4OTU5OTk3REYxM0Y5QkFDOUU4QUY2RkIzOEQ4MjY2QQorOjEwNzBBMDAwQjI0QkQwRURGODQ1NkEwNDBGNDYzRTlDRDFFRkJEQUUyMQorOjEwNzBCMDAwMDkxMkVFMzczOEJGQzE3OEFFNDc5QzlGRjdGNUNDNTcyMQorOjEwNzBDMDAwQTdGQTAwQTM2RTE5MDc1QkZBNEFDNTE2NEJBQzE4OTBENQorOjEwNzBEMDAwNTQwNTZGMEQ2ODI2M0ZDNzIwRDY0MjY1MTY2QkE3MzI1MAorOjEwNzBFMDAwQzVFOTkzNTQ4MkVGMkRGMjRCQzlFQ0NGRUM4QjQ0MEJFNgorOjEwNzBGMDAwN0NFN0ExOEY5RjkzRjVFMzAxMjgxQjZERTJGOURCOUVFRQorOjEwNzEwMDAwRDBFMzUwREY5MENDNENFNzgzNzM5RDlDQkYyRjc3Q0FCMAorOjEwNzExMDAwODY1RjI2MTA2RDc3MzVCMjZBOUFCQjJCOEQxRjYzMzE1RgorOjEwNzEyMDAwQkVCQkRFMTkxOEVFOENBMjI3QzVERENFRjNCRTg0RkRGMgorOjEwNzEzMDAwNkJEOEVCNTcyOUNCMjlGRUJFM0E4M0RCRDVCREFEQ0Y0QgorOjEwNzE0MDAwQ0FGQTBBOTM1RDZEMkQ5QjA3MzhFNzZDNjYwNDNGRjcxQQorOjEwNzE1MDAwNTM0OTRFN0U3RTU5Njc5QTJGOUFGRTYwNUM2NzY5NzQyOAorOjEwNzE2MDAwM0VBM0FFOTM3RDJGREVEQjYwN0FGOEQyODE3ODU0NjI0NQorOjEwNzE3MDAwRTk2RjA2RDJERjY4QTRCRjBFRDE0OTM3RjkyOTZFNTdFRgorOjEwNzE4MDAwMDI1N0UzN0MzM0YyRUEyNEZFM0MyMDcxQkY5N0FFRTA2NQorOjEwNzE5MDAwN0NEMzQ1RkY3MjYyNzU2NkEwOEY3OUIyNTk0MDFGNTE0QQorOjEwNzFBMDAwNzkyRDFCODRGREE4QUE0QzREMjg0Mjc4MzY4OTc1QjdFNQorOjEwNzFCMDAwRDJBNTM5M0ZENUQwRDdEQ0EyRTYxMDc5NzJCRjI5NzlBNAorOjEwNzFDMDAwOTVDRUEzQTg2OTZFQ0E0RjcxOTczNEREOEVFNzdDNTVDMgorOjEwNzFEMDAwNTZFNzQzRjlFOTM2RjI0RkZDM0M5RkQwQjA4QjVEMDU5MgorOjEwNzFFMDAwRTYzQzRFODcyNTZGRDUyNkVDRUY5ODNDNkVCMUVGREU3RQorOjEwNzFGMDAwODMwRkUyRThDM0Q2N0RGNzc2NjdGQzNDMjQzNjI2N0UxMworOjEwNzIwMDAwQkVBMEExODc5RDJGREQ1QkVEQzg2QTY3RkI2MTFBREMxQworOjEwNzIxMDAwQTc1MzlFQTUyQUZDMEQxM0FGRjM5MTFGQkM2QjlCQzQxMworOjEwNzIyMDAwQ0ZBRDU5RThBODZCNDdEMjQ4OTQ4N0M4QkY3OENGNDVGRgorOjEwNzIzMDAwQTI3ODJFNkREQkJGMUZGNUE2MjYyRkQzOTM1MzQ4Q0UyMQorOjEwNzI0MDAwNjk0QTJFOUU5NzFBRTU5NEEwNUNCQ0VCQzM5NzdGOEQ4QworOjEwNzI1MDAwRkVGNTU2ODVFMUQ2RENFNTM2RTI5MzdBMzIyRTU2MjJFQgorOjEwNzI2MDAwNUI2RjVBREYwQjlENEY2QzVDOTFGM0RCMTI5RkMxNkYxQworOjEwNzI3MDAwNkVGQUZFQ0MzNjg5Q0U0RjI5NkNGODhGRjFGQzQzNkQ0NworOjEwNzI4MDAwOUI4RDg1RTBGRDE5QzZGQjNGQjM4OUVCMDMwQjVGODQ0MworOjEwNzI5MDAwNTFGMDNDQTgxODFGRjdBNUU4RkQyM0I1M0M4MTY5RDE0MgorOjEwNzJBMDAwNzkzQzQxQkQxRENGRkZDRjEzRjgxODUwOTE2MjdBRkY5MgorOjEwNzJCMDAwRDdCOUU1NkRFNDlGMDlGMDdCMDAwNkNFMUE2NEVBNkY0QQorOjEwNzJDMDAwOTFCMjdDMjgyNUUxMDkzRjg2MDZGRjkwRkU4Q0Y5OUY0QworOjEwNzJEMDAwOTMwMzc2QkU0RjU0MjQ4NTQ5OUYwMUZCMTdFRDg2OTA5QQorOjEwNzJFMDAwNDRGOTRBNTY3RjQ3Q0QxRTg5RjZBN0RCNjA3RkMyRjM3QgorOjEwNzJGMDAwMzhCNzg1MkNGNkEzMjU4RkNFQzBCNzk1MkUwRjM5ODVDQworOjEwNzMwMDAwN0RFMDY2RUU1RUYwRUEwRjk3NTA3Qzk0Rjg2QUM5OEJEOAorOjEwNzMxMDAwM0MyRjZDQzk3NjI5NDQ3OUNDMUQ0MzkzMThFMTU5MjEzRgorOjEwNzMyMDAwQkZEMTdCQUNFRTQxRDgzOTIyRjQ2QkMxOUIyM0MzOEMxNworOjEwNzMzMDAwNjc5NzY2QzY3MzYyODExOUFGMUVCRjE5OEY1NjNDMjdDNworOjEwNzM0MDAwOERDOTMxQjU1RkE0NTREQjg5QzgwNDlFMEJFMDFGRTJGMAorOjEwNzM1MDAwMTlFNDIwQ0RBMzA2RTYxMUQ2NjJGMTU5RDk3QUVGMkFCNQorOjEwNzM2MDAwRjQ2RkY0OEI0NzBCRkU0RTU5RjA3Nzk2QjVFRUU3NkY0RQorOjEwNzM3MDAwNTk4NTMzOUQ1ODlCRTY5REE5ODY4OTdGQUNGQzY2RTBDNAorOjEwNzM4MDAwMjlDQkQ3M0U5MTlFRjkzREU0MkZDRTEwOUQ0OEYzRjhDRQorOjEwNzM5MDAwNzc4MzlDMkQ5Qzc5OEFGQ0M0NkY0NjdFNzA2MkNGN0U3OQorOjEwNzNBMDAwRjkwRUZCMDJDQUE1MzMwRTlEOThDQjYyRjk2QjEzOTZCQQorOjEwNzNCMDAwQzBENzJERjU0RURGQkM3QzhDNEYzM0RGM0MxQkM2QUJGQQorOjEwNzNDMDAwN0Q1NEM2RDk0N0E5N0ZBMDQ3REEwRkVFQzFCODY0MUEyOQorOjEwNzNEMDAwRjJCNTRBRjEyQjVDQUFFOTUwNEY2Q0I1RjlEMDZGNzk0MAorOjEwNzNFMDAwNEY1MUY3MzVBOEI3RDdDRUU3Nzk4RTM3Mjc3MEZGRUIyNworOjEwNzNGMDAwOTIwNEJFQkZEQTEyNzg1RUYzNUQxNTMyRDNEMUJFNkY1MAorOjEwNzQwMDAwNTU0MjEyRkE4QjdDRkE4QjU3QTJERUQ1NkFEMzY4NUY5RAorOjEwNzQxMDAwRjM3NUJGRkMxRDdBNUZFQ0MzRjg2RUE2REMzQzBBRTE5NQorOjEwNzQyMDAwODBGNkU0NkZFRjZBN0RDNzdCNkI5NEJFRDNCOUU3RkU0RAorOjEwNzQzMDAwNjFCOEVGM0MyNEIzQ0E3ODdBN0NCRThCQzNEMTU5RjBEMworOjEwNzQ0MDAwRTc3NDI0QzdDNUNFNkVCMkEzNTc3N0Q0NTVFMEJDMEMwMQorOjEwNzQ1MDAwM0JDMkJFOEJGQkI3NkFGNkNDMjA3REYyRDAwMjdFMUUwQgorOjEwNzQ2MDAwNzNGNzI5N0UxRTczOEEzMkZCOUIyM0EwM0VGNjM1OTU2NworOjEwNzQ3MDAwQ0I0REE2NEY5RjkzQ0U1MzI4NzAxRDM3NjBCRTI0RjI4QworOjEwNzQ4MDAwQzE3RkM5QTEwNkMyNEZGM0VGMzE0RUQ1RjgxNzk1QTFDMAorOjEwNzQ5MDAwRkU1ODUyQjc4MEY2OUY1RjdCQTdCNDYxNTlBQUI3MTQxNAorOjEwNzRBMDAwMjM1RjRGNkU0RDlFODhFNzY0NkFERkUyNzk5NUEzREIyOAorOjEwNzRCMDAwQ0RGRTFDQTY1NDFGNDQzRkQ4RDk2MzdDNUJCRUZDOTgwQworOjEwNzRDMDAwNkFCNUJCMTREQzhGQzc3Njk4OUY4RkVGODc2RUNCNUM1NQorOjEwNzREMDAwNjIzRkYyQjJGNDBCQzk4QkZEOTFBQzRGNzM5MTdGOTQ3NAorOjEwNzRFMDAwOUZFM0YyQUJGMUVEQTc0NzEzQjg3RDAzNzg5MTUwNEVCRgorOjEwNzRGMDAwNzU3NTMzN0YwM0UwQTk2QkRFMjA5QTZGRDdDN0ZDNkFFRQorOjEwNzUwMDAwQTZBRUNGOTVGMjc4RjZEMTJEMkU0RTJGMEZEOTc5REM3RAorOjEwNzUxMDAwRjZBMTA1RUVEMDBBOThDNzgxMDU1NTE3QTM1REY0QzlGOQorOjEwNzUyMDAwQkYwNTJFOEUxN0E3ODhEODA3MkM0OUE2M0Q0RjRGNjI1RQorOjEwNzUzMDAwNjM5MDJGOUFGOEY5MzJENjlDMTlFRkZDQkNDMTBGMDY2NAorOjEwNzU0MDAwN0YxODdDOTFCOTIwMjExMENGN0ZGOThFOEJDRjZGRDIxRAorOjEwNzU1MDAwODIwMkNBODNFRERDMjc1MThDQTdCMzAxRTBFQTAzOEZENgorOjEwNzU2MDAwNDFENjMwMThFMUE5RERGMzExRjkxNzlDQURGMUZERDAzQQorOjEwNzU3MDAwRjU3ODQ4MDNFOUI2MjFCODYyM0NFMEVCN0JDMEQ0NDEyMgorOjEwNzU4MDAwRTQwNzdCNzM3NkJDRkU4MzZDMDNGOTlCMTZCODM0RTI4OAorOjEwNzU5MDAwQjc0RTI3QjdBMzk5REE5QzM5RDM4MzdDNTI3NkY1MkE2NAorOjEwNzVBMDAwODBGMzYxRTAzRjI0Rjk4NzZDN0U4MjNCQjg5ODMxRjIyQQorOjEwNzVCMDAwQUZBQTlDRkZCM0FFNjE5QkVGOEFCMkI3RDZCQTI2M0VBNAorOjEwNzVDMDAwRTA4MkZFMUU3MEYxNzg0NzZBQzAyRjIxRENGRUJGOUY2QgorOjEwNzVEMDAwRjM2MkZGNUQ5RjNBNjhGRDA2MDkzRjhGRjE1RDhCQzA0NgorOjEwNzVFMDAwNEY1OTgyRkUyM0ZDOUU1NUE2OTEzMEY0MDdCQ0JFNzkwQworOjEwNzVGMDAwQjBGRjVGQjYwN0YwMUQyN0JGQ0JEMDc3NTIwMjIwRkI0QworOjEwNzYwMDAwMDA5RTE0Qjc0Q0U3NTZEMERFNDI3QkEyOTYxOTNGNDE0QworOjEwNzYxMDAwNTIzRTBERkVDMzQzNjY3ODNFQ0I5MEI3NTJBQjE0RjY5NAorOjEwNzYyMDAwODBEQzJDNzFCQUMzRTg0RjQ5QTk4NDc5NjMzQzhBMzk1QworOjEwNzYzMDAwNzk3RkVENjY3RDE0MjUyRkNBNUQ5NDAxM0M1OTlFREI1MAorOjEwNzY0MDAwM0I4NjFDMzZFNDc3NTMzMjk3ODM0REY3QUFBMTQ2MDk0RgorOjEwNzY1MDAwRDNERjNCNUNFODNGQ0VENkI1NDk5ODVBOTVBMjZBOTRGMQorOjEwNzY2MDAwRTc3MDUxMjVGMzA3NTE0OEU2M0U5MkRDQTNGNzhDNjc5QgorOjEwNzY3MDAwRUNEOUJGMkI3MUZEMUIyNzVEREMxRTI5NEIwOEZDMEFEMgorOjEwNzY4MDAwRjEzNUIyQURGQjAwQUE0RjdFMTc0QkM1RjU5RTIyRjQzMworOjEwNzY5MDAwOUJCMUE3QjkzQzMyRjJGQTZCODVCRDYxOTU0N0NGMDEyQQorOjEwNzZBMDAwOURBM0MwMThGQjBEQkVFRjhEM0RFREY2MjNGREY0Qzg4NAorOjEwNzZCMDAwQTEwNTUzNjgxRjJENkEyRDNFODhGOTM5NDU2RjcxN0VFQgorOjEwNzZDMDAwNjQ0MkZFODBGNTQ2NzgyOTZEMEIyQTg4MEZBQkRDRTkxMQorOjEwNzZEMDAwNEZERTE4RjJDNEJBQ0VBMDVDRjdENEIzMDAyOUM1NkQ1MgorOjEwNzZFMDAwQzA2NzUxRkJCNzU1NEUxRDczODlGRDU1QzhBOUIzNkNEMgorOjEwNzZGMDAwQzJDMEFCQjQwODNEMTUyREYzMUY3NDQ0RDE4RjIxQTczMAorOjEwNzcwMDAwMjJGNDE0MjIzQUI0OEUyMzMxNjc0RkREOTc4QkYyRTVEMQorOjEwNzcxMDAwODg4MjdFOTBBRTg5M0MzRUI5NDJGMDUxRjJDN0ExQUI1RgorOjEwNzcyMDAwNzFGRTFCNUFBN0JBOTBFRTc3QjQ5NTM5OTFBRDk2NjQ2NQorOjEwNzczMDAwRjA3MzVFRUFGRUVCODI0QzkwNEY3NDVDRDdDNjlDMUFFNQorOjEwNzc0MDAwOUUyOTFGMEYyQjhGRjg1MDdDNTA4RjlBRDc5OTY2NDkyRQorOjEwNzc1MDAwOUM3M0Q0OTJBRThCNzMzRjgyNTEyRUM5RTBFN0I4NzYwQQorOjEwNzc2MDAwQjRFNTI0NzEzQjMzNENFQkRFNDNGN0MyMEY2MUYwODU4NworOjEwNzc3MDAwNDFFRjU2RkEzNkY4QTE5MTcxQkY4NEExM0YyODUyOEI5MAorOjEwNzc4MDAwQjAwQkNEN0U4MTQ2QzNDRjExNzQ1MTlDRjgwRUExMEY3MgorOjEwNzc5MDAwMzZCQTJGNTkzNzAxN0U2RDBBNEZGMjYxNUNFMjBFNEYwNworOjEwNzdBMDAwMEVFNTMzREYzMTgwRTNDRDhBMDdBM0FDRkQxNEY0QzNDQgorOjEwNzdCMDAwQThCQ0YzNUFCNTlCRkM1QUI1OUZEQTREQ0YwREJDRjY2OQorOjEwNzdDMDAwODYwRjAzQUZFMzEwQUZEMjk3QzdFQkE3QjhCRUEzNjM5MgorOjEwNzdEMDAwRjFGQjY1RTc5REI1NjQ0Q0RDRjM3MkZGNTdFNjNEOUUxNworOjEwNzdFMDAwMDU3RURENDE3NjE3M0ZCNzYxRDA5NzIxMkY0QTk3NkUwRQorOjEwNzdGMDAwQ0MyNEUyNjgzN0RGRUI2NUM4OTEzMTdCRUEwRUEyOEFDMAorOjEwNzgwMDAwNjg5NTEzOTdCNUIyNkIxMTRGNjNDMzJBQzNBMzJFRkRCRQorOjEwNzgxMDAwQzk4RDhGRjE5NzRDM0E3RjcxNjMwMkYwREZBODE3NjYyQworOjEwNzgyMDAwMkREQTA2OEY0NjZBMkM3NTNBMDAzNUIyNUQyNTM5QzZDOQorOjEwNzgzMDAwREFDRjJGMEVENTEyRkUzODFERkQ4Qjg2NUUxQTgzNTdDOAorOjEwNzg0MDAwQTE5NzFBRkI4QjExMDc1QTk3MTBBOEM0RjFBNTNEQzA0OAorOjEwNzg1MDAwMzc1RUNDM0ZFNUY2RUU1QTU3NjA1MTAyQjQ0RjA0OThCQworOjEwNzg2MDAwMTMzMEQ3QUUyMDlDQ0RFRDUzMzM1RkY2QzY4Nzg5MTYxMworOjEwNzg3MDAwM0U2QjAxQkNEMDM5MDREOEU3RjJBNTU4Mzg4Q0YxRjMzRgorOjEwNzg4MDAwMTI5MjM5OUM0MDZEQThCRjY0OTUzMjNFNTgwREJGQ0YwRgorOjEwNzg5MDAwMkU2QjI0MEJFMDNFOENDNzM2NzE5RTZCODVGRTc1OTc3MAorOjEwNzhBMDAwQTU1Q0VCQUE2OEMwNzlEOTU0MTY3NDE0N0Q3OUI4MEQxQgorOjEwNzhCMDAwQkZFMEJBMDQzRDg4Rjg3MDk2RUIzNDhGQzEzRUU2NDdDRQorOjEwNzhDMDAwQkQ3RUIwREEyMkY5MDE4RTk0NkE0REVBNzFENjE4RkJCQQorOjEwNzhEMDAwMzc5RUZCOTlBRTRENDRCQTE4OUNDN0U4M0NFQzYwRDQ4NworOjEwNzhFMDAwODNFMkFDQ0ZBNjA0MUVBRjVERUNFQzM4OEMyMUYzREE1QQorOjEwNzhGMDAwRTk3NUU1REUzRUUyRDM5MTdCMDZGQ0MyNEY2NUNFQzM1RgorOjEwNzkwMDAwRThEQUZCQzY0NTE4OTc3Q0ZCREYzRkYyNjBEQ0U5NEYwNQorOjEwNzkxMDAwNkFCNzA3RTEzQ0I5RkNGNzFFQkNCRkU1RURFNURDQ0U3QworOjEwNzkyMDAwQjhEOUEyQ0ZFQzE0Rjg0QjRFQUM3ODBBRjE3NzRCRkRFNgorOjEwNzkzMDAwREY0QkEzRjk5RDJERTM3MTk0REI0MjBBMUE5RDNERjRDMAorOjEwNzk0MDAwQkQ2ODZCMjJGOUU2OENGQUUyOTY1NDUzRERBMEQzQzVFQworOjEwNzk1MDAwMEU5RTI3NjU5REZGRkJDMjhFQkE2RERCNjZGQjYwMEQzOAorOjEwNzk2MDAwQzcwRkI0MjJCRTRGMEE3REVERTQyRTBGRjkzMzBDNzgxOQorOjEwNzk3MDAwRTY2RTFCNjU0NzNDRkNBOUQ1MjFFMkYwRUQzNjhFN0YxMworOjEwNzk4MDAwN0QzQUM2Q0YwMjYyMjlBQzcwMUVERTk3NDhGRENEN0ZERQorOjEwNzk5MDAwNDAyMUZENjIwRThDQjUwQ0U4M0JEMDdBMUJEOUQ5RDZCQworOjEwNzlBMDAwNzlDQzdGNUI5QjMyMTBENjZGRkU1QTg5RjQ1MjZDQkY0NAorOjEwNzlCMDAwMUNFODIxQjA2QzM1QzVEOUFDRjM5QzEzQjRDNjMzOTcyMQorOjEwNzlDMDAwOTM5RDZFQ0RGMzk4QzdCNDc1MTNCMkUzRTQ3QkI0RjIyNAorOjEwNzlEMDAwMzhGOUMyN0VFQzlBM0YyNjA4N0RBMTk0NUQ4RUY5RThDNQorOjEwNzlFMDAwNjc1OUUxOEYwQUI1RkVFRDlBOTNGNThDOTJCNDNFQThFMworOjEwNzlGMDAwNzc1Mjc5QUFERTQ3RTU1MzA5MUE4RjY3RUZEOTdGOTg0NgorOjEwN0EwMDAwRTg0QjZEMkY0NTdFREZEMUY2NEVFMjRENUE0NDZFNUY1NgorOjEwN0ExMDAwQjFGOUEzODMzRjgxN0EzMUUzRkUxQkMzM0YzRTVCRTBCNAorOjEwN0EyMDAwRkI0QTIxQkYxNzBBN0RBMEY4RDNCRUU1Rjc2QzlDRUY5NworOjEwN0EzMDAwQzg1ODc4MERCOTNEMUJFRjk1OERDMjgzMjFDN0FERjhBRAorOjEwN0E0MDAwMzhEMzk2OUI4ODc0MjEyNTVBRTNDMDVGMEQyRkJEN0RFNgorOjEwN0E1MDAwQjc1ODg5OUYzNzY4RjBDRjUzQzIxRjMwNkZDQjhDNTUxMgorOjEwN0E2MDAwODM2MEZDQzZCREVGMERFMUY3MDJCM0EzMjgxRjBDRkEzQgorOjEwN0E3MDAwQjREMjFGNjM3NTc2RTRFNzFFM0E2QkJEOUJGMDYzRDAwQQorOjEwN0E4MDAwMDVGMDUxODY4ODNGNjZBMERENjdBNUI3RkVGMjg5M0EwQQorOjEwN0E5MDAwNkQxRDQzNTAwRTU4RTlBQjUzNjI3MUVGMTU0RDRERTQyNworOjEwN0FBMDAwRkVGMjc5OUEzRTA1RUQ1MEQ4NUU1NkYxMzgxRDk3M0ZBQgorOjEwN0FCMDAwMjdENUU2QzM3NzIyN0Y2RUUxRkNCMUY4NTdEQjdGODlEQgorOjEwN0FDMDAwNzJBN0VBMTcwRjc4NTFFRUJDQUYzNkE3RTM3OEQ1OEZDRgorOjEwN0FEMDAwQUZGNDYyOUNGQkE0MUFGNEUyRjdFRjg3OTRCODc5ODVCRgorOjEwN0FFMDAwMEIxMzI1RTEwRjM3RTcyQkIwMzVDMTZCOTA2RjNGNzk1MgorOjEwN0FGMDAwRENFNjQzM0Y0M0VENTYwNzhGODNFRkUyNzg4MzNBOEYwRQorOjEwN0IwMDAwN0ZFRjhBOUZBRjUwRjVGMzA3RDIzNTlFQzc2QUNFNUJGMQorOjEwN0IxMDAwRDg2MkEzRkMxM0Y0OTdFMTMwQkRDNTcxN0JFMkMyMkQ5RQorOjEwN0IyMDAwN0RDN0I3NkI3N0FEOEI5Qjc3NjJFNDA3NThFOUY2MDZBNAorOjEwN0IzMDAwMEJCRDAyNUVDODhFMDkwMjNDRTQxNjE3NzFFQkM2MjcyNgorOjEwN0I0MDAwN0YzQ0YyMDRDMDc1NkFDQjZGQkQ1MjYxQjRERjlDQzc0NQorOjEwN0I1MDAwQzdDRkI0RENGQTUzMENGMUY0NDZBRjlEODJCRTIzN0E1MgorOjEwN0I2MDAwNDMyODZFMUU0M0I1MkRFQzQ1M0JCQzdBQjM4REVDQkE3MQorOjEwN0I3MDAwRUFFRDBBNzM2MjNFQ0I3MTA3RUREQjhCQjZGRkU2RjVFQgorOjEwN0I4MDAwNzEwMERGQTI2NzZENjlEM0Y5MzQyODVGQzE1OEE3OUVFMQorOjEwN0I5MDAwM0MxMkIxMkU1NTNCN0ZDM0UzQkQ5QUM4MjcxMUVCQjMwRQorOjEwN0JBMDAwRThEOUZENzZDQzhCQjFFMkIxQUM2NUJGQkRDMzkyOEY5NQorOjEwN0JCMDAwNDBFQkQ0NzI2MjBBOURDQjdCRjI5QzFERjdEM0Y3RjdBMgorOjEwN0JDMDAwNDk3NEJGQjJGNUZCQ0FDREJGRjFBMjdDNDAzQzUxNUMwOQorOjEwN0JEMDAwNUVBQzU3RUZGOTQyRTE2QjlFMkZBMTc2RTQ4N0VCNkQyNworOjEwN0JFMDAwRkRDNkUwREUzQTlBRThGQjk5RTc2MUZDQ0EzNzFEOTRDRQorOjEwN0JGMDAwQUY1NEY5Q0M1MkNBRUY3OTRGQURFMzc0RkVDOENBNzRFMgorOjEwN0MwMDAwREM1RjJCNkRDMTc0MUY5NUZDNzlFNUEzREYyNUZBNUI2MgorOjEwN0MxMDAwRjhDQTc3RDNGOTc5MUUzRDkzRkI2RDgyOTkzOEJGRjk4NQorOjEwN0MyMDAwOUJGRTg1RTZCNzgwMDU4OEZFMkExRjUxMkFEMDVGNzIyOQorOjEwN0MzMDAwNTY2NUU1Q0ZDNkUxOTMzRjA5M0U3OUVGMzEwNzA2NTExRQorOjEwN0M0MDAwRDk3QkMyNkYxOTdDNTUxMUY3RkU1QUUzNDlGQ0JFOTVFQQorOjEwN0M1MDAwQjNDMjhFREU5NTI4MUJGNzE0MzlBM0VEQUFEQTJEQUIzQgorOjEwN0M2MDAwREI3MTdEM0VCODQ4MUZFOEEzQjhCRTFBMTRGODkyNDhFRAorOjEwN0M3MDAwMUY3RkU1QUE4MTQyOEVEMTNEMzE4NjlFNTM4NkNGQjFDQQorOjEwN0M4MDAwN0RCQjhERUU4Qjg5RkFDRTc0REZDQjFENjI3QzgwM0I5MQorOjEwN0M5MDAwNDFCQTBDQ0FGNEY4RkU0QzhGNUIzMkUwRTNGOTJGMDZEMAorOjEwN0NBMDAwN0RGNUM2Rjc1Qjc4M0VDOUM3NDdCOTVDQzFCQzE4N0E5OQorOjEwN0NCMDAwREY2RTBCMEYzNEU1QzMzODRDRjc4OTQ0RjIzRDZDODIxQworOjEwN0NDMDAwQUZDREVGMDE0RUNBNTdFOUMxRUYzRTg5RTJBQzBCMzZBQQorOjEwN0NEMDAwMzhDQzc5NzAzRDc0NjNCREU3QzY5Q0JGQjJEMEEyNkY0QgorOjEwN0NFMDAwMTlBNTU1MkVCQzY5OTEwQjZDRDNGOUU1QUY1NERCNDI1NQorOjEwN0NGMDAwOTQ3NzU0N0REQzQxRjY0M0Y1NzY1QjA1RTJFM0FGREIzOAorOjEwN0QwMDAwMEVCRTdFMTNEMEY5NUY1QjBDQkUzNUNCNTcyQkRGNTYxMgorOjEwN0QxMDAwRUUxOENERTJGMUVENUZERDdFMTY5NzZGRTE3OTVDQkU4NgorOjEwN0QyMDAwNzU0N0UyMTExQUZCRkFFNEVCQzI1RUU0QUJFMjhFRDFENgorOjEwN0QzMDAwMDc5MjMwMkZGNzgzQTcxNjVENEM3RTA2MEI1RTBEQjlCOAorOjEwN0Q0MDAwNkE5NTk3OEYyNDZBRkNGRTgyOThCQzNBQkU5RjQ3RjJFMAorOjEwN0Q1MDAwMUQzOUZFMEM3QUFDN0E3QTMxOEREMzQzQjcwNjVEMUFBMQorOjEwN0Q2MDAwNzREQjRCOUU5NjE1OEZENkY3MkZBMjNDMUExMEVCQ0ZFMworOjEwN0Q3MDAwMDg0RTYyMDU3OEFGNUVBMzlEMTVBMEZGMzkyODI3Rjg0RAorOjEwN0Q4MDAwMUZDRjhFOTNEN0MxRUE4NkEyOUVEMUU4Q0U4RTlCOUY0RAorOjEwN0Q5MDAwRUI3N0ZCRDA4Q0M1NzM2NTRBQkM3OEI3QkY0QzhFQUIxNAorOjEwN0RBMDAwQzc5N0I4Qjk1Q0Q5OEJCNDAwNjVCNTlCRTNBRDQ5QzQzRQorOjEwN0RCMDAwNTdDMDEyQTRCQzdGRjQyOTEyM0YyNTdCODk5RjZDRjAyOQorOjEwN0RDMDAwOUNEMUI5NEEzRjlEREJGNjI3Q0ExRjY5QTA4MjU1QjhFRQorOjEwN0REMDAwQjUyOTJBRkE1MzhCRTVBNUI5NTA1RkU4MkVFNkY1RjFFRgorOjEwN0RFMDAwRjJDRTFDQThERkU2MkVFMUY1Q0JFNDYyMUI5MEU2MTM5MQorOjEwN0RGMDAwNkNGNDk0Qzk1MEFGMzFFNjM5MkZDOUU0REY1MEU1MTM3NAorOjEwN0UwMDAwMEY2MkRDNDU3RDlFREYxN0I3MEVGOERBNTkxNDg5Rjc0QgorOjEwN0UxMDAwMjYzQTU4RDA1NTg0RjczNDQyMDlGNTU1RDlCRjVGODVDNQorOjEwN0UyMDAwNDZFMDA2NDdFMDFBMzdDOUEzNDkxQUUyRjU5NENGNDk1QworOjEwN0UzMDAwRjkzMjc3M0M3NzE1RTU2NzU2QkJCOURGNzhGOENFRjFCNAorOjEwN0U0MDAwNzRGRkVFRDczMEZFQ0RFRTAxQkQ4RkRGNjRFM0ZEOUMwNQorOjEwN0U1MDAwREEzMUJDMENGMTNBRkM2MjQ2N0UwODAzRkY0NUFBNDZDMworOjEwN0U2MDAwQ0Y1RDJENzhGNDk0RjgzRjAzQ0Y3RjM0MjZEQkE5OUZCNAorOjEwN0U3MDAwRUE5RUY1M0FCRkIyNTFFNDM1Mjg4OTlDMEU5NDI0QjlBNAorOjEwN0U4MDAwRUU1OTI4OTc4QUY1QkY0M0UwMDM3RkQwNUVFRURBM0JEOAorOjEwN0U5MDAwRjAzMTdFREY1M0Y3MTA1QzVGNDUzOUYzNDdENDFCQkJFRAorOjEwN0VBMDAwRkYzNUQxOEZFNzU3REU0Q0UwRjhCQTIxNjlCREVENTJCRQorOjEwN0VCMDAwQTgxNzM5ODcyQzQ1QTI3RTUzREFGNjVEMkNCRkVEMDk1MQorOjEwN0VDMDAwRkM5MEUzOUY4NUIxQkY5QjZFNTY3ODdGRUUzQTBGREU0NAorOjEwN0VEMDAwOUYyNkU5NUM4Rjk2ODA2ODY2MDMxRTFBNzVBNkQ5NzM4MworOjEwN0VFMDAwOTE0NUNERjkxNjhBNTJENDFEQTY3MTNEQTY3MTU5MTYzOQorOjEwN0VGMDAwRUM4M0IwNEUzNzhDRTVFQjA0MzhBNTdERjE4RDMxQkNCOQorOjEwN0YwMDAwM0UyQjk0RDNEOEExMTExQ0Y3MjAxQ0EzMUNBMThCRDAwRAorOjEwN0YxMDAwRkVCOTA5RDQyMjRFRDc2NkZCREI4OEQzRDdGRTQ1MjZBRgorOjEwN0YyMDAwM0JCMzU2RDIxQURENTBERkY5MTYyM0I5REM5OUUwMTVDMAorOjEwN0YzMDAwRjkwN0ZDREUxOUMzMkYzMUY2QTVCOTY1Qjg2NDI1N0JCNgorOjEwN0Y0MDAwMTZGMTNDMEVFMTg3MzJFMkU4Njc1OUFCODI5Mzg5RjE4MgorOjEwN0Y1MDAwNTM1QkU0RTE3OEI2OUVFNDY0N0ZGMUIxOUZCQjQ1N0M1RQorOjEwN0Y2MDAwNkMxMDFCNzQ4MUYxQjE2N0RDRTcxMTFGQkJDODZERThCMQorOjEwN0Y3MDAwRjMyMkRFMkVGNkZGMzM0NzcyMjg1RjQ4NTUzMTI3OEZGNAorOjEwN0Y4MDAwMzFCQkE2NTA4QTg4RjFERDJFOEJGQzM1RTg3OEM0NTFEMAorOjEwN0Y5MDAwREZBRDg4OTcxMTQ3RDkyRERDNUVFQTI1M0ZFMjI0QTNBNworOjEwN0ZBMDAwQkNFNjUxMUQwNTk0MUY2MUIzRTY0NzFDOTMyOUUxQTk2NgorOjEwN0ZCMDAwRjRDNTYyMERGMUQ5MjRFMkM2MTcxQUI3MzdFMkZFQzUzRgorOjEwN0ZDMDAwRkM1MTRDMUNGRjc5NkYzOUM1NDE4QjdERjFFM0Y4RTMxRgorOjEwN0ZEMDAwOTREOTE0Nzc2MDQ3RjhGQTE5NzE3Q0E2MTQyQTA4RTczNworOjEwN0ZFMDAwRDkzMEQ4NjAwOEU3NTFGM0RGMDFCOTNDMkRBODUwNUFDOQorOjEwN0ZGMDAwQ0Q1QkU2RTdFMzJDNzQ2MDVERUZCRjU4RDdGQjdDRjMwNQorOjEwODAwMDAwMjBERUU3RjdBQThENjIyMzI5MEZDMjI2RjIyMDdFQzk1RgorOjEwODAxMDAwMDJGNzQ3RTc0MTE4NzhFQzJGQ0ZDNDlBNTc2MkNEMjM3NworOjEwODAyMDAwQzkwQzk4RjEzNEI4RjI1MkQzRkI4QkVBOEE0Q0Y1OEIyOQorOjEwODAzMDAwOTc4RDMzQjVDRjg2OEQzMEJBOUVCQjY2OUFBOTdEN0U2QgorOjEwODA0MDAwRjM0QzUzN0RFOEM2OUI0Q0VEODc4NUU2OUFERTBGREY0NworOjEwODA1MDAwNUFENUU3QkE4RjY4NTk2MjdBQUZDOEExNjJCQzBGRDIwRAorOjEwODA2MDAwNThGN0NCRjZGQzIwMkU1RDE4RUI2RUU0Njk2MUJBMTE2RgorOjEwODA3MDAwRTI3NzM0QUNGQkMzRDlFNDNGMkE5M0I0RDhGNUY3ODc1MQorOjEwODA4MDAwODNCNDJGNUZFOEZBRTc3Qjg0M0U3NDgxRkMzRTBBODk2MworOjEwODA5MDAwMERFMzQ0M0FENzEzQkI2Q0VFMzVBODE3MjcwMzZDMjhDMQorOjEwODBBMDAwNkZBREZBNDU3MkVCMEJGRjJENzlFM0U1NUI2ODJCOTAyMgorOjEwODBCMDAwOEVCRUFGRTg2MzcxQkYxRjIwRjIyMzlCNjQ3MTlFNzQ3NAorOjEwODBDMDAwOTI5M0Y0ODE3QjY0Rjk5NkU4N0JFNEFGRjA3MDM5NzJBNworOjEwODBEMDAwODU4N0ZCNTU3RTAyRkIyNkVFOTM4MzEzNTk5MEY2NEY1RQorOjEwODBFMDAwNzFCRTlDQTE0MzBBRTZFQjRENjVFMkZDRjk2M0FCMjY0OQorOjEwODBGMDAwNEZDMDc4NjY0NzgxOTY4QzIyMDVFQURGODhDOEZEOUJEMQorOjEwODEwMDAwMUM1QTIzQzYwMzQ2Mjk1QzhFODM3QzlGRTYxOThERkI4RgorOjEwODExMDAwQ0U3MjFCRDc3RjgyMzZDNEYzNjAyNzBCN0E4QjY4REY2MQorOjEwODEyMDAwQTNCODY2MzI0QjkzOTYxNEEyRTlENUIzQkY2ODVGMDAzQgorOjEwODEzMDAwMzExQ0FDMUE5RTg0NzZEMENCMzgzNDA2Njk5RDA5QjRDNAorOjEwODE0MDAwRkZERjY4QzhCRENBNjEyNEY3Q0VCODdCRUVCNUEwRjNFNworOjEwODE1MDAwOEU2N0U2RTVEMkYzRTMzNzAzRDcwMUZGMUNCNzlCRUQ0QgorOjEwODE2MDAwQTJGRUZDNTM5NTlCRUZGN0EwRkZGRjc4MDEzM0U1MTlDMgorOjEwODE3MDAwNTQ3QkI4MUQ1NUVENTE3OEJDM0NGNDk3NzQ0NDRCRDdGMworOjEwODE4MDAwRkNDRjJFNDFBMDZCQTVGNjU1MjhBMjU3NkZCQ0JEODIyRgorOjEwODE5MDAwRjI3Njc3Q0QwOEEyRkZDRkYwM0IxQkZERDRCNjRFNjQzQworOjEwODFBMDAwM0RGNzA3NDMzRjM3QkNDMUZENUYzNzdDNjZGNkU3REUyRQorOjEwODFCMDAwRTlFMTc5RDc3NzhBRjFBRTg3QzIwNzc4QkIxRUVGRjQ4MQorOjEwODFDMDAwQzZGMjg1MDk1MzkwMUZFMDc5NTg4MkZBQjdEQjQwRjU3MworOjEwODFEMDAwMDNCQTlGMTFDOEI2MjEzQ0JGNjdGRUQ3NzY0Qjk4QUY1NAorOjEwODFFMDAwQUREMUY3RDdCMTBBMUJDMkY1RkFDRDhCM0REOEFFQTdGQQorOjEwODFGMDAwM0ZBMzlGQzE3OEE2MTNGNkU5RTRBMDJEMURFOEE3RkJENQorOjEwODIwMDAwMUIxMkVERUIzMDlFMTM5RjU3Q0MxRUJDMTJCNzBFNjNCMgorOjEwODIxMDAwQkNENzU5RTBGNDZCQjBERTMzOTk5RkZBMzVGQTY3MkM3RQorOjEwODIyMDAwQzEyNDA3Nzc1NDJFRkE1MzZBMEVDQTNGOTlGQzFGNEI5QworOjEwODIzMDAwRjYzQTQ4RkU3NTU1OUREQkZFMjBCQ0JGNjU3MEM3NDUwQworOjEwODI0MDAwQTg1RkJDNTlGNUQ5MjU4ODk3MUIzNzJBNEM4M0Y1MEZCMQorOjEwODI1MDAwMjUwNEVFRjM0NEUxRURGOEJDOEYzQ0Y4MUVGNDg0QzcyRQorOjEwODI2MDAwMUZDNDRERkU2OTA3OURGMzdBQjNFQUU5NEJBMkY1RUExNAorOjEwODI3MDAwNEQ5RTg5M0ZGNkUwM0UzOUU2RkNFMjNENjU0RjBEMjMxOQorOjEwODI4MDAwN0JEQkEwQUZEQjA0N0QyRDc5NzIyOEU5ODM0QjNDRTZENAorOjEwODI5MDAwN0I1Mzk2M0M5RTRCRTc4OTRBMjUxNkQ3OEVDNDdCM0Y3RAorOjEwODJBMDAwMzAyRjdEMDdEMDE1OUUyM0RDRjcyOUNGMUZERjc5MjRERgorOjEwODJCMDAwQTU5OENFQTNCMkMwNzY4NENGNjhCRkYzRTU5Qjg2NTM2MgorOjEwODJDMDAwNUVFN0IxQjRGM0JCMTcxOUUwMEJBMjdFQzUzODlDMkY1MworOjEwODJEMDAwMDlGRTk4RDU5QTVBMkNGNEJCRTcxMDZGMzdGREZBQzlGRQorOjEwODJFMDAwRDM3RjQwRkNFQzdERkFGMTNCQjE0REM5RjlFMTgzODlDNAorOjEwODJGMDAwN0RDQzJGRjAwMEZCMThEOTNGNUQyQ0MxRUY4ODYzRkZDOAorOjEwODMwMDAwM0MyQkY0QUZFRkNCM0FEOTI1RTdFNDBBOTFCRkNFRUQ5MQorOjEwODMxMDAwMTA0NUY2Njc2MDFFNzc0QkFCOTI4ODc4RjNBMkMxNjI3NgorOjEwODMyMDAwQzgxN0QwMDlCRDc4RkZBMkI4M0ZERDA5RjZEOTcwMjE4MgorOjEwODMzMDAwN0ZEQTNEMUY0RjY5RTI3MTA4OTM1RTU3NzJBOENBQTRBNQorOjEwODM0MDAwQ0Y1NUMwM0Y5NEY3OTc2RjBBMzRFMjNEOERCREVBNzU3MworOjEwODM1MDAwNjE5OUVDRTEyRkFCREZCREYzMjVFNTdEQTc4N0YzN0ZDNgorOjEwODM2MDAwNEIwMTk3REYyREUxODQxMEI3MUI1ODMxRUE3QkNGRTAzQQorOjEwODM3MDAwNUNFMEZEQjQ2NEJFMkZEOEE1Q0UwMjI3RkM3RUM2RjMxOAorOjEwODM4MDAwQzlBQTM1NTlCMERDNzkxQzFGNThDN0JGRDNDM0RBMzgyNgorOjEwODM5MDAwOURGNkU4N0Y4NzJFRTU3RjY3NEU5QzAzMkUxMUU3QTJBRQorOjEwODNBMDAwNjNFQzQ5RTAyQkJFQzkyNjk4RjRDN0YwRTFCRkQxMzk5MAorOjEwODNCMDAwOTdFRDI5REFFRkM2QTMzRTBGN0EwQUYyQkQ0QkVEQjA3NgorOjEwODNDMDAwMjdDNzk5REYyRjUxN0UwMjdEOEZGNTcyRkJDNEI5ODdENQorOjEwODNEMDAwQzdFMTlDOUE0RUY3OUVCOTdDQkU1MTY4MkYxOUVENEZBQworOjEwODNFMDAwODlGRDY2RjFFMTM3ODdEODYxOUQ0RUNCNDdCQzE4NDdDMAorOjEwODNGMDAwQThERUJEQzM4QjY2RjI2NTg5ODEyNDJGQzY0QjhFQkY3NAorOjEwODQwMDAwNUFFQUEzN0NBQkNENDNEMEFFNkQwOUYzRjhDNDA4OTUwRQorOjEwODQxMDAwMDVENTM4RjczNUQ3NkUyQ0E2NEJCRjZCMzZBNjUyMzkyQgorOjEwODQyMDAwMENGRDA5RjBBODM2Q0NFN0Q5QjlBNzMxMjU5RUJENUQ3MgorOjEwODQzMDAwRkIxRjdCMDdFMUJBM0QzRDgwOUY5NzFBRDE1QUJDMTBDNAorOjEwODQ0MDAwRTUxRkMyNjIwMzM5RjdENEE3QzNBOUJGNEJCQ0Q5MzQxNworOjEwODQ1MDAwM0YxODVGQzVFNzIwOTE2NEJDRUZFODY5NjFBRjc1N0VBNgorOjEwODQ2MDAwQUE1MDNCQTNERjExN0IyNjJBM0U1OENCQzI3MEYzMDFGMgorOjEwODQ3MDAwQjIwRjVCMUQxQUFFQjM2QjBCQkYwRkNFRDVFQTIyQjk5QworOjEwODQ4MDAwNTdCQjZGMkFCN0UzOTI3OURDNzM3QjQyRjcxRkM1Mzk3QworOjEwODQ5MDAwMzZGQUJCMDQyRTVGMzM0QjgxRkVCN0RCRjlGRTM4MEM5NgorOjEwODRBMDAwMTg2MDg3M0JGMkRDMThDRkQ1RkE2MzRBNkE3N0U2RjFBOQorOjEwODRCMDAwN0JGNTVDNkEzM0ZCODYzQjFBRUYxRUMyRkI1NDJGQTc4OQorOjEwODRDMDAwQUJFRDA5NjExOUYzNzZCQTgxMjYxRjIzQjgyMjcwMzIwOQorOjEwODREMDAwMUFENzgwNzMxOEU5RjNEQkVERERFRkUyRjk0QjNBNUY3MQorOjEwODRFMDAwQTcyMTFDMUM0RUQ2M0E1NDQzQkRDMkU1RTNGMTVCOTc2RAorOjEwODRGMDAwNEZGMzA3QTU1OEI4NkE0NzgyOUUwQkZDNzY0RjAzOEI1MworOjEwODUwMDAwRkM3RDA0Q0M2MzRCODhENDlEQzAxM0RCNzM5ODkwMDcyQgorOjEwODUxMDAwQzM1NjRGQ0U4QUFFODM0MDFBMTNGOTdFRjYzREMzNTczOQorOjEwODUyMDAwMzc0RDIwM0IyN0E4QTA1RDBGQTUyNzA1RTdDOUY3MzdFMgorOjEwODUzMDAwQkNCRjYwNDAxMUM3MDNGQTg5MTM5REZDN0Q0RjdCMjdBOAorOjEwODU0MDAwQkZCMjQ0NzVGMzc2RkUyNDVGRTIzNDg5RjVEQzY3NkFENgorOjEwODU1MDAwRjg5REVFOTBDMkVGNUU4OUZFQURGMDgxOTExQUMwNTI5NworOjEwODU2MDAwRkRDMkYzNDRCNzhCRTRENjA3NDc2ODc4MkUzMUIwMDBEQworOjEwODU3MDAwRTlGNTU3NkZDOTBDRUY0N0ZBRTA0OTE3OUQ0MzJFNzg4QworOjEwODU4MDAwNkUzM0Y5QUJBREZEQUQzRUQ2NzAxRkU2NjU3NzNEMjc4NgorOjEwODU5MDAwNjk5ODA3REE2NUVCQTZCODUxNERFQjdCNzQ1RTcxRUExQQorOjEwODVBMDAwOUUxMzc0NkU0QjQ5MEFENDc5NDc2MzVFQzQ4QTMyQzQwMQorOjEwODVCMDAwREY1OEQ2REM4OEZFM0Q5MDg3MTRBNzZGQzlFMEYyRTM1MAorOjEwODVDMDAwQ0NEMTRCMUU1QjExODVFRjA3QkRDMkJGREIxREI4MThCOAorOjEwODVEMDAwRjlBNjU1RjBFNzNFRDQ2RkEwREMyREY0QUNEREZCNkZCRgorOjEwODVFMDAwQ0M4RDNFODcxNTY0MDdDODFGRDZDMDBFNTE3RUExRjEwMQorOjEwODVGMDAwQkMyQkE0RDIzOUIwRTFBRjNCNkZEMUEzRThBRDU5RjBBOQorOjEwODYwMDAwN0JCMzE4MkYzRjI5QjA4QUY4NzZGRjlGRUQ1RTBERjNGQworOjEwODYxMDAwNTg1Qjg2QTBEQzZEMDEzREFDQUY3Q0M2NUEwQkRGRjQyNQorOjEwODYyMDAwRTRCNzlDRTRGNzcxQzNCQTM2MjVDMTNBM0RGREZBOUUyMgorOjEwODYzMDAwNEJGMUVGOEIwMEZDOENFRUFCM0FFRTIwQjlCOTNCOUJEMworOjEwODY0MDAwRjNERjhBRDczRTE5ODk3MkVCOTNCRDhCMkU0NjdDMkRDMgorOjEwODY1MDAwRjNEQTBDM0E5Rjk0ODBGQ0Y0MkMyMzM5NjZGMDYzMjEwMgorOjEwODY2MDAwRjJBMzg0Rjc0MjcxM0Y0QTIxRDIzOUYyOUZCRDdEMUFBRAorOjEwODY3MDAwRjFERjZFN0UyRjA0RDAzOUQxM0REMEI5MEZGNThCNDI5QQorOjEwODY4MDAwMUZEMDNEN0QzRjk0Rjg3OTdCQkJDQ0NGODE4MzFDQ0YzRAorOjEwODY5MDAwQTdGQTI0Q0E1N0Q5REUzRUQ5NDdGQzJDMDM2QThCOTAyRgorOjEwODZBMDAwMkZDMzA3QTg5RjE2RkFEQjc1QUNDNDcyOUZFQjI5NEM0OQorOjEwODZCMDAwRDIxODEwOTE4RjdGRjM3MDNFNkQyOUQwOTJGQzMwOUZCRAorOjEwODZDMDAwNDQ0NTMxRjE0MUQ0M0VDOUVCNjIxRjk1N0Y3NEQzRUEzMgorOjEwODZEMDAwMERGOEY3QzNEQUM1QkUyMEY0QUU3RDQyQ0Y2NUM3Qjg0QQorOjEwODZFMDAwQkM1RjJBRjZCMjI1QkYxOUY3RUQ2RDMwREYyNTJGMjlDMworOjEwODZGMDAwNUNGRTBCM0EzOTIwRjRFMDQzRjUxOTU0QzdGRDQyODM4MAorOjEwODcwMDAwNzUxQTBEMjVERTA3NTRBQUQ3RTE5RjJGNjE2M0NBOUIxNgorOjEwODcxMDAwMEY2MjM5QUVBMkE1MEM4RjRDNEQ5OEQ1N0U5MDlGNjEwQgorOjEwODcyMDAwRDM4NzIzRkRFRDNBNzBGNTcwQ0FERjNERUU2MDk4QTI2NQorOjEwODczMDAwQjhFQjZGREQ3RjdDMEFGMzUxRjcwMUZFRTNFQzRCRTgwOQorOjEwODc0MDAwOUY2NTE0QkZBOTIwN0FFQzhENkVCQUE0OEU2QkM2RkIxMAorOjEwODc1MDAwNDEwRkJDQTc3QUFBMEExQjdEMEQxMjA2RTBFM0Y1N0I0OAorOjEwODc2MDAwQUE1NkUzQkQ4MDM3MjVFOUM3OTExRTk3RkIwMkM3OTE0MgorOjEwODc3MDAwOEZCQTVFRjk1QjNBQ0FGNERENDdGRkVDNDU3OUJGQ0JBRgorOjEwODc4MDAwQUUwRjQ3M0FEQjk1MDNGNjQwMUNGQTNDMkNFOEE3QTQ1MQorOjEwODc5MDAwOTdCQzhBQ0ZCQ0RDNUVCQTI0QzhENjIxRkRENEVDNTI4QgorOjEwODdBMDAwRThFRjE2OUNERUE1RTg3ODBFRkI1RDNEOTA4RTdBQ0U1NAorOjEwODdCMDAwNDkxNkJDN0UzQ0VFRUZDMkFFOURDRkQxQ0VFNkEzREUyNQorOjEwODdDMDAwMzI5MkVFQ0IzMEQ5OTk0QzU5MkVEMzNERUZBRDEyRjkwMAorOjEwODdEMDAwMjcyQTJEN0E0ODM1NkI1RTM1MThGNzhERDZDRDc2OUNENQorOjEwODdFMDAwNDdENTE2RjNGN0Q1QThCRjhDQzRCMjZGN0JGNTMzQUY2RQorOjEwODdGMDAwRDA1RjcyNTkyRUVBMkY0MDNGRTQ5RkU4N0U0REYxM0Y1MworOjEwODgwMDAwQzYyOEJGQTcwREYzN0I5RTk2Mzk3RTQwNUUxMjFGMUFDNQorOjEwODgxMDAwN0FDQzU2OUY3RTFBRjVDQUQzODI0RUI3MEI3QkI0N0JCNworOjEwODgyMDAwQkI0NEY5RkRDM0I2RjJCQ0VCNzEyN0I1Q0Q4Q0NGOUYyRAorOjEwODgzMDAwRjJDMjJBODUxQzFDQTdGMkY4QzVCOEEzQjkxNDBGMURGMworOjEwODg0MDAwQTMzM0YyODcyQzY4OTU0Mjg4Qzc0QTQzQUYxM0U3MjlDMAorOjEwODg1MDAwNjBEQjI1QkQ2RTJDMEIzNUUyRkQ3MjBCQjc0QTc0MEU0MgorOjEwODg2MDAwNjNEMTU2QjNGRkJFN0FFMzJCODdEMTNDNUNEQzYyMzkxRgorOjEwODg3MDAwMUYyRkYwNjI4RDZGRUNDMDVGRTJDNDM3MkU0RTEyRkVFOAorOjEwODg4MDAwOUMyMTZDODhFOUJDNTVEQkY5OURCN0ZBQUIzODdGRkRCQworOjEwODg5MDAwQUFFOERGNjgzNzIxODlEMzREOEQ5ODZGNzU0ODA5ODkxQgorOjEwODhBMDAwQkY0RkU5QzZGQ0RCNUIwNTdEREMyQUU4QTM5Njg1RURCRQorOjEwODhCMDAwOThCRkJGNzgwMzlGMkY1QjZGMzNERDVCQkM2MEQ3RUQ0NAorOjEwODhDMDAwNzQxRUMxNEE0Nzk1REI3OERDMEQxMDQ4RjE5RENBNERGNgorOjEwODhEMDAwRTZGNzU1MDIxRjU1MTY3Q0Q0MDQyNDBCNUM1Q0RGOEUzMgorOjEwODhFMDAwODVBQkU1N0E1Q0RGQzVEQjZDRjRGNzM5QUM3MDlENjU3MAorOjEwODhGMDAwQjMyOThGRTgxRjBEOUY3NTlEQUUzM0Q2RTk1Mjc2QTkzNworOjEwODkwMDAwNjk5RENBRkJCRTlGMjA2MkRGOThGNURGNjcwRjVGNEE1MworOjEwODkxMDAwRjkyRTY3REE3MkM4N0Y2MEQwODdCNTlGMjk0MjdGOUVBMworOjEwODkyMDAwQkE5MUVCOTlBN0Y3OTQyNThFNDBCQkU4ODhFQTk3QTAwNworOjEwODkzMDAwOUZFMjk3M0VGNkUyNzk4RkEyQkQwQUMzQjg2MDU3NkJGQgorOjEwODk0MDAwRjEzQTNDQTdCREIzMkRFRjVBQkM4RkEyRTgyNTk1RjZBRQorOjEwODk1MDAwOERFMjk3OEFFODVFOTBBMjk3OEExMjczMjk4RjQyNEIyNAorOjEwODk2MDAwNDU3QzQwM0ZCNEVGNzYxREM5RkI3RDIxQ0FDRkI2QzkxNworOjEwODk3MDAwMjU4OEU2MTU0NzhBMTI1MTNGRDhDOUI4M0Y0MjdBQTlERgorOjEwODk4MDAwMjRCNTIzNkExRjU5OUNDNEZEMDNBQjMyREVCOTA3RjUzOQorOjEwODk5MDAwRjdBOUNGREFFOEJDQzk1NDVCRjdDQjk4N0ZCMEIzNERFOQorOjEwODlBMDAwRjVBRjgwN0FGNTRCNzMxQkYwOUU4QUVBMjcyNTNGQUEyNAorOjEwODlCMDAwRDk4N0RCOTdBNDdEMDdFOUFDRDVFNjczMTBCQ0RGM0QxMgorOjEwODlDMDAwODBFRjgzREIyNDdGM0VCNEFGREQ3QkQ1RjBFRDk4RTcwRAorOjEwODlEMDAwQkRCOUQ4MUY3RDJFQkIyODU5QkIxRkYzMkE1OTY2MjI2QgorOjEwODlFMDAwRDlERjUzMkZCMkQxN0U3QTZBNTBFMkNGRTgzRTE2N0RBRQorOjEwODlGMDAwRjMxNDk0QjNBNzlFREY2OUE3NzM4M0RCMjU5NjAxMTM1NQorOjEwOEEwMDAwMzk5QzcxRjAxOUJBREZFMzk3QUY1MEJFNDJEOUFFNTcyNworOjEwOEExMDAwMjgzRkExMzc3OTdGM0FBNEIwMzBEOUREQ0Q3NDJGQ0M2RgorOjEwOEEyMDAwRTJDRDQ2QkQ4M0NFNDE1NDA4QkRBOTY2Q0IwOUFBNTcwNQorOjEwOEEzMDAwQTFGRTBGRTM1NTZENTI0MjFBRkM3QTcwRUZBRjI4QkZDQQorOjEwOEE0MDAwQTE2NjFCQ0Y2RjgwRjcyNDdGQUEzMDdFQUE0NUU4N0MwMQorOjEwOEE1MDAwMkVFMzc0MzA1N0M4OUY0NThDREYzM0I0QTg5OTlGQTM4OQorOjEwOEE2MDAwMzNFRTQ1MzJFODdDRkVCNjM5OTQ4NzE2OTM2Rjg2RjY2RQorOjEwOEE3MDAwMjVDNTIxOUE4OUJFNjNFRjFCRTJGNDZEQkQ3N0M4NEExNAorOjEwOEE4MDAwREYyRDA2N0QwRjYzQzM5MEJFM0Y5OUM4RjNDMzNFNzlDNworOjEwOEE5MDAwMjUyMUIxMTBFNkYzQzk4QjBBRTVEREY3NDFFN0I0OUY2NAorOjEwOEFBMDAwMUUxMUZCRkY5OUIwNENGQjkzRDFBRTczQ0Y0N0I0OEYyRgorOjEwOEFCMDAwRDQxRTM5NjM0NzdENzU0QUVCODdCNDBFRDM1QkY3NEZGRAorOjEwOEFDMDAwNDYzQzdGOEIwNUFBMTE2RkRGNkE0REY0MjE5RjRGRUY2MworOjEwOEFEMDAwRTA3MjZCNUFBQjIzODQ3RUVBNkZCMTk2MjY1Q0RGQUUwMAorOjEwOEFFMDAwN0QzRjZGNEE0MTdBNzk4MkQzOEIyMUNGMTYwQTdDMkU0MworOjEwOEFGMDAwMTRGODVDQThGMkZCOUVBQTBBRjczRjg4RjlEMEQzMThCNQorOjEwOEIwMDAwOTczN0QzNUE4NEJDRDk2NEM2NkY5N0FENDUyNUJBMTkzNworOjEwOEIxMDAwMjFCMUU2RUNEOEZENkUxMUVCQTA3MzhGNUQ5OUMzRTkyRQorOjEwOEIyMDAwRUY0OTA2QzE1RTQ1M0RBQzdBOUIzNTBFQ0VFREZBMUE5MworOjEwOEIzMDAwQ0I3RTdBMzBDOUY2QTVFRUMxNzhDN0IyMkVEM0JCRjk4OQorOjEwOEI0MDAwN0UzNjBERTgwOUUzMjE2REUxODY0Mjk0N0IwNjdFQUMxQQorOjEwOEI1MDAwRUJEMkE2RTUyNkY1NzVERUY5NjVBMUI3MUJGNTZGOEI5RgorOjEwOEI2MDAwN0IyNjVBN0NDREVFNjgzQkJDRENDN0Y1RjBBQUIxNEE0NworOjEwOEI3MDAwMTBEN0I1Qzc1RUM5M0IzODUyOTMyM0Y2MEFEODI5OUY1MAorOjEwOEI4MDAwMjUwREUwNzZDQjI4RThGQTg1MkM4NUE1QTU0NUVDOTU0MgorOjEwOEI5MDAwRDUxOUY3NEYyRjRBQzNGQjIzQjhCQ0U4MUMwM0ZENjE2RQorOjEwOEJBMDAwQkU4MENBNDg0RUQ1NkU3Mzg0RDBDRUY4MUY4NUI3NUFBMgorOjEwOEJCMDAwM0QwMDgwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDA0NgorOjEwOEJDMDAwMDAwQjhENTc2RDZDNTNFNzE1M0VGN0MzMUY4OTEzRkJFMAorOjEwOEJEMDAwOUE3ODY2MkMzNEJCMzFGOTIwMjU4NERCMTA5QTQwRDc3MworOjEwOEJFMDAwRjYyNkE1MUQ4MzE0MUM1ODI5NkFBQkUyQjY1QkQ5MEE4OAorOjEwOEJGMDAwNEU1MDg1MjgxMjk1Qjg4OUE5RDY5NTY5NDJEQTdFNTRENworOjEwOEMwMDAwRUE1NkREMjI2RDYyMUJBQjRDMDk2QTk4OTJDOEExQTE5RAorOjEwOEMxMDAwMjVFOTkwQTA0MDFCRDBENjU5RkM2MEVCOTQ5MEMwMzQ1RAorOjEwOEMyMDAwRDI0RDk1RDg3M0RFN0I4RDFEMTJCNDNBNTI4RURGQUZENAorOjEwOEMzMDAwRjM5RUYzOUNFNzdEREVENzVEN0RGRkYyOUFGNTQ0REY3RQorOjEwOEM0MDAwRURCRkVFQ0RDMkM2RkJBNTQ3MDlCNjNBOTRGMDY5REY4OQorOjEwOEM1MDAwMjBFQTIwRjI0NDlBNjBGQjI0MjM0M0IwQUJBRjdCMTM5RAorOjEwOEM2MDAwMjU0NDIzNTU4QjQyMDlDQ0JCQTFFQUYzMzVCNDZGRjFGRgorOjEwOEM3MDAwRTdFMUJDRURGQTUyMjEyQTIzRUE4NEQ1Q0JGMkZEOUQyRgorOjEwOEM4MDAwNkFENkNCRjMzQkZCMjVEMzg2RUQzREY5OUY4QUNBNTJDQQorOjEwOEM5MDAwQTJDOTgxRTk4QUU3NjA1NzY4MzJGRTcxRkZGNzk2QTg5QQorOjEwOENBMDAwRDg3N0VBOTI4RjYyOTVEOEQ4MzIyRkQwRkQ0NDJGOTI5MAorOjEwOENCMDAwRjNEOUE2MTFFRDk5ODdGNkYwNEJFREQ0ODAwRTY5N0ZCQworOjEwOENDMDAwMzlCNUMwQUY4NzhDMENENjc1NUU1NDBDNEI0N0ZGMDk4NQorOjEwOENEMDAwMEY1MTMzNTFGNzI3N0YxQTlFMTcyMUJBRjZBRTY0Rjg2OQorOjEwOENFMDAwNzQ2N0ZEQUI4RDY4M0Y2RkVGOUY4N0Y5Mzc3RjI3MTk1QQorOjEwOENGMDAwMTZBNkJGRjg0REEyODdEMEJGRUQ0RENGOTVBQ0RGRDlGQQorOjEwOEQwMDAwRUI5NkY4OUZCRUIyMTdGMzkyNDdGQ0ZBMUI2ODc1NTNCNworOjEwOEQxMDAwNEYzOTYxNkUwRkVEMTczNjQ5M0ZCQkFFMDRFMUFGMkZGRgorOjEwOEQyMDAwRTU2NTVDQzgyRTU4MUYyM0RBN0U3OEE2QkYyNEE5RjkxMgorOjEwOEQzMDAwMzZGMkRCRjM5N0Q2OEVFMTgyRjEzNTVBNjlFNDZBMDBBOAorOjEwOEQ0MDAwNUZFQUE4RUU5NkMyRjExNzFGOTBCMEZGRTQ4OEEyRjk3RgorOjEwOEQ1MDAwMjQ4MURCREJERjJBQzRFNzM0QzA1OEMwRkQ0NTI2MjE2RgorOjEwOEQ2MDAwQ0ZDOTczMjU3NjExRTZGRDczMUZDNjZBODlDNkY3QzFBMAorOjEwOEQ3MDAwQjkwRjdFNUExNDgxODdCQ0QyQjE0QjA2REY4RjcxM0Q4QgorOjEwOEQ4MDAwMTlGRkM0NTJBMjNGMENCRTdGMkZGMzAxMDk4ODNBNkMzMQorOjEwOEQ5MDAwM0Y4Qzc5OEIwQkUyNEUyM0E4ODIzODExOTc5MUMxN0VDQworOjEwOERBMDAwNUQ5RjJBMDZEQzczNUMzNURFNDgzRUFFRTM2QTM2NjhCQQorOjEwOERCMDAwMTRGMDYzN0E5RkQ5MzE1QzhENzI0OTI3NDVCRDY0Njk4RgorOjEwOERDMDAwNThEOERCQkMzOUExQzRFREZBN0MxQkY5NkMzNUIxRkU3NworOjEwOEREMDAwMjk5NzE3QTQ0RTQ1RTM4OEYzNTkwRDQ1MDQzRkJCRkI4MworOjEwOERFMDAwOURGQUNBMDM4RUM1RkU5Qjg5NzE0MTlCRjc5RjM1REVCNAorOjEwOERGMDAwNjZFREUwRjE5Qjk1MDFCMjE4QjcyRkFENzY2RUVGOEU2MAorOjEwOEUwMDAwMjlGNDA2REFCQjNGNzlBOTk2MEFGNjI3OEUxM0Y1RUQwOQorOjEwOEUxMDAwRjI0QzQ1OTlCNzVERTc2NDExNUZEN0I5MUJEMTJBQjQwRAorOjEwOEUyMDAwRDdEMjNCQUIzNUI0RDc1MTdBM0Y4RjdGMTgwQkZDODgzNAorOjEwOEUzMDAwNzk2REYxQkVGM0YzN0VCRTA4MjkyMjVFRTI3Q0UxQ0ZCQworOjEwOEU0MDAwQTI1RjNBN0VERDdDN0I2OEEzQzBBMUM3RTVENTBCMjE3QworOjEwOEU1MDAwNTlDQzdGNTU0QkJDQzJFNzcwRjJEQzdGQTM0ODlCOEU5OAorOjEwOEU2MDAwNUZCODEyRTQ3QUU1RUE3REU3QjlCQjFEMzc3NkUwRjUzNQorOjEwOEU3MDAwMzc1QkY1RjM0RjgzMDc4RDIzQUExNTQyOUVDN0M2OEEzOQorOjEwOEU4MDAwRUM3NkM2NjU2MERCREZGNjcyREQyRUZCODhDRkMzRUVDNQorOjEwOEU5MDAwQzE2REI1QzQ3RTEzODk2NTcxOUNDMzlCODMzRjVFQzY1QgorOjEwOEVBMDAwMzg5MEQ0MjNFMkIyMzgzRUM0MzVEMTc3MzFBQUEzM0ZGQgorOjEwOEVCMDAwMzk3MDMxQ0FFM0M5RTMyQjdFNjE2MUZFRjIzMzhERUI3OQorOjEwOEVDMDAwQjhGRkQ4Njk1NUYwQUZGMTRDOTNFMERGQjEzRjM3OTU2QgorOjEwOEVEMDAwMkRFMkMwQzkwOEIwREZFNDg4MUE2NzdDOTIyMzREMUZEOQorOjEwOEVFMDAwQjc2MzVFRjI0QzVCOTNDNERCOUM2OTJBNjNGRDU5MkUyOQorOjEwOEVGMDAwNTEzQzhENzE2OUE0NEFCNDczRjlGQzVDNzNGMDlCMUNGRQorOjEwOEYwMDAwMDIxRkQwMkY1MUNDRTEwRjU1Q0RFMENGOEVERTUzNUU0NgorOjEwOEYxMDAwQ0U2MzQ3OUY2MjE2RjIyOEI3RUU5MEE2MEEzRkJGNjU2MAorOjEwOEYyMDAwRkU4MDRGREQ2OUM5MTRGQzM4RUFEODFEN0RDNzQ0N0UzOAorOjEwOEYzMDAwREIzRDY5NTFFRkVFMjMxRTY3RkM4RjhFMjUzQTI4RDY2NAorOjEwOEY0MDAwNTkzNENGNjIzQzNFRTYyRUQ0NjFBREQ3NUU0ODA4NzFGRAorOjEwOEY1MDAwQjQ5MkI2QTRFN0QwQzM5QUIwMjRENjhENUU0QTdDOUI2NworOjEwOEY2MDAwRjkzMkRBOUFBOEQ1RUE2N0NGQjNBODRERTQ0MzkyOEJEOQorOjEwOEY3MDAwNzdBRjY3OEQzRDg3QkYyQUY2ODczQzgyNjVCNDM1M0U2MworOjEwOEY4MDAwQzc3ODM4RUNGMDY3QUQ5NzEyNzNDNUYzNzlFRTNDMTFGMgorOjEwOEY5MDAwMUQ5MEMxOEJGM0VEMUU4REY5NEY2NDk2MkM4MENFQUVFMworOjEwOEZBMDAwNzc3NTc2RDNFMzFFRDNCQjBDRTNBNDlEMkFDMkY4RkFFRgorOjEwOEZCMDAwOUNERUI2NDBDRkEwMEI3MUZDQjFCRUM1REY4Qzg3MzIwMgorOjEwOEZDMDAwODBCNEMzOUNBOTczMUIyOUVFQTE0NUYwQjM2NjY2RkY2QworOjEwOEZEMDAwMTNBQzk3MEQ2QzU1RTFFNzZFM0FGODI5RUJFMDEyN0M4MworOjEwOEZFMDAwQTlBMTFBRDY0MTUyNEEwMjEyNzhGM0VGRDMxRTREMTFBRAorOjEwOEZGMDAwRjFEQTU1QUMwNzc3RTY5N0QzOTkwRkExN0YzQUY0RUZGMgorOjEwOTAwMDAwMzRGNDhGNkQ3N0RENjcwRDU5RTAzMTNBNzRFOUREQjBFNgorOjEwOTAxMDAwRDBDRjIyOEEzMTAxQkY4Mjc3RTQ5REQ0RENCREVGRjA0RQorOjEwOTAyMDAwRDc3REZCN0M3RTdGMDZERjcyRjU5OTgwNjRBN0VCNjdCNgorOjEwOTAzMDAwRDdFNzg2RTZENDIxRTkxRkY3ODJBQ0Q0NDUzQjVGOTc5QQorOjEwOTA0MDAwOTE0N0JERTJGMENGRTc0OTk4RTVDOEMzRDNENzlBMjk0NQorOjEwOTA1MDAwNjczREFEODM4QTIyQkY4OTQ3MjU5Qjc1MUU3MTU2RjhFRgorOjEwOTA2MDAwMEE3NDdFNjI4MTI0QzY3NzZGOTY2QzBCNUY4N0VBM0UzNgorOjEwOTA3MDAwMTNGNzc2MzI3M0Q2Q0I3Q0FBRTk3REVFMzU3MTZFMkQ2RgorOjEwOTA4MDAwQkE0MEQxN0MxRDM3Rjg5REZCRjI3NkZENzJGOUYyQTA1MworOjEwOTA5MDAwQ0VGOTgxQ0Y0MjhGMjNDMkYyN0NCRTFGRDdCQkY3RTE0RQorOjEwOTBBMDAwODY5Njk5RjVBQkE1QjM4Rjk1MjM4RTI3NERDOUIwRTc2QQorOjEwOTBCMDAwQUFGQjk2RkI0RUIxREM3REREQkEyRjA5MjcyMjYxRTBDOQorOjEwOTBDMDAwMzE3OUY2QzZFNkE1RjAzNzVBRjdGNzBBQkU0NzNCRUYwNworOjEwOTBEMDAwQzJERjBBOTdERjVEODE2MDAzODVBMDJFQjU3QTJBMEI3NworOjEwOTBFMDAwM0NERTJCNEREQzEzNjY5RDkwQkYwQURFNEJCQzNFRkI4NQorOjEwOTBGMDAwRjZDQjEyRDc4MzA0REU3NzNCMkY1NUFFQkZBQUIwRTY3RQorOjEwOTEwMDAwRTg3NDg0OTYzM0FGN0VBRjY5Q0VCOUY1RDgwQjU5MEZBQQorOjEwOTExMDAwQTgxRThGOTk5NUZGNUY3N0JCNEY3Q0Q0QzA3NUI5MzY3OQorOjEwOTEyMDAwMzREMkUwMkRBOERGRjhDQjM4Rjc3QzhGMEM3QzEwRDUzQgorOjEwOTEzMDAwNEIwQUY5MjVCQkZDNTI4NTk1QTQ4REVFRkQzODkzNkY0MworOjEwOTE0MDAwRTNDQzM3QUVGN0QxMEZENjNGQ0QzQ0U5REQxNDkxRjQzNworOjEwOTE1MDAwODJGQkYzRjhGOTYwNzU4MURGODk3RTQ1Q0MyNzM1NUJBQQorOjEwOTE2MDAwRjM0NDY5NjE5Q0FGODkzODI3RDI4RTNGQTI2Q0NEQTZBQgorOjEwOTE3MDAwQTU4NUUzMjk5N0I3NTlDMURCOUYyQ0RFMTlFNzczOUNCRQorOjEwOTE4MDAwRTNBRDRBMEU2RjNCRkIzQTQ4REM0NzZFREU2OTJGQkUwQgorOjEwOTE5MDAwMjAyRTZCRDA2N0ZGMDZFMzkzOUVBOThBNzBDMUI5RjhCMQorOjEwOTFBMDAwQTE4QjczNzM0NjEyN0M1QzQ5OTZDMjdFOUJFMUYxMTlEOAorOjEwOTFCMDAwNkVBQjk0NTE2MTFGQTA4Q0U4Mjc1QTQ4Q0NFM0ZCNUQ0RAorOjEwOTFDMDAwMUUzN0FCOTkyMUE5NDFDQ0IzNTRGMDcyMTU5RDE1RjMwQworOjEwOTFEMDAwMUVBMjI5NjE0RDgyQzBDM0I2OTEyMTZDOEIzRkIzOEUxNAorOjEwOTFFMDAwRTVBMzNFOUQ1Njk4NEY5OUE4MUFCRTBBM0VCMjk0Q0M2QworOjEwOTFGMDAwNTVCRjdDRkUyQTVEQ0RGMTEzOTNGMUI4RDkxQTlGNDM3OAorOjEwOTIwMDAwQUYwRkJBRTdEQ0UwQjcxQUQ3Nzk4MkVDNDNFODdBOTA3RgorOjEwOTIxMDAwQjIwQTZGRjI4MDRBNkIxNEU0RjNBMDRBRkU2MkM0N0I4OAorOjEwOTIyMDAwNzQ1ODE2RTc3NzMwQUJEQkFDNUY0Njk5QkJFRTBCQUNGRQorOjEwOTIzMDAwNDNCQkQ5NzRDRTI5NUYzNUNGMzRFNkYzQkQxMzg3NTVEMAorOjEwOTI0MDAwRjAxN0UyNzkyQUJERUUxMTM4NjZDNDdFMEY3M0UwQzhDQworOjEwOTI1MDAwQkI5NTc0OTVEQkE5NzBBNUMzNjc5QTdBOTZGNzc5QTQzNAorOjEwOTI2MDAwREYyN0RFMzlCMkRGMTI3OEZDMzRFQ0Q0MzMwMDNDODNFNAorOjEwOTI3MDAwRjBCM0VBQTA0NDYzRDhENzU4RTRFNDlCRjNCRjBBQUY0NQorOjEwOTI4MDAwQkU1MDIzQ0Y3N0VFMzFCNDY5MENGRDAxQkZCMzhFNjhCOQorOjEwOTI5MDAwQjVDNjc4NDk5OUE4N0MyQkYwRjU3MTlEOEM5Mjg4M0JENgorOjEwOTJBMDAwRjhDMkQ0QjVCREUyRERFNkQzMEUyMTI0QTNGRkEzMzE3RAorOjEwOTJCMDAwMDlFRjY5QzkzNDY5MEZDN0UzMkZDOUYwRkIxQUVDMTgyRAorOjEwOTJDMDAwMkY3QzU3RkYzQUZDRkM1QjdDREUyNTVEMTM3ODUxODJENgorOjEwOTJEMDAwNzQ3RTY3Q0NBNzVGNjk3QzZGQzgzQ0FGQ0M4MUVGMUYwMQorOjEwOTJFMDAwQzBFRjQ5NTdFRjJFMTczQkJBNzFEOERFQThDQkE4QzdGRAorOjEwOTJGMDAwOTY4OERGRTA3QTM0RkEyQjk2MTNGQzZFMjg0RDA4QkY2RgorOjEwOTMwMDAwOTdBNTIzRDVDMjg5NkFBRjYwQkYzOTlFMDdDODZDNjEzMworOjEwOTMxMDAwOUMyNUI3NUU3QkZDOEVCRkU5MjJDN0YyOTk2NDNFMDdBRAorOjEwOTMyMDAwMjBFNzdFQzQ3NTAwRTdDMjhGQjZENUU2RDREQkZBQkM3MQorOjEwOTMzMDAwQzg0RTYxQkY2OTM5MkVDOEY4OEE2MkY4MDVERjYzODlCMworOjEwOTM0MDAwQjE2NjU4QjVDREQ0Nzc5NkYwOTMxRDc5MDRGMjc5QTQxRgorOjEwOTM1MDAwNzgxRkRDQzdGNDAzM0MxMDQxODY1RDlBOTM0RkFBNDQwMgorOjEwOTM2MDAwNUVDQ0JGOTc1MjU0NkNFMDcxNDRCQjRBMUQ5RUVERkEyRgorOjEwOTM3MDAwNkI5MTREOTVCM0UzM0JFOTRCOUNFNEZDQTY2NTYzNkNCNAorOjEwOTM4MDAwNTREQ0EzM0I5QjU5RUYxOEE3RUZFNDcwOTJGMzM4NkRDMAorOjEwOTM5MDAwQjE2M0E5QUMyRTcwMTk2MTlEQkVDRjY3REY5M0MxQkFDRQorOjEwOTNBMDAwQTc3Qzc2MzVDNzlGQzMwMzA1MTIyNEQ1NUM5QzczRjg1MAorOjEwOTNCMDAwNjg1QzNGRTZCMTg5RkFFNUVBMUZDQkUzNzRBMEQ4QzE0NworOjEwOTNDMDAwMDczRkRGMUMxQzc0RDQ3MUU5RUNGQ0ZGMDc1M0I3QTdGRgorOjEwOTNEMDAwRUJCMDBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAorOjEwOTNFMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJGQkM2QzdDMEYwQTNFNQorOjEwOTNGMDAwMUU4MUMzRDFGOEU4NzgwMjJGN0U3OTUyQjEwQzAzODIyNgorOjEwOTQwMDAwNURDMUM1QzAxMENCQzFDMDEwMDdDNDI3ODBGODI0MTBBRgorOjEwOTQxMDAwNkI3MDMyMzAyNDAyNzExMjEwMkYwMEYyMTcwMjcxMjU4NgorOjEwOTQyMDAwMTAxNzAwRDUzNjMzMzMzMDFDNjY2MzYwMzgwNUM0MTcxNworOjEwOTQzMDAwODFGODA2MUJFOUY2NkI0ODMwMzBFQzkyNDFGMDM5NjQ1NAorOjEwOTQ0MDAwMTkxOEQ4RTRBOUVCQzc1MTNDNzhGMTVBMDM1NEZFNUJENAorOjEwOTQ1MDAwNEQ1NEZFNTc2RDA2MDYzRDQzMDRGRjlEMjY2OUU2MjdFMQorOjEwOTQ2MDAwMDFGNTI2MDMzMTAwRkJCMjg4QkE2ODAzMDAwMDAwMDA1MgorOjEwOTQ3MDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAzQQorOjEwOTQ4MDAwMDAwQkVEN0QwQjc4NTRENUI5RThEQThGRDlGMzlFRUM1QgorOjEwOTQ5MDAwNDk0MjE4NDI0ODc2NUUxMDMwRTAxMDQyMDQ4QTlFNDlFNAorOjEwOTRBMDAwMEE4ODk2RDI4ODlFMTY1QkFCNDM0MDgyM0MwMzVBNEM5NgorOjEwOTRCMDAwOEY3OEIyMjEyMTA0MDgzMDUwQUM5MTIyNEUxMDMwNUFERQorOjEwOTRDMDAwNjhBM0EyRDIxNkRCODA5NEEyRjVGNDQ2NkJBQkI1M0UzRQorOjEwOTREMDAwMDI1MjFFM0U2OEVBQTM4RUY3RDRDMzU5RkZCRkQ2Q0UxMAorOjEwOTRFMDAwRUMzRDk5MDlEODlFN0JFRUZEQkU3QkQyQUYyRUQ2NUVCOQorOjEwOTRGMDAwRUY3RkZERUZGNUFGMzU4QUU4MjRGMjNGMTE3MjExRkVFMAorOjEwOTUwMDAwNjgzQTRDMjQ4NDBDOEFBNzg0Qzg1QThGMDM1MkEyNUZGRAorOjEwOTUxMDAwMkNCNEU0Qzk0NUU5NzJGMjdGMUI2MUNERUJCQ0RGN0Y1RgorOjEwOTUyMDAwMjEyNDhCOTBFRkYwMzJGQTE3ODJGQzE0OUUzMUU2NjMwRgorOjEwOTUzMDAwQTQyNEE4OTBBRTkyNzgzRjUzMDhDQjZCQTI0MDJFMEE4OQorOjEwOTU0MDAwRjBENTVBNkU4QzUzRUZGMDhEMjE2OTg0N0NFQTY0QTlDMgorOjEwOTU1MDAwNUU0NThCQ0E2OUZBOTYzM0RBOTg0Rjg4NDMwODE3QjI4QQorOjEwOTU2MDAwRjlENDVENTkzRDFBRDNBQjIwNkQxNEM4RUM0RTRGOTIxRgorOjEwOTU3MDAwNzk5MDM1ODQ4Q0E3QzlGRTIxMjJBOTg4Q0YzRkIxOUU1RQorOjEwOTU4MDAwOTEzNjM1MTBEMjY1OEZFNzY1OTk4NDkyRjU1QjQxRTc5NgorOjEwOTU5MDAwMEZGRDlFMTNDMjE1MzgxRjBGOTEwMTFFMEE4Nzg3OEQ3QworOjEwOTVBMDAwMDQwOUExRUIzQUUyOUYxNjk4NDNFN0RGM0E1OTA5REEzQQorOjEwOTVCMDAwQTE2MEZCMTA2ODRDN0MwNjFDNjdFNzYxREVDMUYzOTU3NworOjEwOTVDMDAwNDRFM0YwRUU2QTI5QTRFRDlDNDE5MTZDQTBCOUE2RkM5RAorOjEwOTVEMDAwMkEwNzI5MjU2NEYzQzRCRjA2QzI3NDNFNEUzOTQyNTQ5QgorOjEwOTVFMDAwNDgzREM5RTczNzkzODhCQzlGN0JDOUU1QUMzQjcxM0ZEOQorOjEwOTVGMDAwNjREOEEzRjE5ODE1NjE1REM2N0NCN0Q4RThCQzMyRTlBMAorOjEwOTYwMDAwN0U4QzE3Qzk1RTlBREY1NDNFMkIwREU2NjNBQ0NCOTE3RQorOjEwOTYxMDAwNjI5QzY2ODBFQjA4NDIzNjM2MzgzMDZEOUEzMDJCOEQ2RQorOjEwOTYyMDAwNDAzQkQyM0IxQkY2NzdGM0M0MkM3MTgzMTBBRjdGNjRCMQorOjEwOTYzMDAwRTI3MTQ3MEY1RDZGMjM2RkQ3QUExRDc1NDA3RDYzOUY1MQorOjEwOTY0MDAwMTNFMUI2OTlDMzI3NDQwNDlDRjdDNkQxQUVEOUQxRDI1MQorOjEwOTY1MDAwRkVGMzA4MTExRjk2NkY3NkQyNDZCMDBFMkY4OUVFQ0QxRAorOjEwOTY2MDAwODcxRTdBREFFNkQyQkM2RjgyNUFCNjQxRUI4RjJGNTM0RgorOjEwOTY3MDAwNDZDQkMxMkUzQTRGOEZDNzEzQjREMzcyNEY4MEI1NzcwNAorOjEwOTY4MDAwQkMyMTQ0MzU2QzFGRjIwQ0ExRjU1REM2RkU0RjEwRTMwMgorOjEwOTY5MDAwRjBBNEZGRjc5MTZBNDIyODNERkE3MjdBNUY4MzcxRUM3OQorOjEwOTZBMDAwNkZEODgzMjFGQURERkREOTQ3QUZDREE1RkQ5MjkzNDI1NgorOjEwOTZCMDAwNzAyRjhDNEI5NjVCRjY4QkVDNjE3MEI1QTlGNERGQjQyMAorOjEwOTZDMDAwREMzNTc5RkUwQzU4ODJGQkYzMjdBQjAxNkVFQjhCNTYzMQorOjEwOTZEMDAwQjg1NkMzNUU5NUIwRkQ1M0U5RkYyRTE2RDBGRTM1QzVEMgorOjEwOTZFMDAwMzJCRUNEQkNCRkY5ODA5QUQ2QkNCQjc4RDZENzBBQjVGRQorOjEwOTZGMDAwRDRGOEUxRUVGMTkxQUUwQzVBNTlCQTA1RjczQjU1QkRERAorOjEwOTcwMDAwRkEzN0M2NUU3M0NDMzQ2RTFCRjE2NjlFNzFEMzdGNUNGNAorOjEwOTcxMDAwNDVBRTQyM0FCRjQ0RkI0RjFCODJENzFDQjNFMUJBNDU2QQorOjEwOTcyMDAwMzNCRjQ5NTU3RjJEQzc4RjNFM0NDQkE3Rjg1MThBRkJFRAorOjEwOTczMDAwMTlCODYxNzRGQ0ZCNEI4MDE3NDAwRjdBMjVGMjMxQTRGNQorOjEwOTc0MDAwNDVCQURFRTZBQjQ5QUY0NEY3QTNBOTU4RDFENjUwMzhBNQorOjEwOTc1MDAwRDg1NUE1NEJGMEIxMzE3QjAxQkZFMDFGQjRBOUJEQTgxRQorOjEwOTc2MDAwQjk1QjE4MDM5OUVGNThGODYwQ0JFMDdGMEQ3NjBEMzBBOAorOjEwOTc3MDAwQkZDNDdERjhBMkYwRUIwMkY4NUQxMTg3OUY5RDU0QTc0RQorOjEwOTc4MDAwNzVDMTdFNTcwNzEwM0U1RTNFOEY3NTU3QUZENEJBRTg1RAorOjEwOTc5MDAwN0FENjY1N0YzRjc0OTI5OEUwNzgxNUEzQjNCRUY5RTQ1QQorOjEwOTdBMDAwNDQ4OTc5N0M4M0JFQUUxNDQyMkYwMjdDMjQyNUY4NUE2QQorOjEwOTdCMDAwOThDMjgzNEM1MjgyN0I5M0FDNEIxNjE4NUY4OUMzRDlGNQorOjEwOTdDMDAwMjExMzAzNEU4MEJGODdGNUMwMEQ1RTlDNTJCNUMzMDRDNAorOjEwOTdEMDAwNjc3QkUwRjg2NzAwM0YzOTkzNzRCOUM3RTBGNzI2MzkzMworOjEwOTdFMDAwOURGMkFGNENBMkJCRDNCMDE3MTlGMjlGOTE3Q0E0NEY0RQorOjEwOTdGMDAwNUEzRTQ1MjkwM0JFMzAyRDE4QTZFMzM0REJGODc4RUEzQgorOjEwOTgwMDAwNkFDQkJFN0VDNkY3MzU1RUFFMDdGRUQ5NTI2RUMzRkU4QQorOjEwOTgxMDAwOUFCRDlDNkZBODhEMzhCRjdFRURGREFDN0RFMjdBRkZDRQorOjEwOTgyMDAwMDI3Qzc0M0NENDUzMzlGRTM0MDY0MERFMzg4NjM0NEYxMworOjEwOTgzMDAwM0YwMjcwMUY1MUQ3MzkxN0Q2QTgxMjg0ODNDMUZGQTlFMAorOjEwOTg0MDAwMDAyNDUwOEZDQTg3Q0ZBMDlENDNBQjQ2QjhEQjczNDIzQworOjEwOTg1MDAwMjQ4QzcwQjNDQUQzOTQ3QzM5NDE4RUY2QzMyNzk1RTYyNQorOjEwOTg2MDAwOEQzRTBBRTBCRjM5MkFEMjFCNDk5NERGM0MwRDBEQkI2NworOjEwOTg3MDAwMkMzOUQ4OTg0MDU3QjRBQkE0NzI2NkI0QzBGODJERDEzNworOjEwOTg4MDAwMzM3MUZEQjI4MTA3NUMzRkIwMTlFMEQ4Q0VFODU5RTVFRAorOjEwOTg5MDAwRTMyQTMwMUZDQTBGOUQyNDhBOURCQjI5QTY0M0RFNEJCNQorOjEwOThBMDAwRUEzMEZGNDlBOEFDNEIwMEJDOTFDOTdBRTA3M0Y2OTA0RQorOjEwOThCMDAwNDhGNEZDRkVFMzZGRTZGMjI0RDUzQTM2NEY0QzJFMDcwRgorOjEwOThDMDAwODYwOTRDMEU0ODlFM0FCRTFGQjdBODQwNjc4MjFFMjZFNgorOjEwOThEMDAwMTc4MURFNDg4NENCQkYyMEVFRjdCQTg2N0FGMjBFNURBMAorOjEwOThFMDAwOENFQkU4NzU0NEEzRjgyM0U3RDQ4NTQyQjQ5RDA0QjQxNworOjEwOThGMDAwNDg1OTM0RjE5NEIzNTQwRTZBNjZGQ0VBREI0N0IyMUE1NQorOjEwOTkwMDAwRkJCMzUxQjBDMDNBNkQxRUM3MUMzMjA2NTJGNTA2NEM2RgorOjEwOTkxMDAwNEI0NkREMEVGNDYxNEI5QjU2MEZBQTFDQzU5QjRBMDFCQQorOjEwOTkyMDAwQzY3NzI0QzcyQkUyQTE0NDNBMTFGMzVBNzVEMkYxRjg1NQorOjEwOTkzMDAwN0VGMzdBMjlGMUFCMEYzRjhDRjU2QTRBQjVCNzNGREU2QgorOjEwOTk0MDAwQjhDQTU1MDE0ODgxNjZCQjYxM0U4M0Y5NkMwNjg3OUJBNgorOjEwOTk1MDAwOTc4QjYzNjBERjIyRDM4N0QzRkQxOURDMzMwN0U1OTM1MAorOjEwOTk2MDAwRjc4REVCQ0VDM0JBRDY5Njk2OUQwMDE1MkUyREE4REVBOAorOjEwOTk3MDAwMzA4REVFQTdBQjg0MDgwMEVGRjVEMEQ5MjRFOEUxODQ2MAorOjEwOTk4MDAwNUUwOTcyMURGRTk5NERDOEI3ODU2NzQzQkE4N0ExOEZERQorOjEwOTk5MDAwNTVERjE0MzVEOUUwMjdFMjgwRkE4QjcwRDFERUJGN0QyOAorOjEwOTlBMDAwNEFGRTRDNENGNDgzNzI3Q0M1RTVFOTRCQjdCMEYxNzRDOAorOjEwOTlCMDAwRkEzRkEwM0I3RjgyM0M0RDBCOTlGQTI1MDAxRkVCMzgwNAorOjEwOTlDMDAwRUIwMDZGMTBCRUNCRkY1QkM2NTNDOTM2ODcwNjdBNDdFNAorOjEwOTlEMDAwOTFBODQ2RTlEODY5NDRGNTUzNUU0QzVDNTM2NDAyRjJBMQorOjEwOTlFMDAwNDRDREU5RDU2MTdCMkZCNTJGNkIwOTk5OEU3Qzk0RDIzQworOjEwOTlGMDAwQUQxOUNGNzc3MjNFMTBBODY5Q0E2RkE2RkQ3RTUyRUVGMAorOjEwOUEwMDAwMDkwMjFGMTg0Q0Q5NjY0NjdBRkZGNTZDNENEMEIzMzc2MworOjEwOUExMDAwOTZFRTQ2RkVEODQ4RjFBODAwRjRGRDUyMTFGNUExRjVFNgorOjEwOUEyMDAwNDU0RkE4NjY3OUY1NzM4M0RGRjRDMzBGQTJDOTE1Qzg0MworOjEwOUEzMDAwM0EwOEExRjA5MThBQzQ5MDczQ0MzRjhFMUY4OTdBRDJFNAorOjEwOUE0MDAwRTVFMjg3RkIxNkVCN0U3Q0QxRkRGQTc1OUZGRTdENzkwMgorOjEwOUE1MDAwRjhGMThGOEU2N0VDNkIyQUJFNDVGNzE1RjVFRjE2NkRBMgorOjEwOUE2MDAwRDY4MEZBNEJGRjdEREQ4NkZCRUEyQTIyQTE2NDdDQjgxMgorOjEwOUE3MDAwNUIxMEFDRjJDOTlDOUFFNTA3QjlEM0IyNUZCNkMyQUYyRQorOjEwOUE4MDAwMDc3NjBGMDAwRjVCNDk4MjlDRTRGRDNBRUIyNUVEMzQyRAorOjEwOUE5MDAwRThCMUIyOEFGMkM4QjAxRkQ2NkJEQjc0RDBFNzNGQzkxOQorOjEwOUFBMDAwMjE0Q0RGOEIyQ0VGMTI0MDBGMkEyMkE4MDc0MTA3MjJGRQorOjEwOUFCMDAwQ0QzQkI1NTA3NDgzQzBGMDFGRjZDNUQwNkY2QzU0MURGQworOjEwOUFDMDAwMzNDMzU3NTI1RDk2M0M5OUFEMEJFNkY5M0JFQjE1OUNDMQorOjEwOUFEMDAwODcwM0M2MDNCQUY0RDAwRTY5QkY1MjBFRTk3MkEyRkUyNAorOjEwOUFFMDAwQzlFNjBGNDMzMTNCRkU5RUNCQzIwMzAzNUYwMUFDMENDMgorOjEwOUFGMDAwNUZBREVEOUEwMzY1MjREOUZFRjUxQkVGMjZFQjdDNTM5MQorOjEwOUIwMDAwRjJBNUM0NzYxRTU5M0I2M0QyNDc1MkI3OTNDOTE5OTM0NQorOjEwOUIxMDAwNUUzM0I0Q0Y3RkExMUJGQURDMjE4MUVBODU4RDgxQUY1MgorOjEwOUIyMDAwRUIzODZGRjgwRjk1QUYyRDkwNTI3OTI2MERBOTIyNjE3MQorOjEwOUIzMDAwMERFNEE0QzZFODQ0NEI2N0YyQjc0M0IwRDhFMUM2RjdEQQorOjEwOUI0MDAwRDRGMzYwRTNDNTZFQTdCODA4N0M0REQ2MkNGQTcyNjJEOAorOjEwOUI1MDAwREFEODEwRjg5MjRDOTFEMjVERkZGMDI0NzkxQzU1NjI0RQorOjEwOUI2MDAwNTc4NzY2NTdEM0ZBRUIxQjNBMjZDMTc3QTNERTU0RDE0OQorOjEwOUI3MDAwQjBCRkE5RDgzNEU5QzczMkExRjUxQ0Y4OTU1QzFDMDcyMQorOjEwOUI4MDAwMUY1NUEyOTlFNEJCODM3NDYyMzlGRENBRjc4RkUwM0U4QQorOjEwOUI5MDAwQTA1RTQ1QkJBQzEzMzVFQzU3MjE4N0IwMUU3NDA0RjVBRAorOjEwOUJBMDAwMjgxNzlGMjQ5N0IwRUUyMEJGRDExNjBBRTFCQ0U0ODhBNQorOjEwOUJCMDAwNjMwNUE1QkI4RDRFOUVENzc4REVDRkYzMkFDRkU3RjNBMgorOjEwOUJDMDAwM0M5NTEzOTA3NzJCMzQ0RjUzQTcyREEyNjJERUM1RjMzQgorOjEwOUJEMDAwRjkzQzlGQ0VGMzdFOUUyRkUwNzk2MTFCRTYzNzJBQUNERAorOjEwOUJFMDAwQkYwRDcyOTRGNUVGRTI3OThERTdEMzc5NUVFNUY5MDI2NgorOjEwOUJGMDAwOUUyN0JCRDlGODc2OTY3N0Q5QTJBQzdGMzdDRkU3RjMwQgorOjEwOUMwMDAwN0MwNkNGRkI3OUJFOTBFNzg1REQ5ODRGQjU3RkFFQTI4RAorOjEwOUMxMDAwMEUwNkE3M0VCRUQwMTlDRkEzRjBFMDcwRURDQjc3MjU5RQorOjEwOUMyMDAwRTQxOUJFNjQwODBDMEY2MzVGMzVGMDI2ODhGQzkxNzg1OAorOjEwOUMzMDAwNzI5MURFODZGMDM2OERGM0NBRDg3N0VFNDczMTdEM0ZEQworOjEwOUM0MDAwQTE1MTM5Rjc0OTU4NDQzOTk5NkFCRURGRTdGQzc0M0JBMgorOjEwOUM1MDAwRThCOTM0REREQUEwNjJCQUE1MjE4MDdBRUZBNjA2OERENAorOjEwOUM2MDAwRkI1NTRBRjBGQkZBODYyMEU2RDczNTRDQzA3NDZENDNBRAorOjEwOUM3MDAwMDhCRjM3MzY0Q0M3RkM2MzBERDU5OEVGNjg5ODhERTk1RgorOjEwOUM4MDAwQkU4NjMwQTY3QjFBMTY2MEJBQkJBMTBFRDMyOEQ1Nzc0NAorOjEwOUM5MDAwMjFEREQ1QTA2M0JBQjNBMTA1RDMxRDBEMTE0Q0RCRTZDMAorOjEwOUNBMDAwOTUzRDVGMDRGMzVGNDBFNzNGMDA3RjE4M0NEQkVBMDcyOAorOjEwOUNCMDAwMTk1NDZERTU4QkU5NTNEMjJERTVFQUU0NkNBQkRGQTREMgorOjEwOUNDMDAwQkNDMDkyRjc5NDhFQjJFNDVENDU2NTk2RkUxQzM5OTM1NAorOjEwOUNEMDAwMkNFNTRBNjY5NTI1MkY3QkFFQjdFNEFGRTg5ODY1QzlCOQorOjEwOUNFMDAwOEY4QzdFRDNEMkRGODhCNjFBNEI3OTcxNjRBMUE1QkM2NAorOjEwOUNGMDAwQjA2NTg1MjU5RkFGRkY4QkE1N0U1RUZEMUE0Qjc5OUJENgorOjEwOUQwMDAwMzNGQ0FDNDhGOUQ1QjBCQTBEOTY3QTQzMTc2Q0IzQ0E5OAorOjEwOUQxMDAwQUIxOTk5OTdDNUI3QzhDNzdBOTZEOTlGOTFDOEVGQTVDRgorOjEwOUQyMDAwNUMxMjBBQTFEQzYyRjJBNTExRjAxNkZDNUVDMzQ4NzQ1NQorOjEwOUQzMDAwQUYwMEZFQUI2QjRGODBERDYxMkY2MjcyQTc5RjdEOTlGNAorOjEwOUQ0MDAwRDA5RkUyRDlGNzlBNEVDN0E5RjQ5RDA4RjQ5OEU4OEMwMQorOjEwOUQ1MDAwMDQ0Q0VEMjhERjNGMjUzMkJCNzlDM0JEQ0NBRTZFQkREMAorOjEwOUQ2MDAwMzdCOTdEOEQ5QzlEQUVBM0Y1RjNFNEZFREIxRTUxRTI3OQorOjEwOUQ3MDAwN0E5MDZFQjE1MzVBRUYxNUIwRkUzRkRBQkY1MTlFRDhCQworOjEwOUQ4MDAwNkY3QzNDOEE3MzE1NjYzRDI0NkFGODQ1ODk5RTE1QjczOQorOjEwOUQ5MDAwNzc2RDNERkVCOTYwRjcxODc2QUVFNDYwREYyQjRCODIzRAorOjEwOURBMDAwMjc5QjI4QkNEN0FBMDRGRDg2NkIzRDU1MDRGNDhBNEYzNworOjEwOURCMDAwNTQ0NjM3NjQ0RjJFREFFMzQ2RkRGRUYzMzNFOTE1QzgwNworOjEwOURDMDAwN0Y1QzU2M0ZBRDY3MTZGQTNERDc2NjBFQUM5NzI5MzFEQQorOjEwOUREMDAwMDlGRDc3NTI0QzIwNUQ1NEVFMjg3MkY1RjQ3QzRBQkZBMQorOjEwOURFMDAwQ0EyQjUyNzAzNTQxRjk5M0Q0QkUyNzY0MUJDMjQxNEEzNQorOjEwOURGMDAwRDA2RjlBRTYyNUYwQkQyOUMzNzBERDM2QkU4RUM2Q0M4NQorOjEwOUUwMDAwMkFGQ0RFQTQwRTNDMkYzQkNDMEJFNkMzRTc2NThCQjlFNgorOjEwOUUxMDAwMzE5NTYyNEU5Q0VGQzQ1ODA2RTYyN0M0RkM5ODVFMTU0NworOjEwOUUyMDAwMUI4QTY5NDU2QzA4QTZFMzYzODU5ODk2QzdGMjMxMURDNQorOjEwOUUzMDAwMTdCQjAyREI5NUM1NDY2MjNBMzYzNjBFQkYwNzYzNjMzMQorOjEwOUU0MDAwMzFCRDMyRjYyNUZDM0UyNjM2MTFEM0QxQjEyRkUzRjdEMgorOjEwOUU1MDAwRDI1ODI1QTY1N0M0QkU4MkRGNDdDNUFFQzM3NDY0RUM5MgorOjEwOUU2MDAwNDZGQzVFMTJCQjAxRDMxMUIxNkY2MTNBM0M3NjMzQTY1QQorOjEwOUU3MDAwQzVCMUI5OTgxNkM1RTY2MDVBMTg1Qjg0RUQwQTYyNzdEOQorOjEwOUU4MDAwNjA5QTFGQkIxM0JGNkJCMUU1OThFNkM1RUVDMTM0MzdDRQorOjEwOUU5MDAwRjY1RDRDODdDNTFBMzFDRDg5QURDNjc0Njg2QzIzQjZBMgorOjEwOUVBMDAwQ0I4RUFEQzc3NDQ4RUM3QkY4M0QxMERCOEE2OTU2RUM2RAorOjEwOUVCMDAwMDE0Q0ZEQjE4N0IxNUM4REI1NjM5QTE2RkIyMTdFRjcyRAorOjEwOUVDMDAwQzUxRUM1RDQxQjdCMTJCRjdCNjI4RjYzRUE4RUZEMEM1RgorOjEwOUVEMDAwQkZCQjYyM0ZDMUQ0MTk3QjBFQkYzQjYyNDczMEJERDRDQworOjEwOUVFMDAwM0UyOTM5NTYzRTJFNjVCQTJDRjkwOUE3RDMyREY4NTFEMworOjEwOUVGMDAwRjE4Njk1OEY5N0JGNTI2MDI5MkY3QkQxQ0FDNzgzQzc0MAorOjEwOUYwMDAwQ0EyQ0Y5MzE4NzI3NTlFQTk3MUVBQ0IyRTQ0N0VEQjc1RQorOjEwOUYxMDAwRjJGMTkyM0Q1NjNFM0U3Q0E3OTU4RjE3NkRCN0YyRjE1OAorOjEwOUYyMDAwODI1NjJCMUZENzlBQUM3QzNDNzc5NTk1OEZFN0RDNjVFMgorOjEwOUYzMDAwRTVFM0Q5OEJBREZDM0IzMENGQ0FCRkIzQzgwRUFCRkQ1OAorOjEwOUY0MDAwM0Q2NUI3NTVBRTREN0VDQ0QyOUZBN0ZDMDlBQkJEQzBEOQorOjEwOUY1MDAwRjk4Q0FCRjRBNzk2NzY4RUEyQTM0OUVEOUE0NDdGMzk4QgorOjEwOUY2MDAwODA0NEE2RjQ3RDM3NzEwNUNERTcyQTQ2OUFDRUY5NDFBMworOjEwOUY3MDAwMDZEMDFENEQzMzM5REQwRDAyQkFBMzY5RkE1NzE2RTMzOQorOjEwOUY4MDAwMzlEM0E3NUY2REY5NTUxM0VEMkM3RDI4NjE3RTAxN0RENgorOjEwOUY5MDAwNUIxNUY4QkQ5QTg3RjAzQ0ZEMjJEMDdBQ0RDMzA4RkE1NAorOjEwOUZBMDAwMDk4OEZFNkUyNTk2RTdCM0ZDMEZBNDMzOTUzQUYzREZEQworOjEwOUZCMDAwQjI3MjcyODE5NTNCNTlGRUIxQzY3RjVCMERFNUU5NjlDRQorOjEwOUZDMDAwQTFFQzIwRUQ2NzhGMkQzOTFGN0Y0MjYyRTc2RDE3QzQyQQorOjEwOUZEMDAwNTBCQjQ0RDdGQkU3Q0E5RTk1RTA0N0IzM0JDMjdCMjUwNQorOjEwOUZFMDAwRkE3REIxMjM5QzA3QUVFOTBGNkNFMTQ3NjRFMDhCMjQ1NgorOjEwOUZGMDAwQjQwRkJFQTc5MUQwMjMxMkYyNkJBQjVGQjQxNTE0NkVGMQorOjEwQTAwMDAwREFDRkM3NjJGNTdFMjhDRjk4RDk4MTc2OTFCMUVFNjYxNgorOjEwQTAxMDAwRUZDMEYzODk0QTRDMkUzNUZCMDlEQThERkFBMzBBQ0E0MAorOjEwQTAyMDAwNTNGQzMzRTQwNTk1ODNGN0JCN0QyMTI4REZGNUE4QjIwNworOjEwQTAzMDAwREJDRUNCMkQ3MkEzM0UwQkU1ODZBREEzNzkzOUI4MjREOAorOjEwQTA0MDAwRURCMDlGNTIzMkJGNjgwRkU2RDM0MEUzMkYwNEZCQkU1MgorOjEwQTA1MDAwMzc1N0E2RTk1MjdCNTczM0M4RjVCRkZBQkJERjEyMjQ0NgorOjEwQTA2MDAwODRDN0FGMDAzRTJCQUYwRjYzRkQzNUVFOTkxMzYwM0QwMworOjEwQTA3MDAwMTQxRTI3RTAzQjg1QzdGM0QyQTBENEYwMjA3MEIyNDA3NQorOjEwQTA4MDAwRTcxRjMwQjA2OEJGNjBGMTNGOUUxM0MyQkY5NTRDN0VBMgorOjEwQTA5MDAwQ0M0MDM4ODg3MDNCMjBBOTA4MEYwMzdFRjRFRkFFNzRFMworOjEwQTBBMDAwQzMxRkMzREFGRDExQzc0REU4NEZFNkU3NjJCRjk1Rjg1RAorOjEwQTBCMDAwRjg1QzFFMUE3ODlDMjE5MjcwMzJGODFCRTczRUE0MjNBQworOjEwQTBDMDAwRjcwQkY5QjM5RDhBOTg3NDFDOUI1QzhERTdBOUZERjg4QQorOjEwQTBEMDAwNUU2NjgyNUQ5RjE5ODZCMzVFMkEzRkE5QkM0QzMyQUY5MworOjEwQTBFMDAwNjkwQUY3NEZDOTc5OTc3NTdFMTVFNUZBM0REOTlGRkI0NworOjEwQTBGMDAwODVDRUJCQzBEMDgzRkE0MzhEN0QzQTk2OEJGOTUxQkM5NworOjEwQTEwMDAwRkQ1MEQwRUIyODNFM0RGN0E2RkRFODEyQ0EwNzc2NTE3OAorOjEwQTExMDAwOUU2MTRGRTIwRkQ4RDUyMUUyRjlGQTUwM0Y0NTM4NUFGNworOjEwQTEyMDAwNUVDRkY1MDA2QTEzQTEzRTY4OEMyQjJGQjZGQThGMjIwMgorOjEwQTEzMDAwMzYwRUM3QzM1NjM4MEVBNTg4RkQ1MzZBNzIxMzRGMUVEQworOjEwQTE0MDAwOUIxRjNGQjczNEZBNjlFRjlCQkY3NTFFQkJGNTIwMzFFQgorOjEwQTE1MDAwREJEREY5QUJBMzIyRTgzNTcyMDc5REM3OThGRUUzMTM1OAorOjEwQTE2MDAwN0VCRTYwRDA5MUVDRTE3RTEzMzUwRkZCMzVDNjREMUNGMQorOjEwQTE3MDAwODc0ODMzRjAzQzI5MTU3Q0ZCOERGMzA1Q0ZFQjJBRTRBRgorOjEwQTE4MDAwRTRFNzlENzQ3RjEwNEU0NTI5RjQzQ0UzQkNDRUM4M0YwNAorOjEwQTE5MDAwRjc2NjJEOUU3RjM3NDc2QTUwQkY2QjBFRjA3M0Y2QkY5MAorOjEwQTFBMDAwRDE1RUExMUY5MjFDNEZGNjcyN0M3QTg4OUY4QkVDRERFQQorOjEwQTFCMDAwNUVFNUMwNzY5OTc5OTY3RDJBQkVFRjI2NTc5OEU5NjdDNQorOjEwQTFDMDAwRTk5MEVFNkI2M0Y1ODYzRjMwOEY3RkFGQzFFRjBGQUQ0NworOjEwQTFEMDAwNjJERkYzRUVGREQ4QzlCRTdGRTg4NzM0QUFCM0VGREFCOQorOjEwQTFFMDAwNkE5OUQ3MTdCMTNFQTlBNzdGQTY3M0EwRTE2QUI1MDhGRgorOjEwQTFGMDAwRkFFRUYwRUQyNDA0REZGMkQ0NUUwMUZDQzg5QTRBNDQ4MgorOjEwQTIwMDAwREQwNEQ3RUNFRDQ3MkJBRkEzRTVEOTkxRUE1OUQ3QzFDRgorOjEwQTIxMDAwNzk3ODk4MDQ4QjM1RjhGRUYyRUE5MUI4OEZDNDAxRkI4NworOjEwQTIyMDAwQkQ4M0FGM0IyNzEyREUzMDEyRUFDREE2RjU0OEJDQkM5OQorOjEwQTIzMDAwOEQ4RjNCMkMxMkRFNzYxREY4RUY0QTU4M0Y0NkY5RjcxQQorOjEwQTI0MDAwNzk3Qjk3NTExRUIyQjY4RkYwRjJEQzU1QTdCQTQ2RDA5MworOjEwQTI1MDAwNzZCOTkxREU5N0FFODU3QTFERDY3QTlCNzlCRDUxNTAzRAorOjEwQTI2MDAwMEVGMzA4NUFDNzY5RTVGMzkwRjRERDA0RDA0MzhBOTBGMQorOjEwQTI3MDAwRjRFOUQwOEY2QUVENjc4MzgxQkY1MDVFOEVGRkM2RjIyRQorOjEwQTI4MDAwODcwREJFOTBDMDQ3OEM3NjJEMjlGNkRGRTAyNzNCQzFCNQorOjEwQTI5MDAwNEYzMDAyRkQ1NTk4RTZCNDI2RjdCRjk2NzE3RTY1RTAxMworOjEwQTJBMDAwNTcyQTNDMjcwQjQ0OEI3RDQ3QzIyRTZCN0VCNjQ5RkY1NQorOjEwQTJCMDAwODM3QzI4REI1QTNFQTFDMDVBMUUxQzY1Q0Q5Nzk0NTk1OQorOjEwQTJDMDAwRjNEQTI0NEJGRUQzM0UzRjRCRDQwOUY0NjBGODU5MEMyQgorOjEwQTJEMDAwREZDQzBFOTVEMTQ5REM4RkQ3RUQzNERCMjUzOUJDREVFMAorOjEwQTJFMDAwODM3NUNDMUZEM0U4RTFGNEM0RkQzMjJFNEU5N0NEMjUwMworOjEwQTJGMDAwQ0M2RTMxRDZGRDI0RTc1NzExRUVGN0Q4RDVEMEM2RkM4OQorOjEwQTMwMDAwMzA2MzQzOEU3Q0JBOUYyREJGOTM4MjAzRjlBMTFGRTc3MAorOjEwQTMxMDAwRkJGMTYzNEU4RjA3QjhGRkU2ODc3QzVGMUVFNUZFOUI2RgorOjEwQTMyMDAwNDdDMDdGMDNGNDBBRkUxQjNCRUMzRkYzREZCNDczRkYyRgorOjEwQTMzMDAwQ0Q0M0UwQkZDMTdEQURFNjdFOThEOTU4REUwNkZFOUJEOQorOjEwQTM0MDAwMTFFMDI3NUE4MEU5MTZFRUJGRDlDNEZEMzcxQkMxN0Y0MworOjEwQTM1MDAwMzMwMkZDNDIyRDk4MEVCMjMxQkI3Q0VCRDQ1MDM2Rjg2MAorOjEwQTM2MDAwQ0JGNjRDNEQ2RTE3MEZCMjMxQkNDODA3NDU4NkE2Qjk2NworOjEwQTM3MDAwMjRGNDY1MTdFMDJGNDU2QzM4OTcyOTNGMTY3QUNFNERBNworOjEwQTM4MDAwRjMyM0EyMENBRUU1MDc0M0NGNDE3OTcxMUJDQjE3RjI0MworOjEwQTM5MDAwNzE0MDlFODA3Q0ExRkY2MDcxMzYzOTU0MUIzMkUxRUYyMQorOjEwQTNBMDAwQjgxN0EzNjQwRUREQjdCNzY1N0UwRUEwNTFENTIzMkI3OQorOjEwQTNCMDAwRUUyRjg1NzJEOEE3Mzc4NTUwOEYzQzFFRkEyNUNDOEY5QgorOjEwQTNDMDAwMUYwRTBCNDAxRTgzRUZFQUQ1MTU1QTRGNUREQzFEODIzMAorOjEwQTNEMDAwMzZCRTk2Q0UyRUIwQjMzNUJEMEJEQjZEQUQwQ0EyOUY1NQorOjEwQTNFMDAwQ0REODI3M0FCQTA1MUZFOERDOTAyRjBFRTNGQjRGMjZBNQorOjEwQTNGMDAwNUJGMTIxMzdCNjBCRjVFMUU2QkE1OTY5ODg3NzFBMTk4RQorOjEwQTQwMDAwRDA1RTJGRDk2OUQ1MTc4NjZGQjdEQTQ5Q0Q3N0NEMUFDNworOjEwQTQxMDAwRDBCRjlDRTgyRjUzMjc1QkZENjVDRDI1MDNCN0Y3OTU4QgorOjEwQTQyMDAwNUJDN0Y3OTQyNkI0RjcwQ0RDREUxOTlCMzlBMDNENzhBNgorOjEwQTQzMDAwODU1ODkzNjExQjE0Q0YxN0M2QUVDMUZBODlGQTlGMENEOQorOjEwQTQ0MDAwRjE2RjU0QUY5M0E3MjgyMTM4MDc5NkE3QTgxODdBMjU0QgorOjEwQTQ1MDAwNEZEMTc4MUFFNERGNDMzQzVGQ0RGMjJBOEI5M0EwRkEwOAorOjEwQTQ2MDAwNjIzRThDNDNGNzI3RTFGQzNCNDRFMDdDN0FFQjQ4QzIzOAorOjEwQTQ3MDAwRUQ5MURBMzVBMTFDOUFGRjY3ODJGNkM0NDlGOUNFMkExQworOjEwQTQ4MDAwOURFNjc3Q0M3MDg4RDI5NTgwNkYyQ0RFNDFFMUZCOTVGQworOjEwQTQ5MDAwQTE0NEQ3MjNERDZFMTVDOTZFOUFERjEzMTk5OEVGRjUyNQorOjEwQTRBMDAwOEI4M0YwODREMDdGMzM3NEIxNUEyNjBENDBGN0RCMTdDRAorOjEwQTRCMDAwOEJEM0EzNDlGQUJEODZEMzE1Mzk0NjEyRjVFQTZCNkNFNgorOjEwQTRDMDAwRjRGQkRBQzVCMzU0RTBGRkYyNEQ0MUI0MUY4OEM2RTY5MQorOjEwQTREMDAwNkZGMEI5OENGNDgxRjc2RjU3QzI3QzczNTNGODc1NTZERgorOjEwQTRFMDAwREIzOEJEOTUzMEZFNjhFMDdGQzY0QTg2RTdBOUZBNUY5MworOjEwQTRGMDAwQzdGOTU5QUM1M0IwRjg3RjA2REQ1NDVENjlDQjQ0N0I5NgorOjEwQTUwMDAwMjhFODAxM0VGQUI5QzRGQzY4ODc1OUZDOUE0MTRGOEQ4RQorOjEwQTUxMDAwMjUyRjIzRkYzNkM2Q0ZDRUU5MDJCMzhEMzQxRjk5Qzg0RAorOjEwQTUyMDAwRTIyQTI4N0NEMTVFM0M0MkY5NzgyOUYyN0IwMkY1NUQ3MworOjEwQTUzMDAwMEI3QTJBOTkxRjNEOEFGMTBGQUVCQUEwMEU3OUM5QzNEMgorOjEwQTU0MDAwRjAwNUVDNTE1RTFGRTdCM0UxQUU1OTIxRDhBN0M2MUM1OAorOjEwQTU1MDAwMTJFNDIwQzY3NTFBNzhEMDE4MTAzMTM0RTI5MzEyQTY4RQorOjEwQTU2MDAwRjdDQTJBRTUxMzMwRkY5MTMyQ0U5RkVBNTkxNzJGMUEwNgorOjEwQTU3MDAwRjY4QjA0RTc4OUJBQ0VFQzM3MTY3NzY1QzRFMzBENkQyOAorOjEwQTU4MDAwMUI4M0Y4REZFQzVEODlFNzg1RkE1OEE2MDc0OEE0OUI5MgorOjEwQTU5MDAwODhGOTM4MUY1RDJDMDc3RkJGMUEwNDU5NkZDQkQ0MDU4QgorOjEwQTVBMDAwMzNCRTdENEQwOERGMEJGQjFFQzdBRjRFOEM0NzMxRTAzRAorOjEwQTVCMDAwOTcwOEZGNkY3MUJFOUE0NzkyREIxRjgzQjk3RDkzQTEwNQorOjEwQTVDMDAwNzQ1RTA3N0NCN0U1NTE4QUU3NDlFMjY2RkNCQ0RFMEZBMgorOjEwQTVEMDAwM0E2NkE1MDEyOTE5NzQ2Qjk0MUY5MDM0MUNDN0M4MEZFMworOjEwQTVFMDAwOEQyOTJDRkVBRkNCNkFBN0ZDRkZBRUVGMUZCNDU5RTM1OQorOjEwQTVGMDAwRjNGRTQ3REZGRjFGN0RGRkZGMTE3RDlGQ0JDN0E5NkJEOAorOjEwQTYwMDAwNjAyMzZDMUU5NjJGNkY5RUJBNDZDN0Y1NTlFRDc2NDlBQQorOjEwQTYxMDAwMEU1QUZDMUZCRDQwRkYyNjM5MkY3QkFDN0FDOUU1RjNFQgorOjEwQTYyMDAwMEQxOUY1MjcxMjFDNjZFMUJGMTlEOTAzQ0IxOUMzQ0Y0OQorOjEwQTYzMDAwRjFFOTMwNDM5RjBGMjE1RDkwQTIxMjYyRDZENzlBODAzNAorOjEwQTY0MDAwQ0Y1MzM4RUVBNDcwRTQ3MTg3Mzg0RTM2NUY5N0FCQTdDRQorOjEwQTY1MDAwNUExNzMxN0VDMkNBQjc3NzJFMzhFQTFDODFGQzVGQzYxMgorOjEwQTY2MDAwNzY5RTQwNjcwOEU0QUQ0M0VCNDZGRTZCRjA2OUNBOUZGNworOjEwQTY3MDAwQzcyQTgzODBDRjU3MjBGRjczOTU0NDMwN0U2RDJERDczNgorOjEwQTY4MDAwNDMxM0UxMEFGQzMwNTAwNkUzMjVGMDIxQTJBNTNCQTBDQworOjEwQTY5MDAwRkNCQjBDMDc2NEYwRTM4MTlGQjI3RTYwM0ZDQkU1QzY1NAorOjEwQTZBMDAwN0QxODcxMThCOUY0MEZGOEQwNDY5OUNEOEYxQ0IyQzYzOQorOjEwQTZCMDAwQjE1MzdDNzQ1OEUyNzVDRjNEOENGMkQ0RThDN0QwNzdBMworOjEwQTZDMDAwMTJEQjM1QTk1NTZBMzJCRUY4QTYxMEZFQkEzMjAwOUVEQQorOjEwQTZEMDAwMjRGQUI1NDgwMjFGQTcxQzU0MDA3RDZFRTg4Q0U5RThGNworOjEwQTZFMDAwQUZFQUYzNkZDOTU2QkUyRTA3OENCODk4RkY1RUZFNUVDOAorOjEwQTZGMDAwQTdGQzlERjFFQjVGRDBGRkI3OEI5RkVGMjdEMjcxNjI3NAorOjEwQTcwMDAwM0ZBMjRFQzQ5RTI0RTNFN0VCNjJDMkI5QjM1NUVGMTdGNAorOjEwQTcxMDAwNjQ4REREMTNBQUIzOUVEM0M4OUVFQ0U0RTcwOTNDQ0U1QQorOjEwQTcyMDAwQjM2NjQyMUZGRTdFRTM4RjE0N0ZFRjM4NjE2MzNDOEM3QgorOjEwQTczMDAwQ0IyNUMzQkY3QjA3QzQ3QkQyRkRBOTgxRjg0RjJBQkZCRAorOjEwQTc0MDAwRTc5MTZBMUYxNDdFNDA0NDhDMkJGQjgwQkNFQzFCNjc5NgorOjEwQTc1MDAwREFBNzdEMEFGM0U3OTMxNkRCMjlCODZGNjRDNDM1REUwOAorOjEwQTc2MDAwMUU2MTc5NjMzRUI1NkRENkZDN0MzMjJCMEJDRTM1RTY4RgorOjEwQTc3MDAwNkZCNzExODg2M0JDODNDOEE3N0E4Q0Y5NTMzREU3RkI5OAorOjEwQTc4MDAwMEE4QkQzQUUyNTc1Q0RDMENGRDY3MkZGN0Q4RDRBNjRCRQorOjEwQTc5MDAwODg0MzVDRjJDQzgzMTU2MDZGMUU1MDk4MUVGNTJFODVBMQorOjEwQTdBMDAwQkY2NjhBNTc1QkU4ODkyQTcwM0VGMUNFQzE3MTVGRkZCMAorOjEwQTdCMDAwMTI4MUY2RDFFNjZDODg0N0E0N0EyREQ4QkQ4OTcwOUZBNgorOjEwQTdDMDAwREI2MjlEREZBNUU2OUYzODVGRTM3RTUyQUE3OUM4MUQ1NAorOjEwQTdEMDAwNDIyODk5MURGMTMzQzUxQTM3NzdBOTdCNTM2RjgzOTFBRQorOjEwQTdFMDAwOENFNzIwRDY3QjUzOTc2QTc3NUFEMTQ4QjJGQjU2OTdBRAorOjEwQTdGMDAwNkE3N0ZFRUYxQ0VGNDI4QUYxOTYzODdBMTRFMDAzQ0JCOQorOjEwQTgwMDAwRTRGMDc0QTEyMDFFRjdBNUQ4QUE0MzQzMjkyOEU0NDMwNQorOjEwQTgxMDAwNjNCQkMwMTc2RUFBRDc3Mjk5RjU0RTgwMDE3MjE5RjUwNQorOjEwQTgyMDAwQTY4QjAzRjQ3NzgxRDNGMUFGRjYzRkFDMDA3RDdFRjBDOQorOjEwQTgzMDAwRDhDOTk5NzBFRUIzRTg2NzEyNzFDMEJBRjY3QjQ5MTdCMAorOjEwQTg0MDAwQjM0RjE0OTA2MzBCMEY0QUU4OEYyMzcyNTdDNThEQTY0MAorOjEwQTg1MDAwMzg1QThDQjhBNUVCNUZGNDYzMkZDNjY5MkM3Q0MyMUVGNgorOjEwQTg2MDAwOUQ0MURCMkY3Q0ZBOUQzMTg0QzJFMUMyOUFERUUzNDMzNQorOjEwQTg3MDAwQzFDRTc4NEM2MDcxODk3QUNGOTgxQkU5Rjc4NTMyQjlERgorOjEwQTg4MDAwQUQzQTA5MUZGNEQ4MTk5RUJGRkYxM0Y3NkNDMDIzQTE3RQorOjEwQTg5MDAwRTNDOEFERDg2RkU3Mzc2Qzc2RDNCOUEwNjRCN0UxQjgzOQorOjEwQThBMDAwQjQ1RTg4OUQ2NzA5RDE2MjgxQ0RDRjdDREZDMjg4MDcwNQorOjEwQThCMDAwN0RGRjUxODFDREVGOTAyREVBODRGOTc1QjQyQjYxNUE1QgorOjEwQThDMDAwNkY1OUM3NUYxMDZGQkZGQ0UzMDMzRTgwQzNCMjQzOTI3MgorOjEwQThEMDAwODVCRjJDRUI5MEJBRUM2MzMwM0Q2OUM3RkIzNDIxOEYwOAorOjEwQThFMDAwNDBGOUM4NTI2NDMxMzQzREI4MDRFM0M3OTc3NjZFRkMzMgorOjEwQThGMDAwOEJFNDgzRjY1NkZBQTE3MDA5NzYwMTVDNUY5NTgyMzM4QQorOjEwQTkwMDAwMjBGRkU0MjMzRUIwMUJERkVEREVFQjAzQjhEMjdFRTc5MQorOjEwQTkxMDAwMjgxNEFGQUVGOUQ4NDQ2Nzg0RjUxRjRCRUZERjFGRDU3RAorOjEwQTkyMDAwNzQxNEMwQUY2NTlERUJEOTc4MDlGNEY5MkVGQzYzNDgyNworOjEwQTkzMDAwN0ZCOTMwQ0U2RTk1MEI5RjkwMTcyQkQwNUVFRkM4NDgzNQorOjEwQTk0MDAwMUE2RkRGMjcxNzM4QkQyRTNBRjBDOTJFOUQ4RUZCRkVGOQorOjEwQTk1MDAwMTNFRkVERDJFOUZDMTdGRkM3NDdCQkVFMDFCREVDRTdGMworOjEwQTk2MDAwNEUxNUY4Q0NCMkM3N0VFNzIzMjZCOENGQjQzM0JGQzFBQgorOjEwQTk3MDAwODU0NzFGRDlCNzgzRDJDQjg1M0ZEOEQxQUVCREYwRUM4OAorOjEwQTk4MDAwRDk1QzhEQUVGQkMyRTM5RjY1NjlCNEZFNURDRjRFMUQwMQorOjEwQTk5MDAwMEM3MEI4RUJBOTJGMEYxRUM4NEYwMEY4MUFCNTlCRjcyMworOjEwQTlBMDAwMzU4QUZENkI4NzA0MTZEQzdGOThBNzA5RkJGM0RDQzFCMQorOjEwQTlCMDAwRTc3MjYxOUUxRkJDNjZDN0ZCOENDQkU4QjdGQTMyRDg0MgorOjEwQTlDMDAwQUYyNUM4RjcyMUJGOEFDMjc5RTlGRTc1N0Y5MUM2MjRGOQorOjEwQTlEMDAwODNCNzNFNTRDNEMzNDU0QTM2MDFEOEVGMUJCRjc2NzVEMgorOjEwQTlFMDAwMzlBNEI2QTAwNkZEOTE1RUU0REI4OUVEOTZCRDQyRjc4MQorOjEwQTlGMDAwRjVDQUQ0RkJGODA5Rjk5QjAyRjA1RkI2N0YzRDFCMzcxRgorOjEwQUEwMDAwNjExRjNGODA3RjRDRUNCRjhGOEJGQkVERTNFMjg3RDA3MworOjEwQUExMDAwRTYzODk4OTEzNEZFQ0FEOEM3MjU0RkZERjM4MDdBODA3NgorOjEwQUEyMDAwQzEwRjJFMDVERjA1M0M4RTcwQTIzREI0Q0EwRTc0RjUzMQorOjEwQUEzMDAwODQ1QjBGQjBGRDhEQ0VBMDY1MTcwRTdDOTI0QjI4N0VGNworOjEwQUE0MDAwOUNCM0Y1REUwQTdDQjJGNzU5QkJCQTlCN0U1RkY4RUM4QgorOjEwQUE1MDAwQUI0ODY3MTc5RTdBNDlEMTkwNEYxMjhGNDBGNTg0MEIwRgorOjEwQUE2MDAwQTRFRkFGMUJGNDg2QTVGQ0NDNzlEOTFFNkY5N0REMTczOAorOjEwQUE3MDAwREZBN0E1RDExQkE2NkIzRUZDN0UxMkJGNDcxOUZFMkY5OAorOjEwQUE4MDAwOEQxRUI5NDk0OEIyNkY0RkRCMEIxODNGOEYwRTQyQjg4RAorOjEwQUE5MDAwMkMyMUREOEE1QTZBREQ0RjYxMDJFQ0UzQzk2OTgwNzdCNworOjEwQUFBMDAwQTlGNkQxNThCRjBBRUJCRkNBQjQ5RjdCMThERDI2RDZFMgorOjEwQUFCMDAwNUY0QUU5MTNGQzg4N0RGQjFBMTU1RTI1NDlFOEY0NDJEQworOjEwQUFDMDAwQkI1RDg2NzhFMTBCQjY0QkRDMDNGRTgyRkE1RkE3M0RFNworOjEwQUFEMDAwODU3RENGRTE3MDI5M0FCRkQ0RkFCRTI4RkM3NjgxNzMxOAorOjEwQUFFMDAwN0I1MDdGMzhCRUZGQjdFNEZDRkY0NUNFMzc5NjkyRjAyRgorOjEwQUFGMDAwRjQ2Q0E5QkZGQzkyNDg0ODFGOUExRjlGNkY3M0E3ODRFQworOjEwQUIwMDAwN0NGREZEMEUyOTBBNEQxM0Y5QzREMjE0N0VBN0Q3RURBMgorOjEwQUIxMDAwNEMxRjU5N0FFOEM4MThFMDY3RUYxRkZEMDlDNzRCODYzQworOjEwQUIyMDAwRjc0QkY3OUY1NDc0MkUwRkEyNjY3OTkwQzIzRjc5OUEyMworOjEwQUIzMDAwQ0Y3QkQ5RTFFNEZEMkREQkZGOTdBNEZEQkQyQjg3QkVDNAorOjEwQUI0MDAwMDFGMzdGQjdEQjQ2NzREQUM1QkI5RDUyNTIzRkVDNkYxMQorOjEwQUI1MDAwRUMzNjRCNUM2MUIzQjdFMkI1MzREQTRFRjJCOTM0MTg3NworOjEwQUI2MDAwQkE3MTRERTg1NTFERjQ5Mjk3NkQ3OERFNDFFNEUwMzlGNQorOjEwQUI3MDAwM0JGODEzQkQyRTZEMDM4NTU3QTM2RjNFRkEyQjhERkU1OAorOjEwQUI4MDAwOUExMkUwMjQwN0FBNzVCMDRCRTVDQ0VBNzJBNjIzNDdENworOjEwQUI5MDAwMkQ3NkIxNEQxNTJERjNBNjcyMzYwN0U0RDA1QjYzQ0Y0OQorOjEwQUJBMDAwREE2MDlENkYyN0U4ODM2RkNCQTQ3OTMwRURFRjZENURBMAorOjEwQUJCMDAwMDhBRUQ2OTJFMUI3QjVGRkYwMkE4OTY4NjZGOTY3RUY2QgorOjEwQUJDMDAwN0QwQkU2NDM3RUUxMjQxMEE3MjJGRERDQTkwMzNGNTk1QgorOjEwQUJEMDAwQjZDQjE5ODVCODgwRTc5RUZBNzQxRkMwRURDMjQzNzZFNAorOjEwQUJFMDAwMUUyN0MwRTJDRTZCNTVENkM3RDlBNzNFRERGNUVGQjQyMAorOjEwQUJGMDAwRkMyQzM0QTZFM0Q3RUVBMkY1NDEwRkRGRUZDNkUwRkY1MQorOjEwQUMwMDAwM0YzRjkxMzY4NjUwRkU1Q0ZCOEI3QjY2MDI3RkE5MDUzOQorOjEwQUMxMDAwOUU0QUVCRDdGRTc4MzBFQTc1NjcwNkIxRkM5OTAzQzMwQworOjEwQUMyMDAwQTJCMDJGOEI5RjdDNzYyOUM4OTE0NTNGNzIxMzcwMTk3MworOjEwQUMzMDAwM0NGN0Q0QUJCNzQyRkVDMjJGQkMxODI3NzlFMTE3NjdBNworOjEwQUM0MDAwQUYwMTNBQTBGQUIzNjY5NkUzNzc5OERGMkJBMEZEMkUwQQorOjEwQUM1MDAwODIzQzJCMTcyRTlBRTI2RjE2NDE0QUY5QzZBMjQzNjkyRAorOjEwQUM2MDAwNzgwRkM4NTQwRkRCMkRCM0Y3QUUwQ0EyM0Y1OUNGMTZBNworOjEwQUM3MDAwRDFDNkU5Q0EwNjNBNUNENDYxMUQ2RkE0ODNGOTQ5OTcyRAorOjEwQUM4MDAwMjlCREYzNTlGRDQ4MzZBM0Q3NkU2QzU3RTFFMDc4Q0E2OQorOjEwQUM5MDAwQ0IxM0RCMUJGNUNCMUQwNTk2N0E0NkZCQTU3NjUyOTdBOQorOjEwQUNBMDAwMENGRjJCNzlCRjhCM0EzRTFGNjFFRDhGRTE2QkZGNzE3QgorOjEwQUNCMDAwRDhGN0VGMDhFQzlFMEE3OURDODlFNzZEOEI5NUFFRTE1OQorOjEwQUNDMDAwRTk5NDVFOUY1NkM4MDJBMERCQzVCRUFFRTE3RTNBREVDNworOjEwQUNEMDAwQ0YzODlGNUNFQ0EyNzlGQTNEOUJDRjAzRUE0MzlFMzhDNAorOjEwQUNFMDAwN0E3RTA0RkJCQkU0MTkyNzAxN0M1RkYyMEIyRjlFQ0YxOQorOjEwQUNGMDAwMkM3OUZBRDMzMzNGQTBERkRGN0ZDQThEN0U5MzI1QkY0NworOjEwQUQwMDAwQjgxQkY3N0I4OUJERUI1NkYwRkJGNTNFNkU0NzdGRjMzMgorOjEwQUQxMDAwRkI4RjNGOUYwQjdBQzhGQkI2QUVEQ0Y0MDFFQ0YzMjU0QQorOjEwQUQyMDAwOUQ3NkVFOENCMEFFODNEQTA1MjU3NTc0M0VGQTU2MTYyNAorOjEwQUQzMDAwQzc1NjRGNUNDMUQ1MTA5RjAyOEUwM0MwRTMzNzlDMkNEMQorOjEwQUQ0MDAwREU4QTlGRUZBRUUwRkVBMDBGRTc2OTY5MzhGRjUyRTZBQQorOjEwQUQ1MDAwREY1QUMxRkQwNzJCQkVBQTBERjY5QkU2MDE3MUE2NjQ2MgorOjEwQUQ2MDAwMUMyMTc3MkI3NTIzODBDRjRBQjFBRjEwOERFNkU1NThCMworOjEwQUQ3MDAwMjFBNjQ2M0Q0OTBERTJGOTgzOTRDOUNFQ0Y2RDk5NDE5NAorOjEwQUQ4MDAwNTI1QjBBRUQ1ODVDMTJGMTVDREY0NzY3RkY4QjZFRjE5NgorOjEwQUQ5MDAwOEEwN0I0QzFEMERGNDIwN0QzQTdEQjlDQTFCQjFENjhFMworOjEwQURBMDAwQ0Y3OEYwN0UyOUFFOTMzMjA0RkQyOUI2QUU0RjA1QjZCQQorOjEwQURCMDAwQUVDNEY5N0U2QUQzRURDMENGRTNFN0RFRUM5Q0E1NUVCRQorOjEwQURDMDAwRDY1RTg1RjM0QzcyODJGM0E1N0VFQjY3NzRGNkExOUE4QQorOjEwQUREMDAwOEU3NDY2QUM2MzYzODM4QUZDNjQ3RDQzMDBEMzc1MEQxNworOjEwQURFMDAwMjU0NEMzRkIwMTQxQ0M0QjFDMUVGNjUyOUQ0ODcwREYyRAorOjEwQURGMDAwNTY2MzczQjU3QkFBNDM3MDdFMDE3REUyQjk4NjI3OENDQQorOjEwQUUwMDAwRjg2NTBGRDRBMUVERUZGMDEwQjQ0RjI1OEY0RTZBM0REOQorOjEwQUUxMDAwRTgwRjQzMzhDMUI5MENDMDQ5RTE3OUI5NkQwNkMyOTU1NAorOjEwQUUyMDAwQjZDN0VGMkI5REUxNUQwMDE3NDdDRTI4MEI5RjUyMzIyRQorOjEwQUUzMDAwQ0IyQ0Y5N0U3MDMzRjBFMkMwN0YzN0ZDMDhDMjZCN0QwQgorOjEwQUU0MDAwODMwMzUzQjg1RjAxNzA4M0ZCMTU5MEZGQkYwMEJGRTMxRQorOjEwQUU1MDAwOEVGMUVDQkU4MzY2QTIxRkI4RUZBMDU5RTgyOTA1RkM2RAorOjEwQUU2MDAwMUVBMEYwQ0I4Q0QzNTUyMjFDRUE3OTdDOUI0MTRGQTlDNAorOjEwQUU3MDAwRTgxN0VFQTdDMEU1ODM2RDBENkQ5ODFBREZEMzUzQzhCMAorOjEwQUU4MDAwRjVFMTRFODFDNzA1ODQ1N0RCQjg3RjFDRjcyMTUzMjdCNgorOjEwQUU5MDAwMzkyNjdGMTIwOUU4NzgyRjBBRUY1NzQzQjk4N0Y5MTE0RAorOjEwQUVBMDAwOERGRDk1NTRGOThDOTVGRjY5QUZDMjdBRUU3RUMxMjY2RgorOjEwQUVCMDAwMDJCRjkyRUExRjI2RUY2NDk4RTg3ODQ2QjU1MzQzMzhGQworOjEwQUVDMDAwMDdEMTdGREJDOEU1RUJEQUJFRkRCNEQyQzdDNjA2MERGRAorOjEwQUVEMDAwRDM0RDlDNEVCNjcwM0FEOTBBRkIwRUZFQjlBMDg4N0JDMgorOjEwQUVFMDAwREEzQTlEQTBGQ0JDOEZFNjk5N0RERjQ1Q0M3RTZEN0Y3NAorOjEwQUVGMDAwQjBCM0NCNDZGNzFGNzk5Mjg2NjkxN0YyQUZEN0VDRDE4MgorOjEwQUYwMDAwNjJEQUNFNUQ0QTQyODAyRkZFRDdCRTFCQzVCNTkyQ0UxNworOjEwQUYxMDAwMDBGODQzRkQxQzdFRTQ3MDgxRkY2NkY2OUU4MjhEQzlCOQorOjEwQUYyMDAwMjkyMkIxMzQ2MjAzRkIyOTExQkU4REMxQTMwRUIwQkIyRgorOjEwQUYzMDAwNTNDRDI3MkJBOERCNzNFOTc4NTk2RkQ4OTE3RjY3REU1MworOjEwQUY0MDAwRDJGOTVBMEQ1RDg3QTdENThERjY2NDU2OTBFMUEzMjdGNworOjEwQUY1MDAwMTgxNjZBNERGQjk3OTU0MkVGREJFN0JDMkVEMzQ5RTkwMworOjEwQUY2MDAwNzgxMEM0RjNEMjc0NUI1QkExMTNFMEJCRDFENjE5MDA5NworOjEwQUY3MDAwM0VCOEQxQ0ZFNDhDMzY5QjhFNzY5NUE5M0RFNzhGQkU0NworOjEwQUY4MDAwNzIyQkZEMUJGQzU4OUQ1QzY2QzE2MzgzREZBNjRGQjEyRAorOjEwQUY5MDAwRTJCQkMxNkZDRjNCOTgzRUQ3RTZBQzFFRUU4NDc4REVCNQorOjEwQUZBMDAwRDg0RUE0Qzc0NEZDNkZCNDI5QkE0MEY1OTQ0NkQwMjVDNgorOjEwQUZCMDAwNDFCRjNCMjlCMEI4OTRGRTdDMDBFMzU2M0VFQ0M5REZBQworOjEwQUZDMDAwMERFRjBFQUNFMUYxRDQzQUE1MTc5NDNCRENGRjY5OUM4MAorOjEwQUZEMDAwQ0IxRjIwRDUyREYwMEU0QzBCQzUyMzAyRUZENTUwRkMxNgorOjEwQUZFMDAwMDE3QUQ4NENGMTA3RDIwOEM1MUY0NjI3MTMzMDM1RjAzNworOjEwQUZGMDAwNzMyNjM4NEZDQ0U3QkY0NUM3NDU3NjlGNDMwNDk5NDMzNgorOjEwQjAwMDAwNjQ2QTA3N0FDMENGNzQ2NEEyMDNGNDQyRDlDNkUyNTlENQorOjEwQjAxMDAwN0FCRDYyMjdDNEIzQUNGNUNDNzI4NEMwQUZFMzJGQzc0RQorOjEwQjAyMDAwN0RGRkFCQjcyNjZGQTA3MzE1Nzg1MTA0RjA0NkY1MDQ4OQorOjEwQjAzMDAwQzlBOUQyRjhCRDVGNDkyRDIzNjA0RjFFRjA3NEUzRjkxMgorOjEwQjA0MDAwREVENTRFRDEzMkFGMzY2N0Y4NDZBN0M5Q0YzRjFBNDY5NAorOjEwQjA1MDAwRTdGQkY2NEZCOEZFRTRGNzg3NkY3MzcyM0Y2NThFNEVERAorOjEwQjA2MDAwOEE0Q0Y0NkRDNDk5MTI0RDI3MjUyNjNBNUY1MzNDOERDNgorOjEwQjA3MDAwQzAzOTY4N0ZGQTRFQzFDN0Y2RkVEN0YwQjFDNkJDMjgwQQorOjEwQjA4MDAwRUU5QjJEOTE2RjY0NTJGRUVFQzE1NDE3NTUzOERGM0I5NQorOjEwQjA5MDAwRDRGNDJEM0ZFMkQ5NUQwMDBGRTJEOUREQTdCRkZDNTMwOAorOjEwQjBBMDAwNDFGRjc5MjZGMkFEQjgzQ0QyRDA1RjQ1RTVEMUZEMTMyMgorOjEwQjBCMDAwODAwRkE2OTA0NzQ3REUxQ0YxMzU4NTk2QkZGM0JDMjQ3MAorOjEwQjBDMDAwOThGRDc1MEI2MkVCNTExRUQ0QzYyNjEyOERDRUI3QTYyNQorOjEwQjBEMDAwRUQ3Qjk4Q0U2RjZCNDdCQzNGMTc1REVCQzMzODlBMTY3QworOjEwQjBFMDAwNjZDRjlEOEJEQUEyNTIzRUUyRUQ0NTA5RkNGQTg0RjU2QgorOjEwQjBGMDAwN0Y2RTY3MjNENjIzRTA3RDMxOEQ3QjZFMjc2QjRGQ0EzMQorOjEwQjEwMDAwMzVENEE3M0ZFNDZCQUNEOTYyMEZDMTM5Q0RCOTM2REE3QgorOjEwQjExMDAwNkUwMDc4RDY4MDMxOTQ0NDNGQzVGNzA0RTBFRTAwQTk3NAorOjEwQjEyMDAwMUIwMTdDQ0VBMEY3QkIxNUNBOTcwMDBFNkZEOTkzRkEwRQorOjEwQjEzMDAwRDk1NzNBQTdFRTAwQkE1RUU5MENCNTMzQjhBNzVGRDY4NworOjEwQjE0MDAwQkIxNkVGODg1NEVGNDU3ODg3N0QzNzU4RkNBQ0NDOEYyMQorOjEwQjE1MDAwRjkwRUQ3OEI4OTIzNDVCOThGQjc1NzkzOTcyRjY5N0QwMAorOjEwQjE2MDAwRUZGOEJEMzRENzVDMUFBRTI2MjZGQjVBMjJDQ0JFNUU2MQorOjEwQjE3MDAwN0FBODkyQkYyRkMyRTY5MzA0M0Y5OTNFREI2QTQ3M0UwRQorOjEwQjE4MDAwMzQ4RkZCODMwQzdDOERFMzRCRDhDN0VGOTc1QUYwRTlFMworOjEwQjE5MDAwOEVEODU2REM2RjYxRTNFOEZCMjc1MkY4N0Q0NEYxMDg1NgorOjEwQjFBMDAwRkM3MkMyQzZBQjA3MDMxREFEREVGMEE1MkRCN0QwRkUwNQorOjEwQjFCMDAwM0Y3RTUxQzJFRjBCNjI0RUFDN0ZGRURFRTBGREI3ODBGQQorOjEwQjFDMDAwQkVGRTZGMzYwMjdDRTRFMzEzNTNGMTNDRjZCQ0NERUFERAorOjEwQjFEMDAwNDc1OEU0NjJGMkZBMUNBN0UzRjlCMThEMTZGRDc4N0VCOAorOjEwQjFFMDAwQ0I1QzA1RkM4RkYzNjM5QkYxRkI3QzM4OTRDMTdCMjAyNworOjEwQjFGMDAwN0YzRTU2MjlDMzc5MERDMUYzRDE3M0NFRjdBN0FDMDFCOQorOjEwQjIwMDAwMzgxQzJFNDMzRjU2RUQyNjdCRDI3QjI5RTc5QzlBRTVERQorOjEwQjIxMDAwRENCOUI2QTcxNUZCMjU1NDNGQ0FDQ0UyRkQ5OUY4NDcyNworOjEwQjIyMDAwNkQwQzJFQjFDMEZFRTgwNEVFMkRDQ0U3N0NBNDZGN0U0MQorOjEwQjIzMDAwM0I2RDE2M0U3MkRFOTlEQzRGMTJFMzdBQzlGQ0Q4OTc1QgorOjEwQjI0MDAwOTA4RUZBQUZFRjFBNDY1RkM2QjgzRDhDRUVFMkVCQjlDRQorOjEwQjI1MDAwN0Y2MkIyRjVDNEQ3MzExOUVCOUZGNzI3MUYzRjhGQzMyOQorOjEwQjI2MDAwRjk0Q0MzMDIxMkEyN0NBOEM2NEVFQjc5NjBGQzNCOUI1MgorOjEwQjI3MDAwMjc4MDlEQkREMzlGMkU5OEQ2NTVEQkI2ODg4NDRDRUI5NgorOjEwQjI4MDAwQUFERDM5NDdBOTMxRjUxQkRGMDdFNzJGQ0RGQjkwQjdDMgorOjEwQjI5MDAwNDE5RUJBQzYwMzcyQkJEQUVEQTI3MEFFRDk3OEY1OThCQQorOjEwQjJBMDAwMzBEQUQ5OEM5RkJDNjMwQkU2MDI1RjNEREI3NjY3NTJEOAorOjEwQjJCMDAwRkFDRTczNjkxNkI5NTBEQkM2Rjc4N0VBQkRFNUE2RkQ3RAorOjEwQjJDMDAwMzFGNjI1QjFGRDk5Mzc2QkZGN0EyRkY4MDExRTYwNEFFMAorOjEwQjJEMDAwNEQyQTc4RjVEQkI3RkNFNDcwOUJFODYyNzg3OTg2Q0E4MgorOjEwQjJFMDAwRDkzMEMyNEQ3QkZBMzVDMEVCNEQ2RThDRjc0QzBEQkY5QgorOjEwQjJGMDAwMkI0ODc4MjBGOEE1RDA1RkE5QkU1M0U2MUEwRkUzMTJCOQorOjEwQjMwMDAwODQ0MzZEMUJDMzgzNEJDMTJEM0UyRUM3ODNDQUU0RUIyMAorOjEwQjMxMDAwQTlFREMzODM3QUEyNTM4MjNEQTU1QzBBMEZFRTIxQkE0MAorOjEwQjMyMDAwNjM4MDc1RjRFMUMxNjgwQjFFRDRCQThBQTcwMjNEOUUwMgorOjEwQjMzMDAwMDMzRDY1NDRGRkZEM0ZBNUU4QkU0OTcwMEVCNDQxQzIyMAorOjEwQjM0MDAwNzNBNjUzMkUzREVCOUIyQzNGMTZGOEYzMjk1RjY0RTY2MgorOjEwQjM1MDAwQTRGMjc4RkU4RUJEQzVCRTM5QTY3MUNGQjZEQ0U5NEIyRQorOjEwQjM2MDAwRTY2N0FENEQ4NTNGNDUzQTI5QURGODNGODczRkVGQTRFRAorOjEwQjM3MDAwQjhDN0I1RDI1OUI5MDhGNjkzNDQ5MkZCNzM4REQ0RTA5RgorOjEwQjM4MDAwREY1MjlBQTdDRkVFMDQ3OTdBQ0E1M0YwRDcyODJEM0QyMQorOjEwQjM5MDAwRTQwQ0FGMDQ3QUJBNUJENEM2Q0MxMUUyRjY2NzNGRkQ4OQorOjEwQjNBMDAwQjM2MUZBRDVBNzhCQzE1RjU4N0RGNTY5MUJFQTQzRDgxNQorOjEwQjNCMDAwMUYwMUJEMzI5RkM3NDVBMDdGNjMwOENBODNDNEYzRDI3MworOjEwQjNDMDAwMUZCOEYyOTM5RThGQUU2REE4MUIwN0ZEMTI4NzRFNTRENworOjEwQjNEMDAwNzM5QzFDNjE3QUQ0RkY4NkYxRjNFM0VCNTE2QzYxMzUwOQorOjEwQjNFMDAwMDhGNkE1NDBBQTAxQ0Y2RDcyQjgwNUVFMDNEQjAyOTlGRAorOjEwQjNGMDAwNjM3NTEzNUMxRjcwMzFGRjk3RjNEOEIxOTY3Q0RBREU2QQorOjEwQjQwMDAwRjlBNzE3NTU4MkY3Q0M3NEY0QUYzOTcyRTQwRkNERkU2QgorOjEwQjQxMDAwNjk1QjI2OEI1RjI0NDVBNkVGMDUxMDg3NENGMzE2M0IyRQorOjEwQjQyMDAwOUZDRTc3MDAzQkY1NjcwMjgzODNFRUI1RjM3Qjc1QkE1OQorOjEwQjQzMDAwMDQ3MkVGNjYyNzMxRkU1MEZGRkU4MzExMDcyMjM3QjFGOQorOjEwQjQ0MDAwNzJCRjUxRENDNENBQjlGRjcyNTkwREYzNEYyNkVFRUIzRgorOjEwQjQ1MDAwQ0Q4N0Q3NzU4MzNFNzNGM0UxMjE3M0MxOEY3NUIzNjdEMQorOjEwQjQ2MDAwQzQ5RkUwN0NFMTY3RTBDMzA3N0NGNzMzQjk5Q0Q4RUU2QQorOjEwQjQ3MDAwMzBBN0QzNkZCNThCQkE4REVFQ0IzMTVCRUY1MTM3Q0NBNAorOjEwQjQ4MDAwRjczQkVDMURDNzZGRkVFRTk4Q0Q0REQzRDc1RjM5NjUwNgorOjEwQjQ5MDAwODM3NzNCNkU4MzAwMURCQUFFMzk0NDUzOTgxMjFDQzVBNgorOjEwQjRBMDAwRjY3MzQ5QTc5N0U1M0IwN0NERjI5QUZCQTNBNjJBRjRDQQorOjEwQjRCMDAwQjc5QzlERjM3RUYzNzdBRjRDMDVGMTRGRkI1QjBCRTkzNworOjEwQjRDMDAwNkQyRjEyMDVGQTlGNzM1MDZCNjZEN0Y4Nzg3Rjg3NjlFNgorOjEwQjREMDAwN0Y2MkJDQkYzODFDMTU2NkU3QzgwRTg0NEIxQzRFMEUzRAorOjEwQjRFMDAwODQ5QjAxMjc3OEU2MDZDQkUzNzA0NjdEQzM4MDczMUZGQgorOjEwQjRGMDAwRENEMjY2NUY0RkM2QTRBNjk3OUIzREMzRkY0NEM2QzQ3QgorOjEwQjUwMDAwRTc5NTA4RTc4RkExODhEMkRCNzE1N0U4OEY0MDM3MDdBRQorOjEwQjUxMDAwNUNBMTM3MjA1REVDRThDRDk1MEJGMDFFNjMwRkU0OTczRQorOjEwQjUyMDAwNEFFMUJDMkM4QTY3MUYwQzBCOEYxODA0NzE1Q0REQzlDMworOjEwQjUzMDAwQ0Y1NzEzRTlGNDJEQTAxNzg4RkZFNjcxOThCN0YyRjVGRAorOjEwQjU0MDAwM0RGN0REQjM1RThDQjM3Q0VBRDU1QzQ4OTc0ODNEOUIwNAorOjEwQjU1MDAwQkUwMUY0RjY2QjA5RjVFRjBGMEY4RTE4MzAyRUVEMkRBRQorOjEwQjU2MDAwRUVFRkY4RDQyNUYyRjMwM0I2QkVEQkI4MUU3N0RCNDE2RAorOjEwQjU3MDAwNzcxNERFRTNCQ0FENUVCMkU4QkZCN0Q1QjMzODBFMjJCOAorOjEwQjU4MDAwNzc4RkI5QzlBMjQ3MzZBNUVDMDdFQ0NFQzQ3RThDRjVGRgorOjEwQjU5MDAwMURDRENEQkUwMkVDQzM4N0M2MkIxQUY4MUY4RUJDRjg5QQorOjEwQjVBMDAwRTExRjZBNjlERTM1Q0M4MUU3QjI5QkZDMUM3RjJCNDUyRAorOjEwQjVCMDAwRENGNzg3RkMyMUY3NjhGMDNCNkQ0ODBGRUE3NDlEMUJCMAorOjEwQjVDMDAwN0U0OTNBNDUwQTlGQTMyMzU3NDZBQkU4Nzg5QkFGMTZCRQorOjEwQjVEMDAwRDE2N0I1MjVGNjcwQTQwQURBOTVCMjc3OEY1NEFFOEY4RAorOjEwQjVFMDAwNkVFOTNFRDUwNkY4NzhGNjM1M0JGQUZCRDNCRDEyQ0VCMAorOjEwQjVGMDAwNjM4M0FEM0ExN0Y0RjczRkI1MkI0OURGRDk3Mzc4NjUwQworOjEwQjYwMDAwQUNENzJFRjQ2MEJDREI1QzEyNzEwMERGMzhEODNENkIyOAorOjEwQjYxMDAwMzBDQ0M3MTcyNDJBQTBGRkQ5OUQ5MkM4RjQ2NEMzQ0ZBOQorOjEwQjYyMDAwRDEyNTMzM0ZCQjJFQjM3Qzg4QTdBQUQzRkNERURERkEzRAorOjEwQjYzMDAwRTk1MzMwOUU2MjVFRUI0QjE4NEZFQzJCNEY3RUNGNjk4NworOjEwQjY0MDAwODI5QkRERDdGNTc2QTc2MzVDQjQ3NzhBODg2RjI0NzkwRgorOjEwQjY1MDAwODNCRDAyQjRDQkVCQUU1MkIwN0Q0NDE4QjA3RERFMkE4MAorOjEwQjY2MDAwRjUzQTgwMkJCNDA3RkU5Rjc3OTlFRDgzNkUwNUUxQjAyNAorOjEwQjY3MDAwOTVEQkM5RURCNjYwRjMxNERBNEZGQjI2QkYwMEZCNjEyMgorOjEwQjY4MDAwRDRCQkNFQ0RGNDk5QjM1MzBDRkY0RDA0RkQzN0I5NDU2RgorOjEwQjY5MDAwQUExM0RFNUJDOTBEMjE3MTEzNkY3OUM0MDFGMERBMERCNQorOjEwQjZBMDAwRjU5ODdGMTNFMUQwM0VGMkU5MkUzODNGREUwMEIyMDE3QgorOjEwQjZCMDAwRjZEOUM2RjA2OUMzMjYwMUZEOTkxNDdFRDkyMDJGRkU2NAorOjEwQjZDMDAwNzQ5RkZEMkJCMDhFQkMxNjQxMDVEQjlCQTY0OUU3QkRFMAorOjEwQjZEMDAwREFFMzYwRjJBNkY1N0VCNDAzQzEzRDBBRkRFNkVFRkNCNgorOjEwQjZFMDAwMkRDRUNCOUI2MkJEM0ZGNDMwRkNGOEQzMjVGMDIzQzdCMQorOjEwQjZGMDAwQ0RGQzM2QjlGNUREREM0RUVBQzJGNzE2MjMwMDI3QzhDQgorOjEwQjcwMDAwODdDQUQ5M0I4NzcyNDgzM0M3QTFDNEU5ODdEOTYxNzQxNgorOjEwQjcxMDAwOUQxODA3NUEzMzQxODk4MjFGNDA2QzY5Qzc3Nzg1RTdCNgorOjEwQjcyMDAwNDZFQ0U0NUFCQUJFNTZBMTNCMDRGNEEyOEYxN0Y5N0I0QgorOjEwQjczMDAwNUVBMUI3MDA0RTlCQjcwRUM2NzhCNjc1NjIyODE3RkQ5RQorOjEwQjc0MDAwM0JGRkFBRTBGOUQ4RDFEMDg3MEZDMEJCQkNCQjI2MjhFRAorOjEwQjc1MDAwNDgxNzQ3NDNFQzlFRUM0M0FCMEFEQUMxMEVGN0Q2NTdDNQorOjEwQjc2MDAwRTE3QkMxNTE1NTQxQ0VEMjU4NEU1RTgwNzhEMkM2NTU0QworOjEwQjc3MDAwQTIyQUQwRkE5MTZBRTMzRTgyRUEwMkJDMTgyQjdENzRCOQorOjEwQjc4MDAwNUQwOTlDOUYwRDExQzE5NzQ0Q0UwQUVDOUQ5MUI1QUIwQworOjEwQjc5MDAwQUE1NEQ4RDdCNTZBQTY2MEI2NUI3NDhFMDc3RkY0NTdGMworOjEwQjdBMDAwRUI2RUJBQkVDMEJEREI1NDg4MDFERjEyQ0JCODAyRkMyMQorOjEwQjdCMDAwODU3QThCQTJCMTc3OEJEOUZCMjQxOTdDNUYzMkJBQzUwRAorOjEwQjdDMDAwQUVGOTNFQ0M3QjE2NTAxMzc5Q0I2NEU2QTdGQ0RFRjVEMAorOjEwQjdEMDAwNjFFNjVGODQzM0M5MEFGNDJGRjJCRjAwRUU2QjI2Q0YxNworOjEwQjdFMDAwNkQxOEU1QzJDQ0Y2MzVGM0IxM0VGNDkzNDVGQkM5Mjg5QworOjEwQjdGMDAwMTdCQjJBNjhCRkJCRkRBMTVEMjg0RkE2M0ExMDRFNDQ3NworOjEwQjgwMDAwRUU2OTAzMzg0NUE3NjYwN0UxRERFNDZEMTM4N0JGMDRFMQorOjEwQjgxMDAwNEY1NDY1OUNFODlEMDU3MjM0M0FDQ0Y1N0EzQkYwQTkwQgorOjEwQjgyMDAwQjU4QTA2NzQ5RUIxRUFDQzJERjBERDFGRkNGRTlEOTAxQQorOjEwQjgzMDAwNjYzNEZERkUxRTkwMDdGRTlFQkYzNEUwRjdFOThBQzUyMAorOjEwQjg0MDAwQkY5N0YxQzZGOUNGQTEzQ0EzNUFCMUY4MDkzRkYzNTcwRQorOjEwQjg1MDAwM0ZFQ0E2RjBEOTU1MUE4OUQ0NjhFQzdCMjgyQkJFOEUxNAorOjEwQjg2MDAwMDNBQkJCQTdDM0ZCRDk2NzZGMTA4M0JCNzkzOUFFNkI0MgorOjEwQjg3MDAwQkIxQUREQzBFMDU2MEU3MkNEODBEQjNBNTFFQjg0Rjc4NworOjEwQjg4MDAwOURGNTk5MEVDNDhGMjJEMjhERkM2QTA4OUMyMjE3QzZBMgorOjEwQjg5MDAwRjcyNUUzOERGNUNCMjE0RTIyNzEzRUNGQjg4NUJFNzdEQgorOjEwQjhBMDAwNjFFMDlENEE4Q0Q3QTc3MjRDMTkzMkM1MDU3OEZENzhBNgorOjEwQjhCMDAwNTk3NzAwRjRGODRERkVFNEYxMDk5RjdBNTg3QjdCOEFCMgorOjEwQjhDMDAwRkJFRTFGNzkxODNFMDA0QjZDMkJDMzM0MzQxQTUyMEYxOQorOjEwQjhEMDAwRDFEMzIwQ0Q3MTg0MjAzRUY2NzE1MUZCMjNFMkY5MzY5RAorOjEwQjhFMDAwNDk4M0ZEODFGQTM2QkE3RjQ3NUU3ODE3RkQ4MzQ3MjI4OAorOjEwQjhGMDAwQkZDNUY0NjU0RjA5N0JENzhGMTI1QzE2QkNCMzVCN0U2NgorOjEwQjkwMDAwMEFDRjQ3MzZBQjBDNDc2QTVCMThCRkE4MERGNDM4RTA4NgorOjEwQjkxMDAwQkNBMkI2OTRBOEJCMzlCRUU5MDY5Q0MxREZDNUU1NTVGQgorOjEwQjkyMDAwQ0Q0RDBDQUU5OUE1MDRDRjVCQzEyNzA2RUY5RTY1NDFCNgorOjEwQjkzMDAwM0QwQUJGQ0M5NkQ1Q0I3MTFGNDlCNzVFNDhFQjZEODZFQgorOjEwQjk0MDAwN0U2MTdGOUFEOEZEMTQ0MjdBMUM0OEJGMTEwOUNGMUIzMworOjEwQjk1MDAwMjlCREZGMDZDRTEzNkI1QTA3RTM3OTNCNUM3Nzg3RkU2MAorOjEwQjk2MDAwRDJGOUI4RTlCQ0JGNzZEQTBGRjhGRkNFQjY0ODY0MzczMworOjEwQjk3MDAwRjJCNzZFNzg2Mzk4NjhBQjI4MkUyMzdFRjY1Njk2RDA4MQorOjEwQjk4MDAwN0VCNTcyNTVERDYwRTA4MUMxQzcyODY5Q0NBM0YyMDJBMworOjEwQjk5MDAwRTAzNjRGRDc5NzAzRkU5RDcyQTgyRkMwM0NEQ0RCRUQ0RAorOjEwQjlBMDAwMUFBQzdGREVGNjY3RUUwNkJEQzUxREU4NjkwMUZFNTBFNAorOjEwQjlCMDAwM0I4MUNEMzdCRDk1N0U0N0ZENDZGQjBERDRBRjZEQjVDMAorOjEwQjlDMDAwNkI2QzNDMEVCRjcyOEU2NzFDMEVCN0YzNzlERkJFOTNCMworOjEwQjlEMDAwQ0REQjM1MkMxQTAxRkNBQzVENDVFMTBBNjU2MTg2RjdDQgorOjEwQjlFMDAwRTBEMkJDMjgyMjVEOUQ4MEY1N0JGNTJDRUM3N0QwRUM3NQorOjEwQjlGMDAwMDRCQTQ4QzAzRjYzNUQzNTdDNUQzNUFCRDhCQTA4QTc1MworOjEwQkEwMDAwMjczQUFEMkVFOEI3QTY5Q0FENzMxRTYxRUQ0NUY4NEUwMgorOjEwQkExMDAwRkJCRjlEQUZBNzQ2N0YxQUQzREI1QkVDOTZGRTc3OTUwNQorOjEwQkEyMDAwRUNFOTg2RjlFNDk3MkE5QTgwNzA2NkVGNkRFNkYyNzU4NAorOjEwQkEzMDAwRTUzNkIxRjE3MjRCOUY0Njc4OTE3QUQzN0NEMTJGNkE2QgorOjEwQkE0MDAwQ0E1M0JBM0FGQjNDMjUyQzc4Q0MyMkQ3ODFDODc0RUE3OQorOjEwQkE1MDAwQkIwQTlFQTMxNDZEQjdBRUVCRUNGQTExMEZCNzgyRkZEMQorOjEwQkE2MDAwRjMzRTA1Q0YyQjFFMTc4MzZGRTVBMTFEQUE2ODhDRkYzRgorOjEwQkE3MDAwMDQ3RjNCMDNGOEY0RUQ0RDc4QkZFQTQwMjU4M0ZGRDlGRQorOjEwQkE4MDAwQUY5MjI4RTA0M0YxODlFQTc0ODA3N0YxODkzMDRGRUI3NworOjEwQkE5MDAwRjAxQzlCMDI0NEU4RTM3Qjc0N0VENDc0NkExMTgwNUZERgorOjEwQkFBMDAwQzYwQTdGQjgwMEY4MDBERDY3RDAwNzg3OTlFNzRERTc0MQorOjEwQkFCMDAwOTdEMTkyNTUwNTcxNDg5OTEzRDJBQjE0N0M0MjM4QTFBNQorOjEwQkFDMDAwRkNDNDhFNTlGMDFFNkVFNkIxMUQ3N0MyMzg0Mzg4NjlGQQorOjEwQkFEMDAwM0RCNEZDNEE2RjIxQkI5Rjc1OEM5NjQyQkRGQTMzRjc4QgorOjEwQkFFMDAwQzI3RUI0RjI3N0VEOEI2MTY2RTk5ODFFODMzNDgzRDIwRgorOjEwQkFGMDAwRjdDNjc0OThBNzRDQTY5NEM1RjlDMURFRkIyQUM2MDIwNgorOjEwQkIwMDAwNUZDMUJCMjU2NTk4NzY5MUIyRkU3Q0MzNTQ3RjI0QUY5QworOjEwQkIxMDAwQUYwQjQ5RUE1NTc4MzU4QjVEQkVGN0JFNjkyM0MxN0UxMAorOjEwQkIyMDAwREYwQzdBNjIxQUJDMEJBODdFMDRGMTMxN0E1MDQ0Qjg1QgorOjEwQkIzMDAwNkZCNjc1Mzk0QTMzRTFERDcxOTE4MEZFQjJBNUU0Rjc0NQorOjEwQkI0MDAwMjJEMERERTY4MzI0MDhGODkxNTFGRDFGNzZGMzNFRDYxRQorOjEwQkI1MDAwNzlGQ0I4NkU1OTIxMUI4MUZFOEY4RTNDMzMxREY2Mjk2RQorOjEwQkI2MDAwN0E4NEVBOURCNDdFRDVBRjNDM0JFMDNFNzFGQjFGNTgyMgorOjEwQkI3MDAwRkM0OUZCRjM3NTI4QkY1N0U2MkE0OURGN0QyNjk3RDA5RAorOjEwQkI4MDAwMTMxM0VCQTcxN0NGNDIzRjVFREVGNkFERjhCRTZDRURBOAorOjEwQkI5MDAwNzQzOTc4MkRBRDlEQjlCREIyMTJGNDE4QUQ5QTYyRDc0MworOjEwQkJBMDAwNjAzQUVGOUQ2MzU3MDMxMTZBMzNEODc5OTUzNjlEN0RDRQorOjEwQkJCMDAwRDdBNkIwNzQ2M0MzODI3MTYwQjc0NzNBNjQ2NzExOURCQQorOjEwQkJDMDAwRUZBOEY1RUNGREJFOERBNTFGM0FDMjU0MkYyREFGN0MxQQorOjEwQkJEMDAwQzJGMTU1RkFGRDc0Mzk5NTgyRjRGQkU5QzkxRjNBRTFDNworOjEwQkJFMDAwN0NFNkExRjJBQTBDODBFN0MxMTZBQjVFNDdFMDcxMzY5NQorOjEwQkJGMDAwNkEwNzhEQjY0NzQyNUUzQUFGRDZERjExODRBNzY0RUY3RAorOjEwQkMwMDAwNkFBQkExNzlFOTE5MEY2ODM4RkRFQzlCRjVBREVEQjM4RQorOjEwQkMxMDAwMDE0RkU3OTU2MDc4NzJGRjdERTdGMjYyNkU3REVGRjQ4OQorOjEwQkMyMDAwMDJBMDVCOURCMDczRDRDOEZEQzg5NDZGRTcyQzIzNUY1RQorOjEwQkMzMDAwRUY0NkE2RTNERENFRUM5Mzg4MUMzQTBFN0MzOTUyMUEwRgorOjEwQkM0MDAwNTZBMDg5QzFDRjVBOEI2QkY2MDEzRjUzQjhERTRGRUEzRAorOjEwQkM1MDAwMTZFMEZENDhBNDdGMDlGNEExREVDQTY0NzZEM0I3RERGRgorOjEwQkM2MDAwMkVDNEFCQjMzQjZGN0MxNUZDRDNGM0VBOTlCRTlGQjdGMAorOjEwQkM3MDAwRjMyMzAxRjc4M0VBN0Q0MzY4RkY3OUU1RjhFNDI1OTkyQQorOjEwQkM4MDAwQjcyQUUyMTgwREZCNTMyNDEyNEQ4M0Y5NzQxMkIwMTMzNgorOjEwQkM5MDAwMjI1NEZFOThFMTYwRjRGQkY3QjZERkUxQjFFMzNBQkU2RgorOjEwQkNBMDAwMERDNkYzRjhGODdBM0M3QzNEQjlDMURFQ0E2NEYxQjM0NQorOjEwQkNCMDAwREZFMkUzN0VFN0MxOEY4RTRDMDRGOEFGNjIyNjUyNUU2RQorOjEwQkNDMDAwRTRBNEUwMzBDRDIzNEZCRkJDNzlEQzAyRkREMTc5M0M0OAorOjEwQkNEMDAwRTk2MUY3QTdCREU1M0Q3OEVGMjg5MUJGODMzQTBGNzQ3RQorOjEwQkNFMDAwQkJDQjdENjEyQ0IzRUZBREZDQjQ1RjlFRTM1NUUyRjdCNworOjEwQkNGMDAwREMwNDdFMzVEQURFNzkzREVFRUYwMUY2QkUzQTIxOTRDMgorOjEwQkQwMDAwNkUxREY4QUNBOEM2REU5RDhEMUFFRkEwRDc0MUJENTFCRgorOjEwQkQxMDAwNUU4RjBBNzhEMDNBRjJGNzY1MDA5RjRENUM1RkI4QkQ0MAorOjEwQkQyMDAwOTRBMEJEN0E3QjRFMzdFQTBCNzM5QkI4QkUyMDA3OUI2RAorOjEwQkQzMDAwODFDOUJBNzdGQUM5MDY5M0ZFODAyRTJDNzAyRDM1NzExMQorOjEwQkQ0MDAwN0RDMTkwRkY1QzZFRDcwNkJBNUI1MEFFODI3RTYwOTI3QQorOjEwQkQ1MDAwQUIzNTNBOTNBQjc5MDEyNkQ3NkI1QkU4MzgxQTQ3RTZFNworOjEwQkQ2MDAwMEFCMzVFQzJFNEI4QjY5REVCMEY1QzBFNjdGMDcxMzNBOAorOjEwQkQ3MDAwNUI5OEJDQ0EwMDNEQzIwN0UxMDczQUNBNjUzQ0NCQ0IyMQorOjEwQkQ4MDAwOEFFQjJEODM0QTk5QkNDQzY4N0QxQ0U1REExRkMwRTk5QgorOjEwQkQ5MDAwMzIwOEY4MDY5Mzk3QzM1RTdBNDUwNzMwMDVFOEU3MzYyMAorOjEwQkRBMDAwQ0FBNzhGRjFGMjgwNEFGNUIzRjRCODdFQjY0RUU0RTc0NQorOjEwQkRCMDAwNEM4NEU5ODcxODVCNEZFNzc5OThENzM3QkVFRkUxRjNGQQorOjEwQkRDMDAwN0JGQzU4RkE1NzgwQkZFRThEMTQ4Qzk1NEM3NDhCNUVCQgorOjEwQkREMDAwNEY5QUNGMkQ2N0U3RjRCOUY1RUM5Q0RBMUI5Q0JGNEY2NworOjEwQkRFMDAwMzI5RDNGNkNGNTcwN0JEM0MwQUJGQUFFMDBGNDhCRjc5RAorOjEwQkRGMDAwMUQ5MThGQjNGN0FBRDY1MzdEMDlGRDRGRENCRTlBRUI5OAorOjEwQkUwMDAwRTY3RTBEOEUzRkE5RTQ4OUMxODdCQzI0RTQyQkE1RjAxMgorOjEwQkUxMDAwM0QxREREODdGQzVBQTdGNjEyQUNFRDc0QTQzMTdCMjFFMQorOjEwQkUyMDAwRDA3QkU0ODY3Mjk4RkZFNjg5N0ZDNUI4OEJCQzE0RjY5OAorOjEwQkUzMDAwQTJDM0VCMzBFMEYwODVGOEJBNzdGQTJCQ0MwRUVEMTYwMgorOjEwQkU0MDAwOTNERTkzOTlDQUZEMEY5RDMyNzEwMzNDOUQxMUY2REU3RQorOjEwQkU1MDAwQTE3MzgyOTJCNEZFMDQyRkUzOUIxOTVFNzY4RjY4RjM4MAorOjEwQkU2MDAwQzQ3RDc4QkYzMUE1N0M5Njg5MkUyNTkxQTc4NkJDNkRBRgorOjEwQkU3MDAwODU3RDlFNDRDOENDRDY1QjlCNzVCNEQzQTNENTEyRjIwNgorOjEwQkU4MDAwNTc3NjBGMzBDMjdGNzc0NjJGNTFEMDZGRDg2QThCMzhFNAorOjEwQkU5MDAwNjAzRkI2OTRGMzdENTUxREVENzAzRkZEMEJFRjBCODVCNAorOjEwQkVBMDAwMDdFQ0YzRkE5MDE4MTVGMjYxOUZBM0VBNjhFNkQ3QzE5MAorOjEwQkVCMDAwREZFRDM5NEJFRDc3RjMzOUM1MkNBRkM4RTFBNDg5MTAxQworOjEwQkVDMDAwOUY5OEQ3QzJGMDZCRjM0NDA1RTdCMTYxNkM1NkJCOTQwMQorOjEwQkVEMDAwNkZFNkJGMDJFNzlGMEM0RTFCMjYxRTQ3RkNCQURDRjkzQgorOjEwQkVFMDAwQ0RBRkJGNjdEMjY5RDMzOUUyOTkwNzFFMjkwMDM4QzdBMQorOjEwQkVGMDAwREY2RjA5MEQ3ODdGNjE3RUZENEI5M0Y2MjQzOTFGRThEMworOjEwQkYwMDAwMkIwNzNCQ0EwMzc2NjBGNDlCRTY3Mzk2ODU1RTY2NjdGMworOjEwQkYxMDAwMkRGMTFBRUYzMzMzRkUwNkZDRDU4NkM2NDUzNDFCRkNFMworOjEwQkYyMDAwNEIwN0FFOEVGQUQwN0ZCRjk4OUREN0RFQzFDRjZCREZCNworOjEwQkYzMDAwREQ3MzIzQkVCRjMwMUFFRUQ0MjZEOUY3RjMwREQ2Rjc0MgorOjEwQkY0MDAwMTdDRUVGN0QyNDlCRjkzNUEyMTZGREVBOEU3RDNGMTlCMQorOjEwQkY1MDAwQzVERTlGRDFGOUVGNzIxMDJEQjM4MkJEQTM4RDcyRkFBOQorOjEwQkY2MDAwNzg1MEI3NEJGMUY3RDExNEY4NUQwQ0YwQjcwMzA1MTcxMworOjEwQkY3MDAwQzIyQkEwOUQ5ODdBODA3RTBCRTFGNzg1N0EzMTU1NDFERQorOjEwQkY4MDAwMUMxNTgyOUQxNEM0MzQ5MzU0NjM5QTQ1RUEzMDBEOTA3NQorOjEwQkY5MDAwMDhBNkQ5QTQxM0QzMUNCMDczMEI0MTJFRjQ2MkFBMTFDNgorOjEwQkZBMDAwNTUyNDI2QkU1RjQwODI5ODJGMjJENTk4Q0FCMDZGMTlCQgorOjEwQkZCMDAwRjE3MzA5QjlDMzgxRjExNzcwN0UwMTc0NkY5QzUzMTgzNgorOjEwQkZDMDAwRTdGQjM3N0I2QjFFRjAyNjM5QUZCOEM3MUJEQUMxQkU2MworOjEwQkZEMDAwNzcyMURGOUVDQjU5Rjg4OTFGOERFQTg0RkIzRDJCMzZGNAorOjEwQkZFMDAwQjFGQjI1MDY1RjQ3QkI4NkY2RkZDMzc0MjYwN0Y0NkREOQorOjEwQkZGMDAwMDJGMkFGMzVFRTk5RDcyMDFDNUI2REVGOUJDRjFCODgwQgorOjEwQzAwMDAwQzM1MTA0QkYzRjYzRjQzQjk3RkIxN0U2NzJGOTA3RUU5OQorOjEwQzAxMDAwNkQ3NkZGMkU4OEY3N0ZFNjgyOUZDMTU0NEVGQUNBRDkwQgorOjEwQzAyMDAwRkQ2QkEzMUZEMTNENzlGODQwRTc3QkE2RjYxODhGNUMyNgorOjEwQzAzMDAwOTNBMEZGNUY1MjZFMjdFNEU3MjVCNkZGMUI5RDUwNTY4NQorOjEwQzA0MDAwREMwRkY3QzM2QkI0NUM3NkNFQzRFNDM2NDUyNDBEREI1RAorOjEwQzA1MDAwQjVEODRGQTIxRDE2OTkxQTMyQzNFNTI1OEVGRjg2M0MyRQorOjEwQzA2MDAwOTk5N0UwRDc0RjRDRTdDOTlDMkUxMkZBQTE5MkNGMEZCNworOjEwQzA3MDAwRjc2NkYwMEQxNDEzNUQxQkVGRTgxQUJGRDM3NTQ3Mjg2MAorOjEwQzA4MDAwQUMwQzYxQ0QwMkIwOEYyQTlGNzc4NEVDQUMxQTQyRDNGRQorOjEwQzA5MDAwNzM5MDM3RjlGMzdGRTcwQkJGRUQzNUQxODkxQUFBMTNGNworOjEwQzBBMDAwQ0RFRjM0Q0RFNzc0Mzg1NTZBQUQwNEZFNzYzNjRDODI1OAorOjEwQzBCMDAwNjAzRkRDNDFFQTM2ODMzRTQ2NUU5MTkwQkZDMTNENkNGNQorOjEwQzBDMDAwRjhGREEwNjE3MEEwOTE4RTc5NURBMUU5MDcwREVDNUU4RAorOjEwQzBEMDAwQ0UxOTc4NDc2OTA0QkM3RkNEREU1MTdBMEZERTREQTJDMAorOjEwQzBFMDAwRTlFOEI2QkI2NzAyMUVCQzBCRUYyN0MxRkQ1QjRFRkY0NAorOjEwQzBGMDAwQzZCOEEzM0JERDczNDBFRThGRUVCQ0JBMTZFQThERUVGOAorOjEwQzEwMDAwQjBFM0VGNDU5NTFDNUM1RjBEN0UyMTc4Q0ZDNTQ1QzczOAorOjEwQzExMDAwQzlBMUUzMzlEMjgxOEYxMDk0QjdFRkI1QkFBMjZCRTgwOQorOjEwQzEyMDAwM0NERjZCOTM5MDJGN0Y1MjJBRTJCQjIzRjA2Q0E2QzRCNgorOjEwQzEzMDAwRTc5Nzk2MEVGREZDRkJBREEwODdCQ0NCRjk4OEYxN0U5RQorOjEwQzE0MDAwRTQ3Qjk1MUFEQUM3QkYzQ0IwNEU4MDdCMDlFRkNERDFCNgorOjEwQzE1MDAwNzBEREVGMERFOUNDNEQwN0I5RTQ2M0YxRTU0NUZCRUQ4QQorOjEwQzE2MDAwNUQwNTc0MUUwQjFGRkI0MzQxMERGMEJGODJDOEMyNjQwNgorOjEwQzE3MDAwRTdDQ0I5M0UyNjRGREU3QjhBNjAzQ0RDN0I0RUZFRkI4MworOjEwQzE4MDAwNDg4RTRFOUZEOUNGMUFGMDA5MTZCRUY1OUU5N0ZGQ0U2NgorOjEwQzE5MDAwNTJDRTI1RUFGMUY4NzJFMkU5RjQzMUJBRUZGNEMxNzk0RQorOjEwQzFBMDAwRDRGREVFMUZFMUZEQjUzMzRGQjE3MzhBNUYzRTUwOUI2NgorOjEwQzFCMDAwMEJGRUE4MjI5RkM2Q0VCRDBGM0M4OTcxRTNCMDBFQjAyNgorOjEwQzFDMDAwQTNFOUZDMzQ5OERGRkRFRUI3REUwNUZGMDM2RDg3RjdDQQorOjEwQzFEMDAwMzM4Qzc2NjcwRUQ0QjJGQTZEQjRCRTBGRTE0RTdDNjUzNworOjEwQzFFMDAwODAwRjBDRUU2NDNGRTMxMzg2RkVCODI4OUE4NUJGREYwQworOjEwQzFGMDAwMTAyRjE3QjExQ0E2RThBNEYwMUZCREZGMDYzQ0Q3QUE1QworOjEwQzIwMDAwRjBBNTMzN0M1NjNCNDdDREMyRjk0NzcyNjExRDA3QUU5RQorOjEwQzIxMDAwMEVFNzgyMUZFRjhDRjE3QjUyNzIyNDE3RTA3MEIzMzc2OAorOjEwQzIyMDAwNUNFMTMzQURGRkZDQzk2NzkwQkY5Nzg4NzU2RkRGMEI4QQorOjEwQzIzMDAwNzhGOTA0RkIzRDkzQkJERkQ4MkE5QUY5Qzc1NDFGRDM4MgorOjEwQzI0MDAwN0JFRTc3MkZGNUMxNzlENDk5QkU3Nzc1MjIyQ0RFRTc4NgorOjEwQzI1MDAwMzA3QkQ3NzUxMUE3QkQzM0VERDQ3RUEyRjAzOEJGRkY3OAorOjEwQzI2MDAwN0I1ODdFQTZFRkREOUI0RThDMjczQkJGRkZCOTc0NDgwMQorOjEwQzI3MDAwNkI3ODNDM0Y4OURFODhGNDQ1RTFEMkUyNDgyMkFGRkE5MAorOjEwQzI4MDAwRUU0NTQ1RDk3REI3MEIwMjdGQ0ZGNDQxMDM2RTc1Q0FFOQorOjEwQzI5MDAwMkNDQjc5MTVBM0VGOUM5REY5Qzc1MDVGOEUyNkJGMjc0NQorOjEwQzJBMDAwOTcyOEVGMTNERkE3QkRENDNERTA1MzlDNEU0RkYzNzdBMworOjEwQzJCMDAwNERFRUYxODY2QjdDNDlFNDQ4Q0RDNjI1QjkwMEU3MUFGRQorOjEwQzJDMDAwQjg1Mzg3NzEwRTk1RDc4MkJEOERGNzRERDhGQkI0NURGRAorOjEwQzJEMDAwMDgyN0UzRkQ1OUZEQUE2QjIxQ0VGMThDOUZFNUJGQkI3QQorOjEwQzJFMDAwQjk3QTlEQ0VFMUM4RUE0RjYzRURGMzU5Rjk3RDUwNEUxRQorOjEwQzJGMDAwRUJGRkRFNUJCRDlDOEQ0RjA0RjZGQjQ4MzYzRkZDQ0U2QQorOjEwQzMwMDAwODVDMUZGNTJBRkRGRkEzQjE3MURDMDkzQzc2MzdGRjdBQworOjEwQzMxMDAwNjA3RjMyRUQ2RkY0M0ZERTlGQzE2RkZFRTE3RTFDRkY1OAorOjEwQzMyMDAwQjVGRDE4N0MxOEU4MTI0MkY2NDgzMDM4RUFCRjAyN0VBNAorOjEwQzMzMDAwN0Y2RjdCMzIzQkNGQzJDRjNGN0RBMEIwMTlDRTgxM0UxNQorOjEwQzM0MDAwMDlCMDc3QTJFQ0FEQUIwOUM4QTVEQkI3NkY0REZBM0JERQorOjEwQzM1MDAwNzk3RDc5MUU0RkEyMTQ1MjNBMzNEMUYzRjM5Q0FGM0U0QworOjEwQzM2MDAwRUY4QjlGMDdDMEY5Q0M3MDQyRjg3QjE3NTQ1NUM5QzJCOAorOjEwQzM3MDAwOTAxQkI0RkY0NkYwNzdFMzRCNDgwNEY1QUI1MUE0MTM5MAorOjEwQzM4MDAwRDM1MkQyOERFOTE4RDI4QjI5MUU5MzE2ODJBQjJGODhGNworOjEwQzM5MDAwRTk5RjJCN0IyQTYwRjE4QjFERTE4NzIwNTREN0VFMDhBMworOjEwQzNBMDAwMUYwNzdDRkE2MDU4RjgxMTc4MDc3ODhEN0JFOTI0OTg4QworOjEwQzNCMDAwRkZBRjdEQUFGMTdCQTIyNEUxRjdEOUUyQkYyQkEyODFENgorOjEwQzNDMDAwNUUzMzIzMzA5MDVFNDM1NEY5RkRCRUY4OEQwMjdDNDcwNgorOjEwQzNEMDAwRjg2NTFGQUUyRkQ1RUZDRDI1RkM4RTI1QkY0NzZDQzA2RAorOjEwQzNFMDAwNjEwOUU5QzQzODg4NUZFRTVDRjEwMkJDRUJCMzcwQkY1MQorOjEwQzNGMDAwMTdFNUMxRjA5RDRERjg3QjYyMEI0OTc3MTZEQzJGMURDOAorOjEwQzQwMDAwQ0VERjkzMjA2REVDMUQwRkUzOUQ4ODkxNkQ3NkNCM0JDNQorOjEwQzQxMDAwMTY0QjEyN0VDRjY4MTFGRkZEQjE0NTg5QkZFRkM1RUYwNgorOjEwQzQyMDAwNkY2RTg0MEY0OUUyMDgxMkVGN0ZGNkZBNTJCQ0U3NUFBQQorOjEwQzQzMDAwOUFGQzc3NjUxMkVGN0ZFRUVGMTQzMUJFNjcwNUM0MEJFRgorOjEwQzQ0MDAwMDk3MUJFMzc3MjRGOURERDhBNUY5REQ3MTQ5OURFODNENworOjEwQzQ1MDAwNkExNDgyQ0M5RUY2QkE0MjdCODVGRUUzOEM1MzE5N0UyOQorOjEwQzQ2MDAwMUQxMDg0QTQ3MTY0REY0QzMzRUM5QjI2NzIzREVEQTc1NAorOjEwQzQ3MDAwNzFCMUFDODJCREQ5MTg3NUUxMzk2OEEzQ0FFQ0MyQTEwQgorOjEwQzQ4MDAwREUyQTA3RDhFOUM0MkZBQTcwM0Y2NTlBMzQxOUUzQ0I5NgorOjEwQzQ5MDAwOTUyNUYyMzgzOEY3M0NCNjdCNjEzN0RDNUY2ODBDQzgwRAorOjEwQzRBMDAwRThBNzFERUE2N0U3QTA2NDg4ODhFRjAzMzRBOTRGRjg3RQorOjEwQzRCMDAwRTdDMjNFNzlEODM5RTMzMDk1RTBFRkExMUU2OTVGMjlFNAorOjEwQzRDMDAwNDJCRTkxOUEyRDgzNjExQzIxREM4REY3NkU4NkM4ODQ1MworOjEwQzREMDAwOUZCRkNFMTg5Qjg1RUY5OEYxMzhBNTU2QkM3RjNDNjU3MQorOjEwQzRFMDAwQzk2OTI3QzhGNTNDQkVFRjU1NjlGOUI4NEU5OUVGRTcyMQorOjEwQzRGMDAwQUVGQTUzN0VDMEQzRTdEQjlCNUY5RTQ2RkJCMzQ1NjUzOAorOjEwQzUwMDAwOEM2QjJERjlCQ0YxRjU2OTc0QkNERTc2ODU5OERGRTNBMAorOjEwQzUxMDAwQ0M1RDI1NUJFRUNGRTZEQzY1Q0QyQjA5Rjc4ODY1NjI0NworOjEwQzUyMDAwMkFBN0Y5NzIxODFGRTE0OEY1NDQ3MzVDNTU2Njg4MzlFQgorOjEwQzUzMDAwMEI1NTBGREUwRjBFQTUwOTRDMkZFNkY5MEFDODUzOTBENAorOjEwQzU0MDAwNzREODIyNTUyRTNBQ0Y4RTM3MDVGNDNCMUM2RDlGOUYzMQorOjEwQzU1MDAwODc3MUZBM0YwOUU3MDE3RTFCRjg5MEI4N0Y0QTlBNjYxNworOjEwQzU2MDAwQkNFRkUxRTRGNzgzOUQ3MDU4OTc4ODNGNEQwREE0MTgwOAorOjEwQzU3MDAwRkNEMThFRTgzMUQ3MTVCMDhGMjc2Q0Y4OUVENDVBQUUxNworOjEwQzU4MDAwN0ZDQjFFMTZGRjZFRTA0QjYyQkEzNjAxRUZENjdFN0U4MQorOjEwQzU5MDAwMjNFMjVEMkZDNUJCREQwM0UwOURBQzZBQTgyN0Q4NzJGRQorOjEwQzVBMDAwNDgxMEM4QzM5NkQ5OURBREQyNzY1NzNDQTMwNDNEMTQxQworOjEwQzVCMDAwNjREMzdFNUM5QTA2RkFDQzE1Q0ZERENDREVGNUEzRjAxMQorOjEwQzVDMDAwQzI3NzIxRUI5NTYyQjBGQkVERjU5OUM1NzIwNkQ0RjMwNQorOjEwQzVEMDAwMjAzRTdFRTg2MUU3M0Y3MkJEM0IwOEU1OERFRDE1MDEyOQorOjEwQzVFMDAwQ0Q4NEQ3Q0QwRDZBQjE1QzBDRUZFMzM4OEFFMTc3OTY0NAorOjEwQzVGMDAwOUE1M0ZDREVGMzMwQkY1ODBERkUyNTg1REJGRjc3QTY4RQorOjEwQzYwMDAwQjFGOURFOTlFNkM2NzQ0NTFBRjM1QjNDMjhFQkIzNjBEQQorOjEwQzYxMDAwRkUwRjUyRkM4MTc4ODEyMzc3MzFGQzVEMzFDNDgxRjdCNAorOjEwQzYyMDAwOUU1NzNDNUYzODc4QTAzOEEwN0QwRDgxNjI4MERCQ0VCQworOjEwQzYzMDAwQkI2QUQwRUY1MUI5RkM5ODEzREUwNTVCRTE3NUE4ODBBOQorOjEwQzY0MDAwOEY5MjZGRjhGRDkzMDFERjVGQjBFMUJEQUY0NjZGODU1QworOjEwQzY1MDAwMzZEN0Q0OUZFNDlCODA3RTI1NDlENEIzQzEyODZBRDlCQworOjEwQzY2MDAwRjJENkI1RjI0NEMwMTc3RDA3NDhBMjQ4REFGMTZCNjVFRgorOjEwQzY3MDAwQ0E1RjNBQkM3QUI2NDBDQkRCRDI1RTYwRTU4M0Y0MUQ3QworOjEwQzY4MDAwMDIyRDhGQTZGRDg2RTU4N0U5RDlGMDRCMjIxRDY5MkY4MworOjEwQzY5MDAwQjM3Q0IxQkUwM0YyOUQ2OUJGNjdFRDQxQjdBMDdBQ0MxMAorOjEwQzZBMDAwQTFCNEQ3QUYwNTNEQTdEMTE2OUMwREZFOUQxRkQxRjlCMgorOjEwQzZCMDAwOTdEMkY5NzdGMkY0QTcxQzRFNDZGOTEzRjA5REMyRkIwRQorOjEwQzZDMDAwMjA0RjEzQ0I5RkU2RUQwRUE1MjhGRjI5MkYzRjlDQTJGQworOjEwQzZEMDAwRkY5RkYzNzY1RDI5REExRkU1RUQ4RUE1Njg3RjlDQjc5NQorOjEwQzZFMDAwM0I5MUEyRkMwNTVFRkU2MjhBRkU3RkMzREI3NUE3NjhGNAorOjEwQzZGMDAwRkYzMjZGRjc0QThBRjZCRkU3RUQ1RTRCNTFGRTNBMkZFNQorOjEwQzcwMDAwN0YyM0ExRkZCNzc4RkQxRUZFM0RDN0RCRjIzQUJDMUJCRAorOjEwQzcxMDAwOTZEM0NFNUUwMjJERjFCNkEwRkVCRUIzQUUxQ0YxQkYyNQorOjEwQzcyMDAwNzEzQ0QzMzMwQzdDQ0Y4MTc4NEQ5QUJGNTI2NTdFQ0Q1RQorOjEwQzczMDAwMkI1NUM2RTc1RkUxNzg1REI5QkM2ODBCRTBERDhBN0YwOQorOjEwQzc0MDAwOTM1MDlFNTIzOTgyQkZFN0FCMkY2NzcxMkYyQjlFNjdBNAorOjEwQzc1MDAwRjc0MTU2MkM5N0YxRjc4MDBDN0MzNERBMUJGM0RGQzVEOAorOjEwQzc2MDAwRTdENzY0QzAzMUFEODA5RkI3MDQ4QTY3OThFMzNENTUzMQorOjEwQzc3MDAwNkJERTQxRTkwOTQyNzY5QTMyOTk3QzI5NTk1RUU1MThDNworOjEwQzc4MDAwMDFGMjgzQ0ExN0UwOUI2QjNENEExN0RDQTM1RkFCQ0E3QgorOjEwQzc5MDAwNThERTk0NTlBNTQyQjlBRUNBMjg3RkQ2NjY1NjM5RTYwNgorOjEwQzdBMDAwQTIzRjI3MURGRDEzNzkzQzZFQUY0OTk1RjExRUJGRUNFQQorOjEwQzdCMDAwOUY4MkU1RDM3RTNDNDMwNTNFREE0NDdBRkQ5NUIwQkVDOAorOjEwQzdDMDAwNTUzMjlFRDcxRUE5QUJDMkVGNzlGRThGRkRDMDlGN0Y2OQorOjEwQzdEMDAwRTM2NzcwM0ZFNjNERUU4NDc3NUZFNUVGODgyODJGODZCQworOjEwQzdFMDAwMDNGQ0U4QjgwNUFCQzRBODQ2QUIxQzUzNTc4ODkwN0Y0MAorOjEwQzdGMDAwQjg4OUM5MkJGQUU3MUQ2QjdBNzdCMTYzNjVDNTBCMTA1MQorOjEwQzgwMDAwQkZEM0I4NDkwRUMyNzkwRUZDQzkyNjc5NTBDNDdGRjc1MAorOjEwQzgxMDAwNTQ1M0QzMkRGMkVBNDFFRUM3RDUwMzBFOENDMzJCOTJBRAorOjEwQzgyMDAwNDlDMEZDN0I5ODlBMkFGMTc3MjlEODNCNjY4NTExQUJFMQorOjEwQzgzMDAwN0NDQTZGQjFCRTYzRjM5RkQ3RUY3RjBCMDA4MDAwMDAwRgorOjEwQzg0MDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkREN0REMQorOjEwQzg1MDAwMEQ3ODU0QzVCOUYwOUNCMzY3N0ZCMzA5QkJDOTZFQjJGQworOjEwQzg2MDAwOUJERjREODAxMDI0QzAwNjQyMEM4OEJBMDkwMTIyQTIyOQorOjEwQzg3MDAwMkU4ODBBREFFMjg2REYwMDQ5MzY3MEE5NjJDNUIyMjE0NQorOjEwQzg4MDAwMTEwMzQ1MERCNzExODE4MjVEQTg1QUI0NjI0MzhCMTIyMgorOjEwQzg5MDAwMzFFODhBODhGODE1N0I0M0FGRjZBMkY2N0ExN0E0OEFBNgorOjEwQzhBMDAwODBCMDZBNDVGQjYzRjlFNjdENjc2NkIzRTcyNDUxNjhBQgorOjEwQzhCMDAwRkJEQzdFQ0Y4NzBGMUVFNjlDMzk3MzY2REVGRkJGOTlENworOjEwQzhDMDAwQ0QyM0NBODlBODg5RTA5RjhCRjk4NDI4OUE3NjRFQTM0NAorOjEwQzhEMDAwNjlCMDUyQzREQkY0QUZEMTY1NTNCNTJEQjY2NEM3ODdEOAorOjEwQzhFMDAwNDlGNDFGNUVFMkJEQTgyMzY0RDlFRTY1OTMyREI0MzlFNworOjEwQzhGMDAwRTkxN0M1MDNBMkM1ODRBQzMwQTU4QzIwMDM2ODVGRjg5NgorOjEwQzkwMDAwNzMyRDIxQ0RBQjNBQUUxOUE0Mjc2NEVCMkEzQTJFQkQ4NAorOjEwQzkxMDAwMzY3RjNEN0EyNjI5MjUyNDk2NkNGMUVEOTAwODU5QjM4RgorOjEwQzkyMDAwOEE4RTNGQjhBN0ZGNjgxQkJEMzk4NjkwNkQ0QTY4M0E2QQorOjEwQzkzMDAwNzFEMDZCNTgyMTRENzQ1RUFGMkM5NzA5QjQ5N0I5NERFNworOjEwQzk0MDAwNjEyM0VEQjJFQzhERkZCQzZFMDhCNDk3Q0E1RUUyRTlEQworOjEwQzk1MDAwNzk1RjdCN0Q3Mjk1NkIzMDdDRkYyRDNBMjcxODU3MUZDRQorOjEwQzk2MDAwOTAwNjlGMUM0REZGQUQwNDVDRkU2NDQyMDZCNjI1QUNFQworOjEwQzk3MDAwOUZGRUNENkZBNUVEODRGNUVBRjU3RTlCQ0Q0QTQ4REU5RQorOjEwQzk4MDAwQjdDMDRERUY3Q0NCMUUyODg2RjExNTFDNUYzQjhGNkYyNworOjEwQzk5MDAwODNFQjFBQTlCMTg4MENBNDU3M0E1NzgwNEZDODI5ODc0RQorOjEwQzlBMDAwOUZBMEVCQ0M1RTcxRUZCODkzNjk4NDY0MURCMkI0MDBCNAorOjEwQzlCMDAwNUM0OURCQTM4NEE0MTNBMjgzNkZEMzc1MkI5MkNGNDM2RQorOjEwQzlDMDAwMjgxRTVBRjI0QkJDMTJCRDFFN0VENkMyRTA5NDYzNDVBRgorOjEwQzlEMDAwMzgxOTI0NkZDNkY1RjQ2QTk0RkQzNjE4OUZGRUYxQzEyQworOjEwQzlFMDAwRjgwRkU0NThCNkFGQ0I4NzY2QzAwNDcwQzhERTQ5MDdCRAorOjEwQzlGMDAwQ0M4NEY2QzBCNTNFODVFMjg5ODI5QjhDQTM3RjQzQkY4MQorOjEwQ0EwMDAwNkJGNUQxNzVFRDk0RTJFRDZBNjg3Nzg0MERCQzNGODlEMgorOjEwQ0ExMDAwQzBGRjc2Q0IxMjdCNEVDNzU3NUM4NEVDOTIyNEY2M0M2OQorOjEwQ0EyMDAwRTRBREFFQ0FBNkZEMTVEQjMwQzU0QjQ4RDA1NkRBQUEzOAorOjEwQ0EzMDAwQ0Y4MUU3QjI3OERGNDdDQUU5RkFFMDdCQkMwRDcwRjkzNQorOjEwQ0E0MDAwRjk0MUYxQkNCMkI1NkExMDFEREY0MEM0RjgyMUU4QkY1RQorOjEwQ0E1MDAwNUI5Njc5RkJBQTU2MTg3RjU3QTU3ODdGRjA1QTVGMzYwOAorOjEwQ0E2MDAwQ0VFNzdBOUQ5RDkwRkJEQTI2QjY1QUREM0RGMzdENjhEMAorOjEwQ0E3MDAwQzNGNUFENEQ3NDdEOUY3OEEyMjk3NDE5QTQ3RUZCQzlCRQorOjEwQ0E4MDAwNzQ0Mjg3NUEzMzMzRTAwNzM4MDI2MUZCODcxMzcyNEFENgorOjEwQ0E5MDAwRjIyMEJEMDhGQ0U5Rjc1NDg0QjJFOEFERjM4N0ZFOUNCMAorOjEwQ0FBMDAwNTI0Q0FGNDE1REY0NTAxMjg1NUY3RDY3QzBBNDJGQTA0QQorOjEwQ0FCMDAwNzBENkZCNDI1OUY5M0RFRkQ1RUY5OTQ2MDI5NDZFODI0QworOjEwQ0FDMDAwNUQyNTc4RURFM0JEQzM4QUZDNzdCRDY3MzI1Q0MyRjdCNAorOjEwQ0FEMDAwM0U4OUZDQjZFMTE5RkFBODVFMTc2OEI1MEVDNEZFODQ1QgorOjEwQ0FFMDAwRTFCRkVGRjU4OUY3M0Y3OUU2QjdCN0MyRjdDRTc5QTI5NAorOjEwQ0FGMDAwRTk1MzgwMkUyMzE0MkU3REJDMjdGQTM3NzQ1NjEwQTBEQworOjEwQ0IwMDAwN0IyOUM5QjdERUU2MjQ2NDFFODUzOTcxMDI3RjM1N0EzOAorOjEwQ0IxMDAwQTE3Rjg3QTlDREU2QTVDRkNERkEzNkJGOTdGNkE3QTgwNgorOjEwQ0IyMDAwMENDQkU1M0RENzg3NkQ4MzcwM0NFRDdEMkRGRjc0OTg3MAorOjEwQ0IzMDAwNDhEQTU0NEFEN0ExM0FDNUZCMDQ4MTc2Mjg2OTA0NkRDNgorOjEwQ0I0MDAwQUZBRjU3NDYzN0QxMjlBRDJFRjlEREE4NjI2ODNGNjdGMAorOjEwQ0I1MDAwMjU0NkRBNkVBRTNCRTgyQTA2M0VGMjFBMDgxNTJGNjQyNworOjEwQ0I2MDAwRkREODBFMzdGMDcxNEJCRDYxRTZFMzQwQkY5MTY1QUU3NQorOjEwQ0I3MDAwRjlDNTNERTMzRjY0RDdFMzNDRDZCRTQ2Rjk2QzI0QkQxRQorOjEwQ0I4MDAwRUEzQkVDMTJCQzNGNTgyMUMwODc2NjNCQzUzMzZEOUIyNgorOjEwQ0I5MDAwRERBOTI0OTQwRkZEQUNFQjgxMUZEN0VBMDNENTk1RDAxNgorOjEwQ0JBMDAwQ0YyRDkzMjdFODc3Q0Q4MzY3NTQ1N0QyNzlCODlDQjJCRAorOjEwQ0JCMDAwQTRDMzc5NTQxRDVCNDA5RjM3REIwQzIwRDlDODdCRjY5QQorOjEwQ0JDMDAwMzlDRjAxOUM3RUFFNzgxQjgxMEY3RjZFQjVEQTQyRjRCRgorOjEwQ0JEMDAwMDE5NThEM0VFMDVCNjVCMDIzMEM2REEzOEUzNDc2RDA1RAorOjEwQ0JFMDAwRjk2NTk1MTA3Rjg3QjU2NzlFRUY3MUY5Rjg5RUNEODA0NgorOjEwQ0JGMDAwNzA1RTZGRUU5ODU2NDFDN0IxMkM5MzZEMjFGQUJEQjVBQQorOjEwQ0MwMDAwRjUxQkJCMjdEMUVGRkNCOEZFRjlBMzRERjRGRUJBNzRCNworOjEwQ0MxMDAwODVDMDNDQUMwRTI1NjI0OEExNzQ3QzAzOUQyMzlERjcyMgorOjEwQ0MyMDAwQUUyNkJGMERFNDY3Q0NBOTkwMURGNEI5NjU5MDgxNzg1QworOjEwQ0MzMDAwMTJFNEEwQjU5OEI2MTNFNDUzOUE0M0YxOTlFOUZCN0Y0NworOjEwQ0M0MDAwQjIwNzhFQzBGQzQ3QkZGOTk2MDlERTc3OEQ5MTY1NjAwQgorOjEwQ0M1MDAwOUIwRTg1RTEzOUE1NTQzRDhFNkRCQzdBOUNENDJBRjU5NgorOjEwQ0M2MDAwNzNDNzU0RjVGM0Y0MTlFQUU3QUVFRkE4REI5OUYzRDRGMAorOjEwQ0M3MDAwRUQ1QjgwREVDNjQwNDczQUU3MzJCQTBFRjY4ODU4QTIyRQorOjEwQ0M4MDAwOUZBRTIyMjkwODlGNzcwMEZFOTY0MkQ5MEJGMDMxRDczQworOjEwQ0M5MDAwM0Y3RTZBMDE3RDlFMDVGMjg0Q0U5RjhDMjBFMTI3Mjg4RAorOjEwQ0NBMDAwM0UwRkU0N0VERjEzQTU3MDM2QTYzNjdBRUNDNUJERTFGMworOjEwQ0NCMDAwOTE5NTYzQkExRUYwNjUxREE0RDgwOEVENkZGREZEQzcwMAorOjEwQ0NDMDAwNUZDM0Y4NTY5MkQwMkYxRkUwRTNGQkM0MzY4NkI1NURGNAorOjEwQ0NEMDAwNzQzRUM5RjAwRjBGQzBCQkYxN0ZFRTAzQkQ3NzU0RTc4MAorOjEwQ0NFMDAwMDU3ODY3RDUyQkY4RkQwNzY3NzhDMkJBN0NENjlERDA0QQorOjEwQ0NGMDAwRkUyOUJDN0Y4QTY5N0RCNzZFMDRCREZFN0VFRDUyNUQ2NAorOjEwQ0QwMDAwNEE2RkI4QTY5MzQ2MDlGODkyRDIwN0VBMEI1MjQzNTBFRAorOjEwQ0QxMDAwNUYzQzIwOTM1QUEwMUJDQUFFMDRDNkIzQzEwQjU0Q0VDRAorOjEwQ0QyMDAwRjg1MzBEMDgyN0M1Q0VFODg3RkU0Qjg2RTdFOTM2MzY2RgorOjEwQ0QzMDAwQTZDMTNEQ0YwQ0ZDN0NGRjIxNDZGRkY3MUJEODM4RjE4NAorOjEwQ0Q0MDAwRjEzQ0Y4NTE1NDQxMjAyNzZENzY1OTM1Q0U0NjFCRUYwMgorOjEwQ0Q1MDAwQzNEQjRFM0I2QkVGM0U5ODdBM0RGMEU1QzYxOUE5QTNDNQorOjEwQ0Q2MDAwODA0RThDMzIwOUMwNzgwM0IyNERCRUExNzQ3REU2Mzc4NworOjEwQ0Q3MDAwMEMyMTg5MEUzQTQwMjEwN0Y1QTlCNEJGODVEQ0U5QTc0QgorOjEwQ0Q4MDAwRjNEODdDRDgxMkQyRDFGQkU2RjlGRjZFQTM0MDI2MjU1QQorOjEwQ0Q5MDAwN0NERUJCNTc3QkZGMTNFNDQwQUM0NjQxMzg5QTlENkQ2NworOjEwQ0RBMDAwQjY1MUM1NkMwRDIxM0FCRjU0RjgwNzk1OEYxNTgzREIzQQorOjEwQ0RCMDAwNkQ4MDRGNzM0NTFCRUE2RjczNDk1QjFCQzA2OUYzNTQ2OQorOjEwQ0RDMDAwMTlFRDg5RDQ3OTMyRDJCMzM5QTdFM0U4MjA3QTVGM0ZFRAorOjEwQ0REMDAwNUZCNkMxNzhBOTU0QjExQkU4MjAzRkNBNkVGM0ZCNjE2RQorOjEwQ0RFMDAwNUMwQTczQjk4QzkxMEE4QzhCMkJBNERGNDlFMzcwNzVCNAorOjEwQ0RGMDAwMzhGNkRDMkREMTcxRDI2MEJDMTFBQzNGQzBDOUNFRTE5OAorOjEwQ0UwMDAwMzRENkVFNDEzRTc1RjA3MUQzMDZEMUZFMjNEODM4MkRDRAorOjEwQ0UxMDAwNjUzREUzMDgzQzZFQUUyNjYxOTg5RkY4QUUxODI3M0U0QworOjEwQ0UyMDAwM0VGMTQ5MjA1N0Y1QkZBNjcwQTM3ODkyNzI0RDM4QjlFQworOjEwQ0UzMDAwRkIxNzkzQjAzMTFGRTBFMzZGREM4RTdDNkQyNTNCODBFOAorOjEwQ0U0MDAwNUYxQ0Q5OTU0MDQ3OTk4N0I3NEM5NzQ3QzA3QjE2RkMyNAorOjEwQ0U1MDAwOEU3RTNFMDkwMzFENjcyQUM0NzQ0RDJBRDgyRjdFODQxNgorOjEwQ0U2MDAwQTM5NjVGREQwN0RCNkVBNjNDMTJDNzhCOTY3RkREMEFCQgorOjEwQ0U3MDAwNjlENUE1RjZFNjYzQjdDMzUxNTkzOEEyMEY3RUQ2RjAzRgorOjEwQ0U4MDAwOEJGQjcwRUM3QjQwRjQ1QUJFN0UyQ0U5NUMwOUMwODVCQworOjEwQ0U5MDAwMjRGNkQ3N0Q3QjVCQTdFQjM4M0EwOTkwOTU0MUY1MDRFMgorOjEwQ0VBMDAwMDU3REFFRTY3Qjg0RkNDRDA4NkQ4OUM4OUU4QjAzNDE3MQorOjEwQ0VCMDAwRUVEQjM5MUQ1MzdENDU5OTc1RjcyOERCMDQyQkYwRTkyRQorOjEwQ0VDMDAwNTI4MkY0NTVCOTc3RkRFREJGQTZFMzVEMTg2Q0IwODFEMQorOjEwQ0VEMDAwNUVDOTM5RENENjBERkE5MTc0MDY4NjAwMUVCNjJBODEyOQorOjEwQ0VFMDAwOUYyNEQxRTc1QjhGNjUxMDkwREI2QkNENjQyNkQwQjdCNAorOjEwQ0VGMDAwQzJFOTVDQUI1RjFFMDJCRTcxMjI2Qjg0NjVEN0RGN0YyNworOjEwQ0YwMDAwMTVGNjYwQzdBMEY0NjEzNjFCOENGQkZBNjE5M0YzN0ZDMgorOjEwQ0YxMDAwRDFDRTBBMEQ0MzNCMkJGQjYwNzc5MzE1QkU2RjlCREM5NAorOjEwQ0YyMDAwNkFBMkYwMzVCRkM5RkEzRjQ4REJBMTQxMDBCRkJBM0M1NQorOjEwQ0YzMDAwRTBDMzAzMzkwQjEwNEVDQUJCNDYwMjc0M0E1Q0U3MEJFMAorOjEwQ0Y0MDAwNDM5QkJDNjcyNjIwN0Y3NzNFRjc5RDVBMEZDODlGRjQwRQorOjEwQ0Y1MDAwMjkxRTkwNDMzRjAxN0VBN0VCRDlDNkY5NUVCQjdFQzU3MworOjEwQ0Y2MDAwRTAwQjgwM0RBMUJERkY2ODVDMkVGOTRGRDU1MDNDMEUxMworOjEwQ0Y3MDAwRkZBOTgxQUNBMzBGOEJFNDM5QURGOUMwMTc2QkE5RkNGNQorOjEwQ0Y4MDAwQTU0RkU3RTgzQzBEM0Y5NDdBRjBEMzY5QUVEODY1ODdBQQorOjEwQ0Y5MDAwRUZBRDMyOTE4MDkxQUVFQjJCODkwNDI4NzNFNjM4N0U5OQorOjEwQ0ZBMDAwNUIwMUYyMjc5NzQ0MjREMEIzQjk4REQ0RTAwNUJBNUE3NworOjEwQ0ZCMDAwNkUyMTgxMDQ3QUNGRkU0QUMxRkU5RDY2REYyRTNCOTcyQgorOjEwQ0ZDMDAwRkYyNjJBMDdGNEVDOUZFNEU3QTk3RTUyRTM2MDMyMEFDOQorOjEwQ0ZEMDAwRUMxN0ZEMzM5NkUzMjAzNzg4QTNDQTE3RjczNzBBODA4QQorOjEwQ0ZFMDAwN0VBOURFQTdERkRCQzdEN0FEQTc2QTQyM0Y4QUZFQjVDMQorOjEwQ0ZGMDAwQ0ExMUUzODhERUZENUZFNkZEMTQ5MzM1MDJGMjUyQjFGQgorOjEwRDAwMDAwMUUzOTg2RjJDNUE2OUM0REVDNjcwQTMzN0Q0M0VBNDg3QgorOjEwRDAxMDAwNzhCMEM0RTA4MkVEN0ZCMzYxM0I4QkNBNUZFMzI4QjQ5NAorOjEwRDAyMDAwRkI0MzQ2OTg2NzBBRjMzRjg4Q0ZFNzcxQTQwM0JGMTAxQworOjEwRDAzMDAwMDQ3MkI2ODlCNDlBNjgzRkE0NzZDQTZGNkVEMjZENDYwMAorOjEwRDA0MDAwQkJGOTIwRjEwMDNGNTA4OEQ5QzEzRjg0NUIwMEQ3QURDOAorOjEwRDA1MDAwODQ1NDI3RjI4MUI4OEVCNDMxM0U1MDU2RThEMDVGMUExRQorOjEwRDA2MDAwRjZBQTE5RTdBMzZGMjQ2MTMzRDg0MzMwMzcwQTZGNjVGNgorOjEwRDA3MDAwMzkwOTJCRTA2RkFEMzA2MEJGOTEzNjBGQkU2NzIwOEQ1MAorOjEwRDA4MDAwNjhDRkVFRkFGQUZENEM5MEQzOTY0M0Q0MUUxQjA5Nzg3NAorOjEwRDA5MDAwOTY1MTRFNTkyQzZBRkUyM0E0MDlFMUY0MDlFN0JGNkRBRAorOjEwRDBBMDAwQUI2Qzg4RTdCODdGMTY3ODhCRTMzOURBMDRGQTIyNzcxRAorOjEwRDBCMDAwNzlBQTBBQkZBMjVGRjY1NzU5MjQzMDNBNzFEQzMwOEU0NAorOjEwRDBDMDAwOUIzREU4QTA0NDhBRTE3OTJFM0VERkI2Q0FGMzJERTMwQQorOjEwRDBEMDAwMTdGNDMzQkUxQkU5QThGRkYxQjNGMUY5QjZDODVCRjY0QworOjEwRDBFMDAwMUIyOTI4QjZDNjBFREFGRDlFMUVGQjVBMEJFN0VDRTU5RgorOjEwRDBGMDAwNkFCOTNDQjI1M0REMTY3MDMxRUI3RDhFNjkxNEU2RTZGOQorOjEwRDEwMDAwRUZDOURFRUQ3NEJDMkI4RkE5RkI1NUU3QkY4REZFNkQxQgorOjEwRDExMDAwNEZGRjg4RTM2NkU4NEZGREVGRUQyMDFENEVBOUZCRkJCNgorOjEwRDEyMDAwMkI1RUIzMDMxRkY3RjQ2N0YzQkJGNjJCNzUzRjJEN0UyMQorOjEwRDEzMDAwQjRGM0E1RjM3MkRFOTIzMEFGMDkyNkEzRUFGOUNDOUFENAorOjEwRDE0MDAwNUVGMzcyREU5NjMwQUZDOTJFNzVGRjQwNTNERkYzQkEzRgorOjEwRDE1MDAwQkVDOEY4OERGMzEyRkQ2RTJBQkZCNDdFREE3NURDNUNCMgorOjEwRDE2MDAwNkRFQzA3RUVBQ0ZGNkQzMzJGNkREQzNCNkFCRkI5REZCMgorOjEwRDE3MDAwOUQyQkI0REYwOTIxQkQ1RjJGRjk3Q0E5RjQzQTA3NkUxRQorOjEwRDE4MDAwODFCRDY4QjVBMEREQUJBNTk3NUQ1QzdFNEUwNjdCOEU0QworOjEwRDE5MDAwRjY5Rjk1RUM5QjlDNEFEQjEzMDVERjNERjVCQkRCNDExRAorOjEwRDFBMDAwQkUxQzdFRjY4QTBDOTBFQjU5QTBFNzEwOUUyQ0FFQjAwOAorOjEwRDFCMDAwQkJDRTg1NzE4NUVGRjJGRTU0OUZCNDgwQkNEOEJEOTM4MQorOjEwRDFDMDAwQkU5N0MyRTY5NTY4M0ZBNUQ1MzFCRkMyNDY2MkM4Q0ZCQgorOjEwRDFEMDAwQzI1RTRBMjUzNjg5RjlFM0NDREVFOUVGM0JEQUYxRDdDNgorOjEwRDFFMDAwNzFGRjczRUU4QTA5RTQwM0NBODdDRjFCNkMxNTBBRjgzNgorOjEwRDFGMDAwNjc4RjQ5NjgwRkNDQURGMkU5OTIyOTdEOEM2Qjk1MzAzMQorOjEwRDIwMDAwNkUzNEY3OUU3RjFCMEQ3MjY1RUM0OTRGNjc5NERFOUY2RAorOjEwRDIxMDAwMUJCNjdCRTFCMzBERERDNDE3QTY3NDk1QTE1QjVBNzJGMgorOjEwRDIyMDAwMUZCRDNFNzI4MERBM0ZCQ0JEMTRFOENERUFGMzgwQkY3QgorOjEwRDIzMDAwNTEwMzMzQTJFMzlDRDUzNzk2RDg0MDZFN0VEN0VBMDNEQworOjEwRDI0MDAwQjk1OTMzQzNGNzBFQUVGN0FGRDQyQUExRkRFNkIzQTVBMworOjEwRDI1MDAwOTNCREVERDMwQzFFNkE2N0Q0N0NDNzUzMEU3NjRGNEQzOQorOjEwRDI2MDAwODdEOTg3NTcxMzUxMkM3NDFEMzVENDFFODM2Qjg2ODE0MworOjEwRDI3MDAwMjg2NkI4NUE4ODA5QUU2NUFCOTlGRDk1NTJFRTM3RDQ0OQorOjEwRDI4MDAwRDBFRkQ3NzRGREVDMEI3ODZGQTExMjc5ODVEOTkzNjEzQgorOjEwRDI5MDAwQzQ1QjRERDcxQjdGMDI3QjZEQkVDRjZGMDA3OTMxNkNCNQorOjEwRDJBMDAwQTc4MUQ5QTQ5QzFFODY3N0E4REIyMDBGMTJEQjI1MTE0RAorOjEwRDJCMDAwNzU3QkY0NjE3NUZCQzM1NDA2REY3RDUyNzgxOEUwNjcxNworOjEwRDJDMDAwMUY1NTcwRTAxNzg3NzYxOTUxNUYxQ0Q4NkY0NEZDMkNFRQorOjEwRDJEMDAwMzk2M0Q5MEVGMUE3MDk0QkFDMjhEN0NGM0M2REM2Nzg3RQorOjEwRDJFMDAwRDQzRUI5RTM1OTY4ODc5RTRENDJCRkZBOTU3N0Y3OTVDQQorOjEwRDJGMDAwNDlCNEJERjgxN0M5MzIzQzdGRjE2QjFEQzIxOTk2QTMyMgorOjEwRDMwMDAwQTdGNzk3M0MzQjc0RkIzQTdBN0ZDOUU4OEUzMjFCQkQ4NgorOjEwRDMxMDAwRkZGQzE1ODQ3NEMzNzMyNTNDMDJENkY3RkNERjc0MzgxOAorOjEwRDMyMDAwN0VFQzI5NjM3ODA3QTU4NzMzMkZGQ0VDRDk3QkU5RjdERQorOjEwRDMzMDAwQ0YzQzk1OTUyQTUxQkM1QzA1RkE4MEY2MUJGNzUzOTNCOAorOjEwRDM0MDAwMDVGQzhDNzE2NzlFMTkwOEYyNjJDOTRFQTM2QTVENEY5NQorOjEwRDM1MDAwQTczMjdCODMyMjMzMDVFOEFEQkY3OEUyODlCNTNGQzNBRQorOjEwRDM2MDAwRjc4QjRFMUQ0MzdBREJBNzBGQzkxNjU4RkY1QTQ2NUY0RAorOjEwRDM3MDAwREFGRUJCNTM5OUJFMTFGMzgwRjdGMjI5N0VDRTdGNkNBMworOjEwRDM4MDAwQjkxM0UyNjg0MzM2QTlFMTNCMzRBQzZFQkY5MENBRjRFRQorOjEwRDM5MDAwRkIxQzkyNzAzRjFGQzYyQjU4RTMwMjNCNzUzQjQxN0I0MQorOjEwRDNBMDAwQTZFOEQ0RUY2RkNGMDczQkRBQzhFQzA3RUQzQzBFQTQzQworOjEwRDNCMDAwMzJCRTdFRkE2OTNBMEU5MzBGM0E2NjNGRDMxNTUzN0UxQQorOjEwRDNDMDAwNUNDMkU5Rjg0NTg5RDlBRkY0Q0ZGMjJDNEFCNzRCNDA5QgorOjEwRDNEMDAwRjExN0Y0REM1RkEyOTk4NzE4RkYwNzdDOUQwRUVFNTdDQQorOjEwRDNFMDAwQzdERUQ0MjEzRTRFQUZBQTFEN0Q3MjcwRUZGOTdDQjgyNgorOjEwRDNGMDAwQUE3MTY4OTVCRUE3QkQ2MEQzRDI0MzZFRkE1RURENkU5QQorOjEwRDQwMDAwMjdGQTg5RTI3RURENTNBRkE2REY0MUVGOUZEREE5NzhFMQorOjEwRDQxMDAwQzE3NEFEOUJGNUU0NDNFM0EwREY1M0JBMEU5ODJGM0NGMworOjEwRDQyMDAwRjdEMUY1OUVFRDc4MkQwNUZBMkREODZBMUZBNTRCQzBEMgorOjEwRDQzMDAwQzNDMjREREYxQjVBOTUyMDBGMkY5NzFGMDRGRkQ2NzFEMworOjEwRDQ0MDAwRkY3NjZGNzlGN0E0MkNBMEVGNEQ5MjE3QkEyREU5QjhBQgorOjEwRDQ1MDAwRTVFNjFCQzA1NkQ5QUFGMzBFQTZDRkNCMTRFMkQ3OERCMgorOjEwRDQ2MDAwNDJENzdCMDY1Q0VCNzYzRjc3Mjg5MzNFMEZFRTFGNTM0NworOjEwRDQ3MDAwMDZFQjVBMjdGQkFGMUYwRUY0RkY5ODFFRTM1ODVBQjg2RAorOjEwRDQ4MDAwRkM4NUUzOUJCRTFGOTFFOUZCRUI2RUI1RDY4NkFEMzhGQworOjEwRDQ5MDAwRUU0MTY4MUYyOERBQTE4MzM4N0JDQTI5MkE5RkQ4RkQ2QworOjEwRDRBMDAwNjMzMkU1Qzk1MzVERjc4RjgwNzhFMjNFQkRCNTE1RTg3QworOjEwRDRCMDAwN0M1RjMyQzM0MzY4OTcwRUU1M0M4OUIwNzU4Q0UzNzE5RAorOjEwRDRDMDAwRTMyNUZGREQ2RTUwRThGNUQ0QTlENTI5MTU4QzhGNTBFMgorOjEwRDREMDAwQkU4MDUwNzZEMEY1RDVGRTc0MzhGMkREQzI0RDZBM0U3RQorOjEwRDRFMDAwMTFGREM0N0MxNzg1RDVDRkI1RjQ5MTk1MjZFMjBEQTQyNgorOjEwRDRGMDAwMjg5MUNFQjRGREQyQTY4NjBDQzA1Nzc1MkJBODNDNEUwMQorOjEwRDUwMDAwQjA3RkVBNEVCNjE5QzA2RUQyN0UwNzJDNDAyMkYwQUEzOAorOjEwRDUxMDAwNDNGQTI0MUU1Q0FGOTlBRDk3OUFBQzI2QkFERUQzRjBERAorOjEwRDUyMDAwMkYxNkY3OTZDMDJGNUYyQ0UxMTJDOTkyMkI0ODk1ODdEMgorOjEwRDUzMDAwQzI3M0M5NzQ1MjBERDc3RDUyRTQyMTFEOTc2NzE4N0ZCRAorOjEwRDU0MDAwREY5NTg0RjJFQ0FDMkRGQUU0OEY4MUZFOUVDOUYxODY2MgorOjEwRDU1MDAwRThBMzRDMUU5NzNCRUI4OUE0QTREMkVCNzlFMDBCQTA4NworOjEwRDU2MDAwM0YxQjZCMkZFRUEyRjI5Q0YyRjc5OTRGMEMyOEQ3OUIzMgorOjEwRDU3MDAwM0E1RTREMDE3QzlEN0RENjJDQ0IxNDJGNjc3NkE3NTU0NgorOjEwRDU4MDAwNDIzQ0U3NkNDN0FGNTM2MDVEQTczQkQyMkEyMTJFRDc0MAorOjEwRDU5MDAwOUZCQ0QxQ0EyOUExQ0Y4RkMzM0ZDNzUyNjU5OEU2QkJCNAorOjEwRDVBMDAwMkEwREU0NTY0QjFBMThFMzI0MjNBREIxQTRCMTBGRkVBMworOjEwRDVCMDAwMTdFRjM5MEM4RDI1MUU5MDFCREZCNTdBNzczMDM4MTFBNworOjEwRDVDMDAwMUY2RDdGNzYzODZEMDdFMDVCQzhBOTFBODk4RDJGREU0NQorOjEwRDVEMDAwQkYzMThFQzc2Rjk2OEZENUVCODY2MjFFRTgzM0UyMTk5NgorOjEwRDVFMDAwMDBGMjdBMUEyODdBRkFERUUxNTcwQTA3ODBCRDIwRUVBNworOjEwRDVGMDAwMzczQUZEMzNEMkU4N0Q1NzY1Qjc0RjA3NzFDNDI5QzQ2OAorOjEwRDYwMDAwREI0Q0JCN0VBMEYzREU2NUEzRjg5QTQ3QThGRTgyNkJENQorOjEwRDYxMDAwNjlDMDgwNzE5NzE2MjdBRTZGQUU0MjIyMEFBNUY3Qjk4RQorOjEwRDYyMDAwQTA1RjQ3NjAxQkYxMzU3N0FCMTQ2RUE2RUI5OUI3NUUzMAorOjEwRDYzMDAwMERBRjA1RURDNjFFM0FBMTdGMTcxMTJBNjA4MTExQjcwMworOjEwRDY0MDAwMjZGNEEzRTMyRjAyM0Q0QUYxQjBEODQ0MjI0OTc0REMwQQorOjEwRDY1MDAwQzU4RkFCREY1QjQyMjIzODlGQkE2NzJFMUFGQkMyQzc2OQorOjEwRDY2MDAwMTcxQzFGOEQ0RTVGN0Q5QTRBMEVFQTUxMEUyRTIxRkUyOQorOjEwRDY3MDAwNkJFMEJCNEI4NEJFN0U4QkUxMkI3OENGM0Q0M0U3NTEwMworOjEwRDY4MDAwRkJFM0ZDOEE3Qjg3Q0U0QjgzNzgyMkYxODExRDQxREE1NAorOjEwRDY5MDAwOTM5MThFOTc1NDkxNDgwRTlERDc5MjJFMjkzMjNDQTU5NgorOjEwRDZBMDAwNjc1Q0YyNEI4OUY5Njc0NEMxRjU3RkYxMTZDM0RGRUQ4MgorOjEwRDZCMDAwRENFRTk5NEY2RjgzMUQ3MTE1RjhFRjgwRUZDRDEyQ0UyMAorOjEwRDZDMDAwNjNEQzMzNTIyODk5RkE0OUYzNERENEM1MDNGOUM0RDcyMgorOjEwRDZEMDAwMEJGRDA3RDBGNjQyMTI0MkY4M0M5Qzk2OEY3ODVCNDREMworOjEwRDZFMDAwQkEwRDhDN0ZDMkNERTlGNEJCMERBN0E4NEMyMjk3NDI5RQorOjEwRDZGMDAwMDc2MzExREY5RjEzMkZFMkZCREZFMzc0NTA4NkY0MjFGMQorOjEwRDcwMDAwRUU1M0ZCODY5ODUzN0JCRjBGNzhGMzI1QzBCOTc2QUJGOQorOjEwRDcxMDAwQkE0RDFFNEY2ODE3MDA1RTY4M0IwMTVGMEQ3QjJFMUFFNQorOjEwRDcyMDAwN0Q3REUwRTk5MUI4N0UwQjBGOUQzNjNDOTEzRjk4RkRFMQorOjEwRDczMDAwRkMzRUM3RTMyM0I3MkM3MDgzM0M3QTE4RUNDOTRDM0VGRgorOjEwRDc0MDAwNDAzOUM4NkYyMkUyMjMxMTEzMURERjMyOUFBOEUyMjU2NworOjEwRDc1MDAwRDQ0RUMzRjYyRkQyRkVFQkJBNEREOTg0NkNENDA3MzAyOQorOjEwRDc2MDAwRUYzMDU3RTczRjA0MjlCMjgxRTk4MTVGMDFERENGOTVCMgorOjEwRDc3MDAwN0RCOTBBQzJENTU3ODg3RUYzMEE0NjBGOEY4RTZBMUM4MAorOjEwRDc4MDAwREFEODg3QkYyQ0U2QkY1MUVBODhDODIwOUY1RTYwRjZEMgorOjEwRDc5MDAwNDY3MjY5NEMxRjQ4RTBGNzM3RDM5ODFEMzNFMDQwRjREOAorOjEwRDdBMDAwNTAxNkQwREY3MzEyQzZGNzM3NEJBNDQ1QTI3MDc2NTFERQorOjEwRDdCMDAwM0M4MzVFREEyQzFEM0YwNDdBNkNGMzc1MUVEMjRDOUZCRAorOjEwRDdDMDAwOTdFRTk5QjZGNDM1RjRCOTJENUVDODk3RDRFRkE5RDA4OQorOjEwRDdEMDAwRDU1QjcxRkRDQ0VFNEQ2QURDMkVEM0U3MTk3NzE2OEQ0MworOjEwRDdFMDAwMDIzRUEzRUJCRTczM0FCREZGREIzNDBGQzJDRDZENjVDNQorOjEwRDdGMDAwRjRFMzVBMURDQTVGMDZGMUREMDNGRUE1QUYwMUREMEQ5RQorOjEwRDgwMDAwQjc2MDFDMkQ4M0MyMkEzOTE1QUZBRDYwQ0ZCQTQ4OTNEQgorOjEwRDgxMDAwMDRGREQ2MzgyNUM0Qzc5QTFBMzJGMzk3QzU0OENEQ0EzNQorOjEwRDgyMDAwODA1NDc2M0Q0NkFGOTI0MjVBMjAyRTlDQTE1MEZCOThFMAorOjEwRDgzMDAwREQ2RjgxRUYzQzkyQzJFNkU1OTQ3NTc3NEUwM0ZCN0M4OQorOjEwRDg0MDAwMTQ2QkE3QUU5NDdDM0I1MDhGNkQ0MDM4NjQxODQ5MzVGQgorOjEwRDg1MDAwQUMxQkVFODMzRDRGQTdFMURCOERDRkMzMzhFRjhDMDlDNgorOjEwRDg2MDAwOEQyNTMwOEY4QzgxRUNFQTMwNDRCMjYxOUMyMzgyNEU0RQorOjEwRDg3MDAwQkFEQzMyRTg4REU1NUNGRjJGREY1RDkxOTE0QURGM0YzNgorOjEwRDg4MDAwNzJENkE0ODAzQzNGRTIxMkY2NjhDNDBBRjYyODE5NTQwNgorOjEwRDg5MDAwQzRGQTczM0RCQkJDNjQ0MjA2MzBCNTIzNTdEREVGQkMxMAorOjEwRDhBMDAwREUzNzYwMzRFOEFCQTMzQUNDMUJGREQxRUExQjYwQTc5RQorOjEwRDhCMDAwRkRBRTMyQjA3NTY4RjFBRjczMzBCQzA2QkY5MjQ4MzgyOAorOjEwRDhDMDAwMjFGRTEwOUM3OTAxRURGQ0UwNTc4QUVBRkVEOTU1MjYyRAorOjEwRDhEMDAwMTI0RTg4M0ZENEQ1MUU5ODA0RkRFQTQ5RjcxQUEwQzcxNgorOjEwRDhFMDAwRkE4RTI0MTI0RUUwOEZBQjJDN0Q3RjU3RjA0NUYwMkI0MworOjEwRDhGMDAwMUQwOThENDZCMkNGODYzOEU5MTE3RDZDQ0Q3Q0EwQzM2MQorOjEwRDkwMDAwRkQxMkM2QjM4MkQ0QUYwRjI1Q0VFQkFCMzQxMjRBRUI3NworOjEwRDkxMDAwNkI5RUU5RUFGQjc0M0RBQTc2RTc5N0Q4OEY5NDQ3NTM0QworOjEwRDkyMDAwRTAzQkU3NkNEMTE0M0I1RjFGRjQxM0ZBRjc3QzU4MEUxMQorOjEwRDkzMDAwRTk0NzYyOUU5MkU5NjE4ODMzNTk5OUZFOUEwNkY4NTU0MworOjEwRDk0MDAwNjIyOUQzOTM3QkM2MTVDRjYxQkNENDg0NzU5RTlCNjkzNQorOjEwRDk1MDAwMjAxMUM0NEIwQ0JGMEI3MDBCMEQyMTY0NEJEN0E3MDZENQorOjEwRDk2MDAwMEZEODIzNURBRjIwREMwNEJEMjRDMjJGOTQ5OEI3NkE4MgorOjEwRDk3MDAwRUU4RUM4NTQ1NjVDREQ5RUIzQUVEODRDNTE3NTgwQ0I0QworOjEwRDk4MDAwODU1MERFM0FERjc4RkE1QzI3QUJFNDQ0NTI2OTVDNkU3RQorOjEwRDk5MDAwQTA5ODdBMDRCMjY4MTg1N0Y1QUM4MzM4NkJCQ0NERkJGRAorOjEwRDlBMDAwQzdERjBGRTU0RkE5QTJFMzk1MTZCM0Y3MjdCNzE3RkMxQQorOjEwRDlCMDAwOUZENUEwMDM0OTFCRDNDRjRBMkNENzlGOUNEMDM2Njk1MworOjEwRDlDMDAwREE1NkRBMUU5RUQwQjY2OTlFM0IzNENGNUQ5QTc2MzYyMworOjEwRDlEMDAwRUI3RjM2Mzk5MkFCRjMxMjMyQkRCRDcwOEE0MkU1RDY4OQorOjEwRDlFMDAwNTk3NzY0MzZGNUE4Qzk3QURERDAyOTU1QjQ1RDVGQ0E4OAorOjEwRDlGMDAwRjQ3QTQzOTdFNDQ1MzVDNUUxRDdFMDY1NzZBQkQ1MUJBRQorOjEwREEwMDAwMzVDQzJEMDYzODc0MUYwMkI5NTJENzI5RDkyNENBMDczQworOjEwREExMDAwRDY4RUREMTE2Q0MzN0I5RTg0RjczQTI0N0NBRkFFRTNENworOjEwREEyMDAwMzhCRUQ3RUZGODQ1MzJGMkY5QkFBMjEzQUM1RkM3NDc1OAorOjEwREEzMDAwNjgzRkFDNjlBOUMxRkNCRUM4NUZFQjg4REY5NzI1RjVEQworOjEwREE0MDAwRTRBRjg1N0MzREU3RjZCRDJBMzNCQUI2MjVGQTczNDFDQgorOjEwREE1MDAwMTgzNzIxNkUyNEZBQkYzN0JDRUI2RDMwNEY5Mjk2N0Y5QQorOjEwREE2MDAwREEwNEY2RjQ3RkQ3N0YzNDA2RUNDQkY3QjgxRUQ5Mjg1QQorOjEwREE3MDAwODU4N0MyNzdCNzkwQzA1MEQwQTNERkFEMUZGQzhBNEMxQQorOjEwREE4MDAwRkJCREFGOEY2RTgzMUNERDg2RjY2QjEwN0VFRjI3NDdFNAorOjEwREE5MDAwNzMyNDJBNjM3RUU0Qjg4RUI1OUREMTZEMDBDRjhGMURBRgorOjEwREFBMDAwNTNBNjI4NzQ5Q0Y3NzNBMjM5MzI2RDNGREFCRTlDQjUzOQorOjEwREFCMDAwMDc0N0I3NDFGQjY1NDc4MEY1MUYxRUNERDFEOUMwNTUzQgorOjEwREFDMDAwQUI5OTUyNDU5RjNGNjFFQjlCOUY1QkI5MUMxMUYzMzNCMAorOjEwREFEMDAwMEZGNDM1M0JDMDdFQUM2M0ZBNjcxQkI1N0Y0RDU0NUVENworOjEwREFFMDAwQ0U1RTdDN0FENzEzMTQwRUIzQkY5Rjg0NzJFQzg5QjNEOQorOjEwREFGMDAwMzc0RjYxRkU0MUM4QUY5NDQxRkM5N0ZENDFGRDg4NzJFQworOjEwREIwMDAwNUU0MUZCQzIwRDNBMzFCNTA3MUZDOUI5REQxRUQ0MUZGNgorOjEwREIxMDAwNTczNEVFMDZCQjI1NjM3NjMxRUE4RkIxNjlCRUQzRjA4OAorOjEwREIyMDAwNUQ3MUZENDUyNkJCOUU3NkQ4OTg1Q0Q2Qzk5ODBGQ0YwRgorOjEwREIzMDAwQjgzNzE5RURCQTg3Q0Q2QzNEOTQ2RjEwQkY1NjhFOEZGNAorOjEwREI0MDAwNkQwRTY2OTc2RTczMzBGRjc2NDlEQUM0RDMwRTdBN0QxOAorOjEwREI1MDAwNTdGMjZEMzY1MUI4QkZBQjI3MjEzM0M4RDk0NTE2QjQzQgorOjEwREI2MDAwOTdFRUQ4NEVFNTA2OTVEQkVEN0NERUVEMUJEQzYxQzg1QgorOjEwREI3MDAwRTdERjIxMTEzRkM4MTUyMTNGREFFRDNFNzc2QTgyNUY2QQorOjEwREI4MDAwRDQ1RTQyREJENjFFM0ZCODdEOUFDRjZENzFDMDM1NUQ0NQorOjEwREI5MDAwODZCQzhGOTA0QkVERjlFQzNEQTE4RjMyOUFEOTc3MzI0QworOjEwREJBMDAwMUUxRUJBMDNENjkxQTRCMEY4RDVGQzk5ODUzQjlBRDAzNQorOjEwREJCMDAwMUU5ODhFRjMyNTNFOUYxQkUyMjAyNzE3MTVDODEwRDcwRAorOjEwREJDMDAwMTJGOEI5NjJBMDZGMkZDMEU1NzY5RTE3MTA3ODEyRjg5MAorOjEwREJEMDAwM0NDREQ3M0Q1NzQ3RUQwOUJBREVCRjM4MDMwODQ3NkE0OQorOjEwREJFMDAwNUY4Q0UwRjEzM0I0MkY0RTgzNkU0RjgwMkY1MUEyNjNEMAorOjEwREJGMDAwRTBGRUZGNDc3MEZBM0QzQ0ZGNDdFMTU0QkY4MkNBMEI4RAorOjEwREMwMDAwRjkxMkU0MDU4N0RGNDYyOUEyQ0Y2MEYyMDJGRDc5Qjg1OAorOjEwREMxMDAwMEY3QUE3MzMyRDEwODNGMUM1Rjc2N0RGNUI4RkY2QTQ2QQorOjEwREMyMDAwOTg1N0QyREQ3QkFCNkYyM0JERjk0QzZCRUZGRDE5RjAzQworOjEwREMzMDAwRTVFQ0IxNEJCRDIyMEVDQUJGRjNGRUJCMjZDQzdCQkNDQworOjEwREM0MDAwNkZFODQwQjlGOTNFRjVBMzlBNDBCRUYwQkM3REQ5RjcyNAorOjEwREM1MDAwOTcxQzAxN0Y1NDhDMUI3MEVBNzBCQ0I1OTJDRjBERUIwMgorOjEwREM2MDAwNUI0QkYxNkU4MkY5NEYzM0EwQkYyMUY0NkFCQjNEQkMyMAorOjEwREM3MDAwMTlFQTI2REE2RkM5QzZCQTg5RjM4NEQ1QTc4NDU2MjQ2RgorOjEwREM4MDAwNjFCRkFCRTQxMzA0RTJBQUIxQjEzNkNDOUI1MzNBQzFGNQorOjEwREM5MDAwRTdFREIzMEFCMTdFODVEMjQzQzgwQ0NGMjkzRDQxOUQ0MworOjEwRENBMDAwNUY3QjA5NUQxMDhDMzdFQjBBN0MwRUZFM0FGQUQ5QjMyNAorOjEwRENCMDAwNEMzODVFMUY3NEMyRTJENDQzNTg3RDQ2N0IzRUE3QzNGNgorOjEwRENDMDAwNDUwNTQ4ODdFOUNEMkMxRTRBMTRERjg4NjkwOTdBN0UwQworOjEwRENEMDAwQkM5M0UxMzlBOTM0RkFEQzdGMDFDREFGMzdBMzNEMEIwQQorOjEwRENFMDAwM0ExNjczNEE2RDE5MzgxRUM1RkY2MDI3OEI0QjIwOUQ2RAorOjEwRENGMDAwQ0Q3QjI4OTlEN0MzNzlDQjAwQUUwRjI0MzNCQURDNkEyOQorOjEwREQwMDAwNjZGOUFFQURENDdFNDZCOUM4RTk1N0Q0RTEwNUI4OURGMQorOjEwREQxMDAwMTdBRDk1NTNDMDVFMThFRDhDQzczQjdDMTA3RkMwNzg2MworOjEwREQyMDAwM0I3RDNFMjcyQTFEMDdCRjZGNEU0ODE3MzE0MjVDQjgyNgorOjEwREQzMDAwNzVBMjJGOUFFMEJGQzAxRkM4MTdERUM5RTUyQUQ5NDREMworOjEwREQ0MDAwRDBCRkJBMTNERTRCODFGMTJEMjk5MDFGQkQxM0RFMDcyMgorOjEwREQ1MDAwRkY3MUU1NDQ1NTFFNzAyMkM4RjAzMTNERjNEM0NBRkQ3MgorOjEwREQ2MDAwODk0RTFFREY2QzdCRDQ5N0Y4MUQzMUJFNzYzQ0VBQzcyNgorOjEwREQ3MDAwNEU3MjNBMTFDRTkxMDFFMDQ3MzRFOTEwOEZEQTc5NDZCQworOjEwREQ4MDAwMzdCMUI4Nzk3NDUzMUVEMjlEMThBRkJGNzlGRThGMkU2QworOjEwREQ5MDAwRjYzRDg5RUFDMTA1MTM5ODdGMkZGQzlFRjlEQ0ZGMjYyQQorOjEwRERBMDAwMkJENTdFMURDNDc5RTI2RDVERUZCNkQ2NEY4NEZDQkVFNworOjEwRERCMDAwQkEzRkIzNUI5MjhBNjMwNkNDRkI3ODI0RDVGQzA1QkNFMgorOjEwRERDMDAwRkE4MzQzOURDMEU3MjVDMjRERThCRDQ3Q0Q1NDlFNTIxRQorOjEwREREMDAwN0FEOTA0NzU5MDk0QkUzNkREOTM4NDdBQ0M2MTA4MEZBRAorOjEwRERFMDAwMDVCQURBMDJGNTM1QTg0Rjk5RkZGRUY5MTE3NUZDNDUyMQorOjEwRERGMDAwOEJCRjFGQzRFOUVBRjJGQ0VFMjZDMEI5QjNCN0RGMUQ0MgorOjEwREUwMDAwQjRDNDFFMDNGODA3MkQ4QzJGQ0ZFRDRGNDZCRTIyODNERQorOjEwREUxMDAwQTJCM0ExRUVFREZDM0UyMzAxN0U2ODkwQTI4NTIwMjdFRgorOjEwREUyMDAwQ0U0OUJFMUFFQ0Q3OTRFNDAxRkVGQzQwNjY3MTgxMjAxNQorOjEwREUzMDAwNjA4NEFFMzMxOEZBMEJENjVCMDUzQkQ1N0VGODM5RkExMQorOjEwREU0MDAwQjc5NkYyQ0YzOTM5NUEwNkUzMDhGOTAyRjIwNEVEQUM3RAorOjEwREU1MDAwNUE5Njg3NkE5MDQ5MDhGQ0I0QUJFNDM5OEJEMDlFOThGNworOjEwREU2MDAwOTU0OTc2RTBGREUzODVFMDk3MDlCRDQxRkIxRDk0NTI5RAorOjEwREU3MDAwMTkxOTAyRkZENTcxN0MzNEM4MjdCMDVGMURENDREMDEzQworOjEwREU4MDAwNUVDMDVGODM3ODFGM0M0Qzg4NTMzN0FDM0Y4Mzc1NUIyMworOjEwREU5MDAwMEQ3QkQ0NzQ1M0Q3NDM1N0QyNDUwOURFNEJBMDMzOTQzRQorOjEwREVBMDAwMEIyMTg0MjNEQUVEMjA0N0FBNTgxRTNEOTlCNzkzQUE4NworOjEwREVCMDAwQkJCMThFMkJDOEUzMkZDRTAzRDE0OTIwOUY5MjRCM0JBMQorOjEwREVDMDAwQzgxQzdBMEQ5RTYyNzZDQkI4QUVFREFGODI1RjZFQUZBNgorOjEwREVEMDAwRUVDRTAxNzYwQUYyNzhBN0EwMUIzMUNGQjE1RDFCNzQ5QworOjEwREVFMDAwRTAzNzBBN0IyN0MxNkYxRDNBNUQxNUI3NTg4REVGODE2QQorOjEwREVGMDAwMUYwQ0RGOEJDMjJEMzc5MDE1RDM5MzFCQjk5RTRDMDI5QworOjEwREYwMDAwODcxQUY0NjlEQjEwRDRBN0EwRUY0MENFMDkzRjFBRTRDQQorOjEwREYxMDAwMUVEMEQ1QzBGNENBMjNDMEY3MkZBNjU3QkVFRTc0QjJFOAorOjEwREYyMDAwRUZBMTdGMDBDRUQ3RDhGRUU5NEVDMDQ3RjQwMzdGRkFCOQorOjEwREYzMDAwOUJFMzkwNUM3RTEzMTY3RjVDRjY4NkYzMUJFOUZGRkQ4NgorOjEwREY0MDAwNEJBNkZGQTExOTQwRTdDQjI0NEYwNkQwRjlGMTM4RkRDRAorOjEwREY1MDAwMTc2MkJFNTJEQ0ZGNTAxN0MwMzhBMzg4NzcyRDgyRjhCNQorOjEwREY2MDAwMUVCREQ2NzEzOUI0ODBDN0M3MTY4OEI4RDgyNjc1NUU2RAorOjEwREY3MDAwMTVFMkQxODlFREM1MjI0RUI2RDNEODUzNkYwNEYyQTM3MgorOjEwREY4MDAwOEE0NDkyRTk3OEY1MTA2NzgzNkI4N0ZBQkQwNjEyNjNCRAorOjEwREY5MDAwN0NENDc5RDFBOENBREJCNjMzMzhERUM5RTlDOTVFMTVBRAorOjEwREZBMDAwRDY4MUZDREE2QzY2RjEzMjIxRDdDNkFEREM4RTc0MzJENAorOjEwREZCMDAwNjA5NDJGRkY3RUUwOUIzN0Y0MTg2RkY5MDNBNzAzMDFFRAorOjEwREZDMDAwOTc0NjY3RTU1MUMwQTc0NUM3RTM4MUY3MUI1MTlFOUY2MAorOjEwREZEMDAwQTQ3NkMyNkUxRUU3OTkwRUZFRjFBQUMwNTBBODk3MjczQworOjEwREZFMDAwOEEyRDM3RDE3RjE2RDc3NUZCQ0NCNTY4N0ZBN0NCMkE5MgorOjEwREZGMDAwN0E3RERFQzlFQTlCMzBGRTg1RkEyMjA5RkQwMTJBREUyMAorOjEwRTAwMDAwNDYwMEJEOTYxNTA4N0Q0RDQ2NDBEQ0VEQjg5RUM1Q0Q1OQorOjEwRTAxMDAwMUI2RUI1MDY2MEJDQThDQ0U0QTEzQjlERTkyOTc3M0EwQworOjEwRTAyMDAwQUI1NzE0RURCOEZGQzlFOTUxRTQ0MzIxMEU5NTk4OEYyMQorOjEwRTAzMDAwRjBDNEZCNkZFMDc1QzgwNEQ3QkI3MTExQUY3NzhGRjNFNQorOjEwRTA0MDAwODU4Q0YyMkRBOUQ4OEY3QUUxMkFCOTEyRTU1QkVDNjNCMQorOjEwRTA1MDAwQUIwN0UwNTI3REE2NkUxMUFDRTNCMzk5MTYwMjc5QzkwNQorOjEwRTA2MDAwNzkzQzFFRUU0REI3RTNCODIyOEU3REI5RjFGMEQxRTlDRgorOjEwRTA3MDAwNzE3QTU0QzVDM0Y3NzFCOUI4OEZCMEY5ODY1QThDMkMzMAorOjEwRTA4MDAwOEZDMUU3QkZFRkQ0MTU2MUNFMUYyMTkwOUJCMURENjYzNAorOjEwRTA5MDAwQTY4RkE5OUQwQ0YyN0FERjlFMjE2MTU4Q0Y3MTNEQjMwNgorOjEwRTBBMDAwNjc0MkZCOTNGOUZCODFDRDEwQTdEOUY3NEJBNzE3RUE3RAorOjEwRTBCMDAwQTA4MjhCNEY4RjAwRkI3NkRGQTlBNzdGRjUxQkI4QkYyRgorOjEwRTBDMDAwREZFODA1N0Y3NDFGQ0Y2M0Q0MTkyMjg1NjhDRkYzRkE4OAorOjEwRTBEMDAwQ0ZCQTk0NDgyMUM0QTU1RUU0RjhBQUIzRDAzNkJEN0Y3OAorOjEwRTBFMDAwODMyOTMwMzVEREQ5OTM2Rjg0RjdFMEZFODkzMEYzMUI0NworOjEwRTBGMDAwNEUxMDQ2MDdBMUY1MkMyRjRDRTFFQjg2NzlDNEQ2NjY2RAorOjEwRTEwMDAwNjBCRTEyRDYwNTc4Rjg2MEZGNzA5Q0Y3NDYzREVGRkZDMQorOjEwRTExMDAwMjBCMzJGNEZGMEY2ODkxNzRBQjAxRUYyQkNERjgwRjUwRQorOjEwRTEyMDAwQ0JDMTg3OTkzRDNCNTdGNjNDQjYwMjY0RUY0QjQ5MTg4QgorOjEwRTEzMDAwMDc5RERGN0UxNEYzNDdDMTg3MTY0RTg1RTdDMUM1MkJDNworOjEwRTE0MDAwNkYyNERGOTA1NzAxM0Q5NTE4QzczRjQ3NjJCOUU4QTc5NAorOjEwRTE1MDAwRDcxNjc0NDRFODc3Q0Y3NTBERjVCMkY0QTgwQjkzNzExOAorOjEwRTE2MDAwMERCQzRFRjYyNDg1MkZDQzNCQjY1RjhGRjBCRkQ0RjFBQgorOjEwRTE3MDAwMzFBMDU5QzZGNDI1N0MyNzk4OThCRjQyRkRBMkNFNjdFRQorOjEwRTE4MDAwN0Q1QkZCOUMzRTVBNzgwRkZERkVEQUQ0QzAwRkQyMTNBNAorOjEwRTE5MDAwRUNEOEUwNEI2RTk0QTMxRjNDRjg2NTJFREEzQjZEMkM1NworOjEwRTFBMDAwNkY3MjUyRUY5QjBEN0M2MkFGOEExOEU2MjRDOEQ3OEQ0MAorOjEwRTFCMDAwOUM4RkU3MUFCOTVENEJFNTYwMjJERjhCRTc2NTk1NkFCNgorOjEwRTFDMDAwM0UxM0Q3NDdEMjk5NUM0RUU2RjUxMkJEOUY4QjdBQkNDMQorOjEwRTFEMDAwOUI4REEwOEY1OUM4MEJDNkY1RTBGRDNDOUVDNzFDNzdGMAorOjEwRTFFMDAwMkFGNjBBRDQ5REQ1NzU5NDYwOUUzNDZGNjUwNEY5OTIyMQorOjEwRTFGMDAwQzIzQjAyRkVDOUM5Q0RDOTRDOUVEMDY1QzIzODBCQ0EwQworOjEwRTIwMDAwMDlEQUQ1MEI3NEFDRkU2MzgxOTFEQUU5Q0MyRUMwRkUzRAorOjEwRTIxMDAwMUY2RUNFNDAzODk0QUQ2NkY2NjlFQzM5MDlFNUEyQzhBOAorOjEwRTIyMDAwRTdENjEwRjZGRURFOTZFMzIxMURFRDVGQjM1MzJBQTE3QgorOjEwRTIzMDAwQTI5NUQ0QjQ1NDYwN0RDOEUyQURGOTg4RkY3MTVDRkU0QworOjEwRTI0MDAwQ0UzNUZBMEEzNzAzQkRFRDRENDY3QUEzREY0MzdGQTBGMgorOjEwRTI1MDAwMEU2QUUwNDZBMTVDMzI4MDdFQURERDI5NjE3RTQ0QUM3MQorOjEwRTI2MDAwNUY5QjNGMjU2MTc1REU2OTVDMDc5M0RGQTAzNzQ4QTI5RAorOjEwRTI3MDAwRERDOUY1MTBFODBCQTJCMTZGRDU3NDExQkEyNDdEQUFERgorOjEwRTI4MDAwRDUwNzg3RTM3MkYyRjJGNEU5QUY0MTdFOERFOUFENEYzNQorOjEwRTI5MDAwQTlCRjcwMjQ5REQxMDk5M0ZGQkI1OUJFQTk5RTM0QjI3QQorOjEwRTJBMDAwN0MxQkQ3NjdGMTc1NzE3REY4QTE4RUU5REYwNUM2MEQ3RQorOjEwRTJCMDAwNzgzRDlFOUU4RkYzNUE0Q0EyM0NFRjE0MzNDMEZDRkE3QgorOjEwRTJDMDAwQTNBRkUzRkREMDk3QTBBQjEzOUNDRUVBNEU5MUM4RDU4NworOjEwRTJEMDAwRjQ3Qjc1MkI0OUE0N0UwNEJCMjY4RjQwRkRDRUY0QkM5NQorOjEwRTJFMDAwODlFOTc5Qjg1QTJFNDFERjZCRjVCQzU2QUY2QkY1NzlFOQorOjEwRTJGMDAwODY4MUU5NkQ0MTRGODlGOTA3QjA5M0M2QUQwQ0VCNThBMworOjEwRTMwMDAwOUMzOURCODZGQkVCMzg3RTk3QTRGOTJFNjY4RUU5QjE0QgorOjEwRTMxMDAwMDM4M0M3NEMyNkNGNDg2OEZCNDk4MTE1RTI2NzE1RUI5QworOjEwRTMyMDAwQjIyMTJGNDBGNTAwRjA2RjEyODVEMzc2ODg4QjcxRkZGNAorOjEwRTMzMDAwRTNFRTZDQjY3RTE3QUY5M0QyMkI3RTUyNjIwNTNDNzUyRQorOjEwRTM0MDAwNjNCQzIwRTYyNEU4QkYwQkY4NkU0QkE2RUY4RDgyRjc4NgorOjEwRTM1MDAwMTg1RkM3REYzNzkxMTY0QkMyRkI5NUZCQ0NBODk3MkVGMQorOjEwRTM2MDAwQkM5MDhDNzUzRDU0Q0ZFNEQ5RTk3OEU5RUY1MUJGODE3OQorOjEwRTM3MDAwQjZDRkVENEI0NjNCRTExQ0Q3MUIwRTExOTcyMTZCMTAxRQorOjEwRTM4MDAwQkZDRTBDODZFNzEwQTlDQzgyRjgzNjkxQTY2NDgxQTg4RQorOjEwRTM5MDAwMTVGNjZDQkRCREJGN0MwNDdGOUVERjdEMkJBMzMzMjNCMAorOjEwRTNBMDAwRUFFQjBCRjZFODVERDBBNkYzQzEzQUVDRTQwQzM2RUZFRAorOjEwRTNCMDAwRTA5RTA5MjVGNzQyRkQ4NURGRUE2NTUwMEQ5NDgwRkQ1QQorOjEwRTNDMDAwNjFENDJEQkYxNUUyNUU5Mzc0MkI2M0Y3RDA3NUQ0RTc0QgorOjEwRTNEMDAwNThCMUJFQkIyQUVGRjdCRjlCNDVEQjFGRUZEMTEzMjMxQworOjEwRTNFMDAwRTBGRDg5OUIwNzQ0RTAzNUM1RTdFQThCNEYxNjg1RjVDQworOjEwRTNGMDAwQUFGRDgzNEI3NkFBREJGNTFERUE3NjkwMjRFQzJGQTRDOAorOjEwRTQwMDAwMjA1OEYxRkI5MjZCMEUyNkQwNDk1OTQ2QjJFM0MzNjEwNgorOjEwRTQxMDAwQzA5NkM0MEJGNUU5NDRGNzlEMDE4MTNFRTRBRUI4N0U5OQorOjEwRTQyMDAwQjlDQTdCQ0Q0MTNERDZGNzVEOURDMUY4RDkwMEY2RDE4MworOjEwRTQzMDAwMUNBMDg3M0VERUZCMjNFNzdCQTNCMUYxMTRFQzEzMzA3NQorOjEwRTQ0MDAwQkU2OEY0MzZEMUI3Q0MxOTgxNDlGMDdFODMxQzNCMDRGOQorOjEwRTQ1MDAwRjgzNEU2OUQxRDAxRkFCNDMyRUZBRjk4MjdCQzcwMUY2NworOjEwRTQ2MDAwRjEwMjdDMkU5ODJCRDA0RUJBQjBEOUVDMDE3RkIxM0Q5MQorOjEwRTQ3MDAwRDdDQUUyMzIyRjQ5NjE4OUY5MTU1M0M3NTBGOTVBOEIyRgorOjEwRTQ4MDAwNTNBMUVCREQ3NEREQzc2QzUzMEIzMUM5ODg1RkVBNTVDRQorOjEwRTQ5MDAwQjk0MDVFRjlEMENGRkI3MDlBQzVCNjlBQkU1N0JCODkxQQorOjEwRTRBMDAwRTlFRDNBRDI5RDAyNzJFMDg3ODAzRkEwNkJERDMzMDYzMgorOjEwRTRCMDAwMTNGRDY3N0U4QjZGNjgxMzlERUYxMkJGMDVGNzMzMjkzRAorOjEwRTRDMDAwNUYyQjdFQTBBRjA3NjBDODA0QkY2NDRFMDY5MzA3RjVCQworOjEwRTREMDAwQTZBOEExMDJCRUZGRDc3OUQ1Q0U4MjlFMzg5RTQxQ0Y5NQorOjEwRTRFMDAwRTI3ODRBNjc0OTI0OEJCRUJBNzBDNTVDRjRCRkUyRjk5MgorOjEwRTRGMDAwRkFDREFDOEU2Q0UxM0QzNTc4RkZENUNENDY1Q0RGODczQgorOjEwRTUwMDAwRkIyNUE0RjMwRkI3QjFGNTJGREM2NEY2NDBCREZCQjVENgorOjEwRTUxMDAwNzZFNkJGMkZBNEVGRjVCREZFQzkxRkMzQkEzRURBN0E3NworOjEwRTUyMDAwQjcxN0YyMTAxRjExRjY5RDkwOERDNURCM0VCMkIxQkE0MAorOjEwRTUzMDAwMDJFODBCRTM3Q0I0NjcyMERBNDNCNTlCMTY0REM1RkFCRAorOjEwRTU0MDAwQkU2RDNBMkZEODIzNjQ3RjMyQzZCMTE2NkVGQkRFNkZFNAorOjEwRTU1MDAwQzY0MjlDNkNGQUVEQTUwMDg3NkJFRENCRDMyMTJFNDQwRgorOjEwRTU2MDAwRkJGOUMzQ0NCRTY2NzVEM0E5RTU0RjAyMUY1RUZCRjU3MAorOjEwRTU3MDAwODRFRTZCQzFFRURBNDZGOTI0OUZFRDRCMDA3QkZGRTBBMQorOjEwRTU4MDAwQjZDOTY4REYyRTlDNjZCMUMzQkEzQzVCOUY5ODA0N0ExQgorOjEwRTU5MDAwRThBMzY5OTkzMkFFNjc5NzQ0NkMwMDA3RkI4QTc0QjhBOAorOjEwRTVBMDAwQkY1MDUyRkM3REQxNTM3RTg2MEVFMTVBOTE2N0Y1NDZFRAorOjEwRTVCMDAwRTBCREI3NzU0ODI3OTRBRjZFMDUzRDVDQkY0RDhGRjY0MworOjEwRTVDMDAwRjNDMUU5RUZGRTZFOTZBMzg3QUYxNkVBREE2RTFEOTdFOAorOjEwRTVEMDAwNjAzRjA1QjdERTIwRTg4NDQ0Q0FDMDJGNjMzMEQxRjIyMworOjEwRTVFMDAwOTczMTZGNjUyMUNDNDdDQjY3MEI1NzM3MTZCMkJDREMzMAorOjEwRTVGMDAwRTVGMTFCRDlDQUY4RURGMTBDODlDNTZGMkU5RERGN0VDMAorOjEwRTYwMDAwN0UzOUZDNDZCMjUzNTVGQUI3Qjc1QzBCNjEzRjkxRDdFMAorOjEwRTYxMDAwMzA3OTg5RUYwOTJCRTZBRjdEMTI5NUJCNkY2NTI4RjgzRAorOjEwRTYyMDAwRkNBRDBDQkU4RkVCNEZDQjc2QkU0OUUxMzMyQjIzQjA1NAorOjEwRTYzMDAwM0YwM0VDMjhFMjJCMDEzQUYyQzQ2Qzk1QjA0N0NCQ0FGOQorOjEwRTY0MDAwRUQ0MUIyOTVEOURGRTAyNzAwQkUzNzNBQzk5M0VCMTIwRQorOjEwRTY1MDAwRTIyMUREMTk2QzFGMjFFNUZGNDMzMENFQjk3N0ZFN0E0OAorOjEwRTY2MDAwMDhGMEQzOTA3Qjc2MDRDQkVCRkUxMUYzQTBENjJFOTY2OAorOjEwRTY3MDAwM0ZCNzdBNjM1ODU3QTA3N0Y4OTFGRTg0NUMwRjdBOTk3OAorOjEwRTY4MDAwREVEMUFFMkJDM0M1RkNDMkEwMjM4NkUzN0NFNjYyN0M1MAorOjEwRTY5MDAwMjhGMjBBNUI1NjU4MzAxRUJDQzUxMTM2QjM3ODQ3ODgzRAorOjEwRTZBMDAwODA1RTlBNUFBRTYzRjkzRjZFQUZEREMwRTNBQ0E2RDI4RQorOjEwRTZCMDAwNTcwOUU0RkRDODc4NTY2RkY3NjZFOUFCNEExQTZERkY1MworOjEwRTZDMDAwQTY3Q0EyMTdGNzM5OTZGRUI0QjUwMEQ2M0Q1RUNGOUY2MworOjEwRTZEMDAwMEYwQ0MxQkFGRkMzNTc4MUNGOTdCOTc0MUVFMEVCQTlFNQorOjEwRTZFMDAwQTVBQzZFOTRENEE2NjAxQ0U3Q0REMjBGMUNGMzEyRTY0NQorOjEwRTZGMDAwRUYyNzI2OEY5NUQyQzk3NEVBMkMyNUQ2MzlERTM4REU2RAorOjEwRTcwMDAwRUNCMTI2RDBENzY3NkQ1MjM1QjM5QjNEMDM2NjBDNjdERAorOjEwRTcxMDAwNzExQUQ0QzNBNTZBNzgyQzczMTlGMEJCMkZBNjU3N0M0NQorOjEwRTcyMDAwMEE3MEJFRjYxQTg2OEZEM0JCOEM2MTkwN0ZBN0Y5QkVBNAorOjEwRTczMDAwQTE1RTc0RTFFMkY0RjM5RDIyNTUxRDgyQzNEMDkxMEJEQQorOjEwRTc0MDAwRkFGMThDQTQ3RTZGNzFBQjBFRUIwMDE2QjU0QTI0NEMyNworOjEwRTc1MDAwQkY3N0ZBQTlCREI5MjBDNzNGN0U2MjZGRUU5Qzg0RjlFRQorOjEwRTc2MDAwNjhERjEzNTc4QkY4MUU4Rjc3NkFFM0Q3RkRDNUFENDU3OQorOjEwRTc3MDAwQkZGMzlCNDhDMDM0QjBBN0ZGRjlEQTNGNjNEQzdBNEVBMQorOjEwRTc4MDAwMTc4RjdCRkI3QzgzMUNFMDRGRjFGRURBRjE0NkJCMTk0RgorOjEwRTc5MDAwN0Q0ODlEMTJDNjRENDREQ0Y2QzRFMTlGNDI4NjI4OEUxQQorOjEwRTdBMDAwM0Y3MzU3QkU5QzU4MjcyQUFFRTMzOERFNkUwNkJDRDFCNQorOjEwRTdCMDAwQTU5ODVCNTlCQjNGN0NGNUM3OEZGRkMxRjU4RkMwREJDOAorOjEwRTdDMDAwODlENjgxMDMwMDhFODYwNkFCNDJEOEZFQkQyMkIwRjcwMworOjEwRTdEMDAwQjcxMThCMTdGOEM5OTBFOUIyODJGQzEyRTcxRjdDNjk2OAorOjEwRTdFMDAwNjY1Nzg3ODU1RUE5QkQ5NjkzNTk4NEVGREQyREZCQjFGMQorOjEwRTdGMDAwMUVGMTRCQjkwREY3NkZERUFENkJDNDNBRjczMjE3RkI2NAorOjEwRTgwMDAwNUVCNkNEQkY3QjAxRkEzOTFENThGNzRFNUFENUYwNEQ5MworOjEwRTgxMDAwMDcyODgwOUVBQTMxQTA5RTEyNzBCRTZBQ0U1REU4RUZFNgorOjEwRTgyMDAwRjY4MTlGNEQ0MDM3OTlFNUVDNUVEMDk1Q0ZFREU1MjgxOAorOjEwRTgzMDAwRTY0M0NDRTVDNDA2NzE4MUU2QjEyMTlDOEZDMDRGOTBDMAorOjEwRTg0MDAwNzUyNzUyOTc4NDc2MzJENEVGMjRBNTYyREUzN0M0QUZBMQorOjEwRTg1MDAwQzQ5QTRBRTI3OTkwMjRFRTFGMTM0RERFODM4QUFEMTBFQworOjEwRTg2MDAwRjQxM0YzMDQzMTA2NzU0MDBGREIzQkRBMEE1OURFMTg2NgorOjEwRTg3MDAwRUQ0RjE4MTdFRUNGMjk1NjMwNkYwMEZEMENBM0JFOUQ0QgorOjEwRTg4MDAwREVFMjc0QzlFQjNCQTc4QUZCQjU5NjNFRjMyQzUzNjFERAorOjEwRTg5MDAwOUYxNEVEOUY0M0Y1MjBEODdGQzRBQjU3RUQ5M0RBNEEyMAorOjEwRThBMDAwRUQ2NkYwRUI0NDFFNUIyNzc3OTRCOEQwMEZFOThFNDJGQgorOjEwRThCMDAwOUNDNTUwNjZGMjgwNUU0REQyNzUxNDAxREVCNDc5NkQ1MAorOjEwRThDMDAwREEyRjlGRDU1MzY0REI0MUFGODg3RDUwMEQyQjI2Rjg5RQorOjEwRThEMDAwNjE5RjQxRENDRUQ4Q0ZGQ0EzODY3QjJBRjBGRTg0MkUzQworOjEwRThFMDAwOTYyNzA4QjYxQTcxMUY2N0IwNTNDMkJDNUM4M0RGMTA0RAorOjEwRThGMDAwMzY2MTNDQzREMzA0RjgwQTUxM0IwQ0ZDQ0Y3NjNCQUJFOQorOjEwRTkwMDAwMDM2QkJGQ0VFNjBEOTFDNEI4N0FGNEIxN0IzMUFFNkUyNQorOjEwRTkxMDAwQzU3Q0U0REY5QkE3M0Q5RjRDMDEzMDMyMjEwRjM3QzBGRgorOjEwRTkyMDAwQzRFQjBENTlEQzNEOUREMzkzQzBCRkUwNjc5MUQ3NEQzQgorOjEwRTkzMDAwMkVGNkU3ODNDNUZERTVDNkQwQUYyRENFQ0JBODdGMjE0RgorOjEwRTk0MDAwQjczREY4OERGNTJGRTRBMzFCQTBGRUM1MDRENjNDN0Y5MAorOjEwRTk1MDAwMEVEM0EyN0EzM0JFQUZEMUVDQzFGQzVERkMzOTlDNDcyQgorOjEwRTk2MDAwNjFFQTk0RjhGQkVEMzc0QzFDODQ3NUJCQkM5RTY2RDZGRgorOjEwRTk3MDAwN0FBOEMzN0ZEODRDNTRERjRCOUM5RkEyMTk1RjRGQzcyNgorOjEwRTk4MDAwQjc3QTQ0RkY3QkFGOUZBODYwMUU5QkI3REZGRDIxRDQwMQorOjEwRTk5MDAwRkIzQ0FDNTc4Rjg3MjQyOEY2NjE5QTdBQkVCNzJFNkI2MgorOjEwRTlBMDAwQzg4M0VCQzdGN0U4NkZBQUNGRjdCQUM2RjRFOEYxMDc1OAorOjEwRTlCMDAwREU5RERBMzZEMjAzRkNGNTM5RDY0MTBCN0QxQzc0QjBFRQorOjEwRTlDMDAwN0ExOEFEREMzQUUwOTI4NEZEM0IwOTU0RUM5QTk5MzUxMworOjEwRTlEMDAwNzg3RTQzM0M4RkREMzVDRDA3RTc1ODg4M0M3NjcwQTVCRgorOjEwRTlFMDAwMUZFQkExNDFGRkJCNTBGRjlGRkRGMDE1ODBEMkY0RDM3OAorOjEwRTlGMDAwNjhGRjA3QkY1MjU4NUM4OURBMTExMkE1NDM1MzU3MDVDNworOjEwRUEwMDAwQzY0RkExM0MxN0Y0QTZDMEZGNjJBRTk3QzA1NjA3RkFFNgorOjEwRUExMDAwMEU2RUJERUQwOTFEN0Q5RUVCRjZGRDA3OEVDQkZENDAxNAorOjEwRUEyMDAwRUQ3QzRGQjlEOEJFODE2MDUxRTU2NjkwMDdFNDcxODlFRAorOjEwRUEzMDAwODBERTVFNTdGNDE5REExOTBEMkY0QzFDOTM1OENGQkZBNgorOjEwRUE0MDAwQThGMzExNTYwRkJFNTNERkU3RkE0RkI5OTgzRERBRjAzRAorOjEwRUE1MDAwQzI3MzE4MTczRDFENjZEQjg4NkE5NUYwREE3MTEwOUY0NgorOjEwRUE2MDAwQTk5NUMxRDIyMkE1RTE5QTU5QThGRjY3RDI3NUQwNzVBMAorOjEwRUE3MDAwRkQ4NkRCMjVDMTlEMzc4NzYwN0Y0MTkwRkUwNTkwNkQ0NworOjEwRUE4MDAwRjEyRjQwN0I3RkNCNEM5MzE1RjI0OEMxQTIzOTRCOTFCQgorOjEwRUE5MDAwMUY2QzE2MUZBQzVGM0JDRjc4MUVGQzFFMEJDNjJERDcxQworOjEwRUFBMDAwNzVFQUFCQzE2RTJBQTM3NkQyQUZFODdDNzM1MkE3NTQ0NQorOjEwRUFCMDAwN0JBOTVDQ0FEMkVEMkVGOTM3MkJENDBGRjRBRDg3RDdFMgorOjEwRUFDMDAwNjczMjNEREMyMkY5NDMzNzk1NjJCRDI3NDlBQzQ3Q0ExRQorOjEwRUFEMDAwRUI2NEY2RDg0NTk3NDExNTg3QkZFODYyNzZFMkY4NTBCNworOjEwRUFFMDAwRjcwNEEwQjk5Nzk0NjgxMkQ4QzU0MUUyRkIxNEZDNUMwNgorOjEwRUFGMDAwRTJCNzdBNjAxQzM4MDEwM0VDMkNDNzJBMEZDNjg1NEQ5QgorOjEwRUIwMDAwOEVFODBGNDdBMkREQTRBMDlGMjFGQzg4NzMyRkIwMzhBOAorOjEwRUIxMDAwREE1Mjc3QzBFQTg2Rjg4RTJFRkFBMzlCMDA2RTNGNjQyNQorOjEwRUIyMDAwRkJBQjg5QzJFNDRERUVDREQ2NTExMEY3MzIzQkEyM0Y4QworOjEwRUIzMDAwQUFGNjYwMUQxMUM2MUYwNjVDREQ4Mjc4NzhDOTQxNkM5QgorOjEwRUI0MDAwMDA5RjA5QTExQTQ1NEFEMDMzNDI2RTRDODhFRjYzNzI4OAorOjEwRUI1MDAwNjBCQ0I1OTI4Qjk3QzExNDVCMUY5QTkwNDQ1QjJFQTY0NAorOjEwRUI2MDAwRjVEODA1ODdGRjNBNDM4MTlCQzI1RTkwNEQwMUY0Njc1QgorOjEwRUI3MDAwQUE2NjUyRkYxMEU4NzI0REVDOTAwQ0YxN0Q0NzM3REEyRgorOjEwRUI4MDAwOEJGNTFEMTI3RUE3QkVFODk3NThFN0I3ODRENzkzQzVDQgorOjEwRUI5MDAwRUJCQTk0MjhENkI5MTVCQTkzNzg1Q0FDODVEMTAzRTk2MQorOjEwRUJBMDAwNDZGRjk3M0NDM0UwNEZGNTI2RDZCRkY1RDhFRDREQUNGOAorOjEwRUJCMDAwRUU4ODhGNjdFMDc5ODk3QTFFQUZBMTgwQzJFNzI1NkU2MworOjEwRUJDMDAwMTE2RjVCQ0RGNUFGQThENzYzREYyNThBQTcyQzMxQkVDNworOjEwRUJEMDAwQjA3MTFBRDUyNDM4MkY0RjBBQ0NCN0QzRUMxRkU3QTY1MworOjEwRUJFMDAwRUY5RkE4OTU1OTVDQkMzNTI5MEM5QjcyMzc0QUREM0VENgorOjEwRUJGMDAwODg1Rjg2NEFGQURFN0Y3NDEzRkZFRTgwMDNCMTQ5OTg3RQorOjEwRUMwMDAwMzc3OEExQkY3QTYwNTZGRkJCNzlDQzE1NTg4NzVGREE5OQorOjEwRUMxMDAwRjlFOTI0QTAwRjUyNEQ5MDFGQTlCQ0I4QTQ3QUUwMTlCRAorOjEwRUMyMDAwODAwRkU3RkY0M0Y1QzA1RUM5Qjc4MzVFRTdCQkVERUEzRgorOjEwRUMzMDAwN0E2MDJGQzM5N0M4QUI2QUVCODBDRkI5MjMwQUFCREJFRQorOjEwRUM0MDAwOEIzRUY2MDRFOERENEUyM0Q2MDM0RUVEN0NGRDE4QzQ2MgorOjEwRUM1MDAwMkZBNzlBNDgwN0U2OTkzNUY2QzNDOUI0OUIxQjAwNEYwNgorOjEwRUM2MDAwRTczRkY5RjBCMUZCMDlENDkxM0ZFRjY1RjU4NTZBN0I4OQorOjEwRUM3MDAwQTAzRkZCMUY3MzIzMDk3RTYyNDhEMENEM0ZDOUZFMTcxQQorOjEwRUM4MDAwRjIzQUM4RkRBOTMzNTJFQ0ExNDI1OERGN0U5REFEQUZFOAorOjEwRUM5MDAwRkQ0ODBGQkE0NURFQjU5RjdBOTZBRUJFRUI1OTQ0REMwRgorOjEwRUNBMDAwQjkzQTlBQUZDQTczM0QxQUU3ODNDQkNCOUI2RDgxOUM2RgorOjEwRUNCMDAwNzYxRjc5MzM4NUQ3QTkyOTEyMTMxRDI0QzdBMENBOUJCMworOjEwRUNDMDAwMjlGNkMyRkVGMjY2MTE3Q0ZFREMxMDdDRkU0MEFGQkM3MQorOjEwRUNEMDAwMTlBQjc3NjhEOTlGRTEwMUZCQkVDRTE5N0JGMjQ5MEZEMgorOjEwRUNFMDAwOEM2N0MwNzE1QTVFNDgwQTQzM0Q3RjBCODc3RkREQTU2NAorOjEwRUNGMDAwRTdDRDdFRTVFRTIzNkZCNjlEREI2RjFGMTRDOTExMDNEMAorOjEwRUQwMDAwODVFQjc2QzJFNjFGRUExMkY5MzMxOUZERDhEODgzMzlBQworOjEwRUQxMDAwNjJGRUY4RkNGQzgzQzMzMDVFMzQ1N0U0QzU1RTYyNzE2QQorOjEwRUQyMDAwQjRCOTNDRkZGNUMxRjQ0MkFDNjdFQjBGQ0U3MzVCRDVEMQorOjEwRUQzMDAwRjk4NUQ3Mzg5QzJGOTgyQjMwMUU3RkQ3QkY0RkMzRjg0QgorOjEwRUQ0MDAwRDQwMjg4RTMwRjg0Qjg1NjFCOEZDQkIzNzg5RUE3OTU2NworOjEwRUQ1MDAwOUQyQkUwRDkyOTg1M0QyQzNGNjM5MkQxMzZCNEM5NzBGMworOjEwRUQ2MDAwN0YwOTE1QTM1QjQwRjQ4NjI4RDU1QzQ5NkY0QjE0NkE3NAorOjEwRUQ3MDAwRjRCOUE3ODVCNkE5RDFBRkFDNTU0MjJFREE2RkZCQjE3NQorOjEwRUQ4MDAwMjQ4QzlGM0RFMEYwRTA3QzFGNjg2MTc5RUFEMDdBMjkwRAorOjEwRUQ5MDAwM0M5ODhEOEJFN0I1ODU1QTY0MUY4Q0YzMDczN0QzRjMwNgorOjEwRURBMDAwNUZCQjBEN0Q5RTBGRDFBMkU3RjkxMEZFQkQyNjIyNDc2NQorOjEwRURCMDAwRTAyQTRCRUNGQTgwNERBOUVFQ0I3RTEwRTNCNUU4MUJDMAorOjEwRURDMDAwNEQxNTAwRUYxQzc2MkVDQzA1ODM2RjI2QzY5NzUzMEI4RQorOjEwRUREMDAwRjFGQ0E3OTZFNEM2RDY2QUY2MUM3OUY2ODIzOUU2QzczNgorOjEwRURFMDAwRTc1NzJCQ0MyMDI1OUU1NDk4RUY3QjZFOUU1RkQzQzBCNworOjEwRURGMDAwNzk3RTlCQkFBRENEMTM2OUY3QkJDRDI1ODEyMUVFODExQworOjEwRUUwMDAwQkRGNzgzQkRDN0Y1REY4NTc1RjkxQzJGNUVDQzk3QjRDMAorOjEwRUUxMDAwRTgzREJGQ0QwNzdBNUZDQkNFNzc2QUNBNjY3MDkzNzM0MQorOjEwRUUyMDAwRDhCNUMwNUU4NUU3RjAxMTNCQjdFMzA4OUI3RkMxRDUzRAorOjEwRUUzMDAwMEUwOUY4QTFDNUNFRThGNjFGOURCNzc2QkVGQUNDNDIwMgorOjEwRUU0MDAwMDY1RjNCRTNENzk2QjU1Mjk4QzE4QkNERkI1MkUzMjJDOAorOjEwRUU1MDAwMDMzM0ZGQjk3MkYxMDNDOUZCNjQyNDFGREY0M0I5MTAwOAorOjEwRUU2MDAwN0E1MDhGN0M3NzgyODRCMzU4N0RBODBERTVFNjFDRUUzRQorOjEwRUU3MDAwRTcxNjY3N0FGMEZCNUI2QTBCNTIyMDlGM0FGN0Q0MUFDOQorOjEwRUU4MDAwM0NBNzY5QzJDRDU2OUM3RkMzNEI2NkY0RTNFQTU3NDY2NAorOjEwRUU5MDAwNzM4MTlFQjU3MDg0RDkyQTQyOUVEMkU3NzMxQzg0OURFQgorOjEwRUVBMDAwRUZEM0FBQ0UwRjZBRjNCRTZCNTNGREUzMjAxRkQ0NTBGRAorOjEwRUVCMDAwMTkyRDg0QkNEMTIzRjIwN0JCNUY2NzcyMERGNTZBQzNCRAorOjEwRUVDMDAwQ0FEODkzMTA2N0ZFNkU2QUEwMDJGQTlEQkRFN0RENDlCRAorOjEwRUVEMDAwOTIwNzVGNDdGOTc2N0VGRjEwRENENzM5QTc0NUJEQkZBMworOjEwRUVFMDAwOERBQzU3RTcxRjQ5NkIyQUM2RDU0OUJCRkEzRUVDQzMyOAorOjEwRUVGMDAwNTJCREQ3MkIxRkM5RUM5QThEODZDMDUwQjAzQkFGQkQxOQorOjEwRUYwMDAwODZENTVCN0NCMjQ4MjY4MENGNEZDQzg0RTdGOTg1OUNDMAorOjEwRUYxMDAwRjUxNjI2RUE4MUQ5RkRFMjk1RjYwMzM4RjNGQTU3RDFDMgorOjEwRUYyMDAwQkYxRUYwNEFGMTU5QzdGMUZBQzk3MzU3MTYwMjVFQ0ZGNgorOjEwRUYzMDAwRUVCRUIyMTBGMEJBNTFERkU2MDNCRTE4OTgxRTk4MDM3OQorOjEwRUY0MDAwRjAzODM5RDE4Rjc2QTFBOEY3QkQ1NDdBNUI5QUM5RjUwQworOjEwRUY1MDAwRTBCRjQ4MEZGRjQwN0NGRjMyRjUzMEZDNDk4Qzk3QkM4NgorOjEwRUY2MDAwRjQ1NzU2OTcxQkVBNjJGQjgyN0JFMjc0QTdGMTdDQjNFRAorOjEwRUY3MDAwRjM1RkM5MTJDOEUxRkVDNkIzNzFGQkNFNjUyMjIxQjBCMgorOjEwRUY4MDAwQkZDQTJBQTNGODVFRDk5RjY1MDI3NkEwQjA3RkI1RjMwOQorOjEwRUY5MDAwREZDMEYxQkEyM0QzNzdDMTA1RjhFNTcxREQ1QTNFQjY3QgorOjEwRUZBMDAwMjlGQzM5QjNCMzFGOTczMDZFNkJGMjg0NTJDNkExNUY1MAorOjEwRUZCMDAwMzU3RkI0MEVFNUNBQUY3MEJGMDdFOTkyNkNFMDlGMkNCNQorOjEwRUZDMDAwN0FCQzA5OUY5RkVCOUM4QkNGNjU1MzI0MDI3RTU4M0RGMgorOjEwRUZEMDAwN0QwRUVEMzVFM0Q1RjVEQkZBM0QyNTkxNDRCRjk3Q0VBNworOjEwRUZFMDAwRTMzM0YwNEI5MzFDMzEwM0QwNjcwM0Q4RDU3NDhBMERGQgorOjEwRUZGMDAwMEE4QjZGMzczODA4QzY1NTRBM0JENTdFQTJDOERCNkVGMAorOjEwRjAwMDAwRjFCM0YzNzNCNjc0NDk3ODhFNTZCQTIxOTA5RjBENzg5OAorOjEwRjAxMDAwRDVFNDZGN0Y5MUU5M0I5NkU5RUNDOUJGMzczQTdEQkJGOAorOjEwRjAyMDAwODEwRTFEMDY5MjhCRjU3QTdBQjExRjUxQkQ4RkIzQkY0OQorOjEwRjAzMDAwM0FCODk3MDU3RjdDQUJGRDM0MEJFREE0MkY4ODFGRUQwQworOjEwRjA0MDAwQTQwMzEwN0JDMEJDRkRBRDY4NTc4OUZCQkRFQkUwQzJEQgorOjEwRjA1MDAwQUE3Q0ZEMDJCRURGNzYwMURGNkYwQkYyM0VBMjkxRjdDNAorOjEwRjA2MDAwODlFREJBODQzQUI4NDg1RkY1MEMwOTc1NzA4OUVGMjVDNworOjEwRjA3MDAwRDZDMTQ1NTQ3MkIyOERFRjA3NTk4Njc5RjIyMEU1OUJDRgorOjEwRjA4MDAwMTVBMzdBRThCQThFRjAzRjlCNjIxRkUwN0VBMDlENDZGMgorOjEwRjA5MDAwOENDRkQ1RjFGQURDNjBFRDA5RjQ3QjgyQjBCRjg4RjE0QQorOjEwRjBBMDAwMzdBQjYzRTdFNzU1RDQ1MTdGMTJFQjk0M0JENDc1QkM4MworOjEwRjBCMDAwRTdGRkM5RkE0NUY0RUIyRkVFRkU2NzBEN0Y4Qjc1ODlFQworOjEwRjBDMDAwNzVENDc1NDk4QzFGMzVGM0Q0RkFEMURBRjhCOUYwODNDOQorOjEwRjBEMDAwMkY1NUNFQTU2NEZENkJFNTVDNTY5NkEwRUY3RjRDQ0UxOAorOjEwRjBFMDAwRjVDQTQzMEM4QUE1NzhGRjA5Nzk4ODhGM0Q2REU5MTAzMAorOjEwRjBGMDAwOUE2Qzk1MThCRDRFRDI1OTdEMkNDRkE5NjM3NTEwREE0NAorOjEwRjEwMDAwRkNBRjY3MTJFNjM1NDVEQ0Q3RjRCQzJFQkMzQTFGRkJEQQorOjEwRjExMDAwNjM1RUI3N0U3RjMyRDYyNUQ0N0E2QUQxNkVEN0U2M0I1RQorOjEwRjEyMDAwMTc5M0REOTMwMDA1NUY5MDIzQjg4RkVEMUZBRDJGQThENworOjEwRjEzMDAwQ0M4QUQ3MTdFNDVGNjY3REMxNzU1OTk3OTFFRjdDRDU2RQorOjEwRjE0MDAwRkE3OTVBMjA4MTRFMkE4QkE5MDM1MERDN0YxREQ5NkQ5NAorOjEwRjE1MDAwOUNFRTkyNzgxRDhBNDkwOTExN0JDMkZCRkRCRDc3Njc0MQorOjEwRjE2MDAwMTY4QjFGQkVDQUVCOUYxRTRFNEVDMkYzMTc1QzA2QjYyRgorOjEwRjE3MDAwNkZDMzI1QjMzQUFENUNCN0JGMjY2QjBDRTgxNTg2QzdFNQorOjEwRjE4MDAwOUZCQzcwMUI4MUJBQzc5RkU4M0JGMDNDODQ1MEJERDU0MworOjEwRjE5MDAwMEJGQTUwQzRBREM0RjhCRkUyRjFENDRCRTU5RkJCRkVGRgorOjEwRjFBMDAwQzlGQ0YzNkQ3MjIzMjRCRTc3QTlGOUJBNEQxNDA2MDk4MAorOjEwRjFCMDAwN0NBNUU1ODNGRURFRUI0RkFFNkNDOEYyQUZDRjQyQjk2MworOjEwRjFDMDAwRTUxQjgxNzk4RjRCOTQ0NzQ5QTU1NDVFODNCRURGNjM2RAorOjEwRjFEMDAwRjQ4MEZGNjFFMkZCOEJDODdBQjdDQTdGOUZGQjcwMEU5OQorOjEwRjFFMDAwRUFDMzRGQ0NDQzFGMTFGQkEwQzRGQTFGRUYxN0RFN0Y4MAorOjEwRjFGMDAwOUZCREY4MTdBN0ZGNDk1OENGQzkwQTFGRUU3Qjc4MjA5QgorOjEwRjIwMDAwOTlFOTk1RDg1M0FDQ0U0OEJCMUY0OEFCNEZDNDdFMTY4NgorOjEwRjIxMDAwRjFCRDRFMjFDRkZFNDVGMkY0QjU3RjkyM0NBNUZBMTUyMworOjEwRjIyMDAwRUQ4RDdFRjNCQUJEREUwRkUxNzdDQjJBQkI3RDNDREZFRgorOjEwRjIzMDAwODVGQjM5QzRCQzgyRERBQzNFRUY2RDhFM0Y3MUZGNTk1QQorOjEwRjI0MDAwQUU3NzMzQjM3REJGMDMzQzlDN0RDNzY0ODIzQzZBNjk2MworOjEwRjI1MDAwMjk5MzlGMEQ3RTJCRTYyMTFBM0E1ODVENEVDMzRBODJCMAorOjEwRjI2MDAwNzEwM0IxRUY3NzU2NDYyMDBBNzJFQTgxNzdBRDc4N0U1NgorOjEwRjI3MDAwNkM0M0U3RjZENjAyQUM1NzA4QTA5RDc4RUUxRDc2REYwQQorOjEwRjI4MDAwOUMxMTM4MDlFMzA3NTc0NjU1Rjk4RUIyOEI5RkFGQTlGOQorOjEwRjI5MDAwMkVDNUY5QTJERkVGMzBBQUY3NTMxOUIyOTkzRjJGQUU2RQorOjEwRjJBMDAwQkE2Q0ExQjdBOTlGNDNERjNCNUJDQkVBQ0E4MzBFOUYzMQorOjEwRjJCMDAwQUQwMkVCMTQ1ODNDM0RDOUQzOEQ3MUYwODYzREE4MjRCNgorOjEwRjJDMDAwMDgxNkI5QzJGMzdCQjM5MTZFMUFGNjU0OTRFMEY5MEJBOQorOjEwRjJEMDAwMURFNjEyM0M0N0U4M0QyQkZBNkI2N0VGQzkwQzQzM0MzNworOjEwRjJFMDAwN0JBOTNCRjAxNzk4NkY3MjY5RjgzQUIwNTdGM0U4Nzc0QgorOjEwRjJGMDAwMjA5RTdFNzZGNzc1MjUxODVGRDRGMDlERTBCN0Y4M0UyNgorOjEwRjMwMDAwREEzQjRDRTE2NkE5ODcxRjM3RUE5OTdFMTQ3QUVEMEM0NworOjEwRjMxMDAwMThDNzRFQ0M3QkIwM0FDM0FFNjk2NEJFQjVBNzZENzU1NQorOjEwRjMyMDAwQThFQjJGNzc2NDRFM0MwMzcwM0U5M0E1RjAzQzM5Q0I5RAorOjEwRjMzMDAwQ0JFNzlCQTgzNzVCRDA5QjBFRjM3OTVFN0UxQUFGQTcxNQorOjEwRjM0MDAwMjAyMTUzNEYxRDQ1QzFCN0U3RTVDNUZDNDQ1QkU0RTUwQgorOjEwRjM1MDAwOTNCRTYyNzY3MzgxQ0Q4MDc0OTFEQ0NBRTQwNkExNzQ5OQorOjEwRjM2MDAwMDFGNkZBRjg1OEY3MDREOEJGMzZBODNEMzIxRUUwMzU0QQorOjEwRjM3MDAwMDBDMDBGMzEyRTEyRkRFMTQ4Qzg3RkE0MjlFMzIxRkYxMAorOjEwRjM4MDAwRjFEODhBNTEwNzRDMEU4ODQ3NzU1RjBEQThGMUI0RDlBMgorOjEwRjM5MDAwMkFDMTU1OUQ5NUUxMkY4MkZBNEFBMjM0MTYwMUZENTdFNAorOjEwRjNBMDAwQkVBRDY3NzU4RjZCOTM1MERGQjdFN0Q2NjFEREUzQjkwQworOjEwRjNCMDAwNzc4REFBN0Q0NkJERTQzNDU5RUQ4MkI4NTM0MUVCN0Y4OQorOjEwRjNDMDAwNjJGRTIxNzk4RkQ0NjczREVCNDI3MDIyQzZCMEZFMTBGOQorOjEwRjNEMDAwQzc0QTZFRUQwRTk1NDM1Q0U2NDE4OTlEQzE0OTY3MkY5MgorOjEwRjNFMDAwQjkyMDlFQTBDODYwNzdDQ0VENjRGQkRGRTdCNkQ5MkJDRgorOjEwRjNGMDAwNEQyODRGMjU5NkJGMTlFRjQwMzlBOUFDQkQ1RTA2N0Y1OQorOjEwRjQwMDAwNEY2OTIyNzhERURERUM2Qzc2REVFREUwNzY5QjBDNzhFMQorOjEwRjQxMDAwN0ZGOTZCNUQ5Rjc5QjkxQkIyN0JFQUU4MDA1Q0Y1QzZBQQorOjEwRjQyMDAwRDgyMTI4MUQxMEY5NDQ1MTNGMjdGQ0FCQjg3Q0U1RTdGMworOjEwRjQzMDAwQzIwQjdEQTRCNTYzN0JEOUFGNUMxRkM1RUQ3ODBEMURGNAorOjEwRjQ0MDAwRjdGNzlFQTA2RjQxQ0YyRkVCMDlEQTYxMkY0QjI2REMzNworOjEwRjQ1MDAwQzcyNkU4QkE0NUVDMkJGODlBQzU4NUYzNzg3RENFODlBNgorOjEwRjQ2MDAwNzU3RjE5QzFDRTgxMTRGOTk4MzBBQkFCRDI0N0Q3NjQwMAorOjEwRjQ3MDAwMjFCQ0EyRDc4NDYwREQ3QkVDNzI0MzMxQzZEMzFBNzAwNQorOjEwRjQ4MDAwOUNCNUVDRENCQUJDRDY4MUFCQ0I0QkUxNkEyMzAwODJFNQorOjEwRjQ5MDAwMTNGQjk2RTQwMTVGODYyODFEMENFRTgzMEU4QUIzNTk5OAorOjEwRjRBMDAwMUQ5NEIyMzYwOUYxQTY2Q0MwMTNCQTg5NjI0RjQ3QkNFRAorOjEwRjRCMDAwMjk4RjMwRkMxNDY2MzMzQTE3Rjk2MDExRjdDQ0NDMEU2MworOjEwRjRDMDAwQUNDQzFFOTNCMEZGNkM4NTg1RUQzRkUzRkJBNDkzNTc1NgorOjEwRjREMDAwQkNCQjBCRjY3NTNEQzZFM0NGMDc1RTFBODZCRjlGNzFCNgorOjEwRjRFMDAwNjFBRDIyNDExQ0VBODJCRDI2MEZGQ0JEMDczODVFOTM0OAorOjEwRjRGMDAwOTU2RTYyQjMyNkQyRTcwMUFDQkYyREQ4Q0ZFQTA4MTVDRQorOjEwRjUwMDAwN0UwRTk2QjJENkIxMURFMDM5MzYyRDgwNzVDNjU3QjczRQorOjEwRjUxMDAwNDRGMEE3Mjc1RUIyOURDNDNDMUZCNThCNzBERkY4RTlBRAorOjEwRjUyMDAwMTcyNDYxMTdBOUY0QTFGMEQ3QjQ3RUQ4OEZCM0ZGNzc2MQorOjEwRjUzMDAwRkRBQjI3RTM3MkZBMzJGRDJCQTJGNjMzRTNGRDg1REY0NAorOjEwRjU0MDAwQThGNTIzMzRFRkY3NjdGRjEwNUY0ODU1NjdGMzAyQzc0QworOjEwRjU1MDAwQkJEMEVGOTk1QzM2OEFGQTlCRjhCRTZGMTIzNkMzRkVCOQorOjEwRjU2MDAwOENDOTUwNEJDQkQ2ODM3NTQ4OUIyNDhCMTdFQzI0NkRFQworOjEwRjU3MDAwRkQ1MUJDMkU4ODM0MEU2MTc1Mjk4RDIzRDk3OTFFOERERAorOjEwRjU4MDAwNTdDMjU1RDQyNzk5QTEzRTI1QjEwRTM2OTlENTE3OTk2MgorOjEwRjU5MDAwQTEzRTg1REU2RkVFNzc5RkI4QTcwOUJFREY3RTlGNEQ0NworOjEwRjVBMDAwRUMxMzY3NzFGQjZBQzJGMzE2M0I3MDFGNzlFQzk2NkMyMworOjEwRjVCMDAwRENGNzMzQTE5QUM1MDM1M0ZEMDYxOUU4RjJGOUJGRTk1OAorOjEwRjVDMDAwN0MyMDc3NjM5NDZGQzFCRTRBMURFNDczODNCRDY1QTYzQQorOjEwRjVEMDAwQ0ZBMUVFMjVCRTRGQkM4NkY0Qjk0RjVDRDQ0Nzg5N0NFMQorOjEwRjVFMDAwNzFFNjkwOEQxMkU4OUY3OERENEFCMDY3RkYzODdDQjdFRQorOjEwRjVGMDAwN0RBOTA3RTNDREYxM0FBQUVGMTI1QzY3QTU5MDMzMjYwNworOjEwRjYwMDAwMzVGRTUyN0NBQzVGQ0E0QzAzREExOUU5NzJFMDI5Q0NCMgorOjEwRjYxMDAwMEI2RUU5MzYwMzdGRUVDRTJFNDBCQzM1OTc4N0YxMUM4QQorOjEwRjYyMDAwRTRENEUyMzY4Q0U3ODZEMzdDRTdCMjlEM0RGNDIzRTY1MgorOjEwRjYzMDAwNDczNkIxRjU5Rjg3RkQ2NzUyQ0Y3N0NGMkZGQTczMkVFQworOjEwRjY0MDAwRDg1Mzk1NUQ0NjQ2ODc5QTc5NkM4OTlGNTM0M0JGNDM0QgorOjEwRjY1MDAwQUZCQTFDODY3RkFGQzZCRTE1NTc1RDhFQTRBQUUzMTM1MgorOjEwRjY2MDAwREZFRjZGOUQ4MjFFQkZDRDZFRDdEMjU3QTg5MkUzRTcyMgorOjEwRjY3MDAwN0Q3Mzk4RDUzRkE5RTlFQkMwQUFFQUQxMjdBOTJDMzkxNworOjEwRjY4MDAwQjhDQThGRDdGMzY2QTk0MzA3NzU0QUU2RDg2QzkwODA0RAorOjEwRjY5MDAwNkZFNkI0REQwOEU3OTk5QzRGOEVFNUMyRjkyNzZGRTc2NgorOjEwRjZBMDAwREU3NTEzQjY5REIxRjdBMTdEMkFFNzY5RDYxRTFDN0JENgorOjEwRjZCMDAwMENDRTQzRjk1QkNFODg5QkUwQkM5M0YzRjBBRDRDNDI5QgorOjEwRjZDMDAwQjJCNjE1REMxNDJBODY3RDI2RDEzNUREQTA5RjRBMzVEOQorOjEwRjZEMDAwRjUyRTlBNzMxQkEwMkUxM0NGOTlCMDMyN0M2NkYwQkEyOAorOjEwRjZFMDAwNTg1MkM1RUQ3N0M4NTREMTc2QjNCQkM0MEJGNTBDNTY1MAorOjEwRjZGMDAwRTJEOUQzMERDRkIzOERFQzdDMDdDMkVBQjA5QTA3RTcwRAorOjEwRjcwMDAwQjNCQTA5NEVFRjI0OUJDN0IzNDkzNDA0RjREQjlDNkZCMgorOjEwRjcxMDAwQzdGN0UzRjI3QThGOTFFN0IxRDhGNzhGM0VDN0Y2QkQwRQorOjEwRjcyMDAwODk3QTVGNDI2QzM5NjBGNzU4M0Q0NEQ1MTZFNzlFMTBFMAorOjEwRjczMDAwQzU5NjAzRTcxQzM0OEI3ODIxNkZGRkMxMTJCODNBMjdCNgorOjEwRjc0MDAwNDFGRjFFOUQ3ODc3MzFGRThFQ0JGM0Y3MEU4MkY1NEU4QQorOjEwRjc1MDAwMzZBOENGQzExNkQ3OTc3MjE5N0Q5Q0U3RTc0NTZFQjNERgorOjEwRjc2MDAwMDQyNkMxMzhDNzkyNjY0RjgyMjM3ODY3QTY1NTE4RUNFNQorOjEwRjc3MDAwNjhBNzNEQTUwMzc5RTRFNDc0NjE5RkMxRTY2N0FGRjIzMQorOjEwRjc4MDAwNEJGMEZCMjlFMkJDNDY2NzQwQzE3ODAwMDlCNEVCNDA2RQorOjEwRjc5MDAwN0YzQTRGRkFCMUFFQjBDRTE0Q0I1NTI4N0QxOTREODFDQQorOjEwRjdBMDAwRTkzOTkwNTdBQzM5N0UxN0U2MTUzMzhGQkUwRjc1MjBCNworOjEwRjdCMDAwNDdGNTZEMTM1MjQwNUZFNEYzRjMzM0E4RTMxN0EyRUQ2RQorOjEwRjdDMDAwNDM1OTc5RThGN0M1Q0Y3NzFEMkNBMTdDOTgzQTgzRUQ5MgorOjEwRjdEMDAwQTc5RDQyM0ExNDhDQkZEOEQ4RkVBRTQ5QTVGOURFNjY4MworOjEwRjdFMDAwRkFCREE5QkM4RTY0RDIzMTdGMEFDNDAxMjZERDE2NTU0QworOjEwRjdGMDAwNThGRTI2QTYyNEQ2NkQ4ODJCNzFFOTNEODk3QzcwOUQyNAorOjEwRjgwMDAwMjdBMTRERTA1QzY4NzVGQjA2QUZCQTdENTNGOUQ3NDM3RAorOjEwRjgxMDAwMTJEQjAzODhBRjFFRTBGOEEyMTRDNUZERDZBMUIxQzQ2NworOjEwRjgyMDAwQzZENkM1RUExMzlGRTY3RURCMzAxNzMxRTU0MUZEQTQ1RAorOjEwRjgzMDAwNDMwQTgxNUYzMDZDNkYyNkU2NjVGNjk2MTM2Q0E3RUY3RQorOjEwRjg0MDAwMzRFRDMwMjVBRTdGODNDQ0YyQkUzQzZFMkU3RUZGMDlCOAorOjEwRjg1MDAwOUU4MTVFN0RGRTlENzQ4NDU3QkE1NTQ2NzkwQTExNzU2NgorOjEwRjg2MDAwQTBCN0IyMkM5MzA1RTRCQjhFQ0I3OUIxM0Y3RDYyOEEwMQorOjEwRjg3MDAwMDlDRkVENkQ1RUNBN0UzNzQyN0I2RTY5QjNERUY2MEE1NAorOjEwRjg4MDAwRTBCMUY5NjMzODkyOEFGQUQ5Qzk4Njg4OUMwMkY4QTI1NQorOjEwRjg5MDAwQkU4RkEzNDcxRTBCRkE4MUYxQUUwMUJBMUZDMzdFOUYzNAorOjEwRjhBMDAwOEI1MkY5QTBDNDczRTM5QjlENkNBRUNERjcyOTNDREY2RQorOjEwRjhCMDAwQzc3RTI3QTQyOEZFQkIyMTk0RUQ2ODdGQjAyOTA5RjJGQQorOjEwRjhDMDAwMDlDQkI3RTU4ODc1MTJDNTA3RkRERDQ0QjREOTdFQUYxNQorOjEwRjhEMDAwNzRERTE2RTdBNTEyNTJBMUUwRjk0NDkyRThENzg0RUQ1MAorOjEwRjhFMDAwNDc3OTNGQTlFQkY1M0YwMTdEMEM0QUExRUJBMUQ3RDdBMgorOjEwRjhGMDAwNzIzQzQ4REMzRjk1OEY2RTQyM0FCMTA2M0M0MDI3REVCMQorOjEwRjkwMDAwQTRCRUY3MUY3NUU0MzAzQjYyNjI0QUI5MEJFMkVCQ0Q0RgorOjEwRjkxMDAwNkVBRjBCRUMyQTAxMUY3MTVGOEMyQjlFOEJFRjc5RDM5RQorOjEwRjkyMDAwRkExRUY3MzUyRUFGM0JGODNFNjhFREYzOTc3MzY0RjU5QQorOjEwRjkzMDAwNzdGNTc0NUNFQjM3N0NEN0E5RkU2RUZDQkQ5Q0JFREYwRgorOjEwRjk0MDAwMTNGNzQ1N0ZGQzU5QUYzMkUwMzMwNkI3MjlCQzZFOTZGQQorOjEwRjk1MDAwMTRBOUVCNUQ0OEI5RDdDNEU0QkRCQUJFNjVCMkI0RDI1MAorOjEwRjk2MDAwMERGQzc5OURBOUJFMkI0QURGN0Y5REQzQzk2NDM5RjA3OAorOjEwRjk3MDAwNDdDODM3QkMzRUJCRjAyMEYwNjczNUZDMzAwMTFERTdCRgorOjEwRjk4MDAwN0ExMjU5MDNDNDcyQkUyMkYwMTNGQjQwOTQxN0M3ODA0OQorOjEwRjk5MDAwOEYxQTc0ODEyMUE5QjRGRDg5QkU2REQwRDI3Q0U0QUZFOQorOjEwRjlBMDAwNzc3MkM2RjQ5RTlGQTBDM0Y4M0MyOUZEMDFERTA1RkREOQorOjEwRjlCMDAwNjlFNzJERTg4MERDRDg4MTA1ODJEQjQ4MDRBRjJFQzJFMAorOjEwRjlDMDAwRUFCMkE5RkU2MkY1RDc5RTlDOUU3NTUxRTI5QzY0NkFEQworOjEwRjlEMDAwMUMwNEZBRkRGNUE2MTBDQTlGQzlGNjFGNjExRERBRjlDRAorOjEwRjlFMDAwQkNDMDM5OThEN0NDOTE5RkUyRjk0MkM0NTU4M0Y2MTYzMgorOjEwRjlGMDAwOURFRkY5N0ZFNTdDQTE4MjA4RUUwQjNCNTBEODdCQkRFMworOjEwRkEwMDAwRUE5MTNGMzZBOEVBOTFDNUZDQjQ3QzJDRTYxMTI0RUNCRgorOjEwRkExMDAwRENBODA5NUREQkQxQkUwQkNFQjA3QTYxREY0ODEwRUEwRAorOjEwRkEyMDAwNkM0QjMxOUY4Njc1Q0JGQkI4NUYxNjkyNThGRDcwMkZEQgorOjEwRkEzMDAwN0JCMUZGQkE2NTc2NEU0MUJEOEQ5RDFGMjRDRUExRkFFNAorOjEwRkE0MDAwNUU4MTM4NUY4OENEOUJDQTJGN0VCRTEwQjZEQjZCM0NEMworOjEwRkE1MDAwRThGRkM1RURDNkY5Q0MwRUJEQjZEMEQyMDJFNzM1RjY0QgorOjEwRkE2MDAwM0U2Nzg4QzVGN0M4NUVBMzg3REI4OUE4QkZEQjkzRDk0QgorOjEwRkE3MDAwNzczRTMxQjMzQUY5MDQzOTRFQTRGNDlFRjNDRjM2RUExNworOjEwRkE4MDAwOTkzREU4Q0RDRDY3Nzk0MUQ5NUIwNkY4RDgwMjc5MkI0RAorOjEwRkE5MDAwNURFRjM4RTRDMEY0QzBFODVDREE2RjdFQjEyRjE3N0UwQQorOjEwRkFBMDAwOUE2NUFFODFDNTE5Mjk1RDZERUQyNjUwNkVEN0Y4Mzg3RgorOjEwRkFCMDAwOUMwQjdBMUQ2OTdDNEIxRTg4NzQzNTE2RkFDRjFDRjY5OAorOjEwRkFDMDAwMjkzQjJGQjQ4N0FFQzZFNTNBOTlEQzA0MjFGODZEN0M1QQorOjEwRkFEMDAwN0EzMjJEMzAwMUM2NjlCNzc3QkNENzUwMEE3OTRCMjNFQgorOjEwRkFFMDAwQzI1RkQ0MzM2QUY5Mzc2MTNFMjdGNTZDM0UwRTM4MUY4QQorOjEwRkFGMDAwOTlDRUU3RkFCRUU2NzMyOUY0OUQ0ODQ3MTk4NEQxNzE3RgorOjEwRkIwMDAwN0Y3NDBFRkIwNjkyNDdGNUQwRjkwMDEyQjgxREJFMUI5QworOjEwRkIxMDAwQTdGNzM1REU1NkREQzAzRUU2QURCMzIyREU2RjlEQzVFQworOjEwRkIyMDAwRjIzMUMxMjQ2NkE3NDI1RUM2OUQwRUYxMjdGNkZENUI0OQorOjEwRkIzMDAwRDczMkZBQjhENTZDNDQ3QTk5RDY1NThGRjkxNzUyQzU5MQorOjEwRkI0MDAwRjIyOTVFRkExRkNDNjcyNkYxNEQ4NDlGNThCOUQ5MzY0OQorOjEwRkI1MDAwMERGNzgxQ0U5OEFBQ0VCN0NDMzQ0REM2RkNDRTJEODRGRAorOjEwRkI2MDAwQzVEMzZFOURBMTU3RkQ3RUE0ODBDMzRDQjJGRTUzQThBMQorOjEwRkI3MDAwMEY5OUE5RjlERDQ4MkQ1Q0I0RjkxQTAxOEZFNkYyNkZFRgorOjEwRkI4MDAwRTZGQkZCNzJFMzc5OUQyMTk3OTlENzY5Qzk0NUY5NzQyMgorOjEwRkI5MDAwNjk3OTlEODNGQTE4OUUyM0YwOUE3M0UxRDZBNTk0MkY3NAorOjEwRkJBMDAwODZGQ0I4MThDRjVCOUY5OEJFRThGMTBEQjRGREIzMkQ2RAorOjEwRkJCMDAwNTc2MEZCQjVGNDNCOTYxRjg1RTc4RjE1NjJCQjRBRkU4NQorOjEwRkJDMDAwNzQzNkYwNDE1MUQ5QUMyOTcwNEVGRDQxMzMxQkM3NjVFNQorOjEwRkJEMDAwMDlCNEMzRUY4RUI4NDYxNDhDMDI5N0FDQ0ExMEMzN0UyQQorOjEwRkJFMDAwRDc4RkFDMUYwRDc1MzU1NTE2RDYzRTUyRjI1RkEzQjBCOAorOjEwRkJGMDAwNURDMERCQTM1RUJDMDJEQTA3QTU0RjY3Rjc5NTE3MUE1NQorOjEwRkMwMDAwNTYyNDQ1RTBGN0M1QUE1MjU5RkZBOUEzOUVDQTg0MzhENQorOjEwRkMxMDAwNDE1NTI1NkIwRkYzNTZBQzFEMDhDRkU1Q0Y2NkY3QTUxMAorOjEwRkMyMDAwOEY3RkM5RUQ2MzYxNkZGOTM5QkZFRkY1MUQ2RjgxRkRGRQorOjEwRkMzMDAwNjY3RUFCRTQ4NTdEMDZGRUYyRTNFQzVDMzExM0FCNEJGNAorOjEwRkM0MDAwRjBGQjRBMTQzODc3QjJEMkM3RTI3QjEzQUM0RDZFOTAwQQorOjEwRkM1MDAwN0YzNzA2MENBNTEwQzdCNTU5RjM1QkUwN0NFNzAxRTVEQgorOjEwRkM2MDAwMTU2MzAwREYxM0E4MTkwNkZBOEZGMkQ1RjNDMENGMzM1RQorOjEwRkM3MDAwQUZGQzM0MzcwNUVEMTAzNTVGMDlCQTlEMjZGOEE5NEE2NworOjEwRkM4MDAwQ0QzNzU0MUU3NDMxM0NBQUY5ODE4RUZCMEE4RTdCOTVDOAorOjEwRkM5MDAwNUEyRkM1RTVCQjg2NkZCNUY0RDhBRkRFMjc2QTM5MTg5MQorOjEwRkNBMDAwRDc0RjZCM0E5MDJFQjMwOURCNEZCNDBERTg5NEYxRUZDOAorOjEwRkNCMDAwNkY2MTdFMDZCOURCMDNGN0YzMjRFRjE1NThBOEQxOEZFNworOjEwRkNDMDAwRkQyMEU2MDc2NjBGMTlENTdCNUVGMDQ3MTFGNjIyOUJGMworOjEwRkNEMDAwODFDRDk2MEVERjY1Q0ZFOTdCM0VGODMxMzgzMTJGRkFDMgorOjEwRkNFMDAwRkQxMzA4OUYzNTZDM0VEQkE0NDZGRUZCMjJDQzJFMTc4RAorOjEwRkNGMDAwN0U2RjgzNTg2RkE3N0FCRDY1MTZCNjJGREU0NUE4RENFOAorOjEwRkQwMDAwQzFEODdEQzkxNURGMzRFRjIwRDdCMzMzNENGRTA3OEQ0MgorOjEwRkQxMDAwMzJGQzRFRTE1Q0M0RjM2RDI0RjQxQ0Q4MzdFRjU4MDI3QQorOjEwRkQyMDAwN0Y4NEY5RThFNEQwRkVBODA0QkYwRkUyQzM3QzMyQzVBQgorOjEwRkQzMDAwRTMxNzRDQUUzM0JDODg3OTY5RTFEMUQwOEY1Q0Q1Q0U2NgorOjEwRkQ0MDAwNUIwQjg3MUVGQzc0QTM3REU2RTZCRjIzMTg1Rjk3NjZGNgorOjEwRkQ1MDAwM0RDREZDNzcwNDYyMjU0NjU1RERFOTkxMUE1NjU3MkJCNworOjEwRkQ2MDAwRTY3NTQ0MjI0NUE4MjcyNTBCRTY1MUUzNzEyN0FEN0NCMworOjEwRkQ3MDAwRUI2NzdGOUNEMENGNjI5RTc3RjNGRDU5NUZDQTRDRUU1NAorOjEwRkQ4MDAwRERBRDhCRTAzQ0YzQUFCQkNEMDBDN0YyQkMwMjc2M0VGMgorOjEwRkQ5MDAwMTA5RjdGNzM3OTA4RkIxOTY0QTlDRjNDNzE3OTlFMkM2MQorOjEwRkRBMDAwRjI2MEE0Q0Y3M0RDM0NGOTU2RTA4QjNCNERGQ0RDM0FBRgorOjEwRkRCMDAwMEQ1RDEwNERGRUFDM0YzQTExRjFCQjRBRUVCN0M0RjNGNgorOjEwRkRDMDAwQTk5QTczRTJFNjk4RkFDRTlCNDkxNEJFNTlBOUJERjFFRgorOjEwRkREMDAwMjBGMjY5Mzc2OEUzNzREN0IxRjhENTBEM0M0RTM3QTFFRQorOjEwRkRFMDAwOUFFMTI3NzU0NTMyRkE3NUE5QTU0NzE1MzJCQ0U3M0M1QgorOjEwRkRGMDAwNkI4MUFGMEI4RTQwNTUxRUU2MzVBMjYzMjA4RUYwRTY3OAorOjEwRkUwMDAwOTg5RjYxMUU0OTlDMUJBOTg1OUYzRjRGMTZGMUM2NEJDOQorOjEwRkUxMDAwRTI5N0ZFRTZGRjA3OEI3RjNBN0NGNzEzQTkxQkNGODM5RgorOjEwRkUyMDAwMUJFREU2RTc5MTkyNDAzRUYwOTNERDk2NUYwMUYxMDcwRQorOjEwRkUzMDAwMkE3NzJGNUUwNDY3MTQxRTUxRkNFRTc0MDY2RTg3Rjc1NgorOjEwRkU0MDAwNkUyM0ZFODk1MEVCOUQ1QTFERDBCM0Y4M0RDMUY4RjFFOQorOjEwRkU1MDAwMzJFRTQ3NEVFNEZBRkZCMzY3RDg3RUZEMkFERkQwNDc4MworOjEwRkU2MDAwQzc4MzdEN0E1ODRGQzIxRUE4MUI2N0YwRjk2Q0FCMEU5MgorOjEwRkU3MDAwRjVGRUMyMzc0NkJCQzA3RUZGODBEM0UzOTA0REIyRUFBOQorOjEwRkU4MDAwNzcwODg3ODYyREFBNzMzRDg2RUQ0QzU1QjU4Nzc3NjQzNAorOjEwRkU5MDAwQUFGQThGRUMyQzUwM0QyRjg5NUNBMTdBM0VGQUYwMjgwQgorOjEwRkVBMDAwNTU3QjRDRjczODU1RkYyQjhGNTVBQURBNjNBMzUzNTQ3MworOjEwRkVCMDAwRkRBRjNBMzU1REQ1QkUzQTc2QkJGQTVDOTI5MEFGQkJFQQorOjEwRkVDMDAwMjgxRDdFM0Y4MUMxRTNEQUFGRTZBOEZBOUY0OTk5NzQwNQorOjEwRkVEMDAwMThGODcyREU3QTU2Mjc1RTQxOTZBOERFNUZBMkFCQzNBMQorOjEwRkVFMDAwRkE2QkQyQzZFQzlDNDZGQTFGREYxN0FGNjA3RDFBQjVERAorOjEwRkVGMDAwRUZFMUE3MDExNjZFNTJEQjQxQjU1RDFCRDY4MDJDRUVGQgorOjEwRkYwMDAwNzUxRTg2QzZERUQxREEzNzQzMUMzNTcwNkMzNjc5MjQwRgorOjEwRkYxMDAwOEZGRkFFRjg5NUU0NEFGRUJCMzQ1QUJDRTJGOTAyOUY2QgorOjEwRkYyMDAwQkRBNTQzM0Y2M0Q5MUJDQ0ZFNUZCNjhCRDVERjE1OTJEMQorOjEwRkYzMDAwQzEwMzcwREZEOTYxMUQwOTRCNzBDRTQyRTNDNkYxNTI5NworOjEwRkY0MDAwOEY5REEzODU4QkQxQTVDNkIzRDlBM0M2NzM1MjkxMUEzMQorOjEwRkY1MDAwQ0ZDOTVFMzU5RTA3OTRBQkYxNkNGN0E5RjE5QzU2QUQwNQorOjEwRkY2MDAwQzZCM0QzQUZDNjczQzY0QzM1OUVERDAxMzU5RUIzNkFBQQorOjEwRkY3MDAwRDU3OENFNjk1NEUzMzk2Rjg1MUFBRkY5QTFDNUFBRTdFMAorOjEwRkY4MDAwNDJBRTBFNkM1REE2QkFERjJDNzU5NDUxNDk0QUU2Rjk3MworOjEwRkY5MDAwNkJGMTdDODlDMTZEREZFRjkzM0UwNEZFNDNGNDNGQzZGNQorOjEwRkZBMDAwQ0Y4RDU4Q0ZCRjgwRTIxRkVBRjlCRjIwRUIwRjQxNEE0NworOjEwRkZCMDAwNTY0QjA3MEQ5RDFCMzBFRjc2Qjk3NEYwNzYxRUI3NUY3OAorOjEwRkZDMDAwMDVGRTJGRDE3RUE1RkFGMkJEQkMzMTY4RTdCQzBGRjI2OQorOjEwRkZEMDAwNjFFNjEwRUU5N0Y4RkJCNjczODREQzRBQjQyQjEyRkQ5MQorOjEwRkZFMDAwRUVGRUU0NTkyRjNEQ0FGREYwN0VGNUE4QzYwRjdGMDc0RgorOjEwRkZGMDAwQUE5RkQwNUU1RjhGNzFBRjU5OUNBRTNGODc1QjYzMjEzNAorOjAyMDAwMDAyMjAwMERDCis6MTAwMDAwMDBFRUZBMkNEQTA3RUZEMDg5OTREMzc5QkQwM0YzMUUwMTAxCis6MTAwMDEwMDA3NkMyMzA4QzkzREM0MTIyN0EzQzNGMUMyQTQ2NzVBODdDCis6MTAwMDIwMDBCRkIwNEVCMzg2REFFRDcwOURDQkVEODdGOTNDOEU2MkEyCis6MTAwMDMwMDAzNDA1ODhDNzg5RjE5M0JDNzRGODZFNzYzN0VFMzNGQkNDCis6MTAwMDQwMDBCRjE3RjQ0RjJCMDA4MDAwMDAwMDAwMDAxRjhCMDgwMDNBCis6MTAwMDUwMDAwMDAwMDAwMDAwMEJFNTdEMDk3Qzk0RDVCNUY4RkRFNkI1Cis6MTAwMDYwMDA5QjJEQzkyNDk5MjQxMDEyMDI2MTI2MjEwQjkwODQ0OUVBCis6MTAwMDcwMDA1ODA0NDUxQzk2NjBENDgwNjE5M0M1ODgzMzQ5ODA5MEFDCis6MTAwMDgwMDA4NTA0RDBEN0I0QTVDRDQwQzJBMjg1MzZCNEE4QThBODBGCis6MTAwMDkwMDAwMzAyMDUwQjM0NTgwNEQ0Njg4NzQ1QTQ0RjVCNjM2Qjk3Cis6MTAwMEEwMDBBRDRCQ0I0QjAwNDVGNjE4QjREMjNFREZGMzdGQ0VCOTUzCis6MTAwMEIwMDBGNzY2RTZGQjQ4MEFGNkJERjdGQkY1RjdGQkUzRUJCQjlCCis6MTAwMEMwMDBCOURGRERDRjc2Q0YzREU3REMzQkVDRUQzOEM2MTIxOTZBCis6MTAwMEQwMDBGQjA2RkZERDcxN0RDQTk4OEZCMURFOENGRDAxRkY4NEM4Cis6MTAwMEUwMDA3QTIzMUM0NTU2MDdFNDI3NUExRDBGM0QwNjlGOEUxODlDCis6MTAwMEYwMDA1ODc5QjMwREZFMjg4NDdFNDY0MzZBMkNDQTlFOTZERDRECis6MTAwMTAwMDA1RDNGMkJBMTMxNjNBRjJBMUUwRjFCMEVCRDI2NUE1RDJBCis6MTAwMTEwMDBEQjE1QzY4NjI0MzE2QjYyMkMxNDI3Rjg1M0E2NDUzMkIyCis6MTAwMTIwMDBENkM3NjFBMDdBRjA0RjYxRjE4QzBEQjZEMkRGNkM0RjZCCis6MTAwMTMwMDBERkU2QTUzMUE5Rjg5NzNGQjYyOEZCREI4RjlCRUE3MDc1Cis6MTAwMTQwMDAyNzNCNDYwNEVCREY2OEJENjY3M0YzMTI5QzY3NDdCNTM3Cis6MTAwMTUwMDBDREI1RDVDOUQ4N0I1ODA0RUQ5RUJGQ0YxMjUwQTMxODlBCis6MTAwMTYwMDBCQjYyQjJBRDU1QTIxOUZCMjA2MkRFRjFERTBFQzY5RTY3Cis6MTAwMTcwMDAwOUY3NjQyMTVDNjZDRkJBNkIzNUU2OTUyMzcxOEVBNUNECis6MTAwMTgwMDAzMEJGMkJERUI2OTEwQ0U2NkRCMTdBNUM1ODVFNjVGNTNBCis6MTAwMTkwMDAwQzg4ODcyNTVFRUFFRkM5ODg1NkExQ0YyMjBFN0ZGODJBCis6MTAwMUEwMDAyM0JCQThEQkY5RjNGOTRDNTBGOEY4OUY4NDdCNDZFM0I2Cis6MTAwMUIwMDAzQThFMTg1QTkzNUQwODBGNjNFQjQ4NkNDNzZDQkRBOTYzCis6MTAwMUMwMDA5RjRCNjYwRTk3OUVFMDMwM0VBMjdGMzFBRUFCQ0M2Mjc1Cis6MTAwMUQwMDA3MUE5RDBFNzc4ODVFM0Y1NENEQzgzRjM2QUUwQ0ZGOUM5Cis6MTAwMUUwMDA4NkEyRjg4MEFBOTlGNzlEMzQ2RkJCNzc0MDYyMEFGNDIzCis6MTAwMUYwMDA2RjEyRjNCNkY2MTY3MDc3NjQxNTQ1RjYzQ0VGMDZFQzExCis6MTAwMjAwMDBCRjE3RTQ3RUEwRjhCNzNCMzkyRTMxN0ZEMDE3RTM3RkNDCis6MTAwMjEwMDAxNEYyMTZDM0Q1RjdBNjQzQkUyM0RCRTBEQTBBNDU5QkVBCis6MTAwMjIwMDBDM0ExRUIzQ0M2REUxMUYwN0VDNjA0Rjk1OEZBQkUxNjM3Cis6MTAwMjMwMDBCRjI3ODRGM0Y2MDk4RjFCRkMwREQwQkU2OEZDQ0I4NDZFCis6MTAwMjQwMDBBN0U3MTdEQjY4M0Q1RUU2MzAzMzk4NUYyOTczOUI3MTQzCis6MTAwMjUwMDBGRTlGOENGQkNGRDdEQTAwMUZGMzFEMUUwRkMyRURDMTJFCis6MTAwMjYwMDAzODQzRjI3QjM0MEZDRjkwQTkzMDZGMzZFNkU2RTg5RjMzCis6MTAwMjcwMDBCMTc1MDYzNjkyQjE2OTc2QkU4NEY5MDI2RUQzOTlEQjA4Cis6MTAwMjgwMDA4NEUzQ0M2NDFFMTM4RUZCRkJDQjY2MzcwM0ZBRjgzRDg4Cis6MTAwMjkwMDBFMDk4QzE3QzY3MzExRjdEOUZDM0ZDOTRERUNGMDI1NDgwCis6MTAwMkEwMDBGRjAxRDY0NkY5NzcyMzcyRkFEN0MxRkNBNjNFOTE5MTk5Cis6MTAwMkIwMDBDNjBDMUFCOEZGMUJDRTE3RThFNUMxNUU5QzVFQ0VGNkYxCis6MTAwMkMwMDA0MUI4NkZFQzdENTNGNDNCNTVEMDBCRjBFQjBGQjExRkYxCis6MTAwMkQwMDBFMEQ3RTFCOTI5MjE3QzMzOTFEMzBCMzNEQUQzRkUxMTc2Cis6MTAwMkUwMDBERkI0NzY0NkU1QjBBMTk4NzdEQjEyNjFGRDc3MEExNDlBCis6MTAwMkYwMDBERUU5QUUyQ0M0NzVFNkFCMzZENjBCRTBERkVBNTBGRDg2Cis6MTAwMzAwMDAxNjE4QjM2MDlDQjcyRkFFMEJGRTQ1RkEwMDRGNTNEQ0I2Cis6MTAwMzEwMDAyQTQzM0NCRkI5MDJCRTQwQkQzNzczNTUzRkQyQzQ5NDk3Cis6MTAwMzIwMDA0RDkzQ0U2MUZCQzI3MUQzMUJBMzYxRkQ5M0JFNkUxQkM3Cis6MTAwMzMwMDAxRTgwQjRBMDlGRTk1NDVCMjYxRkUzMUJGOERGOTc2Qzc3Cis6MTAwMzQwMDBGM0M0MTg0OEVGNEVEODY3NjQzMEZGQkIwNzZBQ0IwQjg1Cis6MTAwMzUwMDBCMzIwNkYwREU2QTczMDYzQjAxQ0M2M0Q4QzcwMDBGQTY5Cis6MTAwMzYwMDBBOUZCNzNFRUQ4NjMyMUVEMTg2QjUyOTE2RkI2M0EyMjU4Cis6MTAwMzcwMDA3QjdEM0EwNEIyODNEOUUwNkY3MERFNkE3MUI0QTcxQjRCCis6MTAwMzgwMDBGRTkxRTk1N0Y1QUVCMUM3ODAyNkVGNTFEQ0JCMUM0NEE2Cis6MTAwMzkwMDAxNzBFMzNEMjdGODk5MUI5QkJFM0JCOEI2OThBQTAxRjRCCis6MTAwM0EwMDBDMDJFQzhCMzdCQzU1QzNCMEJBRjlBQUZDMDdBREIxQ0Q5Cis6MTAwM0IwMDA5RUZERDhDRkQyQzk5RkNDQzNGNTMxMjNGQkVEMzA4MDUxCis6MTAwM0MwMDBEQkUyREYwMURDQTBGQzU0M0Q0MDNFMDNGOEIzREVDQUIzCis6MTAwM0QwMDBEQzE2QzYzRUFEQjc1M0ZFQjNGQTA0NEFDRkQ3M0IyODZFCis6MTAwM0UwMDBCRDU4OUY0OUU1OTdFQjVEOTQ2N0NFQTJEN0IwREY5MkU5Cis6MTAwM0YwMDBCNTlGMUIzRDU5OENBRDA5OTM3OEU0RjM1ODI2RTg3OEY2Cis6MTAwNDAwMDA0REZGOTE3RjcyQzE3ODZCREUzNjUxQkVCQ0I5Njk1MjI3Cis6MTAwNDEwMDAwNEE0Q0JGQTlGNUExOTAxREY5N0VENTI1Q0Y4QkRCMkU0Cis6MTAwNDIwMDBDNTZEQjYyMTFGMURGM0FDNDZGMjU5Rjg3NkRCMTQxNEU2Cis6MTAwNDMwMDAzQkQ1RDcxNEU2MDExNjlBM0RCMEU4MkQxQzZGQzQxRkJBCis6MTAwNDQwMDBDRkM0MjNGQ0NFRDY4RkEyRjk5Q0FCNzdEMzdDREMyRDE2Cis6MTAwNDUwMDBFREM3RTNBMEZEODVGQTAyQ0EyNzNBOEJERTQ1QkE3NEUwCis6MTAwNDYwMDBCM0NGQ0Q1ODdGRjJFRTc2NjMxMjk0RTdCQjE1MzdGMjI3Cis6MTAwNDcwMDBGNzU4MzdGM0ZCMDE3RjlCNEM3Q0JGRDgwNEZCMDVGMjk4Cis6MTAwNDgwMDBGQkI4RUM2OUNGM0NDNDUwOUU3QjNFQzZGMTY2QzY5Njc1Cis6MTAwNDkwMDBFNkM3QzFGNzI5QTNCQzQ2QUMzN0VCNkJDNjMwMkZFOUUyCis6MTAwNEEwMDBGQkM2N0NDREUxNTEyREYwNzJFOTc1ODVFMDc0RTlDMEExCis6MTAwNEIwMDA5MDdCNkY4M0ZFNUUzRkExMzIxNUU2RDU3OUNENDBGMzg4Cis6MTAwNEMwMDBFQUZDMjBEQzBGM0I1MzU3QkRBNTJGQTVGNjYxMzY0QzQ3Cis6MTAwNEQwMDA4N0Y0NjE1OUI4M0VFODA0RDY5REE5MTgwRDc1QzBGRjkwCis6MTAwNEUwMDAxN0Y2N0MyNzAxRTEyRkM3QkQxMERCRkNENzhGNTBERTRDCis6MTAwNEYwMDBGRDg1Q0IzQkM2OUEzRjdEMEFFNTYxQkYwNEQ3QTM5MDNCCis6MTAwNTAwMDBCQjZDNjJCMzg5M0Y1OTZEMDRFRTg3OEJDRENDQzNGM0NFCis6MTAwNTEwMDA5RTIxOThCRjEwQ0UxRTJDODJGQ0M4QkQ0OUUzOTE3RjVFCis6MTAwNTIwMDA3MDNDNDc0NjUwOUVBNUVGN0QyMkU1RkI4RUUwNzgzQjcwCis6MTAwNTMwMDBGNjNDRDlGOThBMDNDQkZEQzRDRkJCRjYzRUQzRjc2OUFECis6MTAwNTQwMDBDODU1RUQ1QjE1OEVGMzdBMTVENjMyMEFGOEUzRDUwRDUyCis6MTAwNTUwMDAxMTI0Qjc1RTM1Qjk0RUQ2QTFCQzdFQzZFNkRBMEVGNURCCis6MTAwNTYwMDA3RUZFRTNFRjlFM0E4NEU5RkFFQUJDRUY0MjFBRTM4QzlFCis6MTAwNTcwMDBBNTdFQ0E3RUJBNjgzMEI2ODdGRDlCMjVDMjNBN0Y3MUQ4Cis6MTAwNTgwMDA1MDA5ODRFNTMwOTZCREYxRjBDQTQ0MTg2RkU4RTY3NjZDCis6MTAwNTkwMDA0MzVGNDg3M0I3MjkwRDk4MEVFOTVGNzAwMkY3Q0QzRUFGCis6MTAwNUEwMDA0RTA3QzE3REQ4NkVBNzlBODQ2Q0Q3RDdGRkQxMURCNEYyCis6MTAwNUIwMDBBRjZCRjdGQkFDOEQ5RjhGRUZDQjgyRkJGRTYwQTVGOTk1Cis6MTAwNUMwMDBGQzBBMjdEMkVCRkI3OTFFODI0NzEzQ0RFM0E1OTZFOUZGCis6MTAwNUQwMDA3RkI4OUZFMTNBNDBBM0MwNzk3QkNEMkVEQTY3NjBCOTNFCis6MTAwNUUwMDAyNkM4NUZEQTlGQkFFNTUxNThFMzAxODM2RjBCRUQ0M0VDCis6MTAwNUYwMDAyNTVDRUZCODU0RTQ3QjEyRTlBNTFBRUFGQjIwNUY5RDY1Cis6MTAwNjAwMDBFQjhCQkExNUNBQUJGRjMyRDAwNTk0QzFGQTNGN0I2N0JBCis6MTAwNjEwMDAwMUMyNjNGMUZFQzcyNkY1ODU3QTk3QzYzMDk3MDI1MzZCCis6MTAwNjIwMDAyRjdGRTlFQTI0NkNDN0ZBMzM4NkFDN0Q2OTdGNDNGQ0VGCis6MTAwNjMwMDA1QzY4RjdBM0FDRjEyMzkwNEU4QUQ0NjYxQTg3RDVGMDk0Cis6MTAwNjQwMDA3MTlFMTBGQjE3NkIwM0UwQzQwQjkyODM3QTNGODJDRjNECis6MTAwNjUwMDBGODNEQjYyNUU2NzAxMjBCRTJBN0E2NjU4NUQzMDhFRDM2Cis6MTAwNjYwMDA4NzdCQUMyRTE1RTlERkU5NEJBQ0I1MDVGNzQzRDhDNzVFCis6MTAwNjcwMDA0NjNCOTFCNENEQTI1RkZCRjRFNEEyNkZCMThGOTlDNTY0Cis6MTAwNjgwMDBCRTI0RkI3QkMyQ0M3QzYxRDA0RjdGRjhBRUUwM0U2QkRBCis6MTAwNjkwMDBFNkZCRUY3NjkwMEY0OEJGNzJGRjg1NzFFRjcyOEVBMDc4Cis6MTAwNkEwMDBGNjZFOTRBNzQ5QjBEOUU2QzIzQzkzOUVCMDkwM0NCRjg5Cis6MTAwNkIwMDBEOUYxQTVERTU0MTNDRUU1OTFENDNGNjZDNzM1QkNENjNCCis6MTAwNkMwMDAwNkVCM0QxRUVFOTk4OUUzQ0MxN0ZCMzczM0JBMUMyOEE1Cis6MTAwNkQwMDBBN0Y3ODRCQkVGNzNEMjdFRDg5MThDNkI4MEZENzEyRTBGCis6MTAwNkUwMDBFNjE3QUJBMDRGQTU4NkU4NTNENjlCREIxRjNGMEM3N0UwCis6MTAwNkYwMDA3QkIwRkRDREQ2RDdDQkNENjU1RjFBNTgyRUQwQzFCMjE5Cis6MTAwNzAwMDBDNzJDN0UwNkYzNkU0MEY5MEFFQjZBODgxQzY5NDUzOUVFCis6MTAwNzEwMDBDMDhFMTlBQThFQzM3RTc5M0I2RkQ5RDVERkIyQzgzQzkzCis6MTAwNzIwMDA5MjEzMEQ4Qzc1MEJBRkQ3ODE5RjNEMjAzRjAyMjBFRkI4Cis6MTAwNzMwMDAzREMwRDc2M0FGNzVBODlDREU1QjhGNDYwRjQ3NzlDOTc0Cis6MTAwNzQwMDBEQzkxNDAzRjc3NUMzMzMwNEZDODdFQTZFRjA3RjA1NTExCis6MTAwNzUwMDA4RkVCMUJDNzIyOTgyNzY0N0Y3NEIzMTgzM0YyMkRCMzM1Cis6MTAwNzYwMDBDNUZFNzNFQjE2RjMxRjIzRjAzN0E2RjM4MzA4OTQ3RkJGCis6MTAwNzcwMDBDQkJFQ0MyMzM5RDhEM0JBNUUxM0VCRkEzNUFFMEJEMjRECis6MTAwNzgwMDA0RkQyOEEzNjIwMURERkZFODVERDg4RUJCQkREMzgzNTk0Cis6MTAwNzkwMDAxOUY1MTM5OEY3MTMzOEVGQjE1RjE4QjRGM0ZFM0E1QzBDCis6MTAwN0EwMDA5M0JGRDlGOTNGQUMzMDlGMDFGOUYxNzNCMzFGRjlCMTkxCis6MTAwN0IwMDAwNUI3Mzk4MDYzQ0JBMjJDM0ZGMkZEMDEzM0NGRkJBMkZBCis6MTAwN0MwMDBDQ0E0OUZCNjQ0MzIxRkNBOTE5NkE5RjE3RTlGMTNFNTJGCis6MTAwN0QwMDAyMUUzRkE2QjZGQzZDQkMzNDRGQjM5RjFENEJFQUYwNTNFCis6MTAwN0UwMDA0MDhBRjJFMEZFNzBEMTdGRUQ1QkQ5NThCRTIyODlFNEU5Cis6MTAwN0YwMDA0ODgzQzlCRjM2MDVGQkZGODFFQURBMEU3OEZCQzA2RjdDCis6MTAwODAwMDBGMDk5ODA0RTM2QzYwNEVFNTdBMURGOEQ5RkM3MzMxQzhBCis6MTAwODEwMDBFNzAzMTY0OEFBQzE3MUNBQzM0OUVFREU2NjMwM0MzODA4Cis6MTAwODIwMDBENTg2RjVEQzg5QjEwMEVGMDNGRkFEOTJEQ0RGOTgwQkQ0Cis6MTAwODMwMDA3OTFCQzlFREQ5Q0RGMDdERTM1NDc3NjIzOEY2MzMzNUI1Cis6MTAwODQwMDBERTQwRjM1MTU5MkQ3RDc3RjI3NjFGOTk3OEJEQjkwMkJDCis6MTAwODUwMDA1RjFGMEFGQzAwNUYxM0RGN0JBNjQ0MTg5MTZFNEYzQUJFCis6MTAwODYwMDA0QkRFNzUxMkJFREQ4OTBBQ0NGN0E5QjIzNDg2NzI3M0VECis6MTAwODcwMDA2RUM1NUQ0RUEyOTdBNjI3NDg3RUNEMTYzODkwRkQ2MUM1Cis6MTAwODgwMDAwM0VCNDhENDdGRjlCRjM5RjNCNzg3MjEzRTY3OTY4N0RBCis6MTAwODkwMDBCNUMzMEVDOTNFMjg1RjE5RTk4MEY2MzMzRDZBQzAwMjMwCis6MTAwOEEwMDBGMjk0Q0RDODc3NzdFOTY3MjkzOEFFOUJDNkFENkUxRTQ2Cis6MTAwOEIwMDA5NDdBMjY4NDlFNEIyQzIwMjdBMEZGNDM2MTlFMEY4OEFDCis6MTAwOEMwMDA0RjBGRTU1MkY5MjE1MDRFQkUwMTdFM0E1NTk2QjYxN0FDCis6MTAwOEQwMDBGOThBOTVDOUYzNUZBMDE0RjFGMDdBODc5NUY0Q0Q5RTVCCis6MTAwOEUwMDBFOEExMDFFMTNGNTREMDI5RTI2NTM5QzczQkU4NUQ5NEI2Cis6MTAwOEYwMDA2Rjk4M0Q5OENFMjVDRjk5MzhEREY4RjY4NTExNUUwQkJGCis6MTAwOTAwMDBBNjU5MDlDRjlEQjNDM0I3NThBMEZDNDEyMUI3MUE2NkI5Cis6MTAwOTEwMDA4N0JCMTVBOEQ3RjA5MkM1NkY3MEQyNzk4N0VBRjk1RUM4Cis6MTAwOTIwMDA4QkE0N0VBQkNDM0M1RkY1NjIxQUQxRDMwMUIzN0ZEN0U5Cis6MTAwOTMwMDAwRTJDN0YzRDhDRThBMTJBOEE4RjVCRjU0QTkyQTAzNzY2Cis6MTAwOTQwMDBCNzczMTU4RUZCOUE4NUU4QTAyQURDMTE0REU1RkYxRUQyCis6MTAwOTUwMDA0Nzc0MzJEOUVBRjkxQkMyMEJFOEFFMTZGNTgyMkE3MzQ2Cis6MTAwOTYwMDAyMDNEMDZFMDdCNTJEMEQ1NDk2ODgzRjhGM0Q1NDZEMkM2Cis6MTAwOTcwMDBCQzg5RTUyMUVGNjlFOEJGMTVGMUU5MzFGMzcyRjYzRDc1Cis6MTAwOTgwMDA5NUNBNEZEQUY5RjgyN0Q3RjFGMThCN0Y1MkY5MzYwMzgwCis6MTAwOTkwMDBCQzlEMkM5QTk0MzgxRkU2NzFCMjM2ODJGNEJGM0ZEN0MzCis6MTAwOUEwMDBBOTAxNzMxNDlFNUYzQTFFNEY4NzdBOTc5NzlGMUVCOUNECis6MTAwOUIwMDAwOUU2REZCNkYyRTM2NEE0OEZFMjk1RDU4NUQ4QUVCODM4Cis6MTAwOUMwMDA2MkY5MTREQzM3N0JFMkNCRTIyQTYwRkUxMDNFNEU0OTJFCis6MTAwOUQwMDA3MUM3QTRDMDdBQzZBNjc4N0E2MTVBOTNENUI2MDBGNUQ1Cis6MTAwOUUwMDBFMENCRTZENjY3RjExQzkxMTRFN0U5ODNERkFGQkM3QzZFCis6MTAwOUYwMDA3NjA3RDc4RjNCRDI3MTNGNTg2Q0U0RjQyMUY3RDUxQUI0Cis6MTAwQTAwMDA0MTdGQzc1MzNDRkQ1MzcwOUYwODBGQ0NDM0ZEMjMyMjg5Cis6MTAwQTEwMDBBQjk1Q0JCQkU1MzcyN0U3Q0ZCNzZDM0ZBMEMwMzg5NTg4Cis6MTAwQTIwMDBFMTJEOEIyOTU1RkQzOUQ4Q0YwNTI1MTBBNUE0MTJGQzQxCis6MTAwQTMwMDAzQ0M4NEYxN0VEODEyODg0QkJDN0MwRjVCM0NBOUREQTA3Cis6MTAwQTQwMDA3NUUxM0YyM0NDQUIxMkZGODA3Njk1Q0RBQTNCMEM3MUFDCis6MTAwQTUwMDBDREZDNjY5QzdGMjUzMzA3RUIzQjgzNzg4MjdFMDg0Rjc1Cis6MTAwQTYwMDBDQ0Y2RTc3OURGMDdGODU3RUMxQTk0ODdFNzgwQ0E5ODQ1Cis6MTAwQTcwMDA0MzNGQkU4REVBNDEzQkM5MjdFQUY1NzlCOTlFRUJFN0QyCis6MTAwQTgwMDBDM0Q3Nzc1MUQwRkY0NTQ5RkZCM0NERjI1QzRFRTM1RjRBCis6MTAwQTkwMDA3RUI5MEY4RDdGNjFBQTNGMURFMTdGNTkxMUY1NzY1OTBGCis6MTAwQUEwMDA3ODNEQTAwNjIzQ0VGMzk3OUM5RTFFMzdGOTBDRTE3NDg3Cis6MTAwQUIwMDBCRTY3NDRDRjk1NzFDRDIzMTEyRTUyMEVDMTFDN0MwNjBBCis6MTAwQUMwMDBBODdGNjE2RjEyRDU5NzcyOEIxNTMxODZFRDJBRjcyNkI0Cis6MTAwQUQwMDA2RUU1RkE5OTM4OTdFMjQ0QTE3RUM1MkY3OEZGOTg0N0QyCis6MTAwQUUwMDAzRTNDRkY0MjkyMTg4RkVCQzc3QUZDRTlENzVCOUM2MkQxCis6MTAwQUYwMDBBMEY1M0UyRUU1NzdBNEU0NzM1N0MyNTQ4MDdGQzYyNjQ2Cis6MTAwQjAwMDBCM0E2RkVFNTQ4RjM4MzZFRTg3NzkwNUZGQjVERjY1RjgyCis6MTAwQjEwMDA5RUEyOTA3RTM2NDA4N0I3QkU2QUM3NjEwQkYyRDNGM0MwCis6MTAwQjIwMDA4Q0Y4NTUzRkFGOUExNDdFRkU3QkUxODUyRTNDQTkxQ0M0Cis6MTAwQjMwMDA2RkEwMDY0QUZBNzA3MDNEREM4NDcwRkVCMDBCMUYwRjg4Cis6MTAwQjQwMDAyNTgxNUNBRDQ0MThBNDA0RTE3MzIwRDc5Mzg0RjJGRjlGCis6MTAwQjUwMDAzMkU2NzE1Rjg4ODE3QzE2RUE0MTFDREUzMjJGRTFBQ0ZGCis6MTAwQjYwMDBBN0IzOTUxRjJFNDg2QTgzRjY0RjA5RjgwMDQyRkIyMDcxCis6MTAwQjcwMDAzRDc2RTkyRjI2Mzg1RjY0RTFCOUIyN0NEODk5MzQzQ0UwCis6MTAwQjgwMDA2RkQ2MEU4MkFEQTA2QjNEMEIzNkU1NUE5MTlGMTY2RTY3Cis6MTAwQjkwMDBDRUI1OTY4NEUwQTE2MUU3QjAxMzBFODBGM0M1OUQ0NjAzCis6MTAwQkEwMDAxNzhBRTUwNkEzRkZDN0E4NEYzN0VDNTQ5QjdEOENDQTc0Cis6MTAwQkIwMDBBRDA4REY4QkI2MjNCRkMzN0EwQjM2QzdFNEExQkUyQ0NBCis6MTAwQkMwMDBEQjJGRENGNEYwQTBCMjEwQjgwRkQ5QTlDNTQzNzZCMzdGCis6MTAwQkQwMDAzNjNGRjQ5MDM2QkYwRDY1NDNFRjZGREYyRTM3QTBDRDYzCis6MTAwQkUwMDAwRjNCQTFDREIzMEVDMDE2RTA0MUI1NzIzQzFEMUNFNTE0Cis6MTAwQkYwMDAzQUUxMDAzQzBERjBBQjJFRkMzNEMwMzY2REZBNjRENDAzCis6MTAwQzAwMDAyRjM2QUJBRTM0MjgxRkIwQkNFODlFNkNDODdGQjY3OUQ3Cis6MTAwQzEwMDBCRTBCRDE1Q0FFRkExNjdGMUY3MDU4RkVGMUE0MTNCODVDCis6MTAwQzIwMDAxRjVFNjBDREVGNEYwNjNDMkM2OEQ5NjAzNjNBNzBERDEwCis6MTAwQzMwMDA1QUJBM0Q2MDEwRjRGQTAyQjc5NzJERjI2QkNCQUZFN0NBCis6MTAwQzQwMDBFQjE1RDI1RTlBMTk0QTRGN0FCQ0MzQjhGN0I5NjE0MjI0Cis6MTAwQzUwMDA1NTc1Q0I4NjlEODEyREIzQkMxMDA4MUQ2MDM2QkE3OUMxCis6MTAwQzYwMDA4MzE5RjVCNjFCOEZFM0UzRjQ2MjczM0IxMDFFREU1MTZDCis6MTAwQzcwMDBCQ0VDRDZCQTA5RUNGNDMwRjg2M0REQkI5MzcwREVERTcxCis6MTAwQzgwMDAxRjI5QTQzNzc4N0Y5NTcxMENGNzgxRjY3RDczRUVBNjQ2Cis6MTAwQzkwMDBGNEJFMDI1QUJGQjRDQjJENkM1MTAyOTE5MEI3OEY3MjQzCis6MTAwQ0EwMDAxQzZBODM3NkYzRkQ4QTBCRTc1REQyNjgwOUNBMzNGOEM0Cis6MTAwQ0IwMDA1RkQ5M0FERDNDMzY4Njk0QzNGQzE3MUUzQUZDMzcwNUYzCis6MTAwQ0MwMDBGQTJGREZBQzZEQjcwOEU0MkNDQUFGOEE2RERGNTg0MjRCCis6MTAwQ0QwMDBCRkNCNzNFM0FEMkQ1QjU0NUNGNzdDMzk3RkRGNTg4NjY3Cis6MTAwQ0UwMDBFQkJBOTU1NzY1QkQ4NDdFNzMwNjMzQjA2RkQ0RjYyRThDCis6MTAwQ0YwMDAzQThCRkJDQUFEMUI3OTNCMTA5NzVFNUM2RkI1Q0RFQ0IwCis6MTAwRDAwMDBDMEY1NTY1QjU5MjAwMkU2NzEyMkQyRUNCNkMzRjdBQkIwCis6MTAwRDEwMDA5QjIyQzkxRUI2QzAwMkZBNjQxRUE1MkMyQzBGREJCOTlCCis6MTAwRDIwMDBBMkIxRERBN0VGNzBCQjU4NzUxQ0M3NzdGNTczMEE5RDlDCis6MTAwRDMwMDBBM0FBRDE4ODg5RjlFNzc5N0UxMTBCRDAzQTkwNEVEQ0NECis6MTAwRDQwMDBBMUVCRjM2QkYzQUM4OTlGQkZBQThDODFDMzA4OEYwQTE4Cis6MTAwRDUwMDBENkM2Q0Y0RjgwNDdCNzg0MUZDMEFCMEFENkY5NDEyQzA3Cis6MTAwRDYwMDBFQTVCQkFGNkNDRTVDMTcxNkI2QzVDN0ZBQTM5RjQ4RDk1Cis6MTAwRDcwMDAyNUI0NUM5RTAzRTUzOTU1REE2OTlGNEIyRjBBQzc3MThDCis6MTAwRDgwMDA1NjI5RUUyN0FEMzBDRjU1NDJCRkY2NkQwODIzRkE5REE4Cis6MTAwRDkwMDBCQjg1RUYzN0EwQzdBNjIzNUMzNjZFNDg3NEExOUUzMTkxCis6MTAwREEwMDAxN0Y0RjIzMEU0OUI0NUUxNTQwRkY0NURCMkFGNzQ4MDY4Cis6MTAwREIwMDA1RThERjZGNjhEMzFDRDAxREMzNzM2M0VFNjI0M0QxQUU4Cis6MTAwREMwMDBGNDVGODI0QkM3RkEzMEZGNTYwNUY1NjBBRUM3NkNEQ0E2Cis6MTAwREQwMDA5MDQxN0FGOEFCNzI5RjVBQ0ZGNUFFNkVGNDYyMkE2N0YzCis6MTAwREUwMDA3REI4MUVGRjExMkUyNTQ0MEY0RThERjdBNEE1ODZBQ0FECis6MTAwREYwMDBBQjZDQTUzQjExRjc5REIyNjk2NjAzREE5RDU4RjlDRDNFCis6MTAwRTAwMDBGOTBEQjYwQjNEQjIwM0Q2OEZFQjM4QTMxNDFEMzc4NDEyCis6MTAwRTEwMDBFOEEzMjM1M0Y5M0UzMjcyQkM3Qjg3QTg0N0ZFODUzMjk0Cis6MTAwRTIwMDBDM0Q0NDdFRkMwRjExRTM3Mzg3MEJDMkU3OEJCRERFOTY0Cis6MTAwRTMwMDAzODhGMzMxQkMyRjI5MENFNDY4RUU3RjY5RjkzQjk1QzkzCis6MTAwRTQwMDBCRTQ3MEM2NzZFM0ZBNDc3ODg3RUVGNDgzNTY4RDI4NDMyCis6MTAwRTUwMDA3MEEwM0ZFOEU3NEMzRUI3M0I0NzBFMkYyMjdCMUJFQ0QwCis6MTAwRTYwMDBENTI0RTdGNUVCQjg0N0Y0NTM2NjJFRkFGN0RCQkI5OUM4Cis6MTAwRTcwMDA4Rjg0MEY5QkM4RjU4NTMzNEI5NEFEN0M1RTgwNUZDODMzCis6MTAwRTgwMDA4RkZDNjkxOEQ5RTlDRTg4RkQ0N0MyMTlFODY2MDREOUY0Cis6MTAwRTkwMDBEQjg1QkNEQTIwRTg2NTgzODlEMzgxNkYxMTNGM0YwNThDCis6MTAwRUEwMDBFOTg1MTEzRDZDMTRFN0FDQjkwMkJGNkMzREQ3NkI4MThECis6MTAwRUIwMDA1RTM4OUNENzI3MEE3QTYxRUNFRjQ4MEZGOTBFQUU2N0NGCis6MTAwRUMwMDBERkU0NzkwOUYwNUU5QURBRkJGQTczOTNDNDM3MzNGQUY4Cis6MTAwRUQwMDA0N0ZDMjNGRjQ2RjVDMTNEMDc3Q0IwN0Y1NkZDRjJCMUNECis6MTAwRUUwMDAyODA2RjVDRTE5OUJFMjVERDBCRTZBRkJBQTI4MzdBNDdFCis6MTAwRUYwMDA5RjE5N0Q1MTc2MThGRjlDNUYyREYwNzcwMzZGQkY4MDlGCis6MTAwRjAwMDAzN0RBRDcxNTkwM0Y4QkYxNEYwN0VBM0IzRjlBODJFQkQ4Cis6MTAwRjEwMDBGQkVCNzY5MzFENDU0MkNENEUwQjlEOUYxNkVGNUY0NDM0Cis6MTAwRjIwMDA3QTM2RTREQjc5N0VDREU3MkFFNjBGNjlFREUwMTUzRkZFCis6MTAwRjMwMDA3RjJDREU0MUYwRjYyNTE5MTIzMDBEMjQzMTQ4MTc2RjUxCis6MTAwRjQwMDAzM0I5MDI2ODVGN0U0Rjc1QzEzMEEwMzc3N0FDQzZGOTAwCis6MTAwRjUwMDBFOURCRTMzQ0FFMDFCRTZCOUE1NUFGMzlGQUZBRjIxQUZGCis6MTAwRjYwMDAyMTVGNkFGNkZGRTg3M0I0RUJENUU4RUNFRUU1QzJGRjZCCis6MTAwRjcwMDBBMEI3QkIzN0E1NDZGNkZBMTQwRENDQjdCMDVCNTAwRjNGCis6MTAwRjgwMDAwMkI4QjgwMkM4QjczMDlGMzQyMjEzNkVCNzZERDhGNUQ3Cis6MTAwRjkwMDA0NDRFM0JFQTBCREJERThBNTJCMjgyNzY3N0U5OTdFODcxCis6MTAwRkEwMDA2QzJFN0QwRUVEOUEzREYxRTM2NTYxODcwREUyOEJDQkYyCis6MTAwRkIwMDAyREM3MjEwNTY1MDAxQ0QwNzk1QTY1MEE0NEREMDZGMDZECis6MTAwRkMwMDBBOERBNjIyMjM5NTNCNUU3RjkxRDRGMjE5RDdENjhBMTRBCis6MTAwRkQwMDBGREJDNzJDRjFCRUZERjhBRkFFRTNFNTNBRjQyQkUwQzcwCis6MTAwRkUwMDA5QjEyMUZDNDUzOEQ4M0RCQzkyNDVFMkE3RUY1ODZEOUVDCis6MTAwRkYwMDA5MUNEQkYyRjhGMERFMkE3NzJERjYxMzNDQkJFMUU4RTY2Cis6MTAxMDAwMDAxMzlBMEY5QkRCNkNEREUwQTlCOTdEMTJEOTg5NzY3RDNGCis6MTAxMDEwMDA2NTQ2M0UzOEY3QkFDMkZBMzhBRjZGNUZCRUU1OEQyODM1Cis6MTAxMDIwMDBENEM3MTA0RUI4MkY0OTdDNzVFMTRGNTcxRkZBOUZGMjc1Cis6MTAxMDMwMDBDQTcwQUE2N0M3NzM0NTRGRjg1QjgyN0IwN0QxNzcyNEQ0Cis6MTAxMDQwMDA4QjgxRjFDQjNGQjJGODBCMTFBRjdCOTc0NUUxM0FDRUU0Cis6MTAxMDUwMDAxQTZCMzk5RDNGQjMyQTFFRjVCQTcyOTMyRkRFNEUyOUMzCis6MTAxMDYwMDBGRjVFRkVFQ0MzNDQ3RjBCOTVEQTc4N0IxNkQxNzdBMjQ2Cis6MTAxMDcwMDA4MTc0MDY1RjIyQUU2RkZFRTY5OUI0QkUwNUNDNDNGNEUwCis6MTAxMDgwMDA1N0ZFOEM1QUU0ODdGNDRCMjMyQkQ4RDcwRDlGRjQxREMxCis6MTAxMDkwMDBDOEY5RTRFQzU2NDAyQUFDRUYyQ0RBNkQ1MDZFRkM1RUQ5Cis6MTAxMEEwMDAxNUU3REMyNUI0N0YzRjJDRDZDQUQ4NTJDQTdGMjlGNDc1Cis6MTAxMEIwMDBCNjRCQTk1RDdFNjU2QkU4NzlCMTY2REI5QTU2QzRDRjA1Cis6MTAxMEMwMDBGOUZFRUUzRTM4NEY4MDgzNEZDMDRCRjkwNkZBNTVERkVDCis6MTAxMEQwMDBDREVGQzNGMUMzMUNDNjkxQTIxREVDQTMxM0YwM0JENjA4Cis6MTAxMEUwMDA2RjM1QjlEMUVFMUREMjRFOUNFN0Y4RjgwRjg5RjE2MTRBCis6MTAxMEYwMDBERUUxNzg1RTNEMUJDRkY1NzZGREZBMEEwNjJBRDJERUU4Cis6MTAxMTAwMDBENkNBNDJFOUFCMjdCRURGRjYwOEQxRDUxN0VGNzFCOUQxCis6MTAxMTEwMDBCMkQ4M0ZCNTgwQ0E1QjREODEzRTU4RUUzRjNDNDMyMTdCCis6MTAxMTIwMDBCOTYwNjE4MUVFRjg3QTlCNDlGMEI1QjYxQ0U2Njk1NDY2Cis6MTAxMTMwMDA0MkUxRkIzQUQ3NDMxNzgwREUxNTA4RTFFMzIwREQ5ODUyCis6MTAxMTQwMDA4M0RGNjlERDNGMTVFQjY4MjNCRjk4RjRBNzJEMTRGMjA4Cis6MTAxMTUwMDA0MEJGNkVCRDdDRTgzNTUwRjhFMzg0N0M5MEVERDlFNjY1Cis6MTAxMTYwMDBFRUZEMzk0MUI5RTBBMzcxQUI2MDNGNDEzREEzRUE0M0Q1Cis6MTAxMTcwMDAwQkVEMUI1NTdCNEM0NTA4OUYwQkJCOEZCRTNGMTdDRjFDCis6MTAxMTgwMDBBMUNEOTI4RkI1RjI1NkNGQzdFNTJGOEVFODk2OEYyRjVGCis6MTAxMTkwMDBBQ0NCRUQ5RThGRTE3QkI3N0NCQzRFMjFGOUY2M0Y5NTQxCis6MTAxMUEwMDBCN0IwRDM5MUREQTAyNzdFNUREODgzQkMxRDNCNTAyQjBCCis6MTAxMUIwMDA2RkJGNjQ1OUQxQjc2MUExREQzQjgwRjBBMzgzQUI4NERECis6MTAxMUMwMDBBNzVFN0VCRTlGRUEyMEY4RUFFNTI3QzNEMDg4MTAzOEU0Cis6MTAxMUQwMDA0QUY4NDlGQTY0Q0M0M0UzNzREMUIxQTQ1MzQ5Qzc1RERBCis6MTAxMUUwMDA3NEFBNUZBRjE2OEVGQTcyQzM0MDQ2RjMyOTdBRDlDNDQ3Cis6MTAxMUYwMDBFRDY3MkQwQUU5REJEMEVFNzhEMjcwRTI1MzM3NkQ3RkQwCis6MTAxMjAwMDBBQ0U5Nzg1MkFGRDBCQzVGOTc2RkQ2RDU3N0VCRjI0NTlCCis6MTAxMjEwMDBCQUZBMUU1REJFNTY1M0JGRUFEMDUxMzMzRjFGMDQzNEE1Cis6MTAxMjIwMDBGNTJDNzVGN0QwMzlFMzdBM0RDMkNGRkQzRUZCM0YzNzUxCis6MTAxMjMwMDBGQjkwMkVGQTc1OTg1MTJFOUE1NjMyNUYyNEVBQkJBRjc2Cis6MTAxMjQwMDBBOUE0RUY1RTcxNzQ0NEExNUVCMjJBOENFQjZENTdFQ0Q5Cis6MTAxMjUwMDAyMjFGQzNGMzFEQkRDREFCNTEyRUNBRUYxRDYxREM0RTY1Cis6MTAxMjYwMDA3MkE1QTgyMzJBMjZFNDlDREVERUEyNDZBMTNEQjZDREM3Cis6MTAxMjcwMDBDRjBBQkE4RjEzNjkyMEI4QjZCMTlFQ0FCOUZFOTZBRjJECis6MTAxMjgwMDBEQTkyRUJEMDFFREFBNEJBODA0QzU4RDk4QTU5NTExNDlDCis6MTAxMjkwMDBCRkQwOTI3QUVGNkNGODNFRkYzNzJBODUwMTVDMDlFN0YwCis6MTAxMkEwMDA3NjA1RTY3MzFCMzE3RUEwOTRBMzkwN0RDNjdDOEY4RjVDCis6MTAxMkIwMDA4MTc1OTVCNkYwMzg4MkIyNzU1QUZDMkVCMENEODgwRTg1Cis6MTAxMkMwMDAzODUwRUU2OEZERkQwQkYxNUM5NzhBRTczREVERjcwQUJCCis6MTAxMkQwMDBCNjhFRThBRDQyQzcxNzFFNjFBN0Q1RjNDNTE2QzkxNzZDCis6MTAxMkUwMDBCOTJDNTdEODYzQzhDRkIxNTRDOEVCN0MzNUVCREVEOUU1Cis6MTAxMkYwMDAwMEZGMkIyNzU0NjY4MTdDNjc4QkNBNTZFMzdBNzcyQkQ1Cis6MTAxMzAwMDBFNEVGNDE4NzAwRjJEQjYyRTA0QjlDOEY4NENGNDVFNDQxCis6MTAxMzEwMDA5QjhDOUVGNTkyOEIyRkZENjVFNEY3OTE0RTBFN0M5Qzg1Cis6MTAxMzIwMDA4MzdFRDg4QjA3M0U0QzdGMTVGMzA3RkY5NEZDMzFCQkJGCis6MTAxMzMwMDBCRUZFODREN0ZGMzYwRkU1RjA5NUQ3MkQwQ0U5RkJDQTJBCis6MTAxMzQwMDBFQjZGMjZBMzVERjBDQTJCMTYzQTJGNUY1OTY5RTFGNkMxCis6MTAxMzUwMDBFNkQ3MjNGREU4OEZCQ0QyOUZFQkI5MERBRjdEOTVEM0M3Cis6MTAxMzYwMDA0NkZCNkUyM0UxRUJFRDgxNjZBRTM3QjVGQ0U3NDlCNDkxCis6MTAxMzcwMDA1Nzc3QjZDMEFBNTA5Rjc4M0Q4MkY4QTdFNjk1MzBGMjFECis6MTAxMzgwMDA2QjVGNzlFREFCOTFBMUYxMEZGRkQzRjU0OEZGRjU5NUI4Cis6MTAxMzkwMDA0ODM2RkI0NUE0NUJBMUQ3RDdCQzNBRkE3OUY0RTc1NkE3Cis6MTAxM0EwMDBFRjNGNkMyRTg1RjIwOUJGRkVBRjFDOTQ5RjU3NUVFNEExCis6MTAxM0IwMDA3QUQyNjU1M0RCQjM2ODZCRkNEM0MwMzkzRjM1MjVBMkM1Cis6MTAxM0MwMDA3RDBFM0FFQjBCREM5NkY2RTQzNEU0OTNFQkUxQzJFMUZDCis6MTAxM0QwMDA3MDA1RTA4MEVCMDJCODk0QTNEQ0VGMDkxRTk3RkY2NTZGCis6MTAxM0UwMDBFMUYxRjkzQzJFQ0Y2RTYxRThGRjBEQzI0NUUxN0U4NDRDCis6MTAxM0YwMDA5NjQ4QkY1NUExRjVGM0VGQUY3Rjk1ODNGMkU2NDZFQjM0Cis6MTAxNDAwMDBCNUE1OTk4OUFGRkY3RjU5RUZFMEI0N0Y1NUZDNzI3QTlCCis6MTAxNDEwMDA3RjcxQTA4M0M3RjVFOUU4RkU3QUJBM0VGODZGOTRERkUyCis6MTAxNDIwMDAxQkU5QTJGOURFMjRCRkRGRkQyRkJCRkVGRjFCN0M5NzZCCis6MTAxNDMwMDBGRkNCQUVGNzQ2RjhGRThEQzA3N0E0MURGRDhBNTc1RTQwCis6MTAxNDQwMDBGQkFGNjRGNjJERDZCREU2NUY5NkFGRkZGMUJBQTVCRTQxCis6MTAxNDUwMDAzRTVFNzU5REM4ODVGQTZGQjFFNkY3NUM0RUQyM0VCQTI2Cis6MTAxNDYwMDBENTNCRjZBNzQ5M0IwOTNGMUY0RDYwN0M5RjlFNjBBRDcxCis6MTAxNDcwMDAyNDdENzM0MkJGRjVBNDE3MzdCMDNDRjI0M0Y4RkFBOUI0Cis6MTAxNDgwMDBFNDhGQTFFMDBCODBDMzlCMDlCOTdFRjIyNzE5MDNGRDBECis6MTAxNDkwMDA5NjQxN0U3QzUyMzVDNTVCRTlDRjhEMTNDMjI3MTdBMERDCis6MTAxNEEwMDAzRTdBNzQwNUNDMEJGQTM5MUE2OUIwQTNBRjc4NjIzRjYzCis6MTAxNEIwMDAzNTYwQzlBMUI0MUREM0UzQzlGNzlDNDBCRDY1QTI0REY5Cis6MTAxNEMwMDA3QjdFQkE0Nzc3MUVCQUNCQTEyRDJGNjAyRkY2NDJGRjQ1Cis6MTAxNEQwMDA1OTQxOTY4OUY5NjEzRTkzQjA3RUM4QjlGMUE3Njk3NjAyCis6MTAxNEUwMDA4MkNCNURBQ0E5RDE2RUZCRjY3MDNBMjNFMDc0M0QxQzUzCis6MTAxNEYwMDBGRTMxRENBRTgzOTMzODI3MUI0NTdEM0REQzhDQjY0NzNGCis6MTAxNTAwMDA1QkIxOUQ5MUMxQjk5N0FGOTdDRUNCRjJEQzdCMjM3OENECis6MTAxNTEwMDAzMjcxOUUzNjhBQTEyNTdDOERGREI4OUYzNEE0NUY4MkVFCis6MTAxNTIwMDA4Qjg0RkJCNzg1QjdDNDkzMUVFRTEyQkUxMjZFN0EzQzU1Cis6MTAxNTMwMDAxQzQ0NjM1NEVGMjBGQ0ZCMTk3MzhEQzg3N0I3MEIzRDM3Cis6MTAxNTQwMDA3RUEyMzE4NkU3RkJCNUFBNDVDNDhGN0U4MkZCODQyRjNECis6MTAxNTUwMDA1QzQ2RDQ0RkM2RDk2MjI4RUU5MjM5RkFDN0UwNzkxNkI0Cis6MTAxNTYwMDA1NUNDNkY5MjE4MkIxOTE1MzM1MjgxRjUyNjE5OTlDRjQ2Cis6MTAxNTcwMDAwMkU3NERGNEExOTExREY1MTFBMzdGQTUxM0M3RTFGNjc0Cis6MTAxNTgwMDBEQUZFNDY2RTk3MDZFRUY2ODVFNzUxN0RCNzE5RjJERTc0Cis6MTAxNTkwMDA5RjJENjQ2RUE4RUY0RDYyMkU4NUQ3NjdEMUIxMTQ4RTUyCis6MTAxNUEwMDBDNjU0OENDQjgyMTREQjc5QTM3OUJGREUzRUNDQkY5MkNDCis6MTAxNUIwMDBFMzkzRjA4MkM3MjZCNDVGNDBCRjZFNDMyQzZGMUY5NTQ0Cis6MTAxNUMwMDA0N0VEN0QwNkRFREU2RDg0NzQ0MDJBQjdBRjc3QUNCMjlFCis6MTAxNUQwMDBEMEY5QzNCQkE2N0YzQUNBOEZDMkYxNUFCQjcxNzEzQTI4Cis6MTAxNUUwMDBCN0FCQzhGNENENzRDRUVGQUFDMTk1ODA3QTcxNDlFMzQ4Cis6MTAxNUYwMDAyMDNBMEZBOUUxNDVENTJGQTFCRDdGNkYwNEQxQTM3Nzc0Cis6MTAxNjAwMDBGNTAzOTM0N0UwRkNGNkM2Qjk3MDdBRTdBN0VDMUJDOTZGCis6MTAxNjEwMDBFQkNGNzlGODhGRjBEREIzMzM4Q0JFNUY0OEY3RjQ0OTM4Cis6MTAxNjIwMDA4NzdFQ0YyQjhFNzkyRkMxODc5Mjk5NDdDRDA5MzA4NDQxCis6MTAxNjMwMDBBNzc5RUEyNUI0RkY0REYxRURGQjFERkExOUE3Q0M1MEFGCis6MTAxNjQwMDBBOUZFMTRDNkUzMkI1OTYzMDRGOUEzMjdGQjNFMzcyNkYyCis6MTAxNjUwMDA0MDdGOTNFMUIwODFFNUVENjFGNkU0MjUzMDdGQUZCMEU2Cis6MTAxNjYwMDBGN0E2QTY3M0JCOEIxQUNFM0MyRkRBNzA1RUZERDM1MzYwCis6MTAxNjcwMDBFMEZCNjRENjdEM0NBRjU3RDYxRkFGNkM0NkZGRDA4MEYxCis6MTAxNjgwMDAwOURDMUUyRkVCNjMzRkQ4RUZDMjc0RUU1RkNEMTE3MDAzCis6MTAxNjkwMDA5MTc5ODAyQkQ1MkY1QjZCNjk0RkM1NzNDRjVBNTMyMDNGCis6MTAxNkEwMDAwM0QyNjczMkM3RTdBNTQzNzk2MTBBOUJCNDA5RTFGRTFCCis6MTAxNkIwMDA1RDk1NkRBNUY5NzY3OEM5Q0UxRDk5RTk0MDNDNzg4MDk1Cis6MTAxNkMwMDBBNDI5QkVCMEM5RTk0MEJCNTdGQkI4RTYwMEZBMDdEQTY3Cis6MTAxNkQwMDA5Rjc0QkExQTFDODQ2NThBQzc5MUU3QUNGNjcxODE4MTQwCis6MTAxNkUwMDA2ODk3RUZDOEU1N0U4NjkzRjZCNjQ4M0MxRjk2REFBQzVECis6MTAxNkYwMDAxNDlGMjNFMzdBRTZEQjM5OUYwRjY4Njg1QjdGMEI5RUJDCis6MTAxNzAwMDAzQjFGNTM1RDVCMjEzRkZGMzFFRTc3RjlDNDY2RjUyQjNDCis6MTAxNzEwMDA3ODVFREJDOEY5OTRBREQzQzZGMTMwQkI4QkVDM0RBNTQ4Cis6MTAxNzIwMDA0REUzQ0M3OEJFMkNCM0I5Q0RCOENFOEEwQzRGMTFBRUY4Cis6MTAxNzMwMDA4QjdEMERGMDFCODk3MTlDOEM5OEMxREJFNEE1MzgxMzVGCis6MTAxNzQwMDAzNTBBRjgwRUY5QzRFODg4QzI3M0FGM0UwRUE4NDZDNDQ1Cis6MTAxNzUwMDBGREM4RkNBMTMwQ0YxQ0VDQUYyNERBQjExN0U5RTU1NDg5Cis6MTAxNzYwMDA1RDJBRDkzRDM3MDlCQTJCQzQzODQ2RjQ0RjE4REIxMjJECis6MTAxNzcwMDA3MTNFRTFGODFERTA1RjE4NkI0RkI3MTEzRDg3MzE4NDcyCis6MTAxNzgwMDA0M0JCQzk5RThFRjREREJFMkFDQzgwN0VCNkMyOTU5QzNBCis6MTAxNzkwMDBBRTgxQ0ZBQzQ2NjhGRjg4OTE4NUEzREYyMDQzQjQyRjhDCis6MTAxN0EwMDA1RTYxMkNEQTAyRjk3RTU2NjY4QzhDNDVCQUNBMjVCQTdGCis6MTAxN0IwMDA2RUNCRjRFNDIwN0Q3RUY2MDMzNjBBRTlBMTc0REQwNkUzCis6MTAxN0MwMDBGMkFGNDhCQTYwQzZENjg5NzEzMENFNjdEQjlENzkyODAyCis6MTAxN0QwMDAzNzI1MURCNTY1OEVBRjREMEZBNTg3MTkwQUQxMDFBNDE4Cis6MTAxN0UwMDA4NzUzODkxRUE2M0Q4Q0ZEMTY4RTBGMEM1QzlBODVFN0VCCis6MTAxN0YwMDBEMTJBRTZDNkZEM0Q4MUI5NTA0RkU4NjQxREU0N0ZFQzc3Cis6MTAxODAwMDBCNDk5MUQ2OEU3OTJGMjQ0Q0EwREMwQUJEQjFBMUZBNDVECis6MTAxODEwMDA4MzFEQjBERjFCNEQ4Q0VEQUNCNzUyRkE0MkJEOUQxOTU0Cis6MTAxODIwMDA0MUM2RURBRTRGQTBGQ0RFN0EwN0E1Q0RGNTk5RjRGRERCCis6MTAxODMwMDBDNTdBMTdFNUY3RDc4RkEyRkM4MTdBMzdFNTBGRDUxNzYwCis6MTAxODQwMDA1MEZBNEE3RDExN0Q5NzcyMDlFMDQyNzI0OENBMTUyOTAzCis6MTAxODUwMDA4RjRBNkRFNjc2RjQ0NzRBQjlBNEE3OUI3OTAwREVCMUJBCis6MTAxODYwMDA3OUQ0OUVFNDlFOTQ3N0I4MEU0MzVFNTAxRTQ5RkNBNjQwCis6MTAxODcwMDAyODQ1QkUwNDI3Q0FCMUI2Mzk4OEZGN0NGNUUyOUU4M0FECis6MTAxODgwMDA3ODJFMkZCN0I5RTg5Q0NFQjhEQ0VCMDQ3QTQ1QjgyNEEzCis6MTAxODkwMDA5QkQ5MjFCNEJCMzYyQzcxQjdBRjcxMDZFMTdGN0ZCOUZDCis6MTAxOEEwMDBDMjhDMjE3NEY1NDA2RDE4MzM4NkVDMUIwRkQ2QzU2OEM5Cis6MTAxOEIwMDBGMkM1NzU3Rjc4QTMwRkY0NUZEMUNCQjMwQkYxNzZGMjRECis6MTAxOEMwMDA4NzlGM0VGMzI3RjhGRURDMEZDRkE3MjFCRTYxMUVEQjBBCis6MTAxOEQwMDA5RkMwNzE5Nzg3NzdDRDIzMTZGMzhEMjZGMjQ3MEQ5MDIxCis6MTAxOEUwMDA3NjEwRjg4Nzc4Mjk2MTlDREY5RUZCRTFERjg5QkZEQkZBCis6MTAxOEYwMDBFQjJDMEVENDg3M0Y0MjNDMDE1Q0ZGMkNGMDU0NTI2NzI2Cis6MTAxOTAwMDAyMUY4Nzk1NzlEREU3MzEwRjk3Q0I5OTlFNDVDNDlBM0ZECis6MTAxOTEwMDBFMEMzQjUwMENGMTBGRkVFQTk0NDQ2RjYwOEQwQTY1OUEzCis6MTAxOTIwMDAxREMwRURENDBGQ0M4MTA4RThGRjk0QzJGOTU3MDFBNTgyCis6MTAxOTMwMDBBMDE4RTNGRUQ2QkVGOTAxRjJCRjUyNzc4MkZDRTcxRTgzCis6MTAxOTQwMDBBQjhERUUzNTMxOUZFOTYyNjg3RjRBREQ3MUFBQzdEQTU3Cis6MTAxOTUwMDBGQUM1QTBCRDg0RjZCMTNCRDBFRkU4MzYzQjYwREQ0ODY4Cis6MTAxOTYwMDBEMzg4Qjc5MkNDMjMyQzExRkQyNjREOEExREZEMjY2NTA4Cis6MTAxOTcwMDBFMjdCRDk1QTg1RkM5MzE4NzczMzAzRjRCRTc3RDM1NUFECis6MTAxOTgwMDBDMjYzNjRCQTkxRDJDQTc0MjZGNEJBMjZEQTlGMjRCRDFGCis6MTAxOTkwMDA5NkFEODM3NkM4MTc0REI5RTYwNTIxNzJCODQ0N0MyRjAxCis6MTAxOUEwMDBDRDM0NTAyQUJGQjc4QjdFRkJBRUNEOUQ4REZBNDQ1RjAwCis6MTAxOUIwMDAyQ0NGQzIzNDZGMzZDMkI3QUY2RDkyNTEwOUMxRkZDNzg5Cis6MTAxOUMwMDAzOEZFMDg5QzA3MUZCRjEyOTEwQUZGRjc2ODY2OEE3OUU0Cis6MTAxOUQwMDA3RTE2RTI4N0VGNUY3MjlDOTJDQ0JDRDUxOEM3NTlCMkQ1Cis6MTAxOUUwMDA2RTFDNEE1RkQ2NjA3MjI1RjQ4MjdBNjdCQUZBRTE3QTkxCis6MTAxOUYwMDAxQkIzRjI3OEU1QUExRUY2MEY2OTNGRkIwQ0ZGMUM0REU2Cis6MTAxQTAwMDBFQjI2QkI2RUM1REU1RkVDN0QwNTdBQUVGOEQ4NDJGOEZBCis6MTAxQTEwMDBBRDE4MkFFMkE3QjJGQzIzQTc5M0ExNTE2QkFGOUVGOEExCis6MTAxQTIwMDA4QkJGNDQ5MUZGNjEzRjhGQUI4NDk0REI1Mzk3OTc3M0Q3Cis6MTAxQTMwMDBGQkFCMEJGOEFBMUJGRkNGQjFCRDFGNDc3NTZCQTdERTMxCis6MTAxQTQwMDBBRkRFOTQ5REJBNDZGOTNBMEFGNTA3Qjk5RUZDRDdCRUI3Cis6MTAxQTUwMDA4Q0E3NzkyOEQ3QzhGRjUzRjNEQUFBRjhFRUVFQ0ZFOEJGCis6MTAxQTYwMDBFREQ1NURGNjZDNjFCN0QzOTdFQkVENzU3RDMyNzQ3RTg1Cis6MTAxQTcwMDAwMTIzQTNGQjU4RDI1RUM3RDRBQzY4QjRFRjdGMjlFRTM0Cis6MTAxQTgwMDA2QkY0NzRBRTkxRjZFRDlBNEREMDQ5MUNGMEE3RDExMUNDCis6MTAxQTkwMDA4REZFQUEyQjNERThEMzBGNjZGMEZERkU5MkIwODc1RjY2Cis6MTAxQUEwMDBEOUFERDIzOUU3Q0FFRTQ4RTJBN0M1QkI3Rjc2MUNGREE3Cis6MTAxQUIwMDA4NzhCQjcyOTM0OEQ2QUQ2NEE3MDAzNzgzMjZCRTgzRTNCCis6MTAxQUMwMDA4NkYxNjY3MUQ3Q0ZCQkQzOUYxNjhERkI0OEU1MkYyMkQ5Cis6MTAxQUQwMDA2QjkxQ0UxNjM1MkJFRUVEMzA5RjRFQUIyM0JBNzdDODA3Cis6MTAxQUUwMDA3QzZFQ0JFMDc0NTY2OTY5MUU0OTcwMTZGM0NGQ0Q3MEQ5Cis6MTAxQUYwMDBEMDc3NTk2RjUxQ0JDRkM4N0UwQ0Y1MkU5MzFFRjRDQjA3Cis6MTAxQjAwMDAwOEY0RjUyM0JDN0Y4N0YzQkNCMDc5OTgwQkZEN0U4QjdFCis6MTAxQjEwMDA5QUY3MkQyNjNENjI3Nzg0MUQ4RjBDRTc0NTlDQjBFQzJCCis6MTAxQjIwMDBFN0NFMENDRTlGNzc2NjcwQkRFNTgyRjAwNzVERDhBQjNGCis6MTAxQjMwMDA5MjNDQzM3OTIyN0Y5RDU3QjRGMTc4OTM0NUJCQzkwMjhCCis6MTAxQjQwMDA2RTlGMEJGRTkyRjUxNzM1Qjc0NzBEODRGQTY3MEZGREIwCis6MTAxQjUwMDA4MUQyNTk2MjVEOEI2Q0FEMzlCOEZGOUVERDFGNDFGRUFECis6MTAxQjYwMDBBQ0IzRkI5RjlFRjQyQThDNzdBOTc5NUMyRkU0MDdEOTRDCis6MTAxQjcwMDBGRkZDMEMxM0Q1QkZCNDU5MkQ0MDc4MzEzRjhGN0JBOUEyCis6MTAxQjgwMDA0NkY4MEUwQjlENjdEQzE2OUYzMzk0RUY3OERDQ0Y4NTBCCis6MTAxQjkwMDBGREJGOEEzMjY0MDVGMTU5NkRGNTU4RjE1RTYzQ0Q3RTYzCis6MTAxQkEwMDA2RjExQ0E4RENGMTQwRTRGRDNGRTcxM0VCQzhGNTREMzJDCis6MTAxQkIwMDA5MkNCOTA5RTg5RUYxMkE5RkU1QTQzNDgzREIzQzk0NTg2Cis6MTAxQkMwMDA0MkQxNzg2OEFBM0I4OUUwMkNFRTEzODk3ODc5QkMxRjUyCis6MTAxQkQwMDA4N0YyNjdFOTU0MkJGOTI3RTYwRDc1Q0NCQTFGRTVFNEM3Cis6MTAxQkUwMDA1QjI2OEU5NzdFOEUyNzUwN0Y5QkY3NEUxQ0M1NEQyRDEyCis6MTAxQkYwMDA3NTNBNjZFMUZDOTdCREFCNTJCQ0VGQkM2MTQyMEUyNDY2Cis6MTAxQzAwMDBCNDhEQzBCOEM1QUFCNTBBNzNDMzNBREI5RDVDNkZBODkyCis6MTAxQzEwMDBGMkFCQ0MwM0Y5QkU0MDBGM0UwMEM1RkE4QzE0MjE0RjQ1Cis6MTAxQzIwMDAwM0U5NzhBRkVGQTk3MjgzREIwQ0ZCREY0OTMzRjNBOTNCCis6MTAxQzMwMDA2ODM3N0E5MUM3MzM1N0E1RjBCOEUxQTc5MEVFMjFBRDg4Cis6MTAxQzQwMDA4QTBEQTRDNzQxN0YxNzA1M0VBQkE2MDVEMjMxNEVBMjJGCis6MTAxQzUwMDBFQUM1NDQ4QTkzQjg2OEU2N0U0QkZDOEU3RUQyQUEzQ0U1Cis6MTAxQzYwMDA2ODBGRjU3QTg5Nzg1ODZDMUYxMzQyM0Y1NTI1MkUwNzY3Cis6MTAxQzcwMDBENjUzNjM1RDhFNUMxQkNFRDc3RTk5RjREODk3MjIxOTFDCis6MTAxQzgwMDBFQUIxODY4MzkxM0NDRUU5RTc2MTVCMkQyMTc4REE5MjU3Cis6MTAxQzkwMDBDMUY1RTU1RTAyOEY2QzJFOEY4NzdDNUNDNDYzM0ZCRTBFCis6MTAxQ0EwMDAzREQxOEZFNzM3NTlGRjcxOTM2NzBFQzIwMUQ3ODFGQTkzCis6MTAxQ0IwMDBGQjIyNzM1MzNBRUFCNzcyQkU4QkEyOUE2ODlFMTcwNTRECis6MTAxQ0MwMDA3RDJGMEE2RkUyRjFEMkUyOUUyQ0Q2Qzc3Q0JCODk1MUYwCis6MTAxQ0QwMDAxQzc3QzcyRTBCQzU5MzlDNEY2QzNEODBFMzlGREYzNTZGCis6MTAxQ0UwMDA4OEUxRkFEQjlERkUwNTg3QTgxQ0Y0NDdDMDVCQzUwQkE1Cis6MTAxQ0YwMDA5NjAwQUVFN0RDMkU2RTZGM0U2N0UyRkFEOEI5QTkwOTBFCis6MTAxRDAwMDAwRUM0NUJDMUI0NERGM0M4MUVCM0NEQTIyMERFQ0YyOUYzCis6MTAxRDEwMDBDQzlDODBFNURCN0JCQjdDRDhCRUJFOEVFMkE0MkI0MDk2Cis6MTAxRDIwMDA0Q0UwN0QxQzQ4MEJGMDVFQ0RCOUVEODMyODNFRUNEQzI5Cis6MTAxRDMwMDA2RjU0QkMxMTg1REZEN0UyNzcwRjZCOUFGNzNEODRDN0VDCis6MTAxRDQwMDA0RTdFN0UzQUZGQzI3RjBFMEFCRDU3MjZEMzhBNkREQUQ5Cis6MTAxRDUwMDAzODM4NDkyN0IyRkM0ODA2QjcwRjFDMTE3MDNFOUVDMUE3Cis6MTAxRDYwMDBGN0FERUE4OEU2Qzc1MzY4OUQxQ0VFODAyNzNBRjdDMUI1Cis6MTAxRDcwMDBDNjFGRjlGNDcwOEM4MzQ4NTM1MDZFM0MwNTc0RjUzNERCCis6MTAxRDgwMDBEQTE1NzZGMkYzRDVGOUREMjY4QTBCQUYzODE4RTlBNjE1Cis6MTAxRDkwMDBCOEIzMzVCNzE4MjgwRTQyRTU3QTc4ODUwMUMwNDdBOTRGCis6MTAxREEwMDA0MkZENTY0Q0NCQTQ3QkJCMDA2RjNBQzc3NjZDNTdDNTNGCis6MTAxREIwMDAzODhDRDk3MEREM0I3ODlDNkYyMUVBOEE1NDlFNERFNUMyCis6MTAxREMwMDBFNzQ0RkVEQzgxNkNEMkVCQTA3RjM3REU1N0FBRjhERTU5Cis6MTAxREQwMDBGNzM5MUNBNzk3QkZDREM4OEU2MTI1Rjk1QUQ1RTVDNzNECis6MTAxREUwMDAxOTEzOERGQjVERjU5QURCQTJGMTNFMUY3QjQ3NjVBOEI5Cis6MTAxREYwMDA5RkU4RTE3NEQ1RThFQTgzNzJCNTc3QTY5MEIzMDc5RUIxCis6MTAxRTAwMDAzMUEzM0NBODE0Rjc0MzJBNUY1MEI4M0YxOUY4MENFRkYwCis6MTAxRTEwMDAzQjU2QUVCRUVEMDlBMkNGREY5OTU4MUFBQ0U3NjJGMzhDCis6MTAxRTIwMDBDRkEyMzRGODEwNzJCMEFCQkVEOTQ1RjUyQkExM0VGNjY3Cis6MTAxRTMwMDA1M0I5RkFBRDI4OUFDRjBFMTNDNTk5NUNCNzVGREQ2QzI0Cis6MTAxRTQwMDBGQjE3RDQ5QjZBREY0NTFGQ0REQzhFNzJEREZBNTlFQkEwCis6MTAxRTUwMDBCRjdEMENGRDdGQjEzQkNDRTVBM0FGQ0Q3NEFGRUM4MjcxCis6MTAxRTYwMDBBOTc5MDFBRUZGQzI5RTMwOTI0NzE3NjJCODdDMzgwQjQ5Cis6MTAxRTcwMDBGMkQzOTc4MUYzQjhFNzI3MTQ5N0Y1RkJFOTc0MUY2RTQ3Cis6MTAxRTgwMDBBMTVGREJBRjFDRDc5ODY5RTI3NDE2RTc4QUM2QjhCRUJCCis6MTAxRTkwMDBFQTc3Qjg3QzAzQkNEQzRCRURERjMxNTE3QkZEM0E0RTc5Cis6MTAxRUEwMDA2N0YwNzY1REZDQjkyNzgyRThFMTQyNUY4RTk3MEI3Qjk1Cis6MTAxRUIwMDAzMzY4M0Y2QThGRTE3NDBFRjM0REM2RkI3MzE3RjY2NDA3Cis6MTAxRUMwMDBFNEQyQkQzNDU0NkU4MDFFMkFDNEY5RjY0MjRDNzNCMjdCCis6MTAxRUQwMDAzREE0QkNERDI0Q0U2OTAxQTg4OTc0ODM2RDQwRUZBQkJECis6MTAxRUUwMDBBOEUzN0E1NUE1NzUxREM1ODc2MDVDRURDODNDNEEwMzFCCis6MTAxRUYwMDA5NkQ4RUJFMzYzODE1RUU5RkM3ODdGQTZCMDUzRTI3ODg1Cis6MTAxRjAwMDBGMTIyN0U5QkY0OUQ2NjMzQ0E2RjhGRDAwQkFCNzZFQkNDCis6MTAxRjEwMDBFMzZCNzlGOUFEOTk4QThDMDM3MUY0OTJGMUJDNDg4NzJGCis6MTAxRjIwMDAzRTg1RTI0QzJBMUI5NzJDNDIzQUFGQUNERDcwM0ZGMjYzCis6MTAxRjMwMDA5OTlDN0ZBNTkxMTVFMDM5QUM1RDUxNjkxRUVENjFFQzZFCis6MTAxRjQwMDBDMTY5Qjg2Rjg0OEUxM0FBQjdDOTc5RTI1NEUzNDk1RkI3Cis6MTAxRjUwMDBBNTdERUNBRTRDQkVBRjYxQkUwOUZBQUI2QTU0RDZEMURBCis6MTAxRjYwMDAzODRFNzk5RUU1RUI5MjcwMDI3MDk4MzFBRUFGN0Q5QzUxCis6MTAxRjcwMDAyOEVGNjFERDcyOUVGQTc1Q0JGOTNDOTBDOUU1NTFCQjQzCis6MTAxRjgwMDBEM0YxOTMzMTg4RTdERkFBNzQzRkY2RUFEN0MzQTI2MzlGCis6MTAxRjkwMDBCQkQxQ0I4MkZCQkEzOTE4REY4QUYxQkU0ODdCRDA0RjY4Cis6MTAxRkEwMDA0RTI2OTc2Qjk1MTgzRjBCRjM0Q0RGQUM4REVCQ0VEQ0Q4Cis6MTAxRkIwMDBBNkNEMEZERUFEQ0Q2N0VERDdFNjczNUFCNDc5RDczMTM0Cis6MTAxRkMwMDA2RDdFMUE4RURCOUI5RkIzRjEzRTJFOUVCMzMxQzU3MzlGCis6MTAxRkQwMDBCNkMzQzJDRkQ5OThDNzczMzZBNjc4Q0VDNkVGNzhDRTJGCis6MTAxRkUwMDBDNjNDOUVCMzMxOEZFNzZDQ0M0Qjc4RTM3OTFCRjM3ODFBCis6MTAxRkYwMDBERUM2RjJBNzA1OUNBQTQ0OUMyNEUyMDFFOTlEQkQxQzEzCis6MTAyMDAwMDBBNkI5RUY3M0U1MzU3RThGMDNFODgwRjNDRDFDMzNGMTdECis6MTAyMDEwMDBDRDUzNTg4M0NFMUREQ0FFRDQ3N0JBRDU4MUYxQkU4RkI3Cis6MTAyMDIwMDBDNDdBNTY2NUEyNUY1NDY5NUQ5RDg4NzgzM0I2NTFEQ0U5Cis6MTAyMDMwMDA2OUNEMkIzQ0VFQjQyQTJGQ0M4NkY2OERCNjU1Njc1NzZBCis6MTAyMDQwMDA2MzM4RTcwM0IxOUU0N0IxRkUxNTUzQzcwRTg0NkY3NTIxCis6MTAyMDUwMDBERDUxQkFCRkRFQjZDMkYxQ0UxRDFDN0Y2NDY3NjFFNUZCCis6MTAyMDYwMDBCMUE0Mzc3OTcxOUY4QkVEMTk4RkZBQjg2RkI2NEUxQkZCCis6MTAyMDcwMDBFN0FEOEZGQkQ2Qzc3QkVCRTk0MEVBN0JDRjk5M0ExMkZECis6MTAyMDgwMDA1MUFFOUZERTY1NUQ4N0YzM0YxRDI2RUU5RkNDQjZFQTFECis6MTAyMDkwMDBGQ0ZENDI0RjVCQUY2Q0M1RkRGQTE3OTlCMURDQUY3MjI2Cis6MTAyMEEwMDAwMkY0RjM2RUY2NTk5OTk2NUUxQjQ2N0E3ODU3N0U5RDM4Cis6MTAyMEIwMDA2MkEwN0I3MTA5RjFCNDBGMkQxMzczNEE1NjNBREFENzM3Cis6MTAyMEMwMDBBMDlDNUI2NEEwN0RGMzJBRTg2NTM4REVENUY3NTREMjg2Cis6MTAyMEQwMDAxRjMyMzYxOTM0RUIxOUU0MEZEN0QwRDc5MDlEQjFCQTFGCis6MTAyMEUwMDA3QjBEN0QzNUY1ODcxRTRBRDFERDZCMThBQzhEQTM5RjI2Cis6MTAyMEYwMDBCMUUyMzA5RUVGQTdBRjFCQTZBOTU3NTY3NDlCMEU4RTc4Cis6MTAyMTAwMDA2MkRFNDI3RjJEODNGREMzMERFQjdCNkFGOUE2NjRDNEJBCis6MTAyMTEwMDBFRkIyNDU5REVENkI1MDNGN0QyOThDRUU4NTk1RTNGRjM5Cis6MTAyMTIwMDAwM0I5NTgwRTdERTI3REM2RjJGREUyM0U3MDlENzYxRjNBCis6MTAyMTMwMDAyRTE1RkI1MEI5OTFGOUVDQjE0MTNBMkNCNzMzNzcwQzFECis6MTAyMTQwMDBCNDVGMzRCODM1Mjc4MEU3OEFERkZDNjFBNDNEMDVDRjUyCis6MTAyMTUwMDAxNUUzRkFBMDNDNEEzNkI5MjkwRUI2NkE1RjVBQ0MwQTkyCis6MTAyMTYwMDBFOEY3NThBQUU3QTM0Q0MwQ0I5OUE2QTMzRjJFQzZGRDFCCis6MTAyMTcwMDA3MDFGM0ZFRjlENUVGN0FCMjg4QTEzMTNGNDk2NkNCMjg1Cis6MTAyMTgwMDA4NzIzREVCNzM0RjFGODM4QjQ4RkE5QjE0MUJBRDhEMjc5Cis6MTAyMTkwMDAxNDE3M0VEMDE2NUM2RjkwMEVCRTI2M0MwMTdFQjgxRDEzCis6MTAyMUEwMDBBN0ZDMDhGOTNEM0E5QkM1N0FDNzI5M0VENEE3RTVGQUIyCis6MTAyMUIwMDA5NjhBN0Q4NTBERTRGRDNDMjRGMjY3QzRGOTQyQUVGM0I2Cis6MTAyMUMwMDBFMkEwQzMzOTBFQkM3RjUxN0YyODU5NDU3OTZFRDhCRDM2Cis6MTAyMUQwMDAyMzExRDJEMTE2Q0Y5N0I4OUVGMjJENjk3RjFBMDNFMzRGCis6MTAyMUUwMDA1NEZDOTFBRkU3OTM4RDEzQTI0NkEzRkVCOUM3RTQyQTJFCis6MTAyMUYwMDA4NEZDOUFBNkU3Q0Q3OENFQUUzMEZBQ0QxNDVGQjk2QkU5Cis6MTAyMjAwMDA4QjE5RTM4QkVGRENCOTg1QkUyRkQ4RTlBNTc4Q0E4NTk5Cis6MTAyMjEwMDBBQzk2Q0U5RjlGQzk3NzA0MDQzQ0NBQzcyQjlCRUQzMDc4Cis6MTAyMjIwMDBFRkI5ODNCOEZDMjgwRkU3RkUzQkQwOEZERUMwRjczQjQ5Cis6MTAyMjMwMDBBRUVFNTQ3MjMxOEU2NzQ2RDEzRUIzMTdCRTQ3MEQxMkQzCis6MTAyMjQwMDBGNzgzNzQ3Q0QyRjlGNkY0RkNERTA0MEY3RTVGRTM4RjMzCis6MTAyMjUwMDAwQzRFRjFBOUQ3RjNDNUY0NkI0RUUyOEIxOUQ3ODZEMDlCCis6MTAyMjYwMDBCOTZDNjY2MDEwM0ZGRjY2RTlDRUJGNkZBQkRDNUVENzJFCis6MTAyMjcwMDBDMkY5QTBEQzFDRTgzNTFERjlFNDc1MTNFOUI5RDVCMDQ1Cis6MTAyMjgwMDBERjhDQ0FDMzczMzVFQzhEOTAxNjhENTEzNUY0NUEzM0ZCCis6MTAyMjkwMDAzMTQyNDNDRkIzNTlBQ0U2REVDQjdEMTgzNDEyOTI5RjY2Cis6MTAyMkEwMDA1MTk4QUFBOTNGNkJDNjEwMURGREU3MDVDQjQ5OEVEQ0VFCis6MTAyMkIwMDBBQUI5NUY1N0JERENFNzUwNDhDRjFDQUZGRENFNzg5Qzc0Cis6MTAyMkMwMDAyMDYzNzc2QkRBNTdCMzY5QzE3QTQ4REZEQkI4MUU1Q0VECis6MTAyMkQwMDBCRDNGNjYyQkRBRkJDQTBERkNGQzM0REJDM0JGMkYzRUNGCis6MTAyMkUwMDBDNEJGQjNEOTRDQzM4NzAzNTI1RDdGRTJGQkEyODlGQzE0Cis6MTAyMkYwMDAwMkQyOUUzRTFCRkZFRTA2RkU4Qzg1NzdERDBGQzc3QjZDCis6MTAyMzAwMDBGMTY4OEZEMERDOUYxNkZFNDA5QzM3RTJBMTVBRDg4RDMxCis6MTAyMzEwMDBBQTMzQjlEREE4REFENzZBQzY3NzA3MDBGRUM2Qjg1ODZGCis6MTAyMzIwMDBBQTY3OERDM0Y4QzgyNjg1RUM4QTk4MkVBNzc4NDk2REQwCis6MTAyMzMwMDAxQzE2RjY4NzcxOEM4QjRGQTg1RUU0MTM3RDc5MzlCRTJECis6MTAyMzQwMDBERjgzRjg3RDg1Qzc5NTJFRENBNDhGODM1QzQ3RkVDOEFDCis6MTAyMzUwMDBDNTY4MEYwQUMxREI1MzgzMUM0MjVGRjFBRkVFOEJGMEZGCis6MTAyMzYwMDAyQjU0NzJFOTVFRTRFRUMzNjY4Q0IzOUIzMTIzMjYxN0NGCis6MTAyMzcwMDBGOTQ2NEY1RjUyQUUwMzNGRDNGOUJCRjNFREEzNDQ1RjgxCis6MTAyMzgwMDA5REU1NDZBMkRGMUJDMTYxQjE5QkRCNTFGNTc0Qjc4MEFGCis6MTAyMzkwMDBCNTlBRjE5RUY4ODJGRDhBMEJDRkEzNTgwRkUxRDExN0IxCis6MTAyM0EwMDBFOTUxMDc4RkI4RDhFQkUxMjBFMUQzMDVBRkZERkEzODRBCis6MTAyM0IwMDAzNzBFQTc4NTg3MTQ3RkEwMUIzOEU5RTdERDEzRENFNDFGCis6MTAyM0MwMDA3QTE2NzgzQzkzNTAyRUM4NzUyREM0Rjk2M0ZGMzA3RjgwCis6MTAyM0QwMDBFQzVGRkEyMUQ4MjgzRDdGQTY5MjdENkE3MTExOEY4RjFDCis6MTAyM0UwMDBENUQzQzNCNDZCRENFRTcyREYzNTIzQTUzMzBBQjVGQzVECis6MTAyM0YwMDA4OEVEOTAyRjY2NUU4QkE3RjI2RjRCMkY4QjYxOUVGQzUyCis6MTAyNDAwMDBGRUQzQ0REMTg5NUM4Nzk0QkI0MTdFRTBGNzA2NkVGNEE0Cis6MTAyNDEwMDBCRThGREVFRUI4NjM5MDg4MTMxQ0MxNDY2OEUyOTE4NURBCis6MTAyNDIwMDA1Q0Q1QjdEN0M3MjM0QjNENDBCRkJGNzgyMzBEMTQzN0NBCis6MTAyNDMwMDBEOTY5NEIyMUZENDJDQTU5OEZEODNGM0NBQkJFQTQ3QTIzCis6MTAyNDQwMDAxRUE4Qzc2NzEzQUZEOTZGM0NDMkZFQjczNDMyODVERTEyCis6MTAyNDUwMDA2MzQ4NUUxMTE3OEY3OEYyODZEOTI5RkVERUJCNDJBNTRDCis6MTAyNDYwMDBCODY3MkZENDczODRFODI3QUIxQjUzOTM3MUJGMzhGNTNCCis6MTAyNDcwMDA0OEM2QjMzRUQwREI0RjdEQjc1N0ZDMjgxOEU3RjQyQTk3Cis6MTAyNDgwMDA1MzJGQUIyMzU4RUZENEFBRkM2NDhDRDMzOEJEQzEzMjkwCis6MTAyNDkwMDBEQkRGMERCQzVBQzVGRTUwRkRDMzBGNjgzRkJCNjQ3ODNGCis6MTAyNEEwMDAzQjZBMzZCNEFGNUFGNTUyMTQ4NkY5NTdBRUUyRkI3ODYwCis6MTAyNEIwMDA3OUFBRTc5RDQxQkQ3MTNGREZCMkMzOEVGMEIzNkZDOTBBCis6MTAyNEMwMDA0MUJCRUY0OUQ4MEVCMEJERDQxRjJBNTZFNUY3NDFGREY4Cis6MTAyNEQwMDBBMkVBQkY4RjNFNkJDNzdCRDYyQjRDRjFBODdGOUU3QkI5Cis6MTAyNEUwMDAwRkY2NDM4NUY2MzNEMjFCM0UwQjgzMkVDODlGMTY0OTQ5Cis6MTAyNEYwMDA3Njg0Q0YxNEU2NDZCRkQyNDVDM0UxQkZBRUMxNzM2MTU3Cis6MTAyNTAwMDA2RTczN0EwMEQyRUY1OTNDMjc3MURDQ0E1NUNGOTNERTQ3Cis6MTAyNTEwMDA1MkYxRTg4QTc0NTVDNTdFRDNBMkJCQjM5QkM4NzQ4N0I5Cis6MTAyNTIwMDBEOEI3NTE3RkM3MTRGNTc3OEM5MzQxRkQxREYzQThCRjMxCis6MTAyNTMwMDA2MzhBRkEzQjdFQUZEOUE0RDVGRjJFQTc3MTM5MjVFRDZBCis6MTAyNTQwMDBDOTAzMUEzQTcyRDE3RkU3MUJDRjMyNkI2OUJGQjU2NUY5Cis6MTAyNTUwMDBBMkJFQkU0QzA5NzdBMTNDNUE4NkJBMTJFNkZGMTI0NkNCCis6MTAyNTYwMDBFNzU4QjYyRDkxRUZCNzAyQ0Y3NTU2RUUzN0ZBNEFEQzMxCis6MTAyNTcwMDBDRkJEQkQwMzc0QjIxMEZBQkNFMzlBOTU4NURFOUIxREY2Cis6MTAyNTgwMDBDNzYyMzRGOTA5RDY0NDRERkQ3Q0JCNTM1MzdFNjdDMjA0Cis6MTAyNTkwMDAyMDRERjk1RDhFNUM0REZFOUVDQ0QxOUFGQTkzNURFM0ExCis6MTAyNUEwMDAzNEY5N0I0N0REQTVBOTNGRDUzRDU1OTM5RjVFMzA0NzY0Cis6MTAyNUIwMDA1MzdGNjY5MTU3NTMzRTZCRjYyMjRERjkxQ0NGMTI0RDU3Cis6MTAyNUMwMDBGRUZFRjJFRjZBRUEzRjUwQkI0MjUzRkU5NTAxNEVBNDc1Cis6MTAyNUQwMDA0MDJGMkQ3OEVFQjJFMEZCMjk1NjRBQkZBM0RBOEQyOEIyCis6MTAyNUUwMDAzNzk2RkQzNkNEODZGODFFMzNDMTUwREI5RDdEM0Y2M0E3Cis6MTAyNUYwMDAzMEQ3ODdDQTg2Qjg1MzA2RjdFNkVGRTAyMDNERjYxN0Q2Cis6MTAyNjAwMDBFRkRDOEMxOENDRjE5OUM0ODBBQUU4QkNEQjlBODhGNDgyCis6MTAyNjEwMDBBQkFGQTcyRjFGMTM3MUU0QUEwMzcwRjg5M0MxNDM2N0YwCis6MTAyNjIwMDAxQTQxMEU4REI5RTVDOEIwNTRDODlGMThCQzYwQTYxMUY4Cis6MTAyNjMwMDBFNEM2OThEQjhFRkMyQTA1RjJBRDgzN0ZDMUNCODcxRUYyCis6MTAyNjQwMDBCOThBRTVCMzg2NTRGMkYyRTk4QzU0OEYzRkJGRDA3NzU0Cis6MTAyNjUwMDBBNjBGRTc3RjQ3Q0EzQTE3Qjc5Mzc0N0JDRjVDQTYwOEVCCis6MTAyNjYwMDAwN0JDQUY4RDcwQzAzNDAwRjQ4QkU5MTFBMDVGNEM4RkI0Cis6MTAyNjcwMDAwMUZEOTY4MTdDM0EwRUY0OEJFOTA5Mzg3RkUyRjc3RjAxCis6MTAyNjgwMDA4N0YzMjdBNjZGQzNGOTEzRDNERkMxQjkxM0QzNTYzODI1Cis6MTAyNjkwMDA3NzYyRkFGQkZBRDk5NEJFNTdFRkExNzZFRkQ3OTc1MzNBCis6MTAyNkEwMDBGQTQxN0QyRDdERkZBOEJFOEVEMjNGRDdGQkU4RkJENDNCCis6MTAyNkIwMDBDMUQyOEUxMTYwOUFGQjAxRTg2NzQ0N0ZFMjIxRDNDNTQ1Cis6MTAyNkMwMDA1MDNGQjBGNDU3NEFGRjY0NDMyRDZCOEI0MDc5RDE2NjdECis6MTAyNkQwMDA4Q0Y5RDQxQUY0M0JGNjZDMDczMEIyNEY0M0Y0QjE2ODZFCis6MTAyNkUwMDBFNjJFMUU0Q0ZBNDIzRjNCQzk2RkYxRERFNEYwNzgxMTUzCis6MTAyNkYwMDBDRjdGNzQ0RTRGMUJBNkUyQkU1NUZCMDZCQTY1RkY2ODNFCis6MTAyNzAwMDBFOEZFRERDNDExODIzRTQ2MEQ3MTJGMjBGQTEwRkU3NUUxCis6MTAyNzEwMDBFOURGRUU4QTlCMDlGMUJGMUI0MkUyNzVFODVGNDhEQzA2Cis6MTAyNzIwMDA4REY0ODNDQjM4OUZEQkFERkM5RUIxRjQ3M0NCNzgxRTY4Cis6MTAyNzMwMDBEOTVGRkUxNzhDRTRDM0Q4QjU0NkQyNUYyMjhEMkM4MEJBCis6MTAyNzQwMDBGRENCQjg5REIxRDZFNjVDOEM2MzE4NUI2NUEzN0JCNTA5Cis6MTAyNzUwMDA3REUwQkIzOThGRUFCOTU1NDhCN0ZEMERFQUU3MDRGREM2Cis6MTAyNzYwMDBFQTdEQzRGQ0ExOUNFNjlGRkY4NTg3RUNCMDYzNDU1Q0Q1Cis6MTAyNzcwMDAwMUI2QjdGMjcyMUZCNjFGOEJCNjg1RTE5NDkyN0M3QUQwCis6MTAyNzgwMDAwNkVGRURFNjA1RkRGQzU4M0Y4MkQ3MEY2MDdGMDNGRkEzCis6MTAyNzkwMDAwRUUzNDUwNUY5QTY3RjZDNzMyRUNBRUJGRThCNkQ3NEI0Cis6MTAyN0EwMDAyRjc0RjNCODAwQkQ2NzQ1NDYyNzgwQ0I3NDc5N0VCMjlECis6MTAyN0IwMDA4QUJDRjRFN0VERUM0Mzc2QTQwOTgyRDdCRkVGRjA2QzU2Cis6MTAyN0MwMDA0MkY4MTc1OUVDN0Y4OTIwM0U0QkVEOEZGNkM5QTk0MjlDCis6MTAyN0QwMDA3RkZFMDc3ODdCMDZFOTQwQzI1M0UyNDVFMjUxRTIyM0RGCis6MTAyN0UwMDAyNDdFOEFGMEQwMTM1RUY1RjhENEUzNTFFMjJGRkY4QkZDCis6MTAyN0YwMDAyMDVFMTBBRUQ3RTMyRDg4NTdCNEU3RkVBQkUwNkRCODhFCis6MTAyODAwMDA5MUJGNUY2NkE5QjJEMkJCNjgzN0MyRTM4MzFENkM1MjI5Cis6MTAyODEwMDAzNDU2NzE3QTQ2MjA3RUJDRDcxQ0M3MzE1RkNBQzY0RDdDCis6MTAyODIwMDA0MkQ0Q0FGMkIxNTgzRUUyRkE3MkNGMTcxREE2RTgxMEEwCis6MTAyODMwMDA3Q0RGMkVGMDNEQkY4N0ZFNjQzREY5MUU4M0VDQkZCMTA3Cis6MTAyODQwMDA4N0ZBNkY4NUM5QjgwQkI3MkQ3NzY0MzBGRTcxNTkzRTkyCis6MTAyODUwMDA4NzdGODE1MzI1Rjg0RkM4NUE0ODdBMzJCMzcxM0REM0U4Cis6MTAyODYwMDAwMUZGQTE1QzlBRjQ3NTExQkQ0RkY5MjVEQjhEOUU1QkNDCis6MTAyODcwMDAzNkE5OTc1NjNGMkREMEY5QURFRjE2N0FFOUREM0FCRDZFCis6MTAyODgwMDA1NEFGNTc3RTNFNThGOEIzOURDQ0Y5MkRERjlEQkNDNkEyCis6MTAyODkwMDBFNURBQ0RCRTNCQzlERjJEOUQyOEY4MkM0OUQwNTlBQUQ5Cis6MTAyOEEwMDA0MzY1NjM5MDhFOTg4N0Y2Qzk2M0Y4NkU2OTBFQkVFRjM0Cis6MTAyOEIwMDBFOUEzRkM1RENDNEZFOTNEMkM0MEZCRUI2NDEwQzQ5OEQwCis6MTAyOEMwMDBCRjE3NDQyOEU2OEY0NjRDMjlDNkJCNzExMzg2NEQxOEE2Cis6MTAyOEQwMDA4OERGNDNERTY1OEIxQ0QyOUJERTY1RkIwRjdCQzhCQkFDCis6MTAyOEUwMDA2QzQ3MjYzQUU4N0VFNTExNkIyQUU5NUZDODg3QTYxMDk3Cis6MTAyOEYwMDA3QkUwNkY2MDdGMUEwOEZCQzc1MUQ4QkYzMDdEMDNGNkJECis6MTAyOTAwMDBBRjgxQjBERTM3NjFGRkMyRkNERDk5MkIxOEI2OUJFNEM2Cis6MTAyOTEwMDBEMEM2RURDOEY2RjdEODI3QzBDMUE0NjdGOEREOTNGMzk5Cis6MTAyOTIwMDA3MjNGODRFRjVCMzExOTEzRDE3RUZFNTZDQzJEMTM3MUFCCis6MTAyOTMwMDBCRDZGQzVGNDMxRjBENDYyQTYzNEZCRTBDMEVFRjQ0M0MxCis6MTAyOTQwMDBDOTA3QzFGMTI2RDE3ODdBRjg0QTc4RUFFMTI4RTFGQjkzCis6MTAyOTUwMDA0RkMwRjM5NkVFRTAzOTYyMzBFM0Y2NDlFQjFGQTIxMjY2Cis6MTAyOTYwMDA1MkQwN0YxNzI1REVBM0ZDNkQ4RTBBRjk3MzM4QjU0NDZCCis6MTAyOTcwMDA4QzU3QkQ4REU2MzlCNjZFMzQzMzBFMjNCRjREMTZDMjZCCis6MTAyOTgwMDBCNUNBQ0FFMUE1Qjc1QkIxNkQ3RDBDQTFGMUJCNTdDRDRFCis6MTAyOTkwMDA5RTgyMjFCMEVFQjM5QjU1QkEzNzdFRTlDNTMwQjI0NzZGCis6MTAyOUEwMDA3REU2RTdGNkI2N0IxNENGNjQ5QzVGOTVFQTU4ODdFRjI3Cis6MTAyOUIwMDA4OEIyQjdGODNCNjdFQ0VCQTNDOUQzMjJCRjA1OUQ2RTg1Cis6MTAyOUMwMDBFM0Y3RURBQkFDOTNCQUM1QTMzQzRGNEQ3MUJBNDc3MDdBCis6MTAyOUQwMDBGQUU3RUY0NTRBQkRBMjlGODVCRjRCMjBERjJGRUM0OUE4Cis6MTAyOUUwMDBDRjE4MTlDRUU1NjAzRjBCOTdEQjEyQUZEMDhFRjI0OUJFCis6MTAyOUYwMDBEMENGNDg5MDczNDkzRjA5QTdGM0M1Q0VERUVFRjlCOEIyCis6MTAyQTAwMDAzRTY5NDdFOEVDMTdFMTQ3NzkzQjM2MzA4NERFRTUyQTNBCis6MTAyQTEwMDAzOEExNTIzQ0YxMTExMURGNzVFNzkwNUE1QjBBRTBBOTI5Cis6MTAyQTIwMDAyOUNENTM4M0VEOThGQUI1OEE3MkU2NkQ1ODY3MUNEQUEyCis6MTAyQTMwMDAxRjRFMENCM0QxRjlGMTVCOUU0M0JGMzM0NEM4OEIxQ0NFCis6MTAyQTQwMDA5NkEzQjlBRjI2RTk0RUI1NTFGQzRFRTc3QkZDM0VERUJFCis6MTAyQTUwMDBEMkRGRjBCOENEQTVCRDU1OEFGRkQ3QzdDNThENjVFOUQyCis6MTAyQTYwMDAzRjQxN0JFMzg0NUUyNjk3REYxMTk0MkZGMjFEMjA0QkJDCis6MTAyQTcwMDA4MjgxMzk0MkY0RUMzMDQ3Mzg3Mzg0Q0MyNzIyMzM1NkI0Cis6MTAyQTgwMDA5MzhGNzRGNUQ1RDQ4RjFFOTVBMjI5OEY3MTBGRDY5NDhDCis6MTAyQTkwMDBDNzE1RTQ2OUYyQkQ4QjZFRDVENEVGMzM3QkJDMjY5RjlFCis6MTAyQUEwMDBFOEI5NUI1MzNGQTk3QzlBMzY4RjdDMDc3MEVGNUYzQjk4Cis6MTAyQUIwMDA1N0QzNkU0MDVEODlBNjlFRDM1N0ExMjk2NzNFNzc2Qjk5Cis6MTAyQUMwMDA2NjNDQ0E3MUZFMkY3NUVENTI0REY5RDM1MTA1M0M3RTFGCis6MTAyQUQwMDBEQ0I2ODBFRTI5QTYzNTdENEZEMzlGQzQ2RjUyMUNDNzRDCis6MTAyQUUwMDAyRjczRjBGREMxMDdGRjkxREY0MkUwMzkzRjQxQkI2RjFCCis6MTAyQUYwMDA0Q0IwOEYzQjY2QTc1NDZCRDc0OEJBNDExQ0Q0QTE3RjFBCis6MTAyQjAwMDA5NjBFQUE5OTk2MEU3QUYxMzg5RUZDREYwQzczQTAxRUUxCis6MTAyQjEwMDBBM0M3M0ZGQTIzNDJENzg5RkU4ODUwQjhBMDNGMjIzNDhBCis6MTAyQjIwMDA4RkZFODhEMEZBRTg4RjA4MkQ0NzdGNDQ2OEY5QjAxM0VDCis6MTAyQjMwMDA1QUZDOEY2OEQ1RTJGRjk2MEZDNkZGNDMzQzhENkVEM0RCCis6MTAyQjQwMDBEMjgzMUU0RkI3N0RBNkE1OEZCMTlFNzA4MkNCMDREMEQ1Cis6MTAyQjUwMDBDNzkwREUyNTlFNjZDMzdGQjRDRkIzQTI2OEI0MUJEQ0VBCis6MTAyQjYwMDBDMURDNzQyRkUwN0YwQjVGOTc3NUY4RkE5MkFEMUI4MTgzCis6MTAyQjcwMDBFRjVDNUVGMTcyMzlERUQzM0U3RjY1ODBGQjBCOTRCQjY4Cis6MTAyQjgwMDAyOTQyQ0VFQkVEMDAzMjlFRDQzNzlFRTNEMzc3MzI4Q0QwCis6MTAyQjkwMDBFNEQ1NTc4NkI2NDhEQzNGQkVBM0I2OTE1RDNFOTE3NTNECis6MTAyQkEwMDBCQzgxRUZDRjBDRTlFNTYxNTlCREYxQ0EzNjcwM0Y5NEE1Cis6MTAyQkIwMDAzRkI1RThCRTVDRENFN0U2RkREQTkyOEM3QUNEQkMwMTdECis6MTAyQkMwMDBGQzNENDE5NkQ1NDZFRkI0QzhGOUNDNEJFMkYxNDdENjZGCis6MTAyQkQwMDAyQzIxQTc1RDNDMEUyOTIyOEJEQjdGMjI1RDc2OEE4MzI4Cis6MTAyQkUwMDBGNjY2MzExMUU3Qzk5MkU3NjUyMzFEQkUxRDk2ODE3NDEzCis6MTAyQkYwMDBCNjkxREJCOURBNEMwRThBNkJGMTAxM0RBMjlGMTJGNTVBCis6MTAyQzAwMDA2REQ0ODdGQjBCN0RCNEUxNDNBQjk1RDMxREQzRUNFRkMzCis6MTAyQzEwMDA4M0ZDNTY0RDFDRUU5MDlENzY0RDNFQkIzOTQxNTM3RjUzCis6MTAyQzIwMDBFODIxODdBNjNDMzc5MEE5MjkxRjc2QzJBNUM5OEY2OERECis6MTAyQzMwMDAxREE1QTk3RkNCMDc2RTREN0U3NDVCODFBNkZFNkQ5RjlGCis6MTAyQzQwMDAxNTY5RjI0OUFDRTM0OTg0RTdGOEFDMTQxRURGQUYwODFDCis6MTAyQzUwMDAzQjgwODNFMzY1REU3N0UyRTkzRThEM0M0N0M4Qjg2Qzk0Cis6MTAyQzYwMDA4RkEwNjNGRDc5NjQ4MEQ5NDM3MURFMEQ4OUNDNDVGNzZGCis6MTAyQzcwMDA0MUFDRTIzQ0M4QjRFNzE0OEY4OEFCOTZGQTNDRjM2OUU4Cis6MTAyQzgwMDBFM0FBNjUzQzc1RDc3OTQ2OUM1RkU0NzkyMjI0OUVEQUY1Cis6MTAyQzkwMDA4REYzOTdGMUQ0NUQ3ODE3RUY0QkVBRTlGMzVFODE3NzE2Cis6MTAyQ0EwMDBGRDNBMDY5OEY5RkRBRjg2RUY5QUU5MUU4QjlDOUY3RTUwCis6MTAyQ0IwMDA1RTlCNDQzQ0UwNzY2QkY3RUYwRjNEMjBFOEFDMkRBNTIyCis6MTAyQ0MwMDA2ODY2MTZENDdCMTZCNjI3ODJFNzc1RTNCOURBN0MwMDBFCis6MTAyQ0QwMDBERjg2MUY5ODVEMkIxRDM3MUU2RkRFNTBCRTlFNjI3QzA3Cis6MTAyQ0UwMDA1NzM1OEJERUU5QTQ3QjZCNzJEQzZBMzFFRUY0MUNBNUYwCis6MTAyQ0YwMDBEQkY1Q0Q4QkU2RjE1RDJDREE0Q0Y3MkU3QTFFOEZDMzE3Cis6MTAyRDAwMDAzNUMxQ0MxQUU5OUQyNDcxMEZFMTgxNzVDREVCMzE1NEE5Cis6MTAyRDEwMDBCM0Q4REM2NEUyRUZFM0ZCNEQ2ODI3MkExQzBGN0E2MDJFCis6MTAyRDIwMDAyRURBMERERkRGNjgwMzdERUREOTNBMjNEOTdEMUVEQTc3Cis6MTAyRDMwMDAzREU2M0VEMDIwQkJFRTk1MEM4MDczMUFEMjQ5MjFFMkNECis6MTAyRDQwMDAxRkZBM0Q5N0NERTM5RDFGQ0JFMkYyMjE1RkZEQkFFQjY5Cis6MTAyRDUwMDAzRTgwNDUyM0U3RjlGOUFGMUJCQTIzN0E5NEVCRjhCRjFECis6MTAyRDYwMDBCQTFGMjBFOTU3MEYyNzc5QkU2NjYyRkYxQTI4RTYyNUE5Cis6MTAyRDcwMDBFMUQ3NjUzRjExRjA5M0Y3MzMxQzRCNEM0NTVCNkQ3NDA1Cis6MTAyRDgwMDBDRkEzMDBFM0NBMjRGRUJFQ0VFNjc0Rjk2NjE2QzczN0E5Cis6MTAyRDkwMDBENjQzNzlENDUzQkQ3QzM1MkIxQUVERTA5RENDMTE2RDEzCis6MTAyREEwMDBCRjgxM0RGOEZGRThERTA0QzFCRkE3RkI1RTNEQzk4OUQ2Cis6MTAyREIwMDBFQkU0NDMwRkY3QkY3QUEyNEZGQUY3MkRFRTgxODVDOEY3Cis6MTAyREMwMDAwOTFFRUYyM0YwRTExRjY4MjBCRkZBOUE0ODJEMUZGRjZDCis6MTAyREQwMDAzNThCREI1RDlFOTZGQjg1MEZDRURENUEzOUMxRDBBRUJCCis6MTAyREUwMDBERkIwNEExNTcyNjI0MUQ3RUY0OEUwRjdGOUFCNENBNDY3Cis6MTAyREYwMDA1RjMzNTZGNDM4QzYxOTdDQjJEMTQ0NzFCMTYzREQ4Q0FGCis6MTAyRTAwMDBGNDk4OTJDRDhBN0Y4QjgyRkJFODk4MDQ5Q0JGRDdBNzY5Cis6MTAyRTEwMDBERDhGRUY2MEFFRDVFOEZGMjg1REFCRkRCRUQwQzY3RjhECis6MTAyRTIwMDA2RjYyQkVGRUREMTQ3MTVFNUY3ODgzRjNGQUQ5MkNFMTI4Cis6MTAyRTMwMDAwNzcyMzExN0U5NURDMkZGNUYyRURBRThGNUFFNEUzRjRCCis6MTAyRTQwMDBGNzlCRTE3OTVCRTU3NjI3OEExQjkzRkJCQjAzRkQzNzk0Cis6MTAyRTUwMDAyMUVGODEwMDNDQzMzMzcxMUY2RjM0NzYxQkNGRDcwNTQwCis6MTAyRTYwMDBDRjFFRTIxNTJFREE0NEJDODI4REM3Njc3NEVFMEZFM0U1Cis6MTAyRTcwMDBGRTRERTk1NzEyRjUyRkZBQUU1MjM5RDZDN0RFMkVFNUQwCis6MTAyRTgwMDBGMkI4MEJFOTRGRDJGQkFCM0E2RDA2RjJCNzc0RUU4Rjk2Cis6MTAyRTkwMDAyNEZGM0NGQTcxQTI4MTBFQ0UxQkY2QzU4RjcyMDZFN0E1Cis6MTAyRUEwMDBFNzY5NTMzNTdFMTA3REVBNTlGMTEyOUQxN0NCNTMzREVBCis6MTAyRUIwMDAzMUQ5MTg4NzZENzQ1OTVEOTA3RkM0NzY4NERFOEYyQTZFCis6MTAyRUMwMDAxNDc2MkZGRDdDQkJDRTVENjNGOEZCMkU5RDNFQUVDRjBFCis6MTAyRUQwMDA3NjE2RjA3NzM4NDAyRTMyRTQyMzE5ODczMDk1QzEyOUQxCis6MTAyRUUwMDAxNTUyNkY2MDM0Q0RFN0RCRkE3M0E2NUZDQkU1N0VDQzdECis6MTAyRUYwMDA2QkI3NTE3QkNGREFEMTk0MUZEMEI4N0UwOURFODM5OUFFCis6MTAyRjAwMDBEOUIwRDA4NDJFRUNCNjI3OTdFNzg3NDNEM0I2RkVGRTIwCis6MTAyRjEwMDA5NUUxODhCNzcxNEFCNzc2RjlCQzZDODVGOEExNEQxNzcxCis6MTAyRjIwMDA1RjJGRDNBREQ5OUM1RjdFOUQyREU1Qjg4ODQzNUFBMTE0Cis6MTAyRjMwMDAxMDFGMkM1NTk4OEM0QjIyMzkyRUYzNTc5QjQ0M0U5RkUzCis6MTAyRjQwMDBFNzk3QURFMkY5MzZGMUJFRkUwRTYxNDdDMTc1NjM4QUJGCis6MTAyRjUwMDBFQkM2NzNGRjZFNjE2N0MxNzU2MzhBRUJDNkVGMjhCNzc2Cis6MTAyRjYwMDAzMDhGNzIwQkYzMjhCNzMwOEY3MjBCNTM5NDVCRjhCRDIwCis6MTAyRjcwMDA4NDE1MjVFN0FBREMwRjM1MzE5NEVGQUU1OUQ5QzQxMDdBCis6MTAyRjgwMDA3RTQxM0Y1NDY4MUVGRDUwQTFGNUQxMEYxNTVBOEU3RTJCCis6MTAyRjkwMDBBOEQwNzJGNDQzODVFNkQxMEYxNTVBMUZGRDUwQTE3OUQwCis6MTAyRkEwMDAzNkVBQUU2MDFFRTU5QzdCQUEyNjNGMURGNEZDODkyMTEzCis6MTAyRkIwMDBGQzhEN0VBOEQwRkVEMTBGQTVFOUNGQjM0NEQzRkU3RTExCis6MTAyRkMwMDA1NkE3Njk4RjdFQThEMEZBMEZENjI5MUEzRkQ1ODNFMjdCCis6MTAyRkQwMDA5REQzRDI0RDcxNDQzRkYzMUQ0NTM1RDk4MERGRkY4ODI1Cis6MTAyRkUwMDBGOEVGODc0RDI5ODhFNzk2NDVGQzVDMTZFRUUyNzg2RThGCis6MTAyRkYwMDAyQUUwNzgzNzMwOEVFNzhFMzk4NEU3RTU2NjlFQ0ZFN0EyCis6MTAzMDAwMDBGMUM5N0FGQTQxN0ZDRjQ0MTNGN0Y3NjA4QUZFMUU0QzZDCis6MTAzMDEwMDBEMURGODMyOUZBN0IyNkE2NzE3RjBGQTZFOEVGQzFFRkU3Cis6MTAzMDIwMDBFOEVGQzExNEZEM0Q5OEEyQkYwNzUzRjRGNzYwOEFGRTk0Cis6MTAzMDMwMDAxRTRDRDFERjgzRUREMERGODMyOUZBN0JGMDNCRkE3Qjk2Cis6MTAzMDQwMDAzMDQ1N0YwRjdFM0Y4OTdFMjc1MzcwNUVBOEM3MEZENDFGCis6MTAzMDUwMDA5QzFGODEwRTM1RTc0N0JCMjY4RjdBN0M2ODdERDRFM0MxCis6MTAzMDYwMDA0M0NCNTE4RjBGMkQ0NzNEM0UzNDhGN0E3QzY4N0RENDAyCis6MTAzMDcwMDBFMzQzRjNCRkNDNzIxMDlGQTEzRTFGREEwRUY1RjlEMEU3Cis6MTAzMDgwMDA3Qzc2OTNFRjBEQjQ5RDREREU3Q0Y5MThBNjZEOTFDQTQ4Cis6MTAzMDkwMDBCMzBBODg4Q0U2RUNGN0VFNDMzRjVENUI5ODkyMUMwMzI1Cis6MTAzMEEwMDA5MkQzQjRFMkMzRkIyNjgyQkVFNjExRjE3RjM5QUNDM0YyCis6MTAzMEIwMDA4MEY4RjY4OEY3RDQzRDAxNDZGMTk2RDk3RjRCQTRGMjBCCis6MTAzMEMwMDBDQjc4QUY1RkM0REIyMkRFNzNGNzMzRkE1RDEyRTkyRkYyCis6MTAzMEQwMDA5NkVENURDQ0FFNjIyQUVCMDdGM0RERDdEMzhGMkZFQkY1Cis6MTAzMEUwMDA5MUZDMEM5OTA3REUwMEM2Nzg5NURDRTVCNjNDOENGN0MwCis6MTAzMEYwMDBEQzYxNTAyODRFNjJDNzRBMUUyN0FDQTdBQjMzNDI0RjUzCis6MTAzMTAwMDBEQTYxRDg3NzA0RUY4MTc0NzgxNUJBMEY5QzZFNjQyNzYyCis6MTAzMTEwMDA0Qzc5MDhBN0RBM0NEQzdGREZDRThFMTFFQkFBQkQxNTE3Cis6MTAzMTIwMDBFRjlCQzg3OTRCRkIyNkM4MDlCQTNGMzdBNkEzNzU0MjY3Cis6MTAzMTMwMDAzNEY0RTNGMThEQTNERjQ5MjkzNDczQkQwMURCRTE3OTc4Cis6MTAzMTQwMDA3Mjg4NEY3MTZGMERBMUVGRjc4NURDRjRGOEY4RjgzRjQ2Cis6MTAzMTUwMDA3RjZFMEE2RjE3Q0VEQkZERkNCOTI4ODJFMzk0NDY4NUFCCis6MTAzMTYwMDBFMkE1QzZFQzY2NkVCQzlGRkIxRjQyOUUwRUQ5MUQ1MEE5Cis6MTAzMTcwMDA3MTNDNkYyMzFGNEZGNkVCREQ5QzRDRjcxNkJEQUM2RDE5Cis6MTAzMTgwMDA2MjAyRjk0ODE0ODY3MjVCQzIwREQ2NzcwQ0Q3MDdDNzY2Cis6MTAzMTkwMDA4NjEzNjg5RkJFRDk3QjNGQjcwRjhGQzlDNzM4M0FENjExCis6MTAzMUEwMDBDMkU4MURDQkM5QzNERkQ1QUM5N0QwM0U5MkZBQTU3RDRFCis6MTAzMUIwMDAyREMzQTdEMDdCQzE1MzdDMkI1NkUyQjYzRUQ5QjdFNEQyCis6MTAzMUMwMDA4RERFNTg3RjFCNzMzOTFEQjQxNUQxQkQ1ODM5OUZDMTkxCis6MTAzMUQwMDBFRTdEMDZEODE2NTkxNjZCMzU4NDI5ODg2Rjc2MzQyRTA1Cis6MTAzMUUwMDA4NDdFODBGMzY3MjBCRTczNUQyNjdBQkY3N0FBRDE2RTk2Cis6MTAzMUYwMDBBMkY3MjM3QTg4M0ZCOTZBOTNGMTI3M0E3RDQxMTc2NzhFCis6MTAzMjAwMDBEMkIwRkM4MzY0QjQyNzJGOEQzNDkwRkQ3N0U5NEJGQzVBCis6MTAzMjEwMDBGNzAwM0M5QjE0OTI2QjUyMEZGMjhBMzhCNUFCOEQ2RjVFCis6MTAzMjIwMDBGNDlFODU3MERGNjdBMkZFNjRGQzQ5NzVBQTNGRDk4MEQxCis6MTAzMjMwMDA3MUY1N0RCN0U0QzRBQUE0MDdDNEU2QTAxRUUwRkJENURGCis6MTAzMjQwMDA3REEzQjBERTJBRkU4RUU1RDVDNjk5RDEwMUVBODlGQkMxCis6MTAzMjUwMDA2QkNBMDRCQ0NBNDQxQzkzMTcxRkY0NTY4M0JGOEIyNTRBCis6MTAzMjYwMDBFRjc3QjAyNkFFRUY0OTdCOEVGN0I3QzM4RTIzN0VCREQ2Cis6MTAzMjcwMDBDRjg4NzdBNUQ3N0FFOTVFQjYzRThFNjg1MUEzODlFMkZBCis6MTAzMjgwMDA4RTE2RTlGNEMyNEFBMTE3NTZERTQwMkYxQzlDQTNEMzI4Cis6MTAzMjkwMDAwQkU1RUZBNTg4MzY0Q0VERjczRUM2RURDOTdCODlDNTM5Cis6MTAzMkEwMDAyNkNFRkZDNUZCMThEOTYxOEI1NzRDMzBEMDNCQzgyRkI5Cis6MTAzMkIwMDA3MUJBMjk1RUMxRjU5QkUyOTdERDc0QkY1MEVBOEJFRkNFCis6MTAzMkMwMDAwODNENjZEQUI1MjQ4MkZCMUY4NERFMzIxM0UzMkIwMTRFCis6MTAzMkQwMDBCRTg1NkQ2MTIyMEUyQjkxRDI1OUQ3NzhCQ0U1MzQxQjg3Cis6MTAzMkUwMDA5NzAzNkRBRkYxNzcyMDNBN0QxNkFFNEYxRDYzRkMxRDNECis6MTAzMkYwMDAzMzFENUQ0RTM1RkEwRDc4RTFDRTM1MDZFODEyRjI5M0I2Cis6MTAzMzAwMDA1MTBGODJGRTY2QTM1RTE0ODc3NEVFQ0NBN0Y4QkQwMjRGCis6MTAzMzEwMDA4NUVFQkRFOEU5QkNEMDU0RkIwNkM2ODcxNjZFNjcyRTY1Cis6MTAzMzIwMDAxRjBCQTU3M0EwNUZFQ0NGQTdEMEZCMDAxRTcxQUU5NTVECis6MTAzMzMwMDBGNEFCQTdGNzc5MTFDMjFFNjVFM0Y2QTYyRUJCMDRFQTJCCis6MTAzMzQwMDBBOEY0NDg3N0NFMkNENDFCRTdBMTZGQUYyRjI3MTg4Qzk5Cis6MTAzMzUwMDAzQjhCQ0NFMkU1NjUzOTM5QjMxQUYxOTBEMzgzOUQ0MkJBCis6MTAzMzYwMDBGRDlFOTlFMEUxOTFFRjIwRjQ2MDM3NDA3QjAxQ0FDOUVFCis6MTAzMzcwMDAwNzFFQ0EzNTk3ODRDOEM5RTFBRUYxOEQ0MzQ3MDRGMUYxCis6MTAzMzgwMDA1REQyNzVERjJGOEJERTA1NURGQTQ4MUFGRDFFNEU0RkFDCis6MTAzMzkwMDBGQTcwMjlDMDE1Rjk2MjVFNzREQkMzRjgwQjZCMEQzOTQ2Cis6MTAzM0EwMDBDQzNEMzEwMTdGMjc1MEFFOEYwNTMwOEU3MEFFQzgzN0NGCis6MTAzM0IwMDBFRkJERUY0RjZCNkQwNDE3Q0FEN0U3OEM5OTg1NzEyMTZDCis6MTAzM0MwMDBENUQ2QjY0OTQ4NzYzNTU5OUUwMkJDQzcxODk0NEY0NUE0Cis6MTAzM0QwMDBFRTI0MDVFNTUzNkUwMENGODQ5QkU0RkQ2NDlEM0RBMjgxCis6MTAzM0UwMDAzOTg3RDdEN0RCMjU0QUIzQjhEQzk2QkY4QjcyRUE5MTExCis6MTAzM0YwMDA4MzdCNzFCRjkyRjMzRkQ1QzNFRjMwRUNDQ0UxRjJGN0EyCis6MTAzNDAwMDA3RkVCMUU4NEZFRkVDMzJGRkI3QTlFQ0M4MTc1M0M2RTQzCis6MTAzNDEwMDBFMEY3RjlGQkFBNEQ0Q0Q4ODdDODJGMkNFNTA1MTNFRjMwCis6MTAzNDIwMDA2MDA0RjFFRUE2Nzc3NDFCMUU1MUVDQTFGNjI5Q0Y1QTY5Cis6MTAzNDMwMDA4NURGQTNFRkMxOEVDMzMyM0I5RURDMEVFREU2RDU5QjRDCis6MTAzNDQwMDBFOUY3Rjg5RTRCRTdGNEYzMUNEMDBGRkQ1RThBQjlGNTVGCis6MTAzNDUwMDAwREFCMzMwOEM3OEZFQjdFNkFBMkRGQTU2MTgxMzQ3Qzk4Cis6MTAzNDYwMDA3RjY3NkU2RDk4MEJFNUYxNzA1N0QxMkY3MURFMTE1OUEyCis6MTAzNDcwMDAyRTkyNDM4RDE4NDMwRUY5QkI3QTE1QkQ4OERGQUJENzZBCis6MTAzNDgwMDAxRDdFMTZERjEzQTg2OTcxRDJFRjk1NzgwRkU1QUVDNkUxCis6MTAzNDkwMDA3NzRFODZCQjNDMDdCMURDNkJCM0QzN0IxQThCMUI2M0M3Cis6MTAzNEEwMDA2OEZGOUFENzQ3REMwQjY1MURFNDY3OTNGMDdGNDdEODI4Cis6MTAzNEIwMDBBRkQ2QkEzOEZENUUxMUU3MEUxNDkwNTMzNUY1QkFCN0EyCis6MTAzNEMwMDBFMzQ5M0JBMURFQ0VBMDdGNUZBMjI3RkI4MkI0MjdBMDA5Cis6MTAzNEQwMDBGREMwMUM2MjY3OTRGNjA5NTNFNkE5MzlBODM3MTQ5QjBFCis6MTAzNEUwMDBCNUY3MTI2NUNBODZGMjdENUY5RTAzRTc3N0VENUI1OUZCCis6MTAzNEYwMDA5M0ZBQTA3RUJDNDFCMUQzN0I5MzM2QzdBQ0QxOTAyRjU5Cis6MTAzNTAwMDAzQjYxQzJDODRFNTYxOEVCMzBFM0ZCMDMxRDgwNUY4QzU1Cis6MTAzNTEwMDA4RjJFMDE3RTQ1Mzk1MzJDRTJCNENBMzY4RDI2N0UyQjgwCis6MTAzNTIwMDBGMzQzREFDRDNCOUMzMkJEN0ZDM0QxRkUyRjIzRkQwNDk0Cis6MTAzNTMwMDBEQ0U0QjcyQ0IzQkJDREIxMjE3QzVGREFBNDY4REUxRDFGCis6MTAzNTQwMDA5MEY5OEUxQzk1RjMxMUE4RTMwOEJGMDcxRTcyOUFGMTNCCis6MTAzNTUwMDA2RDlGNjI1MDIzMzBGRThGMEQ3NTY4RkNDNzUwOEZFMjVGCis6MTAzNTYwMDA0MTBBNTNEODcxRkUwRTNDQ0NEQkM5QzdDQjBCRTlCRjc3Cis6MTAzNTcwMDBBNDg5REY5Qjk2NzlBODRGRkFDRkRGNzMyMjA5QUU1RTRDCis6MTAzNTgwMDAzQkFDREI4OUE5OURFNjA5NzAyMDM4NzVBQzg3RkUxQzMxCis6MTAzNTkwMDAzNDBFRTFBMzM0RTAzN0UxNzlCQjE4RTM1MDIwM0ZENzg0Cis6MTAzNUEwMDBFRTM3RTEzODI1OERGQzFEMTNDRjNBM0U4RTY3NkQ4Q0NBCis6MTAzNUIwMDAzOTFCRjUyM0EzREREQzFGRTEyNzdFNkYxNUU2NDc3QTczCis6MTAzNUMwMDA2NDE5QzAwNUVGNjNFMTdEMzdEQzVCRjRGMEYxOEFGOTQzCis6MTAzNUQwMDA5NjM1QzVEMDNCMEFDMUVGMUI0Qzg4OEYzOTNEQkM4QjVCCis6MTAzNUUwMDA5MDM1OTREMzZENDlFMzM4QkFCRjVFNjY3NEQzM0QwNzE2Cis6MTAzNUYwMDA4RjgwRUYyNzRCQzIxRTQ1RkZDMDlDOEQ0Rjk4OUM5MDNCCis6MTAzNjAwMDBFRjM3OTREMzZGRDY1MDRFNUY4NTI5ODEzNDdBQUY2OEY3Cis6MTAzNjEwMDA0OTk4MEJFNzM5QzdERTQ0RUJFQjgyRUY2MzAwMEYwNUY3Cis6MTAzNjIwMDBERkI5MjkyMkY4MDI1REY4MzA2RUFGNkNBMzE2OUZDMTk2Cis6MTAzNjMwMDBGOTcwRjg5NjZERjQxMkJGMkQzMDdBQ0NGNkQwNzk2QzEzCis6MTAzNjQwMDAzQTlDODZGN0FBRTYwMDdGRTNCQjEyQ0NFRUExRkI5MjgwCis6MTAzNjUwMDA5RjNFMzYyQjk5RDYwOUYzNDRCODQ2QkExQzkzRjBGRDI5Cis6MTAzNjYwMDAyMUEwMTM3RTBGNDZBQzQ3REVFQjk2RTM0RDFDQ0FFRjVDCis6MTAzNjcwMDA5RDRFMUNDQUU1NjdDRjdDRTkyNkJEQTYwMUYwOEI3NjdFCis6MTAzNjgwMDBFRjlFRjhEMjhDODIxQkM2MzU5N0YxREY5MUQwRjNBOTVCCis6MTAzNjkwMDBFNDRGQzk5NzkyNEYyNUZGM0U2QjJBMEEyNDI4NDEzOUVGCis6MTAzNkEwMDAwM0ZCNkNFRDhCRERDMEE5NTFDQzc3QUVDMDJCQzBGNTEwCis6MTAzNkIwMDA1OEU4M0RBRjZBODFEN0UyMTQyREJGNjM3RkQ4RUYxQzc1Cis6MTAzNkMwMDBDMUVGQzVFMzAzNjlGODJFOTNBQzJGQzcyRDhFRTVFRDRFCis6MTAzNkQwMDA5MEVFOTFERUU2ODhGMUIwRkU1MkFBQUZCREE3NTJEQUI1Cis6MTAzNkUwMDAyNTJGNzZBRjhBNDc3OUIxNEZFMTdFRDBGNTQ3RkI3RjMyCis6MTAzNkYwMDAwN0Y1RDczRDVDN0ZCRDUwQjU3RDMxRUU5N0NDRTg0RkU3Cis6MTAzNzAwMDAwRTdEREY3RjNFRTgzOTI4MjcxNjg4RkRCOTJDRDBCRDE1Cis6MTAzNzEwMDBCQ0I4OTBFRUE5MTgxQUMyQ0Y2NTNGREI5M0VFRTFGMjc4Cis6MTAzNzIwMDAyNjgwRjJFNkNGN0I1RUZERTNBRDhFRTA3RTJBRDc1M0E2Cis6MTAzNzMwMDBCMkY2NUQ5M0Q3MTYwQTNGQkVGRTQ3MzMzQkU5M0U1RUM1Cis6MTAzNzQwMDBBOUNERUNDMDc4RTdEMjQ2MkZDOTVGOTYwMDdBQTExMkM2Cis6MTAzNzUwMDAxMjdGQTZBMzBCNkZBMzQyRjdDODRBRUI0NkZBRDVGRjI4Cis6MTAzNzYwMDA0NTM5NURCQTZFMkFCRDdCMjBGMTI2REY2NzkxRkJBQjQwCis6MTAzNzcwMDA5Q0ZGN0EzMUZGMjYyMURGRTYwQUZBOUU1QjNFQ0U5QzUzCis6MTAzNzgwMDBEODhCRjQ2RTBDQjM2NDczQzRGNzM5NjVEQUVGNUQ3OEU3Cis6MTAzNzkwMDBFQkYyNUY2N0FENDY3RUMxRkI0NTc0M0U1OTY3RTJGNkNBCis6MTAzN0EwMDBCRURERENGRTc4NjFFOUMxREZERDA3RjVDRTNGQkUyNTc5Cis6MTAzN0IwMDA5OUE5NUFCQ0ExOUVCQTQwRThBQjBCODVGREFGMUJCQ0QyCis6MTAzN0MwMDA2RDE5REEzQjk4NUZGODFDQzc1QkU5REVERkZFMDVERkE5Cis6MTAzN0QwMDAxMzJCNEUxMUYyNkUzRDdGMDdBMEE0NzkxRkUxNzFDRTJECis6MTAzN0UwMDBEQTBEMjYyN0Q0REIzN0Q0NDk3MEVBOTJGRkI1Qjk3NkQzCis6MTAzN0YwMDBCNDJCQ0Y1REJCQzU4NDcyNjI5Rjg0ODM4RTFGOEE0NUM0Cis6MTAzODAwMDA5Q0IwODQzM0VFNEI0QTg4N0Y0M0Q2NDdGOTg4RUZERjdDCis6MTAzODEwMDAzRkI0MjQyQzBBRTM3OUU0MzgxRjA5M0EyRkFEOEQ4OThGCis6MTAzODIwMDBDNUYxNEE2QkJEM0ZDNkYzOTBEQzBGRjRFQjNDMURDNkZGCis6MTAzODMwMDBGOUE1MDRGQTQzQkUzRDNEQ0U5NUJDMzQyQkE4Q0ZFQTkyCis6MTAzODQwMDBFQkJGMkJGMEY4QjQ4OUZGNEU0RDUyNDRGMzJFOEE2QjM4Cis6MTAzODUwMDBBODA5NzdBMUZDMTgzOEIwQ0Q4RkUzMjI3REUzQkNDRDU5Cis6MTAzODYwMDAwNkZFQkIzNjAzQUJEQTNFQzc3OTgwQUE0RDcxMzU5OEE4Cis6MTAzODcwMDBFMkZCNThBODdBQzc0MzdFQUI4MURGREY0QTUxNzlGQTcxCis6MTAzODgwMDA5NTkwRDc1MDFFQzA3MkQ2QUI4RDdFNUYyMzI0NkU1NkE2Cis6MTAzODkwMDA0M0JGNjZCNjhEN0UzRkQxREM4QkQxRkI2NjkyNUU2NTAxCis6MTAzOEEwMDAzRjkyNUUyNTNERjdCNEJFMkI0MkFFREM2ODdEQTc5REZFCis6MTAzOEIwMDAxQzlFNjZGMUJCMjkzN0JEM0UwQkZGMUQ1REI5MkUzOTNECis6MTAzOEMwMDAzRkQwRTFEREY0QkVDN0Y3QjNDOURFNzM3QTg1MkIxOUFCCis6MTAzOEQwMDBFMzI2N0I1RUVGQzZGQ0Y4NkVENkFCNUZBN0U0MUIxOTUwCis6MTAzOEUwMDAwQkRGRTVDRjZBRTI3RTg3RDMwQUVDNkZEMEVFRjQ5MjZECis6MTAzOEYwMDAzMDhBNkY5M0VCRDJEQkMzRkYxRkI2NDBCNUY2MDA4MDcyCis6MTAzOTAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCQ0Q1NkQ3Cis6MTAzOTEwMDA3RDZDNTM1NTE0M0ZGN0JFN0VBRkREREVCQUIxNzUxQjJCCis6MTAzOTIwMDBEQkJBOEQ4RjQ2QkFGMUNBODBGODkxNjgxRDhDRjBDNzVBCis6MTAzOTMwMDBBMkREMTRERDBDNkMyNUIwMzFDNjhBOTM2MEE4QzZCODMwCis6MTAzOTQwMDBCMjIyOTIxMUUyNEMzNjE4MDQ0Qzg3NkM3RjE4MjA1RDJECis6MTAzOTUwMDAyMDhBQjE5QTg2ODk0NjgzMTFFMTFGMTI5MkE2MEIzOEZDCis6MTAzOTYwMDBEMTY4NTYzMTBBNDQ2NDlFNzNERjJCOUQwODg5N0ZGQTIzCis6MTAzOTcwMDA5MkU2RjRERTdCM0U3RkU3RTNERTBGN0E2NTgwODUwMDJBCis6MTAzOTgwMDBDNzdCMUQwMDQ2ODA5M0JENEU0MUEzQkQyRUIxOUZBN0FFCis6MTAzOTkwMDBEODAxRTYwMDdFNDk1QjkzMEQ2MEFEMDVEQTdDNTY1QzhDCis6MTAzOUEwMDBDNkYxOTcwRjkwMDg1NjhERjRCM0NDN0U4MzFEREE5QTNBCis6MTAzOUIwMDA5MDI2RTRBNENERUVDNjdEQkJCQTdGQURDN0RDMEYzOTNGCis6MTAzOUMwMDAwMDJEOTBEQ0U3NTg4QUIyQzEyQTE4NDU1Mzg5ODFBQjkzCis6MTAzOUQwMDAzNjhFN0M1NzlGNDYzRTc3NDY2RUJCM0VCNTFFODhDRkRGCis6MTAzOUUwMDA2NjcwOEU1NjAwNjQ2REZGQUVCRTEwRURCNTBGNTY3ODUyCis6MTAzOUYwMDAxOENBQUQwQkQ2MjY4Mjc4QkU2RTU3QTEwMkI4NkVCNzM0Cis6MTAzQTAwMDAzQTc3M0JFODNDNTRBMUY0RTEzQTZCRDAzMzM1OENFNzhDCis6MTAzQTEwMDBFREJCMTYyOUM0QkY5RDgxMkY0QTdFMEYxQzAwMjgwMEQ0Cis6MTAzQTIwMDBFODgwN0I5RkQ3QjQxQzYwMTNGRDQzQkU0RDU2QzMyNDcyCis6MTAzQTMwMDBBQkMxRjNFMEM0M0MxOUU1M0IxNEIzODdBMUZENERDMzEyCis6MTAzQTQwMDAyQzZFQzRGRDA2MEU3QkQ4MTI4MEYyQjA2RjU1MTFEQUQxCis6MTAzQTUwMDA0QjFENjRDQTUxOTIzRDVDRUY0RDlBNTQ4NTMzOTUwMERECis6MTAzQTYwMDA1RDBCN0QzNUNBMzI1Q0RDOTk5OTk5NDFGRDhGMjA0NjBBCis6MTAzQTcwMDAyMDUxNUM1MTJGQzUwMTQzNEMxRTA1RjJEQjY3MjA3Q0IxCis6MTAzQTgwMDA0RTJDNzYwQTlDMTM4MzkzMzZBNzVCQzVCQjExRjEwNkI3Cis6MTAzQTkwMDA0NzAxMDc5NERGNjY1MkZEMkIzN0E0MjZERjQ2QkY1MjRECis6MTAzQUEwMDAzNkFFMUNDNTc1QkRFNEZFRDY0OTcxN0UyNTgxRDE0OTZGCis6MTAzQUIwMDA3MjFBQkZBQ0YxQkZGOUE4Qzk4RkZBQjZEOTJBMEIwMUE3Cis6MTAzQUMwMDBFOUM2NjE3NEEyMTZDRjlBNEQ5QzcwRThENDdDNkUxRjMzCis6MTAzQUQwMDA3OUFFMDBEMDhGNzYzQzc3RTJGOTIxREE3QzBDNjBGNzgyCis6MTAzQUUwMDBFMDhBODIyNEM5QkQ1QkJGM0Y1NDBENTBBNkUxNzg0REVBCis6MTAzQUYwMDA5NzZDQTRGQzVDMUYyOUI0RUZDNEQ4MzYwNkMyMEIwMDM3Cis6MTAzQjAwMDBDRjM3OEVCQzVENDZGNEZBODhCOTM5ODI3QzJCRTVDNjg2Cis6MTAzQjEwMDA5NUI5MTg2RkM3RTE1QzhGODRGRUNDRDBGNzE0RTY0REUxCis6MTAzQjIwMDA0MTIxQzRBNzJCQjBBMjEwMTBBRkVFQkIxM0VGQzk1NUIzCis6MTAzQjMwMDA2ODFGQjEyNkRDN0Y4RjY2NDU0MkM4RDJERDdCQTY0QzZDCis6MTAzQjQwMDBFMkU4OEFEMURGNEM3ODZFRTFCMTE3MUU0MzNEM0ZCMTA4Cis6MTAzQjUwMDBDODU4OTFFMDc3MTZDQUQ2OENERUZCRTk1NDJGQzI4MDk0Cis6MTAzQjYwMDBGNTFDNzhGM0IyRDBGMzBCM0ZGRjRDMEJDQTc3MDc0RTJFCis6MTAzQjcwMDA2NTkzOUUyRDQzOTc5NkNCQjhERjU5RTVERkE4Q0MyMUZFCis6MTAzQjgwMDBCRDIzNjMzMjQyMDRDMzIzMzUzRThDQTM1RDAxRTE2NzRDCis6MTAzQjkwMDA4M0RERjc0MjBCRTFGRTk1MjQ3MDdGOThCRENFMzM0QzU4Cis6MTAzQkEwMDBFMDdCMkZDRTQ4OEU4MTcwRjdDN0MxMjAxMzk1QzE0MEFFCis6MTAzQkIwMDBGNTdENUQ4MjYwMTQ2OTQzQTVEQTJGRTlGRDIwRTE4MjdECis6MTAzQkMwMDA3RTVDQ0YxOTI4QTNCQUQ4M0M3NkEwQ0M4OUY0NDc5QjU5Cis6MTAzQkQwMDBCQTVFM0JGNkUyRDc5MDhERkNDNzhDMDZDQTk3NUYwN0FBCis6MTAzQkUwMDAwNjA1RTUzNjg0OTgzNzQyNzVEMzg5RkQ1QTk0QjFERkNFCis6MTAzQkYwMDBBNzY0MDk3RDlCODdEMUE5QkNDQzNFNDA0NEM0RjVBM0YyCis6MTAzQzAwMDAwRTU2OTMxRkU1RTE5NEU3MTVBNDU3NzRGMTc2Q0FFQkJECis6MTAzQzEwMDA5NTFFQjMxMkFBQTAzQzM5MDVERjk1MDE2OTE1RUQ4NzAxCis6MTAzQzIwMDBCMDkxRTYzMzVBOUZCMkNENDNGQkFEMzlEMDQzRjJCNkUzCis6MTAzQzMwMDBBNUQxMzhDNzNDMDc0RUU3MkU5MUQ0OTIxMkY1QjU1NTYxCis6MTAzQzQwMDA1NjE3RjU5Mjc1NTUwOTlFNkYxQjY3MzJENUU5QjY4RkU5Cis6MTAzQzUwMDBDRkFEMDI3NTBEQzAxRThFNjdEN0FEMjdDMDM5Q0JFRjMzCis6MTAzQzYwMDBBRUQzRTMwNkVBOEZFRUUzMTgyRkRBRUY4RThFN0Y1MUE0Cis6MTAzQzcwMDA4QzdBQjY5RTU5NUZBQkRBMUQwMEFBRkY4MEQ2Q0Y1QjY3Cis6MTAzQzgwMDA0RkFCQjgwNDRFNEYxQTM2QjgzMzdBRDZCQkVDQkI0QkE5Cis6MTAzQzkwMDAzMEI3QTM0QUVCOEI0M0M4QkE5RUYyRjYzODQwRUM2NEM3Cis6MTAzQ0EwMDA2M0YzQ0U3OTQ4NkI2NDExMzdFODUyNjUzRUVDQzM3RTBFCis6MTAzQ0IwMDBENzQ1MDNGNTUxNjA5N0E2Q0Y3NTcxNzdBNTg4QjczMUMxCis6MTAzQ0MwMDAwRjY2RDVDMzk4QTIxNzcyNjk3OUM0NDNDOEM1MDM5NjE1Cis6MTAzQ0QwMDAzREIwMTg4N0NENTZBQjhFNjgzODYwQ0QyNjdBQjg4NzUwCis6MTAzQ0UwMDBCQjc0ODhBQjk3NTkxNDA5RjEwRTlBQjI2QjY4NEVERTFCCis6MTAzQ0YwMDAzNEFCMzQ2NjUxRTkwRUVFMUJFRjQwMTc2RkYyMEI2NkUyCis6MTAzRDAwMDBDMEJBREYyMTBEMzBBMjRGQjk3QjE4MjIwRDhCRjJGRDE2Cis6MTAzRDEwMDAzMUFBNUYwNzQ0MTkwODIwRTI4Q0ZDOUVGRUY0ODc1QTAyCis6MTAzRDIwMDBCMkZGNjQ3OUYyMzc0MDk3RjQzQkRCOUE1NzYyN0Q3Q0FGCis6MTAzRDMwMDBBRTY4RjFCOTkzQjU1NEU3NzNDRUFBNzNGQTg4MUVGNjRDCis6MTAzRDQwMDA5ODk3NTBEQzNFNjhBQTI2MkRGODlGRjI3RTlCNDc2ODI0Cis6MTAzRDUwMDAwRUM3NThGQzdERDI5RjhFRjc5NkQ2QzczRUEzNzUwRjJGCis6MTAzRDYwMDA0MzNGMUI5Q0ZFNkZDODhGNjc5OUJFREFDMzI5MDdEMkY5Cis6MTAzRDcwMDA3Q0QyM0ZBRDU3Q0Y3MUZFN0E0RDU4MTc3NURBRjAyREQyCis6MTAzRDgwMDBFNTEwMDIyQzU5NDNCMUMzNEE3NUNEQkM1RTA4QTJGREIzCis6MTAzRDkwMDAzRUY3RDkwRDU0MUY3QjUzMjYzMEEyRERCMDg2NDc1RDE4Cis6MTAzREEwMDBDQTMyQzk5MEFGQjQ3ODM1MDc5Q0M3Q0M5OTRGNzcwQzBECis6MTAzREIwMDA5Qzc1RjM5MDExRkREQzBCQTYwOEYxODMwOUU3QjEyQjhDCis6MTAzREMwMDAzMzhGMEREQ0VDMTVGQ0IxMkY2RkQzN0MyRjkxN0U5REQyCis6MTAzREQwMDBDODQxRkU5MjFENEMwOTIzNEZFQjhEQTkyM0RGMjI1REM0Cis6MTAzREUwMDAwQjExMEZFMURBOTVFRjlGQTIzODEyMzc1NjRGRkEzMUQ3Cis6MTAzREYwMDBCRjdCRTVBODQ5NzFBQkZBNjZGQjFGN0JFRDc2QjY5REVDCis6MTAzRTAwMDA2N0ZDOUE0RTREOURGODY4Mjk1MTkzQjg3N0VBNjI5MjAzCis6MTAzRTEwMDBCODM3RUVGNzY3REFFMUQ0OTExREU0OEI3M0UyQjdGMkJECis6MTAzRTIwMDAwODYzQzQzRjcxOTlGQ0FCMzM1OUUzNTIzNkM5RTk3RjRCCis6MTAzRTMwMDA5RTdEQUZDMDg1RDJEQ0E5NDVFMjJBODE5OTEyOUNGNjBECis6MTAzRTQwMDA2MTM1NkY0RjZBN0Q5OENFOEI4NUMwNUY0NjU0Q0Q0RkVDCis6MTAzRTUwMDAxQTNGRTFGQ0FDRkJFNDMzRUJEODNBQUE5Rjc0QkZCRTM3Cis6MTAzRTYwMDBBQ0VEREZCODU1OTk0M0YzRTU0NkFDMkEwN0RDMEZFRjFDCis6MTAzRTcwMDBDRjRCMzg1RkU5OUQ3MEI4QzI2QkY3MkNDQkRDQTc2QkRBCis6MTAzRTgwMDBEMkI3QUI3NkRGNEE5QURFMzUxQTRFNkJBQzVDQzVFNTJECis6MTAzRTkwMDBGOUZCNzBEMUVBMjQ1RDA3NjlCRkQzNzk0RUU3MEY1RTY1Cis6MTAzRUEwMDBCRjcwMkVBNzQyRTRBREZBMUQxMEY5OUE0QkY2MTNCNzc2Cis6MTAzRUIwMDBDRkJGODU2RDA1QzU5Mjc3RDI1RkYxN0ZDQzU3RENCQzUzCis6MTAzRUMwMDA5MERFMEQ0MzVDQkMxQjRBMDlGODI1ODI3QTM5QzYwNzhGCis6MTAzRUQwMDAyRTEwRjNBMDU1QjIyOEZEMEY5ODA3N0U5QTA3OEI2OTI0Cis6MTAzRUUwMDAxRTBDODgzRUJGQzk1M0U3MzhBMzc5RDAyM0Q2MEU0OEFECis6MTAzRUYwMDBFREQ0RTEzQUMxOTMzNkYyMzc2OUM2QUE0N0VBRjc1NERFCis6MTAzRjAwMDA4QTdCQTA4NDNBQkE0QUNEMTNGNUY1OTFENzZDNDdFOTdDCis6MTAzRjEwMDBGRDE2NjZERTgzMjY5NDBGRUJCNTdFREY2QzhEOENFMjlBCis6MTAzRjIwMDBGRTc0ODQ4N0Y0Njg2RjMwMzc3MkIwMDNGNzA3RDdDQzFDCis6MTAzRjMwMDA1NTQyODhEMzM0Njg3QzlEMTYzMTE3OUVFMDVDQUM1M0EzCis6MTAzRjQwMDAyRDA1OTFBMzE1QzQ4RjdEOEQ3MTBFQjYzQzIyRUVGMTI3Cis6MTAzRjUwMDAwRkVGNEFFMkJEOTg5QTBGRUFCOTA3MTYwQ0QzNzlBMzdFCis6MTAzRjYwMDA0QkU4RkIyNDNENjdGNkQ5ODRCRUMxNDY2RjkxNDU5QzYyCis6MTAzRjcwMDAxNzcwOTI4RkU0Rjk1RkEyRkMxNjRCMkExRjNFMDQwNENGCis6MTAzRjgwMDBERkExNDNERTIyQ0FDN0ExMjY4M0UwREJDRjdDMkRFRDczCis6MTAzRjkwMDBBNEE3REFBQUQwRkIzMkQ5NjIzOTM5QTZBNjIzQ0U5NkQ1Cis6MTAzRkEwMDBEMjdCNTU4RDM3NURCRkMzMEI2NDgxNEI3OTY4RjIyMDlFCis6MTAzRkIwMDBCRDQzNDI3NUUwRUFBMUY3MkJENUUxRTI0QzdFOTgxN0FDCis6MTAzRkMwMDA3MzYxQ0ZFNDI5NUQ4RjIxM0RFNjJCNUZDRDU3MUZGQjQ5Cis6MTAzRkQwMDA3N0JFRjJCNTdDQjEyMEQ2NkQzNkU1MkQyQUYwQkZDOThCCis6MTAzRkUwMDBENTNDRUM5MDIwOTk4NTMxNDk1QzcxMTg5MUZFOTFFRjk4Cis6MTAzRkYwMDA3RjU1OERGMzQyMTE5REI3MUE5M0NCMDZFODVEQ0NBMTk2Cis6MTA0MDAwMDAzM0ZBODAzRTBDNTE5RjhCRjczOURFQTI1OEU3NkQ1QTg4Cis6MTA0MDEwMDA5REI3QTVFQkYxOERGQkVBMzEzOTM3NzcyQTRCQUI0N0RBCis6MTA0MDIwMDA5NEZGREVFMkVCMjM3QkJGQjA0QkNCNjlGM0ZDNUY1MjI2Cis6MTA0MDMwMDBGMzgzRUNFQ0Q1RTZDODlGNDY3RkJGRThGMzYzODVGRkNBCis6MTA0MDQwMDA3ODY3OUVGN0ZDNTA0QUY3MENEQzk5OTg0QkY3Q0U5OUFECis6MTA0MDUwMDAzQ0RGM0VFMjMzQ0Y0QjE5RkM4NDY3NTE0QTRGRjEyNEQ5Cis6MTA0MDYwMDA1QTdFMkFBNUY3NEM1QkYwNEJEMTM3RkZENUNGQjQxRjUyCis6MTA0MDcwMDA3RjAzREM0REUwODFCMDBDMDAwMDAwMDAwMDAwMDAwMDc4Cis6MTA0MDgwMDAwMDAwMDAxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MEQ4Cis6MTA0MDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgwMDAwMDAwMEY4Cis6MTA0MEEwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTA0MEIwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMEQwCis6MTA0MEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMEU4Cis6MTA0MEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTA0MEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTA0MEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTA0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTA0MTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTA0MTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTA0MTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTA0MTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTA0MTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTA0MTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTA0MTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTA0MTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTA0MTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTA0MUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCis6MTA0MUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTA0MUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTA0MUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCis6MTA0MUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzMjgwMDEwMDAwMDY0Cis6MTA0MUYwMDAwMDAwMDAwODAwMDAzMzMwMDAxMDAwMDAwMDAwMDAwMjQyCis6MTA0MjAwMDAwMDAwMzMyODAwMTAwMDAwMDAwMDAwMTAwMDAwM0E3ODgxCis6MTA0MjEwMDAwMDAwMDAwMDAwMDAwMDA4ODAwMDAwMDAwMDAwMDAwMDE2Cis6MTA0MjIwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTA0MjMwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEyMEFECis6MTA0MjQwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDMzNjAwMDAxMDAwNENFCis6MTA0MjUwMDAwMDAwMDAwMTAwMDAzMzY4MDAwMDAwMDAwMDAwMDAwMkMwCis6MTA0MjYwMDAwMDAwMzM3MDAwMDAwMDAwMDAwMDAwMDgwMDAwMzM3NEZDCis6MTA0MjcwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDNBNzAwMDAwMDAwMDkyCis6MTA0MjgwMDAwMDAwMDAwODAwMDAzQTQwMDAwODAwMDAwMDAwMDAwODlDCis6MTA0MjkwMDAwMDAwM0Q4ODAwNDAwMDAwMDAwMDAwNDAwMDAwM0E1MDRGCis6MTA0MkEwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDNBNjAwMDA4MDAwMDVDCis6MTA0MkIwMDAwMDAwMDAwODAwMDAzQTg4MDBDODAwMDAwMDAwMDA5OEQ0Cis6MTA0MkMwMDAwMDAwM0MxODAwOTgwMDAwMDAwMDAwMjgwMDAwM0M1ODQ2Cis6MTA0MkQwMDAwMDk4MDAwMDAwMDAwMDI4MDAwMDMzNzgwMzYwMDAzMEUwCis6MTA0MkUwMDAwMDAwMDM2MDAwMDAzRUIwMDAwODAwMDAwMDAwMDAwMTc0Cis6MTA0MkYwMDAwMDAwM0VCMTAwMDgwMDAwMDAwMDAwMDEwMDAwMjAwODlFCis6MTA0MzAwMDAwMDEwMDAwMDAwMDAwMDEwMDAwMDIwMDAwMDAwMDAwMDZECis6MTA0MzEwMDAwMDAwMDAwODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTA0MzIwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTA0MzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTA0MzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECis6MTA0MzUwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDVECis6MTA0MzYwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMENECis6MTA0MzcwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTA0MzgwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDJECis6MTA0MzkwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDlECis6MTA0M0EwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA0M0IwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMEZECis6MTA0M0MwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDZECis6MTA0M0QwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECis6MTA0M0UwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTA0M0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTA0NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCis6MTA0NDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCis6MTA0NDIwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDBDCis6MTA0NDMwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCis6MTA0NDQwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCis6MTA0NDUwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMERDCis6MTA0NDYwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCis6MTA0NDcwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTA0NDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDCis6MTA0NDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDCis6MTA0NEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCis6MTA0NEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCis6MTA0NEMwMDAwMDAwMDAwMDAwMDAxMkM4MDA4MDAwMDAwMDAwMDA4MDEyCis6MTA0NEQwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDlCCis6MTA0NEUwMDAwNDkwMDAwMDAwMDAwNDkwMDAwMDE5QzgwMDAwMDAwMEMzCis6MTA0NEYwMDAwMDAwMDAwODAwMDA0OTQ4MDAwODAwMDAwMDAwMDAwODEzCis6MTA0NTAwMDAwMDAwNDkyODAwMDgwMDAwMDAwMDAwMDgwMDAwNDkzOEE5Cis6MTA0NTEwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDIwMDgwMDEwMDAwMDUzCis6MTA0NTIwMDAwMDAwMDAxMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwODUzCis6MTA0NTMwMDAwMDAwNDAxMDA0OTAwMDQwMDAwMDAwNDAwMDAwNDk5ODM2Cis6MTA0NTQwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDQ5OTkwMDA4MDAwMDc4Cis6MTA0NTUwMDAwMDAwMDAwMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCis6MTA0NTYwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDRCCis6MTA0NTcwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMEJCCis6MTA0NTgwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCis6MTA0NTkwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDFCCis6MTA0NUEwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDhCCis6MTA0NUIwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTA0NUMwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMEVCCis6MTA0NUQwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDVCCis6MTA0NUUwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCis6MTA0NUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCis6MTA0NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCis6MTA0NjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCis6MTA0NjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDBBCis6MTA0NjMwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMEZBCis6MTA0NjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTA0NjUwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDVBCis6MTA0NjYwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMENBCis6MTA0NjcwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJBCis6MTA0NjgwMDAwMDAwNDAwMDAwMTgwMDAwMDAwMDAwMTgwMDAwNDMwMDc3Cis6MTA0NjkwMDAwMDQwMDAwMDAwMDAwMDQwMDAwMDQzMDAwMDQwMDAwMjE1Cis6MTA0NkEwMDAwMDAwMDAwMTAwMDA0MzAxMDA0MDAwMDIwMDAwMDAwMDgzCis6MTA0NkIwMDAwMDAwMzAwMDAwNDAwMDAwMDAwMDAwNDA4MDAwMDAwMENBCis6MTA0NkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwMDAwMDA4MDA0MDcyCis6MTA0NkQwMDAwMDAwMDAwNDAwMDAzMDA0MDAwODAwNDAwMDAwMDAwNDU2Cis6MTA0NkUwMDAwMDAwNEIwMDAwMjgwMDAwMDAwMDAwMjgwMDAwNEI1MDk0Cis6MTA0NkYwMDAwMDEwMDAwMDAwMDAwMDEwMDAwMDM4MDAwMDgwMDAwMEUyCis6MTA0NzAwMDAwMDAwMDA4MDAwMDAzODAwMDAwODAwODAwMDAwMDAwMjY3Cis6MTA0NzEwMDAwMDAwMzkwMDAwMjAwMDAwMDAwMDAwMjAwMDAwMjAwOEY4Cis6MTA0NzIwMDAwMDEwMDAwMDAwMDAwMDEwMDAwMDIwMDAwMDAwMDAwMDQ5Cis6MTA0NzMwMDAwMDAwMDAwODAwMDA1MTA4MDAwODAwMDAwMDAwMDAwODA4Cis6MTA0NzQwMDAwMDAwNTEyMDAwMDgwMDAwMDAwMDAwMDgwMDAwNTEzMDY3Cis6MTA0NzUwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDUxQzAwMDA4MDAwMDMwCis6MTA0NzYwMDAwMDAwMDAwMTAwMDA1MUMxMDAwODAwMDAwMDAwMDAwMTJECis6MTA0NzcwMDAwMDAwMzk0MDAwMTAwMDA0MDAwMDAwMDQwMDAwNTFEMDg3Cis6MTA0NzgwMDAwMDMwMDAxODAwMDAwMDEwMDAwMDUxRDgwMDMwMDAxODYwCis6MTA0NzkwMDAwMDAwMDAwMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Cis6MTA0N0EwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDA5Cis6MTA0N0IwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDc5Cis6MTA0N0MwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTA0N0QwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMEQ5Cis6MTA0N0UwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDQ5Cis6MTA0N0YwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Cis6MTA0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Cis6MTA0ODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Cis6MTA0ODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTA0ODMwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDc4Cis6MTA0ODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Cis6MTA0ODUwMDAwMDAwMDAwMDAwMDAyM0U4MDA4MDAwMDAwMDAwMDA4MDRECis6MTA0ODYwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwODFGCis6MTA0ODcwMDAwMDEwMDAwMDAwMDAwMDEwMDAwMDIwMDAwMDAwMDAwMEY4Cis6MTA0ODgwMDAwMDAwMDAwODAwMDAyREEwMDAwODAwMDAwMDAwMDAwODQzCis6MTA0ODkwMDAwMDAwMkRCODAwMDgwMDAwMDAwMDAwMDgwMDAwMjRFODE3Cis6MTA0OEEwMDAwMkQwMDAyODAwMDAwMkQwMDAwMDJFNTgwMDA4MDAwMEFFCis6MTA0OEIwMDAwMDAwMDAwMTAwMDAyRTU5MDAwODAwMDAwMDAwMDAwMTY3Cis6MTA0OEMwMDAwMDAwMkQ5MDAwMDgwMDAwMDAwMDAwMDg4MDAwMDAwMDlCCis6MTA0OEQwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDU4Cis6MTA0OEUwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTA0OEYwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMEI4Cis6MTA0OTAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDI3Cis6MTA0OTEwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Cis6MTA0OTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Cis6MTA0OTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTA0OTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Cis6MTA0OTUwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDU3Cis6MTA0OTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Cis6MTA0OTcwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Cis6MTA0OTgwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDI3Cis6MTA0OTkwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDk3Cis6MTA0OUEwMDAwMDAwMDAwMDAwMDAyNTAwMDA0MDAwMDAwMDAwMDAwODlBCis6MTA0OUIwMDAwMDAwMjUwODAwNDAwMDAwMDAwMDAwMjgwMDAwMDlDMDk5Cis6MTA0OUMwMDAwMTIwMDAxMDAwMDAwMDA4ODAwMDAwMDAwMDAwMDAwMDJFCis6MTA0OUQwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTA0OUUwMDAwMDAwNDAyMDAyRDAwMDI4MDAwMDAwMDgwMDAwMzAwMDM1Cis6MTA0OUYwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDUwOTkwMDAwMDAwMEJFCis6MTA0QTAwMDAwMDAwMDAwMTAwMDA1MEIwMDAwMDAwMDAwMDAwMDAwMkEzCis6MTA0QTEwMDAwMDAwNDVBMDAwOTAwMDA4MDAwMDAwMDg4MDAwMDAwMDkxCis6MTA0QTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NjAwMDA4MDAwMEY1Cis6MTA0QTMwMDAwMDAwMDAwMTAwMDAyOTYxMDAwODAwMDAwMDAwMDAwMUUyCis6MTA0QTQwMDAwMDAwMjk3MDAwMDgwMDA0MDAwMDAwMDIwMDAwMjk3ODFFCis6MTA0QTUwMDAwMDA4MDAwNDAwMDAwMDA0MDAwMDJGQjAwMDA4MDAwMDVGCis6MTA0QTYwMDAwMDAwMDAwNDAwMDAyRkI0MDAwODAwMDAwMDAwMDAwNDUzCis6MTA0QTcwMDAwMDAwMkZDMDAwMDAwMDAwMDAwMDAwMDgwMDAwMkZDODQ4Cis6MTA0QTgwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDMwMDAwMDAwMDAwMEVFCis6MTA0QTkwMDAwMDAwMDAxMDAwMDA1MDQwMDAwMTAwMDEwMDAwMDAwMTczCis6MTA0QUEwMDAwMDAwNTAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDgwODg2Cis6MTA0QUIwMDAwMDEwMDAwMDAwMDAwMDA0MDAwMDA4MEMwMDEwMDAwMEJFCis6MTA0QUMwMDAwMDAwMDAwMTAwMDAwOEI3MDAwMDAwMDAwMDAwMDAwMTI1Cis6MTA0QUQwMDAwMDAwMDhCNjAwMDAwMDAwMDAwMDAwMDEwMDAwMTAwMDA3Cis6MTA0QUUwMDAwMDMwMDAxODAwMDAwMDA0MDAwMDEwMDQwMDMwMDAxODFFCis6MTA0QUYwMDAwMDAwMDAwNDAwMDAxMDA4MDAzMDAwMTgwMDAwMDAwMjUwCis6MTA0QjAwMDAwMDAwMTAwQTAwMzAwMDE4MDAwMDAwMDIwMDAwMTAwQzI1Cis6MTA0QjEwMDAwMDMwMDAxODAwMDAwMDAxMDAwMDEwMEQwMDMwMDAxOEU3Cis6MTA0QjIwMDAwMDAwMDAwMTAwMDAxMDBFMDAzMDAwMTgwMDAwMDAwMTFECis6MTA0QjMwMDAwMDAwMTAxMDAwMzAwMDE4MDAwMDAwMDQwMDAwMTAxNEU1Cis6MTA0QjQwMDAwMDMwMDAxODAwMDAwMDA0MDAwMDMwMDAwMTAwMDA4MDY4Cis6MTA0QjUwMDAwMDA4MDAwNDAwMDAzMDA0MDEwMDAwODAwMDA4MDAwNDg4Cis6MTA0QjYwMDAwMDAwMDAwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMzA2OEEzCis6MTA0QjcwMDAwMTAwMDA4MDAwMDAwMDAxMDAwMDMwNjkwMTAwMDA4MDk5Cis6MTA0QjgwMDAwMDAwMDAwMTAwMDAzMDZDMDEwMDAwODAwMDAwMDAwMjA1Cis6MTA0QjkwMDAwMDAwMzA2RTAxMDAwMDgwMDAwMDAwMDIwMDAwMzA3MDU0Cis6MTA0QkEwMDAwMTAwMDA4MDAwMDAwMDA0MDAwMDMwNzQwMTAwMDA4MDVCCis6MTA0QkIwMDAwMDAwMDAwNDAwMDAzMDY2MDEwMDAwODAwMDAwMDAwMkQ4Cis6MTA0QkMwMDAwMDAwMzA2NDAxMDAwMDgwMDAwMDAwMDEwMDAwMzA2MDNGCis6MTA0QkQwMDAwMTAwMDA4MDAwMDAwMDAyMDAwMDMwNjIwMTAwMDA4MDNGCis6MTA0QkUwMDAwMDAwMDAwMjAwMDAzMDUwMDEwMDAwODAwMDAwMDAwNEJFCis6MTA0QkYwMDAwMDAwMzA1NDAxMDAwMDgwMDAwMDAwMDQwMDAwMzA1ODI0Cis6MTA0QzAwMDAwMTAwMDA4MDAwMDAwMDA0MDAwMDMwNUMwMTAwMDA4MDEyCis6MTA0QzEwMDAwMDAwMDAwNDAwMDAzMDdDMDEwMDAwODAwMDAwMDAwMTYyCis6MTA0QzIwMDAwMDAwMzA3RDAxMDAwMDgwMDAwMDAwMDEwMDAwMUMxODIxCis6MTA0QzMwMDAwMDEwMDAwMDAwMDAwMDA0MDAwMDFDMzAwMDEwMDAwMDA0Cis6MTA0QzQwMDAwMDAwMDAwNDAwMDAxQzM4MDAxMDAwMDAwMDAwMDAwNEY4Cis6MTA0QzUwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDU0Cis6MTA0QzYwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMEM0Cis6MTA0QzcwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Cis6MTA0QzgwMDAwMDAwNEMxMDAwMDgwMDAwMDAwMDAwMDIwMDAwNEMxMjYwCis6MTA0QzkwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDRDMTQwMDA4MDAwMEEyCis6MTA0Q0EwMDAwMDAwMDAwNDAwMDA0QzIwMDAwODAwMDAwMDAwMDAwODg0Cis6MTA0Q0IwMDAwMDAwNEMzMDAwNDAwMDA4MDAwMDAwMDgwMDAwNEMwMERDCis6MTA0Q0MwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDRDMDIwMDA4MDAwMDg0Cis6MTA0Q0QwMDAwMDAwMDAwMTAwMDA0QzA0MDAwODAwMDAwMDAwMDAwMjc5Cis6MTA0Q0UwMDAwMDAwNENEMDAwMDgwMDAwMDAwMDAwMDgwMDAwNENFMDZDCis6MTA0Q0YwMDAwMDA4MDAwMDAwMDAwMDA0MDAwMDRDRTQwMDA4MDAwMDcwCis6MTA0RDAwMDAwMDAwMDAwMTAwMDA0Q0YwMDAwODAwMDAwMDAwMDAwMjVDCis6MTA0RDEwMDAwMDAwNENGNDAwMDgwMDAwMDAwMDAwMDIwMDAwNEQwMEZDCis6MTA0RDIwMDAwMDA4MDAwMDAwMDAwMDA0MDAwMDUwMDAwMDEwMDAwMDE3Cis6MTA0RDMwMDAwMDAwMDAwNDAwMDA1MDA0MDAxMDAwMDAwMDAwMDAwNDA3Cis6MTA0RDQwMDAwMDAwNTAwODAwMTAwMDAwMDAwMDAwMDQwMDAwMTQwMEUzCis6MTA0RDUwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDE0MDIwMDA4MDAwMDJCCis6MTA0RDYwMDAwMDAwMDAwMTAwMDAxNDA0MDAwODAwMDAwMDAwMDAwMjIwCis6MTA0RDcwMDAwMDAwMTQxMDAwMDgwMDAwMDAwMDAwMDIwMDAwMTQxNERECis6MTA0RDgwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDE0MTYwMDA4MDAwMEU3Cis6MTA0RDkwMDAwMDAwMDAwMjAwMDAxOUI4MDAwODAwMDAwMDAwMDAwODMwCis6MTA0REEwMDAwMDAwMTQyMDAwMDgwMDAwMDAwMDAwMDIwMDAwMTQyNDhECis6MTA0REIwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDE5QzgwMDA4MDAwMDAwCis6MTA0REMwMDAwMDAwMDAwODAwMDAyQzEwMDAwODAwMDAwMDAwMDAwMTk2Cis6MTA0REQwMDAwMDAwMkMxMTAwMDgwMDAwMDAwMDAwMDEwMDAwMkMxMjRGCis6MTA0REUwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDJDMTMwMDA4MDAwMDczCis6MTA0REYwMDAwMDAwMDAwMTAwMDAyQzAwMDAwODAwMDAwMDAwMDAwMjdDCis6MTA0RTAwMDAwMDAwMkMwMjAwMDgwMDAwMDAwMDAwMDEwMDAwMkMwNDNCCis6MTA0RTEwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDJDMzAwMDA4MDAwMDI0Cis6MTA0RTIwMDAwMDAwMDAwMjAwMDAyQzMyMDAwODAwMDAwMDAwMDAwMjE4Cis6MTA0RTMwMDAwMDAwMkMzNDAwMDgwMDAwMDAwMDAwMDIwMDAwMkMyMEJDCis6MTA0RTQwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDJDMjEwMDA4MDAwMDA0Cis6MTA0RTUwMDAwMDAwMDAwMTAwMDAyQzIyMDAwODAwMDAwMDAwMDAwMUZBCis6MTA0RTYwMDAwMDAwMkMyMzAwMDgwMDAwMDAwMDAwMDEwMDAwMkMyNDlBCis6MTA0RTcwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDJDMjUwMDA4MDAwMEQwCis6MTA0RTgwMDAwMDAwMDAwMTAwMDAyQzI2MDAwODAwMDAwMDAwMDAwMUM2Cis6MTA0RTkwMDAwMDAwMTQwMDAwMDgwMDAwMDAwMDAwMDIwMDAwMTQwMkRFCis6MTA0RUEwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDE0MDQwMDA4MDAwMEQ5Cis6MTA0RUIwMDAwMDAwMDAwMjAwMDAxNDEyMDBDMDAwMTgwMDAwMDAwMkYwCis6MTA0RUMwMDAwMDAwMTQxMDAwQzAwMDE4MDAwMDAwMDIwMDAwMTQxQ0I0Cis6MTA0RUQwMDAwMEMwMDAxODAwMDAwMDA4MDAwMDE0MTQwMEMwMDAxOEYyCis6MTA0RUUwMDAwMDAwMDAwODAwMDAxNDI3MDBDMDAwMTgwMDAwMDAwMUE2Cis6MTA0RUYwMDAwMDAwMTQyNDAwQzAwMDE4MDAwMDAwMDIwMDAwMTQyNjY2Cis6MTA0RjAwMDAwMEMwMDAxODAwMDAwMDAxMDAwMDE1OTAwMDA4MDAwMDFCCis6MTA0RjEwMDAwMDAwMDAwODAwMDAxNUEwMDAwODAwMDAwMDAwMDAwOEM0Cis6MTA0RjIwMDAwMDAwMTVCMDAwMDgwMDAwMDAwMDAwMDg4MDAwMDAwMDJDCis6MTA0RjMwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMEYxCis6MTA0RjQwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCis6MTA0RjUwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDUxCis6MTA0RjYwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMEMxCis6MTA0RjcwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCis6MTA0RjgwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDIxCis6MTA0RjkwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDkxCis6MTA0RkEwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCis6MTA0RkIwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMEYxCis6MTA0RkMwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDYxCis6MTA0RkQwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCis6MTA0RkUwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMEMxCis6MTA0RkYwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDMxCis6MTA1MDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTA1MDEwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDkwCis6MTA1MDIwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwCis6MTA1MDMwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCis6MTA1MDQwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDYwCis6MTA1MDUwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMEQwCis6MTA1MDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCis6MTA1MDcwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MDg1MDgwMDAwNjAyMDkwMDAwMDAwMDAwMTcKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9ibngyeC9ibngyeC1lMWgtNi4yLjUuMC5mdy5paGV4IGIvZmlybXdhcmUvYm54MngvYm54MngtZTFoLTYuMi41LjAuZncuaWhleApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYwNGRmNi4uMDAwMDAwMAotLS0gYS9maXJtd2FyZS9ibngyeC9ibngyeC1lMWgtNi4yLjUuMC5mdy5paGV4CisrKyAvZGV2L251bGwKQEAgLTEsMTMxODEgKzAsMCBAQAotOjEwMDAwMDAwMDAwMDRGNDgwMDAwMDA2ODAwMDAwNzBDMDAwMDRGQjhENwotOjEwMDAxMDAwMDAwMDFFRDQwMDAwNTZDODAwMDAwMDk0MDAwMDc1QTAyNwotOjEwMDAyMDAwMDAwMDlGNEMwMDAwNzYzODAwMDAwMENDMDAwMTE1ODhDRAotOjEwMDAzMDAwMDAwMERDNEMwMDAxMTY1ODAwMDAwMDk0MDAwMUYyQThGQQotOjEwMDA0MDAwMDAwMDQwMDAwMDAxRjM0MDAwMDAwMEE0MDAwMjMzNDgxQgotOjEwMDA1MDAwMDAwMEYzOEMwMDAyMzNGMDAwMDAwRkZDMDAwMzI3ODA0NwotOjEwMDA2MDAwMDAwMDAwMDQwMDAzMzc4MDAyMDQwMDQ4MDAwMDAwMEY3NQotOjEwMDA3MDAwMDIwNDAwNTQwMDAwMDA0NTAyMDQwMDVDMDAwMDAwMDY3OQotOjEwMDA4MDAwMDIwNDAwNzAwMDAwMDAwNDAyMDQwMDc4MDAwMDAwMDA3OAotOjEwMDA5MDAwMDIwNDAwN0MxMjE3MDAwMDAyMDQwMDgwMjIxNzAwMDBGNgotOjEwMDBBMDAwMDIwNDAwODQzMjE3MDAwMDA2MDQwMDg4MDAwMDAwMDVFNgotOjEwMDBCMDAwMDIwNDAwOUMxMjE1MDAwMDAyMDQwMEEwMjIxNTAwMDA5QQotOjEwMDBDMDAwMDIwNDAwQTQzMjE1MDAwMDA2MDQwMEE4MDAwMDAwMDQ4OQotOjEwMDBEMDAwMDIwNDAwQjgwMjEwMDAwMDAyMDQwMEJDMDAxMDAwMDA3RQotOjEwMDBFMDAwMDIwNDAwQzAxMDEwMDAwMDAyMDQwMEM0MjAxMDAwMDAzMAotOjEwMDBGMDAwMDIwNDAwQzgzMDEwMDAwMDAyMDQwMENDNDAxMDAwMDBEMAotOjEwMDEwMDAwMDYwNDAwRDAwMDAwMDAwMzAyMDQwMERDMDAxMDAwMDAyMAotOjEwMDExMDAwMDIwNDAwRTAxMjE0MDAwMDAyMDQwMEU0MjIxNDAwMDBCMwotOjEwMDEyMDAwMDIwNDAwRTgzMjE0MDAwMDAyMDQwMEVDNDIxNDAwMDA1MwotOjEwMDEzMDAwMDYwNDAwRjAwMDAwMDAwMzAxMDQwMTI0MDAwMDAwMDA5OAotOjEwMDE0MDAwMDEwNDAxMjgwMDAwMDAwMDAxMDQwMTJDMDAwMDAwMDA0RgotOjEwMDE1MDAwMDEwNDAxMzAwMDAwMDAwMDAyMDQwMUQwMDAwMDg5MDYwMwotOjEwMDE2MDAwMDIwNDAwMDQwMDAwMDBGRjAyMDQwMDA4MDAwMDAwRkY3OQotOjEwMDE3MDAwMDIwNDAwMEMwMDAwMDBGRjAyMDQwMDEwMDAwMDAwRkY1OQotOjEwMDE4MDAwMDIwNDAwMTQwMDAwMDA3RjAyMDQwMDE4MDAwMDAwRkZCOQotOjEwMDE5MDAwMDIwNDAwMUMwMDAwMDBGRjAyMDQwMDIwMDAwMDAwRkYxOQotOjEwMDFBMDAwMDIwNDAwMjQwMDAwMDAzRTAyMDQwMDI4MDAwMDAwMDBCOQotOjEwMDFCMDAwMDIwNDAwMkMwMDAwMDAzRjAyMDQwMDMwMDAwMDAwM0Y1OQotOjEwMDFDMDAwMDIwNDAwMzQwMDAwMDAzRjAyMDQwMDM4MDAwMDAwM0YzOQotOjEwMDFEMDAwMDIwNDAwM0MwMDAwMDAzRjAyMDQwMDQwMDAwMDAwM0YxOQotOjEwMDFFMDAwMDIwNDAwNDQwMDAwMDAzRjAyMDQwNENDMDAwMDAwMDFBRgotOjEwMDFGMDAwMDIwNDIwMDgwMDAwMDIxMTAyMDQyMDBDMDAwMDAyMDA4QQotOjEwMDIwMDAwMDIwNDIwMTAwMDAwMDIwNDAyMDQyMDE0MDAwMDAyMTk1RAotOjEwMDIxMDAwMDIwNDIwMUMwMDAwRkZGRjAyMDQyMDIwMDAwMEZGRkY1QQotOjEwMDIyMDAwMDIwNDIwMjQwMDAwRkZGRjAyMDQyMDI4MDAwMEZGRkYzQQotOjEwMDIzMDAwMDIwNDIwMzgwMDAwMDAyMDA2MDQyMDNDMDAwMDAwMUZCQgotOjEwMDI0MDAwMDIwNDIwQjgwMDAwMDAwMTA2MDQyMEJDMDAwMDAwNUY4QQotOjEwMDI1MDAwMDIwNDIyMzgwN0ZGRkZGRjAyMDQyMjNDMDAwMDAwM0Y5NwotOjEwMDI2MDAwMDIwNDIyNDAwN0ZGRkZGRjAyMDQyMjQ0MDAwMDAwMEZBNwotOjEwMDI3MDAwMDEwNDIyNDgwMDAwMDAwMDAxMDQyMjRDMDAwMDAwMDA5QwotOjEwMDI4MDAwMDEwNDIyNTAwMDAwMDAwMDAxMDQyMjU0MDAwMDAwMDA3QwotOjEwMDI5MDAwMDEwNDIyNTgwMDAwMDAwMDAxMDQyMjVDMDAwMDAwMDA1QwotOjEwMDJBMDAwMDEwNDIyNjAwMDAwMDAwMDAxMDQyMjY0MDAwMDAwMDAzQwotOjEwMDJCMDAwMDEwNDIyNjgwMDAwMDAwMDAxMDQyMjZDMDAwMDAwMDAxQwotOjEwMDJDMDAwMDEwNDIyNzAwMDAwMDAwMDAxMDQyMjc0MDAwMDAwMDBGQwotOjEwMDJEMDAwMDEwNDIyNzgwMDAwMDAwMDAxMDQyMjdDMDAwMDAwMDBEQwotOjEwMDJFMDAwMEMwNDIwMDAwMDAwMDNFODBBMDQyMDAwMDAwMDAwMDFDNAotOjEwMDJGMDAwMEIwNDIwMDAwMDAwMDAwQTA2MDU0MDAwMDAwMDBEMDA2RAotOjEwMDMwMDAwMDIwNTAwNDQwMDAwMDAyMDAyMDUwMDQ4MDAwMDAwMzIwMQotOjEwMDMxMDAwMDIwNTAwOTAwMjE1MDAyMDAyMDUwMDk0MDIxNTAwMjAzRAotOjEwMDMyMDAwMDIwNTAwOTgwMDAwMDAzMDAyMDUwMDlDMDgxMDAwMDA0MwotOjEwMDMzMDAwMDIwNTAwQTAwMDAwMDAzMzAyMDUwMEE0MDAwMDAwMzAwOAotOjEwMDM0MDAwMDIwNTAwQTgwMDAwMDAzMTAyMDUwMEFDMDAwMDAwMDIxOAotOjEwMDM1MDAwMDIwNTAwQjAwMDAwMDAwNTAyMDUwMEI0MDAwMDAwMDYyMAotOjEwMDM2MDAwMDIwNTAwQjgwMDAwMDAwMjAyMDUwMEJDMDAwMDAwMDIwNwotOjEwMDM3MDAwMDIwNTAwQzAwMDAwMDAwMDAyMDUwMEM0MDAwMDAwMDVFNgotOjEwMDM4MDAwMDIwNTAwQzgwMDAwMDAwMjAyMDUwMENDMDAwMDAwMDJDNwotOjEwMDM5MDAwMDIwNTAwRDAwMDAwMDAwMjAyMDUwMEQ0MDAwMDAwMDFBOAotOjEwMDNBMDAwMDIwNTAxMTQwMDAwMDAwMTAyMDUwMTFDMDAwMDAwMDEwQgotOjEwMDNCMDAwMDIwNTAxMjAwMDAwMDAwMjAyMDUwMjA0MDAwMDAwMDEwNQotOjEwMDNDMDAwMDIwNTAyMEMwMDAwMDA0MDAyMDUwMjEwMDAwMDAwNDA3RgotOjEwMDNEMDAwMDIwNTAyMUMwMDAwMDAyMDAyMDUwMjIwMDAwMDAwMTM5QwotOjEwMDNFMDAwMDIwNTAyMjQwMDAwMDAyMDA2MDUwMjQwMDAwMDAwMEE2OQotOjEwMDNGMDAwMDQwNTAyODAwMDIwMDAwMDAyMDUwMDUwMDAwMDAwMDdGNAotOjEwMDQwMDAwMDIwNTAwNTQwMDAwMDAwNzAyMDUwMDU4MDAwMDAwMDAyQgotOjEwMDQxMDAwMDIwNTAwNUMwMDAwMDAwODAyMDUwMDYwMDAwMDAwMDEwOQotOjEwMDQyMDAwMDYwNTAwNjQwMDAwMDAwMzAyMDUwMEQ4MDAwMDAwMDY3NQotOjEwMDQzMDAwMDIwNTAwMDQwMDAwMDAwMTAyMDUwMDA4MDAwMDAwMDFBMAotOjEwMDQ0MDAwMDIwNTAwMEMwMDAwMDAwMTAyMDUwMDEwMDAwMDAwMDE4MAotOjEwMDQ1MDAwMDIwNTAwMTQwMDAwMDAwMTAyMDUwMDE4MDAwMDAwMDE2MAotOjEwMDQ2MDAwMDIwNTAwMUMwMDAwMDAwMTAyMDUwMDIwMDAwMDAwMDE0MAotOjEwMDQ3MDAwMDIwNTAwMjQwMDAwMDAwMTAyMDUwMDI4MDAwMDAwMDEyMAotOjEwMDQ4MDAwMDIwNTAwMkMwMDAwMDAwMTAyMDUwMDMwMDAwMDAwMDEwMAotOjEwMDQ5MDAwMDIwNTAwMzQwMDAwMDAwMTAyMDUwMDM4MDAwMDAwMDFFMAotOjEwMDRBMDAwMDIwNTAwM0MwMDAwMDAwMTAyMDUwMDQwMDAwMDAwMDFDMAotOjEwMDRCMDAwMDIwNTAwRTAwMDAwMDAwRDAyMDUwMEU4MDAwMDAwMDA1OQotOjEwMDRDMDAwMDIwNTAwRjAwMDAwMDAwMDAyMDUwMEY4MDAwMDAwMDAzNgotOjEwMDREMDAwMDIwNTAwRTQwMDAwMDAyRDAyMDUwMEVDMDAwMDAwMjBGMQotOjEwMDRFMDAwMDIwNTAwRjQwMDAwMDAyMDAyMDUwMEZDMDAwMDAwMjBDRQotOjEwMDRGMDAwMDIwNTAwRTAwMDAwMDAxRDAyMDUwMEU4MDAwMDAwMTBGOQotOjEwMDUwMDAwMDIwNTAwRjAwMDAwMDAxMDAyMDUwMEY4MDAwMDAwMTBENQotOjEwMDUxMDAwMDIwNTAwRTQwMDAwMDAzRDAyMDUwMEVDMDAwMDAwMzA5MAotOjEwMDUyMDAwMDIwNTAwRjQwMDAwMDAzMDAyMDUwMEZDMDAwMDAwMzA2RAotOjEwMDUzMDAwMDIwNTAwRTAwMDAwMDA0RDAyMDUwMEU4MDAwMDAwNDA1OAotOjEwMDU0MDAwMDIwNTAwRjAwMDAwMDA0MDAyMDUwMEY4MDAwMDAwNDAzNQotOjEwMDU1MDAwMDIwNTAwRTQwMDAwMDA2RDAyMDUwMEVDMDAwMDAwNjBGMAotOjEwMDU2MDAwMDIwNTAwRjQwMDAwMDA2MDAyMDUwMEZDMDAwMDAwNjBDRAotOjEwMDU3MDAwMDIwNTAwRTAwMDAwMDA1RDAyMDUwMEU4MDAwMDAwNTBGOAotOjEwMDU4MDAwMDIwNTAwRjAwMDAwMDA1MDAyMDUwMEY4MDAwMDAwNTBENQotOjEwMDU5MDAwMDIwNTAwRTQwMDAwMDA3RDAyMDUwMEVDMDAwMDAwNzA5MAotOjEwMDVBMDAwMDIwNTAwRjQwMDAwMDA3MDAyMDUwMEZDMDAwMDAwNzA2RAotOjEwMDVCMDAwMDQwNjEwMDAwMjAwMDAyMDAyMDYwMERDMDAwMDAwMDExQQotOjEwMDVDMDAwMDEwNjAwRDgwMDAwMDAwMDA0MDYwMjAwMDAwMzAyMjAxQgotOjEwMDVEMDAwMDIwNjAwREMwMDAwMDAwMDAxMDYwMEI4MDAwMDAwMDA3OAotOjEwMDVFMDAwMDEwNjAwQzgwMDAwMDAwMDAyMDYwMTZDMDAwMDAwMDBDNwotOjEwMDVGMDAwMDEwNjAwQkMwMDAwMDAwMDAxMDYwMENDMDAwMDAwMDA2NQotOjEwMDYwMDAwMDIwNjAxNzAwMDAwMDAwMDA3MTgwNDAwMDA5MTAwMDBCRAotOjEwMDYxMDAwMDgxODA3RDgwMDA1MDIyMzA3MUMwMDAwMkJGNzAwMDA2QwotOjEwMDYyMDAwMDcxQzgwMDAyREQxMEFGRTA3MUQwMDAwMkY0NjE2NzNGRgotOjEwMDYzMDAwMDcxRDgwMDAxNjM0MjI0NTA4MURCMTMwNDlEQTAyMjUxNQotOjEwMDY0MDAwMDExODAwMDAwMDAwMDAwMDAxMTgwMDA0MDAwMDAwMDA3NAotOjEwMDY1MDAwMDExODAwMDgwMDAwMDAwMDAxMTgwMDBDMDAwMDAwMDA1NAotOjEwMDY2MDAwMDExODAwMTAwMDAwMDAwMDAxMTgwMDE0MDAwMDAwMDAzNAotOjEwMDY3MDAwMDIxODAwMjAwMDAwMDAwMTAyMTgwMDI0MDAwMDAwMDJGRgotOjEwMDY4MDAwMDIxODAwMjgwMDAwMDAwMzAyMTgwMDJDMDAwMDAwMDBERgotOjEwMDY5MDAwMDIxODAwMzAwMDAwMDAwNDAyMTgwMDM0MDAwMDAwMDFCRAotOjEwMDZBMDAwMDIxODAwMzgwMDAwMDAwMDAyMTgwMDNDMDAwMDAwMDFBMQotOjEwMDZCMDAwMDIxODAwNDAwMDAwMDAwNDAyMTgwMDQ0MDAwMDAwMDA3RQotOjEwMDZDMDAwMDIxODAwNDgwMDAwMDAwMTAyMTgwMDRDMDAwMDAwMDM1RQotOjEwMDZEMDAwMDIxODAwNTAwMDAwMDAwMDAyMTgwMDU0MDAwMDAwMDE0MQotOjEwMDZFMDAwMDIxODAwNTgwMDAwMDAwNDAyMTgwMDVDMDAwMDAwMDAxRQotOjEwMDZGMDAwMDIxODAwNjAwMDAwMDAwMTAyMTgwMDY0MDAwMDAwMDNGRQotOjEwMDcwMDAwMDIxODAwNjgwMDAwMDAwMDAyMTgwMDZDMDAwMDAwMDFFMAotOjEwMDcxMDAwMDIxODAwNzAwMDAwMDAwNDAyMTgwMDc0MDAwMDAwMDBCRAotOjEwMDcyMDAwMDIxODAwNzgwMDAwMDAwNDAyMTgwMDdDMDAwMDAwMDM5QQotOjEwMDczMDAwMDYxODAwODAwMDAwMDAwMjAyMTgwMEE0MDAwMDNGRkYxRAotOjEwMDc0MDAwMDIxODAwQTgwMDAwMDNGRjAyMTgwMjI0MDAwMDAwMDBBNQotOjEwMDc1MDAwMDIxODAyMzQwMDAwMDAwMDAyMTgwMjRDMDAwMDAwMDBFMQotOjEwMDc2MDAwMDIxODAyRTQwMDAwMDBGRjA2MTgxMDAwMDAwMDA0MDA1OAotOjEwMDc3MDAwMDIxQjhCQzAwMDAwMDAwMTAyMUI4MDAwMDAwMDAwMzQzRgotOjEwMDc4MDAwMDIxQjgwNDAwMDAwMDAxODAyMUI4MDgwMDAwMDAwMEM0QgotOjEwMDc5MDAwMDIxQjgwQzAwMDAwMDAyMDBDMUI4MzAwMDAwN0ExMjA2QQotOjEwMDdBMDAwMEExQjgzMDAwMDAwMDEzODBCMUI4MzAwMDAwMDEzODgyNAotOjEwMDdCMDAwMEExQjgzNDAwMDAwMDAwMDBDMUI4MzQwMDAwMDAxRjQ3MgotOjEwMDdDMDAwMEIxQjgzNDAwMDAwMDAwNTAyMUI4MzgwMDAwN0ExMjA1MwotOjEwMDdEMDAwMDIxQjgzQzAwMDAwMDFGNDAyMUIxNDgwMDAwMDAwMDExMgotOjEwMDdFMDAwMEExQjE0ODAwMDAwMDAwMDA2MUExMDAwMDAwMDAzQjM2QQotOjEwMDdGMDAwMDQxQTFFQ0MwMDAxMDIyNzA2MUExRUQwMDAwMDAwMDhCMQotOjEwMDgwMDAwMDYxQTIwMDgwMDAwMDBDODA2MUEyMDAwMDAwMDAwMDI5NgotOjEwMDgxMDAwMDQxQUFGNDAwMDEwMDIyODA2MUEzNzE4MDAwMDAwMDQxRQotOjEwMDgyMDAwMDYxQTM3MTAwMDAwMDAwMjA2MUE1MDAwMDAwMDAwMDJFRAotOjEwMDgzMDAwMDYxQTUwMDgwMDAwMDAwNDA2MUE1MDE4MDAwMDAwMDRCMAotOjEwMDg0MDAwMDYxQTUwMjgwMDAwMDAwNDA2MUE1MDM4MDAwMDAwMDQ2MAotOjEwMDg1MDAwMDYxQTUwNDgwMDAwMDAwNDA2MUE1MDU4MDAwMDAwMDQxMAotOjEwMDg2MDAwMDYxQTUwNjgwMDAwMDAwNDA2MUE1MDc4MDAwMDAwMDJDMgotOjEwMDg3MDAwMDQxQTUyQzAwMDAyMDIzODA2MUE0MDUwMDAwMDAwMDY1NgotOjEwMDg4MDAwMDQxQTQwNjgwMDAyMDIzQTA0MUE0MDQwMDAwNDAyM0M4NAotOjEwMDg5MDAwMDQxQTgwMDAwMDAxMDI0MDA2MUE4MDA0MDAwMDAwMDNEMAotOjEwMDhBMDAwMDQxQTgwMTAwMDAxMDI0MTA2MUE4MDE0MDAwMDAwMDM5RgotOjEwMDhCMDAwMDQxQTgwMjAwMDAxMDI0MjA2MUE4MDI0MDAwMDAwMDM2RQotOjEwMDhDMDAwMDQxQTgwMzAwMDAxMDI0MzA2MUE4MDM0MDAwMDAwMDMzRAotOjEwMDhEMDAwMDQxQTgwNDAwMDAxMDI0NDA2MUE4MDQ0MDAwMDAwMDMwQwotOjEwMDhFMDAwMDQxQTgwNTAwMDAxMDI0NTA2MUE4MDU0MDAwMDAwMDNEQgotOjEwMDhGMDAwMDQxQTgwNjAwMDAxMDI0NjA2MUE4MDY0MDAwMDAwMDNBQQotOjEwMDkwMDAwMDQxQTgwNzAwMDAxMDI0NzA2MUE4MDc0MDAwMDAwMDM3OAotOjEwMDkxMDAwMDQxQTgwODAwMDAxMDI0ODA2MUE4MDg0MDAwMDAwMDM0NwotOjEwMDkyMDAwMDQxQTgwOTAwMDAxMDI0OTA2MUE4MDk0MDAwMDAwMDMxNgotOjEwMDkzMDAwMDQxQTgwQTAwMDAxMDI0QTA2MUE4MEE0MDAwMDAwMDNFNQotOjEwMDk0MDAwMDQxQTgwQjAwMDAxMDI0QjA2MUE4MEI0MDAwMDAwMDNCNAotOjEwMDk1MDAwMDQxQTgwQzAwMDAxMDI0QzA2MUE4MEM0MDAwMDAwMDM4MwotOjEwMDk2MDAwMDQxQTgwRDAwMDAxMDI0RDA2MUE4MEQ0MDAwMDAwMDM1MgotOjEwMDk3MDAwMDQxQTgwRTAwMDAxMDI0RTA2MUE4MEU0MDAwMDAwMDMyMQotOjEwMDk4MDAwMDQxQTgwRjAwMDAxMDI0RjA2MUE4MEY0MDAwMDAwMDNGMAotOjEwMDk5MDAwMDQxQTgxMDAwMDAxMDI1MDA2MUE4MTA0MDAwMDAwMDNCRAotOjEwMDlBMDAwMDQxQTgxMTAwMDAxMDI1MTA2MUE4MTE0MDAwMDAwMDM4QwotOjEwMDlCMDAwMDQxQTgxMjAwMDAxMDI1MjA2MUE4MTI0MDAwMDAwMDM1QgotOjEwMDlDMDAwMDQxQTgxMzAwMDAxMDI1MzA2MUE4MTM0MDAwMDAwMDMyQQotOjEwMDlEMDAwMDQxQTgxNDAwMDAxMDI1NDA2MUE4MTQ0MDAwMDAwMDNGOQotOjEwMDlFMDAwMDQxQTgxNTAwMDAxMDI1NTA2MUE4MTU0MDAwMDAwMDNDOAotOjEwMDlGMDAwMDQxQTgxNjAwMDAxMDI1NjA2MUE4MTY0MDAwMDAwMDM5NwotOjEwMEEwMDAwMDQxQTgxNzAwMDAxMDI1NzA2MUE4MTc0MDAwMDAwMDM2NQotOjEwMEExMDAwMDQxQTgxODAwMDAxMDI1ODA2MUE4MTg0MDAwMDAwMDMzNAotOjEwMEEyMDAwMDQxQTgxOTAwMDAxMDI1OTA2MUE4MTk0MDAwMDAwMDMwMwotOjEwMEEzMDAwMDQxQTgxQTAwMDAxMDI1QTA2MUE4MUE0MDAwMDAwMDNEMgotOjEwMEE0MDAwMDQxQTgxQjAwMDAxMDI1QjA2MUE4MUI0MDAwMDAwMDNBMQotOjEwMEE1MDAwMDQxQTgxQzAwMDAxMDI1QzA2MUE4MUM0MDAwMDAwMDM3MAotOjEwMEE2MDAwMDQxQTgxRDAwMDAxMDI1RDA2MUE4MUQ0MDAwMDAwMDMzRgotOjEwMEE3MDAwMDQxQTgxRTAwMDAxMDI1RTA2MUE4MUU0MDAwMDAwMDMwRQotOjEwMEE4MDAwMDQxQTgxRjAwMDAxMDI1RjA2MUE4MUY0MDAwMDAwMDNERAotOjEwMEE5MDAwMDQxQTgyMDAwMDAxMDI2MDA2MUE4MjA0MDAwMDAwMDNBQQotOjEwMEFBMDAwMDQxQTgyMTAwMDAxMDI2MTA2MUE4MjE0MDAwMDAwMDM3OQotOjEwMEFCMDAwMDQxQTgyMjAwMDAxMDI2MjA2MUE4MjI0MDAwMDAwMDM0OAotOjEwMEFDMDAwMDQxQTgyMzAwMDAxMDI2MzA2MUE4MjM0MDAwMDAwMDMxNwotOjEwMEFEMDAwMDQxQTgyNDAwMDAxMDI2NDA2MUE4MjQ0MDAwMDAwMDNFNgotOjEwMEFFMDAwMDQxQTgyNTAwMDAxMDI2NTA2MUE4MjU0MDAwMDAwMDNCNQotOjEwMEFGMDAwMDQxQTgyNjAwMDAxMDI2NjA2MUE4MjY0MDAwMDAwMDM4NAotOjEwMEIwMDAwMDQxQTgyNzAwMDAxMDI2NzA2MUE4Mjc0MDAwMDAwMDM1MgotOjEwMEIxMDAwMDQxQTgyODAwMDAxMDI2ODA2MUE4Mjg0MDAwMDAwMDMyMQotOjEwMEIyMDAwMDQxQTgyOTAwMDAxMDI2OTA2MUE4Mjk0MDAwMDAwMDNGMAotOjEwMEIzMDAwMDQxQTgyQTAwMDAxMDI2QTA2MUE4MkE0MDAwMDAwMDNCRgotOjEwMEI0MDAwMDQxQTgyQjAwMDAxMDI2QjA2MUE4MkI0MDAwMDAwMDM4RQotOjEwMEI1MDAwMDQxQTgyQzAwMDAxMDI2QzA2MUE4MkM0MDAwMDAwMDM1RAotOjEwMEI2MDAwMDQxQTgyRDAwMDAxMDI2RDA2MUE4MkQ0MDAwMDAwMDMyQwotOjEwMEI3MDAwMDQxQTgyRTAwMDAxMDI2RTA2MUE4MkU0MDAwMDAwMDNGQgotOjEwMEI4MDAwMDQxQTgyRjAwMDAxMDI2RjA2MUE4MkY0MDAwMDAwMDNDQQotOjEwMEI5MDAwMDQxQTgzMDAwMDAxMDI3MDA2MUE4MzA0MDAwMDAwMDM5NwotOjEwMEJBMDAwMDQxQTgzMTAwMDAxMDI3MTA2MUE4MzE0MDAwMDAwMDM2NgotOjEwMEJCMDAwMDQxQTgzMjAwMDAxMDI3MjA2MUE4MzI0MDAwMDAwMDMzNQotOjEwMEJDMDAwMDQxQTgzMzAwMDAxMDI3MzA2MUE4MzM0MDAwMDAwMDMwNAotOjEwMEJEMDAwMDQxQTgzNDAwMDAxMDI3NDA2MUE4MzQ0MDAwMDAwMDNEMwotOjEwMEJFMDAwMDQxQTgzNTAwMDAxMDI3NTA2MUE4MzU0MDAwMDAwMDNBMgotOjEwMEJGMDAwMDQxQTgzNjAwMDAxMDI3NjA2MUE4MzY0MDAwMDAwMDM3MQotOjEwMEMwMDAwMDQxQTgzNzAwMDAxMDI3NzA2MUE4Mzc0MDAwMDAwMDMzRgotOjEwMEMxMDAwMDQxQTgzODAwMDAxMDI3ODA2MUE4Mzg0MDAwMDAwMDMwRQotOjEwMEMyMDAwMDQxQTgzOTAwMDAxMDI3OTA2MUE4Mzk0MDAwMDAwMDNERAotOjEwMEMzMDAwMDQxQTgzQTAwMDAxMDI3QTA2MUE4M0E0MDAwMDAwMDNBQwotOjEwMEM0MDAwMDQxQTgzQjAwMDAxMDI3QjA2MUE4M0I0MDAwMDAwMDM3QgotOjEwMEM1MDAwMDQxQTgzQzAwMDAxMDI3QzA2MUE4M0M0MDAwMDAwMDM0QQotOjEwMEM2MDAwMDQxQTgzRDAwMDAxMDI3RDA2MUE4M0Q0MDAwMDAwMDMxOQotOjEwMEM3MDAwMDQxQTgzRTAwMDAxMDI3RTA2MUE4M0U0MDAwMDAwMDNFOAotOjEwMEM4MDAwMDQxQTgzRjAwMDAxMDI3RjA2MUE4M0Y0MDAwMDAwMDNCNwotOjEwMEM5MDAwMDQxQTg0MDAwMDAxMDI4MDA2MUE4NDA0MDAwMDAwMDM4NAotOjEwMENBMDAwMDQxQTg0MTAwMDAxMDI4MTA2MUE4NDE0MDAwMDAwMDM1MwotOjEwMENCMDAwMDQxQTg0MjAwMDAxMDI4MjA2MUE4NDI0MDAwMDAwMDMyMgotOjEwMENDMDAwMDQxQTg0MzAwMDAxMDI4MzA2MUE4NDM0MDAwMDAwMDNGMQotOjEwMENEMDAwMDQxQTg0NDAwMDAxMDI4NDA2MUE4NDQ0MDAwMDAwMDNDMAotOjEwMENFMDAwMDQxQTg0NTAwMDAxMDI4NTA2MUE4NDU0MDAwMDAwMDM4RgotOjEwMENGMDAwMDQxQTg0NjAwMDAxMDI4NjA2MUE4NDY0MDAwMDAwMDM1RQotOjEwMEQwMDAwMDQxQTg0NzAwMDAxMDI4NzA2MUE4NDc0MDAwMDAwMDMyQwotOjEwMEQxMDAwMDQxQTg0ODAwMDAxMDI4ODA2MUE4NDg0MDAwMDAwMDNGQgotOjEwMEQyMDAwMDQxQTg0OTAwMDAxMDI4OTA2MUE4NDk0MDAwMDAwMDNDQQotOjEwMEQzMDAwMDQxQTg0QTAwMDAxMDI4QTA2MUE4NEE0MDAwMDAwMDM5OQotOjEwMEQ0MDAwMDQxQTg0QjAwMDAxMDI4QjA2MUE4NEI0MDAwMDAwMDM2OAotOjEwMEQ1MDAwMDQxQTg0QzAwMDAxMDI4QzA2MUE4NEM0MDAwMDAwMDMzNwotOjEwMEQ2MDAwMDQxQTg0RDAwMDAxMDI4RDA2MUE4NEQ0MDAwMDAwMDMwNgotOjEwMEQ3MDAwMDQxQTg0RTAwMDAxMDI4RTA2MUE4NEU0MDAwMDAwMDNENQotOjEwMEQ4MDAwMDQxQTg0RjAwMDAxMDI4RjA2MUE4NEY0MDAwMDAwMDNBNAotOjEwMEQ5MDAwMDQxQTg1MDAwMDAxMDI5MDA2MUE4NTA0MDAwMDAwMDM3MQotOjEwMERBMDAwMDQxQTg1MTAwMDAxMDI5MTA2MUE4NTE0MDAwMDAwMDM0MAotOjEwMERCMDAwMDQxQTg1MjAwMDAxMDI5MjA2MUE4NTI0MDAwMDAwMDMwRgotOjEwMERDMDAwMDQxQTg1MzAwMDAxMDI5MzA2MUE4NTM0MDAwMDAwMDNERQotOjEwMEREMDAwMDQxQTg1NDAwMDAxMDI5NDA2MUE4NTQ0MDAwMDAwMDNBRAotOjEwMERFMDAwMDQxQTg1NTAwMDAxMDI5NTA2MUE4NTU0MDAwMDAwMDM3QwotOjEwMERGMDAwMDQxQTg1NjAwMDAxMDI5NjA2MUE4NTY0MDAwMDAwMDM0QgotOjEwMEUwMDAwMDQxQTg1NzAwMDAxMDI5NzA2MUE4NTc0MDAwMDAwMDMxOQotOjEwMEUxMDAwMDQxQTg1ODAwMDAxMDI5ODA2MUE4NTg0MDAwMDAwMDNFOAotOjEwMEUyMDAwMDQxQTg1OTAwMDAxMDI5OTA2MUE4NTk0MDAwMDAwMDNCNwotOjEwMEUzMDAwMDQxQTg1QTAwMDAxMDI5QTA2MUE4NUE0MDAwMDAwMDM4NgotOjEwMEU0MDAwMDQxQTg1QjAwMDAxMDI5QjA2MUE4NUI0MDAwMDAwMDM1NQotOjEwMEU1MDAwMDQxQTg1QzAwMDAxMDI5QzA2MUE4NUM0MDAwMDAwMDMyNAotOjEwMEU2MDAwMDQxQTg1RDAwMDAxMDI5RDA2MUE4NUQ0MDAwMDAwMDNGMwotOjEwMEU3MDAwMDQxQTg1RTAwMDAxMDI5RTA2MUE4NUU0MDAwMDAwMDNDMgotOjEwMEU4MDAwMDQxQTg1RjAwMDAxMDI5RjA2MUE4NUY0MDAwMDAwMDM5MQotOjEwMEU5MDAwMDQxQTg2MDAwMDAxMDJBMDA2MUE4NjA0MDAwMDAwMDM1RQotOjEwMEVBMDAwMDQxQTg2MTAwMDAxMDJBMTA2MUE4NjE0MDAwMDAwMDMyRAotOjEwMEVCMDAwMDQxQTg2MjAwMDAxMDJBMjA2MUE4NjI0MDAwMDAwMDNGQwotOjEwMEVDMDAwMDQxQTg2MzAwMDAxMDJBMzA2MUE4NjM0MDAwMDAwMDNDQgotOjEwMEVEMDAwMDQxQTg2NDAwMDAxMDJBNDA2MUE4NjQ0MDAwMDAwMDM5QQotOjEwMEVFMDAwMDQxQTg2NTAwMDAxMDJBNTA2MUE4NjU0MDAwMDAwMDM2OQotOjEwMEVGMDAwMDQxQTg2NjAwMDAxMDJBNjA2MUE4NjY0MDAwMDAwMDMzOAotOjEwMEYwMDAwMDQxQTg2NzAwMDAxMDJBNzA2MUE4Njc0MDAwMDAwMDMwNgotOjEwMEYxMDAwMDQxQTg2ODAwMDAxMDJBODA2MUE4Njg0MDAwMDAwMDNENQotOjEwMEYyMDAwMDQxQTg2OTAwMDAxMDJBOTA2MUE4Njk0MDAwMDAwMDNBNAotOjEwMEYzMDAwMDQxQTg2QTAwMDAxMDJBQTA2MUE4NkE0MDAwMDAwMDM3MwotOjEwMEY0MDAwMDQxQTg2QjAwMDAxMDJBQjA2MUE4NkI0MDAwMDAwMDM0MgotOjEwMEY1MDAwMDQxQTg2QzAwMDAxMDJBQzA2MUE4NkM0MDAwMDAwMDMxMQotOjEwMEY2MDAwMDQxQTg2RDAwMDAxMDJBRDA2MUE4NkQ0MDAwMDAwMDNFMAotOjEwMEY3MDAwMDQxQTg2RTAwMDAxMDJBRTA2MUE4NkU0MDAwMDAwMDNBRgotOjEwMEY4MDAwMDQxQTg2RjAwMDAxMDJBRjA2MUE4NkY0MDAwMDAwMDM3RQotOjEwMEY5MDAwMDQxQTg3MDAwMDAxMDJCMDA2MUE4NzA0MDAwMDAwMDM0QgotOjEwMEZBMDAwMDQxQTg3MTAwMDAxMDJCMTA2MUE4NzE0MDAwMDAwMDMxQQotOjEwMEZCMDAwMDQxQTg3MjAwMDAxMDJCMjA2MUE4NzI0MDAwMDAwMDNFOQotOjEwMEZDMDAwMDQxQTg3MzAwMDAxMDJCMzA2MUE4NzM0MDAwMDAwMDNCOAotOjEwMEZEMDAwMDQxQTg3NDAwMDAxMDJCNDA2MUE4NzQ0MDAwMDAwMDM4NwotOjEwMEZFMDAwMDQxQTg3NTAwMDAxMDJCNTA2MUE4NzU0MDAwMDAwMDM1NgotOjEwMEZGMDAwMDQxQTg3NjAwMDAxMDJCNjA2MUE4NzY0MDAwMDAwMDMyNQotOjEwMTAwMDAwMDQxQTg3NzAwMDAxMDJCNzA2MUE4Nzc0MDAwMDAwMDNGMwotOjEwMTAxMDAwMDQxQTg3ODAwMDAxMDJCODA2MUE4Nzg0MDAwMDAwMDNDMgotOjEwMTAyMDAwMDQxQTg3OTAwMDAxMDJCOTA2MUE4Nzk0MDAwMDAwMDM5MQotOjEwMTAzMDAwMDQxQTg3QTAwMDAxMDJCQTA2MUE4N0E0MDAwMDAwMDM2MAotOjEwMTA0MDAwMDQxQTg3QjAwMDAxMDJCQjA2MUE4N0I0MDAwMDAwMDMyRgotOjEwMTA1MDAwMDQxQTg3QzAwMDAxMDJCQzA2MUE4N0M0MDAwMDAwMDNGRQotOjEwMTA2MDAwMDQxQTg3RDAwMDAxMDJCRDA2MUE4N0Q0MDAwMDAwMDNDRAotOjEwMTA3MDAwMDQxQTg3RTAwMDAxMDJCRTA2MUE4N0U0MDAwMDAwMDM5QwotOjEwMTA4MDAwMDQxQTg3RjAwMDAxMDJCRjA2MUE4N0Y0MDAwMDAwMDM2QgotOjEwMTA5MDAwMDQxQTg4MDAwMDAxMDJDMDA2MUE4ODA0MDAwMDAwMDMzOAotOjEwMTBBMDAwMDQxQTg4MTAwMDAxMDJDMTA2MUE4ODE0MDAwMDAwMDMwNwotOjEwMTBCMDAwMDQxQTg4MjAwMDAxMDJDMjA2MUE4ODI0MDAwMDAwMDNENgotOjEwMTBDMDAwMDQxQTg4MzAwMDAxMDJDMzA2MUE4ODM0MDAwMDAwMDNBNQotOjEwMTBEMDAwMDQxQTg4NDAwMDAxMDJDNDA2MUE4ODQ0MDAwMDAwMDM3NAotOjEwMTBFMDAwMDQxQTg4NTAwMDAxMDJDNTA2MUE4ODU0MDAwMDAwMDM0MwotOjEwMTBGMDAwMDQxQTg4NjAwMDAxMDJDNjA2MUE4ODY0MDAwMDAwMDMxMgotOjEwMTEwMDAwMDQxQTg4NzAwMDAxMDJDNzA2MUE4ODc0MDAwMDAwMDNFMAotOjEwMTExMDAwMDQxQTg4ODAwMDAxMDJDODA2MUE4ODg0MDAwMDAwMDNBRgotOjEwMTEyMDAwMDQxQTg4OTAwMDAxMDJDOTA2MUE4ODk0MDAwMDAwMDM3RQotOjEwMTEzMDAwMDQxQTg4QTAwMDAxMDJDQTA2MUE4OEE0MDAwMDAwMDM0RAotOjEwMTE0MDAwMDQxQTg4QjAwMDAxMDJDQjA2MUE4OEI0MDAwMDAwMDMxQwotOjEwMTE1MDAwMDQxQTg4QzAwMDAxMDJDQzA2MUE4OEM0MDAwMDAwMDNFQgotOjEwMTE2MDAwMDQxQTg4RDAwMDAxMDJDRDA2MUE4OEQ0MDAwMDAwMDNCQQotOjEwMTE3MDAwMDQxQTg4RTAwMDAxMDJDRTA2MUE4OEU0MDAwMDAwMDM4OQotOjEwMTE4MDAwMDQxQTg4RjAwMDAxMDJDRjA2MUE4OEY0MDAwMDAwMDM1OAotOjEwMTE5MDAwMDQxQTg5MDAwMDAxMDJEMDA2MUE4OTA0MDAwMDAwMDMyNQotOjEwMTFBMDAwMDQxQTg5MTAwMDAxMDJEMTA2MUE4OTE0MDAwMDAwMDNGNAotOjEwMTFCMDAwMDQxQTg5MjAwMDAxMDJEMjA2MUE4OTI0MDAwMDAwMDNDMwotOjEwMTFDMDAwMDQxQTg5MzAwMDAxMDJEMzA2MUE4OTM0MDAwMDAwMDM5MgotOjEwMTFEMDAwMDQxQTg5NDAwMDAxMDJENDA2MUE4OTQ0MDAwMDAwMDM2MQotOjEwMTFFMDAwMDQxQTg5NTAwMDAxMDJENTA2MUE4OTU0MDAwMDAwMDMzMAotOjEwMTFGMDAwMDQxQTg5NjAwMDAxMDJENjA2MUE4OTY0MDAwMDAwMDNGRgotOjEwMTIwMDAwMDQxQTg5NzAwMDAxMDJENzA2MUE4OTc0MDAwMDAwMDNDRAotOjEwMTIxMDAwMDQxQTg5ODAwMDAxMDJEODA2MUE4OTg0MDAwMDAwMDM5QwotOjEwMTIyMDAwMDQxQTg5OTAwMDAxMDJEOTA2MUE4OTk0MDAwMDAwMDM2QgotOjEwMTIzMDAwMDQxQTg5QTAwMDAxMDJEQTA2MUE4OUE0MDAwMDAwMDMzQQotOjEwMTI0MDAwMDQxQTg5QjAwMDAxMDJEQjA2MUE4OUI0MDAwMDAwMDMwOQotOjEwMTI1MDAwMDQxQTg5QzAwMDAxMDJEQzA2MUE4OUM0MDAwMDAwMDNEOAotOjEwMTI2MDAwMDQxQTg5RDAwMDAxMDJERDA2MUE4OUQ0MDAwMDAwMDNBNwotOjEwMTI3MDAwMDQxQTg5RTAwMDAxMDJERTA2MUE4OUU0MDAwMDAwMDM3NgotOjEwMTI4MDAwMDQxQTg5RjAwMDAxMDJERjA2MUE4OUY0MDAwMDAwMDM0NQotOjEwMTI5MDAwMDQxQThBMDAwMDAxMDJFMDA2MUE4QTA0MDAwMDAwMDMxMgotOjEwMTJBMDAwMDQxQThBMTAwMDAxMDJFMTA2MUE4QTE0MDAwMDAwMDNFMQotOjEwMTJCMDAwMDQxQThBMjAwMDAxMDJFMjA2MUE4QTI0MDAwMDAwMDNCMAotOjEwMTJDMDAwMDQxQThBMzAwMDAxMDJFMzA2MUE4QTM0MDAwMDAwMDM3RgotOjEwMTJEMDAwMDQxQThBNDAwMDAxMDJFNDA2MUE4QTQ0MDAwMDAwMDM0RQotOjEwMTJFMDAwMDQxQThBNTAwMDAxMDJFNTA2MUE4QTU0MDAwMDAwMDMxRAotOjEwMTJGMDAwMDQxQThBNjAwMDAxMDJFNjA2MUE4QTY0MDAwMDAwMDNFQwotOjEwMTMwMDAwMDQxQThBNzAwMDAxMDJFNzA2MUE4QTc0MDAwMDAwMDNCQQotOjEwMTMxMDAwMDQxQThBODAwMDAxMDJFODA2MUE4QTg0MDAwMDAwMDM4OQotOjEwMTMyMDAwMDQxQThBOTAwMDAxMDJFOTA2MUE4QTk0MDAwMDAwMDM1OAotOjEwMTMzMDAwMDQxQThBQTAwMDAxMDJFQTA2MUE4QUE0MDAwMDAwMDMyNwotOjEwMTM0MDAwMDQxQThBQjAwMDAxMDJFQjA2MUE4QUI0MDAwMDAwMDNGNgotOjEwMTM1MDAwMDQxQThBQzAwMDAxMDJFQzA2MUE4QUM0MDAwMDAwMDNDNQotOjEwMTM2MDAwMDQxQThBRDAwMDAxMDJFRDA2MUE4QUQ0MDAwMDAwMDM5NAotOjEwMTM3MDAwMDQxQThBRTAwMDAxMDJFRTA2MUE4QUU0MDAwMDAwMDM2MwotOjEwMTM4MDAwMDQxQThBRjAwMDAxMDJFRjA2MUE4QUY0MDAwMDAwMDMzMgotOjEwMTM5MDAwMDQxQThCMDAwMDAxMDJGMDA2MUE4QjA0MDAwMDAwMDNGRgotOjEwMTNBMDAwMDQxQThCMTAwMDAxMDJGMTA2MUE4QjE0MDAwMDAwMDNDRQotOjEwMTNCMDAwMDQxQThCMjAwMDAxMDJGMjA2MUE4QjI0MDAwMDAwMDM5RAotOjEwMTNDMDAwMDQxQThCMzAwMDAxMDJGMzA2MUE4QjM0MDAwMDAwMDM2QwotOjEwMTNEMDAwMDQxQThCNDAwMDAxMDJGNDA2MUE4QjQ0MDAwMDAwMDMzQgotOjEwMTNFMDAwMDQxQThCNTAwMDAxMDJGNTA2MUE4QjU0MDAwMDAwMDMwQQotOjEwMTNGMDAwMDQxQThCNjAwMDAxMDJGNjA2MUE4QjY0MDAwMDAwMDNEOQotOjEwMTQwMDAwMDQxQThCNzAwMDAxMDJGNzA2MUE4Qjc0MDAwMDAwMDNBNwotOjEwMTQxMDAwMDQxQThCODAwMDAxMDJGODA2MUE4Qjg0MDAwMDAwMDM3NgotOjEwMTQyMDAwMDQxQThCOTAwMDAxMDJGOTA2MUE4Qjk0MDAwMDAwMDM0NQotOjEwMTQzMDAwMDQxQThCQTAwMDAxMDJGQTA2MUE4QkE0MDAwMDAwMDMxNAotOjEwMTQ0MDAwMDQxQThCQjAwMDAxMDJGQjA2MUE4QkI0MDAwMDAwMDNFMwotOjEwMTQ1MDAwMDQxQThCQzAwMDAxMDJGQzA2MUE4QkM0MDAwMDAwMDNCMgotOjEwMTQ2MDAwMDQxQThCRDAwMDAxMDJGRDA2MUE4QkQ0MDAwMDAwMDM4MQotOjEwMTQ3MDAwMDQxQThCRTAwMDAxMDJGRTA2MUE4QkU0MDAwMDAwMDM1MAotOjEwMTQ4MDAwMDQxQThCRjAwMDAxMDJGRjA2MUE4QkY0MDAwMDAwMDMxRgotOjEwMTQ5MDAwMDQxQThDMDAwMDAxMDMwMDA2MUE4QzA0MDAwMDAwMDNFQgotOjEwMTRBMDAwMDQxQThDMTAwMDAxMDMwMTA2MUE4QzE0MDAwMDAwMDNCQQotOjEwMTRCMDAwMDQxQThDMjAwMDAxMDMwMjA2MUE4QzI0MDAwMDAwMDM4OQotOjEwMTRDMDAwMDQxQThDMzAwMDAxMDMwMzA2MUE4QzM0MDAwMDAwMDM1OAotOjEwMTREMDAwMDQxQThDNDAwMDAxMDMwNDA2MUE4QzQ0MDAwMDAwMDMyNwotOjEwMTRFMDAwMDQxQThDNTAwMDAxMDMwNTA2MUE4QzU0MDAwMDAwMDNGNgotOjEwMTRGMDAwMDQxQThDNjAwMDAxMDMwNjA2MUE4QzY0MDAwMDAwMDNDNQotOjEwMTUwMDAwMDQxQThDNzAwMDAxMDMwNzA2MUE4Qzc0MDAwMDAwMDM5MwotOjEwMTUxMDAwMDQxQThDODAwMDAxMDMwODA2MUE4Qzg0MDAwMDAwMDM2MgotOjEwMTUyMDAwMDQxQThDOTAwMDAxMDMwOTA2MUE4Qzk0MDAwMDAwMDMzMQotOjEwMTUzMDAwMDQxQThDQTAwMDAxMDMwQTA2MUE4Q0E0MDAwMDAwMDMwMAotOjEwMTU0MDAwMDQxQThDQjAwMDAxMDMwQjA2MUE4Q0I0MDAwMDAwMDNDRgotOjEwMTU1MDAwMDQxQThDQzAwMDAxMDMwQzA2MUE4Q0M0MDAwMDAwMDM5RQotOjEwMTU2MDAwMDQxQThDRDAwMDAxMDMwRDA2MUE4Q0Q0MDAwMDAwMDM2RAotOjEwMTU3MDAwMDQxQThDRTAwMDAxMDMwRTA2MUE4Q0U0MDAwMDAwMDMzQwotOjEwMTU4MDAwMDQxQThDRjAwMDAxMDMwRjA2MUE4Q0Y0MDAwMDAwMDMwQgotOjEwMTU5MDAwMDQxQThEMDAwMDAxMDMxMDA2MUE4RDA0MDAwMDAwMDNEOAotOjEwMTVBMDAwMDQxQThEMTAwMDAxMDMxMTA2MUE4RDE0MDAwMDAwMDNBNwotOjEwMTVCMDAwMDQxQThEMjAwMDAxMDMxMjA2MUE4RDI0MDAwMDAwMDM3NgotOjEwMTVDMDAwMDQxQThEMzAwMDAxMDMxMzA2MUE4RDM0MDAwMDAwMDM0NQotOjEwMTVEMDAwMDQxQThENDAwMDAxMDMxNDA2MUE4RDQ0MDAwMDAwMDMxNAotOjEwMTVFMDAwMDQxQThENTAwMDAxMDMxNTA2MUE4RDU0MDAwMDAwMDNFMwotOjEwMTVGMDAwMDQxQThENjAwMDAxMDMxNjA2MUE4RDY0MDAwMDAwMDNCMgotOjEwMTYwMDAwMDQxQThENzAwMDAxMDMxNzA2MUE4RDc0MDAwMDAwMDM4MAotOjEwMTYxMDAwMDQxQThEODAwMDAxMDMxODA2MUE4RDg0MDAwMDAwMDM0RgotOjEwMTYyMDAwMDQxQThEOTAwMDAxMDMxOTA2MUE4RDk0MDAwMDAwMDMxRQotOjEwMTYzMDAwMDQxQThEQTAwMDAxMDMxQTA2MUE4REE0MDAwMDAwMDNFRAotOjEwMTY0MDAwMDQxQThEQjAwMDAxMDMxQjA2MUE4REI0MDAwMDAwMDNCQwotOjEwMTY1MDAwMDQxQThEQzAwMDAxMDMxQzA2MUE4REM0MDAwMDAwMDM4QgotOjEwMTY2MDAwMDQxQThERDAwMDAxMDMxRDA2MUE4REQ0MDAwMDAwMDM1QQotOjEwMTY3MDAwMDQxQThERTAwMDAxMDMxRTA2MUE4REU0MDAwMDAwMDMyOQotOjEwMTY4MDAwMDQxQThERjAwMDAxMDMxRjA2MUE4REY0MDAwMDAwMDNGOAotOjEwMTY5MDAwMDQxQThFMDAwMDAxMDMyMDA2MUE4RTA0MDAwMDAwMDNDNQotOjEwMTZBMDAwMDQxQThFMTAwMDAxMDMyMTA2MUE4RTE0MDAwMDAwMDM5NAotOjEwMTZCMDAwMDQxQThFMjAwMDAxMDMyMjA2MUE4RTI0MDAwMDAwMDM2MwotOjEwMTZDMDAwMDQxQThFMzAwMDAxMDMyMzA2MUE4RTM0MDAwMDAwMDMzMgotOjEwMTZEMDAwMDQxQThFNDAwMDAxMDMyNDA2MUE4RTQ0MDAwMDAwMDMwMQotOjEwMTZFMDAwMDQxQThFNTAwMDAxMDMyNTA2MUE4RTU0MDAwMDAwMDNEMAotOjEwMTZGMDAwMDQxQThFNjAwMDAxMDMyNjA2MUE4RTY0MDAwMDAwMDM5RgotOjEwMTcwMDAwMDQxQThFNzAwMDAxMDMyNzA2MUE4RTc0MDAwMDAwMDM2RAotOjEwMTcxMDAwMDQxQThFODAwMDAxMDMyODA2MUE4RTg0MDAwMDAwMDMzQwotOjEwMTcyMDAwMDQxQThFOTAwMDAxMDMyOTA2MUE4RTk0MDAwMDAwMDMwQgotOjEwMTczMDAwMDQxQThFQTAwMDAxMDMyQTA2MUE4RUE0MDAwMDAwMDNEQQotOjEwMTc0MDAwMDQxQThFQjAwMDAxMDMyQjA2MUE4RUI0MDAwMDAwMDNBOQotOjEwMTc1MDAwMDQxQThFQzAwMDAxMDMyQzA2MUE4RUM0MDAwMDAwMDM3OAotOjEwMTc2MDAwMDQxQThFRDAwMDAxMDMyRDA2MUE4RUQ0MDAwMDAwMDM0NwotOjEwMTc3MDAwMDQxQThFRTAwMDAxMDMyRTA2MUE4RUU0MDAwMDAwMDMxNgotOjEwMTc4MDAwMDQxQThFRjAwMDAxMDMyRjA2MUE4RUY0MDAwMDAwMDNFNQotOjEwMTc5MDAwMDQxQThGMDAwMDAxMDMzMDA2MUE4RjA0MDAwMDAwMDNCMgotOjEwMTdBMDAwMDQxQThGMTAwMDAxMDMzMTA2MUE4RjE0MDAwMDAwMDM4MQotOjEwMTdCMDAwMDQxQThGMjAwMDAxMDMzMjA2MUE4RjI0MDAwMDAwMDM1MAotOjEwMTdDMDAwMDQxQThGMzAwMDAxMDMzMzA2MUE4RjM0MDAwMDAwMDMxRgotOjEwMTdEMDAwMDQxQThGNDAwMDAxMDMzNDA2MUE4RjQ0MDAwMDAwMDNFRQotOjEwMTdFMDAwMDQxQThGNTAwMDAxMDMzNTA2MUE4RjU0MDAwMDAwMDNCRAotOjEwMTdGMDAwMDQxQThGNjAwMDAxMDMzNjA2MUE4RjY0MDAwMDAwMDM4QwotOjEwMTgwMDAwMDQxQThGNzAwMDAxMDMzNzA2MUE4Rjc0MDAwMDAwMDM1QQotOjEwMTgxMDAwMDQxQThGODAwMDAxMDMzODA2MUE4Rjg0MDAwMDAwMDMyOQotOjEwMTgyMDAwMDQxQThGOTAwMDAxMDMzOTA2MUE4Rjk0MDAwMDAwMDNGOAotOjEwMTgzMDAwMDQxQThGQTAwMDAxMDMzQTA2MUE4RkE0MDAwMDAwMDNDNwotOjEwMTg0MDAwMDQxQThGQjAwMDAxMDMzQjA2MUE4RkI0MDAwMDAwMDM5NgotOjEwMTg1MDAwMDQxQThGQzAwMDAxMDMzQzA2MUE4RkM0MDAwMDAwMDM2NQotOjEwMTg2MDAwMDQxQThGRDAwMDAxMDMzRDA2MUE4RkQ0MDAwMDAwMDMzNAotOjEwMTg3MDAwMDQxQThGRTAwMDAxMDMzRTA2MUE4RkU0MDAwMDAwMDdGRgotOjEwMTg4MDAwMDQxQTYyQzAwMDIwMDMzRjA2MUFEMDAwMDAwMDAwNzI1NAotOjEwMTg5MDAwMDYxQUQyNDgwMDAwMDAxMDA2MUFENkIwMDAwMDAwMjAzOAotOjEwMThBMDAwMDYxQUQ0NzAwMDAwMDA5MDA2MUFENDY4MDAwMDAwMDJFNgotOjEwMThCMDAwMDYxQUEwMDAwMDAwMDFDNDA2MUEzMDAwMDAwMDAwMTA0MwotOjEwMThDMDAwMDYxQTMwODAwMDAwMDAxMDA2MUEzMTAwMDAwMDAwMTBENwotOjEwMThEMDAwMDYxQTMxODAwMDAwMDAxMDA2MUEzMzAwMDAwMDAwMTJDMgotOjEwMThFMDAwMDYxQTMzOTAwMDAwMDA3MDA2MUFENDU4MDAwMDAwMDI1NwotOjEwMThGMDAwMDYxQUQzNDgwMDAwMDAwMjA2MUFEMzU4MDAwMDAwMjA0MAotOjEwMTkwMDAwMDYxQUE3MTAwMDAwMDFDNDA2MUEzMDQwMDAwMDAwMTA5QgotOjEwMTkxMDAwMDYxQTMwQzAwMDAwMDAxMDA2MUEzMTQwMDAwMDAwMTAwNgotOjEwMTkyMDAwMDYxQTMxQzAwMDAwMDAxMDA2MUEzMzQ4MDAwMDAwMTJFOQotOjEwMTkzMDAwMDYxQTM1NTAwMDAwMDA3MDA2MUFENDYwMDAwMDAwMDIzQwotOjEwMTk0MDAwMDYxQUQzNTAwMDAwMDAwMjA2MUFEM0Q4MDAwMDAwMjA2NwotOjEwMTk1MDAwMDIxQUFFMjAwMDAwMDAwMDA2MUE1MDAwMDAwMDAwMDIyQgotOjEwMTk2MDAwMDYxQTUwODAwMDAwMDAxMjA0MUE0MDAwMDAwMjAzNUZCMwotOjEwMTk3MDAwMDQxQTYzQzAwMDAyMDM2MTA2MUE3MDAwMDAwMDAwMDQyQwotOjEwMTk4MDAwMDYxQTMyMDAwMDAwMDAwODAyMUFBRTI0MDAwMDAwMDAwRgotOjEwMTk5MDAwMDYxQTUwMTAwMDAwMDAwMjA2MUE1MEM4MDAwMDAwMTI3QgotOjEwMTlBMDAwMDQxQTQwMDgwMDAyMDM2MzA0MUE2M0M4MDAwMjAzNjVCNgotOjEwMTlCMDAwMDYxQTcwMTAwMDAwMDAwNDA2MUEzMjIwMDAwMDAwMDgwOQotOjEwMTlDMDAwMDIxQUFFMjgwMDAwMDAwMDA2MUE1MDIwMDAwMDAwMDI5MwotOjEwMTlEMDAwMDYxQTUxMTAwMDAwMDAxMjA0MUE0MDEwMDAwMjAzNjc5QQotOjEwMTlFMDAwMDQxQTYzRDAwMDAyMDM2OTA2MUE3MDIwMDAwMDAwMDQ4NAotOjEwMTlGMDAwMDYxQTMyNDAwMDAwMDAwODAyMUFBRTJDMDAwMDAwMDA1NwotOjEwMUEwMDAwMDYxQTUwMzAwMDAwMDAwMjA2MUE1MTU4MDAwMDAwMTI1OQotOjEwMUExMDAwMDQxQTQwMTgwMDAyMDM2QjA0MUE2M0Q4MDAwMjAzNkQxNQotOjEwMUEyMDAwMDYxQTcwMzAwMDAwMDAwNDA2MUEzMjYwMDAwMDAwMDgzOAotOjEwMUEzMDAwMDIxQUFFMzAwMDAwMDAwMDA2MUE1MDQwMDAwMDAwMDJGQQotOjEwMUE0MDAwMDYxQTUxQTAwMDAwMDAxMjA0MUE0MDIwMDAwMjAzNkY4MQotOjEwMUE1MDAwMDQxQTYzRTAwMDAyMDM3MTA2MUE3MDQwMDAwMDAwMDREQgotOjEwMUE2MDAwMDYxQTMyODAwMDAwMDAwODAyMUFBRTM0MDAwMDAwMDA5RQotOjEwMUE3MDAwMDYxQTUwNTAwMDAwMDAwMjA2MUE1MUU4MDAwMDAwMTIzOQotOjEwMUE4MDAwMDQxQTQwMjgwMDAyMDM3MzA0MUE2M0U4MDAwMjAzNzU3NQotOjEwMUE5MDAwMDYxQTcwNTAwMDAwMDAwNDA2MUEzMkEwMDAwMDAwMDg2OAotOjEwMUFBMDAwMDIxQUFFMzgwMDAwMDAwMDA2MUE1MDYwMDAwMDAwMDI2MgotOjEwMUFCMDAwMDYxQTUyMzAwMDAwMDAxMjA0MUE0MDMwMDAwMjAzNzc2OAotOjEwMUFDMDAwMDQxQTYzRjAwMDAyMDM3OTA2MUE3MDYwMDAwMDAwMDQzMwotOjEwMUFEMDAwMDYxQTMyQzAwMDAwMDAwODAyMUFBRTNDMDAwMDAwMDBFNgotOjEwMUFFMDAwMDYxQTUwNzAwMDAwMDAwMjA2MUE1Mjc4MDAwMDAwMTIxOAotOjEwMUFGMDAwMDQxQTQwMzgwMDAyMDM3QjA0MUE2M0Y4MDAwMjAzN0RENQotOjEwMUIwMDAwMDYxQTcwNzAwMDAwMDAwNDA2MUEzMkUwMDAwMDAwMDg5NwotOjEwMUIxMDAwMDIwMEE0NjgwMDBCMDFDODAyMDBBMjk0MDcxRDI5MTE0RAotOjEwMUIyMDAwMDIwMEEyOTgwMDAwMDAwMDAyMDBBMjlDMDA5QzA0MjQ3NQotOjEwMUIzMDAwMDIwMEEyQTAwMDAwMDAwMDAyMDBBMkE0MDAwMDAyMDkwRQotOjEwMUI0MDAwMDIwMEEyNzAwMDAwMDAwMDAyMDBBMjc0MDAwMDAwMDA2OQotOjEwMUI1MDAwMDIwMEEyNzAwMDAwMDAwMDAyMDBBMjc0MDAwMDAwMDA1OQotOjEwMUI2MDAwMDIwMEEyNzAwMDAwMDAwMDAyMDBBMjc0MDAwMDAwMDA0OQotOjEwMUI3MDAwMDIwMEEyNzAwMDAwMDAwMDAyMDBBMjc0MDAwMDAwMDAzOQotOjEwMUI4MDAwMDIwMTYwQTAwMDAwMDAwMTAyMDE2MEE0MDAwMDAyNjJFNgotOjEwMUI5MDAwMDIwMTYwQTgwMDAwMDAwMjAyMDE2MEFDMDAwMDAwMTgxMQotOjEwMUJBMDAwMDIwMTYyMDQwMDAwMDAwMTAyMDEwMEI0MDAwMDAwMDExMwotOjEwMUJCMDAwMDIwMTAwQjgwMDAwMDAwMTAyMDEwMERDMDAwMDAwMDE4OQotOjEwMUJDMDAwMDIwMTAxMDAwMDAwMDAwMTAyMDEwMTA0MDAwMDAwMDEwNwotOjEwMUJEMDAwMDIwMTAwN0MwMDMwMDAwMDAyMDEwMDg0MDAwMDAwMjhBNwotOjEwMUJFMDAwMDIwMTAwOEMwMDAwMDAwMDAyMDEwMTMwMDAwMDAwMDQyRQotOjEwMUJGMDAwMDIwMTAyNUMwMDAwMDAwMTAyMDEwMzI4MDAwMDAwMDA1NQotOjEwMUMwMDAwMDIwMTYwNTgwMDAwRkZGRjAyMDE2MDcwMDAwMDAwMDc0MQotOjEwMUMxMDAwMDIwMTYwODAwMDAwMDAwMTAyMDEwNTU0MDAwMDAwMzA1NAotOjEwMUMyMDAwMDIwMTAwQzQwMDAwMDAwMTAyMDEwMENDMDAwMDAwMDExQwotOjEwMUMzMDAwMDIwMTAwRjgwMDAwMDAwMTAyMDEwMEYwMDAwMDAwMDFCNAotOjEwMUM0MDAwMDIwMTAwODAwMDMwMDAwMDAyMDEwMDg4MDAwMDAwMjgyRQotOjEwMUM1MDAwMDIwMTAwOTAwMDAwMDAwMDAyMDEwMTM0MDAwMDAwMDRCNQotOjEwMUM2MDAwMDIwMTAyREMwMDAwMDAwMTAyMDEwMzJDMDAwMDAwMDA2MAotOjEwMUM3MDAwMDIwMTYwNUMwMDAwRkZGRjAyMDE2MDc0MDAwMDAwMDdDOQotOjEwMUM4MDAwMDIwMTYwODQwMDAwMDAwMTAyMDEwNTY0MDAwMDAwMzBEMAotOjEwMUM5MDAwMDIwMTAwQzgwMDAwMDAwMTAyMDEwMEQwMDAwMDAwMDFBNAotOjEwMUNBMDAwMDIwMTAwRkMwMDAwMDAwMTAyMDEwMEY0MDAwMDAwMDEzQwotOjEwMUNCMDAwMDIwQzEwMDAwMDAwMDAyODAyMEMyMDA4MDAwMDAyMTE5NQotOjEwMUNDMDAwMDIwQzIwMEMwMDAwMDIwMDAyMEMyMDEwMDAwMDAyMDQ5NAotOjEwMUNEMDAwMDIwQzIwMUMwMDAwRkZGRjAyMEMyMDIwMDAwMEZGRkY3MAotOjEwMUNFMDAwMDIwQzIwMjQwMDAwRkZGRjAyMEMyMDI4MDAwMEZGRkY1MAotOjEwMUNGMDAwMDIwQzIwMzgwMDAwMDAyMDAyMEMyMDNDMDAwMDAwMjFEMwotOjEwMUQwMDAwMDIwQzIwNDAwMDAwMDAyMjAyMEMyMDQ0MDAwMDAwMjNBRQotOjEwMUQxMDAwMDIwQzIwNDgwMDAwMDAyNDAyMEMyMDRDMDAwMDAwMjU4QQotOjEwMUQyMDAwMDIwQzIwNTAwMDAwMDAyNjAyMEMyMDU0MDAwMDAwMjc2NgotOjEwMUQzMDAwMDIwQzIwNTgwMDAwMDAyODAyMEMyMDVDMDAwMDAwMjk0MgotOjEwMUQ0MDAwMDIwQzIwNjAwMDAwMDAyQTAyMEMyMDY0MDAwMDAwMkIxRQotOjEwMUQ1MDAwMDIwQzIwNjgwMDAwMDAyQzAyMEMyMDZDMDAwMDAwMkRGQQotOjEwMUQ2MDAwMDIwQzIwNzAwMDAwMDAyRTAyMEMyMDc0MDAwMDAwMkZENgotOjEwMUQ3MDAwMDIwQzIwNzgwMDAwMDAxMDA2MEMyMDdDMDAwMDAwMDdGOAotOjEwMUQ4MDAwMDIwQzIwOTgwMDAwMDAxMTAyMEMyMDlDMDAwMDAwMTJBMAotOjEwMUQ5MDAwMDIwQzIwQTAwMDAwMDAxMzA2MEMyMEE0MDAwMDAwMUQ2RgotOjEwMURBMDAwMDIwQzIxMTgwMDAwMDAwMTAyMEMyMTFDMDAwMDAwMDE5RgotOjEwMURCMDAwMDIwQzIxMjAwMDAwMDAwMTA2MEMyMTI0MDAwMDAwMUQ1RgotOjEwMURDMDAwMDIwQzIxOTgwMDAwMDAwMTA2MEMyMTlDMDAwMDAwMDc3NQotOjEwMUREMDAwMDIwQzIxQjgwMDAwMDAwMTAyMEMyMUJDMDAwMDAwMDEyRgotOjEwMURFMDAwMDIwQzIxQzAwMDAwMDAwMTAyMEMyMUM0MDAwMDAwMDEwRgotOjEwMURGMDAwMDIwQzIxQzgwMDAwMDAwMTAyMEMyMUNDMDAwMDAwMDFFRgotOjEwMUUwMDAwMDIwQzIxRDAwMDAwMDAwMTAyMEMyMUQ0MDAwMDAwMDFDRQotOjEwMUUxMDAwMDIwQzIxRDgwMDAwMDAwMTAyMEMyMURDMDAwMDAwMDFBRQotOjEwMUUyMDAwMDIwQzIxRTAwMDAwMDAwMTAyMEMyMUU0MDAwMDAwMDE4RQotOjEwMUUzMDAwMDIwQzIxRTgwMDAwMDAwMTAyMEMyMUVDMDAwMDAwMDE2RQotOjEwMUU0MDAwMDIwQzIxRjAwMDAwMDAwMTAyMEMyMUY0MDAwMDAwMDE0RQotOjEwMUU1MDAwMDIwQzIxRjgwMDAwMDAwMTA2MEMyMUZDMDAwMDAwMDcyNAotOjEwMUU2MDAwMDIwQzIyMTgwMDAwMDAwMTA2MEMyMjFDMDAwMDAwMDdEMgotOjEwMUU3MDAwMDIwQzIyMzgwN0ZGRkZGRjAyMEMyMjNDMDAwMDAwM0Y0QgotOjEwMUU4MDAwMDIwQzIyNDAwN0ZGRkZGRjAyMEMyMjQ0MDAwMDAwMEY1QgotOjEwMUU5MDAwMDEwQzIyNDgwMDAwMDAwMDAxMEMyMjRDMDAwMDAwMDA1MAotOjEwMUVBMDAwMDEwQzIyNTAwMDAwMDAwMDAxMEMyMjU0MDAwMDAwMDAzMAotOjEwMUVCMDAwMDEwQzIyNTgwMDAwMDAwMDAxMEMyMjVDMDAwMDAwMDAxMAotOjEwMUVDMDAwMDEwQzIyNjAwMDAwMDAwMDAxMEMyMjY0MDAwMDAwMDBGMAotOjEwMUVEMDAwMDEwQzIyNjgwMDAwMDAwMDAxMEMyMjZDMDAwMDAwMDBEMAotOjEwMUVFMDAwMDEwQzIyNzAwMDAwMDAwMDAxMEMyMjc0MDAwMDAwMDBCMAotOjEwMUVGMDAwMDEwQzIyNzgwMDAwMDAwMDAxMEMyMjdDMDAwMDAwMDA5MAotOjEwMUYwMDAwMEMwQzIwMDAwMDAwMDNFODBBMEMyMDAwMDAwMDAwMDE3NwotOjEwMUYxMDAwMEIwQzIwMDAwMDAwMDAwQTAyMEM0MDA4MDAwMDEwMTEwOQotOjEwMUYyMDAwMDIwQzQwMEMwMDAwMTAwMDAyMEM0MDEwMDAwMDEwMDRENQotOjEwMUYzMDAwMDIwQzQwMTQwMDAwMTAyMTAyMEM0MDFDMDAwMEZGRkZBNgotOjEwMUY0MDAwMDIwQzQwMjAwMDAwRkZGRjAyMEM0MDI0MDAwMEZGRkZCNQotOjEwMUY1MDAwMDIwQzQwMjgwMDAwRkZGRjAyMEM0MDM4MDAwMDAwNDY0MQotOjEwMUY2MDAwMDIwQzQwM0MwMDAwMDAxMDA2MEM0MDQwMDAwMDAwMDI0MwotOjEwMUY3MDAwMDIwQzQwNDgwMDAwMDAxODAyMEM0MDRDMDAwMDAwRjAyOQotOjEwMUY4MDAwMDYwQzQwNTAwMDAwMDAxRjAyMEM0MENDMDAwMDAwMDE3NQotOjEwMUY5MDAwMDYwQzQwRDAwMDAwMDAzQTAyMEM0MUI4MDAwMDAwMDFERAotOjEwMUZBMDAwMDYwQzQxQkMwMDAwMDAwMzAyMEM0MUM4MDAwMDAwMDEwNwotOjEwMUZCMDAwMDIwQzQxQ0MwMDAwMDAwMTA2MEM0MUQwMDAwMDAwMUFDOAotOjEwMUZDMDAwMDIwQzQyMzgwN0ZGRkZGRjAyMEM0MjNDMDAwMDAwM0ZCQQotOjEwMUZEMDAwMDIwQzQyNDAwN0ZGRkZGRjAyMEM0MjQ0MDAwMDAwMEZDQQotOjEwMUZFMDAwMDEwQzQyNDgwMDAwMDAwMDAxMEM0MjRDMDAwMDAwMDBCRgotOjEwMUZGMDAwMDEwQzQyNTAwMDAwMDAwMDAxMEM0MjU0MDAwMDAwMDA5RgotOjEwMjAwMDAwMDEwQzQyNTgwMDAwMDAwMDAxMEM0MjVDMDAwMDAwMDA3RQotOjEwMjAxMDAwMDEwQzQyNjAwMDAwMDAwMDAxMEM0MjY0MDAwMDAwMDA1RQotOjEwMjAyMDAwMDEwQzQyNjgwMDAwMDAwMDAxMEM0MjZDMDAwMDAwMDAzRQotOjEwMjAzMDAwMDEwQzQyNzAwMDAwMDAwMDAxMEM0Mjc0MDAwMDAwMDAxRQotOjEwMjA0MDAwMDEwQzQyNzgwMDAwMDAwMDAxMEM0MjdDMDAwMDAwMDBGRQotOjEwMjA1MDAwMDEwQzQyODAwMDAwMDAwMDBDMEM0MDAwMDAwMDAzRTg2RQotOjEwMjA2MDAwMEEwQzQwMDAwMDAwMDAwMTBCMEM0MDAwMDAwMDAwMEFCOAotOjEwMjA3MDAwMDYwRDQwMDAwMDAwMEEwMDAyMEQwMDQ0MDAwMDAwMzI3RQotOjEwMjA4MDAwMDIwRDAwOEMwMjE1MDAyMDAyMEQwMDkwMDIxNTAwMjBBOAotOjEwMjA5MDAwMDIwRDAwOTQwODEwMDAwMDAyMEQwMDk4MDAwMDAwMzNBQgotOjEwMjBBMDAwMDIwRDAwOUMwMDAwMDAwMjAyMEQwMEEwMDAwMDAwMDBENAotOjEwMjBCMDAwMDIwRDAwQTQwMDAwMDAwNTAyMEQwMEE4MDAwMDAwMDVBQwotOjEwMjBDMDAwMDYwRDAwQUMwMDAwMDAwMjAyMEQwMEI0MDAwMDAwMDI4QQotOjEwMjBEMDAwMDIwRDAwQjgwMDAwMDAwMzAyMEQwMEJDMDAwMDAwMDI2OQotOjEwMjBFMDAwMDIwRDAwQzAwMDAwMDAwMTAyMEQwMEM4MDAwMDAwMDI0NwotOjEwMjBGMDAwMDIwRDAwQ0MwMDAwMDAwMjAyMEQwMTVDMDAwMDAwMDE5NgotOjEwMjEwMDAwMDIwRDAxNjQwMDAwMDAwMTAyMEQwMTY4MDAwMDAwMDJFMAotOjEwMjExMDAwMDIwRDAyMDQwMDAwMDAwMTAyMEQwMjBDMDAwMDAwMjA2QwotOjEwMjEyMDAwMDIwRDAyMTAwMDAwMDA0MDAyMEQwMjE0MDAwMDAwNDBFOQotOjEwMjEzMDAwMDIwRDAyMjAwMDAwMDAwMzAyMEQwMjI0MDAwMDAwMTgxRQotOjEwMjE0MDAwMDYwRDAyODAwMDAwMDAxMjA0MEQwMzAwMDAxODAzN0YzQQotOjEwMjE1MDAwMDYwRDAzNjAwMDAwMDAwQzAyMEQwMDRDMDAwMDAwMDFBMQotOjEwMjE2MDAwMDIwRDAwNTAwMDAwMDAwMjAyMEQwMDU0MDAwMDAwMDBBQgotOjEwMjE3MDAwMDIwRDAwNTgwMDAwMDAwODA2MEQwMDVDMDAwMDAwMDQ3RAotOjEwMjE4MDAwMDIwRDAwQzQwMDAwMDAwNDAyMEQwMDA0MDAwMDAwMDE2NAotOjEwMjE5MDAwMDIwRDAwMDgwMDAwMDAwMTAyMEQwMDBDMDAwMDAwMDEwQgotOjEwMjFBMDAwMDIwRDAwMTAwMDAwMDAwMTAyMEQwMDE0MDAwMDAwMDFFQgotOjEwMjFCMDAwMDIwRDAwMTgwMDAwMDAwMTAyMEQwMDFDMDAwMDAwMDFDQgotOjEwMjFDMDAwMDIwRDAwMjAwMDAwMDAwMTAyMEQwMDI0MDAwMDAwMDFBQgotOjEwMjFEMDAwMDIwRDAwMjgwMDAwMDAwMTAyMEQwMDJDMDAwMDAwMDE4QgotOjEwMjFFMDAwMDIwRDAwMzAwMDAwMDAwMTAyMEQwMDM0MDAwMDAwMDE2QgotOjEwMjFGMDAwMDIwRDAwMzgwMDAwMDAwMTAyMEQwMDNDMDAwMDAwMDE0QgotOjEwMjIwMDAwMDIwRDAxMTQwMDAwMDAwOTAyMEQwMTFDMDAwMDAwMEE2QgotOjEwMjIxMDAwMDIwRDAxMjQwMDAwMDAwMDAyMEQwMTJDMDAwMDAwMDA0RQotOjEwMjIyMDAwMDIwRDAxMzQwMDAwMDAwMDAyMEQwMTNDMDAwMDAwMEIxMwotOjEwMjIzMDAwMDIwRDAxNDQwMDAwMDAwMDAyMEQwMTE4MDAwMDAwMjlGOQotOjEwMjI0MDAwMDIwRDAxMjAwMDAwMDAyQTAyMEQwMTI4MDAwMDAwMjBEQwotOjEwMjI1MDAwMDIwRDAxMzAwMDAwMDAyMDAyMEQwMTM4MDAwMDAwMjBCNgotOjEwMjI2MDAwMDIwRDAxNDAwMDAwMDAyQjAyMEQwMTQ4MDAwMDAwMjA3QgotOjEwMjI3MDAwMDIwRDAxMTQwMDAwMDAxOTAyMEQwMTFDMDAwMDAwMUFEQgotOjEwMjI4MDAwMDIwRDAxMjQwMDAwMDAxMDAyMEQwMTJDMDAwMDAwMTBCRQotOjEwMjI5MDAwMDIwRDAxMzQwMDAwMDAxMDAyMEQwMTNDMDAwMDAwMUI4MwotOjEwMjJBMDAwMDIwRDAxNDQwMDAwMDAxMDAyMEQwMTE4MDAwMDAwMzk2OQotOjEwMjJCMDAwMDIwRDAxMjAwMDAwMDAzQTAyMEQwMTI4MDAwMDAwMzA0QwotOjEwMjJDMDAwMDIwRDAxMzAwMDAwMDAzMDAyMEQwMTM4MDAwMDAwMzAyNgotOjEwMjJEMDAwMDIwRDAxNDAwMDAwMDAzQjAyMEQwMTQ4MDAwMDAwMzBFQgotOjEwMjJFMDAwMDIwRDAxMTQwMDAwMDA0OTAyMEQwMTFDMDAwMDAwNEEwQgotOjEwMjJGMDAwMDIwRDAxMjQwMDAwMDA0MDAyMEQwMTJDMDAwMDAwNDBFRQotOjEwMjMwMDAwMDIwRDAxMzQwMDAwMDA0MDAyMEQwMTNDMDAwMDAwNEJCMgotOjEwMjMxMDAwMDIwRDAxNDQwMDAwMDA0MDAyMEQwMTE4MDAwMDAwNjk5OAotOjEwMjMyMDAwMDIwRDAxMjAwMDAwMDA2QTAyMEQwMTI4MDAwMDAwNjA3QgotOjEwMjMzMDAwMDIwRDAxMzAwMDAwMDA2MDAyMEQwMTM4MDAwMDAwNjA1NQotOjEwMjM0MDAwMDIwRDAxNDAwMDAwMDA2QjAyMEQwMTQ4MDAwMDAwNjAxQQotOjEwMjM1MDAwMDIwRDAxMTQwMDAwMDA1OTAyMEQwMTFDMDAwMDAwNUE3QQotOjEwMjM2MDAwMDIwRDAxMjQwMDAwMDA1MDAyMEQwMTJDMDAwMDAwNTA1RAotOjEwMjM3MDAwMDIwRDAxMzQwMDAwMDA1MDAyMEQwMTNDMDAwMDAwNUIyMgotOjEwMjM4MDAwMDIwRDAxNDQwMDAwMDA1MDAyMEQwMTE4MDAwMDAwNzkwOAotOjEwMjM5MDAwMDIwRDAxMjAwMDAwMDA3QTAyMEQwMTI4MDAwMDAwNzBFQgotOjEwMjNBMDAwMDIwRDAxMzAwMDAwMDA3MDAyMEQwMTM4MDAwMDAwNzBDNQotOjEwMjNCMDAwMDIwRDAxNDAwMDAwMDA3QjAyMEQwMTQ4MDAwMDAwNzA4QQotOjEwMjNDMDAwMDYwRTIwMDAwMDAwMDgwMDAyMEUwMDRDMDAwMDAwMzI0MwotOjEwMjNEMDAwMDIwRTAwOTQwMjE1MDAyMDAyMEUwMDk4MDIxNTAwMjA0MwotOjEwMjNFMDAwMDIwRTAwOUMwMDAwMDAzMDAyMEUwMEEwMDgxMDAwMDA0OQotOjEwMjNGMDAwMDIwRTAwQTQwMDAwMDAzMzAyMEUwMEE4MDAwMDAwMzAwRQotOjEwMjQwMDAwMDIwRTAwQUMwMDAwMDAzMTAyMEUwMEIwMDAwMDAwMDIxRAotOjEwMjQxMDAwMDIwRTAwQjQwMDAwMDAwNDAyMEUwMEI4MDAwMDAwMDAyQwotOjEwMjQyMDAwMDIwRTAwQkMwMDAwMDAwMjAyMEUwMEMwMDAwMDAwMDIwQwotOjEwMjQzMDAwMDIwRTAwQzQwMDAwMDAwMDAyMEUwMEM4MDAwMDAwMDJFRQotOjEwMjQ0MDAwMDIwRTAwQ0MwMDAwMDAwNzAyMEUwMEQwMDAwMDAwMDJDNwotOjEwMjQ1MDAwMDIwRTAwRDQwMDAwMDAwMjAyMEUwMEQ4MDAwMDAwMDFBRAotOjEwMjQ2MDAwMDIwRTAxNDQwMDAwMDAwMTAyMEUwMTRDMDAwMDAwMDFCOAotOjEwMjQ3MDAwMDIwRTAxNTAwMDAwMDAwMjAyMEUwMjA0MDAwMDAwMDFFMgotOjEwMjQ4MDAwMDIwRTAyMEMwMDAwMDA0MDAyMEUwMjEwMDAwMDAwNDA4QwotOjEwMjQ5MDAwMDIwRTAyMUMwMDAwMDAwNDAyMEUwMjIwMDAwMDAwMjBCOAotOjEwMjRBMDAwMDIwRTAyMjQwMDAwMDAwRTAyMEUwMjI4MDAwMDAwMUI5MwotOjEwMjRCMDAwMDYwRTAzMDAwMDAwMDAxMjA0MEUwMjgwMDAxQjAzOTdBQQotOjEwMjRDMDAwMDYwRTAyRUMwMDAwMDAwNTAyMEUwMDU0MDAwMDAwMEM5NQotOjEwMjREMDAwMDIwRTAwNTgwMDAwMDAwQzAyMEUwMDVDMDAwMDAwMDAxQwotOjEwMjRFMDAwMDIwRTAwNjAwMDAwMDAxMDAyMEUwMDY0MDAwMDAwMTBFOAotOjEwMjRGMDAwMDYwRTAwNjgwMDAwMDAwMzAyMEUwMERDMDAwMDAwMDM2RQotOjEwMjUwMDAwMDIwRTAwMDQwMDAwMDAwMTAyMEUwMDA4MDAwMDAwMDE5RAotOjEwMjUxMDAwMDIwRTAwMEMwMDAwMDAwMTAyMEUwMDEwMDAwMDAwMDE3RAotOjEwMjUyMDAwMDIwRTAwMTQwMDAwMDAwMTAyMEUwMDE4MDAwMDAwMDE1RAotOjEwMjUzMDAwMDIwRTAwMUMwMDAwMDAwMTAyMEUwMDIwMDAwMDAwMDEzRAotOjEwMjU0MDAwMDIwRTAwMjQwMDAwMDAwMTAyMEUwMDI4MDAwMDAwMDExRAotOjEwMjU1MDAwMDIwRTAwMkMwMDAwMDAwMTAyMEUwMDMwMDAwMDAwMDFGRAotOjEwMjU2MDAwMDIwRTAwMzQwMDAwMDAwMTAyMEUwMDM4MDAwMDAwMDFERAotOjEwMjU3MDAwMDIwRTAwM0MwMDAwMDAwMTAyMEUwMDQwMDAwMDAwMDFCRAotOjEwMjU4MDAwMDIwRTAwNDQwMDAwMDAwMTAyMEUwMTEwMDAwMDAwMEZDNgotOjEwMjU5MDAwMDIwRTAxMTgwMDAwMDAwMDAyMEUwMTIwMDAwMDAwMDBFMQotOjEwMjVBMDAwMDIwRTAxMjgwMDAwMDAwMDAyMEUwMTE0MDAwMDAwMkY5RQotOjEwMjVCMDAwMDIwRTAxMUMwMDAwMDAyMDAyMEUwMTI0MDAwMDAwMDA5OQotOjEwMjVDMDAwMDIwRTAxMkMwMDAwMDAwMDAyMEUwMTEwMDAwMDAwMUY4RQotOjEwMjVEMDAwMDIwRTAxMTgwMDAwMDAxMDAyMEUwMTIwMDAwMDAwMDA5MQotOjEwMjVFMDAwMDIwRTAxMjgwMDAwMDAwMDAyMEUwMTE0MDAwMDAwM0Y0RQotOjEwMjVGMDAwMDIwRTAxMUMwMDAwMDAzMDAyMEUwMTI0MDAwMDAwMDA0OQotOjEwMjYwMDAwMDIwRTAxMkMwMDAwMDAwMDAyMEUwMTEwMDAwMDAwNEYxRAotOjEwMjYxMDAwMDIwRTAxMTgwMDAwMDA0MDAyMEUwMTIwMDAwMDAwMDAyMAotOjEwMjYyMDAwMDIwRTAxMjgwMDAwMDAwMDAyMEUwMTE0MDAwMDAwNkZERAotOjEwMjYzMDAwMDIwRTAxMUMwMDAwMDA2MDAyMEUwMTI0MDAwMDAwMDBEOAotOjEwMjY0MDAwMDIwRTAxMkMwMDAwMDAwMDAyMEUwMTEwMDAwMDAwNUZDRAotOjEwMjY1MDAwMDIwRTAxMTgwMDAwMDA1MDAyMEUwMTIwMDAwMDAwMDBEMAotOjEwMjY2MDAwMDIwRTAxMjgwMDAwMDAwMDAyMEUwMTE0MDAwMDAwN0Y4RAotOjEwMjY3MDAwMDIwRTAxMUMwMDAwMDA3MDAyMEUwMTI0MDAwMDAwMDA4OAotOjEwMjY4MDAwMDIwRTAxMkMwMDAwMDAwMDA3MzAwNDAwMDBDOTAwMDAwOQotOjEwMjY5MDAwMDgzMDA3RDgwMDA1MDNCMjA3MzQwMDAwMzMzMjAwMDBDOQotOjEwMjZBMDAwMDczNDgwMDAzMEE3MENDRDA3MzUwMDAwMzUzNTE4RjcwQQotOjEwMjZCMDAwMDczNTgwMDAyQTYyMjY0NTA3MzYwMDAwMThEMzMwREUzMQotOjEwMjZDMDAwMDgzNjQ2NjAzNzM0MDNCNDAxMzAwMDAwMDAwMDAwMDBEMwotOjEwMjZEMDAwMDEzMDAwMDQwMDAwMDAwMDAxMzAwMDA4MDAwMDAwMDA4QwotOjEwMjZFMDAwMDEzMDAwMEMwMDAwMDAwMDAxMzAwMDEwMDAwMDAwMDA2QwotOjEwMjZGMDAwMDEzMDAwMTQwMDAwMDAwMDAyMzAwMDIwMDAwMDAwMDE0MgotOjEwMjcwMDAwMDIzMDAwMjQwMDAwMDAwMjAyMzAwMDI4MDAwMDAwMDMxNAotOjEwMjcxMDAwMDIzMDAwMkMwMDAwMDAwMDAyMzAwMDMwMDAwMDAwMDRGNQotOjEwMjcyMDAwMDIzMDAwMzQwMDAwMDAwMTAyMzAwMDM4MDAwMDAwMDBEOAotOjEwMjczMDAwMDIzMDAwM0MwMDAwMDAwMTAyMzAwMDQwMDAwMDAwMDRCNAotOjEwMjc0MDAwMDIzMDAwNDQwMDAwMDAwMDAyMzAwMDQ4MDAwMDAwMDE5OAotOjEwMjc1MDAwMDIzMDAwNEMwMDAwMDAwMzAyMzAwMDUwMDAwMDAwMDA3NgotOjEwMjc2MDAwMDIzMDAwNTQwMDAwMDAwMTAyMzAwMDU4MDAwMDAwMDQ1NAotOjEwMjc3MDAwMDIzMDAwNUMwMDAwMDAwMDAyMzAwMDYwMDAwMDAwMDEzOAotOjEwMjc4MDAwMDIzMDAwNjQwMDAwMDAwMzAyMzAwMDY4MDAwMDAwMDAxNgotOjEwMjc5MDAwMDIzMDAwNkMwMDAwMDAwMTAyMzAwMDcwMDAwMDAwMDRGNAotOjEwMjdBMDAwMDIzMDAwNzQwMDAwMDAwMDAyMzAwMDc4MDAwMDAwMDRENQotOjEwMjdCMDAwMDIzMDAwN0MwMDAwMDAwMzA2MzAwMDgwMDAwMDAwMDJCMAotOjEwMjdDMDAwMDIzMDAwQTQwMDAwM0ZGRjAyMzAwMEE4MDAwMDAzRkYxOQotOjEwMjdEMDAwMDIzMDAyMjQwMDAwMDAwMDAyMzAwMjM0MDAwMDAwMDAzOQotOjEwMjdFMDAwMDIzMDAyNEMwMDAwMDAwMDAyMzAwMkU0MDAwMEZGRkY1MwotOjEwMjdGMDAwMDYzMDIwMDAwMDAwMDgwMDAyMzM4QkMwMDAwMDAwMDFGQQotOjEwMjgwMDAwMDIzMzgwMDAwMDAwMDAxQTAyMzM4MDQwMDAwMDAwNEVCNgotOjEwMjgxMDAwMDIzMzgwODAwMDAwMDAxMDAyMzM4MEMwMDAwMDAwMjBERQotOjEwMjgyMDAwMEMzMzgzMDAwMDA3QTEyMDBBMzM4MzAwMDAwMDAxMzgyNQotOjEwMjgzMDAwMEIzMzgzMDAwMDAwMTM4ODBBMzM4MzQwMDAwMDAwMDAzQwotOjEwMjg0MDAwMEMzMzgzNDAwMDAwMDFGNDBCMzM4MzQwMDAwMDAwMDU4QgotOjEwMjg1MDAwMDIzMzgzODAwMDA3QTEyMDAyMzM4M0MwMDAwMDAxRjQwQgotOjEwMjg2MDAwMDIzMzE0ODAwMDAwMDAwMTBBMzMxNDgwMDAwMDAwMDBDRAotOjEwMjg3MDAwMDYzMjgwMDAwMDAwMDEwMjA2MzIyMDA4MDAwMDAwQzg3NQotOjEwMjg4MDAwMDYzMjIwMDAwMDAwMDAwMjA0MzI4RUEwMDAxMDAzQjZDMQotOjEwMjg5MDAwMDYzMjNFQjAwMDAwMDAwNjA2MzIzRUQ4MDAwMDAwMDJCQwotOjEwMjhBMDAwMDYzMjNFODAwMDAwMDAwQTA0MzIzRUE4MDAwMjAzQzY0MQotOjEwMjhCMDAwMDYzMjNFMDAwMDAwMDAyMDA2MzI1MDAwMDAwMDA0MDBGNgotOjEwMjhDMDAwMDYzMjQwMDAwMDAwMDAwNDA0MzI3NEMwMDAwMjAzQzg1NQotOjEwMjhEMDAwMDYzMjQxMTAwMDAwMDAwMjA2MzJEMDAwMDAwMDAwMzAzNQotOjEwMjhFMDAwMDYzMkRENDAwMDAwMDA0NDA2MzJEQTAwMDAwMDAwRDA2RAotOjEwMjhGMDAwMDYzMkRFQTAwMDAwMDAwMjA2MzJFMDAwMDAwMDA4MDAwMAotOjEwMjkwMDAwMDYzMjg0NTAwMDAwMDExODA2MzIxMDAwMDAwMDAxODhEMQotOjEwMjkxMDAwMDYzMjUwMDAwMDAwMDAyMDA2MzI1MTAwMDAwMDAwMjA2NgotOjEwMjkyMDAwMDYzMjUyMDAwMDAwMDAyMDA2MzI1MzAwMDAwMDAwMjA1MgotOjEwMjkzMDAwMDYzMjU0MDAwMDAwMDAyMDA2MzI1NTAwMDAwMDAwMjAzRQotOjEwMjk0MDAwMDYzMjU2MDAwMDAwMDAyMDA2MzI1NzAwMDAwMDAwMjAyQQotOjEwMjk1MDAwMDYzMjU4MDAwMDAwMDAyMDA2MzI1OTAwMDAwMDAwMjAxNgotOjEwMjk2MDAwMDYzMjVBMDAwMDAwMDAyMDA2MzI1QjAwMDAwMDAwMjAwMgotOjEwMjk3MDAwMDYzMjVDMDAwMDAwMDAyMDA2MzI1RDAwMDAwMDAwMjBFRQotOjEwMjk4MDAwMDYzMjVFMDAwMDAwMDAyMDA2MzI1RjAwMDAwMDAwMjBEQQotOjEwMjk5MDAwMDYzMjhERjAwMDAwMDAwMjA0MzI4RTAwMDAwMjAzQ0FFRAotOjEwMjlBMDAwMDYzMjhFMDgwMDAwMDAwMjA2MzJERTkwMDAwMDAwMDJBRgotOjEwMjlCMDAwMDYzMjFDNDAwMDAwMDAzODA2MzI4OEIwMDAwMDAxMThDMgotOjEwMjlDMDAwMDYzMjE2MjAwMDAwMDE4ODA2MzI1MDgwMDAwMDAwMjBFOAotOjEwMjlEMDAwMDYzMjUxODAwMDAwMDAyMDA2MzI1MjgwMDAwMDAwMjBBNAotOjEwMjlFMDAwMDYzMjUzODAwMDAwMDAyMDA2MzI1NDgwMDAwMDAwMjA5MAotOjEwMjlGMDAwMDYzMjU1ODAwMDAwMDAyMDA2MzI1NjgwMDAwMDAwMjA3QwotOjEwMkEwMDAwMDYzMjU3ODAwMDAwMDAyMDA2MzI1ODgwMDAwMDAwMjA2NwotOjEwMkExMDAwMDYzMjU5ODAwMDAwMDAyMDA2MzI1QTgwMDAwMDAwMjA1MwotOjEwMkEyMDAwMDYzMjVCODAwMDAwMDAyMDA2MzI1QzgwMDAwMDAwMjAzRgotOjEwMkEzMDAwMDYzMjVEODAwMDAwMDAyMDA2MzI1RTgwMDAwMDAwMjAyQgotOjEwMkE0MDAwMDYzMjVGODAwMDAwMDAyMDA2MzI4REY4MDAwMDAwMDI5MAotOjEwMkE1MDAwMDQzMjhFMTAwMDAyMDNDQzA2MzI4RTE4MDAwMDAwMDJGMQotOjEwMkE2MDAwMDYzMkRFOTgwMDAwMDAwMjA2MzIxRDIwMDAwMDAwMzgwOQotOjEwMkE3MDAwMDIzMjhENTAwMDAwMDAwMDA2MzI0MDEwMDAwMDAwMDJCQgotOjEwMkE4MDAwMDIzMjhENTQwMDAwMDAwMDA2MzI0MDIwMDAwMDAwMDI5NwotOjEwMkE5MDAwMDIzMjhENTgwMDAwMDAwMDA2MzI0MDMwMDAwMDAwMDI3MwotOjEwMkFBMDAwMDIzMjhENUMwMDAwMDAwMDA2MzI0MDQwMDAwMDAwMDI0RgotOjEwMkFCMDAwMDIzMjhENjAwMDAwMDAwMDA2MzI0MDUwMDAwMDAwMDIyQgotOjEwMkFDMDAwMDIzMjhENjQwMDAwMDAwMDA2MzI0MDYwMDAwMDAwMDIwNwotOjEwMkFEMDAwMDIzMjhENjgwMDAwMDAwMDA2MzI0MDcwMDAwMDAwMDJFMwotOjEwMkFFMDAwMDIzMjhENkMwMDAwMDAwMDA2MzI0MDgwMDAwMDAwMDJCRgotOjEwMkFGMDAwMDcyMDA0MDAwMDkxMDAwMDA4MjAwNzgwMDAxMDAzQ0U4QQotOjEwMkIwMDAwMDcyNDAwMDAyQUYzMDAwMDA3MjQ4MDAwMTUwOTBBQkRFRAotOjEwMkIxMDAwMDgyNEE5RjA2OTI4MDNEMDAxMjAwMDAwMDAwMDAwMDA2QgotOjEwMkIyMDAwMDEyMDAwMDQwMDAwMDAwMDAxMjAwMDA4MDAwMDAwMDA1NwotOjEwMkIzMDAwMDEyMDAwMEMwMDAwMDAwMDAxMjAwMDEwMDAwMDAwMDAzNwotOjEwMkI0MDAwMDEyMDAwMTQwMDAwMDAwMDAyMjAwMDIwMDAwMDAwMDEwRAotOjEwMkI1MDAwMDIyMDAwMjQwMDAwMDAwMjAyMjAwMDI4MDAwMDAwMDNFMAotOjEwMkI2MDAwMDIyMDAwMkMwMDAwMDAwMDAyMjAwMDMwMDAwMDAwMDRDMQotOjEwMkI3MDAwMDIyMDAwMzQwMDAwMDAwMTAyMjAwMDM4MDAwMDAwMDBBNAotOjEwMkI4MDAwMDIyMDAwM0MwMDAwMDAwMTAyMjAwMDQwMDAwMDAwMDQ4MAotOjEwMkI5MDAwMDIyMDAwNDQwMDAwMDAwMDAyMjAwMDQ4MDAwMDAwMDE2NAotOjEwMkJBMDAwMDIyMDAwNEMwMDAwMDAwMzAyMjAwMDUwMDAwMDAwMDA0MgotOjEwMkJCMDAwMDIyMDAwNTQwMDAwMDAwMTAyMjAwMDU4MDAwMDAwMDQyMAotOjEwMkJDMDAwMDIyMDAwNUMwMDAwMDAwMDAyMjAwMDYwMDAwMDAwMDEwNAotOjEwMkJEMDAwMDIyMDAwNjQwMDAwMDAwMzAyMjAwMDY4MDAwMDAwMDBFMgotOjEwMkJFMDAwMDIyMDAwNkMwMDAwMDAwMTAyMjAwMDcwMDAwMDAwMDRDMAotOjEwMkJGMDAwMDIyMDAwNzQwMDAwMDAwMDAyMjAwMDc4MDAwMDAwMDRBMQotOjEwMkMwMDAwMDIyMDAwN0MwMDAwMDAwMzA2MjAwMDgwMDAwMDAwMDI3QgotOjEwMkMxMDAwMDIyMDAwQTQwMDAwM0ZGRjAyMjAwMEE4MDAwMDAzRkZFNAotOjEwMkMyMDAwMDIyMDAyMjQwMDAwMDAwMDAyMjAwMjM0MDAwMDAwMDAwNAotOjEwMkMzMDAwMDIyMDAyNEMwMDAwMDAwMDAyMjAwMkU0MDAwMEZGRkYxRQotOjEwMkM0MDAwMDYyMDIwMDAwMDAwMDgwMDAyMjM4QkMwMDAwMDAwMDFDNQotOjEwMkM1MDAwMDIyMzgwMDAwMDAwMDAxMDAyMjM4MDQwMDAwMDAwMTJDOAotOjEwMkM2MDAwMDIyMzgwODAwMDAwMDAzMDAyMjM4MEMwMDAwMDAwMEU5QwotOjEwMkM3MDAwMEMyMzgzMDAwMDA3QTEyMDBBMjM4MzAwMDAwMDAxMzhGMQotOjEwMkM4MDAwMEIyMzgzMDAwMDAwMTM4ODBBMjM4MzQwMDAwMDAwMDAwOAotOjEwMkM5MDAwMEMyMzgzNDAwMDAwMDFGNDBCMjM4MzQwMDAwMDAwMDU1NwotOjEwMkNBMDAwMDIyMzgzODAwMDA3QTEyMDAyMjM4M0MwMDAwMDAxRjRENwotOjEwMkNCMDAwMDIyMzE0ODAwMDAwMDAwMTBBMjMxNDgwMDAwMDAwMDA5OQotOjEwMkNDMDAwMDYyMjEwMDAwMDAwMDA0MjA2MjIyMDA4MDAwMDAwQzg3MgotOjEwMkNEMDAwMDYyMjIwMDAwMDAwMDAwMjA2MjJCMDAwMDAwMDAwQzYwQwotOjEwMkNFMDAwMDQyMkIzMTgwMDA1MDNEMjA2MjJCMzJDMDAwMDAwMEIwNwotOjEwMkNGMDAwMDQyMkIzNTgwMDA1MDNENzA2MjJCMzZDMDAwMDAwMEI3MgotOjEwMkQwMDAwMDQyMkIzOTgwMDA1MDNEQzA2MjJCM0FDMDAwMDAwMEJEQwotOjEwMkQxMDAwMDQyMkIzRDgwMDA1MDNFMTA2MjJCM0VDMDAwMDAwMEI0NwotOjEwMkQyMDAwMDQyMkI0MTgwMDA1MDNFNjA2MjJCNDJDMDAwMDAwMEJCMAotOjEwMkQzMDAwMDQyMkI0NTgwMDA1MDNFQjA2MjJCNDZDMDAwMDAwMEIxQgotOjEwMkQ0MDAwMDQyMkI0OTgwMDA1MDNGMDA2MjJCNEFDMDAwMDAwMEI4NgotOjEwMkQ1MDAwMDQyMkI0RDgwMDA1MDNGNTA2MjJCNEVDMDAwMDAwMEJGMQotOjEwMkQ2MDAwMDQyMkI1MTgwMDA1MDNGQTA2MjJCNTJDMDAwMDAwMEI1QQotOjEwMkQ3MDAwMDQyMkI1NTgwMDA1MDNGRjA2MjJCNTZDMDAwMDAwMEJDNQotOjEwMkQ4MDAwMDQyMkI1OTgwMDA1MDQwNDA2MjJCNUFDMDAwMDAwMEIyRgotOjEwMkQ5MDAwMDQyMkI1RDgwMDA1MDQwOTA2MjJCNUVDMDAwMDAwMEI5QQotOjEwMkRBMDAwMDQyMkI2MTgwMDA1MDQwRTA2MjJCNjJDMDAwMDAwMEIwMwotOjEwMkRCMDAwMDQyMkI2NTgwMDA1MDQxMzA2MjJCNjZDMDAwMDAwMEI2RQotOjEwMkRDMDAwMDQyMkI2OTgwMDA1MDQxODA2MjJCNkFDMDAwMDAwMEJEOQotOjEwMkREMDAwMDQyMkI2RDgwMDA1MDQxRDA2MjJCNkVDMDAwMDAwMEI0NAotOjEwMkRFMDAwMDQyMkI3MTgwMDA1MDQyMjA2MjJCNzJDMDAwMDAwMEJBRAotOjEwMkRGMDAwMDQyMkI3NTgwMDA1MDQyNzA2MjJCNzZDMDAwMDAwMEIxOAotOjEwMkUwMDAwMDQyMkI3OTgwMDA1MDQyQzA2MjJCN0FDMDAwMDAwMEI4MgotOjEwMkUxMDAwMDQyMkI3RDgwMDA1MDQzMTA2MjJCN0VDMDAwMDAwMEJFRAotOjEwMkUyMDAwMDQyMkI4MTgwMDA1MDQzNjA2MjJCODJDMDAwMDAwMEI1NgotOjEwMkUzMDAwMDQyMkI4NTgwMDA1MDQzQjA2MjJCODZDMDAwMDAwMEJDMQotOjEwMkU0MDAwMDQyMkI4OTgwMDA1MDQ0MDA2MjJCOEFDMDAwMDAwMEIyQwotOjEwMkU1MDAwMDQyMkI4RDgwMDA1MDQ0NTA2MjJCOEVDMDAwMDAwMEI5NwotOjEwMkU2MDAwMDQyMkI5MTgwMDA1MDQ0QTA2MjJCOTJDMDAwMDAwMEIwMAotOjEwMkU3MDAwMDQyMkI5NTgwMDA1MDQ0RjA2MjJCOTZDMDAwMDAwMEI2QgotOjEwMkU4MDAwMDQyMkI5OTgwMDA1MDQ1NDA2MjJCOUFDMDAwMDAwMEJENgotOjEwMkU5MDAwMDQyMkI5RDgwMDA1MDQ1OTA2MjJCOUVDMDAwMDAwMEI0MQotOjEwMkVBMDAwMDQyMkJBMTgwMDA1MDQ1RTA2MjJCQTJDMDAwMDAwMEJBQQotOjEwMkVCMDAwMDQyMkJBNTgwMDA1MDQ2MzA2MjJCQTZDMDAwMDAwMEIxNQotOjEwMkVDMDAwMDQyMkJBOTgwMDA1MDQ2ODA2MjJCQUFDMDAwMDAwMEI4MAotOjEwMkVEMDAwMDQyMkJBRDgwMDA1MDQ2RDA2MjJCQUVDMDAwMDAwMDVGMQotOjEwMkVFMDAwMDYyMkJCMDAwMDAwMDA1MzA0MjJCQzRDMDAwMTA0NzIwNwotOjEwMkVGMDAwMDYyMkJDNTAwMDAwMDAwMzA0MjJCQzVDMDAwMTA0NzNFNQotOjEwMkYwMDAwMDYyMkJDNjAwMDAwMDAwMzA0MjJCQzZDMDAwMTA0NzRCMwotOjEwMkYxMDAwMDYyMkJDNzAwMDAwMDAwMzA0MjJCQzdDMDAwMTA0NzU4MgotOjEwMkYyMDAwMDYyMkJDODAwMDAwMDAwMzA0MjJCQzhDMDAwMTA0NzY1MQotOjEwMkYzMDAwMDYyMkJDOTAwMDAwMDAwMzA0MjJCQzlDMDAwMTA0NzcyMAotOjEwMkY0MDAwMDYyMkJDQTAwMDAwMDAwMzA0MjJCQ0FDMDAwMTA0NzhFRgotOjEwMkY1MDAwMDYyMkJDQjAwMDAwMDAwMzA0MjJCQ0JDMDAwMTA0NzlCRQotOjEwMkY2MDAwMDYyMjg4MDAwMDAwMDEwMDA2MjI4MDAwMDAwMDAyMDAwNgotOjEwMkY3MDAwMDQyMjEyNzAwMDEwMDQ3QTA2MjIzMDAwMDAwMDAwQzAwMwotOjEwMkY4MDAwMDYyMjY3MDAwMDAwMDEwMDA2MjI5MDAwMDAwMDA0MDBGNQotOjEwMkY5MDAwMDQyMjZCMDgwMDIwMDQ4QTAyMjIxMkMwRkZGRkZGRkZGOAotOjEwMkZBMDAwMDYyMjExRTgwMDAwMDAwMjA2MjIxMkM4MDAwMDAwMDlGMwotOjEwMkZCMDAwMDYyMjEyRUMwMDAwMDAwOTA2MjI4QzAwMDAwMDAwMDgyNgotOjEwMkZDMDAwMDIyMjExNDgwMDAwMDAwMDA2MjIxMzIwMDAwMDAwMDYyMwotOjEwMkZEMDAwMDYyMjMzMDAwMDAwMDAwMjA2MjI2MDQwMDAwMDAwMzA5QwotOjEwMkZFMDAwMDYyMjhDMjAwMDAwMDAwODAyMjIxMTRDMDAwMDAwMDA4NAotOjEwMkZGMDAwMDYyMjEzMzgwMDAwMDAwNjA2MjIzMzA4MDAwMDAwMDJGMwotOjEwMzAwMDAwMDYyMjYxMDAwMDAwMDAzMDA2MjI4QzQwMDAwMDAwMDgwQgotOjEwMzAxMDAwMDIyMjExNTAwMDAwMDAwMDA2MjIxMzUwMDAwMDAwMDY5QQotOjEwMzAyMDAwMDYyMjMzMTAwMDAwMDAwMjA2MjI2MUMwMDAwMDAwMzBCQQotOjEwMzAzMDAwMDYyMjhDNjAwMDAwMDAwODAyMjIxMTU0MDAwMDAwMDBFQgotOjEwMzA0MDAwMDYyMjEzNjgwMDAwMDAwNjA2MjIzMzE4MDAwMDAwMDI2MgotOjEwMzA1MDAwMDYyMjYyODAwMDAwMDAzMDA2MjI4QzgwMDAwMDAwMDhGQQotOjEwMzA2MDAwMDIyMjExNTgwMDAwMDAwMDA2MjIxMzgwMDAwMDAwMDYxMgotOjEwMzA3MDAwMDYyMjMzMjAwMDAwMDAwMjA2MjI2MzQwMDAwMDAwMzBEOAotOjEwMzA4MDAwMDYyMjhDQTAwMDAwMDAwODAyMjIxMTVDMDAwMDAwMDA1MwotOjEwMzA5MDAwMDYyMjEzOTgwMDAwMDAwNjA2MjIzMzI4MDAwMDAwMDJEMgotOjEwMzBBMDAwMDYyMjY0MDAwMDAwMDAzMDA2MjI4Q0MwMDAwMDAwMDhFOAotOjEwMzBCMDAwMDIyMjExNjAwMDAwMDAwMDA2MjIxM0IwMDAwMDAwMDY4QQotOjEwMzBDMDAwMDYyMjMzMzAwMDAwMDAwMjA2MjI2NEMwMDAwMDAwMzBGNwotOjEwMzBEMDAwMDYyMjhDRTAwMDAwMDAwODAyMjIxMTY0MDAwMDAwMDBCQgotOjEwMzBFMDAwMDYyMjEzQzgwMDAwMDAwNjA2MjIzMzM4MDAwMDAwMDI0MgotOjEwMzBGMDAwMDYyMjY1ODAwMDAwMDAzMDAyMTYxMDAwMDAwMDAwMjg0MwotOjEwMzEwMDAwMDIxNzAwMDgwMDAwMDAwMjAyMTcwMDJDMDAwMDAwMDM1NAotOjEwMzExMDAwMDIxNzAwM0MwMDAwMDAwNDAyMTcwMDQ4MDAwMDAwMDJGMwotOjEwMzEyMDAwMDIxNzAwNEMwMDAwMDA5MDAyMTcwMDUwMDAwMDAwOTBCMQotOjEwMzEzMDAwMDIxNzAwNTQwMDgwMDA5MDAyMTcwMDU4MDgxMDAwMDA4OQotOjEwMzE0MDAwMDIxNzAwNjAwMDAwMDA4QTAyMTcwMDY0MDAwMDAwODA3RgotOjEwMzE1MDAwMDIxNzAwNjgwMDAwMDA4MTAyMTcwMDZDMDAwMDAwODA2OAotOjEwMzE2MDAwMDIxNzAwNzAwMDAwMDAwNjAyMTcwMDc4MDAwMDA3RDA2OAotOjEwMzE3MDAwMDIxNzAwN0MwMDAwMDc2QzAyMTcwMDM4MDA3QzEwMDQ2NgotOjEwMzE4MDAwMDIxNzAwMDQwMDAwMDAwRjA2MTY0MDI0MDAwMDAwMDI5MQotOjEwMzE5MDAwMDIxNjQwNzAwMDAwMDAxQzAyMTY0MjA4MDAwMDAwMDFFOAotOjEwMzFBMDAwMDIxNjQyMTAwMDAwMDAwMTAyMTY0MjIwMDAwMDAwMDEzOQotOjEwMzFCMDAwMDIxNjQyMjgwMDAwMDAwMTAyMTY0MjMwMDAwMDAwMDEwMQotOjEwMzFDMDAwMDIxNjQyMzgwMDAwMDAwMTAyMTY0MjYwMDAwMDAwMDJCMAotOjEwMzFEMDAwMEMxNjQwMUMwMDAzRDA5MDBBMTY0MDFDMDAwMDAwOUNGNgotOjEwMzFFMDAwMEIxNjQwMUMwMDAwMDlDNDAyMTY0MDMwMDAwMDAwMDgwNQotOjEwMzFGMDAwMDIxNjQwMzQwMDAwMDAwQzAyMTY0MDM4MDAwMDAwMTA5NwotOjEwMzIwMDAwMDIxNjQwNDQwMDAwMDAyMDAyMTY0MDAwMDAwMDAwMDFBOQotOjEwMzIxMDAwMDIxNjQwRDgwMDAwMDAwMTAyMTY0MDA4MDAwMDAwMDExQwotOjEwMzIyMDAwMDIxNjQwMEMwMDAwMDAwMTAyMTY0MDEwMDAwMDAwMDFEMAotOjEwMzIzMDAwMDIxNjQyNDAwMDAwMDAwMDAyMTY0MjQ4MDAwMDAwMDA1MgotOjEwMzI0MDAwMDYxNjQyNzAwMDAwMDAwMjAyMTY0MjUwMDAwMDAwMDAwNAotOjEwMzI1MDAwMDIxNjQyNTgwMDAwMDAwMDA2MTY0MjgwMDAwMDAwMDJEQwotOjEwMzI2MDAwMDIxNjYwMDgwMDAwMTIyNDAyMTY2MDBDMDAwMDEyMTAwMgotOjEwMzI3MDAwMDIxNjYwMTAwMDAwMTIxNDAyMTY2MDFDMDAwMEZGRkYwRQotOjEwMzI4MDAwMDIxNjYwMjAwMDAwRkZGRjAyMTY2MDI0MDAwMEZGRkYwRQotOjEwMzI5MDAwMDIxNjYwMjgwMDAwRkZGRjAyMTY2MDM4MDAwMDAwMjBDMAotOjEwMzJBMDAwMDIxNjYwM0MwMDAwMDAyMDA2MTY2MDQwMDAwMDAwMDI4QwotOjEwMzJCMDAwMDIxNjYwNDgwMDAwMDAyMzAyMTY2MDRDMDAwMDAwMjQ0MwotOjEwMzJDMDAwMDIxNjYwNTAwMDAwMDAyNTAyMTY2MDU0MDAwMDAwMjYxRgotOjEwMzJEMDAwMDIxNjYwNTgwMDAwMDAyNzAyMTY2MDVDMDAwMDAwMjlGQQotOjEwMzJFMDAwMDIxNjYwNjAwMDAwMDAyQTAyMTY2MDY0MDAwMDAwMkJENQotOjEwMzJGMDAwMDIxNjYwNjgwMDAwMDAyQzAyMTY2MDZDMDAwMDAwMkRCMQotOjEwMzMwMDAwMDIxNjYwNzAwMDAwMDBFQzAyMTY2MDc0MDAwMDAwMTFFQwotOjEwMzMxMDAwMDIxNjYwNzgwMDAwMDAxMjA2MTY2MDdDMDAwMDAwMEZBNAotOjEwMzMyMDAwMDIxNjYwQjgwMDAwMDAwMTAyMTY2MEJDMDAwMDAwMDEzNwotOjEwMzMzMDAwMDYxNjYwQzAwMDAwMDAwQzAyMTY2MEYwMDAwMDAwMDFEQwotOjEwMzM0MDAwMDYxNjYwRjQwMDAwMDAzMTAyMTY2MUI4MDAwMDAwMDFBQQotOjEwMzM1MDAwMDYxNjYxQkMwMDAwMDAwRDAyMTY2MUYwMDAwMDAwMDFCRAotOjEwMzM2MDAwMDYxNjYxRjQwMDAwMDAxMTAyMTY2MjM4MDdGRkZGRkYyNQotOjEwMzM3MDAwMDIxNjYyM0MwMDAwMDAzRjAyMTY2MjQwMDdGRkZGRkY5QQotOjEwMzM4MDAwMDIxNjYyNDQwMDAwMDAwRjAxMTY2MjQ4MDAwMDAwMDBBRgotOjEwMzM5MDAwMDExNjYyNEMwMDAwMDAwMDAxMTY2MjUwMDAwMDAwMDA5RgotOjEwMzNBMDAwMDExNjYyNTQwMDAwMDAwMDAxMTY2MjU4MDAwMDAwMDA3RgotOjEwMzNCMDAwMDExNjYyNUMwMDAwMDAwMDAxMTY2MjYwMDAwMDAwMDA1RgotOjEwMzNDMDAwMDExNjYyNjQwMDAwMDAwMDAxMTY2MjY4MDAwMDAwMDAzRgotOjEwMzNEMDAwMDExNjYyNkMwMDAwMDAwMDAxMTY2MjcwMDAwMDAwMDAxRgotOjEwMzNFMDAwMDExNjYyNzQwMDAwMDAwMDAxMTY2Mjc4MDAwMDAwMDBGRgotOjEwMzNGMDAwMDExNjYyN0MwMDAwMDAwMDBDMTY2MDAwMDAwMDAzRTg2QgotOjEwMzQwMDAwMEExNjYwMDAwMDAwMDAwMTBCMTY2MDAwMDAwMDAwMEFCMAotOjEwMzQxMDAwMDIxNjgwNDAwMDAwMDAwNjAyMTY4MDQ0MDAwMDAwMDVFRAotOjEwMzQyMDAwMDIxNjgwNDgwMDAwMDAwQTAyMTY4MDRDMDAwMDAwMDVDOQotOjEwMzQzMDAwMDIxNjgwNTQwMDAwMDAwMjAyMTY4MENDMDAwMDAwMDQzNgotOjEwMzQ0MDAwMDIxNjgwRDAwMDAwMDAwNDAyMTY4MEQ0MDAwMDAwMDRBMAotOjEwMzQ1MDAwMDIxNjgwRDgwMDAwMDAwNDAyMTY4MERDMDAwMDAwMDQ4MAotOjEwMzQ2MDAwMDIxNjgwRTAwMDAwMDAwNDAyMTY4MEU0MDAwMDAwMDQ2MAotOjEwMzQ3MDAwMDIxNjgwRTgwMDAwMDAwNDAyMTY4ODA0MDAwMDAwMDQyMAotOjEwMzQ4MDAwMDIxNjgwMzAwMDAwMDA3QzAyMTY4MDM0MDAwMDAwM0RFRgotOjEwMzQ5MDAwMDIxNjgwMzgwMDAwMDAzRjAyMTY4MDNDMDAwMDAwOUNBRAotOjEwMzRBMDAwMDIxNjgwRjAwMDAwMDAwNzA2MTY4MEY0MDAwMDAwMDVGOAotOjEwMzRCMDAwMDIxNjg4MEMwMTAxMDEwMTAyMTY4MTA4MDAwMDAwMDBCQgotOjEwMzRDMDAwMDIxNjgxMEMwMDAwMDAwNDAyMTY4MTEwMDAwMDAwMDRBNgotOjEwMzREMDAwMDIxNjgxMTQwMDAwMDAwMjAyMTY4ODEwMDgwMTIwMDQ2MAotOjEwMzRFMDAwMDIxNjgxMTgwMDAwMDAwNTAyMTY4MTFDMDAwMDAwMDU2QwotOjEwMzRGMDAwMDIxNjgxMjAwMDAwMDAwNTAyMTY4MTI0MDAwMDAwMDU0QwotOjEwMzUwMDAwMDIxNjg4MkMyMDA4MTAwMTAyMTY4MTI4MDAwMDAwMDhFRAotOjEwMzUxMDAwMDIxNjgxMkMwMDAwMDAwNjAyMTY4MTMwMDAwMDAwMDcxMAotOjEwMzUyMDAwMDIxNjgxMzQwMDAwMDAwMDAyMTY4ODMwMDEwMTAxMjBEQgotOjEwMzUzMDAwMDYxNjgxMzgwMDAwMDAwNDAyMTY4ODM0MDEwMTAxMDFEQQotOjEwMzU0MDAwMDIxNjgxNDgwMDAwMDAwMDAyMTY4MTRDMDAwMDAwMDRCMQotOjEwMzU1MDAwMDIxNjgxNTAwMDAwMDAwNDAyMTY4MTU0MDAwMDAwMDI4RgotOjEwMzU2MDAwMDIxNjg4MzgwODAxMjAwNDAyMTY4MTU4MDAwMDAwMDU2MAotOjEwMzU3MDAwMDIxNjgxNUMwMDAwMDAwNTAyMTY4MTYwMDAwMDAwMDU1MwotOjEwMzU4MDAwMDIxNjgxNjQwMDAwMDAwNTAyMTY4ODNDMjAwODEwMDEyNAotOjEwMzU5MDAwMDIxNjgxNjgwMDAwMDAwODAyMTY4MTZDMDAwMDAwMDYxNwotOjEwMzVBMDAwMDIxNjgxNzAwMDAwMDAwNzAyMTY4MTc0MDAwMDAwMDFGRAotOjEwMzVCMDAwMDIxNjg4NDAwMTAxMDEyMDAyMTY4MTc4MDAwMDAwMDFGNgotOjEwMzVDMDAwMDIxNjgxN0MwMDAwMDAwMTAyMTY4MTgwMDAwMDAwMDFDQgotOjEwMzVEMDAwMDIxNjgxODQwMDAwMDAwMTAyMTY4ODQ0MDEwMTAxMDFFNQotOjEwMzVFMDAwMDIxNjgxODgwMDAwMDAwMTAyMTY4MThDMDAwMDAwMDQ5MAotOjEwMzVGMDAwMDIxNjgxOTAwMDAwMDAwNDAyMTY4MTk0MDAwMDAwMDI2RgotOjEwMzYwMDAwMDIxNjg4NDgwODAxMjAwNDAyMTY4MTk4MDAwMDAwMDU2RgotOjEwMzYxMDAwMDIxNjgxOUMwMDAwMDAwNTAyMTY4MUEwMDAwMDAwMDUzMgotOjEwMzYyMDAwMDIxNjgxQTQwMDAwMDAwNTAyMTY4ODE0MjAwODEwMDE2QgotOjEwMzYzMDAwMDIxNjgxQTgwMDAwMDAwODAyMTY4MUFDMDAwMDAwMDZGNgotOjEwMzY0MDAwMDIxNjgxQjAwMDAwMDAwNzAyMTY4MUI0MDAwMDAwMDFEQwotOjEwMzY1MDAwMDIxNjg4MTgwMTAxMDEyMDAyMTY4MUI4MDAwMDAwMDEzRAotOjEwMzY2MDAwMDIxNjgxQkMwMDAwMDAwMTAyMTY4MUMwMDAwMDAwMDFBQQotOjEwMzY3MDAwMDIxNjgxQzQwMDAwMDAwMTAyMTY4ODFDMDEwMTAxMDEyQwotOjEwMzY4MDAwMDIxNjgxQzgwMDAwMDAwMTAyMTY4MUNDMDAwMDAwMDQ2RgotOjEwMzY5MDAwMDIxNjgxRDAwMDAwMDAwNDAyMTY4MUQ0MDAwMDAwMDI0RQotOjEwMzZBMDAwMDIxNjg4MjAwODAxMjAwNDAyMTY4MUQ4MDAwMDAwMDVCNwotOjEwMzZCMDAwMDIxNjgxREMwMDAwMDAwNTAyMTY4MUUwMDAwMDAwMDUxMgotOjEwMzZDMDAwMDIxNjgxRTQwMDAwMDAwNTAyMTY4ODI0MjAwODEwMDE3QgotOjEwMzZEMDAwMDIxNjgxRTgwMDAwMDAwODAyMTY4MUVDMDAwMDAwMDZENgotOjEwMzZFMDAwMDIxNjgxRjAwMDAwMDAwNzAyMTZFNDBDMDAwMDAwMDA0MgotOjEwMzZGMDAwMDIxNjg4MjgwMTAxMDEyMDA2MTZFNDEwMDAwMDAwMDRDQgotOjEwMzcwMDAwMDIxNkUwMDAwMTAxMDEwMTAyMTZFNDIwMDAwMDAwMDBBMQotOjEwMzcxMDAwMDIxNkU0MjQwMDAwMDAwNDAyMTZFNDI4MDAwMDAwMDQ1RAotOjEwMzcyMDAwMDIxNkU0MkMwMDAwMDAwMjAyMTZFMDA0MDgwMTIwMDQ0NgotOjEwMzczMDAwMDIxNkU0MzAwMDAwMDAwNTAyMTZFNDM0MDAwMDAwMDUyMwotOjEwMzc0MDAwMDIxNkU0MzgwMDAwMDAwNTAyMTZFNDNDMDAwMDAwMDUwMwotOjEwMzc1MDAwMDIxNkUwMDgyMDA4MTAwMTAyMTZFNDQwMDAwMDAwMDhFQwotOjEwMzc2MDAwMDIxNkU0NDQwMDAwMDAwNjAyMTZFNDQ4MDAwMDAwMDdDOAotOjEwMzc3MDAwMDIxNkU0NEMwMDAwMDAwMDAyMTZFMDBDMDEwMTAxMjBEQQotOjEwMzc4MDAwMDYxNkU0NTAwMDAwMDAwNDAyMTZFMDEwMDEwMTAxMDFEOQotOjEwMzc5MDAwMDIxNkU0NjAwMDAwMDAwMDAyMTZFNDY0MDAwMDAwMDQ2OQotOjEwMzdBMDAwMDIxNkU0NjgwMDAwMDAwNDAyMTZFNDZDMDAwMDAwMDI0NwotOjEwMzdCMDAwMDIxNkUwMTQwODAxMjAwNDAyMTZFNDcwMDAwMDAwMDU1RgotOjEwMzdDMDAwMDIxNkU0NzQwMDAwMDAwNTAyMTZFNDc4MDAwMDAwMDUwQgotOjEwMzdEMDAwMDIxNkU0N0MwMDAwMDAwNTAyMTZFMDE4MjAwODEwMDEyMwotOjEwMzdFMDAwMDIxNkU0ODAwMDAwMDAwODAyMTZFNDg0MDAwMDAwMDZDRgotOjEwMzdGMDAwMDIxNkU0ODgwMDAwMDAwNzAyMTZFNDhDMDAwMDAwMDFCNQotOjEwMzgwMDAwMDIxNkUwMUMwMTAxMDEyMDAyMTZFNDkwMDAwMDAwMDFGNAotOjEwMzgxMDAwMDIxNkU0OTQwMDAwMDAwMTAyMTZFNDk4MDAwMDAwMDE4MgotOjEwMzgyMDAwMDIxNkU0OUMwMDAwMDAwMTAyMTZFMDIwMDEwMTAxMDFFMwotOjEwMzgzMDAwMDIxNkU0QTAwMDAwMDAwMTAyMTZFNEE0MDAwMDAwMDQ0NwotOjEwMzg0MDAwMDIxNkU0QTgwMDAwMDAwNDAyMTZFNEFDMDAwMDAwMDIyNgotOjEwMzg1MDAwMDIxNkUwMjQwODAxMjAwNDAyMTZFNEIwMDAwMDAwMDU2RQotOjEwMzg2MDAwMDIxNkU0QjQwMDAwMDAwNTAyMTZFNEI4MDAwMDAwMDVFQQotOjEwMzg3MDAwMDIxNkU0QkMwMDAwMDAwNTAyMTZFMDI4MjAwODEwMDEzMgotOjEwMzg4MDAwMDIxNkU0QzAwMDAwMDAwODAyMTZFNEM0MDAwMDAwMDZBRQotOjEwMzg5MDAwMDIxNkU0QzgwMDAwMDAwNzAyMTZFNENDMDAwMDAwMDE5NAotOjEwMzhBMDAwMDIxNkUwMkMwMTAxMDEyMDAyMTZFNEQwMDAwMDAwMDEwNAotOjEwMzhCMDAwMDIxNkU0RDQwMDAwMDAwMTAyMTZFNEQ4MDAwMDAwMDE2MgotOjEwMzhDMDAwMDIxNkU0REMwMDAwMDAwMTAyMTZFMDMwMDEwMTAxMDFGMwotOjEwMzhEMDAwMDIxNkU0RTAwMDAwMDAwMTAyMTZFNEU0MDAwMDAwMDQyNwotOjEwMzhFMDAwMDIxNkU0RTgwMDAwMDAwNDAyMTZFNEVDMDAwMDAwMDIwNgotOjEwMzhGMDAwMDIxNkUwMzQwODAxMjAwNDAyMTZFNEYwMDAwMDAwMDU3RQotOjEwMzkwMDAwMDIxNkU0RjQwMDAwMDAwNTAyMTZFNEY4MDAwMDAwMDVDOQotOjEwMzkxMDAwMDIxNkU0RkMwMDAwMDAwNTAyMTZFMDM4MjAwODEwMDE0MQotOjEwMzkyMDAwMDIxNkU1MDAwMDAwMDAwODAyMTZFNTA0MDAwMDAwMDY4QgotOjEwMzkzMDAwMDIxNkU1MDgwMDAwMDAwNzAyMTZFMDNDMDEwMTAxMjAyNAotOjEwMzk0MDAwMDIxNjgyNDAwMDNGMDAzRjAyMTY4MjQ0MDAwMDAwMDA0MQotOjEwMzk1MDAwMDIxNkU1MjQwMDNGMDAzRjAyMTZFNTI4MDAwMDAwMDBBMwotOjEwMzk2MDAwMDIxNjgyNDgwMDAwMDAwMDAyMTY4MjRDMDAzRjAwM0YxMQotOjEwMzk3MDAwMDIxNkU1MkMwMDAwMDAwMDAyMTZFNTMwMDAzRjAwM0Y3MwotOjEwMzk4MDAwMDIxNjgyNTAwMTAwMDEwMDAyMTY4MjU0MDEwMDAxMDA1QgotOjEwMzk5MDAwMDIxNkU1MzQwMTAwMDEwMDAyMTZFNTM4MDEwMDAxMDBCRAotOjEwMzlBMDAwMDYxNjgyNTgwMDAwMDAwMjAyMTZFNTNDMDAwMDAwMDBFNgotOjEwMzlCMDAwMDIxNkU1NDAwMDAwMDAwMDAyMTY4MjYwMDBDMDAwQzA1MAotOjEwMzlDMDAwMDIxNjgyNjQwMEMwMDBDMDAyMTZFNTQ0MDBDMDAwQzBCOAotOjEwMzlEMDAwMDIxNkU1NDgwMEMwMDBDMDAyMTY4MjY4MUUwMDFFMDBFNAotOjEwMzlFMDAwMDIxNjgyNkMxRTAwMUUwMDAyMTZFNTRDMUUwMDFFMDAxMAotOjEwMzlGMDAwMDIxNkU1NTAxRTAwMUUwMDAyMTY4MjcwNDAwMDQwMDBCNAotOjEwM0EwMDAwMDIxNjgyNzQ0MDAwNDAwMDAyMTZFNTU0NDAwMDQwMDA1NwotOjEwM0ExMDAwMDIxNkU1NTg0MDAwNDAwMDAyMTY4Mjc4ODAwMDgwMDBCRgotOjEwM0EyMDAwMDIxNjgyN0M4MDAwODAwMDAyMTZFNTVDODAwMDgwMDAyNwotOjEwM0EzMDAwMDIxNkU1NjA4MDAwODAwMDAyMTY4MjgwMjAwMDIwMDBDRgotOjEwM0E0MDAwMDIxNjgyODQyMDAwMjAwMDAyMTZFNTY0MjAwMDIwMDA3NwotOjEwM0E1MDAwMDIxNkU1NjgyMDAwMjAwMDA2MTY4Mjg4MDAwMDAwMDI5OQotOjEwM0E2MDAwMDIxNkU1NkMwMDAwMDAwMDAyMTZFNTcwMDAwMDAwMDA4MAotOjEwM0E3MDAwMDIxNjgyOTAwMDAwMDAwMDAyMTY4Mjk0MDAwMDAwMDBFRQotOjEwM0E4MDAwMDIxNkU1NzQwMDAwMDAwMDAyMTZFNTc4MDAwMDAwMDA1MAotOjEwM0E5MDAwMDIxNjgyOTgwMDAwMDAwMDAyMTY4MjlDMDAwMDAwMDBCRQotOjEwM0FBMDAwMDIxNkU1N0MwMDAwMDAwMDAyMTZFNTgwMDAwMDAwMDAyMAotOjEwM0FCMDAwMDIxNjgyQTAwMDAwMDAwMDAyMTY4MkE0MDAwMDAwMDE4RAotOjEwM0FDMDAwMDYxNjgyQTgwMDAwMDAwQTAyMTY4MUY0MDAwMDBDMDgwNQotOjEwM0FEMDAwMDIxNjgxRjgwMDAwMDA0MDAyMTY4MUZDMDAwMDAxMDA3RgotOjEwM0FFMDAwMDIxNjgyMDAwMDAwMDAyMDAyMTY4MjA0MDAwMDAwMTc2NwotOjEwM0FGMDAwMDIxNjgyMDgwMDAwMDA4MDAyMTY4MjBDMDAwMDAyMDBGQwotOjEwM0IwMDAwMDIxNjgyMTAwMDAwMDAwMDAyMTY4MjE4MDFGRjAxRkY1OQotOjEwM0IxMDAwMDIxNjgyMTQwMUZGMDFGRjAyMTZFNTEwMDFGRjAxRkZFQQotOjEwM0IyMDAwMDIxNkU1MEMwMUZGMDFGRjAyMTY4MjNDMDAwMDAwMTNBMwotOjEwM0IzMDAwMDIxNjgwOTAwMDAwMDEzRjAyMTY4MDYwMDAwMDAxNDBFNAotOjEwM0I0MDAwMDIxNjgwNjQwMDAwMDE0MDA2MTY4MDY4MDAwMDAwMDIzMgotOjEwM0I1MDAwMDIxNjgwNzAwMDAwMDBDMDA2MTY4MDc0MDAwMDAwMDc4NgotOjEwM0I2MDAwMDIxNjgwOUMwMDAwMDA0ODAyMTY4MEEwMDAwMDAwNDg1OQotOjEwM0I3MDAwMDYxNjgwQTQwMDAwMDAwMjAyMTY4MEFDMDAwMDAwNDg3NwotOjEwM0I4MDAwMDYxNjgwQjAwMDAwMDAwNzAyMTY4MjM4MDAwMDgwMDA5MAotOjEwM0I5MDAwMDIxNjgyMzQwMDAwMjVFNDAyMTY4MDk0MDAwMDdGRkZBNAotOjEwM0JBMDAwMDIxNjgyMjAwMDBGMDAwRjAyMTY4MjFDMDAwRjAwMEY2OQotOjEwM0JCMDAwMDIxNkU1MTgwMDBGMDAwRjAyMTZFNTE0MDAwRjAwMEZBMwotOjEwM0JDMDAwMDIxNjgyMjgwMDAwMDAwMDAyMTY4MjI0RkZGRkZGRkY3OQotOjEwM0JEMDAwMDIxNkU1MjAwMDAwMDAwMDAyMTZFNTFDRkZGRkZGRkZCMwotOjEwM0JFMDAwMDIxNkU2QkMwMDAwMDAwMDAyMTZFNkMwMDAwMDAwMDI1QgotOjEwM0JGMDAwMDIxNkU2QzQwMDAwMDAwMTAyMTZFNkM4MDAwMDAwMDMzOQotOjEwM0MwMDAwMDIxNkU2Q0MwMDAwMDAwNDAyMTZFNkQwMDAwMDAwMDYxMgotOjEwM0MxMDAwMDIxNkU2RDQwMDAwMDAwNTAyMTZFNkQ4MDAwMDAwMDdGMAotOjEwM0MyMDAwMDIxNjgwRUMwMDAwMDBGRjAyMTQwMDAwMDAwMDAwMDFGQQotOjEwM0MzMDAwMDIxNDAwMEMwMDAwMDAwMTAyMTQwMDQwMDAwMDAwMDEwQQotOjEwM0M0MDAwMDIxNDAwNDQwMDAwN0ZGRjAyMTQwMDBDMDAwMDAwMDA3QQotOjEwM0M1MDAwMDIxNDAwMDAwMDAwMDAwMDAyMTQwMDZDMDAwMDAwMDBDQwotOjEwM0M2MDAwMDIxNDAwMDQwMDAwMDAwMTAyMTQwMDMwMDAwMDAwMDFGMgotOjEwM0M3MDAwMDIxNDAwMDQwMDAwMDAwMDAyMTQwMDVDMDAwMDAwMDBCOAotOjEwM0M4MDAwMDIxNDAwMDgwMDAwMDAwMTAyMTQwMDM0MDAwMDAwMDFDQQotOjEwM0M5MDAwMDIxNDAwMDgwMDAwMDAwMDAyMTQwMDYwMDAwMDAwMDA5MAotOjEwM0NBMDAwMDYwMjgwMDAwMDAwMjAwMDAyMDIwMDU4MDAwMDAwMzJERQotOjEwM0NCMDAwMDIwMjAwQTAwMzE1MDAyMDAyMDIwMEE0MDMxNTAwMjA0OAotOjEwM0NDMDAwMDIwMjAwQTgwMTAwMDAzMDAyMDIwMEFDMDgxMDAwMDA0RgotOjEwM0NEMDAwMDIwMjAwQjAwMDAwMDAzMzAyMDIwMEI0MDAwMDAwMzAxNQotOjEwM0NFMDAwMDIwMjAwQjgwMDAwMDAzMTAyMDIwMEJDMDAwMDAwMDMyNAotOjEwM0NGMDAwMDIwMjAwQzAwMDAwMDAwNjAyMDIwMEM0MDAwMDAwMDMyRgotOjEwM0QwMDAwMDIwMjAwQzgwMDAwMDAwMzAyMDIwMENDMDAwMDAwMDIxMgotOjEwM0QxMDAwMDIwMjAwRDAwMDAwMDAwMDAyMDIwMEQ0MDAwMDAwMDJGNQotOjEwM0QyMDAwMDIwMjAwREMwMDAwMDAwMDAyMDIwMEUwMDAwMDAwMDZDOQotOjEwM0QzMDAwMDIwMjAwRTQwMDAwMDAwNDAyMDIwMEU4MDAwMDAwMDJBOQotOjEwM0Q0MDAwMDIwMjAwRUMwMDAwMDAwMjAyMDIwMEYwMDAwMDAwMDE4QwotOjEwM0Q1MDAwMDIwMjAwRkMwMDAwMDAwNjAyMDIwMTIwMDAwMDAwMDAzOAotOjEwM0Q2MDAwMDIwMjAxMzQwMDAwMDAwMjAyMDIwMUIwMDAwMDAwMDE2MgotOjEwM0Q3MDAwMDIwMjAyMEMwMDAwMDAwMTAyMDIwMjE0MDAwMDAwMDExNQotOjEwM0Q4MDAwMDIwMjAyMTgwMDAwMDAwMjAyMDIwNDA0MDAwMDAwMDEwNgotOjEwM0Q5MDAwMDIwMjA0MEMwMDAwMDA0MDAyMDIwNDEwMDAwMDAwNDA3NwotOjEwM0RBMDAwMDIwMjA0MUMwMDAwMDAwNDAyMDIwNDIwMDAwMDAwMjBBMwotOjEwM0RCMDAwMDIwMjA0MjQwMDAwMDAwMjAyMDIwNDI4MDAwMDAwMjA4NQotOjEwM0RDMDAwMDYwMjA1MDAwMDAwMDAxMjA0MDIwNDgwMDAyMDA0QUE3QwotOjEwM0REMDAwMDIwMjAwNjAwMDAwMDAwRjAyMDIwMDY0MDAwMDAwMDcwMQotOjEwM0RFMDAwMDIwMjAwNjgwMDAwMDAwMDAyMDIwMDZDMDAwMDAwMEVFOQotOjEwM0RGMDAwMDIwMjAwNzAwMDAwMDAwRTA2MDIwMDc0MDAwMDAwMDNDMgotOjEwM0UwMDAwMDIwMjAwRjQwMDAwMDAwNDAyMDIwMDA0MDAwMDAwMDFBRAotOjEwM0UxMDAwMDIwMjAwMDgwMDAwMDAwMTAyMDIwMDBDMDAwMDAwMDE4NAotOjEwM0UyMDAwMDIwMjAwMTAwMDAwMDAwMTAyMDIwMDE0MDAwMDAwMDE2NAotOjEwM0UzMDAwMDIwMjAwMTgwMDAwMDAwMTAyMDIwMDFDMDAwMDAwMDE0NAotOjEwM0U0MDAwMDIwMjAwMjAwMDAwMDAwMTAyMDIwMDI0MDAwMDAwMDEyNAotOjEwM0U1MDAwMDIwMjAwMjgwMDAwMDAwMTAyMDIwMDJDMDAwMDAwMDEwNAotOjEwM0U2MDAwMDIwMjAwMzAwMDAwMDAwMTAyMDIwMDM0MDAwMDAwMDFFNAotOjEwM0U3MDAwMDIwMjAwMzgwMDAwMDAwMTAyMDIwMDNDMDAwMDAwMDFDNAotOjEwM0U4MDAwMDIwMjAwNDAwMDAwMDAwMTAyMDIwMDQ0MDAwMDAwMDFBNAotOjEwM0U5MDAwMDIwMjAwNDgwMDAwMDAwMTAyMDIwMDRDMDAwMDAwMDE4NAotOjEwM0VBMDAwMDIwMjAwNTAwMDAwMDAwMTAyMDIwMTA4MDAwMDAwQzhFOAotOjEwM0VCMDAwMDIwMjAxMTgwMDAwMDAwMjAyMDIwMUM0MDAwMDAwMDAxQQotOjEwM0VDMDAwMDIwMjAxQ0MwMDAwMDAwMDAyMDIwMUQ0MDAwMDAwMDI0NgotOjEwM0VEMDAwMDIwMjAxREMwMDAwMDAwMjAyMDIwMUU0MDAwMDAwRkYxNwotOjEwM0VFMDAwMDIwMjAxRUMwMDAwMDBGRjAyMDIwMTAwMDAwMDAwMDBERAotOjEwM0VGMDAwMDIwMjAxMEMwMDAwMDBDODAyMDIwMTFDMDAwMDAwMDJDNgotOjEwM0YwMDAwMDIwMjAxQzgwMDAwMDAwMDAyMDIwMUQwMDAwMDAwMDAwRgotOjEwM0YxMDAwMDIwMjAxRDgwMDAwMDAwMjAyMDIwMUUwMDAwMDAwMDJEQgotOjEwM0YyMDAwMDIwMjAxRTgwMDAwMDBGRjAyMDIwMUYwMDAwMDAwRkZCMQotOjEwM0YzMDAwMDIwMjAxMDQwMDAwMDAwMDAyMDIwMTA4MDAwMDAwQzhBMwotOjEwM0Y0MDAwMDIwMjAxMTgwMDAwMDAwMjAyMDIwMUM0MDAwMDAwMDA4OQotOjEwM0Y1MDAwMDIwMjAxQ0MwMDAwMDAwMDAyMDIwMUQ0MDAwMDAwMDJCNQotOjEwM0Y2MDAwMDIwMjAxREMwMDAwMDAwMjAyMDIwMUU0MDAwMDAwRkY4NgotOjEwM0Y3MDAwMDIwMjAxRUMwMDAwMDBGRjAyMDIwMTAwMDAwMDAwMDA0QwotOjEwM0Y4MDAwMDIwMjAxMEMwMDAwMDBDODAyMDIwMTFDMDAwMDAwMDIzNQotOjEwM0Y5MDAwMDIwMjAxQzgwMDAwMDAwMDAyMDIwMUQwMDAwMDAwMDA3RgotOjEwM0ZBMDAwMDIwMjAxRDgwMDAwMDAwMjAyMDIwMUUwMDAwMDAwMDI0QgotOjEwM0ZCMDAwMDIwMjAxRTgwMDAwMDBGRjAyMDIwMUYwMDAwMDAwRkYyMQotOjEwM0ZDMDAwMDIwMjAxMDQwMDAwMDAwMDAyMDIwMTA4MDAwMDAwQzgxMwotOjEwM0ZEMDAwMDIwMjAxMTgwMDAwMDAwMjAyMDIwMUM0MDAwMDAwMDBGOQotOjEwM0ZFMDAwMDIwMjAxQ0MwMDAwMDAwMDAyMDIwMUQ0MDAwMDAwMDIyNQotOjEwM0ZGMDAwMDIwMjAxREMwMDAwMDAwMjAyMDIwMUU0MDAwMDAwRkZGNgotOjEwNDAwMDAwMDIwMjAxRUMwMDAwMDBGRjAyMDIwMTAwMDAwMDAwMDBCQgotOjEwNDAxMDAwMDIwMjAxMEMwMDAwMDBDODAyMDIwMTFDMDAwMDAwMDJBNAotOjEwNDAyMDAwMDIwMjAxQzgwMDAwMDAwMDAyMDIwMUQwMDAwMDAwMDBFRQotOjEwNDAzMDAwMDIwMjAxRDgwMDAwMDAwMjAyMDIwMUUwMDAwMDAwMDJCQQotOjEwNDA0MDAwMDIwMjAxRTgwMDAwMDBGRjAyMDIwMUYwMDAwMDAwRkY5MAotOjEwNDA1MDAwMDIwMjAxMDQwMDAwMDAwMDAyMDIwMTA4MDAwMDAwQzg4MgotOjEwNDA2MDAwMDIwMjAxMTgwMDAwMDAwMjAyMDIwMUM0MDAwMDAwMDA2OAotOjEwNDA3MDAwMDIwMjAxQ0MwMDAwMDAwMDAyMDIwMUQ0MDAwMDAwMDI5NAotOjEwNDA4MDAwMDIwMjAxREMwMDAwMDAwMjAyMDIwMUU0MDAwMDAwRkY2NQotOjEwNDA5MDAwMDIwMjAxRUMwMDAwMDBGRjAyMDIwMTAwMDAwMDAwMDAyQgotOjEwNDBBMDAwMDIwMjAxMEMwMDAwMDBDODAyMDIwMTFDMDAwMDAwMDIxNAotOjEwNDBCMDAwMDIwMjAxQzgwMDAwMDAwMDAyMDIwMUQwMDAwMDAwMDA1RQotOjEwNDBDMDAwMDIwMjAxRDgwMDAwMDAwMjAyMDIwMUUwMDAwMDAwMDIyQQotOjEwNDBEMDAwMDIwMjAxRTgwMDAwMDBGRjAyMDIwMUYwMDAwMDAwRkYwMAotOjEwNDBFMDAwMDIwMjAxMDQwMDAwMDAwMDA3MjgwNDAwMDBBMDAwMDBGNAotOjEwNDBGMDAwMDgyODA3QjgwMDA5MDRDQTA3MkMwMDAwMzREQTAwMDBCOQotOjEwNDEwMDAwMDcyQzgwMDAzOEY4MEQzNzA3MkQwMDAwMzdCOTFCNzZEMwotOjEwNDExMDAwMDcyRDgwMDAzMTc4Mjk2NTA3MkUwMDAwMUM3QTM1QzRGMAotOjEwNDEyMDAwMDgyRTQ4RTAzNkU0MDRDQzAxMjgwMDAwMDAwMDAwMDAxRQotOjEwNDEzMDAwMDEyODAwMDQwMDAwMDAwMDAxMjgwMDA4MDAwMDAwMDAyMQotOjEwNDE0MDAwMDEyODAwMEMwMDAwMDAwMDAxMjgwMDEwMDAwMDAwMDAwMQotOjEwNDE1MDAwMDEyODAwMTQwMDAwMDAwMDAyMjgwMDIwMDAwMDAwMDFENwotOjEwNDE2MDAwMDIyODAwMjQwMDAwMDAwMjAyMjgwMDI4MDAwMDAwMDNBQQotOjEwNDE3MDAwMDIyODAwMkMwMDAwMDAwMDAyMjgwMDMwMDAwMDAwMDQ4QgotOjEwNDE4MDAwMDIyODAwMzQwMDAwMDAwMTAyMjgwMDM4MDAwMDAwMDA2RQotOjEwNDE5MDAwMDIyODAwM0MwMDAwMDAwMTAyMjgwMDQwMDAwMDAwMDQ0QQotOjEwNDFBMDAwMDIyODAwNDQwMDAwMDAwMDAyMjgwMDQ4MDAwMDAwMDEyRQotOjEwNDFCMDAwMDIyODAwNEMwMDAwMDAwMzAyMjgwMDUwMDAwMDAwMDAwQwotOjEwNDFDMDAwMDIyODAwNTQwMDAwMDAwMTAyMjgwMDU4MDAwMDAwMDRFQQotOjEwNDFEMDAwMDIyODAwNUMwMDAwMDAwMDAyMjgwMDYwMDAwMDAwMDFDRQotOjEwNDFFMDAwMDIyODAwNjQwMDAwMDAwMzAyMjgwMDY4MDAwMDAwMDBBQwotOjEwNDFGMDAwMDIyODAwNkMwMDAwMDAwMTAyMjgwMDcwMDAwMDAwMDQ4QQotOjEwNDIwMDAwMDIyODAwNzQwMDAwMDAwMDAyMjgwMDc4MDAwMDAwMDQ2QQotOjEwNDIxMDAwMDIyODAwN0MwMDAwMDAwMzA2MjgwMDgwMDAwMDAwMDI0NQotOjEwNDIyMDAwMDIyODAwQTQwMDAwM0ZGRjAyMjgwMEE4MDAwMDAzRkZBRQotOjEwNDIzMDAwMDIyODAyMjQwMDAwMDAwMDAyMjgwMjM0MDAwMDAwMDBDRQotOjEwNDI0MDAwMDIyODAyNEMwMDAwMDAwMDAyMjgwMkU0MDAwMEZGRkZFOAotOjEwNDI1MDAwMDYyODIwMDAwMDAwMDgwMDAyMkI4QkMwMDAwMDAwMDE4RgotOjEwNDI2MDAwMDIyQjgwMDAwMDAwMDAwMDAyMkI4MDQwMDAwMDAwMTg5QwotOjEwNDI3MDAwMDIyQjgwODAwMDAwMDAwQzAyMkI4MEMwMDAwMDAwNjYzMgotOjEwNDI4MDAwMEMyQjgzMDAwMDA3QTEyMDBBMkI4MzAwMDAwMDAxMzhCQgotOjEwNDI5MDAwMEIyQjgzMDAwMDAwMTM4ODBBMkI4MzQwMDAwMDAwMDBEMgotOjEwNDJBMDAwMEMyQjgzNDAwMDAwMDFGNDBCMkI4MzQwMDAwMDAwMDUyMQotOjEwNDJCMDAwMDIyQjgzODAwMDA3QTEyMDAyMkI4M0MwMDAwMDAxRjRBMQotOjEwNDJDMDAwMDIyQjE0ODAwMDAwMDAwMTBBMkIxNDgwMDAwMDAwMDA2MwotOjEwNDJEMDAwMDYyQTlBRjgwMDAwMDAwNDA0MkE5QjA4MDAwMjA0Q0U3MwotOjEwNDJFMDAwMDYyQTlCMTAwMDAwMDAwNjA2MkE5MDgwMDAwMDAwNDg2NQotOjEwNDJGMDAwMDYyQTIwMDgwMDAwMDBDODA2MkEyMDAwMDAwMDAwMDI0QwotOjEwNDMwMDAwMDYyQTkxQTgwMDAwMDA4NjA2MkE5MDAwMDAwMDAwMjBERQotOjEwNDMxMDAwMDYyQTkzQzgwMDAwMDAwMzA0MkE5M0Q0MDAwMTA0RDBBNQotOjEwNDMyMDAwMDYyQTlEQTgwMDAwMDAwMjA0MkE5NDk4MDAwNDA0RDFFMwotOjEwNDMzMDAwMDQyQTlENTgwMDAxMDRENTA2MkE5RDVDMDAwMDAwMTE0NgotOjEwNDM0MDAwMDQyQUNCMjAwMDEwMDRENjA0MkEzMDAwMDAwMjA0RTYyMAotOjEwNDM1MDAwMDYyQTMwMDgwMDAwMDEwMDA2MkE0MDQwMDAwMDAwMTAzNAotOjEwNDM2MDAwMDQyQTQwMDAwMDEwMDRFODA0MkE4NDA4MDAwMjA0RjgyQgotOjEwNDM3MDAwMDYyQTlEQTAwMDAwMDAwMjA2MkFCMDAwMDAwMDAwNTA5RQotOjEwNDM4MDAwMDYyQUJCNzAwMDAwMDA3MDA2MkFCMTUwMDAwMDAwMDIyRgotOjEwNDM5MDAwMDYyQUJCNjAwMDAwMDAwNDA2MkFEMDAwMDAwMDA4MDBDNgotOjEwNDNBMDAwMDYyQUMwMDAwMDAwMDE1MDA2MkE5NEE4MDAwMDAwMzIyRQotOjEwNDNCMDAwMDYyQTUwMjAwMDAwMDAwMjA2MkE1MDMwMDAwMDAwMDJBOQotOjEwNDNDMDAwMDYyQTUwMDAwMDAwMDAwMjA2MkE1MDEwMDAwMDAwMDJEOQotOjEwNDNEMDAwMDIyQTUyMDgwMDAwMDAwMTA0MkE5QjI4MDAwMjA0RkE2NQotOjEwNDNFMDAwMDYyQTk2MzgwMDAwMDAyMjA0MkE5NkMwMDAwMTA0RkMyOAotOjEwNDNGMDAwMDYyQTk2QzQwMDAwMDAwMzA2MkE5NzY4MDAwMDAwMjJERgotOjEwNDQwMDAwMDQyQTk3RjAwMDAxMDRGRDA2MkE5N0Y0MDAwMDAwMDMzNwotOjEwNDQxMDAwMDYyQTk4OTgwMDAwMDAyMjA0MkE5OTIwMDAwMTA0RkUzMAotOjEwNDQyMDAwMDYyQTk5MjQwMDAwMDAwMzA2MkE5OUM4MDAwMDAwMjJFOQotOjEwNDQzMDAwMDQyQTlBNTAwMDAxMDRGRjA2MkE5QTU0MDAwMDAwMDMzRgotOjEwNDQ0MDAwMDYyQUIxNDAwMDAwMDAwMjA2MkFDNTQwMDAwMDAxNTBDMwotOjEwNDQ1MDAwMDYyQTk1NzAwMDAwMDAzMjA2MkE1MDI4MDAwMDAwMDI0QgotOjEwNDQ2MDAwMDYyQTUwMzgwMDAwMDAwMjA2MkE1MDA4MDAwMDAwMDIwOAotOjEwNDQ3MDAwMDYyQTUwMTgwMDAwMDAwMjAyMkE1MjBDMDAwMDAwMDExNwotOjEwNDQ4MDAwMDQyQTlCMzAwMDAyMDUwMDA2MkE5NkQwMDAwMDAwMjI3NAotOjEwNDQ5MDAwMDQyQTk3NTgwMDAxMDUwMjA2MkE5NzVDMDAwMDAwMDNEMQotOjEwNDRBMDAwMDYyQTk4MDAwMDAwMDAyMjA0MkE5ODg4MDAwMTA1MDNDQgotOjEwNDRCMDAwMDYyQTk4OEMwMDAwMDAwMzA2MkE5OTMwMDAwMDAwMjI4QQotOjEwNDRDMDAwMDQyQTk5QjgwMDAxMDUwNDA2MkE5OUJDMDAwMDAwMDNEQgotOjEwNDREMDAwMDYyQTlBNjAwMDAwMDAyMjA0MkE5QUU4MDAwMTA1MDVENQotOjEwNDRFMDAwMDYyQTlBRUMwMDAwMDAwMzA2MkFCMTQ4MDAwMDAwMDJFOAotOjEwNDRGMDAwMDIyQUNBODAwMDAwMDAwMDA0MkE5QjM4MDAxMDA1MDYyQQotOjEwNDUwMDAwMDYyQTUwNDgwMDAwMDAwRTAyMkFDQTg0MDAwMDAwMDA1QgotOjEwNDUxMDAwMDQyQTlCNzgwMDEwMDUxNjA2MkE1MDgwMDAwMDAwMEUyMQotOjEwNDUyMDAwMDIyQUNBODgwMDAwMDAwMDA0MkE5QkI4MDAxMDA1MjY1MQotOjEwNDUzMDAwMDYyQTUwQjgwMDAwMDAwRTAyMkFDQThDMDAwMDAwMDBCMwotOjEwNDU0MDAwMDQyQTlCRjgwMDEwMDUzNjA2MkE1MEYwMDAwMDAwMEVFMQotOjEwNDU1MDAwMDIyQUNBOTAwMDAwMDAwMDA0MkE5QzM4MDAxMDA1NDY3OAotOjEwNDU2MDAwMDYyQTUxMjgwMDAwMDAwRTAyMkFDQTk0MDAwMDAwMDAwQQotOjEwNDU3MDAwMDQyQTlDNzgwMDEwMDU1NjA2MkE1MTYwMDAwMDAwMEU5RgotOjEwNDU4MDAwMDIyQUNBOTgwMDAwMDAwMDA0MkE5Q0I4MDAxMDA1NjZBMAotOjEwNDU5MDAwMDYyQTUxOTgwMDAwMDAwRTAyMkFDQTlDMDAwMDAwMDA2MgotOjEwNDVBMDAwMDQyQTlDRjgwMDEwMDU3NjA2MkE1MUQwMDAwMDAwMEU1RgotOjEwNDVCMDAwMDIxMDEwMDgwMDAwMDAwMTAyMTAxMDUwMDAwMDAwMDE1RAotOjEwNDVDMDAwMDIxMDEwMDAwMDAzRDAwMDAyMTAxMDA0MDAwMDAwM0Q5MwotOjEwNDVEMDAwMDkxMDE4MDAwMjAwMDU4NjA5MTAxMTAwMDAxMDA3ODY1NgotOjEwNDVFMDAwMDYxMDExNDAwMDAwMDAwODA5MTAxMTYwMDAxMDA3OTYyNQotOjEwNDVGMDAwMDYxMDExQTAwMDAwMDAxODA2MTAyNDAwMDAwMDAwRTBDMgotOjEwNDYwMDAwMDIxMDIwMUMwMDAwMDAwMDAyMTAyMDIwMDAwMDAwMDEwOQotOjEwNDYxMDAwMDIxMDIwQzAwMDAwMDAwMjAyMTAyMDA0MDAwMDAwMDE2RgotOjEwNDYyMDAwMDIxMDIwMDgwMDAwMDAwMTA5MTAzQzAwMDAwNTA3QTY0OAotOjEwNDYzMDAwMDkxMDM4MDAwMDA1MDdBQjA5MTAzODIwMDAwNTA3QjA0NQotOjEwNDY0MDAwMDYxMDRDMDAwMDAwMDEwMDAyMTA0MDI4MDAwMDAwMTA3RAotOjEwNDY1MDAwMDIxMDQwNDQwMDAwM0ZGRjAyMTA0MDU4MDAyODAwMDBCNAotOjEwNDY2MDAwMDIxMDQwODQwMDg0OTI0QTAyMTA0MDU4MDAwMDAwMDA2QQotOjEwNDY3MDAwMDIxMDgwMDAwMDAwMTA4MDAyMTA4MEFDMDAwMDAwMDBEQQotOjEwNDY4MDAwMDIxMDgwMzgwMDAwMDAxMDAyMTA4MTAwMDAwMDAwMDBCRAotOjEwNDY5MDAwMDYxMDgxMjAwMDAwMDAwMjAyMTA4MDA4MDAwMDAyQjUxMAotOjEwNDZBMDAwMDIxMDgwMTAwMDAwMDAwMDA2MTA4MjAwMDAwMDAwNEE4NgotOjEwNDZCMDAwMDIxMDgxMDgwMDAxRkZGRjA2MTA4MTQwMDAwMDAwMDI4NwotOjEwNDZDMDAwMDIxMDgwMDAwMDAwMUE4MDA2MTA5MDAwMDAwMDAwMjRGNAotOjEwNDZEMDAwMDYxMDkxMjAwMDAwMDA0QTA2MTA5MzcwMDAwMDAwNEE2NgotOjEwNDZFMDAwMDYxMDk1QzAwMDAwMDA0QTAyMTA4MDA0MDAwMDEwODBFRgotOjEwNDZGMDAwMDIxMDgwQjAwMDAwMDAwMTAyMTA4MDNDMDAwMDAwMTA5OQotOjEwNDcwMDAwMDIxMDgxMDQwMDAwMDAwMDA2MTA4MTI4MDAwMDAwMDI1MQotOjEwNDcxMDAwMDIxMDgwMEMwMDAwMDJCNTAyMTA4MDE0MDAwMDAwMDA5RQotOjEwNDcyMDAwMDYxMDg0MDAwMDAwMDA0QTAyMTA4MTBDMDAwMUZGRkYwNwotOjEwNDczMDAwMDYxMDgxNDgwMDAwMDAwMjAyMTA4MDA0MDAwMDFBODA2OAotOjEwNDc0MDAwMDYxMDkwOTAwMDAwMDAyNDA2MTA5MjQ4MDAwMDAwNEFENQotOjEwNDc1MDAwMDYxMDk0OTgwMDAwMDA0QTA2MTA5NkU4MDAwMDAwNEFFRgotOjEwNDc2MDAwMDIxMDgwMDAwMDAwMTA4MDAyMTA4MEFDMDAwMDAwMDJFNwotOjEwNDc3MDAwMDIxMDgwMzgwMDAwMDAxMDAyMTA4MTAwMDAwMDAwMDBDQwotOjEwNDc4MDAwMDYxMDgxMjAwMDAwMDAwMjAyMTA4MDA4MDAwMDAyQjUxRgotOjEwNDc5MDAwMDIxMDgwMTAwMDAwMDAwMDA2MTA4MjAwMDAwMDAwNEE5NQotOjEwNDdBMDAwMDIxMDgxMDgwMDAxRkZGRjA2MTA4MTQwMDAwMDAwMDI5NgotOjEwNDdCMDAwMDIxMDgwMDAwMDAwMUE4MDA2MTA5MDAwMDAwMDAwMjQwMwotOjEwNDdDMDAwMDYxMDkxMjAwMDAwMDA0QTA2MTA5MzcwMDAwMDAwNEE3NQotOjEwNDdEMDAwMDYxMDk1QzAwMDAwMDA0QTAyMTA4MDA0MDAwMDEwODBGRQotOjEwNDdFMDAwMDIxMDgwQjAwMDAwMDAwMzAyMTA4MDNDMDAwMDAwMTBBNgotOjEwNDdGMDAwMDIxMDgxMDQwMDAwMDAwMDA2MTA4MTI4MDAwMDAwMDI2MQotOjEwNDgwMDAwMDIxMDgwMEMwMDAwMDJCNTAyMTA4MDE0MDAwMDAwMDBBRAotOjEwNDgxMDAwMDYxMDg0MDAwMDAwMDA0QTAyMTA4MTBDMDAwMUZGRkYxNgotOjEwNDgyMDAwMDYxMDgxNDgwMDAwMDAwMjAyMTA4MDA0MDAwMDFBODA3NwotOjEwNDgzMDAwMDYxMDkwOTAwMDAwMDAyNDA2MTA5MjQ4MDAwMDAwNEFFNAotOjEwNDg0MDAwMDYxMDk0OTgwMDAwMDA0QTA2MTA5NkU4MDAwMDAwNEFGRQotOjEwNDg1MDAwMDIxMDgwMDAwMDAwMTA4MDAyMTA4MEFDMDAwMDAwMDRGNAotOjEwNDg2MDAwMDIxMDgwMzgwMDAwMDAxMDAyMTA4MTAwMDAwMDAwMDBEQgotOjEwNDg3MDAwMDYxMDgxMjAwMDAwMDAwMjAyMTA4MDA4MDAwMDAyQjUyRQotOjEwNDg4MDAwMDIxMDgwMTAwMDAwMDAwMDA2MTA4MjAwMDAwMDAwNEFBNAotOjEwNDg5MDAwMDIxMDgxMDgwMDAxRkZGRjA2MTA4MTQwMDAwMDAwMDJBNQotOjEwNDhBMDAwMDIxMDgwMDAwMDAwMUE4MDA2MTA5MDAwMDAwMDAwMjQxMgotOjEwNDhCMDAwMDYxMDkxMjAwMDAwMDA0QTA2MTA5MzcwMDAwMDAwNEE4NAotOjEwNDhDMDAwMDYxMDk1QzAwMDAwMDA0QTAyMTA4MDA0MDAwMDEwODAwRAotOjEwNDhEMDAwMDIxMDgwQjAwMDAwMDAwNTAyMTA4MDNDMDAwMDAwMTBCMwotOjEwNDhFMDAwMDIxMDgxMDQwMDAwMDAwMDA2MTA4MTI4MDAwMDAwMDI3MAotOjEwNDhGMDAwMDIxMDgwMEMwMDAwMDJCNTAyMTA4MDE0MDAwMDAwMDBCRAotOjEwNDkwMDAwMDYxMDg0MDAwMDAwMDA0QTAyMTA4MTBDMDAwMUZGRkYyNQotOjEwNDkxMDAwMDYxMDgxNDgwMDAwMDAwMjAyMTA4MDA0MDAwMDFBODA4NgotOjEwNDkyMDAwMDYxMDkwOTAwMDAwMDAyNDA2MTA5MjQ4MDAwMDAwNEFGMwotOjEwNDkzMDAwMDYxMDk0OTgwMDAwMDA0QTA2MTA5NkU4MDAwMDAwNEEwRAotOjEwNDk0MDAwMDIxMDgwMDAwMDAwMTA4MDAyMTA4MEFDMDAwMDAwMDYwMQotOjEwNDk1MDAwMDIxMDgwMzgwMDAwMDAxMDAyMTA4MTAwMDAwMDAwMDBFQQotOjEwNDk2MDAwMDYxMDgxMjAwMDAwMDAwMjAyMTA4MDA4MDAwMDAyQjUzRAotOjEwNDk3MDAwMDIxMDgwMTAwMDAwMDAwMDA2MTA4MjAwMDAwMDAwNEFCMwotOjEwNDk4MDAwMDIxMDgxMDgwMDAxRkZGRjA2MTA4MTQwMDAwMDAwMDJCNAotOjEwNDk5MDAwMDIxMDgwMDAwMDAwMUE4MDA2MTA5MDAwMDAwMDAwMjQyMQotOjEwNDlBMDAwMDYxMDkxMjAwMDAwMDA0QTA2MTA5MzcwMDAwMDAwNEE5MwotOjEwNDlCMDAwMDYxMDk1QzAwMDAwMDA0QTAyMTA4MDA0MDAwMDEwODAxQwotOjEwNDlDMDAwMDIxMDgwQjAwMDAwMDAwNzAyMTA4MDNDMDAwMDAwMTBDMAotOjEwNDlEMDAwMDIxMDgxMDQwMDAwMDAwMDA2MTA4MTI4MDAwMDAwMDI3RgotOjEwNDlFMDAwMDIxMDgwMEMwMDAwMDJCNTAyMTA4MDE0MDAwMDAwMDBDQwotOjEwNDlGMDAwMDYxMDg0MDAwMDAwMDA0QTAyMTA4MTBDMDAwMUZGRkYzNQotOjEwNEEwMDAwMDYxMDgxNDgwMDAwMDAwMjAyMTA4MDA0MDAwMDFBODA5NQotOjEwNEExMDAwMDYxMDkwOTAwMDAwMDAyNDA2MTA5MjQ4MDAwMDAwNEEwMgotOjEwNEEyMDAwMDYxMDk0OTgwMDAwMDA0QTA2MTA5NkU4MDAwMDAwNEExQwotOjEwNEEzMDAwMDIxMjA1QjAwMDAwMDAwMTAyMTIwNDkwMDBFMzgzNDA1RQotOjEwNEE0MDAwMDIxMjA1MTQwMDAwM0MxMDAyMTIwNjZDMDAwMDAwMDE2NgotOjEwNEE1MDAwMDIxMjA2NzAwMDAwMDAwMDAyMTIwNDk0RkZGRkZGRkYyNAotOjEwNEE2MDAwMDIxMjA0OThGRkZGRkZGRjAyMTIwNDlDRkZGRkZGRkZFQQotOjEwNEE3MDAwMDIxMjA0QTBGRkZGRkZGRjAyMTIwNEE0RkZGRkZGRkZDQQotOjEwNEE4MDAwMDIxMjA0QThGRkZGRkZGRjAyMTIwNEFDRkZGRkZGRkZBQQotOjEwNEE5MDAwMDIxMjA0QjBGRkZGRkZGRjAyMTIwNEJDRkZGRkZGRkY4MgotOjEwNEFBMDAwMDIxMjA0QzBGRkZGRkZGRjAyMTIwNEM0RkZGRkZGRkY1QQotOjEwNEFCMDAwMDIxMjA0QzhGRkZGRkZGRjAyMTIwNENDRkZGRkZGRkYzQQotOjEwNEFDMDAwMDIxMjA0RDBGRkZGRkZGRjAyMTIwNEQ4RkZGRkZGRkYxNgotOjEwNEFEMDAwMDIxMjA0RENGRkZGRkZGRjAyMTIwNEUwRkZGRkZGRkZGMgotOjEwNEFFMDAwMDIxMjA0RTRGRkZGRkZGRjAyMTIwNEU4RkZGRkZGRkZEMgotOjEwNEFGMDAwMDIxMjA0RUNGRkZGRkZGRjAyMTIwNEYwRkZGRkZGRkZCMgotOjEwNEIwMDAwMDIxMjA0RjRGRkZGRkZGRjAyMTIwNEY4RkZGRkZGRkY5MQotOjEwNEIxMDAwMDIxMjA0RkNGRkZGRkZGRjAyMTIwNTAwRkZGRkZGRkY3MAotOjEwNEIyMDAwMDIxMjA1MDRGRkZGRkZGRjAyMTIwNTA4RkZGRkZGRkY0RgotOjEwNEIzMDAwMDIxMjA1MENGRkZGRkZGRjAyMTIwNTEwRkZGRkZGRkYyRgotOjEwNEI0MDAwMDIxMjA0RDRGRjgwOTAwMDAyMTIwNEI0RjAwMDUwMDA1RQotOjEwNEI1MDAwMDIxMjA0QjhGMDAwMTAwMDAyMTIwMzkwMDAwMDAwMDhENgotOjEwNEI2MDAwMDIxMjAzOUMwMDAwMDAwODAyMTIwM0EwMDAwMDAwMDhDQgotOjEwNEI3MDAwMDIxMjAzQTQwMDAwMDAwMjAyMTIwM0JDMDAwMDAwMDRBMQotOjEwNEI4MDAwMDIxMjAzQzAwMDAwMDAwNTAyMTIwM0M0MDAwMDAwMDQ2QQotOjEwNEI5MDAwMDIxMjAzRDAwMDAwMDAwMDAyMTIwMzZDMDAwMDAwMDFBQQotOjEwNEJBMDAwMDIxMjAzNjgwMDAwMDAzRjAyMTIwMUJDMDAwMDAwNDAzNgotOjEwNEJCMDAwMDIxMjAxQzAwMDAwMTgwODAyMTIwMUM0MDAwMDA4MDMxQwotOjEwNEJDMDAwMDIxMjAxQzgwMDAwMDgwMzAyMTIwMUNDMDAwMDAwNDBEQwotOjEwNEJEMDAwMDIxMjAxRDAwMDAwMDAwMzAyMTIwMUQ0MDAwMDA4MDNGOQotOjEwNEJFMDAwMDIxMjAxRDgwMDAwMDgwMzAyMTIwMURDMDAwMDA4MDNEMQotOjEwNEJGMDAwMDIxMjAxRTAwMDAxMDAwMzAyMTIwMUU0MDAwMDA4MDNCOAotOjEwNEMwMDAwMDIxMjAxRTgwMDAwMDgwMzAyMTIwMUVDMDAwMDAwMDM5OAotOjEwNEMxMDAwMDIxMjAxRjAwMDAwMDAwMzAyMTIwMUY0MDAwMDAwMDM4MAotOjEwNEMyMDAwMDIxMjAxRjgwMDAwMDAwMzAyMTIwMUZDMDAwMDAwMDM2MAotOjEwNEMzMDAwMDIxMjAyMDAwMDAwMDAwMzAyMTIwMjA0MDAwMDAwMDMzRQotOjEwNEM0MDAwMDIxMjAyMDgwMDAwMDAwMzAyMTIwMjBDMDAwMDAwMDMxRQotOjEwNEM1MDAwMDIxMjAyMTAwMDAwMDAwMzAyMTIwMjE0MDAwMDAwMDNGRQotOjEwNEM2MDAwMDIxMjAyMTgwMDAwMDAwMzAyMTIwMjFDMDAwMDAwMDNERQotOjEwNEM3MDAwMDIxMjAyMjAwMDAwMDAwMzAyMTIwMjI0MDAwMDAwMDNCRQotOjEwNEM4MDAwMDIxMjAyMjgwMDAwMjQwMzAyMTIwMjJDMDAwMDAwMkY0RQotOjEwNEM5MDAwMDIxMjAyMzAwMDAwMDAwOTAyMTIwMjM0MDAwMDAwMTk2MgotOjEwNENBMDAwMDIxMjAyMzgwMDAwMDE4NDAyMTIwMjNDMDAwMDAxODM1QgotOjEwNENCMDAwMDIxMjAyNDAwMDAwMDMwNjAyMTIwMjQ0MDAwMDAwMTkyMgotOjEwNENDMDAwMDIxMjAyNDgwMDAwMDAwNjAyMTIwMjRDMDAwMDAzMDYxNQotOjEwNENEMDAwMDIxMjAyNTAwMDAwMDMwNjAyMTIwMjU0MDAwMDAzMDZGMgotOjEwNENFMDAwMDIxMjAyNTgwMDAwMEM4NjAyMTIwMjVDMDAwMDAzMDY0OQotOjEwNENGMDAwMDIxMjAyNjAwMDAwMDMwNjAyMTIwMjY0MDAwMDAwMDZCNQotOjEwNEQwMDAwMDIxMjAyNjgwMDAwMDAwNjAyMTIwMjZDMDAwMDAwMDY5NwotOjEwNEQxMDAwMDIxMjAyNzAwMDAwMDAwNjAyMTIwMjc0MDAwMDAwMDY3NwotOjEwNEQyMDAwMDIxMjAyNzgwMDAwMDAwNjAyMTIwMjdDMDAwMDAwMDY1NwotOjEwNEQzMDAwMDIxMjAyODAwMDAwMDAwNjAyMTIwMjg0MDAwMDAwMDYzNwotOjEwNEQ0MDAwMDIxMjAyODgwMDAwMDAwNjAyMTIwMjhDMDAwMDAwMDYxNwotOjEwNEQ1MDAwMDIxMjAyOTAwMDAwMDAwNjAyMTIwMjk0MDAwMDAwMDZGNwotOjEwNEQ2MDAwMDIxMjAyOTgwMDAwMDAwNjAyMTIwMjlDMDAwMDAwMDZENwotOjEwNEQ3MDAwMDIxMjAyQTAwMDAwMDMwNjAyMTIwMkE0MDAwMDAwMTNBNwotOjEwNEQ4MDAwMDIxMjAyQTgwMDAwMDAwNjAyMTIwMkIwMDAwMDEwMDQ4NQotOjEwNEQ5MDAwMDIxMjAyQjQwMDAwMTAwNDAyMTIwMzI0MDAxMDY0NDA0NgotOjEwNERBMDAwMDIxMjAzMjgwMDEwNjQ0MDAyMTIwNUI0MDAwMDAwMDE0MgotOjEwNERCMDAwMDIxMjAxQjAwMDAwMDAwMTA2MDBBMDAwMDAwMDAwMEM3QgotOjEwNERDMDAwMDIwMEEwNTAwMDAwMDAwMDAyMDBBMDU0MDAwMDAwMDBGQgotOjEwNEREMDAwMDIwMEEwRUM1NTU0MDAwMDAyMDBBMEYwNTU1NTU1NTVCNgotOjEwNERFMDAwMDIwMEEwRjQwMDAwNTU1NTAyMDBBMEY4RjAwMDAwMDBGOQotOjEwNERGMDAwMDIwMEEwRkM1NTU0MDAwMDAyMDBBMTAwNTU1NTU1NTU3NQotOjEwNEUwMDAwMDIwMEExMDQwMDAwNTU1NTAyMDBBMTA4RjAwMDAwMDBCNgotOjEwNEUxMDAwMDIwMEExOEM1NTU0MDAwMDAyMDBBMTkwNTU1NTU1NTUzMwotOjEwNEUyMDAwMDIwMEExOTQwMDAwNTU1NTAyMDBBMTk4RjAwMDAwMDA3NgotOjEwNEUzMDAwMDIwMEExOUMwMDAwMDAwMDAyMDBBMUEwMDAwMTAwMDBFRgotOjEwNEU0MDAwMDIwMEExQTQwMDAwNTAxNDAyMDBBMUE4MDAwMDAwMDA2QwotOjEwNEU1MDAwMDIwMEE0NUMwMDAwMEMwMDAyMDBBNjFDMDAwMDAwMDM3RAotOjEwNEU2MDAwMDIwMEEwNkNGRjVDMDAwMDAyMDBBMDcwRkZGNTVGRkY3NQotOjEwNEU3MDAwMDIwMEEwNzQwMDAwRkZGRjAyMDBBMDc4RjAwMDAzRTAzMQotOjEwNEU4MDAwMDIwMEEwN0MwMDAwMDAwMDAyMDBBMDgwMDAwMEEwMDA0MgotOjEwNEU5MDAwMDYwMEEwODQwMDAwMDAwNTAyMDBBMDk4MEZFMDAwMDBCQQotOjEwNEVBMDAwMDYwMEEwOUMwMDAwMDAwNzAyMDBBMEI4MDAwMDA0MDA1QgotOjEwNEVCMDAwMDYwMEEwQkMwMDAwMDAwMzAyMDBBMEM4MDAwMDEwMDAxMwotOjEwNEVDMDAwMDYwMEEwQ0MwMDAwMDAwMzAyMDBBMEQ4MDAwMDQwMDBCMwotOjEwNEVEMDAwMDYwMEEwREMwMDAwMDAwMzAyMDBBMEU4MDAwMTAwMDBDMgotOjEwNEVFMDAwMDYwMEEyMkMwMDAwMDAwNDAyMDBBMTBDRkY1QzAwMDBFMAotOjEwNEVGMDAwMDIwMEExMTBGRkY1NUZGRjAyMDBBMTE0MDAwMEZGRkZGOAotOjEwNEYwMDAwMDIwMEExMThGMDAwMDNFMDAyMDBBMTFDMDAwMDAwMDA1NAotOjEwNEYxMDAwMDIwMEExMjAwMDAwQTAwMDA2MDBBMTI0MDAwMDAwMDU1RQotOjEwNEYyMDAwMDIwMEExMzgwRkUwMDAwMDA2MDBBMTNDMDAwMDAwMDdDRAotOjEwNEYzMDAwMDIwMEExNTgwMDAwMDgwMDA2MDBBMTVDMDAwMDAwMDM2OAotOjEwNEY0MDAwMDIwMEExNjgwMDAwMjAwMDA2MDBBMTZDMDAwMDAwMDMyMAotOjEwNEY1MDAwMDIwMEExNzgwMDAwODAwMDA2MDBBMTdDMDAwMDAwMDM5MAotOjEwNEY2MDAwMDIwMEExODgwMDAyMDAwMDA2MDBBMjNDMDAwMDAwMDQyQwotOjEwNEY3MDAwMDIwMEEwMzAwMDAwMDAwMDAyMDBBMDM0MDAwMDAwMDA4OQotOjEwNEY4MDAwMDIwMEEwMzgwMDAwMDAwMDAyMDBBMDNDMDAwMDAwMDA2OQotOjEwNEY5MDAwMDIwMEEwNDAwMDAwMDAwMDAyMDBBMDQ0MDAwMDAwMDA0OQotOjEwNEZBMDAwMDIwMEEwNDgwMDAwMDAwMDAyMDBBMDRDMDAwMDAwMDAyOQotOjEwNEZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwMDAwMDAwMDBDMQotOjEwNEZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQotOjEwNEZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQotOjEwNEZFMDAwMDAwMDAwMDAwMDMwMDAzMTAwMDAwMDAwMDAwMDAwMDA2MAotOjEwNEZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQotOjEwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAotOjEwNTAxMDAwMDAzMTAwNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAotOjEwNTAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAotOjEwNTAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MjAwODk5NQotOjEwNTA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwODkwMDhEMDA4RDAwOTEyQwotOjEwNTA1MDAwMDA5MTAwOTUwMDk1MDA5OTAwOTkwMDlEMDA5RDAwQTE4OAotOjEwNTA2MDAwMDBBMTAwQTUwMEE1MDBBOTAwQTkwMEFFMDBBRTAwQjFGNgotOjEwNTA3MDAwMDBCMTAwQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgotOjEwNTA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAotOjEwNTA5MDAwMDAwMDAwMDAwMEI0MDMwOTAzMDkwMzEzMDMxMzAzMURGOAotOjEwNTBBMDAwMDMxRDAzMjQwMzI0MDMyQjAzMkIwMzMyMDMzMjAzMzk5MAotOjEwNTBCMDAwMDMzOTAzNDAwMzQwMDM0NzAzNDcwMzRFMDM0RTAzNTVBMAotOjEwNTBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAotOjEwNTBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAotOjEwNTBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAotOjEwNTBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAotOjEwNTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgotOjEwNTExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgotOjEwNTEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgotOjEwNTEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgotOjEwNTE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgotOjEwNTE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgotOjEwNTE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgotOjEwNTE3MDAwMDM1NTAzNUIwMDAwMDAwMDAwMDAwMDAwMDM1QjAzNUNCQwotOjEwNTE4MDAwMDM1QzAzNUQwMzVEMDM1RTAzNUUwMzVGMDM1RjAzNjAxNwotOjEwNTE5MDAwMDM2MDAzNjEwMzYxMDM2MjAzNjIwMzYzMDAwMDAwMDBCNAotOjEwNTFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgotOjEwNTFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgotOjEwNTFDMDAwMDAwMDAwMDAwMDAwMDAwMDAzNjMwMzZEMDM2RDAzN0IxQgotOjEwNTFEMDAwMDM3QjAzODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQotOjEwNTFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgotOjEwNTFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgotOjEwNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQotOjEwNTIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQotOjEwNTIyMDAwMDM4OTAzOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQotOjEwNTIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQotOjEwNTI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4QTAzRDZGOAotOjEwNTI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQotOjEwNTI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQotOjEwNTI3MDAwMDAwMDAwMDAwMDAwMDAwMDAzRDYwNDAxMDAwMDAwMDA1MAotOjEwNTI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQotOjEwNTI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQotOjEwNTJBMDAwMDAwMDAwMDAwNDAxMDQzMzAwMDAwMDAwMDAwMDAwMDBDMgotOjEwNTJCMDAwMDQzMzA0M0EwNDNBMDQ0MTA0NDEwNDQ4MDQ0ODA0NEZDNgotOjEwNTJDMDAwMDQ0RjA0NTYwNDU2MDQ1RDA0NUQwNDY0MDQ2NDA0NkJENgotOjEwNTJEMDAwMDQ2QjA0QTQwMDAwMDAwMDAwMDAwMDAwMDRBNDA0QTg2MwotOjEwNTJFMDAwMDRBODA0QUMwNEFDMDRCMDA0QjAwNEI0MDRCNDA0QjgxRQotOjEwNTJGMDAwMDRCODA0QkMwNEJDMDRDMDA0QzAwNEM0MDRDNDA1MTM0MgotOjEwNTMwMDAwMDUxMzA1MkEwNTJBMDU0MTA1NDEwNTQzMDU0MzA1NDVDMQotOjEwNTMxMDAwMDU0NTA1NDcwNTQ3MDU0OTA1NDkwNTRCMDU0QjA1NEQxRAotOjEwNTMyMDAwMDU0RDA1NEYwNTRGMDU1MTA1NTEwNUU4MDVFODA1RTkwRgotOjEwNTMzMDAwMDVFOTA1RUEwNUVBMDVFRjA1RUYwNUY0MDVGNDA1RjlDOQotOjEwNTM0MDAwMDVGOTA1RkUwNUZFMDYwMzA2MDMwNjA4MDYwODA2MEQxOAotOjEwNTM1MDAwMDYwRDA2MTIwNjEyMDYxMzAwMDAwMDAwMDAwMDAwMDBGMQotOjEwNTM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAotOjEwNTM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAotOjEwNTM4MDAwMDYxMzA2MjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQQotOjEwNTM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAotOjEwNTNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyNDA2Mzk5NAotOjEwNTNCMDAwMDYzOTA2M0MwNjNDMDYzRjAwMDAwMDAwMDAwMDAwMDBFNQotOjEwNTNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAotOjEwNTNEMDAwMDAwMDAwMDAwMDAwMDAwMDA2M0YwNjc1MDAwMDAwMDAwRAotOjEwNTNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAotOjEwNTNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAotOjEwNTQwMDAwMDAwMDAwMDAwNjc1MDc3ODAwMDAwMDAwMDAwMDAwMDBBMgotOjEwNTQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QwotOjEwNTQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QwotOjEwNTQzMDAwMDc3ODA3N0YwNzdGMDc4MzA3ODMwNzg3MDAwMDAwMDAzRgotOjEwNTQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QwotOjEwNTQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4NzA3QzhFRgotOjEwNTQ2MDAwMDAwMDAwMDAwMDAwMDAwMDA3QzgwN0QxMDdEMTA3REFEQwotOjEwNTQ3MDAwMDdEQTA3RTMwN0UzMDdFQzA3RUMwN0Y1MDdGNTA3RkU5NAotOjEwNTQ4MDAwMDdGRTA4MDcwODA3MDgxMDA4MTAwODY3MDg2NzA4N0M2NwotOjEwNTQ5MDAwMDg3QzA4OTEwODkxMDg5NDA4OTQwODk3MDg5NzA4OUEzRQotOjEwNTRBMDAwMDg5QTA4OUQwODlEMDhBMDA4QTAwOEEzMDhBMzA4QTZCQwotOjEwNTRCMDAwMDhBNjA4QTkwOEE5MDhCMjAwMDAwMDAwMDAwMDAwMDAyMgotOjEwNTRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQwotOjEwNTREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQwotOjEwNTRFMDAwMDhCMjA4QjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgotOjEwNTRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQwotOjEwNTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCODA4QkIxOAotOjEwNTUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QgotOjEwNTUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QgotOjEwNTUzMDAwMDAwMDAwMDAwMDAwMDAwMDA4QkIwOEMxMDAwMDAwMDBERgotOjEwNTU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QgotOjEwNTU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QgotOjEwNTU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQgotOjEwNTU3MDAwMDhDMTA4RDAwOEQwMDhERjA4REYwOEVFMDhFRTA4RkRGMwotOjEwNTU4MDAwMDhGRDA5MEMwOTBDMDkxQjA5MUIwOTJBMDkyQTA5MzlGQwotOjEwNTU5MDAwMDkzOTA5QUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgotOjEwNTVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQgotOjEwNTVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBQTA5QkY3MAotOjEwNTVDMDAwMDlCRjA5RDAwOUQwMDlFMTA5RTEwOUUyMDlFMjA5RTNDQgotOjEwNTVEMDAwMDlFMzA5RTQwOUU0MDlFNTA5RTUwOUU2MDlFNjA5RTc1QgotOjEwNTVFMDAwMDlFNzA5RTgwOUU4MDlFOTAwMDAwMDAwMDAwMDAwMDBGNwotOjEwNTVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQgotOjEwNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QQotOjEwNTYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QQotOjEwNTYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QQotOjEwNTYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QQotOjEwNTY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QQotOjEwNTY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QQotOjEwNTY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQQotOjEwNTY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQQotOjEwNTY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQQotOjEwNTY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQQotOjEwNTZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQQotOjEwNTZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQQotOjEwNTZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMjA0QzAxMwotOjEwNTZEMDAwMDAwMzA5ODAwMDA0MEU0MDAwMDUxMzAwMDAwNjE3QzBGNwotOjEwNTZFMDAwMDAwNzFDODAwMDA4MjE0MDAwMDkyNjAwMDAwQTJBQzA4QgotOjEwNTZGMDAwMDAwQjJGODAwMDBDMzQ0MDAwMEQzOTAwMDAwRTNEQzAxRgotOjEwNTcwMDAwMDAwRjQyODAwMDEwNDc0MDAwMTE0QzAwMDAxMjUwQzBCMgotOjEwNTcxMDAwMDAxMzU1ODAwMDE0NUE0MDAwMTU1RjAwMDAxNjYzQzA0NgotOjEwNTcyMDAwMDAxNzY4ODAwMDE4NkQ0MDAwMTk3MjAwMDAxQTc2QzBEQQotOjEwNTczMDAwMDAxQjdCODAwMDFDODA0MDAwMUQ4NTAwMDAxRTg5QzA2RQotOjEwNTc0MDAwMDAxRjhFODAwMDAwOTM0MDAwMDAyMDAwMDAwMDQwMDBGOQotOjEwNTc1MDAwMDAwMDYwMDAwMDAwODAwMDAwMDBBMDAwMDAwMEMwMDAwOQotOjEwNTc2MDAwMDAwMEUwMDAwMDAxMDAwMDAwMDEyMDAwMDAwMTQwMDBGNgotOjEwNTc3MDAwMDAwMTYwMDAwMDAxODAwMDAwMDFBMDAwMDAwMUMwMDBFNQotOjEwNTc4MDAwMDAwMUUwMDAwMDAyMDAwMDAwMDIyMDAwMDAwMjQwMDBEMgotOjEwNTc5MDAwMDAwMjYwMDAwMDAyODAwMDAwMDJBMDAwMDAwMkMwMDBDMQotOjEwNTdBMDAwMDAwMkUwMDAwMDAzMDAwMDAwMDMyMDAwMDAwMzQwMDBBRQotOjEwNTdCMDAwMDAwMzYwMDAwMDAzODAwMDAwMDNBMDAwMDAwM0MwMDA5RAotOjEwNTdDMDAwMDAwM0UwMDAwMDA0MDAwMDAwMDQyMDAwMDAwNDQwMDA4QQotOjEwNTdEMDAwMDAwNDYwMDAwMDA0ODAwMDAwMDRBMDAwMDAwNEMwMDA3OQotOjEwNTdFMDAwMDAwNEUwMDAwMDA1MDAwMDAwMDUyMDAwMDAwNTQwMDA2NgotOjEwNTdGMDAwMDAwNTYwMDAwMDA1ODAwMDAwMDVBMDAwMDAwNUMwMDA1NQotOjEwNTgwMDAwMDAwNUUwMDAwMDA2MDAwMDAwMDYyMDAwMDAwNjQwMDA0MQotOjEwNTgxMDAwMDAwNjYwMDAwMDA2ODAwMDAwMDZBMDAwMDAwNkMwMDAzMAotOjEwNTgyMDAwMDAwNkUwMDAwMDA3MDAwMDAwMDcyMDAwMDAwNzQwMDAxRAotOjEwNTgzMDAwMDAwNzYwMDAwMDA3ODAwMDAwMDdBMDAwMDAwN0MwMDAwQwotOjEwNTg0MDAwMDAwN0UwMDAwMDA4MDAwMDAwMDgyMDAwMDAwODQwMDBGOQotOjEwNTg1MDAwMDAwODYwMDAwMDA4ODAwMDAwMDhBMDAwMDAwOEMwMDBFOAotOjEwNTg2MDAwMDAwOEUwMDAwMDA5MDAwMDAwMDkyMDAwMDAwOTQwMDBENQotOjEwNTg3MDAwMDAwOTYwMDAwMDA5ODAwMDAwMDlBMDAwMDAwOUMwMDBDNAotOjEwNTg4MDAwMDAwOUUwMDAwMDBBMDAwMDAwMEEyMDAwMDAwQTQwMDBCMQotOjEwNTg5MDAwMDAwQTYwMDAwMDBBODAwMDAwMEFBMDAwMDAwQUMwMDBBMAotOjEwNThBMDAwMDAwQUUwMDAwMDBCMDAwMDAwMEIyMDAwMDAwQjQwMDA4RAotOjEwNThCMDAwMDAwQjYwMDAwMDBCODAwMDAwMEJBMDAwMDAwQkMwMDA3QwotOjEwNThDMDAwMDAwQkUwMDAwMDBDMDAwMDAwMEMyMDAwMDAwQzQwMDA2OQotOjEwNThEMDAwMDAwQzYwMDAwMDBDODAwMDAwMENBMDAwMDAwQ0MwMDA1OAotOjEwNThFMDAwMDAwQ0UwMDAwMDBEMDAwMDAwMEQyMDAwMDAwRDQwMDA0NQotOjEwNThGMDAwMDAwRDYwMDAwMDBEODAwMDAwMERBMDAwMDAwREMwMDAzNAotOjEwNTkwMDAwMDAwREUwMDAwMDBFMDAwMDAwMEUyMDAwMDAwRTQwMDAyMAotOjEwNTkxMDAwMDAwRTYwMDAwMDBFODAwMDAwMEVBMDAwMDAwRUMwMDAwRgotOjEwNTkyMDAwMDAwRUUwMDAwMDBGMDAwMDAwMEYyMDAwMDAwRjQwMDBGQwotOjEwNTkzMDAwMDAwRjYwMDAwMDBGODAwMDAwMEZBMDAwMDAwRkMwMDBFQgotOjEwNTk0MDAwMDAwRkUwMDAwMDEwMDAwMDAwMTAyMDAwMDAxMDQwMDBEOAotOjEwNTk1MDAwMDAxMDYwMDAwMDEwODAwMDAwMTBBMDAwMDAxMEMwMDBDNwotOjEwNTk2MDAwMDAxMEUwMDAwMDExMDAwMDAwMTEyMDAwMDAxMTQwMDBCNAotOjEwNTk3MDAwMDAxMTYwMDAwMDExODAwMDAwMTFBMDAwMDAxMUMwMDBBMwotOjEwNTk4MDAwMDAxMUUwMDAwMDEyMDAwMDAwMTIyMDAwMDAxMjQwMDA5MAotOjEwNTk5MDAwMDAxMjYwMDAwMDEyODAwMDAwMTJBMDAwMDAxMkMwMDA3RgotOjEwNTlBMDAwMDAxMkUwMDAwMDEzMDAwMDAwMTMyMDAwMDAxMzQwMDA2QwotOjEwNTlCMDAwMDAxMzYwMDAwMDEzODAwMDAwMTNBMDAwMDAxM0MwMDA1QgotOjEwNTlDMDAwMDAxM0UwMDAwMDE0MDAwMDAwMTQyMDAwMDAxNDQwMDA0OAotOjEwNTlEMDAwMDAxNDYwMDAwMDE0ODAwMDAwMTRBMDAwMDAxNEMwMDAzNwotOjEwNTlFMDAwMDAxNEUwMDAwMDE1MDAwMDAwMTUyMDAwMDAxNTQwMDAyNAotOjEwNTlGMDAwMDAxNTYwMDAwMDE1ODAwMDAwMTVBMDAwMDAxNUMwMDAxMwotOjEwNUEwMDAwMDAxNUUwMDAwMDE2MDAwMDAwMTYyMDAwMDAxNjQwMDBGRgotOjEwNUExMDAwMDAxNjYwMDAwMDE2ODAwMDAwMTZBMDAwMDAxNkMwMDBFRQotOjEwNUEyMDAwMDAxNkUwMDAwMDE3MDAwMDAwMTcyMDAwMDAxNzQwMDBEQgotOjEwNUEzMDAwMDAxNzYwMDAwMDE3ODAwMDAwMTdBMDAwMDAxN0MwMDBDQQotOjEwNUE0MDAwMDAxN0UwMDAwMDE4MDAwMDAwMTgyMDAwMDAxODQwMDBCNwotOjEwNUE1MDAwMDAxODYwMDAwMDE4ODAwMDAwMThBMDAwMDAxOEMwMDBBNgotOjEwNUE2MDAwMDAxOEUwMDAwMDE5MDAwMDAwMTkyMDAwMDAxOTQwMDA5MwotOjEwNUE3MDAwMDAxOTYwMDAwMDE5ODAwMDAwMTlBMDAwMDAxOUMwMDA4MgotOjEwNUE4MDAwMDAxOUUwMDAwMDFBMDAwMDAwMUEyMDAwMDAxQTQwMDA2RgotOjEwNUE5MDAwMDAxQTYwMDAwMDFBODAwMDAwMUFBMDAwMDAxQUMwMDA1RQotOjEwNUFBMDAwMDAxQUUwMDAwMDFCMDAwMDAwMUIyMDAwMDAxQjQwMDA0QgotOjEwNUFCMDAwMDAxQjYwMDAwMDFCODAwMDAwMUJBMDAwMDAxQkMwMDAzQQotOjEwNUFDMDAwMDAxQkUwMDAwMDFDMDAwMDAwMUMyMDAwMDAxQzQwMDAyNwotOjEwNUFEMDAwMDAxQzYwMDAwMDFDODAwMDAwMUNBMDAwMDAxQ0MwMDAxNgotOjEwNUFFMDAwMDAxQ0UwMDAwMDFEMDAwMDAwMUQyMDAwMDAxRDQwMDAwMwotOjEwNUFGMDAwMDAxRDYwMDAwMDFEODAwMDAwMURBMDAwMDAxREMwMDBGMgotOjEwNUIwMDAwMDAxREUwMDAwMDFFMDAwMDAwMUUyMDAwMDAxRTQwMDBERQotOjEwNUIxMDAwMDAxRTYwMDAwMDFFODAwMDAwMUVBMDAwMDAxRUMwMDBDRAotOjEwNUIyMDAwMDAxRUUwMDAwMDFGMDAwMDAwMUYyMDAwMDAxRjQwMDBCQQotOjEwNUIzMDAwMDAxRjYwMDAwMDFGODAwMDAwMUZBMDAwMDAxRkMwMDBBOQotOjEwNUI0MDAwMDAxRkUwMDAwMDIwMDAwMDAwMjAyMDAwMDAyMDQwMDA5NgotOjEwNUI1MDAwMDAyMDYwMDAwMDIwODAwMDAwMjBBMDAwMDAyMEMwMDA4NQotOjEwNUI2MDAwMDAyMEUwMDAwMDIxMDAwMDAwMjEyMDAwMDAyMTQwMDA3MgotOjEwNUI3MDAwMDAyMTYwMDAwMDIxODAwMDAwMjFBMDAwMDAyMUMwMDA2MQotOjEwNUI4MDAwMDAyMUUwMDAwMDIyMDAwMDAwMjIyMDAwMDAyMjQwMDA0RQotOjEwNUI5MDAwMDAyMjYwMDAwMDIyODAwMDAwMjJBMDAwMDAyMkMwMDAzRAotOjEwNUJBMDAwMDAyMkUwMDAwMDIzMDAwMDAwMjMyMDAwMDAyMzQwMDAyQQotOjEwNUJCMDAwMDAyMzYwMDAwMDIzODAwMDAwMjNBMDAwMDAyM0MwMDAxOQotOjEwNUJDMDAwMDAyM0UwMDAwMDI0MDAwMDAwMjQyMDAwMDAyNDQwMDAwNgotOjEwNUJEMDAwMDAyNDYwMDAwMDI0ODAwMDAwMjRBMDAwMDAyNEMwMDBGNQotOjEwNUJFMDAwMDAyNEUwMDAwMDI1MDAwMDAwMjUyMDAwMDAyNTQwMDBFMgotOjEwNUJGMDAwMDAyNTYwMDAwMDI1ODAwMDAwMjVBMDAwMDAyNUMwMDBEMQotOjEwNUMwMDAwMDAyNUUwMDAwMDI2MDAwMDAwMjYyMDAwMDAyNjQwMDBCRAotOjEwNUMxMDAwMDAyNjYwMDAwMDI2ODAwMDAwMjZBMDAwMDAyNkMwMDBBQwotOjEwNUMyMDAwMDAyNkUwMDAwMDI3MDAwMDAwMjcyMDAwMDAyNzQwMDA5OQotOjEwNUMzMDAwMDAyNzYwMDAwMDI3ODAwMDAwMjdBMDAwMDAyN0MwMDA4OAotOjEwNUM0MDAwMDAyN0UwMDAwMDI4MDAwMDAwMjgyMDAwMDAyODQwMDA3NQotOjEwNUM1MDAwMDAyODYwMDAwMDI4ODAwMDAwMjhBMDAwMDAyOEMwMDA2NAotOjEwNUM2MDAwMDAyOEUwMDAwMDI5MDAwMDAwMjkyMDAwMDAyOTQwMDA1MQotOjEwNUM3MDAwMDAyOTYwMDAwMDI5ODAwMDAwMjlBMDAwMDAyOUMwMDA0MAotOjEwNUM4MDAwMDAyOUUwMDAwMDJBMDAwMDAwMkEyMDAwMDAyQTQwMDAyRAotOjEwNUM5MDAwMDAyQTYwMDAwMDJBODAwMDAwMkFBMDAwMDAyQUMwMDAxQwotOjEwNUNBMDAwMDAyQUUwMDAwMDJCMDAwMDAwMkIyMDAwMDAyQjQwMDAwOQotOjEwNUNCMDAwMDAyQjYwMDAwMDJCODAwMDAwMkJBMDAwMDAyQkMwMDBGOAotOjEwNUNDMDAwMDAyQkUwMDAwMDJDMDAwMDAwMkMyMDAwMDAyQzQwMDBFNQotOjEwNUNEMDAwMDAyQzYwMDAwMDJDODAwMDAwMkNBMDAwMDAyQ0MwMDBENAotOjEwNUNFMDAwMDAyQ0UwMDAwMDJEMDAwMDAwMkQyMDAwMDAyRDQwMDBDMQotOjEwNUNGMDAwMDAyRDYwMDAwMDJEODAwMDAwMkRBMDAwMDAyREMwMDBCMAotOjEwNUQwMDAwMDAyREUwMDAwMDJFMDAwMDAwMkUyMDAwMDAyRTQwMDA5QwotOjEwNUQxMDAwMDAyRTYwMDAwMDJFODAwMDAwMkVBMDAwMDAyRUMwMDA4QgotOjEwNUQyMDAwMDAyRUUwMDAwMDJGMDAwMDAwMkYyMDAwMDAyRjQwMDA3OAotOjEwNUQzMDAwMDAyRjYwMDAwMDJGODAwMDAwMkZBMDAwMDAyRkMwMDA2NwotOjEwNUQ0MDAwMDAyRkUwMDAwMDMwMDAwMDAwMzAyMDAwMDAzMDQwMDA1NAotOjEwNUQ1MDAwMDAzMDYwMDAwMDMwODAwMDAwMzBBMDAwMDAzMEMwMDA0MwotOjEwNUQ2MDAwMDAzMEUwMDAwMDMxMDAwMDAwMzEyMDAwMDAzMTQwMDAzMAotOjEwNUQ3MDAwMDAzMTYwMDAwMDMxODAwMDAwMzFBMDAwMDAzMUMwMDAxRgotOjEwNUQ4MDAwMDAzMUUwMDAwMDMyMDAwMDAwMzIyMDAwMDAzMjQwMDAwQwotOjEwNUQ5MDAwMDAzMjYwMDAwMDMyODAwMDAwMzJBMDAwMDAzMkMwMDBGQgotOjEwNURBMDAwMDAzMkUwMDAwMDMzMDAwMDAwMzMyMDAwMDAzMzQwMDBFOAotOjEwNURCMDAwMDAzMzYwMDAwMDMzODAwMDAwMzNBMDAwMDAzM0MwMDBENwotOjEwNURDMDAwMDAzM0UwMDAwMDM0MDAwMDAwMzQyMDAwMDAzNDQwMDBDNAotOjEwNUREMDAwMDAzNDYwMDAwMDM0ODAwMDAwMzRBMDAwMDAzNEMwMDBCMwotOjEwNURFMDAwMDAzNEUwMDAwMDM1MDAwMDAwMzUyMDAwMDAzNTQwMDBBMAotOjEwNURGMDAwMDAzNTYwMDAwMDM1ODAwMDAwMzVBMDAwMDAzNUMwMDA4RgotOjEwNUUwMDAwMDAzNUUwMDAwMDM2MDAwMDAwMzYyMDAwMDAzNjQwMDA3QgotOjEwNUUxMDAwMDAzNjYwMDAwMDM2ODAwMDAwMzZBMDAwMDAzNkMwMDA2QQotOjEwNUUyMDAwMDAzNkUwMDAwMDM3MDAwMDAwMzcyMDAwMDAzNzQwMDA1NwotOjEwNUUzMDAwMDAzNzYwMDAwMDM3ODAwMDAwMzdBMDAwMDAzN0MwMDA0NgotOjEwNUU0MDAwMDAzN0UwMDAwMDM4MDAwMDAwMzgyMDAwMDAzODQwMDAzMwotOjEwNUU1MDAwMDAzODYwMDAwMDM4ODAwMDAwMzhBMDAwMDAzOEMwMDAyMgotOjEwNUU2MDAwMDAzOEUwMDAwMDM5MDAwMDAwMzkyMDAwMDAzOTQwMDAwRgotOjEwNUU3MDAwMDAzOTYwMDAwMDM5ODAwMDAwMzlBMDAwMDAzOUMwMDBGRQotOjEwNUU4MDAwMDAzOUUwMDAwMDNBMDAwMDAwM0EyMDAwMDAzQTQwMDBFQgotOjEwNUU5MDAwMDAzQTYwMDAwMDNBODAwMDAwM0FBMDAwMDAzQUMwMDBEQQotOjEwNUVBMDAwMDAzQUUwMDAwMDNCMDAwMDAwM0IyMDAwMDAzQjQwMDBDNwotOjEwNUVCMDAwMDAzQjYwMDAwMDNCODAwMDAwM0JBMDAwMDAzQkMwMDBCNgotOjEwNUVDMDAwMDAzQkUwMDAwMDNDMDAwMDAwM0MyMDAwMDAzQzQwMDBBMwotOjEwNUVEMDAwMDAzQzYwMDAwMDNDODAwMDAwM0NBMDAwMDAzQ0MwMDA5MgotOjEwNUVFMDAwMDAzQ0UwMDAwMDNEMDAwMDAwM0QyMDAwMDAzRDQwMDA3RgotOjEwNUVGMDAwMDAzRDYwMDAwMDNEODAwMDAwM0RBMDAwMDAzREMwMDA2RQotOjEwNUYwMDAwMDAzREUwMDAwMDNFMDAwMDAwM0UyMDAwMDAzRTQwMDA1QQotOjEwNUYxMDAwMDAzRTYwMDAwMDNFODAwMDAwM0VBMDAwMDAzRUMwMDA0OQotOjEwNUYyMDAwMDAzRUUwMDAwMDNGMDAwMDAwM0YyMDAwMDAzRjQwMDAzNgotOjEwNUYzMDAwMDAzRjYwMDAwMDNGODAwMDAwM0ZBMDAwMDAzRkMwMDAyNQotOjEwNUY0MDAwMDAzRkUwMDAwMDNGRTAwMTAwMDAwMDAwMDAwMDAxRkYxMgotOjEwNUY1MDAwMDAwMDAyMDAwMDAwN0ZGODAwMDA3RkY4MDAwMDAxNDAxMAotOjEwNUY2MDAwMDAwMDM1MDAwMDAwMDAwMTAwMDBGRjAwMDAwMDAwMDBGQwotOjEwNUY3MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAyMwotOjEwNUY4MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAxMwotOjEwNUY5MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMwotOjEwNUZBMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDAwMDAwMTQwQUZGMDBENQotOjEwNUZCMDAwMDAwMDAwMDEwMDAwMDAwMDAwMjAxMDAxMDAwMDAwMDBBRgotOjEwNUZDMDAwMDEwMDkwMDAwMDAwMDEwMDAwMDA5MDAyMDAwMDkwMDQxOQotOjEwNUZEMDAwMDAwMDkwMDYwMDAwOTAwODAwMDA5MDBBMDAwMDkwMEM1RAotOjEwNUZFMDAwMDAwMDkwMEUwMDAwOTAxMDAwMDA5MDEyMDAwMDkwMTQyRAotOjEwNUZGMDAwMDAwMDkwMTYwMDAwOTAxODAwMDA5MDFBMDAwMDkwMUNGRAotOjEwNjAwMDAwMDAwMDkwMUUwMDAwOTAyMDAwMDA5MDIyMDAwMDkwMjRDQwotOjEwNjAxMDAwMDAwMDkwMjYwMDAwOTAyODAwMDA5MDJBMDAwMDkwMkM5QwotOjEwNjAyMDAwMDAwMDkwMkUwMDAwOTAzMDAwMDA5MDMyMDAwMDkwMzQ2QwotOjEwNjAzMDAwMDAwMDkwMzYwMDAwOTAzODAwMDA5MDNBMDAwMDkwM0MzQwotOjEwNjA0MDAwMDAwMDkwM0UwMDAwOTA0MDAwMDA5MDQyMDAwMDkwNDQwQwotOjEwNjA1MDAwMDAwMDkwNDYwMDAwOTA0ODAwMDA5MDRBMDAwMDkwNENEQwotOjEwNjA2MDAwMDAwMDkwNEUwMDAwOTA1MDAwMDA5MDUyMDAwMDkwNTRBQwotOjEwNjA3MDAwMDAwMDkwNTYwMDAwOTA1ODAwMDA5MDVBMDAwMDkwNUM3QwotOjEwNjA4MDAwMDAwMDkwNUUwMDAwOTA2MDAwMDA5MDYyMDAwMDkwNjQ0QwotOjEwNjA5MDAwMDAwMDkwNjYwMDAwOTA2ODAwMDA5MDZBMDAwMDkwNkMxQwotOjEwNjBBMDAwMDAwMDkwNkUwMDAwOTA3MDAwMDA5MDcyMDAwMDkwNzRFQwotOjEwNjBCMDAwMDAwMDkwNzYwMDAwOTA3ODAwMDA5MDdBMDAwMDkwN0NCQwotOjEwNjBDMDAwMDAwMDkwN0UwMDAwOTA4MDAwMDA5MDgyMDAwMDkwODQ4QwotOjEwNjBEMDAwMDAwMDkwODYwMDAwOTA4ODAwMDA5MDhBMDAwMDkwOEM1QwotOjEwNjBFMDAwMDAwMDkwOEUwMDAwOTA5MDAwMDA5MDkyMDAwMDkwOTQyQwotOjEwNjBGMDAwMDAwMDkwOTYwMDAwOTA5ODAwMDA5MDlBMDAwMDkwOUNGQwotOjEwNjEwMDAwMDAwMDkwOUUwMDAwOTBBMDAwMDA5MEEyMDAwMDkwQTRDQgotOjEwNjExMDAwMDAwMDkwQTYwMDAwOTBBODAwMDA5MEFBMDAwMDkwQUM5QgotOjEwNjEyMDAwMDAwMDkwQUUwMDAwOTBCMDAwMDA5MEIyMDAwMDkwQjQ2QgotOjEwNjEzMDAwMDAwMDkwQjYwMDAwOTBCODAwMDA5MEJBMDAwMDkwQkMzQgotOjEwNjE0MDAwMDAwMDkwQkUwMDAwOTBDMDAwMDA5MEMyMDAwMDkwQzQwQgotOjEwNjE1MDAwMDAwMDkwQzYwMDAwOTBDODAwMDA5MENBMDAwMDkwQ0NEQgotOjEwNjE2MDAwMDAwMDkwQ0UwMDAwOTBEMDAwMDA5MEQyMDAwMDkwRDRBQgotOjEwNjE3MDAwMDAwMDkwRDYwMDAwOTBEODAwMDA5MERBMDAwMDkwREM3QgotOjEwNjE4MDAwMDAwMDkwREUwMDAwOTBFMDAwMDA5MEUyMDAwMDkwRTQ0QgotOjEwNjE5MDAwMDAwMDkwRTYwMDAwOTBFODAwMDA5MEVBMDAwMDkwRUMxQgotOjEwNjFBMDAwMDAwMDkwRUUwMDAwOTBGMDAwMDA5MEYyMDAwMDkwRjRFQgotOjEwNjFCMDAwMDAwMDkwRjYwMDAwOTBGODAwMDA5MEZBMDAwMDkwRkNCQgotOjEwNjFDMDAwMDAwMDkwRkUwMDAwOTEwMDAwMDA5MTAyMDAwMDkxMDQ4OAotOjEwNjFEMDAwMDAwMDkxMDYwMDAwOTEwODAwMDA5MTBBMDAwMDkxMEM1NwotOjEwNjFFMDAwMDAwMDkxMEUwMDAwOTExMDAwMDA5MTEyMDAwMDkxMTQyNwotOjEwNjFGMDAwMDAwMDkxMTYwMDAwOTExODAwMDA5MTFBMDAwMDkxMUNGNwotOjEwNjIwMDAwMDAwMDkxMUUwMDAwOTEyMDAwMDA5MTIyMDAwMDkxMjRDNgotOjEwNjIxMDAwMDAwMDkxMjYwMDAwOTEyODAwMDA5MTJBMDAwMDkxMkM5NgotOjEwNjIyMDAwMDAwMDkxMkUwMDAwOTEzMDAwMDA5MTMyMDAwMDkxMzQ2NgotOjEwNjIzMDAwMDAwMDkxMzYwMDAwOTEzODAwMDA5MTNBMDAwMDkxM0MzNgotOjEwNjI0MDAwMDAwMDkxM0UwMDAwOTE0MDAwMDA5MTQyMDAwMDkxNDQwNgotOjEwNjI1MDAwMDAwMDkxNDYwMDAwOTE0ODAwMDA5MTRBMDAwMDkxNENENgotOjEwNjI2MDAwMDAwMDkxNEUwMDAwOTE1MDAwMDA5MTUyMDAwMDkxNTRBNgotOjEwNjI3MDAwMDAwMDkxNTYwMDAwOTE1ODAwMDA5MTVBMDAwMDkxNUM3NgotOjEwNjI4MDAwMDAwMDkxNUUwMDAwOTE2MDAwMDA5MTYyMDAwMDkxNjQ0NgotOjEwNjI5MDAwMDAwMDkxNjYwMDAwOTE2ODAwMDA5MTZBMDAwMDkxNkMxNgotOjEwNjJBMDAwMDAwMDkxNkUwMDAwOTE3MDAwMDA5MTcyMDAwMDkxNzRFNgotOjEwNjJCMDAwMDAwMDkxNzYwMDAwOTE3ODAwMDA5MTdBMDAwMDkxN0NCNgotOjEwNjJDMDAwMDAwMDkxN0UwMDAwOTE4MDAwMDA5MTgyMDAwMDkxODQ4NgotOjEwNjJEMDAwMDAwMDkxODYwMDAwOTE4ODAwMDA5MThBMDAwMDkxOEM1NgotOjEwNjJFMDAwMDAwMDkxOEUwMDAwOTE5MDAwMDA5MTkyMDAwMDkxOTQyNgotOjEwNjJGMDAwMDAwMDkxOTYwMDAwOTE5ODAwMDA5MTlBMDAwMDkxOUNGNgotOjEwNjMwMDAwMDAwMDkxOUUwMDAwOTFBMDAwMDA5MUEyMDAwMDkxQTRDNQotOjEwNjMxMDAwMDAwMDkxQTYwMDAwOTFBODAwMDA5MUFBMDAwMDkxQUM5NQotOjEwNjMyMDAwMDAwMDkxQUUwMDAwOTFCMDAwMDA5MUIyMDAwMDkxQjQ2NQotOjEwNjMzMDAwMDAwMDkxQjYwMDAwOTFCODAwMDA5MUJBMDAwMDkxQkMzNQotOjEwNjM0MDAwMDAwMDkxQkUwMDAwOTFDMDAwMDA5MUMyMDAwMDkxQzQwNQotOjEwNjM1MDAwMDAwMDkxQzYwMDAwOTFDODAwMDA5MUNBMDAwMDkxQ0NENQotOjEwNjM2MDAwMDAwMDkxQ0UwMDAwOTFEMDAwMDA5MUQyMDAwMDkxRDRBNQotOjEwNjM3MDAwMDAwMDkxRDYwMDAwOTFEODAwMDA5MURBMDAwMDkxREM3NQotOjEwNjM4MDAwMDAwMDkxREUwMDAwOTFFMDAwMDA5MUUyMDAwMDkxRTQ0NQotOjEwNjM5MDAwMDAwMDkxRTYwMDAwOTFFODAwMDA5MUVBMDAwMDkxRUMxNQotOjEwNjNBMDAwMDAwMDkxRUUwMDAwOTFGMDAwMDA5MUYyMDAwMDkxRjRFNQotOjEwNjNCMDAwMDAwMDkxRjYwMDAwOTFGODAwMDA5MUZBMDAwMDkxRkNCNQotOjEwNjNDMDAwMDAwMDkxRkVGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY0QQotOjEwNjNEMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZDRAotOjEwNjNFMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZCRAotOjEwNjNGMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZBRAotOjEwNjQwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY5QwotOjEwNjQxMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY4QwotOjEwNjQyMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY3QwotOjEwNjQzMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY2QwotOjEwNjQ0MDAwRkZGRkZGRkYwMDAwMDAwMzAwQkVCQzIwMDAwMDAwMDBCMwotOjEwNjQ1MDAwMDAwMDAwMDUwMDAwMDAwMzAwQkVCQzIwMDAwMDAwMDA5QQotOjEwNjQ2MDAwMDAwMDAwMDUwMDAwMDAwMzAwQkVCQzIwMDAwMDAwMDA4QQotOjEwNjQ3MDAwMDAwMDAwMDUwMDAwMDAwMzAwQkVCQzIwMDAwMDAwMDA3QQotOjEwNjQ4MDAwMDAwMDAwMDUwMDAwMDAwMzAwQkVCQzIwMDAwMDAwMDA2QQotOjEwNjQ5MDAwMDAwMDAwMDUwMDAwMDAwMzAwQkVCQzIwMDAwMDAwMDA1QQotOjEwNjRBMDAwMDAwMDAwMDUwMDAwMDAwMzAwQkVCQzIwMDAwMDAwMDA0QQotOjEwNjRCMDAwMDAwMDAwMDUwMDAwMDAwMzAwQkVCQzIwMDAwMDAwMDAzQQotOjEwNjRDMDAwMDAwMDAwMDUwMDAwMjAwMDAwMDA0MEMwMDAwMDYxODBDNgotOjEwNjREMDAwMDAwMDgyNDAwMDAwQTMwMDAwMDBDM0MwMDAwMEU0ODA3MAotOjEwNjRFMDAwMDAwMTA1NDAwMDAxMjYwMDAwMDE0NkMwMDAwMTY3ODA1MAotOjEwNjRGMDAwMDAwMTg4NDAwMDAxQTkwMDAwMDFDOUMwMDAwMUVBODAzNAotOjEwNjUwMDAwMDAwMjBCNDAwMDAyMkMwMDAwMDI0Q0MwMDAwMjZEODAxMwotOjEwNjUxMDAwMDAwMjhFNDAwMDAyQUYwMDAwMDJDRkMwMDAwMkYwODBGNwotOjEwNjUyMDAwMDAwMDExNDAwMDAwODAwMDAwMDEwMzgwMDAwMTg3MDA4RQotOjEwNjUzMDAwMDAwMjBBODAwMDAyOEUwMDAwMDMxMTgwMDAwMzk1MDAxMwotOjEwNjU0MDAwMDAwNDE4ODAwMDA0OUMwMDAwMDUxRjgwMDAwNUEzMDBDMwotOjEwNjU1MDAwMDAwNjI2ODAwMDA2QUEwMDAwMDcyRDgwMDAwN0IxMDA3MwotOjEwNjU2MDAwMDAwODM0ODAwMDA4QjgwMDAwMDkzQjgwMDAwOUJGMDAyMwotOjEwNjU3MDAwMDAwQTQyODAwMDBBQzYwMDAwMEI0OTgwMDAwQkNEMDBEMwotOjEwNjU4MDAwMDAwQzUwODAwMDBDRDQwMDAwMEQ1NzgwMDAwMDVCMDAxMAotOjEwNjU5MDAwMDAwMDdGRjgwMDAwN0ZGODAwMDAwMEQ1MDAwMDE1MDAyMwotOjEwNjVBMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBFRAotOjEwNjVCMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBERAotOjEwNjVDMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBDRAotOjEwNjVEMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBCRAotOjEwNjVFMDAwMDAwMDE5MDAwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkY5NgotOjEwNjVGMDAwMDAwMDAwMDAwMzkzODcwMDAwMDAwMDAwMDM5Mzg3MDA2MQotOjEwNjYwMDAwMDAwMDdGRjgwMDAwN0ZGODAwMDAwNjhFMDAwMDM1MDBEMwotOjEwNjYxMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkY2NAotOjEwNjYyMDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA2MQotOjEwNjYzMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkY0NAotOjEwNjY0MDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDA0MQotOjEwNjY1MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYyNAotOjEwNjY2MDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYxNAotOjEwNjY3MDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAxMQotOjEwNjY4MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkZGNAotOjEwNjY5MDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDBGMQotOjEwNjZBMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZENAotOjEwNjZCMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkZDNAotOjEwNjZDMDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBDMQotOjEwNjZEMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkZBNAotOjEwNjZFMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDBBMQotOjEwNjZGMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY4NAotOjEwNjcwMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkY3MwotOjEwNjcxMDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA3MAotOjEwNjcyMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkY1MwotOjEwNjczMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDA1MAotOjEwNjc0MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYzMwotOjEwNjc1MDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYyMwotOjEwNjc2MDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAyMAotOjEwNjc3MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMwotOjEwNjc4MDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMAotOjEwNjc5MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZFMwotOjEwNjdBMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkZEMwotOjEwNjdCMDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBEMAotOjEwNjdDMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkZCMwotOjEwNjdEMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDBCMAotOjEwNjdFMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY5MwotOjEwNjdGMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkY4MwotOjEwNjgwMDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA3RgotOjEwNjgxMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkY2MgotOjEwNjgyMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDA1RgotOjEwNjgzMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY0MgotOjEwNjg0MDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYzMgotOjEwNjg1MDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAyRgotOjEwNjg2MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYxMgotOjEwNjg3MDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRgotOjEwNjg4MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZGMgotOjEwNjg5MDAwMDAwMDAwRkYwMDAwMDBGRjAwMDAwMEZGMDAwMDAwRkZGQwotOjEwNjhBMDAwMDAwMDAwRkYwMDAwMDBGRjAwMDAwMEZGMDAwMDAwRkZFQwotOjEwNjhCMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBEQQotOjEwNjhDMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBDQQotOjEwNjhEMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBCQQotOjEwNjhFMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBBQQotOjEwNjhGMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZBOAotOjEwNjkwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY5NwotOjEwNjkxMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY4NwotOjEwNjkyMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY3NwotOjEwNjkzMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY2NwotOjEwNjk0MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY1NwotOjEwNjk1MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY0NwotOjEwNjk2MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYzNwotOjEwNjk3MDAwMDAwMDEwMDAwMDAwMjA4MDAwMDAzMTAwMDAwMDQxODA3NQotOjEwNjk4MDAwMDAwMDUyMDAwMDAwNjI4MDAwMDA3MzAwMDAwMDgzODA1RAotOjEwNjk5MDAwMDAwMDk0MDAwMDAwQTQ4MDAwMDBCNTAwMDAwMEM1ODA0NQotOjEwNjlBMDAwMDAwMEQ2MDAwMDAwRTY4MDAwMDBGNzAwMDAwMTA3ODAyQwotOjEwNjlCMDAwMDAwMTE4MDAwMDAxMjg4MDAwMDEzOTAwMDAwMTQ5ODAxMQotOjEwNjlDMDAwMDAwMTVBMDAwMDAxNkE4MDAwMDE3QjAwMDAwMThCODBGOQotOjEwNjlEMDAwMDAwMTlDMDAwMDAxQUM4MDAwMDFCRDAwMDAwMUNEODBFMQotOjEwNjlFMDAwMDAwMURFMDAwMDAxRUU4MDAwMDFGRjAwMDAwMDBGODBDQQotOjEwNjlGMDAwMDAwMDdGRjgwMDAwN0ZGODAwMDAwMzQ0MDAwMDM1MDAyRAotOjEwNkEwMDAwMTAwMDAwMDAwMDAwMjhBRDAwMDEwMDAxMDAwNTAyMDY5MgotOjEwNkExMDAwQ0NDQ0NDQzVGRkZGRkZGRkZGRkZGRkZGNzA1ODEwM0M0MQotOjEwNkEyMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA2OAotOjEwNkEzMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA1OAotOjEwNkE0MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA0OAotOjEwNkE1MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAzOAotOjEwNkE2MDAwMDAwMDAwMDAwMDAwMDAwMUNDQ0MwMjAxQ0NDQ0NDQ0M1QQotOjEwNkE3MDAwQ0NDQzAyMDFDQ0NDQ0NDQ0NDQ0MwMjAxQ0NDQ0NDQ0M4MAotOjEwNkE4MDAwQ0NDQzAyMDFDQ0NDQ0NDQ0NDQ0MwMjAxQ0NDQ0NDQ0M3MAotOjEwNkE5MDAwQ0NDQzAyMDFDQ0NDQ0NDQ0NDQ0MwMjAxQ0NDQ0NDQ0M2MAotOjEwNkFBMDAwQ0NDQzAyMDFDQ0NDQ0NDQzAwMDAwMDAwRkZGRkZGRkYxRgotOjEwNkFCMDAwMDAwRTAwMDAwMTE2MDBENjAwMjYyNUEwMDAyNjI1QTAwNQotOjEwNkFDMDAwMDAyNjI1QTAwMDI2MjVBMDAwNzIwMDAwMDEyMzAwRjM2NwotOjEwNkFEMDAwMDAyNjI1QTAwMDI2MjVBMDAwMjYyNUEwMDAyNjI1QTAwQQotOjEwNkFFMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBBQQotOjEwNkFGMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA5QQotOjEwNkIwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA4OQotOjEwNkIxMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA3OQotOjEwNkIyMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA2OQotOjEwNkIzMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA1OQotOjEwNkI0MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA0OQotOjEwNkI1MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAzOQotOjEwNkI2MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAyOQotOjEwNkI3MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAxOQotOjEwNkI4MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwOQotOjEwNkI5MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBGOQotOjEwNkJBMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBFOQotOjEwNkJCMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBEOQotOjEwNkJDMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBDOQotOjEwNkJEMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBCOQotOjEwNkJFMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBBOQotOjEwNkJGMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA5OQotOjEwNkMwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA4OAotOjEwNkMxMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA3OAotOjEwNkMyMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA2OAotOjEwNkMzMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA1OAotOjEwNkM0MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA0OAotOjEwNkM1MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAzOAotOjEwNkM2MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAyOAotOjEwNkM3MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAxOAotOjEwNkM4MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwOAotOjEwNkM5MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBGOAotOjEwNkNBMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBFOAotOjEwNkNCMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBEOAotOjEwNkNDMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBDOAotOjEwNkNEMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBCOAotOjEwNkNFMDAwRkZGRkZGRjMzMThGRkZGRjBDMzBDMzBDQzMwQzMwQzMyOQotOjEwNkNGMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q2NgotOjEwNkQwMDAwRkZGRkZGRjEzMEVGRkZGRjBDMzBDMzBDQzMwQzMwQzNBQgotOjEwNkQxMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0Q0NAotOjEwNkQyMDAwRkZGRkZGRjYzMDVGRkZGRjBDMzBDMzBDQzMwQzMwQzMxNgotOjEwNkQzMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0QyMwotOjEwNkQ0MDAwRkZGRkY0MDYxQ0JGRkZGRjBDMzBDMzA1QzMwQzMwQzNBQwotOjEwNkQ1MDAwQ0YzMDAwMTRGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0RFQwotOjEwNkQ2MDAwRkZGRkZGRjIzMDRGRkZGRjBDMzBDMzBDQzMwQzMwQzNFQQotOjEwNkQ3MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0RERAotOjEwNkQ4MDAwRkZGRkZGRkEzMDJGRkZGRjBDMzBDMzBDQzMwQzMwQzNFMgotOjEwNkQ5MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0RCNQotOjEwNkRBMDAwRkZGRkZGRjczMUVGRkZGRjBDMzBDMzBDQzMwQzMwQzMwNAotOjEwNkRCMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0Q4NQotOjEwNkRDMDAwRkZGRkZGRjUzMDJGRkZGRjBDMzBDMzBDQzMwQzMwQzNBNwotOjEwNkREMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0Q0NQotOjEwNkRFMDAwRkZGRkZGRjMzMThGRkZGRjBDMzBDMzBDQzMwQzMwQzMyOAotOjEwNkRGMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q2NQotOjEwNkUwMDAwRkZGRkZGRjEzMTBGRkZGRjBDMzBDMzBDQzMwQzMwQzM4OQotOjEwNkUxMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0Q0MwotOjEwNkUyMDAwRkZGRkZGRjYzMDVGRkZGRjBDMzBDMzBDQzMwQzMwQzMxNQotOjEwNkUzMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0QyMgotOjEwNkU0MDAwRkZGRkY0MDYxQ0JGRkZGRjBDMzBDMzA1QzMwQzMwQzNBQgotOjEwNkU1MDAwQ0YzMDAwMTRGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0RFQgotOjEwNkU2MDAwRkZGRkZGRjIzMDRGRkZGRjBDMzBDMzBDQzMwQzMwQzNFOQotOjEwNkU3MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0REQwotOjEwNkU4MDAwRkZGRkZGRkEzMDJGRkZGRjBDMzBDMzBDQzMwQzMwQzNFMQotOjEwNkU5MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0RCNAotOjEwNkVBMDAwRkZGRkZGRjczMEVGRkZGRjBDMzBDMzBDQzMwQzMwQzMwNAotOjEwNkVCMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0Q4NAotOjEwNkVDMDAwRkZGRkZGRjUzMDRGRkZGRjBDMzBDMzBDQzMwQzMwQzM4NgotOjEwNkVEMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0Q0NAotOjEwNkVFMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNEQwotOjEwNkVGMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q5OAotOjEwNkYwMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNCQgotOjEwNkYxMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0Q3NgotOjEwNkYyMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM5QgotOjEwNkYzMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0Q1NQotOjEwNkY0MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM3QgotOjEwNkY1MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0QzMwotOjEwNkY2MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM1QgotOjEwNkY3MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0QwRgotOjEwNkY4MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMzQgotOjEwNkY5MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0RFNwotOjEwNkZBMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMxQgotOjEwNkZCMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0RCNwotOjEwNkZDMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNGQgotOjEwNkZEMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0Q3NwotOjEwNkZFMDAwRkZGRkZGRjMzMjBGRkZGRjBDMzBDMzBDQzMwQzMwQzNBNQotOjEwNkZGMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q2MwotOjEwNzAwMDAwRkZGRkZGRjEzMTBGRkZGRjBDMzBDMzBDQzMwQzMwQzM4NwotOjEwNzAxMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0Q0MQotOjEwNzAyMDAwRkZGRkZGRjYzMDVGRkZGRjBDMzBDMzBDQzMwQzMwQzMxMwotOjEwNzAzMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0QyMAotOjEwNzA0MDAwRkZGRkY0MDYxQ0JGRkZGRjBDMzBDMzA1QzMwQzMwQzNBOQotOjEwNzA1MDAwQ0YzMDAwMTRGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0RFOQotOjEwNzA2MDAwRkZGRkZGRjIzMDRGRkZGRjBDMzBDMzBDQzMwQzMwQzNFNwotOjEwNzA3MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0REQQotOjEwNzA4MDAwRkZGRkZGOEEwNDJGRkZGRjBDMzBDMzBDQzMwQzMwQzM3QgotOjEwNzA5MDAwQ0YzQ0MwMDBGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0RFNQotOjEwNzBBMDAwRkZGRkZGOTcwNUNGRkZGRjBDMzBDMzBDQzMwQzMwQzNBRAotOjEwNzBCMDAwQ0YzQ0MwMDBGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0RCNQotOjEwNzBDMDAwRkZGRkZGRjUzMTBGRkZGRjBDMzBDMzBDQzMwQzMwQzNDMwotOjEwNzBEMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0Q0MgotOjEwNzBFMDAwRkZGRkZGRjMzMjBGRkZGRjBDMzBDMzBDQzMwQzMwQzNBNAotOjEwNzBGMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q2MgotOjEwNzEwMDAwRkZGRkZGRjEzMDJGRkZGRjBDMzBDMzBDQzMwQzMwQzM2NwotOjEwNzExMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0Q0MAotOjEwNzEyMDAwRkZGRkZGRjYzMDVGRkZGRjBDMzBDMzBDQzMwQzMwQzMxMgotOjEwNzEzMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0QxRgotOjEwNzE0MDAwRkZGRkZGMDYxQ0JGRkZGRjBDMzBDMzBDQzMwQzMwQzM5NgotOjEwNzE1MDAwQ0YzQ0MwMTRGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0QxQwotOjEwNzE2MDAwRkZGRkZGRjIzMDRGRkZGRjBDMzBDMzBDQzMwQzMwQzNFNgotOjEwNzE3MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0REOQotOjEwNzE4MDAwRkZGRkZGRkEzMDJGRkZGRjBDMzBDMzBDQzMwQzMwQzNERQotOjEwNzE5MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0RCMQotOjEwNzFBMDAwRkZGRkZGRjczMUNGRkZGRjBDMzBDMzBDQzMwQzMwQzMyMAotOjEwNzFCMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0Q4MQotOjEwNzFDMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNGOQotOjEwNzFEMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0Q3NQotOjEwNzFFMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNEOQotOjEwNzFGMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q5NQotOjEwNzIwMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNCOAotOjEwNzIxMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0Q3MwotOjEwNzIyMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM5OAotOjEwNzIzMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0Q1MgotOjEwNzI0MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM3OAotOjEwNzI1MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0QzMAotOjEwNzI2MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM1OAotOjEwNzI3MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0QwQwotOjEwNzI4MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMzOAotOjEwNzI5MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0RFNAotOjEwNzJBMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMxOAotOjEwNzJCMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0RCNAotOjEwNzJDMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNGOAotOjEwNzJEMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0Q3NAotOjEwNzJFMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNEOAotOjEwNzJGMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q5NAotOjEwNzMwMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNCNwotOjEwNzMxMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0Q3MgotOjEwNzMyMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM5NwotOjEwNzMzMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0Q1MQotOjEwNzM0MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM3NwotOjEwNzM1MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0QyRgotOjEwNzM2MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM1NwotOjEwNzM3MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0QwQgotOjEwNzM4MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMzNwotOjEwNzM5MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0RFMwotOjEwNzNBMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMxNwotOjEwNzNCMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0RCMwotOjEwNzNDMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNGNwotOjEwNzNEMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0Q3MwotOjEwNzNFMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNENwotOjEwNzNGMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q5MwotOjEwNzQwMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNCNgotOjEwNzQxMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0Q3MQotOjEwNzQyMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM5NgotOjEwNzQzMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0Q1MAotOjEwNzQ0MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM3NgotOjEwNzQ1MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0QyRQotOjEwNzQ2MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM1NgotOjEwNzQ3MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0QwQQotOjEwNzQ4MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMzNgotOjEwNzQ5MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0RFMgotOjEwNzRBMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMxNgotOjEwNzRCMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0RCMgotOjEwNzRDMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNGNgotOjEwNzREMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0Q3MgotOjEwNzRFMDAwMDAwQzAwMDAwMDA3MDBDMDAwMDI4MTMwMDAwQjgxNTgzMgotOjEwNzRGMDAwMDAwMjAyMTAwMDAxMDIzMDAwMEYwMjQwMDAwMTAzMzBDMAotOjEwNzUwMDAwMDAwQzAwMDAwMDA4MDBDMDAwMDI4MTQwMDAwQjgxNjhGMAotOjEwNzUxMDAwMDAwMjAyMjAwMDAxMDI0MDAwMDcwMjUwMDAwMjAyQzBFNwotOjEwNzUyMDAwMDAxMDAwMDAwMDA4MDEwMDAwMDI4MTgwMDAwQjgxQTgwQgotOjEwNzUzMDAwMDAwMjAyNjAwMDAxODI4MDAwMEU4Mjk4MDAwODAzODAzMQotOjEwNzU0MDAwMDAxMDAwMDAwMDAxMDEwMDAwMDI4MTEwMDAwOTAxMzg1NAotOjEwNzU1MDAwMDAwMjAxQzgwMDAxMDFFODAwMEUwMUY4MDAwMDAyRDg5NQotOjEwNzU2MDAwQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0M1QgotOjEwNzU3MDAwMDAwMDIwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0M1QgotOjEwNzU4MDAwQ0NDQ0NDQ0MwMDAwMjAwMENDQ0NDQ0NDQ0NDQ0NDQ0M0QgotOjEwNzU5MDAwQ0NDQ0NDQ0NDQ0NDQ0NDQzA0MDAyMDAwMDAwMDAwMDA2NwotOjEwNzVBMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJGQjUxQ0ZDMEYwMDM1MAotOjEwNzVCMDAwOEFCN0IxMzEzMEVDRTY0NEYwRTk4MTU5MTgxODE4Rjg2RgotOjEwNzVDMDAwOTlDOEQ3QkYxMTY4QzA0RTIwQkUwMUM0MDc1OTQ4RDcxQgotOjEwNzVEMDAwN0Y1NTFBQzE1RTI2QzlDMDcwMEE4ODI3ODgzMzMwQjQyNwotOjEwNzVFMDAwNEEyMUM0RUQ2NTE4MThFRTAxRjkyQkExNjI3MjQwM0RFNQotOjEwNzVGMDAwNzNBNEM5NzdGMzI4MUUzQ0I4RDAxNDk1MUY2MjBDQTE2MAotOjEwNzYwMDAwNUY5ODQwRTgyMjM0Rjk1MEE4QkNCODFFODQyRTM2QzVENQotOjEwNzYxMDAwNkVBRTg0MUU3MUY2QTdBOUEwRjJCRDU1RjBBQkNGRDUxMgotOjEwNzYyMDAwNDBFNUM3QTJBOTBGODFGMjAxN0VFOUIyMzREODAzMDA3OAotOjEwNzYzMDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDA5OAotOjEwNzY0MDAwMDAwQkVEN0QwQjc0NTVENUI1RThEQTlGQjNDRkZGNjQyMQotOjEwNzY1MDAwMjc4NDcwMTIzRUVFQzQwMEMxMDYzQzQyODBBMEE4M0JDNQotOjEwNzY2MDAwRkMxQTdERDQxRTEwMjVFNUExMUM0NDZCMDA0OTIyQTZGRQotOjEwNzY3MDAwRDc4Qzk2RDc2Q0M4ODcwNDUwRTNFNzUxQkQ0NTdCQTBGMwotOjEwNzY4MDAwRDg4QjBFNUJBM0E2OEFCREI0M0Q4ODdBQTlDM0RCMjI0MgotOjEwNzY5MDAwNUFBNTJEN0E4M0ZBMkM1OEEwQjE1NzJBQkQ0RkNCNUIzRgotOjEwNzZBMDAwNzNBRUI1OTJCRDc3Q0VDOUM3NEY0N0VGNzg4RDQzNzY5RAotOjEwNzZCMDAwRDZERUVCM0JGRjZCQ0VCOTU2MzREOTQzRjIyRTI3RTQyRQotOjEwNzZDMDAwMUNGQ0QwQTcyOTExNDJBNkY3M0RDOTJENTkzMkM5MjM2OAotOjEwNzZEMDAwRTQxQjNFODIzRjFGRjkyMzUzNDgxNjIxMEQzRUY2QkNBMgotOjEwNzZFMDAwM0QxMEQ5MDVDRjJEOEQ4NEE0MjZDMkY3NzE0OTEyMjFGMgotOjEwNzZGMDAwMjQ0ODQ4ODk5QTBCMkQwMkIxODcwQkUxNTk3NzYxN0NBOAotOjEwNzcwMDAwMzIzRTY3QzIzMzg3Qzg4NDhDODRGMjE4RkRCRDIwRUJGQgotOjEwNzcxMDAwRkI5QzQyRkYzOTlBQTg4MEYxMTRGNjhBQThBNDNDOTZGMwotOjEwNzcyMDAwQzJGNkRGMjI2NDQ2REYzQzQ4REQ1N0Y1NzhCODZGREVFRAotOjEwNzczMDAwRUVBN0EyNkIyNEM1RUI5RTgzN0Y5NEU1NTk4OTUwRTZBMgotOjEwNzc0MDAwRkEwRDQ3QTVDNzlGQjdENTFGNEZDMkI5MzgyRjk1QThDNwotOjEwNzc1MDAwMzgyRkRFOUUxMDhCRDhFN0U3RUVFN0EzNDZGMkY4RjM2QQotOjEwNzc2MDAwRTNGQkMzMkREM0I4MDI2RTZEOEQzRTdDQjYzNkVBMjRBMgotOjEwNzc3MDAwRTUyNTg0MzYzMzNCNEJFOTMzNDRDQzVEQTVGRERCQ0RCOQotOjEwNzc4MDAwMjMxMjg3MUY5RjBGOEM2M0QwRkFGNDdGNDJFMURFOUNBNwotOjEwNzc5MDAwNEI5MjQxQzAyMTQ5MzhFMEQ2MUM1QUVDMzNEM0Y0MjczMAotOjEwNzdBMDAwOUUyNDk3QzJBRDg0Q0ZCOUE4RkY3QUZEMzAyRjBBMDc3NwotOjEwNzdCMDAwM0ZDQzJCMEQzQzk3QzJCQ0E2Rjc5Rjk3QkZEODNEQUZERgotOjEwNzdDMDAwNkE2Mjg3Q0Y3MEU3MTU5ODQ0QzgyMUMwODc2QTEyODIyMQotOjEwNzdEMDAwNzhCOUNERDE5RkFDOUI1Njc3OUFGRTA4QTcwQkQ1RTAyMAotOjEwNzdFMDAwRUIxQjIyOUU4MjI1NzJERkY4MDAwNzIzRTBBMDJGNkY5QgotOjEwNzdGMDAwMzRDNzQ5NkY2RUJBMDY3ODIwQkUzQTM4N0NFMjBBRTM5NQotOjEwNzgwMDAwMDdBQjBGOEZGNDE5OUExRDkzODAzNTY4RjExMEUwMkRBNgotOjEwNzgxMDAwOUYzMEY4RTU1N0I3REUyQTRGMjE5NEQ1M0EwRjRFQTA5NgotOjEwNzgyMDAwRjBDQkVGNUVCOTkwNDBGOUU4MTUyNzgwREY5QUNCQTY0MAotOjEwNzgzMDAwNTZDRUE1RjVCMkNCNjNBRjJDQTA0RDQyMzE0MzAyN0FCMAotOjEwNzg0MDAwREQwQTlEMTU0MDdGNUZCMzJBNjhCOTA5RkFBMzY1Q0JBRAotOjEwNzg1MDAwQkFDQUI0MTA2RUE2MDM2RTE0NzI4NjRBQ0IxRUY4QjU2RgotOjEwNzg2MDAwMjgwREZDNDgyRjFFQTQ3M0RFRkVFRDMzQzFDRjQzNkMwMAotOjEwNzg3MDAwRjg0MzdFNUVFRkEwQ0I4Qzc4QkY5MUUxQ0JBMkZGMDFGNQotOjEwNzg4MDAwQkU0NjEwMUI1RkQzN0VCMjJCMzUwNzVFQjI1Q0UzM0M3NQotOjEwNzg5MDAwMEFCRjIwQkM2RkZEOUI4Qzk3NDM5RUY0MTk5NENFM0Q4QwotOjEwNzhBMDAwQTVCMjlFQTQ3OENBMjZCMTZDQjU4Q0UyNjNBMTRBNDAwOQotOjEwNzhCMDAwOEVFNUU0RUExMjkwQzM2MDc4NjkyNkE0MTJGODlGNEEyNAotOjEwNzhDMDAwMDdCMkM4MjZFNzdFQ0VGOUFCNjBDREVFOURBRDc0OUNDNQotOjEwNzhEMDAwMzNCMzQzMzFBODk1QUZEM0I5NEVFREJGOUUzQjQwQkUwNQotOjEwNzhFMDAwNzg2REU1QjJFNzQ4MDJDN0VCM0M1ODQ0RTc2NTk1QzlCNwotOjEwNzhGMDAwQjE4NzI5REQ2QzJEM0RBQ0RCRTVFM0IxNUVGOUUyQTY5NQotOjEwNzkwMDAwMEY2MkE4MzNCODNDQTBGMDUxNEE2NUQzMUZGOUVDRjREQwotOjEwNzkxMDAwQTE3QzRBRkEwOERGRThDNEM3NzBGMTc1N0E5OEY0RjFERgotOjEwNzkyMDAwNTlDNzEzNzhFRENGNTcxQjA1NUU3RDg0N0VERjUyQjJCOQotOjEwNzkzMDAwNzg0MDdERDUxRkFGNEY5MjA0NkQxNzJBMjU2NjMyNEREMgotOjEwNzk0MDAwQkJGRkI0RUIwQkY3RDMyNkRGREQ3MjU0MTkzNUEzNkEwNgotOjEwNzk1MDAwRTc0MDc4Q0I3NUFFNTdGNEVCNkY1MDhDNzc0N0QwQTJFOQotOjEwNzk2MDAwQUFBMzdDRDVCODFFNjg4RkRFNjMxMTRBNzc2NzQwRjZGQwotOjEwNzk3MDAwNTA3ODI4MUQxN0E1QTA0QzhBNDlFQzYxRDY0RDRBQTIyMwotOjEwNzk4MDAwNjU3RkQ0NEM2RTQxM0E0ODIyNUVDNEZDQkM4NkVDOTBDNAotOjEwNzk5MDAwQjM2QUFFNTMwRTkzMkE0QkIyQ0ZERkRGQTBFMTNDMzQ4MwotOjEwNzlBMDAwMTgyRjE3RUMwMkRBMjEwNTg1MUEyMjI5QTA1QjQxQUZCNgotOjEwNzlCMDAwQTA5MkNFOUQwRjY1QTc5REQxNjY0QzI1RTlGMEEwNzJERgotOjEwNzlDMDAwQkM0QjkyQTBENzZGMEQ0REJFQjhDNzVCRTI5Q0VGOTA0OQotOjEwNzlEMDAwREI4NTU0RTMzREQxMjY4RDlDRUU2QkE3OTJGNzA0N0VBOAotOjEwNzlFMDAwMjgxMDJGMTM3NjFEQzdEMzY2MEZEOTJCNUQ0OEU1QzEyQwotOjEwNzlGMDAwOTg2QkMxNTIyMDlCRTFEMzJDNkE4N0MwOTMyQTlGQ0RGQwotOjEwN0EwMDAwNjNBNkVBNDA1NzY0OEZBNEMyM0M3MTQ4OEE0NzQyRjU5NgotOjEwN0ExMDAwMURENDBCNEEwNkY2MjNGQkVBOTBGRTk0OTA4OTRGRjFBMQotOjEwN0EyMDAwM0RGM0JDRDhGOEJENjU1RkEyMDZGMDUzMURENThDMkQ4MwotOjEwN0EzMDAwNzQ4RTZCMTVEM0Q4MDg3NDMxOERDOUE3RUFFODg0NzlBMAotOjEwN0E0MDAwQTBFRjNDMTI5QkQ3QjdBNTdDNUM4NzlBRDM5Njg3NzYyQwotOjEwN0E1MDAwNTkwNkZCQUU1QUE1MkE3RjJBN0NERjM2NjEyMDdFMjI5QQotOjEwN0E2MDAwNDk0RjRGQjcwRDlFNkU3QkYwNjY4OURBODM1RkEyQkZFOAotOjEwN0E3MDAwQ0MyNDMzMDE4RTdGOEEyRENFNEEwRDgwQUZGNzFCMEZBOQotOjEwN0E4MDAwRUFFQUY4M0U3QkQwRkQ3REFENDJFQUQyQzk4MTU2QzkxMwotOjEwN0E5MDAwQzdGOEQyNjc2OTYwMUY4ODc1QUYwNTc2QTcyMEREMTYyNQotOjEwN0FBMDAwREJDNEQ2OUI5QjhCRjA1REJCRTcxN0JBNkFFM0JGQjUxRgotOjEwN0FCMDAwNTRDRDc4QTdGNjVGOEY4MEI3RThBN0I3N0RGMkEwQTM3MwotOjEwN0FDMDAwQkRCQjVENkY3RjQyNUU1MDdCMThFODVDRDA0MTUwNEE4MQotOjEwN0FEMDAwNkM5NUU4N0I2RjZDQjEwNUVBNkNFRDYzMTUwQ0ZGMTlEMgotOjEwN0FFMDAwRTZERjhCQUY0RjM5N0ZEMTZFMzBCQUZBRDNFRUE2NTZCMAotOjEwN0FGMDAwRDA0RkVGNjkxRDU3NUQ0Q0U5RThGNzRGMjhCMTRERjRDMQotOjEwN0IwMDAwNkJGNThFODlGM0MwNUU3QThGRDNCN0MwRDM4OURENEQxNAotOjEwN0IxMDAwNzlFOUU4MjMxMzlFN0UyMUY5NzExQzQxNUZENUYyRjJDOQotOjEwN0IyMDAwMDFFOTYxMzBGQTdBQ0E0RDVGOUQ1NzdGMjFGNDc1QzgyQgotOjEwN0IzMDAwNEQ1RjFDMUUyNzNCRDlGQUM5RkQyMzE4NUUzOEJFRENGOQotOjEwN0I0MDAwRjhDOTg4OTc0RkRCQUUzRjNERkQ1QUEyN0NFREVEQkNGNgotOjEwN0I1MDAwM0EzRDNERjFGOTBBN0M3REQ2RjkwRTQ2NDc3OTg2NjlCMgotOjEwN0I2MDAwRUE3NEZDNTFENDhFOTE0MDdGOTQ5MTU4OEFDRTUzQTdFOQotOjEwN0I3MDAwMEZENDVCMzFBNkI3ODQ1QzEyRUQ0RjRCQ0M0RTUzQzk4QQotOjEwN0I4MDAwNkJEODVFMjEyOTRCNDc3QkRCNjk2N0NDNTdFODRCREEyMgotOjEwN0I5MDAwNEY3MzA5NDk3QTcxNUY2NEZBNTA0Rjk1QTg4NEU5M0ZBMQotOjEwN0JBMDAwMzM5NDNGMDNFQzA4RkVBM0NDOEVDMUJBQjNDMEZFMDdFQQotOjEwN0JCMDAwRkQzNTlCRUI1Rjg5REE1Qjc0N0RBMTMyRTdCRTM3RTA3MAotOjEwN0JDMDAwQjIzRjE0QkU1RkU4Njc2RjBENzM3RkVDOTdGOUZFMzgyNAotOjEwN0JEMDAwNDg0MkE4OEZDNEZFMzgwMzdGRjZFRThCMzk1QzQ3NkFCMwotOjEwN0JFMDAwQzQ5NEU5QkFCNTgzOUVFNDI2MDlCNDFCNDFGRDRDOEVDQQotOjEwN0JGMDAwNEE0OUU2MkYyMDI1NjAzN0FGOTcwQTYyQTAwRkU4M0U3QQotOjEwN0MwMDAwQUYyNzhCN0U3RkVGMDcwQUVBODc4NjY4REQ4QTE2NThFMgotOjEwN0MxMDAwRjZCNTBEMTNCQkU5QjhGNzM0OTI2OUM1OUVCRUYxRUUxNwotOjEwN0MyMDAwNTEzQjdDMDBFRkY2RTJGNTBFQkJGNkJCNTJBMjUwQjYxQwotOjEwN0MzMDAwRTkxRDdGNTQ5QjU2M0MwRDg2NTNERkVFQTZGMDkwMjkzQwotOjEwN0M0MDAwMjA4MUZGMDJBMUZCQTIyRjE4MDAzRkY2QkUxNzRFRjZCRgotOjEwN0M1MDAwQjJEMkJGOUMwQjM2NEYwMTE2NTNCMDJGNkRBN0I2M0I2NwotOjEwN0M2MDAwQjkxODhBQTNBNTBBNEEwN0VEMUVGRURERkE0RDA1RUNGOAotOjEwN0M3MDAwNzdEQkZEQUNCQzYzRDNBQzhEMTY5NDQ3RjJGQTU2MTU5NgotOjEwN0M4MDAwRkI5RUNGQ0FCNzZERkE0MTA1RUMwQkRBQjJFOTlBQTlBRgotOjEwN0M5MDAwQkU2RUYzMjRBQkUyNjlGOEZCMzY1OTc2RDg1RjREQzY2OQotOjEwN0NBMDAwODJGMkZGNDNEN0UxRjc5OTE3QkQ0MEUxNDk4MTEyQjM1MgotOjEwN0NCMDAwMENEMjZCOTcxNTBBQkY0MUM3REQ5NTI1MDBGRkQ3MTQ3RAotOjEwN0NDMDAwMDJGNEVDMzc2MkYxOUIwQ0E0M0ZBNDdCN0ZBRTE5REI3RQotOjEwN0NEMDAwNDI0QjBERjQ4NTBDRjUyOERFMUU5NjYwNUZDN0VDMzEzMwotOjEwN0NFMDAwRjBFNzlDNDNGQUE1N0M0MUJGQUZDRkQ2QjEzRUQxNkQ0MgotOjEwN0NGMDAwRjY1OTUxOUYzREQ2OEIyNzE3REVFRTU1N0JGQzgwQjc5QQotOjEwN0QwMDAwRUY4REY5RjAxNzEzNjkzRkQ2NDIzOTA2NjRGM0JEMERDNAotOjEwN0QxMDAwNDVEOTJCNkQ3ODdDQ0MzN0E3MEFGMDQ4OUE3M0QxMkVDMQotOjEwN0QyMDAwODk5MkRFMUYxM0NBNjJERjVDNDAzQTJCQzA3ODFDNDM4NQotOjEwN0QzMDAwMjUxRkExNzQzQTJFREU1MzAxMjgzMEFBRjRFNzcwOEY3NAotOjEwN0Q0MDAwNEJFNkU5RUZBMTVEQTU0OEU3QkUzNDc0M0JDQTBEMDdEOQotOjEwN0Q1MDAwREFFM0E4NDU1NDNFOEQ5MDQ4M0M5RERDNURBOUU2QTA0MQotOjEwN0Q2MDAwM0MxODUxNDlENzNCODA5RkUwOUI1NDlGMzBGQjJDRTE0RQotOjEwN0Q3MDAwMDNGRjU2QTY3MTMyQ0RGMzMzQzA3MzkzNENDNzFENEQyQwotOjEwN0Q4MDAwOTIwOEE3QzFFMDlBMDk5RUFERDEyN0IzNTE1RTdGQ0U3QwotOjEwN0Q5MDAwNzBDREQ0REUwRENGMTExMkUzOTc5NTZBMzlGMkNCNTAzNgotOjEwN0RBMDAwRkQzQjZEN0MzRkQ1MDI3RTM4RkE2Q0UyN0UzODc3N0JGNgotOjEwN0RCMDAwQkZEQTQxNjI2OUYwRUIzNzlDRkUyMTBERjYyNUI2NzIwMQotOjEwN0RDMDAwQkQ2QzMwN0QxMDcyRkI4OTE4OUVERDdBNjEwMUQ3MEI4NgotOjEwN0REMDAwMkQ1MUFBMTc5ODNDNUMwODdBMjBDOEUxREYwMkJCN0VDRgotOjEwN0RFMDAwOTA5RjYxOTJCNEU4RjcyMEY3MDc5MTUyMjZGRjdERjQ0NwotOjEwN0RGMDAwM0ZFMEI3NTE1NTRFN0RBMDBENTExRkJDMkJDNTVGOTA4NAotOjEwN0UwMDAwOTEwRTg5MDRGM0JCNUZFQUI4NjIwMkQwNEYzRUIzQzc1QwotOjEwN0UxMDAwQTMzN0I0NDUxMzM2MzhENENCNENERjA5N0Q5NjJDMTZFNgotOjEwN0UyMDAwRkE4QzIwRkNDRUUzNzM0ODkyMEUzRkU4QzMwNzM2MkM1MQotOjEwN0UzMDAwQ0U0MkJGREQ4RDQxODcxQzhBQjYyRUM2RkRBRjhEOUUxQQotOjEwN0U0MDAwRDEyRkRBQzFGREEzOTlGMEE3NkJDOTQ0M0E3OTU4QTg5QwotOjEwN0U1MDAwMzA3OTE4MzE3QjUyRTBGMzQzNDJDRUUzMkU0MzRFRDZDNQotOjEwN0U2MDAwMENGRUM0QjEwRjhCNENFRDM5NzgzRTVERUZDRThCRTQ0OAotOjEwN0U3MDAwRDgyNkRBNEU5REFEQTYzQzE0QkU2QUY5OEI1NTEyN0QwQwotOjEwN0U4MDAwRUUyQzY0RjBCNzY2MTFBNEQzOTBCMUUwODQwMkZBNThFNgotOjEwN0U5MDAwRUQ0NjdGNERBOEQyQkQyRkI2OTUxNUU4QTdFNzdBRDQ1OQotOjEwN0VBMDAwREY3NjNGRjUwMEZCQjhBMTNFOUIyOEJDREVCNkYxM0Y3NAotOjEwN0VCMDAwODU1QzRBQTFFQjUwMzcxMDAzRUMwOUQ1QTQyMjMxMDJBRQotOjEwN0VDMDAwNEYzRDBGRTg0NTM1NjMyMTdDNzY1NzU0QzJGM0JDRDk0QQotOjEwN0VEMDAwRjE0QUQ5QTYwNzU0MzNCRTA1RUE4RkY4Q0E3REVEQjA0MgotOjEwN0VFMDAwNUVGNTI2NTk1NjI0QzYwNzM5MzY3ODlCNEFBMTYzM0Y2QQotOjEwN0VGMDAwOTdBREJCRkNBNTg5RDYyQUQ0RUY4NjQ2QzYxN0Y2OUY1OAotOjEwN0YwMDAwNzdCREFDNzJCOUU3QTQxNzQxMjcwM0M4QkJDRjQ0MUZBNAotOjEwN0YxMDAwNkZDQUMyNUZFREM0QkY4MzRFOEFGQUYwMkJEQTg1RkFDRQotOjEwN0YyMDAwRjlBQjlDRjg3NTk3M0Y2RkJDRkEwMTRGMTQxRkU3NTFFRQotOjEwN0YzMDAwM0MwMTdEOUUzNzlCRDEyM0I1NDdEMTdFN0FDMEQ3NjE2NgotOjEwN0Y0MDAwMDJCQzFGMjgzNjY0NEJFQTZCMTc1NjcyOTg5RkY5MkNCNwotOjEwN0Y1MDAwREQ2ODUxQkJFN0ZFOTVEQjRENjg5NzVGNEM2NTgwODQxQgotOjEwN0Y2MDAwQ0ZCNEZFQTM3QTU5QzM3NjU0MkU1NDJBQ0M2RTk3QzA1MAotOjEwN0Y3MDAwMUU5RkFGNkNBQjgyRjYzQjI5NUU4MURGNzcwMjdGNDNBOQotOjEwN0Y4MDAwN0MyMEExQTExQ0FFOTdEQjJCMzZEMkJFNUI4RjRBQjIwMAotOjEwN0Y5MDAwMDI0NkFDQkUxNEYxRUJFN0ZDRkU5MTI3NTEwOTdFQzgwNgotOjEwN0ZBMDAwMkRGRjRCMjZCQjBDRDA0QjAzRkJCRDlBMzhCRTQ1MTlBOQotOjEwN0ZCMDAwRkMwRDYwOUY4Q0E5RDNBNzAyRDgzM0I1REI1RTI3NTc5MQotOjEwN0ZDMDAwQTY1QjU3QjVDMkYwN0Y0N0RERTEwRTM0NEY5Rjc3RUVEOQotOjEwN0ZEMDAwNDczQ0NCNERBMDQ4RDg5NzU0MkIzNkZBMEU5NzMxN0ZBQgotOjEwN0ZFMDAwMDc0OUQwRjU0MDdENEUzNzFGMTUwRTRDQUYwRkJBRTY0RQotOjEwN0ZGMDAwM0Y5NkM3NTNEQ0Y1NUU1NkI4QkZDRTYwRjAzMjQ0RkYwMwotOjEwODAwMDAwMUIwN0VFNUZDMEU3NkM5QkMyRTMyM0Q0MDA0MzIyMUUzNAotOjEwODAxMDAwNDlFQ0ZBNUJCOUYxNTAwNUJDQTc1Q0I3MDlGMEI1NUQ1NgotOjEwODAyMDAwMjZENUNDREYxQzQ3M0QxNEUxRTNFRDJDQ0ZDMUY2MEI4OAotOjEwODAzMDAwNTUyNjQ3Qzc5QUZBMTZDMEY3RDg2NjE5MkMwNUYyQjgyNAotOjEwODA0MDAwNjJFMEZCNTFDQkVCRjY3QjI4MUVEQTBCNDkyQzY0RTA5NwotOjEwODA1MDAwMTBEOEVGOEJFMzM1QTRDQkZDNUNBNkM3RjJFQjI5MDk2MwotOjEwODA2MDAwRDA3QUY5QTUyNDY5RDBGNkVERkIxRkE4RDA2ODM5NDI3MwotOjEwODA3MDAwMzc1NDYwMEFGQkNBMTkzRTdEMjUyNDA2QTY5MEM3MjIwNAotOjEwODA4MDAwMjk5OTdENEY0MjRDNTIyOUVGQjE0MDk1MUUxODNGMDM2QwotOjEwODA5MDAwRjc1Rjc3RTY5Mjk4RDdFODkzMUI4MkFFRUU2Q0JFQzc4NwotOjEwODBBMDAwMEY3QUU0ODFFMjdCQUU5ODAwRkVDNjUyMTVGREU0RTQ0RgotOjEwODBCMDAwNjMwQTI3RTE0RjU0MjA1RTE2Mzc2MUJDRjY1OTZDREUyNwotOjEwODBDMDAwRjQwREUyNTNENUQ5RkFDN0RDM0YxQkY5QTQzREZDMzRDQgotOjEwODBEMDAwQ0VDMzVBNDc2MkUzQjE1RThDNjBGQzg2MEE1NEYwNTcwNwotOjEwODBFMDAwMzY1NTMzN0JENzhEOEZGNTI0RjFCODMyREQ0RUFGODcwRgotOjEwODBGMDAwOTA2RURBM0Y1MUY4QkVFMEM1OEQ2MEU3OEY4MzVGNjkwRgotOjEwODEwMDAwRjk5NzREN0ZEQzM4MUNCQjQ1QzQwRjg1RERCMjQ1RURDQQotOjEwODExMDAwNDRCRUI3MjhDRjgxNUUxMjc2OENCRkI4MTNDN0ZEQkZBRgotOjEwODEyMDAwOUNERTg3REFCRkJGQzRFOTZGNzVEQjM1NkU3QkE2NUU2OAotOjEwODEzMDAwRDYxREY2QUI3QjVEMUY3OTUyNTdDMEZDQjZFNDUzN0U2QgotOjEwODE0MDAwNEZBMzA3N0UwM0ZBOUFCNkRGMTE1REZDQUI4OTQ2NUY0OQotOjEwODE1MDAwM0Y3RDcyQzhDMEVGQTIzQ0U2QUM4NkY4MTk3QTdEMkE1MgotOjEwODE2MDAwRjc2MDhGNjYzMkJFMUEyQkU0RDAzNzI4NUYwRDEwN0Y4MAotOjEwODE3MDAwMTQ3Q0Y1MTExNTEyODc4MDRGRDQwRUE0MkY2Mjk2MjAxRgotOjEwODE4MDAwNUYwOTdFNTFCQTNCREFDRkE3RjQ2MEQ0Q0JFMEI5MDZFMQotOjEwODE5MDAwRkUyMjM5QjQ1QzQ4RTkzRDY1QjM4Nzg0QkM1MDRCM0I1MwotOjEwODFBMDAwRTMxM0E1RkU3NEY3QTAyMTIzMUVDRjk0MzE3Rjc1OTZBQgotOjEwODFCMDAwRDU2RDQyOTM2MDY5MjdDNkY1Mjg1REZEMTdEMDk1QUE1NQotOjEwODFDMDAwMjcyNUMwRUI5OEZCMTdFMEJBN0VBOTMwNTZGN0FCMkNGOQotOjEwODFEMDAwN0VFQzVFQzdDRjM5N0M4OUJFMUJFRDc5M0YxQjhFQjIyQQotOjEwODFFMDAwRjg3RDMxMzYzRjU3OUNCREZFNTcwM0M2RDlGRDMxOTcwOAotOjEwODFGMDAwOUQzMzRDM0Y0MjhFQ0FGRDA4RENFRjM1NThGQkUxQzY4QgotOjEwODIwMDAwRDc5NUIzMjM5MDNFN0FDQjE5RTRFRDREMkFFNzhCQTNBMwotOjEwODIxMDAwQkIxQzcwRTkwNzBGNjU0NzZDQTBGOUY5ODU5RkZFNTNGOQotOjEwODIyMDAwQzYwNTUwODcwRDAxMEU2RTM4NUVBMjNBRkQ4NzlGMzc1NgotOjEwODIzMDAwMUNEREYxRUY5N0I4REMxRjRDMUUwNDREMzMyNTJCRTBGRAotOjEwODI0MDAwM0YyM0NDQkYxMzIyRENCRkUzQTRGNzlEQ0QzMkRBMjE1QwotOjEwODI1MDAwQzFCMEJDMTM0Q0M5QUNGQTZFRDRDMTYyN0M0QUVGNTVCNAotOjEwODI2MDAwQUE4RERFNDc5NzFFNEE0MTNCQjczRUNBQTQ4NzA2OTNCNAotOjEwODI3MDAwQjdBQjdDRTYwRDJBQ0FBREY0RkJGMUJFN0MwM0NBMjU4MAotOjEwODI4MDAwNjlGMjBEMzJFMkI1RUVGM0M5MzcxODJBQkM3QkZEOUJDQgotOjEwODI5MDAwM0M3RkUwODY3MjQxQzdDNkQyREY1MUI4QUMzRUU4MjFEMAotOjEwODJBMDAwRTg5N0Y5OThBRUNFMTY1NzVCQ0RGNzgxMzdGMDdERTRBRAotOjEwODJCMDAwOEQyNDFFODE4RkE3ODg1QzA5RkM3MjhBMUM4RTRDQjNBQQotOjEwODJDMDAwQzk5M0ZCNTQ4REYxNEI5QkU3NkRGMEFGOEE3OEY5NEQ2NAotOjEwODJEMDAwMURBQzJDRTY3M0YzRkRDRUYyRDdDOUUyM0NGMEVCN0Q4QQotOjEwODJFMDAwRkQzRTBGRTI2QkI1Q0JCRkQ2QUMzMkZENzEzM0E5NkI0RgotOjEwODJGMDAwMDVCQ0I1Nzg0ODE1QzhCMTFCNzRBMjhFQTBBNkVCQkExMAotOjEwODMwMDAwNjcxRTlDQjE5Mjk2QkZDQkVEOTFGN0E5NUMzNjZDNzE1QwotOjEwODMxMDAwRDAzNUExQTQwNkY4N0RBNzZCREFCNTk3MTA2ODlGNkNERAotOjEwODMyMDAwMkQ4MDdENUEzNkMxN0RBQjFCQ0VBQkRBOUNGMzFCNkMyNgotOjEwODMzMDAwRkVFRUY5NTJGMkMyRjk2NjlBODdCQTQ3NEE2QjRGM0Y4RQotOjEwODM0MDAwMjJFNDBEQzc1N0E2QkMyQTkxNEZGNTBCMjAyMDVBREYxNwotOjEwODM1MDAwOUE0M0Q4QkVGM0FENjBCMjA5RTUzNUNCQTcxQUFDRkRBMAotOjEwODM2MDAwMkY1NTQ2M0Y5RkI2RkRBQjgzQjQ1RkU3RUI1OTAwQ0M3QQotOjEwODM3MDAwRDY5NjZCQzVDMTJGMjRFMjgyMzVBNENFMUM0RDdGNTUwNQotOjEwODM4MDAwRjcyREIyNDYxMzVCQkRFODEwRUIxNTBGNUMyRkQzQkM4NQotOjEwODM5MDAwNEZFODNFNEJCRUIwNkZGRURGOTUxMkM3RDQzNEYzQkYzQgotOjEwODNBMDAwNUQ0OUQ0NDBGRjVFQzA4MzAyNEYxNUYxOEQ3RTYwOEEyNwotOjEwODNCMDAwREY1QTM1RDQyNjY1NDFCRTUzMTdFRTAzRkQ4NkVBQTA4OQotOjEwODNDMDAwODc1QUY4MDVFNDVBMDk5MzZCQzExMkU3NzdCNzdGRjgyQgotOjEwODNEMDAwNDM1NUM0RTE1M0M4N0YxODgyMzZDMDdFMDhBNTE0RjAwNwotOjEwODNFMDAwREY5NEFCMjc3QkVCRDNGMTZBNjA1RDE3NDIyOThFNzI3NQotOjEwODNGMDAwQTM1RTY3RjU2Qjg4NzFEN0VDMzJFNDNGOEMzRkQ0Qjc0RQotOjEwODQwMDAwOUY4RjcxRjVGQTkxMDZGQTc3NTUxMjMzQjEwRjE3REQ4OAotOjEwODQxMDAwRDU5RTk1NDhEMkE2MEY2QkQ1MUUwREY4QUM5NkRBNDVDMQotOjEwODQyMDAwRjZGN0VCQTM4QUMzNEZFQjdFN0FBOEU1MUMyQTgxN0Q4MQotOjEwODQzMDAwOTJDQ0ZDNDgzQTJEREJENkZEQTcwRTg5RTdBRjE4NTk0MAotOjEwODQ0MDAwNEIwNkYwREZBRDhGMzI3RkYwMERFREUzQjM5OERGRDA1OAotOjEwODQ1MDAwMjk3RjRGMzczMkJGRENCRjNERjY3RDBERkNGQ0E3MUVFOAotOjEwODQ2MDAwM0Q3NjE1QzA3QkVEQkYyQUM0MDdGOTFCOEY4NTQ5MEFFRAotOjEwODQ3MDAwRURCMUE0MDZGNkQ4OUEyRUM1NENBNkNEQUY2ODYyRjEzMAotOjEwODQ4MDAwQ0ZDN0MzODhBRjM1NEY3QTkzMEI2OUZCMzU0RkJGMzNFNgotOjEwODQ5MDAwODVEMEY5OURERUQ0RjNFMjY4QjA5QjFGOTU1ODFFODIwQgotOjEwODRBMDAwRDUzREU1NkFGQTdFOEQ0QTU2QTRGMzFCNENGNjMwRjlBOQotOjEwODRCMDAwNzNGMkQ5NjAxNUYwQjdCNDY3RkZGNUQ4NkZFNzUyOEY0NAotOjEwODRDMDAwRDdCNkRGMkVGNjc4OTA2RjY5M0Q2Njk3M0YyMjI1QzdCNQotOjEwODREMDAwNEJFOUU2QzdGMjNGNEUzRTIyQjFGOUVERjUyNEZEMzBGRgotOjEwODRFMDAwQkYzRDNCQjUwNDlENDdFRDlFMEY1MDlFQ0M3REZDODc2NAotOjEwODRGMDAwMTE4MDQzRUQ1RUM1QTEwNzZBRjcyODI5RUYxNDdDMUVBMQotOjEwODUwMDAwODMyN0M0OERBNDE5NDAyNzlDNUVCQUQ2NjFCQ0E4QTY1NwotOjEwODUxMDAwNzNFQjA3RTBDN0E4RERFQjk0NkIxNDJFQjExNEMwRjUyNAotOjEwODUyMDAwMEQyNUI2MTBDQTRGRkQ0QkM0QTBBMDdBRkZEMEMzMTFEMQotOjEwODUzMDAwODAyQkVENzdBNTk2MDVGQUM2NDlERkQwRkZEOTlDRkVDMgotOjEwODU0MDAwRkQxMUQyODNGMUJBREFDRTc2MzY1RUQ3NTc3RTBGN0EzNgotOjEwODU1MDAwQTVENjI1M0ZERjg3NUZGMkZCREIzM0Q3Nzg1Q0Y2Q0MwRgotOjEwODU2MDAwOUVBMUM1RUJENkZFRjBDQzQzMTYxREY3RTQ5MzdGNzhCMQotOjEwODU3MDAwQzhBMkYzQkZFNUFGRkZGOUQwQjc4MDNGN0ZFNkQ3NDE5MAotOjEwODU4MDAwRkVENzNFRkFFQjA4QjFEMTYzQUQ4N0YxRTNFOUIxQzRBMAotOjEwODU5MDAwQTI3QjU0NzJGQTM3REUyNEY4NEI0RUZGRjRGN0UzMEM1QgotOjEwODVBMDAwQkFFRUQzNEZGQzI1Q0ZBMEY1RUI3RjNBN0YxNEMwQTFFNAotOjEwODVCMDAwRkVDNzczNDcwREI0RkYwNjdBNEQ3QUVERjM0QTIyNUU4QgotOjEwODVDMDAwOERCRDEyMzM4MkY2RjFBNzBCM0YwN0JBMEU4QzgzNzk2QgotOjEwODVEMDAwOUUzQUUyOEQ4MURCQjk5NkJFNkI5ODBBRjg1QTg3RkEwQgotOjEwODVFMDAwMThDQTFCMjg5QzZCMUVEQkZDMDFDODg5RkVGMEI2NDYyRQotOjEwODVGMDAwQ0JFOEFDNEY4RDA2QTc3RDRERDczQjBCMTA2RkE0MDc4MgotOjEwODYwMDAwRjVBOEJCN0VFRDZCMTQ5RjE3NjZDNkRGMTlGMkIxMDZBNQotOjEwODYxMDAwRjJBRUY2QjE3NjM2NUUyN0M1NUZBNDNGRkU0RUMxMkY5RgotOjEwODYyMDAwQjNGQUUzRUYwRTE3RkVDRTkwNUJCRTk3MEY3OThENUQyOAotOjEwODYzMDAwMjMxQzcxNTJGMUVDOEIwRkM2QjNFMjAzQzgwQjIxMEY2MAotOjEwODY0MDAwMDY4MzZGQjVDNEU2QjVDQzYzM0VFODAxQkU3QTMyRDg4NgotOjEwODY1MDAwOEJERjg1ODBERjFGOUUxOTQ3Mjg3RDFDRjdGNDVDMEY5OAotOjEwODY2MDAwNzJCM0U3QTc1RTdEMTc3REJGRTZBNzZGMjA5RjlERkVEMwotOjEwODY3MDAwRjEyQjlBODFGOTk5MjQyNEU1RjEzQzMxRjY3MzA4RTQ1MQotOjEwODY4MDAwNzAwRERCQ0I5MURBRERFMTk0MzdEMjg3QTc5QUU0QTJCMwotOjEwODY5MDAwNEEyMzgyRUY4RkUxRkIyNEEzRkY5QUU0RkUyNTUyMUFCRQotOjEwODZBMDAwQkNCREUxMjk2Mjc2NDA3MjI0QzI2NURERUVERjY5Q0M5MwotOjEwODZCMDAwQkVFQ0MzQTc1NDBFRjgzQ0I2MDBERTY3QzJBNzU4QkY5NQotOjEwODZDMDAwMEVFQjlGNjlDM0VCNkVDNkI3RUVGQTM1OTQzRjQxRUZGMAotOjEwODZEMDAwRjVDMzZGNTI3QTAzOUVBNzc3N0E1NUQwN0JBN0MxRkU2OAotOjEwODZFMDAwMEFGNUM3N0IxRkZDOTlGRDMzRENGRENBMkI2RUZFMTYxNQotOjEwODZGMDAwRjE2MzBFODdDQ0Y0NjE3MTNCNjBFMEY1MEQxNzdFM0ZBRQotOjEwODcwMDAwRjcxODBFM0ExMjcwM0NGOTcxN0FGOTdGOEFDQjhEMUFGQwotOjEwODcxMDAwNjI1NTE2RDhFQzEzOUY4N0RBMjc5MDVGNDZFMkQ2RThCOQotOjEwODcyMDAwQzJCRUY5OUU4NDdEMDRBNUJGOTM4RjJBMThBRjY5RUQ2MAotOjEwODczMDAwM0M4MDcyREMyRDJGNkE0OEZBN0RGQjVGM0RDQzVFQUMzRAotOjEwODc0MDAwRDlCQjdGMEFDOEI1OTNDRjNEOEJGNDU5RjNEODMxMEQwRgotOjEwODc1MDAwRjYyRjJGRUU3OTRBRUIyRUVERTMwN0QwMEY0OTlCN0VFMwotOjEwODc2MDAwMzhGOUEzRkQ1Mzk4M0M0OEJGRkYwRDZBQUNGRkRBN0Q5MgotOjEwODc3MDAwQ0VGRTZCMUZGQkMwRDFGRjVBQUI1MzYzNzkwQzAzOEY0NgotOjEwODc4MDAwRjNCRTZBMkU4NUY1QkU3RkM4NDM0MDlFQkVERkE5QTQxNgotOjEwODc5MDAwRjVCRkY2NzBGRDI4RTBENEZBQ0E4MkRGNDE5Q0JGRUMzOQotOjEwODdBMDAwNzBDMDAwM0REQUI1QzkxQzc1MDdEODZCODczRDA0RTQ3RAotOjEwODdCMDAwMzc1MUNEM0Y3ODY5QjlFQjk1MDBDNjMzQkEwRTVGQUI0MAotOjEwODdDMDAwMTgzNkZGQzQzMzJFNzhDRTdDQ0Q5QTFCQTZGRENERUM5NwotOjEwODdEMDAwOEU5N0MxMTZDQTJEMzdDQThGRDI3REEzREQ3RkY1NEE4OQotOjEwODdFMDAwRTUyODkwRkJDRDYwQ0Y0Rjg0RjE2MjUxRjA3RjI4OTE1NgotOjEwODdGMDAwMDU5NTJDN0Y1MEQ2RkQ2OUY1MzdFQkNGMTM4QTYzQkUwNAotOjEwODgwMDAwQTA0Nzk3N0I3REI2NDg4RjYyQkZDNUZENERBREExRjRGMwotOjEwODgxMDAwRkVFODA1OUFEODE3RDA3MTZENzI5MERBQUE1NUU5RjA4MgotOjEwODgyMDAwMzY0QjYzNzY0OEE2RUY5NzZBQ0NERjkzRTk3QkM1MjA4OQotOjEwODgzMDAwRUQ3QkY5OUJFMzQ3MEJDQkYxNzRGMzlFQzZGQjcxRkIxOQotOjEwODg0MDAwNTczM0M5MDMwRkVGQTc0QzMzMUNFQjA1NzgyRkIyRTU2NAotOjEwODg1MDAwQzU4RjI2Qzk4RDkwMjc0QTQyMjE3NzNDM0FFRUIzQzc4RgotOjEwODg2MDAwQTNBQjBFRUQ4N0Y4NzNFRUQ1RkJGMjAxRkUxMUQyQUM4RgotOjEwODg3MDAwQkY4Nzc2M0M4OTlEMUJDMDhFNzVDNzlGREQ3OTg5OTkxRQotOjEwODg4MDAwRTJEMUJFNTBDRDkxMTRFOURGNUZGRkY4QkI4OTc5MjhCMgotOjEwODg5MDAwQ0Q2M0U2RjkwQTZERjFGNzY2QkQ1RkZDN0RCRDQ2QzdBNQotOjEwODhBMDAwNkRDOTgwODcyNURBOUM3RkQyODBCRTY0OTI0OEY3N0RBRgotOjEwODhCMDAwMEJBNzlCQ0I0OUY3NTMyQjYxOUUzMTE2QkY5RkVEODJDRgotOjEwODhDMDAwRDdBNTFDNUUzRjNCOUYyRTlDQUE5RTBBNjJBODFFMEE0QgotOjEwODhEMDAwREZCOTRCQ0M2NjEwODFGMzk3RjdBQ0REMEY3QzI2RTI1NQotOjEwODhFMDAwRjdENjQ0Rjk1QzcwRThGMDFCNkU1RUM0MkFERkUyN0JDOQotOjEwODhGMDAwQjUyMUU0NDUxMDNEMjdBRDVFRTg5Qjg3QzVGNzU1NTE4RQotOjEwODkwMDAwREMyNzc5Mzg5RjFENzhGMzY2MUZDODJEOTUyNDJBMEIyNAotOjEwODkxMDAwNjFCRkM0RTM5QTk4NkY0RkZCQ0I0QkY5ODk0OUU3QUIzMgotOjEwODkyMDAwRTkwNkRBREI3OUE5RDUwRkRDMDQ3MTc1N0QwQ0M2MjM2NQotOjEwODkzMDAwOTRCMzk3QTBGRkQwRERBRjEyOEQ1OTk4MEYxNjMyMkE0RAotOjEwODk0MDAwMTREQjM4QURCOTJDM0VBM0VBRjFCNDc5QzNBQkI0QzQ5RgotOjEwODk1MDAwMTNCMDVFRTVFQzY1RDhBRkVDOEI2MTNEMTIxQTVBQkVFMAotOjEwODk2MDAwRUM3N0FFOEUyMDdDN0QxNEJFMjAxRjExNjRCMDJFOUU0RAotOjEwODk3MDAwMzc3NUY3RDUxMUQ0MzNGRTgzOUU5REYwREQxRjYyNzlFNAotOjEwODk4MDAwNTRCN0NCODExOEU0NTlCOUYzQTgyQURFNkEyN0QwNUYxRgotOjEwODk5MDAwRUIzMTA5RTMyODgyN0U1QjBCRUJDRTAzMzkzRTQwMUVCMAotOjEwODlBMDAwRDU0QjlBQ0RBRjlFMjk4RkNBMUZCQTExRjNBOEZDOUY1MQotOjEwODlCMDAwMzY4RkNBMkE5ODA3RjY1ODZCMzYxMTc5NTU5NjQ0RTdEMAotOjEwODlDMDAwRDFDQUYzQTJGRUEzRjVBNUI5QTA5RjVBRkRFMkZCQ0I0NQotOjEwODlEMDAwNzM0RDdCRDk1QTdGMDBDQjNDRUY2QUI0QjdCRDA5RUEyRgotOjEwODlFMDAwRTc4RTI2NzU5REU4Q0YzM0M5MzUzNjM5MUJGMUFBMDhDNQotOjEwODlGMDAwRTc3RkQ2Q0M3NzM1NDc5RTdDRDQxMTVGM0FGMEU2NjZBOAotOjEwOEEwMDAwMUZFODZGRkFBQzJDMDJGODUxQkEwMkJCM0QyRkQ1NEVDRAotOjEwOEExMDAwRUNGQTQ4M0MwNTFEQjUxNjBGMUNCRjUzQ0Y1RTg0N0U5MwotOjEwOEEyMDAwN0M1MUY2RTk0OUQzNEM1MzdGQkU4RkQ5MUY4MjdFN0Q5RQotOjEwOEEzMDAwQjkyNDA5N0FDOTY3MjQxRUI4MDlFODM5MzcxNDBCMzJGQQotOjEwOEE0MDAwQkFDNDM4NTk1QjA4REQ1M0ZERDZEMTU2N0MwM0M2REI2QQotOjEwOEE1MDAwQ0VFODA0Qjk1RUQwNzFGRkY5NUZDNkU3NUY2NDYxNUM4MAotOjEwOEE2MDAwMjI0NDMwOUU5Njc5MUQ2NUI4OEU1NTlBMTlGNkRBRTA0MwotOjEwOEE3MDAwOTg3QjVFRkFCQ0Q0QkJCRDZDM0QyREYxRTUyQ0VGQUMxMAotOjEwOEE4MDAwREExOTg3MTU3OTFBQTI3RTUwNEExNDc4NDExRUU2QjI4NwotOjEwOEE5MDAwMzhBQ0VDNjNGQ0Q2ODcyRkFBMkE2Q0ZFQ0QyNkIyREM1QwotOjEwOEFBMDAwMDIxMjUwOTc3N0UyRDE0NjU1NEY2MkZEMTI3RkUyN0M2OQotOjEwOEFCMDAwQUYyMzNFRDdDREUyQkFBRTc4RTI3Q0U1MTZDNkRGODNCRgotOjEwOEFDMDAwRTA0RjlDQ0JEODBBNzFCNzg5MTA5RjhCRjJGMzdEMDZEQgotOjEwOEFEMDAwOEZEMzk5MkNBRjI4MDMzREI1MTUwRjFDODdFQTY4OENGRQotOjEwOEFFMDAwNjFGQkJCMUFDQjU5QkU5MjQ0Qjg1RjNCRDkwNDc0MDJGOAotOjEwOEFGMDAwNkUwOTQ2RjczRjY4MDJCRTA5MkI4MjJGN0U4OEU1M0I1MAotOjEwOEIwMDAwMjU1NkJFQzlGQkNDNUNDODM3M0NGMEU2MUI1NUFCMjhFQwotOjEwOEIxMDAwN0RCNDlBMDFFNEZGQzFENkE3Mjc2NzIwNUU4NzNCNEU0QwotOjEwOEIyMDAwRkZGNUIyNzFEQkNDMTBFRTc3MDc1QkI3OUU2MkUzMEUwOAotOjEwOEIzMDAwNzUxQzExNUZFQjVCOUYwRkM3NjkzNTA2MTlBNzgzOEQwNQotOjEwOEI0MDAwMzNGOEZDMTk5RkRDQjE3RjM1RTYyRkY4MjhGRkZCRTlFRAotOjEwOEI1MDAwN0JERkVDMUU5MjQ4RDM3RjE2RTc5RjAzNkY3QTUxNUU0RQotOjEwOEI2MDAwQjdFNUIyRkMyODRGNDlDODY0NEU0MDY3RkY5RUQyQkNBRgotOjEwOEI3MDAwMzk3OERFQTFFQzAyQ0M5RkJGNjM3RjNCQ0ExOTBEQzZEQQotOjEwOEI4MDAwQTE1NTNDQjFEMDRBRDYyRTYxQzIzOURCQzgzQzgyRjEzNgotOjEwOEI5MDAwNjc0RjQ5REUyQTc4REY0MDNBRTI3MzQwMEY5N0NCMkNDQgotOjEwOEJBMDAwM0ZCOUE0RTQyNkU4MjcxQkY4OTJDRUEzRENDN0Y2OURDNAotOjEwOEJCMDAwOUU5MjhCNkY4NkZBRkJBN0JGOUU2ODAyMzg5NTMzM0E2OAotOjEwOEJDMDAwMjAwN0YzMUQ3MDZDMzU4QUM0Qjk5RDAxRjlERTUzRUVBMAotOjEwOEJEMDAwOEM1QjEwOUYzM0ZGOTNBODRCMzA2RTRFRTU0Mjg3RDdENgotOjEwOEJFMDAwNjY1NzUyQkQ3ODFGRjIzMzI5QjNDMERFREJGRUI1NkI4QQotOjEwOEJGMDAwNjM3NjdFRkU2NzJERkUxRDU2NUZFNDZCMDkzRTRGOUYzOAotOjEwOEMwMDAwMzdENzlBMkJGMkU2MTIzRUE1MENDRTI5RjVFNjUzMkY2NAotOjEwOEMxMDAwQ0NCN0U3N0ZGMTdDRUE5MEM4QTdFNkYxQ0MwRUZBNUYwQgotOjEwOEMyMDAwQkFGQzM5RjczOUM2Q0YyQjlGRkEyOTJGREYwRjA3QzlCNgotOjEwOEMzMDAwNThDOEE3RkU4OTg3QzQ1MjkwMTdGMzZCMjUwNjc5MzE2RgotOjEwOEM0MDAwNkVGQTcwRjdFNzNFMDdEMDZCOEY2NEUwRTdGNzAxMzgwNAotOjEwOEM1MDAwMzZCOTk3OUY3MEUxRUQ0NjNGQzZFN0M0NzhDRjgzN0M3NQotOjEwOEM2MDAwMkExRDlDNEY0NzU3M0JGQjE5NUJFNzNDOUY3NTVFODM3MgotOjEwOEM3MDAwMzM1RTU1NjgxNTM4RUE5RkRGNTZFNEY4M0VCRUUzMDJERQotOjEwOEM4MDAwQzdGNzg5Rjc0Rjc1OTQyNzI1MkY3NkQ0RkZEMjlFMzlFMQotOjEwOEM5MDAwOEVGMkU0Q0UyQjFERjUyRkRDQkJEODUxQkUyOEI1Q0MwRgotOjEwOENBMDAwNTE3RkRBQzExQjFDREZBNzFGNUFFM0Y4M0VGM0M4N0FENQotOjEwOENCMDAwNDc3OTU2RjczNzFERjUxQkE4NzkwMkY5MkM3MDQwMDA0QgotOjEwOENDMDAwRjdBQkRCNDZDQjc2RkE2Q0NGQTY3QTI1MEJGM0I4MzUzQgotOjEwOENEMDAwOUVENDhGRjE2Njk2OEJEQzk3NjdFMDZFQTcxNDZCQTYyNwotOjEwOENFMDAwNEVGOTU3MzEyNkNDRDMzMUNGRjA0NkU0MjNBNTM4NkY2NwotOjEwOENGMDAwOEU4MUVGNjcyQzAwQkYxMzI5NjNFN0I0NDRGQ0RBNTM3RAotOjEwOEQwMDAwNEM1MjdFQzhFRjBCQjlGMEVCOEE0QjdCOTQ2RDI5QzBCNwotOjEwOEQxMDAwQjM3NkY0Q0IwN0E1NDg3RkJDN0FBMkVFN0NDNkExQzU4QQotOjEwOEQyMDAwQjU1NUUzQjNFNTA3RTRGOTM4NUY4Q0E1N0M4MTdFQzREMwotOjEwOEQzMDAwOEYxNUQ4Qjc5MDc5NjFCNDBGNkNGQjFCODRBM0Q4REY3MwotOjEwOEQ0MDAwNUNFNjIzQ0QwMDUzQzExNzE1Q0I3QjQ2QkY4MEQ1QzQ0RAotOjEwOEQ1MDAwQkVDNjJCMEYyNzJGQjlCRjVFRjFBMkREMjVFNENDNjA4NAotOjEwOEQ2MDAwN0E0NTQ5NEU3M0U0MjFCODlGNTRGRTk1Rjk2MDlGMUVFMQotOjEwOEQ3MDAwNTk4NkYyQTg3NzVGRDAyQjFGRTMzM0UxQkI0NzhEQTE2MwotOjEwOEQ4MDAwN0NFQzk1N0Y3QjBBMUM3MjYxQThGNjk5NUI0RURGMDUyRgotOjEwOEQ5MDAwNDIxRkNGMDVBNTk3RDcxMUM4MEJBMzcyRTlDRUFCQUY4MQotOjEwOERBMDAwQzIzODE4QTkyNzhFRjM4MDc5NTU3MTFGRTgzRDZBOTc1QwotOjEwOERCMDAwN0RDNTY3REIzRjQ3Q0E5OTdERjZGNzY2QTc4NjYwQkQyQwotOjEwOERDMDAwMzZGOTI3RUM1NTAxRDcxMTg1NzU3MThDRUI4NTY1MDI1NQotOjEwOEREMDAwRkJBQUE2RDlCMTI4RjgwMURCQTA4QTZEOUZGNjVEREY1QQotOjEwOERFMDAwRjk1OEJGMzlBNEM5RTAyRjZEM0UzODFGRTMwMzVFN0ZGOQotOjEwOERGMDAwREMwNzc5Q0U0RDlFNzgyNUFDQUIyOTVCRDZEM0U1M0IxRAotOjEwOEUwMDAwNkRGNjMxRkY4Q0Q2MTA5Q0I2N0IwMEZBRDAzNEJBRUZFOQotOjEwOEUxMDAwNEZCM0RFN0ZGMTMxQkY0QkIzQkVGODIwRThCOTlDQjA1MQotOjEwOEUyMDAwNjY0MEZFNDRFQkZFNTk4QjMwNUY3N0ExQUFDM0JFOTYyNQotOjEwOEUzMDAwRDA0RERDM0JCNkI4MjIyMTcxRjQ2NzY5QjkzMkVBNDVGRQotOjEwOEU0MDAwQUQyMTgyRTMwRjM2REY1QjdEQ0NDRkUwNkRGMDBGMzhENAotOjEwOEU1MDAwNUZBRjk2REU0RjkxNjlCRTlCNjFCRUI5ODNDRkQ3MEJFMgotOjEwOEU2MDAwRjM5NTYwRkMxMDhFQkZDOUM3RjBFODg2QkY4Nzk4NkQ4OAotOjEwOEU3MDAwRjM2OEJEOTY2MzVGRUUyODQ2OEE2MUY5N0FGNzJFOUMwNwotOjEwOEU4MDAwOEE3NDRBMDVCNTgzN0VDNTNFODJEMkVGQzM0MEJGNjI3NQotOjEwOEU5MDAwRkYyRUNFQjNERUUyNjM3OTA5MDJBRkM0NjBGRTg4MTExMwotOjEwOEVBMDAwMDkxNUY3QkQzOTA5QjZGRkVEOTMxRjhDOEU3MjNDMzE2MQotOjEwOEVCMDAwODJFN0JGQzZBODE4OTcwNDM3OERERDhGQTFGOEQ5QkUwOQotOjEwOEVDMDAwQzc3QjY5MENGMUQ1RkUxNTk1NkMwMjdBMkJBNkVCODE1OAotOjEwOEVEMDAwNzNCOTA3NTlEQ0E5REQxM0FCOEE4N0ZBQzYxM0VEREYzNgotOjEwOEVFMDAwRTFGQjQwOTUyQ0M5QzI3QjUyOTQ4NUQxNzRGNjY3MkY2MwotOjEwOEVGMDAwOUQ3M0I4QjlFNUVDMDExRkNGQzNDQTI3Rjk0Q0NFOTZENAotOjEwOEYwMDAwMkU4NUEzNDQ5OUZBNzFEQjFCMEREQ0FGM0NGQ0YzMjlFMQotOjEwOEYxMDAwMUQwOENGRjYzMUY3QTExRDJERkM2MzI0NUEzNjg4QkZGQQotOjEwOEYyMDAwODdDNTRCRkJGMEJDRDQ0ODUxM0NBQTU3NEM0NUE3NUZDMgotOjEwOEYzMDAwN0IzMUM3NzM5RDJCOUY5N0UzNTlFMDU3RjhFRDQ5MzQ3OAotOjEwOEY0MDAwMTdGOTVBRTA1QjAxNzgwMkFFOTREOUQxODFGNDk1QzI0OQotOjEwOEY1MDAwRjlDNjBEQ0Y1M0ZGNERFMTc5MDRENjAwNzQzQjk2QUVCMAotOjEwOEY2MDAwMUZGOEU2QzAxNTA0RTM2MDJFN0UxNEVEMDREREJCRDdDOAotOjEwOEY3MDAwMUZGNkZGRjc1RUJGQTA4N0NDRjVBREI0RkIwRjExRDc4RQotOjEwOEY4MDAwMEQ3MzdBRjM3MUJERjk0MkY5REI2RDcwOUU0NENENjVDNgotOjEwOEY5MDAwRkJERDcwNzlGM0FEMzI5Q0MzMjA5NjBFRkVCNUIwMzg4MAotOjEwOEZBMDAwQkY1M0U2QkM3RjI0NTBFQURDN0ZGODVDRjc0RDc4RjhDRAotOjEwOEZCMDAwRkVBM0RGRkQyQURDQ0UxMkU3RjlEREYzNzdFMzZCQUUyQgotOjEwOEZDMDAwM0Y3RDFFMjYxOTkzREVFRkVBOEVDNzg5Rjg4NkM4ODM5NwotOjEwOEZEMDAwMTU3MTAwODQwMzVEQkY2Nzk2MUM0N0Y5NTc0NkNDOUQwOQotOjEwOEZFMDAwNjlFNEQzMzIzRkQzMEI1RENGRjkzMTRGMjI1Q0E1QTFBOQotOjEwOEZGMDAwM0ZCNkEwMkM1NTAxRTU4MjNBMTIwMzNENzFGMUYxNDNEMQotOjEwOTAwMDAwMjQ0MTNCQkQyMEMwRTQ3RTQxNTk1MjAyQkY0N0MxNDlDMwotOjEwOTAxMDAwOTYxN0I4OURDNzJCMEJFQTkzRDI0QURCMzg5NjlGRTk4NwotOjEwOTAyMDAwQUQ4RkRFQkMxREU1RTM3MzYzNTk1RUZBNkQxNUNDN0UzMgotOjEwOTAzMDAwM0IxNEJEQTFBMzAyQzYyRDY3RjlFNDYxQkE1Rjg0QkNFRAotOjEwOTA0MDAwQjFGMDExNkYxMkVEQURCMjZFMDI3RTU0QUEwNUFDMzBENAotOjEwOTA1MDAwRkQ3RUJDOTE0Q0JENzEzQ0U0N0RGOUYwNzlCMjUxQzcwNQotOjEwOTA2MDAwRTc4MUIxREFGRUNCNjlCREY1ODUwMTAzRkE2RDI5MEEwNgotOjEwOTA3MDAwQjBGM0JENjExRkVFRjdGRjlDRkQ3NUY0QUI5RTZFOENFNwotOjEwOTA4MDAwNjJGREI2NkY5QjY4NTczNEVGM0Y4MTdFQzNBMDM5MkREOAotOjEwOTA5MDAwQzZGQ0E4QTY0MkNBNjEzRTg3NENGMDczMTAzNTY2MkMwOAotOjEwOTBBMDAwODZFRjA3N0U4M0Y1MTQyREYxMUIwQkVDOTM2NTFBRUUwQQotOjEwOTBCMDAwRUYwMTBFMTA0RjY4RjJCMzdDQjlDREZFQkE2ODM2M0NCMgotOjEwOTBDMDAwMEJDOThBNDU2OUUwQkQ4MkVCMUQ0QTUxOEE5NkQ3OTc0NAotOjEwOTBEMDAwODdBNDk1QTc5NDJDRjAyNzk3OTE0RUM4NzNGN0I0MjREMgotOjEwOTBFMDAwMkI0MDRGOTNENUJBMDFFMzhDRjEyNTJCQzA3RjNDQTZEMgotOjEwOTBGMDAwNUE4RjgxMEY1RDJCNjdFNzQ1MDQzRTNDN0UxMjdGMjIyRAotOjEwOTEwMDAwMDRGNTUyRDJBRDc0REM4OTAxMURDNzI5Mzg5MkM0QkM2NAotOjEwOTExMDAwRTU4RkRFOUM5OUQ2RkVCRkZENjgwNTdFREZENjU4NzlDNwotOjEwOTEyMDAwNzg5RThEOUY0MzE5RTI5NTFCOEJFNzNDRTBBN0UzQkQzQQotOjEwOTEzMDAwRUE2N0ZDOUFBOTVGRjExQzZBQkZBRjcyM0EzOUYwRTZBMAotOjEwOTE0MDAwQzQ1MTYwNUYzNjY0QzhBMzU2NzQ4QUE3MTE0QzNFODEyRgotOjEwOTE1MDAwM0Y2MkZENzg2MzU0NzZDOERFMEY4Mzg3RjJEQ0IzMEM4MAotOjEwOTE2MDAwQUZBNThDM0U5QjdFM0MzMTBCRkE3REZFQ0RBNTNBRjgzNwotOjEwOTE3MDAwRkJGRTk0NUI4Q0ZCODY1MzRGN0I0REIwNUY0RUU1OTBCRQotOjEwOTE4MDAwNkFDQ0I3N0M3QUU2OEJCMDNGRkM0M0UzQzExQ0Q1MjZBMgotOjEwOTE5MDAwMTc0RkZERTg5NTE5MUVEQURGQTkyNzVGOTlBMTIyNzMwMQotOjEwOTFBMDAwMjUxRDc2RUNCQTczQUZDRTAwM0JDMTlBNDM0QUVBRTg3QwotOjEwOTFCMDAwQjM1NkQ3MDhGNDVCRUI2M0VCMTA3OTcyREJGM0I0NTY2QwotOjEwOTFDMDAwNzg1RTE5Q0NDNkY2NzlBM0U0M0JBMUFDRjg1RTFERjczNgotOjEwOTFEMDAwRUUzNDVDMzc4QjJCRjAzODBFNUQ1RjUzMDhFOTVBQTdFRAotOjEwOTFFMDAwMUIxMDg4MTc1QURFNzExMENGN0FEMzhCRjRGNzUxMjFGOAotOjEwOTFGMDAwMjkyOUJDMTBGQzgyMEFCNkVCNTk0RDkyOTA0RkExQTVDQgotOjEwOTIwMDAwRUE4MDNEODlGRkU1MjQwMUJFMDlCRUE2RUY0NzVBRTM4NwotOjEwOTIxMDAwRjdDMURERTlFN0Y5MEYzQzhGNzBFMzlCQjc0RjA0RjgyNgotOjEwOTIyMDAwMDhCOUFFQ0UyNTE4Q0ZFOEY5OUEyRjA5RjZFODNEQUE3RAotOjEwOTIzMDAwRjE5REU1NjAwNzVFQTdFMjNDNjgxOUNGMUJCOUYxQjM2OQotOjEwOTI0MDAwM0M1OEU0ODhFM0U1RjBGODg0QzA2QjI2M0FEOURBNDg2NAotOjEwOTI1MDAwNjJDNTE0REUzRjZCRjRDNTYwRkM3RDhEM0E5NjdGRDIwQgotOjEwOTI2MDAwMThDNUYyREU0NjAzOUY0RjM3OTZFMEIzQUIzMTg2REY3OQotOjEwOTI3MDAwRjczNDk2RTM1M0U0RjVFMUQ2NUU0MTdCM0E1RTAxN0EzQQotOjEwOTI4MDAwRTgxQUU2ODdEMzBERDk4NDdDODUyQzk1RjhFMEJFMjZCNAotOjEwOTI5MDAwRkRFOEJGNTVDMTdFMUJFNDRBNTYwRUYyQkQwNEVENzNENgotOjEwOTJBMDAwNzk5RURGQzhGQzM5RUQxNTQ2OUY3QzE1RjJCNEM5NDNBMQotOjEwOTJCMDAwMjQ5MDQ3RDYyQ0U2NjcwODQzN0ZCNDdERUUxMjQyREU0OQotOjEwOTJDMDAwQjZDOUY1NzNGNDlGQjc0QkY4RkFFODdDQjI0Q0U3Nzc3MAotOjEwOTJEMDAwNzdGRDg4NEExNzkwRDNCRjFEOTU4QjU4RUVFQjM3M0QyRAotOjEwOTJFMDAwRkM4NkZCMDQ3RkY5REIzNkZBREUzRTlEQUU5QUQyRDFENgotOjEwOTJGMDAwNzY4OUM5QjEzQkY5RjczQkE2Q0ZDOEJBMDFDQUIzNjZCNAotOjEwOTMwMDAwNjQ4MTVDREYzRThCMTgzQTg1RTM1RDg2NkM3OUIyRkE0NgotOjEwOTMxMDAwRUFFRjY4M0M5ODM3NkYzQ0Q3NDEyMEE3RUFGNTlENUJBMAotOjEwOTMyMDAwNkNGQjk4MzExNjU5MTFCN0QxQ0I1RDc1NkFFNTJFQjQzNwotOjEwOTMzMDAwMzMxMkY5OEIyNzYzQkUzMUY3NkJFRjlFNjc4RUMxN0VDOAotOjEwOTM0MDAwQjEzQzIxRjBFMjNDOEJFQjE1OTAzMzk3OUQ2NTdBQThGOAotOjEwOTM1MDAwNTdGRjdDQ0NERTBCQkRBNzcxRkM2RjlCQkQ0OTg5MDAxQwotOjEwOTM2MDAwOUY4MDNDMDU3OTU5OTYyMDczRTgzQzQzOTdCMkY4RjcwMwotOjEwOTM3MDAwQUM3NzUzMDRGMkZCQjQxODdEMEZGNkE4QzZGMjREMEE4MQotOjEwOTM4MDAwQTI0OTA5Q0EzRkYyQzc2NzA2MjBFRjNERTdGRUQ0MkU4NwotOjEwOTM5MDAwOEFFRjBGQkJCQzA2QzQxQkJCOUVGQjBCRTY2NzI4NTNDMgotOjEwOTNBMDAwMzQxRkYwNzdDMUJFNjM5OEI3QTRDOEREMUFFQzc4OTc3NAotOjEwOTNCMDAwMDUyNkNGNTdDMTlFODU4OTYwN0M4MDJBNkE4QTY3MjVFOQotOjEwOTNDMDAwOEZBRjhGM0NENTMyMkYwNEU3QkUxMjI3RUNGNUI3MDdERAotOjEwOTNEMDAwMTJCN0IyMUQzMzMxN0Q1MUNBMEY3RUQxRkU4MjE2ODA4NQotOjEwOTNFMDAwQzc1NjBGMkIyRjBCNEM2QUIxQjA0Q0VCNjdCMzcyMzNERgotOjEwOTNGMDAwNkRCRjM1QkIzMzJBNjc0M0QyRDRDNDk2ODM5NzQyNTk5NQotOjEwOTQwMDAwRDQ5RkQ4NjJDRDI2RTQxQUFFMEY0ODI4NTEwOEZDREU1RQotOjEwOTQxMDAwNUJENjY5Mzk2QzJCQUJBQzRDN0NFQzI5RDZCQkVFQzA2RgotOjEwOTQyMDAwNUY1RTFDNERFMTUwQjM0RkVBQzQxMERGQkU5RDEyQUMyRAotOjEwOTQzMDAwQkI2MEVGNEU5NEFGMDU0OTgyRkJGRTgyQTQ5NDg0QTNFNwotOjEwOTQ0MDAwOUQ3QjFBMEZFQUNEQzJCOTI2RjA0MjQ1QzNBNDI4QkJDMgotOjEwOTQ1MDAwNUY0ODRCN0E2MkIwQkQ5Q0M0RUYwRjExNzRGMTc0OTBGOQotOjEwOTQ2MDAwRTlDNzQ5NDlEQURFMUU5Nzc2REQyNzMyODlERjU3ODM1RgotOjEwOTQ3MDAwMjAwNTc5Qjk4RDlEMDc3NkQzNzkyOUVGQUY4MTU4NUJBNwotOjEwOTQ4MDAwRTAzQzJFNzlDQ0EzNjM3QzlDRkJEOTRGMEFCQjg5RkJDMwotOjEwOTQ5MDAwNzM2RUUxMEUzQ0NGMjYyQjcwMDFDOEJGOTUyQUZBODE2RQotOjEwOTRBMDAwRDcxNjI2Mzc1MjFCOEFBQzdEQjYzMDQ2MkQ1NkQyRTJFRgotOjEwOTRCMDAwNjdGNEIyMzZCQjMzNkYyQUM1Njc0QkI2QjNEQ0M0RjM2RgotOjEwOTRDMDAwRTdBM0Q5NTYzNjlDRDdBREQ5N0JGNzM4QzhFRkE5MjE4OQotOjEwOTREMDAwMURENzdGMTNFNkZCMzI4Qjg3OUZEODNGMkJFQjEyNUFBOQotOjEwOTRFMDAwNUVGNzMyOEI2M0FDRUI3QTQ1MDNGQUJFMjdDMEYzOEU4RQotOjEwOTRGMDAwQkEyRUJBMTJENjU3QjM0RDI2NzIyMUUzNEI3MzIyOUQ3MgotOjEwOTUwMDAwQUVEOTcxMDE5Q0FDN0I3RUVCNUJGM0ZENjMwOTc5QTQ2MgotOjEwOTUxMDAwQzhENEU1OEIwOEU5MEU5RTY4RjE1MUZDM0ZBMkU5OTM5RgotOjEwOTUyMDAwODAzRUJBODMzRDJENDA1RjZCNjdDOTlDOUU3QTVFMzA1QQotOjEwOTUzMDAwNTU5RUZGNTgwMEUzNUNERTAyNzE5NkREQ0IyQUFGMDQzNgotOjEwOTU0MDAwNzMyQjRGNjZGQzRCMDkxMkUzREE0QTc2QjMwRkVDRjk0MgotOjEwOTU1MDAwM0ZCNkM4NjgzRjgzOEI3NDAzODU3QkIxNEEwRUFBRjQ3QgotOjEwOTU2MDAwQjk1REEzRjgwNDNFNkI1NTUxMUVEMkY3NkQxRUM0NEI3NgotOjEwOTU3MDAwMDdERTMzNDJEQUQ4M0QyREUzRjc3OTU3ODI5RDVENUNGMwotOjEwOTU4MDAwNjdBRTQ2N0I1QjJGNDUzRkMwMzhEMkZCODM3OTEyRTczRAotOjEwOTU5MDAwMTEyNjdGMjdFQUE0NDJBNUY1NjYwNTBCMTE3RkM1NTU2NAotOjEwOTVBMDAwRDdBRTg1NzY0QTc4NDkwMEY4M0Q0RjQ5NUFEOEZGNzdCQgotOjEwOTVCMDAwOTkxQ0RFMkUyNzNCN0QyMDk3MjM0NTg4REZFRDExNDY0MQotOjEwOTVDMDAwMTdENjNEQTU0ODE3QkJFNTM5MTc4MDVERDQyMkFEREMyMQotOjEwOTVEMDAwRjIwQkMwNkI3NjExOUU3Qjg1RjdFQjYxRkQxQzlGNERGNgotOjEwOTVFMDAwN0FDQzA3RjhEQkNERjFBOUVDOTQyREM4RDcxNEVGQjdFRQotOjEwOTVGMDAwNEEzN0FDMDZCODlFRDg1MjNGREY0N0UxOUFFNzM1REJFMQotOjEwOTYwMDAwNDY1MDNDMUNERjUyREYxMjlEODU3ODI4RjJEMUVGQzcwRgotOjEwOTYxMDAwMDNGNTJEM0U4QTk3REQxQkNEMDJERDU2OUVGODA5OTU5OAotOjEwOTYyMDAwRUE0OEI0RjUyREU2NkNGMDlGRENCNzA2OTQxMEZERkUxOQotOjEwOTYzMDAwMDJGODNGMUVDOTExN0NDRkJFMTcxN0Y1Q0ExMTEzRUNGMwotOjEwOTY0MDAwRDIyNkFCNEZBRUY4QTg1RTI4QjZENTlGNDdFNUMyMEYyRAotOjEwOTY1MDAwMUU1MjEwQUZGRjRFQzcwMzM5NDFENzYxMDFEREY3NENGMQotOjEwOTY2MDAwNTJEMTJFMDhEMEI5MDQ2ODM5MzBCOTA4RjM2REU5QkE3RgotOjEwOTY3MDAwNDkwMEVDODZDOTJBRUE3OTExQzdEMTI2Qzk2ODM3NDM1RgotOjEwOTY4MDAwN0RBMDg3NDA3RTExRTZDRjUxNzkxRDg3NzMzRTRBOTRCNQotOjEwOTY5MDAwQzU3NTE0NjU4NzQ5Nzk5ODA0NzlGRUJFQTQyRkMyRkI2RAotOjEwOTZBMDAwNDhGQzI1QjZCQzAyOTBCRkFFM0MwNEM1NTUxRUVGRUQ4QwotOjEwOTZCMDAwQ0U5N0E5N0VDRDNEQkE0ODFBNDdGMUYyNUU4MEVGOEI3NgotOjEwOTZDMDAwNzJFOTNFOTZCRTdGM0ZDMEZDNDBCN0M3QUQyRjQzQkU5OAotOjEwOTZEMDAwMEMzMUJBRjM1OTNDMkEzRTE1OUVBM0FFMkIxRTM1OTA5MQotOjEwOTZFMDAwRkZBNUZGN0UzNTg2RjZDQkJENjNENEI0Rjk2MEZGMUFDMwotOjEwOTZGMDAwNjRGRTQxRUZEODYyQkM1N0EzODE1MEZFMDdCRTA4RjE1QgotOjEwOTcwMDAwRkJGMkI4RkNGMDcwN0JDMTdENEU0MEM4MTM0RjM2NUI1NgotOjEwOTcxMDAwNjM3REZCREM1MTM5QTFCRTczNzA0QUM4RjQ4MTNDRDgyQgotOjEwOTcyMDAwQUY0RkNEMDI3Qjc0M0M5NzUzQ0RBOTU5NUYwNUJCNDUyNAotOjEwOTczMDAwRTVGMjYwODc5RjlEQ0JFREM5MjY5REJCMDhEOEJGMzE2MAotOjEwOTc0MDAwNjJDRjRCMTBGMjYwNUJBMzBGOUYwRjVGMzYwMUUzOTc3MAotOjEwOTc1MDAwMEY1Rjk2MzcwN0UyMTUwNzJFN0UxRkY3QkY2Nzc2MzAzQgotOjEwOTc2MDAwRkUzRDczRTgwNUI4NEI4OTlDQjFBOEI2MzExODU5QTFFNAotOjEwOTc3MDAwNUYzRTc1MkZERTE3RjI3RDM1N0UxN0U2Q0I0M0JFMEVCQQotOjEwOTc4MDAwOUREMjVERDlDRTNDQ0M0NzM5NUNDRTA1NzhERTgwODc1MgotOjEwOTc5MDAwN0QxN0Y3NzhBODY3QkY4NDdFRTA2RDdDM0RCRUM0M0MzMgotOjEwOTdBMDAwREM1NzgyMUIwRkNFMURGQjQ5MDdERUM3MjRFMEUwQkU1RAotOjEwOTdCMDAwQkY0MzNEM0I4NUY5RUIwMzZDNUYyQUYyOTdEQzc5NEFBNgotOjEwOTdDMDAwNjIzRUZCODIxOUVFMzM3NkUxNDNGODM1MDQxRTQ0RkIxQQotOjEwOTdEMDAwN0FDOTFDQTUwRjQwMzdCNTY3MTU5MkI0RTU4NUY0OUQ4RAotOjEwOTdFMDAwREJEMEYwRkQ2OTM4RUY5MjA1RjdBRjI0M0EyRTI5MDQ1QgotOjEwOTdGMDAwM0U0OEEyOURFODBGMzUzQkVFNzEyNTUxQjVDNzdFQkVCMAotOjEwOTgwMDAwMjRFODNBRUZFMkU2MTdCODNGMThGNEI0NjYwQzdDQUVGMQotOjEwOTgxMDAwRTU3REJBQ0QxNTc5Qjk5OEE3QUU5MjA3QzBBRTNEMTVEMgotOjEwOTgyMDAwN0M2QjA2RjhFMzZBQTk5ODAwNTczOTUxMkQzQzRGN0FCMgotOjEwOTgzMDAwOUFFRjRCRDQ3REI3RTI3OTFFMzEzRkUxOEYxM0U1OUE2MQotOjEwOTg0MDAwQkQ4QkQwNEY1N0JCM0I4NEU3Nzk2QTkyNEMwRUFFRjM4OQotOjEwOTg1MDAwNTkwN0JEQjIzREVGRDY0QzQxQkVBRDY3MkZFQjZGM0MxMwotOjEwOTg2MDAwRTA4MEQyQzc4NzdBNzUzRUFDM0ZEODcwRkU0QzM4NjcyRgotOjEwOTg3MDAwOTIyN0Q3OUQzNzBFRTBBMzMyM0NDMDdFRjlDOTEwOUVENwotOjEwOTg4MDAwRDM1NUJEQjZGQjUzREZFMkZCRTM2NURDMUUwOTEyNEI4QgotOjEwOTg5MDAwMDY3ODJBODE1ODM3NjE2NzE2NEQ5NURBNDc0QUFGREM1QQotOjEwOThBMDAwOUJEQzAyRkNCMERENjU2RjZEMEZCMDcyNkI3MDcyNEJBQwotOjEwOThCMDAwNzMyOUVBNjc5NDhCQ0IwMjNGNDM3QkE4QzUyRkNBQ0Y5RAotOjEwOThDMDAwQTI5Q0RDQUVCMUZCM0FBQ0E3QkQwNkU4M0REQTFFQ0ZFOAotOjEwOThEMDAwQTc1QkNCNEE1MDdGMjg0NUE0MDBFMDM2MEYxQzJEMjAwMwotOjEwOThFMDAwRkY5RUY2RUUwMjNGQzM4RkZDODk2QjAyMzZCODlEMEFERAotOjEwOThGMDAwMUYxOTA3RkJDQTM0RkQ1OThFRkVDNjBEQUYzRjNBN0VENQotOjEwOTkwMDAwMTdFMDQxN0M5RjE3QjkxRkZCQTdFREQwREY0MUM2MUNCNAotOjEwOTkxMDAwN0E4QkRBQkEyNEVGNjkyRjlFMzNEQ0UxNzFEQURCRTI2RAotOjEwOTkyMDAwRjkyMEU3Q0IzNkQ3QkQxREJFNDRCMzA5OUI3M0MxOUY1OQotOjEwOTkzMDAwRUU3Qjk2MDVCRkFBNjcyNzM5RjJBNEM2MDc1OTNDNUJBMAotOjEwOTk0MDAwNTU0RDcwNTVEMkVGQTVFQzdCODBEMTQxMUJDRkM3QzlENwotOjEwOTk1MDAwM0M0RTRFODY3MTlDNzFCQkZFRTNDQ0UwNzI4MkYwN0Q4MgotOjEwOTk2MDAwQUNBQUY3REVDQjM5NDBGRUFCM0JCRUU4OTY2RkJENEZFRAotOjEwOTk3MDAwMkVERkYyMzkzREM3QTVDNEIzNDE1QTVFOTNFQzVDMTBBQgotOjEwOTk4MDAwNjBGQzM5MDVGODczMzVBN0QzOTIzRDc3M0YwNzZBRkQzMAotOjEwOTk5MDAwMzE5RkY5NjdEODM3QUNGMjk5MTcwNEE3MEY5RjdGQkFBOAotOjEwOTlBMDAwODM2MjNERkRFNDE3QjNDQkFBOTk5RDVCREYzRUVENEE5MAotOjEwOTlCMDAwMjhEN0RGNTFBNDVCNjlFMjQ1RTI1OTdEMzZFODkwNUYyNAotOjEwOTlDMDAwRjc3MDdGNTFCNTZBQTExQ0FCM0UxQkMxRUY5RkRGNzhEQQotOjEwOTlEMDAwN0VDNzc5QjZGRUUzODVGMEJCMThFRjE2OTc3QzNFNzAyNAotOjEwOTlFMDAwRjE0QkRCQ0IyOTFERDczRkUxOTFCREI2NzFFQTlGRTA3QQotOjEwOTlGMDAwRTc4MEZDNTQ1RTNCRjlERDA0N0U1NzBCNDk2RjlFMjJFNQotOjEwOUEwMDAwQzg4N0JCMzQ1MTU2NUFDMTJFN0FDNDJFMUZDQUMxNkVBNAotOjEwOUExMDAwRUI2QjBGRjcxNkRFMTVFMEY1QUQ2MEZBRkE0MTU3RkQ3NgotOjEwOUEyMDAwMjJEMTdGMkVENjc3Q0Y0N0M4MUYyODgzOURBNjdFRTJGRQotOjEwOUEzMDAwMTVGMzQzRjk3NUI3RUNFQTJGNDc4QzNGMDZGQjEzRjY5NQotOjEwOUE0MDAwRkFCNzAzRTM1Rjg0M0IyNUVFQ0E0RTU2OEM2NkZFMUREMwotOjEwOUE1MDAwMDNFQzgwRUZBQkIxODBGRDNFQUM2RjczN0FBRDNFN0IyMwotOjEwOUE2MDAwQkUwM0RGN0Q3MDlGRTA3OEZGRkJDNkE4MjM1RkZGRTZBMwotOjEwOUE3MDAwNDQzRDlFRDNGODc2ODBEMTY1MzVCNUU4QjFERDhFRDExMQotOjEwOUE4MDAwOEUzQ0ZEN0ZDQ0UzRDNDRUUzOTIwQ0YzQjhFQzZGM0M3RAotOjEwOUE5MDAwOEY0MjA3N0ZGNkNEQTNEOEYxRkVEM0NFNjMxRkY3MEIxRAotOjEwOUFBMDAwM0ZDNzlGRjM3NTc2MkZDMDdDNDM0MkJGRjU3QzVBRDdFMgotOjEwOUFCMDAwNEY2OUZEQ0JGNEU5QTNDRkY5MkFCMTQyNzhDRjZEOTI3QgotOjEwOUFDMDAwREQ2MzQ2Q0JFMDBGRjhFQTI3QjdCRDdCMzlERTBCNkRDRgotOjEwOUFEMDAwNjIzRThFNTdFNEUzRjA3MzFFOUJDNzBDN0M1RjkxRkJFNAotOjEwOUFFMDAwRUYzQkI4QkYwNzMzRENEM0RBMTg2MkZCRUVCQjJGQkMwOQotOjEwOUFGMDAwOEE2MEZFN0EyODgxNzE4MkZERjkwQkEyNjBBNzdGRTc1OAotOjEwOUIwMDAwQzIxQTdDMzZFN0NGODg4MjNDNkEwQTdGREQ5MTZGNEVBRAotOjEwOUIxMDAwRjcwODY5Q0ZDMUZFOTFGNzRCQ0U3RTU5QjY5RjQ3RDk2MgotOjEwOUIyMDAwMENFNzUxRDJENDE3NzFCMUNEQkUzQUNDMDNGRkEyRDYwNwotOjEwOUIzMDAwRkJFMDE3QjRERTRCQzM4Q0RFMzZGQjEyMTgxNzZDOERCRQotOjEwOUI0MDAwN0UzMUYzN0YyNkM0QzZCOUZCQzJDQjA4OUJFRjY1MjlFMwotOjEwOUI1MDAwMTZGN0QxMENGQjc5NjBGMURDMUY5RTExODU3NTM2NjUxNwotOjEwOUI2MDAwMkY4ODAyM0QzNzY3Q0Y3MEFDNDdDOUIwOUU1NTYxMDY1QwotOjEwOUI3MDAwQTdDREZBMTdCQjlFQzM5Rjc5M0QwQkQyRTZDMUFBQjkwOAotOjEwOUI4MDAwRTlFRjE3NkIxNzc4OEEyNjkwQ0VCRUE4NzU5REZBMUI1MQotOjEwOUI5MDAwQUY2QjE0Qzc1Nzc1ODhGOTBEMzYxQjhDOEY4MjRBRkM0MgotOjEwOUJBMDAwNTc4NUQyRTA3QzM4RDhERjFEMjFDNTg2M0M5NDNDQkM2QgotOjEwOUJCMDAwREY3Mjc4NjVFMkRGNjU5RUU0NDg5OEQ3OTE0NkI2N0YwQwotOjEwOUJDMDAwN0U5RERGMjdGNURCRUFBNjMwRkFCNTVERTM2QzFFQjNCOAotOjEwOUJEMDAwMkIzQzkwOUZFMzdGNTYzQkNGQTcwRjI2Mzc1QTQyMkM1MgotOjEwOUJFMDAwNUVGM0I1ODRCM0RERDJBQTYwREFGQjREMjhGQ0VFMkEyMQotOjEwOUJGMDAwMkNFQzgzNjczRkZDN0ZDRTcwQ0I0NDhGQzM4NTVCNkJCRgotOjEwOUMwMDAwNzQ3ODcwMUI4QzBGQUFFMTkyOUJFOTgzQzM0REQwNUJFMwotOjEwOUMxMDAwQTY3RUZFN0ZBMUIzMDc4NzBFMkZBNEFGQkYxNUJDRkVBMwotOjEwOUMyMDAwNUVFOUVCMTk4MEQ3MTBGOEYyMUZGMDNBQzdGNUU2RDBERAotOjEwOUMzMDAwRTAyNUU0RDgxRThERERCQkU4RUVFNzQ0OThEREFGMzRDNwotOjEwOUM0MDAwNTFBQTNCN0MwNUM0MTdCRUEyQTBCRkY3RjA4RTc5RUJFQQotOjEwOUM1MDAwODg2Q0FGQzdGNEQ5RTFDQUI5RUIzMERGMzUxRUM0N0JERAotOjEwOUM2MDAwM0M1RjkzNjNGRjVFMDY3MTg3QzVBQzVEQkY3OTcyRjg5OAotOjEwOUM3MDAwQkMxNENFRTY3RTRCNjMyNEY4MTE1RThCNUYzREUwRkFBOAotOjEwOUM4MDAwNDhBNTZENUQ5ODk3NjlCQjhGNEFFOTBGREZDM0M0QjhEQgotOjEwOUM5MDAwQTMwQ0ZDNEQwQkQzQ0Y0M0UwMzNEM0I4QzNDNUU3NkI2NAotOjEwOUNBMDAwRjFFRjBGMEI5RjgzQURGN0Q5NzBEMTkwRTQ4NUQ4MzdEMgotOjEwOUNCMDAwRTQ5MkRFQkY5NzcxMDFDMDczOEZDQ0YyMzk4RUMyQUJENAotOjEwOUNDMDAwN0NCODlGOEM2MEE1QTU1NUEzNzYwMjlFQ0EyMjNDRUY2NgotOjEwOUNEMDAwNDkzM0Q2ODE5RkNDN0JGNUMyQUQ2MThBQjdEN0FFQzk3NwotOjEwOUNFMDAwOTZCQzM2Nzg3OTIzMENDRjMzOTZBN0I3MEI3MzIzM0NGOQotOjEwOUNGMDAwMkZCN0I3QkQ0NEUwM0U0NDc3M0Q4NUQ3QkI2NjM5QkIzRgotOjEwOUQwMDAwOTc4QUE4RTZEOEM1QjY3Mzc1NTM1Q0RGRERFREM3NDYwNAotOjEwOUQxMDAwMjJGOEZEMzUxRTZGNzc3RkNGRTJFRDk3MkUxOUI4M0QwMwotOjEwOUQyMDAwQTk2M0Y3Qjk1MEJBMUI5QkVFN0U0MUMxMUY5REUxNDQ2OAotOjEwOUQzMDAwMzQ0MjlGQUY0Qjg5MDdCRjAxNzQzNDI5QzRFMjFFMkEwNQotOjEwOUQ0MDAwMjk4NDc4QkRFODI3NTcyNTI5OERDMkZENUQ4RjMxMTZGRQotOjEwOUQ1MDAwRkNCNDY5RkEyOTFDQTg5RjRDNzAxNUVCMTFFMzAwMkI4OQotOjEwOUQ2MDAwQzJCRDJDNzRGRjg4RkJDNTMyOTM5MEQ5QjA0RkY0QzZBNgotOjEwOUQ3MDAwNkU2NTg3MEQxOTFERTRGMEZDOTk5OTc1QzFFNDQ2QjAzNAotOjEwOUQ4MDAwRjM1NEJBNEVEQjdDQkJGRTZCRUVGRjgwRUY1RDg3NjU2NAotOjEwOUQ5MDAwN0Q1MzYxN0YzODBDMjYxRjE2NzBCQUM5NTUxMjlCRkM4MwotOjEwOURBMDAwRTAxRjVCMjFBNUJEREZFQ0YyMDhGQjNCMjUxRjg0N0I5OAotOjEwOURCMDAwRTNFQTM4Q0U4NEZCMTIxRUI4RTdFMDVBOUVERjQ0NDgzRgotOjEwOURDMDAwNjJBQ0ZERUY4QzdEQzBFNThBQkI1REFFQzJFMkQxRTQ0MgotOjEwOUREMDAwMERDNkNGN0I3NkFEMTk5QjhFN0Y1RUU1N0NGQTQxQjhEMAotOjEwOURFMDAwQzQ5MTlGQjQyNDdFQUIwN0Y4NzNDOUMyNDUxRTIzMDRGNwotOjEwOURGMDAwREY5OUJDQkM4NkNGNjM4Rjk2MTg3QjUxQTgwRjRFMTk5NAotOjEwOUUwMDAwRTUxMDg3NEZENzkxNDQxM0RDRUZCMEEyNDFDMjM4NTIxRQotOjEwOUUxMDAwRTkwNjQ2NzcyQjM2RUM5N0Q3RDFFNzRFQ0U3RjhCMDBGRAotOjEwOUUyMDAwMDdCNkZFNkVFNTc4RERCMzJCMzAwRUU2QkZBN0Q3NEY0MQotOjEwOUUzMDAwNDczQkE2RjNCOEZFN0U4MjdFQUZENTkxQUIzNjgzREY3QgotOjEwOUU0MDAwQUI1QjIyRkNFRjMyRkNBNDEyRjIwREJBNzk5RTQ4MEJGOAotOjEwOUU1MDAwRkRCRTExRTYzQjZGMjRGMkY3ODQwRDFGRDQ4MzdDRUUyOAotOjEwOUU2MDAwRDIwODlFOTdGQjhGNzYyRkZFN0QwQjQxMkZCRDcyNjIyRAotOjEwOUU3MDAwQzM0NzhEOTA3NDc3QUY5NjlBMEM3NDMzQjJBOUVFMUJEQQotOjEwOUU4MDAwRTlGQ0U0MTZFN0ZCMEY0M0YxQUM3NDc2QUU3ODBBNzk4RgotOjEwOUU5MDAwMkVFQTJENTYwRDRGQkFGQTU3NTczQUU1OTg5OEY3MDgxQgotOjEwOUVBMDAwNkZFQTU0QkFGQjFBN0FFOTMwMzlCMERFRkIzNTk3RTMzMgotOjEwOUVCMDAwMDJFRkJERjgzRTkyN0U1RkI0MjNDMkUyNzc3QjkyNzNERAotOjEwOUVDMDAwRDZBMkRFQjJCQzA2Qzg0MzMxMUYwMUFGNUM4QkMxRTkyQwotOjEwOUVEMDAwREEyNThBNDNERUFFNTgxODc0OUQ0NzYyNzBGREFBRDcxMgotOjEwOUVFMDAwNzgwOEQ2NzFFRkFFOTcyNkUzREY1MTc0RTk4NzgwOTI0OAotOjEwOUVGMDAwRDBFMEZCQ0QyNEU1MDEzOTcxNUMzMUYwRjk3QUEzRjNCMAotOjEwOUYwMDAwNUVFNkQ3NDlFMjhFRTlBMDNGMUI5NEI0N0NGNTBDQTcyRQotOjEwOUYxMDAwOUZEN0FCNTY1RDgzRjM2RjU2NzQ5OEZGQjFFNTIzQUVDMAotOjEwOUYyMDAwMkEwN0Y5NTJFNUMxN0I4MjhGMzVERjE2QkVDOUI2N0U5RQotOjEwOUYzMDAwQTFFRkRDRjNGQTZERjVBQTAxRjVENkQyMkEyN0RFRjZGOQotOjEwOUY0MDAwNjhDQzJFQjBBRTY0N0NCODlBQ0E5QkQ5NDg1RkRENzdFNgotOjEwOUY1MDAwQ0NBNEUzMUY0RUU2NUNCNDg1NTUyN0YwRjcxQ0FGRTZCMgotOjEwOUY2MDAwQkYxRjk3MTM3N0NFQTRGMkU2ODRDQ0ZDNjFENjNGMzFCNQotOjEwOUY3MDAwQjlCMUU0QkU3ODBCQzQ3OTRGMzQ0Q0ZCNjkzN0FERjcwNwotOjEwOUY4MDAwMzI1RkRGNUIwRDAzRUI0NzM3M0Q0REI4Q0Y3OTNGRTVERgotOjEwOUY5MDAwOEMyMzQ0ODNGNjg5RkFGNEZBRTBGQUVDMjA5M0FGNkE1MgotOjEwOUZBMDAwNkMxQ0M4OTdFQjM2QTRBRkI3MDk5MjJCNjlCRDEzN0YyMQotOjEwOUZCMDAwNTVBQUQzRTU2RDdFQTIzMzNFNTkxMTRGREZGRTEzM0QwNgotOjEwOUZDMDAwQ0NCRTgzNUU0QTAzRTdCRDU5NDEyRUU3RjQ3MTIwQTc1QQotOjEwOUZEMDAwNTc2NDk4NkY1NzU2MDRFQkJERDM3MkZCNzUxMEVGM0I3NwotOjEwOUZFMDAwMkUzQkU1RjMwRkIyNzhGQzNDOEJDOUU3MTNCQjk2NzlBNwotOjEwOUZGMDAwNDYwMjlFNUEyNTFERThFMUVERUNEODI0QTBCNzk1Q0Q4OAotOjEwQTAwMDAwQzdEMDhGRjAyRDVFRkZCQTUwRkM0M0QwNEY0QjhFMkM0MwotOjEwQTAxMDAwOUUzRjkyRTJBNTZCMzk4OTQ5NDY2NkY5RkYzMUU3OUY3OQotOjEwQTAyMDAwNUM4NURENjM0MEY1REZCQkEwRkY2OEQzNzdEMUZFNTBEMAotOjEwQTAzMDAwQ0Q3MTVGOUJDQ0FFNkM4NEJDQzIxM0IyQjUwNkYzNTAzRAotOjEwQTA0MDAwNzYwNTU4REUxMTg5NERCN0RGMkYxM0UwRjMzOEIxN0I2OQotOjEwQTA1MDAwNzhGOEJFMjYxRTFDRDA4RTNGNEMzQTZBNzBEQ0RENDE3QgotOjEwQTA2MDAwMURFMjhGODcyQjk1RDRFNTc0OTJFRkVEMEVFMjNEQUZBNAotOjEwQTA3MDAwNkVCRUM4MzRGRTcwRURDMDEzQkI4NzY3MDcwRUI2RUUyOAotOjEwQTA4MDAwNTg1NkUxOTBFQ0MwMzM5NUY3REU1OTA2N0NBNDc1NEMyOAotOjEwQTA5MDAwNDkyNzdGODU5QzdFOERGQkFERENGNDIzOUVCMzM5M0U0MgotOjEwQTBBMDAwOEUyNzA3OUVEN0NERjczQkU3NzM1RDlENzMzRTgyNUY5QQotOjEwQTBCMDAwOEUyNzlCMDI5MDFGNEU0NzlGNkNCNzRCQzlCQ0U5ODMwQwotOjEwQTBDMDAwRTg1OUU2RkZDRDM0Q0YzODlGQTc5MDEzNDA3OTEwNEY2MQotOjEwQTBEMDAwNUJDREU1Q0Q1QjBERjc0NkVDNzg3MEFGRkY4NENDRjczOAotOjEwQTBFMDAwMDcwRkIxQkNBREYxRjE5NTczNDYxQTdERjQ3OTVEMTY5OQotOjEwQTBGMDAwOTM0MzlGMzc1RDBBM0RFM0VFRTdFRjlEMEU4NTlFMUI4MAotOjEwQTEwMDAwOEMwRTg1NUM3MEI3RkYwMEUyRkMyM0UxRUZFM0U4MUFGOAotOjEwQTExMDAwQzQ2NTNFODgxOEFDNENGNDA1NzA0NDg2OTRGMzczQ0I0OAotOjEwQTEyMDAwQzQxODA3RTc2RTRFRUMwQUUwRkRGNkQ2MTY2RjEyRkU3NQotOjEwQTEzMDAwNkVDN0YxNUQ5NzRDQjJBRjY3MDdDN0ZGOEEyNUQ5NzgyNAotOjEwQTE0MDAwNURDQTcxMzk3NkM1MjhDQzJGNTBGMEJFQUVENzhGRTRFQQotOjEwQTE1MDAwMkM4MEYyQkQ4NzY0OTBEMEU0QkFGQTk1MEFBQ0VGODEwNgotOjEwQTE2MDAwMkM5Njc3QkU2MkMzMkI2ODBGMEU5N0NFNTdENDM5RjU2NQotOjEwQTE3MDAwRkYyNzdDMURCRDc2OTZEQTUzMDZGNDkzMDkwRUVENTk0MAotOjEwQTE4MDAwM0VCNkNGODkyRjlBMEZGMjc5RDUwNjA5RTVFRDk2MkNDOAotOjEwQTE5MDAwMDNERkFGNTI0RDk0REJBNDk5RTk0N0UyQTNGMEEwMkE3NAotOjEwQTFBMDAwRTQxODJDMDJFMEYxQkZGOURGMjk1M0UzOUFGRDdDRDJEOQotOjEwQTFCMDAwNEREQjZFOUYwRkY2QTE5QjVGNDZFQjhDOEVFMTVFMzAxMAotOjEwQTFDMDAwNzg1RTE3NEEzQzk5MzVCMjRGM0VCRjJERDVFRDFGNDVGRAotOjEwQTFEMDAwQUI1QzlFQzVFRDZEQ0VBNzYyM0Q5NzY3QjFGNTUxM0I3NwotOjEwQTFFMDAwRUQ4N0Y4Rjc5OUY4RkE0OENDNDU2RjcyNDdDRDRGMDBFNAotOjEwQTFGMDAwRkU3MzdDNjgxNzA0QkM1NEVFNDNERURDRjcwMzNBQ0JGNQotOjEwQTIwMDAwOUI2MzdDMjVFQzFENzdGQjZCRDU4NEMzNkUzQzk0NTUxQQotOjEwQTIxMDAwRThDOEM3NzFEQjIxRkZEMDE3RTlFQkZGRjk2RkFDMkY1RQotOjEwQTIyMDAwNjRGREQzRTk4QkZGMDc3OUIyMjIwODAwODAwMDAwMDBBQgotOjEwQTIzMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJERDNEMEI3ODU0RDU5QgotOjEwQTI0MDAwOTlFN0NFOURCOTk5NDk2NjkyNDkzMjkzMzczODkzMDA4MAotOjEwQTI1MDAwMDYyNTc4MDMyMTQ0OUUzNzA5OTFBMEE4MDMwNDBDMUEwRgotOjEwQTI2MDAwNzA0NEQ0MjgyMTQ0QzU0QUJGRDJDRDBEODkzMTIwREFBQgotOjEwQTI3MDAwNTA1REI0RDY3NTg3ODg1REI2RDIzNTU4NkFEMUQyNzYyRQotOjEwQTI4MDAwQjA4MjhGRUEzNjVBNDVEQThEMUExRkE1ODAwRkEyQUQyQgotOjEwQTI5MDAwQUJEQjhGQUQ3QkZFRkY5QzkzQjlGNzY2MjYwNDZERkJBRAotOjEwQTJBMDAwRjEyRDdDN0VENzMzRTdGREJGRkZGRkZDRTdCMEEyMjU5MQotOjEwQTJCMDAwODU0NDlEMDRGRjdDNDlGRjNCOUMxQTIwQzQ0RkM4RjE5NAotOjEwQTJDMDAwQkZDQThEQkQ2RTQyOEU0NURBOTNBRjgxQUY0RDVEOTBCMgotOjEwQTJEMDAwRUQyMzQ0RUY5NEM5QTNCNEREM0I0NzNFQUQ4MUYyQkQwRAotOjEwQTJFMDAwN0QzNkFGNDRDQjJCRDY1RjIzODc2OUJCNEMyOEY5QTFDMQotOjEwQTJGMDAwREY5MjM0Mjg3RjA5N0ZFNjBFRkZERUYwODA0Q0EyQzU5NgotOjEwQTMwMDAwQjE3OUFGODY3NTE4Q0FDNzdBOTIzNTAyRjNDREYxNDQ5OAotOjEwQTMxMDAwQzYwNzA5RDlBQjEwOUQ5NDExRjJGNkU2RUNDODI2NUE4RgotOjEwQTMyMDAwQUU3MTEyREQzRDg1OTBCOTY5NkNCREJFOEQ5RkI3N0E2NwotOjEwQTMzMDAwMjdEM0Y1RjRGQ0JBODQxNEQyRjVERDdERkI4QUYwQTRCMgotOjEwQTM0MDAwMzhGMzdCNkQ4NDRDQTMxMzA0MDIzNjkyNDVDODZEN0NCMAotOjEwQTM1MDAwRUZBQjUyODkwNkUzMTMzQURGQTM4NkYxNDVCRkMzQURFNQotOjEwQTM2MDAwODQ0NENGQTVGNUUzNjhCRkYyNTgzRkVCRjhDQkFFQkMxMQotOjEwQTM3MDAwNzAyQ0VDRkJGMDk1MzNDNzVFMzMyOUQ2MkYxMTFDOTY1OQotOjEwQTM4MDAwNDlFMTdGNUUwQUYzQjZDOTJBQzA3NUQ3M0Q0OThEM0RDNAotOjEwQTM5MDAwNzFFMEE2NzNCODVBRTc4NzNGNzZCQThGMjVGQ0ZGOTcxRQotOjEwQTNBMDAwNkVBQ0JDQzM0MzQxQjIyOTY1Q0VFQzcwOUNGOTBGOTNFRgotOjEwQTNCMDAwRjBEREQzRTg3Q0ZBNDYzNjlGNzU5RUM1N0M5RUMzRjVEQQotOjEwQTNDMDAwRDcyRTA1Rjg3RkE2Q0I1RTk5QzI2M0EwNDE0RUFEODAyMwotOjEwQTNEMDAwN0VGNTBFNzUzQzFEN0Y0MEJGRDU3MzlENjE5REJGNEZCRgotOjEwQTNFMDAwMDA5RkRGMzc1RUVCODk4QjA3RkVCREEyREU0QzA3NkY1NwotOjEwQTNGMDAwOTNDMTk3QTdDMzNDM0JFM0FGRUYxNjU4MUZDNURGMzFBRQotOjEwQTQwMDAwMjU3Q0NGODU3NDdEQzcyRjk2NTU5REFFRTdCODhERjYxOAotOjEwQTQxMDAwMDM3QTc5OTBGNjBCMENFRjc3M0RFRkY3RjZDNjkxRTlFQQotOjEwQTQyMDAwNzI0OUFENzkzRDRCOEYyNDlCRTlEMjQ2MUE3QkUzRUMxMAotOjEwQTQzMDAwNjc2ODVENjc0OEY3MkIyQ0ZDQjc0QjE5MUNFM0E1RkQzQgotOjEwQTQ0MDAwREZERTcxRUFDRERCNjEzRjNCOTIxMURFRDY3MTMyRDNBNAotOjEwQTQ1MDAwNjVDNkE3QzAyNzAwQUYyRDQ5OUM0RkJBOUI5RkE2RkQ5QwotOjEwQTQ2MDAwREVCRTM0NEZERDQ0ODZGMzA3MjFERDk3Q0RBMEY1RkQzOAotOjEwQTQ3MDAwM0RCNkQyMkRCNDZBNTc0RjRBNjMyNENFN0EyN0E3MzMwQwotOjEwQTQ4MDAwM0FGMEM5N0FGMjc5QjQzRDc5ODNFMTAzQzgwREY4NjZGMAotOjEwQTQ5MDAwMjlBNzM3NkZDRjBGNUI4ODJERDZFRjBEQTA4MzI0NDJGRAotOjEwQTRBMDAwN0VEQkVBQzRFRjM2QUYxM0M3QTk1QkI4NDgwOUQwNzlBMQotOjEwQTRCMDAwQUVCMzEzMERFMDg3N0ZFOEI4REVGMzBBNzY2Q0ExNTNFNAotOjEwQTRDMDAwQkQ2RTYzNjU3RDE1RTUzRjY5Rjg3QTFFRTY3NEI5MkJBQwotOjEwQTREMDAwQjI3ODQ0RjhENjM3QzgyNjc4RDYyRDM0QzNENzRBOUZFOQotOjEwQTRFMDAwNDcyM0I2REE3OEZCMTdGNDlDNjhCRTJCMUQxMTNGRTBCQQotOjEwQTRGMDAwRTkwOERGRUY2MUJFREZERjM3QjY3QkEwQkQ3NTlFNUQ4QgotOjEwQTUwMDAwOTE5RTExRjlFMEFBNDYzMzVEOUM2RTlGNkY3QTgzMDg5NQotOjEwQTUxMDAwOEZFNTYxNzNCRjJCRUFDREZCNUQ0QTVBNjYxMzRBMkE2OQotOjEwQTUyMDAwQ0I4OEVBODA2RjFENjkyOTc5OUE4MkYyRTgwMzRCNzAyMwotOjEwQTUzMDAwM0RBRjEzNTIwQjcyOUU5Q0JBQjU2NDUxNDk2Q0ZDMTcyNwotOjEwQTU0MDAwMzkzRDdGNTY3N0VCQTUyMDJFREY1MDVBNEFCQzcxRDY5NQotOjEwQTU1MDAwRjMzQTg3OTNDMEY3RUIwOUUwMTlFNTcyRjcwREMwMzNDMgotOjEwQTU2MDAwRDBFQjMyMzkyRTlFRkY4QkNGRkI0NkMzQzg3Q0I0QUNGOAotOjEwQTU3MDAwNkU2NDNDOUZGMDdBMTEzRTZGMzRCNDI3QzMzRThGODlERQotOjEwQTU4MDAwNzkxRjY0RjM4MjVFMzNFMkUzQzQ1N0Q0NUI1NkZFMUQ0OQotOjEwQTU5MDAwMjBGQTRENDhDNzkxNjQyRkU4MTExRjkwODc0MThGNzRBRQotOjEwQTVBMDAwQTREQjk4MUMyRjFFNTk4Rjg4RUY2Rjg1NUNCNUI0QUY2NAotOjEwQTVCMDAwQjM2QjBFMjMzRUNBQkQwMTg0OUIyOEQ3MkQzNEFGRjM2NQotOjEwQTVDMDAwQkQ1NDA2MEZDQTcxNjM0MzFFODNEQ0UwRkE1NUU4QkIzNQotOjEwQTVEMDAwN0I3RjcwRkU1QkEwM0ZDN0E3MzMzQ0Q0ODUzRTcxMDBGNAotOjEwQTVFMDAwM0NBODdDQkRDMzAzRkI3QUQ1RTYwNUY5NUE3RTQ0NzNDQgotOjEwQTVGMDAwMThFMTM3Mjc4REI1M0ZCRTczNjRGOENENDk2M0VCM0M1NgotOjEwQTYwMDAwOUQ5Q0I1RUVGN0VENkZERjM5MDVDNjdERkJEQjlGM0IwQgotOjEwQTYxMDAwOENFMzJGRkIyMjlGNDQzMzYzRTVBQkVCMjUyRDEyODdBMAotOjEwQTYyMDAwQ0YzNjc4OTU1MUMxN0Q4MzA1OEU1NzdGMzExNkM3Rjc5OAotOjEwQTYzMDAwQzlBNEE1MzdDRUJFRUNFOTRFNkNCRjM0NTRFOUYwNTM0MwotOjEwQTY0MDAwNzg1RUJCNTE1MjI1M0E4NDIzOURDOURENkI4NUJDQjMyRQotOjEwQTY1MDAwMDdDNjJFQTI3MEY3QjdCN0RDMTY4QTMzQ0U2QzBFRUZBMgotOjEwQTY2MDAwM0ZCQjQzNjlGMUY4NEM3Qzg1M0UxN0VEOTZEOUMzOEUwQwotOjEwQTY3MDAwNzhFREFEN0E3NTgwRjNCOUI1NURFODBDRTk3MUM4MEU3NwotOjEwQTY4MDAwQjJCNDFGRUQzQUU2QTYzMTNBQ0M0QzhBN0UwNEYyODg4OQotOjEwQTY5MDAwNEMzMkRCNjFBNzlERDdEMkRFM0FFRjY1MUNFRTg5RTYyRQotOjEwQTZBMDAwMTc3NkFENzU3QzlEQzMzRjFDQTJGNDEzQjdERTgzRjUwRQotOjEwQTZCMDAwQUYxMkE2NUZGNTQ4MEFFQUMzNjMzQkFGQkQwN0NDQjc0QwotOjEwQTZDMDAwRUIxN0RDNzYwOEQ0RTRDQkE5NDE2Q0Q3MTA3QUE1MDY0OQotOjEwQTZEMDAwRDlFREQ0QkQ5MzAxRUY5RkQ1REU3QjRGMTk1RERBNzFDMwotOjEwQTZFMDAwMjVEQ0VFQTExRDhFNkY5MkQwNkVCMUNFRjMyQUQ3Mjc1NgotOjEwQTZGMDAwQUY4MTNDM0QxN0M2MjNDQzVFOUQ0NzQ3Q0JBNTYwOTdGNQotOjEwQTcwMDAwQjUzNTIwNTRDOEI3OTIwMjQ2M0JENUI3RTFGMzU2MzI2RgotOjEwQTcxMDAwMTlFQzg3RDAyNjBGRkQ3REMyQzY0RkQ2ODM1RTI2MjQ1NgotOjEwQTcyMDAwODJGRERGNzVBODM3MjJCQzA5QjM3M0ZCN0JEQzNCQjYyNwotOjEwQTczMDAwRDA3NkFGODI1QzgwRjE4OTNBMzY1NDYyOTAxMzc2MkZERQotOjEwQTc0MDAwOTY0NzhCOUZERjI2QzBDRjk5Q0EyOUIxQ0Y0NEYzNTBEQgotOjEwQTc1MDAwQzhFM0ZBMTY1N0I5QkJBNDM0QjA3NzAyRDdDMTdFMDY1NgotOjEwQTc2MDAwMTdCOEJDM0QxNDg1OEIxNUVEMTI4MENGQUJBRkQ4NkNGQwotOjEwQTc3MDAwNkQ0MTFDMTZFRDE1NjExRjA3MkYwQkRFNzU1RTE5QzhBNAotOjEwQTc4MDAwMUY4N0U2QTI0QjU5MDRDRUNCODU5NDhFQUFEQzNBOEM2NwotOjEwQTc5MDAwNTdGNkRCODU4RjAxN0VFRUFENEYwQUM4MzBERTlDQzBEOAotOjEwQTdBMDAwOUIzMjJEMkZCRTM4MjkwMDdFNDc3OTVGRTEwMTFGMURBNgotOjEwQTdCMDAwN0ZFOTQyQzk0QjY4RkY3OTBCQzZGQjA3RThGRTUyMzZCQQotOjEwQTdDMDAwRDA3MUYyNjA3OUM3NkFBQkM3MTFGMjQzOTg2QzA2NjEyOQotOjEwQTdEMDAwMEJBNkIwNTgyQ0YxQjJFRURCM0M4RkI2M0ZDRkJGRDcwMwotOjEwQTdFMDAwRTZBNkEwOUVGODVEREY2NjI3MURGNzhFQjY1MDhFMzc3MQotOjEwQTdGMDAwOUREQTEzRTkxRjc0Mzk2NzEzOTI5NUE1RjVDRDU1MDlCNAotOjEwQTgwMDAwNzE2NzdDNTQwQkU1QkQwRjhBRjEzRUVFRDIwQTA4Rjk2MAotOjEwQTgxMDAwOTkyRDFDOTQ2OEZERDQ4Q0E0MDU3NjBBMkY1RjkxOTgxRAotOjEwQTgyMDAwM0Y2RkIzMzY4QkVFRTdFMjFCMUY1RDRGQzc1RkZFREQ2OAotOjEwQTgzMDAwNDkwQkVDQjBFRTA2MzE3RkU5MDI1OERGRDI1OUEyNUMzOQotOjEwQTg0MDAwRUU4MkIyMkY4NUY3ODdGNTU2NTBGOTU1MTg1QkJGM0Q1QwotOjEwQTg1MDAwODdDRTlGMjFEQUNGNTgzMDhGRjYzRDVDRDk1MjZEQTc1NQotOjEwQTg2MDAwRjNGRkU4QkJEQUU2NDkxMzA5OTlCRUIwRDJBQkQxRjJFNwotOjEwQTg3MDAwMTMxOUY1MEI1MjI4N0VGNjEyNEFBN0I0RkM2NEM2OTU0QwotOjEwQTg4MDAwMEI2MEZEM0VEOUM2QzdCRjZBMzNBQ0JGQkM0MTNGMEZBQQotOjEwQTg5MDAwRUEyNTdERTVFNjVBQkFFRkI1Q0U4MTQzNDBBRUVCMzYwOAotOjEwQThBMDAwRThDRTJDRkEzRjI5MTJFMzYzQTdBMzQ1Q0JBN0IwNzNFOAotOjEwQThCMDAwRUNBQjhDRTZFMzcyQkExOUJEMTY0NDRCNDA4RjBEOTU5NAotOjEwQThDMDAwOEI2OUI5QzQ1MENFNjFFNUJEOUJDOEQ1RjFFNEVENkQ4RgotOjEwQThEMDAwOTk0Q0VFRUQ0RDhFNUZBRjY0MzA3QjgwQzIwREY1NDkzMwotOjEwQThFMDAwREExMUEyRUQ4RUEzNTczRTRBNzdFMzdDMDc5Mzg5RUVGNwotOjEwQThGMDAwQ0M4OEYxREJFNTk0ODcyQjI4NUYxMjI3NUJBNzE4NjdDQwotOjEwQTkwMDAwOThGRUM4NjA3Mjg3RTg5NzY3ODAzQzVEMDg0M0QwQURDOQotOjEwQTkxMDAwMTdBOTEyRkFCQkE0MjUyNTMyMUU2ODg3NDRFRDRCNDBDNwotOjEwQTkyMDAwN0ZDODM2NUNBRjVGOTZBRTVFNDRDN0NCNEEyNkUxM0QzQQotOjEwQTkzMDAwRjRFQkNGMjQ1OEE2RkRCNTNERUVEODc4MkY3MUJBQUYxMQotOjEwQTk0MDAwMjkwQUVEODRGMTZBQjI3MzRCREI4M0IxNzFFOEJBM0IzQgotOjEwQTk1MDAwOUM1MzRDRUJCNjU3NjQ0MEZERTJEMjlCMjcxOUUwMzk3QgotOjEwQTk2MDAwODlFRDgzRDIwMUY2QTNEMzNDMzY5N0YyQzFERUJFRjM2NAotOjEwQTk3MDAwMEFDMTdFRkZBOTQ1RUU5NkY3MkQ3NjEwREFFRUNBNEM5NQotOjEwQTk4MDAwMkU1RjAyQUNCRkJGOUFDOTlGQzE5QjUzMjIzREMwOUY5RgotOjEwQTk5MDAwNEVCNTM0NjRCMDNCMDMxQzFFRDU3NzJFQkMxRkRBMzU5MAotOjEwQTlBMDAwRjUzOTQ4MTI2REI3N0U0RjY1MzYxOTQxMkYzNjdEMzEyNgotOjEwQTlCMDAwOTM0NEE2MUFDQUY2QTgwMjcyQTdFOThCMzlGODdCRjU2OAotOjEwQTlDMDAwOUQyRjI5QzBBNzMwNEU4MEVFNkJCRDRCQ0I1NjAxNkUzQwotOjEwQTlEMDAwRURGMUYxNEYxRDcyNUM0N0QzMTdFOTQ0OUY2QUZDOUQ2RQotOjEwQTlFMDAwQzEyOTM2QkUwRkVCNEZCN0FGRDg3ODMyODk2NDhFMzRBOQotOjEwQTlGMDAwOUU4MkY1NDM3MEI3NzNCODJCRjFENzM5NUZEMDI5ODVBNAotOjEwQUEwMDAwQjdDRDQwNUY0QjM5QkQ1MUU5ODc3MTk0RkVDQjI2RjUzOAotOjEwQUExMDAwODBCQzhGQ0RCQjA5QzdERjZCQTc3ODA0M0JCMDJGMzk1MwotOjEwQUEyMDAwMDA3NjcxQjk5REM5Q0ZGMkJFMENBRjJFQzVFODQzRDBGOAotOjEwQUEzMDAwODVDMEVCREU4Qzk2NEFEQ0VGMjJDOURCMTMxQ0JFQUU3MAotOjEwQUE0MDAwQ0JDNEJBQjgzRUNENkUwOENCRDcxOEQ2MjdGODgxOEVDNgotOjEwQUE1MDAwQkY5NzhGNUY1NjgxRkNGMzJGNENGRjUwQkU1OTAxRkMwRQotOjEwQUE2MDAwMEI3NjBCRUM0MzhEOTYyQ0Y2MEM1RkZGQ0ZBOEVDODA5OQotOjEwQUE3MDAwMkZDNTIzODNGRkE1RUUwOEU4MDEwMUI3RTFGMENGM0YyMgotOjEwQUE4MDAwMEQzRUM3NjI3RDc5REYzMzBBRUNCMzI5MDFERjg2MzJFMAotOjEwQUE5MDAwNTNCMTVGRjY5MTY4MkFGOEI1QkY0QzY3N0E2RDZGRUZENgotOjEwQUFBMDAwNTRENzRDRTA4Qjg1MzYwMjIyMENGNjBERjY2QUI5OTAyRAotOjEwQUFCMDAwQjc2NEQ3MEI1NTc2RkFGQjUwOTlDQURCMDBFMDYxNDhDMgotOjEwQUFDMDAwRkU0NjlEQ0U1OEZCQUFDQzVEMEIzQTY4OUQyRjg5RTJDRAotOjEwQUFEMDAwN0YxMkRBQTE0RTYyRjAyN0JFOURDMUU0NTg0NTk4QzRBQQotOjEwQUFFMDAwQjU1Qjk2NjUzMkJCNDVDMEZCN0IxQkFBQzk3Qjc0N0ZGNwotOjEwQUFGMDAwQ0ZBNTMzQkVBQzE4RDAyNUMwOEJFMDZCQUI5QzdBODg1OQotOjEwQUIwMDAwRTNGMTdCRkNGQjhGOTc1M0QyNjlFNEQ0MjIyRUE3RDhDNAotOjEwQUIxMDAwRUYwN0E5OTkwRkVEQjJCMkEyMjUxMkQ1ODlBQjVFOThDNQotOjEwQUIyMDAwM0ExRUZDOTk1QjcyRTRDMEZCOTRBRjk2NDhFQTk4MUYwQQotOjEwQUIzMDAwRDE3MUVCOUMwMThDOTMwOTNBQTkyM0NFODAxQkUwNEU4NgotOjEwQUI0MDAwOERBNjJGNDFFRjJGNzQ2MTE5RkU4MDVERjI2OUI3QzRBNQotOjEwQUI1MDAwRTg5MDA0RDJFQTRBMTJDQjIxQjE4RTVCNzIxNDlDNkY0QQotOjEwQUI2MDAwRDVFNkYxNjk2MUUzRkFCODlFQjgzQzI5RkEyMzUyMzQ3QwotOjEwQUI3MDAwOUNDRjQ1OTlBRTdGQUQ0RDM2RDRCQjk5M0VGQkQwQTM1QgotOjEwQUI4MDAwRkQzNDgzRTJFMTU1ODlENEUzN0EyQ0Y2RDI2Rjc4REM4OAotOjEwQUI5MDAwQzY2QTJGRDU3MzNCRDIwRkU2MjVGMkIxMEQ5REQzRUNEQgotOjEwQUJBMDAwQUVBNDA4NjE1RDc0RjA1M0IzN0IwOUU3RDdBOEFEQzlDMwotOjEwQUJCMDAwNDAwN0JGQ0UyODYwNzZFRDE1QjRGMjAyQ0E5NENFNkE4MwotOjEwQUJDMDAwRUQ3RDgzMUM3QjFFRDY4MzdBMjEzQTBERjhGNEE1MEMwQgotOjEwQUJEMDAwNjJCMkYzMUFFNDUwODEwNDc2NkI3NjkyMEE3Mjg2RTJDRQotOjEwQUJFMDAwMDlFMTcwRDA0NUVDMkUzQUVGNzNGNDBCNzhBQjkxNkYxRQotOjEwQUJGMDAwM0VFMEYwMDExRDQ4NkEzQjQyN0YwN0Y3NUI0OTE0RjREMQotOjEwQUMwMDAwQ0RFNTczNTNEMDZFMjVBNzZFMUQwN0YxMEE3RjBBQTMwOQotOjEwQUMxMDAwNUIzQThFOTM4RkUzNDQzQUUxNzJFRjM3NjMyN0Y2ODAxNQotOjEwQUMyMDAwN0UxMkYyNTNFMDgxOUM5MjcxM0M1MTdGNTA1QTU0RTA2NQotOjEwQUMzMDAwQTVFNTgzRkU3MzRCREIyNUIzRkQwM0Y2NTBDQzdFNUFBRQotOjEwQUM0MDAwQkY3OTNFQjU5N0E2RDdGNjQ2NkQ1RTkwMkFCNzJGQjg2NgotOjEwQUM1MDAwOURCNkFGQTFGNjkzOEJFRUU3OEYxOTRDMEYxRTBDRUE1MQotOjEwQUM2MDAwNzIyQThDMzc5RUVFODNGRTc0MjgzOTNDQTlDNTFEQzMxOQotOjEwQUM3MDAwMDdCNTcxQzI4MEJGMkM4NTdFREQ4QzNGRTBEQjk5QzlCMgotOjEwQUM4MDAwOTA5MUUxNjNERjA2RkVDRDRBNjVFRDg3RTkzRDVFQUY1OQotOjEwQUM5MDAwNDkwQ0RFNUIyQTk5OUNCMEI2QjNGMTcxRDczQUY1REE2QwotOjEwQUNBMDAwQUM0MkEzN0QxNTIyNDA4Nzc2QzJFQzJDMTk3NDhGMUYwRAotOjEwQUNCMDAwRjUxOUMyQUJGQUNFODYzNEQwOUI5RkY1MkQ0RDIzOTM2OAotOjEwQUNDMDAwNjI3MkQ0RTFGQ0VERDhGN0E5MUM4OTkyMjVERjAxN0VFMAotOjEwQUNEMDAwNTU1RTk3MDlEOENCNzczODE4NUQyQUU5NjE2RjA2RkQ3NAotOjEwQUNFMDAwNjZBNkM0Rjc5QjI3RjJGNTY0ODI1RjREREJEREMzRkRFQQotOjEwQUNGMDAwMUVDNzE3RTdBM0JGOUQ5RkM5RTI0NUE5Mzk3NTI4RDc4RAotOjEwQUQwMDAwMDE5NjAxOEFGNzM0MzJBODdCMEQ3ODRDQUJCMDk5RkNFMAotOjEwQUQxMDAwMDdDNzE3OTNCMUZGOTlEQjBGQTUwOUVDODczMjkzRkRBNQotOjEwQUQyMDAwMjBFNkI1REExMTZGQjZFNkUwRkE0NUZGMTUzOUFGRDU4MgotOjEwQUQzMDAwMTA0M0ZCOTU2NEUwMEUxODZGRTVGQTdDNTNCQzI4OTEzNAotOjEwQUQ0MDAwRkQzMTM3NTMxQUIyMTdGNEI4RUI1MjRDQkZCRjQ5RkQ2RgotOjEwQUQ1MDAwNDVERDM4RkYzMTM2N0Y2Q0RFMTRDQTcwQjE3OUU1NENDMQotOjEwQUQ2MDAwNERDQjQ0QkY2Rjk2RjdFOEY5RjRFM0EyQkZDQkE4NzdDOQotOjEwQUQ3MDAwNTBGRTUzRkRBNEVENzBBMzVFQUEwNUI5MkRGQzI0RTA5RQotOjEwQUQ4MDAwN0Y2RjFBRjA3NzY1NkRBNkRGQTAyNzc5M0ZBQjNDM0E1RAotOjEwQUQ5MDAwQzBGREVBMDM1Q0RGQTQxRDExNzY2MzcyNDA5MjYyN0EwMwotOjEwQURBMDAwNjdCOERFRTI3NkIxNDUzRTlFQ0VDRUE2NzRBQjFCRUQxMwotOjEwQURCMDAwODA2MTc4Q0VGQ0FBRjY2NTUxMDJGQTk4RjAwRkIxMkZBNwotOjEwQURDMDAwQ0I2Nzg1RTUxMjkwOUZCNTEyMTk0RjNGRDNFNzk5RjVGMAotOjEwQUREMDAwQkQ5RUM5RkMxMDlEMzI5Q0QxNkY1OURDNjA2RUQ3MDFCRAotOjEwQURFMDAwRURGQ0YwNEQxOTk1REY2MkQ0NDc5MjBDNzI4RjhERDczMAotOjEwQURGMDAwQ0NFOTIxNzhFMjU1MjU0MEU1NzA5NERCNDNCQjdDREE1MQotOjEwQUUwMDAwNUQ0MDE3MURDOUE5OTM0MTRGNzQyNDhGOEQ0MDVDNjIyQQotOjEwQUUxMDAwQzdGRjU2MTdFRkEwRUIxRjdDRDlBMUY2QzBCMEZCMThGNwotOjEwQUUyMDAwOUQ1NDJFNUZERjZFQTdCRjNCN0EyNTZGMTI4OUFERDM4RAotOjEwQUUzMDAwQkQ0MUQyNTY1MzNFQkU5RkNCODkyNjFGREI0RjkzMkY3OQotOjEwQUU0MDAwQUE4Q0EzRjNFNzM1QjE3NTE0RjQxRTkwRUMwNjc5NTc3QwotOjEwQUU1MDAwRDBDOERBRURDODc0OThGNENGQTM1MEE2RTMzQzIyRkMyNgotOjEwQUU2MDAwMTExMjY5QUIyOTgzRjY5QTFEQ0U0MUYyN0EyNThDMEYxNwotOjEwQUU3MDAwRTdCNTUwNDA1MDdBQzg1M0Q5Rjg2RTM1MjI1RDNCMjk2QQotOjEwQUU4MDAwQjZERjJFREJBMjQ5QTAyN0JBQjI1MjU0RDAxMzI3N0REOQotOjEwQUU5MDAwRTFDNzYwQkY0REZERDEyODgwNkI3QTdGOUYxREVDM0RERgotOjEwQUVBMDAwOTc1RkRCMERCRjhCN0QwNjY0NkYxRUM4RDk5NDdFQjY5RAotOjEwQUVCMDAwQkU2RTBCREQxMzcyMTc1RjU3MEY5M0JGMzI3OTlFMDA4MgotOjEwQUVDMDAwNUU0MDg2RDBGOUIyMzYxNUEzOUUxMkVEQjMzMkI4REVERAotOjEwQUVEMDAwQzgyMkUxMjdEMENFMjI1RDA0RjE0NjcwMUY1OTlCMjY3RgotOjEwQUVFMDAwQTBCRDJGRjAxQUIzQUIyNjRFMDFCQkFBNjg2QkQ0QkUyRgotOjEwQUVGMDAwOEFGNjdCRkFBMUY4RjFGQTE3Mzk5RkQwN0QxQzM0RUU1RgotOjEwQUYwMDAwMjMxMTdGMDhCRDI2REEzOTEyRjhENTgyRUU1MzZBRTNBMQotOjEwQUYxMDAwREJBQjU0MTM2MDdERTU3MkRGOTVCMEVGQTYwRTg1MjRBMAotOjEwQUYyMDAwNDkzMUY4QkJGQ0ExMjMyMEI3RjI3QTc3NDgwMDFCMkJFQwotOjEwQUYzMDAwOUQ3NTY0RkM1MENBQTdGQkJDRjU0NkUyOTU0OUUyNzVENQotOjEwQUY0MDAwMzc2RDkwQjVENTQ2N0VFRTUwMThERDI4RTZGMzNERTEyRAotOjEwQUY1MDAwNjc3Q0MyRTMwNUIzRkRBMTYzMDA4RkU2N0REQjE0QzAwRgotOjEwQUY2MDAwRjM4RDNCREY1MTQ2M0FENzE5MkREQ0E0NDZFNkJGMzRCQQotOjEwQUY3MDAwRDUzQjIzQjBERkNBRTU3NkM0RTM5QTBFMjUwMkYyQTlEOQotOjEwQUY4MDAwNjlGNzlFQTgwREVDRUM4RDQ0MDVGRTZGRUFERDczMjg5MQotOjEwQUY5MDAwOEZDMjI3QkY0OTlCMjYwNzYyRTNFNTM3NDUyNDU4NEZGOAotOjEwQUZBMDAwMTYyNUM2M0VGNEZGQTIwQUU4NkQyQjdEODM5RDBDRjZBNAotOjEwQUZCMDAwQ0EyMTE3RTNGRjBGMkJEREJBNDRFMUY4QTEyM0RDMDQxQgotOjEwQUZDMDAwRUQzRUNDNEQ1MUY1NjAwQ0VFQ0ZFRDk5RkZCQzQ0NTlGMAotOjEwQUZEMDAwRENGMzQ0NTIxNEJFNURCNjlFMUMyNzZERDc3NTlFQTI0RAotOjEwQUZFMDAwMDIzREI5RkM2MThGOEZDMjI5QzMxRURBMEJGREQzN0RGMAotOjEwQUZGMDAwMUVCNThERjYwRDI0OTEyOUE4QUY0NzA5ODdFOTE2QkEyOQotOjEwQjAwMDAwOThCRTkxRjFDQjVDNUZBQUIwMDNBNzgwNUMzQUQ3RTcwQQotOjEwQjAxMDAwMTE3NjE0Q0FBQjQzMEVCNjhGMEVDMkQ2REI5OUE5MTVCMgotOjEwQjAyMDAwQzA3QTg4MzcwM0U3Q0Q2QjhBNEFFMDA3NThFNzhERDFBRAotOjEwQjAzMDAwOTU1Njg4RUQ0N0JEQ0U1RTA1RTRGQzFBMkU2RjJBOTcyMwotOjEwQjA0MDAwRUY5NERFMzNEMDQxQTk4RjlEQ0ZFNkVEREUyMTgxN0ZFNQotOjEwQjA1MDAwNDhFQkRCNkE3Q0Q4OUUyNDgxQkNEOUNEQ0UyOUQ2RDBFMgotOjEwQjA2MDAwRkFFQjBDRjI0NUVDMjM4RTlDQTk4MEY1QjlGQkZCOUUxNAotOjEwQjA3MDAwNjU3MjI2OEFGNDI3RDY2QkM1RTczQzFGQjNFRjJFQTI3NAotOjEwQjA4MDAwNjYwMkZFQUVFOEM1MDEzQURFQTFDMjY0MUM0RkYwQkQwNwotOjEwQjA5MDAwOTU0RkU3RjkxODlERTdENUVGOTQyMDlFRTA0QjYxRjZCOAotOjEwQjBBMDAwQTQ1ODlGNjhCN0NCNTc1NUVCNDMzOEY0MjExQ0Q2RDYyQwotOjEwQjBCMDAwREIxMTZGNjIzRDM1NEE2ODFDRjg2NUNCRjg3OENGNUNEMAotOjEwQjBDMDAwRjE5NjMyNDBDQkY3RkRGNDE1QTRDN0I1REQ5Mjg2RkVBQwotOjEwQjBEMDAwNDJGNzJCQ0E1Mjg4REJFOUZGMkU0MzlDRjYxMjY2QTI4OAotOjEwQjBFMDAwOTBFRDNGNzkwNUY1Q0EyNTdCNTlGQzYwRURERTNERjYxNAotOjEwQjBGMDAwNkJERDMxM0EwRDlFNzg2NjI1RDBEOURBREUyNEUyOTJGNgotOjEwQjEwMDAwMDA3RjAxRTQ1MzJCOUQ1MjM5ODM3NDRGNzQwNUNGQjlFRQotOjEwQjExMDAwQTg5Q0Q0NTFBRTkyNzAxMEZDMTQyMTg3M0IzOTdGMTM0OAotOjEwQjEyMDAwMzdGQkZENDZCRTZFMzE2RTRDN0VCQTkwREU4MzI3QTY5RAotOjEwQjEzMDAwM0NFM0E0RjA1Q0FCNEFBQTBCRjg5MUMzOUI4RTFGNDU3RAotOjEwQjE0MDAwMzk0QzQ4MjFGODZCNjI3QzJCRkNGRTk5REJFRDcxRjBFOQotOjEwQjE1MDAwN0MxQkUwRDlBQTRGODQ5RTBEM0U1QzQ1RTAyQkYwNjczNgotOjEwQjE2MDAwRTc3MDFGRDJFRjNFMDVEN0RCRTFCMzMzM0Q1RkM5RTJBNQotOjEwQjE3MDAwREExRDBFQTY0NzNBREE5QzExRTBFQkU3RDIyRjdBNUU5MQotOjEwQjE4MDAwQTJGMkQyOTNBMTQ0RTE3QkQwQjZBQTA5RUEwRkU2QjFCQwotOjEwQjE5MDAwNzU3NEQ5MzYxNUI3MzAzRDc2ODcwRkYxOTc0QTk4N0M4QwotOjEwQjFBMDAwNjJGMkU4QkUxRjMzNzlEMkE0QkJEMTdGNkMwQUQ3QUQ1RgotOjEwQjFCMDAwQzY3MzA5OUY0Qjg1NzMwOTEyN0U1NjU5RUE4OUQxODM1QwotOjEwQjFDMDAwMTVCRjgxMjcwRTI4MDE1QTdGNDkyRkUzODMxOERDOTg4OQotOjEwQjFEMDAwQkUxMjc0NEJFNTFDRTJCRDMzNTM5QzVGODY4MzAwNTc1RgotOjEwQjFFMDAwRUFEN0I3NDFGQzQxRjhGNUE5MEQyMUREMTMxOENFQUYyMAotOjEwQjFGMDAwOTlEQ0FGOUZDNkZEN0E0Nzg1RjM2RkVBRDdBRkQ5RjBFOAotOjEwQjIwMDAwNkJGNDgzNkVDQTc5MDFCRjgyNUZBOEZGNjhFMkFCMjc0NwotOjEwQjIxMDAwMzhCRUVGRjczMUJERkE5NDhGRDFENTlBQjI1RUU0ODc4QwotOjEwQjIyMDAwMzVFRkI3MjAxRkI5NkI5OTNDNzFGNzlCRTUyMDIxNzc2QgotOjEwQjIzMDAwNzNGQjYwMkI4RTUzOTNEMjdCOTEwQzdFRjJCRjRBREU2MAotOjEwQjI0MDAwNzY5Mjc4REQzNzQ4MkRGRjA5NzkzMjY0MEZDRkRGMzhFOQotOjEwQjI1MDAwNDVBREZDNzIwQTU3MTc4NzAxNkZGNzZCMUZGM0I3M0VCNgotOjEwQjI2MDAwREM0NTExMDE3QzY5NkY1MTQ2QjI4NzRGMzcyRTg5QkU4QwotOjEwQjI3MDAwMjYwMUJFRDc3MDU4N0ZCOEJCRkFDMjNGNDA5QzcxNTdCOQotOjEwQjI4MDAwMUFFNkIzN0NCMDdCQzkzN0ZGNDBGQjdGQjg3M0FFMEFDOAotOjEwQjI5MDAwN0FEQUQ3MUU0MkZBMTlGNEJCNTQ4ODI3NTJGMTU5MkI5NwotOjEwQjJBMDAwNTE3QTY4RUJGRDU1RUE0QzM4MkY3QkVDODIyOTIwMzcyOAotOjEwQjJCMDAwREZFNTdDNzlFMkM3RjIwNjgwQ0ZBNjdGN0I3QzBFRDRFNwotOjEwQjJDMDAwQUY4OTQ4OTk2MDNGN0VCOEVCNUZGRjBBN0FCMTcxRTdCQQotOjEwQjJEMDAwM0FDQzRCNkI3RkVDOTc2ODk3REIyMjNCRDhFRkJCRDIyNQotOjEwQjJFMDAwRDBDRTNDRkVDOEI2MzkwMEY3RjZERTc2QUMzRkYxQzhFQQotOjEwQjJGMDAwMEUyQzNGRjM2RjhGRkZFMjJGNjA3Nzg0NTI1NTY4NzdGMwotOjEwQjMwMDAwRTJDN0RCRkVFOTJGNDBFNzc1QTkyQUVDQTMyOTZDNjdBOQotOjEwQjMxMDAwRTdCOTgyQkVBRDcyNkJDRjAxRTQ1MzQxMkY5NzgwREU1NwotOjEwQjMyMDAwMDUzOEQ1MzNGOTIzRThGOTVEN0VERUI0QUFEQUREMDUwOAotOjEwQjMzMDAwRjJFQ0REMkQ5RUM2Nzg3MTQ2QzVDRkYwMDJCMTE4OTRBRgotOjEwQjM0MDAwNjNGNTEyQzZEOUJBMjhENTQwQkNBMzJCOTk1NEMwMzc4RgotOjEwQjM1MDAwNjU1MjU0QzlBN0YzNUNEMUIwNjcwRURBM0RGQTNCRDcwQQotOjEwQjM2MDAwNDNGQjI1RkI1QzY0MEJDNkU1MjBBODRCRkQwMTI0NzU1RgotOjEwQjM3MDAwNDI0QUE4MTgzQzRBRkQ2NjNBRkFDRTJGMjlERDFFQTY5RAotOjEwQjM4MDAwRjIwMUY1OEVDNTFGNThEMkY1QzJGRjgwMUNBRDczMEVCOQotOjEwQjM5MDAwMUMwMDUxMjg3RUVGRTJGMTFCREExRUY1NEVGOUZBRjg5NwotOjEwQjNBMDAwNzFEMjU0QkY5QkQzMkREMzlCNzk3QjE3MTUwNDUwNEU3QwotOjEwQjNCMDAwMjRBOUUzMERGNkU5OTgyMzJENUIyMDNEMjlBRkIxRUZEOQotOjEwQjNDMDAwMjJEOEM3QzVDNUQ3NEM0NUJBODBGODFGRTgxRkREOEQwOAotOjEwQjNEMDAwRTNBRjg1RjgyNUU1QkY3M0ZDM0MyRUUyMjVCRTE5NzQ2QQotOjEwQjNFMDAwRkUxQTNCRjFCOUUxNEJDODZCMEU5NDIzOEZFMkI4RDQzRgotOjEwQjNGMDAwRkU0MEJCMkFGMENCMkIxRTA1N0I2NEJCMjM5QzNCMEQ4MAotOjEwQjQwMDAwQzZFOUUyN0E2QjI3NUIzN0VERUY4NTczNTQzQTlFNzc5NgotOjEwQjQxMDAwQzYxNDFDQTdDRjkxODFGRDc1RDY3RkZFQ0UzNjI5QjYwNgotOjEwQjQyMDAwNUU0QUE5NjM0MTZGQzE3ODY1NkVEMDMzN0EzREUyMjdFOQotOjEwQjQzMDAwQTBFMEJFNEU0MDkzNUNEQ0Y3RTQxNTI1MzFGRUI1QzZCNgotOjEwQjQ0MDAwN0Q0MDlFQzFGOUYwNkM3RjY1ODU3RjVBRUMyQkUyNDEwRgotOjEwQjQ1MDAwNTY3ODZFRTRGNTNGRjM2QkY4MjVCQjMyNEQ3QTI1OTFCMwotOjEwQjQ2MDAwQkRGMkNDMTUxRjMzRkRGQkIzNzc1MERFMzQwMzFEQzM5MwotOjEwQjQ3MDAwRkNFMUY3NERGQUY3NUE0MUM3NEZCRDgzNzQ3Q0VEM0VBRQotOjEwQjQ4MDAwQTY3RjlCRjc5NTJBNDBCNzFGQjQ2QUU0M0Q2QTgwMzZEMQotOjEwQjQ5MDAwRjNGM0Q3RUREMkMwRjU5OEVGRjI5NENCMEI3MUJEOEZEQgotOjEwQjRBMDAwQjlCRTU5QjNGNTlEQTM3MDZFNUFCODJGMTdGREZDOEYyNgotOjEwQjRCMDAwOUY3MkQ1QzMzODA3NkQzNjg0RTdDMTlFRjM3N0I0NEJDRQotOjEwQjRDMDAwQzY3NTMyQkY4MERBQzE0OEFBQ0RENDRFNjU3NkYwRUE5RgotOjEwQjREMDAwNkRFMEE3QUQ2RDI0MkFGMDdGQjM4NTdFOUFGN0JEODIxQgotOjEwQjRFMDAwRjQyMkVDRTBFMEMzOEI1NzMzRkJEM0E1QkFDMDhGOUJBQgotOjEwQjRGMDAwQzdFQzUxNDJFRDUxNjg5RjNFMkZEMkE2MjA3RDk1OTYxNAotOjEwQjUwMDAwMDM3RDNENzNDNTJGM0E0MThGMzdDRjIzNUUxODdGRkJGNAotOjEwQjUxMDAwMThFREE5N0NEQzhGNDQyMENGNjVCQkEzQkJDQTRFRkJEMgotOjEwQjUyMDAwNkZBRjA5NzgyOTI0MjlEQzc2QTJERDRCOEExNUFFRTdCNgotOjEwQjUzMDAwNTZBM0JEREM5QzczOTU4QTdDNjY5NTA3NEZCNUExREQ0QgotOjEwQjU0MDAwRDUxQzQ4QzZGNTVDQjI0RkJBODVEOTIzNkVDMkQ2MkYzQQotOjEwQjU1MDAwMjE3RDVFMTI5OTE5ODFGOEQ5NDcxQzdFMDI4RTFGM0IwRQotOjEwQjU2MDAwRkE1NjAyM0MzRUZFMDkyNTQ0NUE3RkM5M0M0NkFGRTlFMwotOjEwQjU3MDAwRjM3QTUxOEUzQ0Y3RDQ3Q0Q0RTM4MjJFM0Q0RjI2QTE0MgotOjEwQjU4MDAwM0VDRkIwN0IyNTE1RjVEQTkyMjQyMzVFQkIxRDRDMkZGMAotOjEwQjU5MDAwQTU3MzNENTNCNDk1RTFCNzkzRjM1M0E3REZDNkJGOEFCNAotOjEwQjVBMDAwMzlGRUUyRDUyNzgzREVGRDg4RTMxRkM1MDhDODc3MkU2NAotOjEwQjVCMDAwNEZENkFFOEUyMjNGMzVFRDY2RTNGOTkyQjREMjVCMERFNQotOjEwQjVDMDAwRjRFQkFCNjY3QTUxOUMwN0MwRjlDMEEyMzhGMkUyMzFDNQotOjEwQjVEMDAwQkU4RUUwQzNBQkI2ODFCRDdDMzFDNTNCQTg5NEJDNjJENgotOjEwQjVFMDAwMkU0NzI5NUQwMERDRjIxQTQzNDgwNzE3RkI2RTUwMjFGNQotOjEwQjVGMDAwM0ZENTlGNDlEMDVGMUM2QzUzNDhCQ0I4Q0ZFMzVDOEVFRAotOjEwQjYwMDAwRkEzMzQzNjUxMDg3RjY2NzdCRDBDRUYxQ0I5NTM2MTdCQQotOjEwQjYxMDAwRjQyQjk1RDQ5RTAwOUU3QkEyOUQzN0U4Q0Y1NTdCNENBMgotOjEwQjYyMDAwRkMxRTJBQjNEMTc2QzdCMjNDMENDRjkxREZEODE3OTc1NgotOjEwQjYzMDAwMDAxRjA2RDhCODE2QkI2RkI4REZDREVDQzY4NURERkFBMwotOjEwQjY0MDAwNjRGMDQzQzRCOTg2ODA0M0E0MkRCOURFMjgzRjdGQzI4RAotOjEwQjY1MDAwRTExMDk5QzhFMkE5RDRCRTc3NjM1Q0RCNEJFNzAxRkYzOAotOjEwQjY2MDAwQkU2N0U2MjNDQ0JGNkZDNzc2MEZGQjk5N0Q1NDQzRjdDNwotOjEwQjY3MDAwMDc3NjlCQkYyOEI0OUVFOTUzOEYxQTBGMUVCM0ZEQzJGNQotOjEwQjY4MDAwMkU1RjU5MEE3RTY1NzM5RDVCMDU3RUJCRUY2N0QyMkFFQwotOjEwQjY5MDAwQTQ2NzA4MTY4MkRGMUQ1RThENzgyMDE0MEZDMDBGMjQ2QQotOjEwQjZBMDAwQ0NGQ0QyRTY5NjUwMjQzRUJEMkY0MkZFNkIwNkZFOTNBNAotOjEwQjZCMDAwOTBERTMxMEU0RkU5M0RDMkU4OURFOTNGRTFGRjgzN0MxQQotOjEwQjZDMDAwMzRFNjFEMEEzOTIwRTQ0QkIzMzIzMDAxRTg1OEYwNDMyOAotOjEwQjZEMDAwRjM5QzgxMDkwMEI3RDFDQTkzOEYxRDk0RkY4MTdGMjgwNQotOjEwQjZFMDAwMUM4MDdGMDRCRjc4OUU2NjdDQjJBNTJENTAwOUY1NUI1NwotOjEwQjZGMDAwNkE4OEI3RERBMDhGQUNGRTEyQUMxM0ZDNEUyMUQ3NEY4OQotOjEwQjcwMDAwRkE0MkM3RkQxMDA3QjA0NTNCMjFCRjQyQzhFMUU2QTc5QQotOjEwQjcxMDAwMzc0Rjg4OTdGRjI2RTRCMEQzQ0VFNDlCMzM5MjEyNjk2QgotOjEwQjcyMDAwMzdEMDE3OUNGOTc5QTZFMDE3RjM3OTUyMzZDNDhGOEY3QQotOjEwQjczMDAwOUNGMkJCNzkxQzdGNzRGOTEyNTlBMENCNDFERUY0QTRCMgotOjEwQjc0MDAwNjA1RUJCODgxNzU5QzdGREQ4MkY5OUUyMzJDMjZGODE1RQotOjEwQjc1MDAwNzMwNzY4OUY5M0M1RjgyNzI1OEJGMzY3OTY4OENGNDZCNAotOjEwQjc2MDAwNENGNDFGQjA4NURGODEzQ0EzNDRGQTRCRjRGQjVCQzU2RQotOjEwQjc3MDAwQUZDNDNDNDI4RjVBRjEyRkNFNEQ2MDNGOEIyNjI1NkVEMQotOjEwQjc4MDAwRDc3RDgwQzkyNzJCM0Q0RUU0N0M3MjE0N0MwRkRBRUUwNgotOjEwQjc5MDAwM0ZGODM5RDc3MEZDQjI3MTQ4NzhBMjI5MkZBRUNCQjZFQQotOjEwQjdBMDAwQTczMTVFMUM0QzlDNzc5MDg3MjY4RTJBRUZFRTQwMkJBQgotOjEwQjdCMDAwQ0JBRkZBMEY5RTY3NEI1NjRGMzRFNTU5QjlENTQwMUJCNgotOjEwQjdDMDAwQzQ1MUFCOUNDMTUyMTlFNzY1NzEyQ0NGMUNGMjA5RTgzQQotOjEwQjdEMDAwRTFDOUZCQkE4QjIxN0ZDOTFGMzI5Rjk3NjRENzI3OUI5MgotOjEwQjdFMDAwQ0UyMzcyQzMxOUE2NzI3RTYzOUVBOUZEOTg5NjQyNTMxQQotOjEwQjdGMDAwRkQzOTFCQ0UzM0Q1MDdGNTI5QTY3MjUxRDcwQzUzRkI2MwotOjEwQjgwMDAwRjFERDU1QTZGMkI5MEY1QzZDNkEzRjMxQjJEODU0REU1NwotOjEwQjgxMDAwRDJENjVCMEY3ODM5N0ZENzk1QTY3RTU1NzZBRkJEOTQ4QgotOjEwQjgyMDAwQzJCNUE0Nzc5NTM5N0ZDQzAyQ0ZCNEJGQ0E3MUU5QjA1NQotOjEwQjgzMDAwMjkyQjg4NzhBREIyOUJGMzg4MkZEODY3ODYwN0E0Q0JENQotOjEwQjg0MDAwMDE5QzI3MTMzRURFOUM2MzUzNDZDQTZGOUQ0Q0VDN0ZFMAotOjEwQjg1MDAwMUUxMEZEODNDM0U5ODEzODA3RDQ1MDFDM0Y1M0QwQjk3MwotOjEwQjg2MDAwMjg1QkNGQjU4NEZDMzg1M0ZBNEJCNDRFNDE3Rjg5RUE0QwotOjEwQjg3MDAwMTNDMUVEM0I5Q0ZGMDU1QzFDNDM3MEE5NTc0NzgyOEJBRAotOjEwQjg4MDAwRTM3NDcwMjExNDJFOUVBRjBFMTdFQjc4OUI1MjlBMzEwMQotOjEwQjg5MDAwNEZGODM1MjgxOEVDRTM4MTU2RjM3RDk4NjU3QTFBRDM3MgotOjEwQjhBMDAwNDNBMTI1QTdCMUEzNTkxQzM4OUNDNENFMkJBREY1RkZFRAotOjEwQjhCMDAwQzlFMUYyMjE4NTA5RTI2MTk0N0NGRDE2Qzc0MzdGMjIyQwotOjEwQjhDMDAwQkVERUYwQzlDMTZDOTBERkI1MDRGRDY2NkY0QkRCMjdBRgotOjEwQjhEMDAwQTBCN0FFQjY0NzA5RDBGRjdEN0MzRkRCNzlCRUU4MDM1OQotOjEwQjhFMDAwQUQ1RTFDRTc0MTdFMUVGOTUwNkIwMDdGN0ZCOEI1MTgzNgotOjEwQjhGMDAwQkY5MTU2MTU3RkVGNjlBREMwRUY0RTZBQ0ZDMUY3MDcxNAotOjEwQjkwMDAwQURCNUY4RERENTFBQzI3NjNGNkNBREM3RUZFRUQ2MzBENwotOjEwQjkxMDAwNUJENzMwN0M5MTcyQjQ3MzQyOTk3MUUzQTVEN0U4RjI5QQotOjEwQjkyMDAwQThGMDQ0RTQ4MkI4RkEzMkUxMzg3MkMzODhGOUU1MUIyMgotOjEwQjkzMDAwRkFBNUM3OUYzNUYwRUY1QjU5MUVERjUxQzg2RDlDNEVDRAotOjEwQjk0MDAwQTZDM0Y5RTZFOUZBN0ZERTRBMUU3Rjc2RkNFOEY5NDhFRAotOjEwQjk1MDAwRDAxMzM5OTUzOTIxMUU1Rjg3Nzk1RUU1NjNEQjU3RERBQQotOjEwQjk2MDAwQTU0RjRBMENBRjE4OURDNTg3NTM5REYzRTMzQzcwRDY5NQotOjEwQjk3MDAwMjc4M0NENjBFODJGRUU5Rjg4NzI1RDM4MkRBRUREOTA3NQotOjEwQjk4MDAwOTdDREY0NkU3RDEyM0I4RjVGNkVFMUVGNkY2NTMzRkFGQQotOjEwQjk5MDAwRkQ1NjM2RDM3N0JGNEIyMDY3RDI3OTNENURBNzAzQ0ZFNQotOjEwQjlBMDAwMDc4N0YxREQzREIzRTNDMUY3QUVFQzgwMjkyRkM1N0FGRgotOjEwQjlCMDAwNkZDNTNBQ0VFRjFDREQ2M0Q0Mzg3Qzc2QkE3MUM0RkUxNQotOjEwQjlDMDAwQUNGREFFRTJGQkZGNjYzNjYxRUJGRjdGQzY5RkJGQkJGRgotOjEwQjlEMDAwQ0U4M0ZFMDNDMENENkZEOEZGRUZBRTRCQTk4RjE3OTc3NAotOjEwQjlFMDAwNjlDRjY2RTdBMUQ0M0EyN0MxMEMzNEY1NzUwNTZDQzU1QgotOjEwQjlGMDAwNjIxMjYwRTdCRUUzQkMxMDFGMTI3OTAxODlFOUQ1OEU5RgotOjEwQkEwMDAwNzEyNDg0QTEzQzFDQUUxNDFGMDFBNTg4OEU2RjFGOUE1RgotOjEwQkExMDAwMjc2QTg3Nzk1NDVCNENDRjQyQUUwRDMxRENGRjkwODdBQgotOjEwQkEyMDAwRDMwM0VEQUYyQjk4RDczMzkwMDdFQjNCNTM3QTIyRjIzOQotOjEwQkEzMDAwNDNFMzQ3M0FBNzFCRDZGRjBDRTVDQzlBRUNCRkFGOUM3QgotOjEwQkE0MDAwMTE3QzRFNEVERDNCM0U5RTlFQUM4N0I5Njc1MDdCRUMzMQotOjEwQkE1MDAwRkU4Nzk4OUMzOUNEQjg2NzBBQkY3QTc5MDBDRkFGNDc4NwotOjEwQkE2MDAwMERCRjdEQkU1MUM1QTUzRTc3QTU0RTI2RDRBRkRCRTAwOAotOjEwQkE3MDAwNjRERkRCOTM1MzdCRTBGQkI5NkI2Qzg0QTQ1MjdFODE2MwotOjEwQkE4MDAwNzU1MkJFRDVBQjA4QkJCRkY1OTZGMDlCNUFBNjgzQkNEQQotOjEwQkE5MDAwREQ5RTFCN0EzMDlCOEVCMzRBNjFGRUUyOUZCMkI0RUYwQgotOjEwQkFBMDAwNDMzOTk5OUYwQjI3RjM3MzYxMjU1QkU5ODQzMkQxOEE2RgotOjEwQkFCMDAwNzE1RjE3RjA3RDc1REEwMjYzNjE1RkVGNEJFQTQ0RjA2NgotOjEwQkFDMDAwNUJCQ0I2ODgwQURGNTQxMjJENjFGOTc5OTEzMEY4NkJBRQotOjEwQkFEMDAwOTlFNzI3MDdDMERGNEQ5RTQwNDgxRkM2Qzc1NTE3QzRDQQotOjEwQkFFMDAwRDE5NDk0QzExN0M3MDFGRkZGRDI4NkY3QTIxRkY3QjIwNgotOjEwQkFGMDAwNzUzRUZFNDAzRTlFQjM1MDgxOEZGMjYyMzJGQzRFQjdERgotOjEwQkIwMDAwQjIwNUVDNzJEQUZGRkI1MkY4ODk2Q0JBQUZFMzVFQTdCQwotOjEwQkIxMDAwNkVBM0VCOUFCQ0Y5QkQ4QzBDRkFGQkUzRkJBQkYwNUNCQgotOjEwQkIyMDAwMjFCQTRCRDYxNUI4REZEMEY3RTE3NzJGQTFFMzVERDA2RQotOjEwQkIzMDAwRTdDMEY4RjMwNTQ0NDZGOUJFQzY0RUI2MDIxRjI1ODI5QgotOjEwQkI0MDAwRUYwN0RGODg5RjA3RTZDODkxNENGOTVERDZGQUY3Qjk5MQotOjEwQkI1MDAwMUVGODIwNDFCRUYxNkJCQzVFRTRDRjM4NDRGRThDNUYyMgotOjEwQkI2MDAwMUIzMTdGQzY2MUM5OUY3MUQ4NDMwNENFODUxRDQzRjkzRgotOjEwQkI3MDAwMzMwRDA0RjM2N0U4MzhDNkZDOTkwRkFBRTJBRkEzOUYyMAotOjEwQkI4MDAwQ0I3M0M3MTcyOTA5QzY0REM1REYzRjI4MUM3OTlGOEU4NwotOjEwQkI5MDAwMkY1Q0E2N0NFQzU4N0YzN0ZFOUUyODdGRTczMzAxQTdGOQotOjEwQkJBMDAwMDRGOTRCOUYwQ0FEMkY5N0U4OTlDNjdFOENFRjYyRjM5QQotOjEwQkJCMDAwMTQ2MEJEQzM5MjA3MTRBQjY3RjkzRjFERTk4QzRFMEVBQwotOjEwQkJDMDAwRTQ3ODdERDdEMEExQUYyMTAzNzg5RkYzNkFCN0NGMDE4NgotOjEwQkJEMDAwRjFBNDEwNTFGN0UwRkQxRUJCNjM3MDQwRjA2MTIxQjQ4OQotOjEwQkJFMDAwQjNCRjBCNzZCNzhENEE1RUIwQkJBRkRFRTA3ODc3QzBFRgotOjEwQkJGMDAwMjBCNzE2NjlFNjMyODFGNjA2MzlCQzE4NjJEODc0MUY4MAotOjEwQkMwMDAwQzlFNzE1NjNGRURGQTcyNDkwRTYxRDQxOEUzNjM4RTVBRgotOjEwQkMxMDAwOTBEREIwOEZGRTA0NzZDNDg1OUMwRUZCNzNFM0MzQUY0QQotOjEwQkMyMDAwMzBDNzY2Q0E2MzFBREU5RkU3MDNGMDdCNjhCNzdBNDdCRQotOjEwQkMzMDAwOTY5RjAwREY3MEE2NzE3QzJCMUU3QzU4N0YzQTM4RkJFNAotOjEwQkM0MDAwRTFCMDBERTI2QTk1MTJDQkYzRkY5QkMzM0I5REU3QkJDRQotOjEwQkM1MDAwQjFGQjAzMEU0QkJFRkFFMjVDRUJCQTU5QkVGQUZERTk0QQotOjEwQkM2MDAwQTE5OTM5RDgyRjMwQzE3ODVGNjBBRjVENEI5OTQyQkY0MQotOjEwQkM3MDAwRkQ1Q0VFNThFMUIyODlDM0Q5QkFFRkJEM0NFRjNFNTk0NQotOjEwQkM4MDAwMjYyRDdCMENGMEI3RUVGNzFCMzk4Q0NFNDVGQjBFMDc0QgotOjEwQkM5MDAwM0JDRjAyQzFFN0E0NzI2RjA1NjE3MjZGNDU0RTIxQ0ZBMQotOjEwQkNBMDAwMUY0RkI3MDNCRTFBRDgxMDY0ODVGNzEwOUUyRjA5MzhBRQotOjEwQkNCMDAwMEY4MzFGODdCQjE1OEUyMTEyNTgwOUY5RERBNzgzRTc3MwotOjEwQkNDMDAwODY1QzZENDUwRTlERjc5QTU3OTIxNTkwRkYyQjlEODNDQwotOjEwQkNEMDAwMDdDMTY3MURFOEIzMUQxRTQ3QkZFRkI4QzcxRERENDk4QgotOjEwQkNFMDAwRTAzQ0FFRjhDOTY3RTgzN0I1NDI2NTc5MTU2NDFFREFGRAotOjEwQkNGMDAwM0Y5MjlFMkY3Rjc5RkVFOEVEOUZDRUQ0NzAzMUYwQzc0MgotOjEwQkQwMDAwRkIzQzNGNUJFOEE1Q0VCQzEzMTMyMENGRkVCRDhDQ0EyNQotOjEwQkQxMDAwMjlCOTdFOENDMzZCOTk0MDQ3M0Y0RjYyNzRGNDAwMUQ3NAotOjEwQkQyMDAwODk5NkQ3RkQ2MjIyREU4N0JGMkEzN0FDNDIzQjkxRTc3NgotOjEwQkQzMDAwNDdCNEMxMDk5MDk3NzBBNjcwQTI3RjFDNDA0N0E3ODNBMwotOjEwQkQ0MDAwRDM5QTFDQzJGODMxMzUzRTlERjRFNEIwRjhERkU5RjgyRgotOjEwQkQ1MDAwMDNFRkExOTVGREZERjg0M0MwNTM5QzYzODhGNUE5Qjk5NQotOjEwQkQ2MDAwOEMwRUM1NTdDMENEOUE0RkE0RTZEQTc4M0I5NkFGNzhEMwotOjEwQkQ3MDAwNTU2RTA4RTE3QzcyQ0MyNzQ3NUQ3NEVERkQ0QUZDRjdGNwotOjEwQkQ4MDAwMUQ5RTFDRTVGRTA1QkNGRjVFNzJCODNGMzlGRUZBNUVFMwotOjEwQkQ5MDAwNENDMEM3RkZBOEY1NERDREU1RjQzMzM5RkVGQURFMUVFMQotOjEwQkRBMDAwMjVGQzQyNjRGMEFERjRCRjgzMUVBMzc4OUUwQTc4MjY3QQotOjEwQkRCMDAwMUQ4MzI4MUZGQjMzRTJBRkYzQUZBMzVFNjdEOEYxRjcxMwotOjEwQkRDMDAwRDBCNzgyQkU4OTdFNEQyMzlFREZFNzI0QzczREJGNUY4QgotOjEwQkREMDAwNDZGRDI5RjA4N0FDRTdGOEUyQkM5RUNBMEZEQzZGOURGOAotOjEwQkRFMDAwNzM3MDY1MjZFMDdEMUVERjc3MTY4OUE2QzNGOUU2MkZGRQotOjEwQkRGMDAwOTJGMDNDNjA5ODlFRTRGQzQxRTE5NTkyMEJGQTY0RTE3QwotOjEwQkUwMDAwMjBDNjM1RkEyN0M0OTcwQjI5Qjk4Q0VFODZEQTc3QjFBQwotOjEwQkUxMDAwNzkxMkRENDNDOENDOTU0Njc1MEY4MTk0ODUzMTFFNTg0MwotOjEwQkUyMDAwRTk3NDQ3NjU4QTg3NUIzODNFOTRGQzlCNTRCMDBGMkJCRQotOjEwQkUzMDAwNzM1RTNBMDJGQkE0RjBGRjcwMDg5RTg2RkNCRTEzQUQ1MQotOjEwQkU0MDAwQ0Y3QkM3MzkxMkNCRUQzNUYyMTNFNTJENzFGNjMzMjFENwotOjEwQkU1MDAwMkIzQzIxRDcxMDZGNUNCM0VCMDVFRjM4MDNCRTRBQzgwQgotOjEwQkU2MDAwODA4REREQTMxRUI0OTlGQ0U0NkM3MjQ2N0VGMjdFMTdEMQotOjEwQkU3MDAwRTM5N0Y3MzI0MkE4MEY0MDNGODBERUU5N0NGQUMyNTJENgotOjEwQkU4MDAwNDAyNkQ4MTk5MERGMzNFODQ5NDYzOURBOUUzN0EzMzg3RgotOjEwQkU5MDAwNjA4MDY3NkRBRUIwMkZFNTA0NzZFM0Q3QkIxRjEwQjNBQgotOjEwQkVBMDAwOUIyNDkzRkQxQTFCREY4RUJGMEJGQzU0QkE1RjhDOEI1NwotOjEwQkVCMDAwOEYwOTU5REFBNTAwQ0ZCRjY0Njg5N0MxRDcwQTNGRkQ0MwotOjEwQkVDMDAwQ0U1OUU5NzhGRjAwRTAzNzM3MzZERTEwRkUxM0UwRjk4RgotOjEwQkVEMDAwMUI1OTVBM0RDMDREQ0QwQ0IwQkMwMTkxRDczNzE0QkY5MgotOjEwQkVFMDAwQjA3QjhGM0E2M0YwMUUyRDVFOTI3OTdDOEREQTBEQUJCQwotOjEwQkVGMDAwNjFCRDRBMTJFNzQ3RTJDNjdCRTRDMjZFMjExNkZCODZBQgotOjEwQkYwMDAwMTQzMzdGNzc0NUNFNEJGRjAzRjE5RkNFNTRDNkIyOURDRAotOjEwQkYxMDAwRkZFNDQyM0ZGMDZBQzlBQkMwQkVBOUZERjFFNkY3Njk5NAotOjEwQkYyMDAwRkIzMDg5QkVGOTJERjQwRjg1OUQ5MTIyN0Y5OTMyRkE1RAotOjEwQkYzMDAwNzUwQUZGRjk3NDc5RDZDRjgwM0Q0NkQ3NTM2NTczRTMxMAotOjEwQkY0MDAwNzlFNzMzNzQ3RkI5NTQ2RTU0MjlFQzVCMzk5RjUyMTVFRAotOjEwQkY1MDAwMURBRjRBMkVEODNGNDBEN0Y1MTkzOTk1M0M5QjdFQkY3RgotOjEwQkY2MDAwNDMxODFDRDZCRkYyODcwQ0YwNDdBQkVDOEUxMzQ2QjlEMgotOjEwQkY3MDAwNjU4RDdGREM5NTZCOEU3RjdDNDYxNkZFRTY3QzgwQ0JFNAotOjEwQkY4MDAwQUMwQzg0Q0JFNEE3RTY2NTFCRTMyRjQzRjEwRkJFOEYxNwotOjEwQkY5MDAwMjVGQTM1NEM5RTVBRTQ5QzkwNjczNjI3N0I2Rjg0Njg1RgotOjEwQkZBMDAwMjRFMENEQzIzODEyODNCQjJFRTFGQjU3QjM0NTE5OUM2OAotOjEwQkZCMDAwMTQ1QTlFQzU5MTI0NDE3RkJBRUZEOUZDNEI1Njg1NzMyNAotOjEwQkZDMDAwNDBDRTQwNUEwRkNDNDdCREJGMUNGOEI2NUZBODA2RTA3NAotOjEwQkZEMDAwM0I1NzBBRDlEOTNBMjIyQzBGOTFCNDE0NDA3QjlCNzM1QQotOjEwQkZFMDAwNDA4NkY5NDVCQzAyNTc5MjA1RTM4ODc5NTlEOUMzQ0JGRAotOjEwQkZGMDAwMUQ3NTlGQUVCQzJFMzAzQ0FFNDFEQzFFQjQ3RjE1QkUxRAotOjEwQzAwMDAwQkVFMzVFQjc2RTMzQzQzQjkyRENEMUUzOThCRkNBQkZEOAotOjEwQzAxMDAwRDZCOEM3RURCMkFFNDNGRTc2MzJFOTQ1NzlFOTc2N0YxMAotOjEwQzAyMDAwQTQwMzMwQkNDNDJCNDFGOUZCNTJGOEU3QzAxNzQ3OTU3NQotOjEwQzAzMDAwNkUxMkE0QkY5RkZDRjlFNzA0REY2NTgzMUI2MjQ1RjAyNQotOjEwQzA0MDAwMzVFQjI3QkY3QjNERTY0NUZCNDM3NjhCNUUwQTRCQzA1NQotOjEwQzA1MDAwNDdEOUY1RDZERkNERkFDQTQ5RkFGMUZFOTAxNDBERTVCRAotOjEwQzA2MDAwN0M5OTc5RkE3ODRFQTIzODhFQTM4QUExN0VGMDQ2NjYzMgotOjEwQzA3MDAwMEYxRjRFNjZGRDBGMjdCMzdFNkY3MUJERDQ5Q0ExMTBCQwotOjEwQzA4MDAwQ0M4QkM5NzIzQUMxOUVGRkQ4NzMwQ0FFNkM4MjNFRTk2QwotOjEwQzA5MDAwMDI3REUyNzQ2ODg4NTdBMTU3RDZFRUJEOTkwMERFOUFGQQotOjEwQzBBMDAwRjcyRDQyMzhGQzVFNjJFN0E0RkEwQTA5RjMxOUM0QkIxMwotOjEwQzBCMDAwMEZGNTkzQzhDQkI0Mjc5OTkxQzdGQzk0QTVDRjg3NTdBOAotOjEwQzBDMDAwMzREMTcyREQ0QkE0MjQ0QURCOTVDRTBERDVDMEZCMkVCNgotOjEwQzBEMDAwRUQyNTQ0REQ0NENCRURBRUYwOEY3RTAyRkI3ODg1QkRDRgotOjEwQzBFMDAwMzdCNjhFREZBQkE1OTg1OEIzOUI4RUJGRTNDQTMxRUE1MwotOjEwQzBGMDAwMTZEODUyRjU2MDI3RTQwQjBENkUyNjVFQzgyRjE5NDY0MAotOjEwQzEwMDAwQkZBNzI4M0Y1MDdBNzgwNENBNzREREVCNTY4N0ZGRTU1NQotOjEwQzExMDAwMzZEQTNFRjcyNUEyNjIxQjVFMEYzRTBBRTA0RkUyNzQ1QwotOjEwQzEyMDAwMDFCRkNGQTVCRkFGRTM3NDU0QjQ1RjYyRTdGQzNFRjYzNgotOjEwQzEzMDAwMEUxODBFMEVFRjc0MzlEOUZGQUVEQjVGNzlGOTM0QkEwMQotOjEwQzE0MDAwQUVBMkJFQTk0OERFRTM2ODdCQzg4MzgyNEMwNEQ2OUVCQgotOjEwQzE1MDAwRDhFMkI1MUYwN0VEMDM3MEFFQ0ZGMDQzRjIxNDdDM0Y3OQotOjEwQzE2MDAwODk3MEY5MzdEREMyODczMzYzRkM4MEY1QTVCQ0JDOEVDRQotOjEwQzE3MDAwRUIyOTEzREZDMDM4RDQ2RkQ3Q0FEOUIxM0ZGNkYzMzFGQQotOjEwQzE4MDAwRkU1MDg5RjhDM0Y4NzkwNjg5RkQ4MTcxQUI2M0YzQTA4RAotOjEwQzE5MDAwNUM5RUM3RUIwRTJFNUY4MEY5REZEM0VERDEwM0MwRUZCRAotOjEwQzFBMDAwMzNGOUI3OTQ3RjgxREY5RDE0OEU1N0Q4NUIwRUZBRTk3RgotOjEwQzFCMDAwN0VEMjM3MTBCNTBENjY2OTA4QjRDMzc4NjUyNDI0MDNCMAotOjEwQzFDMDAwOUNDQkJEOUJEQjYxN0QxNzM2QkM5MjA5RjQ3NTczNUUxOQotOjEwQzFEMDAwMTFEMkRGMkNBNzVBRTRBMjI0RDI1RUExQUFERTIyNzhEMwotOjEwQzFFMDAwNkY0QzQyQjgyQ0FENzc0NjIwQ0Y2REU5RDA3QjNGRTE1NAotOjEwQzFGMDAwRTAzMkNBM0Y1Nzg0MjU3RTBGM0YxQzZDMzBDNDZENDUyQQotOjEwQzIwMDAwRkVERkIyMjRFQTVGQzc5MURGMzdFNzMxRkQyRUZBQUZEOAotOjEwQzIxMDAwRTNGNzUzNDRGRERBM0MzN0NCQ0ZDQ0JCNjg0NjFFOUVEOAotOjEwQzIyMDAwQzdCMEJDNjhDQUZGQjNGM0E2QzVFNDBBOUQxN0YzNTZBRQotOjEwQzIzMDAwOTYxMENEMDFGQjVBQzJGOTU3RjBGRjUyRUQ1NkI0Njc4NAotOjEwQzI0MDAwOTc4NkNDNzZFOUVGMjU4NjZGN0RCOTg0NzZFMjE1RjU4MQotOjEwQzI1MDAwMjNEQkFEMEJGM0M0Qjk3MDgxMTdGNTAwMTE3QThBRDFENQotOjEwQzI2MDAwOTU5MEU3OEI0MUJGODMxQ0FFQTVGQURDNjAzNzM3RENDNQotOjEwQzI3MDAwN0UyQTFERkI2NUZGNjBFRDk3RTdDNEVFQzNBQ0IzREMxRgotOjEwQzI4MDAwODc2OUU2Rjc2MUQ2RUQ2QjczNjQwMUJERjNGQjMwRUJCNAotOjEwQzI5MDAwRjZCRkQzNjlDQzAzMTQ3MDFBN0UxRjY2MTBGMzFGOTc4NAotOjEwQzJBMDAwMjk5MTAzNzA0RjY4RDk0RDc0OEZCNEZEQUZGOEZEODlBMwotOjEwQzJCMDAwNjdFMUZFQzQ5NDE4MUQ3OUFFNzQ0NTU5N0U5RDg2Nzk1OAotOjEwQzJDMDAwN0UwNURFMTQxNUYyNTJCQTZDNTMzMEFGQTgyQkQ1QTNGRAotOjEwQzJEMDAwMUFGMzc4QjZCNEI1RDQ0MDNCOTE0RjI0RUVCRjJDNEI0MwotOjEwQzJFMDAwNzA2RUZDQ0QzQzY2M0Y2Rjk3NTg1RTk3QkVEQzg5RjA2MAotOjEwQzJGMDAwRjZDQkU0ODhGMTlFQkZCRjI4ODRGOTc0MzNGMjAyMzg4QwotOjEwQzMwMDAwQ0Y3NjFFNUY4MEZDRDNBOUY0MUJBMTY2MUFDMzE3RUI3RQotOjEwQzMxMDAwNkY5NTBGNzRCQzBFMThBRkJBNDhDNTNDOUFFQTM0OTZCNAotOjEwQzMyMDAwOEZFNkNGMEM5NURFMzIyOTM2NkVERDdFOTZCRjU3MTcyRAotOjEwQzMzMDAwRkFFNDEwQ0JDMzVENTQwNkYwNEMyNEQ3QURGQThCRDI4RgotOjEwQzM0MDAwREYzRDQwOEZDM0Y1NTZCODE5RThDRjUxMTU1QTdFMUQxMQotOjEwQzM1MDAwMURGN0U0Q0IwQUU2REI5MThEOUFFNEEwRUQ3RUZDODIyQQotOjEwQzM2MDAwNTc4NTdCNzgxRDk1QTE0NTM1NTg2RkM3N0I4MjU5RjU1OAotOjEwQzM3MDAwMjQ5QTQ0RUJDQjVFNTI3QTIwQ0ZBRjkxNzQyQjMwNEU4RgotOjEwQzM4MDAwQTM0NThGRERFNDdFNTYwMTNFQkQ2OUE3MjM0Njk3MDQ5MQotOjEwQzM5MDAwRjIxM0Q1MjIxMDc4NERCQjg3QzU0NTUwMEUwOUY5NjRCQwotOjEwQzNBMDAwQTU2NzMyQ0UyQzg3NEE4NURDQTVGMjgxRTVGNzM1MzBDQQotOjEwQzNCMDAwQkQ0NzdFMjA0MTdDRThBNEU3OThDQ0ZENkI5NDdCRDNGRAotOjEwQzNDMDAwODRCMEIyQzhGQjY5RkI5RjQzN0I0NkMwNzMwRTk1MTdEMAotOjEwQzNEMDAwRTBDNzQ5RjBGQjY0RUM4NzY1MkE0RjhCMjFFRjc0MjY5OAotOjEwQzNFMDAwNDk0NjdBMUI2NjQ3RjBGNTk1MERBRDlGRDk0RDQyNEVGMwotOjEwQzNGMDAwNTY1NjEwMDJFRjIzNThGMTQzRTc0MzNBMTdFNzdENzA5MgotOjEwQzQwMDAwQjQwMkU3MDgzM0Y5RkM5RkRCQjQ0OUQxMjBFMDhCNDQ0OAotOjEwQzQxMDAwNkMxNENFOUQ1MjBCRUExRDI3RTQ4MUQyRUYxNjI5OENCNQotOjEwQzQyMDAwNzJGMUE3QkEyRTAzNUMyRjI0MkQ0QjE2MDYxMUVGMkZBNQotOjEwQzQzMDAwMDFERTY3MzlGQjUyMDAwRjQ3MTVENTA5RjUzNTkwMzBGRAotOjEwQzQ0MDAwODg1RjMzQkVFNkJCRUZCMzAzQkNFNkU3NThGMUEyREI3RgotOjEwQzQ1MDAwMDFCRTBCMDJDM0YwODVGNzBCQjQwNEY4RDI4NDVDMjE1MwotOjEwQzQ2MDAwNjZCOTEyMjRBN0Q4RkRFNkNEODc2RTAzRkZGODc0RjZFRgotOjEwQzQ3MDAwQzlGN0IyQzI0N0UzRDFBRkIwNTMxMkU1RTU5REU0RjI4QwotOjEwQzQ4MDAwNzhCNDc5NzkyNzFEQ0NBRjk4NDEwNkFFREYyRDBEQTc4MgotOjEwQzQ5MDAwOTM4RjBGNkU5MDczMENGNDI0RThGNDY5OUVBNzJGRkQyMAotOjEwQzRBMDAwOTJFN0ZEOTY3OTUwRkZDNUY0MjVBMzgzNzI1RTlBMDE0OQotOjEwQzRCMDAwRjQ2NUEwODNEOUZCNUM1MTk5RUVCMzk0Rjc5RjAxRjQyNgotOjEwQzRDMDAwMzAyNUE2MkZBMzM2Nzc0MDI5MDRCQ0FCNURCMjNDRENGNwotOjEwQzREMDAwNEVDRUNBMDgyMEZFQTdEQTM0QzRGRjM0RUE4MTcxQkIwRAotOjEwQzRFMDAwRDM5RDRGRjc1RkUxRUM2REI3MDcxMEZGREYwN0ZGQTZBNQotOjEwQzRGMDAwOTIwNDEwRkY5NTE2QkQ1M0VEQUVCMzAzOUQ1NDNCQURCMgotOjEwQzUwMDAwNzhENjEwRkYzNURFNjFCRkRCQkUwQUZFQ0YwMUZDMEIyMwotOjEwQzUxMDAwQkQzMjBBRkI5NEUyN0Y0MkZFMDhFNzhEODlGMDdGNDEzRAotOjEwQzUyMDAwQkVGQjhDRjIzMjA1RkVBRDc4MTc3MjYwOEZDQjVCRURFRgotOjEwQzUzMDAwODY3ODcwMjNDQjRCOUVGQUYyQjg3NjI4NjdBRDBERTI3MQotOjEwQzU0MDAwN0Q5OTNERTlFQUFGQjBCRTg1RDU5N0Y1NjkzMkJDQ0Y5QwotOjEwQzU1MDAwNThCNDlFRDZEM0YyOUU2MEE4MUFDQUVCMzY0ODI4NDczNAotOjEwQzU2MDAwQTdCRDE2NkU4N0YyQjg4REFDQkU3NDUzQ0JBRkUwOURGRAotOjEwQzU3MDAwQjM3NTNBRUJGRkY0RjE0RTdDQUYyMkQyQzlGQjU3NzY4QwotOjEwQzU4MDAwNTc0Mzc5NUQxN0VCRkY0NzhGNTMwN0JGQkNGQzQ4QTRBNwotOjEwQzU5MDAwMUQ3RTlGQjg5NUFENDNEODdENzMzOUJERUQ5MTlFRjg1MgotOjEwQzVBMDAwMTVGNkVCNjZGRDZFMzhFNDRDNjZGRTEyQjNFM0U2RjA3QQotOjEwQzVCMDAwN0RDRTdEODhFREQzRjdERUM1QjUwMTBBRjdFQjA2NzVCNAotOjEwQzVDMDAwMDdDQTBENUI1MzM5Q0FEMTA0N0U1QUE1RDQ1RDAwREY3QQotOjEwQzVEMDAwRjk1NDRFMTBDNDNCQTVEMzQyOTZCN0RBNDNBNzU4OTNGQgotOjEwQzVFMDAwQ0ZFQzI2OTFFRjA5NzlFNzhCMENGODVBOTNDRkZDMDgzMgotOjEwQzVGMDAwRDEyRTJCODNCMEZDRTQwN0Q5QkJCMzIyMUYzNTdBM0Y4MQotOjEwQzYwMDAwOTEyMDdFMDA3QjQ0RkQ5QjIwM0Y3NTdFNTEwQkVBRDMzOQotOjEwQzYxMDAwRjlFNzg4QkNENDAxRkIyQTNBNkZFOTk3N0ZCQTI4OUVENAotOjEwQzYyMDAwNUY3RTRCM0VCMzkzOEVGMTNDN0FGMTdCNjMyNDY4MDNDQgotOjEwQzYzMDAwRkY2NDBGMTAwRkJFMDMxNDdEMTlFQzk2M0RGMEJFOTEwMAotOjEwQzY0MDAwRTExRDkyM0Q0MTU2RDZGM0Y3REZERDQ1OUREQzFCNkNDNQotOjEwQzY1MDAwMkQ3NjFEOTRDMDU4MDlERjU1QjlBQzhGNDREMzUyODc0RAotOjEwQzY2MDAwQUY3RkJFOUQ0NDU5RkUwNDVCRkZGNUVENEFDRjE2ODNCNAotOjEwQzY3MDAwMURCRjU0ODg4RjU5RTM1MUFGRDQ3MTNDMDlCOUIxOTRBRgotOjEwQzY4MDAwRTM4QkYyRjlFNjdDQkFGRTY1Q0UxNkI0MUI5NzEzQTZDRgotOjEwQzY5MDAwRDc2RjI0MTE4QzZGREM2OEUxRjMzNUVFM0ZCRjY1QjNEMwotOjEwQzZBMDAwNDExQ0NEQ0NDRjZCRTk3MkQ4RjlGQUUwQzNCRkEzRjAzRgotOjEwQzZCMDAwNkY3Q0MwRTMwNUZEQkZCNkQ3RENBRUYxODE5NzhGMzA0QwotOjEwQzZDMDAwRkJDQkNDRUY4RDgyREYyMzY2N0VBNzA2MDVFM0Y3RkI2RAotOjEwQzZEMDAwQ0ZDMzczMUI3MTNGRDBFNTFDN0M0QjI3QjFGRDBFRTkyNgotOjEwQzZFMDAwN0QwQkZGQjlFMEJFNjAzMUY4MzUzNjk2QTdDOENCNjI0NgotOjEwQzZGMDAwREU0RkJCOTk1RUQ2QTk1RUU2N0UxMDhBREM0RkZCMkYyQgotOjEwQzcwMDAwQzE3Q0Y4NTJBMTQ3Qjk5QzExRkM1Q0NBRjVGQzMwM0RENAotOjEwQzcxMDAwNUU2QkY1NzdFRTQzM0U5OUNBNEI1NkZEMkRGNEI2QjhFNQotOjEwQzcyMDAwODc0OEM3NDVGRDRERjVGNUNCMUE1RDZGOUZDRDFEMDFCRgotOjEwQzczMDAwNzhDN0Y0NzYwNEY5Njg4QTkzQ0E2QjFCRTJFRjAwRTBDRAotOjEwQzc0MDAwNkYxQUM3NUIzQkQ3RUIwOUZEMDNGN0ZBQjhGRTAxRjU5QgotOjEwQzc1MDAwMzdGMDFDNjFCODVGMTAzNUQ5RkJDM0NFMzExMkQ4RkY1QQotOjEwQzc2MDAwNDM3ODczNTE3QjJBMDVGQzdEQzJFQ0UyM0MzMkFBM0M0MwotOjEwQzc3MDAwMTEyQUI3REZDQzFGNDE2RjJCQ0ZCMERGMDc3N0I4MzA1RQotOjEwQzc4MDAwQkUyMEUyRUM4MkZGNUUyRjYwNzZGOEI2NUNFRDNEOTA1NQotOjEwQzc5MDAwRkZGRDdDQkU3RTNFN0VGRkNERjNGMUZDRkJDRjQ0QzNBQwotOjEwQzdBMDAwRjM2RkM4NjdDQThGOTM3RjAxRTdERjFEODY3ODY5N0ZDMwotOjEwQzdCMDAwN0FGQzM4RjgyNzVDRkU5NDE2MTBGQ0ZFQzlBRjdEMEE5RgotOjEwQzdDMDAwRUIzRkE2QjAzOEZCQjE2NEZFNEQ2NUU3MTRGRjNCRDRFOAotOjEwQzdEMDAwOUVDOThGNENGRTE1RUY5MTFGQ0IzMEM3RTc0NTNCM0ZGRAotOjEwQzdFMDAwRkZCRURGRUEwQzc1MThFMkUxODFGQjkzNUE0MDhGRjkzNgotOjEwQzdGMDAwOEI3ODVFRkM3QTQ2QzcyNzlGNEFERjYxN0MyNzJFNTBFNAotOjEwQzgwMDAwNTA1OTVBMzAwRERBNjk0QTJFQzQ2NzlFNjJGQUEyRDk4RAotOjEwQzgxMDAwM0VBMEMwRkIzRTNFN0YzOEE1QzAwRkY3OUI4OEY2MDRDNAotOjEwQzgyMDAwOEMxMzE4NTA5NjUwNzg5RkU0RTdGRTI3Rjk3QjQwMjczOQotOjEwQzgzMDAwNURFQzJCRDYxNTI4NTg1NDBBRkQ0RURFM0M4MDcyNjMwMQotOjEwQzg0MDAwQThCQzY4MDBFNTQyQTAyMDg0RjM5RTVDMkFFQTc5RjkzRQotOjEwQzg1MDAwNkU1NjI2RENBRkFDRTQ3QzgyNzFFMzM4NzFFMkUxNzFBNAotOjEwQzg2MDAwNjFGMzdCMzdFQjk0RjhFN0Q1QTRDMDYzOEFGN0FFRDhDMQotOjEwQzg3MDAwQ0ZFMjkwMkI5REE0MzM5RkQ2NUZCRDNGMUJGRDhEQzY5RAotOjEwQzg4MDAwNTQ3RDAyRDBDM0Q3OERFMzlFMUNEMzg3RkJEQTUyMzk4NwotOjEwQzg5MDAwMzhGNkMxMzIzQzE3QzY3OEQxREFGRENGQTFGQzVCMkI0QwotOjEwQzhBMDAwRjg2NkFGOTk2RjY2MTc4Q0VFM0NDNTFBNjcxRjA1M0Y5NwotOjEwQzhCMDAwQ0QyRjE4QzEwRTdBMTJGNDk3MjM4Njg3NUI3ODdFNTNBQQotOjEwQzhDMDAwOEREQzU0MEQ3MUE1NEY1NzEzQkM2NzdCQ0IwQjMyRDI1NwotOjEwQzhEMDAwRDUyRDNGOTJGMEREMDk2MUM3QURFNTcwNEVCNDJGQjg5QwotOjEwQzhFMDAwQTcxMDMwQzgxNUI4QTcxMDMwRjg3NTcwNEZDMTU4ODYxQQotOjEwQzhGMDAwN0IwQUM2RjY3MDRGQzE1ODBGRjcxNDhDRjU3MDRGQzEwNAotOjEwQzkwMDAwNTgyRTI1RDdCNjQzOUM2RTVEMTdGMTQ2MDJFQ0RFODJBOQotOjEwQzkxMDAwQjEzRkRDNUIzMDk2RTFERTgyQjEzRkRDNUIzMDk2M0ZCRAotOjEwQzkyMDAwMjUwQzZFOUYzRTI0NjNGQzFGRUUyRjE4RkJERkYwQzIyOAotOjEwQzkzMDAwOEZDQkEzQjA2RDE3Q0I1MzZCNzc1MUY4MDMxREVBNUExOQotOjEwQzk0MDAwREYyNDBBOUZENTFDM0U3MEJGQzEzOEVFMDdBOTE3M0RGMgotOjEwQzk1MDAwMEZGODU5REQ3N0ZENDJGODVFQjBFRjI2RDNCOEE0OUJGRgotOjEwQzk2MDAwQzlFMzE2RkExN0UwNzgzRDA5QTU4MTNGMzc4NTBDMUUwQgotOjEwQzk3MDAwODI3ODQ3NzM0NDUyNjFERTFCMUUzMENCRURBMUY3NEMyOQotOjEwQzk4MDAwMjJFNkRGRDcxMDQzRkMzNzM4M0NFRUJGQTVDMEUzNDNCNwotOjEwQzk5MDAwQkFDQTIzNzlDNjc4NEY4QzFFREM2QTE0RTBGMDlBQUNEMAotOjEwQzlBMDAwQzZBMzg3NTI3MjZFMUFDNjc5OUU5NzIxODY0MUZFNDhBOQotOjEwQzlCMDAwNUFCNkNGOTIwQ0U3MDMxNjc4MjRFNTk4RTlDMjE1MzBGMQotOjEwQzlDMDAwRDM0NTRBQjE5OTJFM0NBQTk5MkVEMjJBQ0M3NDkxQUU2NQotOjEwQzlEMDAwOUQzNzIyN0MzMzZCQ0Q3NEIyNDY2RTQyQkUxNzcwQUU2QgotOjEwQzlFMDAwQTA3RjAxQ0U1M0UwODU0QTgwMkZERDI3QzQ4QkFERjBCOAotOjEwQzlGMDAwNkREQ0JGQUQxM0VDRkUzMzg1RUY5MzE2Rjg3RTQ2NjYxMwotOjEwQ0EwMDAwNTVCQjAzNTg1REU3MkM4RkQ5MzE2NUNGQjdFMDIxQjAxNgotOjEwQ0ExMDAwMzU3RTJBRTAyOEVDMDgxMTA3QTVGQTFGRURFOTk4NUY5QQotOjEwQ0EyMDAwQ0ZGQzNENkExRjFDMkNDMEYzMDNFNkU3MDEyNTgxREMyNwotOjEwQ0EzMDAwQkM4RTg0NTEzRTVENjdCMTBGNkU3MERGQTc4MDdEMzA4NAotOjEwQ0E0MDAwNkNCRkQ0MzI4M0Y3MEJBREZCMDU3QjhCMThFMjUyNTZEQgotOjEwQ0E1MDAwRkI0MERBMkY0NTNEOTM2MUJCRkI4NTlDMEU3Rjg5QzY2OQotOjEwQ0E2MDAwOTAyNjhENDY2RUY0N0FCNEZGMDJCOTA1OEVBMkIzREMyRgotOjEwQ0E3MDAwMTQzNzhFNkJGNzg5NzUwOEI4ODhGOTkzNDg4QjlDMDMzNwotOjEwQ0E4MDAwRjQ1QzZDQjVDRkNDRkVCNUYwQzc0NUJDNURDNEI1ODVENAotOjEwQ0E5MDAwM0YyREZDMTgyQjlDRTU3MzgyRUQ0MEZGNTNCREMyOEZFOAotOjEwQ0FBMDAwRUVCQjBBN0UxN0ZFQjNENTZGMURCQTE3MDA5MDg1N0JDQgotOjEwQ0FCMDAwMzczQzRFN0ZBNzdGOTU5M0JEQ0JDN0Y4NEVGQ0RFRTk5MAotOjEwQ0FDMDAwNUI5QzM2NTIzRUU2MURBREU2N0IzMDc0MUJEQTg4Rjc4MAotOjEwQ0FEMDAwOEEwMDY0NTk3MEVFNDQyMEE4NDJCNjVFN0E2ODAwREU4RgotOjEwQ0FFMDAwREFEOTdBRDk4QjgzQ0ZEMkVGOTY5MjFGMEM2QzgyQkFBNwotOjEwQ0FGMDAwNTM1RkNBMDBEN0ExNzgzRTYxRjc4NDE1REU0RjI5RTg1RAotOjEwQ0IwMDAwQkMxOUY0NjhCMjZBMjdFRjFBRThDMjQ5MzVENUJCQzUyQgotOjEwQ0IxMDAwN0M1RUQwMTMzOTQzRjVCRjMxOUVFQkZGQTNCRTc3NTE0NgotOjEwQ0IyMDAwRjhCQzNCN0U4NDdBNDU2RDhDNjdENzU5RTEyNTlFQzM1RQotOjEwQ0IzMDAwNzA0REJBRTgzOEQ4MjcyRTYyRDgzN0VBNDM0MzU5OEU2OQotOjEwQ0I0MDAwQzEwQjU1QUI4Q0Y3QTY0NEJEMDZFRjk3N0NERDdEMDE4QwotOjEwQ0I1MDAwREVERjc1MThDQkQxNTdERTc3MThENzFGNjE3OTA1RjY2MAotOjEwQ0I2MDAwMTA4MUZDNUJDNTQ3RUI4REZBNjU4ODBFMjk0Mzk1MUI0OAotOjEwQ0I3MDAwRjYzNzhBN0QwMUQzODBGQkM5RUMxMjg2RUZCRkQ1QkVBNAotOjEwQ0I4MDAwM0EyQ0Y4ODI3MTQzNTk2N0Y1RkFGNEIzN0M3REQxQjMzRQotOjEwQ0I5MDAwMUNCRjY0RDFEOTBEM0Y2REQxRDkwRDNGRkQyQzVGNUYxNgotOjEwQ0JBMDAwRjQyQ0M3MkY1OTdDNzZBRjRGNUI3Qzc2RTM1NzNGQ0I5NQotOjEwQ0JCMDAwRDcxNzNEQ0JGMTRCOTY5Q0RERjBEMzk2OUNEREYwRDM5RgotOjEwQ0JDMDAwQ0ZGMkY1NDVDRjZFRkNFQTY4MDdCQTJCQTIwNERFOTdEOAotOjEwQ0JEMDAwMDg3NDEwMzUxOEEwMjYyQkZEMTlGQ0Y5MjI5NTYwOUVDQgotOjEwQ0JFMDAwMDZFMTdFNDkyMUY3NEJCNjZENkRBOTA3MTdFQTExNUQ4NQotOjEwQ0JGMDAwMDk2MDNDODhGQUY3MzlCNDdFMjI2MUY1OEY3NDJEQzYzRQotOjEwQ0MwMDAwMzg2QkRCOTgwOTc5RjA1RTk1QkJFQkEyRTM3MDdGNkYyMAotOjEwQ0MxMDAwQTJDRUZDNzFFQkJGMUJCNjQ4MzNGRkZCNkI5NzU3NjQ4QQotOjEwQ0MyMDAwOUFDQUQzRkFDQ0VGNTc1Q0Q1NTg2NEFBNUYxRTNFREY5MAotOjEwQ0MzMDAwRjJFRkU3NEQzNUZGQkI2NEExOTk5NkY3MjA2RTI2QzY0QgotOjEwQ0M0MDAwN0I5MTg1MjRBQTQyN0NBNUYwNkU1QjE1OUM5QkQ5QzE4MwotOjEwQ0M1MDAwNjdCRTkwRkVCNzUzQzE3RTFBRkQ2QkY0NUYwQUE5MjcyOQotOjEwQ0M2MDAwMzQzNDdFMTBFMEE2OThDNjc3NUJFQUNGRjQxRUVBRkU2NQotOjEwQ0M3MDAwQjFGMUVGQTExMjc4NjQzMkNFQkQ3MzZCMUUyNkIxREYyNQotOjEwQ0M4MDAwODhGMTM5ODFBRjNCMzdEQkQwRTVGRDZDMkJDMTc3MUVENgotOjEwQ0M5MDAwQUIyMzAxMUJCRTgzQ0VGMTc2M0UyNzNEQjFFRjQ4QUJGRgotOjEwQ0NBMDAwRjkzRTdBQTE0RUFBMDA5RjQ1MURDNDA2RjFCNUUwNEU5QgotOjEwQ0NCMDAwQTI2QTA0RTM0MjQ4Mjc4RkU4RjFFOUU0MTFFMkFEODI3OQotOjEwQ0NDMDAwNzdCOTFFODkxMEZDNzdCMjA0NUREQ0U5MDhFNEMxQjlDQwotOjEwQ0NEMDAwREFGOTVEOEMxRTA0OUQwNDgwNEU1MjIxMkZDOEZBRUVCNQotOjEwQ0NFMDAwODAxNTVGNjQ0QTk0QUVGNTkxQUQ4NTE5QzY3QzU0QjI0NwotOjEwQ0NGMDAwOUJDMURENDlGRjhFODRBRkUyOUQ2NjdDMDU4OEExRkM2NwotOjEwQ0QwMDAwMTVGMEY1RTlEN0M0OTdFMjBCNDVEMzdDMTBDRjI0MDE4OQotOjEwQ0QxMDAwQzg5MzNBMzg2NjgyMERFMDExRUM1MkQxRkZBRkE1Q0QzMQotOjEwQ0QyMDAwMDBDRUMxMkVGNjlFOUFDMDkzMTg2RjZCMkI4OUNFMzMxRQotOjEwQ0QzMDAwRjg3RjQxMzVBQTAxOUM2QkU0NDk1NTkwN0ZCRUEzMEM1NgotOjEwQ0Q0MDAwNDNDNkMzRjBCMzgzNzg5MzIxRUVCREEzQ0I5NjhDNkYxQgotOjEwQ0Q1MDAwNTRFRkEzNzgyOTIxRTRCRjM3MkY0QjJCQTZGNTNENDE5MwotOjEwQ0Q2MDAwOTIwQ0VGNkNGNUI0RDlGMEREQjI5RUE3QTQ3QUYzQkJCOAotOjEwQ0Q3MDAwQ0FEMTI0NUIwRUVFMjNDOTU2ODE1RjNCRkI2QUZDNEI5NAotOjEwQ0Q4MDAwRUNBQzNFMkE0Mzc5RUNDNjYxRUY3RUM4NTA5RjVFNkJFNwotOjEwQ0Q5MDAwRjk3NzAzODkyNjQxRkJFNDczNTgxRTY3OUE2NjdFQ0ZCNAotOjEwQ0RBMDAwQzY1MTYxOTYwNzE0OEM3RDM5RTUxMDZGRTFGNENFREYzMgotOjEwQ0RCMDAwNDk4REQ0OTBDODI2QkFFRTczQjhEQ0IxRDI1MUZBMURCMQotOjEwQ0RDMDAwOEI5MTk4REFDNjdDMDNFNTU5NEY5QjgyRjA3NzcwNzk5NgotOjEwQ0REMDAwNDUzNjMyQkFEMEU5NUZBMEE3NzQwQjFENzk1NDMzMURENAotOjEwQ0RFMDAwMzlFNDAyQ0NDMzE1N0MyNUQ2MjNFNjZGMUI5Mzk1NkNFMgotOjEwQ0RGMDAwQzc3NUQ5RjEzRDZDODc1NTRFNThENkU3ODY2MDIwQzU3QQotOjEwQ0UwMDAwOUREQjQ3MjIxMTVBRUZEMDE5N0YxMEI5MUY3Rjc3NEM1NQotOjEwQ0UxMDAwMjcyNDMzRjgxNUQ2RjkzNUU1NTNFODlDQkY4RDdDRjIwRAotOjEwQ0UyMDAwRjAzMUVGOUNDNkY2Rjk5OUNBREVCNUFFRUU2MEY0RUVDRAotOjEwQ0UzMDAwRDlDQUU4MUQ2RTc0QjM3QzJENkQ2MUFFRTE1Qzc1MkZBRgotOjEwQ0U0MDAwOTc1MzU2Qjg3OUZBQjQ2QUEwRTc4QkU0OTczNEM4OEY0MQotOjEwQ0U1MDAwQjhGQjM1NDZGRjZENjMwRTNGMEZFNUFENzczM0Y4MDczRQotOjEwQ0U2MDAwNTU4NjY3NEEyRjZBOTQyRUZERUUzQkRDOTgxNzNDQjUzOQotOjEwQ0U3MDAwOENFMjBCRjBGRjkyNTk5RTRDRUIzM0MzQjFDODIyMzdDMgotOjEwQ0U4MDAwODIwOUUwNkFFNUQ3NDQ3MEZEOTY4MDZCMzk4NTZCRDFFNQotOjEwQ0U5MDAwOTlDMzU1RDE5OTdDNEU5RkM1REU1OTNDMzg0NjYxRkZGOAotOjEwQ0VBMDAwM0VBRkNFRTA5OEFFQTkyODdGMkY5MjRGNDVEMzY4QkIwNgotOjEwQ0VCMDAwNkQxQTk1Mzc3NDlEQjUxQTgzQjc3Nzk2OTBFMzY2NzhBNwotOjEwQ0VDMDAwMEFGOTIyRTA1RkM4RTFFRjU1QkQyRkMwQkZGM0UyRDZGQgotOjEwQ0VEMDAwRUQyNDIwMDE3Q0ZGNUIwMzNCQTI3QjlBOTAzNzgzMDQwNwotOjEwQ0VFMDAwRjA5NkE2MzFCQTE1NzBFRTlFQ0RFMDVDQTg3MTM4Nzc0OQotOjEwQ0VGMDAwNzFCODQ5NDQwMjM4NUJFOUQ1MkE5RkQzQkUyNjlDNzc5NgotOjEwQ0YwMDAwOURDM0UzRjE1OUE0RkNBQkMwNzk1QjBBN0I0N0Q5MzFERgotOjEwQ0YxMDAwOEVDMUQ1RTExRThDODI5Q0VEMEFEQTcxNUYwNzgyMEExMAotOjEwQ0YyMDAwRDY3Nzk1QjBGQUZCNTM1NkU2ODBCRUVERjI3N0U2MDA3MQotOjEwQ0YzMDAwNURCNjA1QUZDRjAxRjlFRUNBRTE3Mjg2NjhFRURDRjJBQwotOjEwQ0Y0MDAwRDhCRDgzMUE3OTJCQkU0M0RBMTk1MDEwM0Y5RTQwN0MxRQotOjEwQ0Y1MDAwRjk5NTM2MkJFQ0M0NzkyNkQ5ODk4QzcwNzg0ODhEMDdFMQotOjEwQ0Y2MDAwMDc2Nzk5NjI5Mjk3Rjk4RDY2RjhBNjU4RTBFQkZBOUFFRQotOjEwQ0Y3MDAwRjJFMUI1QUYyOTFGRUUyMTZDRkQ3NzhFMTdFRjM0NzQwNwotOjEwQ0Y4MDAwM0I1MTNGNTVEQzg0NzFGMzRDM0VEN0U2ODVERjY1QkZFRQotOjEwQ0Y5MDAwNzNCRDY2RjhCREI2MTBFNDg5REJBRTAyM0MxM0FEQkJEMQotOjEwQ0ZBMDAwQTc5NUYwRjc1QTlDRkNGRDE2RjZBRUNCMzY3OEQ3ODVFMAotOjEwQ0ZCMDAwOTZCRjAzRUZCQTI0MDFGREIzNzc1REI2QzBCQjJFRjQ3NAotOjEwQ0ZDMDAwREIwNUVGQkE5QzBCRjZCNDg2NUZGOUQyNDI3QzdGRjBBQQotOjEwQ0ZEMDAwQjM1QTgyRjFGMTREMjk3RjI1RjFFMDU1RDQ2NUQ2N0YxMgotOjEwQ0ZFMDAwNDEzREQ5RjIwRTlCNTlDRjY1Q0NDQjMzOTVCREIzQ0MyNwotOjEwQ0ZGMDAwRUZCNjc5NTRGNjZFREJGRjAxNjQ2ODAzNDAwMDgwMDBGMQotOjEwRDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkREN0QwOQotOjEwRDAxMDAwMEI3ODU0QzVEOUYwOUMzRDY3MzdCQkM5NjZCM0I5OTI0QwotOjEwRDAyMDAwNDAxMjRFNDIwODFCMDg2MTgxMDQ4MzgyOUU4NDQwNjM0MwotOjEwRDAzMDAwNEQ3MTQzNTE1MUE4OEQ0MDMxNDI0ODI4NUUxQTdGRjUwOQotOjEwRDA0MDAwQzk0MjgyODQxODM0QTA1ODVBMkYyQzM3OEJCNTZBQjQ0MQotOjEwRDA1MDAwNTFBOTIyREQyMDUyRkFENTk2NDU1MUYxNTJCRkY1NTIyMQotOjEwRDA2MDAwMkY0MDI1OEExNzdDM0U1QkZGNzlERjk5RDkzREU3NjQyNQotOjEwRDA3MDAwMTNDMEUyRkZGOEZERjFDMUM5OUM5OTMzNjdFNkJEQkY1QgotOjEwRDA4MDAwRUZCQzMzMjE4NDkwNkZFOEJGMDRDRjA0MTJGNDEwRkM4RQotOjEwRDA5MDAwODFCQTQzM0Q5NzA0RUREMUZBMjNDM0VCMUM2QTNBMjFEMAotOjEwRDBBMDAwNTY3N0E1RTEzOUYxRjcxMTVGMjI1NjJEMjQ4MzkwNTQ2QwotOjEwRDBCMDAwREUzNjVEQkVENzFFMkUyNjY0NERDREFDMjQ1MjBDRkQ0RgotOjEwRDBDMDAwQjQ1MDI2NkQ0RjgwNDY5NTkwRDU1NjZGOTY4RjNFNEY0MwotOjEwRDBEMDAwQTg1OTU0NDM1Qzg0QUM2QTIxMjQzODhBOTBGNjE2M0JFNAotOjEwRDBFMDAwOTYyQjcyNkNERTYwMUEyMTc3QkUyQzdCRTNFODJCMzYyMAotOjEwRDBGMDAwQ0RBN0I5NjlGRkRFOUM1QjA5QTFDRkQ3QjgwOTE5OTIwQQotOjEwRDEwMDAwNDc5RkJCOTcxMTkyNEY4ODQyM0YyMEQxQkE1MjMzRTNEOQotOjEwRDExMDAwMjM1MjQyNUY5OEIzODQ5MDQ5RDFGOUFDQTlCMTc4ODM4NgotOjEwRDEyMDAwQTU4NEM0MjUzQkJERjA3RDUyQUNCQzEzQTY2RDZFRkE0MAotOjEwRDEzMDAwREYzN0Y0RkQ2RkUwRTc4MjY4MTk0NzU4M0JBRTEzQkU1NgotOjEwRDE0MDAwQTNFQUVBMDRCRTY3NkM2RjdFNTM3QTc0QUZBRTdEQUMxRgotOjEwRDE1MDAwOUE5OEY2M0UyQ0Y2MUM3MkNFMzczMjJERTU3OTQ5NzUzOQotOjEwRDE2MDAwNEU1QTk2QTcxMDkyRDVGRjdCNUZCNjkwNDdGNzhFNDQzNAotOjEwRDE3MDAwODAxMjkyMEU2NTNEMDE3ODJBN0NDQ0Q1QzlCM0VDQzRFRgotOjEwRDE4MDAwMTk4NUIzNzhCRUNBQ0RFMDFCMjdEMUNBRTRGRUUzQjY0OQotOjEwRDE5MDAwMDE1Q0UzQTI3NTg1MTBBRDFCRjA5MTVEMUFCM0JGMjg0OQotOjEwRDFBMDAwMjkwNjA4MjkyM0E0QjMyNTc4RjAzRDZCRjRCOTczMEE0NgotOjEwRDFCMDAwN0RERkQ5QkZGRjRDNTVDNjc5Q0Y1NTU1MkM5RDRBOTA4MAotOjEwRDFDMDAwQjg2OUJGNDQyRjdENUYwNzE3QTc3NjY2REZBNzNGQTUyNQotOjEwRDFEMDAwNjk3NEJEMkU0RTM3RTQ3NzkyMDI3OEI1RjM3QTgyNTRBMwotOjEwRDFFMDAwMzc1NzJEMDM3Q0Y5MDgxOTQxRkI5NTZCQTRBRTk4N0Q0OAotOjEwRDFGMDAwNEYxM0VGNDk1MDJBRTQxRDQxREY3OUFDNzREMzc2MDYxMgotOjEwRDIwMDAwNTIyODY5QkJEREQ4QUU2NjIwQkM3MDVDMjVGQUJFRjYzQwotOjEwRDIxMDAwOEQzNEYwQkNCRkFCMTJGMEY4Q0VDODQxREE2RERFN0FDNwotOjEwRDIyMDAwRTBBNzdFQ0Y1NThCODA2MzVGMUE4NTlCQ0NENzFCMDMwRAotOjEwRDIzMDAwOEU2REMwREYwMjhFQjI5M0MxQjE0RENBREIxOUE2RkM2MAotOjEwRDI0MDAwNjZENTVDNUU4QTExNTI5MUE2NzYwMzVGQjY2OTRFRTQ5QwotOjEwRDI1MDAwQ0JCNkI0RUU1MDI1QUQ5RjI4QjU3ODYxQThDNDkxOTVBMgotOjEwRDI2MDAwQzg4RjZENDNGNzFENUUwODcwOURCOUZGQzM2RDA4MzUwQgotOjEwRDI3MDAwMkQ1NDI1RTA0QkRCMTMzREQ1QTEyQTlEQkMxMUY4OEEyNgotOjEwRDI4MDAwRTdCRjc3OEM3RDIwQkM5Mjk2QTkxN0NGMjM2RTRBMkFFMAotOjEwRDI5MDAwQ0UyMTM2MjI1M0JDMzg0NjU2RDlFQjlDNTFGQ0Q4RTBGRgotOjEwRDJBMDAwMTdGQTNDM0U2REM2NDczMkU1RkI3OEFGMEU4RkYwRUZDNAotOjEwRDJCMDAwMUI1NjQ3NzhEMEM1REJCMjZGRkRCOTA0NDQ5MTE5RTkxQwotOjEwRDJDMDAwNzcwMEU2QTNBOEJFRThGQ0M4RDlDNzE3Qzk0RTQzQkU3RAotOjEwRDJEMDAwMjc4QTM3MTNFNDY1N0Y3QUY3MzNCRUU3RkQwNkU2MEI0RQotOjEwRDJFMDAwRDY2RkJBNUM5Mzc5MTU4NUNCOUExNzk4N0MyNDFFMjY0NQotOjEwRDJGMDAwMTc2Qzc2ODZDRjM1NDQ2M0VERDk4QTk3QkU0MUQ2NjRFNAotOjEwRDMwMDAwQUU0NEY5RDFBRUNFNkYwN0Y5Rjk3OUE2ODVDODEyM0NDMwotOjEwRDMxMDAwNUY2RjA3RjlBMTk4RTQ0N0JBQ0Y2MkQwMDc0M0U2QzQyQwotOjEwRDMyMDAwMUJFNEZFOUE4MjU5MjhDRjA2OUE2NzU2OURGMUZENjE0QgotOjEwRDMzMDAwRjVDNkY3NzM5NkE1MThFQUUyM0Q2QkU2NDUyRjU1QTVBRAotOjEwRDM0MDAwNDZFQkFCOTQzQTNCQzg5MTVCMzNENzRCNzUzQUZBMUUyOAotOjEwRDM1MDAwNTI1NEY3M0FEMEFCQThEQjMyNjdFMjdCNzEzOUE1MzE4MgotOjEwRDM2MDAwRTdCNUNGQTNCRDA1NzJBMjVENjVGMzI2RUVEODcwQkUwQQotOjEwRDM3MDAwOEJFQkExQkJCOTFFM0FENTNBMzdGMkZFQkZFNkZERUYwMwotOjEwRDM4MDAwNkQ3MTYzMTlDMTY3QzEzNTA2QkNBQ0NFQTJGMjlBOEUyRAotOjEwRDM5MDAwMDdCMEQ3N0ZGRjI5QjVFRTczOTg1RjE0Q0Y5NjI4N0MyRQotOjEwRDNBMDAwODA2OThCMTc1QjgwNUZDNTM4NkQ1OUY5MEVDMERCRkE1OQotOjEwRDNCMDAwRUFDMUU3MjdGNEFBRTg2NzU1N0NDNDRCREZCMzEyQTNBMAotOjEwRDNDMDAwMUNCN0E1NTkwQ0Y4OTg5MEM3RTVDNkI2NkIwQ0RGREQwNQotOjEwRDNEMDAwOUIzQzYzNjMxRUE1QUJGNTg3NjQ4Mjc0RjczQkUzRkE1RAotOjEwRDNFMDAwRkFEM0FCNzExREVCMzNEOUZBMDdBNjZGRDNCQUE5NDRCMAotOjEwRDNGMDAwODhEMDExRDY1MzRDRjVBMUE2RkVGOUE2RjZEMUE2RjYxMwotOjEwRDQwMDAwMDlBNkZBQjlBNkZFOTVBNkZBMEY0REZENjc5OUVBNTc0NwotOjEwRDQxMDAwOThGQUNGMzdCNTJGMzZCNTJGMzdENUZGOEZCMTdGMjk4MwotOjEwRDQyMDAwQzNGM0Y1RTJEOTIwRjIwNUY0QkFCOUJGQTI2ODg4NUY2OAotOjEwRDQzMDAwQTFFNzIzN0NFNTM2RjJFMzBGNzIyQUI0M0M2NjY3MTg1NQotOjEwRDQ0MDAwRjAyQkU4RjM3NEYxQjM5QUNBQjgxMEYwOTNBMjNBNTBGMwotOjEwRDQ1MDAwOTk5NjJGMjY3QTdBNTg5Rjk5OEZGQUEzOEQ0RTBCRjVCRAotOjEwRDQ2MDAwMzdCNzVGNTIwNDFENTc3M0ZCNzBDRTEyMDMxREY1RTZFQwotOjEwRDQ3MDAwMTQzQUMwN0UyNENFMzQ5NDRCQTdBMjBCODlBNDE4REJBNwotOjEwRDQ4MDAwQjVBMUQxRjY3Q0Y4RkZEOUE1OEI1M0QzNzE4MEVCREQyNAotOjEwRDQ5MDAwQzFFNzJERTRDMDIzQzM3REQ3MjIzRTAyRDQ5RTFFMUJDQwotOjEwRDRBMDAwODU5MzFBQjFBN0U5QzcyOERGNkQ0OTIzODEzOEFBRUYxMAotOjEwRDRCMDAwQjZGODJENThGRjNDOTM3RTA4RUM5NTJBQzY4NzIzNzg1MgotOjEwRDRDMDAwN0Y0MkMyMTI4QzIzRTZEM0NFRTk2NTFEQzgyOTVBREVGRAotOjEwRDREMDAwMDE3MjhBOTZCN0I1NjQ2MkI5N0FBRDI1NkIyMThDNTcxMwotOjEwRDRFMDAwNjM0MzNDQTU4RUJCRDVBRjQwNTk1OTVFMDRGQUZCQjZFOQotOjEwRDRGMDAwQjEzQjM0MEJBRDI3OUU5NDQ5NzAyMkI1MTc0QUFFMjgzNAotOjEwRDUwMDAwODdFNTI0NEM5RjlGQjkxNzNFRjczNUZEQ0UyNEUwNEVBQQotOjEwRDUxMDAwODI0NkM2RTYyQTEyQjA4RTIzNjRFRDlFQUMxRjdBRThERQotOjEwRDUyMDAwQjg2QTgxRTI3NTQwNUJCMTc3ODU5Mjg2RkRGQ0UwMzY5MgotOjEwRDUzMDAwQTg0QURGRkUxMUI0M0VCQ0MwODJGNjg1QjVCQ0FGMDU3QgotOjEwRDU0MDAwRUM3NzMxRUZCNTNGQTQ4NDRCM0JFNjU1N0IyRDdFMEE0QgotOjEwRDU1MDAwODIxNUMzRUI3RTA1NzAxQURFNDkyQzFBQURBQjdFNTVFMQotOjEwRDU2MDAwMDJCOUY2NDY5RThBRjI3NkVCMUYyODQzOEU4MDBGRjVBRAotOjEwRDU3MDAwNjU4MTlFRkQ2MkFENkQyNUNDNzM2MDNDMTFEOTUyRkU3NAotOjEwRDU4MDAwRUQ0QjMxMEVEQTk5NDNGMUI5MDZGNEFDMkE0ODQyNzRGNgotOjEwRDU5MDAwOTUxRjc2QzEzQzlEMzJBQjNGOTc3N0NDQjdCMjM4NUFENgotOjEwRDVBMDAwN0YyQ0VGOTg3QjI1NkRFRjlDOTg2QjgxNzVFNEE1Qjk3NgotOjEwRDVCMDAwQjQ0MDBDQkEzQTBDRjIxOEQ2Qjc3NkQxNzBCRDFFMzQwRQotOjEwRDVDMDAwOTc2QTBEMUQ3NzA4MkQ4Qjc5MDlCNDc2MEVDMDlGOTc0OQotOjEwRDVEMDAwMkE3RjlFQzlFQTA3MzhEQ0Q0NjZERTlFQzZDQUIzRkQ0MAotOjEwRDVFMDAwMURGM0Y4QUZFNUI5ODU1RDNBOTRGQjhGQzVDRThDNDE0QwotOjEwRDVGMDAwRUREM0MzNzk2NUZERUQ1MzJBRTg4NjAyOUQ2RkIyN0FCQgotOjEwRDYwMDAwODc1QUU4RDg5QkQ2REE4ODlGRjJENEE2MUM4MjdFQTJERAotOjEwRDYxMDAwN0Y4RDJEQjAxREY4NDM1MTg3NUVBQUIzQkIwMjZCMzJEQwotOjEwRDYyMDAwQUVEMEU4RkIwMTg5Q0NEMUNCQzk3QjM5OUNFRkNBOTczRQotOjEwRDYzMDAwNzA3RUQzRTU2MzdFOTlEMkVGMjYzRjQxM0I2QjEzNzEzOQotOjEwRDY0MDAwM0JDMDFFODlFMERCRkZCOTBGRTk5MEUzQkIyQUJGNkE0QwotOjEwRDY1MDAwMUREMDI5NTlDOEY0NjY3RTU0OUVBRDUwRTgzODlCNjFCMAotOjEwRDY2MDAwMUM1QURGREM2RUMxRjk2RERBNDVGOTk3N0VFQUYzOUI0RgotOjEwRDY3MDAwREZCMTgwREQzQzk2MDQyREIwQkUzMTI0ODBBNTg3MkMxRgotOjEwRDY4MDAwQjMwMDUwQkFCOTFFREZDNkY5Qjc5MEYyMzdGQTNCMjBBMwotOjEwRDY5MDAwRkE2OEZCQTVDM0VCQkUwNkJFNDgyMjJBRDY1NUJGMUJCRgotOjEwRDZBMDAwRTlBOTcxNTc3MjY1MkNGQkMwOTY2RkUxN0UyNkE5NTdEOAotOjEwRDZCMDAwMjY3MTNGODdDMUQ5OTY1RkQ2MUZGRTU2QjIwQ0UxN0UxOAotOjEwRDZDMDAwOTNDNzY3Q0YwN0ZGNkVFN0MxRTAzMERBRjRDNEFCNDYxQgotOjEwRDZEMDAwQkEwNUE4Q0NEMkM5OUQxQ0ZFOUQyNEFGNEY5M0U5Mzg1MgotOjEwRDZFMDAwN0I3MkVCOTJFMUZEQzZGQTRGRjY2NUMwRDA3RTNGQkU3RAotOjEwRDZGMDAwM0YzOURGOERGREFFMDg3NjRGODc2MUM2NzlDMzk1NDAwRgotOjEwRDcwMDAwMEI2M0FCN0JGNzAwQzk4Q0QxMzY4MzlCNDEzQ0U1M0Y3MwotOjEwRDcxMDAwREY5M0FBQzIzQ0VBODZDMjM4ODVBMTcwMDU5MDhGQjMxOAotOjEwRDcyMDAwRkU2MDMwMDNFNzczQkUwNUU4NjIwNENDODdEMzQ3MkQ2MwotOjEwRDczMDAwRDI5NzhBNzQyMkYwMERGNDUwNEJFQjU3MzQzMEY4NTBFNgotOjEwRDc0MDAwODMxMERCODlFMjM2Q0M3RkNCMkE0QTI3Q0VGRTc0OTI0NwotOjEwRDc1MDAwOUFDRkVDMjM2RjE0OEVDNDNBQjg3RkU1Q0Q4RjQxQkZDQQotOjEwRDc2MDAwMDIyRUIzN0FCQzU2MDgxN0Y4N0VFNzVFMDUzRUQwQ0M5MQotOjEwRDc3MDAwNDBERjVFMDc3RERFOUU1Qjc3MEVBQ0IzNzRBM0FGMTUxMgotOjEwRDc4MDAwRThDRkI5MkJFNDg3N0UwMjRFQ0UyOTIxNERDMjdFREE0NgotOjEwRDc5MDAwQjlEMDZGRDNDRDk1OTVBODE3QkEwOEZBNEI0MjdGOUFBNgotOjEwRDdBMDAwRjE2RjlENjJCNEY3MDhFOUMyRjU4Q0VDMzJEQUU5OTRDNgotOjEwRDdCMDAwOEU1MTlGRjdBM0UzOUIyMzc0MUNBRjhGNEIwOEZEMTM3RgotOjEwRDdDMDAwRThCNEM0N0JDMENGQTBGRTA3OEUzNTgwMUM3OTgwRUIwNwotOjEwRDdEMDAwMjU0MUQ3RTI3OTAxODkxRDY3QjgzMjNGRTJDRjY2Q0E5OQotOjEwRDdFMDAwODNDM0ZCQ0FGQzE4RkVBQzBCRjg2MzA0RjJDQjdDQzAwRAotOjEwRDdGMDAwODc5QkY0NjFGQkYwOUI4REZDRDJCOEYzOTM3REMzRTg2QgotOjEwRDgwMDAwRkM5REE1RUEwNEMwOEZGODdFMDNDNzM3QTVFM0M1NDg5MQotOjEwRDgxMDAwQzcxQkZCRjY4MTVFMUI3RTMzQTNFMzZCQzFENjQ4OEYyQgotOjEwRDgyMDAwRDJFMzREMUU2RDI5N0M0N0QwOTk3OTNENEJGODdBREFDOQotOjEwRDgzMDAwNzM3REQ3QzI3ODU3NkNFQzdFREU4MUVGRjlBRTQ3M0U0MAotOjEwRDg0MDAwREIxODBBM0E0ODE0QkVDMzM5N0NFMzZFODlFMEQ5MEQ2RgotOjEwRDg1MDAwRjI2MzU2OERGNzc5RDBDRjNFOEY3QjNBOTQzM0Q1QkVBNQotOjEwRDg2MDAwMzYzMDJERTZENkNCMDZCQkNGOEM1RjRBNUZBRDQ4NUYyNgotOjEwRDg3MDAwQzQzNzREOTJDMDlBRURCNkEyRkUxQzgwNkVBMjdBRDMzOAotOjEwRDg4MDAwMkZFOEZFRTY1M0M4RUQzQjYyRTFFMTc0QzczRjk5RUIzOAotOjEwRDg5MDAwQkIxQkRFNEZBOUY2MTFFNEQzRDM5REQ3NjlGNjEzNzFGNAotOjEwRDhBMDAwQjNBODFEMUJCMEVCRUQ1ODQxRjcxREVEQjNEMDRGMTZEQgotOjEwRDhCMDAwNzgxMENGNTdCNUNGQUFDRTAzM0E3NzJBREU1OEZFNEY1RAotOjEwRDhDMDAwNDRERjcwM0FCRjlGRDNGOTdBNkU3Rjc1NzFGQkVCRjYzOAotOjEwRDhEMDAwMTYxNUU1N0I2NzhCMDdDQjhFMTYyRjhGODc5NjYzQjk1RQotOjEwRDhFMDAwQUE0NUMzN0VGMjlBNEYyQkQwN0ZCRjk5NjA1QzZCNjVDRgotOjEwRDhGMDAwNDI4OTE0OEJBRUYyRkM0NjdCN0Y3OEIzMTFFRkE5RDUzOQotOjEwRDkwMDAwNDZGRjNCNTk2RjJGRDM3RjQ5RTVGOTg2RjY0NEVGNjgxMAotOjEwRDkxMDAwNDNGQjY5QzQ4QjBGMDBERERCRDIyQTBERkQ0OEY4MTNGMQotOjEwRDkyMDAwODM3RDJCRTAzODVEOUU4N0YxNjIwQTRGQjRBQjg1M0Q2NQotOjEwRDkzMDAwMkJEQTA5QTlDMzc4QUVENUU0Njc3NjlBRUNEODBFODBDNQotOjEwRDk0MDAwMjNDMjk3QzFCMTBCRTA4OEYwMkRFN0YwQUM2NjdFMTNERgotOjEwRDk1MDAwRjc3QkUyODVERjUzQjQ3RUNFN0M4QzhCMTA5NDU3MkIwMwotOjEwRDk2MDAwNzI2Q0E4OUYzQkYyOThCREREOEY3RTMyNzVGMjkzRjIwOAotOjEwRDk3MDAwRkNFQTM1NEM5RjBCN0JGQ0Y5OUM1N0FBQzFBRUREOTJBQgotOjEwRDk4MDAwNjk0MTM5QjkyNTZEOEY2NzJCRDZFM0JENEM5RkZBQkIzMgotOjEwRDk5MDAwM0MxNDdGNTYwRjhGNTc1MzhBQ0RBMkVCNERFNDdDQjNENgotOjEwRDlBMDAwREE0QTMwRkVERDkxRUVGNDQyMUMyQ0QxQjNBODA2RkIxRQotOjEwRDlCMDAwOTlCRTRCQzhDRjg5REVGRjIzRUZENTFCRUMwRUEyNUNDRQotOjEwRDlDMDAwNjM1ODY3NjRGRUE1MzYzNjhFNDQyNDE4MjdBNUQ4NjZBQQotOjEwRDlEMDAwQzA5RjlERThFQTc5MzA1RjVCMTQ4Rjc5QjA1RThFMjczNwotOjEwRDlFMDAwOTM5RDIzRTIxNDY2M0NCOTZCOENGQTY2NzUxMTdCQkY3QwotOjEwRDlGMDAwMzdFNzAxQzRCQjE5QkVBRTJBMjNGRDc2NzBCQTY4NEI2NwotOjEwREEwMDAwREY4MjdDNjhFRTZGMUU5RjRDODkzN0Y4N0YxRDlFQzFCOAotOjEwREExMDAwRTMyNEMyOUYxNkZEQzA4Rjc2QzdFODZGRjZBM0NGODZCQQotOjEwREEyMDAwQkZFRUM2RUYxOUY1NUQwQzdGN0REMjA4NUQzQzQ5QzBBNQotOjEwREEzMDAwM0I4MjA3MTE1RkU0N0U5ODg4NUI4QkYxMTRDMkM2QzNGQQotOjEwREE0MDAwM0FDNkI3RkQyOEZGN0U5OUUwNDIzRkIyQzA2OTBCODAxRAotOjEwREE1MDAwMkMyQ0EwRjMwMDNBNkVGQjU1NDI2MDI1QURBRjRCOThERAotOjEwREE2MDAwRDk5NzQ0RUIwNURCNjQxNURCOURCRUExMTA2N0VFRERBNQotOjEwREE3MDAwMzA2MzY4OTg3RUY3MUVBOUVFQTIxMUJBMzhEQ0I2RTRDRQotOjEwREE4MDAwMUIzMjk5M0RBMEJDMTNGNjAwOTM0QkU4RTdGQUQ3NEQ0MwotOjEwREE5MDAwMEM2OTYwOEYxNzExRUY3NjAyNUUzMDZCMTdGNDQ0RjQ1NwotOjEwREFBMDAwNzVCOTdGRkRCMzExNENFRjY2Q0UyNUNCQkE2M0UwN0YyRAotOjEwREFCMDAwMEQ2RjhGQ0E3MTVGM0NDQTZCMkVDNzBCMzhCQ0I2NzcyRgotOjEwREFDMDAwQ0Q4QUQ3Q0I3MURERjNBNDU4NzQ3NUI2RTQ3NzFCQzg0MwotOjEwREFEMDAwRUY1MUYwOUQxNzM1RDREQkE1ODRDQkVGNDdDOEY3NTE0NAotOjEwREFFMDAwN0UyRkNCQUI1QjNEQTIyQ0M2N0U5RjEyNDZGOTNENTFFQgotOjEwREFGMDAwRDVEQTAxRUZFOUUwRUYwMTVFN0U0QUYxMTI2MzFEQ0Y1NgotOjEwREIwMDAwOEU2MEY2Q0RGNzE1MkY0MkFGNkVFRjdBOUNFMUE1NThFNwotOjEwREIxMDAwRTBFNTc2MTJDQkZGRkQxRUUwRTU2OTgwN0IzRkJENEE2NAotOjEwREIyMDAwQzJCODBGRkI0NUI2RjYwQ0I0M0ZBNTZBQkIwMDdGMTEyNwotOjEwREIzMDAwRkM1QzE2OUI2RkZFRjkxREUzRTc3RUVFQjdBRUU3RjhERgotOjEwREI0MDAwRTlFMkYxRjFEQjM5N0UzQUI5QkVFRUUwRjg2OUU3RkFENQotOjEwREI1MDAwRkE1NkMwNEZEQzk5RjNDREYwNjYyMzdFNTJBQkUzNEQwRAotOjEwREI2MDAwRjgzMEUyMjdBOURDODg5RjQ0QUYxMTNGMDk5RUQxMjZGNwotOjEwREI3MDAwN0MxOEYxOTM1RUEwMjJGQ0UyMzI4RDc4RUFDNzM3QTdDOQotOjEwREI4MDAwRjA1N0QyNjA5QzE4NzY3Mjc2NURBODAyRjZCODg2Q0UwMQotOjEwREI5MDAwRTlFRUI1QzIyMEJFQUUwQTI4QzU3QUVGMzVGOUE1QTJENgotOjEwREJBMDAwNEMyRjYwNzhDRDlDMTYxQkVGMTZERTFFQzhEN0E0MDI0MgotOjEwREJCMDAwM0Q5REZDMjAzNjFGREI3OUZGNjNBQTE2NjdFODdGNTE4NQotOjEwREJDMDAwRUNGRTJFREVGRkY1RTE1QUEyQkUzRkZEQjk0QjFFQzRBRQotOjEwREJEMDAwNUYzMEFGM0Y0MUQyRDIwQjcwMURFQUNFMzBDNUZEQjZFQgotOjEwREJFMDAwMTU2QzFGNzI5QjQzRUQ4NkZEN0NGRjBBQTc3N0JCOEFFRAotOjEwREJGMDAwMjNGOUVDRTAxRkYxNzE4ODNGMDlDN0NERTU5RjE5RUVDRAotOjEwREMwMDAwRENGRjE1RUNGQkU1MkRDODFFN0EzNTZEQ0Y1QjlFNzlFOAotOjEwREMxMDAwQTQ4RTk2QTMwQjQ2RTAzQ0YzRUJCRDdCMDBDRUIyNkIyQgotOjEwREMyMDAwQ0U1MEI2N0YzQ0NGRkRGRTE4NEE2QUMxNTRFOTFCNzA0NgotOjEwREMzMDAwQjhEREIxRjdFRDQ1MjlGNDI5OTU4MzY4MDdEMjg5MDQ0OQotOjEwREM0MDAwQjY1MzNBOEQ1Mzg4OTI5ODAyRUJENTcwNUQ1NkIwNjMwNwotOjEwREM1MDAwNjU1ODZGMTdENkUzNDkzNzk2NEUxMjYyRkJEN0RDMUYyMwotOjEwREM2MDAwM0RBRjIwMEZDNzczMTMzN0ZBQUIyOUM0OEJBNUUwNjMxMAotOjEwREM3MDAwN0IxQTUxRDIyN0UwRjg2RDcxMTMwODJBRkNGM0MwNUZCQwotOjEwREM4MDAwNzU2NjZGRUUwMDlGNDZBMzUwOTg4NEFDODJGMDkwRUVDQwotOjEwREM5MDAwREE4N0VCMjcxRUEyQjI3OERCQ0Q2RUNDNEZGODMzNUQ2RQotOjEwRENBMDAwREY5OEQzNUZERkU5RjZGQkQyRTEyQTIxNDk4NDM0REIzOAotOjEwRENCMDAwNTlGOThCNzhENzE2MjhCRjc0RTQwNjIwNjhBNThEQTg3QgotOjEwRENDMDAwRkIzMUUwRDU1RjQ5RDBGRUYwQkY5NTEwNjhDNUM5MkU4NQotOjEwRENEMDAwM0I4N0Y5MDdBNzNEQ0VCQ0IzMzRDRUNGQ0VEMjM4OEQyQgotOjEwRENFMDAwMDVFOUE3MUVFNzM2Rjg3NTMyRUM2M0ZBOTY0M0ZGQjZFRQotOjEwRENGMDAwRTQ0OTY4Nzc4QUQyMENENzdEMUVFRDA2OTg5RjYyN0YzMwotOjEwREQwMDAwMjlGN0JERDRBOERERTY3QzUzNDJCQkFENEQwQTEyODg4RAotOjEwREQxMDAwNTNGQURGOTZEMEJFMjJDNTBDNEY0RTk1NzhGMkM2NDUxOQotOjEwREQyMDAwQzc3MTdBOTcwRDY3RjEyRTE2RUY1OUYxRjc1RjhDMDJFNAotOjEwREQzMDAwRkJGQjk3MDkzM0MzNDlGNEZEQUQwN0E5OUQwNzc5MzQ2RgotOjEwREQ0MDAwRDNCQ0FGRDc1MzdBNEE0RkI1NzlCNzUwRkE0OUU1N0U3RAotOjEwREQ1MDAwNzJEQ0RBNDkwN0VBRTlBRjlGOEM2MkZDQkRBMzY1QkZCQwotOjEwREQ2MDAwQkI4RDBBQTQ0NEM1N0JFMTA0RkE5RTkzRUZERjEyQjk5MAotOjEwREQ3MDAwMjYwQzc2NjNFMjI0NDU4NTNEOEUyMjM5NTgwREYzMjUyNQotOjEwREQ4MDAwNEQxNjAyN0M3MTRGODM3MTNGQjdCM0IwMDhFMTIyRUFCMAotOjEwREQ5MDAwQzNGODdFMkUyOTU1RkEyMjc5MzZENDhFREY1OEMwRjM4NwotOjEwRERBMDAwNkE1Q0M0MDU3NkExRjI2RjJEMjk1NkRFODMyOEM1RkM3NgotOjEwRERCMDAwNEFEM0E4REU0QTgyQjgyMEU1MTQ1QTk2NzYwNjMxRjk4RAotOjEwRERDMDAwQTNEMjFCQjQ4MzFEQkIyMTQwRkMzNjBBQTcwN0U3RkI4NwotOjEwREREMDAwQUU4MUYxM0FDQjdEMDk2MDk3NkYzODM0RUJBMkIxNzQxNAotOjEwRERFMDAwREVBMUIwRTIwNTEwMDQ0N0E1RTBCQTQzOUFCQzM2ODEzMwotOjEwRERGMDAwM0VERkY5QTZDNTBERUJEQkNBREZFRkY0NDlDOEZGRjczQwotOjEwREUwMDAwQ0MyMzAxM0Y4NUM3RDY4NjNENzYxOUVDREU5MDg1OEMwNAotOjEwREUxMDAwNDQzQjk3M0E1QzkzQjgyODU0MjE1RUNCRjhGRTk2NTE2OAotOjEwREUyMDAwRTlGOEIwMjdCNDNDMTlFMEIyMkVFMUZDOTA0NkM3QUY0OAotOjEwREUzMDAwQUQ2NjcxRTcxOTcyRjZGMzMwNkVBOEQzODZGODQ5RTczQwotOjEwREU0MDAwRjk0NzEyQTk0NUZCMzk2NTlFQ0U1RUE2RkYxMjNCOTlBNAotOjEwREU1MDAwNUYxOUJBOEU2MERFNTM1Mjk5RDNFQkE3REY3QjIyQ0NEOQotOjEwREU2MDAwRjY4REVFQTk2NjcxNjcxNzA5RTJGNzY3QzhCQjFDMTY0NQotOjEwREU3MDAwRkFCQ0E3NUE3MTAzM0QyNTk5RUM3MzI3OEM0NzQ5QUUyQwotOjEwREU4MDAwNjcyMzFCQ0YzNTlFOEQ5NzY4Q0E4M0IyOEI3OUI5RTkxQQotOjEwREU5MDAwQkMyOEZFRTQ0NDA1RjFFQ0FFMzZFNjRGQjk0Q0VGMzk1MAotOjEwREVBMDAwNERERjdCNTlFMDM5OUIxNDAyOUU0RkY4NkU5OEY4MTJCMwotOjEwREVCMDAwQjY3QUQ1NThGOTEzOUQyRDI0NTRBNUNCQjc3MDBFMTAwMgotOjEwREVDMDAwM0ZGQ0IyOTBGOTA5QjZBQ0JENzY5OEQ3MDlERjJCNjk1MwotOjEwREVEMDAwMTBFRTdBRTE1RkZCREVCQjAzQ0E3RkZGNTc0RjEzNUQ5NQotOjEwREVFMDAwRDc1RkJGM0FCQ0VENTE4MDYzRjM2RDJGMjIxRDcyQkYyNwotOjEwREVGMDAwNkEwODRDODFDRUU3Rjk1QTFCQzJCMTRDNjNGMTAxNTI1QQotOjEwREYwMDAwREFCQkQ3NUE4QUVEQjhBRkI1NzY4RjAzREI4Nzk1OTMyNgotOjEwREYxMDAwODA4M0MyNzM5OEEyNjVGRDBDRjgzNTI0N0I1N0E4MzAyNgotOjEwREYyMDAwODhFNkNDOUE0NEQ4NTYxNUFEQUZCRDkyMTIwRTk1MEYyNwotOjEwREYzMDAwRTlGMzM0RDk1RjBDRjE5MDE3NDgyMkM1RjcwNjRENTIyQQotOjEwREY0MDAwNTlGRTlCRjQzQ0YwNTM0RTk1ODQ3RTU4Q0UyMTlGMDM5RQotOjEwREY1MDAwRThFMUM0NkMwQkU2QkZBQ0E4QkRGNEMyOTE3NEZDRkI1NQotOjEwREY2MDAwMkExNDhDMzc1NDU3NTU1QzBFRURDMzBFMzE3QTcxNUQwRgotOjEwREY3MDAwQzdGMDQ3RTExNEFDQTJGQzMwRTIxMDhCMjc5NDkyQjBCQQotOjEwREY4MDAwMzc0OERCODc3OTg5MzUwREY0QzczQzBBNjA5ODVGMjdFRAotOjEwREY5MDAwQzcwRjhGMEY5NDk2ODZGQzAwRDQ0NEFGMTE4RjZFMTM3OQotOjEwREZBMDAwMUVDRDc4NzU4REE0NzgwNEZENTI0NDhBOTg1RkM3RUMyNQotOjEwREZCMDAwQzc1QURFNjc0M0Q1NDRGNDVGRUY1MTg5REYzQUFFM0Y3RAotOjEwREZDMDAwQkU1RUE0RjZBMzQ2RURCRjEwQjUxRkExRkMxQkI1MUY5NgotOjEwREZEMDAwQTFFQ0ExRjYyMzk0ODk1QUM1NDVBNTc0QkVBMTc0M0E1MwotOjEwREZFMDAwMkVGMDVGNEREOTRBRDgxRkI4NkZFQUQ1MzdGRDkzOTYwQQotOjEwREZGMDAwNjU3QzlGOEQ3MjZBNEEyNUZEQ0UyQ0UwNjI1NjVGQUYyQwotOjEwRTAwMDAwNTE5QkU0QTU1MkQ5NTA1RjlCQTY4ODdEM0MzRkU4RDQ0NAotOjEwRTAxMDAwQzQyQzBCREZFNzk5NzFBNzQ2RUI5RDk5MEFERkQ3NjMwNAotOjEwRTAyMDAwRjUxMUM1QzQ1MEVGQTlCMTE4RUFFN0VERDE4RDNGMDU1MAotOjEwRTAzMDAwRjAxMzg3RjUwOTIzNzdBRUY3MTc0NERCRUYyOEE0NzVCMwotOjEwRTA0MDAwREE3RTgwREI3M0I1NEIyREJFMkQzMUU4NzdEOTQ4NDY5QgotOjEwRTA1MDAwQkZDQUJGODk1RkEyRjhGQUFDODBBMDlGMkU1QjM0OTQ0MAotOjEwRTA2MDAwREZBNDUwNTE0MUJFRjZEN0NCNTQwRUVBRkRFQjAyMkE5NQotOjEwRTA3MDAwNTc3NUYxOTFDMzg1M0NBRUVFQUI2MDcxMzYxMkZERjk3OAotOjEwRTA4MDAwN0ExMkNGQjMyMkYwQkMzMzA0NzZDNEFEQUY1RUU5MEQ5MwotOjEwRTA5MDAwOTI4MUU1QUUzNTUzMzlBMkE3OTM4QjA1MUQ4QzI0MjNCRAotOjEwRTBBMDAwRDE5RjI3NTMwRTU0MDA5RDc1NEQ1NDgwMUU0QTM5MUYzMQotOjEwRTBCMDAwMTA2RUM3NjE4ODlGRDJDRjUzOUZERUZEMTc0RDA1M0Y3RAotOjEwRTBDMDAwQUREREREMzYxMkYzN0UyRTFGQTlDQjkzNTk5NUJFNjhDOAotOjEwRTBEMDAwMjJFODMzOTFGNzQzNDg5NUZCN0RCQTJFQzk3RkE5MDUwNQotOjEwRTBFMDAwRUNCNjgxRUQxNDg1QkNBRjgzNDc2RkVEOEMyNEQwMDM3MwotOjEwRTBGMDAwNEUyRUM3Q0RGRDU3QjVFQzdDMDVCRUJGQkFBNTFCNEI1OAotOjEwRTEwMDAwNjc5QTBGODU4QzVERjE2M0ZDNjY5RkE3QUUxMUU2NjU4QgotOjEwRTExMDAwQ0ZBNkVEM0EzOTZDNEJBM0VGMTlGQzgwNkM2Njc3MDlGQQotOjEwRTEyMDAwM0NCODA5QzY4M0M0QkVDOTg2Q0UwOUYxNzExNDE4OURENgotOjEwRTEzMDAwNTQ1RjgwN0NERTEwOUE4NTc5MTU5RERFMDk4M0M2QUYxOQotOjEwRTE0MDAwNEVDNTI3NUJBQjVFMjI2OTE0OEU0RkJFM0FGMzJGQjNFOAotOjEwRTE1MDAwNjk3OTEwRjg4REVBQzEyNzM4REZFNDk0M0ZGNkRBQjUyMwotOjEwRTE2MDAwMDY3RTM5NkFFMjk3QTMyNjdFMzk3QTBBN0VCOUUwNEVBNgotOjEwRTE3MDAwNjhFRkM5NTQwQ0Y1MUNFMDE3NUQ3RDZCODQ1RjU4M0Q1QQotOjEwRTE4MDAwQ0EyRjQ3OTE1RkVFNzlEOTg2RjU4RDIzOEYxQUY4NjVFRQotOjEwRTE5MDAwNDUyMUFENjdFQkY4NjVCQUVDREIxMkMzMEU3OEU1M0JDMQotOjEwRTFBMDAwRTI5NzVGOUYyOUJGQkM3MTY2RkNGMkM0RDlFMzk3M0YzOQotOjEwRTFCMDAwOEU0Q0ZGRUVGOEM1Nzc5QUZDRTJFQkNGMkY4NzYwNUVCRQotOjEwRTFDMDAwNjdDQTJGOURFRTIwRTYwMzc2Q0VCNjU0MDc2MkUwRkJDOQotOjEwRTFEMDAwN0E4RTZGMTFGNzJFRTM3MThBNjlGM0I0Q0JDNzgyM0Q1MwotOjEwRTFFMDAwQ0JGM0Q2NDQzRTRERTczQ0E2QkY1N0Q0Q0U0MDdEQjlENQotOjEwRTFGMDAwRjUyMEQzOTc0MjNGOTc3MTNDRkU4REM3MzFDQTQyNEMwMAotOjEwRTIwMDAwNkZBNjk3NEJGOEZFNEM0RDBBQThGNEQ3NEU2QTEyQTQ5RAotOjEwRTIxMDAwODJCRTlFMjI5MTJFMTU5NkJBQUM3NkE0MTRCNTlCRThDOAotOjEwRTIyMDAwRjdEMDZFQkFDRkNCRjI2NkM5MjE2NkVGRDhFOTdGNDA0RQotOjEwRTIzMDAwNEYxNzk3NUIwRDdBNzU4OEQ5RkUzMkQ1QzUzRUE2RDhBMwotOjEwRTI0MDAwQkZCQzBGRjIxMjI4M0NCRTFFQzlFRDI2OTNCRTE1NzA0RQotOjEwRTI1MDAwRDg3MEE4MTJFRDkwQ0ZCMzZEODNFRTU3NzVGMkY1NDZFNgotOjEwRTI2MDAwRUNBOTUyNUY0NUFDNzg1ODdEQTE4NEYwQkVDOUEzQzUyNgotOjEwRTI3MDAwMTc5NjgxM0VCRTBBRjVBRUQwRTc2NkJEREM1M0Y1OTIzNwotOjEwRTI4MDAwNTFDRUY4QzdBNzU2MTZFQkU0OEM3RjNDRUFDRDg4OUNBQwotOjEwRTI5MDAwRTFGNTAxRTUwQzM5MDdFNTQ2NDQyRkYzN0E0NDJGRjMwNQotOjEwRTJBMDAwN0E0NDJGRjM3QTQ0Q0VDMEY4RDk1MUJEM0NGMjgxRjFDMwotOjEwRTJCMDAwNzdGQTc1N0E3QjE5RDRCMzRGQUQ5NzE3NzA3OTcwQjYyQQotOjEwRTJDMDAwRTVDQzFGQjhCREZBNURFOUU1Q0E0MjRFMkZGRkI5OUMwNwotOjEwRTJEMDAwQTkyOUZDMEVFNTRDMkRDODk5QTQ1M0NCOTk1QTkwMzMyQgotOjEwRTJFMDAwQzUwNjM5NzM1NUUxQjdEMENCODkwREJEN0VEOEJGQkYwOAotOjEwRTJGMDAwNjIwMEJBNzc3MDdDMzcxNTY4RDdDMEY4QTRFNkY0RjJFQwotOjEwRTMwMDAwQjZDRDc0RDU1QkZCQzBBQTBDQTAxNzJGRjNGMzA2N0EyOQotOjEwRTMxMDAwM0ZCMUY5RjdBRkI0RTlGMkEyMTM5NTEwM0I1RkQxRkMxRQotOjEwRTMyMDAwMjQzRTlGREI3MDEwRTM2NUE3OUE2RjdEMjFDMUQyQUNCQwotOjEwRTMzMDAwNDc3QjZCRjdEOTkxNkVCRDE2REMxM0ZGQjZGM0U4OUNGMwotOjEwRTM0MDAwQ0RGOEYyOERFRDRGQUYwNzNFQkE4RkM3RkRDQzc2QUU1QwotOjEwRTM1MDAwQzBFQkU5REEzRkU2RUY1RTNGNTJDNTcxQ0RERjNGMTUxNgotOjEwRTM2MDAwREQ1MjNBREQwQzc0N0EyMkZCQkEzMUUwRTdDOTg5NzdENQotOjEwRTM3MDAwMjUwMEJDQkUwN0ZBRjBDOTZGNDNBN0FGOEM2NEY4M0MxOAotOjEwRTM4MDAwOEQ3NTA3NjFGQ0VGNkFEREZGMDE3RkJFRkM2REQ2QkRCOAotOjEwRTM5MDAwQTA5MEQxRDU2OUFDRkJCRkJGNEI3Q0ZGMDdGRUMyNjcyNQotOjEwRTNBMDAwREY2NkREQ0IwNEJFMDkzQjJGRTM4NjVGMjg5RkFDRkYxMQotOjEwRTNCMDAwNTdFMURCMTBCRjU4RkZFRkQxOEZDMTNBQkJCRUIyNkY0MAotOjEwRTNDMDAwODZGODA1RjlGQTFCRDlBRDNGM0Y0NUQ4Qjk5OTQ0RkUwNwotOjEwRTNEMDAwNUVBMjhGOUQ4NzcxNTdFQkNFNDc5MUU4NzkyOTVDMEYzQwotOjEwRTNFMDAwQzYzNzIyRUQwNzYyOUQ5N0ZCQUU0QkIwNDdERUIxMEVGQwotOjEwRTNGMDAwRDI2RTYzNzEzQkYzRjNGRjJFOTBEODM5MzZBOUQ2MDE2NAotOjEwRTQwMDAwNzlGMUJEQjNGNzYwQkU0MUU3RUMwOUI4NkY2NUI2NTM2QgotOjEwRTQxMDAwQzQ3QjNEMkQxQUM2OTMzQTVCN0M1OERFREU1MjFEODJDQQotOjEwRTQyMDAwQjhDOTkzMkZCRDI1NDEzRTU4RTk0QjBEQThERkQ2NEUwNAotOjEwRTQzMDAwRkFFMTMwQ0NFMzlCNUExQTBGRjVEQjRENzY4QThCREI4MQotOjEwRTQ0MDAwMjlERTUxQUZERkE5Rjc1RjlFRkM0RDEzQ0E0MTExODc0QQotOjEwRTQ1MDAwQkEyMzYyQkZEMEY3NTQ5RDlGNDRFQjQwMEUxMTNGMDk5MQotOjEwRTQ2MDAwRUEwNjNGNjlEOTdBQjA1RjdBQzA3RUExRkRBNzhFNUFDRAotOjEwRTQ3MDAwQjYzRUQ2NzdENjVBNDgzREQ4MkY2QjFCMkNENUIxRUM3QgotOjEwRTQ4MDAwOTc3MDQxNkNGQjg1RDY3MURGQ0Q5MTY4MEZBQ0NDMDNFMgotOjEwRTQ5MDAwN0I4NkQ0RTlFMzZBQTdCMjVGMUUxRUY1RERGQTQ5NTcxMQotOjEwRTRBMDAwOEMzQTNCN0U1Mjg0NkZCOUREMzJBNDQ4NUIwODIxRDk5NwotOjEwRTRCMDAwQjMyNTI3ODY5REE2OUMxOEQ2NUY0RURDMzhFQTVCRjgwQwotOjEwRTRDMDAwNDlFMTAyOTY1RjJERTg2QkFCRUFDNTc4NzI2NzM1QzEwQQotOjEwRTREMDAwRjg2MzY3Njg2NTZBMDlBRDNGRDE2MDIxMTJBRDVGRkZERgotOjEwRTRFMDAwMzI4QjBCNkYyODI3MDEzODQ3QkIyMTlCNjAzREU0NjVDOQotOjEwRTRGMDAwNzQzMDQzNzZGRTA4RTJFMDNENTVENDdGNTIyMTZFRjczQQotOjEwRTUwMDAwRTM1QTgwRURCQTg0OTlCNzM5MjhCREQ0OTYyQjA0RkMyMAotOjEwRTUxMDAwQTYxOUYyMTRGQzRFNDg2M0Y5QTFCNTRFRjJBMzM4RjBFNwotOjEwRTUyMDAwQUJBNjJBNjRFNTE5QzRBRDEzRTU2Mjg5NzIyNEU1NEZGMAotOjEwRTUzMDAwMzUxOUY4NzZBMDc4QjQzOUZFNENFNDE3QkM4MDJGNzNGNwotOjEwRTU0MDAwMUNGQTRDRTNDRkRCMDU1RDdERkJGODMzRjJERjk3MEY2MAotOjEwRTU1MDAwMzRDRDgyNzhFRUE5RTg3MUMxMjgxNUY1OTk1OTRGOTkwMwotOjEwRTU2MDAwRjk1OEQwRDM0MEY0RTcwNDNCNjlBMkFFQ0VDRkUxODZBMAotOjEwRTU3MDAwRjkzRUI1MTNFQ0E0ODk1MUJBRThBRDlEOTQxNDJCRkY3NAotOjEwRTU4MDAwNEE5NDA5Q0Q3Rjc4NDU3RjFFMkY0MUU5QzZGMTEyOUE0MgotOjEwRTU5MDAwNzdFMUYzQkIyMDZGMDBENkE3Nzg1MTlFM0U1ODQ5RTUzRQotOjEwRTVBMDAwNzA4Q0Y5RUQ2RTU5NzYwOEU0RTdBRTk2NjYyQzJGNTAyNAotOjEwRTVCMDAwRkFFNDE0REFGRkU5MTZGRjIxODBEQkNFOTY3NjJDOUY3MQotOjEwRTVDMDAwNkNFOUMyRjY5RTk2OEQ1OERFRDExMkMwNzI2RENCMEVFQwotOjEwRTVEMDAwMkM2RjZCRTlDNkYyQzE3Q0Y2OUQyOTRBMTBDN0I5RTBFMQotOjEwRTVFMDAwMjQxRDVGNDc0NzUzRkJFODc3NzRGODNFRUY0M0JGQTExNAotOjEwRTVGMDAwN0Q3MkI4REREMDdFQ0VFMTJFNDNCRDJDQjREMUQwREYwQwotOjEwRTYwMDAwM0QyNTYwNjg2RjJBQTgzQjA2N0NFOTJBREQ2MTc4RUUyQgotOjEwRTYxMDAwMkNFRTM2QkM3N0JBN0VDMUQ5RUU5NzZCN0YwNEI2QzlCMwotOjEwRTYyMDAwNDkzMjlDQkJBMEFGQzg3MDZFODhGMkYxOTA2NjJBNUUzQQotOjEwRTYzMDAwNjlGREZFNDQxRUU3RTg2NkZCRTQ5OTI0RjI4Mzc0MDk1MQotOjEwRTY0MDAwQTk2NDYwMUZGNDI2QjIzQ0M4RDYyQ0Y2N0VFQjhEQUNENAotOjEwRTY1MDAwN0U3RjBFREIzRjEyNzk5QUIyM0Q0MkQ3NDRDQTg4RUVFNAotOjEwRTY2MDAwRTdERjlGQzhDRjI5MTVCMEJDQzhEQ0UyMDA0NDI0NDhDRQotOjEwRTY3MDAwMkUyNEE4QzE3RTQ4MjlEQjI3MTNGQkRFQUQzQ0VFNzBCQgotOjEwRTY4MDAwQkY5NUVDOTRBODNERDlBQUIwRjlCNzZBMjRCMDgyRjYzOAotOjEwRTY5MDAwNkIyRDY2RjU3QkFBNDhDMDAyRjNEN0E4MTRDRkQwRUQ0NgotOjEwRTZBMDAwNzMzN0VGRkI0QTJBODlFRTk3OTNEMTFBRUVEN0M4N0NDRAotOjEwRTZCMDAwOUYzREIyRUZFRDc4OTdFMEJFM0U4N0Q3Q0E4NDhGMzE5OQotOjEwRTZDMDAwOEYzNkI5Qjk0RjAyRkUxQUQyRENENzBCRjNCQkZGMTY1NwotOjEwRTZEMDAwOUIxQUNCMUZFQUJERTU4QjJDRTA5QjREMzc3RTkxMDU0NQotOjEwRTZFMDAwQ0NCRTI5OTIzRkQzRTdEMEU3Q0ZFNDcyQjg2QzZBQ0VCNAotOjEwRTZGMDAwQzdGQzg1NERGNTJFMkY4N0IzQzVENDhFRjkwQzlGRDc1NwotOjEwRTcwMDAwRjNGQjA5ODg4MjdFRDEzMDc3MTRBRTAxOTEzRjIyNDMxQQotOjEwRTcxMDAwREUxRDVERkY4OEU4RjlEM0ZGMzRCRjY2NTNGMzcyOTZDMAotOjEwRTcyMDAwNUY5MzRENzg3RUNENENGNDI3MDUxRTM2NDEzOUFFRkYwMAotOjEwRTczMDAwQjlERUVGM0FCRkU2OTQ3OTM1QTYzQzA3MDNGRDQyREQyQQotOjEwRTc0MDAwNkZBNjZGMTVGMTEyQzdFOTVCQkE5OUU1NDU2NDk5RThDMAotOjEwRTc1MDAwNDZFNDVEMDhCQTE0RjkxOTIyNUY0M0U0NkZEODc4NUU4NQotOjEwRTc2MDAwMDdGRDJDQ0Y2QjhFNEQ1RkI2M0RDNDAzRTdERTY0NEJENwotOjEwRTc3MDAwQkM3NzRCREVBOUYzMDg5QTNERjk1QzM5MkMxQkM3QzY2MAotOjEwRTc4MDAwNjVGOTAzRkYzMzRBRkI4NUE3MkMzQTZFOUU0N0JCNTFDMAotOjEwRTc5MDAwNUYxN0U1NTZGODc1MzIxREMyMUJBRTAyN0JCNUE4NUM0QgotOjEwRTdBMDAwNkI4NUYzN0MyOUE1MDRDRkU5OTQ5NjRCNTgxNjFENjIxRQotOjEwRTdCMDAwRjVEQjNDMzI3RUFGQ0RDM0UyNERBMjdFQjFBNjNEMDc3NAotOjEwRTdDMDAwRUYyNzk5REVCQjM4RjI5RTE1RkJGRERFNjNFMUE1QzJBMwotOjEwRTdEMDAwRTZDREYzOTA2NzcyRkE1RTNENTk2NkY5RDE1NTEyOTMxMgotOjEwRTdFMDAwMUJCMEExM0E4OUVCNDMwQUJGOEI4OUZCOTIwMjVEREMyNwotOjEwRTdGMDAwRjVDNzFDNUJCN0I3QjBGQzNFOTEwRkZEQjc5NzY1Q0M3MgotOjEwRTgwMDAwODc3Njk2RkJBNkMxRDlCM0IyNTAyODA4RkJFQkE1REJFRgotOjEwRTgxMDAwODgzQjQ1ODVGOTg1MzVFMEM3MTUzOTc3RUY4MTdDODhEOAotOjEwRTgyMDAwMjcyRTY0N0JCNjE3MUY2MkY2QzI4RkNCQUZDNkZCNDY5RQotOjEwRTgzMDAwNUM1RkNCMTg4Rjc1NEY0OUY0MDZFMDQzMzU1NkE2RkY1MQotOjEwRTg0MDAwNDUzRTc0QjlEMTVFQTgzNUQ5MEIxNzlGRTJGRThGMTRFRgotOjEwRTg1MDAwRDJFNzA3M0RGOTg4QzcxNDhGRTVGNzgwMEMyNEJGQTNFMgotOjEwRTg2MDAwRjc4MDMwRjk1MENBQzc3NDk2QkIxRDEwQkYyRTNBNjRBQQotOjEwRTg3MDAwQzFFMzlFRjIzNjREQzZGM0IxOUQyQ0NGRTM4OTkwNkY3NAotOjEwRTg4MDAwRDBGM0E4MkY3MjM4ODZCODlDRjgxQkNGOTNFQ0UxNzJCNgotOjEwRTg5MDAwRTI3NTJFMjcwRTgzOUNBMEU1MkIzQzRGRjIxMENGOTMwMAotOjEwRThBMDAwMzQ5Rjk3RDhEMTUyRkQ5MkRFREUzMTk3NDU5MjdGMTY4NAotOjEwRThCMDAwRTY0MTZENTYwODlFQkYxQkUwQkU4RkEyMDAxREM3OTBBQgotOjEwRThDMDAwQzdCODAyRTk2NzZGRjJERDE1NDAxQ0VCMzUwQkRBOTUyRQotOjEwRThEMDAwNUQ1MzQ4NTYyQ0ZGQUVFQkMyQ0E0MUYzMEYzQjVCRTZEQgotOjEwRThFMDAwQkNENDM2ODhERkU4QjQ1MTdGMjZENkZCMUU3MUFFQUJCMAotOjEwRThGMDAwMEJDRjVCQTQ5NTVCMDhFNDU1NjVEOUZCRDhGRTQzQUYwRAotOjEwRTkwMDAwMDNFOTc5ODhENzhFRkJGQjY0OUU5M0JDQUJDQjUzQjlFQwotOjEwRTkxMDAwRERENzM1MEJFNkZGRTAzNjA1Q0ZFNzg4NzExM0JENzQxMAotOjEwRTkyMDAwM0UzQTNBNDk5QkIyMjcxM0U2REYzOTM1OTgwOUY2NEM0RgotOjEwRTkzMDAwRDdGODdEMUIwQjIwNUZFNEEwNEM4MDBDQ0NGM0IyMTYwMwotOjEwRTk0MDAwNzE3Rjk2QUYyQjRERDFBNDU4NzlFQTAzQURFQjAzOEZCRAotOjEwRTk1MDAwNjRCODY3QzIwQ0ZGMDFFRDBFQzgwODE4RkNCQzk1QjM4MwotOjEwRTk2MDAwMjg0NkZFRTI2OUNDMTNFRERCNkY3NjVDM0IxQkNGNEQ5NgotOjEwRTk3MDAwOUVFNkZEMTcwOTlDMEVCMzE2MTIwN0ZBREQ0MDhGODM0MQotOjEwRTk4MDAwRTBEOTY1MEQyMURFRDYyRUI0NTRDNzNBNUY1QjU0QzQ3RQotOjEwRTk5MDAwRjBCREI2RjQ1M0I0OEI0OTcxRUM3OTI0OTU5QkU5OTU5RAotOjEwRTlBMDAwQ0RFNzBFODU4RTRGREZFQjJBOEQzREZFRTUxQzZGOTQ4MwotOjEwRTlCMDAwQUU1RjAzNzlENTU1NkQ0MUJCMjIwOTJFNjJDMEZDMUNBOAotOjEwRTlDMDAwNkEwNzQ5NDhFRjI4OTczRTJCQjUzMTNCQzEyNDJGRkFGRgotOjEwRTlEMDAwN0RCRjU0NDc0RkY5RkRFNUQwRjk0NTRFNDM3Q0ZGNDREOAotOjEwRTlFMDAwRjZFQ0E0NjAwQzNDOEI1MkMwNTFDOEExRkU3MDI0Nzg5OAotOjEwRTlGMDAwRkVCNThCQzM5MTE0QzdFNkVCMjhCRTU2ODg3ODU1REQ2QgotOjEwRUEwMDAwMjlDRUVCQ0QyRTJBOEI3MTRFNkMwMDNDOThFOUUxOEUxRAotOjEwRUExMDAwODUzRTVDMTc3OUVFMzVBMjgyQkUyQ0E1RkNBODhCNDNGRgotOjEwRUEyMDAwMEMwNDNGMzNCQzE2N0VDN0YwMzJCN0ZGQTg4OEM3NDczNwotOjEwRUEzMDAwNEU3MzlEQTdERDhGREE0NTZFOUQ1RDBDODdBMjE1NUEzQQotOjEwRUE0MDAwOUZDQUVCM0ZGNjRCRTE3QkE4NUM5NTc2RkQwOUVEOUVGNgotOjEwRUE1MDAwQTlCQ0ZDMzE5NDU0M0ZFRTkyODJFRkJFNDE1RjlFMjJFRQotOjEwRUE2MDAwQTkzOTgwQjQ1OTRGOEY4MjA4MTlCOTU1NUE2NkIwN0ZCOQotOjEwRUE3MDAwM0EyNEVGRTE2NzMwMkVENDk3MEFGREE2OTMzQTg1MjExOAotOjEwRUE4MDAwMzk4MEVCRkE5MzE0NkUwNTg1NzUyOUQxNTY0MUQ5NDgyMgotOjEwRUE5MDAwQkE2Q0YwNUU2M0NGOUYwRUMzNzcxQTdCMUM0MTE5ODI1QwotOjEwRUFBMDAwOTMzQkFEQzdGNDcxQTM2QkY0RTc0N0YyRTAxNjhENkVBQwotOjEwRUFCMDAwNUIxRTlEQ0Y5MjFEQzY3REQyMDYxMkMyRjE5Njc2MUJCQgotOjEwRUFDMDAwOUY5QkNGOEY0ODMyMDUwQzVDNEUxMEM5N0Y5RDgyRjkwOQotOjEwRUFEMDAwQkRDNEMxREFFMzQ3OEJGM0U4N0Q4NUZBRkJDQ0VBMzlBNAotOjEwRUFFMDAwQkNFQUVEQ0UyMERDMkY0NDAyQzY3OThBN0I3MzlFQTc1OAotOjEwRUFGMDAwNzJDQzNFMDFDRkMzM0MwQzc0RkM5MURCRUVCNzUwN0I3MwotOjEwRUIwMDAwMzkyM0E1QUUxMUUwNzExNTUxNkRBQzY0NzY4MzU4OTcyOQotOjEwRUIxMDAwQjg4NzY2ODE3M0I2MERFMEJCQTBEREJDMEVDRDA2RjNGMQotOjEwRUIyMDAwRjk1OUQ3RTBFQjEzNzhGRjQ3MTFDMTc1REM1RUE0NjI5OQotOjEwRUIzMDAwQjkzNEJFNjZCRjA2Q0RBNUExNUNGRDdEMTA0RDVDM0YxRQotOjEwRUI0MDAwOTA2NUE5MDZGRTdENTFEMDIzRDFFNEQzNTk3RjdGQjhDQgotOjEwRUI1MDAwMTY2MDlDNENDMDc1NjAzQTM1QzZDOTc2QzEyMUQ3NzQyMQotOjEwRUI2MDAwODRERkNCN0FGODExQTVBRTA0QzYxNUVCRjk2NzU5RTgzNgotOjEwRUI3MDAwODEyMEVDQUIyNkIyN0JBMERFNERBOTdCMDNGQUU3MUMxQgotOjEwRUI4MDAwMEVCRjJGRDFBOTEzQTc1QTA4RUJGQzc4RTc0N0FGQzhFRgotOjEwRUI5MDAwRjlEMUY1MTExMkJFMUJGMkEzRUI3N0NBRUUwRTU4Q0ZENgotOjEwRUJBMDAwQ0VFNzBFMDNCRDBGQjQyRTkxMUY0QkU5MDFFMTQ2RTdGRQotOjEwRUJCMDAwRjUyMUU4MzdGM0JDOEVERTQwN0UwQTc2Qzk3NEI5RDhGOQotOjEwRUJDMDAwMTA0Nzc5ODZDM0YxOUU2MkRGQzdGMDVFRTk0QkQ5MkUwQwotOjEwRUJEMDAwQkM3RjI3QkY3QkRGNTAzQThGQkVFQjI1Q0NBQjREOTM3QwotOjEwRUJFMDAwNDkxNUMwNEZFNDIzN0NFQTU0RDBDRjRFNEJGMENCMkVENgotOjEwRUJGMDAwNUFFRkJCOEE3OEI3QzAzNEJDQ0JCQzQwMkE3MjRFQjE0NgotOjEwRUMwMDAwQjc4M0QyNERDNkY1QjIwRkU0QzlERkFGNUI5MEJDODBDRAotOjEwRUMxMDAwOTYxOTg5MEI5MzQ3RDBGMjgyMzhFMjc3RDBGMTMyMjRFQgotOjEwRUMyMDAwOEJBRjFCODM1MEYzOTMyRkExRjNGQzQ5MUM5RDI3QURBMQotOjEwRUMzMDAwRTdERDkwMTAxQzQxRjlFRDhGMzY2MjA3N0E0RDRCQTg0NQotOjEwRUM0MDAwNUIzNzFEQkU5MzJDRTM3QzhFNTAzQjUxQTE3MkFDRTIyRQotOjEwRUM1MDAwRjJDRjI2REFFOUY3ODY3RUVEOUMwMEYzQzk2QTlFNDY3QwotOjEwRUM2MDAwREVBNUEwM0M1Q0M0RjhFNEU4QzM1RjRFODQ3M0UwRjIyOAotOjEwRUM3MDAwMzc0RTJGOUUzM0U3RjQ5NzM2ODJDMUMzOENFRkREMUNFRAotOjEwRUM4MDAwMUU2RkM2MzM3RkE3MzFERDc2MkJDNERCM0ZFNkZFMEY1OAotOjEwRUM5MDAwRDEzQ0U4MkY1Q0M3RkQ4NTM3RTM5OTFGRjQ2NkExODg1NgotOjEwRUNBMDAwMkYwNUQzRjVGNjZEQTM0MzRCQkEwQzlDMDc2QTI3NDE5OQotOjEwRUNCMDAwQkVGMzY3NkUyRDI5MTlGQTExMUZGMkVENzVEQzZGRkU5OAotOjEwRUNDMDAwOTg5MDZBQTBGM0VCRDY0QzFCOTI0MkRGNEY2RjY1NzBCMQotOjEwRUNEMDAwMzBDRjZGRUM2OEE2OUYxQjRFNTI4MkQ2QzVDRjFBOTREOAotOjEwRUNFMDAwQTAwREU0NzdDMzQ5OUJFMUY5REZBOTFERURENzlENTczRQotOjEwRUNGMDAwRkZDOTg3ODdBNkMzRkNBRTI0RTE1NUQwRkZDQUVCMTIzQgotOjEwRUQwMDAwNThFMDlFRjM2QjBGOUZDNzQwNzA2OTRDNTY4ODQyRTFGNAotOjEwRUQxMDAwRDEyODExREY2MEZEOUVGOUI3MUMxM0JFQjM0NzMzRkI0QQotOjEwRUQyMDAwMjU3RDVBRUNGNTVEQzRENzM3NkQ3NUNEMkY4MUNFMUE5MAotOjEwRUQzMDAwNDM1NkI0RTVBRkZCNDNDNTkwQzFFQ0U3QzY5M0U3OTFGQQotOjEwRUQ0MDAwODAyRUZFRDdBODg0MTExRThEMjdDRkM3RTdEMzU2MUY2QwotOjEwRUQ1MDAwQjMwMUREQzMzODJBN0Q3RTlENDMxQjAyRjFEQTgxRTBEOQotOjEwRUQ2MDAwQkM5QkRCNDE4RDI3OTM4OTNGNTVGRjlDRjE3Nzc0RkM1OQotOjEwRUQ3MDAwMzQ2Q0ZGMkQ4N0RCNkZGNzVCQUE2M0U1NzczNThGNjYxMQotOjEwRUQ4MDAwNzAxOTlEQUVGODIwMUY2ODRDOTA2ODlCNjM3QzU3RjQwNwotOjEwRUQ5MDAwQ0I0ODMxRUU1Rjk4RTdENTUzMTlCRTEyRTY3RDRFMTU4QwotOjEwRURBMDAwRDE2MjdENkYzMTg3QTM5ODZGNEY0QTc4OTEwRkU5QjM5NQotOjEwRURCMDAwQUYxMEVFOTk4OEQ0REQ3REI5RkE3QjI0QjY3MkZDRjVFQwotOjEwRURDMDAwRkMzMDlDMEJFMzdGN0M2MUVDNzMzQjAyQ0Y5Mzk0NjUzQQotOjEwRUREMDAwNjgyRkJGOTA1MkY3MzRDOEI3Nzk5N0QxMEFBNThGMjExMQotOjEwRURFMDAwRjM4MjE2NzYzRUM1M0YyOEJFQTM3MDk2NDk2MEUyNjA2NgotOjEwRURGMDAwNzBCNjYxQkIxOEVGQTMxNzM5M0Y1MjNGMUNGMkQ0QUY3NgotOjEwRUUwMDAwRTJGMkZGQUE2RDRCMzBFRjQ5QzhBOThGMzZDQTI4QTc5NgotOjEwRUUxMDAwM0U0MkRENDJDQjgwODRGNkVCRkMzQTBBNkIyQTU3MTY2MQotOjEwRUUyMDAwNkQ5RkI2MEZENEMxNTU5OUQ0MDY0RDYxQ0Y2Rjg2QjI5MAotOjEwRUUzMDAwQ0Q2QTg4Rjc4QkVGMkQzOENDRUNCNzg1OUQ0NjNENTdEMgotOjEwRUU0MDAwNEYzQTNGMDFGQkUwQTMxNzk5M0NBMEZDNkQwMzc5QkM0RQotOjEwRUU1MDAwRTgyRUUzMzhGNURCMkVGQTAwRTY1NzZGRjJDQjMzQjgzNQotOjEwRUU2MDAwN0UzNkRCNzk5QjQ3RjNGOEZFMjQzMkU5NENGQ0YyNDYxMAotOjEwRUU3MDAwQTJFRDE4OEQ3QUMxMjdDMzNDQ0ExNEUzM0Q1QkEyNENCNgotOjEwRUU4MDAwMkY2MUYwNUZCRUZEODRDREE1MEUzQ0VFMTEyQTQ3MEEyRQotOjEwRUU5MDAwRThCOEM3QTgzRjBFRTUxRjQ3NkJCRjFGNERGMTcwRkNEOAotOjEwRUVBMDAwMjA4M0NCODFEMTc1NEZDMUY3OEUxRjY0RUJGRkI0RTE5NgotOjEwRUVCMDAwRDM0NTcwNEYwQzk5QzNFQzg2MzgzODdDNDA3RjhEOUJDRQotOjEwRUVDMDAwNkIwRkI0RDJGNUFFQTY2MkNBMDFFNzgyRTI5ODNEMjI4QQotOjEwRUVEMDAwRUMzMDU5QkU1Njc2RDFGNkM5RkY1ODk4MENFQjRDN0JGNgotOjEwRUVFMDAwRTgwN0Q1MzA1RUZBNDMwOTFBQzBBREEzNDIxQjBGRjIwMgotOjEwRUVGMDAwQkVBM0Q2RTk4NUYzMkE5QjI5MTk5NkQzRjdFRDc0MUM5NgotOjEwRUYwMDAwRDAyNzgxREY0RURFMDNEQjkxMDVEREVCMkFFMURFMTc0MgotOjEwRUYxMDAwRjdBRURFRTAzMEJBQUU3NjBCQkIyN0EzRkQ3Q0UyNkQyOAotOjEwRUYyMDAwMjVEMUVGMzVFREFBN0QwQ0U2OTUzQjlCRUEwNzA5Q0U4RQotOjEwRUYzMDAwRDE2QkUzRERCQUYxMDlCN0FGMUEzOTRFOEUzRjNCRUEyOAotOjEwRUY0MDAwOEVGM0UwNUNDMjdFMTlDREM3NEYxQkYyRDFBRjFGNERDRgotOjEwRUY1MDAwMTgzRDg5RkM3QkY4MzZEODkxMDI3RUM3QThCRTIyQkEzQwotOjEwRUY2MDAwM0NCNUQxREQ1MkQwNEFEN0I1QjRFNzMxQkM4RkEzNjFFRgotOjEwRUY3MDAwNjUzMDYzMkVFOERCMDcxNUE2NDdGOUZDRDJGRTk4NTVFRAotOjEwRUY4MDAwQTlCQUEyRkE3N0FFRTQ0NjNCNTJEOEM5OTcxM0YxNTMxNwotOjEwRUY5MDAwOENGMUMyMzk5QzBGMkVFN0Y2RjFEQzA0MDZFN0Y5QzRDOAotOjEwRUZBMDAwOUIwQkVGNUQ2MTI3MkUwQjg1RDlEQzY5REQ2NUNCNDBCRQotOjEwRUZCMDAwRUYyRUIxMjY4MzdEMDM2Qjg5ODU3NzUxOUFFRDIwQzFCMQotOjEwRUZDMDAwODc4RDBGMjRGQTIxRUVGQUIxRDQ1NzA4ODMxQ0IxMzI5MQotOjEwRUZEMDAwM0VFQjdCMzYyRUIwMjVBRkZGMzhENjMxQ0NBRjZGMkM1MQotOjEwRUZFMDAwRTQ3NjVEMDFEMUUwRkM0MEUzRUU1MTc4MUUyQzJFOUVDQwotOjEwRUZGMDAwRTI3MTAyQ0EzRjNCRTBGNTc5RDBGRjc0RERENzNDRTMxNAotOjEwRjAwMDAwMDhFMkI5MzA3MTVGOTk5QkY4MTNFOTc3OUE3NjBGRDlDNgotOjEwRjAxMDAwMDI3NjQ2REEwODZERkM3MjNBREVDN0Q2NzAyRUNBMEI0RAotOjEwRjAyMDAwMkFERjI0QUE1QjczQzdBQ0I5NDRBMTdDRDUzODk0REEzMwotOjEwRjAzMDAwNURCNDdFRDE0Mzc3QjM3QTdFNzg5MTg1RDZBRjdERTg5MwotOjEwRjA0MDAwRDE0QjE0NEE5RjhEQTNDM0VGNDNGRDk2ODc5RTY2RjU2RgotOjEwRjA1MDAwMDlFMTQ1MzJBRDZGN0M2ODNGRUIwRjdCRDg5NEIwQjZDOQotOjEwRjA2MDAwM0Y3NEUwMTJGMEZGOEYyNDMzRkI4MTc4QzM1NzAyRkQxOQotOjEwRjA3MDAwMzQzRTNEQ0FEMkExNUJFRkJBMzE0QzNFMUU3MUIwN0UyOAotOjEwRjA4MDAwNDdGMkM4NEY2NzAxQkMzREUxQzI1OUJBN0RCOUVCQzczMQotOjEwRjA5MDAwMDgzQjk2RDk3MTYyOURFMjNEOTIxOTdCRkNCMTYzOTg2MQotOjEwRjBBMDAwMUVCRDY2MUFFQjc3NDEwMjY5NzdCMEYzNzU3RUIwQzc3MwotOjEwRjBCMDAwRjZFRTFBODU3MDQ5MTk5M0MyRTE0NUM3Mjk4RDhFMjM1MgotOjEwRjBDMDAwRTAyOEM2MTNERjVEMEM3QTFERTRCRTk1Q0E3RDlEOUNDOQotOjEwRjBEMDAwMzk5N0UzOEQ3RUE3MERCRjUzQUM4RDg3N0JBQzFBNjc0NAotOjEwRjBFMDAwNjU4RjA3QkM1MTdDMjkxQzVGOEExRDJGNTdEQkNDRTYzRQotOjEwRjBGMDAwNDdDNzREMkU0MTNEMzMxMUUyQ0E3QkJGQTZGREYzQTJBNwotOjEwRjEwMDAwRjMzNkQzQzc4QzMxNEMxRTVERDNDQUNFRjdGNzI1OEZBQgotOjEwRjExMDAwNDAzQUJBMjA4MUQ5OEJBNDk0QzI4RkNBQjM4RDFDNkU5OQotOjEwRjEyMDAwRUJDNjI0MzMzRjMyODI4NzIxMTI4RURGQ0FFMTk3Q0RBRQotOjEwRjEzMDAwRkE5RkU5N0FFN0YwNzk5Q0VERjVFQUYwQTQ0MTdDNjU2NQotOjEwRjE0MDAwRUZDRTIyQzREM0M2MDgxREFDMzM4QzczNjQ4NUU5QkRGMQotOjEwRjE1MDAwNzJDQTc4MzA4Rjk0MTFGOERFNkEwN0IxRTM3M0IyMjU3MgotOjEwRjE2MDAwRjI1RTFFN0RFRjgyNjk3RDEzODExRjk2NzI3Qjk4Rjg5NwotOjEwRjE3MDAwQ0ZDN0JDODYwNjJFMkQ5NkI2ODc2QzEwOTc1RURBQ0Q2QgotOjEwRjE4MDAwRTJFNEE0ODBBRTBGRTg2MzU2NEQyOTVGOUY5QkFGQ0ZBQQotOjEwRjE5MDAwQ0RENjE3MzBEMDI3MzlENDk3M0IzQkIxM0ZERDQ2RTA4MQotOjEwRjFBMDAwMUUxOUFGNzgwMjFGQ0ZDMENGQjFDNjAzQkUxODA4MUYwQgotOjEwRjFCMDAwMUQ2NzFCMUY2MjlFMjY3ODQ2RTA2QzlBOUY4MDI3RjA5MQotOjEwRjFDMDAwMzFCRTU3NkNFNDI3MzFDRjVCQzY0NEUyQjE0NjdFQ0VGOAotOjEwRjFEMDAwRkI5NkRGQUI2MEVGMkRCRDkxRTIxMUVDMUZENTQ4Q0Y2MAotOjEwRjFFMDAwNEI3QkYyMkNGMzhCQTNFRkI1NzdBRkYwODE5QzRGOTA2NAotOjEwRjFGMDAwNTQxNjA3RUZBOUY1ODNGRTZCREE1NTgxNzFBQUE1NEY2NgotOjEwRjIwMDAwM0RGQ0E0OUZCRUJGRjhEMTBEMkU0OEFFRkE0OEU5Q0ExNgotOjEwRjIxMDAwMDAzQkI4NjFGQjJBMTdEQzMzRjdBMUUyNzc4MUZDRkNFNQotOjEwRjIyMDAwMjgyMEM3Q0M1QjdGOUJDQjAxNjE3NzM1NzI3RDczRTQ2RgotOjEwRjIzMDAwQjdCN0NEMDQ3ODdDQjFERDhBRTcwQzlCNzZDNDA1RTNEMwotOjEwRjI0MDAwMzA2RTcyMEREQTYzQjRGRTM2QUJBRkZFMDRGQ0Q4QTZBNgotOjEwRjI1MDAwOUQ0NkZCNjlGMTZGMzY2NEE4NDg0RkZFNjExNkRDMDREOQotOjEwRjI2MDAwMEIwRTgzQ0RCMEM2NkQ1NkRDNEY2OTNDMjQ3QkU5NjczRAotOjEwRjI3MDAwNDgxM0U5QkIxNUU2Njc3RTFGRTY3MTkyRTJCREE5NUIwNAotOjEwRjI4MDAwQkUwQUYyRkJDQ0VENTQ5MkEwM0RENkQ0NzMxQkRBNjlEMgotOjEwRjI5MDAwNEQzRDE3N0UwMDc2NDU5MzI5OUZBMjdFMDAzQkVDQzUyRAotOjEwRjJBMDAwMzFEQzBFRTNGN0E0MEJGODkwNDAzQURBMzdBRDBGRkVFRAotOjEwRjJCMDAwQjJFNDZEM0FBRjYzREJGRUUyOTI4QUY1N0E3MzI1RTIzRgotOjEwRjJDMDAwRTlEM0VFMDU5QjlFNTYwN0Q2QUYxRjgzN0QxMEE3N0YxRgotOjEwRjJEMDAwOEZFMTU3REQyOUIxOERBMTVEQUM2Q0IwMDY1RDEwMUZDQgotOjEwRjJFMDAwNjhEODZDRjU1MjBENEMxQTFFREVGQUMwQUZDMUJGN0M1NwotOjEwRjJGMDAwMkRDRTBCQTlBNjRCMUU3RUZFOTU3MzY5N0RDOTYzRDZFNAotOjEwRjMwMDAwQjQxQTM2N0QyN0VDNzMwQjNDNDFDRTA2RDgyOTAyMkY2OAotOjEwRjMxMDAwOEI3RkZGQkMwREUyOTBGMDFDRUM1RTgxOUYyNThGRjU4QQotOjEwRjMyMDAwREFFMDlDOUYxOThFRDNCQTdCNkQ5ODBGNkJDNjUzRjdBQQotOjEwRjMzMDAwREIzM0MwMDQ2OTdERjA0QjFCRDBGNzQ3QkIyNUJDRjcxRQotOjEwRjM0MDAwREVGQzdFRkRFNkU3NUQ0MDg3MDAyN0YwNDMwNUJFMjIzOAotOjEwRjM1MDAwRjhFQjg3QjdFMENDQTc0QkIxMUZDNjQzNEU4NUJGQzdCQwotOjEwRjM2MDAwMDE0NzY1NDhFNzhGM0MwRDcxOTREN0UzQkMwMDg3RkFFRAotOjEwRjM3MDAwNDdBRTc1QzE3QTNFNTA5NjMxN0FCRjZGNTUwNkRDOTcxRAotOjEwRjM4MDAwNTc2RkY1NjdCOEIxNjRDRkVCRUZCRjFFRTlGMEVBODNDMgotOjEwRjM5MDAwRDc2N0IwN0IyNEI0MkM3NjhGQTYzRjBCRDZGOUIzN0IwRQotOjEwRjNBMDAwMkZDMTc1MkUyMjc1NDg4N0Y1RjdCMUY4QzZFNzBBQTk2RgotOjEwRjNCMDAwN0UyQzA2QkZDQzJENjZGQ0YyQzE5NjM4NDgwRTIyMUY2QgotOjEwRjNDMDAwQzAzRTAyRUM5QkJDMjhFM0I5RkI3RUY3MjI5MUU1NThENgotOjEwRjNEMDAwRkY5Q0M3MTdDNjE1NDdFRUVEQjM4MzdERDdDNDdCMzVCOQotOjEwRjNFMDAwNkQ1QjFEMDIzQzFEQzlEMTg2NDAzQzlGQzJDMUNGRTE2RgotOjEwRjNGMDAwMjZDMUJERUZGMkMxRTk0MzE4OUU4ODBBRkIyMUY4MUUyMQotOjEwRjQwMDAwQjVDN0E3QzE3M0U4MUZCMjZBOEUxMkMzN0JGQzdFMUIwRgotOjEwRjQxMDAwRjY3RDExREZBMEYzOEU4N0ZERjQwRjMyNTg1RTlFNzlFMgotOjEwRjQyMDAwN0QxREM1NDIxRTkwMTBEMUQzRDk0MEZDQkY2RDBERDJCOQotOjEwRjQzMDAwRDc2Nzg3MThGRjM0MDY2QUFCQjEzRDY0MEQwRTgxRjZCRAotOjEwRjQ0MDAwNDBFRjZDMDlFNTQzOUM2MUZGM0M0MjFGREJBQzlDQkY3NQotOjEwRjQ1MDAwOERFRDc0OUU4QUE0ODdFRjZFMDlFRkQzMTRGNEIyRThBMQotOjEwRjQ2MDAwQUUzOEMzN0U3RDk0N0U4Q0Y3NDUwOTdFMTU3RUQ2RDU1OQotOjEwRjQ3MDAwNUMxRTk4RDc2RDk2MEY5NzE2OUJGRThFQzJCREU5QTdBRQotOjEwRjQ4MDAwMTVGRjZFQjAwNjFFRjgzNUYwMzNFNTVGQkYwQUZDNkM2MQotOjEwRjQ5MDAwQzVGOEMwRDFERjNERjdDQTE1OTRFRThGNzYwQjNFMzYyNgotOjEwRjRBMDAwQ0E1QjMzMUZENzNGNUU0NjYyRjFGMTUxQTc5N0M0RTRCMAotOjEwRjRCMDAwNjNGQTNDMjYxRjNCRDlCOUU5RkY1N0YyRjZFQTAxRTRBQgotOjEwRjRDMDAwQURCRkQ4Mjg2RjNGMjdDNTQ5RTcxMUQwMzM0QkYwQkVGOQotOjEwRjREMDAwNTczMzdDODVERjZCOTZBMzk5QzU2QTRDMzk0QTdGMEVGQQotOjEwRjRFMDAwMTExRDNDMDUxQzA1N0QyRTdFNjgyOTdFMjc0MkM3ODJBMgotOjEwRjRGMDAwNEUwNTFENDdFOEQ0QkM2RTIzM0NDREVENTUzMDc3NURGRAotOjEwRjUwMDAwRkU4Mzc1MjVGNTYzQzBDRTdENTYwRTZDQTE1MzNCNEUzMAotOjEwRjUxMDAwRTc3MjJCODVGRkYxREZFNTYxQkVEMTJBRUUwNzFDNzc4QwotOjEwRjUyMDAwRjdCOTIwN0Y2QzE1RjczQkZBMjAyRTk5MTQ3RERFRTdBMgotOjEwRjUzMDAwNjBGNkQyNzE1RjlGMkI1OTY3MzdCREJENEI3NjgxOURCOQotOjEwRjU0MDAwMTcwRTkwRUE1OEYxMjQyQUIxNzExRTYxMzI1MDNCREI0QwotOjEwRjU1MDAwMTczQkNFRTNBMUM3NzlCQzczQkFFQ0NDNkQ4NjM4NzA4QgotOjEwRjU2MDAwMTdCQkQ3N0ZFMThBQ0I1Q0IwMkY3MDdDRDc4ODNCODBGQwotOjEwRjU3MDAwRkY3RUY2Njc5OURERUJFOUQ3MTRDODkzNThDMDQwNDA4OQotOjEwRjU4MDAwM0UyNEZFQkJBN0QwNzUyRUQ4QjUwNEYzMUJDQzcxOTRENgotOjEwRjU5MDAwNDVDRTZEQjhCRkYwMzlCOTE5NEI3M0ZDNjQzMUM0NTkwRAotOjEwRjVBMDAwODBERUVGMzUzRERGNzUxMUQyRDc2MjEzN0RENTAxN0Q0OQotOjEwRjVCMDAwNjVGNUE3QUYxNzA0QkY4RTI3RTNGNUU3Q0Y5NjczQjlCQwotOjEwRjVDMDAwMzc1RDJFQkUwM0VDOTlFM0Q0Q0ZDNzVDMDJCOUY4MDBENwotOjEwRjVEMDAwRThERENGQzFFRjA3QzZGMEE3MjNERDJFQTlGQkQwQzYxQgotOjEwRjVFMDAwRUY3MTQ2N0ExNzc0NjhGNkY3Q0RFNUIxMjdGRTNFRTk2QwotOjEwRjVGMDAwMjZEQUE1RTFDOTM3NEFFRUExRTVCMTI3NUYyQjdDMDZFMwotOjEwRjYwMDAwRUE0RkJEOUFGQjA2RTlERjdGREFFRUFGRDBCRjM5QkUyNQotOjEwRjYxMDAwM0IwRUU3NzM3Q0Y3OUY3MjZGODJGQUQzNzE5ODg3NzUwMAotOjEwRjYyMDAwN0M2NTFDRTY0NUY5NzcyNzA2RTAzQ0RGRjExQzE2Qjc0MAotOjEwRjYzMDAwNkI3REY2Q0IxMkNDQkYyMDZEODhDNzkzQzUzNjY2OEYyNQotOjEwRjY0MDAwRUNGQTlGQjcyMDdGRkFEMzVENzEyQUM0Mjk5QTc2MjdGNgotOjEwRjY1MDAwQTBERkRFRjRCNDAzRjM1RThFM0ZGQkU1MjQ3RDlDRTk3RQotOjEwRjY2MDAwM0Y1RDRGQTM4REM1MzM4RjI3OTIzOThGMDMzRDI3MzNERAotOjEwRjY3MDAwRkZBRUU5OTlDOTVCMjE1RjZFNjk0RkFGMERGNjA3QTYzMgotOjEwRjY4MDAwRkRGMTVGMjUyMDk3OEUzRkNFRUMwRkVBQ0ZERjBGMzdERAotOjEwRjY5MDAwMURDQTYzOUJFRUI2NTI3ODdGMEMzNjIyRjVDMzM3OERCOAotOjEwRjZBMDAwRURCRTE0RkNGMEZFNzA2MTcwMzg0RUUxMDBFQkEyNzAwQwotOjEwRjZCMDAwQTkwNzc5M0ExMDNDODY4RUI1MjFGRDdGRkZFMEYxMDk1QwotOjEwRjZDMDAwRkExNzBEQkJDRTQxM0U4QUMyNDVEMkQ4RjNDNDgwNUQ0NQotOjEwRjZEMDAwQzJGNUIzRTdCQkJGMkMwMTdCRUE2OEY3MEFCNDBCNEU1NwotOjEwRjZFMDAwQjVFRUM5NjNCRkFGNzRGMDZERDcyRDA1NEY2N0RENzNGRAotOjEwRjZGMDAwQkVCN0Y4NjZGNEZGMTZENzU3NjYzRUU4NEZFNzRGREQxMgotOjEwRjcwMDAwODBGNTQ3MTJCRDM4REZEM0U0RkZFNkZGREZGMEZFQjgzNwotOjEwRjcxMDAwODRGQkYyQTdDMkZCMkZGRkQ3RTJGRENGMUNFRjg5NkU1RgotOjEwRjcyMDAwQzgyRjNCRkVFQ0JGNzI4OTZFRkRBNzVBRjc5M0ZGNEJDMwotOjEwRjczMDAwRDcxREIxOEY2NDlGMURBRUI4RUYyNEMxMTA5QzVGNUZEMQotOjEwRjc0MDAwMzU4MDlERjJFRTU4NDlFNEVGQTAxRjIyRjI3N0U0QjQzMQotOjEwRjc1MDAwQzU2ODY3Qzg2OTFENjgzN0FDMjJFQzFFNjRCRjZBRTFFMgotOjEwRjc2MDAwRjdCMUIxQkNFRkY2NkM2RjAwRTNBMjhBQUY3RTMzQURBOAotOjEwRjc3MDAwNUI4NzM3NzgzQjcwMDRBMzdGMjY2N0Q0NTQ0MzlDQTVFRQotOjEwRjc4MDAwNzUwNTlEMTcxREE3MzVEREUyNkU1NUUxOUE3NjRCMzA2NAotOjEwRjc5MDAwQUUwNENCQjdBMTVDOURGMUMzRkRGMDVEQzU2OUJDQUYwNAotOjEwRjdBMDAwRDY2OUYyMzdFMjBCNkNDNkJDNjJCMkM3MERGQkQ1MEU1MAotOjEwRjdCMDAwQUYwMjc3Qjk1MzUzRDY3OEJGNkRFRjU4QjZBRjFENEYzMAotOjEwRjdDMDAwMDI5OEI3NzlBNjcwNEEyRDE5MUM0RTY2RjgwOEI4RjU0QwotOjEwRjdEMDAwODMxM0Y3NDdDNTdERkM0QTVBNDcwOEY4NTAyMUQ0OUY0OAotOjEwRjdFMDAwNjRFQjQxM0YxNEZFOEUxNEVDRDc1ODkzMTY3OTNCRDg0NgotOjEwRjdGMDAwN0U4QTFBQjlDNzFGRjIyMEI4QkYxOUI5Njc1NkI1QTBEQgotOjEwRjgwMDAwNUYyQUUwQUMxQjBGRDc2Rjg2RjM5OUMyNTdFMEM1NDE2MgotOjEwRjgxMDAwNjYyMTlFMUREOTRFNkY4MENFN0Y5NUNBRTBCRThBQzJGQQotOjEwRjgyMDAwMURFRTE3MTdGMDE1NzAzM0UzRTE3REEwNTE5RDFEMUZFQwotOjEwRjgzMDAwMkQ4REY5M0FGRTRBRTI4MTdEOTZFOUYyOTRCMDFGRUNGMwotOjEwRjg0MDAwRTVGMjA0QjQ5NzhGNDkyNDI4NTFGRkVENTg0NTQ2MjUyOQotOjEwRjg1MDAwRjgxNUM3NzI2QzBBOTQ1M0ZCRTg5QTc0RjNCREUwQTRFMAotOjEwRjg2MDAwM0RGMjM3RjRBMDVFNDE5MjBERjU2MzM5ODVGOEZFMzQyMAotOjEwRjg3MDAwN0I5NkUxQkQwMzkwQjc0REZERjY2MzU5RTU3NkRDMEY0RAotOjEwRjg4MDAwNzVFNzE5REU5Qjk5RTBEQTAyRUQwNzIwOEYxQkJGM0Y3OQotOjEwRjg5MDAwMDNGRDlCMUY2NDE2MTlDNjk5RjlDRUIxN0JBRkEyRTU5MwotOjEwRjhBMDAwNEVFRTU3Rjc0REI1NjIzQ0ZFRDg5RkU3NTUwMjFDMkYzMAotOjEwRjhCMDAwNTRDNzFCRkExRjI0RUU3NDIwMkFCQUJFMkE1OERGNDUwQgotOjEwRjhDMDAwOUVDOTg2RUYzNkJDQkRBNzEwRTIxMDNGRjI1NjE4OUVDNwotOjEwRjhEMDAwNUY1QzdFQTE2MTFDOUYzRDFDMDRGMkFFRDU2QTBEQ0YxQQotOjEwRjhFMDAwMUI5QUJGMjA0QTJBMjFFNzM1N0Y0RDk0ODlENDdDMEY4QgotOjEwRjhGMDAwNzYxQkM2OTlCODdGQTdBMUJGMzdFNDlFMDYyNkUzODQ4RQotOjEwRjkwMDAwQzNERUU3QTAxNEY5RUNCNjU0QkJERjQyQ0JCMTZGNTdBRQotOjEwRjkxMDAwQ0FCMEVGNTlGNjVFNUQyQjg0QTFDRjNCNDYzQzQwMDc1MQotOjEwRjkyMDAwRTc5MDc4REMwRjFDMjhFRkZENEI0QkEwMEVENkY5MEJBRgotOjEwRjkzMDAwMzlFMDgxMzI3RUQ4QTIxMjU4RDc0Nzk5OUQzMjZDNEI1QwotOjEwRjk0MDAwREYyM0Q1NUQ1RTAyNzZENjY3ODE1NkE4NUZGMDc1Qjc3NgotOjEwRjk1MDAwMENGRTY0RUIwRTE5Q0ZENzREOTc2QjEyRkUwQUYyQjg2RQotOjEwRjk2MDAwNUJDMjFDRkYwNkE3MDVFM0YwNDc1M0JBNEJBRUQ1RDFFNwotOjEwRjk3MDAwOURDOERCMzFGMzcxRDFDNDhBMjUzMDdFNUJBNkQ2RDUxNAotOjEwRjk4MDAwMEJGMkI0RjJFRjU3Q0EzMUNFQkIxMkI3RjE1RUJBQTI5NgotOjEwRjk5MDAwODlCRURCNjE5RjVFRTQyNUM1NEY5MzU5NzJGQjBGQUNCNgotOjEwRjlBMDAwMTgyRkI5RDVFMjc1NzBBMTgwN0FENzNEQzNCQTE5Rjg3RQotOjEwRjlCMDAwREQzQThFQzk4REY4QkYxMDE1RTI0MUYxQTk3NTMyOUM3MAotOjEwRjlDMDAwQjMyMzc3NDg5OEQ3MjJCRUI3QTA5Q0U1REJERjVFMjI0MQotOjEwRjlEMDAwRUUzNzcxQTdGRjY0MkNCQzlGQzhGMjA1MjA5NjA2RUY5NgotOjEwRjlFMDAwRDU1OEQwNEU3MTFERjZFRTgzRkJDOEVFRjQxQzcyODMyMQotOjEwRjlGMDAwNzhFOEE5NzlDNzBGRkIyMjNEODc0MzUzMjU4QTk3MjFEMQotOjEwRkEwMDAwOUQxNTI3MEE1ODdGMDJGMUNEMUU0RjU1QzI1OEQ0NkY1RAotOjEwRkExMDAwRTU5ODg3QjM5Q0U3Q0ZGNDRFRkQ4RDA3RjRDN0YyQTJCQgotOjEwRkEyMDAwRDE0MzA2Q0IyRjc3OUQ5NDg4QUFDQjMzQjA4RTUzNzFFOAotOjEwRkEzMDAwNUUyRTI1OENFN0M1NUMyNzE1NkMyN0UxRjFDQzFGRTQxMQotOjEwRkE0MDAwRTNCQkU2QTlBRjVFMEJGM0Q4NkZDNTdDNjdBMjY4NEIzQQotOjEwRkE1MDAwNjAxRDFEQTNERjU0M0I3MDFEODRGRjVEOTEzMEZFRERGMgotOjEwRkE2MDAwM0NDODRGQzIwQkQxOTQ3MEU2NEY2MjlDQzMzQkIyQTMxQgotOjEwRkE3MDAwMkMxOUZDRjJENDBBMkY5RTFCNEM3RDU4OEU5QzlCMDVBMgotOjEwRkE4MDAwMzhEQzBFRkZDMzczQjU5N0JFNUE0NUM3REQwMUIyOTI4RAotOjEwRkE5MDAwQjUwNzA5QTVFRjBFOUI2OEE3QTJDNkMzRUYzREM0RjY0NAotOjEwRkFBMDAwNEIyRjgzMTg0M0JDNkNFQzNGMkUzRkQyNUZCMzY3NDZBRAotOjEwRkFCMDAwQzdGRjQzQzlBNUFGQjZDNTg0NjcxQ0VBRUI4RTE5NTZDQwotOjEwRkFDMDAwQ0M5RjM4MzU1QzEzNEUwMTU3MTc4M0VCRDc1NDJCNjQwQQotOjEwRkFEMDAwNDRFMzhCRUY0OTZBMkVEMERCOUQ3MDVDODBGQUQxQkY4NgotOjEwRkFFMDAwNENBRTBCOTZBNEMzRkM4MzYzRTFGOTdDOTczNjY0MkE4MQotOjEwRkFGMDAwQTVCRjFFOUI5NjdCMjNDNjQ5MUM5OEZGNTVGQkYzQTMwRAotOjEwRkIwMDAwMUJFMUM4OTg2QkU2MTE0RjFCRDA4REEyMjU0QzgwMzhBNQotOjEwRkIxMDAwOTVGQjBCOTQwQjIyQ0YyRDBBNDc0QUNGRjQ5QkI3NUI4MgotOjEwRkIyMDAwQTI3NTkwMTNBRTI4NUMzNUI4MkJCODQzMDc2NzNCQUQ4MAotOjEwRkIzMDAwRDc3MkI4RkVDRjIzRjU5N0I1MDE3RTE3REE5MTJFQUVCNgotOjEwRkI0MDAwRTUzQ0Q1OTY0Q0JBMjBDRkVFODRGQjgxNEI4MTFFNEUwRQotOjEwRkI1MDAwRUNCMDYyMzI2QjBGMzQ4MjFFRjVEOEQ5REZGNTQ5MEI1OQotOjEwRkI2MDAwNjdDMkRGNzExOTdCRDA4MkYxQkQzNzI5N0Q2ODQwMUZFNAotOjEwRkI3MDAwQzFGMTA4NzczMURFODkyOUFGQTZDMEY5ODkxMzY5NEEzNgotOjEwRkI4MDAwMEFDMDY3NzFEODg2NzBGQjg5NDI4MjcwN0Y2QTRGREEzQgotOjEwRkI5MDAwQzI2OTE1QzgxRjJBQjY3N0YzNzEyNjRGRDRGRTUxODI2OQotOjEwRkJBMDAwN0E5RDlGRkZENUNFOTVFMUJFRDQ4MUYwNjVERUNGODdFQgotOjEwRkJCMDAwRjhGMEI5MjkwM0QzNDE1Qjg1MURFRjFGNkEyQTVGNTExNQotOjEwRkJDMDAwMEM3QTYyNzk3MjIxRTY2MzM1NTU0OUE4ODc5QjlBM0Y4MgotOjEwRkJEMDAwNDNCODhCRjE5NTkzMzI1MTc1Nzk1MzNEMTA0RDRDRDcwNQotOjEwRkJFMDAwREQyMzdGRDI4NkVEMERDRDI3NTA5RUQzRTlFNDAxREZFMgotOjEwRkJGMDAwMUNFM0ZCOUQ1RDU2RjJEMzVBNUEzNkZDNUJGRTY5QURBMQotOjEwRkMwMDAwMTNGNzJEREI0MTlGMzQ5MDNEQjZFNTNBNzk0OEJBM0Y3MgotOjEwRkMxMDAwODlDOEZGNzExNDc3NzdENkJDMTgwRjcyQjY1NjcyNUYxOQotOjEwRkMyMDAwMDI5NzBFQ0NFQURFN0IxOUVDRTdENzNBREM5N0MwRkVGMAotOjEwRkMzMDAwN0Y4RUY3MTE1NkNGNzE1RjAyRkJGRDYzMUY0RDlBMDM1NAotOjEwRkM0MDAwRkJGQkI1NTlFRTBERjA5NzQxQUZGMDE2Q0RDMUY2M0M3OAotOjEwRkM1MDAwRjdDQjUwOUYzMTZFMDZBQjI3MzIzQTQ4NzkzNDdGOEUwRQotOjEwRkM2MDAwMUZGNUI5MTNFMUYyNjk3QjQyNjBCMDdCNDhBRTZFN0U0RQotOjEwRkM3MDAwQzYwMDk3N0VFREIyODQ3OTUxOThCODQxRTlFNzlGNkI1MQotOjEwRkM4MDAwODZCMTdCNzEwQjQyOThBNzM1NzIxQzhCQUY2N0E0QjAwRAotOjEwRkM5MDAwM0ZDOTJCRjI3N0QzNDYxMDBERjY1N0QzOUU3MkIwN0IzNwotOjEwRkNBMDAwNUJERjBCRTUwMkZDQUU3RUNBMTE4NEI4RTREMkZCOUU5QQotOjEwRkNCMDAwQjM4MTNFOUEyRkFCODVDMDU3QjNDQkVBQzY4QzJCODM1QQotOjEwRkNDMDAwRjg0OTA4RUI1NzM3RUZDNjc5NzU0QzcwRjNGQjcyRkJCOAotOjEwRkNEMDAwOEEyMTdFNTVDRkYzOUVFQjRERjlCRjhCOUQ3QjMxMUU2NAotOjEwRkNFMDAwQjc3ODlCMzFFRUI2ODQ4NERGMDIzRTZERjhEREUwNzlCMwotOjEwRkNGMDAwQkZFRjU4RDgzQzE0MEU4RkY5NzJFODRBMUI5QkQ3RjkxNgotOjEwRkQwMDAwRTNFOEY3OTdBNkY0NjJERUIxRTIwRTY1RDQyMTdDMUIyRQotOjEwRkQxMDAwM0NFOEFGNjRDNkUzQjk5QTVCODdCRTVFMTJFQkJFOTg1RgotOjEwRkQyMDAwRUUxNkFBRkYyOUNCM0RERUIyMTM0QkU3Nzg4MkVCMTkyMgotOjEwRkQzMDAwQTI4NDZENUUzQTRFMjM5N0NCOTM0MkVGRDhGNEY5ODNCOQotOjEwRkQ0MDAwNzMzOTVDOTM3NkIyRkQ2RjczNUVFQzVDRDA1NzAwMTcyRAotOjEwRkQ1MDAwQkVDRkJDNzRENjBCNTMwMDJGMDI5RjE3MjQ5MDZFQ0NERAotOjEwRkQ2MDAwNUY0RDIxNUU4RTE3MkZFMDQ1QzAzRkJBREY0Q0RGQ0JFMQotOjEwRkQ3MDAwOEI0NTE3MDJGRTg0RTVEQkM1MzM3OUQxRjc4NDAzRURBQgotOjEwRkQ4MDAwMkJGM0ZDQUZFM0ZBNTdBQ0EzOURENzA3OUE3RjNCRDc4MQotOjEwRkQ5MDAwQjc2NzdCRkVFRDVDQUU5QkQ3MjFGODU4M0MxNzdDNkNCNwotOjEwRkRBMDAwNUVCNzk4Rjc5OUQzNTlDODc2M0E3NDI2RTQ0QzIzQTlEQwotOjEwRkRCMDAwRjM2MDVDOTZDQjE1MDE2NzMxNEYwMUFGOUUwMUYyNUQ5OAotOjEwRkRDMDAwOTVFNjNGMThENkEzODQyQUYxQjBGQzc2NTBBNDIwQzc0QwotOjEwRkREMDAwQkEyRkM0OTQyQkE1NzkxN0Y2M0JEM0Y1MDg3OTNCRDBGRAotOjEwRkRFMDAwQkE4NDlDMzVBRjRGQzg1QkIxNEUyMTc3QzU3QUE3NTIxNAotOjEwRkRGMDAwNDE4MkYyMTBFRTdFOTBDMDdGQTgzM0Q4QzMxNTcwNjJBNgotOjEwRkUwMDAwNDFCRjBGNjRGRkI5QTEzRUREN0RBM0ExRkYwRjMyNTdCMwotOjEwRkUxMDAwMThEQTJGNTRENzE4REEyRkYyQUMzM0Q0N0ZFNEZEOTVEQgotOjEwRkUyMDAwQzlBRURGNkM2OEFGRDUxRTM0QjQ0RjA5ODdBNjgxREQzQgotOjEwRkUzMDAwRkRCNzk2NkFDQ0U3M0VGRkMzQkVFN0EwMUU2QzcxNjNCOAotOjEwRkU0MDAwN0Q0RjRCMjY5NjdCNUI1NEU0RUY3RDJEMUUyQ0Y3Qjc0MAotOjEwRkU1MDAwNzhGMUY5N0ZCNTk0NjNGOTQyOEI4NjY1QThDNTg3QTVDQgotOjEwRkU2MDAwNTkyRUNDRkNGRDY1MEFEOEVERTVBMTJFRjQwN0M2OEYwRQotOjEwRkU3MDAwQUZGQjBDRTRFMTAxNEJBMDM1OTFDMkU5OUMzNzk5N0RDMQotOjEwRkU4MDAwNEUwMjY2N0RGQ0U1NUIzNzgxNUU3N0IzN0JFOERBN0EwQwotOjEwRkU5MDAwMjc0QjZBMEM3QkNFNDVGNTlEQTZBMzE3NTc0RDk4QzBGRQotOjEwRkVBMDAwRkVCMjhCQzRDRUJCRkM2QTFDQ0JGN0MxN0MzRDRBOUIyNwotOjEwRkVCMDAwNzNFQ0VDNUVEQjM5NzMyNENDNEY5QzQzRDg3OTA1NUE0NAotOjEwRkVDMDAwMDZFQjY4RkI0Qzg1Rjg0MUZGRDczQTE1REM4RjIyRkMyNgotOjEwRkVEMDAwRkNGMDI1NkM5QTcwQkZCQTNGMEVGNDc3NUEyQTlFNTdGMQotOjEwRkVFMDAwOUEwRDBGRTk3QzY1NERDNkJDRDY0QkNBRkY4MkY5ODBERQotOjEwRkVGMDAwNTczOEQ5REZDREJBN0NGRkNBN0ZERTQ0REI0OTlCQkZEMAotOjEwRkYwMDAwOEM5RDg3MTBGNzg2QkM2RTM5MTNCQkUxMkIzODYzMDBEQwotOjEwRkYxMDAwNzlBMDkyOTdGREREOTQ2NEM1QUJGNzA3NDRGOUQ3NzFEQQotOjEwRkYyMDAwQ0MxRjk4RDlDQUNGMEIxQzI0NjhDNzA5N0VBNEVCNkJFMQotOjEwRkYzMDAwODdGOTBCQkVBODc1MkJDMTUxMkVEMEY3RUJBNjQxRkY1OAotOjEwRkY0MDAwRkYwQjI3MDQyMEUwMDA4MDAwMDAwMDAwMUY4QjA4MDA0QQotOjEwRkY1MDAwMDAwMDAwMDAwMDBCQjU1QTBCNzQxNDY1OTZCRUQ1RDU5MQotOjEwRkY2MDAwQUY5MDRFRTg4NDAwNDExRTc2ODg2MDIwQUY0RTI3MUQ3QQotOjEwRkY3MDAwQzI2QjI4MTJDMDE3NjJBM0IyMDM4QTUyQTAxODlFNDkwRQotOjEwRkY4MDAwMENDQzhBQTM3QkJBQjExOTA0RDZCMzlCMTkzREFFQUU5MwotOjEwRkY5MDAwRTg2OTcwNTA3NkQ2NzM4ODkwQjgxOTREOTgwNjk1Qzc2MQotOjEwRkZBMDAwQUNBMzUxNDE0MUIzRDgyMEYyNTgxMzNBMTIxNDcwMzgxRgotOjEwRkZCMDAwODdCREY3RkU1NTc0NTcyNzAxRjRBQ0M5QzlCOUY5QUIzMQotOjEwRkZDMDAwRkVGQUZGRkZCRUVGRkRBQTk2MUQ3MEI5ODMwMDUwNUREQgotOjEwRkZEMDAwQjYzQTBGMEE5MDRFOTE4RURBOTAyRTVCRjUwMzk4RkI5RAotOjEwRkZFMDAwRTE3OEQ1MzkzMDE3MDM0Qzk1REYwOEE2OTYwMDlDM0Q4MwotOjEwRkZGMDAwMDQ2RTFCQ0UxRkQzQUU5RURBRTFDMjdGMkU1RDk2NjBFQgotOjAyMDAwMDAyMTAwMEVDCi06MTAwMDAwMDAwMEMwNEEzQkZFOEZFM0IyQ0VCQThBQkVGODZGNTFCODQ5Ci06MTAwMDEwMDAxRUNDNzQwRDdGMkVFMzVGRjFCRTI2MzBFN0M0QzZFMzJECi06MTAwMDIwMDAyRUQ0QkY0QkYzNzZGQTU1MzA1QjAwOUFGREIzOTk4NjE4Ci06MTAwMDMwMDBGRDhCQzAzQzAyNjBCN0JGODZDN0VGRjk1N0YxNzg4RkUwCi06MTAwMDQwMDAzRkMwNzQ5RjdGMUREM0JGRkFFQkY4RkUwN0ZFMTc3ODAxCi06MTAwMDUwMDBGQ0ExM0ZDNEI0RDVCRjk1QUYzN0I4OUQwMEZEMDFDRTFDCi06MTAwMDYwMDBCNTU2MEM1NEYzRjA2ODM0RjZFMjg2RjZDOTk5QkUxNDFFCi06MTAwMDcwMDBBNDY2NDE2N0QzODEzQzQ4RUQ2MEM5Qzg0MDNBNUI2MkUxCi06MTAwMDgwMDA3OUUwRjUwMEE0MzMwREFCNzg3RjU5RTYzQjJDMEZGQ0VCCi06MTAwMDkwMDBGMUQ5OTFERjU5QTBGRDY0RjQzMzQzMjlDMEJEMjBGOEE0Ci06MTAwMEEwMDA5RjU1RjZERjE3QTU1NDFBQTgzOTEyQ0FFQkJFQ0MzRUVECi06MTAwMEIwMDBCMDQxMDJCODFGMDJGOUYzOTFDRUFFQUNCMzhDOTdFODExCi06MTAwMEMwMDBGRTE0RTcwOTk0ODcxNEY4QzI3NDM5MTc2NTQyM0Y5MzA4Ci06MTAwMEQwMDBCQTUzM0MyODlDRDBFNTI2MDMyQzcxQUNCMUMyNzAwMDA5Ci06MTAwMEUwMDA5NEQyQjEwOENBRDcwNDEyNUNDRTAyNTgwQzYxMkJEMDRFCi06MTAwMEYwMDBGRDNGNUE4RTQ1RTJFNEJDMTQyMDBCQjJGMUZDNkY1ODcwCi06MTAwMTAwMDA3OEJFN0UxREU4RjlCODc1RTUwQTE5Q0FEMjQ5NkUyRTg3Ci06MTAwMTEwMDA5NkRCNzI4OEYwN0EzNkY5NTE3NzhEODNGNkFCQjNEMkRECi06MTAwMTIwMDAzQTg5RkIyRTcxQkM2N0M1NDEwRkZCQjZGMkYzRDdEQUYzCi06MTAwMTMwMDA1N0Q3NTMxNUMwN0M5QUJGMjY1M0E5REI4NUVCMkVFRjBBCi06MTAwMTQwMDBEM0Y2QTA2Q0VBNDExRTRFNzNFNzk1RjU1MDBFRkYzMkQwCi06MTAwMTUwMDA0QUU4NTU0RTk5NjI1NzFENjRBNzBFMzBBMTFFQTMyMThGCi06MTAwMTYwMDAzOTY0QzM3NTE2NjVENUE1RDJCQTY4OThBOTgwRDcxNzIyCi06MTAwMTcwMDBCN0M4QUMwRjMwMkJFNjQxQThCNzRBNEQ2RkVEMTBGRTYzCi06MTAwMTgwMDA4Q0Y0NTIzOUExNzIzQUEwRkUxNjZEMzRGMkIzQzQ3MUU4Ci06MTAwMTkwMDA5Q0U1RkUzRDM0RjdDODZGMTUzQ0YzOUQ5Q0RBOURERjZFCi06MTAwMUEwMDBBQTA5Qjc5Q0E0RjVBQTM0QjlGMTc1M0NEN0FBMzY2OTU3Ci06MTAwMUIwMDBEQjdCNzFGMzU2Qjg1MzMyNEUyNDkzNjNDMTE4OTIwQjE0Ci06MTAwMUMwMDBGMkUxMEU5M0JGMUQ5MEQ5REY3QUIzOEYzMzdFNjA3QjRGCi06MTAwMUQwMDAzRkVGODc2REVGQTFGRDlGQjk4NDE3NkUwMDc4RDIzRDg4Ci06MTAwMUUwMDBFRDg1QzA4NDVGNEU2RkZEOEE3REVCRERFNDRGNjgyN0FGCi06MTAwMUYwMDBFNDQ3QkExRUQ3QTIwRDAxOUU3QjZEQjkzRDE0NDA3OTJDCi06MTAwMjAwMDA0NkJENEUzM0VEMUY5NTQyQzE1NEQyQ0I0NTcwQUY0NjJCCi06MTAwMjEwMDA3OTRGNkVERTdCODhGQzY0QjJERDExMjZCOTIxMTNFREM3Ci06MTAwMjIwMDBGMTdBOURENDJFMkU0RjNDMUUwQUE2RTBGQ0YxNkQwMTAyCi06MTAwMjMwMDA5OURDNzZFQzAxMzVFOEMwRjE5ODBGMTRENDM0QzY5OUY2Ci06MTAwMjQwMDBGNzdDMzJFOTdEQkJCRjg5RTU1MEVGQUY2NzFBRjM5RkJBCi06MTAwMjUwMDA5QkQ4Q0Y2MDEwNUVDQkJFN0UzRjgzODdFRDI2OEE2QjM2Ci06MTAwMjYwMDAyQkI0MzMwNUQzQTBDRTg0MDFBQkNCMzE0RDRFNDEzRUYwCi06MTAwMjcwMDBCQUMyRTBBNkVCNDUwNzVDNDEzQTU3NzE5QjIyQTdFMjYwCi06MTAwMjgwMDBCOUJDQzdENTIwOUQ3QjJEQUE0MUIxNTE5QzBDQzg3RDFFCi06MTAwMjkwMDBGMUJBQ0QwQzYxMUJDNjExNUJBNjA5OTQzOEI5OEUzRDJECi06MTAwMkEwMDAxNzBBNTIxQ0Q0RTM1QTczOTJCMEU3NDk5N0VBNjU4QTU5Ci06MTAwMkIwMDA1QjRFQUJCQTc1MTNDQTEzREU0RTcyNkY3MTc1M0ZGN0EyCi06MTAwMkMwMDAzQjZFMTNDQkZERUI3NERGM0I2RUE0RTA3MDhERjRFNTY5Ci06MTAwMkQwMDA5M0ZEQjRCRkY2MTJEOTRGNDNCMkRCODZDRjI1QzY2OTcyCi06MTAwMkUwMDAzRDJFRUFFQkU4NzJEM0U1NThFREVDRTJCOEJGNkM1NTcxCi06MTAwMkYwMDAxN0M3QkRDNDdEQUI0REEwRDZBM0RDM0QxNUFFRTI1QUY5Ci06MTAwMzAwMDA1Q0E3N0QzNUNDOUI4OUUzM0EwQkQyQkNFRUYzM0ZGMTgxCi06MTAwMzEwMDA5NDdGNDhGNjMyNTU5RUQwQUFEMEI5OUNBNkFCREE3NTI4Ci06MTAwMzIwMDBGNUFBRUY3OEZGNUVFRjZCRkI1N0I3Nzg5RDBCMUNCMTFBCi06MTAwMzMwMDBFQjhFMjI0OUM0NzkzMDNCNEZEODYzRkFCQzVFQkQ0Rjg3Ci06MTAwMzQwMDBFQzlDNkRDODVCOTMyRUE4ODZCQzM1MTkyMzZERkNGRDEzCi06MTAwMzUwMDAwQUZCQTM4NkYxNTRFN0UzODZGOUI3NjRBRTM2RENCRjQ3Ci06MTAwMzYwMDBDREI1REU3MEZGOEU5Q0RGMUJDNjc3QkE1RjM0Q0NCRjg1Ci06MTAwMzcwMDBBQjZDOTNFMUZFNENFNTNGMENGNzY3QzhBMDQ4RTg3MzBGCi06MTAwMzgwMDBGOTUyQzg0MjdFMzYwN0VBOTlDRTg1NTZBNjBGNDIyNzEzCi06MTAwMzkwMDA1MzE1MkQ4OUU4MDI3MDMzN0QxODdDNEM5NzdCNTRCOTM2Ci06MTAwM0EwMDAwOEVEMjY2QUU5MUM0MDdFREZGMUQ2REZGM0M4MkUzQTVECi06MTAwM0IwMDA3RTM1REU5OUU1OEFFNTY1M0Q0RkZGRDQ3Q0RDQzc4QTUyCi06MTAwM0MwMDA3QUVBQzExRTA2MTQwOUJCRDVFMzdEQUZGQTQ5ODhGNzY2Ci06MTAwM0QwMDBEMTIyOEMyNzc4Q0U2ODYzMzJDNzk5Njg0QTlGOTAyNENGCi06MTAwM0UwMDBDNUUyMDk1QUE0ODlGMkIxRUVCNzdBN0MyOTlFRUJGRUU4Ci06MTAwM0YwMDA2ODA1RjlEMTA3MzI4QzcwNzU4RjM3NTNDRDU4MUE3ODRDCi06MTAwNDAwMDBFOEJBM0JFNzgxRkNEOEZFNDExMzJDMjIzQkRCOEFGNDlGCi06MTAwNDEwMDA0REU0QTNFRkRDODhEOTE1Qzc0RjAxRjE4MUY2MzY3OTk5Ci06MTAwNDIwMDBDRTE0ODhFMEY1MTk0RTUwNDIzODdGODYxRDMyMkU1MDhBCi06MTAwNDMwMDAyQ0JDRDQ5NTM3MEIwM0M0OEMwQkE4MjhCNEU3MUZEMzZFCi06MTAwNDQwMDA5NTQyOTI3N0UwRTkwOTY5Mjc3MkI1Qjg3NDIzRUFFRjFCCi06MTAwNDUwMDBBODg5Rjk4MUM1NTI2ODA0Q0FBM0E5NDE4Q0YzMTdBNkRCCi06MTAwNDYwMDAzMTdGRjc0Mzk4RjVGODAwNDQyQ0M0RkYzQzAwOEVEMzRECi06MTAwNDcwMDBGM0MxQzVGNDIxNTA1ODlGQjg3MjcyMDFDNkE3ODUwRDBCCi06MTAwNDgwMDA2NkNGMDZFNEIzMzBCRDczMzhGOTY3RkVEOEMzRTkxMjBFCi06MTAwNDkwMDA5RTBCNEIzQjg1RjgyOTM0QzEzQUFBNkY3NDNFNkEzNUVFCi06MTAwNEEwMDAzRTM2MTQyOTE1NzRCRUMyRjRENjBEQ0ZFMkZFOUQ4REUyCi06MTAwNEIwMDAyNkQ4OENFQjlDMUNGQkY4MjMxMDk3OEZCNzdBQ0E2RjU5Ci06MTAwNEMwMDBBNTc5REIyNDUwMjhBRjA2NUE2Q0ExMkQ1OUI0N0ZFN0RCCi06MTAwNEQwMDAwMENBMDdGQUJDRTU5RThBMTk0NUI4RUVBQzIyNjA3REQ5Ci06MTAwNEUwMDA0M0VCNUY4MEY0MzNEMzI5NjQwRjUzRkFCMzBDRjBCOUI0Ci06MTAwNEYwMDA2MUJFRkM5RUZDMzNDMENGMTU5MjJDNkYwMDcxQTE4Q0E1Ci06MTAwNTAwMDBGN0U1RjEyMzZGQkUzMTdCNEQxRUYzMTNBMDNBNkVBQkJFCi06MTAwNTEwMDA0NzlEQzdFN0I3NjIyQ0EwRjNCRjZDMEI2REU2N0FBQkMzCi06MTAwNTIwMDA2Njk4ODRFN0FDN0NDNTY2QTJGQzdGMThFMzMzREMwQ0RDCi06MTAwNTMwMDBGMEE1REZDRUY0N0ZGQzRFQTY1RkY5MzM5OTFFRjVCQjI0Ci06MTAwNTQwMDA5ODdFRURDRjYxQkFGMDAyMzI4MEZBM0I1OUE0NTQxMTgzCi06MTAwNTUwMDAzRkJERjFEMTdCOUMxMTdDNDQyNTk4NURFRkU4N0VCRkM3Ci06MTAwNTYwMDA1MkYzODc4Mjg2RTM0RjI1OTMxRDM0Qzk2RUIyRDNGQ0M0Ci06MTAwNTcwMDA0NjM0NEMzQ0Y3OTlFNjMxMjEzOTJCNUVBRUVBMTNDNDgwCi06MTAwNTgwMDA2NzQxRDNBNzdGMTg1RjQyQ0Y5OTlEMTJDRTNGRDNENDQ2Ci06MTAwNTkwMDAzNTgwRkMzN0YxN0M1N0U0RDE2MjE1RjJEMENFQkIyRDBCCi06MTAwNUEwMDBBRDc1MDMzREJGQUQ3MTM4OUQxMEUzMDgwODNCMjQ3RDU4Ci06MTAwNUIwMDA0QTNERjFCMTlBRURFNDU3NDUyMkRGREY2NUVCMkM3MTNFCi06MTAwNUMwMDAzQTYyRkMwMTk1MTg5ODY3NkFCNTNDMzM1NUJFOTQ0QTY3Ci06MTAwNUQwMDA3RTMxOTNENjFENEI3NjdERDM0N0I0NUY2MDlGRjA0MzQ5Ci06MTAwNUUwMDBENEVCM0M1RjlDM0ZFREQwRTRBMEQzRkMxNkFCOEZGQzdBCi06MTAwNUYwMDA2OTVCQ0I2Nzc3REY4MTcyOTgzMUVFMzZBRkVDOEFDRERECi06MTAwNjAwMDA3Rjk1ODRFMDI1RkJCRUY4RUZDRjY2RjA3QzI3NkQzNTQzCi06MTAwNjEwMDAwNzM2NEQ3NUUyQkNGQkVEQkJERTI3MTEzQ0UwM0MzQUYyCi06MTAwNjIwMDAzNTBEQzdGMzMyQTUzRDQ0RTdCQkIyQTZBNTUzMUM4MEU4Ci06MTAwNjMwMDAxMDNGRkY1MENFRTQzRDY0NjJEM0REMzNBRDU0NEY0Q0U4Ci06MTAwNjQwMDAyNkE3OEE4QkJCMTU3NjhDMzc4NjM4REZDRjMwQkUyNTQwCi06MTAwNjUwMDA3M0IwNjFGRTZEQUU2Q0MzRkQzQjcyNzIwREY3RjU3RDNDCi06MTAwNjYwMDBBN0JCOEIwREYzQzg1RkE5REU0NjNFNThFRkIwNDUwRTIxCi06MTAwNjcwMDA4RDkwQzgwRUNFN0RCMTk0Rjk5RjUzNDJGQzQ3NTE3RUI4Ci06MTAwNjgwMDA1NjJDMUM0RTk1QUQ3RkZFNTkwQTFCOERCQjUzQzkzRjlFCi06MTAwNjkwMDAxM0VCREE2NTJEQUZFRTUxNUNCREQ3QjU1NUUwRUIxQjIyCi06MTAwNkEwMDA5NjdBQUY2NzdCQUIwN0FGQjdBRUM1MzhGMjA3OEEyMzQwCi06MTAwNkIwMDA4NTZGRERFQjBDRTIzOUI2OERCRDc4ODMwQkY5RkJCOEE1Ci06MTAwNkMwMDBBOEU3N0EzN0FBRDVCQjg5NzY3NEM1NUUyNTk3QjA5RjBGCi06MTAwNkQwMDBGRDMyNTAzREE0RDdCRDg5NzYwNEYwOTQ1NjA3MDhGQTQwCi06MTAwNkUwMDA1M0ZEN0RDNjI3MjI2RjdENDM3RURGMkZERUJFMzUxQTg4Ci06MTAwNkYwMDAyQTMyRTQ5OTQyMkJFNjE3RDQ0RkU3REY2NEQ4NEMxNzJGCi06MTAwNzAwMDAyRUUxMzk3NDNENjRDN0VDMUYxRURFRjRGRUEwMTJCRTVDCi06MTAwNzEwMDAxRUEwQkFCNjhBRjIwMkFFOUZFQzkxQzRCQUNCNzZCREU3Ci06MTAwNzIwMDAzRjI4MjM3NjFGNTYxRTM1Q0M4NzI3QTUzRDg2RjE5QTk0Ci06MTAwNzMwMDAyQ0UzRjg5OUM5N0JFMjlGRUYyRDFFNTU2RTdDRDRBQTVECi06MTAwNzQwMDA2MjlDQUU3QzRFRTI3Qzk1Nzg1RjNGQ0ZENERENDkwQTU3Ci06MTAwNzUwMDBDNTRENzNCMzhERkJBOTJBQTcwMjhBODNBQTI2Q0MyMzkxCi06MTAwNzYwMDAzREU0NzUzRDNFQ0M5MUExQTZBNzM4Mzc0MDVCNzdGQUIyCi06MTAwNzcwMDBFRTI0OTA3RkM2QkE4N0QxNTZFODNDODFGRjEyRjlFNjk1Ci06MTAwNzgwMDA3MDVGMDU3QzcxRkI2NDc5NDRGREQ3OTE1NkY3NEYzRjRDCi06MTAwNzkwMDBFMEJDOEUzRjgzOUI0NERGOTEyNkUyNkU0MUMzNDk5M0M4Ci06MTAwN0EwMDA4OUYyNUYxRjYxMkYwNUNFODgyOTFENjk3NDUxNzIwMDdGCi06MTAwN0IwMDBEMDlGQUExN0E3MDQ0Qzg1Nzg3Rjc4RTc2Nzc2NTRGRDA5Ci06MTAwN0MwMDAyOENGQTAxN0VEQThCNzJGNEMyNjQzRkU4OTUyQ0NDM0UzCi06MTAwN0QwMDBCMTY3N0JFNjFDQ0EzRjc3RUM0RTBBOUI3RTA2M0YxRTQ0Ci06MTAwN0UwMDBBQTM5OTAxNjk2MEJCRjdGOTBFQzQ2RUNBMzAwRkE0NzBGCi06MTAwN0YwMDBGNUVGNDBERjU3QTEzODQxRkNEMzc4QTk2N0M4RTFFNzlFCi06MTAwODAwMDA3MERERUFGRDIyMEVFMDZENDc2MjNGN0I3RjVDM0YwQkFGCi06MTAwODEwMDAxQjg1RkZEQUYxOTdFQTlEMkEwODRENzMxMDZFMTA0NjhBCi06MTAwODIwMDBGRjg3NUZDRUZGNjc3ODFDMTk1Q0U3OTA5RkRGRENEREY4Ci06MTAwODMwMDBBRjc1QkZBRjNFMjhGQ0ZFNkNGM0Y3OUY1MDlDM0Y4QjFCCi06MTAwODQwMDBGOTJGREVFRjc1QjlFOUZFNUVGRDgyQ0M3RUE5NUYzRjMwCi06MTAwODUwMDBEMzJDREYxQUVBNDFDRTY1QkE1RjI5NkVGNkQ3NUFBN0M0Ci06MTAwODYwMDBEOEI3NzZFMkY5QkIyOUNGRDVCNkEwODZBNEVFRkJFOENGCi06MTAwODcwMDBCNDdBOUQwQ0FFQjg3REI2RURCNDJEMEEzOTYyN0M0NEQ1Ci06MTAwODgwMDBGNUZDREFGMjdERkFFNDNDNDE1NzUzRkU4NTNBMkRGRTQxCi06MTAwODkwMDA4OEJBMDZGM0FBMjU4M0YyRUE0Q0M5QkQwNUM5QzE5NkY4Ci06MTAwOEEwMDA4MUU1MjRCRjgzMTI4NDVEMUU1RUUyNUUzQjlFRUYxRUU3Ci06MTAwOEIwMDBCMTFDNUQ3NzUwN0QwNjk5Mzk2NkRBRTc2RTREQUZGNzZBCi06MTAwOEMwMDA2OEY4RDJBQzk2NTkyMzI4REU3RkQ2QjBFMEEwNDI1MTFBCi06MTAwOEQwMDBDRTkzQ0RGQkZEMUEwMjVDMUYxRTRDRjMwRDVENDE3NURFCi06MTAwOEUwMDA2ODUwRDhGOUMxQjRDRTc2QzJBMzBFNEU0Qzk2ODIxMjhGCi06MTAwOEYwMDBBRkJGMjZCRUZFM0I2OEYxMERBRDYxQkUzNDVDNEExOTQ4Ci06MTAwOTAwMDAyRDVGNEVGRTA5RkRCMjE2MTc1MTlGMDE0OUY0NzdFQzk5Ci06MTAwOTEwMDAwN0U2NDFDRjMwQ0VCMDE4NDI3QjE0RENCN0NBMURFNkUzCi06MTAwOTIwMDAzQTc1MjkwODVDMjBCMUJFQUY5QUYwQUQ5NUYyNDM2MkVBCi06MTAwOTMwMDAzRjNBQjk2OUQ3MjFBOUEwMDcxQzIzQzE2RUFGODU1QkQ3Ci06MTAwOTQwMDAyNEY2QzFCREUxMEYzRkE2RkJCNjc4RTJGMEMzQzQ3QTNFCi06MTAwOTUwMDBGRDRBNURBQUQ3NTU1QjkyNDM5QkYxM0NFRjRFRkNCNzM1Ci06MTAwOTYwMDAzMzRCNzFCQzcyNEJCMjkzRkFFRUQzQUZEODAyMTQ5RkUzCi06MTAwOTcwMDA0RjZGQjY4NTI0QkM3RjNBQkRCMzhERkE5MEQzREJGM0JECi06MTAwOTgwMDBEREI4MDI1NDlBNUNGRkY5MDZFNUY5M0Y1OUQ4MkUwMDBDCi06MTAwOTkwMDBEQ0MyM0ZBRUQ4RTk2MzQ3MjhERUQ1NkU0OTkxODBFQUQ0Ci06MTAwOUEwMDA2QjU1RENENzdCNDBGOUY1MTRBRTEzMTZFRjE4MTRCMjczCi06MTAwOUIwMDA0OUIxM0M0M0ZFRTFDMkQyRTJENENCNDkwQTE1RkRBN0JFCi06MTAwOUMwMDBGN0RERDM5N0YwQUI3NkQzOUJDMzE4MEY5MzlGM0NGMjIwCi06MTAwOUQwMDAzODNFQjdGNEI1MTQwRkQ1MTM5MDA3QUNCNzQ1OUI0NzE1Ci06MTAwOUUwMDA2REEyRkFGODI1OEJCQTk3RjhBRjc4RkRDRTgxNTlCNDhECi06MTAwOUYwMDBGRUE3RkQ4MUY4ODkzNkVGMTg0MEY1NTFBQzZFRUZCOUNFCi06MTAwQTAwMDBERTNCREI5Q0REMTdGMjYyNzJEMkYxQzQ3NTdGNUNFREQ4Ci06MTAwQTEwMDAyM0JEMjc0QjJFQkU2RTg2MUE2NTMwRDk0NUQzNENBMDE4Ci06MTAwQTIwMDA3NTNEQjJBNDkwNUY3NkFFNEZFNjNBMzVEMUVFOEU3ODQyCi06MTAwQTMwMDA0NDlGQjI0Q0M3MUZGQTgxM0Q5M0ZDNDcwNTk2NDM3NDBGCi06MTAwQTQwMDA3REVFRTYwRDI4QTcxRjNDRTk1QUJFRUUxQzc5Nzc3RUE1Ci06MTAwQTUwMDBCQzdEQjY1NUJENDNGNkI5RDFDNkI4NDg3QjkyQjE2RUUwCi06MTAwQTYwMDBEMEU5RkY3QUQyNzg5RjRBRkIzOTAzMEU1MUI1RUFBMjRBCi06MTAwQTcwMDA3MTlDODdGRDFFM0VFRjA5QkE4QTFGNDVCQTQyOTM3RkRCCi06MTAwQTgwMDBENzY4NUY4NzA3OUY1RjUyRkZGQkI3M0U2MEI5NkNGQzdBCi06MTAwQTkwMDBDNzJGNjhERjdEMEU4MUM3N0MyMEU0OTdEODBGNTREQTFBCi06MTAwQUEwMDAwNUVFMDFCMDg5Q0ZBQjVGM0ZGOUYyRTcwNTY0ODcyNzE4Ci06MTAwQUIwMDAxQjczNDc5MjFFMTdDOEFEMjc1RTQyM0VDRkE0QjQxRURCCi06MTAwQUMwMDA3OTAyRTlGNjdEOUZCMDVFMTJDRjlCODhERkI0NEIxMkFFCi06MTAwQUQwMDBGM0JCOENGOEMwRUJGNzdBN0Q3MjcxN0Y3NjY3RUVFMzNCCi06MTAwQUUwMDAxNjZDQzg2N0Y5NEQ5NUYzRkE5MjFFQTNBNzdCRTk1N0Q4Ci06MTAwQUYwMDBCNDczRUFFQkVCRTdEM0Q3RDdFNzM5OEI4NUJFM0VENEE3Ci06MTAwQjAwMDBGMEY3MEU2QkVCMTlEMjZGQzc1QkI5MTJFMTgzNTdBRUVBCi06MTAwQjEwMDBBN0I3MTZBNEM1RDlDQjJGODVDQkRGQTdFMTIzODc0Qzc4Ci06MTAwQjIwMDBBQjdGNjM0NTdCNkNBRjdGRDZBMkM2QzdCRDlGODhDNzJFCi06MTAwQjMwMDA1RkE5MDcxNTcwMzkwNzg4NTRDMjc5MEI5OTMzRTM3ODk4Ci06MTAwQjQwMDBBMjNFMjY2N0MwRjEwNEVENzgxMjlEMDdGRDcyQTI0NjExCi06MTAwQjUwMDA2MTg5OUFDOTc4M0JBRDg3MzQwOTQyM0MwRTRFNzZCQjE5Ci06MTAwQjYwMDA4ODRFOTI3QzhDN0JFODdEQzMzNEE4MTk0MjdDOThFQzNCCi06MTAwQjcwMDAxMUM2MDlENzEwM0U4OTc1Q0JBQ0I0QjU3NzY2RTE3RTU2Ci06MTAwQjgwMDA2QkZBQzM1QUFBNjdENjU4ODQ1RjA0RTYyNzczM0ZBNzU3Ci06MTAwQjkwMDBDQjQ5Q0YzM0UwQ0MzM0U0OTczNTRFNzA5OTcxOUREOTcyCi06MTAwQkEwMDA2NjU4Njc0OTE3RjM2RTQ0MzkxRkRDQjdFMDdEQzI1REI0Ci06MTAwQkIwMDAzRjM3RDdGNEE3N0QwRjNCOUVDQjk3NEM1NEU3ODU1MjI4Ci06MTAwQkMwMDBBODY3RkNFMjkzM0Y3OUZGODY3M0JGMDQ2NTIyRDUxNUMxCi06MTAwQkQwMDBGN0VFQjU3M0RDNEZDNDI3MTY4MkNBRTM0QTg4NThDRUI1Ci06MTAwQkUwMDBFMTczNUY4REZENzFDQjZFODhGMUY1RDVCODFGMUFBOTQxCi06MTAwQkYwMDA0RkI4M0ZFRDI5MkYzRDFGMjg4NzFDQ0E0QkU3OTM1MjYyCi06MTAwQzAwMDAwQjg4OUY1NTc2NDExRkVCOTNCQTk5RTg2OUE3MjM0MDVCCi06MTAwQzEwMDBCOEVDRjlBNDYxMjFDQUE3MkY0OUVBODM2NENGRjgxQzc0Ci06MTAwQzIwMDBGN0IxODEyM0M5MjFDQTc3OEZDOTZBMTVFM0QwNjk1NjA0Ci06MTAwQzMwMDA5MDcwN0VCNEJGMjY5NzBFNjBCOTQ0MkREQUZDRUY1QzRECi06MTAwQzQwMDAzQzJFQTlGMDMwNEUwOUU3NUQxQzk3QzcyN0U0OUQ5MjIyCi06MTAwQzUwMDA1QzkzRThDRjJFOEJGOTEzM0JDRDg2QkM1MzUyQThFMUIxCi06MTAwQzYwMDAzOTdGNzc3MTlEM0FFOTgyRjlBQTc5RTk1MkIxRTg3NzNCCi06MTAwQzcwMDA0QkZBOTk2QTdBQUExNzlGRDVFRTA3MjEyQzBCOUM0NzRECi06MTAwQzgwMDBENDBCRTNBRkQ4OTcyMjkzMUVBQkI0NzExNUU1MzVCNEZFCi06MTAwQzkwMDBBQjY4QUEzRDIwMjNCRkUzOUI4NTlEOEQzNzg3NzcxMUU1Ci06MTAwQ0EwMDBDNTI4MEJBQkE4QkU2OEMyQkNBNzlGMDNFMzBBNjRFNkQ1Ci06MTAwQ0IwMDBCMjNEOENEM0VEMTRENzlBOEJGM0Q2NEEzNURDQzdEODI2Ci06MTAwQ0MwMDBBOUFFNDFCQTQxNkFFNTczRkMwQTNBOTkyQTVBM0UyRjA1Ci06MTAwQ0QwMDAwNzM3RDMyOUUwNjM4QTc2Q0FGNDU2QTg2MzdBM0JENEVGCi06MTAwQ0UwMDAzMzlEMEVBRDIyRkY4RjBFMDczOUFGQzE5MzRFRUUwNzM1Ci06MTAwQ0YwMDA2RkFCMzQ1MURENTFGMkVCOUVGQjg3NDYyRDlFRjQyRUY3Ci06MTAwRDAwMDAwNzc0QkNEMjlGMkU4NzY5ODBGRTk3REQ4MzNDODZFNDAyCi06MTAwRDEwMDA3MDFDNDk5NDQ3QTI5RjRFODQ4OENDN0U0QTAxMjI5QjM2Ci06MTAwRDIwMDBGMDAzMTdGQjZCMDUyODNDOUU3QTlENzIyODhCQTg2NjAyCi06MTAwRDMwMDBDNjZGMTJFNTUxRDFCMzVERUNENEVDQTI5NjZDQUQ3RkQ5Ci06MTAwRDQwMDA0QzRGNURDNTJFMUVFQkZBNDJGRkNBQTQzQTM0NTE4RkI4Ci06MTAwRDUwMDBGQUY1OTJFNEYyMkUxNzg2RTIyRjc2MUM5RjYzQzZCQzRBCi06MTAwRDYwMDA1NDUyNUNCRTIyMUJDN0VEQzVERkNGMzE2MzNFMkIxOTQ5Ci06MTAwRDcwMDA1RkJFNjMzODhFQ0ZFQ0Y4NDE4QzBCQ0I4QjJENkVFQ0M1Ci06MTAwRDgwMDA2MjU2OUY5RjMzMDVFN0FCRTQ5Rjg1NDREMTBGMjk5RUIwCi06MTAwRDkwMDBBOUEyM0Y1RUE5RDUzMUVBRUFERkI4OURFODJGRUE1MDYzCi06MTAwREEwMDA4NzlCRjhCNDYzQjE5Rjg0NzI5NEIzQzU3QkM3NjFCNzY2Ci06MTAwREIwMDA4Njc3NUI3MERFNzE4QjdBOTBGQzc3QjkzRDlDRUE0MjU2Ci06MTAwREMwMDBGOUFGNUMzRDc1MjA4NUNFQTdBRDYyQkVDRDI2NzA1QUM5Ci06MTAwREQwMDA5RDNGQkMxRTQ4QzJGMUY2RURCOTJCQTRFMUQ3M0UwN0ZBCi06MTAwREUwMDBBRUZGMzVBREFGQUUxRTExMjBGRjU1MUIyNUI3RDA2QzQxCi06MTAwREYwMDBGOUMwRDkyOEMzRjY1NjBCMTA2RUFBRUZGN0Q0NjhGNUUwCi06MTAwRTAwMDAxNEU3NDc5NzlCRTNGNzYwQURDRTY5REY5RTlCNEI3QTczCi06MTAwRTEwMDBFQTJBMTYzODE4NjQ2NDE1OTMxQzhGOEVGNjc1RDFGQzc3Ci06MTAwRTIwMDA2ODhBQjBCNzJFQ0FFNURFREVFOUUwMTJFNTNCOUE5RjlDCi06MTAwRTMwMDA3ODNERkEwRDFFMDA5RjM3OTdBOEU3RTk3RTc1RjIyNUU5Ci06MTAwRTQwMDBDRUZCNjc4QTNFNUQxQkM5OEFEOUFEODQ0QTlCOEJGQzY5Ci06MTAwRTUwMDAwNzE1MDg1OTM5M0Y0QzcwNUVBOTUzMjlERTJEQzQ3NTFBCi06MTAwRTYwMDA1MDFFMjUzRTM1NDgyMTZFQ0NEQ0NFNTI4QUFCQjhBRTQyCi06MTAwRTcwMDBBOTA0RjdBOUI2NDY4NjE1RTE3M0NGREQ3M0M0MkFFQzQxCi06MTAwRTgwMDA2RTg4QjAzQjJEMkVCNUVDRENGRkM0NjAzMUY0NDE5Qzg0Ci06MTAwRTkwMDA5RjU1RUZCQ0Y4QzM5NzI4QkZFQUIzMEUzNzREOEZGOUMzCi06MTAwRUEwMDBENzhCMkJCOERGMDQ4NzIxOEVFODdFMzdBRUM5QzZGNTE1Ci06MTAwRUIwMDBGNkY4RTY1MTBCNjlERUM0NEZEQkIyODlBRjQ5NkQxMTFDCi06MTAwRUMwMDA3RThGMTY2REY5N0NCMDM4ODdERTg3OUM5NzdFNEUzRTBDCi06MTAwRUQwMDAzRUE5RTU4OTkzNzY5MTE3RThCRDMwRjc3QjhERTJCRDk5Ci06MTAwRUUwMDA3MEFEODY3M0Q2QjY0OEExMDBDNzFGRDEzRjJGRDJGODg4Ci06MTAwRUYwMDA1QkJFQkY3MTBGRTEyNzhCMzYzRTM0OURFRDI4MjRGQThGCi06MTAwRjAwMDAwQTE3RkU1MjVDNTg3MjQ4RjRDRDRCQjcxQUZCOEQ2QTMzCi06MTAwRjEwMDBFQTlCNjkzRTg0QUQ2NDBGQ0JFQjEzRUU2RkFDRTBCRTkxCi06MTAwRjIwMDBCOTNBM0VGRUY3RDAzNzdCNEIzNDdDNkMyODBDNjVCRTVCCi06MTAwRjMwMDBFNEI5N0RENTFFRTI2MTYyNUY1QzA1Q0E4NDEyQUU3QkI2Ci06MTAwRjQwMDA3RDMyRURFRjM1Rjc4QzNGRjQyRkQwREY5Mzg5RkFCRDdBCi06MTAwRjUwMDA1MkRCOUJFNEU0NjBCOTU4Qjk5RkE4N0Q3OTg1REI0OUYxCi06MTAwRjYwMDA2M0NENkYzNzk5QThBN0M2ODlFRjdEMDRGMUNGRTk3RURECi06MTAwRjcwMDBCQzc4OURDNDdEMDc2Q0VDQzczNjU4Rjg5QTREMjE3RTJECi06MTAwRjgwMDAwQjVGMUJDODdEMDhGNjRCNUMxRjZFN0FDREI2OEVDNjE0Ci06MTAwRjkwMDBDMURGRjUwOUM4ODU4NDQzNzdERTQwMzg0QzMwMDlFQjYyCi06MTAwRkEwMDA0RDgxRTc4M0U0NjExQzg2NzE5MTQ3NEJCNEI4QUZENTlFCi06MTAwRkIwMDAwMTEwMkUzMkY0RjM0MTJERkZEN0E2OEMxQzg4OUQ3M0FGCi06MTAwRkMwMDA2Q0RFQkU0MTg2RkUyNEE4RDVEQjI1NzQ0RUFBMUJCNzc1Ci06MTAwRkQwMDBERTIwRUUyNzA5M0U3NjdERkMwRkM5NTRGNzM2OUE3RDU4Ci06MTAwRkUwMDBDOTg0NkI5RjNEMzA5Q0ZCOThERUU0RUVDNTM0MDQ1NzBBCi06MTAwRkYwMDA3OTRGRTlGRDdDN0FGNkQ1RjQ1NkYyODI1OUM4NEJCM0E1Ci06MTAxMDAwMDBEQkI3RkQwQTdDNkQ4OUU5NDVFNzZGQUFGQzQ2ODU5NTRCCi06MTAxMDEwMDA3MDkxODdDMTQ5Mzg0OUVERkU1NzgzNzZFQTBCRDcwM0IzCi06MTAxMDIwMDAyMzEwNjc0MUQ4RjNEOTUzMjY3RUVGNUUwQTM5RkYzQTgxCi06MTAxMDMwMDAwMUM3REU1MzY2NzcwODlGNkZEMEUyMjJCRDdGNzZDNTc5Ci06MTAxMDQwMDBEOTk5NERDMzdGOTM1QzdEQzAxNUQ3NDcyN0U3QTQxQjczCi06MTAxMDUwMDBDNjI5RUUxQjBDQ0ZGNTJEMUI2RUI4OEZGMkRFNENFQkM0Ci06MTAxMDYwMDA0MzQwNjlDRDJCOERENUJENjlDQTY4QzM3MzRGQTc0RTY4Ci06MTAxMDcwMDBEQkM3N0VERkZBMDhFMzUyRkQ2RUY1MThDRjIzMzdDQkNFCi06MTAxMDgwMDAxNDBGRTA5Q0E4OTdDQUYwOTdGQzZEMEMwNDgyQTQ4RjAzCi06MTAxMDkwMDA3MUVEQzYzQUFBMkM1MkM3N0Q2M0QyMDFCMzAxMDdCMEU1Ci06MTAxMEEwMDA1RDAzOTdEQTQ0RkU0NTcxNzIwODBDMTE3MTIzNTFERTFECi06MTAxMEIwMDBDNkVGMkY2QUY3Q0I1Q0VGRDUwRUM1NDIzNUFCMjc3OTZCCi06MTAxMEMwMDBERjY0OTBCN0VFOEZCQURDRkJGQjhDNzIxRjM4REIyODM1Ci06MTAxMEQwMDBFRjQxQUE1MURFODMxNzE5RTUzREI0QzYyOEVGMUI1NzJGCi06MTAxMEUwMDAxOUU1OUExNTMwQ0EzMTdCREQzOEMzRkMxMTc1RTU4NkU4Ci06MTAxMEYwMDBGMUNEMkZEQzZFOTgzRjJBNzRCNzYxOUNCQkY1M0VDM0RGCi06MTAxMTAwMDBGQ0ZDRkEwNTg2RkI4NTRENEJBRTRCRkY0NUUxNUFDMzBGCi06MTAxMTEwMDBCQzQ0RkQxN0VGRkJFRDU1RjUxRkMwNUZBMTdGNjA3RDVGCi06MTAxMTIwMDA5NEExM0VDMkFFRkYzRjNCMzhBNkM3NTlERDBFQUUzMzk5Ci06MTAxMTMwMDBDRUJFNEQzRUNCNzhDMjg0NDg4MEVDQTAyQzk5RUQ2NEE1Ci06MTAxMTQwMDA0NkIyODgzQjFGRUUzQjdCNDBDMUYxNDdBRTYyNEIyNjY3Ci06MTAxMTUwMDBENTU5NUFGREUwRDNFMjkwREVDRjI0RjY4RDc3OTU0OTNDCi06MTAxMTYwMDAwOUVGRkI5MzBDRUZGQkFGRjU1RDlEQjczNTZDMTgxN0RFCi06MTAxMTcwMDAxRDAwRkU2RUM2NzNDOEZEMkU1MUVGNzE4NUUxQUVEMjIzCi06MTAxMTgwMDA1MzM1RUYxMjFEN0I4RUQzNzZCNzdFNTVGRjNFMkZCMUMwCi06MTAxMTkwMDBERjgyNjUwN0Y4QkRFMjVDRkRCRDBDMzk0NTY5Nzc3Q0VGCi06MTAxMUEwMDA1MkVGQzdGNDNFMzdCMUZGRDVGQkRFRUU3RDlBQTg2MzYwCi06MTAxMUIwMDBCQUY3MUJFRTRDMzNEN0QxMkFEN0Q1N0IyNTk1NzFDRTA0Ci06MTAxMUMwMDA0REEzRDRDMTVFMkYzNTAxRDgyNzlCQTg0RjhFMDQ4NTJGCi06MTAxMUQwMDAzMDE1QTBGN0QwNTFGQTlGOEE5MEMwQjNGNzExMUUxRkE3Ci06MTAxMUUwMDA0RDAzQzZDRjE1QTlFRUJFNDAxRTFGREYxOTI5MTVGMDBECi06MTAxMUYwMDAxMUZEMTQ3QkQ1MTE1RUQ0RUIzMUM5QjlCNjk4RjA4OUQ1Ci06MTAxMjAwMDA3MURGMEVBMzdBMjRDNzJCRUEzQzlCOEM5MkMyQkMzNEJDCi06MTAxMjEwMDA3MEFFMDI3NEZEQzc3NDY1OTRENzFCQzM0QjdBQjM5QjQxCi06MTAxMjIwMDBDNEVGOTMxQUZDNjFBNjY2QTc5QkJGNUY0QUM0MTcyMzRECi06MTAxMjMwMDAyNjE3RDdBNzgxREY0QUZDRERDRkI3NzRCOEIxQjEzQTIyCi06MTAxMjQwMDBFNkVDM0EwQkQ3MzFBMEY1RjMwRjY4RjJENzcxOEZCOUZFCi06MTAxMjUwMDAxQTNGQzc3MDg5NDU5ODk3MUY2OERBQ0I3QTU5OUFEOThGCi06MTAxMjYwMDBBRUUxMjUzNTVDOEYzRjM0QzRFMUUxRUZFMTk0NjJCNzM0Ci06MTAxMjcwMDBDMEM5NzQxQzY0QjBGQzUzRUFBRTZCRjFCRjM0RjNCNDY0Ci06MTAxMjgwMDAwMTg3ODIzN0ZBNUREN0ZCRjIxOERGNjJGRDYzRUIwNTU5Ci06MTAxMjkwMDA5RTc5NkNGRDUwQzZDRjYzRUI5RjYxM0NFQTgxOUE4RkNCCi06MTAxMkEwMDAwREZFMzE2RkQ1NjE4MzNGQ0MwRjFDMzVEQzhGNjQ3NDJDCi06MTAxMkIwMDA1QTA4N0Y4Q0JDMzU2OERBRkQyOEJGOEU0NjVCMjlFOTY5Ci06MTAxMkMwMDAwM0VERTAxMUQyQUJCRTdFNjQ3REVFMTREQUY3REE3QzdBCi06MTAxMkQwMDA3RUNCRTc2OEYzQjdCMjdFNzUzRThGRjgwRkYxMzhFMjQ4Ci06MTAxMkUwMDA4RjI0N0M5RjI2RjhENDcxMEU5RDVBNzc0MzhFOTlERTA5Ci06MTAxMkYwMDAyNzRBN0REQzg0MkJGNzg2N0ZFODdFNjYyQTFEQ0VFQkFECi06MTAxMzAwMDA5QzM3Qjk0RTA4OUNBODY2MENENTdGNkQ5MzA3OTREMzgzCi06MTAxMzEwMDBCOURCODY1QUNEODI4RTE0RTM0MTY1NzYzMTlFNzYyQkY5Ci06MTAxMzIwMDBEMUE4QzVCMThFNzA5MTM2NDk3QzRGMzQ1NzUyNUU5OTIxCi06MTAxMzMwMDA4RkZCM0UzMTRBN0Q5QUZDQTE3QTQ5NjcwMUY5NUY3NUJFCi06MTAxMzQwMDA2MUU0NDEwOUQ3RUZFQUFGNkUyMEY5NDhEODVFMEM0QTU0Ci06MTAxMzUwMDA2NzNFRjhCQkIzNTNBNjQwODE4NEFFQjJDN0ZCRjU3REIwCi06MTAxMzYwMDBENDI3OUVFQTEzMzg0MzE1Q0FDRUM2MjM2MjZDMTVGRUY1Ci06MTAxMzcwMDBGOEExNzcxRkZCREY3MTVDOENGODBDRkM1OTEyRjg5NDE0Ci06MTAxMzgwMDAyMzYyOUQ4OUVCNjRGNDU3OUZBNzdERTk3QjMyN0FCRjg2Ci06MTAxMzkwMDA0N0Q3QzkzRTc1QkMzNDZBMTE3NTYyNTRBQjE3NUZGNjA2Ci06MTAxM0EwMDA4QTdBRjY5NTA0REE0NDM1MkVFMThGNDQzOTVFM0YzMzZDCi06MTAxM0IwMDA5MkYwRjRCMzFCNkQ0MEY1MkRFRUFGOTg0QTYyREZBRkFCCi06MTAxM0MwMDAwQzQwNUVBODhFN0RERjJBRkE0Q0NGNUY2QzYxOEE1Mzk5Ci06MTAxM0QwMDAzQUFFRkFBNjM3OEJEN0NCQzgxNjc4NjlDNjNGNjNEQzFFCi06MTAxM0UwMDAyMjNGOENCNDBFOUI5OTEyNzdERTAzQzAzODc2MDdFMTVBCi06MTAxM0YwMDBEMTcxMzhGNjlCNUVEMUFGQzNDMzIyRUU3NUFDMUZDQzYyCi06MTAxNDAwMDA3OEZCRjJGREM3OEU1MEZDQkFEN0FCMzY5MjVDMTc5OENBCi06MTAxNDEwMDA1Q0E1RkM3RDU2RUEyRUM2Q0RGNjdBNURCQzJGOUU5NzY0Ci06MTAxNDIwMDBGOUM1MzhCNDg2RjRCNERDMUU2MTlDRUQ1QUI4N0E2RjA1Ci06MTAxNDMwMDBGQzc3MkM2QzdEM0U4RjcxNjQ1NzAxRDk4REJFMkY5RTM5Ci06MTAxNDQwMDA2M0FGMzcwRUZGRDZDRjExNUJFN0VBN0VBMEUzQzNGQUE2Ci06MTAxNDUwMDBGOEU0Q0I0RjhGRDRGMEZENzlCRTFFRjJFQjExNEQyRTg4Ci06MTAxNDYwMDA2RDk2OUVGMUY4OEI1RUYxMUVBRjlCN0U2RTA2MjBGQ0EyCi06MTAxNDcwMDBERkQ2MDc3MzNGRDI2RkJEODJGRjhFMzlDODBGRTMxQkUzCi06MTAxNDgwMDA0QTExRTk3N0Y5REQwRTM3Qzk1OTVGMUZENzUxREZCQzIzCi06MTAxNDkwMDBDQTNFNURBMzdEREYxMEZGNEI2QTA0N0VBRkRGOEY0QTNCCi06MTAxNEEwMDA0MkFGODFGNTAyNEY1REJFRjNGMDkxMjc3MDk3QzVBRjUzCi06MTAxNEIwMDBFNzE3NTMzRUQwOUY0Rjk0MzNDQTc3MjQ3RjdGMjc4QjAzCi06MTAxNEMwMDBGNzVGMjhERkIzQjQ3RTIyNkVGRjczRTUxQTFEMkFERUI0Ci06MTAxNEQwMDBEMzQ2Mzc1RDFDNDZERkE3MkRBN0VGRTEwQUM4M0UwNEJGCi06MTAxNEUwMDBGRTA1MEQ0NjVDMEJFNTE1MjA3Q0EzRkI3QjJERTBGNzhDCi06MTAxNEYwMDA2MzM2MkQ5RkQ4RjRFNzg3OTgwRENGRDdBN0Y4OTI0QTg3Ci06MTAxNTAwMDBGMUZDNkY2OTcxMDNFNzg3NENGNDNEQjcxNjlGMUFCNDdECi06MTAxNTEwMDBCRTNCMTE3RjY5NjgxNUI4Njk0M0E2OTVFQjY4QUE3RjQxCi06MTAxNTIwMDBFOEJFNUVGRkFDRkM1OEUwQTYyQkIzNDQ5RDRERTcyNDFCCi06MTAxNTMwMDAzRDRCODdGNjcwQkQ3MDA1MTc5NzMwREZBMzFDRDNBRDA4Ci06MTAxNTQwMDBFQTkwNTJGMjI3NzUwNUU3MzNGOTQ2RDQzM0JEMEZGOTE3Ci06MTAxNTUwMDBFQkVEMUE4RTIwRjJBMzU3Q0I4NzVFNUE4N0NFOTVENzM0Ci06MTAxNTYwMDA5N0YzNjQ4OUI2MkZGNjE3OENERjhEMDU1NUFCMUYzNEMyCi06MTAxNTcwMDBGQzZERkQxRTAzRkVGMDdGRERGNUVDNDkzMDMxMDAwMDBGCi06MTAxNTgwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMEE5Ci06MTAxNTkwMDAwMDBCRkI1MUNGQzBGMDAzMDk0N0IwQTNGMjBGQTBGMTNECi06MTAxNUEwMDA2N0IyQTFGMkQzQjg1MEY5ODc1OTUwRjlGRTY4RkFEMTYxCi06MTAxNUIwMDA3MTNCMTMwMzAzMjMxMzdFMzVGOEIwMDgzMzAzODMwQzA4Ci06MTAxNUMwMDAxMEFCMDBCMTBFMzNGOUU2ODBCMEJFMjgwMzQzODEwNEFFCi06MTAxNUQwMDAwMzAzM0I5MEZFMjNDRUMwRTAwRTY0MTcwMkIxMTc5MEM4Ci06MTAxNUUwMDBERjAyQzQ1MzgxNTgxQzI4N0UxNjQ4NEI4OTMxMzAzQzk5Ci06MTAxNUYwMDAxMTg1RThCMzAwQjIzRjhCOTE2N0E3MTkyRjY1NkUxRTY2Ci06MTAxNjAwMDBDNTk0NjExMzU5NTQzRUFGMUEwMzgzOUIzQTAzNDM5RjE5Ci06MTAxNjEwMDAwNjg0QUY4RDI0QkYxNDI4QzZBNzA2NjFFRjk3Njc2MEM0Ci06MTAxNjIwMDBEMDA0RjI5NTY0QjE5QjdCMDAyOEFGMDU5NERGQTY4MUJFCi06MTAxNjMwMDBERkZFQ0QzQUE4N0MwNzMzNTQ3RTI2OUE3Q0EzMEIyQTgyCi06MTAxNjQwMDA1RkMzMEQ5NUFGRTMwRUExMDFDMDYyQkFDNEQ4MDMwMDE5Ci06MTAxNjUwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMEQ4Ci06MTAxNjYwMDAwMDBCQ0Q3RDBCN0M1NEQ1OTlGOEI5OEY5OUI5MzM5OTdFCi06MTAxNjcwMDA5OURDMjQxMzk4QkNFMDI2MDQwODFBNzAxMkMyNDNDNEYzCi06MTAxNjgwMDA3MDEzMjI0NjhENjE4MjY4NzE5N0JBMjNBRDM2QTI0MEVECi06MTAxNjkwMDA0MEQ2QzY0N0NERTQxRDVFMUFDNEVFMjJCODc0RTIxM0VDCi06MTAxNkEwMDA5NEQ2RDQ2MkZGQjRBQjc0MDJCOEQyOTY2QTU0QUNCNDg4Ci06MTAxNkIwMDBCNURENDg1RDZCRkQyQkJGQTBBMkQ0RDJCMkU3RkJDRTU3Ci06MTAxNkMwMDBCOTk5N0I2RjI2MDFCNERENUZFM0UzRTZEQzdCMUVERkM3Ci06MTAxNkQwMDBGOUNFRjczRURGMzk3MThBMEVBMkNFMjNFNDBDRkNEMDlFCi06MTAxNkUwMDBFNzFCODRGRTY0MjY5RTg0NzQxMzMyMDM5RTAzNzI3ODgzCi06MTAxNkYwMDAyQTNDQTNGQzNEN0IwNjk2RjYwQUE0MDA4QkZENjQyNkRCCi06MTAxNzAwMDAyMTc5ODRGREU0MzU3NkFDMTZBNzExMzI5Njg0N0UzQUIxCi06MTAxNzEwMDAzOTlGOTYwNzZFQUMyMTdFNUE3RUVCOEEzRkMyQjM2MzM3Ci06MTAxNzIwMDA3MTY1RjU2NTFBMjE1OTRCN0E1RkJEOUMzRTAzRTE5OEJFCi06MTAxNzMwMDAxMDI5MjY2NDBCMTEwOUM5ODZGRTBBQTMxNTVFNDJEQTM4Ci06MTAxNzQwMDBBMEIzMzk4NDhDODk2NkU5RDE2MjI4RThCNDQwQzhCRjY3Ci06MTAxNzUwMDAyQTdDMjAyMjZBMzIyREZCRjBEN0M0M0M4QzI3MjE0RUY0Ci06MTAxNzYwMDAxMjJGQzI4QUMyMTlEN0YwRjZGNkZBQzZEMzA3RUQ4QzRCCi06MTAxNzcwMDAzQUY5RjBGRjM1MDRFNjc3QjY3NjY0MkQxQjJGNEFGRjYxCi06MTAxNzgwMDAzOTQzRjE5MjkzMTgxRkZCQzlBQTM3OTUwOUUwQzdGQUFDCi06MTAxNzkwMDA1RDFGQzJGQkVBRkY5M0YxQjI0OUE5NUIyQkEzRjNBRDM2Ci06MTAxN0EwMDAxMUQ1MThENDI3QkQ2OTMyMkQwNzZFOTM0OTVDQTBERjhGCi06MTAxN0IwMDBDQkJBMDU4Nzc2RjY3NUU5MjBBNEJBRDc4QkY4MTVFQTc3Ci06MTAxN0MwMDA3QzA5RjhBRTI1MDJDRTY3REM1REVGRjQ3NDA2MDgzOUJCCi06MTAxN0QwMDBCOUQ0MUI0MkZBNTAwOUM5NDgxRjNFOUY2RjM3MTExMkY2Ci06MTAxN0UwMDA3Nzk5Q0E4QjJCODUwODhFMTdGQTY5MjE2RDFGNUQyQzlFCi06MTAxN0YwMDA4NjFFMDc3ODZBMTZBNUMxN0JBM0RFMzdGOTM4QzNFOUQwCi06MTAxODAwMDA4MzY4MzJDNUEzQ0NFOTQzQUUxMTc1RjdCNDJGNEYxRkRGCi06MTAxODEwMDBGMjE3QTQ4RkNDQjVBNjc2RTRGQ0Q3MEJGMTNFRTNEQzNGCi06MTAxODIwMDBFOUUzQ0I4RTY3QUNFQjcwQkU2QTQ2MzhDNkRENTVFODlGCi06MTAxODMwMDAyNjc0RkQxRkE4NUU5NDFBNDk1MjZGRTQ3NTJENDU3RUVCCi06MTAxODQwMDAwRkQ0MTAzRDk2QTRERDNBNTg0RjlDNjdENDIyNkZGMDE4Ci06MTAxODUwMDA0OUQ3NDcxQTVBREVEQjJERUIyNThEOURCOUE0NjcxNEI1Ci06MTAxODYwMDA3QzQ4MDFFQjdDOEQ3RTlEOEQ5MkY2NEUwNjJEQ0FBQTlBCi06MTAxODcwMDAwOEZEQzlCQ0JGMEU3NTU5OTQwMEREMDI2RDUzN0M0ODRDCi06MTAxODgwMDBERDI1NzE0MkY5ODMwNDQ5RTg3MTBFODE0OENCNEU1NTNDCi06MTAxODkwMDA4RkFEMTdBMDE0QzM3NTMxRTA1MzBBNDVDQjc4OEU1QzI5Ci06MTAxOEEwMDA4RjY1M0RDODkyQTg2MDg2REZEOUU4NDQzODY0NjAxMzJDCi06MTAxOEIwMDAyRUVGQzIyOERDMThEQzMwQzQ5OTA5NTBCRURCQjJGRTIyCi06MTAxOEMwMDBCMjk3QzRERDU0QUVBRTJCMkMyNUU2NzUzMEU4NTQxMDJCCi06MTAxOEQwMDAwQzNBQkRGQkRDRTQ4QTdEQkNDNTU2MzhDRkI5OUQ1N0I4Ci06MTAxOEUwMDBENkRFMzVEQTE0OENENjRFMjZFRjFBNzhBMkM4N0IxREM4Ci06MTAxOEYwMDA3RTMxQUQ3QkE3ODNFQzE1MkUyMkE0MzVCNzIzMEE2RjZBCi06MTAxOTAwMDAzQkUxN0YxNzIzN0Q4MkQwMjI5REI5QTUyQUQwMTNEOTMwCi06MTAxOTEwMDAyOUM4MDBBN0RCMjA4RjYwM0FENkVCMjExQUQyNTM1NDk2Ci06MTAxOTIwMDBCODgzNDAzREM5MUI0NjNDMTlERjQ3ODY4QkQzNUQ1NEM1Ci06MTAxOTMwMDBFRjJCQTRGRDVFQ0RCQkJEOUFFQjMzNTJFNjc4NjdDMEJBCi06MTAxOTQwMDA4MEJCMDBFNzkxMjhEMzc5N0M3ODI3RkQxRkE1OEY2ODlECi06MTAxOTUwMDA4OTEwN0I1QzE4RkVCRDA2RjQyMTk1NDczNUYwREUyNDI2Ci06MTAxOTYwMDA0RjVDODI1NTlFRDVGMDZGMDc5RTdCNzNEMjc0NEE4RjcxCi06MTAxOTcwMDBGRDIxODk4MEI4NkE3OUNFQTU1N0QxRkU1RkJENTQ4ODE0Ci06MTAxOTgwMDBCOTA0MEUyRkFENUZDQkUxM0NBQzY3RTQwMTdERjY1N0E3Ci06MTAxOTkwMDBCOTkwN0U2QjJGRkYyQzAwRTQ3QjdDRUZFQjcyMzI3RUU0Ci06MTAxOUEwMDBBRDlERUI0OEMwNDFGRjVCNjU5RTFGRkQ2RjBDOEM4MUI4Ci06MTAxOUIwMDA3QzU5ODU3NDY0QzBCNUEyNTQ0MjM4RkFFNzBBMzExOERDCi06MTAxOUMwMDBFN0UwNkZGRjcwREYyNTE0Q0VDMzY1NDJDOEE1MjFCQ0Q4Ci06MTAxOUQwMDAzRTQyQzdFQkQ3M0YwRThDMjYyNzg4MzFCRTQ2NTRDMDA3Ci06MTAxOUUwMDBBNzdERkNBMUY1NTA0MjRCODAyRkVCNTVBN0I2OUU4RUVDCi06MTAxOUYwMDA3N0FCMTQzQTA0N0E4QzhDNjVGQUExNUU5RDU0MDVFQkEyCi06MTAxQTAwMDAyMzA5OEMzRUU2MEI1OUQ4QUVENURCMzIwNkQ3NUQ1QTlBCi06MTAxQTEwMDA5QTU0NUVENTUzNDVBMTk2QzJGNzhEOTM0Njg1MzNFNjE5Ci06MTAxQTIwMDAxODFDMzBEMTc1RTM1QkY5RjcxRDM0QzEzOTU1RjAwNTQ5Ci06MTAxQTMwMDBERTREQTFCRkNDMjJCMzYwOUQzRkYyMkU0QThEOTM5MTIzCi06MTAxQTQwMDBGQjdCQkY0OTY5OTYxRDg0N0NENkE0REQ3N0QwMzFGQzMxCi06MTAxQTUwMDBGQkFEMTI2OUU4MkQxRUZFRkU0QTQxRTFGODg4M0FDMTRECi06MTAxQTYwMDAzRTMzRTYzRDM0NEY2RjAwRTlGQjU2MTBCRjk0RDQ2RjEwCi06MTAxQTcwMDBEREU5NkU5NkNERjJDNzM2OEYyMUZDN0VDMTc2NEE2MEQ1Ci06MTAxQTgwMDA0RDM0NUIwMzdFOEIyQzE0QTAxRjk5RkUzMzMzQzE4RjIyCi06MTAxQTkwMDBCN0VFQUU2MzdDNjc4M0I3M0RGMEI3ODFGNzZDN0NGQzMzCi06MTAxQUEwMDA5MUI3QTUwM0VDRDU1NjA3QTM5N0I2NEMzMUQ0NDI4NjFGCi06MTAxQUIwMDBEMzhCQjExRTA2MUVDRjc1M0QzNjBBNkVFNDBGODM4RUEyCi06MTAxQUMwMDBFQUM1QTVBM0FFRkJEOUU4RTgwRUEwQTMwQkZGRkU3NDAwCi06MTAxQUQwMDBCNDA1RTg2OEM2M0YyNDFENkRGRDQ3QTRBMzQ0Rjk3MjEwCi06MTAxQUUwMDBCNDE3MTZGMkJFRkEwNjdFRkYyMEM4RTc1RkVBMTJDQUY0Ci06MTAxQUYwMDBCRDVGQ0U2NUYyRkY5NzExMjYxN0ZCNDk2NEQzMENEMDZBCi06MTAxQjAwMDAwNzQ3MjQ5NDUzRkQ3QUFCMEZFMUE1MjYzMUNDMDNGREEyCi06MTAxQjEwMDAyRTRBN0ZBRjgzQkQzNDk5Q0FGNTI2MDU5Rjc0RjY3OUE2Ci06MTAxQjIwMDA4QkU4Rjc1NzJGRkIyQzE3RjREN0FCNzQ2REMxRkUyNjRCCi06MTAxQjMwMDA2NDUwRDc2OUZCNTc4NkNBRDQwMDg3QjI5Qjk1MDc5QjMwCi06MTAxQjQwMDA0RjQ1QzEzRUVGMTc1OEY5MjdDREE3RjQyODhFQjdCMUZFCi06MTAxQjUwMDBFMzcyOEFDRjg1RjAyQjg1NjNGMTVDNDE4RjI1QTE4QkUxCi06MTAxQjYwMDA5RjA5NEU4Njk3MkE2MkQxQUI3NDVEN0UyNjUwN0E1MUNBCi06MTAxQjcwMDBDMkFCRDFBRTI2MjQ0Q0QwM0YyQ0E0NzY4MkM5QkU2ODFECi06MTAxQjgwMDAwNDA1MDY3MkI5Q0E4NUZBQ0ZERUZGMkJEQzJFQjREQjYyCi06MTAxQjkwMDA3MThCRTc5NjM4NDA1RkI4QzIyN0U0MDFGQTVDMTgxNkVCCi06MTAxQkEwMDBCMDBDRjg1NzRENzA4QkJBQTA4MzFFMDhDRjc1M0QwMjVDCi06MTAxQkIwMDBGQTJGMkMxMzg3OUE4NDVGMTdFQTJFOEJERDc1ODJFQjQwCi06MTAxQkMwMDAzMThBOTcyNUNDNkY1MUYzRUFBNjI2RUE5RjMwRjRBRjBECi06MTAxQkQwMDA2RDNFMjNEMTg1MzEwRkEzN0NDRERDMTMwNzMzNjBERTRFCi06MTAxQkUwMDBENTQyNjgyMjM0NTRENEJDMUI3Q0U2RkU1MzBDRkJDNkExCi06MTAxQkYwMDAwNzc4RkJFNTkyNkI1MjE5MUQ0NDUwQUYxQUY0RjREM0U5Ci06MTAxQzAwMDBCN0JGRTE4MEY5OTNDNTE5NDg5NzhCNkIyNDhCM0RCOTE5Ci06MTAxQzEwMDBBODJBQzU1MkJFNkVFRTM1QTNEQUUxMjQ2MkMyODM4OURBCi06MTAxQzIwMDBFRUZEMzkwNEU5OTRGQzM3QjU1MzI4OUQ0NjJCMDcyMzc0Ci06MTAxQzMwMDA2OEI3MUMxM0I0NTY1QTRFMkQ2RjFDMEZGRERFMkRBNjJGCi06MTAxQzQwMDA2MzdEQTFCQzcxRjIwMERBNUIwQjkwRkU1Mzc4OUZBOTEzCi06MTAxQzUwMDBDRTg2M0YxNDgwNUM5RDI4OTI0NzM0QjA0NzQ3RjcwQkVGCi06MTAxQzYwMDBEQTM5OUQxQjY1NDcyMDEyMTVFODdBNkE1MUI1NTQxQTc2Ci06MTAxQzcwMDAwNURGMzE1REFDNEVFNjM3NEMxMEQ5QkFCNTQ3MTdBOTMwCi06MTAxQzgwMDA4NTAwRDA0MUFCREM0OEFCNkE0MEZCQ0ZBODRGRTk3ODc4Ci06MTAxQzkwMDA4Mjk4MDlFMzQ2RjFGRDEwMUQ3N0QxNzlEMTc2MUU2NjUxCi06MTAxQ0EwMDA4QjkwRDQwQjE2QTU5MjUxRTZEMTY2NUI3RjJBRkVGNTg4Ci06MTAxQ0IwMDA2NDcyRjY1NjBFMUZEOUNCRkEzNzY0NTI2QTNBRUQzRjdBCi06MTAxQ0MwMDA0OTdERTNEOUM5RkIzRjE1MTI0OTNGQzAyOTg3MTVFNDc3Ci06MTAxQ0QwMDA4N0EyNEE2MkVFODdFODI1NTg3NkYyQTIyQjE4NTZGMkMwCi06MTAxQ0UwMDAyOTNFNURDNTIyNEM4M0I0MTczRkEyQ0IxQUUwMjE4QTVFCi06MTAxQ0YwMDBFQkJEODFBRTZEQUU4OTJGMzdGQzQ1NDIzRkZGNTZCMTNCCi06MTAxRDAwMDBBMDE5RTRDNjg2QkU1Qjg4NDZGMUUxMDlDNjA4OTZBNzFECi06MTAxRDEwMDBERUFDMDA5RTM2NTAyN0FCMUZDNjk3N0IwOUMwOTE5MjYwCi06MTAxRDIwMDA0QjdGQTdFM0E0QTgyNEE2RDFGRTY0QUQzNzJFRDJCMjgwCi06MTAxRDMwMDA1QzRENDIzQUZERTQ1MzQzODI4N0NBODlGREMxODI2NjA1Ci06MTAxRDQwMDA5OUJFNkY1QjRBNTAzRTEyOTAxRTI2RkE2OTBCQkVBNkUyCi06MTAxRDUwMDA0QjQwM0Y0QjQ4MDgwMDZFMEIyQ0MzNzk3NjE0MkZFQjk5Ci06MTAxRDYwMDBDQUE3RUY0RkQ2QzgxODNGMjBBNzI5QkM4NjVGNEZGREYyCi06MTAxRDcwMDAwQzRGMTFEMTYxQkMwRDU5MjRFNjQ1M0I1ODQ3RkMzQTQ0Ci06MTAxRDgwMDA1NUI2N0VEQUQ2NDIxMjlGNEVCRkE3Q0RFQzgzRjFBM0EzCi06MTAxRDkwMDBERjIyOEMyRjA5OTM2QjMyOTcyNzQ0QTZGNDA3RTMzNzkxCi06MTAxREEwMDBBQUExRjU0OUU4NEYyMTkxNUJDNDE5QTY3NTU2QzNFODZECi06MTAxREIwMDBDN0RBRjE5NkVBMjQ1NzAyN0VEQjRBMjgxRjI0OTE3QjdBCi06MTAxREMwMDA3Nzg4MjJEMjQxMkNCNDY4NjE0MTkyNzFFRTE2MzU5NDI1Ci06MTAxREQwMDA0RjQ2NTkzQkU1NDRGODQ3QUE5RkE4Mjc5Mzc4MDY3NEQ1Ci06MTAxREUwMDBBRDBCODAxNzEyMEVFMEZDRDJDOUQwOEYwRUU1MEMzRTcxCi06MTAxREYwMDBERjMxQTQwMUVCMDU2Nzc3RjcwMUJGNjVFQkJEMTU4MDA3Ci06MTAxRTAwMDA4QjZGRkJBRTdCMTVENzhEM0NBQzgyMUQ0QkExMkQzQzVGCi06MTAxRTEwMDA5MzkxOTAxN0EwNzM2MDdFMUY4NTQ0RjQzQjdDNjI1Q0I1Ci06MTAxRTIwMDBENTY5MDczRTc3N0YxMDlENUY4RDYwNUMyRTE1OUE1MEI3Ci06MTAxRTMwMDA4MEQ3MzcyOTZENjA5N0Y4NDk0ODgwRUZCRTkwMUMzNUYwCi06MTAxRTQwMDBEQkY1QTk4NDk2MkRGMTE0NzJBNDcwMjY2MTIyMUZCRkMwCi06MTAxRTUwMDBBQjdEQzAzQTZBNTFDMzQ1MDBDQzE2QkZGRTVGRTAzNzg4Ci06MTAxRTYwMDA2REY0NDVEMDBGRkJDQ0VEOUYwNjgzN0REM0UzN0YwNDVCCi06MTAxRTcwMDA5RTlGQjlDN0M1RDAzRjBCMzE3RjRCQTFGRjgwQkM0QkE0Ci06MTAxRTgwMDA5RDJENUJGQzlCMzRERDVBQ0VCMEY5NjEwQjI0MkZDRTI3Ci06MTAxRTkwMDAzM0VENkFDMkZEMkJCRDY2RTI5ODA0NUMxNEEyM0FBMDQxCi06MTAxRUEwMDA5N0NENTUzMjAxRkZERkVCNjVGMDE4RjA2NTQ4RjdDQ0IwCi06MTAxRUIwMDA0MkZEMTg5MjhGMDExQzE0MkQwOEM3NDk3MjNBMEU0QjJGCi06MTAxRUMwMDBFQzJGMjIxODNGQTU3MDFEQjNDMTc1Q0MwNkQ3MzEzMzU2Ci06MTAxRUQwMDA1QzhEMEE5QkFGREQ1RThDNTY5MkEyMDYwQURDMEIyMjVCCi06MTAxRUUwMDBGNzNGQThERDA0NzZFMzQ5RjI4MTVFMEQ4NDEzQkUxMjRDCi06MTAxRUYwMDBGNUFDNUY2NTZEQkM0QTNGMDYyQjU0QTIyMjFERDhFREEwCi06MTAxRjAwMDA0NkJBNEUxRjU5RkNBRkQ5QkNBQzExMDFFNjQxRTFCNDUxCi06MTAxRjEwMDA3RTI3Qjk0ODJGNTg5NkM4NTA1Qzc4RDk2QzAzNUZEQTkxCi06MTAxRjIwMDA1NzdFNDNGOUVGOTY0MzBFMDJGQzQ1Rjk1ODgyRUYwRUI3Ci06MTAxRjMwMDBGRUY1MTYxRTFGNUUwNkZFMzVDNURGRDc0OUQ4MEZGMDI5Ci06MTAxRjQwMDA3RDQ4NDQ4QzQzN0Q0ODVFRjM0RjM3QzlDOUUzMjJCN0NGCi06MTAxRjUwMDA0RjYwODlDRDdDNEM0MjQxOTBFM0IyQjdBMzVGRjIyMzNFCi06MTAxRjYwMDAxQTBDN0ExM0NFRTAzQTg2OTg5Q0Y3MzJCQThCMTJBNUY3Ci06MTAxRjcwMDAxOUY1NjExN0YzM0Y4RDc4RUE0RERENTY3RkY4MUI1QjRECi06MTAxRjgwMDBBREU1OUJDOUEyMzExMDJGQkRGOTQxMDc4OUQxN0U2RjA0Ci06MTAxRjkwMDAzMUZCRjc3NDlEREUxMDU1ODRFRjFCQTRBMTAzRUM5Mjc2Ci06MTAxRkEwMDA0RTA3QjMzNzk2QTk0NDg2RjhFNzhBRkZGNzFGMzM2RkM5Ci06MTAxRkIwMDBBNEYzMzkwOUYyNjAwNkQ4RUYxNDdDOTMxRTU5MUU4OEU5Ci06MTAxRkMwMDAzOUY1RTJFMUYzNkIxNTQyQjU5NzA4MjNDRkFGRDNEMUQyCi06MTAxRkQwMDA1RjBCRkU3Nzc0OTMwM0VENEM2MjhGODNFRTkxMzAwRUFFCi06MTAxRkUwMDA2QTZBODdGMDdFQURDQjNBQkZCM0NEREYzRTVGNDIxRTVCCi06MTAxRkYwMDBDMEY5MkVERjc5MjNEQUU3MjNDREM3QjkzM0I5QkRFOUJDCi06MTAyMDAwMDA5NTA0NEJEQ0M3RTA2QjgzREVFREZDNUQyNjY5MkNBRUVFCi06MTAyMDEwMDA0M0Q1MjBEQTJCQkY0Qjg5QjVFMkZBMzZDQzgyRjUzREE5Ci06MTAyMDIwMDA1QkZCOEJBMTdERTYxNzZGNUZGRTI1Qzc5RjdGOTZGNjUyCi06MTAyMDMwMDAyQjk0QzEwNUIwREVFQjAyREQ2MUUwNEYyMzhFQjU5MjNCCi06MTAyMDQwMDA0NEY1MUNGQUFCRTNGOUQ1NTEzMEREODZFQTA1Q0ZCMTkyCi06MTAyMDUwMDA1RTJFQUQyNzlENDNCREMyRDFGQjNCQ0VFRDkyOTc3NjYwCi06MTAyMDYwMDAzRkVBMDQzQkY1QzNBN0RFQUUwNTNCRTBENkZGOTQ4ODBDCi06MTAyMDcwMDA0MkU5RTFGODZFMUY4OUEzQkQxMjczODI3REIzOUNEMjQxCi06MTAyMDgwMDA1RDBDQ0JGMTk5RDc5OEVDNjE0QUQxQjgwRUI3M0VFMzFECi06MTAyMDkwMDA0MzNCNjJGOUIzQUU1ODBENkRCRkZDODdCRjlGNDYyODI2Ci06MTAyMEEwMDAxRThFQjcwQ0ZFNTcwRUQwRjM1MzAyOEJCQjQ2MDdBNjBECi06MTAyMEIwMDA1RDQzREYyRjk3QzlCRjg0OTNEMEQxOEQxMkUzQTcwRjYzCi06MTAyMEMwMDA3RTk0QjIwNEVDNDQ2MTY3REYwREQ4NkZFRjU3MUMyRThECi06MTAyMEQwMDA5MzNFNUUyMjM5NzA1QzVBMEZGRDg4RTgyRTIxMzY1MUZFCi06MTAyMEUwMDA2MEYwOTlGRDAxMjNERUZEQzEyRTgxQzFCN0Q3MTE3M0M4Ci06MTAyMEYwMDAwMzdDM0I3QjlDMTE1QTZGRDVDRTEzNDhEN0YzOUZGOUQ1Ci06MTAyMTAwMDBBRTFGRjBCMDZBQUZENTRFNUZCNTUzOEFCQkE2RTFGMzAwCi06MTAyMTEwMDA2RDc4ODIwNjE1NjYwMjNFMTkzRkFGRENCMzAyRjVDNjQ0Ci06MTAyMTIwMDBDQURFMEQyNzgwOUY1N0VENzU1OEU0M0ZDNTRCMjgwRTNBCi06MTAyMTMwMDA3ODdENTMwQUQ1NDBGOTA3NEZGQTM1OEFBQUY3RkIxRjc1Ci06MTAyMTQwMDBGNzAzNUU2OUJGMzczQTI5NUQyRDlDNkQ2RDA3RkQ5RkQyCi06MTAyMTUwMDA0QTFGREUxRkY1MENEMTZGNUVENUJCOEU4REI3RTdFQTQ3Ci06MTAyMTYwMDAzRjgwQkM1RDQ1OTg5RTMyRjhGOTdERjgyNTZCQjg5RTlFCi06MTAyMTcwMDA1OTI3NTlFMzVCMjdDOUUxOTlCODBGQjgzMzIzQTlGRjYxCi06MTAyMTgwMDA2Q0U4MTU4M0FGNkZGREVFQzkxRDUxM0FGRTA3Q0ZGRTE3Ci06MTAyMTkwMDBGRjFENTEzQThGREJGRUZBRjE4RUJCRTlGQ0M4M0VCNzVBCi06MTAyMUEwMDAwQUYyNkFENTUzNkZGODg5MDlGRjhGNDk2QzNGRTBGODRFCi06MTAyMUIwMDBBRTI3OUZEODQ2RjlFNEY4QUY1QzY4MDcxRTdGRTEwRkIxCi06MTAyMUMwMDBFMzM0M0FGRkUzREZGRkQzMThCMDUzRDdCRTcwRDk1OERBCi06MTAyMUQwMDBDMEM3REFFN0U2OEYxRENENUUwN0JBOERCOUNDRUIxQjIxCi06MTAyMUUwMDBDM0ZFQjVCRDAyNkM4MjEwRjIzQzdGREFENkU5QzAxRTk4Ci06MTAyMUYwMDAyOTBFMjE4MjBGOEZCQTYyMkU4QTlGNTVGNDVENjMyOUMyCi06MTAyMjAwMDBBQ0RCMEFENDU3NTBCRTg3RTI3QkU1RUVDRTEzRDJCNEU2Ci06MTAyMjEwMDA2NDc4OEZFNjg4NDE3OEM2NzM0ODEwRDZGRDlBODU5NzEyCi06MTAyMjIwMDA5NkMxRDMxMUQyODA0RUM4MjBFQTA5N0JCQjU1NDdFODNFCi06MTAyMjMwMDBGQTVFMzRGMjdBNTI3QkMyMDlGODVGQjU3QjFEMUJCNzk4Ci06MTAyMjQwMDA5N0FFQTc3RkY4N0E3RTA4QkY1QzNDN0MzRDBGNDhENkVFCi06MTAyMjUwMDAzOEQzNDk3MkRCNzdCNkMxQzczRDE5QjhGRTIzQURFNzY1Ci06MTAyMjYwMDA4QUU3QUUxREQ1QkYzM0U0QzNEOUYwNUMyRjMwQjhFRTlBCi06MTAyMjcwMDA5N0Y0RDcyNUUwQzc2NzlGN0U2MjVCODBBRDczMEQ0NUZECi06MTAyMjgwMDBDQ0YxRUY5RTFDMDc5QkJDRUYzOTA2NkYwMDM5MzlGODgzCi06MTAyMjkwMDA4MjRCMDVCQjdBRjkwQjZGMjJERjFEN0ZFRTU1QTc4NkI3Ci06MTAyMkEwMDBGQkQzQzQyQjUwM0Q3OTlDMENGREY0ODNERTVDMjlCMDNDCi06MTAyMkIwMDBDMkFBQzc3QzcxOTczRkIxNUUyQjYzNzVENTlBMUZERkE5Ci06MTAyMkMwMDBCRjhERUY2MzhDMUY1NkM2RkExNjBCNDlENkNGMkIxNzVFCi06MTAyMkQwMDAzMEZEMTRDQjQ0QkNBQ0QwRkE5REFBRDdCQUFFQzI2Q0M4Ci06MTAyMkUwMDA1OENGQjcxNzAwRkQ4REI0OUVDNkZDNTU5OEZGMkNEMzcwCi06MTAyMkYwMDBCQTNFQzZGODc4MjQ3RTNEREVFMzkyODVENEUxRUI3Q0RECi06MTAyMzAwMDA5Q0RCMTVBQjYyQzI5QkM5RDY5RDkwMTYxNkRGMUIyMUM0Ci06MTAyMzEwMDBFRTZEM0NFRDc0RTE5NEFEN0M2RUI0MzdFNjdGMzYzRUY1Ci06MTAyMzIwMDAzRkZCQkNDRTBGNkYyN0I5QkVCNkUzRUY4M0QzQzlGNTMxCi06MTAyMzMwMDA0MDgxMkM3MEJERDU1RDlENkREMjc3NkUwN0Q1NjNGOTU4Ci06MTAyMzQwMDA2MDc3MzY0NDczRjIxM0YwNzZGNDRBMjhERjNGRDgyOUQ5Ci06MTAyMzUwMDBBMUJENkY5NzEzMkI0N0YwRUI0M0M2Mzg3QkZCQTY4MURCCi06MTAyMzYwMDAzQ0ZCNjBGRjhGMzgzRDMyN0E1RkI5RkI2RDY3OTRFQkMxCi06MTAyMzcwMDA4NTk4NTkyRjQwN0Y0OUQ2NjMwRUVGNkZENUYzQzlGQjdGCi06MTAyMzgwMDA1QkI1RkI0NEQyRkVERTk3RjVBRjAwRkNFRkY3M0I0OEIwCi06MTAyMzkwMDA5NDc2RjE3RUFGOTQzNDRFNTIyODNCMkM3NjU2ODc2RjVDCi06MTAyM0EwMDBFNkQxNTREQTRFRjI3QjM0OTg3NzZCOEJGRTY2MTRFQ0YwCi06MTAyM0IwMDA5MUQ3MUMwNEVENDczOUY0OUU4QjdFNkZGNTc5NzBCRjgxCi06MTAyM0MwMDBBNUQ1N0YzM0QxNENGQUJCQ0Q4NjI3MzkxODQ2M0Y1QTY1Ci06MTAyM0QwMDAwRTg0Q0JEODVFNjhDQ0UyQ0YzQTU0RDEwMjM3OTFBM0I5Ci06MTAyM0UwMDBCOUIwQ0ZGOTcyRkUxRjY0RTgxN0UyNjk5QTI5MkVGNDlBCi06MTAyM0YwMDA4QTRDREEyMTlFRjY4QTJFODQ5QTQ5OTJCODk2QURGRkNECi06MTAyNDAwMDBGMDVDODk2ODY2M0FEM0M3OEJFNkY4QTI3RkZGOUQxODE3Ci06MTAyNDEwMDBENzY4MjQwRDcxODgzNzkxNUNEMkZCQjhBOURGODc5QjAwCi06MTAyNDIwMDAzNDE2NzcwRDhGMTdDREYxM0Y1NzQzODNFRUEyNzBFNDNBCi06MTAyNDMwMDBBRTU1MEJDMDdGMUI2OUZDQkMwNkVCQkVBRjMxRkUxQTZDCi06MTAyNDQwMDAxRThGMjAzQjlGN0FFQTI5NUExRTBGREY0NEEwQzNCMDlCCi06MTAyNDUwMDA4RTcwOUM2NkZCQ0FGM0I5M0M3Qzg5REJDRkZCMDU3MkFFCi06MTAyNDYwMDAxMEVDQjBFQTdCMjIzMkM4M0IyMTc4MjNDNjQ1MTdFNDQyCi06MTAyNDcwMDBERTI4MkYzM0QxRTM4MkUwODkyQ0QwQUJERkY5OEJCNDk3Ci06MTAyNDgwMDAyNDE5OURFRUU1NzRENUZDQUQyN0IyQTBGRDM2Rjc1N0IzCi06MTAyNDkwMDA3Mjk5MzMxQjQ2Rjg3Mjc4QkNFQjYwRTZFNTVFODhFRjE0Ci06MTAyNEEwMDBGNUREQjJFMEYwMjQzQURGNkM1NTIyMTBBRkM5MjYxNUY1Ci06MTAyNEIwMDBERTEyMEE2N0NFMTEyOUU0NEVCMjBFQzY3MzA3OEZFQjA3Ci06MTAyNEMwMDAzREQyQTRBMkZDN0ZBQzI5ODhFNTI3Mzg1RTc3MzYxNTdCCi06MTAyNEQwMDBFMUYzQTlBNjEwN0VERkREMzQxQkNCQkQ0REQ1Rjg3QzIyCi06MTAyNEUwMDBCNjI5OENFRkZENzdGREI4Q0YwOTc4Qjk5N0Y0NDJCQ0Q3Ci06MTAyNEYwMDA2NjRGRDMxMkZDRkVDM0E2MDgzRTFGRTdGMzU5MDA3OENGCi06MTAyNTAwMDBGMTVBRTY4RkYxOThCRDZERjM1QTIwMUU2M0UwRDE4RTJCCi06MTAyNTEwMDBGNzc5MjQ3QUQwODVGQkY5ODIwNjc4QkY1MzY2RjJDNTM1Ci06MTAyNTIwMDA4RURGNzFBRTVFMDFFNDRCRTM2RDA0RURENzFEM0M2RUIyCi06MTAyNTMwMDA2Q0NDRjcyMTk5RDk5QjdCMzgzQzNGNzQ0N0JFMjdDM0FECi06MTAyNTQwMDA3RTUzNzU2MTMxREE0NTI0MUMwMkY5QkQ0MzA4QTc5NjE0Ci06MTAyNTUwMDBEMDJBMkY2NkNFMEE5QUU1NzBCNjJGQjI0NzM2RUQyQkY5Ci06MTAyNTYwMDA4Q0VCNjJGMTlFNkQzMjkzNTdFM0I1MTM3RDY5MTQwRkM2Ci06MTAyNTcwMDBENUI5ODIwNkUxMDQ2M0JFRkIyQkI0NUM5MDkzRkIwNUU2Ci06MTAyNTgwMDAwMUQ3QkIzQTU3MjI0NTI2QkEzN0ZBRkIwRjU5RTRGQjZECi06MTAyNTkwMDAxQkM5RTU3NjgyOEU5OTNDNDhCRjQyMkUwMkJGRjYyNEM1Ci06MTAyNUEwMDBGMTg0MjRDQUVGRkJCMkM4MUU0MkVEOEY3RDQwOTcyMDE0Ci06MTAyNUIwMDAxNzdFOUI4MjcxNjJDM0JGRDlDOEQ3M0IxRDg4MDJGMkM4Ci06MTAyNUMwMDAyNURFRjJDNTQwRkU4Q0U0Rjc3NEYwRkExRjcxQjg1NkIwCi06MTAyNUQwMDBDOEUxRDc2NURDNTdFNkYxNTcxMkM3MzgyNkE0MUMwMUJECi06MTAyNUUwMDAzRDZFNzMyRkJEQkY4QTNFRUY5QkYzRkU1MTg4MEY3RTc5Ci06MTAyNUYwMDBGODlDNUIwM0I4MzY5NTFERjM5QkYxNDhFQUU1MEZDQ0Q4Ci06MTAyNjAwMDBGQkYxNDNGMkU2NTQwRUM2QzVGRTg3NDRERTk2Q0Q3MjVBCi06MTAyNjEwMDAyODMwRTg4NEY2RkIwNDZEMzNFQzVGNDdERjkwOTBGRkQxCi06MTAyNjIwMDBGNjA5QjEyOTE4Qzc5MjA5RkEwNUZCNkUwOTYyN0U4NzdGCi06MTAyNjMwMDBEMUNFMTdCMkYyNzdCQTdCNjBGQjJBOTg3N0JEMzMxNEZDCi06MTAyNjQwMDA0REMyMTdCRjRFRDEyQ0ZCNDZBRUEwQjU3RDEwNzRFNjJGCi06MTAyNjUwMDAwQzU2RDYyODdEOTZGMDc5ODc2NDVEMDIzODY2OTAwODFFCi06MTAyNjYwMDAzRTY3MTEwRDlGNTk4RUM4RTczMDhGRTlBNDM3MEJDQTFBCi06MTAyNjcwMDAyRDI5RTMyRTYxRkIwNzdGMzdCQzI5OEU3RjQwQkMxOUQzCi06MTAyNjgwMDBGNDFBOUM1Mzg0NzA5MEJCQzREMDQ0MERCRDQ5MEI5RDdCCi06MTAyNjkwMDAyRjc0MDgxQ0JGMEFDQUYzRUNBMUZEQTk4Njk3RjIwMkE5Ci06MTAyNkEwMDBEODBEOEI5M0E4MjkyODA3QjNERDBDN0Y4RDAzMjczMDI1Ci06MTAyNkIwMDBCRTFCMUM0NzJDNzFGN0Y2N0ExMUY5NjBEQjVCNkM1RjZGCi06MTAyNkMwMDBFRjY0N0RDMUU2NDlCNDdFMDVEMUVFQUZDQTFGM0UwRjZGCi06MTAyNkQwMDA4MzNGQjYyOUUxRDQ2NEZCNTNDNkQzRTAwQkEzQkM3OTk2Ci06MTAyNkUwMDBGQzBEMDRFNEQwQkY4RkJGMDFGMzhFQjJERjcyNkJFMDRDCi06MTAyNkYwMDA3NzU0RkM2RTU3MzNDOEM1RjZCNzU5N0VDNTUxNEY2NDQxCi06MTAyNzAwMDBBRTYzNDY0MkNFQjRERkQyMzAxRUZDMjBCNzJGNUMwRTQzCi06MTAyNzEwMDBFRkMzQjlCMUVCNDFERTlEQUM1RUVCQzJBOTdCNTlERUU0Ci06MTAyNzIwMDA0QkUzM0REQUU2QzlEQUM4RUJCM0EzNzFGNEZEMUI2M0YyCi06MTAyNzMwMDA1RTNCNjA1RUEzRUM1RjE4RjMzMkQ2RUI2NEY1RTJDMTVBCi06MTAyNzQwMDA5QjM1OTAzMzg1QTk5MTI0RUQ4NkU0QzkxNThCNDcxREVGCi06MTAyNzUwMDA3RjA3RDcyQjc0RkU0QkNERjQzOUFFNTFDNUZDMTZBM0MxCi06MTAyNzYwMDBCRDMxNUY3QjdCRkI3QzEzRkJDMEU3OTYxN0Q0RUIyMDZFCi06MTAyNzcwMDAxOTQwRUZERkZGRjNCODFGQkM4MkEyMzEyQzgxOUVBNjY3Ci06MTAyNzgwMDBGQ0I5MTJFMDk5NDkxQUIwNENFNERFMkNCMDZGMEM3QTE3Ci06MTAyNzkwMDBERUQ2RjE0NDE2RUEwNTM5OTY4RkY5NURFNzM4NUUzQkRGCi06MTAyN0EwMDAwOTg3MkI4MERGNDI2MkM4NkNBRjE4Q0ZENjIxM0E4RkUxCi06MTAyN0IwMDA2MzVDRDVDNUU1ODA5ODcyNEYzMDE5OUU4N0ZBQ0ZCNTE2Ci06MTAyN0MwMDBGMkZGNDY0Mjk4OUM4RjJCMjhFNzIxNTBBOEQyNzJGRTM4Ci06MTAyN0QwMDAyMTUyQkE5RUY2NTcwRjQ5QTE3NDlDMEE5OUM1NDNBNjg3Ci06MTAyN0UwMDAxRkQyN0EyNDE2NTc5NUVBN0MyNjNDRjJGRDA2MjNCRUJBCi06MTAyN0YwMDBEQjRFRUUyMUFBMDY3RTQ1NDkxRjU0MzdGOEY0ODAzMzlDCi06MTAyODAwMDBGMkEwMDNGMkYwODIxQUU2N0IzQTAyMTE4MUVEQzdCMTIxCi06MTAyODEwMDBGREExMjI2RTk3NUMyNjJENTVDMDJFNjkyNDYxRTUwMjJDCi06MTAyODIwMDBFMERCMjMxMjYxNzk3ODhDQUY1REM2M0UxOEU3NjMxNzUxCi06MTAyODMwMDBFNzYzQ0FDMTU4OUVDNEJGM0ZDRkU5NkIyRkQ4Mjc2ODUyCi06MTAyODQwMDA0RjMwM0FEQUMzRUQ5M0FBQzFDMTAzM0VEQUFFQThCRjU2Ci06MTAyODUwMDBCQjEyQTZGMzJDRDgyQjJFQjA0RjQyRjhGRDdCNjBBRkY1Ci06MTAyODYwMDBEMEYyODFCNDdGQkZGMjAyOEE5NzlEQkExODAyNUNFRjYyCi06MTAyODcwMDA2RUQyMTkzRjM0RDVFM0Y3NDYxMkY1QUMwNkI5RjRCMDgxCi06MTAyODgwMDBBODAyOUM5RDBGQjc0ODdFNUFERUE1MDgxOEJGNzhCOEVECi06MTAyODkwMDBBOTAxRUJGQjRGN0JFMkUwNkZFRTUyRTIwMkQ4MjMyNzY3Ci06MTAyOEEwMDA0MzI0MTQwNUI4QTk3QjA0RjM5QUM0RTc1MUYxNEUzRkMxCi06MTAyOEIwMDA2RTk3M0YxMUZCRThGN0Y3RDM3QTVCNjY3QjcwOUZDQzhFCi06MTAyOEMwMDBFMEFGNDk4RDgzRUE5NUMwNTc4RjFGRDM1NjAzRkMzMzgxCi06MTAyOEQwMDBENkU4NTA3RjYzQTgwMEY3Mjk5RUE0Rjg4Mjc1REFCOTdDCi06MTAyOEUwMDBGNUEzQURGREY0QkI1RkVFNUMwRDdFRjBFNEJDNDU2ODg2Ci06MTAyOEYwMDAwRkY5OTU3RkJGMURDQTdFRjVFOTdGQzVBN0YyQTM2RkNCCi06MTAyOTAwMDA4MkJFOUUxQzEzMkRGQkU3N0VFNUU3NzdDMkY3Q0E4MUU2Ci06MTAyOTEwMDA1MDU1MkFFRDY3Q0E5MUZFQUUyQkU4QjMzREI0NTYwNDdDCi06MTAyOTIwMDAxMjRGNERGRjIzRUU2QkVDMTdENEFGNzc0MzVDRUQ0NkFGCi06MTAyOTMwMDAyN0QyQUI3RTU0NkYwNjc2NzQ5NDU5RjMyMDMzMEY0NzM5Ci06MTAyOTQwMDAyMDZEODE4QzNENDhGMTRFMDBFRkJBMENGREJFRTdDODBBCi06MTAyOTUwMDA0NzNBMEJGQUIzQUFGQ0I0RkNDNDYzQzc3RTdBMDVGRDAwCi06MTAyOTYwMDA3RTYwRUIxQTk0OEJBRTg3NjVCNEM3MjZGRkM3NUFGMjE4Ci06MTAyOTcwMDAwRDkzOUM3MDNEMjYyN0NEMkI3RENGRTE2MjdDRjRGMDNBCi06MTAyOTgwMDBFMkVFMjkxQTIzNEZFMEJGMjk4RjU3MjkyODI3MEU1QjMzCi06MTAyOTkwMDBGMzFDOEM3REUxMUUxMjc5Q0Y4MUY0Q0NFQzEzNTk2NUM4Ci06MTAyOUEwMDBGQkM4QjBFNzA1RkI4OTY0QkJDOEY4MjQxQ0YxOThGM0E5Ci06MTAyOUIwMDA5RjhCMUUxMkMzQzlFMkRDQTcxQzMyQ0VBQjJENTY1NTJECi06MTAyOUMwMDAwNEVCMjA5RkI5MDNGN0M5NDhCNzc1N0M2MzNDM0FGRTE2Ci06MTAyOUQwMDAyOUIzN0M5MzU1MDY1NzFFQTg3RUJBOUU3RENFREY2NDMwCi06MTAyOUUwMDAwMUZDQTcxQTBDM0QxNTQ3M0Q3NUIwNDQ4QzhGQTdGMDJDCi06MTAyOUYwMDAzREYwQTAxODgzQTRDQzAzRDU0QzZGNkQ5MjU5QkVFMDc2Ci06MTAyQTAwMDAyNjVFN0VFQzM0ODkwOUY5MDkzRTlBQ0NGOUVEQjE4NzRFCi06MTAyQTEwMDA0NTY2Q0ZDNTA4RUEzOTcyRkEwQ0RBMTc1RUZFM0RCRDhECi06MTAyQTIwMDBFNDM1MDVGNzI3QTJCQUI3NjIyNjY2MDVGMjFGMTNCRDgzCi06MTAyQTMwMDA1MDFDNUQxNEY1NThFNEFDRDg5ODZFNTlGRjNDNkFCMTRGCi06MTAyQTQwMDA1OEYzQTkwQjEyRjUyNTkwRTM0NzE0QTBERjkzRDQ2RjM4Ci06MTAyQTUwMDAwNUZBOURDN0Y3ODlBQThDM0M0Q0U5RjQ3NDk4RkY3Njc3Ci06MTAyQTYwMDA0M0NGMUE3OTMzQjYzQ0U5QzcxQjk2NzkyMDVFRjhBMkFBCi06MTAyQTcwMDA0MTNGRjUwRDNBRkEzRkFBMEJDNzMzRjYwOThCNkUwQkFGCi06MTAyQTgwMDA0NzQxN0YzQTcyQURGOUQzMTVCNkZDRTg3OUI2RjJGOTUxCi06MTAyQTkwMDBDNjU3NEE5REY2MzhFQUM2Mjk0ODA3OUExRkU1NTUyMUM4Ci06MTAyQUEwMDBDN0YzRTMxNzUzNzczRTc1Nzg5QzY1QTg1RjFFNDcyMEYwCi06MTAyQUIwMDBERDdFNUNCRjQyNEU0MEY3REQyNUQ1ODM1RkUwN0ZBMDIxCi06MTAyQUMwMDAzNENEOUM1RjcwQjk5M0Q5REQwNzdGRUIyMjYwRTdFRkNGCi06MTAyQUQwMDBBQTUyMzA5RTY5RTQ3NTNBRjhCOEI1NEUwREVCRUQ3QTFFCi06MTAyQUUwMDBGMDBFMDVEQTc3MDYwQURDODBBRjAzNzM5NjdCMzBGRkMxCi06MTAyQUYwMDA4M0U3QTcxQTcyQjc2NUNFRjIyQjZGMDE3OTk4MjlBMkU2Ci06MTAyQjAwMDBFRTY5Q0Y2REM5ODY3REY5MDdBQTE0Q0MzRkY1QTcwQ0Y1Ci06MTAyQjEwMDBGNDFFQTA2NUVGOTNDRUQwMjNGNEZCQUU4QUY4MTI3M0I3Ci06MTAyQjIwMDBEQ0U2MEUyN0QzNUZENzNCRjkzRUQwNDY2QkZFMDZFNUM5Ci06MTAyQjMwMDA4M0VCOUQ5MDFGRTY2REMwN0Q0QjUxRTE3OUJDMzZGRjY0Ci06MTAyQjQwMDBERUMwODc3RkZGRjU2MkJFOEYzRDBCN0NFMDhGMzJGQURGCi06MTAyQjUwMDA4ODcxRkFEOEMxRkREMzg3NDFGRUJCODA2RTk4RkNERjM3Ci06MTAyQjYwMDBDOEZENTM3QkJGMTNFQkMzRkI5RDYwODdEREE2OTY0Mjc4Ci06MTAyQjcwMDAyOENBQkVCRTEzQkFBQ0Y2NDQ3RUQ0MkFFN0M2REJFOTQ3Ci06MTAyQjgwMDBCRTIxREI1MjNGQTdCRUMwRjJERDE3QkFDMDY2OUZDNEFDCi06MTAyQjkwMDA5OTVFMjM2QzdEM0FERERFMDkyMEI3NEJBOURFNjU3NkIwCi06MTAyQkEwMDA4NjJBODZDREZCMkEzNkJENUVFRkQwOUI5Q0U3NjFERjhGCi06MTAyQkIwMDBGODUzQzIwREIwM0U3NjdCN0EwMzVGOUZBRkNBRkEzQUY0Ci06MTAyQkMwMDBFNzBDRjRERjM2QzA5M0RBQzczQzVGREQ2QTdGMEM4MzI1Ci06MTAyQkQwMDA5MzUwMzhBNzhFMEFFNzgzRTcwM0U3RDlGNkQ5RUNGQkQxCi06MTAyQkUwMDA2QkRGOTRDMjVCNUZBMUNGRjI1NDk2MEZEOUVFNjNGRTA4Ci06MTAyQkYwMDA3QzNCQzQ1MTY5RjlDNzlDMEU5Rjc2NEFEOEZGNUUzRTY0Ci06MTAyQzAwMDBERkYyMTQ1QTNGMDk3RjFCRjFENUU3MjFGMTA2RUE4RDY3Ci06MTAyQzEwMDA0RDlFNjcwOTE2MTA3RUNGNDlGRUZENzkyN0RCQ0YyRTJBCi06MTAyQzIwMDAxRjNGRkEzOEZCNjAxQ0ZBRENFOEQwN0ZFNDM0QzVGMUMyCi06MTAyQzMwMDBEQTlDRkE3RjlBQ0I3MTI3REI3RjFFNUExNzlFNDc2OTcxCi06MTAyQzQwMDBEODYzNzczOEY0M0U3M0ZEQzREMzJBMzc4RDdEOTA0QzFBCi06MTAyQzUwMDBCRTlFM0VDMkY4RUZDNTI1Q0JENjREQTRGQ0VDQ0NGNTBDCi06MTAyQzYwMDBBMkZEOTNCOUE0NkRCNUU4ODdGQ0EzN0UxNUZDODE0QzQ5Ci06MTAyQzcwMDBCRThGNEYxNjMzMzk2QUVDQUJBN0Q3NThFNUFBRkRCQzE3Ci06MTAyQzgwMDA5NThCRTdDNUJCRUNFNzZDQjg3Q0I1RDNFMzQ4RjJGNUIwCi06MTAyQzkwMDA3NzRFRUJCRUM2NTBGQzdBMDRCQUIyQzdBRjFCRTE1NzAxCi06MTAyQ0EwMDA2NjY3NzIzQjM4OUNCQTY4RUFDOEY0Rjg3MkQzRTBBNjRCCi06MTAyQ0IwMDA4MzEzMTNFNTU3RTBGQzRDNTIzQTYwRkI4OUZFRkQ3RjFECi06MTAyQ0MwMDBBQzU5NUMwNkZCNzYyQzlFRDZERjE0MkY3RjY3NjI0MkUwCi06MTAyQ0QwMDA3RTg1RTdBNkJEMDg3MUNGNzA1NTFBQ0E5QkRBRTBBN0JBCi06MTAyQ0UwMDA5QjBFNTI3RkJDNEVFRjJCN0ZDNzM0Q0Y3RTk1NDIzQjZECi06MTAyQ0YwMDA2MTE0M0VEMTFEOUY5QkY5RUI0OTgxRDE0RjNCMUZFRkUyCi06MTAyRDAwMDA3RThFNEZCQjFEREQyOTQ2NUREMEVGMjc2NDQwMTc5MkI0Ci06MTAyRDEwMDBGOEI1RTY3OUI3MjFERTA2QkM0MDY3MjNDRDNCRTQ2MjE3Ci06MTAyRDIwMDA3Q0U1OUZERDEwODIzODlERUI4Qzg0N0NFMDFBNkZEOEE3Ci06MTAyRDMwMDAyRDIxQjQ1QkE2QkJEMkQ4QjkwRjZGMDFFRUUzNTEzRjkyCi06MTAyRDQwMDA3REIwMEZENkMxQ0JGMkZCMERGREY4QjExMTRGRTU3QTg2Ci06MTAyRDUwMDBFRkY2MzQ1NkRFRDBDNEUyQzdBRTAzMTdCRkE5RDE3NjcyCi06MTAyRDYwMDBCRUMzMEVFMkE2RUZENzUxQjkwRTcxQzAyRTZBQzdDMzFCCi06MTAyRDcwMDA3NzdGRDkwMDgxMzg3QTJCQUQxRjMxRjlEREFEQTE0QUJCCi06MTAyRDgwMDAxNUVDODRCNkUyNTI0NUEzREZBNUE5NjU1ODk2RjM0QjJFCi06MTAyRDkwMDBENTRBM0FFNjA1QUU2RkNGQ0Y4NDM4NzhBMTg4NzlCNUE5Ci06MTAyREEwMDBDNUI0REM0QzREQkE1NDk3OEFGMzdCQjlFODFEMkZEOEQzCi06MTAyREIwMDA2N0E5RTA5Q0NGNDhBQ0E3QTMyQ0EyNEIxNDFFNDc1MDk4Ci06MTAyREMwMDBBRDg0NUM4QzIxQkRDREU5OENCRTdGMDRFMjI1NEYwQTI5Ci06MTAyREQwMDA5MTk5MkUzQUZGOTdGOUY5QUI0RTY3NDNEMTFBRjA3QkUwCi06MTAyREUwMDBFNEE4MEJFMjA3OEQwQURCODcwMDdBNjg5QjlFODA3QjU0Ci06MTAyREYwMDAxRUM3QUY5MzhGM0JFNDA3RjFGNUZDNDQxRTg4NDI2QTdGCi06MTAyRTAwMDA2QkE3NDhFQTkzQURDRjE1MkUyNkU3REE1NDVEMUQ5NUUyCi06MTAyRTEwMDA5RTU0Rjk3MzRCRkVGNDVDQzY0RkNFMDBBNUE3MjRGMTc3Ci06MTAyRTIwMDA0N0JCQkMyNkFFNzA5RDJCMzM5MUFGNDQxNzU2NDUzRTMxCi06MTAyRTMwMDAyNUNDREUzM0NFRjdCQ0UzRDRBRjc1RDE3OTdDQ0JDQkQ4Ci06MTAyRTQwMDBFNTU4NkUzQUQyMjk3RDVGRTlGOTQyNzI5RkM1NjdGNjZGCi06MTAyRTUwMDBDRjJEN0JCNTBBRkM5MjdFMDdDNjhCRkMxM0M4QkY4NEJFCi06MTAyRTYwMDA0REYyRjY5MDBCODM2RUY0QzlFQ0E0RjU5NDNFNjI5Mzk4Ci06MTAyRTcwMDA1OTVDODIwMEREQTQ1MDQ1MENGQjkwNzk2MkVDOTE3QzlBCi06MTAyRTgwMDA4MEI3QTc3QTAyRURBRjUzOUU0ODJERjM0NDNGMTU3OUUyCi06MTAyRTkwMDBDQ0ZFREY1NEU5QTkzN0ZCMDFFRkE1QjBGRDk3QjVERTA1Ci06MTAyRUEwMDA4QTY3MDEwRkM1REU1ODI1QkFDRjkwOUQzOTg2OUQ5RjUwCi06MTAyRUIwMDAwMjNBQkU1MDI1MDM4MjA4NzIzMDRDOThERTBDMjk0QzMxCi06MTAyRUMwMDBCRjU2QTk3MDVFNEEyMDExNzIyNjY1MzRGRDY4M0Q1N0QxCi06MTAyRUQwMDBGNTk0MUM2QkYxMDAzRTAyMkNERUU1REIyQTYwMzJBMDhCCi06MTAyRUUwMDBENEFCQzczREI0NEVBOTc3NTE5QjhCRTk4QjIyMThBNzcxCi06MTAyRUYwMDA2RkE2ODc3ODY5RkQ0RkZCOUM2ODFGRjZGQTcyNjRDMDY1Ci06MTAyRjAwMDBFQjNFNzFEOTc3MjBGRTM0RjgyQjE3RTYzN0Y2RkVFNTU1Ci06MTAyRjEwMDAwMkNDQkZFRkY1NURCMjAwRTQ3NkFGNDAwRTUxNjU0RkQ1Ci06MTAyRjIwMDAyQTRFRTVGMDY0NDM5MjAyRkI3Q0ZFRjkzQTgxN0Q4RUU1Ci06MTAyRjMwMDBDMTE3NDkwOEYyODMxREMxOUY5N0JGMzMxRDI3OUUyMkU5Ci06MTAyRjQwMDBDRUE2RUREQ0E0Q0I0RERCODUzRUY3N0MzQzhGRDJENTA1Ci06MTAyRjUwMDBCM0RFRDIyRDE3OTE0NDVDQzU4OEE3NTRBNDQ0QjYwM0IwCi06MTAyRjYwMDA5Q0VENjM3RTVEMEY3Q0QzNDVFMTk0RDA3RUQ1ODMwMERDCi06MTAyRjcwMDA3NzY5QTY4OEYxNDc5MkU5OEQ0RDg0NzhEOUExNDAxNUVCCi06MTAyRjgwMDBFNDhGNTZDODI1OTgxQUVCOUZDRkQ2RkJBODI3RjIzOEI2Ci06MTAyRjkwMDBGNDUzQTVENjU1NDE3Q0JERUM4ODg2NzI3NjQxNzBGNTE4Ci06MTAyRkEwMDA0MTI4Q0Y3QzhCOTVEQjlEOEM1RjIwNUU0NDRDNzJCN0IzCi06MTAyRkIwMDBFMkQ0Mzg5QzVGMkZBNzkzQjZBMERFQUYwQkEzRjI4REFGCi06MTAyRkMwMDBFRERDODEzNTVGQ0U0QzA3OTBFNzZFQTI4Mzg4QzM0QzYxCi06MTAyRkQwMDAwN0IzMjkxRDRDMzVEMzgxMkU5QzBGMUREQzhCQ0FGQUZCCi06MTAyRkUwMDA4QkYwOEZGRTY2OTU5MDg4REIwREU3ODNENTRBN0FGMUVBCi06MTAyRkYwMDA3MDdFMzFFMDU4NUY5NjFFMDAzOTZBRjA4NTNBRUIxRTBDCi06MTAzMDAwMDA5NEFCQUUxQjlENjFGMEQ3MEQzRTMxRjhFMzUzQjcwMzhGCi06MTAzMDEwMDBGOTkwRjJDOTU1MUVGQTVDRUNENTJFNEJDNjI3RTA4NzE1Ci06MTAzMDIwMDA5OEY5RTE5QTExRjhBNjk2MEMxRTBDRDA0NkI1MzI4OTkzCi06MTAzMDMwMDBBNjUyNTFGMkYyQzVFRjE1OEUzM0YxODExRDZGQjU3M0IzCi06MTAzMDQwMDAwNTcyQ0MyMkNGNThEOTg0NTc3NUU4N0NBMzc0RUVGODZBCi06MTAzMDUwMDA3RjRERDZEQTAzMjYzRUVDQTA3RTA4MThDQjVENjI4ODUxCi06MTAzMDYwMDA4MDVFMjlGNTJFRkIxNEU4NTJBRUY5N0UxMEZDNDE4N0Y0Ci06MTAzMDcwMDAyQjVDOEY3OUIzQjMzRTQ4Qjk5OUQyRTVBNzYzNDQwRDcxCi06MTAzMDgwMDAyNkRGQUUyRDdCMDZGOUY5NjgwQTAxRkI2NEQzQ0NFNTk3Ci06MTAzMDkwMDAxOEY3RkRGNDk2Qzg3OEQwMTNFQjI4RkU4RkExNUU4RTRBCi06MTAzMEEwMDA4RDE1MzEwNzczNjAyQ0RCNkZENzgyRUMxOTA5QjJGN0VECi06MTAzMEIwMDA4NDdGOEZGMUIyQ0VFQjBENjAzREJBQ0UxNkY5QjhERTRCCi06MTAzMEMwMDBDREY2QkJENkJCOTlCRTU5RTdFQzU2ODBERjA2RjMxNUFCCi06MTAzMEQwMDBENTlDRUYzQzRGNjI3NjZDODlDMkY3OUY0RUI3NkExMDYxCi06MTAzMEUwMDAxRjI5NTE5ODlFRDlEMkQ0OEJGNkM3QkFBNkJERjhDQzY5Ci06MTAzMEYwMDBBODg5MTFDOEE3RjIxNDQ1MzVEOEY3NTZGRTNBNUY3MDczCi06MTAzMTAwMDAwMDFGNUZDMEY2NjdFMTdEQjNDOUZFQ0E1MTE4MUNDQTMzCi06MTAzMTEwMDA1RkE1MDhGMEE3RDIxMkQ1RDI0RDcyNTYxMTg1NDgzMjVDCi06MTAzMTIwMDAzQjdBQTM5QkM1NUY5NDE2ODJERjk1RkQwRkUxN0U3NjA3Ci06MTAzMTMwMDA0NjYxNDhCODA5Q0EyREREMjQwNEYxRjMzODdCMUYyODA1Ci06MTAzMTQwMDBENDg1QUY5QkZBMERENEY0NUFGNDVDMkQ1RDgyRDQ1MjMxCi06MTAzMTUwMDBCNDlFRjBCQzRCQkJFNkMxRkRBRkRBNDBFNTFGRTU2OUFDCi06MTAzMTYwMDBDM0U5MDg3RThFOTlFOEMxODBERkQ4ODc1RENCRkRFRjhCCi06MTAzMTcwMDBBQTAyMDVGOUFGQkREMUQ5MDNBQUY5MkE4NUQ5NDU5RjdECi06MTAzMTgwMDAwNDJBNDczRDJGMDBGQkFGRDQ3MjQzM0YxNzlFQjAwRjc4Ci06MTAzMTkwMDAxQjlEQ0NGNjYxQTEwQ0ZCQjBGMDg0N0Q1ODc4QzIzRTNCCi06MTAzMUEwMDAyQzdDODc3RDU4Mjg3RkFGNDlDNzMyRUNDNzQyMTlGNjdGCi06MTAzMUIwMDA2M0EzOTNEOUZFMkI5NDYxRkYxNTlFN0I5QkVBRjFGOUUzCi06MTAzMUMwMDBFM0E2MDZGQ0ZFN0M1MzIzOTZFN0I5OTg3RjQzOEFBMkM4Ci06MTAzMUQwMDA0MUIwOTdCQkVFNzRFQTkwNjdEM0MyRDdFQjgwNUU5MEE0Ci06MTAzMUUwMDAxMUEyRUJFQTBFQjAzODgxRkJGMDAzNzhERUQ5MUQxNDkyCi06MTAzMUYwMDAzMTZFRDcxMTdDODA3QzhEM0VCQjY2RjhCQTIwRUVBMTgzCi06MTAzMjAwMDAzQ0UzQzVBNzVCREU0MkMwMUVEQjIxNDRFQjQ5ODg5MDRFCi06MTAzMjEwMDA1QkJBNEFBQTY0NkEyNzE0MDY1NzU3QTZEM0YyQUFBRTI1Ci06MTAzMjIwMDA1OTZEOTA3NzM4NDk2QjBFMkQ1MzEzNjVDRDU3QkFGQzA1Ci06MTAzMjMwMDBGQkE2RjJGOEUyMUVEOTEzMDIzQ0NGNjkwMzc5MDA3MEI1Ci06MTAzMjQwMDBDMEE2RDlCRDVENzNBQjlBMEJBOURGNTQ0MDBEMTU5MDk0Ci06MTAzMjUwMDA2QkY5Q0UxOEQwRjNENzYxQkQyNjAyRkNDQ0JFQkI4QTc5Ci06MTAzMjYwMDBCNDA2MjFBRTMxNUU3Mzk2MDIxRkQyRkE3MTQ2RkZFN0IzCi06MTAzMjcwMDA1NkJGNDVEMUYwQkRCRERENjhGNUM0QjI3M0FBNDdBNDAxCi06MTAzMjgwMDA1MUZBODNFRkMyMjhGREI0OTM1NkI1OUZDMkJFMDE2NEM0Ci06MTAzMjkwMDAwNkQ4NDc2RUI2Q0ZEQkU1NjBGQ0RGRTU2NkNGQjdERDZECi06MTAzMkEwMDA4QzdGN0ZFOEFFQUM3NEQzNjdBNTlCRjE3Nzk3M0I1Q0NFCi06MTAzMkIwMDAwREU3NEQwNkE3OEExOERGRTk3NUQwMkVFMEYwNDE2M0NGCi06MTAzMkMwMDBGRUVCNzAyRUU4OEU5RkM5MDRGNjBGMUVFMjc0MzA3MTdCCi06MTAzMkQwMDBCQzhGRTlFOUJCMTVENEQzOTc4RkZGNkU1QjNBMkQ0RkI2Ci06MTAzMkUwMDA3QzM0MTQwMkJEQkI4MTg0M0M0MDI3RDE4RDIyRTZBMUYxCi06MTAzMkYwMDAzQzVEMzYyMUJEOEU1NkJGNzBDNjczRTlBMDdGM0U1NTNBCi06MTAzMzAwMDA5OEZDODk3MTdGQTNCOUZERTZGMTEwOTdGQUY0NTUyNjcwCi06MTAzMzEwMDBGRjc2NzJCOUQzRTNFODZGQzBGNTlDRTE0NTdCODUzQTRGCi06MTAzMzIwMDAwQzY4OEYzNDA3NjVDQzFGMTJCM0Q4RDNFOTUwRkYwOTVFCi06MTAzMzMwMDBFQTM5QTlDMjhGNTI3ODlDN0Y5OUE1NjBGQ0UzOTQ4QkVGCi06MTAzMzQwMDBERjZGRDE4Rjc2OEFEMzFENTFEM0U4RkJFRUE4ODhGQ0JFCi06MTAzMzUwMDBERUFBN0E2MjYwNTc2RkYwOTZFMkI5RDI2OEIxOENFNzY0Ci06MTAzMzYwMDA0QjM2MTRCM0Y4Njk4QUVGQkExOEQ4MjdGN0Y3Qjk5OTJBCi06MTAzMzcwMDA3Q0YwMkE5ODNGMUEyQkRFNzNBODMyMDA0RjUxMDU3RTRECi06MTAzMzgwMDA4RkU5OEJBQTExRUZBQUE4NjIxRTJBRkQwREJGRDcwN0VECi06MTAzMzkwMDBGMDNDQ0EwNkMyRDdBNTVFQzRGMzc0RUQ2MzNFRkZGOUU0Ci06MTAzM0EwMDA0NTkwOTc3MzkzMUFFMjc3MEU2MDlFMzc5QTVDMjJFQ0YxCi06MTAzM0IwMDAwNzBERUU0RjAxNzhCRTZBREM1NzMwRDA5MjQyRUJCNzcyCi06MTAzM0MwMDAyRDUzNDNCMDBFRDNENENBNkFDODIzNjg1NzJCRDFDRjJDCi06MTAzM0QwMDA0OTk5NUFBNURDODg3MjY4RTgzQzA2REU4QkQxNTYyQ0U4Ci06MTAzM0UwMDA2MzFFMTE3QzA3QkUyNDZERTQyMDlDODdDRkUxQjIyQ0M0Ci06MTAzM0YwMDAyNUFENTQwMEZCQUFCRDA2QzM3QzcwNUVDMTkyNTdERUFBCi06MTAzNDAwMDA5NjdFMjU5RTQzOTI2QUQzMTFDRTc2QTIyQjUwM0Y1QUM4Ci06MTAzNDEwMDAyM0EzRkVDQkYxMkE3MUIwMzc3MjhDNzgyRTFDQjEzMDA5Ci06MTAzNDIwMDBDNTFCMzI2RUIzOUVEM0M4QUE5NzJERTdDMkM3NDZBQzYwCi06MTAzNDMwMDBFNTRDMUUzRkM4QjQ5REU3Rjg1ODMxRjZDN0FDNzhCMkVBCi06MTAzNDQwMDBDRjM3MjNGMDQ4MUFDMDlCMDEwNzc5QjVFMUYzRDkxMkIxCi06MTAzNDUwMDAyOEFEODM3OUU2QTgxRTg0M0JBOEI2NTQ4MEZDMUE0QjlECi06MTAzNDYwMDAxQTlBODFFRUNFMUI1RTFCOUNEMzhBREJGQTYxRERBNzI0Ci06MTAzNDcwMDA2OTMyRDFFOEY4MTc5MUMxMTZFODc3MDNBN0YzQUU3QzVCCi06MTAzNDgwMDBBQjNFN0U0ODkxMEM3RUJDMTBGODcxN0NBMzQ4QTJBNjhFCi06MTAzNDkwMDBGMTIxMEUxOTM1OEQzN0ExMkJERDUyOUVEODlENkRBOUQ2Ci06MTAzNEEwMDAzRjc5NkI4MUU1RkI5NEQ4MDU5NkVGMTdFRTJDQjU5NDI4Ci06MTAzNEIwMDBBN0Y2Q0VCMUQ0QkY2ODZGQTVBNTVDMTJCRkQyNTI3RjZDCi06MTAzNEMwMDBGQUExNDU5NkYyOENGRTdGQjJENDlGNzU3NDk5RTVGQjA0Ci06MTAzNEQwMDBDNTAzQ0IyRERGMkY3OTZGOERBNTdDRTlFMDVEOTZGQUQyCi06MTAzNEUwMDA4NkJENkVENzhCMTNCOURENzJCRTc2QkEwQkVFODlCMDhFCi06MTAzNEYwMDBDNDY1QUQ3RTgwREQ4RTU3RkVEQUFBQjU4MDVDRjMzQkY1Ci06MTAzNTAwMDA5MUJFNjVEMEUzQjRCQ0U2NEVFNjQ3MjlFNTIxMERFNDYzCi06MTAzNTEwMDA0QTBFOTdBM0Q5M0VCREQ0MERGQkE5N0UwNUY1ODFFQ0RCCi06MTAzNTIwMDA2NUY1NjRFRjAyQjQzRkM2NkRBNUYyNjgzQTU4OUI2NDM2Ci06MTAzNTMwMDBFODdCMEFDOEU1QTY2ODc5QTEyOURFRTQ1NkJCRjE2Q0YwCi06MTAzNTQwMDA1Njg1QkYxQUY3Mzc4Q0Y2QjJBQTkzODgwRkM2RDNEODIwCi06MTAzNTUwMDBGOTZBRUFBNTQyM0RCNzQ2REI5QkU2QjU0RjE0RjEwODkwCi06MTAzNTYwMDBGNDIwRjVGNzFFMzFGOTdCMjNGOTc3NzY3RkVFNUNGREM5Ci06MTAzNTcwMDBCNzcxMjJGMUUwQjkwMjIxREMwMENGRTI4NjU3MkIyMTlFCi06MTAzNTgwMDAxRDk4RkE3NUQ3MDFGRDZFNzI4NkVCN0I2OEJGOUIwQUFBCi06MTAzNTkwMDAzQzZDMUY5NEZCNzU1REY5QkRDODE3ODNGOTMyRUExN0JGCi06MTAzNUEwMDAyMjZCQzVFNjc4NUMzM0Q3NDMyOUNBRDNFODU3NTJCQ0FGCi06MTAzNUIwMDBBM0JDMzVGMEJFNDExODg4QjU4MkRDQjlEMzgzRjI3MDY0Ci06MTAzNUMwMDBEQzdGQkI1RTAzRkU1MjBBOTQxQzg1QkUwRjFENzBFQUIxCi06MTAzNUQwMDBCMEJGQjQ4NUUzQjU0MDJEQTk4NDkwNTI2MUIwNkUzRjcxCi06MTAzNUUwMDAzQzI3NjlENENFQTBDRkEyQTJDREZCRTE3OUJCOUJFNTVECi06MTAzNUYwMDAwMzVGMTBGQTdFMjVDODEyQTU5Q0Q5N0ZGMjM0NjdBQzEwCi06MTAzNjAwMDA4NUY2MjNBOTE0OEUyNDdFODVGMTk0RkM1QkQ5RkU0NUIyCi06MTAzNjEwMDBBMUZDMkVEMDFCNThGNTY3RTgxNDJBRDIxNUNDRjc3MDAwCi06MTAzNjIwMDAwMzFEMDhGODQ0RkE3MTA3QkNBODM3REM3MEI4MTVDQTQ2Ci06MTAzNjMwMDBCMjEwODNGRDNGQjA0RjYxMUZBRTIyN0QyQkFFQkI2MTQ4Ci06MTAzNjQwMDBCNzgyM0QxQjYxN0U2RTMzRDA1N0EwQzZCQURFMjlDQTUxCi06MTAzNjUwMDBGNzEwNEY2RDAyOEI3Qjc3QTU2OTg3MkJFOUI4NUQ5OUQxCi06MTAzNjYwMDAwNUU5MTA2Mzg1Qjg0ODlENDlERUFDRTdGQUY0OUYzRDUzCi06MTAzNjcwMDAyMkNGNzM2M0YyRTZDRkQwRTc4Qzg0QkQ0M0U5N0ZBQjAyCi06MTAzNjgwMDAzODAxRTBFQjI2MjBCN0RDRjc3NDEzQTA3N0I3NEE1NzcwCi06MTAzNjkwMDAxM0VERkFBODE2NDY3RENBRUNERERCMzk0QzU1MDU0QjE3Ci06MTAzNkEwMDA3MDdGRkZFMzQwMjlEQUI3RUVDNjdENDlGMUU3MUU5MDRGCi06MTAzNkIwMDA4ODNFN0Q2NEJDRkEyNzZENDM3RDRGMEE5QzFBRDgxNTVECi06MTAzNkMwMDA4RDlBNTNFRjQ5MjIwRkE2NzAzRjY0REQzOEUzM0MyQkZGCi06MTAzNkQwMDBDQkVGRTlFMkY4MzBFMkExNDM3MTQ2MUU0RjMzRTI4Q0IyCi06MTAzNkUwMDA0NjNGQjc2Nzk2OEUxRENEMUU3NzUzRkYzMjYyODI3N0I1Ci06MTAzNkYwMDAxRDFEMDdGMEQyN0VCQUFFMUFGMTIwMTM3NjFFRjcyRkU5Ci06MTAzNzAwMDBDNTNERUI3MTlGOTVGOTQ5NTMzOEJFNEIzODdFQzczOTlCCi06MTAzNzEwMDAwOUZBMDlGMzIxNkU5MjAxNUVFRDU1RDVDMDk3NDY5Q0RBCi06MTAzNzIwMDBFNTM3NjA2Q0QxN0FBMTI4OTE1ODVDQ0Q2MUU4MkRGMTI0Ci06MTAzNzMwMDBDQzQ1MDhCM0U2MzRGMkMzRDBFNDY1N0E4REZFREIwN0VFCi06MTAzNzQwMDBFN0M2MjY3NDU5Q0Y2NTRFRUNCNjk2Mjc2RkI1OTZBNzk3Ci06MTAzNzUwMDBDNEFDNjU2QTM1MUYwMUJCMDA2QzM0OEM1QkVDQjQ3RTc1Ci06MTAzNzYwMDBBRjMzRjYwM0FBRDgzOTMyODU4RTdDODZFOTVGQ0JCREFDCi06MTAzNzcwMDAzODg0RUI3RjIzOEYyREFGMzc1RTAxRTIzNTc3QUQ1NTZGCi06MTAzNzgwMDBBRjY2NzMzRDlGNkREMzlGQTUzRTA5RTMwOTE1ODcwMjgwCi06MTAzNzkwMDAwN0MxN0UzNEUyM0U0NzNEOUEyNTlGQ0M4OERGRDhFNUJECi06MTAzN0EwMDBCOUU3QURDRDg0N0U0MUJGM0NFMjYyNzEwQzg4MEY3RkVBCi06MTAzN0IwMDA5NkM3RTMyNUI5M0M1RTMyOEVDNzRCRjI1OEJDQzQyMTk0Ci06MTAzN0MwMDA2OUFGMkMxNTMwRkZGM0I4MUI4RDk3ODY4QjU4OUM4NkZDCi06MTAzN0QwMDA5REU3RkFBODVBN0U1MUQwRDg3ODExRDM3OERGMkM4QTg5Ci06MTAzN0UwMDA1RUNFRDAxMENCODI3QTQ2RENDNDg4MEJCODdEN0EyNUI5Ci06MTAzN0YwMDBGMEVGODZEMDZCMEQwNzI4OUQ1NEZFQ0E0NUEwOUZDQkU1Ci06MTAzODAwMDBBNEMzODc5QTQwQkVFNUM5OThCN0FEQ0VCQUVEM0IxRUJBCi06MTAzODEwMDA4ODQzQzI3NzVBQUVDQ0Q3QzYyMjFGRkNENDgxRjE4MTJGCi06MTAzODIwMDA0RTRFRDdDNjM5NDQyM0NFOTJFMjYxNzY5MUNCNjNEODBGCi06MTAzODMwMDA0NzUxMEZDRkNCRjc4MEJEN0JFMTRFMkFBMzJERkE4RUU3Ci06MTAzODQwMDBDNUYzOENCOERERDQ1RUVCRjc1RTIyNjRBOEIwRUZCRkExCi06MTAzODUwMDAyNDI2MzJGQjRBRjc1Njk4RjIxQTJGRTBFQjM2NkQ2OUIwCi06MTAzODYwMDBGQzgxQTVCNEJDOUJDNDRBRTFCRUI5MTI0RTFGQTE4MzIyCi06MTAzODcwMDBENkYzQUY2Mzg4ODBFNzlGQzYxQzkxNDIzMTVBN0ZEQTQ2Ci06MTAzODgwMDBGM0Q2RUZDNUI2RjNCMTE3RDhDRkNCREFGNjg1N0MxMkY1Ci06MTAzODkwMDAzOTcxMjMxRDZGQTNENjIwODAxQ0REQjg5NERBRjJCNEYxCi06MTAzOEEwMDA1Q0U4RTFGQjQ1OTNDODI0QTBDM0NCMjQ2RjI4MEVGODQ1Ci06MTAzOEIwMDA3RDQzQzJGRDJERDdEQjkzREZCQzExRjRGQUFCMkNFRkI3Ci06MTAzOEMwMDA0ODlEQTA2RDg2MzhCMkZBNzMwOUY1OTQ5QTQyNEE0QTI3Ci06MTAzOEQwMDBCQzg5N0RBNDdGM0IxMzIyQjAyRjYyQzRCNTlFQTJFQkFFCi06MTAzOEUwMDAwQTdBNjUzN0Y1Q0IwQjFERTA2N0FCNThFRUE1N0UzOTNDCi06MTAzOEYwMDA5NDlGQTU3RTM5M0NGNzUwQkYxQ0RFRkY5MEZBRTU1MDNGCi06MTAzOTAwMDBERTRCRkQ3Mjc4RkU5OEZBRTVGMEZFNzlFQTk3NDM3OThFCi06MTAzOTEwMDBBREI3QTIxMkUyNjJGREI0M0VEMDhCQTc2NDhGMzI4MUI0Ci06MTAzOTIwMDBDMkRCQTkzODU0QTAwRkJCMUNBQUE4Qjg1RDU5NEM0OUVBCi06MTAzOTMwMDBFQTJCOUQ0RkUzRkU0NUU1NjUyQzRGQkE3MkZERDNCOEU3Ci06MTAzOTQwMDA3RjYxOEVBRjk5RTM4Rjg5RjhEQTgwNjBDNEQ3MjBFNDc1Ci06MTAzOTUwMDBGOTNCQkVDRjMwMTQ2NzhCQjAzOERCRDlGQkQxOEQ3RUZECi06MTAzOTYwMDAzMEFFMzlBQzFGMUVERkZDRjBDRTVGM0ZEMTRBM0ZBRDE5Ci06MTAzOTcwMDA5OEYxNDA5N0E3MDBDRTZEMzRGMDc4OUU5MTE3QTM1OTI3Ci06MTAzOTgwMDBGMkVFNTdFQzY5QzZCQzE4NjdENjkxMDY1OEQ3M0Q2NTZDCi06MTAzOTkwMDA1RUNDMTc3MTNBMjIyQUM4NUJCQjNGNjdGODcxNzY3QjExCi06MTAzOUEwMDBEQTc4REFGNTlCOEZEQjE1NDZEQzc0OTM4MzYwOUU3NEJFCi06MTAzOUIwMDA1NEEwRjYwNEQ4MTc0REIxRjI3NzFDMjNDNzUzNUZGNzE0Ci06MTAzOUMwMDBGMEYzNDMzNkI5MzA3NDNFODBDNzdENUM2MENERDI3OTY4Ci06MTAzOUQwMDAzQTA1OEUwRjlFQjc4RUEyQjE4MEM1RjVDQzcxNTU0RkJBCi06MTAzOUUwMDA2MTBDMEZBNTdCQkMzQURBNzUwMkI1RjdEMEZFNTMyMzA0Ci06MTAzOUYwMDA0MTg4QTM3NUMwNzk4MDI0RjM4Qjc5OThGRTZCQ0U3MkQxCi06MTAzQTAwMDBBMkJERDE5MUM1RjI0MEFBNzI0MzQxNjhERjlBMzUzMzE1Ci06MTAzQTEwMDA2ODNFMUY2MDlDNUYzOEU4OUJBOTBDOThGQTVCRTMyQjFCCi06MTAzQTIwMDAxODU1RkY0OTU0NUY2QkEzRTg2QkM5QzVDRUVGQjRFRUUwCi06MTAzQTMwMDBCRjU4ODE3MzE5NURERTY1RkRFMDQ3NzcwNTAzMTg3Rjg4Ci06MTAzQTQwMDBFRkNCOUE0OTA2NENGRDRCQzFEOTc4N0U0M0YyMzI3QkNECi06MTAzQTUwMDA1ODBBMkE2ODBGQ0IzMEZGRTI0NDdEQTNERTNEMUU0NkE0Ci06MTAzQTYwMDAyNzk0OUQzMUJFRThGNjc2NjMzRDk3MUNDNjdCMjM1Q0E4Ci06MTAzQTcwMDAwMTUwOTlGNEE5QjJGRDM4NEZBMTQ4MTQ5M0JDMzBDNjQ3Ci06MTAzQTgwMDBGRDU3MEY5Mzk3NURDNTExMTVFMjJDNUQ0MTU5ODM3MzY2Ci06MTAzQTkwMDAyMDVENUEyOUUyQjk5NUUzQjkzNUNGQjAyNzQyNjhDNzBFCi06MTAzQUEwMDBFQ0UxNzgzNkZBNjlFNTcxODBENjdBMjdEQTczRTFDNkY3Ci06MTAzQUIwMDAzNEI1MkEwM0YzNzU3N0MxQkU1Njk3Qjc0NTgxN0Q0OTYyCi06MTAzQUMwMDA2NzU2RDlBOEZERkU4NENCRUI5MUZCMkQxOTUzMzUxRDBDCi06MTAzQUQwMDBGQkREMDNGRDNBN0RDQjU0RThENzMxQzJCOUEzQzMxQzRCCi06MTAzQUUwMDBDRTJGNkFCN0RBRjdGMTI4QjQ0MTczM0U4QUZERTlFM0Q1Ci06MTAzQUYwMDBGNkE3QkRERDhBRTIwMTI3QUNGQkJBQzdBQ0U3OTQxRDhGCi06MTAzQjAwMDA4NDlEREI1QUI5NzczNUYyRjkyNkI5MUZFREE4NERBNzg4Ci06MTAzQjEwMDA4NUE0RTdCRjMyNTIwNENFNkY0M0ZFQkRDNTBFQ0FFMTk1Ci06MTAzQjIwMDBGQzk0QzNCRjAzQTk4MUJFMjg4OTVCRUQ5NkU5ODdBQ0VECi06MTAzQjMwMDBFNTE5RkRENkYyQUNBMzc2M0I0ODdGMDNFQ0EwQzU1QzRCCi06MTAzQjQwMDBFRUY1NTM3OUNGOTI2MTA2NjVDMDQ3MzgxQUFCMDBCOERECi06MTAzQjUwMDBFQjQ4NkYzM0U0NDkzODc4OUM3QzMxRDc3RjBCQjk3RUQyCi06MTAzQjYwMDA3NEE3QjA3ODZGNEVCREM3RTI3RjEyN0VDRjVGMkVFRjk1Ci06MTAzQjcwMDAzRkFGRUFFMEVBMzYxMEIyNjFDM0FFRDJEMDZGQ0RCQjQwCi06MTAzQjgwMDBFMkQ5MEExNDk3MzZGQkFBNEVCNzlFRTM1RjY4QjM5RjRCCi06MTAzQjkwMDBFQzc2NTY4NURDODNGOUI4RDlCNkI4ODZCMTlGMEJGM0JECi06MTAzQkEwMDA4NEZCMENFQ0UzOUZFRkI4NDY3RjkwODcwNUYyQ0RCODFECi06MTAzQkIwMDBFNzA1RUYxNUE2RURGM0U0QjgxMEEyNzhDQTZFNjBFNzRBCi06MTAzQkMwMDA3MDcyRDYxMkJEMjcwOTFEQ0Y0OTYxN0MzMTBDNkZEMUFGCi06MTAzQkQwMDA3OTg4QjdGOUZDNURCNjk3RERDRjk1NUQyNUM1MzQzQTk4Ci06MTAzQkUwMDA3RTc2N0QyRkRBMDM4QjZFQTNGMzQxM0JGQzBDRTZDMTlFCi06MTAzQkYwMDAxOEY1RDNEMzdBRjEzQ0QyQjYxQTgxRTdFNzEyQjQ2QjQ5Ci06MTAzQzAwMDA4Qzc1REVFNjY1RTcwN0VCMkUxNTYyMjJCNDZGMjhDMERGCi06MTAzQzEwMDBGMTExQUU4MkM0RkE1MjNDMUQ2Mzc4NjJGOTg2RDc1NDIyCi06MTAzQzIwMDA1QkNGMzlENkQ5RUMxNzgzMUUxNkRBREVGRkQ2QzNGNjgyCi06MTAzQzMwMDBDNTBEM0VGOEYwRTJBMzkzQzY1MTM4NTYwOERERDUyOUVDCi06MTAzQzQwMDAxM0NFNUQ1RjlBRjhDMzcxMDZGODEwN0UxRkMzNTI1RkYyCi06MTAzQzUwMDAzMDhGNTdGOTgxOEFFNzNERDIwNkI2MTM0QTkyQjUyOUNCCi06MTAzQzYwMDAyNDVBMzUxN0U0Q0ZFMDg1MDIyRDVGOUJGMkJERjZBRUY2Ci06MTAzQzcwMDA0QkUxRjhGNkUwRDM2MEU0Qjk1QzNGQjhBQzNBMkY1MUMxCi06MTAzQzgwMDBGNjc4N0U4MkU1MDAxRjA3QjYxNkQ5N0E5QkVFN0RBMUY1Ci06MTAzQzkwMDBBOERCQ0VGM0UzMzdFODY0QjMwNEI5QjVBMkJBMzk5NDJDCi06MTAzQ0EwMDA5RjY4OTcwRUVEODQ1MURBODVDOTY2Mzk0OTNCQUZEMURCCi06MTAzQ0IwMDA4RUEyQUIwM0VFNzVFMkYzRjJGMEVGMjI4N0M3M0NCRUIzCi06MTAzQ0MwMDAwQzc4NTMzNTJGOUU2MzVDMjBBQjkwOTdGMTY1RTExODFCCi06MTAzQ0QwMDA3M0I2Nzk0N0M4NjZDNzg0RTFFRDI4RDhDRDA2RkM2MjgzCi06MTAzQ0UwMDA3MkY4NjNGMEREM0NCRTYzMTRGOEZGRDZGODM4NUI3RkYyCi06MTAzQ0YwMDA0RUZFRkRCQ0UxQTNENTVCQzY4QzNDNUY4MENCODFGNzVCCi06MTAzRDAwMDAwRDY5NUVEMUQ0Q0ZGRDdEN0ZDMkI4Qjg3QzNEMDk0MTNECi06MTAzRDEwMDBDODRCNzZFODJBRUNFNzE1QUIwRkEyN0YyRkE3NTVBOTcxCi06MTAzRDIwMDA2MDA3QUNBMzY1QjAwM0Q2RjU3NjYzRkNCQkI4RjA4MTQxCi06MTAzRDMwMDAyRTIwRkFFMkI4ODc4MDNDOTg0QUQ0QjREREI0REZBOURCCi06MTAzRDQwMDBBQTBDMjdBQjg4N0NFOTQxMTFFMkU5RTQ2QTgyNzkyMzc1Ci06MTAzRDUwMDBBOTdEMUU3NjNGNTBGRTlDNDdDMURGNEE0QjUzNzAzRjAyCi06MTAzRDYwMDAyMzI1NkRFNkEzQ0NFODY1NzE2NjAzRkU5NDhBMjM5NTRFCi06MTAzRDcwMDAxMDdGOTdFQjQ4NDgwMEI4ODQxOEE5MDAyNjlCNDI3MDMyCi06MTAzRDgwMDA3RkMzQTNFRkY5MjY5QzAzMjAzMkQzNEY3ODQ3MEVFODc4Ci06MTAzRDkwMDA1NTFFNkYxRkNCNDg4Njc0MzlENTNBQ0M1RkY5OTk4Qzg0Ci06MTAzREEwMDA3MUFDQjE3MDA1MTgyNUNBRTJFMkY0Q0QwMDRGNzE4NDAwCi06MTAzREIwMDA3NjIwMDBGQzJDNUUzNjM1MjI4NkUyQjRGRkQyMTNBQ0FFCi06MTAzREMwMDAxREY5MDUzQjNGNDI3RDkzMjVDRjc5MTM3ODM1RTRDQTMxCi06MTAzREQwMDA1ODFFODcwRjJFQjVDNkE5QzkyMDlEMzM2RDVGRkE4QjdCCi06MTAzREUwMDA0NThGNDM5QzYyQ0MzMEY5Q0RGQzc2MEY4NzMzRjUwNEM4Ci06MTAzREYwMDAwOTQzRkY4MTFBQUJERUYwRjBGQzZEOEZFREZFOTg4QjZFCi06MTAzRTAwMDA3QzBFRUJCRENGNzZGRkUxREUzMEVBMDExNzA5Mjk0RUNCCi06MTAzRTEwMDBCNDJGOTZBMkRENjBGODI1REJBMDIyRDhFMzc5ODREREZCCi06MTAzRTIwMDBCNzZCNkYzRjkzQjUyNzQxRTZBN0I4M0M0NDUxNEFFOUM5Ci06MTAzRTMwMDBGN0U1MUUxREYzMEQ1REI0NENGMTI4Mzg4OTkyNDVERjdFCi06MTAzRTQwMDA2NzhCMkNERUQyMkMxMDE5Q0E4OUYxRTI5ODY3RTA1MkY4Ci06MTAzRTUwMDBBRTZBMDNGQjY1QkYzMjFERUY0NTMzRkNFQTU2MzU4NDdECi06MTAzRTYwMDA3OTEwQTRBOEQyNjIzNzFCRjk1RTZCNEEwQUM2QzJGNzYyCi06MTAzRTcwMDBENDMxNDM3MTI3MTVFODcyNEQ2NjIxREFEMUZFOEM4MTY5Ci06MTAzRTgwMDA3RjA2MzlGQjU5OEE2RjgxMDI3MjE1RjIzMEU2QzBCNUEwCi06MTAzRTkwMDBCNEFFOEUyODk1QkJBRTUzMzk0NDMzRDk2NzJFQjkwMUUxCi06MTAzRUEwMDBFMzZDQUU1M0UzMkNFRkUzNERENjczRDRCQTU3QUM4MjM4Ci06MTAzRUIwMDA3MUIyQkQxQTNCQkY0M0Q0MzY2ODU3NDFBQ0U3QTU1RDJDCi06MTAzRUMwMDBBN0IyMkNGNjdBQTJGRjVDQ0JGQjM4QjU2QkNDRjdGQjI0Ci06MTAzRUQwMDA4Q0RDN0YwQUQxOEFDQ0ZENEYxOEExRkY0OUI2RkVENUY0Ci06MTAzRUUwMDBBNEZEMjdGQUNEQjBGNERCMkVCM0Y4NkIzNEUwNDk3QUE5Ci06MTAzRUYwMDBERjY0QTlCNzcyQkM3N0M2QzhGQjAzMjU1RTE2RDdFQzkyCi06MTAzRjAwMDAwQzM2RTBGRTQwMjVBMThDNEZFOTY1REVFOTYzMTIzQkVCCi06MTAzRjEwMDBDNzRCRDA3RTIzQjlENkZEODE0QTRFQzcyMkE1MEMzQ0EzCi06MTAzRjIwMDAxNzIwNUJFRjJEMkUyN0Y2N0I4Q0FENzZEMTExMDg2RTE2Ci06MTAzRjMwMDA1MTdBMTc3RDY1RkRCODRGRjAyNzJGOUVGMzFCQzk2RTkwCi06MTAzRjQwMDBFRTZGMjIxODlGMkU0RjE5QjgxREY2QzFBRkY0OEU3Mzc1Ci06MTAzRjUwMDBCNjA3MzE5RjE5RkRGOTI1REVFOTBCRjhCRDlGMkNBRjlGCi06MTAzRjYwMDAzOTIwMjI1RUMyOTU2M0YxOUM5NkQxNEZEODQ5MjY4MkIyCi06MTAzRjcwMDA1QzBDOEIyQzBGMDI3RkU4RjhGRDk5RDk4RkFDNEY4MjM3Ci06MTAzRjgwMDAzRkZCMzlGNzNBNUQyODJGMzRDREFCMUZGMjBBQ0RFMzYyCi06MTAzRjkwMDBDRENGRTk5MTRDRjMwOEJCQzgwQzFDOEZEQkJCNDNFM0NFCi06MTAzRkEwMDA4REY5NjJFM0JEQ0FFMzU5QzY3ODc1MEJBQ0YzQUI3MzA4Ci06MTAzRkIwMDBBQTM4QkYzQUNFQzdDNjc4QUZDMkZDOTJFMEY3QUNFM0VFCi06MTAzRkMwMDBGMUJDQzlBMUYxMkVCN0NFQUZDRUE1RTJGQ0VBRjgzRDE3Ci06MTAzRkQwMDBCQjQzRTM4REY5NjJFMzE5NzE5RDRFNjc0MzAzRDBFMTYyCi06MTAzRkUwMDA0OEYxMUQyM0FFNzM0REU3MkU0QjVDODc0NDc3Q0RBRjcwCi06MTAzRkYwMDAyODI0NjRCM0MwRTRDN0Y2OERGMzNBQzBGRkZCQjg2NjZCCi06MTA0MDAwMDA0RDExRUExNTZFNUZFMzdEQUE1NDFGMkY5NDE5QkNCNUJDCi06MTA0MDEwMDBCOURFNThCMzA5OEZEQkE4MUNEMTI3QzMzOTA5ODVDMDg1Ci06MTA0MDIwMDA4MTMyMzgzN0ExRTMzOThBMjAzRTFGQTFGNkJBOEVGOUQyCi06MTA0MDMwMDAyNTQ1RjhGRDg5QTYxMDk2NzczNkNEQzZBN0QxNEZEMTc0Ci06MTA0MDQwMDA2Qzc2RUZENzk0Qjk0MjUyQkJGRDc1MkZCM0RCMzc2NzVGCi06MTA0MDUwMDBBOUQ3N0YxREY0NUI4NTg3RTVGQkNFQkU4NEU4MjYzQkIwCi06MTA0MDYwMDA5QTFBRDZGQkREQjAzRjc0MUQyOTAxMUQzOTY5MkI4M0Q3Ci06MTA0MDcwMDAzQjUwMzUyNjA2RUJFRjI5MzlEOERGMDQ3MTUwRDlBMTIyCi06MTA0MDgwMDA2MUJFQUI5NkZDRUYxOEJDRUM2NUZFQkNDQkM1REE5MzA5Ci06MTA0MDkwMDA0QkQ4RkRBN0I1NUMzRjExQTkwNkYzOEY2QTE3QTY2MTNGCi06MTA0MEEwMDAzRUMyQTJDNUJBNEZBNTc4NUIyQzA4NkYxNDcyN0QwNzdCCi06MTA0MEIwMDBFNzlFQUVFNTRCNkRGNzE3MDJBMDc5RTg3QTA1NzQyOTAzCi06MTA0MEMwMDAwNkY3QzM1RDlCN0I3ODg5NDBGQjBERkJBRTQxM0YyMzI4Ci06MTA0MEQwMDA0QzFCQTZEMzdFQUVFNUZBQjZFMjZEMTc4MTc4MDRCOTIzCi06MTA0MEUwMDBDQzg5RjI2QkYxNjJBQjVGQjBEOTFENTdDMUNFRDk1QzAwCi06MTA0MEYwMDAxMjIwQ0RCNEREQTIxQUVCNzc5NzhCRjE1NUQ4NzZGRjVECi06MTA0MTAwMDA0QkVENTlFRTgzMzFGMjZERURGOEIxQzc0RDBGNzlGOUYyCi06MTA0MTEwMDA3OTI1MUUxRjNENDk4QUVGQzczMzVGM0MyRkQ3REVERTZFCi06MTA0MTIwMDA4ODgzMzY3OTk5N0NFQjc0MzJGOTMwOUMwRjE4M0NFRjE4Ci06MTA0MTMwMDA3MTM5QjhBREU5MjhDNkQxMENGOEIyRTU5ODAwRjIzRTY1Ci06MTA0MTQwMDBBN0ZFQTgyNUVGOUQyMjE2OEQ2QTYzOUY4MDQ4QkI0QjcyCi06MTA0MTUwMDA1MDBGREJFNkIzNEREODlEMzVEQTdENTBEOTQ0N0U3N0RDCi06MTA0MTYwMDBBMDg4RkZERDAyNjFGOEJDRkZFMEI1QzY4NTRGOTJCOUJCCi06MTA0MTcwMDBBRjE0OTI2NEZDQzNFMkMxQjU4N0E0NTBCMzk2QzA4QjYwCi06MTA0MTgwMDA4MTg3RkY2QjNFREEwMjc4QTdDRjU3RTY3RjUyQzZGQ0U1Ci06MTA0MTkwMDBDMDVDQ0JERjA3MzBDRTZGNUQzMzU0OTY4OTZDQTJFN0VECi06MTA0MUEwMDA4NUNCOUQzQUYzNTcwNzhCODEyRThGNUM5QTEyNjI3RkU1Ci06MTA0MUIwMDBFNzgyREI0MUYxNUY4OTYwMDc3REY5RkVGNTNDNEI1RUVDCi06MTA0MUMwMDAzM0VGNzdBNEY1QjJFNzUzOUFDRTFCMjdFRTNGODBGQzdFCi06MTA0MUQwMDA5N0U2NTAxMEVEODE0QzkxMDAzRjY1NDMzRTlFOUY3REQ4Ci06MTA0MUUwMDAzRjY2QjU1QjJERjk3OEFEN0RCQjA0ODgxQjZFODdGQ0ZGCi06MTA0MUYwMDA0NEQzMzlCQjlDRkE1RUExMURFQ0JCRTYxODhCNDNDNENCCi06MTA0MjAwMDA2OTNEMEE3NzZFN0Q1QzY4MkI0RUU0N0REOUU1N0FFRUQ4Ci06MTA0MjEwMDA2REQ2N0NDMUY2Qjk4QkQ1REQxQUU0RDU1NDc2QzNDNTBECi06MTA0MjIwMDA1RkVCQjZCMjM4OTc1MTdGMjhERUM1Q0Y5RjNBNDgwMzdGCi06MTA0MjMwMDA4MUYzMTc5Mjk3QzU5QjgzRkM1RThFQjNFNUVGN0UyNkQ0Ci06MTA0MjQwMDA0NkQ1RkM3Q0M4REI4RDI5MTU3NEZFMEY2NTQ0MkE3QzlECi06MTA0MjUwMDBCNERGQUU0MDY5NDMwRkQwQTcxQ0MyM0NFRkE1OEQ3N0Y5Ci06MTA0MjYwMDA4NzIxNEVBODY2MjQ4RjgzMkZFNUY2NDE4RDhGQzVEMzE1Ci06MTA0MjcwMDBERTcyQzRGMzIwNkVGRThCOENDQTFBREY4QzI0RjUxQjExCi06MTA0MjgwMDBFRkM1RkVDQTQ3Qjg2RkZFMjYxRkEzQ0ZFRDYyNzI3OTU1Ci06MTA0MjkwMDA3MDAzMUZFNzJCMkI0NEJDNDdDODREN0M3ODNFRDU1RDhGCi06MTA0MkEwMDBEODNEMUJGMEIxN0RFNUI2NTBCMjczOTZEM0Q1Qzg1NzUzCi06MTA0MkIwMDA3REE2MzhBQkJCOTBERDAzNDA0OEVGQzUzMENGNzU3RjlFCi06MTA0MkMwMDA3RUI4RjcxOTNBRUZGNDNGN0I1MUNFQTY0QkFDNUY1MzYzCi06MTA0MkQwMDBGQjlCQ0NGMzMxREFFRkZCRDMyRkYxRkNGQzNFN0VBRjNFCi06MTA0MkUwMDAzQTg5MTY1QzBFNzFGNjRENDYxOUI2MDBBMDlDMzY1NEZDCi06MTA0MkYwMDBCRTFDRkNDQTQ0RjlDNzBCRTBFRjI2NkQwMjFBQTVDNDI4Ci06MTA0MzAwMDBGN0RFQTZDM0E4ODczNzA5ODRFQkU5NUYyQ0MwRkVGODY3Ci06MTA0MzEwMDAzREVFMkZGMkVGRTU1NzdFRjBFOEZEQTAwRjY2M0FEMUIzCi06MTA0MzIwMDBERkRDQzRFRDFEMDNCRUY3N0RFQzlDQzJGQjFDNUYyM0VDCi06MTA0MzMwMDBFMUIzOTNFM0RCMEJGODBDOUMxNzNFM0I5M0UxNjM0MTQ1Ci06MTA0MzQwMDA0MEVGMDIzQ0JCMjExMzg0ODJFMEZFQjNCMjE2RjJBRDEzCi06MTA0MzUwMDAxRjZBMjJFMUFGRDMzOTZDMEZFREQ5MDU2NzhBNjhGQjdDCi06MTA0MzYwMDBGQjkzQURDNzBGMzNGNDZFMUZDMjczMENFN0U3MkJGNDVBCi06MTA0MzcwMDA4NjAwMTVFQjY2MTFFQzI3MDkxQzVCNDc1QkQ3QTk2OTIyCi06MTA0MzgwMDA0Q0NFQzExRDYzRjA0Q0U3RjZBNUU0RUEwRjQyRkU4Mjc1Ci06MTA0MzkwMDA1QUY2NkZCN0FCNTRDRTc0RTRGNzJGNDkxNjI3N0VDMjk2Ci06MTA0M0EwMDBDRkVDRkVCNDExRTJFMjJGNzBGQzU1QTU4Nzc3MDJEQzVBCi06MTA0M0IwMDA2REVBMDNFOEVGMzkwNTEyODZGQUVCNjYwRjEwQzFENEY3Ci06MTA0M0MwMDBFRTJEM0Y1QjBGMEE3NzJGQzBFREJDOThERDRGRURBM0JDCi06MTA0M0QwMDA3ODg3MDQzOTVGMTk4MzdGOUQ3Njg0NDBGRUJCMkY3OEYwCi06MTA0M0UwMDAwNEYzNUE3RDY1MDNDOEVGMjgwQUIzMTk1RDgxM0ZBODFECi06MTA0M0YwMDA3MEZCRUQ4NTRENkYyRjAwQkE0ODk3MEMzQUJDQkQxMzhBCi06MTA0NDAwMDBFODRDNEE5NDkxRUU3QUQyNTlGQjYzRjdERERFMDlGRTVGCi06MTA0NDEwMDBFMjBFMjc2RDAzNzIzMERCODlGNjhEN0Q3RTg3MzhCQzE2Ci06MTA0NDIwMDA4MkFBMUY4MEY5MERDM0E3NkJFMDUxQjg2RjYwRDM0NDE3Ci06MTA0NDMwMDA3NjRGNEJCOUQ4QkZFNDZCNDA5NzU3N0FEMTNFQTNFRjg0Ci06MTA0NDQwMDA5Nzk4Q0ZEQjlGRTRGODNBRTk2M0Y2RDVBNjNGMjlGOEMxCi06MTA0NDUwMDBEREJFMUUyM0QxRUI2RkJGMzhCREZFNzYwNDdBRkQ5RDE1Ci06MTA0NDYwMDA4RDVFM0YyMUM5RTlGNTdGNDZBMEQ3NzdFMUJEMUQyRkJECi06MTA0NDcwMDBGNkIyNDRGNEFEQjBBRjJDN0ZCRTYwMjdGNDI3NUYzNUIxCi06MTA0NDgwMDA3N0VCMzNGNDI5N0RCRTMxOEFBQjE5MTIyQ0U3OTkxM0VGCi06MTA0NDkwMDBGMjNFRjIwOUY0NkZEQzJCNjBGQzdEQTJCQjdDMjNGNEJFCi06MTA0NEEwMDAzQjZCRTY1NjkwNjNFN0QwRUYxOUMwODdCRERGNUZGMDQ2Ci06MTA0NEIwMDA3RUNCQUZGNDQ2OTJERDkzQjBDQkNGRjJFMzdGRTA2N0UzCi06MTA0NEMwMDBGNTQ2RTI5QjVGRjk1OTdFQ0E0ODdDMTNGNzBGRjE0RDIwCi06MTA0NEQwMDBBQTNGRjNFQzdDMzNDOEVCRDM3NTE4RUI5RjcxMkU3Q0FECi06MTA0NEUwMDBGMzIwM0VERDg1OEM2RjcwRkU3Mzg2RjMwRDIxMTFFNEExCi06MTA0NEYwMDA5MzhFN0NDNjE3NDVGRTE1OUREMTVDMTMxRjkxN0JBRDM1Ci06MTA0NTAwMDA3QzQ0RUVCNUYwRDFBN0ZFN0I5MThGRUNFREZEMjNEQzcyCi06MTA0NTEwMDAwNzc4RDExMEZGODdBN0MxM0NGNDBCRDUzNjc2M0U2OUVBCi06MTA0NTIwMDAwMENGRTFGNjkwQzEzRTE3RTYwOUIzQkM1QzRGMzRBQTU4Ci06MTA0NTMwMDAzM0YzQTA5RkMwQkRCM0IzNzhGQjFERTBBMzgxMUYzNDRDCi06MTA0NTQwMDA5M0M3QjNFNDdFQjJDODM3OUM5RjdENjVGMTMyRjNGRDFCCi06MTA0NTUwMDAyRTJGRjNGNkFFRDQ3MDM5RTBCRDg3MEM0QzAxRkI2QzA2Ci06MTA0NTYwMDBBNDc1OUFDRkVCOUY0RUQ3RTdGQjkzRDBGOUQ5RjQ1MEJGCi06MTA0NTcwMDBCRDlGRTlBMTdBREU0RkZBOUY5NTA2QjA0RkVERkM1RTM0Ci06MTA0NTgwMDBCRUYyQzc3RjdDNjI5NDdFNkVFMkVCRkY1NURFQ0YxN0YyCi06MTA0NTkwMDBFMEZGQUZGQTkzRjAyRkU1RkYxQjYwMUQ0Q0ZDNUYyNjk4Ci06MTA0NUEwMDAxNDI0RTVGRjlCRkM0OUU0MDdFNUZGOUJGRDdGNUI3RTUwCi06MTA0NUIwMDA1RkUzNEZDMjk3NTcwMUJGNjU5RTFEREZDRjcxN0MzRjAwCi06MTA0NUMwMDBGNzI1RjFCRDg1RTM3QjgzRkYwQkNCREIwREM5RjA0NTAwCi06MTA0NUQwMDBGMUJERjExQ0YxQkQ2NTA0N0MzRkU4QzdGNTdGMTZFMTM0Ci06MTA0NUUwMDBGNzY5NUU4Qzk3NzdDRDIyN0JBMDlGMjQ3MDNDNkNFRUEwCi06MTA0NUYwMDA0N0QxNTgzRjk0QTczRTExMjhERDk3N0ZERTE1NEE3NkI0Ci06MTA0NjAwMDBGRjExNkRGNzY4QjI3NkYzRkRBQTkxN0NCRTFBRkM4N0E0Ci06MTA0NjEwMDBFRDU3Nzk3MTVGODFFQUM3Mjc5M0YxQzc5N0EwODMxRjkwCi06MTA0NjIwMDBGODkzQzhGRDcyOTFDOTIxQzc3RDE3Nzc0MjFDRUY0QkUzCi06MTA0NjMwMDBGNEZGOTM2NEZEREZDOUU1RkFEOUVDODJENzM4NUREMDg5Ci06MTA0NjQwMDA3OUZGOTc3RkM2NzBGOUQ3QzNDRjI3MEI2QUU0MTc3RTJGCi06MTA0NjUwMDA4Q0RCMEY1QzAxRjI2QUM3NURFOTAyQzRCQjcyRjVCODdFCi06MTA0NjYwMDAwMDdFMDI1RUVBNDNFMTk4MEI5N0Y4Q0M0OEI0REIyMTY4Ci06MTA0NjcwMDBDNzA1QjgzRjY3NDc4MzJBQzA3OTI5NTM3RjZGRkEzMzRDCi06MTA0NjgwMDA0N0VFQ0YwRTA3ODVFRkQ3N0U5NDc3RkE2RkUwMzk5RjFDCi06MTA0NjkwMDBDRkVGN0NFREE0N0RFOUZBRUZGRDRDNkVGRjBGM0NGNTBBCi06MTA0NkEwMDBDOTU2Qjk2RENDNDMwQzc3QjMzQ0RCRDlDOUZGN0VFNTY1Ci06MTA0NkIwMDAwMTlGQ0NGNTU4RjhCODU5RkVCRjNCNDQ1N0FDQkZGMzQ3Ci06MTA0NkMwMDBENTNGMTRCRUNGMzg3QzdGQzI3RTZERjBEOUYxNzIzNkYzCi06MTA0NkQwMDAzODI3ODE5RTY3RkQ0OUE5OTlDM0Y1OTRCRDNGQzNDRjkzCi06MTA0NkUwMDAzNkQ2MDlBRUM1MzBDNzdERDRENDIxRkQ5RDBBRkQ3OUVCCi06MTA0NkYwMDBEQjQ1M0M0NzU1Q0JFNTQ5RURFQzM0NkVCN0FCMUVFOEU2Ci06MTA0NzAwMDA3RjNCOEZDMzZGQkZFRDgxMEFEODU3RUZCOTQ3MkQwMUFCCi06MTA0NzEwMDAxNDY0RDczM0JEQTdERDM2MEVFM0FCRDlCQzVGM0JGQ0Q5Ci06MTA0NzIwMDA0M0VEOURCRDUzRTBFRjQyRDA3MUM3QzFCOEYzRTY5MkFGCi06MTA0NzMwMDAzOEY4OERBOTYwMzc2MEJDNDJDNUJGNUY5Q0VFRUEwRUI5Ci06MTA0NzQwMDA0MjdDNzY5REQwQkQ2NDE5RThENTJCQkNFQzVDNEM3MEU2Ci06MTA0NzUwMDBGMTU5RUVDNTZDQjFEMDJEMDk5NjlEQTU3RTMzRDY1NzgzCi06MTA0NzYwMDA1M0JBRjFGRTk0NzNBRUVGRUE0RTZBNjdDRDRCMTUwRDY2Ci06MTA0NzcwMDA3RjYyQ0VBODc4MEQwNjMwRUU2NUUwNzdGODM4NkNGREU0Ci06MTA0NzgwMDAyQUMyMEQwMkUwREI1NzI2QTg5MDdBRTdBMzc0MDJGNjRFCi06MTA0NzkwMDA5MjU4RDg4Rjc5NTM1Nzk3MzE3QTIxRDQyRjE5RkRGRTJCCi06MTA0N0EwMDA5NTBFMDNBRUFCRkYxNjcwMTlGNTQ2MUU4RkQ3QjM5RDVECi06MTA0N0IwMDBCNzE4RkEzQjYzNUUyNkM3QjAyMjJEN0Y3NDI4MjNFOTIxCi06MTA0N0MwMDBCRTgyRjFFQzZDNTI3NUI4MEFGOTIzNTVDMzdCMTkzQkQ0Ci06MTA0N0QwMDA4N0YyQkU0M0MxNDVCRUJGN0ZCREM0QkM2MjZDREZDOUFBCi06MTA0N0UwMDA1NjdGRThGRTkxQTA4MkY2MUZGRUZEMEUxMzFENzVBNEY0Ci06MTA0N0YwMDAzMkJGNTU0QTBCREY5RDhBRjIzNzg0RjczRkQyRjJCN0JBCi06MTA0ODAwMDBCMEFDRDBCMjBGQ0I0REIwM0U0NDFEMkEzN0UzRjcyMEY5Ci06MTA0ODEwMDBBQjRGNTRGNTlDRjA0RURCNzU2MTNCNzlBODlGRjVEODAyCi06MTA0ODIwMDBBRjc3NjhEQzhENTgwRTBDOTVFRkMzRkFCOUFDRkVCOUMyCi06MTA0ODMwMDA4RTMzRUNGRTk1N0UwOUU3RkY4OUFDQTdDMkJFRTk3NTExCi06MTA0ODQwMDA4RDVGQzNGOEQyRjU4REI3RTBCM0FCNDlBRDgwMzg5RDJECi06MTA0ODUwMDA3MTBGQzk3NUQ3N0Y0RDA1N0ZGQUZBOUJCNkUwQkVCRUQyCi06MTA0ODYwMDBEMUZGNDJGMDNCODBGRjM1QjkxQUVDMjU2N0JFMTg3RUI4Ci06MTA0ODcwMDBDQzlCRTBCRjA0MUM2RDU4QUU5NUQ5N0RGRTBCNjc5RkE1Ci06MTA0ODgwMDBEOEQ0NjY4QURGMjlGMDc3RDEyMUJGNDYzM0REODM0MTUyCi06MTA0ODkwMDAxMkYyRjA0OTQxREY5RDdBMUVGNDNDN0M5RTg0MUNBNEY4Ci06MTA0OEEwMDBGNEZCODlCNzMwMTY0NTdBQUU1NDkzRjE4RDMxREY5MTIwCi06MTA0OEIwMDBGQTM3RTYzQjkyQkMzMUYwNjZCQzVGNTdDOEZGOEVBRTVDCi06MTA0OEMwMDAyRDdFRTk5RTU4ODVGOTNGMEIwNTBFQTc4RkRGMEJDOTlBCi06MTA0OEQwMDBFQkQ1RDI3MTlFMkQ0NkJBRDA4MDZFNkJCOTdGNjdENzZCCi06MTA0OEUwMDAwRkM2Qjg0RjBBOTFENzAxM0YxMDI3QkVBNzc0Mzg3RTc0Ci06MTA0OEYwMDBDRjE1NkY0NkZGNjMyMzUxMDJGNzcyNzk4QTA5RUU4QjU5Ci06MTA0OTAwMDAwNTdDQzZCRTNBOTM2QjBGN0E4RDcyMTQ5MzRCQzI4NUE5Ci06MTA0OTEwMDBERDI4RTdEQzlBMjFGNzk4OUU1NDUzN0E3NUIxODRGQTIyCi06MTA0OTIwMDA0MUE5N0ZCRDNDMzgwNUYyNDAyMzQxRjgxMzNFQjRGQzU5Ci06MTA0OTMwMDAxMkRDQ0Y5QzJFQjEzMjIxN0Y3REU5MjBEQTNGRUEwNURGCi06MTA0OTQwMDA3MDkzQTMyMjdGRkVEMkExM0NDMjhFMkU2MkRDRTZGM0RFCi06MTA0OTUwMDA5NzIwOUVENzMzNTQyNjcxMzg1RkQwRTMxOTJBRUI0QTRCCi06MTA0OTYwMDA5MDk2MEI4NkNBNTEyOEVGRTA3NkRGRTlENENGNUY2QUQ0Ci06MTA0OTcwMDA0MzdEMTZGRTBDRjhDNzkwQUIxNTVDQUVGRUFERTRFOUM2Ci06MTA0OTgwMDBGRjAyQ0VEMTc0QjIwMDgwMDAwMDAwMDAxRjhCMDgwMDJGCi06MTA0OTkwMDAwMDAwMDAwMDAwMEJFNTdEMEI3ODU0RDVCNUYwM0U3M0E4Ci06MTA0OUEwMDBFNjk1NjQyNjk5QkMyN0JDNzIxMjQwQTIzQzlDMDQwMjg2Ci06MTA0OUIwMDA0MUIxNEU3ODM1NUU3OTBDRjUxNTI0QzgyNEUxMTE5RTdECi06MTA0OUMwMDAwMUE0MzJBREI2MEMyNDIwMjg2OEFDMkZFQTgzM0IyODIyCi06MTA0OUQwMDBGNjZBQUZGNjgyQzU1QkZFMTZGOTA3NDEwQjJENjJBQzk1Ci06MTA0OUUwMDBBOEY4NDBDM0EzMTUxRjI1MTFCNDRDQUQyRDc3QURCNTY0Ci06MTA0OUYwMDBGN0NFOUM3MzMyMDNDMUI2RkZERkZGRkJDM0Q3MkVGN0EwCi06MTA0QTAwMDAzOUZCRUNDNzVBNkJBRkI1RjY1QTZCRUY2MTJDQ0M1ODNCCi06MTA0QTEwMDAyRTYzOUJCNTY2Q0ZFODYxOEM4NUJENTY1RjdGOERCMUY3Ci06MTA0QTIwMDA3NTBDRkUwQTE4M0I4NzdGNTczM0Q2RDc2MzY3QUM5QzVCCi06MTA0QTMwMDBCMTQ3MzI4MzI5MUVBODNGRTk4RTBFQUIxM0VBMzk4QkFBCi06MTA0QTQwMDA3MkRDNDExNzYzODVERTJGQzI5NUYwN0RFMTI4QzYzNDA0Ci06MTA0QTUwMDBGQ0I2NUYxNjYzMjNBMTVERUYzMkM1OUUwMzcwMTBGM0IxCi06MTA0QTYwMDAyODhDREVBREYyNDBGRDFDMzc2M0FEMDA5OTM1QzJEODBECi06MTA0QTcwMDAyMEM2MUU3MEM5MzI4QzA3NjBBMDI0QzJEQUUwNzlBQTcxCi06MTA0QTgwMDBDNkRGNUJCMDBDQ0Y1NTA3NUJCQzE1Q0E2OTI1Q0MxRkQwCi06MTA0QTkwMDA4MUIyQzdDMTY2MDQwMEY2RjI1ODY4MUUwMzNEQUE4MEMxCi06MTA0QUEwMDAwQThEMzdDM0RCQ0MzNEE4RUZBQ0IyRjgyMzAwMzMxMDQ3Ci06MTA0QUIwMDBCQUUyRjM2MkFDOTlFQTBERjQ1ODA5MzI4MThGRjEzOTA4Ci06MTA0QUMwMDBDMTAxMUUyODZGNjZBQzZBMkI4RThCNDUwMzI1MzA4RjgzCi06MTA0QUQwMDBENDRCNzNCMkVFODI1MjY1ODk3NTE5ODMyRUZGN0QwNTIyCi06MTA0QUUwMDAwQkNDQjQzMTM2RDQxM0IwNjM3RDU3Njk0RTZBNzAxMDY1Ci06MTA0QUYwMDA5NTg3NTA3OUI1MjVDQzAwMkY5NUNDMUQ1MThBRTI3ODQ5Ci06MTA0QjAwMDA4MTkxQTcwNkRDRjE3MUM0QzdDM0ZCN0Y2QjQ1MzAzMEQwCi06MTA0QjEwMDBENkQ2RjVCRDg0Mzc0RTU1MDNGQTc5NDg1ODg5Nzg4MDQyCi06MTA0QjIwMDA3RTRGNTVGRkZFMjE5Q0NFNDI2Nzg3OUQxNTAzM0RGQkJFCi06MTA0QjMwMDBERDE3NjAyQUNFNDdBM0Y3Q0VFRDUzQTIzREUxRkRBMkRCCi06MTA0QjQwMDAxRDRCMTg4RTc3NTU1QUZBMjhBNEEzQjlERkI3QkU3RTNECi06MTA0QjUwMDBEODEzODBGNzI5N0Y3NjA0QjYyNkU4NkYwRUUyMTlDNkNGCi06MTA0QjYwMDA3QjY4NDUzNTdEMDdDRDZCRDYzQ0M2NjZFMDU0OEExOTE3Ci06MTA0QjcwMDAxMUI0Q0Q4OTkwMjlFNzFDMzRCRDQzRkRFMEZEMkQ4Qzk3Ci06MTA0QjgwMDAzM0MzRjU4MURBODkwQ0YwNUE1N0FEMzJCNTA4QkZFQjYzCi06MTA0QjkwMDBBQ0NGQ0U0MUY5OTZCNkRBMDk2QzA4MTQ0MkI2MTNGOEQ4Ci06MTA0QkEwMDBEQzA5RkZDRTQxQkI0MTk2MzlERTAzOEY2QkMzRkMzOTc0Ci06MTA0QkIwMDBENTg3RkZDRDYyQkVGMUI5RjA1REZENUFEM0YzRjdBRkYzCi06MTA0QkMwMDBGOTk4QTVFMzdCRUI4OUI2OTI3OEZCMzc1NUQ3MDZDNkYzCi06MTA0QkQwMDA4QTdBNjdFOEZGMjM4NDlGRUIzNUU2NDdCQTVERUY0QjlGCi06MTA0QkUwMDA4Qjg0NjE4QTM3MDRBNjA2QzY5NkM0REI3QkZCQUZFQURBCi06MTA0QkYwMDAwQ0M0OEIxOTFGREIwNURGMUQ1QTExMDg4Q0VEREYxNTY2Ci06MTA0QzAwMDAxRjc1MDFDNUVFRDEyRThDOTdFRUUyQTFENjVBM0EzRTIxCi06MTA0QzEwMDA1N0VCOEEwN0YzRkMwMTYzMUIxMENGQjMwMENGNzcxNTY2Ci06MTA0QzIwMDAyNUM3MDdENDIzN0FCQzNEMTVFQUMxNTRDNkFCMTM2QzIzCi06MTA0QzMwMDAxNkMwNDNGRDE0ODUzOTE0QzI2RjNBRUI4QkY1RkMxMzkzCi06MTA0QzQwMDBDNkU5QzY2QkM2QTMxOTVGRjUyRjMyNUYxNERBQUQ3RkQ0Ci06MTA0QzUwMDBEMEVEMDMwRTY3QkY5M0Y4ODkwMkQyODY4MzNDRTE1NUZECi06MTA0QzYwMDBGNUYzM0M4NkUzRjdDMDNGOUNFNzc3MkE0QTVGQ0U4MUE1Ci06MTA0QzcwMDA3MTA0OUIxNTFGRTNGMzNEQTY5RjVGMUQwQjY0NDQxNTU0Ci06MTA0QzgwMDA5QUY3QjEyNDc0M0ZBNjlGQTc3OTdDRTZGMUE3QTBCMDVDCi06MTA0QzkwMDAwMkY5MTc3QUJGRTg5RUJEQkE3QUNDMUExRDE0MThDQzU3Ci06MTA0Q0EwMDBEODMzMUU3N0NFMUZEMkEwM0M4NEY5Q0VDMUJBRkE5Mjc3Ci06MTA0Q0IwMDA4RENBMTg4QUVGRkJFNUQwRkEzNkYzQzVEOTE1REEzRDZGCi06MTA0Q0MwMDA3QjZERkE3NUNFRjk2QzQ2Njg0QTY3QkZEOEJFQzI4MjYyCi06MTA0Q0QwMDA5RDY1MEZFMDM5MzA1NURENzAwM0ZDRjc1QkZCQjI1NzgzCi06MTA0Q0UwMDBFM0IzQTU1RTU1M0I5MThERjg4MkY5MTJCREZDOEM0OTZBCi06MTA0Q0YwMDBGRTYyMDhDM0JCNTVDMERGMTRFNkQ0NUNEMENFRDUyMDFECi06MTA0RDAwMDBBNENFQzE1QzI2Rjk1MzM0OTc2RTFFQTc1Qjk0MkE5NEY3Ci06MTA0RDEwMDBBMzQwQkM4Q0VCMDdDN0U3NkIxRUY3NTJBRjlERkEwM0FECi06MTA0RDIwMDA3RUZDNDJDRjhGNjZCQ0JDNTVERDM3MDNFNUM4ODEzOEI5Ci06MTA0RDMwMDA1RTg2NUMwQzVFNDZFMzYyMDYzOUUyQzk2NjUxMDVFOEIwCi06MTA0RDQwMDBEQ0ExMzgyMzRGQzA5ODZBNDJCNzA3QzYwRTQ1QkNCMEY1Ci06MTA0RDUwMDBCMDFENDRFNzUxNEYxMUQ1OTNGM0I2MzFGOUI3OThBMTdGCi06MTA0RDYwMDAzQ0FEQjFCMzIwQ0VFQjdEMUJBQkRFRTY0MjE4RUQ1RDcyCi06MTA0RDcwMDBBNjkzNUIyN0IyMkI4RkEyNUM5NkU1OUFEMDBGQTk3REY0Ci06MTA0RDgwMDA2MDQ0RTI0M0M5Q0ZCNzM4NUQ1MTk1RjNFMTY3OUQ3QzNDCi06MTA0RDkwMDA0M0YyQUNDNkYzODc4MTQ0Mjc3NjBFRTZBOTY2MkNEMDkxCi06MTA0REEwMDA3MERFNkE1QUZBMTA5NkMxRDg1QUFDMDJGMzU0MzMwMzMzCi06MTA0REIwMDA3RjQ0M0RBOUE2RjU4OTIwRkZBNTRFN0Q3MjJEQTdFMzZFCi06MTA0REMwMDBGRDU1MzdFQUU4OTgzMkVCRTc2MTZBNUNDQjMyRTAzRkE5Ci06MTA0REQwMDA0REQwQUY1MkQwMkZBNUM0NjlBNjFGQzM3NTFBMkU2MTNFCi06MTA0REUwMDA5MUE3MTQ4MTAyMjg5RkVFRTc4RkUwQkE0REE2MzcyNEUxCi06MTA0REYwMDAzRDUzNEFBQzVGQjVFOUY5OUFCNTEwM0Y0QTNBQjJCREE2Ci06MTA0RTAwMDBDMzNBNzBCRDA2QkQ1Njc2MTdCRDJGMjFGQzA0M0QxMjc2Ci06MTA0RTEwMDAzRjFEMzZENDI3MzM0MkI2RDNGQTc2ODIwNTMzMjMyQjhGCi06MTA0RTIwMDBGMUJCNzUwRTFGM0VBQkIzNjg3OTU4MEZGMEU0NDEzREZFCi06MTA0RTMwMDBDRTRBN0MzRTVDM0YyQzBDREY0OTdFNDJCQ0EyMzFBMUI1Ci06MTA0RTQwMDA2QkJGMERFNjUwNTA4NkVEODFGNEM0RUZENkVBRkEyOTI3Ci06MTA0RTUwMDBFRURBNkZFN0JBMzJCNzZCRkE0RTU1QzE3RTIwM0JDMjJECi06MTA0RTYwMDBFN0YzRTlFNDc3OUY0QzZFM0Y5Q0Y2MEVEQjZBMjk0RTMwCi06MTA0RTcwMDA4RUJGM0E2N0I2REY5QTFEMkYxRjJCNzA1NjQ3MTJFODc4Ci06MTA0RTgwMDAwMUQ5OUVENEU3NTk2QUQwNkJDMUI5QjEyN0Y3RUQxRDlFCi06MTA0RTkwMDA4NTdBRDg3MzE5NDgzMjc2RjdFQUM3RjdFREVCQ0Q5MEVCCi06MTA0RUEwMDA0NTE4RUI4MUQ1MUZERkU3Nzc5MUREQzFDQkM4OTgzMDdFCi06MTA0RUIwMDBGRUNEQTk5RDY1QkZEMzBCRTVFMkNFNzIxOENCOUJBMEJBCi06MTA0RUMwMDAzQjc2MDVDOEVCRkIxRURGRDcwQ0RGOUYzREUyMjBGREU0Ci06MTA0RUQwMDA3NUJBMkEzNTgyOEIyNzNCMzQ4NjFEODc3MTVCQzFDQzFFCi06MTA0RUUwMDBDOTAwNTYwMzEwNDZFODBDRjVBNEY5Mjg1NkMwMUNFMDhBCi06MTA0RUYwMDAzQjVCRjMyOTg4RUZDOTk5MUFGMTgzNTU2MzUxMzcwQzRECi06MTA0RjAwMDAyRURCRUE1MzEwNUYzRkIyQjMwNjIxMzcyRTlEQTJCM0NBCi06MTA0RjEwMDA1RjI2Njc3MkJCNDNGNkUzNzBCMjcwNEE1OUJDNURDNjQ4Ci06MTA0RjIwMDA3QzJCNTE4RjU4MjczMEQyMkJCMENFQzk2RTkzRUI1QkMwCi06MTA0RjMwMDBCNjMzMkQ5M0VCQ0ZDRUY1NzlFMUY1M0MyRDMzQzE3QTI1Ci06MTA0RjQwMDAzRTYwNTlGQ0UxMEZEMDlFRkQ4RENBOUU4MkE5NENGN0IwCi06MTA0RjUwMDA3RThGOUVERjE4QUEyNzM4MzUzNDk3RTBBQzRDNkVCRkExCi06MTA0RjYwMDBGQzlFMDU2NzY1MDI2Q0FEN0U2M0ZBNzJFMERGQzZFREZDCi06MTA0RjcwMDAwRTFGQUFFNTg1Qjc3RDdDNEZCOTg2NzgwMkJBRTM3NzI0Ci06MTA0RjgwMDBCM0VBMUYyQzg3RjdGNkZFMTZCMjY3RDdGNjY2RDVDOEM4Ci06MTA0RjkwMDA0RkY2OTUwQUQ5NDdFQjM0N0JENTc2ODAwRjY0NTRERTAzCi06MTA0RkEwMDA4RkVEQzk3MTNEOTAzMTk2Q0FBQzRBQjMyMDlGMkY3NUUxCi06MTA0RkIwMDA3MjNFM0Y3QkU0NEU2RjFEREE5NTJFMTdBRDE3RkJDQThDCi06MTA0RkMwMDBBMjdCMkQ1MDY2RkI2MURDMENFNTA3MjMzQjQzNzU3MDJCCi06MTA0RkQwMDBCODNBOTNEQkE5QUIwNUJFN0YyMEY4Q0MxOTQzMjI3MzA2Ci06MTA0RkUwMDBCRTVFMENGRDNCQUQ2MTg2NzZCNjMzNjZBNUU3NzYwNTAxCi06MTA0RkYwMDBDNjk3ODA0RjY1N0JDRTE4MkNEMkExRDg5RkY5N0IzQkZBCi06MTA1MDAwMDAzREM3NzlFMUY3NkEzNjMzRDgzREY3RTBGN0I5MDhFNUVGCi06MTA1MDEwMDAzOEQyRjgzOEIyQ0RFREE0RjNFNzYyRkQ5OUM3NzFEMjZBCi06MTA1MDIwMDAzM0U2NDc4ODlGMDczMkZDRjc2NzkyMURERTY2NDM3OUI3Ci06MTA1MDMwMDA3RThCRUIzNzg3OTUyMUREOTFDNzZEMEFDQUUzNDk1RjA3Ci06MTA1MDQwMDAyQkQxNDJDMDVGNEFBNTFBNTk1NTg0N0FDRDMzNzExOEM1Ci06MTA1MDUwMDBGMDAxQUJCNEY5MTA5RkFERkQ3MkRDQzVCQUZFOUYxMjMyCi06MTA1MDYwMDBGNDdGRERFQTcxRTMzODAzRTNDMEFFMjZGRTY2QjlENzBDCi06MTA1MDcwMDA2MzNCRTNFQTg3NzNGOTA3MDY5NzRFQ0ZCRUFFNkQ1OURGCi06MTA1MDgwMDA1QjhDRjIzNzZDQTNGREQyMEM2NzM4ODJFM0QzRDk2RDA5Ci06MTA1MDkwMDBDQTM5MkU5NzM1RUJGMEI4RkQzNzYzQUNFQTRGNDlFRkNDCi06MTA1MEEwMDA2QURGQzEzNjY0MkZEOTdGNTI5Njg3QTEwQ0RGN0QyMDNECi06MTA1MEIwMDA4QTFGOEUzRDczMDM0RUEzOEQ3OUVDQzU3QTdCMTA3N0UyCi06MTA1MEMwMDA0QkMzRDFCRUUxN0YzMzQyNDZCQkNGNkMxN0Q2NTU5NDVDCi06MTA1MEQwMDBCRTAyNjQwMEJDNDRBQTg2MjE5RjVENkEyMTNFRUJBRUZECi06MTA1MEUwMDBCRENDRDg3RDlDQ0VFMzlBM0NCOEFGN0EwNEU1MDRFRTAzCi06MTA1MEYwMDAwN0M3MUUxRjRCNzIwMzRDMkI2Qzc3RjI1OEQ1MTM4NUQ0Ci06MTA1MTAwMDBEQUVCNDMxNkU2ODc4MTFGRjRBQjExMDVFNjc2QjBBNDBGCi06MTA1MTEwMDA2REZGRDU4OEI3MEE5QjQ2N0FBQjg0NkRCODJFMDdERjQyCi06MTA1MTIwMDAwRkY1MjA5RTAzQzIwRTgxRkE1Q0JGNzk5RDkxRkVGMEJGCi06MTA1MTMwMDBBQ0Q1N0ZEQzU1QUZFM0JCODMxNUM3MkZDNUZEMEFDOENGCi06MTA1MTQwMDBCRDg2NDRGQ0M0RDg0QUUyRUJCRERGNEZBNTc2M0U3QzY5Ci06MTA1MTUwMDA0MDg5Mzg2MEZDRTNENEFGNUYxRDgxRjZFQzBGNkMzRUY0Ci06MTA1MTYwMDA4NzQ2RDNCMjIwNUQyN0Y4OThEOEI4RkE1REUzNzQ3NjA1Ci06MTA1MTcwMDBDMDcxMTYxODRFNzY2NUU5OTE0QTA3REFBRkFCMTU1QTM5Ci06MTA1MTgwMDBBNzEyRkYzMzQyNDY3QjMzQjgxOEVDMzJBREFCN0QwQTMxCi06MTA1MTkwMDA4REQ5OTE5RkJCNkI5RjlBRURBQkIzOTlDMkFFMkE2MzM5Ci06MTA1MUEwMDA2NTdBQkIyQTk5OUU5Mjc2OTU5NUY5RkY0NjcyODdCNUU2Ci06MTA1MUIwMDA1OTUxRUY0RTgyMDc4OUU0QzA0RDE5NUNFRThFNTMzRjgyCi06MTA1MUMwMDAyM0ZBOUNBRTUwMzVDNEQ3QzFEMDI3MkVEQzhGMUZGQ0VDCi06MTA1MUQwMDA1QUU1RkI2MDdGQUVDMThFQ0JDOUUyN0U4MTRENzYzMDUxCi06MTA1MUUwMDBDOEUwQkI0RDNEOUM5MTk1RDBENEVFRUY1Rjk2REY0Njc1Ci06MTA1MUYwMDBGNEQxMUUxRTg1NzRGQzhEOERFNDcwQjJGMUJBNDMyQTgxCi06MTA1MjAwMDBFQjA3OEMzOTMxQTQxMDk0RjQyQjBDQTUzMEFCNEUzRjM2Ci06MTA1MjEwMDAxNEIyQzRFM0VGOUZDNUM3OUY3QjA3QjM2OEQwNkY2NjI2Ci06MTA1MjIwMDA5OEY5MTNFRDhGNjUzREQ4MTc4RkI3MzJBQTFGQ0Q4NDNCCi06MTA1MjMwMDBGMTJERUE2NzIxRkU5NEZCRTMxNDVCRDhERjEzRTY2RkUwCi06MTA1MjQwMDBEQkI5MjQ4Q0ZCRTQ0MjE4MUY4RTQzODNGMUExQkUyQ0YyCi06MTA1MjUwMDAwQUE1NTFCOTM4OTQ0REIwNkYyODkzNjBCRjUwNEY3QTZBCi06MTA1MjYwMDBERjNGRDQ5N0UwMjVBMTIyN0EzRTIwMzQ5MENBMjVBMUMxCi06MTA1MjcwMDBBMTA0MkYwRDk1MTJCQzJDNzQyNUMxODFBMDM3QjFERTdECi06MTA1MjgwMDBBMDUwMjVDMUMxQTE2QkU5Rjk5MEQwNzUwNDJGMEY0RDM1Ci06MTA1MjkwMDAyMUU4MEI0REEzRjdBNUExN0E4MjY1QTE1QTdBM0UzNDg1Ci06MTA1MkEwMDAzNDlGQ0FDMzQyQjc1MkI5M0NCNDg0RTBGMEQwRUQwNDk1Ci06MTA1MkIwMDA0Nzg0OUEwODU2ODQ1NjUyQkQ5MUExQkJBOTdDNDVFODAzCi06MTA1MkMwMDA3RTgyNTc4NkVFMjMzODJBRjQyOEJEOTc3NjRCQUE1ODVCCi06MTA1MkQwMDA4Rjc3NkIzMzNERThFRjAwMEVENzkwOEY5M0FEQkI5OTdFCi06MTA1MkUwMDA1OTVDMkYxREM4RjQ0RkM4MkE4RkQ3QjM1QjQwOEZCQkMyCi06MTA1MkYwMDBCQUQ2MEI2NjcxQkQ5MTg5NzQ0REQwREUzNDQxQUY1MzdGCi06MTA1MzAwMDBCRTYzMEYwRDYwNzFCQUFERjM5RURGOUZDMTRBMTJFRjBECi06MTA1MzEwMDAzN0UyRjI4MUNGRUZEQTJDMkVCRjM2NTk1QkZEMkFGMjRECi06MTA1MzIwMDBFRjYyRTYwQkMzQTM4OUMzNUU1NzUwQkU2Q0Q2QUM1NTgzCi06MTA1MzMwMDA4OUVDQkIwN0IyNkNGNEREMjM5OUMxRjk1OTAwRDM4QTFCCi06MTA1MzQwMDA0RUVDNDU3OTMyMzlFQzc5NzUzNEYyQ0JBMDlDREY4Qzg4Ci06MTA1MzUwMDA4NkY2MEE5QjJEQjREREQ3OTg2NzM3RkFEN0I0QjE4QzlGCi06MTA1MzYwMDBFNEEyRjQyQjgxNUQ2N0QwQTdFQjA1NUUxOERCQkFBRjMyCi06MTA1MzcwMDA5OEQ2NTNCRjMyQUU3RkRBQUVDMUY1NjVGRjdFMzFFRDEwCi06MTA1MzgwMDBERjM3RDlBMzhBMTVFRDlCQTVBMEMzNzRGNkZGQTYzNTE4Ci06MTA1MzkwMDA3NTNGQzFGN0YxRjZFQzM0Q0VDMkI1RUMyNTM0QjE4QkQ0Ci06MTA1M0EwMDA1QUI0RDEyOTAwRkI2RUY0QkY5NDAyOUZGNDhGMDQ0N0Q2Ci06MTA1M0IwMDBBNzQyNzlDMEQzRTE5NzEwNUVCQTM1MzIzQTBERTBDMDBBCi06MTA1M0MwMDAxREQxOTc1MERDMEM4RUI2OEQ3NjQxRjlGMjdENkMwRkI1Ci06MTA1M0QwMDAyRUZGRDI1NjZEOEMxQkNBNDMwRkZCRjcwMDFCQjBGMjk5Ci06MTA1M0UwMDBCNkUwOTg3NDBEQzcxMzY5NEE4N0YxNkNGQTAwMEMzRDVBCi06MTA1M0YwMDAyODU3N0NENkEyQzI3NjI4NEU3RkIwRTNEMDdFOTM3NDI1Ci06MTA1NDAwMDA3MTBGNkIxRDlCMERGRkQ5NkI5OUE3NTRDNUVGQUQ2RDQ3Ci06MTA1NDEwMDAyOTk5ODNCQUQyNjczM0NFMUJFNzA5N0FFNDI5OTg1N0QyCi06MTA1NDIwMDAyRjdGNTRGMUU4Rjg2NDQ3OTYyMkU5RjAxOEYyOUJGNEQ0Ci06MTA1NDMwMDA0QjZFNkVDRTIyQkZFNEU2NTQ0RjI1NzZEOTMxOEU3OTdECi06MTA1NDQwMDA5RUQwOTA4RkFEODQyN0ZCRUE2MkYyQzc0OUJFMDNGQzcxCi06MTA1NDUwMDAxQUVDRDlGNTgyRUYzNjc1REFCQjg5RjFCQjQzQzhCRkM4Ci06MTA1NDYwMDA3RjE1RkM3RTVCRjA3MzMyRkMzQTkxNTc0NjVFNzgxREU3Ci06MTA1NDcwMDBFRjE3RUIxMkQ2RjFDQkM4REZDOUVBOUQxMkY4MzdFMzdDCi06MTA1NDgwMDA3OUIzODVFRDAzNUQwNUZEMDI5RkYyNzVDNUQwOEZGNkZBCi06MTA1NDkwMDBCMUUwRUYwQkUxRjVGOEJGMThERjQ2MkY4MDU3QTZFNTI2Ci06MTA1NEEwMDA5MDlDMDQ3RUJEMTRGRDYzQzlFNDhENURFQzY3Q0NFRjc4Ci06MTA1NEIwMDA2MzVERTUxQ0Y3REI3QTQwQ0VGNTREMkVFN0Y2NjZGMTJECi06MTA1NEMwMDBFNzQ5RTU5NzkwMzM3NjkzN0ZDNzk2Q0RGQjFCRUEwOUIyCi06MTA1NEQwMDBBOEQ5ODlGQ0Q0REUxQzgzOUY3QTgyRUFBOTQ0NzlDM0M3Ci06MTA1NEUwMDAwNjMwQjJBM0QzMDY0NUMyQjg0RjI5MEM2QjY1MkE1NkM1Ci06MTA1NEYwMDA0M0ExOEM3OEVDNTE0MkZFODcyMkIwMzNBQzQwN0Y2OEU4Ci06MTA1NTAwMDAyQThBRDBBOTc5MkM3NUU4N0Y5N0VCQ0Q1M0VCRDVBRkRDCi06MTA1NTEwMDAzN0E5RUZFM0VCNTFGMjQ1RDZFNkJCQjg1RjUyOUIwMkU5Ci06MTA1NTIwMDBGNkNCNTgzMUVFNzgzQkRDMEZCMkU2N0IzRDM2REZBNTlCCi06MTA1NTMwMDA5MzgzOUJCRDVFMkFDQkZBQzlGOEI3MkU1QkYwNkZGMzVECi06MTA1NTQwMDAyQUMyQTc3MzU0NjJCQkUxNUJEOUFBRTBEQjBFM0ZGMjJCCi06MTA1NTUwMDA3OUY4NUJDQzgzRjY0QzY2RjMzMTkyNEY5OTIwOUYxNDE3Ci06MTA1NTYwMDA5MjRGQkNGRjVFQTFENDlGODRBMTdDNTU3NjlFRjAwMzMwCi06MTA1NTcwMDA3ODUyNkY3NEZGREZFM0U3MkNCNEE5NzAzRDhERjJFQzM1Ci06MTA1NTgwMDA1NjMxNEUwMzdBNDhDMzc1M0EwQUM2M0UwQ0YxNjUyNzc4Ci06MTA1NTkwMDBCQTZCOENEMzUxMUJDNTIyNjhGNzAyREVBMkI4NkYwRjFECi06MTA1NUEwMDA1QkRDRTQ2N0IyREI1QkZDQjg5RTk5M0Q5M0U2M0ZENERECi06MTA1NUIwMDAxMzlDOTA3RDlFNzVFMTQ5RDM0QTkxQThEM0VGRkZEOTAyCi06MTA1NUMwMDAzNTJFRTBCRjM1NDU5RTU0MkNERjBDRTVGNTE1RDA2RjI4Ci06MTA1NUQwMDA1NjFCMTNFNTc1QUU5MURGRENFRjMxM0RGQkI5RkRDRDE4Ci06MTA1NUUwMDBEMERGQUUyQ0ZGMzQxQzBGRjBGNTc0ODRGRTAxMUUyQkFGCi06MTA1NUYwMDBGOUFCQkREREIzMDdFNEZBOENBRjI3NEZBOTVDNEZCNTFCCi06MTA1NjAwMDA4MzQ4MUVDRUMxNzY2NTdCQzlFQzlCQTI2QzJFRTc0MjE3Ci06MTA1NjEwMDAwMjI2QjM2RjI0REY1RkI0N0QyM0M2M0IzQkZCRkNFQjZDCi06MTA1NjIwMDBGRkFEN0RGNzZGRENDMjc0RkVDNjFFMEZCNTVBMzVGNEIwCi06MTA1NjMwMDA2NzcwM0Y4REM1RDk0QUVEQjk4NUJGRDE4RkZFNDZFMDcxCi06MTA1NjQwMDAwMzY3M0Y1RUM2QkY0NEZFRTJFNDc4OENEMDc4QTQ5RjM3Ci06MTA1NjUwMDA1MUZBMTNEMzA1NUYzMUFCMTI0MTNEOUU1RUUxQjFENkU1Ci06MTA1NjYwMDA1MTdCNkRFQzNCRDBERTgzMDI0RjcyNURBM0RDN0E3RTEyCi06MTA1NjcwMDAxMENBQTUyQzJCRUVEN0QxOUZFNENFOEFCNzhGRTU4QzJDCi06MTA1NjgwMDBCMkI4N0M2MjYyMUY3N0FCMTg3M0NCMkE1RjA2QkE5Q0Y0Ci06MTA1NjkwMDBDMzA3QjkxRkE1RTU4NzdDNUQ0RUVDQzUyMkFCNTA0RTE0Ci06MTA1NkEwMDBGODk5RTY4MUZBMjk0Q0ZFRjkwREZFRTQwOTVGMjlDQzUwCi06MTA1NkIwMDAwRkUzM0ZGMDk1NEE1MEU5QzdBMjZFRDhFRjRERjQyOUE5Ci06MTA1NkMwMDA1MURDMDdEQTJEQ0UwOEVBRDJDQTFFNEU4NkYxNEQ3Qjk4Ci06MTA1NkQwMDBCQTI1ODJGMTExRkIzMTg1RTY2OTJGNEI4QkEwRjAxQkI3Ci06MTA1NkUwMDBEQkEzMjIwM0UzOTg2NzBFRUM3MTA1MTNEMEZGQTY2MERECi06MTA1NkYwMDBBREMxRkY2NUM2NjM2N0JERTkyRjdCMTA4RjhGNUUyMDRDCi06MTA1NzAwMDA0RUJCMzdCQjMzNEVCQjBCRjk3NEQyQ0M4RTY2QkIxNjg3Ci06MTA1NzEwMDA4RkQzQ0FGODYzODE3N0ZCQkE0QTU0NTkwQkI4N0REQTQ0Ci06MTA1NzIwMDA4MzQ1NTZFQUVEMkE1RDFDNzQxRkI2RjM2ODNDMEVEQTE5Ci06MTA1NzMwMDA3QTg5M0UwRURBRDg2MzI3REFCQjNGRUU4QzgzMDY3Rjg4Ci06MTA1NzQwMDA4NUZBQzQ5RkJEQjUxNEY5Rjc1MURGRjY2N0VFNDU3Q0M1Ci06MTA1NzUwMDAzQTQ0QkM2MkU4MTE5Nzg2N0VGQUYyM0RCOTM4OUY1NzA5Ci06MTA1NzYwMDA0REUzOTc1MEZBRjFDQ0ZCRTBDM0Q5QzZGOEMyMTlERjdDCi06MTA1NzcwMDA3NTE5NTFFMkFERUM4NEVCNUJGQTE3RTU3RTE4RkQ4N0Y1Ci06MTA1NzgwMDA5RTg0RUJEMDg4NkZEOTdGOERDMkY3QjVDQ0E2NzBGOTE3Ci06MTA1NzkwMDAyN0Y0MjhDODk3NEY0ODBFNDQxOEU5NERCRjQzNzkwMkIzCi06MTA1N0EwMDBGNUNEMTlERjUwMUZDNTNEOTNDODFCMzkxRUMwNjNGRkRGCi06MTA1N0IwMDA0NEYxNUZFODJGNjE5Q0Q1OUFDM0Y1NTg4RDhERkI0RDYwCi06MTA1N0MwMDA5NTI1RTU4QjcxNUMzNTZFOTdFMkQwRjlGQjNCODRCRTg1Ci06MTA1N0QwMDAzM0M3ODVENDhDQUZDQjgzQzJFRjlENjhGRUU2Rjg0RTBECi06MTA1N0UwMDA4N0QwMTc4ODJGQkQ5RkZDNDJGODNBNkM2QkExRjhFMTc3Ci06MTA1N0YwMDBFMTU5MkE1QjA5RUQ5QzA5OEVDODY3MDlCRTk3RjA1REU3Ci06MTA1ODAwMDBFNDlCRkUwMDczNzg3RjlERjQ0QzEyMkYzQUJDQTI4MTdBCi06MTA1ODEwMDBFMkNDRTY3ODVBRTdGQkRBOTQ2QUQ0REZENTg4NDc1REI0Ci06MTA1ODIwMDBCRkU1Mzk1Q0NGNEYxMjkwMzk4MjlBMDdERURCRUIxRTYxCi06MTA1ODMwMDBGNDMwOEM3RkY1RkZBMjNDRUM0NkJGNThDNzBCMThCRjc1Ci06MTA1ODQwMDA2MDNGNzA5M0JGQTJCQUY2Q0JGMjk1ODM3NUY4QUM2MDU3Ci06MTA1ODUwMDAzQzNFQkJFN0M3MUUwRDlFNTdGNzZGQ0UwREJCOTJFM0Q0Ci06MTA1ODYwMDA3MTEyQjYwNTc4QkExQjFGOEMyNDdGOEMyRjg3RkIzN0VCCi06MTA1ODcwMDBCQkU1OEY2MTgzNzg1Qzg4RUQ0OUExRjg2OUNBOUJBQTcyCi06MTA1ODgwMDAwRkVEMDZFQzk3RUIwMUVFNEY1RTI2RTIyNkU2Mzg1RTYyCi06MTA1ODkwMDA3NTY4OTE0MUJFQTRDNTE0MTZEMUM1MkZEMkFDNUJDOUExCi06MTA1OEEwMDAzRjlCMTZCM0QyNzNGMzdBQ0JDQTgxRjUzNjMwQkVERTk2Ci06MTA1OEIwMDAyNEZFOTNEMTUzRTJERkZDN0NCMEMwRkJFMURBQjkxQURECi06MTA1OEMwMDBGQTBERURBOTg5RURFMDY2NTE0Rjk2Q0RGOTA4QzlFMkQwCi06MTA1OEQwMDBFRUI1NjI3RDlDMDk4RUNDNDc3RjU1QjUzRERDQkYzQjY0Ci06MTA1OEUwMDBFQjVDRTJFNzQyNzkwRTM3RTdGMEZEOTA3QkVBMUIyMkEyCi06MTA1OEYwMDA4RUE3MzY2MzZCNTJBRkE2NTlDRjFGOEZGNTlCRTJCMUNGCi06MTA1OTAwMDA2OUMzQkFDNEYzRkUyOUYxRDgxRjlBRThEN0RENzhFQzUxCi06MTA1OTEwMDA3OEIxMUUyRjk0ODc3MjkzREQ2OEY3NDg3ODlEQTBFM0Q1Ci06MTA1OTIwMDA5OTYwMEEwQjgzN0NCQ0I1NTJBNTM4MTRGMDA3RTlDNzBGCi06MTA1OTMwMDBDMzBGMkE2NDZGNDY2QjFEQTQ5N0VCNkI1M0M4M0Y1Qjg0Ci06MTA1OTQwMDA1RkFBRDJGQkZBMEQyQUU5Q0YyOEM4ODcwNTIwMUY1RTdGCi06MTA1OTUwMDAxNTcyQzJFQzlGQUQ2NDhBMjE3RTNFNjk1ODhBQTEzQ0QzCi06MTA1OTYwMDA3NUQ2RkRBRkFFNDBGRjcyODU0REMzRkUwRTZBRENERjFCCi06MTA1OTcwMDAxQ0Y2QUI2NEJGNDIxQkJFMjhGQUE3MUZCOENBODdGQTQxCi06MTA1OTgwMDA0Q0YyQzM0MUJGNEFFQjJEN0M0OEY1NjFCN0FEQzIxRjU1Ci06MTA1OTkwMDA3RDcwNkQ2OTA0RjM1NDk4MTI4RkQzNkI3REIxRkQ3QURECi06MTA1OUEwMDA4QTAzQkZFM0RENDg3MUNFOTRCRjNFMUMwOEQwRkUzMUIwCi06MTA1OUIwMDBBODk1OTJERUU0RjFEMzE0QjE0RUM3RjRBOEI4MTFGNTVFCi06MTA1OUMwMDBGODg3RUI2RDBDRkQ0NjFGREU3MTg2RDY3M0RCOEFDNTRBCi06MTA1OUQwMDA5NDE3MjFGRENCRDIzRjZDRjYzMzlCRkRDQjVERkNDQTA3Ci06MTA1OUUwMDAyNjdGNzJCMjdDODY5NzcyMTJDN0VCQTVCQzRBQzYxRjhGCi06MTA1OUYwMDAyMEI2RjY3RjEzMzkyNkU1QzdCQjYyOUU2MzdBNkNEQzVFCi06MTA1QTAwMDBCMDEyRjA5MDM2NTMyNTNDNDhCRTdDRTdFQjNCMUY0Nzc1Ci06MTA1QTEwMDAzOTlDMDJGQ0IxOEEyMTNFRkZFMzY1REM4N0IwQjk0QUJDCi06MTA1QTIwMDA0MjNGNzJBQTk0RUI5ODNGNTExMkE3Q0JENEUwRENDRTUwCi06MTA1QTMwMDAzMjJFRkY2OTBENEIwQzc5MUY2NkJEOTI1Q0FFOUQ1RkU3Ci06MTA1QTQwMDA2RUFEQ0ZFMUZFMEFCM0RFMzFBRjg3N0ZCNERFQTlBRTIzCi06MTA1QTUwMDA3REIwMDRCRkFGQUU5RDE1NDFCOEFFODdCMzAxRTVBRkQxCi06MTA1QTYwMDA1OTNFOThGNUM0NzUyNjM5MUJENzBGMkE4QjBDRDU4RjU0Ci06MTA1QTcwMDA1QkEzN0E3MTNENjFBN0Y3Njc1Mzc4QkU0M0M4QzlFMTVDCi06MTA1QTgwMDBGMkQ0RjQyNzEwOUU0REUxRjkwRTYxMzQwQUQxNEVGRDk3Ci06MTA1QTkwMDAyMDJERDI0NEZCRjJDNTIzOTA0RjQyQ0NENzE2QzY3OUI1Ci06MTA1QUEwMDA3QTUzQzk4RkQwRDI4QkQ3NTNBRjQ5RTU3NkY5REU0QTA2Ci06MTA1QUIwMDA5QUFGMkEwREYzRTY0QTVBMzc0RDYyMkUzRkNFMEVGNkM0Ci06MTA1QUMwMDBDODg1RjEzNEY5MkQyOTE4NUYxOEUzQjZFRTQ3RDc0Qjk2Ci06MTA1QUQwMDBDQjY4MEI3M0IwMzhCRUUyNzkyMUNDQTNDMEY3RjQ0RThCCi06MTA1QUUwMDBDMUZENjdBOUQzREU5N0VDRDRFMjVDRTRDQjFGQzJGRTE0Ci06MTA1QUYwMDAxMEY4RkVDMDAxNzVGQjY2OThFQTAxREZEMDhDNDQ3NjkxCi06MTA1QjAwMDBCQTg0RTYzOEYyOTFFRkJFREQwN0Q3RURFRjU5NzAzMDc5Ci06MTA1QjEwMDBCNkQ3NUE1REJGMDFFM0MzOEQzQjU0OEEyRjREQkZFRDBECi06MTA1QjIwMDA5RDRCQzhFRTM2QzUyOUQ1NzQ2NzA5RkE1MzlBOTQ1NDJCCi06MTA1QjMwMDAxRkNBMTM4OUM3REQ2RTNCQzk5OUE2MjM2OUI0OUY2ODQ0Ci06MTA1QjQwMDAzQUFBODhCMjlCRTRBMUM0RkI1RUE4NTczMDBDNzM5NUI3Ci06MTA1QjUwMDBEQzI0MzcyNUZFNjE1RTU3MjE3RTI0MUQyQTU5RjRDMEJFCi06MTA1QjYwMDBBOEEyQkY2QjVFNTVFNzlGNTcyRjBGQzkwRkU0MzMzNUNGCi06MTA1QjcwMDAzRTBGRDU2REE1RjlCNUIzNTQxRjhFMkYyNEZDNDNFQzExCi06MTA1QjgwMDBGRDM0REFGRjQ5M0EzNzBBN0U5NDc0NUUyNEU4RENCRUJECi06MTA1QjkwMDBGM0NCN0JBRTg0RkEyREZFMkM4QTNBQThCRDE5RTFBMTg1Ci06MTA1QkEwMDBGRDdEMzdGMTg5QzQ4MzlDMzdGMEM1NzRGREJDRjdFQ0VCCi06MTA1QkIwMDAxQzdBMzg4OERGQTdBNzUyMUM1RkRBREQzMkVGQzAzQ0MxCi06MTA1QkMwMDBGRjFBQjE3RjZGQzg1NTNBRUQ1RUY0NUZCQzlBM0RCQURCCi06MTA1QkQwMDAyMUI3M0M0MTdENjFFRjAyQkVFNzYzQkY5NTFFRjY0NUVDCi06MTA1QkUwMDA4NEM1Rjc3OUM5RjIxQjk2RTcyQTE3OUJERkIwNUNERjAzCi06MTA1QkYwMDA3RjY3N0VDMzM3QTdFN0FBOEJBMTY3QTNENUI1NTZDOTMwCi06MTA1QzAwMDA4OEUzNUJFRTlCNjk0OTZCNUREN0JGNzlGRDQ5N0EyOEQ0Ci06MTA1QzEwMDAzQjc3RkYxOUUzRjg2NkI5QjA1QzVEQ0MxNEU4NjdDRDVCCi06MTA1QzIwMDA2MEJFMkVEOTFENENBM0ZDMjBEMzdBQjk5MEJDMDFGQURBCi06MTA1QzMwMDAzRjhFNzQ0ODI2NzdCQTRCRkZBN0JCRDJGRkU5RjNEMTVBCi06MTA1QzQwMDA3RjQzNzZFMEE3RjgxRUJCRUE1OTQ2RkJDMjY3QjE4Q0RBCi06MTA1QzUwMDBGMkM0NUU0Q0ZEMTFERjc2NjQzMkNBNjc5M0Y5MzE3MjhCCi06MTA1QzYwMDAzQzMyNEZFNjU3OThCNDlBQUJDQkMzMjlGMTI5QTgyNzA5Ci06MTA1QzcwMDBCQUMxMUZCRkZBMDdGM0M3MkJFN0U3OEYyOEFERDM4NTVCCi06MTA1QzgwMDA4MkZFMEI2NTVFQzZGNkYzRTc2NTc0ODM3RTZGMjZBMjFGCi06MTA1QzkwMDBERjcyRDVENzExMkNFQTNFRkREQUJBRDJBRkVERkNGNEIzCi06MTA1Q0EwMDAwQjFFMjc3RDYyNjc1RjkwRkQ1RTUxRUI0NTdFMTlFQTEyCi06MTA1Q0IwMDBGMTRGQzZCOEY5QUU5NTQyRUUxNDAxRkRFMEZEQ0IzOUM3Ci06MTA1Q0MwMDAyQUM5QjUxRkIxQ0I0ODZFN0ZDQjYyQTFGMUI2ODNCQ0E4Ci06MTA1Q0QwMDA3RTQyRTlENjNDQ0Y5MERFNjE2MTZCMTZCNEJCRkMzQUU0Ci06MTA1Q0UwMDA0NkYxM0RBRkI2NTJDMTcyQkUwNjdBNUFFQkZFN0NGRjVBCi06MTA1Q0YwMDBENjc1QkU3RkJCODBCQzUyRjI3Mjg5M0Y5NzIxN0YzQTM2Ci06MTA1RDAwMDAzNThGRjU3Q0YyQ0E5RDY3QjQxM0JBQzE4RkVFQkNEQzQ3Ci06MTA1RDEwMDA3RjI4M0Y3QUYzMkU0MkFGNzYwM0ZGQzVEODVFMzIzOTMzCi06MTA1RDIwMDBEMUREM0M1MDU4QTdBQzY3NTZEN0ZFMTlGMzUxNUNBRDk2Ci06MTA1RDMwMDAzMkREQzlGNUY2MzY0NUU4RjFEMjIwOTVERDRFMTIxNjcyCi06MTA1RDQwMDA3Qjg1OUUzRkJEOURCRjU3NDcyN0I2MkIwN0U2NjUxMTU0Ci06MTA1RDUwMDBGRTE3NkU1RDEyQjAxQUYyNDlDMkY0RkM1RUZGNjk0Rjg1Ci06MTA1RDYwMDAzRjE1RjNCNDVEMzQ5RkVDODlEQzBGMjlFNzJGRjNCNEMyCi06MTA1RDcwMDBEM0M1N0NCMjdCRjM3OTY3MUZFMTc5RUQxMjVGRTk2MkVECi06MTA1RDgwMDBCRjkxNTE2MTM1RUMyMzI0REU5NkFCMDEwNUZERTg5OTA2Ci06MTA1RDkwMDAzOTBDRDMyNDYwOUYzMDQ4NDEzRjU3QTZERjU4NUZFMjVCCi06MTA1REEwMDAzQjk3QURGRjVDQzU5NEFGMkFFM0ZCNUNEQ0NGMENDMTM1Ci06MTA1REIwMDBGN0JBRTcwOUY2QUY0MDlGMTJDQzFGQkIzMTRGRUM0RjRCCi06MTA1REMwMDBFQ0NDOEJGQTg4QTkzNUU3RTUyM0RERkU2NDdBNUUzN0YzCi06MTA1REQwMDBGNjI3RjU3OTMyREU2RUQ0N0I1QjUzNTg0MjNGQzNFNzNBCi06MTA1REUwMDA2MjNEODBCRDQyRkU2NjU1RThCOUIxNkQ0NTk0RUZCMkEzCi06MTA1REYwMDBENEFEOTFGRjQxNTU3RENFMDk0NTVEQkZDRkY0QzNGMkNGCi06MTA1RTAwMDBENkUxMjNCQjJBOTU2OUJBNzlFNzA2QjIwQ0U1RkNFQTJDCi06MTA1RTEwMDAxRTg2RkEwNUMxNjJDM0ZCOUUwRDk3MTlERUY3NUU1QzE0Ci06MTA1RTIwMDA2NjI4MTc4NkFFMzBENDJGMDJDNEVBQ0I3REQ3RkU5QkZFCi06MTA1RTMwMDBBMTdFRkY5NkVGMThDQTAzMzZERTZDQTg3RjY5QTRDRTU4Ci06MTA1RTQwMDBGMDdFRTBEM0YzMENFRjA3NkY1RDZBMjg1RkJFRTNGQkUzCi06MTA1RTUwMDA4NkZBNERDMjhGNkNDNkNCRjYzQzZFMTczNTU5QjkxQzBECi06MTA1RTYwMDA1QUU5MkEyM0ZGNjY5M0NCRThERkJDNDdENEFCQ0MxOEIyCi06MTA1RTcwMDA1NTgyN0VGNUE2NjNBNTI1ODhFRkJERTk1NzkwOUYzRDI1Ci06MTA1RTgwMDAxOTVGOThFNTVBMzI3OTZBN0VGRTlDQTBGN0E5OTdFQ0QzCi06MTA1RTkwMDAxNkU0RUI0NTdCNjBERDVFMEU2NUQ3QkI2QjcwNEVFQkE5Ci06MTA1RUEwMDAwNkYxRjhBQzhERjE3QzIxMTlBRjkxREY3N0M2NkJBQ0IwCi06MTA1RUIwMDAzRUVFQUY0RDc3QjFCQjEyRjBDNTNENzk1QTQyN0ZBQTk1Ci06MTA1RUMwMDBFNEEzNjQ3ODkzRkM3ODIxQkNCRDIwRUFGREJENzg3QjE3Ci06MTA1RUQwMDA1RkUxRjlBRTdBN0RCMDJEQzFCODRFODk3NTA1RkFFNjVECi06MTA1RUUwMDBCNTNDNkUwRjBENEIyNTRCREU0M0VCRjE2MkY1ODExQzhCCi06MTA1RUYwMDAwN0U4ODM3NzUxQkY5OEYzNzQ0RjU1QkYzMUZCNjEwREFECi06MTA1RjAwMDBFQkNGRTZGNTJEQkUxMkE0NEIzMjdGRkFBOUJDMkVGRUQ0Ci06MTA1RjEwMDBGNDA2RUU0RjRGMzVFMEVEN0RCOURFNEQ3RUJEQTZGNEMzCi06MTA1RjIwMDBBRkM4OUZERTY0Rjc5NTc0Qzc5RkZFM0U3QzhCRkRCREI2Ci06MTA1RjMwMDA4MDc0Q0VENUQxNTdGOEUzOTNFREEzNDI4Q0VEQzdGMzJGCi06MTA1RjQwMDAxMENDNjVENUY0RkJBNjY0RkI2MzI5Q0Y2MTdGNUM4MjJFCi06MTA1RjUwMDA3MURBMTZEQzdGMjkwOUY1QTAzNUJGOUNGNkNGQTQwRkI2Ci06MTA1RjYwMDA1QTQwMEYzQUM4NEZDMEY2NkI1MDVFM0VDNkMyRUVEMkUyCi06MTA1RjcwMDBFMkYzOTZGNkJDODNGOTlDNzY5NUU4OUE5QThGNzhGOUM1Ci06MTA1RjgwMDAyMTVCOTZBMkZFNDNGNjk5QjlGOTE3QTFFN0Q5ODVFM0ZCCi06MTA1RjkwMDA3RDY0QTc0RDg0RjlBRkQyRURBRjI1N0VDQ0YxM0Q4OTZDCi06MTA1RkEwMDA5Rjg5M0UxRUJGNUIwREZBMTFFMzdCQkI3M0I5OUU1RUZBCi06MTA1RkIwMDAwREZCNkZDNEEzMjczQkUwRUQ4M0Y2M0MzQzdGMDJDOTk5Ci06MTA1RkMwMDA5MTNCOUNENjhGQzRBQjM5Q0VENzVEQjkzMzIyOUZGM0JBCi06MTA1RkQwMDBBM0NFOEUxQjkxOUZDMDNGMTMzRkFGQzJFN0JGNTRFQ0NGCi06MTA1RkUwMDA5RkM3QTk4M0I2QTIxRkYzNzRDQzRFNzg1MzE5Q0ZCQkI5Ci06MTA1RkYwMDA2Q0RDNjc2MzExQTIyM0NGNUY5Njc0QjRDNUQ2QjRBMkRDCi06MTA2MDAwMDA3RUI2MzE3M0JFQjI5NjgxRjNCN0VERTNFN0M0NTgwRUE2Ci06MTA2MDEwMDA3RjFGNjZDRTk1NjhGNzY0NTQxOEY1NTdBNkRGQThCRkIyCi06MTA2MDIwMDBCMkFCQjI0Q0ZBQ0NBOEJGRjJBQjhERkFBQjIwNjhENEJECi06MTA2MDMwMDA1RjNEMUJDQTRDRkFDQ0E4QkYwQTQzQTM0REZBQ0NBOEJCCi06MTA2MDQwMDBCRkZBQUVGRDhFNDk5RjE5RjVENzgwOEQ0NkZENzU2OTYzCi06MTA2MDUwMDBDNEE4QkYwNjNFQkRENEE0Q0Y4Q0ZBRUJGMjFEQUIwQzk2Ci06MTA2MDYwMDBFRjRCQTM3NzE5REUwRkRERjcyMzQzQjlCQ0Y1MTE0M0RFCi06MTA2MDcwMDBGRDM5RkI3RjRFNzkzRDIzMEUzRjYxQTgzN0IyRURBNzc2Ci06MTA2MDgwMDA4NjdBODBGMDU2Q0NGRjlFNDkyNDYxRUNDQTkzQ0YxQkUwCi06MTA2MDkwMDBERUNGMTRGNkRBNTUxREJGMzRCNEMzNUE3ODFFNzcxODE0Ci06MTA2MEEwMDBGRTIxQkQzRTYyNDEzQjFBMjk1NkQ2RjE0QTRGQTBFQjc0Ci06MTA2MEIwMDBBMjg4RTI4QjQyQjVCOTNCQjYwREM3NzE3Q0ZBQzEzNUY3Ci06MTA2MEMwMDBGQkIwOUQzOTFCOERGOURGNzMyM0M2NzIyMzJCQ0U0MEE1Ci06MTA2MEQwMDBCOUQwMDg3QzExMDEzRTk5OEY3OUUxM0FGOTM2OUYyREFDCi06MTA2MEUwMDAxNkU3MDJCQkM3Njc3M0Y2NUZDNzI4OUYzNEVDNkZDNTFFCi06MTA2MEYwMDBCQzc3Mzk0RkM5NkY3RUMxNkY3MjdDNzJCRUYzQzFGRTJGCi06MTA2MTAwMDA4QjZBRjE3OUZBRTExRkRGNkZCNkQ5OTE2RjY3RUY1MEIzCi06MTA2MTEwMDBEODIzNEFEN0Y5MzRFQ0JDNkY0RENGMDRGMzMyQ0ZDMzQ4Ci06MTA2MTIwMDA2Qzg3RkUyNERGMTgzRjE5QTdCQTI4NUU3MEZBOTBFQTQwCi06MTA2MTMwMDBFM0ZFNDZFMzNBNUNCQTlGQzcwOTk2M0VBNzkwQkZDRUZFCi06MTA2MTQwMDA4QzBGNjk5RjI2QzM4QjFBRTZGQjg2QzYxQzE2ODlFODRFCi06MTA2MTUwMDBENjlGMjZGMEUxRjAxQUQ3REY2OUZDMEYxQ0NGNjM2QUU3Ci06MTA2MTYwMDAwNEYzOEQ1MkI0NTQzM0JGMEQ4RkIyQUU3ODRFMkIzMTQxCi06MTA2MTcwMDBBRTUzMzM5RUREQkUxRTA5Rjk0QTgzN0YzODhFRDlFMkM1Ci06MTA2MTgwMDBGQ0ExOTlBRkNDNzg1RkI0RTMzRTNCQ0FDMzhCQzVGQjlGCi06MTA2MTkwMDA5QkY5ODlFMzEyQTBFRDg2RDkxM0U0RDc0OUJDQzJCRUFFCi06MTA2MUEwMDBGRDNERDQyM0M5RjZCMzFGRTU1RkY0N0VGNkEzRkM3RjYzCi06MTA2MUIwMDBFQzdFRjZGNEY5RjQ1QzNCRkFEQkMwQkUzNEZCRDlDQ0UwCi06MTA2MUMwMDA3QTU4RDlCOUU3Q0Y0QTNBRjlCNURCMUNCOEVFODIzRTI2Ci06MTA2MUQwMDAyN0NGODMzMUU5Qzk5MjEyODM5RUVDRENGNzFFNTM2ODA2Ci06MTA2MUUwMDBERkJCMkRDM0FGNzg2MTNDQUY2NEY4MkQwOEE3NjZGODFDCi06MTA2MUYwMDA1NUFGNkVCRTREODAxNzNBRjcwMzdBNkE1QjAyM0JGMUVBCi06MTA2MjAwMDA2QUFGQjQ4RjAyRTQzNzU5NURDOUVCOUJFQjBERjBGMjM2Ci06MTA2MjEwMDA3MzQyQkI3Mzg3N0JDOUZFM0M1QUVBMjVGQkQzM0RGQzI2Ci06MTA2MjIwMDBCQ0Y2RTdCRDIyNEU3NDM3QzYyMUZCQzdGMzgzMzY4ODIwCi06MTA2MjMwMDA3ODBEMkMzQjNGRDI2REI1MkRFMEQ1RTcwRkE3N0EzMzEzCi06MTA2MjQwMDA0OTlGQTY4RjdDQkUxNUYzQTg5QjNDMTY4RkEyMjFFNDI0Ci06MTA2MjUwMDBGOURDQ0QyRTZCRDUxNkYxNUQ4RUUxM0IzRTRFMTVGMThFCi06MTA2MjYwMDAwRDc4QjVCQUFDNUZFOUY5RjY2QTJGRTNFN0FGOTJDQ0U3Ci06MTA2MjcwMDBGMzZBMkY4RjEzREI1ODcwMDNEQTQzMzIzRTZDM0I1NkMwCi06MTA2MjgwMDBFOTQ0NzlEN0M0RkMxRTJFMjc3RDFFN0RGRTg3OERGMTQzCi06MTA2MjkwMDA3OEYwNjgxMTFGOTZDRjU1Q0YzN0NCQzNGQTZENDZGMDEzCi06MTA2MkEwMDA1QkRFMDQ3OTU4Q0IzMkZDNTcyMzdENDNENkIwMDNFRDM3Ci06MTA2MkIwMDBDRTkwMzNGMUJFNzg5QzU3QzRFREM0N0NDMTAwMjVCRTlFCi06MTA2MkMwMDBBMjcxQTgxNzFGRkYwMTdCMzM4MEZEMkU1N0MzOTQyN0FGCi06MTA2MkQwMDBEOUU0MUU1RTEyNzQ3NURGQ0YzNUNEREJDNTNFOUFFNjdDCi06MTA2MkUwMDAzRDhGN0QwNEY2RTk2NDNDNDdFNkNGRTg2MUE1NkQ4NzA0Ci06MTA2MkYwMDBENTU3ODJGODVFOEJGRjNEOTJGQ0I0NzU4ODlGMkU3OTRFCi06MTA2MzAwMDBBRkUyMUMyRUVDRTNDRTlCQzcyQkRCRDk5NUU1OUZFQkQwCi06MTA2MzEwMDBFNUY5ODZGM0IxM0RGRjAwNEZCM0FBNkIyN0ZEMDJFRDBGCi06MTA2MzIwMDA0ODNGNDczN0ZDNTZERkYzMjZGMDVCMkQ1NzdEMjc1MTVBCi06MTA2MzMwMDBCRjc3MTc4RkNEREUyRUZFQzI2NkVGNzlGQzg1Njc4RkEzCi06MTA2MzQwMDAwQ0M4QzA3OEI2RjQ3Nzk5RUJDOTczOTFCMkJDMzZEMzU4Ci06MTA2MzUwMDBEOEZGOUEzMjVFQkU1N0QwRUY3N0UyN0U4QTI3QzUzOEUzCi06MTA2MzYwMDA5Q0E2RjNBMkNFMDk4Q0VFRTk5MEU3NEM2NTNCNEY3QUYwCi06MTA2MzcwMDBERDU0RkY4RUVDRDE0RkUyNzhENzE0MjlCNDBGNUQ5MzMyCi06MTA2MzgwMDBBOTE4RjZBM0I3NzgyQjlGNDQ3QTNDMkVGQTdCNTJGMERCCi06MTA2MzkwMDBFRkU2NjJFRUNGMzFFNzYxQ0UxMUY1RTc3ODQ3MTNDNDNGCi06MTA2M0EwMDA3M0FEMjhDN0VDQUE5QTEwOEY0RjdCRjlGODI3NDM0M0E3Ci06MTA2M0IwMDA5NDFGMjdGQzZFRjUwRjJBNjJGRjY0QkMxNzAxRDZGOTAzCi06MTA2M0MwMDA1QjY5MjA3RjhFQUZCN0QxQjlENzU5QUE2QjBERjI2MzQ1Ci06MTA2M0QwMDBCMjdCMEU2QTA3MDUyOEZGRTlFRjNEM0Y4NkY4NENDQkZDCi06MTA2M0UwMDBFQUFBNTdBM0RFNEU3QkM2Nzc5MUU3Qzg3RUNERjFEM0VDCi06MTA2M0YwMDBCRDc4N0Y1QjJBRTdEMzBFQjc4QkZDRTZFNjdBNDcwNUNDCi06MTA2NDAwMDBGREQ3MEJCRjA2Q0E3NUQ0MkY1OTJBNUI5QzQ4Q0YxQ0Y5Ci06MTA2NDEwMDAxNTcyRjU5QjlGNkJFNkY3Nzk2NEJCNUNGNDlERjk1Q0E0Ci06MTA2NDIwMDA3MzlCQkQ2RDc1M0U4RUY3MkFDNTg3RTcxN0YyNkIzQ0VGCi06MTA2NDMwMDBCQkYzNzNGMDFDQTM0NjNFQkUzNTQ1MkNCRDAyREY5NzZGCi06MTA2NDQwMDA1QUU4N0RFNkY1OUUzNTM2Q0NGQkQ2MTg2NkVFMzMxQjUyCi06MTA2NDUwMDBGNEUzODY3RTUyMEE3ODFDNjc3REY4QkFEREY5NTAyRjg2Ci06MTA2NDYwMDA0M0VCNjBDNTgzRThCQ0Y3NzgyRkFFREI2QTlFM0Y2RkQ1Ci06MTA2NDcwMDA5RURGNTcwMjFGQUVENUIwQkY0MDdDNjg4OUYzRDBCRjA2Ci06MTA2NDgwMDAxMjc4MDA3OUYzNjdBNDQ3QTVDNkI2RjM3MzU5M0MwRjk5Ci06MTA2NDkwMDAxNkQ5OTJGMjE1N0QzQzVGM0IwREYzOURGQTcyNzk4MzFDCi06MTA2NEEwMDBFRkJGQ0UxQTczMEVCRjkzRUI0QjE1RjgzNjlGRTc0RTM2Ci06MTA2NEIwMDAyOUI4QjhGM0RDOTM2QjEyOEZCNzVGMDFFNzg3QzMxOTc0Ci06MTA2NEMwMDA4MThDMDJFODc3RjJBODk1REMxRkY2RjVCOTczRUE3MEMzCi06MTA2NEQwMDAzNDhFRjkzQTgxRUYxOUZBMkI1MjcyQjgxQzRFRDEzNDJFCi06MTA2NEUwMDA5MkNCQ0NBMzUwOUVBQjUzRjMzNTYwMzlDNTc1ODU0NzJECi06MTA2NEYwMDA0NTNCRDlDMUUzOTI2Q0E2ODVFMUZEMkE2MzQ0M0JGRThFCi06MTA2NTAwMDA2QUE2RkNBMTg0RkI2NUI5OUNCNUIyM0Y0OEZFNTcwNTVECi06MTA2NTEwMDA3Mjg2QTM5RUU1N0Y2MDNGQUQ0RjgzRjk4QzcxMURBMDBECi06MTA2NTIwMDBGODY0NEFCRkM1OTU3OEFFRTFFNTE5QkM4RDFGMjUzOUUxCi06MTA2NTMwMDAzNzIwQ0ZCQjc3OUVFQjBGNDcwRTE4Q0VGNURCMUUzRDA1Ci06MTA2NTQwMDA2MDM4RDdDRjFFM0RGMEY3OUNFQkFGMkM3OEY0QzAzRkZFCi06MTA2NTUwMDBGMzVDQkY5NDY3ODdENUUwRTFEQjAxRkYzNzAwNTM4NTJCCi06MTA2NTYwMDBDQTEwNUE1OTBERDFEQjRCNzhCQjVFRTAzOUZDMTVFMEZGCi06MTA2NTcwMDBEOTE5QzdGMzBEM0JGNzEzRkUwRURCNjBEQ0QwQkY2REZFCi06MTA2NTgwMDAzNDQ3QjVFREZCMTk5MTI2OTI4QjExRUFGNzQ2NjdDQjlDCi06MTA2NTkwMDAzOERDNzdCNkRCM0I4NjYwQkZFRDJGQkVERDNCMENGMjBGCi06MTA2NUEwMDBFNEM4MEZDRUI4MTlGMERGODdENjBFMzczRTNGNzlDNzYzCi06MTA2NUIwMDAxQjZFQzRENzkxM0I1NEIyRDdFODVDQjQyRTFGQTk1RUMyCi06MTA2NUMwMDBGMEQ1NEIwNTgxOUI5MUFGNjZBQ0Y4RUI3MEJEM0RDRTJECi06MTA2NUQwMDA0MkI5QTQ3RkU3NDY1NDRBQkQ5MkYyNkZGRUQzNjk4MjY2Ci06MTA2NUUwMDBFOTc4NzlFMUQ2NkM0MzU5RUFFNTg1OEVDNEU3RDQxRjkyCi06MTA2NUYwMDAxMUVCNjJFRUIzOUJFRDNEMzVFQzNGQjgwMEZCM0YyOTVDCi06MTA2NjAwMDBGMjFCNEU2RTc3RDMzRTRDOEVBN0VFRDk1MjNCRUUzQjNCCi06MTA2NjEwMDAzRkRDRTk2MDUxRjIwM0I3REExOEY5QjNGQzEzOTQzQzlDCi06MTA2NjIwMDBCQ0M3ODhGRjk5QzdGOUNBQUUzNDZBNkZENjgzMkFGOTA2Ci06MTA2NjMwMDA5RDZBQTFBRjEwRTAzNUI4NzMyRURGMDc5QkU2MzFFQjAyCi06MTA2NjQwMDA4ODM2MUVFNUQ1QUM3NTBBMEI2QkJDRkUxRDc4N0Y0NkZGCi06MTA2NjUwMDBFODRFOEFDMzk4RTc2OUQ2MkY3MzkyREM5RjMzNjdFN0M5Ci06MTA2NjYwMDBEREY0RkQ0Q0U2QkYxQkVERDk1OTJERTZGN0Q3N0M4NDUwCi06MTA2NjcwMDA0QzNFRTcwMkYxOUM3QjBCODRERTE5Q0U0NjlDRUI0QjMzCi06MTA2NjgwMDBGMUEzOENDMURBODVGNUNFQzkxNTdDOTE3RUIyQzI0OUUxCi06MTA2NjkwMDBGMEIzMTUxRTgyMzcxNzcwM0U5RUJGNjNGNzJCM0Q2OTFFCi06MTA2NkEwMDA5OUI3MEU0N0JERjRENkJFRkFCNDlCQjVCOEREM0Q3Q0I0Ci06MTA2NkIwMDBGM0FEN0IxRUE1QUFDNkZDQ0MxQTgxRjcxMTIyMkY3MzVECi06MTA2NkMwMDA4RTM4Rjc1MDdFRjhGQzc5OTkzNTg4OEYyMTVEQzcyQjdECi06MTA2NkQwMDBFREVDMUE5M0RGNTdEQURENjY3QzlDREUzNzI2MERGOTg4Ci06MTA2NkUwMDBFM0Y5MDJCMUNGMUQwMTc4NTFGRjdFQkMyNEZCNkVBMUZFCi06MTA2NkYwMDBDQUVGNEQzMzNGOTdFQkU4NjZDMUQ3MzNCNzRDNTlEMzU4Ci06MTA2NzAwMDAwM0ZBNkY3QUYxQTMzRTZEQzRBN0RDN0Y1MTJFRjA1NURBCi06MTA2NzEwMDBFRTVBRDM4QUYzMkY2NzI2QkY2MTk4MUQ2MjNBN0UwNjMwCi06MTA2NzIwMDA3RTUyNTFFRjk4Rjk1NkYyMTMzQkM0QkY3NzBBQkY0NjI5Ci06MTA2NzMwMDAyN0JGRUVEQzQwRjg5NTdDODUyNzFEMkM2OEMzODFFNURBCi06MTA2NzQwMDA2MkE5QjhGMDNENTdCMzVBOENFNTUzQjZCNjNFMjg0RjEwCi06MTA2NzUwMDBFNjk4RkMwREE3OTRDNEZCQjdCRDA1QzUxQzBGOUE3RjM2Ci06MTA2NzYwMDAzQ0U2NUZDQzYyODEzNURDM0ZDRkVGQzczOTY5NkQ3OTlDCi06MTA2NzcwMDBFNTc2NUNFNzVCRjgzQTVCRjg4QkU3RkUxQkU1RDdCQzk4Ci06MTA2NzgwMDBGRjdBMzAxREU1RDdDN0Q2OTYzQ0VDNkZDMTUzQUJEMzJCCi06MTA2NzkwMDBGRDI4QzdBQ0UxNzRGQ0ZFRTM4ODlBRjAxQzcxNTEwRjMwCi06MTA2N0EwMDA0NUU2RUJCQjMwNEY2RDExQjExQUZDNkY2Njc4MTJDQTJCCi06MTA2N0IwMDBDRjNGM0Q2NUYzQTAxRkI2RjE2OTQ3RDQwMUY4NThCNDQ3Ci06MTA2N0MwMDA5REUzMTFDQTQ3NzlGOTRFQzI1N0UzMEVFM0JBOUNGNzJECi06MTA2N0QwMDAxRjBGRTY2OUU0MEYwOEY3MTRGOEVCODkyMjdDRDExNjQ1Ci06MTA2N0UwMDAxQkU1QjUyRTNBQTRGQUIwOUI0NkQ2NDFGMzMzN0Y4RjEyCi06MTA2N0YwMDBFMzg4MDFERDFBQjdBQUI1RjY4Q0FFRUZDMTEyQjJFMzk5Ci06MTA2ODAwMDA3QTZCRENDRUU5RDlCODlERDNBQkQxNjQ4NzM2MDhCOUIxCi06MTA2ODEwMDA2REU2RkZDQzFFNDZCRTA3RkM5MDVGNERFNkRCQjIwODdFCi06MTA2ODIwMDA5N0RGNERDRjNDM0NFNDI4OENFRkIzMkRCRjRENTcwNjhFCi06MTA2ODMwMDBDNUY5OUY2MTU2MjhFMEVERjRENkZBMTlGNkYzRENEN0Q2Ci06MTA2ODQwMDA3MzRBQUM5MzRFQkQyMEY0OTBCNjAzMDY5NjBGQzU5REQ3Ci06MTA2ODUwMDAxQzJFQjA0NUQzQUYwNEJDMkNEODZDRjM4NUUxRjE4MjdCCi06MTA2ODYwMDBFNzU0QkYwQkVEQTg3NzFDNzRGRkM0RkNFNzVFN0VFQjFBCi06MTA2ODcwMDAwQTE4REZGQzZEQjY5QzA5N0MxQTJFOTRERjkyNUU4RDlGCi06MTA2ODgwMDBDOEU3NjU3MUZBQ0NGQkY5Q0I3NkNDRDNDNEU3Nzc2NDYzCi06MTA2ODkwMDBDNUU5MzQ3RkRCNkUzQkU2N0Q5QUYxMzk2NkVCNkUzQkYyCi06MTA2OEEwMDA1RjZGMjY3QTZEM0QzQTFFRjU3NkQzMzM2N0VEQzgwRkRDCi06MTA2OEIwMDAxRkVGNTI1ODdFNTFEN0VGMUIzNkJGOUM4RTcyMDZGMUU4Ci06MTA2OEMwMDA4NEZBNDVEMkFEOTM4RTVERTgxNzlERjRDQjYxNTRDRjI5Ci06MTA2OEQwMDA4MzcxOUUwQkQxRjE3MzNDODM1MDRFRkNGRUIzNUZDMkJCCi06MTA2OEUwMDAzODFBREU3NUY4MTAwRjBEM0ZCQjM1MURFN0YzOTE3NUIzCi06MTA2OEYwMDAzMUU3RkJDNzU3RTdBMURFNkVCMDg1RjMzQzA0RjlGMzNGCi06MTA2OTAwMDA4NjREREYyNTdFOUNGM0ZBNzdGOTdENEVDQzVGODBFQkQ4Ci06MTA2OTEwMDAxOUU2NUI4MEYzOUNGNUQ4MEQzNENGRDkyQzQ4RkNEODEwCi06MTA2OTIwMDBGMDM4QkZERkYwNEIyQkFCNEFCNDFGNzg0Q0FDOUI4RkQ5Ci06MTA2OTMwMDA5RTcwRDBFNkUxMjMzQkUzRjc4NUZDNEUxNUY3NjEyRDExCi06MTA2OTQwMDAyMTdCRTVCQjYyQ0UyMEExQTlGQ0E1NTNEMEFCODc4Q0VGCi06MTA2OTUwMDBGQjczRjlENjI4NkEzNTZFQjk5M0U0REIyN0JERkRGOUUwCi06MTA2OTYwMDBCOEZFMDEwRjQ2RkZFQ0VCRTNGMjg1NUNBNDdCNURFODJCCi06MTA2OTcwMDAzQkUwQkYzMUY4MUNFQkI3REFGQzI5NDMwQ0RGODlGQ0E0Ci06MTA2OTgwMDA1QkRFRkYzMkQxM0Y4QzNCMTVGRDdDMUZFNTE5RjdCOTZCCi06MTA2OTkwMDAxMkZFQjY4N0Y0QUJCMTU2QTZFN0IzNjQ3MjYwQ0IzQTg5Ci06MTA2OUEwMDBFMkFGMkYwRTcxMzlCMzI4MzJBNThBREVCN0RBQTJGOTI5Ci06MTA2OUIwMDBGODNFQjJGQjdBODVFNDA0RDgyMTg5RDZGOTE2OUI1OEIzCi06MTA2OUMwMDBFN0M2RjczMDRFQUJBMkM3RUYyRTdFN0U0RkYyQ0JFQzgwCi06MTA2OUQwMDAwN0EwQkU2RTVEQzdGOUM3MUU3RjVFMTQ1RkFGMzI3RjMyCi06MTA2OUUwMDA2MzhFQzk5RTkzRDAyQzI3MUUzMkM5MDlGOTNEN0IyQzlBCi06MTA2OUYwMDAzN0UxRjk4OEI4N0MwODEzRkUxNkQ4MjIzRjc5MDRENzBFCi06MTA2QTAwMDBGNTNCMEUzQTE3QjlFMDM5MUJEREVGRjNFOUIzN0JERTU2Ci06MTA2QTEwMDBCQTE5RjhGRkQzQUQ3MjNEMUJFNUFGNzkzRDM3M0M3RjI2Ci06MTA2QTIwMDAwMzRCQjQ5RTNGQ0QwOUIwODRFQjE5OUUyNzVDQ0YzOTUwCi06MTA2QTMwMDBGQ0JDQzFGRjI5RjkzQjI3ODlGQ0REREQ0M0Q4NjMzQTYzCi06MTA2QTQwMDBCQkUzNEEyODdFRjJEM0Y5ODVCNDNGMzNFMTU3RTJENTYwCi06MTA2QTUwMDAyQzRGQUJEMTU4QzhFRDJBNEZFMUVGMTBEM0UxNTNFMkYwCi06MTA2QTYwMDA1MUYyRTlCQ0ZGNUM0OEZENzRGMkIzRTQ1N0M5Q0Y5RDE1Ci06MTA2QTcwMDBGQzZBOUVCNzExOUZFNkY3Q0RCODc3Q0E4REQzREZCNjEzCi06MTA2QTgwMDAwQUY2RTUxOEFGN0Q1MUE1RkNCQzc2QUQyMzNEMEJGQUE3Ci06MTA2QTkwMDA1RDJERjI3QkRBM0RBMjlDQzlDQjFEQjlGNjM1Mjg0RjlFCi06MTA2QUEwMDBFNEYzOEUxNDlFRUZEMDFFRTg0OENGRDRFRDA3OEVFRUFGCi06MTA2QUIwMDA1NEQzRjEzQzQwNUIyNDcxNUUwNjY1NkNFNEUyRTlENjk4Ci06MTA2QUMwMDA2NEVGNTdEMjdBNjg0RkU1RkVCRUY2NTRFRUU3MUJBNzk3Ci06MTA2QUQwMDBCQUZBODQ3MDdGRDdDMkUzNEIzMzU3REU5NDhFRkJGQjQ4Ci06MTA2QUUwMDBGNjlEN0QyNzU3RTM3RTYwQkZDQTczOEVDMjdFNkIwMTIxCi06MTA2QUYwMDBFMEI3OUU0RjlEOUQ2NEUxODc0NkExRkRCRTczRkUwNEY1Ci06MTA2QjAwMDA2QzY3RTY3QTIzNUU2NkJCQjZEOEIxOUQyRkQ5MUQwNEFCCi06MTA2QjEwMDA2NzNGNjA4QkYzMDlGQzZGMUVFNjZCMjE5RjNGNjY3QTJGCi06MTA2QjIwMDBCRUYzNUFFMkFCNzkyNkJFMEEyMjVGMjUzODRGRTJFQTZECi06MTA2QjMwMDAyOUY4QUE5NDk1RjJGREI2ODg4RjA5QjkzNzRFMUQzNDBECi06MTA2QjQwMDBCOTFBRjMyOUY3RjFGMzFFQTc3N0FBNkMwRENFRjc1OUZFCi06MTA2QjUwMDAxMTJGMEJFNzEyQkYyRTAyRkVENkZCNEQzRjQzQkUxQjhCCi06MTA2QjYwMDA5MDVDQ0Y3RkY2QzI5MUUxQjc0Mzk1MDVGRkZEREU5MEMzCi06MTA2QjcwMDA0NzAxN0VGNkRGRUY1Q0YyMkIyQ0ZGRTJFRDNFRUZCMTNBCi06MTA2QjgwMDBBRUY1QzdFQ0ZBRjMyRDk0RDdCOUNCNDFGNzlBQjZFRjJGCi06MTA2QjkwMDBGQTc1OUZEQkIxRkM0QjA3REQyRkRBQkU4QUVGQjNDMzdBCi06MTA2QkEwMDBCQkRDQTRGRkRCN0I3MzdCQjFFOUM1QjM0M0RBNDg3RjcxCi06MTA2QkIwMDBGMTdCODM0N0Y0RTRFNzNFNEVFRkZDQ0IwNzBBRTZGM0I0Ci06MTA2QkMwMDBFRDg0NTlBMTdDMTRGQkI3QzY1RkE2RDAzRUJERkRDNUMwCi06MTA2QkQwMDBCMzg2RkRFOURGM0I5RjQ1RTJEQzU1QkI5QjU1RTMzOUJFCi06MTA2QkUwMDBFOUY2NEM3RTRFQjVGMTU3MjM5RkM0NzM5NzBCQjdFRjcwCi06MTA2QkYwMDBCNkQ3QzNGQjMxRkZGQkFGNDM1MDBFQjUzRkNGRUQwRTExCi06MTA2QzAwMDBCMDg3MzczMTFGNjNBMzFGQkQ2NzgzMERFODc3MEE2RDE3Ci06MTA2QzEwMDA0NDU4MzNFRjNEN0E3MDYyNzg1MDIyQkM3MDNDQjQwMzI0Ci06MTA2QzIwMDAxRTcwNUU4MDk3MDY5NDlGQzlGMDMxQjUyNzNGN0ZGQ0E4Ci06MTA2QzMwMDBBRjg3OEZDRjZGQzFGRTE3RUMxQzQxRjcwQ0M3RjFBMkQ1Ci06MTA2QzQwMDBGOEY5NzMzN0U1N0JDMEZDRjlGMzVENjc4N0EwMUQ3NTI0Ci06MTA2QzUwMDBBMUY5MkVGRkZGNkNCRTBGRkVDQkNFOTdGMzdCRUY5RTBDCi06MTA2QzYwMDA1QzFGOTlGOUJFMkI1RkZGRTIzNjJBRkZDQ0VEQTNGMTQyCi06MTA2QzcwMDA3NjczQkRCRkYwMkZCQkRFRkYzOUY0N0VFMzVGNzZCRUQ3Ci06MTA2QzgwMDAxN0EyRjc3RTQxNkZCNzA3RTMzMkVEMkZGRUI1MEZCQkJBCi06MTA2QzkwMDA4ODc5OUZGRTdGNzRERTlENzY4RkM1RTcxQzA2RTM3QkI3Ci06MTA2Q0EwMDA5NzQ1NkVBODU0OTJFNzhGMTZGNjMyRUUzM0U0M0REQzNBCi06MTA2Q0IwMDA5MzcyNjY5MzFEMzFDOUNGRkQzMTREQUM2QzFGOUVCM0VECi06MTA2Q0MwMDAwQkZCNTU4QTVGNTBGMjBFRTBBMUY1RkFEMjA4RTU4OTc4Ci06MTA2Q0QwMDA1OUMzRkQxRkMyQkNCMTFCMTdGQUY4N0Q2NUM2RkREN0FECi06MTA2Q0UwMDBBNEJDQUEyQUI0RTcwRUFFODQ3MTQxQkQ4MzZFOEJBNzAzCi06MTA2Q0YwMDAwOUE2MzBEOUFGOTJGRDA3OTBFQ0JFMzc0NzVGNEI3OUJDCi06MTA2RDAwMDAyODkzMkI4Q0ZCOTA5QjRERkI4OTlCQUE4REVGNkY2NDg2Ci06MTA2RDEwMDA0RkU0NjJCRURGOEQwRDM2Q0E0RkJBQzE1NEZGQUYzRDlFCi06MTA2RDIwMDAzRDQ0RDc5QkQ4RTJENURDOUY3MzcxNzg5QTJDRjBENDgwCi06MTA2RDMwMDAxNTBGRTdDNzVCMTczQzg5RkQyNkU1MEU2OTVERjFFNjk3Ci06MTA2RDQwMDAwOEYyRkRBNzAzNUUwODdCNEJFNEU1MkRFRDE2M0U5OUE2Ci06MTA2RDUwMDBEODk3M0E0NEQ3MTJCRjBFM0ZCRjc3NTRENzJFRTE0NTlDCi06MTA2RDYwMDBFMkZENjJGMTJERTk2NEM2QkJDNEFGQzQ5Qjk5MEVDNUI4Ci06MTA2RDcwMDA3OERFNTM2NzlGQzdBMUYxNUU2RDI2RUNDNjQ5OUQ3NjBDCi06MTA2RDgwMDBBMzhCRjBGOERBMTY3RTVFRTJCNThBRkFGNUE1NTg3RTk2Ci06MTA2RDkwMDA5NkRGMDdGRkU1QThBMUNDMDlGMzNENjg2MzNCMjgyRUU5Ci06MTA2REEwMDBFNEY3NkI5RUUxRjFGQzE5QTVFMkQ3MTQ5RkMwRkM0NTA2Ci06MTA2REIwMDBGRDdFMTVGMzE3RjVGM0MyRkM0NTdEMTlGMzE3RjVGNUM0Ci06MTA2REMwMDAzMTdGNTFGRjFFRjMxN0Y1RUYzMTdGNTE1RkM2RkM0NTUwCi06MTA2REQwMDA3RDdEQ0M1RkQ0OTczMTdGNTE1RjFGRjMxN0Y1NjVDQzc0Ci06MTA2REUwMDA1RkQ0RDdDN0ZDNDVGRDdCQ0M1RkQ0QkZDN0ZDNDU3REQ2Ci06MTA2REYwMDAxOUYzMTdGNUY1MzE3RjUxRkYxRUYzMTdGNUVGMzE3RkNBCi06MTA2RTAwMDA1MTVGQzZGQzQ1N0Q3RENDNUJENEJGQzdCQzQ1RkQ3QkQ3Ci06MTA2RTEwMDBDQzUzRDQ5NzMxM0Y1MTVGRkZFQUQ4NEI4NjcyMjVGQkE0Ci06MTA2RTIwMDBBREExRkUxOEU3MUI4NkYyMzhDRjdCODZGQURGRjYxRThGCi06MTA2RTMwMDAzN0JDQkY0NkZCRDRGMDVFRDJGRkRBOTIzMzg2RTcxODQ4Ci06MTA2RTQwMDBGQjA4MEZDNzdEMENGRjlCRThGQjhCQTExRDJCMEI1MDk0Ci06MTA2RTUwMDA5Q0Q0Q0UxNjEzNzRBMkJGMTc2MDJBREI0QUQwMDVDQjkwCi06MTA2RTYwMDAxQ0UxODkwMUMxNjc3QTIxQkY2RTBBQUY0MUU2M0EzODU5Ci06MTA2RTcwMDBGMjZDMUY5NEZGQUY4REJBOEVGQjI1NDQ3QzYxMzJGRTBECi06MTA2RTgwMDBBNzA2NEM5Q0Y2NzUyRkRDRTdDQUY4Njk3QTRDNjVEMUU5Ci06MTA2RTkwMDBBMUMwODczMTg1QTAyNzk2QzZBMkQ5QzA4N0IxMTQ4MjI4Ci06MTA2RUEwMDA1OUIxNkM3QTlFMURDQjI0OTgxM0VCNDlDRjczNjMwNUJGCi06MTA2RUIwMDAwNEYzNjI3RDA5RTZDNzhBMDg3QTYzMDMwOTE2QzQyRUMzCi06MTA2RUMwMDAyNUQ4MjMzNjk0QkVFQjE5MkIyNUQ4MkI3NjI1M0RFRkZDCi06MTA2RUQwMDAxRDFCNDlCMDRGNkMwQzNEMkY4QzU1MTJENDYyRDcxMjNDCi06MTA2RUUwMDAyQzhBNUQ0M0IwMzg3NjFERDVFQjFCOUI0MkIwNUY2QzlFCi06MTA2RUYwMDAxQTNERUYxRjlCNEFGMDkyNTgzREMxMDFCMTVBODIyNUJECi06MTA2RjAwMDBCMUY5MDQyRjhEQ0QyNTc4NTlFQzU2RkE2RTYwNkMwOUQ1Ci06MTA2RjEwMDBDMTQxQjFEQkU5RjlFMEQ4RjcwODBFODkzNTExQkMzQzc1Ci06MTA2RjIwMDBCNjkyQTAyRjc2MzdENTJCOERBRDIzNTgxNkJCOUY5RURBCi06MTA2RjMwMDAwRjhEREQ0NzcwNThFQzUxN0E1RTFFRkIzMUMxRTFCMTE3Ci06MTA2RjQwMDAyNzA5OEU4ODZEMjY1ODExRkI0RjgyMjM2M0NGMTBCQzEyCi06MTA2RjUwMDAyMkY2NzNGQUVFQ0FEODM2ODJBMzYyQkZBMkU3NTdDNUZCCi06MTA2RjYwMDBGRTE3QzE2RkM1RjZEMEYzQUI2M0JCMDlGQTYzQkZBNUNCCi06MTA2RjcwMDBFNzk1QjFGRDA0NDdDN0RFQTBFNzYzNjJBRjEzMUMxQkIyCi06MTA2RjgwMDA3QjhGOUU4RjhCQkQ0MzcwN0NFQzM4QzE2RkM3OEUxMjk4Ci06MTA2RjkwMDBBQzhBN0Q0QUYwOUFEOEM3MDRGRjJENzY4NkJFQkIzNkYwCi06MTA2RkEwMDBGNjM5QzEwOUIxQkZEMEYzODlCMTNGMTNFQ0RDRkY4RkQzCi06MTA2RkIwMDA0QUZBQkIwMjk2NzNCODdGNzY2NTc1RUJCRUIyRkJEMjE4Ci06MTA2RkMwMDBEMjQ5MkU0RUJBODNDQkM1ODdEMzRFRUQyNTM5MzlEMjVGCi06MTA2RkQwMDBBMTM5NDhGODZEMzRDNEJCRTg0NzI0NjBERkI3N0JFNENGCi06MTA2RkUwMDA0N0JERDBERTU5NTM3OUZDRkQ1QjUxOUYyRDcxMzBBMTE3Ci06MTA2RkYwMDBDRjRDNzJGNzZCOTdGMDc3MzJDQzQ3OUMyRUY4RkFCNUVFCi06MTA3MDAwMDA4QTNEQjk2ODQ3QUQyOTZCNUI4MDdFOTMwRDQ1NkQzNTMwCi06MTA3MDEwMDAwOEYzN0E3M0JGQUM1QkMwOUNERTNDNUZFMTJGMDNCODIyCi06MTA3MDIwMDBGRUFENTlEMjlGRkZCRTQwNEVGN0U2Nzc1RDJGRkU5RDI1Ci06MTA3MDMwMDBBQ0ZGNzUxRjBGRDcxN0FFOEUzRTc0NUVBRjlCRUQ3NDFECi06MTA3MDQwMDBCN0RFODVGMkIwNjJCRDgyOTdGNUNFM0RERkY5QzE2RTQ1Ci06MTA3MDUwMDBCNzMzQjQ3NzgyN0NBRTZGRDBDRUE4RUVCNEYzQTFBMEU0Ci06MTA3MDYwMDBGQjYzQkQwMzdFMUMzRkIzRkE4N0UwRkJEMUFCMEE1NDQwCi06MTA3MDcwMDBGQzVEOTVEQUY1OEEwN0Y5QTVCRUI5NzQzQ0QyQjU4Q0VBCi06MTA3MDgwMDBGOUM5MkYzOTNENDkzRUQ5NkM0MUQ3QkFDNTM2ODZGRTdDCi06MTA3MDkwMDBDOTNBOEQ5MTdGQjg2RTNCQ0Y0MzQ2N0ZFQTQ0RTA5NzczCi06MTA3MEEwMDAwNkMxMkYwQkQ3N0Q0RTdFQTc4NkM1NzM3OERFNTM4NDJECi06MTA3MEIwMDBGQkE3RTRFRkQ4Q0M2RkQ5RkMwQUJBRjVCRTY0MDcyODY5Ci06MTA3MEMwMDAzRjdFRkVEMzQ2RkY1NUEzRjA0RjJEREM2QTdBQkVGODEzCi06MTA3MEQwMDBEQjA5RkQ5RTY2QkZENDhDREVDMjJGRTVFMzc5NEY0QzAxCi06MTA3MEUwMDBFRDQ1RjNGRTEyRTY4REY5MjRDMURCREM0RUQ0MUI4MEE2Ci06MTA3MEYwMDAwRjhBQzM0ODNDNDhCRkE3QzQwN0VCN0FFRTgyRjI1NzE5Ci06MTA3MTAwMDA0RkVGRUI0Rjc5NzJBNzM1MkQxRkVCMDVEM0Y5RUY1OUYwCi06MTA3MTEwMDAyOUQ2RTAwODdDMEU3OEE0N0M5NjhFOTU2OTk0MEY3NTJDCi06MTA3MTIwMDAxNEY0ODA4Njg5NTc5RUUwMDhCQzNGQUVFREREREU0QzRFCi06MTA3MTMwMDBEQzVGNjk4QzQ3MzhENzUzOUU3ODJEOEMwMUYzNTI2QUY3Ci06MTA3MTQwMDA5RkNBQTY3MzlCRDBERTkwMURFOEQ3N0NDQTQ2Rjk0ODNCCi06MTA3MTUwMDA2MUI2RDRDQjJBQkFDNjJCMDJBQjZEQzQxNzc1M0IzMkNECi06MTA3MTYwMDA3OTdFNUFEODdGMDhDRjE1NDhCQTFDNkRFRTNCMUVGM0M2Ci06MTA3MTcwMDA5QUVBRDYxNjk1OTJCQjZFODc4REVDNDMxOTk3OTVGNEQzCi06MTA3MTgwMDBFQTlBQkZDREYzMDUxQTU5NjQwREE2MkUwMUJENEUyNDBGCi06MTA3MTkwMDBBNDU3Q0I2RUEyMkJEMEVENDQxMkJBOUQzODFGREQxRTMyCi06MTA3MUEwMDAzMkQxMERGREQ0MzdFMUNCM0JCMjY5M0REN0FDOEFGNjg1Ci06MTA3MUIwMDA1RkFDRTM0RkIzRkY5RkNEQkM4MkVFM0Q5MUY5Q0Y1NTVECi06MTA3MUMwMDAzREU0RUY4Q0Y5RjI5MEJFNjdENjk3MTNERENDRjRBQUJDCi06MTA3MUQwMDBGQTVCM0REMTg1QkRFQkE2N0I4N0E3Rjc2NTMzQkUwMzgwCi06MTA3MUUwMDBDRjY3MDhCRkU3RjRBNjZCQzhGRUZFQUZERTdDNUZGMDlBCi06MTA3MUYwMDBEQTBBQ0NGRDY0RUNGNTE1NEVFNjA3RTNGQjhEMTUxRUFGCi06MTA3MjAwMDAyQUJGQjlDMjRCRTVCNzU3NjgwNERGNTk1MTQyRjA4NDMxCi06MTA3MjEwMDA5REU3MTVDOUY1MDU4QzQwRjk3RDJGRjRFNjcxQTkxNzk2Ci06MTA3MjIwMDA3QUNCQjhGMDMyMkZGQUI5QUJGRUY2NDYzOUU2MTlFNTVCCi06MTA3MjMwMDA4NkRGOUIzNEVFMkFCMkRCMERGOTIyRDVENzFCRjM0MTUyCi06MTA3MjQwMDBEQTZDMjJERjZDOURFMkMzRkI2NEVBMDI1NzFBRUFCM0YwCi06MTA3MjUwMDA5MkExRjEzMkVBMUY5MUJGNTJCNzM2OTNFRUIxOUIzQTM5Ci06MTA3MjYwMDAyMURCNTBGRkM2QjUzRDBERTU1NzdCNkIzNEJFMjk1NTdDCi06MTA3MjcwMDA3RDBEQ0Y2RkFFMTk2ODI4RDc4QURGOEY2MDVBMDVBREI0Ci06MTA3MjgwMDAxQjE5RkYwMkNEQ0RFOUUyRTE3NUJGNTgzQzIyN0YzOUUxCi06MTA3MjkwMDBGNEZGQzUwMTFCQkQzN0QzRTM4NDNENENGQkY5RjAxMzZDCi06MTA3MkEwMDAwRTFGQzZGNzRFRTJGOTM3Mjg5RjdDNTNBNUZDQTI5MzI4Ci06MTA3MkIwMDAzNjE2RjY4MDg4M0ZBOUIwNjY4NENDQ0FEN0Q1OTc4N0EyCi06MTA3MkMwMDBGOUJBQUFGQTlCQ0E3MDFGQ0Y3RUVBQTBGODYwRkQ0NjAxCi06MTA3MkQwMDA4NTg1RjE2RTg2MEVDMDNDRjRCQkVDMTkwN0NEN0JFNkNDCi06MTA3MkUwMDA0Njk1MDVFOTdDOTVCNjE1RTNFNENCOUUxQUUwQzNGODE0Ci06MTA3MkYwMDBFOEY0QkVEMURFNzhERUIwRTM4NTE0MUY5RUZCQUE2RkYyCi06MTA3MzAwMDBFM0RGOUY4NEZENzkyNkU2NDcyOTY1MTQ4RkY4RTNDNEZGCi06MTA3MzEwMDA5NkQ5MTZDQ0I3NTMwRkU0RTI3QUZERTNGM0ZDNzdDREIwCi06MTA3MzIwMDBFNjJFNzk3M0I4MDdGMDNDRUY5NUFENkY1NTQwM0YyN0Q3Ci06MTA3MzMwMDA1QTU0RUFGN0QzQTcxRDlCNTU1QUY3RkU3Q0JDREYzNjlCCi06MTA3MzQwMDAzRUVGMDhGOTI5QzZGNzA4RkMwOUU1RkIyN0IzMjM0M0ZDCi06MTA3MzUwMDA0OEZFRENDMUZERTM1REYxMDNGMzQ1N0EyM0JGRUFFNEI3Ci06MTA3MzYwMDA1OTVDQkZGMUY4MUIwOEExMDI5NDEzRjUzNjFGQzU2NURGCi06MTA3MzcwMDA0RkFDQjc1MUJDMTBGNDAxRTUxQjlDNjhDOUI2NzAzOTFECi06MTA3MzgwMDBGNDNDRjE1RDlENTVCM0VCRkJBRDVCQUZGQUY5RUY2M0Y4Ci06MTA3MzkwMDA2ODc2MUMyRkJCNEYwREIyMTE1OEU2RjkxMUUxQjU0QUMyCi06MTA3M0EwMDA5MEM3N0Y4Q0Y0QkQ3NUM5MDgzQTE3NkRDRUUzOTJGMDkzCi06MTA3M0IwMDAxNEFDQTlBMDJFQUUzNEVGNDUxRUZGNjVDM0RBQUNGQUJCCi06MTA3M0MwMDAzQzc3RTk5RjYxQzEwQUMzN0Q0NjBCOEExRkJFNjcxNEUzCi06MTA3M0QwMDBDMEQzN0U3RUY1RTI5NzVCREMyNDI3M0ZCM0JDMzQ3Q0QwCi06MTA3M0UwMDAzOUMwNEYyNzg2RkY2MDA1QkFCQ0FFMDY4QkZCNjBERTU2Ci06MTA3M0YwMDA5MDY1RkQyNjg1RTIyQUM3RUZDMUI4RkYyN0NGRDk3QzZCCi06MTA3NDAwMDBCNDBDNDVERUQ4QkM5RkNFQTVGODU0NzI3QjgxNzk3OTQ3Ci06MTA3NDEwMDBGQzNBOUFBNzc4RjE3NjYyNDZGOTIyRDNEODU2RTE1RjEyCi06MTA3NDIwMDA4OEYwM0MwMzFDMDRFMEM3QjM4MEM3QzU4RTk3QkJFRjUwCi06MTA3NDMwMDBDMkYzQzNGNUE2RjNDNkM3QzUzOThCRjIzRThBNDE1RkQ2Ci06MTA3NDQwMDAyRjEzRTU3QTBCNUY5RjZDMTdCRjg3NTJGRTVFOUM5NEVCCi06MTA3NDUwMDBFMzUyREU0QTc5M0RBRTRGMzE3RDI3RTUyQzYzNUI0OTJGCi06MTA3NDYwMDBCRUNDMTZGNzI1MkY3OERBQzFDRjE3NjlDQzgzNzg5QzZDCi06MTA3NDcwMDBDQkM5QzQ1NkY1RDFFOEJCNzlGNkU3MUU0MkI2OUVDMzI4Ci06MTA3NDgwMDA1QTQ5RUY3RDYyOEJDQzZFMkRDMkVGMzczNzY3RDFGNzRCCi06MTA3NDkwMDAzNjVGMDRENzcxNDRGRTFFOUQ5NUU0QzgxQ0M2QzdCOTZCCi06MTA3NEEwMDBCMDQ1ODk0NDc1RkUwRUY5RkIyNDBDRjU4NDRFRUU3NDRDCi06MTA3NEIwMDBEMTBCMjY3RDMwNEJFOEJGNTlDQzk0NkZENDYyRDQ1M0E2Ci06MTA3NEMwMDA4MTM0MzdDRDZCNUU4QkM4QzNFRTFDOTdDQUNFNjFCQ0NFCi06MTA3NEQwMDAyQjE4Nzk2NTEyOEQ1QkYxNDUxMjhDNjMwRUVCODhFMkY3Ci06MTA3NEUwMDBCREM4MEI5RkU1RTc5OENDRTMzMkNGQTNCQkUzOUNFRDhGCi06MTA3NEYwMDA5QjMyMTZFRjU3RUVFQ0Q3MzQ2RTg5NkY4NjA3QUI3NDZDCi06MTA3NTAwMDA3NDkwNzg5RjFERTZGODlDQkQ1MzIxN0FGRDVFRDg1QjkwCi06MTA3NTEwMDBGMjdDQTA5OUZFNzM1ODYwMTJDQUI5MzkwRkMwM0VCMzBECi06MTA3NTIwMDAyOENFMEY5MjBGRTY2RThCRDA3OUMwNEY1OTRCQkEwQjE1Ci06MTA3NTMwMDBENkMzODI4RERCNkUxQzA5REZDRjc5RUM3NTNCRjI3QjA1Ci06MTA3NTQwMDA0RDU2QjRCRjI1MTM3RkFBNjdGNEJENTVCRDEzRTg3RDIyCi06MTA3NTUwMDA5MzlFRkY0N0UxODkwOUJGMTU3RDA3Nzg5OUI1NDVBNTM5Ci06MTA3NTYwMDAzQzBBNUQzRDkxNDcxMDI2N0MzNTg0RjlFRjA5MzYxQ0I1Ci06MTA3NTcwMDA1MjdENERGMEI0MDE3RkU2QThFQ0UyQzcyQkYxRjZDRkM3Ci06MTA3NTgwMDAxRUI3RDlBRUQ5RDZFN0ZDNzY4RDU5REU3NEIxNkI0Q0Y3Ci06MTA3NTkwMDBGQTE0Q0Y3M0EwRkVFQ0M4RTVGOUU5NUY1OEZEMTk1OTVDCi06MTA3NUEwMDAyNEE3NEQ3MjM4Qjc4Q0VFNjM5NTcyNzhCNkQwODNCMjRCCi06MTA3NUIwMDA5RjU5QThGRkEwRkM4NzhEM0Y0RjQ3N0ZDNkVGMUZGODVDCi06MTA3NUMwMDA3OTFFRTU2QkEwQkUxOTE0RDczN0I3RDVGM0ZFNkVGQjU1Ci06MTA3NUQwMDA0NTBBRTU0QkZENzE2MkVCMTBCNDA3NkIxRUZGNzVCQUVGCi06MTA3NUUwMDBGRUJFRDc5MzA1QzFEN0ZBRTA3ODg1N0U1Q0E4NkVFRTIzCi06MTA3NUYwMDA4M0JGNkIyOEU1RUMwNUY3NkRDOUU2RTlCRUMwM0NERDRECi06MTA3NjAwMDBDNjc5RDZFMTNDNzVFNzU0RUFDNTNDOEZBREU1RjMzQjVFCi06MTA3NjEwMDBCRTlFQ0Y3NzY2OTc3OTg2MjlBRTcyREI5MzBFNUY5ODEwCi06MTA3NjIwMDBFQzhFMjhFOUY1OTNEQjU0ODZGQkFDNEVCQkMzNjQwN0I0Ci06MTA3NjMwMDA3Q0M5NUEzNjIxM0UxNjJFN0RGQjAzMkJGMEM1REM0QjUwCi06MTA3NjQwMDAwMDNGQzAwNzM1RjczOTQ4RUZDRjdEODFDNzUzM0Y1MTIxCi06MTA3NjUwMDAyQUYzMjlBMEJGMzc5QUZFM0Q3ODNFMEZFQzA1QjQzN0Q4Ci06MTA3NjYwMDBFMkUzRThCNDAzQ0UyMjFFM0JFRDgwNkVFMjZGOTFGMEMwCi06MTA3NjcwMDA2QjJEREFGOTZCRkExRDJEQzVDRkYzMzExN0M5N0I2RDcwCi06MTA3NjgwMDA3Njk4RUVCNUQxNTAwNkYwNzNGRTRFQTQ1MzJGRjM3RERECi06MTA3NjkwMDA1Q0RDM0ZGQkE3RkU5RkRGQjI5NEY4QkZFMzEyRkQzOTJECi06MTA3NkEwMDBCNkM2RDRBODBERjM5MDNCQjYyOTY0MjcyRDVDNTY5OTM1Ci06MTA3NkIwMDA1RUM5RjA3QzFCRjdBQkU1MTQ3MkJCNTZGMUZCMjlCRjJBCi06MTA3NkMwMDBDNjAxNzQ0RDg1RkVGMjBCMzVGRTVDRjNGMDdDRjNDNzBBCi06MTA3NkQwMDAxOEREQTMyM0M3NkI3RThFRkU3NjI3RUE0Mzk3ODVGNEQ5Ci06MTA3NkUwMDBBMTc5RkVFMzBCQjlERTVDQTg1QUM4QkU1RTYwRTc3NkZFCi06MTA3NkYwMDA3NkJCQjhCRkEyOUYxODQ3QkY0MjZFNkY1RjU2QzhGREVBCi06MTA3NzAwMDAwQUVENjg1NzYyQkNGQjJBMDdGRDhFMTE2MzYzQzlFRjVGCi06MTA3NzEwMDA2RTY1OUNGRkFDMTI2RjFFRUJBOUNFRjU0REY2NzM0NzVDCi06MTA3NzIwMDAyRkM0RDMyREFDOTU3RTE3NzE1MkM1MTQwRENGMzM3QzY5Ci06MTA3NzMwMDA5MEU3QTQ3QkEyRTAyRjgwRUQ0QzEzRUQxQ0I0RjFGMzk1Ci06MTA3NzQwMDAwQjFGNjAxRjMwQUY2OUMyM0ZGRDAxNUU4RjBBRkQ3RkQ2Ci06MTA3NzUwMDA1MDYwMjdCQjM2RkNBMjgzRUM4NjNCNTNCOUZGOTBFNTEzCi06MTA3NzYwMDA2NDU4NzEzRERDMkNFNEQ0RjQ1MTBFM0ZDQUY1NjlBMzkyCi06MTA3NzcwMDBFRTBDMjA4NEY2QzIwQ0YwNTVFM0VDNTg1RDBBRkRBQzJCCi06MTA3NzgwMDBCNDcwN0RCRjMyOEI3MUJGNDA3MzVCMzlFMkVGNzIzMEYyCi06MTA3NzkwMDA5MzMxN0YxRjY2QkZGRDVDRjZGOUY4Qzg3ODdFNjIwMTAxCi06MTA3N0EwMDBGQTE5QUU2MDlDQzEyQTA4QkY4NkYyMDIzQjdGNUY1Mzg0Ci06MTA3N0IwMDBGODkzQzkwRkY0NjJFQzc3OTgzNTg1N0EwNjcxODQ3QzZBCi06MTA3N0MwMDA1MTlCNDFGQkRGQzk3OEJFMjAwQkExOTVGOEVEM0I1NkRDCi06MTA3N0QwMDAxNkI2NzBCOEQ2NDVGNzJBNzkwREJGMEI3QjQzMDU4QkRCCi06MTA3N0UwMDA2NkMwRkNBMkZCOERFNzNCNkU4QTVBQTIwMzMwNUU2NDQyCi06MTA3N0YwMDA4REVFNDZGQzU5OUM5QUNEMDNGRDA0QUE5NDMyQzRGQjNECi06MTA3ODAwMDA4MjU1REQxQjZGNjNFMTM2MUFFRjAyQkNDRjBCQzdGOTVGCi06MTA3ODEwMDAzRDg1RjI4NUE2QzFBMjQ3M0VCREM1Q0FGNkFBNjU5Q0I0Ci06MTA3ODIwMDA3RUM4ODc4RDU5NUE5OEVBMkRFMTdDMkVDRjk1NDhCQUFCCi06MTA3ODMwMDA5NDQyRjM3QUZDNEUxM0UzODM3NkQ2QTZFM0Y3RjZDNEJDCi06MTA3ODQwMDA3RTk1REIwQkU1QkU4RkRCNkJGM0M1QkE5RDJGRjlFRUEyCi06MTA3ODUwMDA1OUUzN0E3RDFDRDcwREYwMkREQUIyNDhGNzY5MDIyNjdDCi06MTA3ODYwMDBFM0ZCNDc0NEZCOEYwOEJFNUY1MzI4RTM3RkRERUI2RkVDCi06MTA3ODcwMDBBMTgzNDU2OURFMkYzQTg4OEVCMkRGQzkwMjZFMkNFNEZGCi06MTA3ODgwMDBGOUQzNzIxQzkyN0Y2N0IzQzU5NENGMzM1QkY4NjkyQzMwCi06MTA3ODkwMDAyMDQ5MjgzRkI4RTU0OUVFMTczMkU1MUQ4MUExNDRGOTlBCi06MTA3OEEwMDA2REYzQjY5ODlGRUJGQzNDQUE0MTJFOTFERjU0QjE3NzYzCi06MTA3OEIwMDBDQ0M0RjEyOURGNEFGMTIxQkY0RkIzNkYyNUZGODBCOTU2Ci06MTA3OEMwMDA5RTBEN0YzRjE1RTM2RTZCQzFBRTUyNDRCQzBDQ0E4RTU5Ci06MTA3OEQwMDBGNTBBRkRFRUM1QjQ1RTFEODM1MTlGODNCNDFFNEZFN0NDCi06MTA3OEUwMDA0Mjg1QkQzRDVCRDBENzIxRUVCNzlBOERGNjE1QzZENTQyCi06MTA3OEYwMDBEMEJFNDI3QzZERTQ3NkE1NTVEOEMzNzVFQjhERjZDNjM3Ci06MTA3OTAwMDBCNDY2OUREREM5ODFFMTdFMDA4NzI5NEZERDI2RUM4RUJFCi06MTA3OTEwMDAwRkVEMUQ4MzUxRUU5QkVGMEJGOEQwQzJFNzExQ0U2MzQ0Ci06MTA3OTIwMDBGQzVFQ0QxQ0ZFREUyQUVDNEJDOTU3M0YyREI0MTlFMjlDCi06MTA3OTMwMDA2REYyREM2OTBEQ0EyQjdFNkY4MzI5NEZDQjQ1RjdDN0VCCi06MTA3OTQwMDBENDI4RkNGRTRFRTk4NzdDNUZDMEQzNjA4N0QyN0QzOUE2Ci06MTA3OTUwMDA0N0QyMjgwRTZFRjY0RkI2NTdCQUMzMTY5RDlGNzI3QTVECi06MTA3OTYwMDBDNjZEOTMxMDNGMzVFOTc2MkJDMkY3M0JFRjE1NkJBMzNECi06MTA3OTcwMDBGRThGNzg4QUM5RkU1OTUzMzk3NDIzRTYyNzFEMkJGQ0U0Ci06MTA3OTgwMDA3Q0IyQjMzNzQ1NTNDNDc5QTgzRkJEODZGOUY0RDc3RjlECi06MTA3OTkwMDAwREYzQTFGMkQ5Qzk3RUQ4NDdCNUJGREM3MThCMTM0NDcyCi06MTA3OUEwMDA3N0VDREZDRjRFQjY4MjlFNkY3RkIwNjMxMzk2NTMyMzgyCi06MTA3OUIwMDAyQzYwMDVGREQ4QkVBMUEzMEZERUI5OUNBQUQ5MDJGNEE0Ci06MTA3OUMwMDA3RUE1NkNDRjE2QzBGNkRBN0ZDQ0NCMUYxNURBMDI3ODE1Ci06MTA3OUQwMDA5RjZFOEQzOEI3NTQ3Mzg1NDJGMkQ3MjFENjk3RjQzMzEyCi06MTA3OUUwMDBENTU4NUVFMjcwMzRGRjVEOTQwQkQ1Q0JENjAyOEVDMkMzCi06MTA3OUYwMDA3MkJDMEZGNTA0RkRGRTQyOUY2MkJGQTMxMEVBQTVGNTFECi06MTA3QTAwMDAwOTlFNDYzODZGOEExMkI2RTM3OUZGNDM5MTRCODQ1RTM0Ci06MTA3QTEwMDA0QkY4M0IyMThFNDJFRTZGQ0QyQjBBRDBGN0QyOEYwRTYyCi06MTA3QTIwMDBFREZDRTU5QkI0QjM0NThDRUI3RjAwNTNERkY3QUIwMDc3Ci06MTA3QTMwMDA4MDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRTU3REE3Ci06MTA3QTQwMDAwOTc4NTQ0NUI2NzBEREJFQkQ2NTZGQjI2MDYyMjA3NkMwCi06MTA3QTUwMDAxMjEyMDIwNjY4MjA4MTAwNDE5Qjg0MjUyQzgxMEUyODg5Ci06MTA3QTYwMDA0Njg5REEyQzAyNjIyMDkxRDEzMTMzM0E3Rjc3RDg0NEFCCi06MTA3QTcwMDA3NDM0QTg0RjE5MDc5RDE2OTE2MUU2QTkyRkEzMkM0MUQ0Ci06MTA3QTgwMDBCNjBFQTA4MjNBREEyODJBM0FDMDQ0NDUwNThENEU0NDAzCi06MTA3QTkwMDA3ODEzRkY4N0ZBOUY3M0FBMkFERDc1NDk1ODY2RTZCREY5Ci06MTA3QUEwMDBFRjdEREYxRjNFQkVDQUI5NTVCN0VFQTlCMzlGNTM3NTMwCi06MTA3QUIwMDA2RkFBNkVDRjQ5RjBFNjMzMTY5M0UxMzUzQjUzMTg1QjVFCi06MTA3QUMwMDA1MEExRjlBRDAzMTg2Mzg3MDJCOTlFMzhDNjI2MzNFNjg0Ci06MTA3QUQwMDA2RThDNjVFQzI3RkNCOTNBRENEQUFFMzAzMTA2RTM2RjI4Ci06MTA3QUUwMDBDRkY0RDhBRTI4NjRBQzJBM0M0RkRDM0YzMkNGMjFDMzYwCi06MTA3QUYwMDAzQzM3Njk3MEVGMzBGOENGNUM0RUJDRkY4NjZDNzcxRjY3Ci06MTA3QjAwMDAyN0Y0REZGNjdGOTgxN0U3NjFBMzQ3OThEODEwQzY3RTYxCi06MTA3QjEwMDA2NjY3RjRGMzVERURENjVDN0IwMUI0Q0ZEOTkyNTgyNjRECi06MTA3QjIwMDA4QzdCNjE1QkM2NUM5ODg3RDVDMUU0Njk4QzdERDVGQzk0Ci06MTA3QjMwMDBBMUQ1MDlGMzJDNkFENzk5M0I4OUIxOUE3NjhEREE0NTlDCi06MTA3QjQwMDA5QjlBQUQ2MzYxNUMwREI0QTUxMUY4NTUwQjdDMTk2QjY0Ci06MTA3QjUwMDAzMTRGOEQwQjVGRUZFRjA0N0MwQkYxRkE2QUMyRkJCNjdECi06MTA3QjYwMDAxNzRFOUFCRDMwRUUzNjUzRTNFNzRGMjRDM0U1RTE5QTUyCi06MTA3QjcwMDBFQjU5RTdCOUVCRUNFRUU0RUIzQ0M2NTg1OTYzRkVCOUMwCi06MTA3QjgwMDBGRDA1NEU4REZBN0Y5REUzMUU4Q0Y0NEI4MTM5RjAzOTUzCi06MTA3QjkwMDBCQTg5QUZENzM4RkU1NzAyOEZBQTY4NzZCMzA3RkE2NzVCCi06MTA3QkEwMDAwRjg5QjMzQjgxREU4NTg3QkM0QkUzMDA4RkI5NkIzMzE0Ci06MTA3QkIwMDAwN0U5MzA0N0ZGOEM5MjkxNDgzNzM2NjdCODQyQUZCMjM5Ci06MTA3QkMwMDBDQjE5MEJFMUZBQ0M2REREMTlCNERGRUQyODRDNjA4MEU4Ci06MTA3QkQwMDA1NzU1NjJFODBFMzYxMEM4RTZDQzY5QjA4RjY0NkNFMjg3Ci06MTA3QkUwMDBFMzMwRTY3MkJBQzVDREUwREUzMjlCODQ4QjNEQTM4QkQ5Ci06MTA3QkYwMDAwMUZFNTEyNzc4NDZBMEIwQzEwRkYzRUM0NzdDNjA5RTkwCi06MTA3QzAwMDAxQjg3RjY4QjY2RkQ4MTdBOTkzMTI2NDcwMjYzMjM3QkI5Ci06MTA3QzEwMDBDRUFDQzM3NUREMzg3NEU0NThCQzNFQ0ExNjk3M0I5M0FFCi06MTA3QzIwMDBFOENCNDgzRTQ2RjZGNDRDNDMzQzcxM0M4Mzc1NzhBRDU2Ci06MTA3QzMwMDBDMTk0RUI2MDFEREVENzc1OTcxRkQ2RTFFRDFGRTMwREY0Ci06MTA3QzQwMDA3NDQyQjcwQTQxRDczQUE3ODNFOEIxREYwNDc4MEUwQTM1Ci06MTA3QzUwMDBFMzIxOUZDRjk4RTM4RTEwQ0M3NzdDNDlEQUMwNTUzMDcyCi06MTA3QzYwMDBERkRBOUVBM0VFNDI3Q0U0RjNEN0Y2RjRDRTg5N0MzRUM1Ci06MTA3QzcwMDAyQ0I3M0Y1RUJGNTgzQzY2MEEzQ0VFNDJCRTQxRUIyOTQyCi06MTA3QzgwMDAwNjM5MTNCNEZFMDlGRTRGMUQxREEzQzBENzRDNEE2MjJFCi06MTA3QzkwMDBFRUJDMzAzQ0ZEOUE3NDA1QUVBQ0NBNTZDNkRGMzBFNzg4Ci06MTA3Q0EwMDA0QUE1QkZEQzE2MkFBODhEMERDQkI3MTExRkQ5MzJFNjI1Ci06MTA3Q0IwMDAyNzdDNkFFMjM2QzYzMzQwRjFFODhFMzNFRkNGMDAzREQxCi06MTA3Q0MwMDBGOURCN0FEREE1MDFBRUI3RUU3Q0Y2RkQxMTMwRUExNEUyCi06MTA3Q0QwMDAyQzM4MDlFODc2Q0EwRDAwQUNGN0Q0MjYzREUwQ0Y0NDM1Ci06MTA3Q0UwMDBGOTcwOUJDQkJCMzMzNjFGQTc4MkYxMEIwRkJDNjQxRDExCi06MTA3Q0YwMDAwNUJGQ0VBRjlEMzcwOUY5Nzg2QkMwRjI0OTRCMDQ5RUEyCi06MTA3RDAwMDA2N0Q4NTkyQkNCMDI3REQ4QTg1RUFGNjEwRjdDQUJGNzRCCi06MTA3RDEwMDA0NzI4NjhGNUY0ODM3OTFBMERGREI1RTNCRTYwRjEzOEE0Ci06MTA3RDIwMDBDRUZDNDk4QjVDMjczQ0JGRUU0OEU2ODNGQjIyRDZCREU4Ci06MTA3RDMwMDBDNjE5OTdGQ0Y5OTVGMENCMjAzNkU4MjcxRDlGRDdGQTk2Ci06MTA3RDQwMDAyQUFDOTA5NTM2MzUxMzlGOTYxRUQwNUQyOEEyNEI3QkFBCi06MTA3RDUwMDA2QTRDODM3NThFREI2NDBCNDQ4MTZBN0RCREVENjNBQjM5Ci06MTA3RDYwMDAxM0U4RjU3NzlGRjNDMTdEMTZENEZGN0FDNjkyRjBCRTczCi06MTA3RDcwMDA4RkFEMkQ3MEJEQzhFOTI0M0EyRERBRjFBRDk1MDFERjQ0Ci06MTA3RDgwMDBDN0VEQjg5REY0N0EyQ0Q4QjEwNDkwOUY1MDMzRUJCNzZGCi06MTA3RDkwMDAwOUU2Rjc2N0M2Qjk5RTg1Rjk2RjVCMzk5RUIxQzE4QzVDCi06MTA3REEwMDAyNUI0Q0ZBMEI2QkE2MTNDQ0RCN0IwN0QxQUMxOEJEQThECi06MTA3REIwMDA2MzA4REUxRjFEMUFDQjAwOEZGRDVCQkFCMUE1ODBDNzFCCi06MTA3REMwMDBEQjdBMzBGN0I3Mzg4RjJEOEVFQzQ0NzlGQThENEI3MDEzCi06MTA3REQwMDBEREZCQTNGREY5M0Y4M0U3OTVGRkM3QjgzMkE0RUJBMjEzCi06MTA3REUwMDA0RDlBMUJFNUFDNUM2N0ZCQjU0NEM0Mzc4QUU2MkJEN0RDCi06MTA3REYwMDBERjI5QjgxREFFNEYyQzhERjM5QjEyQTg5RjMxRThENzE5Ci06MTA3RTAwMDA4N0M0QUQ2MjAwRUI1NkIwMTc5REM4RTczRTYxNUYyQzlBCi06MTA3RTEwMDAyRDFDRUYzMUVEMTUzNDlGRUM3RkREOTk0NUZEMTJCNjM5Ci06MTA3RTIwMDBBNEFDMzdDRjhBMERBRkM3RDJBMjUxM0JBMUZENEE2QTlECi06MTA3RTMwMDA2QjM2NTU5ODlERjA5Q0Q3RjM5RTQ5NDYzQUMxRjg1ODQ5Ci06MTA3RTQwMDA2RkE3NzY3OTY4MDJFQkM0N0U3NUQ4N0Y2MThGNjdBMEQzCi06MTA3RTUwMDAzRDg2Nzk5QkIzREMyREE4ODc5M0VGNjkzMURCRDE5RUZBCi06MTA3RTYwMDBDNkRBMURDRjgyMUM0QzJFMUFFODlDMUJCMTJFN0RDRjhBCi06MTA3RTcwMDBGNUNDMDk3MjY0NEI2RUIzQjg2MUZFMTlEMDQ2REFFRkU3Ci06MTA3RTgwMDA5QkJCRjAzNzlGMEIzRDY1QUM5RUVDODVGNDRCQUNDN0JDCi06MTA3RTkwMDAzRDBDRjFCRUM5QzFGMTk2N0FGNUFFMTgyRkVGMEY2OTBFCi06MTA3RUEwMDA1QzNGRkM5QjZEODE2N0UxRjc4RkIyQkNFRDY4NDc0Mjk4Ci06MTA3RUIwMDBBMzU4RTU4QjY0NEY0MzE5MTU3MUZGM0FGQzgxQkY3NkQ3Ci06MTA3RUMwMDBFNDdGQkNCOTg1MjVDMkZEM0Y3NEUwQ0ZGNUZBNDJGOEU2Ci06MTA3RUQwMDA3RjI1RkNDNERCM0FBQjQzQjk3OEZCRUFBQjQzNkVDMDA5Ci06MTA3RUUwMDBBQkY5RUVDMTgzRDEzRkM4RTdDNTY3NUFGOUJDOEVCNjdFCi06MTA3RUYwMDBCMzI4QUYzNUJCNjI5Q0FCNjA3REU1QzAxQjg0REI3NkVECi06MTA3RjAwMDBEQTAyRUIzMkU5M0FEMzkyQjFCNUFERDNBMEJGMjZCRUM3Ci06MTA3RjEwMDAyRDE3RkQ0RkU5RUVBODIwQ0E2REYzRUUyODMzRkE5MTM0Ci06MTA3RjIwMDAzRDM5REVGOENDMTRCQ0RFN0JCNDA2RjJFRERFNjEzMzA1Ci06MTA3RjMwMDBBMzFDMjQzOUREMDk3OEJEMkI3QzJGNjRDN0E0M0UxQTBECi06MTA3RjQwMDBFNUNDQkI5MkVCOUY1N0U4RTE0QzIxQjdCMzg0MUVDRTQyCi06MTA3RjUwMDAzNEJCMTJFRTAyQkM2RjdFNTM2NzY4Qzc2N0REQTNGNUMyCi06MTA3RjYwMDBEQjU0ODAzNjJEQ0U5NTEzQTE4NzUyREYyQzI4OTc4M0MyCi06MTA3RjcwMDA1MTNFQjk1QzU2Qjc3NzEzRkE5RDI5RTZFNTdBNTAwRTYzCi06MTA3RjgwMDAwRTFBRTk1MzdFNjVCNzAwRUFGN0EyRjYyNDFBMjdGNTIwCi06MTA3RjkwMDA1NUVBNjk2QUI2RjdBQTRDRTA0M0Y5NTJEMDZGNzg4RTc5Ci06MTA3RkEwMDA3NzQ5NUEwMUVBNEI1ODRFQUMwRTk0Mjc5MDkzRDRCOUI2Ci06MTA3RkIwMDAxMTcyQjBCNEY5N0IzM0NBODlBNTU4MjMzOUIxNDE1QjNBCi06MTA3RkMwMDAxQTIxNDc5RThFMzhDNTMxQjYzQkUwMzE3OTU5QTY2OUYyCi06MTA3RkQwMDAxNTBCRjc5NzY2Q0E3OEU1RTJFNEREOTVDOUU1NkI1NkJGCi06MTA3RkUwMDA2QzMwQzcwNEYzNTk2QUEzNUM0QjAwQUY1M0M5NEVCMjVGCi06MTA3RkYwMDA2MzhCRUYwMzAwNDhCMEQ4RTIyOUM1Mzg2M0YxNkYzNEQyCi06MTA4MDAwMDAxN0RBNUY4QzNGRDBGRTBDMzk1QzZCRjU0NkUwNzc3RDZDCi06MTA4MDEwMDA3QjdGRTYwNDNBNEQ2QkVGNDU2REZGMEM2RjA1RjI3RkY5Ci06MTA4MDIwMDA2NkZCNzQ0MUM3RkVENDMyNjc5MTg5ODE5RkI5QzNDRTg0Ci06MTA4MDMwMDBGRENDRTlEQTdCNkZDMkU3OUQwRUQ4NUNGODNDQjBEMDhFCi06MTA4MDQwMDA5Q0RGMDJERjQyQjdFQkIyQkIxMEJGMzcyREVDNjkxOEUzCi06MTA4MDUwMDA3RjIyQ0FBQkEzNUU5RUU4QzkxQzhGMDA4QUIzRDcwMEZCCi06MTA4MDYwMDA5RjYxREUxMzE2RTY3NzAwM0ZFNzAwRUM0NUI4MUI3MzBGCi06MTA4MDcwMDA3NzFCODQ3QTA3RUI4Q0YwMkI2N0NDMEQxOTJDMUJGODNGCi06MTA4MDgwMDBCQkY4ODM2MzY2MzA4NUI3RTY4NkZBMDdFMUI5NTVBMzg2Ci06MTA4MDkwMDBCOEZGNkY1RDZGMjFGRjVGRERGQ0NFMTAxM0Y0N0Y5OTk5Ci06MTA4MEEwMDBFOUJFOEM4MUVEMUQ3QkI5RjczNjVDQ0Y4MkE5ODExN0MzCi06MTA4MEIwMDAyQzAwREZGNkVCOTdFMjg3MzlDM0Y0NkMzNDA3NzNDQ0ZFCi06MTA4MEMwMDA3MDdGMjNEMEQxMEY3ODM1M0VBMDk3MDU3OERDMTM1MzBECi06MTA4MEQwMDBEMUVGQzI3MkJEQTAzRDlCRTgyM0ZEOERCNERGNUI3RDc3Ci06MTA4MEUwMDBBOUIwODhCMDFEQkY5MDFGOTJGMkJENTBFOEMxNDJENDI0Ci06MTA4MEYwMDAwMzE2RTk2RjJBM0NBMzUwMEVGMzM0NTcwRThCRjQzNzY2Ci06MTA4MTAwMDA1QzFGQTQ5RDA2NzkyN0JEMjlDRkVFRTk1QUNBQzI3NjI1Ci06MTA4MTEwMDBEQkU4OEZGNkVBOEQ4RjBDODdGNUZBQjJCQzRGQTJEQzU0Ci06MTA4MTIwMDA5N0ZDRkI3RkJERjQxMTc0NTVCRkY4ODdEMUM4QTc1MUU4Ci06MTA4MTMwMDA1NzZBNENENzJFQzY0RTdFNkYyMTNCNzk0RjA1MjMzQkE1Ci06MTA4MTQwMDAwOTZEQTQ5REI0NzQxMUE3QUZCQjQ0Qjk2RjEwNzIwRjMxCi06MTA4MTUwMDBGMTJEQzU4RDY4QzcyM0U3RkIyOEFCNjQxM0YyNzk1QjZCCi06MTA4MTYwMDBBNkM2RTdGQjE3RTE2REI0RUZEQjNBRjBCRTM4RkJGRUM1Ci06MTA4MTcwMDBGQkNDOEJCM0VGNkZBMjdEMkYzQ0Q3OUUzMzk4MEZFREQ2Ci06MTA4MTgwMDBGOURGNzZGNjA5QTBCRDNGQzZDMEZFQTM3RkRCMTFFMzkxCi06MTA4MTkwMDA3QzU2RDg3QkYyMDdEMTA5ODFGM0Q5RkI1RkU3Q0M3RTBGCi06MTA4MUEwMDBCMzBCN0JGRjY3RTRGRjNGNkJFRkE1N0MxOUY1QzFBODFDCi06MTA4MUIwMDAwNzQ2Qjk5Rjc4M0ZDNDVGQzhBN0FEMUE0M0ZCMUE4RTI0Ci06MTA4MUMwMDBCNzE4QzlGMUZFMkMyRUM3NTI2RjIyRTIyRkYyRjNBMDhFCi06MTA4MUQwMDAwRjgxOUNDQzczRjVGMkJCREEwRjBBOUM5ODZGMTZDNDIyCi06MTA4MUUwMDAwRDY0NUE1OERFQTVCRTQ4NzkzN0ZBOTEzOTU5REUxRjE5Ci06MTA4MUYwMDBDOTBGMDgzREE5N0VEMUU4MDdCQTkyQTc2RDE2Q0M1RkRBCi06MTA4MjAwMDAyREQ1REY3MjNGMDA2REE0MUZFODJBREVEMUIzMkUyRERECi06MTA4MjEwMDBERUY5RjYyMkU1QTk3QjE2OEYxN0ZFMUJFNUE5N0I1NjMyCi06MTA4MjIwMDA2MUE3RjI3NDU5RDYzRjExM0Y5Qzg3OEZFNDY3QTQ5Q0U1Ci06MTA4MjMwMDA0RDdDODNDQjA3Q0JFNkYxM0VDODBCRTFCRERGREEzM0UzCi06MTA4MjQwMDBCMDM0MTNFRDFFQjc4NzEzN0Y2MkI1NDhDRjlCNDUzRDExCi06MTA4MjUwMDA0MUNBRUJBODZDRUY4OEFDMDgzRTYzN0M4RjcxRkJDNTBDCi06MTA4MjYwMDBDNjg1MzM5MjZCOTkxQkFFREYwQzZEQTREREIwMjFGRjg4Ci06MTA4MjcwMDAzQTg5RUZERDU5OTc2NkVGRkEwQkI5QjgxMDlGMkJCMjI4Ci06MTA4MjgwMDBGRUU1NzE2MTU1Njc3QzY1NkVFRUZGQzM3Q0IxNEQ0M0MxCi06MTA4MjkwMDBCOUY5MkU2ODY2QTg1RjVERjFENUIyODZEMzVEQzJDQjExCi06MTA4MkEwMDA4MzY2RTk1RjkzRDBCRjgyQkNEQzk4RjU0RkQ4OUZGMjFDCi06MTA4MkIwMDBEMkM2RDM3NjA4RkRFRUNFMUE1RTYxMUUwNjc5N0ExMTFCCi06MTA4MkMwMDAxM0Y1OEYxMUFCREQ2NkI0MkZGMEVCNzA5QTkxRUEyM0IyCi06MTA4MkQwMDA2RkVCMTIyRTNFMzgxQUYwOThGODQ4NDdCRjFGRkJDN0M1Ci06MTA4MkUwMDAxNDI3NzRENDUzMzA5NTkwRTM3Rjk5MzVFQ0UwMDM4NEUwCi06MTA4MkYwMDA3NzAzRTdBM0I3QzVFQ0U5MTcwMTE3MDAxQzE3MDExN0FGCi06MTA4MzAwMDAxOUUwQjU3QzNDRkExMTA3Q0QxM0UwRjYxRUU2RDcwNjVFCi06MTA4MzEwMDAyMTJDRTcxMzdBQzBEQUM2NzZDMzc4NzE5M0U2QzA3QTY3Ci06MTA4MzIwMDBDODBEQzU3RkIzMjI3RkNBNEI1QjVFNEQ4N0Y1M0U5ODczCi06MTA4MzMwMDA1NTVBMTEwQjIxQzAwRDY4MDcwMURGQTdCMjI2QUVGNjEyCi06MTA4MzQwMDA5QkM1RkREREE5M0U0NjNGQjY0NkNEQUQwMzlGQUE4QjNBCi06MTA4MzUwMDBCNDQwNTZFNkI5NzQ3QzJBNEJGNTY3Rjg2MzU2RUY2NzZDCi06MTA4MzYwMDBENjgyNEJCQjFGRjk0OEY3NjdEMUZENDFEQjI1M0NGRkE3Ci06MTA4MzcwMDBCQTYyRTYwRTc0NjIyNzlGOTM3NkYyMkNDMDcyN0VBMERBCi06MTA4MzgwMDBEREI0NDY5RTg3MUJDNzZGMTJFMzQzMjZEMzQyMDZGNDMzCi06MTA4MzkwMDBEQTkxNzVGMzZBQUM5NzhENjE1QzNFNzY2NURENTRFMUU4Ci06MTA4M0EwMDBDRkU3RThCQTBERUIzRDFGQkVFQjNBNTlBRjUzQkQzRkU3Ci06MTA4M0IwMDA3ODNFN0E2RDNDRTc3RTIxMUZGMzU1Nzk0OTMwN0JGNjk0Ci06MTA4M0MwMDA3RDA3NzgyNDI0NkIwRThDNkIxNzc5QTIxRUMwRjhCRDM0Ci06MTA4M0QwMDBCQzU0Q0FGN0FEMTVFRTYyNTg1RjE0NTNFQTdGNjFGOUQ5Ci06MTA4M0UwMDA1RTUwMzExQUQ2Qjc4OEM5RkVFQUQ1RTg5NzNDQTY4RTBBCi06MTA4M0YwMDBGMTVDREU3NzY4MURGN0U3ODFGQzUwMjkwRUVFM0Y5Q0FCCi06MTA4NDAwMDA3NURCNkFBNDBGRjA4M0ZBMDkzNjlGNDdERTFCMEQ3MEY3Ci06MTA4NDEwMDBCMTQxM0Y4NDdDOTM3RUEyREQwNkZBRTQ3NDYyMzdDRURDCi06MTA4NDIwMDAwOEJFN0RBREIxNEFCNDdCQTExMjFFRUY4NUIyNzg5QjI4Ci06MTA4NDMwMDA5MkNERUIyNDNGMDgzQTVBQjI3OTFCOEE4RUEwNDM4RjIzCi06MTA4NDQwMDAzMDlGRTEyNzg4Nzk0NEM0QkE4OTRFRDcyNzhCNzVGQkMyCi06MTA4NDUwMDA1NzU1NENFQTA1RjcyN0IyN0UxQUM4NDlDMjMzMkI1NjQ2Ci06MTA4NDYwMDAyRkVCMTlCRUJGREIzM0FCNDg0RTNBRTZGM0FGM0M4ODg3Ci06MTA4NDcwMDA3NEJDNUVEMDI5RTU5OUZCMEUwQTM5RDI1MEVGMTY5MkYyCi06MTA4NDgwMDA0MDgwMUM2Q0QyRkMzQUFDNzMyMUNBNDEyN0VCRkNFQjU4Ci06MTA4NDkwMDBCOTcyRTQzN0RDRUZCNjlDRTdGRUNGQ0VCRERGNkRCODM2Ci06MTA4NEEwMDA5RjU5OTIyRkU1N0VDMUE3NDkwNjNFOTYxOUY4MzhEQTAyCi06MTA4NEIwMDAwMDU3NDkzOEEwRDgzMzY5RTc2NjM1QUQ1RURFM0QxOTBGCi06MTA4NEMwMDBFQjhEMUFCQTA5QjRENzU2NkQyMDYzN0RCMzFGQUQ4ODAyCi06MTA4NEQwMDAxRDg2RjJFQUI0QTQ4M0NERUY5RkZERDg0MTNCQzg3MjVDCi06MTA4NEUwMDAwNURBMzM5MkRGQzdDOTdFNEY0MzdEMjc3ODREODU3QjAwCi06MTA4NEYwMDAwMENBNEZFREYyNTQxODVGOTBGRDlCRDU3NkQwQUYxQkFDCi06MTA4NTAwMDA5NkFEQjY2MDRDNTM5NEZEREJENTY2OThGN0ZBODJGRkMyCi06MTA4NTEwMDA3ODE1RTczMzZCNEYxRTlDOTQ3OTFFNzk2RDMwQUM2M0YwCi06MTA4NTIwMDBBRDAxRjYxQkM2M0Y3QTAxRkJCRUNDNzBGRjNEODZGRTU3Ci06MTA4NTMwMDAwNzBDRjAxQTAzQkM1MkJEN0ZFNjFDOERGNDY0MjZGMEQ0Ci06MTA4NTQwMDAwRjA5NzcyMUJEOTk5Q0REMTExNzc2RjgzMzJEOTZFMjNFCi06MTA4NTUwMDAyNDQ1RUUyNzJFRTU3MDY1RjZCRjU3QUM4QzhEODA5RkM1Ci06MTA4NTYwMDA3OUFFMjI1MjhFMkQ4Q0ZGQ0M0ODY2N0VGNDFGOTYyRTVCCi06MTA4NTcwMDBFQ0Q5RDg2Q0I1REVENUIxOUUzQ0EzQkZFM0ZEN0ZDNTc5Ci06MTA4NTgwMDA1RkQzNjg5RjQ1RjFDQjdCNzUxNTZFRDZBNUJFQkQ3Q0NDCi06MTA4NTkwMDBGMDhFNThCQzI4RTE2RDE1NThCRkU4NzJERkMzQkZCNTM3Ci06MTA4NUEwMDAwMkY3M0QyNjNFMjRGQkI3NTZCODIzRDYyOUM3OEZGREQ4Ci06MTA4NUIwMDBFMTI3MUQ5RkI3RTg5OTJEMTVFQkExQkZBQTI0OTg4MzQ5Ci06MTA4NUMwMDBGNUZBQUE0NERFODI5RkQxRDE4RkQ1ODg3QUM3RDg5RDhCCi06MTA4NUQwMDBCQTA3RkQ0QzU1NzQzMDY3NzE3RUM0M0E1OTYzMkVBRUFDCi06MTA4NUUwMDBCM0Y5NkU5REY4RTM1RkNBRjM5MTU5Q0M2NUM1N0E0NTNFCi06MTA4NUYwMDA3MzQyNDJERDA2MThCRkY3NkVCRDBFRkREQUIxQkFBNEI0Ci06MTA4NjAwMDBFRTk4NEZFQ0NFRTZGOURFREU4NDJCQkFERjAyNzA3MzEzCi06MTA4NjEwMDBDQ0NENTZBQ0Q3MzZERjNCODZEQTNEQkE3QjQ1MUJDODlFCi06MTA4NjIwMDBGMTAzRDlBRjU2QzRGNkMxRkUwNEEyQ0ZDQTY3OUEyQjk0Ci06MTA4NjMwMDBFQUMxNUVERDlGRURBNEZCQkQ4OThFRUU0RDE4QUZBRUE1Ci06MTA4NjQwMDBCMjMwQUM1NzMzRTY3QThBRTRFNkQ3QjY4MUFCMDA4RjE2Ci06MTA4NjUwMDA5OUY1NTdEMkZFRDFBQzdGQUIxODlCMDZFMzY2MkRCN0Q4Ci06MTA4NjYwMDBEMEJFMDJGQ0Y0NDdCQ0JEQUJDNjU4QjE3RkNFMzJEMTAwCi06MTA4NjcwMDBGQUM3NTFCQkZCQzc5N0RFRTgwRkUzREJFRUQzNURFQjM4Ci06MTA4NjgwMDA2MEYwQUVGNkFDRjg1OTgwRDdBNzUxREMwRTdGRDJEQTk1Ci06MTA4NjkwMDAyQjFFRjFFQ0Q1Q0JGQjc4MzZDQTZCN0M1Q0I0ODZDRTU2Ci06MTA4NkEwMDBDM0UxOEM5RjBBRjM2NkU2QjhEN0UwNzUzOTdFRjc4RjkxCi06MTA4NkIwMDAzQUVEODM2RDZGOURENTFERjlCNzRFQzhDREFFRjY1OTE1Ci06MTA4NkMwMDBERDY3NDVGOEZCQjk1RjlCODlDRUJCQURDRTNCMzBCRUM1Ci06MTA4NkQwMDBEQzFEREQ1M0MzQkEwQ0QwMzkwOUVCQjY3MzQ0N0MwREY1Ci06MTA4NkUwMDBGMjUyRjc1MjI3N0VGRkExNkM5REU4NzJEQzU2QzczRTFFCi06MTA4NkYwMDAwNTIxNkVCRTNGQTUxOEYxOTRGN0M5RkQzNzRCMEZFNzcyCi06MTA4NzAwMDBBMEM4MzhGQTc3NTc5NEJDOTA5RDEyMjk2NzQ3MEU2MjJCCi06MTA4NzEwMDA3QzRGNzEzNEMwREJCMjNGNUNFRDA3QkZDMkY2NDJGQzU4Ci06MTA4NzIwMDA4Rjc4MjRCQkM3QTI1Q0IxN0I5MkY4M0U2ODZBNjM2RTA3Ci06MTA4NzMwMDA2NDNEMjIxQ0E3MkUxMUY2ODA4RjNCRUE4RkEzQkNGNTY3Ci06MTA4NzQwMDBFODczNTEwMUNDNjc4RUZBRkYxMjE3NTk3Rjk3N0EzMjdFCi06MTA4NzUwMDAyRjNFQ0U4RkNFRjg4QkI4MzgzM0QyRjU5OEQ5RjdGOUIzCi06MTA4NzYwMDAyRjcwREZGMDQ5MEJEOUQxQjk0RkE2RENEMzg2RjYwMEM0Ci06MTA4NzcwMDBGODg5RjUyMEUzNzM5MzdBNTk2ODlFQUVGNzA3QkY1NEUyCi06MTA4NzgwMDBGNUM0N0ZGMkJDN0FGMjZFRjZDOThBRjVGOTVERUJDOUUxCi06MTA4NzkwMDAzQzExQjc4RjdERDJFMjQxMzk5RjU3MTg2N0M2N0RCQTI5Ci06MTA4N0EwMDA5MjI3NUY3OTE2RTU3MURFRUQ1MTgzNkM4MEY4QkMyNzY2Ci06MTA4N0IwMDA2REM0REY5NkI4MzhCRjAzRjcxMUUzRTNDQ0REQTAzRDBECi06MTA4N0MwMDAyMUVDNTc0QjdEMTRFNTI5N0E3NzJCRDkzRDdENDVBMUM2Ci06MTA4N0QwMDAxM0U5NTNBQTMzQjMxREZDOEExRUVGNzI3QTM4QkMwQzFFCi06MTA4N0UwMDBFQjg2Q0JFMzhBOUNDODVGNDcyRkFFMEYxREZEMDk5NTMyCi06MTA4N0YwMDAxM0I0RkVFMTdEQjM5Mzc1OEYzQzM2MTQ1N0NEMDJEMzhECi06MTA4ODAwMDA4NzY2RkVGM0ZCNjgzNUNDOTM4MEY1QzdGRkFFN0QzNEY5Ci06MTA4ODEwMDBBRDU3NUNGMkU3OTA4QTg3RjdEMUYyMTNBRTQzRjFBQjI0Ci06MTA4ODIwMDBEMzA5NkY3RDQ5NTQwMEU5QTk2NzcwM0YzMThFNjlCNDVGCi06MTA4ODMwMDA4RkM2MUNCMEZFN0VFMTdEMzRGRDk3ODM4OTNFQzc3REU3Ci06MTA4ODQwMDAyMDU3QkQ4MTJFRjE3NjFBQUZGRjUyMEZEOEUwQjlBNTlGCi06MTA4ODUwMDA0OUJDREVBQTNGNTZDMTcwNUYwREU4RUE3NzAwM0MyRUE2Ci06MTA4ODYwMDBCOTk2RjZENzdFMjVFQ0NDNEM4RDc5MUE0OUZGNUQxOTY3Ci06MTA4ODcwMDA5ODI3Q0Y3RDMyOEFGODM4RUZBOTVCREZGRjREMDFGMkYwCi06MTA4ODgwMDBBRDNDMzk1MjlGN0EwOEY5ODNGOTk4M0QzMTNDQ0YxN0I2Ci06MTA4ODkwMDBGNUJGQ0E0MDdDNEE3RjA3RjkyNUU2OURCQUY3QjFFQkUwCi06MTA4OEEwMDBDOTZFQzZEMDdFMUI3M0I0RkM3QTI4Q0E0QjdEQ0M0MEZGCi06MTA4OEIwMDBBQzkzQ0Y3QjMyMkQyMzJCM0Y3Q0ZGQkMyNTc3RTdGMjk3Ci06MTA4OEMwMDBGQjIxNkY4RDQ3QkIxNTQ1RUJBOURFNjQyMzc5OTk3OUIwCi06MTA4OEQwMDA5RkVFMjYzRkQ5RDM0QTdFRjI5MzY1NTEwNDU3RjcyODdECi06MTA4OEUwMDAyMjdEOUI2OUUyRkI2RjEwMTNBNjkyN0RFNzI0NjdENTdBCi06MTA4OEYwMDBCMUNDRkQ1MjJDREFGQjA3NDIzQUU3OEY1RkYwQ0Q4QTBDCi06MTA4OTAwMDBGQzE5REEyQjg5OUU3RjMzRDIxOEZDRDc3NTQyREU2NkJDCi06MTA4OTEwMDA5QUI4MUNCMTVEMUFFRDM3MzE1NkVCNDQzQjUwNjVEMjI1Ci06MTA4OTIwMDBDOERFMTlGNUIyQUMxNzhGNUY2NzY2Qjg2RUMyRkIxNjZBCi06MTA4OTMwMDAzRTY4NzMyREM5RTQzOEU4MTIxRkM4OUIxNjlBNDI3MzJCCi06MTA4OTQwMDA3MTFGOTI2REIxNTE3REEzMDZENjExMTVDRkNGM0RCQ0RECi06MTA4OTUwMDAwOEY4RDc5ODk5RDk4QUY1MjkyN0I3NkIxMjlGMUE2NzEzCi06MTA4OTYwMDBDNTM4OTQ1N0U4M0Y2Qzg2RkU4NTcxREMyRTJGRUNDNjI3Ci06MTA4OTcwMDBFQjNFMkNDRTFFNzgzNkYyNzk4ODczMzZCRkNGMTk4RjM2Ci06MTA4OTgwMDBGQTM2OENFNDA1RjVERjA0RkQ3RjYzQkNCRjM0QkVDODU2Ci06MTA4OTkwMDBEOTkyNEZGQkY3MkJCMTVFODJGOEY0RTkxRkYxNUM4MEFFCi06MTA4OUEwMDBEM0ZBQTMzQ0RFNkVDRThBNDMzRTI0NERBRkM0RTczREVFCi06MTA4OUIwMDBBRjkzN0QwMkE1N0FCMDA4RTNDMEU3RjVDMTk4Q0ZDRUFBCi06MTA4OUMwMDBCQzZGRUZEODM1MDhGRjY5QTAwMzUxOThGOUMyQkJFNDJBCi06MTA4OUQwMDBBNzZFMTM3MkQ2ODJGMTNGRkEyRDgwRkYwNDZENkQyRkMyCi06MTA4OUUwMDA2RTFGQkMzQUFGRTdENEY2RTI3NTVFNDk1N0Q5QkZGMEM3Ci06MTA4OUYwMDAzRTBCRjE2M0UxNzIyRTBGMEJFQjNGQTA3OTE3QzY4NTlBCi06MTA4QTAwMDBCQTIzM0YxNjZFQjYwQzQxQjlGRTg1QzA3QjU2N0RDRkFBCi06MTA4QTEwMDBFMkMzMjAxRkIzMkMwOTBFMEQyRTU1RkJDQkFEMDg1NzFBCi06MTA4QTIwMDAzNzY4MDRDQkU3MkRCQ0VGQkRFRUE2N0MzRTFGQjYzNjAzCi06MTA4QTMwMDAyMTQ3RTE3OTUzMzJEMEFGN0RGNTVDNTJDNkNDMDhCRUY4Ci06MTA4QTQwMDA3RkI1NkM2QjNDRUU2QjdGMUExNUNDNzE2MDNERTZGNjIyCi06MTA4QTUwMDAyOEQ3M0FEMjUzQ0U4RkFGOTZFNUFDQzM3QUNEMUM0NzE4Ci06MTA4QTYwMDAyODBFRjdDM0U3REM5MTlEODhGRUVFOTgyMzY4QzVGRUNCCi06MTA4QTcwMDA2MzhEOTkyNjg0REQwRTQ3MzFDMjZFRjMwMDgyQkYxMkVBCi06MTA4QTgwMDBFNzU0RTgwN0Y4QjQ0OEUzNzI1M0ZEREM1RTZCMTYzQzJDCi06MTA4QTkwMDBFRjI5NDE5RkFGOUY3RjM3MTdFQjA2MEIzMzQyQjlFOEIxCi06MTA4QUEwMDA4NzQxQUU3MkQzOTEyRjdGRDQyODVFNThGNDlDRUU4RTBFCi06MTA4QUIwMDBFQTFGOTZBQjQ1Mjg1N0EwRkYwQjg0NUMyRERBQjRGNTZFCi06MTA4QUMwMDAyRUQ0RDM0NTI4NEY4M0NFOTU0QkM4MkZGN0QxRjUxNzE5Ci06MTA4QUQwMDA5RjFFQ0JGOEZERkI1MEVFQTRERjA3Nzg5OTA1RUI2QkVBCi06MTA4QUUwMDA1NjAxQzM3MzEwRkUxREQyM0Y4NUZBNDdGMzdFN0YzRUM5Ci06MTA4QUYwMDBGOTEzRDY2MkM1QjhCODQ2RTdGMTAyNzAzNjE1RTM4OUI2Ci06MTA4QjAwMDA5QTI2OEJCRjI1QzIzRTJFQzJGRUZDNzA3RjU3NzIxMzgxCi06MTA4QjEwMDBFQzI1RjZDQkVBNkRFNDk3ODI0MkZGNUFFRURCMUM4RjIwCi06MTA4QjIwMDA3MkYxRjVGMzdCNUYxRDhFNzlENjhCOUEwM0VERkUzOURBCi06MTA4QjMwMDA3QTI4RTg1NjgzNzQ4QUE3NzU1MjdDNTQ4Mzc0ODkwRjA3Ci06MTA4QjQwMDBEM0E5NDNERjg0NUNENDMwNEUwNzQ5OTcxQUIzQTA5MzZFCi06MTA4QjUwMDBFQzE3RjczNzBCMzlBQzY2ODJBRTlCN0E3MzdEMTdGQTQ4Ci06MTA4QjYwMDAwRDEyNDM3RTQ0QUVDRjlCQTg5RTFGMzgyNUU0RkU2REI4Ci06MTA4QjcwMDBCMUNFNkE5MDFCNTczRUM5OTdEQjNBNDRFNEZGRDBGNTZCCi06MTA4QjgwMDBGNTlGOUVBNkZBOTFFNEE3QzQzQjNBODczRjFGRUNCNDM5Ci06MTA4QjkwMDBCQjVCNjI5OENGMkQyNjM2QkZCMzdBRjU2NzQyQUUyQzA5Ci06MTA4QkEwMDBCMURDQUU3QzVDOUY3RTUzMUREMDZGQzE3M0JBOEI4OEU1Ci06MTA4QkIwMDA4N0I5NTdDNDczNkRBNjk2Mzg4QTRGN0ZBOTNCNzA1REZECi06MTA4QkMwMDBBNUZGNUUzMTAxRDcyREU1Q0VCMjUxMzMzN0UxM0UyMTBECi06MTA4QkQwMDBFQjQ2RjQ5N0Y4OTU1RUU2OTlEMDhEQ0I1RDEwRjE5MTU4Ci06MTA4QkUwMDA3ODdFQUMwNTg5NUZGRTNGNjkwRTFFRUZCNjU4QjE4RUU4Ci06MTA4QkYwMDAyOEY1RDQ4OEVGMjk4MUFGMUVBRjBERDcwNjIwM0UyRTcxCi06MTA4QzAwMDAyN0VBMzcwMzNGNDhGOEM0MUVCRTlCOUVFNzNGN0E3N0FBCi06MTA4QzEwMDA2NkZGRjA3MzhFRjlFM0NDMzhFRTE4RTM3NjQwQ0FFNUQwCi06MTA4QzIwMDBDN0EyMkVGMUYxRjJBRDE0MEZDQkU3RDg3M0I4NUM0NUIzCi06MTA4QzMwMDAzQ0M3NUI5NzdDRUU3MzNBRTJCQzFDOEU5N0Q0OEJGREVECi06MTA4QzQwMDA4OTVDRkU0Qjk3N0Q0MEUzQTQ5REM1MUZBQ0M3NDk3QTY0Ci06MTA4QzUwMDA0QUJBNDVFOEE1NDIxRkE5NUY1MjlGMjQ1RkZGNTFCRDU0Ci06MTA4QzYwMDA2MkY3QTQ1MERDN0FBRjU4MzdFOTQ4RjdCMDVGNDBGOUIzCi06MTA4QzcwMDA0NDdGNjdCM0YyNzM3MDExN0U5M0UyOUE3MTNEQkVCNTgzCi06MTA4QzgwMDA3QTNCQjkyRUU5NjRCQzFFQ0VBQjFDMTk0OEZGNzFCMTBBCi06MTA4QzkwMDBBOUI0NUZDRTk2QTVFRUVCMTUxMTlGN0Q4QTc1MkZCNDEyCi06MTA4Q0EwMDBBNzdGRDAwMzY0NEYxOTY4NjU4NDNGOTc3MTVCRkRFRDIyCi06MTA4Q0IwMDBFMzFDQTM1MEJFOUVEM0U4REM5MUY0REZGMEYzNDA4N0MxCi06MTA4Q0MwMDA5Q0MyN0NGMzBCNkVDRkM1Nzg2Mjc5NEUxNkY3NjdDOUVDCi06MTA4Q0QwMDBFRTkzNzg3RkY1ODlEMEQ4Nzg2NzM4N0YxOTc5M0FBOEVDCi06MTA4Q0UwMDAyNzYwN0Q3MDUzQTY5MjNGNTRCN0VFMjMzRDVGQzg0Mjg0Ci06MTA4Q0YwMDAyQjMwREY5RDc5REZCQkU1NDM5MUZGN0ZCMEQwRjk4NTU1Ci06MTA4RDAwMDAzOTBEOTlFNEZGNEVBRTlGM0QxODUzREI5OUNCNzMwOEE0Ci06MTA4RDEwMDBCRUY1RDk1QjM4N0MxRjhGRUI2NjJFMkZEQzgwRjVGOTEyCi06MTA4RDIwMDA0RkEzREM2MzUxQ0VEQjU2NkIwRUNDQkY0NjNDNUI3ODY5Ci06MTA4RDMwMDBDRjBERDAzRjIyRUU4QTZFODhFRkQxRjU5Rjk2MEZDN0Y4Ci06MTA4RDQwMDAzQ0EyNEUyN0JENzFBRjdGNjQzQUY2QkI5Qjc0MTcyRUQxCi06MTA4RDUwMDA3MTBFNzNEQzczMDNDQUI5Mzk4MUY0NEU5RTZCNUM2QTgxCi06MTA4RDYwMDBFMUYyRTZDREUxNzZBMzMyODdEQjhENEEyMUJGQTU0QjQ4Ci06MTA4RDcwMDA5N0U2RTJCOTgyQjZBN0MxNEZFMUZFQkFENUQ5MThDNEM5Ci06MTA4RDgwMDAzQzcwRTc2NUFFNzVGMDlDMUE0ODVCNTM0MTlFNEU2ODk3Ci06MTA4RDkwMDAzQzFFOUY2RjY1NzY5NEFGMDM5NkQwOUQ4OEZGODEzQjA0Ci06MTA4REEwMDBFMzA2RDYyMzAyRkFEOTIxQTgxRjZFOTE3NzQxMUU0NTBBCi06MTA4REIwMDBDRjk1RjQ5MkNGQkY1OUU4ODE5QzQ3REVCNzFGRTMyQUQ1Ci06MTA4REMwMDBGNDIzMDJERjkzQ0JGRTMwMURFMzg1OTMxQjczMTI1OTBFCi06MTA4REQwMDAwNERENEZFMkJBODBERUI3ODI3RDdDQjE5MzdDQjAzQThECi06MTA4REUwMDA0N0Q2QjkwMkZDMzlBMjhFNzhDMEQyRDAwM0Y3NzMyMURFCi06MTA4REYwMDBBRTNGMUUxOTlGN0ZGMTc0OTQxREU1MTJFMjdBRjVCQTE5Ci06MTA4RTAwMDA4NUZCMTU4OEU3OTVFQkEwM0YwQURDOTFFRkU5NTUwOTUyCi06MTA4RTEwMDBERTRFRUM5MTZDOERGMUJFMkYyN0I2RDM3ODVGRUE5RkMyCi06MTA4RTIwMDBGMTdFMTlERjc3RDQ1RDdBNUREQUI5QUU1NjFGMzAwNjcwCi06MTA4RTMwMDAxNDYyMjgwNjY3ODBFRkU4OTgxRjVFQzJGMzk3NzMxQkUxCi06MTA4RTQwMDA2QzBFMUJEMEY3MzhFQTE3RUUwQjZFRDY3OUJDNjhFN0NDCi06MTA4RTUwMDBGQTc2N0NFN0MwMDBENjE1RTYxRTYxQUUyMEMwNzMwRjFGCi06MTA4RTYwMDBFOTJFMjc4Q0RGQjdGQTVFM0FERjcxQ0I1QThENURBNjBCCi06MTA4RTcwMDA0NUU0NUQ4RkFFOUU4RUVBNzZDQUU1NUQ5MTA2RTM0RkNFCi06MTA4RTgwMDA2REU0RTc1MUEwM0JENjkwNkZCRDlBRTZFQzNBREZGQTZECi06MTA4RTkwMDA1N0U1NTlCMkZFNjRBNEZGN0ZFNDg4N0NDQkM1NUMyQTA5Ci06MTA4RUEwMDBGRDc5REVCRTFCQzRBODY4RDBCOUY0NkZGNTc5MjlBRjhGCi06MTA4RUIwMDBGQUM2Mzc5RkRBNjE4RDRGOTdBNkMzM0FGRUE2N0RGQ0FFCi06MTA4RUMwMDBFMDA4RDRBM0I4MDRBQTlGQjRGQTZBNjk3M0YwOUJBNjE5Ci06MTA4RUQwMDBDMTY3MjcwMzlEQjZDNzI2MzhEMDdFN0NFM0FCQTNFQkUyCi06MTA4RUUwMDAxRDcyMjNFNDc0RTRBNjY2M0Q5REQxRjgxRDIzNjBGQzQ5Ci06MTA4RUYwMDBBRUQ4MDREQ0VFRTg2NDFGOEVGM0Q5NzhGRUU2NjdCN0RGCi06MTA4RjAwMDAwRkJEMENBRkNCRjU3RUY5MEJDRTZGODlGRjk3MUI2N0JBCi06MTA4RjEwMDBDNzYzQkNEQUZDREJBNDFEQzM5MENGMzEwOTBFMTQ4NUY2Ci06MTA4RjIwMDA3OUUyMUNDRUU3NkJCODNEM0E2MTRGRDg4MDc1RDQxMzE3Ci06MTA4RjMwMDA2QkE3NzVDN0ZDRjAxNjRCOUJENTA1RjNCQTc2NTZDNEU0Ci06MTA4RjQwMDA2MzdERTQzMzczNEJCQzAzNUIxODFGNDQzQ0NDMDExREIxCi06MTA4RjUwMDBFREUwRjAzMjQ2RkI4M0MzODM2NkU2Q0NBNEFEN0I5MkEyCi06MTA4RjYwMDA5RjYxQURFNjAwRTZDRDVGRTFCRTIxRkFGMUIzRDE3Q0IxCi06MTA4RjcwMDBGRjVFRUMwN0RFQjI4REQ3RDkzQUVBMkFBMkJFMzA0MkI0Ci06MTA4RjgwMDBBQzM3MzYzNzUxRUUwM0QxRjVEMjIyN0VGRDhCQjUyRkFCCi06MTA4RjkwMDA0REM2Rjk0RUFFQjczODEwREY2RkQ2NUI2OEZFMDU5MDUwCi06MTA4RkEwMDBERjlCNDAxRTRGNkNFNEU3MDUxNkVDODAzQzM5MTNFRDY3Ci06MTA4RkIwMDA4ODQ2RjJCQjAwRTRENzhFRjI3N0JCQzU2RDREMzg1N0JCCi06MTA4RkMwMDAyRTRCMzdGMkZDN0E0MUEzNDZGOUI2OTRDRjA1RUVDMDlBCi06MTA4RkQwMDA1OEEyQkI5MDUzM0JGQ0ZCMDk1QzQ3MzdENkI4MDJFOTZCCi06MTA4RkUwMDBEMTk1QkNGRUEzRjUwMDNEQjdGMzdBODA1MTFFMjRERDc4Ci06MTA4RkYwMDBBNDVDODRFNTk0OTE3QzRBRkUyNzM2MEUxQzk1NEUzNzdFCi06MTA5MDAwMDBGODg5OUVGRTEyOTY4N0YxQzI1MjJCQ0JDM0YzNTA3RTk1Ci06MTA5MDEwMDA1M0I0MEJGNUZFRUY1MUYxRkRCMTBFNTU2N0U3RUQ1RDcxCi06MTA5MDIwMDBEMUYxRUJCMEZEN0I1NDQ2MDBGMUZFQkJDOUYxMEFFNjdECi06MTA5MDMwMDA1OUJGQ0NDRDI0QjlCRDRCNzc1QTM0Rjg3NTVBNzJDQjkxCi06MTA5MDQwMDA2ODcyMDNBNTI2QjcwOUZERTA1MjFCRDkxMUEzMUQ3MjUyCi06MTA5MDUwMDBFNjcyRkZCMzJEOTdEMUZEQzVCOUZDOUNCODg1RDU1MkZBCi06MTA5MDYwMDA3QzIxNUI4ODA3N0E2MkZDNTIxMTkzNzgwNjhGOTJGNzE1Ci06MTA5MDcwMDBDQjREOTk2NjA2QjlBRTE4OTE3ODY3MzY0NDlFODVCOThFCi06MTA5MDgwMDBFOUQzNzBGRkI3NjI3MEUyRTYyQzgwODc2RTQ4RTNGRDlCCi06MTA5MDkwMDAwMzEyMEIyRDAwRDc2QjNEQTY4RDg2RkU2QjcyREQ1NzNDCi06MTA5MEEwMDBFNjQ2M0M0N0NFMEJEN0ZCRTNGNTkyMzRFRkMwREMxNDI5Ci06MTA5MEIwMDBGNDczQjEyQkQxMEZGQzRENkI1QjY0RDJDM0UzMEY2QTI5Ci06MTA5MEMwMDBFQ0Q4NzYyRDBDQjc1ODU4MDZDNkRCQzU4ODdGNEFENzMyCi06MTA5MEQwMDBFREQyNUNGNzcwRkU1Q0Y1RkEyQzA4MzlCMDJFMzFDQjdFCi06MTA5MEUwMDBGRkRBNjE4REVDMTlGM0Q4ODE5RjUzODRGQ0NEQjJDN0IwCi06MTA5MEYwMDAwNkM5Q0VBREI0QjQ3NkM4NDcxNkRBQTkwNDMzRjI3REZBCi06MTA5MTAwMDBCMjYwRkIxNDczQjAxOUVGRUZDMzk2MzkzRUI3NTNBOEEyCi06MTA5MTEwMDBCOEY2QTdBNEFFRUQzRjI4MkFGQjVDQ0UwN0VCRkI5QjdECi06MTA5MTIwMDAwNUQ2MEI3Q0Q1RENDMDZCNTAzMTBEODg1QzA1RjY0RTQ2Ci06MTA5MTMwMDBEQkYxREFGNzM4RUY1MjNGNkI4OTIyM0U1NDM5RjA3QzhECi06MTA5MTQwMDBCN0M2QkNBNjlGQTA1RDE4MDM3MjMxMDA1QjkwMDcxOERDCi06MTA5MTUwMDBCNzc4RjNEN0ZCNTAyRDZFOTU3MTk2Qjc4OEUyQzUzQjczCi06MTA5MTYwMDAxQzdDM0RDQzNCOUNFNEY1NEUyMUFGNUZGODIwNzUwNzlECi06MTA5MTcwMDBGOTlDMTIwQUM1RTM1MUQ4RDZDOUMxNUNCNDBGNjVCQUNGCi06MTA5MTgwMDA3NzM2RjJFMThCQjU0QjdCMkMwNkY5RjlGQTQ1OUI2QkYwCi06MTA5MTkwMDAxMjhDM0YxMTc4MjkxRUZENkFCNTg4RjdEOTU5M0Q3OEEwCi06MTA5MUEwMDAzNUY0RUZDRkVDQjM2RTU1ODQ3QzU1RTc3MkJGREY5QTkwCi06MTA5MUIwMDAxOUNDQjgxQkVENEMyNkNGNTdEOUQ5QkQxOTc3QzNGOEI4Ci06MTA5MUMwMDBCMkFDRjE4NUFCODgwQUVFNDVCOTExRkI5MzkzQ0Q5RDA2Ci06MTA5MUQwMDA5RkRGQThFOEMxRTMyM0I2OUVGQjYzOUI5OUY5RTMxMkU2Ci06MTA5MUUwMDBBOTY1RjE0MEE3RjE4MDRCMTE5RTRCMDU1OEE3RkRGQ0U2Ci06MTA5MUYwMDAwMDNEMUZDN0M1NjM1Q0UzOUM5RENBRjc3Qjk4MDdFREU0Ci06MTA5MjAwMDA5NkU0QUZFNERCMzlGQzA0OTQzMUFFMzdEOTk5MDVENzQ1Ci06MTA5MjEwMDBEQjg3QUQ3NUEwRkU0QkJFN0UyMUY0RjEwQjNCRDdDM0JGCi06MTA5MjIwMDAzMTdBMkNEOUE5QzU5Qjc5NUQ2RkIxQzZFREVERTI5RDcwCi06MTA5MjMwMDAxQUFGNkY5RUUzNkYzN0FGNDA5QjNDN0ZFRDZDQjI2NzE4Ci06MTA5MjQwMDBEMjhFMzlFMTFGQ0FENzAyODcyNzIxRThGQzA3RkNFRTNFCi06MTA5MjUwMDBEQUQyOEJCMjY3NEZFNjhBRjcwNDA2QjI4MTI4N0YxNzBECi06MTA5MjYwMDA4QTk3QTQxRDAzRjZBQ0JGMjQ3RTIxQzk2MERERjMwNEY4Ci06MTA5MjcwMDA4RTYzRjQyQUE3MTlFOTkyNjI3N0ExM0Q1RkZDNjQzNkY4Ci06MTA5MjgwMDBGOTQ5NzY2MjBEOEIxQ0M3RDYyNjkxRkNBRUM4RDQ4OUVECi06MTA5MjkwMDBBRkU1NERFOUNDMDk5NzZFNkREMkU4OUNFQ0E0QTYyNDBECi06MTA5MkEwMDA4MkUzREJEMzA4MkVGRkZENjUyNUI4RUU4RTdERDBERjhGCi06MTA5MkIwMDBGNzI2RjhFNDg2MzcwQUJDQkM0RTYzQzdGOTNENENFMjlBCi06MTA5MkMwMDA5MURGODhGRUU3NTQyQ0UwMDE3NEY2QzRBRUE0QkFBMzgzCi06MTA5MkQwMDA4Nzc1RTQ0M0RBNEYxQUMyMjAzNUE4Nzc2RThCOUZGMzY3Ci06MTA5MkUwMDBDNzVFNEZGQTJGRDZCNTU4RThENUUyMDNEQzVGMkYxRUQ0Ci06MTA5MkYwMDBDNUY3MEJDREZFM0UwOUM4N0ZDQjdFOUQwNTAwQkVGNkFGCi06MTA5MzAwMDA4MDVFMTg4NEExNEI4NTNEQjdBNTlBOTgzMzgyNkY1MTMyCi06MTA5MzEwMDBDRTY4RTY4Q0UwMEZGM0JCNDM5ODZGNTUwQTc5QjkzN0Y2Ci06MTA5MzIwMDA4QURCRkQ5OEJDNDQ2NTVDNjVFQzVDOTI5RjUwQzZEOEI2Ci06MTA5MzMwMDBGREI4REUzOEQ3RTVDQUJDQ0NDQkUzNjMyOTU3RDM0NUFCCi06MTA5MzQwMDBERDdDMzI2QjVCODY3RUYyREE0QUU4OEY5OENGNTJGQzg2Ci06MTA5MzUwMDAyREY5MEQ0QkIxMUE1NzAzNUQ4RTlGNEY5RUJFOTBGRUE3Ci06MTA5MzYwMDBCMTBGRUI0M0YyNjRBMDBGRTgwN0Y5RkI1Mzg3RjhGQjVBCi06MTA5MzcwMDAyNzEwOTUzQzVFMENGMEY0RkQxNjE2ODBGRUU1ODIyRTVCCi06MTA5MzgwMDAxOEI3NjJGRTczQ0ExRDQ3N0EyM0U1MkU4NDdFMEZFQzYwCi06MTA5MzkwMDA1QzQyOTE0QUI3NkU2RTk1NkU0OTY1MkE3RDUyM0MyQUIxCi06MTA5M0EwMDAzRDJFQUJDQzUyRkFEM0JDN0Q5NUZFRjRGOTgzMTRCOEI0Ci06MTA5M0IwMDA2N0VENzA2NUZDMTU3NTI1MEE5Q0U5OUZBMDhDQ0Y1RTUyCi06MTA5M0MwMDAzOTU1ODE3MzFBNkU1MEM2Rjc1RTMzNEJFOUVGMTM1ODY3Ci06MTA5M0QwMDBBMEY0NUZCOTcxQjEwMkY3NkJGQ0E1MzI3RTQwRDMxMkU1Ci06MTA5M0UwMDBBNTdGNjA3MDk1RDIzRjc4RkZDMzBBNUMxODdBNDIxOTU2Ci06MTA5M0YwMDAzRkY0RjAzQUE1N0Y1OENCMUY5NUZFMTEyNzVFNTRFMDRECi06MTA5NDAwMDA5MTZEMkYyQkUzQUY2RURGQTNDMEEzRDgxQkNBRjg1MjE4Ci06MTA5NDEwMDBGQkJCMEEzQ0M2RjExNzY1RkNCOEQ0NEY5NUZFRjFDRUY0Ci06MTA5NDIwMDBBRjk0RkU4OTc5REYyOUYwNzIxMUU3OTRCQkZFNEJCOTQ2Ci06MTA5NDMwMDAyRkM0OTZFNUEwMUMzQjdCNzg4QjdBNTNEREU3ODQxOTFCCi06MTA5NDQwMDBGNUVGRjA4RDFBNEJDMkZDNjdGRjM0MDdFOUZEMjVFNjA2Ci06MTA5NDUwMDA4MUVFREVBQTFDOUY2MUIxMzdFMTc5RjYwQkQ5QzUwQzBDCi06MTA5NDYwMDAxMTRGOENEMTI3RDE3QjU1QTcxQTc5QkRDM0U4RDc2NTk5Ci06MTA5NDcwMDAzQzk3MDA2RUQ5MUNGMURDNkU2RTNCMjRGNDYxMzhBOTc4Ci06MTA5NDgwMDBDQ0ExQzAyOTlFNTQ2NUZDNjU5NTRFQTUzRkNEOUJBN0Y4Ci06MTA5NDkwMDBGNEE3Q0Y3NzI5NzBDRkRBMjI2NUZDMTU3NTZFMDVDRTVCCi06MTA5NEEwMDBGNDk3MjlFM0IzNTc3QTE0MzhBN0ExNTIxOURGN0I4REJCCi06MTA5NEIwMDA1N0U5RUYxMzk4QUZGNDVGQjlCMTU2ODFGQjM1RDYyOTYwCi06MTA5NEMwMDBFMzA3MzRGOTk1RkU4MUMxOTU0QUZGRTBGRDBEMEE1QzgyCi06MTA5NEQwMDAxODVBQTM4QzFGN0EzOEEwRjQwRjZCRDlBOEY0OEYzOEQwCi06MTA5NEUwMDBEMUE4QzAyM0RCOUE5NEYxNTdCNzA3MTU3ODE0M0JBMDk1Ci06MTA5NEYwMDA4QzJGQjUxRjU0RTAzMThFMEY5NUYxRTM1MjNGNTZGQTkxCi06MTA5NTAwMDBDNzNCNEYyQUZERDU1RkI5ODJCNDJGQjU5REJGRUYyQTY3Ci06MTA5NTEwMDBFM0I5ODk3OURGMkFFMzJDQzkxMEVGNjNGRDlCNDVCQkQyCi06MTA5NTIwMDBGMEJDN0Y1NzcxQkU4QzAzQ0I1RERGMkJDRkZEQkI4OUI5Ci06MTA5NTMwMDBDN0U3QkZFRkNEREY0RkJCNEJFNzcxRTI1MkJGODdDRTJFCi06MTA5NTQwMDBFNzI1RTI4MTU3RDA5MzA0QkY0NkYyODcyOTU2MTVENTA3Ci06MTA5NTUwMDAyMzkzNjlERjgyNUNBNjEzQ0ZCQjQxMUMwNDQwQTIyOTgwCi06MTA5NTYwMDAzMzEzRjM5MDk4NzAxQ0RCRTNBN0MxMTcxRkM3NkU4NkY3Ci06MTA5NTcwMDAxQzA3RjEzOERFREJGQkM3REU4NTk4QjdGRDY5MkNFNkZBCi06MTA5NTgwMDAzOUI3MzJGRjBBQzQwM0ZDNkUwMkVFNjNCRDE1QTVENkRGCi06MTA5NTkwMDBBMzY0M0JERTBFNzQ4Qzc4REU4MUE4ODYxRTgzQ0VBMzg2Ci06MTA5NUEwMDBCRkUzRURBRDM0QkU2MzVFNTFBRkQyNjA3RDhCMjNFNjg5Ci06MTA5NUIwMDA3RjEwRjIyRjMzRTg2OTgzMEZGNDBDMTJFRDg3N0QwRUQ0Ci06MTA5NUMwMDA4MjFGRjVBNTEyRkM5OENGNDlFRDFBNUYxRUI1NEZGODIyCi06MTA5NUQwMDA1Q0Q0QkZENjU3NDRGMDUzM0UzN0MxMDE1RjE5QjVFQjk5Ci06MTA5NUUwMDA3QzFFQkFCRURFNTc0OUYwMDY5Rjk3REE4REJFRjlENENECi06MTA5NUYwMDBGRUQxNTc0QkZEQ0ZGOUVBMDg3RUMxRTdBN0I2RDFCNzM4Ci06MTA5NjAwMDA5MkFFQkZFODZCMjA3ODkzNkYwREMxNUI3QzAxNkE5QkMzCi06MTA5NjEwMDA3QzFCQTk3REQ5RDc0OEZEM0I3QzREMDRFRkYyMDUwOUExCi06MTA5NjIwMDAwRUZBRjYxM0JDQzcxNzIyNzg5RkVGMzBDMUFGRkE1QTczCi06MTA5NjMwMDBBOERERUYzQjQxRURFQkJFMzZFQTdGRDNENzRFNzBBQkYyCi06MTA5NjQwMDBEODRGRjhBNEI3QTZCQ0FGMjc2MUM2NDY5MzNDQzhGODZDCi06MTA5NjUwMDA3NzMyRTYzRDI4MUM0NTk2NkY5NEJDQzc5MDdGMThGOTc5Ci06MTA5NjYwMDBGMUE1Nzg4RUE1MDRDMjVGOEM3RjJFQ0Y1REI3MzQyMjIyCi06MTA5NjcwMDAyRkY4NDYzQ0VGREU2OEU2OEYwMjdEQTgzN0YxQkE0MDRFCi06MTA5NjgwMDA3RDIyQTNGN0MzOTg4OENGRTcwOUI5NjRDOTNDMkU5RjEwCi06MTA5NjkwMDAyQkYwOUEyN0Y0QTAxMEU1MzM4RkU0RjNDRDRCQzlCMzM4Ci06MTA5NkEwMDA2NEJFMUQ5M0UxRkQ5MUU0QjNBN0M5NEY3NTg3NThGRUQxCi06MTA5NkIwMDAxRTdFRkYwQ0FGOTYwN0ZEQTc2QTZGNzk5NTlFRTc3MDM3Ci06MTA5NkMwMDBFNUUyNDNDQTZEQzE5NEVCQjA5RTc0NDBBNzNBNkM1NzczCi06MTA5NkQwMDBDRkFCMTFFRjQ5NzREOUJGRUI2NDBGRjQ0NzY1M0ZFQTk0Ci06MTA5NkUwMDA1NEFGN0ZDQjEyNTc4OUY1OTZBNDNDNUU4NzREQ0EzM0ExCi06MTA5NkYwMDAyOUVERDYwQzRGNjIxRUVFREJFN0Q0NkVGODk5MTY3RThDCi06MTA5NzAwMDBGRjdGMEFBNkU2QTBFNzE1Q0M2OUExNzNCOENDRkQwQUQ1Ci06MTA5NzEwMDBCRTdBNzMyRDA0N0MwODVGQzdGQ0Q0OEVFQ0U5NERDNzdDCi06MTA5NzIwMDBGNTVDMEYwOTA2QzJERUUxQjY4Q0NFRDY2M0M0Mjc0N0NFCi06MTA5NzMwMDBFMDkzMjNGMDkwRURBMTBDNEYyRkM0RTc3ODhFNUJDMTJFCi06MTA5NzQwMDAyN0VBMEFBNzM4NTdERkY2MTRFMkY1OUYzQkJGRkQ1QzE2Ci06MTA5NzUwMDBDQjBFRDM1QkQ2Mzc1NjhDMTJFN0I0NkVEN0U0M0UzOEM3Ci06MTA5NzYwMDA4RjEzRUQ0Q0M2ODlENDVGNzUyN0FGRjc0ODdGNzlBNDc2Ci06MTA5NzcwMDBBM0U1RjZGMDU0QUQ4NUVDNjY5NTE2RURDMjc4RkI1NDgyCi06MTA5NzgwMDBFRDlEMDM3MEJGRjA0NkM4Rjc3MEZGNTREQUQxMkE4MDEwCi06MTA5NzkwMDA0RDAwNTczMTdFRUVBMkVBNDgxQ0M5OTlEMUJFQzI3RDY4Ci06MTA5N0EwMDAwQ0Y3RkJBQTIwMDRDMEZDRjE2QzA2QUZBN0JDRTVGOURFCi06MTA5N0IwMDBENjgyRjNCMkU0MzY3QTZGMTVFNDY2MENBRTdGQzEzMDIwCi06MTA5N0MwMDA5REJFREZGMDk2Mjk5MEFCRTkyNDJGNTYwREYwOUY5N0IwCi06MTA5N0QwMDAwQ0YyRDI0OUJDMjBFNTYyOTE3ODJGNDc1RTA3Nzk5QjU1Ci06MTA5N0UwMDA4MkZDRjk2NkRCRDAzQ0RBQTdEOTM1Q0M4OUY0NUM2QTE3Ci06MTA5N0YwMDBFMkVGRDVGOTVGRDdGOUI5MEMyQ0U1RTNCOTkxODRGQzE4Ci06MTA5ODAwMDBBN0U5RkQwMjBDMkU5MDdGQzNFMkU4RkQ4MjY2OURENTlDCi06MTA5ODEwMDBGREE5MTM3QjVBMkJGOEY4NTZBQUE1MkM0MEYzQUFGQkY2Ci06MTA5ODIwMDA4QUI3RTZGMUZBQ0ZBRDc5NUMyRkNCRjcxQ0U4ODlFRjY4Ci06MTA5ODMwMDAwRDJFREE2RkExQkM4ODE1QjRFNDdCM0EzOTU3NTU1MzI1Ci06MTA5ODQwMDA3N0ZGQ0Y3QjQ1Qzg3OTRERDNDN0ZDM0MxNjZCQzk4RkRBCi06MTA5ODUwMDAzQzg3QjU1MkNDMkJFNTRCQjdDNjc5OUY4RThEQzRBRkY0Ci06MTA5ODYwMDA0M0NFNkI4NDlDN0Y4RTcxRkY2NDlCMzNFMTNBQjhCNTI1Ci06MTA5ODcwMDAwNTQ4MTM4NEQ2RkIzQjA3OURFNzkzRTdGQUU2MzAwRkQ0Ci06MTA5ODgwMDBCNUYzODBERDI4RDcxRUZGNkE3QUFGN0UwMTZCQTRFQkFCCi06MTA5ODkwMDA4QjhBNjY2NzIwNUNDM0RBNDZBN0MyN0NEN0FFQUM3RkYyCi06MTA5OEEwMDAyNTE1QjA5QkQ2QjA3QTBDRDZCOUE3MDY2NkJFODI2REQ4Ci06MTA5OEIwMDBDNTdBRUQ3M0JGOTNGNEM0OEZDRjZGRDE2QTk3NUYwRUYzCi06MTA5OEMwMDBDRkJCRTFCOTUxQ0JCMThFM0M1OUU3N0M2MDZGNzAzRUE0Ci06MTA5OEQwMDA4MDNDQjlGNUM0NzNENzA3N0E3MUFGRDAwQkMyNUZFQTg5Ci06MTA5OEUwMDA0NUQ1MTJFNkQ2OTJDM0VGODE3NEU4NDlEMTZEN0Y0RDFDCi06MTA5OEYwMDBDNzNEMTY3MzFCOUQ0M0E5RDk2NTRCQzRGQUM5MDJDNjVGCi06MTA5OTAwMDBGRDc2QjgwRUM0RkRCNUQ0ODMyRjJEOUNFRjVGM0VBRjFFCi06MTA5OTEwMDBEMTdCMzY1RjZBOENCRUU3RDA1NURDMjBFMzRGRDAzRjY5Ci06MTA5OTIwMDBBRTc3Qzc2MkI4RkNFQkEyQUU5N0UxNEQxRDk0MURGNjcxCi06MTA5OTMwMDBDRjVGOUEwMjQzRTJCM0M5N0YzRjgzRUJCMTk0NzgxRkI0Ci06MTA5OTQwMDAxODg4RTdGNTVFRDA1QzRCMDE5NzJGQkIwNTMyRjgzOURDCi06MTA5OTUwMDA4MTBFM0ZDMDdFOEEwOUQ3MDkxRkI0RjBCQTlEMzFERTVGCi06MTA5OTYwMDA5NUVCRTgwQTRGOUI5NUY5NzEzRjRCMkI3QUY1N0I4QzcxCi06MTA5OTcwMDA0M0NFQzVENzlCM0EwNEU4QjIxNDU5ODQ3NUM5MTI4RkY3Ci06MTA5OTgwMDBCMzMzM0M5Njg5RTdFRkZGODFFN0UzRkU5RThDQ0UwNTdCCi06MTA5OTkwMDAxOUU5QTkzOUY4NzNCQUFBQUZEQUEyMzkzRUQyNEY0OTA4Ci06MTA5OUEwMDAzQ0NGQzU4QkYzRUJBREJDNEM1RTY3MTRGODMxRTZDODE5Ci06MTA5OUIwMDA3M0MwRjNDREU2NjgxN0VBNkI4NUQ5RkI2N0Q0NzM1OTlBCi06MTA5OUMwMDA3RjkzNzlGMUZFQ0MyRkM4MUZCMEIzNEI3QkYwRjNDNzY4Ci06MTA5OUQwMDBDMUFFRkM3MDZCNDczRTlFMTVGNjkzQjI4RUM1OEEzQkI2Ci06MTA5OUUwMDBBRjQ3N0FFQzBFQjI1RjUzOTk4QkZDNDUxRjc2NDREMjk5Ci06MTA5OUYwMDA4QkVBNTgzQUVFMTA1MjlERDc0QkVCQjBBMUJEODYzNjlDCi06MTA5QTAwMDAwQUVCMjhFNDJGMDMyNEFGMzE4ODE3QUQyQjg0MTUxMUZFCi06MTA5QTEwMDBCNjNBMjY5RUU4MzBGQzMwMjMzQjNEMUNENzAwRUJEREY4Ci06MTA5QTIwMDBGOTMxMEJFMDc5QUFFNjMzRDM0QkUzQTA3RkU3RDc2NkExCi06MTA5QTMwMDBDQTgzMUU4Rjc5MjExREJGMjNCMUYzRTRGQkU5NThFRkUwCi06MTA5QTQwMDBBOTNGQjM4NUUwMjFBRDYzNEZGMkZBRDk5MTE5MzhERjEwCi06MTA5QTUwMDBGNkQzNTZBNzhERTI4MERCODkwRUIyNEVCOTlEMzExNzQxCi06MTA5QTYwMDBFRTgzMTY3RDE4NEJFRjE5MTcxRTZBOEMyMUJBODlCQTNFCi06MTA5QTcwMDA1QUIxNTg3N0YxNjk1RTBGRDk4NUMwMzBDODAzREFBQ0E2Ci06MTA5QTgwMDAyQzE4MTEyRjVCMUMyQTVDQzQyMkUwNEM3QzI0QzAxMUQyCi06MTA5QTkwMDA3NThFNEJDRDFGRUQ3RDQ0NUQ2RDI4MUIxQTU5NTc2M0E0Ci06MTA5QUEwMDBFRDg5OURCRTRGNjVEQzQ3MkNEMDM4REU5RkU2NzlCQTQ0Ci06MTA5QUIwMDBGNUExM0FEQjU0OUREM0ZCNDcxREU5NzU3NTZDMjAwRDZDCi06MTA5QUMwMDBFM0RCRTY1QjM3QTQ2MUJDRkI3OENDOEY0NEM3Mjc3RTIxCi06MTA5QUQwMDBCMEE2MjE1RDFCNDZGRDI3Rjk5MTA2QjgzNzg0RjlBRjgyCi06MTA5QUUwMDAzOTEwQzVBOEZFQjU5MEVBNkI1NzBCM0ZGQkM0RDk0RkEwCi06MTA5QUYwMDA1ODJBRDBCM0ExODg5MUZGNjRDMjBGQ0JGRTg2QjNBN0NBCi06MTA5QjAwMDBFNjIzM0ZDRjE0REI5RDY4MTc3MjQ1M0RCNEZFQUFGRkU0Ci06MTA5QjEwMDA5QkRBMTI0MThGOUQxMDU3MDc4MUMxREIyMUFFMEU0MkE3Ci06MTA5QjIwMDBFQ0JGMERFMjZBODRGMUJENTM2QzM3NDM1QzhENkQwMDcwCi06MTA5QjMwMDBFMjZBNkM5RjgyQjgxQUM3NjE1QzhERUQxMzEwNTc2MzlGCi06MTA5QjQwMDBCQjA2RTI2QTZDMUY4M0I4MUFDNzNEMEE3MTM1QjYwRkFGCi06MTA5QjUwMDA0MzVDOERENzFCQ0VDRTJBMjU3QzBFMzM3QUJGN0U0OTNGCi06MTA5QjYwMDA0Q0JDMDlFRDJCRTAxRjhENzVBMUI3REQ4M0EyOTExRUMyCi06MTA5QjcwMDA1NzlEMzYyOUZDMkQ2RThENTZFMEUxQzcxM0MzRkM0NTc5Ci06MTA5QjgwMDBGRTFGQjk1Q0U5MUY3MjI4NEJFOUNGRjRGNzU1RTAyQkIzCi06MTA5QjkwMDBFQTA2MjkzMEQ2ODcyMkVGNEY5RjVGQTJDMDY5REUwOTBGCi06MTA5QkEwMDBDQUY4Q0IyQUE3MkE3MDhBRTcwNjY1N0M1MkQ5MkNBNTY5Ci06MTA5QkIwMDBGRkExNzgwMzFGMDNENTI2OTU4RkZDRkIwQTY3OEE2M0Y0Ci06MTA5QkMwMDBFOTdDNjU1NzcyRkFCMEUwOEI4NDFGRjk4NTVFRDk1OTNDCi06MTA5QkQwMDBERDc2NkUxRkI5NUZDRkYzODFDQjA1NkU4QkZBMzg0OTA2Ci06MTA5QkUwMDAzRUY3MUQxREZBODdEQzAyRTQ4Nzg5NkY5QkJBREI2MkIyCi06MTA5QkYwMDA3QTAxNUY3MjFGMzEzMTNDNTc0ODI3MEUwMDNGODdCODBBCi06MTA5QzAwMDBFRjkxOTI1MzMxMjg5NzdCQ0JBRDUxQzg5RkRERUU5MkY3Ci06MTA5QzEwMDA2ODg0OTc5NDVCRDMyMkU1QTgyMUQzM0I4OERFNTNGMDc4Ci06MTA5QzIwMDBGMkY1QzlGQjFGMkE5OTdBREU3REY0ODc1MUZFN0E5RkVGCi06MTA5QzMwMDBBNzdGQzI4MjJDRDQ4NzczRThDOEU2RDM3RTZEOTg4RTQ2Ci06MTA5QzQwMDA1M0U5RkI0RUNDM0I1RkMxREZBODE3MEMzN0U5RDNGMERCCi06MTA5QzUwMDBCOTc2OTU5RUVFQUNGQjkwMEU0RjNDNkFBNjczNTgxREVDCi06MTA5QzYwMDBGMzg5RkJFNTdDNjNGNEIzMzEyREY5RTdFMkJGREJDRDhCCi06MTA5QzcwMDBDNzQzRkMxQjg1NzQ4MTY3MjlGODI1QkE5Q0EzOTAzRUQ1Ci06MTA5QzgwMDBCRjExRkFGNjZGNDJERjFFMTc3Q0M1M0MxNjYxRTZFMDk1Ci06MTA5QzkwMDBGNzQ5QkUzNUNDN0Y3ODdDMkVFQTREMTFDNzZCREQzNTk4Ci06MTA5Q0EwMDAwRjZCNjg2RTkyOThBQkRFMTE0MUQ3NDcwNTFFNEY4OTQ2Ci06MTA5Q0IwMDA3NUFEQzU3OTAxNEVCOUM2QUQyMUZEMzJFQTNDMUFFQTRGCi06MTA5Q0MwMDBEQjE1RjdCNDEwRkM4NEQwRUYxRUI1NkQ3NEJERTcxRDM1Ci06MTA5Q0QwMDA0MTZBMkY5RjFGQTJGRTMxRkE3M0I0OEUwRTNBQjg1NDE4Ci06MTA5Q0UwMDAzQTFBRjkxNDEwRUI5MUYzODZFRjdGRjEwMENBREIxOUYxCi06MTA5Q0YwMDAzN0M3M0ZERTFGRUI0NjdGMTFFRjc3Qjg3OEVCMTRBRDI3Ci06MTA5RDAwMDBDQjg1NzYzRkRFRUYxNjcwNkQzRUMyREJDNEJBRTJGRDU2Ci06MTA5RDEwMDA3RTgyMDM2MjVEMERGMzkzMEY2QzcwODY5RkM3OUMzNTQ2Ci06MTA5RDIwMDBBNjQ4N0ZEMzk1M0M2RDE1RjRERjJDRTg2NEJDNkY5QjhGCi06MTA5RDMwMDBBNTc2QjBBMzEzQkQ5MkFERjRBNzQ1NDc0QzA2QkIxMzVGCi06MTA5RDQwMDBBREU4RkQwMUZDODVGQjgxNzdDODBGRjgzREJBRDhCRkFGCi06MTA5RDUwMDAyMjNBNEVFQkM4OTdBQTQ4OUU1NkM3RENGNDA2RTZEQkNCCi06MTA5RDYwMDBENzFDRDIxOUY3Qjc5MzVGNDE3QkY5RUU3ODFCRjlEMzczCi06MTA5RDcwMDBFNkYxRTM3QTQ2Q0E1RDkzNThDNzU2NDFGNzYxN0VGNzJDCi06MTA5RDgwMDBEMTNCNjBGQzQ0OEY4REVBRjE0Mzk5QkJFNzlEMzBERjA2Ci06MTA5RDkwMDA4NDQ5QkEyQjA4RjMxREVBRjAyNzlFMTg3RURFODFGQjZBCi06MTA5REEwMDA5M0E5NjIwRDdCMjY0REJCMUY5RkZGRUUyMUIwMEJDRTBBCi06MTA5REIwMDAzMDlFQjI3RjczRDlCNDg5RkQ5MDhGMjFDRUM3QUVFOEIzCi06MTA5REMwMDBGMzlBRTBENzJCMDJBRkJEODI1RkNENDJCRTc3MEI3RjA3Ci06MTA5REQwMDBCMjUzRjg5M0VERTg0RjZDQzhFNzIyQjExRUVFNEYzNjUwCi06MTA5REUwMDAwQjdGMTI0MjdGMDJFRDVCQzI5RkJDODlGRTA0REE4MkM4Ci06MTA5REYwMDBGMUQ5QTNDOTZFREEzNUUxNEYyMDQxQTFGMzA0OEI5NDY4Ci06MTA5RTAwMDA3NTQ5QkNDQTdBRTgwQUJGQzYyNkM3MjhGQzFBMUQ5QjNBCi06MTA5RTEwMDBBNEY0OTc5OEQzMTVEODdEMzY0QjgxQUYzQURERDdFMEJGCi06MTA5RTIwMDBBNzU0QkYzMkZDRjg3MDgzOUYyQTUxRTAyMTg3MjYyODZGCi06MTA5RTMwMDBGNzU3QjhBNzI5RkQ1MzhBNjYyOEZERTVBRUQ5NEEzRkYyCi06MTA5RTQwMDAxM0ZCNjE4NUZDNzc1NjE4QkQ1NkE3M0M1N0VDM0JDOTAwCi06MTA5RTUwMDA3OEVBREQzMjlERjY2RDg2QkRBN0JCMjJGNUI2OTA3NTFBCi06MTA5RTYwMDBFQzkzOTk3MDlGMENDMjE3QTc1OUNFOTdBNUY0NTMxQzc5Ci06MTA5RTcwMDA3NUM4RTI0OUM3RjM3QkY1MTUyMDg3RDAxNjFGODIzOEQ1Ci06MTA5RTgwMDA4RDhBOEYyMEQ3MTBGNzE2N0FDNjUxMUMwOEYxRDI2MDQwCi06MTA5RTkwMDBFMjQzMUJERjZGOTJGQjU2QzMwQ0ZCNEYxM0YyRDVGRDYxCi06MTA5RUEwMDBBOUMyMEJFQzRGOERFOERCNDU1Q0Q2MkJFOUEyRTIzMjcwCi06MTA5RUIwMDBEMDJGOEFCRjFFOEZCOTY5MkZDQUNEQjYwRjIxNEVDNUNDCi06MTA5RUMwMDAzOEY3QzM5RjUzRkMyNUUzQjZBRDlGRkQ5Q0UyREJBREE1Ci06MTA5RUQwMDAxREZBRTI1NUY0QTU1MEU4RUQ5NjQzNTk0RDJEQTA2RkJCCi06MTA5RUUwMDA5QjUzMzU5NzIwMzVFOTRCOTFENDk3MTY2MTM3Q0I2QTUwCi06MTA5RUYwMDBFOEZBMTA3MURGNTY4QjI3MDZFM0JGQ0Q4Nzk3ODg3OTg0Ci06MTA5RjAwMDAyM0VDMDhDNUVCMTE3NjA0RjM0ODk2QThGNkE3QTY4N0JDCi06MTA5RjEwMDBGQkIzMzhCMzIyQzczM0Q2RDczMERGMjAwMzNDREMzMDY1Ci06MTA5RjIwMDBCRUM0MDA0RjMwOEM5RjZBODA2RjMwOEM5RkE1RjQzNzgxCi06MTA5RjMwMDBDMUJBQ0YxNzZGNkYxNkY2NDE4RTJCMzQ3Qjc0NTcyNzNCCi06MTA5RjQwMDBGNjc2QzgyMUQ1QkUzMjRGOEQ3MkVFQTFGOUU4NUNCMjJCCi06MTA5RjUwMDA5QjVCOEVBQzEwNzQ5Q0FGRjA2NzhGN0NDRTIxQTA3MzlFCi06MTA5RjYwMDBGRUI5Rjc5Nzk4RkQzMUZENDEwRTRBMEU5QjVERjVDRTg3Ci06MTA5RjcwMDAzMEZGMjQ5RjE4RTZDMzExRjM5NURBNzU0NUZGOUEwRTVBCi06MTA5RjgwMDA3M0ZFNzZCNUNFNURDMjNFRUYxMDdFRTY2NTQzRkNBNjVECi06MTA5RjkwMDBGRjcwRkFERDI5MjAzRjVCNUE0Qzk0NUY2RDM5MzQzNUYwCi06MTA5RkEwMDAwOUU3REI3RDc2MEVFMURCNzREODQ0RUY5MUFERkZFMzhBCi06MTA5RkIwMDBBNDZCRjE3RDQ1ODk5RkM0QTdGMEJEMjUzMUI4Q0Y3QTQ4Ci06MTA5RkMwMDBBNkM1NDRGNkFGRDBFMjQ5NzI3NDQyNzdBMzdDNzUzNURBCi06MTA5RkQwMDBBRjk0NUIwOEEwOTI5MDJFQkJDMTBGRDFCOTYxNjE0RkM1Ci06MTA5RkUwMDAyNTVERjYxQzdEOENFOEJFRURGMEUyMjRBNEZCRDVFREVBCi06MTA5RkYwMDAyNjg1MkUyM0RCRDQ3ODdEQzQ4OTQ0MDUxRUZBMzE4RjUzCi06MTBBMDAwMDAwN0MxRUYyQUY0QkQxMERFNDZCREMwOUQxMTE1QkU1QzMwCi06MTBBMDEwMDAxRDdGOTFGMUMwNzZDMUE3NkQ4MjRGREJBMzVDOTU5RDNBCi06MTBBMDIwMDBFRDZCNkMzQjY2OUQxRkY5NUQ4NTRGRkJGMkJBRDFBN0M2Ci06MTBBMDMwMDA3RDc5RkQ2RDMzRjAxMUVERUM5OUUzMjZCMkIzMjMxQzZECi06MTBBMDQwMDA4RDdBNkQyN0ZDMjg2RTM1MTlGQzg0MUEzNzVDNkFCRTQwCi06MTBBMDUwMDA3QUFDQUZEOEVGMzREOEM1QUVFRTk3NzZCMTQ0N0UzRjM4Ci06MTBBMDYwMDAyNTc0NERBN0U3NjNDMzdDMTBFNzJBMERGNDk0NzFGNEJGCi06MTBBMDcwMDA4NUY5MjZDRkEzMUJGOEQ3QzVGREUxNzlGQ0M2N0NGQThDCi06MTBBMDgwMDBCRkZBNjJGREE1QTU4MkZDQ0RFQTk4Qjc4NDNEN0Y4QjFGCi06MTBBMDkwMDBFQ0Y5M0JERjBCN0JGRTdENzc4QTkzMEU4RUJGQUMyN0ZFCi06MTBBMEEwMDBFQUQxQzEwRTNCQ0VFMjIyRURCODNDMEYxOTZBN0QyNzAyCi06MTBBMEIwMDAyNjMyQ0VGNzA4NzlEQ0U5N0U3N0UyMDBFNDY3MkZGREVGCi06MTBBMEMwMDA3RjM0REU3OTRCQzQzQjZGNjJCQ0QzMUJGNzgxNzhCQzE1Ci06MTBBMEQwMDA3M0MwM0Q5QkM3M0JBOTFBN0QyRjY2NDlDQzU1NjY2RjVGCi06MTBBMEUwMDAyNzcyRkFCRjNEQ0U5OTUyQTRDNjM5RTUyRTM1Q0U5MURFCi06MTBBMEYwMDBGQjA3QkIxRDFBOURDMzlBOThBN0M2M0RCQkYxMTdBQ0MxCi06MTBBMTAwMDAzM0Q5QjUwMEJFQzdCNUREM0RFREJDNzYzODI4RjRGQkNDCi06MTBBMTEwMDA4MEUwQ0Y2QkMyMEVCRjIyRjI4NjFENDg3RkUyNEI5OUQyCi06MTBBMTIwMDBFMDBCQUY1NzE0OUY3NkM1QkE5Q0M4OUZGOTNDMkZDQjY0Ci06MTBBMTMwMDBBQkExN0M3QUE0RjRFRkJFNUExQTdGRjBDQ0FDRDNGODcyCi06MTBBMTQwMDA3RUZGNkU0NzBDRDU1OTc2MjMzRUIwODQ4MzE2RUY2OUE3Ci06MTBBMTUwMDBGQzdFQzU2RUI3RTY1Q0QyNDk1RTNGQTI0REI1MDMzMkM4Ci06MTBBMTYwMDA0RTkwNzJCOUJCRjUxMzkyQ0I1REVERTdGN0E3RDI3RUE3Ci06MTBBMTcwMDBDOTcxQUZCMTk3NEE5MTNFNTdCNTMyODY3OUMzODVFQzI0Ci06MTBBMTgwMDA4RkQxMkY1RUU4MzlDNkYxMjNDQzhEN0E2NzdFQzdGODcwCi06MTBBMTkwMDAxQzRGN0I1MEM3RjNDRjNCREI0MjQ5Qjg1REU3MDkxRTNDCi06MTBBMUEwMDBEMEYxM0RGMEUyQjYyMEUxQkJDRkFEMzlGNDRDMUE1NzA3Ci06MTBBMUIwMDA4QUU3QTI1RjNCRkJDRTQ0QkNCRUVCQjREOTY0QTM3RDZGCi06MTBBMUMwMDAyNjA3RTk2REIxRDBDRjM3Q0Y5QTYyNUQ0NDVGOURGNjI3Ci06MTBBMUQwMDAzOTgyNkQ5RkRDOEZGQUVBQjdFQkY0QkVDOEVFQjM4MzI5Ci06MTBBMUUwMDA5MjIzRTlCNkVBNEE5REVDQzlGNkQxMzYxM0Q2OTdCNzYxCi06MTBBMUYwMDA5RjM2OEJGM0Q2NDE4QTFGNzZCNDY3QzU2MkJCREQwREVGCi06MTBBMjAwMDBGQTQzRjYyMjQ0RjQ3RkVDNEEwN0REQjcxM0U2RTM3NjFGCi06MTBBMjEwMDBDMjQ5Nzg0ODM5MDg5RTM2OTU3NUY2QkQ5REM3QUVFNEFCCi06MTBBMjIwMDBFRkQxOEYzOEZCRDcxOEE0Q0ZBQkE3RjdDNEEwQkREQTA2Ci06MTBBMjMwMDBENUM2OUYzM0UyOUU5NjE4Q0MzM0RGNjgzN0M1RjFCQTk2Ci06MTBBMjQwMDBDQUUwNjRCQ0RFM0NFNkRFRDg0MUI4QUUzNjEzREZCRjAwCi06MTBBMjUwMDAxMTcxOEQ3Q0RFRUVEMUYzQTg5RUJGQkI4REU3NjFCQjkzCi06MTBBMjYwMDA0RkYzRkFEMUY2MDAzRkI3QzY4NDFEOTNFM0I3OUY5RTI0Ci06MTBBMjcwMDAzQUIxMUZENjBGMDIxNjFBM0Y4MjA1NTZDNEMzQjg1NzBCCi06MTBBMjgwMDA1MkI2NUU0OUU3NkJGQ0Q1MkNEMkVFOTUzQUQ0MzhBNzhFCi06MTBBMjkwMDBBNENERTA5RkJDRDVBNDA3OTIwRjA3QkY5RDdBNEQwNUMyCi06MTBBMkEwMDA5REFGRTc3NjcyQkM1OUI1MkZCQjRFMkY0OTlFOEFDRjIyCi06MTBBMkIwMDA4RkU1Q0Y2NzAxN0VCRkNDQ0ZGMEM3MUNGMUREOTVGQUVCCi06MTBBMkMwMDAzMUQ3NEQyQkM3RjkzNkYzNzM2NjIzNjI1NTdCNzY3MDExCi06MTBBMkQwMDBENEVDREYyRUM0RjNGRjlCNjJDOENGNkVDN0Y1RTNGQzVFCi06MTBBMkUwMDA4NzE4RDVDRjc2OTczRDUyMUE4Rjc1RUI1NkU2RTI3MUY3Ci06MTBBMkYwMDA5QzZBRDc0QkNGNkNEQTFCMEZFM0RGNTlBRjExN0RDN0Q4Ci06MTBBMzAwMDBFNUE5RUJEREU5Q0VGRTM1RTZDMTY3NUEzOTdENjUzRDRECi06MTBBMzEwMDA0OUVBRTU5RUQ2QzQxQkM5M0U4RDg2QkI4MThFRUY5NDZCCi06MTBBMzIwMDBCRDQ0NzVFQzVCMDNFQTNDNDMzN0M2Mjg3ODJGNkM0OTgzCi06MTBBMzMwMDAzNEU0NkY2QTdEMUNFMjRENTkxRjg4MkQxRjEyQ0VERjU5Ci06MTBBMzQwMDAwQURCNzk3RDdERTgwRjUzMDcwNzAxREZFMkQxRkNGQ0QyCi06MTBBMzUwMDBCQ0IxMkUzRURFNkM1M0UzMkM0MzVEQkNEMDU4MTczN0E2Ci06MTBBMzYwMDBGQTczMTE4RjBEMTFGQjFBRTdDNDNGQzJDRkM5N0FDMzJDCi06MTBBMzcwMDAzNjRCNzA4NkU3MTJFMjg3NjE2NjQ4NURFODVDQUYzNzZFCi06MTBBMzgwMDBBOTAwRThGRkIyODgyRjg3NTkxQjdFOTYwNkFBQjI1NTBFCi06MTBBMzkwMDBGNzhGNjAxMTcxMDE3M0Y4NTlGMjkwNzA3RTNCRkNCODMxCi06MTBBM0EwMDA5QTBGMTQxRDUxRTUxMkYyQzdDRjMxOUY1Qzg5N0I5QTM5Ci06MTBBM0IwMDBBNDA3N0U3RTJFRTIyMkUzOENENTMxRkQ5QjVBODBBRjJFCi06MTBBM0MwMDA0MzBGMzFCMURGRjE3RkY2QTI1QzM1N0QyNkY3MzMyMEY0Ci06MTBBM0QwMDBGNEU4OEVGQkYzOENFMkVERTZDRkFDMjQ3NzVCQzY3MDNECi06MTBBM0UwMDAzRjI1RTMxNEI5NEY3MzBENkI1OTU2QUFFMUI5NkNGQkM1Ci06MTBBM0YwMDBGMjE2QTBFN0E2ODM3M0QzMTdDMUZDRUY3RDQ0REI5RDYzCi06MTBBNDAwMDA2QzRCQTFGQzNFN0Q4MzkyNUYwRTk1NzVBODIzMjY3RjQxCi06MTBBNDEwMDA1MjAxQzZFQjM2NDVBRjY1N0ZEMzkxMjUzMUY4N0Q5MTZBCi06MTBBNDIwMDAzMzIxMTNDOTY5RjM4NzU2ODY3RjFGQTA2OTg3OERGNjhDCi06MTBBNDMwMDA3MzlBMEU1QjY5QkY2NURCMEVBRTI3QjJFRTJDRTNGQ0IwCi06MTBBNDQwMDBENzg1M0RERjJGRTJERTU3NDVEQ0IyNEZDNDJEN0I0NDdDCi06MTBBNDUwMDBEQzEyMTQ3MUNCMkUxMUI3RUMxMDcxQ0JDQkMyNkY2RTI2Ci06MTBBNDYwMDAzQTIyRjRFRjlFOTgwMEZGOEUyREFGQ0I0QTNDNkZFRTYwCi06MTBBNDcwMDBERDcyRDQwQzBCQUVGOTY4Qzg5QTIwNDM3RkFFRUFDOUVFCi06MTBBNDgwMDA3OEE3QUEyN0UzNTI1NUZCMzFDNjkxQUU4QzJGQjU2NzRBCi06MTBBNDkwMDAyQkZEQTNEODk1NEFGRkQ1RUQ4MzBDRjlDODcwNDMzRTM4Ci06MTBBNEEwMDA1MjYyODg0NzI2QUE3QTc5MjgyMkRGQTVGQzVBQ0Q3N0ZFCi06MTBBNEIwMDBBRjhEQ0M3NzMzOTE0RjNDMEZEQ0Q2RjIzMEYxNzFEQkFFCi06MTBBNEMwMDBGMUFDODRDOEI4RUM2NUExMzdEQjhFNzNGRkZDRjI4OTcwCi06MTBBNEQwMDA1MzcxOURDNTZEMjcwNDNGQkUxNEZDNjgxNTcxOEEyNzEyCi06MTBBNEUwMDBDRDdEN0Q3RTBBRTYxNUE3QUM3OEVFQTMyQjc5OTZGNzk1Ci06MTBBNEYwMDBDQkZCNEUwNDNFOEQ4RkY0N0Y5RjUxRDIxODg2QkZERTdBCi06MTBBNTAwMDBGMjk3NUNBQTlGNUNBNDdFMkM4REUzRTdEQzM2NkJEMUNFCi06MTBBNTEwMDBGNEZFRkQ4NURFNkJBOUNCQ0YxMkU3OTI2QTA3RjA3REQyCi06MTBBNTIwMDBEMURBQTFEODZFQjA3OEQyRjFGREE3Q0Q5QTY3MDZEQTVDCi06MTBBNTMwMDA3MUZGNkZBQzlERkUzRDA5NUZCRTNDRDdDNDlBRDAzRjEyCi06MTBBNTQwMDBGMDIzQzlGMEYzOUM2NjQ2Rjk4QTEyRTBEM0NDRUI0M0MyCi06MTBBNTUwMDBGQUQ4MzE1Rjg3NDE3QUFDODdFMUJBMzY1OTU4MTNGQTk1Ci06MTBBNTYwMDA3OUU2NjY0RTQ3NzdDNjU1MDg5RTczQUE5Rjc3Mzk4RTVGCi06MTBBNTcwMDBENzQyN0NGRjE4REMyQjdERUYwMzhGNjZFMTc3QjdCMDA1Ci06MTBBNTgwMDBDNTdEMzI5QjlEQkY3NzYwQzlGN0RFOUY1RkM4QkY2N0ZGCi06MTBBNTkwMDA5QjMwMDhFNzJEQzlFNkZCQTg0MUIyREYzM0M0QkNBNjU3Ci06MTBBNUEwMDA5ODFEM0RDOTlGNzY2NTU3MEQ3OTJFQUI1NkRGNDczMTEzCi06MTBBNUIwMDBDQTRCOTNCMEIzMkY2NzdBNjY3NEY2MUQ4QzY3RjNGOUI0Ci06MTBBNUMwMDBCOTkwNkQ1RjRDRDZGMUI5MDVGNjc4MzdGRjJFQTQ1QkQ0Ci06MTBBNUQwMDBDN0Y3QzA1RUZFNzI0MkNDQ0M0RUU0MkNEODdGRTZCMzA3Ci06MTBBNUUwMDBGOTExNzI1MDEwQUFENUM1REZBOTMwQTlGNTJENTMxMDY1Ci06MTBBNUYwMDBGOTdEMjZENjRBN0EzRDFDMTc5Qzc4RUU3QzIzNEVBODFFCi06MTBBNjAwMDA3MURFQjAxNjM1RkYwRkVGRUYzNzY4NzhERUFDNDM5RTkyCi06MTBBNjEwMDA5MDIxQzhGRjgzRkM3QjFBMTc5MjI3RTNCRUZEMDdGOTQwCi06MTBBNjIwMDBGMkJDQTRGNzJGNzg4RTU4NEY4OEE1RjMzNTlCMEVEQTJECi06MTBBNjMwMDBENzYxMUM2OUFDRjdCREZEMUVCN0UzNDZGQzlCREY5QkYxCi06MTBBNjQwMDA5RThFRjFEN0U2OTFEN0E1QTMxRTZGNDEwMzRGREZGMzhFCi06MTBBNjUwMDA1OTM0REQxRDA5RTNGQTYzRDFERTMzRkU5RDJEN0ZGNTBDCi06MTBBNjYwMDA3NDNDMkZCMzY1QkM4NDE3RjJGMUEzRjhGOEY3OUY3QjE1Ci06MTBBNjcwMDBFQjMxRkMxRUQ4OTYxQjQ1M0Y3QjgwOEY5N0IwQkY2NkExCi06MTBBNjgwMDBGQTI4RUNCNzk4MDhBRTc4MUVDNjQzN0Y3QjVGRjcwN0MxCi06MTBBNjkwMDAyNDZGRjlFRUMzMjhBNzFCNTA3NzAwMUVENUQ3RkQxMUY0Ci06MTBBNkEwMDA1RUZGMDA2NTBDQUVCRkREQzc3RDI0MTI4RUVGRTMzRTdBCi06MTBBNkIwMDAxNjA5NkZFRUYwMkY2REIxOTFGQkM3NTIwRURGM0UzQ0Q1Ci06MTBBNkMwMDA1NUY4MURDRUY3MjkzMkFGMjlCRUI4M0FGRjlGODU5Q0I5Ci06MTBBNkQwMDBCRTIxRUNENTAxRTEzRjVFMTNGRUUzMTVGNDFGOTQwRjlDCi06MTBBNkUwMDA3M0ZGRDEyQ0Y2OEQ3NzBCRkZCMTUzRTRCREUxQkNDQkVBCi06MTBBNkYwMDAyM0UyOEI0QTkxMEZGMzNDQUM2MDY0MjlDRjdCMURCMkZGCi06MTBBNzAwMDBDRTlGNjFFRTJDMUY5QTVDQTBDNjg5OTNGMjU1QkYzMjkyCi06MTBBNzEwMDBBMTU3OTIyMkE3NjUzREQyMEQ3OTcyQjYyMTRGNTZGRDAxCi06MTBBNzIwMDA0QTg5NzlCMDIxNEYxRTZFQzg5M0Q1QkNCN0I4NzU4MkRGCi06MTBBNzMwMDAyMTRGOUVBQThDRkYyMERGMjlGNjkxNkUzMEU0Q0JCMzI3Ci06MTBBNzQwMDA5NDcxNjEzRUFBRkIzNjYxN0VDREVFOTQ4RjVCOEE2NzgxCi06MTBBNzUwMDBERkZGQkY4QjhGOURFRkQ3RkNGRkM3Qzc3RjUwMUY2MzA1Ci06MTBBNzYwMDA0RENBRkU4REIxN0Q1M0Y4RkZENzg1REZEODJGRTI4MDJCCi06MTBBNzcwMDA1NzQ1OUQ2MzlGODhFN0Y2MjAxRjdCNjM1Q0U3MTI3MTU2Ci06MTBBNzgwMDAxRDNGQzcyMUVCMjAyRjhCM0E1NDkzMzhDN0IxNDVFQ0JFCi06MTBBNzkwMDBCQjZEMTI3NUE4QTVDNURGRjE3MzFDNjc5OUUwRTM1QjdCCi06MTBBN0EwMDA5REYyQjFEQ0E1QzY3OTEzRjM1NDNFOEU3NzI2MTlFMkVCCi06MTBBN0IwMDAzRTM1Q0UxQkUzNTBFM0JDNTJCQkNBQzc1MTZDQjAyMTNGCi06MTBBN0MwMDBFRTUzRjkzOEIyQURDNDEwRjc0RDMwRjgyOUY1MUMwNzM3Ci06MTBBN0QwMDBDNDA1QUJGQTE1RTI3QjA5RUE3OThFQzI5MDdBOUVDMzcyCi06MTBBN0UwMDBFOERGRTVGQjhBMzI2RUU4ODgxMzdDRUEzRUYzMjZGNDY0Ci06MTBBN0YwMDBBMUI4NUY5NDY2RTVERkRCMzA3QjJGQzdCODQzRDJFQkFGCi06MTBBODAwMDBCN0ZEQjgzRkRGRjI5NzlCODg5RTg1RThDRjNCRjFERjJECi06MTBBODEwMDAxQkZBRjFCODY4NDMzRjVFOTdDMEY3MjNBMzA3NjE3OTNECi06MTBBODIwMDBEM0NGRTM5Rjg0NDkwRTdFQUU4QTg1RjBGQjUzRTc4OTQwCi06MTBBODMwMDA5QjM2RjQ0QjA5Qzc0QjY2NDcyREMzMzg0MkI3OTlGQzhBCi06MTBBODQwMDBGOEZENURBNkRCRTlEQ0REREI1REM0NTFDN0ZBNjVDQTU2Ci06MTBBODUwMDBFRjlGNkEzOEVGNUZDNEJDNUFGMTZCMTQ1NzlERUFFNzZCCi06MTBBODYwMDA2RUE0Rjk0QjVENkQ1ODE3REZGQ0ExRDU1NThGRjIxQzE2Ci06MTBBODcwMDBDNUJGODM2MjhDQjc1RUVGOTdDQkZGN0U4RkEwMUY5RTE0Ci06MTBBODgwMDBGRkZGMzlGQTRCRkM1MDJDRjlERjE2RDU3RjYyMjAwMTBGCi06MTBBODkwMDBGMzZDODhFNkYwOUJGRDNFOUU4RURGMTc5NEZFRkFGRDdBCi06MTBBOEEwMDBFNzRGOTEzRkNEOERCRDdDMzZFNkNCREExQTdGMjJERkI0Ci06MTBBOEIwMDBBRjBDOTI3RTE5RTNCNjJFRTM1RjQzOUM3NjI0Q0ZGRDY2Ci06MTBBOEMwMDAwNkFFRUIxQkUxOTc3M0YxOTM1MjgzQkFCRTdGNDNCNDlDCi06MTBBOEQwMDBFNzM2RkUzRDE4Qjc4RUNGOTU3NDkyRkRGQjA0REY1RjFGCi06MTBBOEUwMDAxN0YzNzVEMDQ1Q0ExNTdFOUYyNjMxRTIzRDU4MDNGRTA5Ci06MTBBOEYwMDA5MjVFMkIwRUVFMERFMTExQzY0QjVEOEY1QzQ3MjdGMjg5Ci06MTBBOTAwMDBFM0I5NDBEQ0ZENEQ2N0YyQzMyNkI5QzQ3QkJBOURDN0VECi06MTBBOTEwMDA3RDE2MTE0NzQ2RjI3RjM4QUQyQjIwRDdDRkM2MENDMjJCCi06MTBBOTIwMDBGNzVGRTQ3QkVCREMxRUNBNzc2NjEyMUQwRDhFNENEMDAwCi06MTBBOTMwMDBBMzlCMEVFOTc0Q0U4MTg5N0Q3MDczMDczRjhCMzVGNDNDCi06MTBBOTQwMDAzM0U2QjExQTRCOEFBOEJCMUFGNzEzOERGNTAzRTNCOUE2Ci06MTBBOTUwMDBCMkUyRDZDQjE1RjhBQUQzRUFCOTMyRjdEOUJFRTdGNUY5Ci06MTBBOTYwMDAyQkEzNjM0NzE4RkM1MkE5QzE2RjREMzRGOEI1NjkwNjkzCi06MTBBOTcwMDBCRkE3RDZDNUNEQ0MyQ0JGMzMyNEY2RUIzNTI3N0U3RkMxCi06MTBBOTgwMDBDN0NDMjkxNEQ5MkZCRTAzQzRFOUJEQUMwQkZEOTVFNzk0Ci06MTBBOTkwMDA2NzRGRjU3MzEyREQzQkY0NjMyRDczNzJGRUY5OTVGNzgzCi06MTBBOUEwMDA0Q0Y0NTgyRkYxRjlBMTIxRDI4RkI5MjhFRkI1MDY4N0MxCi06MTBBOUIwMDBEMUY3M0NBRDJFRjVFRjMzMDQ3Q0Y2OEY0NkU3RTA3QjE0Ci06MTBBOUMwMDAzNjhDREFBNzdDOEU4RjQ2RDNGQjM4QTlENDNFRTE3MzUwCi06MTBBOUQwMDBEMkY1MzVCRTNDNkExRkYzQjlFOEZBQTNCRTIyNkExRjVFCi06MTBBOUUwMDBGNkI5QTk2REYwOTU1MUZCODBDRjQzRTM1NkY5MkEwOURBCi06MTBBOUYwMDA1RUU5RjM1MjlCMDVFMTBERkVCRDgxMkMzRjczMDFDNjVDCi06MTBBQTAwMDAyQzdCMjUzQzJGODJDRTk5N0VDMDIzODI4RTU3RDQzOTUxCi06MTBBQTEwMDAxNEI4Njc2REFBMzIzRTdEQkU1M0U5NEZGM0U2MjlGREI3Ci06MTBBQTIwMDA5NzU1QkExNDM4QzU1M0E0OEM0RjJBNzMyQjcwMzc3N0I3Ci06MTBBQTMwMDA5OTMyM0VDRUU1NTFFMDk4QkM0QTY1N0M5NEQzQUJGNEE0Ci06MTBBQTQwMDBFRkI5NkE3ODQyQ0I3OUY0QjlDMUU3M0U4QTc0NThFNTI4Ci06MTBBQTUwMDBGMzFDRTU3NDJBM0JDQUU5NTM0OUVEMkRGREJCMTE3Rjc4Ci06MTBBQTYwMDAxREU2NDYzN0ZBNkQ0N0JFODNFMUY5NzZBQjlEQkZGNzI5Ci06MTBBQTcwMDBERENERUNEMEJBNDVDQ0RGQ0QwREYzMjlGOEMyN0M0QTUwCi06MTBBQTgwMDAzRTE3RTBFNzg5RjMzQzQ3NTVCQzJCOTVGQjQwMDdDOUNGCi06MTBBQTkwMDA0RkNBMzg2NjhDREUyMzBFRjNCMUZCMkQ4RTNGMEYwNkI2Ci06MTBBQUEwMDAzQ0VFMUJBMzMzN0M2RkU1RTBFODY5NTQxN0MxMkQ0Q0U1Ci06MTBBQUIwMDBENjg5MURGRDRDQzRBNzMxRkRFRDk0MkY0RTc5NTRBM0NBCi06MTBBQUMwMDBGQzBFNTY1MjhFNzVDNEI5ODdCMjVEOTE3RjBGNEFCNjlGCi06MTBBQUQwMDA2RkZGOEE3RjZGMjg2NkNGMzYyN0Q2QzVBNjE0Q0Y0QzY2Ci06MTBBQUUwMDA4QThBQzhGRkE2MDRCRjFGOUQ0NkYzMEQxQzEyMDU3ODc1Ci06MTBBQUYwMDA0QzU5MzNEMzNBM0IzRkJDM0UzOTZFRUVBMzZBM0MxQTA1Ci06MTBBQjAwMDA5NkZGODA1REM0RTNCNDRFNjk5RjU2MzlENkQxRjU1NUEyCi06MTBBQjEwMDA3OUU3REZCNzM5MjlENkY1ODU4OEQ3M0UxM0YxREFBNzZCCi06MTBBQjIwMDAyMkVFRkU1OEM0RERDNzQ0REM3RDQ0QzRERDFGODlCODc1Ci06MTBBQjMwMDBGQkIwODhCQkRGMTdGMURBMjExMUFGQkQyM0UyRUUxNUMwCi06MTBBQjQwMDAyMkVFNUU5NUI3OEVGRUFFRDU5OThEMUFEM0NGNzNCRTI5Ci06MTBBQjUwMDA3NEMxN0E3NTlERjNEN0FBRkI4NjczMUY1NUUzRUUzOTRFCi06MTBBQjYwMDAwRkE4RjFEQUFDNjU2QURDN0Q3MzlEMUFBRkRENThBQkQ2Ci06MTBBQjcwMDBDNjZCMzNFNkFCRjZGMTdBNkZBOTAyNUY1N0E5RDZFNTRCCi06MTBBQjgwMDBBRUY1QThGQjg2OTI0RkQzQ0E1NDNCNjk0QjU1RTNCNTRCCi06MTBBQjkwMDBBRUQ2QkIzNTM4NUVDN0JGNDM4MkNDRkMzNEMyMUY0NjNECi06MTBBQkEwMDA3QzBGNUUzOUVGNThFMDcwOTdFMjdFNEQyMUYzMkNDNUEzCi06MTBBQkIwMDBGRDlDOTFBNkQwQkJCOERGQzRERUQ3RTkzQjkwNEQ3OEIxCi06MTBBQkMwMDBDNzMwRDBENzMzNDMyNjRENzE0NkY4MURCRjRBRDdBQUE4Ci06MTBBQkQwMDAyMzZBN0RFNDg2M0JENDM4QjhBMjVBQ0Q2N0FDNjU2QTU3Ci06MTBBQkUwMDAxQ0VDRUVBMUVFQzc0RTMzRjgxRDI2RkNBMTk1RkZDRTVFCi06MTBBQkYwMDA0NjdCQ0VFRjg3NEMzMUQ1RjRCRUQyQTVGQTIzMkIzMzVBCi06MTBBQzAwMDA5RTFGRTNGRTg4OUU5QkE1RjQ5MzNGMzIwRkUwRTcyNDRFCi06MTBBQzEwMDA4Njg4RjcxNEVBQTM4NkJFODlGQjc3N0IzRUU0RUYxN0FDCi06MTBBQzIwMDAwMEQ5NDNCREUwRkVBQjE4QTdCN0Q1M0U4RUJFMUZCNzE3Ci06MTBBQzMwMDBEM0MyREYxQkQ4OUQxNkVCNUEwMjVENTc5REU1RUYwNzg3Ci06MTBBQzQwMDBCMDc2MzM5RDFGRjNFMjdCMjM1OTM4QUY3QTdFQUMzMDY4Ci06MTBBQzUwMDA2NDU2Q0U5NzU5MERGRDk3QTE0RjNDMkYzRUZDMUNERDRECi06MTBBQzYwMDBGRjFDM0VFMjFDQzcwMDM2ODBDRTQ3QjQ3NEZFQkU0MUQ2Ci06MTBBQzcwMDA0NzFDNjc5MDUzNjk3RjBBODIzQzNFMkFFODMyM0VBQTBECi06MTBBQzgwMDBBMkVGOEM5OURGNjdGNDlFQkRDREQ0NzZFMjE5N0MzRkFDCi06MTBBQzkwMDBFQTczNUU4NzFEQzVENEJDRUQ5QTQ5NkFERTM2QzY3MTdCCi06MTBBQ0EwMDBGRUJDNkRCQzUzOTVENzg5NzlBQTFEMjg3N0E5NzZFMDlCCi06MTBBQ0IwMDA5Q0I4QTY4NTlGNDNFQzJBQUVGMTBDQzg5MkVGRTkxMDMwCi06MTBBQ0MwMDA3REEyNzJGNkM1RjA3RDRDMkUzRjIzQzQzQTFGQjI3QUE2Ci06MTBBQ0QwMDBFOEZEOTU2NTNEMTlGMTY5ODQ4MzlGNTdBQ0M3N0QxQkRECi06MTBBQ0UwMDAzQ0ZGRjcxRTdGRUZDNUNDM0M0OTAzQjAzRDNFNTY5QzcwCi06MTBBQ0YwMDA1RjlDRTRBMkY5NUEzOUJGOEFFMERGNEY1OUU3OUU0RkMzCi06MTBBRDAwMDBCNDg1Q0NDQTc3MzdDQzJDODJCRkQwM0YwN0U1QUIzMEI3Ci06MTBBRDEwMDAyQzQ3RkY3QkYwMTJFNzI4QTU5Q0M1MjY1RTYwRkZDRTdFCi06MTBBRDIwMDBBRkM0ODFCMjFEMTU3MkVCQjg4RTU3MUM3QzFGRjU5NTEwCi06MTBBRDMwMDA1MDZEMDhCRjEzRjk1RDJBQUY1M0RDREI2M0FBOTk3RjFFCi06MTBBRDQwMDBCN0M1MUQzQjA2RjgzMjU2QUNCRjQ4RUM5MzZERjFCMTY4Ci06MTBBRDUwMDAxMEM2NzM5QjdDNzY2QUU1RkVFNzhBRDRDNTQ5RTgzNzVFCi06MTBBRDYwMDBCNzY0NzhEM0YxNUNFMDk2OTQ2RUNCMThEOEU5Q0Q5NkIxCi06MTBBRDcwMDA2RTNEM0E3QjhGQTBEOTMyOTRGQ0VDOTZFNjM0MzNDNjE0Ci06MTBBRDgwMDBBMUEzQ0MwRTMzREUzN0FBQzcyQzFERUJCMUUzRjA3REI3Ci06MTBBRDkwMDA5MzY0ODQxOUVERDM2REYyMDU0M0EzRTk1Q0E4OTdDRUMzCi06MTBBREEwMDAxMUMxM0E0QTMxOEUxREVEOTg0OTdGRUZCMUY5M0RGQzUyCi06MTBBREIwMDA5QjRBMTgxRjc3QUJDMkZCRjZBNUYwRjNENzM2MDczRkM3Ci06MTBBREMwMDBERjNBMzY3OTFFRjFBQkMwQzVCRkRGNTdEMDIzRDYxNUE5Ci06MTBBREQwMDBDMEU5NTJGOTc3N0NFNkMzM0ZDRTE3RUUyNzQwRUY5NUU2Ci06MTBBREUwMDBFRkZCMEM2NTExMzBGMkNCMDBBRjMxRjJDNzcwMkU3MTYyCi06MTBBREYwMDBDNTYxNzE3RUFFQTVGMzdEOUJCRjhBQjg2MjhCQTgzQjBGCi06MTBBRTAwMDAxQzExNzFDNTQ3MjJBRTM4MjhFMjhBMTU4NjNBRDBCQjlDCi06MTBBRTEwMDAyMkFFRDgyN0VBNDBBRjhBN0FERTdFNTFDRjdCNURDNDZFCi06MTBBRTIwMDAxNUYyRkNCNTk0OEJENDk1Q0M2OTRCNjBFQ0FEOTk5QzM0Ci06MTBBRTMwMDBDRTY5MkJCNTQwMTlBQ0EzNzQwRTg3NTNFQkY4RkVFODJFCi06MTBBRTQwMDAxNURFMDY0RjQ5MDFGNjVCNUNFMzYwMURBOTk1MEQ2M0I1Ci06MTBBRTUwMDA3MDFENjk1NTZERjQ5RTUyQTVEN0VBNzQ2QkY4N0VEMkM5Ci06MTBBRTYwMDAxM0Y0NUU5NDdDMkZFQzE2NEUxQTc2RDM5Q0IxNjQ3RjVCCi06MTBBRTcwMDA2RkYxOEE3M0M3N0E2QjIxQzlEN0EzMTZGQTRFOTJGQzc5Ci06MTBBRTgwMDA3RTVDRTUxQ0Y1N0I0QUIzMENGNEJEQzkwMDVCMzU2RUY2Ci06MTBBRTkwMDA0NzVFOTM3NDFGQ0MwNjQ3RDIzRDREOEM4REJBNDU5Q0JFCi06MTBBRUEwMDBFN0M1OTdBRTNBRDE5NzM1ODJFRTkyMkVDRDU3NEQ4OEIxCi06MTBBRUIwMDBFM0VCRTBGQkExMzYzMUNGQTFFMjFCRTI3MDlFRjc3QTEzCi06MTBBRUMwMDBGMEY5QTYwQTdEMzBDRUI3NEFDRTI3REVBNzg5MTZGQzU4Ci06MTBBRUQwMDA3RkE4RUZGOUNGOURCRUVENjNDQTM5RDNCNzA1N0YzQTlFCi06MTBBRUUwMDBFNjJEQjlERjgyREZEM0FFMENERUQ3MTNGNTI1RkM1RThECi06MTBBRUYwMDA4RDNCOEVCRkJGMzJFOUNGOTlDMEE3NTVFMjNEMDQ2OUIzCi06MTBBRjAwMDA1N0FGMTNGQTZCN0NERTdCQkVGM0JGQkZGMzVFQzkwQzk5Ci06MTBBRjEwMDAwQjdFMEZGRERBRTAyRkY4REYwMzM2RDdBNjQ2OUVGNzRCCi06MTBBRjIwMDA3RDBGRjEwMzVCNzlFRkI1M0ZBM0JGMjMxOUNBRTBGMkIwCi06MTBBRjMwMDA2MEJCQzZFNkM0RUYwQzVFRDFDM0JEMUNFOTk4REFDM0EyCi06MTBBRjQwMDAzNTQ2RDQ0N0M5OUZEOTA0M0VBNjk4QjU1QTBBOEUxRkU0Ci06MTBBRjUwMDBBRTkxREVENjVGMzU4MUNFRkY1RDc3MEQzRjI3RjFGRkU1Ci06MTBBRjYwMDAwMDEwNzg1OTQxMDA4MDAwMDAwMDAwMDAxRjhCMDgwMDhECi06MTBBRjcwMDAwMDAwMDAwMDAwMEJFRDdEMEI1ODU0RDdCOUU4REEzMzIwCi06MTBBRjgwMDA3QjFFQzBBMDgzOEExOTEyQjAwM0E4MTk1MzFGMjMwRjc4Ci06MTBBRjkwMDAwNTFDNzBBMzk4MTI0MzY0MTA1NDhDODgwM0EyRDBENjY5Ci06MTBBRkEwMDAxODkyQTZCN0Y0RDQ3MzE4MDQxMTA5NTFEM0E2M0REQTQ4Ci06MTBBRkIwMDBGODE4Q0RBM0JEQjlERTk2OThEQ0E2NEQ3M0NFMjFDNjk4Ci06MTBBRkMwMDBBNDY5NkYxMkIxNDcxQkVENkQwREJFOTJGNDZCQkYxRUVECi06MTBBRkQwMDA2REQyMzZBN0VENzdCQ0ZGRkZBRkI1NjZGNkRFMEM2ODI1Ci06MTBBRkUwMDA1MkQzMjYzRDg1MkZEOUFFQkRERUZGNjNGRENGQjVCOTY3Ci06MTBBRkYwMDA3MjA1N0VFNjMzRTY2MDZBNzhDOEM3RjBDNzcyNDU4MTlECi06MTBCMDAwMDBGRjQ3OTg1NzlEODNFRkYxOERBMTlFNURDOUM0RkZCNzlGCi06MTBCMDEwMDBCMjYwMzJCQzBGN0VFQTE3NkMyNjYzMzVBQ0Q1M0YwMEI4Ci06MTBCMDIwMDBFRjdCRjNCNDU0Rjc3NEE4QUVCMzVEMTg3MjMyRTY4M0M1Ci06MTBCMDMwMDBERjJCNTlEMDQ3Q0MyMzlGMzU0Q0E1N0EzOURFOTIwQUI1Ci06MTBCMDQwMDA2ODJGQzc2NzM0OUZBMTdFNkIwRkYzM0FDNjQyRTE0RjZBCi06MTBCMDUwMDBCMEJBODlEMDVGRDQ2RDU1MjM0RTlDQUYzN0Y4MzlBNzZECi06MTBCMDYwMDBFNjYyMkMyQkRERDJFMDgwRjU1NDY2NkM1RUNEMjY0MDg2Ci06MTBCMDcwMDA4MzJBODc3QjBBRjYwRjJDRkE3OTZFMUUzQzdERUJCRDg2Ci06MTBCMDgwMDBCODNENkNENzBDRUQ0RTRERUJDRUYwNEU4RkFENkJFQjZCCi06MTBCMDkwMDAzNjU2MTI4Mjc5QjY2NkZDMEZDRkZBNjQ2Q0Y3QkJGNkFGCi06MTBCMEEwMDAxMEI2QjNCMURBN0UxOEJGNzdDMTJGRDMzMzVEQjFGNkQ2Ci06MTBCMEIwMDA4NzY2OTU0RUYzRTdDMzgwRTVBOThDQTUzMTM2RDUxRThBCi06MTBCMEMwMDBDQUYyNEYxRkJFNUZDNkMyOEM0MTkzOEU5MjQ0QzY2MEM3Ci06MTBCMEQwMDAxREU3MUI5NDg4MDNENjU1REIwN0YwMUI4M0Y1OTc1QUIxCi06MTBCMEUwMDBGMDdENDM5RkMzREI4QjBCNjQ5QUVCMEVEOEU3N0FCRUVGCi06MTBCMEYwMDA0REQ2MzBBNTJCN0YwMDlFRUJGQjlBMkJBOEZEMkVEQkI3Ci06MTBCMTAwMDAzOTg0OTcxMzdFMTFCRTE5QURFQUI5MjhCQ0IwM0REMzdFCi06MTBCMTEwMDA5NTcxMUU1M0Q5OEU3M0MwN0ExN0Y4OTMyN0JDRjk0OURECi06MTBCMTIwMDBGODc3MkVDQkJENjJFNUY4NDdGOEQ2OEFCNjA5MERENTdCCi06MTBCMTMwMDA2MzE5RTJEMzAzQzAyQzFDQkVBRjk1RUY1OUQ5QzA3ODc4Ci06MTBCMTQwMDA0NjA0QzNGMjYzRUY0RjM3NjUyNzg2QjAxRkQyOEQ1Mzk1Ci06MTBCMTUwMDBEMEQ1MkNGOEJGOTc3OUVENzMxMEZGOUNBRTZBMDQ1REQzCi06MTBCMTYwMDA3OTE5N0I5RUU4MkE2QzBCNDdENzA5RkI2MkY3RDk2MkY1Ci06MTBCMTcwMDA3NDk3NjUxODhGRTE3QTk3RUJDQkQ0NUYzQjM5MTlENjdBCi06MTBCMTgwMDBCRjlBRDE1QzZDNzVBMDg1QzNFQjNFNEU4RjRFNzgyOTdCCi06MTBCMTkwMDBDNjg5RDExQjhDMTMzNEQxMUZFMTZCQTI1ODI3OENCMzA1Ci06MTBCMUEwMDBBQ0FDRUNGRkZDMTA2MEY2RThDRUFDM0IxMDRGQ0JGRTM1Ci06MTBCMUIwMDBEMUNBQUMzMDVGMzUzNEMzNzI3NUFEMTI4OTQwNzk3OTJDCi06MTBCMUMwMDBFMDU2RTI4N0U1RkFGMUUxN0Q0RDhERUQ4MjFFM0Y2RjlECi06MTBCMUQwMDA2Q0NBQTY3MUQ2OTRGMzcxRDgyNkRERkNCNEJFOUQwNDZBCi06MTBCMUUwMDBDRjIwNjM1QkRDM0E3QTdCMzM5MzRENjYwMEM3RTc3NzA5Ci06MTBCMUYwMDAzN0VGQzNGRTE3MUY3NDMwQTQyMzg2N0RFNzIwREUzOUE2Ci06MTBCMjAwMDA1QzRGMDJFRDIyRkRCRkI1NEQ4OTFDODQ3NTVGRDhFRDAyCi06MTBCMjEwMDBBMDc1QkVCOTRFODkzMEM0M0Y3MzNGM0UwMEVGQkJGRDAxCi06MTBCMjIwMDAyOTQ0OTcxNzEzNDJGQkJFMDhGNThENUI5M0ZDNjFEODQ4Ci06MTBCMjMwMDA2RkNGQjhENjhENDE5OEY3NjI0QUE4MUVDNzY5RENGQTZECi06MTBCMjQwMDA0OTRCMThEQUY3MjQ4NjlENTkzODZFQTNENTdGMTBBNjhFCi06MTBCMjUwMDA1OEE5MDI0Q0M3QzExM0ZFN0QxMzNDMUI3QTc0Rjg4M0I2Ci06MTBCMjYwMDBGRjhFRjkxNTFBN0Y4OTg1ODVGQTVEQzNFOUM3MzE5QjgxCi06MTBCMjcwMDBENzIzQzAxREJBRjUyRkM5QjJEMDdBNEYzREU0QTBGNTRGCi06MTBCMjgwMDAyNkNDRjYxMjNDMUEwQTEyQjQ4NDMxODg0N0E2QTkzOTkyCi06MTBCMjkwMDBCMDlFNzQ2RDEyQUVGMzgyMDJGQzA5RjQ3NjdFOTkxMkIwCi06MTBCMkEwMDA0NkY4MzA5NUUzQzU3RUQzOEQwNzkwOUYxRTE1RkJCQ0Y1Ci06MTBCMkIwMDBGMEMwREM0OTQ4Q0ZFNzUzNzhGRDM5NEY2MjA0Rjc3NTk5Ci06MTBCMkMwMDBDRUNCQ0I2MThGMkJGMjE4RjI4NjFBRjIyRDRGRTZGQjE0Ci06MTBCMkQwMDA1MDgwMEUxQUM1QkExQUJEMTYyRDAxRjBEQkY4RDA4QUJGCi06MTBCMkUwMDBDRjIyOUUxQjNEN0RGN0UwRjM2NDcyMzg1OTgxRkU2RkRCCi06MTBCMkYwMDBFREI2MzI4NDM3QzJDMzk5ODNGNTQ1Q0Q1ODZGODZDQkZFCi06MTBCMzAwMDAyNTdGMTZFRDA3RTEzNzFFRTBGNkU2QUVDRUU0MTBFQzQxCi06MTBCMzEwMDA4M0I5NTlDODNFMzEwNjg3ODY5RENGN0M0MTk5NDlGQzQ3Ci06MTBCMzIwMDAxQ0U2RkNDRUY5NDQ2MUJBRjMxOEU4NzdBNUQ3MUUyRUM3Ci06MTBCMzMwMDA4NzcxRDhEMUM5NDRCNzJCREQ5QzZFRUQ4NTVCNTJCM0M0Ci06MTBCMzQwMDA3ODMzNTc5NDNFQkM1NEVFQzNGM0JENTE5NDFCOTA2RUJBCi06MTBCMzUwMDAwMUFFMkI5MTVGNjYyMjNDQzZDRDE5ODBGN0I1NEQ0NkY0Ci06MTBCMzYwMDBCQUREMzI2MUYzMDNENUIwQ0Y3NTA1MzY2Njg1RkE3NTVGCi06MTBCMzcwMDAxRUQ1QzAzNzU1NkQ0NjNFODI3RDFCQ0E2MzY2MzNEQUUzCi06MTBCMzgwMDA3N0NGMzg0MTlGREQ5QzNFODFEMjI3MDU2N0M0RTg2MkI0Ci06MTBCMzkwMDA5N0RGNDJFRDcwNzVCNjUxRTA2Rjg2RUJDNzBEMEVFNzkzCi06MTBCM0EwMDA5MDVFNDFERTlDQ0ZGMEVFMkIyNEI5MDBGNEMzRDdDNUVDCi06MTBCM0IwMDBBQzNBN0U2OEU4NzExMEREMzMyMDBGODQxM0QwQTdCRDRFCi06MTBCM0MwMDA2QTQ2OEM1RTI0N0MxQTc2NzUxMDNEMzYwOEJBNkJFQ0EyCi06MTBCM0QwMDAwM0ZBMTlBM0EzMjMxM0JDNzBDRkFBOUMyNzNCNDY2NzhCCi06MTBCM0UwMDA1NDFGODdDRUJFRTc2N0M0NDc5MkZGMUE1OEIwOUU1OUQ0Ci06MTBCM0YwMDA4N0YzQjU3QzEyOUU4QjEwOUY5RkE5MERBN0UzMjg2MTUwCi06MTBCNDAwMDBFQUJGQTNBNDY4MkNEMUJCQzAwNzE3M0RGNEUzNDRCQzNBCi06MTBCNDEwMDAyNTRCRkM4NEQ5MDkzQ0NGNURBMkQyRERBNjlDMkUwMzJFCi06MTBCNDIwMDA3OTYzMTVFN0FDNUQxQjhDMENDMEZCOTQzNjJCQkQ0N0Q0Ci06MTBCNDMwMDBGOUEyNDI3QjlDOTYyMUMyOUY5QkZCRURBOTUwNEUxMDI2Ci06MTBCNDQwMDA2NTk3QzBBQkQ1RUE0QTQzNzgyNTMzQTNERTMzOEU5OTlFCi06MTBCNDUwMDBFNDg5OUZFMzU1Q0FEOTlEMzY5Njg2RTc3MTgyMzhERjI1Ci06MTBCNDYwMDA5QjE3NjUyQkQ4NkVBN0EyOTA3RTYwMkYzM0QyODFENTEzCi06MTBCNDcwMDAyNDA3QkNCMzJERTJCQzBCQ0I3MzhGRTRBREREQzlGNzYxCi06MTBCNDgwMDA5QjkwNjYyMUJFRjg2RDNBMDg1NDI1MDYwRkJCRDhGRjg1Ci06MTBCNDkwMDBCODAxNkZGRjAwRDRENzdCOUNGRTA4OTRDNzMzMzdDOTJGCi06MTBCNEEwMDA4NzUyOTg2OTQwMzc2RjRENDUxMjFCRDBFMTc5OTE3QkU3Ci06MTBCNEIwMDBCQ0ExRkMyOUNGNEQ4NkY2Qjc3OUIzMERGNUI3RkIzRTlECi06MTBCNEMwMDA2OUE4QkZDMzlGNkIyOERCOTk0RUFFRTMzQTg3MzhEQzhGCi06MTBCNEQwMDBFRDAyQ0VCQTdBMjk5NzA3MTE4RkQ1NjIxRjNCRUMyMTc2Ci06MTBCNEUwMDA0RjEwQ0VFMTZBQ0Y3QTkyQ0YxRDI1OUZGMTBDQzEzRTVECi06MTBCNEYwMDAxQzFFQ0U3Rjc2RDQyNzYxREM4NDI5NEQ2RUQyMjM4NDM2Ci06MTBCNTAwMDA3QzJFODA1RkM0NDMyNzBFOTIxNkEzMzNCQjA5Q0U2NjAwCi06MTBCNTEwMDBGRTMzRUI5MzBEQjM4NURFNzMwQkJCODVGNDFFRDdCOEZBCi06MTBCNTIwMDBCOEZBOEQ1OTdGMDMxOTYxNDE3QTREMTRGODVBNjQ3NTQwCi06MTBCNTMwMDA5MURDRDg1QTAzRkE5QzgyRkFFNTUyQUUyRkY5RUUyNjM2Ci06MTBCNTQwMDBCQzA2NDUzQjE2QjY5MERFQkE1Q0VDNUZFQTVGQUZCNTcxCi06MTBCNTUwMDAzMzM2NzAzM0MwNjMwMUQ3QjM5NjE3NUNBQTQxRkEzNDBGCi06MTBCNTYwMDBDRkRGMkJEQUM5NzI2MkMxMDE0RDhCMjM0RkRCMDU3RDIyCi06MTBCNTcwMDAyNTA1NzhGRDcyMjc1MzUxMEVDOUZBQjA5MEI3Q0I4NUQ3Ci06MTBCNTgwMDBEQzVFMDI3QzhDNzQ1Qjg5NEY5RERFREEyN0M2RTk4QjFBCi06MTBCNTkwMDBEMjJCMUJDQ0QxRjNFOTIxNDU0NTM4MjQ4OEUyMDExNjkyCi06MTBCNUEwMDBFQTlCOUQ4QTcwMEU1MzIzQUIyQkM4ODhCRkZGMDREMDQzCi06MTBCNUIwMDA5RDQzN0EwQ0ZEOTRDRTZFREFGQjc5QTA1RjQ3NERCMkM1Ci06MTBCNUMwMDAxRjZEMEI4N0Q2RjBEODU3MDE3RTg5MzU0OTdFOEIzN0EyCi06MTBCNUQwMDA0NkVGNjQ3NzQwNzk4MjhGRDM3QjZEQkFEMzRGRDU2MUM0Ci06MTBCNUUwMDBFREM0RTQzOTMxQkRBQzQ2RTg3N0E5QUM5NUY4NjA5ODc0Ci06MTBCNUYwMDAxREUzRTQ3NDM5QjIxREMzQ0YxRjM5OUY0MzlDRkZDQ0I4Ci06MTBCNjAwMDBCQUM5NEY3NDE3RTRFN0JFMDU3RTkxRUU5NkQ1MUFFOUU0Ci06MTBCNjEwMDA2QTQ1Njg3NDNBRkI5NkE0QjNCOTZDMkVEMTU5NjgwMzk1Ci06MTBCNjIwMDBEMTg1NDNCNEQ5MzEwOUU4ODVDMzg5RTgyMzUxQzI1NzhDCi06MTBCNjMwMDBFOERCMzY5NTBEQTg4MEE3NjM4ODdGNThBNENCQzY5MjE3Ci06MTBCNjQwMDA3MTlGODNEQTBCQzQxNzgzM0U2NkQzRDM0MTMwNjBENTM0Ci06MTBCNjUwMDAyMjNBM0MwRTE2QjI0NDM3Qzg5NzQxMUJDQjc4MTBEQTE5Ci06MTBCNjYwMDA4REQxNTYyQzc2QzNGRTA2NEIxREM5MEQ3NEE4NDYwQzExCi06MTBCNjcwMDA3QUZCMzExOEY3QUM4QjhEQThFRjlCRjk2MTJBRkMwMzlDCi06MTBCNjgwMDBFNUMwRDY4QzM3M0RCODlFQUQzNjQ2RTczRDBCNUZBQTg4Ci06MTBCNjkwMDBENUEwQkM1RDk2RDkyRjZBNEI2MURDRUQwOUIyRkNFRUZBCi06MTBCNkEwMDAyRUFDN0YzQzkxOTcyRjNGRjlBNzVEMjQxRjgwNUUxMTQwCi06MTBCNkIwMDAxRjQ5MDIxRjQ5NTI3RjlGQUU4MzJCRTBDMTM5MjE4NzZBCi06MTBCNkMwMDBDRTE5QTcwOURFNjZCRDVFQ0EwOUYzMzk2QzlFRjc0RDM3Ci06MTBCNkQwMDAxMzlFNDZEQUY3QjBGNTAyNjlERTMyM0E1RkZDQzc2Q0JBCi06MTBCNkUwMDA5Mjk3QUQwNkJFMTgzRUNFMDBFOUVGQUJDNEJFMkQ0OTIxCi06MTBCNkYwMDBDRjY1ODRFMkQ4OTE1MUY4NkZCMEZENEE2RjJGMDA5QzVFCi06MTBCNzAwMDBCRkFCQTBERUFCNDFFRjM5OEM4QjBFMTg0NzI5NzhFOTJGCi06MTBCNzEwMDAzRjUxRkUyQkJCQzJFMzEwOEU1NjY4ODA3MkRFQzY0MkRDCi06MTBCNzIwMDBCNDFFQzlBRjA5NDgwNzU2ODRGQjAwRDU4M0ZDMUQ1MkRGCi06MTBCNzMwMDBCMjcxOTAzQTM3QzI0NTgxRjY1NzEwMjlENzdBNEU5NkEyCi06MTBCNzQwMDA3M0I5QjY1MjlDN0Y5NTM4MjU4QzU3RDlDMzRBRDEzRUUwCi06MTBCNzUwMDA0RjU4QjdGNkUwMzY5NDczOUEwMzM1MEE3ODdGQTkxNEU4Ci06MTBCNzYwMDBENzA3RjU5QTgzOUU5NzM0QzQxQkQwQjM0MUVFM0M1RjU0Ci06MTBCNzcwMDBGMjg3QjcxRjgxN0VERDgzNTZCRjAzQzZFRDBFM0NDQjNCCi06MTBCNzgwMDA1MEVGN0U2NzNBRjNFM0E2QkJCMDIxQUNBRjNFRTQ1RTc4Ci06MTBCNzkwMDA2NEY3MjJERjBDOUNFQTlBQzJEOEQ5NzYzNjU4NjYxQjI5Ci06MTBCN0EwMDBCRURFQzEyMzA5NzYyRjZDMzYxNDRFOTlGOTM0OENEMzQyCi06MTBCN0IwMDA1M0UwNzBBMzNFRjdDNjI2QUIxREYxMzRCOEI5MjE4QzE3Ci06MTBCN0MwMDBDMDM4OUQxNkVFNTdFMDdEOEYxQTYyNjhERkRCMzc3NTUzCi06MTBCN0QwMDAyRTQyQkUzQjZEMEJGQkM3QzFCMzY3NzNGODJFQjQ0MzVCCi06MTBCN0UwMDAzNDZGNDU3OTI2QUNGRjYwOEY1QTFFODk3MzNFNkZDODRGCi06MTBCN0YwMDA1MTg4REY1RTdCRkVEM0I0RkY2MzY5NzY3RjAyOEMzQkFBCi06MTBCODAwMDA4NEZFMERDMERGMzFEQkNFMEMzRjhFREJGMTk1MEMxQ0NFCi06MTBCODEwMDBGRkQ4QkFBREZFMjNCMEFFNjMxRDBFQjRBNEQ4QjFERDFGCi06MTBCODIwMDBDRTVBMUNGNzU4NzFCMzY3QkQ2RTdDRTc0REY2NTY3QzU3Ci06MTBCODMwMDAzRjc4QTNERDlFNERGQkI5OUNFQ0MxRkQ2Q0NBMUQ4RjBBCi06MTBCODQwMDBCNEQ5OUQ2NjlGQjQxNkVCRDczNzMzRENBRkREQjNEM0U1Ci06MTBCODUwMDA4NkZCNzNBQTZDMTc5RTJGOUZGMDVDN0E3NTJFREE0QkNECi06MTBCODYwMDA1RUNCOUM0RjQxRkJDRkZCNDNCN0U2MDAxRTU3QjY5RDE2Ci06MTBCODcwMDA1RDg0NzJDOTVFOTZCMjA1OUZERDYyOURGMkJDOTJGODRFCi06MTBCODgwMDAxRDRBNkI3NEUyMzlENkREQjQ5NkZCNjEzQzk2MDZDMjY0Ci06MTBCODkwMDA2MzlBMjU4OEU3NTE3NzYwOUQ3M0VBNzRGRUJFNzlDQzgwCi06MTBCOEEwMDA3MEI4NzRBM0RGNjUxNkFFNzNCRDY3RkQwQzZDRjdCQjkzCi06MTBCOEIwMDBGNjEwQjQxQjJBNzZENEM2ODM2MzYzMEU5NzYzQ0VDRThDCi06MTBCOEMwMDBFNkFDMzY1ODc3Rjc2RUE3MUJFMUQzQUQ4NDc2MzUwMDJBCi06MTBCOEQwMDA1Q0MzOTkyRUZGNjNERUUxRkRCRTI1RkE0OUZBMDAzQzA4Ci06MTBCOEUwMDAxMTFGNkUzODdDQzNFRUIwOEFGQTJBQzcyM0MwQzU2OTFGCi06MTBCOEYwMDBEM0M5Q0Q0M0IzNEE5QjExMUU1MTc4OUJFNzRERUIyNjJDCi06MTBCOTAwMDA3OUQxQUQ3MEJFRkVENkUxNTlCQkMzNTA5RUU5MEZEREMzCi06MTBCOTEwMDA4REZEOEVGNTAwQUZDREEyN0Q0RTQyN0Q3RjI0RkUxOUI4Ci06MTBCOTIwMDAxMkY1REQxREIwRUYzOEZDM0ZENDY0NjUzNzhGRTVDRkVECi06MTBCOTMwMDAxQkUwMzk3NUIzNzU5MjEyMDczRTQzQzU2QkIzRDA0RjA4Ci06MTBCOTQwMDA3NTBDRUEyRDMwQ0VEMDZFMjc3RkMyRkIyQ0E0QUYxMTMwCi06MTBCOTUwMDBFODczNTYwRTk3RjdCRTk5QzEyRDM5Njg3RjRERjc5MzVFCi06MTBCOTYwMDA5RkVGRTVEOUMxQUQzOUE0MDdCNDdBQjBGQzMxQTBERkFGCi06MTBCOTcwMDA3RDFGMTFGQTY1RUM0NkE0RDdFOUJCQzM2MDkyMzJGNzhDCi06MTBCOTgwMDAzODgzREUzQUQyRjkxOTY0NDMyQTlFQzcxRDI1N0Y2OEExCi06MTBCOTkwMDA0MTdCQTA3Nzg2RERFQkQwRjkwNUE1MUVCREM0QzdFNUM4Ci06MTBCOUEwMDA1QjcwQ0E4NTNDMzhCOTU5RjVGNEY1NjRERjgwQkU0QzRDCi06MTBCOUIwMDBGRTQxMzdGQ0M2RjMwRjA2RDExRkE4OTM4NzRCNEM2NTk5Ci06MTBCOUMwMDBBOTlGQkU5NDAzNzIxMUNGN0RBMTI3QTc3Qjc3MDYxNzhECi06MTBCOUQwMDBBMEZERjE4QUQ1MUYwMUI4NjU2MDA3Mjg1NzU1MjgxMUM5Ci06MTBCOUUwMDBENEQ3M0I0QTlFMjAzRDlFMDkzRDZFODk1OEU3NEZEQkU4Ci06MTBCOUYwMDA5REFDNkMwQThCREE3MzJCQzVGQkE0OTZCMzhGQTI3RDJBCi06MTBCQTAwMDA5RDg0RkU0RkY0RDdCNjM4QkNFNDdGNDFFNEMzRkNENTM3Ci06MTBCQTEwMDA2MjdGRDJBRTIzM0QxMkY2QjNCMjQ1Rjg0MUQ5ODM1Q0MyCi06MTBCQTIwMDBERTU4MDNGOTQ4MEZCMDBGODM1RDEyNjQyNjNCQTRDOUFBCi06MTBCQTMwMDA2NkIwRTc1Njk5RjQwN0IzREQ1MDZERDIxQjc2QTBFRUUxCi06MTBCQTQwMDA4NDdBQTFEQUVGNDQ3QTdBNzc3QUNFQjEyQzJGNTU4N0FGCi06MTBCQTUwMDAwN0E0N0UwRkVENDIwNTI3QjYwQ0U5Q0U5RjEzNDJGRUU4Ci06MTBCQTYwMDBGQ0I4NUQzQjhERjI2ODRCRjAxMUU3MTBGQUFERDU4ODVDCi06MTBCQTcwMDAxM0U1NDk2RkY5RTc5MjkxRUU3QUVCQUNFNTQ4NkY4M0Y1Ci06MTBCQTgwMDBFREU1RDRFRUI1RjYyMDNEQUYwOEI5NTFFMUQ3N0U0RkQ0Ci06MTBCQTkwMDA3QzI5RjRCM0VBRjJEMkQzNUQzQUJDNTY2OUI3OURFRTg1Ci06MTBCQUEwMDBEMkFEQkZCMkEwQ0E1MDk2RjQ1NTY5NjVBREZENzFDRTU2Ci06MTBCQUIwMDA5NzU5QjlEMkVGQTIzMTgzM0U2QTNERTQwRkM1MzkyRkMxCi06MTBCQUMwMDBFNDMzOTFBOUVGRUFFMTk4OUMyQkU4NDZFODUzRjc0RjVECi06MTBCQUQwMDA1RjMwNzYzNDdENDZFRTUzQzI0N0VFNUZENjhGQjRERURDCi06MTBCQUUwMDBERkU1NUM5RkY1NjZCRkNGRjU5QUQ3MTlDNUQzMDhFREEyCi06MTBCQUYwMDAyQkYxMTA4MzczRTA3Nzg3M0I1NkEyNUNBOEYwODc3MjI2Ci06MTBCQjAwMDA3MzAxMEZENTY1Q0E5NkYxNDAyNzNGMTZGRUNBMUYwNzdECi06MTBCQjEwMDA5MjIzNjE1OENGOEIzRUVFRkY0QzZDRTE3NjY1NjI1OTAzCi06MTBCQjIwMDBENTIyM0M5RkRFMkZCRUVGMkM1MDg4M0Y2QjAyNEE0NDRCCi06MTBCQjMwMDA4MzdGREUyQUVDRDU5RkZBMThDNTFGODA1RjVGNEQ4Njk0Ci06MTBCQjQwMDBGMkVCQzUzNkVFNDc2NjVBQzUxRDczNjI3NjZBNjIxRDEyCi06MTBCQjUwMDA4RjRGRUNCMDMzRkYwMEY2OUJFNkYyNkY4NkY3Q0IyNUY0Ci06MTBCQjYwMDBGRkQ1MUFFMzEwMzUzNTM2QzMzOTUzNjk4QTNCMjQ5QTE5Ci06MTBCQjcwMDBDRTk5QTUxMkVFNzMwMEVFRDkzMUI4OEY2NDdGOEM0NDU0Ci06MTBCQjgwMDAyNzRDQkQ5NDg3N0UzMTMzN0MzNjlBRTA2M0I2NzcyQUEyCi06MTBCQjkwMDA5RjMzRjFDNzM1REEzRDA3N0JGMjVFOUM4MDdBNDY5OTg4Ci06MTBCQkEwMDBFMjlGODJGOEMzMkFFODk3QTgzRDQ5RTE5MDVFQzk0NzIxCi06MTBCQkIwMDBDMkRFOTNGMUFBMUQ0QkFCQzlERTdCMERGNTgxQjExNDNBCi06MTBCQkMwMDA2RjlBODRGRTZBMzlCRUI0RjM2NkZBQjVGQjcyNTM0N0M2Ci06MTBCQkQwMDA1RUM3MDlEMTZGNkI1NTdDM0RFMTA0RUEwOUIzRjhGMzA4Ci06MTBCQkUwMDAwNjc4NEU1REJBMzAyMzlFOUU3MEEyNTBFODA5NTA4RkIxCi06MTBCQkYwMDBGQUMxODlEREU1RkM1OTY4RDQxMzU4NzlFRTU1RTBEMkQ1Ci06MTBCQzAwMDA0MUZCNEQ5ODkyMzczNjFFREYxRDlCMTU3QTMwNTcwNzQyCi06MTBCQzEwMDBGNzI0NUYyQjJCRDNDMTdERkQ2Q0VEQ0JCOERGMkFFMTgwCi06MTBCQzIwMDA4NzkwRjM4MTdDM0ZBQUQ3QzNDQ0YzM0Q5NUUzMTZGNjBBCi06MTBCQzMwMDBDNjc4OTIxN0YyNzkzNUZDQTlFRTU2ODY3NDc2QkY0RDE4Ci06MTBCQzQwMDBBQjQ1N0RDRkVDNEYzQTlDQ0JGNUM0OUUyQ0FEMDVFQkJDCi06MTBCQzUwMDA5OTJCRTcyQUUzNzY0ODdGQjU2RkY2NDQxRTdFMjBCRjE2Ci06MTBCQzYwMDA4RkM5MUU5NEY2RDMwMUFDQ0M4RkQ5ODVBQTlCREI4NUY2Ci06MTBCQzcwMDA4OUU5OTc4RUJBQTFBQTM5MzdGNDBDQzJBM0Y4NTIyNEU1Ci06MTBCQzgwMDA2QzAxQkU3MzU0MjhBNDNGMzlEMjE5RTkzREQ3NkM4N0EzCi06MTBCQzkwMDA1RDYzQkIxRTY0NkFBMEU3QUQ4RERDMUY1RjNBNUJBNUU4Ci06MTBCQ0EwMDA3MjYyQzg3QTkwQ0UwNTkzMUYyNzUxQkI0Qzc2RDgxMjhBCi06MTBCQ0IwMDBEMDAzODRERjg2RjRBOTUzNDI5RjBBQjI1NkIyRjc1Q0UwCi06MTBCQ0MwMDBCNjg4MTNGRDE1NjZCRjRENkRCQTY1NjAyQUM4RjVEQUYyCi06MTBCQ0QwMDA4MjRCMzVERTk5RDRERkUwRjdBOUY1NjYxRDREMTVGNUU5Ci06MTBCQ0UwMDA2RTc4MkUwOTcyM0ZEMDcyRjQwM0UxRjgzNTkxOUUyQ0U0Ci06MTBCQ0YwMDA4Q0MzRjk1NUJGQzZCODlEODdGQUM1OEFCNTVGOThGMTYwCi06MTBCRDAwMDAzNUVGRjVGMzAzNDlGRjkyRDQxN0E1M0UwM0YyQTU2NzdCCi06MTBCRDEwMDAzQ0UyNjVBMUUyMjVEQkRGRTQyNzMyRkI4NUE0NUZDNkI4Ci06MTBCRDIwMDBFQzNGMzJGQjhCREVDQkNEMjQ3QzQ4RkQ0QkZBN0Y3RTkzCi06MTBCRDMwMDA5RjZCRDRDM0ZFMEJEODAzREJGNTE2QzI5MTBBRkNERDYyCi06MTBCRDQwMDA2QjYzMTkzQkE3NzNGRjBFRUE0QkM3NEE3RkUwNDZGREMyCi06MTBCRDUwMDBFMkJGNENGREFFRjU3Q0VCODY3M0U4M0M5RUFCMkYyNDM2Ci06MTBCRDYwMDBEODUwREYwRTdBNDJFNDRGNUNBMjE4RjkyNDJENEZGODI4Ci06MTBCRDcwMDAxQkYzNUM3QzFFMTE0N0VFNkU2RjkzRkRDMzI4NkY4MjMwCi06MTBCRDgwMDBFOUY2NDg4MjEyMUI4NzE1RTQ1RjEzM0Y4RDlEQURBNTMwCi06MTBCRDkwMDBFNkU1OTMzRDcyNDMxRUQyQjMxRkVDOTExOTY4OEYwOEZDCi06MTBCREEwMDBCRTJGNDhBNUZEMzAyRDk1OUREN0M3OERDNUJBQTNFQkY1Ci06MTBCREIwMDA3MDgyREQzMkUzRkRDRjNGMjE4RjE5RTZCOTFBREM3NkMwCi06MTBCREMwMDA5NDE0MzlFREU4OEYwMDFDNUIzOTVEQjlBM0ZFRkIyQ0EwCi06MTBCREQwMDBGNEVCNkNGMEVBRjU4QTdBOEM1QkU0QTJERUM5RTMxQTM0Ci06MTBCREUwMDBGMkJEQ0U3RkFFMjJGRDI2QTY4N0I0NjA5QzczRjVDRTUxCi06MTBCREYwMDBCQzY4OUM4Q0UyQTc1MUZGQkI4RjUxQkM0ODhFQTMzMjFDCi06MTBCRTAwMDA0RjA3RjEwMUYyQUE1QzhGMzU4RTlGNUVBQ0I3NDlGMDA3Ci06MTBCRTEwMDAwMTAwRENFOTAwOTI1OUJCRDNDQTc4NUUwMkU3MTMxOTJFCi06MTBCRTIwMDA4RjUwMEI4M0U1OTlCMERGQjVEQjE0OEExQkIzNzBFRDNGCi06MTBCRTMwMDA1MUQ0RUZENzg5N0FCQkYwQkY5OUUzNDhFQjQ0MUM4NjE1Ci06MTBCRTQwMDA1OTM3OTA5RUQ2RjQ5MDMxQkVENkQ4NjcyQzlCRjU3MkE4Ci06MTBCRTUwMDBFOUVGNTc2MTkxQjhFRTdGNDAzQzcxMzg0NEFDQTNDMzIxCi06MTBCRTYwMDBFMTAwRURGMzZGMTQwRTkyMEUyQjcyM0ZFQkMxQkM5NjA2Ci06MTBCRTcwMDBFRTg0RDBBRTA2OEM2QkVGNzU5MjNGODQ2QzQ4RTQ5N0VECi06MTBCRTgwMDAwMUY4ODVGRDZDREI1M0YwMDhFRTY3NUI5RTk1RTBENzBCCi06MTBCRTkwMDBBREYwM0M5N0EzNjk1RjczMEVFOUU4NkQ5QkUwRjM1QjNGCi06MTBCRUEwMDBGMkJDRENFRjgyRTcxMjg4NDQ5NjNFODFGODQ4RTZCNUEyCi06MTBCRUIwMDAxQzRCRTM3QUE1M0RDMEY1QzY0MzkzOEYyQ0U1NzE1NzIzCi06MTBCRUMwMDA5RURGRTIwQkM0RjI1QjRBMDEzRTMzMDQ3QzdDNTM5QTUyCi06MTBCRUQwMDBGQzAzRjA5QzExNjgyNjc4NEM3RkRBNjhBRkRFRUUzMzA1Ci06MTBCRUUwMDBFQTk1M0VCM0JENkEyQUVGQ0Q4QjlGRDcxMjhCQjMwOTdCCi06MTBCRUYwMDBCRkJCNThCRjk5QUZCRUQ5Q0VFMzJENEY4MEREOEFDRkVGCi06MTBCRjAwMDA0M0VENkU3QTdFQUJERDQzQ0ZGRTc2MkZFOTY5ODdEQkFBCi06MTBCRjEwMDA3REY0OTQ3MEJGREYxNkFDQzdCODk2RjQ0MzRBRkZGOEJGCi06MTBCRjIwMDBGN0YzQjhGREM2MDI3QzFEOTU2MjJGOEJBQ0U5QzkwOEZBCi06MTBCRjMwMDBFN0UzMDFBRTE3OEU3NEJFNTQ5NzFCRkRBMENCODJDNkZCCi06MTBCRjQwMDBGOERFOEE1QTYzN0NFRkVFOTlEQTczNzg1RTI2Q0RGNEQ4Ci06MTBCRjUwMDBEODQyQkE3OEQ0M0FCMUZGMUQ1RkUzRjEyNjM5RkVGMTM5Ci06MTBCRjYwMDA3RkU0Nzg5N0U1OEI2MkZGQUYwQUJBNDgzQTkyNjZGM0FFCi06MTBCRjcwMDAwMkIyQUExRUFBQkExNUZERjZDQzlENzM0REZBRTA0OThECi06MTBCRjgwMDBDMTk3NDk5QkREMzZGNDBCNTUwREFDQjRFMzM4RUI3NjI1Ci06MTBCRjkwMDBDMTM4QUU2QjFGNjc2QkM2QzQwQzYzN0NFMUVFM0JCMTZFCi06MTBCRkEwMDBGRkYxNjg3QzYxRTM5REE1NTA3RjVDQzQxN0RFN0VCQTFCCi06MTBCRkIwMDBGNUVCNjExN0QyQUJGNjczOTQxRkQ2M0NFRDBDQzJFM0UwCi06MTBCRkMwMDA2RDcxOUU0Mzc5MDhERkNCMzJGQ0JDOUMzMjcxNTQzRkNCCi06MTBCRkQwMDBGRURCNzlGOUMzRkRGOEQ2ODU0QTZCQkNCQzk2Q0I3OUZDCi06MTBCRkUwMDA1MTNGREFBRjQ5NkUzOUEzN0VCNDRCQkNDQ0U1OTE5QTkwCi06MTBCRkYwMDBDRkU3RUZGQzI5NkJDMTcxM0E5RjY1MkQ4N0UzRThGMzJBCi06MTBDMDAwMDA3RkNDNTNFNDc4RUZFNTkxRkQyRkU1NjBGMDBGRjFDNkFBCi06MTBDMDEwMDBCMzNBQUEyNjIxQkMyRkRBNzg1RThDNzkzQzM1REYyRTI0Ci06MTBDMDIwMDBDN0IzRTQ2M0ZGRjRFOEZBRDQ3Q0RENzgzQjAwMDY4MzExCi06MTBDMDMwMDA4ODI3RDU5RDRDNzE0RDc2MTdDNTNGMjUxRDI1RDVCQjRECi06MTBDMDQwMDBFRkMwQkMwNTMwMkMxOTlFMkY0OURGNzFERjkxODc3RTMwCi06MTBDMDUwMDA5QzlGNjRGQjFGNjMyM0UzRjUxNzgyQkVERTEyRkM3NTExCi06MTBDMDYwMDAxMUY5MEJGOEU4QkNFMEFGQjNDODVGRjAzQzIzRjhFQjg0Ci06MTBDMDcwMDA2N0VEN0UyQUZGQjRCRDgwQ0FBN0RBMzUyQUZGQTRCRENBCi06MTBDMDgwMDA5QzlFMjdEQTgzRjRGRUM3RURCNTU0RUU2RTBGRDFGMzE0Ci06MTBDMDkwMDA3OEQ5MjNCN0UyQjlGM0RCNkYyQTI0OEY0NzVBQ0Y2N0U5Ci06MTBDMEEwMDAxRUI1MUFGOEE3NjU0RjkyODFERkQ2M0YzNERFNTA2RTc5Ci06MTBDMEIwMDBFQTMzQzZDRjFCQkJCMjBERTUzNTZEQzZGOEY5RUE1NkJCCi06MTBDMEMwMDA2M0ZDN0M1NUNCM0NDMzdDMkI0MzBCNERGQzdDQkI4OTc4Ci06MTBDMEQwMDBERkFCMEQ2NTJEOUZFQjg5RDVFNUFCMENGRDFDOUU0NkI2Ci06MTBDMEUwMDA0M0JCQTRBNTJDMTQwRkZGRTVGOTlDM0U4Rjk0MTQ4RDNGCi06MTBDMEYwMDAxRDFBQzVDRjYxNkZCQkZERTdBODlGNDRDQjZBODhBMTFECi06MTBDMTAwMDAzRTZGNkY1QjQyRUZFRjRGRTBFNzlEQjk1RjdEM0UzRkQzCi06MTBDMTEwMDBFRkJBQ0I5QTgyMEIxOEVBNDU4QkFEN0FCREU3RDNCMzYxCi06MTBDMTIwMDA0MjRCRjM3NUY2QTBEREMzRURCMTc3MjZENzU4M0Q0MEZECi06MTBDMTMwMDA0NzRCQ0IyRUJGNzgwM0QwNTE2ODkwOTFEREEzODFCQUQ1Ci06MTBDMTQwMDBFNzAxM0RCOEEwRjVDMTg1Mzc0MEI5MjY3QzhGQzE3RTk3Ci06MTBDMTUwMDAyQzZBNzlGMjA1NjA1RjE2MjgzQkRFMzkwMUZBRkI2NzJECi06MTBDMTYwMDA4N0VBNzFGQzEyQ0ZBNTE3QjBGRjgyOEFEOTJBOTJGNTBGCi06MTBDMTcwMDBGRDI5OENGNEQxOEIxOUY2QzhDMTM4RjQ3MDZGQkU2MkZBCi06MTBDMTgwMDA4ODVGQkRERjczREExQ0E3Q0ZGMkIxNTJGNDIzNjdGOUUxCi06MTBDMTkwMDAyRTk1QTI1QzgzQjI4NkYxQUY0M0IzNDJGNzIyOUZDMUQyCi06MTBDMUEwMDA3QjBERTVFNEZEMzNENjY3RTE3OTMyNTJEQ0U4NkIwMkMyCi06MTBDMUIwMDA1RkQyOUYyMEQ3QjVBMzg0QUZFN0I4ODgyRjBDOTlFMjUwCi06MTBDMUMwMDAwQjNBN0ZDMjNGRTU4RkUyNEZCODI4RkEwRDdEMzVCRUFFCi06MTBDMUQwMDAzRkUxQTI4ODNCNUM5NDcxODdBRjU1Qzc4RDNCNUM1Q0E3Ci06MTBDMUUwMDAyNEZDMDk1MDhGN0U4NDhCQkI2QkY5NzNEMUU4NzEwN0Y3Ci06MTBDMUYwMDBCOTNGMzg4RjFFQTJGMzI3MUE3NzEwN0FCRUYwOUIxRjIzCi06MTBDMjAwMDA5QkE1RkQzM0Q2QUY5RkFERURDMkU3NkY2NjY4QkIxMTRFCi06MTBDMjEwMDBDRkM3NzVGMTRGRjc0NDVERkNCM0VDMDc4NkY4RTc1M0UxCi06MTBDMjIwMDAzOUExMDNGOTNDNkVDREQwQUVFQTBDQjNBMTg0NkM4QzdECi06MTBDMjMwMDBDNzA2MzdDNkEzRTNGRjlEMkZGNUVCODEzRjJCM0VBQjJGCi06MTBDMjQwMDA4QkEzNUFBRTdDOTI1RDczMUNFMDlBREIxNUYwQkMxNDk0Ci06MTBDMjUwMDBCMzdFOTM4NDEwMTkxN0QzRkI5RUM4MEIxRDQxNzg3NUNDCi06MTBDMjYwMDBBNTdDQzdDQkYzQUYyQ0IxRjMwMzg1REYwOEZBOTA3OTM3Ci06MTBDMjcwMDAzRTM5MUVDQTJCOTQ1QjI3ODA2M0YwOUNEOTlFNzJBOTFECi06MTBDMjgwMDAwRUVEOTQ0MTAxMzdGM0YzREZGM0REMDI5RUVFMDk4OEYyCi06MTBDMjkwMDBERjI3RjI4MjNGMjY3QzNGRERFRkE1QkMzNkYxRkU1QTU4Ci06MTBDMkEwMDBEN0YxQjgzREY4NzNENDYzQkIxQkFEREU4MzVDNkYyNzU5Ci06MTBDMkIwMDBCRkM1Q0Q4MTk0NDhBRjJFMUVGQzZCM0MyRkYzRDFGRjQwCi06MTBDMkMwMDAzODM0RDkwRUY4RUUwQ0JERTBDMjdDRjAzN0Y2QTg5OEYxCi06MTBDMkQwMDAxMUMzQkU5MTFDQjYyMUZFNkI3REZDN0M1QkUwMDk3RDI5Ci06MTBDMkUwMDA2MjY4MTQzRTA3N0ExODZGRjFEMDNBMkM5NjAyM0UyQjAyCi06MTBDMkYwMDA3Rjg2MTU3QzlBREIwRkVFNzkzN0Q1MEJFMzdENjMyRkI0Ci06MTBDMzAwMDA4RjdGRERCQ0I3QzlEOUE4MUIzRjZCMEUzRjc3QkE5MUIxCi06MTBDMzEwMDA2NkYyMzAzRUE5NDQzMDUxQkQzNjcwRjlENUI5MTg1Rjg4Ci06MTBDMzIwMDBGMTVBQzhDRkYxQzZBNkRGOUU1QzgxN0U0N0NENEE3RTFBCi06MTBDMzMwMDBDNzM3MzZCRDQzRTU1MzVFNEIyRUEyRUYwRENGNkY0RTkwCi06MTBDMzQwMDA2MkZCOUJGRjcxREQ0NDZFQjc3MDc4QUNEOTk0RkI3OENCCi06MTBDMzUwMDA2RjI2QzVDNTk0MzkwMDg3NTNEQTNCQzlEOUQzNjNGMTM5Ci06MTBDMzYwMDBCMzM1MEEwQkM2RDM2M0QyRTY3MEJDMkRENjVBRUZDNEUwCi06MTBDMzcwMDA3NTJEMEUzOTE4RTYzOTlGNkFEOEZBNzMyQzdGQTM1NEFECi06MTBDMzgwMDBGMTVBRDFBRUY3RjE3OTZBRjdBODk0NEYwQkYwRDk4MDQyCi06MTBDMzkwMDBFNTU3RkM0OTBDRTc1RDEwN0E1MkM1RjZCRjlCQTFCMDhBCi06MTBDM0EwMDAxQjk0RUIwODU3RUQ5RDU0RTRDMzM3OTBGRUUyQUNGRkJECi06MTBDM0IwMDBEN0YyREMxNDdDMzQ1NTA1QkVDRjQxRjgxRjc1RTlGRDdBCi06MTBDM0MwMDA5NDkyOUVCRTk0QTc2NUNGMjFCRjVGQTgyNTQ4N0FFRUMwCi06MTBDM0QwMDBEMkFCRThBNzlCNzk5RUY2MzcyRkE5MTg3QjQ4N0NCNDhGCi06MTBDM0UwMDBGNTQ2RjQyRjBENUJFNzA4RUJDQjlCQzNFNUU0NkYwNDQ4Ci06MTBDM0YwMDA1RkRDQkM1NzdERjUzNkE0RTc0RDM2Q0E0M0I4MjUyRjIwCi06MTBDNDAwMDAzODA3RjExNUI1QjdBRUYzQjkyMUYzRDcwNjBCRjg3REIwCi06MTBDNDEwMDAwNDUwQTc2OTFFNThBRjRGODU3NTI0Mjg4OUZFMzBFNzYwCi06MTBDNDIwMDAyQkYyQ0YzOUM1RjkwN0VEQjRCMUQwNkUwREVCMUY0MDNCCi06MTBDNDMwMDAzRjFGNTNCNTlENTZGNDFGMTZEQUM4M0U1RUIxREE5NjFCCi06MTBDNDQwMDA4Qzc4ODlDNUNCRkMwNjdCQzNGQzNDOEZGMTMxQ0FEMzA5Ci06MTBDNDUwMDA3MEQyNzMxMEVDNkM4Qzk3RTAwRjY4RTI1MEE5MEFCREEzCi06MTBDNDYwMDA3RkM2QzMxQUZDRjM3MTkxNTc3QTZGQzE2RDBGODcwM0IyCi06MTBDNDcwMDA2MDY3NTg3ODc5NURDMTZEMzc2RDg2MkQ5RDlGRDQ3QTQwCi06MTBDNDgwMDA3MjE5RUNBQkY3NDFDNURGRTFDNUU3ODE1RDhENzhCRjdGCi06MTBDNDkwMDBBMjRERjE5NzQzRDNGQTgxNjlGNTE4NjI2Q0VFNzE5MDYxCi06MTBDNEEwMDA4RTdGNkVEQjE3NkU0NTdBN0RDN0MzREM0OENGMkJEMkZCCi06MTBDNEIwMDAzODNEQUYzREMxMjIxNjI4N0ZBQUVGNDE4QTdCMDY0RjQ3Ci06MTBDNEMwMDBBODk0QjcyNkUzQjI2N0QyNzg1Q0Y2Q0JFRDAzQjQ2RURFCi06MTBDNEQwMDBCNDZCMTdDREUxMjYzNkZFOENGM0MzM0FEMDhGNUFBNjQzCi06MTBDNEUwMDA1MkJDNzQzQzczNzdFM0Y5OTJBODY1OTY3MjdEREE2RDVECi06MTBDNEYwMDBBNzM4NEYwNTYzNUY0NzNGNEYxQkI3OUIwQjQ1NUVBNEIzCi06MTBDNTAwMDA4QzYzQjEwQkRDQkU2RDgxNUY5NDI3RTNDQjhERjY3MTNDCi06MTBDNTEwMDBCRUM5RkU5NUYyQ0QxQzZGMDFGQTBGRTNGQjhFMzk0NkMyCi06MTBDNTIwMDBGQjc4MjRCRkJEN0MzRTBEN0EwNEVFRUYzQjIyOEVGQkYwCi06MTBDNTMwMDA1REQwRDczMTlFRjkyQ0U4RUJGODdDMEVGNDc1N0NGRkNBCi06MTBDNTQwMDBBRkEwQUZFMzczMDBGNDc1N0MxRTAxN0QxRDlGNDc0MUQyCi06MTBDNTUwMDA1RkM3RTc0QkEwQUZFM0YzNjVEMEQ3QjFERjhGNDA1Rjk0Ci06MTBDNTYwMDBDN0U3MkJBMEFGRTNGQkE3OEJGOUY5RDczREM1MUVEOUQxCi06MTBDNTcwMDAwQ0VCRURCNkIxOUYyMTVEODU0QjQ1NUM1OEM0QzlCNjQ3Ci06MTBDNTgwMDBBNTRDQTVGM0RERjkyN0EwNzJEMEE3MDY5NUQwNjcxMEJBCi06MTBDNTkwMDAxRkUxMEMyN0I1MUI0Q0JFRjRDN0ZGQzBGMkI2NENCMjZFCi06MTBDNUEwMDA0Mzk4RUFGREVFMTBGNEVCRkE2MkE2QkYxNzhBM0Q3NkQ3Ci06MTBDNUIwMDA0NkYyRkVFQzcxRTY1NjQwOUY3OTZCOTkzMjEzRkRBODY2Ci06MTBDNUMwMDBFN0VGNTBGQUIxM0M3ODg3NDJGQUM0NTQ2NEJEOUNEODc2Ci06MTBDNUQwMDAzOTVBRjRBRUY3MjA5RTY3OURDOTRDRDBFMzIzN0JCNTUyCi06MTBDNUUwMDA3NEU4OEY2QjIzN0ExRDVCOEY3NkU5N0M4NzJDQkJFQTFFCi06MTBDNUYwMDAzNUEwQ0ZDNjM2NDVEOEE5RUU3RDQ4QkZEQjE0RDkzRjVDCi06MTBDNjAwMDA2RDJGQjZFRjkyRkQ0NUY5ODQ0NUY2RkZDQzFFQjRCNzA5Ci06MTBDNjEwMDA0RjQ2RTc2QjU4ODVFMzlEQ0M5MkY1NEQ3NTU4M0UxQjEwCi06MTBDNjIwMDBDREFCMkI1RThERUQwN0EzRTNFN0VFQzVGMkY5MEMzOTM4Ci06MTBDNjMwMDBGRUZBNTU1NEI2QzlGMkUzRDRGRTdDMkE2RjdGNEI3MUUzCi06MTBDNjQwMDBFQTdFQjQ5QkFGRjc3ODlEMjE3RUZFQzEzOUE2RTlFMzZGCi06MTBDNjUwMDAzOTlCOEFBQ0U2N0M3MEYyQkJDOTM4QkYyNUM5MzVFNTg5Ci06MTBDNjYwMDA1QUZDQTVCQTM4M0ZGOTRCNjEzRTFCRjJEOUU3NEI1MzUwCi06MTBDNjcwMDAyNkExREMzRDlCRTE4RjZCQTcyQzJDMUFDMTdGQUEyOTM4Ci06MTBDNjgwMDAzQ0RGREVDRDQyOTgxRjlGMjhERTI3RjZGMTNDN0FCQkM3Ci06MTBDNjkwMDA0RjFEOTY0NzdGMkRGRTQ0OTlGNzIwRkQ4OUI1NERBMzg4Ci06MTBDNkEwMDBGQjEzNkI0QjhERkVDNDM1QTI3RTI0N0ZFMjFBOTMzRkIxCi06MTBDNkIwMDA3MUU1MjY1MzFDMjJGNEZFRkM4OTc1NkNDMDg2NzYxODQxCi06MTBDNkMwMDBEMzE0RTJBMzNBNzdGRjhCMTNEMURFQkZFMDI1N0YyMjlDCi06MTBDNkQwMDBGM0JFNENGRTU2Nzk3RjAyRkY2Rjk5ODNGN0NENzhGOTUwCi06MTBDNkUwMDBBREJCMTQwRkRBMTVCRDc3MjkxM0YxNzlFNjJFRTU0NkI3Ci06MTBDNkYwMDBFNEFGMEI3NzI5NkVFNEI3Q0I3M0Y5M0Q5OEZDQjdGRDM3Ci06MTBDNzAwMDAyRjdCRjFCQ0Y1NThGQzFDMUNDMTdGQzE1MDQ1QjAyOUUyCi06MTBDNzEwMDBDNURCMEJFMzlDQkQ0QjE5ODdGRDU3REY5NzY5NDc3QTUzCi06MTBDNzIwMDAwMEJENTNEMDIzREI4M0ZDNjI0RDUyMENFNUJDNDk5MjIzCi06MTBDNzMwMDAxRUY3M0U4Q0ZDMzE3RkJDRTQ5NzY1N0I5MDVGNEJFRDMwCi06MTBDNzQwMDBCMjdGM0I5NTU3ODYxNEQxRkVERTNEREE2NEUwQUYwNTNCCi06MTBDNzUwMDBCMkZEODQzQUFDNUY5NjJEQzdEQjRGRTNDRjRGOTJFNTM1Ci06MTBDNzYwMDBBRjEyRkZGNTQ0QzdGQjVGMzRERkVCMjgyMUE5RkMwMEMzCi06MTBDNzcwMDA4RDU3NUEyNUU1RDk3NDJBNzdEN0M5RjE1QkY3NjI1RUUwCi06MTBDNzgwMDBFQzJBOEJFQzdGMUJGMUZGNUEyNkNBQThCRkMzN0VGRkExCi06MTBDNzkwMDA5RjM4MUZENkNERkRFMzJBRTRBNzNCQTNGNTdGN0MxODg1Ci06MTBDN0EwMDBGOUFENEU5NDlCOUY3OTYyMEZENkZGQ0RFRkVGMkYzQ0YyCi06MTBDN0IwMDA5RkI5QkM5QTBEMkVCQTIxMkZDNjE3RTY3M0E1QUU5MDZECi06MTBDN0MwMDBFQjlEMDUyRDRGQTJGODYyNzVBRDA3QUNDODhGQjFCOENGCi06MTBDN0QwMDA1QTVBNEQxMEU5REI2OUE1RkNCOUEwODdERDFBMkY5RkQ1Ci06MTBDN0UwMDBGRjBGNzNGOUY5RjQ4NUI5MkU4M0JDMUUzOUJFMTY3RjhECi06MTBDN0YwMDA5Qzg2NDIzRTRFQ0YwMjE2RDdDRTNEMzQ2QkMxRTZCOTgxCi06MTBDODAwMDBGOTMxQkQwMTU1NDQzQjNDNEJFMDY5ODFFNzdCMzM0MjQ0Ci06MTBDODEwMDAzRDU4OEZCMjBCRkQzMEQyQUZCRDQ0RTQxMzc3OTQ3QzBBCi06MTBDODIwMDAzREI4MDBFRjJGMTVEQUZDQzIxRDNFQTg4RkY3QUFFMjMzCi06MTBDODMwMDA5RUVCQUEwNTNDQ0YyQkQ0RUIyMDdCQURBNjQ3RTQ5MTIxCi06MTBDODQwMDA1ODVEMTQ4RjUwNkZCMjFGQTBCODk5ODhBNzg2MzBFRjNCCi06MTBDODUwMDAzODhCRjJCQTQ2QkRERkExOUFFMkE4OUQ2MkJGQTVCM0FDCi06MTBDODYwMDBERkE1MzhGNURBNTc3OEJFQjA4QzYzRDc4Qjc1QUQ0NTQ4Ci06MTBDODcwMDBCOTBDRUI2RTZDNTIyMjE2RThENzg4ODIwN0UzQkEzRUY5Ci06MTBDODgwMDAxNkYxNjZDNkUyQ0EyQkNCRDQwMTNCREUwQjEzRjczMzlECi06MTBDODkwMDA5OEQwODdBM0YxRjAxQTZGM0ZFNkM3QTg1QTgyNUZDMzBBCi06MTBDOEEwMDA3OUQ4NDA5MEYyRTIzMDVFOTRDOUEyRjE2NzI5NDdBQTk0Ci06MTBDOEIwMDA5QTZGQjgwQkUzRDQzQUI5NDU3MUVBNDQzNjRDNkU5MDlFCi06MTBDOEMwMDA1Qzg4RTYzNTg5Mzg3QTM0M0Y0N0M4MDExOTlGNkUxMDc1Ci06MTBDOEQwMDBGQjVBMUU5NTAzMTU0QjUwQ0Y0REJDNUZDNEE5NDVGQ0I4Ci06MTBDOEUwMDA1OUM2QTlBQjRDRjdEQTFBMDMwQkM3OTAzRkQ3QUZGQTdBCi06MTBDOEYwMDAyOUFEMjZERDc4OUYyOUQxODQ4N0E5NDVGQzVFQTU4Q0NBCi06MTBDOTAwMDA1M0JGMzJENzE4NkZCRURGQzY0OEVFRjY2NDE5RTlBRUUyCi06MTBDOTEwMDBBNDg4REIzRDlGMkM5MjdFQzhDNDgxMDRENEJGOTk5MzI4Ci06MTBDOTIwMDBFQzkwNUVGNEU3OENFNUY2MDg1REU2MzJGOTc1RDRCNjc2Ci06MTBDOTMwMDA1NUU0N0ZDNDdBMDVFODUwRjFCREY0OUYyODk3QjE1Q0I3Ci06MTBDOTQwMDAwNEVENTVCQ0RGODJGODcwNTlDODFFOTVGRTFGNTQ1Mzg0Ci06MTBDOTUwMDAxNkU1OTAxRkU4REM1Q0NDMDM2OUFCQTc3MUU0N0RGNkJCCi06MTBDOTYwMDBDNzEzRTNGM0M3QUZFNzRBM0RBMURGODZFRDU2Nzk1RTEzCi06MTBDOTcwMDAzQTg1RjNGREQ5N0UyMDYxODc0NUY1MTgyRkNGN0Y0OTkxCi06MTBDOTgwMDA5REVCOTU3MTA5MUJCRkVGQzc2QzRCNjc5MEJGRTRCRDcyCi06MTBDOTkwMDBCOUU0MUZFQkY3RTIzQUU0QjlCNEVDN0I0RkQxMzk3NjU2Ci06MTBDOUEwMDBFRDcxNzBERUFGQTFGMERGNTY4NTI3OEMxQ0M3OTgxQTk5Ci06MTBDOUIwMDBFMDc4RjJDRDBDM0EzMDY0Q0UyNkM4Qjg4M0U2QzQ5MDU1Ci06MTBDOUMwMDA3ODU0Q0VFMjQ2MEEwQzcyQjZBRUU1QkY4MTlDOERFOTgyCi06MTBDOUQwMDBGRERFM0ExQ0VGRTNCNjdFQTBBNzA1ODRENzcyRUU3RjlBCi06MTBDOUUwMDBGQkI4QURGRjA3RjlEQTRBQTRDMzBGN0I5RUVGRTUwNzVBCi06MTBDOUYwMDA5QjcxOUVBRDhBNTZFQkEyN0IzMUNDQUY4QzFFMkZEQzk3Ci06MTBDQTAwMDA4OEVEQ0RGMUMyQUJGOTMxRkVFRUI3MThERDZGQjFBQkY5Ci06MTBDQTEwMDBFMEEzRTlCN0Y4MzJDMDBFQ0Y2QkUwQTc0M0M0NEYwMUUzCi06MTBDQTIwMDBDRTRGN0ZFQkU3MUZFQ0Y3NDdCOERGQUQ0QTdGMjREMTRECi06MTBDQTMwMDA3QUZERkQwNjRGRTQ4NTVFQzdGMUE3QTYzQjFCNTA5RjFDCi06MTBDQTQwMDA4MTc5QkNDODdGNTE3RjA4QUVCQkMwRTAwRkQ5RDNGMjVCCi06MTBDQTUwMDAyMUY4NDM2MDlGNkYxMTVFQ0IzODVFRkYwNkYwQTYxNDhECi06MTBDQTYwMDBFMjdFMzRBRTQ3RkMwREQyNjU0NjIxRTJCMDlGRUZFRjg3Ci06MTBDQTcwMDBBRjMwRkYwQzlBRkYxMEE3OTcyODdDODQ5RUE0ODM0RkE5Ci06MTBDQTgwMDA1RENCNUYwNzNFQTVCNEJFRUZGMkY1N0QwQ0YwQjk4MjM5Ci06MTBDQTkwMDBFOEQ1Q0ZENzdCMzVGQjdCQzM1Q0FFQjc0MkJGN0FFQTI0Ci06MTBDQUEwMDA5N0M3RTk2MEEzRDBBQkMxMkU1Rjc4ODMzNzY2OTc4RkI1Ci06MTBDQUIwMDA5REFEMzUxNkYyRjg3MzUzQTEyMUNGNTQ1Qjg3RTU1MTM0Ci06MTBDQUMwMDBFQ0U2NEYxN0E2OEU2QTM3REY4REY1MUYxN0JCNzk4RkZGCi06MTBDQUQwMDA4MDVCMkM2RTEzQTE3QjcxMjBDMTI5QkU1QzJGREFGNjFFCi06MTBDQUUwMDBCNjU1MkY5RTg2NzkzNTAwN0YyQzNCNzAzRjU2REQ3RUY0Ci06MTBDQUYwMDAzMjU0NkU2RjlCRUVBQkM5RUYxREM4N0RBOUQ2QkFCMTlCCi06MTBDQjAwMDAwM0RFMTgzQzVGMUJEMzZBQzdGQjUwQ0Q1QTRBMzdERUExCi06MTBDQjEwMDBCQjVERDg3NTk5RjIwNkVEOUFDMzhCNzZFMTI3M0NERUIyCi06MTBDQjIwMDA2RThDQ0I1NjZCN0NGRkY2MTYzN0RERUY5M0Y3RERFNEFBCi06MTBDQjMwMDAzRDk0RTY4MTY5MkZEOUYxREUxQ0Q4MkY2OTMwN0U2NURFCi06MTBDQjQwMDA5OUVEOUM3RURGMEVEM0JEMTRENTU0NkVGQjU5RTZGNkVECi06MTBDQjUwMDBBM0JBRjZERjI4NEMzNkU0Mzc4MzdFNTM0RURGRTlFODhDCi06MTBDQjYwMDA1MkRDMjJDRjk3RjIzMjlBQzUxODFEMjU3NzJFNDZGRjQ4Ci06MTBDQjcwMDAyNUU4NzE1RTg0QzNDMjlEMEYwRTYyM0NDRERFNjVBNUMzCi06MTBDQjgwMDBEOEY5RUZEQkJEREI4RjAyNEIyNUVDQjU5MkJGRTFCN0U3Ci06MTBDQjkwMDA2RDBBRkZERTQ3MDU4RkUzQUYxNTcxN0M2NkYyMzM0OEZGCi06MTBDQkEwMDA3RkI4ODQ2M0MyMDMzQ0ZGQzM1RTcwQjY4Q0VFMzdENjk5Ci06MTBDQkIwMDBBRDFCQ0NFN0I0NDNGRTA2OTVBRjhDQzlFRjZGNTQwOUFCCi06MTBDQkMwMDBCQUFBMEY1Q0VFQzI3RUNCM0QxNjQzRkU5MEQ5MUZBMUUwCi06MTBDQkQwMDAzMjczOUUzQ0NGRTM1NDM1OUVDN0E5RkE3ODlFN0MyMkRGCi06MTBDQkUwMDBEM0U4N0IxRDg5NUJBQTA5OUY1NTFBQ0ZFMzA0MjU0OTI5Ci06MTBDQkYwMDA3Qzc3OEJFM0E1MzI3MDBGRTVGOTk4RkQwODhFMDJBM0QwCi06MTBDQzAwMDAxRkMyNEM5NzY2N0M5QzM2RTFFMzMxOTVERjRGRUEzRUNDCi06MTBDQzEwMDA2MUY1ODdFMTc1Rjc0MzREM0RFODNGMEYzRjY0MjEzRkU0Ci06MTBDQzIwMDBDNjA1OTkxRjAyOEI0NDdGRkUwQTE2ODUyRkU5Q0JERENFCi06MTBDQzMwMDBBRDNDNUY0MEUyNjVDNTRFOUUzNzQyQUQwQzdFRkI3NDU1Ci06MTBDQzQwMDBBNkZGOEVDNzBBRTE1N0I4OTNGNUQzN0Q4N0Q1NkNDODg4Ci06MTBDQzUwMDA4NjdDQjAwNjVERTk1NkY0Qzc3OEU5Qjk5Njg1QjczMEE5Ci06MTBDQzYwMDA4MjVGQTgyNzEzRTY3QkFDNzVCQzFGRkREQTAzMzdEQUI5Ci06MTBDQzcwMDA1MkRFRjQ3MTNCMjI5RUZFMUE4QkQ3QUFFQzREOUQ5RjhCCi06MTBDQzgwMDBGRkVGN0VBREY3RUJEN0IyODZFOTdFQTlDNzFFOTlBMjZBCi06MTBDQzkwMDA1Q0REQUZGNTIzOEM0QkU4RkM1QTE3NzY4QUVGNkQ4ODg0Ci06MTBDQ0EwMDBGQjE2ODNCNkQ2NDkzQjVERDhDRTRCRTdFNTk4M0QyQkM2Ci06MTBDQ0IwMDAxNjIzMUQxQ0RCRkIwM0I3QjhGRkJBNjlFMkU4REY4NTZBCi06MTBDQ0MwMDBDODI5OEE5MzRGN0E3QzJFRTM3OTIwOTk0Mzc0OEZGQThFCi06MTBDQ0QwMDA4Q0NEOTg5NzFCRjUxMzA1RUNDMjJGMTM5QTU3OTQxQTE1Ci06MTBDQ0UwMDBEMzhGOTkzQjlBQzc1OTVDNDRGRTIzN0U1RjVCRkE5OUM4Ci06MTBDQ0YwMDA5QTczNDMwQkYwN0RGMTI1NDEwRjE1NEE0NDgxRkQ1NjhGCi06MTBDRDAwMDBCQTk0MTcxNTZGNkM3RTY2Q0VBM0ZGN0IzQzhDQ0IwOTYzCi06MTBDRDEwMDA4NDBGRTYzMzI1RjBCQ0RBQzE0QzU2N0IzODBFN0UyNkY0Ci06MTBDRDIwMDAxNzczMzkzQTM4M0IzRUZFNjQzREU4MjdGNzE2QTU3MjgzCi06MTBDRDMwMDBGQjY5MENGNzJCRkNDQTNFQkE1RkUxOEJGMUU4NDZFMkQ3Ci06MTBDRDQwMDBGN0QwN0NFRDRCMUNFRkJDOUM5NDEzRUFDMEY2OURBMTgwCi06MTBDRDUwMDAyMEU1RUJCQ0Q1NjdGNTc2MjBGQzA3NUE1RjJCODBGMjA3Ci06MTBDRDYwMDA5MjdGQjJCQTMxMUVGRTYxQzdGOTUyRTc2NjVFNTM5Q0VDCi06MTBDRDcwMDBFRkIyODBFRjk5Njg1RUY3QTY3QUQ0MDc3QkE1N0QyNjhGCi06MTBDRDgwMDBGNEM3NTVFMzc0NjUzODkyOEI0RUYwRjZERjdCNzZFRTkwCi06MTBDRDkwMDBCRUIwM0FCMkJFNzlGNzczNzU3QkYxRkVBREQ0MzdBMTYwCi06MTBDREEwMDBCQzFBQ0JCMjNGMEI1NzRDMkEwNTdENzY2RDhCOEMyNzc2Ci06MTBDREIwMDA1NkVDNDNGRDM2M0E1Rjc4RjkzRUI0ODcyRUQ4OENFM0MzCi06MTBDREMwMDA0QjdERjVGRjNFQkI2ODFGOEUxNzk0RjM4NzE3RUQ0MzJECi06MTBDREQwMDBGREY3QUNBOTNEN0Q5RjEyQzY3QkZERDk1MjZBREZDODI1Ci06MTBDREUwMDBFNEY4QTVCNERGQTg1RjMxQkM3MTM1RjYzRjY5OTdFNTdCCi06MTBDREYwMDBDRjUyM0VDMUY2NEMzRURFQjFFNzM2RUU0NUJGRDE0N0RECi06MTBDRTAwMDA2RDNEMUZGNkY4RUZCN0ZENDg3QUZGMTkxQkNGMUYwQ0Q5Ci06MTBDRTEwMDA4MzlFRjY1ODI2QTY1MUY2NUIzOUYzNjk3NjJCRDA3RkIwCi06MTBDRTIwMDA5MUE2RDA3OUY0NUJGNDgzNDNGRkEwQ0IyMkU4RUUxRkY4Ci06MTBDRTMwMDBGNkEyNEVCRkFBNDRFRUYzMjBFNTgxOEM0NDc3MUIwMjk0Ci06MTBDRTQwMDBDRjNDNkNGNDE3M0ZCM0NBQjA2RUI2QjExRUZCQ0I3NUM2Ci06MTBDRTUwMDA5RkMwRjZCMEVFNTUxQjNGRURDMTc1QUU5MkZFOEQ3MEQyCi06MTBDRTYwMDBFNzVFREM1Rjc3OEFFQzM3NkRERjY4RjM4NjAyREJGNzFECi06MTBDRTcwMDBFMkJDQUJBMkYzN0M4NUZBQUY0QTk0RTM3REREOThCRkI4Ci06MTBDRTgwMDAxMkRFNEZGRThGRDhCQUQ2MUJFMEY5RkM3M0ZCMDk5RTY5Ci06MTBDRTkwMDA0MTc3NjQwQjlFMEY0MTBGQTNGM0Y4Q0U5NjBFQ0FFRkI1Ci06MTBDRUEwMDA4RUYyMTE3QjIwODNGOEM4MTMyREVGMzVGMkQxN0RCNEJCCi06MTBDRUIwMDBFRUVCQkQyRTM4NEZEM0U3RTFGOUU3RTM3NkUyRjVERjlECi06MTBDRUMwMDAzNzlDOTNCOEVGM0UyRTg3MjQxREQ1Qjk2NTNGODAzRjMwCi06MTBDRUQwMDBDODkzQjU1RTM5RUVEREY1MkREM0FGQzdCQ0RDREUwREYyCi06MTBDRUUwMDBGRThBOTE3RTJCRjkwOTM4QzlDNDNGRDczNjVFQTdFQjdECi06MTBDRUYwMDA1RUNBQTM2ODA2QjkxRTJGMUY3QkUzNUM0NUZBMzM2RjM5Ci06MTBDRjAwMDAyNTc4MTY0OEZCOTk0OUJENjNGMTNDOUQ1RjhFNzlBMzU2Ci06MTBDRjEwMDA3QTQ3QzUzQzMyNDA4QzdBNDczN0U2NTlDREEyN0MyRTAxCi06MTBDRjIwMDA5MjlCMUFENDc4NzQ3OTQwMzcxN0YzRjg1QUE3Qzg5M0FDCi06MTBDRjMwMDBDQ0RCQ0NENkVCRURFREZGMzk5RkFGRTcxQkYzQjlEQ0QzCi06MTBDRjQwMDA5NERGQjczREJGNDFBMTNDQjFDRUJFRUMzMTc4REZFREZGCi06MTBDRjUwMDA1Q0JBNzczQkNBQjVDMTRDMEI3REE3RTA4Q0Y4QkVFNjQ2Ci06MTBDRjYwMDBFMDE3MUQxOUY3QzFGQjUzMTk0RTNGQ0FBQjUzMjkzQkJDCi06MTBDRjcwMDBFOTNCNkFFN0ZDNTY0MTlGREY3OTAzRjk1OUU3NTcwQzEzCi06MTBDRjgwMDBBMzVDOTE3RUMzOTZFRjc3OTExRkYwQjQ5Nzk3NzNGRkUwCi06MTBDRjkwMDBFRDk5MzdGMDFDNjMzRUYzRkRDRTAwRTkzMUY2NUJFMTFECi06MTBDRkEwMDAxOEMxQkVFMkZCOUM0NUEyQkU2QURCNTM1RkFEQzYzMTMxCi06MTBDRkIwMDA4NEZFMjJFNUE3RjlCRTI3RkVEOEY0RkE1NzhGOTVFQjM5Ci06MTBDRkMwMDA1RjFFREVDRUMzODYzQUFFNTg3MDVDNUU3NjhFRjA1RDM0Ci06MTBDRkQwMDBEODVBNzk3RkQ5QTQ0RjU1OTlFRTI3MzNGMTFENTRBOTFBCi06MTBDRkUwMDA4RjE3NEQ2OEY0QTMxRDU3QjRDMUE4MUY5REVCNzlBMUZECi06MTBDRkYwMDBBRjAwRUQ1QUJGRDU4REM3RTRFRDNFNjNCREQ0QzMxNjc3Ci06MTBEMDAwMDBGNzNDNDJGNjI4RTg4NTg2Nzk2NEZFRURFREFDQkY4QkVGCi06MTBEMDEwMDBFRTg1N0I1RjNFNkE5RDE4QjM1QjNBREQ1NUE0QTczNDZECi06MTBEMDIwMDBGQkEwMDRGQjM5RjlBNUQyRTQ3Q0Q0MEZGQUFDRjg0NTk3Ci06MTBEMDMwMDA1ODlFN0JBRkRCMDdCNEIzNTkyNkQwMzlFRDU3MTQ3RDJBCi06MTBEMDQwMDA1RUQwRTZGREM2QkMyMDVFOEVGOUUzREJGNjFCRjJFODlGCi06MTBEMDUwMDBDMjc3QUZDMTcyRDRDRkM5NTZFRTQ3M0U4QUZBQzVEODVGCi06MTBEMDYwMDA1MkFBM0ZBRjBBM0YxODZCRDg4RkU3NTlDQ0FGNzc5QUQ3Ci06MTBEMDcwMDBGODNBRUEyNzYzNEJGNjIzM0QwNUEzRTdERjBFQ0FGQjI4Ci06MTBEMDgwMDA1QkVFMTZFQjYxM0YyM0Y5RDFBOTcxNzlGMkRDRjcxMzVFCi06MTBEMDkwMDBDRUUwRjc4MURFNkY3QkUwQ0Y2Nzg5M0Y4M0ZDQkMzMzU2Ci06MTBEMEEwMDBENzE3OUQ4ODc0OEUxMTdBMURFNjhCOUJGOTNDMzlDMDg5Ci06MTBEMEIwMDBGM0VGQ0FCNEQ5NURBOTVFRUVCRjcyMDA3RUI0RDVENkQ3Ci06MTBEMEMwMDBENUU4Mzc4OEU1QUIxNEQyNzdEMkQ2OEU5MDVGNzI1QjA1Ci06MTBEMEQwMDA4MEYzRUYyQkYzNDZDRjUzNTkyQkYyNTQ0NjFBQTdBOUVFCi06MTBEMEUwMDA4NEU3MDMwQzJBRUUxQTJFOTdBRDBDRTU3MkU5ODNEOTdBCi06MTBEMEYwMDAyRThDNERDOTc2QTUyNUZDMUM3ODZGODY3NjFBQ0YxQjIxCi06MTBEMTAwMDBCMzNGRUQwMkZBRDM4OENGQjhERjYzQTlBMDFENzUyNzFFCi06MTBEMTEwMDBGRjVFQkRGQzlFQzlGOTE0OTc3RjMzQkM1RkRBMjdGQzI0Ci06MTBEMTIwMDAxNUU1N0Y5RUZGRUM1N0YzOENERjE1MUQyOUZGMjEyMEFECi06MTBEMTMwMDBENjlGNTc3MjdERjIxRjFFNEZENDM0ODRENzEwQjQ0NTRBCi06MTBEMTQwMDBGRkUwQjA3QzA4OTFFNzIwRjMyMDEyMDMzQ0VGNEVFNkFECi06MTBEMTUwMDA0Mzc0ODY1QjA5N0VEN0ZEOUU4QjM4RkY4MTRFQzcwNkUwCi06MTBEMTYwMDA5MDRFNkJCOTFDOTE3NDc2NzQ5RTk3RDNERkRCN0VBMkQwCi06MTBEMTcwMDAzRjQ5NzdEMDNFMzU4MDcyQTQ4NkI3MkY3QTlCN0ZGN0UwCi06MTBEMTgwMDA0MkVBMTdDOUNGMERFREVEOTg0QzcyRThBNjgwNUUwRTBECi06MTBEMTkwMDBCOUEyRjcyMjMzMDI3MUU0RDBGMTg1REEyNzAyM0FGQjEzCi06MTBEMUEwMDAwOEZBNjcwNzUyRTNGNjlGMTI4ODYzM0ZGQjY2MDY3RDI1Ci06MTBEMUIwMDAzNDZFRjQzRUE3MzYwRENCRkZEREYzMjA1ODlGMzlFRkQ4Ci06MTBEMUMwMDA4NDlGMTdFNkJDMTNBOTBGMzZGREVCMkY1NjYzREVDOTBCCi06MTBEMUQwMDA5NTA1NUExNUM3MTM4NzZGNTRBRjFDRTI3QTRFNEM5RkMyCi06MTBEMUUwMDBGNDczM0JFQ0ZBRUI4QjhEMzRCRkM4QTdGOTEwQzZERkE0Ci06MTBEMUYwMDBBODFGNUZFQTRGRjBGRTlFODAyRThGRTdBMzY2QkZDMTk3Ci06MTBEMjAwMDBGQUI2MDQ3NDcxOTMwRkQwRkYwMURBOUY4OEQ3RkMwNTNBCi06MTBEMjEwMDBENkZCMzBBRDU3RThGRDFGNDE3ODdFM0I5MEZBOTE1RTFBCi06MTBEMjIwMDBERjBCQjRCRTBBNzEzRUNGNjNGMkRDN0U4OURFMEZBMzUyCi06MTBEMjMwMDA4MzZCQTZGRkQ3MDJCQUI4Qjk2RURDRTNGQUY5NDZCMjNGCi06MTBEMjQwMDBDRkExREQ0RkE4N0ZDNTMwRkUzOUFEMUY3Nzk0RkU2N0IzCi06MTBEMjUwMDA2ODlFNjhCQjY4RkZCMzdBRkFCQzBFN0NGRTRCM0Q3RUNECi06MTBEMjYwMDAzRjg0NzNFNEY3QjRERkM5N0NGQzM3OEJBMjcwRkMwMzA2Ci06MTBEMjcwMDBDRDJCREVGRkRENEY3NjU1M0FGNzE2MjNCQzVBMzkzREVDCi06MTBEMjgwMDA1RDgzN0UzREI1OThGQjY3NDNEQzNGMUI5NjcwOUYyNjEwCi06MTBEMjkwMDBERTBGRTE3REQyQTVGMzM4NURERDkyMTc5QzVFOUMxRjA5Ci06MTBEMkEwMDBCMzZGQTNGNjA4N0I3ODFGQUUzNzZBOEZFMDQwRDMwRENCCi06MTBEMkIwMDA3MjdFOUZERURFNThGODJGMDdGN0UxN0FBRDBCNzlGQjFGCi06MTBEMkMwMDA4MjYyRjcxQTk0QjNFNjMyRTgyMzQ1QjQ5RjU4NUVFNkNCCi06MTBEMkQwMDAzQzJDNUY2RDVDOENGRkUzM0FDREYxN0Y1REZEQTI2MjdCCi06MTBEMkUwMDA2M0ZFMDJFOUFGQTBCNzM5MUQ4MEUzRDdFQkFDMTMxQTk4Ci06MTBEMkYwMDBBMTVDNTlDQ0Y1NTdEMDNGRTJERUVCQUUyQzhFRkExMTkzCi06MTBEMzAwMDAyQThCNzVGOTE4Mjc4MjU2QkExRjE4RDU1M0MyMDk2NDlCCi06MTBEMzEwMDA0RkM1RjRBODQzRkI4Q0Y3MzZCRTRERTUxMjgxREZDNjNFCi06MTBEMzIwMDBFMkMzRjU2MjlENzdEMjNFMjY4ODdENUNCRDdEODhEQUJBCi06MTBEMzMwMDA3Qjc4RkIzOEY1NERCNENFNzRCRTRFRTY3QUY5ODI1NTUzCi06MTBEMzQwMDAxNzBGNDM0RUIzNjA5QzE3RkYwNUU3NENBOTZENTkzMTg5Ci06MTBEMzUwMDA3RTIzRUE0ODhGRTJCNTQyQjk3MThGQzRFRkY3RjcxOTFGCi06MTBEMzYwMDBFRDQzQ0U3RjJCMDVCRDZGMkUzRTUyOEZGODVCRjlBRTlECi06MTBEMzcwMDA1Q0FGOERFQ0M1QkM2ODFFRDMxMUUyOUZEM0MyMUZFMTI4Ci06MTBEMzgwMDAyRTgxRjZFOUI0QkUzNjVBQkY5N0FGRUY0MzE4QkY4Qjc0Ci06MTBEMzkwMDBDNjY3MUMzRUI1MkM2QzlCMzg0QTlFNDU5RkMwM0ZGNDI3Ci06MTBEM0EwMDBCQjlGRkEzOUY5QkE2QTQzMEFFOUVCQzEyNkUwNjhDMEMzCi06MTBEM0IwMDA3M0ZEMDkxNkQ3Q0ZGNDk1NjJCQkVDRkYxNUVBRUYxMkE3Ci06MTBEM0MwMDA3NkFDM0ZGRTdERDlEREIxQjhDOTZFNkFFRkU2RjM1OUEwCi06MTBEM0QwMDA0MUZFMjNERTAyQTFFMzBCRjEzQjEwQjVFMjdCRTNCNTk2Ci06MTBEM0UwMDA2NTJBN0Q2RkExQjZFMEQyNTJFMTA3QTFGOEE2OEM4MzMxCi06MTBEM0YwMDA5NzNFMzA5OUUyOUI4OTY1MDlEQzVFNzQxQUZGOEU0NTgxCi06MTBENDAwMDA3MEFEODNCRTI3MjdCRjVCMkJGMzMyQUE5OEYxRkI3MjY2Ci06MTBENDEwMDA3MUUyNUIwNjdGOEJGNDhCNDRCRjI3Njc0RDI3RkJENkY5Ci06MTBENDIwMDBCRTVGRkNGRDI3RDNGN0UzMTJEQjE4RjlCNzFDNURGQ0U4Ci06MTBENDMwMDAxRUI4Mzk0RUQ1QjBBOUY1QjU0MkNDRkI1MDZEMTQ5NzQ2Ci06MTBENDQwMDAzNUM3MzNDRDdGMEY2M0JFOTM2OTYzNzIyODFGRTVGOTNCCi06MTBENDUwMDBFMkQ0NTgxRUNBNUI3QkIyNURDODg3NjZGQkY5QUQ5MTBBCi06MTBENDYwMDBFQ0U3M0Q0NkZCNzk1MERBQ0ZEQUY1QjE5RjRGMTQxQjVDCi06MTBENDcwMDBFRjBGRUNDRjBERkU4NEYwQUM2QTc0QkUxRDI5Mjk1QTYzCi06MTBENDgwMDA4QTdFODQ3NzQ0MUVDNUQ5ODcyNjJDNDE3RjU0Qjg4RjY1Ci06MTBENDkwMDBERjU3MzgyN0UyRkMzMkRFN0ZCNjkwQjlEQ0Y4RENFMkY5Ci06MTBENEEwMDAyMDc4OUU1RDk3MTJDMTIzNzg0QzU3NzMwNTdFNTc1MEE0Ci06MTBENEIwMDBEQUQxMDg3OUY0N0Y1NThBN0Q5QUVERURDNDAyQzBFNzkwCi06MTBENEMwMDAyQzYyMzNCMkIzQ0ZCQUREMTQxN0E4RUMxMURGOTcxMDdBCi06MTBENEQwMDBGOTAyRDJDRUFFMTRGN0Y4RDc5NkYxN0JENUU4QjE0Mzc2Ci06MTBENEUwMDA3QTkwREYwRkFDMTQ3NkI4QjRDNzA3N0VDODE0N0QxRURGCi06MTBENEYwMDBDMDUyRTYyN0ZBQUQwMUMyQzBFNzcyRjEzREM1NUEzNzA2Ci06MTBENTAwMDBEQjgyOEJGQUNEOENEMDFGRTk5Q0RBQzNFOTg0NkQ1NzlFCi06MTBENTEwMDBFOUVGNUM5REVEN0I5MENFRDU5MUVFMzEzODg0QkY4MUYzCi06MTBENTIwMDBFNEQ4QzQwRkM1Q0U3Nzk1RThDRThGNkIzODZGQzY1MTVGCi06MTBENTMwMDA3Qjk1RjM3MTE3REVGRjREOEQ3RDU3NDJERTlCREY5RTlECi06MTBENTQwMDBDMkZEMjgzNzk3NzAzRjkzRjkyOUJGMUJGMTdFRTUwNzhECi06MTBENTUwMDBDOENGQUMxMjg0NDdDQzlFQ0YyRUI5MzZGOTM5OERGQTlDCi06MTBENTYwMDA4OUVGNTZBNDYxMUM4ODlGNEJEMzRCQjg1RUUwMURDMzY2Ci06MTBENTcwMDA4M0I4M0RGNkQxRjMwMDcyNEI0Njg5RTdCMkFCRTcxMUIxCi06MTBENTgwMDBDQ0MzRjlDQ0ZEMkYwQjdEQTQzOTM3QTQ5NUYwNzgzRjlGCi06MTBENTkwMDBEMUFEMzlERTJGREI5RDQ0RkY1NDlDRjNGNjczMjU1QzNGCi06MTBENUEwMDA3RTk3MDI4OTVBNzI4NkRGRTc3RkJENUQzQjgzM0FERTU0Ci06MTBENUIwMDBDOUY2NzI3QTlFNTJDM0M5OThCRkY1OUFCOENGMEY4QTNFCi06MTBENUMwMDAxNkU1MzNDOUJDMjgzOTZFNkQ1REU5OTkwQkJBRjNBQzI5Ci06MTBENUQwMDA3MkQxQTM5NDY3RDZFOTNCRjhCMjAyRUIzQzI3RjJCREM3Ci06MTBENUUwMDAwNjkzQkQ3NENFODU4RkYzRUY0QjJEQUZCOUVEQ0MwNTBGCi06MTBENUYwMDBEREY5NjE1RTJGRTY0NTg1ODFENTM3OTQ3MEJGRTYwQjc2Ci06MTBENjAwMDBBNThFODFGOTc5RjhCRDI2Q0U4NzREN0Q2N0U5M0U0QzIwCi06MTBENjEwMDA3RDVCMDMwQkNEQTBCQzI5MTVGMTdCNkExRUZGRkU0MjhBCi06MTBENjIwMDA2NTgxOTU4NTc1RUIxQTNCNUI1QjU3QzJGRDNFQ0Q0NDJBCi06MTBENjMwMDBBN0IxQkNDMDE2N0M1RjZBRDNDNkUwREY5Rjk0RkU0OUU5Ci06MTBENjQwMDAxOTJGMjgyREY5MTVDNUREMDY1MzE4Q0QxRkY0QjAwODg0Ci06MTBENjUwMDBDNkREMTc2QUY3RDg4NzMwRUVFMkYxOTI3RkE0QTFDNDQ1Ci06MTBENjYwMDA0QkVCNkNFQzM5NDBFQjQ5MEM1Q0E2RjU5NEFBMDBFRjRGCi06MTBENjcwMDA3MUMzRTEyREY5QTI1QkMwNUJCNzZGODJGNzQ4RkM1QjE5Ci06MTBENjgwMDBCOTQ4NEQ0NkY4QkU4NkY4ODI3NjNEODI2RjhFQTk5N0RFCi06MTBENjkwMDA1Q0VFMzg3ODhGRjYyQjI4MzVDMERCRTEyOTM3RTBBRDFBCi06MTBENkEwMDA1M0ZCREMxOERDOEZDNDczQTNBODdCQUJDN0ZBMkFFMjU4Ci06MTBENkIwMDBGMTVEQzAyMzIzM0NDNkNGODMzODhFRjhCQTk5QjE3RjgxCi06MTBENkMwMDAyRkUxREY5OTkzRjhBQUVGRTJERkJEQUVFRjJBQTVFRkQ1Ci06MTBENkQwMDBDNUQ1MTdEQzY2NEZBMzM4ODBEMjhGRjcyNUQ3OTYzNThFCi06MTBENkUwMDAzMEQ0RjdFRDVBMEE3RERGNEVFMjZGNjkxOUUwNEZCNzhCCi06MTBENkYwMDA1RUUwQzc3RDI1M0FCREYzMDNGOEQ3MUYyN0JDMEIzRDdECi06MTBENzAwMDBGOEMzRjZGRkMzN0M0Rjk3QzREMUNCRkY1MkYxODdFMTNBCi06MTBENzEwMDBERkYzRTFFN0VFQ0Y4NERDMzAzRkU1QjkzQjYyN0UzM0Y3Ci06MTBENzIwMDA1QkIyQTZFNTAzQUM0M0YyMERGMjZEODc4MkY5OTM4QUYyCi06MTBENzMwMDAwREU5MkM4OEZDOEJGN0Q3MEE3RUIxMDVFM0ExQ0QxRTNECi06MTBENzQwMDBENjhGNjdFMTZFRTQyMzgwOUJCRDNDRDM4RUZDRDNCOEJCCi06MTBENzUwMDAyNzkzRTgwMkVEN0Y4MkE3MzhBNzVGOEU5REQzNjdFOTA0Ci06MTBENzYwMDA3RDBCQTc4QkJGNzZEQzA3RDZGMzBFQURBNzRFREMyRjYzCi06MTBENzcwMDBGODg4QzVBNTZFMkEwRjNBRTZBMzdGNTYzQjQwRjJFNTJFCi06MTBENzgwMDBFODNDQjc5NDRGMTlGQ0JCNERFRjJGMEU1QUE0RjFCQ0U3Ci06MTBENzkwMDAzMTE5MEY4RDEzRkZGNDJBMUYyMEZFNjk4RUFCOEUxNEYyCi06MTBEN0EwMDAwRjhEMTNGRjM0RThFQjIzQzUzRjk5Mjk0RTZBOEU3RjE2Ci06MTBEN0IwMDAyRUVFQzlBNkY4RjM2MjlGODVCRTUzMkRGNTdFMTlGN0FDCi06MTBEN0MwMDA3Q0E1RTcyOTk1QkU4QjM0NUQ2MTI5OTlDM0UzQTMzQjEyCi06MTBEN0QwMDA4NTdGOENBMTU2QTdEQkZGQTkwQ0ZFRkRFQkRFMzQyNzZECi06MTBEN0UwMDBGRERENTVGQ0MxN0MyQzA5NEY5MDBGNEUwN0NDREJCNUZECi06MTBEN0YwMDA4OEU3NjU1NjY1MUUzNkMzRDUyRUVDOTI2QjgyQUI4Q0RFCi06MTBEODAwMDBBRkRCN0I5NEM4NjYyNDBEMEY4QkU2RkZEOTc1NzhCNjI1Ci06MTBEODEwMDBGQkJFNDM3ODY0RUE4MDBCQkZDN0RERTgxRjRGRjk2NEE1Ci06MTBEODIwMDA2NjNDMTRGNUYwQkY0QjU5RTQ5RTQzN0Y5NzUyRTJCRjJDCi06MTBEODMwMDBDODMzM0M2RjUwOTVFQjhCOTMzN0Y4MTdDN0E3NzdCMzc2Ci06MTBEODQwMDAzMzZCMTQ3Q0NBMzhGNjQ4NzhCQzI1MkZCODExRjk0NkRBCi06MTBEODUwMDA3RUJGNDlCRTNGOTVDMUUxN0I3RTFBMTM3RkZGRDQ4ODBFCi06MTBEODYwMDA0RjgwQkY0NkY3RkE3REVDQzA2NjY1MzgzRDE0ODk3QzcxCi06MTBEODcwMDBDQzIyNUZGODFFQ0E4MzRGQUNGMDYwREMyQzBBREZGNEM4Ci06MTBEODgwMDBFRjEyN0MzQjVCQkREQkQxM0UzQTVFNjZBMzdDOTUzOEY0Ci06MTBEODkwMDBGNDQwN0ZERkY2NkFGNDMwMENFRjdEMUYwQzdGQUIwQTlCCi06MTBEOEEwMDAxRjVCOTgxOTg3M0UzRTMwNUVBRjgyNEZCQkY1NTA0RkVECi06MTBEOEIwMDA4MTM3MUU5RkJFRDA0NzdDRUFCN0JBMTFBRjEyOUYxMkM0Ci06MTBEOEMwMDBCRkMzRjFDOUY1MEI4OUVGNTNGOURBMzdFN0U3RUJGMTlECi06MTBEOEQwMDBBQzNEODE3ODhFRjE2Rjk4REIzMTJDRkU3NzZGMEU4QjJCCi06MTBEOEUwMDA3QzE2MThFNzQ5RUNGN0Q0RkNFODM4NEZFMUI4RDU5RjJGCi06MTBEOEYwMDA4OEZGRjc0RTBFOTc3MkI5NUJDN0ZBNUY5Qzg4NzZERjk4Ci06MTBEOTAwMDAwNTI2RjIzNUZEMkY3QkQxNEZEMzk2MUQzNzVGRjNFNDBCCi06MTBEOTEwMDBGRDBBRkYzQjNEMUU3NkMwMjJDRTU3OEJDRURFM0Q4QkVGCi06MTBEOTIwMDA3OTlCNjBERjlFQzZCQzRENzhGRTcwN0UyNkVEQjcxN0YyCi06MTBEOTMwMDBGMzM3Qzc4MjNFMkVGMjNCRUI3MDZDOUMwN0Y0NTk4Qzk4Ci06MTBEOTQwMDBDQjMzMzVDNEYwNUVGQTIwN0U5RjY1MTY3RTlGQTU4MzlCCi06MTBEOTUwMDBFNDZFMkMwRkUzMUQ1MzFFMDYyRjU3MDVBNEJDNzE0NTIyCi06MTBEOTYwMDAyOEVGMjYxQUZGRjQ4NDBDRjE0RjM2MzM2Mjk0NzcwNUMyCi06MTBEOTcwMDAyMTQzRkM1M0U0RTk0OEY5QjY1OTVCMTAwQTFCRTI5RkM2Ci06MTBEOTgwMDBFNTM0RkU5OTNBRDk3RTQ3QTQ3NEJBM0VGRTU5MUREMUJBCi06MTBEOTkwMDBGNEYxQ0RGMDFENTRBRThCOTY4MzU0OTY3RUU4QzcwNjA1Ci06MTBEOUEwMDAxRTA4QTExRkRBMzczM0Y0NEJDNDkzQkMzNzBGMDI0ODZCCi06MTBEOUIwMDBDM0JGNDM2Nzc1QjkwRkEyMUQwRUY2MDFEM0YyNDdENjU4Ci06MTBEOUMwMDBBQjNGMkFDRkZGMEY1MjZCQTU3RDAwODAwMDAwMDAwMDA3Ci06MTBEOUQwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkU1M0MwRDc0NTRENUJGCi06MTBEOUUwMDA5OUY3Q0Q3QkYzOTM2NDQyMjYyMUUyMDA0MTVGMDJFODgwCi06MTBEOUYwMDBENDQyMTg3RTAyMDEwOUJDRjk0OTMyQjYyMDAzMDQ4REQ1Ci06MTBEQTAwMDAwNUU5MDM3MjJDNzQ2RDFCNkNBOUI0QUI5QjgxQzQ5ODlGCi06MTBEQTEwMDAwNDg1RDBCMkRCOUY2REI3MjM0MkNGQjFEQUIzNzFFQjhGCi06MTBEQTIwMDBBOTQ0QTQxREE0NTU1QTJBQzYzNjM5NjI5NzZBQTAyOTZBCi06MTBEQTMwMDAwNzVBREJBMjk1RDVFRUU5MjlGQjdEREZCRDc3RTZDRDYwCi06MTBEQTQwMDBDQjg0QTBEMDNERjY3NDM4OUU5N0ZCRUU3N0VGRkRCRUY5Ci06MTBEQTUwMDBFRjdFRkZGNzNFOTcyRjU0MTg1QkMwRTBFNzREMUExQTkwCi06MTBEQTYwMDA2MzAzNjFGODczMDJCNkZEQTY1MUM2RDhBQUM5QjI1REI4Ci06MTBEQTcwMDA5OTM0QTYzMUI2Qjg0MEI2QUI0RDYzMjE2MzFEMkUyNjRFCi06MTBEQTgwMDBDNkIzMDQwM0Y4NTc5ODkzREFEQjhEQjA5OTk4QzI1ODVGCi06MTBEQTkwMDA2OEI5MkFFMDYzMzRGRjZCNkIyNEZDQUU2NDA4RTY1Qjc0Ci06MTBEQUEwMDBFRDEwRURDNENBQTRFMTY1RUM2MzRDQjY5NzUyN0I0RDEyCi06MTBEQUIwMDBCQTFEQTdGNjlEOENBRkJGM0ZGNUIwOTk4MEYxREY5OUY1Ci06MTBEQUMwMDAxMzlGNjA1QzAzRUZBMjNEN0E3Q0ZBREYxRkZFQTcxNTZGCi06MTBEQUQwMDA4OUNGNjQxM0ZCM0ZFOEY4MDJCRjYzNDYxNTRFQ0ZGOUM4Ci06MTBEQUUwMDBGRDc3ODBFRjVBOTI4RjAzMUNERjBGMjA3RUY3MTAzRkU3Ci06MTBEQUYwMDA5RkUwRjg3RDAwRjA2OTIzN0M3QTAwOUZDMkJGRkQ3QTI5Ci06MTBEQjAwMDAyRjU0MTlCQjcxQkRCRjAxMURERkE0N0Q5RkM2RTlCOEFECi06MTBEQjEwMDAwQ0Y4NDc4OUVFMjBERjA3N0JGRjg0OTA4RjMxRUM5RjY0Ci06MTBEQjIwMDBDM0U3N0JENTI5RTQyOEQxNjRBMkRDOUY3MjVBRjYwREE1Ci06MTBEQjMwMDBEQTBCRkFFNTdBNUJGNDkwNjZDNTdGMEJFOUM5RUExMjY1Ci06MTBEQjQwMDAzRUZFNzdBOTdCQ0Q0NDU5QTYwRDNGMDNGNzVEOEVGRkJFCi06MTBEQjUwMDAzREY2Njc4REZGM0M4REVGNzJBNkUxNjkzRDk3RTg1NzcyCi06MTBEQjYwMDAwRTZGMjM3QzMzRjQyNjA4QkVDRjA2REYyOEU4MkIzQTVECi06MTBEQjcwMDBEQzkxNEM1OEY4QzExMjBGMTI3RkQyNzYyOUYxMzBEOUJFCi06MTBEQjgwMDBBNTAxOTc2Q0VGMjBCREQ5NTlDRUU3MUY3RkY4RTEyNDlFCi06MTBEQjkwMDBFMjBGRkMzQjQ2RkM5RUMyRjlGNzhGQ0U4RjNGMTg0MjQ2Ci06MTBEQkEwMDA1RTAyOUMxRjUyMEVCRjMzQzdGODIzQ0FEOTA3MEQ1RjEwCi06MTBEQkIwMDBEODNGMzU3NDRENDZGRUZGMUZENjJCQTZGNTg0M0VCRERCCi06MTBEQkMwMDBEN0YxNjk3RDE0N0U5RjJENDlGMzc3NjIwOERFOEYwRkIwCi06MTBEQkQwMDBFQkQ0NUZCREYxQzlDOEI1RjBFNzlBRTY0NzU0MTNFNzQ3Ci06MTBEQkUwMDAwNTE4NTZDQTU4N0M5MDI1QjdDMzlBMzdCM0E0Q0FDMDQzCi06MTBEQkYwMDA4N0M1ODMyNkYzNERCM0U4MzVGQjBBRTFFMUYyM0E0NEU5Ci06MTBEQzAwMDBGQjVCNjRGRjU2MkY5MjcyN0QyMjg5RjE0NTA2NkZFRjEwCi06MTBEQzEwMDAzQURDQTczNERFRUM5QjU5NzgyRjNDRUM3RDQ0RDAxREQ4Ci06MTBEQzIwMDAwQzU5RjRFNDZBQ0ZFRjBGMDM1RjJDRjE1MEJBMkRGOEQyCi06MTBEQzMwMDBCM0ZBRDM1RjlCODQ3QzU4NUQyMUU3RkQ3NjEyRTc3OUM4Ci06MTBEQzQwMDBCNTU4Q0VGQjI0QURCQjNBQkRDRTBGNzgzQjVGQzJGRkNCCi06MTBEQzUwMDA5NEUwMzM3ODBEOTg1OTc4MjU3RTQxNzE5N0M0RUJCMUUzCi06MTBEQzYwMDBDMzAzQjQ1RjJFNUZGMjgxNzE3M0UwRDlBNDA0MTNCMEQzCi06MTBEQzcwMDAxRjFGREJCODREMzVBRDc2ODFGNUU4MjFGMDZGNzdCMDI5Ci06MTBEQzgwMDA3NDlCRTQyQTYzMDc3QTY4RERBQjhERDdFNjkwRTA4RjVBCi06MTBEQzkwMDBEMEQzMzQ5RTgzMkM5ODYwNTZGQzBFRjBGREI5Q0FFQkFECi06MTBEQ0EwMDA1QkVDQzIzRDI4Qjc1NzlGRUYyOUU3QjUxNkJFNEIzRDQ5Ci06MTBEQ0IwMDA1OEUzNEJFQkI3QzEzQ0MwNzc1RENFRjM2MzczQTNGNzdBCi06MTBEQ0MwMDBDQUQ3MDUzOTdGRDg2QTRGQUU5QzhFQkU1QUEyRTMwREUzCi06MTBEQ0QwMDBCRTJGMTlGQkYzOTI5OTZEN0YyRTFCQkY0NzQyMTY3RjEzCi06MTBEQ0UwMDBGRTlFQzc4N0IyRjVDQzYyN0YxRTQ3QkE1QkJEMjUyRTZDCi06MTBEQ0YwMDA5NEVGNzU3RTY2MjQwMUJGOEJGODVCOUM3OThFMEYyQkE5Ci06MTBERDAwMDA2NDlGRDJGQTU5Q0RDN0FGRENDNTlBN0JBNjBEODdCRkY5Ci06MTBERDEwMDAzNkVDMjBCOEQ2NjdEOEM2MUU5ODJGRTQzQURGMTRCNzgxCi06MTBERDIwMDBDMEE1NDJCQ0ZGNTA0OEExMjdEMDc3ODhGOEJGOTVFMzMzCi06MTBERDMwMDA3NzJDQTREMzdBMjFBNjMxMDM3NEFBNjFFNUE0MzI5NDg2Ci06MTBERDQwMDA4M0Q2NUZGMkY5OTgzRkM4NTYxNDY2RTYzQjJCRTY5M0ZDCi06MTBERDUwMDBFQjFDNUU1RUQ4NjhBNUUzMjc2MjlENjMyMTRFMDdGQTNGCi06MTBERDYwMDA3RkUyRTc3RDlDMEVCNUU4NkUzRkNFQUYxNkM4RkNGMkIxCi06MTBERDcwMDA3N0M0RDc3NkE3NjgyN0RFMjJCRjM2OTBCNjQzN0YyNEM0Ci06MTBERDgwMDA3OTVGRTU5NjcyRjkwRUU5QkY4Q0Q3REYwQUZENkYzMjM1Ci06MTBERDkwMDBCMTEwRjE2N0NDMzFDQjNBRUUwRjY0MDc0NzFCMzcyODNGCi06MTBEREEwMDBGRDQ1OUJEOEFGNDQ3QUJGNEUyMURFQTM4RDU3MjM0QTUxCi06MTBEREIwMDAzM0YxQzlDMzUyMEFGODBGRDVFQkRCREIwNUE0MDQyQTAzCi06MTBEREMwMDA4RDczMzhGRUU4NENFM0I3OTczMzBGRjBFOTNDRURDQkE5Ci06MTBEREQwMDBFN0IyRjMxMTRCRkZEQkExQUM3Q0UwRkNERDcxOUMwN0VCCi06MTBEREUwMDA1Njc2QzNCRUJEQjI0NjJENUQwRjdDRkIyQkVFNEYxNUE0Ci06MTBEREYwMDBFNTA3QjE1Q0YyRjVEN0NDQkVGQzM1OTQxNUNGNDcwQUU4Ci06MTBERTAwMDBBQjQwOEZEODc4NDc3MEFBM0U3QzlDMzdBQzQ4MzkxMzFBCi06MTBERTEwMDBGQkE0M0Q4Mjc0QjRBN0Y1OERCNzc3MTZGM0ZFQkNFNzdCCi06MTBERTIwMDA5Q0VCODQzRTE1ODQ3MTlEQTcwNDdGOTlBRjE0RDc2MzQyCi06MTBERTMwMDBEMzhFQTZENEI5RTA1RjU5RkE2NzM4QTBCRDFFRkY4MjIxCi06MTBERTQwMDBGNTA3MjJBNzlDMjgwNzZCM0IxNDIzOTk0M0VFODdFOTJCCi06MTBERTUwMDA0OTg3OThGRkExRjRGRThEMEY1RjQzRjM5QTZDQUVGMEYzCi06MTBERTYwMDAxRkYwMUJGOEM0MzY5QUI3QjE0OTIxRkRCM0VCQ0JFNEUwCi06MTBERTcwMDAzMEU3REZFNDcwOUE0RjkzMDk3RjQzQzhFRjlDRjg1NDcyCi06MTBERTgwMDA2QzAzMjg3M0NGQ0FDQ0JGNTZFMDFENzJDNjBGNUQwQjYyCi06MTBERTkwMDA3MkQwREVBNkU4Njg4RkQ2NkQ1REQ3NTEwRTZEQTYzOUJCCi06MTBERUEwMDA4MzUzRTE3MTAzNzIwQUM2QjVGQjJCQkM2ODA3NUUxNDhECi06MTBERUIwMDBFQkUxN0MyRUQ4NDdGNDI1RkUxMjgyNjMxQTNDRTdDNkJDCi06MTBERUMwMDAzNjFGQzFFMUVGNEUzN0FCOTA5RUVBRjhFRTA4OTJCNUVGCi06MTBERUQwMDBBMEYxQzkyM0Y4QkMxNUNDMzRDNjI5REIxNjdEM0QxRTQ0Ci06MTBERUUwMDA4NkZERUI5QkVGMENBMkE4NDE3NEQ2MzcwNUYwNkExMEIzCi06MTBERUYwMDA3ODY5NDZGRDM5MzYwNkIyMjgxNzBCQTZFNkEwNUZGNzBCCi06MTBERjAwMDAwNkI3QzNGQjg2QTY0RjJDNjE5NTAwMTM3NzBFMEQ3QURBCi06MTBERjEwMDA5MDE4OTM1REFDQzA3OUI1QTFDMTAwRTdEOTQ1QjA3MTQ3Ci06MTBERjIwMDBDQkI3M0EzMzZEQzQwREZCM0Q5OUZFOTVENzczRkJCNDY3Ci06MTBERjMwMDAzQTBDRkNCNEM4REQwRjA1N0QzRjE0RkNEQzA1MzhGNDU5Ci06MTBERjQwMDA0REEzMDkwQTE5RUEwRERCRTg0MEZFQUQxMzczRjVCNUUwCi06MTBERjUwMDBBREZDQzg4NzAwQkYwQjAxMTZDNEI2MUJFOTUzMzNGNEYwCi06MTBERjYwMDA5RDlBQTQ3MUZBOThFMTVEM0EwRUQ2MTVGQjdBQkMwNTJDCi06MTBERjcwMDA2Q0REOEQzMDZEMUJEMDA5RjQ2OEVBOUFBMjk0NDU4RTUxCi06MTBERjgwMDA4RjhGMzE1OTEwRTNCNjQwRTIwMTA2NzIxMjMxNzczQkIwCi06MTBERjkwMDAwNzAxOEZFQjlCREVEQzg4NzFERjVBRDNBREQ3MDM4QTk0Ci06MTBERkEwMDA3NzZDRjRENTYyNUNCQkQyMTQ3QzU5RTIzQzhENzQ3QkY3Ci06MTBERkIwMDBFMDFGRjJDNTk1M0FGNzYzMTdGMjc5QTFDMkM2QzNGQzE4Ci06MTBERkMwMDBDQkEyQkM1RkYyQzVDREI0RDM1NkJFNjhCNkY2RDY5MzJECi06MTBERkQwMDBFNTNCN0Y2NDgxRkY0Q0I4QjBGNENDODdFMThGRDk2QzBFCi06MTBERkUwMDBGNjQ1QTAxMzBDQzg1MkM0RTc0Mjg3RTI1M0NCMDlDQ0Q0Ci06MTBERkYwMDBDMTgwNEU5Nzg3RUZFM0ZFOEVDRDJGQTI5RUFFRjU2QkNDCi06MTBFMDAwMDA0MTg3OEVGODMxRTI1RkEzNThFMzlEMTY3REU3OEYyMEFDCi06MTBFMDEwMDA1NjhENkNEREREOEQ3Mjc3NDdCRkNBREMwMEQ3QkU2NkRBCi06MTBFMDIwMDAzRkNFODQzRjBGQ0VBNzA5Qjk3MDE0N0NBMzRGMDMzOEFECi06MTBFMDMwMDBFRDhCMkFDM0Y1MjQxRjgxREZCRUI5RjBGRUY0MDA4Q0ZFCi06MTBFMDQwMDAwN0QwM0JBQTgxNEZCMEVFQUQ4NjVCRDcwMTJFN0ZFMUIyCi06MTBFMDUwMDA5QjZEQzhBNzdDRDY5QzFBMEJFRERCRkMwRTk2RjI2NDc4Ci06MTBFMDYwMDBFODAyQkExMzgyMkY4RThCMEFBREE1NkI3MjVENDc1NkZDCi06MTBFMDcwMDAzRkYxMjVGRjBCMTFDNkQwNzYyNzhDQkUyOTAwQjc1Qzc3Ci06MTBFMDgwMDBDQTZEMDdERkNGRTUwNkRGMEZCOUFGMkNDQUU1NTVFRTQ1Ci06MTBFMDkwMDA0QkJFNEQ1RURERDVDRThDN0NFNjkwNTdGQjNFMjQ2REFECi06MTBFMEEwMDBGQkIwNUZFMzdBNzJBQTVGQTVGOEU4RDQ5RUQyNUJBQkJGCi06MTBFMEIwMDA4MTFGODkzRDBFRDI2M0M4RDMwRTI4NDVGMDQ3NEE2MUJGCi06MTBFMEMwMDAxQUYwRkY3NjgxMkZGRDAwNkU3RjczNzFCMkFCM0NCMzA3Ci06MTBFMEQwMDAxRkI3MDc5RUZGQjM1MkM5MzhENEI4OEMzRDYyOThDNEFECi06MTBFMEUwMDA0MkZCMzZEMUJBRkRBQjg5MTJENEQzOEZCMTFFMjdFQUQ5Ci06MTBFMEYwMDBGNTlENkNEMDg5RjJGRjcxNEMwNTU1QjQ4RjQxMTdCRTY4Ci06MTBFMTAwMDA2RkY0Rjg1Q0M4QzdGRDdCOUUyQjQ0M0I5MjlBRTAyQ0QxCi06MTBFMTEwMDAzRTEzMjA1NTYxNTYzQjY5N0YyMjI3Q0U0OEJBMDEzODBECi06MTBFMTIwMDAyNUVEQTdDN0Y0OTM1REY2QzI5M0VDQjRDMUIwNUQ1Qzc2Ci06MTBFMTMwMDAxQkY1OTgzOUZDQzhFMUQ5RTYwQjY4MDc2NTVCRjMzNTM4Ci06MTBFMTQwMDAzM0M0RTM1QkIzRTMzRjIxN0IyOUM2RUI5NUM2NEZCMUY0Ci06MTBFMTUwMDBGREJENTlDNjMxN0M3RTFCRTMzREYwMEZFN0MzRjc1MThGCi06MTBFMTYwMDA1RUYyRUU3NEUzMzhEQTM1QkIxRDNCOEQ3NjRDQ0ZDOERBCi06MTBFMTcwMDBDMzBBOUIzQzQ4M0I3NjAyRUQxODc0QUQ0MDdEMDVCRTVBCi06MTBFMTgwMDBCMUQ4OTVEOUIxNTM1MjBFNkU2MjM3MjE3RjgwOUU1RjEwCi06MTBFMTkwMDA5MzFGRDE4MDFFRTBDQjZCQjhFRjMzMTg1NkRGNTJBQzIzCi06MTBFMUEwMDA4NEM4RDQ3RDgwOUYyMkYwQzNGNzBBRDg3NzY1RUIwQjMzCi06MTBFMUIwMDA3RjU2QzZGMEY2MDI4MDUzQzRCRTYyMUE1OThCN0VFM0M2Ci06MTBFMUMwMDAzRjgyMUVDRjY0QjQxN0U2MDlBNERCQ0UxNzcwQ0M0RTk1Ci06MTBFMUQwMDBDQUNCRkNDRjlGNDBCOTcxMTQzQzNCQzlDQ0UxMDdEM0ZCCi06MTBFMUUwMDBGQjdBQjdGMzhEMzQ1REE4NDcxMEM5MjMxRDBBMzMxRDkwCi06MTBFMUYwMDAxNzkxMUUxRjIwMzFGRTUyNzI5MTIwMzk2ODVGQUExMEJDCi06MTBFMjAwMDA3REVERTVBQzExRUQ3OTFCNzZDRDA3Nzk1RkFBRjRBMDIxCi06MTBFMjEwMDBCQzNGMUUyOUUxRjFEMjE0MUUxNzc2MTUyN0ZENDE1RTgxCi06MTBFMjIwMDA2NzIxNzgxNjA4QjI5NUQzMzNGMzNFMUU1MTA5RkVBNjM2Ci06MTBFMjMwMDAzOTQ2MDEzQTJFODhGQjI4NUU5MkYxQUE4NEYzNDU3ODhDCi06MTBFMjQwMDA1QzM5MzZDMkUzOEM0MDY1QkM4NDFDNUQ2OTkwRjgwRTc1Ci06MTBFMjUwMDA3MUQ0NTg2QTdCNTM0OUM3Mzg1MTE3RTEzRkRENjE4OTUyCi06MTBFMjYwMDAyMzA2MjYyNjE5QzYyMUY5NDZFRUI4RTFCQTQ4REFBRkU4Ci06MTBFMjcwMDA1RjE3NDEzQUY2NDhCRjZFNUM4RkVEQzU2MzdEMEQ2ODUwCi06MTBFMjgwMDBFNzVDODBGN0RFRjI4Q0JGRkVGRUQyRkI1NTU4OTY3RDMwCi06MTBFMjkwMDAzODUyNEVGODU1MzdFRDZFMUQwN0ZCMUQwQTRERjY2MkRDCi06MTBFMkEwMDBEODk0QUE0OUZBMzE4RUU4MUEwRjdDQzhBMTJGNUIyM0IzCi06MTBFMkIwMDBEQzBGQ0VCOTRFQzAwOTdFNDlCRkVGODFGMERCMDlFQjIwCi06MTBFMkMwMDA2MDlBRUZDMDM4QTA4Q0M3MDE3NzQ2MkE2ODlDOEMwN0ZCCi06MTBFMkQwMDAwMDNFRTEwMkI4RDAwRDI2Q0REMzNFMzVGNzdBNzcwQTVECi06MTBFMkUwMDA3RTY2RkM2REIwMDhFRDM1NjNDREU0MkZFMkMyOUZCQ0M1Ci06MTBFMkYwMDBEMjYyQkMzNjA0NDIzOUQwMTJBMzI3RDhGRkJFMjgxOEY4Ci06MTBFMzAwMDBCODEzNUFBMjMwOTg4MzdGQ0I2QUY3NzlEMDZGQjcwNkRCCi06MTBFMzEwMDBENjdCMDYzMUZFMzMyMjM0NkZFMzlBRDA2QjQzMTY3QkYzCi06MTBFMzIwMDBEQjU1QzYyNjYxMUM3MDVCQzMyREFGMEQ1OUY0QURBRjM0Ci06MTBFMzMwMDA5MEUzOEI3RTI2RTFDRUNDQkIwQUU1MDRGMDNEMTI3MjYxCi06MTBFMzQwMDBBNzE2MDM0M0YzRkQyQ0U5NTZFOEU5RDQ1MTBGMjIzQTBFCi06MTBFMzUwMDBGNUM3OEQ3NUNDQzQ3Q0JDRkE5NDQ2RjVBRjYyOTY4NjQxCi06MTBFMzYwMDBERjA2NUIxMzA5MzAyN0UyMTVGNzI3MTk4RUNCODczNkI2Ci06MTBFMzcwMDBDMkM3MTdCRTQ5RjBDQkFBNTU5NkIwRTAwOUY2NjcyRDgzCi06MTBFMzgwMDBDOTgxMkQ1RURBODUwMjA2RjNCNkNGNTc5MkRCNjFERUQ2Ci06MTBFMzkwMDAwNkZGNURFNDdGQjYyRENBQTdGN0IwNkVEMjBERUY2RjEyCi06MTBFM0EwMDA5RERBNDQ3RTRCQzY1N0VERDE2ODkwRkNEMzE1QzY1MzE5Ci06MTBFM0IwMDA4NzY3QzdFRjQxQkM1Q0ZFQjQ1REZEMUNDOTdGQzZBRTdDCi06MTBFM0MwMDA2RTg5NzBCQkZBNzk3QzJGRURDN0RFMjNBRjkwRkQ4MDlDCi06MTBFM0QwMDAxQzg0RjhEQzA1RkNGRUFGMUNGQkI4NERFODQxNTczMTRFCi06MTBFM0UwMDA5NzQzN0JGRkQ3ODRCQ0JFM0IzRERFOEFGMzFCRTBEMzYzCi06MTBFM0YwMDBGQ0IzREU3RkJDRDkyRUUzNERDMUM3MkJFNTBGRjBFM0E0Ci06MTBFNDAwMDBERjIyMTZCQjBDRkNGODRBQTQ2QTM4MUZFMEQ3ODZGNjU4Ci06MTBFNDEwMDA0Mjk1RDZFMjA5NDU0M0Y5Q0YxM0NENDc5ODk5QzQ3MTg3Ci06MTBFNDIwMDAxRUQ2NEM0MEFBMzdDRUQwREYwRDlGMjdDNTcwREM2QUMwCi06MTBFNDMwMDA0MURGN0JCNUM3RkYwOUUxMERCNzZCQzYxMzExQ0EwQkVFCi06MTBFNDQwMDBCOTNDNEJCQjBDN0FDOUZERUZGQkI0REJGRDBFQjBBN0FBCi06MTBFNDUwMDA4MDRGMDdCRTlBOUZFOTNGMjRGNkI5QjdDQTNDODRFQkM4Ci06MTBFNDYwMDBERTUwRTY1OTg3RkM3RjUwMzFGQzVFMTVFQjlFNjYyMzNCCi06MTBFNDcwMDBEQTExQTZDRkNBMUEzNzdDOUQ2RDM0Q0Y0MDg1QjkxMTA5Ci06MTBFNDgwMDBGNTlBRTkyQjQ2ODFERjJFRDZENUI5QkZEMDM5MURCMDFDCi06MTBFNDkwMDBFRTU3RjMyNzY3REFBM0QxRjVGRDg4RjE3M0M0QkJENTM2Ci06MTBFNEEwMDA4Q0ZGMEFGNUVFQTU4MDQzNEYyOEY0MjQzREVDQUFDRTVDCi06MTBFNEIwMDA0QjJBRDAyRTk4NjVCRUNBRjcxMUVDMjg0Q0REMTU3ODkyCi06MTBFNEMwMDA4QkUyQTI2NTRCMTQ4QUQzOTY3OTIwODNDQjYxMjdDRjQ4Ci06MTBFNEQwMDAwODdGQjM0Q0U3RkRFQ0E0RTFCN0Q2M0I4QUEzOEVFQ0YyCi06MTBFNEUwMDBCQzE3NDRDMkIwRDYyRkEyOEVGNTU4OTc5N0ZFMENFQkZFCi06MTBFNEYwMDAyNkI5RjRFREJDRDAyN0Q1RkQ2NjE5REFENTk3OUNCOUJECi06MTBFNTAwMDBFREY2NUIxMTE3QzEyOTUxNTE5NzEwRkU2Rjk1OUJFN0VFCi06MTBFNTEwMDA1N0VDNjc4MDlGQzVCRkY2NTY4NUZGNDdEOEFGODQ2MjJBCi06MTBFNTIwMDBGMThCMDMxM0NGOTNCREEzMUVDQkZCNjVBMkVFQzRGQTAwCi06MTBFNTMwMDBCM0U3OTE3NDk2NDQ1OUQ2QkEyMEFGOEUyOEFGNjNBODNBCi06MTBFNTQwMDA1MTRCRkYyQTk1RjFCQTQ3NUYzNkJGMDAxRjRGOTRFMjQ3Ci06MTBFNTUwMDAzRjM2MzQwMjNFRkI3MkUyNzMyMjFCOUY5MjI4REY5NzA0Ci06MTBFNTYwMDBERTJBQTMwNEU3MDNGRjNDMTZEN0VGMDg4M0ZDRTVFMEFGCi06MTBFNTcwMDBFRjEzMzNDMkQ3NjJCRkM2MTIxRDE1RTU5NzhDNUJBRjkwCi06MTBFNTgwMDA0MzM4RDlCNkM0QUQ3QTM0REJCRTk2NDdCOTdEQUQ4ODgxCi06MTBFNTkwMDA5MjdEQ0RCRDZFQTVFMERCOTVEQTg3RjdBQkY3M0I2Q0RFCi06MTBFNUEwMDBGQTJFOUY1RDgzNEYxNTU0MDIxRTZFNzdFMkIzQTRBRjFGCi06MTBFNUIwMDBEMzJFNEZCRjNGN0U1RERGNDRBNEYzOTA5MDRGQjRFRDY4Ci06MTBFNUMwMDAxODZGMTgzQThGNDczRTFERTU3MjFDQkEyMTQ5NzBDRjZCCi06MTBFNUQwMDA4QzEwN0ZBNEUxODAzMTU4OTcxQjI5MEU5OUZGM0VFM0YwCi06MTBFNUUwMDA5MEFFODUwMzA1Mzg0RkVCREI3QjBCMzA4RjdGNjYyOEMxCi06MTBFNUYwMDA5QzMzMEUzOTU0RDY0RDc4REFFMzkwREUxMUUyOTBCQkFECi06MTBFNjAwMDBBMjNDNUUzREYyMUIxN0M1MTUzNTY3Qjk5RkFGMzlEQkRDCi06MTBFNjEwMDBBREVBMjA5Rjc3NDdCOUREOUUzRkQ0QTc5QTIwMjczNUUyCi06MTBFNjIwMDAxODg3QzAzQ0JEMjIwRTQxRjg2RDIwQkE5MUI3QkI1NThBCi06MTBFNjMwMDBDNDZCRkVEOTNFMUE1NzAzNkQ4QzQzRTY4RjEwODcwMERBCi06MTBFNjQwMDAxNjJBQ0FERDgxOUFBRTVGRTBCRUQ5RTk3REExRDJEQzhGCi06MTBFNjUwMDAxMkI1RTQ1QkQ1ODM3RDc0NEUyMkM3NzUwNUI2MTc5ODU1Ci06MTBFNjYwMDBCNENGRDk3MjczNzgzNkI3QkY5OTcxNUNERUVENzAyMzgxCi06MTBFNjcwMDBDOTU3QURFQTBENjA3REEwOTNFNTA3OTEwRkVGRTQ4RERBCi06MTBFNjgwMDBBOTY0NDUzQ0FGQzFCOEI4MTM0MTgxRUVDRTkzMDVDOTJBCi06MTBFNjkwMDAwNEU2RDUxRURFN0Y2RkZFOThCREY4OTRGNkM3MjNGNDFFCi06MTBFNkEwMDBFMjlEQkNFQjkyMjIwRjMyOEE2MEZDQkRBQTkxNUEwQzBCCi06MTBFNkIwMDBGRUEwNzNDQTk3N0M5QzlFQ0RBNDQ3NUIwNDZGQzJCQjJGCi06MTBFNkMwMDAzNUNBQTc2RkY2RjM3RDkwRjFENzhCQUIxNDhBMEY2MTMzCi06MTBFNkQwMDA5QTI1NEIwMTdFOUU5OERGMzU4N0U3ODc3NUFBOTdFMERDCi06MTBFNkUwMDA3NjA0NzgxQzc5NzNFMjNDRDUyRkU2MEZCQTc0MUREQUY0Ci06MTBFNkYwMDBGMzA2RUZFMkY5QTJGQUVDRDEwMjhDRjczRkFDMzExNTQ4Ci06MTBFNzAwMDBERUFGNkE4QkI3OTI3QzlFNzQ1MTNEQzM4MDdGQTg5RjE5Ci06MTBFNzEwMDA1NUZEM0RDNEI3ODIyMTU3NTY5RDIzMUYyQzU5Q0ExMjVGCi06MTBFNzIwMDBCN0I4NkM2REE2QUUyOUNBNjU4N0U0RDM1RTg3NzgzMjI4Ci06MTBFNzMwMDAyQUYyQ0Y0QTM2RTMyMkYwRTUwMkJCQUYwMzY5NzM0RkZBCi06MTBFNzQwMDAwRDFGNzk5NDBEMUYyRkVCMEI5QjY2MTg0RkEzN0M0QzZDCi06MTBFNzUwMDA3MTBFN0VGNzY5RTA1N0VGMUIyRUFBNUJGNEVFRDlGMzNBCi06MTBFNzYwMDBEMTRBQTAyRkQxQUQ1MTVENTdFNjMzNDA1OUM5NzJDQzgzCi06MTBFNzcwMDA2NzkxMDc1NDk3M0VCRTFFRTVGMjYwQTE2QzgzNDEwMzhBCi06MTBFNzgwMDBCQzBGQTZDRkVCMzdBRDM3MkNFRDYzRDEwNzRFQTNERjFGCi06MTBFNzkwMDAzQjc4OEQ4NDNGQzdDN0NCNzY2MjcwM0RERUQ3MzgzODczCi06MTBFN0EwMDA5RUI3MkY0NEQ1NDcxM0I0QkY4MzFBRTVEMTVCN0ZFREU1Ci06MTBFN0IwMDBDRDY1MUY4RkQ3NzJGRDkyRUQ1QkFCMzc3Mzc5MUQ2NTA5Ci06MTBFN0MwMDAxQ0Q4RjU1N0FERkEyMUM3RTUyRDM1Nzc0QzA3N0UxQ0NGCi06MTBFN0QwMDAxQzcyRDBGOTEwRTQ1OTI5OEMwRjM2Q0QzMDVGNDdGODAwCi06MTBFN0UwMDAwNzRGNzBCRTFFN0NFMzFFMUZFRTkzN0JFQ0UwRTc3MkNBCi06MTBFN0YwMDBEOUY5REYwQjdGOTRDRUYzNjY3MkZCMDE2RTRFNDNCRkY3Ci06MTBFODAwMDBCNTZCRDEzM0M3MkE2MTlERTNGM0E3Q0U1MjgxMDRFMEYzCi06MTBFODEwMDA4NTA3RTM2NTM5REU1RDVCOTFBNTg3Qjc1NkJGQUNBRTcyCi06MTBFODIwMDA0N0ZCRjNDNkU5ODY1Q0ZBNUUxNTM1RkY5NDREMEYzRjUyCi06MTBFODMwMDAxNzZERURENjg4RkYyNUNGRDdFRkM1N0IzRkE5OUFFRUEwCi06MTBFODQwMDAzRTBERjZCN0Y3RjcwRTg2Nzk0QUVGNzQ5MTg3OEY4NEZECi06MTBFODUwMDA1NzEwRjAyQUI5MkNCQ0Y2Q0NDQjIxNkY4MDk3QUJGNkMxCi06MTBFODYwMDA5QUUxNzhCRDU0Q0I4ODNGMkY1NDFBOUVEQUFBRTE3OEZBCi06MTBFODcwMDAzMjUxQzc1QzIwRUM3RERFQjkyRjUxRERCMTc3RDA0MTNDCi06MTBFODgwMDBDNTkzMEI0MzdCNTUxNDNENTlGRkVFM0E1MTgxMTExMDRFCi06MTBFODkwMDA1QkJDRTQ5NDhBMjI2NURFQTc2NkU5RERCQzEzRjk1OTA2Ci06MTBFOEEwMDBFRDNCOUJDNzY2QjU1NzZGOUM5OEQxNDNGODZGNDU3NDk1Ci06MTBFOEIwMDA3MjU2REJFREJGMjlBQjFENjJCM0IzREEwRDRCNkVDRUUyCi06MTBFOEMwMDA5QUFGRDYxN0M5NkFEN0ZCM0Y5QTA1N0Y4QkJFMzJBQjhBCi06MTBFOEQwMDBGREQxQzBFQTJDRjhBNUMxMEQ1OUZEMzVCRUREMEY2MDk0Ci06MTBFOEUwMDBGOTI4M0U2REE2MzY5NjkxM0NDRTQ0QkUxNkY0MUIyNDA0Ci06MTBFOEYwMDA4RjBGOUVCOEM3ODc3MjkxQUE4OTRGNDI3OTFCMjhFQzY3Ci06MTBFOTAwMDAyQkMzRkFGNThCQ0VEQ0Y5REE3REI1QUFGNERGNjVFODI2Ci06MTBFOTEwMDBFRjBEQzZGMzM1MDkxRkFBMThDQ0FBQ0I2RkE4RTVGRUU4Ci06MTBFOTIwMDA3OTZEQUQ5MkIzNEU2MEY3QzdEMjBGNEJCRjZDNUZERjBFCi06MTBFOTMwMDBFRTc3RURGRTc2RDk4N0Y2N0E3OEJEOUZGQkZENTU0MkRFCi06MTBFOTQwMDAwRTVBMDMzRkY3NjJCRUZFNjIwM0FGMjM3NDk1QzVBOTVBCi06MTBFOTUwMDA2RTMwMjBGQ0YzOTE1NUI3NEZDMjczQjVGQzgwMzlENkE5Ci06MTBFOTYwMDA1RDlFRjFENzkxNDA5MkZEMUFFQjNDQkUyNDlCM0MxRDZECi06MTBFOTcwMDBGQjkzNkNDMzc0QUE0QjZCOTE2OUZDRkQwREUyRkQ1RENBCi06MTBFOTgwMDBGODA0M0Y1RDY3RTE5QkRERkY4NjNDMzM3RjVDQzQzMjZBCi06MTBFOTkwMDBGMTRBQzNCQjQ2QjQwOEYwRkI0OEQzOTM1QTI5M0MyMzQxCi06MTBFOUEwMDBERUMzOUFENTBFMURBRkY5NkRFOTA4N0VGQTkzQjUzNjMwCi06MTBFOUIwMDA3REMyNzFCRDQzMkIyRUU5MDc1RTZGRTE3NUY3RUZCNzlFCi06MTBFOUMwMDA3ODU4MEFFODNCRDlFMkEzRTcyRjVCRkNGNEZFRTUxNjkyCi06MTBFOUQwMDA5RDlFRUQyRDAxN0FBNjVBODJENEZGOEI5NjZBN0FGRTBGCi06MTBFOUUwMDBBOEM1QTBFN0YzMkQzMTdBMUU2RDg5MTNEQzRGNUIxQUExCi06MTBFOUYwMDBFOUY5QjMxNjkzREVFRjE0N0FGQTQxQzFDNzA4QzhCQTMxCi06MTBFQTAwMDA0MkZDODg0MzIxQkUzNkUwNTVERDA1NjcwREQ1NkFFNzM3Ci06MTBFQTEwMDA4MUFGRkY5QThCQUZFRkQ3OUZBNDZBN0EyNkEyOUM4MTIxCi06MTBFQTIwMDBCRkNBQTk0RjNEQjUzMkFFNEZFRjM3RTEyNUUzNjFDQzA4Ci06MTBFQTMwMDA1RjUwNEU2NDlEMEVGMDdCMENGMTczNjM3REFFRTRDQUIzCi06MTBFQTQwMDBGMTNCQTg3MEJDMEUxNkYzRkEwRENFQjNCQzEwRURGOTc1Ci06MTBFQTUwMDBEN0UzNjFCMkU3RDdDQzI0N0JFRTY3NUFCNjNEMkYxRkQwCi06MTBFQTYwMDA2NkNGRDc5MURFQjFBMzU4MjdDNUZBMjI5RDUzRDhFQUM1Ci06MTBFQTcwMDAyMDQ1NzUzQThEOTM3NTkwNDVFRkYyM0FDODY4RjQwM0Q2Ci06MTBFQTgwMDBERDQ3RDE2RTQ5QkI3REI5NzREQkU5M0QzQ0RCNzgwOURDCi06MTBFQTkwMDBFNzkxRkU3OTk4RkYzMEVGMjZGRjUxMkQ3NDk2Njk2RjRDCi06MTBFQUEwMDA1MzlDNTgyMEU4RDk3NTdBNDUxMURBMTczNzIyQzhGM0Y0Ci06MTBFQUIwMDA3NDgzNTVFMzNFMzM3OTFGNjBFRkM2QjJFMUYzQkU1RTY3Ci06MTBFQUMwMDBEMzQzRkU3QzQ3M0FDRTc5OTNFMjk4RTFGRTJCOUIwRjJECi06MTBFQUQwMDAxODBCNTlGRDNCRjBFMTVDQjY1RkU0N0NBODU1OUYxRDI3Ci06MTBFQUUwMDBEQzBFRkVGOUUwMjBFMzc1QjIzOUZDQkM0RUZBQzE4M0JFCi06MTBFQUYwMDA2Nzc5MURFMzgyQTYyNDE5NkM1RDk4MzU3N0NGODNFNzhCCi06MTBFQjAwMDA4MUZCNTk2OTFDQ0Y5QjI2Mzk4MkZCMDFCNEUwQjk1RUI5Ci06MTBFQjEwMDBERDAzNzBBMTQxNzM2QzFFRjQ1N0E3RjI2ODVDNzhDOURECi06MTBFQjIwMDBDQzI0QjYxQkUyNkY5MjdEMEE2QkQ5N0UxMjIzRDRCNDNCCi06MTBFQjMwMDBERkExMjI1ODg5QUQzRDIxMDNBRkUyRkU1NjY0REEzMEYxCi06MTBFQjQwMDBFRjI3NjY5QjVBMUREMEI1RTI3QzMzRDM2MTdFNzcxOURGCi06MTBFQjUwMDA3M0QyRkQ5MEUxRkVGRDZFQzU1MjY3RDM1OEIwMDNFOTU0Ci06MTBFQjYwMDBEMEJFQjA4MzlGRUJEOUU0NERGMjQ5RDZEQjY0MUVGRUU0Ci06MTBFQjcwMDAwODMzN0M3NTM5RTI4NzM2NzFFRTYyM0Y2Rjc5NkJCQTg0Ci06MTBFQjgwMDBFOTQ3NzhDNUY3M0M5REI3QjA4RDhDREY4RjcwNDA3RTJDCi06MTBFQjkwMDA4MkZDMUJFMzRBRUUyRjFGMkU3N0RGOUI3NUNCQTQzQTM2Ci06MTBFQkEwMDBBQTUzMjQ5NEFCOTNCNzc3MkI5NEI3OEJCQzg5RTk5Rjc2Ci06MTBFQkIwMDA3MTU4RjMxODk5MzdEOUYzQTM4Nzg0OURERDg5NzYxNkE4Ci06MTBFQkMwMDA5RTBGMzkxOUU1NUJFRDRBN0U3MEFGOTJDOTk3QzA2RjExCi06MTBFQkQwMDBDRTQwQkExNkQ1ODlGMzE3RDYzQzhGOUZEM0REOUY5NUNCCi06MTBFQkUwMDAyRjhEODhCN0M4NEI5Q0U5N0QyRkYzOUQyOUM4RUNCQkJFCi06MTBFQkYwMDBEN0Q1RURDNzdCOEU5RDMzQkZEMUI4MUVGOTM2RDM0MzMxCi06MTBFQzAwMDBFNzlDNEM0QkU5Njg3N0VDRjQzMDVGODI5NUNFQ0RFQzE1Ci06MTBFQzEwMDBCN0NBQjQzMzU4OUZFRDgwNjAwNkNGN0IxRkM2MkYwMTYzCi06MTBFQzIwMDA2MEJFQzJBMDIzMkJFRTI5QUFDRThFREI2RUFGOTM3NkY4Ci06MTBFQzMwMDBGNkVBRDA4MTAyNDBFN0RCMTI0RjE2MTdFNzk5M0NGRTU3Ci06MTBFQzQwMDBGNDg4Rjc2RDNBQjcxNzBDRUQ5REU1N0NCRENENkI3ODc4Ci06MTBFQzUwMDA3Qzk2RkQ3RjEwRjdDNzNEMzIzRTZBNzk5QjBGRUJFMDUzCi06MTBFQzYwMDBERDVFMDdFOTc3ODdBRTc1OTY0M0JCQzNBQkYxRjg0NjI3Ci06MTBFQzcwMDA3N0M0NzI5RDQzRURBQTUzMDRERDFDMkY5RkMwNEIwRDNBCi06MTBFQzgwMDBBREEwMzg2OEE0RjVCQTg0QkNDODc2RkUzNEQzMjA3RDI0Ci06MTBFQzkwMDBENDgzNzFDQzkzNUJCREE1MEFENjQ3NjVGRkE2M0E0NUUwCi06MTBFQ0EwMDBDODRCMzdGMUExNTNDNDU1Rjk4MTlFOTQwM0U1NkNGQzIwCi06MTBFQ0IwMDA1REIzOTE2RDFFODg5M0NFQzA3QkNGQjQxRThBQUJCQzcyCi06MTBFQ0MwMDAxMzVDNjYyRUJDQkYyQ0U2RUI3NDA2NjM5NEY3MTczQTEwCi06MTBFQ0QwMDAxOEU2RkQ5REU1QjlGREU4M0ZEN0YxMzhCMzU1OUYxNTFFCi06MTBFQ0UwMDA0N0Y4MDRGMDY1QUEzMjFDRUU1MzQyMEUxRTcwODIxQ0Q3Ci06MTBFQ0YwMDBDMkZBOUQ1MzZGQTM3QjYyOUQ5MzE4RDlFRjhBRkFFOUZDCi06MTBFRDAwMDA4RjZFRjNFNjkwNDNGRDMzQjQ3RjRFMUY5M0U3RUY1OUM4Ci06MTBFRDEwMDBGNzI1NUFGNTg2QzY3NUIwQUVGNjMyMEJBMkNEQjBFQjJDCi06MTBFRDIwMDA5QjczRkM4QUM2NzU3OERGQTIzQTNGODhGMEI1RUFDRkJDCi06MTBFRDMwMDAxMkM4QzdGNjIwQTM3QTg3NTZEQ0U0NDFCQzFGMkNEMzQ3Ci06MTBFRDQwMDBFODdFNDQ5QUFGMzNDQ0M3RDA3RThDMjZERjc2N0M2MEQ5Ci06MTBFRDUwMDAzRDkyQkI5MUY2RDc4RTFGODVGMkIzMkUwMTVGNkMzNkM0Ci06MTBFRDYwMDBDNjczQ0NGN0NCQjQ1RTY1Q0I5NzczMTRGOTFBOEQ5RTNFCi06MTBFRDcwMDAyQ0ZGNUE5NkYxQUYzRkE5REJCQzAxRUZBOTNEQ0M3ODNGCi06MTBFRDgwMDBGRkIxQkEzMEU1RkJGNkY2RDVEMkYzNTZBREJCMTFGN0JECi06MTBFRDkwMDBBNTc1OEE4QkU0Q0YzRUJFQjM5Q0UzRDVGNTdDOEQ1ODM4Ci06MTBFREEwMDBEN0E3QTBGQ0VGQUMyRUM5NDNGQkVFNDU0MzZERTE2QjRBCi06MTBFREIwMDBBQUQyM0M1NTY3RjFERkM1RDE2NjFFQjdENzMxOTI1RjQ1Ci06MTBFREMwMDBBRjFFRjc0RDAxQjlGMEY2QUIyMDUzQzA3N0M3NUZERTM5Ci06MTBFREQwMDAzREE1QkY3RjNFQjI2RTgzRTQ5NjRDM0I5NzVCRjYxNzMyCi06MTBFREUwMDBFMDRCOTExMEVCMzFFQ0ExM0U3RTVGNjQwQkMxNDk3RTlDCi06MTBFREYwMDBFREJBRkUwRkMxRDQyNUY4MzY2NjYxNzY3REVBQkRENjQwCi06MTBFRTAwMDA5Rjk0RkFDMjUyRTI3MzFFQ0I0MzNFNUY2MEY3MjlFNDNGCi06MTBFRTEwMDBCRkEzMDZFOTlEMkY2RDU3RjlCRDk1NTJEOTA0NzJCMDc1Ci06MTBFRTIwMDA0RDIyQTc2NEVBNTIwQ0NGM0Q1MEJGNEM0NkYxMEQ0MTM0Ci06MTBFRTMwMDA4RTEzNDc1RTQ0Qjc4RkM2NEQxNEQzNENDMDBCMzUyQTkyCi06MTBFRTQwMDBDQTNGQjdCQjE3RDgxQjdDN0QxODg2Rjc1Njk0ODQ4M0JFCi06MTBFRTUwMDBGQ0VDRjUyOEQ3MDA1N0NFQ0MzRjlGQ0E3MTlGNjc5MjM0Ci06MTBFRTYwMDBBRkU5QzkwREYwOUM1ODJGRUE2OTgyOUVEMUY4MjFGMUQzCi06MTBFRTcwMDBGRTVCQzlBRDhDMEZFQzc1NTQ1OTY3N0QxQUVCQUNDQUJCCi06MTBFRTgwMDBFODc1NTRBNjlEMjdCRUM5RjhENzVFNTcwNUJGNTY4MEMyCi06MTBFRTkwMDA3QzdGRTcwNjhENzUxMURGNzlCQzkwQzlGMzREOEZGNTQ2Ci06MTBFRUEwMDBGRTlERjQ5N0VEQkUxNTU5RjVGOTc5MjNEMEZCRDQyOEQyCi06MTBFRUIwMDA3RUIxQUIxRkVDMjZDNkQxRkVFRDU0OUYzRjcwNzJGREI0Ci06MTBFRUMwMDA1MUNDRTMyRkY4NUQzQUIzRDhGRkY2QzJFQ0YzMDMzOTI3Ci06MTBFRUQwMDBFRkY2N0E1MTg3MUY1RkM3NzBCQ0Q2NjczMkJDQjdFN0MxCi06MTBFRUUwMDBGMjA3QzkyRkI0MkFCOUNGMURCQUVBMURFMkJDRDFFNjk4Ci06MTBFRUYwMDAyNzZDRTczM0ZGOURFNzREQkEyQTU4REE3RkE4QzIzRTU4Ci06MTBFRjAwMDA0QkZGQ0EzNEYwQTJFM0FDRTNCOTFEOTVGQzM4MjBFMjE0Ci06MTBFRjEwMDBEMUFFRTczNkQxM0QwM0U2QjdENDdEMkI3MkFDNkY4RjBGCi06MTBFRjIwMDAxQjBENDNGN0NEQ0RDNEIxQ0EyMDhGNUZFNUZBRUQyMkFBCi06MTBFRjMwMDBFRjZFM0RDOUY3MjM1RkRDMzdCMkQzMEJGMUVGMTdFQjcwCi06MTBFRjQwMDA4MURFODI4MEMzNTZERkNBQjYzN0Y2NzhEOEVENjE4OTk0Ci06MTBFRjUwMDA3QzhCRkQ4Mzc4QjhBNTlFRTI4NEVDNzg3NjQyOENGMUI4Ci06MTBFRjYwMDA3QjQxQzUyNkMzRkE0RkM0NkZBQTU4QUY5OURCREZBQzBCCi06MTBFRjcwMDAzMkEwN0JERUM5NEJFRjQ3NjMzRDhGMTdEQTAzRUJFMzJCCi06MTBFRjgwMDA5ODM3QzlGQUYzQUU0NTFGMjFGQjBBN0VCNEJCREU2Mjk3Ci06MTBFRjkwMDA3N0U1N0Q4N0Y3NUE4RjkyRjIzQTU3RUM2MzdBN0RGQkRCCi06MTBFRkEwMDBCRDk0ODU1QkY4QjlEMUM5N0I4RUExM0MxRTAwNzk0NDI0Ci06MTBFRkIwMDAzRkRGNUU5OEQ4MzExREUzOTM5NzU1QjY1RjFGNUVCRjY0Ci06MTBFRkMwMDBCMkQzMjVFQjUwNjM2M0ZDREU4QUNCREY3RTY0QjFDMzMyCi06MTBFRkQwMDBDMjlGQzE2NjU1MjdGRTE4MENDRjg5MzQ3MTRFNjRBRkFECi06MTBFRkUwMDAzQkI5REQ0NjMzRkFFRjU0OEREMTY4QUQzQjRCQkUzNUFFCi06MTBFRkYwMDAwQTc5N0VCREE2OTlDRUIxOUUxRUUxREM1OEMyRTFFNzNBCi06MTBGMDAwMDA2NTk4ODdDQjNBNTZEOTBDRjM1OUU0RUZEQ0Q4NjYxNUVFCi06MTBGMDEwMDBDRDQ4NzU3QzMzRERCRjJDRjgxNzQ2RjkyM0NCNTc5MkNBCi06MTBGMDIwMDBGQjYxQTlFNzE2M0Q0M0Y5RTU5RkZDOENFQTZDMkVDQzA5Ci06MTBGMDMwMDAyRjRCMzE5RkU0RjlBNUNDNUJBNTlEQTg1NTlGRThBODZGCi06MTBGMDQwMDBDMDdCMURGRDFBREREMzJCNzg2RTkzMDdFM0RFNTBGRkU2Ci06MTBGMDUwMDAwNkNBRjEwQzY1NTUwMUVFQTNCQ0I3MjRGMUJDRDJGQzg1Ci06MTBGMDYwMDBCNDBBRjM1M0NCRjk0QUM2NkVDNDdFODU3MkQwRDUxMjZBCi06MTBGMDcwMDBGRjU1MTRFNEEzQjdDNUEwNzY3QjRCMjMzREFCQjRBNEU2Ci06MTBGMDgwMDA4MUY0NTQwNTI4RTM2MzBCODZBMERGODI0NzU1NUYyQzhCCi06MTBGMDkwMDBBQkRENTU2OUZFODZFQjU1M0NFQkJEREIwRkYzNTlFNDY4Ci06MTBGMEEwMDAwMkYyRTM3MzA4MzdGNzI0RTdBNzZCODk0MkY3MTE5NjVBCi06MTBGMEIwMDAwREIyMDdCODZFRkZDM0Q4QTE4MkQ4RDVCMTQzQkVEODcwCi06MTBGMEMwMDAyNUVEMTAzRjY3NzUwRDhBNzM1NjlCQkUzRDVFQUY5MzZECi06MTBGMEQwMDAxRUE0RjUwRUNGNUJDOUNGMjU2ODNDOUQxOUNFMDc3QURCCi06MTBGMEUwMDBDNjdDOTJEQkFEQ0NCRDBFRkE5RTMxMjRCRUIzQkVGMTIwCi06MTBGMEYwMDA2OENEM0U4QzY3REI1Rjk1RkRDQkY3MTk5NjdFOTY4OEQxCi06MTBGMTAwMDAzNjYxRURFRjMwMjZDNzEwNjc3NjFFMkQ2REEyRUZCMDg5Ci06MTBGMTEwMDBDNTc3MzQ5MUM2RTJCMjAxOTZCOUVGNjhFN0Q3NDMzMUJCCi06MTBGMTIwMDA0N0Q2N0Q5QTEwRTNGNTM0RDlCRjM5MjZGMjQzMjAwNzNDCi06MTBGMTMwMDBFQjc2RjJCRTQ0M0VERTk3QzgxMUJGRkY5Mzk4RUY1RUI4Ci06MTBGMTQwMDBFNDUzMTU3RTFGQzJFRjJCMkNCNjdEMUY2MkM0MkVGRDJCCi06MTBGMTUwMDA3RDQ4NDJGNDhGRjYzREM4MUQzMTlFNUY5ODYyM0RGQ0FDCi06MTBGMTYwMDBGRTNGODZGOEM2Rjk3NzE4RUJDNTdFMkRFODRGQjY4RUMwCi06MTBGMTcwMDBDMTIwRDFDRjcyQ0UxMzhGNzEzRkZGNDI4Q0RGNzc3MUU4Ci06MTBGMTgwMDBGOTBEMERGNzA1RTY1QjQxNzJEMEM4RUY2N0NBRkUwNUMxCi06MTBGMTkwMDA2N0QzRkRCN0QxN0EwREJDN0ZDMTU5OTNFQTQ4RjJCQjYyCi06MTBGMUEwMDBCQzc4RUNDNjdEREJCNENDQkQ5Qzc2QUM0Nzc4RjFGQjdCCi06MTBGMUIwMDAxNDdFREZFOURGMDU5REY2QTdGQzNFRTUzNjlGQjhERjRDCi06MTBGMUMwMDBDMzI2RUZDM0RBNjZBQkMxQkZDN0JDMjU3NkQzNTA0MkI2Ci06MTBGMUQwMDBBM0Y1RUZBMkY1QzVGNzM4RDU4MjVFNzhCRjg5REVEQkVGCi06MTBGMUUwMDBGRUJGMDI0REIxQjI3REUyM0I5RTRGMTE1RENEMUNFRkUzCi06MTBGMUYwMDBGNEZGMjcyMTMxOUJFNDRCQzI1N0M3NjYzNTA5RjhDRjhFCi06MTBGMjAwMDAxMkZDNDYwRTlGNDMxRTg0M0M1NjExOUU5NzMxREZGRDMzCi06MTBGMjEwMDA4NERGMUE4RURGODc2MjdBRDZGNzVGNTI2RTAxNkUzQjBCCi06MTBGMjIwMDBDMTg5RUY4M0ZBRTMxQjNDNjhDRkQzREZGRDI3QTZFRDRFCi06MTBGMjMwMDAzM0E2NUMxNjlGNzZEMDNDQTY1QzhGRjM0OTc1NzNCREYwCi06MTBGMjQwMDA5MEYyMkZFNUUxQkI2MjFGNjZDNjE0Mjk1NzVGQTZGMTU1Ci06MTBGMjUwMDA0RDU3OERGRTZGMTIzRjZEREYyMzhENDY0N0EwMzJCRUE2Ci06MTBGMjYwMDA4RkYwRjBBN0VGMjNFRjhGRTVENkNGRjc4NDhGRkM3RUVBCi06MTBGMjcwMDBDQ0FFMTdDRjBBRkE2MURERUZEMTNBNjU0MUJBOTcwNEY3Ci06MTBGMjgwMDBFQjNFNzUzNUQ2ODU3OTdGNDA3Q0YwQTRFN0ZEMjFCNTRFCi06MTBGMjkwMDBBRjcwNUU1NjU2N0E1OUY3NEFGRTBGRUQ5MTNCNkY2MDlDCi06MTBGMkEwMDA0NjAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDY2Ci06MTBGMkIwMDAwMDBCOTNFNDY2NjBGODUxMEZDMTgxNDg2QzYyRjExQTRCCi06MTBGMkMwMDA3NjA2ODY2ODE2MDY4Njk5QUMwQzBDMTU0MDJDQzc0OTQ0Ci06MTBGMkQwMDA5QUZFRTU0MEZEOEI4MDc4MkUxMENGMDBFMkM5NDBEQzFECi06MTBGMkUwMDAwN0M0OUQ0MERDMDJDNDkyNDBGMzQ0ODA5ODFGODhCOTUzCi06MTBGMkYwMDA4MDk4MTU4ODE5ODBGODM3MDcwM0MzMzcwRTg0MzkzNzhCCi06MTBGMzAwMDA4MDYyMEY0OEI0MUI4NEFENzgxMEVDMzM0MEZGNkYwNDZCCi06MTBGMzEwMDBFMkFCNjQ4NEMzMjgxRTFFMzg5RDlGODFBMTVBMDBDMUEwCi06MTBGMzIwMDAxNzEwNDQ5NUNGRTA0N0IwQjk0NDI5QjM0QjFBQTgxRjMyCi06MTBGMzMwMDAwMDY1NkQ0MEI0ODAwMzAwMDAwMDAwMDAwMDAwMDAwMDg0Ci06MTBGMzQwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkU1N0QwQjc4NTRENUYyCi06MTBGMzUwMDBCNUYwM0E4Rjc5NjY2NjcyMTI0Mjk4ODQyMDI3MTAzMDkxCi06MTBGMzYwMDA2ODBBNDM4MDA4OEFGNTEwMjI2MjRCRUQ0OEE5NjIyRjkzCi06MTBGMzcwMDBCNTAzOEQ4MDEwNDg1NEFDREM0QUJGMEM0QzgwMjAyODZCCi06MTBGMzgwMDA0MTUxNDE5MTBFMDgxNjE1NkQ0NEFDNThEMTNCMjBCNTQyCi06MTBGMzkwMDBCNEI1NkQ2Q0I5RDU1QUVEMERCNUFEMkYwQzg4NTJGREQ1Ci06MTBGM0EwMDBGQkVCRTVFRUI1RjYzRTk5NzNDRUNDMjRFMEVCQjdGNzc4Ci06MTBGM0IwMDAwRjlGRUVFQ0IzNUY2QkFGRDc1RTdCRURCNTc3RENCMjQyCi06MTBGM0MwMDAwQjBBMDcwMjlDQzQ5RjBCMDA2RTcxMDNDMDk4NzQzQTJECi06MTBGM0QwMDBGMkM2NkZDQzdGNjgzNEZCRkRGRkJBMjNEQkY1NzQzRENBCi06MTBGM0UwMDAzMzFEMDgxMkQ1MDMzMDAwOEEwMTJFRjBCMjVGNTlCRERCCi06MTBGM0YwMDA4OTNGM0ZGMkE3MTE0NTAwRkI0MDAxMEZGQjk0NTIyN0M0Ci06MTBGNDAwMDBGNkY5MUFFQjY3REY4NzEwQzE3MkY5RTc4MUIyQ0UwMDE3Ci06MTBGNDEwMDBCNjhCNTNCQjJGMDM2Rjk3MkFEN0NCQjQyQUNDODA4Q0UzCi06MTBGNDIwMDBERjBEMkZGRENFRkExOUJDQTk4OUI1M0ZGMTQxODBEQTc1Ci06MTBGNDMwMDAzQkUxMzA1M0Y4NTA4Njk0Njg3MzcyMTBGNkFCQkVENzM4Ci06MTBGNDQwMDA1OTI5RjJFNUMwMDYwNzAxNkYxRDQwNEQxQURFMDNBRkQyCi06MTBGNDUwMDBCQzQ2RjBFRTU3MTlCQzdBOTZGMUJEMENGRUEyMzRGQzA2Ci06MTBGNDYwMDBGQkUwMUJGOTUwQzVFMTM3NkFEMkYwOUYyRTNDMzRGRjE4Ci06MTBGNDcwMDBCRTAwMkI5QkY1MjcyQjVDMDAzNzM3QzM5MzE1NDMwMDQ5Ci06MTBGNDgwMDA1NjM3N0IyOUJGQkM1OUEzN0NBMjM5NENGOTk1MkE2QjBFCi06MTBGNDkwMDBDMkYwQjA3MjFCMjRFM0FDN0Q2ODM0QUI2RkY2QzdGRURDCi06MTBGNEEwMDAwQjU0Nzk2RDc5NzcxMTZCRUY0REU3RDU0MEQ4OTZGNzBFCi06MTBGNEIwMDA5NkU5QjYzQzAzRTc1MDk4Q0RGQjJDMzE5RkU1Q0QwQzg3Ci06MTBGNEMwMDAwNzFFMUNERjBCQzY5OTU4RkU2REMyOEI0RkUwMkQxMTM1Ci06MTBGNEQwMDAxQzdBRjkyMDg2OTdENkU3MTU0NjY5MDA5NzZFNEM0NzQ3Ci06MTBGNEUwMDBGODJBMDI2RTNEQzk1OEUzQUNDMEVDMjkzMDlDOEQxQjU0Ci06MTBGNEYwMDA4QTAxQjA3QTg5REIwMTZFNjU3MDBGMEI0QzdBMDM0MjhBCi06MTBGNTAwMDAwMEY3QjFGRTVCNTlGRjRBQThGNTQ1MEYyQjVGNTVFRTlBCi06MTBGNTEwMDBENjE1QzRDQjBFRjUyRjlENkMwQzJGRkI4Nzc4M0I3MzUzCi06MTBGNTIwMDAwM0NGQTdFN0M1RjI5Njc5MEUwMzRCMzk2QkZGQ0I4MjY5Ci06MTBGNTMwMDAzQjVFOTQxODFDODkwQUI3RUU5MUQyRTM3NEQzQTU5NzY5Ci06MTBGNTQwMDBGRTg3QjREOUYzQ0VGRTJCNzRBMzE2RjlENEVDNzcwODVBCi06MTBGNTUwMDA0NDk3Njk4MTJGNkVCRjY3MzFEQ0Y2Mjk0Q0Y3NkI4RUJCCi06MTBGNTYwMDBEMzZCQkY4Q0ZDNTFENjc2QzgwNjQ4QTZDQTMzQzdBOTUwCi06MTBGNTcwMDBEMDIzOTNFM0FDQkM2MjgzMEFDOTcyRkVCRDg4Qzk0MzQxCi06MTBGNTgwMDAwNUZGMTU1Njk2RDVGQTYzNTU5OUYwODA3NTlDNDE2OTJCCi06MTBGNTkwMDBCQTU0RThFRTk5MzJFMzhCOEE4QUNCRTY0QjhDNkZBMEEzCi06MTBGNUEwMDBDRDQyRTc0MTlDNDE1MTVFRDYzNjZCQzQ4RjM3Mzc1NzA5Ci06MTBGNUIwMDA1MkJBQUQ1OTZCMjdGOUY5NDg5OURFNUU5NTI5ODc3RkQ0Ci06MTBGNUMwMDA0NTNEQzVEQURERTIwMkUyQzNGODc2NDg2RTk3QjBCRjhBCi06MTBGNUQwMDBFOEY0OTkyQ0JGNjY2NDcxRjU0RDNBRTZBN0NCQTgxN0ZECi06MTBGNUUwMDA0Q0ZFNUUyM0U5QzRERjcxQzZERkE4RkY5Q0YyNzFCMzU1Ci06MTBGNUYwMDBDQkY4MEFGNkI3NkFBNDJDMkQ0MzNDNTc3MDdFQUY3MDQ3Ci06MTBGNjAwMDBBNUJDODNCMURGQjY0MTIzRTNEODRGRTQ3NzlENThBRjYzCi06MTBGNjEwMDA2MkM4NTA1RDYxRTMwRUFCRTBGQ0ZGQ0IzMTc3Nzg1MUZGCi06MTBGNjIwMDAwRjc2Q0Y3RjcxNzE3QkM1Mjg4MDdDMDcxRjY4QTdDOEM0Ci06MTBGNjMwMDAwN0RBRjg5RUY5QzAxQ0U3RDM5Njg3Q0Y4RUJGREE3QTM3Ci06MTBGNjQwMDBFNEFGMzU5MTVCREY0MEJEQjFBRDgyRUIwRDI3NUMyNUFBCi06MTBGNjUwMDAwMzUzRTE2ODIwOTNERjJBMkExODlGMjE5RDIyM0RGMzVFCi06MTBGNjYwMDA5OTMzQkRCRDM5MDlBRjMyMUVCQUFEMzk0QzdDQjdBRTQ2Ci06MTBGNjcwMDA1OUE3NzRCNUUwNDMxN0YyNTQwOUNCMEIzRTg0QTJEMUNECi06MTBGNjgwMDA5NENGQjk1RUMxNTI1QThGRkE0RTRCNDI4Q0MxNzkxQjRFCi06MTBGNjkwMDBGMkU3QjlGODdEQjk2MTk0QjFFNjk1NjYxRTUyMzJEM0FFCi06MTBGNkEwMDBGREVCQjBCQzk0RjIwNjk0MjE3RjlBRTU4RkM0MERENjkxCi06MTBGNkIwMDBCRTUwRDQ5RjI0M0QxMjRGMzAyNERERTZFM0Y5Qzk1MkY5Ci06MTBGNkMwMDA5NzExMkZCM0I2NUY2RDE4RTNEM0Y1NTkzRTU1NUI2MUMzCi06MTBGNkQwMDBFRDhGRjU1RjY1ODVFNzE5QUE2RkY2NTcyRjFEMzZFMkE2Ci06MTBGNkUwMDAyQ0JGQ0VDN0ZCNkI5NTVFRkM1Q0ZBQkY0OTZBMEJFMzhGCi06MTBGNkYwMDA0MkIzQ0FEMUNGNEQ2NjNFREU2NjE4NTVFOTcxQ0E5NzRFCi06MTBGNzAwMDAzRTZDQzRBREU1RjBCMEFEQkM2NjY5NUIzQ0NFRjA3NjU2Ci06MTBGNzEwMDAyNzQ0MDc0QjhDQkUyNTUzQTI2MTYwRjRGNzQ1OTM3MUQzCi06MTBGNzIwMDA1QzZBRDNGMDcxN0NBN0U3NzcwN0MxRUJBRkUwRTU1NUUyCi06MTBGNzMwMDBEMkVGOEQ4NDg1M0UxM0E0REZDNDExN0VEM0JFNTEwNDY1Ci06MTBGNzQwMDBCRkNBM0YyRkJCRUUzOUM2QUY0QUJFM0I0Mjc2NDYxMTE5Ci06MTBGNzUwMDBDQjhDNjNFMzREOEI4MUNFRTA5MEMzMzE0MDdEQTA4NEEwCi06MTBGNzYwMDBENUJGNUJFNUMwRTQzRjA2RTc1ODgyQjMyRTNBM0QwN0JDCi06MTBGNzcwMDA5QzcxMkI5QzI2MUNCREMxNkRDMjkxOUI0RkY5Rjg0RTBDCi06MTBGNzgwMDA3RUFBQkQ2NEVDNkZDNzMzMTZGNzc1QjgyMjY4RTdGNTNCCi06MTBGNzkwMDA0MTNDMzEzRDAwMUZERTY2QjhEOEY3M0U1MzE5RUU3NTg3Ci06MTBGN0EwMDBBMkRCNzQxODlDRDk2RkQxOTQ1MjQ4NUFENkYxNEY5QjYyCi06MTBGN0IwMDBBRTgzMzEzRjg2RjBGNjFENjk0QzlBQkUyQzNGRDM4QTRBCi06MTBGN0MwMDBDN0IxQTI5RTkzRkZDQ0Y5QjkzM0U2Rjc1RERCRkM0MEVECi06MTBGN0QwMDA2RDBCNDc4M0JEQ0Y2RjlEMkYzMjNEMUFDOEFDRjc0QkUxCi06MTBGN0UwMDA4OURCRDFCNTkzQzY3RTFERjg3OEUwNjFGQUFCMDBDNzFFCi06MTBGN0YwMDBBQjRFOEY1N0YwMTUzNjFFNzZBNjI2QjM4RTU3NThDN0Q4Ci06MTBGODAwMDBDNkYzN0U3NkY4NzRDQUEzMDlBRjJGMDNERURCNkNGMDczCi06MTBGODEwMDBERUU0NjI3MjlCODVGRTlGMzVCQ0E3MkE3RjdFQTY3RkIxCi06MTBGODIwMDA0OUZFMkE3Qjk2QkY0RkJCQkYwMkZDOTVGMUQzQkIyQTkyCi06MTBGODMwMDBBNDJFNjBGODVBNzRBMTM3MTk5N0QyN0FFRUYzQzY1N0ZFCi06MTBGODQwMDAxRjJDNjJGNDVCRjRFQjUxODcyRjkwMzFDM0Y4RkE0QjE1Ci06MTBGODUwMDBFOUYxMTc0QTNBQzE5RDhCQkY3M0NEMDcyMDY5RUJFN0U5Ci06MTBGODYwMDBGRkQ1N0M3MkUxRjVCM0Q2NDNBN0FBNUY5N0ZEQzE0RkUwCi06MTBGODcwMDBGQkJCRTUxNTkwNDQ3OTVBN0VGMDQyREE2NzJFN0Y2RTI1Ci06MTBGODgwMDA2MjNGNjBGREI4NUFDRjA2ODM0REFBNDBEODE5Q0JEMTRDCi06MTBGODkwMDBDRUMwRkVFQjRFQ0RDRUI4QTkxOURBNUI5OEQxRjU1OEEzCi06MTBGOEEwMDAyODRBNzZEMTcyMDlBOEZEMUE2NkI3MjU5OUZEMzJGQTYxCi06MTBGOEIwMDBGOTZEREU5OTAxQjJBQjI4NURFRTAyQjI2MzQ2M0Y3RjdGCi06MTBGOEMwMDA0MDlCQzhBNkUwMUY1MjM4MTI3OTdGQjlDRkZDN0U2OEYyCi06MTBGOEQwMDAzMkRBQjlBQjJCRDg3N0M2MUFDQjgzQkMzRkY2M0Q4QTU4Ci06MTBGOEUwMDBGNUYzODZGMEVGQjlFMENBQUI2NEYwNThGMEVFNzMyNzk5Ci06MTBGOEYwMDA2M0Q5RjRFMzk3NjU5OUYwQjM1MUQ4NUQzN0EzRERDNUJCCi06MTBGOTAwMDAxNEIyQ0ZERjE2NDNCQkRBNUZFQ0Q2Qjc0QTk5RURBNjQ3Ci06MTBGOTEwMDBDQkRDRUU1RjNGRTQyNzcxNzQ2OUFDNDJGQjhEQ0Q3Rjk5Ci06MTBGOTIwMDBGRkE1Rjc0MTY3MTVBRTgzNkQ4NjhDRUQyM0RDMzVCMEZFCi06MTBGOTMwMDBEMUIxREUwN0QwODZBMzc1MzMyQzRENjQ2QkE2REY5MTYxCi06MTBGOTQwMDBCRkQ5QUMxRkQ3MjdBMEJEMTZBQUU0RTUxMzk2OUQzRkVCCi06MTBGOTUwMDAyMTYxMkQ4NzExMTM3MEREMzVDQkFGNUMzNjg2Q0E0QjI0Ci06MTBGOTYwMDBCQ0QxMTdDN0IzRjE0Qjk4RkU0QzMwM0M5NUE4NkQ1MkYzCi06MTBGOTcwMDAxM0QxMzMzQkJGQUNCRkNBM0IzREM5NjA1ODdGRTkxREMzCi06MTBGOTgwMDBFNTU3NjVDMTEzQTMyMkQxRDlDQzk3RDZEQkU1NkJBMzhDCi06MTBGOTkwMDBDMERCQ0QwMjhGNjE5NDcxOEI1RUYzRjFBQUREN0FDRDZECi06MTBGOUEwMDA3NzI2RDc2QkZFQ0FCNkE1ODhFN0QyN0E4OEEwOURCRDE4Ci06MTBGOUIwMDA5RUUxMkY2NjE5REY1NzY5RDc2RjI1QUE3RDVFOUZENTE3Ci06MTBGOUMwMDA3Q0VFMDRFMzBBQjk2RkVFRkU5REYyNzUyN0M0NjY2MjExCi06MTBGOUQwMDBGRDEyQjE4RUZCMkI5MzUyQUNBQUY3RjkzQkU3OUI2QjYwCi06MTBGOUUwMDBERTVGMTVGODY0RTMyQ0NDMzZDRUU3ODU5NzkyMDAxQkRBCi06MTBGOUYwMDA2N0Y0QTczRjhFQkZERUFFMjc0RjE1RUZEMEIwQ0RDMDY2Ci06MTBGQTAwMDA3RDM1OUE5QUI4NkZGNjQxNUQyNDQ1RkJCOTFCQzkwRjQ1Ci06MTBGQTEwMDA3N0JEODAxRDYyMUIzNUI0NkIxMjAwNTlGNTk5NUFFMTEwCi06MTBGQTIwMDA0RUZCRDNGMDdGQ0E4Q0ZDNkM3NDMxRDNDNTJGQkY1MzBGCi06MTBGQTMwMDA3MEMwNTIzRjI5MDc4QkZFOUVDNzdFMzkwN0NFMzlBOTc5Ci06MTBGQTQwMDBBNERCODNGMEY3QTkyNjFDODE0MkRCQkNERTZGM0U1NkE3Ci06MTBGQTUwMDA3MDAwRkQ3MkRBRDQ3Q0U4NjFCQ0VENEM4RkE2OTg3QzE2Ci06MTBGQTYwMDBERERCRUM4NTE0OTNBRjJEQ0QxQUU1N0ZDOEU0MEREMzEzCi06MTBGQTcwMDA3Qjk4RkM2MTdBMzdEQjJGNjJGOUM2RTYwOEU1RUY2QzBDCi06MTBGQTgwMDAxRTRCRTlFRENEMDY3REJGQUQ3OTMyRTVENzM1NDcyOTZGCi06MTBGQTkwMDBCRkI2NzkzQUU1QkJGMUY5MjExQkFGNDZGMDJCOUJDNzA2Ci06MTBGQUEwMDA5MDhBNjQ1QzQ2M0ZFRDY4ODgzMDMwNjEyNTdFQjdDMDNGCi06MTBGQUIwMDA3RkIzM0NFMTY5MTlGRDlFRDM3REU0REYwODA4RkY4NjMyCi06MTBGQUMwMDA5RkQxNzczMEI2M0JBNEMwNzZDODNEQUYwNENFOEJDMTgyCi06MTBGQUQwMDBGMTE1NDVFNkZFNTNCNTkyRTRDNTZGQ0FDQjdBMjBCRjU3Ci06MTBGQUUwMDA4QTJGQzJENjJEQTY3MkQ1ODJCQTQyRTQ3NzVGODQ3RjcwCi06MTBGQUYwMDAwRjU0QUE0OTc0QzEwNDgxNjBDNDBEN0M3MjdCMzk5NThFCi06MTBGQjAwMDBBNzdDQzNBOTBCMTVGQjFCMjFGOEEzMzUyMDUzQkQzNURBCi06MTBGQjEwMDAzQjc4N0Y0RTNFMTk1MUJENEI2NjE0MDM2RjUwRTVGNTlGCi06MTBGQjIwMDA5MjdDQkRBQzFBNzUyQjdENkZENTY0MUE3N0NEMDZERTNECi06MTBGQjMwMDBERTU3QzlGOEM2QzJCNzYxNjUxMENENjM2N0U4NDA2OTkyCi06MTBGQjQwMDAzOTFCRUZDN0MxRkQ4MzA2QjM3NDFEREJEQUUwRkE3NTFDCi06MTBGQjUwMDBFRjlBQUQ4NTMzMkQ3RTI0QUZDMkVERjM2MERERDZBOURCCi06MTBGQjYwMDAxNUFDMUUxQkQ2QzA3MTk1MzVGRUU0RDY3MkEyODc4MkY1Ci06MTBGQjcwMDBGMDlERTVFM0YwMDdCRDdDREU0QTAzMjQ3MTVEMzJDQkU2Ci06MTBGQjgwMDBDRjJFRTAzMDA0QjU4ODExQURCMjdDMTc4QTI3QTgyN0E0Ci06MTBGQjkwMDA5N0Y5QjE1RDJCNDRCNkVBRTlGMjRBQjM5RDYxNkY1NzFDCi06MTBGQkEwMDA2OUI2OEJCN0VGQTc3NjRCNTgzQjQ4OTcwRjJCMTBGMEYxCi06MTBGQkIwMDBDMDQ4NUJCQjYxMjY5Q0IwNENBNjc2NzE3QkJCQTFBMjAyCi06MTBGQkMwMDA5RDM5RkY2MURCM0EyNEFCOUMwRERERDAyOTcxQjlCMUMxCi06MTBGQkQwMDBEMzI1MTdGRjhDMDAyMUI3RkJFM0QyNDlDNDQ3M0JDRkE1Ci06MTBGQkUwMDA0QjkyQjdGNTI0MjNENUQ5M0JFQzcyM0QyQ0U5OTBGMzI5Ci06MTBGQkYwMDAwRDZFOUIxRjNEOEFCMkNCRThCMTU2RDA2QjUzNTM3NjQ2Ci06MTBGQzAwMDA3QUFENTU4RjFENDRGQjQ0RDlBMURBRjA2OUQyNjlBREI0Ci06MTBGQzEwMDA1N0QwQjFDOTRFNDc5MzRFNkIzNTQxQzdBODgzOEUwMjZBCi06MTBGQzIwMDBFRjZCNEQ3QUNEQzg0RUFGQjUzOUU4QjVENkE0NTdDQ0Y5Ci06MTBGQzMwMDBERUNFQTREN0RBMUNGNDVBNkJEMjZCNUE3NjdBMzlFOTQ1Ci06MTBGQzQwMDAzMTZDNUI4Q0Q2OUQzNEREMjI5NEZGQUNFOEUxRDQwQkEzCi06MTBGQzUwMDBDRkM5M0E3RDk3RDcxQkRBMDRENDBGRjUyQURGMjc1NTkxCi06MTBGQzYwMDBBNjAwRjcwMzUwNTZEODhCREQxQTE3RjY0OTEzRTBCQUYxCi06MTBGQzcwMDA3MDBCRkU2QUIxQ0JFRjc1RjNGQzk1ODlDMzEzRDAwRTAwCi06MTBGQzgwMDAwRjc1REJFMUZCMjdBMDNGNkM5MzI4QkYyRTcxODJDQTYyCi06MTBGQzkwMDAxRjk3QTMzMTg1RkE0QkYyRjExREY4RjI0NDkzQjA4MTFFCi06MTBGQ0EwMDA4MTU0QUU2QTE3NTczMEJFMjg1RjIzNDdFMjE2MzlGMEY5Ci06MTBGQ0IwMDA4MDg5MjcxMEU3MzdBN0M2RkYwMDVDRkYyMDc4MjcwNzU5Ci06MTBGQ0MwMDA5RjEyOUNENzJCODRDRjI0Q0QzQjAzNEVCNkJGRENDMDA0Ci06MTBGQ0QwMDBGNjM1QTU4MkJGNEI5QjE4OUNGMEU5QzMwOUY1N0NCREE2Ci06MTBGQ0UwMDBFODVFOUY4NTlERTQ4MkVDRkQ1NEFDOTE2RDdBNzY1MDgwCi06MTBGQ0YwMDA4QkRGOTZENzk3MTREQUYyNjcyQzJBQjVGMTU1NTlDM0UyCi06MTBGRDAwMDAyMDVCQkVCNEZFMkM1QjNFM0NBM0RBOTYyRjlFNzZBRTAzCi06MTBGRDEwMDBBREJGQTIyOUI1QjZGMjBDN0UxMUY5NkRDQTRCNEI2RDgxCi06MTBGRDIwMDBGQzEyMUY1QThCRkJCNjREQTI3QzQ3NjI2ODJERUVEQjlFCi06MTBGRDMwMDA3QTJCRkZGQTU1QUFFMTY1Rjg1NzhCRENCNEZFMzAwQTNFCi06MTBGRDQwMDAxMjdFNEM3Q0U1NkIxMDc3QTNCQzE2MDU5MjE3QjE3MjNFCi06MTBGRDUwMDBCRjY2QzRDOTFGQTAxOTgwNzY4NEFDQzUyOEVGMEFEQjMyCi06MTBGRDYwMDBEN0E3QUZBMUExQzRGOEY0RUJFQjU0RThBNTdGRTNFMzc4Ci06MTBGRDcwMDBGNERGREJCQzlDRkM2MkFFRUY0QTExNUY0RkQ3QjFFRDA0Ci06MTBGRDgwMDA5Mjg0RTcyMjRDM0ZFMjNBRUU2MjY2OEUyRjg0N0MyMTE5Ci06MTBGRDkwMDBGODg3RjEzM0VBMTU0RDk1ODRGQzlFOUU5QzBENkNCNTU5Ci06MTBGREEwMDBFQjlCMDE3MTdCQkVGRjYyRkI3QzRFOTVCRjNGMkZGOTQxCi06MTBGREIwMDBFRDBEN0Y2QjIxMTI1NzRFMDE3RjExNTUxMkU3RDVBNzJDCi06MTBGREMwMDAyN0ZGRTExOTc2RkMxNDRGNzMzQkU0QzRBMUNGM0Y2N0QyCi06MTBGREQwMDBGQ0I1OThFQjA1NjhCNUI4RkUwNjVBQjgwRkU1REUzNUY4Ci06MTBGREUwMDBGQkI1NTgxNkZDOTlGQ0IyQUVBRURBNkZCNTQzMjA2MjkzCi06MTBGREYwMDA5OUQ3QTBGNDM4OTQ1N0IyRTVCRjY4N0M5MjlDNDBGNjNFCi06MTBGRTAwMDBGMTVDMzZGRjcyQjQ2MzcyQ0M1RkQwN0JFREY4RkRCRTVGCi06MTBGRTEwMDA3RkE1RjlBN0U5RkM4M0QzNkExRkVFODZCNzRDQTNGRDQzCi06MTBGRTIwMDA5QTk5NzdFQ0NCMzJEQkM3QjlCRTg5Rjk2NEFCOUU2NDkzCi06MTBGRTMwMDAzRjk1MkFFM0IzMTBGODIzODhFN0Y3N0RBMUUxOTBDRjNGCi06MTBGRTQwMDBGNjg3NUU5RTdFRDZGQkI2N0JFQkY4N0UyNkZFNzI1RTY0Ci06MTBGRTUwMDA3MjA4RTI1M0M0NzFEQ0YyRjI5NzkyNDRGN0YxMzJEQzlCCi06MTBGRTYwMDA4MUU1NTUzMjk1REZFMDBGNkQ0NUI4QkVBOUM0NkU1MEVGCi06MTBGRTcwMDBGQjIyQkM2NzI0RjFCQzE4RDQ0RTZERUE5NzJDRjMxNDE2Ci06MTBGRTgwMDA3NjkxMzlGRjVDRjZEMUIyOTZFQkVDRUIxOTRDQUJCNTQxCi06MTBGRTkwMDBGMkUzOUQyRDJCQTk5Q0Q5MUQyRDJBRDFFQjhCNjIxRjNFCi06MTBGRUEwMDBFNTg0NzNBM0ZBMDVCNjhGQ0NGMzAxNjdGQjdGMTVGQkRFCi06MTBGRUIwMDBFOEEwREFCMENDNkUxRkVERTE3NDEwRTVDRkI1RUNBOTg3Ci06MTBGRUMwMDAzRDk1NzJEMzNFRjIwN0RDNjIxRkVGQjA1RjJBOTk3RDQ5Ci06MTBGRUQwMDA4NEU3NDcwMTYxQkY1NDI2Qzk1RUYxNTUyNkI5RkQ1MjNBCi06MTBGRUUwMDA2OURBMzNGNkY1RUExQTM0NDBDN0E0RURBMzFFRkEzN0VGCi06MTBGRUYwMDAzRTRFRkZCRENEMkJEN0ZBRUUwQjk4RjY1MTFCQjc4RkI4Ci06MTBGRjAwMDAxOEVFMzFDRTQ0QTlFNDdFMEVDNUIxQkU4Rjc2RTU1ODE5Ci06MTBGRjEwMDBERkZGRDdEODQ3RDlFNUI3MzdGQ0FEODUzNjZFMUZGNTdCCi06MTBGRjIwMDA4MkJGNjlCOUYwRjcyRjZFMUZFRDUwRTFGRjMzRkIyODU4Ci06MTBGRjMwMDAxNzlGRkNFRkI2OEZEMjc0RkU3NEVDMUNBNzVENjNEQURBCi06MTBGRjQwMDAxMTlGQjU3RDYzREEyN0NDOEVBOTU0NTE2RTk5OUQ4NTlBCi06MTBGRjUwMDA3NkNDRkI3MkJCRjcwRTM2OUYxQjk0NEUyRjJFOEFCN0MyCi06MTBGRjYwMDAwQTc5NURBQzQ2RDdCOTY4RkRFRTI0N0ZGRjA2RDRFNzc5Ci06MTBGRjcwMDA3RDg1OUVDNUY2MDExMTlGQTc0NjAwRUQ5REM1NkE2QzYzCi06MTBGRjgwMDA4M0NCNzIwRUExMDQzQUI1NThFMDhCODcwNzY2RTdEOTk4Ci06MTBGRjkwMDBFNzJGRjA2MkUyNjFCN0FCNDBEMEJCRTk5QzI4OUZENzY2Ci06MTBGRkEwMDBBMzg0MDdFOEU0NzY4Q0RBRTlDNUY0NDlCMUJFREQ5QkE5Ci06MTBGRkIwMDA4MTBGMjBCQjUxMTlBQjI3NTExRkIwRjY0RkJBRkFEQUE3Ci06MTBGRkMwMDBGMEUyQjVFMTg1QUQ0MzdDM0M1MEEyMzZCQjkxQTdGRTgzCi06MTBGRkQwMDBEMTlBODRGRTcyOTZFRDQwRkVBNUYzNzIxREZEQzI2REFFCi06MTBGRkUwMDA5Mzg3MzJGOEZCQzQ1NjVDODNGMTk4QzE5NzJGN0UwMzQ4Ci06MTBGRkYwMDBFMzFBRkI3NENFQTRGOEM2OTZBQUVBODNCNUFDNUU3RTdCCi06MDIwMDAwMDIyMDAwREMKLToxMDAwMDAwMDQ0QkI3NDkyOEVFQjJBOTA1RjcxMTU3NjQ2RUIyNjI0RTIKLToxMDAwMTAwMDI2MDRDNDM5NEUyOUMwNkY5NjlGMTBFQkE2MDE3NkJCMEIKLToxMDAwMjAwMDVDRDY1NUQzOUYzNDI4QjdCQ0IwMUZFOUE0MjdCMzdENTUKLToxMDAwMzAwMDJFRjk3MDU5RTU5QUU0RjNEQTUzOTM0RkExRjdFM0VDMDQKLToxMDAwNDAwMDFGRUE4QjAyNDczRkY5ODY3RDVEMDg4MjI1Q0ZDQTNGQjQKLToxMDAwNTAwMDEwN0NDQzJDOTRDRjY1M0MwRDZFRjVFQThDM0Y1QzE1ODIKLToxMDAwNjAwMEIyODZGMTkxRjlBMDE1MjBGRkY5RUI1NDQ4QTFGRkE1NDQKLToxMDAwNzAwMEU4NTgxQzVEQjBCREQxQTUwNUZERTg3QzNGMEE5NzVBNDQKLToxMDAwODAwMEY2MTM0MTM3OTdEN0YwQUM5NkYyMTVBQ0RGMTNBMzc5OEUKLToxMDAwOTAwMEZDN0QxRjhERkQ1NzlEMzk5RkQ1NDJCRUJBRjM1NTVCNDAKLToxMDAwQTAwMEU5REMzNEMxRjg2OTEwREZERkQwM0Q4MjU1MTVCQjM0N0YKLToxMDAwQjAwMEFCOUUxRUUxOTY2Q0Y3MDgyQ0ZCMzY1REFEMTFGNjM0NTUKLToxMDAwQzAwMEMzOEY1MjIxMUI2ODA3N0M1MkZFNTAzRTI2N0ZFNDREQjEKLToxMDAwRDAwMEIxREIwOUE3NEJBRkYxRTI1RUM1QTlGMkM3MjcxRENGN0YKLToxMDAwRTAwMEE0NkJBNjVDMkQxNTc0QURGN0EyRERCRjIyM0NCNUM3OEQKLToxMDAwRjAwMDczRDQ0Q0JBREU0QTc0RjU1NzgwOTFDQ0QyRkYwNEI3NjIKLToxMDAxMDAwMDk0MzU3RUQ2QjkzRjcyREFFQjRBQkY5QUU5NUI3QUEyQTAKLToxMDAxMTAwMDVCOTFEM0FFRTVGREZBMTYyQkZBNUY1MTc5QTkxQUFEQzIKLToxMDAxMjAwMDAzNUVEMURGMkFGREQ2MzhFQUNGMTNBODEzMTkzRTk0MTcKLToxMDAxMzAwMEI2OTEyOTcxRkUxOEQ5Q0VBQjUwRkM4NzRGMzc0ODlGMzYKLToxMDAxNDAwMEQyNzk3NzREMUEzRTc3OTk3REJGQTYxNkY5RUQ3NkUxMDMKLToxMDAxNTAwMEY0Qjg2NDg1REZCN0Q4NEQ3MDc4NzEzQ0Q0RDMxQUQwMjkKLToxMDAxNjAwMEI5QTcxQUUwRkVCRDhDRkRBM0MzNkU1ODU5NTY5RDM1NDQKLToxMDAxNzAwMENFNDBGREI0RjZBQkQzRUNGMDlFNzJCQjgwQUFGRkREOUYKLToxMDAxODAwMDZDOTM0NTRGQTdEQkE5RjA3NzhCM0RCNTA2RjlERDQyQUYKLToxMDAxOTAwMEZGMTUyRUQ4MjNCMTc1MzgxMUJFMEM2MjNBQ0I2MzUxQ0UKLToxMDAxQTAwMDA5NDAyQkE2RTM5MDBGQUJCOTdEQjc0M0EyRjM2MDEyRDEKLToxMDAxQjAwMDY5MURGRkUzRTc0NDU3Qjg3NUVBNDdGNkM2MDg0RjRBOUEKLToxMDAxQzAwMEMwMDBBQUFGOUZEQTM5RDJGQjAzNzhEQ0QyMjAwOTZDRDkKLToxMDAxRDAwMEY1MUY3NEJCQTk1Qzg1Mjg2MDlDRTJGQkFGNUMxNEE2OEMKLToxMDAxRTAwMDdFMERGNkE5MjYwRDg3QjNERjJCRENCMTA3REREODRFRDcKLToxMDAxRjAwMEUzRjA2MDAzNUFDN0M3NzJCRjQwRDhDQkRCQkQzRjczODMKLToxMDAyMDAwMDJBQzU3MUU1ODI2RjQzMzMzRjVGRUZDRThCQjgyQzY4MTAKLToxMDAyMTAwMDNEQjVCOEFFRjdEOTk4MUQ1NUM0RkY3RURDRDc0MjFCNUIKLToxMDAyMjAwMEI3ODcwNjBBOUE2RDU5NTI0OERGQjdCNEY0MkNFNzc3QkUKLToxMDAyMzAwMDA5MzlERjhDRjY5MTg3RUU1NUQ4RTQ3RTlCODgzN0RCNTEKLToxMDAyNDAwMDJFODFFRDlFQzUxMDBGOEZDRjdBNEJDOEZEMTY2RkRDNDcKLToxMDAyNTAwMDQ3RjcxNTlFNTlFNTFCOEFGMTJFODc5NDg4OEZFMUExRjcKLToxMDAyNjAwMEUyMkFBMzMwRDYwMzFFODZCNEQ5RTVFRDc0RTMzQjVFRTMKLToxMDAyNzAwMDc2Njc4RkVGQzhENURFOENFQkY4QTQ3ODIxREJBQzE0NjEKLToxMDAyODAwMEYxMzAzQjQxRkI5NkQ0MDUyNDlGMjU4MjZGNEFEOEZFNkUKLToxMDAyOTAwMDA1RjVEMEMwMzgyNDc1QUNGQkUxNDlCMEYyMDdGQkQ5QjUKLToxMDAyQTAwMDhGN0U4QUQyN0EzNjE2RDIyQjI2RDNCOTc0RTlFREVFMzgKLToxMDAyQjAwMEE0NENGMkFFREQ4NEVEQzM4NzE0MUU2QjA4NDY2MDY2NjUKLToxMDAyQzAwMDBEQjEyQUI1MEYyQkNGNEQ0MDUxMUIyQ0VDMzM1ODYzODkKLToxMDAyRDAwMEJGNzc1MUI2QzQ3RTVGQUFENDcxNEYyMjhDRjY1RDA4RjkKLToxMDAyRTAwMEZEQUU5NjdBRTU5RjlDMUUyMTBGQTNDN0Q5OUYzRjNEODcKLToxMDAyRjAwMEI2QTk4NjVGQjNCNEFGOTAyMERBOUVBNUJGMEEwRkI3NDgKLToxMDAzMDAwMDNCMkFENkFERTc3MTYwRjUwMTc4RDVCMjVGREMyRTE5RDYKLToxMDAzMTAwMDg1QjgxODZDNkVEQkJBMTRDRkQ5RTJGNTEwMTlDMkYwQUIKLToxMDAzMjAwMEREQkYwMTY0MkIxRjhGRjJFNDUxM0YyRTMwRTI2NzMyQjQKLToxMDAzMzAwMEJDMkRGRkY2NjU5RDRGMjE1REM3ODM0RDhGNjVEMTFGOTUKLToxMDAzNDAwMEEzM0M0QzVFNUM0NTVDN0Y2QzZCOUJDQUQzMEYxNTVBMUIKLToxMDAzNTAwMDNGQzI0QjIwQjk4QzgxNTgxNzhCMkQ3NTIxRkRFNzAyQzgKLToxMDAzNjAwMEM1QTE4N0VCOUJGNjYxN0M3NTQ5MDM0NDcwMThDNjU3OUQKLToxMDAzNzAwMEM0NUZFMUU5OTAzNDg4NUZFMDUwOThGMUM3MDAzRTE1MTIKLToxMDAzODAwMDE4ODA3QzgxRUJDRjIyNEU1RjkzMkY0QTFCRUNGNzZERDgKLToxMDAzOTAwMEMyRjVGNjdDQjFCMEZCOEI5REY3QjcxQ0ZEOTRFOEZDNzEKLToxMDAzQTAwMDFFOTRCRTQ0MDZCQ0Y3MDdEM0VDRjc2REMyRDA3OUZGQUMKLToxMDAzQjAwMDhGMTBCRTAzODE0ODBBRjkzNUVFMThDN0QxQkYwQUIxQzQKLToxMDAzQzAwMENCM0MwQzlGOEY3RDdGQ0EyRkNGNjRGNTdGQjhBNEI2M0UKLToxMDAzRDAwMDBGRTI2NThCMzc5QTRGRjc4QTVBQjNDNzlENjVGMEFCMkEKLToxMDAzRTAwMDY5NzdFNEE4OUZENkEzNzE1QjVDQjMzMzVEMzFBNEY4NTEKLToxMDAzRjAwMEJBNTkwQzhFNTU0MTAzNDhBRkM1QUYyMEZEQUUwOEY5ODAKLToxMDA0MDAwMDdEQTZFNDMyMkZDNjkzMkUwRjU0NTM3Q0Q4M0VDQ0IzMzYKLToxMDA0MTAwMDc0Nzk3ODY4M0Y2QkJDOTgyMkUyNzdDRDdDNDJFODUzRDAKLToxMDA0MjAwMEU3NzhENzdCQjgxRUZEM0IxOEQ3MjMxRTQ2N0E2MjYxNUEKLToxMDA0MzAwMDlDQjcyQjVDRkNFODRDOURDRTBCOEQ2NDk2NzY3MzNDOTAKLToxMDA0NDAwMDdFNkU1RkVBRUEzRkFERjg2NzBCQjg0NjcyMDg3MDVBRjUKLToxMDA0NTAwMEZFODU1OTlFNTgyQkYyNjdCQzk2NkQyNzkwRkYwNzQxODkKLToxMDA0NjAwMDMyODFGNDZGNkExMzdFRjdFRTdBMzc4QjdBNzFCQzc3M0MKLToxMDA0NzAwMEQ5NUQyRkQ2MDZENjdEMjdBQjc3MkJDRTg3RDUzMzZDQUIKLToxMDA0ODAwMEY1QTIxOUY1RUUxNEY1QzAzNkFFOTEzMUVFMjYxMzNFMDUKLToxMDA0OTAwMEIwRjYxN0M5RTg2RjhCRTg4RkVDQzFFRTdBN0E0NjdGMjkKLToxMDA0QTAwMEY3ODlGRTBDNUIzRDJEQTNERTgzMjY3Q0I2NzFDMTNFMzEKLToxMDA0QjAwMDZFNzdGOTU5RUU2NDgyRjQzNjhGQTdERjNGNjQxMkYxNEMKLToxMDA0QzAwMENCODEyMTkzMjZDRjYyRTM1Q0Y3MEI5N0QwMTE1N0QyRjMKLToxMDA0RDAwMEJBNkRGMkQ1M0U1MUFGMDVGOUFBOEFFMkYwNUExQkYwODcKLToxMDA0RTAwMDFFQjBCODI3OUMwODRDRjVDNjJDREZCQkY5MkEzMDU1NDYKLToxMDA0RjAwMENCRkU3RDk2QURCRURBRUEwMzYzMTQ3REE3RkEyRDFGMEQKLToxMDA1MDAwMDI5M0NCRTM5NUU1MDg3RkVCODk1NDVCMjg4NzdGRTVCQzAKLToxMDA1MTAwMEMyNTA5OTFFRUJBQkRBRjJBRDYxNUUzRURDRkJCNzQ0MzQKLToxMDA1MjAwMDFDRUYxNDg5N0IzMDRDNTczRTU5NjU5MUVGRUVGMTNGM0IKLToxMDA1MzAwMDJGRjhDNTc5NDYxQUZFNzcxMzQ2ODUxNTdFOUUzN0UxNUEKLToxMDA1NDAwMDM3RjNERTEyNUU1RURERkFFRTQ0QkM1ODY1REUwMzE4NUEKLToxMDA1NTAwMERDREFBNzg1RkMxNzVGRDhGOTQ5MkRGNkY5RjE3QzdBMkEKLToxMDA1NjAwMDdFM0M2RkNFNkY3NEFCNTRGN0FGMzVCRkZDMTYzQkZGQ0MKLToxMDA1NzAwMEYxN0M3QTdFM0M2RkNFQUZBNjM1RkZCNEU2RTdBQzg3NjAKLToxMDA1ODAwMEY3OTU1MENGQUYxQTcyNUYxOEQ3OUQ1NUI4OTBCMjdFQ0QKLToxMDA1OTAwMEM3QjZCRTkwNThDQUYyMzdGNTM1RUQ2RDlERjRGQjQ4RUQKLToxMDA1QTAwMDMwQ0VGMjhFRTlCREREQUYzMEY4QUQyRkM2QURGMkYzM0YKLToxMDA1QjAwMDYwMThFMjE2RTdDMTZENjFGNDczQkVFNkQxNDQxQzFERkMKLToxMDA1QzAwMDg3NTNGMURBRjMwMzMxREYzNzlENjdCRkZDMTNENzYxM0YKLToxMDA1RDAwMDBDNTNFNEZCNDk4NzlFRUY2NTVENUI1RUMyRDc5MzE1QzQKLToxMDA1RTAwMEMxODg2QzVERDdDQzM4RTg2N0ZBRDY5MEZFNDk2ODVDNjQKLToxMDA1RjAwMEZGRUNFQjJCRjQ1MTExNUJEN0I4M0Y4RkVBQkI4NEJFMDUKLToxMDA2MDAwMEJBQjU5OUJGMTdEMDI2RUVDMzI2OEFBQTA5M0Y2REU2NzAKLToxMDA2MTAwMDdERDhGODI0OUI3RURCM0Y2MUQyNDFGNDVGMUQzRkM0NEYKLToxMDA2MjAwMERGODk3OEMyQ0JEN0JERTVDREQwQ0VERjNERjBEMkJEREUKLToxMDA2MzAwMEVFQTc1OUJGMzE1NjYxMkZCM0Y3MzBGRDI5QjNGNzMwMUMKLToxMDA2NDAwMERERDMxQ0E2RjQyN0NEM0FBNUJCRDhCODk4M0VEQzFDNTgKLToxMDA2NTAwMDgxMTgxQjdGNjdGMzU4NEFFRjE0RkJBQkRCODVERkY3OEMKLToxMDA2NjAwMENCNDUzMkY5MkRCNjM0MzM0QkQ5ODVGRTVGMkZBNUY3MzQKLToxMDA2NzAwMDM0NkI2QkQ0MjFFOEZGMEQ1M0ZFQjgzNDc1OEU5N0Y2QkEKLToxMDA2ODAwMEFGOUQ4OTdDMDZFNzYzQkZBQkEwN0JFMkUzOEI1NDVBNDYKLToxMDA2OTAwMDdGNDE0RDI5RjlBM0QzREY0REJDMUU5NzZBMUJCMEREMDYKLToxMDA2QTAwMEI5NjE5OUQ3RjMyNjEzQTFFQ0Y1QUVDMTdBNjNDMzJBRDkKLToxMDA2QjAwMEMxMDM4MUI4MTIyQUNBNUFFRjdCQzg1RjM1MDFEMTlGQTYKLToxMDA2QzAwMDE2NEIwNEIzRjc3NzIzRjY1NzFEMTBGRDE1RTk4OTQwNDMKLToxMDA2RDAwMEY2RkVFMkQ4REY3MDhERTMwMUMyOURDQkYyQjJENzVCQUMKLToxMDA2RTAwMDhFRjVBQTM0MzFERkIyOTQ5Qzk3N0REQzlCQjA1RTYxQkQKLToxMDA2RjAwMDYxMUJERERGQjk2MDA2OTAzREVBMkFEMkI3OTBDRjQyOTgKLToxMDA3MDAwMEQ0NEJGNjhEODJDQ0Y4QkNCMDRGNUIxM0Q2M0IzRjE2NzIKLToxMDA3MTAwMDgxNDE2QzdDM0QxNDAxOTlGMUIzMkJDMENBQUJGMDJFMjIKLToxMDA3MjAwMDM5RUI4N0E1RTc0RDYzRTVBQzVFMTJDQkJGNjQyOUM3MDMKLToxMDA3MzAwMEY2MkMxRDM3NURCNENGQjc5NzlCRTNCOTVBQTFGQkZFRUEKLToxMDA3NDAwMDM0NUUxQTc3QjVEOEYzMDUzMjk3Q0YwNzVBQUZBODQzNkUKLToxMDA3NTAwMEI5MkYxMEU3NEZCRkM2M0MxQkQ3QjUwNDRDN0RDNEVCODcKLToxMDA3NjAwMEZCNzlGOTUzNjZGRDEwMkY3RjQ1RTQwQjBCRjlCQzdEMzcKLToxMDA3NzAwMDkzQkMxNDJGN0NDRkY1NDM0QjY2NTVBNUU3M0JFMDdCM0MKLToxMDA3ODAwMDk1QzM2NjU5RTY3N0NGRjdDRTJEOTkxNTQ4Q0Y2N0MwNDgKLToxMDA3OTAwMDBERTM4N0NERUE2MURGRDM2N0IyRENGRDI2MDlFQUFENjAKLToxMDA3QTAwMDgyQjYyQUQyOUYyMzNENTFCMjBGNDdGNkFCMzE1MDlFRkQKLToxMDA3QjAwMDk1MzUxQ0FFQjdCREU1MkRDQjU0ODIyQjRFRjczNDA1RDUKLToxMDA3QzAwMDVDNzcyRkIwQzNENTdGQTExREFFQkIxN0RBRTFFQURGOUUKLToxMDA3RDAwMEQ4MzM1QzRGNzhCOTVFQ0IwNTFGMUJERkIwOEVCRkY5RjUKLToxMDA3RTAwMERGRURFMzlGRjE3REZCRjg5QkJGNkYxRkZGOEMxQjNGOEQKLToxMDA3RjAwMEYxRjgyOTJCNUQzNjVENjMxRkJGRUM1QUZCRjg5QkFFMDkKLToxMDA4MDAwMEI1OEY1Rjc2REQyNzFCRkZEM0IyQzdDRkY3QzZGRUU5RjIKLToxMDA4MTAwMDE1RjZBRTYyQjUzQjlCNjIzNkZCOTRENTNCMjlFQUYxRjcKLToxMDA4MjAwMDczRjQ2RTdCM0M2NkIzNEY1OTNERDUyN0VDNUQ1QkJERTEKLToxMDA4MzAwMDY4NDYzRDlGNEZEOEJCQjY3MThEOEM3MTQzQTJCRjk0NjMKLToxMDA4NDAwMDZDRUQyRjkyRDE1RjFGNTE4RkVFQURBNEVERjE4Q0ZFQjgKLToxMDA4NTAwMEMyNjI1Q0MzNTY0RkNCQTgzN0MwODRDRjM2MkVEOEM3RjAKLToxMDA4NjAwMDA1MTEwNzc2MDNDNjgxNDk0MkRFNTlGREM1MzNEODNFREUKLToxMDA4NzAwMEJCMUNGN0ExNTEwOUY3RkI1QTFGMTg3OTgwN0Q4N0MxNkUKLToxMDA4ODAwMEZDRERBMzgyNDk4QjA3RTI3QTJFNEQ1QTdDMjZBRTdGOEYKLToxMDA4OTAwMEFEMDU2MERCQjc0REYyNzEzRkMyMTg5RjQyQTk5NjA3QzQKLToxMDA4QTAwMDRERTRCRkYzMzY5NTVDNkFCOUY3QkE1OUQ0RUIyRTBGMTUKLToxMDA4QjAwMDM0OTU3Q0MzNTI3RTkxNjhERjJBRUUwREQ2Rjk3RTRCQ0IKLToxMDA4QzAwMEY2ODhENjlGRDVDRkUyMzdCQkQ4RUM0Rjk0NDM1MUE0REUKLToxMDA4RDAwMEMzNjA3MERGNzlDNUQ0MzE1NkZEQkNEOUU3QTJGOTZCOEUKLToxMDA4RTAwMDAzQzVCODY1RDlFMTZBMkRFN0UzREU4M0UzMDZGMEJCMTMKLToxMDA4RjAwMDY5N0YzNDk1MTBCRTM1OUU5QURGNkYwRkNFOTZGRThBQzMKLToxMDA5MDAwMDU4RERFNkE1NzVERDJERDZGNTAyNzdEMzhGQ0ExOTFDMDMKLToxMDA5MTAwMDg5MDEzMkUwRkQ4Njk1NjUzREZCNzM1QTlBRURFNzBCNDAKLToxMDA5MjAwMEFBMTYzNTcwREY1NzNBNTdBQjQ2RjFDOEQ1RUVBRUM5QjcKLToxMDA5MzAwMEYyRTQ2Q0U3MEZGNTYyM0UyRDczNkJEQkYwQkUwRTFDMkMKLToxMDA5NDAwMEIwRkI3MTE5ODM4M0Y1M0VGMjE1RUU1OEJEMkY5QjFGNDYKLToxMDA5NTAwMEI3QzU2QkIzNkYwQThBN0JCRUZGNjVERTkzRUE5RTA3NUQKLToxMDA5NjAwMEVCMjgxQkRENTZGQkM0RjlDODIxQUZDRERFMkEyODk0NDUKLToxMDA5NzAwMDY5REY3OUEyOEE5RjFCNDBCQzg0RkM4NERENzgyREFEQTEKLToxMDA5ODAwMEY1NUFDNzVGRTUxOENGMDc1MzBENUMwNzcwOTk0Mjc5OTgKLToxMDA5OTAwMDcxNTdGMDc3NTVGQzQ1NkQ1QUI5OEVGRTgzMEUzQTBGQUMKLToxMDA5QTAwMDA0NzFERkNERUNCNzI1M0M5NUY2RTMyN0M0M0Q1ODM1RkYKLToxMDA5QjAwMERDMzY4MUZCMUQwNTdDOUFEMDU1NjI5Q0QyMEQyQUE0QTEKLToxMDA5QzAwMEZBQjBCMTVEQjFENUJFMzE1NkJBQzVFOTVFRDBGQkFFNjUKLToxMDA5RDAwMEU0QzVGNERFNTMzOUEzQkY5NDM5RkYzQjdDREM1RjdDNzQKLToxMDA5RTAwMDk3M0VGNUI3RTU1OUU4N0IzNzNBOEIyREZEOTY3RUUwQ0IKLToxMDA5RjAwMDg2RDRBOERDRjVEM0Y1Mzg1Q0REN0MxQjY2RkM4QUYyNzYKLToxMDBBMDAwMEFGMEJCRTc1MUIzRkY0NjU4QkI3MzBGNTgzMzgwNzlGN0UKLToxMDBBMTAwMDM1MTZDNDhGN0VGOTlGRDgzQ0FFM0VFOEUyRUYyRTg4QjMKLToxMDBBMjAwMEZCMzZFNkY5RDBENUMyNkYzQTRCRjg1REVCMjExQUMyMUUKLToxMDBBMzAwMEMyQjc0MUE2N0I0OTZGQzNFRjQyQTMyQ0Y0N0ZEMkU3MzQKLToxMDBBNDAwMEU2NzBCNUJBQzhERjY1OUVGQjVFRDVFNkIyRjlDM0U2Q0YKLToxMDBBNTAwMDZDQjBFNzY3QzNENDYyRDQ1QkIzRDdCQkM4QkY3NkI1MEQKLToxMDBBNjAwMEMzNEZGQkEwOThFRjFDNjg1QTgxNzZCQzc5NkY3Qjk2QzgKLToxMDBBNzAwMDA2MkFCRUNCQjNFMEYxN0I2QUYwN0VENDdFMUZCRkJGRjcKLToxMDBBODAwMEY3MjZFMzFCREQyMjZGRjMwMjQ5MzdERTAzNzg3NUY3QTMKLToxMDBBOTAwMEE4Q0JDRTAzNkM5RjVDNTE4QUZBQjYwMEIyQkVGQkY2QkYKLToxMDBBQTAwMERENTYzQjdDQkRDMUVGODQxNzYwNTk4RjcwQTgzQkE0MTUKLToxMDBBQjAwMEFDRkVBRDBFOUY3OTRFQ0NFOTk1MkJDRUMzOENCQjM4RTYKLToxMDBBQzAwMDJFRjhBOERCMEZGM0U3M0NFMTg3RTFGMTE3QkRCNTdGMTYKLToxMDBBRDAwMEJGOTdGNjBCQkM5RDZFOTQ5RjQ2QjU2OUIyMjRBN0NGMTUKLToxMDBBRTAwMEE3M0NBRTk4RDE5RkNERDNCNTY3NDJBQTNGRDhFQUI1MEYKLToxMDBBRjAwMEY2NUNFRkQ4MjQyMDdERDkxNDQ1M0UzMkVCMkQwNDU2MDgKLToxMDBCMDAwMDBGRTU3MkVGQTU3MTVCQkQwQTU2NkY3MEVFN0E1RDQyMUMKLToxMDBCMTAwMEFGRkU3Q0U3QkQ2RUY0NDdCRUZEQzBFMTRCNTAyRUU3NTMKLToxMDBCMjAwMDNGQTk4MDk3OEREQkI1MzMwODI5REFDNzI2RERCODlGNEEKLToxMDBCMzAwMDlCQjc1QkM5N0E5RTRCMTEwM0FDRkZGOTNGMEVEMjdBOEIKLToxMDBCNDAwMDM5NkY5NzI3Mzk4NUI1OUZGNzkzNTc4NzAzQzM0M0Q3RTUKLToxMDBCNTAwMEIyNjNDRkY2Qzc3NUY3MDE4OTlGQUJDNjNCODdFM0JBOEYKLToxMDBCNjAwMDM2NEY4NUVGNDRCM0Y0RDdEN0NGRjlGMEM4MTM3OUQzMTQKLToxMDBCNzAwMDkxQ0VEMjhFN0Q1NzUyQkZFRDk3QkIzQzE2N0QxMUYwQzIKLToxMDBCODAwMEJCQ0M3QURDMUY3N0JGOTQxQzkyNDU5Rjk4RTc2MDQ3RTcKLToxMDBCOTAwMEVFOTczODdDN0I1QzQ5MUZDMkI3NjM4QjNCQzZFMDY4MkQKLToxMDBCQTAwMERDRjEwRUYxRDVDNDFGM0YxNDQyM0MzNEVFNTE2QzdFOTMKLToxMDBCQjAwMEUyQzYxRDRBQ0EzMzlDRDJDMzFFQkE4RjZBMDRBNDFBNjUKLToxMDBCQzAwMEM0MjdENzhGMEI3NzJGMjBGRkY5QzJGNkQ1RUYyODIxNDYKLToxMDBCRDAwMDZDNkZFNzZGODY5NzQ4MEFGMUZBODIxMjk5ODJGOTQ3OUIKLToxMDBCRTAwMDdGMTREMjE5QUFERUVDRDgxRTQyQkNCMjdFNjdCQUYzREIKLToxMDBCRjAwMEYxMUNEOEVFRjdDNkZFM0YyOENDRUMwRkUwOTgxQkY5QUQKLToxMDBDMDAwMEFCQjE3RDE1MUY2RkY3RDc1RTQzRkREMkU4OTBBMzM3RDgKLToxMDBDMTAwMEYxOTc5MkNDNzM5N0YzRkQ4RTczQjAxRDdENEVDOUJFRDQKLToxMDBDMjAwMDlDRkZEMDg5Q0Q3MTM2RUU5MTVENkY2RDhFMzNGODFCRDAKLToxMDBDMzAwMEZFRkJERENEMzdBMjFERjRCNDRGNDMzREQwRjhDMDdGOUQKLToxMDBDNDAwMDg2QzBCMjZFNUVFRUU3RjJEODc1RkY4RkVFQkI4QkM5NDEKLToxMDBDNTAwMDQ3RDcxRjNEQjQ3RTc0M0RGNURBMTkzQTlCNzdENzIzMDkKLToxMDBDNjAwMEZGQTc1ODY3RjUxNzNENzUyMUY5MEIxNjNEMzZCMTVGQTMKLToxMDBDNzAwMDRGRUIyN0YyNkJEMkZBMkU5OUI4N0ZBRUVGNjFFM0Y0MTcKLToxMDBDODAwMDYzRDlCRDIyNzVEMEU3OTlERDBBRjgxODlDNkZCRkU4REIKLToxMDBDOTAwMEExN0I1MjhERUNEQkUyNkFBNEQ3MDJEMkNCOTg1RkMyNzMKLToxMDBDQTAwMEYwQkM3MEU3Q0E3Nzk0RTFEOUYwMURFRjJGRTNBNTAzRkMKLToxMDBDQjAwMDYwNjIxODQ2N0E3RkUzRUJFNzhGQzZENDQ1RTcyQjhENTkKLToxMDBDQzAwMDcwOENGNEFBQjM1REUzMjE0NkQ3MTFCOUU5NzgwMjNFRUUKLToxMDBDRDAwMDc0NjNEQzRBRTNDRTU1N0NEQzc2NDZDNzUwMjYxRERGQzQKLToxMDBDRTAwMEM2NUZDNjY1RDJGMTdCMEUzQTlFODA4NjFGRTJGOTIwNzAKLToxMDBDRjAwMEVDRUU5M0Y1NUNEODNDM0Y1QkYwRDgzNzdCQjRCNzRDNTcKLToxMDBEMDAwMEJERDAxQjlFRTc0QTFDQUU1QUJGQjFDMjhGRjJCNUVCRjUKLToxMDBEMTAwMEMxRkJFRTJBRTI3NDlFQzIxMEQzRjVEMDg5MzNGMDUyQTMKLToxMDBEMjAwMEY3RUJBRTYzNTdBMjdFM0NGNjk0NDdDM0Y1N0VERTUzRTUKLToxMDBEMzAwMDJGOTBCQzc1M0RGNkJDNUIyN0ZCMUIwMjEyQjMzN0JBODQKLToxMDBENDAwMEEwRkJBNzAzRUQ4Rjg1MTJDRjM0NkUwQkE2M0NBMTM0MTgKLToxMDBENTAwMEJEMTYyNjJGOURBQzg3RThGQjYxRkE5RUU0NzJCMDMwODkKLToxMDBENjAwMEI5NkY5QTk0ODU3RTRGRkJGOTdENkU0OEY2MjVCQzJDQjEKLToxMDBENzAwMEQ4RjYyNzM3OUQ4MzVCRTgyQThENDU3QTFFOUU4NERGNEYKLToxMDBEODAwMDczRDFEMzlDQkY4NkYzM0ZDNzQyRDc2RDVDN0U3M0M5RDYKLToxMDBEOTAwMDY5RDcxNjhGOEE3MTBENEUzQTc3QjlGODNFQTEzMTI5N0QKLToxMDBEQTAwMEJEOTA4REVFRTYzQTc4QkFFN0FBNEYzOEU1NUJDQ0JCNEEKLToxMDBEQjAwMDM3RjlFRTdEM0VBNzg3QUYxRDdFRERDNjM3MjZERThFNzYKLToxMDBEQzAwMDdDOTg1REVGMUZGMjRCMDI4RUE2QzlBNTgzMzNENzQxRjUKLToxMDBERDAwMDE1QTJGMUZFRTU2OTc4OEZEMERCNjQyQzdENDBBMUY3ODgKLToxMDBERTAwMDRFNTdCNDNGNDNGQURCQTkyNzE2RTZCMEIzRkYyNkY0MEIKLToxMDBERjAwMEQzQzIzREZCODZBMzNFM0JCMkZGMDlFMkM3ODUzQjBGNTIKLToxMDBFMDAwMEJCNzE3RkYzRUM4RTQ3REQ5RDU1NjlGRUM3NzVDMUZBNTYKLToxMDBFMTAwMEJFQzU5MTg3RjcwRDI3RkQ4REZENjdBMUNGNzFEMTdGRUQKLToxMDBFMjAwMEUzNUU3QkZGOEQzQkRGQjFGNTNGM0ZERUVFMjZGRjZBRTEKLToxMDBFMzAwMDJGRTNCQ0E5MUE5N0UzN0NERkVDNzAwMUJFOUJGNDY2M0MKLToxMDBFNDAwMEJCMzIzOTlCMURGNDgyNTgxN0JCRTM2QTgyMzUyRkEyNEYKLToxMDBFNTAwMDdGNTIyOTc0RUJBOEZGNUE5NjFBMkZFMEJCODlGMUU3NUQKLToxMDBFNjAwMDVERkNERDRBRDU3OEQxQzNFNDMzNTFFMEQ2NzFERkRCRDgKLToxMDBFNzAwMDEyQkMwQzc0OEIxRTZGNzNFMDUzMkJEMjI2RTA3RTQwQTUKLToxMDBFODAwMEFCOEI4RUI2RUVCRjRDRjgwQjBDRDkwNkZGQTJFMEU0OUMKLToxMDBFOTAwMDdFRjhERTE1RUVFMzc0N0MyNzU2OEQ3MEZGNzU2OEQyMDAKLToxMDBFQTAwMDY0QkFGN0E4Qzk5QTJGRUJCQUNERkI0M0JGMURGMkJGQjYKLToxMDBFQjAwMDRCOTM0MUI3RjBEN0M4ODk5NzlEOEQyRTNCMTU3NERCQjYKLToxMDBFQzAwMDdFNjA1RDFEM0YwRjM2RTdCRjZFMDA2Q0MyQzcyM0Q2NDQKLToxMDBFRDAwMDQ5M0NERTNGN0UzMThGMzMzNEVEM0I3MERDRkY3MkRBMEMKLToxMDBFRTAwMDdCNjAxODNBRUEyMzUyNDczQTFGREZCMERDNzM0RUM3RTMKLToxMDBFRjAwMEYxODIyRTUzM0M3Mzg0MzYwMTJBQzQyODA4QzM4QjcxQjcKLToxMDBGMDAwMEI2ODM3MURGRDU0RTY5ODBBOTM3NENDN0U3MERFMkZDODcKLToxMDBGMTAwMDBEQzcyODdGRUJFNEJGNTBEQzYzNTE1RTc0NjQ1RTVGRjUKLToxMDBGMjAwMENDMTc4QTc3MTQ1MkI0Q0YxM0NGMDY4MDlDNTc1NkQyNzEKLToxMDBGMzAwMDkzM0U4MDNBRjU4OEQ1OUZFNDgxNERCNDlGNDE3N0U2OTIKLToxMDBGNDAwMEM5M0U2OUJDOThGMTc2NjZCRkVCN0NFMzI1NUM4RjcwODcKLToxMDBGNTAwMDlFRkRGMTlEMzY3Q0U0QTg5ODlGMUZGMDc5MUI5NEVGQ0QKLToxMDBGNjAwMDZCRTYxREUzNjA0REFENDYyQ0MxMjQ5QTMxQzkzNTE4OUUKLToxMDBGNzAwMENGRjdEQjI0OUM1RjI5QjQ1MzVBMDYxRDk0MTY3QTM1QUIKLToxMDBGODAwMDQ5MjVGODVFMjY3Rjk3MEM3RjgxOTM3OTBFRjg0RUMxMzQKLToxMDBGOTAwMDhFNzdEQURGMzcyOEZBNEIzMTQ2Qzc4NEQ4RTc2QzJERDUKLToxMDBGQTAwMEIwQzcyMzdEM0I4RkVCOTk2QkYyNjQzM0ZFMzk2NkRENkUKLToxMDBGQjAwMEI3MjVBMDgxNzBFMDJCRTJDRjkzNzVDQjQxNUVFQ0FBMDAKLToxMDBGQzAwMDNDMEI5RjI5ODEwRTFFNUZFNkQ4MkY1RkE4MkNBMUYzNTIKLToxMDBGRDAwMEZEOTVFMTlFRTNCQTk2OEJGOEYwNUNFNTZEN0RCRDMzM0YKLToxMDBGRTAwMEI3MDBDMUNGRkQ2MDkyOTdDNzc5MUJBMDZCNTY3RUM0MzYKLToxMDBGRjAwMDU4OUUxQTZCRENBNDYxN0I0RkM3ODU3Q0E4MjA5RUUzQkEKLToxMDEwMDAwMDk0RkE1MEFFNTg5QTg3N0NDNUU4QjA1QUYwNjExMDNBMEQKLToxMDEwMTAwMDQ1MjdDN0M4RkZCMUQ5MUQ0QjIwMUZGNkFCODg0OTNDRjcKLToxMDEwMjAwMDk4MjgyQTcxQkY5QUExNThGOTQwQ0U5QjUxRDI1M0RDMUYKLToxMDEwMzAwMDE2NEM2MzdDNjI4OTlCRDkyQUU4QTJBQUEwRkFBQjExNUMKLToxMDEwNDAwMDlFNEQ4MkZFNEVGRUI0QzdDMTlBNzY1RDQwRTQzQzIyQkUKLToxMDEwNTAwMDFFRUY2N0EzN0Y0N0VGOENBOTQ1MDE4QTdGMDk4QzZFM0QKLToxMDEwNjAwMEI5MDZERjZGNTVBMTQ5NDNCRDFBMzBFMzVCQzQ3RDBGNUMKLToxMDEwNzAwMDczNUZFRDdDRjdDNUUzODg4Rjc1ODlGRDdCNDZCQ0I4NEYKLToxMDEwODAwMDU4OEZFOTdFNUMxNkJCRDlCOTFFM0Y5ODk3M0RDRTA5QjMKLToxMDEwOTAwMEM2NjY4RjRCMzRFREI0OEZDQkZGRTZGRUIzQzFEQkYxRjgKLToxMDEwQTAwMDJDMDFBMTE5MTREN0E5MEFCRkM1ODQ2OTFBRjlEQjhGQ0QKLToxMDEwQjAwMEVFOTRGODdCMUIwRTdFM0FCQTJCN0YzODdGNkM0N0EzRTkKLToxMDEwQzAwMEY3Q0JGM0M0Nzc2OUU3QkU3RDY4NUZCNTg0QzAyODI4OTUKLToxMDEwRDAwMDI0RkRBNzJCMENGRjJCQTQ5MTVFODlBNTBCNzZCRkYzRjMKLToxMDEwRTAwMDlCMjdEMThGQkY1NzAxN0NEN0VEMjg5QjYzMDdDRTUzMzkKLToxMDEwRjAwMDM1MEE5MDY4NzlCMEM2NDZFNzhGM0JBRkNDNzM0QzJFNkIKLToxMDExMDAwMDdGRDc2QUE2RkMwNUE4RERGMTlEMTJERDE3NTNFMEVDNDAKLToxMDExMTAwMDNCRjFCREFCQzY4MzJFNDhCMkYyRTNDMEZCM0RCRTg5QjYKLToxMDExMjAwMERCMEQ3MzdFRjE2ODBEOTMwNEQ4MjBFMEMxRjVDQkJBRDYKLToxMDExMzAwMENFRjQ5OUVDMDdEREMyMjc2MTczNUQ4ODFCMURGOERFRDQKLToxMDExNDAwMDczQkRDMDRGREY2OEExQUQ5RTM5QkZCNzY2NEQzRTQ4NDUKLToxMDExNTAwMEZFOUYxODdGRkZCOURGRjQ1MjVCRkYyMEZDMjMzQUZCQjAKLToxMDExNjAwMDg3N0M5OUUxNjc5MDYzNkVBMDc1MjU5QTlGMjIzQjg4RTIKLToxMDExNzAwMEVEQTc3MUZGOTE5NDIyMDhCN0QzOUZCMjcwOEY0NEVCMTMKLToxMDExODAwMEQ5RDU2QzNEQzNGN0Q4QUU0RTNBRjZBMzhFNzgyQTEzNjQKLToxMDExOTAwMEZGNEVCRTk1MDNDMjhFMEM0MDIwMDc5RTIzQTlEMTc0M0EKLToxMDExQTAwMDNFNEI3Mjc3RUQyRjE0QjJDN0FFN0Q0ODRBNTIzQzc1NjQKLToxMDExQjAwMEU3OTlGOTQwNzg1N0M4MkZGNTFBMzREREMxNTY5ODM0QUQKLToxMDExQzAwMDdGM0JGMEU3MDlEQkYxRUVEM0VENzhDRkFCQjRFMzM3NEIKLToxMDExRDAwMDE4QjFFM0QxODlFN0ZDQjE4MzZDRjVFNzJCMEQ2RTYyQTIKLToxMDExRTAwMDNFODFFRjRBRjYwRkYxQ0RGNDI0Q0Q2MzIxOUI0NzRBQUYKLToxMDExRjAwMENGQzRFN0RDQkRFQjU2QTBCRkE0NTczQzNBRjA3Nzk2Q0UKLToxMDEyMDAwMDAzN0YyNzYwRUYzRTVFMEE1MTZGQjEyNUZFNTM0RDkxN0IKLToxMDEyMTAwMDVDMzlFNUQwQzQ1Mzk5RDYzMTgxQkU0NTgyRTRBNzBFMkUKLToxMDEyMjAwMDhCNEVBNDdBREVBRUQ0REJDRTg1QUEzQTQyNzI2OEM2NzMKLToxMDEyMzAwMDI5RTc3NUFGQUJBRkMyNDk5NjVFNzdFOTgxQzNCMzIwQUEKLToxMDEyNDAwMEI3RENCNTM3N0IyM0Y1MkUzQzFGODc0OEZEMTAzQzJGQkMKLToxMDEyNTAwMEQ3MjhERDg0RjU0N0Y0QjRERTFBMzQ5RTBCMjIxQUE2OTMKLToxMDEyNjAwMEI3ODg3MzkzQTM1NUZDNURBNEY2RDQ3QkM1NjhGRkRERjYKLToxMDEyNzAwMDUyN0RFQzEyQjRGQjFCQUY4MjI4RUFGRjY0OTBBRkJGMzMKLToxMDEyODAwMEJCNDU1QTE3RTQ3MUQ2Mzc0NTY1MzBEMDVGQjA1NzQ5MzIKLToxMDEyOTAwMDRBRTg4N0QyOEM1RjVDODA3NkRCNUU5NzRFRUI5Rjc2NjgKLToxMDEyQTAwMEVDMzdGRjQ2RTVBMzM0M0NDNzI4OTFEQjQ2RTJCOEFDRjcKLToxMDEyQjAwMDNFRjlGQjhGRUU3RDM1RjQ1RDhCN0RENEI1RTdCNjYxRUQKLToxMDEyQzAwMEI4M0U2RDk0NjE2RUI2N0Q0MDdEODA4RkRGNTVGOTk3OTUKLToxMDEyRDAwMDYyNjRDQjA1REU2M0I0MkY1RkQ5NjlGN0IzQjk3NzczNjYKLToxMDEyRTAwMDNGRENDMjNEOTc5MjNEN0E2MDM2N0Y4RkYzQjEyM0ZDOUQKLToxMDEyRjAwMDVFRUEyNDY1QzY1N0JGQzRGMkUzRkU1M0JDNjMwNEM2NkUKLToxMDEzMDAwMDk0OTlDNTNDOTQwM0U5OTlGMDMxM0MzMzNDQUUxN0YxMTQKLToxMDEzMTAwMDlCOEQ3Rjk1Mjk3RTczRENGOTIwQTFCQzhFRkIyM0QwQTkKLToxMDEzMjAwMDNERDREMTREQjM2OUJEN0EzMjM0RTkyMEE2NzU3QjI1MTEKLToxMDEzMzAwMEYyMUYzNTFFRTFFQkRCOTgwRUJCOUZFODlDM0FBNjE3MjcKLToxMDEzNDAwMDU4RkYzNTdCQjk3RkFCQTY5MzlGMEY5Q0YzQTJCRERFMDAKLToxMDEzNTAwMEI4NEU3QkZFQkM1RUY4Nzc1OTQwQUM1QjIxMjgzRTlEQzEKLToxMDEzNjAwMEY4RENCRDJFNjM1NTgwOUZBN0QxQkRCMjg4OUE3REZGNjIKLToxMDEzNzAwMEQ1MTlFNDc2MThDMzA3Q0RGRkU4MzE4ODJDNjNGMzM4MUMKLToxMDEzODAwMDVBNUYzQTAxRUYyOTFEN0Q4RjlGMzcxQ0ZENTA5OTlDQjQKLToxMDEzOTAwMDZEN0ZCNTM5QzBGOTY1QTM5QjlGMUY2RjlDMUQ0ODJFQkIKLToxMDEzQTAwMDY1RjNEODNGN0JERTQwREM1N0ZERTNERjYzMDNCNTlFOEEKLToxMDEzQjAwMEVDMTJBNjIyNjQ1QTEzOEQ3QzE4OEJGMkQxQzJFRkJCQkIKLToxMDEzQzAwMDQxNUI0OUI2Rjc5MzREQjkzMEU1QzQ5NDhGOTJEOUZFOEQKLToxMDEzRDAwMDU4MzZCRkU4QTAyMERGRkZENUNFQUU5NDMwN0VCQkVCMDEKLToxMDEzRTAwMDY5ODlDRTk4QkE5NjMxQjg3QUMwNjMxQzk2RjU0Nzc4NjkKLToxMDEzRjAwMDFBRjdCQzRCN0UwQUVGREVFQ0ZFRUVBNzAzMjE5QTdGQzQKLToxMDE0MDAwMEQ3QjJGOEQyRjMxOEJFQkVDNzg0M0I4RUYyRTA2RTJCODMKLToxMDE0MTAwMENGRDY3RjFDRDY5M0ZGNkE3QjgwRjM3Mzk3OTdFRkMzNzkKLToxMDE0MjAwMDQxNkQyQjk5MUE0NDM5OTk3OEYxMEEwNkU3NUQ0Q0ZFMTMKLToxMDE0MzAwMDcwRkRERUU4OEExMERDRjEwNTQwRUZGRjgxQjg1RjU4RUYKLToxMDE0NDAwMDc2MDk2Q0I5QzlCMjVGM0IxODk4NzAwOEU5N0QyOEMwNkQKLToxMDE0NTAwMEUzOEZGQUM0MjIxMkMyMURGOUU4RkQxMEY2N0ZGNDAzRUYKLToxMDE0NjAwMDBGRDFBRjU0Rjg4QkNDNzY0NzAzRTIxQzJFNjhGQzg2NzQKLToxMDE0NzAwMEY4NjU2RTExMjlDNTQ4MkMxNEE5MUYwNTMwNjIwRkMzRTkKLToxMDE0ODAwMEI3NDU3RkE3RTkxNkE3NzEwQTYzNEMwNzMyNzgwQTAzQUMKLToxMDE0OTAwMDMyM0YwRjYzRkIzNERDN0YzNDgyRjkxM0E3RkQ4QTI5QzYKLToxMDE0QTAwMDdGNzhFOTREQjVDNERENEI3QkE1NTQ5MEU5Q0ZEMURFMDMKLToxMDE0QjAwMDQwMEFGRDMyODU3MzY1N0M4Mzg3RDlBMzVFREU1Rjg3MzIKLToxMDE0QzAwMERENkU0NTBEOENGQTE3NzUwMDUwOUVFRjhGNEM3RDZDQ0MKLToxMDE0RDAwMEVBRjE5NjAyQUVGRjVBRDZBOUE0MUYzN0E5OUQzRUY0QTEKLToxMDE0RTAwMDRCOTcxQjdBQURDQUM2MkQ1NDc1OEFCNzE4MzA5N0NCNjcKLToxMDE0RjAwMDdCREVFMDdCMEFCQUVEQTJGMzAwMUVGOTQ4QzlFQTFGQzEKLToxMDE1MDAwMDM5MzM2OEUyMkJGNjBGQzREN0YwODNDN0Y2QTM3OTE1RjkKLToxMDE1MTAwMEYxNDExRkE0RjcyNDYxRjc4QzdCNUJCQzhCMjhFRTE5OEIKLToxMDE1MjAwMDM0NzZERjIzQjBFQkEzOEQzRTYxQzc0MERCRUZGMURDMDcKLToxMDE1MzAwMEZFODlCRkFBNzQ3RkEwNUJGRkNDOUU0NEVCMjkyODU1OEYKLToxMDE1NDAwMENGMjA3RjlERjcyQkIxM0QxMEZBODdFREY2MDgyRkU3RUUKLToxMDE1NTAwMDNDMTc0QjIwMUM0RTdEMzMxNjk4NUU5MjdBRDczQjRFM0IKLToxMDE1NjAwMDNBMzMyM0JDM0I1RkM2OTAzMkVBMjA5MzMzNEI3QkE3RDAKLToxMDE1NzAwMDlFRUExNzE0RUJBQ0QwNTMyNzYwN0NCRjBCRjUzNDNGQzkKLToxMDE1ODAwMDU1MkY4RTNDRTNCMUYwOEZBOUE3RDJGQzk0MjRCQzNBMkUKLToxMDE1OTAwMEM3OTFDMERCOURENzA2QTM3RTc5NEU0MTNGQ0FEMTA5RDIKLToxMDE1QTAwMEZDRUZGQ0E0ODQxQzE1QkM5N0JDMThGOTYxRkRERThCMTQKLToxMDE1QjAwMDdDQzhGN0JCMEU0RUY0QTI1ODVEMUJFNkY3Q0VENDdENzcKLToxMDE1QzAwMEQzRTIyMEQ4Qzc3QUFFRUMwMkFGMUVBODQ0N0NDODg0MTAKLToxMDE1RDAwMDA3NDU2Mzc5Q0JGOEM3REIyNDcxRUY1MkNGOUY5NkU1QkYKLToxMDE1RTAwMDdENkMzM0JEMzZDQ0VGOTVFRDNBMzgyODlGRUY0NzUzRUQKLToxMDE1RjAwMDQ0Rjc2RUJFMTdGRTBCNTMyRTRDN0U3N0YyQjcyOTBGQzEKLToxMDE2MDAwMDA5RDY0QUI2RDgxMThBRDQyRUY2OEY3NjNGNDI0MkQ4RjAKLToxMDE2MTAwMDExMDlGM0ZEOTk3ODA5RDk4NzhCODQ3RDk4MDgwQzVEQjEKLToxMDE2MjAwMDhEN0ZFNkEwMjU1NUFCRTFCOUM3QTJFMDIwOEFBRjVFNjkKLToxMDE2MzAwMEQ0OTdFM0NGODkwRjMzNkRGQzgwRDk4Qjk2MzhGODQ2NjkKLToxMDE2NDAwMEY1MThGOUM3MUEzRjcwREJCRTlCRjhDRDg1MTcxM0JGOUQKLToxMDE2NTAwMEU3MjI3RUE1OEY4RkRGNzM4MjlDQ0U0RTNDN0ZEMkY5MkUKLToxMDE2NjAwMDk3NUQzQjM2RUI3REJFN0Y5NUY5OUYwN0IxMjczQkM5NjAKLToxMDE2NzAwMDFGQ0JFRjkzOThGQzY2RUE4RjlBRUI1QTEzNzk3QTVBNEMKLToxMDE2ODAwMDVGOThGNzQxNENCRDYzRUE5NzczMUFEQTlFQzlDQkEyMDMKLToxMDE2OTAwMDNGOUM3QTIzRTJEMkJFQkI4NkUxMkZGMkIzMDBCRDc3MzYKLToxMDE2QTAwMEUyRDQyM0VGRTEyRjI1RTQ3N0JCM0JDOEUwN0RFNEQ5MEEKLToxMDE2QjAwMDM3NjVGNDlCM0NGNjUzMzY3NzU2MUVEOTU3QzdGRDgyRTMKLToxMDE2QzAwMDFEQTc3NkRFNjVEQUFEQTZCREVBQUM2N0RBQUJFNkJBOTEKLToxMDE2RDAwMDYzOUUzN0ZEM0ExODdCMDBDNzk3RjYzMDc5MEE2MTdDMjQKLToxMDE2RTAwMDJDREYyNzFGMENDNDFFQzJFRjc5MEM2NjNGQzYwMjU2QzIKLToxMDE2RjAwMEE2Q0FGOTdFRDYyRUFGQjlFNDMzQ0YyMTdGRUQyOTk1NjYKLToxMDE3MDAwMEQ2QkYzODVCRkY4NjQ4OTk3MDk4RTNENzA3QzVCQjAyMDAKLToxMDE3MTAwMDhDRUJEMEFFMjlBQjAxM0VEODQyRkU2RTQwRDk3MDg4MkEKLToxMDE3MjAwMEUxRkE4Q0Q3NEI3MTlFQkYxMjc2RDk3MzYyQkQzMUQzNkIKLToxMDE3MzAwMDgzODFFODAxODRERkE1NDJEQzUzRkRGMUUxMzZGRDhCQjYKLToxMDE3NDAwMEJGMEUxQUZCQjEzRkVGNjQ4M0U2RDE1RjgzMDhEQUZCN0IKLToxMDE3NTAwMEZERDU3NjI5QzJFMDI4NkNEMEE1NkU2NzhGQjlBRUIzRUYKLToxMDE3NjAwMEZFRkE0RkQxRTlERDhGRkU3OEE3MDBFQkEzN0Q5NDg1Q0IKLToxMDE3NzAwMDNFN0YwRUYyQjhBNjA1REVDRTY3RDE4NDZGOUNEMjM0RDAKLToxMDE3ODAwMDM5RDRDM0Y5N0FGQTNEODQ4OEYwNzNEOUUzNDA4RTNFQTgKLToxMDE3OTAwMEY1QzIwMDNDRkY3Q0U1MDdFRjA2RjE1Q0VCQkZENDYzQ0MKLToxMDE3QTAwMDQxODRGM0Y1MjVCRjBGRTI3RDg4NTc5NkYwRkRDNzk1N0MKLToxMDE3QjAwMDBFM0JFNzg0QzBERkI0NTBGNDQ4OTBBNURGNjlGRUE4NzMKLToxMDE3QzAwMEM2RjYwRUM5NjI3RTNFNzM3NTUyQzE0RDY5MzdCRkNGRjIKLToxMDE3RDAwMERGOTE0N0JFM0QzM0JGQTBCRDhGMkQ2RkYyRTkwMjBGRjEKLToxMDE3RTAwMDhGREI3MkNFQkYyQUM0RTM2OEFFREVCOUM1REQ1RkM3NEEKLToxMDE3RjAwMEYxNjNGRjhERTNCRjJFRUNCOEQ3NzcwN0M5RkY2MUMyNTUKLToxMDE4MDAwMDMzNkJFNzQ4MzdFMkUxQkZGNjdBQzRCOTdGODc4QkUzRjEKLToxMDE4MTAwMERGOTg4MkU3NzMzMTQxMEEyNzlDQ0YzRTlENDdGRDVERUIKLToxMDE4MjAwMDc1QkI0Mjc2Qzc0QzM2RDY2MkM2REZCMUJENTdEMzNFRDQKLToxMDE4MzAwMERDMzk4RkFCNUVEMTI3RjU2M0Y0QkI2QTk1NDRGNjJBOTkKLToxMDE4NDAwMEQ2NUZDMkY4MjFCNjc4MjU5REUzMzlFNzM5MzNFRTg4QjMKLToxMDE4NTAwMDFGMTE3Njg1MzNDRTY0Q0U1RTdFRkU1RTBGRkFFQUYxMEUKLToxMDE4NjAwMEU1NTlFMjRFRjY1RTRDRTc2RTczN0FEOUY3OTQ4Nzg0QjkKLToxMDE4NzAwMDNENTEwM0U3NjBEQ0ZDMDlBODVBNUJBNUY3QkVFRjc5OTAKLToxMDE4ODAwMEJEMTkyODg4RUNDRDY2MkZBNTQ3OUEzNTlFMEFGRDM5RUIKLToxMDE4OTAwMDdGQ0ZCRTY3ODlDRkQ0OEUxQTk0RkI1RDA3NUZDREZCRTcKLToxMDE4QTAwMDk2OUVENkUzNUZERUYyRUUzMzc3QjNGQzI4RTA3RTFFMzEKLToxMDE4QjAwMEQzREYzRTQzRTBGRDAyQTFDRkU3MDg3QjYxRDQwNzNEQzMKLToxMDE4QzAwMEVCRjMxOTg4OEZFMTk5RjA5QTdBN0MwNkZFQkQ0MTBCMDMKLToxMDE4RDAwMDFFNENCREVFQzRDN0YxODM4M0YzOTAzRkVBNDJDRUYzQzIKLToxMDE4RTAwMEU2NEY4Njk3NUNFRDE2MjhEOUUzMTk0RDM5M0ExMkU0OTQKLToxMDE4RjAwMDdDNURCRkVERDIxNUE1NkNGQ0M0NTNBRjlERDFDOUY1N0QKLToxMDE5MDAwMEM0MjFENDEzMjY5RjAyMzRCOTUxOEU5REZDNjhGMjQ5M0MKLToxMDE5MTAwMDM3REZFREJEOTlGMDY0RjIwNzkzQUJCMDM4RTcwQ0UzMjUKLToxMDE5MjAwMEZFRDBDOTdGQkRDNTM3NzVCOTNBQ0Y0MEJERTBFNEIzM0QKLToxMDE5MzAwMDJFQzdCRDY4MzNCRDJDQzRGREVGRjVCQTMxMDlGN0FCMzYKLToxMDE5NDAwMDZDQjk1OUMxQ0YwM0I5M0U3QTVENkQ3QkY2NDY5NEQ3MjkKLToxMDE5NTAwMDZENUM1RTE2M0NGRUQwNEY1MDBGQ0RGQkYxRUQyMUQ0RjcKLToxMDE5NjAwMDQzNkZBODZEQzUzODVFQzNGNkU1MjEzQzU3N0Y1RDhEOUEKLToxMDE5NzAwMDg3QjBGRDFCNDkyNTZCRkNFM0NFOTA2NEJFQTc2MThCNEQKLToxMDE5ODAwMDkzODBENkY4MjUyOEM3RkZEOEVFRDJGMDFDQUM3MTg3MUIKLToxMDE5OTAwMDg3OUZCQkVGRTY3ODYzNzk3RURFQkUzQjdCOUNDNEJDNTEKLToxMDE5QTAwMDFGREQ1RUFDRjNCODVCN0JCQ0M0MzYxN0Y5MkZEMEJGMkMKLToxMDE5QjAwMDg2QzNFNDNBMkZFRTNFN0Y2RUVGRjkzQ0JENzFCNzg4RTcKLToxMDE5QzAwMEIzRDk3RDcxRDY3ODA5MzMyRUMxQzlDNzlCMUNGQ0NCMTYKLToxMDE5RDAwMEYwNDM3RUJGMzg4MzhCRENFREUyOUMzQzcxRkY5REMzRkUKLToxMDE5RTAwMDBGMzNGODhFNkNGQjU1NDhBQUIyRkFFM0Y5NzlGQ0YxOTMKLToxMDE5RjAwMEY2RUZGRUQwMkJFN0U2REYyRUMxRUY2OTdCMjI5OTM1QUIKLToxMDFBMDAwMDdFQTJDMTk1MEFFMUJFQUE2MThCOEJGNjgxMEQwRjI5REEKLToxMDFBMTAwMEY0NUUxREZDRDE0M0VCRjlGQzg3N0VGNjg3NzMxOTdDREQKLToxMDFBMjAwMEYzMUY3MTE1NERFMUQzQTAzODA5OTM1RURENzEyQzgyNEYKLToxMDFBMzAwMDNFRjMxRUZEMTkzRjVGRDY0NTNDOEJBMEQzRkM0N0Y2MTUKLToxMDFBNDAwMEI5MzEyRUM3ODlDRjg5RURGQkRDOUQ4RTM4MDhBMjU3QUUKLToxMDFBNTAwMEZCRTE0OTc0OUZGMEZFRjdEREI4Q0VCRUYxQjQwNEZEQTIKLToxMDFBNjAwMENBMzNEQkNGRERGMkIzMTBFQTBCQzQxM0M1MDEwOEJBRTkKLToxMDFBNzAwMEU1OEU1QjRBNURGMkQzRDE1NDhGRkM3NkJERDE3MTA5RkUKLToxMDFBODAwMENBRTIxOEUyRjc4NzdGQ0FFMDk4RkI5Mjg3RTJBN0U2RUUKLToxMDFBOTAwMDNFN0MxREM1MTlCREE2MzY3MUJFQkY2Nzc5MzFBRUJGOEMKLToxMDFBQTAwMDczNURGMTYyOEQ1MkZFN0RFRUU2RUI4OTFGRTczQzdGQjAKLToxMDFBQjAwMDdEQjFCODhGNTRDMkZEM0RGMTEyOUNFNzU1OUJCRTQ5RTQKLToxMDFBQzAwMEYzOUMwRDMxRTJDN0I5RjcyODUxRjRCMzlDNTA2MUYyOTEKLToxMDFBRDAwMDIzNTlFNDY2NjgzRTk3OUJEN0I2N0FGMDMxMUQ3ODRENUUKLToxMDFBRTAwMEY4MzlFM0JGNTNDNERGOEI3NDlFNTdGMTc3NjM0RTg4OTgKLToxMDFBRjAwMEZERjczRjQzRERFNzhENUVFQjdFQUM3MURCQ0EwRUE0RTQKLToxMDFCMDAwMEQzOUIwMzhDN0UxQUM1MTNBODcxODEzNzdBN0Y1RDc5QzgKLToxMDFCMTAwMEZFQzI3RTQyQkZEMTdCMzdBNjFEMzQxMUJGNjNGRDBFQ0UKLToxMDFCMjAwMDE3QkQ3QjYzNjk2NzdCQjc2NjkxMTg5RkMxRUQ5NzQ2QzgKLToxMDFCMzAwMEIwQjQzOEJCMUZGNDlCRjk5MjE5MDdDRkUzNkY0QzNFNEEKLToxMDFCNDAwMENCQTUwN0I2RjE3ODk2RjcwRTcxM0Q4MzcxMzk1NERFNTcKLToxMDFCNTAwMEUxNEFGNUIzQzVFMzc4NkNFRkEyQTRFMzRDNUM0MkNFNTYKLToxMDFCNjAwMEVERTUwQzRFOEE5N0U5QzZFRkQzMTJGRDNEMDg5MzVGNzEKLToxMDFCNzAwMDY2QUZGN0Q4RTNGM0JBRjlDN0Y5NkU4RjNEN0U2NjhFOEMKLToxMDFCODAwMEMzMkUzM0QzOENGNTNGREY3MTVFQjdFOUQ0RTI2NzFBMTkKLToxMDFCOTAwMDVDNDk4QTdGNkFGOEEzODdGNjI3MEQwRkI5QTI4ODk3NTgKLToxMDFCQTAwMEI3NzYzRUYzODc2RjMxQkU3RkFCREQ5NDYzQkJERTc1RTYKLToxMDFCQjAwMENBRjFEQzVENjMyMDlCMUNCRjE1ODg0MDU2Mzk2NkRGODcKLToxMDFCQzAwMEIzQ0E3MTIwN0RBRUExQzM2N0FGNzdFN0U0RDBCQjVGMzYKLToxMDFCRDAwMDc1RTA5M0Q5MERGOTE4NDdGQ0U2MDNGMzA3OTJCRkMyRUQKLToxMDFCRTAwMDgxNUY1M0RGM0FGNUU4QUIyMTlERjA5QzE5RUZDN0Q3MzEKLToxMDFCRjAwMEZENzQzQzI2QzdBM0M5OUZGMzFFNUM0MEUzNzRGM0IxOTgKLToxMDFDMDAwMEM5QTcyNjFGRTc4ODFCNzNFMkQzNTk5RThGQkVCMzMxNDUKLToxMDFDMTAwMDk5N0U5MTc4MkQ1NEUyREY2OTRBQjg4MUJGRjcyNkZCOUYKLToxMDFDMjAwMDIzQzhCRkJEOUQ3N0ZFMzZCRkRDN0NGRjZEMDRERjE3ODgKLToxMDFDMzAwMEYyRjNDRTQ4NDBDM0JGNTg4MUY3RTU5NDZDRTdFQzkxQ0UKLToxMDFDNDAwMDg5NzI1NkZCRkYwN0Y5REM0RTQyQjcyQ0E2OEZFNzczNkIKLToxMDFDNTAwMEZDQjUyODUxRTFDODZCQTc3QjBDNzRCNjhBNzAxNjg0NUEKLToxMDFDNjAwMDQ4Q0U1QzIyNEU4NUY1NENGN0QxMjM3OUYyQkIzQUVCOTYKLToxMDFDNzAwMEUzQUVCNTA3MkU1MkQxM0YzQjRBQkU2RTMwQ0JFRjVBOTIKLToxMDFDODAwMEZCRTI0NTJBQTM3N0U0M0NGOUQxNDEyQ0JGN0JFRDFGNTEKLToxMDFDOTAwMDc5RjkwODc5OTQ4QkIxRUE4RUY4NEIxN0Q1QjFGQzQyRUIKLToxMDFDQTAwMDMxRUY4NUE2OUZBNDY1OENDRDRGQTJDQTg3RUZDMEYzMDQKLToxMDFDQjAwMDFDRjVBN0ZDRUYxMUFENjY3MkVGQUQ0RTlGMzNFNzc5Q0YKLToxMDFDQzAwMDIwRUU2M0Y5M0MzNzRCNTk3RTQ1RjlFRjU3RTAyNkYyOTkKLToxMDFDRDAwMDU3RkVEODg2N0NDMjU3QUQ4RTc4M0VBMjc5Mjk3RTY3QTIKLToxMDFDRTAwMEQxMTMxNzUyMUNFOUUzRjlEQzFGN0RGNkEzRTdEMURGMUUKLToxMDFDRjAwMDc1RkMwQ0UxQjgzRkJGNkY2RTM4NUE1Q0JDOUYyM0JCQ0MKLToxMDFEMDAwMENFOUU4ODc4M0U3QjIwRkFENEQyRjRBODU2NzVGQUVFOUYKLToxMDFEMTAwMDYzNjg4RjczQkIzRjhDRjc1QjEyMDU2RUVBRTc3MUMxOTYKLToxMDFEMjAwMDY3QTc5QTlBNzEyRjRBMUVFNzBCMjU1RjZFN0E4NEE1RTIKLToxMDFEMzAwMDRGMEI3RUY4OEY3Q0NENUM4NzY4REY3REY0QTk3RTVCREUKLToxMDFENDAwMEY5QkIzMUM3Q0U0MDdBMkJDQUYxM0ZBM0JENzlFQ0RCOUEKLToxMDFENTAwMDc5RjRGNzQ3NUVGMjczQkNCREU0RTc3OEJCM0M3RjhENTYKLToxMDFENjAwMEVCMkNGNkJEREE3QkM2NzVDOEY0MkY0OTNCQUZDNzc0QzAKLToxMDFENzAwMDhCMTZGQjI1QTcwN0E0QjBERjZGNURBOUYwN0UwMzREOEUKLToxMDFEODAwMDQxN0MzNzRFMzJCODFEMkUzMTY2OUFDMUYwOTEzMDQwRjkKLToxMDFEOTAwMDc3MEY0NjExQjZDNzdGMjg0QUY1QjExNDhEMUZCNDhENTEKLToxMDFEQTAwMDBGNjU2Q0RENjQ3MjdFRjkzODRFMkY4NjVCNUE0NzVGOTMKLToxMDFEQjAwMDE4Q0JGMzI2N0NEMzkzODMxMjlEM0FDMUYzMjc4NDY3MTMKLToxMDFEQzAwMEE0MjczOTAwRjc1M0RGNjI2NjE1RTc3QkZCQkVCRUNCNjUKLToxMDFERDAwMENGQ0YzN0JCQjBGREYwNzRGQzQwRTNERjY0REFDRjM2MjEKLToxMDFERTAwMEUyMUM1OEZFRDEyMzIwRkU1RTIxN0Y1RkM3RjQ3QjhDNkUKLToxMDFERjAwMEZCRjVCNUU0RkYxRUJENjczRThGMzMxMUZFMkVGMzNDQUQKLToxMDFFMDAwMEJGRTYwMDNGOUY3M0ZBQjdDRTgzMzVBNDRGQzczOUY0QkUKLToxMDFFMTAwMEU4Nzk3QkJFNEFGQUI1QjdGM0I5N0Y5ODdBQjUxNDRBMjgKLToxMDFFMjAwMDRGRjM3Q0VFQTNGQzUzMzg5RkZCMUY3NjIyQjI2RTAwNkIKLToxMDFFMzAwMDgwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJCNTVBNTYKLToxMDFFNDAwMDA5NzQ1NDU1OUFGRTVGQkREQTkyQUE1NEFBMkE0NTA4MkQKLToxMDFFNTAwMDA0RTM0QjAyMjQyMTBCNDUxMjIwMDRENDIyMjBEMDMxNkMKLToxMDFFNjAwMDRBODAxNjgxRjY0ODgxQjI5OEFEOThCNERCNjk5RDQzRUIKLToxMDFFNzAwMDg1MjBEMkRBQTMxOTc1NkNDRTY5QkFFNzg1RDYxMTI1MEIKLToxMDFFODAwMEU5MjkyNEQxRTA1NDMyQzUyMjA0MjU0RTkwNDVBMDFERjUKLToxMDFFOTAwMDNCRUQ3NDIzREE2NDMxM0Q4MjRCRjc2MUZFRkZERUZCREMKLToxMDFFQTAwMEE4MjU0MUU5M0U2N0M4RTFEQ0JBRUZERDc3REY3RkJGRjcKLToxMDFFQjAwMEZGRkJCNzdCREZCQTQ0MDk2MDBDRDAzRjFEMjQwM0Q0N0QKLToxMDFFQzAwMDlCRjE5NzAyMzA3QzNDMjMxMUYyMDBGNDdBMDBEOTA5OEYKLToxMDFFRDAwMDYwNTQ2NDI4QzFGNjJBRkRCQjBEQTA2RDMzOEUzMzg1OTYKLToxMDFFRTAwMEZCNkYyNTJBNkM5RUZDNTNGNkZCQzE0NjJEQUM4NjgyMDcKLToxMDFFRjAwMDg4NzlFRDdDREVEQjY1MkI0MDMxQ0U3RjExNTQ1MzNBN0YKLToxMDFGMDAwMEMwQjRCRUVDOUZDRkMxQkVBMURCMDAyQUJEOTc5RUEwOEUKLToxMDFGMTAwMEZCNjc3NUFBMUY0NTlCNzFFQ0Q3NDUyMUJDQjQzNUNFMzQKLToxMDFGMjAwMDU2MDA1M0YxOTUyOTNBNTBDQzZDNUVCODhBRkZFMzk0ODEKLToxMDFGMzAwMDc4NTBCMkMzN0Q0QkI2MzNBQTJGQzdEQjc2NDEyMkZFNjEKLToxMDFGNDAwMEYwN0I3QTUzNTA4RTIyN0UwQjEyRENFM0EzRTY3OURCMjIKLToxMDFGNTAwMEI2QTg5QkU0MkVCMkFGQUYyMEI5MTM0QjMyQTJFNjgxRjQKLToxMDFGNjAwMEUzRkE0RkZBQjA5RjhEN0Y1NzMzMDBBNjQzNjU2MjA4QUUKLToxMDFGNzAwMEU1MkY4NDRBOEY4NEYyQkEzRjAyNzcwOEU1OUY3MThBODEKLToxMDFGODAwMDhGRDM5RTczODdGQ0IyMTc3MTJDRjkyOEZBN0EyOTQ0RjMKLToxMDFGOTAwMEY0NzE5RUM3M0VGQUMyNzEzODQyOUVFOUY2MDRENzA1MzUKLToxMDFGQTAwMDBCRkUxODBGRTNBRkNBQTNFMkU4MEUxMTRFQTc2NDM3ODkKLToxMDFGQjAwMEFBMDFFQThGRTEyMDE3QjY5RjgxMEE4OERCMzQyODQ4RkUKLToxMDFGQzAwMDA0ODZBQjBDMkFGNkRGMDRFRjBCNzNCMEJEQjI3OUM4MDAKLToxMDFGRDAwMDcxNzg1MjE4NEY4NzI3MUFDRkE0NDVEMTc4OEVBOThDRDMKLToxMDFGRTAwMEM2NzNFQzhBNjhEQ0M2NzlBMzcxNEFERDM4MjVFQUZFM0YKLToxMDFGRjAwMDREOUIwQUEzRkEzNzNGNTYxQTM1M0VERDVGMTZENUNGMDMKLToxMDIwMDAwMERDNUUxRTM1N0U1MkQzRDJBODdFRDY4RTU1NTFFMzczNDgKLToxMDIwMTAwMEQ0QjU1MUY3NzM3NzU3REQ5MEZFRjMwM0Y1NTFFMzYyQzIKLToxMDIwMjAwMEY1M0ZCNUUzMjc1MUYzOTZDQUY3Q0E5MDExRTY4MTFGMzEKLToxMDIwMzAwMEZGODgwNzg1QTQ2MkQyM0ZFQTIxMDQyM0Y1M0ZEM0U1NTgKLToxMDIwNDAwMDI3QzZGRkNERkE3Rjk4RjQ5RjFCQTE3RkY5REU0NEFGMkUKLToxMDIwNTAwMDM1NkM2RkIxQURBNkQ3OUZEMDVBQzc5MDVFNzE0RTE0NDQKLToxMDIwNjAwMEVFMEFFOTE5QUYwRDFBQUNEQjI1NkMxREM4OUQ3QkYxOUEKLToxMDIwNzAwMEZBNjM2NjdFRkQ1MTgxQ0Y5NUI4MzQ5NUQ2RUYwODFFODAKLToxMDIwODAwMEZENUFDMjE2RDVDMkVDRDBGRkIxNDU2RDQ0REUzQzJBRTQKLToxMDIwOTAwMDJCMERDNEFCMTdFNTRBMDk1MDlFNTQ1NDlEMkUxMzc5NUQKLToxMDIwQTAwMEE0ODM4RDAxRTRGN0IzM0FEREVBQ0EwOEY5OUVCMzczNUQKLToxMDIwQjAwMEJGRjI5QzVEQzdEQTVGMThEMTU2RjFCREE5MTZGMDlCM0YKLToxMDIwQzAwMDBCRDk3M0I0MzZGQUU3MDE1Q0I3MkQ4OTgxODIyRjJDQzYKLToxMDIwRDAwMERGM0U3RjBFREU3N0Y0NjUyQjBFMDAzM0Y1NkYwMTM4OUYKLToxMDIwRTAwMDFGQ0ZFNTNEMUZDRkU1NUM2NTUyMUFGQkM4N0ZDOEVBRUMKLToxMDIwRjAwMDI0OTJBN0Q5RUVERDY5QzdGNzlDOTc5RTMwRTA5QkMxN0IKLToxMDIxMDAwMEUwRjIxQkM4RUU1MkNERTBCN0UxRkIxQTBEQjBCQTEyRjcKLToxMDIxMTAwMEZCMEU3MDQ5RjVEODI2QzI0RTNCRTE4QjYyMjg1NzkxRTEKLToxMDIxMjAwMDE0ODdBQTcyMTNGQkYwRkFGQjI0RDEzOEIyMzFCNzBFMzAKLToxMDIxMzAwMDY2MDBBQ0Q0RkNFMUM2MUNFNjBGODc3MThEQkRBNDUwQ0YKLToxMDIxNDAwMEJEOTIwOEQ4MEUzRjkwQzlBRTlGQkIwRkFEMTBFREU5MTAKLToxMDIxNTAwMDlDOTFFM0ExRTE3MDUxRjhDOUNGMzc5QjU5N0I2OUIzREEKLToxMDIxNjAwMDNEQ0E2RjZFNkM3RTIxNDFDMTc5Q0U2NUMzQTI0MDA0MjkKLToxMDIxNzAwMDdFNUQ4NERGNzQ2QTY1ODZERjgwRkFDNzY0ODI2NzcwN0IKLToxMDIxODAwMEREQjc5MzQ5Njg5RkQ0QkJDRDhBNDM5RURBRjEwRjk1QTIKLToxMDIxOTAwMDgwN0EzMEI2MkRGMUEzNEU2MEE1NTE2MUUzQjU3OTdDMEMKLToxMDIxQTAwMEMxQjk0MDM4MTA2M0U5RkEzRDFGQzIyNjkyRUY5RTZGMTUKLToxMDIxQjAwMEIxOEQ3ODVGOEZEREMwREVENzQzRUZDMzc2MzkzNjc2RDkKLToxMDIxQzAwMEM0NkQzOUVBQzU0MUVERDEzOTBCQzgyRUYwN0E0OEMyNDkKLToxMDIxRDAwMEZFRTI2RTMwOTAzRDJDRjFBNjFCNDg5RTkzRTAzRURENjIKLToxMDIxRTAwMDhFRjI5Q0I1MkJFQ0Y5MUY0MkE1ODFFNDNBNzM1RjZEMkEKLToxMDIxRjAwMDAyOERCQjM2OUYzNjBGMEFFQkMwNzhGMkExQzM2RjQ4NDEKLToxMDIyMDAwMDQ2QkYzNTc0OEJFNERFQTVCMEY3OTlFOTdBRTVCREE5NDAKLToxMDIyMTAwMDRGNUE5NUYwRkJDRTgwQjdGRjM0RUE3QjI5QjhEOUJDODIKLToxMDIyMjAwMERBRkM2ODc5NTE3RUYxOEQ4REQ1QkY0QkNBMjA3RkE4MkQKLToxMDIyMzAwMDAzMzNGOUMzNEUxM0YzODc4MzU1NTc1QTVGQzJGQkFCODEKLToxMDIyNDAwMDUzRkI2RTMyRTI3M0U3QUJCRTlENENCOEFDREMyMTgzMkUKLToxMDIyNTAwMDgyRkFGRjI0QzFGQjA3RkJGNDMwMUVFNzFFRjg3MzAyNkQKLToxMDIyNjAwMERENUY2NTUyNUY3OTA5RUQwMEY2OThEQ0FGMDAzREI3QTAKLToxMDIyNzAwMDg3M0RBNzhEMUJCMENGRkQ4Qzc4MDcyNTA4RDRBQ0VCMkMKLToxMDIyODAwMERCQTc4NkZGQkNENzczQzYxMkNGMzQ3RTNEMjhGODU1MzYKLToxMDIyOTAwMEZGNUFENjU4RTI1MzdEQzIzNTdFRjFGRTJCOTk2Mzg5RjEKLToxMDIyQTAwMDVGMzMyNENFQ0JEODc5QkI5MDVGNEExNkFFMUI3OUE1OUQKLToxMDIyQjAwMDIwQUZCQUJFMkE0QjIyM0ZCMUVGQjhCMzg4RTRENDgzMzMKLToxMDIyQzAwMEY3NkFFNEJBRjZCREJGMkE5N0VFQzM1OUQ3MERDOTRCREEKLToxMDIyRDAwMEI2RTk0NzM5RUYwMTJFNjc4RkIwOEYxNUMxQTQyMkQyMUUKLToxMDIyRTAwMDNCREE5REM1ODFFMzU2RkRDNzZCRkRCRjI1N0MzQUY3MDAKLToxMDIyRjAwMEJDRjIzODhEMjlCRTMxM0MzNEZGQjQzNzlFQzcyMzEwNjEKLToxMDIzMDAwMDcxQ0UyRDcwQzEzODk3QUQ0NzUxMDcyMURFNERGOUMyMEUKLToxMDIzMTAwMEY1RkNENjVFRjIwQkM4QUIyQjNBNzQ3Qzk5RTRBRjJBN0QKLToxMDIzMjAwMDgxRkM4MjA1REMwQUI1RTg2NURFOUI4RDdBNkMzQ0EwRjkKLToxMDIzMzAwMDgzQTdCMTZCMjNBN0E2Rjk5RjEyRUNDQjNBRUU3RkIwMkYKLToxMDIzNDAwMDZGNEVDMTM4MjJGQ0QzMjRDN0JGMkVEQUNBRUNDNzYzNTQKLToxMDIzNTAwMDVEMzM4M0I5NDQyNjU3RjFFMUFBMEE3QTJGRjRBMjFGMEMKLToxMDIzNjAwMDQ3NTkyQkYxOEZFMkMxNkNEODc0MjgwRUU1OUNCMTAzNUMKLToxMDIzNzAwMEYzMDMxQzM3RjMyQ0JGQUZGOUY1NTkyMUREMUE2MzIyQTMKLToxMDIzODAwMDhERkJEOTE3QjI4RDIwOEE4RTAzQjMwRjk3N0Y0QUYzNDYKLToxMDIzOTAwMENFODY4OEU3NDY4OTBGQjMxQzdGNUY3Qzk4RUZFMEZFMEUKLToxMDIzQTAwMDIxOTBDREZEN0IyMDE0QUZGQUQzRDlCNDQ1OTVGOUM4NUYKLToxMDIzQjAwMDE3Mjc4RjFGMkQ4ODM5RDlCMTUxMUFDODM2QTMxRjVFMzAKLToxMDIzQzAwMEU0NjhERUJFN0QwMkQyNjEyMkM3ODVGQThERjQ1QjI5MDYKLToxMDIzRDAwMDYyM0NCRTk2MzcxRTlFQzJGQzIxRkMwNUE1MjJCQ0VDQzkKLToxMDIzRTAwMDQyRTYxODc5OEFEMUVFNzgzMDc2NDdFNTlEQTEyM0RGNjEKLToxMDIzRjAwMEQ4RkE3MDFEQUQ0RUU1QkY0ODVGNDM5OEQ3OTA1Rjg4MEYKLToxMDI0MDAwMEQzRjcxOTFEQTNBQ0VGNERGMkFGQzhGRkU3MUMzQTI2NzYKLToxMDI0MTAwMEFGQjk0M0YyQThGODdFQjNFMjAxMDlENzEwNjdCNzRGMEUKLToxMDI0MjAwMDkzQTVGMEY4MzIwNzhGNEJCNTQ3Q0VBNzE5NTE1RkZENDIKLToxMDI0MzAwMEJBRTNCNjNDOUNCRkE2RkQwRDFCMkUxRjdFNkNGM0FFMEYKLToxMDI0NDAwMDczRTAzQ0Q1RTczRTk4NDFBMTBCMTk5RTU2OTk0MDM4NjAKLToxMDI0NTAwMDY1MjQ5MjNERTVFQkMxQUYyRjFDMjk4NzZGMDcyRTA2M0YKLToxMDI0NjAwMDI5NUZCNzIzODlCNTM5MUQxMjVCOUYyRkM0RDczOUQwOTcKLToxMDI0NzAwMEQxRTg4Q0Y0MUJENzlFRkJDRkNFRjFBNEI3M0Q2MzYwQUYKLToxMDI0ODAwMDA1RjlFM0ZDNjBEMTA2RTIzMUM5NjI0MDVEQkNGRTU1NEUKLToxMDI0OTAwMDJFOUJFRjA5NDczQUNGQUZGNUEwQTdFQjAwQUE2RTI5MTQKLToxMDI0QTAwMDBFREE2M0MwRTc3MERFODFBRjY0MzY0RTlCMzdCRjYzRTAKLToxMDI0QjAwMEFFNkM0NzFFRTU4NTlBMEU1MjVFMTgxNzM0MjlBNEU3QzQKLToxMDI0QzAwMEI4OTc4MUUzMTI4QzYzN0VEMUQ3QjUxMDI4N0YxRDc0MzUKLToxMDI0RDAwMDgwNUJDMkZCQURGMTQzMUYxMzJGODYzQTREQ0EyRTg5OTQKLToxMDI0RTAwMEYwNkIwMjI3Q0VERjZBRTRGMTMzMDcwREUxMEQ2QkY4RTQKLToxMDI0RjAwMEJBRjZCRUI4RTBDRjgxRkMxNUYyQzNBM0QyN0Q3RDEzM0UKLToxMDI1MDAwMERDNjI4REM0M0Q4MUM5RkY0QjA3RTc1NzZCN0M0ODY3OTAKLToxMDI1MTAwMDI1QkY4RjlDRENDNUU0MEFDQjA5RUNCRDlBOUMzOUFDODUKLToxMDI1MjAwMDBFNjgzNTBFNUQ3OERDQzVFNEIyMTMxRjcyODBDQjA5RUUKLToxMDI1MzAwMEMxMkNFNTE1N0FERUVFNjFFQjg4QjMyQjZFQkYzNDUyMDkKLToxMDI1NDAwMDJFNUYwMUU2QzU2ODc3Q0Y2RTgxNkI3NjRFNzZFRjhCOTYKLToxMDI1NTAwMDBGRjdDRDY4MTNBRDE5MjBGQ0MyMjk5Njg3ODRGQkU4REMKLToxMDI1NjAwMEIwNEFDMkNGQkZGMUNGNjdCNjZGOURDM0VBMjNCRjhDMUQKLToxMDI1NzAwMDdDQjA2MDlCRTBBNDc1NzJGQkMyQjJDOTMzQTY5MEUzNDUKLToxMDI1ODAwMEUwNDY5QzJDNjY3RUZGREE3OEU0QkI5NUZBNTYzRUNFOTgKLToxMDI1OTAwMDlENjhCNzk0NEJDQzZFODBFQ0E2NEVGODk5ODdBNEQwN0EKLToxMDI1QTAwMDg1REI1MEI1NUY4NjBFMTYyODI4NEJDREQxQjcxOTZGNDUKLToxMDI1QjAwMEFCNzVDMTk3RjJGMTdFNTlCQzM3NDhGRUY3QUQ4Rjc0MDkKLToxMDI1QzAwMDYwQzNGNTdGRkU1QTlDNUE4MTc4NjRFRjZGNEVGNjU4Q0YKLToxMDI1RDAwMDQ3Q0VGN0Q0RDkyRENGQTc5MkJFRjc0QjBBMjI4RDc5REIKLToxMDI1RTAwMEUxNTAxQUM5NTcxN0ZDRDRFOEMxNzY2MUM3RUY4RDE0QzIKLToxMDI1RjAwMDlGNTYzOUJENDdDODBFNEEzQTFBRTYxMTdFQjNBMEE5QzQKLToxMDI2MDAwMEQxNkU2NTdFRDE0QjNDMERBNDcwRkYzMTdDNkFGMkFFNzkKLToxMDI2MTAwMDg2MDhCQzJGMzk3OERFMDI0M0RFOUJDOTZFODJDMjNFM0IKLToxMDI2MjAwMEJCMjhGRkMxQjY1REU0NjFFRDA3NTY2NjJBRjlFMUU3MTQKLToxMDI2MzAwMEZDNzAzMDE1NzBDRTJENzAzODk1NzBENkFFMEZBQUZBOUEKLToxMDI2NDAwMDQ1QzRBN0RDMzNFNkQ1OUUwOEJFNUQxMEY2N0U0MUJDQ0UKLToxMDI2NTAwMEVGMUY5RERFOEYwODg3RUEwMzlGMTg2REI4MkVERjFGREUKLToxMDI2NjAwMDAyNjkxNDlGMDI5OEE3RDlCRkMzMkZGQTYyRUNDNkE3Q0MKLToxMDI2NzAwMDFGMzJEMjc4REY0NTYwN0UwNEY1QkEzNTExRjVCNEU3MzQKLToxMDI2ODAwMDRDQzc5NDM1NTYyNjNGMjRFMkJBREJDRjk5OThERjZDQ0QKLToxMDI2OTAwMDRGRTdGNkQ3NzBGQTcyMDFGOUFEQ0I5REQ1MzcxMzVFQ0YKLToxMDI2QTAwMEVGM0IwQzFBQ0ZDQkUyQzk5RUY2MDJGMzYzOUEzREU2RUMKLToxMDI2QjAwMDkxM0RBMkU4NzlDNEYzNjJFQUU3QjBGOTVBOERCREU1MkQKLToxMDI2QzAwMENDRkVEQTc1NDBGNjg3M0M2N0JDNDc5RURCMjlGRkM4MjUKLToxMDI2RDAwMEIzMjNFRkQ5RjM1OUNDOUU1QjdCMzFFMDYxREY4RjdFNzIKLToxMDI2RTAwMDdDMTJFQjk3MkRBMzdFNkJFRjdDM0JCMzY3MUQ0MjVCQTcKLToxMDI2RjAwMDQ4NzYxOTNBQzhFNjA5NjA0QzIzRDU0OTUwMTk5OUE3N0MKLToxMDI3MDAwMDk2Mzk2QzRDNUVDRDNGNTYzQUI4RkYwRjY0MkI4OTZFRkMKLToxMDI3MTAwMDVDOEY0NTk2QTNFQzIwMjI1RUYyQkU4OEE3MkI5RjM3RTQKLToxMDI3MjAwMEZDRjRDNTA5NjQ0RDIyMkU4OEJDQUM0QkU0QzFFMDJERkQKLToxMDI3MzAwMDYyRkVGRUM3MjI5NkQ1QkY1M0JBQjgwNUQ3NUJERjIzMkEKLToxMDI3NDAwMDczRkYyRjc4NzI1MEU0Qzk4NzM3QTdCMDNFQzUwQjA1RDkKLToxMDI3NTAwMEY1MzQxRDVCMEZGQUQzMTk5RTRERjNEMEM2QTA2NDUxMUEKLToxMDI3NjAwMEQzMjE2QTRCMkIwM0YzMTA3MTk4QjNBMkY3OTA4MTlCOEUKLToxMDI3NzAwMDczMkVGMUFGRURFMDBGNzJGNUM0Rjc3MzI2ODg0MzExQTUKLToxMDI3ODAwMERCQkUxOUZBRjg3NUM0RTE5MTJFQzQ3Rjk0Qjg4NENCRUUKLToxMDI3OTAwMDYxRkM0MzA0MTgxRkFGQzc5QjQxQTlFRkFFRDk2RTRDMzMKLToxMDI3QTAwMEY5OUYxRkZCMDM3RDFDREEwRjExMDNGMUM4N0I3RUNDNjAKLToxMDI3QjAwMDRGRkQyODUwQkJEMzMzRDU4OTM4RkUzNkM5M0JENTg5NjgKLToxMDI3QzAwMDM4MEU5RUY4MjY5OTdDN0FGQkE5NEY2Q0U0RUZEQjhDREYKLToxMDI3RDAwMDlFNUNFMjU5NUIwNkQ2MEJBM0YwNzM4MjkzRjNBN0Q4RjUKLToxMDI3RTAwMDE0OURBNzZCRUQ1MjI3RTdGRjY0M0YzQzQzRkNBOTZCQTgKLToxMDI3RjAwMDkzRUQyQUVBQkJCRjRERjYxODMxOEZCQUUwRjEyNkVCMTQKLToxMDI4MDAwMDExRDI4QkUwNUYzRTlCRTJCQkE4N0ZENzcxRDg2MTFERTAKLToxMDI4MTAwMEU1MkYxODY3RDZCRjY4ODhBQTRCNkJDNEJFNDYxNkY0NkUKLToxMDI4MjAwMDZENEI0NTlDN0MyRjRCQUNBRUREMTg5MzhGRDQ1MEZFODYKLToxMDI4MzAwMDUyNDBGNTQ1QjM5MUQ2NTNGNTcyQ0MzQzk0QzcxNEQwQjEKLToxMDI4NDAwMEI4RUZBRTczOTczQUM1M0U0NzI2NjQ1MjFFODMzQzYyOEEKLToxMDI4NTAwMEY1RjREMDY5RDlCRDhCNjJBMDFFQkE0REM4REYzRDNBRjAKLToxMDI4NjAwMDhFMTNGQTRENjY4RjVBM0U2MzcyNzlFNjkxRERDRkQzQUYKLToxMDI4NzAwMEUyOEFBODVCODc1QTI1OTVEOUNGNkVGNEYzRDgyRkJEOEQKLToxMDI4ODAwMEE4MzQwM0M3RTE1NENBMEM1QTBGRTc2NUE5OUU4RjJGREQKLToxMDI4OTAwMDBEQTYzM0ZCMkJGMTYwM0Q4RkVCNUU4RkY1QkM0QUVCNTEKLToxMDI4QTAwMEQ2RjIzQ0Q1QzBENjhGRTE5N0U1NzlCMzQwNkRCNEUxNUYKLToxMDI4QjAwMEI4MERCQjI1QjZFRjUzQkREQjEwOTVFN0Y5MDQzRTM1RTcKLToxMDI4QzAwMDNCNEUxQ0ExNzJCMjM2MTA3MzVGRTBFMzhCQzFFNzBEODMKLToxMDI4RDAwMEZBMzE2QjI0NEU4RjNBNDVCRTk3MDY2OTkxRjkxRTc0MDIKLToxMDI4RTAwMDNCNDdBRDBCMzQ3Q0I0M0NGQjRGMDY5RTVGN0MyMEU2M0YKLToxMDI4RjAwMEQ3QzZGRDhCOTNEN0U3NzUxRTYwRkI0NzM1QUFBQ0FBRjgKLToxMDI5MDAwMDNDMUZCNEFFNDFCRURDMkZGODcyQkZFMDhCMEZGOEI4QUQKLToxMDI5MTAwMERBREQ5MjFBQTI3OEY1MzNBRTc3MzNGRTExMkVFQjAyOTAKLToxMDI5MjAwMDZCMTZBNDJBMjM3OTU1MjVGMEQ4RDg2MjYwRjkyRkMwRjgKLToxMDI5MzAwMDI2MjNEOUU3QzY5RDMxRTMwNDJFNTUzMUI4RDQ3OUE1QjUKLToxMDI5NDAwMDE4Rjk3ODNFRkVCN0NBNTc2REUwRkIzNUQ1QzgyRkJGRTIKLToxMDI5NTAwMEYyRkYyNzZGQUNGRUZFNUREM0RGMTQ5ODEyQTVCRjQ1RDIKLToxMDI5NjAwMDQ5MzdBNEJGRDgzQzc5RUY5MTI5MTY3QTdFQjgzQjgzQ0EKLToxMDI5NzAwMEVENDM2OEJDODk5RDY3ODFDOEIzMTdFRUUwRjk2ODdGQjUKLToxMDI5ODAwMEM3M0M0QjNFRDU1M0M3RjU2RTA5RTcyOUVBRjk1RjVCQjMKLToxMDI5OTAwMDNFRTI1MUQ4Mjk0MzA1NEUzMTE4MkM3QUM2OEZFQkRDMjQKLToxMDI5QTAwMEQ3M0Q3MTk5ODJGMUExQjA0N0NGRTI0QjUxNEZBMTRBNzcKLToxMDI5QjAwMDc1NEQ2MTRGQTEyNTMzODExOTRGMTJENTBCMzgwRjhCRkYKLToxMDI5QzAwMENGODNDNzI3OUVDQzIzM0ZEQjNEQkY5ODYwNkYzODVFMjcKLToxMDI5RDAwMDY4QTEzQzYyMUZGMDdEMERBOUE3MzhBOTJGMjJERTc0RTMKLToxMDI5RTAwMDNCRjlCRUM2QjY5NEZGNzk5NkYyRkM4NTdCMEQ2RUNBQTQKLToxMDI5RjAwMDQ3MTYxQTg2REU5RkVEQTJGN0VCREQwREQ4QUZFOTU5MzkKLToxMDJBMDAwMEJCMjU4RUY0RkU5QUU0QTY3NEZDNDg2RkJERUI0N0E0ODgKLToxMDJBMTAwMERGQTBDMTZFNjJGMjNFN0M5MEVFRkI1QjI0RjcyNDFDQ0IKLToxMDJBMjAwMEVGRUJCQzNEQjcxNUZCODVDRDQ1NkU4MjU5N0I1RkExQjEKLToxMDJBMzAwMDQzNzlBMTgyRjJDNTcxMTY1NkM3MkZCQ0M5QzBFMkVFMTgKLToxMDJBNDAwMEE1RjE5NjVGNTNCRTU0RTU2OTVFNDBGRUY4RDJEQkZCMEMKLToxMDJBNTAwMDhDRTQwRjA2NUIyNTQ4QzE4NTFDNDkzOUY0MUIzRkFFNDkKLToxMDJBNjAwMEYzRDI5QjI3OEM5NDk0Q0Y2QjNCNjFFQ0ZCOEU3Q0EyQzIKLToxMDJBNzAwMDVGOTUyMUM0RUFGNzI2MjNENTQxQjVDRDVBQkZDRjQ4OEIKLToxMDJBODAwMDdBQUExNEY5NTVERENCQkY2N0ZEMkFBQTEzRjA3RDU1NEMKLToxMDJBOTAwMDNCNjU1NUMxOUY4NzNBREYzMjEyREU3NTJEMTI4QzREOTIKLToxMDJBQTAwMDhGQjhGRkIyQzRFRTZCQkM1RjBCOUMwNzZCODU3RkFBMkYKLToxMDJBQjAwMDE2RkI5MEQ1QjQwRjg5RDc2MTNCRjczNzFBRUYxRkQ4QjMKLToxMDJBQzAwMEJERTQwODg1RUY3NTRERDE3RUU4NDFDMUYzMEQ1NDk3MDMKLToxMDJBRDAwMEIyRkFEQjZCMjRCRDZFRDgxMTMzNEVGMEZDQzFFRkUxQ0UKLToxMDJBRTAwMEI5MzU0OUY4RjMxQ0M4MjE5RTVGOUVDQkUzQzlFNTEzQjUKLToxMDJBRjAwMEYxOTYzQzVDRDdFNTYzQjIxQkUwM0JGOUNFRTJFRjcxQTcKLToxMDJCMDAwMDkxMkYwQzg3NzQyQzlFNjlFMzA2M0FGRUNDRTI4REVGODAKLToxMDJCMTAwMEY4QjA5MUYyREIwNUMxMkY5ODNFMkE4MjA3RTYxM0RFNUEKLToxMDJCMjAwMDc3ODJCNzg2RjBCQjMzNjhCMTkzRkQ1N0Y0NzE3RjUwNUQKLToxMDJCMzAwMDFFMzRBOUI0MEY3RTI3MDRCNjkyOUUwN0JCNUVEREVBNjEKLToxMDJCNDAwMDI0REVGQzFCRTcwRDA4N0ZCNzQxRTBCQTQxRTBCQTAxODMKLToxMDJCNTAwMDFEN0UxMkJBRDhBQUJDMDMyRjYxQkEwRkU1QzBGRDUwODIKLToxMDJCNjAwMDc5NDBGOEExOUREMTM4NjNFNEI5OEZGNDU1MTczNEMxODkKLToxMDJCNzAwMEQzNzhGRjBFRTE4RkVFNjhFMUZFMjgzNjRFRDY4OTdERDAKLToxMDJCODAwMDgwQzE3MUI5OEJEOTdFMkJENkJCOTRDN0Q1QjQ0NEUzMzEKLToxMDJCOTAwMDVGMjdGNjA1RUE2MkUyRjBDRDQ5N0NERkVFRkJFQUZGNTMKLToxMDJCQTAwMDU4M0RDRDhERDE1M0M1MTBFNzRGMzlDNTNENUM3Rjc3N0EKLToxMDJCQjAwMDY4NEIxRUVEREI2OTc4QzVFQUE5NUJDOTRDMUNBRDlFNkMKLToxMDJCQzAwMEQ1REFGNzQ1REVBRkY1MTcyMzcxMjlERjBDRDg5QkFDQkEKLToxMDJCRDAwMDkxNzVGQ0FCNDkzQ0ZFNTRDRDkyRkRBNEU3NkJGNUNFNUMKLToxMDJCRTAwMEM0NDMwNThBMkU1Q0VGNjA5REIzMzI2OTBDQUY3QkE2QUYKLToxMDJCRjAwMEUxRDQ0NzI3QzhFMDcyODVFQjlEQTc1MjVFQTgyOEE0QzAKLToxMDJDMDAwMDdDQTU4NUZCOTE4MTEyOUMyRjkxRjI3OTYwRkVDQkQ3MzgKLToxMDJDMTAwMDYyNTJBOTRFRjEyMTdGNTg5RDQzQkNDMUI2MzIyOERERDYKLToxMDJDMjAwMDRFQkNDMUZBNjExRENEQkY4NEI2OEUxMTg3MjUxRDNDRjcKLToxMDJDMzAwMEVGNTkzMkZGMEJDNkI3NjMxM0Y5N0E4N0Y1Q0FEOEQxQkIKLToxMDJDNDAwMEVBMDlBRDhFQThGQjhBRTdBOURBRjUzQUI0N0IxQTVGRTgKLToxMDJDNTAwMDE3OTQ1ODVEREM3NkYwRUJCNDc0RjQ5RjgzOUQ1N0QyRTMKLToxMDJDNjAwMEQ2NjBGQkEyNThCRjk2QTcwRTYxOUU5QTIxRjIxNENBQTUKLToxMDJDNzAwMDlGRDc3Mzk1QzEwNjRDODcxRjQzMUVBRTE3NzEwRUE0RDQKLToxMDJDODAwMEFEQ0M0RUVBMjhEOTI1QkVCNTRCN0MxRjY3M0Y1RTk4NzgKLToxMDJDOTAwMDg5RkVGNzgzNzg5NkM3MEM5Q0UxRTc0M0Y0RkMxMzk4MTAKLToxMDJDQTAwMDQ3MERBQzBEMUM3NkUyRjhDQkFEMTI4QjdGRUIzMUM3MzQKLToxMDJDQjAwMEJEQjU3MEE0QkRENzBBNUUzNkMwMTY1MTk3NkQ2NTZENUYKLToxMDJDQzAwMDc5RjZERTRGMUUyNzdGRDQ2MjU2QzhCRjBFNzQzNDFBQzEKLToxMDJDRDAwMEQ5RkVCMjFBRjE3Q0M2Qzg3Q0E4NTZGMEI3RjY3QkY2Q0UKLToxMDJDRTAwMEI1NUU0RDEyNzE1MkYwMTJEN0MxRjJEQkMxNjNCMkREOTUKLToxMDJDRjAwMDI0MzFGQzdFMzUzRTEyMjc5MUZGQjQxRDhDNjM3QTFFNzEKLToxMDJEMDAwMDNDNjE1NTI5Q0ZGRjVDRjBFRjkyRDg3NzZGMjg5MTE5N0QKLToxMDJEMTAwMDJFQkE1OUJDQ0RFRDdBMkI4M0Y0NEE3QUYwRDIzRTRBRDIKLToxMDJEMjAwMEQ3NUI1MzNDNkM5RjRGNjVGNjU0QkQ1QkE2QzNCRUIwRUEKLToxMDJEMzAwMEZDMDEwQkRCMEJENUZBMUFCRTNFODEyRkNBMzVEOUU4NTAKLToxMDJENDAwMDBBQ0JENUFFRUZCM0I5NDdCMTFCNDkzQUM4RjRBNjkzNDUKLToxMDJENTAwMEEyRUI1Q0RGN0VCOTUyOERCMDI3NUNDRjZBRjI2RkZCQ0QKLToxMDJENjAwMDA1M0Y0MDNGOTQ0QzdFQjkzMzQ5NjFGMjM1MDRCOTlFMkEKLToxMDJENzAwMDc1OURCQ0M1RjcyRkU3RkIzNjA2RjZGRTExRjdDQkZDQjkKLToxMDJEODAwMDM1NzRGRjcyQkEwNTE4NEZCRUYyNTc1MEZGOTEwQzk5NzcKLToxMDJEOTAwMEY5QTk0NzNFQThDQTgyODhGNzgzQzRFQjcxOUY2MTI4Q0UKLToxMDJEQTAwMDk5RDVDMzI3NzQ0QzNFREY4OUUxRTQ4OTU2RjI4M0NEN0YKLToxMDJEQjAwMEYzRUQ3OUU0REZCODdGMzg5MjYxRDk0OEZDRjZEMzdCMzQKLToxMDJEQzAwMEM3ODZFNzU5OThDNEUzM0NEMDdBNTMyODlCNzk5MUNGQzIKLToxMDJERDAwMDJCRDZCQjA1OTYzMjFDQjYwODlFNzU4OTdDMTRFQkE2RDMKLToxMDJERTAwMDMzNjQ4RkIxNzVEM0Y1RjJERDg4RkE4RDNEN0Y3OUFFMEUKLToxMDJERjAwMDcyRjI0N0M4ODNDMjYzN0EzRkQ1RUJGQkNFNzIzRkQxRjQKLToxMDJFMDAwMEQwQjlFMTc3NTQwN0ZCQ0U5QjgwRkNDNDIzNUQxQkIyOTUKLToxMDJFMTAwMDI4MEU4M0Q3M0I5NUYyQkJDQjVEMEY0RTY1RkI5N0QyNTcKLToxMDJFMjAwMDE2MjY5NzlGRTQ0QkExQkNFOTc0MzJFNTQzQjU5REE3RjQKLToxMDJFMzAwMDkzNTk1QzZGOUZGRTAyRTU0OTk4MTdERDQxRDczMTVGREEKLToxMDJFNDAwMDYxRkMyQkVDMjk2NkZDREI3N0JDMzgyOTkzMDQwN0I3QkYKLToxMDJFNTAwMDg1RTZBRDNEQTZBRjI0N0M2QThGMTVCRjU3NDFGOTRCN0YKLToxMDJFNjAwMDRGMTlDQjkzQjRCQ0E4ODhFQTcxQ0E5MzhFNEQ4Q0NBMTMKLToxMDJFNzAwMDkzRkEwNTdFODMwN0UyRDhGRTg3MDQxOTlDM0YzMDMxMjAKLToxMDJFODAwMDhBM0YzNTZERUZCMDdDQTJBNjQzRjY0NEYyRThEQTczRDAKLToxMDJFOTAwMDJFM0RFMzhEQzFBNUIwRjkxQTAyOTI4N0YxNjMyRjZGMjEKLToxMDJFQTAwMDZCM0FGNkIxRjU1NTFCMDI0Q0RGMEQyRDA2N0VCRjk1MzIKLToxMDJFQjAwMEI3MDA0REVDNzkzRjM4RkQ4NEM3N0I3NDA5RjU1MDZFM0YKLToxMDJFQzAwMDU0MjdEMEZFRkFCQkU5QkNCRTg4RDVDNzc2MTdERjRGQzIKLToxMDJFRDAwMDc4Rjc5Q0Y3NjZFMkNCQkI3M0JENTlGNjUxRTI4NjFGQ0IKLToxMDJFRTAwMENBNzhERDJEMDlCQ0RCMEMyQ0FGOEMxREI3Q0RDNUY3MjYKLToxMDJFRjAwMDdCNkM0OTEwNzVERUE4QjVGNTJFQ0U5RjcyMjNERkE3MzcKLToxMDJGMDAwMDhBQkQ3RkFCOEJEN0NERjhFRjE5MURGMkUyNjQ4NUMxODYKLToxMDJGMTAwMEZFQjRBODI3QzZBMUJGQkQ0QkY4REI2NTc3MUE1OERFMDMKLToxMDJGMjAwMDcxNTI5QzMzRERBNUY5REQxMjFFQkZCNUZERkUyNTNCQjgKLToxMDJGMzAwMEUxNDkyQ0ZGRTE0QkM4NjNFNzYwNEIzQ0QxN0VFRjZFNkIKLToxMDJGNDAwMDkxNUYyRDVCMTQ3MzVERTQ1Mzc3N0Y0RjNFMzVDMzI1NEUKLToxMDJGNTAwMEZDRTE2NDk4Q0NFQjA2QUI4NUY2NDVCRkVDMzZEODY1NTIKLToxMDJGNjAwMDI2QjczQUIxMzI3RkU0M0EzNTdGNzM0NDlDMEY3NUEzOUMKLToxMDJGNzAwMDFGQTRCNjIxRTc0M0I2NEZGNUVFODE3M0JGNzEzMDNGMTIKLToxMDJGODAwMDFBMDcxOTdDREY5MUVERDdENzVFNjdCRkJFRTE5QTlEMjYKLToxMDJGOTAwMEZFMzA4QTc3OUE5RUZBMjlDRkNGMUJBOUE3QTUwMkVGMDgKLToxMDJGQTAwMDVBRjMyNTIzM0JCNzg0NEREQjc1NzJGODlDRDI2NEYwNEQKLToxMDJGQjAwMDdBNTI3MTFEODY4RUI5MjEzQUJGNkNDODMxQjE3Q0E5OTUKLToxMDJGQzAwMEZGNzY0OTI1N0Y4RjcyQTY5OTIyRkM3REZGMzg5RTdGNzAKLToxMDJGRDAwMDNEQjI1QzYyRkJDMjA3NzIzRTY0NzFCQzM2RDQ2QjI0QTYKLToxMDJGRTAwMDVFNEQ2RTVCRjMyNEIzNUYzRjlDQTI3QTQ5RDNFNzYyRTgKLToxMDJGRjAwMDMzOEY5RkQ3RjRBOEFEOTc2RTJBQjQzRUE3OUZGQjY1ODkKLToxMDMwMDAwMDE3NkI2OTNDQzVDQkJCNDQ3QzVDNUMxMkFEQkYyQ0U4NDQKLToxMDMwMTAwMDVENDBGQjIzRjc3ODI0OTYyRjVENEZFRjRCNTc0QzdCOTkKLToxMDMwMjAwMDg3RENERjhERUFGRjlGNUNERTg3NUQ2NEVGQkRDM0NCOEQKLToxMDMwMzAwMDY5N0ZGN0REOUM0RkQzMjhCRUQ2NUQ4N0NGN0U4MUFGRjkKLToxMDMwNDAwMENGQzJDRkM1N0MxNjdFMUVFNkNFNTIxQUZCMTAxRkJEMjYKLToxMDMwNTAwMEMzQkJEOTQ1RkI0RkJBQkZEOEE2MDBDREQzRjdBQjdBRDcKLToxMDMwNjAwMDg5RjQwMzBDRkZFQkQ5RDEzNjMxRUYzNjk3OUREQjhCMUEKLToxMDMwNzAwMDhCOUYwRkM1NTE5RkVDRDlBMDRFMjAzRjAxNzkzNzc2MjkKLToxMDMwODAwMENFRDdCMEZGNjgwMUU5NjlFMEMwQjEwMjYzODQzRTJGOEEKLToxMDMwOTAwMEQ1QTMzRkEwRjhEMjc5Mjg1OUIxNDZGMjREMjdGOEE2MUEKLToxMDMwQTAwMDY3QUQyNDJEMTU3MTMzOUE3Rjk3ODg3RkE0RkZCRDg3NjQKLToxMDMwQjAwMEVFQTJCQUIwQkY2RDk5NEI1MjIyRTI2QUZCNDlEQkE0ODMKLToxMDMwQzAwMDg4NzlGQjgzMzIxQjhGRjVEOEU0QkIxMzIyRTU3QzkyMTEKLToxMDMwRDAwMEM5RDkxRkUwRjMwMUY0NEQ1RTk2MUY3OUJGOTE5RjFCODQKLToxMDMwRTAwMDk5RkIxODhGOUZDQURFQzRDRUREMzUxRUVCODFGM0I4ODUKLToxMDMwRjAwMEFFNjMwOUIwMzgyNUQ2MUQzMEUyMEZBQTMzQkE0QzJBODgKLToxMDMxMDAwMDlENTNEMDdFQkIyM0MyNEU4RTBBOUM2NzYyNzE0MEZDRTkKLToxMDMxMTAwMDlDMDU3RTk5RTY5RDg5MzNERTRCN0QzRDg0RTg0QzZFQUYKLToxMDMxMjAwMDM2ODQ2NDdFREUzRDAxODhENzMzMDRBRjY3RUE0MzA3MDcKLToxMDMxMzAwMEE0MDIzNjhFOUQ0Qjk1NDIyRjFCNzcyQjBDQjFENjAzRTQKLToxMDMxNDAwMDc2M0RCNTY1RTA2NjZEODkzOTc0MDdCOTkzQkM0MDgwRkEKLToxMDMxNTAwMDdEOTcxNDRBRDYzQjJFOThEOTUxMjk4Q0E2QkZGMEZBRjgKLToxMDMxNjAwMEY1NzA0MUUzMjkwRUM2QTQ4N0VERTNDNzhFMUIxNjc2RTIKLToxMDMxNzAwMEVGQTZEQTgyRjREQzBGNkMxRkVFMTZFODkzRTkyNUIzQjQKLToxMDMxODAwMEY1QjA4OEJFMjdCQjQ1MEZFNjc4OTQ3N0VGNjExREIzOTUKLToxMDMxOTAwMEU3QUUzRTQ1MjU3RkU2NEUxMkNGN0Q4NkNGNjE3RkE2MDYKLToxMDMxQTAwMDg3REIyRDg1MjBGQTZFNDU1QjZGMkMwRUE1MzgxRkVENTEKLToxMDMxQjAwMDBCQ0VENDYzRTVDQjcwMENCMUY3REQ0NjgyRTNCQUU3MDIKLToxMDMxQzAwMDgyQTJBN0ZFMUY1REU5NjIzRjg1RDc2OUYzNDQ5REE2RjEKLToxMDMxRDAwMDMzRkIxOTFFN0YxMkYxOTFDRTczNkMzODRGNjk5MzA0NDMKLToxMDMxRTAwMDY3RTk3QzI2OTNBRjU3OUJCRjE0QjNDMUM0NDIxQUNGODMKLToxMDMxRjAwMEUzMUI2RDg1OUY3NUYyNzMxRTFCM0I5RjlCNkYyN0JDNjYKLToxMDMyMDAwMEE0NTBCMkVFQUFFNUM2NzExRDRDMDYyNkI3RURGRUExOEMKLToxMDMyMTAwMDgxQzc4QkMzRTc1REVFRTBEMUIzRjQ1RDhFRTRGMUIwMUUKLToxMDMyMjAwMEVGN0FEQzY2NkI4OEYyNzM2NEM3QTVDOEJDRkJBQTZCMzcKLToxMDMyMzAwMEVENUZDOURFMjVDNUNFRjAwMjJGMjg5NDdGOEMwRDdGNkYKLToxMDMyNDAwMEVGMDI1NzkzQzJERkQzMTA4QzE3OTNDM0U3RkJEQUY3NzMKLToxMDMyNTAwMDM1QkJENUE1OEEwRUY1QjJDMjY1NzY5MzVFMEFDRDY5RjcKLToxMDMyNjAwMDQ1NTQwRjM2REJCRDdGNzVCMUVGNkM1QTI2QjFDOUY0RkEKLToxMDMyNzAwMEVBRjRDQTg0MzBERjJERTAyOTIxQkNCNTczN0Q0OUU4MkEKLToxMDMyODAwMEVGN0FFN0Y2NjRBQkM0NzMwQkJBN0RGQTJFRTgxOUI0OTMKLToxMDMyOTAwMDE3QjM3M0I0RUY4RkY4NzkzRTVBQTE0MkRGMURDMTEzMDMKLToxMDMyQTAwMEYzMTRGQTJFNjA5QkMzRUM3RTVBQTIxNDFGRDc2NzA5NTEKLToxMDMyQjAwMEFGQUZEMUNDQkYyNzY4MzRGM0VGMDI2MEVCNzRCNjdGQjkKLToxMDMyQzAwMEY2OTAzODhGNjhCNEVBQjJBOURFNkE4NDc4Mzc5NUY0NEMKLToxMDMyRDAwMDlBQkMwRjI1NzAzRTNFRjRERjE2NzYzRTFBMkJGN0Q3QzgKLToxMDMyRTAwMEYxREU5QzMxRDNDM0YyM0YyQUJCQ0Y2MkVFMTM4NUU3RjgKLToxMDMyRjAwMDFDMEQ0RjVEMThDRjE1NkE0NjYzOUZDMkYwOUI0NkNGRTkKLToxMDMzMDAwMDRGMzNBOTM3RDFCRUM4MkExM0ZGN0U0OUMzMEQxNUNBNTIKLToxMDMzMTAwMDQ4NkQxN0ZBRDBGMEIzOTNCRTY5MUQxRUQ0QjdDNjk3OTcKLToxMDMzMjAwMDhDMzA3RUNGQzQ3M0RDMENGNEU1NDQyNjdCNTYyMTdGQzEKLToxMDMzMzAwMDFEOEJDQkZGMDFBRjZCN0Y4RUYwMjkwMDAwMDAwMDAwREEKLToxMDMzNDAwMDAwMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwQ0IKLToxMDMzNTAwMDAwMEJGQkNBQ0ZDMEYwQTMxRTgxNDNEMUY4RTgzODlEMTMKLToxMDMzNjAwMDBGNTM0Qzk0MTE4MkQ3QjNFMEQ3OEIwRDVCMzEyMkQ4MjkKLToxMDMzNzAwMEZFREMwQzBDQ0E5QzBDMEMyQTQwREMwN0M0RkQ0MEZDOTMKLToxMDMzODAwMDFFODgwREI4MTgxODBDODEzODBEQzg0RTA3NjI3QjIwQjYKLToxMDMzOTAwMDc2RTM4NkU4Njk2NjY3NjBFODA2RTJDOTQwM0M5QjlEODMKLToxMDMzQTAwMDc0RkIzOTI0MTkxOEE2QzgyMkY4NEY4MDZDNDUwNUQyNDEKLToxMDMzQjAwMENEMTlDNTQzMTNGMzFCQTFGMjM1QjQ1MUY5QzFCQUMwRkQKLToxMDMzQzAwMEY0ODFBNDQ2NTM5QjM0RjM0RjAxRjU5RTM2QzIyREFGRDIKLToxMDMzRDAwMDZFOEVDQTk3QjM0NEU1MkYzMzQzRTU1Rjc0ODdEMDAwMDAKLToxMDMzRTAwMDkzRERFMTM0QjgwMzAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKLToxMDMzRjAwMDFGOEIwODAwMDAwMDAwMDAwMDBCQzU3RDBEN0M1NEM1MkMKLToxMDM0MDAwMEI1RjhEQ0JCNzdFRjdFNkYzNjFGODQwRDI0RTEyNjA0MTAKLToxMDM0MTAwMDEyMzBDMTI1MDYwQzU2REE0RDA0MDU0NTFBNTAyQkE4NkEKLToxMDM0MjAwMDRGOTcwMDA5Qzg1NzUwMkE2OUM1N0YyRTQ5MDgwMTAyRTUKLToxMDM0MzAwMDJDMTg2QjUwQzRFNTUzQUNEMDA2MDUzRjVFQUQ1RDEwNTMKLToxMDM0NDAwMDJERkE3QzM2MkEyQUVEQjMxODEwNDEyOUQwMTRBNTZDMjgKLToxMDM0NTAwMERGRDNGMjlGNzM2NjZFRjZERUNENkVDMEU3RkJCRjdGRjMKLToxMDM0NjAwMEZBQUJDM0RDOTkzQjc3RTY3Q0NGMzk2NzY2NjVEMTRDMTQKLToxMDM0NzAwMEQyMDYxMDcyMDlGRTdFNDRDODE4MTMyMTY0NDRCNDI0OTUKLToxMDM0ODAwMDE1QUE0MDQ2MTJGMjUzMkJDMTNGQUQ1RjZDRDk1ODQ3ODUKLToxMDM0OTAwMDQ4RDg0MjQ4NjQyNjIxMUQ0RURBNTFBQUIxOTI0MjVBQjgKLToxMDM0QTAwMERFN0VCMzQ4RDIwOTQ5ODJGNzE1NDI5QTg0OUE0MzAzRDMKLToxMDM0QjAwMDRCMDg1MUIzNDRCMjlEM0U1QTlFMzkzOTI5RTA0QzNDRTkKLToxMDM0QzAwMEVFMkUzRUVFQUZFQUFDNThCNkQ3NzlCMDdDQkVDRThCQ0UKLToxMDM0RDAwMEU1REUzQTg1ODRGMzA5NzlCMUFFMDBDQjk3RUI3Q0Y4NTEKLToxMDM0RTAwMEZDNUZFQjRBQjE3Q0I1Q0U4RkU1NkI3NUUzQjAwQ0Q3RDIKLToxMDM0RjAwMDU1NjA3OUEwNkUwQTk2MDdFQjAyRjhERTlCNzVCM0IwQjMKLToxMDM1MDAwMDNDNTQ1NzgzQ0ZERkFFQUJDNUYyOUQzQTE1OUZCRjVCRUUKLToxMDM1MTAwMEQ3OEM2NTQ3NUQxMENCRjdFQkRBQjAzQzVDMTdDMjdFMDkKLToxMDM1MjAwMDFGRDVFREM0RjI0ODVEM0IzRUZGNTNERENCNTg3RTUyQzQKLToxMDM1MzAwMDE3QzZGMjRFOTI0QzQ4MUY0MkVFQjhFMzgyNzUxQTVERjAKLToxMDM1NDAwMDZGRkU1MzhCREUxRjlGNDZDOERBMTFBMjBGQzA5NUZGOTYKLToxMDM1NTAwMEQ0MDk2RkEwMzBCQUVFQjVERjlBQTZCNEM3ODFDQjRGQkQKLToxMDM1NjAwMDg4ODBFM0FDNzUxMTZDNUZCQkZGOEY0NDI5MjI2NENENkEKLToxMDM1NzAwMDg4NEVBRjRBRUJFM0Y5Nzc4NjZDM0Y2QzlENTYxOEVEQTkKLToxMDM1ODAwMDE3M0JDRUU3QzRDNEM2MzFEMzc2REE2RkYwMDZENjVGRjgKLToxMDM1OTAwMDZCMUYwRkRGMTkxMTZEREZEMUY2QkU3NUJBNTNERkNFODkKLToxMDM1QTAwMERFN0Y2NkUzRkI1NkMwREZFQTg4NDRDMjg4Nzc5NTEwNjkKLToxMDM1QjAwMDVBREE5NUFFQjYzRTE0Q0ZCNjIzMTY2MkM5QTFGODU3QjMKLToxMDM1QzAwMERBNDkyNzFENjdDREE4NUY4NEM1MTI1ODM3RURBNkMwMUMKLToxMDM1RDAwMDNBM0YyMDAyODU4M0VBMjI0ODBGMEE4QzcxNkRGNDNCNDIKLToxMDM1RTAwMEQ3MTIxMUU3OTFGRkQ0NjFGNjlEREIyRjYwRjlEQTNGMjYKLToxMDM1RjAwMDY0NDJFODdCNkJFRTEwNDIwRTNBRkU5QUQxRTdCRDdFNDQKLToxMDM2MDAwMEEwMzdGNTU5MTNEMDFCOTJBQjAyRkZFOUY0NTZEMEIxQTUKLToxMDM2MTAwMEQ3OEVGRUM4QUI1MjM4QURGRUY2ODMyOUQzODFGRTg2MjUKLToxMDM2MjAwMDEzMUY3QzZGRjVGRTU3ODgwMkVENDU1RDA4QkYwNkJFOEYKLToxMDM2MzAwMEVFRDU1M0E3MERGMDE0MjZBNjRCNEE0OTQ0MkNBNUNCMzIKLToxMDM2NDAwMDc1MTI3RjI4MEU3Q0ZGMDU4MDQwRTE2M0YyODQ3MDREODcKLToxMDM2NTAwMDc2REEyRjFFMUVGRTg1QzhEODZGQjVBQkUyNDM4MDhCOEQKLToxMDM2NjAwMDdBODdEOUI3OURDRUZCMDY1Rjk4OUM3NDQ2RTcwREY1MjcKLToxMDM2NzAwMENGNjhEREY5NzU5ODk4NUMzMEVGMkZCRDI2QkE3RTQ3OEMKLToxMDM2ODAwMEE5N0M4RDhEQ0VDNkQ5RDU3NTA0REU3NzVFNUZFNTg3QzIKLToxMDM2OTAwMEI1QUYxOURFRTlBREEyRkRBRDA1MURCODVFRTIyM0JFRjIKLToxMDM2QTAwMDQxNzQ1QzdCODE0QUE2MTcwMjFDNEM4OEQ3RDhGOTRDMjAKLToxMDM2QjAwMDA3NzhGNzAxM0NGREREMEIzOEQxRThGMEMzREIzRkIwMDQKLToxMDM2QzAwMDU2RUFGQTNGQTNEMTg3QzBFODhCQjQ4NEFEOTM1Q0QxQUUKLToxMDM2RDAwMEY2QTdCNDc2MUJBMzFGNjIzNUI2NkY4OEExNjM5Mjk5RDMKLToxMDM2RTAwMEEwREQ0QzAxOERGODEyNDNEQjA1ODRCQjc1NzI1MUNGMTAKLToxMDM2RjAwMDc5Qjc4NERGNDIzRTcwRkFDMkQ2NDA5Qzc1NTEzRUIxMjQKLToxMDM3MDAwMDgyREM0OTJBMTE3RDAwQUYzNUEzMjlCRjE0NDZENzc5NDEKLToxMDM3MTAwMDM5QkU2QkU2NzA1OTVEMzJEOTA1RTM1RjRFNkUxNUI1NjMKLToxMDM3MjAwMDhCMjQ1Q0MwNjUyNkZERkZENTJGREJFOUNDQTNGNUUxM0EKLToxMDM3MzAwMEUxMTQ0M0ZEOUE0M0ZEMENGRDQ3NzRFNDFBREFBRjNERjIKLToxMDM3NDAwMDMyRDREMDNFQUFCM0Q4NTBGRkMxMTdENzE5RkE4RkVFQTIKLToxMDM3NTAwMDJBMzdENDdGMTRCOUQ5RDBCRjhDREM2NkE4REY2MEJEMEUKLToxMDM3NjAwMERCRDA3RkFDNjdCQUExRkQyNkVGMUM0M0ZCNzhFNTQxQjcKLToxMDM3NzAwMDQzRkQ5NjgyODcwREZENkZGNTM1MThEQTdGNUNCQUNBNzYKLToxMDM3ODAwMEQwM0VDOUZGQThBMTdFREJCODI3MERGREVGQThEODZBRkYKLToxMDM3OTAwMDY4QkY3M0NBNzM4NkY2QTk4MTE3MENGNTc5RjZDMDUxMTQKLToxMDM3QTAwMEMwQ0ZEREIzN0U2Mzc4RUY1RjZBNUUzN0Q0M0YyNDY0QjkKLToxMDM3QjAwMDVDM0NGQzEyODFDOTE5NEE0MTlFOTM1N0YxRkU1NEM0RTYKLToxMDM3QzAwMDc5ODBFNjgwOEVGQjMwM0EyREQ4OUM0MDRFRjJGNjY3MjkKLToxMDM3RDAwMEI3QkQ2RjlENjk5MDkzNjY0NkM3MTlBQzdENjdFOEZEREMKLToxMDM3RTAwMEY4RUY2NzcxM0UyMTFERDZDOTJFN0QzQjlCRDc1NUZGNTMKLToxMDM3RjAwMEEwRjIxNURBMjVGNTNCQzk1Nzk3Qzc4N0ZEMzVCOTRBQjkKLToxMDM4MDAwMEU5OUI5MEVCMjg3Q0Q1RkVBQThBREZBM0UzNTE3OTY5NzYKLToxMDM4MTAwMDYyNEIyNkI1ODRDOTI5NDIxRUM0RTc5QURFMjc5OTI0NDMKLToxMDM4MjAwMDZDQTJFMzM2QjgzMjM3QUYwNDk4RDBCMUE1MzRBODE3RUMKLToxMDM4MzAwMDZFODFCQUE4Rjg0OTY3MUNCODlBM0NCMjAxNEZCMUYwNDIKLToxMDM4NDAwMDI1Q0UxNDRBQ0NCREM5NTkxNUUxQTc4RTI1MDUxMjdDOTkKLToxMDM4NTAwMDVGQjBGQjk2RDJGNTRBMjREMDRGQTBDRjJGOEEwMTJGMUMKLToxMDM4NjAwMDRDN0VCMTQ5RkQ3RDIwMjdEQTdGRTk2OEZBNEZFODdGNzkKLToxMDM4NzAwMDRDMDhENTYzN0YwNUUxRDg1MDQ0RkNBMDM3RDQwQzM5RkYKLToxMDM4ODAwMEI0M0QwN0UxNjkwMTc5QTJCRDQ3MUYyODlENkNCRUVBREUKLToxMDM4OTAwMEE1ODE4NjNBOUJFRjY1RUJERkU0MUJFQkRBQjgzRjM3OTcKLToxMDM4QTAwMEMyOTNDMjE5RUFGN0YxNEE4Rjc1RkJFNDI4REQ5QUEwQUEKLToxMDM4QjAwMDFGQUIyQkEyNDAyRUExMUMzNEI2NkJERkI5Njg3MzBGNkYKLToxMDM4QzAwMDIzNDkxNDhGNTY1NjJFQjZCQkI3NDA3OUQxOTYxRDIyODgKLToxMDM4RDAwMDZFNDIwQUM1NDAzOUMwNEQyRDY3RjA1MThGM0E0MjBERjYKLToxMDM4RTAwMDM4NUVDREI1MTU0NTAwREZGOEY2MDIyMUY1OEMzRjNFNzgKLToxMDM4RjAwMDE5MkZFQUQ3OTEwODZGMEQ2MEI3RTVFQkU4MjBEMzg3NjEKLToxMDM5MDAwMDcyOUNBRTFBRjU1QjZDRkYzQjA1OTk4REVGQTRBOEEyRTMKLToxMDM5MTAwMEUzNUIwOEEzQjEyNDUzRTA0RTYxMDRBQ0I2ODI0ODM4OUYKLToxMDM5MjAwMDRGMUZBOTQwN0M4RDIzNjA5NzVBMzU3ODA2Njc2MkRENkEKLToxMDM5MzAwMEM5RURDQ0ZEQUU5MTQ3MDIxNENGQUJGREIyMEZDNkFBQzQKLToxMDM5NDAwMDE0MTQ4RTA3OUYxN0Y0ODBBNTU0MjQyQjY5NkRCNUYyQ0IKLToxMDM5NTAwMEJFMTVGOEEzMzk0N0NFMDBCOTZFOTE2QTg4ODdENjJENzcKLToxMDM5NjAwMDc5OTQwRkUyRTg5MTA1REQ3MkUyMTE3MjI1NzY3MTJDRUYKLToxMDM5NzAwMDlFMEFFOEVCNkMxRTA0RTFBOENEM0Y5OEQ1NjFDRDA1MDkKLToxMDM5ODAwMEJBMUM0REVENjIzQUQ1QjVEN0Y3QUU1Rjk2NzFGOEFFNzkKLToxMDM5OTAwMDAyQkI5ODk2NkI5NEM5NDkwNEY5OTY0QzA1RkE2RUNFMTEKLToxMDM5QTAwMDQ5MTc5MTRGMzk5Q0JBRTE5MkYzOTExNUY4NzQwNTdGNEMKLToxMDM5QjAwMDdGQjVFRjdEQjREMzU3Njg3QTNDMDY4RUNEQzM4RjIzOTUKLToxMDM5QzAwMDdDQTYwOTRDMUZBRjJBQjI0RjA5QzU4MUNCMzRDMThERUIKLToxMDM5RDAwMEVEQ0RDMDUzNjk2ODVGMzFGRThBQTExN0RBRTJBREE0NkMKLToxMDM5RTAwMEVENTZDNTUzQkM5MjhFM0ZBNjQ4OUEwQTc0RTEyQTI1MkIKLToxMDM5RjAwMDhBMDVGOUQ3RUZDQ0EwREZCN0YzREU5MjIyMUFFNDg3NkQKLToxMDNBMDAwMDJCOEREMUFERjUxMzIxQTREMEZFNEUyRkZCOUVDNTQ5QzEKLToxMDNBMTAwMDQyN0U3QzdGQTEwMTJGRjZEMkMwMDQzMjhDREE0OUZGQUUKLToxMDNBMjAwMDMwRTE3Qjc0OEVDQzhFMzgzQzFFRjlEMUVDNjFFQjI0RjYKLToxMDNBMzAwMDA1MEM0RjFFRkFCRjRCQjk3NDNDNDUzNkU4OERBNTY1QTEKLToxMDNBNDAwMEIyMkY0Q0JGQjNEOEVENDQ3QTMyRUJGMTRBQkZFQkY4NUEKLToxMDNBNTAwMEY2ODUwQTE4N0Y3OUU2MDNGNkE1NzRGQzhCNjU0RENCRDUKLToxMDNBNjAwMDgxMkQ0RDlGOENGRjEyRjhDRTE0REIzRjZCRjIxRjA2QTkKLToxMDNBNzAwMEM2RTEwM0FENzQ3NEJBNDkzODE1MDZCOEE3NTczQTcwNTEKLToxMDNBODAwMDdGQjJGOUVEODNCQTc5QkUyQUI4RDI1MEJFNUU0QkFFOTIKLToxMDNBOTAwMDQ1Qjk3MDk5RjcyRkQ2ODVERTNFMzgwOEUxMjE1RTA5RDkKLToxMDNBQTAwMDNEMkY4QkUxRUJBNjFDNEQ2RkE5REU0OTNBQkJFQzgyQTIKLToxMDNBQjAwMEMwRjQxQTUxQ0IxMENFMTJFN0U3QTZEMUE0MEJFQ0Q2NzYKLToxMDNBQzAwMDM1MzlCMjUyNEZCQjQ4QTU3MjE4NDgwN0ZFQkFFOEY3MUQKLToxMDNBRDAwMEMxMzYyMzIwQUY5NUE2MEVGNkZDQTcwNkI5QjlBMkVGMTIKLToxMDNBRTAwMDQ0NUZCODE3Qjg0OTc5MzFGQUU2MzJFQkFGMDVGOEU5MjcKLToxMDNBRjAwMEZBOUYwMEY4MzlBMkYwQjM5MDhBQTQzMEQwNEI3MDlDQTIKLToxMDNCMDAwMDYxMUZCQkJDRUMyMTI1NENGRkI5QkNERjJGRkNDNzg4NzMKLToxMDNCMTAwMDBFOEUzRkEyN0NBOEUzMEY0QjY2ODhFOEJGQUZDOUM1RjUKLToxMDNCMjAwMERCNDQ3RjE3Qzg2MTkzRUM0MzM5NDU3MjY1REM4RkM0NzEKLToxMDNCMzAwMENFQUY0MDY0RjIyNjBBNjdBQjQ0NzRGQzQxMjY4NDEwODEKLToxMDNCNDAwMEVFRjRBRkMyOUFDRUUxNDdGRjZDREUzN0ZGMDFGMEEzN0YKLToxMDNCNTAwMDNBM0FFQzE4ODZDRjFCQTU2MjNBOUYzNEEyM0FBRUE2MzkKLToxMDNCNjAwMEVGNEI0NDgyN0E5Njk4ODM3QzRCREJDN0M4MjlDMEJGNTEKLToxMDNCNzAwMDM3RkE0MDBFMzZGMTdEMUZGMTZDRjZFQUVERjIyQzkxMkEKLToxMDNCODAwMEUxMzVEQTFFRjJERTYxNjg2N0Y2NEU5MzY2RDc3QkI2RTIKLToxMDNCOTAwMDFBRThBMkZCRkQ2NDEyNzdGRkQxNDc2NDc2NzY5NkU4QjcKLToxMDNCQTAwMEUxRjRCMzE1Rjc2RjJCRDIyNjQ0MDAwREI2OEMxQjdEQzQKLToxMDNCQjAwMDk1QzBBRjFFODI3MEQwRjQ4NEE2MTdBOEJFQzgxMkZCQjEKLToxMDNCQzAwMDQ0Qzc5M0YzMkE4ODgwRUQ0NkZEOUI1MDVFQzdFODVEQUQKLToxMDNCRDAwMDVCODE1MTBFMTBCRDNEOTMwQkZGQ0RGNDIwQkQ5MDU4N0QKLToxMDNCRTAwMDdEQ0ZDQjhBOUJBRjg4QUY3QUU4NEIxMjdGQkYzODQ5MzUKLToxMDNCRjAwMDY0NzI5OEE4NjlCODdFOERBRjA4QjcyN0NDMUE1RDEwOUIKLToxMDNDMDAwMDQ2QUY2RUZFNUQxOUU2MzMxMEYwMUNDMkMxMUQ3NDVCMzkKLToxMDNDMTAwMDA1NzUxN0E5QzFGQTg1RDJFMjMwQzBDOTIyNzUzNjEzREQKLToxMDNDMjAwMEFFMUZENTlDMzhGQjI4RUU4NzQ5QjQ4RUI1QTNFM0VCRDUKLToxMDNDMzAwMDg3MzJEMThERjgzNDM5NkI0ODAwRTlGODFFQjQwMzA1OUEKLToxMDNDNDAwMDM1NDAyRUExM0QxOEU0N0FENUU3MDUzQzJFQUZBQjI1RDMKLToxMDNDNTAwMDlGRDFDNUQ4MEY4Q0M3RkRCOTk0RTlGN0MzRkVERTA0MjgKLToxMDNDNjAwMDQ0OTA0MUZGRUYyQzYxQTVFNDUzRjRGNEQ5OEQ0N0IyQTEKLToxMDNDNzAwMDE0QzczMzUzQjBDMDNBQ0Q0RUVCMzREMDAzNjZBNzY3QjgKLToxMDNDODAwMDEyOTYwNTQzNjcwQTUwMjZERDU4MkIyMjVCQzVBNzI3RUQKLToxMDNDOTAwMDZEM0M0QTU3QjM0NDE4MkYyRDgwRkMyQzc5MkFCMDI0NTAKLToxMDNDQTAwMENFMzRCNDVGNjk3RkE1MjJFRTNDMzgxREYwN0UwOUU5NzEKLToxMDNDQjAwMEFFOUI2RTM0MzgyODMyOEMxNzRCNEYzNjFGREQzMDg4NjAKLToxMDNDQzAwMDU4RUQ4MEY5QTZGM0Y5QTZERkQzQjQxMDQwRUMyNEFBOEUKLToxMDNDRDAwMDc1MzA4NTUxN0FFNzM0RDQ3QjRFQUU3RjFBMEI4QTlCQzAKLToxMDNDRTAwMENCNjkzRjc3MjE0OUJFOTE5NkI2QkMyRTlDM0ZFRTZCQzcKLToxMDNDRjAwMEZCQzE3ODc3MkYyRDQzRkYwN0MxN0E2MzdENDUxOURCMjAKLToxMDNEMDAwMDFGRjg2M0VDNTY1MTkxMzQzQUNCRURENURFMTEyRTU5QTQKLToxMDNEMTAwMDdBQkU5RjY4RkRCMUZBOTQ5MDA3QUVDQ0JFOUFDMkY4MDUKLToxMDNEMjAwMDUxQTVGRjAzN0VGNDEwMUQ3RkQyNzFEQ0Q3MUJGNTgxRjYKLToxMDNEMzAwMDMzRTYzQkJGMDI1ODIyQkMxN0ZFQUY3QzJGODlENDVCMTEKLToxMDNENDAwMDE1NEEwQTY2NDVGNDg0Mjg5RTI4NkE5MjYxMUY2NUYzMjUKLToxMDNENTAwMEQzRkQxREI0QTc3NUZBNDVFNUYyNzg2OTg0N0Q2QzIxMjEKLToxMDNENjAwMEEzMTczREZEQkZDRUU1NkJERjdCMTcxRDVCNDZDN0JEQ0YKLToxMDNENzAwMEUwNzNGQUEwNTczQTE1QTdBOUM1M0REN0IzMzI0NkVFNkUKLToxMDNEODAwMEFDMkM1ODhGNzREMTQwRTkyODE3RjYwNzA1MjJFQUE1MTQKLToxMDNEOTAwMDY2NjU4QjQ3RUY1N0Y5NUM5MzQzM0RFODgzMjhEMjQ4MkIKLToxMDNEQTAwMEJFOUZBNEYwMzEyOUEyREZFNkZFRkVGNDExNkIzRjVENTkKLToxMDNEQjAwMDI5N0REOEE3MThGMUYxNURGMTc1RkUzQkQyQzdGN0ZENUIKLToxMDNEQzAwMDlFODZENzQ0RjI4Q0UyMTVFREYxQ0JGOTlGN0FFMkI1RUQKLToxMDNERDAwMDFFRTVBRTREODlFRkFGQkNEODhENEZCNTY3NjlGMEE3MzIKLToxMDNERTAwMDFBRkQwMkQ2QkI5QkRBRTJEOTJENUE2OUJEMjc3NkZGQjAKLToxMDNERjAwMENGQzZCNUQ1OUE5NDEzNjBERjRBMUVDMzNFNjg4NUIyMUMKLToxMDNFMDAwMDVFMDU3QkZFMDJEOEU1NjAxRjA2Q0JEMDNGNENGMjk4RTIKLToxMDNFMTAwMEJGMTYwNjEwODE1RjE0N0Y4OEVENkY0MjQ0QUYwN0U1M0YKLToxMDNFMjAwMDRDQTNERkNEOTQ2NjM3RUFFRjI5QUFBMDlGQkZBRDU2MTkKLToxMDNFMzAwMEM2Nzk1OEUxN0I2OUU4Q0YwREMxNzc0RDFFMTJCNkI5M0UKLToxMDNFNDAwMEEzRjQwQTlGNjJGRTgwODdBRjg4MEUzNDdBMDUzMzk4MDgKLToxMDNFNTAwMEQxQUJGMUJERTU5OUM1MjQxRUZFN0E3Q0VGNzZFMzdDRkIKLToxMDNFNjAwMDEzQ0FBNUQ4Rjc5QzkyNzI1MjY3QTcyNDdFNEYyMjI3QzcKLToxMDNFNzAwMDc1RjY0RUI5MTZGN0UxNzhBMjc2REVDQjQyMTI5NTA3QjkKLToxMDNFODAwMERFOUY5MDAwODU2RjEzMzQ2NTgwN0MyMkE4Q0Y5QUJDOUEKLToxMDNFOTAwMEM1MjgxN0M4NEUyMTY2REZBRTMwRkE1MTUyQjBCRjY4NTAKLToxMDNFQTAwMDY1N0E1M0FCMjc5RTBGRkI2RTM0OEVBNEUwQkUzNjUxNkQKLToxMDNFQjAwMEZGODZCQUQyQzcyNEFBOEMxQ0I1QUZCNzRBMTQ4RjhEMUYKLToxMDNFQzAwMDRCRkQ1MzJBNzA3RjdCQTg1NTFBMTRFRDM3Q0ZBNEVEMTQKLToxMDNFRDAwMERCQTlGQTFDMTlBNTY3ODlEMDdFMDgzNzkxNUNCQTA2NjAKLToxMDNFRTAwMDFFN0E4ODMyMTJBMEM5RTk5Qjc0NjAzQjdEQ0FGMTQ4RjIKLToxMDNFRjAwMDg0RUVGRDBDMURCMjBERDY4OUZFODkyM0Q4MEYwNkJBQkIKLToxMDNGMDAwMDg0RkVBNjRFNTZBNzJGNDI3RDk1RDlFRkM3Nzk0OTQxMjkKLToxMDNGMTAwMEVCMDMxNDVFQUI2Q0JDQUVGMDdBMzJBRjdCNzgzRDg3QkUKLToxMDNGMjAwMEQ3Qzk3QUFDM0I2NDVBMDdGRTM1MDczRDU4QjdGMzdBRDgKLToxMDNGMzAwMDBFQUZBN0YwN0EzMkFGRTdGMkJBQjAxRUVCQUI2NDM2NDEKLToxMDNGNDAwMERFNEEyOUM0QzZCN0YzQkFDMkVCMjlCQ0VFRTFGNTVDODAKLToxMDNGNTAwMDVFMjc1QkQ4RjcyREFDNkUzNzg3RDhGODBFNUVDRkUxQzEKLToxMDNGNjAwMEY1NTQ1RTRGRTZGNTgxQkMyRTZDQzE3QTQyNzk5OTQ3RDMKLToxMDNGNzAwMEUxNkY5MDBGMUREMTNBMkExMTBFRDdFRTdBNjc0QzNCQjQKLToxMDNGODAwMEEzOTc1NDgxNzAzQjJDOTQwMTc2RDNGRUQ5QkZDODAwMEYKLToxMDNGOTAwMDdGRTg4NjYzRDc3QTYxM0ZENjcwQUI0NjRGM0U5NDlGRTkKLToxMDNGQTAwMDI0RjMxNjk0NjMxOTdDQUM4NjE5NUJEMDBGRDEzMDRCODcKLToxMDNGQjAwMEM2RkQyN0UxRkU5OTY4N0JGMTIxODVCNjVGMDg4ODNFNDIKLToxMDNGQzAwMEEwOUIyNzkyRTNGQkM5N0U1MUM3RTI5NUFEREM0RTVFMTQKLToxMDNGRDAwMEM3RTM5NTZCMjE1RTA5RkUxNjFFQUY1QzA1RjE0QTBCMjcKLToxMDNGRTAwMEQwQTkwRkVCQ0IyMTVFOTkwRkZCNkIxNkFGNkM4MDc4REQKLToxMDNGRjAwMDI1QUQzRjA3RjE0QTVBM0UwQkYxNEE1QTNFQzNFMzk1QkQKLToxMDQwMDAwMERCNzlCQzcyMkJDNDJCNjlCOTE5RTI5NUI0N0M5QUM3RDEKLToxMDQwMTAwMDJCOUZFMkYxQ0EyNzc5QkNCMjZENDZGMTVCNzkzMEZGODQKLToxMDQwMjAwMEI5NkNGRTg5RjBEMTc3OEE1MTdFRjZBOTMwQzYyRDUyM0YKLToxMDQwMzAwMEM2QTQxOERBM0RENzFCRTMxNkVFOTI1QzQzREQ1OTY4M0YKLToxMDQwNDAwMDhDNUJEOEYzOEEwREUzNTkzM0FGMzNCNENCNjlFNTg2ODMKLToxMDQwNTAwMEJBRTQzNEM2MkQwQTc3NEQzNkQ0ODc2RUJCQ0I1MDJGQzkKLToxMDQwNjAwMEQ4NTg2OTE4N0Y3MEVCRkQ4NkY2QkM5NjA3MENFREI5NDEKLToxMDQwNzAwMDhEM0YzN0Q0OTUyNUY1ODZGRTRGOUE3MjkxQkVCMjE3QzMKLToxMDQwODAwMEFEMzRGNENCOUNCQkRFRDA2RjlFREQ3RkRBMDRGMjZFRTQKLToxMDQwOTAwMDQyREExNUM5MzdGMkI1OUFBRTk3OTdCMUZBQzE5NDREODUKLToxMDQwQTAwMEZDN0VENDczNEMxRkExOEYxNkZDNkE1OUNDN0Y2NUZEMzIKLToxMDQwQjAwMEU0QTY0M0IwN0ZCMUU0MzEzRDE1RUJBRjhBMUQ0Rjc2RTYKLToxMDQwQzAwMEVFMzhBMkQyRUY5NEI5MEY3OTNCNzVGQzQ4QkNCQUY3MzEKLToxMDQwRDAwMEU4NTI5MzI0MjYyNzU3M0VDMkY2RTcyRDhGQzRERkE3NjgKLToxMDQwRTAwMEEzMjZBMEVCNjhGOTM2M0UxRkI4MjQ5MzQxOEY2OEZCRTYKLToxMDQwRjAwMDlBOTY0NzA0RUNGRjdEQzdEN0RBNjNDNzhEN0U4RkQyQ0YKLToxMDQxMDAwMERFNDhGRDdFMzhDNEU3NDM3NTg0Q0U1RTMwNzcyNjRGQTcKLToxMDQxMTAwMDI3QThFN0Q5N0VEOUM0RkQzQjY1MTM0QjhGMzU1MjdFNjYKLToxMDQxMjAwMDU5RTYyMTNFMEJBRDJGNzM5NkZCOTk1RDQyQUQ3M0MwRUUKLToxMDQxMzAwMEM1OTI1QjcxNUZBRkY1RDdFNkQ1RTg5Q0NDRTQwQkQxQjcKLToxMDQxNDAwMEY5MkQ1MTRFRDkwRDdFODU2NTY5QkREQjZGNzJDNDg0MzIKLToxMDQxNTAwMEZFM0Y1MzQ0MjA2MUFBOTc2NEE5NjI1QzBFOUQ4RjdDNDgKLToxMDQxNjAwMEQ4RTQ1QjRBNTAzRkM1RjUwRjEwQjI5RUM1OURCRDQ2RDEKLToxMDQxNzAwMEJGNjlFMzhDMThGOUM3RjMzMkNDN0NGRTBENjlFNUY4MTIKLToxMDQxODAwMEJDRDFEM0ZCQkMyQzMwMkY5ODBGOUY5NzM5RTJDMEQyMDMKLToxMDQxOTAwMDE0QjFFMTdDNDc0NTUyQjE1RTFBNDlDNkYyREE0ODdGNTQKLToxMDQxQTAwMDJDNDc0NjMyQjAxQzExMTk4ODY1NDkyNDA3Q0I2QjIyNzUKLToxMDQxQjAwMDU3RTE3QkM1OTEyMTU4MEU4RjVDODNDRjdEOTFFMTU4RUIKLToxMDQxQzAwMDVFMURGOTAxM0UxRjE2MTk4NTY1NTFFNDA2N0M1RTE4RDcKLToxMDQxRDAwMDI5QzNGMkFBQzgyREY4N0M2ODY0M0M5NjQzMjJCN0UxNTMKLToxMDQxRTAwMEYzODJDODI0MkNGMzIzNzc2MzM5MzgzMjE1Q0I0MTkxRkQKLToxMDQxRjAwMEU5NThFNjQ1QTY2MTM5MzAzMjA3REZDQjhEQ0NDNjMyQUYKLToxMDQyMDAwMDI3RjIyMDNFNTcyMjBCQjExQzEwNzkxOENCRUNDOENGRjcKLToxMDQyMTAwMEIwQ0M4QTM0NjA5OTE5NTk4QTY1RkZDODJBN0NBRjVGOEYKLToxMDQyMjAwMDY0MDU5NjE5OTE0N0YxQjkzN0IyMEVDQkY0QzgwNjJDNDQKLToxMDQyMzAwMDkzMjM1QkIxREQxM0Q5OEM2NTUyRTQzOTdDRUU4RTNDNUYKLToxMDQyNDAwMDhCQTUyQkYyMDIzRTc3NDZGNjYwRTk4OEZDMDY5RkRCRTEKLToxMDQyNTAwMDIzQUY2MDY5OEJCQzhFQ0ZBRDkxRkQ1ODVFMEU0Rjk3M0EKLToxMDQyNjAwMEIzODM0QjRGMThFM0NGMjMzRjMxQ0FGMTkyQzNDNkY4NTMKLToxMDQyNzAwMDczRjEzQjQ2MzlFRTNCNjg4QzNGMEY3QkQ1MTg3RjJFQTAKLToxMDQyODAwMERDNkI4QzNGMEZERDY1OTRFMzA1REI4QzcyN0NGMEM2NDQKLToxMDQyOTAwMEJCMENGREYzNUEyQjBERURCOTJERjcxQkU1NzRBMzUxQTMKLToxMDQyQTAwMDhFNjcyRkY5QjlBMTdGRTZBMjdBNDM3QkJGQjkyQjBEQTgKLToxMDQyQjAwMEVEREUxOTQ2Rjk5RDRFOUUzMEVDRDMzQzYzQjYxOEY1MDEKLToxMDQyQzAwMERBRjVCRjM0RUVEQjRBOUU4RkQ5RDc4NDUwQkVEODBCQzcKLToxMDQyRDAwMEZGRDVGMDlFMzVFRjQwOEM1QzU2OTk3QzhBRjFCNzAzOTAKLToxMDQyRTAwMDQ4MjBCRUI5OThEODdEQjBBRjg5QzU2NzBBOTcwN0E5OUQKLToxMDQyRjAwMEMwNzdCNDRDRTM3Q0Q3MDdGODhFOTYyOUI3Q0NGNTAyOEIKLToxMDQzMDAwMDNEQTQ0RTJDOUQwNjc2Q0NDNTYzODIwMkJFMzI2MTYyMEUKLToxMDQzMTAwMDZEM0VDNDdCNTJGQTEzOENGQjEyNzVDODBEN0U1QTZGMkEKLToxMDQzMjAwMENBRTA3NUZBNDQ4MDdBMTY2MUZFMDZCMkI0MUNGQzZDRDEKLToxMDQzMzAwMDREMzlBQ0ZFNTZFMzkyNzJDODhCNjkzMkYzNzZCNUIxNTMKLToxMDQzNDAwMDFDREZCN0IxRkE5MUM2MTlGNUQwOUU5MkU0RUJFN0EzNTIKLToxMDQzNTAwMEVGNkQzNUM3OTdENzlGNEEyQ0JFRDc1RkYyRkY0MUEyQkEKLToxMDQzNjAwMEVCRkY2QjU5RTc0M0UwOTdGQjc3NkJFMDAzODkzRTlGRDgKLToxMDQzNzAwMDZCMEQwQzgwRDBEQTU5NzNFMDE5NTAxREI5ODJGRjMwRjMKLToxMDQzODAwMEY0MkIxMkZDMUY0QTI4Qjc4RDdFRDYwOUEwMzhFOUYzMUEKLToxMDQzOTAwMDFDQzlGRjQ3NjhEN0Q2REZFNEVBN0QxRUVGNzJCREQ0QTMKLToxMDQzQTAwMDk0NEM3MDlGQTkzRTI2RjNCQzEyODJGQTUyRjM2QjNERTcKLToxMDQzQjAwMEVFNzBBM0JDNUZGRTk4QkMwNUUyNTJFNkNDRjRFOUUwRTcKLToxMDQzQzAwMDRGODMzRjgzRkU2ODZENUEwODdFNzYyQkU4QTE4MTIwREIKLToxMDQzRDAwMEU1REJCMTc0OTIwRTJDRERBNDBCNEIwRjY0MTIwQzhDMzgKLToxMDQzRTAwMEFFQkI3QkJENTk2Q0JEMTQwRTVGNEJCODhGQThDMUZFMzAKLToxMDQzRjAwMEY1OEU4OUE1QjAxRTBBODcwQjFDMEU3Rjk3RkEyNDg2QkUKLToxMDQ0MDAwMDAzRkRBQkYwOEU2NDJFNTFCNDI3NzYwOTA2N0Y2NjkyQzkKLToxMDQ0MTAwMDI5NDBDQzNDOEUwQUNFOTk4QzE5M0VEQzhGRkQ0OUYyQTYKLToxMDQ0MjAwMDIwM0Q2QUYwQTM3RjhCNTI0NjQ2RjMwMUU4N0I1NjczMkEKLToxMDQ0MzAwMDlGOUVFMzY5RTMyMEMwRTBGQjVDMUY2QUY0NUM5QjQwNDUKLToxMDQ0NDAwMDNGNjk3RTZFQTJERUZBOURFMjREQkY5N0M1QjhERjMxQUYKLToxMDQ0NTAwMDQ5M0U4Q0Q3QzZCRTI3Mzk4REYyQ0ZFQzBDNjAxRTg0NDYKLToxMDQ0NjAwMDJDQzU4RkVCQ0ExNjFFQUZEQTM4RjE4QUUyREIzQkI4RjcKLToxMDQ0NzAwMDlENEYxQTZGQkRBMkZFNUJCNDc1NTM0QTgwRkU1OTFBNTgKLToxMDQ0ODAwMEQ3NkZCQzE1RTk2RTEwN0YzRjBCRUMzQTRBNEZBRkZGNzgKLToxMDQ0OTAwMEI5QkFCRTA1RTgwRjYyRDJGMUZDMDdBRDIyREE4MzU5NDIKLToxMDQ0QTAwMDBCQTlFMEM5ODlDMjNCQjM5MERBODNDM0EyREZDRDVDMUMKLToxMDQ0QjAwMDY0RjRCRjg0NjUxNjVGMjFBRDU3MDY3RjJEQUYzMzhCNDMKLToxMDQ0QzAwMDEyRkNCRkE2RjQ5QzA3RDkzNjkxQUQ4N0M3NTFBNTBENDQKLToxMDQ0RDAwMDE1Q0QzNjJBN0YwNjM5NTkzREIzQjVGN0Y5MTAxRUI3MDkKLToxMDQ0RTAwMEM4RTQ3NDk1RTlFNDdFOTc5REM2NzE3QjdDRDdGNENFRDEKLToxMDQ0RjAwMEYwNzg3OTVFMDlCRkYzMURFMzgwMzNDREYxRTNBODE0QjIKLToxMDQ1MDAwMDVGODhFRjgxREEzQzZBRTkxRjlERDc2MDNFN0Y2RDNDOTIKLToxMDQ1MTAwMDJEMUVBOEQ1MjkzRUFENjA3NzM3QjU1NEEyOURENUU0QjAKLToxMDQ1MjAwMDY1RkE5QjdDNDM0NzFGODkyQzRGRTJFRENCNDIxQ0ZFNzIKLToxMDQ1MzAwMDlCRjg3RTMyQTQ5NjYzRkUyM0Q5NjVBNDUzNjVBOTY0RDMKLToxMDQ1NDAwMDBGQTBGRDI2QTY0MEI5Qjk5MUY1Q0I1OTk2NjYwNzM4NUMKLToxMDQ1NTAwMDM1N0E1MjUyQTBEQzU0MkJENkRCMjhERDM0QUFDNDBGQTYKLToxMDQ1NjAwMENCQ0FGRUQ5MDkxQjZCM0Y5RTBDNjU0RTVCRDc1QkY5MkUKLToxMDQ1NzAwMDE0N0YzOTFFRDEyN0QxRjk2NEE4RTdERkJBMDlDQTE2MUEKLToxMDQ1ODAwMEJGMzUwN0ZDNzA0QjI0Q0MyM0NDNkUyM0Y2MDJEQTJGMDgKLToxMDQ1OTAwMDdCMkVDMTdFMDQ0NDIwOURDRjkzMUExRUQ1NTY2MTFDRUMKLToxMDQ1QTAwMEZENjc2NjRCRDc1MjFCQkU0N0ZDODM3NEZEMzY3MEYwMjcKLToxMDQ1QjAwMEU1MzUzRTUwMDY2QzlBRDdFMjk5M0MwRUUyRjM4NUM0OEQKLToxMDQ1QzAwMDM3ODg0NEZCM0RDRUM3NzM0MDNCOEMzMzg2RTUzMTZBNjgKLToxMDQ1RDAwMEVERUI3OEJCQTVGNkJDOUEwRjY1NEJFN0JBOUJBMDVGRTUKLToxMDQ1RTAwMEFCNzE5Q0I1QkNERjIwQURCREM0RDhCRTVBMjNBQjI1OTIKLToxMDQ1RjAwMENGODc2MTFDNTM0QkQ3N0IzN0MxN0NEQTU4QkY2RUI5NkMKLToxMDQ2MDAwMEM1RkJBRkUyRkQ2M0U1QzU2MDc4OEZGQjJCRjVGMzVDN0UKLToxMDQ2MTAwMDExODM1RjREN0U4NEMwM0Y5MDBGRjg2NUZFMDE4Qjc1NUUKLToxMDQ2MjAwMEVCNTNFMDhGRDRGQTJEMTdEOEZFNDg4OUM5MzM3REM1RTYKLToxMDQ2MzAwMENDRTQ2MTk3Q0NGQ0I2MUEzRDI1QTI2RjMyNTdCNzFGNjgKLToxMDQ2NDAwMDgwQjhFNTBDQkJCMTdFNEY4QTYxMUY0OEM2RjQzM0I2MTMKLToxMDQ2NTAwMDVGOUY2QjZDMkYxOTZBQUMxNzE2MUJFQjc5RDcxOUVBQTEKLToxMDQ2NjAwMDE3QkJGRDJGNDExQkU2ODU3M0ZGQ0I2MEZFOEQwRDZERTMKLToxMDQ2NzAwMDk1OTg4NzEyRjVGQkY5RURGQTdENEEyNkVGQjdBREE2QkUKLToxMDQ2ODAwMDE4RjlBN0MxQzlGOTg3RkI2OTFDQkNCREE5QjBEMkFFOTYKLToxMDQ2OTAwMDhGQkY2QkZDRDMwQzdFMTAwQkY4NTk1OERFRjY4RUI2MkMKLToxMDQ2QTAwMERFRTFCNTg5RTM3QjIzQ0ZBRjc5ODJFM0E5OERFM0U5MkUKLToxMDQ2QjAwMDE3REM4RjEzRTQ3RTlDMzUzQ0VGQkM4NUU3OURBRkU0QUYKLToxMDQ2QzAwMDdFOUM0NjlFNzdGRTAyRjdFM0VDRTE3RTlDNkREQzhGREMKLToxMDQ2RDAwMEYzNkJFRUM3RDlDREYzQ0U5RkUzN0U5QzE1QzNCQkE2OEIKLToxMDQ2RTAwMDgyRkZFQzU5RUVDRjc5ODZGQjczQzY3MEY5QkQ2MkFDRTAKLToxMDQ2RjAwMEFGMUZGOEY3QjY4RThEQkY3RjFFQzNFOUUyQzdFMEM4RDMKLToxMDQ3MDAwMEVDMDM3QURCNTM2RjA2QkFGNEIxM0NFQjlDNUE4RjY4MkEKLToxMDQ3MTAwMDI5MDEzQjk3RDE2NUNFMkM4RjI4OTc4MDlEQ0JFQTkzQkEKLToxMDQ3MjAwMEI4QkUwNUJEODI3OTMzOTkzQzZGMjY5MzZBOUQ3NEVFQkQKLToxMDQ3MzAwMEZGODVBRUFBNEFDMDFGREY3NzhBNjczOEI4NDJERDMyRUMKLToxMDQ3NDAwMEQ3QTMwQUYxRUFFMzA2N0RENTgwMDA3MTJEQzlFNDRGQjUKLToxMDQ3NTAwMDkyNDdDMEY4NkM1RUY5QzFBRTAzOTBBN0U4RUJFODI4NzkKLToxMDQ3NjAwMDA3NzQwRTNCRDQ1RTBGRkQwQTBCODMxMDkxMjBFNkI0NTQKLToxMDQ3NzAwMDkwMDg3MjY5NDU5OTBGRkQ2RjRGN0Y2OEYyNkQ4MTMxMjYKLToxMDQ3ODAwMEQzODg4MTJFRTgxQzUxOUZFNUYxRkQyQ0I5REU0ODE3MzYKLToxMDQ3OTAwMDk2QzgyNkI0OUI5QjZBNTg3RTA2RUQxMzc3RkZBRTk1QUMKLToxMDQ3QTAwMEM5N0VBM0ZEOTA1NDZBRjQ4MzM1MDUyN0Y3RUE5N0Y2OEUKLToxMDQ3QjAwMEJENkE3QzdGRDg1RUUzRkVBQkE5RDA5ODI3MTI1QjE2NUEKLToxMDQ3QzAwMEVFMTI2M0ZDNUMzMUVGM0I3QkZGN0U3RTY0MjJBRTM3RjIKLToxMDQ3RDAwMDExOURERjY2QUEyQzk3NzU3OTEyQ0VDODBGNzExRjExMzMKLToxMDQ3RTAwMDZCMEY0QTYwRTcwREM0QkMxQTNGRDhCRjUyOUVDNzBGN0IKLToxMDQ3RjAwMEZFMTIyOTRGRTFBNThGM0ZGN0YzN0EwNUQ2QTlEREY4MjAKLToxMDQ4MDAwMDYzMTg5RkUyQzU2MDM3OUE0ODAwNjMyMjJCODYxMEJFNkEKLToxMDQ4MTAwMDFGRjk2N0JEOUYyQUZGMTU3NzEwREM0Rjc4OUFFQzM3OTgKLToxMDQ4MjAwMEE4NDA4M0ZFOTk4ODFGOTlFMzI3NTVBRTc5MDZGQzFGOUYKLToxMDQ4MzAwMDRGQUYxNjA5RTA3RjZCNEJFRkZDREIyMzlGQzJFOUM3NEMKLToxMDQ4NDAwMDM4NTJENjIyNEYzMUU4QkQ0NEVGQjUyRTEyQzdDNThCODIKLToxMDQ4NTAwMDhGQ0RFNzc0QkQ2Q0QxNjQwRkVBOEQ4Mzk3Q0QxNzk4MjcKLToxMDQ4NjAwMDBGRUJEN0YyMDVGQURDQ0VGMzA1Q0U4QzM3Rjg5NTUzNzMKLToxMDQ4NzAwMEFCN0FDN0UzMDYyRUJGQjQ3QTA2ODk2RkJGRUVFMUZDQzAKLToxMDQ4ODAwMDRFOUMyQ0RGNDRBM0ZCRDQ2MUJEOEZERjdENkUyNzI0QkIKLToxMDQ4OTAwMDkyMEVFMDBCMjk4MEYyQjNDRkVEMDFDQzhCMjcxNDVGOTEKLToxMDQ4QTAwMDdBM0U2OUZBNzZGQURCQzA4N0VBM0E5NkE3NDhGQjg5MkUKLToxMDQ4QjAwMDdBM0I0QzlCNDc4NjI3NUMyNjQwRkZGREEzMzA3RjYzRjUKLToxMDQ4QzAwMEIwMzMyMDQyRENCQTY5M0ZFMURGNjk0NzdCREMzMUEzQ0EKLToxMDQ4RDAwMEM2Q0ZGQzY1RUQwNEZDRjY4RTFBOUYwQURGMDc3QzYxRUIKLToxMDQ4RTAwMDFFNTI0Njc3N0ZENDBGQUI4MjIyQTY3RTM0OTQzMEJCMTMKLToxMDQ4RjAwMDU3OTNGRjFBOUQzNDc4OEIwRjQxN0NGRDQyODk4NDcxNTgKLToxMDQ5MDAwMDZGNkE1RjVEQkFBNEVENjdFODdGMDZCNzMxM0E2OEVBN0YKLToxMDQ5MTAwMDQzRjBEQzhENTRBMDg2ODExRTg5N0YxQ0MyMERDODFGMDgKLToxMDQ5MjAwMEZFOUE1QzNGRjFFM0I5OTQyMkE2RkY0RDcwREUwM0ZBRDQKLToxMDQ5MzAwMDQ5MUQ3RUNDODMwRTc4N0M5MEJGOThENTM2MENGOTRDRkYKLToxMDQ5NDAwMEYyRDQwODgwREY4N0M0QzA2RTNENUY5OTlDMkNGRkFCMUEKLToxMDQ5NTAwMDI5QzFCOTgyMTYyRTY3RkIyNUMwRUI4N0JDM0Q1NUVFRjkKLToxMDQ5NjAwMDE4MEY3MkY4RTlDNzI4RkRDN0M5Q0JGOTAzRDcwQjRGNTkKLToxMDQ5NzAwMEI1NEVGRTQzODExMkU1NUZBREZENEY2MEE0RTlFNjk1QkIKLToxMDQ5ODAwMDE1OTE1OTdFNjFEQjc3REIwNzhDMzUxMzlFN0Y2NDdDNDQKLToxMDQ5OTAwMENGMkM1NTE4RjY2MTU5NjZFM0Y3RTQzNEEzM0ZGMkNBMDkKLToxMDQ5QTAwMEU3MjlBMTVDMjI4NTM3MUJGMDlDREFBRjc3RjlBOUYxRTIKLToxMDQ5QjAwMEZGQzVBQzE4QkIyM0FGMDBFOTM5NkE3Nzk0MjMzRDZDN0YKLToxMDQ5QzAwMEY0MTI0NjJGOUM5RTM0M0RFMkVBRjRBQkUyQzA5RUY0MjIKLToxMDQ5RDAwMEIxMzE3OEMwMDY3NkIyNDY2NzE2NjdDODBGN0UwMzg3ODYKLToxMDQ5RTAwMDM3OENFOTgyM0E3QUY4MkJEMDQzNTZEQjQ4ODRCN0FCNTAKLToxMDQ5RjAwMDQ0QzVFN0ZCQjhGRUNCQURFRDJBRjNDNzU5ODc2NkRGQTgKLToxMDRBMDAwMEMxQkVDQjVCMEM1Rjg4RDlGRjkwOEEyMEQ4RDU1OTU5OUQKLToxMDRBMTAwMDEwQzMwM0I1Q0NGQzBCOTk5OTk3REI2RjVENTlGQzVBMTkKLToxMDRBMjAwMDhCMjc2N0QzM0ZEOEZGQkNBMkUxRkQ4QjE4QkY5NTg3Q0EKLToxMDRBMzAwMEFBNzg1RDNDQjVFRjE3RDMwNTMxQTcyNzFFNjJERjZCNUYKLToxMDRBNDAwMEY0OTQ3QkUyQzk2RkM5MTQ0OEI3RThGMDFGQkI4RjhGOUQKLToxMDRBNTAwMERENkYxM0JFN0Y5NEJCQUI4QjUwMEU1QjI2OENDM0Y4MEYKLToxMDRBNjAwMDQ4RjdCRTdCRTM0NDVDQjc4NUUzNEY2RUQxRTJGQkIxMTAKLToxMDRBNzAwMEZCQ0FCOUJFREVGREFBREY2RjVGRTlCMzE4RjM0QkFGMjcKLToxMDRBODAwMDM4M0ZGNzNCRkEyNUI2NzJCQjM1NzY3RjExM0I4RUQ4OUYKLToxMDRBOTAwMDE2MTBFMzlEREJDODZGMzNDMjNEQUZDNTY4RkYwQ0UzNjIKLToxMDRBQTAwMEZDOURBMzFBRkRDODAzNkFGQkM1Rjc3N0YyN0NCNUNBNjMKLToxMDRBQjAwMDUyMEQ0RkNBOURGRjQxRTk3N0Y2MjEzM0U2RTE2QkZCQ0EKLToxMDRBQzAwMDYwQ0RFRjM0OUJFN0FENTVGMjNDQjYxOUE0QzIwRDhEMTUKLToxMDRBRDAwMDY3ODk4OEU3NzdDRTkyRjdEREQ3RThGOEE2Q0FDMkNFMTUKLToxMDRBRTAwMEQxOTE2NkYzNzEzODdGQTFFNTY3Q0QwQ0IyQkEzNjlGREMKLToxMDRBRjAwMEVBMzY2M0JEOEE0QzRFMDdCRjZCNTVBQjk5NDAzRUQ2MzQKLToxMDRCMDAwMDZDMjIxREVGRDRFNjRGRTlGODI3MTY5Njg3NUE0RDZBQjYKLToxMDRCMTAwMDlBNDBCRTJERTM3OUFGOTUxRTIyQTVBNjEwMzJFRkE1Q0YKLToxMDRCMjAwMEE3NDZDMjc5OUU3OTE2MjY3RjRGNTNGODJCM0E3RDdEOTIKLToxMDRCMzAwMEJGMzMyNDAzN0Y3RkI2Rjc5QTlGRkM4MEMwRkJBMUE2RkEKLToxMDRCNDAwMDdFQTAzRjkzRTM5RjgzOThERTZDOUNERkU1RTYxRjNCRUUKLToxMDRCNTAwMDVGRUQ5QzQ2QTI3OTQ4M0I4NUI4RjkzRjBGNkJGRUFGRUQKLToxMDRCNjAwMDJCM0M0N0IyMTU4MjYyMjMxMjlGMjNCOURDRkIzQjJERkQKLToxMDRCNzAwMDhDN0VGRUJCRUZFRkZFOUVFRjNGN0Y5OUY5Q0ZCMzc2QzEKLToxMDRCODAwMEREODg3OURFNjkzNTE1MjA1N0I1N0M5NkY5MjRFMDA3NzQKLToxMDRCOTAwMDU3QkFFOUQ1NDk2QTdGNDVEN0NGN0I4NUZEMzI2OTNGNTIKLToxMDRCQTAwMEQzMTVGNENCRUI3REJDNzM5Q0NGN0ZCRjZCQUIwQ0ZDMDAKLToxMDRCQjAwMDdCRjY5N0M3MjY4MjNGNzBDRTZGNENDNDRBRTlFMERDOTMKLToxMDRCQzAwMDJFMTczRjJGMTY5MjQxRUZEREJGRDdFNDBGNjEzRDNDMUEKLToxMDRCRDAwMEYyMzY1REJFMjA2NjE2RDJGMUU3RkNEQTg1RkVDNEZCMzQKLToxMDRCRTAwMDlGQjc4NDI2RDBGN0VGN0ZGMUIzNjE4NEMyRTE1QzdEOEIKLToxMDRCRjAwMEQ3OUJGREMxMEVGQUE1QzBGMkFGRDRDRTYxQjdEMUU3MDUKLToxMDRDMDAwMEY3NEJFNEJFOEEzODdBQUI4M0YzQzE5OTU3MUM1MzgwQzMKLToxMDRDMTAwMENFODQ5REZCRUZDNTcxREJFRjM0NUI3NDcxOERERjVCODAKLToxMDRDMjAwMENDMDg3RkRBOEY5REM3N0E1NjA4MEQxMkQ4RkNGNEY5QUMKLToxMDRDMzAwMEUyNUFERURCOTk2NzA1MzZCRjk3Q0QyMTFCQ0M2RkU3QzMKLToxMDRDNDAwMDY2Mzk0MEZCMkREOEY5MzdBNEVCMUI3RUJEREIwRDcwMTgKLToxMDRDNTAwMDU4RjBCMkM5MjA3RjE2RUMzNDg1MkRDM0IwM0M2NjQxQjQKLToxMDRDNjAwMEZGQkRERjI5OEMwNDc4MTJENDU3RjNGN0NFOUIwMEY0RjQKLToxMDRDNzAwMDMwQkY3REQ1REY0QzZFNzhERkM4NUYxNDJFNzhFRTYzRDEKLToxMDRDODAwMENFQzcyNkRGMDRBOEJGRjA4QzFCRUNEOUQzMUREQkREMUIKLToxMDRDOTAwMDAwNTczQUVFMzQ5OUQyRDUwRkJGRDZGMTIxNjFFMzQ3RTAKLToxMDRDQTAwMDUyN0E4RTA3MUUxQkEwQUYwNUVEMkJEOEY3RjZERTdBRTEKLToxMDRDQjAwMDBBRTREQjgyMTgzRTNFMERGRkM4RThBOTNGMjIxNkEzOTYKLToxMDRDQzAwMDVGRjIwMjc5NjcyNEQ4MUQ2NDY3NkFEQ0ZDRTI2RUZEM0UKLToxMDRDRDAwMEMxRjk3QUNFRUUwQjlCRTAzQ0YxOTlFN0ZGQjIwOUVDMEIKLToxMDRDRTAwMEZCQjlGRkZDNkFEM0MzRTAxNzc4Q0RFNjAxNzlCNEUwRTUKLToxMDRDRjAwMDk3MUZCQTg5MEVGRUE5NTY2NkNGOUY3QkY2OTkxRDRGNjYKLToxMDREMDAwMDUwM0UzOUY3NDcwQkRBM0JFNzdFN0IyQTVCQTFFQjNGNEUKLToxMDREMTAwMEI3RTcxRkU5NzBFRTc2RDE2RkM3RjYwNTc4MkNEQTc3MjIKLToxMDREMjAwMDQzREZERUY2MUI0MEI3MjE4QjFFQkYyMUM0QUZGMjMyM0EKLToxMDREMzAwMEZENEU1RjAyMDc1ODU4MTk4M0E3RDdGN0JFOUUwREYzQTMKLToxMDRENDAwMDNDN0JDNDgyRTc2RjE2RDA2N0I1QzU4MEI3NzlBODFGRDIKLToxMDRENTAwMEEwQkU4NEMyN0JGRUFFRTU3RjMzMEQ4QjA3NzdCNUJGNjcKLToxMDRENjAwMDA4Njc4NTQ4QjgzRkYxMDJERTZGRkJGMUU4MTIyOENERjUKLToxMDRENzAwMDNFMDVDNjIzNUQyOERGNjNERjVCNzA5OEUyRjdFQUM0NzcKLToxMDREODAwMEY4QkM0MEJFOTEwMUZFMEI3NkFENjBERjZEQTdGODc0RjQKLToxMDREOTAwMEY3QzRFNzU5RjhDN0E4OUVGODJDQjZDNkUyNzNFRUQzNUQKLToxMDREQTAwMDRGNDBFM0RFRDRCODc5MjQxQTNFRTdFREJCQTM1N0JCRUUKLToxMDREQjAwMDQxOTMwRjk3ODNGMzJDOUUzN0Y1NEY4QkJGREMwQTdDMTIKLToxMDREQzAwMEY2QkM0M0Y1MzIzQzg3MjZEMEI2NzNCQjJGNjQxMzRBM0EKLToxMDRERDAwMDI3NUY5OEJCRUUwNTM5RDlGNTVCOEI2NzBCN0Q3RUZGQUUKLToxMDRERTAwMDZGM0Y0NkJFM0JCN0VGM0Q1OTYxRTc0RjlDMDJCNTJCODUKLToxMDRERjAwMENFOTFFRUJGMEVCMDMzRTZGM0Q4REE4MjZEQUVCMEM1MTkKLToxMDRFMDAwMDFEQzVEN0ZDRDBBNDcxOEExQjlGMUZDM0U3MjFDNjBGMDUKLToxMDRFMTAwMEYzNDNGQjZGMTdFMkUwNkY4OTM1OTdFOUE3NTAxRjg0RDIKLToxMDRFMjAwMENCM0NEMjIxQzNGOTdDM0Q1RTg1NTJDMEU3QjExQjgxRUEKLToxMDRFMzAwMEZFMTJFMTUzNUJCRjA3RDY3RkFEMEVBRkRCMTgxRkM3NzUKLToxMDRFNDAwMEY2OUY0RkY5MTVFNDcwMEZGQzg2ODQ4RkExM0NCN0Q5MEIKLToxMDRFNTAwMDIyNDE3RUU0MzkxRTZGOENDNTdCMTRGRUZDRkNFNDc3OTYKLToxMDRFNjAwMEI0MTcxRkIyMjY4ODQzNzAzODVDOEVERjJGQjdCRUVGQjEKLToxMDRFNzAwMDBBQkYxOTU2MDVDNzhEODVFMzk5NkZFMkVCODNGNTVDOTAKLToxMDRFODAwMDdFQ0MyNzM1RTNGQUU5RjQ5OUM1NENGNTU5MEVEODdCNjkKLToxMDRFOTAwMDE1NkE3RjIxM0FERkE2NzYxM0NBRjkzMzNCNEQyMUQwM0MKLToxMDRFQTAwMDE3QjFGMjYyN0U4MjdENzJDOENBRUM5N0Y5MkZFRjFGQUMKLToxMDRFQjAwMDA2NzJFRENDODE1NzM4NUQzMkJBOUZCRkVCOThBQzcyNjkKLToxMDRFQzAwMEZEMTBEMkVCODcwNDcxQ0E1RkYyRjExNkJDMUE3RkJDRTkKLToxMDRFRDAwMDA1QkJGRTE2NzdCQ0QzOTJGRjRFOThGRkU5MEUzMzUxMDcKLToxMDRFRTAwMEU5MTBBN0RCNEQ3MUZENDlBRDU2QjMzMUNGRDYzNUYyOTAKLToxMDRFRjAwMDQ4MTI3RENGRTRCNjJCQjBFRTg2N0FGRkM3MkFEODI1QkMKLToxMDRGMDAwMEVGOUJEMUNGNDIyNERGMTcxNjNDNkY2RDU3NTY1MkI4MzYKLToxMDRGMTAwMDM1QjhBQkQwQUZBMjhERDcxODAzMjdDOTVCQTEwQTI1M0UKLToxMDRGMjAwMDcwRkVBQkEyODREOUQ0NkNERTVBQkJEOTIzMUFFNjRERUQKLToxMDRGMzAwMEY1NkUyNkU4QTVBM0MzNEY5OTYxOUQ5RkM2RDg4RjlGQTQKLToxMDRGNDAwMDRBQTRBOTJGMURFRjUzNTVGMDJENTVFMkVEMTc4REUzMUYKLToxMDRGNTAwMDA3OTY5ODg4QTJENzg3OTZBRUEzMzAxRkYyM0IxQjAxMTUKLToxMDRGNjAwMDNGQjJFOTM1OUIwQUYyNjRDMTI2NUIwOEUyOUJBRkVGRDIKLToxMDRGNzAwMEJCQjgwM0UwNzZFRTY5MEI4Rjc3QjIzQ0RCNkFCRTVGQUQKLToxMDRGODAwMDNCQjVFRkUyQTZGRkEyRURBN0UwNjVGQUZERUE0REI0NUUKLToxMDRGOTAwMDNGRDhFREJCMUM5OEY0RkNEN0U3OTM4NjExMkFBN0FCNEEKLToxMDRGQTAwMDdGRjdGMDQ0OTAyRkQ1QjBDN0EyRkRBQjdGREQzN0Q0OUIKLToxMDRGQjAwMDQwQzczQkQ5ODdENTRGRUVDRTBBMDE1RUU2QkVGMERCOTcKLToxMDRGQzAwMEY5QTA0RkU2RkNDQTQxODAyNDVGREZGN0YxQkQ1MDNGRjYKLToxMDRGRDAwMEY3M0IxN0U2N0I5REZCRERBOTFGMDIxRjUwN0I1QkQxRDIKLToxMDRGRTAwMEVCRjVEOUZBRjNERTc0REMzOTUwNjdFREMyMjU1RDFFQUUKLToxMDRGRjAwMEMxMUMyODI5QkRDRjc5MzlDOTBGRkI3MTVEM0Y3QzZGN0EKLToxMDUwMDAwMDgxQTVFQjIxNzQ0MDExQjU5Rjg4N0JBMjcwM0ZFMEMzNUUKLToxMDUwMTAwMDM5M0I4RERGRkJBQjk1RDk1MzBCRTRBRTJBRDYzRkQ4OTUKLToxMDUwMjAwMDhGRjE2QjA3QkVGNzhENDZBN0JDM0RGNjdEQURGRjdGQzgKLToxMDUwMzAwMDVBNzM2M0M2NjFFRkNGQjc5MDlBNzhGNDZGQjFCMTcxQ0MKLToxMDUwNDAwMEU3RUNGQzM2REYzODFFQTNENzlFREY2MUNGN0YyQUIwQTYKLToxMDUwNTAwMEZDN0NCMkM3ODZFNzdGRTdDQUUxQzEyOTk0NUY1Rjk0MTEKLToxMDUwNjAwMEM5MkNFMERCQjlFRUYwRTA2NEZBQkRERjcwNzkzOUQ3MjYKLToxMDUwNzAwMDRFRUJGNDc5M0YzRTBGRTgwRjc1NjJFREZDMTVFMDc3REIKLToxMDUwODAwMERFNEIzNjAyRjQzRUVGNzcyRUY0MkJDRjdCRjFFMkM5RjQKLToxMDUwOTAwMDI3RTlGMzMzRkIxQzk4QzczQUVGNzc4QjExREZGMzJDMkEKLToxMDUwQTAwMEUxN0JDMThGRDNCNUM3ODJGRUIxMzM3QkRFQ0EwNjdCRkQKLToxMDUwQjAwMEU0OEMzOTlDOUREMjhCOUY2ODVFQkI4NTNCMkY4Q0VCMkIKLToxMDUwQzAwMEEwRkI4MjgyMUEyN0Y4Mzk1OTVFNEUyRDYxRjcwRUQ0NjMKLToxMDUwRDAwMDQyRTIwN0QwRjEyNzM2MTYwRkUxRjFBOTA3QjhCRkU4ODEKLToxMDUwRTAwMEZDMEMyNTA5RTc3RkZEMkRFQzM5OEY1RjNGNzBBQkQyQkIKLToxMDUwRjAwMDM3NTkzNzBGQzg5QjIzRDdEMDdEODk1QzkzMEY3MkQ2NjEKLToxMDUxMDAwMDE0Qjk4NTI4QjQyRTQ1MDY2MkE5RjUzM0MxRkQwREUwMUEKLToxMDUxMTAwMDBGNEQyMzY4QkY5QkQzN0NBNDlBOTY4QjUzNDgwMENGMzYKLToxMDUxMjAwMEZGMzg2RkVFRTZCMzNGNTAxNDNGQjA0MUU5MEJFM0Y5QUYKLToxMDUxMzAwMDZDNENCRUNDQjNGQjQ3REIzMDZGQzQ3OEVGODJCQThGQzgKLToxMDUxNDAwMEFERUIyMkJGNEYyMTc2QkUxN0NEQUEwNUU0NzkzNDZFQjAKLToxMDUxNTAwMEM3RjIwNjZCMjVFNTYzRjBGRjkyNDM1QzJFRjU1ODNGREUKLToxMDUxNjAwMEUzQjNGMzlFMTRFNDMzNkQxREFCRUEzQzI4NEY1NkQ0RjEKLToxMDUxNzAwMDc5QjE1QzVFNTc0MDE0Q0M3N0Y2NjFEREM0RTE2MTI5RkEKLToxMDUxODAwMDU0MDlGODU3ODEwN0UxQ0ZFMkFDRjBDMzdEMTYzMDI2MTEKLToxMDUxOTAwMEM0NTM0RENFMDBEMjk3QzU1QjgzQkUwMjJCOEY4QjlBMzIKLToxMDUxQTAwMDlDMkFBOTc2NDI5RTA3ODM5M0M5NTk4MTcwOTI3OTVEQTIKLToxMDUxQjAwMDZBOUI4MDcwQTVFRkUzRjNCMUY2QzAwQ0RCMDhDODNGMzMKLToxMDUxQzAwMDFFNkE5MDUzNzI1QUIxQTFERTAzNkUxQTVERUNGRURGQzcKLToxMDUxRDAwMDg2MUY0MTc4QURBOEIzNjIwOUY5RTIwMDM3QzgxNzg3ODYKLToxMDUxRTAwMEZBRkYwN0Y4QjUzMEY4NUQ0NzE0MURGRjQwRkVCNjYyQzAKLToxMDUxRjAwMEUwQTcwNEYwREI0MEUxOTcxNkU1QUI1ODM4RDRGMjNDNjkKLToxMDUyMDAwMDFEOEQ5RjEyRjEyRkU0REI0MzEwNjY3RDVEMUI5NkRBNDYKLToxMDUyMTAwMEYzOTQwNDdBRkRBQzhERDkyM0I1MjRCMDE0RTNBMTFFMTgKLToxMDUyMjAwMEU2ODcyMTY5MkFDOUQ0Rjk5Rjg4NTdDNTczMjA3OERFOUIKLToxMDUyMzAwMDE0REEzMzZGNDFGRkE1ODY1RjkzNDczQTY5OTQ3RkNBQkEKLToxMDUyNDAwMEM3QjA5RUM1NkY5QjQ1OTA1N0E2REFBREU0MzM1RDFDOTEKLToxMDUyNTAwMERGMzRBMUMyQTYyMDlDN0QwMkM0MzUxQUI4N0U1REQ2N0IKLToxMDUyNjAwMDhENEYyMzdGQUNBQTUzQjA1Q0NERjk2NDJERTc5Mzc1QzUKLToxMDUyNzAwMDgwNzc1QTZGRjBCMUZDOUY5NjcxMDRGNUU3NjNCNENFNjYKLToxMDUyODAwMEY2RkI2MUEyRjc4QjI3RkJEQUMzNjY4QTdGOTQ0OTBBOTMKLToxMDUyOTAwMDk2RUMxRThFMjM5NkQwMjBGQTlFQTM5MDYwM0MyM0Y5QjQKLToxMDUyQTAwMEM4Q0Y0MkI4NTZEMjhFRTdBRDkzQjU3QjYwNUVDRDREODgKLToxMDUyQjAwMDlFOEE3MTIwNjI2NjdBOEE5ODU4MTkzNEMzM0UyQTE2RUIKLToxMDUyQzAwMEJFMERCRTAzNzhCRjQ0QTJGOTk0MUQ5RDJEQzBGNzJFREMKLToxMDUyRDAwMDRFNjVCMUIzQjQ3QkRBOEZDMDdEMTBDRTE2MDczQkE3MDUKLToxMDUyRTAwMEU4QUIxOTkwOERGMkQ1ODJGNEVBRjQwNTg0NkExRDFFQUMKLToxMDUyRjAwMEQzMTNEODdGNEJFQ0UzRkYwM0U4RjExM0M4NEJBNEY4QkEKLToxMDUzMDAwMDVEREYzNjEwRjM1QTU2OTlEQkJEMjAwRjU3RjFGMzFBQzMKLToxMDUzMTAwMENBMTQwQTA1RERGRDYyNkY3MDM5RTkyRTMxQ0EwMTRERUMKLToxMDUzMjAwMDJFN0JBRTJGMzZEMEIzMjY3NzUzQzYxOEU5NUU5M0JCREIKLToxMDUzMzAwMEJGRUU5NkJCMTU2NzQxRUVBNjQ2MzYyMjVGQzZGMjQxMjgKLToxMDUzNDAwMDgzNTk1Njg1QUJGMTNFMUFFNjdGM0EyNkIwRkIzMjdBOTYKLToxMDUzNTAwMENBMDM4Q0JGOUZFRkNDRDkwMkU3QjEzNUZFODk1REJGOTAKLToxMDUzNjAwMEQ0M0MxRUJGRDM2RDBGMjZDODdGRUNDRkVGNjU2OEE2NzcKLToxMDUzNzAwMEY0NDZGMjIxNUY0MTQxNDRBQ0ExNzQwNjY1OTBEMjE5MTQKLToxMDUzODAwMEUzQTc1MjJDMzUzQUFFMjc0Qzg2QTg3QjQ1MzY0RkVFMjQKLToxMDUzOTAwMEFGRDVDRUUyRDQ1QjhCRkQ4MEM3NjVFRDhDODdCMkVDRDgKLToxMDUzQTAwMDhDQ0Y5NkE1ODlBMEJCODg0NEY3OTM0RUZBNDhEQTNGODQKLToxMDUzQjAwMENBMEFGNkE1NjQ2NkYxRkMyRTk3RDgwRUYxREM2NUNFMUMKLToxMDUzQzAwMEM5NTZDODJCMTU5MjRCOTA3RUZFRUVBQTFDRDA1QjdDNzIKLToxMDUzRDAwMDA3RUU1RjAzRkFGMzM4N0RFNDM4RURCNzhDREZFQjY0NUEKLToxMDUzRTAwMEYyMTQxM0Q4OTdFRTc2NzY2MDNFOTREMzJFMUFFMjQ5RTMKLToxMDUzRjAwMEYzRUM4MTVDQkJBRTVFMDQ1RkU3Nzg4NzYxNzcyN0I4MkEKLToxMDU0MDAwMDFGNkExODVGMEZDOTU0NDk5RTRFNEU3NERGOTdBNEE4QjcKLToxMDU0MTAwMEE0NDAyNzJGRUEwN0REODhGNzMxRjU5NDEzMDlFNEUxNkEKLToxMDU0MjAwMEY2RkYxOTc5RDgzMDIwODQ3ODM1QzdDQTlGMzQzRkRFMUIKLToxMDU0MzAwMDAxNDU0QjE1QUU1NkEwRDZGOUIyQkI4NzIzOURERTYwNjEKLToxMDU0NDAwMDg3N0Q4ODczNEJCNzFERjRBM0RDOUVGMzhDOTU3RjUxNDkKLToxMDU0NTAwMEJEQTZBMDFGOENFQUI1Qzc0QjQxOUUyNkQ0NkIzNUY3N0QKLToxMDU0NjAwMDIxMURCN0Y0NTc4MDhFRjdBRjc5Rjg2OUE4N0ZCNkM2Q0IKLToxMDU0NzAwMDgyRjdCRTU0NDU1NjEwODVDRUI3M0EzMjBBQ0I1OTZERTUKLToxMDU0ODAwMDhGNjI1OUQ5QjY5OTMyMTEyMTRCNTc1N0FGOTkwQUZERkUKLToxMDU0OTAwMDM3OThEMEZGNzMzMjc0Q0RCOTVBNUEzRkQ5NjI0MUZCNjUKLToxMDU0QTAwMEZERTRDNjA3MDc4MEZENzdCMkM1QTE5OEMwREVERjM4RUUKLToxMDU0QjAwMEMyRDhERUNDRUU3RjM5RDk2NjBFOTkxOEZENUUzMjQxMzYKLToxMDU0QzAwMDNDODI3MEY5MEU1RTIwREQ3QzQ5ODk4Mjc2RkNGOTk4NzkKLToxMDU0RDAwMDc4NEJFNTVBOEI1RjcwMjc4NjdGNjU1QjdDN0IxMkNGQUMKLToxMDU0RTAwMDZGNjM3MjZFNEQzRUM4RDdCMkEzM0YxQjAwRjRBMUM5RDMKLToxMDU0RjAwMDk5QzUyOTU0RUUwMUZDOEU1QTQ4QkNCOEMwNThGQkQ4NTcKLToxMDU1MDAwMDA1ODBBN0IxNzZGRjYyODZBRjJCQkIzN0VCMzM5MURBMEMKLToxMDU1MTAwMEREODhBNzgwN0I5MkMxRUZDQkZDQUE5RjcxQkI5QzU4MTIKLToxMDU1MjAwMDEzQjRCQkY5RkI5RUY4RURGMzVBRkVGMkU2MjMwNEYyNDYKLToxMDU1MzAwMDU0OEQ3RTZEMTNGOEFCMDVEODhGNEY2Mjc5MEY1QTFDQ0UKLToxMDU1NDAwMEE4Mjc1RDMzN0JCQUM1ODI3MjY1MDZGNzQ3Njk3NDFFNkEKLToxMDU1NTAwMEE1QjM4MDlCOUZEQjMzRDBFMUVDQzgzQTk0N0JDMkFBMTEKLToxMDU1NjAwMEEyQzc0NzUxRjg3RDQ1RTkwRkU4NDM1ODM1QkEyRkMwMjcKLToxMDU1NzAwMDc3RTlDQTFGQUNCRDg3OEVGRkY1M0IyNjdDM0UyQjYyQzgKLToxMDU1ODAwMEMzRkU1RjNFRTI3QkZDMUVEODJGRkNCQjE5RjM0OUJFNzUKLToxMDU1OTAwMDNFMzQxNkUzQzk1RjlBOEQ3RThDMzIwNzkzOTdBRjcxQzQKLToxMDU1QTAwMEZFQUY4QUFDMzJEOEU3NTVDREQzNjVGMDgzNTY0NUQ2RTkKLToxMDU1QjAwMEUwRjMyQTA4MjI2MTlFRkM1RDZGOTQ0OTEwNUYyMjk4RjcKLToxMDU1QzAwMEU3RjI5QUZEQ0VCMUY1QTg0RjhCRDE4RjU2QkREQTEyMTYKLToxMDU1RDAwMDM3Q0ZGRjM1QkI2MjkwNTdENTlEMkQzODJFQTFGNjU5OTgKLToxMDU1RTAwMDVBM0ExRjRGMjc3N0FBMjNBOUM4MUZDNEEzMTJDOEZGN0UKLToxMDU1RjAwMEFFRTJGMkE3N0I3RTFCQ0QwNkY5RjNBNTJEQkU5RkU2OUEKLToxMDU2MDAwMDVEM0I1QjY3NTVFNDA3Qzg3NzNERDdGNzQzN0M1RUE1RjQKLToxMDU2MTAwMDdEQjc5M0YxNjk3NDNEOEY4RjhBQjc5RUU4M0FBRUM3MjQKLToxMDU2MjAwMEZFNUYyNkM3RkZGRTA1MEVERjkzNzVCMzg4OUZDQUFGRTYKLToxMDU2MzAwMDRBMEJFREU3ODRFRjNGRDg1NDBBRkJGQzhEQzkyOTgyNjEKLToxMDU2NDAwMDZFNURENTZENzM4ODVGQjdBRUVBOEREMzY0RkRGRDk0NTIKLToxMDU2NTAwMDUxM0MyQzMyRTBFMUMyQ0EwNTg4ODcyNUY2OEE2M0EwNTYKLToxMDU2NjAwMDA3MkE1NzhEMUUxNkMwN0RGRTBBODRGMzY3NjY1RjM2RDMKLToxMDU2NzAwMEM4RTM1MzZEMEZCQUUzRTUxNzVGODhDNTRGMUJDNzBGMkIKLToxMDU2ODAwMEI1QkI0Qjc0RjhEMUYwMTJGQkZFQzkzRjU3RkZGRDExQkIKLToxMDU2OTAwMDkwNTMxQjVDMDZCOTEyNUJGNkMwNUI0RTdDQjgyNTcxNUIKLToxMDU2QTAwMEZBM0M0OUY1NzcwMEUxQTZCQzc4MDRFODdBQjUwM0YzNDMKLToxMDU2QjAwMEU0MTJDM0VGMkExMkU4MEQ3RTA5RUM2NzZBNjc1OTFERjAKLToxMDU2QzAwMDIzRTBCQjA0RTE1MEREQzZFOEUwNzI3MDhCN0U5N0QzMjcKLToxMDU2RDAwMDQxNTlGQ0Y1OEM3NjY4NzQ1MDRCNTRDQUIwQzdFNUNCODEKLToxMDU2RTAwMEQxQzFDMzQ0QjVGNkIyOEU2RTNBNjg3QkEzMkMyRjRBNjMKLToxMDU2RjAwMDA3QTMxREMxQjFGNUI0REYxNzYwRkZFNEY3QzRGRjcxNjQKLToxMDU3MDAwMDU5NzU1RjA3RjZDRTRBMTNDNkJEOEVEQkQ1RjRCQjU4N0MKLToxMDU3MTAwMDdEMzhDOEU3RTNFRUUwQzRFQjRBQTJGNUQ5REIwN0I5NzAKLToxMDU3MjAwMEY1RjczQTlFNkFBNjcwODgwM0JGRDE4RTA0RjQ5M0E3NUEKLToxMDU3MzAwMDkyQzI5MUZGRUZFOEU3MzM3M0ZDM0NEMUIxRjZCMjMyOEQKLToxMDU3NDAwMEMwMjcwOUM2RjcyNzZCQTUyNkJGNEQ0OUNFRUU3RDJGOTIKLToxMDU3NTAwMEU4RDFFM0NFRENCRjg3NjhFQjFBN0JFMDU2MDc2RDZGQkMKLToxMDU3NjAwMDRDN0UwOEY1RkNGMUUzMDJFQUUxQTU3RjVFOUMwRjcyMzYKLToxMDU3NzAwMEI4ODdGRDVCMTc3OUUyQzQyMEY0NUIzRTc5QzI4Q0Y2RjIKLToxMDU3ODAwMDE0OEU0QkE4RkQwMzdBMDBDRkQ3RTAzRUEwM0ZGQTU5MTQKLToxMDU3OTAwMDEyQzU3MzFGODRDQjdGNDc0NEUzQkE1QUZDNzY1OTVEMjgKLToxMDU3QTAwMEM3QTMzMDNFQjFBQUM0QTM5REQ3NTdBMDY0RjZEODdGNDMKLToxMDU3QjAwMEMyM0M3NEZFNzlEOTFDRjBDMEI5MjE1OTIwMTU0MEY3QkMKLToxMDU3QzAwMDY2MjlEMDBDRjk4NjY2NkZEQTcwNTUwN0U3ODUwRTk2NjQKLToxMDU3RDAwMDk3NjMzQjc4QjAzOTg3QkU2RjlCRjkwNzBGRjhGOTJDQjgKLToxMDU3RTAwMEY0M0I1MDVBMzNBNUYzN0E3RkI5MzlBRDlEREQ3Nzk0RjgKLToxMDU3RjAwMEE3N0I5RTBCRTdBMjY5RERFMDc3QTBGM0VENjVERkZDRjgKLToxMDU4MDAwMDFCQTFGQjlFMzVCQ0RGNzhBQTc2RDExNzgwOEVEMkNENDYKLToxMDU4MTAwMDFGQjVGQzE1QTk5MUI1Mjc2QkNEOERBQzlERkI1MTE3MUMKLToxMDU4MjAwMDU0MzIzRkU5RUJEMzkyMTA3RURBQkFBNkJFQkExQ0VGMkYKLToxMDU4MzAwMDVCOUJGQTZBMDY5RTczOUFFQUNDRkYxQ0UwRjkxQkM4RDAKLToxMDU4NDAwMEZCMDFCQTRGNjZGQTM5OTYyRTFFRTVGMkU3RUVDREEyQkQKLToxMDU4NTAwMDZBQTZFMzFEMzQ3NzFENzAwMDVGRkM1NEMwN0RGNTVEQzIKLToxMDU4NjAwMDFGMUUzNDAzQzlGRkU5RjA3MTMzREM5NzcwMUZBNEVBRUYKLToxMDU4NzAwMEQwRjU0QzIzOEFDQzhDRTgxMEJFM0Y5REI0QkI1OEJERkMKLToxMDU4ODAwMEJEMEZEQzdGMUExRDhGNkU5OTYxQkM4NTJDRkU3Q0Q3MDUKLToxMDU4OTAwMDg3ODdDNzgyMUFBNUUzMkQ4M0YyQkU3Nzg4MENFMzRGNzIKLToxMDU4QTAwMERCQUIzNEIxNjM1MTdDQkM1N0U5Nzg2Mjc0QkM2RUY4RjEKLToxMDU4QjAwMDQ5NTY4NDQ3MTQzRTU2ODQ5NzA2MUZCODVFMDREQkEzRkUKLToxMDU4QzAwMEYwNDU3QjQ1ODM2RjAzQzA4REMyNkY2QUQyOTQ5QkM5M0MKLToxMDU4RDAwMEIwQzRGQzMyRDUzOUY4NzM3NjVFOENDRDI3MTZCRTVGMjYKLToxMDU4RTAwMDQzMTNFNUI3QTcxQ0ZFM0RDMDdGOEQwRUZGRjNDMDNGRkQKLToxMDU4RjAwMDczQUQ1REQ5NTIyRTlFMDc3QjExOUVDRjM3MDUwNkE0NEUKLToxMDU5MDAwMDBGQzQ3MzYyRjk3RDIwMEZBRDIzN0U5QzM3OTY0RjhGQjUKLToxMDU5MTAwMDAyQkY1QzBEMjVFNTBCOTgwNzNGQjc3MjJGNUZFN0VCRTEKLToxMDU5MjAwMDNGM0JFNUMyRjMyOEZCM0VDRTg2NzI5RUE5NzNGNTlERjAKLToxMDU5MzAwMEMwNkZGRjY2NDJGQkYzRkNERUZDNUVGM0VCOEU3MkJGRDIKLToxMDU5NDAwMENCQkIwRTdFOUU4OEFGRjMzRTZFQ0ZEREI3RDcxMTgyMDQKLToxMDU5NTAwMDdCMTBFRkFCMzU3NUVGQUY4MEFFRUZBQjY1RjkyNzQ0NDkKLToxMDU5NjAwMEVBMTg3NkJCQzE5RTZDRTRGMTkwOUVFM0MwN0UyMTc2N0UKLToxMDU5NzAwMDFDNkQ5RDA3QjJGQjVEMDVGQkNCQTc0N0M4Qjg4RkQ4NTAKLToxMDU5ODAwMEZGQ0VGOTNGNTZEM0JBM0RDQjhBRkI4NEQ1Qzk5QzdFNjYKLToxMDU5OTAwMENCRDhCRUY1RTk2NEJGQTMwOEZDNUYyQjUzN0MyQTVEMUUKLToxMDU5QTAwMEU3Q0EzNzQ4QkI0OEUxNzQ2MEM4NDNBMUYyMTJCODE3OTAKLToxMDU5QjAwMDVBNDRERkQ5REFDOEQ2NjAzOUJDNTdDOEVFOURGMTcwQjkKLToxMDU5QzAwMEJCNzQ2REM3RjEzNkEwQzc1MzQ3MkMxODc3RjhEMkM1MDIKLToxMDU5RDAwMENFMTNBRTM0NTc2NDgzMURGRkY5NjYzOUVFRkQ2NzlGMjEKLToxMDU5RTAwMEJBMjQ5Q0VGNjZBMTUzMDAzQTlGNEU4MjU2OTAxNzdCRDMKLToxMDU5RjAwMDNCMjZGNzg1RjlCODdEQzQwM0U0N0Y2QUEzNDk2NEY3QzEKLToxMDVBMDAwMEEzNjlGRTk2QjBDNEZDRkRBQUM0RUE3RTVFN0E2Q0ZBNzUKLToxMDVBMTAwMEZCQzY1NjhDMUI4Mzc5MUUzMzVBREVDM0JDNUE3NzA5RUEKLToxMDVBMjAwMEYzREJDNUNFMjNDOUM5RTZFQkVBNDhDMTdDNTJENzE4REYKLToxMDVBMzAwMDExRjNCMTVEQkUyRTAxREUxQkQwNTEyRUUzRkI0MUExNUYKLToxMDVBNDAwMEQ3RjcwNzJDRjE4QzA3QjhDMkZCMjBFNzA3NUNFMUZCMTYKLToxMDVBNTAwMDE2MjdDQkQzNUFDN0Y3RDk5QkNEQkVBNjMxNzQ5Q0NEQTAKLToxMDVBNjAwMEFCOTMwNUMwODdENjRGNzEzMkI5NzI2QThDRTY0NzBBOEMKLToxMDVBNzAwMEEyMUYyOTNCQ0Y2MzgzN0IyQ0IyRkRDOERDQzQ1NTEyMjcKLToxMDVBODAwMEM0RkJCRUI3NDAzRkU2Njc0NTM4NkMxRUYyNjIxOEUyQzEKLToxMDVBOTAwMEQ4MkJDMUJGMDI3ODM2MzM3QTVBQjk1QTQwQkYyQTg1MEIKLToxMDVBQTAwMDVGM0ZEMDEzOUYzRjY2QjkwNUQ2MzFBMDU5RjBDMERFRTUKLToxMDVBQjAwMDlEOTY3MUU3M0RDNTY1NjU3NERFRjIzOEVFMEJDMTREMEMKLToxMDVBQzAwMDBCRTM2NjZGRkMwMEU3RTU0QUIwREU3QTE3QkIyN0ZGMDEKLToxMDVBRDAwMEYzQ0JEMEM3NTcwRTc2NkY2Mjc2NkQwN0JGMUYyRjhDNDIKLToxMDVBRTAwMEY3RTAwNUI1N0JCRUZDMjVFQzdFMTNDOUFGRThGMzYzOTgKLToxMDVBRjAwMEEyRkNCMzk0RDMyMUYxNDM5Q0FEQjI1NDBFODExRjQxNUIKLToxMDVCMDAwMDZDREUzQzA1RDYzRDNENjgyMTM3RDFGNUI1MDgxRDdFREMKLToxMDVCMTAwMEUwMTc3NTg0QzhFRjUzRjIxRjA1MzhBRDU5RDcxN0YzNTYKLToxMDVCMjAwMEYwOTY4QkZFNkNEMEMzRUFGRjkxMzE0RTc3QzA3RjdFM0EKLToxMDVCMzAwMDAzREMxRkJGQTk1NDQ2QkUzODAwNzBBN0Y1QTc5N0U0NDEKLToxMDVCNDAwMDZFODYzOEE1QUJCNkJDNkQzQTFEMkZFNDkxNTFCMjM0QzgKLToxMDVCNTAwMDk0OTBCN0YzMjE0RUI5NDRGNDA4QjQ3RkIwNDJDQkRGNDAKLToxMDVCNjAwMEY2RTA3OTlFRTFBNkFGQzYxNzQwMUMyRjQzNDQ5RkQyQjIKLToxMDVCNzAwMDI5ODFERERCQjA2QzQ5QjkwN0YwQkFDQzkzMjZFOEY3OTAKLToxMDVCODAwMDJGNzc3MjNBMzg5QTUyNzFBNzkzQzJDN0ZCQzg3QTBGMUYKLToxMDVCOTAwMDM1RTMyODdGQTY1RTA1N0U0NEI1NTk1NkI2QjM3ODIxMTUKLToxMDVCQTAwMERFRjc5MENBRjE5MkRBMjE4NkFCREM1ODc3Q0U0QTgxRDMKLToxMDVCQjAwMEZCNzQ5OUJGRjREMTlCMDNDQ0NGMDlCMUQxOTFFOEU3MzUKLToxMDVCQzAwMEU0N0Y1RUM0NkIxQUFGQUQxQzZBQzc0QTZCN0QxNUY2RTUKLToxMDVCRDAwMDg3NzFEMkU5MzhBOTI1NjI3ODI0MUQ3NzRCQjI3RjEzRUIKLToxMDVCRTAwMEZBRURDNjVBMTE0RTQ0RUE2QzAzMzg4NUM2RjZDM0JDQkEKLToxMDVCRjAwMEYwRjVBMzA2QkYwN0U3NTg1MjBGNzU0RDA2M0QxQUNBQzgKLToxMDVDMDAwMEIyRkY2OTMzQzhBOTY1QjIwMjdDOUVCQUU0RTQzRDc4NkMKLToxMDVDMTAwMEY5OUJFRjE3MEY0Mjk5REFGOEQxQzMyMEE3OTMzQkZGMDYKLToxMDVDMjAwMDU2ODdDRkM3QzkwNkZGNjJFQTI3NUY3RTBCRURBOTE1MkQKLToxMDVDMzAwMEIyQzE0RkY5NEQ0QUM1Q0YwMTJFOUIwQTgzNDFCQzE3MTMKLToxMDVDNDAwMDEzMzA5QTFFNURDN0VFQTUxREUzRTBCRUUzNTM5MzQ0RjcKLToxMDVDNTAwMERGMTZERThFRUI2QUY1ODQ1NjMyQjg5NTgwNUVEMEUwQjIKLToxMDVDNjAwMEI2NUM1NERBQzNCMEFFODk1NkE0OEYzQ0QyODFGMjJBMTYKLToxMDVDNzAwMDAzQTJEOTAzQTM3ODQ5RkQ2NEM1NDJDOEQ3ODg5RENGNDQKLToxMDVDODAwMDFBQTdEMDdERkYwNkRDMTMwOEI4ODJGQzE4Mzk2MzBDMTQKLToxMDVDOTAwMDlFNDNEQzUzRENFMTA1N0I3RTc1ODJGQjczREU3NUIxRDAKLToxMDVDQTAwMEY3MkQyMkYzQjNDNkI2QkZFRDYyRjQwMDIyQjFBRDE4RjIKLToxMDVDQjAwMDRCN0YxMTk0NEVBMjI2NDE5OTY5QzVGQkU2RjY4OENBMkUKLToxMDVDQzAwMDdGMjA5REFGMzcyOTgwMUZFODZGQTZGOERCRkZGNjY5QkMKLToxMDVDRDAwMEY0MkZFRTBGN0U4MEU1QjNBRTAyRkMxRTZEMEZBN0QzNEUKLToxMDVDRTAwMEY3RDc5NEIwRkI4RUQ3NzgxODhENTQzNzMzNzk1MUVEQjAKLToxMDVDRjAwMEVEQjQ0MkRDQTRCQTkwNzhCNjcwN0E1MzM1Mzg4M0JGREQKLToxMDVEMDAwMDhDRUJBQkNBREIxOTVDRDMwQTA5QzY3REMxMTcwNEY3NUIKLToxMDVEMTAwMDREQTU0MzNGMEFCRkI0RTZBNTBCMTE4RkE0NDMxRDQ4MTAKLToxMDVEMjAwMEZCQUQ4MTcxMDEzRjhEMkNBRjlGOTA0RTJCRjI2RkQwNTgKLToxMDVEMzAwMDg0NzE0RkNBRUZFRjgyNUZBQkIyQTUyRkM2RkRFMUY4QzkKLToxMDVENDAwMDMwOEM5N0MyQkY5QkMyQzdEQjRDQzcwMUZGRTFBOTY2N0QKLToxMDVENTAwMDEzRDk4MkYyQUQwM0VGNjc1Nzk2NTA1QTQ2RkFFQzJBRjAKLToxMDVENjAwMDgzRjM5QTRBODlDN0IzNTJBMzAzNEQ4RTUxRDY5ODQxMDMKLToxMDVENzAwMEY1MDVDMDZEODZBQTJFMDRGQTNCNkVGNUJDMERGMzcwRDYKLToxMDVEODAwMEI0NUExNDU4RkY4Q0Q2OTcxNjgzRkRFMkYwNzYzNjgzMEEKLToxMDVEOTAwMDdDQTgyRTY1RjM0RDY5QTFDRkQxQ0U1MURFODVGRUQ1MEQKLToxMDVEQTAwMDJEMTY4NTdEOEZDM0FGODREMzE5ODdDMzRDM0VFRjk5RTEKLToxMDVEQjAwMDFCRDlCQ0VENTlBMTIwRDA2N0Y1MTIwQTU3NjgwQjMwRUEKLToxMDVEQzAwMEJBMDc5N0U4MjUxMUY5RUExMEFDREZBNUE2RTNCODdEN0MKLToxMDVERDAwMEE2QzRGMDQ1MENGRDY5RUJBQUU0RUJBQTVDQzJENjQ1NkIKLToxMDVERTAwMDM4M0ZEMTY5ODU2MURDQ0ExMkI2Q0UxOTg0QkQyRkMyOTUKLToxMDVERjAwMDczM0FGRTRDQkU5RTRBRjU0NTJDNjczNjVCMENFMzZGNEEKLToxMDVFMDAwMDJBRDhENjAxRjNDOTI5OTQxNTNDMzc0MkQ4N0Q4N0Q5QzEKLToxMDVFMTAwMDdDNUREOThERUM3QkQ5ODUyRjIyQkM0OEFENkVCRUU4NjgKLToxMDVFMjAwMDU3RDVENTI5NUY5RDdBOEIzMjE2QjU3Mzg1NkMyQjEyQTkKLToxMDVFMzAwMEQzRjE5RkM5MThDRkM5NkIzNUFFRUJENDhBRkNBRDcwRDYKLToxMDVFNDAwMDFFRkNCM0M3NjQ4QzdCRUYxMTdENDcwN0UwN0U1NDU2ODAKLToxMDVFNTAwMDk4RkNGMTdEMzAwMUU0RjRDQzQ2MUZDOEYxREQ2NTBDRkYKLToxMDVFNjAwMEZFQTc2RTI1MjFBMDg3NDE4NzJBNTIwMERFODMwRTA1RkEKLToxMDVFNzAwMDc4NTk4M0YxNzQwQTEwQTE1QkVFRDFGOUQxMkQ1M0IzOTcKLToxMDVFODAwMDAwRjIzMjMyRjBCOTU5MjAwNzRBRDkzOTlGMkNGREJDQjMKLToxMDVFOTAwMEU5RkM1MjlCRDNDQjIxMUYyQUFEMzRBNTVDQzZBQjVENzgKLToxMDVFQTAwMDYzREEwRjNEMzE1OTg0RjY4MzRGM0MwOERGQzkyMEJBQ0QKLToxMDVFQjAwMEY1RDA3NkQ5M0Q5MDlENkIzOTQ4NUJBMTVGRURDOTQ3MjAKLToxMDVFQzAwMDAwMUYyREZDMUVGMjQxMzBCMzE0MkMwRjQyOTk0QUY5RTkKLToxMDVFRDAwMDdCNTUwQUNDNTMyMjYzNzRGNzU4NkU3RjZDMjQ5RTAzNjMKLToxMDVFRTAwMEM3OTRBNzYyMkNDMzI0Q0UzRDk3QkFGRTQzNzg3RjU1NTIKLToxMDVFRjAwMDg4RDNDRkU1NTYwQ0ZCRjNFRDhGREQzODA0RjZGMTZCNUMKLToxMDVGMDAwMEMwNEU0QzgyNzNCQzlFQUYyMDRGNDdGNTg5MDhGNzM1RDEKLToxMDVGMTAwMEU2QjBCNTkwRDY5NzUzQkIxMUVDOTdCNTA1MUY4OUMwNzUKLToxMDVGMjAwMDc3NkJGNjEyMUZEMDQ3NkFDNTNGMkQ3QTNDREVFNDYyREMKLToxMDVGMzAwMEJGQ0YyM0M5NjQxNUYwRkY4MTIxMjdDNzAxOUU0MkZCMTMKLToxMDVGNDAwMEE5REQ0OUZCOTdGRkRFRjk4NDAzRUNBMTNGQjIzQzk4NDEKLToxMDVGNTAwMENENkZENUEwRkU3RTI4NUI4RTdCMUYyRkI5OEM5RDE4NDAKLToxMDVGNjAwMERCM0Y2NUQwNjRGNEU3MEQ2ODVEMzcwRUVFRjdBQzFFREQKLToxMDVGNzAwMDI3Rjk2RUEyQkREMzVBQ0JDQUMwOEU1MTJBMjg3NUY1MTcKLToxMDVGODAwMEE1RjNERTM4N0MyOTMwQTEzMjgxQzVDQjk0NzFFQ0I5MDAKLToxMDVGOTAwMDMyODY5NUFCRUEwRTNEMEFGQkY2RTA0RUM5OTY0N0U3MUUKLToxMDVGQTAwMDNCNzQwNUJCNTc2QzU1RTE3OTZCODBEQUE1MjU2NUNGNEQKLToxMDVGQjAwMDVCNkZBNUNGNEY5NDUwMkQ0ODlGOUZCOEZFQkMwREUyNUMKLToxMDVGQzAwMDNCNEY5Nzk0QTcwMjNDRjczNjFCRUQzQTAyOTc1REQxMDEKLToxMDVGRDAwMEZENTA5MTI1RTg3N0QxNzlCNTdDNDgxMDlFMjY0QkI4QzUKLToxMDVGRTAwMEFEOTJENjREMkYzOUMxQzJFOUIxQ0Y1OUQxQjI3OTBBOUMKLToxMDVGRjAwMEQwRTk4QzAyMTlEREY2QjFFQkZEODhFQjkzRTlCNTVERDQKLToxMDYwMDAwMEUzRTA3RUZEMUM5NTMwRkY3RUYwNzExNENBMzNCOUM4MDEKLToxMDYwMTAwMEM4NTEzQjUwRThCODVBRDlGRTI0MjhGOURGMDRCOTFDMEUKLToxMDYwMjAwMDJDMENDOEYwOEEyNkNGNUEwNjU1RUUwMDc5RjY2NzZFMUEKLToxMDYwMzAwMEQ3OTE5QTU5NzhCRTBDRjlERjA0RjY1MDU3NTlCQzdEQjgKLToxMDYwNDAwMDUzODlEMzhFRkQ0RjZEQkNFRDYzRjA1M0NGQTg2NUY2MzkKLToxMDYwNTAwMEZFODA4RDVGMDk4ODBGNkFGNzY1RDBGMTA3OTRFMDU1REYKLToxMDYwNjAwMDgzNjRDNjkyQTBCNTA4RjA5MzI3MTI0NTgxRjlCNDEzNTIKLToxMDYwNzAwMEQ4MjcwNEE5RkVEMUMzNDExQkY3QkZGQkZFNDI5NzA1RjkKLToxMDYwODAwMEY5QjAwNDZDNjdERDdBOUM3QzNERDkzRUJBOUUzODdBQzMKLToxMDYwOTAwMEJBOTg3RkY3QTc0RjdEQjU3RjE0QzA3RjA5REIyMjBEMkIKLToxMDYwQTAwMDA4MUUxM0FDQkE3OTBDNTBBRjZDMUVEN0MwNzg2MEJGMTUKLToxMDYwQjAwMEJBRDhGOTUzNTc0OTI3OUU5MzhBOTVFRjYwQ0UwM0RGRUMKLToxMDYwQzAwMDZFNzI5QzFCQ0VGNkY3NDY3OURBQTNDRUU5MkFGNjc5RjIKLToxMDYwRDAwMDc2OENCQzJBQjJCNERGOENGOEREQ0RFRUJEODY4QzU4NTAKLToxMDYwRTAwMDY4MTc4OEE4QjA3QjNGNDNEQUZERDQzNUQwNkZBOENCQzIKLToxMDYwRjAwMEU5MDEzQTY4MTlGMjUxMzFDMDY3MzVCNzE3NjYxNjEyQ0YKLToxMDYxMDAwMERDQUZDRUNDRUM0MDdCNjE3QTIzQjcxNzI0NUYxMzA4NTkKLToxMDYxMTAwMDU5QzdDNjY0QjI1MjY3M0ZBMEE5MDQ1QkU4NDY2RTJGMTgKLToxMDYxMjAwMDY4RkE5RkVCRUQ2QTZGNDczM0VBNTVCMDBGNzQ3QUI1QTIKLToxMDYxMzAwMDUyNjU3QTc1ODA5N0U5RjVFQTY2RkExRDg1MTNGMzQ4OEEKLToxMDYxNDAwMEJENURDMkY0QjhEMkNBRUQwN0FFODc1M0Y5NzdEMzlBRDIKLToxMDYxNTAwMDk5QkU0QTA1M0JDMjBENjkxMDJBRUE2NThDNjFBNTQ3QzQKLToxMDYxNjAwMEVEOTYzRTg1NEM1RkE2QjZFQzQxQkRENjBFODdCNjQ3OTAKLToxMDYxNzAwMDgwREM2MEZBMzJFQkJEQzMyQTgwQzk0QjFGQjc1MTM5QUUKLToxMDYxODAwMEZEMjQ2RkY3N0FBODdEOTYxMkI1Q0Y5NjhCM0NERTQ0M0UKLToxMDYxOTAwMDk4N0Q4ODM5RkY3NDlFOEY0MjdGOUREREI4OERDRjZGQ0IKLToxMDYxQTAwMENGQzE5NDVCNDBCRTZFMEZFNkUyRjk3MjhENkZEMUZCRkEKLToxMDYxQjAwMDQ5RUJEOTI1MkM3RjI1QkI5NkM1Qzk1REJFQUExRDI2RjYKLToxMDYxQzAwMDVEMUM2Mjk2OEJERDNCMzQ0QkEzQUJEQUIwMTdDNjBEN0EKLToxMDYxRDAwMEMyRkIyOEM3RDlGRDNGMkJFMEJFMUVBMDE3QkVCRkJBMjkKLToxMDYxRTAwMENFQzlGRDFBOUM3RTEyRTkxMzREMEVCOTg4REY1RDQ4QjkKLToxMDYxRjAwMEUxN0IyMkI0MDNFNUI1NEFGNzRCQjBCNjEzQzE4NjdFMDYKLToxMDYyMDAwMEY3MDNCRjA3Mjc5NUMwRkNENzhDRkEzQkU2N0YwQzQ4MDUKLToxMDYyMTAwMEIwNUZGQzU0REI2NzdFNDdCOUVFMUE3Nzk4RUQ0MzNCREQKLToxMDYyMjAwMEM0QjhFNzdCMzJERENDRkZEMDJFMTEwN0MwRDMxNjY0OTMKLToxMDYyMzAwMEY3QzhEOTRBRTVCOEZEOTNEQ0NDQ0UzRUNERTFCNjY2RDEKLToxMDYyNDAwMEQ0MEUzQ0E3OTk1MDNGNEI0NDM1QzVEMUE3OUFCRTZEOUIKLToxMDYyNTAwMDAxM0M1RjQ3RkJCQkRFNkU1MjcxOUYxRUFBMzBBMTdDRTIKLToxMDYyNjAwMDI1QjhFRjBDOTI0RURDNDdBQTA1MzJGQTBENUJDQzQxMDMKLToxMDYyNzAwMDJCRTA2MzZEMDlDN0FCQzdCQTE5Q0VGQjdFNjdCQzUwNzQKLToxMDYyODAwMDc4MDA5RTU3RjhDNTkwOTAwMzc4MEU3OThBOTg1RjA3M0EKLToxMDYyOTAwMEVGNDEzODQ1RjdFRkZBNzhDNTEwQjdDOEUxQTRFMDBGMzEKLToxMDYyQTAwMEYzMEQ2ODY2RjRCNTY2OTQ4Q0YzNTgzOTNDN0RCMzI5RDgKLToxMDYyQjAwMDQ3MkY3RjA1MkUzRkQ5MzlCMTk1QTNERTQ0RkFCQUQyRDQKLToxMDYyQzAwMEY5NTVENTNFRjdENDA5NUQzQ0YxRTQ4NjY3NzIwMUNFRkQKLToxMDYyRDAwMEJBN0IzMDdBM0Q0RjUxNTVGQkI3RDY2RDcxRTIwNEREODQKLToxMDYyRTAwMEVEQjA4RjcyQzIzRTMwNzQ5NzIxQUVDOUYxM0JDNjJEMUUKLToxMDYyRjAwMDFBRkM2RTIwNUZDREI4QjkwOEY1MDNGRkQyRUVEMTIxQUMKLToxMDYzMDAwMDM3QkM0Nzk2QjBCOEVENkMxRUI3M0RCREVEMzYzQzU3NzcKLToxMDYzMTAwMDVFNDRDOUNBMUMwN0VGNUZENjE5Q0ZERjdGQjlGRDk5NkMKLToxMDYzMjAwMDdFQ0NBRjExMzJFNDA5Q0ZERUYxQ0E1MDQzN0NEODRGQTYKLToxMDYzMzAwMDk0QjQ5MUVDMUU2M0Q0RDM2RkZBNTQ4QjI5N0EwRjgxRjUKLToxMDYzNDAwMDc2M0ZENjk1REVCNzk1NDJDRDMwREM3NzkxMEEyQ0QzRDcKLToxMDYzNTAwMDQ5MEQ5NjVFMTJDNEIyMUY2OTY3RTc2NjYxOUYzQjEwRTQKLToxMDYzNjAwMEY0NDIxNzk2MEFGMTg4NDQyN0Y3NzM4OTBGRUI3OUE0NTIKLToxMDYzNzAwMDAyNEIwOUYwOTYxQThENEI0ODNCQUQ5OEJGMDFGMTBCQ0IKLToxMDYzODAwMEUwRkI0NEU3Q0U3Q0VFQ0E4NTZFRTRFRjlBQUJEOUVGMzIKLToxMDYzOTAwMDE4QjE3OEM1NjRCN0ZGMDEzN0UyMjE4Q0YyN0IzQTE3NTgKLToxMDYzQTAwMEU1ODc3RTM1QjQxRENFMUYzREIwOUE5RDdCRDFFNDNCODEKLToxMDYzQjAwMEVFNkZFODc3OUU0QjYxRkE0MDVEMkZBMDFDQUI3NzRDRTcKLToxMDYzQzAwMEZDMjFDMkIzQzU3QzQ2MUY2RjIwNTY2QjFFRkMzRTg4NjUKLToxMDYzRDAwMDM2RUU3NEVFNjc5OENFRjUyMEI4QkJEOUY5NDExRjlFMTIKLToxMDYzRTAwMDRGOUEwRUZFMDY1RDNCRTk2RTY3RjdEOTY4RTM4ODhFMkIKLToxMDYzRjAwMEVCMDdGNzE2RUZEM0JEOEZGOUQxOTUzMUZCODBDQkVBRDAKLToxMDY0MDAwMEVGOThGQThDRDhGN0JGQTExMzRBOEZGQUUzOUVGQkExNEQKLToxMDY0MTAwMDkyOERGNENBRjUzNzI1MjgwNURGNkJCNjFDQzNGRDU4RUQKLToxMDY0MjAwMDcwQUM1RjBGOTc2NzM5MUY2ODdBNjU0NjRDQkU0NzZDNDIKLToxMDY0MzAwMDM5NDNFMkZDMTEzMzBFRDU4MEM5NzBBRTE3RUY5NkQwMDgKLToxMDY0NDAwMEYxQjc3NjNGQTlGNkJCNUFCM0ZEMDEzOTgzQkRFNjA1MjYKLToxMDY0NTAwMDNDN0FGOEJDODM2NDYzNzkwNjJEQkY4MEJBQ0VCRjdGRDcKLToxMDY0NjAwMDM4MjlGMDkyNUJCNzFGRjFGODZCNDRGREJEMzc3MzM5RTMKLToxMDY0NzAwMDNGOEUzNUI1OTQ4MTlDM0IxNTIwM0VEODQ3Q0MyNjM1QzAKLToxMDY0ODAwMEVFMUY4MDNGRkZCMDA5RTU1QzdGM0E2RkI5MThFRjFENDIKLToxMDY0OTAwMDUzQzUxNEFDQUJGMDdCMkY2N0VCRDgzOUExOTNGQzdFQ0UKLToxMDY0QTAwMDlBMURGQzdFOUFCRkYwN0I4NThCREExNjRGMDQzQTM4MzIKLToxMDY0QjAwMENERUZBNTI5RDhCQkEyMDJGQzNFNDVFRDhFNjlBMEY3MjEKLToxMDY0QzAwMDhCREE0NzU3NDM3QkQxNEUwQkZCMUQxRjJFMjdCNDc5MjgKLToxMDY0RDAwMEMxQjk2QzNCRkQ0RTI2RkQ5RTM1MDVFNDA5NDFCRDdCRUYKLToxMDY0RTAwMEI2QzUxRTgyREZGRjM5REI2RTYyRjdBQTE2OEE3ODlGNzcKLToxMDY0RjAwMDAzREM4QjY2RTJGMzRCNEE4MUVGRkREN0JENjA4RjlDRDYKLToxMDY1MDAwMEU2RjJFNDhDM0I5OUUxNEI1MjA1MzUwREQyNTI4ODBGRUYKLToxMDY1MTAwMEVDOUE3NThFRjk3ODBFQjJDQTE5REFGMTQ0MUFFNDg3NEEKLToxMDY1MjAwMDVCN0RGNUY0RkJGQkY3QkM5NDBEQ0YxRjc3Q0NDN0YyNzYKLToxMDY1MzAwMDJGMUIzRUNFMDZCOTc1NzZERkM3NzIzQ0JBOUQyNzg1MDQKLToxMDY1NDAwMDY1RjA0RkNERDkyQjg4MTAzRjI5NkI5RjI2NDM3Q0E0NDMKLToxMDY1NTAwMDZBRDc3RUY0MkJDRkYzMDRCMDdENkVEQjFFQUM4RkQ5RUYKLToxMDY1NjAwMEY1MUVDNjRGMDYyNjI5MzhBRkIzMTkwMUY0RjNFNkI1NzgKLToxMDY1NzAwMDU5QzJGMDdCMUNCQjczODNGN0M3OEREQjI3MzEzREIzNUEKLToxMDY1ODAwMENFRjExQThFRkZCOEUzQjUzNzExMkUxQjJDNzhGRTYzQkYKLToxMDY1OTAwMEZGODZERkUzQjg2N0Y2QkRDNEU3NEIzMDVGRjBBQ0FEMTQKLToxMDY1QTAwMEZERThDRjQxN0ZFREUxRTczMUFEMUQ2RUJEM0Y1ODRBQkIKLToxMDY1QjAwMDEyMENGMkY1QUM4QkM3QkQzMjJGRDM4RkU3MEIxMjY3RUQKLToxMDY1QzAwMDg3OUJDOUE1MEUzN0M0Q0RBQURBMTkxQ0ZFNjIwRUNCNzMKLToxMDY1RDAwMDYwNDdDRTY5MTcxNEY4M0RCREIyNUQ5QkYxM0NFMDlDNkQKLToxMDY1RTAwMEJENTYzQzJGMzEwN0UwMDE3MEEzRjA0MkI4QjRFREM3QUYKLToxMDY1RjAwMEY5RTcwMjVDRkFDMDNBM0VDMDdDRkNCQ0JEMTQyRUMzNzUKLToxMDY2MDAwMEEyRUI5RUUzMEMyMEJGNkFFQkE1NzA2MEVCREU3RDM5NDgKLToxMDY2MTAwMDNDMDU4Qzc4NkE3QjRGMDZCRkNDRENCRDAyQzI2RkVFQjYKLToxMDY2MjAwMDJFMzY4RkFBQkQ2QzVFNjM3NjRENDNGQzlGRDk0NzE0MEUKLToxMDY2MzAwMEYwQjc5Q0RDRjNGMTY5NThDRkQ5N0Q1NkJDQ0Y1NzlCOUUKLToxMDY2NDAwMDE3QTU1M0UyMkUwNkZFNjE3NDRBRjYzMkI5QUFEOUREQzcKLToxMDY2NTAwMEYzNDJFOUY4QkIwM0RERURCQkQ4RUY5MjAyQzg2Qzk0QkUKLToxMDY2NjAwMDVFOEJGNjRFQzJCODYwMDkxMDJGRjBCRkE3N0QyOEZCRTUKLToxMDY2NzAwMDdEQzE2MDM2QzA3NUY3RTg3MDM2Q0NGQjhDRjZGQjQ4MDAKLToxMDY2ODAwMDUyMzAxQkYwRTI3MzA3NEE5Mjc0RjhGOEYyRDg0QkE4MjQKLToxMDY2OTAwMDE3MEJDNDlBNEYxRjAxM0U3RTVFNDRCQjY4RjEyN0VCODcKLToxMDY2QTAwMDBDRjdBRERDMDAzRjQ4MzUwMkUwRjZBRTFCRTFENjdEQ0QKLToxMDY2QjAwMDhGNEI5MEU1NEI5MTAwRjI2MzE1RTdDN0IzOUJFOUJFQTIKLToxMDY2QzAwMDkzQUVGRkNCQjYxN0IwRkQ2Qzg2MzFCRkVBMkY2REFGMkUKLToxMDY2RDAwMEE3MDBEQzJBRjk3OTBDMTJCQTBERTUxMTg1NEJCMzM1MDgKLToxMDY2RTAwMDhFOUVFRjNFRDcxNjYyRTcxNUNGMDlGQzVFQ0RBNzM0MkMKLToxMDY2RjAwMEI4RDVDODkzMEQ3MTNFMjYwRjMzMzdFNjFDQzQ3RDQ2Q0UKLToxMDY3MDAwMDI4RkUzOUM3NTgzQjI5RjZCRUQ0NDRGOTAwQzdCOTNDMjYKLToxMDY3MTAwMDNCQzFFRjNGRDBGNEVFNjQ3NzYwNUE1MjlGQzRFN0JEQUYKLToxMDY3MjAwMDJCNTdDRENCMDY3ODU3QzJEOTQ4QkMwNzc1RkY0REUwMzMKLToxMDY3MzAwMEFGQzA3MzQzRUM5RUQ0MzBDMEU3QTQ3NjBGMkE3OUU5NEEKLToxMDY3NDAwMDI2QzgzMzNEOTlDQ0VBQjU0OTFEQ0JDMUFFM0RBOUREODQKLToxMDY3NTAwMEFCQUFCRUMxREVDRjYxRURBREQwNEVGQkZGQ0E1RDUxMkQKLToxMDY3NjAwMDkzQzRFQzdCODFGREJFOEYzOTE5N0VBNzQxRDMxQjg5NzEKLToxMDY3NzAwMEUxNjBGQzlEODY2N0U4NUEwMTJFNzRCQzlGRTM3ODEyQTUKLToxMDY3ODAwMDFEQUZFOEZCOEZBN0M5RTlFRjNEOEVGNTdGNzYxQzRENjUKLToxMDY3OTAwMDdGMDE3RjQyRUEyM0YxRjk4NkZFNEZDMEVGQkZGQjNFNDcKLToxMDY3QTAwMDA5Q0UzNEYwRDVDNTBEMDM5QjIwOEU3NjgxREYyMzYzOUYKLToxMDY3QjAwMDY5NTk0QTQwOUZDRjZDNUQxN0Y3RjdERkJBRUIzQzJGNjIKLToxMDY3QzAwMDQ3MUU0OEY5NERDN0Q3ODc5Mjk4NUQ3RTg4Q0I2OUY4RjgKLToxMDY3RDAwMDgzRjg5Njc2Q0YyNEZDQjVBNDYzRUExMkVFOUZGM0Y5MTIKLToxMDY3RTAwMDNERTYwNTI0ODhGNkU5NTBEMjhFNjUyMUU5QzA3MjE4OEQKLToxMDY3RjAwMEU5QzIxMkMzQ0MwM0MxNTVFQTMzRjFGQjY4NDdDMkUyRDgKLToxMDY4MDAwMEU3NUEwMzRGREI0NENDM0I3ODAzRTQxMERDNEIyQjk4NzYKLToxMDY4MTAwMEMwOUU5QzdGMURDQ0ZGRUQyNDBGODc1N0Q4RjA3QjJCQUIKLToxMDY4MjAwMDQ0RkY3QjE4MEFEODgzMTNCQ0JERDk4M0M0MjM5REU5RDgKLToxMDY4MzAwMENFN0JDOUM1N0I2RERGNEJDMkY1MjVGQTFEQjU4NTMxMTEKLToxMDY4NDAwMEY3REVCMDczRTExQTFDRTY5MTc2Q0MyMzc5NjNFMzAzOUIKLToxMDY4NTAwMDZGMEZBMUYwQkY3Rjk3MEJFREU0QzExQjFCMTc4MjNDQUMKLToxMDY4NjAwMEJGOUY3NEE0QzMzOUUxQzFGQzFFMTFEMjY2RkNGREE2MTIKLToxMDY4NzAwMDIxNkQxNkUzRUYwOEM3RkM1RUNGMUNCODg3MDRDRkVGOEQKLToxMDY4ODAwMDE5OUY2QkU3NzBGMTFFQzgzOEY5MThCMUU3NzhGRjlBQzUKLToxMDY4OTAwMDE0RkZERTE3NTIxOEZGRjc1MDYyQ0ZGMUVFNkExNzMxN0UKLToxMDY4QTAwMDNGRUEwMUM4QkJEMkVEMkY4NjZDQUJCMTE4RTk0QkY5QkEKLToxMDY4QjAwMEI3M0NCM0FFMkVGODk4M0ZDMjY1Rjc2RjE3N0E3RUU3MDQKLToxMDY4QzAwMEZGMDIwRjIxOTRFNjAwODAwMDAwMDAwMDFGOEIwODAwRUIKLToxMDY4RDAwMDAwMDAwMDAwMDAwQkREN0QwQjc4NTRENUI1RjAzRTMzOTEKLToxMDY4RTAwMDY3OUU5OTg0OTk2NDkyNENERTEzMUUyMTI4RTAwNDQzMkMKLToxMDY4RjAwMDhDNjhFQjQ5ODgxODExRURGMEE4NDVEQkUyMDQwNDAyMkUKLToxMDY5MDAwMDI0OTk0MEQxRTIyRDJEMTMxMjIwMjA2QUQwODg0MDA5MEQKLToxMDY5MTAwMDBFRjgyOEQ2NDcyN0JEQTg4ODgxM0IyMDIyNUFFRDBEQzYKLToxMDY5MjAwMEQ1QjZENDVBM0EyMDU1NDQ4NEYxNDVCOUJERjU3QUQ3NDUKLToxMDY5MzAwMDVBN0JFRkNDODNBNDYwQUZERkJERkZGN0E3OUYzREVDOTAKLToxMDY5NDAwMEIzREY2QkFGRjc1QUZCQ0NFNTBFODVCMTRDQzY5RTU2NTQKLToxMDY5NTAwMDk0REJCQzIzMTlGQjEyRkZBRTg5M0Q2RkIxRUIxODFCMTIKLToxMDY5NjAwMENCRTBBRjhENEQyQzY3QUNCNTQxQjVBRjgxNTI2QkQwNEMKLToxMDY5NzAwMEFBRTk5REYwQjRFQjgyNEEzMTYzNzlBOUQ1RTZGOTUwRDIKLToxMDY5ODAwMDY2MEU5RDdEOTg5QkIxMDlGQUFCMEZCQUExQkRCMTUxQkUKLToxMDY5OTAwMEJEREMwNEU1RkREQkU2RjcxQUIwQkY0QjY1MjY5ODMyOTcKLToxMDY5QTAwMENGMDFFMzQyOTlFNUU4ODJDM0EwREM2NkZGQTU2MzE2NDgKLToxMDY5QjAwMENDNUY2MjgzRjczMDRFODE5RDA1REQzMEVFREVBRDc3MzIKLToxMDY5QzAwMEVBQjBEQ0RBQ0M1ODM2Q0VBM0Y4N0FEREQ0NEY2NThGNDYKLToxMDY5RDAwMEUxQjI5ODM2QTkyQzhCQjEyMkZDMjdDQ0EzQjJCNTFGMEIKLToxMDY5RTAwMEVCRDMxOEFCNjkzQzZFODlEOEUwN0RBNDZFMTIxQkNENDkKLToxMDY5RjAwMDU4OTVCRDk4RjZBOUJFNzNGRDA3NThERUIyRTQ5OEMzNUEKLToxMDZBMDAwMDA3RjNCREJBNzVFNTZGMjZDMDc4ODYyMEFDMEI4NjI4RTMKLToxMDZBMTAwMEZEQTJGNUVEMDkzMDVGNzRBQjkxNkQ2MzMxMzgxNDJFMzIKLToxMDZBMjAwMDU1OEY0NUNDMzQyMUZCMTJGRUNCNUY5QzU4MzYzMjI4NjMKLToxMDZBMzAwMDk3OEE3MjMxQUUyM0FFMUVDQTk3OEJGOTE5OUJDRUMyQ0MKLToxMDZBNDAwMDU5NTgyRkQ2RUJENDE4ODM3NTMyQkJDREY5REVBNThDRkYKLToxMDZBNTAwMDVENjM1N0Q4OTc4MzYzRTVCMUEyQkNEREQwNTE2RDg1RTYKLToxMDZBNjAwMDc1NkVGRjkzRTI2OTgxRUE3RDVCRTcxNEUxRkVDRUJFQkQKLToxMDZBNzAwMEUwMkJCMkMzM0U5Njk4RDM0NkIzNDFFNzlGOUZDMUVFNDkKLToxMDZBODAwMDE2RTcxN0IwRTg1Q0Y4MEM1Qjk4MkJENjdFQzRBM0NENTQKLToxMDZBOTAwMDI2MUY4Q0QzQjY4Qzc5OEUwRjYzQ0MxQ0RDNkZCRDE0OTMKLToxMDZBQTAwMENGRjFBMEMxMDM0NUI2NDI2MUQzNDM1MEFGREE5ODE2ODcKLToxMDZBQjAwMDgyNzkyRTE3Rjg5MkZDNUNCMUNDRkRBQkExODZEOEJDRDQKLToxMDZBQzAwMDJCQkU5ODNBMURDRjM3OUE2QUQ1QjYyOUU3QUY0QkY2NTkKLToxMDZBRDAwMDUzRURFRTAwOUVBRjIxOUY3OTUyNjAzRTgzQjMzN0Q3Q0UKLToxMDZBRTAwMDBFRkQyRTdEREVFOEIxMDFDODI2RkM2MkU0QTAwOENDRDQKLToxMDZBRjAwMDdCRTk0QkI3MzA3NzJBODcxN0FFNTc1RDYyRjQxQ0NGMUUKLToxMDZCMDAwMDYwQ0NCNEM0RTk1MTJGQzc3NjM2QzJDNzRGNkNDNkEwNUIKLToxMDZCMTAwMDA5RTFCRkU0RUUwRUFDNkZERDVBRTE3MkM3RTFGNUNBRTAKLToxMDZCMjAwMDY1NzY4RjBBRUJEQ0JDQ0NFQzUxNjE4MzJCQzVGRTkyMDEKLToxMDZCMzAwMEQ3NTdFMEQwNzk4M0QwQ0ZBODYzM0VBQzVGMDRFNzgwMUQKLToxMDZCNDAwMDcwNUM2NDRGQTFFNzQyNTFFRTUyMDM1MzcwRkQ1RDgwQ0IKLToxMDZCNTAwMDNGMkQ4OEFGOEIzOUZFMkVDQTMxMDcxMUNGMTdCRDNBQjIKLToxMDZCNjAwMDI0OUJGNTQzNTdGMkY5RjgzMjk3NjcyOEFDNjNGM0UyQjgKLToxMDZCNzAwMDk5MkUwNjVEQUIxNkVFQjc1QzA3RkI1Rjk0NkFCNjIzRjEKLToxMDZCODAwMDNFRUFEMzRBMUVCQTFBRjFGRDM1MDM0M0JBNkE0REFENDcKLToxMDZCOTAwMDcwQ0Y4QTFCNEY5RjU2RTk0Mjc4RTg3NTgxNUM2NjY3MjMKLToxMDZCQTAwMDZDOTU3RDQ2QUQ5QTgzRjgxMkQ4QzQzQzhDRERENzcxQzQKLToxMDZCQjAwMDJEMkZBNzA2NzIxNUE4N0ZBOEUzN0E1RUNFMEM2QzUyMjMKLToxMDZCQzAwMEEwRkVFMThFMUI3OUI5MjA5MEFCODNGMkNGM0EyNkYzNzkKLToxMDZCRDAwMEYyQjBDMDI2MkNGRkEyRTNEQkJDM0MwQUQ2OTBDQkQ4OTcKLToxMDZCRTAwMEYzMURCN0Q0MDY2MEZFNTY4MzY3QkEwN0U2N0QwNkQ2NjYKLToxMDZCRjAwMDNGMTJENjFGMTJDRjE3RUNGQzVDNjVGRDJGRjEzREMwOTQKLToxMDZDMDAwMDdCODc3ODI2RDczRjI3RkFFRDFDQTA3RTk3QThFRjE5M0YKLToxMDZDMTAwMDYwRkMzREEyNUY3ODgwRkVGQjQ0QkZGRDAzRjQzRjIwOTMKLToxMDZDMjAwMEZBMUQxQ0EwRkUzNTUxRkZGQTAwRTNGRjVBRjRFQjFEREMKLToxMDZDMzAwMEEwRkY2RjQ0QkZCNzA2RThGRjNCRDFFRkYwMDBGNTZGNTAKLToxMDZDNDAwMDhCRkE3NzkyQzYzRjIyREE0N0M0RkJGQ0Q0RjZCNzAzMkYKLToxMDZDNTAwMDgwNzdGOUMwQjdGMEFGMzRCNTNEMURGMTZFNzM3MzM5NkQKLToxMDZDNjAwMEUxN0ZFQjU4QzBGMzkxMzE3Q0NGNTc5ODE3Q0JBMzFEMzAKLToxMDZDNzAwMDJBOEQzNzFBRjkzMTNDREYxNEUzNTcyRDFDN0ExRkUyQjUKLToxMDZDODAwMEREQTIzN0Y0MUVDNEMzNTZDNTczRDgwN0UzMDcxNkVBNUUKLToxMDZDOTAwMDNDQzg3NzE3QkRBQUU3NzhCRTUwMERCMjM4RkE3RTMzRUMKLToxMDZDQTAwMDY5RkQ1QkM0RkFEQUM0N0E3RjY1MUY0Qzc0NTNCNEM0QkYKLToxMDZDQjAwMEU1OTkyNEY5MjVEMkJEM0RCMTZDMDY3QUQyNjBGRTM2NDUKLToxMDZDQzAwMDI3OTcyRkE1MEJBQkNEQzM1MTdFODA3QzQxQkVCOUMyQTcKLToxMDZDRDAwMDY2MEM5QjYwRkUxNTc2OTVFQURCOUNENTc2QUMwRkQ4RUEKLToxMDZDRTAwMDU1OTIzRjJCOUNENUU2NTlDODU3NkRDMEVDMkE2MDNFQTMKLToxMDZDRjAwMDNCMUZCQkNEQUVENjA2OTE3RjM4NkFBODdFQzIyRjI2MzkKLToxMDZEMDAwMEQ5OTE4RkI2QjFBOEEzMEFGN0I3MTRFNDBBRjRERkRCNzAKLToxMDZEMTAwMDVDNERFRjhCMUM5RjM5OTAzRjFGNEFFN0ZCREE5RjdBNEYKLToxMDZEMjAwMEMwNTIwQ0VERDQzQjc0MjQyRjRBRUMyQUM5QjFDMTRCOUMKLToxMDZEMzAwMDc1NDEzNzM0RDk2RjVGQTRDM0YyMjM2RDVDNUVDMTVGQzgKLToxMDZENDAwMDZBMTlDQzNGOTQ0RkNGQjZERjU5RjE1QTI5Q0FCMzdCQTkKLToxMDZENTAwMDU0OEZEQkNEREZBOTcxRjI2MDI4Q0FBQjM0OUMzNzNEN0MKLToxMDZENjAwMDQxNUU3NTk1MzMwREM3MERCOENDQzFDNzYwRENBMTJBNTMKLToxMDZENzAwMDczNjVBNEM3RTA1RUU0RDA3M0Y5QTI5RkU0NDFCOTM2MUQKLToxMDZEODAwMEE0MjM1MTNFMTVCN0M3QzkyNzg2RjIzMjUxM0UyNUNCMDEKLToxMDZEOTAwMEFCODI2NkUwOEY3MUZENEQyRTdCNDJEOUUyNDgyNUY5MkEKLToxMDZEQTAwMDA0M0NDNkYzMjU0Q0JEQTg3QkQxNzU1NjE2RTNEN0M5NjQKLToxMDZEQjAwMEYyQTg1NUM4MDdDOTc3NUJCRkI4M0M0MTNFNDhCRTlDQTYKLToxMDZEQzAwMDJDMUYyRUNDNUZERkJDN0UzOEUxMjE3MDJCRjc4NUY5QkMKLToxMDZERDAwMEVDOUI4ODA3ODA3RjA2OUY0MkYyODNBOTNFOTczN0Y1OTgKLToxMDZERTAwMEMyRjAzMjE4QkM3NkJCRURDMjcwMzM2NEJFNDU3QTg1MDIKLToxMDZERjAwMEMxQTdEMkY4RTdDOTk1MEJDMDU1QjYzMzlBMUZFOTNBMzcKLToxMDZFMDAwMDBFNzJFREIzNzc3RTU4Q0E4MDY0NTYwMjZDRThGQzMzOEMKLToxMDZFMTAwMDc1QzFDNzYwREZGOTRCOUVFQ0MyRjFGMzBFNThEQjEwNzEKLToxMDZFMjAwMENFNDZEN0FDQUUzNkRDNEZDNzQzOEMwMTNFRTlDRDFDMTUKLToxMDZFMzAwMDlGOEMzOUQ1NzZFQ0FGRUEzNDU3RkExMDI4M0ZGMUJCNzYKLToxMDZFNDAwMDVCMTVDMDI3N0Q0NkIzODdDMUI5MUQ3Q0U2QjVGNDFCMzEKLToxMDZFNTAwMDEwN0U2RjE4ODhDRTREM0FBRjlEMERBMUU1MTBCRUFERTYKLToxMDZFNjAwMDJBQjA2RTVENDM3OEVDMzMyMzlDRjJCNzlCNDkwRUIwOTkKLToxMDZFNzAwMEMwQTNBQjM1NDBFQTU2MzgwRTM2MEVFQkE3QUZENjYwNEUKLToxMDZFODAwMERGREI5NUJFRjJGNTU4MEUwNThEQkMzREIwNjhGQ0JGNEEKLToxMDZFOTAwMDZFOUQyMkVBOTlBNkJBNDhFRjE0RjVCRkFDQURCOTFBQjcKLToxMDZFQTAwMERBQUJGNjRCNTU5MDNCOEJENjNEREI2RTI4QzA3QTlEMTYKLToxMDZFQjAwMEVDQUZCMTRBRDgyRkNFMjdDQTJBOUNDRjkzRkI0NTdEOTEKLToxMDZFQzAwMEUwQTVGNjFBMjBBMjZFQTM5QzlGMDVCMDdEQjc0RUM3MjEKLToxMDZFRDAwMENCODE5RTc2MUNGRkU5NkFEMTNGRjBGODZBMkQ5RkQ2RTAKLToxMDZFRTAwMDczODNERTAxNDVDNzJCRURCNjJCNjNFQjVEOTdGRTQ2NDIKLToxMDZFRjAwMDdCMEJFQ0VGMjM3NzI0MERCNkMxMUFCNzFFQ0Y0MkY5RjYKLToxMDZGMDAwMEJDNkE3QUIzMTdFMTg2ODhFRjA1OTkzODQ4RUYyNjNDQ0EKLToxMDZGMTAwMEVEM0JCNzFEOTMwMzc5NTA3QkU2QzBERkQyNDY0Mjk1MjcKLToxMDZGMjAwMDVGMUYzOTkwMDJGMDZCRENEOTZDMzY0MDdGOTNDMTFCMzgKLToxMDZGMzAwMEM4MkI4RUY1NkJEQzUxNDdGQThDQkZBNzhDOUVGREY0RjUKLToxMDZGNDAwMDNCQTgwRUZFQTdGQTk5OEQxNzMxREY0N0UxREYzNDNERUMKLToxMDZGNTAwMDA1NTU4REZBRTY3NjlCOUVEQTMzN0VGRUZERUY0RkY2MDEKLToxMDZGNjAwMEZGRThBOURGREM4Q0YzOUQ3NjQ3QjIyNjQyRUI1NTYxNDIKLToxMDZGNzAwMDgwNEIzRkZENjRGQkE2OUQ5M0U5NzkzODQ1QkJDRjAxNkIKLToxMDZGODAwMEVGRTcwMkVGMjI3RUE1MzY3QkIwN0RDOERDNjFGNzAwMUIKLToxMDZGOTAwMEEwMkQ4NjBFMkZDQTBEMDA3RDUwNTcxOTdCREVFRjE4RUQKLToxMDZGQTAwMDRBRUQ5M0RGMjdEMzU3QzhDQzMyMjYyMTFGNkY1MDQ5QjMKLToxMDZGQjAwMDRFODVDQzgxOTREMTUwNUUwQjc2NDgwQjJDNjk3OUQ5RTMKLToxMDZGQzAwMEVGQzY4Q0M0RjJCMzM2ODY3NjQ5NkJDMzdFRDc0OEE0MkQKLToxMDZGRDAwMDJCOEY5MUExQkVCQkY2Q0E1MDBFRDI3OTVCQTM3MUZBN0EKLToxMDZGRTAwMEEzODhCRkUxNDVBRUQ5NzFGQUQ2QkE3NDAzQUQ2M0Y1OTMKLToxMDZGRjAwMENCNDA3Nzk3QzFEMzEwNzIyOEQ4N0YxOEM4MEQwNUY5RjgKLToxMDcwMDAwMEEyQ0Y4Qzc2OEUyNTI3OUQwNThBQjE5RDZEMkREMkU3NjYKLToxMDcwMTAwMDZBODNBRkI2MUFEQkU1RTg0OEJFNTg4NjREQUJBRDg2NEQKLToxMDcwMjAwMDc1QjgzMjc1OEE5RUQ2NTE3Mzc4MEVDQTM3QkIxMTI1NTIKLToxMDcwMzAwMDI4M0I5MjNFNzMyN0MyRTk0OUQ1RDM4Qzc0RjhBNENEN0UKLToxMDcwNDAwMDY2MEY0MDA1RjA0ODBERjk5RjNBQ0MxOUM0QjI0OUNGRkMKLToxMDcwNTAwMDlBNTE4RUU3OTU4MTNDOEZEMzYzOEYwOEZFNzlDNDYxODYKLToxMDcwNjAwMDI0N0VCN0Q2MTI5QTVDMDVFMzU4MTdFOUVDMDE5ODZGQjUKLToxMDcwNzAwMDc1RTNGQURFMDkzMENGNEYxQjlGM0JENDAyRUZENzY0OTQKLToxMDcwODAwMEE5MENENzYxNzNBQTYxMjNDODFGQzM4REIwNDY1OEY3RjYKLToxMDcwOTAwMEQzMkQ1RTNCRjJENzY4QTZDQUI2NDFCRDc1QTg5MUI5OUIKLToxMDcwQTAwMEUzRjg5NTZEMjQ5NEUzRjg2NDg2NTNENTJDRDBGRkVGNzQKLToxMDcwQjAwMEU5QkU3Rjc3QzBCQzk3QkZGMTk2MTlGQkJCQzZFQTc0RTcKLToxMDcwQzAwMDQ4MzYyMTk1OUY3MzVBNzlFMjM4RjZBQjEzQzc0OUFGMUEKLToxMDcwRDAwMDQ5QUM3NzRFNEFBQ0NGOUE5NjU4RUZGQTVFNjIzOUY3RDAKLToxMDcwRTAwMEY2QzRGMjc0ODk2RkMwNzM2QzIwOEZBREJDOEE1OTIzQ0IKLToxMDcwRjAwMDFGMkY0Mzc5MEJGMEY5MDNDMkRGNUFBMkYzMjA3QzJDMzcKLToxMDcxMDAwMDhEOEY5RTk4MDNGNTc5Qzg0RkQwMUUxQUNENDhFRUVFQUMKLToxMDcxMTAwMDJCRkMxNzM3RUEwNUE2RjQ2NkI3NjNFNEY5RjBDODJCMzEKLToxMDcxMjAwMDMwREY4MEU3NjUxQkFBREExOUI0QjdCREYzQzExNzM4QTEKLToxMDcxMzAwMEJFOERDNUI1MkI0NkY4Njg1MTQ3MjYyRkJCNjAzREE5Q0IKLToxMDcxNDAwMEY4MEYzN0MyQkJGOUNGM0Y0NkI5Nzg0OEVGNDE3OEU3MkYKLToxMDcxNTAwMDM1QUEzNEZGM0REM0RDNDEzREQ3Mjc1Q0E4Q0ZBNDg5QjUKLToxMDcxNjAwMEY2NjlFNkI1QkQ3QUUwRTc2OUVGQUM1RTg4NzY2RjMyMjYKLToxMDcxNzAwMDVDQjM1OEIzODI3NDA5RjhDMUVERUQzQTQ2RjI2Mzk1RjkKLToxMDcxODAwMDhFRDUyM0RFQTA4RDgwRTM5MTdBMDRGQzYyNkE4NjkxMUQKLToxMDcxOTAwMEUwNjQ0QTU3ODREREE4RUFCMDNFNEJFODRGQzY5Q0RCNkEKLToxMDcxQTAwMDJENDhDNzJCMEU3MEZDNUY2MUU0RTNGNDhERTdBNjQ5MjAKLToxMDcxQjAwMDExRTUxOUYyQzk4Qzc0NURDMjM4RUJFREEyOEQyODY3MTgKLToxMDcxQzAwMDNBNzhCOTdCN0ZGQTBENDg5N0VCQTdBNThGNDEzQzMxMDAKLToxMDcxRDAwMEExREQwNUUzMERDQTM3NkIyMzYwN0Y5NjU3OEQwMTA1NEUKLToxMDcxRTAwMDA2MURBNEIyRkQwNjM4Q0I2RTJCQkJDRDBCRUJEODc4QjkKLToxMDcxRjAwMEQwMUFEMEMzN0JDQkVDRkJFREE4QTc5NThCNzU3NzJGNkUKLToxMDcyMDAwMEY3QkM4OTdDMjA1QUE3MTIxQzJEOTkxREY2MzEyM0Y5NTEKLToxMDcyMTAwMDFFMDJCMDNFNDQwNzk0OEI1NUMzM0E0OUNGQjM1NDc1MTAKLToxMDcyMjAwMDkwN0NCNzk0NzU3NDIwOUMzNjRFRDI5MUJFOTE3RUJCRjMKLToxMDcyMzAwMDhFRjBEOTUyMTAzQTM0MTRGRDA0QjM3NTc2MUMyRjFEMEMKLToxMDcyNDAwMDA0QkYxMTA2NzkyMEJGQzM4QjdFMTMwNjMwRDc1NTcwNUIKLToxMDcyNTAwMDU0QzE3MTY5ODczMDRGODY4MEFCRDNCOUUzODcwQThDRkMKLToxMDcyNjAwMDkzODFFMzhERTZFRDExNEUwRTAxQTdBQkQzREQwNDc3REMKLToxMDcyNzAwMEE3MTgzNzYzMjhCNDFGQ0RDNzY5QUI4ODhEMjNDRjcxOUEKLToxMDcyODAwMDYzMkQwQkUyRkFFNEJDNzI5Q0JFRjE5OUE2MjA1RjM1MzcKLToxMDcyOTAwMEZDMEFFMDA2RTdBNDE0OUE2OTcxMkJFNjMzQjI4RkJCQUYKLToxMDcyQTAwMDk3N0I5QkI3MTI1RERCQzhDRjkxRUJDQ0FGNDYzQ0NBNTYKLToxMDcyQjAwMDNEQjg2OThBNkUzNEY2QjNEMjNDODZEOTJDODg3ODlDNjYKLToxMDcyQzAwMEFCMzJGMzM3RDM1MUJGRjExMjFDOTNFOTM1Njc3RkM3NTcKLToxMDcyRDAwMDU0RDQ1M0U1QjkyNEQzNkY4RUNBREFGNUU5RTdEMzcxRjQKLToxMDcyRTAwMDhFRDM1OTVEMzJCQTFGN0E0RUEyOTc5QzgzRDEzQjEwNDAKLToxMDcyRjAwMEU5OTNFOTdBNEJDQUU5MzI4NDBCOEI2RkFGQkY3MDU5QkYKLToxMDczMDAwMEFGMEYxRDQyM0YwRkNCMDYzOTAxQTAyRjRDOUE4RkIxMTIKLToxMDczMTAwMEZGMzI2MTU5NjEzQUY3OTc0MzkwRUYzQjg0RkYwNkU0RUYKLToxMDczMjAwMDE1MTA2QkY3MThGQjc4MUJEMkU5NDI0NkY4NTVGREZDQTcKLToxMDczMzAwMERBNUI3RjA1RTM5RDFENjZCNEEzNUMyOTM4RDhEMThCNDkKLToxMDczNDAwMEYyOTFFREY0MERDNzczRDhBQ0ZBMUU0RTgxRkFDRDg3RDkKLToxMDczNTAwMEIzMTlGMkVERDUxNjZFOEZBOTAyQ0Y5M0U1Q0IzQTQxNjIKLToxMDczNjAwMDM3NkU5NDczQUU3RkZFMjlGNUMzRDBEMEFDNEJFRDQwQTEKLToxMDczNzAwMDdCRUJFRUFGN0RENTlDRjlCRkE4NjdCMUE3NDlDRkNBMUIKLToxMDczODAwMERGREZEQjYyQzNGOUQ3MUQ2QzM3MDM3QzJENkZGMEY2QUUKLToxMDczOTAwMDFENTAwRUE4MDhCRjA2RjI2N0VEMkI5ODQzNzA1MkRGMTAKLToxMDczQTAwMDM2MzFDNEQzNTE3QTJEODg2NUY2NDcwQjQzRkVCQkZEQjkKLToxMDczQjAwMEQ5RUZENUJCOTFGRjY0NEQ3NDIzMUZEQTI2RTgzRDI4MzEKLToxMDczQzAwMEVDQjNFNEZEQUI0NkNEODdGQTQ0RjJGQjRERTkzQTcxRUMKLToxMDczRDAwMDlFREUxMzc1NzA4RUEzMUUzMUIyMzU1MDU5QUE5QkQ5MEIKLToxMDczRTAwMDhFRjY1RDc0MzVGMDVGQTg5REE5NzczN0REMUQ2N0RGRTgKLToxMDczRjAwMERFNkJBRDBBQTVBMzVEQjJDQ0NDN0NBMDMwRTc5RjUzNzkKLToxMDc0MDAwMDk4MEY4OEIzQzBGOTlCMkFFNDNGODUyQ0FDQTA5QzJEMzMKLToxMDc0MTAwMDZDMDY4NTE3RjE2QUIxOTVGOUUyRjAzREZGOUM0QUVERTMKLToxMDc0MjAwMEVGQjU2QUExRjRCMUZDQkQxOUY4ODA4MUZGOTMzRDk5RDUKLToxMDc0MzAwMEVFNjU3NTRFQ0VBMzUwN0YzMTNDNjUzRDhBN0M4MzM5MjUKLToxMDc0NDAwMDZCQjQzRTdCNjQzMEUyMkZDODdEOTg2RkI3RDhCNzAxMkMKLToxMDc0NTAwMDYwNjgxODAzRkZEOTc0NjFEM0U4RjNEQkVGMTM3MDUyNEYKLToxMDc0NjAwMENEQjYzMEYyNEJENUY2RkE2MUUyMkY3NkY1NTQ3QzNCN0YKLToxMDc0NzAwMEI0QkI4OTg5MzUzMEYyQ0IyMjVDQThGQzAzM0I5NUYzODEKLToxMDc0ODAwMDgwRkY5QUM2OTBERTFGNDBGQjNCOTBDNkVEMTFBNjY5QjcKLToxMDc0OTAwMDZFNjcxNkQyMEIyMzIwRTc5QjU5QkIxOURBMTFCNjAzOEUKLToxMDc0QTAwMEJERTVCMDVFMEJFOUNERkI5OTFCRTkwMTNENkNFRkE1OTUKLToxMDc0QjAwMDEwQ0I2MjA4RDdDRDhDRDVDNkQzODE3QzRBQkY4NEJBQTUKLToxMDc0QzAwMDQ0NEZGNkQ0QTUyRjU5NjgzRDg2NjYxNkI0QTAzRTg0NzUKLToxMDc0RDAwMDZCMDM3OEFCOEI1OTUwMkQ4RUY5MDU0NzNCRENENENGMkQKLToxMDc0RTAwMEM4OUE0OTlGN0RGQThCMjNCOUM4QTdBRDA3NDAxRkJCMzcKLToxMDc0RjAwMDBDQ0Y1OTQ3N0NDQTZBNERBNDNGQzY1QTA4NEU1MTgxRTkKLToxMDc1MDAwMDFGNURDQkVDNzRDRTdERjY5QkVGMkQ3MUNFOTExNjk0NjIKLToxMDc1MTAwMDE3ODU4QkQzMTNDRTU3QjZDQjNGOTdDNzdDOTdDNzhGQjIKLToxMDc1MjAwMDFCQTQ3MUYzODdFRTU3RDAyRjkzN0ZBRTkwRUFCQjk2RTIKLToxMDc1MzAwMEI5MkYzMEZFRTAwMUM2Q0YyMTNDMUE3OEZDN0NBQUVGQkYKLToxMDc1NDAwMDBBQkZFNUI4MDk0MEIxMzlCQURGRTE3NUM3RjRFQjY0QTkKLToxMDc1NTAwMDM4RTcyRjRFRTRDQjk3RUQ0QzJDNEJCODU4MEM5QTczNzAKLToxMDc1NjAwMDMyQzBEQzcyODdDRUIzMTVDNkJCRTI3MDYyQkJEQUUyMTIKLToxMDc1NzAwMERGOTJGRDFCNkIxRjc2NEVDNUY2NjA5RjZGODVCNzU3NzgKLToxMDc1ODAwMDlENDg2Q0VGQUQ3QUQ5ODE3NDFDNkJDRkQ3NzdDREI5OUMKLToxMDc1OTAwMEM0NzZDOUU3OTNCQzVFNTg1N0U2QjdFM0Q2MzVERTZDRDAKLToxMDc1QTAwMDRBQTg5RjVFNzdERUJBMzJCRjEzQjdBRUVCNUM4OUVEQjcKLToxMDc1QjAwMDdEMkRGREFGRUI4NjUyRDMzRjVDOTc2Q0Y3QURDQThCNDgKLToxMDc1QzAwMDZCOTdCQzhGQTlCNUE2MDFFMENFREI3RjY3RkFDNThEQUUKLToxMDc1RDAwMEZCRERGQTdGRENFRUI2MjVDOUYzMDQwOERGMTdFOUI0NUEKLToxMDc1RTAwMEYxMTk1MDNGMTM1RkExQkU2OEIzOTJERTdCOUU5RDI1Q0IKLToxMDc1RjAwMEU0RDM0NDU0M0NBMDlGMjc0RDlCODhGRDZBMjVERDA5QjgKLToxMDc2MDAwMDNGQzNDMTY3MkVDOTQ2QkU5RTI3RkNFODRDRjgxNUJBOTkKLToxMDc2MTAwMDFCNUNFNDU3RjA4OUY2MjA0RkRBOTA1Rjc0NkY4NzdFMjkKLToxMDc2MjAwMDY5N0M1REYxRkE1MzQ2MDNCNzJCRUMyQzRBRjQyQ0Y1MzgKLToxMDc2MzAwMEE1NzQ2NjU3QjgzRENFRjU5RDgxRTY0OTFFRkYxRTU0RTAKLToxMDc2NDAwMDAwNjFCREIzOTY4QzY3RUYwMjFEM0U2N0I0NTdBOTY4MTEKLToxMDc2NTAwMDlGNkQ1MTQ4MUY5ODU1QTNFOTUzMDEzRkM2QjUyQkU0RDAKLToxMDc2NjAwMDU3OUE3NUQ3OUIwRkEwM0ZFNkNBRTNFRTlEMTE3ODNGNkUKLToxMDc2NzAwMDJCRThGMEUwQjQ0REJENENDMzM4NDFCNjdFNjFEOThGRTQKLToxMDc2ODAwMEUxRjlFMDNFNDY3MTM0MkMyRjQ0N0NCMzY5NkVCNDM3ODcKLToxMDc2OTAwMEVBNzA0NTMwQ0UyOTQzNzM5OTFERjlFNkY3NkQxQUYyNjkKLToxMDc2QTAwMENEQkE2OURBMUY2OEJGN0YwN0FEMDREQUNERTY1QjY3NDQKLToxMDc2QjAwMENGNzc0RTM2NjJCQ0EzRUU3QkVFNEFENDdCRUE0MjE2MEQKLToxMDc2QzAwMDhEOUU2NkE2NUE2MTFGNzVBMDhGRTEzM0RCQzg1NDBCRUYKLToxMDc2RDAwMDNFQURDQzhDQ0Y4QUU1NUNGRjRBQUJGNDFBRUI2MEZFODIKLToxMDc2RTAwMEJBOUU5RjdEOEVGREU2QUFFMUJENUM5RjBDRDJCRUVCRUIKLToxMDc2RjAwMDdBNUVGRDBGRDRENzY2NkI1RTIzRjI4QjRCQjcxQkI5NTYKLToxMDc3MDAwMDRFMkFGMDYxNTQyOEIxOENGQzIwQkU1QzE2NEUyQzVGRDIKLToxMDc3MTAwMDdFMzBCMUZDNzEwNjg3RUYzOEUxQzdEQUI3REI0NDdDMTUKLToxMDc3MjAwMDdCQzE4NzU2RDIzRjc3ODFDMDQzM0IzOUYwQjQ4OUU0QUYKLToxMDc3MzAwMEM3RjgwNTM2M0FBRjBGNEY1QUI3QTI1RjZGRUZEQjU2NjcKLToxMDc3NDAwMDZBM0ZGRjQ5MEI2RkFGMEIzRDgzRTVDMDMzMjk2NDY3ODgKLToxMDc3NTAwMDJGQzgwODU1QTRDM0JBNUZGQzQyNEZGMEM2NkQxOTcwMUMKLToxMDc3NjAwMEZDNjc0NjZDNUQ4M0Y1OTc4NzJBMzAyRUY2REMyNThDMDYKLToxMDc3NzAwMEY1NjJCRDFBMUM4REZCN0NFRUJGQjhERjNBRkE4NDI5OTYKLToxMDc3ODAwMEI4MERDNkZERjA4NTlGM0RGMzIzOUNGNzg5QkM3NDA1QjkKLToxMDc3OTAwMENFRTcyQTk0MEJEMDZFREMyMzY2MkJEQTFCRTMzRTdDMEIKLToxMDc3QTAwMDZBMDhGMjhEMDVEQjREMDlGQjdCMjY0MzExRkE4MzNCMEEKLToxMDc3QjAwMDBERjE2RTIwQkZFM0IxRDUzRkEzRkVBNTI3MEUxM0RFNkEKLToxMDc3QzAwMEVEMzIwNDc0MThDNzBCQUNFNjc4QjZDQkMyRkRBNEJCOEYKLToxMDc3RDAwMDJDODU0MTNDQTdERDE5OUNBRUFFRDI2REZCNjkxM0VBNDYKLToxMDc3RTAwMDk3NkY3MDNENjRBMEYxNEI1REIzQkE2QUZBRjEzM0Y2NUUKLToxMDc3RjAwMEQ1QzNCQ0M1NzBDRTY3M0VCMERFODZGRUI4RTExQjEyQjUKLToxMDc4MDAwMENGNjk0NDMwQjFGQzcyMDZENzEzNjZCMkI4RjdDNUI4NzkKLToxMDc4MTAwMDlFQzEyQjVEQjg5RUFEOENENjUzN0FFMjlENUI4QjUxOTkKLToxMDc4MjAwMDFGMzc3MTNEMjQ3OURFNUY2NzcwRjlGOUYzOUZDMzM4MjQKLToxMDc4MzAwMDlDQ0ZFOEI5MUUwRTEwMDNCQTVFMjBFOEUxNDU4NUVCNDcKLToxMDc4NDAwMEMxRjBCNzM4MEZGMDdGMDEyQTEwODM2M0VGMTcyNEFEMjIKLToxMDc4NTAwMDQzOEVERjIyRTBGNEE5Mzk2RDFCQ0E3M0E3OTFFM0ZEQzMKLToxMDc4NjAwMEM5NjUwNzFGQzAzOEE2NkNGN0RFMzI0REFCODlGMzJCMTQKLToxMDc4NzAwMENGRDlCMEYwNDAwRTlDN0Y0Mzc3MjZEOTk5RjI3REMzRDMKLToxMDc4ODAwMDEzMkY2NTdEMTdERTlGREFBRTdBNTBGNTZEQjhFNUYxRkUKLToxMDc4OTAwMDdCQzc2MUJCMjdGNDIxNUMyN0Q2NkIzMEZFQTlEMENCMTgKLToxMDc4QTAwMDY5RDg2RUNFNjZDNzE4RjQ5N0M4RkU3MzM3NUNBQkQ1M0YKLToxMDc4QjAwMEM0RjFEM0FGNEE0RjkyRkUxQjg0N0RGQzdDNjVFRjg0RkMKLToxMDc4QzAwMDNDODBGNzgyMEQ4QTA3OUIyRDA4N0Q3QkVBOERBOEVCMTMKLToxMDc4RDAwMDZDRDY3QjMwQkU1MUExMzJBRjdFMEM5OUVFRDNGMEQ5N0QKLToxMDc4RTAwMEQwRkRFQzgxNUNBOEY3RUYxRTVCODFGQjVBQTNGM0RFQjEKLToxMDc4RjAwMDMwMEFFOTY1OEI4MUZDNjBDOUU3NjM3NDcyRkM4NUZFMjAKLToxMDc5MDAwMDYxMURGNDVGNzNCM0FEMUVFMzIyMzBFRTdFMkNFRjJCQ0UKLToxMDc5MTAwMEREQTY0NzNGN0VEQTA5RTA2RkZDRkQ2MTFERjBDQzEzNjgKLToxMDc5MjAwMDNEMkI0NjgzQ0QwMjc4NkM2QjQ3RkFEODg1OEUwQjlDMzUKLToxMDc5MzAwMEU3NjkzREM5MDkxNkU2RkIxODI3RkNDRjBCRkVENDY5QTEKLToxMDc5NDAwMDU0RTE3OUUyQzRGMkI0MkE0RTdGNzQ0RUM4RDQ5REIwOUIKLToxMDc5NTAwMEJGRkE0NzQ2MTFCRENFREQ5MDQ4NUZCMjlENUNFRkJDREIKLToxMDc5NjAwMDYwNjI3RDMyNUU5NDM4QTVCRjgyOTVDNkUzNTc3MkJCRDQKLToxMDc5NzAwMDhDNDkwMTIzRDI2M0MzMTJFMEU3NzE3NEQzNzBCQ0MzOTYKLToxMDc5ODAwMDg4N0E1N0YyM0NBODQxMzI3OUFFN0FDMjRCRTZBNkZEMUUKLToxMDc5OTAwMDVBRjg3RTQxRTUzNUMzN0U0RkUyQkZCOERGNUM0MUJCOUMKLToxMDc5QTAwMDdFQkU0MjVCNjQwQjJFNjEzNTZFODBFNzgyMjlBQzE2ODkKLToxMDc5QjAwMDlGOTIxRjlFQUEwQzhEQzZGNkJCMEM5MUM3N0Y0QTdDNzYKLToxMDc5QzAwMDMwOTVGOEMxMjk3QjM4MERGRDRBQjlDMkFGNzdDQTFEODEKLToxMDc5RDAwMDRFNDMzRTc3NDZDNEVEQjAxRUNCRjM3QjQwMUUwMDVEQTgKLToxMDc5RTAwMDdGRjg5MTkxRTQ0MjRCRThBNTM0M0NBRjUzQ0Y1ODc0RjMKLToxMDc5RjAwMDNBMzg5NzBGQkIzM0FBRDExRjc0MkFGNEFCMzREQ0Q3QzMKLToxMDdBMDAwMEM5NTA0NjM1RkFGNTA2RTIxM0M5RkM0REVBMDM0N0YxQzEKLToxMDdBMTAwMDlGNTc4MkRFRTNENDI2MzgxMUJFMTg2NEM4MDE3OTkzREIKLToxMDdBMjAwMEQxNUNENkRDMEZERENCN0U0RTYzNzMxOUU2Njk0NEJGQjMKLToxMDdBMzAwMDZGRjMyMDlGOURFQTc0RDNGQjNBODU4Rjg3N0YxOERGMTEKLToxMDdBNDAwMEZCRTQ2MEM2MzYzQ0ZGODM3QjRCMDZBMTlFRjAwOTczQzYKLToxMDdBNTAwMDBGNDJCRUJEMjBDQjdCMzNDRUU3QUFFRUE1QjhCRTZCRUUKLToxMDdBNjAwMDIyRjNCNDQyOUY3N0Y1OUUzQkVEMDBCN0RCMTlDODJEOUEKLToxMDdBNzAwMDdDOTZGQjhDRTQ2RjY5Q0JBNDc1Q0Q1MjU5NTgwNTNDQkMKLToxMDdBODAwMDlEODU3Mjc1MzQ5NTQ5OEY5OUI1NTkwOUI2QzIzQTZFN0MKLToxMDdBOTAwMDVGOUJCOENGMzk5REE2RDhGOUMyN0ZGMzE4MzA0NDI0MzQKLToxMDdBQTAwMEEwQ0Q3MUVENjBGQzc5MjgzRjAxN0VGM0NEMkM5QzAyQzYKLToxMDdBQjAwMEUzQ0U3RjM0QjFERjAyMTZBNkY1MzQzQ0Y1QTVBOTNGMkQKLToxMDdBQzAwMDM4N0UyRUUwQjgyMDRCRjMzQkExQUM0QzMxRDNCQTdFQ0MKLToxMDdBRDAwMEYwQjQ0MkYyQ0QyOUZDOENEMTA3MDcwNTMxMUVCNjQwMjcKLToxMDdBRTAwMEM4RUJEOUE2QkRCNDFFRkY1RDc1REFFRDgwMzc2Nzk2ODkKLToxMDdBRjAwMENDRDI2RUNGRTAyOTIzNjQ5NzZENTAwODBGMTdENEIwMTUKLToxMDdCMDAwMDcwMDFBQzZGNDE4RjEyMUU4NUZBQzQ1QkZDOUNFNEI4MTcKLToxMDdCMTAwMDZDMEI2Rjc3QUJEMDc3NjYwMzVDNTA3RjE4Rjc5NDEyQ0QKLToxMDdCMjAwMDQ4MDVGRTM5REIwQ0E2MUNGMjExQjEzRkFDMUYwNEU1ODEKLToxMDdCMzAwMDdBRDY0MUZCNkE2NDExNUFDNzVBM0M0N0VFQ0ZBM0Y1ODcKLToxMDdCNDAwMDdGRkUxNjNGQkY3MUY1NUJGNUI4QTg4MzdCMkIyOEZFM0YKLToxMDdCNTAwMEY3MjlGM0QwMzk4MjVFQzIyQ0U5RTdFMzA5QzI1RDhCRDUKLToxMDdCNjAwMDgzNTNGREU2QzQzMjdCMzRBRTNDMThFMTBBRTUzODc4MzUKLToxMDdCNzAwMDM3RURGOEQyQTRGNTAzRTcwN0ZCRTQ0OTcwQzRFNDUxRkMKLToxMDdCODAwMEVDM0NCREY3ODgzODg3MDdCRjNEMjcwN0Y5QzA3REE4QzMKLToxMDdCOTAwMEJGRTY4QTAxMkE5MTZGMzJFOUQ3MDg5QjYxN0NFQkU1NDkKLToxMDdCQTAwMDJDQzFDRjAxRkExNTk1OUY3MDRFOUJCODIxOUZCMUY1NUUKLToxMDdCQjAwMDA2MUZDNTBCNjZFOUJEMDczMEI0OTU5MkVEN0IxQUYxM0YKLToxMDdCQzAwMDc2OTY0RTJCNTQ4OTFGNjgyNTY0RUYyRUUxRTdGMUQwOUQKLToxMDdCRDAwMDk4RTYxMUNERkREOEI5NzJGREVCOTU1MDU4ODdGQ0UwQzEKLToxMDdCRTAwMDA1QUUxRkE0OTY0NzBEQkUzODNBN0I0NUYwQjk0MUZCNjAKLToxMDdCRjAwMDIyMDdGMjEwNUY5RTU1QzgyRkJGNTE2MTZEMEFDMEQ5OTAKLToxMDdDMDAwMDA1Qzc4MkYyNjBBMzcyRjQwMENBOEY4REQ3QkI1OTJCQ0YKLToxMDdDMTAwMEQ0OTdFRjk4QkNGMDY1QjI5NUFEOTREN0QzQjhBMzRBOEEKLToxMDdDMjAwMERGNjhBM0ZENzM3RDM1QTU3OUFCMEVFQUIzNkYyQjFEMUQKLToxMDdDMzAwMDgzNzQwMkZCQkU2RDBBQkM3RjVERDA2RDhFOERFMzgzQzUKLToxMDdDNDAwMDZCNzlBMDc4MTFGQTY1Rjc3OTE3QkU4Q0Y0M0RDQTRBQjIKLToxMDdDNTAwMEZFQUY2QzgwNTU2QTNBM0REQjUxMEY3NUIxMTYwNURCRkUKLToxMDdDNjAwMEFEQ0M1NDc4REU0MTFEOUJGRUNCOTE4NDM1RUFBMDc0RTcKLToxMDdDNzAwMEZFM0MwQzRGNDU2NTZERThDRkNENTY0MUFGRTVFRkRCREYKLToxMDdDODAwMDcwOUUwN0QzRjhCQTMyNzVGQURCMjZBMzVFM0Q4Njk3NUQKLToxMDdDOTAwMEQzOTcyQURBMzY0MkZFNzVCNEFFNkMxM0FCQzU3REUzREEKLToxMDdDQTAwMDdCRDRDMzYxMTk1QTM3RDUwNzA5NEVEOUUzOUJDQjcwRjIKLToxMDdDQjAwMDFERDk0M0Y4RDM2OTBDRTdFMzM4QUZGN0UxODk0Rjg3NjMKLToxMDdDQzAwMEZDN0FCMTkwQkI4QkI3NTY2NzIzN0Y3REZEOTQ1OTQ1RjUKLToxMDdDRDAwMDNFRkFCQTRCRUE4RjYxMUJFQThGNkM2ODI5NkYyRkU0N0EKLToxMDdDRTAwMERCRTJCMkYxRDk4OEY3Q0VDMkM0NzY2NzBDREFBMENCNUEKLToxMDdDRjAwMDUxNEUxQ0QyNTNCQ0U3MzM5QjM2QzgwMUVEQUUzMkIyQjUKLToxMDdEMDAwMDdFRjNFQ0JFMTBFN0VBM0ZBN0IwNjA5Q0RGQzAzRkZEMEEKLToxMDdEMTAwMDJDRTlFN0ZFNzM2QUMyRkI1M0NCQ0MyQzE4RTczNzY4MUIKLToxMDdEMjAwMEE4REYzNzAxREIzNUIyREU5NTg4OEY4REExMTQxNjhDNjQKLToxMDdEMzAwMEEzOEZBQkFDRkRDRjJCRTlDMjdGNEVDRjAyRkRDRTZCNDQKLToxMDdENDAwMDRDN0M3RjJFODMwNTMyRkE2Qjk3OTVGODFFRjY5MTUwODYKLToxMDdENTAwMERFRjlEN0JFN0RFMDdCNTYxOTQ5NDMzRkVBMjQ5NDg3N0MKLToxMDdENjAwMDUwM0UxM0Q0MDUwQ0MwODc1RTM3NzAzOTc3REExRTQ5NTAKLToxMDdENzAwMDkwODNBN0REMTEyRTA3RDE0RjY0RTM3QUZBNjQzQzY3NDQKLToxMDdEODAwMDM1OUEzNjI1MzUzNjhGQUNDN0ZFRTk3MUZCM0QzREREQjIKLToxMDdEOTAwMEM4QzI3NDNFNTE1QTA3QzIyRjMwOUNCMTREM0QxRjFCQzMKLToxMDdEQTAwMDMxM0ZBNkExNjcyRkMxNEZFMjREM0MxQzAzRjE3MUE3RTMKLToxMDdEQjAwMEQ2REVCMDBFNzg0NjY1RTY0RkQ3OEMxQzAxMjhCODRGNEEKLToxMDdEQzAwMEYyODdBRTM1RThFN0NDRDJFQjEyRjg0NTRBNzkxRkZGQ0YKLToxMDdERDAwMDIwNzZGNTIwNDZDMTg4REY2QzU5ODM3RUQyNTg5OUI3NEEKLToxMDdERTAwMDhGRjU3Rjc4NjIwRDhDNTczRTkyRjdBRkNFMENCRUI2MDIKLToxMDdERjAwMDlDOTI0NDNBMzhGRjU1QTM4NURFRDRCOEIyMzlBOTZDQjkKLToxMDdFMDAwMDgzRjJBOEI4QjIzREE5REU5OTU0RUY0QTJBRTdGM0Y2MDcKLToxMDdFMTAwMEE3NTJDMzg1N0EwRjYzMzc2NjNFM0E1MTA1QkU3OTJBNjkKLToxMDdFMjAwMDI3M0MwM0YzQzZENkI2M0UzRUIxMDZGODU5NjMzOTk3RjAKLToxMDdFMzAwMENGNEQzRDhBODc3QzdGMDI3RTREMUVBRTM3REEzQzExRTYKLToxMDdFNDAwMDIzRTZBQkE1OTRGNzFFNDBGRUQyQjA1M0IxMkI0MDBGRjIKLToxMDdFNTAwMEI2NTA3Nzk4Q0FEOENGMURENzJGQTQ1MEJGODZEMDUxMUYKLToxMDdFNjAwMEVBMzdFMEY4QTUzQUEyRjczNUE1Qzc3OEJCRDBGQkE0NUUKLToxMDdFNzAwMDA3QUM2QTVCNDhGMTc5MTk3RkQ2MzM5Rjk2QTdDNEUyQjUKLToxMDdFODAwMENGOTJDRjlFQ0VEMTVFMjIzRUJCNUJCMTIzN0RGNkUxODkKLToxMDdFOTAwMDI5OEUxQkU3Rjc5MUVERkYzOEFBRTdCN0E4NjZBNDJDNTcKLToxMDdFQTAwMEZFQjgwNUY1RDkzRjM1QkUzRjE2RjVCQjNGMEE3OUIyOUUKLToxMDdFQjAwMDVFMDk4RUMwNzkzNzMxREYwODk0OTdERjZGMUNCNjU3QTMKLToxMDdFQzAwMDA3RUQ4RTE4MjI1RDE4NjM1QjlCRDkzMzExRjNFODhFQTIKLToxMDdFRDAwMEE0NDYwQTMwMEZFRkRFMDcwRjEwM0M4RjY0NDZCQTEwM0QKLToxMDdFRTAwMDlFQzcxRjdDODVENzE3NDQwQTMwRUZFRUZFQ0M0Rjc4MzMKLToxMDdFRjAwMDc5NThBNDBCQ0JCQjFFRkMxMzJGOEY4QTE0RThBMUZGNkIKLToxMDdGMDAwMEUwQzA5MTg5MzVEMEZGMzE3QkZGNzRERDlBQzlGNTdCRTQKLToxMDdGMTAwMEI5QkUyQjg2NkEzRkM5NDQ3QkI1ODFDQkExMkVCMDg5RkYKLToxMDdGMjAwMENDQzAzNzY3Q0MzRkY5RjQ2MzAwODcxOUZGOTI0MkZDNUQKLToxMDdGMzAwMEVDQjE1MzUzMjc3MkZEM0NFMDU1MkJEMDdGQ0JGRjQ4NkIKLToxMDdGNDAwMDRFMTJCRjU3Qzk2RUNFNDFEOTk4MUUzQjhGRDRDMjVFMjgKLToxMDdGNTAwMDM3Qzk5MTRCOUFCQjUxREZDODlFMzE5MkU0NDg4RDUzOEIKLToxMDdGNjAwMEZCMEJDRTJCOUZGN0U3QzExM0RBRkYyNUQzQ0VGOUI3NzIKLToxMDdGNzAwMDVFNDdGMUVDRUMxRkE1OTI3RTc2OUY4NUVGMDdFODg2QzEKLToxMDdGODAwMENFRDcyNkNFNjM4M0Q4Q0Y4NjRDNkU1NzM2M0FBRkE1NzAKLToxMDdGOTAwMDcxNkUxNUZBNzRFN0VBRTAxMzE2ODBGRkRCMzI0RjY2NjQKLToxMDdGQTAwMDFERDdDRkJGQkIxNUY4MEFGMEYxNEU4Nzk2ODNGQ0U0Q0UKLToxMDdGQjAwMEJCMjJFRjRERjIwRjdDOUYxRTY3OTc3NDk2NDFEOTE2MzYKLToxMDdGQzAwMEIzM0YzQjI3NkIzOTU2MjczRUIzNzQxOEI3OTFGQ0E4RDMKLToxMDdGRDAwMEIzOThGNzkzNzIyOUJCOTVDRjlCN0RERjg4NkRCODhGREYKLToxMDdGRTAwMDE0OTVGQjlGNjY0RjJGRDlENjQyN0FDMTE0NUEyRkQzQ0UKLToxMDdGRjAwMEI0MUMwNUM2M0IzRTZGQjAwRUZENTJGMjdDQTYwRkQ1RjkKLToxMDgwMDAwMDdFODlGMEI5NTVGOEY1RTUzOUM5RjNGQzhCRDhGNzJDMjIKLToxMDgwMTAwMDNERTgxNUIwQ0Y3N0IzN0MzNDFFRTgxOUEzODVGRjhCRkMKLToxMDgwMjAwMEY0OENCRkUwMTlDN0MxOTdBOTkxQjFGOEZFRkYyMzM4QkUKLToxMDgwMzAwMEZERkVFQjgwNTNFMzEyRTAxN0JBOEJFMDE3MDI3RUVCRjQKLToxMDgwNDAwMDk1QjAyMTlCRjMwQkIyQTdGMTNEQ0E5RDVGM0E3RDFGMEUKLToxMDgwNTAwMDY2QzZFNUM3Q0NGODUxMjNFOTk1NzI1RDI5M0Y3Q0JFMjEKLToxMDgwNjAwMEY2M0JFQzdDM0E0QkQ2RkIzRUM3RjM4QUQzNEYzREQyNkUKLToxMDgwNzAwMDhGMjlFNjM5RjJCNjk5RTIxNjQ3OEMyMUUyOUI0N0MwNzgKLToxMDgwODAwMDFFNkE0MUZFMjJFMkVFMTVGRkIyRTA3NUI0MDdFNUI4QzQKLToxMDgwOTAwMERGQ0REMjczN0ZCMDNDNzdDNURCM0RBNzE4RjM1MDU4RDYKLToxMDgwQTAwMEMwOENGQjk4NkNBNDczOTc3MkI3RDNDMUYzNEEzQUVGQjQKLToxMDgwQjAwMENBQTNCQzkyMzMyQ0MyQzgxRjVBQzk4ODNGMDIxRTUwQTMKLToxMDgwQzAwMDdERjQ5NjJDQTI3RjY4MUZCMDYwRkI3OTk3NTA3QkMwMkYKLToxMDgwRDAwMDhCMDBGMTg3NUJBQzY0QkY3NDYyOUMxQUVCNkYyOTBENTcKLToxMDgwRTAwMDYyMUUwQ0RBQ0Q4NDZGRjM3NDM0NkYzRkY4QzJGRENEOUQKLToxMDgwRjAwMEMzNzk5RTg1QzQ5QkFDNTZFRUQ3NjFBQTM2N0E3MjlDMzIKLToxMDgxMDAwMDlDQkYyMjhCOUY3MzRBNzlFNEQ5REZBMzVFQkJENjQyMjIKLToxMDgxMTAwMDdBMkRDQTU4OEEwOTc1NjREMzM4NzBGRUVFMkNFRTE3OTIKLToxMDgxMjAwMDIwM0NCQkZEREU1NDkxQ0ZFNkE5NDBCOEFFNEFFNTc4Q0QKLToxMDgxMzAwMEI5RDlDMkUzNTU5QjQxOEYyNkJFMjhGMDU3RTZEM0Y5NDMKLToxMDgxNDAwMDg0QkUxN0E5RDdBNUExQkUzMDNBQUJDRkRGQTBBMUZENTEKLToxMDgxNTAwMDRGRkU3MkE4OUYxOTUxOEVBMkREMzYzM0EwMEY5QkQwMUYKLToxMDgxNjAwMDBFNkJCRjU2OEJDNEQ5MzFGODg3RjFCRURCMDQ1RjY1NTcKLToxMDgxNzAwMDFCMThGOTBGNkZDMzdFNjkzOEJFMzUwREUzOUJCNzYxREQKLToxMDgxODAwMDdGRjRENzJFQkQzNjIxOEVBNzY1NzFGQTk2RUI0QkU2QUMKLToxMDgxOTAwMEZCNUE5NkYwNEI3NjNDQTRDNUNGMjNDNzRGMUUwRkVDN0QKLToxMDgxQTAwMEQxMkE4NDBGQzAzOTNDMDhDRkI3NDU0RkU3OTdCQ0NFRTIKLToxMDgxQjAwMEM4MDZFRUY3OEU2QzI4MjJCQzkzRTMwREI0Q0UzRkVCREQKLToxMDgxQzAwMEEzNzcyODIwMDdFNzhDRTc3NkJBQjQ3RjY2MEIzQjlBNDMKLToxMDgxRDAwMDJENERCNEVGRDBDRkQyNTdENjlGNUY0RUI2MTczMTNFNUMKLToxMDgxRTAwMDlGRDg5RUVCMkQyOTIzQTM0NkEyNUJCNzkyQjA3RTA5QjAKLToxMDgxRjAwMEFGODFFMDMwRjcyQkMyNERDQUJEODcyQzQwMDdFOTY4M0MKLToxMDgyMDAwMDg2MkI4NEJGMUJFRTRBMjEzOUU2MzQwNjQ3MjA1RTJEQkIKLToxMDgyMTAwMENBNzI1M0JCNEQ5ODI3NDM3Mjk1REJDRDlGQkUyRUZEOEUKLToxMDgyMjAwMDFFODlGNkIyREYxQUREODJGMEYyNUIxOUQxRDNFOURERTcKLToxMDgyMzAwMEE5NDQzRjZDNjg2NDA2RTY5OTlERDk2NTYyODhCRjREODQKLToxMDgyNDAwMDRBQTQwNEY5RDY2OTQ1QUJBMzc2MkQyOTZFQTQyM0U5ODcKLToxMDgyNTAwMDU3NzhGNzM5RUU1N0YwMjMyNDYxN0RGRUMwN0Y1MjlFOTgKLToxMDgyNjAwMDkzN0Y2N0EyMUQ3RDFBRkVBQjA3QkMzRkFEOEI1NEUwMjgKLToxMDgyNzAwMDc4OTIxRjgwMUVBRDkxN0U1NENGRTMzRjREM0ExNjQwNTkKLToxMDgyODAwMDNCRUIyQUREQ0M3OTlDQ0U3M0Q5MzY3QTdGQjQ2NDUxMkUKLToxMDgyOTAwMDlDOUUwRUVERjYyQkU5MUM3RDkwNkUxQTA0MUM5Qjc0QkYKLToxMDgyQTAwMEM3QTg1RDAzRTYyQjIxM0NEMURFNDIzRjE5NTZDNkY5MzMKLToxMDgyQjAwMDc1OUJENjdFNDhGOTUyNEQzQjEyQ0ZCQjIxODYwRkNBMjMKLToxMDgyQzAwMDk3MEFGNjhCQzMwRkEyRTc4MEUwMDc4Q0ZCM0I2QTc4MjYKLToxMDgyRDAwMEZDM0E1NTk0NTM2QTdCMjk3RkNBMkZGQzFGOTlGQjIyRDUKLToxMDgyRTAwMDEzOTBBRkE0OTY4N0Q4NEM3OEZBNEY3MDdENjM1Q0NGMUIKLToxMDgyRjAwMEQ2OTdEMEFFNzZENEY2MTYyMDE5Rjg4NTlGNTA5RUI3NDMKLToxMDgzMDAwMDVDRTc5NTNERUJDOERGMjFGNTk0MzhCQjczQzQ5NDA0NUEKLToxMDgzMTAwMEJGQzM3MkVBODc3NjJDQ0UxN0MxNTczOTg4MDY1Q0JFNzgKLToxMDgzMjAwMEFEMTdGMjJEMDUwRDYyOTQ4MzFEQzM0OTBFQTI5QzQyMjgKLToxMDgzMzAwMEZFMjRFRDYwRTQ1N0M4Mjc1MkIyQUJGNzIwQkQzRTkyNTEKLToxMDgzNDAwMDVERkQwMkU3NkI4MDY3QThEN0EzNTE3NUU1QzBGRTNERDAKLToxMDgzNTAwMDA5MUZEOTBFRURFMTdGRTRCRjdCNTVFMEFERjRBQkQzNEYKLToxMDgzNjAwMDhBQ0EzMURGM0E1M0ZBRUIyOEFFQjc0ODcxNjcyM0RFODkKLToxMDgzNzAwMEJFQTdGNzkxNUY2RTJFMEI5MDlGNjgxRUZBQzNFMEQ5REYKLToxMDgzODAwMDIwRTg3RDhFRjAyRkNEMTE3RTI1RjRGN0M2QzcxRkQxRDIKLToxMDgzOTAwMEVGMUE1RjlFQ0Y3QTM5REZEODZFOEFFNUU1QTAxRkE4NzUKLToxMDgzQTAwMDg2ODU1MzYxQkM0NkY0NTNFMTMzOTREOEFGODk0NUE5MUYKLToxMDgzQjAwMDlGN0ZFNzk3QTY4NEY4NjYyN0RGRjc2REUyRkMxRDM1RkYKLToxMDgzQzAwMDQxM0RGMjg5OEQxNkVFOUY5MkZDNjNEQzUyRUVDNzFBOTYKLToxMDgzRDAwMDM0NDYyQjVFODE3OEZFQUE4MUZDMUI3RjExRTdENkU3MkQKLToxMDgzRTAwMDJGQ0RBQTdFMjkwQkUwNjRENUYzN0I2Q0QxMTUyNkUyNTQKLToxMDgzRjAwMDlCQzc0MTFFNzcwQkJGQ0ExNEI0NDM5NzMxMERGM0RFMDAKLToxMDg0MDAwMDk5NkEyRjhDQjc1M0U1NzNDRDJFNEIzREUyQ0Y2NzQyNkYKLToxMDg0MTAwMDlFQzlGN0RCQjMwQ0I0MUVGMjM3MTE1RjRFMjFCOTBCQzYKLToxMDg0MjAwMEVDNjMzNEUyNTdDNTYwMjkxN0Q5NjhGNDczMUQxNTc2REIKLToxMDg0MzAwMDczRDNDRDM2MUY4RTE3RDE3MTdFQTM2NDczMzlBNTY0QjMKLToxMDg0NDAwMEYzQkMzRTU5RUVCM0YzMDRGRUM4QjgyMUZBN0RFMkZENTkKLToxMDg0NTAwMEVFRTZCRUY2RUI4NDNFQzk2OEJGRUJFNzg5QkNGMDNFQjIKLToxMDg0NjAwMDNDRDYxMTVGNEExOUU5MjVGRTdCOTVBRTlBRjg1MkY0ODUKLToxMDg0NzAwMDAzOUIxQkUxNTJGQjYxQzMzQ0RDQzcyN0QzQUQ3NEZGRjgKLToxMDg0ODAwMEVGNzZFMTA3NzY2NTNCNjg3Q0U5RjdCRDUwM0NBRDc2NTkKLToxMDg0OTAwMENEMDhFMjk3QjI3RDFFMUEyODYzQ0ZGNzFGRUYxMjdDM0EKLToxMDg0QTAwMDZDMTdFM0VCMEQ5Q0IwRjIzQzE1OTUwNTkwQUZFRDBBMEYKLToxMDg0QjAwMDhEMDhFMjdBRUI4NEZGMDFGNTFCRTRBRkQxNjdGOTM5NEYKLToxMDg0QzAwMDMyOTVFQjQzQkI3QTQ2MDUxMURGOEYxQTdDMUI2N0EzRkQKLToxMDg0RDAwMDNGQTdEQjQwN0UzOUE2MDY5Rjc4MUNDN0Q5OTNFM0MxMkUKLToxMDg0RTAwMEJDQTFEM0JBRTg5NjVGNDNCQjVEMjc3RTlFODc3MUEyOEQKLToxMDg0RjAwMDVEQzI1RkRGNjAwQzk3OTBERTJDRjIyNDFCRDJDMjI1OTgKLToxMDg1MDAwMEU4MDc3QTUxOUM1NzgzMTVDQUYwM0VDM0UyMkJDRjFFNzEKLToxMDg1MTAwMDFCOEJBNzYxM0Y3QzdGMkNDOEY1RjI2MzhDRTM0MTYwMjUKLToxMDg1MjAwMDJEOEY5NzAyN0M3MzY2RTM3QTU3Njc1MzNDMEVDRjA1MTUKLToxMDg1MzAwMENGRTFEREREQTM2ODVGRUIwREEyRkQwQjBBQjU1N0E2MDkKLToxMDg1NDAwMDk0Q0UyMEI5QjBDNjk0ODFGMDNGRTMzNTUyOUVBRkZGODAKLToxMDg1NTAwMDNFQUUzN0NFRDJCOUI3MkM0MTVFQjkyNzg1RjYzN0JCRDAKLToxMDg1NjAwMEYzMTBDNTQ5RkNGN0NFQTVGQjkzRkVGOTRCNkY2MkZGRjQKLToxMDg1NzAwMDIwN0U4MDcyMjVERUVGN0Q5QTQ1MEJDOTFFQUUxRjFDNDIKLToxMDg1ODAwMDBBQzMzQTRFRjc4Q0YwRjBGMDFGQkY4RkQzMjRGMjQ5QTQKLToxMDg1OTAwMDhGMUI5ODg2RUI4RUVFMzYwNEZCQkIyNzM4RDBGOEU0QjEKLToxMDg1QTAwMDQwQUNFMEYyOERGQ0UzRjE3MTFBOTIwNzg5NzE5QjBCRUMKLToxMDg1QjAwMDk1NEYxQjIyMjU3N0MxRkM2QjMzN0M3M0IyRTNGNDQ1RTYKLToxMDg1QzAwMEZGOUUxQ0UyNzdFRkRFRjNENzQyRDIyQjNBNzg5Q0UxOTQKLToxMDg1RDAwMEI4NDE5QjgxNzRFMkE4MDkxQjY3QzZFOTYxM0ZDOTE2Q0YKLToxMDg1RTAwMEY2ODc0OUU4OEZDMDA3RTNFOTVFRDY1NzU0MjdEMjk5NEEKLToxMDg1RjAwMDdDRkUzODlCRUIyMUE5MjJBRkUwRkM3QTk5QjczNkQ1RjcKLToxMDg2MDAwMDg0RjI5M0JCOTY3MDVDMzdCRDJGMTJGMUJBNzEyN0EyMkEKLToxMDg2MTAwMDdCMzEzRkFCMjE1NDQ2RjFDMEEyQTU2MUEyNEI4MDc3Q0MKLToxMDg2MjAwMDE4RjVGRkUzMUI1MzM5M0Y4MTZERTIzODczMkExOUU5Q0UKLToxMDg2MzAwMEFGNzNGNDNDNEY2MjhFMDlGNDYxMkVDN0E5RkQ3QjFCMUEKLToxMDg2NDAwMEIzMDkwRTE1Q0JCOTFFMTg3RDU2MjFCRTI4RTM5Njc1QzkKLToxMDg2NTAwMDhDRjc3RkJFRUQ2ODQwMEZFREVCQjYyQjY1QzA1QTU5MjUKLToxMDg2NjAwMDVENUIxNUU1NTFDQ0RGNUM0Q0U3M0Y0RUYwREY1OTI2RjIKLToxMDg2NzAwMEFENjQyM0UyREJGMzNDRUUwNUYzOTFERUREODBCOTYyMEQKLToxMDg2ODAwMDYzODgyRjE5NTExRUQ2NkY1NzE4REUzNzk2RkI0RjhFMTEKLToxMDg2OTAwMDEzQjI2MDYyOUM2NjVDODhGMzZGOTQxQjJDNEU1RjkzRjAKLToxMDg2QTAwMDcyMDhFNTA1NEJEMjIzMTNGMTIyMjBFMjU3RkM3QzdFQjEKLToxMDg2QjAwMDJFRTAyQUY5M0Y0MUVDMUZDODQxRDBBNzlGNDRGQ0E5RjYKLToxMDg2QzAwMEE4RTZGNDE3RUQ1NjA4Q0U4REFDOTlDNzk1ODQxQ0VBNDAKLToxMDg2RDAwMDVCOEY5MDYzRUZFOUI5REM5QzYzNUE0N0NGMzA1RTFFMzUKLToxMDg2RTAwMDFCOEI3MjMwQzJFNTIwQzgzNUU0OEIwM0UxNDU3ODAwNkUKLToxMDg2RjAwMEJDOTBGOEIwMTdGNzAxRTMzNTlDNjBFMTZGQzA3QzBEQ0EKLToxMDg3MDAwMDRCNTlCODcxMzQ3RkE2OEUyNkI5Q0NFNUIzOTlDQjY3QTcKLToxMDg3MTAwMDdDNUEyRjQyNEUyN0NCRTc2NDc5OUMyQzg3NTEwQ0ExQzEKLToxMDg3MjAwMEJDOTU3ODEwRUZBNzQ3N0Q2NERDRDJBMDlFRkI2MUYzNzcKLToxMDg3MzAwMEVEOTgxRjI4Q0ZBNUQxQTkxRENFMUIxQkQzQjdGQzg3NTEKLToxMDg3NDAwMENENjZGNzY1NThGNkIyQzEzNkY0MkY1NURENUUwMEZCRjUKLToxMDg3NTAwMEY3QUJGQzlFNzIwQUMwNjkyQkJDRUYxMkZBRjlFNDAyNzcKLToxMDg3NjAwMEJFN0Y5N0M4MDMzMkE4NUU1NjY2QzM3M0VBMjU3QjNBN0MKLToxMDg3NzAwMDlBQzkyOEFGNUJDMkI3MkIxNUZBOERDMTdFNUNGRUY1OTYKLToxMDg3ODAwMEY1MzdCMzM2NkI1Q0ZGRUE1RDE2OTIyRjY3NUY0OEE1M0QKLToxMDg3OTAwMEZCNjg0Q0Y1MTUzOTYwQkNBQzNGODI5RTBFRTVEM0JCM0YKLToxMDg3QTAwMDUyNDlCRTlGMTZGQ0RFMjlGRDE2NkMyNTlERDc2Nzc4QzEKLToxMDg3QjAwMENFOTk4ODc1RDU3OUU4RkY2NUNBQzQzQzQ2RjdCNEI5NDcKLToxMDg3QzAwMERFRDhFODE4Qzg2RjJGRUE4QjdCNkZFNjc4NjYyMjM5MEYKLToxMDg3RDAwMDdCRDYxMUI5MTNDQkIwMUVDQTMzM0UyNUNFRERCRjYzQTUKLToxMDg3RTAwMDdDRDk4RjMwM0ZDMDZCRjM3MEE4RkFDQTUwNkYzMEU5NjQKLToxMDg3RjAwMDE3REY2Q0Q2RTM3REZEQTVEMUJCNjAxRjhEMDUzNkNBQTIKLToxMDg4MDAwMDVGQUUyOTdBRTc3N0I3NDBGOTgzMUQwNkJBRTczOEVGRkMKLToxMDg4MTAwMEIxQTk4M0MyRDg0REQ1NUNGREM5RTc3OTQxNDNDMkZERkEKLToxMDg4MjAwMEI5MDVEQjEzQ0I4REExQzRCMjNGRTlCRUZDOTI3N0I2OEMKLToxMDg4MzAwMEJFQjYzRkFFM0VEMzk1RUFBNEYzNzczMzBGRTY1RjMzN0YKLToxMDg4NDAwMEZERjcwNkY5RkFFMTk3RjJGOUQ3NjVDMUQ3RjYwRkEzNUMKLToxMDg4NTAwMEZDQjU3QzE3Q0ZDQjMxQTI1RTMzMTNGMUExOUY3RTZGQTUKLToxMDg4NjAwMDBBQkRDNjY0NkEzRTgxNzlGMEE2MTc0RDc0QUZGRTQ0MTYKLToxMDg4NzAwMEI2NkYxOEY2NkZEMjQ1MEZFMDc5OUE4QTRFOEQ0NjM5NTkKLToxMDg4ODAwMDU4NURGNDc3OEFBNzlERkQzMUYzMjA3Q0NFNUFBQTQ4MjMKLToxMDg4OTAwMEJGMzlCQkQxRTI0NkZCQUNCM0QwNDY3OEQwQjk0NzA5NkIKLToxMDg4QTAwMDJBNUM3RjlGMzRCNjAyRTNBN0I0MDdFNkRGNzBGRDA3QkEKLToxMDg4QjAwMEZDRDIwNjMzRjM3QkY4NjBCREI4OTBDRjY4NjQ0RkJEM0YKLToxMDg4QzAwMDM3RDk2QTVGMEVGREVBMzc3MDc5REJDMDdBRDM5MDBGMzMKLToxMDg4RDAwMENDNzc3MUZFRTNENzNGNjUzNEMzM0Y4QkRCQjQxMTJERkEKLToxMDg4RTAwMEIwREUwNTVFMkJEREQ3NTFCRjUwRTk5RUZBMkExQzMyNUYKLToxMDg4RjAwMDRFRkZBRjcyMDkzRkE5Mzk2MkFDQzJGOUZGQkVCODE2OEMKLToxMDg5MDAwMDVENjNEMkNGNjUzMkY4MzRCQzE3NjZEODU5MTZDRTgzNzIKLToxMDg5MTAwMDU3NzM5N0JDNDQ3NjRFNUYxQzdBMzdFNzVCNzNFRkRBODgKLToxMDg5MjAwMDRCRUY5NTI5QjVCNERGRjc2MEJGMDg5Nzk3MzY5QTY4ODMKLToxMDg5MzAwMEJGRUYxNUQ4QzhDRTdDQUY4QkRCQkY3M0VEQzZBMDk5NTcKLToxMDg5NDAwMEY0OEQ3MzE5Nzg5RkY2QkQyRTAzREQ2MzNGMUYxRUQ3OEMKLToxMDg5NTAwMEQxQkRENkY3MzdCRjQyN0VCOEY3MTk5RjM3QjA0MzRGMjYKLToxMDg5NjAwMEZBQ0FGQkY2Njg0NTE4RTFFODZFNEU0MzdEQjc3RUMzNTAKLToxMDg5NzAwMDNDQkExNzNCQjc0QkVGNDU3RTM2QjdFQjhFNUY1Rjg5NEUKLToxMDg5ODAwMEZFQTMyOUI3OTZFMzk2QUU3MTJDQ0U3MkRCNjJGNTUyNDgKLToxMDg5OTAwMDRGNTVEMzJCMUY0NzNBQkNFNjhCRjFCREQ3QTBCRUQ0QjEKLToxMDg5QTAwMDA1NzQ1MkNDRjNFRTUxNEZERkRGNzUxREU5QTU3MzI3MzcKLToxMDg5QjAwMDVCMURCODJGRjdFNkM3MjZBMEZDNzg3RjcyMkVEREUzOUIKLToxMDg5QzAwMDlERkJCNEMyRjBEMzBENzMxRDRCQjJGMEZENUM0NUY1QjkKLToxMDg5RDAwMEY2ODc0RkNDQzVGRDZENTU0NTM2NEYxOEZCRkQ1NjRGRkMKLToxMDg5RTAwMDc4MDI3NDc1MzNDQUNGQzYyRTAzRTlCREZCQTdCQ0ZENjAKLToxMDg5RjAwMEJCNUI5QzMxQkE1MkE2NkNCODY5MUNCNkZGOTk4MURBOTAKLToxMDhBMDAwMEY3RTkzQjlCNkY5NEY4QzJDMjE1Njg1NzcxQjgyNUQzM0MKLToxMDhBMTAwMDk5QTk2ODY5MDlBRTJCOTlERUU2MkU2RjJFRTFGMUFCQkMKLToxMDhBMjAwMEFGNDY3NzZDMzNCRkQ3REJFNjUyRDg5N0JBQUY0NDc3RkYKLToxMDhBMzAwMDc3QkJDNjVFM0NEREIxRkNGNDA0N0JFQTdDRkUxNjIwMEQKLToxMDhBNDAwMDNDOTVGRTdGQjM4NzY5OEZEOTI4REVBQjI5QzA3Rjc3M0QKLToxMDhBNTAwMEI4RjhCREY1MUQyRTdFQkY0REZEOEY0NURCREYwMEY4NUMKLToxMDhBNjAwMDU0QkE3QzVEQjg4RTIyQTY5NUExREM3NDQ3RURENTc4MEEKLToxMDhBNzAwMDE3QzkyNkY0MzlCNkQ5MjRFRDAwRDJFRkQ3NjdCMkM3QUIKLToxMDhBODAwMEQ3QzRGOTFGNDIyRTZFMjcwMTFGNzgxQ0M3MzlGRDg3RjYKLToxMDhBOTAwMEJGMUZDMDczNkEyQTNDMzUxQUZEQkVGRTczOUY1MUJDQ0UKLToxMDhBQTAwMEQwRDZDM0UzQ0QzNjRGOTRFMkYwMDZBNzk3RjA1MEYyNEMKLToxMDhBQjAwMDc3QkY4N0NCOUZGM0UwRTVFMkY3M0JGQ0NFMjg4REYzNTEKLToxMDhBQzAwMDU2MEVFN0NGOUQyMkJFQjI2OTg5OTVGQ0E5OUI5QzQxQjkKLToxMDhBRDAwMDBCRjcyRjA0MThDQUE3NDk5NTdBMUUyNzEzRkFENjhEQ0IKLToxMDhBRTAwMEMyMUY2OTJFN0Y4OTYxN0M4QzVEQ0RGM0MyREUyODdGMzkKLToxMDhBRjAwMDQ5Q0Q4MEYyQUYyQkFGRjVEMDdEQkVGMjQ3REEwN0UzNjgKLToxMDhCMDAwMEJFQUYzNjg4RkEyMUY0QkQ4RDdGRDdBQUE4N0U5MTRCREYKLToxMDhCMTAwMEVGNDZGQTlFNTRDRUYzMjI1OTdEMUFGOTREREUyODdGOTYKLToxMDhCMjAwMEQ3Nzk3QkRDRkFCRENDRUNCNjAxREU0QzAxNjI4RENGOEYKLToxMDhCMzAwMEMzQkJFOTZBOEJEQjE2ODczRjlGNzQyOEI1NUNFRjc1NzIKLToxMDhCNDAwMDBGOUEzNjhBRkI0NTQ4MUU5NzI3QzI2MzkxQ0I0OEYzOUMKLToxMDhCNTAwMDNFOTI1RDc1MDhFMTdDQ0QzN0Y5Nzk5QzdDREExNDQ0NEUKLToxMDhCNjAwMDNFNzg1MkRDOEY0OTg2NUZDNDI1RjA0NzFEOTExMEI3Q0YKLToxMDhCNzAwMDc3MUE0Mzg1MjgyNzNGNTQxMkZCQ0Q2RkQ3NTNEQzdDRUYKLToxMDhCODAwMDVFQkJDMjgyMzBERkM5Mjc5RTJGNDQ3RUZFQzE2M0NGMDkKLToxMDhCOTAwMDE3Q0U4QzVCNEY3MjNGRjkzQzI5RTcxMzdFQzE2NDNGQ0YKLToxMDhCQTAwMEVGNDBGRTVERDlFRUNDMDZFNjMzMEY4OUI1M0Y1M0ZGQUIKLToxMDhCQjAwMDM3RjJFRkNFRUMxMUZFNjE0RDFCRUE0NDdCNDhCNDRGMTcKLToxMDhCQzAwMDFFMkYzMzk3RjM2QjY1QTc0MjdFMEZFOURGM0M3NkYwRUIKLToxMDhCRDAwMDExOENBNEY0OUQ5RkE1QTc1ODE3OUZDRjI4OUZFM0M0OEQKLToxMDhCRTAwMEI5NERDNTczODNBRDU4REE3OTc5QTBGMzFBODgxRTdGMjEKLToxMDhCRjAwMDIxRTQ5MDNDQjc2M0VENDMwNjIxMUM4RDREMzY5NUYxODEKLToxMDhDMDAwMDdCNkFBNUE4QUY3NzMxQUIwN0U5RTlBRjIyQUZENTY5OTkKLToxMDhDMTAwMDg1MjdFODY5QzY1Qzk3MERGOTk5RkMyRUMwMEZBRDY5RjAKLToxMDhDMjAwMERCRjBGOTU3OTFGN0VBQjRDMjEzQzYyOUM4MkRBNUYxQjQKLToxMDhDMzAwMEZFQUFGMzkyNURGNzQzN0QwN0RENUY3NDA5M0FDOTY2Q0EKLToxMDhDNDAwMDYxNDVDMTRGMUQyQzc4NEVBMUJDQUZGNjQ0Nzg2N0I1ODUKLToxMDhDNTAwMDcyMzkxMkFEMzM5MkZDOTI3MEJGNkFFNjlENjRCRkY2MjIKLToxMDhDNjAwMDczNUUxQjEwOEY3MjJCRjlCQkM5MzlDNUMyREYxMUExMEUKLToxMDhDNzAwMDM4ODJBNTkyRDlEMUJFNkZCRDMyNDBFQjkwRTdFNUU3Q0YKLToxMDhDODAwMENEOTlEMkEzOTBGRThDRjkyRjI5RTkxNDJGMEQ4ODI3QjYKLToxMDhDOTAwMEIzQTVCM0JFRjg0MThBQjA3NzU5NTJCQzIwMUJGNDZFMUQKLToxMDhDQTAwMDZDMjdENzA5NjVDQUEzQjlDRjExRUEyOEUxRjE1NkQyREEKLToxMDhDQjAwMDRCNzE1QzdDM0Y3M0E0NEFGRTc2NkM2NzFDNzM2MUZDNEQKLToxMDhDQzAwMEVCQzM1MzkxOTczODQ5QkVBRkI3RjYxQjlGOTg4NEY3MTMKLToxMDhDRDAwMDgzRjAxQzQwM0VBMjVFQzgzQzg2ODRGQjQxOUI0MTlGQzIKLToxMDhDRTAwMDQ2M0I0REM2N0ZGNUJBNTA5OThCRUM5M0RFMDhGQTRGQTAKLToxMDhDRjAwMDhDMTU2NjM3Q0FEQjE0N0RBODE0Q0YyRjM5MUUwQ0VERjYKLToxMDhEMDAwMDhBNzkxRTQyQkUwM0U1OENCQ0ZGRDNCNDY0QkMxN0UzNzIKLToxMDhEMTAwMDU0QTA3RjA0Q0M3ODdFOTNGOUY5MzVERDU1NDVFRjk1NjUKLToxMDhEMjAwMDI5QTUyRDg4NUZGRUE1OENCRTUzMzBCRUE3OUJGMkE0NUIKLToxMDhEMzAwMEZDQjU1QzFGRjNFRjNDNkE2NDgwQkYzMzg1M0Y4NzA5NTUKLToxMDhENDAwMEZGNzM5NjM4RDc2MzQyRkY4RUM1QkIyMjVCMzBFRkJCMDMKLToxMDhENTAwMDczNUUzRURERjc0RENFMkJGOUFBRjFDRTMzQTkwMDkwMUMKLToxMDhENjAwMENCRTJFMjU4ODNDQzVDQ0U4OEYzOTdGNDJERTM1QUE5OEEKLToxMDhENzAwMDIzQkRDNUE4ODlGRjJFM0JGQTJCRUJEOEFGOTAzNzEyNDUKLToxMDhEODAwMDM4NzhDRjNGQ0UxQjk5NzYxM0U2OEQ5ODUxQ0IxN0Y1RTcKLToxMDhEOTAwMEI4MEM5MEEzN0RGN0Y5MkM2RThBN0JGNUQ1RTM3NzE4OTQKLToxMDhEQTAwMENDM0IxNTcxN0Y4RkRENzRFRDUwQ0EzNzE1RTVEN0Q2RjIKLToxMDhEQjAwMDYyREVGODdEMTY5NjMwNUZGQ0ZBRDRBNEYxMEQzMEJFNjkKLToxMDhEQzAwMENEMkREQTA3NEVERTcwQUQ0QUYxNUY1MTNGNzEyREU2RDEKLToxMDhERDAwMEM5REM2NzQ4MUM4RjUwNTBERTNGMzRDN0U2QkI3REYzQ0IKLToxMDhERTAwMDg2N0JENkU2QzdFNDM5QzhGNzhEMzk2MzYzNzI3REQ1RDMKLToxMDhERjAwMERCOTMzQTJFNzMyMzdEN0Q0QUY5QkI1MjNFRkI5RDNDQUIKLToxMDhFMDAwMDhGMjQ5OThGM0Q5QUEzNDhCRDc4MDI4QURDNTVEMzE3RTkKLToxMDhFMTAwMEQyNzcwQkZBRTJCRjNENzUxQUVBQzMzMkZFRUI1RkVBODYKLToxMDhFMjAwMEE1M0M1RUQwMDdCNkU3OTAzRTcwRUFCREJEMENGNUNFMUUKLToxMDhFMzAwMDkzNjQxN0Y4Q0ZBOURDNEYwNDdBMDU3RTg3QzZEQzUzMEMKLToxMDhFNDAwMDQ1RkU1MDRDNEYxRDE2NzdGRUYzODU5QzQyMUQxRUU5RDIKLToxMDhFNTAwMEMxQkZGOTNCOEZFOUIxM0U1N0VCQ0VDOThDRDk4N0M5NjkKLToxMDhFNjAwMEVCN0QyRDg3RTdCOUZCNEJBQjM3MjIzRjYwOEYyQUY0QjAKLToxMDhFNzAwMDFEQTgzNUE1OUY5MERFRDFGNEMyQjU2M0UzRjNEMEU3MUEKLToxMDhFODAwMEVEN0M5MEU3MzE2RjM3RjRCQkZGRDc3MkY4Nzc2MjlBQzkKLToxMDhFOTAwMDVFNzg5NkZDOUQyNzgzRkNGQTRDQkQxQTVDOEQ3QTY4M0YKLToxMDhFQTAwMDdEQkQwRTM1MkY1NjFFQUNCQjg1RjQ4MUU5QjAwRkQ4QzEKLToxMDhFQjAwMDU3Mjg4N0MzQzdCRjdENkEwMEYzRTJGREYwOUYwMkFGNkEKLToxMDhFQzAwMDM2NzlFNzkwNURCMDY5QkFEOTg2NzExQzdGRTlDQzg1QTcKLToxMDhFRDAwMDg0RkY3NkFCODZGQjRGNUU2NzJDQ0U2Q0E1RkJDQjZCMUQKLToxMDhFRTAwMDc2MUE2QTUxOEZBQTAwQkRFOTVGNjFCRDA1RTkxMzZCNkYKLToxMDhFRjAwMDNEQzA5N0YyRjRERDY1M0ZCMDYxRENCRDdGQjlFQ0NGREEKLToxMDhGMDAwMEUzRTdEOEE2NzgwM0RGMkEyNzNGMjc4QkNGRTMyOURBQzgKLToxMDhGMTAwMEM5RjVCM0EzMzlDNjA0QkZGQUQxMUM5NUUwNzk3NUEwOTEKLToxMDhGMjAwMDc3M0NFMkRDMUUzNTkyODI3QUIyOUY2OTFGQTNGRENCQUIKLToxMDhGMzAwMEJDMzYzN0Y5NzcxOThGQjMzQjk3QjlDOUJGNkI3NjQ2MDMKLToxMDhGNDAwMEVFQkU4Q0Y0Mjg5NUUyQ0NEMkJFMzhGRDAyRjc4QjRERjQKLToxMDhGNTAwMENERjU5RDQ2RkNBOEQwNDcxRUY4MTZDMkVENkU1NUY4MUIKLToxMDhGNjAwMDg5Mzk5RjI5OUM2QTFCODM3RTJDOEIzM0YyNDBBRDlCRjEKLToxMDhGNzAwMEYyNkZDODJGMzFFODFCNkQ3NDBFN0I5Q0NDOEVGMDE5RkMKLToxMDhGODAwMDFGQTg1Mzk1MzgzOTIzRjlDNkY4QkVGQjNCNEVGMjlGMTQKLToxMDhGOTAwMDU2NzNCNkM2ODZDMTY5QkQ2NzI2MTQ2REZCMzIyM0E2MUIKLToxMDhGQTAwMDI3MUNGQ0ZCMzQxNTVGNEFGRDQxNjdGNjkxOUQ1MzMzNDYKLToxMDhGQjAwMDFERUM0NkM0QkI5NUQxMDMzQUY0RDczQjdCNDk3RjZDOEIKLToxMDhGQzAwMDBDMjkzNDRGNjNFOTJGMjkzRjZFODFDOEMzRUFDQjg3NTAKLToxMDhGRDAwMDUyMjM5NDFGNjZDRTREMTE3RUE2MzY4RTk3QUM5N0VDMjkKLToxMDhGRTAwMDYyRjYxNDg3M0ZDODREQ0ExQjhCRTlGMTJERDQ0RThFMTMKLToxMDhGRjAwMDY3MTQ3MTg2NDZFMUM3MDE0MDUxN0Q0NkFFMjJDNjVEQzkKLToxMDkwMDAwMDlFMTg5RjEwRjMzMkQ1NUQxMUVGNzc1ODNGMTkyNDA5NTAKLToxMDkwMTAwMEFEQ0I5RDg2RUJCREQ3RUFDRENGODVGNkM3RUE3NTA0MEIKLToxMDkwMjAwMEEyNjNFRDI5RjQ1REFBRjU0QUFGODZGRUM4NDAxOUNGQzgKLToxMDkwMzAwMEE3NERDNkEzMzIzMUVGQTA3REQxMDkyODRGQTIyRjBDMzYKLToxMDkwNDAwMDk0NEZDQkYzNjczNzhFQkQ4NEYyRDBDQjc3N0UzQzAxNTMKLToxMDkwNTAwMEYxODNENTMyQTJDN0E2OUQxNzk3NEY1QjgxRTczMUY2MDIKLToxMDkwNjAwMEZGQTE3QzVBOEZBMjZEODNFNzc1Qjk4RUM0N0M1QTBGMUQKLToxMDkwNzAwMDNGMkYxOUQ3NENDRUEzM0Q5RDEzNTY3OUJFNUI2NENCRDEKLToxMDkwODAwMDYzNjhCN0VGMzQ1MTlFQzhBNDlEQUYxQzQ2QkZFNjI0NjkKLToxMDkwOTAwMDMzMEI1MTlDMzc0OTdGMzhFMjlDRUFDRDg1NzlDRTdDRjEKLToxMDkwQTAwMEY0REU5NjE1MENGM0IwOUZGM0YwN0I5OTg5RkFDMDQwN0IKLToxMDkwQjAwMEY2MDBDNTNBRTJFQ0M2OTkxMjZGQkUyNjdCNDBGMjZCMTEKLToxMDkwQzAwMEJGQjBBRjNFNTRBMkY3OTZFMEZFNzZFQkVERkREREEzMTgKLToxMDkwRDAwMEYxRTdDQUY4RDgwMDc5MjAzREZERTc4MUM4N0I2NkI1ODUKLToxMDkwRTAwMDkxRTI4NEI4RDU1RDdENzRGMEQ1RTI2MDRCNTE3NkY2OUYKLToxMDkwRjAwMDEzMDc1MzQ1NUU5N0FBNzBENkMxMUMzQ0VGNDdDNkMxMDMKLToxMDkxMDAwMEQ0RUUxMTE0REYzMkM1RTI2MDYxRDY0RjFDNEMxNTcxRUMKLToxMDkxMTAwMEE1NTUwNkFEOEVGQzM0QkI0RDZFNkU0NzdCODk3RkI1ODEKLToxMDkxMjAwMDc1Njc3QTkwQkZGOUU3OUY3QzA2M0YwNUEwM0EyNkI4OUQKLToxMDkxMzAwMDUwNkY2ODEzRjA2RkI4RjgzOEQ4ODNCOUZEQzRDMUI2NjIKLToxMDkxNDAwMDBBQkRFRERENTI1REQ4MDg3MEREQ0EzOEZGMERGNEM4RTgKLToxMDkxNTAwMDc4OTg4RUVDREFFODNEMDVCNDZFNjU4QTk5RDZGREVFMTYKLToxMDkxNjAwMDFFRDMzNkY0NEZDRDkyNzFBRTNERENCRjM2NEJDNEIzNDcKLToxMDkxNzAwMERFOUQ1MjQyRkVBNzgxRTAzQ0FCM0QzMTVFRjAzMzAxMDMKLToxMDkxODAwMEU3QjM5NjJBRjJEM0RGNzlGRjY0RjJDRkNGNDFGRkZFMzcKLToxMDkxOTAwMDkwRDg3RDA5MjZGQzdDRUU3NjdFOUZERUJENURBMUVGM0EKLToxMDkxQTAwMDk5MjI5QUU4NDgyN0I1RDM3NzREMTcwMDFCREQ4NEFDODgKLToxMDkxQjAwMDM3MDA1ODczMDVCQzU2NzQwQUVBNDNFRTM2Mjg4M0QyNEEKLToxMDkxQzAwMEFGQUU1NjAzMkU2OEI3RjU3MDBBRjkxNTU3MzlERDIyOTAKLToxMDkxRDAwMDZGOERDNzlEMDM2Qjk1RTAzMDNFMkU3REM3MkNEMEE2Q0EKLToxMDkxRTAwMEQzNzA5QzU3NzJCOTNGRUFDRkI5QzY3RUJGMjNEMTY2MTAKLToxMDkxRjAwMDEwRjE2MzMxNUYwQjgzNzM4N0E3NEVFMUNGNTVFMjNCREMKLToxMDkyMDAwMDc5QzlGMDkwRTNCNTE5OUFDREU4REY4QjE2RjBFRkExOUMKLToxMDkyMTAwMDlDMzU2QUQzQzlFRjlDNUU0MkRGM0Q2QTRCNkQ2RUFGRjEKLToxMDkyMjAwMEU1RjU0NEIzNjcyRDUxMkZENTdGNDNFNTBBMjk3M0E3OTAKLToxMDkyMzAwMEUzN0E3N0U3NzJGRDI2MTlDRUIzM0IxMkNCQzk3MTlGNTMKLToxMDkyNDAwMEU0N0I1QUIzOTg2Rjc4Q0U5MEYzRUYzMUVEMTZGQ0Y2Q0QKLToxMDkyNTAwMEVDOUE2MjcxMkUxRThBQTNCNDE5RENCRjI5QTZGODI5RTQKLToxMDkyNjAwMEZGQUU1MTRCM0U4NzlCQUU4MDNGMDczQjZBRThGQjc0RTUKLToxMDkyNzAwMDQwMkY1QzhGNjM3Q0ZEODNCRkUxNTQ5MDVFREExQzFDNDEKLToxMDkyODAwMDZGRkZBN0VCNEU1RUVGRkJCOTI1MUNCRTBFNEVBRjZEMTgKLToxMDkyOTAwMEFCOTUyMDg3MTc1RkY3QzVGQTQ5MEM3OTVGMkY1RjdDODQKLToxMDkyQTAwMDU3RjEzQzFFMkVBNjdFQzQxRjAyRjcxODg4RUU3NjU5OTEKLToxMDkyQjAwMEY4RkQ0QkM5QUYyOEIxMDdFRDRGNjFFRjBFNDI2NTFBQkIKLToxMDkyQzAwMEUzQTEyNzU2RDJGNzg5MzZENTBGNEVDMzc4RTlGOEE5MUUKLToxMDkyRDAwMDM2REE0N0QzMUU3RUJGQjc3MTY5QTQxMEYxQkFBOTNBMzYKLToxMDkyRTAwMDUyRDJEQzBGNUM3MTAyNTVGMjU3NjgzN0QzQzlGODc3NTgKLToxMDkyRjAwMDZFREExM0UzN0ZDOTcxRERCNTE5NUE0MTVFMjZEQTRCODgKLToxMDkzMDAwMEVGNzZCRjgyRTdERDZEMjFGOURBQjQzNEZBMzhGQTBGNkYKLToxMDkzMTAwMDdDMTlCRUExNTg3RkVBQUVCNzI3Mjg2RUVBNDZGQUZDNTAKLToxMDkzMjAwMDk5RERDM0U5NUVFMkNDQjZDNDdCNUU2QzZENjI1QzkxOTQKLToxMDkzMzAwMEI1QTdGM0ZCNkM5RDg5RUZGMTNFNTM0MkJGRjNFMjhDN0UKLToxMDkzNDAwMDVDQkY1OTZGRjQ4RDQwRkRGMzlBNkZGMjNDOEE4RkU2NTMKLToxMDkzNTAwMEU5MTg5RUVCNDcxNjdFRkU4MTdCNTIwNUJGRjY5NEM0NEEKLToxMDkzNjAwMENCODNBQTAxQ0YxN0RBOERDNDc4M0VDRjFGOTVFRDFCQjIKLToxMDkzNzAwMEYxN0NFMTVDMUJDNEY5N0VGNEVDMTUyNTc4QkVBN0JBM0MKLToxMDkzODAwMEFGMjhDMUYzNUQ2RkU4RDA5MDNFNTJCMjdERDc2MjlDQUEKLToxMDkzOTAwMEVERjhCNTVFRDIwRjY1QkVFQ0M1RTJEREI0QkNBRkQ3NkIKLToxMDkzQTAwMDNGRjc1NUU1NzE5RDlDRkYyQkNBNjNGQzhCRjc5QkVDNDcKLToxMDkzQjAwMEY5QkIzRTYwMjFGOUMyRUZCNUM2RkM3NzI3RTlGQjVFMzkKLToxMDkzQzAwMDY3Q0VFOTE0RTRDNzAzOERGNzg5QjA5NzVDNjYxNjQwNTEKLToxMDkzRDAwMDNEQUNBMjNBNDJGRDJBRkVBNjYzQTgwRjRBM0QzODc5NjkKLToxMDkzRTAwMEZEOEJDNUI5QUVDOEQzMEVBMzVEMjhGREJERjU2MjZDN0IKLToxMDkzRjAwMDczRjA1M0FFNkYzRkFBOTAzRkQ3RUMwRUE0OEQyM0ZCQzIKLToxMDk0MDAwMDZBRjZFNTdBRTIyRkZGNEFGNzI1NTg4RjYyNDczQjY1RjcKLToxMDk0MTAwMERFQTMyRDU0N0Y3QUU3MkNBQUQ3OTlDMzYxQjRDNzFBNkIKLToxMDk0MjAwMEExMUVDQkFCQUU0RUNDN0YzNkVFRTBGMTIwNjlGRkMyODEKLToxMDk0MzAwMDNBREVDMjc1QTQzOEEzNDZDNENGMjZENEFGNjE4OTREQTUKLToxMDk0NDAwMDJBRjc3QjM3Mzk5OTI3QzA1MDFGNEVCNDE3NjU1Qzc3RDAKLToxMDk0NTAwMDkzOTc3RjNGNjY1MzhGNDJERjkxQ0EzMkZBOEFGM0YxQzYKLToxMDk0NjAwMDVDOTNFMkJCRjdFNzY5REQ4ODc3MzJDRUJFMjA0QkVCMzkKLToxMDk0NzAwMENDRTNGOTY3ODUwOEE3OUZFMkEyQTAxQzMxQzg3QjVCRkIKLToxMDk0ODAwMDg5RjcwRjBGRUVCRDk5RjRBMUNGOTk3NzUwRkZGOTY4RDYKLToxMDk0OTAwMEMxODRGOEZCMUM3MTRGNzQ4RUI4Mjc4QTdDM0E5Q0M0MzcKLToxMDk0QTAwMEE3RTNDQjBENzFGOTY4RTFGRUYyMEFFMkYyRDFFMkZCMkIKLToxMDk0QjAwMEM1RTdBMzg1MTNGODE5QTdGRjZDRkQyMjhBN0JGQjAxODIKLToxMDk0QzAwMENGOTc4Qzg5RTE2MTAzMTM3RjFCQTJFRkQyRkQ5N0VENEIKLToxMDk0RDAwMDI2RjJBQjM1ODg3QzU0N0ZGRDMxQjI1N0ZDNzg5Rjg2RUQKLToxMDk0RTAwMEQzQTNDNkVGNjE3MzdEQTgwMUVDNDBDQUNCMEQyNUU2N0UKLToxMDk0RjAwMEFEMUVGQzlBRTk1M0I2MUJDODdGRkU2NjEyM0RDQTdEQkQKLToxMDk1MDAwMEM5N0QzNEY0Mjg5QzdFOTJENjk5NkNGRjI2RkJDMUE1QjgKLToxMDk1MTAwMEZEN0FCMTdDRTlGREFGNTkxRTdFNTVCRUY0RDlEN0M0QTIKLToxMDk1MjAwMDk3Q0U4QjI3MEM4REE2NzlCRTg2NzhDMjA3RUU4RTJDM0YKLToxMDk1MzAwMDc0MjlDQUZDRTFGNkREM0M3Rjc4ODJERUE2RjFGOEE1NEQKLToxMDk1NDAwMDlFRTczNzI0Qzc3MUREMTMyODRFMjlFM0M2RTZFN0Y0MEEKLToxMDk1NTAwMEMxRTVDNUQ0REU4Mzc5NUY4REJCNTMyOURGQTBERTVEMTUKLToxMDk1NjAwMDRGN0E3NzcyRkM3MjNFRUI5RTgwNDdGMTM5N0I5REVFMUQKLToxMDk1NzAwMDZGRkQ0RkYzMDZGMkYzQzU3Nzg5RERBQ0Y4MkJFNjBERUUKLToxMDk1ODAwMDBDQzlGRjBBRjFDQjk3NkM5RjY2RjhFMkYwQTU3QTI0MkMKLToxMDk1OTAwMDI4RjAyMzA3Q0VFQjJBQ0JFN0Y4OTcyMkYyNEJDQzZBRDAKLToxMDk1QTAwMDgwMzlFMkZBMEZENEVGQ0E3Q0FFMUZCRjI0RjI5MUVFRUQKLToxMDk1QjAwMDRCNERBMTdCRkYyRTIzQkZBRkUwRDJGMUJDMjk5NkVCMzAKLToxMDk1QzAwMEJEMkEzRjEzRTUwMTNGQ0Y4NzVGRjgwRUMzRkI2NzBGNEUKLToxMDk1RDAwMDFCNDI3NDBGM0ZEMDY4RjNBMDFDOTM3RTI3MzlGRTgzOTMKLToxMDk1RTAwMDM5N0MzRjE3NEI0N0RFRkNGRjVERkU3MUFCOUNFRjYyQTEKLToxMDk1RjAwMEUzNkYxQjAwMDY3MUY0OTU0QzBGMDNGNTFCODhCRjJDMUQKLToxMDk2MDAwMEM4RjdDRUM5Mjc3QjVDMUI0RDcxOEI4QkU0NEIyOUU1REEKLToxMDk2MTAwMEMwQjc1MTRFRUYzMEI5RDE3RTQwM0YwQUM5QzdCNTM5MDYKLToxMDk2MjAwMEQyRkVFNkRGMjVCOEFGODBFNEQ3NDcxNjZFNEZDOEZCMDEKLToxMDk2MzAwMDNGNzJGRjNGMTkxMERFRkY5QzlFRjc2RTk2Mzc4MDc4RDEKLToxMDk2NDAwMDdFQkM0QUEzRkIwM0FCNTJCOTdDODkzRUMxRjM4NzkyMkYKLToxMDk2NTAwMEVGQzEyNENCMTU3OThGNDNDRTc3N0ZGRUZGMkQ1RjdENDEKLToxMDk2NjAwMDU4QzJFNzdGQzg1NzQxQ0U5MkZEMzI2MDlDRjZCQ0ZFREYKLToxMDk2NzAwMDAxOTFDN0Q5QUI4OTdDMTlCQTBGMjFEN0U1RUZFNTc5RkMKLToxMDk2ODAwMDc3QkYxMEVCOTNFRkQ3MDkzOUYwNTlCRTE2NDJCQzNBQjkKLToxMDk2OTAwMEY1MDdCMzE5RTNBMEU1RTU5QzdGMzY3OTZEMTQ0NzY4QkIKLToxMDk2QTAwMDBBRjFGQzlBQTZBNThDRUM3RTc5REZCNUQyRTVEQjg1QzQKLToxMDk2QjAwMEZENTZCRDZEQTNFRjlFMzZFRERDREEzRTk4RjIwRjdDRDEKLToxMDk2QzAwMEE0REY5REZFMDM3RjdGMjJEQkI3MDdEQkY5OTc0NjEyRkQKLToxMDk2RDAwMEUyMTUxNTVGN0VCQUIyQjY5Q0Q2NEI3NkJCRDM5NDc4QjIKLToxMDk2RTAwMDhGMjg5MkNGRjM4NkU0RjM0RjdERjAwNUZCMDRGQTlEQkIKLToxMDk2RjAwMEFBRTc3OURFN0VBNzY2QUZBMkJDMDNFRTBGNEY3MUY3MzMKLToxMDk3MDAwMDkyMUZBODY5MDcwOTA5NDY0OUE3NThGRkEzN0NDMjlCNzUKLToxMDk3MTAwMEE2MUQ1NTY1RjRGRDgxOTBBNThDQkU1RkYzNDdGRUJEODcKLToxMDk3MjAwMEE3NTM3N0U1MDZGNURDN0ZGRTVCNUM2RjZBNzlGMDdBMUMKLToxMDk3MzAwMEQ0MzM4QjYwMUU1NDQ5NEY3NTVGNUY0NkZFQzEyNEJBMTcKLToxMDk3NDAwMDkzRjRENjc3N0ZGNEJCRTY2MEFCMTJBM0M3RjUwNjJFODEKLToxMDk3NTAwMDI3QTU3QzdCMzlERkNERkRENTRFOTEzRkQ4MzM5OUNEMDAKLToxMDk3NjAwMEI2QzVDQTM2Njc2MjVFRTU4QUJDNkI1RkM2RjVCQzlDNEYKLToxMDk3NzAwMENGRTMwNTMyQ0U1RTZDMDZFQjczRjBGOTc4NTgyQ0UyM0QKLToxMDk3ODAwMEVDOTM0NTdFMDQwQjk4NjM3OTExODMyRjFDNjc5N0VCNEMKLToxMDk3OTAwMDkzNjUxOTY3NEYzOTI3N0U1RkMwNkUyNEJDNDg2REU3MUIKLToxMDk3QTAwMDdDODMwMTVFQTA5RTdENzVCNDc3M0NERURCMUFEQTE5RkUKLToxMDk3QjAwMEJFMUFFMTM1MDhDMTRGNzlBQTkxQkIyRkMzRjg0NTg2N0YKLToxMDk3QzAwMDdBMzVDNjJGQjYyQzE5QjMwRkUzQUFFQUVBREU2RkUwQUEKLToxMDk3RDAwMEQxQjgzQkVDRDU2ODYyNTZCQUJDQkEwMkUyMkZDREE1MkYKLToxMDk3RTAwMDg4RkZENUJGMzVGMDdDQzZENTI5MjRFRjNCMEIxQjI4NUQKLToxMDk3RjAwMDlGRjFGNERCQTY4NDdCM0FDOUNGMDA1QkVFNDJCRkQxNzgKLToxMDk4MDAwMEUwRjYzNzI5N0U5MEJBNDNFOTM3NEZCNUFBQzA0NkZCNDgKLToxMDk4MTAwMEM0RjZFODg3NEE2REVGMEQ1NEEyNUZFNTFFODU3RjNCRDUKLToxMDk4MjAwMDEyNTZBRkI4RDBGRTU3NzVBODc3Q0NEQUM5RUY3RENGMDYKLToxMDk4MzAwMEVBNzA1NDlCODk5RjJBM0NGRTcyQjU5M0Y4QTRCQUZBNDkKLToxMDk4NDAwMDA2MUREQTY5NkEwQkEzRUZCNDU1MTY3MDNGRjZCMDRFRTkKLToxMDk4NTAwMEJCMEVDRkZEREZCRUQwRjcxQjU3MUI1RTEwQ0I4RjQzNzcKLToxMDk4NjAwMDcwMzU5QUEyMDc1Q0M1QjE3OEEwQ0M4QjFCRThGQkU3RUEKLToxMDk4NzAwMDUyMUUyNUVCQjNFN0U5QjE0MjFFRjVFOUYzNDk3ODNDMDYKLToxMDk4ODAwMDUwM0Y4OURGMTI5RkZGQ0RDMDQ4MEZGQjM3QzU0Q0Y3MTMKLToxMDk4OTAwMEMxMjQ1RUI3QzkzQ0ZGMkZCODVGQjc0OEU0REIxQzVCNEYKLToxMDk4QTAwMEYzOUZBM0Y5N0Q3NzE5NEYwOUYyM0MyOTQzNjQ2NTFFQTQKLToxMDk4QjAwMEMxMkJGMkNEMDBFRTdCODc0M0Q3MzQ5MkZDNjE0RDM0NEYKLToxMDk4QzAwMENFNkFGRTdEQjVBMkY2MjFDQjJCQ0JGMTY5NjcwQTJDQkYKLToxMDk4RDAwMEUxRDhBRTA1NDU0ODk3MDFDMDgzNjFGREUwODFCMTgwQzQKLToxMDk4RTAwMERGNTc1MTU3QTdEMEI5QTlFQkU4Q0JEMjRDNzU2NEQxNUIKLToxMDk4RjAwMEI5QTkwRkYyRjM2MTA1N0MzRjMyOUUyQkZEOTY5RkU1REYKLToxMDk5MDAwMEZCNkU0NjNDRUNCQkJGQjVDNENBRUY2Rjg5RkJDMUE5NzcKLToxMDk5MTAwMDRCREU3RTFBRUY0NTZEMTFGRUUzN0Q3QjJFQTVERjg1QzQKLToxMDk5MjAwMDM4QkI1QTU1NTA0RjNERUJBOEEzREY0MUFBMkJFMEZBQjQKLToxMDk5MzAwMDUyQUFEQUNCRUNCNjc4RkNEQzQ3NzlCNTgzNzdGM0ZDMzYKLToxMDk5NDAwMDQwNTVEQzdGNTY1NzNCQjcyMjNDNkI5QzNFQ0ExRkZFRkUKLToxMDk5NTAwMDQ2NUI5ODdFM0E2MThGRkQzOEM1RTk0MDJGQTI3QkFFMDkKLToxMDk5NjAwMDI3NUY1MEE0NUU5NDIwMEZBNUREOTY2QzhGREQ1MUYwMkIKLToxMDk5NzAwMEJGQUIyNzA1RTQ3QzVGRDVDRTYyODlGNjY2NUY3QjY5NjUKLToxMDk5ODAwMDNGMjZEQjEzNDlGRDA3RDI3Rjk4MTY0OEM4OTM3OTQwREMKLToxMDk5OTAwMDlDQkI5NEVGQjk4MjM3Q0FGQzk5QkVGQkNFMkM2OEMxNDAKLToxMDk5QTAwMEZCMTIyMzkwMjhDN0M2RjI4ODk4QzgyRkRBQTA1ODNEMkEKLToxMDk5QjAwMEE4MkYwRDk0NDdENDk3RTdDMzlBMkZFM0ZFQzhFNjJCNTAKLToxMDk5QzAwMEYwMjlGMzkwNjQ5RTkxMDVGMzREMzJDRUNGMzdCMTYwMEMKLToxMDk5RDAwMEJFNDkwNkZFN0UwNkJGMzcyREYzNDU1QTBENkVDQTNGQkYKLToxMDk5RTAwMDA5RkM5ODUxMUM1MTk5NTI0QkZFQkE3NEFGOTFGMEVGOUIKLToxMDk5RjAwMDBDMEI2RUM0RUZDNzA3QTZEOUU4N0UzOERFMjc0MkJDNDEKLToxMDlBMDAwMDhGMkEyRTFBNzc3Q0FEMjZEQkVCQjA3RERGNzcwOEVCNTMKLToxMDlBMTAwMDE4RDVBNzBGRDU3MjUwMEZCMzQwM0Q3RTFGQjlFRkJFQ0EKLToxMDlBMjAwMEY0NkNGRUJERjZFNDdDMTM5OUY3MjRFM0MwQjlDMzlGNDAKLToxMDlBMzAwMDUzRDAyRjhBNkU3RkNBM0ZGODgxRTg1N0NDQzdFOUZDMjQKLToxMDlBNDAwMEJFOUJGODQ2NTYyQkNGNkI4QTVFQzlFQ0U4OTdBRjk2NjMKLToxMDlBNTAwMEZDQzc5Qzc4QUVFQjE1NUYzMUQyRTc3QTJCRkY1RTQwRjYKLToxMDlBNjAwMDE3RjNCNEVCQTE3Qzc3QzE2MEVFRDc2MUVFQkQzQTYyMkIKLToxMDlBNzAwMEQ4MURGNDdCMEY5QjlDREE2QjA1OTkzMTdDOTJFQjYyQ0QKLToxMDlBODAwMDFCRjhCRUNGRTBGRDMwMjUzNkRGOTk3OTdGMkI0NEZERjIKLToxMDlBOTAwMEFBQkFDN0M0RjEzMjY5RkU0RDdEREY2QjA5NUE1MDlFRTgKLToxMDlBQTAwMEZDQjk4MEYxRUY4QzI2RTlCQkYyRjk2Nzg5RkY4MjJGQzAKLToxMDlBQjAwMENCRjkwN0RBOUZDNENGMEJFOUYxMTJGRjA2QzJCNzQwMUEKLToxMDlBQzAwMEI1MzhBNzIzMjlBNDdGNDg3Q0RCQjc2QzNCN0Q4NzcwMjIKLToxMDlBRDAwMEZGQjIxMDNEQ0Y1ODk0OTAxRUVGRDU1QUEyMzM5MDMzNjkKLToxMDlBRTAwMDFFREZGMjVGMzdFMUY3M0NDRUE0NDYwQkYxN0IyMEQxQkQKLToxMDlBRjAwMDg3RjU1RTJBNjc0NjhGNjA5OTE1NURDMUNCQzNBMjVCNkYKLToxMDlCMDAwMEYwRkIyMDU5MEZCRkY4MkQyQUUzNzlFNjMyNzZBRTIwMUMKLToxMDlCMTAwMEY0QUQ4MDhEQkVDQkI1QjIxN0U1NTY3OTUyMUU0QkQyNEYKLToxMDlCMjAwMDc3MEM1MkM0RUYwNzY1REI4Q0E0NEY2NjhCQjgxRUFCNzUKLToxMDlCMzAwMDExN0EzRDQ2QTBBMERDOUE1MzQ2NzEzQzFCNzNFRkU4QjYKLToxMDlCNDAwMEM1RkE3QzEzRkZERTAxMDNGQ0M3RkE2MUM1M0MxRjgyMjYKLToxMDlCNTAwMEYxN0RCMzdDRTE5RjY2OTEwMEZEMUU2MEIxODNGQUY3NTEKLToxMDlCNjAwMEYxRjExRDI2MTE5RkUyRjMxRjdBOTZDNzExNjU1RTJGNTIKLToxMDlCNzAwMDYzRjYwMkQ0ODc2QzZFOTY1MDk2REYwMTYxQUFCRDAwMzEKLToxMDlCODAwMEVGRkRCNzRBQkY5RjI4QkY5OEUyQ0IyRDhDRDM5NzBFMkQKLToxMDlCOTAwMDVERkJDMzkxRjRCQjI0Q0ZGRDY4MjhGMkNERUI4Qzg5MkIKLToxMDlCQTAwMERGNzU5NkNGM0YxNDcxN0JFNThDRjg3RUUxMUQyOUJFRjEKLToxMDlCQjAwMDIxODU5OUY4QkIyNDMzMjZFMEE3NjhBNzY3NTQxOTFEQUYKLToxMDlCQzAwMEE0QkYzREExNDczRTk1MjlGMEMzMzE4REFGQ0Y1MUUzRUUKLToxMDlCRDAwMDU1RjBGNzQwRTRGNzAzMzM3RDJBRjkwOTk4QUY1MzhGMjYKLToxMDlCRTAwMDcyMzVGM0I4OTdGMjA1MUJDQ0QxNDJGQ0REOTYzN0NDMjkKLToxMDlCRjAwMEJFQ0I3MEZDQjM3NTQ3RUZBNDc4NjFFRUExMjM5OERGNkMKLToxMDlDMDAwMDcxQzhEMDMxM0UwREU1NDhCMUY4OUUwNDA2NjRBMTdDRDAKLToxMDlDMTAwMDIwQUY4OEVDQzEzRUZFMzA0Q0ExNzhFNkE0NjlGQ0RFQTIKLToxMDlDMjAwMEVCNDQxNjUyRjE5QzI3RDhGOTNEQUMwOUU1QzU5RTU2ODgKLToxMDlDMzAwMDk4NkY5MkM4MEY5OTcwRDg5Qjg2RkM2REMyNzcyMjJBQzQKLToxMDlDNDAwMEZGREU0NTU0OERDRkM3OTA0RkU2MzJCOEUzRTlFMTdBQTUKLToxMDlDNTAwMDc3NUM5OUUxNzc4RTEzQ0IzNzdBMTJDQkRGQUFGQzYyNUYKLToxMDlDNjAwMDc4N0M3OTk0QTI0REM0N0RCRUE4ODhFRjQ2MDA3RkUxNDAKLToxMDlDNzAwMEZCRTI3OTg3M0YxN0Y2RENBNTJFNjYyRTQyN0Y4NTUzREYKLToxMDlDODAwMDA5QTBCRDcwRTlGM0I5MTQ2Nzc5QkU5MjUxMzk2QkJCNzUKLToxMDlDOTAwMDc5OUIzOTdFRkZFQjc0M0MwRTJERkNFMEYyNzc4REIwQTIKLToxMDlDQTAwMDBFRTVFRDczN0ZDODIyNzg2NUQ5ODBERjNBODlGQjEwMTUKLToxMDlDQjAwMEJFRUQxMzc0QkI0RkQwNjk0NTlFRDk4QUZDN0Y5RkMxMEUKLToxMDlDQzAwMEJEOTlGMDNDRDVFQzQ2M0ZENURFNTQyMzdEMzdCNjc1QzMKLToxMDlDRDAwMDIxRkY1RDA0MjVDRENDOEMzMEFFN0UyNjJGNDMzQkY2OTQKLToxMDlDRTAwMDREQThENzU3OTgyOTlGNjQ5RkM4RDM2RUZEQjE0QTdFNkYKLToxMDlDRjAwMDJFQUNDN0VGRjlFQUVGQjU5MjdGQkIyNkFERjQ3QjU4RTcKLToxMDlEMDAwMEFGNEYzM0QyM0Q4OUJEQTkxNTNFMzExRjdEQ0ZGRUQxNjYKLToxMDlEMTAwMDU0NzMxODdGNUYyMUY5RkI5RDg3NzA1RDA4Mzc1OEQ3MTIKLToxMDlEMjAwMDYzN0MxRDQ0OEZGQTBBMjNFOUUxRjJERTNBOEM0M0YxQTkKLToxMDlEMzAwMDM3N0RBRTk5RTZEQkU3QjBFRjQ1QkM2QkZEODAzNDNEODcKLToxMDlENDAwMEE4QUY3NDYzRkU5N0M0RUY5QUI0NEFGQUJEMTJBMEJFREUKLToxMDlENTAwMEExRjFERjY3RDc2Nzc5RENGQ0JFMkRGRjFEOEVEMkJFNzcKLToxMDlENjAwMERGRTU4MDY5QTExREZFODYxMTIzQkFFNUYxQkMwMjA5NzkKLToxMDlENzAwMDc3QTY2QUQ4M0U4N0M5MzJCRjZGOTZENTU3QUU1MkU5RUIKLToxMDlEODAwMEJCNDE4QTJDQjc1MEY5MjE1MTJGQkYzN0ZBNEVBMTlCMDYKLToxMDlEOTAwMERGNEJFRTc5RTUzRjEwNkY4N0E2MDE1Q0UwOUMzQzI5MjQKLToxMDlEQTAwMEZEREY3NzdBQjI5MEYzRjdGM0NGQUZDMjg1N0U3RjA1MDAKLToxMDlEQjAwMEY3MzkzMkI2RkY3RDBFOEZDQjFCNTdFRUU3NUM4Mjg4RkEKLToxMDlEQzAwMDZGQzlFN0IyQ0ZFMjcxQTM5RkVEQzJFMzcxQjhDQTdENUMKLToxMDlERDAwMEU4NzMzOTNDRkJGNjkxRDFGRjNFREUxMUZCMDg4OUZCQUQKLToxMDlERTAwMEQ5QzlGNTA3MEI3NTVGRjczRUZCQzVCRjdGN0E5RjU5NTEKLToxMDlERjAwMDg5RkJGQzFBRDcxOTUxQkU4Njc1RUEwQjYxN0RCNkQ4NkUKLToxMDlFMDAwMEZBRTg2N0M3MkE5MDZGNzJGQzlCMjhGMjlCNTk2OTYyMzcKLToxMDlFMTAwMDVFMTJBQkY0OThCOUJFOTg5ODg3NzQ5REIyQjkwREU1RkYKLToxMDlFMjAwMEVCNDMyMkNFRkQ4QUEwQUIwMzI5M0YxOThBRkFENjJCMzkKLToxMDlFMzAwMDMzNEFGNjEzQkYxREQ0RDI4NkM0MjVGOUIzRTRGRjY3QjUKLToxMDlFNDAwMDczOEU1NjYwMTlFNDQwMTRFNUQ1OUQ4MzBGQ0RDMEMxRDMKLToxMDlFNTAwMEY3M0IxRTFBOEFGMjBBRjhFNkM3ODU5OUU3QUY1M0QyOTQKLToxMDlFNjAwMDZGREY3QTgxN0U5MThFMjRGRDI2QUY1RkQyMTFCQjI5RjAKLToxMDlFNzAwMDQ0MDk5RDVEMkM0QzRGMTdFM0Y5RjNBMDk3RDBGN0QxMUYKLToxMDlFODAwMDk5QkIyMEI2M0YyMEYyMDlFNjY2QkU4Rjk2MDBBREZCNzcKLToxMDlFOTAwMDNBQzcwMzk0Mzc2ODJERjYxOThCNjA1REQzMkZGQjk4NzIKLToxMDlFQTAwMEJFQTNDNDVDNzVDMzUxOEVDMDdBNEQ0NTYzRkZFRkQ2MjcKLToxMDlFQjAwMDBCRkMyOTA3REY0QjNEM0Y1OUFGQkY1MDFFQjk1QzY3MTQKLToxMDlFQzAwMDMyM0Y5NEVCNTFBNjZDMjczRERFMEY3QTNDQ0YzMzU3REYKLToxMDlFRDAwMDg4REZGQkVCNzU5QzBGRUY1NDQ4QUY2RjAyMzk4MzcyM0MKLToxMDlFRTAwMDRBN0VDRkY3OUExMjZCMUI3RTJGNzI5NzgxRkI1MzAzMkEKLToxMDlFRjAwMENGOUFEQzg5REY1NzRBQ0UzNzE3RjZDNDUyMjZFRDA1RDQKLToxMDlGMDAwMEZFMUQ4OTQ2M0JGRjdFOTI5MDMzOUQ3NzBDOTZERjU3NkUKLToxMDlGMTAwMEUyRjIxMEU0NTRDMkY3OTVFQURDODlERjU3MUFDMDVFMUEKLToxMDlGMjAwMDAwQkI4MEY0MzMzNjQ4MjdFQzAyMkVBNzNCQUY3NERCMkUKLToxMDlGMzAwMDAzOENGQ0NGRkNGNzI1NkYzMTBBN0QxMDYwOTExNUZCNzcKLToxMDlGNDAwMEZFMUJEODAxRjQ1REJCMUI4QThBQzVGN0I1ODJGQ0Y3RkUKLToxMDlGNTAwMDNDODRGRTlGRUM4RjRFQzlGNkREODQ3ODMyN0JBNDU2OUMKLToxMDlGNjAwMDg4M0YyRDMzQ0JDOEZEQ0Q4MDZGOUI3QjE5QTY0RDM2MjYKLToxMDlGNzAwMDNGOEFERjQ3QkQ5RTM1QkZBNTFCNDJGODM2MEREQjRGM0MKLToxMDlGODAwMEJGRjQ2M0ZFRERENDE4QkU3REJCMjg5M0NCMjUxNDMyMEQKLToxMDlGOTAwMDE3QTJFMzIzNEVERjBDMUNBN0QzMTFGQTIzN0UzRjdEQ0IKLToxMDlGQTAwMDUzOEY4OUUwMkRGMzUyOTNFOTNCNkUzREM3MEQ3QzNEMDUKLToxMDlGQjAwMDRFQkQ5RUQ2MzM4N0YwM0Y2OTNEMTc4M0Y3RjE3ODk1MDQKLToxMDlGQzAwMENEMzg3RTBGODRGRjc4RkYyMzc1NEMwQ0ZGNDcyOUJFRTgKLToxMDlGRDAwMDNCNzBERTNFM0E1OEM5RURBRUYzRDZBREI3RDE3OURGNkUKLToxMDlGRTAwMDdDMEI4RkNCRjk1M0E0OURBQzREQ0FDOTQyM0YyNDlGMzMKLToxMDlGRjAwMEZGRTZENTFDMkY2RUFFRTM3OTQ0OTM3QjFBMjkwRUM3N0EKLToxMEEwMDAwMDZBNzg1Q0NEMDNGRkEzREY4NzExRkM2RDlBQjNDQzgwMjcKLToxMEEwMTAwMEE4RjczOUZCOUUwMUZEOUNEMzI2MjVDNkRGQTY5QkFGODIKLToxMEEwMjAwMEEzNzhERkNERDMwQzA5QkY4RjI5RTEzMDVERkNGRUY2QUMKLToxMEEwMzAwMEY0QTRERkM1NEM4NjRCNzJEQ0FFOEYxRjg4RkRFNkUxRDEKLToxMEEwNDAwMEVGQzVDMDMzOUZGMTdCMzczOUUyNzdDQzM2MTRGNUM1QzUKLToxMEEwNTAwMEY3ODY3RkM1RjhERUMzMUM4RjJFMkVCRUI3REYxMEE1OTYKLToxMEEwNjAwMEVGM0JCQzlDMzk3N0YzNDJBMDlCRTEzRjFENDlERjdCNkUKLToxMEEwNzAwMEJGMzY2QkRFQTNFQkEwRkNCMzREOTc1MEY5RTVBQ0VGMTgKLToxMEEwODAwMDJFM0U4NEY1NUI0QUE4NUNBM0ZCNzgwNkQyNDE2OUM1RTUKLToxMEEwOTAwMDJEMTNGMUZCRjhGQjJEN0MxQzk3RDVENzg5QkY5QkUyRDQKLToxMEEwQTAwMDFBM0Q3ODBDRTYwRkQ3MThBM0Q0RUU4NkNCMUEyRkM3MkIKLToxMEEwQjAwMDdDQTgxQTJCMkZCRjVFRjZGQjMxNTQxRTJDQ0E2MzVFQTAKLToxMEEwQzAwMEJDMDRDQkZCOTU4RjY3RjQxNzFGQkNCNDU0MDlFM0VGQjYKLToxMEEwRDAwMEEzRDVBNEYzRjY5M0M2M0M5MThCRkVBMjlBNkE1RUJFMEEKLToxMEEwRTAwMEQ0NTNCNTdBMDhENkVCM0U5OUQxOUYzRUYyODZCMDg3MUQKLToxMEEwRjAwMEE0N0VFRDE1RjRGRUJDNzZCNDBERUYxMTdBNkQ4QTA3REYKLToxMEExMDAwMEVGOEI3ODJCOEZGMkVGQUE5OTc5NUU4OTU3MkI1M0YxNTkKLToxMEExMTAwMEJCOUJENTFBRjdGMzhFQjdCNUU0MjA1RkJDQzk2NzJDOUIKLToxMEExMjAwMDQ3N0ZCRURENTZEQzg2N0FGMUEwQ0FBQUIxNzhERUUzQUQKLToxMEExMzAwMENEOENGMDA5RThFQTEwRDFENTE1MUYxN0E2MjEzMkRCMjYKLToxMEExNDAwMDEyRTk0QUUyRUQ2NDQ5NEYzNTg5NzQwM0ZDRTBGN0ZDRkIKLToxMEExNTAwMDFDMTNFOTAxQzY3RDg3RjhDNzU1ODlGMkFBOEZERjI3NEUKLToxMEExNjAwMEQxNkQzMjNFMEVBODE3QjA0NDNFMThDM0QzOTAxMjhGNjMKLToxMEExNzAwMDlGNUQ0OEFGOUM3RTNGQzI3NTE4NzVCRDZFN0M1RkE0MjUKLToxMEExODAwMDc4MkVBMTQ0OUIwMUY0MEJCOTNFNzQ1QkIyMzFFN0FGNkEKLToxMEExOTAwMDBCRkY1NEE5OEZGMzE1RDhFRDU5MzgyRkFGODc3RTFBQ0UKLToxMEExQTAwMEZFOTg5RDVDMTdDQ0ZGMDVDMTY3MjU1RjRGOTdEMjJDQTkKLToxMEExQjAwMDdFMUY4NURCNjFEMkRGRDEyNEY2RkJERjc5ODQyOUMzRTIKLToxMEExQzAwMDAwODAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwNUQKLToxMEExRDAwMDAwMEJFNTNEMDk3ODk0RDVCNUY3OUY3RkI2MjQ5MzY0Q0QKLToxMEExRTAwMDkyOTA5MDEwMDg5MzA0NDI4MDI0NENDMjIyQ0FFMkIwOUMKLToxMEExRjAwMDA0QTMyQzBFOUI4MDIyRkUwOTVCQzg0MjAyRTgzM0I2MDIKLToxMEEyMDAwMEQ4MEM4NDREOEI2REE4QThBOEE4MDMwMkEyNDUwQzBBRkYKLToxMEEyMTAwMDg4MUFFOEIwODg1ODUxNjNENUQ2QTVEMjQ0QURFQzEwNjEKLToxMEEyMjAwMDgzQjZEOEZBRUEzQkU3REM3QjMzRjNGRjQ5OEFGNEJEMTcKLToxMEEyMzAwMEY3N0Q3RERGODNEQUNCRkRFRjdFQ0VCOUU3OUM3QkNFNjkKLToxMEEyNDAwMEI5NzdEODNFQ0JCOUM2NEM0NjdGN0U0ODYzNkM1MDM4NTAKLToxMEEyNTAwMEYzODVFNTMxOTZDOERDNkI1NDE1M0U3NkNBRURFM0NENDcKLToxMEEyNjAwMEM2RDJBRTMxNUZGNTY1MEMzRkZENzAzRDYzMTcyRDhFOTQKLToxMEEyNzAwMDM1NEEzNDYzMTVFMTUxMzlBQzFGNjM1M0VDREUwNzZDOEEKLToxMEEyODAwMDI2QzZBNkM2Q0NCNjMwRTg2NzFBRjNFRDg5NDk2N0VDNTYKLToxMEEyOTAwMDg1MDgyRERBMzUxMERBOTk3Q0ZCMUIxNUM2RTYzMjhGNUUKLToxMEEyQTAwMDk1QzFGNzZDQzVFM0M0RUY4QzA1NjA1MEM2MTZFMjNGNUMKLToxMEEyQjAwMDVEQzE3RUJCNDE1RjBDRTZCMUQwRUUwOEE4MzlGMDZGRkUKLToxMEEyQzAwMDBGRUJEMTI5ODEzMTQ1RDQ2Mzg2Nzk0MzdEMEY4Qjg1OEUKLToxMEEyRDAwMEYyRkEzN0JFNTNCMEZFQUEzQTA1QzdFOUNBMUE5MjMwNUQKLToxMEEyRTAwMDRENjI5NTk0NkY1RDk3NjEzRDM1OTFCODU2QzY5QTczRUUKLToxMEEyRjAwMDZERkVDRDM4ODgxOUZFMUJDMEQ4RjFDMjBDRkZGRDRBOTcKLToxMEEzMDAwMDcwNUVDNzE1OTY2OTg2N0EzRTI1RENCRDM1OTVCMUJGNkUKLToxMEEzMTAwMDg2QzFGQUUxN0IyNzAxODcyMTQ1RkYzMTgxNDVCNTlENDMKLToxMEEzMjAwMDZGOTU5REQ3QkIzQjNDNkEzM0E2RDc2Nzg0QUYzMDQ1NUEKLToxMEEzMzAwMDYzRkIxNDNGRDZFRjE0MEU2OTRFNzBGRTdGMzUzMUNEQUUKLToxMEEzNDAwMDBFRjNCRDVCODU3NUE4Qjg4RUU2NjU2NjE4RUYwOTU2RjUKLToxMEEzNTAwMDRCRjk0OTJFNTgzNEMwQUY3M0VCN0E3QzBBRTJDOTZBRDQKLToxMEEzNjAwMDUyRUVGMDNBNjA0REY4RTdGQTYwM0FDOTA1MDA4RDI3RTEKLToxMEEzNzAwMDcwMjkyQzIxMDg2RkU2NTI5ODFERjI0NTIyMkZFMURENEQKLToxMEEzODAwMEM5RUFFQThBRkQxOEUxNUM2NEI3MzUxMTdDRDdFNDdCNDEKLToxMEEzOTAwMDFBRURDMUVGQUNGNjExNEY2ODNGMURENTUzMDBBRUM5QTEKLToxMEEzQTAwMEIxNkRFMTBGRjNBN0Y5OERBRjFBRTVGRDMyMEVDNzE3QjYKLToxMEEzQjAwMEY4QjgyNzkyRjAzMUZFOUUxMUY0NUQ5OTk0QTkzNEMyNDkKLToxMEEzQzAwMEJDNDYxNUI4Mjg4RDFERjA5RTk5NjUxMzVFQTZENzY1MEQKLToxMEEzRDAwMDA1RjFGNDc1QkMzNjhCRThDQkRDMzg3MDIyRTBGNkVEODUKLToxMEEzRTAwMDgxQ0ZFNDZBNTA3RUMyQzQ4QUIxOUUxMTNFMjUwODlGODcKLToxMEEzRjAwMDgxNkRFMUQzNEE3RjA2Mzg3NDM0RkZENzIyQkM2NTM4QkIKLToxMEE0MDAwMEVFNzlBNTYxMTAxNkM2Nzc3MTBBQjg2QkE5ODg5RjE4RjYKLToxMEE0MTAwMDY3RUE4ODE4ODRGQkY3MzAyRUQwRkQxNDJDMDIzQzNGRUQKLToxMEE0MjAwMDk2QTBERDg5RURBNjMxNkZCRTE5RDYxQjVCQTA1OTM0MEQKLToxMEE0MzAwMDA3MEQ2N0MyRjkyQzc2RjJGOUU0QUIwRUEyQ0I5NjFEOUMKLToxMEE0NDAwMDhBREYwNkY1NDY3QjdBM0YzMjE0RjIxNUM3MkNDQzBGMTMKLToxMEE0NTAwMEU1MkQ4Q0QzNkRDQjQ2RDVFRjAzN0E5OUZGRTY0QjgzODAKLToxMEE0NjAwMDYwODdCMTJGMDQ5REY2REE2MDYyMkU4OTBGRjhBRkI3Q0UKLToxMEE0NzAwMDNGOUNCOTMyODNGOUJFREI2Mzc1RjlFQ0JBMkVCQUZBQTgKLToxMEE0ODAwMEZERjZBNUU5Q0E3MzAzN0Q3NEU1RkQ4RkU1RTlGMjAzRTYKLToxMEE0OTAwMDFCQUVEM0Q1QkZFNkEzOTFCQUZDQjU4RDM3RTlFQTBGNjEKLToxMEE0QTAwMDM5MzU0OTk3MUZENjdDQUJBRTdFNEQxOEVDOUY3RTA4QTAKLToxMEE0QjAwMDZFNEY0MzI2QzA2NThFQzBEM0Y1OTc4Qjc0RURDRTQ2QTQKLToxMEE0QzAwMDhEMzk4NkZCNkFDRURBRjlFMzcwNUY4RDYwQTVCQTdFQkUKLToxMEE0RDAwMDU4QURFNTczQTRDQjRBRjg4QkY4OUNDN0JDRDEwMTgwN0EKLToxMEE0RTAwMDU3M0U2QjNFOUEwQ0YwNUJFODU3REMwOEI3RjkxQjc4RDcKLToxMEE0RjAwMDNERDk2RUMxQkU0NTIzNjMzMEY1RUJCRjk3MzI3MzMwNTMKLToxMEE1MDAwMDBGRkQ1NEZENzFEMzZGOEY4NDk0OEY3NjE2OUE5MEZFNTEKLToxMEE1MTAwMEVBNUM5MTlEOTA2RUQ4MzVFQzlBMUZENDc2RjFFQjBFRTMKLToxMEE1MjAwMDIwRkUzRTUwREQzNkY4QjRGODREOTVGNkMxRTJFNzE1NTEKLToxMEE1MzAwMDNGODM3RTMzNThDRjY4Q0M1NzFDNTM5OTFGRjA3RjkyQ0UKLToxMEE1NDAwMDU1M0UzQzE0RDJCRjU2RkI3RjdCQTQ2NzEwM0VCNjQ0RjkKLToxMEE1NTAwMDNEOUVDMzVDN0EzQzQ3NjRFQUYxMUNFOUQ2RTMzOTdBNTQKLToxMEE1NjAwMEIwMUVDRjMxMUUzRDlFRTMwQUY0Nzg4RUY3RUFGMURDOEYKLToxMEE1NzAwMDc5QkExRUNGNDk5QTFFQ0ZDOUM1N0EzQzc3QUJENEUzQ0UKLToxMEE1ODAwMEI5N0I5NTFFOUZBOUJFMTIzREZFMENGODk3RkMzNzdENDYKLToxMEE1OTAwMENENjI1REJENTYzQUYwMTY4RkMzQjQ2N0VENEY3NEZEQzIKLToxMEE1QTAwMDk2QUE2NTU2NjYwQUQyODMwRkZFMjIzREY0NjJDQzFENDAKLToxMEE1QjAwMDAwMzgyRjA0M0MwNDVDNkRFOUEwQjg3RUREQUFFNDdGN0UKLToxMEE1QzAwMDgxMEU5QTExRkYxMTIxRjg1NzY3NDY2QkVERjA2Qjk5RDgKLToxMEE1RDAwMDRBQkM4MkJDRkM4QjBCRjg0ODc4QUFGNjFEQTZEMzdCM0MKLToxMEE1RTAwMDdEOUQ2MjA2QkVDMUJDODVCREJDOTE0MUJFNjc5NEE3N0UKLToxMEE1RjAwMDUyOEVBMjNDMzIwRjBBQ0FBMzhFRjg1QTFCMzkzQTQxMzYKLToxMEE2MDAwMENBOUYwRUU0QThBQjVCOTAwRjAyNDAzRTY2NUNDRTMzNUYKLToxMEE2MTAwMEI2RDY4NEYzOTgyMUU4RkE1MDM4QTdDQjRCNTg3NDJENUUKLToxMEE2MjAwMEQ0ODMzQTgzNjE1RTFGRTNCQzYxOUM4RkMzRkIxRUMxNzAKLToxMEE2MzAwMDdEN0EyQkFCQjM2MEZGMzM1OTAzQTVCMzU4MzNBNTFBMEEKLToxMEE2NDAwMDczOTJERTUwQzREQzk0Q0U2MTVFNEFERkI2NkJDOUE5NUEKLToxMEE2NTAwMEMwMzdDQkVDOEQ4MzUwRUZGODRCRTE3QjI3MTQ5Q0NDQkIKLToxMEE2NjAwMEYxMzg5QzZDODc3MDk1RkNGQTdERkMyN0Q0RjNBNjdBQjAKLToxMEE2NzAwMEQzNTMyMTNGREFFRUJBRjMyMUY4NzQwOEU1MDRGMkRGOTAKLToxMEE2ODAwMDcxNzEzNDVGNjZGNjY2NEZDQTZFQUY5RkU1MjQzNzVFMjAKLToxMEE2OTAwMDUzMzQwREY5QUUyRkM5RUVERTBBNkJFQjlCQ0NFQzQ5QkYKLToxMEE2QTAwMDI4RTcxMkZENjk5MzAwM0Y3OUE5N0FGOUQyNDdEMEM0MEYKLToxMEE2QjAwMEYzNURFQTE2QTM5RUM0OTgzRjE2RTVDM0Q1OEUzQjNDRDYKLToxMEE2QzAwMEQ1NzMyREFFNUZENkJGRDI3QUFERDZCQTQ1MzhDRkU2QjgKLToxMEE2RDAwMDcyODc3QjMzRDBFNzA3MDIxRjRGREY2MjBCQTg1MTQxMUYKLToxMEE2RTAwMDNBRkEyODYyRDZEMTc4QzBEQjVEMTFEQTBERDhGRkY0RDIKLToxMEE2RjAwMDY5MzdBRUMyQkM3MjI4Q0VCNTE4RTY3N0IxMTBFMENEOEUKLToxMEE3MDAwMEUxM0Y5NkMzNUZFQjlFMDA0QjNDREY0REVCMTU4REYwQjgKLToxMEE3MTAwMEY3NzJGOEMzM0ZCMkJERURDRTlGQ0Y2Nzk0QzJDNzdGM0IKLToxMEE3MjAwMDJENDI5QjgyRkQxQzMyMzVBNEI4MTExRUU2ODY0MUE0NDEKLToxMEE3MzAwMDc3M0FFMkE5OUZGMzU2MEU5NzhFRTAzMDMyQTJEQjRDQjcKLToxMEE3NDAwMDVDRDcxQzlCQ0RBRDQyOUYyMzE1OEVENzJGRTNFRTk4OEYKLToxMEE3NTAwMDU1MDFGRjlDNkJGMjI2MDQ1NEREQkM4QjEwREY2NUNFRTcKLToxMEE3NjAwMEMyRUU0OTQwMzdFNzJENjJERUY2NzgwMTc3NTcxNkVFRTQKLToxMEE3NzAwMEFCOEVFNjVEODNGREEzMUU3OEFGRTI0NzNEOTBGRTQwQzEKLToxMEE3ODAwMEZFNjU1RjhDRkY3RUM4REI0Qzk3M0U5ODhDRkE0QkI2MUIKLToxMEE3OTAwMEM5QkQxOThBMzY4NjQzRDc0MEVGRUYwQTc4M0Y2MTgxRjkKLToxMEE3QTAwMDdDMkM3RDVGODNERjEzQzM3OUZCQzQ4NzRERkUxQTY4NjEKLToxMEE3QjAwMEVGMURGOTBBRTFFOUU5ODUwRTVBNEYyMTczNTk3MTkzQUEKLToxMEE3QzAwMENEMTZGQUYzOUY0N0ZDN0Q3RjIzRTBDMzk3QUFGRDE0QzMKLToxMEE3RDAwMEQ3NzE0NzlDMjlFNTAzOUE4N0Q2MTdGNTFEMzZGNEM3MkMKLToxMEE3RTAwMEQxQkZEQ0E3OTM5QzdDMDk3MzA1REMyNjMzMEZFREJCM0UKLToxMEE3RjAwMEE5NENCM0UwQjhCRkJCNjBGNTIwRkZGQzlERTAyN0EwRUIKLToxMEE4MDAwMERGRDNGNzE5Q0M0RkU5NkQyQzQwRjU2RjY3OEQ5NDdGM0UKLToxMEE4MTAwMDJGMjJBNzVCMTVDQzZGRTIyM0JEN0EyMjdGMEQ4MUZCMkYKLToxMEE4MjAwMDNBODJCQjVEQkJBMzEzQTc5NzkzOUQxMUVFRUJFMzdGMjkKLToxMEE4MzAwMDE0RkQ0RTE0RjQwMkZCRjU1MUE0MTdEOEFGMDM3MkQzRTQKLToxMEE4NDAwMDQyRjZDRDY4NEUyRkNDRUNFQ0Y5Q0ZGNjRENDMwQjk3OEEKLToxMEE4NTAwMDE3QzAxODFENDlCMEZFMUIwNDBBNkZGMDk0OTI5QzQwNkIKLToxMEE4NjAwMDNEQUIxM0MwQkZDMUE1OTI5RTU1MzBBMkM5OENGM0RGOEEKLToxMEE4NzAwMEY2MzVFNzYzNkYyQzYzOTEzRTI4N0Y2Mzg0Q0ExMDVGQ0YKLToxMEE4ODAwMDEzMzY4QzM5OERFRDhFQjM0MEE3MDE1MDNGRkZCMjc2NjEKLToxMEE4OTAwMDI0MUFENjNGMDFGODNCNzA2NDU2RDAxNUU0NDQ4ODVDMTYKLToxMEE4QTAwMEJBMjk3MURENjhENDIzNkVFQUExRkYzRTk2RDVBQTA4QzUKLToxMEE4QjAwMEJGNzE1OTdBQjkzMjAxRTU4QUFDMDdFMzFENDQzOEM0NDcKLToxMEE4QzAwMEI2OTUyRkY1QTk0MkJFRjQ2MTdEQUU0NkJFMkMzNjc5MTEKLToxMEE4RDAwMDBFMTMxRjAxM0E0M0JBMkYzMjMzNEY3QkZCQ0RENTRCQkEKLToxMEE4RTAwMDkxN0M4Q0Y0OTY5QkM1RDgyREUzMkU1OTJGQzI3QUZGMEMKLToxMEE4RjAwMDlFQUFCRDgzRkQyQzFFRkZFNzU5Qzg4RkUxMUNGNTc2OEIKLToxMEE5MDAwMDdGOTRBM0VGQThFQzdFMjhGRkJDMUEyMDBFQzJGNUNCRTMKLToxMEE5MTAwMDZBM0JGMzgwODJGMzU1QjU5M0YyQTdBQTEzMjkzRDUzRkUKLToxMEE5MjAwMEVEQTJGNDVDNzUyNjk1NUZBODc2NTMzRTJEQ0RGQjA3MEUKLToxMEE5MzAwMEVDQjc2OENERDc2NkQ0QTM1Njg3NDlGQ0YxNzkyQzExQzIKLToxMEE5NDAwMEY0QkIzQThDOUZBMzk2NDQyRUY5QTgxMEM2NUQ0MjAyMzAKLToxMEE5NTAwMDEwRTQ3NTVERUQxODA0NEJDOUJFQkFBMzk4QzI3N0Q1NTMKLToxMEE5NjAwMDgxRTVFQjE0MzdDQUE3Qjk0N0I0NTU0ODNFRjM4RjM3OTIKLToxMEE5NzAwMDRFNDBCNjMzRjBDMzJGMTMxMDZFRTU5NzE1QTZDMTU2OUYKLToxMEE5ODAwMEJBQkZBN0U3MkIxQ0ZGNjRGNTYwOUFEN0U5NkEwRkNEMjEKLToxMEE5OTAwMENCNTNERjc0MzQwRURBOUZBRDJFQTBGQzkwMzRFRjM5MjgKLToxMEE5QTAwMEFDRTc2MTVGNUJCMUZERjgxRDRERTY2NDI4Q0ZGNzI4ODkKLToxMEE5QjAwMDFFRENERkMzM0RDQ0VGMDdGQzZEQjA3MDc5QjEwMUU0NjQKLToxMEE5QzAwMDA1RDJDRjg4RUM0OTRGRENDOTkwOUY2QjdGQzFGRDMxMjgKLToxMEE5RDAwMDM1NzY3NjdFMUNEMkQ1RTA0MjMzRDY5QkY2M0RFODVDRDgKLToxMEE5RTAwMEE5NDFGQUJFRDIzRTM5N0Y0MDIxRjg5QzNGMTA0M0YwODYKLToxMEE5RjAwMDkwNzAyQTE3RjgzQUJGQjdFRkNENDNBMERGMDNBMDQ3MDYKLToxMEFBMDAwMEFBMzBCRjk2Q0IyNjlBNUZDQjQ3RTE3RTU0MTI4Q0VEREQKLToxMEFBMTAwMDE3RUY0OUVGQ0MxQ0I4NEU2ODZDQzM3Q0RGQ0UwQ0YwNEUKLToxMEFBMjAwMDEwNjE3RkZBMDkzQzk3OUQ3REZFRUU0NEM0Q0JEOUQ4RDYKLToxMEFBMzAwMEJBQkY3QzgyN0NFRjMzQ0VGNzQwRTNGREVBMzFFNDhCOTIKLToxMEFBNDAwMDVEMTNEREY3NDNFRTgyMDVDRTY5NzRBRUE5OEM0MEI5ODMKLToxMEFBNTAwMEI4RDBDQTM0OUVEN0ZBNjJGRTZDMzhBM0YzRUJBMDlEM0YKLToxMEFBNjAwMEM5MjM3MTNGRTE3OEFFNUU0MUJFOTZBOUI4NTgxNUQwQjIKLToxMEFBNzAwMDdEQzZDRTQ3RDI3RTBBRjNERTVFMzdGNzkzQzcyMDNEMTAKLToxMEFBODAwMEVGMzdGOTJDMjBCN0NFQjNCQTBCQUYyMjVGREVFMjcwRkUKLToxMEFBOTAwMDZGNjU1OERGMUM4RUY1N0Y2RUUxRjNGMjZEODU3M0JCMzkKLToxMEFBQTAwMDBCRkJGMzEzMUQ0M0I5MTVDQkNCNUU3Q0I0MEJDRUZGNzAKLToxMEFBQjAwMDM1RDQ0QjIwRkZEQUJBMDhFMjc3QUY1OURDMjdBQUIwQzkKLToxMEFBQzAwMEREMTNCQ0JGNjc3RTcxQ0ZFN0ZCMzA3REEwM0NFRjFFN0UKLToxMEFBRDAwMDQ4RkJBN0M1NTIzRjczN0VCNUEwMEZCNjA3QjlDRjkyMEEKLToxMEFBRTAwMDgwM0ZGRUZBNjUyNTEwMDY3MENCNUU3RjcwNzkxMjhDNzAKLToxMEFBRjAwMEQ3NkY2MzkzQTkwQkE0Qjk1Qjk0MUE0Q0ZCNzYyQjM4RTAKLToxMEFCMDAwMDg2RjJGNkRBMzQxN0UxQUJGRjhFNTQxNUY1QzkzRTVERDcKLToxMEFCMTAwMEZDOUY1QzRGRkE4MDVFNEZDODVBRkZGNUM4MkUyQ0E4RTgKLToxMEFCMjAwMDJGRjQ1MUVBQ0UyQzAzN0E1OERERURGNzc5RkM5QzU4Q0UKLToxMEFCMzAwMDRCRjNEODUzM0ZGOUZEREIxOEFFMDMzNDExOUM3N0ExREEKLToxMEFCNDAwMDk1RUMxNEI4NUMwQkU0Q0ZFRjRFREY4NEY2OENCRDI2OTkKLToxMEFCNTAwMERGMjY5MjVGNDU1QzVGMzlFRkY1M0Q4QTc0NTYwRUY1NEUKLToxMEFCNjAwMDdEOTAyRkNGRjU0NTVEMDdFNUU1OUZGNTcwMDM0NUIxNzUKLToxMEFCNzAwMDZFNEZERTUwODBGMDU4QjhGQkExMzE1REEwREVGOUExMjgKLToxMEFCODAwMENDMERBODYwQzU3QjJFOERDMTc2QUMxQkU4RDZEOENGODYKLToxMEFCOTAwMEVFOUE4NDVCQTFERENGQjM0NjBFNDRCQUYyQUE3NTM0QjcKLToxMEFCQTAwMDBFQUJFMEUzM0MyMkU0MUU2QjA0RTAyNDA4MTEwNEY1NDQKLToxMEFCQjAwMDdFMEU5RkYxN0I2QzdEQ0NDMTY0MTZDNDRGNDVGREIyMDcKLToxMEFCQzAwMDU0QjRCNzBDRDBFQzZFMTVGNzREQUEyRkE5RDIxMTk0M0UKLToxMEFCRDAwMEEzMjBGRjZFNEI4MzdBNDk1NkQxQUY3MzcyOEFGNzJBNEUKLToxMEFCRTAwMEU0OUY1NUM4MzNEOURGMjM1NkU2MEI4QkU1N0FCMzgyNTEKLToxMEFCRjAwMEYyRDlDQUU1RjY1NkUwMkY1NTc5NDFCOTBERTM5NkUyNTAKLToxMEFDMDAwMEI4NTZBMTJGMjc4MzkwQ0U4NTc5MjYzRjYyRjM5MzZFQTUKLToxMEFDMTAwMEYwMjNDNzM3REFEMUE0REUzMjNEQUU2NjdGMjNEQTdCN0MKLToxMEFDMjAwMDIyQjRCQjcxMUM2OTM3NjM2NkI3MEJGNUEyMTUxMTlFODAKLToxMEFDMzAwMEFBMzREMkJCOUE1MzcwMEQyMDU3OTdBNjQxN0YwQjU1NkIKLToxMEFDNDAwMEQwQzNEMjQzRjQzMEZCOEY5M0FCMkY0NDc4OTY2MzdGMEQKLToxMEFDNTAwMDNGQjZCRTkxRUYyRUY5RDZDNDcyODEwRTk2M0M2NEEzMjYKLToxMEFDNjAwMDczNkE4REIwMzdENDA4RkI1NjRERTQyMDNCRjIwQjc2NjcKLToxMEFDNzAwMEM0NTQ3NjE0RTRFRDMwREU0MzZCQkY0QjIyRjM4ODlGNUYKLToxMEFDODAwMEQ0MzBENjJFREMwRTAwMUZEMDgwRUYwNDQwNkU2OEMwOUEKLToxMEFDOTAwMDBGODY1RjZFNTYzOUREMzcxQzhFMUU4MEZDOTY3OTIyM0EKLToxMEFDQTAwMDVENjgwNzMwMzEyRDQ0OUUxQUZCMDFCQzZEQzY3NThFNjAKLToxMEFDQjAwMDYwMTE0QzBCOTE5QjFFMTY2M0M1RkRDQjFDQjFGRkQyREUKLToxMEFDQzAwMEZBODcwQUZDQzk3NTBDMTVGNkJDQTEyRDFGNDUyMERGQkIKLToxMEFDRDAwMDVDRjI2RDFFRjFDRjhFRDZCNzVGQUNFRjM3QjgzRTQ4NTEKLToxMEFDRTAwMDkzN0E3OUY3RTAzQzg3N0RFMzM0RTMzQTg3OTkyN0E2QTYKLToxMEFDRjAwMEEwOUUwM0YzN0YwREYxM0NGQzFCOTM3RUZFREY4N0VCRjAKLToxMEFEMDAwMEYyM0Y3NjFENzcyOUNDNjdDMkZERjlCNUQ1OEZGQkIzMkQKLToxMEFEMTAwMDFFRTgxQkY3NzNGRDgyMkMzRkYyODFCREIwMUZFQzc4NUIKLToxMEFEMjAwMEFFOTk2NDI1M0RCNzVFRDg0OUVCRTM5RDY0NUY3QUNENkIKLToxMEFEMzAwMEMyRjNCRTE5QTI3RDE4MjMzOTUyM0ZBMzBCQjVFRjYyQUYKLToxMEFENDAwMEFCN0MyQjFCRkJBRjg5MjBGRTU5NkZGMUFGNDlDM0ZFRDMKLToxMEFENTAwMEVGOEQ3M0ZCMDA1RjJBQ0E4RkZFNzBERTEwRkNCQkM2NEUKLToxMEFENjAwMDEyQjg0REM1RkVCRUI2MzIxQzZGN0Q0QzIwQjkwMkVBNEEKLToxMEFENzAwMEFGNUZEMDg1RUE3RjA0QUExNERBRUY4Njk4NEM3NzRDNEYKLToxMEFEODAwMDc0NjBCOTI3MjkxNkYyN0JGRkExOTJEQzU4OUYwQjc5REEKLToxMEFEOTAwMDA3RjE3MUIyMDdBRTlGRTg0OTBBRUY4NDY5ODI4OUU2M0MKLToxMEFEQTAwMEEzQjI0QUZBOUVDQURCN0Q2MkUxRjU2RTE1RjhGQjU4NDQKLToxMEFEQjAwMEUwMDdGNjM5RjEwMTZENDI4NDE5RTlEODk0NUVGNDZEMkIKLToxMEFEQzAwMDFBRTFERDkzQTRDMDdDMUU5QkQzOTMyMTFGQkRCNUU0ODMKLToxMEFERDAwMEM2NTRBMjlCREE0Nzg4OUY0RDE3Mzg5MEZENjEwM0ZCNEMKLToxMEFERTAwMDIwRDRBM0Y5OUYxOTczQjc4NjIxM0VBNzE2ODc5MTdEQkEKLToxMEFERjAwMEY0QTNFMkU1OTEyRTY4M0Y1NTUzMDMzNkI0MUI0RkM5QzcKLToxMEFFMDAwMEY3ODQ5RUM3NERFOTFFMUFCN0JDQUU3N0ZBOTcyMTc0MzYKLToxMEFFMTAwMDVENjQwM0JFMDFGREZGMjI1Q0ZCOUVGNkVEQkU1QzJBNzUKLToxMEFFMjAwMERGMDdDQUNEMEZCMEFGM0U5RkQzNzMyN0Q5MzVFNkM4MzEKLToxMEFFMzAwMDczNjQ2MDM2RTJGNTQwQjM5REUxRjlBNDIzN0FBODQxM0EKLToxMEFFNDAwMDNDNDBCRkREODU1QzI3N0E0NUZDNEYwRkU3RTcxQzMzQUMKLToxMEFFNTAwMEQwMEJFNDZCRUE3QUQzMzlFNzI5MEJGMzI4ODhBRjNEQUUKLToxMEFFNjAwMDM2QzI3RkMxMjRCQjg3RUM4RkQzQzMzN0Q5QTBGQzBFNzkKLToxMEFFNzAwMEMxQ0Y2QUE2ODdEM0Y3OUFGRDkxN0U5MzQyRTcyN0NBOEUKLToxMEFFODAwMEZCNzY1OUE4NUQ5OUQ1RkZFQzM2RThBN0VDNDA2RjkyQTgKLToxMEFFOTAwMDM3N0JBRDYyREM1NzIzNzg3OTk0Mjc3NUU1MDAyQ0VGN0EKLToxMEFFQTAwMDRDNzRGMDlBQzUxNTRERTU2RkFBOENDQUMzMDMxOTMxQ0QKLToxMEFFQjAwMDAwQzdCODMwQUQ1QkZBNDBBNDNCQzBCMzAzRkJFNURGOEQKLToxMEFFQzAwMDRGMDhGQTNBMDFERDIyRkU3Qzk1OTFENDJGNkQ3REM4QTIKLToxMEFFRDAwMDZCMzVERDM2MjMzRTM1MkIyRjY3M0Y1MUE5RkM4NEQzREMKLToxMEFFRTAwMDkzMzQxN0YyMjcyQTkzNjk1RUQyQ0U3NEMyNkIyNUJBQzcKLToxMEFFRjAwMDNGNTFBNjkwQkVGNEM3MkEzNTYwMERCNUUzNEZEQTdFMDgKLToxMEFGMDAwMDVGMDZCNEZCRTI4MDg1RUM3ODMzN0Y1OTdBMUNCRkNGQjMKLToxMEFGMTAwMDVDNUU0RUY2Qzg5OTI1NEJDOTRGNzA2MUU5MTc4MzM2QzAKLToxMEFGMjAwMEMwN0ExQTk3N0Y5QUEyODVEOEE1Njc5NjQxQUI5MEZEMDMKLToxMEFGMzAwMDdDNDNCQTY3NTAzQUUwNjc3NkJBNzYyREFFQUYyMkFCNjMKLToxMEFGNDAwMDcxMUVFQUQ3MTdBQzBENEZFMjc5MjFBMzkzMzYxNEJGRDcKLToxMEFGNTAwMDVGN0NFNUU0MzZBRTc3Mzc2N0EwOUM1ODY4RTY3NDIyREMKLToxMEFGNjAwMEU1NkQ4NUEwQzM0QkU5REE0OEFDMEY3MDlCODU3MjI1NkYKLToxMEFGNzAwMDIyQUI4MUYzQkZBNTNGOEVGRjlGQTlERkJBNTc4MTcxMzYKLToxMEFGODAwMDRBQzNFQjE3NTJBQUZBNzNCMDlGQjM0QTIwNEE0OTI3MjMKLToxMEFGOTAwMDM4NkFCOEFGQ0UzOTAzNTEwODdGQ0RDNEY1QkNEMkVEQzUKLToxMEFGQTAwMEZBNzVFMTFGNzMwMkRBQ0QxOEQ5QzE0QkVCNTQ0RjE4NzMKLToxMEFGQjAwMEVFMDNFNkI3RTJGQzRCOTkzNTU4M0YzNTg4MkZFODg3MUEKLToxMEFGQzAwMEYwQzUxQzdGOUNGNTUzQzA0M0M5QjNCREYzRjA3QzUxNjEKLToxMEFGRDAwMDFBQjNFRjE3NDNBODFFQjQ5M0ZCNDU2RDlCOTdFQjY5MUIKLToxMEFGRTAwMDNCMUZCRUJFNzM2MjFGOUM4MzJGMTZBNDk3MUQzNjc5MkMKLToxMEFGRjAwMENFQTdGMTJGQkNEMjk5QzY0RjEwRkJFNDgyMjJFOEY1MTAKLToxMEIwMDAwMEQ5MzA0RTU3NkU1ODE3Q0VGMzA1NEU1NzBGNEIzRUY5QjkKLToxMEIwMTAwMDJDRUZBNzM0Q0U2NzQyQkU1NDVBRUQyNEJBOTI3QzA5NzUKLToxMEIwMjAwMEU2NDJGQkVCRUNDRTY0NkEyN0Y5MThGMzMyNDZGNTc3N0IKLToxMEIwMzAwMDI2NkRFNkZBOUIzOEVGRTI4NEExN0VDOUFGRjkzODk4MTUKLToxMEIwNDAwMDQ3N0U3RUU2Qjk2NDM5MkVFOURCNDY3OTZDNUNGN0VBMjcKLToxMEIwNTAwMDc0NkU5RjAyMzlEREY5OUY5RDE3MzMxMzY3M0YzMUE3NDcKLToxMEIwNjAwMDdGQzg3QTIyQUQ4MjJGQjgxMzI3NjZBMzdGQzFBQUVCQ0YKLToxMEIwNzAwMEY3NDJBNEY1MEU4RjAzRkQwQ0ZBRUZCMkJGMDdEM0Y5MjgKLToxMEIwODAwMDc5QjJCQjAxQ0Y1REQ0RTY4MzM2REM4NzRGMzM5MjFCQTgKLToxMEIwOTAwMEM2NzkzQzI2REEzREY3NUMyQjVFNTU2MTRGNjcyRTQ5MzkKLToxMEIwQTAwMDRGMkVBRUNGMTNGRTNFQjY0QUZDREQ5OTBDRkNCODE0MTEKLToxMEIwQjAwMDYxOTUxNjg0RTNERTVDMkQxOUU1QzYwNUUxMUZEQTFCRjgKLToxMEIwQzAwMDAzRjkyQ0Q0QTczODVFNjQ1RUUyQzM0ODk3Q0IzRjlFNTkKLToxMEIwRDAwMDk3OENGRUE4MzdEMkI5OUZDRDA4RUY2NTAwNTcyQ0FGRUIKLToxMEIwRTAwMEIxQzBGOTI2MEJDRkI5QzcxRUZDQjI2NzcwM0Q1RjU1RTIKLToxMEIwRjAwMDdCM0M3MzQyRjJGMzM2RTREQTcxM0ZDRURGOTg2QjJGN0MKLToxMEIxMDAwMDBBQzE0N0NERjZGRUM3NUMwMEY3NzNEQkNENkU2NEVGNzYKLToxMEIxMTAwMDM1NjZGRjJGNTA0RkFGRDlBRUQ2MjExRDQxQjkxREUxODUKLToxMEIxMjAwMDdEQ0U3MUU4MURBQzM3NkY2MzRDMUVFQUUxQjJGREZDQzkKLToxMEIxMzAwMDBERjk5RTM5MjE3OEU4QkI1RDhGOTdFQzNBN0RCRURGMzMKLToxMEIxNDAwMDNFN0RGRTNERDQ0MUUzQUZCRTVENkU0MDlGRUY3RjRDNDAKLToxMEIxNTAwMDlGNjdDRDgwQkQ0MUE4MEY3MEJDQkQzQ0Q4N0RDQzA1OUMKLToxMEIxNjAwMDc4RUJFRTU3RERGOEE5QkI2M0QyRTRGMUE4NDc2QzU0NDUKLToxMEIxNzAwMEREM0RBMUJDRkI1MkVGNThENDJCNEU2RDlDRUI0NkI0ODkKLToxMEIxODAwMDE3QUJCRTg1M0YwNTlDMTY3RjNBRTYxOENBRDVCM0FDMEYKLToxMEIxOTAwMEVFRjdFMzAxMkZGM0VBRDc1OUNEMkU1Q0I3OUVERUY3MjkKLToxMEIxQTAwMDlBMDRGRDNFQzdFRDc3MEJGQ0ZBRjJCNjdDNjE5OUI0QzgKLToxMEIxQjAwMDdCNjQ4NkQyOTc5MTBFNjBEQzVCM0MzMEExQjJBQUY3MkIKLToxMEIxQzAwMDFGNDRCRTUwM0MwRTA4MUZFOEVDREFCQTc1NTZENEZGOTcKLToxMEIxRDAwMEFFM0M4RThGRUI5NzBFOEYwQkUxNTEzODk4OTc1RDU3RjEKLToxMEIxRTAwMDM1OEE3RDAxRkI4RUFEN0Q2RjBDQ0VCQkYwRTcwQUU5QTEKLToxMEIxRjAwMDFGODUyRkY1M0E4MkY0RDVCNDZCQzY0RDk0REU1MjQwQ0MKLToxMEIyMDAwMEVCOTc3NkMyRjlGNTRBMjAxMkYyQ0VDMUFFN0Q4REQwMTEKLToxMEIyMTAwMDZFQUU5RkRCM0I4QTU2RDg4MkZDOTBBMTlGQ0MzMDhGQ0MKLToxMEIyMjAwMEY1MjFFNTMwRkZGOUZCMEU3RUE3NDBGRkM1MUJGNUVEQ0MKLToxMEIyMzAwMDE2MDA5RjQ2Rjk1M0IyRTUwNzVCRTg3Nzc5MUVCREFFNkQKLToxMEIyNDAwMDdFOTM4QUVCOUUyQkU2MkZFNTI3RjMwRDI3M0ZDNTc1RUUKLToxMEIyNTAwMEJDMDlGQjEyRkYwRkU0NEU2OTgyMTZERjIzM0UyODQ3MkMKLToxMEIyNjAwMEFGNUJDRkRCMDNEQjJEQzQ3NTk3M0JBQzJFNUM3N0I5QUUKLToxMEIyNzAwMDlEMDUyMjYwM0VDNzIyQUQxRTI3N0NCRkI0MjE5MkVDMDMKLToxMEIyODAwMDc0RjM2Q0EwQUZFNjUxQ0EzMDhFMDExODMxRjlDQkJFMTEKLToxMEIyOTAwMDdBNTcyNUJEQTczQzhFRTNCREZDMjk4NUNFNjlFNTY4QkMKLToxMEIyQTAwMDVDQzVGQ0QzM0NCRjgwMDU2ODNENDgyRjlFRDA3NUZBMzUKLToxMEIyQjAwMEY1Nzk1NkNCQ0Y3NzY1RTZDMDQxODQ0QjA5NkJFNEU3NUYKLToxMEIyQzAwMDMzQzBBNzI3QzRERjVEMDZFQkZDMjgxNkY1Mzc0MzdCQTgKLToxMEIyRDAwMEU2RDZDODhGRTdFMEZBNThDNUJFMUY2Q0ExRTVGMjlDMjAKLToxMEIyRTAwMDI5Q0ZDMUQyN0VGQzU0ODYzNzFDQzdCMTA4QkQ3OUZENzkKLToxMEIyRjAwMDdEOUUwQzlDRUY0QThCMjcwM0UxRTA1QjE3NDZFN0ZENDAKLToxMEIzMDAwMDVCMzc3MUY5QjUzRTA2RjREODRFQTQzRjkzM0U3RUFCNTEKLToxMEIzMTAwMEMyRjU3MzM2ODNGM0MzMjFBNjE3MDMyODZGOUExRjhBRDkKLToxMEIzMjAwMDcxNkY3NjUxN0Q5MjYzRUIxRkU4Q0RGNUZGN0ZBOEE0ODYKLToxMEIzMzAwMDBGMzVBRkUzNzExMUVCNzMzOUZDRDYzRjkwQ0RGNTdGM0MKLToxMEIzNDAwMDI5RjdFMjE5RjVENzU2REZGNjY0QTAxRDgyM0RDOEU3NUMKLToxMEIzNTAwMEY1MDkyRTI5NDRCRjhFRThBQzRENDY3Q0NCRjU0OUJEOUUKLToxMEIzNjAwMDlDMTVGRjM4N0ZDNjU2MTFBN0QxQkMyRUNDOEZGRThDMDIKLToxMEIzNzAwMDJGMTVFRjUxNTM4ODdFM0JBNzA3OTcxMzgzNDY3QUI2NjQKLToxMEIzODAwMDg5N0FFNEY3OTg2MzlBNzhGRkY1MzBBRjM5MEY5QjVDQzAKLToxMEIzOTAwMDY4N0Y2Qjg1QjdDNzkzODFGMkYzQ0I3NTYxNzk0ODY3OTYKLToxMEIzQTAwMDgzNDY3MjdCRDQ4OTVDQ0VGNzIzMDYzMDhGMUZEMjcyMUUKLToxMEIzQjAwMEQxNkY3OTBGOTMyRTREMEMwN0ZBODM3RUJFQ0NFN0Y2NDIKLToxMEIzQzAwMEYwQzgwMTVFQjIwMzZFNzU3MUJFNkY1Q0M3M0RBMjlGOEYKLToxMEIzRDAwMDM5NTZFRjZGODdCNTMzMUYwOTE3MzY5QUVCMUQ1RjJFNkQKLToxMEIzRTAwMDUyMzZGMzc5MDFCRTIxM0ZFODU3NjE2NDNGRkM1MkM4RjEKLToxMEIzRjAwMDI1MDk1RkEwMUI4QTdCOTA3QzJCQTY5NTVFRkNDRjg2REYKLToxMEI0MDAwMDAxQkRBQ0IzNzAzQTkwRTdCNjEwN0ExMUY4RUY0NkY4ODgKLToxMEI0MTAwMEJENTVFMDk3M0QxMDI2RThDNUM0RkU4NjcwQ0M3NzcyMTYKLToxMEI0MjAwMDdBQjhDQUYzMTdFMDdCNUQ4RjgxNkRDRjYxMTJERkNDRjQKLToxMEI0MzAwMEVDMUZGOENGRkMyRUU1MkYzRkJGRDcwNzdBNDZDOTBCOEMKLToxMEI0NDAwMDBGNDUzMUE4NzdEQTVDOUJFMDg2RjY2NTVCNTc0Njc5NTUKLToxMEI0NTAwMDIwM0Q2NUY2NDUzOTYxRkNEMzdFQjVDMERGMEVCQ0RGMEIKLToxMEI0NjAwMDQ1NzhGMzczOUM0MzA5RjE5MzlFNzlFRUU3MTM3MDlENDEKLToxMEI0NzAwMDdGRDk2QTcxMjI0QkE4RDg2RUEzRjNEOEMyREQwQjQ4REUKLToxMEI0ODAwMDVGODc3QzEzQ0ZBRkZFMUFGREE2MTVGQkY0RjZGOTkyODkKLToxMEI0OTAwMDY3MUU0QTcwMTFCQzdEQzlBNjQ0NEMwM0M5MENEMjg1RjUKLToxMEI0QTAwMDVCMkNBRDdFNjQxODA2RjRFRkU2NTUzODNGNjM3QjlDNTkKLToxMEI0QjAwMEM3NjVDMDc3NDU5RDVBNjg4RDZFNUI1RTIxRjg0QkM1QTgKLToxMEI0QzAwMEVFOUY3RjhENzZDMzhBREQzNzlFNDQ3RTVGNjFGMDBCRjEKLToxMEI0RDAwMDE0MEJGRjg4RDEyRkYwOUIxRTdBQkYzM0MwODdFMjBDN0MKLToxMEI0RTAwMDdDMzBBRjlFNDQyRURDQUU1Q0YzRUMyMzM5NERBODNGOUMKLToxMEI0RjAwMDZDNzkyQjRBQzkwQUZBMDdBNERGQTRBNTZFRjY1M0FGRUMKLToxMEI1MDAwMEJBM0FERTk3MTc4NDdEMzg4ODM3Q0VCRjVDRkIxNDBDQkYKLToxMEI1MTAwMDU2ODI4MzNGNEZDQjJDODFBODIxNzhERURCNjQyMUZENEUKLToxMEI1MjAwMEI3RUNGOUE3QjczRDg2NzRGNkIxOERFNDdCRTlGM0FGQ0MKLToxMEI1MzAwMEZGRkUzQUQ0OUY3NzU5M0E4REUzQ0I3MDI4MjE3MTM5QjkKLToxMEI1NDAwMDE1MkU2RThGOTNGODI5NzlFOTc1QUIyQjlCN0Y1RjFBQzcKLToxMEI1NTAwMDFCQzQ1M0U5QUU4MzU2OEMwRjMyQzI3MzU0REQ0MTZCNkEKLToxMEI1NjAwMEEzQTMxRDdDRDUzNThEMjEzQkQ0QjM3RkI1RTJGRTM4MzYKLToxMEI1NzAwMDdENDA2MTlENTNEQkI2MkZERUY0N0ExNEVBNjcwODI3MUQKLToxMEI1ODAwMDk0NEYxMjZGQUQ3ODM0RDQ4N0ZFMjdCQzNBODBFQTM5RTUKLToxMEI1OTAwMEYxOUM3MjI1M0MzRUQ1ODM3MUJFRjI3MjI0OEI4MTc5NzkKLToxMEI1QTAwMDE0N0Y2MkYzOEY0M0ZDRUU1QzEyODVFQjM5NjlBRUU0RTUKLToxMEI1QjAwMDc0RkZDNENBMDRENEY3OEEyREJFMDQyN0E1RkM3QkYxMEUKLToxMEI1QzAwMDkzNzcxMTNEQ0U1NzJBMTM5QzU5NDRFRjQ5MjZEMjI1MzMKLToxMEI1RDAwMDdDNDlCOENFQjkxQkE3RDIzQUU3MzE4REU4QjFGODA5NUEKLToxMEI1RTAwMEQ1RUI4N0Y0NUIzMzJCRDhENUNFQkUxOURCOTNGM0E5MEIKLToxMEI1RjAwMDkzOUIwMUI5QjBDRTkzMjIzRUNCRjczQjU1OUNBMzE3NEEKLToxMEI2MDAwMDkxM0NCRjRCQUM5OUIxQzU5NEZGNTZFODczREQ3QUI2NTcKLToxMEI2MTAwMEZBQkZFREExRTdEMDhBMkRBQjFCMTA0RjY3QkE3OTNBN0MKLToxMEI2MjAwMEUzM0MwMTBFM0UwMTM3RTUwN0U4NTc3RDJGQkYzM0M3RTYKLToxMEI2MzAwMDEzNzM2MUZDMDJCNTAzQjkzQTBBQkY2M0ZEMDY4QjA3QjkKLToxMEI2NDAwMEVERUMyMUVEQzQzOTkxOEY3RkE3MTgxRkU2MUQ4RUU3MjEKLToxMEI2NTAwMEUwOTMwOUVEQzc3RkZEQTRBN0U0MEJBQzIxMzRGRUFCNUEKLToxMEI2NjAwMDQzM0VCMEU1M0VBMkFGNkYzRUUwN0M2NkExN0Y2MjAxNDMKLToxMEI2NzAwMDk1Mzc1ODAyOURCMURDN0Y3MDhBNDI3Q0MyQzYwMkVEQ0MKLToxMEI2ODAwMEVERjMyRDE2QjFDRkY1RTUzMDRGQjMxMjBBREYwMzVDQjEKLToxMEI2OTAwMDNGOTVGNDMyMEZGNEIyNDA4ODlFMTBBNDFGNkJGMDNCMkMKLToxMEI2QTAwMEFERkY1NzYyM0Q4REU0Q0Y5MzdFQzBGOTgyM0YxOEQ3M0UKLToxMEI2QjAwMDZGRTQxN0Y5M0QwRDcxNEFBMjNEREJEOEJFRkYyOUM4RTIKLToxMEI2QzAwMDI3N0MzNDZFMTlDODc3RDQ0N0NBM0VCNjkxMUU1MUY2MEUKLToxMEI2RDAwMEJDQzU4QjcwM0FCQkUzRjBFRjZGQzVGMzZEOUREQ0Q3NTMKLToxMEI2RTAwMDdBM0U2Q0RDRDdDNTJGMEU2Qzc3NUY5RjVEOUJEQkZFQ0YKLToxMEI2RjAwMEJFODZFRkVERUVFQkI1MEFGMUJCRkYyRTFGMDZDOTQ3ODQKLToxMEI3MDAwMDc2ODkyQkVEREZGOTFERjBFMTRBMDM1Q0JGNjU1OUQxNjUKLToxMEI3MTAwMDQzQjBEMDU5RDg5REYwNjQ4MEFGODRBQjkxQUY1QTkxQkIKLToxMEI3MjAwMDQ5QjZDMzU3MTk4Njc0ODRDMDUzQzI1MUQyMkI2MzFBQzkKLToxMEI3MzAwMDhERDM0QUQ3OTI2RTI1NURCN0QyQUQ3MUREN0E3ODFBNzYKLToxMEI3NDAwMENCRjMxMEY3MzAxRkVGMkIxNkQyMTdDQUVBNzk3QzIyMDEKLToxMEI3NTAwMEI0QTM3OEJBMEFCNENGNTNFRERBQTNDOTlENDJGMzdFRkQKLToxMEI3NjAwMDQzQkVDRTUwREY2M0M4N0IwREY1MzU0M0JFNTI1N0JGOTUKLToxMEI3NzAwMDZDREY2MTJCM0YzRjA0NzRGNTZDNTU2M0U5M0NEMjU2OTYKLToxMEI3ODAwMENGRjA3M0JGRDNFRUFGQUQzRUE0OEZBRUNENTZFNDkzRjIKLToxMEI3OTAwMDk2RTVDQzE3MDlFRDlCRjdBQkE0Rjc1Qzc0MzU0N0ExOTAKLToxMEI3QTAwMERFQjIzMjhDRUI3NTE3OUQyMjFGQzNGM0NERjFENjU1NTcKLToxMEI3QjAwMEM4MjdFNUY3RTYzMDZFODdCOUU4NkQ4RThBMDkzOUNGN0MKLToxMEI3QzAwMDM3RDVBQjUxNjhGRjZERjRCMzgyRjZFMzVCNkE2ODNGMkYKLToxMEI3RDAwMDM1QjI4RUNBQjk3RTc3MzE5Q0RCMUIyRTg2NzM3QjQzRDQKLToxMEI3RTAwMEJFRUE0OEE5NDIzQjZDMkQ4RjIzOUNCMzZDNUExNEM1MEEKLToxMEI3RjAwMDYxRDRBN0RGM0MxREJFQ0Y3RDkzQzIwQzMwOEVDRThDQjIKLToxMEI4MDAwMEYxMEZCMzM5MkFEOTI5RTZBMzc4QzJEOUY1M0MwRTYyRTMKLToxMEI4MTAwMENFNUEzRDlFRTczOUI2NTBCQ0RDQjc2QzI5QTVGM0Q2QUQKLToxMEI4MjAwMEVCRTMxNzRBRDg1QUEyQjNFMjhEODZFRkY1NjM2OTlGMUUKLToxMEI4MzAwMDk0MThGNjg5MjZFQ0MzQzY3REYyQTFEQzI3QjkyQzU3RjMKLToxMEI4NDAwMDE3MjcyOUY4NzlCRTlBNzVGMzc0QzBDN0M1NjMyQUIzNjAKLToxMEI4NTAwMDQxQkVBNTVFNjVBQjA2RjBCODU4RjQzRkUxODEwNEY3NDAKLToxMEI4NjAwMERGNDJEOEFGQTgzNzQ5Nzg5REMzN0RENEFCNjNGREU1RUYKLToxMEI4NzAwMERDOUVDRjA2RkQxNEU5NjZFRkE3Mzk4RjQzN0E2RUVGQTEKLToxMEI4ODAwMEM3MTlBRjYxRkVFNTNGQTQ3Q0NBREFENjFGNzVFMEJCREQKLToxMEI4OTAwMDU5QzhBNzJGMUVCMDMxQTRGNzhCMDdERTQ4NDE3QkU0QkYKLToxMEI4QTAwMEM1NTc2RDc0Q0VCRUI4RENDNkVEREMwNzIyRkQyODYyM0MKLToxMEI4QjAwMDJFNzZFMzdBNzFDREZFQkZFNjM0OTI1QzVFQzFFNTYyMUUKLToxMEI4QzAwMDg2OTVGMERDNTJGRkY3MTM2ODRGNkZBOTg3NTUyMURGOEIKLToxMEI4RDAwMDNGMTA0MUZCQTlFMkQ1MzBCMjMzNUZEQ0ZGRDc0MUExNzUKLToxMEI4RTAwMEY2QjlGRkVFN0FBNEZGRkQ2MjI0OUJGRTIyRDI3MTBDMTIKLToxMEI4RjAwMDNGMTc1NEJDNzZFREQzRTg1RjJFREY3REQwM0ExQkNBRUMKLToxMEI5MDAwMDQ3RkRFNjNGNzM5MEFGNUU3QzkxRUI1MzE3MkM4RDRGNTQKLToxMEI5MTAwMEEyOEQzMzIyRTNEMkFGMkM0OTY4RTc4M0NFQkEzMEI2OEEKLToxMEI5MjAwMDI1QTNGRjY0NUY1NjdCNzBFMTcwQjgwODcwQzA3NTAxOTUKLToxMEI5MzAwMDVDOEE1MTFFNzQwNDhGQjQ3RjVCNzg3QzNEOEJGM0I3QjcKLToxMEI5NDAwMDZCMThGQUEzODM3MDUxM0NGQzdCQTRERkFFRDBGQUY5RUMKLToxMEI5NTAwMEY3MDM3RkNENDFGRTczQTVGNTdBNzBCRDAzRkZGRkFDMDEKLToxMEI5NjAwMDc3RDZCRkVEN0EzOUJEN0Y4NUYyMzVCRTJERERCN0E1MUYKLToxMEI5NzAwMEVCOTdGRjgzRjIzQjIzREQzNERGMUZCOURGN0ZGNkZGNTgKLToxMEI5ODAwMDhDQkUzN0ZFREJBRUY3NEFGODdFNTNFMDNCRDI4OUZFMzEKLToxMEI5OTAwMENDOEJGQkZGMzM4NTVEQzVCQTVGRkIzRkJBNkVBOUM3OTEKLToxMEI5QTAwMDhGNTREREM3NzJBMUZFNUJBQ0VFMDM3NzJBNjkyM0VERUQKLToxMEI5QjAwMEVBMjFBNzMyMTQ3OUJFQTNGM0QzMjhDNkU1RjQyODdCODUKLToxMEI5QzAwMDI5RTk5RkEzQkEzRTQwRkE3MjBEQ0IyM0ZGODVBRkFCQTYKLToxMEI5RDAwMDRBN0UxRDBBMDIwMTM4QkM5MTk4NEJGN0FDOTgzOUQwQzkKLToxMEI5RTAwMDc1MDlFNDQ3MjY5NzUzQkM5OEYxNUMzOTJBN0M3QzAxQTEKLToxMEI5RjAwMEVBQTc4Nzk3QzFCQ0EwOUZDMzkxMjYyN0ZBQTg0Nzc3REIKLToxMEJBMDAwMDU1MDNCNjFDNEE5QjMwM0Q5QTMyOTZFMkZFNDczQkY0MDIKLToxMEJBMTAwMEU3QUJCMTg2NzNEMjhEMkU3RDc5MDE3QkIxMTNGQUVENDAKLToxMEJBMjAwMDBBQjIyQzc0QkY2MjBDRDYwRjM5NTcxRUNENzBEMjNBQjEKLToxMEJBMzAwMDZGNjRCNTJCOUM4RUFCODc1MzYyMkY3RUNFNkMwQjg3QzkKLToxMEJBNDAwMDdGMEVCNzM2NzAxMkU3NjhCM0E4NkY4NDlCRDk3MTdGRjkKLToxMEJBNTAwMDAzQjYzMzMzMzgxN0YzRjVEMjc5NUE5RThCQUYwNDRGQzAKLToxMEJBNjAwMDI2Q0VEQjY2MzFCNDg0QUZCOTJCRjdDRjg2RjQ0QjcwQUEKLToxMEJBNzAwMDkxNzBCRjVBNzg0QjNDMTlFMTJFRTEyQkUxNjZDNEMzQUIKLToxMEJBODAwMEQ5MEMyNkNFQjcxQ0ZFNURDREI5NjZEQzc3QzM4NDVFQ0IKLToxMEJBOTAwMDNGREExQ0MzRjM1RDFCNTQyRkVENDczRkUxNkRENDM3RjQKLToxMEJBQTAwMDZFMzNFQUY1MjMxQzMxMTQ0NzZBQkNCRjUwMzQzODY2NDQKLToxMEJBQjAwMDkwMDJFQjREMzYzMzlGMERDRUExRTg3QjIzQkJFQjdEOEYKLToxMEJBQzAwMDY2RkZGMjU0MUM4N0RCNzdCQjk5QjlGRDFBNzZCNzJGNTYKLToxMEJBRDAwMDNDOEZFQTdCQUM5MDJGN0M3MDNFRjM0MEZEQzI2NEU2NjUKLToxMEJBRTAwMDU2Nzg3RDE2MUQ0QkUxNzE0Q0M1MzgzMTQ4QjE1RDYxMEEKLToxMEJBRjAwMDM0RUZCN0IwMzNGMzJGRTdGODI0QkNBMEQ5MDdFRDFCMjAKLToxMEJCMDAwMEQwQUZDNzE0Q0JEQjQ3RTU1MTdCOUY4OUI3Rjc5ODIxQUUKLToxMEJCMTAwMEVEOUVDRUUzMTQ5QTU3NzJCQjdDRTFFQTZFMTlDODNGRTIKLToxMEJCMjAwMEM2OERENERCOTk2QjdCNzE3RkE0NENCRkVGQzVGN0JCOEYKLToxMEJCMzAwMDZBNzIyN0QyN0Q4QTE1QkRFOTdDQTQ4NjdCQ0JGN0EwRUIKLToxMEJCNDAwMDlEN0UyNzhGRDMyOTVDNzVGQkY4ODEzOEJGOUQ3MTZFNzAKLToxMEJCNTAwMDlDREU5OTA5QkIwNkYxRkEzM0VFRkExMEJFNkJEQkMzMkIKLToxMEJCNjAwMEU4QkIyQjUzMUJEQjBCRTMwMTE0RDdBQzNERjBBMTY4MDIKLToxMEJCNzAwMEVBNjE2QjIyMENBMUQ1NEQzQzhGNzZDMjA5QkU1REVGMDgKLToxMEJCODAwMEEwN0Y3MkMyMTQ5NUVBNEY2MDNDMEU5M0FEODhBMDM4MzYKLToxMEJCOTAwMENDRjFCRUFGQ0Q4OUQwREY3ODM4NzQ2MDc5NTM5ODMzNUIKLToxMEJCQTAwMDY1MTFDQ0JGNTBEODg3QTc4OTc4NjMzNTlDNjkyRjNBMzcKLToxMEJCQjAwMDcwNUVERDMyRDJFMEZCNzhENjdFN0NGMjQzNjI3RkE5RjQKLToxMEJCQzAwMDIzOTU4REU4NjdFQTNFOEFEQkVGNjU3REVDMDdGQjdEMTgKLToxMEJCRDAwMEJDMTdCNzQ3MTU4OTU0RTYwMUFFNTQ3RkNFMUE1QjUzQTQKLToxMEJCRTAwMDNBOUU3RkQ2NTgwMkJEMjBGREIwRjdDODc5QkRBMDdDMzMKLToxMEJCRjAwMDVDMUExQkIzMDFFMTdFOEZDQTM2RDM3QzlCMEJDOUFGQTUKLToxMEJDMDAwMDEwOTlFOTQyM0M2ODQwRDJFNDVGQTk0RDc1QTE1REFDNTIKLToxMEJDMTAwMDY5NDQ1RDAwRkQwOTREOEZBNkJBNkI1Qzg0NjU4QTA3OTcKLToxMEJDMjAwMDkyRTdBREE2MTE4MTFFNjhDNzZGQ0VFNTdFODkxM0NFNUYKLToxMEJDMzAwMEM2NDgzQzJGQ0U3NkQ4RjlGRDQ5MTE1NzM0NTdEQ0EzQkUKLToxMEJDNDAwMEU5NUVEM0Y4QzAzNTc4MEU3RDQ4MjU3RkNEREM4N0Y4RDYKLToxMEJDNTAwMEZEQjAzRjNCRUM3RTA1Q0Y2REVCRjkzRTY1NkJGNTcxQkEKLToxMEJDNjAwMDQ0Q0NFOTI2M0JEMEVDREExMTU2M0M2RkNFNzE3OEFDNkYKLToxMEJDNzAwMEI4NEU3RkE2QjYwMkQ3MjVFRjIzRjY0MTI0NDA5Nzg1MUMKLToxMEJDODAwMEI1ODUxNEFGQTI0NkMxQkVDMzdENjI3NjQ1RTEzOUQ4MDEKLToxMEJDOTAwMDE4ODc1NDIxRTI4RTY0RkUxN0UxREEwM0Q4NUY1MUI0QUQKLToxMEJDQTAwMDZCMjdEMkNCRTc1NUU5NjQxRjNEMkVFODZFMUNDNjU1QzUKLToxMEJDQjAwMEEyM0ZDM0RDOTg4NEYzMTk4RURGMTFBRUIxQ0UwQzA3MUUKLToxMEJDQzAwMEQxNzMxODQzMzgzNDU5OUMxOTQ4REY0RDJCQzM0Q0U4QzUKLToxMEJDRDAwMDk3MUJCNzlDRDMzNUVDMzNCQjE5REFERjY3NjZFMUU4MTUKLToxMEJDRTAwMDY3Qjg0REI0OUZCOUNDRUNERDA0RjlBRTc2NjY4RThDQTYKLToxMEJDRjAwMDQ1QkFDQTI1QkE0RUVDQTMxNUUxN0M0RUREQ0IwNjIzMkUKLToxMEJEMDAwMDNEQ0M1RUJCOEVGQzMxOTIyRTk4Qjk2MTc0MUM4QzczNTUKLToxMEJEMTAwMDZBNkI2QTFFRjJDRDU2M0VERDY3RTQ5NjVFQTFGNDMwOTIKLToxMEJEMjAwMDQ1MjEzQTgwRjQ2MDNBRDFDM0E0Njc5MUVFQzc4RDBDRTcKLToxMEJEMzAwMEY0NTg5Qzg1RTdEMTMyRTY0MUY5OUVDOERDQTgyN0I0QzcKLToxMEJENDAwMEIwNjZGMjU3QjYzOEFDMkVCNDdGNDk3RTIyRjk4NkJDNzUKLToxMEJENTAwMDJGMkJFOTYwMUJDODdCQjM4NUIxRURENTc2NEE5RkFCMkQKLToxMEJENjAwMDc2MzI3MzRGQzY3NjU0Mjc1MjdFNjdCNThCRDJCQUVBQzUKLToxMEJENzAwMDRDRkFGRTYyQjU5QkYyQkJBQjA3NTM3RTZGQjU4N0YyMDAKLToxMEJEODAwMEZCQUEwQjI4N0RCNURBNEJERjI1NUYwMkI4MTAxRjkyQTYKLToxMEJEOTAwMDdDNDVGMkEzRDkwRTZCMTNGQTJGMjU1RjMyRDJDRDJDM0UKLToxMEJEQTAwMDAwRUZGMDNDNkE0RjdDNEZGMjNCNUM4NzI5MkZDODhGMzUKLToxMEJEQjAwMDI0N0VEMzE0QUYyRjMxMTVGOTU4RTMwQ0M0N0ZCRTdBMUIKLToxMEJEQzAwMEVFRjk5N0YxNUM1RUVDNzBEMzM5OUQ3MUJFRDcwMkY0NDkKLToxMEJERDAwMDhBNzA0OUIxQjI3RDY4OTdBRDU5RTQ2OTVBOUQxQTg0NTkKLToxMEJERTAwMEZGNkRDNTBBMzM4N0QwRDVFRDk1NjFDQzFDMjIzN0VFQTcKLToxMEJERjAwMEE4OEFEMUU1Njc1NkJERkY3QTY3REMwRkYxREE2Nzg4NUMKLToxMEJFMDAwMDk3MTMzRkZCRUE4OTNGQzBGN0E3N0U3NkE2MjdFMjFCODAKLToxMEJFMTAwMEU2QjFGNTExMUM3NzY5NzhFQjNDNjIzMUJGQzI0MjdFMTYKLToxMEJFMjAwMEFFRUVDMjdFRDI1REQ4NEZGMDRGRTg3REU2QTc3RUY2M0IKLToxMEJFMzAwMDM3REFFNzRENTUzNjE3RUFDNTlGMjBCRTAwQkU3RjE0OUUKLToxMEJFNDAwMEY4MkFBQUIyMTExQzBCNTc3RUYxRkNDQkI4REY5NzVBMjcKLToxMEJFNTAwMDg5REYxNUFEMTBGQkQxNzAwRkZBRjMyNDQ2NzYwOUQwQjcKLToxMEJFNjAwMEFBMjk5RUZERjM3QkFEODEwOEU4RkY3Mzg1RUY2MzA1OEEKLToxMEJFNzAwMDk0ODM5OTE4N0ZCOEU2OEQ4RjkwMEYyODU1QzdDOEZGMTcKLToxMEJFODAwMEFFRTFCRDNEOUM5RkNGNzI0RTc3QUZCQUVBMjhENTYzMzUKLToxMEJFOTAwMDhENUQ2M0QwQ0YyM0VGMjU0NzBDRjA1ODVEQjA3RUE0QjUKLToxMEJFQTAwMDZEQzQ1RjUxRTYyMTk2ODQ3RTk2NUFDNTg5QUFERjFDMkYKLToxMEJFQjAwMEYxN0RDRTFBODVGQzlBMThDNzMzMDVFRjkxNjdBQUI0QjUKLToxMEJFQzAwMEFGNDZGNDMyMTM1RTlGQzIxODdDRDJFRjZBNDk0RTQ5RTYKLToxMEJFRDAwMEJBOURCMzE2REFFMUZFQThDREI1Q0UwQkUxQzc0NUUyQjcKLToxMEJFRTAwMEZCRUM0QzEzQTVGMjdCMDJGNjBCRkQ3NTU5OTMzQjFENDEKLToxMEJFRjAwMEY1OEEyRTU4OUU4NTY5REU3NDg0NkYxN0M3MThCMzEyQjEKLToxMEJGMDAwMDQyMDdDRTRDQjM5ODA3MUZGRjI5NDQyRUZDRUZGRUNDMEUKLToxMEJGMTAwMDM0RUJEQzJDQkEwRjQ4NzI0QzhFNTM5NDk5QjcwQUUzNzkKLToxMEJGMjAwMDRCOEJENjhFNDAyRUNDNkEyQ0VFQzQ0RTUwMkZBOUI1MkEKLToxMEJGMzAwMDFGNzExRkRCQ0VFM0E4Q0IzQTkwMjNEMkFFNzYwQUZGNjcKLToxMEJGNDAwMDc5MkRBRDlCRUNCRTI1M0I3RkJEMTNFRjE3OTQ3QzZBMkEKLToxMEJGNTAwMDIzRkM5NkY0MTM3MTVCNTlGRTQxOTNDOTAwQTlCNzY3OUUKLToxMEJGNjAwMDhGRkVGNTY3NTFFNEE3RDhDREUzM0IyMUU1NzZENkE1NTIKLToxMEJGNzAwMEM1REMyRUVCODZGREQ1OEVCRkU4QzhDRTRGQTNEQUI1NjMKLToxMEJGODAwMDYzRUY1NjdGOTQxREJCNDJGOTNFMEFGNTA4Qjk5RUZDNEIKLToxMEJGOTAwMEZEREYyNkQwM0M5NENCRTQyN0FBRDhCRjMyQTFCRDM4MjAKLToxMEJGQTAwMDJGQTMxREJCRDVERTJERUM3QTE1NEIwQkRBQjU3NzFCMTUKLToxMEJGQjAwMEVENzdFMzMzMERGRTAzMzNBMzdCNjZEMjdFQzdENEFDQUIKLToxMEJGQzAwMDY4RjQwMzdDMkJFRTlGNzQ3NENFOTFGNkVGOEEwREQwNEIKLToxMEJGRDAwMDQ5MUNFQzU3QjMyQjFBRkQ1QjE3M0JEMEFGMUZDQUU0Q0IKLToxMEJGRTAwMEYyRkZCQ0IwOTc1RkRDQTFEMkI5RTdFMjhFNDhEQTU3MjYKLToxMEJGRjAwMDBCNzczQzc4MTRGRDhFMEJCNzI4MzQ4RDcyRDY0MEYwNDkKLToxMEMwMDAwMDAzQjgzMjdCQTg1Q0MzMzhCNkI4QjZGMzZFRjFGNzhDRDAKLToxMEMwMTAwMDQ2Qjk1MkZBRUJDODRBQTRCNzA1NzU4QTY3MkJDQ0E3NzQKLToxMEMwMjAwMEM1RUU4QThFMEY5OUNGQTI0Q0JFNkY0QTZENzU4MzA4RkMKLToxMEMwMzAwMERFNjJGRUYzMzM1RDQ0NTdCMkRFODJGQTA3QzlCRTBDRkUKLToxMEMwNDAwMEY1MkU5MDVFRjQ0MjA0RTNGNzUzOUFERkMxNzk5RURENEEKLToxMEMwNTAwMEQ4REY4REZFQzIwNTc1QkIxNjkyNUVCMTIzQzI4OTc2MEMKLToxMEMwNjAwMDg1MzMyMjZFNTlGNjczQUYxOEVGREU0Q0FFRTc5RDE1OUYKLToxMEMwNzAwMEZFQTNCMzNCRjkzQjAwMzg0RkRDNjc2NzE0NkU4Nzk2MkQKLToxMEMwODAwMEVENkFDNEJFQThDOUU0N0E1NjA2QzIyMDNFNTg3RjQxNzQKLToxMEMwOTAwMDVENTM1NDBGQTg3RjcyREZGQjk0M0UyMEM2NTlFMDY4QzEKLToxMEMwQTAwMEM4NDE3OTdDNzI3NzA0RjlCRjRFRUU3RTdDQ0M2QjMwNTAKLToxMEMwQjAwMERFRjlCQTExOUQ3MDVGQzhGRTFGQ0ZCNDcwN0M2QzU0NUUKLToxMEMwQzAwMDBCMTA1RUNDQ0ZFMzY2Q0ExMUJFRkQ0M0U3MTlCN0M5QkEKLToxMEMwRDAwMDk3MUFCQUZGNzhGQ0QwRDlERDJGNDU5OUIyODJGODJDOTcKLToxMEMwRTAwMEI3NTdEQTkzNENCODhGMTY3OTkxQkVBMzkxNzhBMDdGOTkKLToxMEMwRjAwMEVCRUU4OTNFOTQ2MTE1RjVCOTBDRTk5QUY2NUYxMkQ1MUQKLToxMEMxMDAwMDVGNjMwQUE5NjdCM0I4MjlDRUQ0QjJBRkQwQzNFRjk5QTEKLToxMEMxMTAwMDg4N0I1MTIyOEUzRjVGQ0QyMkJGRTJBQzdFQUU2OUI3RjUKLToxMEMxMjAwMDIxOUY3Q0NCNDJGODU4RENEQjM1MERGOUQzQTUwNjk1NzEKLToxMEMxMzAwMEUxM0MxN0E3QjIwMEVBMjc0QkVFODlEQzg0NzI0Q0NFQjMKLToxMEMxNDAwMDdCNTY3RkNFMEZDQUQ2MjhDQzAzRUIyQkYzQUI0QzgzQTgKLToxMEMxNTAwMEI0MEJFMERGODdGNDk0RDgzODEwRTMyNDlCNTJCOTVFMjcKLToxMEMxNjAwMDIxRTM0NzFGMkIzNjc5QUMyMDA3NUZDRjhDMTU3QzU2MTcKLToxMEMxNzAwMDdCNzQyRUZBQ0YyNjY1RDI3OUVFODQ5NUY5NTRCNDJCRDAKLToxMEMxODAwMEJEQzhFMzRCQ0JEMjc4NUNGMzYzMjIxRUJFMkMzNjkwNDUKLToxMEMxOTAwMDExMDdGRDlEMTNGODJEOUIxNEM4QzBCODhCQjIxNzkzREYKLToxMEMxQTAwMDI4RUVFMjlDOTVGQjNERjEzQkZBNTlDQkYyQTBCRDgzMTIKLToxMEMxQjAwMERFRDlEMDY0RkI5ODEwN0EyQTJCNzJCQkIwOUUxQUVCQTIKLToxMEMxQzAwMDc2RTUzQTcwQkVDRTBCQTRFN0VFODk2NEE4RTc5QTVFRTYKLToxMEMxRDAwMDhFRTQ3MTUzQ0Y4NDZEQjY4NUUwRURFMzRDQUU0N0NCNzIKLToxMEMxRTAwMEY3M0JEOEFEM0NDRUU4NjEwQjhGNEI3RDc4NkI5MkRGOEYKLToxMEMxRjAwMDFGMDJBRjg3MkREQTBDODQwM0FFMDNGNUZCMDVENkRBRjgKLToxMEMyMDAwMDBDRDQ3RkU1N0MxNzQ0RDVEMjNDQ0YwOTdBNUYxMDVFMTEKLToxMEMyMTAwMENCRTNCOUM1N0Q2MEFDOEZGOTI2MTE4N0RFRkNBQzhEMTAKLToxMEMyMjAwMEUyODBDRTI0MzVFQ0M1RjFDRjNDREI5QkUxRkE5QjUyOUEKLToxMEMyMzAwMEZERjNGNjUxMzlFODk3ODBDRjkyRTc2QzAxNUNDRkU5QzYKLToxMEMyNDAwMDY3QjkzREZBQjQ4NUVCNkJBNzI3MjZCQTEwQkYwNTkzRjMKLToxMEMyNTAwMDM2Q0MyMjdCQ0QxNjlCODI3NkJFRDMwQUIzMjY2MkY5RkEKLToxMEMyNjAwMEQ2Nzg4QTNGMkZBOUFFQTJGOEVEMTI2MDFCNzg3RjA4MUUKLToxMEMyNzAwMEQyMDJCQzA3NzQ3QTZCNkY4QTM3M0I4REVGMzYyOEY0OTUKLToxMEMyODAwMDdEMEQ3RUQ3NThFREFDOUYyMDNDQjZGM0YzRDU5OUU3RjIKLToxMEMyOTAwMEZFREUzQjM0REU1QkE2MjU1QkY0RjE3NTkyNEU2NEY5NUQKLToxMEMyQTAwMERGMDQ3RkZCOUJEOEU3RkZDOEU0RjY4OEYyODhCQTg3RjMKLToxMEMyQjAwMEQzNjg5RDFDRUU4MDI3RkU4RTBENkI4QzdDN0MwMEM2QTcKLToxMEMyQzAwMDUzRjQ1NDkwOEYzQ0M2MDIxOThGQTNERDYxM0IzRjdGMkUKLToxMEMyRDAwMDlERDk2MUExQjhGNTkyOTcyMzNEMTRDN0I2RkExQTEzRjgKLToxMEMyRTAwMEM1NTNBODVDNEYyRjMxMDFGODIwNTU3RUI2OURFMkNCOTcKLToxMEMyRjAwMDNBM0QxNzk2NjcyM0ZEOUNEMTM5Qjc3OUFCMkFDNjYxQzEKLToxMEMzMDAwMDBDRUY1MzlFREVDNkUzOEVDN0ExMkU0OUU1RDk1NDdFQkQKLToxMEMzMTAwMDVBRTQ0RkVGQ0QyNkJEMEZGQUY3RTBGREFBOTI5RkZDM0QKLToxMEMzMjAwMDk0QzM3MTcyRjE3MUFFNzdEOTg5REY5NkI1RkE3OTg2QzcKLToxMEMzMzAwMDQ2QTMxQzJDNUYzRDI0MUFFRjJCQjI3NzU1ODY3QThCQ0YKLToxMEMzNDAwMDExNEU5N0NDRUVDRUM4NjdDN0Y3RTZGQ0FDNzRFRjEzN0UKLToxMEMzNTAwMEU0OUYyQTE1RjcwODRBOUY1M0I4MUYxQUY2MjFERUU3MTMKLToxMEMzNjAwMDJDNUQzNUU0MTFBMkNGNzcyQ0FDMjdBQ0U3NUNERDgzRTQKLToxMEMzNzAwMDUxQTFGOEI4QTYzN0U3NzNBREY1QUQ2RUFBNUYwQUY1MUYKLToxMEMzODAwMEIxOUZEMjU1NkY0NUQxN0NCNjU5Mjg1RUM1ODhDNzFGNkQKLToxMEMzOTAwMERERkUzOUY1NDdCNTZGQTU4RjNBNkU2NzY5QjM3RUQ2NzYKLToxMEMzQTAwMEYwMUY5RjQyRkZERkVDMDg3M0ZCRTg2QjFEREQ4MzNCNTIKLToxMEMzQjAwMDZCQTk5Qjg3RUIzRkZCN0MxOEYxQURCMzMxOUMzRjlDOTUKLToxMEMzQzAwMDA0N0VFQUVCODVGMzE4RkI0QjhBRUZGQURENjRCQUJGMTMKLToxMEMzRDAwMDM3REZBRkVGNTc4RTNCQjQzN0U3RTNFNTcxRUU2ODhDOUMKLToxMEMzRTAwMDE3MkM3Rjk3RjM0MUMwQ0JDREQ0RkU1RDBCQjUzN0FFOTQKLToxMEMzRjAwMDIzNTlCNDZCREQ5RkNGNDcxMDNEOUNFREMyRjE3Mjc2OUYKLToxMEM0MDAwMDY3MkY5MjRGNEQzMTlDQ0U2MUJFMjk3OERGRUZFQ0YzNjAKLToxMEM0MTAwMEJENzJFOTFFMUQyQTNENDAwRjI1RTJGQzdCMzZBNjJFOEIKLToxMEM0MjAwMEM1MTk1MkRFNjQxMUU3QjgwMEQ0NDRCQUMxMzZDMERGODIKLToxMEM0MzAwMDRCQUFCOEJFNTU2QTVGNEJGMTI1MThBRjNCMjg4RkQyODcKLToxMEM0NDAwMDgwMkRCNjZEREMyREQwMkI5RDJGMUZFQzJERUM5ODM4NTgKLToxMEM0NTAwMDVFODI4ODEzMjczREE4Q0U4QTdDNUIxM0ZBNjJEOTBFRDAKLToxMEM0NjAwMDYzREMyRTJGNUYyQ0RCQzM2QzNCQzkzODYxQTQ0MzlGNzgKLToxMEM0NzAwMDQyNzEyQUE1MkIxNjJEQTBGOEZCQ0E3NUI3RTEzRTkzOTEKLToxMEM0ODAwMEYzMkYzNUIzMDIzQ0E3MzUyOTJBQ0RBMzI5OENERDMxMDIKLToxMEM0OTAwMDA5RjVDQUQwNzE0MkY0Qjk3QjgzRTMzMDY3MDJFOUIxOTAKLToxMEM0QTAwMEE0RjQyRkVCRURBMkVGOThBRkM1N0JBRDJCOTRCNTM0ODAKLToxMEM0QjAwMDRFQUEzQ0VGRjI3NTQ5MzgwMTM4QUMxODI3RDgzNDQyRkYKLToxMEM0QzAwMDk0NzdCMDZFMzk0RkUzQkE1QkY1QUVERTlDRUYzN0E1REIKLToxMEM0RDAwMEJBN0UzOTE0RjFGQ0I2NEFGNzdGMkY3RERGM0YzQUI2QkEKLToxMEM0RTAwMDFEM0QyRDI4RTdBREMxNzg1OTk4RkZFNkRFOENGQTk5RkQKLToxMEM0RjAwMEQ3OUJGM0I1NTI4Q0M3ODU3OTY2NkNENEM3OEI2NzZFQjIKLToxMEM1MDAwMEQxRTdGQkVDRDBFN0IzNzZFQkYzMzlGNUZBQkNGQjg4NjcKLToxMEM1MTAwMDNFN0ZCRjE4MTdDRkUxNzhERjE4Q0ZFMTk4RTIzOURDMTIKLToxMEM1MjAwMDY1RTNFNzcwQ0NFMzM5MUM1MzNDODdFMzc3M0M4NzYzRDIKLToxMEM1MzAwMDFFQ0ZFMTk4Qzc3MzM4RTYyNUJDRjEzQzhFNzkzQzhGNUQKLToxMEM1NDAwMDYzRjlGQkJEMzlERjJFMTNGMTk2ODgwN0E0NzdGNjRBMEQKLToxMEM1NTAwMDk4RUUzRUQyQzVGREZDN0UwOUQwMDFERjM3MzNBQ0I0ODYKLToxMEM1NjAwMDZGMUVDMzFBNzQxRUUxNzZBNzJFOTNFRDJFOEMxRjVFRUMKLToxMEM1NzAwMDFCQTdFREVGMUQ4RkY3NTAxQTU2MjUyMURFQ0M4RDE0MjkKLToxMEM1ODAwMEM3NUFGMTJBOEY2MzJEQ0IwQjczQTBGREEzNzFFNUM5QTgKLToxMEM1OTAwMDU1MTgxRUFBQzU2OTg3QjBGRTQ1NEJGMzM2ODQ2Rjc5REUKLToxMEM1QTAwMEQ1NjFCQUFGREZCOENDRjVFRUY1MUM3RjY0ODc2MUM1MDUKLToxMEM1QjAwMEIxQTQ0NzE1QTI5QzhCRUQxODhGQzY3ODcyQjY1NjFGOTIKLToxMEM1QzAwMDNGNkU4QzI3MzdDNjkxMUJFOTQwRUE3RjRGNTk5QTkzRkIKLToxMEM1RDAwMDkwQUY3RkYxQUM3RDJEQ0VGRjhCMzA3MTFGNjZCQURENDEKLToxMEM1RTAwMDEwMEZFMDIwN0VCMkY4MDE2NTMzQ0FFQjJGN0E3MzNENUQKLToxMEM1RjAwMEFBRTUxOEU4RUJFREM4NTk5OUNFQkVEQzlGRjRGMkQ2NTcKLToxMEM2MDAwMEZDNUFDNTQ0RjFFOTlBODdFNEQwMTIzMUE3MTRBNUI5QzAKLToxMEM2MTAwMDY5MzVGMkI5MDUyNjkyOUI5NzQwNUYyMzdERjAwMzk1MUIKLToxMEM2MjAwMEY0MDc3QzU3MkI3NDNERjhBRTU2Mjg3REUxQkI1QUZBQ0YKLToxMEM2MzAwMEZCMTI1RDc0RjVGMTVEMkRGRDdEODkzRUZBRjhGQzI5NTQKLToxMEM2NDAwMENCMEVFMkI5N0ZGMkRBRkVCQTdBNzNCQzQzMEM3MDE0RjcKLToxMEM2NTAwMEYzMTZGQUVDMUM5MDFGMUVENDJGOTc2RTQ4NDFGQzJFNDcKLToxMEM2NjAwMDU5RDBEMkI0MUFGMEJCNjQ0Rjk4MUJDQjhCRjFGRjgwMkEKLToxMEM2NzAwMDJGMTY0MzlGNzhFRkIyNzhCN0I4QkY1Q0E1OTdDM0IzQzYKLToxMEM2ODAwMDg1MUMyQTM2MzM5RjMzMzY0ODg3QzU0RUU2ODk4MUY2QTYKLToxMEM2OTAwMDBCRkEzNEU0RTBGQjU5MEJERTdDN0Y5MDMzMERDRjE5QUQKLToxMEM2QTAwMDIzM0EyMzNGNEFCMTc4MjhBRUI2NkM1N0NGOTg2NUQwNkQKLToxMEM2QjAwMEVGMzczREI0RDgzRTgwOTcyRjZCMEZGRjYyMjZDQUMzNzkKLToxMEM2QzAwMDVERkNGQ0Y3QzVEQTk3QTIyOEJFNENEMDVCOEFDNTE5ODEKLToxMEM2RDAwMDhFNzhERjU0Q0JFM0VCRDA3RUE2QzYwNkU5NjI1MzZEQkQKLToxMEM2RTAwMDVDNzgwRjQ3NzBCRDQxM0FGODlFRjAwNEY4RTE3NjlFMDEKLToxMEM2RjAwMEUyNDNFNDE3NjlBOTEzRUIxREExRjg1MENGOTZFQjkzMjEKLToxMEM3MDAwMEVGNkVCMTE1QkM5RjNCNDVGRTRCNzFERTkwRUIzQ0Q3MDUKLToxMEM3MTAwMEZCNjA4RTBCRUY3NTU0RUY0QjUxOTE5RjlCNzY2Q0MzNzIKLToxMEM3MjAwMDczQzgzRjZDNUE3NjlGNzg4QzA3RURGOTA3N0M4N0FEMEMKLToxMEM3MzAwMEU0NDNCRTlFM0ZBRjFGMTU3NTJERUE5RkNGNUJEQ0UzNDAKLToxMEM3NDAwMDIwQkZCQUY2NjkyQjlFMkI0QUNDN0UyQkM1NjczRUJCMTkKLToxMEM3NTAwMEM5OEFGMUNBMzc2Q0RGNDRERkU3NkQyRkE0NzhDQ0Y5QzIKLToxMEM3NjAwMEFDOTJDRUEzQTdFNDNCMDkwMjFFQzUyMzk1OEQ0RTk4M0IKLToxMEM3NzAwMEY3ODM3RDM4OUYyRDBFRTdGRTNERDA4RjVFQzc3NzRBNDkKLToxMEM3ODAwMDJFNkQ1NzcyMzFDRTY3OEE3Nzk3QjUxMEJFOEZFOUMzODkKLToxMEM3OTAwMEY5OEM3MTlGQjQxQzlGOUMxRjRGRjBFMEY3NDAzRTY0RTIKLToxMEM3QTAwMDcwQkE0RjZGQkIyRjI2NUY0RUE1N0QzMUU1NzI1RjNBQTEKLToxMEM3QjAwMEE3NEQwREY0RTZFN0UxMkNDMzc5RjhCOENBRUQ3OUY1OTkKLToxMEM3QzAwMDdDMUYxNDVCMDM5RDI2RTMzRTM5NjAyMTNEQjdEQ0NDMjIKLToxMEM3RDAwMERGNzkyQTg3N0Y1RjA3QTk3N0E4QUFBM0Q3OEFEMTExMTMKLToxMEM3RTAwMDNBN0E5RUNFNjI3NUY3Njk2RUMxQTA5MjkwRkM5NDcxMDAKLToxMEM3RjAwMEU5QkFGQUQzQTZGNDM1RDA3RjVFQjA5Q0Y4Qzg3NUJBMTIKLToxMEM4MDAwMDdCN0ZFNTRCN0QyRTg1RjRDQzkxRkFFRjhDQzcxNzMyRjgKLToxMEM4MTAwMDc2OTNBRTdEMzk5QjE0QUM4N0Y0QkQ0NUUxRTc5RUREOTAKLToxMEM4MjAwMDMxOUJEMTBFNTg2Q0UyRTdBN0U5MUFGRkJFNzAxRkZGREIKLToxMEM4MzAwMENFQTYzM0REM0VFQzlFRUVGRTAzOTc4QjE2RjIxQjQ4MzAKLToxMEM4NDAwMDdCRkI3NEZDNzczQkYwNjcyQ0JDRjUxRTNCREVFMzQ3QkIKLToxMEM4NTAwMEZCODRFRTdFQjdGMDE3RTJCQzExMEZFNUMyOUU1NDlFM0EKLToxMEM4NjAwMEM5RUQ0OUU1QkUwNjJCQkU5MzAwRjAzN0M3QzU1MjNENjIKLToxMEM4NzAwMDdCMUNDNjU1RDYyQTY0NkZDNDc0MjlDNTU5RUFFM0I0MzMKLToxMEM4ODAwMEIwM0Y4QzdGNUM3ODRDMkRDNDdENjIyQzJGQzY3NzhBOUMKLToxMEM4OTAwMDEwQkZBRkYyQjhENDg1NjgxNzhBNkFGQjNFREE0MkI0OUIKLToxMEM4QTAwMDEzQTE3RENCRjAxRURBODc3RDVDQzI2RkU3NUZENTA1RjMKLToxMEM4QjAwMEUxMzg0RUM5QTU3QjlCM0IwRTVBMzEzRTZGQ0E5NDk4MTYKLToxMEM4QzAwMDVDREMzRjQ2M0E5M0ZDMURGNjM1QzUxNUI2MUMzRjRDNjMKLToxMEM4RDAwMDc0RDY1MjZDMjYzQUJFMTIzQzE2N0FCODlERDU0ODdGNjMKLToxMEM4RTAwMEYzNTg4MzE1RUZBN0NDREJBREI4RjE1QzhBRjUxMDJFQjkKLToxMEM4RjAwMDVEOTAyRTBENzA4OThCNkQwQjBGMDlBNzU2QjgxOUNBNjQKLToxMEM5MDAwMEU3MzMwRUFGRjlGQjE0M0ZGMkM3MzY3MDEyRjAzM0NFQTcKLToxMEM5MTAwMEJGMjNGOEM5NzVDREQzQjQzMUM4MjdFNEZBRTZFMzNBQUEKLToxMEM5MjAwMDcwMUM1ODA3OEUyM0ZEMTY2Q0IwNzFCRkE2OTNGRDZBNkMKLToxMEM5MzAwMEExOTdDN0Q5MUFFOTYzRDI2NTZFOTdCOUU1QjI5OUQyQzIKLToxMEM5NDAwMDI5RTNGNEZCMTNEQkUxM0U5OTdBMzk4MUNBQUY5NjdFODUKLToxMEM5NTAwMDE2QzIzQzUxMkU1QzJERERDOEY1NDg3RTFDREMyN0ZDNDAKLToxMEM5NjAwMDVFQzI5NURFMzkzMkRBMjc5QkZBODhGQjEwMDNEOTQwODQKLToxMEM5NzAwMDVEN0NCM0UwQjdDNkY2QzZGODY2QTkxRjE4RTU0RTYxNDAKLToxMEM5ODAwMEE0ODlFMjJENUIxQzY5QTQ3NzQ4RkVBQjA5QjlBMkFENkUKLToxMEM5OTAwMEZDOTZFQTY5NTA4RkNGQzZBMzkzNDM5QUIwMTMyRThFQUMKLToxMEM5QTAwMDRDQTM3NzI0NTI5NkM1MjUyMEJFMEFDMzlDMTRENzVGOUEKLToxMEM5QjAwMEI4NENBNTM4RUE0MkE4RTcwQUQxNUI1NkFENDg0RjQxQ0EKLToxMEM5QzAwMDM5RjJGOTdEQkQ5RUY0ODEzRUZGRjkzRDlEMTIwNkMzMEIKLToxMEM5RDAwMDM4NUZBQ0I0NzRCMkJCODJGNTNFNUY5OTlGODJGMTFEQTMKLToxMEM5RTAwMDVGQUNCMzRERjdCNzAzQUY4OEJFRTIzRUQzQ0YzRTIyNzQKLToxMEM5RjAwMDM5NzdERTc0M0M2QTNBQjQyRjVCQjkyNzBBQUYwRjk0REIKLToxMENBMDAwMEFFRTRGMkZERTExRTVBNzhERjgxMjhFNzM3NkQ3MzIyMkMKLToxMENBMTAwMEZDOUM5QjcyRDA0RTlDODQzNkRGRjhBMDVFNTFCMjMyRjMKLToxMENBMjAwMEJGMzNFQTFENjVGRjM4RkNBNDEzRUY4NTJGQjMyNEEwQTQKLToxMENBMzAwMDVFN0FGQTAzOTA5MzBBQzkzOUQyMjc0RTg1NDExN0U0RUEKLToxMENBNDAwMDg3OEJBNEY3Q0Y0RTI5Q0M4M0ZFQTg3M0E2ODM3RjU5OEEKLToxMENBNTAwMDhERTdDNURDQkE4QzgwODJDRTUzMkRBOTJGREE1NTU3Q0QKLToxMENBNjAwMDNFNERGQTRDQzlGRENCMzJGMDFENDI2RDU5Q0ZFOEY2NzAKLToxMENBNzAwMEVDMjkzMkREMjZFNDM5RUFGNTk4QTI1RThGRjEzNUE4N0IKLToxMENBODAwMEQ3NjMxRUY1N0E0QzUxQUZDN0VGMTUxQkY0N0E2MTlBNDQKLToxMENBOTAwMEYwNkY0OUJCNzNGNzlBRTY1Q0Y0RkJGOTQ2QjJDQzRBRjcKLToxMENBQTAwMDkyQzMwRTdBMTc3ODg5MTJFRTQ2RkVCNDA0NzUyOENDMkMKLToxMENBQjAwMDdGMTY0MTc2MDdGNkMxOEQzQTNDQ0I3NzgzRTVCQkMwNDQKLToxMENBQzAwMEMzOUE0MTU3MEJEOTI3RDc1RkI2QjNEMDdCQkEyMzU4NDcKLToxMENBRDAwMDhDMkUzRkNBOUVBNEFCOUZFRjRDRDU5NURGOTBEODVCQzAKLToxMENBRTAwMDU3N0VBMzJCNTc5NzFGOUI3OUFEQUVGRTc4RjcwODVENTUKLToxMENBRjAwMEZFRTZDMTM3RUFFQTRGRjQ0Q0Q0RTUyNzE3Q0NEMEQ1OEYKLToxMENCMDAwMDlGRUEyREQ0OTU0RjlCQkU0MDU3M0U0MzVCQTRDQkRGOUQKLToxMENCMTAwMDU2N0M4RkFFRkVFRDk1Q0I3NEU1RjI5REU0N0EzQzhGQUEKLToxMENCMjAwMEQ5RjBGRDE3M0JBNUYyQkRFNEJCNTU0NkVGQjEwRDFEOTUKLToxMENCMzAwMDY1RTI3NjQ2MUI5NzQ3NEJERUVFRTkwOEE1ODNEOTdENzMKLToxMENCNDAwMEI5MUU3NDMwQ0IzMzBCRTk1NUJFODcyOURGQjk1Q0Q0RUQKLToxMENCNTAwMDk3RTMzNTk5MDUxNDdFMUU2RTQ4NDIzQTM2RDYzMzk2RDEKLToxMENCNjAwMDBGOEQzODc0QzkwNUI4RkNBNEVGREI1M0NEQzAyRjg2RjgKLToxMENCNzAwMDVFNzNBODdGM0FFNEQzQjJFMjZFQTFGQzkwNDMyRkE1ODYKLToxMENCODAwMDM5RjE1QzNBRTMxNjMzRjBBQkExRkQwRTVEQzJGMkREODQKLToxMENCOTAwMDU5ODkzQzNGOTk5MTZBMzI2OEM3QkVBOTE4MkYzQkY0NjYKLToxMENCQTAwMEZBQjRCNTZFNkU0NzY5RjdCRUJCNEMxMTFFNzg0RjFDQzgKLToxMENCQjAwMEUxODE2OTAwRTgxOEQzNDM0MEM3OTgxRTAxM0E5RTYzOUIKLToxMENCQzAwMDYxRUMyOEQwMzFBNkM3RTA3QzhBREY3RjBCRTc1MzRDQUQKLToxMENCRDAwMDhGQzNGOTE0RDM3N0UwNUM4QTY5MDM5QzRCMzFGRDVEMDgKLToxMENCRTAwMEY1NzQ0QTNGQThENkE4RERFRkFCOEIyOUZEQThCQTkyMTEKLToxMENCRjAwMEJFN0Y1MjVENDVFOTFGQUI3REY0RkQ4MUJFOEE5MEUzQTcKLToxMENDMDAwMDAxREQ3QkEzMURCRDJCMkFGRDlDRDJBRjU5NTNDOTFBNTAKLToxMENDMTAwMDIzOTA2RjM0OUE2M0JFQjIwN0ZEOTUxRERCMDlDQ0VDRkYKLToxMENDMjAwMEFCMTA3RDJENUJGMTZDRTg0QkUzNzc3NTEyMUYxN0RGQkUKLToxMENDMzAwMDVEQTlEQTEzODhFNzBGNTMyN0Y3RUNBRkEyMUNBQjdDOTIKLToxMENDNDAwMDFENDM2RDNFMzRCNUZGN0VFNDIyNDExRkVCQjMzQzlCOTgKLToxMENDNTAwMEIxREQzMDNCQkY5RjNDQ0NDRUVGMUYwRjMzMzdENDIwMkMKLToxMENDNjAwMDdERDU3Q0M3NUMxOEZGNzMzMDkyQkZGQjUxNzM5RkQ5OTEKLToxMENDNzAwMDhGNzY1MEU1MzJERkU3QzMzQjMxQ0FENzdDRDc0OEY3MjAKLToxMENDODAwMDk1ODczOUREODkyOEFGNjRCRUQ1RUY4RjdGNDJFMjdDN0UKLToxMENDOTAwMEE0MUY1RUM2Rjc4Q0JFREMzMDBBRjU4NUUxMEVBQjBCMzcKLToxMENDQTAwMEY5NDg2OERDMDBGQURCMEY0NjdFMjVFN0MzNzAzQ0U5RjMKLToxMENDQjAwMERGREZGMjFEMEI5ODcyODI3RUZDNjFGNjg2NTRCNDFCOTYKLToxMENDQzAwMDBDQkZEM0VFMEU4RDVCOTJGRTdBRTU3MkEzOEE3NjU1ODkKLToxMENDRDAwMDE5OUYyNEM3OTFGMzhEMzQ0MzdGNzlDMUY4QTM2MUNFQTYKLToxMENDRTAwMEJBNUNGNDc3RDQ5NDNCQThCRkNFRjBERDlBNDdGNTNDMEMKLToxMENDRjAwMDJBQjVBQkNCNDVCQkRDRjAzMjA3QzVDMUNBMzg4MUNFMDMKLToxMENEMDAwMDYyREQ1MDhGRDYzOUZBQjI0NjcxMTJDMzQ1OUMwNEY2RTMKLToxMENEMTAwMDYzRTdFNTNFRUM2Nzc4QTc0MDEyQzY4MTBEQUZFNEVGMEMKLToxMENEMjAwMDkwM0RBMUYwRjdFODY1REMwMkQ2OEYwOEQ5QjczODRGRkYKLToxMENEMzAwMEVDQjdDN0RGNjBCRUE4NDc3OTNDMDRERkM5RjI1Q0U3MDcKLToxMENENDAwMDEyNzlFOTc3QjQ4RjI0RkJENjI4QzE2QjFFNEVENUJFNkQKLToxMENENTAwMDQwM0FGMkRBOUM5RjQ1RDBGRTRFRUY4Njc2RDM4OTQyNjgKLToxMENENjAwMEFGRkYyN0Y0NzIwQURCRkRGN0U5QzVDM0YxREQ5NTkxNEEKLToxMENENzAwMEJEQ0Q0ODM3MTIyRjEyQ0YxREQxOTFDNDdCNDg5QzE5Q0QKLToxMENEODAwMEUxQjkzNTZFNENGNDYzQTRBRjhFRTg0QUQyRDMzMDNCQTAKLToxMENEOTAwMEM3M0JFMjE1RTNENDI0MUQyOTk3RjlCQjZFQzNDQkVDNDYKLToxMENEQTAwMDI0RUYyNDFEMTlFOUEwMkQxRDcxQkFBQ0I5Q0I0RUZEOUQKLToxMENEQjAwMEI1QTVBMzIwRkUxMTFFRkYzQTFEMzVBQUU4QkZCQTVBMzkKLToxMENEQzAwMEZBQjlBMzk5OEQ4OTg2QTI2OTY5REEyMkM0NkZFMTY1RUYKLToxMENERDAwMEQ3NTFDQ0NGNjYyM0M2MjA0OUM5NzIwRENCMDdCNjJEREIKLToxMENERTAwMEQ3QkU2OUI2NDQ4N0QwRDkzMDQxNjdBQjNCQTgyRkVCOUIKLToxMENERjAwMEM5NzcyRjY0RkZDRjc0MzBGRTVCNDI2Rjc4MkI0Q0M2MkYKLToxMENFMDAwMEE5NzgxQ0I5ODM4MjcxQTM0QkYyMzk3RDE1QTRBQUE0MTkKLToxMENFMTAwMDc3OENDQUUyRUY5RjMzMDdEN0IzNURGMDE3RjlGMTRENzYKLToxMENFMjAwMDRDM0IxMjlEOEFFRjk0N0FFOTdERDIzMTlEMENFRjkzQjEKLToxMENFMzAwMDBBRkRCQ0MwRTBFN0JGMjlFQjA2RDJDRjZGQkFDMjNCMDgKLToxMENFNDAwMEQ3RTNCMzg0N0U5RENBNTJBRkYyMUREMjI5NTk2NEQ3NkQKLToxMENFNTAwMEZFQjFFRjkwRjJGNzZCNDc4QkZEOUUyQ0U4MjlEREE1MjQKLToxMENFNjAwMEIyQTFCMUY4OUVCQjY2NDZFMTcyMDRERkFGQ0RDMTc3RDcKLToxMENFNzAwMDVFN0Q5NEJGOTFGOTI5MURDQjAyQTQ0NzhDMDc0MTg0QTQKLToxMENFODAwMEY5OUIxOUEzN0JGQjg3MjMyNkNDQzQzQjg3QTNGQThGOEUKLToxMENFOTAwMEVBODFERjQzREVEOTVCOTAxNTRGRUZFQ0ZEQzkxOUYyNTMKLToxMENFQTAwMENFREVBMUQxMkVCQUJGN0FDODlFNEU3QTI4RUU1NzRCNUQKLToxMENFQjAwMDg4QkRGNDREOTBDRjNENjA3RDg3NDE3RTYzRkEzQUM4Q0UKLToxMENFQzAwMEVGMUUyMDQ3REYwMEY5OERGOTlCMzI5NzMxNkMzN0M2OTIKLToxMENFRDAwMEE1OEY3QjkyRURDNzNBNDdDMTQxQUQ2M0Y4OERDRDc5RkYKLToxMENFRTAwMEE1MkJDMkY3QUQ5ODVFQTM5MTJFREU4QUI5NjYzNEFFNEIKLToxMENFRjAwMEY3QUQ5OENFMjY5RURBQUM5NDY2QkZEQ0EzM0QzRDU5RDMKLToxMENGMDAwMEVFODdFMDc4NjM2ODNDMjM3QzI1M0M4RDcwOTRGMEZEQ0YKLToxMENGMTAwMDE3RTBGOTYwN0JGMDVDODRFNzA4QjRERkRBREY4RjRBNjIKLToxMENGMjAwMDRDNDNGRjI2RTdCM0U1MTEyOUUyM0REMkI3NzNENDM0NzEKLToxMENGMzAwMDhDRjcxRDQyRjMxQzVFNzUyRDMzQTNCRkREQ0VFMTc0NkIKLToxMENGNDAwMEIyOUFGOTEwQkVBNzcxMDk2OEYwMzZEOEY3OTg3OUE0OUIKLToxMENGNTAwMDI5MzQwRUZBNjU5QkI2MTVFOUVFRTQ0Njk1RUVFQjlGOTMKLToxMENGNjAwMDdGMzE4Q0VDNzZBN0ZDREMyRUI5RDhBNDNEODdFNTY1MzMKLToxMENGNzAwMEFBNkJBRDFCRjVDREI3NTRGRThFRThGNzg3NTMyNjQ1NTcKLToxMENGODAwMDVFMDVCRDZFRTFFRjFDOTREOUM3QjQ4QjRGNzlCRUFDODIKLToxMENGOTAwMDRDRjMxMEJGNjA4NkRGQTNFODZBRTNFRjQxQzg3NzI5NEUKLToxMENGQTAwMDNCRDJCN0U0RUZCODc0QjU3MTdFMkRGMUJCRDEyQUY0NTIKLToxMENGQjAwMDAwRTg2NzEwRjBEOUU0NUY4NkQzNzlFQkIxMDRDRjIxQTQKLToxMENGQzAwMDVDMUY5QzYzRThGREE5OTZBRTkxMjQ5RjBFODlCOEI4QkEKLToxMENGRDAwMEUxODFCRUY0REU1QTgxRjhERDgxMzdDNDdCRUU4NzQ0RkYKLToxMENGRTAwMEJDREM5MTBDRUQ2RDZDRkY4NkVCNTA1N0I0M0Y1Q0NGMTEKLToxMENGRjAwMEI4MUZFODQ2MDc3RjNGRkY2QUNGRTcxRjY2ODlGOEExQTEKLToxMEQwMDAwMDFDOTY3MzU1QkY5MzEwQUZEMjdEOEFFMTJDODNGQ0YwNDAKLToxMEQwMTAwMEEzNzBCRUM4RTdERTlDNkQ0NjM5MTlGMjNCMDlCNEFFNzkKLToxMEQwMjAwMEZGNkJCRjkzQzA1OEIzOEFFQjRBNzYyQUVDQjFENEFCRkUKLToxMEQwMzAwMEZGREQwNDU1OUNBQkU0RUYyNzE0RjBBMjM2QkY5QkYwNTQKLToxMEQwNDAwMDc4NTQwMThGQ0I3N0NDNkJGNzc3MTM5MkM1QkJENkNDRDYKLToxMEQwNTAwMEM1RTU4NkZDREQ4NEZDNDRCRDFDMTlFNTFDNzFDNDQ5OTIKLToxMEQwNjAwMEE5REVDRTkzN0M4NUY4QjFGODZDMjEzRkFFMTZGRkU1QzIKLToxMEQwNzAwMDhDRjBERjFBNjdEQTg5QzczRjBERDdGQUZDMTJFREYzOUYKLToxMEQwODAwMEEzM0E1OURDN0U1NzVCM0FGODc3RkI1RDk0OEVGMDY0RTcKLToxMEQwOTAwMEZDQkQxNDIzOUU4Q0JGOUY5MkFDOTY5OUU5MUQ0ODgxREMKLToxMEQwQTAwMEE3RTlGMDE3RjE3NEJERjg3RDhCRDFGOEZCMTZFQzdGODIKLToxMEQwQjAwMDBFNkZFMzBDNzhGQjk2QUQxRDg4RUY5NjVFMkNFNDdDM0EKLToxMEQwQzAwMEJEMjNCOTFGOUVFQTk5OTQwREZDNjM5NkIwMUY0OUZCREUKLToxMEQwRDAwMDg4OENDQjM1RkU3RTkyQjQwM0M4Nzg1RERGNDg4RTZGQjYKLToxMEQwRTAwMERGODkwOEYyNUZEREFEMzY0NkEyOUMzOTYxRTJCRjk3NjkKLToxMEQwRjAwMDk0MTFBRjY5RDhGRjFENTk5NTBBQzIyMzkxNzk3N0NENTQKLToxMEQxMDAwMDgzRjlDRkZBOEQyRDA1RjNCM0JBRjNGNzIyNTkxNkZGNDEKLToxMEQxMTAwMEJEMjAzOUJGNTlDOTNDOUVBQjM4NUJGMDZGMzc4RkRGRkMKLToxMEQxMjAwMDJBQ0RFNjc2QjI0OEI3OTNFMkNDMEJCMzk4ODg5RjY1RDgKLToxMEQxMzAwMDI5QjNCMjkxM0U4Rjg3RjU0MkZBNUJDRkVEODE4REY4MkUKLToxMEQxNDAwMDVFNjVBN0UwN0I5NUE4QTdBMzVFREM0REU4QTUzNTFGMkIKLToxMEQxNTAwMERCRUQ5QzBFOTk0RUZFRjdGNkRCNzU3MUNFN0RCNzNCOEQKLToxMEQxNjAwMDc1RjlFQ0JBNDQ1REZEN0VGQjVDQkFGMkRDNDBBNkFFMUMKLToxMEQxNzAwMEJDRkYzMUI3MkUzRkIwNjFCMEFFRkUzNTFGNzk3NEY5RjgKLToxMEQxODAwMDZCMUIwQjc0RjU4NzlDRjJFQUYyQzlBQ0Y5NTE4NEVGODIKLToxMEQxOTAwMEU2RUMzNEMyNUI3NzQ1RDg0OTVDMUMxRkIzRUU0RUEwNjkKLToxMEQxQTAwMEZCNEFGMkZDMjFFM0RFMzU0MUNGQzY3MzRENzcyQkQ3MjYKLToxMEQxQjAwMEVCNkI5MjE4M0ZCN0RBQzVGOTk0RTlDRjM3OUE4ODVCRTEKLToxMEQxQzAwMDk3N0EzREYzRTlFM0Q2NjVCQzdBRUIzOTQ4OUM3M0U0ODIKLToxMEQxRDAwMDc5MjIyNDVFREQ4M0YzOTdGMUVBQUQ3ODE3RUY4NzFBQTEKLToxMEQxRTAwMEU5RjU4NTZDRTE1NzMzQUNBM0JCOTVERkFGQUJCOUM3QUQKLToxMEQxRjAwMDRBRjc4NEU0RkM4Q0YzM0EyRUUyOThCN0RBREI3RjBGMkYKLToxMEQyMDAwMDZBN0YzNkI3QUI0NEY2RjBFRTQxN0E3RDEyRDgxNUMxOEQKLToxMEQyMTAwMEIzQ0Q3OEVFNDZGQ0ZEODE5QTdCQURFRUU1QUUyQjhGNkIKLToxMEQyMjAwMDM3QUIxRjVGQ0Y0QzdDMzczNzhCREU1RkE1N0I4MTcyQkUKLToxMEQyMzAwMERDQjcwNTdERUZFOUE3QjRCQkJFNTlEMTNDM0U4RTQ1QjYKLToxMEQyNDAwMDVCRTk1RTRCQzdFMzcxQjgyNjVBRDkwQTdBQjc0QURDNjQKLToxMEQyNTAwMEYzQjg3RDZEREQwMzU4MzREMzVBNkJFMTBGMEZGODJEMTEKLToxMEQyNjAwMDY4NDcxQjM3MTJGNEM0NUNDMEMzMzM0QjFFNzI4MDVFMjgKLToxMEQyNzAwMEY0NjQ5NTk5RUM2MjFGM0M3RkVFMTZEMDMwNUJFRkVEQzUKLToxMEQyODAwMDc0ODc3MzFBRDJDOTM4QzQzRkY0N0I1MzNGMUU5RkZFODQKLToxMEQyOTAwMDZEMzY1RjVGQkVGQTdERUI3RDBCOUI4RUZGMzNFMkZGNDkKLToxMEQyQTAwMEVERDAxREQxQTM1Q0M3RkZENkZEMEI0OUJGNDYzOEM5RTEKLToxMEQyQjAwMDczMzkxMzcyQUQ4Nzk4OTc4NDlGREMxNzEyN0VGMkZFNDQKLToxMEQyQzAwMDhCNkI5MUM1QkJEOTQxRjc2ODBBMzAyRTRGRTJFRkY2NjAKLToxMEQyRDAwMDdFOUMyRTdCRTU3MDc4NjAzREU0NDcxREQ1Q0I1N0IzMkYKLToxMEQyRTAwMEEyRDE1RkQwQzI1Q0QxQ0UyQkQ4Q0RGRjk3RUVBNTEwRDYKLToxMEQyRjAwMEZDM0JCQTRGRDcxMTlGNjhDMzFGM0FCODVGRDcxMTdENjcKLToxMEQzMDAwMEQyOUZBQkI4NjcxN0MyMjc3OEJDOTRDMDg3QkY4Nzg5MDQKLToxMEQzMTAwMEUyMTI1NjQ3RUFGN0YxQjQxQzJFMTdGRTJFRTU4NTBGRjAKLToxMEQzMjAwMENFRTc3QTNFQzFEMEZGNTFCMzUyMTU3QzYyNUVFQkVGN0YKLToxMEQzMzAwMDhERTBGN0I5MkIyREE0NzczM0U2N0QxOEUzMzRGRUJDREUKLToxMEQzNDAwMERFNDJFRjNDMEVGNzMwRDI2RjhBMzYyQUZFNEQ0QUYwQUQKLToxMEQzNTAwMDc3QkUwQTdEODY3NzVBRDRFRjQ5M0ZGQzc2QURFMkM0QUEKLToxMEQzNjAwMERGOEI5OEJENDY1RjNFREZDMTdGQTc2NEFFRjFCRDFBN0IKLToxMEQzNzAwMEU5OEZCQkMyQjlCRTIwNDdFOEU1NkVFNjI2QkQ0Q0M0QzYKLToxMEQzODAwMDUxMTQ4QjNBNDZCREFDQzVDRkZEOEQ3ODJFNTdCOTFERDMKLToxMEQzOTAwMDhCRTJFRkE0REM3N0ExQkYyQkU0MUQxNjgwNkI3ODI2MEYKLToxMEQzQTAwMENBRjExNUU2NzZFMzIyNUJFMURBNDFEQ0M3Mzk4Nzg4MEEKLToxMEQzQjAwMEZCNzBGMDM4OTc5NkRENjFEQzNGMkNGRDcwQTJGRTM5RTIKLToxMEQzQzAwMERGMjUyQUM3RkFEOERCRjk1QzFFQkYyMkZENkY0NkZGQjYKLToxMEQzRDAwMDVFOEJDMzQ0RkVBOTk2REQ5MTE0RTc4MDdFQUY2OEEwMDIKLToxMEQzRTAwMDg3MzNBNjVEMDk4MzUzODNGM0QzMUE1NTlEREZDODk4MEQKLToxMEQzRjAwMDZBQ0JGNkQwNzlGMkUxMUVEQUUyMUM4QzZGMzdCQkVEMTYKLToxMEQ0MDAwMDZFQzhERkU3Mzg0NEVGNzg4RDEzNzYzMEUzN0M1QjdGQkUKLToxMEQ0MTAwMEY3NkYyODdGNTdBN0M1QzdGNUREOTYwMkZFREUwOUYwMzYKLToxMEQ0MjAwMDQ3ODZGQjQ5QzY3MzRDNjRBMERENDE1QTE4Qjg5NkU2OUUKLToxMEQ0MzAwMDczQjVGRUFGQzk5NzczQjlGRkY3RjIxMDZBQUZBREI5MTQKLToxMEQ0NDAwMDk2RjJERDU3M0NCMDA4RUYxOTREQUQ5OTZGQzE1MDgwOTEKLToxMEQ0NTAwMEM2NDc5N0U2ODc0M0QzQzY2RUZFRTVFMTg4QjcxMTRBMTMKLToxMEQ0NjAwMEJCRkU4QjA3NzNCODVDNjkzNERDNUI5MEE5REE4RkVGODUKLToxMEQ0NzAwMDFCNTczRkM5Q0Y0NTNDRDczMjg1RjZDMzYyODVDOUY4RjMKLToxMEQ0ODAwMDJFRTJFNzMyN0ZBOTU2RTRGMzc5N0VDOTRBOUU2RjE0RjMKLToxMEQ0OTAwMEJGQUJCMDRERDg1QjcwREQ5OEUyQkFEMTJFQjA0M0Q4QTcKLToxMEQ0QTAwMDYzNzBERDk4RTJCQUYxM0JGMjJGQ0MyM0ZGQzIzQ0YyNkQKLToxMEQ0QjAwMDJGQ0MyM0ZGQzIxNEY5MTc3RTJGNjJERTk0NUM5NUZCRkMKLToxMEQ0QzAwMEVENDY4N0VDMEZGNERCOEQwRUQxOEZEMDZGMTc5QTQ3QTYKLToxMEQ0RDAwMEJGNUQ2ODdERjREQjg1OTZBM0RGMkVCNDFDRkQ3NkExQ0QKLToxMEQ0RTAwMDc5RjREQjg1RDY0N0JGNUQ2ODlFMERCRTMxOTg0NzdFRDcKLToxMEQ0RjAwMEU3OTlBOENCNEYwNkZEN0Y3NEM4RkU0NkJGNUQ2OEZGNjUKLToxMEQ1MDAwMEU4QjdEM0Y1QTcyREQyQjVCRjhENTVFOURBQTNERjJFNDUKLToxMEQ1MTAwMEI0RkUxRDU1OEFDRUFGNzc4Nzc4ODc3NkY2ODYzOEEyMTcKLToxMEQ1MjAwMDFGNUZBQUI3MDFFOUZFNEYxMUZGQjhDQjgyRTc0NUI1RUYKLToxMEQ1MzAwMDdFMDEzRkI3ODVCQjM5OUU2QjBCMzhERTRERkM5RTg1NjcKLToxMEQ1NDAwMEQyM0M4M0YwQkNENENBRjNGOTNDQ0VEQjQ4M0ZFODE3QTkKLToxMEQ1NTAwMDFCNkRFMTdFMzE0Q0QxMkY4NjI5RkFDNTMwNDVCRkQ4RUQKLToxMEQ1NjAwMEU4OUVEQzJGODYyOUZBQzVGMDNCRkFDNTMwNDVCRjE4ODYKLToxMEQ1NzAwMEE2RTgxN0MzMTRGRDYyOThBMjVGMEM1M0Y0OEI2MTNCQkQKLToxMEQ1ODAwMEY0OEI2MThBN0UzMUZDOEU3RTMxNENEMTJGODZERjRGNDkKLToxMEQ1OTAwMEEwN0ZDRTEyOUMxN0VBRjMzRDc0RTc0QUEwNDNEREI5QTEKLToxMEQ1QTAwMEQyQTlDQkEzM0UxRjVBMUZGNUY5RDA3MkQ0RTc0M0NCQzMKLToxMEQ1QjAwMDUxOUYwRkNEQTMzRTFGNUExRkY1RjlEMDdDNzQ4RThCNUYKLToxMEQ1QzAwMEY2MjFFQUY1QTFFRDUwQUYwRkNENjdEN0ZBNUU0N0RCNDQKLToxMEQ1RDAwMEQ5Rjg4RDE3OEU2MERBMThBOTNDQTkwMENCODg3OTYxM0IKLToxMEQ1RTAwMEM1MzRGNDVGMzY4NjI5MjkzMUMwMzkyRENBRkREMzQ2QUEKLToxMEQ1RjAwMDI3MDE5OTg4MzhDQTFDRDY2Q0EyREZFQkMzQzMyM0M2QTcKLToxMEQ2MDAwMDM5MDQxOEM1QUQ2NjdGOTc0NEU1NjlGMkZFMURGRTAxMzkKLToxMEQ2MTAwMEJDRTdFRTY2RjQ3QjM0RDJCRjJFREJCQjk5NTNDNTU0MTYKLToxMEQ2MjAwMEQ2MEZFNkRCQUY2NzFDNUZENjIzRkUxOTMyMEZCQzY5NEQKLToxMEQ2MzAwMDhERjEzRUI5NEIxRDc5MTgzN0JCNERGQzVFRUVCNkU1NUEKLToxMEQ2NDAwMDNDREVEQTQ4NTdGOTQyNUZEQTY2REE3NTA4RUZEMzM0MjAKLToxMEQ2NTAwMDE3MkE3NEVGM0FDM0NDOEU1OUYyMTA0RTk1NzlBODQ3MjkKLToxMEQ2NjAwMDY0Rjc4QjExRUJBQUJDMEU3Rjc3NENDRTVCREE0MTgxNUQKLToxMEQ2NzAwMDRGRDBGREM0QTFDRDBEQTNBMkExMUZDRDM3ODI3RTFGMjcKLToxMEQ2ODAwMDY3OUM5NUVCMEZEODBFQ0Y5NTdEN0Q4QTY3NzMwODdEREIKLToxMEQ2OTAwMDVGMjNGNDcxQ0RDN0M3N0ZFNkE5MDlCQzVEMzg2RkY3N0EKLToxMEQ2QTAwMENDNTM1MTA0QzcwOTJCMTQ4QTNCMUJCQTgzNzlGMDFFNTMKLToxMEQ2QjAwMEI0NDdDQ0JCRUY4RTgwOEFFMzE1QUVFMEUzQzk3RTBCQTYKLToxMEQ2QzAwMDM3QTZEMEJERDA0MkQ2MzgxQUVGQjVCMDAxMEE0M0JFNTYKLToxMEQ2RDAwMDJERTEwNkVCM0I4MkVCQ0I4MEFEODI3NkVDMUY3QjlGOEUKLToxMEQ2RTAwMDZBRDg4MDk4N0M4QzQ3NjRGNThDREUxNTFEM0ZFMDNENDAKLToxMEQ2RjAwMEREN0EwOUVEODNBODVGOTI2QkJEN0MwQUJERTMzQ0MxNzYKLToxMEQ3MDAwMEI3NkMzOTgyNkZCQzZGRDFFQkYxNTg3RjBCNzNBN0JBM0UKLToxMEQ3MTAwMDQ4MTREMUZENjMzOTlGM0U5RTVEMjYxMDhCMkM4QjM1QkUKLToxMEQ3MjAwMDk4QzIxNEM0MzczQjFDMTc0MjNGQjBGM0E3MjBCRTczMDYKLToxMEQ3MzAwMEREMTY3QTU3NzlBMkQ5NjlBMTc3M0EzQTg4RDdCOUU0NDAKLToxMEQ3NDAwMDkwRjEzQTA2N0RDMTEwOTc1M0IzRjRBMzE0QjQzNzJGNjgKLToxMEQ3NTAwMDhFMzQ5MURENjRGMTlFMDhEMjFCQjQwRDBBRjEzNUE5MTcKLToxMEQ3NjAwMDA3MTU4QTc4QkY0QjJCNUU4RjlGODY3MERGNjVBMUZFMDEKLToxMEQ3NzAwMDY0QkM0RTc5QkEzRkM1ODRGNzEzQkE2Q0NBODk1NTQ5NUYKLToxMEQ3ODAwMDBGNThEMjBGRjUwMERGNEJCNzBDQzY3QTJCRjlCQkEyQUUKLToxMEQ3OTAwMDk3NTZFQ0UxQkY0QjJBRkMzQkYyNzc0RUU3ODhGOEFGOTcKLToxMEQ3QTAwMEMyNkM2RjM0QzZDM0M4REY1MzkzRjc2NEU0RUY5ODRBODIKLToxMEQ3QjAwMDNCNEZFMURCRkQ4RjIyN0UwQjlGMTBFRjdFQUYyOUE0NTQKLToxMEQ3QzAwMEZCRUZDNkI4QUI1MkExRkYyRDU4NjFBMUI4QUQwNTA2NUQKLToxMEQ3RDAwMEZEQjA1NEM0NjU1REU5Rjc0REQ3RjYzM0U4ODdGMjc3QkQKLToxMEQ3RTAwMDcyNDQxREE2NzZGRDNEREE4NUU1QkRDRjk5MTZDRTA3QkMKLToxMEQ3RjAwMDY2RUU2MkU0QUY5QUI5NkM5NDA5REZBQjY2N0IzOEZERTQKLToxMEQ4MDAwMENDNUNDNkY1OUM5OUFGNzhFOEZFQTZENDFCREYxNUZBNzAKLToxMEQ4MTAwMENDQTRDQkM5MDRGRkY3ODVGRTMyMTVFMzU1MDFDRUUzNTYKLToxMEQ4MjAwMDFBQzM0NDFDNUIxMkE1RDMyRUYzRjhENTQ5MEVDRTBGQjQKLToxMEQ4MzAwMDFBRjdGMzc3Mzc1QTdDMzZBRTU3MUQ2MUZDREQzODAzOTMKLToxMEQ4NDAwMDdENEUzNEZCNEQ3OEExRDEzRDE0RTgxM0YyRTM1MTFGMTYKLToxMEQ4NTAwMDgyRkVBNkEzN0UxNDg3RjQ5RTlBNEZGMTkwMDUwQURERkUKLToxMEQ4NjAwMDIzMzJEMkZCMzg0QkU1RUIxODZGM0I2RTJCNzNGQjU4MjIKLToxMEQ4NzAwMDI4QkQwMzFENjM3RjNFODVERTYzRDBDNDM5NTdEMkIxMTYKLToxMEQ4ODAwMDkxRUU2NzQ1MDhGQjk0ODNEQjlGNUFFRDE0QThBQkQyNTkKLToxMEQ4OTAwMDIzRUE3RjlBODZGMUM0QjNEMDY2RDg4NTk2RTFDMUI4RjEKLToxMEQ4QTAwMEJEQzgyQzVFN0VCNERGOUZBNkFEQzBCQjFGMUREODJEQUEKLToxMEQ4QjAwMEQ0OUY1ODA5MUU5QTdDNzdBMjAzM0IwMkRBMEY5MDVGMkYKLToxMEQ4QzAwMERFN0U2N0FFQjUyODg0NUYzRTlDM0JGMjJCRjdDMDIwMUUKLToxMEQ4RDAwMEJFOEIwQ0Y3MjkxN0RGRDc5MzdFRkZBODIzQkQ3ODM2QzAKLToxMEQ4RTAwMEMwMTVGN0M3QUNFOEM2QkI4MDUyRDk5RkZCMzFDRkU4NjMKLToxMEQ4RjAwMEMxRjhGQjkyNzI3RDJDODBGMTk4Qjc4QTdDNkM5REVEMEIKLToxMEQ5MDAwMEEzMzUwRTgyMEJFNTlCRkE5RDlGODY3MTM0RTVGNkM2MjIKLToxMEQ5MTAwMDMxNDg3NjE1NTk5NTA1MTg5RjFERTQ1MzlBMjczOTE1RjYKLToxMEQ5MjAwMEY5NTQ2RTAwN0Y4RkVGQjg5NDQzMDZGQjQ0QUM5QkQ3NEQKLToxMEQ5MzAwMDM3REEyOTY2Njc3MUZFQ0RDNDdCRTM5RkRGRjdGMjRFQ0QKLToxMEQ5NDAwMDk0NUI3MkZFOUY1QkY0Rjc2QTY1MUFFRTE2RjJBM0ZBMTcKLToxMEQ5NTAwMDdGRTY1RTg5RjEzRUM5QUY5MkI1QkZGNzgzRkUxRjM2MDEKLToxMEQ5NjAwMEYxRjcxM0JBQThCNTRDRDg4QkM4QUYyQ0Y5MDYxM0VGNTIKLToxMEQ5NzAwMDhFMDRGMUVFQTFGNzhERkYwQjI5MEU3MEQ1MDA4MDAwMEIKLToxMEQ5ODAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFRDdENzAKLToxMEQ5OTAwMDBCNzg1NEQ1QjVGMDNFNzNFNjk1NjQxMjI2MjEyMTBGMUQKLToxMEQ5QTAwMDQ4OTgwNDAyQTk0Njk4QkMyMEJDMEY5MTQ3QjA2ODA3NkMKLToxMEQ5QjAwMDkyMjg2ODEyMjY4NDQ3QjA2ODIzNkEwRDJEMkQxMzkyOTEKLToxMEQ5QzAwMDYwNDBGMDA2OEQ4MkQ0Qzc4MENBNDVBNTFBOTU1QjQxOTgKLToxMEQ5RDAwMDY5M0I0OEI1NkE1MTMxNDhGNUQ2REUzMDNDN0RCNTM1RjYKLToxMEQ5RTAwMEUyRjVBQUZGRTc2REVGNUE2QkVGOUQ5OTczMzIxM0YwRTIKLToxMEQ5RjAwMEQxRkZFRjdGQkY4RTlGREY2NjlGQkRDRjdFQUNCRERFQzgKLToxMERBMDAwMDZCRUQ5Mzk2MEQ4QTczNUQzNjYzNUU4N0Y1ODQ5MjAwQTUKLToxMERBMTAwMDY1QkIxMkIwOEQ2MThDRjk2NjZBQzEzQzQ2QkZCRkU1M0IKLToxMERBMjAwMDMwNzY3OEI0OEJCMTE0QThFNEY1REVGMzcwMzI2M0I1QzgKLToxMERBMzAwMDZCQUQ2QzIzM0M3QTYwMTREMzE4RDQxRkY4OTFENUVGRUEKLToxMERBNDAwMDgzNzFBQUFENDc1RUIwNDM5OUU0RTZGRERGNjlCQUMzQ0UKLToxMERBNTAwMEMyNEMzODRBMjBENzA1RkRBRTZFOEM3MTZGODRGNkJCODAKLToxMERBNjAwMDBCM0M4OTZFNjg4RkNCNzc1QkJEMEVDNkNFQkExOUY1QkQKLToxMERBNzAwMDlGOTFFMjQ5QzZFN0Q3NkQzQTc4RkY1QkYwRTgwNzA3NjgKLToxMERBODAwMEIyQURERTdDQzZFQUY2MTVBQzRGNzNFMTdCREU3NDc3OEYKLToxMERBOTAwMDA5RDQxRDRFQUIwN0RFQkJCRTM1RDFFQTgyQjIzNjk1NDYKLToxMERBQTAwMDM1NzZFNUUzM0NCRDU5RjNFMzYxQ0RGODlCQzY1ODgxN0IKLToxMERBQjAwMDVCNjEwQ0ZBN0Y1MEMwQThGQ0M4QzIxNkYwN0UxRDk2QjAKLToxMERBQzAwMDc5QkE3RTI2NkE2NzFENUIzNUZCMTA4MDAzREYzQUNCOEYKLToxMERBRDAwMDM0MzM5RkE5OTBCMUUxNTYyRkQzNjBGRDJERTlDQzhENTEKLToxMERBRTAwMEYwMUEwQUNGNkQ4NUJDM0QyNjI5MDQzRjIzRENBQzhDOUYKLToxMERBRjAwMDY5MjY2ODFGMEFBNUI1MzAwNEM3NEM2ODU3RTFCOTI1RTcKLToxMERCMDAwMEVGRTQ0Mjk2ODM3MDYzOEI3MDNGNzIzREIyNUMyQ0Q2MUIKLToxMERCMTAwMENGMTZEODREMENENkI1RDQwRUZGODYyMTY2QUFGOUIzMjAKLToxMERCMjAwMDUyOEIxOTVCQjU0NTcxREFFMEQxMTI4N0VCQUEwOTUwMjcKLToxMERCMzAwMDVGRjI5Mjg1QUQ4M0ZBREMyNDk3MzUxREVBQkQ3MEJFOTUKLToxMERCNDAwMDNCQTFCRUY4QTYwMkFCMEJGNjVEOEQ2NzAxRUI1OEIyQTgKLToxMERCNTAwMDZEMDI3MzBEODZEMjBGNjU1MUZGNzk2NTc5Q0Q5NjQzQkQKLToxMERCNjAwMDk5RkI1RDc4N0M5QUQ1MDNGMDVBRTJENEFDNDlGOUExQ0YKLToxMERCNzAwMEY2RkEwRTQ1RjMzQkZBRDdFN0JCNTVEQTY3MzUxQzI5QjEKLToxMERCODAwMEMyQUZFNkE2NkNFQjYyMDdENjVGQjJBQ0NBQzc3REI5N0UKLToxMERCOTAwMDY4NUZGMjNERTgxN0MwN0U3MzczRDg4QjBDRDcwREZCMUUKLToxMERCQTAwMERBOTlDREU3MkIwQzFCN0YzMThFMUYzNjNGRjQ1RkU0RjMKLToxMERCQjAwMEMxN0RCOUUzNjlCRTNBMjdFQzNCMUI0QjI3QUQxM0UwQUYKLToxMERCQzAwMDQwNzBFQUREMENFM0I5NjgxRTNBOEZGQTgwREZFMkM2RTYKLToxMERCRDAwMEY1OTg2MTVFQTg1RkVERjQ1QjcwOUVDNUFEMDU1NjA2RDUKLToxMERCRTAwMEE1NzcxMzlGQzdEQjlFNjhCRDA0RUE3NTY2QTczNTEzNEEKLToxMERCRjAwMEU3ODkwNTU4MjREM0ZBRkMzQkUxNjg5NjAwNUM5MjFDNDcKLToxMERDMDAwMDM4MEY1QjM0REZEMTFGM0U3NTYyQkQ0QjNBMTJBRDRCMEUKLToxMERDMTAwMDc1Q0ZCNzU4RjAzQzE2QzI3QUJBMjI5Q0ZCRUQ3OEVFNkQKLToxMERDMjAwMDI5Qjg5RUU5NTY4NkVGOUIzNUFCMUJENzIzRTA3QkU2RjAKLToxMERDMzAwMDg2OTg4RDZDMTBCQ0RGQjlENTkyMERGNTlGMjJGRUE2OUIKLToxMERDNDAwMEUwN0IxQ0JGRTZFNjA0NzIxNURDRjcwRDMxNkU1Q0U3ODUKLToxMERDNTAwMDQyNjcwN0VEQUYwRkJFNzcwMTNDRTBGOTUyQTc4N0UwQkUKLToxMERDNjAwMDBCNzhFMTYzMDA4NzI1OURGQUYzMENBRDg3QzM3NzQ5RjQKLToxMERDNzAwMDY3MUREMURCMzJCM0Q3RUEwQzVGQzdCNjgzQjkwQUMwRTAKLToxMERDODAwMDY1MjFEMEI3MDJGMDY3NEU2RjE2RTJDQkQ5QkJBRUNBQTIKLToxMERDOTAwMEEyN0RDMjNBMTFBRUYxNkVEN0FDQjQ2MkMyMTNDMjYzQjgKLToxMERDQTAwMDg5MkZCNTQ1OUM3RUU1N0NCQkRDNjY5QTZGOTdEODU3N0IKLToxMERDQjAwMDc0QkFENDVFNEM0M0JBODRGMzVERTc4QTRFOTc1NjA2MzUKLToxMERDQzAwMEUzQzFCQ0Q2MjU4QUJGNDVFOTRGQTc5MjNFMjU1RDRBRjAKLToxMERDRDAwMDNBOTVGNDdCQkZDNTEzNDg1MzQyN0NBNjc2MTA2QjdDMDMKLToxMERDRTAwMDJBMDI5Q0NFMEEzRTcyQjUzODU3ODBFQjZGMTBBRUIyNTYKLToxMERDRjAwMEZENzU3MUFFRDUzOTdBN0FDN0YxNzBEQ0U3NjQ3QjU5NkUKLToxMEREMDAwMDIwRjc4NkZDNTA3RjM5NkY3NTEyN0YwRkYxMUVGMUVEMDEKLToxMEREMTAwMDM5MDExRkVDQkY4QUZBMEI3ODA5N0U1MURGQzcyRkY2NTUKLToxMEREMjAwMEI0MEQ0MTdFRjFBNEUyNDY3RUIxNkFGM0ExQ0M1QjAwNjIKLToxMEREMzAwMDZFQUI3RTFFODc5Qzk3N0RCOEYyRTFFQkQzMDEwRUNDRDMKLToxMERENDAwMEVDQTc3MzkzRUI1QUZBNzkwMUYxODk2NTlGNEZFMkZDRDYKLToxMERENTAwMDIyMTA5OTVGQjhGMkJDODc5MTZGQ0JGQTkyM0I3RjNFNUQKLToxMERENjAwMENBQ0JGOTREMDBGOUNEMUY3RkZFRENCMTg5Qzg0Nzk4QjkKLToxMERENzAwMERGRTJCOTI0QjQ5RkM1RUQ2RjU4RUExQ0UxRjBFM0ZDODMKLToxMEREODAwMDZFNjNERUI5M0EzQ0FGN0E4N0Q1QTVDMkEzRkFENjNBMUMKLToxMEREOTAwMEUyQkYyQzhEQjk3Mzk1RDBGOTFCRjFBMkFFNTVEMUU4MzUKLToxMEREQTAwMEJEQTY3MTdFRjU1QkU0RDNGNTlCRTYzMTk0NTNGMkRDQkUKLToxMEREQjAwMDYwNjJDNkM2QzEzRTE5ODdBRjVDRkY0NzYyRkRFNzA0REIKLToxMEREQzAwMDdGQkI1QUUwRjdENTBERDNBREU5QzlCOERGQkEyMkUwODEKLToxMERERDAwMDhDNkNBMTc4QkU3MDg5RkU3OURGQjkzOUZCRjhGQzdBQ0EKLToxMERERTAwMEE0OTc3MzVERkNEQ0NFNkRCMjEwRkYzOUI3MjdERUNGOTAKLToxMERERjAwMDYwN0YxRkFFN0FFNkI1MkJBMURGMDc3N0VGQzg2MkFBNzYKLToxMERFMDAwMEZFREM1ODExM0YzNzJDOTdDM0I5QjFDMTExQ0Y0RDJENEUKLToxMERFMTAwMDA4RTNDM0NCMUZFMEU3NTZGRkY4QUJGRkYxQUM4QkY2OEUKLToxMERFMjAwMENCRjlERDY2OUIxRkY5RjFFMkFFMjdFOTFDMTdCNjZGNEYKLToxMERFMzAwMEIxNjQ0M0JGQzEwNUQ5M0EzRTVFREY1OEUwNjQwMERGRkMKLToxMERFNDAwMEFCREI3NzU4OTA0RjBDMkVFMDcwMzREMjAzOTQxQTBCNTIKLToxMERFNTAwMEEzMzM5NDRCNEExMkUyNUYzMDFERjE0RkY2NDdGRUY4QjAKLToxMERFNjAwMDI0Q0M3M0QzMEQzMTA5NkM2QzY4OUVDOTA1OUNDRUVBMzUKLToxMERFNzAwMDFCMTM5MzcwQkVGQUM2QkFEQkQ5OTg5MDNDMzBFRUYzMTAKLToxMERFODAwMDU0MENBNzk3QzUzMDFFRDJFREE5RTlFRUFDNTU4NDlGN0UKLToxMERFOTAwMEE2ODg3MkI3QTg4MDlGRTNDRjAwREMzMTgwMEY0M0UzRjAKLToxMERFQTAwMEJBMUU0MTM4MENGRDQxQUMxQkY5QzdDODkxNDEzRkNFQTkKLToxMERFQjAwMDhCRjg4REVCQjYwMkZGQjQ0M0JGOTEyQjgzMUZFMzNBN0YKLToxMERFQzAwMDQ2MDI4NkUxN0I1OEM2Mjc1MUM5ODY0MDdEMjcyQ0JCNzgKLToxMERFRDAwMDE0Q0ExQzk1OTcwQjBCMzg5RTQwN0IwMERCNTk3MkIwMUYKLToxMERFRTAwMDA0RjcyRkYxREI4OEJGNTZGNjUwN0IwRUYyQjE2NEU2RTMKLToxMERFRjAwMDZFNzE4NUYwNTU4RTIzRjE1NUUyNzNCNEZEQ0QyQkUwQTQKLToxMERGMDAwMDdDRTU3Q0ZCM0I5NUNERTE2OThEODVGRDI1N0Q4NUZEMUYKLToxMERGMTAwMDAxQjI5NjI2ODVGNjI1RDdDN0YyNjA1REE4M0ZGRUY4QzgKLToxMERGMjAwMDkyMUQxQjYxOUU1M0NERUVBQzQ2Qzc0MEZCRUQ5QzM5NjQKLToxMERGMzAwMDI0QzI3RThERkI5NDc0QjNDNENFNjkxQUU4NjY1MDEwNzcKLToxMERGNDAwMEQ2N0RBRTYzQzQyMDk0M0JBNzE0OTA2RkYwREVBOTFCNkUKLToxMERGNTAwMDYyNENCODdFQjlBRjVENkJBMTMzQUM3NUY3NUEzQjk1OTcKLToxMERGNjAwMDhGQUUwNUMyMUJDREQ4OUVCNTY5NTQ3RjdDQUQ4QkNBRTAKLToxMERGNzAwMEFFQjU3OUY0RkNFNjgyMjRCRTBGMTY4QzQ3M0QxM0Y0NEYKLToxMERGODAwMDAxQ0UwRjAyOUM0RTdBOUE0NkQwQkVFNDczQTkxN0Y0RDQKLToxMERGOTAwMDM4ODNGMTQ5NjFGQ0ZCNzRBMzkwOUIyQ0I4MTlFOTlCNzEKLToxMERGQTAwMDM1OEQ2MDBGQzM1NDNEMURBN0UyNERGOTg4OUY3QzdERTAKLToxMERGQjAwMEYyQkQ5QjJDQkRDNDBGNTlCQ0Q1RjUzMDkwNUNEQzREMzcKLToxMERGQzAwMDZGQ0M0Qzg1Rjk5Njc2NjYxNzI4RjA1RTRENTM1MTRGMEQKLToxMERGRDAwMDEzQjREN0I0QTZCQTkxNkYyQzc1QjhENkEzNUM1Q0VBMUIKLToxMERGRTAwMENCNzZBMzVDOENFQjJDMzhCQjBEREE5N0I2NUVFQ0M2MTcKLToxMERGRjAwMEZFMzcyOUNDODNGNDA1RkM5MzIxREM5NkIxQkU5RjY2RTUKLToxMEUwMDAwMDA3QkVCNjVDRjBCNUU1QzgyRjAxNUVDQjlBMEU4RDc0RTUKLToxMEUwMTAwMEMyRkJDQkRDMzEwNTI4REY5NzZGRTM3NkMyNUMxMzZCNjQKLToxMEUwMjAwMDU3NTAwRUI3Nzg2NjIxMUZFQkJENDc3MUEzQkVDOUVFRUUKLToxMEUwMzAwMDA1RkU2QTBGRjE1NzdGOUVBN0EzMDBFNUQyOTc4MDdGNjgKLToxMEUwNDAwMDMwRkU0NTI4ODM1NURDNTc5Nzg2RkI2MEEwOEYzQ0NDN0IKLToxMEUwNTAwMDcwREQxRUQyRUIwNzA5N0NFOUU5M0MxMUVGQ0FFN0YwNUQKLToxMEUwNjAwMDQ2N0Q5RDc5MzUxM0YyREQ1NTQyQUUwREI3RjY5RUI4NkIKLToxMEUwNzAwMDE1RjU5OTc4OTM3QjI3RTc5N0FGQkI3MDlGMkZBQkNDQjMKLToxMEUwODAwMDQ2RjI0NkY0MTdGQzc0Rjg0RjRCRURDOERGNTZDNUU3NkYKLToxMEUwOTAwMEE0OTI1RUI1NEQyNUZFMjhGMUE3NDFBQzc5RTk4RThBQTAKLToxMEUwQTAwMDIxODgzNzRCQTExREU1REQ3NjdDMDgyQzc0N0RFN0E1MjIKLToxMEUwQjAwMDQzMTBBRjk2NkM5OTc5QjcwRkU0NTg5NjgwRTM2OTczNzMKLToxMEUwQzAwMDcwMUU5RUNGN0IzQjUyOTM5QTUxMkZCQ0FFNjUxNDgzM0EKLToxMEUwRDAwMEY2MjUzQjZFQ0RDMkYyQkQxRDMxMEI5MERGQ0Y3MENFNjkKLToxMEUwRTAwMDlCOTEwOEZCNUQ3NjZGNjI4MTFBMjYzNzdFMkRFOEYxRTEKLToxMEUwRjAwMERBRUIyRTRENDU3QjYwRTU1RjBGRERFRjFDMDFGMzAzOEUKLToxMEUxMDAwMEFDMTFFRTlGNzZDNUY5N0REMDY1RTVEQTdENTkyQUQwNTAKLToxMEUxMTAwMEQ4NUY2RERFNjc5MTZGN0ZERjc0RTBDQTA5QzhGRjE1QjUKLToxMEUxMjAwMEZGQUU3NEVBRUY0QTc1NDZBMEY3M0VGOTBBRjhFRTAyMzAKLToxMEUxMzAwMDdDQkVFRUE3NkZEMzM4N0YzNjFEQkU2MjIxQkNCRkYyMTYKLToxMEUxNDAwMEJBQTcxMzcwOUNFRkRGNzU3NDlDMTM5RURGM0REMkZCNjIKLToxMEUxNTAwMDIyOUVENzA3Q0E4RTVENEUxNDRDREI3NjhDNDFCOUZERUEKLToxMEUxNjAwMDVCNjE0N0NENERGMjVDQjkxMEUxRkVCMjRBNzA4RjM2NkIKLToxMEUxNzAwMDVGQzMzRTg1RTAyQkVCMzVGRTQxQTRDRjdBMDNDQ0VBQUEKLToxMEUxODAwMEM0RDJDOTQ4NUY3RTRGNjU0REE4MEY0OEJENDYzRUZGQ0IKLToxMEUxOTAwMDgzODBDQjdCODMzQUIyMTAyRjU2RUNEQTlBODU3MkU1RjYKLToxMEUxQTAwMEZENzg1RUFGREU3NUQ1MkJDOEE3QkMwRkQ5QjhERTZFODMKLToxMEUxQjAwMDY2QTQyN0Q3RkJCOERFQ0QxQTgwNUVEMzQzRjM5RjJFMkIKLToxMEUxQzAwMDg4QTNGNUFGRDg1NkE0OTM4NzgwQTFGNEZDN0QzMzJCQTgKLToxMEUxRDAwMEM3NzUwQzZGRTkyRDQwRkRFQjFENzM2MDI5OUVFQjNCNkQKLToxMEUxRTAwMEEwRDdBMjdERkI2QjIxQ0ZERUU5NTA2N0UxNzMxRjEwNDIKLToxMEUxRjAwMDEyRUEyM0VGNzQzQzFEM0ZEMjExRDJFM0UyOEJCQjAyNDMKLToxMEUyMDAwMEM4RTdBRURCOUI1OEE4NzI5NDIyRkNCQURFMjlGOTkzQ0EKLToxMEUyMTAwMDYzRDZEMDY0RDJDNzlDODhBN0FCRjZCRjMwOEJGMTNBRTcKLToxMEUyMjAwMDA4QzJFOEYwQkM1NkU4NjE3REY1QkQ0RjkyNURCNzcyNUIKLToxMEUyMzAwMDBGRDcyNzU2NzYzREY5NjIwNjhDNzNGRDNFQTE0RjA4MzUKLToxMEUyNDAwMDNERTUzQTQxQ0ZEN0VGRTU3MEI5NkVFRjA5NkI3REI4ODgKLToxMEUyNTAwMDNEOTI5N0I0N0UyODY4ODJCNkMyNDEwQkVFNzJBMUJEOTIKLToxMEUyNjAwMDBEOEI5ODA4RjhERDY1NUFEODBDNEMzQ0NCRURFNDdBNjAKLToxMEUyNzAwMEE1Qjk5N0Y0QzM4RDc5REQ2NDk3NUZENzJBQzZDQkVCMzgKLToxMEUyODAwMDVFOUY0M0ZCOUQzNzM4NUMxRkIyMTc1QTA4QUVGMjdEODQKLToxMEUyOTAwMDgwMDdCREY3NTk0Q0MyMThFNDdGODFFQjYyREI1MUFFQjkKLToxMEUyQTAwMDZCRDczQkNDNThCNjVDRTcyMDM5N0Y2RkEzMjlDRjBDRTYKLToxMEUyQjAwMEYwRDU5NDU4MzdFQTcxNEQ3NkRFRkY5NkQ4ODQ5RDU4OTQKLToxMEUyQzAwMDFFODhFNUY1Q0Y2MkIyNDg0RTdENjZGMjNDQjkwQ0ZBODUKLToxMEUyRDAwMEREQTIxRTg5NjEyM0YwQzg3QjBGOTlBMDNFMkFDNTNCQjEKLToxMEUyRTAwMEJDMTBFNjRGNjU0MDNEMkFDQThGODA4MkVEMUZGREYyQ0IKLToxMEUyRjAwMEREMjI1Q0M3RDRFMUMxNEYxODJDQ0RBMjI0MkU5QzAxOTUKLToxMEUzMDAwMDc4MzJCQUQwQzlGOTdCN0VCMDA4RjEzREU1NzlDRUFGNUQKLToxMEUzMTAwMEVGQjNCMDc2OTQ3N0NDRUM2MUYzRTE3OTAwRjkxNzlFMTYKLToxMEUzMjAwMEZGMTcyNjNGRjJFMzAzNEFFMEMxNzBGREFCQkE5MEVCNjIKLToxMEUzMzAwMDBGMUU5QkEzNUQ4MTc1MkVDRkY2QkE3MTFEREY1MzJDODYKLToxMEUzNDAwMDk3QTBFQUMyNUM2QTJFOEVGRjkxODVCNzRCM0RCNjRDMTIKLToxMEUzNTAwMDMwRTE0QzYxOEY1OTMzRDIxQ0I4QkYxNjAxMkY0NUQzMjEKLToxMEUzNjAwMDU4MTNBQzYzNURGRUYzRjU4ODJGQjdGNURBOTkwREU2MjcKLToxMEUzNzAwMDJGRUI4RDI1QkQzNjMzQTM5Q0U0NUI4QjgwOEJFMjRBNkIKLToxMEUzODAwMDQ2OTlDMzlFQ0YzN0Y5NkNCMERFREI5OEREOEZGRDk5REYKLToxMEUzOTAwMEREQTBGRjlBNjIzNDdDNEYzOUYwREIyRjkwREYwRjU1MDAKLToxMEUzQTAwMDNGM0UzNDA4RkEwRkJENDU3MUI3NDA5RkRBNzM2N0VGRkYKLToxMEUzQjAwMDdCOURBMUZERUMyRjQwRjgyRDRERjE1RTU2MDhFN0Q5NkQKLToxMEUzQzAwMDczQUVGQzg0MTdDRUZCMzY2Nzk3REQ5RENGQzcwQkRGOUUKLToxMEUzRDAwMEM3ODFENTVGMjQyNDk5NDJFQkZCQThGN0VDQ0Y5RjI5OTYKLToxMEUzRTAwMEM2RDI0RTcyQThFQzgwQ0FGRDREODZGNTdDOTRFNjMyMEEKLToxMEUzRjAwMEQzMzlGNURBMDMyNkVDRUYzMEY5MTUwNUZCMUY3QTFCNEMKLToxMEU0MDAwMEQ3NTc2Njc3MDQ1NEQ0RTNFRDk2M0Y4NUNCMTk3NjI0MkQKLToxMEU0MTAwMDMzRjFFQ0M1MjQ1QUQ4REY0MDU5MThEMkMyQ0Y2RkVBODUKLToxMEU0MjAwMDIwQkQ3REY5ODM0MkFFM0ZGRTQwOUM5Mzg0QUY4NDFCQTgKLToxMEU0MzAwMDczNjkyQzVDQ0VGQ0NBQjFBQjg2RkJCMTM4MURGRjQwQzIKLToxMEU0NDAwMDNDM0ZGNzc5MEVFOTE3RTcwRTgwOUUxMTQxRUY5NEU1MDYKLToxMEU0NTAwMDUxRDQzMzQwN0YwOEU0NjhCNzE0OTY4NEU0NkM5NTk0RjMKLToxMEU0NjAwMEJBNDIwRUFCNjJEQzJBMDFBRjJBODc4OUMzQTdEMjAwNjkKLToxMEU0NzAwMDFGODEzNzQ2QkMzMDlFQkIzQzRGRjZBMzIzMkYwQ0NBRUUKLToxMEU0ODAwMEE2NzNCQ0U0NUYxODlEREYzQTVDNDdDRjE3ODdEQjgwM0IKLToxMEU0OTAwMERDNTg4NkFBOURGMDY2RkYyMzlFNUYyMDY2MzRFQTE1NEQKLToxMEU0QTAwMDc3OTk0OEFGNDBCRDBGRjU0NEM5M0ZCQ0M4MDdDNkQyRjUKLToxMEU0QjAwMDczQUUwN0U2MzFFMjFCQjU2QTJDRjkxOThEN0M0M0YyODUKLToxMEU0QzAwMDBCNkYyQzk0NjM5MDZGNzQxMDNGQjg0NUVEN0RDMUE0MjEKLToxMEU0RDAwMDg0RjhDNEYwRjJFMDI1Mjg4NzdCQzBGNEM3RjZBMEE5MzEKLToxMEU0RTAwMDhCOUVCRjU0OTg0M0Y4MzI4QzFENDlDN0U3NjBBRjk0QTgKLToxMEU0RjAwMEEwMUVBOERBMUZCQ0VGMzQ4ODk0Q0UwRDlDM0U1QTJDODcKLToxMEU1MDAwMEZFN0I5NjIxN0ZBODcyQjg1MUFGRkJDODZGRjI1OTYwQUQKLToxMEU1MTAwMDlEOUQ4OTlDNkY3NEFFQzgyMDc5RkUxMTEzN0M2NDgxMjcKLToxMEU1MjAwMDk1RjhDODI0OTNDOTQ3RjZENkMyMENCMkI3RkFGQUU3RjEKLToxMEU1MzAwMEJBQzhCRkZBOEJCRkFBQTNCNjYxRkIzQzNCQzlERDRFOEMKLToxMEU1NDAwMDk0Qzc1MEVGREM3QzA5QjUzRjI3RjlEMjBBQ0U5NzNBNDEKLToxMEU1NTAwMEU3NjlFOUIxRDgzRTZGODgwOUU3REI5RUVDN0QxRUNGMDUKLToxMEU1NjAwMDNENDNGNTNGMTI4M0ZBRTRGNzYzRDlDM0YwQkMzMzVCNTQKLToxMEU1NzAwMDRCNDc3OTdCQjdFMjU5QjgxNERGQkY4NEFGM0JCODMwNjMKLToxMEU1ODAwMEY2RjE1REZDNzgwMkU4NEZFQTY5OEFERkI5MzE0QzNFNkEKLToxMEU1OTAwMDFEMUVDREY5RkE3MERGODk3QjEwNUVCRTMyOTY4N0ZBQjgKLToxMEU1QTAwMDdDMEZFMkU3RDhEMDc5ODE1NUNFOUE5MjQyRTc5NjZDRkIKLToxMEU1QjAwMDM4Mzc4OUFGM0UwQjlDNUYzMjNGQkY3NTRBRjRGMzRCNEYKLToxMEU1QzAwMDE2RTdBNzM0MDE3RTEzRkZFN0U3NzM4QkNBRjkzQkZCMUQKLToxMEU1RDAwMDE1MThFMDUwN0U5Q0UyMERFMjdFNUI2RTgwNzMyMTgxMTcKLToxMEU1RTAwMDE4QkMxOUUxNzVERkVBNzgwREY3RDE2MzYyMEQ1RDExOTIKLToxMEU1RjAwMEU4RjY0M0MxMUYxODRBNjNBMDg3NDU4MjFFMTY0OUJDMkUKLToxMEU2MDAwMDVENjNDMERCRTBCMEM0QjM3MTAyNkZFMUZERTdFMjNDRTMKLToxMEU2MTAwMDdGQzY3OUZGQUMxQzFEODcwRjBGRkZCN0JBMjBEMjNDMTUKLToxMEU2MjAwMEZGMjVGOENGNDFCQkY3RDM0MjkyQUY2NTNBN0RGNTcwMzUKLToxMEU2MzAwMEMxQkI5OTI4QTdEODk3ODc4NkExREM3RDJBRDlGMzM5NTEKLToxMEU2NDAwMDhFMUIzM0IyOTdGQ0U2M0RFOUJEMTZEQzY3Q0ZDMjBGRTcKLToxMEU2NTAwMDMyNTEyRjVBRDRGNDVCQTJBRjBCNURFN0JBQjg1QTBCMTQKLToxMEU2NjAwMDhFOTM1ODk5NkQwOTQyOTk1QTk5RkQwMkUyQ0ZCMTM5QkEKLToxMEU2NzAwMDM2OTcyRDgyMUU3MjcwQ0VFODRDRDQ3RkJCQUI0NjY3QjYKLToxMEU2ODAwMDIyREZFQjg2MDMzQzgyRUIzM0JCRTI5MUZGQjE3RDM1QTkKLToxMEU2OTAwMEM0QzdBQTA0MUZFQkFFMUNDMTlGMEJCRTE5RjY3QzczNDYKLToxMEU2QTAwMDMxRUFCNTBFOTMzQjVDNUYzMDk2RUYwM0RGMEMwMERGODEKLToxMEU2QjAwMDdDMTdFQzMzMkNDRjgwN0QxNjAwRkRGNTE0RDg2NzU4RkQKLToxMEU2QzAwMDNGMDFGNjE5OTZDN0MxM0VDM0IyN0JBRDlCREE1QjJBMDgKLToxMEU2RDAwMDQ3RUMwQkMyMzk3RkRBQUVEMEY4RThCRjhEQTQxNzVGRTQKLToxMEU2RTAwMEZCOTBDQTAyMTIzRUYwN0ZDM0JENzEyQzkwMTdBQTJGNzcKLToxMEU2RjAwMEVCMUNBQ0FCMkZEOTM0NTQ1NzVGREMzQTQyNTc5NzdBQjYKLToxMEU3MDAwMEE0NzdDREM1QkE3MTJCQ0E4Qjc0RkRENkM1OERCMUUwODcKLToxMEU3MTAwMEI5MjY5NjE3NzBCODk3MTcxMERDQkIyRjhGMDJGN0NCNkUKLToxMEU3MjAwMEM3MTNEQzhGQ0UxOTlGODlGMDNDOEE3MDQ3RkJDREVDNzQKLToxMEU3MzAwMDhFQzc3MzkwNzA5RjJGRTYzQzVBNUVDNDlGMEJCODg3QkMKLToxMEU3NDAwMDlFNTcwQzI4QTczRTQ0NzhEQjEwRUU3NjJBREY0NTc4RUEKLToxMEU3NTAwMDEzREMzOUJDNEYyMUJDNkQwOEY3M0MyQThGMjNCQzQ3MjIKLToxMEU3NjAwMEUzQjgwMEVGRTJGM0MzN0JFNTFFNTUwNzg3NkIxRkQyQ0EKLToxMEU3NzAwMEMzQkJFMURFQzEwNkY4MEZENUMxNzFDOUE2MTFCQUJBOTMKLToxMEU3ODAwMDg0RjdFMjU2M0RCQ0JENkI4QTBDRkQxOERCMDQ3MEE4MTMKLToxMEU3OTAwMEMwN0YwMDFEMUMyRDk5NEQ3MTI5QjM5REY5RTI4MEFGRkEKLToxMEU3QTAwMDI0MjJCREMxRkFDRDk1MEFENzhGRTBENzAxNzQzODFGNTYKLToxMEU3QjAwMEZGMDFGNDY1NzZGMEY2RDY4NThBMUZGOTEyRUE0NDY4RkYKLToxMEU3QzAwMDU3MDA1QzAzNzE0MDY3MTVDRTUxNjc5MDJGNUQ4NTFDMjMKLToxMEU3RDAwMDRDNDVCQkRFNEZFNTM1MkM0MEY0NTlDMzgyNTQ1RkM0MzEKLToxMEU3RTAwMDdBQjNBQzUwNUVBRjA2RDZBM0ZGRUU1NUJCRjdDNjIyOTgKLToxMEU3RjAwMEEwRkJGRjlBRjM0NjhGODI0NEU5QUUxQjhENzRDRTFDQkEKLToxMEU4MDAwMDQ5NjQ2RjQ2M0IyN0UwOTQ1QzFGQzdBRUUzQzRCRUUwOUIKLToxMEU4MTAwMDU3ODlGQzFGREVFQjhFMUI3M0YzQ0Q3MDBFMUZENTA1RTEKLToxMEU4MjAwMEM3RTFGQzJCRURERTA3OTI0RDM0NUY3MzExRjIyNThCQUYKLToxMEU4MzAwMDc3RjQ2MDc4RkU2QUM5Rjg0Q0E0N0ZFNjQ5RDFEOTQ5REIKLToxMEU4NDAwMEQxRTZEQjgyOUIwNTM4RDQ5NTAzOUMxNDhDQzM3MUI4NDgKLToxMEU4NTAwMDlDQUVFMjcwMzlCOEM1NjY0NTdGQzZFOTBEMTZGMjU3MjEKLToxMEU4NjAwMDZFOERDQkNBNDJCQzNEREQzNjNCMEJGMUFFNzlDQkU4QjkKLToxMEU4NzAwMDJDQzRGN0Y5RURCM0RGNDdGRTNENTM5RDVCOEJFRjlGNTMKLToxMEU4ODAwMEVDRTA3OENGRDgwREE0NzdERDJDQ0VFRUE0OEJCOTAzQzUKLToxMEU4OTAwMEQwNUUzNTI3REVFRDgzRkQ3ODdERDkwOUI0NUVBNjM5REIKLToxMEU4QTAwMDBBQTA1RkJERDg3NzdEQzdGMkI5Mzg5RURDRkZFMjREODQKLToxMEU4QjAwMDM2RERGOTdGQUY1NDVGQUY2MkQ2MTA5RTY1RTMzOTVCRkEKLToxMEU4QzAwMDQzRUQ3OEZFNkFGNTIwRUYwMDc2NzREMzFGNzdCQ0YyMzMKLToxMEU4RDAwMDlCQjBGMTFFMkI4QTRGNDZCRUNBQzZCM0YxN0Y1MzQzOEQKLToxMEU4RTAwMEVGNDc4M0VCNjc2QkZEQUZGQzI2MzcwNDU3ODk0RkVCOEYKLToxMEU4RjAwMDhCM0M3QjExMUZFMDMxQzVEQjgwOTY0ODFFNUNERkU3NTcKLToxMEU5MDAwMEQ3M0E5MDgwRjBEQjEyRjdBQkRCMjcyMTVDREVFNDdFQTgKLToxMEU5MTAwMDhFQUQ3MUI1QzQzRjNFNDRCRTlEOEQ3Q0ZBQUFDQzYwREQKLToxMEU5MjAwMDE4NUY5MEVGMDcwNTNGM0RGNkYzQUI4ODhGMUNBQTRBQUUKLToxMEU5MzAwMEE1Nzg0Q0Y3NUVFRTVGM0UyRUU4QkVCQkYyQUE5QTlCMkUKLToxMEU5NDAwMDgxN0Y3NkVGNTE0OUNGRUJERUY3QzkwQkU4QTdFOUVFRkYKLToxMEU5NTAwMDUyREMwMkU0QTZGMDcxQkJGNzAxM0Y0NzdFRUJCMTUwRjkKLToxMEU5NjAwMEZCQzEzRDRGRDMzQUJGMkQ3RTVFQjk1RkYwRjM2RDdDQTYKLToxMEU5NzAwMEZFQTU2NjBGRjExN0U2NURBMERCREZERjhCQUY5RjhGOTMKLToxMEU5ODAwMDlGMUZCMzcwM0NFRDNFQTY5MkJGOERGOUI0MjM3OTQzMkYKLToxMEU5OTAwMEMyRjBCMzlDRTM2NzczOTU4RDcxRjlDQUY5Q0NGQzRBNTgKLToxMEU5QTAwMEEwMDNENEYzOTlBQjA0NkRDQTBGRjc1NUE0OTBCQ0RDNTcKLToxMEU5QjAwMDY0Mzk4OUZBQjQxM0ZFNDNCOTZEODQ2MzE1MzM5RjBDMkYKLToxMEU5QzAwMDg2RTFFRkNBQkREMDNGNkM3REYzQjEzRDBDOUY4REY4NjEKLToxMEU5RDAwMEFBMTQwM0JFNUUxQ0MyRDc0RkQ5OTc1OUQ2MUNERTdFM0YKLToxMEU5RTAwMDY0NDg4OEVGRTEyRjlDQkY0OEJFMjVGMTE3Rjg1NjJERUIKLToxMEU5RjAwMEYyMzVFMDJCOEU2MkMwREIxRjE2NjZGRjMyQTg4NEYxNzEKLToxMEVBMDAwMDk1MEJFNDYzNUJFMkZFNEE3MjcwNkJEQzVGMDk4RjhGRUIKLToxMEVBMTAwMDU2MDkzQzA2M0QwMzlGNzc1RkNFRjUwREU2NUY0MEY0NTcKLToxMEVBMjAwMEIwNDhFQTExMTY0RjNDRkE0OThGQUQxOTlDODBFRDI3OEEKLToxMEVBMzAwMDVBMkI4OEVFMjQzRDE5RTczQjJFRjA0RkY2NUI2NEVFMkYKLToxMEVBNDAwMEI1QjgyM0M4NDNFRjFBM0RGRUIwREQwQjA4REY2RjM2QzMKLToxMEVBNTAwMEUwNTlCNEYxOERGREU1M0M4QjBDRjE1RUUzM0M5MzhCMEEKLToxMEVBNjAwMDg1REVEOTU1NzM0MUYzMjExOUY2QkQ0RkZBNkQ2QzA4NTcKLToxMEVBNzAwMDJGNTVFNDAzOUZDNTA3NDlGRjVBQTBEM0NCOEU5NzhGMkMKLToxMEVBODAwMDI3QkRFQzY4RTUyNzExRjVCM0UzOTU5RkJDM0ExRUU5NzUKLToxMEVBOTAwMEFEREMyMkU4QkQ4MURFQUYxMEVEQzY3NUJDMkJGNDg2N0YKLToxMEVBQTAwMDMzODI3RjlDMTI3NDJEREJENTFENkQ0M0FFNDZCQzVGNTcKLToxMEVBQjAwMEEzQkE5MTVGMUQ5QjVCNDQ3OEZFOUVCRjhBRTYzRjVFRDIKLToxMEVBQzAwMEE5OTJCRkE5NzZFRjc3QUU0NjdGOTM1QzhGOUNBRkUyQTkKLToxMEVBRDAwMEYyNEZFMkQxOUZGNjI5QzAwQkZENjMxNTE2Nzc0QTI0NDkKLToxMEVBRTAwMEZEQzIwODhGNjhFMzRBRkMwMTdERjYxOEVFRjMyOEYyQjgKLToxMEVBRjAwMDUxNkNGNUVBRTE3NDE0REY4N0Y2RjkzQjU0OEFCNzE5RDMKLToxMEVCMDAwMEUxNzQ2OENFNjhFMjRCQzc3NzBCRkUwOTcwNDUzREJDRTcKLToxMEVCMTAwMEUxNUVGREI5MkVFQjhDMzNGMDlCQzFCQUY2Rjk1NTVDODIKLToxMEVCMjAwMDJGOTNGQzVBQUVFRkU4OUExMTI5Q0M3MUUxRTcyREM3N0IKLToxMEVCMzAwMEI5NTA3Q0I5NTZCQzhGNjJGMzZGMjQ3RjkzNzRFMzgxMjQKLToxMEVCNDAwMEE1Njg5ODJGQzdEMDdFOTFBMUJENTA1RkJGNDAzQzNFQzUKLToxMEVCNTAwMDIxRjA0N0NBOUYxMzMxRUU5QTQ4NzFCQ0UzOTdEOTFBNDYKLToxMEVCNjAwMEMyRjMxM0ZFQjU5OEZCODdGRkI1NThDNEJEQkZBMkRDNDYKLToxMEVCNzAwMERFNjlFMDgzRTc3QjVGRjJCREE2MjJDRjIzQzhFRjU4QjIKLToxMEVCODAwMEEwODJFMkQ5MTdDQUU3QzJFNEZDOTNDNTQ4RTc0MUM1QjEKLToxMEVCOTAwMDhBRUY0QkJERUFEQTcyMkUxN0I2QzYzRDRFNzkxQTdGNjAKLToxMEVCQTAwMDZFRTY3QUQxQzE2NjFCRTFFMTVGMkVFN0VEN0ZGOUI3MzIKLToxMEVCQjAwMDc3NDk5RjNBQjQ3RjZCNDJCODlDOTc3OEY5RkVCRUQ5RUIKLToxMEVCQzAwMDA5RTgxNzNFNURGOTYwNDJCODFEMjBEQjNGQTg3Q0YwRTQKLToxMEVCRDAwMEY2ODk0NERGQUE3QkEwNzNGOUJBRjY0MDc3QTVCMDA3OUYKLToxMEVCRTAwMDg0QkVGMDdENzNEN0ZGMTU3QkMwNjgwN0NDNTRFRjREMTIKLToxMEVCRjAwMDQwRkU2N0I0MDdERTc3NjkwOTRFODI4RkEwM0IyMTU3M0MKLToxMEVDMDAwMEFFMTVGMEY5OEI0NTRCQTAzOERERUUyMjJFNTcwQ0Y4RUYKLToxMEVDMTAwMDI5RTE3MDU2QzI2MTUzQzU4MDc4NzM0NkM4MDU1OTVGQjMKLToxMEVDMjAwMDZBNjYwNDBGQUY5RDkxQkVDQzNBMTUzN0M2QkYzMDREMTIKLToxMEVDMzAwMEE1MTRDRUU1NDg2NUMxODNFOEJGOTJGRDdGNTRDMkYzQjkKLToxMEVDNDAwMEE5RTQzQ0M3RUU1M0JBRDBCRkYyREJENjhBOUE5QjMxMTcKLToxMEVDNTAwMERGNjE2RTFDRjE1NUQ5N0Y5OTZGNjBGOTc1NkM3M0UyQjUKLToxMEVDNjAwMDE1Mzg4Rjc3OUJFQUM2NDc1RURGODk5NEYwRjU0QjNERjgKLToxMEVDNzAwMENERjhERTBBNzNDNzA1RDlEMTVFREY4RTA0QjQ2RjgzODkKLToxMEVDODAwMDYyOURDMTgzMzE1NjU3N0NGRkY3MzA1RTgzRkI1RjMxNTUKLToxMEVDOTAwMDU3NzUzN0MzRkE1NzZDRTJFQkFBRjJBOUVFMUNBOEZGMkUKLToxMEVDQTAwMEI2RTNDMTJCOTAwRTRFMzU1OTRDREMzRTcwRUFGMEZDQjkKLToxMEVDQjAwMDcwNDdEMTZCRDhGRjc0Mzk5NzJCMjcyQTJGNERDMDNDNTIKLToxMEVDQzAwMDM4REYzNjhCM0JEN0Q1N0ZCRUQxMDg0NzhDRjNFQ0IzMEEKLToxMEVDRDAwMDk5RDA3RkZBN0U5Mzg1MDVDODdGRTEyMTdCRjlEOEE2N0MKLToxMEVDRTAwMDExNTRCRThGRjBFM0Y2MzU5RDdGNTEwOUY3NzM5REVBMEQKLToxMEVDRjAwMEE4MUZDMkU5Qzk0NUVCOTBGODcyNjJCNzVBRUU4RkMwRkYKLToxMEVEMDAwMEFGOEFDNDdDNjdCRTdDODJGMEVEQzVERDE1MjQ4RjRGRDEKLToxMEVEMTAwMDU1RjI3OUNFQUM3MTI3MjAzQzdGQjc0OTI1M0EzRUVEQkMKLToxMEVEMjAwMEUzRTMxRkRDN0Y2QkMyNDREOEM3RkI5NTdDNUZFRkVGNEEKLToxMEVEMzAwMEJCRTVCNTA5QjBDRjYwQTU5NEM3NUM0RUM5RkM5RUUwQTkKLToxMEVENDAwMEE2MTExNEVGRkQ3MzJCQjdCRjI1QkRDQjc4RjhBNUFCOEIKLToxMEVENTAwMDhGMjVEMEZCNTJDRUVENTlBMDVCN0ZGN0VFNTM2NDg3MzEKLToxMEVENjAwMEJEQkYwOTY2RTM3MkNFNTE4MEY5ODZGQzc1QjY2Q0FFMDQKLToxMEVENzAwMEZFN0NFNzU3QzZFOUVBOEJEQUY1RjJBQzc5M0ZFNzU3NTQKLToxMEVEODAwMDQ2M0Q3N0U5MjZEMDgzRDEyRjY1QjBGM0VBOUI4QjEyRkQKLToxMEVEOTAwMDRBOTE3RTUxMEZDNjNDOTM4NzJCNUU0OEM1N0Q3NEQ1NDIKLToxMEVEQTAwMDUwQkY0QTExMzdBQkVGQjRFOUY4NDE1NUFCREVBRTVCNkIKLToxMEVEQjAwMDZDQjBFM0ZBRDk3NTA2NzkyNEUxNzQ1RDE0RjkyNEY1OTEKLToxMEVEQzAwMEI5NkU2MUFGMUNCNzc4NkEyMkU1NTNBQzJFRTE3QURCRUQKLToxMEVERDAwMDIyQTBERjM0OEMxMzMxQUQ2QTkyODBGNzQ2ODQ4RkI1NjAKLToxMEVERTAwMEY3RDM1Q0QwQTdCQjU1RjcxNEQ0QUJGQkQxODE0MTBGNEYKLToxMEVERjAwMEFDMjhEN0MzOTdCOTdEQUM1NEZBMjM1Q0E0REY5RjQ1RjgKLToxMEVFMDAwMEZEQkY3REIwOTBEQjNFOTA0M0YxMjg5N0I0MUY5N0EwRTMKLToxMEVFMTAwMDVDQkE1MEZGQzEwNUVCRTdCNTQyM0ZBRkQ1RTlFN0REOEUKLToxMEVFMjAwMEQ4MjVFQ0ZEODM1NTU3OTE5RkVBRDhFNTU3OTFCRTdFRDIKLToxMEVFMzAwMEFDQ0Y0RkU1RDFGOUE5QTQ1RTc3NkM2RTg1NEVGRjBDN0YKLToxMEVFNDAwMDdCM0U4ODBEQzA0RkEzRTk5QjI3OTAxRjEzOUZFNjcyNUUKLToxMEVFNTAwMDY5QkRCMDIzNUI4NTFENzk2Q0FFQjAyMzkzMTlEMTkxNDgKLToxMEVFNjAwMEQ5QUNCMTQ4RkNFQ0FCRUE2RjhCNUJGNTcyQzlCQjQ2MjEKLToxMEVFNzAwMDZGM0YzRTMzRERGQjU0MDlFMDg3MkRFRDIyREQ3MzhCQzAKLToxMEVFODAwMEIzNTBFRjNGMzRFMEU3NTBDNkZERTdCN0EyMkYwMEUwRjQKLToxMEVFOTAwMERFNTJDNUYzNEVGMTM5RTZCRjQ4QjlDNEEwM0ZGMjhCNEMKLToxMEVFQTAwMEFBNEQxN0Y5MzdGMjc2OUY1QTg4RTk3MjBDNTUzQUVBNUIKLToxMEVFQjAwMDZGRTY3NTRERTE3NTlGNDNCNEFCMjJFRkNEMDJGNTEzQkMKLToxMEVFQzAwMEQ5RUUwNUE4Nzc2MTVFNEY1QzEyNkY0NzE0MTkwQTc4NzYKLToxMEVFRDAwMDlEOTAxNDkyN0ZFOEQ3OEZFMUExNzU1RjAyQkMzN0FDOUIKLToxMEVFRTAwMDMyRkIzNzQ4RDc5OEVGMzMwQUVBQzc0QUIyMDk2RkQyRTQKLToxMEVFRjAwMEQwQTU1RjQ4RTMwNzMwQUYyN0Q4MzI4REZDQ0QxNUY2OUIKLToxMEVGMDAwMDA0MUU5RjA3M0I3QTYwRkM2QkU2RjY1MEY5NjA5QTZDMzIKLToxMEVGMTAwMDk4OTlBRjI3MkEzRThCN0VFN0MzRTczMDNERUMyNEQxOUEKLToxMEVGMjAwMDBCMzM5MUJGNjU0QkRDMTgwQkUyRUY3Qzg3MjcxM0UxQjUKLToxMEVGMzAwMDAwRjg0RUYyQjVGQjk3NTZFMkMzMDdBQkI4MUZCNjdCOUQKLToxMEVGNDAwMENFRjhGQjZFODJFNzYzOUU3MDkwMkZCRDdCQTlGNDgzQTEKLToxMEVGNTAwMEY3QzY4N0UzRURGMTM1QTc0Q0M4OTc3RkJGOEZCOTMxNkUKLToxMEVGNjAwMDhGRjFGODlFRUExNzVFODE3MTBFQURBOURGNUM4Mjc0QTUKLToxMEVGNzAwMDc0NTgyNUJCQzFFOEJGOURGRUM0NjRCMkJGQUVCQzVDODMKLToxMEVGODAwMEE1RkNFRUEzRTUyQTQzQjk3Njc0NTNBQ0NFMEUwOUY5N0QKLToxMEVGOTAwMDc1NTVDMjhGNEYwRjk4QTkxRDREOUQzQ0NDQkY0MkZGQTgKLToxMEVGQTAwMDI2RTY2OTk1RjM3Mzc5NTZGMEIzMkU3MThFOEYwODNEN0UKLToxMEVGQjAwMDY2OTdBMDlCNEU0MTM3NzcwOEJBRDk2MEY0RUZERUNCNTUKLToxMEVGQzAwMEU5RTZFODNFMzAxQzQwQUVCRjNFQjdCRThDRkNENkRCNjcKLToxMEVGRDAwMDE4QzVBMUIzRTdBODFCOEI2MTdGMTdEQkRDMTY4NERGQTQKLToxMEVGRTAwMEY0QjkwNTFDOUU5NThBMDlFMzM3MTVFNTA1MTZBNEY3QzMKLToxMEVGRjAwMDhCMDdCQjJDQzg0NzJCQ0FFNzUxN0Q0NjY1MzZEOUY5MkMKLToxMEYwMDAwMDA3RDc4MDdDNDQ3QjNGREU5RDg5NzQzOTcyQUUyRDYwQ0EKLToxMEYwMTAwMDRBNDBCQkIxODhGOEM0QTRGNzRDM0E3QTI5MDhDNEVBM0MKLToxMEYwMjAwMEU4RUVBMjg3OTI3NEVEQTNCNzY1RThFQTI5OUUxQzVEMUQKLToxMEYwMzAwMEZGQzFFNTdBN0E4QzFENTlBOEU3QkI4Q0VCODUxMkNFMEYKLToxMEYwNDAwMDMzRDVDOUU0RTczQTFFOTJBM0Q0MkVGNTExRTlBRjkzNjQKLToxMEYwNTAwMEZEMDE1QTNBQkVENjJFRTRDODE4QTg2MzNFREQ4NkNBMjIKLToxMEYwNjAwMDE2M0JFNjREN0NEQTY1NzZGM0YxQUI0OTNGQjA2N0VGQ0UKLToxMEYwNzAwMEI1MjM5RDYwNjgxNUYzQUJEQUE1RkUyOUZDRjc0QzYzNTgKLToxMEYwODAwMDg2NzU2RDYyMTg2NzNENUVDRTA4OUY2MjQ2MzIwNUY1NTMKLToxMEYwOTAwMEFGNEU3MURFNzc4QTc5ODFBRjRFQjc5MDlGOEU5RkUzMzYKLToxMEYwQTAwMEUwQjkxRUVBQzczQzdBRkIyMDBERTlBQzEwRjE4NEJGNDEKLToxMEYwQjAwMEZGODg3ODdGOTdDMDk3RTNFNTBGQUU4QjQ1N0M1OEMwRkIKLToxMEYwQzAwMDQ4REY5OEE5QUU1Qzg3RjFDNEUzNzMxOUQxNDk1N0UwRDIKLToxMEYwRDAwMEY5NTg1QzNGOEU4M0Y5ODFDRjQ2MUJBN0YyRTk3N0FFRTIKLToxMEYwRTAwMEM3RjVFQ0I2RDIzODE1MEZCMUE5ODgyNzE3N0RFRkM0NDQKLToxMEYwRjAwMDA3QUYyMUY4QjYzOTBGQzVCMEZFNzI3OENDNDM5QTFCMjIKLToxMEYxMDAwMDgxOTNGNzFFMEI1OEE4MEM2OEM4N0ZGMkRFM0JBMjYxMDIKLToxMEYxMTAwMDNDRjBBMkJGRUNGRUUwNzE4NkYzNzJCOUQwMkVGMERCQkEKLToxMEYxMjAwMEM4NUYxRjdCRjgxNzhCNTEzRTNGQjY2QjdCRTFEQjUwMEUKLToxMEYxMzAwMDdFNjdERDNEMTk0RDUwM0VCMkVFRkJEQjZGNzI4NUZDMDQKLToxMEYxNDAwMEE1QkJBRTU4QkVCMzEzRUFBM0JGRkI5MzQ3RjcyMjVFM0QKLToxMEYxNTAwMDVERjE5MzNGRUNDNUY1NUVGMUM1N0YzODYwRkRBMzVBQzQKLToxMEYxNjAwMEUyMTlEMkI3NUM5RjcxOUUzNEQ2QUU2MDVDMTRGOTI4NjgKLToxMEYxNzAwMEYxNjVCMzhGRUE3NTNFQkRGRDYzOTRGQkQ4REYwQ0YwRkIKLToxMEYxODAwMEFCNjg3QThDRTJDQjY5RTJGREEzOTdERkFBQTgzMEVGRTcKLToxMEYxOTAwMERCNzU5Q0FGNzRBRkVERUQ5QzYxQTFGRTAxRUMwRjdDQzMKLToxMEYxQTAwMDkyRjIzNTg3MEUwM0I2ODJFRjVCN0QwQUM2QzU0MTQxRjgKLToxMEYxQjAwMDcyNjNCQzM3MUREQTkxOUYzMzk3OEJGNEFCMkM4OUJGRjgKLToxMEYxQzAwMDgyQUZFMDM1MDc0NkZFNDAzM0UxNTk5RTg4NDcyMkZGNzMKLToxMEYxRDAwMDQ1N0U3RkU3MzgxRTA3MUZFQTYwMUE5RTZGRjk3MzlCMTIKLToxMEYxRTAwMDE0Q0M1MzdCQ0JFQjcyOTM1RUIwOTZERDM1MDNFQ0U0MkQKLToxMEYxRjAwMDhCNTQ5RTc3OTE1N0ZFRDZENTc4MkVCMDU1QjNCNzMwNDUKLToxMEYyMDAwMDM0RUU2RUExRDc5NTNGRTdBMEJDRURCNzc2M0I3NjkwODQKLToxMEYyMTAwMDlFN0ZFNDBBNTNCODdFNThGNkQ4OUY5RUZBMURFMjU3QTcKLToxMEYyMjAwMDVEMENFMTk3NTE2RkU5MTZGNEQxNTdCN0I4RUVCQjA5MDEKLToxMEYyMzAwMEUwRTNGQkE1OUREQjU1OUEyQjkzRUM3NEI3MkIxM0YzRkUKLToxMEYyNDAwMDc3RkFGQUZENDRDNkQzRENGRjgxRkM3QzdFNzUxQ0M1RDEKLToxMEYyNTAwMDE5NjQ1QzQ5MkRGRkI4MERFOTcxNTE2OTYzMDlFQUVGNDIKLToxMEYyNjAwMDE5NzgwRTgzNDM3MUVDQjc1NzU4MjlERkMwQTdDNDUyRjEKLToxMEYyNzAwMDVFN0FCNDc4RjVBMTcxRDkyMjlFREMzODk2RDZDMTFBOEYKLToxMEYyODAwMEM3NjNGOUM5ODI5NkZCQUNBRUU4RjJBQTU1OUM2QkI0OTEKLToxMEYyOTAwMDc2OEI5NTc5MjNDNTk1MEY4REUzRkU5MDE2M0MwNzRCMzEKLToxMEYyQTAwMEQ4MzkzODdFN0YzNUM2ODdBMzlEMDMzM0ZCMEIyOUNGMjIKLToxMEYyQjAwMEQyNkUxRjg5NzkyMEE5RTJGMUQ2Qjg5RkJFOEFGMkFBNDAKLToxMEYyQzAwMEU3MTg5NzU3QTk0RDlGQUQ0NUZBOTM3RThCREEzNEQ2NTAKLToxMEYyRDAwMDE3MzdEM0UwM0Q4Qjc4MkY1NUM0NTk5MDg2NTFGRkFFMzgKLToxMEYyRTAwMDE1RjFBMjlFMUE0NkYxQTJENEE2NzdGRjFCRTFCMzQ1MDEKLToxMEYyRjAwMDhDNUZGQjI2MUZERjZBMEUxQzQ0N0NBOTc1Qjg0OEVFQTQKLToxMEYzMDAwMEY0QTQyNEI4RjE1RTEzRkI5MkU3QTc2NDMwOEU4RjcyRTkKLToxMEYzMTAwMDdDMjZDNkM3OTVCM0IwNzVBN0M2NTZCRjRFRDdBN0E2NUQKLToxMEYzMjAwMEIyNDAxQ0UyOEY2MkE3NzkzM0Q2RDgyOEFGNTVFQTU3OEUKLToxMEYzMzAwMEE5NERCN0RFQTA4RUQxOERBN0EwNUVGRDU2MzVCN0I3MUIKLToxMEYzNDAwMEQxRUNFQzFCMzc1QkE3NTc5MTlFNjU1Qzg3N0NBRkM3MDAKLToxMEYzNTAwMEMyRjZBMUZEMUJBNjY3OTExRUM2QzJFNzE5QTFBQjBCQTEKLToxMEYzNjAwMDNGOUFCRTZFNDlCM0VBRjhDNDVCNUY1NjBDNkFFNDcyMUEKLToxMEYzNzAwMEMwOTUzQzhFRkJFRjEwMUU1MjFGOTM3QTVCQkY3MTA1NDgKLToxMEYzODAwMEJEODdFOTk3M0VFNDE3MzI4RkEyNEY0RjZBMDhCMzlCQkYKLToxMEYzOTAwMDcyRkFCRjI3RjNENUU0Mzk0ODc4NDY3QkZGOTlFOTVBREEKLToxMEYzQTAwMEMyNzhEMkIzMDIzNDhFNTcwQzYzOEE3MzY0MTE3QzBEMTkKLToxMEYzQjAwMEZDMTJEODE2Q0ZBNzE3N0EyODY4OTFCQTNDMDZBOTU3MkQKLToxMEYzQzAwMDRBRkVEQzIzRjg2RTMwM0I0ODdFNDM5OTI3M0UwQ0RFMzQKLToxMEYzRDAwMEM5NDIzRDY4N0MyMkQxODNENDRGOEZBRkZEODhFMkVGRDQKLToxMEYzRTAwMEI1QTg4N0MyRkNDMTc1MUZFQUVFQTExNDk3NEQxRjM5NUQKLToxMEYzRjAwMDlFRkM3M0ZBN0M4OUIwQjgyQkFERDcyQkY4RTY0Q0Q1QzAKLToxMEY0MDAwMDQxNzkyQjNEMkNENjhERkNBQkM3MjdGNEIxM0ZDNjkxN0IKLToxMEY0MTAwMDNFMjZGOTg1OTEzRjVDRUVENkYzRkZFRjk1RUFGOUZGQzIKLToxMEY0MjAwMDNDNkRCMEMxMkVENEM3QTlBQTNDODY3OEY4OUI3Mzc0RjIKLToxMEY0MzAwMDdDNTNGMjlGNUJEMENEQTdBMjdCQzk0MzcxOURDMzgyNTEKLToxMEY0NDAwMDVGQkUyNkY0NDAyQjZCQTRFNzc2Q0MxNzFEODFGQ0JGNzIKLToxMEY0NTAwMDhCNEEwNzNCNDI2NTAyRUJBNUQyQzk5Qzk0NUY5M0M0REIKLToxMEY0NjAwMERDNTQyNjMzMEY5NTQzNTgyMzk1Njk4Q0U3NTM2NUIwRDgKLToxMEY0NzAwMDJFMkE4N0IxMjM1NDY2QjE1RTJBNURDQzY5QzIzMjg3RDkKLToxMEY0ODAwMEI5QTkxQ0M5M0M1NDdBOTg5M0UyRTQ2RkM2MDczMzhGM0MKLToxMEY0OTAwMDAyRkNFNjVFQzVDODZGQ0Y3QzdCQUZEMUUwOUM3QUFBNDgKLToxMEY0QTAwMDQ0MUQxMTA4RTk2QTI2RTNDOEU3N0I4QUI3Q0Y5MUY1QzYKLToxMEY0QjAwMEE3QUZEMUIwN0QzQUVGNUYzRjdFRkZDRjdDMEVFMjM3NDIKLToxMEY0QzAwMEEyRkQxN0JDQkRBRkZFNkZENzRDQzdGNzJEMjZBQUZGMTQKLToxMEY0RDAwMDQwRjQ3RkJDNTg1QjgyRjhEQTM0OUVEMTc5MjcxNjZCRjIKLToxMEY0RTAwMENCQzJFQjRGMTY2OTBERTFGNUUzMjVEQUI1RTE3NTU2QjAKLToxMEY0RjAwMEE0QUQ0NEZDOTFGNUIxNDVEQUY1RTFGNUI2MTJBRDkxNTQKLToxMEY1MDAwMEQ3NzlCRUU5OUIxNjhERjQ1REY4RUQ1NkM2NzE3Q0MzQzQKLToxMEY1MTAwMERGMjBENURCNDQ3NEIzNDczMUUzQjlEQTA0QkQ1OUYxRDgKLToxMEY1MjAwMDFDNTVBNDIzQjdERDg2QTU4N0U3RkQwNDYzMUNDMTM4RkQKLToxMEY1MzAwMEQzMDBGNjhGODE4RTgyQzg5RjAwMEYyRjUxQkM2RDM0OEYKLToxMEY1NDAwMDhGODE5RjI4M0U5MTNGOThBQzhGOUIwMEJFOTM1RjM1ODMKLToxMEY1NTAwMEI4ODZEQkU5OEM0NTZFOTdGMzlFMEZDRjk5MTZFNkU3RTgKLToxMEY1NjAwMENEMDk4RDFCNkQxRjQ2RkMzRDIyRjRCQzZFQTFFN0JEOEQKLToxMEY1NzAwMDI5RTJDODdERkIwRTlBMTNDRkRBNDM3NDFDREQzRTM0QkEKLToxMEY1ODAwMEIzQjNFMUZDQjJERkJFRkY1NDYzMDFCQTBFMzZEOTlDQkYKLToxMEY1OTAwMDI4RUY3QTYyRDg2QjY4QTdGOThFQTkwQ0Y1OENBRkJBMDAKLToxMEY1QTAwMERFOUFBMjU5NEY3MkJFMzhDQzQ5RjkwMzcyNUVDMTY3MjgKLToxMEY1QjAwMDdBRjA5RkEwRTc1QzNDNDhEQTk3NkUzQjg3MzdCNzNCMTEKLToxMEY1QzAwMDEyQzVCQTVBNjYyNDVEOTY0N0ZFN0NBRUQ3RTc1QjhFQkQKLToxMEY1RDAwMENDOUIwREVCNENEREM0RkRBQTA5NDhERjE4M0E3QkUyNTkKLToxMEY1RTAwMDhGNEU4Q0EzNzVDQzM0MzFFNDUzNkREMkNGNkJGMEM3MDIKLToxMEY1RjAwMDZEOTlCMUNBMTlFRTBGNkU0QkYwMkIxOEJGQ0MwOEM0MzEKLToxMEY2MDAwMDcwM0Y0NDMyRjNDN0EwMUMyRDc3OTc1M0RFOEM0Rjc1QTMKLToxMEY2MTAwMDk2NjNCRDlBNUQ5MTA3RjVDNTlEQUFBQjFDRTYzREQ0RTYKLToxMEY2MjAwMEY5RjQyQUY0MDMyRUE5QjY1MjFDQzNBMkNEN0E5RkZCOEIKLToxMEY2MzAwMEZGNzhGRTQ2OTJDMEYzRDYwRDM2NzcwMEUxOThFMjIwQkYKLToxMEY2NDAwMEJGNkQ3RTVCNjEzOURBQkIyRDhFQTQyNEM0QzVBNEVBRUMKLToxMEY2NTAwMDY1RTQzNzZDNzFCODVGQzJGQjFEM0VBNzg5RjIxMzk5NTAKLToxMEY2NjAwMDUzQjM1NzgwQkVCMkUzMjY3MzM5RjJGMUNDMjc4QjEzMjQKLToxMEY2NzAwMEQ0QjA3NTlGNkEzRDE3ODM3MTkwMDc5QzI2NkE3RjYwOUUKLToxMEY2ODAwMDREOTk3RDk5MDNFRjMxODJCRDAwRTUyMUU3NDkwREY1RTQKLToxMEY2OTAwMEY3RUREMDA3RkQ4REI3Mzc5Q0VDMTgzNUMwMzkyNjk0QUYKLToxMEY2QTAwMDVCNzU3ODFCRTdENkQ3NkQwNjdGQTNDNUEwMTdGNDhFRDAKLToxMEY2QjAwMDE3NzkyMkUzRDgzODNDRTdCMThGN0U0OUY2RUYyMjg3RUQKLToxMEY2QzAwMDhCRkNFQTY1RUQwQUU1QzcwNDBGQkFCMzUwREYzQ0I1MjEKLToxMEY2RDAwMDc5MzRFNUJCQjRCNkVCRkREMUMxNEM5Njg1Rjc3REVBMzQKLToxMEY2RTAwMDNBMTREMjU3RDVENjhGOUJGMUJERTE3OUFFNzQxQzY3MjEKLToxMEY2RjAwMEI4QkIzN0REMTk0NjdGMEZGQ0U0ODczMTI4RUY1QUYxOUMKLToxMEY3MDAwMEMyMUFFMTExRTM3MTIxNjFBRkNBN0JFNTc1Q0U3MzM1OTEKLToxMEY3MTAwMEE4RjcyRkU5NzhDMzgzRjA0RkQ0NEM0NDMzQzcyREZFQUMKLToxMEY3MjAwMDM0M0NGRjhERDNFNzEzNURFMjNEMkRENDYzRkFFOUEzQUEKLToxMEY3MzAwMDlGQzMzQUMzRUUyN0I0MjVFN0M0RTJCQzIxRkNENTEyMkYKLToxMEY3NDAwMDcwQkZBNzNCOEE0ODNGREFEOTVFNDZGNzAxOENFM0RDRkQKLToxMEY3NTAwMEI2OTY3NUExREVEQUI2RDZERTE1NDlGRkJEMkRDQjkzODAKLToxMEY3NjAwMDg1RjdCN0NGNkM5OUJFOUVDMUY5OUYzOUI4MjIwREVGQ0UKLToxMEY3NzAwMEJCMkZFREIwQjExODU3RkZGRUE3Qjc4Q0E3Rjk5NkUyRTMKLToxMEY3ODAwMDNENkE5Q0I3NjM5RTE1RTVDNkVDQ0VFOTU2ODREQjZERjkKLToxMEY3OTAwMDZCMTczQzE5M0VDRkNGQ0FCQ0EzNEE4MUZFRTIzQTlFMEEKLToxMEY3QTAwMDI0M0M3MUIwODAwRkUxRkFFQjI5NUExNkVBMTdBNzczQ0YKLToxMEY3QjAwMDU5QzQ3QzRFNzdBOTQyRkNGQzc3NTMzQzc0M0ZFNTRDMUUKLToxMEY3QzAwMDY2RTQ3RUM1QTU1QzNGN0ZBNEQ0NDVGREVCQ0NFQ0I1REIKLToxMEY3RDAwMEU1Qzk2NDBGM0E5MTVFNEZCNTE3NTFGQ0NFODI3MTc3M0YKLToxMEY3RTAwMDkwOEI5NjdENUZBRTQ1RkNGRkE0QkFGRUVERTVEMERFQzIKLToxMEY3RjAwMDM2RTdDQUY3QjAxQzZCNkQyNEJEOTlGRDVFMjU3QTAwMTMKLToxMEY4MDAwMEJEOTBFRTg5RkQ2N0E1REREOTEyOTY0Nzg4RkFBM0E2QkIKLToxMEY4MTAwMEYzNkI3ODE4REExRjk2NzYzNTYwMDVGRTZFMzk3MDk2QjAKLToxMEY4MjAwMEY0NzBDNDU3MkQwQzdGRTkzNzRFRThGMzIyM0YyNDZENjYKLToxMEY4MzAwMDFDRERCQkEzNUZEQjY1NTdGQTAzNTA5RTZDQUZCNzQ3NzcKLToxMEY4NDAwMDNBQzdFOEYzODc4RDhCRkFFRDBDQTZDNTg0Q0QwRjUyMkQKLToxMEY4NTAwMDMxNDA3RTZEMkY5RkFGQUY5RjY4MDczMzU0QTNGNTA5RUEKLToxMEY4NjAwMEJERENEODJFRDczRjdBOUI5RTNFOTc4OUYzOTFGQTc5REIKLToxMEY4NzAwMEI0RjU3RUM3QUY3RkFGMDU4MzEzOTQ5NzcxODU4RTVFMTUKLToxMEY4ODAwMDJFNTJCQjU2NjE1Qzg1QkRDNUY5M0ZEODc1Q0MxMzIxOUUKLToxMEY4OTAwMENFMTVFMkIzQjBGNjIxMDI3RTAwQ0ZGNUM5RjNDOTNFMjIKLToxMEY4QTAwMDg5QjYwRUFCRkY4ODk2M0QyNjY0QkY3RDI3NERCRjJFREYKLToxMEY4QjAwMEQ5QUZBNTk0QzdDMTZEN0UxNkIwMjQ2MDE5QTBGQjFDRkEKLToxMEY4QzAwMDM2NzgxRkU1RjdBN0Q1MzczQTJGOEI0MDE3QjIzNEYyQjkKLToxMEY4RDAwMDJERkNCOUMyRTIzRjQ2M0U4MTY4MzA1MkVBMjMyNkZFNDMKLToxMEY4RTAwMEJFMTZDNkU3RTJFRkUyRkFFRkU5NkQwQUU5QkYxQkI3MjEKLToxMEY4RjAwMEYwM0M4QTRGRkQ1MDI3RTU4MjlGMTNBQTE2N0YxM0NBNUEKLToxMEY5MDAwMDhFMjNFQ0RFRTFCMkU3REE2RkJGQzhBNTgzREIxMjhBOTMKLToxMEY5MTAwMDY3ODlGNkY3MUVGREQxNkJEOEZFRUVFMzNGRjJFMDcyODkKLToxMEY5MjAwMDZGNEQ1RTkyQzBGOUQ2ODlDNTM4Q0Y5OThCQURFNDhGMDMKLToxMEY5MzAwMEMxOUY1REUyMDc3NDVDRUVCN0U5RjA3MEUzRkU0N0I3ODQKLToxMEY5NDAwMDJENDZCOUIzREZFRUM2NzRCQ0E1REJGNEVEQjZCNEIwOUEKLToxMEY5NTAwMDdEMzE4RTVGM0UxRDlDODIzOUYzODA4RThFRkZFNDVGODkKLToxMEY5NjAwMEU5N0U3ODJDRjI0RkE0QzczNTM2QkExN0Q2OEYwRTRBRTcKLToxMEY5NzAwMEZCQkUzMzQyNzhCQjM4MTQ4N0EyRkIyMDkyQUU0RTZFOUEKLToxMEY5ODAwMDZBMzlBM0MyMzhFQkQ3NTg1REY0M0QwNTgzRkQ3NURDQjkKLToxMEY5OTAwMDM1NEY0QjBCOEIwRjVCRDdGMDdCOUEyQ0RDNEVDQzA5OTEKLToxMEY5QTAwMEVENUY4RTdCREM1NzZGNzczOUZBOEZENzBGRUZBMjhDMjQKLToxMEY5QjAwMDM3QTg0Q0ZCMkRGMkM1QjQzMkNGQ0JBNTE0OEZBRUE3MjAKLToxMEY5QzAwMDdEMzdFRDVCNzNGQzE1RTg3MzdCQUNGN0Q1RDIxMjVDMjkKLToxMEY5RDAwMEZGODg3MTBBREU5NzMxQkJFOERFNjA2QkFCMjkwNkY5NjAKLToxMEY5RTAwMDdFNDc5NzM5NjYyNEMyQkJENTQ0NzJCRUEzMkIzOTc2QjUKLToxMEY5RjAwMDI0Q0EyNTg3ODlFMkE3Mjg1N0Q0MzBGRjNFOUJDMEY5NDcKLToxMEZBMDAwMDY0NDg3RTc4MTJDMkY1OUY1ODgxOEY2N0YyODRGRTMzNzYKLToxMEZBMTAwMDgzRUIzRkNBMTMwNzQ4RUY2ODZERTM3MTJBQTk2RjM4N0IKLToxMEZBMjAwMDA1RkUzODVCNzkxQzMyOUFGRTgzOEMwN0Q3MUQ1RkIyQzYKLToxMEZBMzAwMEM0ODk3Q0FEMkQ4MTdGN0Y2M0M5MENCNzBGRUY3MzVFRTYKLToxMEZBNDAwMEVBNjAyNDM3ODZFM0E1MEFENEIzMUNDQzNGMUJFNjUxRjkKLToxMEZBNTAwMDlENUNCRkYxNzYzMEQyNjc5MjFDMEUzNzgyM0FCNUQzRTcKLToxMEZBNjAwMEVGQTM3NTZCOUNDRUVDRjAxRkMyMzMzNjRGNjMzOEJFRUMKLToxMEZBNzAwMEQ5QTA1NzU4MEQ3QTgzNkFBODdGNTFBQUQ3MjM5OEQwNjYKLToxMEZBODAwMEJGNjUzQzM4N0VGM0MwNzk0MEQyQUZEQjIxRkMxM0EwQzgKLToxMEZBOTAwMDNGRjlFOERFNDgyOUYzMjNERTMyNEQ3MzI1MEYwOUQ5RkIKLToxMEZBQTAwMDAxRTg3N0M0RjZCNDUyQjZBMzI1MkNGRUE0NjgyRjkyQzEKLToxMEZBQjAwMERGNDBGQTI1QTVGRjQxRkEzOUM2OTQ4MkJEOTYxMEU2Q0IKLToxMEZBQzAwMDhGRjgxNTk4OTYyQUM1QzM5MjI2MDA5RTY0MDMzQjIwQTIKLToxMEZBRDAwMDdCMzI5RjI5RkM3QUM2RDdENEQzOUIyRTJDRUVGM0IzNkUKLToxMEZBRTAwMEU3RjlGREEwNTY1M0FDN0I2Nzc2RkY3RUM1OTMzOTdENjEKLToxMEZBRjAwMEM2MUVDMjFDNDk5OEU1MkEzQkREQzM5OUE5RUVBMTdCMkQKLToxMEZCMDAwMEY3NUI4QjREM0NBRjk5MUQ3MUEyM0U5MDNGODFDQjkzMkIKLToxMEZCMTAwMEVDMzJDRkM1QjgxRkU2RjA2NDIzREUwMDNDN0MxNkJDOTcKLToxMEZCMjAwMEJGMjdGQ0I2OTkzN0U3QzRBMjNFRkM3NkZBRDkyREE4QzgKLToxMEZCMzAwMDk3RkJEQTRDQzQ2RjI0MUNCMzlCNEQ3NzIwMUE4NkM1MDMKLToxMEZCNDAwMEU3MDJFNkMyNTA5QzZEQTNFNzlDMEZFRjBCQTc0RUU2QzEKLToxMEZCNTAwMDdFRDdEODc5QTcwRkEyMUY3NEMzNDgxM0Y5RDk2RjhEMjgKLToxMEZCNjAwMEQ3Mjg2RTA3RjQ2MzU3NzlCQ0VFMjU4Q0I3QjVCQjkyRTYKLToxMEZCNzAwMDkyRjBCQjNCOEYyN0YyNzYyNkNFRjFFRUY4MjEzQkMyMDYKLToxMEZCODAwMEYzNEJFMkM0QkVFRjU2MjJFQjJCN0Y5Q0M0RTU0QkNGNzgKLToxMEZCOTAwMDdFMDBFNDIwRjI2QjA5N0JGQzBGRDU5QTIzQkMwRTcwMkIKLToxMEZCQTAwMDgzRjdGRkM1QzdFREU5NzkxM0ZFNTBFRDMzOTM5RDI0MkMKLToxMEZCQjAwMEVDRjk5ODFBQjJEN0QxQzcwOEVEN0IyNjNDNThFRDgzRjMKLToxMEZCQzAwMEZBRkREOTkxRTdFRDk4Q0NFN0JERkY2NUVGNzBENDY3RkEKLToxMEZCRDAwMDgzRkIwMTdGMDY0NTNBREYwMDMzOTVEMkI4NTkxODk3NjkKLToxMEZCRTAwMDBBQUVCNjJEODhGNDFEOUIzMzYyOUY1QkExQ0QzNjI4RUIKLToxMEZCRjAwMEE0Qzc2RUFEMzZFQUE5N0VFMjU3OUYzNDlDN0M4MUQyQzEKLToxMEZDMDAwMEI0ODE3Rjk0MDAzRDI0QjJDOEZDRjJGQ0ZBQUEzQjBERkIKLToxMEZDMTAwMEY1Q0U5NkQ1Q0E3QUU0MUYyREEwQUY2MjVDMzBENTY5QzcKLToxMEZDMjAwMDI1N0RCNTM1RjE4N0QzRjE1QzNFNjk2MDRFQkNFRkJBRjYKLToxMEZDMzAwMDEzRDQzRUU0NUZFODU3QzU3QkFDQjM5QjM4OUZGMTNBRTEKLToxMEZDNDAwMEI5OUYxNUVDMzhDRkE1ODg4RkU5NjZDMjQ3QTlCRjlBM0UKLToxMEZDNTAwMEFCMzlGRkI5RDhDNkYzOTE3QjEyMURFNDM3NEQ2Q0UyODYKLToxMEZDNjAwMEY5Qzc3MTNFRDA2NzcxN0YzMzc4RkVCMDA2RkYyMTFGNjAKLToxMEZDNzAwMDkyRkFBRDIzREZBQ0NCMjNCNjFBRjI4Q0NEODZCQ0UyNzAKLToxMEZDODAwMDhEMTNGNDdDMjhCRUE0Nzg0MEJERUE1NzYwRkZFMjNBQTkKLToxMEZDOTAwMDBGMDBGRkMxMzIwMDc2MzA5NkNGODNERDhFRTU2RkMwNTYKLToxMEZDQTAwMDZFQzdCOEMxOEI2QkYzQTg3QzY5QUQ5QjlFQkZCMkI2MjMKLToxMEZDQjAwMDk0Q0E2OTU5NDE4QTJCOTIxRjk5OUM4RjJDQTA5MDFGM0UKLToxMEZDQzAwMDRGRTJENzFCQzNDQTEwREZBN0YzRjY1RjRFQUM3RUMwNkUKLToxMEZDRDAwMDM3MENEQTkzNjVGRkIxODQ3RjdENzU1Rjc1MERGNkFGRTQKLToxMEZDRTAwMDRERTNGNTUxQ0Y1RTVEODNGRTlGREU5OURBNDMxMzAwNEQKLToxMEZDRjAwMEVGNTI0QzlFQkEzNkVDRkIyMzlCM0I5MjdENUYzMDUxMUEKLToxMEZEMDAwMERFMTM4QjZDQkYzM0ZDNDQ4MkRFOUZGMzE0RjE4OTI4MzEKLToxMEZEMTAwMEZFOUNCQjE1QkU4RTNGNEU3QUYwNUVBNDhCNDFGM0NDQTkKLToxMEZEMjAwMDFFQzRFM0FDMUNCRDlGN0ZGMDQ0Q0U3NzE2OEIzMkVCMzQKLToxMEZEMzAwMDE1QTA4RjAxRTAyRUU5MjM1QTdCQ0I3RTQwODEwODc0MDkKLToxMEZENDAwMDI1Q0JBREYxNkMyQUREQ0ZBRUIxMkU4ODk0RTc3NDQwOUYKLToxMEZENTAwMEQwNTVENEYxMURDQzY1MUIxQkEyQjcxNjg3OTFERTgyNEUKLToxMEZENjAwMDE0REZGREE0RTlDNjgzMjgyRkJGMzlCRDMxQjIwRjgzNEMKLToxMEZENzAwMDM1MUFDOUVCMjBEMDFCRjI3M0I1ODFEMzlCNkFFNkY3MjUKLToxMEZEODAwMDMzNkIwRjczRkZDODRFQTQyRkNDODc0MzdBODM3RkNFOEIKLToxMEZEOTAwMEY2RjE3QUFBODFERTVBOENGNEU2RDBEMzVCMTBFOTBEMzUKLToxMEZEQTAwMEM2NEJGNDcxRkQyMkFFQkFFQjVCQTVCN0NGQkYyMUJENDgKLToxMEZEQjAwMEZEN0E0QTkwRjIxQTdBQjIxQkQzMTEzRTVCQzVGN0YwNzYKLToxMEZEQzAwMEJFMkExRERFMzVEMUNBQkZDRjcxODk0NjdFODE1NjFDNDEKLToxMEZERDAwMEM3NDFGQUZDMjZGQ0NFQ0FFQzYxQ0RFNjI0ODBERkRDMEMKLToxMEZERTAwMEU0MDJGQTBFQzFFNDg5NDMwNDNEMUM3MUEwQkYyNjYxMDAKLToxMEZERjAwMEJBRTY5Qzg4RjQ3NUU1N0I3NEJGMzFDNUM0RTlCN0UwMDkKLToxMEZFMDAwMEQ5Mzc0OTFFNjRCNjc1Q0Y5QjhENzRCNzVBMjUzOTY5QTkKLToxMEZFMTAwMERDNTdFQjU0OEU2RjJEMEE5RjE3NEUyRTNEM0NBRTM3QUMKLToxMEZFMjAwMDQyRDBBNTZCNzU4QjYyNDc3REJDOEVCOTczQjNFOUJCQkQKLToxMEZFMzAwMDMyRjRCRDlCN0Y2OUZENEYyNzhFREIzQTM1ODlENkU1Q0QKLToxMEZFNDAwMDZBN0UzM0QxQ0JGRDZCNjk2OEJGRDE5NUU2QzJGRUY0MDMKLToxMEZFNTAwMDA4QkYyRUNCMTAxRDNERTc0RjFDQzAzRjdCM0VGRUYxN0YKLToxMEZFNjAwMEM4MDQ0NUYyMDlDQTAzRjY4QUZCOUIzMjJFMTI5NTlFRkUKLToxMEZFNzAwMDBEN0VEQ0E4RkVDMzRCMzg3QzhDRUZDNzRGRTFGM0I2OTgKLToxMEZFODAwMDA4RkZBRjUxREY5M0ZCM0YzQUREM0IxQkY3QTczODVFMUUKLToxMEZFOTAwMEU0N0VFMDAzQ0M4NUVCOTQ3MUIzQkUzQzIzQTkxRkZBNEEKLToxMEZFQTAwMDk4QkYwNUY1NkQzM0E4MzI0M0I4QkE4MUUzRjVFNTFGNzUKLToxMEZFQjAwMDA5M0Q3MTQ1OTk3NzNFOEVCQjgzQjkwRUEyN0M3M0I4MUMKLToxMEZFQzAwMDc5QkVDMjMzRDNCNTBBODJFN0Q3RDQwMzRCQ0JCNDZCMjgKLToxMEZFRDAwMDA2QzJBQjE1QjNCNTQ1MDNCNUIzMkY2MTk0NzFBMUI4OTQKLToxMEZFRTAwMEQ2RjQ3OTY2Q0UxNzlBMTRDMTA3MUNFQkFENTBERjlBOTEKLToxMEZFRjAwMDA4RkNDQzg1N0EzQkRGQjcxM0Y4ODY4QkVDMENCRDFENzQKLToxMEZGMDAwMDMxMEI5RDkxQzgzNzkwOEYxMDcwQjVCOTk4NTc5OTIwRDMKLToxMEZGMTAwMEM2MEZDOUVCRTAwQkE4OTcwNjAxQjY3NzQwNTM4MjhGNTYKLToxMEZGMjAwMENCRUI5NkMzOUNBRjU4ODFBRjUwNUNCQTk0REIwOUYyMUYKLToxMEZGMzAwMDVFNTA1Q0JFOUJFQzJGNTUxQkQ4N0UzMDFCRUNGQkU2NjUKLToxMEZGNDAwMDg5MjJFRkJEOTAxNTIzRENCMjRDQUUzQjI3QzBGM0EyNTMKLToxMEZGNTAwMDdCNjYxRTlEMDA4RjRCRUU1QjNBMThDNUU5RjgxRDZENjAKLToxMEZGNjAwMDE1RjhCREFGMTUwRjlGRDk4MTdFRDIwOUZGNkU2M0UyRjAKLToxMEZGNzAwMEJCNkE5NDY3RjA3Nzk0MzM3NDJFMDcyNjlGRTFGQTYzODcKLToxMEZGODAwMDc2NjQzQ0JFNjIwQTk3N0YzMkNFM0EwMDFFRkIwOThGMzAKLToxMEZGOTAwMDQ1OUNGMzJCRTBCMUUzM0M3OEZDNTgxNDNDREVGMzBEQjgKLToxMEZGQTAwMEYxNzhFRjQ0RDhENzM1NzgwODMwNEVDQzZDRUQxNzU4M0YKLToxMEZGQjAwMDhGODZCN0IzNjY2OUNGMEVENDFFMTYzRkUwRjk0M0FDMDcKLToxMEZGQzAwMDgxRUM2NzE5QkYzNEFFQTcwREU1NkJFRTAwN0VBOTBEN0QKLToxMEZGRDAwMDNCNjNEMDlFNkQ2OUQ4RjkzMjdFRjdCMUE1ODlEQkQ5MzQKLToxMEZGRTAwMDNERjE2RTdCMjlEQTM3NkZBOEY0M0RBQjY4RUZBM0RERjYKLToxMEZGRjAwMEVEMDM2NjM5NzMwQUNGOEYzRUI0REExNjk4MDZFMzY0RDAKLTowMjAwMDAwMjMwMDBDQwotOjEwMDAwMDAwMzhCOEJDQ0Q3MDY4MENGM0M1Q0RDRUEwQzUxQjhGRkEzNwotOjEwMDAxMDAwOUE4N0ExOUQ2MTREMzYzMTVGOTgzRjY2QUNFNTA4Qzk2RQotOjEwMDAyMDAwRTUxRTkwRTM0ODFGNDA5RjlDREUxMkY5Mzg1MjNFNEY3OAotOjEwMDAzMDAwNUI3RDI3NDY3MkQ4OTQ1RTkwODM2MTc0RjJGMkZFNTIyMwotOjEwMDA0MDAwRjJDM0M1OTdFQzVEODVFRkE5MzU1NjE3RTJGN0I0Q0YzQgotOjEwMDA1MDAwNDE2RTg2Q0QzMzFEMzQ5MUYwRkFBNUY2NzRERDM4MzM0OAotOjEwMDA2MDAwOUREOUJBRjZEOTY5REZEMUI1NUYwNkY4NjJBNTM4MzZGMQotOjEwMDA3MDAwQkYxNzI4RjU5QTM5QUUwMjVEQkY0NDExRTdGODZFREU2RQotOjEwMDA4MDAwMDRERDc4NjZGNUNCM0JDNjIzRkQwQjNENjIzMkZDODc3MQotOjEwMDA5MDAwRjRBRjFBRjQwNUEzM0U2MUQ0MUZEODI0RkQzREQ1MzEzOQotOjEwMDBBMDAwNjY5MTg3NjZFNkY5MTE1Qjk5OURCRTRCMDE3QzkwQkUxNwotOjEwMDBCMDAwN0I1MDFCQ0ExMzIwM0ExOTYzMERFRUJDMERGRDJBMEJCMQotOjEwMDBDMDAwRUQ2RTFGM0M2QkREN0Y1OTVBNUQ3MUM4N0ZCNkI1ODlGNwotOjEwMDBEMDAwRkJGRDVBRjZEOTc3MjAzRDZDMTc3NDI5RTkyQjNGRkVCQQotOjEwMDBFMDAwRTQ0MjQ2NzJERENBNTAxRTFCRTk1NUU2M0I0OTdGODE1QQotOjEwMDBGMDAwRjQyNzI4MEREQ0NGRjBENEQ0NkNBMjA3Qzk3RkI2NTYwNAotOjEwMDEwMDAwNzNGQkY3Njc0QTIwNDYxOUMxRTlEMjk1MTRGQTNFNURBMAotOjEwMDExMDAwMUE1MzdDNzMzODdENkI0OUEyNTQ0NTNFQUFDQzdCQzVFQgotOjEwMDEyMDAwNzFEMENFNEVFM0YzQjE5Nzc4REU2NEYzOEZGMTdEMjc4MwotOjEwMDEzMDAwRjMwRDEzRkU4Q0NDQTQ5MDlGMDJGMzEzNTZGMkY3N0NDMAotOjEwMDE0MDAwNzNDNDdCQzM0NUJFRTUyMEJFRkVDMDRDMzFERjE4MjgxQQotOjEwMDE1MDAwRDU0NjRERjhBN0JENTREQTMwMUUwRTY1OEVFMjhFNDVBOQotOjEwMDE2MDAwRkZDNzA4RDU0MzgxOTYwNDExNUZDRjEwRjFGNDM4MjVGRAotOjEwMDE3MDAwQzA5OUM3RDdFNDIzNjM4MThENjI1RTAyNEJFMkRGMTcyQgotOjEwMDE4MDAwMjk3QkNDQzE1NEEyMEZFQjRFOTQ0N0I3OUU3MEJGOEUxMwotOjEwMDE5MDAwQTlCQUFERjEzRjdDNzUxQTNDNkY3RjQzNzVBMzlGRjRGQwotOjEwMDFBMDAwRDY0Q0RGREI0OEQ3NjY0MDA2MUZGOUI1M0M3NTc4NkU0NAotOjEwMDFCMDAwNkFBNUREMzkxQkRFNTM3RDNCOUEzMUJFM0JENkVBM0Y1MwotOjEwMDFDMDAwNDhFN0I5Q0U0NkY0MUU4NEY3MTAxRkI2QzcwMzlEMjIzOAotOjEwMDFEMDAwQkVBMkE3NkI1QzI4MUY0OEM2MzE4MjEzREM3Njk0QTNBRAotOjEwMDFFMDAwNDFFQ0M3RkRDRDNBRkY2Nzg0N0MxM0YyOTc5QTQ1QkQ3OQotOjEwMDFGMDAwRDVCMTkzRjRGN0Y1Qzk1NkZDRTIyNkU2Rjc2NDM1MjE0QwotOjEwMDIwMDAwNUVBNkM0RjJGQkI3OENDNzBEODZFMzNGQzJGMkVEQUQyQwotOjEwMDIxMDAwQ0VDODdFNEREMEQ3MDgwRUMxRTZFNTY5MDNFOTVENTEzMQotOjEwMDIyMDAwRTMyODBFNTNDMDlBNzBFMTcxOTRCNjZCQUZGNDA3QzIyNQotOjEwMDIzMDAwRDYyOUY3QkRERUIxNTM1OUNDQkVDQUZDNEMxRjQ3Njk2NQotOjEwMDI0MDAwNjA1QUNDOTgwODcxOTRBMDVGQzE3NTBFNkZFMDcxOTZFQQotOjEwMDI1MDAwRTFDMjVGRkY3NUUzMjg1OTUzQkY1RTFDNDVFRUY3NzI5QwotOjEwMDI2MDAwRjFFRkI5ODBEOEUyOUUzMUM1MTNFOEJDNENBMUY1ODUwOQotOjEwMDI3MDAwQzFFRjIxRTI0Nzg0MUIwMjQ1QTBGRTNENTE3Rjc1NEYyRgotOjEwMDI4MDAwRjc5RjFFODU3RjFFREVGREZDMUUyQ0E1MUUzNzRGQjQ3QQotOjEwMDI5MDAwNUYzMUZBQjMwMzk4QkIzNTZGQzMyQTExQzdEMkM3MUZBQQotOjEwMDJBMDAwMkUwN0FCMkVEQ0NGOEZERjBCMDhBRkNGMzNBQ0E3Q0M0NAotOjEwMDJCMDAwQUM4RjEzQ0M3MEU4RkJDRjRBRDZCNzk3MEZCM0Y1M0JBMgotOjEwMDJDMDAwMzdGNENCRDM3RTk1RkVGQkJEMzVFRTc2QzZCRjM3MTUzMgotOjEwMDJEMDAwNzYwRUVBRjlFQjc2Q0M5QkMzQjg4RkFCM0Y5RTg0QzcxMgotOjEwMDJFMDAwMDEzQ0JGMzRCM0E0NjJDNDE3MTNFOUE1REI3RENCRUY5NwotOjEwMDJGMDAwQUEwMkZBNTkwRjcyOTRGMzYyOTc4RUZFNDI3MThGNzJCRQotOjEwMDMwMDAwMERGMTQ5RkFGQkEzRDFEMzQ5NDcwRUY5RkY4NzM3MURGOQotOjEwMDMxMDAwRUM5QTMxOThGNUM1MDE2RThGRjVCRTMxMDlCRjE3RTQyRgotOjEwMDMyMDAwMzhBN0EwMUUzMkJDRTkzN0Q0N0VFNUMyOTIwMUYxMjg3RAotOjEwMDMzMDAwQjdFOTUwRDc4Q0IwRUYwOEU2OUEzRDI2QjQ5RjczOUI3RgotOjEwMDM0MDAwNUVBNEU3NTFGNUY5RkU3Qzg0RjJENjcyMDU1RUM4QkM2NgotOjEwMDM1MDAwQzBFRDk4MTcwODcwQ0Y2RDEwREYwN0VFMUMzOEZGNEQwOQotOjEwMDM2MDAwQ0FDM0Q2QjBGQzNFNEE2NjcwMjkyQzdDN0MyOUY3RkFCOQotOjEwMDM3MDAwRjlEMzE5RjdGQkNBRjlGQUYyMDIwREYzRjZDOTNGMjdEMAotOjEwMDM4MDAwOTc3RkNGNENGNzdFMzEyOTI1RUM1RTg2QjhDNzAxRkJGRAotOjEwMDM5MDAwOEU5ODA3Q0EyNjhCN0JCMUQxRjNEOEI4REQ1OUY5RDIzNAotOjEwMDNBMDAwREIzOEZFNTdCNjNCQTM4QzNCMkQyQjE4RjE5RUQ0QTAxNwotOjEwMDNCMDAwODlDMjhGMUMxM0NDNDRCRjQxOEYyNUIyNUVGRkIzOTkxNQotOjEwMDNDMDAwQjM5MjI3MEY2MEE3NjFERTJDQzIzMkRBM0FCRjZFREUyRAotOjEwMDNEMDAwRUMwNDExNkY5MkYxNTY5OTNGMkJGMzYyQ0Y5NzNGRkJEQwotOjEwMDNFMDAwNERGREYwNjVDMjFGMTAzNzk5NTE2OThDNDMxOEQ3M0JGQQotOjEwMDNGMDAwNTlGOEM3QjNDQjNDOTMyNkQzN0RBRUM4RjEwN0Q5RkZEQwotOjEwMDQwMDAwRUQ3NDZCNDRCRkY4RkQ1MzA1OUVGNEJGN0Y0NEY5QTEyMgotOjEwMDQxMDAwQjBERUU0NzAzQjQ4QkUyN0YzRjI4REUzODE1RDc0QzUyNgotOjEwMDQyMDAwRTQzMDdGQTBCNzM5OTdGQzdENjFGNjk2Q0M4NzI1RkEzQQotOjEwMDQzMDAwRDgyQUZDMTA3RDc0NjBENDBCNDUzQ0M0QTgxN0NBRjhCOAotOjEwMDQ0MDAwODg1MkNERkQxMzQwMUYzNTA4MDdENEJCMzAyRjVEREEyRAotOjEwMDQ1MDAwNzkzMjlGNTRFNjhENjI1RTI4QzVBM0JFQTY1RUY1QURENwotOjEwMDQ2MDAwREI1M0NEMzMyOUFGQUJDNTU5RjZEMjM3QjFBN0RBQTdFNQotOjEwMDQ3MDAwRjI3QkMyRDI5RUYyM0FCOERGQzE4QkY2RDQyNUZERURGNQotOjEwMDQ4MDAwQTlFMjMyNkYyQkMyQ0I2ODU3MURGRkU5ODc5NDFGMEI3RgotOjEwMDQ5MDAwNzY2OERCRTQ2RjgzNEYxOEZDNTMyMzI2NzBGQzk2NzI1QQotOjEwMDRBMDAwNUFGQUQzMEU4RTM0RTlGQ0FFQjNENDM1MDcyOTVGQkNCQgotOjEwMDRCMDAwODFGQjVCMzJCNDJFQjJEM0FDMEVBQjBCRkQyREU2MTkzMwotOjEwMDRDMDAwOUM4RTJDRjlDQ0FGRjEzODJGRjk1NzY0NUU1OTkyNjNBQQotOjEwMDREMDAwNTlDNEZCQTZEMjRFMEM0QTNCRDFDN0VGQTdGNjFDRTY4NwotOjEwMDRFMDAwNzFEQjM4RjRCNzYwQzc3MjJFRDdBNEJGQzU5MjJDRkM1RAotOjEwMDRGMDAwMkQ4NjdDRUMzODgzN0ZDNUU4NkY3OTYyQjJERURGNzJDRgotOjEwMDUwMDAwQkZFMkJBMEQ0OUZERTk2RDMzN0Y4N0EwRjhCNzdCOTc0RAotOjEwMDUxMDAwQzZBMUE5RkY4Q0JGRURCQkMyREY3MjhGMDNENkI3RkZBOAotOjEwMDUyMDAwNkRCREJGQzUxOEZGOEExMEY3MjJFN0Q1OTkwMzRGOTAxQwotOjEwMDUzMDAwREY0NEMyNTdEMkFERjQ2NzY1MzRGMUVGMzdDRDUyRjdERgotOjEwMDU0MDAwMjhDODVGQjYzQTM4N0M1NUY0NjcyNTg3RkM1OUNBMTMyQQotOjEwMDU1MDAwN0ZFQUYzNEJEMTdEREM3RTcxRjJDNjk3NzE5RDY2NjBCOAotOjEwMDU2MDAwMzgxQjIzRjlCNzA0NUM4REYxQTg4NDI2NzEwRkY4NUI2MgotOjEwMDU3MDAwRjI2N0JENjM4MDZGRTEzRDQ1NzdFMjc3OEQ4QkVGQUIyRQotOjEwMDU4MDAwMzg4QUU1QjgxRDM3MEVCRTFBQ0FEMjg3RUZBQ0MwRjI2MgotOjEwMDU5MDAwQkY1RTBFNjZBM0RFNjlGNDYzQkQ4MjFGNDE0RUU5MEZBNAotOjEwMDVBMDAwNUYyMzFDMjU5RTdBMUIyNDlFM0FBQzQ0QjdENTFDOEUzMwotOjEwMDVCMDAwNDYzOEE1NkExQzRGNzMwMTRGNDE0NUU4QzNCRjlFNDRBRQotOjEwMDVDMDAwNEU5RjE5MzNEQzJGQTE3RjZENzhCRTk5NDVDMjYzNzNBRQotOjEwMDVEMDAwMTNGRjVFOTY4NEUzNzYwMUM3QTQ4NjY1RTQyNzM0RTJDMAotOjEwMDVFMDAwRTlGMENFQUY4NjlGRUExNEUxMTcxMEYwN0I2QTVCRDE4OQotOjEwMDVGMDAwNkQwOEI3QkRGNzU2RkMwRUNCNUZGODZGOEM0M0I4RURCNgotOjEwMDYwMDAwN0JFOENFRUYwQUY4QTVEM0Y3NzQwREYwNUIxNDA1N0VGNgotOjEwMDYxMDAwRDNEQ0RDQkVGRUI4Q0M5QjM4MDVFNEMyNjVDMDIxRDA3QgotOjEwMDYyMDAwMUZCMkIzQkREMEFFOEYwM0U5Rjk2OUVBQjdFNDlGMEEwMAotOjEwMDYzMDAwRjZGMTUzRjY1QUVFNTdFMEE3NEYxQkZDNTNBOTNFNEU3NgotOjEwMDY0MDAwMzdBOUJFMTM0NDlGMTk0MDlGMzFFOEFGNkFFMDdBMjQ2RQotOjEwMDY1MDAwODg3RDdGOUM4MjM2MzdFN0FGNTJBRTIxQ0IzMTgxRjA2NwotOjEwMDY2MDAwRDlFRUU0NzFFNzA4N0VDQTAwN0RFRkQ3QzA4N0QxODE1QgotOjEwMDY3MDAwMTM4RTc3MjA1NzI3NEM0OTA5QzlCQkVEMEQzQzhFNzY2OAotOjEwMDY4MDAwRTM0Q0NGMjQ4NEFCOENBQjNEMzM1RDlCM0M4NUVFMkY5QwotOjEwMDY5MDAwN0M2REZGRTMwQzlDNDdGQTFGMDE0RjY5RkYyQUUwM0I4QQotOjEwMDZBMDAwN0VERkZDNTI5MDI3NjhGRjlCMUI4MjE2OTQyQkI1NEQ3MgotOjEwMDZCMDAwMzcyODVFMjhERjlFQzhDRjNGMzVDRENCMzBDRURBREY3RQotOjEwMDZDMDAwNUYxNzhDNDdCRDdEREFDODNFN0NBODA4Qzc4N0IxQUJGMQotOjEwMDZEMDAwM0ZCOTEzRkQ1Q0QxRjAyMTIzNEFCRUQyRjlGMUExNEMwMAotOjEwMDZFMDAwMjc1RkI3RjZFMTQzRTM4NjUxQzkxNzhFMEY0NzhERjhCMAotOjEwMDZGMDAwMjBFODNGQjUyMTc4MEZEMkFGNTlFMDgzRDkwOTdDMENBRgotOjEwMDcwMDAwRTBBMTIyMUVFNDg3RTI5RTkyMUU4MjIyRkZDMDA4OUY4MwotOjEwMDcxMDAwQTA2RjQ0OTQzQzg0NTU0QUU5MDBFQkJCRTBGQzAzMTExNAotOjEwMDcyMDAwMEY2RDExRjE1MDZGMTNDRjk3RUQ1OTZEOUJBNUNGM0YxMgotOjEwMDczMDAwNzBEM0JBNjczQjFBOTVGMDNDRkUwODc5QjJCN0UxRjk3RAotOjEwMDc0MDAwQzkzOEE3OEM2QjdFNUNFNkQ5OENDRkE3RTVGMTczMEUxOAotOjEwMDc1MDAwNDY4RjMzMDVGMDdFMkJBMDlGRDM4MEU3NzcxMzlFQ0I4NwotOjEwMDc2MDAwRkIwNzQyOEZCQjcxQTZCNjE1OUY4RkIxRkEyOUNGMTkyRgotOjEwMDc3MDAwRjRCRDdCQjFCRTdERkZBM0ZDN0JCQkMyMEYyOUYzRjJBRQotOjEwMDc4MDAwQkVCMURGMkNDMUVBQzdGQjkyRDI2RkI2MzVERUJBMTMxOQotOjEwMDc5MDAwQ0ZCQjhFMDU2N0QyNzc3RTMxNEU4MTdFQTdDRDM2Q0ExQwotOjEwMDdBMDAwNkJBQzU3QzBGMDQ2QkU3OEE5Qjc2QjBBRTk0RDFFQ0FCQwotOjEwMDdCMDAwQzdGNTU2REE5REE4RTdCNzI2Q0U0QTQzQkU1MUJCNUVDMQotOjEwMDdDMDAwMjVCOTFFQ0RCRTkxRjQ1NjBCRkM4NkU4QUQ4OUYzOUI4RQotOjEwMDdEMDAwNTRDMDJGQzIzNzlGNDJGQzI2MDNGODBERTczRjFBNDM0RgotOjEwMDdFMDAwQkRDRThDNzRFN0U4Q0Y2RkI2MEUwMEZGMEJFNDNCMkY1NQotOjEwMDdGMDAwRTE3OTQ2RTAzQkFGRTAzRUMzRjhDRUVGQTY3QzgzQjg5QwotOjEwMDgwMDAwQzdBNTUzMTg4RkU3ODhGRDYzM0M4MEY2OEZGNDE1QkVBQgotOjEwMDgxMDAwN0ZBMzNFREJCNzZGM0Q3RDQ5QkFGQjVGNDA2NzlGMjNGNwotOjEwMDgyMDAwNUMyM0QwRDlGRkY5ODY3NEE2NEU4RDRDNjdFNkE5N0E3MQotOjEwMDgzMDAwM0E4Qjk5RkE4RjQ5Njc5OTUzNEJDRTRGNjc1RDAyQUY1OAotOjEwMDg0MDAwNjRGRUI2RDQyQjJFNTJCQkNFRTVFMkZDRkY4RkYzQjc4RAotOjEwMDg1MDAwNkY5RkM0RkRBOUU3Q0JERkM2REY4NUY4NEY4REY5RENCQwotOjEwMDg2MDAwRkZGNEE3RkVBRkY1QTdGRTc4RUFCN0UwNEZGREY3NDkyMgotOjEwMDg3MDAwMkVEMkRCOEM3RUQ1QkRFM0I1QjZBOTAzQzQ5NTI1OUZFQQotOjEwMDg4MDAwMzY0QjNFMERGQzE4Nzk2RjJERjAzM0U0Q0ZBOUQ1QkQ2MgotOjEwMDg5MDAwN0Y3RTg2REI5QkVFMzgxN0Y5MUJFRUMwRjU2NjA4N0U3RgotOjEwMDhBMDAwNkRFNENCQTA3N0RFMzlGNUVGRTg2RkY4N0JGOTBEQ0I3RgotOjEwMDhCMDAwMjY1RkQ4N0RGQkIyQzkyRUUxNzc4RDdDRUZCRTQ1RDg4RgotOjEwMDhDMDAwRjcyRDMwMDZERUQzREJCRURBRUE2Rjg1MDVBNzhCRjNBMgotOjEwMDhEMDAwMTlEMzcwRTU2NTQ4NjRBRkFGQjBDNjA2MDdCMDlCRTRCNgotOjEwMDhFMDAwREY5MUU4NThFQjdERUU3NDZFRjhGRTU4NDRCOUQ1Qjc0OQotOjEwMDhGMDAwM0Y4MzlFMUM2RTM3QjlCRTgyREQ5NDMyNERFRjg3MzI0NgotOjEwMDkwMDAwMzc3MDNCRDcwQ0YyOEVFMkZBNUE2OTAwRjk3NTg2NEZDMAotOjEwMDkxMDAwRTlDMkQ0NjA2RjcyQTM4MjcyMzBCNUMxNDNGOUYwNUY0RgotOjEwMDkyMDAwMzVBRTZGQzRBMzY4NzFGRTZGM0JBRTZGQ0MxQkY4NDc0QQotOjEwMDkzMDAwODlGM0ZGRjc1NEZENzcyRDY1OUM1RkZBNUY4RDcxRjlBMAotOjEwMDk0MDAwMzFENjhFNzI5MkFGMzUyNkZDMEIxOEFDNzVGRjA3M0I4MwotOjEwMDk1MDAwNkZDM0YzNUU2OEE3N0IxQUM2N0M4MDY4NzFGQjMxNDk2MAotOjEwMDk2MDAwRDY2MDVDNEVGNEY4QkRGNDE3REM2RjY5N0MxOUVERjBDRAotOjEwMDk3MDAwRkI5QjRENzRCRUM2QkM4MUZDNzg5RTNGRkVENEFGMzY1NwotOjEwMDk4MDAwREQ0N0Y5M0Y1MjFGQUUxNjdDQTY0OUIxRDI3NzFEQUJBOQotOjEwMDk5MDAwRkRDNDY3QkNEQUVFNjY4QzI3QTczQTU4MTdFQTU5NDdCOAotOjEwMDlBMDAwQTc3MjdBNTFEMzM0RTIzM0U2NkEyRkUxOTU4QzRGRDRBMwotOjEwMDlCMDAwNjZGMTdCNzMzMTAyQkZENDkxOERBRkUyRjg4OTQ3NTQ2MQotOjEwMDlDMDAwMzdDNkI3Mzc2MzU3RTAxOUYxMjgyQjUxOEY5ODYwQTJDQgotOjEwMDlEMDAwQkM4ODRFQTU5MUZDMUUxRDhBOEJGRUZFNDc2MkJFOTMwRAotOjEwMDlFMDAwRjRBM0M3MTNEREJGNUY4MEVCNEZFMTdGQTdFNEQwOUM4QQotOjEwMDlGMDAwNjU2OUM4MDdENzM3MzdBN0UxRkRDNEUyNjkzQzFGRjEzNQotOjEwMEEwMDAwOEUzOTY3NkIyODhFOUUwN0ZBOUY0MkE1RUVFRkQ5Q0FGMgotOjEwMEExMDAwNzJBN0E2ODhCRkI3RTRBNzdDNDQ1OEY3MzY3QTZGQTRCQwotOjEwMEEyMDAwOTVGQzZDQUE3NkY3OERDODA3RDQ1MUIzMDhBRjNCMTQ3OAotOjEwMEEzMDAwRTdDMkM1Nzg1RUI5NTZEMjYzNUE3M0M3MkQ1ODAyRkIxOAotOjEwMEE0MDAwREE5MEUyMjlDRkM2NzM0RDFDNDlGQjZDNEQxQzkyODA5NQotOjEwMEE1MDAwRkFFODg2RjQxQzlBQkY1REYxOTY2N0UzN0JFOTI2QTI2QgotOjEwMEE2MDAwNkI1NUM0RTczN0U0MkU3QjA5RkYwRTQ4NEI4Njg5RTFCRQotOjEwMEE3MDAwQkQ4M0NFRENCM0VERDhBRjczMDJGRjIzMzhDNkY1QUEzMQotOjEwMEE4MDAwNEVGRDNEMjlGQ0YwMTFGMjZGMzU4REM3QzU1NTExMTc4QwotOjEwMEE5MDAwNTcwRDcxRTUzMjREOTE3RjY3ODNFMjBFMzE4MjZGRDUzQwotOjEwMEFBMDAwRTZBRTVCNDBERjRGNzA1ODlEODg2NDJERjFDMTJBQzJDRAotOjEwMEFCMDAwOEZENTE2ODY3MTNBNjZFRUQwRTk2OUI3QURENTdGRkY1RQotOjEwMEFDMDAwQzU5MUFGNUY0RjdCREZGRDg0NkMyRkYyMTlGQTFCQjAyRAotOjEwMEFEMDAwOTQyRjlFRTg0NUZDNDA3RUNCOTNGRUUyNzgzRDQ2RDRDMQotOjEwMEFFMDAwMDMxNkFGMkZDMkY5RkNCM0ZDNjdGOUNGRjI5RkU1RkYwNQotOjEwMEFGMDAwRUZFNUZGMDA4MzRERUFFODAwODAwMDAwMDAwMDAwMDAwMQotOjEwMEIwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJDNTVCMEQ3NDFDRDU5NgotOjEwMEIxMDAwNzVCRUIzMzMzQkJCMkJBREE0NTlGREQ4MkI5MENEQzhDQwotOjEwMEIyMDAwOTY4ODBDNDIxRTBCQ0I0ODhEOEQ2NkE1OTVCNDMyMkU0RgotOjEwMEIzMDAwRDkzOEZDOThDNDc2RDZEOEI4RTQzNDI3NTU5RDI2QjE2OAotOjEwMEI0MDAwMTM1QUFEQUQ5NTI1NEJCNjJDMDk4MjlDNDNDRkU5REFGQgotOjEwMEI1MDAwMjQzOTZERjAwMTI1RTk2OTBDMDFDRTFBMUM0MjA4MzRENAotOjEwMEI2MDAwMEExMDQyN0E5MjIwOENFMzk0OTZFNjk4ODI4OTY4NjkwQQotOjEwMEI3MDAwRTlCREY3Q0Q2ODc3NDYyQkZGQzUzRDExODdGM0ZDNjZDRAotOjEwMEI4MDAwREVEQ0Y3REVGRDdCREZCREY3MkQwMDc4NjAwMTgwRUM1OQotOjEwMEI5MDAwMDcwMDFENjA3MzkxMjcwOUU1MDA2NzZCMjAwREQ1RDgwQwotOjEwMEJBMDAwRjc0RTU3Njg0MTgwMEZFOUFGMzVEQjBFRjcwMjY0N0NFMgotOjEwMEJCMDAwRDk3RUIwNUUwNUIzMEVGOEVGNDNEMUI4RTg4RTlCMTYzMAotOjEwMEJDMDAwNURGODYzRDIxREFDNTUzN0E0ODM3M0U5REFFM0RBNENFMAotOjEwMEJEMDAwMDlBMDI5RUYzQzIwNURENDNDQTc3RkE2RTNGOEU0Q0YzMQotOjEwMEJFMDAwNjRBOEQ1RTdDRUU3RkVERUZFNkU3M0QxRkExMkE4RkY0OQotOjEwMEJGMDAwRkYxQjNGMUY1Rjk3OUExRTgwMEFEMTg3NTVCODZGNkEwNwotOjEwMEMwMDAwOTc4OEFFOEU3QzUwNDBGMEExQUY3MzU1M0E4M0ZGOUMxRAotOjEwMEMxMDAwOTAxMjgzRDVCNEJGOTBDN0Y4MDZDQ0U1ODNERENBREE1RAotOjEwMEMyMDAwMUNGOTY1RTlDQjgyN0NCOTREMUY5NzIwRUYwQzk4ODFBOAotOjEwMEMzMDAwNjI3QTg1REYyMUVGMzU1Q0Y2ODcyODEyQTVEQ0MzQ0YwOQotOjEwMEM0MDAwQzFBMjE3MDY3OEU2NDM1Q0RGRDFBQ0JDNDA1QjkwQTUzRgotOjEwMEM1MDAwMkI2RjU0NzlGQzcyQjVFNzg1QTY5NUY4RUMxNUQ5Rjg5OQotOjEwMEM2MDAwODY5RUE1Q0JFQkE5MDY5RTAwRUNFRkFBQjNFRjE1NkIxMQotOjEwMEM3MDAwREU4RjFDNTIyMTYzOEZDN0ZGOEY5OTIxRTZEM0M0QTY1NAotOjEwMEM4MDAwRkIyMTgxRkNGREY5QzY0Rjk0MjRGMkU4ODFERDJFNEI1NwotOjEwMEM5MDAwM0JCRjdGMDM2OTAyRjMwREQyREZDMDdGQTc3RTMxMkFGRAotOjEwMENBMDAwRjFFNEM3QzRGM0Q0MEEyRDNEODRDRjg3QTRGNEQwMzUzMgotOjEwMENCMDAwMzRFRTJFQzE1RjVCMEU4NTk2MUNGMDJGNUM4MzdDRjRCNgotOjEwMENDMDAwNUE3MkYyQkFGNzg1N0ZDQTAyRTY5M0M1OUMxQzM5MkM4QQotOjEwMENEMDAwNjExQTM1QjRFRjNFOUI5RTZFNjQwMEY5MzRCQ0JDNjE3MgotOjEwMENFMDAwQzU5MDRFRkIxRkZEODc2RkUxM0EwRTFERERGM0U2QjdBMQotOjEwMENGMDAwRjA3NUEwQkU2MUE0MTlENzUzNjA3ODBDOTlGNEY5NTMyQwotOjEwMEQwMDAwQzc4RUExQjg2MEEwRkUwQkEzNDQ3NkRCQTg2NDZBRjg4NgotOjEwMEQxMDAwREVBRjA1OEZDOEI0NDdCRjY0MTIzREU1RTA0MkRFNEY0OQotOjEwMEQyMDAwNzg5QjUzMEYyNjI0NjM0MTI1RUQ2RjRDMDI5MjRCQTExMwotOjEwMEQzMDAwRTE3Q0VGRDM3M0Y2ODNGRjFGMjIzOUIzN0VFNjNDNDc5NQotOjEwMEQ0MDAwQkUyMUY3MzY0Q0Q2Q0ZFNUZCMkI5NjNFMkIzODNFNjlCRAotOjEwMEQ1MDAwRDM0NUJFOEM3QkY1OUI4OUNGRTNGQjY0NDgyMkM5RjE2OAotOjEwMEQ2MDAwNUQ2ODE0NTcwMEZDNUJFNkJFNEZFRjQ2REJGRTQyQkZGQQotOjEwMEQ3MDAwOTdFNTMwMTE1MUQzMTI4RTlGMjhEMjZFREI0MEZEMEFDOQotOjEwMEQ4MDAwOEY3MTg0OTk4QUZGRTNCRTQ2OTc1RENERkJCMkU3NkIxNgotOjEwMEQ5MDAwNkFENTc5QkVCMUM4ODI0QUIyNDcxQzU3MTlCRjZFQUUzOAotOjEwMERBMDAwRkVCOUQ3N0ZCMUZBNzdCNzU5NkFFOUZCMjgxMDdEOTg2OQotOjEwMERCMDAwQkNEOTQzRjZFNEI3QzY1QzIzNEYzNjJFQTFGOTdFMkU4QwotOjEwMERDMDAwODNEMDlCMUU4ODE3Q0RFNTRGM0ZGOTgzOEY2NEY1NDQ5MAotOjEwMEREMDAwQjVGNDY4NkZGOUZBOUYxMEY5RjlGNDU5NEQ0Rjk5RDVBOAotOjEwMERFMDAwMEQzNDBGRjQxMERGOTc4NTlERUJCM0M3N0RDRTkyOTczRQotOjEwMERGMDAwMkYwRDE5NkYzMUI1MTkxMzFBQTg5RDMyMjU2Q0NGNkVCRQotOjEwMEUwMDAwRkNCQ0I2NTY5RjdGMUUxRkU0RDBBRDI2N0FDMEZCRjYxMQotOjEwMEUxMDAwNDI4Mjk5NDU3MjM1NzNFNEJBQTdCMEUxMEU5MjRCRkY1NgotOjEwMEUyMDAwNEQyQUIwRkVCOUY5N0M5RUJFQUE2NDhFNEJDNUE0MEZCNAotOjEwMEUzMDAwMUY2MUZENDhBMjdFRDQyMjFENkZEOEE5ODdGMTI3NTZENQotOjEwMEU0MDAwQzI3NDUwQzgyOUM5Q0Y2MzI2Qzk2OTU5QUI3N0Q2N0YwOAotOjEwMEU1MDAwRkE3M0ZDMjVFOEJCN0YyMzIzQkQ3QjYzQUEzRTg0RUJBQQotOjEwMEU2MDAwQkMzN0JFRkRBQkI3OTI5RDNGMkYxQjEyQkZEN0Q5MUYxQQotOjEwMEU3MDAwN0VDMTlBMDM0NjI3NTgxRjRBQUM3MzY3RTdCMTdCNUU3MQotOjEwMEU4MDAwN0I4RTY0MTQ1MzVGMjdCRTkxMURDRkYyNDVGODY3RDM2NAotOjEwMEU5MDAwQkYyQTNCREZDMUU2OTM4MzRCOTEwRkE5QzFGQ0Y0RUY1RQotOjEwMEVBMDAwMkNEMzNGNDdGQ0IzRjkzQzFGREQ1OUZGQkRGM0Y4NjQ3OQotOjEwMEVCMDAwRjRGQTZDN0ZBNDIwMTE4OEEwMUM0NjgyMDYzQTAxN0FCRAotOjEwMEVDMDAwN0Y4MkRGQzM0QUQ0Q0JDQUY5RTU4OTFDNjVGRUJDNDZFNAotOjEwMEVEMDAwRkZDNDcxREQ1MTUzOEI2MDVGM0U4NjRCNUY4RTdFQjFFOAotOjEwMEVFMDAwNDhCRjc5M0RCRUVBMjg3RjdEMTNGMTdGNUJEMEEzQzk1RgotOjEwMEVGMDAwMzlGNkQ1QjdERjBCOTkyMDMxMDJFNzQ1QkQ1QjA3RDM0MwotOjEwMEYwMDAwOUJENkUzMzhBOEYxQjI5RUNCRTUyQkY4RjlENkEyQjg3MAotOjEwMEYxMDAwRTJDMUY2RUFDODEyOUVDRkZFQkUxQkVFNTM3NkUwRjNBNgotOjEwMEYyMDAwRTU1RUVEMTVEMjkzNTRCOTQ0MkJDMkU3Qzg0MDVDRkE5NAotOjEwMEYzMDAwNUEwNUNDNjI2Q0JCRjQ4ODlGQ0VCNUQ4RTMzNDExNDAxRgotOjEwMEY0MDAwNkI2OEJDOUNDRUE1ODZDNzBFNTUyNUM4QUU5M0U2NTRFQgotOjEwMEY1MDAwMURDQTI3NjQ4OUVCNUFERjU0QkMxREU5RjVCRDIwMUI2RgotOjEwMEY2MDAwN0JCMDFGMEE2RTVGMDdBODQ3RDIyMzQxRjYxMzdERThDNgotOjEwMEY3MDAwRTc3RDI4NzcyNUQ4RjkyNjNENUY3MzA2MjA5QUEzNEY5MQotOjEwMEY4MDAwQUQzMzdFODhFNkY4QkQwODUyQ0VFREI3RkIyQjFERTNFRQotOjEwMEY5MDAwM0JCNDZBQzc3QjE5NEMyMzgzN0NFQTBBMkY3MzhDMkJFMgotOjEwMEZBMDAwNkE1QUE5RDE3QUJCRjUxNThFRTczN0Q1QjUzOEJFODcxMQotOjEwMEZCMDAwQTg3MjcyMUFGQkFCRjEzRjkyQkIwQ0EyQ0ZFRkFCMDk0OAotOjEwMEZDMDAwMjc2MDNGRTc3QjA1NzJGQUY4N0U2REE0QThGQzM0MUQwQwotOjEwMEZEMDAwNEEzN0MwMEQ2NDQ3Mjg5NzIzQzNFNDdGMzZGOEY5REMwRAotOjEwMEZFMDAwRUFGM0MyMzFBOTA0QzhGNDkzRDA0OENDMzZGOUJDOTdDRgotOjEwMEZGMDAwMkM3RDRENDZBQTU5NEU1MkYwOTlGNzU5MEYxRjlGRjY3NgotOjEwMTAwMDAwMTBDRTgyQzdBMDkxRkNFQkRGNkFGQTcxMEYwRUI5OTI4NQotOjEwMTAxMDAwNDhFMkY3NjE1NDc0MURFNTg0QUUzQTE5NjhFNEU3RTZFNgotOjEwMTAyMDAwRDI1MjNBRTdBNDY0MzdGNjE3RTFCOEIwNTA0NTc4OTY0MwotOjEwMTAzMDAwQzZGOTYxRjc1N0M0Mzg1ODQ0RTMzNDQ4NTY2MTVGMzMwMgotOjEwMTA0MDAwQTA4MEU0NUE4NTc0M0U1QkNBREYyNUJCQURFRkFFMTJDQgotOjEwMTA1MDAwREYyNTRCNEEwNUZEODY0NjNFNDczMzFERDgxRTA2MDM1NQotOjEwMTA2MDAwN0NFQzdGRTIwODlBQzg4QkY0NzA3QjE1QUQwQTlGM0YzOQotOjEwMTA3MDAwMDg0NjIzRjU2QjYxOUFGRDE0OEE1RkEyRkU0Mjk4RDQ1QwotOjEwMTA4MDAwODQ5M0NGMDhCRjNEQUQ4NDRFRkI4NURGQ0Y2NzJGNTlEQQotOjEwMTA5MDAwQkI1MUUwQjQyRDBGMUM3QzU1QUJGOTI1QjJCRkRCRUU4NAotOjEwMTBBMDAwNjgzQTI3RUU1MDc2M0VFREIwREJFRjQ0NzQ3MTFFRUVFOQotOjEwMTBCMDAwRUM2MjNCNTE3NjNFQzNFRjVGOEFDNEY3OTAxRDEyRUJBMgotOjEwMTBDMDAwRkQ4RDczRjlEREEwNjY4MEZDNTcyQTAyNDYxMjQ5QTQwMwotOjEwMTBEMDAwMUU1RDFCREU4MkYyNEQzRUVBMzc2QUUxRjJDOUUzNjIzMQotOjEwMTBFMDAwRTU5MDA2QUQ4MEY4MkFGNzVDQUExQzgwQ0ZGOUUwMzFDNAotOjEwMTBGMDAwRkZFMTIxNTY0NjkzQ0ZDOTNGNDAyRURGQkExNEI5Qjg1RAotOjEwMTEwMDAwRTUwMUY3OTQwMUI0OUNERjhGM0UyMDY1MDJEMjUyRTZFMAotOjEwMTExMDAwODcxOTZFQ0NGMjFGRkJDOTY1MTZCRjRBMkQ3OUM4QTI4QwotOjEwMTEyMDAwQ0RDOEQ2NzNBNTc0N0VCOTEwQkRCMkQyQUM3Q0NFMjcyMwotOjEwMTEzMDAwOTc3MDFDREYzNzY2RTUyM0Y3OThDQzNDRkI5Q0Y2QzEyMwotOjEwMTE0MDAwMTlDNkI3NEIyNDgzRTVCNTU0OEU3QkE4NUYyODY1MkM2MAotOjEwMTE1MDAwRDA5M0U2NzNCRDE4MzQ5NkNGMTVEMEMzNkRCOTc3N0FBNgotOjEwMTE2MDAwMEJFM0UxOUQzODExRTFEOTBGRjA5NENEODlDNzUyQzE0RAotOjEwMTE3MDAwMzY3RjM1RjlENzNBQzVGMDYwQkZCRUM4MTM0RjIzMUY3RAotOjEwMTE4MDAwQUY1NDIwNDNGQkFCNTQyMDQ5RkUxQzkxMDFEMzRGM0Q4QgotOjEwMTE5MDAwOEFBNzE1OUUzMzI5M0NBNjNERjRERDJFN0YzQTI1NjVBRQotOjEwMTFBMDAwRTc2RkIwRkNGNjRGOEFCRUE5NERENzY3Rjk3QzkyRkM3OQotOjEwMTFCMDAwRDc3MkMxMEYwRkZCOUZDOTBDN0QxRjhFODFEMUE3Q0ZBNgotOjEwMTFDMDAwRjU2NzM4MkUyOTVCN0U4QURBQ0RGNEEyODVGOTk2MkM1NAotOjEwMTFEMDAwQzZCRTM0RjhDM0Y3MDk2NzEwM0QwNUZCREY4QjI0REU3QwotOjEwMTFFMDAwMjFCRDIxOUMxRTJDNjVCRjM0NUQ0OEMwN0EyRTJFMzA1NwotOjEwMTFGMDAwMDk1NzZDQjFFNkQ5NzBBM0JFMzg4RUVCREMzMkU4N0JDMAotOjEwMTIwMDAwOURFODQxQ0FFN0M0MDVFRUVGNzUwOTcyQkZCN0JGOUIwMQotOjEwMTIxMDAwRDUyQkY3Rjc5NzY4MDdCMEIzRTI4MjcwNDBFNDkxRDUxOQotOjEwMTIyMDAwMjVEMzc5NzBGQjJDQ0UyNDNCMjlDQkZENEVDODQ5MkQwQwotOjEwMTIzMDAwNEYzMEVFNTBDOTVFQ0FDRTRGQzdFQkMyMkYzNjFEMkZCRQotOjEwMTI0MDAwMkEyRUQxRjE1QUY4QzUzRUE3QjZDMzE5QUZCMkQ0NUE2NwotOjEwMTI1MDAwMjdGMjZCMkJEODdGRTVDQ0NGQ0QxNkZGM0U0REU3NTU1RgotOjEwMTI2MDAwMzFGMTEzMDMxNURDRjczNjg4QUJBNEI3N0Y4NjEwOUFFQgotOjEwMTI3MDAwNzBGQzkyN0REQjhBMTkyRjQwNTQyM0ZFNDg5OThGQ0E1NwotOjEwMTI4MDAwMUY1RTdCMTE3Q0I0RjhCNDM5RjNBNjU3MjdCRkI0QjMwMwotOjEwMTI5MDAwMDhERUM4OERERkFDRjdFRjZDRkM4NDg4RDNGREZFMUE0NgotOjEwMTJBMDAwN0Y0RTdDNTg3OEVDODM1RTcyRUE3QjBBRkZFNjg1NTZCNwotOjEwMTJCMDAwNUM3QUZGNEJCMjIxNTdEMzdCODE5QjAzMjBDRUVGNDI1OAotOjEwMTJDMDAwQjI1MzVDNzdFMUUzQTdGRjg3QzYxN0JBNzAzNTUxODY0MgotOjEwMTJEMDAwMUNCQTlFQzJGRDhDNjcwQjhCNTU5RDcxQjY0QkNGNkNCMwotOjEwMTJFMDAwMUMwRDFGMDgxQzFDQjRCODk3NDM1NzIyQkM2Q0M3M0Q4QgotOjEwMTJGMDAwNEM1NzlBM0JFRjc1MTYzRUM3NTc5MTBGMkYwMENGQkI0NwotOjEwMTMwMDAwNzEzQUNDRTI3M0YxM0UxODU0ODU5RDYwOUM5OTcxQzQ4QQotOjEwMTMxMDAwQzE3QTVFM0JCM0Q3NkQ3RjU3QTFDNkFCOERGQTNDREY3OAotOjEwMTMyMDAwNUI3MkE4QTc0MDFDRkRDMkMyMkE0OEVGQzZGNTBFMEU4QwotOjEwMTMzMDAwRUU4ODE0NjI3RkFDMDI3NDhDMzA2MUEwRjM4QjEyRTFGMgotOjEwMTM0MDAwOERCNjcyQTE0QUExNjY4MTBCNjkwQUIwRTM3OEZDMEJFNQotOjEwMTM1MDAwRkRBQjNFNTQ4N0VGQjc1NzA1MEQ1QzE5MkM3QzBCNzEyNAotOjEwMTM2MDAwMzJEMkI5QUJDQTZGOThGODIwMDVFMjdEQjJEOTIzRTIzOAotOjEwMTM3MDAwQzkyNEJDNEM3ODc0OUIyNTFGRUZFMzAyNjdCMjZDRDA4NAotOjEwMTM4MDAwMEVGN0I3MDk3Q0I1RUREODY3RDc5MTdDNDc0QTZGMzEyNgotOjEwMTM5MDAwMzIzODZFMUJGQUE3MzJDMjYzQTM1RUM2NzM4OEVCMUM5OQotOjEwMTNBMDAwQjhERkQ3OUM4MzAzRjFGRkJCMEU3OTFEN0RBRjBCMjcwMAotOjEwMTNCMDAwMEVCNzIxMEU0NEZEQjY3MUUwRkQ2REMwNzY0NkVCQTI3RQotOjEwMTNDMDAwRjNFNDcyQ0QwM0MxNzJGNkE3RDcyOTUzOUU3Q0Y5Mzc5NwotOjEwMTNEMDAwNUIxRTM2RkU3RUEyNDJGMEQ5RkJBRUUwMEIwNkNDM0I5NAotOjEwMTNFMDAwRThCOUVGNUQxMThGQTEwMzBGMzYyREEwRDM1RkYwQ0ZDOQotOjEwMTNGMDAwRDc4NEZDQTFBN0VGOEFGMzAwQkZFNDc1OUJGODFGQUQ2QgotOjEwMTQwMDAwREI4RDg3N0QyRTNDRUM1RUFGMkQ4NzQ3NkNGRUFDODI3QQotOjEwMTQxMDAwNTVDNDFGQzRFNzhDMTNFQ0ZEQjhGN0YxMzhDNkU3NTE4QgotOjEwMTQyMDAwNTQ4QTI3N0JGRERDNjY3QTM1NkU5RkVBMEQ3MzdCQTJCQQotOjEwMTQzMDAwNTc4NzI4MDJCMDY3N0FFQkI4N0RCNkQ3RTBFN0NGRjVEQgotOjEwMTQ0MDAwMzY3MzZCRjM2MTJFN0Y0NDVFRjMyQTZCQ0Q0QUZENTRGNQotOjEwMTQ1MDAwOUNDRUQxMkJBMjFFMzY4NUIxN0IzQ0NDQjdCM0E4OUZDNgotOjEwMTQ2MDAwNjQ3Q0M1MDZFNURFNzA3Q0NDOTNBNjkwREU4RTdGMTY4QwotOjEwMTQ3MDAwNUFGQTdBQURFRkNDNzExRjhFMUZBOTA0NjMwRjdFQkY5RAotOjEwMTQ4MDAwQjA3OTNCRUJEOTlBMzM5RUFDOUQwMEM1MzkwNThFM0NCMwotOjEwMTQ5MDAwNDEwNENBMUNGRDc2RkY5NThFRjExRERBNTJDN0ZCRDJCRQotOjEwMTRBMDAwQzgzNEZCQTlBRUYwQjU4RTcxQjY5Q0ZGOEVFMjJDNUMwMQotOjEwMTRCMDAwREY1OEY0QTQ0NjdDRURENkFGNzc4QzUzRUU0MUY5Mzc3NAotOjEwMTRDMDAwNTBGQ0YzNTEwNzVEOTBENzE5RTRBNzRCMzczQUY1QjBCQwotOjEwMTREMDAwRDgyNTU3RjVFRTczQzc0MUI2OUNERjZBNzNDNjQzRjM1MAotOjEwMTRFMDAwQzlEN0FEQUYzNjVGNEI2N0Y5MkFFMkNBMTRDNTk1QzhCNAotOjEwMTRGMDAwRDc1MjRERjBENURFRUY4OEI1NUY3QjVFQTU1OUVDRUY5NgotOjEwMTUwMDAwNzJDNzk3QzUxNDVGNTZFNzhCMkY0RjU5N0MzRTRGN0NBRgotOjEwMTUxMDAwMTk3M0M2OTc2RUJFOUUyRkJFNUNEMEVFRjQyQjE3Q0ExMQotOjEwMTUyMDAwQ0ZDRDhCNDVERUFERjQ3OTk5RTMxNjM5RDZDM0U3NjBBQwotOjEwMTUzMDAwRDk5NDZDNzQ5MTRCQjQ3MDU5MTFGOTAwMUNCN0I5NDkyNgotOjEwMTU0MDAwNEQxM0NFMUM4M0U5MzA5REU3MDcyNUU0MkFFQTVCNTk1OQotOjEwMTU1MDAwQkQ1MTQ5N0VFNkUxOTBGMUNBMDZDMjhEREQyMjBGRjg0OQotOjEwMTU2MDAwNzRFNEI2MzBFMThFRkVERDg3QzM3ODU4NDE0QkJCODcwQgotOjEwMTU3MDAwRkRERDY4RTQzNEU3MkYxNDFEMzg3RjgxQUQ5OUNFODNGQgotOjEwMTU4MDAwNEZFQ0YxNzZCRUYxRTAyNjM1MkRFMUY4ODM1NkJFRjE0MQotOjEwMTU5MDAwNjBGNzZDQkU5MUVCMUIxMzREMjJERkY4MjdFREJBOTU3NwotOjEwMTVBMDAwRkY0Qjg2Mjk1RUI5NzdEM0FBNEEzRUFDMTRFQzVGNDc1RAotOjEwMTVCMDAwQzMwREI2OTNBMTgwNTY0QzcxNzQ2QTkzNDdBMzdEQzkzRAotOjEwMTVDMDAwMkJFRkZGM0NFOUM3MDFBOTY3NUYwREM1NkYxNTFFQ0U2NAotOjEwMTVEMDAwQkJBNjQyQUIyQUI3RTAzODc5MzNDMjE4RUE2RjVBRjU5NgotOjEwMTVFMDAwMkFGOUVDODkwQTdENUYwRDdEMUZBQTYxRkVGNUFGQkU2OQotOjEwMTVGMDAwQ0Q0RkYzOEM4NDE2NzQ1MzdFNjRBNEMzQzMzMjkyMDkxNgotOjEwMTYwMDAwNjcxNDMzOURCQTczQzUzREVFM0E4MDRDMUU5N0UyQjcxRQotOjEwMTYxMDAwNzI0RjQ2QTVGMzhBRjA0NzRFREVERjk2RkY1MDQ4RTU0RAotOjEwMTYyMDAwRkNFQ0Q2RjY4NzBFMjc2QkY4MzFGQkFGODU3NjVENjY0RQotOjEwMTYzMDAwNTMxQkU3OTlDRjEyOUU5MEU2QUZDQkVDQjVGMjlEQjM2QQotOjEwMTY0MDAwRTc0RUQ4Qjk5RTNDRjMzMDJFQjBFQjEyRjRBN0RCNzkwRAotOjEwMTY1MDAwNUFGQzRCREREQzk5QTY3Mzc0MUNFMjMxRjI5RkM5RTBBMQotOjEwMTY2MDAwQjlFQjIwNEFGMERDNzU5MEY5RUExRUJCREE0NTFFRjVBRAotOjEwMTY3MDAwQ0IyNDc3OTE1Rjc0RDQ0Qjk0OTg1NTE3QjFFMkQ3ODNGQwotOjEwMTY4MDAwOTQwRjI3N0Q3MEQ1NDlFQzc1RjQ1OUY0NTJCMzdBRTQ4MAotOjEwMTY5MDAwQUE5QkFDNTYyRDdBMDZFNENCNUZGRkExRjU5M0ZCREI0QQotOjEwMTZBMDAwNDVCREU2NjJFQjI2REY2RDA3QjE1RTJCREZFREI1RTRFRAotOjEwMTZCMDAwN0Y4RDNDQjk4M0Y0RjE4RjlERUZGRTZFRkJFNUNENzcxNgotOjEwMTZDMDAwQ0ZBRDEzQTVEOTVFRTBEODk5MzdEOEFFOTcyREIwRjAzRAotOjEwMTZEMDAwQ0JCOUVCNDA0MzA0RjQ1MTdFRTMyQjEwOTc1MkZEQzM4QQotOjEwMTZFMDAwRUEyN0FGMTM3NERENzVBMTgwOTU0N0Y5NTFGQjUyMTFCQwotOjEwMTZGMDAwNkY5MTNGMjFFMTJBQzY2MkUyNkI1MEY5NzY1MkMzN0RCOQotOjEwMTcwMDAwMTQwNEM3MjA4NEFEQUY3QzRCOTJEQUQ2QzUzQUQ3ODc5NAotOjEwMTcxMDAwQzY5Nzc5RjhCQzFBMkY0QTFDRUVBN0Y1MkYwQkU2QjUzMQotOjEwMTcyMDAwOEI1NzJERkYzNzY4RDU2RjQ4ODEzRDY0NkY5MjZEMUNENAotOjEwMTczMDAwOTBGMEEwOUMyNjQwQzhGOUFERjYxMDhGNTdCNEQxRTZDMgotOjEwMTc0MDAwM0I1MTZGNEU5MTNFNTRGMDdFRjJENjdGNEVCNzhCRkFFRQotOjEwMTc1MDAwNEYwRUZEQUY5MzlFQTYyQ0UyNDQ2NzBCRDJGOTBGNEJDMAotOjEwMTc2MDAwMUY4MTBFOEUwNTE0RUM4OEY5RkNGQTY4MzNFMTgyREZFNAotOjEwMTc3MDAwQjU2QkUyQkRCMkMyMjA3QjE4MEZFNTlGRUY3N0Q2N0UzNgotOjEwMTc4MDAwODA1MjMxQUJCMkY4NjhFMTQ2NDEwN0ZDRTJGQjgzRDJGQwotOjEwMTc5MDAwOTkwRDI3NTdCMjVDRDk5RTY4MURGNERFNURGRjcyRDNBOAotOjEwMTdBMDAwMEZENDM5RTMxQkI1Q0EzOUZFODNEOTdEMzhFM0EyMDNEMAotOjEwMTdCMDAwRjNENEM3MTY0NTg1QkVCNjJFMTY3QTQ2RkFCMTI3OEZFMgotOjEwMTdDMDAwN0VCOEVENURBNUJDMjdDNTUzRDE5MDM1OUZGMDNCNDE1OAotOjEwMTdEMDAwNjVBQThERTI5RDYwM0QxODVDNTM1NDhFRjM3RUUzNEYwNQotOjEwMTdFMDAwRDQxQzlCNUU0OTdFQkVEOEEwMzg0OEYxQTNBQjZDQ0MxQwotOjEwMTdGMDAwQzY4OUVFN0Q5RjJGQ0U1MzE0NDg3QTFCRTdDNjdCNDhERgotOjEwMTgwMDAwRDcyQzY5MTRFNzRDMzI4N0RFNTU1MUExMjc3MjZFM0MwNAotOjEwMTgxMDAwNTg0REUxODg3RTMzRDdGMUE4MEU0OEZENURCRTBERjkyNQotOjEwMTgyMDAwQ0VFOURBNzZFRkFDOUZDQzU3RDczOTE0QzczODgyODIyRAotOjEwMTgzMDAwRDQ0N0Y2RUZEQjhBRkQ3NzM0OEZFNkUzMzE3QURFQkEwMAotOjEwMTg0MDAwOEU2NkY1NjdFQjNBRjEwQkFCRUI4QzQ2NEJCQjZCMkUyMAotOjEwMTg1MDAwQTZBRTMzMEZEREQ5RjM3ODZFNUQyNzFBQzU3RDhFMDVGMAotOjEwMTg2MDAwNDU3RDY1QjZBRTczNEJGOTA1RTU3M0MwM0E5NzRCMkREMAotOjEwMTg3MDAwQkY1Q0Q0NkRDNTExM0IyNThFMjM5RTZBRkFFREYwNzJENAotOjEwMTg4MDAwRDJCMzI2MkZFQjAxRUM5RjgwNUMzQjU5Qjc1MUZGNUEzNgotOjEwMTg5MDAwMTk5RDMzQUZGQUEwNTZGODM1OTNFOEQ5NzFCMUNEM0YxMQotOjEwMThBMDAwRDVBMkRGRjZEMEYzMEE4RDFGQUZGNEFDNjI3QTkwRjFDNwotOjEwMThCMDAwNzlCOEQ4OUQ1NEFENTZBNjc2Qjk5QTkxNEI4ODZFMjlDMQotOjEwMThDMDAwNTg3NUY0OEM0NENGMjNDOEFDRENGODYwNjRFNkM1RjZFOAotOjEwMThEMDAwMTJDQTkzMDRDMTIwMTczNDEyRDE3Njk3RDAzRkE4MEFCOAotOjEwMThFMDAwNDQ3OEE3NUE0RjkzQkY2REY3MTczQUZDRkY0OEI3MkFDMQotOjEwMThGMDAwRkM2QkFEQjgyRjMzN0U1Q0ZGREEzNjFDM0ZCMDMzQzBEMwotOjEwMTkwMDAwQjhFOTQwOTU0N0Q4NTc1MkUyN0E3Mjg3RTY4QzdCQzY5MQotOjEwMTkxMDAwMjc5NzA4M0NCNkRGNkJEMDNEOTFBMzkzNjJGQ0Q2QzhGNQotOjEwMTkyMDAwQUFCNENDQjhEQjE5MTc3NUVCQ0VCODY4NkI2NUUzMkI5RQotOjEwMTkzMDAwODQxN0ExREZDQkY5NzhDREMyQjUzN0Q1MzlFM0E0QTI5RQotOjEwMTk0MDAwRUE5RTY3MDlBNzZDRUUxNzc4Nzg2RkI4NzRDMTU2RjRGMQotOjEwMTk1MDAwN0ZCRjhBRUE4RTM4NzE0QkZGNUQ1QzM3RUE1NzgxRUJCNwotOjEwMTk2MDAwQTkyMzlCNTRCNjhGMTFFRkVCODdCNjMyNkUyQzYwM0VFNQotOjEwMTk3MDAwNEU2QzUyMkIxMzM5RjY1MkQ2RTFCM0VFNDUwOEZDODE3QQotOjEwMTk4MDAwRjAzMjMxOTlFNzdENTk4N0YwM0JBOEQ4N0M4RURCRkE5RAotOjEwMTk5MDAwRjJBNzlGMTE3QzJFQUU4MkI0NEUzOEFFN0I0Nzg2RTIxMgotOjEwMTlBMDAwQ0FGMTJBREMxM0JFRUYwRkQ3NzQxRkE3Rjk1Rjk2ODEyNwotOjEwMTlCMDAwRjZFOUQ2QzNFQThFNUFCNkQzRDlGM0I0RDlFM0UwOTNBNQotOjEwMTlDMDAwRDcxN0VGMjFGQTcwMTNFOEU0RDdBMjMxRUM1MzFFNjA2OQotOjEwMTlEMDAwQTMwQTk0MUZGMDg1RkY4QUY3NUI4QUZEMDBGNkZEQjEyQwotOjEwMTlFMDAwRDFBNDgyN0Q3RjRERTI3QUMyQzU0RkVGQkE3RDMwNTJERAotOjEwMTlGMDAwNEVFNzlEQjA2RkRGQzZFREYxNEZEMEY4OTU1RTA4RDA5MQotOjEwMUEwMDAwRkE0MDk3QzJCNEJFQTRCOENGRTBCNjg3QkRBOTFGNDRDMAotOjEwMUExMDAwNDk0RTdCMEQ4OTQ1QjRCOTdCRkRERDdDNkZBOUJDODA0NwotOjEwMUEyMDAwNzFEM0E4MzdCRTg1RkREMUFEN0UyREM5NjdFMDM0QzcxRgotOjEwMUEzMDAwMTFERUFGRjg4MEY0NkU2MkQ3NkYyQTA4N0ZGRjM4MkE3NAotOjEwMUE0MDAwRUE5QTAxREQxOTVGRkI2MTk0Q0ZFREQ1RTZENDQ2RkE0MQotOjEwMUE1MDAwNkU3NUIzNEExNTBGNzhBQUU1MzRDQjZEQTJDOTY3Rjg0NQotOjEwMUE2MDAwNzAxRDEzMkQxMkYzRjlCRDI2NkY5QUU2Nzk1MjlEOTJERgotOjEwMUE3MDAwNjlERTI3REZDM0I5QUJGM0Q5Nzc3RUJCQjJFREM4M0REMgotOjEwMUE4MDAwN0VBNDc5QkQ5RkY0NjIyRjRDREQ0MkZDNDlDRTg4M0M5OAotOjEwMUE5MDAwOTU3QjVDQkM0MzlDNTc3QjUzQjdENjI5OUNDRjUyQjlFRQotOjEwMUFBMDAwREVBRTlDMzFDQzEyQTQxRTlBODlGRjNERTU1RTkzNTFCNwotOjEwMUFCMDAwNDVDNDQ5OTU5RUE0ODRGNDA2QkFDNUJEOEM4MUEyQzREMAotOjEwMUFDMDAwMjBFOUYzMDBFQTNEQzc0OUU1RTIzRUQyNzg2NUI5MzE0NQotOjEwMUFEMDAwOTQzM0RGNzhDQjZENzVFNENGNUU2ODBBMzBCRUVGM0JBMAotOjEwMUFFMDAwRjExNzc3MTJCRTZGOTNERkZBRUUyMzE0NTc1NUE5MkMyNgotOjEwMUFGMDAwQ0YwMTZGQ0ZBQjE0MDcyNTlCMDJCQ0RFMTM4QjU0RjBENAotOjEwMUIwMDAwOTMzRjI4QkZGMzQxOEFCM0UxRTg0NkM4RDVENzg5OTgwNwotOjEwMUIxMDAwQjBEMzg5MkE2MUY3RDIyMzFCMzkwRTE4OTc2NEU2QjMzNAotOjEwMUIyMDAwNTk3MTQ0MjIzQ0U2OEJEOTc5Mjc5MTY3OEE1OEVFNkMyQgotOjEwMUIzMDAwNjJFMzc3MzgwRjc1NDVCN0M4QTM0NjYyNTZCRTQ5MEVCMwotOjEwMUI0MDAwMjY1OTJGNkYwODNDNDhGNjZGMkE1RTQ3N0NCQ0U2OEMwRQotOjEwMUI1MDAwMzM1RUJFQzIxNTJGQkJGMzUxRkYxQkI1RjIxMTU2REUyQgotOjEwMUI2MDAwQzlENkNCNjI2QkNDNDRCM0U1QTc1N0ZBRDI0MjBGN0IwMAotOjEwMUI3MDAwMkFCNUZBQjlGNkZEQ0YxNjdFOUVFQUY1RjMzREIyMTcwNwotOjEwMUI4MDAwN0IzNUVFMTc5QjZGRUYyRTQzM0EyRkY3ODZGOUY5Qzc5NwotOjEwMUI5MDAwNTYxRjk2NzJCRjFCNTk3OUFCNUY2NzdGMzIxRDI2QkFGRAotOjEwMUJBMDAwNkUzRkUyRDY4QkExNjg4MUUzM0NCMUQ3NTlENEQyMjZFRgotOjEwMUJCMDAwRUVERjlENjE4RjBDNkI4MkQzRUQ3QzM2QzI1NDMwMTcwMwotOjEwMUJDMDAwRUY2NzdBQzUzREI3QTdBQzc1OUVBMDc1RkEyODRGMjY3QQotOjEwMUJEMDAwRDZGNzZDQUZDRUVENzNCRDc1REM2RUVBMDA1MTBGQjA3OQotOjEwMUJFMDAwRkRDMzU1RTgxRjkwMEZEMTJBRDEyNzdGNDBGMjJGMkQzQQotOjEwMUJGMDAwQkY5M0YzNjRCRUIwQTI5MUJERkJBQjQ2MzM1MjhFN0Y2MAotOjEwMUMwMDAwOTgyOEVBRjlDNTVERTRGNzJCODJBQzhGRUU3REFERTk0QgotOjEwMUMxMDAwRjBFNERERDdFNjk2MURFQzc3Q0VFMjNDQzQ3RkY0MzNFQQotOjEwMUMyMDAwNzdCMzFGNDJCRkMwRjM2RTU0RUZFMDc1OThFODk3RDhDMgotOjEwMUMzMDAwMkZGNDdDRUQ3NkY2MEI1RTIwM0Q3N0ZCODFEMkE0QjBDRAotOjEwMUM0MDAwRUY4NDJFRjI3N0Y2M0RBMTU5QkY4MEYzQTQ3MTlFQTdEMQotOjEwMUM1MDAwRDBBRjUzN0YwMEZEMDBDRDMzRDBGMkZBOUZEM0JDRUY1RAotOjEwMUM2MDAwQkQ1RkMwRjdBMjI2MzZCREMyN0VFMTg1QjNFOEIzMkZDMwotOjEwMUM3MDAwQTM1RkIwRURGMEI1MTM5MTIzQjlGMTdDNTZDRUVCNkZCNQotOjEwMUM4MDAwM0YyNkY4QTE4MUUwRUI4Njc4OUUzOEYxNjJFNTBDRTYwQwotOjEwMUM5MDAwODVFMTk4QjQzMjdEODdBODNCQUFDQzg3NzlFQjhFNDk0MQotOjEwMUNBMDAwOEY0MTY5ODFCRTQ5MjU2NkQ1MUQ4MUVBOEU3NkZEMzE1OQotOjEwMUNCMDAwQTdFRTU4RTBBQzNCQUFFOTE0RTM5QkI0NTU3N0JDNkRBMgotOjEwMUNDMDAwQURBODNCQUEwNUQzQzFFQzNBRUM3QTYzM0YzREFBQ0M2MAotOjEwMUNEMDAwRDZFN0VGRUM0OEVDRUE2OENBRDYxOTc1NDlENEMxNUY3QgotOjEwMUNFMDAwOEE5ODVGQTZFNzUwNUVDQUU3QkZCQjRFNjlENzIzMTE0QgotOjEwMUNGMDAwREU0OTg5OUNGQTY2MDMzRUY3OTc2NkVCNUZFRTdBQTZBQgotOjEwMUQwMDAwN0QyRkEzNDE5RDNFMzI4QzdDRTlCQkMzQ0ZGOEMxNUVFMQotOjEwMUQxMDAwNUZERkEzN0ZGMjZBQTIzQzdCMUZDMEFFNzdEQUY1NEM4RgotOjEwMUQyMDAwQkJFRTg5RUIxRUNCNUQzNzNDMEVFQzc3RTAzMUZGNjFGQgotOjEwMUQzMDAwM0FERkRDRUJGRDVFMjQ3MTdGNDc0NTlFNzU1RjYwN0Q3OQotOjEwMUQ0MDAwNzExRDU4RjQxMTc3OTEzREJGNjZGMUQxMUVGNzkwNjU3MgotOjEwMUQ1MDAwOEZDQjU1OTFERjg2NjI5NUUzOURCNjg3ODIyMDEzQ0VBNwotOjEwMUQ2MDAwMkU1MjhGOTA1RDZDODFFOTBFRTI2RjVGNDhFMEJDRDQyQgotOjEwMUQ3MDAwMDEyRkZCQzlBMzFEM0FDQkFGNDIzNUY5M0U0NEM1OTdBRAotOjEwMUQ4MDAwMDNDNjZFMjQ5MzNBQUUxNTUzRkVBOTNCNkExRUVERTBERQotOjEwMUQ5MDAwNzU4Q0RFQjI5RUQ2ODFCODlERkNEREFGNkJCRjVBQ0U4RQotOjEwMURBMDAwRjU3RUJBRjc1NDQyRjE5RkIxOThGMjIwQ0Y3N0U0QkZBNQotOjEwMURCMDAwQUZENEJBRjhDQzdBOUVCN0M4MDMxNDlGQTUwMkM2QjNCNQotOjEwMURDMDAwN0NBRkY4MDk4NUU5NzUyMzA5QjM5MUVGMkY0NUQ1NTIwQQotOjEwMUREMDAwQTIyM0VFQTdGNjA1NEZCMkJDNUE2QjdEMkIzOEFGNTc0NgotOjEwMURFMDAwOTQzRjBFN0NBNjQzQzRBRDZCOTE5NjhBNzQzRUQzOTYwNQotOjEwMURGMDAwRjgwMUFEOUI3MkE1NjFENjYzMTFERjNENEY3RTUyRjhBRAotOjEwMUUwMDAwQUY3QjNDQUJCMjc5QjAxMjM5RjEzQzhEODdBMzkyNDJFMwotOjEwMUUxMDAwRTdBM0NGRDIxQjNCNEU3Q0JCQ0Q3QzgxRTQ4RUYyMzA1RQotOjEwMUUyMDAwNjk3RUZCMUU5MDNERkY0Qjk2MUM5MjFERTY4QjM0RUVBNwotOjEwMUUzMDAwNzU2QjlFMDYyRDE5MjEzQjZDNDhBMDNFNDg2QzNGQUU0OQotOjEwMUU0MDAwM0FCQ0QwMEJCN0JFREFGQTM2NUI4N0I3RjQ1MEQyNDQ0RgotOjEwMUU1MDAwQkQxNkY1RUE3NTVFRUY5M0ZBNzE4RjQ0RjVGNkM0RTFBRAotOjEwMUU2MDAwNjFGQUY2MTJFQkRENTdCNjlCNkZEMkJBNEJEQUUyRkY5RQotOjEwMUU3MDAwNEU3NDdGQkRFQjc2QkUxNzdDQTFGNzM4NUExN0Y3ODRGNgotOjEwMUU4MDAwQTk4RTNGMTAxMEI4RjlFMTg4RTFGMDc3OEIzQTg1N0M5NAotOjEwMUU5MDAwMTY3NTBBQkM3NDJERUFDQzE0REYyRjM1RjhERTM3QzA3NgotOjEwMUVBMDAwREQ4Q0EzNkRGRjM0REE5QkY4RkVBOURBRUNGN0E5NUVBRQotOjEwMUVCMDAwOThBNDdBRDA3Q0VCRjBFRURCQzE3OUREQkVBQTM2M0Y4OAotOjEwMUVDMDAwRjkxRkY0NkYyNUQ0MUZBODMyQzNCOUVCNDgxNTA5M0Q5QgotOjEwMUVEMDAwNEYyRTEyNzkwQkNBQTcyNTczRUU5Mzk3NzZDQUJDOUYzMwotOjEwMUVFMDAwRjYyQUM4OTBFRUY4ODJBMkVFRTY0M0MzRDVGMUZDRjFFMwotOjEwMUVGMDAwOTlDRDdDQkYxODlGNEY1MjhBRTE4QTRFNURDNEU1RTVCQgotOjEwMUYwMDAwMDY5ODE0NkY1NkM1ODFFQ0RCQTc2NUJGQTczQTZBN0JCQwotOjEwMUYxMDAwNTUwRkRGQjc5QzhGOEUxQ0I2QkY0RkYwRjczNzc2NkEzMAotOjEwMUYyMDAwNEM1NzJERjczOEYyMDBFN0UzOUI5QjJGRkRDNEI3REEzRgotOjEwMUYzMDAwRjlGOUE2NUUzMERGODREREI5RjlCNUNBRTJEN0QzQTFERAotOjEwMUY0MDAwMkZGMkZFRTA4Mzc2QjYzMzlGODZGQkM0NzY3NUE3RjA0QQotOjEwMUY1MDAwMkY3MkQwODQ0NDExRjlBODM4MjI0OENBQjNGNzAwRDVBQgotOjEwMUY2MDAwQTE2RDNFQ0I5QUUwQjNBQ0Y1RjA3N0JFMkEwMzEyRDc1MQotOjEwMUY3MDAwMTE1RjEyQ0MxNzM3MUZEMDRGMDBGOTg5MUYzRDdBQTg4NwotOjEwMUY4MDAwOUNGMDY5MkJGNkMzQzI3RjgwMEZEQjA3M0E4NDVDNkM0MAotOjEwMUY5MDAwM0I1RDA3M0YwRDhBRkNCN0YzQkM3MEZCNTNCQjdERDg5QwotOjEwMUZBMDAwQ0EzRkJCOUY0QjVEMDFFMTNGNzQ3MEYwQkRDOEZBRkRCNQotOjEwMUZCMDAwQzI5MUMxNDZDNjA3Nzg3RTI2RTk1RTRDNjc2NTZEMDExMQotOjEwMUZDMDAwRjUyRjc3MUREMTVEM0Y3NEQ3MDlEREY1QzFBQ0RFOThFMwotOjEwMUZEMDAwN0U1QUU3M0JEQUM5RTRDN0YzRTg4QkREMEU1QkY2RDY0MQotOjEwMUZFMDAwREZFQkNGNkI3N0MzNjhFRjI0QkY4MTE2MzM0OTc1QTM0RQotOjEwMUZGMDAwQkRBMUU5MzBFQkNERjEzNzE5MTcyQkNGQ0IwNkUxNEI2MwotOjEwMjAwMDAwNDUxMTcyRUU1QzM0Q0Q3MkVDNkEzNjgxRUE0REMzQkQ4NwotOjEwMjAxMDAwMUJCRTlENEJGNzgxQjZDNDU3M0E1MTRGMEFCNTQ5OTM0MQotOjEwMjAyMDAwRTgwNDIxOTNBNEYzNjc2RDk5RDk5MzBGMzcwRDU4N0U3NwotOjEwMjAzMDAwRTRFREI2Rjg2RUZBOEVBRUFEOTNGQzRGNDVDQzNERDREMAotOjEwMjA0MDAwQkY1MEJGMzU5RjNEMjkzNkVGMkVEQTlFNEUwQTdCNkE4MAotOjEwMjA1MDAwREVDMUY2MzQ1MkQ1QzMzODZCRTRBNzMyMjFBOTJDOEVFOQotOjEwMjA2MDAwQjRFQzY5QTRFNTM0REJCQjZENTc2OURCRkYzNDBCQkIxMwotOjEwMjA3MDAwQTAzQzAyOURERkM1NTUyNkZCOEQ2RjVBRjZBNEEwOUQ5RQotOjEwMjA4MDAwOTAzREY5MkM3QjJBRDZCMkUzMjkzRkRFNEU3Q0M2RTc5MQotOjEwMjA5MDAwNEFENTM0N0Y1N0RDNkNEOTFGRDk1MzkwRUUwRjAzRTMzOAotOjEwMjBBMDAwODAwMUI0M0JDQThCQjhFREFCQjU0NjlDOUI4RkI3MjU3RQotOjEwMjBCMDAwMUVFRTI0N0NCMTY4M0RFN0U1MDdBQUZFQjM4Q0YxOEJFOAotOjEwMjBDMDAwQTVGRjU5QkNEQkM4RTdGOUQ5NDE4RjQxRjZEMDQwMDBFNAotOjEwMjBEMDAwQkEzMTZCMDdGNkJFNTdDRkM4OTA0MUQxQUM5OTkxQjhEMQotOjEwMjBFMDAwQkQ3MUE2OTBEQkQ2OTkwMEI3RTY0QzE5Qjc5MTk5MTA0RgotOjEwMjBGMDAwQjc2RDMzNTc3MkRCM0U1M0M5NkQ3NDA2RURFMDdBQjRBOQotOjEwMjEwMDAwODc5OTZBNkUzQjY3QUVFNUI2NkI2NjE5QjdCMTk5RUIxNgotOjEwMjExMDAwNzk1Q0Y3Q0MwQTZFRDdDRTdDOTREQjlCNjY1QUM0M0NDNAotOjEwMjEyMDAwNzU2MjVGNzlFQzgxQ0E2MDk3QzExRThDMjQxNDkxMUQ4MQotOjEwMjEzMDAwN0NFNjU1RjZFRjlBQ0E3Nzk0NTJBMTU1NUMyN0YyMjlBRQotOjEwMjE0MDAwRDM2QzBGNDc5QTg1QkZFRjBBMEEzOUI5RURFMUVEQjZCNgotOjEwMjE1MDAwQzRBRkYyRDlDMzJDQkU1NTQwMjNGRUFCNjBGREI5RjAyRAotOjEwMjE2MDAwMDNFMjlGREZEMEY3MzZFRTU1QzMyNkVCMTlFMjkzRDM5NwotOjEwMjE3MDAwMjRDRjRCQzUwOUIzMzg3M0IxQ0E3OEQ0QzY5OTIzOEIyMQotOjEwMjE4MDAwMTA2NzU2Njc3MUU2NDA4Qjg4Q0I1MjA3N0MxQ0JGNkQ4OQotOjEwMjE5MDAwOTVDNEZEQjIyQkRCMTNGRkM1RjYwOTIyNEY5NEI4QzVEOQotOjEwMjFBMDAwQUYxMTZFNEU4NTNBQzM0MUNBRUJFRDk1ODFGMjA1ODhCOQotOjEwMjFCMDAwNDMzRUUwNzUyQTcxNzE5RkY1MDJFREY5NTQ0NEY4N0RCNAotOjEwMjFDMDAwN0I3QzAzOUNGNEY0NUMwNDhFRjkzNUZEQjM2NTdFQkYyMwotOjEwMjFEMDAwNTA3QUE5RTdBQ0I3NURGODA1NERGODg1NTQ1NUNGMjA4NgotOjEwMjFFMDAwRDdBNTVEN0VDMTNFNjc5MTFGMEVCRkIwQjRDQkYyMEI4OQotOjEwMjFGMDAwOTY5RDk3NTY4OUYzQjI5NEZDMDJGMjY3NTk5N0VEMTdCMgotOjEwMjIwMDAwOUNFN0FDNjJFMzkwOTg4RDQzMkNCRjEwMTNERjIxNkVFNgotOjEwMjIxMDAwNzc5Q0IzMjg2RTNGRTRFMDYyRDRBM0U1NUQ3OTcwMDg1MwotOjEwMjIyMDAwOUZFNzM5RTc1QzVGNEQ2RDg0N0U0QjEwM0EwMzExNTI5NgotOjEwMjIzMDAwQ0ZFMjE5N0RBRDkxRTdEQzQ5Njk4RDZDMDdDNzk1NzZEMgotOjEwMjI0MDAwQzhDREFGNUNCNDlEODVFQzczQzdFNDczQzczRENFQjYxMwotOjEwMjI1MDAwQjc4MUUzREQ2MjlGRDYzOTc0MUNGNzZGRTZEODVCOTdEMAotOjEwMjI2MDAwMjZDRTIzM0M3RjZFQTI3REJBRURBRDc1QjE5OTg4RTc4RAotOjEwMjI3MDAwNTlFNzI3QkIwNERFRkZGMTFBMEJGNzIyQUUzNDgyOEMzQwotOjEwMjI4MDAwRUZGM0UyODY0RjkyRkM5QUM0RUYzNDFFNDNGRkQzMTE2MgotOjEwMjI5MDAwNEJBNjE0OURFREZDOTMzNEVGRUFFODk0NEM3OUEwMUIxNwotOjEwMjJBMDAwOUI0NzVGQTY5MjA4REFFOUE3QkE5QTJFREQ0RTlCREIyMAotOjEwMjJCMDAwQUM3QURGQ0UzMjcxRDlEOTZBQ0ZBN0ZGMzYyRUIyRUQxNAotOjEwMjJDMDAwQzAzREVFRTE2QTczNDMzRTdFM0M2M0YxQTM2RkQwRDMyMQotOjEwMjJEMDAwNEQxN0ZFNkNCRDM4QUUyQzY1RkM5M0M3REY5QUM2NjUwMgotOjEwMjJFMDAwRjFCNzE3ODYzRjhFRTMzOTQ4NzIzRjA3RkUxOENFMjdCNQotOjEwMjJGMDAwRkZGOUYwQzc3OEQ3MkNGRTE4MjMzOUI1RDYwQkZDRjFCRgotOjEwMjMwMDAwNEMxNzlDMzNCRUI5NjQ1QzExMzlDOTdDQkI1NDVDRjE3OQotOjEwMjMxMDAwNTBEN0I5NzFDNUI3QkI4NERGNTRCNDY5RjYxRkM1OTdGMAotOjEwMjMyMDAwODgyQkRDN0UwMkYxQzMzRjMxN0YwQzcxRUVEQUJGMzdDMAotOjEwMjMzMDAwRTEwQjk0MzlFNzE3RkE5OUVGRDMzOEMyMEQ3NDc5RUNCMQotOjEwMjM0MDAwNDhCMDJEMjlCMTFEQzQ5RkEwRTdBM0U2MTJENkEzQ0JBOAotOjEwMjM1MDAwNjUwRjg4MTM3RkQ4OTVEMzNGOUY1RDVDRjBCOEM5NEQ1QQotOjEwMjM2MDAwOUMwN0I0RUI5OUJGMEYxNDM3NTA3RTY0QTc1RkI0NUYyRQotOjEwMjM3MDAwMkEyODNFNDJFRDU4QUZDODQzRUZCN0YyN0U2MzVFRTBENQotOjEwMjM4MDAwRkE0MUJGNTQ2MDFDOTFFOEJCQzU2OTkxNkZFRjU5NEU4QgotOjEwMjM5MDAwNzlDRkRGNzZEOUJGOTdFQ0I5ODE3Rjc3MDM3RkVEQTgzRQotOjEwMjNBMDAwOUJDRUJGMkU3MUNGOTc0ODdEQzhGN0MxQUIzNENFQTM2QgotOjEwMjNCMDAwNUI3Q0ExNzQxMDlERDM0M0NCRkM4QzAzODczQThFMUVBQgotOjEwMjNDMDAwQkE5M0YyMzIxRDIyMEY4NjBBNTFGRDcxM0E3RjExRDY1RgotOjEwMjNEMDAwMzRFNzlDMEIzMjI4QTcyOTNGM0Y0ODc3REIxOTc0NkMwMAotOjEwMjNFMDAwMTBGN0EwMzVGMUJFMzQ4QUYxN0I2RUREQ0VCOERCRDFCQgotOjEwMjNGMDAwMDcyQjVGNkFGRjNFQjA3MENEN0FEQjRFOTg4RTZEMjc1QgotOjEwMjQwMDAwODU0NTkzOUE5NkUzNkYwNjdCOURCRkZGNzZCNzcyRUQ4NQotOjEwMjQxMDAwN0Q3MUJBOUIzQzVBRUZFMUZBQzVCRTFBMjU0MEY1OTQ4RQotOjEwMjQyMDAwN0Q3NTIyQ0IzRTVDRTM4OUU1QUI4RjVGMUI5MzFDNzkwNgotOjEwMjQzMDAwNkRCQkJFNUQxMDExRUI5QTZGQkUwMUQ3N0E3QzdBREM2MgotOjEwMjQ0MDAwMjQzRDFERDZEMzcxRkUxRDcyNURCOTk0Q0NDOTNCN0I3MgotOjEwMjQ1MDAwQUQ3OTg2MjQyM0QzOEFDQzFDMkExMkU3ODVBRjJBMDlCQQotOjEwMjQ2MDAwMUVDMjAzQTFFREQ3MTM4RkZENTUzRDcwM0E0OEY3MzdEMwotOjEwMjQ3MDAwOTJGMDA2QjZBMTUyMzU5MUNFRTM4Nzk2Qzc4NDFGMUExMwotOjEwMjQ4MDAwRjI0RUM2NTg4RUQ3NzkzOERGOEI5ODJBNkY5RTZDNjFEMgotOjEwMjQ5MDAwNENGOEU5RTE5QTIzQkNCRTI0RjI4NUVBNTVFRTcxMDFCRAotOjEwMjRBMDAwNkI1QzgxM0FDQUY1OEU3REI1REZENDY5NUZGQkU4MDdDNgotOjEwMjRCMDAwMzc1N0EwN0NCQkZGRkJDMURENDFEMkRGQkIzOTRGMzNCNwotOjEwMjRDMDAwNDZGOTFBRjRBNzA1RDcxQzhCQjUyMURERkQzNzJBMUE2QQotOjEwMjREMDAwRURBMzQzQUVEQTRERUIxQThEODJDMTc1MDA5NzVFOTQ4MQotOjEwMjRFMDAwQUM1MTAyNUMyRjM1M0Q3QzA3RDRBRDI3MDVDNTU0MTk4RQotOjEwMjRGMDAwMjEzRDlDRjIwQkZEMTA3QTE2QjRGNEU2ODAyMUVBM0VGMQotOjEwMjUwMDAwMDdBMkEyN0U2NUNCMkZFNzdEODBFQUQyNjdBMzBBQzcyOAotOjEwMjUxMDAwMjU3NkZEOEE2QTNERjk3MERDN0VDQjJFRkIyREJCNDQwRgotOjEwMjUyMDAwOUNDQTc1ODdEOUY3OEIzMzdDRUVFQzZGQzk4NEU5OUMyNAotOjEwMjUzMDAwMjlEMkZDNDY4Q0U4MUU3NUFFNkI2RkQzOTQwMzk3MUNCMgotOjEwMjU0MDAwNThGMUEyREZCQThDRUY1QTlGRDAyRkU1QTk1RkIwM0ZCOAotOjEwMjU1MDAwMkQ1MkE2RjhCQzJBNUE3RDhBRkRFOTdERDY3QUJBOUExMAotOjEwMjU2MDAwODFGNzU5QkNEMkYyREI3MTMzMjJFOEZEQTVDMzBGNDhENQotOjEwMjU3MDAwRDdCQzZBN0FFOTVDQjg1NURDNDlGMDM2OEJCQTVEODEyNAotOjEwMjU4MDAwMEE0NjA2Rjk3Q0EwMjJDOEY3OUFDQTU2NUE3NUJBNzU0NwotOjEwMjU5MDAwRTI1RTg1N0QyRkJDMjJFRUJDMTcxNjgyOUNERjA5NTRCQgotOjEwMjVBMDAwOEI3QjU5Qjk3RDkwMzc5RUYzRkVEQkNFNUYxRTdFRUVBRQotOjEwMjVCMDAwNDQwRUJEMkZDNTlDRjdDN0NGRjdGREVGN0JEM0NGOUQ1MgotOjEwMjVDMDAwNDBGRDFBMzVDRTZEODdCNkJDRUVFRDZENjY3RUQ5RkE0QwotOjEwMjVEMDAwNjhFQjY3ODhCNkQ4MzhGRkY3NjNBMTc4REVGQUNDMzFBQwotOjEwMjVFMDAwQ0IwRUNFRTdDRkNBN0NGMTFFQzI0NUY3QUQ4OTNCRjBEQQotOjEwMjVGMDAwRDEwMzk2N0QzRTEwMTNGOTRGNzVGMTE5Q0VBQjFEQjQ4MgotOjEwMjYwMDAwRUU1RjFEMENDMDg2RUZFNDk5MzcxMzUzNzk3QzU2RkZCQgotOjEwMjYxMDAwOUQzOEMyRDY5RkI5N0MzODBGOEU1ODEzQjVFMjEwNEY0MwotOjEwMjYyMDAwODBDRUYxNTFBM0VENTlBQTQ3QkVBQkE5M0FFNEY4MDExNwotOjEwMjYzMDAwNzc5RUREQzYxMTA1REQ3NkJFRUYzREM2NTEyNUMxMjk2OQotOjEwMjY0MDAwQTFCNzJCOUQ3MTg3MUIwNzBDMkJFOTBENjRFN0MzNzVBMAotOjEwMjY1MDAwQUFFRDlGRDg4RjVDRkQ2Q0UxRDc5MzhDOTM5MjUyRUVEQwotOjEwMjY2MDAwQjlCOTNGNzMwN0QzMERCOUYyRUM1MEVFRkNERENBRkVFOQotOjEwMjY3MDAwMThGMDdBNDJGQTk5MjlCQTY3MUU4QTI5RTJERUQ2QThBQQotOjEwMjY4MDAwMDlCOUY3NkVDNjNDQkY5QzM5NjVGREZCMDMxQjc3QjBFQgotOjEwMjY5MDAwM0VFRjlGRTJERkQzQzAxNzIwNzdGRUJEMUZEQkNDQkYyQwotOjEwMjZBMDAwMkYzOTlGREM2N0ZEN0E1ODc1RTRERjJFRDYyRUZFMjU4NAotOjEwMjZCMDAwNjZENUI3MDMxMDIwQkIzODBCRjc3MEREMUQ0NjYzOEU1RgotOjEwMjZDMDAwRjM4ODJCMTAwQkY4QzgxNjdGQjg0RDY1OTU3NTc0NDlDMwotOjEwMjZEMDAwNTk3QjgxNzY1MUQ3M0Y5Qjk4RjU4QjBBN0Q2NzU4OUYzMAotOjEwMjZFMDAwNTVEMkFEMEE4QUM3MjFDM0JGNTNCNEVGOTU5RTg1NUYwQgotOjEwMjZGMDAwRjJCQ0M5QTcyNDY5MTY2NzVEODlFMTNFRkRGRTcxMjkxOAotOjEwMjcwMDAwQTk5Q0U2QTFENkJERkUyNTYwRjBGMzFBODg3MzdCMzUzRgotOjEwMjcxMDAwRjQ3MDVCMDdBM0RDNUUwMzkzRENENkMzMTRCNzBENzBDMwotOjEwMjcyMDAwODZEQjE1QTBDQjM0QzlGNTYwQ0FDMDU3MzUxM0RDQkZCMgotOjEwMjczMDAwMDE5MkRDQjY0MEUyRkQ1M0I4RkVGRThBRUQyQjM4NUUxNgotOjEwMjc0MDAwQjRGRDg3QzUyNzlCQ0Y3OUVDOUQ3MUE0Q0QwRjlCRUY3RQotOjEwMjc1MDAwRkY0OENFRkEwMkVDMzkxNTEyN0VCODdENjU4NkY1M0M0RAotOjEwMjc2MDAwMTgxNDM4RDk4RUFGNkQzQUYzRTFERUNCODVDRjZDNUNBRgotOjEwMjc3MDAwRjk3RkU3QURCMTQxRTA0ODAwMDAwMDAwMDAwMDAwMDAzMwotOjEwMjc4MDAwMDAwMDAwMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDBGMQotOjEwMjc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4MDAwMDAwMDAxMQotOjEwMjdBMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAxOQotOjEwMjdCMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTBFOQotOjEwMjdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMQotOjEwMjdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQotOjEwMjdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQotOjEwMjdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQotOjEwMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOAotOjEwMjgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAotOjEwMjgyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAotOjEwMjgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAotOjEwMjg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OAotOjEwMjg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OAotOjEwMjg2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OAotOjEwMjg3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OAotOjEwMjg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OAotOjEwMjg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOAotOjEwMjhBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOAotOjEwMjhCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOAotOjEwMjhDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAotOjEwMjhEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAotOjEwMjhFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MDAwMDAxMDAwMDA0OAotOjEwMjhGMDAwMDAwMDAwMDgwMDAwOTAwODAwMTAwMDAwMDAwMDAwMDIyNgotOjEwMjkwMDAwMDAwMDkwMDAwMDEwMDAwMDAwMDAwMDEwMDAwMDlEQThEMgotOjEwMjkxMDAwMDAwMDAwMDAwMDAwMDAwODgwMDAwMDAwMDAwMDAwMDAyRgotOjEwMjkyMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNwotOjEwMjkzMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxQTBFNgotOjEwMjk0MDAwMDAwMDAwMDAwMDAwMDAwODAwMDA5M0MwMDAwMTAwMDQyNwotOjEwMjk1MDAwMDAwMDAwMDEwMDAwOTNDODAwMDAwMDAwMDAwMDAwMDIxOQotOjEwMjk2MDAwMDAwMDkzRDAwMDAwMDAwMDAwMDAwMDA4MDAwMDkzRDQ5NQotOjEwMjk3MDAwMDAwMDAwMDAwMDAwMDAwMjAwMDA5NDk4MDAwMDAwMDAyOQotOjEwMjk4MDAwMDAwMDAwMDgwMDAwOTNEODAwMDgwMDAwMDAwMDAwMDhDNAotOjEwMjk5MDAwMDAwMDlCMzgwMDQwMDAwMDAwMDAwMDQwMDAwMDk0MTgzOAotOjEwMjlBMDAwMDAwODAwMDAwMDAwMDAwODAwMDA5NDU4MDAwODAwMDAyMwotOjEwMjlCMDAwMDAwMDAwMDgwMDAwOTRBODAwQzgwMDAwMDAwMDAwOTg3MwotOjEwMjlDMDAwMDAwMDk2MzgwMDk4MDAwMDAwMDAwMDI4MDAwMDk2Nzg2QgotOjEwMjlEMDAwMDA5ODAwMDAwMDAwMDAyODAwMDBDMDAwMDU0MDAwMzAwMgotOjEwMjlFMDAwMDAwMDA1NDAwMDAwQ0IyMDAwMDgwMDAwMDAwMDAwMDFBRQotOjEwMjlGMDAwMDAwMENCMjEwMDA4MDAwMDAwMDAwMDAxMDAwMDIwMDhCQQotOjEwMkEwMDAwMDAxMDAwMDAwMDAwMDAxMDAwMDAyMDAwMDAwMDAwMDA4NgotOjEwMkExMDAwMDAwMDAwMDgwMDAwOUQ2MDAwMDgwMDAwMDAwMDAwMDJBNwotOjEwMkEyMDAwMDAwMDlEQTAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDA2OAotOjEwMkEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgotOjEwMkE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgotOjEwMkE1MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA3NgotOjEwMkE2MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBFNgotOjEwMkE3MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgotOjEwMkE4MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA0NgotOjEwMkE5MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBCNgotOjEwMkFBMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgotOjEwMkFCMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAxNgotOjEwMkFDMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDA4NgotOjEwMkFEMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgotOjEwMkFFMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgotOjEwMkFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgotOjEwMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQotOjEwMkIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQotOjEwMkIyMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAyNQotOjEwMkIzMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQotOjEwMkI0MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQotOjEwMkI1MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBGNQotOjEwMkI2MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQotOjEwMkI3MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQotOjEwMkI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQotOjEwMkI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQotOjEwMkJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQotOjEwMkJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQotOjEwMkJDMDAwMDAwMDAwMDAwMDAwMTJDODAwODAwMDAwMDAwMDAwODAyQgotOjEwMkJEMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDA1NAotOjEwMkJFMDAwMDcxMDAwMDAwMDAwMDcxMDAwMDAxRUM4MDAwMDAwMDBEMQotOjEwMkJGMDAwMDAwMDAwMDgwMDAwQUVDMDAwMDgwMDAwMDAwMDAwMDg0RgotOjEwMkMwMDAwMDAwMEFFNDAwMDA4MDAwMDAwMDAwMDA4MDAwMEFFODA5OAotOjEwMkMxMDAwMDAwODAwMDAwMDAwMDAwODAwMDAyMDA4MDAxMDAwMDA2QwotOjEwMkMyMDAwMDAwMDAwMTAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDg2QwotOjEwMkMzMDAwMDAwMEEwMTAwNzEwMDA0MDAwMDAwMDQwMDAwMEFGNDA1RQotOjEwMkM0MDAwMDAwODAwMDAwMDAwMDAwMTAwMDBBRjQxMDAwODAwMDA4MwotOjEwMkM1MDAwMDAwMDAwMDEwMDAwMUVEMDAwMDAwMDAwMDAwMDAwMDE4NAotOjEwMkM2MDAwMDAwMDFFRDgwMDAwMDAwMDAwMDAwMDAyMDAwMDFFREE3NAotOjEwMkM3MDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAxMkIwMDAwODAwMDA4OAotOjEwMkM4MDAwMDAwMDAwMDg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQwotOjEwMkM5MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAzNAotOjEwMkNBMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBBNAotOjEwMkNCMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NAotOjEwMkNDMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwNAotOjEwMkNEMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDA3NAotOjEwMkNFMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAotOjEwMkNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAotOjEwMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMwotOjEwMkQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMwotOjEwMkQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAyMwotOjEwMkQzMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAxMwotOjEwMkQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MwotOjEwMkQ1MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA3MwotOjEwMkQ2MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBFMwotOjEwMkQ3MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMwotOjEwMkQ4MDAwMDAwMEIwMDAwMDE4MDAwMDAwMDAwMDE4MDAwMEIzMDBCMAotOjEwMkQ5MDAwMDA0MDAwMDAwMDAwMDA0MDAwMDBCMzAwMDA0MDAwMDJCRQotOjEwMkRBMDAwMDAwMDAwMDEwMDAwQjMwMTAwNDAwMDAyMDAwMDAwMDAyQwotOjEwMkRCMDAwMDAwMDgwMDAwMDQwMDAwMDAwMDAwMDQwODAwMDAwMDA5MwotOjEwMkRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwODAwNDAzQgotOjEwMkREMDAwMDAwMDAwMDQwMDAwODAwNDAwMDgwMDQwMDAwMDAwMDQxRgotOjEwMkRFMDAwMDAwMEJCMDAwMDI4MDAwMDAwMDAwMDI4MDAwMEJDNDBEQwotOjEwMkRGMDAwMDAxMDAwMDAwMDAwMDAxMDAwMDA4ODAwMDA4MDAwMDBBQgotOjEwMkUwMDAwMDAwMDAwODAwMDAwODgwMDAwMDgwMDgwMDAwMDAwMDIzMAotOjEwMkUxMDAwMDAwMDhDMDAwMDIwMDAwMDAwMDAwMDIwMDAwMDIwMDhCRQotOjEwMkUyMDAwMDAxMDAwMDAwMDAwMDAxMDAwMDAyMDAwMDAwMDAwMDA2MgotOjEwMkUzMDAwMDAwMDAwMDgwMDAwMTEwODAwMDgwMDAwMDAwMDAwMDg2MQotOjEwMkU0MDAwMDAwMDExNjgwMDA4MDAwMDAwMDAwMDA4MDAwMDExQTg0MAotOjEwMkU1MDAwMDAwODAwMDAwMDAwMDAwODAwMDAxMjcwMDAwODAwMDBEOAotOjEwMkU2MDAwMDAwMDAwMDEwMDAwMTI3MTAwMDgwMDAwMDAwMDAwMDFENQotOjEwMkU3MDAwMDAwMDhEMDAwMDEwMDAwNDAwMDAwMDA0MDAwMDEzMjA3QQotOjEwMkU4MDAwMDAzMDAwMTgwMDAwMDAxMDAwMDAxMzI4MDAzMDAwMTg2NwotOjEwMkU5MDAwMDAwMDAwMDI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAotOjEwMkVBMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExRThBOQotOjEwMkVCMDAwMDAwMDAwMDAwMDAwMDAwMTgwMDAwMDAwMDAwMDAwMDA5MQotOjEwMkVDMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MgotOjEwMkVEMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDBGMgotOjEwMkVFMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDA2MgotOjEwMkVGMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgotOjEwMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQotOjEwMkYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQotOjEwMkYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQotOjEwMkYzMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA5MQotOjEwMkY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQotOjEwMkY1MDAwMDAwMDAwMDAwMDAwODMwODAwODAwMDAwMDAwMDAwODBFNgotOjEwMkY2MDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDgzOAotOjEwMkY3MDAwMDAxMDAwMDAwMDAwMDAxMDAwMDAyMDAwMDAwMDAwMDAxMQotOjEwMkY4MDAwMDAwMDAwMDgwMDAwOEQxMDAwMDgwMDAwMDAwMDAwMDg4QwotOjEwMkY5MDAwMDAwMDhENzAwMDA4MDAwMDAwMDAwMDA4MDAwMDg0NTA1MAotOjEwMkZBMDAwMDQ2MDAwMjgwMDAwMDQ2MDAwMDA4RUEwMDAwODAwMDBGQgotOjEwMkZCMDAwMDAwMDAwMDEwMDAwOEVBMTAwMDgwMDAwMDAwMDAwMDFEOAotOjEwMkZDMDAwMDAwMDg0MDgwMDA4MDAwMDAwMDAwMDA4MDAwMDg0NDg5OQotOjEwMkZEMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDA4REY0MDAwODAwMDA2NwotOjEwMkZFMDAwMDAwMDAwMDIwMDAwOERGNjAwMDgwMDAwMDAwMDAwMDI1MgotOjEwMkZGMDAwMDAwMDhFMDQwMDEwMDAwMDAwMDAwMDA0ODAwMDAwMDBBQgotOjEwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDA0MAotOjEwMzAxMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAotOjEwMzAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAotOjEwMzAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAotOjEwMzA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAotOjEwMzA1MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA3MAotOjEwMzA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAotOjEwMzA3MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAotOjEwMzA4MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA0MAotOjEwMzA5MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBCMAotOjEwMzBBMDAwMDAwMDAwMDAwMDAwMzAwMDAwNDAwMDAwMDAwMDAwMDhBOAotOjEwMzBCMDAwMDAwMDMwMDgwMDQwMDAwMDAwMDAwMDI4MDAwMDMzOTBBRAotOjEwMzBDMDAwMDFDMDAwMTAwMDAwMDAwODAwMDAzMjAwMDAyMDAwMDBENQotOjEwMzBEMDAwMDAwMDAwMjAwMDAwMzcyMDAwMDAwMDAwMDAwMDAwMDg3MQotOjEwMzBFMDAwMDAwMDEwMjAwNjIwMDAzODAwMDAwMDA4MDAwMEEwMDBBQQotOjEwMzBGMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzRUE5MDAwMDAwMDBDOQotOjEwMzEwMDAwMDAwMDAwMDEwMDAwM0VDODAwMDAwMDAwMDAwMDAwMDJCNgotOjEwMzExMDAwMDAwMDFDNDAwMEUwMDAwODAwMDAwMDA4ODAwMDAwMDBFMwotOjEwMzEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwODAwMDA1NwotOjEwMzEzMDAwMDAwMDAwMDEwMDAwNDAwMTAwMDgwMDAwMDAwMDAwMDE0NAotOjEwMzE0MDAwMDAwMDQwNDAwMDA4MDAwNDAwMDAwMDAyMDAwMDQwNjA1MQotOjEwMzE1MDAwMDAwODAwMDQwMDAwMDAwNDAwMDA0MDAwMDAwODAwMDAxNwotOjEwMzE2MDAwMDAwMDAwMDQwMDAwNDAwNDAwMDgwMDAwMDAwMDAwMDQwQgotOjEwMzE3MDAwMDAwMDQwNDAwMDAwMDAwMDAwMDAwMDA4MDAwMDQwNDgzRgotOjEwMzE4MDAwMDAwMDAwMDAwMDAwMDAwODAwMDA4MDAwMDAwMDAwMDBCNwotOjEwMzE5MDAwMDAwMDAwMTAwMDAwNTA0MDAwMDEwMDA0MDAwMDAwMDE4OQotOjEwMzFBMDAwMDAwMDUwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDUwMDg1NwotOjEwMzFCMDAwMDAxMDAwMDAwMDAwMDAwNDAwMDA1MDBDMDAxMDAwMDA4RgotOjEwMzFDMDAwMDAwMDAwMDEwMDAwNTJDNzAwMDAwMDAwMDAwMDAwMDFFNAotOjEwMzFEMDAwMDAwMDUyQzYwMDAwMDAwMDAwMDAwMDAxMDAwMDMwMDBBNgotOjEwMzFFMDAwMDAzMDAwMTgwMDAwMDAwNDAwMDAzMDA0MDAzMDAwMTgxNwotOjEwMzFGMDAwMDAwMDAwMDQwMDAwMzAwODAwMzAwMDE4MDAwMDAwMDI0OQotOjEwMzIwMDAwMDAwMDMwMEEwMDMwMDAxODAwMDAwMDAyMDAwMDMwMENGRQotOjEwMzIxMDAwMDAzMDAwMTgwMDAwMDAwMTAwMDAzMDBEMDAzMDAwMThFMAotOjEwMzIyMDAwMDAwMDAwMDEwMDAwMzAwRTAwMzAwMDE4MDAwMDAwMDExNgotOjEwMzIzMDAwMDAwMDMwMTAwMDMwMDAxODAwMDAwMDA0MDAwMDMwMTRCRQotOjEwMzI0MDAwMDAzMDAwMTgwMDAwMDAwNDAwMDA1MDAwMDEwMDAwODA2MQotOjEwMzI1MDAwMDAwODAwMDQwMDAwNTAwNDAxMDAwMDgwMDAwODAwMDQ4MQotOjEwMzI2MDAwMDAwMDAwMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDUwNjg5QwotOjEwMzI3MDAwMDEwMDAwODAwMDAwMDAwMTAwMDA1MDY5MDEwMDAwODA5MgotOjEwMzI4MDAwMDAwMDAwMDEwMDAwNTA2QzAxMDAwMDgwMDAwMDAwMDJGRQotOjEwMzI5MDAwMDAwMDUwNkUwMTAwMDA4MDAwMDAwMDAyMDAwMDUwNzAyRAotOjEwMzJBMDAwMDEwMDAwODAwMDAwMDAwNDAwMDA1MDc0MDEwMDAwODA1NAotOjEwMzJCMDAwMDAwMDAwMDQwMDAwNTA2NjAxMDAwMDgwMDAwMDAwMDJEMQotOjEwMzJDMDAwMDAwMDUwNjQwMTAwMDA4MDAwMDAwMDAxMDAwMDUwNjAxOAotOjEwMzJEMDAwMDEwMDAwODAwMDAwMDAwMjAwMDA1MDYyMDEwMDAwODAzOAotOjEwMzJFMDAwMDAwMDAwMDIwMDAwNTA1MDAxMDAwMDgwMDAwMDAwMDRCNwotOjEwMzJGMDAwMDAwMDUwNTQwMTAwMDA4MDAwMDAwMDA0MDAwMDUwNThGRAotOjEwMzMwMDAwMDEwMDAwODAwMDAwMDAwNDAwMDA1MDVDMDEwMDAwODAwQgotOjEwMzMxMDAwMDAwMDAwMDQwMDAwNTA3QzAxMDAwMDgwMDAwMDAwMDE1QgotOjEwMzMyMDAwMDAwMDUwN0QwMTAwMDA4MDAwMDAwMDAxMDAwMDQwMThGNgotOjEwMzMzMDAwMDAxMDAwMDAwMDAwMDAwNDAwMDA0MDkwMDAxMDAwMDA5OQotOjEwMzM0MDAwMDAwMDAwMDQwMDAwNDA5ODAwMTAwMDAwMDAwMDAwMDQ4RAotOjEwMzM1MDAwMDAwMDQxMTAwMDAwMDAwMDAwMDAwMDAyMDAwMDQxMTJDNwotOjEwMzM2MDAwMDAwMDAwMDAwMDAwMDAwMjAwMDA0MTE0MDAwMDAwMDAwNgotOjEwMzM3MDAwMDAwMDAwMDIwMDAwNDExNjAwMDAwMDAwMDAwMDAwMDJGMgotOjEwMzM4MDAwMDAwMDYwNDAwMDA4MDAwMDAwMDAwMDAyMDAwMDYwNDJGMQotOjEwMzM5MDAwMDAwODAwMDAwMDAwMDAwMjAwMDA2MDQ0MDAwODAwMDA3NwotOjEwMzNBMDAwMDAwMDAwMDQwMDAwNjA4MDAwMDgwMDAwMDAwMDAwMDgyOQotOjEwMzNCMDAwMDAwMDYwQzAwMDQwMDAwODAwMDAwMDA4MDAwMDYwMDAzRAotOjEwMzNDMDAwMDAwODAwMDAwMDAwMDAwMjAwMDA2MDAyMDAwODAwMDA4OQotOjEwMzNEMDAwMDAwMDAwMDEwMDAwNjAwNDAwMDgwMDAwMDAwMDAwMDI3RQotOjEwMzNFMDAwMDAwMDYzNDAwMDA4MDAwMDAwMDAwMDA4MDAwMDYzODA0NwotOjEwMzNGMDAwMDAwODAwMDAwMDAwMDAwNDAwMDA2Mzg0MDAwODAwMDBEMgotOjEwMzQwMDAwMDAwMDAwMDEwMDAwNjNDMDAwMDgwMDAwMDAwMDAwMDI4RQotOjEwMzQxMDAwMDAwMDYzQzQwMDA4MDAwMDAwMDAwMDAyMDAwMDY0MDAxNwotOjEwMzQyMDAwMDAwODAwMDAwMDAwMDAwNDAwMDA3MDAwMDAxMDAwMDAxMAotOjEwMzQzMDAwMDAwMDAwMDQwMDAwNzAwNDAwMTAwMDAwMDAwMDAwMDQwMAotOjEwMzQ0MDAwMDAwMDcwMDgwMDEwMDAwMDAwMDAwMDA0MDAwMDcwMDA4MAotOjEwMzQ1MDAwMDAwODAwMDAwMDAwMDAwMjAwMDA3MDAyMDAwODAwMDBFOAotOjEwMzQ2MDAwMDAwMDAwMDEwMDAwNzAwNDAwMDgwMDAwMDAwMDAwMDJERAotOjEwMzQ3MDAwMDAwMDcwNDAwMDA4MDAwMDAwMDAwMDAyMDAwMDcwNDRERQotOjEwMzQ4MDAwMDAwODAwMDAwMDAwMDAwMjAwMDA3MDQ2MDAwODAwMDA3NAotOjEwMzQ5MDAwMDAwMDAwMDIwMDAwNzY0ODAwMDgwMDAwMDAwMDAwMDg1QwotOjEwMzRBMDAwMDAwMDcwODAwMDA4MDAwMDAwMDAwMDAyMDAwMDcwODQyRQotOjEwMzRCMDAwMDAwODAwMDAwMDAwMDAwMjAwMDA3Njg4MDAwODAwMDBGQwotOjEwMzRDMDAwMDAwMDAwMDgwMDAwODA0MDAwMDgwMDAwMDAwMDAwMDEyQgotOjEwMzREMDAwMDAwMDgwNDEwMDA4MDAwMDAwMDAwMDAxMDAwMDgwNDI2MAotOjEwMzRFMDAwMDAwODAwMDAwMDAwMDAwMTAwMDA4MDQzMDAwODAwMDAwOAotOjEwMzRGMDAwMDAwMDAwMDEwMDAwODAwMDAwMDgwMDAwMDAwMDAwMDI0MQotOjEwMzUwMDAwMDAwMDgwMDIwMDA4MDAwMDAwMDAwMDAxMDAwMDgwMDRBQwotOjEwMzUxMDAwMDAwODAwMDAwMDAwMDAwMjAwMDA4MEMwMDAwODAwMDA1OQotOjEwMzUyMDAwMDAwMDAwMDIwMDAwODBDMjAwMDgwMDAwMDAwMDAwMDI0RAotOjEwMzUzMDAwMDAwMDgwQzQwMDA4MDAwMDAwMDAwMDAyMDAwMDgwODAzRAotOjEwMzU0MDAwMDAwODAwMDAwMDAwMDAwMTAwMDA4MDgxMDAwODAwMDA2OQotOjEwMzU1MDAwMDAwMDAwMDEwMDAwODA4MjAwMDgwMDAwMDAwMDAwMDE1RgotOjEwMzU2MDAwMDAwMDgwODMwMDA4MDAwMDAwMDAwMDAxMDAwMDgwODQ0QgotOjEwMzU3MDAwMDAwODAwMDAwMDAwMDAwMTAwMDA4MDg1MDAwODAwMDAzNQotOjEwMzU4MDAwMDAwMDAwMDEwMDAwODA4NjAwMDgwMDAwMDAwMDAwMDEyQgotOjEwMzU5MDAwMDAwMDYwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDYwMDI1RgotOjEwMzVBMDAwMDAwODAwMDAwMDAwMDAwMTAwMDA2MDA0MDAwODAwMDBBNgotOjEwMzVCMDAwMDAwMDAwMDIwMDAwNjA0MjAwQzAwMDE4MDAwMDAwMDI4RAotOjEwMzVDMDAwMDAwMDYwNDAwMEMwMDAxODAwMDAwMDAyMDAwMDYwNENENQotOjEwMzVEMDAwMDBDMDAwMTgwMDAwMDAwODAwMDA2MDQ0MDBDMDAwMTg4RgotOjEwMzVFMDAwMDAwMDAwMDgwMDAwNjA1NzAwQzAwMDE4MDAwMDAwMDE0MwotOjEwMzVGMDAwMDAwMDYwNTQwMEMwMDAxODAwMDAwMDAyMDAwMDYwNTY4NwotOjEwMzYwMDAwMDBDMDAwMTgwMDAwMDAwMTAwMDA2NjQwMDAwODAwMDAzMwotOjEwMzYxMDAwMDAwMDAwMDgwMDAwNjY4MDAwMDgwMDAwMDAwMDAwMDhBQwotOjEwMzYyMDAwMDAwMDY2QzAwMDA4MDAwMDAwMDAwMDA4MDAwMEQ5NDI0OQotOjEwMzYzMDAwMDAxODAwMDAwMDAwMDAwMjAwMDBERTQwMDAwMDAwMDA1MgotOjEwMzY0MDAwMDAwMDAwMDAwMDAwRTAwMDAwMDAwMDAwMDAwMDAwMDQ5NgotOjEwMzY1MDAwMDAwMERENDAwMDAwMDAwMDAwMDAwMDA0MDAwMERENDQyOAotOjEwMzY2MDAwMDAwMDAwMDAwMDAwMDAwNDAwMDBERDQ4MDAwMDAwMDAzMQotOjEwMzY3MDAwMDAwMDAwMDQwMDAwREQ0QzAwMDAwMDAwMDAwMDAwMDQxOQotOjEwMzY4MDAwMDAwMERENTAwMDAwMDAwMDAwMDAwMDA0MDAwMERENTREOAotOjEwMzY5MDAwMDAwMDAwMDAwMDAwMDAwNDAwMDBERDU4MDAwMDAwMDBGMQotOjEwMzZBMDAwMDAwMDAwMDQwMDAwREQ0MDAwMDAwMDAwMDAwMDAwMjBEOQotOjEwMzZCMDAwMDAwMERBMDAwMDAwMDAwMDAwMDAwMDA0MDAwMERBMDA1MgotOjEwMzZDMDAwMDAwMDAwMDAwMDAwMDA2ODAwMDBCQjYwMDAwMDAwMDA3NwotOjEwMzZEMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDQxNgotOjEwMzZFMDAwMDAwMEIwQzAwMDAwMDAwMDAwMDAwMDA0MDAwMEIwQzRGMgotOjEwMzZGMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDBCMEM4MDAwMDAwMDA0RQotOjEwMzcwMDAwMDAwMDAwMDQwMDAwQjBDMDAwMDAwMDAwMDAwMDAwMTAzNQotOjEwMzcxMDAwMDAwMEQ2QjAwMDAwMDAwMDAwMDAwMDA0MDAwMEQ2QjQ5NQotOjEwMzcyMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDBENkI4MDAwMDAwMDAwNwotOjEwMzczMDAwMDAwMDAwMDQwMDAwRDZCQzAwMDAwMDAwMDAwMDAwMDRFRgotOjEwMzc0MDAwMDAwMEQ2QjAwMDAwMDAwMDAwMDAwMDEwMDAwMEQzNDhDOAotOjEwMzc1MDAwMDAwMDAwMDAwMDAwMDAwODAwMDBEMzU4MDAwMDAwMDAzNgotOjEwMzc2MDAwMDAwMDAwODAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDBDOQotOjEwMzc3MDAwMDAwMEQzNTgwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAxNgotOjA4Mzc4MDAwMDYwMjA1MDAwMDAwMDAwMDM0Ci06MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvYm54MngvYm54MngtZTFoLTYuMi45LjAuZncuaWhleCBiL2Zpcm13YXJlL2JueDJ4L2JueDJ4LWUxaC02LjIuOS4wLmZ3LmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmExY2U1MwotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL2JueDJ4L2JueDJ4LWUxaC02LjIuOS4wLmZ3LmloZXgKQEAgLTAsMCArMSwxMzE5MiBAQAorOjEwMDAwMDAwMDAwMDRGNDgwMDAwMDA2ODAwMDAwNzBDMDAwMDRGQjhENworOjEwMDAxMDAwMDAwMDFFRDQwMDAwNTZDODAwMDAwMDk0MDAwMDc1QTAyNworOjEwMDAyMDAwMDAwMDlGNEMwMDAwNzYzODAwMDAwMENDMDAwMTE1ODhDRAorOjEwMDAzMDAwMDAwMERDNTgwMDAxMTY1ODAwMDAwMDk0MDAwMUYyQjhERQorOjEwMDA0MDAwMDAwMDQwMEMwMDAxRjM1MDAwMDAwMEE0MDAwMjMzNjBFNworOjEwMDA1MDAwMDAwMEY0MjQwMDAyMzQwODAwMDAwRkZDMDAwMzI4MzBFNAorOjEwMDA2MDAwMDAwMDAwMDQwMDAzMzgzMDAyMDQwMDQ4MDAwMDAwMEZDNAorOjEwMDA3MDAwMDIwNDAwNTQwMDAwMDA0NTAyMDQwMDVDMDAwMDAwMDY3OQorOjEwMDA4MDAwMDIwNDAwNzAwMDAwMDAwNDAyMDQwMDc4MDAwMDAwMDA3OAorOjEwMDA5MDAwMDIwNDAwN0MxMjE3MDAwMDAyMDQwMDgwMjIxNzAwMDBGNgorOjEwMDBBMDAwMDIwNDAwODQzMjE3MDAwMDA2MDQwMDg4MDAwMDAwMDVFNgorOjEwMDBCMDAwMDIwNDAwOUMxMjE1MDAwMDAyMDQwMEEwMjIxNTAwMDA5QQorOjEwMDBDMDAwMDIwNDAwQTQzMjE1MDAwMDA2MDQwMEE4MDAwMDAwMDQ4OQorOjEwMDBEMDAwMDIwNDAwQjgwMjEwMDAwMDAyMDQwMEJDMDAxMDAwMDA3RQorOjEwMDBFMDAwMDIwNDAwQzAxMDEwMDAwMDAyMDQwMEM0MjAxMDAwMDAzMAorOjEwMDBGMDAwMDIwNDAwQzgzMDEwMDAwMDAyMDQwMENDNDAxMDAwMDBEMAorOjEwMDEwMDAwMDYwNDAwRDAwMDAwMDAwMzAyMDQwMERDMDAxMDAwMDAyMAorOjEwMDExMDAwMDIwNDAwRTAxMjE0MDAwMDAyMDQwMEU0MjIxNDAwMDBCMworOjEwMDEyMDAwMDIwNDAwRTgzMjE0MDAwMDAyMDQwMEVDNDIxNDAwMDA1MworOjEwMDEzMDAwMDYwNDAwRjAwMDAwMDAwMzAxMDQwMTI0MDAwMDAwMDA5OAorOjEwMDE0MDAwMDEwNDAxMjgwMDAwMDAwMDAxMDQwMTJDMDAwMDAwMDA0RgorOjEwMDE1MDAwMDEwNDAxMzAwMDAwMDAwMDAyMDQwMUQwMDAwMDg5MDYwMworOjEwMDE2MDAwMDIwNDAwMDQwMDAwMDBGRjAyMDQwMDA4MDAwMDAwRkY3OQorOjEwMDE3MDAwMDIwNDAwMEMwMDAwMDBGRjAyMDQwMDEwMDAwMDAwRkY1OQorOjEwMDE4MDAwMDIwNDAwMTQwMDAwMDA3RjAyMDQwMDE4MDAwMDAwRkZCOQorOjEwMDE5MDAwMDIwNDAwMUMwMDAwMDBGRjAyMDQwMDIwMDAwMDAwRkYxOQorOjEwMDFBMDAwMDIwNDAwMjQwMDAwMDAzRTAyMDQwMDI4MDAwMDAwMDBCOQorOjEwMDFCMDAwMDIwNDAwMkMwMDAwMDAzRjAyMDQwMDMwMDAwMDAwM0Y1OQorOjEwMDFDMDAwMDIwNDAwMzQwMDAwMDAzRjAyMDQwMDM4MDAwMDAwM0YzOQorOjEwMDFEMDAwMDIwNDAwM0MwMDAwMDAzRjAyMDQwMDQwMDAwMDAwM0YxOQorOjEwMDFFMDAwMDIwNDAwNDQwMDAwMDAzRjAyMDQwNENDMDAwMDAwMDFBRgorOjEwMDFGMDAwMDIwNDIwMDgwMDAwMDIxMTAyMDQyMDBDMDAwMDAyMDA4QQorOjEwMDIwMDAwMDIwNDIwMTAwMDAwMDIwNDAyMDQyMDE0MDAwMDAyMTk1RAorOjEwMDIxMDAwMDIwNDIwMUMwMDAwRkZGRjAyMDQyMDIwMDAwMEZGRkY1QQorOjEwMDIyMDAwMDIwNDIwMjQwMDAwRkZGRjAyMDQyMDI4MDAwMEZGRkYzQQorOjEwMDIzMDAwMDIwNDIwMzgwMDAwMDAyMDA2MDQyMDNDMDAwMDAwMUZCQgorOjEwMDI0MDAwMDIwNDIwQjgwMDAwMDAwMTA2MDQyMEJDMDAwMDAwNUY4QQorOjEwMDI1MDAwMDIwNDIyMzgwN0ZGRkZGRjAyMDQyMjNDMDAwMDAwM0Y5NworOjEwMDI2MDAwMDIwNDIyNDAwN0ZGRkZGRjAyMDQyMjQ0MDAwMDAwMEZBNworOjEwMDI3MDAwMDEwNDIyNDgwMDAwMDAwMDAxMDQyMjRDMDAwMDAwMDA5QworOjEwMDI4MDAwMDEwNDIyNTAwMDAwMDAwMDAxMDQyMjU0MDAwMDAwMDA3QworOjEwMDI5MDAwMDEwNDIyNTgwMDAwMDAwMDAxMDQyMjVDMDAwMDAwMDA1QworOjEwMDJBMDAwMDEwNDIyNjAwMDAwMDAwMDAxMDQyMjY0MDAwMDAwMDAzQworOjEwMDJCMDAwMDEwNDIyNjgwMDAwMDAwMDAxMDQyMjZDMDAwMDAwMDAxQworOjEwMDJDMDAwMDEwNDIyNzAwMDAwMDAwMDAxMDQyMjc0MDAwMDAwMDBGQworOjEwMDJEMDAwMDEwNDIyNzgwMDAwMDAwMDAxMDQyMjdDMDAwMDAwMDBEQworOjEwMDJFMDAwMEMwNDIwMDAwMDAwMDNFODBBMDQyMDAwMDAwMDAwMDFDNAorOjEwMDJGMDAwMEIwNDIwMDAwMDAwMDAwQTA2MDU0MDAwMDAwMDBEMDA2RAorOjEwMDMwMDAwMDIwNTAwNDQwMDAwMDAyMDAyMDUwMDQ4MDAwMDAwMzIwMQorOjEwMDMxMDAwMDIwNTAwOTAwMjE1MDAyMDAyMDUwMDk0MDIxNTAwMjAzRAorOjEwMDMyMDAwMDIwNTAwOTgwMDAwMDAzMDAyMDUwMDlDMDgxMDAwMDA0MworOjEwMDMzMDAwMDIwNTAwQTAwMDAwMDAzMzAyMDUwMEE0MDAwMDAwMzAwOAorOjEwMDM0MDAwMDIwNTAwQTgwMDAwMDAzMTAyMDUwMEFDMDAwMDAwMDIxOAorOjEwMDM1MDAwMDIwNTAwQjAwMDAwMDAwNTAyMDUwMEI0MDAwMDAwMDYyMAorOjEwMDM2MDAwMDIwNTAwQjgwMDAwMDAwMjAyMDUwMEJDMDAwMDAwMDIwNworOjEwMDM3MDAwMDIwNTAwQzAwMDAwMDAwMDAyMDUwMEM0MDAwMDAwMDVFNgorOjEwMDM4MDAwMDIwNTAwQzgwMDAwMDAwMjAyMDUwMENDMDAwMDAwMDJDNworOjEwMDM5MDAwMDIwNTAwRDAwMDAwMDAwMjAyMDUwMEQ0MDAwMDAwMDFBOAorOjEwMDNBMDAwMDIwNTAxMTQwMDAwMDAwMTAyMDUwMTFDMDAwMDAwMDEwQgorOjEwMDNCMDAwMDIwNTAxMjAwMDAwMDAwMjAyMDUwMjA0MDAwMDAwMDEwNQorOjEwMDNDMDAwMDIwNTAyMEMwMDAwMDA0MDAyMDUwMjEwMDAwMDAwNDA3RgorOjEwMDNEMDAwMDIwNTAyMUMwMDAwMDAyMDAyMDUwMjIwMDAwMDAwMTM5QworOjEwMDNFMDAwMDIwNTAyMjQwMDAwMDAyMDA2MDUwMjQwMDAwMDAwMEE2OQorOjEwMDNGMDAwMDQwNTAyODAwMDIwMDAwMDAyMDUwMDUwMDAwMDAwMDdGNAorOjEwMDQwMDAwMDIwNTAwNTQwMDAwMDAwNzAyMDUwMDU4MDAwMDAwMDAyQgorOjEwMDQxMDAwMDIwNTAwNUMwMDAwMDAwODAyMDUwMDYwMDAwMDAwMDEwOQorOjEwMDQyMDAwMDYwNTAwNjQwMDAwMDAwMzAyMDUwMEQ4MDAwMDAwMDY3NQorOjEwMDQzMDAwMDIwNTAwMDQwMDAwMDAwMTAyMDUwMDA4MDAwMDAwMDFBMAorOjEwMDQ0MDAwMDIwNTAwMEMwMDAwMDAwMTAyMDUwMDEwMDAwMDAwMDE4MAorOjEwMDQ1MDAwMDIwNTAwMTQwMDAwMDAwMTAyMDUwMDE4MDAwMDAwMDE2MAorOjEwMDQ2MDAwMDIwNTAwMUMwMDAwMDAwMTAyMDUwMDIwMDAwMDAwMDE0MAorOjEwMDQ3MDAwMDIwNTAwMjQwMDAwMDAwMTAyMDUwMDI4MDAwMDAwMDEyMAorOjEwMDQ4MDAwMDIwNTAwMkMwMDAwMDAwMTAyMDUwMDMwMDAwMDAwMDEwMAorOjEwMDQ5MDAwMDIwNTAwMzQwMDAwMDAwMTAyMDUwMDM4MDAwMDAwMDFFMAorOjEwMDRBMDAwMDIwNTAwM0MwMDAwMDAwMTAyMDUwMDQwMDAwMDAwMDFDMAorOjEwMDRCMDAwMDIwNTAwRTAwMDAwMDAwRDAyMDUwMEU4MDAwMDAwMDA1OQorOjEwMDRDMDAwMDIwNTAwRjAwMDAwMDAwMDAyMDUwMEY4MDAwMDAwMDAzNgorOjEwMDREMDAwMDIwNTAwRTQwMDAwMDAyRDAyMDUwMEVDMDAwMDAwMjBGMQorOjEwMDRFMDAwMDIwNTAwRjQwMDAwMDAyMDAyMDUwMEZDMDAwMDAwMjBDRQorOjEwMDRGMDAwMDIwNTAwRTAwMDAwMDAxRDAyMDUwMEU4MDAwMDAwMTBGOQorOjEwMDUwMDAwMDIwNTAwRjAwMDAwMDAxMDAyMDUwMEY4MDAwMDAwMTBENQorOjEwMDUxMDAwMDIwNTAwRTQwMDAwMDAzRDAyMDUwMEVDMDAwMDAwMzA5MAorOjEwMDUyMDAwMDIwNTAwRjQwMDAwMDAzMDAyMDUwMEZDMDAwMDAwMzA2RAorOjEwMDUzMDAwMDIwNTAwRTAwMDAwMDA0RDAyMDUwMEU4MDAwMDAwNDA1OAorOjEwMDU0MDAwMDIwNTAwRjAwMDAwMDA0MDAyMDUwMEY4MDAwMDAwNDAzNQorOjEwMDU1MDAwMDIwNTAwRTQwMDAwMDA2RDAyMDUwMEVDMDAwMDAwNjBGMAorOjEwMDU2MDAwMDIwNTAwRjQwMDAwMDA2MDAyMDUwMEZDMDAwMDAwNjBDRAorOjEwMDU3MDAwMDIwNTAwRTAwMDAwMDA1RDAyMDUwMEU4MDAwMDAwNTBGOAorOjEwMDU4MDAwMDIwNTAwRjAwMDAwMDA1MDAyMDUwMEY4MDAwMDAwNTBENQorOjEwMDU5MDAwMDIwNTAwRTQwMDAwMDA3RDAyMDUwMEVDMDAwMDAwNzA5MAorOjEwMDVBMDAwMDIwNTAwRjQwMDAwMDA3MDAyMDUwMEZDMDAwMDAwNzA2RAorOjEwMDVCMDAwMDQwNjEwMDAwMjAwMDAyMDAyMDYwMERDMDAwMDAwMDExQQorOjEwMDVDMDAwMDEwNjAwRDgwMDAwMDAwMDA0MDYwMjAwMDAwMzAyMjAxQgorOjEwMDVEMDAwMDIwNjAwREMwMDAwMDAwMDAxMDYwMEI4MDAwMDAwMDA3OAorOjEwMDVFMDAwMDEwNjAwQzgwMDAwMDAwMDAyMDYwMTZDMDAwMDAwMDBDNworOjEwMDVGMDAwMDEwNjAwQkMwMDAwMDAwMDAxMDYwMENDMDAwMDAwMDA2NQorOjEwMDYwMDAwMDIwNjAxNzAwMDAwMDAwMDA3MTgwNDAwMDA5MTAwMDBCRAorOjEwMDYxMDAwMDgxODA3RDgwMDA1MDIyMzA3MUMwMDAwMkJGNzAwMDA2QworOjEwMDYyMDAwMDcxQzgwMDAyREQxMEFGRTA3MUQwMDAwMkY0NjE2NzNGRgorOjEwMDYzMDAwMDcxRDgwMDAxNjM0MjI0NTA4MURCMTMwNDlEQTAyMjUxNQorOjEwMDY0MDAwMDExODAwMDAwMDAwMDAwMDAxMTgwMDA0MDAwMDAwMDA3NAorOjEwMDY1MDAwMDExODAwMDgwMDAwMDAwMDAxMTgwMDBDMDAwMDAwMDA1NAorOjEwMDY2MDAwMDExODAwMTAwMDAwMDAwMDAxMTgwMDE0MDAwMDAwMDAzNAorOjEwMDY3MDAwMDIxODAwMjAwMDAwMDAwMTAyMTgwMDI0MDAwMDAwMDJGRgorOjEwMDY4MDAwMDIxODAwMjgwMDAwMDAwMzAyMTgwMDJDMDAwMDAwMDBERgorOjEwMDY5MDAwMDIxODAwMzAwMDAwMDAwNDAyMTgwMDM0MDAwMDAwMDFCRAorOjEwMDZBMDAwMDIxODAwMzgwMDAwMDAwMDAyMTgwMDNDMDAwMDAwMDFBMQorOjEwMDZCMDAwMDIxODAwNDAwMDAwMDAwNDAyMTgwMDQ0MDAwMDAwMDA3RQorOjEwMDZDMDAwMDIxODAwNDgwMDAwMDAwMTAyMTgwMDRDMDAwMDAwMDM1RQorOjEwMDZEMDAwMDIxODAwNTAwMDAwMDAwMDAyMTgwMDU0MDAwMDAwMDE0MQorOjEwMDZFMDAwMDIxODAwNTgwMDAwMDAwNDAyMTgwMDVDMDAwMDAwMDAxRQorOjEwMDZGMDAwMDIxODAwNjAwMDAwMDAwMTAyMTgwMDY0MDAwMDAwMDNGRQorOjEwMDcwMDAwMDIxODAwNjgwMDAwMDAwMDAyMTgwMDZDMDAwMDAwMDFFMAorOjEwMDcxMDAwMDIxODAwNzAwMDAwMDAwNDAyMTgwMDc0MDAwMDAwMDBCRAorOjEwMDcyMDAwMDIxODAwNzgwMDAwMDAwNDAyMTgwMDdDMDAwMDAwMDM5QQorOjEwMDczMDAwMDYxODAwODAwMDAwMDAwMjAyMTgwMEE0MDAwMDNGRkYxRAorOjEwMDc0MDAwMDIxODAwQTgwMDAwMDNGRjAyMTgwMjI0MDAwMDAwMDBBNQorOjEwMDc1MDAwMDIxODAyMzQwMDAwMDAwMDAyMTgwMjRDMDAwMDAwMDBFMQorOjEwMDc2MDAwMDIxODAyRTQwMDAwMDBGRjA2MTgxMDAwMDAwMDA0MDA1OAorOjEwMDc3MDAwMDIxQjhCQzAwMDAwMDAwMTAyMUI4MDAwMDAwMDAwMzQzRgorOjEwMDc4MDAwMDIxQjgwNDAwMDAwMDAxODAyMUI4MDgwMDAwMDAwMEM0QgorOjEwMDc5MDAwMDIxQjgwQzAwMDAwMDAyMDBDMUI4MzAwMDAwN0ExMjA2QQorOjEwMDdBMDAwMEExQjgzMDAwMDAwMDEzODBCMUI4MzAwMDAwMDEzODgyNAorOjEwMDdCMDAwMEExQjgzNDAwMDAwMDAwMDBDMUI4MzQwMDAwMDAxRjQ3MgorOjEwMDdDMDAwMEIxQjgzNDAwMDAwMDAwNTAyMUI4MzgwMDAwN0ExMjA1MworOjEwMDdEMDAwMDIxQjgzQzAwMDAwMDFGNDAyMUIxNDgwMDAwMDAwMDExMgorOjEwMDdFMDAwMEExQjE0ODAwMDAwMDAwMDA2MUExMDAwMDAwMDAzQjM2QQorOjEwMDdGMDAwMDQxQTFFQ0MwMDAxMDIyNzA2MUExRUQwMDAwMDAwMDhCMQorOjEwMDgwMDAwMDYxQTIwMDgwMDAwMDBDODA2MUEyMDAwMDAwMDAwMDI5NgorOjEwMDgxMDAwMDQxQUFGNDAwMDEwMDIyODA2MUEzNzE4MDAwMDAwMDQxRQorOjEwMDgyMDAwMDYxQTM3MTAwMDAwMDAwMjA2MUE1MDAwMDAwMDAwMDJFRAorOjEwMDgzMDAwMDYxQTUwMDgwMDAwMDAwNDA2MUE1MDE4MDAwMDAwMDRCMAorOjEwMDg0MDAwMDYxQTUwMjgwMDAwMDAwNDA2MUE1MDM4MDAwMDAwMDQ2MAorOjEwMDg1MDAwMDYxQTUwNDgwMDAwMDAwNDA2MUE1MDU4MDAwMDAwMDQxMAorOjEwMDg2MDAwMDYxQTUwNjgwMDAwMDAwNDA2MUE1MDc4MDAwMDAwMDJDMgorOjEwMDg3MDAwMDQxQTUyQzAwMDAyMDIzODA2MUE0MDUwMDAwMDAwMDY1NgorOjEwMDg4MDAwMDQxQTQwNjgwMDAyMDIzQTA0MUE0MDQwMDAwNDAyM0M4NAorOjEwMDg5MDAwMDQxQTgwMDAwMDAxMDI0MDA2MUE4MDA0MDAwMDAwMDNEMAorOjEwMDhBMDAwMDQxQTgwMTAwMDAxMDI0MTA2MUE4MDE0MDAwMDAwMDM5RgorOjEwMDhCMDAwMDQxQTgwMjAwMDAxMDI0MjA2MUE4MDI0MDAwMDAwMDM2RQorOjEwMDhDMDAwMDQxQTgwMzAwMDAxMDI0MzA2MUE4MDM0MDAwMDAwMDMzRAorOjEwMDhEMDAwMDQxQTgwNDAwMDAxMDI0NDA2MUE4MDQ0MDAwMDAwMDMwQworOjEwMDhFMDAwMDQxQTgwNTAwMDAxMDI0NTA2MUE4MDU0MDAwMDAwMDNEQgorOjEwMDhGMDAwMDQxQTgwNjAwMDAxMDI0NjA2MUE4MDY0MDAwMDAwMDNBQQorOjEwMDkwMDAwMDQxQTgwNzAwMDAxMDI0NzA2MUE4MDc0MDAwMDAwMDM3OAorOjEwMDkxMDAwMDQxQTgwODAwMDAxMDI0ODA2MUE4MDg0MDAwMDAwMDM0NworOjEwMDkyMDAwMDQxQTgwOTAwMDAxMDI0OTA2MUE4MDk0MDAwMDAwMDMxNgorOjEwMDkzMDAwMDQxQTgwQTAwMDAxMDI0QTA2MUE4MEE0MDAwMDAwMDNFNQorOjEwMDk0MDAwMDQxQTgwQjAwMDAxMDI0QjA2MUE4MEI0MDAwMDAwMDNCNAorOjEwMDk1MDAwMDQxQTgwQzAwMDAxMDI0QzA2MUE4MEM0MDAwMDAwMDM4MworOjEwMDk2MDAwMDQxQTgwRDAwMDAxMDI0RDA2MUE4MEQ0MDAwMDAwMDM1MgorOjEwMDk3MDAwMDQxQTgwRTAwMDAxMDI0RTA2MUE4MEU0MDAwMDAwMDMyMQorOjEwMDk4MDAwMDQxQTgwRjAwMDAxMDI0RjA2MUE4MEY0MDAwMDAwMDNGMAorOjEwMDk5MDAwMDQxQTgxMDAwMDAxMDI1MDA2MUE4MTA0MDAwMDAwMDNCRAorOjEwMDlBMDAwMDQxQTgxMTAwMDAxMDI1MTA2MUE4MTE0MDAwMDAwMDM4QworOjEwMDlCMDAwMDQxQTgxMjAwMDAxMDI1MjA2MUE4MTI0MDAwMDAwMDM1QgorOjEwMDlDMDAwMDQxQTgxMzAwMDAxMDI1MzA2MUE4MTM0MDAwMDAwMDMyQQorOjEwMDlEMDAwMDQxQTgxNDAwMDAxMDI1NDA2MUE4MTQ0MDAwMDAwMDNGOQorOjEwMDlFMDAwMDQxQTgxNTAwMDAxMDI1NTA2MUE4MTU0MDAwMDAwMDNDOAorOjEwMDlGMDAwMDQxQTgxNjAwMDAxMDI1NjA2MUE4MTY0MDAwMDAwMDM5NworOjEwMEEwMDAwMDQxQTgxNzAwMDAxMDI1NzA2MUE4MTc0MDAwMDAwMDM2NQorOjEwMEExMDAwMDQxQTgxODAwMDAxMDI1ODA2MUE4MTg0MDAwMDAwMDMzNAorOjEwMEEyMDAwMDQxQTgxOTAwMDAxMDI1OTA2MUE4MTk0MDAwMDAwMDMwMworOjEwMEEzMDAwMDQxQTgxQTAwMDAxMDI1QTA2MUE4MUE0MDAwMDAwMDNEMgorOjEwMEE0MDAwMDQxQTgxQjAwMDAxMDI1QjA2MUE4MUI0MDAwMDAwMDNBMQorOjEwMEE1MDAwMDQxQTgxQzAwMDAxMDI1QzA2MUE4MUM0MDAwMDAwMDM3MAorOjEwMEE2MDAwMDQxQTgxRDAwMDAxMDI1RDA2MUE4MUQ0MDAwMDAwMDMzRgorOjEwMEE3MDAwMDQxQTgxRTAwMDAxMDI1RTA2MUE4MUU0MDAwMDAwMDMwRQorOjEwMEE4MDAwMDQxQTgxRjAwMDAxMDI1RjA2MUE4MUY0MDAwMDAwMDNERAorOjEwMEE5MDAwMDQxQTgyMDAwMDAxMDI2MDA2MUE4MjA0MDAwMDAwMDNBQQorOjEwMEFBMDAwMDQxQTgyMTAwMDAxMDI2MTA2MUE4MjE0MDAwMDAwMDM3OQorOjEwMEFCMDAwMDQxQTgyMjAwMDAxMDI2MjA2MUE4MjI0MDAwMDAwMDM0OAorOjEwMEFDMDAwMDQxQTgyMzAwMDAxMDI2MzA2MUE4MjM0MDAwMDAwMDMxNworOjEwMEFEMDAwMDQxQTgyNDAwMDAxMDI2NDA2MUE4MjQ0MDAwMDAwMDNFNgorOjEwMEFFMDAwMDQxQTgyNTAwMDAxMDI2NTA2MUE4MjU0MDAwMDAwMDNCNQorOjEwMEFGMDAwMDQxQTgyNjAwMDAxMDI2NjA2MUE4MjY0MDAwMDAwMDM4NAorOjEwMEIwMDAwMDQxQTgyNzAwMDAxMDI2NzA2MUE4Mjc0MDAwMDAwMDM1MgorOjEwMEIxMDAwMDQxQTgyODAwMDAxMDI2ODA2MUE4Mjg0MDAwMDAwMDMyMQorOjEwMEIyMDAwMDQxQTgyOTAwMDAxMDI2OTA2MUE4Mjk0MDAwMDAwMDNGMAorOjEwMEIzMDAwMDQxQTgyQTAwMDAxMDI2QTA2MUE4MkE0MDAwMDAwMDNCRgorOjEwMEI0MDAwMDQxQTgyQjAwMDAxMDI2QjA2MUE4MkI0MDAwMDAwMDM4RQorOjEwMEI1MDAwMDQxQTgyQzAwMDAxMDI2QzA2MUE4MkM0MDAwMDAwMDM1RAorOjEwMEI2MDAwMDQxQTgyRDAwMDAxMDI2RDA2MUE4MkQ0MDAwMDAwMDMyQworOjEwMEI3MDAwMDQxQTgyRTAwMDAxMDI2RTA2MUE4MkU0MDAwMDAwMDNGQgorOjEwMEI4MDAwMDQxQTgyRjAwMDAxMDI2RjA2MUE4MkY0MDAwMDAwMDNDQQorOjEwMEI5MDAwMDQxQTgzMDAwMDAxMDI3MDA2MUE4MzA0MDAwMDAwMDM5NworOjEwMEJBMDAwMDQxQTgzMTAwMDAxMDI3MTA2MUE4MzE0MDAwMDAwMDM2NgorOjEwMEJCMDAwMDQxQTgzMjAwMDAxMDI3MjA2MUE4MzI0MDAwMDAwMDMzNQorOjEwMEJDMDAwMDQxQTgzMzAwMDAxMDI3MzA2MUE4MzM0MDAwMDAwMDMwNAorOjEwMEJEMDAwMDQxQTgzNDAwMDAxMDI3NDA2MUE4MzQ0MDAwMDAwMDNEMworOjEwMEJFMDAwMDQxQTgzNTAwMDAxMDI3NTA2MUE4MzU0MDAwMDAwMDNBMgorOjEwMEJGMDAwMDQxQTgzNjAwMDAxMDI3NjA2MUE4MzY0MDAwMDAwMDM3MQorOjEwMEMwMDAwMDQxQTgzNzAwMDAxMDI3NzA2MUE4Mzc0MDAwMDAwMDMzRgorOjEwMEMxMDAwMDQxQTgzODAwMDAxMDI3ODA2MUE4Mzg0MDAwMDAwMDMwRQorOjEwMEMyMDAwMDQxQTgzOTAwMDAxMDI3OTA2MUE4Mzk0MDAwMDAwMDNERAorOjEwMEMzMDAwMDQxQTgzQTAwMDAxMDI3QTA2MUE4M0E0MDAwMDAwMDNBQworOjEwMEM0MDAwMDQxQTgzQjAwMDAxMDI3QjA2MUE4M0I0MDAwMDAwMDM3QgorOjEwMEM1MDAwMDQxQTgzQzAwMDAxMDI3QzA2MUE4M0M0MDAwMDAwMDM0QQorOjEwMEM2MDAwMDQxQTgzRDAwMDAxMDI3RDA2MUE4M0Q0MDAwMDAwMDMxOQorOjEwMEM3MDAwMDQxQTgzRTAwMDAxMDI3RTA2MUE4M0U0MDAwMDAwMDNFOAorOjEwMEM4MDAwMDQxQTgzRjAwMDAxMDI3RjA2MUE4M0Y0MDAwMDAwMDNCNworOjEwMEM5MDAwMDQxQTg0MDAwMDAxMDI4MDA2MUE4NDA0MDAwMDAwMDM4NAorOjEwMENBMDAwMDQxQTg0MTAwMDAxMDI4MTA2MUE4NDE0MDAwMDAwMDM1MworOjEwMENCMDAwMDQxQTg0MjAwMDAxMDI4MjA2MUE4NDI0MDAwMDAwMDMyMgorOjEwMENDMDAwMDQxQTg0MzAwMDAxMDI4MzA2MUE4NDM0MDAwMDAwMDNGMQorOjEwMENEMDAwMDQxQTg0NDAwMDAxMDI4NDA2MUE4NDQ0MDAwMDAwMDNDMAorOjEwMENFMDAwMDQxQTg0NTAwMDAxMDI4NTA2MUE4NDU0MDAwMDAwMDM4RgorOjEwMENGMDAwMDQxQTg0NjAwMDAxMDI4NjA2MUE4NDY0MDAwMDAwMDM1RQorOjEwMEQwMDAwMDQxQTg0NzAwMDAxMDI4NzA2MUE4NDc0MDAwMDAwMDMyQworOjEwMEQxMDAwMDQxQTg0ODAwMDAxMDI4ODA2MUE4NDg0MDAwMDAwMDNGQgorOjEwMEQyMDAwMDQxQTg0OTAwMDAxMDI4OTA2MUE4NDk0MDAwMDAwMDNDQQorOjEwMEQzMDAwMDQxQTg0QTAwMDAxMDI4QTA2MUE4NEE0MDAwMDAwMDM5OQorOjEwMEQ0MDAwMDQxQTg0QjAwMDAxMDI4QjA2MUE4NEI0MDAwMDAwMDM2OAorOjEwMEQ1MDAwMDQxQTg0QzAwMDAxMDI4QzA2MUE4NEM0MDAwMDAwMDMzNworOjEwMEQ2MDAwMDQxQTg0RDAwMDAxMDI4RDA2MUE4NEQ0MDAwMDAwMDMwNgorOjEwMEQ3MDAwMDQxQTg0RTAwMDAxMDI4RTA2MUE4NEU0MDAwMDAwMDNENQorOjEwMEQ4MDAwMDQxQTg0RjAwMDAxMDI4RjA2MUE4NEY0MDAwMDAwMDNBNAorOjEwMEQ5MDAwMDQxQTg1MDAwMDAxMDI5MDA2MUE4NTA0MDAwMDAwMDM3MQorOjEwMERBMDAwMDQxQTg1MTAwMDAxMDI5MTA2MUE4NTE0MDAwMDAwMDM0MAorOjEwMERCMDAwMDQxQTg1MjAwMDAxMDI5MjA2MUE4NTI0MDAwMDAwMDMwRgorOjEwMERDMDAwMDQxQTg1MzAwMDAxMDI5MzA2MUE4NTM0MDAwMDAwMDNERQorOjEwMEREMDAwMDQxQTg1NDAwMDAxMDI5NDA2MUE4NTQ0MDAwMDAwMDNBRAorOjEwMERFMDAwMDQxQTg1NTAwMDAxMDI5NTA2MUE4NTU0MDAwMDAwMDM3QworOjEwMERGMDAwMDQxQTg1NjAwMDAxMDI5NjA2MUE4NTY0MDAwMDAwMDM0QgorOjEwMEUwMDAwMDQxQTg1NzAwMDAxMDI5NzA2MUE4NTc0MDAwMDAwMDMxOQorOjEwMEUxMDAwMDQxQTg1ODAwMDAxMDI5ODA2MUE4NTg0MDAwMDAwMDNFOAorOjEwMEUyMDAwMDQxQTg1OTAwMDAxMDI5OTA2MUE4NTk0MDAwMDAwMDNCNworOjEwMEUzMDAwMDQxQTg1QTAwMDAxMDI5QTA2MUE4NUE0MDAwMDAwMDM4NgorOjEwMEU0MDAwMDQxQTg1QjAwMDAxMDI5QjA2MUE4NUI0MDAwMDAwMDM1NQorOjEwMEU1MDAwMDQxQTg1QzAwMDAxMDI5QzA2MUE4NUM0MDAwMDAwMDMyNAorOjEwMEU2MDAwMDQxQTg1RDAwMDAxMDI5RDA2MUE4NUQ0MDAwMDAwMDNGMworOjEwMEU3MDAwMDQxQTg1RTAwMDAxMDI5RTA2MUE4NUU0MDAwMDAwMDNDMgorOjEwMEU4MDAwMDQxQTg1RjAwMDAxMDI5RjA2MUE4NUY0MDAwMDAwMDM5MQorOjEwMEU5MDAwMDQxQTg2MDAwMDAxMDJBMDA2MUE4NjA0MDAwMDAwMDM1RQorOjEwMEVBMDAwMDQxQTg2MTAwMDAxMDJBMTA2MUE4NjE0MDAwMDAwMDMyRAorOjEwMEVCMDAwMDQxQTg2MjAwMDAxMDJBMjA2MUE4NjI0MDAwMDAwMDNGQworOjEwMEVDMDAwMDQxQTg2MzAwMDAxMDJBMzA2MUE4NjM0MDAwMDAwMDNDQgorOjEwMEVEMDAwMDQxQTg2NDAwMDAxMDJBNDA2MUE4NjQ0MDAwMDAwMDM5QQorOjEwMEVFMDAwMDQxQTg2NTAwMDAxMDJBNTA2MUE4NjU0MDAwMDAwMDM2OQorOjEwMEVGMDAwMDQxQTg2NjAwMDAxMDJBNjA2MUE4NjY0MDAwMDAwMDMzOAorOjEwMEYwMDAwMDQxQTg2NzAwMDAxMDJBNzA2MUE4Njc0MDAwMDAwMDMwNgorOjEwMEYxMDAwMDQxQTg2ODAwMDAxMDJBODA2MUE4Njg0MDAwMDAwMDNENQorOjEwMEYyMDAwMDQxQTg2OTAwMDAxMDJBOTA2MUE4Njk0MDAwMDAwMDNBNAorOjEwMEYzMDAwMDQxQTg2QTAwMDAxMDJBQTA2MUE4NkE0MDAwMDAwMDM3MworOjEwMEY0MDAwMDQxQTg2QjAwMDAxMDJBQjA2MUE4NkI0MDAwMDAwMDM0MgorOjEwMEY1MDAwMDQxQTg2QzAwMDAxMDJBQzA2MUE4NkM0MDAwMDAwMDMxMQorOjEwMEY2MDAwMDQxQTg2RDAwMDAxMDJBRDA2MUE4NkQ0MDAwMDAwMDNFMAorOjEwMEY3MDAwMDQxQTg2RTAwMDAxMDJBRTA2MUE4NkU0MDAwMDAwMDNBRgorOjEwMEY4MDAwMDQxQTg2RjAwMDAxMDJBRjA2MUE4NkY0MDAwMDAwMDM3RQorOjEwMEY5MDAwMDQxQTg3MDAwMDAxMDJCMDA2MUE4NzA0MDAwMDAwMDM0QgorOjEwMEZBMDAwMDQxQTg3MTAwMDAxMDJCMTA2MUE4NzE0MDAwMDAwMDMxQQorOjEwMEZCMDAwMDQxQTg3MjAwMDAxMDJCMjA2MUE4NzI0MDAwMDAwMDNFOQorOjEwMEZDMDAwMDQxQTg3MzAwMDAxMDJCMzA2MUE4NzM0MDAwMDAwMDNCOAorOjEwMEZEMDAwMDQxQTg3NDAwMDAxMDJCNDA2MUE4NzQ0MDAwMDAwMDM4NworOjEwMEZFMDAwMDQxQTg3NTAwMDAxMDJCNTA2MUE4NzU0MDAwMDAwMDM1NgorOjEwMEZGMDAwMDQxQTg3NjAwMDAxMDJCNjA2MUE4NzY0MDAwMDAwMDMyNQorOjEwMTAwMDAwMDQxQTg3NzAwMDAxMDJCNzA2MUE4Nzc0MDAwMDAwMDNGMworOjEwMTAxMDAwMDQxQTg3ODAwMDAxMDJCODA2MUE4Nzg0MDAwMDAwMDNDMgorOjEwMTAyMDAwMDQxQTg3OTAwMDAxMDJCOTA2MUE4Nzk0MDAwMDAwMDM5MQorOjEwMTAzMDAwMDQxQTg3QTAwMDAxMDJCQTA2MUE4N0E0MDAwMDAwMDM2MAorOjEwMTA0MDAwMDQxQTg3QjAwMDAxMDJCQjA2MUE4N0I0MDAwMDAwMDMyRgorOjEwMTA1MDAwMDQxQTg3QzAwMDAxMDJCQzA2MUE4N0M0MDAwMDAwMDNGRQorOjEwMTA2MDAwMDQxQTg3RDAwMDAxMDJCRDA2MUE4N0Q0MDAwMDAwMDNDRAorOjEwMTA3MDAwMDQxQTg3RTAwMDAxMDJCRTA2MUE4N0U0MDAwMDAwMDM5QworOjEwMTA4MDAwMDQxQTg3RjAwMDAxMDJCRjA2MUE4N0Y0MDAwMDAwMDM2QgorOjEwMTA5MDAwMDQxQTg4MDAwMDAxMDJDMDA2MUE4ODA0MDAwMDAwMDMzOAorOjEwMTBBMDAwMDQxQTg4MTAwMDAxMDJDMTA2MUE4ODE0MDAwMDAwMDMwNworOjEwMTBCMDAwMDQxQTg4MjAwMDAxMDJDMjA2MUE4ODI0MDAwMDAwMDNENgorOjEwMTBDMDAwMDQxQTg4MzAwMDAxMDJDMzA2MUE4ODM0MDAwMDAwMDNBNQorOjEwMTBEMDAwMDQxQTg4NDAwMDAxMDJDNDA2MUE4ODQ0MDAwMDAwMDM3NAorOjEwMTBFMDAwMDQxQTg4NTAwMDAxMDJDNTA2MUE4ODU0MDAwMDAwMDM0MworOjEwMTBGMDAwMDQxQTg4NjAwMDAxMDJDNjA2MUE4ODY0MDAwMDAwMDMxMgorOjEwMTEwMDAwMDQxQTg4NzAwMDAxMDJDNzA2MUE4ODc0MDAwMDAwMDNFMAorOjEwMTExMDAwMDQxQTg4ODAwMDAxMDJDODA2MUE4ODg0MDAwMDAwMDNBRgorOjEwMTEyMDAwMDQxQTg4OTAwMDAxMDJDOTA2MUE4ODk0MDAwMDAwMDM3RQorOjEwMTEzMDAwMDQxQTg4QTAwMDAxMDJDQTA2MUE4OEE0MDAwMDAwMDM0RAorOjEwMTE0MDAwMDQxQTg4QjAwMDAxMDJDQjA2MUE4OEI0MDAwMDAwMDMxQworOjEwMTE1MDAwMDQxQTg4QzAwMDAxMDJDQzA2MUE4OEM0MDAwMDAwMDNFQgorOjEwMTE2MDAwMDQxQTg4RDAwMDAxMDJDRDA2MUE4OEQ0MDAwMDAwMDNCQQorOjEwMTE3MDAwMDQxQTg4RTAwMDAxMDJDRTA2MUE4OEU0MDAwMDAwMDM4OQorOjEwMTE4MDAwMDQxQTg4RjAwMDAxMDJDRjA2MUE4OEY0MDAwMDAwMDM1OAorOjEwMTE5MDAwMDQxQTg5MDAwMDAxMDJEMDA2MUE4OTA0MDAwMDAwMDMyNQorOjEwMTFBMDAwMDQxQTg5MTAwMDAxMDJEMTA2MUE4OTE0MDAwMDAwMDNGNAorOjEwMTFCMDAwMDQxQTg5MjAwMDAxMDJEMjA2MUE4OTI0MDAwMDAwMDNDMworOjEwMTFDMDAwMDQxQTg5MzAwMDAxMDJEMzA2MUE4OTM0MDAwMDAwMDM5MgorOjEwMTFEMDAwMDQxQTg5NDAwMDAxMDJENDA2MUE4OTQ0MDAwMDAwMDM2MQorOjEwMTFFMDAwMDQxQTg5NTAwMDAxMDJENTA2MUE4OTU0MDAwMDAwMDMzMAorOjEwMTFGMDAwMDQxQTg5NjAwMDAxMDJENjA2MUE4OTY0MDAwMDAwMDNGRgorOjEwMTIwMDAwMDQxQTg5NzAwMDAxMDJENzA2MUE4OTc0MDAwMDAwMDNDRAorOjEwMTIxMDAwMDQxQTg5ODAwMDAxMDJEODA2MUE4OTg0MDAwMDAwMDM5QworOjEwMTIyMDAwMDQxQTg5OTAwMDAxMDJEOTA2MUE4OTk0MDAwMDAwMDM2QgorOjEwMTIzMDAwMDQxQTg5QTAwMDAxMDJEQTA2MUE4OUE0MDAwMDAwMDMzQQorOjEwMTI0MDAwMDQxQTg5QjAwMDAxMDJEQjA2MUE4OUI0MDAwMDAwMDMwOQorOjEwMTI1MDAwMDQxQTg5QzAwMDAxMDJEQzA2MUE4OUM0MDAwMDAwMDNEOAorOjEwMTI2MDAwMDQxQTg5RDAwMDAxMDJERDA2MUE4OUQ0MDAwMDAwMDNBNworOjEwMTI3MDAwMDQxQTg5RTAwMDAxMDJERTA2MUE4OUU0MDAwMDAwMDM3NgorOjEwMTI4MDAwMDQxQTg5RjAwMDAxMDJERjA2MUE4OUY0MDAwMDAwMDM0NQorOjEwMTI5MDAwMDQxQThBMDAwMDAxMDJFMDA2MUE4QTA0MDAwMDAwMDMxMgorOjEwMTJBMDAwMDQxQThBMTAwMDAxMDJFMTA2MUE4QTE0MDAwMDAwMDNFMQorOjEwMTJCMDAwMDQxQThBMjAwMDAxMDJFMjA2MUE4QTI0MDAwMDAwMDNCMAorOjEwMTJDMDAwMDQxQThBMzAwMDAxMDJFMzA2MUE4QTM0MDAwMDAwMDM3RgorOjEwMTJEMDAwMDQxQThBNDAwMDAxMDJFNDA2MUE4QTQ0MDAwMDAwMDM0RQorOjEwMTJFMDAwMDQxQThBNTAwMDAxMDJFNTA2MUE4QTU0MDAwMDAwMDMxRAorOjEwMTJGMDAwMDQxQThBNjAwMDAxMDJFNjA2MUE4QTY0MDAwMDAwMDNFQworOjEwMTMwMDAwMDQxQThBNzAwMDAxMDJFNzA2MUE4QTc0MDAwMDAwMDNCQQorOjEwMTMxMDAwMDQxQThBODAwMDAxMDJFODA2MUE4QTg0MDAwMDAwMDM4OQorOjEwMTMyMDAwMDQxQThBOTAwMDAxMDJFOTA2MUE4QTk0MDAwMDAwMDM1OAorOjEwMTMzMDAwMDQxQThBQTAwMDAxMDJFQTA2MUE4QUE0MDAwMDAwMDMyNworOjEwMTM0MDAwMDQxQThBQjAwMDAxMDJFQjA2MUE4QUI0MDAwMDAwMDNGNgorOjEwMTM1MDAwMDQxQThBQzAwMDAxMDJFQzA2MUE4QUM0MDAwMDAwMDNDNQorOjEwMTM2MDAwMDQxQThBRDAwMDAxMDJFRDA2MUE4QUQ0MDAwMDAwMDM5NAorOjEwMTM3MDAwMDQxQThBRTAwMDAxMDJFRTA2MUE4QUU0MDAwMDAwMDM2MworOjEwMTM4MDAwMDQxQThBRjAwMDAxMDJFRjA2MUE4QUY0MDAwMDAwMDMzMgorOjEwMTM5MDAwMDQxQThCMDAwMDAxMDJGMDA2MUE4QjA0MDAwMDAwMDNGRgorOjEwMTNBMDAwMDQxQThCMTAwMDAxMDJGMTA2MUE4QjE0MDAwMDAwMDNDRQorOjEwMTNCMDAwMDQxQThCMjAwMDAxMDJGMjA2MUE4QjI0MDAwMDAwMDM5RAorOjEwMTNDMDAwMDQxQThCMzAwMDAxMDJGMzA2MUE4QjM0MDAwMDAwMDM2QworOjEwMTNEMDAwMDQxQThCNDAwMDAxMDJGNDA2MUE4QjQ0MDAwMDAwMDMzQgorOjEwMTNFMDAwMDQxQThCNTAwMDAxMDJGNTA2MUE4QjU0MDAwMDAwMDMwQQorOjEwMTNGMDAwMDQxQThCNjAwMDAxMDJGNjA2MUE4QjY0MDAwMDAwMDNEOQorOjEwMTQwMDAwMDQxQThCNzAwMDAxMDJGNzA2MUE4Qjc0MDAwMDAwMDNBNworOjEwMTQxMDAwMDQxQThCODAwMDAxMDJGODA2MUE4Qjg0MDAwMDAwMDM3NgorOjEwMTQyMDAwMDQxQThCOTAwMDAxMDJGOTA2MUE4Qjk0MDAwMDAwMDM0NQorOjEwMTQzMDAwMDQxQThCQTAwMDAxMDJGQTA2MUE4QkE0MDAwMDAwMDMxNAorOjEwMTQ0MDAwMDQxQThCQjAwMDAxMDJGQjA2MUE4QkI0MDAwMDAwMDNFMworOjEwMTQ1MDAwMDQxQThCQzAwMDAxMDJGQzA2MUE4QkM0MDAwMDAwMDNCMgorOjEwMTQ2MDAwMDQxQThCRDAwMDAxMDJGRDA2MUE4QkQ0MDAwMDAwMDM4MQorOjEwMTQ3MDAwMDQxQThCRTAwMDAxMDJGRTA2MUE4QkU0MDAwMDAwMDM1MAorOjEwMTQ4MDAwMDQxQThCRjAwMDAxMDJGRjA2MUE4QkY0MDAwMDAwMDMxRgorOjEwMTQ5MDAwMDQxQThDMDAwMDAxMDMwMDA2MUE4QzA0MDAwMDAwMDNFQgorOjEwMTRBMDAwMDQxQThDMTAwMDAxMDMwMTA2MUE4QzE0MDAwMDAwMDNCQQorOjEwMTRCMDAwMDQxQThDMjAwMDAxMDMwMjA2MUE4QzI0MDAwMDAwMDM4OQorOjEwMTRDMDAwMDQxQThDMzAwMDAxMDMwMzA2MUE4QzM0MDAwMDAwMDM1OAorOjEwMTREMDAwMDQxQThDNDAwMDAxMDMwNDA2MUE4QzQ0MDAwMDAwMDMyNworOjEwMTRFMDAwMDQxQThDNTAwMDAxMDMwNTA2MUE4QzU0MDAwMDAwMDNGNgorOjEwMTRGMDAwMDQxQThDNjAwMDAxMDMwNjA2MUE4QzY0MDAwMDAwMDNDNQorOjEwMTUwMDAwMDQxQThDNzAwMDAxMDMwNzA2MUE4Qzc0MDAwMDAwMDM5MworOjEwMTUxMDAwMDQxQThDODAwMDAxMDMwODA2MUE4Qzg0MDAwMDAwMDM2MgorOjEwMTUyMDAwMDQxQThDOTAwMDAxMDMwOTA2MUE4Qzk0MDAwMDAwMDMzMQorOjEwMTUzMDAwMDQxQThDQTAwMDAxMDMwQTA2MUE4Q0E0MDAwMDAwMDMwMAorOjEwMTU0MDAwMDQxQThDQjAwMDAxMDMwQjA2MUE4Q0I0MDAwMDAwMDNDRgorOjEwMTU1MDAwMDQxQThDQzAwMDAxMDMwQzA2MUE4Q0M0MDAwMDAwMDM5RQorOjEwMTU2MDAwMDQxQThDRDAwMDAxMDMwRDA2MUE4Q0Q0MDAwMDAwMDM2RAorOjEwMTU3MDAwMDQxQThDRTAwMDAxMDMwRTA2MUE4Q0U0MDAwMDAwMDMzQworOjEwMTU4MDAwMDQxQThDRjAwMDAxMDMwRjA2MUE4Q0Y0MDAwMDAwMDMwQgorOjEwMTU5MDAwMDQxQThEMDAwMDAxMDMxMDA2MUE4RDA0MDAwMDAwMDNEOAorOjEwMTVBMDAwMDQxQThEMTAwMDAxMDMxMTA2MUE4RDE0MDAwMDAwMDNBNworOjEwMTVCMDAwMDQxQThEMjAwMDAxMDMxMjA2MUE4RDI0MDAwMDAwMDM3NgorOjEwMTVDMDAwMDQxQThEMzAwMDAxMDMxMzA2MUE4RDM0MDAwMDAwMDM0NQorOjEwMTVEMDAwMDQxQThENDAwMDAxMDMxNDA2MUE4RDQ0MDAwMDAwMDMxNAorOjEwMTVFMDAwMDQxQThENTAwMDAxMDMxNTA2MUE4RDU0MDAwMDAwMDNFMworOjEwMTVGMDAwMDQxQThENjAwMDAxMDMxNjA2MUE4RDY0MDAwMDAwMDNCMgorOjEwMTYwMDAwMDQxQThENzAwMDAxMDMxNzA2MUE4RDc0MDAwMDAwMDM4MAorOjEwMTYxMDAwMDQxQThEODAwMDAxMDMxODA2MUE4RDg0MDAwMDAwMDM0RgorOjEwMTYyMDAwMDQxQThEOTAwMDAxMDMxOTA2MUE4RDk0MDAwMDAwMDMxRQorOjEwMTYzMDAwMDQxQThEQTAwMDAxMDMxQTA2MUE4REE0MDAwMDAwMDNFRAorOjEwMTY0MDAwMDQxQThEQjAwMDAxMDMxQjA2MUE4REI0MDAwMDAwMDNCQworOjEwMTY1MDAwMDQxQThEQzAwMDAxMDMxQzA2MUE4REM0MDAwMDAwMDM4QgorOjEwMTY2MDAwMDQxQThERDAwMDAxMDMxRDA2MUE4REQ0MDAwMDAwMDM1QQorOjEwMTY3MDAwMDQxQThERTAwMDAxMDMxRTA2MUE4REU0MDAwMDAwMDMyOQorOjEwMTY4MDAwMDQxQThERjAwMDAxMDMxRjA2MUE4REY0MDAwMDAwMDNGOAorOjEwMTY5MDAwMDQxQThFMDAwMDAxMDMyMDA2MUE4RTA0MDAwMDAwMDNDNQorOjEwMTZBMDAwMDQxQThFMTAwMDAxMDMyMTA2MUE4RTE0MDAwMDAwMDM5NAorOjEwMTZCMDAwMDQxQThFMjAwMDAxMDMyMjA2MUE4RTI0MDAwMDAwMDM2MworOjEwMTZDMDAwMDQxQThFMzAwMDAxMDMyMzA2MUE4RTM0MDAwMDAwMDMzMgorOjEwMTZEMDAwMDQxQThFNDAwMDAxMDMyNDA2MUE4RTQ0MDAwMDAwMDMwMQorOjEwMTZFMDAwMDQxQThFNTAwMDAxMDMyNTA2MUE4RTU0MDAwMDAwMDNEMAorOjEwMTZGMDAwMDQxQThFNjAwMDAxMDMyNjA2MUE4RTY0MDAwMDAwMDM5RgorOjEwMTcwMDAwMDQxQThFNzAwMDAxMDMyNzA2MUE4RTc0MDAwMDAwMDM2RAorOjEwMTcxMDAwMDQxQThFODAwMDAxMDMyODA2MUE4RTg0MDAwMDAwMDMzQworOjEwMTcyMDAwMDQxQThFOTAwMDAxMDMyOTA2MUE4RTk0MDAwMDAwMDMwQgorOjEwMTczMDAwMDQxQThFQTAwMDAxMDMyQTA2MUE4RUE0MDAwMDAwMDNEQQorOjEwMTc0MDAwMDQxQThFQjAwMDAxMDMyQjA2MUE4RUI0MDAwMDAwMDNBOQorOjEwMTc1MDAwMDQxQThFQzAwMDAxMDMyQzA2MUE4RUM0MDAwMDAwMDM3OAorOjEwMTc2MDAwMDQxQThFRDAwMDAxMDMyRDA2MUE4RUQ0MDAwMDAwMDM0NworOjEwMTc3MDAwMDQxQThFRTAwMDAxMDMyRTA2MUE4RUU0MDAwMDAwMDMxNgorOjEwMTc4MDAwMDQxQThFRjAwMDAxMDMyRjA2MUE4RUY0MDAwMDAwMDNFNQorOjEwMTc5MDAwMDQxQThGMDAwMDAxMDMzMDA2MUE4RjA0MDAwMDAwMDNCMgorOjEwMTdBMDAwMDQxQThGMTAwMDAxMDMzMTA2MUE4RjE0MDAwMDAwMDM4MQorOjEwMTdCMDAwMDQxQThGMjAwMDAxMDMzMjA2MUE4RjI0MDAwMDAwMDM1MAorOjEwMTdDMDAwMDQxQThGMzAwMDAxMDMzMzA2MUE4RjM0MDAwMDAwMDMxRgorOjEwMTdEMDAwMDQxQThGNDAwMDAxMDMzNDA2MUE4RjQ0MDAwMDAwMDNFRQorOjEwMTdFMDAwMDQxQThGNTAwMDAxMDMzNTA2MUE4RjU0MDAwMDAwMDNCRAorOjEwMTdGMDAwMDQxQThGNjAwMDAxMDMzNjA2MUE4RjY0MDAwMDAwMDM4QworOjEwMTgwMDAwMDQxQThGNzAwMDAxMDMzNzA2MUE4Rjc0MDAwMDAwMDM1QQorOjEwMTgxMDAwMDQxQThGODAwMDAxMDMzODA2MUE4Rjg0MDAwMDAwMDMyOQorOjEwMTgyMDAwMDQxQThGOTAwMDAxMDMzOTA2MUE4Rjk0MDAwMDAwMDNGOAorOjEwMTgzMDAwMDQxQThGQTAwMDAxMDMzQTA2MUE4RkE0MDAwMDAwMDNDNworOjEwMTg0MDAwMDQxQThGQjAwMDAxMDMzQjA2MUE4RkI0MDAwMDAwMDM5NgorOjEwMTg1MDAwMDQxQThGQzAwMDAxMDMzQzA2MUE4RkM0MDAwMDAwMDM2NQorOjEwMTg2MDAwMDQxQThGRDAwMDAxMDMzRDA2MUE4RkQ0MDAwMDAwMDMzNAorOjEwMTg3MDAwMDQxQThGRTAwMDAxMDMzRTA2MUE4RkU0MDAwMDAwMDdGRgorOjEwMTg4MDAwMDQxQTYyQzAwMDIwMDMzRjA2MUFEMDAwMDAwMDAwNzI1NAorOjEwMTg5MDAwMDYxQUQyNDgwMDAwMDAxMDA2MUFENkIwMDAwMDAwMjAzOAorOjEwMThBMDAwMDYxQUQ0NzAwMDAwMDA5MDA2MUFENDY4MDAwMDAwMDJFNgorOjEwMThCMDAwMDYxQUEwMDAwMDAwMDFDNDA2MUEzMDAwMDAwMDAwMTA0MworOjEwMThDMDAwMDYxQTMwODAwMDAwMDAxMDA2MUEzMTAwMDAwMDAwMTBENworOjEwMThEMDAwMDYxQTMxODAwMDAwMDAxMDA2MUEzMzAwMDAwMDAwMTJDMgorOjEwMThFMDAwMDYxQTMzOTAwMDAwMDA3MDA2MUFENDU4MDAwMDAwMDI1NworOjEwMThGMDAwMDYxQUQzNDgwMDAwMDAwMjA2MUFEMzU4MDAwMDAwMjA0MAorOjEwMTkwMDAwMDYxQUE3MTAwMDAwMDFDNDA2MUEzMDQwMDAwMDAwMTA5QgorOjEwMTkxMDAwMDYxQTMwQzAwMDAwMDAxMDA2MUEzMTQwMDAwMDAwMTAwNgorOjEwMTkyMDAwMDYxQTMxQzAwMDAwMDAxMDA2MUEzMzQ4MDAwMDAwMTJFOQorOjEwMTkzMDAwMDYxQTM1NTAwMDAwMDA3MDA2MUFENDYwMDAwMDAwMDIzQworOjEwMTk0MDAwMDYxQUQzNTAwMDAwMDAwMjA2MUFEM0Q4MDAwMDAwMjA2NworOjEwMTk1MDAwMDIxQUFFMjAwMDAwMDAwMDA2MUE1MDAwMDAwMDAwMDIyQgorOjEwMTk2MDAwMDYxQTUwODAwMDAwMDAxMjA0MUE0MDAwMDAwMjAzNUZCMworOjEwMTk3MDAwMDQxQTYzQzAwMDAyMDM2MTA2MUE3MDAwMDAwMDAwMDQyQworOjEwMTk4MDAwMDYxQTMyMDAwMDAwMDAwODAyMUFBRTI0MDAwMDAwMDAwRgorOjEwMTk5MDAwMDYxQTUwMTAwMDAwMDAwMjA2MUE1MEM4MDAwMDAwMTI3QgorOjEwMTlBMDAwMDQxQTQwMDgwMDAyMDM2MzA0MUE2M0M4MDAwMjAzNjVCNgorOjEwMTlCMDAwMDYxQTcwMTAwMDAwMDAwNDA2MUEzMjIwMDAwMDAwMDgwOQorOjEwMTlDMDAwMDIxQUFFMjgwMDAwMDAwMDA2MUE1MDIwMDAwMDAwMDI5MworOjEwMTlEMDAwMDYxQTUxMTAwMDAwMDAxMjA0MUE0MDEwMDAwMjAzNjc5QQorOjEwMTlFMDAwMDQxQTYzRDAwMDAyMDM2OTA2MUE3MDIwMDAwMDAwMDQ4NAorOjEwMTlGMDAwMDYxQTMyNDAwMDAwMDAwODAyMUFBRTJDMDAwMDAwMDA1NworOjEwMUEwMDAwMDYxQTUwMzAwMDAwMDAwMjA2MUE1MTU4MDAwMDAwMTI1OQorOjEwMUExMDAwMDQxQTQwMTgwMDAyMDM2QjA0MUE2M0Q4MDAwMjAzNkQxNQorOjEwMUEyMDAwMDYxQTcwMzAwMDAwMDAwNDA2MUEzMjYwMDAwMDAwMDgzOAorOjEwMUEzMDAwMDIxQUFFMzAwMDAwMDAwMDA2MUE1MDQwMDAwMDAwMDJGQQorOjEwMUE0MDAwMDYxQTUxQTAwMDAwMDAxMjA0MUE0MDIwMDAwMjAzNkY4MQorOjEwMUE1MDAwMDQxQTYzRTAwMDAyMDM3MTA2MUE3MDQwMDAwMDAwMDREQgorOjEwMUE2MDAwMDYxQTMyODAwMDAwMDAwODAyMUFBRTM0MDAwMDAwMDA5RQorOjEwMUE3MDAwMDYxQTUwNTAwMDAwMDAwMjA2MUE1MUU4MDAwMDAwMTIzOQorOjEwMUE4MDAwMDQxQTQwMjgwMDAyMDM3MzA0MUE2M0U4MDAwMjAzNzU3NQorOjEwMUE5MDAwMDYxQTcwNTAwMDAwMDAwNDA2MUEzMkEwMDAwMDAwMDg2OAorOjEwMUFBMDAwMDIxQUFFMzgwMDAwMDAwMDA2MUE1MDYwMDAwMDAwMDI2MgorOjEwMUFCMDAwMDYxQTUyMzAwMDAwMDAxMjA0MUE0MDMwMDAwMjAzNzc2OAorOjEwMUFDMDAwMDQxQTYzRjAwMDAyMDM3OTA2MUE3MDYwMDAwMDAwMDQzMworOjEwMUFEMDAwMDYxQTMyQzAwMDAwMDAwODAyMUFBRTNDMDAwMDAwMDBFNgorOjEwMUFFMDAwMDYxQTUwNzAwMDAwMDAwMjA2MUE1Mjc4MDAwMDAwMTIxOAorOjEwMUFGMDAwMDQxQTQwMzgwMDAyMDM3QjA0MUE2M0Y4MDAwMjAzN0RENQorOjEwMUIwMDAwMDYxQTcwNzAwMDAwMDAwNDA2MUEzMkUwMDAwMDAwMDg5NworOjEwMUIxMDAwMDIwMEE0NjgwMDBCMDFDODAyMDBBMjk0MDcxRDI5MTE0RAorOjEwMUIyMDAwMDIwMEEyOTgwMDAwMDAwMDAyMDBBMjlDMDA5QzA0MjQ3NQorOjEwMUIzMDAwMDIwMEEyQTAwMDAwMDAwMDAyMDBBMkE0MDAwMDAyMDkwRQorOjEwMUI0MDAwMDIwMEEyNzAwMDAwMDAwMDAyMDBBMjc0MDAwMDAwMDA2OQorOjEwMUI1MDAwMDIwMEEyNzAwMDAwMDAwMDAyMDBBMjc0MDAwMDAwMDA1OQorOjEwMUI2MDAwMDIwMEEyNzAwMDAwMDAwMDAyMDBBMjc0MDAwMDAwMDA0OQorOjEwMUI3MDAwMDIwMEEyNzAwMDAwMDAwMDAyMDBBMjc0MDAwMDAwMDAzOQorOjEwMUI4MDAwMDIwMTYwQTAwMDAwMDAwMTAyMDE2MEE0MDAwMDAyNjJFNgorOjEwMUI5MDAwMDIwMTYwQTgwMDAwMDAwMjAyMDE2MEFDMDAwMDAwMTgxMQorOjEwMUJBMDAwMDIwMTYyMDQwMDAwMDAwMTAyMDEwMEI0MDAwMDAwMDExMworOjEwMUJCMDAwMDIwMTAwQjgwMDAwMDAwMTAyMDEwMERDMDAwMDAwMDE4OQorOjEwMUJDMDAwMDIwMTAxMDAwMDAwMDAwMTAyMDEwMTA0MDAwMDAwMDEwNworOjEwMUJEMDAwMDIwMTAwN0MwMDMwMDAwMDAyMDEwMDg0MDAwMDAwMjhBNworOjEwMUJFMDAwMDIwMTAwOEMwMDAwMDAwMDAyMDEwMTMwMDAwMDAwMDQyRQorOjEwMUJGMDAwMDIwMTAyNUMwMDAwMDAwMTAyMDEwMzI4MDAwMDAwMDA1NQorOjEwMUMwMDAwMDIwMTYwNTgwMDAwRkZGRjAyMDE2MDcwMDAwMDAwMDc0MQorOjEwMUMxMDAwMDIwMTYwODAwMDAwMDAwMTAyMDEwNTU0MDAwMDAwMzA1NAorOjEwMUMyMDAwMDIwMTAwQzQwMDAwMDAwMTAyMDEwMENDMDAwMDAwMDExQworOjEwMUMzMDAwMDIwMTAwRjgwMDAwMDAwMTAyMDEwMEYwMDAwMDAwMDFCNAorOjEwMUM0MDAwMDIwMTAwODAwMDMwMDAwMDAyMDEwMDg4MDAwMDAwMjgyRQorOjEwMUM1MDAwMDIwMTAwOTAwMDAwMDAwMDAyMDEwMTM0MDAwMDAwMDRCNQorOjEwMUM2MDAwMDIwMTAyREMwMDAwMDAwMTAyMDEwMzJDMDAwMDAwMDA2MAorOjEwMUM3MDAwMDIwMTYwNUMwMDAwRkZGRjAyMDE2MDc0MDAwMDAwMDdDOQorOjEwMUM4MDAwMDIwMTYwODQwMDAwMDAwMTAyMDEwNTY0MDAwMDAwMzBEMAorOjEwMUM5MDAwMDIwMTAwQzgwMDAwMDAwMTAyMDEwMEQwMDAwMDAwMDFBNAorOjEwMUNBMDAwMDIwMTAwRkMwMDAwMDAwMTAyMDEwMEY0MDAwMDAwMDEzQworOjEwMUNCMDAwMDIwQzEwMDAwMDAwMDAyODAyMEMyMDA4MDAwMDAyMTE5NQorOjEwMUNDMDAwMDIwQzIwMEMwMDAwMDIwMDAyMEMyMDEwMDAwMDAyMDQ5NAorOjEwMUNEMDAwMDIwQzIwMUMwMDAwRkZGRjAyMEMyMDIwMDAwMEZGRkY3MAorOjEwMUNFMDAwMDIwQzIwMjQwMDAwRkZGRjAyMEMyMDI4MDAwMEZGRkY1MAorOjEwMUNGMDAwMDIwQzIwMzgwMDAwMDAyMDAyMEMyMDNDMDAwMDAwMjFEMworOjEwMUQwMDAwMDIwQzIwNDAwMDAwMDAyMjAyMEMyMDQ0MDAwMDAwMjNBRQorOjEwMUQxMDAwMDIwQzIwNDgwMDAwMDAyNDAyMEMyMDRDMDAwMDAwMjU4QQorOjEwMUQyMDAwMDIwQzIwNTAwMDAwMDAyNjAyMEMyMDU0MDAwMDAwMjc2NgorOjEwMUQzMDAwMDIwQzIwNTgwMDAwMDAyODAyMEMyMDVDMDAwMDAwMjk0MgorOjEwMUQ0MDAwMDIwQzIwNjAwMDAwMDAyQTAyMEMyMDY0MDAwMDAwMkIxRQorOjEwMUQ1MDAwMDIwQzIwNjgwMDAwMDAyQzAyMEMyMDZDMDAwMDAwMkRGQQorOjEwMUQ2MDAwMDIwQzIwNzAwMDAwMDAyRTAyMEMyMDc0MDAwMDAwMkZENgorOjEwMUQ3MDAwMDIwQzIwNzgwMDAwMDAxMDA2MEMyMDdDMDAwMDAwMDdGOAorOjEwMUQ4MDAwMDIwQzIwOTgwMDAwMDAxMTAyMEMyMDlDMDAwMDAwMTJBMAorOjEwMUQ5MDAwMDIwQzIwQTAwMDAwMDAxMzA2MEMyMEE0MDAwMDAwMUQ2RgorOjEwMURBMDAwMDIwQzIxMTgwMDAwMDAwMTAyMEMyMTFDMDAwMDAwMDE5RgorOjEwMURCMDAwMDIwQzIxMjAwMDAwMDAwMTA2MEMyMTI0MDAwMDAwMUQ1RgorOjEwMURDMDAwMDIwQzIxOTgwMDAwMDAwMTA2MEMyMTlDMDAwMDAwMDc3NQorOjEwMUREMDAwMDIwQzIxQjgwMDAwMDAwMTAyMEMyMUJDMDAwMDAwMDEyRgorOjEwMURFMDAwMDIwQzIxQzAwMDAwMDAwMTAyMEMyMUM0MDAwMDAwMDEwRgorOjEwMURGMDAwMDIwQzIxQzgwMDAwMDAwMTAyMEMyMUNDMDAwMDAwMDFFRgorOjEwMUUwMDAwMDIwQzIxRDAwMDAwMDAwMTAyMEMyMUQ0MDAwMDAwMDFDRQorOjEwMUUxMDAwMDIwQzIxRDgwMDAwMDAwMTAyMEMyMURDMDAwMDAwMDFBRQorOjEwMUUyMDAwMDIwQzIxRTAwMDAwMDAwMTAyMEMyMUU0MDAwMDAwMDE4RQorOjEwMUUzMDAwMDIwQzIxRTgwMDAwMDAwMTAyMEMyMUVDMDAwMDAwMDE2RQorOjEwMUU0MDAwMDIwQzIxRjAwMDAwMDAwMTAyMEMyMUY0MDAwMDAwMDE0RQorOjEwMUU1MDAwMDIwQzIxRjgwMDAwMDAwMTA2MEMyMUZDMDAwMDAwMDcyNAorOjEwMUU2MDAwMDIwQzIyMTgwMDAwMDAwMTA2MEMyMjFDMDAwMDAwMDdEMgorOjEwMUU3MDAwMDIwQzIyMzgwN0ZGRkZGRjAyMEMyMjNDMDAwMDAwM0Y0QgorOjEwMUU4MDAwMDIwQzIyNDAwN0ZGRkZGRjAyMEMyMjQ0MDAwMDAwMEY1QgorOjEwMUU5MDAwMDEwQzIyNDgwMDAwMDAwMDAxMEMyMjRDMDAwMDAwMDA1MAorOjEwMUVBMDAwMDEwQzIyNTAwMDAwMDAwMDAxMEMyMjU0MDAwMDAwMDAzMAorOjEwMUVCMDAwMDEwQzIyNTgwMDAwMDAwMDAxMEMyMjVDMDAwMDAwMDAxMAorOjEwMUVDMDAwMDEwQzIyNjAwMDAwMDAwMDAxMEMyMjY0MDAwMDAwMDBGMAorOjEwMUVEMDAwMDEwQzIyNjgwMDAwMDAwMDAxMEMyMjZDMDAwMDAwMDBEMAorOjEwMUVFMDAwMDEwQzIyNzAwMDAwMDAwMDAxMEMyMjc0MDAwMDAwMDBCMAorOjEwMUVGMDAwMDEwQzIyNzgwMDAwMDAwMDAxMEMyMjdDMDAwMDAwMDA5MAorOjEwMUYwMDAwMEMwQzIwMDAwMDAwMDNFODBBMEMyMDAwMDAwMDAwMDE3NworOjEwMUYxMDAwMEIwQzIwMDAwMDAwMDAwQTAyMEM0MDA4MDAwMDEwMTEwOQorOjEwMUYyMDAwMDIwQzQwMEMwMDAwMTAwMDAyMEM0MDEwMDAwMDEwMDRENQorOjEwMUYzMDAwMDIwQzQwMTQwMDAwMTAyMTAyMEM0MDFDMDAwMEZGRkZBNgorOjEwMUY0MDAwMDIwQzQwMjAwMDAwRkZGRjAyMEM0MDI0MDAwMEZGRkZCNQorOjEwMUY1MDAwMDIwQzQwMjgwMDAwRkZGRjAyMEM0MDM4MDAwMDAwNDY0MQorOjEwMUY2MDAwMDIwQzQwM0MwMDAwMDAxMDA2MEM0MDQwMDAwMDAwMDI0MworOjEwMUY3MDAwMDIwQzQwNDgwMDAwMDAxODAyMEM0MDRDMDAwMDAwRjAyOQorOjEwMUY4MDAwMDYwQzQwNTAwMDAwMDAxRjAyMEM0MENDMDAwMDAwMDE3NQorOjEwMUY5MDAwMDYwQzQwRDAwMDAwMDAzQTAyMEM0MUI4MDAwMDAwMDFERAorOjEwMUZBMDAwMDYwQzQxQkMwMDAwMDAwMzAyMEM0MUM4MDAwMDAwMDEwNworOjEwMUZCMDAwMDIwQzQxQ0MwMDAwMDAwMTA2MEM0MUQwMDAwMDAwMUFDOAorOjEwMUZDMDAwMDIwQzQyMzgwN0ZGRkZGRjAyMEM0MjNDMDAwMDAwM0ZCQQorOjEwMUZEMDAwMDIwQzQyNDAwN0ZGRkZGRjAyMEM0MjQ0MDAwMDAwMEZDQQorOjEwMUZFMDAwMDEwQzQyNDgwMDAwMDAwMDAxMEM0MjRDMDAwMDAwMDBCRgorOjEwMUZGMDAwMDEwQzQyNTAwMDAwMDAwMDAxMEM0MjU0MDAwMDAwMDA5RgorOjEwMjAwMDAwMDEwQzQyNTgwMDAwMDAwMDAxMEM0MjVDMDAwMDAwMDA3RQorOjEwMjAxMDAwMDEwQzQyNjAwMDAwMDAwMDAxMEM0MjY0MDAwMDAwMDA1RQorOjEwMjAyMDAwMDEwQzQyNjgwMDAwMDAwMDAxMEM0MjZDMDAwMDAwMDAzRQorOjEwMjAzMDAwMDEwQzQyNzAwMDAwMDAwMDAxMEM0Mjc0MDAwMDAwMDAxRQorOjEwMjA0MDAwMDEwQzQyNzgwMDAwMDAwMDAxMEM0MjdDMDAwMDAwMDBGRQorOjEwMjA1MDAwMDEwQzQyODAwMDAwMDAwMDBDMEM0MDAwMDAwMDAzRTg2RQorOjEwMjA2MDAwMEEwQzQwMDAwMDAwMDAwMTBCMEM0MDAwMDAwMDAwMEFCOAorOjEwMjA3MDAwMDYwRDQwMDAwMDAwMEEwMDAyMEQwMDQ0MDAwMDAwMzI3RQorOjEwMjA4MDAwMDIwRDAwOEMwMjE1MDAyMDAyMEQwMDkwMDIxNTAwMjBBOAorOjEwMjA5MDAwMDIwRDAwOTQwODEwMDAwMDAyMEQwMDk4MDAwMDAwMzNBQgorOjEwMjBBMDAwMDIwRDAwOUMwMDAwMDAwMjAyMEQwMEEwMDAwMDAwMDBENAorOjEwMjBCMDAwMDIwRDAwQTQwMDAwMDAwNTAyMEQwMEE4MDAwMDAwMDVBQworOjEwMjBDMDAwMDYwRDAwQUMwMDAwMDAwMjAyMEQwMEI0MDAwMDAwMDI4QQorOjEwMjBEMDAwMDIwRDAwQjgwMDAwMDAwMzAyMEQwMEJDMDAwMDAwMDI2OQorOjEwMjBFMDAwMDIwRDAwQzAwMDAwMDAwMTAyMEQwMEM4MDAwMDAwMDI0NworOjEwMjBGMDAwMDIwRDAwQ0MwMDAwMDAwMjAyMEQwMTVDMDAwMDAwMDE5NgorOjEwMjEwMDAwMDIwRDAxNjQwMDAwMDAwMTAyMEQwMTY4MDAwMDAwMDJFMAorOjEwMjExMDAwMDIwRDAyMDQwMDAwMDAwMTAyMEQwMjBDMDAwMDAwMjA2QworOjEwMjEyMDAwMDIwRDAyMTAwMDAwMDA0MDAyMEQwMjE0MDAwMDAwNDBFOQorOjEwMjEzMDAwMDIwRDAyMjAwMDAwMDAwMzAyMEQwMjI0MDAwMDAwMTgxRQorOjEwMjE0MDAwMDYwRDAyODAwMDAwMDAxMjA0MEQwMzAwMDAxODAzN0YzQQorOjEwMjE1MDAwMDYwRDAzNjAwMDAwMDAwQzAyMEQwMDRDMDAwMDAwMDFBMQorOjEwMjE2MDAwMDIwRDAwNTAwMDAwMDAwMjAyMEQwMDU0MDAwMDAwMDBBQgorOjEwMjE3MDAwMDIwRDAwNTgwMDAwMDAwODA2MEQwMDVDMDAwMDAwMDQ3RAorOjEwMjE4MDAwMDIwRDAwQzQwMDAwMDAwNDAyMEQwMDA0MDAwMDAwMDE2NAorOjEwMjE5MDAwMDIwRDAwMDgwMDAwMDAwMTAyMEQwMDBDMDAwMDAwMDEwQgorOjEwMjFBMDAwMDIwRDAwMTAwMDAwMDAwMTAyMEQwMDE0MDAwMDAwMDFFQgorOjEwMjFCMDAwMDIwRDAwMTgwMDAwMDAwMTAyMEQwMDFDMDAwMDAwMDFDQgorOjEwMjFDMDAwMDIwRDAwMjAwMDAwMDAwMTAyMEQwMDI0MDAwMDAwMDFBQgorOjEwMjFEMDAwMDIwRDAwMjgwMDAwMDAwMTAyMEQwMDJDMDAwMDAwMDE4QgorOjEwMjFFMDAwMDIwRDAwMzAwMDAwMDAwMTAyMEQwMDM0MDAwMDAwMDE2QgorOjEwMjFGMDAwMDIwRDAwMzgwMDAwMDAwMTAyMEQwMDNDMDAwMDAwMDE0QgorOjEwMjIwMDAwMDIwRDAxMTQwMDAwMDAwOTAyMEQwMTFDMDAwMDAwMEE2QgorOjEwMjIxMDAwMDIwRDAxMjQwMDAwMDAwMDAyMEQwMTJDMDAwMDAwMDA0RQorOjEwMjIyMDAwMDIwRDAxMzQwMDAwMDAwMDAyMEQwMTNDMDAwMDAwMEIxMworOjEwMjIzMDAwMDIwRDAxNDQwMDAwMDAwMDAyMEQwMTE4MDAwMDAwMjlGOQorOjEwMjI0MDAwMDIwRDAxMjAwMDAwMDAyQTAyMEQwMTI4MDAwMDAwMjBEQworOjEwMjI1MDAwMDIwRDAxMzAwMDAwMDAyMDAyMEQwMTM4MDAwMDAwMjBCNgorOjEwMjI2MDAwMDIwRDAxNDAwMDAwMDAyQjAyMEQwMTQ4MDAwMDAwMjA3QgorOjEwMjI3MDAwMDIwRDAxMTQwMDAwMDAxOTAyMEQwMTFDMDAwMDAwMUFEQgorOjEwMjI4MDAwMDIwRDAxMjQwMDAwMDAxMDAyMEQwMTJDMDAwMDAwMTBCRQorOjEwMjI5MDAwMDIwRDAxMzQwMDAwMDAxMDAyMEQwMTNDMDAwMDAwMUI4MworOjEwMjJBMDAwMDIwRDAxNDQwMDAwMDAxMDAyMEQwMTE4MDAwMDAwMzk2OQorOjEwMjJCMDAwMDIwRDAxMjAwMDAwMDAzQTAyMEQwMTI4MDAwMDAwMzA0QworOjEwMjJDMDAwMDIwRDAxMzAwMDAwMDAzMDAyMEQwMTM4MDAwMDAwMzAyNgorOjEwMjJEMDAwMDIwRDAxNDAwMDAwMDAzQjAyMEQwMTQ4MDAwMDAwMzBFQgorOjEwMjJFMDAwMDIwRDAxMTQwMDAwMDA0OTAyMEQwMTFDMDAwMDAwNEEwQgorOjEwMjJGMDAwMDIwRDAxMjQwMDAwMDA0MDAyMEQwMTJDMDAwMDAwNDBFRQorOjEwMjMwMDAwMDIwRDAxMzQwMDAwMDA0MDAyMEQwMTNDMDAwMDAwNEJCMgorOjEwMjMxMDAwMDIwRDAxNDQwMDAwMDA0MDAyMEQwMTE4MDAwMDAwNjk5OAorOjEwMjMyMDAwMDIwRDAxMjAwMDAwMDA2QTAyMEQwMTI4MDAwMDAwNjA3QgorOjEwMjMzMDAwMDIwRDAxMzAwMDAwMDA2MDAyMEQwMTM4MDAwMDAwNjA1NQorOjEwMjM0MDAwMDIwRDAxNDAwMDAwMDA2QjAyMEQwMTQ4MDAwMDAwNjAxQQorOjEwMjM1MDAwMDIwRDAxMTQwMDAwMDA1OTAyMEQwMTFDMDAwMDAwNUE3QQorOjEwMjM2MDAwMDIwRDAxMjQwMDAwMDA1MDAyMEQwMTJDMDAwMDAwNTA1RAorOjEwMjM3MDAwMDIwRDAxMzQwMDAwMDA1MDAyMEQwMTNDMDAwMDAwNUIyMgorOjEwMjM4MDAwMDIwRDAxNDQwMDAwMDA1MDAyMEQwMTE4MDAwMDAwNzkwOAorOjEwMjM5MDAwMDIwRDAxMjAwMDAwMDA3QTAyMEQwMTI4MDAwMDAwNzBFQgorOjEwMjNBMDAwMDIwRDAxMzAwMDAwMDA3MDAyMEQwMTM4MDAwMDAwNzBDNQorOjEwMjNCMDAwMDIwRDAxNDAwMDAwMDA3QjAyMEQwMTQ4MDAwMDAwNzA4QQorOjEwMjNDMDAwMDYwRTIwMDAwMDAwMDgwMDAyMEUwMDRDMDAwMDAwMzI0MworOjEwMjNEMDAwMDIwRTAwOTQwMjE1MDAyMDAyMEUwMDk4MDIxNTAwMjA0MworOjEwMjNFMDAwMDIwRTAwOUMwMDAwMDAzMDAyMEUwMEEwMDgxMDAwMDA0OQorOjEwMjNGMDAwMDIwRTAwQTQwMDAwMDAzMzAyMEUwMEE4MDAwMDAwMzAwRQorOjEwMjQwMDAwMDIwRTAwQUMwMDAwMDAzMTAyMEUwMEIwMDAwMDAwMDIxRAorOjEwMjQxMDAwMDIwRTAwQjQwMDAwMDAwNDAyMEUwMEI4MDAwMDAwMDAyQworOjEwMjQyMDAwMDIwRTAwQkMwMDAwMDAwMjAyMEUwMEMwMDAwMDAwMDIwQworOjEwMjQzMDAwMDIwRTAwQzQwMDAwMDAwMDAyMEUwMEM4MDAwMDAwMDJFRQorOjEwMjQ0MDAwMDIwRTAwQ0MwMDAwMDAwNzAyMEUwMEQwMDAwMDAwMDJDNworOjEwMjQ1MDAwMDIwRTAwRDQwMDAwMDAwMjAyMEUwMEQ4MDAwMDAwMDFBRAorOjEwMjQ2MDAwMDIwRTAxNDQwMDAwMDAwMTAyMEUwMTRDMDAwMDAwMDFCOAorOjEwMjQ3MDAwMDIwRTAxNTAwMDAwMDAwMjAyMEUwMjA0MDAwMDAwMDFFMgorOjEwMjQ4MDAwMDIwRTAyMEMwMDAwMDA0MDAyMEUwMjEwMDAwMDAwNDA4QworOjEwMjQ5MDAwMDIwRTAyMUMwMDAwMDAwNDAyMEUwMjIwMDAwMDAwMjBCOAorOjEwMjRBMDAwMDIwRTAyMjQwMDAwMDAwRTAyMEUwMjI4MDAwMDAwMUI5MworOjEwMjRCMDAwMDYwRTAzMDAwMDAwMDAxMjA0MEUwMjgwMDAxQjAzOTdBQQorOjEwMjRDMDAwMDYwRTAyRUMwMDAwMDAwNTAyMEUwMDU0MDAwMDAwMEM5NQorOjEwMjREMDAwMDIwRTAwNTgwMDAwMDAwQzAyMEUwMDVDMDAwMDAwMDAxQworOjEwMjRFMDAwMDIwRTAwNjAwMDAwMDAxMDAyMEUwMDY0MDAwMDAwMTBFOAorOjEwMjRGMDAwMDYwRTAwNjgwMDAwMDAwMzAyMEUwMERDMDAwMDAwMDM2RQorOjEwMjUwMDAwMDIwRTAwMDQwMDAwMDAwMTAyMEUwMDA4MDAwMDAwMDE5RAorOjEwMjUxMDAwMDIwRTAwMEMwMDAwMDAwMTAyMEUwMDEwMDAwMDAwMDE3RAorOjEwMjUyMDAwMDIwRTAwMTQwMDAwMDAwMTAyMEUwMDE4MDAwMDAwMDE1RAorOjEwMjUzMDAwMDIwRTAwMUMwMDAwMDAwMTAyMEUwMDIwMDAwMDAwMDEzRAorOjEwMjU0MDAwMDIwRTAwMjQwMDAwMDAwMTAyMEUwMDI4MDAwMDAwMDExRAorOjEwMjU1MDAwMDIwRTAwMkMwMDAwMDAwMTAyMEUwMDMwMDAwMDAwMDFGRAorOjEwMjU2MDAwMDIwRTAwMzQwMDAwMDAwMTAyMEUwMDM4MDAwMDAwMDFERAorOjEwMjU3MDAwMDIwRTAwM0MwMDAwMDAwMTAyMEUwMDQwMDAwMDAwMDFCRAorOjEwMjU4MDAwMDIwRTAwNDQwMDAwMDAwMTAyMEUwMTEwMDAwMDAwMEZDNgorOjEwMjU5MDAwMDIwRTAxMTgwMDAwMDAwMDAyMEUwMTIwMDAwMDAwMDBFMQorOjEwMjVBMDAwMDIwRTAxMjgwMDAwMDAwMDAyMEUwMTE0MDAwMDAwMkY5RQorOjEwMjVCMDAwMDIwRTAxMUMwMDAwMDAyMDAyMEUwMTI0MDAwMDAwMDA5OQorOjEwMjVDMDAwMDIwRTAxMkMwMDAwMDAwMDAyMEUwMTEwMDAwMDAwMUY4RQorOjEwMjVEMDAwMDIwRTAxMTgwMDAwMDAxMDAyMEUwMTIwMDAwMDAwMDA5MQorOjEwMjVFMDAwMDIwRTAxMjgwMDAwMDAwMDAyMEUwMTE0MDAwMDAwM0Y0RQorOjEwMjVGMDAwMDIwRTAxMUMwMDAwMDAzMDAyMEUwMTI0MDAwMDAwMDA0OQorOjEwMjYwMDAwMDIwRTAxMkMwMDAwMDAwMDAyMEUwMTEwMDAwMDAwNEYxRAorOjEwMjYxMDAwMDIwRTAxMTgwMDAwMDA0MDAyMEUwMTIwMDAwMDAwMDAyMAorOjEwMjYyMDAwMDIwRTAxMjgwMDAwMDAwMDAyMEUwMTE0MDAwMDAwNkZERAorOjEwMjYzMDAwMDIwRTAxMUMwMDAwMDA2MDAyMEUwMTI0MDAwMDAwMDBEOAorOjEwMjY0MDAwMDIwRTAxMkMwMDAwMDAwMDAyMEUwMTEwMDAwMDAwNUZDRAorOjEwMjY1MDAwMDIwRTAxMTgwMDAwMDA1MDAyMEUwMTIwMDAwMDAwMDBEMAorOjEwMjY2MDAwMDIwRTAxMjgwMDAwMDAwMDAyMEUwMTE0MDAwMDAwN0Y4RAorOjEwMjY3MDAwMDIwRTAxMUMwMDAwMDA3MDAyMEUwMTI0MDAwMDAwMDA4OAorOjEwMjY4MDAwMDIwRTAxMkMwMDAwMDAwMDA3MzAwNDAwMDBDOTAwMDAwOQorOjEwMjY5MDAwMDgzMDA3RDgwMDA1MDNCMjA3MzQwMDAwMzMyQjAwMDBEMAorOjEwMjZBMDAwMDczNDgwMDAzMEE0MENDQjA3MzUwMDAwMzUxQTE4RjUyQworOjEwMjZCMDAwMDczNTgwMDAyQThBMjYzQzA3MzYwMDAwMThEODMwREYwQworOjEwMjZDMDAwMDgzNjQ2MzAzNzNBMDNCNDAxMzAwMDAwMDAwMDAwMDBGRAorOjEwMjZEMDAwMDEzMDAwMDQwMDAwMDAwMDAxMzAwMDA4MDAwMDAwMDA4QworOjEwMjZFMDAwMDEzMDAwMEMwMDAwMDAwMDAxMzAwMDEwMDAwMDAwMDA2QworOjEwMjZGMDAwMDEzMDAwMTQwMDAwMDAwMDAyMzAwMDIwMDAwMDAwMDE0MgorOjEwMjcwMDAwMDIzMDAwMjQwMDAwMDAwMjAyMzAwMDI4MDAwMDAwMDMxNAorOjEwMjcxMDAwMDIzMDAwMkMwMDAwMDAwMDAyMzAwMDMwMDAwMDAwMDRGNQorOjEwMjcyMDAwMDIzMDAwMzQwMDAwMDAwMTAyMzAwMDM4MDAwMDAwMDBEOAorOjEwMjczMDAwMDIzMDAwM0MwMDAwMDAwMTAyMzAwMDQwMDAwMDAwMDRCNAorOjEwMjc0MDAwMDIzMDAwNDQwMDAwMDAwMDAyMzAwMDQ4MDAwMDAwMDE5OAorOjEwMjc1MDAwMDIzMDAwNEMwMDAwMDAwMzAyMzAwMDUwMDAwMDAwMDA3NgorOjEwMjc2MDAwMDIzMDAwNTQwMDAwMDAwMTAyMzAwMDU4MDAwMDAwMDQ1NAorOjEwMjc3MDAwMDIzMDAwNUMwMDAwMDAwMDAyMzAwMDYwMDAwMDAwMDEzOAorOjEwMjc4MDAwMDIzMDAwNjQwMDAwMDAwMzAyMzAwMDY4MDAwMDAwMDAxNgorOjEwMjc5MDAwMDIzMDAwNkMwMDAwMDAwMTAyMzAwMDcwMDAwMDAwMDRGNAorOjEwMjdBMDAwMDIzMDAwNzQwMDAwMDAwMDAyMzAwMDc4MDAwMDAwMDRENQorOjEwMjdCMDAwMDIzMDAwN0MwMDAwMDAwMzA2MzAwMDgwMDAwMDAwMDJCMAorOjEwMjdDMDAwMDIzMDAwQTQwMDAwM0ZGRjAyMzAwMEE4MDAwMDAzRkYxOQorOjEwMjdEMDAwMDIzMDAyMjQwMDAwMDAwMDAyMzAwMjM0MDAwMDAwMDAzOQorOjEwMjdFMDAwMDIzMDAyNEMwMDAwMDAwMDAyMzAwMkU0MDAwMEZGRkY1MworOjEwMjdGMDAwMDYzMDIwMDAwMDAwMDgwMDAyMzM4QkMwMDAwMDAwMDFGQQorOjEwMjgwMDAwMDIzMzgwMDAwMDAwMDAxQTAyMzM4MDQwMDAwMDAwNEVCNgorOjEwMjgxMDAwMDIzMzgwODAwMDAwMDAxMDAyMzM4MEMwMDAwMDAwMjBERQorOjEwMjgyMDAwMEMzMzgzMDAwMDA3QTEyMDBBMzM4MzAwMDAwMDAxMzgyNQorOjEwMjgzMDAwMEIzMzgzMDAwMDAwMTM4ODBBMzM4MzQwMDAwMDAwMDAzQworOjEwMjg0MDAwMEMzMzgzNDAwMDAwMDFGNDBCMzM4MzQwMDAwMDAwMDU4QgorOjEwMjg1MDAwMDIzMzgzODAwMDA3QTEyMDAyMzM4M0MwMDAwMDAxRjQwQgorOjEwMjg2MDAwMDIzMzE0ODAwMDAwMDAwMTBBMzMxNDgwMDAwMDAwMDBDRAorOjEwMjg3MDAwMDYzMjgwMDAwMDAwMDEwMjA2MzIyMDA4MDAwMDAwQzg3NQorOjEwMjg4MDAwMDYzMjIwMDAwMDAwMDAwMjA0MzI4RUEwMDAxMDAzQjZDMQorOjEwMjg5MDAwMDYzMjNFQjAwMDAwMDAwNjA2MzIzRUQ4MDAwMDAwMDJCQworOjEwMjhBMDAwMDYzMjNFODAwMDAwMDAwQTA0MzIzRUE4MDAwMjAzQzY0MQorOjEwMjhCMDAwMDYzMjNFMDAwMDAwMDAyMDA2MzI1MDAwMDAwMDA0MDBGNgorOjEwMjhDMDAwMDYzMjQwMDAwMDAwMDAwNDA0MzI3NEMwMDAwMjAzQzg1NQorOjEwMjhEMDAwMDYzMjQxMTAwMDAwMDAwMjA2MzJEMDAwMDAwMDAwMzAzNQorOjEwMjhFMDAwMDYzMkRENDAwMDAwMDA0NDA2MzJEQTAwMDAwMDAwRDA2RAorOjEwMjhGMDAwMDYzMkRFQTAwMDAwMDAwMjA2MzJFMDAwMDAwMDA4MDAwMAorOjEwMjkwMDAwMDYzMjg0NTAwMDAwMDExODA2MzIxMDAwMDAwMDAxODhEMQorOjEwMjkxMDAwMDYzMjUwMDAwMDAwMDAyMDA2MzI1MTAwMDAwMDAwMjA2NgorOjEwMjkyMDAwMDYzMjUyMDAwMDAwMDAyMDA2MzI1MzAwMDAwMDAwMjA1MgorOjEwMjkzMDAwMDYzMjU0MDAwMDAwMDAyMDA2MzI1NTAwMDAwMDAwMjAzRQorOjEwMjk0MDAwMDYzMjU2MDAwMDAwMDAyMDA2MzI1NzAwMDAwMDAwMjAyQQorOjEwMjk1MDAwMDYzMjU4MDAwMDAwMDAyMDA2MzI1OTAwMDAwMDAwMjAxNgorOjEwMjk2MDAwMDYzMjVBMDAwMDAwMDAyMDA2MzI1QjAwMDAwMDAwMjAwMgorOjEwMjk3MDAwMDYzMjVDMDAwMDAwMDAyMDA2MzI1RDAwMDAwMDAwMjBFRQorOjEwMjk4MDAwMDYzMjVFMDAwMDAwMDAyMDA2MzI1RjAwMDAwMDAwMjBEQQorOjEwMjk5MDAwMDYzMjhERjAwMDAwMDAwMjA0MzI4RTAwMDAwMjAzQ0FFRAorOjEwMjlBMDAwMDYzMjhFMDgwMDAwMDAwMjA2MzJERTkwMDAwMDAwMDJBRgorOjEwMjlCMDAwMDYzMjFDNDAwMDAwMDAzODA2MzI4OEIwMDAwMDAxMThDMgorOjEwMjlDMDAwMDYzMjE2MjAwMDAwMDE4ODA2MzI1MDgwMDAwMDAwMjBFOAorOjEwMjlEMDAwMDYzMjUxODAwMDAwMDAyMDA2MzI1MjgwMDAwMDAwMjBBNAorOjEwMjlFMDAwMDYzMjUzODAwMDAwMDAyMDA2MzI1NDgwMDAwMDAwMjA5MAorOjEwMjlGMDAwMDYzMjU1ODAwMDAwMDAyMDA2MzI1NjgwMDAwMDAwMjA3QworOjEwMkEwMDAwMDYzMjU3ODAwMDAwMDAyMDA2MzI1ODgwMDAwMDAwMjA2NworOjEwMkExMDAwMDYzMjU5ODAwMDAwMDAyMDA2MzI1QTgwMDAwMDAwMjA1MworOjEwMkEyMDAwMDYzMjVCODAwMDAwMDAyMDA2MzI1QzgwMDAwMDAwMjAzRgorOjEwMkEzMDAwMDYzMjVEODAwMDAwMDAyMDA2MzI1RTgwMDAwMDAwMjAyQgorOjEwMkE0MDAwMDYzMjVGODAwMDAwMDAyMDA2MzI4REY4MDAwMDAwMDI5MAorOjEwMkE1MDAwMDQzMjhFMTAwMDAyMDNDQzA2MzI4RTE4MDAwMDAwMDJGMQorOjEwMkE2MDAwMDYzMkRFOTgwMDAwMDAwMjA2MzIxRDIwMDAwMDAwMzgwOQorOjEwMkE3MDAwMDIzMjhENTAwMDAwMDAwMDA2MzI0MDEwMDAwMDAwMDJCQgorOjEwMkE4MDAwMDIzMjhENTQwMDAwMDAwMDA2MzI0MDIwMDAwMDAwMDI5NworOjEwMkE5MDAwMDIzMjhENTgwMDAwMDAwMDA2MzI0MDMwMDAwMDAwMDI3MworOjEwMkFBMDAwMDIzMjhENUMwMDAwMDAwMDA2MzI0MDQwMDAwMDAwMDI0RgorOjEwMkFCMDAwMDIzMjhENjAwMDAwMDAwMDA2MzI0MDUwMDAwMDAwMDIyQgorOjEwMkFDMDAwMDIzMjhENjQwMDAwMDAwMDA2MzI0MDYwMDAwMDAwMDIwNworOjEwMkFEMDAwMDIzMjhENjgwMDAwMDAwMDA2MzI0MDcwMDAwMDAwMDJFMworOjEwMkFFMDAwMDIzMjhENkMwMDAwMDAwMDA2MzI0MDgwMDAwMDAwMDJCRgorOjEwMkFGMDAwMDcyMDA0MDAwMDkxMDAwMDA4MjAwNzgwMDAxMDAzQ0U4QQorOjEwMkIwMDAwMDcyNDAwMDAyQUZGMDAwMDA3MjQ4MDAwMTUwOTBBQzBERQorOjEwMkIxMDAwMDgyNEE5RjA2OTI4MDNEMDAxMjAwMDAwMDAwMDAwMDA2QgorOjEwMkIyMDAwMDEyMDAwMDQwMDAwMDAwMDAxMjAwMDA4MDAwMDAwMDA1NworOjEwMkIzMDAwMDEyMDAwMEMwMDAwMDAwMDAxMjAwMDEwMDAwMDAwMDAzNworOjEwMkI0MDAwMDEyMDAwMTQwMDAwMDAwMDAyMjAwMDIwMDAwMDAwMDEwRAorOjEwMkI1MDAwMDIyMDAwMjQwMDAwMDAwMjAyMjAwMDI4MDAwMDAwMDNFMAorOjEwMkI2MDAwMDIyMDAwMkMwMDAwMDAwMDAyMjAwMDMwMDAwMDAwMDRDMQorOjEwMkI3MDAwMDIyMDAwMzQwMDAwMDAwMTAyMjAwMDM4MDAwMDAwMDBBNAorOjEwMkI4MDAwMDIyMDAwM0MwMDAwMDAwMTAyMjAwMDQwMDAwMDAwMDQ4MAorOjEwMkI5MDAwMDIyMDAwNDQwMDAwMDAwMDAyMjAwMDQ4MDAwMDAwMDE2NAorOjEwMkJBMDAwMDIyMDAwNEMwMDAwMDAwMzAyMjAwMDUwMDAwMDAwMDA0MgorOjEwMkJCMDAwMDIyMDAwNTQwMDAwMDAwMTAyMjAwMDU4MDAwMDAwMDQyMAorOjEwMkJDMDAwMDIyMDAwNUMwMDAwMDAwMDAyMjAwMDYwMDAwMDAwMDEwNAorOjEwMkJEMDAwMDIyMDAwNjQwMDAwMDAwMzAyMjAwMDY4MDAwMDAwMDBFMgorOjEwMkJFMDAwMDIyMDAwNkMwMDAwMDAwMTAyMjAwMDcwMDAwMDAwMDRDMAorOjEwMkJGMDAwMDIyMDAwNzQwMDAwMDAwMDAyMjAwMDc4MDAwMDAwMDRBMQorOjEwMkMwMDAwMDIyMDAwN0MwMDAwMDAwMzA2MjAwMDgwMDAwMDAwMDI3QgorOjEwMkMxMDAwMDIyMDAwQTQwMDAwM0ZGRjAyMjAwMEE4MDAwMDAzRkZFNAorOjEwMkMyMDAwMDIyMDAyMjQwMDAwMDAwMDAyMjAwMjM0MDAwMDAwMDAwNAorOjEwMkMzMDAwMDIyMDAyNEMwMDAwMDAwMDAyMjAwMkU0MDAwMEZGRkYxRQorOjEwMkM0MDAwMDYyMDIwMDAwMDAwMDgwMDAyMjM4QkMwMDAwMDAwMDFDNQorOjEwMkM1MDAwMDIyMzgwMDAwMDAwMDAxMDAyMjM4MDQwMDAwMDAwMTJDOAorOjEwMkM2MDAwMDIyMzgwODAwMDAwMDAzMDAyMjM4MEMwMDAwMDAwMEU5QworOjEwMkM3MDAwMEMyMzgzMDAwMDA3QTEyMDBBMjM4MzAwMDAwMDAxMzhGMQorOjEwMkM4MDAwMEIyMzgzMDAwMDAwMTM4ODBBMjM4MzQwMDAwMDAwMDAwOAorOjEwMkM5MDAwMEMyMzgzNDAwMDAwMDFGNDBCMjM4MzQwMDAwMDAwMDU1NworOjEwMkNBMDAwMDIyMzgzODAwMDA3QTEyMDAyMjM4M0MwMDAwMDAxRjRENworOjEwMkNCMDAwMDIyMzE0ODAwMDAwMDAwMTBBMjMxNDgwMDAwMDAwMDA5OQorOjEwMkNDMDAwMDYyMjEwMDAwMDAwMDA0MjA2MjIyMDA4MDAwMDAwQzg3MgorOjEwMkNEMDAwMDYyMjIwMDAwMDAwMDAwMjA2MjJCMDAwMDAwMDAwQzYwQworOjEwMkNFMDAwMDQyMkIzMTgwMDA1MDNEMjA2MjJCMzJDMDAwMDAwMEIwNworOjEwMkNGMDAwMDQyMkIzNTgwMDA1MDNENzA2MjJCMzZDMDAwMDAwMEI3MgorOjEwMkQwMDAwMDQyMkIzOTgwMDA1MDNEQzA2MjJCM0FDMDAwMDAwMEJEQworOjEwMkQxMDAwMDQyMkIzRDgwMDA1MDNFMTA2MjJCM0VDMDAwMDAwMEI0NworOjEwMkQyMDAwMDQyMkI0MTgwMDA1MDNFNjA2MjJCNDJDMDAwMDAwMEJCMAorOjEwMkQzMDAwMDQyMkI0NTgwMDA1MDNFQjA2MjJCNDZDMDAwMDAwMEIxQgorOjEwMkQ0MDAwMDQyMkI0OTgwMDA1MDNGMDA2MjJCNEFDMDAwMDAwMEI4NgorOjEwMkQ1MDAwMDQyMkI0RDgwMDA1MDNGNTA2MjJCNEVDMDAwMDAwMEJGMQorOjEwMkQ2MDAwMDQyMkI1MTgwMDA1MDNGQTA2MjJCNTJDMDAwMDAwMEI1QQorOjEwMkQ3MDAwMDQyMkI1NTgwMDA1MDNGRjA2MjJCNTZDMDAwMDAwMEJDNQorOjEwMkQ4MDAwMDQyMkI1OTgwMDA1MDQwNDA2MjJCNUFDMDAwMDAwMEIyRgorOjEwMkQ5MDAwMDQyMkI1RDgwMDA1MDQwOTA2MjJCNUVDMDAwMDAwMEI5QQorOjEwMkRBMDAwMDQyMkI2MTgwMDA1MDQwRTA2MjJCNjJDMDAwMDAwMEIwMworOjEwMkRCMDAwMDQyMkI2NTgwMDA1MDQxMzA2MjJCNjZDMDAwMDAwMEI2RQorOjEwMkRDMDAwMDQyMkI2OTgwMDA1MDQxODA2MjJCNkFDMDAwMDAwMEJEOQorOjEwMkREMDAwMDQyMkI2RDgwMDA1MDQxRDA2MjJCNkVDMDAwMDAwMEI0NAorOjEwMkRFMDAwMDQyMkI3MTgwMDA1MDQyMjA2MjJCNzJDMDAwMDAwMEJBRAorOjEwMkRGMDAwMDQyMkI3NTgwMDA1MDQyNzA2MjJCNzZDMDAwMDAwMEIxOAorOjEwMkUwMDAwMDQyMkI3OTgwMDA1MDQyQzA2MjJCN0FDMDAwMDAwMEI4MgorOjEwMkUxMDAwMDQyMkI3RDgwMDA1MDQzMTA2MjJCN0VDMDAwMDAwMEJFRAorOjEwMkUyMDAwMDQyMkI4MTgwMDA1MDQzNjA2MjJCODJDMDAwMDAwMEI1NgorOjEwMkUzMDAwMDQyMkI4NTgwMDA1MDQzQjA2MjJCODZDMDAwMDAwMEJDMQorOjEwMkU0MDAwMDQyMkI4OTgwMDA1MDQ0MDA2MjJCOEFDMDAwMDAwMEIyQworOjEwMkU1MDAwMDQyMkI4RDgwMDA1MDQ0NTA2MjJCOEVDMDAwMDAwMEI5NworOjEwMkU2MDAwMDQyMkI5MTgwMDA1MDQ0QTA2MjJCOTJDMDAwMDAwMEIwMAorOjEwMkU3MDAwMDQyMkI5NTgwMDA1MDQ0RjA2MjJCOTZDMDAwMDAwMEI2QgorOjEwMkU4MDAwMDQyMkI5OTgwMDA1MDQ1NDA2MjJCOUFDMDAwMDAwMEJENgorOjEwMkU5MDAwMDQyMkI5RDgwMDA1MDQ1OTA2MjJCOUVDMDAwMDAwMEI0MQorOjEwMkVBMDAwMDQyMkJBMTgwMDA1MDQ1RTA2MjJCQTJDMDAwMDAwMEJBQQorOjEwMkVCMDAwMDQyMkJBNTgwMDA1MDQ2MzA2MjJCQTZDMDAwMDAwMEIxNQorOjEwMkVDMDAwMDQyMkJBOTgwMDA1MDQ2ODA2MjJCQUFDMDAwMDAwMEI4MAorOjEwMkVEMDAwMDQyMkJBRDgwMDA1MDQ2RDA2MjJCQUVDMDAwMDAwMDVGMQorOjEwMkVFMDAwMDYyMkJCMDAwMDAwMDA1MzA0MjJCQzRDMDAwMTA0NzIwNworOjEwMkVGMDAwMDYyMkJDNTAwMDAwMDAwMzA0MjJCQzVDMDAwMTA0NzNFNQorOjEwMkYwMDAwMDYyMkJDNjAwMDAwMDAwMzA0MjJCQzZDMDAwMTA0NzRCMworOjEwMkYxMDAwMDYyMkJDNzAwMDAwMDAwMzA0MjJCQzdDMDAwMTA0NzU4MgorOjEwMkYyMDAwMDYyMkJDODAwMDAwMDAwMzA0MjJCQzhDMDAwMTA0NzY1MQorOjEwMkYzMDAwMDYyMkJDOTAwMDAwMDAwMzA0MjJCQzlDMDAwMTA0NzcyMAorOjEwMkY0MDAwMDYyMkJDQTAwMDAwMDAwMzA0MjJCQ0FDMDAwMTA0NzhFRgorOjEwMkY1MDAwMDYyMkJDQjAwMDAwMDAwMzA0MjJCQ0JDMDAwMTA0NzlCRQorOjEwMkY2MDAwMDYyMjg4MDAwMDAwMDEwMDA2MjI4MDAwMDAwMDAyMDAwNgorOjEwMkY3MDAwMDQyMjEyNzAwMDEwMDQ3QTA2MjIzMDAwMDAwMDAwQzAwMworOjEwMkY4MDAwMDYyMjY3MDAwMDAwMDEwMDA2MjI5MDAwMDAwMDA0MDBGNQorOjEwMkY5MDAwMDQyMjZCMDgwMDIwMDQ4QTAyMjIxMkMwRkZGRkZGRkZGOAorOjEwMkZBMDAwMDYyMjExRTgwMDAwMDAwMjA2MjIxMkM4MDAwMDAwMDlGMworOjEwMkZCMDAwMDYyMjEyRUMwMDAwMDAwOTA2MjI4QzAwMDAwMDAwMDgyNgorOjEwMkZDMDAwMDIyMjExNDgwMDAwMDAwMDA2MjIxMzIwMDAwMDAwMDYyMworOjEwMkZEMDAwMDYyMjMzMDAwMDAwMDAwMjA2MjI2MDQwMDAwMDAwMzA5QworOjEwMkZFMDAwMDYyMjhDMjAwMDAwMDAwODAyMjIxMTRDMDAwMDAwMDA4NAorOjEwMkZGMDAwMDYyMjEzMzgwMDAwMDAwNjA2MjIzMzA4MDAwMDAwMDJGMworOjEwMzAwMDAwMDYyMjYxMDAwMDAwMDAzMDA2MjI4QzQwMDAwMDAwMDgwQgorOjEwMzAxMDAwMDIyMjExNTAwMDAwMDAwMDA2MjIxMzUwMDAwMDAwMDY5QQorOjEwMzAyMDAwMDYyMjMzMTAwMDAwMDAwMjA2MjI2MUMwMDAwMDAwMzBCQQorOjEwMzAzMDAwMDYyMjhDNjAwMDAwMDAwODAyMjIxMTU0MDAwMDAwMDBFQgorOjEwMzA0MDAwMDYyMjEzNjgwMDAwMDAwNjA2MjIzMzE4MDAwMDAwMDI2MgorOjEwMzA1MDAwMDYyMjYyODAwMDAwMDAzMDA2MjI4QzgwMDAwMDAwMDhGQQorOjEwMzA2MDAwMDIyMjExNTgwMDAwMDAwMDA2MjIxMzgwMDAwMDAwMDYxMgorOjEwMzA3MDAwMDYyMjMzMjAwMDAwMDAwMjA2MjI2MzQwMDAwMDAwMzBEOAorOjEwMzA4MDAwMDYyMjhDQTAwMDAwMDAwODAyMjIxMTVDMDAwMDAwMDA1MworOjEwMzA5MDAwMDYyMjEzOTgwMDAwMDAwNjA2MjIzMzI4MDAwMDAwMDJEMgorOjEwMzBBMDAwMDYyMjY0MDAwMDAwMDAzMDA2MjI4Q0MwMDAwMDAwMDhFOAorOjEwMzBCMDAwMDIyMjExNjAwMDAwMDAwMDA2MjIxM0IwMDAwMDAwMDY4QQorOjEwMzBDMDAwMDYyMjMzMzAwMDAwMDAwMjA2MjI2NEMwMDAwMDAwMzBGNworOjEwMzBEMDAwMDYyMjhDRTAwMDAwMDAwODAyMjIxMTY0MDAwMDAwMDBCQgorOjEwMzBFMDAwMDYyMjEzQzgwMDAwMDAwNjA2MjIzMzM4MDAwMDAwMDI0MgorOjEwMzBGMDAwMDYyMjY1ODAwMDAwMDAzMDAyMTYxMDAwMDAwMDAwMjg0MworOjEwMzEwMDAwMDIxNzAwMDgwMDAwMDAwMjAyMTcwMDJDMDAwMDAwMDM1NAorOjEwMzExMDAwMDIxNzAwM0MwMDAwMDAwNDAyMTcwMDQ4MDAwMDAwMDJGMworOjEwMzEyMDAwMDIxNzAwNEMwMDAwMDA5MDAyMTcwMDUwMDAwMDAwOTBCMQorOjEwMzEzMDAwMDIxNzAwNTQwMDgwMDA5MDAyMTcwMDU4MDgxMDAwMDA4OQorOjEwMzE0MDAwMDIxNzAwNjAwMDAwMDA4QTAyMTcwMDY0MDAwMDAwODA3RgorOjEwMzE1MDAwMDIxNzAwNjgwMDAwMDA4MTAyMTcwMDZDMDAwMDAwODA2OAorOjEwMzE2MDAwMDIxNzAwNzAwMDAwMDAwNjAyMTcwMDc4MDAwMDA3RDA2OAorOjEwMzE3MDAwMDIxNzAwN0MwMDAwMDc2QzAyMTcwMDM4MDA3QzEwMDQ2NgorOjEwMzE4MDAwMDIxNzAwMDQwMDAwMDAwRjA2MTY0MDI0MDAwMDAwMDI5MQorOjEwMzE5MDAwMDIxNjQwNzAwMDAwMDAxQzAyMTY0MjA4MDAwMDAwMDFFOAorOjEwMzFBMDAwMDIxNjQyMTAwMDAwMDAwMTAyMTY0MjIwMDAwMDAwMDEzOQorOjEwMzFCMDAwMDIxNjQyMjgwMDAwMDAwMTAyMTY0MjMwMDAwMDAwMDEwMQorOjEwMzFDMDAwMDIxNjQyMzgwMDAwMDAwMTAyMTY0MjYwMDAwMDAwMDJCMAorOjEwMzFEMDAwMEMxNjQwMUMwMDAzRDA5MDBBMTY0MDFDMDAwMDAwOUNGNgorOjEwMzFFMDAwMEIxNjQwMUMwMDAwMDlDNDAyMTY0MDMwMDAwMDAwMDgwNQorOjEwMzFGMDAwMDIxNjQwMzQwMDAwMDAwQzAyMTY0MDM4MDAwMDAwMTA5NworOjEwMzIwMDAwMDIxNjQwNDQwMDAwMDAyMDAyMTY0MDAwMDAwMDAwMDFBOQorOjEwMzIxMDAwMDIxNjQwRDgwMDAwMDAwMTAyMTY0MDA4MDAwMDAwMDExQworOjEwMzIyMDAwMDIxNjQwMEMwMDAwMDAwMTAyMTY0MDEwMDAwMDAwMDFEMAorOjEwMzIzMDAwMDIxNjQyNDAwMDAwMDAwMDAyMTY0MjQ4MDAwMDAwMDA1MgorOjEwMzI0MDAwMDYxNjQyNzAwMDAwMDAwMjAyMTY0MjUwMDAwMDAwMDAwNAorOjEwMzI1MDAwMDIxNjQyNTgwMDAwMDAwMDA2MTY0MjgwMDAwMDAwMDJEQworOjEwMzI2MDAwMDIxNjYwMDgwMDAwMTIyNDAyMTY2MDBDMDAwMDEyMTAwMgorOjEwMzI3MDAwMDIxNjYwMTAwMDAwMTIxNDAyMTY2MDFDMDAwMEZGRkYwRQorOjEwMzI4MDAwMDIxNjYwMjAwMDAwRkZGRjAyMTY2MDI0MDAwMEZGRkYwRQorOjEwMzI5MDAwMDIxNjYwMjgwMDAwRkZGRjAyMTY2MDM4MDAwMDAwMjBDMAorOjEwMzJBMDAwMDIxNjYwM0MwMDAwMDAyMDA2MTY2MDQwMDAwMDAwMDI4QworOjEwMzJCMDAwMDIxNjYwNDgwMDAwMDAyMzAyMTY2MDRDMDAwMDAwMjQ0MworOjEwMzJDMDAwMDIxNjYwNTAwMDAwMDAyNTAyMTY2MDU0MDAwMDAwMjYxRgorOjEwMzJEMDAwMDIxNjYwNTgwMDAwMDAyNzAyMTY2MDVDMDAwMDAwMjlGQQorOjEwMzJFMDAwMDIxNjYwNjAwMDAwMDAyQTAyMTY2MDY0MDAwMDAwMkJENQorOjEwMzJGMDAwMDIxNjYwNjgwMDAwMDAyQzAyMTY2MDZDMDAwMDAwMkRCMQorOjEwMzMwMDAwMDIxNjYwNzAwMDAwMDBFQzAyMTY2MDc0MDAwMDAwMTFFQworOjEwMzMxMDAwMDIxNjYwNzgwMDAwMDAxMjA2MTY2MDdDMDAwMDAwMEZBNAorOjEwMzMyMDAwMDIxNjYwQjgwMDAwMDAwMTAyMTY2MEJDMDAwMDAwMDEzNworOjEwMzMzMDAwMDYxNjYwQzAwMDAwMDAwQzAyMTY2MEYwMDAwMDAwMDFEQworOjEwMzM0MDAwMDYxNjYwRjQwMDAwMDAzMTAyMTY2MUI4MDAwMDAwMDFBQQorOjEwMzM1MDAwMDYxNjYxQkMwMDAwMDAwRDAyMTY2MUYwMDAwMDAwMDFCRAorOjEwMzM2MDAwMDYxNjYxRjQwMDAwMDAxMTAyMTY2MjM4MDdGRkZGRkYyNQorOjEwMzM3MDAwMDIxNjYyM0MwMDAwMDAzRjAyMTY2MjQwMDdGRkZGRkY5QQorOjEwMzM4MDAwMDIxNjYyNDQwMDAwMDAwRjAxMTY2MjQ4MDAwMDAwMDBBRgorOjEwMzM5MDAwMDExNjYyNEMwMDAwMDAwMDAxMTY2MjUwMDAwMDAwMDA5RgorOjEwMzNBMDAwMDExNjYyNTQwMDAwMDAwMDAxMTY2MjU4MDAwMDAwMDA3RgorOjEwMzNCMDAwMDExNjYyNUMwMDAwMDAwMDAxMTY2MjYwMDAwMDAwMDA1RgorOjEwMzNDMDAwMDExNjYyNjQwMDAwMDAwMDAxMTY2MjY4MDAwMDAwMDAzRgorOjEwMzNEMDAwMDExNjYyNkMwMDAwMDAwMDAxMTY2MjcwMDAwMDAwMDAxRgorOjEwMzNFMDAwMDExNjYyNzQwMDAwMDAwMDAxMTY2Mjc4MDAwMDAwMDBGRgorOjEwMzNGMDAwMDExNjYyN0MwMDAwMDAwMDBDMTY2MDAwMDAwMDAzRTg2QgorOjEwMzQwMDAwMEExNjYwMDAwMDAwMDAwMTBCMTY2MDAwMDAwMDAwMEFCMAorOjEwMzQxMDAwMDIxNjgwNDAwMDAwMDAwNjAyMTY4MDQ0MDAwMDAwMDVFRAorOjEwMzQyMDAwMDIxNjgwNDgwMDAwMDAwQTAyMTY4MDRDMDAwMDAwMDVDOQorOjEwMzQzMDAwMDIxNjgwNTQwMDAwMDAwMjAyMTY4MENDMDAwMDAwMDQzNgorOjEwMzQ0MDAwMDIxNjgwRDAwMDAwMDAwNDAyMTY4MEQ0MDAwMDAwMDRBMAorOjEwMzQ1MDAwMDIxNjgwRDgwMDAwMDAwNDAyMTY4MERDMDAwMDAwMDQ4MAorOjEwMzQ2MDAwMDIxNjgwRTAwMDAwMDAwNDAyMTY4MEU0MDAwMDAwMDQ2MAorOjEwMzQ3MDAwMDIxNjgwRTgwMDAwMDAwNDAyMTY4ODA0MDAwMDAwMDQyMAorOjEwMzQ4MDAwMDIxNjgwMzAwMDAwMDA3QzAyMTY4MDM0MDAwMDAwM0RFRgorOjEwMzQ5MDAwMDIxNjgwMzgwMDAwMDAzRjAyMTY4MDNDMDAwMDAwOUNBRAorOjEwMzRBMDAwMDIxNjgwRjAwMDAwMDAwNzA2MTY4MEY0MDAwMDAwMDVGOAorOjEwMzRCMDAwMDIxNjg4MEMwMTAxMDEwMTAyMTY4MTA4MDAwMDAwMDBCQgorOjEwMzRDMDAwMDIxNjgxMEMwMDAwMDAwNDAyMTY4MTEwMDAwMDAwMDRBNgorOjEwMzREMDAwMDIxNjgxMTQwMDAwMDAwMjAyMTY4ODEwMDgwMTIwMDQ2MAorOjEwMzRFMDAwMDIxNjgxMTgwMDAwMDAwNTAyMTY4MTFDMDAwMDAwMDU2QworOjEwMzRGMDAwMDIxNjgxMjAwMDAwMDAwNTAyMTY4MTI0MDAwMDAwMDU0QworOjEwMzUwMDAwMDIxNjg4MkMyMDA4MTAwMTAyMTY4MTI4MDAwMDAwMDhFRAorOjEwMzUxMDAwMDIxNjgxMkMwMDAwMDAwNjAyMTY4MTMwMDAwMDAwMDcxMAorOjEwMzUyMDAwMDIxNjgxMzQwMDAwMDAwMDAyMTY4ODMwMDEwMTAxMjBEQgorOjEwMzUzMDAwMDYxNjgxMzgwMDAwMDAwNDAyMTY4ODM0MDEwMTAxMDFEQQorOjEwMzU0MDAwMDIxNjgxNDgwMDAwMDAwMDAyMTY4MTRDMDAwMDAwMDRCMQorOjEwMzU1MDAwMDIxNjgxNTAwMDAwMDAwNDAyMTY4MTU0MDAwMDAwMDI4RgorOjEwMzU2MDAwMDIxNjg4MzgwODAxMjAwNDAyMTY4MTU4MDAwMDAwMDU2MAorOjEwMzU3MDAwMDIxNjgxNUMwMDAwMDAwNTAyMTY4MTYwMDAwMDAwMDU1MworOjEwMzU4MDAwMDIxNjgxNjQwMDAwMDAwNTAyMTY4ODNDMjAwODEwMDEyNAorOjEwMzU5MDAwMDIxNjgxNjgwMDAwMDAwODAyMTY4MTZDMDAwMDAwMDYxNworOjEwMzVBMDAwMDIxNjgxNzAwMDAwMDAwNzAyMTY4MTc0MDAwMDAwMDFGRAorOjEwMzVCMDAwMDIxNjg4NDAwMTAxMDEyMDAyMTY4MTc4MDAwMDAwMDFGNgorOjEwMzVDMDAwMDIxNjgxN0MwMDAwMDAwMTAyMTY4MTgwMDAwMDAwMDFDQgorOjEwMzVEMDAwMDIxNjgxODQwMDAwMDAwMTAyMTY4ODQ0MDEwMTAxMDFFNQorOjEwMzVFMDAwMDIxNjgxODgwMDAwMDAwMTAyMTY4MThDMDAwMDAwMDQ5MAorOjEwMzVGMDAwMDIxNjgxOTAwMDAwMDAwNDAyMTY4MTk0MDAwMDAwMDI2RgorOjEwMzYwMDAwMDIxNjg4NDgwODAxMjAwNDAyMTY4MTk4MDAwMDAwMDU2RgorOjEwMzYxMDAwMDIxNjgxOUMwMDAwMDAwNTAyMTY4MUEwMDAwMDAwMDUzMgorOjEwMzYyMDAwMDIxNjgxQTQwMDAwMDAwNTAyMTY4ODE0MjAwODEwMDE2QgorOjEwMzYzMDAwMDIxNjgxQTgwMDAwMDAwODAyMTY4MUFDMDAwMDAwMDZGNgorOjEwMzY0MDAwMDIxNjgxQjAwMDAwMDAwNzAyMTY4MUI0MDAwMDAwMDFEQworOjEwMzY1MDAwMDIxNjg4MTgwMTAxMDEyMDAyMTY4MUI4MDAwMDAwMDEzRAorOjEwMzY2MDAwMDIxNjgxQkMwMDAwMDAwMTAyMTY4MUMwMDAwMDAwMDFBQQorOjEwMzY3MDAwMDIxNjgxQzQwMDAwMDAwMTAyMTY4ODFDMDEwMTAxMDEyQworOjEwMzY4MDAwMDIxNjgxQzgwMDAwMDAwMTAyMTY4MUNDMDAwMDAwMDQ2RgorOjEwMzY5MDAwMDIxNjgxRDAwMDAwMDAwNDAyMTY4MUQ0MDAwMDAwMDI0RQorOjEwMzZBMDAwMDIxNjg4MjAwODAxMjAwNDAyMTY4MUQ4MDAwMDAwMDVCNworOjEwMzZCMDAwMDIxNjgxREMwMDAwMDAwNTAyMTY4MUUwMDAwMDAwMDUxMgorOjEwMzZDMDAwMDIxNjgxRTQwMDAwMDAwNTAyMTY4ODI0MjAwODEwMDE3QgorOjEwMzZEMDAwMDIxNjgxRTgwMDAwMDAwODAyMTY4MUVDMDAwMDAwMDZENgorOjEwMzZFMDAwMDIxNjgxRjAwMDAwMDAwNzAyMTZFNDBDMDAwMDAwMDA0MgorOjEwMzZGMDAwMDIxNjg4MjgwMTAxMDEyMDA2MTZFNDEwMDAwMDAwMDRDQgorOjEwMzcwMDAwMDIxNkUwMDAwMTAxMDEwMTAyMTZFNDIwMDAwMDAwMDBBMQorOjEwMzcxMDAwMDIxNkU0MjQwMDAwMDAwNDAyMTZFNDI4MDAwMDAwMDQ1RAorOjEwMzcyMDAwMDIxNkU0MkMwMDAwMDAwMjAyMTZFMDA0MDgwMTIwMDQ0NgorOjEwMzczMDAwMDIxNkU0MzAwMDAwMDAwNTAyMTZFNDM0MDAwMDAwMDUyMworOjEwMzc0MDAwMDIxNkU0MzgwMDAwMDAwNTAyMTZFNDNDMDAwMDAwMDUwMworOjEwMzc1MDAwMDIxNkUwMDgyMDA4MTAwMTAyMTZFNDQwMDAwMDAwMDhFQworOjEwMzc2MDAwMDIxNkU0NDQwMDAwMDAwNjAyMTZFNDQ4MDAwMDAwMDdDOAorOjEwMzc3MDAwMDIxNkU0NEMwMDAwMDAwMDAyMTZFMDBDMDEwMTAxMjBEQQorOjEwMzc4MDAwMDYxNkU0NTAwMDAwMDAwNDAyMTZFMDEwMDEwMTAxMDFEOQorOjEwMzc5MDAwMDIxNkU0NjAwMDAwMDAwMDAyMTZFNDY0MDAwMDAwMDQ2OQorOjEwMzdBMDAwMDIxNkU0NjgwMDAwMDAwNDAyMTZFNDZDMDAwMDAwMDI0NworOjEwMzdCMDAwMDIxNkUwMTQwODAxMjAwNDAyMTZFNDcwMDAwMDAwMDU1RgorOjEwMzdDMDAwMDIxNkU0NzQwMDAwMDAwNTAyMTZFNDc4MDAwMDAwMDUwQgorOjEwMzdEMDAwMDIxNkU0N0MwMDAwMDAwNTAyMTZFMDE4MjAwODEwMDEyMworOjEwMzdFMDAwMDIxNkU0ODAwMDAwMDAwODAyMTZFNDg0MDAwMDAwMDZDRgorOjEwMzdGMDAwMDIxNkU0ODgwMDAwMDAwNzAyMTZFNDhDMDAwMDAwMDFCNQorOjEwMzgwMDAwMDIxNkUwMUMwMTAxMDEyMDAyMTZFNDkwMDAwMDAwMDFGNAorOjEwMzgxMDAwMDIxNkU0OTQwMDAwMDAwMTAyMTZFNDk4MDAwMDAwMDE4MgorOjEwMzgyMDAwMDIxNkU0OUMwMDAwMDAwMTAyMTZFMDIwMDEwMTAxMDFFMworOjEwMzgzMDAwMDIxNkU0QTAwMDAwMDAwMTAyMTZFNEE0MDAwMDAwMDQ0NworOjEwMzg0MDAwMDIxNkU0QTgwMDAwMDAwNDAyMTZFNEFDMDAwMDAwMDIyNgorOjEwMzg1MDAwMDIxNkUwMjQwODAxMjAwNDAyMTZFNEIwMDAwMDAwMDU2RQorOjEwMzg2MDAwMDIxNkU0QjQwMDAwMDAwNTAyMTZFNEI4MDAwMDAwMDVFQQorOjEwMzg3MDAwMDIxNkU0QkMwMDAwMDAwNTAyMTZFMDI4MjAwODEwMDEzMgorOjEwMzg4MDAwMDIxNkU0QzAwMDAwMDAwODAyMTZFNEM0MDAwMDAwMDZBRQorOjEwMzg5MDAwMDIxNkU0QzgwMDAwMDAwNzAyMTZFNENDMDAwMDAwMDE5NAorOjEwMzhBMDAwMDIxNkUwMkMwMTAxMDEyMDAyMTZFNEQwMDAwMDAwMDEwNAorOjEwMzhCMDAwMDIxNkU0RDQwMDAwMDAwMTAyMTZFNEQ4MDAwMDAwMDE2MgorOjEwMzhDMDAwMDIxNkU0REMwMDAwMDAwMTAyMTZFMDMwMDEwMTAxMDFGMworOjEwMzhEMDAwMDIxNkU0RTAwMDAwMDAwMTAyMTZFNEU0MDAwMDAwMDQyNworOjEwMzhFMDAwMDIxNkU0RTgwMDAwMDAwNDAyMTZFNEVDMDAwMDAwMDIwNgorOjEwMzhGMDAwMDIxNkUwMzQwODAxMjAwNDAyMTZFNEYwMDAwMDAwMDU3RQorOjEwMzkwMDAwMDIxNkU0RjQwMDAwMDAwNTAyMTZFNEY4MDAwMDAwMDVDOQorOjEwMzkxMDAwMDIxNkU0RkMwMDAwMDAwNTAyMTZFMDM4MjAwODEwMDE0MQorOjEwMzkyMDAwMDIxNkU1MDAwMDAwMDAwODAyMTZFNTA0MDAwMDAwMDY4QgorOjEwMzkzMDAwMDIxNkU1MDgwMDAwMDAwNzAyMTZFMDNDMDEwMTAxMjAyNAorOjEwMzk0MDAwMDIxNjgyNDAwMDNGMDAzRjAyMTY4MjQ0MDAwMDAwMDA0MQorOjEwMzk1MDAwMDIxNkU1MjQwMDNGMDAzRjAyMTZFNTI4MDAwMDAwMDBBMworOjEwMzk2MDAwMDIxNjgyNDgwMDAwMDAwMDAyMTY4MjRDMDAzRjAwM0YxMQorOjEwMzk3MDAwMDIxNkU1MkMwMDAwMDAwMDAyMTZFNTMwMDAzRjAwM0Y3MworOjEwMzk4MDAwMDIxNjgyNTAwMTAwMDEwMDAyMTY4MjU0MDEwMDAxMDA1QgorOjEwMzk5MDAwMDIxNkU1MzQwMTAwMDEwMDAyMTZFNTM4MDEwMDAxMDBCRAorOjEwMzlBMDAwMDYxNjgyNTgwMDAwMDAwMjAyMTZFNTNDMDAwMDAwMDBFNgorOjEwMzlCMDAwMDIxNkU1NDAwMDAwMDAwMDAyMTY4MjYwMDBDMDAwQzA1MAorOjEwMzlDMDAwMDIxNjgyNjQwMEMwMDBDMDAyMTZFNTQ0MDBDMDAwQzBCOAorOjEwMzlEMDAwMDIxNkU1NDgwMEMwMDBDMDAyMTY4MjY4MUUwMDFFMDBFNAorOjEwMzlFMDAwMDIxNjgyNkMxRTAwMUUwMDAyMTZFNTRDMUUwMDFFMDAxMAorOjEwMzlGMDAwMDIxNkU1NTAxRTAwMUUwMDAyMTY4MjcwNDAwMDQwMDBCNAorOjEwM0EwMDAwMDIxNjgyNzQ0MDAwNDAwMDAyMTZFNTU0NDAwMDQwMDA1NworOjEwM0ExMDAwMDIxNkU1NTg0MDAwNDAwMDAyMTY4Mjc4ODAwMDgwMDBCRgorOjEwM0EyMDAwMDIxNjgyN0M4MDAwODAwMDAyMTZFNTVDODAwMDgwMDAyNworOjEwM0EzMDAwMDIxNkU1NjA4MDAwODAwMDAyMTY4MjgwMjAwMDIwMDBDRgorOjEwM0E0MDAwMDIxNjgyODQyMDAwMjAwMDAyMTZFNTY0MjAwMDIwMDA3NworOjEwM0E1MDAwMDIxNkU1NjgyMDAwMjAwMDA2MTY4Mjg4MDAwMDAwMDI5OQorOjEwM0E2MDAwMDIxNkU1NkMwMDAwMDAwMDAyMTZFNTcwMDAwMDAwMDA4MAorOjEwM0E3MDAwMDIxNjgyOTAwMDAwMDAwMDAyMTY4Mjk0MDAwMDAwMDBFRQorOjEwM0E4MDAwMDIxNkU1NzQwMDAwMDAwMDAyMTZFNTc4MDAwMDAwMDA1MAorOjEwM0E5MDAwMDIxNjgyOTgwMDAwMDAwMDAyMTY4MjlDMDAwMDAwMDBCRQorOjEwM0FBMDAwMDIxNkU1N0MwMDAwMDAwMDAyMTZFNTgwMDAwMDAwMDAyMAorOjEwM0FCMDAwMDIxNjgyQTAwMDAwMDAwMDAyMTY4MkE0MDAwMDAwMDE4RAorOjEwM0FDMDAwMDYxNjgyQTgwMDAwMDAwQTAyMTY4MUY0MDAwMDBDMDgwNQorOjEwM0FEMDAwMDIxNjgxRjgwMDAwMDA0MDAyMTY4MUZDMDAwMDAxMDA3RgorOjEwM0FFMDAwMDIxNjgyMDAwMDAwMDAyMDAyMTY4MjA0MDAwMDAwMTc2NworOjEwM0FGMDAwMDIxNjgyMDgwMDAwMDA4MDAyMTY4MjBDMDAwMDAyMDBGQworOjEwM0IwMDAwMDIxNjgyMTAwMDAwMDAwMDAyMTY4MjE4MDFGRjAxRkY1OQorOjEwM0IxMDAwMDIxNjgyMTQwMUZGMDFGRjAyMTZFNTEwMDFGRjAxRkZFQQorOjEwM0IyMDAwMDIxNkU1MEMwMUZGMDFGRjAyMTY4MjNDMDAwMDAwMTNBMworOjEwM0IzMDAwMDIxNjgwOTAwMDAwMDEzRjAyMTY4MDYwMDAwMDAxNDBFNAorOjEwM0I0MDAwMDIxNjgwNjQwMDAwMDE0MDA2MTY4MDY4MDAwMDAwMDIzMgorOjEwM0I1MDAwMDIxNjgwNzAwMDAwMDBDMDA2MTY4MDc0MDAwMDAwMDc4NgorOjEwM0I2MDAwMDIxNjgwOUMwMDAwMDA0ODAyMTY4MEEwMDAwMDAwNDg1OQorOjEwM0I3MDAwMDYxNjgwQTQwMDAwMDAwMjAyMTY4MEFDMDAwMDAwNDg3NworOjEwM0I4MDAwMDYxNjgwQjAwMDAwMDAwNzAyMTY4MjM4MDAwMDgwMDA5MAorOjEwM0I5MDAwMDIxNjgyMzQwMDAwMjVFNDAyMTY4MDk0MDAwMDdGRkZBNAorOjEwM0JBMDAwMDIxNjgyMjAwMDBGMDAwRjAyMTY4MjFDMDAwRjAwMEY2OQorOjEwM0JCMDAwMDIxNkU1MTgwMDBGMDAwRjAyMTZFNTE0MDAwRjAwMEZBMworOjEwM0JDMDAwMDIxNjgyMjgwMDAwMDAwMDAyMTY4MjI0RkZGRkZGRkY3OQorOjEwM0JEMDAwMDIxNkU1MjAwMDAwMDAwMDAyMTZFNTFDRkZGRkZGRkZCMworOjEwM0JFMDAwMDIxNkU2QkMwMDAwMDAwMDAyMTZFNkMwMDAwMDAwMDI1QgorOjEwM0JGMDAwMDIxNkU2QzQwMDAwMDAwMTAyMTZFNkM4MDAwMDAwMDMzOQorOjEwM0MwMDAwMDIxNkU2Q0MwMDAwMDAwNDAyMTZFNkQwMDAwMDAwMDYxMgorOjEwM0MxMDAwMDIxNkU2RDQwMDAwMDAwNTAyMTZFNkQ4MDAwMDAwMDdGMAorOjEwM0MyMDAwMDIxNjgwRUMwMDAwMDBGRjAyMTQwMDAwMDAwMDAwMDFGQQorOjEwM0MzMDAwMDIxNDAwMEMwMDAwMDAwMTAyMTQwMDQwMDAwMDAwMDEwQQorOjEwM0M0MDAwMDIxNDAwNDQwMDAwN0ZGRjAyMTQwMDBDMDAwMDAwMDA3QQorOjEwM0M1MDAwMDIxNDAwMDAwMDAwMDAwMDAyMTQwMDZDMDAwMDAwMDBDQworOjEwM0M2MDAwMDIxNDAwMDQwMDAwMDAwMTAyMTQwMDMwMDAwMDAwMDFGMgorOjEwM0M3MDAwMDIxNDAwMDQwMDAwMDAwMDAyMTQwMDVDMDAwMDAwMDBCOAorOjEwM0M4MDAwMDIxNDAwMDgwMDAwMDAwMTAyMTQwMDM0MDAwMDAwMDFDQQorOjEwM0M5MDAwMDIxNDAwMDgwMDAwMDAwMDAyMTQwMDYwMDAwMDAwMDA5MAorOjEwM0NBMDAwMDYwMjgwMDAwMDAwMjAwMDAyMDIwMDU4MDAwMDAwMzJERQorOjEwM0NCMDAwMDIwMjAwQTAwMzE1MDAyMDAyMDIwMEE0MDMxNTAwMjA0OAorOjEwM0NDMDAwMDIwMjAwQTgwMTAwMDAzMDAyMDIwMEFDMDgxMDAwMDA0RgorOjEwM0NEMDAwMDIwMjAwQjAwMDAwMDAzMzAyMDIwMEI0MDAwMDAwMzAxNQorOjEwM0NFMDAwMDIwMjAwQjgwMDAwMDAzMTAyMDIwMEJDMDAwMDAwMDMyNAorOjEwM0NGMDAwMDIwMjAwQzAwMDAwMDAwNjAyMDIwMEM0MDAwMDAwMDMyRgorOjEwM0QwMDAwMDIwMjAwQzgwMDAwMDAwMzAyMDIwMENDMDAwMDAwMDIxMgorOjEwM0QxMDAwMDIwMjAwRDAwMDAwMDAwMDAyMDIwMEQ0MDAwMDAwMDJGNQorOjEwM0QyMDAwMDIwMjAwREMwMDAwMDAwMDAyMDIwMEUwMDAwMDAwMDZDOQorOjEwM0QzMDAwMDIwMjAwRTQwMDAwMDAwNDAyMDIwMEU4MDAwMDAwMDJBOQorOjEwM0Q0MDAwMDIwMjAwRUMwMDAwMDAwMjAyMDIwMEYwMDAwMDAwMDE4QworOjEwM0Q1MDAwMDIwMjAwRkMwMDAwMDAwNjAyMDIwMTIwMDAwMDAwMDAzOAorOjEwM0Q2MDAwMDIwMjAxMzQwMDAwMDAwMjAyMDIwMUIwMDAwMDAwMDE2MgorOjEwM0Q3MDAwMDIwMjAyMEMwMDAwMDAwMTAyMDIwMjE0MDAwMDAwMDExNQorOjEwM0Q4MDAwMDIwMjAyMTgwMDAwMDAwMjAyMDIwNDA0MDAwMDAwMDEwNgorOjEwM0Q5MDAwMDIwMjA0MEMwMDAwMDA0MDAyMDIwNDEwMDAwMDAwNDA3NworOjEwM0RBMDAwMDIwMjA0MUMwMDAwMDAwNDAyMDIwNDIwMDAwMDAwMjBBMworOjEwM0RCMDAwMDIwMjA0MjQwMDAwMDAwMjAyMDIwNDI4MDAwMDAwMjA4NQorOjEwM0RDMDAwMDYwMjA1MDAwMDAwMDAxMjA0MDIwNDgwMDAyMDA0QUE3QworOjEwM0REMDAwMDIwMjAwNjAwMDAwMDAwRjAyMDIwMDY0MDAwMDAwMDcwMQorOjEwM0RFMDAwMDIwMjAwNjgwMDAwMDAwMDAyMDIwMDZDMDAwMDAwMEVFOQorOjEwM0RGMDAwMDIwMjAwNzAwMDAwMDAwRTA2MDIwMDc0MDAwMDAwMDNDMgorOjEwM0UwMDAwMDIwMjAwRjQwMDAwMDAwNDAyMDIwMDA0MDAwMDAwMDFBRAorOjEwM0UxMDAwMDIwMjAwMDgwMDAwMDAwMTAyMDIwMDBDMDAwMDAwMDE4NAorOjEwM0UyMDAwMDIwMjAwMTAwMDAwMDAwMTAyMDIwMDE0MDAwMDAwMDE2NAorOjEwM0UzMDAwMDIwMjAwMTgwMDAwMDAwMTAyMDIwMDFDMDAwMDAwMDE0NAorOjEwM0U0MDAwMDIwMjAwMjAwMDAwMDAwMTAyMDIwMDI0MDAwMDAwMDEyNAorOjEwM0U1MDAwMDIwMjAwMjgwMDAwMDAwMTAyMDIwMDJDMDAwMDAwMDEwNAorOjEwM0U2MDAwMDIwMjAwMzAwMDAwMDAwMTAyMDIwMDM0MDAwMDAwMDFFNAorOjEwM0U3MDAwMDIwMjAwMzgwMDAwMDAwMTAyMDIwMDNDMDAwMDAwMDFDNAorOjEwM0U4MDAwMDIwMjAwNDAwMDAwMDAwMTAyMDIwMDQ0MDAwMDAwMDFBNAorOjEwM0U5MDAwMDIwMjAwNDgwMDAwMDAwMTAyMDIwMDRDMDAwMDAwMDE4NAorOjEwM0VBMDAwMDIwMjAwNTAwMDAwMDAwMTAyMDIwMTA4MDAwMDAwQzhFOAorOjEwM0VCMDAwMDIwMjAxMTgwMDAwMDAwMjAyMDIwMUM0MDAwMDAwMDAxQQorOjEwM0VDMDAwMDIwMjAxQ0MwMDAwMDAwMDAyMDIwMUQ0MDAwMDAwMDI0NgorOjEwM0VEMDAwMDIwMjAxREMwMDAwMDAwMjAyMDIwMUU0MDAwMDAwRkYxNworOjEwM0VFMDAwMDIwMjAxRUMwMDAwMDBGRjAyMDIwMTAwMDAwMDAwMDBERAorOjEwM0VGMDAwMDIwMjAxMEMwMDAwMDBDODAyMDIwMTFDMDAwMDAwMDJDNgorOjEwM0YwMDAwMDIwMjAxQzgwMDAwMDAwMDAyMDIwMUQwMDAwMDAwMDAwRgorOjEwM0YxMDAwMDIwMjAxRDgwMDAwMDAwMjAyMDIwMUUwMDAwMDAwMDJEQgorOjEwM0YyMDAwMDIwMjAxRTgwMDAwMDBGRjAyMDIwMUYwMDAwMDAwRkZCMQorOjEwM0YzMDAwMDIwMjAxMDQwMDAwMDAwMDAyMDIwMTA4MDAwMDAwQzhBMworOjEwM0Y0MDAwMDIwMjAxMTgwMDAwMDAwMjAyMDIwMUM0MDAwMDAwMDA4OQorOjEwM0Y1MDAwMDIwMjAxQ0MwMDAwMDAwMDAyMDIwMUQ0MDAwMDAwMDJCNQorOjEwM0Y2MDAwMDIwMjAxREMwMDAwMDAwMjAyMDIwMUU0MDAwMDAwRkY4NgorOjEwM0Y3MDAwMDIwMjAxRUMwMDAwMDBGRjAyMDIwMTAwMDAwMDAwMDA0QworOjEwM0Y4MDAwMDIwMjAxMEMwMDAwMDBDODAyMDIwMTFDMDAwMDAwMDIzNQorOjEwM0Y5MDAwMDIwMjAxQzgwMDAwMDAwMDAyMDIwMUQwMDAwMDAwMDA3RgorOjEwM0ZBMDAwMDIwMjAxRDgwMDAwMDAwMjAyMDIwMUUwMDAwMDAwMDI0QgorOjEwM0ZCMDAwMDIwMjAxRTgwMDAwMDBGRjAyMDIwMUYwMDAwMDAwRkYyMQorOjEwM0ZDMDAwMDIwMjAxMDQwMDAwMDAwMDAyMDIwMTA4MDAwMDAwQzgxMworOjEwM0ZEMDAwMDIwMjAxMTgwMDAwMDAwMjAyMDIwMUM0MDAwMDAwMDBGOQorOjEwM0ZFMDAwMDIwMjAxQ0MwMDAwMDAwMDAyMDIwMUQ0MDAwMDAwMDIyNQorOjEwM0ZGMDAwMDIwMjAxREMwMDAwMDAwMjAyMDIwMUU0MDAwMDAwRkZGNgorOjEwNDAwMDAwMDIwMjAxRUMwMDAwMDBGRjAyMDIwMTAwMDAwMDAwMDBCQgorOjEwNDAxMDAwMDIwMjAxMEMwMDAwMDBDODAyMDIwMTFDMDAwMDAwMDJBNAorOjEwNDAyMDAwMDIwMjAxQzgwMDAwMDAwMDAyMDIwMUQwMDAwMDAwMDBFRQorOjEwNDAzMDAwMDIwMjAxRDgwMDAwMDAwMjAyMDIwMUUwMDAwMDAwMDJCQQorOjEwNDA0MDAwMDIwMjAxRTgwMDAwMDBGRjAyMDIwMUYwMDAwMDAwRkY5MAorOjEwNDA1MDAwMDIwMjAxMDQwMDAwMDAwMDAyMDIwMTA4MDAwMDAwQzg4MgorOjEwNDA2MDAwMDIwMjAxMTgwMDAwMDAwMjAyMDIwMUM0MDAwMDAwMDA2OAorOjEwNDA3MDAwMDIwMjAxQ0MwMDAwMDAwMDAyMDIwMUQ0MDAwMDAwMDI5NAorOjEwNDA4MDAwMDIwMjAxREMwMDAwMDAwMjAyMDIwMUU0MDAwMDAwRkY2NQorOjEwNDA5MDAwMDIwMjAxRUMwMDAwMDBGRjAyMDIwMTAwMDAwMDAwMDAyQgorOjEwNDBBMDAwMDIwMjAxMEMwMDAwMDBDODAyMDIwMTFDMDAwMDAwMDIxNAorOjEwNDBCMDAwMDIwMjAxQzgwMDAwMDAwMDAyMDIwMUQwMDAwMDAwMDA1RQorOjEwNDBDMDAwMDIwMjAxRDgwMDAwMDAwMjAyMDIwMUUwMDAwMDAwMDIyQQorOjEwNDBEMDAwMDIwMjAxRTgwMDAwMDBGRjAyMDIwMUYwMDAwMDAwRkYwMAorOjEwNDBFMDAwMDIwMjAxMDQwMDAwMDAwMDA3MjgwNDAwMDBBMzAwMDBGMQorOjEwNDBGMDAwMDgyODA3QjgwMDA5MDRDQTA3MkMwMDAwMzRGMTAwMDBBMgorOjEwNDEwMDAwMDcyQzgwMDAzOEE2MEQzRDA3MkQwMDAwMzdCNjFCNjczMQorOjEwNDExMDAwMDcyRDgwMDAzMjYzMjk1NTA3MkUwMDAwMUM2ODM1RUVGQworOjEwNDEyMDAwMDgyRTQ4QjAzNkVBMDRDQzAxMjgwMDAwMDAwMDAwMDA0OAorOjEwNDEzMDAwMDEyODAwMDQwMDAwMDAwMDAxMjgwMDA4MDAwMDAwMDAyMQorOjEwNDE0MDAwMDEyODAwMEMwMDAwMDAwMDAxMjgwMDEwMDAwMDAwMDAwMQorOjEwNDE1MDAwMDEyODAwMTQwMDAwMDAwMDAyMjgwMDIwMDAwMDAwMDFENworOjEwNDE2MDAwMDIyODAwMjQwMDAwMDAwMjAyMjgwMDI4MDAwMDAwMDNBQQorOjEwNDE3MDAwMDIyODAwMkMwMDAwMDAwMDAyMjgwMDMwMDAwMDAwMDQ4QgorOjEwNDE4MDAwMDIyODAwMzQwMDAwMDAwMTAyMjgwMDM4MDAwMDAwMDA2RQorOjEwNDE5MDAwMDIyODAwM0MwMDAwMDAwMTAyMjgwMDQwMDAwMDAwMDQ0QQorOjEwNDFBMDAwMDIyODAwNDQwMDAwMDAwMDAyMjgwMDQ4MDAwMDAwMDEyRQorOjEwNDFCMDAwMDIyODAwNEMwMDAwMDAwMzAyMjgwMDUwMDAwMDAwMDAwQworOjEwNDFDMDAwMDIyODAwNTQwMDAwMDAwMTAyMjgwMDU4MDAwMDAwMDRFQQorOjEwNDFEMDAwMDIyODAwNUMwMDAwMDAwMDAyMjgwMDYwMDAwMDAwMDFDRQorOjEwNDFFMDAwMDIyODAwNjQwMDAwMDAwMzAyMjgwMDY4MDAwMDAwMDBBQworOjEwNDFGMDAwMDIyODAwNkMwMDAwMDAwMTAyMjgwMDcwMDAwMDAwMDQ4QQorOjEwNDIwMDAwMDIyODAwNzQwMDAwMDAwMDAyMjgwMDc4MDAwMDAwMDQ2QQorOjEwNDIxMDAwMDIyODAwN0MwMDAwMDAwMzA2MjgwMDgwMDAwMDAwMDI0NQorOjEwNDIyMDAwMDIyODAwQTQwMDAwM0ZGRjAyMjgwMEE4MDAwMDAzRkZBRQorOjEwNDIzMDAwMDIyODAyMjQwMDAwMDAwMDAyMjgwMjM0MDAwMDAwMDBDRQorOjEwNDI0MDAwMDIyODAyNEMwMDAwMDAwMDAyMjgwMkU0MDAwMEZGRkZFOAorOjEwNDI1MDAwMDYyODIwMDAwMDAwMDgwMDAyMkI4QkMwMDAwMDAwMDE4RgorOjEwNDI2MDAwMDIyQjgwMDAwMDAwMDAwMDAyMkI4MDQwMDAwMDAwMTg5QworOjEwNDI3MDAwMDIyQjgwODAwMDAwMDAwQzAyMkI4MEMwMDAwMDAwNjYzMgorOjEwNDI4MDAwMEMyQjgzMDAwMDA3QTEyMDBBMkI4MzAwMDAwMDAxMzhCQgorOjEwNDI5MDAwMEIyQjgzMDAwMDAwMTM4ODBBMkI4MzQwMDAwMDAwMDBEMgorOjEwNDJBMDAwMEMyQjgzNDAwMDAwMDFGNDBCMkI4MzQwMDAwMDAwMDUyMQorOjEwNDJCMDAwMDIyQjgzODAwMDA3QTEyMDAyMkI4M0MwMDAwMDAxRjRBMQorOjEwNDJDMDAwMDIyQjE0ODAwMDAwMDAwMTBBMkIxNDgwMDAwMDAwMDA2MworOjEwNDJEMDAwMDYyQTlBRjgwMDAwMDAwNDA0MkE5QjA4MDAwMjA0Q0U3MworOjEwNDJFMDAwMDYyQTlCMTAwMDAwMDAwNjA2MkE5MDgwMDAwMDAwNDg2NQorOjEwNDJGMDAwMDYyQTIwMDgwMDAwMDBDODA2MkEyMDAwMDAwMDAwMDI0QworOjEwNDMwMDAwMDYyQTkxQTgwMDAwMDA4NjA2MkE5MDAwMDAwMDAwMjBERQorOjEwNDMxMDAwMDYyQTkzQzgwMDAwMDAwMzA0MkE5M0Q0MDAwMTA0RDBBNQorOjEwNDMyMDAwMDYyQTlEQTgwMDAwMDAwMjA0MkE5NDk4MDAwNDA0RDFFMworOjEwNDMzMDAwMDQyQTlENTgwMDAxMDRENTA2MkE5RDVDMDAwMDAwMTE0NgorOjEwNDM0MDAwMDQyQUNCMjAwMDEwMDRENjA0MkEzMDAwMDAwMjA0RTYyMAorOjEwNDM1MDAwMDYyQTMwMDgwMDAwMDEwMDA2MkE0MDQwMDAwMDAwMTAzNAorOjEwNDM2MDAwMDQyQTQwMDAwMDEwMDRFODA0MkE4NDA4MDAwMjA0RjgyQgorOjEwNDM3MDAwMDYyQTlEQTAwMDAwMDAwMjA2MkFCMDAwMDAwMDAwNTA5RQorOjEwNDM4MDAwMDYyQUJCNzAwMDAwMDA3MDA2MkFCMTUwMDAwMDAwMDIyRgorOjEwNDM5MDAwMDYyQUJCNjAwMDAwMDAwNDA2MkFEMDAwMDAwMDA4MDBDNgorOjEwNDNBMDAwMDYyQUMwMDAwMDAwMDE1MDA2MkE5NEE4MDAwMDAwMzIyRQorOjEwNDNCMDAwMDYyQTUwMjAwMDAwMDAwMjA2MkE1MDMwMDAwMDAwMDJBOQorOjEwNDNDMDAwMDYyQTUwMDAwMDAwMDAwMjA2MkE1MDEwMDAwMDAwMDJEOQorOjEwNDNEMDAwMDIyQTUyMDgwMDAwMDAwMTA0MkE5QjI4MDAwMjA0RkE2NQorOjEwNDNFMDAwMDYyQTk2MzgwMDAwMDAyMjA0MkE5NkMwMDAwMTA0RkMyOAorOjEwNDNGMDAwMDYyQTk2QzQwMDAwMDAwMzA2MkE5NzY4MDAwMDAwMjJERgorOjEwNDQwMDAwMDQyQTk3RjAwMDAxMDRGRDA2MkE5N0Y0MDAwMDAwMDMzNworOjEwNDQxMDAwMDYyQTk4OTgwMDAwMDAyMjA0MkE5OTIwMDAwMTA0RkUzMAorOjEwNDQyMDAwMDYyQTk5MjQwMDAwMDAwMzA2MkE5OUM4MDAwMDAwMjJFOQorOjEwNDQzMDAwMDQyQTlBNTAwMDAxMDRGRjA2MkE5QTU0MDAwMDAwMDMzRgorOjEwNDQ0MDAwMDYyQUIxNDAwMDAwMDAwMjA2MkFDNTQwMDAwMDAxNTBDMworOjEwNDQ1MDAwMDYyQTk1NzAwMDAwMDAzMjA2MkE1MDI4MDAwMDAwMDI0QgorOjEwNDQ2MDAwMDYyQTUwMzgwMDAwMDAwMjA2MkE1MDA4MDAwMDAwMDIwOAorOjEwNDQ3MDAwMDYyQTUwMTgwMDAwMDAwMjAyMkE1MjBDMDAwMDAwMDExNworOjEwNDQ4MDAwMDQyQTlCMzAwMDAyMDUwMDA2MkE5NkQwMDAwMDAwMjI3NAorOjEwNDQ5MDAwMDQyQTk3NTgwMDAxMDUwMjA2MkE5NzVDMDAwMDAwMDNEMQorOjEwNDRBMDAwMDYyQTk4MDAwMDAwMDAyMjA0MkE5ODg4MDAwMTA1MDNDQgorOjEwNDRCMDAwMDYyQTk4OEMwMDAwMDAwMzA2MkE5OTMwMDAwMDAwMjI4QQorOjEwNDRDMDAwMDQyQTk5QjgwMDAxMDUwNDA2MkE5OUJDMDAwMDAwMDNEQgorOjEwNDREMDAwMDYyQTlBNjAwMDAwMDAyMjA0MkE5QUU4MDAwMTA1MDVENQorOjEwNDRFMDAwMDYyQTlBRUMwMDAwMDAwMzA2MkFCMTQ4MDAwMDAwMDJFOAorOjEwNDRGMDAwMDIyQUNBODAwMDAwMDAwMDA0MkE5QjM4MDAxMDA1MDYyQQorOjEwNDUwMDAwMDYyQTUwNDgwMDAwMDAwRTAyMkFDQTg0MDAwMDAwMDA1QgorOjEwNDUxMDAwMDQyQTlCNzgwMDEwMDUxNjA2MkE1MDgwMDAwMDAwMEUyMQorOjEwNDUyMDAwMDIyQUNBODgwMDAwMDAwMDA0MkE5QkI4MDAxMDA1MjY1MQorOjEwNDUzMDAwMDYyQTUwQjgwMDAwMDAwRTAyMkFDQThDMDAwMDAwMDBCMworOjEwNDU0MDAwMDQyQTlCRjgwMDEwMDUzNjA2MkE1MEYwMDAwMDAwMEVFMQorOjEwNDU1MDAwMDIyQUNBOTAwMDAwMDAwMDA0MkE5QzM4MDAxMDA1NDY3OAorOjEwNDU2MDAwMDYyQTUxMjgwMDAwMDAwRTAyMkFDQTk0MDAwMDAwMDAwQQorOjEwNDU3MDAwMDQyQTlDNzgwMDEwMDU1NjA2MkE1MTYwMDAwMDAwMEU5RgorOjEwNDU4MDAwMDIyQUNBOTgwMDAwMDAwMDA0MkE5Q0I4MDAxMDA1NjZBMAorOjEwNDU5MDAwMDYyQTUxOTgwMDAwMDAwRTAyMkFDQTlDMDAwMDAwMDA2MgorOjEwNDVBMDAwMDQyQTlDRjgwMDEwMDU3NjA2MkE1MUQwMDAwMDAwMEU1RgorOjEwNDVCMDAwMDIxMDEwMDgwMDAwMDAwMTAyMTAxMDUwMDAwMDAwMDE1RAorOjEwNDVDMDAwMDIxMDEwMDAwMDAzRDAwMDAyMTAxMDA0MDAwMDAwM0Q5MworOjEwNDVEMDAwMDkxMDE4MDAwMjAwMDU4NjA5MTAxMTAwMDAxMDA3ODY1NgorOjEwNDVFMDAwMDYxMDExNDAwMDAwMDAwODA5MTAxMTYwMDAxMDA3OTYyNQorOjEwNDVGMDAwMDYxMDExQTAwMDAwMDAxODA2MTAyNDAwMDAwMDAwRTBDMgorOjEwNDYwMDAwMDIxMDIwMUMwMDAwMDAwMDAyMTAyMDIwMDAwMDAwMDEwOQorOjEwNDYxMDAwMDIxMDIwQzAwMDAwMDAwMjAyMTAyMDA0MDAwMDAwMDE2RgorOjEwNDYyMDAwMDIxMDIwMDgwMDAwMDAwMTA5MTAzQzAwMDAwNTA3QTY0OAorOjEwNDYzMDAwMDkxMDM4MDAwMDA1MDdBQjA5MTAzODIwMDAwNTA3QjA0NQorOjEwNDY0MDAwMDYxMDRDMDAwMDAwMDEwMDAyMTA0MDI4MDAwMDAwMTA3RAorOjEwNDY1MDAwMDIxMDQwNDQwMDAwM0ZGRjAyMTA0MDU4MDAyODAwMDBCNAorOjEwNDY2MDAwMDIxMDQwODQwMDg0OTI0QTAyMTA0MDU4MDAwMDAwMDA2QQorOjEwNDY3MDAwMDIxMDgwMDAwMDAwMTA4MDAyMTA4MEFDMDAwMDAwMDBEQQorOjEwNDY4MDAwMDIxMDgwMzgwMDAwMDAxMDAyMTA4MTAwMDAwMDAwMDBCRAorOjEwNDY5MDAwMDYxMDgxMjAwMDAwMDAwMjAyMTA4MDA4MDAwMDAyQjUxMAorOjEwNDZBMDAwMDIxMDgwMTAwMDAwMDAwMDA2MTA4MjAwMDAwMDAwNEE4NgorOjEwNDZCMDAwMDIxMDgxMDgwMDAxRkZGRjA2MTA4MTQwMDAwMDAwMDI4NworOjEwNDZDMDAwMDIxMDgwMDAwMDAwMUE4MDA2MTA5MDAwMDAwMDAwMjRGNAorOjEwNDZEMDAwMDYxMDkxMjAwMDAwMDA0QTA2MTA5MzcwMDAwMDAwNEE2NgorOjEwNDZFMDAwMDYxMDk1QzAwMDAwMDA0QTAyMTA4MDA0MDAwMDEwODBFRgorOjEwNDZGMDAwMDIxMDgwQjAwMDAwMDAwMTAyMTA4MDNDMDAwMDAwMTA5OQorOjEwNDcwMDAwMDIxMDgxMDQwMDAwMDAwMDA2MTA4MTI4MDAwMDAwMDI1MQorOjEwNDcxMDAwMDIxMDgwMEMwMDAwMDJCNTAyMTA4MDE0MDAwMDAwMDA5RQorOjEwNDcyMDAwMDYxMDg0MDAwMDAwMDA0QTAyMTA4MTBDMDAwMUZGRkYwNworOjEwNDczMDAwMDYxMDgxNDgwMDAwMDAwMjAyMTA4MDA0MDAwMDFBODA2OAorOjEwNDc0MDAwMDYxMDkwOTAwMDAwMDAyNDA2MTA5MjQ4MDAwMDAwNEFENQorOjEwNDc1MDAwMDYxMDk0OTgwMDAwMDA0QTA2MTA5NkU4MDAwMDAwNEFFRgorOjEwNDc2MDAwMDIxMDgwMDAwMDAwMTA4MDAyMTA4MEFDMDAwMDAwMDJFNworOjEwNDc3MDAwMDIxMDgwMzgwMDAwMDAxMDAyMTA4MTAwMDAwMDAwMDBDQworOjEwNDc4MDAwMDYxMDgxMjAwMDAwMDAwMjAyMTA4MDA4MDAwMDAyQjUxRgorOjEwNDc5MDAwMDIxMDgwMTAwMDAwMDAwMDA2MTA4MjAwMDAwMDAwNEE5NQorOjEwNDdBMDAwMDIxMDgxMDgwMDAxRkZGRjA2MTA4MTQwMDAwMDAwMDI5NgorOjEwNDdCMDAwMDIxMDgwMDAwMDAwMUE4MDA2MTA5MDAwMDAwMDAwMjQwMworOjEwNDdDMDAwMDYxMDkxMjAwMDAwMDA0QTA2MTA5MzcwMDAwMDAwNEE3NQorOjEwNDdEMDAwMDYxMDk1QzAwMDAwMDA0QTAyMTA4MDA0MDAwMDEwODBGRQorOjEwNDdFMDAwMDIxMDgwQjAwMDAwMDAwMzAyMTA4MDNDMDAwMDAwMTBBNgorOjEwNDdGMDAwMDIxMDgxMDQwMDAwMDAwMDA2MTA4MTI4MDAwMDAwMDI2MQorOjEwNDgwMDAwMDIxMDgwMEMwMDAwMDJCNTAyMTA4MDE0MDAwMDAwMDBBRAorOjEwNDgxMDAwMDYxMDg0MDAwMDAwMDA0QTAyMTA4MTBDMDAwMUZGRkYxNgorOjEwNDgyMDAwMDYxMDgxNDgwMDAwMDAwMjAyMTA4MDA0MDAwMDFBODA3NworOjEwNDgzMDAwMDYxMDkwOTAwMDAwMDAyNDA2MTA5MjQ4MDAwMDAwNEFFNAorOjEwNDg0MDAwMDYxMDk0OTgwMDAwMDA0QTA2MTA5NkU4MDAwMDAwNEFGRQorOjEwNDg1MDAwMDIxMDgwMDAwMDAwMTA4MDAyMTA4MEFDMDAwMDAwMDRGNAorOjEwNDg2MDAwMDIxMDgwMzgwMDAwMDAxMDAyMTA4MTAwMDAwMDAwMDBEQgorOjEwNDg3MDAwMDYxMDgxMjAwMDAwMDAwMjAyMTA4MDA4MDAwMDAyQjUyRQorOjEwNDg4MDAwMDIxMDgwMTAwMDAwMDAwMDA2MTA4MjAwMDAwMDAwNEFBNAorOjEwNDg5MDAwMDIxMDgxMDgwMDAxRkZGRjA2MTA4MTQwMDAwMDAwMDJBNQorOjEwNDhBMDAwMDIxMDgwMDAwMDAwMUE4MDA2MTA5MDAwMDAwMDAwMjQxMgorOjEwNDhCMDAwMDYxMDkxMjAwMDAwMDA0QTA2MTA5MzcwMDAwMDAwNEE4NAorOjEwNDhDMDAwMDYxMDk1QzAwMDAwMDA0QTAyMTA4MDA0MDAwMDEwODAwRAorOjEwNDhEMDAwMDIxMDgwQjAwMDAwMDAwNTAyMTA4MDNDMDAwMDAwMTBCMworOjEwNDhFMDAwMDIxMDgxMDQwMDAwMDAwMDA2MTA4MTI4MDAwMDAwMDI3MAorOjEwNDhGMDAwMDIxMDgwMEMwMDAwMDJCNTAyMTA4MDE0MDAwMDAwMDBCRAorOjEwNDkwMDAwMDYxMDg0MDAwMDAwMDA0QTAyMTA4MTBDMDAwMUZGRkYyNQorOjEwNDkxMDAwMDYxMDgxNDgwMDAwMDAwMjAyMTA4MDA0MDAwMDFBODA4NgorOjEwNDkyMDAwMDYxMDkwOTAwMDAwMDAyNDA2MTA5MjQ4MDAwMDAwNEFGMworOjEwNDkzMDAwMDYxMDk0OTgwMDAwMDA0QTA2MTA5NkU4MDAwMDAwNEEwRAorOjEwNDk0MDAwMDIxMDgwMDAwMDAwMTA4MDAyMTA4MEFDMDAwMDAwMDYwMQorOjEwNDk1MDAwMDIxMDgwMzgwMDAwMDAxMDAyMTA4MTAwMDAwMDAwMDBFQQorOjEwNDk2MDAwMDYxMDgxMjAwMDAwMDAwMjAyMTA4MDA4MDAwMDAyQjUzRAorOjEwNDk3MDAwMDIxMDgwMTAwMDAwMDAwMDA2MTA4MjAwMDAwMDAwNEFCMworOjEwNDk4MDAwMDIxMDgxMDgwMDAxRkZGRjA2MTA4MTQwMDAwMDAwMDJCNAorOjEwNDk5MDAwMDIxMDgwMDAwMDAwMUE4MDA2MTA5MDAwMDAwMDAwMjQyMQorOjEwNDlBMDAwMDYxMDkxMjAwMDAwMDA0QTA2MTA5MzcwMDAwMDAwNEE5MworOjEwNDlCMDAwMDYxMDk1QzAwMDAwMDA0QTAyMTA4MDA0MDAwMDEwODAxQworOjEwNDlDMDAwMDIxMDgwQjAwMDAwMDAwNzAyMTA4MDNDMDAwMDAwMTBDMAorOjEwNDlEMDAwMDIxMDgxMDQwMDAwMDAwMDA2MTA4MTI4MDAwMDAwMDI3RgorOjEwNDlFMDAwMDIxMDgwMEMwMDAwMDJCNTAyMTA4MDE0MDAwMDAwMDBDQworOjEwNDlGMDAwMDYxMDg0MDAwMDAwMDA0QTAyMTA4MTBDMDAwMUZGRkYzNQorOjEwNEEwMDAwMDYxMDgxNDgwMDAwMDAwMjAyMTA4MDA0MDAwMDFBODA5NQorOjEwNEExMDAwMDYxMDkwOTAwMDAwMDAyNDA2MTA5MjQ4MDAwMDAwNEEwMgorOjEwNEEyMDAwMDYxMDk0OTgwMDAwMDA0QTA2MTA5NkU4MDAwMDAwNEExQworOjEwNEEzMDAwMDIxMjA1QjAwMDAwMDAwMTAyMTIwNDkwMDBFMzgzNDA1RQorOjEwNEE0MDAwMDIxMjA1MTQwMDAwM0MxMDAyMTIwNjZDMDAwMDAwMDE2NgorOjEwNEE1MDAwMDIxMjA2NzAwMDAwMDAwMDAyMTIwNDk0RkZGRkZGRkYyNAorOjEwNEE2MDAwMDIxMjA0OThGRkZGRkZGRjAyMTIwNDlDRkZGRkZGRkZFQQorOjEwNEE3MDAwMDIxMjA0QTBGRkZGRkZGRjAyMTIwNEE0RkZGRkZGRkZDQQorOjEwNEE4MDAwMDIxMjA0QThGRkZGRkZGRjAyMTIwNEFDRkZGRkZGRkZBQQorOjEwNEE5MDAwMDIxMjA0QjBGRkZGRkZGRjAyMTIwNEJDRkZGRkZGRkY4MgorOjEwNEFBMDAwMDIxMjA0QzBGRkZGRkZGRjAyMTIwNEM0RkZGRkZGRkY1QQorOjEwNEFCMDAwMDIxMjA0QzhGRkZGRkZGRjAyMTIwNENDRkZGRkZGRkYzQQorOjEwNEFDMDAwMDIxMjA0RDBGRkZGRkZGRjAyMTIwNEQ4RkZGRkZGRkYxNgorOjEwNEFEMDAwMDIxMjA0RENGRkZGRkZGRjAyMTIwNEUwRkZGRkZGRkZGMgorOjEwNEFFMDAwMDIxMjA0RTRGRkZGRkZGRjAyMTIwNEU4RkZGRkZGRkZEMgorOjEwNEFGMDAwMDIxMjA0RUNGRkZGRkZGRjAyMTIwNEYwRkZGRkZGRkZCMgorOjEwNEIwMDAwMDIxMjA0RjRGRkZGRkZGRjAyMTIwNEY4RkZGRkZGRkY5MQorOjEwNEIxMDAwMDIxMjA0RkNGRkZGRkZGRjAyMTIwNTAwRkZGRkZGRkY3MAorOjEwNEIyMDAwMDIxMjA1MDRGRkZGRkZGRjAyMTIwNTA4RkZGRkZGRkY0RgorOjEwNEIzMDAwMDIxMjA1MENGRkZGRkZGRjAyMTIwNTEwRkZGRkZGRkYyRgorOjEwNEI0MDAwMDIxMjA0RDRGRjgwOTAwMDAyMTIwNEI0RjAwMDUwMDA1RQorOjEwNEI1MDAwMDIxMjA0QjhGMDAwMTAwMDAyMTIwMzkwMDAwMDAwMDhENgorOjEwNEI2MDAwMDIxMjAzOUMwMDAwMDAwODAyMTIwM0EwMDAwMDAwMDhDQgorOjEwNEI3MDAwMDIxMjAzQTQwMDAwMDAwMjAyMTIwM0JDMDAwMDAwMDRBMQorOjEwNEI4MDAwMDIxMjAzQzAwMDAwMDAwNTAyMTIwM0M0MDAwMDAwMDQ2QQorOjEwNEI5MDAwMDIxMjAzRDAwMDAwMDAwMDAyMTIwMzZDMDAwMDAwMDFBQQorOjEwNEJBMDAwMDIxMjAzNjgwMDAwMDAzRjAyMTIwMUJDMDAwMDAwNDAzNgorOjEwNEJCMDAwMDIxMjAxQzAwMDAwMTgwODAyMTIwMUM0MDAwMDA4MDMxQworOjEwNEJDMDAwMDIxMjAxQzgwMDAwMDgwMzAyMTIwMUNDMDAwMDAwNDBEQworOjEwNEJEMDAwMDIxMjAxRDAwMDAwMDAwMzAyMTIwMUQ0MDAwMDA4MDNGOQorOjEwNEJFMDAwMDIxMjAxRDgwMDAwMDgwMzAyMTIwMURDMDAwMDA4MDNEMQorOjEwNEJGMDAwMDIxMjAxRTAwMDAxMDAwMzAyMTIwMUU0MDAwMDA4MDNCOAorOjEwNEMwMDAwMDIxMjAxRTgwMDAwMDgwMzAyMTIwMUVDMDAwMDAwMDM5OAorOjEwNEMxMDAwMDIxMjAxRjAwMDAwMDAwMzAyMTIwMUY0MDAwMDAwMDM4MAorOjEwNEMyMDAwMDIxMjAxRjgwMDAwMDAwMzAyMTIwMUZDMDAwMDAwMDM2MAorOjEwNEMzMDAwMDIxMjAyMDAwMDAwMDAwMzAyMTIwMjA0MDAwMDAwMDMzRQorOjEwNEM0MDAwMDIxMjAyMDgwMDAwMDAwMzAyMTIwMjBDMDAwMDAwMDMxRQorOjEwNEM1MDAwMDIxMjAyMTAwMDAwMDAwMzAyMTIwMjE0MDAwMDAwMDNGRQorOjEwNEM2MDAwMDIxMjAyMTgwMDAwMDAwMzAyMTIwMjFDMDAwMDAwMDNERQorOjEwNEM3MDAwMDIxMjAyMjAwMDAwMDAwMzAyMTIwMjI0MDAwMDAwMDNCRQorOjEwNEM4MDAwMDIxMjAyMjgwMDAwMjQwMzAyMTIwMjJDMDAwMDAwMkY0RQorOjEwNEM5MDAwMDIxMjAyMzAwMDAwMDAwOTAyMTIwMjM0MDAwMDAwMTk2MgorOjEwNENBMDAwMDIxMjAyMzgwMDAwMDE4NDAyMTIwMjNDMDAwMDAxODM1QgorOjEwNENCMDAwMDIxMjAyNDAwMDAwMDMwNjAyMTIwMjQ0MDAwMDAwMTkyMgorOjEwNENDMDAwMDIxMjAyNDgwMDAwMDAwNjAyMTIwMjRDMDAwMDAzMDYxNQorOjEwNENEMDAwMDIxMjAyNTAwMDAwMDMwNjAyMTIwMjU0MDAwMDAzMDZGMgorOjEwNENFMDAwMDIxMjAyNTgwMDAwMEM4NjAyMTIwMjVDMDAwMDAzMDY0OQorOjEwNENGMDAwMDIxMjAyNjAwMDAwMDMwNjAyMTIwMjY0MDAwMDAwMDZCNQorOjEwNEQwMDAwMDIxMjAyNjgwMDAwMDAwNjAyMTIwMjZDMDAwMDAwMDY5NworOjEwNEQxMDAwMDIxMjAyNzAwMDAwMDAwNjAyMTIwMjc0MDAwMDAwMDY3NworOjEwNEQyMDAwMDIxMjAyNzgwMDAwMDAwNjAyMTIwMjdDMDAwMDAwMDY1NworOjEwNEQzMDAwMDIxMjAyODAwMDAwMDAwNjAyMTIwMjg0MDAwMDAwMDYzNworOjEwNEQ0MDAwMDIxMjAyODgwMDAwMDAwNjAyMTIwMjhDMDAwMDAwMDYxNworOjEwNEQ1MDAwMDIxMjAyOTAwMDAwMDAwNjAyMTIwMjk0MDAwMDAwMDZGNworOjEwNEQ2MDAwMDIxMjAyOTgwMDAwMDAwNjAyMTIwMjlDMDAwMDAwMDZENworOjEwNEQ3MDAwMDIxMjAyQTAwMDAwMDMwNjAyMTIwMkE0MDAwMDAwMTNBNworOjEwNEQ4MDAwMDIxMjAyQTgwMDAwMDAwNjAyMTIwMkIwMDAwMDEwMDQ4NQorOjEwNEQ5MDAwMDIxMjAyQjQwMDAwMTAwNDAyMTIwMzI0MDAxMDY0NDA0NgorOjEwNERBMDAwMDIxMjAzMjgwMDEwNjQ0MDAyMTIwNUI0MDAwMDAwMDE0MgorOjEwNERCMDAwMDIxMjAxQjAwMDAwMDAwMTA2MDBBMDAwMDAwMDAwMEM3QgorOjEwNERDMDAwMDIwMEEwNTAwMDAwMDAwMDAyMDBBMDU0MDAwMDAwMDBGQgorOjEwNEREMDAwMDIwMEEwRUM1NTU0MDAwMDAyMDBBMEYwNTU1NTU1NTVCNgorOjEwNERFMDAwMDIwMEEwRjQwMDAwNTU1NTAyMDBBMEY4RjAwMDAwMDBGOQorOjEwNERGMDAwMDIwMEEwRkM1NTU0MDAwMDAyMDBBMTAwNTU1NTU1NTU3NQorOjEwNEUwMDAwMDIwMEExMDQwMDAwNTU1NTAyMDBBMTA4RjAwMDAwMDBCNgorOjEwNEUxMDAwMDIwMEExOEM1NTU0MDAwMDAyMDBBMTkwNTU1NTU1NTUzMworOjEwNEUyMDAwMDIwMEExOTQwMDAwNTU1NTAyMDBBMTk4RjAwMDAwMDA3NgorOjEwNEUzMDAwMDIwMEExOUMwMDAwMDAwMDAyMDBBMUEwMDAwMTAwMDBFRgorOjEwNEU0MDAwMDIwMEExQTQwMDAwNTAxNDAyMDBBMUE4MDAwMDAwMDA2QworOjEwNEU1MDAwMDIwMEE0NUMwMDAwMEMwMDAyMDBBNjFDMDAwMDAwMDM3RAorOjEwNEU2MDAwMDIwMEEwNkNGRjVDMDAwMDAyMDBBMDcwRkZGNTVGRkY3NQorOjEwNEU3MDAwMDIwMEEwNzQwMDAwRkZGRjAyMDBBMDc4RjAwMDAzRTAzMQorOjEwNEU4MDAwMDIwMEEwN0MwMDAwMDAwMDAyMDBBMDgwMDAwMEEwMDA0MgorOjEwNEU5MDAwMDYwMEEwODQwMDAwMDAwNTAyMDBBMDk4MEZFMDAwMDBCQQorOjEwNEVBMDAwMDYwMEEwOUMwMDAwMDAwNzAyMDBBMEI4MDAwMDA0MDA1QgorOjEwNEVCMDAwMDYwMEEwQkMwMDAwMDAwMzAyMDBBMEM4MDAwMDEwMDAxMworOjEwNEVDMDAwMDYwMEEwQ0MwMDAwMDAwMzAyMDBBMEQ4MDAwMDQwMDBCMworOjEwNEVEMDAwMDYwMEEwREMwMDAwMDAwMzAyMDBBMEU4MDAwMTAwMDBDMgorOjEwNEVFMDAwMDYwMEEyMkMwMDAwMDAwNDAyMDBBMTBDRkY1QzAwMDBFMAorOjEwNEVGMDAwMDIwMEExMTBGRkY1NUZGRjAyMDBBMTE0MDAwMEZGRkZGOAorOjEwNEYwMDAwMDIwMEExMThGMDAwMDNFMDAyMDBBMTFDMDAwMDAwMDA1NAorOjEwNEYxMDAwMDIwMEExMjAwMDAwQTAwMDA2MDBBMTI0MDAwMDAwMDU1RQorOjEwNEYyMDAwMDIwMEExMzgwRkUwMDAwMDA2MDBBMTNDMDAwMDAwMDdDRAorOjEwNEYzMDAwMDIwMEExNTgwMDAwMDgwMDA2MDBBMTVDMDAwMDAwMDM2OAorOjEwNEY0MDAwMDIwMEExNjgwMDAwMjAwMDA2MDBBMTZDMDAwMDAwMDMyMAorOjEwNEY1MDAwMDIwMEExNzgwMDAwODAwMDA2MDBBMTdDMDAwMDAwMDM5MAorOjEwNEY2MDAwMDIwMEExODgwMDAyMDAwMDA2MDBBMjNDMDAwMDAwMDQyQworOjEwNEY3MDAwMDIwMEEwMzAwMDAwMDAwMDAyMDBBMDM0MDAwMDAwMDA4OQorOjEwNEY4MDAwMDIwMEEwMzgwMDAwMDAwMDAyMDBBMDNDMDAwMDAwMDA2OQorOjEwNEY5MDAwMDIwMEEwNDAwMDAwMDAwMDAyMDBBMDQ0MDAwMDAwMDA0OQorOjEwNEZBMDAwMDIwMEEwNDgwMDAwMDAwMDAyMDBBMDRDMDAwMDAwMDAyOQorOjEwNEZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwMDAwMDAwMDBDMQorOjEwNEZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwNEZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNEZFMDAwMDAwMDAwMDAwMDMwMDAzMTAwMDAwMDAwMDAwMDAwMDA2MAorOjEwNEZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQorOjEwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAorOjEwNTAxMDAwMDAzMTAwNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAorOjEwNTAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwNTAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MjAwODk5NQorOjEwNTA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwODkwMDhEMDA4RDAwOTEyQworOjEwNTA1MDAwMDA5MTAwOTUwMDk1MDA5OTAwOTkwMDlEMDA5RDAwQTE4OAorOjEwNTA2MDAwMDBBMTAwQTUwMEE1MDBBOTAwQTkwMEFFMDBBRTAwQjFGNgorOjEwNTA3MDAwMDBCMTAwQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgorOjEwNTA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAorOjEwNTA5MDAwMDAwMDAwMDAwMEI0MDMwOTAzMDkwMzEzMDMxMzAzMURGOAorOjEwNTBBMDAwMDMxRDAzMjQwMzI0MDMyQjAzMkIwMzMyMDMzMjAzMzk5MAorOjEwNTBCMDAwMDMzOTAzNDAwMzQwMDM0NzAzNDcwMzRFMDM0RTAzNTVBMAorOjEwNTBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwNTBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwNTBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNTBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwNTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwNTExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwNTEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwNTEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwNTE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwNTE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwNTE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwNTE3MDAwMDM1NTAzNUIwMDAwMDAwMDAwMDAwMDAwMDM1QjAzNUNCQworOjEwNTE4MDAwMDM1QzAzNUQwMzVEMDM1RTAzNUUwMzVGMDM1RjAzNjAxNworOjEwNTE5MDAwMDM2MDAzNjEwMzYxMDM2MjAzNjIwMzYzMDAwMDAwMDBCNAorOjEwNTFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgorOjEwNTFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwNTFDMDAwMDAwMDAwMDAwMDAwMDAwMDAzNjMwMzZEMDM2RDAzN0IxQgorOjEwNTFEMDAwMDM3QjAzODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwNTFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwNTFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNTIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwNTIyMDAwMDM4OTAzOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQorOjEwNTIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwNTI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4QTAzRDZGOAorOjEwNTI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwNTI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwNTI3MDAwMDAwMDAwMDAwMDAwMDAwMDAzRDYwNDAxMDAwMDAwMDA1MAorOjEwNTI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwNTI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwNTJBMDAwMDAwMDAwMDAwNDAxMDQzMzAwMDAwMDAwMDAwMDAwMDBDMgorOjEwNTJCMDAwMDQzMzA0M0EwNDNBMDQ0MTA0NDEwNDQ4MDQ0ODA0NEZDNgorOjEwNTJDMDAwMDQ0RjA0NTYwNDU2MDQ1RDA0NUQwNDY0MDQ2NDA0NkJENgorOjEwNTJEMDAwMDQ2QjA0QTQwMDAwMDAwMDAwMDAwMDAwMDRBNDA0QTg2MworOjEwNTJFMDAwMDRBODA0QUMwNEFDMDRCMDA0QjAwNEI0MDRCNDA0QjgxRQorOjEwNTJGMDAwMDRCODA0QkMwNEJDMDRDMDA0QzAwNEM0MDRDNDA1MTM0MgorOjEwNTMwMDAwMDUxMzA1MkEwNTJBMDU0MTA1NDEwNTQzMDU0MzA1NDVDMQorOjEwNTMxMDAwMDU0NTA1NDcwNTQ3MDU0OTA1NDkwNTRCMDU0QjA1NEQxRAorOjEwNTMyMDAwMDU0RDA1NEYwNTRGMDU1MTA1NTEwNUU4MDVFODA1RTkwRgorOjEwNTMzMDAwMDVFOTA1RUEwNUVBMDVFRjA1RUYwNUY0MDVGNDA1RjlDOQorOjEwNTM0MDAwMDVGOTA1RkUwNUZFMDYwMzA2MDMwNjA4MDYwODA2MEQxOAorOjEwNTM1MDAwMDYwRDA2MTIwNjEyMDYxMzAwMDAwMDAwMDAwMDAwMDBGMQorOjEwNTM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAorOjEwNTM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAorOjEwNTM4MDAwMDYxMzA2MjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQQorOjEwNTM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAorOjEwNTNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyNDA2Mzk5NAorOjEwNTNCMDAwMDYzOTA2M0MwNjNDMDYzRjAwMDAwMDAwMDAwMDAwMDBFNQorOjEwNTNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAorOjEwNTNEMDAwMDAwMDAwMDAwMDAwMDAwMDA2M0YwNjc1MDAwMDAwMDAwRAorOjEwNTNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAorOjEwNTNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAorOjEwNTQwMDAwMDAwMDAwMDAwNjc1MDc3ODAwMDAwMDAwMDAwMDAwMDBBMgorOjEwNTQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QworOjEwNTQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwNTQzMDAwMDc3ODA3N0YwNzdGMDc4MzA3ODMwNzg3MDAwMDAwMDAzRgorOjEwNTQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QworOjEwNTQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4NzA3QzhFRgorOjEwNTQ2MDAwMDAwMDAwMDAwMDAwMDAwMDA3QzgwN0QxMDdEMTA3REFEQworOjEwNTQ3MDAwMDdEQTA3RTMwN0UzMDdFQzA3RUMwN0Y1MDdGNTA3RkU5NAorOjEwNTQ4MDAwMDdGRTA4MDcwODA3MDgxMDA4MTAwODY3MDg2NzA4N0M2NworOjEwNTQ5MDAwMDg3QzA4OTEwODkxMDg5NDA4OTQwODk3MDg5NzA4OUEzRQorOjEwNTRBMDAwMDg5QTA4OUQwODlEMDhBMDA4QTAwOEEzMDhBMzA4QTZCQworOjEwNTRCMDAwMDhBNjA4QTkwOEE5MDhCMjAwMDAwMDAwMDAwMDAwMDAyMgorOjEwNTRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQworOjEwNTREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQworOjEwNTRFMDAwMDhCMjA4QjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgorOjEwNTRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQworOjEwNTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCODA4QkIxOAorOjEwNTUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QgorOjEwNTUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwNTUzMDAwMDAwMDAwMDAwMDAwMDAwMDA4QkIwOEMxMDAwMDAwMDBERgorOjEwNTU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QgorOjEwNTU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QgorOjEwNTU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQgorOjEwNTU3MDAwMDhDMTA4RDAwOEQwMDhERjA4REYwOEVFMDhFRTA4RkRGMworOjEwNTU4MDAwMDhGRDA5MEMwOTBDMDkxQjA5MUIwOTJBMDkyQTA5MzlGQworOjEwNTU5MDAwMDkzOTA5QUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNTVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQgorOjEwNTVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBQTA5QkY3MAorOjEwNTVDMDAwMDlCRjA5RDAwOUQwMDlFMTA5RTEwOUUyMDlFMjA5RTNDQgorOjEwNTVEMDAwMDlFMzA5RTQwOUU0MDlFNTA5RTUwOUU2MDlFNjA5RTc1QgorOjEwNTVFMDAwMDlFNzA5RTgwOUU4MDlFOTAwMDAwMDAwMDAwMDAwMDBGNworOjEwNTVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQgorOjEwNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QQorOjEwNTYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QQorOjEwNTYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QQorOjEwNTYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwNTY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNTY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QQorOjEwNTY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQQorOjEwNTY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQQorOjEwNTY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQQorOjEwNTY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQQorOjEwNTZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQQorOjEwNTZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQQorOjEwNTZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMjA0QzAxMworOjEwNTZEMDAwMDAwMzA5ODAwMDA0MEU0MDAwMDUxMzAwMDAwNjE3QzBGNworOjEwNTZFMDAwMDAwNzFDODAwMDA4MjE0MDAwMDkyNjAwMDAwQTJBQzA4QgorOjEwNTZGMDAwMDAwQjJGODAwMDBDMzQ0MDAwMEQzOTAwMDAwRTNEQzAxRgorOjEwNTcwMDAwMDAwRjQyODAwMDEwNDc0MDAwMTE0QzAwMDAxMjUwQzBCMgorOjEwNTcxMDAwMDAxMzU1ODAwMDE0NUE0MDAwMTU1RjAwMDAxNjYzQzA0NgorOjEwNTcyMDAwMDAxNzY4ODAwMDE4NkQ0MDAwMTk3MjAwMDAxQTc2QzBEQQorOjEwNTczMDAwMDAxQjdCODAwMDFDODA0MDAwMUQ4NTAwMDAxRTg5QzA2RQorOjEwNTc0MDAwMDAxRjhFODAwMDAwOTM0MDAwMDAyMDAwMDAwMDQwMDBGOQorOjEwNTc1MDAwMDAwMDYwMDAwMDAwODAwMDAwMDBBMDAwMDAwMEMwMDAwOQorOjEwNTc2MDAwMDAwMEUwMDAwMDAxMDAwMDAwMDEyMDAwMDAwMTQwMDBGNgorOjEwNTc3MDAwMDAwMTYwMDAwMDAxODAwMDAwMDFBMDAwMDAwMUMwMDBFNQorOjEwNTc4MDAwMDAwMUUwMDAwMDAyMDAwMDAwMDIyMDAwMDAwMjQwMDBEMgorOjEwNTc5MDAwMDAwMjYwMDAwMDAyODAwMDAwMDJBMDAwMDAwMkMwMDBDMQorOjEwNTdBMDAwMDAwMkUwMDAwMDAzMDAwMDAwMDMyMDAwMDAwMzQwMDBBRQorOjEwNTdCMDAwMDAwMzYwMDAwMDAzODAwMDAwMDNBMDAwMDAwM0MwMDA5RAorOjEwNTdDMDAwMDAwM0UwMDAwMDA0MDAwMDAwMDQyMDAwMDAwNDQwMDA4QQorOjEwNTdEMDAwMDAwNDYwMDAwMDA0ODAwMDAwMDRBMDAwMDAwNEMwMDA3OQorOjEwNTdFMDAwMDAwNEUwMDAwMDA1MDAwMDAwMDUyMDAwMDAwNTQwMDA2NgorOjEwNTdGMDAwMDAwNTYwMDAwMDA1ODAwMDAwMDVBMDAwMDAwNUMwMDA1NQorOjEwNTgwMDAwMDAwNUUwMDAwMDA2MDAwMDAwMDYyMDAwMDAwNjQwMDA0MQorOjEwNTgxMDAwMDAwNjYwMDAwMDA2ODAwMDAwMDZBMDAwMDAwNkMwMDAzMAorOjEwNTgyMDAwMDAwNkUwMDAwMDA3MDAwMDAwMDcyMDAwMDAwNzQwMDAxRAorOjEwNTgzMDAwMDAwNzYwMDAwMDA3ODAwMDAwMDdBMDAwMDAwN0MwMDAwQworOjEwNTg0MDAwMDAwN0UwMDAwMDA4MDAwMDAwMDgyMDAwMDAwODQwMDBGOQorOjEwNTg1MDAwMDAwODYwMDAwMDA4ODAwMDAwMDhBMDAwMDAwOEMwMDBFOAorOjEwNTg2MDAwMDAwOEUwMDAwMDA5MDAwMDAwMDkyMDAwMDAwOTQwMDBENQorOjEwNTg3MDAwMDAwOTYwMDAwMDA5ODAwMDAwMDlBMDAwMDAwOUMwMDBDNAorOjEwNTg4MDAwMDAwOUUwMDAwMDBBMDAwMDAwMEEyMDAwMDAwQTQwMDBCMQorOjEwNTg5MDAwMDAwQTYwMDAwMDBBODAwMDAwMEFBMDAwMDAwQUMwMDBBMAorOjEwNThBMDAwMDAwQUUwMDAwMDBCMDAwMDAwMEIyMDAwMDAwQjQwMDA4RAorOjEwNThCMDAwMDAwQjYwMDAwMDBCODAwMDAwMEJBMDAwMDAwQkMwMDA3QworOjEwNThDMDAwMDAwQkUwMDAwMDBDMDAwMDAwMEMyMDAwMDAwQzQwMDA2OQorOjEwNThEMDAwMDAwQzYwMDAwMDBDODAwMDAwMENBMDAwMDAwQ0MwMDA1OAorOjEwNThFMDAwMDAwQ0UwMDAwMDBEMDAwMDAwMEQyMDAwMDAwRDQwMDA0NQorOjEwNThGMDAwMDAwRDYwMDAwMDBEODAwMDAwMERBMDAwMDAwREMwMDAzNAorOjEwNTkwMDAwMDAwREUwMDAwMDBFMDAwMDAwMEUyMDAwMDAwRTQwMDAyMAorOjEwNTkxMDAwMDAwRTYwMDAwMDBFODAwMDAwMEVBMDAwMDAwRUMwMDAwRgorOjEwNTkyMDAwMDAwRUUwMDAwMDBGMDAwMDAwMEYyMDAwMDAwRjQwMDBGQworOjEwNTkzMDAwMDAwRjYwMDAwMDBGODAwMDAwMEZBMDAwMDAwRkMwMDBFQgorOjEwNTk0MDAwMDAwRkUwMDAwMDEwMDAwMDAwMTAyMDAwMDAxMDQwMDBEOAorOjEwNTk1MDAwMDAxMDYwMDAwMDEwODAwMDAwMTBBMDAwMDAxMEMwMDBDNworOjEwNTk2MDAwMDAxMEUwMDAwMDExMDAwMDAwMTEyMDAwMDAxMTQwMDBCNAorOjEwNTk3MDAwMDAxMTYwMDAwMDExODAwMDAwMTFBMDAwMDAxMUMwMDBBMworOjEwNTk4MDAwMDAxMUUwMDAwMDEyMDAwMDAwMTIyMDAwMDAxMjQwMDA5MAorOjEwNTk5MDAwMDAxMjYwMDAwMDEyODAwMDAwMTJBMDAwMDAxMkMwMDA3RgorOjEwNTlBMDAwMDAxMkUwMDAwMDEzMDAwMDAwMTMyMDAwMDAxMzQwMDA2QworOjEwNTlCMDAwMDAxMzYwMDAwMDEzODAwMDAwMTNBMDAwMDAxM0MwMDA1QgorOjEwNTlDMDAwMDAxM0UwMDAwMDE0MDAwMDAwMTQyMDAwMDAxNDQwMDA0OAorOjEwNTlEMDAwMDAxNDYwMDAwMDE0ODAwMDAwMTRBMDAwMDAxNEMwMDAzNworOjEwNTlFMDAwMDAxNEUwMDAwMDE1MDAwMDAwMTUyMDAwMDAxNTQwMDAyNAorOjEwNTlGMDAwMDAxNTYwMDAwMDE1ODAwMDAwMTVBMDAwMDAxNUMwMDAxMworOjEwNUEwMDAwMDAxNUUwMDAwMDE2MDAwMDAwMTYyMDAwMDAxNjQwMDBGRgorOjEwNUExMDAwMDAxNjYwMDAwMDE2ODAwMDAwMTZBMDAwMDAxNkMwMDBFRQorOjEwNUEyMDAwMDAxNkUwMDAwMDE3MDAwMDAwMTcyMDAwMDAxNzQwMDBEQgorOjEwNUEzMDAwMDAxNzYwMDAwMDE3ODAwMDAwMTdBMDAwMDAxN0MwMDBDQQorOjEwNUE0MDAwMDAxN0UwMDAwMDE4MDAwMDAwMTgyMDAwMDAxODQwMDBCNworOjEwNUE1MDAwMDAxODYwMDAwMDE4ODAwMDAwMThBMDAwMDAxOEMwMDBBNgorOjEwNUE2MDAwMDAxOEUwMDAwMDE5MDAwMDAwMTkyMDAwMDAxOTQwMDA5MworOjEwNUE3MDAwMDAxOTYwMDAwMDE5ODAwMDAwMTlBMDAwMDAxOUMwMDA4MgorOjEwNUE4MDAwMDAxOUUwMDAwMDFBMDAwMDAwMUEyMDAwMDAxQTQwMDA2RgorOjEwNUE5MDAwMDAxQTYwMDAwMDFBODAwMDAwMUFBMDAwMDAxQUMwMDA1RQorOjEwNUFBMDAwMDAxQUUwMDAwMDFCMDAwMDAwMUIyMDAwMDAxQjQwMDA0QgorOjEwNUFCMDAwMDAxQjYwMDAwMDFCODAwMDAwMUJBMDAwMDAxQkMwMDAzQQorOjEwNUFDMDAwMDAxQkUwMDAwMDFDMDAwMDAwMUMyMDAwMDAxQzQwMDAyNworOjEwNUFEMDAwMDAxQzYwMDAwMDFDODAwMDAwMUNBMDAwMDAxQ0MwMDAxNgorOjEwNUFFMDAwMDAxQ0UwMDAwMDFEMDAwMDAwMUQyMDAwMDAxRDQwMDAwMworOjEwNUFGMDAwMDAxRDYwMDAwMDFEODAwMDAwMURBMDAwMDAxREMwMDBGMgorOjEwNUIwMDAwMDAxREUwMDAwMDFFMDAwMDAwMUUyMDAwMDAxRTQwMDBERQorOjEwNUIxMDAwMDAxRTYwMDAwMDFFODAwMDAwMUVBMDAwMDAxRUMwMDBDRAorOjEwNUIyMDAwMDAxRUUwMDAwMDFGMDAwMDAwMUYyMDAwMDAxRjQwMDBCQQorOjEwNUIzMDAwMDAxRjYwMDAwMDFGODAwMDAwMUZBMDAwMDAxRkMwMDBBOQorOjEwNUI0MDAwMDAxRkUwMDAwMDIwMDAwMDAwMjAyMDAwMDAyMDQwMDA5NgorOjEwNUI1MDAwMDAyMDYwMDAwMDIwODAwMDAwMjBBMDAwMDAyMEMwMDA4NQorOjEwNUI2MDAwMDAyMEUwMDAwMDIxMDAwMDAwMjEyMDAwMDAyMTQwMDA3MgorOjEwNUI3MDAwMDAyMTYwMDAwMDIxODAwMDAwMjFBMDAwMDAyMUMwMDA2MQorOjEwNUI4MDAwMDAyMUUwMDAwMDIyMDAwMDAwMjIyMDAwMDAyMjQwMDA0RQorOjEwNUI5MDAwMDAyMjYwMDAwMDIyODAwMDAwMjJBMDAwMDAyMkMwMDAzRAorOjEwNUJBMDAwMDAyMkUwMDAwMDIzMDAwMDAwMjMyMDAwMDAyMzQwMDAyQQorOjEwNUJCMDAwMDAyMzYwMDAwMDIzODAwMDAwMjNBMDAwMDAyM0MwMDAxOQorOjEwNUJDMDAwMDAyM0UwMDAwMDI0MDAwMDAwMjQyMDAwMDAyNDQwMDAwNgorOjEwNUJEMDAwMDAyNDYwMDAwMDI0ODAwMDAwMjRBMDAwMDAyNEMwMDBGNQorOjEwNUJFMDAwMDAyNEUwMDAwMDI1MDAwMDAwMjUyMDAwMDAyNTQwMDBFMgorOjEwNUJGMDAwMDAyNTYwMDAwMDI1ODAwMDAwMjVBMDAwMDAyNUMwMDBEMQorOjEwNUMwMDAwMDAyNUUwMDAwMDI2MDAwMDAwMjYyMDAwMDAyNjQwMDBCRAorOjEwNUMxMDAwMDAyNjYwMDAwMDI2ODAwMDAwMjZBMDAwMDAyNkMwMDBBQworOjEwNUMyMDAwMDAyNkUwMDAwMDI3MDAwMDAwMjcyMDAwMDAyNzQwMDA5OQorOjEwNUMzMDAwMDAyNzYwMDAwMDI3ODAwMDAwMjdBMDAwMDAyN0MwMDA4OAorOjEwNUM0MDAwMDAyN0UwMDAwMDI4MDAwMDAwMjgyMDAwMDAyODQwMDA3NQorOjEwNUM1MDAwMDAyODYwMDAwMDI4ODAwMDAwMjhBMDAwMDAyOEMwMDA2NAorOjEwNUM2MDAwMDAyOEUwMDAwMDI5MDAwMDAwMjkyMDAwMDAyOTQwMDA1MQorOjEwNUM3MDAwMDAyOTYwMDAwMDI5ODAwMDAwMjlBMDAwMDAyOUMwMDA0MAorOjEwNUM4MDAwMDAyOUUwMDAwMDJBMDAwMDAwMkEyMDAwMDAyQTQwMDAyRAorOjEwNUM5MDAwMDAyQTYwMDAwMDJBODAwMDAwMkFBMDAwMDAyQUMwMDAxQworOjEwNUNBMDAwMDAyQUUwMDAwMDJCMDAwMDAwMkIyMDAwMDAyQjQwMDAwOQorOjEwNUNCMDAwMDAyQjYwMDAwMDJCODAwMDAwMkJBMDAwMDAyQkMwMDBGOAorOjEwNUNDMDAwMDAyQkUwMDAwMDJDMDAwMDAwMkMyMDAwMDAyQzQwMDBFNQorOjEwNUNEMDAwMDAyQzYwMDAwMDJDODAwMDAwMkNBMDAwMDAyQ0MwMDBENAorOjEwNUNFMDAwMDAyQ0UwMDAwMDJEMDAwMDAwMkQyMDAwMDAyRDQwMDBDMQorOjEwNUNGMDAwMDAyRDYwMDAwMDJEODAwMDAwMkRBMDAwMDAyREMwMDBCMAorOjEwNUQwMDAwMDAyREUwMDAwMDJFMDAwMDAwMkUyMDAwMDAyRTQwMDA5QworOjEwNUQxMDAwMDAyRTYwMDAwMDJFODAwMDAwMkVBMDAwMDAyRUMwMDA4QgorOjEwNUQyMDAwMDAyRUUwMDAwMDJGMDAwMDAwMkYyMDAwMDAyRjQwMDA3OAorOjEwNUQzMDAwMDAyRjYwMDAwMDJGODAwMDAwMkZBMDAwMDAyRkMwMDA2NworOjEwNUQ0MDAwMDAyRkUwMDAwMDMwMDAwMDAwMzAyMDAwMDAzMDQwMDA1NAorOjEwNUQ1MDAwMDAzMDYwMDAwMDMwODAwMDAwMzBBMDAwMDAzMEMwMDA0MworOjEwNUQ2MDAwMDAzMEUwMDAwMDMxMDAwMDAwMzEyMDAwMDAzMTQwMDAzMAorOjEwNUQ3MDAwMDAzMTYwMDAwMDMxODAwMDAwMzFBMDAwMDAzMUMwMDAxRgorOjEwNUQ4MDAwMDAzMUUwMDAwMDMyMDAwMDAwMzIyMDAwMDAzMjQwMDAwQworOjEwNUQ5MDAwMDAzMjYwMDAwMDMyODAwMDAwMzJBMDAwMDAzMkMwMDBGQgorOjEwNURBMDAwMDAzMkUwMDAwMDMzMDAwMDAwMzMyMDAwMDAzMzQwMDBFOAorOjEwNURCMDAwMDAzMzYwMDAwMDMzODAwMDAwMzNBMDAwMDAzM0MwMDBENworOjEwNURDMDAwMDAzM0UwMDAwMDM0MDAwMDAwMzQyMDAwMDAzNDQwMDBDNAorOjEwNUREMDAwMDAzNDYwMDAwMDM0ODAwMDAwMzRBMDAwMDAzNEMwMDBCMworOjEwNURFMDAwMDAzNEUwMDAwMDM1MDAwMDAwMzUyMDAwMDAzNTQwMDBBMAorOjEwNURGMDAwMDAzNTYwMDAwMDM1ODAwMDAwMzVBMDAwMDAzNUMwMDA4RgorOjEwNUUwMDAwMDAzNUUwMDAwMDM2MDAwMDAwMzYyMDAwMDAzNjQwMDA3QgorOjEwNUUxMDAwMDAzNjYwMDAwMDM2ODAwMDAwMzZBMDAwMDAzNkMwMDA2QQorOjEwNUUyMDAwMDAzNkUwMDAwMDM3MDAwMDAwMzcyMDAwMDAzNzQwMDA1NworOjEwNUUzMDAwMDAzNzYwMDAwMDM3ODAwMDAwMzdBMDAwMDAzN0MwMDA0NgorOjEwNUU0MDAwMDAzN0UwMDAwMDM4MDAwMDAwMzgyMDAwMDAzODQwMDAzMworOjEwNUU1MDAwMDAzODYwMDAwMDM4ODAwMDAwMzhBMDAwMDAzOEMwMDAyMgorOjEwNUU2MDAwMDAzOEUwMDAwMDM5MDAwMDAwMzkyMDAwMDAzOTQwMDAwRgorOjEwNUU3MDAwMDAzOTYwMDAwMDM5ODAwMDAwMzlBMDAwMDAzOUMwMDBGRQorOjEwNUU4MDAwMDAzOUUwMDAwMDNBMDAwMDAwM0EyMDAwMDAzQTQwMDBFQgorOjEwNUU5MDAwMDAzQTYwMDAwMDNBODAwMDAwM0FBMDAwMDAzQUMwMDBEQQorOjEwNUVBMDAwMDAzQUUwMDAwMDNCMDAwMDAwM0IyMDAwMDAzQjQwMDBDNworOjEwNUVCMDAwMDAzQjYwMDAwMDNCODAwMDAwM0JBMDAwMDAzQkMwMDBCNgorOjEwNUVDMDAwMDAzQkUwMDAwMDNDMDAwMDAwM0MyMDAwMDAzQzQwMDBBMworOjEwNUVEMDAwMDAzQzYwMDAwMDNDODAwMDAwM0NBMDAwMDAzQ0MwMDA5MgorOjEwNUVFMDAwMDAzQ0UwMDAwMDNEMDAwMDAwM0QyMDAwMDAzRDQwMDA3RgorOjEwNUVGMDAwMDAzRDYwMDAwMDNEODAwMDAwM0RBMDAwMDAzREMwMDA2RQorOjEwNUYwMDAwMDAzREUwMDAwMDNFMDAwMDAwM0UyMDAwMDAzRTQwMDA1QQorOjEwNUYxMDAwMDAzRTYwMDAwMDNFODAwMDAwM0VBMDAwMDAzRUMwMDA0OQorOjEwNUYyMDAwMDAzRUUwMDAwMDNGMDAwMDAwM0YyMDAwMDAzRjQwMDAzNgorOjEwNUYzMDAwMDAzRjYwMDAwMDNGODAwMDAwM0ZBMDAwMDAzRkMwMDAyNQorOjEwNUY0MDAwMDAzRkUwMDAwMDNGRTAwMTAwMDAwMDAwMDAwMDAxRkYxMgorOjEwNUY1MDAwMDAwMDAyMDAwMDAwN0ZGODAwMDA3RkY4MDAwMDAxNDAxMAorOjEwNUY2MDAwMDAwMDM1MDAwMDAwMDAwMTAwMDBGRjAwMDAwMDAwMDBGQworOjEwNUY3MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAyMworOjEwNUY4MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAxMworOjEwNUY5MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMworOjEwNUZBMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDAwMDAwMTQwQUZGMDBENQorOjEwNUZCMDAwMDAwMDAwMDEwMDAwMDAwMDAwMjAxMDAxMDAwMDAwMDBBRgorOjEwNUZDMDAwMDEwMDkwMDAwMDAwMDEwMDAwMDA5MDAyMDAwMDkwMDQxOQorOjEwNUZEMDAwMDAwMDkwMDYwMDAwOTAwODAwMDA5MDBBMDAwMDkwMEM1RAorOjEwNUZFMDAwMDAwMDkwMEUwMDAwOTAxMDAwMDA5MDEyMDAwMDkwMTQyRAorOjEwNUZGMDAwMDAwMDkwMTYwMDAwOTAxODAwMDA5MDFBMDAwMDkwMUNGRAorOjEwNjAwMDAwMDAwMDkwMUUwMDAwOTAyMDAwMDA5MDIyMDAwMDkwMjRDQworOjEwNjAxMDAwMDAwMDkwMjYwMDAwOTAyODAwMDA5MDJBMDAwMDkwMkM5QworOjEwNjAyMDAwMDAwMDkwMkUwMDAwOTAzMDAwMDA5MDMyMDAwMDkwMzQ2QworOjEwNjAzMDAwMDAwMDkwMzYwMDAwOTAzODAwMDA5MDNBMDAwMDkwM0MzQworOjEwNjA0MDAwMDAwMDkwM0UwMDAwOTA0MDAwMDA5MDQyMDAwMDkwNDQwQworOjEwNjA1MDAwMDAwMDkwNDYwMDAwOTA0ODAwMDA5MDRBMDAwMDkwNENEQworOjEwNjA2MDAwMDAwMDkwNEUwMDAwOTA1MDAwMDA5MDUyMDAwMDkwNTRBQworOjEwNjA3MDAwMDAwMDkwNTYwMDAwOTA1ODAwMDA5MDVBMDAwMDkwNUM3QworOjEwNjA4MDAwMDAwMDkwNUUwMDAwOTA2MDAwMDA5MDYyMDAwMDkwNjQ0QworOjEwNjA5MDAwMDAwMDkwNjYwMDAwOTA2ODAwMDA5MDZBMDAwMDkwNkMxQworOjEwNjBBMDAwMDAwMDkwNkUwMDAwOTA3MDAwMDA5MDcyMDAwMDkwNzRFQworOjEwNjBCMDAwMDAwMDkwNzYwMDAwOTA3ODAwMDA5MDdBMDAwMDkwN0NCQworOjEwNjBDMDAwMDAwMDkwN0UwMDAwOTA4MDAwMDA5MDgyMDAwMDkwODQ4QworOjEwNjBEMDAwMDAwMDkwODYwMDAwOTA4ODAwMDA5MDhBMDAwMDkwOEM1QworOjEwNjBFMDAwMDAwMDkwOEUwMDAwOTA5MDAwMDA5MDkyMDAwMDkwOTQyQworOjEwNjBGMDAwMDAwMDkwOTYwMDAwOTA5ODAwMDA5MDlBMDAwMDkwOUNGQworOjEwNjEwMDAwMDAwMDkwOUUwMDAwOTBBMDAwMDA5MEEyMDAwMDkwQTRDQgorOjEwNjExMDAwMDAwMDkwQTYwMDAwOTBBODAwMDA5MEFBMDAwMDkwQUM5QgorOjEwNjEyMDAwMDAwMDkwQUUwMDAwOTBCMDAwMDA5MEIyMDAwMDkwQjQ2QgorOjEwNjEzMDAwMDAwMDkwQjYwMDAwOTBCODAwMDA5MEJBMDAwMDkwQkMzQgorOjEwNjE0MDAwMDAwMDkwQkUwMDAwOTBDMDAwMDA5MEMyMDAwMDkwQzQwQgorOjEwNjE1MDAwMDAwMDkwQzYwMDAwOTBDODAwMDA5MENBMDAwMDkwQ0NEQgorOjEwNjE2MDAwMDAwMDkwQ0UwMDAwOTBEMDAwMDA5MEQyMDAwMDkwRDRBQgorOjEwNjE3MDAwMDAwMDkwRDYwMDAwOTBEODAwMDA5MERBMDAwMDkwREM3QgorOjEwNjE4MDAwMDAwMDkwREUwMDAwOTBFMDAwMDA5MEUyMDAwMDkwRTQ0QgorOjEwNjE5MDAwMDAwMDkwRTYwMDAwOTBFODAwMDA5MEVBMDAwMDkwRUMxQgorOjEwNjFBMDAwMDAwMDkwRUUwMDAwOTBGMDAwMDA5MEYyMDAwMDkwRjRFQgorOjEwNjFCMDAwMDAwMDkwRjYwMDAwOTBGODAwMDA5MEZBMDAwMDkwRkNCQgorOjEwNjFDMDAwMDAwMDkwRkUwMDAwOTEwMDAwMDA5MTAyMDAwMDkxMDQ4OAorOjEwNjFEMDAwMDAwMDkxMDYwMDAwOTEwODAwMDA5MTBBMDAwMDkxMEM1NworOjEwNjFFMDAwMDAwMDkxMEUwMDAwOTExMDAwMDA5MTEyMDAwMDkxMTQyNworOjEwNjFGMDAwMDAwMDkxMTYwMDAwOTExODAwMDA5MTFBMDAwMDkxMUNGNworOjEwNjIwMDAwMDAwMDkxMUUwMDAwOTEyMDAwMDA5MTIyMDAwMDkxMjRDNgorOjEwNjIxMDAwMDAwMDkxMjYwMDAwOTEyODAwMDA5MTJBMDAwMDkxMkM5NgorOjEwNjIyMDAwMDAwMDkxMkUwMDAwOTEzMDAwMDA5MTMyMDAwMDkxMzQ2NgorOjEwNjIzMDAwMDAwMDkxMzYwMDAwOTEzODAwMDA5MTNBMDAwMDkxM0MzNgorOjEwNjI0MDAwMDAwMDkxM0UwMDAwOTE0MDAwMDA5MTQyMDAwMDkxNDQwNgorOjEwNjI1MDAwMDAwMDkxNDYwMDAwOTE0ODAwMDA5MTRBMDAwMDkxNENENgorOjEwNjI2MDAwMDAwMDkxNEUwMDAwOTE1MDAwMDA5MTUyMDAwMDkxNTRBNgorOjEwNjI3MDAwMDAwMDkxNTYwMDAwOTE1ODAwMDA5MTVBMDAwMDkxNUM3NgorOjEwNjI4MDAwMDAwMDkxNUUwMDAwOTE2MDAwMDA5MTYyMDAwMDkxNjQ0NgorOjEwNjI5MDAwMDAwMDkxNjYwMDAwOTE2ODAwMDA5MTZBMDAwMDkxNkMxNgorOjEwNjJBMDAwMDAwMDkxNkUwMDAwOTE3MDAwMDA5MTcyMDAwMDkxNzRFNgorOjEwNjJCMDAwMDAwMDkxNzYwMDAwOTE3ODAwMDA5MTdBMDAwMDkxN0NCNgorOjEwNjJDMDAwMDAwMDkxN0UwMDAwOTE4MDAwMDA5MTgyMDAwMDkxODQ4NgorOjEwNjJEMDAwMDAwMDkxODYwMDAwOTE4ODAwMDA5MThBMDAwMDkxOEM1NgorOjEwNjJFMDAwMDAwMDkxOEUwMDAwOTE5MDAwMDA5MTkyMDAwMDkxOTQyNgorOjEwNjJGMDAwMDAwMDkxOTYwMDAwOTE5ODAwMDA5MTlBMDAwMDkxOUNGNgorOjEwNjMwMDAwMDAwMDkxOUUwMDAwOTFBMDAwMDA5MUEyMDAwMDkxQTRDNQorOjEwNjMxMDAwMDAwMDkxQTYwMDAwOTFBODAwMDA5MUFBMDAwMDkxQUM5NQorOjEwNjMyMDAwMDAwMDkxQUUwMDAwOTFCMDAwMDA5MUIyMDAwMDkxQjQ2NQorOjEwNjMzMDAwMDAwMDkxQjYwMDAwOTFCODAwMDA5MUJBMDAwMDkxQkMzNQorOjEwNjM0MDAwMDAwMDkxQkUwMDAwOTFDMDAwMDA5MUMyMDAwMDkxQzQwNQorOjEwNjM1MDAwMDAwMDkxQzYwMDAwOTFDODAwMDA5MUNBMDAwMDkxQ0NENQorOjEwNjM2MDAwMDAwMDkxQ0UwMDAwOTFEMDAwMDA5MUQyMDAwMDkxRDRBNQorOjEwNjM3MDAwMDAwMDkxRDYwMDAwOTFEODAwMDA5MURBMDAwMDkxREM3NQorOjEwNjM4MDAwMDAwMDkxREUwMDAwOTFFMDAwMDA5MUUyMDAwMDkxRTQ0NQorOjEwNjM5MDAwMDAwMDkxRTYwMDAwOTFFODAwMDA5MUVBMDAwMDkxRUMxNQorOjEwNjNBMDAwMDAwMDkxRUUwMDAwOTFGMDAwMDA5MUYyMDAwMDkxRjRFNQorOjEwNjNCMDAwMDAwMDkxRjYwMDAwOTFGODAwMDA5MUZBMDAwMDkxRkNCNQorOjEwNjNDMDAwMDAwMDkxRkVGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY0QQorOjEwNjNEMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZDRAorOjEwNjNFMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZCRAorOjEwNjNGMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZBRAorOjEwNjQwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY5QworOjEwNjQxMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY4QworOjEwNjQyMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY3QworOjEwNjQzMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY2QworOjEwNjQ0MDAwRkZGRkZGRkYwMDAwMDAwMzAwQkVCQzIwMDAwMDAwMDBCMworOjEwNjQ1MDAwMDAwMDAwMDUwMDAwMDAwMzAwQkVCQzIwMDAwMDAwMDA5QQorOjEwNjQ2MDAwMDAwMDAwMDUwMDAwMDAwMzAwQkVCQzIwMDAwMDAwMDA4QQorOjEwNjQ3MDAwMDAwMDAwMDUwMDAwMDAwMzAwQkVCQzIwMDAwMDAwMDA3QQorOjEwNjQ4MDAwMDAwMDAwMDUwMDAwMDAwMzAwQkVCQzIwMDAwMDAwMDA2QQorOjEwNjQ5MDAwMDAwMDAwMDUwMDAwMDAwMzAwQkVCQzIwMDAwMDAwMDA1QQorOjEwNjRBMDAwMDAwMDAwMDUwMDAwMDAwMzAwQkVCQzIwMDAwMDAwMDA0QQorOjEwNjRCMDAwMDAwMDAwMDUwMDAwMDAwMzAwQkVCQzIwMDAwMDAwMDAzQQorOjEwNjRDMDAwMDAwMDAwMDUwMDAwMjAwMDAwMDA0MEMwMDAwMDYxODBDNgorOjEwNjREMDAwMDAwMDgyNDAwMDAwQTMwMDAwMDBDM0MwMDAwMEU0ODA3MAorOjEwNjRFMDAwMDAwMTA1NDAwMDAxMjYwMDAwMDE0NkMwMDAwMTY3ODA1MAorOjEwNjRGMDAwMDAwMTg4NDAwMDAxQTkwMDAwMDFDOUMwMDAwMUVBODAzNAorOjEwNjUwMDAwMDAwMjBCNDAwMDAyMkMwMDAwMDI0Q0MwMDAwMjZEODAxMworOjEwNjUxMDAwMDAwMjhFNDAwMDAyQUYwMDAwMDJDRkMwMDAwMkYwODBGNworOjEwNjUyMDAwMDAwMDExNDAwMDAwODAwMDAwMDEwMzgwMDAwMTg3MDA4RQorOjEwNjUzMDAwMDAwMjBBODAwMDAyOEUwMDAwMDMxMTgwMDAwMzk1MDAxMworOjEwNjU0MDAwMDAwNDE4ODAwMDA0OUMwMDAwMDUxRjgwMDAwNUEzMDBDMworOjEwNjU1MDAwMDAwNjI2ODAwMDA2QUEwMDAwMDcyRDgwMDAwN0IxMDA3MworOjEwNjU2MDAwMDAwODM0ODAwMDA4QjgwMDAwMDkzQjgwMDAwOUJGMDAyMworOjEwNjU3MDAwMDAwQTQyODAwMDBBQzYwMDAwMEI0OTgwMDAwQkNEMDBEMworOjEwNjU4MDAwMDAwQzUwODAwMDBDRDQwMDAwMEQ1NzgwMDAwMDVCMDAxMAorOjEwNjU5MDAwMDAwMDdGRjgwMDAwN0ZGODAwMDAwMEQ1MDAwMDE1MDAyMworOjEwNjVBMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBFRAorOjEwNjVCMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBERAorOjEwNjVDMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBDRAorOjEwNjVEMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBCRAorOjEwNjVFMDAwMDAwMDE5MDAwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkY5NgorOjEwNjVGMDAwMDAwMDAwMDAwMzkzODcwMDAwMDAwMDAwMDM5Mzg3MDA2MQorOjEwNjYwMDAwMDAwMDdGRjgwMDAwN0ZGODAwMDAwNjhFMDAwMDM1MDBEMworOjEwNjYxMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkY2NAorOjEwNjYyMDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA2MQorOjEwNjYzMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkY0NAorOjEwNjY0MDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDA0MQorOjEwNjY1MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYyNAorOjEwNjY2MDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYxNAorOjEwNjY3MDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAxMQorOjEwNjY4MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkZGNAorOjEwNjY5MDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDBGMQorOjEwNjZBMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZENAorOjEwNjZCMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkZDNAorOjEwNjZDMDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBDMQorOjEwNjZEMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkZBNAorOjEwNjZFMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDBBMQorOjEwNjZGMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY4NAorOjEwNjcwMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkY3MworOjEwNjcxMDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA3MAorOjEwNjcyMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkY1MworOjEwNjczMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDA1MAorOjEwNjc0MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkYzMworOjEwNjc1MDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYyMworOjEwNjc2MDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAyMAorOjEwNjc3MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYwMworOjEwNjc4MDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMAorOjEwNjc5MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZFMworOjEwNjdBMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkZEMworOjEwNjdCMDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDBEMAorOjEwNjdDMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkZCMworOjEwNjdEMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDBCMAorOjEwNjdFMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY5MworOjEwNjdGMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkY4MworOjEwNjgwMDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDA3RgorOjEwNjgxMDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkY2MgorOjEwNjgyMDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDA1RgorOjEwNjgzMDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkY0MgorOjEwNjg0MDAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYzMgorOjEwNjg1MDAwMDAwMDAwRkYwMDAwRkYwMDBGRkZGRkZGMDAwMEZGMDAyRgorOjEwNjg2MDAwMEZGRkZGRkYwMDAwMDBGRjAwMDBGRjAwMEZGRkZGRkYxMgorOjEwNjg3MDAwMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwRgorOjEwNjg4MDAwMEZGRkZGRkYwMDAwRkYwMDBGRkZGRkZGMDAwMDAwRkZGMgorOjEwNjg5MDAwMDAwMDAwRkYwMDAwMDBGRjAwMDAwMEZGMDAwMDAwRkZGQworOjEwNjhBMDAwMDAwMDAwRkYwMDAwMDBGRjAwMDAwMEZGMDAwMDAwRkZFQworOjEwNjhCMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBEQQorOjEwNjhDMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBDQQorOjEwNjhEMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBCQQorOjEwNjhFMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDBBQQorOjEwNjhGMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZBOAorOjEwNjkwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY5NworOjEwNjkxMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY4NworOjEwNjkyMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY3NworOjEwNjkzMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY2NworOjEwNjk0MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY1NworOjEwNjk1MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY0NworOjEwNjk2MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYzNworOjEwNjk3MDAwMDAwMDEwMDAwMDAwMjA4MDAwMDAzMTAwMDAwMDQxODA3NQorOjEwNjk4MDAwMDAwMDUyMDAwMDAwNjI4MDAwMDA3MzAwMDAwMDgzODA1RAorOjEwNjk5MDAwMDAwMDk0MDAwMDAwQTQ4MDAwMDBCNTAwMDAwMEM1ODA0NQorOjEwNjlBMDAwMDAwMEQ2MDAwMDAwRTY4MDAwMDBGNzAwMDAwMTA3ODAyQworOjEwNjlCMDAwMDAwMTE4MDAwMDAxMjg4MDAwMDEzOTAwMDAwMTQ5ODAxMQorOjEwNjlDMDAwMDAwMTVBMDAwMDAxNkE4MDAwMDE3QjAwMDAwMThCODBGOQorOjEwNjlEMDAwMDAwMTlDMDAwMDAxQUM4MDAwMDFCRDAwMDAwMUNEODBFMQorOjEwNjlFMDAwMDAwMURFMDAwMDAxRUU4MDAwMDFGRjAwMDAwMDBGODBDQQorOjEwNjlGMDAwMDAwMDdGRjgwMDAwN0ZGODAwMDAwMzQ0MDAwMDM1MDAyRAorOjEwNkEwMDAwMTAwMDAwMDAwMDAwMjhBRDAwMDEwMDAxMDAwOTAyMDY4RQorOjEwNkExMDAwQ0NDQ0NDQzVGRkZGRkZGRkZGRkZGRkZGNzA1ODEwM0M0MQorOjEwNkEyMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA2OAorOjEwNkEzMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA1OAorOjEwNkE0MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDA0OAorOjEwNkE1MDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAzOAorOjEwNkE2MDAwMDAwMDAwMDAwMDAwMDAwMUNDQ0MwMjAxQ0NDQ0NDQ0M1QQorOjEwNkE3MDAwQ0NDQzAyMDFDQ0NDQ0NDQ0NDQ0MwMjAxQ0NDQ0NDQ0M4MAorOjEwNkE4MDAwQ0NDQzAyMDFDQ0NDQ0NDQ0NDQ0MwMjAxQ0NDQ0NDQ0M3MAorOjEwNkE5MDAwQ0NDQzAyMDFDQ0NDQ0NDQ0NDQ0MwMjAxQ0NDQ0NDQ0M2MAorOjEwNkFBMDAwQ0NDQzAyMDFDQ0NDQ0NDQzAwMDAwMDAwRkZGRkZGRkYxRgorOjEwNkFCMDAwMDAwRTAwMDAwMTE2MDBENjAwMjYyNUEwMDAyNjI1QTAwNQorOjEwNkFDMDAwMDAyNjI1QTAwMDI2MjVBMDAwNzIwMDAwMDEyMzAwRjM2NworOjEwNkFEMDAwMDAyNjI1QTAwMDI2MjVBMDAwMjYyNUEwMDAyNjI1QTAwQQorOjEwNkFFMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBBQQorOjEwNkFGMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA5QQorOjEwNkIwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA4OQorOjEwNkIxMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA3OQorOjEwNkIyMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA2OQorOjEwNkIzMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA1OQorOjEwNkI0MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA0OQorOjEwNkI1MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAzOQorOjEwNkI2MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAyOQorOjEwNkI3MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAxOQorOjEwNkI4MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwOQorOjEwNkI5MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBGOQorOjEwNkJBMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBFOQorOjEwNkJCMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBEOQorOjEwNkJDMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBDOQorOjEwNkJEMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBCOQorOjEwNkJFMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBBOQorOjEwNkJGMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA5OQorOjEwNkMwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA4OAorOjEwNkMxMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA3OAorOjEwNkMyMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA2OAorOjEwNkMzMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA1OAorOjEwNkM0MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA0OAorOjEwNkM1MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAzOAorOjEwNkM2MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAyOAorOjEwNkM3MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAxOAorOjEwNkM4MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwOAorOjEwNkM5MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBGOAorOjEwNkNBMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBFOAorOjEwNkNCMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBEOAorOjEwNkNDMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBDOAorOjEwNkNEMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBCOAorOjEwNkNFMDAwRkZGRkZGRjMzMThGRkZGRjBDMzBDMzBDQzMwQzMwQzMyOQorOjEwNkNGMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q2NgorOjEwNkQwMDAwRkZGRkZGRjEzMEVGRkZGRjBDMzBDMzBDQzMwQzMwQzNBQgorOjEwNkQxMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0Q0NAorOjEwNkQyMDAwRkZGRkZGRjYzMDVGRkZGRjBDMzBDMzBDQzMwQzMwQzMxNgorOjEwNkQzMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0QyMworOjEwNkQ0MDAwRkZGRkY0MDYxQ0JGRkZGRjBDMzBDMzA1QzMwQzMwQzNBQworOjEwNkQ1MDAwQ0YzMDAwMTRGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0RFQworOjEwNkQ2MDAwRkZGRkZGRjIzMDRGRkZGRjBDMzBDMzBDQzMwQzMwQzNFQQorOjEwNkQ3MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0RERAorOjEwNkQ4MDAwRkZGRkZGRkEzMDJGRkZGRjBDMzBDMzBDQzMwQzMwQzNFMgorOjEwNkQ5MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0RCNQorOjEwNkRBMDAwRkZGRkZGRjczMUVGRkZGRjBDMzBDMzBDQzMwQzMwQzMwNAorOjEwNkRCMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0Q4NQorOjEwNkRDMDAwRkZGRkZGRjUzMDJGRkZGRjBDMzBDMzBDQzMwQzMwQzNBNworOjEwNkREMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0Q0NQorOjEwNkRFMDAwRkZGRkZGRjMzMThGRkZGRjBDMzBDMzBDQzMwQzMwQzMyOAorOjEwNkRGMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q2NQorOjEwNkUwMDAwRkZGRkZGRjEzMTBGRkZGRjBDMzBDMzBDQzMwQzMwQzM4OQorOjEwNkUxMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0Q0MworOjEwNkUyMDAwRkZGRkZGRjYzMDVGRkZGRjBDMzBDMzBDQzMwQzMwQzMxNQorOjEwNkUzMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0QyMgorOjEwNkU0MDAwRkZGRkY0MDYxQ0JGRkZGRjBDMzBDMzA1QzMwQzMwQzNBQgorOjEwNkU1MDAwQ0YzMDAwMTRGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0RFQgorOjEwNkU2MDAwRkZGRkZGRjIzMDRGRkZGRjBDMzBDMzBDQzMwQzMwQzNFOQorOjEwNkU3MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0REQworOjEwNkU4MDAwRkZGRkZGRkEzMDJGRkZGRjBDMzBDMzBDQzMwQzMwQzNFMQorOjEwNkU5MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0RCNAorOjEwNkVBMDAwRkZGRkZGRjczMEVGRkZGRjBDMzBDMzBDQzMwQzMwQzMwNAorOjEwNkVCMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0Q4NAorOjEwNkVDMDAwRkZGRkZGRjUzMDRGRkZGRjBDMzBDMzBDQzMwQzMwQzM4NgorOjEwNkVEMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0Q0NAorOjEwNkVFMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNEQworOjEwNkVGMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q5OAorOjEwNkYwMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNCQgorOjEwNkYxMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0Q3NgorOjEwNkYyMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM5QgorOjEwNkYzMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0Q1NQorOjEwNkY0MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM3QgorOjEwNkY1MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0QzMworOjEwNkY2MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM1QgorOjEwNkY3MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0QwRgorOjEwNkY4MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMzQgorOjEwNkY5MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0RFNworOjEwNkZBMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMxQgorOjEwNkZCMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0RCNworOjEwNkZDMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNGQgorOjEwNkZEMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0Q3NworOjEwNkZFMDAwRkZGRkZGRjMzMjBGRkZGRjBDMzBDMzBDQzMwQzMwQzNBNQorOjEwNkZGMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q2MworOjEwNzAwMDAwRkZGRkZGRjEzMTBGRkZGRjBDMzBDMzBDQzMwQzMwQzM4NworOjEwNzAxMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0Q0MQorOjEwNzAyMDAwRkZGRkZGRjYzMDVGRkZGRjBDMzBDMzBDQzMwQzMwQzMxMworOjEwNzAzMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0QyMAorOjEwNzA0MDAwRkZGRkY0MDYxQ0JGRkZGRjBDMzBDMzA1QzMwQzMwQzNBOQorOjEwNzA1MDAwQ0YzMDAwMTRGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0RFOQorOjEwNzA2MDAwRkZGRkZGRjIzMDRGRkZGRjBDMzBDMzBDQzMwQzMwQzNFNworOjEwNzA3MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0REQQorOjEwNzA4MDAwRkZGRkZGOEEwNDJGRkZGRjBDMzBDMzBDQzMwQzMwQzM3QgorOjEwNzA5MDAwQ0YzQ0MwMDBGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0RFNQorOjEwNzBBMDAwRkZGRkZGOTcwNUNGRkZGRjBDMzBDMzBDQzMwQzMwQzNBRAorOjEwNzBCMDAwQ0YzQ0MwMDBGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0RCNQorOjEwNzBDMDAwRkZGRkZGRjUzMTBGRkZGRjBDMzBDMzBDQzMwQzMwQzNDMworOjEwNzBEMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0Q0MgorOjEwNzBFMDAwRkZGRkZGRjMzMjBGRkZGRjBDMzBDMzBDQzMwQzMwQzNBNAorOjEwNzBGMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q2MgorOjEwNzEwMDAwRkZGRkZGRjEzMDJGRkZGRjBDMzBDMzBDQzMwQzMwQzM2NworOjEwNzExMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0Q0MAorOjEwNzEyMDAwRkZGRkZGRjYzMDVGRkZGRjBDMzBDMzBDQzMwQzMwQzMxMgorOjEwNzEzMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0QxRgorOjEwNzE0MDAwRkZGRkZGMDYxQ0JGRkZGRjBDMzBDMzBDQzMwQzMwQzM5NgorOjEwNzE1MDAwQ0YzQ0MwMTRGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0QxQworOjEwNzE2MDAwRkZGRkZGRjIzMDRGRkZGRjBDMzBDMzBDQzMwQzMwQzNFNgorOjEwNzE3MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0REOQorOjEwNzE4MDAwRkZGRkZGRkEzMDJGRkZGRjBDMzBDMzBDQzMwQzMwQzNERQorOjEwNzE5MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0RCMQorOjEwNzFBMDAwRkZGRkZGRjczMUNGRkZGRjBDMzBDMzBDQzMwQzMwQzMyMAorOjEwNzFCMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0Q4MQorOjEwNzFDMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNGOQorOjEwNzFEMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0Q3NQorOjEwNzFFMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNEOQorOjEwNzFGMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q5NQorOjEwNzIwMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNCOAorOjEwNzIxMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0Q3MworOjEwNzIyMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM5OAorOjEwNzIzMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0Q1MgorOjEwNzI0MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM3OAorOjEwNzI1MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0QzMAorOjEwNzI2MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM1OAorOjEwNzI3MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0QwQworOjEwNzI4MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMzOAorOjEwNzI5MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0RFNAorOjEwNzJBMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMxOAorOjEwNzJCMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0RCNAorOjEwNzJDMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNGOAorOjEwNzJEMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0Q3NAorOjEwNzJFMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNEOAorOjEwNzJGMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q5NAorOjEwNzMwMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNCNworOjEwNzMxMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0Q3MgorOjEwNzMyMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM5NworOjEwNzMzMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0Q1MQorOjEwNzM0MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM3NworOjEwNzM1MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0QyRgorOjEwNzM2MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM1NworOjEwNzM3MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0QwQgorOjEwNzM4MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMzNworOjEwNzM5MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0RFMworOjEwNzNBMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMxNworOjEwNzNCMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0RCMworOjEwNzNDMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNGNworOjEwNzNEMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0Q3MworOjEwNzNFMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNENworOjEwNzNGMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q5MworOjEwNzQwMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNCNgorOjEwNzQxMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0Q3MQorOjEwNzQyMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM5NgorOjEwNzQzMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0Q1MAorOjEwNzQ0MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM3NgorOjEwNzQ1MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0QyRQorOjEwNzQ2MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM1NgorOjEwNzQ3MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0QwQQorOjEwNzQ4MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMzNgorOjEwNzQ5MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0RFMgorOjEwNzRBMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMxNgorOjEwNzRCMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0RCMgorOjEwNzRDMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNGNgorOjEwNzREMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0Q3MgorOjEwNzRFMDAwMDAwQzAwMDAwMDA3MDBDMDAwMDI4MTMwMDAwQjgxNTgzMgorOjEwNzRGMDAwMDAwMjAyMTAwMDAxMDIzMDAwMEYwMjQwMDAwMTAzMzBDMAorOjEwNzUwMDAwMDAwQzAwMDAwMDA4MDBDMDAwMDI4MTQwMDAwQjgxNjhGMAorOjEwNzUxMDAwMDAwMjAyMjAwMDAxMDI0MDAwMDcwMjUwMDAwMjAyQzBFNworOjEwNzUyMDAwMDAxMDAwMDAwMDA4MDEwMDAwMDI4MTgwMDAwQjgxQTgwQgorOjEwNzUzMDAwMDAwMjAyNjAwMDAxODI4MDAwMEU4Mjk4MDAwODAzODAzMQorOjEwNzU0MDAwMDAxMDAwMDAwMDAxMDEwMDAwMDI4MTEwMDAwOTAxMzg1NAorOjEwNzU1MDAwMDAwMjAxQzgwMDAxMDFFODAwMEUwMUY4MDAwMDAyRDg5NQorOjEwNzU2MDAwQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0M1QgorOjEwNzU3MDAwMDAwMDIwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0M1QgorOjEwNzU4MDAwQ0NDQ0NDQ0MwMDAwMjAwMENDQ0NDQ0NDQ0NDQ0NDQ0M0QgorOjEwNzU5MDAwQ0NDQ0NDQ0NDQ0NDQ0NDQzA0MDAyMDAwMDAwMDAwMDA2NworOjEwNzVBMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJGQjUxQ0ZDMEYwMDM1MAorOjEwNzVCMDAwOEFCN0IxMzEzMEVDRTY0NEYwRTk4MTU5MTgxODE4Rjg2RgorOjEwNzVDMDAwOTlDOEQ3QkYxMTY4QzA0RTIwQkUwMUM0MDc1OTQ4RDcxQgorOjEwNzVEMDAwN0Y1NTFBQzE1RTI2QzlDMDcwMEE4ODI3ODgzMzMwQjQyNworOjEwNzVFMDAwNEEyMUM0RUQ2NTE4MThFRTAxRjkyQkExNjI3MjQwM0RFNQorOjEwNzVGMDAwNzNBNEM5NzdGMzI4MUUzQ0I4RDAxNDk1MUY2MjBDQTE2MAorOjEwNzYwMDAwNUY5ODQwRTgyMjM0Rjk1MEE4QkNCODFFODQyRTM2QzVENQorOjEwNzYxMDAwNkVBRTg0MUU3MUY2QTdBOUEwRjJCRDU1RjBBQkNGRDUxMgorOjEwNzYyMDAwNDBFNUM3QTJBOTBGODFGMjAxN0VFOUIyMzREODAzMDA3OAorOjEwNzYzMDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDA5OAorOjEwNzY0MDAwMDAwQkVEN0QwQjc0NTVENUI1RThEQTlGQjNDRkZGNjQyMQorOjEwNzY1MDAwMjc4NDcwMTIzRUVFQzQwMEMxMDYzQzQyODBBMEE4M0JDNQorOjEwNzY2MDAwRkMxQTdERDQxRTEwMjVFNUExMUM0NDZCMDA0OTIyQTZGRQorOjEwNzY3MDAwRDc4Qzk2RDc2Q0M4ODcwNDUwRTNFNzUxQkQ0NTdCQTBGMworOjEwNzY4MDAwRDg4QjBFNUJBM0E2OEFCREI0M0Q4ODdBQTlDM0RCMjI0MgorOjEwNzY5MDAwNUFBNTJEN0E4M0ZBMkM1OEEwQjE1NzJBQkQ0RkNCNUIzRgorOjEwNzZBMDAwNzNBRUI1OTJCRDc3Q0VDOUM3NEY0N0VGNzg4RDQzNzY5RAorOjEwNzZCMDAwRDZERUVCM0JGRjZCQ0VCOTU2MzREOTRGRjIyRTI3RTQyMgorOjEwNzZDMDAwMUNGQ0QwQTcyOTExNDJBNkY3M0RDOTJENTkzMkM5MjM2OAorOjEwNzZEMDAwRTQxQjNFODIzRjFGRjkyMzUzNDgxNjIxMEQzRUY2QkNBMgorOjEwNzZFMDAwM0QxMEQ5MDVDRjJEOEQ4NEE0MjZDMkY3NzE0OTEyMjFGMgorOjEwNzZGMDAwMjQ0ODQ4ODk5QTBCMkQwMkIxODcwQkUxNTk3NzYxN0NBOAorOjEwNzcwMDAwMzIzRTY3QzIzMzg3Qzg4NDhDODRGMjE4RkRCRDIwRUJGQgorOjEwNzcxMDAwRkI5QzQyRkYzOTlBQTg4MEYxMTRGNjhBQThBNDNDOTZGMworOjEwNzcyMDAwQzJGNkRGMjI2NDQ2REYzQzQ4REQ1N0Y1NzhCODZGREVFRAorOjEwNzczMDAwRUVBN0EyNkIyNEM1RUI5RTgzN0Y5NEU1NTk4OTUwRTZBMgorOjEwNzc0MDAwRkEwRDQ3QTVDNzlGQjdENTFGNEZDMkI5MzgyRjk1QThDNworOjEwNzc1MDAwMzgyRkRFOUUxMDhCRDhFN0U3RUVFN0EzNDZGMkY4RjM2QQorOjEwNzc2MDAwRTNGQkMzMkREM0I4MDI2RTZEOEQzRTdDQjYzNkVBMjRBMgorOjEwNzc3MDAwRTUyNTg0MzYzMzNCNEJFOTMzNDRDQzVEQTVGRERCQ0RCOQorOjEwNzc4MDAwMjMxMjg3MUY5RjBGOEM2M0QwRkFGNDdGNDJFMURFOUNBNworOjEwNzc5MDAwNEI5MjQxQzAyMTQ5MzhFMEQ2MUM1QUVDMzNEM0Y0MjczMAorOjEwNzdBMDAwOUUyNDk3QzJBRDg0Q0ZCOUE4RkY3QUZEMzAyRjBBMDc3NworOjEwNzdCMDAwM0ZDQzJCMEQzQzk3QzJCQ0E2Rjc5Rjk3QkZEODNEQUZERgorOjEwNzdDMDAwNkE2Mjg3Q0Y3MEU3MTU5ODQ0QzgyMUMwODc2QTEyODIyMQorOjEwNzdEMDAwNzhCOUNERDE5RkFDOUI1Njc3OUFGRTA4QTcwQkQ1RTAyMAorOjEwNzdFMDAwRUIxQjIyOUU4MjI1NzJERkY4MDAwNzIzRTBBMDJGNkY5QgorOjEwNzdGMDAwMzRDNzQ5NkY2RUJBMDY3ODIwQkUzQTM4N0NFMjBBRTM5NQorOjEwNzgwMDAwMDdBQjBGOEZGNDE5OUExRDkzODAzNTY4RjExMEUwMkRBNgorOjEwNzgxMDAwOUYzMEY4RTU1N0I3REUyQTRGMjE5NEQ1M0EwRjRFQTA5NgorOjEwNzgyMDAwRjBDQkVGNUVCOTkwNDBGOUU4MTUyNzgwREY5QUNCQTY0MAorOjEwNzgzMDAwNTZDRUE1RjVCMkNCNjNBRjJDQTA0RDQyMzE0MzAyN0FCMAorOjEwNzg0MDAwREQwQTlEMTU0MDdGNUZCMzJBNjhCOTA5RkFBMzY1Q0JBRAorOjEwNzg1MDAwQkFDQUI0MTA2RUE2MDM2RTE0NzI4NjRBQ0IxRUY4QjU2RgorOjEwNzg2MDAwMjgwREZDNDgyRjFFQTQ3M0RFRkVFRDMzQzFDRjQzNkMwMAorOjEwNzg3MDAwRjg0MzdFNUVFRkEwQ0I4Qzc4QkY5MUUxQ0JBMkZGMDFGNQorOjEwNzg4MDAwQkU0NjEwMUI1RkQzN0VCMjJCMzUwNzVFQjI1Q0UzM0M3NQorOjEwNzg5MDAwMEFCRjIwQkM2RkZEOUI4Qzk3NDM5RUY0MTk5NENFM0Q4QworOjEwNzhBMDAwQTVCMjlFQTQ3OENBMjZCMTZDQjU4Q0UyNjNBMTRBNDAwOQorOjEwNzhCMDAwOEVFNUU0RUExMjkwQzM2MDc4NjkyNkE0MTJGODlGNEEyNAorOjEwNzhDMDAwMDdCMkM4MjZFNzdFQ0VGOUFCNjBDREVFOURBRDc0OUNDNQorOjEwNzhEMDAwMzNCMzQzMzFBODk1QUZEM0I5NEVFREJGOUUzQjQwQkUwNQorOjEwNzhFMDAwNzg2REU1QjJFNzQ4MDJDN0VCM0M1ODQ0RTc2NTk1QzlCNworOjEwNzhGMDAwQjE4NzI5REQ2QzJEM0RBQ0RCRTVFM0IxNUVGOUUyQTY5NQorOjEwNzkwMDAwMEY2MkE4MzNCODNDQTBGMDUxNEE2NUQzMUZGOUVDRjREQworOjEwNzkxMDAwQTE3QzRBRkEwOERGRThDNEM3NzBGMTc1N0E5OEY0RjFERgorOjEwNzkyMDAwNTlDNzEzNzhFRENGNTcxQjA1NUU3RDg0N0VERjUyQjJCOQorOjEwNzkzMDAwNzg0MDdERDUxRkFGNEY5MjA0NkQxNzJBMjU2NjMyNEREMgorOjEwNzk0MDAwQkJGRkI0RUIwQkY3RDMyNkRGREQ3MjU0MTkzNUEzNkEwNgorOjEwNzk1MDAwRTc0MDc4Q0I3NUFFNTdGNEVCNkY1MDhDNzc0N0QwQTJFOQorOjEwNzk2MDAwQUFBMzdDRDVCODFFNjg4RkRFNjMxMTRBNzc2NzQwRjZGQworOjEwNzk3MDAwNTA3ODI4MUQxN0E1QTA0QzhBNDlFQzYxRDY0RDRBQTIyMworOjEwNzk4MDAwNjU3RkQ0NEM2RTQxM0E0ODIyNUVDNEZDQkM4NkVDOTBDNAorOjEwNzk5MDAwQjM2QUFFNTMwRTkzMkE0QkIyQ0ZERkRGQTBFMTNDMzQ4MworOjEwNzlBMDAwMTgyRjE3RUMwMkRBMjEwNTg1MUEyMjI5QTA1QjQxQUZCNgorOjEwNzlCMDAwQTA5MkNFOUQwRjY1QTc5REQxNjY0QzI1RTlGMEEwNzJERgorOjEwNzlDMDAwQkM0QjkyQTBENzZGMEQ0REJFQjhDNzVCRTI5Q0VGOTA0OQorOjEwNzlEMDAwREI4NTU0RTMzREQxMjY4RDlDRUU2QkE3OTJGNzA0N0VBOAorOjEwNzlFMDAwMjgxMDJGMTM3NjFEQzdEMzY2MEZEOTJCNUQ0OEU1QzEyQworOjEwNzlGMDAwOTg2QkMxNTIyMDlCRTFEMzJDNkE4N0MwOTMyQTlGQ0RGQworOjEwN0EwMDAwNjNBNkVBNDA1NzY0OEZBNEMyM0M3MTQ4OEE0NzQyRjU5NgorOjEwN0ExMDAwMURENDBCNEEwNkY2MjNGQkVBOTBGRTk0OTA4OTRGRjFBMQorOjEwN0EyMDAwM0RGM0JDRDhGOEJENjU1RkEyMDZGMDUzMURENThDMkQ4MworOjEwN0EzMDAwNzQ4RTZCMTVEM0Q4MDg3NDMxOERDOUE3RUFFODg0NzlBMAorOjEwN0E0MDAwQTBFRjNDMTI5QkQ3QjdBNTdDNUM4NzlBRDM5Njg3NzYyQworOjEwN0E1MDAwNTkwNkZCQUU1QUE1MkE3RjJBN0NERjM2NjEyMDdFMjI5QQorOjEwN0E2MDAwNDk0RjRGQjcwRDlFNkU3QkYwNjY4OURBODM1RkEyQkZFOAorOjEwN0E3MDAwQ0MyNDMzMDE4RTdGOEEyRENFNEEwRDgwQUZGNzFCMEZBOQorOjEwN0E4MDAwRUFFQUY4M0U3QkQwRkQ3REFENDJFQUQyQzk4MTU2QzkxMworOjEwN0E5MDAwQzdGOEQyNjc2OTYwMUY4ODc1QUYwNTc2QTcyMEREMTYyNQorOjEwN0FBMDAwREJDNEQ2OUI5QjhCRjA1REJCRTcxN0JBNkFFM0JGQjUxRgorOjEwN0FCMDAwNTRDRDc4QTdGNjVGOEY4MEI3RThBN0I3N0RGMkEwQTM3MworOjEwN0FDMDAwQkRCQjVENkY3RjQyNUU1MDdCMThFODVDRDA0MTUwNEE4MQorOjEwN0FEMDAwNkM5NUU4N0I2RjZDQjEwNUVBNkNFRDYzMTUwQ0ZGMTlEMgorOjEwN0FFMDAwRTZERjhCQUY0RjM5N0ZEMTZFMzBCQUZBRDNFRUE2NTZCMAorOjEwN0FGMDAwRDA0RkVGNjkxRDU3NUQ0Q0U5RThGNzRGMjhCMTRERjRDMQorOjEwN0IwMDAwNkJGNThFODlGM0MwNUU3QThGRDNCN0MwRDM4OURENEQxNAorOjEwN0IxMDAwNzlFOUU4MjMxMzlFN0UyMUY5NzExQzQxNUZENUYyRjJDOQorOjEwN0IyMDAwMDFFOTYxMzBGQTdBQ0E0RDVGOUQ1NzdGMjFGNDc1QzgyQgorOjEwN0IzMDAwNEQ1RjFDMUUyNzNCRDlGQUM5RkQyMzE4NUUzOEJFRENGOQorOjEwN0I0MDAwRjhDOTg4OTc0RkRCQUUzRjNERkQ1QUEyN0NFREVEQkNGNgorOjEwN0I1MDAwM0EzRDNERjFGOTBBN0M3REQ2RjkwRTQ2NDc3OTg2NjlCMgorOjEwN0I2MDAwRUE3NEZDNTFENDhFOTE0MDdGOTQ5MTU4OEFDRTUzQTdFOQorOjEwN0I3MDAwMEZENDVCMzFBNkI3ODQ1QzEyRUQ0RjRCQ0M0RTUzQzk4QQorOjEwN0I4MDAwNkJEODVFMjEyOTRCNDc3QkRCNjk2N0NDNTdFODRCREEyMgorOjEwN0I5MDAwNEY3MzA5NDk3QTcxNUY2NEZBNTA0Rjk1QTg4NEU5M0ZBMQorOjEwN0JBMDAwMzM5NDNGMDNFQzA4RkVBM0NDOEVDMUJBQjNDMEZFMDdFQQorOjEwN0JCMDAwRkQzNTlCRUI1Rjg5REE1Qjc0N0RBMTMyRTdCRTM3RTA3MAorOjEwN0JDMDAwQjIzRjE0QkU1RkU4Njc2RjBENzM3RkVDOTdGOUZFMzgyNAorOjEwN0JEMDAwNDg0MkE4OEZDNEZFMzgwMzdGRjZFRThCMzk1QzQ3NkFCMworOjEwN0JFMDAwQzQ5NEU5QkFCNTgzOUVFNDI2MDlCNDFCNDFGRDRDOEVDQQorOjEwN0JGMDAwNEE0OUU2MkYyMDI1NjAzN0FGOTcwQTYyQTAwRkU4M0U3QQorOjEwN0MwMDAwQUYyNzhCN0U3RkVGMDcwQUVBODc4NjY4REQ4QTE2NThFMgorOjEwN0MxMDAwRjZCNTBEMTNCQkU5QjhGNzM0OTI2OUM1OUVCRUYxRUUxNworOjEwN0MyMDAwNTEzQjdDMDBFRkY2RTJGNTBFQkJGNkJCNTJBMjUwQjYxQworOjEwN0MzMDAwRTkxRDdGNTQ5QjU2M0MwRDg2NTNERkVFQTZGMDkwMjkzQworOjEwN0M0MDAwMjA4MUZGMDJBMUZCQTIyRjE4MDAzRkY2QkUxNzRFRjZCRgorOjEwN0M1MDAwQjJEMkJGOUMwQjM2NEYwMTE2NTNCMDJGNkRBN0I2M0I2NworOjEwN0M2MDAwQjkxODhBQTNBNTBBNEEwN0VEMUVGRURERkE0RDA1RUNGOAorOjEwN0M3MDAwNzdEQkZEQUNCQzYzRDNBQzhEMTY5NDQ3RjJGQTU2MTU5NgorOjEwN0M4MDAwRkI5RUNGQ0FCNzZERkE0MTA1RUMwQkRBQjJFOTlBQTlBRgorOjEwN0M5MDAwQkU2RUYzMjRBQkUyNjlGOEZCMzY1OTc2RDg1RjREQzY2OQorOjEwN0NBMDAwODJGMkZGNDNEN0UxRjc5OTE3QkQ0MEUxNDk4MTEyQjM1MgorOjEwN0NCMDAwMENEMjZCOTcxNTBBQkY0MUM3REQ5NTI1MDBGRkQ3MTQ3RAorOjEwN0NDMDAwMDJGNEVDMzc2MkYxOUIwQ0E0M0ZBNDdCN0ZBRTE5REI3RQorOjEwN0NEMDAwNDI0QjBERjQ4NTBDRjUyOERFMUU5NjYwNUZDN0VDMzEzMworOjEwN0NFMDAwRjBFNzlDNDNGQUE1N0M0MUJGQUZDRkQ2QjEzRUQxNkQ0MgorOjEwN0NGMDAwRjY1OTUxOUYzREQ2OEIyNzE3REVFRTU1N0JGQzgwQjc5QQorOjEwN0QwMDAwRUY4REY5RjAxNzEzNjkzRkQ2NDIzOTA2NjRGM0JEMERDNAorOjEwN0QxMDAwNDVEOTJCNkQ3ODdDQ0MzN0E3MEFGMDQ4OUE3M0QxMkVDMQorOjEwN0QyMDAwODk5MkRFMUYxM0NBNjJERjVDNDAzQTJCQzA3ODFDNDM4NQorOjEwN0QzMDAwMjUxRkExNzQzQTJFREU1MzAxMjgzMEFBRjRFNzcwOEY3NAorOjEwN0Q0MDAwNEJFNkU5RUZBMTVEQTU0OEU3QkUzNDc0M0JDQTBEMDdEOQorOjEwN0Q1MDAwREFFM0E4NDU1NDNFOEQ5MDQ4M0M5RERDNURBOUU2QTA0MQorOjEwN0Q2MDAwM0MxODUxNDlENzNCODA5RkUwOUI1NDlGMzBGQjJDRTE0RQorOjEwN0Q3MDAwMDNGRjU2QTY3MTMyQ0RGMzMzQzA3MzkzNENDNzFENEQyQworOjEwN0Q4MDAwOTIwOEE3QzFFMDlBMDk5RUFERDEyN0IzNTE1RTdGQ0U3QworOjEwN0Q5MDAwNzBDREQ0REUwRENGMTExMkUzOTc5NTZBMzlGMkNCNTAzNgorOjEwN0RBMDAwRkQzQjZEN0MzRkQ1MDI3RTM4RkE2Q0UyN0UzODc3N0JGNgorOjEwN0RCMDAwQkZEQTQxNjI2OUYwRUIzNzlDRkUyMTBERjYyNUI2NzIwMQorOjEwN0RDMDAwQkQ2QzMwN0QxMDcyRkI4OTE4OUVERDdBNjEwMUQ3MEI4NgorOjEwN0REMDAwMkQ1MUFBMTc5ODNDNUMwODdBMjBDOEUxREYwMkJCN0VDRgorOjEwN0RFMDAwOTA5RjYxOTJCNEU4RjcyMEY3MDc5MTUyMjZGRjdERjQ0NworOjEwN0RGMDAwM0ZFMEI3NTE1NTRFN0RBMDBENTExRkJDMkJDNTVGOTA4NAorOjEwN0UwMDAwOTEwRTg5MDRGM0JCNUZFQUI4NjIwMkQwNEYzRUIzQzc1QworOjEwN0UxMDAwQTMzN0I0NDUxMzM2MzhENENCNENERjA5N0Q5NjJDMTZFNgorOjEwN0UyMDAwRkE4QzIwRkNDRUUzNzM0ODkyMEUzRkU4QzMwNzM2MkM1MQorOjEwN0UzMDAwQ0U0MkJGREQ4RDQxODcxQzhBQjYyRUM2RkRBRjhEOUUxQQorOjEwN0U0MDAwRDEyRkRBQzFGREEzOTlGMEE3NkJDOTQ0M0E3OTU4QTg5QworOjEwN0U1MDAwMzA3OTE4MzE3QjUyRTBGMzQzNDJDRUUzMkU0MzRFRDZDNQorOjEwN0U2MDAwMENGRUM0QjEwRjhCNENFRDM5NzgzRTVERUZDRThCRTQ0OAorOjEwN0U3MDAwRDgyNkRBNEU5REFEQTYzQzE0QkU2QUY5OEI1NTEyN0QwQworOjEwN0U4MDAwRUUyQzY0RjBCNzY2MTFBNEQzOTBCMUUwODQwMkZBNThFNgorOjEwN0U5MDAwRUQ0NjdGNERBOEQyQkQyRkI2OTUxNUU4QTdFNzdBRDQ1OQorOjEwN0VBMDAwREY3NjNGRjUwMEZCQjhBMTNFOUIyOEJDREVCNkYxM0Y3NAorOjEwN0VCMDAwODU1QzRBQTFFQjUwMzcxMDAzRUMwOUQ1QTQyMjMxMDJBRQorOjEwN0VDMDAwNEYzRDBGRTg0NTM1NjMyMTdDNzY1NzU0QzJGM0JDRDk0QQorOjEwN0VEMDAwRjE0QUQ5QTYwNzU0MzNCRTA1RUE4RkY4Q0E3REVEQjA0MgorOjEwN0VFMDAwNUVGNTI2NTk1NjI0QzYwNzM5MzY3ODlCNEFBMTYzM0Y2QQorOjEwN0VGMDAwOTdBREJCRkNBNTg5RDYyQUQ0RUY4NjQ2QzYxN0Y2OUY1OAorOjEwN0YwMDAwNzdCREFDNzJCOUU3QTQxNzQxMjcwM0M4QkJDRjQ0MUZBNAorOjEwN0YxMDAwNkZDQUMyNUZFREM0QkY4MzRFOEFGQUYwMkJEQTg1RkFDRQorOjEwN0YyMDAwRjlBQjlDRjg3NTk3M0Y2RkJDRkEwMTRGMTQxRkU3NTFFRQorOjEwN0YzMDAwM0MwMTdEOUUzNzlCRDEyM0I1NDdEMTdFN0FDMEQ3NjE2NgorOjEwN0Y0MDAwMDJCQzFGMjgzNjY0NEJFQTZCMTc1NjcyOTg5RkY5MkNCNworOjEwN0Y1MDAwREQ2ODUxQkJFN0ZFOTVEQjRENjg5NzVGNEM2NTgwODQxQgorOjEwN0Y2MDAwQ0ZCNEZFQTM3QTU5QzM3NjU0MkU1NDJBQ0M2RTk3QzA1MAorOjEwN0Y3MDAwMUU5RkFGNkNBQjgyRjYzQjI5NUU4MURGNzcwMjdGNDNBOQorOjEwN0Y4MDAwN0MyMEExQTExQ0FFOTdEQjJCMzZEMkJFNUI4RjRBQjIwMAorOjEwN0Y5MDAwMDI0NkFDQkUxNEYxRUJFN0ZDRkU5MTI3NTEwOTdFQzgwNgorOjEwN0ZBMDAwMkRGRjRCMjZCQjBDRDA0QjAzRkJCRDlBMzhCRTQ1MTlBOQorOjEwN0ZCMDAwRkMwRDYwOUY4Q0E5RDNBNzAyRDgzM0I1REI1RTI3NTc5MQorOjEwN0ZDMDAwQTY1QjU3QjVDMkYwN0Y0N0RERTEwRTM0NEY5Rjc3RUVEOQorOjEwN0ZEMDAwNDczQ0NCNERBMDQ4RDg5NzU0MkIzNkZBMEU5NzMxN0ZBQgorOjEwN0ZFMDAwMDc0OUQwRjU0MDdENEUzNzFGMTUwRTRDQUYwRkJBRTY0RQorOjEwN0ZGMDAwM0Y5NkM3NTNEQ0Y1NUU1NkI4QkZDRTYwRjAzMjQ0RkYwMworOjEwODAwMDAwMUIwN0VFNUZDMEU3NkM5QkMyRTMyM0Q0MDA0MzIyMUUzNAorOjEwODAxMDAwNDlFQ0ZBNUJCOUYxNTAwNUJDQTc1Q0I3MDlGMEI1NUQ1NgorOjEwODAyMDAwMjZENUNDREYxQzQ3M0QxNEUxRTNFRDJDQ0ZDMUY2MEI4OAorOjEwODAzMDAwNTUyNjQ3Qzc5QUZBMTZDMEY3RDg2NjE5MkMwNUYyQjgyNAorOjEwODA0MDAwNjJFMEZCNTFDQkVCRjY3QjI4MUVEQTBCNDkyQzY0RTA5NworOjEwODA1MDAwMTBEOEVGOEJFMzM1QTRDQkZDNUNBNkM3RjJFQjI5MDk2MworOjEwODA2MDAwRDA3QUY5QTUyNDY5RDBGNkVERkIxRkE4RDA2ODM5NDI3MworOjEwODA3MDAwMzc1NDYwMEFGQkNBMTkzRTdEMjUyNDA2QTY5MEM3MjIwNAorOjEwODA4MDAwMjk5OTdENEY0MjRDNTIyOUVGQjE0MDk1MUUxODNGMDM2QworOjEwODA5MDAwRjc1Rjc3RTY5Mjk4RDdFODkzMUI4MkFFRUU2Q0JFQzc4NworOjEwODBBMDAwMEY3QUU0ODFFMjdCQUU5ODAwRkVDNjUyMTVGREU0RTQ0RgorOjEwODBCMDAwNjMwQTI3RTE0RjU0MjA1RTE2Mzc2MUJDRjY1OTZDREUyNworOjEwODBDMDAwRjQwREUyNTNENUQ5RkFDN0RDM0YxQkY5QTQzREZDMzRDQgorOjEwODBEMDAwQ0VDMzVBNDc2MkUzQjE1RThDNjBGQzg2MEE1NEYwNTcwNworOjEwODBFMDAwMzY1NTMzN0JENzhEOEZGNTI0RjFCODMyREQ0RUFGODcwRgorOjEwODBGMDAwOTA2RURBM0Y1MUY4QkVFMEM1OEQ2MEU3OEY4MzVGNjkwRgorOjEwODEwMDAwRjk5NzREN0ZEQzM4MUNCQjQ1QzQwRjg1RERCMjQ1RURDQQorOjEwODExMDAwNDRCRUI3MjhDRjgxNUUxMjc2OENCRkI4MTNDN0ZEQkZBRgorOjEwODEyMDAwOUNERTg3REFCRkJGQzRFOTZGNzVEQjM1NkU3QkE2NUU2OAorOjEwODEzMDAwRDYxREY2QUI3QjVEMUY3OTUyNTdDMEZDQjZFNDUzN0U2QgorOjEwODE0MDAwNEZBMzA3N0UwM0ZBOUFCNkRGMTE1REZDQUI4OTQ2NUY0OQorOjEwODE1MDAwM0Y3RDcyQzhDMEVGQTIzQ0U2QUM4NkY4MTk3QTdEMkE1MgorOjEwODE2MDAwRjc2MDhGNjYzMkJFMUEyQkU0RDAzNzI4NUYwRDEwN0Y4MAorOjEwODE3MDAwMTQ3Q0Y1MTExNTEyODc4MDRGRDQwRUE0MkY2Mjk2MjAxRgorOjEwODE4MDAwNUYwOTdFNTFCQTNCREFDRkE3RjQ2MEQ0Q0JFMEI5MDZFMQorOjEwODE5MDAwRkUyMjM5QjQ1QzQ4RTkzRDY1QjM4Nzg0QkM1MDRCM0I1MworOjEwODFBMDAwRTMxM0E1RkU3NEY3QTAyMTIzMUVDRjk0MzE3Rjc1OTZBQgorOjEwODFCMDAwRDU2RDQyOTM2MDY5MjdDNkY1Mjg1REZEMTdEMDk1QUE1NQorOjEwODFDMDAwMjcyNUMwRUI5OEZCMTdFMEJBN0VBOTMwNTZGN0FCMkNGOQorOjEwODFEMDAwN0VFQzVFQzdDRjM5N0M4OUJFMUJFRDc5M0YxQjhFQjIyQQorOjEwODFFMDAwRjg3RDMxMzYzRjU3OUNCREZFNTcwM0M2RDlGRDMxOTcwOAorOjEwODFGMDAwOUQzMzRDM0Y0MjhFQ0FGRDA4RENFRjM1NThGQkUxQzY4QgorOjEwODIwMDAwRDc5NUIzMjM5MDNFN0FDQjE5RTRFRDREMkFFNzhCQTNBMworOjEwODIxMDAwQkIxQzcwRTkwNzBGNjU0NzZDQTBGOUY5ODU5RkZFNTNGOQorOjEwODIyMDAwQzYwNTUwODcwRDAxMEU2RTM4NUVBMjNBRkQ4NzlGMzc1NgorOjEwODIzMDAwMUNEREYxRUY5N0I4REMxRjRDMUUwNDREMzMyNTJCRTBGRAorOjEwODI0MDAwM0YyM0NDQkYxMzIyRENCRkUzQTRGNzlEQ0QzMkRBMjE1QworOjEwODI1MDAwQzFCMEJDMTM0Q0M5QUNGQTZFRDRDMTYyN0M0QUVGNTVCNAorOjEwODI2MDAwQUE4RERFNDc5NzFFNEE0MTNCQjczRUNBQTQ4NzA2OTNCNAorOjEwODI3MDAwQjdBQjdDRTYwRDJBQ0FBREY0RkJGMUJFN0MwM0NBMjU4MAorOjEwODI4MDAwNjlGMjBEMzJFMkI1RUVGM0M5MzcxODJBQkM3QkZEOUJDQgorOjEwODI5MDAwM0M3RkUwODY3MjQxQzdDNkQyREY1MUI4QUMzRUU4MjFEMAorOjEwODJBMDAwRTg5N0Y5OThBRUNFMTY1NzVCQ0RGNzgxMzdGMDdERTRBRAorOjEwODJCMDAwOEQyNDFFODE4RkE3ODg1QzA5RkM3MjhBMUM4RTRDQjNBQQorOjEwODJDMDAwQzk5M0ZCNTQ4REYxNEI5QkU3NkRGMEFGOEE3OEY5NEQ2NAorOjEwODJEMDAwMURBQzJDRTY3M0YzRkRDRUYyRDdDOUUyM0NGMEVCN0Q4QQorOjEwODJFMDAwRkQzRTBGRTI2QkI1Q0JCRkQ2QUMzMkZENzEzM0E5NkI0RgorOjEwODJGMDAwMDVCQ0I1Nzg0ODE1QzhCMTFCNzRBMjhFQTBBNkVCQkExMAorOjEwODMwMDAwNjcxRTlDQjE5Mjk2QkZDQkVEOTFGN0E5NUMzNjZDNzE1QworOjEwODMxMDAwRDAzNUExQTQwNkY4N0RBNzZCREFCNTk3MTA2ODlGNkNERAorOjEwODMyMDAwMkQ4MDdENUEzNkMxN0RBQjFCQ0VBQkRBOUNGMzFCNkMyNgorOjEwODMzMDAwRkVFRUY5NTJGMkMyRjk2NjlBODdCQTQ3NEE2QjRGM0Y4RQorOjEwODM0MDAwMjJFNDBEQzc1N0E2QkMyQTkxNEZGNTBCMjAyMDVBREYxNworOjEwODM1MDAwOUE0M0Q4QkVGM0FENjBCMjA5RTUzNUNCQTcxQUFDRkRBMAorOjEwODM2MDAwMkY1NTQ2M0Y5RkI2RkRBQjgzQjQ1RkU3RUI1OTAwQ0M3QQorOjEwODM3MDAwRDY5NjZCQzVDMTJGMjRFMjgyMzVBNENFMUM0RDdGNTUwNQorOjEwODM4MDAwRjcyREIyNDYxMzVCQkRFODEwRUIxNTBGNUMyRkQzQkM4NQorOjEwODM5MDAwNEZFODNFNEJCRUIwNkZGRURGOTUxMkM3RDQzNEYzQkYzQgorOjEwODNBMDAwNUQ0OUQ0NDBGRjVFQzA4MzAyNEYxNUYxOEQ3RTYwOEEyNworOjEwODNCMDAwREY1QTM1RDQyNjY1NDFCRTUzMTdFRTAzRkQ4NkVBQTA4OQorOjEwODNDMDAwODc1QUY4MDVFNDVBMDk5MzZCQzExMkU3NzdCNzdGRjgyQgorOjEwODNEMDAwNDM1NUM0RTE1M0M4N0YxODgyMzZDMDdFMDhBNTE0RjAwNworOjEwODNFMDAwREY5NEFCMjc3QkVCRDNGMTZBNjA1RDE3NDIyOThFNzI3NQorOjEwODNGMDAwQTM1RTY3RjU2Qjg4NzFEN0VDMzJFNDNGOEMzRkQ0Qjc0RQorOjEwODQwMDAwOUY4RjcxRjVGQTkxMDZGQTc3NTUxMjMzQjEwRjE3REQ4OAorOjEwODQxMDAwRDU5RTk1NDhEMkE2MEY2QkQ1MUUwREY4QUM5NkRBNDVDMQorOjEwODQyMDAwRjZGN0VCQTM4QUMzNEZFQjdFN0FBOEU1MUMyQTgxN0Q4MQorOjEwODQzMDAwOTJDQ0ZDNDgzQTJEREJENkZEQTcwRTg5RTdBRjE4NTk0MAorOjEwODQ0MDAwNEIwNkYwREZBRDhGMzI3RkYwMERFREUzQjM5OERGRDA1OAorOjEwODQ1MDAwMjk3RjRGMzczMkJGRENCRjNERjY3RDBERkNGQ0E3MUVFOAorOjEwODQ2MDAwM0Q3NjE1QzA3QkVEQkYyQUM0MDdGOTFCOEY4NTQ5MEFFRAorOjEwODQ3MDAwRURCMUE0MDZGNkQ4OUEyRUM1NENBNkNEQUY2ODYyRjEzMAorOjEwODQ4MDAwQ0ZDN0MzODhBRjM1NEY3QTkzMEI2OUZCMzU0RkJGMzNFNgorOjEwODQ5MDAwODVEMEY5OURERUQ0RjNFMjY4QjA5QjFGOTU1ODFFODIwQgorOjEwODRBMDAwRDUzREU1NkFGQTdFOEQ0QTU2QTRGMzFCNENGNjMwRjlBOQorOjEwODRCMDAwNzNGMkQ5NjAxNUYwQjdCNDY3RkZGNUQ4NkZFNzUyOEY0NAorOjEwODRDMDAwRDdCNkRGMkVGNjc4OTA2RjY5M0Q2Njk3M0YyMjI1QzdCNQorOjEwODREMDAwNEJFOUU2QzdGMjNGNEUzRTIyQjFGOUVERjUyNEZEMzBGRgorOjEwODRFMDAwQkYzRDNCQjUwNDlENDdFRDlFMEY1MDlFQ0M3REZDODc2NAorOjEwODRGMDAwMTE4MDQzRUQ1RUM1QTEwNzZBRjcyODI5RUYxNDdDMUVBMQorOjEwODUwMDAwODMyN0M0OERBNDE5NDAyNzlDNUVCQUQ2NjFCQ0E4QTY1NworOjEwODUxMDAwNzNFQjA3RTBDN0E4RERFQjk0NkIxNDJFQjExNEMwRjUyNAorOjEwODUyMDAwMEQyNUI2MTBDQTRGRkQ0QkM0QTBBMDdBRkZEMEMzMTFEMQorOjEwODUzMDAwODAyQkVENzdBNTk2MDVGQUM2NDlERkQwRkZEOTlDRkVDMgorOjEwODU0MDAwRkQxMUQyODNGMUJBREFDRTc2MzY1RUQ3NTc3RTBGN0EzNgorOjEwODU1MDAwQTVENjI1M0ZERjg3NUZGMkZCREIzM0Q3Nzg1Q0Y2Q0MwRgorOjEwODU2MDAwOUVBMUM1RUJENkZFRjBDQzQzMTYxREY3RTQ5MzdGNzhCMQorOjEwODU3MDAwQzhBMkYzQkZFNUFGRkZGOUQwQjc4MDNGN0ZFNkQ3NDE5MAorOjEwODU4MDAwRkVENzNFRkFFQjA4QjFEMTYzQUQ4N0YxRTNFOUIxQzRBMAorOjEwODU5MDAwQTI3QjU0NzJGQTM3REUyNEY4NEI0RUZGRjRGN0UzMEM1QgorOjEwODVBMDAwQkFFRUQzNEZGQzI1Q0ZBMEY1RUI3RjNBN0YxNEMwQTFFNAorOjEwODVCMDAwRkVDNzczNDcwREI0RkYwNjdBNEQ3QUVERjM0QTIyNUU4QgorOjEwODVDMDAwOERCRDEyMzM4MkY2RjFBNzBCM0YwN0JBMEU4QzgzNzk2QgorOjEwODVEMDAwOUUzQUUyOEQ4MURCQjk5NkJFNkI5ODBBRjg1QTg3RkEwQgorOjEwODVFMDAwMThDQTFCMjg5QzZCMUVEQkZDMDFDODg5RkVGMEI2NDYyRQorOjEwODVGMDAwQ0JFOEFDNEY4RDA2QTc3RDRERDczQjBCMTA2RkE0MDc4MgorOjEwODYwMDAwRjVBOEJCN0VFRDZCMTQ5RjE3NjZDNkRGMTlGMkIxMDZBNQorOjEwODYxMDAwRjJBRUY2QjE3NjM2NUUyN0M1NUZBNDNGRkU0RUMxMkY5RgorOjEwODYyMDAwQjNGQUUzRUYwRTE3RkVDRTkwNUJCRTk3MEY3OThENUQyOAorOjEwODYzMDAwMjMxQzcxNTJGMUVDOEIwRkM2QjNFMjAzQzgwQjIxMEY2MAorOjEwODY0MDAwMDY4MzZGQjVDNEU2QjVDQzYzM0VFODAxQkU3QTMyRDg4NgorOjEwODY1MDAwOEJERjg1ODBERjFGOUUxOTQ3Mjg3RDFDRjdGNDVDMEY5OAorOjEwODY2MDAwNzJCM0U3QTc1RTdEMTc3REJGRTZBNzZGMjA5RjlERkVEMworOjEwODY3MDAwRjEyQjlBODFGOTk5MjQyNEU1RjEzQzMxRjY3MzA4RTQ1MQorOjEwODY4MDAwNzAwRERCQ0I5MURBRERFMTk0MzdEMjg3QTc5QUU0QTJCMworOjEwODY5MDAwNEEyMzgyRUY4RkUxRkIyNEEzRkY5QUU0RkUyNTUyMUFCRQorOjEwODZBMDAwQkNCREUxMjk2Mjc2NDA3MjI0QzI2NURERUVERjY5Q0M5MworOjEwODZCMDAwQkVFQ0MzQTc1NDBFRjgzQ0I2MDBERTY3QzJBNzU4QkY5NQorOjEwODZDMDAwMEVFQjlGNjlDM0VCNkVDNkI3RUVGQTM1OTQzRjQxRUZGMAorOjEwODZEMDAwRjVDMzZGNTI3QTAzOUVBNzc3N0E1NUQwN0JBN0MxRkU2OAorOjEwODZFMDAwMEFGNUM3N0IxRkZDOTlGRDMzRENGRENBMkI2RUZFMTYxNQorOjEwODZGMDAwRjE2MzBFODdDQ0Y0NjE3MTNCNjBFMEY1MEQxNzdFM0ZBRQorOjEwODcwMDAwRjcxODBFM0ExMjcwM0NGOTcxN0FGOTdGOEFDQjhEMUFGQworOjEwODcxMDAwNjI1NTE2RDhFQzEzOUY4N0RBMjc5MDVGNDZFMkQ2RThCOQorOjEwODcyMDAwQzJCRUY5OUU4NDdEMDRBNUJGOTM4RjJBMThBRjY5RUQ2MAorOjEwODczMDAwM0M4MDcyREMyRDJGNkE0OEZBN0RGQjVGM0RDQzVFQUMzRAorOjEwODc0MDAwRDlCQjdGMEFDOEI1OTNDRjNEOEJGNDU5RjNEODMxMEQwRgorOjEwODc1MDAwRjYyRjJGRUU3OTRBRUIyRUVERTMwN0QwMEY0OTlCN0VFMworOjEwODc2MDAwMzhGOUEzRkQ1Mzk4M0M0OEJGRkYwRDZBQUNGRkRBN0Q5MgorOjEwODc3MDAwQ0VGRTZCMUZGQkMwRDFGRjVBQUI1MzYzNzkwQzAzOEY0NgorOjEwODc4MDAwRjNCRTZBMkU4NUY1QkU3RkM4NDM0MDlFQkVERkE5QTQxNgorOjEwODc5MDAwRjVCRkY2NzBGRDI4RTBENEZBQ0E4MkRGNDE5Q0JGRUMzOQorOjEwODdBMDAwNzBDMDAwM0REQUI1QzkxQzc1MDdEODZCODczRDA0RTQ3RAorOjEwODdCMDAwMzc1MUNEM0Y3ODY5QjlFQjk1MDBDNjMzQkEwRTVGQUI0MAorOjEwODdDMDAwMTgzNkZGQzQzMzJFNzhDRTdDQ0Q5QTFCQTZGRENERUM5NworOjEwODdEMDAwOEU5N0MxMTZDQTJEMzdDQThGRDI3REEzREQ3RkY1NEE4OQorOjEwODdFMDAwRTUyODkwRkJDRDYwQ0Y0Rjg0RjE2MjUxRjA3RjI4OTE1NgorOjEwODdGMDAwMDU5NTJDN0Y1MEQ2RkQ2OUY1MzdFQkNGMTM4QTYzQkUwNAorOjEwODgwMDAwQTA0Nzk3N0I3REI2NDg4RjYyQkZDNUZENERBREExRjRGMworOjEwODgxMDAwRkVFODA1OUFEODE3RDA3MTZENzI5MERBQUE1NUU5RjA4MgorOjEwODgyMDAwMzY0QjYzNzY0OEE2RUY5NzZBQ0NERjkzRTk3QkM1MjA4OQorOjEwODgzMDAwRUQ3QkY5OUJFMzQ3MEJDQkYxNzRGMzlFQzZGQjcxRkIxOQorOjEwODg0MDAwNTczM0M5MDMwRkVGQTc0QzMzMUNFQjA1NzgyRkIyRTU2NAorOjEwODg1MDAwQzU4RjI2Qzk4RDkwMjc0QTQyMjE3NzNDM0FFRUIzQzc4RgorOjEwODg2MDAwQTNBQjBFRUQ4N0Y4NzNFRUQ1RkJGMjAxRkUxMUQyQUM4RgorOjEwODg3MDAwQkY4Nzc2M0M4OTlEMUJDMDhFNzVDNzlGREQ3OTg5OTkxRQorOjEwODg4MDAwRTJEMUJFNTBDRDkxMTRFOURGNUZGRkY4QkI4OTc5MjhCMgorOjEwODg5MDAwQ0Q2M0U2RjkwQTZERjFGNzY2QkQ1RkZDN0RCRDQ2QzdBNQorOjEwODhBMDAwNkRDOTgwODcyNURBOUM3RkQyODBCRTY0OTI0OEY3N0RBRgorOjEwODhCMDAwMEJBNzlCQ0I0OUY3NTMyQjYxOUUzMTE2QkY5RkVEODJDRgorOjEwODhDMDAwRDdBNTFDNUUzRjNCOUYyRTlDQUE5RTBBNjJBODFFMEE0QgorOjEwODhEMDAwREZCOTRCQ0M2NjEwODFGMzk3RjdBQ0REMEY3QzI2RTI1NQorOjEwODhFMDAwRjdENjQ0Rjk1QzcwRThGMDFCNkU1RUM0MkFERkUyN0JDOQorOjEwODhGMDAwQjUyMUU0NDUxMDNEMjdBRDVFRTg5Qjg3QzVGNzU1NTE4RQorOjEwODkwMDAwREMyNzc5Mzg5RjFENzhGMzY2MUZDODJEOTUyNDJBMEIyNAorOjEwODkxMDAwNjFCRkM0RTM5QTk4NkY0RkZCQ0I0QkY5ODk0OUU3QUIzMgorOjEwODkyMDAwRTkwNkRBREI3OUE5RDUwRkRDMDQ3MTc1N0QwQ0M2MjM2NQorOjEwODkzMDAwOTRCMzk3QTBGRkQwRERBRjEyOEQ1OTk4MEYxNjMyMkE0RAorOjEwODk0MDAwMTREQjM4QURCOTJDM0VBM0VBRjFCNDc5QzNBQkI0QzQ5RgorOjEwODk1MDAwMTNCMDVFRTVFQzY1RDhBRkVDOEI2MTNEMTIxQTVBQkVFMAorOjEwODk2MDAwRUM3N0FFOEUyMDdDN0QxNEJFMjAxRjExNjRCMDJFOUU0RAorOjEwODk3MDAwMzc3NUY3RDUxMUQ0MzNGRTgzOUU5REYwREQxRjYyNzlFNAorOjEwODk4MDAwNTRCN0NCODExOEU0NTlCOUYzQTgyQURFNkEyN0QwNUYxRgorOjEwODk5MDAwRUIzMTA5RTMyODgyN0U1QjBCRUJDRTAzMzkzRTQwMUVCMAorOjEwODlBMDAwRDU0QjlBQ0RBRjlFMjk4RkNBMUZCQTExRjNBOEZDOUY1MQorOjEwODlCMDAwMzY4RkNBMkE5ODA3RjY1ODZCMzYxMTc5NTU5NjQ0RTdEMAorOjEwODlDMDAwRDFDQUYzQTJGRUEzRjVBNUI5QTA5RjVBRkRFMkZCQ0I0NQorOjEwODlEMDAwNzM0RDdCRDk1QTdGMDBDQjNDRUY2QUI0QjdCRDA5RUEyRgorOjEwODlFMDAwRTc4RTI2NzU5REU4Q0YzM0M5MzUzNjM5MUJGMUFBMDhDNQorOjEwODlGMDAwRTc3RkQ2Q0M3NzM1NDc5RTdDRDQxMTVGM0FGMEU2NjZBOAorOjEwOEEwMDAwMUZFODZGRkFBQzJDMDJGODUxQkEwMkJCM0QyRkQ1NEVDRAorOjEwOEExMDAwRUNGQTQ4M0MwNTFEQjUxNjBGMUNCRjUzQ0Y1RTg0N0U5MworOjEwOEEyMDAwN0M1MUY2RTk0OUQzNEM1MzdGQkU4RkQ5MUY4MjdFN0Q5RQorOjEwOEEzMDAwQjkyNDA5N0FDOTY3MjQxRUI4MDlFODM5MzcxNDBCMzJGQQorOjEwOEE0MDAwQkFDNDM4NTk1QjA4REQ1M0ZERDZEMTU2N0MwM0M2REI2QQorOjEwOEE1MDAwQ0VFODA0Qjk1RUQwNzFGRkY5NUZDNkU3NUY2NDYxNUM4MAorOjEwOEE2MDAwMjI0NDMwOUU5Njc5MUQ2NUI4OEU1NTlBMTlGNkRBRTA0MworOjEwOEE3MDAwOTg3QjVFRkFCQ0Q0QkJCRDZDM0QyREYxRTUyQ0VGQUMxMAorOjEwOEE4MDAwREExOTg3MTU3OTFBQTI3RTUwNEExNDc4NDExRUU2QjI4NworOjEwOEE5MDAwMzhBQ0VDNjNGQ0Q2ODcyRkFBMkE2Q0ZFQ0QyNkIyREM1QworOjEwOEFBMDAwMDIxMjUwOTc3N0UyRDE0NjU1NEY2MkZEMTI3RkUyN0M2OQorOjEwOEFCMDAwQUYyMzNFRDdDREUyQkFBRTc4RTI3Q0U1MTZDNkRGODNCRgorOjEwOEFDMDAwRTA0RjlDQ0JEODBBNzFCNzg5MTA5RjhCRjJGMzdEMDZEQgorOjEwOEFEMDAwOEZEMzk5MkNBRjI4MDMzREI1MTUwRjFDODdFQTY4OENGRQorOjEwOEFFMDAwNjFGQkJCMUFDQjU5QkU5MjQ0Qjg1RjNCRDkwNDc0MDJGOAorOjEwOEFGMDAwNkUwOTQ2RjczRjY4MDJCRTA5MkI4MjJGN0U4OEU1M0I1MAorOjEwOEIwMDAwMjU1NkJFQzlGQkNDNUNDODM3M0NGMEU2MUI1NUFCMjhFQworOjEwOEIxMDAwN0RCNDlBMDFFNEZGQzFENkE3Mjc2NzIwNUU4NzNCNEU0QworOjEwOEIyMDAwRkZGNUIyNzFEQkNDMTBFRTc3MDc1QkI3OUU2MkUzMEUwOAorOjEwOEIzMDAwNzUxQzExNUZFQjVCOUYwRkM3NjkzNTA2MTlBNzgzOEQwNQorOjEwOEI0MDAwMzNGOEZDMTk5RkRDQjE3RjM1RTYyRkY4MjhGRkZCRTlFRAorOjEwOEI1MDAwN0JERkVDMUU5MjQ4RDM3RjE2RTc5RjAzNkY3QTUxNUU0RQorOjEwOEI2MDAwQjdFNUIyRkMyODRGNDlDODY0NEU0MDY3RkY5RUQyQkNBRgorOjEwOEI3MDAwMzk3OERFQTFFQzAyQ0M5RkJGNjM3RjNCQ0ExOTBEQzZEQQorOjEwOEI4MDAwQTE1NTNDQjFEMDRBRDYyRTYxQzIzOURCQzgzQzgyRjEzNgorOjEwOEI5MDAwNjc0RjQ5REUyQTc4REY0MDNBRTI3MzQwMEY5N0NCMkNDQgorOjEwOEJBMDAwM0ZCOUE0RTQyNkU4MjcxQkY4OTJDRUEzRENDN0Y2OURDNAorOjEwOEJCMDAwOUU5MjhCNkY4NkZBRkJBN0JGOUU2ODAyMzg5NTMzM0E2OAorOjEwOEJDMDAwMjAwN0YzMUQ3MDZDMzU4QUM0Qjk5RDAxRjlERTUzRUVBMAorOjEwOEJEMDAwOEM1QjEwOUYzM0ZGOTNBODRCMzA2RTRFRTU0Mjg3RDdENgorOjEwOEJFMDAwNjY1NzUyQkQ3ODFGRjIzMzI5QjNDMERFREJGRUI1NkI4QQorOjEwOEJGMDAwNjM3NjdFRkU2NzJERkUxRDU2NUZFNDZCMDkzRTRGOUYzOAorOjEwOEMwMDAwMzdENzlBMkJGMkU2MTIzRUE1MENDRTI5RjVFNjUzMkY2NAorOjEwOEMxMDAwQ0NCN0U3N0ZGMTdDRUE5MEM4QTdFNkYxQ0MwRUZBNUYwQgorOjEwOEMyMDAwQkFGQzM5RjczOUM2Q0YyQjlGRkEyOTJGREYwRjA3QzlCNgorOjEwOEMzMDAwNThDOEE3RkU4OTg3QzQ1MjkwMTdGMzZCMjUwNjc5MzE2RgorOjEwOEM0MDAwNkVGQTcwRjdFNzNFMDdEMDZCOEY2NEUwRTdGNzAxMzgwNAorOjEwOEM1MDAwMzZCOTk3OUY3MEUxRUQ0NjNGQzZFN0M0NzhDRjgzN0M3NQorOjEwOEM2MDAwMkExRDlDNEY0NzU3M0JGQjE5NUJFNzNDOUY3NTVFODM3MgorOjEwOEM3MDAwMzM1RTU1NjgxNTM4RUE5RkRGNTZFNEY4M0VCRUUzMDJERQorOjEwOEM4MDAwQzdGNzg5Rjc0Rjc1OTQyNzI1MkY3NkQ0RkZEMjlFMzlFMQorOjEwOEM5MDAwOEVGMkU0Q0UyQjFERjUyRkRDQkJEODUxQkUyOEI1Q0MwRgorOjEwOENBMDAwNTE3RkRBQzExQjFDREZBNzFGNUFFM0Y4M0VGM0M4N0FENQorOjEwOENCMDAwNDc3OTU2RjczNzFERjUxQkE4NzkwMkY5MkM3MDQwMDA0QgorOjEwOENDMDAwRjdBQkRCNDZDQjc2RkE2Q0NGQTY3QTI1MEJGM0I4MzUzQgorOjEwOENEMDAwOUVENDhGRjE2Njk2OEJEQzk3NjdFMDZFQTcxNDZCQTYyNworOjEwOENFMDAwNEVGOTU3MzEyNkNDRDMzMUNGRjA0NkU0MjNBNTM4NkY2NworOjEwOENGMDAwOEU4MUVGNjcyQzAwQkYxMzI5NjNFN0I0NDRGQ0RBNTM3RAorOjEwOEQwMDAwNEM1MjdFQzhFRjBCQjlGMEVCOEE0QjdCOTQ2RDI5QzBCNworOjEwOEQxMDAwQjM3NkY0Q0IwN0E1NDg3RkJDN0FBMkVFN0NDNkExQzU4QQorOjEwOEQyMDAwQjU1NUUzQjNFNTA3RTRGOTM4NUY4Q0E1N0M4MTdFQzREMworOjEwOEQzMDAwOEYxNUQ4Qjc5MDc5NjFCNDBGNkNGQjFCODRBM0Q4REY3MworOjEwOEQ0MDAwNUNFNjIzQ0QwMDUzQzExNzE1Q0I3QjQ2QkY4MEQ1QzQ0RAorOjEwOEQ1MDAwQkVDNjJCMEYyNzJGQjlCRjVFRjFBMkREMjVFNENDNjA4NAorOjEwOEQ2MDAwN0E0NTQ5NEU3M0U0MjFCODlGNTRGRTk1Rjk2MDlGMUVFMQorOjEwOEQ3MDAwNTk4NkYyQTg3NzVGRDAyQjFGRTMzM0UxQkI0NzhEQTE2MworOjEwOEQ4MDAwN0NFQzk1N0Y3QjBBMUM3MjYxQThGNjk5NUI0RURGMDUyRgorOjEwOEQ5MDAwNDIxRkNGMDVBNTk3RDcxMUM4MEJBMzcyRTlDRUFCQUY4MQorOjEwOERBMDAwQzIzODE4QTkyNzhFRjM4MDc5NTU3MTFGRTgzRDZBOTc1QworOjEwOERCMDAwN0RDNTY3REIzRjQ3Q0E5OTdERjZGNzY2QTc4NjYwQkQyQworOjEwOERDMDAwMzZGOTI3RUM1NTAxRDcxMTg1NzU3MThDRUI4NTY1MDI1NQorOjEwOEREMDAwRkJBQUE2RDlCMTI4RjgwMURCQTA4QTZEOUZGNjVEREY1QQorOjEwOERFMDAwRjk1OEJGMzlBNEM5RTAyRjZEM0UzODFGRTMwMzVFN0ZGOQorOjEwOERGMDAwREMwNzc5Q0U0RDlFNzgyNUFDQUIyOTVCRDZEM0U1M0IxRAorOjEwOEUwMDAwNkRGNjMxRkY4Q0Q2MTA5Q0I2N0IwMEZBRDAzNEJBRUZFOQorOjEwOEUxMDAwNEZCM0RFN0ZGMTMxQkY0QkIzQkVGODIwRThCOTlDQjA1MQorOjEwOEUyMDAwNjY0MEZFNDRFQkZFNTk4QjMwNUY3N0ExQUFDM0JFOTYyNQorOjEwOEUzMDAwRDA0RERDM0JCNkI4MjIyMTcxRjQ2NzY5QjkzMkVBNDVGRQorOjEwOEU0MDAwQUQyMTgyRTMwRjM2REY1QjdEQ0NDRkUwNkRGMDBGMzhENAorOjEwOEU1MDAwNUZBRjk2REU0RjkxNjlCRTlCNjFCRUI5ODNDRkQ3MEJFMgorOjEwOEU2MDAwRjM5NTYwRkMxMDhFQkZDOUM3RjBFODg2QkY4Nzk4NkQ4OAorOjEwOEU3MDAwRjM2OEJEOTY2MzVGRUUyODQ2OEE2MUY5N0FGNzJFOUMwNworOjEwOEU4MDAwOEE3NDRBMDVCNTgzN0VDNTNFODJEMkVGQzM0MEJGNjI3NQorOjEwOEU5MDAwRkYyRUNFQjNERUUyNjM3OTA5MDJBRkM0NjBGRTg4MTExMworOjEwOEVBMDAwMDkxNUY3QkQzOTA5QjZGRkVEOTMxRjhDOEU3MjNDMzE2MQorOjEwOEVCMDAwODJFN0JGQzZBODE4OTcwNDM3OERERDhGQTFGOEQ5QkUwOQorOjEwOEVDMDAwQzc3QjY5MENGMUQ1RkUxNTk1NkMwMjdBMkJBNkVCODE1OAorOjEwOEVEMDAwNzNCOTA3NTlEQ0E5REQxM0FCOEE4N0ZBQzYxM0VEREYzNgorOjEwOEVFMDAwRTFGQjQwOTUyQ0M5QzI3QjUyOTQ4NUQxNzRGNjY3MkY2MworOjEwOEVGMDAwOUQ3M0I4QjlFNUVDMDExRkNGQzNDQTI3Rjk0Q0NFOTZENAorOjEwOEYwMDAwMkU4NUEzNDQ5OUZBNzFEQjFCMEREQ0FGM0NGQ0YzMjlFMQorOjEwOEYxMDAwMUQwOENGRjYzMUY3QTExRDJERkM2MzI0NUEzNjg4QkZGQQorOjEwOEYyMDAwODdDNTRCRkJGMEJDRDQ0ODUxM0NBQTU3NEM0NUE3NUZDMgorOjEwOEYzMDAwN0IzMUM3NzM5RDJCOUY5N0UzNTlFMDU3RjhFRDQ5MzQ3OAorOjEwOEY0MDAwMTdGOTVBRTA1QjAxNzgwMkFFOTREOUQxODFGNDk1QzI0OQorOjEwOEY1MDAwRjlDNjBEQ0Y1M0ZGNERFMTc5MDRENjAwNzQzQjk2QUVCMAorOjEwOEY2MDAwMUZGOEU2QzAxNTA0RTM2MDJFN0UxNEVEMDREREJCRDdDOAorOjEwOEY3MDAwMUZGNkZGRjc1RUJGQTA4N0NDRjVBREI0RkIwRjExRDc4RQorOjEwOEY4MDAwMEQ3MzdBRjM3MUJERjk0MkY5REI2RDcwOUU0NENENjVDNgorOjEwOEY5MDAwRkJERDcwNzlGM0FEMzI5Q0MzMjA5NjBFRkVCNUIwMzg4MAorOjEwOEZBMDAwQkY1M0U2QkM3RjI0NTBFQURDN0ZGODVDRjc0RDc4RjhDRAorOjEwOEZCMDAwRkVBM0RGRkQyQURDQ0UxMkU3RjlEREYzNzdFMzZCQUUyQgorOjEwOEZDMDAwM0Y3RDFFMjYxOTkzREVFRkVBOEVDNzg5Rjg4NkM4ODM5NworOjEwOEZEMDAwMTU3MTAwODQwMzVEQkY2Nzk2MUM0N0Y5NTc0NkNDOUQwOQorOjEwOEZFMDAwNjlFNEQzMzIzRkQzMEI1RENGRjkzMTRGMjI1Q0E1QTFBOQorOjEwOEZGMDAwM0ZCNkEwMkM1NTAxRTU4MjNBMTIwMzNENzFGMUYxNDNEMQorOjEwOTAwMDAwMjQ0MTNCQkQyMEMwRTQ3RTQxNTk1MjAyQkY0N0MxNDlDMworOjEwOTAxMDAwOTYxN0I4OURDNzJCMEJFQTkzRDI0QURCMzg5NjlGRTk4NworOjEwOTAyMDAwQUQ4RkRFQkMxREU1RTM3MzYzNTk1RUZBNkQxNUNDN0UzMgorOjEwOTAzMDAwM0IxNEJEQTFBMzAyQzYyRDY3RjlFNDYxQkE1Rjg0QkNFRAorOjEwOTA0MDAwQjFGMDExNkYxMkVEQURCMjZFMDI3RTU0QUEwNUFDMzBENAorOjEwOTA1MDAwRkQ3RUJDOTE0Q0JENzEzQ0U0N0RGOUYwNzlCMjUxQzcwNQorOjEwOTA2MDAwRTc4MUIxREFGRUNCNjlCREY1ODUwMTAzRkE2RDI5MEEwNgorOjEwOTA3MDAwQjBGM0JENjExRkVFRjdGRjlDRkQ3NUY0QUI5RTZFOENFNworOjEwOTA4MDAwNjJGREI2NkY5QjY4NTczNEVGM0Y4MTdFQzNBMDM5MkREOAorOjEwOTA5MDAwQzZGQ0E4QTY0MkNBNjEzRTg3NENGMDczMTAzNTY2MkMwOAorOjEwOTBBMDAwODZFRjA3N0U4M0Y1MTQyREYxMUIwQkVDOTM2NTFBRUUwQQorOjEwOTBCMDAwRUYwMTBFMTA0RjY4RjJCMzdDQjlDREZFQkE2ODM2M0NCMgorOjEwOTBDMDAwMEJDOThBNDU2OUUwQkQ4MkVCMUQ0QTUxOEE5NkQ3OTc0NAorOjEwOTBEMDAwODdBNDk1QTc5NDJDRjAyNzk3OTE0RUM4NzNGN0I0MjREMgorOjEwOTBFMDAwMkI0MDRGOTNENUJBMDFFMzhDRjEyNTJCQzA3RjNDQTZEMgorOjEwOTBGMDAwNUE4RjgxMEY1RDJCNjdFNzQ1MDQzRTNDN0UxMjdGMjIyRAorOjEwOTEwMDAwMDRGNTUyRDJBRDc0REM4OTAxMURDNzI5Mzg5MkM0QkM2NAorOjEwOTExMDAwRTU4RkRFOUM5OUQ2RkVCRkZENjgwNTdFREZENjU4NzlDNworOjEwOTEyMDAwNzg5RThEOUY0MzE5RTI5NTFCOEJFNzNDRTBBN0UzQkQzQQorOjEwOTEzMDAwRUE2N0ZDOUFBOTVGRjExQzZBQkZBRjcyM0EzOUYwRTZBMAorOjEwOTE0MDAwQzQ1MTYwNUYzNjY0QzhBMzU2NzQ4QUE3MTE0QzNFODEyRgorOjEwOTE1MDAwM0Y2MkZENzg2MzU0NzZDOERFMEY4Mzg3RjJEQ0IzMEM4MAorOjEwOTE2MDAwQUZBNThDM0U5QjdFM0MzMTBCRkE3REZFQ0RBNTNBRjgzNworOjEwOTE3MDAwRkJGRTk0NUI4Q0ZCODY1MzRGN0I0REIwNUY0RUU1OTBCRQorOjEwOTE4MDAwNkFDQ0I3N0M3QUU2OEJCMDNGRkM0M0UzQzExQ0Q1MjZBMgorOjEwOTE5MDAwMTc0RkZERTg5NTE5MUVEQURGQTkyNzVGOTlBMTIyNzMwMQorOjEwOTFBMDAwMjUxRDc2RUNCQTczQUZDRTAwM0JDMTlBNDM0QUVBRTg3QworOjEwOTFCMDAwQjM1NkQ3MDhGNDVCRUI2M0VCMTA3OTcyREJGM0I0NTY2QworOjEwOTFDMDAwNzg1RTE5Q0NDNkY2NzlBM0U0M0JBMUFDRjg1RTFERjczNgorOjEwOTFEMDAwRUUzNDVDMzc4QjJCRjAzODBFNUQ1RjUzMDhFOTVBQTdFRAorOjEwOTFFMDAwMUIxMDg4MTc1QURFNzExMENGN0FEMzhCRjRGNzUxMjFGOAorOjEwOTFGMDAwMjkyOUJDMTBGQzgyMEFCNkVCNTk0RDkyOTA0RkExQTVDQgorOjEwOTIwMDAwRUE4MDNEODlGRkU1MjQwMUJFMDlCRUE2RUY0NzVBRTM4NworOjEwOTIxMDAwRjdDMURERTlFN0Y5MEYzQzhGNzBFMzlCQjc0RjA0RjgyNgorOjEwOTIyMDAwMDhCOUFFQ0UyNTE4Q0ZFOEY5OUEyRjA5RjZFODNEQUE3RAorOjEwOTIzMDAwRjE5REU1NjAwNzVFQTdFMjNDNjgxOUNGMUJCOUYxQjM2OQorOjEwOTI0MDAwM0M1OEU0ODhFM0U1RjBGODg0QzA2QjI2M0FEOURBNDg2NAorOjEwOTI1MDAwNjJDNTE0REUzRjZCRjRDNTYwRkM3RDhEM0E5NjdGRDIwQgorOjEwOTI2MDAwMThDNUYyREU0NjAzOUY0RjM3OTZFMEIzQUIzMTg2REY3OQorOjEwOTI3MDAwRjczNDk2RTM1M0U0RjVFMUQ2NUU0MTdCM0E1RTAxN0EzQQorOjEwOTI4MDAwRTgxQUU2ODdEMzBERDk4NDdDODUyQzk1RjhFMEJFMjZCNAorOjEwOTI5MDAwRkRFOEJGNTVDMTdFMUJFNDRBNTYwRUYyQkQwNEVENzNENgorOjEwOTJBMDAwNzk5RURGQzhGQzM5RUQxNTQ2OUY3QzE1RjJCNEM5NDNBMQorOjEwOTJCMDAwMjQ5MDQ3RDYyQ0U2NjcwODQzN0ZCNDdERUUxMjQyREU0OQorOjEwOTJDMDAwQjZDOUY1NzNGNDlGQjc0QkY4RkFFODdDQjI0Q0U3Nzc3MAorOjEwOTJEMDAwNzdGRDg4NEExNzkwRDNCRjFEOTU4QjU4RUVFQjM3M0QyRAorOjEwOTJFMDAwRkM4NkZCMDQ3RkY5REIzNkZBREUzRTlEQUU5QUQyRDFENgorOjEwOTJGMDAwNzY4OUM5QjEzQkY5RjczQkE2Q0ZDOEJBMDFDQUIzNjZCNAorOjEwOTMwMDAwNjQ4MTVDREYzRThCMTgzQTg1RTM1RDg2NkM3OUIyRkE0NgorOjEwOTMxMDAwRUFFRjY4M0M5ODM3NkYzQ0Q3NDEyMEE3RUFGNTlENUJBMAorOjEwOTMyMDAwNkNGQjk4MzExNjU5MTFCN0QxQ0I1RDc1NkFFNTJFQjQzNworOjEwOTMzMDAwMzMxMkY5OEIyNzYzQkUzMUY3NkJFRjlFNjc4RUMxN0VDOAorOjEwOTM0MDAwQjEzQzIxRjBFMjNDOEJFQjE1OTAzMzk3OUQ2NTdBQThGOAorOjEwOTM1MDAwNTdGRjdDQ0NERTBCQkRBNzcxRkM2RjlCQkQ0OTg5MDAxQworOjEwOTM2MDAwOUY4MDNDMDU3OTU5OTYyMDczRTgzQzQzOTdCMkY4RjcwMworOjEwOTM3MDAwQUM3NzUzMDRGMkZCQjQxODdEMEZGNkE4QzZGMjREMEE4MQorOjEwOTM4MDAwQTI0OTA5Q0EzRkYyQzc2NzA2MjBFRjNERTdGRUQ0MkU4NworOjEwOTM5MDAwOEFFRjBGQkJCQzA2QzQxQkJCOUVGQjBCRTY2NzI4NTNDMgorOjEwOTNBMDAwMzQxRkYwNzdDMUJFNjM5OEI3QTRDOEREMUFFQzc4OTc3NAorOjEwOTNCMDAwMDUyNkNGNTdDMTlFODU4OTYwN0M4MDJBNkE4QTY3MjVFOQorOjEwOTNDMDAwOEZBRjhGM0NENTMyMkYwNEU3QkUxMjI3RUNGNUI3MDdERAorOjEwOTNEMDAwMTJCN0IyMUQzMzMxN0Q1MUNBMEY3RUQxRkU4MjE2ODA4NQorOjEwOTNFMDAwQzc1NjBGMkIyRjBCNEM2QUIxQjA0Q0VCNjdCMzcyMzNERgorOjEwOTNGMDAwNkRCRjM1QkIzMzJBNjc0M0QyRDRDNDk2ODM5NzQyNTk5NQorOjEwOTQwMDAwRDQ5RkQ4NjJDRDI2RTQxQUFFMEY0ODI4NTEwOEZDREU1RQorOjEwOTQxMDAwNUJENjY5Mzk2QzJCQUJBQzRDN0NFQzI5RDZCQkVFQzA2RgorOjEwOTQyMDAwNUY1RTFDNERFMTUwQjM0RkVBQzQxMERGQkU5RDEyQUMyRAorOjEwOTQzMDAwQkI2MEVGNEU5NEFGMDU0OTgyRkJGRTgyQTQ5NDg0QTNFNworOjEwOTQ0MDAwOUQ3QjFBMEZFQUNEQzJCOTI2RjA0MjQ1QzNBNDI4QkJDMgorOjEwOTQ1MDAwNUY0ODRCN0E2MkIwQkQ5Q0M0RUYwRjExNzRGMTc0OTBGOQorOjEwOTQ2MDAwRTlDNzQ5NDlEQURFMUU5Nzc2REQyNzMyODlERjU3ODM1RgorOjEwOTQ3MDAwMjAwNTc5Qjk4RDlEMDc3NkQzNzkyOUVGQUY4MTU4NUJBNworOjEwOTQ4MDAwRTAzQzJFNzlDQ0EzNjM3QzlDRkJEOTRGMEFCQjg5RkJDMworOjEwOTQ5MDAwNzM2RUUxMEUzQ0NGMjYyQjcwMDFDOEJGOTUyQUZBODE2RQorOjEwOTRBMDAwRDcxNjI2Mzc1MjFCOEFBQzdEQjYzMDQ2MkQ1NkQyRTJFRgorOjEwOTRCMDAwNjdGNEIyMzZCQjMzNkYyQUM1Njc0QkI2QjNEQ0M0RjM2RgorOjEwOTRDMDAwRTdBM0Q5NTYzNjlDRDdBREQ5N0JGNzM4QzhFRkE5MjE4OQorOjEwOTREMDAwMURENzdGMTNFNkZCMzI4Qjg3OUZEODNGMkJFQjEyNUFBOQorOjEwOTRFMDAwNUVGNzMyOEI2M0FDRUI3QTQ1MDNGQUJFMjdDMEYzOEU4RQorOjEwOTRGMDAwQkEyRUJBMTJENjU3QjM0RDI2NzIyMUUzNEI3MzIyOUQ3MgorOjEwOTUwMDAwQUVEOTcxMDE5Q0FDN0I3RUVCNUJGM0ZENjMwOTc5QTQ2MgorOjEwOTUxMDAwQzhENEU1OEIwOEU5MEU5RTY4RjE1MUZDM0ZBMkU5OTM5RgorOjEwOTUyMDAwODAzRUJBODMzRDJENDA1RjZCNjdDOTlDOUU3QTVFMzA1QQorOjEwOTUzMDAwNTU5RUZGNTgwMEUzNUNERTAyNzE5NkREQ0IyQUFGMDQzNgorOjEwOTU0MDAwNzMyQjRGNjZGQzRCMDkxMkUzREE0QTc2QjMwRkVDRjk0MgorOjEwOTU1MDAwM0ZCNkM4NjgzRjgzOEI3NDAzODU3QkIxNEEwRUFBRjQ3QgorOjEwOTU2MDAwQjk1REEzRjgwNDNFNkI1NTUxMUVEMkY3NkQxRUM0NEI3NgorOjEwOTU3MDAwMDdERTMzNDJEQUQ4M0QyREUzRjc3OTU3ODI5RDVENUNGMworOjEwOTU4MDAwNjdBRTQ2N0I1QjJGNDUzRkMwMzhEMkZCODM3OTEyRTczRAorOjEwOTU5MDAwMTEyNjdGMjdFQUE0NDJBNUY1NjYwNTBCMTE3RkM1NTU2NAorOjEwOTVBMDAwRDdBRTg1NzY0QTc4NDkwMEY4M0Q0RjQ5NUFEOEZGNzdCQgorOjEwOTVCMDAwOTkxQ0RFMkUyNzNCN0QyMDk3MjM0NTg4REZFRDExNDY0MQorOjEwOTVDMDAwMTdENjNEQTU0ODE3QkJFNTM5MTc4MDVERDQyMkFEREMyMQorOjEwOTVEMDAwRjIwQkMwNkI3NjExOUU3Qjg1RjdFQjYxRkQxQzlGNERGNgorOjEwOTVFMDAwN0FDQzA3RjhEQkNERjFBOUVDOTQyREM4RDcxNEVGQjdFRQorOjEwOTVGMDAwNEEzN0FDMDZCODlFRDg1MjNGREY0N0UxOUFFNzM1REJFMQorOjEwOTYwMDAwNDY1MDNDMUNERjUyREYxMjlEODU3ODI4RjJEMUVGQzcwRgorOjEwOTYxMDAwMDNGNTJEM0U4QTk3REQxQkNEMDJERDU2OUVGODA5OTU5OAorOjEwOTYyMDAwRUE0OEI0RjUyREU2NkNGMDlGRENCNzA2OTQxMEZERkUxOQorOjEwOTYzMDAwMDJGODNGMUVDOTExN0NDRkJFMTcxN0Y1Q0ExMTEzRUNGMworOjEwOTY0MDAwRDIyNkFCNEZBRUY4QTg1RTI4QjZENTlGNDdFNUMyMEYyRAorOjEwOTY1MDAwMUU1MjEwQUZGRjRFQzcwMzM5NDFENzYxMDFEREY3NENGMQorOjEwOTY2MDAwNTJEMTJFMDhEMEI5MDQ2ODM5MzBCOTA4RjM2REU5QkE3RgorOjEwOTY3MDAwNDkwMEVDODZDOTJBRUE3OTExQzdEMTI2Qzk2ODM3NDM1RgorOjEwOTY4MDAwN0RBMDg3NDA3RTExRTZDRjUxNzkxRDg3NzMzRTRBOTRCNQorOjEwOTY5MDAwQzU3NTE0NjU4NzQ5Nzk5ODA0NzlGRUJFQTQyRkMyRkI2RAorOjEwOTZBMDAwNDhGQzI1QjZCQzAyOTBCRkFFM0MwNEM1NTUxRUVGRUQ4QworOjEwOTZCMDAwQ0U5N0E5N0VDRDNEQkE0ODFBNDdGMUYyNUU4MEVGOEI3NgorOjEwOTZDMDAwNzJFOTNFOTZCRTdGM0ZDMEZDNDBCN0M3QUQyRjQzQkU5OAorOjEwOTZEMDAwMEMzMUJBRjM1OTNDMkEzRTE1OUVBM0FFMkIxRTM1OTA5MQorOjEwOTZFMDAwRkZBNUZGN0UzNTg2RjZDQkJENjNENEI0Rjk2MEZGMUFDMworOjEwOTZGMDAwNjRGRTQxRUZEODYyQkM1N0EzODE1MEZFMDdCRTA4RjE1QgorOjEwOTcwMDAwRkJGMkI4RkNGMDcwN0JDMTdENEU0MEM4MTM0RjM2NUI1NgorOjEwOTcxMDAwNjM3REZCREM1MTM5QTFCRTczNzA0QUM4RjQ4MTNDRDgyQgorOjEwOTcyMDAwQUY0RkNEMDI3Qjc0M0M5NzUzQ0RBOTU5NUYwNUJCNDUyNAorOjEwOTczMDAwRTVGMjYwODc5RjlEQ0JFREM5MjY5REJCMDhEOEJGMzE2MAorOjEwOTc0MDAwNjJDRjRCMTBGMjYwNUJBMzBGOUYwRjVGMzYwMUUzOTc3MAorOjEwOTc1MDAwMEY1Rjk2MzcwN0UyMTUwNzJFN0UxRkY3QkY2Nzc2MzAzQgorOjEwOTc2MDAwRkUzRDczRTgwNUI4NEI4OTlDQjFBOEI2MzExODU5QTFFNAorOjEwOTc3MDAwNUYzRTc1MkZERTE3RjI3RDM1N0UxN0U2Q0I0M0JFMEVCQQorOjEwOTc4MDAwOUREMjVERDlDRTNDQ0M0NzM5NUNDRTA1NzhERTgwODc1MgorOjEwOTc5MDAwN0QxN0Y3NzhBODY3QkY4NDdFRTA2RDdDM0RCRUM0M0MzMgorOjEwOTdBMDAwREM1NzgyMUIwRkNFMURGQjQ5MDdERUM3MjRFMEUwQkU1RAorOjEwOTdCMDAwQkY0MzNEM0I4NUY5RUIwMzZDNUYyQUYyOTdEQzc5NEFBNgorOjEwOTdDMDAwNjIzRUZCODIxOUVFMzM3NkUxNDNGODM1MDQxRTQ0RkIxQQorOjEwOTdEMDAwN0FDOTFDQTUwRjQwMzdCNTY3MTU5MkI0RTU4NUY0OUQ4RAorOjEwOTdFMDAwREJEMEYwRkQ2OTM4RUY5MjA1RjdBRjI0M0EyRTI5MDQ1QgorOjEwOTdGMDAwM0U0OEEyOURFODBGMzUzQkVFNzEyNTUxQjVDNzdFQkVCMAorOjEwOTgwMDAwMjRFODNBRUZFMkU2MTdCODNGMThGNEI0NjYwQzdDQUVGMQorOjEwOTgxMDAwRTU3REJBQ0QxNTc5Qjk5OEE3QUU5MjA3QzBBRTNEMTVEMgorOjEwOTgyMDAwN0M2QjA2RjhFMzZBQTk5ODAwNTczOTUxMkQzQzRGN0FCMgorOjEwOTgzMDAwOUFFRjRCRDQ3REI3RTI3OTFFMzEzRkUxOEYxM0U1OUE2MQorOjEwOTg0MDAwQkQ4QkQwNEY1N0JCM0I4NEU3Nzk2QTkyNEMwRUFFRjM4OQorOjEwOTg1MDAwNTkwN0JEQjIzREVGRDY0QzQxQkVBRDY3MkZFQjZGM0MxMworOjEwOTg2MDAwRTA4MEQyQzc4NzdBNzUzRUFDM0ZEODcwRkU0QzM4NjcyRgorOjEwOTg3MDAwOTIyN0Q3OUQzNzBFRTBBMzMyM0NDMDdFRjlDOTEwOUVENworOjEwOTg4MDAwRDM1NUJEQjZGQjUzREZFMkZCRTM2NURDMUUwOTEyNEI4QgorOjEwOTg5MDAwMDY3ODJBODE1ODM3NjE2NzE2NEQ5NURBNDc0QUFGREM1QQorOjEwOThBMDAwOUJEQzAyRkNCMERENjU2RjZEMEZCMDcyNkI3MDcyNEJBQworOjEwOThCMDAwNzMyOUVBNjc5NDhCQ0IwMjNGNDM3QkE4QzUyRkNBQ0Y5RAorOjEwOThDMDAwQTI5Q0RDQUVCMUZCM0FBQ0E3QkQwNkU4M0REQTFFQ0ZFOAorOjEwOThEMDAwQTc1QkNCNEE1MDdGMjg0NUE0MDBFMDM2MEYxQzJEMjAwMworOjEwOThFMDAwRkY5RUY2RUUwMjNGQzM4RkZDODk2QjAyMzZCODlEMEFERAorOjEwOThGMDAwMUYxOTA3RkJDQTM0RkQ1OThFRkVDNjBEQUYzRjNBN0VENQorOjEwOTkwMDAwMTdFMDQxN0M5RjE3QjkxRkZCQTdFREQwREY0MUM2MUNCNAorOjEwOTkxMDAwN0E4QkRBQkEyNEVGNjkyRjlFMzNEQ0UxNzFEQURCRTI2RAorOjEwOTkyMDAwRjkyMEU3Q0IzNkQ3QkQxREJFNDRCMzA5OUI3M0MxOUY1OQorOjEwOTkzMDAwRUU3Qjk2MDVCRkFBNjcyNzM5RjJBNEM2MDc1OTNDNUJBMAorOjEwOTk0MDAwNTU0RDcwNTVEMkVGQTVFQzdCODBEMTQxMUJDRkM3QzlENworOjEwOTk1MDAwM0M0RTRFODY3MTlDNzFCQkZFRTNDQ0UwNzI4MkYwN0Q4MgorOjEwOTk2MDAwQUNBQUY3REVDQjM5NDBGRUFCM0JCRUU4OTY2RkJENEZFRAorOjEwOTk3MDAwMkVERkYyMzkzREM3QTVDNEIzNDE1QTVFOTNFQzVDMTBBQgorOjEwOTk4MDAwNjBGQzM5MDVGODczMzVBN0QzOTIzRDc3M0YwNzZBRkQzMAorOjEwOTk5MDAwMzE5RkY5NjdEODM3QUNGMjk5MTcwNEE3MEY5RjdGQkFBOAorOjEwOTlBMDAwODM2MjNERkRFNDE3QjNDQkFBOTk5RDVCREYzRUVENEE5MAorOjEwOTlCMDAwMjhEN0RGNTFBNDVCNjlFMjQ1RTI1OTdEMzZFODkwNUYyNAorOjEwOTlDMDAwRjc3MDdGNTFCNTZBQTExQ0FCM0UxQkMxRUY5RkRGNzhEQQorOjEwOTlEMDAwN0VDNzc5QjZGRUUzODVGMEJCMThFRjE2OTc3QzNFNzAyNAorOjEwOTlFMDAwRjE0QkRCQ0IyOTFERDczRkUxOTFCREI2NzFFQTlGRTA3QQorOjEwOTlGMDAwRTc4MEZDNTQ1RTNCRjlERDA0N0U1NzBCNDk2RjlFMjJFNQorOjEwOUEwMDAwQzg4N0JCMzQ1MTU2NUFDMTJFN0FDNDJFMUZDQUMxNkVBNAorOjEwOUExMDAwRUI2QjBGRjcxNkRFMTVFMEY1QUQ2MEZBRkE0MTU3RkQ3NgorOjEwOUEyMDAwMjJEMTdGMkVENjc3Q0Y0N0M4MUYyODgzOURBNjdFRTJGRQorOjEwOUEzMDAwMTVGMzQzRjk3NUI3RUNFQTJGNDc4QzNGMDZGQjEzRjY5NQorOjEwOUE0MDAwRkFCNzAzRTM1Rjg0M0IyNUVFQ0E0RTU2OEM2NkZFMUREMworOjEwOUE1MDAwMDNFQzgwRUZBQkIxODBGRDNFQUM2RjczN0FBRDNFN0IyMworOjEwOUE2MDAwQkUwM0RGN0Q3MDlGRTA3OEZGRkJDNkE4MjM1RkZGRTZBMworOjEwOUE3MDAwNDQzRDlFRDNGODc2ODBEMTY1MzVCNUU4QjFERDhFRDExMQorOjEwOUE4MDAwOEUzQ0ZEN0ZDQ0UzRDNDRUUzOTIwQ0YzQjhFQzZGM0M3RAorOjEwOUE5MDAwOEY0MjA3N0ZGNkNEQTNEOEYxRkVEM0NFNjMxRkY3MEIxRAorOjEwOUFBMDAwM0ZDNzlGRjM3NTc2MkZDMDdDNDM0MkJGRjU3QzVBRDdFMgorOjEwOUFCMDAwNEY2OUZEQ0JGNEU5QTNDRkY5MkFCMTQyNzhDRjZEOTI3QgorOjEwOUFDMDAwREQ2MzQ2Q0JFMDBGRjhFQTI3QjdCRDdCMzlERTBCNkRDRgorOjEwOUFEMDAwNjIzRThFNTdFNEUzRjA3MzFFOUJDNzBDN0M1RjkxRkJFNAorOjEwOUFFMDAwRUYzQkI4QkYwNzMzRENEM0RBMTg2MkZCRUVCQjJGQkMwOQorOjEwOUFGMDAwOEE2MEZFN0EyODgxNzE4MkZERjkwQkEyNjBBNzdGRTc1OAorOjEwOUIwMDAwQzIxQTdDMzZFN0NGODg4MjNDNkEwQTdGREQ5MTZGNEVBRAorOjEwOUIxMDAwRjcwODY5Q0ZDMUZFOTFGNzRCQ0U3RTU5QjY5RjQ3RDk2MgorOjEwOUIyMDAwMENFNzUxRDJENDE3NzFCMUNEQkUzQUNDMDNGRkEyRDYwNworOjEwOUIzMDAwRkJFMDE3QjRERTRCQzM4Q0RFMzZGQjEyMTgxNzZDOERCRQorOjEwOUI0MDAwN0UzMUYzN0YyNkM0QzZCOUZCQzJDQjA4OUJFRjY1MjlFMworOjEwOUI1MDAwMTZGN0QxMENGQjc5NjBGMURDMUY5RTExODU3NTM2NjUxNworOjEwOUI2MDAwMkY4ODAyM0QzNzY3Q0Y3MEFDNDdDOUIwOUU1NTYxMDY1QworOjEwOUI3MDAwQTdDREZBMTdCQjlFQzM5Rjc5M0QwQkQyRTZDMUFBQjkwOAorOjEwOUI4MDAwRTlFRjE3NkIxNzc4OEEyNjkwQ0VCRUE4NzU5REZBMUI1MQorOjEwOUI5MDAwQUY2QjE0Qzc1Nzc1ODhGOTBEMzYxQjhDOEY4MjRBRkM0MgorOjEwOUJBMDAwNTc4NUQyRTA3QzM4RDhERjFEMjFDNTg2M0M5NDNDQkM2QgorOjEwOUJCMDAwREY3Mjc4NjVFMkRGNjU5RUU0NDg5OEQ3OTE0NkI2N0YwQworOjEwOUJDMDAwN0U5RERGMjdGNURCRUFBNjMwRkFCNTVERTM2QzFFQjNCOAorOjEwOUJEMDAwMkIzQzkwOUZFMzdGNTYzQkNGQTcwRjI2Mzc1QTQyMkM1MgorOjEwOUJFMDAwNUVGM0I1ODRCM0RERDJBQTYwREFGQjREMjhGQ0VFMkEyMQorOjEwOUJGMDAwMkNFQzgzNjczRkZDN0ZDRTcwQ0I0NDhGQzM4NTVCNkJCRgorOjEwOUMwMDAwNzQ3ODcwMUI4QzBGQUFFMTkyOUJFOTgzQzM0REQwNUJFMworOjEwOUMxMDAwQTY3RUZFN0ZBMUIzMDc4NzBFMkZBNEFGQkYxNUJDRkVBMworOjEwOUMyMDAwNUVFOUVCMTk4MEQ3MTBGOEYyMUZGMDNBQzdGNUU2RDBERAorOjEwOUMzMDAwRTAyNUU0RDgxRThERERCQkU4RUVFNzQ0OThEREFGMzRDNworOjEwOUM0MDAwNTFBQTNCN0MwNUM0MTdCRUEyQTBCRkY3RjA4RTc5RUJFQQorOjEwOUM1MDAwODg2Q0FGQzdGNEQ5RTFDQUI5RUIzMERGMzUxRUM0N0JERAorOjEwOUM2MDAwM0M1RjkzNjNGRjVFMDY3MTg3QzVBQzVEQkY3OTcyRjg5OAorOjEwOUM3MDAwQkMxNENFRTY3RTRCNjMyNEY4MTE1RThCNUYzREUwRkFBOAorOjEwOUM4MDAwNDhBNTZENUQ5ODk3NjlCQjhGNEFFOTBGREZDM0M0QjhEQgorOjEwOUM5MDAwQTMwQ0ZDNEQwQkQzQ0Y0M0UwMzNEM0I4QzNDNUU3NkI2NAorOjEwOUNBMDAwRjFFRjBGMEI5RjgzQURGN0Q5NzBEMTkwRTQ4NUQ4MzdEMgorOjEwOUNCMDAwRTQ5MkRFQkY5NzcxMDFDMDczOEZDQ0YyMzk4RUMyQUJENAorOjEwOUNDMDAwN0NCODlGOEM2MEE1QTU1NUEzNzYwMjlFQ0EyMjNDRUY2NgorOjEwOUNEMDAwNDkzM0Q2ODE5RkNDN0JGNUMyQUQ2MThBQjdEN0FFQzk3NworOjEwOUNFMDAwOTZCQzM2Nzg3OTIzMENDRjMzOTZBN0I3MEI3MzIzM0NGOQorOjEwOUNGMDAwMkZCN0I3QkQ0NEUwM0U0NDc3M0Q4NUQ3QkI2NjM5QkIzRgorOjEwOUQwMDAwOTc4QUE4RTZEOEM1QjY3Mzc1NTM1Q0RGRERFREM3NDYwNAorOjEwOUQxMDAwMjJGOEZEMzUxRTZGNzc3RkNGRTJFRDk3MkUxOUI4M0QwMworOjEwOUQyMDAwQTk2M0Y3Qjk1MEJBMUI5QkVFN0U0MUMxMUY5REUxNDQ2OAorOjEwOUQzMDAwMzQ0MjlGQUY0Qjg5MDdCRjAxNzQzNDI5QzRFMjFFMkEwNQorOjEwOUQ0MDAwMjk4NDc4QkRFODI3NTcyNTI5OERDMkZENUQ4RjMxMTZGRQorOjEwOUQ1MDAwRkNCNDY5RkEyOTFDQTg5RjRDNzAxNUVCMTFFMzAwMkI4OQorOjEwOUQ2MDAwQzJCRDJDNzRGRjg4RkJDNTMyOTM5MEQ5QjA0RkY0QzZBNgorOjEwOUQ3MDAwNkU2NTg3MEQxOTFERTRGMEZDOTk5OTc1QzFFNDQ2QjAzNAorOjEwOUQ4MDAwRjM1NEJBNEVEQjdDQkJGRTZCRUVGRjgwRUY1RDg3NjU2NAorOjEwOUQ5MDAwN0Q1MzYxN0YzODBDMjYxRjE2NzBCQUM5NTUxMjlCRkM4MworOjEwOURBMDAwRTAxRjVCMjFBNUJEREZFQ0YyMDhGQjNCMjUxRjg0N0I5OAorOjEwOURCMDAwRTNFQTM4Q0U4NEZCMTIxRUI4RTdFMDVBOUVERjQ0NDgzRgorOjEwOURDMDAwNjJBQ0ZERUY4QzdEQzBFNThBQkI1REFFQzJFMkQxRTQ0MgorOjEwOUREMDAwMERDNkNGN0I3NkFEMTk5QjhFN0Y1RUU1N0NGQTQxQjhEMAorOjEwOURFMDAwQzQ5MTlGQjQyNDdFQUIwN0Y4NzNDOUMyNDUxRTIzMDRGNworOjEwOURGMDAwREY5OUJDQkM4NkNGNjM4Rjk2MTg3QjUxQTgwRjRFMTk5NAorOjEwOUUwMDAwRTUxMDg3NEZENzkxNDQxM0RDRUZCMEEyNDFDMjM4NTIxRQorOjEwOUUxMDAwRTkwNjQ2NzcyQjM2RUM5N0Q3RDFFNzRFQ0U3RjhCMDBGRAorOjEwOUUyMDAwMDdCNkZFNkVFNTc4RERCMzJCMzAwRUU2QkZBN0Q3NEY0MQorOjEwOUUzMDAwNDczQkE2RjNCOEZFN0U4MjdFQUZENTkxQUIzNjgzREY3QgorOjEwOUU0MDAwQUI1QjIyRkNFRjMyRkNBNDEyRjIwREJBNzk5RTQ4MEJGOAorOjEwOUU1MDAwRkRCRTExRTYzQjZGMjRGMkY3ODQwRDFGRDQ4MzdDRUUyOAorOjEwOUU2MDAwRDIwODlFOTdGQjhGNzYyRkZFN0QwQjQxMkZCRDcyNjIyRAorOjEwOUU3MDAwQzM0NzhEOTA3NDc3QUY5NjlBMEM3NDMzQjJBOUVFMUJEQQorOjEwOUU4MDAwRTlGQ0U0MTZFN0ZCMEY0M0YxQUM3NDc2QUU3ODBBNzk4RgorOjEwOUU5MDAwMkVFQTJENTYwRDRGQkFGQTU3NTczQUU1OTg5OEY3MDgxQgorOjEwOUVBMDAwNkZFQTU0QkFGQjFBN0FFOTMwMzlCMERFRkIzNTk3RTMzMgorOjEwOUVCMDAwMDJFRkJERjgzRTkyN0U1RkI0MjNDMkUyNzc3QjkyNzNERAorOjEwOUVDMDAwRDZBMkRFQjJCQzA2Qzg0MzMxMUYwMUFGNUM4QkMxRTkyQworOjEwOUVEMDAwREEyNThBNDNERUFFNTgxODc0OUQ0NzYyNzBGREFBRDcxMgorOjEwOUVFMDAwNzgwOEQ2NzFFRkFFOTcyNkUzREY1MTc0RTk4NzgwOTI0OAorOjEwOUVGMDAwRDBFMEZCQ0QyNEU1MDEzOTcxNUMzMUYwRjk3QUEzRjNCMAorOjEwOUYwMDAwNUVFNkQ3NDlFMjhFRTlBMDNGMUI5NEI0N0NGNTBDQTcyRQorOjEwOUYxMDAwOUZEN0FCNTY1RDgzRjM2RjU2NzQ5OEZGQjFFNTIzQUVDMAorOjEwOUYyMDAwMkEwN0Y5NTJFNUMxN0I4MjhGMzVERjE2QkVDOUI2N0U5RQorOjEwOUYzMDAwQTFFRkRDRjNGQTZERjVBQTAxRjVENkQyMkEyN0RFRjZGOQorOjEwOUY0MDAwNjhDQzJFQjBBRTY0N0NCODlBQ0E5QkQ5NDg1RkRENzdFNgorOjEwOUY1MDAwQ0NBNEUzMUY0RUU2NUNCNDg1NTUyN0YwRjcxQ0FGRTZCMgorOjEwOUY2MDAwQkYxRjk3MTM3N0NFQTRGMkU2ODRDQ0ZDNjFENjNGMzFCNQorOjEwOUY3MDAwQjlCMUU0QkU3ODBCQzQ3OTRGMzQ0Q0ZCNjkzN0FERjcwNworOjEwOUY4MDAwMzI1RkRGNUIwRDAzRUI0NzM3M0Q0REI4Q0Y3OTNGRTVERgorOjEwOUY5MDAwOEMyMzQ0ODNGNjg5RkFGNEZBRTBGQUVDMjA5M0FGNkE1MgorOjEwOUZBMDAwNkMxQ0M4OTdFQjM2QTRBRkI3MDk5MjJCNjlCRDEzN0YyMQorOjEwOUZCMDAwNTVBQUQzRTU2RDdFQTIzMzNFNTkxMTRGREZGRTEzM0QwNgorOjEwOUZDMDAwQ0NCRTgzNUU0QTAzRTdCRDU5NDEyRUU3RjQ3MTIwQTc1QQorOjEwOUZEMDAwNTc2NDk4NkY1NzU2MDRFQkJERDM3MkZCNzUxMEVGM0I3NworOjEwOUZFMDAwMkUzQkU1RjMwRkIyNzhGQzNDOEJDOUU3MTNCQjk2NzlBNworOjEwOUZGMDAwNDYwMjlFNUEyNTFERThFMUVERUNEODI0QTBCNzk1Q0Q4OAorOjEwQTAwMDAwQzdEMDhGRjAyRDVFRkZCQTUwRkM0M0QwNEY0QjhFMkM0MworOjEwQTAxMDAwOUUzRjkyRTJBNTZCMzk4OTQ5NDY2NkY5RkYzMUU3OUY3OQorOjEwQTAyMDAwNUM4NURENjM0MEY1REZCQkEwRkY2OEQzNzdEMUZFNTBEMAorOjEwQTAzMDAwQ0Q3MTVGOUJDQ0FFNkM4NEJDQzIxM0IyQjUwNkYzNTAzRAorOjEwQTA0MDAwNzYwNTU4REUxMTg5NERCN0RGMkYxM0UwRjMzOEIxN0I2OQorOjEwQTA1MDAwNzhGOEJFMjYxRTFDRDA4RTNGNEMzQTZBNzBEQ0RENDE3QgorOjEwQTA2MDAwMURFMjhGODcyQjk1RDRFNTc0OTJFRkVEMEVFMjNEQUZBNAorOjEwQTA3MDAwNkVCRUM4MzRGRTcwRURDMDEzQkI4NzY3MDcwRUI2RUUyOAorOjEwQTA4MDAwNTg1NkUxOTBFQ0MwMzM5NUY3REU1OTA2N0NBNDc1NEMyOAorOjEwQTA5MDAwNDkyNzdGODU5QzdFOERGQkFERENGNDIzOUVCMzM5M0U0MgorOjEwQTBBMDAwOEUyNzA3OUVEN0NERjczQkU3NzM1RDlENzMzRTgyNUY5QQorOjEwQTBCMDAwOEUyNzlCMDI5MDFGNEU0NzlGNkNCNzRCQzlCQ0U5ODMwQworOjEwQTBDMDAwRTg1OUU2RkZDRDM0Q0YzODlGQTc5MDEzNDA3OTEwNEY2MQorOjEwQTBEMDAwNUJDREU1Q0Q1QjBERjc0NkVDNzg3MEFGRkY4NENDRjczOAorOjEwQTBFMDAwMDcwRkIxQkNBREYxRjE5NTczNDYxQTdERjQ3OTVEMTY5OQorOjEwQTBGMDAwOTM0MzlGMzc1RDBBM0RFM0VFRTdFRjlEMEU4NTlFMUI4MAorOjEwQTEwMDAwOEMwRTg1NUM3MEI3RkYwMEUyRkMyM0UxRUZFM0U4MUFGOAorOjEwQTExMDAwQzQ2NTNFODgxOEFDNENGNDA1NzA0NDg2OTRGMzczQ0I0OAorOjEwQTEyMDAwQzQxODA3RTc2RTRFRUMwQUUwRkRGNkQ2MTY2RjEyRkU3NQorOjEwQTEzMDAwNkVDN0YxNUQ5NzRDQjJBRjY3MDdDN0ZGOEEyNUQ5NzgyNAorOjEwQTE0MDAwNURDQTcxMzk3NkM1MjhDQzJGNTBGMEJFQUVENzhGRTRFQQorOjEwQTE1MDAwMkM4MEYyQkQ4NzY0OTBEMEU0QkFGQTk1MEFBQ0VGODEwNgorOjEwQTE2MDAwMkM5Njc3QkU2MkMzMkI2ODBGMEU5N0NFNTdENDM5RjU2NQorOjEwQTE3MDAwRkYyNzdDMURCRDc2OTZEQTUzMDZGNDkzMDkwRUVENTk0MAorOjEwQTE4MDAwM0VCNkNGODkyRjlBMEZGMjc5RDUwNjA5RTVFRDk2MkNDOAorOjEwQTE5MDAwMDNERkFGNTI0RDk0REJBNDk5RTk0N0UyQTNGMEEwMkE3NAorOjEwQTFBMDAwRTQxODJDMDJFMEYxQkZGOURGMjk1M0UzOUFGRDdDRDJEOQorOjEwQTFCMDAwNEREQjZFOUYwRkY2QTE5QjVGNDZFQjhDOEVFMTVFMzAxMAorOjEwQTFDMDAwNzg1RTE3NEEzQzk5MzVCMjRGM0VCRjJERDVFRDFGNDVGRAorOjEwQTFEMDAwQUI1QzlFQzVFRDZEQ0VBNzYyM0Q5NzY3QjFGNTUxM0I3NworOjEwQTFFMDAwRUQ4N0Y4Rjc5OUY4RkE0OENDNDU2RjcyNDdDRDRGMDBFNAorOjEwQTFGMDAwRkU3MzdDNjgxNzA0QkM1NEVFNDNERURDRjcwMzNBQ0JGNQorOjEwQTIwMDAwOUI2MzdDMjVFQzFENzdGQjZCRDU4NEMzNkUzQzk0NTUxQQorOjEwQTIxMDAwRThDOEM3NzFEQjIxRkZEMDE3RTlFQkZGRjk2RkFDMkY1RQorOjEwQTIyMDAwNjRGREQzRTk4QkZGMDc3OEJBQzA4RTAwODAwMDAwMDA4MAorOjEwQTIzMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJERDNEMEI3ODU0RDU5QgorOjEwQTI0MDAwOTlFN0NFOURCOTk5NDk2NjkyNDkzMjkzMzczODkzMDA4MAorOjEwQTI1MDAwMDYyNTc4MDMyMTQ0OUUzNzA5OTFBMEE4MDMwNDBDMUEwRgorOjEwQTI2MDAwNzA0NEQ0MjgyMTQ0QzU0QUJGRDJDRDBEODkzMTIwREFBQgorOjEwQTI3MDAwNTA1REI0RDY3NTg3ODg1REI2RDIzNTU4NkFEMUQyNzYyRQorOjEwQTI4MDAwQjA4MjhGRUEzNjVBNDVEQThEMUExRkE1ODAwRkEyQUQyQgorOjEwQTI5MDAwQUJEQjhGQUQ3QkZFRkY5QzkzQjlGNzY2MjYwNDZERkJBRAorOjEwQTJBMDAwRjEyRDdDN0VENzMzRTdGREJGRkZGRkZDRTdCMEEyMjU5MQorOjEwQTJCMDAwODU0NDlEMDRGRjdDNDlGRjNCOUMxQTIwQzQ0RkM4RjE5NAorOjEwQTJDMDAwQkZDQThEQkQ2RTQyOEU0NURBOTNBRjgxQUY0RDVEOTBCMgorOjEwQTJEMDAwRUQyMzQ0RUY5NEM5QTNCNEREM0I0NzNFQUQ4MUYyQkQwRAorOjEwQTJFMDAwN0QzNkFGNDRDQjJCRDY1RjIzODc2OUJCNEMyOEY5QTFDMQorOjEwQTJGMDAwREY5MjM0Mjg3RjA5N0ZFNjBFRkZERUYwODA0Q0EyQzU5NgorOjEwQTMwMDAwQjE3OUFGODY3NTE4Q0FDNzdBOTIzNTAyRjNDREYxNDQ5OAorOjEwQTMxMDAwQzYwNzA5RDlBQjEwOUQ5NDExRjJGNkU2RUNDODI2NUE4RgorOjEwQTMyMDAwQUU3MTEyREQzRDg1OTBCOTY5NkNCREJFOEQ5RkI3N0E2NworOjEwQTMzMDAwMjdEM0Y1RjRGQ0JBODQxNEQyRjVERDdERkI4QUYwQTRCMgorOjEwQTM0MDAwMzhGMzdCNkQ4NDRDQTMxMzA0MDIzNjkyNDVDODZEN0NCMAorOjEwQTM1MDAwRUZBQjUyODkwNkUzMTMzQURGQTM4NkYxNDVCRkMzQURFNQorOjEwQTM2MDAwODQ0NENGQTVGNUUzNjhCRkYyNTgzRkVCRjhDQkFFQkMxMQorOjEwQTM3MDAwNzAyQ0VDRkJGMDk1MzNDNzVFMzMyOUQ2MkYxMTFDOTY1OQorOjEwQTM4MDAwNDlFMTdGNUUwQUYzQjZDOTJBQzA3NUQ3M0Q0OThEM0RDNAorOjEwQTM5MDAwNzFFMEE2NzNCODVBRTc4NzNGNzZCQThGMjVGQ0ZGOTcxRQorOjEwQTNBMDAwNkVBQ0JDQzM0MzQxQjIyOTY1Q0VFQzcwOUNGOTBGOTNFRgorOjEwQTNCMDAwRjBEREQzRTg3Q0ZBNDYzNjlGNzU5RUM1N0M5RUMzRjVEQQorOjEwQTNDMDAwRDcyRTA1Rjg3RkE2Q0I1RTk5QzI2M0EwNDE0RUFEODAyMworOjEwQTNEMDAwN0VGNTBFNzUzQzFEN0Y0MEJGRDU3MzlENjE5REJGNEZCRgorOjEwQTNFMDAwMDA5RkRGMzc1RUVCODk4QjA3RkVCREEyREU0QzA3NkY1NworOjEwQTNGMDAwOTNDMTk3QTdDMzNDM0JFM0FGRUYxNjU4MUZDNURGMzFBRQorOjEwQTQwMDAwMjU3Q0NGODU3NDdEQzcyRjk2NTU5REFFRTdCODhERjYxOAorOjEwQTQxMDAwMDM3QTc5OTBGNjBCMENFRjc3M0RFRkY3RjZDNjkxRTlFQQorOjEwQTQyMDAwNzI0OUFENzkzRDRCOEYyNDlCRTlEMjQ2MUE3QkUzRUMxMAorOjEwQTQzMDAwNjc2ODVENjc0OEY3MkIyQ0ZDQjc0QjE5MUNFM0E1RkQzQgorOjEwQTQ0MDAwREZERTcxRUFDRERCNjEzRjNCOTIxMURFRDY3MTMyRDNBNAorOjEwQTQ1MDAwNjVDNkE3QzAyNzAwQUYyRDQ5OUM0RkJBOUI5RkE2RkQ5QworOjEwQTQ2MDAwREVCRTM0NEZERDQ0ODZGMzA3MjFERDk3Q0RBMEY1RkQzOAorOjEwQTQ3MDAwM0RCNkQyMkRCNDZBNTc0RjRBNjMyNENFN0EyN0E3MzMwQworOjEwQTQ4MDAwM0FGMEM5N0FGMjc5QjQzRDc5ODNFMTAzQzgwREY4NjZGMAorOjEwQTQ5MDAwMjlBNzM3NkZDRjBGNUI4ODJERDZFRjBEQTA4MzI0NDJGRAorOjEwQTRBMDAwN0VEQkVBQzRFRjM2QUYxM0M3QTk1QkI4NDgwOUQwNzlBMQorOjEwQTRCMDAwQUVCMzEzMERFMDg3N0ZFOEI4REVGMzBBNzY2Q0ExNTNFNAorOjEwQTRDMDAwQkQ2RTYzNjU3RDE1RTUzRjY5Rjg3QTFFRTY3NEI5MkJBQworOjEwQTREMDAwQjI3ODQ0RjhENjM3QzgyNjc4RDYyRDM0QzNENzRBOUZFOQorOjEwQTRFMDAwNDcyM0I2REE3OEZCMTdGNDlDNjhCRTJCMUQxMTNGRTBCQQorOjEwQTRGMDAwRTkwOERGRUY2MUJFREZERjM3QjY3QkEwQkQ3NTlFNUQ4QgorOjEwQTUwMDAwOTE5RTExRjlFMEFBNDYzMzVEOUM2RTlGNkY3QTgzMDg5NQorOjEwQTUxMDAwOEZFNTYxNzNCRjJCRUFDREZCNUQ0QTVBNjYxMzRBMkE2OQorOjEwQTUyMDAwQ0I4OEVBODA2RjFENjkyOTc5OUE4MkYyRTgwMzRCNzAyMworOjEwQTUzMDAwM0RBRjEzNTIwQjcyOUU5Q0JBQjU2NDUxNDk2Q0ZDMTcyNworOjEwQTU0MDAwMzkzRDdGNTY3N0VCQTUyMDJFREY1MDVBNEFCQzcxRDY5NQorOjEwQTU1MDAwRjMzQTg3OTNDMEY3RUIwOUUwMTlFNTcyRjcwREMwMzNDMgorOjEwQTU2MDAwRDBFQjMyMzkyRTlFRkY4QkNGRkI0NkMzQzg3Q0I0QUNGOAorOjEwQTU3MDAwNkU2NDNDOUZGMDdBMTEzRTZGMzRCNDI3QzMzRThGODlERQorOjEwQTU4MDAwNzkxRjY0RjM4MjVFMzNFMkUzQzQ1N0Q0NUI1NkZFMUQ0OQorOjEwQTU5MDAwMjBGQTRENDhDNzkxNjQyRkU4MTExRjkwODc0MThGNzRBRQorOjEwQTVBMDAwQTREQjk4MUMyRjFFNTk4Rjg4RUY2Rjg1NUNCNUI0QUY2NAorOjEwQTVCMDAwQjM2QjBFMjMzRUNBQkQwMTg0OUIyOEQ3MkQzNEFGRjM2NQorOjEwQTVDMDAwQkQ1NDA2MEZDQTcxNjM0MzFFODNEQ0UwRkE1NUU4QkIzNQorOjEwQTVEMDAwN0I3RjcwRkU1QkEwM0ZDN0E3MzMzQ0Q0ODUzRTcxMDBGNAorOjEwQTVFMDAwM0NBODdDQkRDMzAzRkI3QUQ1RTYwNUY5NUE3RTQ0NzNDQgorOjEwQTVGMDAwMThFMTM3Mjc4REI1M0ZCRTczNjRGOENENDk2M0VCM0M1NgorOjEwQTYwMDAwOUQ5Q0I1RUVGN0VENkZERjM5MDVDNjdERkJEQjlGM0IwQgorOjEwQTYxMDAwOENFMzJGRkIyMjlGNDQzMzYzRTVBQkVCMjUyRDEyODdBMAorOjEwQTYyMDAwQ0YzNjc4OTU1MUMxN0Q4MzA1OEU1NzdGMzExNkM3Rjc5OAorOjEwQTYzMDAwQzlBNEE1MzdDRUJFRUNFOTRFNkNCRjM0NTRFOUYwNTM0MworOjEwQTY0MDAwNzg1RUJCNTE1MjI1M0E4NDIzOURDOURENkI4NUJDQjMyRQorOjEwQTY1MDAwMDdDNjJFQTI3MEY3QjdCN0RDMTY4QTMzQ0U2QzBFRUZBMgorOjEwQTY2MDAwM0ZCQjQzNjlGMUY4NEM3Qzg1M0UxN0VEOTZEOUMzOEUwQworOjEwQTY3MDAwNzhFREFEN0E3NTgwRjNCOUI1NURFODBDRTk3MUM4MEU3NworOjEwQTY4MDAwQjJCNDFGRUQzQUU2QTYzMTNBQ0M0QzhBN0UwNEYyODg4OQorOjEwQTY5MDAwNEMzMkRCNjFBNzlERDdEMkRFM0FFRjY1MUNFRTg5RTYyRQorOjEwQTZBMDAwMTc3NkFENzU3QzlEQzMzRjFDQTJGNDEzQjdERTgzRjUwRQorOjEwQTZCMDAwQUYxMkE2NUZGNTQ4MEFFQUMzNjMzQkFGQkQwN0NDQjc0QworOjEwQTZDMDAwRUIxN0RDNzYwOEQ0RTRDQkE5NDE2Q0Q3MTA3QUE1MDY0OQorOjEwQTZEMDAwRDlFREQ0QkQ5MzAxRUY5RkQ1REU3QjRGMTk1RERBNzFDMworOjEwQTZFMDAwMjVEQ0VFQTExRDhFNkY5MkQwNkVCMUNFRjMyQUQ3Mjc1NgorOjEwQTZGMDAwQUY4MTNDM0QxN0M2MjNDQzVFOUQ0NzQ3Q0JBNTYwOTdGNQorOjEwQTcwMDAwQjUzNTIwNTRDOEI3OTIwMjQ2M0JENUI3RTFGMzU2MzI2RgorOjEwQTcxMDAwMTlFQzg3RDAyNjBGRkQ3REMyQzY0RkQ2ODM1RTI2MjQ1NgorOjEwQTcyMDAwODJGRERGNzVBODM3MjJCQzA5QjM3M0ZCN0JEQzNCQjYyNworOjEwQTczMDAwRDA3NkFGODI1QzgwRjE4OTNBMzY1NDYyOTAxMzc2MkZERQorOjEwQTc0MDAwOTY0NzhCOUZERjI2QzBDRjk5Q0EyOUIxQ0Y0NEYzNTBEQgorOjEwQTc1MDAwQzhFM0ZBMTY1N0I5QkJBNDM0QjA3NzAyRDdDMTdFMDY1NgorOjEwQTc2MDAwMTdCOEJDM0QxNDg1OEIxNUVEMTI4MENGQUJBRkQ4NkNGQworOjEwQTc3MDAwNkQ0MTFDMTZFRDE1NjExRjA3MkYwQkRFNzU1RTE5QzhBNAorOjEwQTc4MDAwMUY4N0U2QTI0QjU5MDRDRUNCODU5NDhFQUFEQzNBOEM2NworOjEwQTc5MDAwNTdGNkRCODU4RjAxN0VFRUFENEYwQUM4MzBERTlDQzBEOAorOjEwQTdBMDAwOUIzMjJEMkZCRTM4MjkwMDdFNDc3OTVGRTEwMTFGMURBNgorOjEwQTdCMDAwN0ZFOTQyQzk0QjY4RkY3OTBCQzZGQjA3RThGRTUyMzZCQQorOjEwQTdDMDAwRDA3MUYyNjA3OUM3NkFBQkM3MTFGMjQzOTg2QzA2NjEyOQorOjEwQTdEMDAwMEJBNkIwNTgyQ0YxQjJFRURCM0M4RkI2M0ZDRkJGRDcwMworOjEwQTdFMDAwRTZBNkEwOUVGODVEREY2NjI3MURGNzhFQjY1MDhFMzc3MQorOjEwQTdGMDAwOUREQTEzRTkxRjc0Mzk2NzEzOTI5NUE1RjVDRDU1MDlCNAorOjEwQTgwMDAwNzE2NzdDNTQwQkU1QkQwRjhBRjEzRUVFRDIwQTA4Rjk2MAorOjEwQTgxMDAwOTkyRDFDOTQ2OEZERDQ4Q0E0MDU3NjBBMkY1RjkxOTgxRAorOjEwQTgyMDAwM0Y2RkIzMzY4QkVFRTdFMjFCMUY1RDRGQzc1RkZFREQ2OAorOjEwQTgzMDAwNDkwQkVDQjBFRTA2MzE3RkU5MDI1OERGRDI1OUEyNUMzOQorOjEwQTg0MDAwRUU4MkIyMkY4NUY3ODdGNTU2NTBGOTU1MTg1QkJGM0Q1QworOjEwQTg1MDAwODdDRTlGMjFEQUNGNTgzMDhGRjYzRDVDRDk1MjZEQTc1NQorOjEwQTg2MDAwRjNGRkU4QkJEQUU2NDkxMzA5OTlCRUIwRDJBQkQxRjJFNworOjEwQTg3MDAwMTMxOUY1MEI1MjI4N0VGNjEyNEFBN0I0RkM2NEM2OTU0QworOjEwQTg4MDAwMEI2MEZEM0VEOUM2QzdCRjZBMzNBQ0JGQkM0MTNGMEZBQQorOjEwQTg5MDAwRUEyNTdERTVFNjVBQkFFRkI1Q0U4MTQzNDBBRUVCMzYwOAorOjEwQThBMDAwRThDRTJDRkEzRjI5MTJFMzYzQTdBMzQ1Q0JBN0IwNzNFOAorOjEwQThCMDAwRUNBQjhDRTZFMzcyQkExOUJEMTY0NDRCNDA4RjBEOTU5NAorOjEwQThDMDAwOEI2OUI5QzQ1MENFNjFFNUJEOUJDOEQ1RjFFNEVENkQ4RgorOjEwQThEMDAwOTk0Q0VFRUQ0RDhFNUZBRjY0MzA3QjgwQzIwREY1NDkzMworOjEwQThFMDAwREExMUEyRUQ4RUEzNTczRTRBNzdFMzdDMDc5Mzg5RUVGNworOjEwQThGMDAwQ0M4OEYxREJFNTk0ODcyQjI4NUYxMjI3NUJBNzE4NjdDQworOjEwQTkwMDAwOThGRUM4NjA3Mjg3RTg5NzY3ODAzQzVEMDg0M0QwQURDOQorOjEwQTkxMDAwMTdBOTEyRkFCQkE0MjUyNTMyMUU2ODg3NDRFRDRCNDBDNworOjEwQTkyMDAwN0ZDODM2NUNBRjVGOTZBRTVFNDRDN0NCNEEyNkUxM0QzQQorOjEwQTkzMDAwRjRFQkNGMjQ1OEE2RkRCNTNERUVEODc4MkY3MUJBQUYxMQorOjEwQTk0MDAwMjkwQUVEODRGMTZBQjI3MzRCREI4M0IxNzFFOEJBM0IzQgorOjEwQTk1MDAwOUM1MzRDRUJCNjU3NjQ0MEZERTJEMjlCMjcxOUUwMzk3QgorOjEwQTk2MDAwODlFRDgzRDIwMUY2QTNEMzNDMzY5N0YyQzFERUJFRjM2NAorOjEwQTk3MDAwMEFDMTdFRkZBOTQ1RUU5NkY3MkQ3NjEwREFFRUNBNEM5NQorOjEwQTk4MDAwMkU1RjAyQUNCRkJGOUFDOTlGQzE5QjUzMjIzREMwOUY5RgorOjEwQTk5MDAwNEVCNTM0NjRCMDNCMDMxQzFFRDU3NzJFQkMxRkRBMzU5MAorOjEwQTlBMDAwRjUzOTQ4MTI2REI3N0U0RjY1MzYxOTQxMkYzNjdEMzEyNgorOjEwQTlCMDAwOTM0NEE2MUFDQUY2QTgwMjcyQTdFOThCMzlGODdCRjU2OAorOjEwQTlDMDAwOUQyRjI5QzBBNzMwNEU4MEVFNkJCRDRCQ0I1NjAxNkUzQworOjEwQTlEMDAwRURGMUYxNEYxRDcyNUM0N0QzMTdFOTQ0OUY2QUZDOUQ2RQorOjEwQTlFMDAwQzEyOTM2QkUwRkVCNEZCN0FGRDg3ODMyODk2NDhFMzRBOQorOjEwQTlGMDAwOUU4MkY1NDM3MEI3NzNCODJCRjFENzM5NUZEMDI5ODVBNAorOjEwQUEwMDAwQjdDRDQwNUY0QjM5QkQ1MUU5ODc3MTk0RkVDQjI2RjUzOAorOjEwQUExMDAwODBCQzhGQ0RCQjA5QzdERjZCQTc3ODA0M0JCMDJGMzk1MworOjEwQUEyMDAwMDA3NjcxQjk5REM5Q0ZGMkJFMENBRjJFQzVFODQzRDBGOAorOjEwQUEzMDAwODVDMEVCREU4Qzk2NEFEQ0VGMjJDOURCMTMxQ0JFQUU3MAorOjEwQUE0MDAwQ0JDNEJBQjgzRUNENkUwOENCRDcxOEQ2MjdGODgxOEVDNgorOjEwQUE1MDAwQkY5NzhGNUY1NjgxRkNGMzJGNENGRjUwQkU1OTAxRkMwRQorOjEwQUE2MDAwMEI3NjBCRUM0MzhEOTYyQ0Y2MEM1RkZGQ0ZBOEVDODA5OQorOjEwQUE3MDAwMkZDNTIzODNGRkE1RUUwOEU4MDEwMUI3RTFGMENGM0YyMgorOjEwQUE4MDAwMEQzRUM3NjI3RDc5REYzMzBBRUNCMzI5MDFERjg2MzJFMAorOjEwQUE5MDAwNTNCMTVGRjY5MTY4MkFGOEI1QkY0QzY3N0E2RDZGRUZENgorOjEwQUFBMDAwNTRENzRDRTA4Qjg1MzYwMjIyMENGNjBERjY2QUI5OTAyRAorOjEwQUFCMDAwQjc2NEQ3MEI1NTc2RkFGQjUwOTlDQURCMDBFMDYxNDhDMgorOjEwQUFDMDAwRkU0NjlEQ0U1OEZCQUFDQzVEMEIzQTY4OUQyRjg5RTJDRAorOjEwQUFEMDAwN0YxMkRBQTE0RTYyRjAyN0JFOURDMUU0NTg0NTk4QzRBQQorOjEwQUFFMDAwQjU1Qjk2NjUzMkJCNDVDMEZCN0IxQkFBQzk3Qjc0N0ZGNworOjEwQUFGMDAwQ0ZBNTMzQkVBQzE4RDAyNUMwOEJFMDZCQUI5QzdBODg1OQorOjEwQUIwMDAwRTNGMTdCRkNGQjhGOTc1M0QyNjlFNEQ0MjIyRUE3RDhDNAorOjEwQUIxMDAwRUYwN0E5OTkwRkVEQjJCMkEyMjUxMkQ1ODlBQjVFOThDNQorOjEwQUIyMDAwM0ExRUZDOTk1QjcyRTRDMEZCOTRBRjk2NDhFQTk4MUYwQQorOjEwQUIzMDAwRDE3MUVCOUMwMThDOTMwOTNBQTkyM0NFODAxQkUwNEU4NgorOjEwQUI0MDAwOERBNjJGNDFFRjJGNzQ2MTE5RkU4MDVERjI2OUI3QzRBNQorOjEwQUI1MDAwRTg5MDA0RDJFQTRBMTJDQjIxQjE4RTVCNzIxNDlDNkY0QQorOjEwQUI2MDAwRDVFNkYxNjk2MUUzRkFCODlFQjgzQzI5RkEyMzUyMzQ3QworOjEwQUI3MDAwOUNDRjQ1OTlBRTdGQUQ0RDM2RDRCQjk5M0VGQkQwQTM1QgorOjEwQUI4MDAwRkQzNDgzRTJFMTU1ODlENEUzN0EyQ0Y2RDI2Rjc4REM4OAorOjEwQUI5MDAwQzY2QTJGRDU3MzNCRDIwRkU2MjVGMkIxMEQ5REQzRUNEQgorOjEwQUJBMDAwQUVBNDA4NjE1RDc0RjA1M0IzN0IwOUU3RDdBOEFEQzlDMworOjEwQUJCMDAwNDAwN0JGQ0UyODYwNzZFRDE1QjRGMjAyQ0E5NENFNkE4MworOjEwQUJDMDAwRUQ3RDgzMUM3QjFFRDY4MzdBMjEzQTBERjhGNEE1MEMwQgorOjEwQUJEMDAwNjJCMkYzMUFFNDUwODEwNDc2NkI3NjkyMEE3Mjg2RTJDRQorOjEwQUJFMDAwMDlFMTcwRDA0NUVDMkUzQUVGNzNGNDBCNzhBQjkxNkYxRQorOjEwQUJGMDAwM0VFMEYwMDExRDQ4NkEzQjQyN0YwN0Y3NUI0OTE0RjREMQorOjEwQUMwMDAwQ0RFNTczNTNEMDZFMjVBNzZFMUQwN0YxMEE3RjBBQTMwOQorOjEwQUMxMDAwNUIzQThFOTM4RkUzNDQzQUUxNzJFRjM3NjMyN0Y2ODAxNQorOjEwQUMyMDAwN0UxMkYyNTNFMDgxOUM5MjcxM0M1MTdGNTA1QTU0RTA2NQorOjEwQUMzMDAwQTVFNTgzRkU3MzRCREIyNUIzRkQwM0Y2NTBDQzdFNUFBRQorOjEwQUM0MDAwQkY3OTNFQjU5N0E2RDdGNjQ2NkQ1RTkwMkFCNzJGQjg2NgorOjEwQUM1MDAwOURCNkFGQTFGNjkzOEJFRUU3OEYxOTRDMEYxRTBDRUE1MQorOjEwQUM2MDAwNzIyQThDMzc5RUVFODNGRTc0MjgzOTNDQTlDNTFEQzMxOQorOjEwQUM3MDAwMDdCNTcxQzI4MEJGMkM4NTdFREQ4QzNGRTBEQjk5QzlCMgorOjEwQUM4MDAwOTA5MUUxNjNERjA2RkVDRDRBNjVFRDg3RTkzRDVFQUY1OQorOjEwQUM5MDAwNDkwQ0RFNUIyQTk5OUNCMEI2QjNGMTcxRDczQUY1REE2QworOjEwQUNBMDAwQUM0MkEzN0QxNTIyNDA4Nzc2QzJFQzJDMTk3NDhGMUYwRAorOjEwQUNCMDAwRjUxOUMyQUJGQUNFODYzNEQwOUI5RkY1MkQ0RDIzOTM2OAorOjEwQUNDMDAwNjI3MkQ0RTFGQ0VERDhGN0E5MUM4OTkyMjVERjAxN0VFMAorOjEwQUNEMDAwNTU1RTk3MDlEOENCNzczODE4NUQyQUU5NjE2RjA2RkQ3NAorOjEwQUNFMDAwNjZBNkM0Rjc5QjI3RjJGNTY0ODI1RjREREJEREMzRkRFQQorOjEwQUNGMDAwMUVDNzE3RTdBM0JGOUQ5RkM5RTI0NUE5Mzk3NTI4RDc4RAorOjEwQUQwMDAwMDE5NjAxOEFGNzM0MzJBODdCMEQ3ODRDQUJCMDk5RkNFMAorOjEwQUQxMDAwMDdDNzE3OTNCMUZGOTlEQjBGQTUwOUVDODczMjkzRkRBNQorOjEwQUQyMDAwMjBFNkI1REExMTZGQjZFNkUwRkE0NUZGMTUzOUFGRDU4MgorOjEwQUQzMDAwMTA0M0ZCOTU2NEUwMEUxODZGRTVGQTdDNTNCQzI4OTEzNAorOjEwQUQ0MDAwRkQzMTM3NTMxQUIyMTdGNEI4RUI1MjRDQkZCRjQ5RkQ2RgorOjEwQUQ1MDAwNDVERDM4RkYzMTM2N0Y2Q0RFMTRDQTcwQjE3OUU1NENDMQorOjEwQUQ2MDAwNERDQjQ0QkY2Rjk2RjdFOEY5RjRFM0EyQkZDQkE4NzdDOQorOjEwQUQ3MDAwNTBGRTUzRkRBNEVENzBBMzVFQUEwNUI5MkRGQzI0RTA5RQorOjEwQUQ4MDAwN0Y2RjFBRjA3NzY1NkRBNkRGQTAyNzc5M0ZBQjNDM0E1RAorOjEwQUQ5MDAwQzBGREVBMDM1Q0RGQTQxRDExNzY2MzcyNDA5MjYyN0EwMworOjEwQURBMDAwNjdCOERFRTI3NkIxNDUzRTlFQ0VDRUE2NzRBQjFCRUQxMworOjEwQURCMDAwODA2MTc4Q0VGQ0FBRjY2NTUxMDJGQTk4RjAwRkIxMkZBNworOjEwQURDMDAwQ0I2Nzg1RTUxMjkwOUZCNTEyMTk0RjNGRDNFNzk5RjVGMAorOjEwQUREMDAwQkQ5RUM5RkMxMDlEMzI5Q0QxNkY1OURDNjA2RUQ3MDFCRAorOjEwQURFMDAwRURGQ0YwNEQxOTk1REY2MkQ0NDc5MjBDNzI4RjhERDczMAorOjEwQURGMDAwQ0NFOTIxNzhFMjU1MjU0MEU1NzA5NERCNDNCQjdDREE1MQorOjEwQUUwMDAwNUQ0MDE3MURDOUE5OTM0MTRGNzQyNDhGOEQ0MDVDNjIyQQorOjEwQUUxMDAwQzdGRjU2MTdFRkEwRUIxRjdDRDlBMUY2QzBCMEZCMThGNworOjEwQUUyMDAwOUQ1NDJFNUZERjZFQTdCRjNCN0EyNTZGMTI4OUFERDM4RAorOjEwQUUzMDAwQkQ0MUQyNTY1MzNFQkU5RkNCODkyNjFGREI0RjkzMkY3OQorOjEwQUU0MDAwQUE4Q0EzRjNFNzM1QjE3NTE0RjQxRTkwRUMwNjc5NTc3QworOjEwQUU1MDAwRDBDOERBRURDODc0OThGNENGQTM1MEE2RTMzQzIyRkMyNgorOjEwQUU2MDAwMTExMjY5QUIyOTgzRjY5QTFEQ0U0MUYyN0EyNThDMEYxNworOjEwQUU3MDAwRTdCNTUwNDA1MDdBQzg1M0Q5Rjg2RTM1MjI1RDNCMjk2QQorOjEwQUU4MDAwQjZERjJFREJBMjQ5QTAyN0JBQjI1MjU0RDAxMzI3N0REOQorOjEwQUU5MDAwRTFDNzYwQkY0REZERDEyODgwNkI3QTdGOUYxREVDM0RERgorOjEwQUVBMDAwOTc1RkRCMERCRjhCN0QwNjY0NkYxRUM4RDk5NDdFQjY5RAorOjEwQUVCMDAwQkU2RTBCREQxMzcyMTc1RjU3MEY5M0JGMzI3OTlFMDA4MgorOjEwQUVDMDAwNUU0MDg2RDBGOUIyMzYxNUEzOUUxMkVEQjMzMkI4REVERAorOjEwQUVEMDAwQzgyMkUxMjdEMENFMjI1RDA0RjE0NjcwMUY1OTlCMjY3RgorOjEwQUVFMDAwQTBCRDJGRjAxQUIzQUIyNjRFMDFCQkFBNjg2QkQ0QkUyRgorOjEwQUVGMDAwOEFGNjdCRkFBMUY4RjFGQTE3Mzk5RkQwN0QxQzM0RUU1RgorOjEwQUYwMDAwMjMxMTdGMDhCRDI2REEzOTEyRjhENTgyRUU1MzZBRTNBMQorOjEwQUYxMDAwREJBQjU0MTM2MDdERTU3MkRGOTVCMEVGQTYwRTg1MjRBMAorOjEwQUYyMDAwNDkzMUY4QkJGQ0ExMjMyMEI3RjI3QTc3NDgwMDFCMkJFQworOjEwQUYzMDAwOUQ3NTY0RkM1MENBQTdGQkJDRjU0NkUyOTU0OUUyNzVENQorOjEwQUY0MDAwMzc2RDkwQjVENTQ2N0VFRTUwMThERDI4RTZGMzNERTEyRAorOjEwQUY1MDAwNjc3Q0MyRTMwNUIzRkRBMTYzMDA4RkU2N0REQjE0QzAwRgorOjEwQUY2MDAwRjM4RDNCREY1MTQ2M0FENzE5MkREQ0E0NDZFNkJGMzRCQQorOjEwQUY3MDAwRDUzQjIzQjBERkNBRTU3NkM0RTM5QTBFMjUwMkYyQTlEOQorOjEwQUY4MDAwNjlGNzlFQTgwREVDRUM4RDQ0MDVGRTZGRUFERDczMjg5MQorOjEwQUY5MDAwOEZDMjI3QkY0OTlCMjYwNzYyRTNFNTM3NDUyNDU4NEZGOAorOjEwQUZBMDAwMTYyNUM2M0VGNEZGQTIwQUU4NkQyQjdEODM5RDBDRjZBNAorOjEwQUZCMDAwQ0EyMTE3RTNGRjBGMkJEREJBNDRFMUY4QTEyM0RDMDQxQgorOjEwQUZDMDAwRUQzRUNDNEQ1MUY1NjAwQ0VFQ0ZFRDk5RkZCQzQ0NTlGMAorOjEwQUZEMDAwRENGMzQ0NTIxNEJFNURCNjlFMUMyNzZERDc3NTlFQTI0RAorOjEwQUZFMDAwMDIzREI5RkM2MThGOEZDMjI5QzMxRURBMEJGREQzN0RGMAorOjEwQUZGMDAwMUVCNThERjYwRDI0OTEyOUE4QUY0NzA5ODdFOTE2QkEyOQorOjEwQjAwMDAwOThCRTkxRjFDQjVDNUZBQUIwMDNBNzgwNUMzQUQ3RTcwQQorOjEwQjAxMDAwMTE3NjE0Q0FBQjQzMEVCNjhGMEVDMkQ2REI5OUE5MTVCMgorOjEwQjAyMDAwQzA3QTg4MzcwM0U3Q0Q2QjhBNEFFMDA3NThFNzhERDFBRAorOjEwQjAzMDAwOTU1Njg4RUQ0N0JEQ0U1RTA1RTRGQzFBMkU2RjJBOTcyMworOjEwQjA0MDAwRUY5NERFMzNEMDQxQTk4RjlEQ0ZFNkVEREUyMTgxN0ZFNQorOjEwQjA1MDAwNDhFQkRCNkE3Q0Q4OUUyNDgxQkNEOUNEQ0UyOUQ2RDBFMgorOjEwQjA2MDAwRkFFQjBDRjI0NUVDMjM4RTlDQTk4MEY1QjlGQkZCOUUxNAorOjEwQjA3MDAwNjU3MjI2OEFGNDI3RDY2QkM1RTczQzFGQjNFRjJFQTI3NAorOjEwQjA4MDAwNjYwMkZFQUVFOEM1MDEzQURFQTFDMjY0MUM0RkYwQkQwNworOjEwQjA5MDAwOTU0RkU3RjkxODlERTdENUVGOTQyMDlFRTA0QjYxRjZCOAorOjEwQjBBMDAwQTQ1ODlGNjhCN0NCNTc1NUVCNDMzOEY0MjExQ0Q2RDYyQworOjEwQjBCMDAwREIxMTZGNjIzRDM1NEE2ODFDRjg2NUNCRjg3OENGNUNEMAorOjEwQjBDMDAwRjE5NjMyNDBDQkY3RkRGNDE1QTRDN0I1REQ5Mjg2RkVBQworOjEwQjBEMDAwNDJGNzJCQ0E1Mjg4REJFOUZGMkU0MzlDRjYxMjY2QTI4OAorOjEwQjBFMDAwOTBFRDNGNzkwNUY1Q0EyNTdCNTlGQzYwRURERTNERjYxNAorOjEwQjBGMDAwNkJERDMxM0EwRDlFNzg2NjI1RDBEOURBREUyNEUyOTJGNgorOjEwQjEwMDAwMDA3RjAxRTQ1MzJCOUQ1MjM5ODM3NDRGNzQwNUNGQjlFRQorOjEwQjExMDAwQTg5Q0Q0NTFBRTkyNzAxMEZDMTQyMTg3M0IzOTdGMTM0OAorOjEwQjEyMDAwMzdGQkZENDZCRTZFMzE2RTRDN0VCQTkwREU4MzI3QTY5RAorOjEwQjEzMDAwM0NFM0E0RjA1Q0FCNEFBQTBCRjg5MUMzOUI4RTFGNDU3RAorOjEwQjE0MDAwMzk0QzQ4MjFGODZCNjI3QzJCRkNGRTk5REJFRDcxRjBFOQorOjEwQjE1MDAwN0MxQkUwRDlBQTRGODQ5RTBEM0U1QzQ1RTAyQkYwNjczNgorOjEwQjE2MDAwRTc3MDFGRDJFRjNFMDVEN0RCRTFCMzMzM0Q1RkM5RTJBNQorOjEwQjE3MDAwREExRDBFQTY0NzNBREE5QzExRTBFQkU3RDIyRjdBNUU5MQorOjEwQjE4MDAwQTJGMkQyOTNBMTQ0RTE3QkQwQjZBQTA5RUEwRkU2QjFCQworOjEwQjE5MDAwNzU3NEQ5MzYxNUI3MzAzRDc2ODcwRkYxOTc0QTk4N0M4QworOjEwQjFBMDAwNjJGMkU4QkUxRjMzNzlEMkE0QkJEMTdGNkMwQUQ3QUQ1RgorOjEwQjFCMDAwQzY3MzA5OUY0Qjg1NzMwOTEyN0U1NjU5RUE4OUQxODM1QworOjEwQjFDMDAwMTVCRjgxMjcwRTI4MDE1QTdGNDkyRkUzODMxOERDOTg4OQorOjEwQjFEMDAwQkUxMjc0NEJFNTFDRTJCRDMzNTM5QzVGODY4MzAwNTc1RgorOjEwQjFFMDAwRUFEN0I3NDFGQzQxRjhGNUE5MEQyMUREMTMxOENFQUYyMAorOjEwQjFGMDAwOTlEQ0FGOUZDNkZEN0E0Nzg1RjM2RkVBRDdBRkQ5RjBFOAorOjEwQjIwMDAwNkJGNDgzNkVDQTc5MDFCRjgyNUZBOEZGNjhFMkFCMjc0NworOjEwQjIxMDAwMzhCRUVGRjczMUJERkE5NDhGRDFENTlBQjI1RUU0ODc4QworOjEwQjIyMDAwMzVFRkI3MjAxRkI5NkI5OTNDNzFGNzlCRTUyMDIxNzc2QgorOjEwQjIzMDAwNzNGQjYwMkI4RTUzOTNEMjdCOTEwQzdFRjJCRjRBREU2MAorOjEwQjI0MDAwNzY5Mjc4REQzNzQ4MkRGRjA5NzkzMjY0MEZDRkRGMzhFOQorOjEwQjI1MDAwNDVBREZDNzIwQTU3MTc4NzAxNkZGNzZCMUZGM0I3M0VCNgorOjEwQjI2MDAwREM0NTExMDE3QzY5NkY1MTQ2QjI4NzRGMzcyRTg5QkU4QworOjEwQjI3MDAwMjYwMUJFRDc3MDU4N0ZCOEJCRkFDMjNGNDA5QzcxNTdCOQorOjEwQjI4MDAwMUFFNkIzN0NCMDdCQzkzN0ZGNDBGQjdGQjg3M0FFMEFDOAorOjEwQjI5MDAwN0FEQUQ3MUU0MkZBMTlGNEJCNTQ4ODI3NTJGMTU5MkI5NworOjEwQjJBMDAwNTE3QTY4RUJGRDU1RUE0QzM4MkY3QkVDODIyOTIwMzcyOAorOjEwQjJCMDAwREZFNTdDNzlFMkM3RjIwNjgwQ0ZBNjdGN0I3QzBFRDRFNworOjEwQjJDMDAwQUY4OTQ4OTk2MDNGN0VCOEVCNUZGRjBBN0FCMTcxRTdCQQorOjEwQjJEMDAwM0FDQzRCNkI3RkVDOTc2ODk3REIyMjNCRDhFRkJCRDIyNQorOjEwQjJFMDAwRDBDRTNDRkVDOEI2MzkwMEY3RjZERTc2QUMzRkYxQzhFQQorOjEwQjJGMDAwMEUyQzNGRjM2RjhGRkZFMjJGNjA3Nzg0NTI1NTY4NzdGMworOjEwQjMwMDAwRTJDN0RCRkVFOTJGNDBFNzc1QTkyQUVDQTMyOTZDNjdBOQorOjEwQjMxMDAwRTdCOTgyQkVBRDcyNkJDRjAxRTQ1MzQxMkY5NzgwREU1NworOjEwQjMyMDAwMDUzOEQ1MzNGOTIzRThGOTVEN0VERUI0QUFEQUREMDUwOAorOjEwQjMzMDAwRjJFQ0REMkQ5RUM2Nzg3MTQ2QzVDRkYwMDJCMTE4OTRBRgorOjEwQjM0MDAwNjNGNTEyQzZEOUJBMjhENTQwQkNBMzJCOTk1NEMwMzc4RgorOjEwQjM1MDAwNjU1MjU0QzlBN0YzNUNEMUIwNjcwRURBM0RGQTNCRDcwQQorOjEwQjM2MDAwNDNGQjI1RkI1QzY0MEJDNkU1MjBBODRCRkQwMTI0NzU1RgorOjEwQjM3MDAwNDI0QUE4MTgzQzRBRkQ2NjNBRkFDRTJGMjlERDFFQTY5RAorOjEwQjM4MDAwRjIwMUY1OEVDNTFGNThEMkY1QzJGRjgwMUNBRDczMEVCOQorOjEwQjM5MDAwMUMwMDUxMjg3RUVGRTJGMTFCREExRUY1NEVGOUZBRjg5NworOjEwQjNBMDAwNzFEMjU0QkY5QkQzMkREMzlCNzk3QjE3MTUwNDUwNEU3QworOjEwQjNCMDAwMjRBOUUzMERGNkU5OTgyMzJENUIyMDNEMjlBRkIxRUZEOQorOjEwQjNDMDAwMjJEOEM3QzVDNUQ3NEM0NUJBODBGODFGRTgxRkREOEQwOAorOjEwQjNEMDAwRTNBRjg1RjgyNUU1QkY3M0ZDM0MyRUUyMjVCRTE5NzQ2QQorOjEwQjNFMDAwRkUxQTNCRjFCOUUxNEJDODZCMEU5NDIzOEZFMkI4RDQzRgorOjEwQjNGMDAwRkU0MEJCMkFGMENCMkIxRTA1N0I2NEJCMjM5QzNCMEQ4MAorOjEwQjQwMDAwQzZFOUUyN0E2QjI3NUIzN0VERUY4NTczNTQzQTlFNzc5NgorOjEwQjQxMDAwQzYxNDFDQTdDRjkxODFGRDc1RDY3RkZFQ0UzNjI5QjYwNgorOjEwQjQyMDAwNUU0QUE5NjM0MTZGQzE3ODY1NkVEMDMzN0EzREUyMjdFOQorOjEwQjQzMDAwQTBFMEJFNEU0MDkzNUNEQ0Y3RTQxNTI1MzFGRUI1QzZCNgorOjEwQjQ0MDAwN0Q0MDlFQzFGOUYwNkM3RjY1ODU3RjVBRUMyQkUyNDEwRgorOjEwQjQ1MDAwNTY3ODZFRTRGNTNGRjM2QkY4MjVCQjMyNEQ3QTI1OTFCMworOjEwQjQ2MDAwQkRGMkNDMTUxRjMzRkRGQkIzNzc1MERFMzQwMzFEQzM5MworOjEwQjQ3MDAwRkNFMUY3NERGQUY3NUE0MUM3NEZCRDgzNzQ3Q0VEM0VBRQorOjEwQjQ4MDAwQTY3RjlCRjc5NTJBNDBCNzFGQjQ2QUU0M0Q2QTgwMzZEMQorOjEwQjQ5MDAwRjNGM0Q3RUREMkMwRjU5OEVGRjI5NENCMEI3MUJEOEZEQgorOjEwQjRBMDAwQjlCRTU5QjNGNTlEQTM3MDZFNUFCODJGMTdGREZDOEYyNgorOjEwQjRCMDAwOUY3MkQ1QzMzODA3NkQzNjg0RTdDMTlFRjM3N0I0NEJDRQorOjEwQjRDMDAwQzY3NTMyQkY4MERBQzE0OEFBQ0RENDRFNjU3NkYwRUE5RgorOjEwQjREMDAwNkRFMEE3QUQ2RDI0MkFGMDdGQjM4NTdFOUFGN0JEODIxQgorOjEwQjRFMDAwRjQyMkVDRTBFMEMzOEI1NzMzRkJEM0E1QkFDMDhGOUJBQgorOjEwQjRGMDAwQzdFQzUxNDJFRDUxNjg5RjNFMkZEMkE2MjA3RDk1OTYxNAorOjEwQjUwMDAwMDM3RDNENzNDNTJGM0E0MThGMzdDRjIzNUUxODdGRkJGNAorOjEwQjUxMDAwMThFREE5N0NEQzhGNDQyMENGNjVCQkEzQkJDQTRFRkJEMgorOjEwQjUyMDAwNkZBRjA5NzgyOTI0MjlEQzc2QTJERDRCOEExNUFFRTdCNgorOjEwQjUzMDAwNTZBM0JEREM5QzczOTU4QTdDNjY5NTA3NEZCNUExREQ0QgorOjEwQjU0MDAwRDUxQzQ4QzZGNTVDQjI0RkJBODVEOTIzNkVDMkQ2MkYzQQorOjEwQjU1MDAwMjE3RDVFMTI5OTE5ODFGOEQ5NDcxQzdFMDI4RTFGM0IwRQorOjEwQjU2MDAwRkE1NjAyM0MzRUZFMDkyNTQ0NUE3RkM5M0M0NkFGRTlFMworOjEwQjU3MDAwRjM3QTUxOEUzQ0Y3RDQ3Q0Q0RTM4MjJFM0Q0RjI2QTE0MgorOjEwQjU4MDAwM0VDRkIwN0IyNTE1RjVEQTkyMjQyMzVFQkIxRDRDMkZGMAorOjEwQjU5MDAwQTU3MzNENTNCNDk1RTFCNzkzRjM1M0E3REZDNkJGOEFCNAorOjEwQjVBMDAwMzlGRUUyRDUyNzgzREVGRDg4RTMxRkM1MDhDODc3MkU2NAorOjEwQjVCMDAwNEZENkFFOEUyMjNGMzVFRDY2RTNGOTkyQjREMjVCMERFNQorOjEwQjVDMDAwRjRFQkFCNjY3QTUxOUMwN0MwRjlDMEEyMzhGMkUyMzFDNQorOjEwQjVEMDAwQkU4RUUwQzNBQkI2ODFCRDdDMzFDNTNCQTg5NEJDNjJENgorOjEwQjVFMDAwMkU0NzI5NUQwMERDRjIxQTQzNDgwNzE3RkI2RTUwMjFGNQorOjEwQjVGMDAwM0ZENTlGNDlEMDVGMUM2QzUzNDhCQ0I4Q0ZFMzVDOEVFRAorOjEwQjYwMDAwRkEzMzQzNjUxMDg3RjY2NzdCRDBDRUYxQ0I5NTM2MTdCQQorOjEwQjYxMDAwRjQyQjk1RDQ5RTAwOUU3QkEyOUQzN0U4Q0Y1NTdCNENBMgorOjEwQjYyMDAwRkMxRTJBQjNEMTc2QzdCMjNDMENDRjkxREZEODE3OTc1NgorOjEwQjYzMDAwMDAxRjA2RDhCODE2QkI2RkI4REZDREVDQzY4NURERkFBMworOjEwQjY0MDAwNjRGMDQzQzRCOTg2ODA0M0E0MkRCOURFMjgzRjdGQzI4RAorOjEwQjY1MDAwRTExMDk5QzhFMkE5RDRCRTc3NjM1Q0RCNEJFNzAxRkYzOAorOjEwQjY2MDAwQkU2N0U2MjNDQ0JGNkZDNzc2MEZGQjk5N0Q1NDQzRjdDNworOjEwQjY3MDAwMDc3NjlCQkYyOEI0OUVFOTUzOEYxQTBGMUVCM0ZEQzJGNQorOjEwQjY4MDAwMkU1RjU5MEE3RTY1NzM5RDVCMDU3RUJCRUY2N0QyMkFFQworOjEwQjY5MDAwQTQ2NzA4MTY4MkRGMUQ1RThENzgyMDE0MEZDMDBGMjQ2QQorOjEwQjZBMDAwQ0NGQ0QyRTY5NjUwMjQzRUJEMkY0MkZFNkIwNkZFOTNBNAorOjEwQjZCMDAwOTBERTMxMEU0RkU5M0RDMkU4OURFOTNGRTFGRjgzN0MxQQorOjEwQjZDMDAwMzRFNjFEMEEzOTIwRTQ0QkIzMzIzMDAxRTg1OEYwNDMyOAorOjEwQjZEMDAwRjM5QzgxMDkwMEI3RDFDQTkzOEYxRDk0RkY4MTdGMjgwNQorOjEwQjZFMDAwMUM4MDdGMDRCRjc4OUU2NjdDQjJBNTJENTAwOUY1NUI1NworOjEwQjZGMDAwNkE4OEI3RERBMDhGQUNGRTEyQUMxM0ZDNEUyMUQ3NEY4OQorOjEwQjcwMDAwRkE0MkM3RkQxMDA3QjA0NTNCMjFCRjQyQzhFMUU2QTc5QQorOjEwQjcxMDAwMzc0Rjg4OTdGRjI2RTRCMEQzQ0VFNDlCMzM5MjEyNjk2QgorOjEwQjcyMDAwMzdEMDE3OUNGOTc5QTZFMDE3RjM3OTUyMzZDNDhGOEY3QQorOjEwQjczMDAwOUNGMkJCNzkxQzdGNzRGOTEyNTlBMENCNDFERUY0QTRCMgorOjEwQjc0MDAwNjA1RUJCODgxNzU5QzdGREQ4MkY5OUUyMzJDMjZGODE1RQorOjEwQjc1MDAwNzMwNzY4OUY5M0M1RjgyNzI1OEJGMzY3OTY4OENGNDZCNAorOjEwQjc2MDAwNENGNDFGQjA4NURGODEzQ0EzNDRGQTRCRjRGQjVCQzU2RQorOjEwQjc3MDAwQUZDNDNDNDI4RjVBRjEyRkNFNEQ2MDNGOEIyNjI1NkVEMQorOjEwQjc4MDAwRDc3RDgwQzkyNzJCM0Q0RUU0N0M3MjE0N0MwRkRBRUUwNgorOjEwQjc5MDAwM0ZGODM5RDc3MEZDQjI3MTQ4NzhBMjI5MkZBRUNCQjZFQQorOjEwQjdBMDAwQTczMTVFMUM0QzlDNzc5MDg3MjY4RTJBRUZFRTQwMkJBQgorOjEwQjdCMDAwQ0JBRkZBMEY5RTY3NEI1NjRGMzRFNTU5QjlENTQwMUJCNgorOjEwQjdDMDAwQzQ1MUFCOUNDMTUyMTlFNzY1NzEyQ0NGMUNGMjA5RTgzQQorOjEwQjdEMDAwRTFDOUZCQkE4QjIxN0ZDOTFGMzI5Rjk3NjRENzI3OUI5MgorOjEwQjdFMDAwQ0UyMzcyQzMxOUE2NzI3RTYzOUVBOUZEOTg5NjQyNTMxQQorOjEwQjdGMDAwRkQzOTFCQ0UzM0Q1MDdGNTI5QTY3MjUxRDcwQzUzRkI2MworOjEwQjgwMDAwRjFERDU1QTZGMkI5MEY1QzZDNkEzRjMxQjJEODU0REU1NworOjEwQjgxMDAwRDJENjVCMEY3ODM5N0ZENzk1QTY3RTU1NzZBRkJEOTQ4QgorOjEwQjgyMDAwQzJCNUE0Nzc5NTM5N0ZDQzAyQ0ZCNEJGQ0E3MUU5QjA1NQorOjEwQjgzMDAwMjkyQjg4NzhBREIyOUJGMzg4MkZEODY3ODYwN0E0Q0JENQorOjEwQjg0MDAwMDE5QzI3MTMzRURFOUM2MzUzNDZDQTZGOUQ0Q0VDN0ZFMAorOjEwQjg1MDAwMUUxMEZEODNDM0U5ODEzODA3RDQ1MDFDM0Y1M0QwQjk3MworOjEwQjg2MDAwMjg1QkNGQjU4NEZDMzg1M0ZBNEJCNDRFNDE3Rjg5RUE0QworOjEwQjg3MDAwMTNDMUVEM0I5Q0ZGMDU1QzFDNDM3MEE5NTc0NzgyOEJBRAorOjEwQjg4MDAwRTM3NDcwMjExNDJFOUVBRjBFMTdFQjc4OUI1MjlBMzEwMQorOjEwQjg5MDAwNEZGODM1MjgxOEVDRTM4MTU2RjM3RDk4NjU3QTFBRDM3MgorOjEwQjhBMDAwNDNBMTI1QTdCMUEzNTkxQzM4OUNDNENFMkJBREY1RkZFRAorOjEwQjhCMDAwQzlFMUYyMjE4NTA5RTI2MTk0N0NGRDE2Qzc0MzdGMjIyQworOjEwQjhDMDAwQkVERUYwQzlDMTZDOTBERkI1MDRGRDY2NkY0QkRCMjdBRgorOjEwQjhEMDAwQTBCN0FFQjY0NzA5RDBGRjdEN0MzRkRCNzlCRUU4MDM1OQorOjEwQjhFMDAwQUQ1RTFDRTc0MTdFMUVGOTUwNkIwMDdGN0ZCOEI1MTgzNgorOjEwQjhGMDAwQkY5MTU2MTU3RkVGNjlBREMwRUY0RTZBQ0ZDMUY3MDcxNAorOjEwQjkwMDAwQURCNUY4RERENTFBQzI3NjNGNkNBREM3RUZFRUQ2MzBENworOjEwQjkxMDAwNUJENzMwN0M5MTcyQjQ3MzQyOTk3MUUzQTVEN0U4RjI5QQorOjEwQjkyMDAwQThGMDQ0RTQ4MkI4RkEzMkUxMzg3MkMzODhGOUU1MUIyMgorOjEwQjkzMDAwRkFBNUM3OUYzNUYwRUY1QjU5MUVERjUxQzg2RDlDNEVDRAorOjEwQjk0MDAwQTZDM0Y5RTZFOUZBN0ZERTRBMUU3Rjc2RkNFOEY5NDhFRAorOjEwQjk1MDAwRDAxMzM5OTUzOTIxMUU1Rjg3Nzk1RUU1NjNEQjU3RERBQQorOjEwQjk2MDAwQTU0RjRBMENBRjE4OURDNTg3NTM5REYzRTMzQzcwRDY5NQorOjEwQjk3MDAwMjc4M0NENjBFODJGRUU5Rjg4NzI1RDM4MkRBRUREOTA3NQorOjEwQjk4MDAwOTdDREY0NkU3RDEyM0I4RjVGNkVFMUVGNkY2NTMzRkFGQQorOjEwQjk5MDAwRkQ1NjM2RDM3N0JGNEIyMDY3RDI3OTNENURBNzAzQ0ZFNQorOjEwQjlBMDAwMDc4N0YxREQzREIzRTNDMUY3QUVFQzgwMjkyRkM1N0FGRgorOjEwQjlCMDAwNkZDNTNBQ0VFRjFDREQ2M0Q0Mzg3Qzc2QkE3MUM0RkUxNQorOjEwQjlDMDAwQUNGREFFRTJGQkZGNjYzNjYxRUJGRjdGQzY5RkJGQkJGRgorOjEwQjlEMDAwQ0U4M0ZFMDNDMENENkZEOEZGRUZBRTRCQTk4RjE3OTc3NAorOjEwQjlFMDAwNjlDRjY2RTdBMUQ0M0EyN0MxMEMzNEY1NzUwNTZDQzU1QgorOjEwQjlGMDAwNjIxMjYwRTdCRUUzQkMxMDFGMTI3OTAxODlFOUQ1OEU5RgorOjEwQkEwMDAwNzEyNDg0QTEzQzFDQUUxNDFGMDFBNTg4OEU2RjFGOUE1RgorOjEwQkExMDAwMjc2QTg3Nzk1NDVCNENDRjQyQUUwRDMxRENGRjkwODdBQgorOjEwQkEyMDAwRDMwM0VEQUYyQjk4RDczMzkwMDdFQjNCNTM3QTIyRjIzOQorOjEwQkEzMDAwNDNFMzQ3M0FBNzFCRDZGRjBDRTVDQzlBRUNCRkFGOUM3QgorOjEwQkE0MDAwMTE3QzRFNEVERDNCM0U5RTlFQUM4N0I5Njc1MDdCRUMzMQorOjEwQkE1MDAwRkU4Nzk4OUMzOUNEQjg2NzBBQkY3QTc5MDBDRkFGNDc4NworOjEwQkE2MDAwMERCRjdEQkU1MUM1QTUzRTc3QTU0RTI2RDRBRkRCRTAwOAorOjEwQkE3MDAwNjRERkRCOTM1MzdCRTBGQkI5NkI2Qzg0QTQ1MjdFODE2MworOjEwQkE4MDAwNzU1MkJFRDVBQjA4QkJCRkY1OTZGMDlCNUFBNjgzQkNEQQorOjEwQkE5MDAwREQ5RTFCN0EzMDlCOEVCMzRBNjFGRUUyOUZCMkI0RUYwQgorOjEwQkFBMDAwNDMzOTk5OUYwQjI3RjM3MzYxMjU1QkU5ODQzMkQxOEE2RgorOjEwQkFCMDAwNzE1RjE3RjA3RDc1REEwMjYzNjE1RkVGNEJFQTQ0RjA2NgorOjEwQkFDMDAwNUJCQ0I2ODgwQURGNTQxMjJENjFGOTc5OTEzMEY4NkJBRQorOjEwQkFEMDAwOTlFNzI3MDdDMERGNEQ5RTQwNDgxRkM2Qzc1NTE3QzRDQQorOjEwQkFFMDAwRDE5NDk0QzExN0M3MDFGRkZGRDI4NkY3QTIxRkY3QjIwNgorOjEwQkFGMDAwNzUzRUZFNDAzRTlFQjM1MDgxOEZGMjYyMzJGQzRFQjdERgorOjEwQkIwMDAwQjIwNUVDNzJEQUZGRkI1MkY4ODk2Q0JBQUZFMzVFQTdCQworOjEwQkIxMDAwNkVBM0VCOUFCQ0Y5QkQ4QzBDRkFGQkUzRkJBQkYwNUNCQgorOjEwQkIyMDAwMjFCQTRCRDYxNUI4REZEMEY3RTE3NzJGQTFFMzVERDA2RQorOjEwQkIzMDAwRTdDMEY4RjMwNTQ0NDZGOUJFQzY0RUI2MDIxRjI1ODI5QgorOjEwQkI0MDAwRUYwN0RGODg5RjA3RTZDODkxNENGOTVERDZGQUY3Qjk5MQorOjEwQkI1MDAwMUVGODIwNDFCRUYxNkJCQzVFRTRDRjM4NDRGRThDNUYyMgorOjEwQkI2MDAwMUIzMTdGQzY2MUM5OUY3MUQ4NDMwNENFODUxRDQzRjkzRgorOjEwQkI3MDAwMzMwRDA0RjM2N0U4MzhDNkZDOTkwRkFBRTJBRkEzOUYyMAorOjEwQkI4MDAwQ0I3M0M3MTcyOTA5QzY0REM1REYzRjI4MUM3OTlGOEU4NworOjEwQkI5MDAwMkY1Q0E2N0NFQzU4N0YzN0ZFOUUyODdGRTczMzAxQTdGOQorOjEwQkJBMDAwMDRGOTRCOUYwQ0FEMkY5N0U4OTlDNjdFOENFRjYyRjM5QQorOjEwQkJCMDAwMTQ2MEJEQzM5MjA3MTRBQjY3RjkzRjFERTk4QzRFMEVBQworOjEwQkJDMDAwRTQ3ODdERDdEMEExQUYyMTAzNzg5RkYzNkFCN0NGMDE4NgorOjEwQkJEMDAwRjFBNDEwNTFGN0UwRkQxRUJCNjM3MDQwRjA2MTIxQjQ4OQorOjEwQkJFMDAwQjNCRjBCNzZCNzhENEE1RUIwQkJBRkRFRTA3ODc3QzBFRgorOjEwQkJGMDAwMjBCNzE2NjlFNjMyODFGNjA2MzlCQzE4NjJEODc0MUY4MAorOjEwQkMwMDAwQzlFNzE1NjNGRURGQTcyNDkwRTYxRDQxOEUzNjM4RTVBRgorOjEwQkMxMDAwOTBEREIwOEZGRTA0NzZDNDg1OUMwRUZCNzNFM0MzQUY0QQorOjEwQkMyMDAwMzBDNzY2Q0E2MzFBREU5RkU3MDNGMDdCNjhCNzdBNDdCRQorOjEwQkMzMDAwOTY5RjAwREY3MEE2NzE3QzJCMUU3QzU4N0YzQTM4RkJFNAorOjEwQkM0MDAwRTFCMDBERTI2QTk1MTJDQkYzRkY5QkMzM0I5REU3QkJDRQorOjEwQkM1MDAwQjFGQjAzMEU0QkJFRkFFMjVDRUJCQTU5QkVGQUZERTk0QQorOjEwQkM2MDAwQTE5OTM5RDgyRjMwQzE3ODVGNjBBRjVENEI5OTQyQkY0MQorOjEwQkM3MDAwRkQ1Q0VFNThFMUIyODlDM0Q5QkFFRkJEM0NFRjNFNTk0NQorOjEwQkM4MDAwMjYyRDdCMENGMEI3RUVGNzFCMzk4Q0NFNDVGQjBFMDc0QgorOjEwQkM5MDAwM0JDRjAyQzFFN0E0NzI2RjA1NjE3MjZGNDU0RTIxQ0ZBMQorOjEwQkNBMDAwMUY0RkI3MDNCRTFBRDgxMDY0ODVGNzEwOUUyRjA5MzhBRQorOjEwQkNCMDAwMEY4MzFGODdCQjE1OEUyMTEyNTgwOUY5RERBNzgzRTc3MworOjEwQkNDMDAwODY1QzZENDUwRTlERjc5QTU3OTIxNTkwRkYyQjlEODNDQworOjEwQkNEMDAwMDdDMTY3MURFOEIzMUQxRTQ3QkZFRkI4QzcxRERENDk4QgorOjEwQkNFMDAwRTAzQ0FFRjhDOTY3RTgzN0I1NDI2NTc5MTU2NDFFREFGRAorOjEwQkNGMDAwM0Y5MjlFMkY3Rjc5RkVFOEVEOUZDRUQ0NzAzMUYwQzc0MgorOjEwQkQwMDAwRkIzQzNGNUJFOEE1Q0VCQzEzMTMyMENGRkVCRDhDQ0EyNQorOjEwQkQxMDAwMjlCOTdFOENDMzZCOTk0MDQ3M0Y0RjYyNzRGNDAwMUQ3NAorOjEwQkQyMDAwODk5NkQ3RkQ2MjIyREU4N0JGMkEzN0FDNDIzQjkxRTc3NgorOjEwQkQzMDAwNDdCNEMxMDk5MDk3NzBBNjcwQTI3RjFDNDA0N0E3ODNBMworOjEwQkQ0MDAwRDM5QTFDQzJGODMxMzUzRTlERjRFNEIwRjhERkU5RjgyRgorOjEwQkQ1MDAwMDNFRkExOTVGREZERjg0M0MwNTM5QzYzODhGNUE5Qjk5NQorOjEwQkQ2MDAwOEMwRUM1NTdDMENEOUE0RkE0RTZEQTc4M0I5NkFGNzhEMworOjEwQkQ3MDAwNTU2RTA4RTE3QzcyQ0MyNzQ3NUQ3NEVERkQ0QUZDRjdGNworOjEwQkQ4MDAwMUQ5RTFDRTVGRTA1QkNGRjVFNzJCODNGMzlGRUZBNUVFMworOjEwQkQ5MDAwNENDMEM3RkZBOEY1NERDREU1RjQzMzM5RkVGQURFMUVFMQorOjEwQkRBMDAwMjVGQzQyNjRGMEFERjRCRjgzMUVBMzc4OUUwQTc4MjY3QQorOjEwQkRCMDAwMUQ4MzI4MUZGQjMzRTJBRkYzQUZBMzVFNjdEOEYxRjcxMworOjEwQkRDMDAwRDBCNzgyQkU4OTdFNEQyMzlFREZFNzI0QzczREJGNUY4QgorOjEwQkREMDAwNDZGRDI5RjA4N0FDRTdGOEUyQkM5RUNBMEZEQzZGOURGOAorOjEwQkRFMDAwNzM3MDY1MjZFMDdEMUVERjc3MTY4OUE2QzNGOUU2MkZGRQorOjEwQkRGMDAwOTJGMDNDNjA5ODlFRTRGQzQxRTE5NTkyMEJGQTY0RTE3QworOjEwQkUwMDAwMjBDNjM1RkEyN0M0OTcwQjI5Qjk4Q0VFODZEQTc3QjFBQworOjEwQkUxMDAwNzkxMkRENDNDOENDOTU0Njc1MEY4MTk0ODUzMTFFNTg0MworOjEwQkUyMDAwRTk3NDQ3NjU4QTg3NUIzODNFOTRGQzlCNTRCMDBGMkJCRQorOjEwQkUzMDAwNzM1RTNBMDJGQkE0RjBGRjcwMDg5RTg2RkNCRTEzQUQ1MQorOjEwQkU0MDAwQ0Y3QkM3MzkxMkNCRUQzNUYyMTNFNTJENzFGNjMzMjFENworOjEwQkU1MDAwMkIzQzIxRDcxMDZGNUNCM0VCMDVFRjM4MDNCRTRBQzgwQgorOjEwQkU2MDAwODA4REREQTMxRUI0OTlGQ0U0NkM3MjQ2N0VGMjdFMTdEMQorOjEwQkU3MDAwRTM5N0Y3MzI0MkE4MEY0MDNGODBERUU5N0NGQUMyNTJENgorOjEwQkU4MDAwNDAyNkQ4MTk5MERGMzNFODQ5NDYzOURBOUUzN0EzMzg3RgorOjEwQkU5MDAwNjA4MDY3NkRBRUIwMkZFNTA0NzZFM0Q3QkIxRjEwQjNBQgorOjEwQkVBMDAwOUIyNDkzRkQxQTFCREY4RUJGMEJGQzU0QkE1RjhDOEI1NworOjEwQkVCMDAwOEYwOTU5REFBNTAwQ0ZCRjY0Njg5N0MxRDcwQTNGRkQ0MworOjEwQkVDMDAwQ0U1OUU5NzhGRjAwRTAzNzM3MzZERTEwRkUxM0UwRjk4RgorOjEwQkVEMDAwMUI1OTVBM0RDMDREQ0QwQ0IwQkMwMTkxRDczNzE0QkY5MgorOjEwQkVFMDAwQjA3QjhGM0E2M0YwMUUyRDVFOTI3OTdDOEREQTBEQUJCQworOjEwQkVGMDAwNjFCRDRBMTJFNzQ3RTJDNjdCRTRDMjZFMjExNkZCODZBQgorOjEwQkYwMDAwMTQzMzdGNzc0NUNFNEJGRjAzRjE5RkNFNTRDNkIyOURDRAorOjEwQkYxMDAwRkZFNDQyM0ZGMDZBQzlBQkMwQkVBOUZERjFFNkY3Njk5NAorOjEwQkYyMDAwRkIzMDg5QkVGOTJERjQwRjg1OUQ5MTIyN0Y5OTMyRkE1RAorOjEwQkYzMDAwNzUwQUZGRjk3NDc5RDZDRjgwM0Q0NkQ3NTM2NTczRTMxMAorOjEwQkY0MDAwNzlFNzMzNzQ3RkI5NTQ2RTU0MjlFQzVCMzk5RjUyMTVFRAorOjEwQkY1MDAwMURBRjRBMkVEODNGNDBEN0Y1MTkzOTk1M0M5QjdFQkY3RgorOjEwQkY2MDAwNDMxODFDRDZCRkYyODcwQ0YwNDdBQkVDOEUxMzQ2QjlEMgorOjEwQkY3MDAwNjU4RDdGREM5NTZCOEU3RjdDNDYxNkZFRTY3QzgwQ0JFNAorOjEwQkY4MDAwQUMwQzg0Q0JFNEE3RTY2NTFCRTMyRjQzRjEwRkJFOEYxNworOjEwQkY5MDAwMjVGQTM1NEM5RTVBRTQ5QzkwNjczNjI3N0I2Rjg0Njg1RgorOjEwQkZBMDAwMjRFMENEQzIzODEyODNCQjJFRTFGQjU3QjM0NTE5OUM2OAorOjEwQkZCMDAwMTQ1QTlFQzU5MTI0NDE3RkJBRUZEOUZDNEI1Njg1NzMyNAorOjEwQkZDMDAwNDBDRTQwNUEwRkNDNDdCREJGMUNGOEI2NUZBODA2RTA3NAorOjEwQkZEMDAwM0I1NzBBRDlEOTNBMjIyQzBGOTFCNDE0NDA3QjlCNzM1QQorOjEwQkZFMDAwNDA4NkY5NDVCQzAyNTc5MjA1RTM4ODc5NTlEOUMzQ0JGRAorOjEwQkZGMDAwMUQ3NTlGQUVCQzJFMzAzQ0FFNDFEQzFFQjQ3RjE1QkUxRAorOjEwQzAwMDAwQkVFMzVFQjc2RTMzQzQzQjkyRENEMUUzOThCRkNBQkZEOAorOjEwQzAxMDAwRDZCOEM3RURCMkFFNDNGRTc2MzJFOTQ1NzlFOTc2N0YxMAorOjEwQzAyMDAwQTQwMzMwQkNDNDJCNDFGOUZCNTJGOEU3QzAxNzQ3OTU3NQorOjEwQzAzMDAwNkUxMkE0QkY5RkZDRjlFNzA0REY2NTgzMUI2MjQ1RjAyNQorOjEwQzA0MDAwMzVFQjI3QkY3QjNERTY0NUZCNDM3NjhCNUUwQTRCQzA1NQorOjEwQzA1MDAwNDdEOUY1RDZERkNERkFDQTQ5RkFGMUZFOTAxNDBERTVCRAorOjEwQzA2MDAwN0M5OTc5RkE3ODRFQTIzODhFQTM4QUExN0VGMDQ2NjYzMgorOjEwQzA3MDAwMEYxRjRFNjZGRDBGMjdCMzdFNkY3MUJERDQ5Q0ExMTBCQworOjEwQzA4MDAwQ0M4QkM5NzIzQUMxOUVGRkQ4NzMwQ0FFNkM4MjNFRTk2QworOjEwQzA5MDAwMDI3REUyNzQ2ODg4NTdBMTU3RDZFRUJEOTkwMERFOUFGQQorOjEwQzBBMDAwRjcyRDQyMzhGQzVFNjJFN0E0RkEwQTA5RjMxOUM0QkIxMworOjEwQzBCMDAwMEZGNTkzQzhDQkI0Mjc5OTkxQzdGQzk0QTVDRjg3NTdBOAorOjEwQzBDMDAwMzREMTcyREQ0QkE0MjQ0QURCOTVDRTBERDVDMEZCMkVCNgorOjEwQzBEMDAwRUQyNTQ0REQ0NENCRURBRUYwOEY3RTAyRkI3ODg1QkRDRgorOjEwQzBFMDAwMzdCNjhFREZBQkE1OTg1OEIzOUI4RUJGRTNDQTMxRUE1MworOjEwQzBGMDAwMTZEODUyRjU2MDI3RTQwQjBENkUyNjVFQzgyRjE5NDY0MAorOjEwQzEwMDAwQkZBNzI4M0Y1MDdBNzgwNENBNzREREVCNTY4N0ZGRTU1NQorOjEwQzExMDAwMzZEQTNFRjcyNUEyNjIxQjVFMEYzRTBBRTA0RkUyNzQ1QworOjEwQzEyMDAwMDFCRkNGQTVCRkFGRTM3NDU0QjQ1RjYyRTdGQzNFRjYzNgorOjEwQzEzMDAwMEUxODBFMEVFRjc0MzlEOUZGQUVEQjVGNzlGOTM0QkEwMQorOjEwQzE0MDAwQUVBMkJFQTk0OERFRTM2ODdCQzg4MzgyNEMwNEQ2OUVCQgorOjEwQzE1MDAwRDhFMkI1MUYwN0VEMDM3MEFFQ0ZGMDQzRjIxNDdDM0Y3OQorOjEwQzE2MDAwODk3MEY5MzdEREMyODczMzYzRkM4MEY1QTVCQ0JDOEVDRQorOjEwQzE3MDAwRUIyOTEzREZDMDM4RDQ2RkQ3Q0FEOUIxM0ZGNkYzMzFGQQorOjEwQzE4MDAwRkU1MDg5RjhDM0Y4NzkwNjg5RkQ4MTcxQUI2M0YzQTA4RAorOjEwQzE5MDAwNUM5RUM3RUIwRTJFNUY4MEY5REZEM0VERDEwM0MwRUZCRAorOjEwQzFBMDAwMzNGOUI3OTQ3RjgxREY5RDE0OEU1N0Q4NUIwRUZBRTk3RgorOjEwQzFCMDAwN0VEMjM3MTBCNTBENjY2OTA4QjRDMzc4NjUyNDI0MDNCMAorOjEwQzFDMDAwOUNDQkJEOUJEQjYxN0QxNzM2QkM5MjA5RjQ3NTczNUUxOQorOjEwQzFEMDAwMTFEMkRGMkNBNzVBRTRBMjI0RDI1RUExQUFERTIyNzhEMworOjEwQzFFMDAwNkY0QzQyQjgyQ0FENzc0NjIwQ0Y2REU5RDA3QjNGRTE1NAorOjEwQzFGMDAwRTAzMkNBM0Y1Nzg0MjU3RTBGM0YxQzZDMzBDNDZENDUyQQorOjEwQzIwMDAwRkVERkIyMjRFQTVGQzc5MURGMzdFNzMxRkQyRUZBQUZEOAorOjEwQzIxMDAwRTNGNzUzNDRGRERBM0MzN0NCQ0ZDQ0JCNjg0NjFFOUVEOAorOjEwQzIyMDAwQzdCMEJDNjhDQUZGQjNGM0E2QzVFNDBBOUQxN0YzNTZBRQorOjEwQzIzMDAwOTYxMENEMDFGQjVBQzJGOTU3RjBGRjUyRUQ1NkI0Njc4NAorOjEwQzI0MDAwOTc4NkNDNzZFOUVGMjU4NjZGN0RCOTg0NzZFMjE1RjU4MQorOjEwQzI1MDAwMjNEQkFEMEJGM0M0Qjk3MDgxMTdGNTAwMTE3QThBRDFENQorOjEwQzI2MDAwOTU5MEU3OEI0MUJGODMxQ0FFQTVGQURDNjAzNzM3RENDNQorOjEwQzI3MDAwN0UyQTFERkI2NUZGNjBFRDk3RTdDNEVFQzNBQ0IzREMxRgorOjEwQzI4MDAwODc2OUU2Rjc2MUQ2RUQ2QjczNjQwMUJERjNGQjMwRUJCNAorOjEwQzI5MDAwRjZCRkQzNjlDQzAzMTQ3MDFBN0UxRjY2MTBGMzFGOTc4NAorOjEwQzJBMDAwMjk5MTAzNzA0RjY4RDk0RDc0OEZCNEZEQUZGOEZEODlBMworOjEwQzJCMDAwNjdFMUZFQzQ5NDE4MUQ3OUFFNzQ0NTU5N0U5RDg2Nzk1OAorOjEwQzJDMDAwN0UwNURFMTQxNUYyNTJCQTZDNTMzMEFGQTgyQkQ1QTNGRAorOjEwQzJEMDAwMUFGMzc4QjZCNEI1RDQ0MDNCOTE0RjI0RUVCRjJDNEI0MworOjEwQzJFMDAwNzA2RUZDQ0QzQzY2M0Y2Rjk3NTg1RTk3QkVEQzg5RjA2MAorOjEwQzJGMDAwRjZDQkU0ODhGMTlFQkZCRjI4ODRGOTc0MzNGMjAyMzg4QworOjEwQzMwMDAwQ0Y3NjFFNUY4MEZDRDNBOUY0MUJBMTY2MUFDMzE3RUI3RQorOjEwQzMxMDAwNkY5NTBGNzRCQzBFMThBRkJBNDhDNTNDOUFFQTM0OTZCNAorOjEwQzMyMDAwOEZFNkNGMEM5NURFMzIyOTM2NkVERDdFOTZCRjU3MTcyRAorOjEwQzMzMDAwRkFFNDEwQ0JDMzVENTQwNkYwNEMyNEQ3QURGQThCRDI4RgorOjEwQzM0MDAwREYzRDQwOEZDM0Y1NTZCODE5RThDRjUxMTU1QTdFMUQxMQorOjEwQzM1MDAwMURGN0U0Q0IwQUU2REI5MThEOUFFNEEwRUQ3RUZDODIyQQorOjEwQzM2MDAwNTc4NTdCNzgxRDk1QTE0NTM1NTg2RkM3N0I4MjU5RjU1OAorOjEwQzM3MDAwMjQ5QTQ0RUJDQjVFNTI3QTIwQ0ZBRjkxNzQyQjMwNEU4RgorOjEwQzM4MDAwQTM0NThGRERFNDdFNTYwMTNFQkQ2OUE3MjM0Njk3MDQ5MQorOjEwQzM5MDAwRjIxM0Q1MjIxMDc4NERCQjg3QzU0NTUwMEUwOUY5NjRCQworOjEwQzNBMDAwQTU2NzMyQ0UyQzg3NEE4NURDQTVGMjgxRTVGNzM1MzBDQQorOjEwQzNCMDAwQkQ0NzdFMjA0MTdDRThBNEU3OThDQ0ZENkI5NDdCRDNGRAorOjEwQzNDMDAwODRCMEIyQzhGQjY5RkI5RjQzN0I0NkMwNzMwRTk1MTdEMAorOjEwQzNEMDAwRTBDNzQ5RjBGQjY0RUM4NzY1MkE0RjhCMjFFRjc0MjY5OAorOjEwQzNFMDAwNDk0NjdBMUI2NjQ3RjBGNTk1MERBRDlGRDk0RDQyNEVGMworOjEwQzNGMDAwNTY1NjEwMDJFRjIzNThGMTQzRTc0MzNBMTdFNzdENzA5MgorOjEwQzQwMDAwQjQwMkU3MDgzM0Y5RkM5RkRCQjQ0OUQxMjBFMDhCNDQ0OAorOjEwQzQxMDAwNkMxNENFOUQ1MjBCRUExRDI3RTQ4MUQyRUYxNjI5OENCNQorOjEwQzQyMDAwNzJGMUE3QkEyRTAzNUMyRjI0MkQ0QjE2MDYxMUVGMkZBNQorOjEwQzQzMDAwMDFERTY3MzlGQjUyMDAwRjQ3MTVENTA5RjUzNTkwMzBGRAorOjEwQzQ0MDAwODg1RjMzQkVFNkJCRUZCMzAzQkNFNkU3NThGMUEyREI3RgorOjEwQzQ1MDAwMDFCRTBCMDJDM0YwODVGNzBCQjQwNEY4RDI4NDVDMjE1MworOjEwQzQ2MDAwNjZCOTEyMjRBN0Q4RkRFNkNEODc2RTAzRkZGODc0RjZFRgorOjEwQzQ3MDAwQzlGN0IyQzI0N0UzRDFBRkIwNTMxMkU1RTU5REU0RjI4QworOjEwQzQ4MDAwNzhCNDc5NzkyNzFEQ0NBRjk4NDEwNkFFREYyRDBEQTc4MgorOjEwQzQ5MDAwOTM4RjBGNkU5MDczMENGNDI0RThGNDY5OUVBNzJGRkQyMAorOjEwQzRBMDAwOTJFN0ZEOTY3OTUwRkZDNUY0MjVBMzgzNzI1RTlBMDE0OQorOjEwQzRCMDAwRjQ2NUEwODNEOUZCNUM1MTk5RUVCMzk0Rjc5RjAxRjQyNgorOjEwQzRDMDAwMzAyNUE2MkZBMzM2Nzc0MDI5MDRCQ0FCNURCMjNDRENGNworOjEwQzREMDAwNEVDRUNBMDgyMEZFQTdEQTM0QzRGRjM0RUE4MTcxQkIwRAorOjEwQzRFMDAwRDM5RDRGRjc1RkUxRUM2REI3MDcxMEZGREYwN0ZGQTZBNQorOjEwQzRGMDAwOTIwNDEwRkY5NTE2QkQ1M0VEQUVCMzAzOUQ1NDNCQURCMgorOjEwQzUwMDAwNzhENjEwRkYzNURFNjFCRkRCQkUwQUZFQ0YwMUZDMEIyMworOjEwQzUxMDAwQkQzMjBBRkI5NEUyN0Y0MkZFMDhFNzhEODlGMDdGNDEzRAorOjEwQzUyMDAwQkVGQjhDRjIzMjA1RkVBRDc4MTc3MjYwOEZDQjVCRURFRgorOjEwQzUzMDAwODY3ODcwMjNDQjRCOUVGQUYyQjg3NjI4NjdBRDBERTI3MQorOjEwQzU0MDAwN0Q5OTNERTlFQUFGQjBCRTg1RDU5N0Y1NjkzMkJDQ0Y5QworOjEwQzU1MDAwNThCNDlFRDZEM0YyOUU2MEE4MUFDQUVCMzY0ODI4NDczNAorOjEwQzU2MDAwQTdCRDE2NkU4N0YyQjg4REFDQkU3NDUzQ0JBRkUwOURGRAorOjEwQzU3MDAwQjM3NTNBRUJGRkY0RjE0RTdDQUYyMkQyQzlGQjU3NzY4QworOjEwQzU4MDAwNTc0Mzc5NUQxN0VCRkY0NzhGNTMwN0JGQkNGQzQ4QTRBNworOjEwQzU5MDAwMUQ3RTlGQjg5NUFENDNEODdENzMzOUJERUQ5MTlFRjg1MgorOjEwQzVBMDAwMTVGNkVCNjZGRDZFMzhFNDRDNjZGRTEyQjNFM0U2RjA3QQorOjEwQzVCMDAwN0RDRTdEODhFREQzRjdERUM1QjUwMTBBRjdFQjA2NzVCNAorOjEwQzVDMDAwMDdDQTBENUI1MzM5Q0FEMTA0N0U1QUE1RDQ1RDAwREY3QQorOjEwQzVEMDAwRjk1NDRFMTBDNDNCQTVEMzQyOTZCN0RBNDNBNzU4OTNGQgorOjEwQzVFMDAwQ0ZFQzI2OTFFRjA5NzlFNzhCMENGODVBOTNDRkZDMDgzMgorOjEwQzVGMDAwRDEyRTJCODNCMEZDRTQwN0Q5QkJCMzIyMUYzNTdBM0Y4MQorOjEwQzYwMDAwOTEyMDdFMDA3QjQ0RkQ5QjIwM0Y3NTdFNTEwQkVBRDMzOQorOjEwQzYxMDAwRjlFNzg4QkNENDAxRkIyQTNBNkZFOTk3N0ZCQTI4OUVENAorOjEwQzYyMDAwNUY3RTRCM0VCMzkzOEVGMTNDN0FGMTdCNjMyNDY4MDNDQgorOjEwQzYzMDAwRkY2NDBGMTAwRkJFMDMxNDdEMTlFQzk2M0RGMEJFOTEwMAorOjEwQzY0MDAwRTExRDkyM0Q0MTU2RDZGM0Y3REZERDQ1OUREQzFCNkNDNQorOjEwQzY1MDAwMkQ3NjFEOTRDMDU4MDlERjU1QjlBQzhGNDREMzUyODc0RAorOjEwQzY2MDAwQUY3RkJFOUQ0NDU5RkUwNDVCRkZGNUVENEFDRjE2ODNCNAorOjEwQzY3MDAwMURCRjU0ODg4RjU5RTM1MUFGRDQ3MTNDMDlCOUIxOTRBRgorOjEwQzY4MDAwRTM4QkYyRjlFNjdDQkFGRTY1Q0UxNkI0MUI5NzEzQTZDRgorOjEwQzY5MDAwRDc2RjI0MTE4QzZGREM2OEUxRjMzNUVFM0ZCRjY1QjNEMworOjEwQzZBMDAwNDExQ0NEQ0NDRjZCRTk3MkQ4RjlGQUUwQzNCRkEzRjAzRgorOjEwQzZCMDAwNkY3Q0MwRTMwNUZEQkZCNkQ3RENBRUYxODE5NzhGMzA0QworOjEwQzZDMDAwRkJDQkNDRUY4RDgyREYyMzY2N0VBNzA2MDVFM0Y3RkI2RAorOjEwQzZEMDAwQ0ZDMzczMUI3MTNGRDBFNTFDN0M0QjI3QjFGRDBFRTkyNgorOjEwQzZFMDAwN0QwQkZGQjlFMEJFNjAzMUY4MzUzNjk2QTdDOENCNjI0NgorOjEwQzZGMDAwREU0RkJCOTk1RUQ2QTk1RUU2N0UxMDhBREM0RkZCMkYyQgorOjEwQzcwMDAwQzE3Q0Y4NTJBMTQ3Qjk5QzExRkM1Q0NBRjVGQzMwM0RENAorOjEwQzcxMDAwNUU2QkY1NzdFRTQzM0U5OUNBNEI1NkZEMkRGNEI2QjhFNQorOjEwQzcyMDAwODc0OEM3NDVGRDRERjVGNUNCMUE1RDZGOUZDRDFEMDFCRgorOjEwQzczMDAwNzhDN0Y0NzYwNEY5Njg4QTkzQ0E2QjFCRTJFRjAwRTBDRAorOjEwQzc0MDAwNkYxQUM3NUIzQkQ3RUIwOUZEMDNGN0ZBQjhGRTAxRjU5QgorOjEwQzc1MDAwMzdGMDFDNjFCODVGMTAzNUQ5RkJDM0NFMzExMkQ4RkY1QQorOjEwQzc2MDAwNDM3ODczNTE3QjJBMDVGQzdEQzJFQ0UyM0MzMkFBM0M0MworOjEwQzc3MDAwMTEyQUI3REZDQzFGNDE2RjJCQ0ZCMERGMDc3N0I4MzA1RQorOjEwQzc4MDAwQkUyMEUyRUM4MkZGNUUyRjYwNzZGOEI2NUNFRDNEOTA1NQorOjEwQzc5MDAwRkZGRDdDQkU3RTNFN0VGRkNERjNGMUZDRkJDRjQ0QzNBQworOjEwQzdBMDAwRjM2RkM4NjdDQThGOTM3RjAxRTdERjFEODY3ODY5N0ZDMworOjEwQzdCMDAwN0FGQzM4RjgyNzVDRkU5NDE2MTBGQ0ZFQzlBRjdEMEE5RgorOjEwQzdDMDAwRUIzRkE2QjAzOEZCQjE2NEZFNEQ2NUU3MTRGRjNCRDRFOAorOjEwQzdEMDAwOUVDOThGNENGRTE1RUY5MTFGQ0IzMEM3RTc0NTNCM0ZGRAorOjEwQzdFMDAwRkZCRURGRUEwQzc1MThFMkUxODFGQjkzNUE0MDhGRjkzNgorOjEwQzdGMDAwOEI3ODVFRkM3QTQ2QzcyNzlGNEFERjYxN0MyNzJFNTBFNAorOjEwQzgwMDAwNTA1OTVBMzAwRERBNjk0QTJFQzQ2NzlFNjJGQUEyRDk4RAorOjEwQzgxMDAwM0VBMEMwRkIzRTNFN0YzOEE1QzAwRkY3OUI4OEY2MDRDNAorOjEwQzgyMDAwOEMxMzE4NTA5NjUwNzg5RkU0RTdGRTI3Rjk3QjQwMjczOQorOjEwQzgzMDAwNURFQzJCRDYxNTI4NTg1NDBBRkQ0RURFM0M4MDcyNjMwMQorOjEwQzg0MDAwQThCQzY4MDBFNTQyQTAyMDg0RjM5RTVDMkFFQTc5RjkzRQorOjEwQzg1MDAwNkU1NjI2RENBRkFDRTQ3QzgyNzFFMzM4NzFFMkUxNzFBNAorOjEwQzg2MDAwNjFGMzdCMzdFQjk0RjhFN0Q1QTRDMDYzOEFGN0FFRDhDMQorOjEwQzg3MDAwQ0ZFMjkwMkI5REE0MzM5RkQ2NUZCRDNGMUJGRDhEQzY5RAorOjEwQzg4MDAwNTQ3RDAyRDBDM0Q3OERFMzlFMUNEMzg3RkJEQTUyMzk4NworOjEwQzg5MDAwMzhGNkMxMzIzQzE3QzY3OEQxREFGRENGQTFGQzVCMkI0QworOjEwQzhBMDAwRjg2NkFGOTk2RjY2MTc4Q0VFM0NDNTFBNjcxRjA1M0Y5NworOjEwQzhCMDAwQ0QyRjE4QzEwRTdBMTJGNDk3MjM4Njg3NUI3ODdFNTNBQQorOjEwQzhDMDAwOEREQzU0MEQ3MUE1NEY1NzEzQkM2NzdCQ0IwQjMyRDI1NworOjEwQzhEMDAwRDUyRDNGOTJGMEREMDk2MUM3QURFNTcwNEVCNDJGQjg5QworOjEwQzhFMDAwQTcxMDMwQzgxNUI4QTcxMDMwRjg3NTcwNEZDMTU4ODYxQQorOjEwQzhGMDAwN0IwQUM2RjY3MDRGQzE1ODBGRjcxNDhDRjU3MDRGQzEwNAorOjEwQzkwMDAwNTgyRTI1RDdCNjQzOUM2RTVEMTdGMTQ2MDJFQ0RFODJBOQorOjEwQzkxMDAwQjEzRkRDNUIzMDk2RTFERTgyQjEzRkRDNUIzMDk2M0ZCRAorOjEwQzkyMDAwMjUwQzZFOUYzRTI0NjNGQzFGRUUyRjE4RkJERkYwQzIyOAorOjEwQzkzMDAwOEZDQkEzQjA2RDE3Q0I1MzZCNzc1MUY4MDMxREVBNUExOQorOjEwQzk0MDAwREYyNDBBOUZENTFDM0U3MEJGQzEzOEVFMDdBOTE3M0RGMgorOjEwQzk1MDAwMEZGODU5REQ3N0ZENDJGODVFQjBFRjI2RDNCOEE0OUJGRgorOjEwQzk2MDAwQzlFMzE2RkExN0UwNzgzRDA5QTU4MTNGMzc4NTBDMUUwQgorOjEwQzk3MDAwODI3ODQ3NzM0NDUyNjFERTFCMUUzMENCRURBMUY3NEMyOQorOjEwQzk4MDAwMjJFNkRGRDcxMDQzRkMzNzM4M0NFRUJGQTVDMEUzNDNCNworOjEwQzk5MDAwQkFDQTIzNzlDNjc4NEY4QzFFREM2QTE0RTBGMDlBQUNEMAorOjEwQzlBMDAwQzZBMzg3NTI3MjZFMUFDNjc5OUU5NzIxODY0MUZFNDhBOQorOjEwQzlCMDAwNUFCNkNGOTIwQ0U3MDMxNjc4MjRFNTk4RTlDMjE1MzBGMQorOjEwQzlDMDAwRDM0NTRBQjE5OTJFM0NBQTk5MkVEMjJBQ0M3NDkxQUU2NQorOjEwQzlEMDAwOUQzNzIyN0MzMzZCQ0Q3NEIyNDY2RTQyQkUxNzcwQUU2QgorOjEwQzlFMDAwQTA3RjAxQ0U1M0UwODU0QTgwMkZERDI3QzQ4QkFERjBCOAorOjEwQzlGMDAwNkREQ0JGQUQxM0VDRkUzMzg1RUY5MzE2Rjg3RTQ2NjYxMworOjEwQ0EwMDAwNTVCQjAzNTg1REU3MkM4RkQ5MzE2NUNGQjdFMDIxQjAxNgorOjEwQ0ExMDAwMzU3RTJBRTAyOEVDMDgxMTA3QTVGQTFGRURFOTk4NUY5QQorOjEwQ0EyMDAwQ0ZGQzNENkExRjFDMkNDMEYzMDNFNkU3MDEyNTgxREMyNworOjEwQ0EzMDAwQkM4RTg0NTEzRTVENjdCMTBGNkU3MERGQTc4MDdEMzA4NAorOjEwQ0E0MDAwNkNCRkQ0MzI4M0Y3MEJBREZCMDU3QjhCMThFMjUyNTZEQgorOjEwQ0E1MDAwRkI0MERBMkY0NTNEOTM2MUJCRkI4NTlDMEU3Rjg5QzY2OQorOjEwQ0E2MDAwOTAyNjhENDY2RUY0N0FCNEZGMDJCOTA1OEVBMkIzREMyRgorOjEwQ0E3MDAwMTQzNzhFNkJGNzg5NzUwOEI4ODhGOTkzNDg4QjlDMDMzNworOjEwQ0E4MDAwRjQ1QzZDQjVDRkNDRkVCNUYwQzc0NUJDNURDNEI1ODVENAorOjEwQ0E5MDAwM0YyREZDMTgyQjlDRTU3MzgyRUQ0MEZGNTNCREMyOEZFOAorOjEwQ0FBMDAwRUVCQjBBN0UxN0ZFQjNENTZGMURCQTE3MDA5MDg1N0JDQgorOjEwQ0FCMDAwMzczQzRFN0ZBNzdGOTU5M0JEQ0JDN0Y4NEVGQ0RFRTk5MAorOjEwQ0FDMDAwNUI5QzM2NTIzRUU2MURBREU2N0IzMDc0MUJEQTg4Rjc4MAorOjEwQ0FEMDAwOEEwMDY0NTk3MEVFNDQyMEE4NDJCNjVFN0E2ODAwREU4RgorOjEwQ0FFMDAwREFEOTdBRDk4QjgzQ0ZEMkVGOTY5MjFGMEM2QzgyQkFBNworOjEwQ0FGMDAwNTM1RkNBMDBEN0ExNzgzRTYxRjc4NDE1REU0RjI5RTg1RAorOjEwQ0IwMDAwQkMxOUY0NjhCMjZBMjdFRjFBRThDMjQ5MzVENUJCQzUyQgorOjEwQ0IxMDAwN0M1RUQwMTMzOTQzRjVCRjMxOUVFQkZGQTNCRTc3NTE0NgorOjEwQ0IyMDAwRjhCQzNCN0U4NDdBNDU2RDhDNjdENzU5RTEyNTlFQzM1RQorOjEwQ0IzMDAwNzA0REJBRTgzOEQ4MjcyRTYyRDgzN0VBNDM0MzU5OEU2OQorOjEwQ0I0MDAwQzEwQjU1QUI4Q0Y3QTY0NEJEMDZFRjk3N0NERDdEMDE4QworOjEwQ0I1MDAwREVERjc1MThDQkQxNTdERTc3MThENzFGNjE3OTA1RjY2MAorOjEwQ0I2MDAwMTA4MUZDNUJDNTQ3RUI4REZBNjU4ODBFMjk0Mzk1MUI0OAorOjEwQ0I3MDAwRjYzNzhBN0QwMUQzODBGQkM5RUMxMjg2RUZCRkQ1QkVBNAorOjEwQ0I4MDAwM0EyQ0Y4ODI3MTQzNTk2N0Y1RkFGNEIzN0M3REQxQjMzRQorOjEwQ0I5MDAwMUNCRjY0RDFEOTBEM0Y2REQxRDkwRDNGRkQyQzVGNUYxNgorOjEwQ0JBMDAwRjQyQ0M3MkY1OTdDNzZBRjRGNUI3Qzc2RTM1NzNGQ0I5NQorOjEwQ0JCMDAwRDcxNzNEQ0JGMTRCOTY5Q0RERjBEMzk2OUNEREYwRDM5RgorOjEwQ0JDMDAwQ0ZGMkY1NDVDRjZFRkNFQTY4MDdCQTJCQTIwNERFOTdEOAorOjEwQ0JEMDAwMDg3NDEwMzUxOEEwMjYyQkZEMTlGQ0Y5MjI5NTYwOUVDQgorOjEwQ0JFMDAwMDZFMTdFNDkyMUY3NEJCNjZENkRBOTA3MTdFQTExNUQ4NQorOjEwQ0JGMDAwMDk2MDNDODhGQUY3MzlCNDdFMjI2MUY1OEY3NDJEQzYzRQorOjEwQ0MwMDAwMzg2QkRCOTgwOTc5RjA1RTk1QkJFQkEyRTM3MDdGNkYyMAorOjEwQ0MxMDAwQTJDRUZDNzFFQkJGMUJCNjQ4MzNGRkZCNkI5NzU3NjQ4QQorOjEwQ0MyMDAwOUFDQUQzRkFDQ0VGNTc1Q0Q1NTg2NEFBNUYxRTNFREY5MAorOjEwQ0MzMDAwRjJFRkU3NEQzNUZGQkI2NEExOTk5NkY3MjA2RTI2QzY0QgorOjEwQ0M0MDAwN0I5MTg1MjRBQTQyN0NBNUYwNkU1QjE1OUM5QkQ5QzE4MworOjEwQ0M1MDAwNjdCRTkwRkVCNzUzQzE3RTFBRkQ2QkY0NUYwQUE5MjcyOQorOjEwQ0M2MDAwMzQzNDdFMTBFMEE2OThDNjc3NUJFQUNGRjQxRUVBRkU2NQorOjEwQ0M3MDAwQjFGMUVGQTExMjc4NjQzMkNFQkQ3MzZCMUUyNkIxREYyNQorOjEwQ0M4MDAwODhGMTM5ODFBRjNCMzdEQkQwRTVGRDZDMkJDMTc3MUVENgorOjEwQ0M5MDAwQUIyMzAxMUJCRTgzQ0VGMTc2M0UyNzNEQjFFRjQ4QUJGRgorOjEwQ0NBMDAwRjkzRTdBQTE0RUFBMDA5RjQ1MURDNDA2RjFCNUUwNEU5QgorOjEwQ0NCMDAwQTI2QTA0RTM0MjQ4Mjc4RkU4RjFFOUU0MTFFMkFEODI3OQorOjEwQ0NDMDAwNzdCOTFFODkxMEZDNzdCMjA0NUREQ0U5MDhFNEMxQjlDQworOjEwQ0NEMDAwREFGOTVEOEMxRTA0OUQwNDgwNEU1MjIxMkZDOEZBRUVCNQorOjEwQ0NFMDAwODAxNTVGNjQ0QTk0QUVGNTkxQUQ4NTE5QzY3QzU0QjI0NworOjEwQ0NGMDAwOUJDMURENDlGRjhFODRBRkUyOUQ2NjdDMDU4OEExRkM2NworOjEwQ0QwMDAwMTVGMEY1RTlEN0M0OTdFMjBCNDVEMzdDMTBDRjI0MDE4OQorOjEwQ0QxMDAwQzg5MzNBMzg2NjgyMERFMDExRUM1MkQxRkZBRkE1Q0QzMQorOjEwQ0QyMDAwMDBDRUMxMkVGNjlFOUFDMDkzMTg2RjZCMkI4OUNFMzMxRQorOjEwQ0QzMDAwRjg3RjQxMzVBQTAxOUM2QkU0NDk1NTkwN0ZCRUEzMEM1NgorOjEwQ0Q0MDAwNDNDNkMzRjBCMzgzNzg5MzIxRUVCREEzQ0I5NjhDNkYxQgorOjEwQ0Q1MDAwNTRFRkEzNzgyOTIxRTRCRjM3MkY0QjJCQTZGNTNENDE5MworOjEwQ0Q2MDAwOTIwQ0VGNkNGNUI0RDlGMEREQjI5RUE3QTQ3QUYzQkJCOAorOjEwQ0Q3MDAwQ0FEMTI0NUIwRUVFMjNDOTU2ODE1RjNCRkI2QUZDNEI5NAorOjEwQ0Q4MDAwRUNBQzNFMkE0Mzc5RUNDNjYxRUY3RUM4NTA5RjVFNkJFNworOjEwQ0Q5MDAwRjk3NzAzODkyNjQxRkJFNDczNTgxRTY3OUE2NjdFQ0ZCNAorOjEwQ0RBMDAwQzY1MTYxOTYwNzE0OEM3RDM5RTUxMDZGRTFGNENFREYzMgorOjEwQ0RCMDAwNDk4REQ0OTBDODI2QkFFRTczQjhEQ0IxRDI1MUZBMURCMQorOjEwQ0RDMDAwOEI5MTk4REFDNjdDMDNFNTU5NEY5QjgyRjA3NzcwNzk5NgorOjEwQ0REMDAwNDUzNjMyQkFEMEU5NUZBMEE3NzQwQjFENzk1NDMzMURENAorOjEwQ0RFMDAwMzlFNDAyQ0NDMzE1N0MyNUQ2MjNFNjZGMUI5Mzk1NkNFMgorOjEwQ0RGMDAwQzc3NUQ5RjEzRDZDODc1NTRFNThENkU3ODY2MDIwQzU3QQorOjEwQ0UwMDAwOUREQjQ3MjIxMTVBRUZEMDE5N0YxMEI5MUY3Rjc3NEM1NQorOjEwQ0UxMDAwMjcyNDMzRjgxNUQ2RjkzNUU1NTNFODlDQkY4RDdDRjIwRAorOjEwQ0UyMDAwRjAzMUVGOUNDNkY2Rjk5OUNBREVCNUFFRUU2MEY0RUVDRAorOjEwQ0UzMDAwRDlDQUU4MUQ2RTc0QjM3QzJENkQ2MUFFRTE1Qzc1MkZBRgorOjEwQ0U0MDAwOTc1MzU2Qjg3OUZBQjQ2QUEwRTc4QkU0OTczNEM4OEY0MQorOjEwQ0U1MDAwQjhGQjM1NDZGRjZENjMwRTNGMEZFNUFENzczM0Y4MDczRQorOjEwQ0U2MDAwNTU4NjY3NEEyRjZBOTQyRUZERUUzQkRDOTgxNzNDQjUzOQorOjEwQ0U3MDAwOENFMjBCRjBGRjkyNTk5RTRDRUIzM0MzQjFDODIyMzdDMgorOjEwQ0U4MDAwODIwOUUwNkFFNUQ3NDQ3MEZEOTY4MDZCMzk4NTZCRDFFNQorOjEwQ0U5MDAwOTlDMzU1RDE5OTdDNEU5RkM1REU1OTNDMzg0NjYxRkZGOAorOjEwQ0VBMDAwM0VBRkNFRTA5OEFFQTkyODdGMkY5MjRGNDVEMzY4QkIwNgorOjEwQ0VCMDAwNkQxQTk1Mzc3NDlEQjUxQTgzQjc3Nzk2OTBFMzY2NzhBNworOjEwQ0VDMDAwMEFGOTIyRTA1RkM4RTFFRjU1QkQyRkMwQkZGM0UyRDZGQgorOjEwQ0VEMDAwRUQyNDIwMDE3Q0ZGNUIwMzNCQTI3QjlBOTAzNzgzMDQwNworOjEwQ0VFMDAwRjA5NkE2MzFCQTE1NzBFRTlFQ0RFMDVDQTg3MTM4Nzc0OQorOjEwQ0VGMDAwNzFCODQ5NDQwMjM4NUJFOUQ1MkE5RkQzQkUyNjlDNzc5NgorOjEwQ0YwMDAwOURDM0UzRjE1OUE0RkNBQkMwNzk1QjBBN0I0N0Q5MzFERgorOjEwQ0YxMDAwOEVDMUQ1RTExRThDODI5Q0VEMEFEQTcxNUYwNzgyMEExMAorOjEwQ0YyMDAwRDY3Nzk1QjBGQUZCNTM1NkU2ODBCRUVERjI3N0U2MDA3MQorOjEwQ0YzMDAwNURCNjA1QUZDRjAxRjlFRUNBRTE3Mjg2NjhFRURDRjJBQworOjEwQ0Y0MDAwRDhCRDgzMUE3OTJCQkU0M0RBMTk1MDEwM0Y5RTQwN0MxRQorOjEwQ0Y1MDAwRjk5NTM2MkJFQ0M0NzkyNkQ5ODk4QzcwNzg0ODhEMDdFMQorOjEwQ0Y2MDAwMDc2Nzk5NjI5Mjk3Rjk4RDY2RjhBNjU4RTBFQkZBOUFFRQorOjEwQ0Y3MDAwRjJFMUI1QUYyOTFGRUUyMTZDRkQ3NzhFMTdFRjM0NzQwNworOjEwQ0Y4MDAwM0I1MTNGNTVEQzg0NzFGMzRDM0VEN0U2ODVERjY1QkZFRQorOjEwQ0Y5MDAwNzNCRDY2RjhCREI2MTBFNDg5REJBRTAyM0MxM0FEQkJEMQorOjEwQ0ZBMDAwQTc5NUYwRjc1QTlDRkNGRDE2RjZBRUNCMzY3OEQ3ODVFMAorOjEwQ0ZCMDAwOTZCRjAzRUZCQTI0MDFGREIzNzc1REI2QzBCQjJFRjQ3NAorOjEwQ0ZDMDAwREIwNUVGQkE5QzBCRjZCNDg2NUZGOUQyNDI3QzdGRjBBQQorOjEwQ0ZEMDAwQjM1QTgyRjFGMTREMjk3RjI1RjFFMDU1RDQ2NUQ2N0YxMgorOjEwQ0ZFMDAwNDEzREQ5RjIwRTlCNTlDRjY1Q0NDQjMzOTVCREIzQ0MyNworOjEwQ0ZGMDAwRUZCNjc5NTRGNjZFREJGRjAxNjQ2ODAzNDAwMDgwMDBGMQorOjEwRDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkREN0QwOQorOjEwRDAxMDAwMEI3ODU0QzVEOUYwOUMzRDY3MzdCQkM5NjZCM0I5OTI0QworOjEwRDAyMDAwNDAxMjRFNDIwODFCMDg2MTgxMDQ4MzgyOUU4NDQwNjM0MworOjEwRDAzMDAwNEQ3MTQzNTE1MUE4OEQ0MDMxNDI0ODI4NUUxQTdGRjUwOQorOjEwRDA0MDAwQzk0MjgyODQxODM0QTA1ODVBMkYyQzM3OEJCNTZBQjQ0MQorOjEwRDA1MDAwNTFBOTIyREQyMDUyRkFENTk2NDU1MUYxNTJCRkY1NTIyMQorOjEwRDA2MDAwMkY0MDI1OEExNzdDM0U1QkZGNzlERjk5RDkzREU3NjQyNQorOjEwRDA3MDAwMTNDMEUyRkZGOEZERjFDMUM5OUM5OTMzNjdFNkJEQkY1QgorOjEwRDA4MDAwRUZCQzMzMjE4NDkwNkZFOEJGMDRDRjA0MTJGNDEwRkM4RQorOjEwRDA5MDAwODFCQTQzM0Q5NzA0RUREMUZBMjNDM0VCMUM2QTNBMjFEMAorOjEwRDBBMDAwNTY3N0E1RTEzOUYxRjcxMTVGMjI1NjJEMjQ4MzkwNTQ2QworOjEwRDBCMDAwREUzNjVEQkVENzFFMkUyNjY0NERDREFDMjQ1MjBDRkQ0RgorOjEwRDBDMDAwQjQ1MDI2NkQ0RjgwNDY5NTkwRDU1NjZGOTY4RjNFNEY0MworOjEwRDBEMDAwQTg1OTU0NDM1Qzg0QUM2QTIxMjQzODhBOTBGNjE2M0JFNAorOjEwRDBFMDAwOTYyQjcyNkNERTYwMUEyMTc3QkUyQzdCRTNFODJCMzYyMAorOjEwRDBGMDAwQ0RBN0I5NjlGRkRFOUM1QjA5QTFDRkQ3QjgwOTE5OTIwQQorOjEwRDEwMDAwNDc5RkJCOTcxMTkyNEY4ODQyM0YyMEQxQkE1MjMzRTNEOQorOjEwRDExMDAwMjM1MjQyNUY5OEIzODQ5MDQ5RDFGOUFDQTlCMTc4ODM4NgorOjEwRDEyMDAwQTU4NEM0MjUzQkJERjA3RDUyQUNCQzEzQTY2RDZFRkE0MAorOjEwRDEzMDAwREYzN0Y0RkQ2RkUwRTc4MjY4MTk0NzU4M0JBRTEzQkU1NgorOjEwRDE0MDAwQTNFQUVBMDRCRTY3NkM2RjdFNTM3QTc0QUZBRTdEQUMxRgorOjEwRDE1MDAwOUE5OEY2M0UyQ0Y2MUM3MkNFMzczMjJERTU3OTQ5NzUzOQorOjEwRDE2MDAwNEU1QTk2QTcxMDkyRDVGRjdCNUZCNjkwNDdGNzhFNDQzNAorOjEwRDE3MDAwODAxMjkyMEU2NTNEMDE3ODJBN0NDQ0Q1QzlCM0VDQzRFRgorOjEwRDE4MDAwMTk4NUIzNzhCRUNBQ0RFMDFCMjdEMUNBRTRGRUUzQjY0OQorOjEwRDE5MDAwMDE1Q0UzQTI3NTg1MTBBRDFCRjA5MTVEMUFCM0JGMjg0OQorOjEwRDFBMDAwMjkwNjA4MjkyM0E0QjMyNTc4RjAzRDZCRjRCOTczMEE0NgorOjEwRDFCMDAwN0RERkQ5QkZGRjRDNTVDNjc5Q0Y1NTU1MkM5RDRBOTA4MAorOjEwRDFDMDAwQjg2OUJGNDQyRjdENUYwNzE3QTc3NjY2REZBNzNGQTUyNQorOjEwRDFEMDAwNjk3NEJEMkU0RTM3RTQ3NzkyMDI3OEI1RjM3QTgyNTRBMworOjEwRDFFMDAwMzc1NzJEMDM3Q0Y5MDgxOTQxRkI5NTZCQTRBRTk4N0Q0OAorOjEwRDFGMDAwNEYxM0VGNDk1MDJBRTQxRDQxREY3OUFDNzREMzc2MDYxMgorOjEwRDIwMDAwNTIyODY5QkJEREQ4QUU2NjIwQkM3MDVDMjVGQUJFRjYzQworOjEwRDIxMDAwOEQzNEYwQkNCRkFCMTJGMEY4Q0VDODQxREE2RERFN0FDNworOjEwRDIyMDAwRTBBNzdFQ0Y1NThCODA2MzVGMUE4NTlCQ0NENzFCMDMwRAorOjEwRDIzMDAwOEU2REMwREYwMjhFQjI5M0MxQjE0RENBREIxOUE2RkM2MAorOjEwRDI0MDAwNjZENTVDNUU4QTExNTI5MUE2NzYwMzVGQjY2OTRFRTQ5QworOjEwRDI1MDAwQ0JCNkI0RUU1MDI1QUQ5RjI4QjU3ODYxQThDNDkxOTVBMgorOjEwRDI2MDAwQzg4RjZENDNGNzFENUUwODcwOURCOUZGQzM2RDA4MzUwQgorOjEwRDI3MDAwMkQ1NDI1RTA0QkRCMTMzREQ1QTEyQTlEQkMxMUY4OEEyNgorOjEwRDI4MDAwRTdCRjc3OEM3RDIwQkM5Mjk2QTkxN0NGMjM2RTRBMkFFMAorOjEwRDI5MDAwQ0UyMTM2MjI1M0JDMzg0NjU2RDlFQjlDNTFGQ0Q4RTBGRgorOjEwRDJBMDAwMTdGQTNDM0U2REM2NDczMkU1RkI3OEFGMEU4RkYwRUZDNAorOjEwRDJCMDAwMUI1NjQ3NzhEMEM1REJCMjZGRkRCOTA0NDQ5MTE5RTkxQworOjEwRDJDMDAwNzcwMEU2QTNBOEJFRThGQ0M4RDlDNzE3Qzk0RTQzQkU3RAorOjEwRDJEMDAwMjc4QTM3MTNFNDY1N0Y3QUY3MzNCRUU3RkQwNkU2MEI0RQorOjEwRDJFMDAwRDY2RkJBNUM5Mzc5MTU4NUNCOUExNzk4N0MyNDFFMjY0NQorOjEwRDJGMDAwMTc2Qzc2ODZDRjM1NDQ2M0VERDk4QTk3QkU0MUQ2NjRFNAorOjEwRDMwMDAwQUU0NEY5RDFBRUNFNkYwN0Y5Rjk3OUE2ODVDODEyM0NDMworOjEwRDMxMDAwNUY2RjA3RjlBMTk4RTQ0N0JBQ0Y2MkQwMDc0M0U2QzQyQworOjEwRDMyMDAwMUJFNEZFOUE4MjU5MjhDRjA2OUE2NzU2OURGMUZENjE0QgorOjEwRDMzMDAwRjVDNkY3NzM5NkE1MThFQUUyM0Q2QkU2NDUyRjU1QTVBRAorOjEwRDM0MDAwNDZFQkFCOTQzQTNCQzg5MTVCMzNENzRCNzUzQUZBMUUyOAorOjEwRDM1MDAwNTI1NEY3M0FEMEFCQThEQjMyNjdFMjdCNzEzOUE1MzE4MgorOjEwRDM2MDAwRTdCNUNGQTNCRDA1NzJBMjVENjVGMzI2RUVEODcwQkUwQQorOjEwRDM3MDAwOEJFQkExQkJCOTFFM0FENTNBMzdGMkZFQkZFNkZERUYwMworOjEwRDM4MDAwNkQ3MTYzMTlDMTY3QzEzNTA2QkNBQ0NFQTJGMjlBOEUyRAorOjEwRDM5MDAwMDdCMEQ3N0ZGRjI5QjVFRTczOTg1RjE0Q0Y5NjI4N0MyRQorOjEwRDNBMDAwODA2OThCMTc1QjgwNUZDNTM4NkQ1OUY5MEVDMERCRkE1OQorOjEwRDNCMDAwRUFDMUU3MjdGNEFBRTg2NzU1N0NDNDRCREZCMzEyQTNBMAorOjEwRDNDMDAwMUNCN0E1NTkwQ0Y4OTg5MEM3RTVDNkI2NkIwQ0RGREQwNQorOjEwRDNEMDAwOUIzQzYzNjMxRUE1QUJGNTg3NjQ4Mjc0RjczQkUzRkE1RAorOjEwRDNFMDAwRkFEM0FCNzExREVCMzNEOUZBMDdBNjZGRDNCQUE5NDRCMAorOjEwRDNGMDAwODhEMDExRDY1MzRDRjVBMUE2RkVGOUE2RjZEMUE2RjYxMworOjEwRDQwMDAwMDlBNkZBQjlBNkZFOTVBNkZBMEY0REZENjc5OUVBNTc0NworOjEwRDQxMDAwOThGQUNGMzdCNTJGMzZCNTJGMzdENUZGOEZCMTdGMjk4MworOjEwRDQyMDAwQzNGM0Y1RTJEOTIwRjIwNUY0QkFCOUJGQTI2ODg4NUY2OAorOjEwRDQzMDAwQTFFNzIzN0NFNTM2RjJFMzBGNzIyQUI0M0M2NjY3MTg1NQorOjEwRDQ0MDAwRjAyQkU4RjM3NEYxQjM5QUNBQjgxMEYwOTNBMjNBNTBGMworOjEwRDQ1MDAwOTk5NjJGMjY3QTdBNTg5Rjk5OEZGQUEzOEQ0RTBCRjVCRAorOjEwRDQ2MDAwMzdCNzVGNTIwNDFENTc3M0ZCNzBDRTEyMDMxREY1RTZFQworOjEwRDQ3MDAwMTQzQUMwN0UyNENFMzQ5NDRCQTdBMjBCODlBNDE4REJBNworOjEwRDQ4MDAwQjVBMUQxRjY3Q0Y4RkZEOUE1OEI1M0QzNzE4MEVCREQyNAorOjEwRDQ5MDAwQzFFNzJERTRDMDIzQzM3REQ3MjIzRTAyRDQ5RTFFMUJDQworOjEwRDRBMDAwODU5MzFBQjFBN0U5QzcyOERGNkQ0OTIzODEzOEFBRUYxMAorOjEwRDRCMDAwQjZGODJENThGRjNDOTM3RTA4RUM5NTJBQzY4NzIzNzg1MgorOjEwRDRDMDAwN0Y0MkMyMTI4QzIzRTZEM0NFRTk2NTFEQzgyOTVBREVGRAorOjEwRDREMDAwMDE3MjhBOTZCN0I1NjQ2MkI5N0FBRDI1NkIyMThDNTcxMworOjEwRDRFMDAwNjM0MzNDQTU4RUJCRDVBRjQwNTk1OTVFMDRGQUZCQjZFOQorOjEwRDRGMDAwQjEzQjM0MEJBRDI3OUU5NDQ5NzAyMkI1MTc0QUFFMjgzNAorOjEwRDUwMDAwODdFNTI0NEM5RjlGQjkxNzNFRjczNUZEQ0UyNEUwNEVBQQorOjEwRDUxMDAwODI0NkM2RTYyQTEyQjA4RTIzNjRFRDlFQUMxRjdBRThERQorOjEwRDUyMDAwQjg2QTgxRTI3NTQwNUJCMTc3ODU5Mjg2RkRGQ0UwMzY5MgorOjEwRDUzMDAwQTg0QURGRkUxMUI0M0VCQ0MwODJGNjg1QjVCQ0FGMDU3QgorOjEwRDU0MDAwRUM3NzMxRUZCNTNGQTQ4NDRCM0JFNjU1N0IyRDdFMEE0QgorOjEwRDU1MDAwODIxNUMzRUI3RTA1NzAxQURFNDkyQzFBQURBQjdFNTVFMQorOjEwRDU2MDAwMDJCOUY2NDY5RThBRjI3NkVCMUYyODQzOEU4MDBGRjVBRAorOjEwRDU3MDAwNjU4MTlFRkQ2MkFENkQyNUNDNzM2MDNDMTFEOTUyRkU3NAorOjEwRDU4MDAwRUQ0QjMxMEVEQTk5NDNGMUI5MDZGNEFDMkE0ODQyNzRGNgorOjEwRDU5MDAwOTUxRjc2QzEzQzlEMzJBQjNGOTc3N0NDQjdCMjM4NUFENgorOjEwRDVBMDAwN0YyQ0VGOTg3QjI1NkRFRjlDOTg2QjgxNzVFNEE1Qjk3NgorOjEwRDVCMDAwQjQ0MDBDQkEzQTBDRjIxOEQ2Qjc3NkQxNzBCRDFFMzQwRQorOjEwRDVDMDAwOTc2QTBEMUQ3NzA4MkQ4Qjc5MDlCNDc2MEVDMDlGOTc0OQorOjEwRDVEMDAwMkE3RjlFQzlFQTA3MzhEQ0Q0NjZERTlFQzZDQUIzRkQ0MAorOjEwRDVFMDAwMURGM0Y4QUZFNUI5ODU1RDNBOTRGQjhGQzVDRThDNDE0QworOjEwRDVGMDAwRUREM0MzNzk2NUZERUQ1MzJBRTg4NjAyOUQ2RkIyN0FCQgorOjEwRDYwMDAwODc1QUU4RDg5QkQ2REE4ODlGRjJENEE2MUM4MjdFQTJERAorOjEwRDYxMDAwN0Y4RDJEQjAxREY4NDM1MTg3NUVBQUIzQkIwMjZCMzJEQworOjEwRDYyMDAwQUVEMEU4RkIwMTg5Q0NEMUNCQzk3QjM5OUNFRkNBOTczRQorOjEwRDYzMDAwNzA3RUQzRTU2MzdFOTlEMkVGMjYzRjQxM0I2QjEzNzEzOQorOjEwRDY0MDAwM0JDMDFFODlFMERCRkZCOTBGRTk5MEUzQkIyQUJGNkE0QworOjEwRDY1MDAwMUREMDI5NTlDOEY0NjY3RTU0OUVBRDUwRTgzODlCNjFCMAorOjEwRDY2MDAwMUM1QURGREM2RUMxRjk2RERBNDVGOTk3N0VFQUYzOUI0RgorOjEwRDY3MDAwREZCMTgwREQzQzk2MDQyREIwQkUzMTI0ODBBNTg3MkMxRgorOjEwRDY4MDAwQjMwMDUwQkFCOTFFREZDNkY5Qjc5MEYyMzdGQTNCMjBBMworOjEwRDY5MDAwRkE2OEZCQTVDM0VCQkUwNkJFNDgyMjJBRDY1NUJGMUJCRgorOjEwRDZBMDAwRTlBOTcxNTc3MjY1MkNGQkMwOTY2RkUxN0UyNkE5NTdEOAorOjEwRDZCMDAwMjY3MTNGODdDMUQ5OTY1RkQ2MUZGRTU2QjIwQ0UxN0UxOAorOjEwRDZDMDAwOTNDNzY3Q0YwN0ZGNkVFN0MxRTAzMERBRjRDNEFCNDYxQgorOjEwRDZEMDAwQkEwNUE4Q0NEMkM5OUQxQ0ZFOUQyNEFGNEY5M0U5Mzg1MgorOjEwRDZFMDAwN0I3MkVCOTJFMUZEQzZGQTRGRjY2NUMwRDA3RTNGQkU3RAorOjEwRDZGMDAwM0YzOURGOERGREFFMDg3NjRGODc2MUM2NzlDMzk1NDAwRgorOjEwRDcwMDAwMEI2M0FCN0JGNzAwQzk4Q0QxMzY4MzlCNDEzQ0U1M0Y3MworOjEwRDcxMDAwREY5M0FBQzIzQ0VBODZDMjM4ODVBMTcwMDU5MDhGQjMxOAorOjEwRDcyMDAwRkU2MDMwMDNFNzczQkUwNUU4NjIwNENDODdEMzQ3MkQ2MworOjEwRDczMDAwRDI5NzhBNzQyMkYwMERGNDUwNEJFQjU3MzQzMEY4NTBFNgorOjEwRDc0MDAwODMxMERCODlFMjM2Q0M3RkNCMkE0QTI3Q0VGRTc0OTI0NworOjEwRDc1MDAwOUFDRkVDMjM2RjE0OEVDNDNBQjg3RkU1Q0Q4RjQxQkZDQQorOjEwRDc2MDAwMDIyRUIzN0FCQzU2MDgxN0Y4N0VFNzVFMDUzRUQwQ0M5MQorOjEwRDc3MDAwNDBERjVFMDc3RERFOUU1Qjc3MEVBQ0IzNzRBM0FGMTUxMgorOjEwRDc4MDAwRThDRkI5MkJFNDg3N0UwMjRFQ0UyOTIxNERDMjdFREE0NgorOjEwRDc5MDAwQjlEMDZGRDNDRDk1OTVBODE3QkEwOEZBNEI0MjdGOUFBNgorOjEwRDdBMDAwRjE2RjlENjJCNEY3MDhFOUMyRjU4Q0VDMzJEQUU5OTRDNgorOjEwRDdCMDAwOEU1MTlGRjdBM0UzOUIyMzc0MUNBRjhGNEIwOEZEMTM3RgorOjEwRDdDMDAwRThCNEM0N0JDMENGQTBGRTA3OEUzNTgwMUM3OTgwRUIwNworOjEwRDdEMDAwMjU0MUQ3RTI3OTAxODkxRDY3QjgzMjNGRTJDRjY2Q0E5OQorOjEwRDdFMDAwODNDM0ZCQ0FGQzE4RkVBQzBCRjg2MzA0RjJDQjdDQzAwRAorOjEwRDdGMDAwODc5QkY0NjFGQkYwOUI4REZDRDJCOEYzOTM3REMzRTg2QgorOjEwRDgwMDAwRkM5REE1RUEwNEMwOEZGODdFMDNDNzM3QTVFM0M1NDg5MQorOjEwRDgxMDAwQzcxQkZCRjY4MTVFMUI3RTMzQTNFMzZCQzFENjQ4OEYyQgorOjEwRDgyMDAwRDJFMzREMUU2RDI5N0M0N0QwOTk3OTNENEJGODdBREFDOQorOjEwRDgzMDAwNzM3REQ3QzI3ODU3NkNFQzdFREU4MUVGRjlBRTQ3M0U0MAorOjEwRDg0MDAwREIxODBBM0E0ODE0QkVDMzM5N0NFMzZFODlFMEQ5MEQ2RgorOjEwRDg1MDAwRjI2MzU2OERGNzc5RDBDRjNFOEY3QjNBOTQzM0Q1QkVBNQorOjEwRDg2MDAwMzYzMDJERTZENkNCMDZCQkNGOEM1RjRBNUZBRDQ4NUYyNgorOjEwRDg3MDAwQzQzNzREOTJDMDlBRURCNkEyRkUxQzgwNkVBMjdBRDMzOAorOjEwRDg4MDAwMkZFOEZFRTY1M0M4RUQzQjYyRTFFMTc0QzczRjk5RUIzOAorOjEwRDg5MDAwQkIxQkRFNEZBOUY2MTFFNEQzRDM5REQ3NjlGNjEzNzFGNAorOjEwRDhBMDAwQjNBODFEMUJCMEVCRUQ1ODQxRjcxREVEQjNEMDRGMTZEQgorOjEwRDhCMDAwNzgxMENGNTdCNUNGQUFDRTAzM0E3NzJBREU1OEZFNEY1RAorOjEwRDhDMDAwNDRERjcwM0FCRjlGRDNGOTdBNkU3Rjc1NzFGQkVCRjYzOAorOjEwRDhEMDAwMTYxNUU1N0I2NzhCMDdDQjhFMTYyRjhGODc5NjYzQjk1RQorOjEwRDhFMDAwQUE0NUMzN0VGMjlBNEYyQkQwN0ZCRjk5NjA1QzZCNjVDRgorOjEwRDhGMDAwNDI4OTE0OEJBRUYyRkM0NjdCN0Y3OEIzMTFFRkE5RDUzOQorOjEwRDkwMDAwNDZGRjNCNTk2RjJGRDM3RjQ5RTVGOTg2RjY0NEVGNjgxMAorOjEwRDkxMDAwNDNGQjY5QzQ4QjBGMDBERERCRDIyQTBERkQ0OEY4MTNGMQorOjEwRDkyMDAwODM3RDJCRTAzODVEOUU4N0YxNjIwQTRGQjRBQjg1M0Q2NQorOjEwRDkzMDAwMkJEQTA5QTlDMzc4QUVENUU0Njc3NjlBRUNEODBFODBDNQorOjEwRDk0MDAwMjNDMjk3QzFCMTBCRTA4OEYwMkRFN0YwQUM2NjdFMTNERgorOjEwRDk1MDAwRjc3QkUyODVERjUzQjQ3RUNFN0M4QzhCMTA5NDU3MkIwMworOjEwRDk2MDAwNzI2Q0E4OUYzQkYyOThCREREOEY3RTMyNzVGMjkzRjIwOAorOjEwRDk3MDAwRkNFQTM1NEM5RjBCN0JGQ0Y5OUM1N0FBQzFBRUREOTJBQgorOjEwRDk4MDAwNjk0MTM5QjkyNTZEOEY2NzJCRDZFM0JENEM5RkZBQkIzMgorOjEwRDk5MDAwM0MxNDdGNTYwRjhGNTc1MzhBQ0RBMkVCNERFNDdDQjNENgorOjEwRDlBMDAwREE0QTMwRkVERDkxRUVGNDQyMUMyQ0QxQjNBODA2RkIxRQorOjEwRDlCMDAwOTlCRTRCQzhDRjg5REVGRjIzRUZENTFCRUMwRUEyNUNDRQorOjEwRDlDMDAwNjM1ODY3NjRGRUE1MzYzNjhFNDQyNDE4MjdBNUQ4NjZBQQorOjEwRDlEMDAwQzA5RjlERThFQTc5MzA1RjVCMTQ4Rjc5QjA1RThFMjczNworOjEwRDlFMDAwOTM5RDIzRTIxNDY2M0NCOTZCOENGQTY2NzUxMTdCQkY3QworOjEwRDlGMDAwMzdFNzAxQzRCQjE5QkVBRTJBMjNGRDc2NzBCQTY4NEI2NworOjEwREEwMDAwREY4MjdDNjhFRTZGMUU5RjRDODkzN0Y4N0YxRDlFQzFCOAorOjEwREExMDAwRTMyNEMyOUYxNkZEQzA4Rjc2QzdFODZGRjZBM0NGODZCQQorOjEwREEyMDAwQkZFRUM2RUYxOUY1NUQwQzdGN0REMjA4NUQzQzQ5QzBBNQorOjEwREEzMDAwM0I4MjA3MTE1RkU0N0U5ODg4NUI4QkYxMTRDMkM2QzNGQQorOjEwREE0MDAwM0FDNkI3RkQyOEZGN0U5OUUwNDIzRkIyQzA2OTBCODAxRAorOjEwREE1MDAwMkMyQ0EwRjMwMDNBNkVGQjU1NDI2MDI1QURBRjRCOThERAorOjEwREE2MDAwRDk5NzQ0RUIwNURCNjQxNURCOURCRUExMTA2N0VFRERBNQorOjEwREE3MDAwMzA2MzY4OTg3RUY3MUVBOUVFQTIxMUJBMzhEQ0I2RTRDRQorOjEwREE4MDAwMUIzMjk5M0RBMEJDMTNGNjAwOTM0QkU4RTdGQUQ3NEQ0MworOjEwREE5MDAwMEM2OTYwOEYxNzExRUY3NjAyNUUzMDZCMTdGNDQ0RjQ1NworOjEwREFBMDAwNzVCOTdGRkRCMzExNENFRjY2Q0UyNUNCQkE2M0UwN0YyRAorOjEwREFCMDAwMEQ2RjhGQ0E3MTVGM0NDQTZCMkVDNzBCMzhCQ0I2NzcyRgorOjEwREFDMDAwQ0Q4QUQ3Q0I3MURERjNBNDU4NzQ3NUI2RTQ3NzFCQzg0MworOjEwREFEMDAwRUY1MUYwOUQxNzM1RDREQkE1ODRDQkVGNDdDOEY3NTE0NAorOjEwREFFMDAwN0UyRkNCQUI1QjNEQTIyQ0M2N0U5RjEyNDZGOTNENTFFQgorOjEwREFGMDAwRDVEQTAxRUZFOUUwRUYwMTVFN0U0QUYxMTI2MzFEQ0Y1NgorOjEwREIwMDAwOEU2MEY2Q0RGNzE1MkY0MkFGNkVFRjdBOUNFMUE1NThFNworOjEwREIxMDAwRTBFNTc2MTJDQkZGRkQxRUUwRTU2OTgwN0IzRkJENEE2NAorOjEwREIyMDAwQzJCODBGRkI0NUI2RjYwQ0I0M0ZBNTZBQkIwMDdGMTEyNworOjEwREIzMDAwRkM1QzE2OUI2RkZFRjkxREUzRTc3RUVFQjdBRUU3RjhERgorOjEwREI0MDAwRTlFMkYxRjFEQjM5N0UzQUI5QkVFRUUwRjg2OUU3RkFENQorOjEwREI1MDAwRkE1NkMwNEZEQzk5RjNDREYwNjYyMzdFNTJBQkUzNEQwRAorOjEwREI2MDAwRjgzMEUyMjdBOURDODg5RjQ0QUYxMTNGMDk5RUQxMjZGNworOjEwREI3MDAwN0MxOEYxOTM1RUEwMjJGQ0UyMzI4RDc4RUFDNzM3QTdDOQorOjEwREI4MDAwRjA1N0QyNjA5QzE4NzY3Mjc2NURBODAyRjZCODg2Q0UwMQorOjEwREI5MDAwRTlFRUI1QzIyMEJFQUUwQTI4QzU3QUVGMzVGOUE1QTJENgorOjEwREJBMDAwNEMyRjYwNzhDRDlDMTYxQkVGMTZERTFFQzhEN0E0MDI0MgorOjEwREJCMDAwM0Q5REZDMjAzNjFGREI3OUZGNjNBQTE2NjdFODdGNTE4NQorOjEwREJDMDAwRUNGRTJFREVGRkY1RTE1QUEyQkUzRkZEQjk0QjFFQzRBRQorOjEwREJEMDAwNUYzMEFGM0Y0MUQyRDIwQjcwMURFQUNFMzBDNUZEQjZFQgorOjEwREJFMDAwMTU2QzFGNzI5QjQzRUQ4NkZEN0NGRjBBQTc3N0JCOEFFRAorOjEwREJGMDAwMjNGOUVDRTAxRkYxNzE4ODNGMDlDN0NERTU5RjE5RUVDRAorOjEwREMwMDAwRENGRjE1RUNGQkU1MkRDODFFN0EzNTZEQ0Y1QjlFNzlFOAorOjEwREMxMDAwQTQ4RTk2QTMwQjQ2RTAzQ0YzRUJCRDdCMDBDRUIyNkIyQgorOjEwREMyMDAwQ0U1MEI2N0YzQ0NGRkRGRTE4NEE2QUMxNTRFOTFCNzA0NgorOjEwREMzMDAwQjhEREIxRjdFRDQ1MjlGNDI5OTU4MzY4MDdEMjg5MDQ0OQorOjEwREM0MDAwQjY1MzNBOEQ1Mzg4OTI5ODAyRUJENTcwNUQ1NkIwNjMwNworOjEwREM1MDAwNjU1ODZGMTdENkUzNDkzNzk2NEUxMjYyRkJEN0RDMUYyMworOjEwREM2MDAwM0RBRjIwMEZDNzczMTMzN0ZBQUIyOUM0OEJBNUUwNjMxMAorOjEwREM3MDAwN0IxQTUxRDIyN0UwRjg2RDcxMTMwODJBRkNGM0MwNUZCQworOjEwREM4MDAwNzU2NjZGRUUwMDlGNDZBMzUwOTg4NEFDODJGMDkwRUVDQworOjEwREM5MDAwREE4N0VCMjcxRUEyQjI3OERCQ0Q2RUNDNEZGODMzNUQ2RQorOjEwRENBMDAwREY5OEQzNUZERkU5RjZGQkQyRTEyQTIxNDk4NDM0REIzOAorOjEwRENCMDAwNTlGOThCNzhENzE2MjhCRjc0RTQwNjIwNjhBNThEQTg3QgorOjEwRENDMDAwRkIzMUUwRDU1RjQ5RDBGRUYwQkY5NTEwNjhDNUM5MkU4NQorOjEwRENEMDAwM0I4N0Y5MDdBNzNEQ0VCQ0IzMzRDRUNGQ0VEMjM4OEQyQgorOjEwRENFMDAwMDVFOUE3MUVFNzM2Rjg3NTMyRUM2M0ZBOTY0M0ZGQjZFRQorOjEwRENGMDAwRTQ0OTY4Nzc4QUQyMENENzdEMUVFRDA2OTg5RjYyN0YzMworOjEwREQwMDAwMjlGN0JERDRBOERERTY3QzUzNDJCQkFENEQwQTEyODg4RAorOjEwREQxMDAwNTNGQURGOTZEMEJFMjJDNTBDNEY0RTk1NzhGMkM2NDUxOQorOjEwREQyMDAwQzc3MTdBOTcwRDY3RjEyRTE2RUY1OUYxRjc1RjhDMDJFNAorOjEwREQzMDAwRkJGQjk3MDkzM0MzNDlGNEZEQUQwN0E5OUQwNzc5MzQ2RgorOjEwREQ0MDAwRDNCQ0FGRDc1MzdBNEE0RkI1NzlCNzUwRkE0OUU1N0U3RAorOjEwREQ1MDAwNzJEQ0RBNDkwN0VBRTlBRjlGOEM2MkZDQkRBMzY1QkZCQworOjEwREQ2MDAwQkI4RDBBQTQ0NEM1N0JFMTA0RkE5RTkzRUZERjEyQjk5MAorOjEwREQ3MDAwMjYwQzc2NjNFMjI0NDU4NTNEOEUyMjM5NTgwREYzMjUyNQorOjEwREQ4MDAwNEQxNjAyN0M3MTRGODM3MTNGQjdCM0IwMDhFMTIyRUFCMAorOjEwREQ5MDAwQzNGODdFMkUyOTU1RkEyMjc5MzZENDhFREY1OEMwRjM4NworOjEwRERBMDAwNkE1Q0M0MDU3NkExRjI2RjJEMjk1NkRFODMyOEM1RkM3NgorOjEwRERCMDAwNEFEM0E4REU0QTgyQjgyMEU1MTQ1QTk2NzYwNjMxRjk4RAorOjEwRERDMDAwQTNEMjFCQjQ4MzFEQkIyMTQwRkMzNjBBQTcwN0U3RkI4NworOjEwREREMDAwQUU4MUYxM0FDQjdEMDk2MDk3NkYzODM0RUJBMkIxNzQxNAorOjEwRERFMDAwREVBMUIwRTIwNTEwMDQ0N0E1RTBCQTQzOUFCQzM2ODEzMworOjEwRERGMDAwM0VERkY5QTZDNTBERUJEQkNBREZFRkY0NDlDOEZGRjczQworOjEwREUwMDAwQ0MyMzAxM0Y4NUM3RDY4NjNENzYxOUVDREU5MDg1OEMwNAorOjEwREUxMDAwNDQzQjk3M0E1QzkzQjgyODU0MjE1RUNCRjhGRTk2NTE2OAorOjEwREUyMDAwRTlGOEIwMjdCNDNDMTlFMEIyMkVFMUZDOTA0NkM3QUY0OAorOjEwREUzMDAwQUQ2NjcxRTcxOTcyRjZGMzMwNkVBOEQzODZGODQ5RTczQworOjEwREU0MDAwRjk0NzEyQTk0NUZCMzk2NTlFQ0U1RUE2RkYxMjNCOTlBNAorOjEwREU1MDAwNUYxOUJBOEU2MERFNTM1Mjk5RDNFQkE3REY3QjIyQ0NEOQorOjEwREU2MDAwRjY4REVFQTk2NjcxNjcxNzA5RTJGNzY3QzhCQjFDMTY0NQorOjEwREU3MDAwRkFCQ0E3NUE3MTAzM0QyNTk5RUM3MzI3OEM0NzQ5QUUyQworOjEwREU4MDAwNjcyMzFCQ0YzNTlFOEQ5NzY4Q0E4M0IyOEI3OUI5RTkxQQorOjEwREU5MDAwQkMyOEZFRTQ0NDA1RjFFQ0FFMzZFNjRGQjk0Q0VGMzk1MAorOjEwREVBMDAwNERERjdCNTlFMDM5OUIxNDAyOUU0RkY4NkU5OEY4MTJCMworOjEwREVCMDAwQjY3QUQ1NThGOTEzOUQyRDI0NTRBNUNCQjc3MDBFMTAwMgorOjEwREVDMDAwM0ZGQ0IyOTBGOTA5QjZBQ0JENzY5OEQ3MDlERjJCNjk1MworOjEwREVEMDAwMTBFRTdBRTE1RkZCREVCQjAzQ0E3RkZGNTc0RjEzNUQ5NQorOjEwREVFMDAwRDc1RkJGM0FCQ0VENTE4MDYzRjM2RDJGMjIxRDcyQkYyNworOjEwREVGMDAwNkEwODRDODFDRUU3Rjk1QTFCQzJCMTRDNjNGMTAxNTI1QQorOjEwREYwMDAwREFCQkQ3NUE4QUVEQjhBRkI1NzY4RjAzREI4Nzk1OTMyNgorOjEwREYxMDAwODA4M0MyNzM5OEEyNjVGRDBDRjgzNTI0N0I1N0E4MzAyNgorOjEwREYyMDAwODhFNkNDOUE0NEQ4NTYxNUFEQUZCRDkyMTIwRTk1MEYyNworOjEwREYzMDAwRTlGMzM0RDk1RjBDRjE5MDE3NDgyMkM1RjcwNjRENTIyQQorOjEwREY0MDAwNTlGRTlCRjQzQ0YwNTM0RTk1ODQ3RTU4Q0UyMTlGMDM5RQorOjEwREY1MDAwRThFMUM0NkMwQkU2QkZBQ0E4QkRGNEMyOTE3NEZDRkI1NQorOjEwREY2MDAwMkExNDhDMzc1NDU3NTU1QzBFRURDMzBFMzE3QTcxNUQwRgorOjEwREY3MDAwQzdGMDQ3RTExNEFDQTJGQzMwRTIxMDhCMjc5NDkyQjBCQQorOjEwREY4MDAwMzc0OERCODc3OTg5MzUwREY0QzczQzBBNjA5ODVGMjdFRAorOjEwREY5MDAwQzcwRjhGMEY5NDk2ODZGQzAwRDQ0NEFGMTE4RjZFMTM3OQorOjEwREZBMDAwMUVDRDc4NzU4REE0NzgwNEZENTI0NDhBOTg1RkM3RUMyNQorOjEwREZCMDAwQzc1QURFNjc0M0Q1NDRGNDVGRUY1MTg5REYzQUFFM0Y3RAorOjEwREZDMDAwQkU1RUE0RjZBMzQ2RURCRjEwQjUxRkExRkMxQkI1MUY5NgorOjEwREZEMDAwQTFFQ0ExRjYyMzk0ODk1QUM1NDVBNTc0QkVBMTc0M0E1MworOjEwREZFMDAwMkVGMDVGNEREOTRBRDgxRkI4NkZFQUQ1MzdGRDkzOTYwQQorOjEwREZGMDAwNjU3QzlGOEQ3MjZBNEEyNUZEQ0UyQ0UwNjI1NjVGQUYyQworOjEwRTAwMDAwNTE5QkU0QTU1MkQ5NTA1RjlCQTY4ODdEM0MzRkU4RDQ0NAorOjEwRTAxMDAwQzQyQzBCREZFNzk5NzFBNzQ2RUI5RDk5MEFERkQ3NjMwNAorOjEwRTAyMDAwRjUxMUM1QzQ1MEVGQTlCMTE4RUFFN0VERDE4RDNGMDU1MAorOjEwRTAzMDAwRjAxMzg3RjUwOTIzNzdBRUY3MTc0NERCRUYyOEE0NzVCMworOjEwRTA0MDAwREE3RTgwREI3M0I1NEIyREJFMkQzMUU4NzdEOTQ4NDY5QgorOjEwRTA1MDAwQkZDQUJGODk1RkEyRjhGQUFDODBBMDlGMkU1QjM0OTQ0MAorOjEwRTA2MDAwREZBNDUwNTE0MUJFRjZEN0NCNTQwRUVBRkRFQjAyMkE5NQorOjEwRTA3MDAwNTc3NUYxOTFDMzg1M0NBRUVFQUI2MDcxMzYxMkZERjk3OAorOjEwRTA4MDAwN0ExMkNGQjMyMkYwQkMzMzA0NzZDNEFEQUY1RUU5MEQ5MworOjEwRTA5MDAwOTI4MUU1QUUzNTUzMzlBMkE3OTM4QjA1MUQ4QzI0MjNCRAorOjEwRTBBMDAwRDE5RjI3NTMwRTU0MDA5RDc1NEQ1NDgwMUU0QTM5MUYzMQorOjEwRTBCMDAwMTA2RUM3NjE4ODlGRDJDRjUzOUZERUZEMTc0RDA1M0Y3RAorOjEwRTBDMDAwQUREREREMzYxMkYzN0UyRTFGQTlDQjkzNTk5NUJFNjhDOAorOjEwRTBEMDAwMjJFODMzOTFGNzQzNDg5NUZCN0RCQTJFQzk3RkE5MDUwNQorOjEwRTBFMDAwRUNCNjgxRUQxNDg1QkNBRjgzNDc2RkVEOEMyNEQwMDM3MworOjEwRTBGMDAwNEUyRUM3Q0RGRDU3QjVFQzdDMDVCRUJGQkFBNTFCNEI1OAorOjEwRTEwMDAwNjc5QTBGODU4QzVERjE2M0ZDNjY5RkE3QUUxMUU2NjU4QgorOjEwRTExMDAwQ0ZBNkVEM0EzOTZDNEJBM0VGMTlGQzgwNkM2Njc3MDlGQQorOjEwRTEyMDAwM0NCODA5QzY4M0M0QkVDOTg2Q0UwOUYxNzExNDE4OURENgorOjEwRTEzMDAwNTQ1RjgwN0NERTEwOUE4NTc5MTU5RERFMDk4M0M2QUYxOQorOjEwRTE0MDAwNEVDNTI3NUJBQjVFMjI2OTE0OEU0RkJFM0FGMzJGQjNFOAorOjEwRTE1MDAwNjk3OTEwRjg4REVBQzEyNzM4REZFNDk0M0ZGNkRBQjUyMworOjEwRTE2MDAwMDY3RTM5NkFFMjk3QTMyNjdFMzk3QTBBN0VCOUUwNEVBNgorOjEwRTE3MDAwNjhFRkM5NTQwQ0Y1MUNFMDE3NUQ3RDZCODQ1RjU4M0Q1QQorOjEwRTE4MDAwQ0EyRjQ3OTE1RkVFNzlEOTg2RjU4RDIzOEYxQUY4NjVFRQorOjEwRTE5MDAwNDUyMUFENjdFQkY4NjVCQUVDREIxMkMzMEU3OEU1M0JDMQorOjEwRTFBMDAwRTI5NzVGOUYyOUJGQkM3MTY2RkNGMkM0RDlFMzk3M0YzOQorOjEwRTFCMDAwOEU0Q0ZGRUVGOEM1Nzc5QUZDRTJFQkNGMkY4NzYwNUVCRQorOjEwRTFDMDAwNjdDQTJGOURFRTIwRTYwMzc2Q0VCNjU0MDc2MkUwRkJDOQorOjEwRTFEMDAwN0E4RTZGMTFGNzJFRTM3MThBNjlGM0I0Q0JDNzgyM0Q1MworOjEwRTFFMDAwQ0JGM0Q2NDQzRTRERTczQ0E2QkY1N0Q0Q0U0MDdEQjlENQorOjEwRTFGMDAwRjUyMEQzOTc0MjNGOTc3MTNDRkU4REM3MzFDQTQyNEMwMAorOjEwRTIwMDAwNkZBNjk3NEJGOEZFNEM0RDBBQThGNEQ3NEU2QTEyQTQ5RAorOjEwRTIxMDAwODJCRTlFMjI5MTJFMTU5NkJBQUM3NkE0MTRCNTlCRThDOAorOjEwRTIyMDAwRjdEMDZFQkFDRkNCRjI2NkM5MjE2NkVGRDhFOTdGNDA0RQorOjEwRTIzMDAwNEYxNzk3NUIwRDdBNzU4OEQ5RkUzMkQ1QzUzRUE2RDhBMworOjEwRTI0MDAwQkZCQzBGRjIxMjI4M0NCRTFFQzlFRDI2OTNCRTE1NzA0RQorOjEwRTI1MDAwRDg3MEE4MTJFRDkwQ0ZCMzZEODNFRTU3NzVGMkY1NDZFNgorOjEwRTI2MDAwRUNBOTUyNUY0NUFDNzg1ODdEQTE4NEYwQkVDOUEzQzUyNgorOjEwRTI3MDAwMTc5NjgxM0VCRTBBRjVBRUQwRTc2NkJEREM1M0Y1OTIzNworOjEwRTI4MDAwNTFDRUY4QzdBNzU2MTZFQkU0OEM3RjNDRUFDRDg4OUNBQworOjEwRTI5MDAwRTFGNTAxRTUwQzM5MDdFNTQ2NDQyRkYzN0E0NDJGRjMwNQorOjEwRTJBMDAwN0E0NDJGRjM3QTQ0Q0VDMEY4RDk1MUJEM0NGMjgxRjFDMworOjEwRTJCMDAwNzdGQTc1N0E3QjE5RDRCMzRGQUQ5NzE3NzA3OTcwQjYyQQorOjEwRTJDMDAwRTVDQzFGQjhCREZBNURFOUU1Q0E0MjRFMkZGRkI5OUMwNworOjEwRTJEMDAwQTkyOUZDMEVFNTRDMkRDODk5QTQ1M0NCOTk1QTkwMzMyQgorOjEwRTJFMDAwQzUwNjM5NzM1NUUxQjdEMENCODkwREJEN0VEOEJGQkYwOAorOjEwRTJGMDAwNjIwMEJBNzc3MDdDMzcxNTY4RDdDMEY4QTRFNkY0RjJFQworOjEwRTMwMDAwQjZDRDc0RDU1QkZCQzBBQTBDQTAxNzJGRjNGMzA2N0EyOQorOjEwRTMxMDAwM0ZCMUY5RjdBRkI0RTlGMkEyMTM5NTEwM0I1RkQxRkMxRQorOjEwRTMyMDAwMjQzRTlGREI3MDEwRTM2NUE3OUE2RjdEMjFDMUQyQUNCQworOjEwRTMzMDAwNDc3QjZCRjdEOTkxNkVCRDE2REMxM0ZGQjZGM0U4OUNGMworOjEwRTM0MDAwQ0RGOEYyOERFRDRGQUYwNzNFQkE4RkM3RkRDQzc2QUU1QworOjEwRTM1MDAwQzBFQkU5REEzRkU2RUY1RTNGNTJDNTcxQ0RERjNGMTUxNgorOjEwRTM2MDAwREQ1MjNBREQwQzc0N0EyMkZCQkEzMUUwRTdDOTg5NzdENQorOjEwRTM3MDAwMjUwMEJDQkUwN0ZBRjBDOTZGNDNBN0FGOEM2NEY4M0MxOAorOjEwRTM4MDAwOEQ3NTA3NjFGQ0VGNkFEREZGMDE3RkJFRkM2REQ2QkRCOAorOjEwRTM5MDAwQTA5MEQxRDU2OUFDRkJCRkJGNEI3Q0ZGMDdGRUMyNjcyNQorOjEwRTNBMDAwREY2NkREQ0IwNEJFMDkzQjJGRTM4NjVGMjg5RkFDRkYxMQorOjEwRTNCMDAwNTdFMURCMTBCRjU4RkZFRkQxOEZDMTNBQkJCRUIyNkY0MAorOjEwRTNDMDAwODZGODA1RjlGQTFCRDlBRDNGM0Y0NUQ4Qjk5OTQ0RkUwNworOjEwRTNEMDAwNUVBMjhGOUQ4NzcxNTdFQkNFNDc5MUU4NzkyOTVDMEYzQworOjEwRTNFMDAwQzYzNzIyRUQwNzYyOUQ5N0ZCQUU0QkIwNDdERUIxMEVGQworOjEwRTNGMDAwRDI2RTYzNzEzQkYzRjNGRjJFOTBEODM5MzZBOUQ2MDE2NAorOjEwRTQwMDAwNzlGMUJEQjNGNzYwQkU0MUU3RUMwOUI4NkY2NUI2NTM2QgorOjEwRTQxMDAwQzQ3QjNEMkQxQUM2OTMzQTVCN0M1OERFREU1MjFEODJDQQorOjEwRTQyMDAwQjhDOTkzMkZCRDI1NDEzRTU4RTk0QjBEQThERkQ2NEUwNAorOjEwRTQzMDAwRkFFMTMwQ0NFMzlCNUExQTBGRjVEQjRENzY4QThCREI4MQorOjEwRTQ0MDAwMjlERTUxQUZERkE5Rjc1RjlFRkM0RDEzQ0E0MTExODc0QQorOjEwRTQ1MDAwQkEyMzYyQkZEMEY3NTQ5RDlGNDRFQjQwMEUxMTNGMDk5MQorOjEwRTQ2MDAwRUEwNjNGNjlEOTdBQjA1RjdBQzA3RUExRkRBNzhFNUFDRAorOjEwRTQ3MDAwQjYzRUQ2NzdENjVBNDgzREQ4MkY2QjFCMkNENUIxRUM3QgorOjEwRTQ4MDAwOTc3MDQxNkNGQjg1RDY3MURGQ0Q5MTY4MEZBQ0NDMDNFMgorOjEwRTQ5MDAwN0I4NkQ0RTlFMzZBQTdCMjVGMUUxRUY1RERGQTQ5NTcxMQorOjEwRTRBMDAwOEMzQTNCN0U1Mjg0NkZCOUREMzJBNDQ4NUIwODIxRDk5NworOjEwRTRCMDAwQjMyNTI3ODY5REE2OUMxOEQ2NUY0RURDMzhFQTVCRjgwQworOjEwRTRDMDAwNDlFMTAyOTY1RjJERTg2QkFCRUFDNTc4NzI2NzM1QzEwQQorOjEwRTREMDAwRjg2MzY3Njg2NTZBMDlBRDNGRDE2MDIxMTJBRDVGRkZERgorOjEwRTRFMDAwMzI4QjBCNkYyODI3MDEzODQ3QkIyMTlCNjAzREU0NjVDOQorOjEwRTRGMDAwNzQzMDQzNzZGRTA4RTJFMDNENTVENDdGNTIyMTZFRjczQQorOjEwRTUwMDAwRTM1QTgwRURCQTg0OTlCNzM5MjhCREQ0OTYyQjA0RkMyMAorOjEwRTUxMDAwQTYxOUYyMTRGQzRFNDg2M0Y5QTFCNTRFRjJBMzM4RjBFNworOjEwRTUyMDAwQUJBNjJBNjRFNTE5QzRBRDEzRTU2Mjg5NzIyNEU1NEZGMAorOjEwRTUzMDAwMzUxOUY4NzZBMDc4QjQzOUZFNENFNDE3QkM4MDJGNzNGNworOjEwRTU0MDAwMUNGQTRDRTNDRkRCMDU1RDdERkJGODMzRjJERjk3MEY2MAorOjEwRTU1MDAwMzRDRDgyNzhFRUE5RTg3MUMxMjgxNUY1OTk1OTRGOTkwMworOjEwRTU2MDAwRjk1OEQwRDM0MEY0RTcwNDNCNjlBMkFFQ0VDRkUxODZBMAorOjEwRTU3MDAwRjkzRUI1MTNFQ0E0ODk1MUJBRThBRDlEOTQxNDJCRkY3NAorOjEwRTU4MDAwNEE5NDA5Q0Q3Rjc4NDU3RjFFMkY0MUU5QzZGMTEyOUE0MgorOjEwRTU5MDAwNzdFMUYzQkIyMDZGMDBENkE3Nzg1MTlFM0U1ODQ5RTUzRQorOjEwRTVBMDAwNzA4Q0Y5RUQ2RTU5NzYwOEU0RTdBRTk2NjYyQzJGNTAyNAorOjEwRTVCMDAwRkFFNDE0REFGRkU5MTZGRjIxODBEQkNFOTY3NjJDOUY3MQorOjEwRTVDMDAwNkNFOUMyRjY5RTk2OEQ1OERFRDExMkMwNzI2RENCMEVFQworOjEwRTVEMDAwMkM2RjZCRTlDNkYyQzE3Q0Y2OUQyOTRBMTBDN0I5RTBFMQorOjEwRTVFMDAwMjQxRDVGNDc0NzUzRkJFODc3NzRGODNFRUY0M0JGQTExNAorOjEwRTVGMDAwN0Q3MkI4REREMDdFQ0VFMTJFNDNCRDJDQjREMUQwREYwQworOjEwRTYwMDAwM0QyNTYwNjg2RjJBQTgzQjA2N0NFOTJBREQ2MTc4RUUyQgorOjEwRTYxMDAwMkNFRTM2QkM3N0JBN0VDMUQ5RUU5NzZCN0YwNEI2QzlCMworOjEwRTYyMDAwNDkzMjlDQkJBMEFGQzg3MDZFODhGMkYxOTA2NjJBNUUzQQorOjEwRTYzMDAwNjlGREZFNDQxRUU3RTg2NkZCRTQ5OTI0RjI4Mzc0MDk1MQorOjEwRTY0MDAwQTk2NDYwMUZGNDI2QjIzQ0M4RDYyQ0Y2N0VFQjhEQUNENAorOjEwRTY1MDAwN0U3RjBFREIzRjEyNzk5QUIyM0Q0MkQ3NDRDQTg4RUVFNAorOjEwRTY2MDAwRTdERjlGQzhDRjI5MTVCMEJDQzhEQ0UyMDA0NDI0NDhDRQorOjEwRTY3MDAwMkUyNEE4QzE3RTQ4MjlEQjI3MTNGQkRFQUQzQ0VFNzBCQgorOjEwRTY4MDAwQkY5NUVDOTRBODNERDlBQUIwRjlCNzZBMjRCMDgyRjYzOAorOjEwRTY5MDAwNkIyRDY2RjU3QkFBNDhDMDAyRjNEN0E4MTRDRkQwRUQ0NgorOjEwRTZBMDAwNzMzN0VGRkI0QTJBODlFRTk3OTNEMTFBRUVEN0M4N0NDRAorOjEwRTZCMDAwOUYzREIyRUZFRDc4OTdFMEJFM0U4N0Q3Q0E4NDhGMzE5OQorOjEwRTZDMDAwOEYzNkI5Qjk0RjAyRkUxQUQyRENENzBCRjNCQkZGMTY1NworOjEwRTZEMDAwOUIxQUNCMUZFQUJERTU4QjJDRTA5QjREMzc3RTkxMDU0NQorOjEwRTZFMDAwQ0NCRTI5OTIzRkQzRTdEMEU3Q0ZFNDcyQjg2QzZBQ0VCNAorOjEwRTZGMDAwQzdGQzg1NERGNTJFMkY4N0IzQzVENDhFRjkwQzlGRDc1NworOjEwRTcwMDAwRjNGQjA5ODg4MjdFRDEzMDc3MTRBRTAxOTEzRjIyNDMxQQorOjEwRTcxMDAwREUxRDVERkY4OEU4RjlEM0ZGMzRCRjY2NTNGMzcyOTZDMAorOjEwRTcyMDAwNUY5MzRENzg3RUNENENGNDI3MDUxRTM2NDEzOUFFRkYwMAorOjEwRTczMDAwQjlERUVGM0FCRkU2OTQ3OTM1QTYzQzA3MDNGRDQyREQyQQorOjEwRTc0MDAwNkZBNjZGMTVGMTEyQzdFOTVCQkE5OUU1NDU2NDk5RThDMAorOjEwRTc1MDAwNDZFNDVEMDhCQTE0RjkxOTIyNUY0M0U0NkZEODc4NUU4NQorOjEwRTc2MDAwMDdGRDJDQ0Y2QjhFNEQ1RkI2M0RDNDAzRTdERTY0NEJENworOjEwRTc3MDAwQkM3NzRCREVBOUYzMDg5QTNERjk1QzM5MkMxQkM3QzY2MAorOjEwRTc4MDAwNjVGOTAzRkYzMzRBRkI4NUE3MkMzQTZFOUU0N0JCNTFDMAorOjEwRTc5MDAwNUYxN0U1NTZGODc1MzIxREMyMUJBRTAyN0JCNUE4NUM0QgorOjEwRTdBMDAwNkI4NUYzN0MyOUE1MDRDRkU5OTQ5NjRCNTgxNjFENjIxRQorOjEwRTdCMDAwRjVEQjNDMzI3RUFGQ0RDM0UyNERBMjdFQjFBNjNEMDc3NAorOjEwRTdDMDAwRUYyNzk5REVCQjM4RjI5RTE1RkJGRERFNjNFMUE1QzJBMworOjEwRTdEMDAwRTZDREYzOTA2NzcyRkE1RTNENTk2NkY5RDE1NTEyOTMxMgorOjEwRTdFMDAwMUJCMEExM0E4OUVCNDMwQUJGOEI4OUZCOTIwMjVEREMyNworOjEwRTdGMDAwRjVDNzFDNUJCN0I3QjBGQzNFOTEwRkZEQjc5NzY1Q0M3MgorOjEwRTgwMDAwODc3Njk2RkJBNkMxRDlCM0IyNTAyODA4RkJFQkE1REJFRgorOjEwRTgxMDAwODgzQjQ1ODVGOTg1MzVFMEM3MTUzOTc3RUY4MTdDODhEOAorOjEwRTgyMDAwMjcyRTY0N0JCNjE3MUY2MkY2QzI4RkNCQUZDNkZCNDY5RQorOjEwRTgzMDAwNUM1RkNCMTg4Rjc1NEY0OUY0MDZFMDQzMzU1NkE2RkY1MQorOjEwRTg0MDAwNDUzRTc0QjlEMTVFQTgzNUQ5MEIxNzlGRTJGRThGMTRFRgorOjEwRTg1MDAwRDJFNzA3M0RGOTg4QzcxNDhGRTVGNzgwMEMyNEJGQTNFMgorOjEwRTg2MDAwRjc4MDMwRjk1MENBQzc3NDk2QkIxRDEwQkYyRTNBNjRBQQorOjEwRTg3MDAwQzFFMzlFRjIzNjREQzZGM0IxOUQyQ0NGRTM4OTkwNkY3NAorOjEwRTg4MDAwRDBGM0E4MkY3MjM4ODZCODlDRjgxQkNGOTNFQ0UxNzJCNgorOjEwRTg5MDAwRTI3NTJFMjcwRTgzOUNBMEU1MkIzQzRGRjIxMENGOTMwMAorOjEwRThBMDAwMzQ5Rjk3RDhEMTUyRkQ5MkRFREUzMTk3NDU5MjdGMTY4NAorOjEwRThCMDAwRTY0MTZENTYwODlFQkYxQkUwQkU4RkEyMDAxREM3OTBBQgorOjEwRThDMDAwQzdCODAyRTk2NzZGRjJERDE1NDAxQ0VCMzUwQkRBOTUyRQorOjEwRThEMDAwNUQ1MzQ4NTYyQ0ZGQUVFQkMyQ0E0MUYzMEYzQjVCRTZEQgorOjEwRThFMDAwQkNENDM2ODhERkU4QjQ1MTdGMjZENkZCMUU3MUFFQUJCMAorOjEwRThGMDAwMEJDRjVCQTQ5NTVCMDhFNDU1NjVEOUZCRDhGRTQzQUYwRAorOjEwRTkwMDAwMDNFOTc5ODhENzhFRkJGQjY0OUU5M0JDQUJDQjUzQjlFQworOjEwRTkxMDAwRERENzM1MEJFNkZGRTAzNjA1Q0ZFNzg4NzExM0JENzQxMAorOjEwRTkyMDAwM0UzQTNBNDk5QkIyMjcxM0U2REYzOTM1OTgwOUY2NEM0RgorOjEwRTkzMDAwRDdGODdEMUIwQjIwNUZFNEEwNEM4MDBDQ0NGM0IyMTYwMworOjEwRTk0MDAwNzE3Rjk2QUYyQjRERDFBNDU4NzlFQTAzQURFQjAzOEZCRAorOjEwRTk1MDAwNjRCODY3QzIwQ0ZGMDFFRDBFQzgwODE4RkNCQzk1QjM4MworOjEwRTk2MDAwMjg0NkZFRTI2OUNDMTNFRERCNkY3NjVDM0IxQkNGNEQ5NgorOjEwRTk3MDAwOUVFNkZEMTcwOTlDMEVCMzE2MTIwN0ZBREQ0MDhGODM0MQorOjEwRTk4MDAwRTBEOTY1MEQyMURFRDYyRUI0NTRDNzNBNUY1QjU0QzQ3RQorOjEwRTk5MDAwRjBCREI2RjQ1M0I0OEI0OTcxRUM3OTI0OTU5QkU5OTU5RAorOjEwRTlBMDAwQ0RFNzBFODU4RTRGREZFQjJBOEQzREZFRTUxQzZGOTQ4MworOjEwRTlCMDAwQUU1RjAzNzlENTU1NkQ0MUJCMjIwOTJFNjJDMEZDMUNBOAorOjEwRTlDMDAwNkEwNzQ5NDhFRjI4OTczRTJCQjUzMTNCQzEyNDJGRkFGRgorOjEwRTlEMDAwN0RCRjU0NDc0RkY5RkRFNUQwRjk0NTRFNDM3Q0ZGNDREOAorOjEwRTlFMDAwRjZFQ0E0NjAwQzNDOEI1MkMwNTFDOEExRkU3MDI0Nzg5OAorOjEwRTlGMDAwRkVCNThCQzM5MTE0QzdFNkVCMjhCRTU2ODg3ODU1REQ2QgorOjEwRUEwMDAwMjlDRUVCQ0QyRTJBOEI3MTRFNkMwMDNDOThFOUUxOEUxRAorOjEwRUExMDAwODUzRTVDMTc3OUVFMzVBMjgyQkUyQ0E1RkNBODhCNDNGRgorOjEwRUEyMDAwMEMwNDNGMzNCQzE2N0VDN0YwMzJCN0ZGQTg4OEM3NDczNworOjEwRUEzMDAwNEU3MzlEQTdERDhGREE0NTZFOUQ1RDBDODdBMjE1NUEzQQorOjEwRUE0MDAwOUZDQUVCM0ZGNjRCRTE3QkE4NUM5NTc2RkQwOUVEOUVGNgorOjEwRUE1MDAwQTlCQ0ZDMzE5NDU0M0ZFRTkyODJFRkJFNDE1RjlFMjJFRQorOjEwRUE2MDAwQTkzOTgwQjQ1OTRGOEY4MjA4MTlCOTU1NUE2NkIwN0ZCOQorOjEwRUE3MDAwM0EyNEVGRTE2NzMwMkVENDk3MEFGREE2OTMzQTg1MjExOAorOjEwRUE4MDAwMzk4MEVCRkE5MzE0NkUwNTg1NzUyOUQxNTY0MUQ5NDgyMgorOjEwRUE5MDAwQkE2Q0YwNUU2M0NGOUYwRUMzNzcxQTdCMUM0MTE5ODI1QworOjEwRUFBMDAwOTMzQkFEQzdGNDcxQTM2QkY0RTc0N0YyRTAxNjhENkVBQworOjEwRUFCMDAwNUIxRTlEQ0Y5MjFEQzY3REQyMDYxMkMyRjE5Njc2MUJCQgorOjEwRUFDMDAwOUY5QkNGOEY0ODMyMDUwQzVDNEUxMEM5N0Y5RDgyRjkwOQorOjEwRUFEMDAwQkRDNEMxREFFMzQ3OEJGM0U4N0Q4NUZBRkJDQ0VBMzlBNAorOjEwRUFFMDAwQkNFQUVEQ0UyMERDMkY0NDAyQzY3OThBN0I3MzlFQTc1OAorOjEwRUFGMDAwNzJDQzNFMDFDRkMzM0MwQzc0RkM5MURCRUVCNzUwN0I3MworOjEwRUIwMDAwMzkyM0E1QUUxMUUwNzExNTUxNkRBQzY0NzY4MzU4OTcyOQorOjEwRUIxMDAwQjg4NzY2ODE3M0I2MERFMEJCQTBEREJDMEVDRDA2RjNGMQorOjEwRUIyMDAwRjk1OUQ3RTBFQjEzNzhGRjQ3MTFDMTc1REM1RUE0NjI5OQorOjEwRUIzMDAwQjkzNEJFNjZCRjA2Q0RBNUExNUNGRDdEMTA0RDVDM0YxRQorOjEwRUI0MDAwOTA2NUE5MDZGRTdENTFEMDIzRDFFNEQzNTk3RjdGQjhDQgorOjEwRUI1MDAwMTY2MDlDNENDMDc1NjAzQTM1QzZDOTc2QzEyMUQ3NzQyMQorOjEwRUI2MDAwODRERkNCN0FGODExQTVBRTA0QzYxNUVCRjk2NzU5RTgzNgorOjEwRUI3MDAwODEyMEVDQUIyNkIyN0JBMERFNERBOTdCMDNGQUU3MUMxQgorOjEwRUI4MDAwMEVCRjJGRDFBOTEzQTc1QTA4RUJGQzc4RTc0N0FGQzhFRgorOjEwRUI5MDAwRjlEMUY1MTExMkJFMUJGMkEzRUI3N0NBRUUwRTU4Q0ZENgorOjEwRUJBMDAwQ0VFNzBFMDNCRDBGQjQyRTkxMUY0QkU5MDFFMTQ2RTdGRQorOjEwRUJCMDAwRjUyMUU4MzdGM0JDOEVERTQwN0UwQTc2Qzk3NEI5RDhGOQorOjEwRUJDMDAwMTA0Nzc5ODZDM0YxOUU2MkRGQzdGMDVFRTk0QkQ5MkUwQworOjEwRUJEMDAwQkM3RjI3QkY3QkRGNTAzQThGQkVFQjI1Q0NBQjREOTM3QworOjEwRUJFMDAwNDkxNUMwNEZFNDIzN0NFQTU0RDBDRjRFNEJGMENCMkVENgorOjEwRUJGMDAwNUFFRkJCOEE3OEI3QzAzNEJDQ0JCQzQwMkE3MjRFQjE0NgorOjEwRUMwMDAwQjc4M0QyNERDNkY1QjIwRkU0QzlERkFGNUI5MEJDODBDRAorOjEwRUMxMDAwOTYxOTg5MEI5MzQ3RDBGMjgyMzhFMjc3RDBGMTMyMjRFQgorOjEwRUMyMDAwOEJBRjFCODM1MEYzOTMyRkExRjNGQzQ5MUM5RDI3QURBMQorOjEwRUMzMDAwRTdERDkwMTAxQzQxRjlFRDhGMzY2MjA3N0E0RDRCQTg0NQorOjEwRUM0MDAwNUIzNzFEQkU5MzJDRTM3QzhFNTAzQjUxQTE3MkFDRTIyRQorOjEwRUM1MDAwRjJDRjI2REFFOUY3ODY3RUVEOUMwMEYzQzk2QTlFNDY3QworOjEwRUM2MDAwREVBNUEwM0M1Q0M0RjhFNEU4QzM1RjRFODQ3M0UwRjIyOAorOjEwRUM3MDAwMzc0RTJGOUUzM0U3RjQ5NzM2ODJDMUMzOENFRkREMUNFRAorOjEwRUM4MDAwMUU2RkM2MzM3RkE3MzFERDc2MkJDNERCM0ZFNkZFMEY1OAorOjEwRUM5MDAwRDEzQ0U4MkY1Q0M3RkQ4NTM3RTM5OTFGRjQ2NkExODg1NgorOjEwRUNBMDAwMkYwNUQzRjVGNjZEQTM0MzRCQkEwQzlDMDc2QTI3NDE5OQorOjEwRUNCMDAwQkVGMzY3NkUyRDI5MTlGQTExMUZGMkVENzVEQzZGRkU5OAorOjEwRUNDMDAwOTg5MDZBQTBGM0VCRDY0QzFCOTI0MkRGNEY2RjY1NzBCMQorOjEwRUNEMDAwMzBDRjZGRUM2OEE2OUYxQjRFNTI4MkQ2QzVDRjFBOTREOAorOjEwRUNFMDAwQTAwREU0NzdDMzQ5OUJFMUY5REZBOTFERURENzlENTczRQorOjEwRUNGMDAwRkZDOTg3ODdBNkMzRkNBRTI0RTE1NUQwRkZDQUVCMTIzQgorOjEwRUQwMDAwNThFMDlFRjM2QjBGOUZDNzQwNzA2OTRDNTY4ODQyRTFGNAorOjEwRUQxMDAwRDEyODExREY2MEZEOUVGOUI3MUMxM0JFQjM0NzMzRkI0QQorOjEwRUQyMDAwMjU3RDVBRUNGNTVEQzRENzM3NkQ3NUNEMkY4MUNFMUE5MAorOjEwRUQzMDAwNDM1NkI0RTVBRkZCNDNDNTkwQzFFQ0U3QzY5M0U3OTFGQQorOjEwRUQ0MDAwODAyRUZFRDdBODg0MTExRThEMjdDRkM3RTdEMzU2MUY2QworOjEwRUQ1MDAwQjMwMUREQzMzODJBN0Q3RTlENDMxQjAyRjFEQTgxRTBEOQorOjEwRUQ2MDAwQkM5QkRCNDE4RDI3OTM4OTNGNTVGRjlDRjE3Nzc0RkM1OQorOjEwRUQ3MDAwMzQ2Q0ZGMkQ4N0RCNkZGNzVCQUE2M0U1NzczNThGNjYxMQorOjEwRUQ4MDAwNzAxOTlEQUVGODIwMUY2ODRDOTA2ODlCNjM3QzU3RjQwNworOjEwRUQ5MDAwQ0I0ODMxRUU1Rjk4RTdENTUzMTlCRTEyRTY3RDRFMTU4QworOjEwRURBMDAwRDE2MjdENkYzMTg3QTM5ODZGNEY0QTc4OTEwRkU5QjM5NQorOjEwRURCMDAwQUYxMEVFOTk4OEQ0REQ3REI5RkE3QjI0QjY3MkZDRjVFQworOjEwRURDMDAwRkMzMDlDMEJFMzdGN0M2MUVDNzMzQjAyQ0Y5Mzk0NjUzQQorOjEwRUREMDAwNjgyRkJGOTA1MkY3MzRDOEI3Nzk5N0QxMEFBNThGMjExMQorOjEwRURFMDAwRjM4MjE2NzYzRUM1M0YyOEJFQTM3MDk2NDk2MEUyNjA2NgorOjEwRURGMDAwNzBCNjYxQkIxOEVGQTMxNzM5M0Y1MjNGMUNGMkQ0QUY3NgorOjEwRUUwMDAwRTJGMkZGQUE2RDRCMzBFRjQ5QzhBOThGMzZDQTI4QTc5NgorOjEwRUUxMDAwM0U0MkRENDJDQjgwODRGNkVCRkMzQTBBNkIyQTU3MTY2MQorOjEwRUUyMDAwNkQ5RkI2MEZENEMxNTU5OUQ0MDY0RDYxQ0Y2Rjg2QjI5MAorOjEwRUUzMDAwQ0Q2QTg4Rjc4QkVGMkQzOENDRUNCNzg1OUQ0NjNENTdEMgorOjEwRUU0MDAwNEYzQTNGMDFGQkUwQTMxNzk5M0NBMEZDNkQwMzc5QkM0RQorOjEwRUU1MDAwRTgyRUUzMzhGNURCMkVGQTAwRTY1NzZGRjJDQjMzQjgzNQorOjEwRUU2MDAwN0UzNkRCNzk5QjQ3RjNGOEZFMjQzMkU5NENGQ0YyNDYxMAorOjEwRUU3MDAwQTJFRDE4OEQ3QUMxMjdDMzNDQ0ExNEUzM0Q1QkEyNENCNgorOjEwRUU4MDAwMkY2MUYwNUZCRUZEODRDREE1MEUzQ0VFMTEyQTQ3MEEyRQorOjEwRUU5MDAwRThCOEM3QTgzRjBFRTUxRjQ3NkJCRjFGNERGMTcwRkNEOAorOjEwRUVBMDAwMjA4M0NCODFEMTc1NEZDMUY3OEUxRjY0RUJGRkI0RTE5NgorOjEwRUVCMDAwRDM0NTcwNEYwQzk5QzNFQzg2MzgzODdDNDA3RjhEOUJDRQorOjEwRUVDMDAwNkIwRkI0RDJGNUFFQTY2MkNBMDFFNzgyRTI5ODNEMjI4QQorOjEwRUVEMDAwRUMzMDU5QkU1Njc2RDFGNkM5RkY1ODk4MENFQjRDN0JGNgorOjEwRUVFMDAwRTgwN0Q1MzA1RUZBNDMwOTFBQzBBREEzNDIxQjBGRjIwMgorOjEwRUVGMDAwQkVBM0Q2RTk4NUYzMkE5QjI5MTk5NkQzRjdFRDc0MUM5NgorOjEwRUYwMDAwRDAyNzgxREY0RURFMDNEQjkxMDVEREVCMkFFMURFMTc0MgorOjEwRUYxMDAwRjdBRURFRTAzMEJBQUU3NjBCQkIyN0EzRkQ3Q0UyNkQyOAorOjEwRUYyMDAwMjVEMUVGMzVFREFBN0QwQ0U2OTUzQjlCRUEwNzA5Q0U4RQorOjEwRUYzMDAwRDE2QkUzRERCQUYxMDlCN0FGMUEzOTRFOEUzRjNCRUEyOAorOjEwRUY0MDAwOEVGM0UwNUNDMjdFMTlDREM3NEYxQkYyRDFBRjFGNERDRgorOjEwRUY1MDAwMTgzRDg5RkM3QkY4MzZEODkxMDI3RUM3QThCRTIyQkEzQworOjEwRUY2MDAwM0NCNUQxREQ1MkQwNEFEN0I1QjRFNzMxQkM4RkEzNjFFRgorOjEwRUY3MDAwNjUzMDYzMkVFOERCMDcxNUE2NDdGOUZDRDJGRTk4NTVFRAorOjEwRUY4MDAwQTlCQUEyRkE3N0FFRTQ0NjNCNTJEOEM5OTcxM0YxNTMxNworOjEwRUY5MDAwOENGMUMyMzk5QzBGMkVFN0Y2RjFEQzA0MDZFN0Y5QzRDOAorOjEwRUZBMDAwOUIwQkVGNUQ2MTI3MkUwQjg1RDlEQzY5REQ2NUNCNDBCRQorOjEwRUZCMDAwRUYyRUIxMjY4MzdEMDM2Qjg5ODU3NzUxOUFFRDIwQzFCMQorOjEwRUZDMDAwODc4RDBGMjRGQTIxRUVGQUIxRDQ1NzA4ODMxQ0IxMzI5MQorOjEwRUZEMDAwM0VFQjdCMzYyRUIwMjVBRkZGMzhENjMxQ0NBRjZGMkM1MQorOjEwRUZFMDAwRTQ3NjVEMDFEMUUwRkM0MEUzRUU1MTc4MUUyQzJFOUVDQworOjEwRUZGMDAwRTI3MTAyQ0EzRjNCRTBGNTc5RDBGRjc0RERENzNDRTMxNAorOjEwRjAwMDAwMDhFMkI5MzA3MTVGOTk5QkY4MTNFOTc3OUE3NjBGRDlDNgorOjEwRjAxMDAwMDI3NjQ2REEwODZERkM3MjNBREVDN0Q2NzAyRUNBMEI0RAorOjEwRjAyMDAwMkFERjI0QUE1QjczQzdBQ0I5NDRBMTdDRDUzODk0REEzMworOjEwRjAzMDAwNURCNDdFRDE0Mzc3QjM3QTdFNzg5MTg1RDZBRjdERTg5MworOjEwRjA0MDAwRDE0QjE0NEE5RjhEQTNDM0VGNDNGRDk2ODc5RTY2RjU2RgorOjEwRjA1MDAwMDlFMTQ1MzJBRDZGN0M2ODNGRUIwRjdCRDg5NEIwQjZDOQorOjEwRjA2MDAwM0Y3NEUwMTJGMEZGOEYyNDMzRkI4MTc4QzM1NzAyRkQxOQorOjEwRjA3MDAwMzQzRTNEQ0FEMkExNUJFRkJBMzE0QzNFMUU3MUIwN0UyOAorOjEwRjA4MDAwNDdGMkM4NEY2NzAxQkMzREUxQzI1OUJBN0RCOUVCQzczMQorOjEwRjA5MDAwMDgzQjk2RDk3MTYyOURFMjNEOTIxOTdCRkNCMTYzOTg2MQorOjEwRjBBMDAwMUVCRDY2MUFFQjc3NDEwMjY5NzdCMEYzNzU3RUIwQzc3MworOjEwRjBCMDAwRjZFRTFBODU3MDQ5MTk5M0MyRTE0NUM3Mjk4RDhFMjM1MgorOjEwRjBDMDAwRTAyOEM2MTNERjVEMEM3QTFERTRCRTk1Q0E3RDlEOUNDOQorOjEwRjBEMDAwMzk5N0UzOEQ3RUE3MERCRjUzQUM4RDg3N0JBQzFBNjc0NAorOjEwRjBFMDAwNjU4RjA3QkM1MTdDMjkxQzVGOEExRDJGNTdEQkNDRTYzRQorOjEwRjBGMDAwNDdDNzREMkU0MTNEMzMxMUUyQ0E3QkJGQTZGREYzQTJBNworOjEwRjEwMDAwRjMzNkQzQzc4QzMxNEMxRTVERDNDQUNFRjdGNzI1OEZBQgorOjEwRjExMDAwNDAzQUJBMjA4MUQ5OEJBNDk0QzI4RkNBQjM4RDFDNkU5OQorOjEwRjEyMDAwRUJDNjI0MzMzRjMyODI4NzIxMTI4RURGQ0FFMTk3Q0RBRQorOjEwRjEzMDAwRkE5RkU5N0FFN0YwNzk5Q0VERjVFQUYwQTQ0MTdDNjU2NQorOjEwRjE0MDAwRUZDRTIyQzREM0M2MDgxREFDMzM4QzczNjQ4NUU5QkRGMQorOjEwRjE1MDAwNzJDQTc4MzA4Rjk0MTFGOERFNkEwN0IxRTM3M0IyMjU3MgorOjEwRjE2MDAwRjI1RTFFN0RFRjgyNjk3RDEzODExRjk2NzI3Qjk4Rjg5NworOjEwRjE3MDAwQ0ZDN0JDODYwNjJFMkQ5NkI2ODc2QzEwOTc1RURBQ0Q2QgorOjEwRjE4MDAwRTJFNEE0ODBBRTBGRTg2MzU2NEQyOTVGOUY5QkFGQ0ZBQQorOjEwRjE5MDAwQ0RENjE3MzBEMDI3MzlENDk3M0IzQkIxM0ZERDQ2RTA4MQorOjEwRjFBMDAwMUUxOUFGNzgwMjFGQ0ZDMENGQjFDNjAzQkUxODA4MUYwQgorOjEwRjFCMDAwMUQ2NzFCMUY2MjlFMjY3ODQ2RTA2QzlBOUY4MDI3RjA5MQorOjEwRjFDMDAwMzFCRTU3NkNFNDI3MzFDRjVCQzY0NEUyQjE0NjdFQ0VGOAorOjEwRjFEMDAwRkI5NkRGQUI2MEVGMkRCRDkxRTIxMUVDMUZENTQ4Q0Y2MAorOjEwRjFFMDAwNEI3QkYyMkNGMzhCQTNFRkI1NzdBRkYwODE5QzRGOTA2NAorOjEwRjFGMDAwNTQxNjA3RUZBOUY1ODNGRTZCREE1NTgxNzFBQUE1NEY2NgorOjEwRjIwMDAwM0RGQ0E0OUZCRUJGRjhEMTBEMkU0OEFFRkE0OEU5Q0ExNgorOjEwRjIxMDAwMDAzQkI4NjFGQjJBMTdEQzMzRjdBMUUyNzc4MUZDRkNFNQorOjEwRjIyMDAwMjgyMEM3Q0M1QjdGOUJDQjAxNjE3NzM1NzI3RDczRTQ2RgorOjEwRjIzMDAwQjdCN0NEMDQ3ODdDQjFERDhBRTcwQzlCNzZDNDA1RTNEMworOjEwRjI0MDAwMzA2RTcyMEREQTYzQjRGRTM2QUJBRkZFMDRGQ0Q4QTZBNgorOjEwRjI1MDAwOUQ0NkZCNjlGMTZGMzY2NEE4NDg0RkZFNjExNkRDMDREOQorOjEwRjI2MDAwMEIwRTgzQ0RCMEM2NkQ1NkRDNEY2OTNDMjQ3QkU5NjczRAorOjEwRjI3MDAwNDgxM0U5QkIxNUU2Njc3RTFGRTY3MTkyRTJCREE5NUIwNAorOjEwRjI4MDAwQkUwQUYyRkJDQ0VENTQ5MkEwM0RENkQ0NzMxQkRBNjlEMgorOjEwRjI5MDAwNEQzRDE3N0UwMDc2NDU5MzI5OUZBMjdFMDAzQkVDQzUyRAorOjEwRjJBMDAwMzFEQzBFRTNGN0E0MEJGODkwNDAzQURBMzdBRDBGRkVFRAorOjEwRjJCMDAwQjJFNDZEM0FBRjYzREJGRUUyOTI4QUY1N0E3MzI1RTIzRgorOjEwRjJDMDAwRTlEM0VFMDU5QjlFNTYwN0Q2QUYxRjgzN0QxMEE3N0YxRgorOjEwRjJEMDAwOEZFMTU3REQyOUIxOERBMTVEQUM2Q0IwMDY1RDEwMUZDQgorOjEwRjJFMDAwNjhEODZDRjU1MjBENEMxQTFFREVGQUMwQUZDMUJGN0M1NworOjEwRjJGMDAwMkRDRTBCQTlBNjRCMUU3RUZFOTU3MzY5N0RDOTYzRDZFNAorOjEwRjMwMDAwQjQxQTM2N0QyN0VDNzMwQjNDNDFDRTA2RDgyOTAyMkY2OAorOjEwRjMxMDAwOEI3RkZGQkMwREUyOTBGMDFDRUM1RTgxOUYyNThGRjU4QQorOjEwRjMyMDAwREFFMDlDOUYxOThFRDNCQTdCNkQ5ODBGNkJDNjUzRjdBQQorOjEwRjMzMDAwREIzM0MwMDQ2OTdERjA0QjFCRDBGNzQ3QkIyNUJDRjcxRQorOjEwRjM0MDAwREVGQzdFRkRFNkU3NUQ0MDg3MDAyN0YwNDMwNUJFMjIzOAorOjEwRjM1MDAwRjhFQjg3QjdFMENDQTc0QkIxMUZDNjQzNEU4NUJGQzdCQworOjEwRjM2MDAwMDE0NzY1NDhFNzhGM0MwRDcxOTREN0UzQkMwMDg3RkFFRAorOjEwRjM3MDAwNDdBRTc1QzE3QTNFNTA5NjMxN0FCRjZGNTUwNkRDOTcxRAorOjEwRjM4MDAwNTc2RkY1NjdCOEIxNjRDRkVCRUZCRjFFRTlGMEVBODNDMgorOjEwRjM5MDAwRDc2N0IwN0IyNEI0MkM3NjhGQTYzRjBCRDZGOUIzN0IwRQorOjEwRjNBMDAwMkZDMTc1MkUyMjc1NDg4N0Y1RjdCMUY4QzZFNzBBQTk2RgorOjEwRjNCMDAwN0UyQzA2QkZDQzJENjZGQ0YyQzE5NjM4NDgwRTIyMUY2QgorOjEwRjNDMDAwQzAzRTAyRUM5QkJDMjhFM0I5RkI3RUY3MjI5MUU1NThENgorOjEwRjNEMDAwRkY5Q0M3MTdDNjE1NDdFRUVEQjM4MzdERDdDNDdCMzVCOQorOjEwRjNFMDAwNkQ1QjFEMDIzQzFEQzlEMTg2NDAzQzlGQzJDMUNGRTE2RgorOjEwRjNGMDAwMjZDMUJERUZGMkMxRTk0MzE4OUU4ODBBRkIyMUY4MUUyMQorOjEwRjQwMDAwQjVDN0E3QzE3M0U4MUZCMjZBOEUxMkMzN0JGQzdFMUIwRgorOjEwRjQxMDAwRjY3RDExREZBMEYzOEU4N0ZERjQwRjMyNTg1RTlFNzlFMgorOjEwRjQyMDAwN0QxREM1NDIxRTkwMTBEMUQzRDk0MEZDQkY2RDBERDJCOQorOjEwRjQzMDAwRDc2Nzg3MThGRjM0MDY2QUFCQjEzRDY0MEQwRTgxRjZCRAorOjEwRjQ0MDAwNDBFRjZDMDlFNTQzOUM2MUZGM0M0MjFGREJBQzlDQkY3NQorOjEwRjQ1MDAwOERFRDc0OUU4QUE0ODdFRjZFMDlFRkQzMTRGNEIyRThBMQorOjEwRjQ2MDAwQUUzOEMzN0U3RDk0N0U4Q0Y3NDUwOTdFMTU3RUQ2RDU1OQorOjEwRjQ3MDAwNUMxRTk4RDc2RDk2MEY5NzE2OUJGRThFQzJCREU5QTdBRQorOjEwRjQ4MDAwMTVGRjZFQjAwNjFFRjgzNUYwMzNFNTVGQkYwQUZDNkM2MQorOjEwRjQ5MDAwQzVGOEMwRDFERjNERjdDQTE1OTRFRThGNzYwQjNFMzYyNgorOjEwRjRBMDAwQ0E1QjMzMUZENzNGNUU0NjYyRjFGMTUxQTc5N0M0RTRCMAorOjEwRjRCMDAwNjNGQTNDMjYxRjNCRDlCOUU5RkY1N0YyRjZFQTAxRTRBQgorOjEwRjRDMDAwQURCRkQ4Mjg2RjNGMjdDNTQ5RTcxMUQwMzM0QkYwQkVGOQorOjEwRjREMDAwNTczMzdDODVERjZCOTZBMzk5QzU2QTRDMzk0QTdGMEVGQQorOjEwRjRFMDAwMTExRDNDMDUxQzA1N0QyRTdFNjgyOTdFMjc0MkM3ODJBMgorOjEwRjRGMDAwNEUwNTFENDdFOEQ0QkM2RTIzM0NDREVENTUzMDc3NURGRAorOjEwRjUwMDAwRkU4Mzc1MjVGNTYzQzBDRTdENTYwRTZDQTE1MzNCNEUzMAorOjEwRjUxMDAwRTc3MjJCODVGRkYxREZFNTYxQkVEMTJBRUUwNzFDNzc4QworOjEwRjUyMDAwRjdCOTIwN0Y2QzE1RjczQkZBMjAyRTk5MTQ3RERFRTdBMgorOjEwRjUzMDAwNjBGNkQyNzE1RjlGMkI1OTY3MzdCREJENEI3NjgxOURCOQorOjEwRjU0MDAwMTcwRTkwRUE1OEYxMjQyQUIxNzExRTYxMzI1MDNCREI0QworOjEwRjU1MDAwMTczQkNFRTNBMUM3NzlCQzczQkFFQ0NDNkQ4NjM4NzA4QgorOjEwRjU2MDAwMTdCQkQ3N0ZFMThBQ0I1Q0IwMkY3MDdDRDc4ODNCODBGQworOjEwRjU3MDAwRkY3RUY2Njc5OURERUJFOUQ3MTRDODkzNThDMDQwNDA4OQorOjEwRjU4MDAwM0UyNEZFQkJBN0QwNzUyRUQ4QjUwNEYzMUJDQzcxOTRENgorOjEwRjU5MDAwNDVDRTZEQjhCRkYwMzlCOTE5NEI3M0ZDNjQzMUM0NTkwRAorOjEwRjVBMDAwODBERUVGMzUzRERGNzUxMUQyRDc2MjEzN0RENTAxN0Q0OQorOjEwRjVCMDAwNjVGNUE3QUYxNzA0QkY4RTI3RTNGNUU3Q0Y5NjczQjlCQworOjEwRjVDMDAwMzc1RDJFQkUwM0VDOTlFM0Q0Q0ZDNzVDMDJCOUY4MDBENworOjEwRjVEMDAwRThERENGQzFFRjA3QzZGMEE3MjNERDJFQTlGQkQwQzYxQgorOjEwRjVFMDAwRUY3MTQ2N0ExNzc0NjhGNkY3Q0RFNUIxMjdGRTNFRTk2QworOjEwRjVGMDAwMjZEQUE1RTFDOTM3NEFFRUExRTVCMTI3NUYyQjdDMDZFMworOjEwRjYwMDAwRUE0RkJEOUFGQjA2RTlERjdGREFFRUFGRDBCRjM5QkUyNQorOjEwRjYxMDAwM0IwRUU3NzM3Q0Y3OUY3MjZGODJGQUQzNzE5ODg3NzUwMAorOjEwRjYyMDAwN0M2NTFDRTY0NUY5NzcyNzA2RTAzQ0RGRjExQzE2Qjc0MAorOjEwRjYzMDAwNkI3REY2Q0IxMkNDQkYyMDZEODhDNzkzQzUzNjY2OEYyNQorOjEwRjY0MDAwRUNGQTlGQjcyMDdGRkFEMzVENzEyQUM0Mjk5QTc2MjdGNgorOjEwRjY1MDAwQTBERkRFRjRCNDAzRjM1RThFM0ZGQkU1MjQ3RDlDRTk3RQorOjEwRjY2MDAwM0Y1RDRGQTM4REM1MzM4RjI3OTIzOThGMDMzRDI3MzNERAorOjEwRjY3MDAwRkZBRUU5OTlDOTVCMjE1RjZFNjk0RkFGMERGNjA3QTYzMgorOjEwRjY4MDAwRkRGMTVGMjUyMDk3OEUzRkNFRUMwRkVBQ0ZERjBGMzdERAorOjEwRjY5MDAwMURDQTYzOUJFRUI2NTI3ODdGMEMzNjIyRjVDMzM3OERCOAorOjEwRjZBMDAwRURCRTE0RkNGMEZFNzA2MTcwMzg0RUUxMDBFQkEyNzAwQworOjEwRjZCMDAwQTkwNzc5M0ExMDNDODY4RUI1MjFGRDdGRkZFMEYxMDk1QworOjEwRjZDMDAwRkExNzBEQkJDRTQxM0U4QUMyNDVEMkQ4RjNDNDgwNUQ0NQorOjEwRjZEMDAwQzJGNUIzRTdCQkJGMkMwMTdCRUE2OEY3MEFCNDBCNEU1NworOjEwRjZFMDAwQjVFRUM5NjNCRkFGNzRGMDZERDcyRDA1NEY2N0RENzNGRAorOjEwRjZGMDAwQkVCN0Y4NjZGNEZGMTZENzU3NjYzRUU4NEZFNzRGREQxMgorOjEwRjcwMDAwODBGNTQ3MTJCRDM4REZEM0U0RkZFNkZGREZGMEZFQjgzNworOjEwRjcxMDAwODRGQkYyQTdDMkZCMkZGRkQ3RTJGRENGMUNFRjg5NkU1RgorOjEwRjcyMDAwQzgyRjNCRkVFQ0JGNzI4OTZFRkRBNzVBRjc5M0ZGNEJDMworOjEwRjczMDAwRDcxREIxOEY2NDlGMURBRUI4RUYyNEMxMTA5QzVGNUZEMQorOjEwRjc0MDAwMzU4MDlERjJFRTU4NDlFNEVGQTAxRjIyRjI3N0U0QjQzMQorOjEwRjc1MDAwQzU2ODY3Qzg2OTFENjgzN0FDMjJFQzFFNjRCRjZBRTFFMgorOjEwRjc2MDAwRjdCMUIxQkNFRkY2NkM2RjAwRTNBMjhBQUY3RTMzQURBOAorOjEwRjc3MDAwNUI4NzM3NzgzQjcwMDRBMzdGMjY2N0Q0NTQ0MzlDQTVFRQorOjEwRjc4MDAwNzUwNTlEMTcxREE3MzVEREUyNkU1NUUxOUE3NjRCMzA2NAorOjEwRjc5MDAwQUUwNENCQjdBMTVDOURGMUMzRkRGMDVEQzU2OUJDQUYwNAorOjEwRjdBMDAwRDY2OUYyMzdFMjBCNkNDNkJDNjJCMkM3MERGQkQ1MEU1MAorOjEwRjdCMDAwQUYwMjc3Qjk1MzUzRDY3OEJGNkRFRjU4QjZBRjFENEYzMAorOjEwRjdDMDAwMDI5OEI3NzlBNjcwNEEyRDE5MUM0RTY2RjgwOEI4RjU0QworOjEwRjdEMDAwODMxM0Y3NDdDNTdERkM0QTVBNDcwOEY4NTAyMUQ0OUY0OAorOjEwRjdFMDAwNjRFQjQxM0YxNEZFOEUxNEVDRDc1ODkzMTY3OTNCRDg0NgorOjEwRjdGMDAwN0U4QTFBQjlDNzFGRjIyMEI4QkYxOUI5Njc1NkI1QTBEQgorOjEwRjgwMDAwNUYyQUUwQUMxQjBGRDc2Rjg2RjM5OUMyNTdFMEM1NDE2MgorOjEwRjgxMDAwNjYyMTlFMUREOTRFNkY4MENFN0Y5NUNBRTBCRThBQzJGQQorOjEwRjgyMDAwMURFRTE3MTdGMDE1NzAzM0UzRTE3REEwNTE5RDFEMUZFQworOjEwRjgzMDAwMkQ4REY5M0FGRTRBRTI4MTdEOTZFOUYyOTRCMDFGRUNGMworOjEwRjg0MDAwRTVGMjA0QjQ5NzhGNDkyNDI4NTFGRkVENTg0NTQ2MjUyOQorOjEwRjg1MDAwRjgxNUM3NzI2QzBBOTQ1M0ZCRTg5QTc0RjNCREUwQTRFMAorOjEwRjg2MDAwM0RGMjM3RjRBMDVFNDE5MjBERjU2MzM5ODVGOEZFMzQyMAorOjEwRjg3MDAwN0I5NkUxQkQwMzkwQjc0REZERjY2MzU5RTU3NkRDMEY0RAorOjEwRjg4MDAwNzVFNzE5REU5Qjk5RTBEQTAyRUQwNzIwOEYxQkJGM0Y3OQorOjEwRjg5MDAwMDNGRDlCMUY2NDE2MTlDNjk5RjlDRUIxN0JBRkEyRTU5MworOjEwRjhBMDAwNEVFRTU3Rjc0REI1NjIzQ0ZFRDg5RkU3NTUwMjFDMkYzMAorOjEwRjhCMDAwNTRDNzFCRkExRjI0RUU3NDIwMkFCQUJFMkE1OERGNDUwQgorOjEwRjhDMDAwOUVDOTg2RUYzNkJDQkRBNzEwRTIxMDNGRjI1NjE4OUVDNworOjEwRjhEMDAwNUY1QzdFQTE2MTFDOUYzRDFDMDRGMkFFRDU2QTBEQ0YxQQorOjEwRjhFMDAwMUI5QUJGMjA0QTJBMjFFNzM1N0Y0RDk0ODlENDdDMEY4QgorOjEwRjhGMDAwNzYxQkM2OTlCODdGQTdBMUJGMzdFNDlFMDYyNkUzODQ4RQorOjEwRjkwMDAwQzNERUU3QTAxNEY5RUNCNjU0QkJERjQyQ0JCMTZGNTdBRQorOjEwRjkxMDAwQ0FCMEVGNTlGNjVFNUQyQjg0QTFDRjNCNDYzQzQwMDc1MQorOjEwRjkyMDAwRTc5MDc4REMwRjFDMjhFRkZENEI0QkEwMEVENkY5MEJBRgorOjEwRjkzMDAwMzlFMDgxMzI3RUQ4QTIxMjU4RDc0Nzk5OUQzMjZDNEI1QworOjEwRjk0MDAwREYyM0Q1NUQ1RTAyNzZENjY3ODE1NkE4NUZGMDc1Qjc3NgorOjEwRjk1MDAwMENGRTY0RUIwRTE5Q0ZENzREOTc2QjEyRkUwQUYyQjg2RQorOjEwRjk2MDAwNUJDMjFDRkYwNkE3MDVFM0YwNDc1M0JBNEJBRUQ1RDFFNworOjEwRjk3MDAwOURDOERCMzFGMzcxRDFDNDhBMjUzMDdFNUJBNkQ2RDUxNAorOjEwRjk4MDAwMEJGMkI0RjJFRjU3Q0EzMUNFQkIxMkI3RjE1RUJBQTI5NgorOjEwRjk5MDAwODlCRURCNjE5RjVFRTQyNUM1NEY5MzU5NzJGQjBGQUNCNgorOjEwRjlBMDAwMTgyRkI5RDVFMjc1NzBBMTgwN0FENzNEQzNCQTE5Rjg3RQorOjEwRjlCMDAwREQzQThFQzk4REY4QkYxMDE1RTI0MUYxQTk3NTMyOUM3MAorOjEwRjlDMDAwQjMyMzc3NDg5OEQ3MjJCRUI3QTA5Q0U1REJERjVFMjI0MQorOjEwRjlEMDAwRUUzNzcxQTdGRjY0MkNCQzlGQzhGMjA1MjA5NjA2RUY5NgorOjEwRjlFMDAwRDU1OEQwNEU3MTFERjZFRTgzRkJDOEVFRjQxQzcyODMyMQorOjEwRjlGMDAwNzhFOEE5NzlDNzBGRkIyMjNEODc0MzUzMjU4QTk3MjFEMQorOjEwRkEwMDAwOUQxNTI3MEE1ODdGMDJGMUNEMUU0RjU1QzI1OEQ0NkY1RAorOjEwRkExMDAwRTU5ODg3QjM5Q0U3Q0ZGNDRFRkQ4RDA3RjRDN0YyQTJCQgorOjEwRkEyMDAwRDE0MzA2Q0IyRjc3OUQ5NDg4QUFDQjMzQjA4RTUzNzFFOAorOjEwRkEzMDAwNUUyRTI1OENFN0M1NUMyNzE1NkMyN0UxRjFDQzFGRTQxMQorOjEwRkE0MDAwRTNCQkU2QTlBRjVFMEJGM0Q4NkZDNTdDNjdBMjY4NEIzQQorOjEwRkE1MDAwNjAxRDFEQTNERjU0M0I3MDFEODRGRjVEOTEzMEZFRERGMgorOjEwRkE2MDAwM0NDODRGQzIwQkQxOTQ3MEU2NEY2MjlDQzMzQkIyQTMxQgorOjEwRkE3MDAwMkMxOUZDRjJENDBBMkY5RTFCNEM3RDU4OEU5QzlCMDVBMgorOjEwRkE4MDAwMzhEQzBFRkZDMzczQjU5N0JFNUE0NUM3REQwMUIyOTI4RAorOjEwRkE5MDAwQjUwNzA5QTVFRjBFOUI2OEE3QTJDNkMzRUYzREM0RjY0NAorOjEwRkFBMDAwNEIyRjgzMTg0M0JDNkNFQzNGMkUzRkQyNUZCMzY3NDZBRAorOjEwRkFCMDAwQzdGRjQzQzlBNUFGQjZDNTg0NjcxQ0VBRUI4RTE5NTZDQworOjEwRkFDMDAwQ0M5RjM4MzU1QzEzNEUwMTU3MTc4M0VCRDc1NDJCNjQwQQorOjEwRkFEMDAwNDRFMzhCRUY0OTZBMkVEMERCOUQ3MDVDODBGQUQxQkY4NgorOjEwRkFFMDAwNENBRTBCOTZBNEMzRkM4MzYzRTFGOTdDOTczNjY0MkE4MQorOjEwRkFGMDAwQTVCRjFFOUI5NjdCMjNDNjQ5MUM5OEZGNTVGQkYzQTMwRAorOjEwRkIwMDAwMUJFMUM4OTg2QkU2MTE0RjFCRDA4REEyMjU0QzgwMzhBNQorOjEwRkIxMDAwOTVGQjBCOTQwQjIyQ0YyRDBBNDc0QUNGRjQ5QkI3NUI4MgorOjEwRkIyMDAwQTI3NTkwMTNBRTI4NUMzNUI4MkJCODQzMDc2NzNCQUQ4MAorOjEwRkIzMDAwRDc3MkI4RkVDRjIzRjU5N0I1MDE3RTE3REE5MTJFQUVCNgorOjEwRkI0MDAwRTUzQ0Q1OTY0Q0JBMjBDRkVFODRGQjgxNEI4MTFFNEUwRQorOjEwRkI1MDAwRUNCMDYyMzI2QjBGMzQ4MjFFRjVEOEQ5REZGNTQ5MEI1OQorOjEwRkI2MDAwNjdDMkRGNzExOTdCRDA4MkYxQkQzNzI5N0Q2ODQwMUZFNAorOjEwRkI3MDAwQzFGMTA4NzczMURFODkyOUFGQTZDMEY5ODkxMzY5NEEzNgorOjEwRkI4MDAwMEFDMDY3NzFEODg2NzBGQjg5NDI4MjcwN0Y2QTRGREEzQgorOjEwRkI5MDAwQzI2OTE1QzgxRjJBQjY3N0YzNzEyNjRGRDRGRTUxODI2OQorOjEwRkJBMDAwN0E5RDlGRkZENUNFOTVFMUJFRDQ4MUYwNjVERUNGODdFQgorOjEwRkJCMDAwRjhGMEI5MjkwM0QzNDE1Qjg1MURFRjFGNkEyQTVGNTExNQorOjEwRkJDMDAwMEM3QTYyNzk3MjIxRTY2MzM1NTU0OUE4ODc5QjlBM0Y4MgorOjEwRkJEMDAwNDNCODhCRjE5NTkzMzI1MTc1Nzk1MzNEMTA0RDRDRDcwNQorOjEwRkJFMDAwREQyMzdGRDI4NkVEMERDRDI3NTA5RUQzRTlFNDAxREZFMgorOjEwRkJGMDAwMUNFM0ZCOUQ1RDU2RjJEMzVBNUEzNkZDNUJGRTY5QURBMQorOjEwRkMwMDAwMTNGNzJEREI0MTlGMzQ5MDNEQjZFNTNBNzk0OEJBM0Y3MgorOjEwRkMxMDAwODlDOEZGNzExNDc3NzdENkJDMTgwRjcyQjY1NjcyNUYxOQorOjEwRkMyMDAwMDI5NzBFQ0NFQURFN0IxOUVDRTdENzNBREM5N0MwRkVGMAorOjEwRkMzMDAwN0Y4RUY3MTE1NkNGNzE1RjAyRkJGRDYzMUY0RDlBMDM1NAorOjEwRkM0MDAwRkJGQkI1NTlFRTBERjA5NzQxQUZGMDE2Q0RDMUY2M0M3OAorOjEwRkM1MDAwRjdDQjUwOUYzMTZFMDZBQjI3MzIzQTQ4NzkzNDdGOEUwRQorOjEwRkM2MDAwMUZGNUI5MTNFMUYyNjk3QjQyNjBCMDdCNDhBRTZFN0U0RQorOjEwRkM3MDAwQzYwMDk3N0VFREIyODQ3OTUxOThCODQxRTlFNzlGNkI1MQorOjEwRkM4MDAwODZCMTdCNzEwQjQyOThBNzM1NzIxQzhCQUY2N0E0QjAwRAorOjEwRkM5MDAwM0ZDOTJCRjI3N0QzNDYxMDBERjY1N0QzOUU3MkIwN0IzNworOjEwRkNBMDAwNUJERjBCRTUwMkZDQUU3RUNBMTE4NEI4RTREMkZCOUU5QQorOjEwRkNCMDAwQjM4MTNFOUEyRkFCODVDMDU3QjNDQkVBQzY4QzJCODM1QQorOjEwRkNDMDAwRjg0OTA4RUI1NzM3RUZDNjc5NzU0QzcwRjNGQjcyRkJCOAorOjEwRkNEMDAwOEEyMTdFNTVDRkYzOUVFQjRERjlCRjhCOUQ3QjMxMUU2NAorOjEwRkNFMDAwQjc3ODlCMzFFRUI2ODQ4NERGMDIzRTZERjhEREUwNzlCMworOjEwRkNGMDAwQkZFRjU4RDgzQzE0MEU4RkY5NzJFODRBMUI5QkQ3RjkxNgorOjEwRkQwMDAwRTNFOEY3OTdBNkY0NjJERUIxRTIwRTY1RDQyMTdDMUIyRQorOjEwRkQxMDAwM0NFOEFGNjRDNkUzQjk5QTVCODdCRTVFMTJFQkJFOTg1RgorOjEwRkQyMDAwRUUxNkFBRkYyOUNCM0RERUIyMTM0QkU3Nzg4MkVCMTkyMgorOjEwRkQzMDAwQTI4NDZENUUzQTRFMjM5N0NCOTM0MkVGRDhGNEY5ODNCOQorOjEwRkQ0MDAwNzMzOTVDOTM3NkIyRkQ2RjczNUVFQzVDRDA1NzAwMTcyRAorOjEwRkQ1MDAwQkVDRkJDNzRENjBCNTMwMDJGMDI5RjE3MjQ5MDZFQ0NERAorOjEwRkQ2MDAwNUY0RDIxNUU4RTE3MkZFMDQ1QzAzRkJBREY0Q0RGQ0JFMQorOjEwRkQ3MDAwOEI0NTE3MDJGRTg0RTVEQkM1MzM3OUQxRjc4NDAzRURBQgorOjEwRkQ4MDAwMkJGM0ZDQUZFM0ZBNTdBQ0EzOURENzA3OUE3RjNCRDc4MQorOjEwRkQ5MDAwQjc2NzdCRkVFRDVDQUU5QkQ3MjFGODU4M0MxNzdDNkNCNworOjEwRkRBMDAwNUVCNzk4Rjc5OUQzNTlDODc2M0E3NDI2RTQ0QzIzQTlEQworOjEwRkRCMDAwRjM2MDVDOTZDQjE1MDE2NzMxNEYwMUFGOUUwMUYyNUQ5OAorOjEwRkRDMDAwOTVFNjNGMThENkEzODQyQUYxQjBGQzc2NTBBNDIwQzc0QworOjEwRkREMDAwQkEyRkM0OTQyQkE1NzkxN0Y2M0JEM0Y1MDg3OTNCRDBGRAorOjEwRkRFMDAwQkE4NDlDMzVBRjRGQzg1QkIxNEUyMTc3QzU3QUE3NTIxNAorOjEwRkRGMDAwNDE4MkYyMTBFRTdFOTBDMDdGQTgzM0Q4QzMxNTcwNjJBNgorOjEwRkUwMDAwNDFCRjBGNjRGRkI5QTEzRUREN0RBM0ExRkYwRjMyNTdCMworOjEwRkUxMDAwMThEQTJGNTRENzE4REEyRkYyQUMzM0Q0N0ZFNEZEOTVEQgorOjEwRkUyMDAwQzlBRURGNkM2OEFGRDUxRTM0QjQ0RjA5ODdBNjgxREQzQgorOjEwRkUzMDAwRkRCNzk2NkFDQ0U3M0VGRkMzQkVFN0EwMUU2QzcxNjNCOAorOjEwRkU0MDAwN0Q0RjRCMjY5NjdCNUI1NEU0RUY3RDJEMUUyQ0Y3Qjc0MAorOjEwRkU1MDAwNzhGMUY5N0ZCNTk0NjNGOTQyOEI4NjY1QThDNTg3QTVDQgorOjEwRkU2MDAwNTkyRUNDRkNGRDY1MEFEOEVERTVBMTJFRjQwN0M2OEYwRQorOjEwRkU3MDAwQUZGQjBDRTRFMTAxNEJBMDM1OTFDMkU5OUMzNzk5N0RDMQorOjEwRkU4MDAwNEUwMjY2N0RGQ0U1NUIzNzgxNUU3N0IzN0JFOERBN0EwQworOjEwRkU5MDAwMjc0QjZBMEM3QkNFNDVGNTlEQTZBMzE3NTc0RDk4QzBGRQorOjEwRkVBMDAwRkVCMjhCQzRDRUJCRkM2QTFDQ0JGN0MxN0MzRDRBOUIyNworOjEwRkVCMDAwNzNFQ0VDNUVEQjM5NzMyNENDNEY5QzQzRDg3OTA1NUE0NAorOjEwRkVDMDAwMDZFQjY4RkI0Qzg1Rjg0MUZGRDczQTE1REM4RjIyRkMyNgorOjEwRkVEMDAwRkNGMDI1NkM5QTcwQkZCQTNGMEVGNDc3NUEyQTlFNTdGMQorOjEwRkVFMDAwOUEwRDBGRTk3QzY1NERDNkJDRDY0QkNBRkY4MkY5ODBERQorOjEwRkVGMDAwNTczOEQ5REZDREJBN0NGRkNBN0ZERTQ0REI0OTlCQkZEMAorOjEwRkYwMDAwOEM5RDg3MTBGNzg2QkM2RTM5MTNCQkUxMkIzODYzMDBEQworOjEwRkYxMDAwNzlBMDkyOTdGREREOTQ2NEM1QUJGNzA3NDRGOUQ3NzFEQQorOjEwRkYyMDAwQ0MxRjk4RDlDQUNGMEIxQzI0NjhDNzA5N0VBNEVCNkJFMQorOjEwRkYzMDAwODdGOTBCQkVBODc1MkJDMTUxMkVEMEY3RUJBNjQxRkY1OAorOjEwRkY0MDAwRkYwQjI3MDQyMEUwMDA4MDAwMDAwMDAwMUY4QjA4MDA0QQorOjEwRkY1MDAwMDAwMDAwMDAwMDBCQjU1QTBCNzQxNDY1OTZCRUQ1RDU5MQorOjEwRkY2MDAwQUY5MDRFRTg4NDAwNDExRTc2ODg2MDIwQUY0RTI3MUQ3QQorOjEwRkY3MDAwQzI2QjI4MTI0MDU0QzQ0NjY1MDcxNEE1NDAzMTNDOTMxNworOjEwRkY4MDAwMTg5ODE1NDdGNzc0NjMzMzA4QUM2NzM3MzM3QTVDNURBQworOjEwRkY5MDAwQzFEM0UwQTBFQ0FDRTcxMDIxNzEzMzlBMzAwRDJBOEY2OQorOjEwRkZBMDAwNTk0N0EzODI4MjY2QjE0MUU0QjEyNjc0MjQyOEUyNzBFNQorOjEwRkZCMDAwOEU3QkVGRkRBQkU4QUU0RTAyRTg1OTkzOTM3M0YzNTc5NworOjEwRkZDMDAwRkRGNUZGRkY3RERGRkI1NTJEM0ZFNDcyMDcwMUEwQkE3MQorOjEwRkZEMDAwNkM0RDFFMTQyMDlEMjIxREI3MjE1REJFRkEzQjMwRjdFQgorOjEwRkZFMDAwQzNGMUVBMEI2MDJFMDY5ODJBQkYxNjRDMkQwMTM4N0YwQworOjEwRkZGMDAwMDREQzM2OUMzRkE2NUQzREIzQ0I4NUZGNUNGRTUxODJBMQorOjAyMDAwMDAyMTAwMEVDCis6MTAwMDAwMDAwMTAwQUJFQ0Y4M0Y4RUNCM0FFQjJBRkFFMkJGNDVFMUI4Cis6MTAwMDEwMDA3QTMwRDMzNUZDRjkxMUZGOEEwRjM0ODEzOTI3MzYxRTI3Cis6MTAwMDIwMDBGNzdERkREQjM0NkZCNzVGMDVCMzA1QTBEOTNGODc2OTY2Cis6MTAwMDMwMDBEOEJGMThDQzIzMDBGNkZBNkI3OEZDOEU3RjM1OEZGNzhCCis6MTAwMDQwMDBGOTAzNEMwRkY4RDczM0ZEQUJCRjhFRUZCRkU3N0Y5RUIwCis6MTAwMDUwMDBDN0VGRkI0MzRDNUJGRERCRjk3QTgzREIwOUQwMUZFMDg0Cis6MTAwMDYwMDA0MjZCQzU0MDM1MEY4RjQ2NjMyRjZFNjg5RjlDRTk0QkVFCis6MTAwMDcwMDA0MTZBMTY3NDBFMURDODgzRDQwRTk2OEMwQ0E0NzMyNDhBCis6MTAwMDgwMDA5NjA3NUUwRjQwM0FEM0IwOEFGNzk3NjdCRUM1RjJDMEI1Cis6MTAwMDkwMDAxRjlGMURGOTlEMEREQTRGNDYzRjMzOTQwMkRDMDM4MjBBCis6MTAwMEEwMDBGRkQ5NjVGRjdENDk0QUE1ODE5QTIzQTFCQ0VFQ0RFQzFECis6MTAwMEIwMDAwMzFCMjU4MEZCMjA5MEJGMDBFOTlDQ0EzQUNCNzg4OUJFCis6MTAwMEMwMDBFRTRGNzE5RTQyNzk0ODgxQ0Y0QzNGRTZBMjRDRTg2N0UzCis6MTAwMEQwMDA1Mjc3OEEwNzg1NTNCQURDNjQ4MEE1OEVCNTU2MTgwRTEwCis6MTAwMEUwMDA4MDUyM0ExMTQxRjk5QTQwODIxRkIzMDA5NjQwRDgwQUQzCis6MTAwMEYwMDA3NEZGOEY5NjEzOTEzODM5MkYwM0M4ODI2QzNDRkY2QkM1Cis6MTAwMTAwMDAxNjlFQUY1RjA3N0EzRTZFNURCOTQyODZCMjc0OTI5QkNGCis6MTAwMTEwMDA4QkU1QjYwMjIyQkM5RTREN0VDNDVERTNBMEZERUFBQzM5Cis6MTAwMTIwMDBCNDRFRTJCRTRCMURFRjU4NzFEMEMzQkVBREZDRkNCNTYyCis6MTAwMTMwMDBGNkQ1RjU1NDA1QjA4MEU2QUZDRDU0RUFGNkUwQkEyQjFCCis6MTAwMTQwMDBGQUI0M0QyMDlCN0E5MDg3RDNEQzc5NjUzRDk0QzNCRjk4Cis6MTAwMTUwMDA4QzEyN0E5NTUzQTZEODU1MDdEOUE5MDM0Q0E4Qzc2ODFECis6MTAwMTYwMDA0ODBFRDk3MDlEQzU1OTc1QTlCNDJFMUE2NjJBRTBGNUI2Cis6MTAwMTcwMDAyNTJEMzJFQjAzQ0M4QTc5MTBFQUFENTJEMzVCM0I4NDU4Cis6MTAwMTgwMDAzRjIxQkQ1NDRFQTg5QzAxQThCRkM1OUI4Q0ZDMkM3NTdCCis6MTAwMTkwMDA5QzY0Qjk3RjBCQ0QzREYyNUIwNTRGN0YyM0E3NzZFN0NCCis6MTAwMUEwMDBCNzZBQzIyREE3NjlCRDJBNEQ2RTdDMURDRkI1QkE0RDY5Cis6MTAwMUIwMDBEQUYxNEVEQ0JDOTVFRTk0OEM1M0M5RTQ1ODMwODZFNEY5Cis6MTAwMUMwMDA4MjdDQjhDM0U0NkY4NzY0RjZCN0RFRUNFMzlDMUZEODhCCis6MTAwMUQwMDBERTJGRkE2MUM3M0I2OEZGRTcyRUUzODUxQjAwOUU3MEE4Cis6MTAwMUUwMDA0RjdCM0UzMEUxOTdEMzVCQkY2MkRGMDYzN0Y5MTNEQTBFCis6MTAwMUYwMDAwOUY5OTFBRUM3NzU2ODQzODBFNzVFNTc2RTBGMDU1MEU5Cis6MTAwMjAwMDA5RTUxQUZEMzRDRkI0N0E1NTAzMDk1RjQ3MjA5REM2QjdGCis6MTAwMjEwMDA1MERFOTM5QkY3MUYyMTNGOTk2Qzc3ODQ0OTZFQzg0NDQ5Cis6MTAwMjIwMDA3QkJDNUUyN0I1OEJDQjEzNEY4NjgyMjkzODdGN0M1QkU2Cis6MTAwMjMwMDA0MDI2QjcxRDdCNDgwRDNBNzAzQ0U2M0QwNTM1OEQ3MTczCis6MTAwMjQwMDBFNjFEOUY0QzdBREZFOTZGNjIzOUQ0RkJFQjk5QzZGQzVGCis6MTAwMjUwMDBFNzI2RjYzMzE4ODREN0IyQUZERkNGRTAyMUJCODlFMkJGCis6MTAwMjYwMDBEQTRBRUQ0Q0MxMzRBODMzNjFDMEVBNzI0QzkzNTM5MDIyCis6MTAwMjcwMDA4RkFFMzBCOEU5N0FEMTIxNTc5MENFNTVEQ0E2QzhBOTA3Cis6MTAwMjgwMDA3ODJFRUY0OTM1NDhFNzVFODc2QTUwNkMxNDI3MDM3MjcxCis6MTAwMjkwMDA1RkJDNkUzMzQzRDg4NjcxQzQ5NjY5MDIyNTRFQUU2MzQ3Cis6MTAwMkEwMDAyRjg0ODIxNDA3RjVCOEQ2OUMyNEVDNzlEMkU1N0E5OThDCis6MTAwMkIwMDBFMjk2RDNBQTZFREY4MkYyODQzNzkzRENEQjVDRERDRjdCCis6MTAwMkMwMDBGRDk2REJDNDcyRkYzMkRERjc5NjFCMjkzODVDMjM3RDc3Cis6MTAwMkQwMDBGOTY0M0ZFREFGQkM0OEY2RDM5MEVDQjZFMTczODk3MTk5Cis6MTAwMkUwMDA1QThGOEJGQTNBQkFEQzc0Mzk1NjNCQkIzOEVFMkY1RjIzCis6MTAwMkYwMDBEREM1NzEyRjcxREY2QTEzQThGNTI4Nzc0Rjg1QUJCODdDCis6MTAwMzAwMDAxNkQ3Njk1RjAzRjM2N0UxQjhDRTgyMzRBRkZCRkM4Rjg5Cis6MTAwMzEwMDAzQ0U1RUY5M0JENEM5NTI3QjQyQTc0MkVBN0U5QUE3NjQ1Cis6MTAwMzIwMDA1REJERkExQkRFQkZEN0ZCREFGRUQ1MkQ1RUU3NDI0Nzg3Cis6MTAwMzMwMDBFQ0JBQTM0ODEyNzExRUNDQ0U1M0Y2OTgzRUFGNTdFRkRECis6MTAwMzQwMDAxMzNCRTcxOEYyRDZBNEVGNTU0M0RFOUE4QzkxMzZGRUE0Cis6MTAwMzUwMDA3RTg1RkQxMUMzNzhBQUYzMzFDM0ZDNUIzMkQ3MThFRTVBCis6MTAwMzYwMDBERkVBREE2MEI4N0Y3QkNFRUYwREUzM0JEQzJGMThFNkU3Cis6MTAwMzcwMDBERjU5QjZDNTcwN0Y5NkYyMUY4NkZCMzM2NTUwMjRGNEIzCis6MTAwMzgwMDBCOTdDMjk2NDIxM0Y5QjBCRjU0Q0U3NDEyQkQzMDdBMDk3Cis6MTAwMzkwMDA5M0E5OEE5NjQ0NzQyMUI4OTkzRTA0M0VBNjJCM0NBQUEwCis6MTAwM0EwMDA1Qzg0NzYxM0I1NzQwRTIwQkZFRjc4RTNFRjc5NjQxN0ExCis6MTAwM0IwMDAxREJGMUFFRkNDNzJDNUYyQjI5RUE3N0Y2QTNFRUU2M0Y0Cis6MTAwM0MwMDA0NTNERjU2MDBGMDM4QTg0RERFQUYxQkU1N0ZEMjRDNDg0Cis6MTAwM0QwMDBGQjY4MTFDNjEzM0M2N0I0MzE5OUUzNEMzNEE1NEY0ODEwCis6MTAwM0UwMDA5MjYyRjEwNDJERDI0NEY5NThGNzVCM0RCRTE0Q0Y3M0VECis6MTAwM0YwMDA3RkIwOTJGQ0U4M0QxOTQ2QjhCQUM3OUJBOTY2MkMwREEwCis6MTAwNDAwMDAzQzc0REQ5RDczN0Y3RTZDRkZBMDA5MTY5MzlENkQ0NzQ0Cis6MTAwNDEwMDBGQTNBRjJEMTc3NUVDNEVDOEFFM0E3ODBGODQwN0I5QjdFCis6MTAwNDIwMDAzQzc3MEE0NEYwRkE0QzI3MjgyMUNBNDM3NkM4NDhBMkYwCis6MTAwNDMwMDA1ODc4QjkyQjZGMzYwNjg4OTlERkEzQTJEMDlFN0Y0OEUzCis6MTAwNDQwMDA1NzBBNDlERTgxQTcyNkE0OURDQUQ1RTJEMjhEQThCRjRFCis6MTAwNDUwMDBFMzI2RTYwNzk2NDhBMTExMjg4RkE2MDYzMUNFNUY5NEMxCis6MTAwNDYwMDBDNkZDREQwNzYxRDZFM0ZEMTBCMTEwRkZGMzAxMzg0RTg1Cis6MTAwNDcwMDAyRjAwMTdEMzA3NDE2MTdERTJDQUM5MDUxODlGMTYzNUMxCis6MTAwNDgwMDA5ODNEMUI5MUNGQzJGNENFRTFFNDlGRjk2MzhGQTY0QjU4Cis6MTAwNDkwMDA3ODJFMkNFRDE0RTJBN0QwMDRFQkE5QkVEMUY5QThENTkzCis6MTAwNEEwMDBGOEQ4NThBNDU0RDBGOTBBRDM1QjM3M0U4M0ZCNzczNjhCCis6MTAwNEIwMDA5QTYwMkJBRTczN0FFQzYzMEY0MzVDM0VERUVFMjk5RkFECis6MTAwNEMwMDA0RUYzNzY0OEEwNTA1RTBEQjREODQyREJCMjY4RkZDRTQyCis6MTAwNEQwMDAwMTk0MEZGNDc5MkIzQzE1MzM4QjcwREREOTQ1QzBGQUFDCis6MTAwNEUwMDA4NkQ2QkYwMEU5Njc5NjUzQzgxRUE2RjQ2NzE5RTA3MzY1Cis6MTAwNEYwMDBDMzdDRjkzREY5Njc4MDlGMkIyNDU5REUwMEUyNDIxOTQ1Cis6MTAwNTAwMDBFRkNCRTM4NzVGN0Y2RENFREEzQ0U2Mjc0MDc1REM3Njg0Cis6MTAwNTEwMDA4RjNBOUZDRjZGQzU1ODQwRTdERjZDMEI2REU1N0FBQjI0Cis6MTAwNTIwMDA2Njk4ODRFN0FDN0NDOTY2QTJGQzdGMTRFMzMzREMwQ0RDCis6MTAwNTMwMDBGMEI5REZDRUY0N0ZGQzRFQTY1RkY4MzM5OTFFRjdCQjBGCis6MTAwNTQwMDA5ODdFRTlDRjYxQkFFODdCNjQwMEY1NzdCQTQ4QTkyMkMyCis6MTAwNTUwMDA3RTdBRTNBM0Y3MzgyM0Y4ODg0QTMwQTdERUQxRkQ3RTAwCis6MTAwNTYwMDBBNUU2MEYwNTBEMjc5RjRDMjYzQjY4OTJERDY0QTdGOTkxCis6MTAwNTcwMDA4RDY4OTg3OEVFNzNDRDYzNDI3MjU2QkM1Q0Q1Qzc4OTlFCis6MTAwNTgwMDBDRjgyQTY4RkZGMzBCRTg0OUUzMzNCMjU5QzdGQUVBOUQxCis6MTAwNTkwMDA2QjAwRjk2RkUyRjlBRUM4QTNDNTJBRTRBMTlENzc0N0M1Cis6MTAwNUEwMDA1QUVCNDY3QTdFNDdFMzcwM0EyMUM2MTExMDc2NDhGQTM0Cis6MTAwNUIwMDA5NDdBRTI2MzBEREJDOUFGOEE0NEJFQkZEM0Q2NTlFMjU5Cis6MTAwNUMwMDA3NEM0RjgwMzJBMzEzMENGRDQ2QTc5NjZBQTdDMzk5NThECis6MTAwNUQwMDBGQzYyMTZBRDNCOTZFQ0ZBQTYwRjY4QkZDMDAxRTE4NzNFCis6MTAwNUUwMDBBOEQ3RjlCRTM4N0ZEQUE1Qzk0MUE3RjkyRDU2MUZGOTVBCis6MTAwNUYwMDBEMzhFOTY0RkVFQkExREU1MzA3M0RDQUQ1RUQ5MTU5QkY4Cis6MTAwNjAwMDBGRjMyMDlDMTRCRjY3REU5REY5RkM5RTBGOTRFREE2QTk2Cis6MTAwNjEwMDAyRTZDOTlFQUM0NzlGN0Q5RjdCQzRCMjJCOERGNzk3QzA0Cis6MTAwNjIwMDA2QTFBOEVFNzY3NEFGQjg4MkU3MDY1NEQ0QkE3MzgwMDIzCis6MTAwNjMwMDAyMTdFRkVDMTlDQzlGQkM4QzQ2NkI4Njc1OUE5OUU5OEIzCis6MTAwNjQwMDA0QzRFMTUxNzc3MkJFQzE4NkYwQzcxQkU5RjYxN0M0QkNECis6MTAwNjUwMDBFNjYwQzNGQzVCNUREOTg2RkJCN0U3RTQxQUVFRUJGQjEzCis6MTAwNjYwMDBDRTcwMTcxQkU2OTFCRjUyQkQ4RDdDQjBERTYxOUIxQzI2Cis6MTAwNjcwMDAxQTIxOTExRDVDRjg2QzE5RjMzRkI3ODRGODhGQTJGQzI2Cis6MTAwNjgwMDBBQzU4Mzg5QzI5REJGMERDMzMxNDM2MUFGN0E2OTI3RjdECis6MTAwNjkwMDAyNkQ2QjVDQjVCNUVERUE3Qjg3QUFGNkJBQkMwRDczN0RCCis6MTAwNkEwMDAyQ0Y1NUVDRkY2NTYwRjVFNkY1RDhCNzFFNDBGMTQ0NzJECis6MTAwNkIwMDAwQURGQjhDNzE5QzQ3M0VDMTg3QkU5MDYxN0YyRjc2MUIzCis6MTAwNkMwMDA1MUNGRjU2RTU0QUI3NzEzRURFODhBQkQ0QTJFNjEzRkVBCis6MTAwNkQwMDAwNzY1QTA3QTQ4QUY3QjEzRUQwOEUwNDlBRDBFMTBGNDMyCis6MTAwNkUwMDBBN0ZBRkJDQzhGNDRERUZBOEFGQ0JFNUZCQzdENkIzNDdDCis6MTAwNkYwMDA1NDY0QzgzMzg1NTZDQzJGQTg5RkNFQkZDOUIwOTUyRTYxCis6MTAwNzAwMDA1Q0M2NzNFODdBQzg4RUQ5M0YzQ0I0RTVERDQxMjU3Q0YwCis6MTAwNzEwMDAzRDQwNzU2RDE1RTUwNTVDM0ZEOTIzODk3NTk3RUY3OUU3Cis6MTAwNzIwMDA3NzUwNDZFQzNFQUMzQTZFOTgwRjRGNDhGQjBDRTNCNTYxCis6MTAwNzMwMDA1OUM2RjFEMzkzRjdDNTNGREY1QjNDQUFEQ0Y0ODg1NTdCCis6MTAwNzQwMDBDNTM4NURGOUFDQzRGOTJBRjFCRTdFOUVBOTdCOTMxNDJECis6MTAwNzUwMDA4QTlCRTY2NjFCRjc1MzU1NEUwNTE0MDc1NTREOTg0NzdGCis6MTAwNzYwMDA3QUM4RUI3QTdDOTgyQjQzNEQ0RjcxNkU4MEI2RUU4QzM1Cis6MTAwNzcwMDBCRDQ5MjBGRjhDNzU4RkEyQUREMDc5MDJGRjI1RjJDRDQ3Cis6MTAwNzgwMDBEMUJFMEFGOEUyRjZDOUYyODhGQUFGMjNBREVFOUZCRUY5Cis6MTAwNzkwMDBDMzc5MUQ3RjA2Mzc4OUJFMjM0REM0REQ4Mjg2RDMyNkVCCis6MTAwN0EwMDAxM0U1QkYzRUMyNUUwQTlDMTE1MzNBRDJFOEUyRTQwMDcwCis6MTAwN0IwMDBBMDNGNTUyRjQ5MDk5ODBBRjFGRUYwQ0U0RkVDQThGQTU4Cis6MTAwN0MwMDA1MTlFNDEyRkQ4NTE2RjlGOTk0Qzg2RkMxM0E1OTg4NzU1Cis6MTAwN0QwMDA2M0NGQ0VDQ0I5OTQ3RjZFREY5QjE0MzZGRDBDN0UzQzhDCis6MTAwN0UwMDA1NDczMjAyRDJDMTc3RUZGMDBEOThERDg0NzAxRjQ4RjJDCis6MTAwN0YwMDBFQURGODFCRUFGNDI3MTgyRjhBN0YxMzJDRjkwQTNDRjdBCis6MTAwODAwMDBFMkJBRDUwNzQ1MUNDMERCOEVDNDdFRjZCRUI4N0UxNkE0Cis6MTAwODEwMDAzNjA5RkZCNUUzMkZENTNCNTUxMDlBRTYyMERDMjA4QzM2Cis6MTAwODIwMDBGRTBGQkY5Q0ZGQ0ZGNDM4MzJCOENFMjEzRkJGQjlCQjFCCis6MTAwODMwMDA1RkVCN0U1RjdENThGOEZERjlFNjZGM0ZBMjM4N0YxRUMzCis6MTAwODQwMDBGMzVGQkNERkVCNzJEM0ZEQkRGQTc5OTlGRDUyQkY3RTM5Cis6MTAwODUwMDBBRTU5OUUxRUVBNDFDRTY1QkE1RjI5NkVGNkQ3NUFBN0Y5Cis6MTAwODYwMDBEOEI3NzZFMkM1QkIyOENGRDVCNkEwODZBNEVFRkJFODA0Cis6MTAwODcwMDBCNDdBQkQwQ0FFQjg3RDc2RUNCNjJEMEUzOTYyN0M0NEYwCis6MTAwODgwMDBGNUZDREFGMjZERkFFNDNDNDFENzUwRkU4NTNBMkRGRUQ0Cis6MTAwODkwMDA4OEJBMDZGM0FBMjU4M0YyRUEyQ0M5QkQwREM5RTE5NkYwCis6MTAwOEEwMDA4MUU1MjRCRkMzMTI4NDVEMUU1RUUyMUUzQjlFRUY2RTk3Cis6MTAwOEIwMDBCMTFDNUQ3NzUwN0QwNjk5Mzk2NkRBRTcyRTREQUY3NzJBCis6MTAwOEMwMDA2QkY4RDJFQzk2RDkyMzI4REU3RkQyQjBGMEIwNDI1MTNCCis6MTAwOEQwMDBDRTkzQ0RGQkZEMUEwMjVDMUYxRTRFRjMwRDVEODlFNzIyCis6MTAwOEUwMDA5QzE5MTQ3NjdFMzhBREIzOURGMEE4QzMxMzkzQTVBMEQwCis6MTAwOEYwMDBDNEVCQUY4REFGRkYwRTVCN0M0MzZCOTgyRjBEOTc1MjBGCis6MTAwOTAwMDA0NkNCM0YyNkZGODQ3RTU5OEI4QkE4Q0Y4MDI0RkEzQkIxCis6MTAwOTEwMDBGNjAzRjNBMEE3MTk2NzU4MDJBMTdEMEFFRTVCRTUwRTY2Cis6MTAwOTIwMDA3MzlEQkEwQzA0MkU5MDU4REY1NzRERjhEQTRBRjkyMTFFCis6MTAwOTMwMDBCMTFGOUREQ0I0RTc4ODU0RDAwMzhFOTE2MEI3RDdDMjU1Cis6MTAwOTQwMDAyRDEyRkJFMERFRjA4NzFGRDI3RERCM0M3MUY4NjE2Mjg3Cis6MTAwOTUwMDBCRDdFQTUyRUQ1RUJBQTZEQzlBMUFENzg5RUI3MjdGRUE5Cis6MTAwOTYwMDBEQkI5NjUzODVFQjUyREQ5NDk3REY3RDk5NzZDMDE4QTE5Cis6MTAwOTcwMDBDRjY3QjdEQTQyMTJERTNGOUJERUQ5NDY3REM4RDk5REVDCis6MTAwOTgwMDBGOTZFNUMwMTJBNERBRUZGN0M4REYyRkM5RjJDNkMxNzNBCis6MTAwOTkwMDAwMDZFRTExRjU3RUNGNEQxNjMxNEVGNkFCN0E1NDg0MDJECis6MTAwOUEwMDBGNUI1MkFFRUVCM0RBMEZDNkEwQUQ3MDk0Qjc2MEQwQTk1Cis6MTAwOUIwMDBEOUE0NTg5RTIxRkY3MDYxNjk3MTY2NzM5MjQyNDVGRjA4Cis6MTAwOUMwMDBEOTAzNzdGNzI1RkNBQURERjRGQTMwQzZDM0U0Mjc4RUY1Cis6MTAwOUQwMDAzRDg2Q0YyRDdCMjVDNTQzRjUwNEU0MDFFQjZERjFENkIzCis6MTAwOUUwMDA1MTVCQTgzRTdFRDFBMkVFMjdGRTJCNUVCRDYzNjAxNjUyCis6MTAwOUYwMDBBREZGNzE3RjIwN0VBMkNEQkIwNjUwN0QxNEFCREI3QkFCCis6MTAwQTAwMDBBRUY3Q0UzNzY3Rjc4NUJDOTg5Qzc0M0M3MUZEMUZENzU1Cis6MTAwQTEwMDBGODQ4RUZDOTkyOEJBRjlCQTE0NjE5NEM3NkQxMzQwQkE1Cis6MTAwQTIwMDA2ODVEOEYyQzI5RTQ5NzlEMUI5MkI5NEU0REI0QkI2MzMyCis6MTAwQTMwMDAxRUQxQTcyQ0Q3RjE4NzdFNjBDRjI0RkY1MTgxRTUxMDBFCis6MTAwQTQwMDBERDkwQkI3NTIzQ0FFOTNCNEZCQTk2QUYzQjQ3REU5NUI1Cis6MTAwQTUwMDAxRjZGOUY2RDU1NkY5MTdENkVCMjMxMkVEMjlFNjRBQzJCCis6MTAwQTYwMDAxQjc0RkFCRjlFMzRERUE3RDI3RUMxODA0MzU0QURCRTU0Cis6MTAwQTcwMDA2NDFDRTc2MUJGODdDRjdCODJBRUUyNDc5MEFFRDRFNENGCis6MTAwQTgwMDBERjM1REFEN0UxQzFFNzk3RDZGRkZFOERGNzU4MkU5QjA5Cis6MTAwQTkwMDBGRUYxMzNEQUY3ODA0M0UwMzFFRjA5RjkyNUY2MDM5NUVCCis6MTAwQUEwMDA3NjgxN0IwMDZDRTFGM0VBRDc0RjZGRkVCNDgwRUNGMDA3Cis6MTAwQUIwMDA3NDYzRUU0OEQyRTM0MkI5RjVENDhCQzhFN0I5OTRENjUzCis6MTAwQUMwMDA2MzhGMjNERDc5RTAyM0Q2NEJFMjc5MTNGMTlCNzY0OURFCis6MTAwQUQwMDA2MjdFOTcxMzFGNzhGRDFFQUY0RjJFRUVDRkVFQ0M3REJBCis6MTAwQUUwMDBEQ0MyOERGOTJDQkZBOTcyNUU1RkQyNjNGNDZDMkZGRDVFCis6MTAwQUYwMDA4QTc2NEU3RDdERkQ3Q0ZBRkFGQTNDNjdCMUQwRDdGQjUxCis6MTAwQjAwMDAxQUZFREU2MTZEM0Q0N0ZBRUQ3ODIzNTcyMjdDRjBDQTZDCis6MTAwQjEwMDBGNUY0RDY4MkI0Mzg3QkY5QTU3MEY5N0IzNTdDRTQ4ODhFCis6MTAwQjIwMDA2OUNENkZBQzY4OEZFREY1Q0Y1OEQ0RjhCOEY3MTNGMUY1Cis6MTAwQjMwMDBGODJCRjVBMDAyMkVFNzAwOTE0QTM4NkYyMTczNjYxQzRFCis6MTAwQjQwMDA0RkQ0QzdFNDBDMzg5RUEwMUQ0RkEyRjNBMDVGNEVENDMzCis6MTAwQjUwMDAyODJDNTUzMzE5NkZBN0Y1OTAyNjQxODhDN0MxQzk2RTU3Cis6MTAwQjYwMDAxN0QxNDk5MjhGNzEwRkJENkY5ODA2MzU0Mzg4MEY5MzQ3Cis6MTAwQjcwMDAzREMyMzhFMTVBQzIyN0IxNkU5OTlEQjZFRThFMkNEQzhCCis6MTAwQjgwMDA2RjZEN0Y1ODQ3RjVDQzVBOEJGMDhCQzA4MjY0RUVFN0NGCis6MTAwQjkwMDA3NDM5RTk3OTA2OUM3OTg2RkNCMkQ2MDkyRTMzQUUzM0Q2Cis6MTAwQkEwMDBDNzBDRUIyREU5NjJERThEMjhFN0MzMDcxNkJFNEJCOEY0Cis6MTAwQkIwMDBFQkE3RTY5QUZFQjRFRjUxQzdCM0Y5OTI4OUVBQkM1MEFECis6MTAwQkMwMDAwQUY1OEM5RjdERjQyN0VGREY3MEVFRTdBMDRDQTRCQTA2Cis6MTAwQkQwMDBFMjlFRkQ3NjhFRkI4OUY4QzQyMjUwNzk1QzA5MTFDQjI4Cis6MTAwQkUwMDAwNTdDRUU4QkIxM0Y2Q0RCMEIzMUJFQkUxOEY3NUQyMzhECis6MTAwQkYwMDBGNTA5RjdBNTNERTlBNUU3MDNFNTkwNDM3OUU5NjI1MkQ4Cis6MTAwQzAwMDA2QTAxRjFCM0RBMkVFOEEzN0Q1MkI3MTIzREVCNzQwNDBBCis6MTAwQzEwMDAwODk3QkQ5ODM0MkM0NEY5RjQ0NTQ5N0Q4MEVDMTk5RjIwCis6MTAwQzIwMDBFMzNFMzY3MDJDMzk0NEY5RUU1MTU5QUQ2MjFDM0FDRDkxCis6MTAwQzMwMDAwQTEyQ0U4RkY2RDdFNEQyMDEyQzk3QTg0NTlCRkY4REUwCis6MTAwQzQwMDA4QkM3MjUxNTFFQzYyOUUxQTI4QkUzRjJGODg0QkM1MzlECis6MTAwQzUwMDA5MjZCMTJGREQ5OEY2MkZFQzQ0RUIzMjFFRjk0MTQ2QUQ5Cis6MTAwQzYwMDA3OENFREY1RDVDQTc0RUZBREU3Q0Q1QkM3NEI5NThGNDUzCis6MTAwQzcwMDBCQjI1RkQ0QzM1M0RENThCQ0Y2OEY3ODMxMDk2MDVDRTRGCis6MTAwQzgwMDAyM0VBODVGMTU3RUM0QjkxNDk4RjU1REFCODhBRjIxQTZECis6MTAwQzkwMDBEQTU1MzRENTFFOTA5MURGRjFDREMyQ0VDNjlCQzM3QjExCis6MTAwQ0EwMDA4ODYyOTQ4NUQ1NTQ1RjM0NjFERUQzQ0Y4MTcxMDUzMjdCCis6MTAwQ0IwMDA3M0Q5MUVDNkU5NzY4QTZCQ0RDMzc5RUJBNDFBRUU2M0FECis6MTAwQ0MwMDBFQzU0RDcyMEREMjhCNUYyMzk3RTA1OUQ0QzE1MkQ5RkJCCis6MTAwQ0QwMDA5NzgzOUJFOTE0RjAzMTQ1M0I2NTNBMURFQTk4REUwNjlGCis6MTAwQ0UwMDBGNTRDNjc0MEFCQzhGRkEzQzM0MUNFNkJGMDg0OTNGQkM4Cis6MTAwQ0YwMDBDMTVCMkI0RDU0Nzc5NEZDQkFFN0ZFQTE1MThCMjdCRDA1Cis6MTAwRDAwMDBDQjAxMURBRkY0QTdDQjYxMUFBMEZGNjVGNzIwOEYyMTlGCis6MTAwRDEwMDAzOTFDNDcxMkU1OTFFOEE3MTMyMTIyQjM5RjUyODBDOERFCis6MTAwRDIwMDAyNkZDQzBDNUZFNUEwMTBBOEZBNzVFQTcxQ0NBMjJBQUNDCis6MTAwRDMwMDA5OUYxOUI0NDc5NTRGNDZDMTdCQjM1QkJBODI1NUJFQjQ4Cis6MTAwRDQwMDAxRkQzNTM1N0IxOEJDN0JBQkVEMEJGMzJBOTBFNERENEYzCis6MTAwRDUwMDBBMzdFQkQyNEI5QkNDQjg1QTFGOEIzNUQyN0U3OUEzMTRBCis6MTAwRDYwMDAyRjk1MTQ5N0FGQ0NDNjcxN0JGMUI3NzNDRDk4Q0Y0QTRFCis6MTAwRDcwMDBDNjk3RUYxQThFRTM3M0JCQkUxM0UzQzJGMjYyOEIxQkZFCis6MTAwRDgwMDBCQjk4MzUxN0U3NEVDMUY5MkFGOTY3MjE1MUY0NDM4QTE4Cis6MTAwRDkwMDA2N0FBRTg4RjU3Njk3NThDQkFFNjM3NkUyN0ZBOEIzQURGCis6MTAwREEwMDBENEUxMjYzRUVENThFQzEzM0UyQTY3OEJGNzhFQzNBNjlFCis6MTAwREIwMDA4N0Y3NUE3MERFNDk4QjdBOThGQzc3ODUzRDlDRUE0MjJBCis6MTAwREMwMDBGOUFGNUEzMzc1MjA4NUNFQTdBQzYyQkVDRDI2NzA1QUQ2Cis6MTAwREQwMDA5RDNGQkMxRTQ4QzJGMUNFOURCOTJCQTVFMUQ3M0UwNzcxCis6MTAwREUwMDBBRUZGMjVBREFGQUUxOTExMjBGRjU1MUIyNUI3RDA2QzU2Cis6MTAwREYwMDBGOUMwMzkyOEMzRjY1NjBCMTA2RUFBRUZGN0U0NjhGNTcwCis6MTAwRTAwMDAwQ0U3NDc5NzlCRTNGNzYwQURDRTY5REY5OTlCNEI3QTgwCis6MTAwRTEwMDBFQTJBMTYzODE4NjQ2NDE1OTMxQzhGOEZGNjc1RDFGQzc2Cis6MTAwRTIwMDA2ODhBQjBCNzJFQ0FFNURFREVFOUUwMTJFNTFCOUE5RkJDCis6MTAwRTMwMDA3ODNERkExNTFFMDA5RjM3OTdBODE3RTk3RTc1RjI2NTcxCis6MTAwRTQwMDBDRUZCRTc4QTNFNUUxN0M5OEFEOUFEODQ0QTlCODdGQ0YwCis6MTAwRTUwMDAwNzE1MDg1OTM5M0Y0QzcwNUVBOTUzMjlERTJEQzI3NTFDCis6MTAwRTYwMDA1MDFFMjUzRTM1NDgyMTZFQ0NCQ0NFNTI4QUFCQjhBRTYyCis6MTAwRTcwMDBBOTA0RjdBOUI2NDY4NjE1RTE3M0NGREU3RENDMkFFQzJFCis6MTAwRTgwMDA2RTg4QjAzQjJEMkVCNUVDM0VGOEY4NjAzMUY0NDE5Q0Y1Cis6MTAwRTkwMDA5RjU1RUZCRUY0RERFNzI4QkZFQUYzMEUzNzREOEZGOTFCCis6MTAwRUEwMDBENzBCMkJCOURGMDQ4NzIxOEVFODdFMzdBRUM5QzZGNTk0Cis6MTAwRUIwMDBGNkY4RTY1MThCNjhERUM0OEZEQkIyODlBRjQ5NkQxMTVECis6MTAwRUMwMDA3RThGMTY2REY5NzRCMDM4ODdERTg3NUM5NDdFNEUzRTU3Cis6MTAwRUQwMDAzRUFERTU4OUQzNzY5MTE3RThCRDMwRjc3QjhERTJCRDU1Cis6MTAwRUUwMDA3MEFEODY3M0Q2QjY0OEExMDBDNzFGRDEzRjJGRDZGODg0Cis6MTAwRUYwMDA1QjcxQjA3MTFGRTEyNzhCMzczRDM4ODNFRDI4MjRGQUYxCis6MTAwRjAwMDAwQTE3RkU1MjVDNTg3QTQ0RjRDRENCQjYxQkZCOEQ2QUFGCis6MTAwRjEwMDBFQTlCNjkzRTg0QUQ2NDBGMkJFQTEzRUU2RkFBRTBCRTM0Cis6MTAwRjIwMDBCOTNBM0VGRUY3RDAzNzdCNEIzNDdDNkMyODBDNjVCRTVCCis6MTAwRjMwMDBFNDc5N0RENTFFRTI2MTYyNUY1QzA1Q0E4NDEyQUU3QkY2Cis6MTAwRjQwMDA3RDMyRURFRjM1Rjc4QzNGRjQyRkQwREY5Mzg5RkFCRDdBCis6MTAwRjUwMDA1MkRCOUJFNEU0NjBCOTU4Qjk5RkE4RERCQ0QyRURBNDk0Cis6MTAwRjYwMDBCMUU2Qjc1QjRDRDQ1M0UzQzQ3NzNFODBGOEU3NzQzRkY3Cis6MTAwRjcwMDA1RUIyNUVFMkJFMDMzNkY1NjMxQjJDN0NDNUE2MTBCRkQ1Cis6MTAwRjgwMDA4NUFGMENFNDNFMDRGQjI1QUUwRkI3QkM2MjVCNEZFM0JDCis6MTAwRjkwMDBFMEVGRkEwNEU0NDJDMkExM0I2RjIwMUMyNjk4ODRGNURFCis6MTAwRkEwMDBBNkMwRjM0MUYyMzAwRUMzQjhDODIzMjU1QURDRDdFQUY1Cis6MTAwRkIwMDAwMDA4MTcxOUZBRjlBMDk2RkY2QjUzNDYwRUM0Q0UzOUY0Cis6MTAwRkMwMDAzNkVGQzAyMDQzN0YxMkQ0RUFFRDEyM0EyN0Q1OEREQkVECis6MTAwRkQwMDA2RjEwRjc5MzA0MUY3QjNFRkM4NzY0QUE3QjFCQ0RCRTdBCis6MTAwRkUwMDA2NEMyQjVDRjFGMUFDRTdENEM2RjcyRjc2MjFBODJBQjA2Cis6MTAwRkYwMDBCQ0E3RjQ3RTNBMjNGQjZBN0EyQjc5REUyQ0U0QTVEOUQwCis6MTAxMDAwMDBFRDlCN0UwNUJFQjRDNEY0QTJGMzM3NTU3RUFEQzI0QTUzCis6MTAxMDEwMDBCOEM4NDNFMDI0OUNBNEY2RTBDQjQxM0JGNTg1MUI4MDk3Cis6MTAxMDIwMDAxMTg4RjMyMEVDRjlGQzE5MTNCRjc3MkY4NTlDN0Y5RDY1Cis6MTAxMDMwMDA4MDYzRUYxOUIzM0I4NENGMzc2ODcxOTFERTNGQkJFMjI5Cis6MTAxMDQwMDBFQ0NDQTZFMUJGNDlBRTNFRTA4QUVCQTM5MzczRDIwRDkwCis6MTAxMDUwMDBFMzE0RjcwRDg2RTdGQTk2MEQzN0RDNDc3OTZGQTVGNUFGCis6MTAxMDYwMDAyMUEwQjRFNjk1QzZFQURFMzQ2NUI0RTFCOUE3NTJBNzdCCis6MTAxMDcwMDAxRDYwQkY2RjdEOTg3MUE5N0VEMzNEQzZGM0M4Q0QzMjg4Cis6MTAxMDgwMDBDNTAzQjgyMEVBQTUzMkZDMjU3RjFCMDM4MTIwRTk2MzU0Cis6MTAxMDkwMDA1Q0JCQjE4RTJBOEJENDcxREY5ODc0Qzg2Q0MwMDE2Q0I0Cis6MTAxMEEwMDBEN0MwQTVCNjkwN0Y1MTlDMUMwMjQzNDREQzQ4OTRCNzNFCis6MTAxMEIwMDBGMUZCOEJEQTgzMzJENzdCQjU0M0IxNTBDREVBNDlERTAxCis6MTAxMEMwMDAzNzE5RTRBREZCQTMyRUY3RkUzRUEzREMwN0NFMzFDQUYxCis6MTAxMEQwMDA3QjkwNkE5NEY3RTBDNTQ2NzkwRkFEMzFDQUZCQzZENTVGCis6MTAxMEUwMDA0NkI5NjYwNThDNzJDQzVFM0ZDRTMwN0Y0NDVEQjk2MUY3Cis6MTAxMEYwMDA3Q0YzRjNCNzE5RTY4RjBBREQ2NTE4RTc2RUJGRDczMENBCis6MTAxMTAwMDAzRkJGN0VBMUUxN0U2MUQzRDJFQkQyN0Y1MUI4RDYzMDEyCis6MTAxMTEwMDAyRjUxRkZDNTA3N0U3QjU1RkQwN0YwNTdFODFGNTgxRjZECis6MTAxMTIwMDA2NUE4OEZCMEVCRkZDRjBFNEVFODcxNTZCNzgzRUI4Q0ZFCis6MTAxMTMwMDBCMzZGOTJDRjMyOUUzMDIxMTIyMDNCMjg0QjY2M0I5OUYxCis6MTAxMTQwMDA5OTJDRTJDRUZCMDdDRTFGNTI3MEZDODFBQkQ4OTI0OTlFCis6MTAxMTUwMDA3NTk2NTYzRkY4QjQzOEE0RjczMzg5N0RFMzlENjU1MjAwCis6MTAxMTYwMDBDMkZCRkUyNEMzRkJGRTZCN0Q1N0U3NkQwRDFCQzY0NTFFCis6MTAxMTcwMDA4NzgwQkY5QkYxMUM3MUJGNERENDdCNTI2MUI4QUJGNDJCCis6MTAxMTgwMDA0Q0NEREI0NEM3NUVFMEI0RERBRDVGRDVCRkNGNEJFQ0VCCis6MTAxMTkwMDBCNzYwRjkyMTdFQUYzODRGN0YyRjQzNEU1MURBMUQ5RjQ0Cis6MTAxMUEwMDBENEZCMzFCRENGNERFQzdGRjVCRUI3N0I5RjI2RUE5OENGCis6MTAxMUIwMDBFRUZEODYzQkQzQ0M3NUI0Q0E3NUY1N0U0OTY1OUM3MzRDCis6MTAxMUMwMDBDQjI4NzVCMEQ3NEI0RDAwRjZDOTI2RUE5MzIzNDEyMUIxCis6MTAxMUQwMDA0QzA1RTgzRDc0OTRGRUE3MjIyNEYwQ0NCRDg0Qzc0NzlCCis6MTAxMUUwMDBEMzgwRjE3MzQ1QUFCQjM3OTBDN0M3Nzc0NjRBMDU3Q0MxCis6MTAxMUYwMDA0NDNGQzU1RTc1ODQxN0Y1N0E0MjcyQUUyQjI2N0M2MjM5Cis6MTAxMjAwMDBEQ0Q3QzNBODFFQzlGMThBM0FDRjI2QTNBNDMwMkYwRDdDCis6MTAxMjEwMDA5Q0E3MDA1REZGMjE1RDE5RTVGNUM2RjA5MkRFRUMyNjg2Cis6MTAxMjIwMDBGMUZCQTQwNjdGOThBOUQ5RTlFNkVGOTcxMkYxQzU4OEVBCis6MTAxMjMwMDBDOUM1RjU2OUUwQjcxMjdGRjdGMzM1MUQ2RTZDQUM4RTRBCis6MTAxMjQwMDAzOUJGREVDMjc1MEM2OEZERkNGRDlBRkM3NURDNjM5RTNGCis6MTAxMjUwMDBDNkNGMDk1QzYyMzFFNkU1RkI5QkY2QjM1RTk2NjVCNkU4Cis6MTAxMjYwMDA2Qjc4NDkwREQ3RTMwRjBFNzE3OEY4N0IzOEE1RDgyRDMwCis6MTAxMjcwMDA3MDMyMUQwNzE5MkNGRjk0QkFFQjVBRkMyRkNCM0M2QjM0Cis6MTAxMjgwMDBDMEExRTBCNTdFRDdGNUJFM0NDNkI3NThGRkM0MDY4MTA1Cis6MTAxMjkwMDA2NzlFRDgzMDk0RjFGM0Q4RkFFNzE4OEZCQUJGRTY0M0M3Cis6MTAxMkEwMDA4MzdGQ0M1RjdERDRFMDBGMEIwMkM3MERGNzIzMTk5RDIwCis6MTAxMkIwMDAxNkMyMUYyMzZGMEM5QTc2MUZDQUFGQTNEMTU2NEFGQUUzCis6MTAxMkMwMDA0MDNCNzg5OEY0QUFBRjFGRDk5MDNCODVGNkJEMzY5Rjc2Cis6MTAxMkQwMDA1RkYzMzlEQUZDQURBQzVGOURDRjYzRkUyMzNDOEVGODQzCis6MTAxMkUwMDAyMzA5REZBNzA5M0U3NTlDNDNBN0Q2QkQ5MDYzQTZGN0U3Cis6MTAxMkYwMDA4OTUyMUYzN0UxQ0FCREUxMUZCQTlGOTk0QTg3RjMzQTY1Cis6MTAxMzAwMDAxNzREQUU1MzAyMjdBQTE5NDNGNTVGREJFNDAxRTU3NERDCis6MTAxMzEwMDBFRUI2QTE1NkIzQTAyM0M1Nzg1MDk5NUQ4Q0E3NEQyNzkyCis6MTAxMzIwMDAxQUI1MzhENjEzMkVEMjI2ODlFRjg5RTY0OUNBNEIwQjU3Cis6MTAxMzMwMDA3MERGQzc0N0E5NEY5MTNGNTQyRkVEMkMyMEZGQUIyRUY0Cis6MTAxMzQwMDA4QzNDMjBFMUZBNURGREQ1OEQyNDFGMDlEQjhCNDFFOTQyCis6MTAxMzUwMDBDQzA3N0Y3Nzc2QzYxNDI4OTBEMDU1RjY3OUJGQkM5NzE2Cis6MTAxMzYwMDBGQUM0MzM3RDAyRTdBODQyRDlERDc4NEM4Q0FEQzIxRkE4Cis6MTAxMzcwMDBERkY3MUU2MEZGM0I4OThCMTE5RjgxM0Y0QjAyOUY3MkZECis6MTAxMzgwMDA0NEFDQjM3MDlEOENGRUVBNzNCNDJGN0Q0RjQ2RUZGN0VCCis6MTAxMzkwMDBFODNBRDlBNzhFOTc0NjJEQTI0RThDNkFGNUUyNjZBRjQxCis6MTAxM0EwMDBBODY3NUY0QUEwNEQ1NEUzMTJGRTQ4OTRFM0Y1RDMyM0E3Cis6MTAxM0IwMDAwOTRGM0ZCRkM5MDY1NERGRTJGRThBQTkyNEY2RkRDQUUxCis6MTAxM0MwMDAwMEU0ODVFQUQ4NzdBREEyQ0ZGNEZDQzUxNkE2MzhBNTBGCis6MTAxM0QwMDBFM0FBQUY3QkIzNzhCRDhDNkM4MTk3NjZGQzMzQzYyREQ2Cis6MTAxM0UwMDBGMkMzNDhFQkIwNTkyOTcxRTczRDA0OEM2Mzc3MTAxRUI2Cis6MTAxM0YwMDAxRDg3NjNCRkVFMTVGRDNBM0MyNEUyNUVDNzg2QzE4Q0IzCis6MTAxNDAwMDBCN0FGMzg3OEUyMThDNUFGN0JCQzZBMjNDOTc1QTFDOUVDCis6MTAxNDEwMDA1NUNBREY2N0E1RUU2MURDNkNCRkQ3QzVGQkUyNzk5OUUxCis6MTAxNDIwMDA1RjhDNDM2QjQ5NEYyQkVDMTFDNkQ5QUU4NUFCRjdDNjI5Cis6MTAxNDMwMDA3RkM3QTJENkU3RjIxODQ3NzYxNTkwRERFOEZCRTIzOUMwCis6MTAxNDQwMDBGNjdCRTNGMDZGRkQxQ0IxNzVBRUVFMDczQTNFQUM4RjU0Cis6MTAxNDUwMDA0RjZGN0U2QUE0ODZFRkNGRjdGNTkwNUY4RjY5NzI2OTUwCis6MTAxNDYwMDBCM0Y0OENDNzVGRjI4QUY3NzhEREY0NzMzMzAwRTFGRkUxCis6MTAxNDcwMDBCNjNFOThGQjkxN0VFRDE1RkM3N0NDNDU3RTE4REY1MDhCCis6MTAxNDgwMDA4QTQ4QkYyQkVFNzJCODQ5Q0VGQUZBQjg4RUZBRkE1NUVFCis6MTAxNDkwMDBGNkU5MUFFREZCOEFGODVGNUEyM0YwN0JGRDdFNTQxMkMxCis6MTAxNEEwMDA3QTBENkMxMDc4RUE4QURENDc4RjNEOEVCQjJDNzkzNTNBCis6MTAxNEIwMDBCRjk4RjI4MUZFN0NBMjlDNTFCRTIzRjlGQjNCNTlCQzM0Cis6MTAxNEMwMDBGRjQyRjk5RUE3RjUxMzcxRkI5RjJCRDdFODUwRjE5RUMxCis6MTAxNEQwMDAzNkJBRTVEMjMwRkEzRTZEMDU3RDBGNTc0MEY2MjFGMDYxCis6MTAxNEUwMDAyRjY4MzBFMjVBMjhBRjAwRTExQkREREY2QjAxQkYxRjIwCis6MTAxNEYwMDBCMzY5RjlDNEE2M0YzRkM0NkM3OEJFM0VDNTk3NTQ4QTExCis6MTAxNTAwMDBFNzdGNDM4QjFCMzgzRjY0QTJFRkI5QjVGOEQ0QTBGNTUxCis6MTAxNTEwMDBERDg5Rjg0QjQzQUJDMDREMUIzMkFENUM0NzUzRkQ0M0Y3Cis6MTAxNTIwMDBGN0Y1RkE2N0Q1ODcwMjM3NUQ5NTI1RUE2QzNBMjdFOTIyCis6MTAxNTMwMDA1OTNBQjI4RkVCODUyQkI4Qjg4NEY5MUVFNTk4NkU1NUYxCis6MTAxNTQwMDA4Nzk0OTIzRkE5MkIzOTlGQzkzN0EyOUVFOTdEQzg1RjM2Cis6MTAxNTUwMDA2RkQzNzAwNDkxMUZCRDVBM0VGNEQyM0E3NEFFQkNCRTM0Cis6MTAxNTYwMDA5QzI3NEJCNDdEQjFCRjYwRkM2RTJDQTg1QUZEQTBFMTU2Cis6MTAxNTcwMDA2RjFCRjYxOUYwODdGRjAzN0E1RkE4ODAzMDMxMDAwMEY3Cis6MTAxNTgwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMEE5Cis6MTAxNTkwMDAwMDBCRkI1MUNGQzBGMDAzMDk0N0IwQTNGMjBGQTBGMTNECis6MTAxNUEwMDA2N0IyQTFGMkIzQjk1MEY5ODc1OTUwRjlGRTY4RkFEMTgwCis6MTAxNUIwMDA3MTNCMTMwMzAzMjMxMzdFMzVGOEIwMDgzMzAzODMwQzA4Cis6MTAxNUMwMDAxMEFCMDBCMTBFMzNGOUU2ODBCMDg5MjgwMzQzQTkwNEJCCis6MTAxNUQwMDAwMzAzMEY5MDY2MDREMjNFNDA1QzA2QzRGRTQwN0UyN0EzCis6MTAxNUUwMDAxMENGMDI2MjE5NzEwNjg2NEI0MDVBNUU4QzgxRTFBNUNDCis6MTAxNUYwMDAyODQ0OUYyRDkwRkQ0MzhDM0MzQkFENzkyOTczRjMyODAzCis6MTAxNjAwMDBBNjBDNUJDQUEyRjI4NUQ0MTgxOEJDRDUxOTE4MjY2QjkzCis6MTAxNjEwMDA0MEY4MDY0OEYyQUI4MDYyQzI2QTEwRjYxMTc5MDYwNkZECis6MTAxNjIwMDAzRDIwNUY1RDE2QkJCOTQ3ODFGMkZBNDBGOUREMUFGODNCCis6MTAxNjMwMDBFRERGQTE4M0NBNzczNTQzRTVFN0ExQzkzN0JBQTBGMjQ4Cis6MTAxNjQwMDAzNURDNTBGOUFBRUUxMDFBMDBCMUM5MkEzQkQ4MDMwMEM0Cis6MTAxNjUwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMEQ4Cis6MTAxNjYwMDAwMDBCQ0Q3RDBCN0M1NEQ1OTlGOEI5OEZCOTczNjczMkQ3Cis6MTAxNjcwMDAzM0I5NDkyNjMwNzlDMTREMDgxMDMwRTAyNDg0ODA4QTdFCis6MTAxNjgwMDA3MDEzMjI0NDlCQzIwNDY5OEJCQjZDNzdDNEQ2NDYxNDhBCis6MTAxNjkwMDAwOEVBNkE3QzZDMzM3OTA3MDEwOTZBNzcyOTVBM0FCMUZBCis6MTAxNkEwMDBBMkEwQjQ0RDVEREMzRkI1RDY5RDQwRENEMkQ2RDZBMDFECis6MTAxNkIwMDA1OEU5QUU2RDIzRjVERjVBNTdEOUEwNTJBOUQyQjJFNzQ3Cis6MTAxNkMwMDBGQkNFQjk5OTdCNkYyNjA5RThFRUZFMzYzRTZFQ0VCREE1Cis6MTAxNkQwMDBFN0YxOURFRjdDRUZGMzlEMTM0NUY0MTA2RDA5MjFFN0QxCis6MTAxNkUwMDBFMTg3M0U1RjI1RjQyNzNCRjkyNEE0ODc5MEY5RjAxQzlECis6MTAxNkYwMDA5MjIzNzNFMDE5RTNFRkQ5MzNCOEI2NEYyMDQ1NTgxQzU1Cis6MTAxNzAwMDAyNDk1ODQxNDEwRjY1M0QwRDRCOTU5OUM0QkM4NjQxMjU0Cis6MTAxNzEwMDBGRUYxQ0M0MjVBMUVCQUJFOEUwNDY4RjlGNUFCRkYwMDRBCis6MTAxNzIwMDBDRkNFRDVENUI1NTdFOTg0RTRBQ0U5M0JCNjlDM0U4MzMyCis6MTAxNzMwMDA5MUI4MTAyRDI1RTQ0MTIyMTI5MjBCRkQxNUM3QUE3QzA5Cis6MTAxNzQwMDA4NEI0NDM2Nzk3MTMzMjI5OTY2M0M0NEFBMTYwRDAwMkQ4Cis6MTAxNzUwMDAyMTdGQTdGMjgxODhBOENCQjRFQ0M3NUY5M0YzMzA5RkI5Cis6MTAxNzYwMDA4NDI4MjQ1MTgyMTU4NUYzRUVEMUVEOURGNUNEQTcxRjc4Cis6MTAxNzcwMDBEQTk5NzUwQUUxRkZCNzEyOThERjQ0RURDOEVENkNCQzQ5Cis6MTAxNzgwMDAxOEZERTczQ0M1NEI1RTcyN0NFQzI3QTdDMTUyMjY4MDUyCis6MTAxNzkwMDAxRkZCNzc2MzA0RUY5QkZGNTdDNkNCMjVFNTFFQkQ4Mjc5Cis6MTAxN0EwMDBDRUI3NEVENEUyNTA5RkY0NjVDOEI0MUNCQzQ1MjYwOUEwCis6MTAxN0IwMDA4MTdFQUZFODExNUNGQUM0RUJEMjQ5NDg2RDlGMEZGMTBFCis6MTAxN0MwMDAyQkQ0RkI5M0YwN0Q4RTA4Mzg5RjI5NzdCRkQ5REIxNThBCis6MTAxN0QwMDAyNEU0Q0M1QTVGMThFOTQzMjMyNDJCNzNGNDdDQkVENjRGCis6MTAxN0UwMDA0QzQ4QzI2RDI5QUZBRTE2QTIzODVFRjhDN0M1QjQ3REFECis6MTAxN0YwMDA2Q0I1MThERTBCRjBENEFEQ0E4MEY3NjZCRDNCRjkzODg2Cis6MTAxODAwMDBBM0U5ODNFODMyQzVBM0NDRTk0M0FFMTMwRENGREM0Rjg3Cis6MTAxODEwMDA0RjFGRjIyN0E0OEZFQ0RCMkRFREM4QzVBRjE3RTI3RDdCCis6MTAxODIwMDBGRTg1RDNDN0E3MURDRjVDRDdEMTdDRDU4MjcwNENCOUJDCis6MTAxODMwMDBCQkQ4NDNFOEZBM0Y1MEJCMkEzRDlBQTJERUQ4RUI1QTA4Cis6MTAxODQwMDA4RUZDMUVBQzIzNDYzQzQ1QkIyREIwOUUzOENGOTg0RDM4Cis6MTAxODUwMDBERUUwOTNBRThGMzRCMkJDQjdEOUQ2NEI5QTVDQjlBNjUyCis6MTAxODYwMDA3NzFDN0M0ODQxRkI3Q0NEN0U5NTI2NDk3RjMzOEIxNkM3Cis6MTAxODcwMDA2NTREODRGRTY0REU1RkE3QjYyRTQ2ODA2RTgxQjYyOTc0Cis6MTAxODgwMDAzRUE0OUVCMjA0QTFGQzQxNDIyNEJDOTc0MzIwRDJCMkE0Cis6MTAxODkwMDBBMjE5RjFGQjA0MjhDNTcxNUQ0Q0Y4RDQ2MkQxMzY5RUMzCis6MTAxOEEwMDAyQkRGNkI1QjBGQjIyNjI2NThFMTU3OUExNDg0NDMwNjUwCis6MTAxOEIwMDAzNkUxRjIyRTgyQzI4REMxMEQ0MzlDOUYwNkU1N0I2QzAyCis6MTAxOEMwMDBFQjJGRkI0OEMyNDNFNUVBOTZFMjcyNjI1RDA3OTM0RTU2Cis6MTAxOEQwMDAwNUMxQTREMzdCMkU0Q0FFMzhDNzVCNkQ4N0YzODJEQjhBCis6MTAxOEUwMDBGOTY0RkQ3NzY2OUJBMkYxREFDOUU0NzcyNjlFMjhGMkI3Cis6MTAxOEYwMDA1RTgxNUYyQ0VCREVFNTIyODc4NDRCMDk2OUNCRUY4Q0EwCis6MTAxOTAwMDBDMURCMkVGOERGNjU0ODlGMjBCNDQ4NTc3RUI5MDZGNDQ2Cis6MTAxOTEwMDA0NEY2MDkzMkMwRTkzMUM5MjM5NDg5RjU3QTg5OEVGNEY1Cis6MTAxOTIwMDAxNDEzRUUyMDUwNEZGMjQ1MTA0RkU2RjdCMUUxRTI3NDg4Cis6MTAxOTMwMDAxNzMzRkE4QjY5QkY5RkU1REQ3RTk2RUIzMzUyRTE3QTcwCis6MTAxOTQwMDA3M0M4ODRCQjA4RTc5MTJDRDM3OUJDN0IxN0ZEMUZBNTE2Cis6MTAxOTUwMDA4RjU4OTkxMERGMkI4Q0ZFNUUwN0ZBOTBDQUEzM0E3ODU1Cis6MTAxOTYwMDA2RjkxMjc2RUMxMkVDRkVBRjhCNzIzQ0ZCQzM2NjMxRTI2Cis6MTAxOTcwMDBBNUM3QzFCMDQ0NDA1Q0I1M0VFMzM2NkE2OEZGQzdBRTU4Cis6MTAxOTgwMDAxNEUyNkU4MUMzNEJFQkFGRTA3MEJFNjg2NDE1MDA3RDVFCis6MTAxOTkwMDAwRUQ2Qjg5MTdFNTcyQ0ZGMzAwOEU0N0JFQUQwMkI3MjJDCis6MTAxOUEwMDAyQTdFNURCMUM4OTU4NDgzRkVCN0M5M0EzRkZBREYyNDI5Cis6MTAxOUIwMDAxODAzRjlCMjA2RTlDODg0NkI0M0I5ODQ3MDBDMkUxMjdGCis6MTAxOUMwMDBFMjMwQ0VDMEFGN0U3RkZGMTUxNENFMTcyQjg0QjA1QjA0Cis6MTAxOUQwMDA0Nzc4RkQ4NDhFMzc2OEJDMUYxQzRGNEUxMDczN0M5RDZBCis6MTAxOUUwMDA2ODgwNEZFN0Y4MjNFQkExODZENzAwNUYzNjY4OEE3RUQwCis6MTAxOUYwMDAxRjFERUY2NjI5N0MxNEY0MTg5OUNDRjQ0MzgzMzZBMzk5Cis6MTAxQTAwMDAwNkQ2NDcxMjE4N0QyQzE1NzJCMDVEOUJBRjc1MTJBRUNECis6MTAxQTEwMDBCQkI0MzZBNUJDNkFBMDhBNDIyQjg3RUZEQjY2OEMwQjcxCis6MTAxQTIwMDA2N0RDMzUzQzY0QTFFQkE2RDcwQkVGMUZCMEMwMzk0NzhDCis6MTAxQTMwMDBGMDA3N0Y5NzQ2N0Y1OTQwMTZDMDNBQkZFNzVCOTU5RUY3Cis6MTAxQTQwMDAyMDYzRjdGNzc2QjNEQTIyQkIwOEY5QjA1OUJGN0ZDMDNECis6MTAxQTUwMDAzNUZBRkJDRDEyNjlFQzJCMURGREZFMUE0MUU1Rjg4ODI1Cis6MTAxQTYwMDAyOTYwOUY5OUYzMUU5OUE3MkY4OEY0N0QzMzg4NUY0QUQ4Cis6MTAxQTcwMDBFQTM3RUZGM0I0Qzg1NkY5RTM5OEM3MDg3RTNGNjEzQkY1Cis6MTAxQTgwMDAzNTc4NkIyQzU3MDc3RThCQUUxNEEwMUY5OUZFNTM5OUE3Cis6MTAxQTkwMDBFNEM3OUIwRkQ0MzNCRTczQzBEQjExRkNFRjgxNzcyMjA4Cis6MTAxQUEwMDAzRTdFQ0ZEN0RBMDlGNjZBOUI4QkQxNEI3QkI2MTg2RTk4Cis6MTAxQUIwMDAyNUEzRTlDNTVDMEYxMzhGMTdCQTFFREIwNDBGRjI4NzRECis6MTAxQUMwMDA0OTQ3MERFMkRBNzFENzdEMjIzQUJBMDNFOEU4OTJGRjdFCis6MTAxQUQwMDA3OTNBN0ExMEU4NjhGRUZGNDkzQURBRjU3RjkxOEU5MkZBCis6MTAxQUUwMDBFNUU1NjgyRkFDRTQ3REY1MEZGREY2MjE5MENGQkYzMDIyCis6MTAxQUYwMDAyNDk0N0JCRjU4QzRFNEZGMkZBMjRDMkUwRTkyRThGNjJDCis6MTAxQjAwMDBGOUEwMEY4RTRCMjhBNzA2OEQzNjNGQzI0QjRENjI5ODI5Cis6MTAxQjEwMDAwN0ZBNUQ5NEZFNUUwMTdCNjkyNjk1RUJDRDJBM0VFOUNFCis6MTAxQjIwMDBFQzBCNTZEMUVGQzdBRUZBMzAxRkY0RDczMUJBQjY2MDFFCis6MTAxQjMwMDA3RjEzMzI2QzE4QjRGRDRCMjM2NTZBODA0M0Q5QzNDQTQ2Cis6MTAxQjQwMDBDMzJENjc2MzYwOUYwRjBBQUNGQzJGMkQ2NzhEMTg4RTI1Cis6MTAxQjUwMDBCN0FENzMzOUM1RTc0QUY4OTVDMkIxN0E5MTYwQzQ1M0ZECis6MTAxQjYwMDBEMEM1NEYwNDg1RTFBNTg2RDhGNDJBNUQ5NzlGMDg5NEQ3Cis6MTAxQjcwMDA1RUQ0Qzg2NkI0QUIwOTg5MTBGNDBGOEJBOTlENjBCMTFGCis6MTAxQjgwMDAyRjlBNDA4MTgxNUNBRTcxQTNGRTczRjZGRjEyQjcwQkYyCis6MTAxQjkwMDA5RDc2RENFQTQ1NjUyRUQwMTdFRUM4Njk3OTg4M0U1N0Y4Cis6MTAxQkEwMDA0NjA0MkMwM0ZFMzUwQkRDQTIyMTE4QTAwNzIyOEJEQzk3Cis6MTAxQkIwMDA4RjgyRkU4QkM4QzRBNUE1RTBENzk1ODZEQjY2Nzc5RDhFCis6MTAxQkMwMDBFNjdBOENFMjY1MERGMzVCQjQ4MkZBMzlDOUZBQTc0RDY3Cis6MTAxQkQwMDBGREVCOThDRjU4NzQ2MUNFQzMyQzVGQkJFOEY0NDAxNjgwCis6MTAxQkUwMDBDQ0JCNTYwODRGODc4NkFBNTZGMDQ1QkZCNUZGMzREMzA1Cis6MTAxQkYwMDBCRUYxMDNERTdFQjFFNkRBNzQ0NjA3NTFENEFCMjYzRDcyCis6MTAxQzAwMDBGREY4OERBRkI4NjBGRTY0NzUxNkQyRTVFQTNBQzk2Njk0Cis6MTAxQzEwMDA0RkFFQUE0OUIzOTUzRkJGRThEQTcxRUQ3MDEyQjVFMDU3Cis6MTAxQzIwMDBDMTQyRjc4MTNDODI3NDRBN0U0M0VEMTQ0QUE3QjFFQTZGCis6MTAxQzMwMDBFMTI4REEyRDI3MDVCRDhEOTZEMzE3Mzc0RDg1N0VFRjI4Cis6MTAxQzQwMDAxMTMzQjFCRUIwQjg2OUU2MTBEQTVCQ0I5MEZFRDM3ODQxCis6MTAxQzUwMDA5RkU5NEFFM0VGOEI0MEFFNEUxN0M5QTMzQUQ4QTNFM0ZFCis6MTAxQzYwMDBGQjA1MUQ5Q0NFQ0RCMjJCMTg4RDA5NzQzREY1OTg1NjAxCis6MTAxQzcwMDAyRThEODNFRkI4MjFENkE2RjIxQkE2ODk2Q0REM0E2MkMxCis6MTAxQzgwMDBBQkI0NjIwMDY4QzAyRTM3MzI2QTFBRDFGRTMzRUI1MzEwCis6MTAxQzkwMDAzQTlFMjY2NkMzQjgzMTdDM0Y0MkM3REQ3NDVFQjQ5RDcwCis6MTAxQ0EwMDA5N0Q5MjIyNDdERjZBQTc0MzJDRTNDREExREVCNEZDNUJCCis6MTAxQ0IwMDBCRjkxNEFDRURFQ0NFMTIzODc1OEZGQTY0QzRBQ0ZBNDgxCis6MTAxQ0MwMDBGREE3QTg2RjNFQkI3OEZGNjdDMzIyMTkwNDM4RTU4OERCCis6MTAxQ0QwMDA4QUZDNTA1MjREQUNGRDEwQTMwQ0NCMEEyRkJBNDMxMTE1Cis6MTAxQ0UwMDBCNTkwRTJEMzVEMkFDMjM0NDg0N0U5QTM4NkFDMDMxRTBGCis6MTAxQ0YwMDA2MkI4REU1QkU5REFFNjVCRjg3MkVCOUYyNUY0RjM2RjFFCis6MTAxRDAwMDAxNjhCNUE0MDZFNkNFREJGODlFODE0MUZERTUwOUM2MDQ0Cis6MTAxRDEwMDA3OUNFOEQyQUUwNjkyQjc1QjIwNjYxN0NCOThGMDAxQ0UzCis6MTAxRDIwMDA2OUY5RjQ3NzNBNEU5QTQ2RTIzQUVENEZENkZCMTIyMjIxCis6MTAxRDMwMDAyRENCQjUyNDZDRDA0RjdFMkQyQzc4QTk5QzM4MUMyQTM1Cis6MTAxRDQwMDA2QTkxRTlGQkY2QjUwNEU1MjMwMUU5NjFBMTlGRjZEMEFDCis6MTAxRDUwMDBDQjg2MDRGNEIzODY4NDAxRTBGNkUwM0E5QzY3NjdFOTM5Cis6MTAxRDYwMDBCQUVFNDJGQUZFNEM5RDhDRjEwMzcyOEVDMjZCRkFGNTBDCis6MTAxRDcwMDBENENGRjA5NjEwMDNDNkRCOUE0M0UyM0VCNDgzMERDNDgxCis6MTAxRDgwMDBBRkEyQjFGNUQzNzcxNTkzQzQzQ0ZBM0RBM0IyMUZDNkY5Cis6MTAxRDkwMDA4RkZEM0Q2MTdDNDk5ODVDOTNCOTNDMjEzMkE1M0YxODg5Cis6MTAxREEwMDBCRjQ5MEJERjk3ODJGRTU0MTJCRDQ5OUM2RjU5NjcyREM2Cis6MTAxREIwMDA4MjdFQUMxMzZGRTkwQUI5MDZGMERCNUU0NkY5MjA4NTM2Cis6MTAxREMwMDBEQ0JCNDMxNDkxMEVFMkUxNTUyQjhCNTI4QzczOEZBODMwCis6MTAxREQwMDBBMzdDMzJDQkZBNTkwNUUxMUZBQjdFQjI5RTRDMTI1OTVGCis6MTAxREUwMDBEMEI1MjEwMDVFNDgyNDg4RjNDQjI0MjMzRjA2OTRCMzZBCis6MTAxREYwMDBGODdDMjc5MTQ2QUMxNzVBRDhEMzBGRkM5NjZCRjQ1NTU0Cis6MTAxRTAwMDAwMTJFQkVFNkZGRkMzMTVDMzdGMjg4MDY3NjJDODVCNkUzCis6MTAxRTEwMDBGODdDNTY1MjVFODBDRTgxRjlCRDE3MTZEMUVGRjA4QjVCCis6MTAxRTIwMDAwOUNEQTAxREY4M0Q4MzIxNzQ3RTc1ODI3MUI5NzQ2ODU3Cis6MTAxRTMwMDA0MjAxQkVBRjU5NkQwN0JCMjQ0MEMyMDI3Q0Y3ODdFNTYzCis6MTAxRTQwMDA5OEQ1QUU0RjI3QjQ2QzhCQTc5MEUzQzU5NTg0ODk3QzU5Cis6MTAxRTUwMDBGQ0FFRjUwM0VCNjgyNThEOTcwMjMwMEYwNjhDN0YwNUVECis6MTAxRTYwMDBCRjY5OUIzRjhBN0VEODg3OUVDMDVDMThFQzRFNkZFMEFFCis6MTAxRTcwMDA1MTc4N0VFODk5MTI0N0ZGMkNDQ0ZDMkQ5NUZFMDNGMjk5Cis6MTAxRTgwMDAyRTdEQTE2Q0YzNkYzMjBDN0IzOUNCRTE4NzJEOTM3Q0Q3Cis6MTAxRTkwMDAzOENGOENDRjEyRUU1RjE5NzVEMzI3MjVFMUEyMTBENTZDCis6MTAxRUEwMDAwM0JERUNBQzkxMDlGOEZGM0UxRjgzQzc4NDJGNEJCQUVBCis6MTAxRUIwMDA3NzAxRUFDN0IwN0MxMkUwQTA2ODQxMzhDRTkwNzMwOTgwCis6MTAxRUMwMDA1OEUyNDAwOUMxRjgyOTg1RUJBNDAzQUU5MzBFQjg0RTQxCis6MTAxRUQwMDA1QUUxNkE1MkQ5N0M5REY2NjJBQzlBOTQzNDUyRTA3RTAzCis6MTAxRUUwMDAyODcyRkY4M0RBNEQ2MDM3OUUyMUVGMThCNTQwMzg5MTk0Cis6MTAxRUYwMDA2QjUwQ0YwNjM0RDZDNkE3MEU2MkIwNDIyMzFBRDI4MUU5Cis6MTAxRjAwMDBEMzZFQTRFQkY0OUVDREZGNUFDOENCM0ExMTYwMUUxNEQ5Cis6MTAxRjEwMDA0RUZCNzc5MjhGRjQ4MjY1ODk4Q0M0ODVENzJEMzRGMTdFCis6MTAxRjIwMDBBNTdGRTFERjI5RkZERDc0RDQ0NTgwQkYyODFGNEJGMDdBCis6MTAxRjMwMDBEREM1QkZERUM0RTNDM0VCQzBCRkE2RjhGQjEyODkwNDU2Cis6MTAxRjQwMDAwMEJFNzc4OTg4NzFBODc3QzlDQjgxNzkxNjM5Nzk0QTFCCis6MTAxRjUwMDBFNEY2MDkyQ0IxOTU4RjQ5MzgwNDcyNUNGNjc1MEU0QTg3Cis6MTAxRjYwMDAwMTQ0ODM0OTZGQzI3OTVDQzczMDkzRjMzRTQ2NzczMUIxCis6MTAxRjcwMDBBMkI2QTAzRUVDNjZGRUE3MTk0RkZENzI4RkREMUZGRUQ0Cis6MTAxRjgwMDBDQTJFN0JGOTQ2QjI2QTEyQzQ0QjZGN0NDODQ1RTJCNEQ0Cis6MTAxRjkwMDBERjlCQUNGRTNENURBNzU3NDUwREUxRkIwQTY5RUMwNEY0Cis6MTAxRkEwMDBCQkE0Q0JDNUVDOEQ3NTFBOTEyMUZFQjlFMUZGN0RBM0QxCis6MTAxRkIwMDBGMjdBM0E5RjMzMjAwRkU2ODNGRDRFQzFCN0U4OTFGNUUwCis6MTAxRkMwMDBDMUI4NjI5NDhFOUU1RjlCMTA1RTcxODUzMEY2RkNCQTNDCis6MTAxRkQwMDA1QzgzMkJDMEZGOEU2RDc3QTE5RDQ5OUM3MUQwODMxMkNECis6MTAxRkUwMDBDNjQxMkRFRDEwREUxQkJBRURGMzlCNjhGRUNFRjkxMjUzCis6MTAxRkYwMDBGMjAwQ0U3N0ZEQkVFQkQxM0UxRjZCM0VDQUJFRDRGNkRCCis6MTAyMDAwMDBBNjRGMTI2QzcxMUY5M0FGNEQ3QTc3RjI3Nzg1QTRCMzA4Cis6MTAyMDEwMDBCODBFNTU4MzY4QUZGQzNBMkRERTg2RUJEQkI4MDBENkYwCis6MTAyMDIwMDA3N0EyRjY5NzQxRkJFQzRGREU3RUYxQTcxQzdGRTkwNDE3Cis6MTAyMDMwMDBFRDM3QThDM0NCNjBCREI3MDQ3QjIyQzA5RjY2MUM2Qjg1Cis6MTAyMDQwMDAyMzg5MTk3OUY0NTdENzczOUI2MzYwQkE4REQ0MEI1RERDCis6MTAyMDUwMDA2MEJEN0M1QTRGQkE4MDdBQzVFM0Y3Nzc4QURCMjUzRkFCCis6MTAyMDYwMDAzQUYwMkQwNUVDRDQ3NzlGN0M2MzA1RDgwMTM3RkY0MDBCCis6MTAyMDcwMDAyMjJBQTU4NzUzMDdGQzI0ODFGNjRBNUMwMUZCNjYzREIyCis6MTAyMDgwMDBBNUJCMzg5NjEzOTVENzVBRUM2MTRBRDFCODBFMzc3RjY1Cis6MTAyMDkwMDBENzhGNzZDNEZBQTdEREYxM0FEQTdFRkQzRkZGNzYyRUMwCis6MTAyMEEwMDBBMTc4MzhENTNBRkNBRjc5NDBDRjRGMEEyQ0VFMUExQkY1Cis6MTAyMEIwMDA5QTdCMkQ3REJGNUUyNjdGMUI0OTQxNDdENzRCOEM5RjY2Cis6MTAyMEMwMDBERUY5N0VEQTFBQjAxMzg1N0RGRDVGQzQ3RUZCQkVFMENCCis6MTAyMEQwMDA3MjVCRjRGMTFBQzk4NUUzRDI3QUU4NDdDNEY2MEJGMUQyCis6MTAyMEUwMDBFOTAyODNDRkVBMEY5OEYxRUU3N0Y2MEIwQ0JFNDNBRTEwCis6MTAyMEYwMDBCODA3RTBEQkQ3QUI0NDY5QkQ0REZCNEUyMzVEMkZGRDM4Cis6MTAyMTAwMDBFRUI3MDM4MDg3NEQ4N0VDNzZGQUE2N0Q1MkMyM0QxNzY1Cis6MTAyMTEwMDA5RjZGQzAxMzM0QTg1MDA5Rjg2NEZDQkNGMUUwMDZENEVBCis6MTAyMTIwMDAxQjFCRkJCNjlFMDY3RURFNzRDODY1OTNGRjE0MkZFMTcxCis6MTAyMTMwMDAwNEUwRjUzNTI5NUMwN0U1N0Y3QTIyQTA1MzU0QkQzREM0Cis6MTAyMTQwMDBCODM3MDA3OEE1RkQ1RUFGNTBCQTVBQjlEMERFMEVGQUE2Cis6MTAyMTUwMDAzRjlCMzlCQTNGRUExOUEyREZCQ0E5NkYwQjFCRUZFMDI2Cis6MTAyMTYwMDA2NzdGMEZGMjc2MTM2MTdBQ0FFNEU3QjdFMTk3OUNEMUYzCis6MTAyMTcwMDA3QTY2OEI2NDhGNkY5RDIxMkY1NkUyM0VFMEJFQUM5NDUxCis6MTAyMTgwMDBGRUIzQTk1NzRDQkVCRUY5REI2N0Y2QzRFOEY4RUYzQ0Q2Cis6MTAyMTkwMDBGRDFGN0I2Mjc0MUVCN0ZDRTVGRDNERjdEMEY5OTFFN0FBCis6MTAyMUEwMDAzRDFBQzhBQjRENEZCRTFBMjAxNkZDM0YyNkIxRkQ4MDJDCis6MTAyMUIwMDA1M0ZCOUY3ODdDMzdFNTkzNTNCRjc0QTMxRDc4RUE4NzYwCis6MTAyMUMwMDBCRjlGQTJEM0Y5OUZGQURFOUYyNjgxOUQ3QUZCMEZBRkI2Cis6MTAyMUQwMDA5QTBDRjhCOEZEOTlBNTkzQzdCM0Q3ODE2RUUzNkVFQjVGCis6MTAyMUUwMDBGQUM2QjE3RkZEOTAwMDlCMjA4NDNDQzc5RjhFNzUzQTU0Cis6MTAyMUYwMDA3MjUwNEE0MDg4RTBERDEzRUVCODlCRTI2NzEzN0RENzRBCis6MTAyMjAwMDA1NDBFRUJCNjAxRjUxNTk0RUZBNUY4REU3OEEwRUJCNDBCCis6MTAyMjEwMDAzNDM3MTVERTYzNzk2MjA4OUU4OTNDMTI4Mjc1QkY3Njc5Cis6MTAyMjIwMDBFNTk1MTVGMDc0ODU3NUEwMTMzMjhDN0FDMkQ5NkVEM0ZBCis6MTAyMjMwMDA3MUJBQkU5NzhFQkQ5RUQ0OUU1MDAwRkY5QjBFNkM2MUZFCis6MTAyMjQwMDBFM0Y2RDFGNTBDOEM1RUNGNzdFMTk3Q0I0NkFGRTcxMTgzCis6MTAyMjUwMDBDOTFFNjczQTQzNkVGOUU2NkVGODc4MzAwQkQ3N0ZBQzRCCis6MTAyMjYwMDBGNURDRjBDQ0U3QzZGNUVGNENGOTMwMTE5RTFCMDQwNjA3Cis6MTAyMjcwMDBENzBFQzk3ODQ1MDI3RTdDRkFBOUM3NzcwN0Q5M0FENzI1Cis6MTAyMjgwMDA1MUM0OUNGQUY2OTkyOUIwQzlGQjk2NkJGODhCMjAyN0FDCis6MTAyMjkwMDA4NzdGRThENkMwQUU1RUZGQzNENzkwRUY0RTNENzM0QzRDCis6MTAyMkEwMDBEMTcxN0Y5QUY4MDRBQTI3NEY5MTkxOUY0MUQwOUIxQjJGCis6MTAyMkIwMDAwNTU2RDhGNDk4M0ZFMTBFMjRENzZCNjNCQ0JFNTYwRjg5Cis6MTAyMkMwMDBFMEZCMzdGMDdEOUNGMUMzQzY3OEZGNkEyMUM1RkFGOUJGCis6MTAyMkQwMDBFNDIyQTY5RkUyRDk4ODk3MERGQUEwQTJGOUVDRUIyQTk2Cis6MTAyMkUwMDAyQzg0RjU3QzYzMTlEMERGNThFQjY5Q0U1RjgzRjkyRjFFCis6MTAyMkYwMDBCMEFDRUI2MzhDOEZDN0UyRDc1M0JENkU1OTQ4MUZCRDlFCis6MTAyMzAwMDBDRUE3Qjg1REIxMjkyRUJDOTY2QUREMDk2OTY1RjFCRDFECis6MTAyMzEwMDAzMUUyREVFNkQzNDkxNzhBNkNFNzczQjNCRDM5RkY4OTMyCis6MTAyMzIwMDBGODdDRTI3OTVEMUNERUNFNzA3REVEQzRERjNCRTc1MkM4Cis6MTAyMzMwMDBFQjgxMjI1OUUwN0FBQkE3MzZEN0EyRUYzQzJFQUFDNzkxCis6MTAyMzQwMDAwQUMxRUU2QzhDRTUxNTI2RTFFREVDOTM1MEJFQkZCM0VGCis6MTAyMzUwMDA0RjQyN0JERjI5MjczNjhFRTFENzg3Q0Q3MTBFRjVDRjJGCis6MTAyMzYwMDAwNTc5RjZDRUUxRUY3MzdBNjRGNEJFRjFDMDFCNEE4Q0I2Cis6MTAyMzcwMDBFQjg1Qjg1NTJGNDA3RjI5RDZFMzcyREVERkE2RTc1MjAyCis6MTAyMzgwMDBGN0I3RTlDMEU5OTRGREJEMkQxQjVGMDBGOERGMUU3NEFGCis6MTAyMzkwMDA5MTE4RURFMkVEM0UyOTY1OUNBNDU4NzZEOUVDQUM0RTNGCis6MTAyM0EwMDA3RkU1ODk3NERBNEUwQTc4NzU5ODc3NUJBQkYxNUEwQzQxCis6MTAyM0IwMDBFQzkxOTc1RDA0RUQ0NzM5RkM5NjlCN0U2RkYzN0I3MTQyCis6MTAyM0MwMDBCRkE1MkQ3MDIzRDEyREZBQkJERDgxMjczOTE0NDEzRkU0Cis6MTAyM0QwMDA1QTBFNDYyQUQ4NUU2OERDRTZDRkJBMzREMTA2Mzc5MTY5Cis6MTAyM0UwMDA2M0Y5QjBDRkY5RjNDMkRGQ0JEMDJGQzREMzc0NEI1QzA5Cis6MTAyM0YwMDBFODI1OTk3NDQwM0NFRDI1NDMwOEI3OTAxNDcxMkQ0N0FBCis6MTAyNDAwMDBGRjkxNDUxMkQxQUQ3NDY2NEMxNUFERjFDNUMwRTFCQjZECis6MTAyNDEwMDAzMEFFRDE0NDFBMTMxMDZGMjJGOUE0NkZBRkE1REY0Nzc1Cis6MTAyNDIwMDA5QTc1MTY3NzhENEMxNUFERjEzRjc3NjNBM0UxQTY3MEQxCis6MTAyNDMwMDBFNERGQUUxNTgxRkYzNkQ2RjgwNThERjY3RDVGNzNGQ0JGCis6MTAyNDQwMDA1Qjc5M0M4MkVDN0JGMkM5Mjc2OTc5MkE3QzEzODEwRTg3Cis6MTAyNDUwMDAyMzA2QzI3MThFRUQyQjJGRTVGMkYwNDdEQzdFM0UyQzc5Cis6MTAyNDYwMDA5MDAxQjBDMzZBRUY4RENBMjBFRjg0RDBGNTE4MTc1REQ0Cis6MTAyNDcwMDA5NjdGQkRCQ0NFNDI4RkNCNDJBNzczNDBBRjdFRjNDRkQ5Cis6MTAyNDgwMDBEMjlBNTQ3NDdBODhEMzU1Q0JERjNGOUUwM0VENzc3Qjg1Cis6MTAyNDkwMDBCRTkwQ0Y5Q0Q5MDhDMjk3QzdFMzVEMDNEOUNCN0QxMDBFCis6MTAyNEEwMDBERkVCQkY2OUQ5OEIzM0U4N0M3MzM1ODk0MEJDMjY5NzU1Cis6MTAyNEIwMDA1NEY5Q0EyODlDNzlDN0E1QjAyN0M1M0E5OENGM0QzQ0E2Cis6MTAyNEMwMDBBRUY3NjhCMzg2RjJGRkIxRTYxMDk2MUZFNzc4RERENzY2Cis6MTAyNEQwMDA1QzgyQ0YyNzlCQzNGOEZENDBGMzQyMkNGNzM1RDdFMjRGCis6MTAyNEUwMDBGM0U5RTYwOEJFMEZEQ0ZENkNCRjAyNzhGOTJBRTk4MzQ4Cis6MTAyNEYwMDA3OENEQzFFNjM1RjhGRDlGOUJBM0Y4RENDQkU3QjMwQ0E0Cis6MTAyNTAwMDBGMEUyQjNDRDFGRTMzMTg3REE5N0I0NDIzQ0M2QzRBM0VGCis6MTAyNTEwMDAxM0VGNEI0ODZDQzA4REZCRjk4MjBFNzhCRjRCNjZGMjBGCis6MTAyNTIwMDBDNTg5REYyOUVFM0UwMUU0NEJEMzJEMDRFREQ3M0QzQ0I4Cis6MTAyNTMwMDA2RTZDQ0VGN0VCMzJCMzM3MEY3Mjc4N0VFMDg5N0U0NzUwCis6MTAyNTQwMDBBNkNGRjc2QThCNEJEMTJFMjI5MTMwQzhFRjNENDIyNEEzCis6MTAyNTUwMDBCRDhDNTY3OTIxN0I0MUM4MkE4N0E3RkFBMzA3NjVDQjkyCis6MTAyNTYwMDBCRUMyOTQ2RTE2RUZEOTJEMzM3OTM1NTUzRkREOUY0MUFDCis6MTAyNTcwMDBGMTUwOUIyRkU4MTA0RTMwRTc3QkI4NEFDRjA3Mzk3OUVFCis6MTAyNTgwMDA1ODEwNzBCRDZCRjMyNTUyNjJBMTdCQjNCRjZGQzgyMjk4Cis6MTAyNTkwMDBERkRGNDgyREI3OTM3NENDRTQ0MUU2RDU3MjA5RjhCNTc2Cis6MTAyNUEwMDA2Nzg4MzcyQzUxN0U3RjNFODcxQzI0RDRGRTc4MUVFODM2Cis6MTAyNUIwMDAxMkU0QzJBRkQyMzA0RTZDRkEzN0RCRjg3QTY3MDI1MUMwCis6MTAyNUMwMDA0MEJFQzRFQkZFMzhDODlGQjFGQzlFNEU1RUZGM0QwRTgwCis6MTAyNUQwMDBENzA2MzlGMjhBOENGQkNBM0NGRTRBMTIxOEM3ODQ5NDhCCis6MTAyNUUwMDAyM0EwQzdERDlFQjUzQjZBRThGM0ZFQ0JERjNFMDFGMUQ5Cis6MTAyNUYwMDBDMTc3OUZGMUU4MDBEN0Y2OEE5MzAxMkIxRTQ5ODNGQzJGCis6MTAyNjAwMDA4RTc1M0Y3RTQ0REU5Q0NEQzNCOEQ4RkYyN0QxMzc2NDlBCis6MTAyNjEwMDBBQjFDMEEwRTJCRDBGRTc5NDFERjA5RkJEN0IxNTcyNTQxCis6MTAyNjIwMDBFNEJGRTc4NUY4MkM4QzYzQzkwNEZEODJFNzZGMEE2MTdCCis6MTAyNjMwMDA3RTg3RDlDRTFGQjZGMzc3QTY2N0U4RTE0RDMwRUYwNjY3Cis6MTAyNjQwMDAyNTFDNEJDMTE3QkY0OUQzNkRGQjQ2RUU5MEJEN0QwOERECis6MTAyNjUwMDA3NEU2N0M1NkQ2Mjk3RDk2RjE3OTg3NjU0MzAyMzhFNjgzCis6MTAyNjYwMDA5MzI4M0UxNzEwMUQ5RjM5QUVFODQ3MzA4Rjc5QTQyRjZECis6MTAyNjcwMDAwN0NBQUQ2OTUzQUU2MEZCMDdGRjYzNzg1MzVERkYwNzgwCis6MTAyNjgwMDBGMTY2RDI2QkU4RjIxMjg0ODNEQzJEODZBN0VCRTg0RDZECis6MTAyNjkwMDBEQUU4N0NBNTRCRTBGODU1NTE5RUU3OEVFQzRGMzVGRTBECis6MTAyNkEwMDBBODIwODhEREIwMzg4OTk2ODY3MjMwRDdDM0YwRDczNDM5Cis6MTAyNkIwMDA3NDFBRTNCQkExMjlDNDE2NzdFRjY4MTA5MTBGNzZCRjk3Cis6MTAyNkMwMDBDRUY2RjVDRTM0MTRFRDlDNDFFQjU3MTE3RDQ3NERFMTJDCis6MTAyNkQwMDBFODc5OThGQ0IxNUI4REE0QTdEQTlGMzI5RjI2NUY5OEJBCis6MTAyNkUwMDBFNTlENTNCRjQ4NDAwRUZERTNENDJGNjJERTUxRUVFQjczCis6MTAyNkYwMDAxRTFERkM4RUFBNUZFRjZGMDFCOUQ4RjEwNkNCQUZGOEIzCis6MTAyNzAwMDA5NTM3QkFDODM1M0YyOTY3M0E2RTZBOUMwQTdFNTBDMDMxCis6MTAyNzEwMDAxRjU5RUNBMkY4ODlFNEM3QUYwMzc5NzdBNkY2NzYzNzlDCis6MTAyNzIwMDA0RUREQzdGMjVFOUFFRUQ1NzdDRUQ0Qzc1RTlGM0Q0REEzCis6MTAyNzMwMDBFM0VGREY5OEYzREEwM0YzMUE2N0ZGQzI5Qzk3Qjk1RTAxCis6MTAyNzQwMDA2NzZBNTcwRkRGQTg4MzlDMjk0RThGQTY2ODM3MjI0RkYwCis6MTAyNzUwMDBBRTVFM0RFRUY4N0JCODVFQTFGMzVGNkJBNUNGMjk0RDcxCis6MTAyNzYwMDAxQUU2Qjc5OEVEQ0RGOTNBREIzQkU3OUJEQzA3QkVCMDQ0Cis6MTAyNzcwMDBCQ0EwM0UxN0M5MDI3QUZGREVDNzUzRkVFOTI1MTQ4REJGCis6MTAyNzgwMDAxMTA5RjQzNEU1Q0Y4RDAwNEYyNTY5QzQzMjkxRkI3MkY1Cis6MTAyNzkwMDBDMEJFMzFFOTc5NzdFN0UzMzlBODE3RTQ3ODIxRTY3NzE1Cis6MTAyN0EwMDA1REUwNzgxRDI0MTJBOTAyN0UwQjhCNjFBQkJENjIzRUY5Cis6MTAyN0IwMDBEQjQ2RTgzQzgxNzE1NTM3OTcwMzYyREFCREExNTQ3ODU2Cis6MTAyN0MwMDAxRUU5M0ZERkNFRkZEQjA4NjE3MjNFQTFBMjlDODc0MDdECis6MTAyN0QwMDBBMTQ2Q0I4NTQ3NDlGOTdEQjRCRjA2NDgwQUE1RTM1NDE1Cis6MTAyN0UwMDBDOTJDMUUzMkVGQThERTJCQjFCOEFBNTRFRkI3RTA5MTg2Cis6MTAyN0YwMDBFRjM3OThGMUREMEU3MjJGRDE3NEYwMkJDQUZBQTFCQTFGCis6MTAyODAwMDBDOUE3NDc5NEU4NDM0MEE3NEE0OEM3N0M0RjU3MzAyQTk2Cis6MTAyODEwMDBCMEZEMzhCNjNGNTRDMkVEOTJBQkE0QjUyQUQ4MjU0REQxCis6MTAyODIwMDAyNEEyQ0UwNkJFM0QyRTExOTY4N0M3RjhEQTZERUU4MzQwCis6MTAyODMwMDA3MTNFNzY3MzNFQTYxQzhDRTUxOUZDRkI3MzlDQkUwRUE0Cis6MTAyODQwMDA4MTdEODJGNjA0QTNBMzgzREMzRUE5MTkxRTNFRTJBNzg0Cis6MTAyODUwMDBFRDRBMDY3QkFBNjEzQTRGODNCREUyMDZGQjI0OENERjdBCis6MTAyODYwMDBCRjAzRjYwQTJEMUZDOUY4Qzc2QjY2NTNCQ0VDMzNDNDBGCis6MTAyODcwMDAzMEUwRkE0MEIzQzFGOEExQjkwMUJGMzc5MTk4NzczMzdFCis6MTAyODgwMDBDOEE1NDc0NDBERTBFQzdBQTQ1NTBBRDBGMjdFNTVDMEE1Cis6MTAyODkwMDBGOEM1MjNDRDhENTgzRjcwQ0U5QjAwN0Y3M0JGOUExMDMzCis6MTAyOEEwMDBDMDFFMzkxMzI2RTExOEMwNERERDIzOThENzBDM0U4RjhBCis6MTAyOEIwMDBBQTM3MDc3MUJCRkNGMUY4N0JCRkRENDFFQjNEQjhEMDE3Cis6MTAyOEMwMDA4QkZCNjQyNjdGQ0Q2ODFBRDZBRTAxQkVEQTdCNTJERjYxCis6MTAyOEQwMDAwQ0YwQ0ZCRkQ1ODBGQURCQzI0NUI4NEZGMTA0QzUxNzY1Cis6MTAyOEUwMDBBQ0QzQkU1REVGRUQxQUE0REYwMzcyRDc2NkYwODM2NzQ5Cis6MTAyOEYwMDAxNkFDNDI3QjI4QTBGRUUzNkQ1MDBFNjg0RkZEMUQzRUQ2Cis6MTAyOTAwMDBENUVGREYwOUZBN0E2NjVDQjRFRDlGMDdENDlGREUwNTQ4Cis6MTAyOTEwMDBERkFCODdDMjM1RTlCNDlGNTlDNzA3QkJBRkE2Q0Y4RURGCis6MTAyOTIwMDBGMEVEMjI5MDc4N0FFNjFGNzA1RkUzQjBBMDdEQTkwN0YyCis6MTAyOTMwMDBFMjZBRDcyQjQ4QUZDNjA5QTMwNUQ4RDE1NTYxQ0Y4MzJBCis6MTAyOTQwMDBDQzdFMzEwQTY5MEI2NEYyMDBDNTNCMDFCQzFCMzJGNDNBCis6MTAyOTUwMDBGQjk2QUIxMEU5MkMxNEM4QTkwOUQwRjJFMzhGOURGQ0JCCis6MTAyOTYwMDBGMUQ1RjRGQjkxNURCN0EyNUM3NDNGMjJBMzNEMzZGMzMxCis6MTAyOTcwMDAxQkI3OTNBRjU4RTQ4NEZCMzEzOTY1NUVFOTVCMkUzN0IyCis6MTAyOTgwMDBFM0EzNDc1NkY3Q0NEMjE5NzkwMkZGQ0REQTVCQTNBMkI1Cis6MTAyOTkwMDA5Qzc4RDE5RUU3NjBFRTBCRjc5MkU4NUIyRUE0Njc2NjA5Cis6MTAyOUEwMDA5RkM4MUFEQjQ3ODYzRDJGRDg0RjI0MEY4QjhDNEYyMkIwCis6MTAyOUIwMDA1MUFGMzVGRkI5RTRFQjYyMjQ1NTlDRkJBQzRCQzY3OUIzCis6MTAyOUMwMDBCNUM3NkI0QTYwMURFNEYzNzdFMDNFMTlFOUIxOEY2RjNDCis6MTAyOUQwMDA4RTQ3QzczRjZCOTU2RkIyQzZFMDJBMDBENTRGRDdCMzdECis6MTAyOUUwMDA1RkY5RjcxQzgwRkY2Q0EzQTlBNzEyQThBNzA2Q0FDNEE5Cis6MTAyOUYwMDBDNDU0MEFERjAzMEY4OTcxNDhDQTNDNTJDQkY0RDY3NjFGCis6MTAyQTAwMDA5OUU1MEI2RUU3RTVDN0NFOTFCODUwOThFNEEzOTk5QzgxCis6MTAyQTEwMDBERjFFN0I0NDY0RjY1QzlDQTA5RTIzRTdDRUEzN0RFMTkxCis6MTAyQTIwMDBFM0RGMzNDQjVFNTY3MTdGMjI2NkY4QUEyQTMxMkI5MDAyCis6MTAyQTMwMDBGRjU4RTg4NUUyRThEMjk4RDcyNjY3QzVBNjRDREJGQUFFCis6MTAyQTQwMDAxNzUwOEJDNTlFNEY1RDk0QUMyRjgxMUMzRkFFMDJGRDhECis6MTAyQTUwMDA5RUExN0UyQkQwRUYxMkJFNEY1NDYzRTY2MTRBRTdFNjlCCis6MTAyQTYwMDBDMUZDMUYzNkY1QUM5OTM3RTNDODkzREVEQkI4Q0UwQjVCCis6MTAyQTcwMDBGMUMyMTc0Q0ZBNjk2ODM0RDBGRkQxREMzODlFQjk0RkU3Cis6MTAyQTgwMDA1ODcyNEIyNDA2RkFEMzk1NkZDRjlGQUU3MkU0NDcyRjRFCis6MTAyQTkwMDA3MTk0MkYzNkJFNTJBRTM4RTNBOERCNjYyMTFERTgwMUUzCis6MTAyQUEwMDA5NDU3QzUxQ0NGN0IyRkEzRUU3Q0ZBRTgzOENCNDhCRkU4Cis6MTAyQUIwMDAzQzhFNDA3QTAyQjg3RUM1OUM4MEVFQkY1QjZBMDBCRjQ4Cis6MTAyQUMwMDAyMEYwNDA3OTg2MzVCRjYwQjlDMkVDRUU4MTVGQjkwOTZDCis6MTAyQUQwMDBEOEY5RkI2QjU0OEM2NzlBNzk5RDJFM0VFRTBBNDVDNzU4Cis6MTAyQUUwMDA3QUZCMUZCQTQzODVGNjVEQzEyMjBGRTBFQkM4RTVFQjI4Cis6MTAyQUYwMDBCRDk4RkZDMUYzNTM0REI5REI3QUY5RkE2QjZFMDI3OUQ5Cis6MTAyQjAwMDA5ODJEQTJFRUU5Qzg2RkNEODU3REY5MDc2QTU0Q0MzRkI4Cis6MTAyQjEwMDAwREE0MERGNTFEQTE2NURGMTM0QUY4NTFGQTdEN0Y1NTBGCis6MTAyQjIwMDA2MjhEMzU2RTczODdDMkY0RDc3NTBBREYwN0RBNjZDRjE4Cis6MTAyQjMwMDBERkEwN0M3MDlEMDJGOTYxQkU0NkRDQjcxNDU1OUVDN0NDCis6MTAyQjQwMDBFQkYwRUY0RDdDMDQwRTVGMjcxNkZBRDlCM0M4MEZGRUU5Cis6MTAyQjUwMDAyOEEzOEYzOEE3OEYzRERDM0Y3RDA0RTRCRjFCRTg4NkE4Cis6MTAyQjYwMDBDOUZGNkREQzNGNzVGNjNCQkQyMTcyNTgwMTNCRUMxNjg5Cis6MTAyQjcwMDBBRDFDNDI1MUNFRjU5REQ2NkRCNzI3MEE2Mzc2MzkzNzI1Cis6MTAyQjgwMDBENTQ5Rjc4REI5QjZGQTc5MEQ0NUI2RUZGRUYwNkM4N0U5Cis6MTAyQjkwMDA3RDkyNjA3QThEQjBGNUU5RjJGOEE2ODFEQzJFQTc3QUY1Cis6MTAyQkEwMDA5N0Q5MTk5QTE4QjFFRUFCMzhGNDdBODNDQjY4NTYyRUMwCis6MTAyQkIwMDBDMkJFMDlBNDQ1MUE2MTdEOUNGNkY0NTZCRTNFN0YyMzMxCis6MTAyQkMwMDAxQjVCOTRGOUU4QkY2RDg1MjdCNThGNzlCRUJBRERGRTMyCis6MTAyQkQwMDAxODA1MjdBMTcwQ0UxOTE3Q0U4NzJFMDZDRTg5RjZEOUYzCis6MTAyQkUwMDA5Q0ZCNkI3NzRBOTE1RDJGRDFFN0UyNzQ5NjBGRDlFMTk4Cis6MTAyQkYwMDA2N0ZFN0MwN0M0NTE2OUY5NTk0RTg3NEYyOTEyRjY3RjQ5Cis6MTAyQzAwMDA4OENGNzc3MTFBQUQ5RjgyQkZDREY4RUE3MzkwNzgwM0IxCis6MTAyQzEwMDBGNTI2QTdDRUIzMDQwQjA4QkZFN0E1RkVGRTlDQzJGNkJGCis6MTAyQzIwMDBCMzE3NEYxRDdGOUNFNzYxMUNGQURDRTYzMkJFQUY1ODNDCis6MTAyQzMwMDBFMjc4RUQ4QUYxMDM2QjM5QTFCMEZERTc5MTc1RTE3OTk2Cis6MTAyQzQwMDA5NEE2M0Q3Njg3Q0JFOEI3RDY0RjNFRUQ3MkQzREMwNzJFCis6MTAyQzUwMDBDOUU2RUJFOTI3OENGRjVFNThCMzZFQ0I3NENBQ0Y0QTQ2Cis6MTAyQzYwMDBCRTBGRUQ5RkVDMzVFRDlCQzUwMEU0MUYwRDZBRTAwRjM0Cis6MTAyQzcwMDA2NEYzN0Q3Q0IyOUFDOTUxNzM1RjNEQjNDRTJFNTc5REVDCis6MTAyQzgwMDBFN0FEREMzQzJGREVFRDNDNjdDM0U1QUI5MzFFQzc5MjlFCis6MTAyQzkwMDBBRkJGNTZFQ0ZCMUEyM0YxRUIzMUU4Q0ExOUJGNkU4MkM1Cis6MTAyQ0EwMDA1Rjk5OURDOUVERTA0OEZBQUEzOTYzRDNFM0NGOUI4N0NBCis6MTAyQ0IwMDBCNzBGNEM0Rjk2NUY4MkYzMzMyOUU5ODBFRDI3MDYwRTVDCis6MTAyQ0MwMDBGRkExNkU3NTA1RUNEQkIxNzhEQTYwNzM2MkYxOUJEMzFFCis6MTAyQ0QwMDA5M0YyMkJCMjI4RTMwNTg4N0I0NjZBMzI1MERFQUMwOEJCCis6MTAyQ0UwMDBGRDcxRkIwMEY1QzdFQjhERkVDNTZGNUFFNjM5QTg1MUEzCis6MTAyQ0YwMDA2OEE3OERDMzI3ODZFQjIzMkI3RjNEMjEzMEZBRTlFMEJGCis6MTAyRDAwMDBFM0VERTBGODc0REFEMTVENjJDQzBERkQ3RTQwODYwQzE3Cis6MTAyRDEwMDAyMTg1NUY2QjlENzczQkUyNkRDODA3NzQzNkQ2QkNDM0Q3Cis6MTAyRDIwMDA2RUM2NTc4MTg1OEQ2MTg4RDNCOUNGNEJDODA3RUVBOTkwCis6MTAyRDMwMDBBNkREMTI0NkJCNjU5RTNCODM5REZCRjAxNUUxM0UxRTYyCis6MTAyRDQwMDBGNUQzODdGQjYxMUQ3QzJDQkZERkQ0OEZFRjlCRjE1NDQzCis6MTAyRDUwMDBBRUY3NkVDQjYwRTVBRENEMkM3RUVDM0U3MkQ5NkIzQTEyCis6MTAyRDYwMDA2REU3N0ZEMTQ1M0NGNEZEMTYyQUQ3MjEwRUQ4NERFREY1Cis6MTAyRDcwMDA3OEY4MUVBODE4MjIxMDQ3NkZBM0Y1QTMxNkJGQkIyRDI1Cis6MTAyRDgwMDA1Q0FEODE5REQwNUU1QUFFRUFGNEJCMzRBNzAyQ0I3MjMzCis6MTAyRDkwMDA2MUI5NTY0REM3OUNFREZFREFEMjZDODg4MzE3OEI5OENCCis6MTAyREEwMDA1NzVCNEFDQjJERDRBNDRCNzc2QjM4QkY5Rjk3QkNFOUI4Cis6MTAyREIwMDAwM0ZCMkMxRDlDRjNGOUM5RjU3NDU1NDQwRDg5QzJFMzNFCis6MTAyREMwMDAwQTY5RDU5MDhCMzFBMkI3Mzk5REQxRjc4RjQyQkNFNDA3Cis6MTAyREQwMDAwOTIxNUFFOUE2RjNGRjM5M0Y3RkQ1QTUzNDk2REMwQUNECis6MTAyREUwMDA3RThGMUM3MzQzRkNBMDQ5NjVGQjEwNDAwRkVERjM5MkVFCis6MTAyREYwMDA3MDJGRTFGODU1RjhCODIzN0UxMDVGQ0YwRkU0QTExOENCCis6MTAyRTAwMDBBNEI2NzY4OUE0MjFENUZBNUNFRDY2NzJBRTVEMzNCNEMyCis6MTAyRTEwMDA3MUU5NDk5MzNGQjJFNTRGMkY2MkZDQTQwNDI5M0RBNTE3Cis6MTAyRTIwMDA4ODNGM0FFNTM1NzE0N0VBREREOUM5N0MyNUJBQjAxQTQxCis6MTAyRTMwMDBGMjI5NjFGNjlFNzlCRUU3NERDNUY4OUM5QkNFQTNENURECis6MTAyRTQwMDBDN0U1NTg3RTI2RDIyOTdEQkZEQ0ZCODlFNDNFOEJDRkM3Cis6MTAyRTUwMDAxQzVFNTQ3MUFDMDZGQzkyNDExN0M2OEIwMkQzQzhERkNFCis6MTAyRTYwMDA0NjJDRjJGNkE4MUI4MzZFRjRDOUVDQTRGQjI4N0RDNEEzCis6MTAyRTcwMDA2N0IyQjgwNDAxQkE0OUEzOEExOEY2MjEwQkM0RjhBM0IzCis6MTAyRTgwMDA4NTAwNkY2RkVEMzREQTVGOTczQzlENUFFNkM5N0VBQUU0Cis6MTAyRTkwMDAwQTk4RkRCRkJEREFEQjYwRjUwM0RFNEQ2M0ZCMkY3N0RCCis6MTAyRUEwMDBGOUFBOUU4NkY5OTVGQUUyRDVFODNFNDM3NkU2MjQ3NkJECis6MTAyRUIwMDA3RTBBRThGODEyOEQwQzA5MjJDOEMxMDg2MTdBMzNBQzg5Cis6MTAyRUMwMDAzMkZENUFBM0MxNzkyOTgxNDRDOUY5QjRGMUY0QTNGREIzCis6MTAyRUQwMDA1Q0Q1OTM3MkJDRDUwQkY4MDhCMjc4OTc3Rjk3ODBDOTAwCis6MTAyRUUwMDA4MDUyOUY5MUYwODI5OEY0QUQ2QTc3MzM3RDUxMDJFMzZFCis6MTAyRUYwMDBGNDU3N0E4OThGRDZGRjYzQkY4MkY2NjE5RjNGNEYwNkYyCis6MTAyRjAwMDBCQzNFMkZBRUZCMjZDNDlGODY3RkU5QzZGQ0M2QkUzRkYzCis6MTAyRjEwMDBDRkM2RkNGQjNFRkYxNUNCNDA2RUY3MDlFNDI4NTVGNjAzCis6MTAyRjIwMDBBNEVBNkMxRTRGMzYyNDY5QjBDRjE3NTg2QTEwRDhFNzUwCis6MTAyRjMwMDAxODdFODE4NDIxM0ZEODE1RkFFOUUyMzdFN0UxQzREMzRFCis6MTAyRjQwMDBDNDg1QjQ5RDg3NzQ3QjY4QkJGMDQ3REVGNzk3NTBCQUExCis6MTAyRjUwMDA3QURBNTdGRUUwQTUyNDE5NTczMUUzMjlDQkQyQTIwRjI0Cis6MTAyRjYwMDAwM0RFM0EyNkZENUIwM0YwNEQzNzg1NTM0MkZCRDUwODVGCis6MTAyRjcwMDAwMURDRTVEOTIyQzYxRjQ5QjYyRjNFMURFMjY1NDc4MzE1Cis6MTAyRjgwMDAzNTkwM0Y1QTI1OTc2MTZBNkM2MDI5NUJFRjVGNzlBM0EyCis6MTAyRjkwMDA3QjYxQkUzNTVBN0QwREM0RDcyQjhFRUIyODY3OTc4NTk0Cis6MTAyRkEwMDAzNjBGNDBCOUYyNzU1NkVFNTAxOEJGNDBCQzg4NThFNDUxCis6MTAyRkIwMDA2RUQ1RDkyOTM4QkYzRTRFMjdFRDIxNjNEMDEwQzZFNTI2Cis6MTAyRkMwMDAxQkM3QjkwMzdCQkU5Qzk1MEUyMENGREQ0MjA3NTE5N0VFCis6MTAyRkQwMDA5NTBFMTY1MjNBOTg2M0E1MDM0M0I4MTgzQUY4MkEyQTcwCis6MTAyRkUwMDBFQjRGQzIzRkM2NkIzNTQyMzI2RTM3OUEwRjM2QUI5OTA0Cis6MTAyRkYwMDBBNUEzRjlDNTg0RTNCRThBQ0MyMEM4NTE5MzJGQjQwNTlDCis6MTAzMDAwMDBGN0EyNUM3NTVGQUY0NEMwNUYzN0Y5QzRFNDhGOEYzREIyCis6MTAzMDEwMDAyMzdDMTIwMTdFNUZFREQzQUY0QUM1MjdFMDg3NThGOUM0Cis6MTAzMDIwMDBFMURBMzFGODY2MDUxOTFFMDhEMjQ2MkI2NDEyNEJBNzY3Cis6MTAzMDMwMDBBMkU0RTc5N0JENTUzQ0M1QzIwNzRFQkNBRDU4MjQ5MEVECis6MTAzMDQwMDA5MzM2NzlDNkNBMTZCQzZBMjNFNzFCQTUwQkM3RkZDQjBDCis6MTAzMDUwMDBCMkRFMTFCNEYwNjEyN0Y1NDNDMDU4RUUxNkMzMDRGNDk0Cis6MTAzMDYwMDBDQTAyREZCQTNGMDI1RENBNzVERjBCODEzRkU4NzI0N0QzCis6MTAzMDcwMDAxQTMwNkY3NkMxM0I2OTM3NTJCQUZDRTMyNDUxODdDOUQ1Cis6MTAzMDgwMDA3N0U4RUJCRThCRkM3QzIyOEQ4MDdEQjJCRDcyM0RDNkE1Cis6MTAzMDkwMDA3REZGNzg1Mzc0MkFFODg5MkQxNEZGMjc1MTJGQzcyNzA1Cis6MTAzMEEwMDA4Qjk4ODMzOTM0OTlFREI3RUIyMUY2OEM4NkQ4N0JDMkE3Cis6MTAzMEIwMDBCRkM3NzlEOUUwRjU4NkIwMUU1RDY3OUI3Q0RDRTE2MTE2Cis6MTAzMEMwMDBGQjVEM0IzQzRDREY2QzUxN0E1NEUwQjdFMTQyNTU0QjIxCis6MTAzMEQwMDA5NUVGNUNBOUIyRkE0QkRDQTQyMjFDQzREMTcwNUZCOTk1Cis6MTAzMEUwMDA0Mzk1NkE3QjU5OUMyRkIxODRCRTVGMzJBREU0NTFFQkFFCis6MTAzMEYwMDA3RTgxRDlFRUMxRTYzRUI0NTNCNjM0MUZDMjY3NTY1RDM5Cis6MTAzMTAwMDA5QzQwREU5NUI3MjRBNkMzRkVCOEZBOTdBNTgyMEJGQUI5Cis6MTAzMTEwMDA5RENERjY3MUUxN0Q4QkM1NEVEMzU1QzY5RkVBNUZBNDY4Cis6MTAzMTIwMDAyOEYwQjFEQTFBRDMzMzJERjI1ODE1ODU2ODJBN0I3QjQzCis6MTAzMTMwMDBBNzg3QzU2OUQ0NTY4MkRGRDVDMzVGQzc3REVGQUNFMkYwCis6MTAzMTQwMDBCMEYwNjUyOEI3RjY5MDMwRURDNzkzNjBFRjgzQzU4NjgxCis6MTAzMTUwMDBGMDI1NEJCRkMxQkEzRTlCM0U1QzQxOTcyQUJEMUNBRERBCis6MTAzMTYwMDAyQzNDMTdEM0ExN0I3MTlGNkM0NUIwRkEwRkYyRENEMUQ4Cis6MTAzMTcwMDBGNDA2M0YyNzJENzQ2M0MyNkZFRUQ3REVDRUZERjQ5QUJFCis6MTAzMTgwMDAyMjE1RjlCNEEzNDlFOUM1NzMzMDJBQjM5RjNFMDg1NjA2Cis6MTAzMTkwMDA4RjdCQUUwMEY2NjlBOTg1ODdGRTMwM0M2MUJGMzYzNjZECis6MTAzMUEwMDA5M0VERDc0MjE5RjY2QkUxMDlGQkI1RjA4NEZENUFGOEFGCis6MTAzMUIwMDAwRUZCQjU1MEZFNEVCMzgxNjVEOEI3ODUzMkVDREJDNjQ5Cis6MTAzMUMwMDA2NkIyN0Q1QTI4QzMzRTJEM0MwRjM1MzdFMEYzRDlFNjcxCis6MTAzMUQwMDA0NkZDRkU1QzczMTM5NjI5M0RBMEZENDc0QTYyMjFCMDcwCis6MTAzMUUwMDBBQkJCRUY1MjBDQzhDN0U5RTJFQjdFQzQyOENBMDI3QTM3Cis6MTAzMUYwMDBGMTA0NTkzQ0MxRjNFMjAzNzgyRURBMTMxMjMxQkVENzQxCis6MTAzMjAwMDAxOTdBODBEQzQwOUZEREYzRkRERDEwMUY1MUJGRUJDMzU5Cis6MTAzMjEwMDBBNzQ3N0U5MDgwRERCNjQ3ODgzNTkwMzAyMTFCRDU4QTQwCis6MTAzMjIwMDAxQTk5REExM0M1QTFDREQ1OTk2MUMwREJFNUVEOTA5RjYwCis6MTAzMjMwMDAzODQzNkYwOUFGRDM5MjY1REQ1RkJFRkU3Qjk2RjJENDUzCis6MTAzMjQwMDBEMjVFRDk0QkVCREZENUJEQTgxREU0MDZDMDAxOUI2QjU4Cis6MTAzMjUwMDA2REVBOTI5QTk2NjI0QUI0NDVENEEwMDFGOTU3QThDNDdGCis6MTAzMjYwMDA4MUVFQkYwNEVCMzUxREUwNjc3NkUwNjc0ODVCMDhFMjVFCis6MTAzMjcwMDAxRjUzNzVBNTFDRjg5NUQ2NEYzMDNFQjlCMEZBNURBQTFDCis6MTAzMjgwMDA4RUVGOURFREM2QUIyNzU2NUM1MDNEMjI4REQzMUY3QzQzCis6MTAzMjkwMDAxN0M2RTlBNzgzQjQ2OTgzMTRGNkFEMjA1QkMwOEVGMjJDCis6MTAzMkEwMDBCMEZERTA2RTE3OTMxM0REMUVGNkZDOURDN0RDMEZBRjdCCis6MTAzMkIwMDA1RUVFQTFDRkU1MUVDNjg3REQ5RTQ4MkQ5QzRCMTk5RTc0Cis6MTAzMkMwMDAyMzYyMUNBOENGNDVCQjgwNDMwQTREODVBRkMwRjlBMTNFCis6MTAzMkQwMDAzQjdFMjIxM0Q4NjdEOEMzRjk3NkZBNTQzRkQzRTdGNzc5Cis6MTAzMkUwMDBBOEE4Q0Y5NzRGRkQ3NjdCMjYyRDRGRkY1NjM4MENGQUI2Cis6MTAzMkYwMDA3OTJCMDk3QjgxNEU2MkRCOTg1Qzc5QUE2MjVBNjYzRDI0Cis6MTAzMzAwMDBBRDdFQzlGQzY3MzI0MTRGN0RBQzMyQkIzNkNFRkQ5MkZCCis6MTAzMzEwMDA5NjhFMUJBNzQyRkNFQThGQzc5ODlDRkMzNjFGQTdENzQ2Cis6MTAzMzIwMDAzNUQ4ODhFQjM5REY4Nzc2MEQ3NTJDRDA2RTY5MDlDOUUxCis6MTAzMzMwMDA5ODY3MjRFNkIwQTdFMkQyRkUwQUVBMjlENDMwODg1MTgxCis6MTAzMzQwMDA3ODk0M0YyRjUwMzE0RTcyRDZDREVGQzExODQ0N0I0NjUyCis6MTAzMzUwMDBGMTQ0QjUwQ0ZBQkUyNzI2MjJCRkI3NjlERTM4RDhERkE0Cis6MTAzMzYwMDA1QjdERTU3OEZFMzQ1NjJBRTMzOTk0QURBNTJDQ0U5QUUwCis6MTAzMzcwMDBFNkZGN0MxQ0VDOTgxREZEMUUyNjFGN0MyQUU2OTlDNkU0Cis6MTAzMzgwMDA0QjBGMUVBRDBFQzI1M0Q0ODBERkUzQzZBQTVBQzRCQjk2Cis6MTAzMzkwMDAyNjZBOThBRjRBN0ZDM0VGMEQ0MTNDQjdCMjk1RjA3NUVFCis6MTAzM0EwMDA2OTEwRjFEQzVEQzdBNDhGN0U3QTI5RTRFRjdDNTkwQkFDCis6MTAzM0IwMDBGM0JCMDkzMDFGMUM0RDMzMTFGNjhEODYwRkE3MDEzQzVFCis6MTAzM0MwMDA3RjYzREU2QjMwRDQ5QTQ2RUJCN0FGRDNDMkIwMEU3M0Q3Cis6MTAzM0QwMDBCNUVBNUFDODM3RThEMEFBRDExRjRBOUI1M0EzNUU4RkRCCis6MTAzM0UwMDA3MjY4RTREQzA2REU5RkQxNUUyQTYzQkUxMTdDMDdCRUY0Cis6MTAzM0YwMDAyNEVENjQwMENFQ0RFNzcxNTk5Njk2NTEyRTgwMURENkVFCis6MTAzNDAwMDA1MTg3RTE0MDM4RDc2MENCM0Y2RkNGQkMwNkNGMkI0OTA3Cis6MTAzNDEwMDAyQjMyMTFDRTBFNjJBODUwM0Y1NjI3QTM5RUNDRjNBOUEzCis6MTAzNDIwMDAwOUIwNEJGMkNDQjgyRjFDQzVCMEM0MjVCMjZFQjE5RjA5Cis6MTAzNDMwMDBFN0M4Njk5MDZERTdDNzI3NDdFREU1NkMxRTY3Qzg3NjVBCis6MTAzNDQwMDA5Q0ZCMzhDQkU5QzU4OTI3RTc3Q0IzODI4RjY2MDBCQzNCCis6MTAzNDUwMDA1OTcwRTA1NzFGM0Q5RjA3ODNFNUY1MzBDRjNDQ0Q4QjdBCis6MTAzNDYwMDA3MDg3QjRENjJBOTA1RjkzNDk2MzBCRDBERDQ1QzNFQkQ4Cis6MTAzNDcwMDA4MDczNkU2OUZCMjBBQ0ZCNUM1RDI2M0ExREZGNTIzMjA3Cis6MTAzNDgwMDBEQzBBRkQ2RUU1NzRERTVENjhEN0RCN0I1NEM5RTRDN0ZBCis6MTAzNDkwMDAzMEYwRTNENDI2OTFDNDJDRTM0M0JDMzI2NjE5NkY1QTUyCis6MTAzNEEwMDA3N0E2QUQzQ0JEMjdENzU2N0ZFNkFFMjJEQkY3NTlGMUI0Cis6MTAzNEIwMDBEOUI2RUY5N0VDMkJCNzk1RTdGNDVENkVBQjdGRTlBMTNBCis6MTAzNEMwMDA2QTVCQjkyQzcxOERBREZFQkNBM0FCNkNFNUY5ODM3RjUzCis6MTAzNEQwMDA2NUFCQkZFMEM0M0FEQkY3Q0I4NkQ2REJCRTVGRjFENjg3Cis6MTAzNEUwMDBBREI2RjI5NUMzNzdEQkVBOUI3NkJENTMyRkNFRTZGNkY5Cis6MTAzNEYwMDBDREM1REFGMzZFQjg0RkMyMTZCRkI1RkIwQjRFN0I1RjdFCis6MTAzNTAwMDBGRDRCOUJERTBBNzIyREEwMjA3RENCQTBDNzY5RjlENkFBCis6MTAzNTEwMDBCQjk4QkZBNTJFMEVFQjIwNTc3NDJFNDdBOTE4NUMwMDUwCis6MTAzNTIwMDBFQjU2MTU1MDUxMUZDODNFNTY0RkY2MkQ0M0ZCNjNDQTRDCis6MTAzNTMwMDAyRTJBOEZFNjgxNTU0QTQ2QkVBNzgxNUM2RThFMkQyRUJGCis6MTAzNTQwMDBCNkM0QTUzQzVBMEY5RUUxQUEwQUQ0RTIzRTg4RDk1RUQxCis6MTAzNTUwMDBENjBDMTJGNUMzNzgzQUIzN0JBODM3MEJGNTNDM0E2RDFECis6MTAzNTYwMDA2Rjk5RDdGM0EyODg0N0E1ODdBOTVGRjhBOEM1MkYxQzM0Cis6MTAzNTcwMDBDQjBGNzRGQTdEMTdFQUU3NEQxMTg5MTdDRjFGMDg5MTE5Cis6MTAzNTgwMDA0Njc4OTYzNjFFQUI4NkI0NjFFQUZGRkRCNTg3RjJFNzUyCis6MTAzNTkwMDA3NjI1RDJEMDRCRkJERDVFRTQ2NUZCQTVEQ0ZGRUIyRTkwCis6MTAzNUEwMDBFQzQzQkUxODJFOTQ1MUJGMTA1OTJGQjVDNkVEM0FGOTExCis6MTAzNUIwMDBGQUE2QTk0RkExRkY0OUYxOEVGMkQ2QzRGQjU2NjEyOEE1Cis6MTAzNUMwMDBERTA2NzJFNzJFMkZDQUMzMjlCRjcxQkYwQ0ZDQTUxNkY5Cis6MTAzNUQwMDBBOTc5MkE3RDFGM0VBMjE4QjAwRkY1MjBDNzZCOTE1NjFFCis6MTAzNUUwMDA1NjBEQTFBN0UyNTBGRDYxNzhDRUQwQTk5RDQxOUYyNTNGCis6MTAzNUYwMDAyNTNCMEZBMzVBRjMxNEUxNzhCM0MzREZBQjA2NTlBMkZFCis6MTAzNjAwMDAyRTY2RjY5RjNDNTc4OUI3RDI3RTI0OERDMjkxQzJGRkE5Cis6MTAzNjEwMDAzMDlGNTI2MDE3REJFNzI4OTY3RjA3RjQwNkQ2RkY3OUM0Cis6MTAzNjIwMDAzQTg1QUE0QzE1RjM0MjNDNDAwNzAyM0U5MTdFM0M0MTRDCis6MTAzNjMwMDAxRkVBMEQwRjFDODI4NUIyMkNDNDYxOUYxMEVDNTNEODc5Cis6MTAzNjQwMDBBRkFCQ0FEQzg1RUI2RURBQUQ2MENGNDY5OTNGREMwOUUzCis6MTAzNjUwMDA3ODBERDZEOUQ3M0I0REZEMEVFMkE5NUQ2MEYxRjFFRUI0Cis6MTAzNjYwMDAwQ0ZEQzU2QTNBNkU3Nzc2NTEyNkM0NjIyMTdFNTI2RjkwCis6MTAzNjcwMDA5MTM3M0JCODNFOEQ3QUQ5RDM5NDM3Qjg5MTMzM0Y2OUFGCis6MTAzNjgwMDBFRjUwRkFERjI1NEUwM0Y4N0EwOEM4MkRDRkJEM0QwNDcwCis6MTAzNjkwMDBFOEREQTNEMUQ1NDRCQjNFQTY0NzUwOUYzMjdCRjczNjI5Cis6MTAzNkEwMDAwRTUzNEREMTFBQ0MwMzc4M0Y1ODhFRjZBREE3RTlGOUU5Cis6MTAzNkIwMDA5NEY4RjMwQzQ5QzQ5ODM3MzY1RTAzMzM3NkEzQkUyN0RCCis6MTAzNkMwMDA0NThBMEU3NjQ1OTNBRTE4QkQyOUU0QzE1Qzk1RkIzOTU5Cis6MTAzNkQwMDA1M0NDNzNBRjJDMEZBODlCRTNDMzhDOUI4RUM0MjM3OTcwCis6MTAzNkUwMDBEQ0NEOEM0NzlBRkREQzk2NUQzRTc5M0M3QkRDNDNGRDZFCis6MTAzNkYwMDBEMEE4MDVERTJENzQxQ0MwNEJDN0I5RkE1QUM0ODM0QzQwCis6MTAzNzAwMDBEOEI5REQzRjk3RjZERTg3RkJCMTZEM0FFQzM3Q0ZFNUYwCis6MTAzNzEwMDBGNjcyMjVFMDg3RTI3QjhBNDJEMDRGNTgwQUYxOTUyQzU5Cis6MTAzNzIwMDBGMDdFM0Y1MzBCN0M2OUM2NjM4NjNDRUMxQzc3Mzg0NkMxCis6MTAzNzMwMDAyNDE2N0Y3Mzk5N0E0QjNDN0YyOUMyQUMyQjY2MUUxOUU1Cis6MTAzNzQwMDA5QUJDNENBRkQxN0ZGQkUxN0NEOUI0NkVGQkY5Q0RFOURCCis6MTAzNzUwMDAzREY2RjJDQzVERjZGMkFDQjhCRDRDQURFNkUzNjAxN0Q5Cis6MTAzNzYwMDA4MDhEODZGMThEN0RGNkVGRjVFNkJFNDEwRDNCNkZBNkFGCis6MTAzNzcwMDBEMjkxQ0YzM0ZENkJCQjNGODc3MEZENkZFNkJCMTVGNDc1Cis6MTAzNzgwMDAyNUFBNDBCQ0U2REY2RUQ3QUJCOTVDQ0ZFNzNBRjQ2NzU5Cis6MTAzNzkwMDBCOTVGQzJCODQzRDVEMUUwMDBEODhGNjY3Q0U4NTc1RUU4Cis6MTAzN0EwMDBERDk2Nzc2NkM2Nzk5Q0YyRENGQkZBNEU0MkJGQTBGRjNECis6MTAzN0IwMDAxRTc1QjM3ODA3QzQ5MTNGMkNFMDcxOTU3QzFFNTc5OTE0Cis6MTAzN0MwMDBDMkUzMkEwNTJDQUVFMjkyRjQ5N0Q2MEE5ODI3RkEzRTc1Cis6MTAzN0QwMDBGMjA1NjlCQzk0QzU3M0Q4QjlBRkY3NkFFNTE3MDQ5REMzCis6MTAzN0UwMDA4RDE3QjU4Qzc3Njc0OTZDMzk0MzQzM0MwN0VBOTlGMUVCCis6MTAzN0YwMDAxNTMzN0UxMEYwMUJDQjgxN0ZCNzg2NUY2RTNDNDJFOUFDCis6MTAzODAwMDBBNEZBOTc2RTAyRkQ1QzI1QkQ3OEI0MTlFNDVCODE4QzQ3Cis6MTAzODEwMDBGOUREREE4MjVCQkVFOTg1NzgyNTdDQTdFNUVBNDI3REExCis6MTAzODIwMDAzMkYyQzE4RjVEMTg0N0U4RTI3NDZEOUU1NzM0RTMzMTgwCis6MTAzODMwMDA5QTk3RjE4MUNGNkJEQTQ3MzEyRkNGREZGNzgyQkQ3QkNCCis6MTAzODQwMDBDOTNFMkFBMzZERkE4RUM1RkRDQ0Y4REU5QzNFRkJGNzdGCis6MTAzODUwMDAzRTIyNjQ2OTkwMUZCMDI2MkUzMkZCQ0FGMDU1NTlGMjAxCis6MTAzODYwMDAxRjY3RjM3NTlCQkIzNkYxQzA1QTVBM0U0MEUyRTU3MEM0Cis6MTAzODcwMDAyRjVEMTlBNzhGRjA4MEZEOUNFQzI0MjJFMDM5QTk0OTI3Cis6MTAzODgwMDBDN0E1NzA5Q0Q2OUZGQjlDRkQ3QkE5RTMxQ0VENkNFNzU0Cis6MTAzODkwMDBCOTVBQzdGRTkxNUYyMkE3QUZBN0UzNkREMzFCMDU5MDZFCis6MTAzOEEwMDBBM0RCRDY1MjVCOUU5NjY3NzlGOUJFRkQwQzMyMDNFODI2Cis6MTAzOEIwMDBGMDJBQzkxNzRFMDA3RTVGOTU3MDFGQ0NGREM2Q0NENzhECis6MTAzOEMwMDBBRTA3QkQ3RThDRTUyNzY5RDNGNDlEMTA2RkQ2N0UyQUE2Cis6MTAzOEQwMDBBMTlFRDJEMjQ4NTk5OTJGQjlERkY0MEZFN0MzMDRGNjVECis6MTAzOEUwMDA0RkNDRjhENzkzNzQ1RDQxQUYxQ0EwN0U3OUIxMEJGQzJGCis6MTAzOEYwMDA2QzBEQ0I3REQ0MkY4N0YyRDNENDJGODdFNzQxRUE5Nzg1Cis6MTAzOTAwMDBDM0ZCN0ZBNjdFMzk5NDBGNTFCRjFDOUVDRjUyQkYxQ0I0Cis6MTAzOTEwMDBERTNGNDdGRDcyMjhERkU1QUJDMjc4RjkyMEFEMEZGNDNBCis6MTAzOTIwMDBFMjJEM0JBODRFQUIwMDM5RUNEMjgwM0U5QzcyQThBQTk3Cis6MTAzOTMwMDBFQTM2NzUzNTI1QTkyRjc0M0Q4NUZCMUNENTU3QjE3QzFBCis6MTAzOTQwMDBFQUU1RjczRDg1RkIxQ0Q2Mzg5QzM1NEU5OThDQzMwREI2Cis6MTAzOTUwMDAwOTY2MUMwRTQyQTNCRkU2RkIxMTIzRjFCODI4OEJDN0YyCis6MTAzOTYwMDA0RERDOEY2MUY2ODNGMUNGNTFGREYwMzhFOEJCNzdGRDc4Cis6MTAzOTcwMDBEQkUzNkRGNEQzODZGOTBGNzQ3QjhCRTA3QzQ3MjM4RkY4Cis6MTAzOTgwMDBGQjk5RjkzM0JBMkQzRjdGQzNDMTE2Q0M5RjUxNzI4RTdDCis6MTAzOTkwMDAzN0MyQkExRUFDRjA2MTVFODlFMjhBNkEyMDZGOURGRTcyCis6MTAzOUEwMDA5Q0U5QzczOUVENjlGM0U5RDQ2RjdFNkU1Nzk4RjFENTdDCis6MTAzOUIwMDBFRDJFODJGOUQ0MzE4MURBMTM2MDVGMzRDNzE3QkZFOTg1Cis6MTAzOUMwMDAxQTNCRUU3QUMyNUJDNEYzRjhFQzcyNjFFNDFDMDE4RjFGCis6MTAzOUQwMDBGQkI4QzE5QUE1RjM1NDA0OEUwRjlFREY4RUEyQjE4ODY2Cis6MTAzOUUwMDBDNUZGQUNGMTU3NkY3MTFDMEZBRjdCN0QwNkRBNzUwMjE2Cis6MTAzOUYwMDBCNUY3RDBGRUQzQTIyMTg4QTM3NUMyQjk4MTE0RjNEQjM5Cis6MTAzQTAwMDBDQkY5QkQyNTQ3NDE3QkEzMzM4N0U1OEJENEU0ODc0M0JFCis6MTAzQTEwMDBEMEJFMkRBNzMyNjQzRDQ3NjA5RTczMThGMDU3QUE0MzZECis6MTAzQTIwMDA5NkZFNkVGNTE3OERBQkZGMjRBQUFGRjU3MUY0QjVFNEUxCis6MTAzQTMwMDA2NkU3N0NEQTBFNUZBNkMyRjk4RDZFREZCQTQxRjBBM0FECis6MTAzQTQwMDBCQjQzNDE4Q0QzRjdFNzU0OTIyMTRCRkY1MjY4MjE5RTMwCis6MTAzQTUwMDBGMzkwN0NDQzFFOTY0MjJBREFDMzMyQ0NCRjM0NTlERkI1Cis6MTAzQTYwMDBBQ0Q3QzJFNTNFNjU2NzhDMkY3QTdDM0Q1OENGMkQ0Nzk5Cis6MTAzQTcwMDBGMDdFMDk3NzEwNTQyNjdENkE2Q0RGQ0U1QjJDMTJENTYwCis6MTAzQTgwMDAyMjJGQ0M3MUVGRjYzMjc5RDk1RDFBRDUyMENFRDIxRDE2Cis6MTAzQTkwMDA5Mjc1MzgyRkQyQUQ5NzIzOUVEQjM4OUVEQjBBNEM3Qjg0Cis6MTAzQUEwMDAyMjhDNzZDQ0Y3Qjk3QzM1RkI2OUUzNzE4MEI2MDYwNUNDCis6MTAzQUIwMDBFREI5NDg1Mzg2NTY5Mzg1NzlCRERGMDE3RUVFRjZCNUE0Cis6MTAzQUMwMDBBQUIwN0ZBOUU0NTQ4Q0RCRUZDMDg0RkQ5NjREQUE5OTdGCis6MTAzQUQwMDA4N0ZEN0UxRkZBNTVGQ0VCMzRFOEQ3MzVDNkY5QTQ2M0ExCis6MTAzQUUwMDA5QzFFM0VBOURERUFEQ0VGQTNEMDg2QUM3OTJCQ0VBN0U1Cis6MTAzQUYwMDA5RkRCOUZDRTc2MUI0QTg3MTQ1OEY3MkQ4RkQ5Q0YzMzgzCis6MTAzQjAwMDBCQjA4M0JERkI1RjFEMDY2RTRGM0VERjIyMERBNTFEQjIwCis6MTAzQjEwMDBDRjA5MjlDRjg5ODVEMjA0Q0U2RjIzRkVCRENEMEVDQTMxCis6MTAzQjIwMDBFM0ZDOTRDN0JGMDNBOTgxQkUyODRCRDhFRDk2Nzk0NzIzCis6MTAzQjMwMDBFREU1Rjk4M0Y2RjI4MjEzNEUzQkM4NzgxNUVDQTBENTdCCis6MTAzQjQwMDA1Q0VFMEQ1Mjc5Q0Y5MjY2ODY2NUMwNDcyNDE2QUYwMkFGCis6MTAzQjUwMDBCOEVCNDk1RjBCRTQ1M0I4MjQ5NjE3QjI5QUVCQkY5NUM0Cis6MTAzQjYwMDA1QzNGMDZEMjMyMTBGRUJDMDZBRkNERkYyNEZDM0VDMDQ3Cis6MTAzQjcwMDA3Q0RFN0Y0MUNEQzBFNjc2MTBCMjExRDNBRUQyRDE2RkRDCis6MTAzQjgwMDAyREI4RkFFOTJBMTQ5NzBFRkJBQURFQjA5RkY3NUZFOTc5Cis6MTAzQjkwMDBCMDlGOUM3NjU2OTVEQzhCNzlCQkI5OEVCODg2QjlFRjExCis6MTAzQkEwMDAwQkYzODQ3QjBGOUNFMzVGRUNCODY2N0Y5MEFGMDVGMjZDCis6MTAzQkIwMDBDREJDMEYwNkVGMUZBNkVEMEJFNDg0MTBBNjc4Q0E2REVFCis6MTAzQkMwMDA2NEU3NzVGMjZFMjc0NjZGMEEzQTVFQzJENzdEMTRERTRGCis6MTAzQkQwMDA2MjRCMTA2RjRCRjlCQjVDMUZCQkM3MkJCNzQ2OEFFQjIwCis6MTAzQkUwMDA3NEZDREM4NjNFQjQwNzU2REQ0MkU3ODM3NkY4NzlDQzc4Cis6MTAzQkYwMDA5NzMxRUI2NzY2RjRFMUI5QTVERDc1MDJDRkUzMjU2ODdGCis6MTAzQzAwMDBENzk4RUJCQ0RCQzdDRTE5RDY1RjI5QzQ0NTY4REY1ODBGCis6MTAzQzEwMDA4NEUzMjM1QzQ1QzlGNUE1NzgzQUM5RjBDNEYyMTJBRjM0Cis6MTAzQzIwMDBBREI1OUY4N0FDNzdEODJGMjYzREFDNzRCQzNGRTk2NTE2Cis6MTAzQzMwMDBGQkU3MjYxRkJDN0JEOTg5MTk1MzI4MUMxQjg0OUVEQUZECis6MTAzQzQwMDBCNDY5MTdBRTJGMkRGQ0UxM0EwRjdDMDhCRjRGNjIyOUYzCis6MTAzQzUwMDAzMjk4RUZBQkZFOTM4NkU3NDIzMjg2MUUyNjk0MjRBRjVECis6MTAzQzYwMDA0RDIzQjE5QTQ1ODRGQzhCNzdGODEyODE5NkZGNkE2QkRECis6MTAzQzcwMDA1RjQ3NzcwMTFDRjMxRTdFMEE4QzNDNzdENzMzNTdENUZDCis6MTAzQzgwMDA1RTk5MkM3QkVGRUJDNzcyOTA4RjAzNUI5MDZDQkQyRDIwCis6MTAzQzkwMDBGN0MzNTBENEM1RDMxODdDNUIwREIyNTM4MjFDNUM1MTYyCis6MTAzQ0EwMDBEQjE5MkU0Q0I2Q0I4NDc2QzIzOEVEMjI2NEE3OUNBMkQ5Cis6MTAzQ0IwMDA5RENGNkM0N0QxRDUwOUY3M0ZGMTc5NzlGOTc3OTFDMzU5Cis6MTAzQ0MwMDA2MzFENUYwNkJDNjlCQTBGQ0YzQjJFOTMzNUQ4QkZGQTkwCis6MTAzQ0QwMDBCNDcwNEM5QTY4REU1MUIyRDMzNTZENzQzQjBBNzY4QjYyCis6MTAzQ0UwMDAwOUJGOTgxQUZFMzg3Q0I3OEVFRjFBMDdGRUZGNkU3QzZDCis6MTAzQ0YwMDA0Q0Q0OUZDMkJGNUYzNDdDQjQ3QUVCQTRCMUU3MEI3MEE1Cis6MTAzRDAwMDBCOUYwNUUyMkREMjc1QUZBRDlEMUZGMjc4QzhCQ0JEN0E5Cis6MTAzRDEwMDA5MTMwODRCQzY0OTdBMUMxN0U1RUE5RjYxMEZBRjc3MjU3Cis6MTAzRDIwMDA0NjhEMDY3NkMwMTY1QTA2M0I2MDRCNUYwRkM2QkY0QkVBCis6MTAzRDMwMDA4QjFGRTgwNkEyMkY0RDc4MDlDODgzMzk0NENCMzg0MDQxCis6MTAzRDQwMDBGQjlEQTNDOTcwMDI4QkM4NTcwRTg4MTA0RjI3OUYyNTczCis6MTAzRDUwMDA5ODVGOTJERUVGNjVGNzA4MTU1RUZFMkRGMEI3MzIzMjAwCis6MTAzRDYwMDA1NERDQ0Y0OENCQThGQzE2MzM3QTU5OUNEOTg0M0ZBRDlDCis6MTAzRDcwMDBFQTc4MzVDNERGRTU3QTEyMTYwMDJFMjE0RUFBODBDOUYyCis6MTAzRDgwMDA2NjExRENERkYwMUEwN0VGODRGMzAyNDQ2NkZBMDlFRkVDCis6MTAzRDkwMDBEMjAxQkRDQUUzRUQ5MzE5Qzk5MDZFNDVBQkM3M0M5N0ZDCis6MTAzREEwMDA5RkM4MThDNzlBMEM1Nzg1NTFBMjJDMkRDRERDMDlGMDVECis6MTAzREIwMDA5NDQ2NjkwNzAyQzBDRkUyNjU3M0EyNjIzODQxRkIyRkM3Cis6MTAzREMwMDAzRkNEREE5MTlGQjE3MzI2RDQzNzU5RjM4QzJGODk1N0ExCis6MTAzREQwMDA1M0FFNENFNjcxRjhEMDVBN0I5QzlBMENEMzM5RDNGNjhCCis6MTAzREUwMDBFNTNGNUJCNTE3RTIxNDkzNDZDOTZGRTZCNzdCMzk5Qzk0Cis6MTAzREYwMDBFOUE3NDkwNEZBMEZENkQ5RjU4Njk3RTc3OTdCMURGNzJECis6MTAzRTAwMDBDQzU0Rjg1REY2RkJBMTlERkVDMzU3MjNBODA3REMyNDI0Cis6MTAzRTEwMDBBQzJBNjg1RkFDNDVCQkMxRjQ0Qjc2NDM0NUIwQzcwQkQ5Cis6MTAzRTIwMDAwOEJCOTdEN0Q5QkU5MkI1MjcyMUU2QTdCOEJENDQ1NUEwCis6MTAzRTMwMDBDQkU5RjdGNTVFMDNGMzEyRERCNDRDRjEyODI4NDRDRDRECis6MTAzRTQwMDBBMUVGNzM0NTE2NkY2OTExODgwQ0U1RTQ3ODA5Q0M0NzNBCis6MTAzRTUwMDA3MEFCOUY2OTA3RkJFNUIwM0EwRkVGNEYzM0ZERUEzNkQxCis6MTAzRTYwMDAyRDhDRjkxMkE0QTREQTY2Mzc5Qjc5NjFCNzk2MTU0REFCCis6MTAzRTcwMDA4NkVGRTk5MzQ2RTI0RTFBRDBFNUFERDlDNTY4NDcwNzBCCis6MTAzRTgwMDBCMjg2RkUxQUU0RUNCOUFERTlDQjU0OTBBQjkwQUY3MUI5Cis6MTAzRTkwMDAzOUU0NDc3QjNCNjM1NEU5QkJDRkU2MTFERDYyOUZCOTUwCis6MTAzRUEwMDBFNTQ2OENCM0I5Q0Y0RUIxQkQ0RjM0REJDRjVCMUIzRTgzCis6MTAzRUIwMDBCMTA2QzY5OUVBNjM3QzU4NDVCNDc2Njg1NzQ1RUNFNzg1Cis6MTAzRUMwMDBBQURENjc3MzZDRjY3QUIyRkY3Q0RCRkIwNEI1NkJBQ0UyCis6MTAzRUQwMDBGNzAwOERERDdGMUFEMTRCQUNGRDRGMUJBM0ZGMTk4RTcwCis6MTAzRUUwMDBGRUI1OTRGRDI3RkJDREIyRjVEQjIxQjNGODZCMkNFOEQyCis6MTAzRUYwMDA0RDc5MkZFNTAyNUY3NTMxMUM5NTFENkI3RkEwRDJDN0YwCis6MTAzRjAwMDBFMjlBNURBMTQ2REMxRkE4MjY5NEYxMjlCRDJDMzk3N0UxCis6MTAzRjEwMDA1MjYyRTc3RDA5REE2RjI0REZCRTNGNTBDREU5NThBNDM1Cis6MTAzRjIwMDA5NDgxRTcwNzY0RkJGREM2OEI4OUYzQkU2M0JCNURGNDM4Cis6MTAzRjMwMDA0Qjg4Mzk1MDdDODlGRThBNDFEQzI3Rjg5MzBGQ0YwM0U4Cis6MTAzRjQwMDA4RTY1MzcwRjM2MTM4QzRGMkY0RTFCQkEwREY2QzE1N0E3Cis6MTAzRjUwMDA2RUQzOTU4RTEwRTYzREEzM0ZGRjM3REJFNjJGMDMzQjg0Cis6MTAzRjYwMDBERkJDMDdCMzIzMjgyMjVFMjJENTkzRjEzQzk3RDk0RkJCCis6MTAzRjcwMDA0NDIxRDM0MTJFNDY0NDk2MDc4MTNGNzRGQ0MxRUM1QzNBCis6MTAzRjgwMDA1QkJFODZGOTc0OUU4N0FGMzc4NEM1QzU5Njc5MEQ0MkFFCis6MTAzRjkwMDBGRUExNzVCQ0E1NzlCRDkyNjUxRTExMzc5OThGRTM3MTlECis6MTAzRkEwMDA3Qjc3NjRCQzQ5OUY2Q0JDNjMzQzlFNjU4RTU3QkZDQ0RECis6MTAzRkIwMDAzRUJGN0E0NUMzRjlENTczM0UzNkM3M0IwNkYzNEI4MTA2Cis6MTAzRkMwMDBERjA5QzdFM0Y5OTUyM0UzMkRCN0NGQUZERUFERTFGQzAxCis6MTAzRkQwMDBFQUY5N0RCQzIzRTM0REZBNjRFMzk5NzE5RDJFQTVCMTA2Cis6MTAzRkUwMDAxMUU4NzBBQ0Y4OEUxOUQ3QjlCNjZCQkYyREFFNDM2MjJECis6MTAzRkYwMDBGQjk3NTYxNTEzQjI1MzYwRjIyM0VFQUJFRTA0QkE3ODdBCis6MTA0MDAwMDBCRkVFRDYxMkQ0MkJEQ0JFQzY3QjU3QTkzRTVFMjkzMzQ5Cis6MTA0MDEwMDA3ODU3RTRGQkUyMkQxNjNDRUVBNjcyQzQ5ODA5RTcyOTE2Cis6MTA0MDIwMDA1NDAyMDdDRkUwN0M4NTgxRTcyRDQyRjg3Qzk0REFFQkRGCis6MTA0MDMwMDAwNkU2OTc5NEUwRjdDNzlCQzM1OERFRDdCQzEwOUY2NjhGCis6MTA0MDQwMDAzRjI1MEJEOUZENjBCMzE2MDkyOUVERjYxMzNFRTY3RjM3Cis6MTA0MDUwMDBFRUNDRDFBRUZCMTJFOEI3MkEyRkNCMEI1RTc4MDUzMTQwCis6MTA0MDYwMDAyQzc2MzQzNUFDMEY3QjYwN0ZFOEYzQTQwQzc0RTQ4Q0MxCis6MTA0MDcwMDA1RDBDRUU2MENEQTQzOEFDQkZCNzZDNjBCMDE5RTJBMEE3Cis6MTA0MDgwMDBCMjRCQzdCQzU4M0RGNURGM0I3OEM1QzdGQzc5Qjc5QjQxCis6MTA0MDkwMDBCNTI3NTdCMDdCNTI1NzcwRkQ0NEE0M0FDQzNGNUFCMTc0Cis6MTA0MEEwMDAzMjAzRjMxMTU2QUQzNkZDMUFDNURCNkE0MTc4QjU5ODc4Cis6MTA0MEIwMDBFQjNCMzgxRkY1MzlCRUQ0NEU3RjIxMDg5QTg3QUU1N0E3Cis6MTA0MEMwMDBEMDkwRTI3MDhGRENFN0YyNUY1QzIzRDA3RTIzRkU2QjQyCis6MTA0MEQwMDBEMUNGODhEMDg2OTlCNDlGQ0Y3MTdENUJGNTg2OUI0MDA4Cis6MTA0MEUwMDAzQzgyNUNBNUEwRkM1QUJEREFFRTE3RUNGNDI0MzRCMDk3Cis6MTA0MEYwMDA3Mzc2OTYwNTQ5MEI2REI3QUFDRUZFRERFRDY2N0MxNThECis6MTA0MTAwMDA3MURDMTNCMzYyODI3QjYzQ0NCQzVDMjc3RTlDNzFEMzcxCis6MTA0MTEwMDA5RkY5RUNGMUQxMzNBNDc0MDc5RTBERTNGOUJCQ0VGNjAxCis6MTA0MTIwMDA2NjFDQjREREM3RTQ1Qjk3QzJFNEMzNjgzRTYwRjBCQ0M0Cis6MTA0MTMwMDAwQjdEQTNGRjc3MDJFMzY4MjY3Q0I5NzI1QzAwNzk5RjUwCis6MTA0MTQwMDBENzcwQzI5NjFGNEYxMThCNDZCNUI5NEY0MEE0MDM2NTc3Cis6MTA0MTUwMDBBODg3MURGM0Q5MkQxQ0M4MTlFRkRFQTg1QzIyRkY2RUJECis6MTA0MTYwMDBBODg0RkY3RDAzNjFGNEJDREYxOTM1RUY0NTJGMTU5MzVCCis6MTA0MTcwMDA1NEZDQzNFMkMxMkI4RTRBRTExNjNEODkxNzEzMEZGRjkxCis6MTA0MTgwMDBEQjdDQjRDQkM3RjBGOUQyRDIwRjJBOTgxRjk4NkZGQjEzCis6MTA0MTkwMDAzQjAyRTYzOUFGNkI0N0NBMzI5MTJERjRCQzcyQkQ2MjY3Cis6MTA0MUEwMDAzMDdGNzVCODE0RThGMkY4OTU2OTYxRjZGNzMwQjgxREZDCis6MTA0MUIwMDA5NEY4QTUwODc2RDBBN0VGREYyOEIwRTUzRkYzN0VDN0Q3Cis6MTA0MUMwMDA1QTJGNjdERUE1RTU1QzcyRjI5RTA0Qzg3RjY5MDk4N0Y1Cis6MTA0MUQwMDBEMDFFQzgxNjA5RjA1MzJFRTRFMzA1RDhGNzkzNzZCQjNBCis6MTA0MUUwMDBENTk2OEZEN0Q2QkY1RjgwQjhFMUMzOTA5RjY4Mzk4RkNGCis6MTA0MUYwMDA5N0Q3RDAyNzc0ODA3REQ3MTI2NzcxODgwNEFENDdFMUM3Cis6MTA0MjAwMDBDRTZGNDgwOEVEQTVDOUJDMkZBNzVDQ0ZCRkM1OUUyRkI4Cis6MTA0MjEwMDBEOEIxNjhCNTc2NDA4N0JDOUFFQTFFQjgyMDZDQ0IyRTIwCis6MTA0MjIwMDAxNkU3MzJFQjhGQzRCQkY4Mzk1NTE3NjkyNDcwNEU0MzNCCis6MTA0MjMwMDBGMkIxNzg3Mzg4REZERjMxNTE5RUVGODc2MjRDMkIyQzBGCis6MTA0MjQwMDA4NEZDREVCODVBNDVFN0JGMjcyQkJBQ0M0RkZCRUQwRUY2Cis6MTA0MjUwMDA5NjM3RjYwMjdEQ0E2MUNDMDc1RkRCNzQ0RjA0RTI4NEI3Cis6MTA0MjYwMDA1QTU2RUEzOEY4NUE2RTFGRDRGQjE5NURCREVFNEExNDRGCis6MTA0MjcwMDA0MERDRkNFNUFDRUE3QTdGNzY4QUZBNEQ1RkM1RkUxNjMzCis6MTA0MjgwMDA4RjcxMkZGRDdBM0Y4QkNGM0MyQ0E2OTYwNzM3RjBFRjJFCis6MTA0MjkwMDA1RkQ4MjBFMjdENDMxRUUyQzc3M0FDOUVFMjlFODU4MDFDCis6MTA0MkEwMDA4Rjg3MzdFRTBFQTczQThGQjk1MDhCQUVGMzVCRjBFRUU3Cis6MTA0MkIwMDAyOTY2RjcwNTEwRDI3NzE5Q0M3M0NCQzc4RkY0N0Q5Nzk5Cis6MTA0MkMwMDBDRTNCRjM2MzFGQ0FEOTRDODlGNTZCNjlCRkRFM0ExRjM5Cis6MTA0MkQwMDBCM0ZERjM3RkZBMDU5RUIzN0Y5RURGQkY0RUM4RjRFNUMyCis6MTA0MkUwMDAxMDY3REYzRTUyMjYzMTM4RThCQzNEODM5NzYzRTI3MkE3Cis6MTA0MkYwMDBGMDJCOTNFNUU3OTY1NTQxMTk2ODk0MTJERkJCRkU5N0MyCis6MTA0MzAwMDAzQUUxRkU5QUVEMDJFMUM0M0FCODBDRUJGM0ZCREU3RjMyCis6MTA0MzEwMDBDMkJGMkZCRUU2OUQ2RkVEMDA3RDUwQTlBMEJGQjk5RDI1Cis6MTA0MzIwMDBEQjNCMjY3Q0ZGRTk2Nzc5M0ZGRkM5RDc2NTJDN0M2RUI0Cis6MTA0MzMwMDBFM0RGN0Q4MENGRTA0NUUxNzM1QjJBN0M3RTI2Njg2Q0ZECis6MTA0MzQwMDA4N0Y3MUVDODA0QTEyMDc4M0U1NjZGODdCQ0VDQUYzN0I0Cis6MTA0MzUwMDA5M0M4OTdFODFDMUUwRTFGREMwRjY3OEY2OEZCODc1MkZGCis6MTA0MzYwMDBCNUZGNDE5NkYxMzUzRkMyNzMxMkU3RTcyRkY2ODUwMTlECis6MTA0MzcwMDAxNTVCMTYxMEVDMjcwNTFDREYxODZGNURDQjMzOTg5QzdFCis6MTA0MzgwMDA0QjRCNjdDRjRDNkU1RjRBRUVDMTEwRTQyRjY4MTVGRkIwCis6MTA0MzkwMDA3MDlCNDZFNTRDNjdFMUUwOUE1NDcxRTJBNzAyQ0NFRUNGCis6MTA0M0EwMDBDRjE4MjMyRTdFOThFM0VGRUFDQ0M4QjcwMUVFNzZFRDY2Cis6MTA0M0IwMDAwMUY0RjcxNDgxNDRBMEZFOTY4NTQzNDRCMEI0N0IyM0Y2Cis6MTA0M0MwMDBDMEU4OTdDMkZEMENDMEFENUNDNkVFQjFGNjUzQkM0MzZECis6MTA0M0QwMDA4MjlDQkY4MkMxQkY0NTNGNEUyMDRGREUxRjNBOEU3OTdGCis6MTA0M0UwMDBBREZFOEEyMUU0NzcxNDg1Qjk4Q0FFQzAxRjU0QjlGREE3Cis6MTA0M0YwMDA3NkQ4RkYyNkRBRjU5OTkyNDk3Nzc3NzQwMTFENEFDOTc0Cis6MTA0NDAwMDAzMkQyNjU2RjI2NkJGRkZCQzAxRDVERTAyRkVFNTE2ODU5Cis6MTA0NDEwMDAxQjkwODNCOTBBREEzN0NFRjlGRDJDQzBFNkE3NjhDNjJGCis6MTA0NDIwMDA1MTgwNzcxNDNFREQ0M0RGODI3QjA5QjY0RjY3RjdCOUQxCis6MTA0NDMwMDAyQzE2MDdEN0RDMDA3NDc5OEQwRkVEMzNGQTdFOERGNURECis6MTA0NDQwMDA1Q0ZFNDc5QzdGM0ZGMjMzRkI2QUZCOUY1NEZDRUU1Q0IzCis6MTA0NDUwMDA4RkIxRThGNTI0NkZGRjA5RThGNTY0MkFGRUE1RjRGQUE4Cis6MTA0NDYwMDA1Qjc4NkZBMUQ3MEY0ODZBN0E3RDdCMEM3QUZEMEY2ODY1Cis6MTA0NDcwMDBFRkM0OEJCMzJDMTE2MzE3RUMyQkNCMUYyRERCMDdGRDg3Cis6MTA0NDgwMDBDOTlGNTlCNEVCQkJGNDI5N0RCNDJEODZBQjE5MTY2Q0NBCis6MTA0NDkwMDBFNzlFOTNGMjNFRkEyNzE4RDdCQzdGQzBGQzNCNDZDRDdGCis6MTA0NEEwMDA0MDA4RjM1M0Y0QkJBMDcyMTdDOEIxMEJFODU3MEU2NDcxCis6MTA0NEIwMDA4RkVFRjc2NTNGODM3N0YxMzVCRTY4QUFGQjE0QkUxMzE0Cis6MTA0NEMwMDA5MEQ5RjlEODAwQUIzNzE2REZGQzNBQzBGMjUzQzZFMkY4Cis6MTA0NEQwMDA5QjE3MzgxRjUwQkUwOTA2RTY0RkNDMzc2NzkyN0M5Mzc2Cis6MTA0NEUwMDAxRkI4MjBCRTc5MDg5RjlFNjJDNjM3MzhGRkNCNDdGM0JFCis6MTA0NEYwMDAwRDg5QURFQjAyRjlEQTU5QzhGODYyQ0VGRDlCOTAyRjE5Cis6MTA0NTAwMDA0NkY4MjgxNkMzRUY1MkIyOENGMkRCRTRBMzhGRUY4RjhDCis6MTA0NTEwMDA2MTdENjdGQkMwMThGNzA2NTY3MDdFNUFBODQ1RTYwMTE0Cis6MTA0NTIwMDBGRThENEJCNDc2NzY4RTY5MDhDRkVCRjY5MkUxN0UzNzNFCis6MTA0NTMwMDBFNjA5QjNCQzVDNkYyQzY2MzBGMzYwOTBDMEZEQjQ4QkIxCis6MTA0NTQwMDAzODFFRjY4MDhGMDY3RTUwMjU4RjY3Qzk4MzY0OTU3RjVECis6MTA0NTUwMDAzNDNGRkIyQjEyMTVENjdCNjA1RUUxRTNGQkQyMjM0QjhECis6MTA0NTYwMDAwMThGQkQ2NDY4MTZEODY3NjNBRDUzMkQxRjRGQzgzMkU1Cis6MTA0NTcwMDA2QTAzMjlGODdGMjIzREI0MjFDMEY0RDAwNjNFNkVFNkRFCis6MTA0NTgwMDBDNzZBMjNEOEE3NEU3RTVGQkNGMUQ5M0YzQzNFNEUzRjYxCis6MTA0NTkwMDBFQjM5MUNFQjAyOUY1ODVGQUQwQkE0RDY1NzM3MDRFQ0U4Cis6MTA0NUEwMDBGQUFBNDIyODRBQzlGRkVCMDMyOUU0MDdFNUZGOUI1MzE3Cis6MTA0NUIwMDBFMUU1NTNGMEZCOUQ4MTE0RkMxRTA5NUMxOEJFOUZFNUVDCis6MTA0NUMwMDBGODdFRjY1M0UyN0IxNzZGREYxM0Y4QzRGMkI2MjcxNUI3Cis6MTA0NUQwMDBCRTI4QkU3NzA2QjIyRjA4REZCQjUyQUQxN0M1RjdENzhFCis6MTA0NUUwMDAwM0I4RkU0RjIzRkM3RUREODdGMUYyRUUwNUU0MjBGNEY0Cis6MTA0NUYwMDA5MzAyOEU1RTZCM0ZBQUNFRkFBMTNDRjU4MTQwRTk3RTI0Cis6MTA0NjAwMDBGMTQ3RERFMTU0RjcyNEQxNzZGQjUyQjVBQjBENjgzQ0EwCis6MTA0NjEwMDAwRUFENkYwNkZGRTFFMUNGRjg3MDVGODFFQUM3MDM4MTVECis6MTA0NjIwMDBGRjVFQjk3RjI4MTUxRDJDMTY5OTFDRjIwNjE2NzU4MUEwCis6MTA0NjMwMDBCRUZGMTRGRDBGQTQ5MkZGNUZFNTc0MzY5MTVERjAxQTgyCis6MTA0NjQwMDBBNzBCM0FFRjlGMDI5QzRFRjlEN0NCQ0YzMTJCNUFGNEYwCis6MTA0NjUwMDBFNTAwRTI2QkU4NkE5MDU3N0JFRUNFMTQyMERFOTU2RkEyCis6MTA0NjYwMDAyNDA0RjAxMzhFNzIzRDU2MDU5N0ZEQ0M0RkI2REIyMzI0Cis6MTA0NjcwMDAyNzA0Qjg2NzY3NEZBMzI2QzA3OTI5NEI3RkFGMDdCMkRECis6MTA0NjgwMDBDN0VFQ0YwOTA3ODVFRjM3MzBCRTJGREQxODgyNzZCNTJDCis6MTA0NjkwMDA3QzdFMTc2QjI3MURDOTM0REUwQUEwRkU4OUJDMEQ0RjM2Cis6MTA0NkEwMDA2M0E2NUQ2RTlCRjMxMDIzM0QyQ0NGNzY2MUVBQkY3MzRBCis6MTA0NkIwMDA3OUQ0MkY5QkYyRkY3REFCRkNGRjhGMTFCQTYyRkQ1REI5Cis6MTA0NkMwMDBBQ0ZFQTFGMDlERTNGMEZEMjUxNTdDNEVCQzRDMDRFNzRCCis6MTA0NkQwMDAyNTAxOTlFQkRCODg5QTlFNDI0RjM5RkIzM0ZERUM5MTIzCis6MTA0NkUwMDA3NTAyOUQ2NDg5RkI2NEE3OEZFOEVGNjAzQUFDNDc4NzQ5Cis6MTA0NkYwMDA4OEU3QTg1NjcwNzlCMjYyNjEwNkI3REIzNTJGRjRGRjAwCis6MTA0NzAwMDAzMDhGQzMzRjdDQ0IwMzU1QjBBRkRFN0JBRjU2MDYyODVFCis6MTA0NzEwMDBDODZENjA3QTRGQkY2NTBBQzY1N0E3RjI3RTlERjA4RkJECis6MTA0NzIwMDBCNDU3RkE2NkMxREY4RkEwRTM0RTgzNzkyQzU5NDQxMjQ3Cis6MTA0NzMwMDBFMDM3QTY4M0REODBGMTBBMERGRkNFNzFBNkJCMjcwNDBBCis6MTA0NzQwMDBGMUQ5MkQ0MkNGOUE3NUEwNTdBRkY2QjE3MzMxQTFENUVCCis6MTA0NzUwMDAxM0RDOUZEOTZBQTM1QjEyQUE5OEEwN0UwQkQ2RDdEMjhFCis6MTA0NzYwMDA3QUYwOUU5NTBCQUVFRkVFNDk2OTY3RDVBNDhCOUM5RUJGCis6MTA0NzcwMDBBMjRCQzZDNTZCMjg4ODcxMkYxM0JGQTNDNzYxRUI1NzI3Cis6MTA0NzgwMDAxNTY5MTQwMERGRkUwQTQxODNENDNCM0ZBNTEzQjA5NzlGCis6MTA0NzkwMDBDNEUyNDFDQzlCRkE2QzA1QTMxNzQyRkQ5MkYxRUY2OThDCis6MTA0N0EwMDBFOTM0RTE1QTA1NzhGRkI0NzA5OUY1QzYxRThGRDc3M0M2Cis6MTA0N0IwMDA5Q0I3MThGOTdCNjQzRTI2QzdCMDIyMkRCRjc3MzQyQkY3Cis6MTA0N0MwMDBFNUJFODJGOUVDNkFENjBDQjgzMkY5M0Q0REM3RkIxQjQ5Cis6MTA0N0QwMDBCQjQ2RjJCRUMzQTE1NUZFRkZGOTdBQzk3OUM1NTk3QzIzCis6MTA0N0UwMDBENDUxN0ZFNDlFOTI5MDhBRjYxRkZFOUQwRkVCN0QzRDkzCis6MTA0N0YwMDA5QzJFRDQ4QzQ4MkMxREU1NEExOEVGODlBNEU1NTY1ODA4Cis6MTA0ODAwMDAwRkEyRDJCMjFGQ0JFRDU4RDY0NkNBOUQ1ODNGQzRFQTdDCis6MTA0ODEwMDAxMzREQkIyMEJDRDM3NkRCQjExRjc5QTQ5RjFERDg4RjZECis6MTA0ODIwMDA2RjY0REM5RDU4MEU4RTk0MUZDNEZBRjlBQ0ZFODU4RTIxCis6MTA0ODMwMDAzM0VBOUU5NjQxMDlFN0ZGODE2Q0E0QzNCRUU5RTc5QjdBCis6MTA0ODQwMDA2RUMwRjhEMjc1NEQzN0UxQjNCQjU5QUI4MjM4OUQ3OTU0Cis6MTA0ODUwMDA1RkM5RTdBRkJCNDEwMzdGRkFCQTJGM0Y4OEZCRkE2NjE3Cis6MTA0ODYwMDBGRjJCQzFFRjAwRkVEN0U1NUFCMDk3OTQ0MjMxRjI5ODgyCis6MTA0ODcwMDAyRkM5N0Y0OTM4REFCMUJDNDI2NkY3RkVBRjVDNzg3QTVGCis6MTA0ODgwMDA3QkJCMjU3RUE3QzJERjRGODdGQzFBREQ3MjVGMDY0OTFFCis6MTA0ODkwMDBDQUMzMjcwNEUzN0JFOTE3NDFDRkEzRTc0OUM4MDBBNUIyCis6MTA0OEEwMDBERjBGN0NDNUYxMThEMjczQjU5NjhBNkZDQ0Y5OEVENTFGCis6MTA0OEIwMDBCRjM5REZCMUU0OEQ4OTM3RjNGRDk2NjJGRUY3NzYxRENGCis6MTA0OEMwMDBGMTRCQ0ZGNDFBQ0NGRjU5Mjk3MDM4RkRGQ0ZFNDg1RTNECis6MTA0OEQwMDA2RjA1MURFN0U5NTJBNDBCMURFODc2MDVGN0VGOUNGQTdBCis6MTA0OEUwMDBDMTFDRjcwOTIxN0EwMkU4MDRFMkM0Rjc5NjhGQzZFRkVCCis6MTA0OEYwMDA4NUUyQ0RFQzdGNzIzNDQ2RTBGRTJFNkYyOUMxN0RCMTlBCis6MTA0OTAwMDBBMERGREM1NzY3NzJFRDIxOUY1OThFNjE3MjQ5QTRCODEwCis6MTA0OTEwMDAwN0U1OUM0NzM3RTUxRUQzOTM1QTVBOUYyMTk2NTEzRjhFCis6MTA0OTIwMDBBODg3RDQ4NjY2NDExRTY4MzQwNDdGRUE4Nzk2OEZDQUJBCis6MTA0OTMwMDA2ODRGQjAzMjFERkVFODAwREEzRkRBNkNCOEYxNTE2RDE1Cis6MTA0OTQwMDAzRkY3QTNBMzU3MTI3Njc0MTFGN0REQ0VGRDA4RjVCNzM0Cis6MTA0OTUwMDA1OTg2MEI3QzRCNjhEOTNCNTIzNkQ0MTAyRDE3OEQ5NDU5Cis6MTA0OTYwMDA2MzUwREVDM0VEM0VBMUU3REM4RjYwQ0Y4NEVBRTU3M0UwCis6MTA0OTcwMDA1Njc5NUZDNUU1RUE0NEYyRjRCRjAwQjlFOTA1Q0EwMDFCCis6MTA0OTgwMDA4MDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRTU3RDg4Cis6MTA0OTkwMDAwQjc4NTRENUI1RjAzRTczRTY5NTY0MjY5OUJDMjcwNDkwCis6MTA0OUEwMDBDODA5MEYwOThBMzgwOTA0ODI2MjNCRTFENTU4NzkwQzlECis6MTA0OUIwMDAxNTM1OTYyODkzODQ0Nzc4MjYyMEQ1QjFEMjMyMjE4MEE4Cis6MTA0OUMwMDBBMEQ4ODZBQTE1NkJDNTA5QzU3QjY5QUZCNkEwQjRFNUFBCis6MTA0OUQwMDA3QUQxN0YxMEI0RDA1MjFBMkI1NUI0QTI1MTUwRjE1MTU0Cis6MTA0OUUwMDA5MzgyOTRBOUQ1NzJENzVBN0JFRkNDMzkyNzMzMjFCNDVGCis6MTA0OUYwMDBERUZGRUZGRjVERjg3NEIzQ0ZEOTY3RUZCRDFFN0JBRDZGCis6MTA0QTAwMDBCNUQ3NUE3QjBGNjM2MUM2NzIxOTYzREUxQ0M2QzYzMTA3Cis6MTA0QTEwMDA3NjFFRkY3Q0I5NjdDOTQ0QkIzNjZEQUQ2N0MyNjhBODE2Cis6MTA0QTIwMDA3OUFEQkVBMTFBNjMxQkYxNTU0MUJDNUQ4OUM3NEVFRDNFCis6MTA0QTMwMDAxRUNEMENBNjdCQ0ExOTlCQkVBQUNCRUE4NDc2Q0VFMjE5Cis6MTA0QTQwMDAxQzc3RDBDNTU4OTFGNzkzNzAyNTdDNUYzNDlFMzEwRDRCCis6MTA0QTUwMDBCRjFEOTI0NUUzQjY3OTU3MkE3Njk4NDJEQjA4RTY1MUE2Cis6MTA0QTYwMDAxOEJENUJFMzgxRjYzOTZFQzZEQUExNjRENjA4NjMyMzBDCis6MTA0QTcwMDAxOEJCREYyNUVCMzAxRjI4MDMyNTExRDYwMUNGNTMzNTk2Cis6MTA0QTgwMDBGRURFODI3NTc4QUUzQTU4RDM0RUE4QTc5NTMwN0YwNEUzCis6MTA0QTkwMDBFQTFFMDc5QjEzODBCMkQ4NjM2MTBDRTZFNUYzQTgzNEU1Cis6MTA0QUEwMDA0RjFGOEUwNkY1MENFRjVBQTY0MTdCNjc5NUM1MUY4MUY3Cis6MTA0QUIwMDAzMjAzNEI5NzFFRkVCNUUyM0IyQjk1MTIxRkQ3RTYwNDNGCis6MTA0QUMwMDA0NzIwOUM2RDhDNTVFREM0NzlCMTY4QTAwNEUwNDgxRDY5Cis6MTA0QUQwMDA5RTkzNzUzN0Q0MkE0QkFDMkIxOTBDRjlFODZBMTY5OEJCCis6MTA0QUUwMDA2QjYzQUNDMjEzNDhDM0Y2QUVEMjlDRDRFMDA4QUE4RjY1Cis6MTA0QUYwMDBGMjQwM0ZBRTc1OTYzMDAzQkM1NDMyNzc0NDI5OEVFM0MyCis6MTA0QjAwMDAwNTY2OUUxQTcwMjdBN0M3Q0JBQjgzODE0OUI2RTQ3NEFDCis6MTA0QjEwMDBCQkUxMjYzNUEwODc0Mzk2NTMxMDBGRjBGREM3RDVFRkI0Cis6MTA0QjIwMDA3QzFGQzE1OUVBRUNCMkIzNDE0MENGMjE5QjAzNEM0NUY1Cis6MTA0QjMwMDA3ODM0ODJEM0I5N0I2NkI0MTBERTJGREJCMzlDRTE3QzgyCis6MTA0QjQwMDBEN0E0QTU4RjQ3M0E5QUM3N0RGOUIzMDczRDAxNzg5RjRGCis6MTA0QjUwMDBGMjU3NDc2MDY3ODJGMTk2MDgzQzFGNUQ1RDREREY0MTZCCis6MTA0QjYwMDBGNzlBMzU4RkIxMzkwOENBMjA0NjA0RUQ3MDYyQzk5NEFFCis6MTA0QjcwMDBGMzBFMDJFRkU4MTA3ODdGMEJFM0NDMzAyQjUwM0I4RDI3Cis6MTA0QjgwMDAwMTVFRUJBQTU1QTYxNkUzNzdEREVERDk3OUE4REZEMjUxCis6MTA0QjkwMDA1MTNCOTU4RDg0NEFDODc2MTI5RjNCRTFFRjc5RTgzNzA3Cis6MTA0QkEwMDBDODMyQTc3OEUwNzE2RDk4M0ZBN0Y2RjBERjNDRTY5QjJFCis6MTA0QkIwMDA5MjBCREZENTZGMzAzRDdGRkQ5QUY3NTkzQUJFQjc5RTE1Cis6MTA0QkMwMDBFQzI4ODlGNzdGNjM3NTZENjA5MjY4Nzc4NkZFMUYyMUY4Cis6MTA0QkQwMDA3ODY2NjlDQzhGNzQ5QkU1NEI4Qjg0MDFDNEVCMDMzN0ZCCis6MTA0QkUwMDAwNTI2OTVDNEZCN0JFNTczNzUwRUUyQzU4QzhGRkY0NEVCCis6MTA0QkYwMDA3Q0U0MjIzRTAyODE0OTQzN0JFMkEzMkVBMEQ4M0REQTI5Cis6MTA0QzAwMDA4NUYxRDI1NzNDRDQ1QTRCQTdFNDZBM0RGMTYwODYxRjI4Cis6MTA0QzEwMDAzMDc2MkZFMjc5MUVFMEY5RUVFMkU0Rjg4MDc2NDQ4RkY4Cis6MTA0QzIwMDA1NzZFODI3NjAwQ0ExNDc1QUFDRDAyNzhBODlGQTkzMDYzCis6MTA0QzMwMDA4NzQyRjg0RDY3ODNCMTlEN0ZFQTY0REQ3Q0NENzgzNDhGCis6MTA0QzQwMDBFM0FCRkUxOUU2OEI0MkJGRjUwRkI4N0RDMEUxRUNGNzkwCis6MTA0QzUwMDAxMjNGNTE0MERBMTg5MDI3QkNBOTFFQ0VCNzcxRkUxRTM0Cis6MTA0QzYwMDBGODhCNzA3RUFEQTJGNEY5MUM5ODQ3NzBBREUyNjMxQzFFCis6MTA0QzcwMDBERUI3RjVGMEQ1QjE0MDQ2NTQyMUI4REY0RTQyRjdCNzY0Cis6MTA0QzgwMDBGNTcwOUFFNzY3OUU3RjBBMEEyQjkwN0ZBMUQ3OEJCRkFBCis6MTA0QzkwMDA3MzQwRDc4RTU5QTMyMzAyOTczM0Y2NTM4RjNCRTdERDNBCis6MTA0Q0EwMDBDQkEwM0U5MkY5Q0VDM0JBM0FDQkM2Njc4Q0MyRjc0M0NCCis6MTA0Q0IwMDAxMkNCREI3M0FCQjVFRjFDQjBFOUQ3MzlFN0IzMzlBMTQxCis6MTA0Q0MwMDA5OURERTM2MkZGMEEwQjc2RDczRDgwRTdDMDRERUFCRDcwCis6MTA0Q0QwMDBEN0MzQkY1RjNFOThCRDBFOUZBREYwQUFEQUM5NkNDNEMyCis6MTA0Q0UwMDAxN0MwNEJGNEYyMzMyNkY5OEI2MTE5REVBNzAyRkU2NjdBCis6MTA0Q0YwMDAzMkE3RTY4MjdFQkUwQzQyRUEzQ0MwMzJERDlGQTJCOUZBCis6MTA0RDAwMDA3NDcwOUM2RTU1QUE1MDhFMDJGMTMyNjY1RDFFODdENzc0Cis6MTA0RDEwMDAzQ0VGMTU1RTNCOEQwN0ZDRjg4OTlFMUZDRDc4NzlCOTc1Cis6MTA0RDIwMDA3QTcwMDZDQTkxMTcxMTJGNjk4NDk3OTExNzgzOTdBRkVDCis6MTA0RDMwMDBFMDYyODY3NUUzQzk2NjUxMDVFOERDQTUzODIzREI2MENGCis6MTA0RDQwMDA0RTM1QTEzQjAzOTM0NjIxNUU1OEQ4MEVBMkYzNUQ0RjJBCis6MTA0RDUwMDBCMTkwRDMxQzZFMUI5MzdGOUExOENBRDMxQTNCMEIyMkI3Cis6MTA0RDYwMDA1Q0FGREI1OEY1MkUxNzk2RDEwMTY1M0FCOUY1N0U3NjIyCis6MTA0RDcwMDBFNUJCMjhBNzY1QkQyNkY0NkRFQTFGMTg5MUY4NTBGMjJGCis6MTA0RDgwMDBGMzJENEU1NzU0RTU3Q0Y4NTEzN0RGOTAzQ0FCRjEyMEMyCis6MTA0RDkwMDBERDgxNEVFQzNDQzBBOTY2MkNEMTEwNkUzNTJEN0QyNEYyCis6MTA0REEwMDBDQjYwNkMwMzM2MDEzODlEOTk4MUQzMjhGRkQ1QjQ4MTNGCis6MTA0REIwMDAxMUU0QkZENDlCN0VCNDgxRDNGMUJFQUExQjc0NzQ0Q0EyCis6MTA0REMwMDA5OUY3NTQ5ODNBRDdCMjBDRjg0RjEzRjRBQjE0RjQ0QjRDCis6MTA0REQwMDAyOTcxOUFFOUM3NzA5RDg2NEI1OEU0MzE0NUEwMDBFQUQ1Cis6MTA0REUwMDBBNzg3RjgyM0I4NkU5M0U5MEQ0OUNGOTQxMkVCQTcxRDVFCis6MTA0REYwMDA3QUJFNjZBRDg0NTc0OTQ3NzY2MDc0MTdBRUQ3QTBEN0EwCis6MTA0RTAwMDBDQUVFQTZGNzI1ODQ5RkEwNDdFMkE3Q0I4NkZBNjQ0RTk4Cis6MTA0RTEwMDBDODc2NUFERjRGQjA2MDZFQTQxOUJGREJFOEYwRTFCMzhCCis6MTA0RTIwMDAzQThCOTY4N0VEMDA0RjFFRDRFM0FDQzRFN0MzRjVDM0JECis6MTA0RTMwMDBDMkYwOURFNDI3QzQyQjFBMTNCQUZFM0IwMDg2ODIzMkNGCis6MTA0RTQwMDBFQzBGQTQyNzdFQjc0MTM3Q0VBMDlFRTM3NkFGMkI3MzNECis6MTA0RTUwMDBCRkE2RUY1NDE1RUMwN0IyMjM3QzNFOUY0RTdFMEZDRUNCCis6MTA0RTYwMDBFNEY2QzM2OUVGRTg5RDk2NDFDOUYxNTdFN0NDRjY1QkRDCis6MTA0RTcwMDBCM0UzRjVCNzBCOUNENTkxMDQ3QTQwRjYyN0Y1Nzk5NjA0Cis6MTA0RTgwMDAxQUY0NUExMEI2RjA2MzA3MEZGNDQ3M0RFQ0I5MTQyNDM2Cis6MTA0RTkwMDAxOUJCQzcxNjM5Nzg3MDAwNDMxNjYxQUMxRkZFMkY3MjFDCis6MTA0RUEwMDBEMEVGMjJCQjQzRDQ4MTMxNjFGRTZEQTlERDc1QkZEMzQ0Cis6MTA0RUIwMDAwQkY1NDFEREY1MzBENkI3QzI3MEVDNEFCMDVCMzIyMzVBCis6MTA0RUMwMDAwN0Q3QzI3Q0NFMUQ3NzkwRkUzQTVEOTUxQUMxQzU5Mzc3Cis6MTA0RUQwMDAxRDlBQzg0RUMwQkNBRDYwRTY2NDAwQUI0MTExQzZEMjlECis6MTA0RUUwMDAxOTJBMjQ3ODE0MkI2MDBFRjA5REFERjkxNEM0RjdBQzg4Cis6MTA0RUYwMDA0QzhERTY2RkQ1NThENDBEOTNDQkI2RkExNEM0RDdGN0MyCis6MTA0RjAwMDBFQ0FDNDFDODhERTEzMzc1RjZDQjJDMDFBRjFDQzdFMTg5Cis6MTA0RjEwMDA2NEUxOTRCMjc4QkY2MDYxMzVBMzFFQjE0RTY1QTQ1N0I5Cis6MTA0RjIwMDA2MDlEOTNERDI2RDdCN0VDMjc5OEM5RjU2N0Y3RkFCQ0UzCis6MTA0RjMwMDBGMDdBMEU2NjI2NThDRjg3MkQ0RDZGN0UwQkVERDk1RjI4Cis6MTA0RjQwMDBBQkVDMzEwMEU1NjZFRjFERjRGQzg2NTAzRDk1Mzc4NUVFCis6MTA0RjUwMDAxNjUyQjk0ODhDRjcwRTBCMkVDQTg0QjJCREZBQTU5QjI3Cis6MTA0RjYwMDA2RjA3RkU2RERDRURGMEExNUE1RTdBREJGQkRGMjlENzFGCis6MTA0RjcwMDAxMDRGNDA3N0ZDNkU1RUZEMDNFNUYwREUzRUQ0NDJGNjU2Cis6MTA0RjgwMDBFQzg2MDFBQzFBRjlDOURFQUM5MDdEQjQ1MUIzNTdFRDkzCis6MTA0RjkwMDA4NkYyQTE4Q0NBMkQ5OTNBMzgxRUNBOTg0NDc1NTZBNTM2Cis6MTA0RkEwMDA1OTkwQ0Y1NzM4Mzk5RjlGM0I3RTk3QjcwRUVENEE5NzYwCis6MTA0RkIwMDA4QkQ2OEJCREI5RjhCQjE2QThCMzQzMzA2Rjg2RjI4MzhFCis6MTA0RkMwMDA5MTlEQTEzQTc4Nzk3NzI2Qjc1M0VGMTZGODVFOTNDOTg5Cis6MTA0RkQwMDBFRDNENjcwQzg5Q0NGOUJBMDlDNjc3NUFDMzBDRUQ2QzY0Cis6MTA0RkUwMDA2N0NDNEFDRkVEMEFDQzJGMDE5RkNBRkU5QzMxNThBNDUyCis6MTA0RkYwMDBBMzcwM0NGM0Y3NzY3QThFNzBFMUY3NkEzNjMzRDgzRENBCis6MTA1MDAwMDBGN0UxRjdCOTU4Q0E3OUE0RjE3OTY0OUJGQjQ5RTdDRjc2Cis6MTA1MDEwMDBDNUZBMzNDRkUzNEY5RTg5MEYyMjdFMUVDQUYwNkZDOUI3Cis6MTA1MDIwMDBBNDc1RDM2MTQzNzk3RThCRUJEN0M3OTQ5MTdEOTFDN0VCCis6MTA1MDMwMDAxRDBBQ0FFM0U5OUYyOUQxMjJDMDVGNEFBNTFBNTk1MzI0Cis6MTA1MDQwMDA4QzdBQ0QzMzZEMzRGMDAxQUJCNEY5MTA5RkVENDM3MjFGCis6MTA1MDUwMDBEQzgzNzRFM0ZGNDREMEZGNDVBQkM3OERGMzBDNEMwNkYzCis6MTA1MDYwMDBCQjlBRjg5QkU1Q0VDMjdFMjZENzhGRTFGMjBGMEMyRUJECis6MTA1MDcwMDA5RDlFN0Q1MURCQkU2MTEwQ0FERkIwOERGNjRCNzM5Q0U3Cis6MTA1MDgwMDBFMTA4Q0U0RjY3QjcyOUU3Qjk1Q0Q2QUM2M0UyRjZERjNCCis6MTA1MDkwMDA5QzQ5QUEzRjI1QkRBNzdEMDdEQjkwMDM2NEZGNDk1OUMyCis6MTA1MEEwMDAxRTg2M0E3Q0Y3ODZBOEJFMzlFOUNDRjUwODQ2MDdGMzk4Cis6MTA1MEIwMDBEODA3RTlFRDQxREMyRDhENDFGQjg2RkY5OTEzMzJEQUVCCis6MTA1MEMwMDA3RDY2QkJCMEFFQTJGNDA1MjAwM0UwMjU1MjM1MUFGOTg3Cis6MTA1MEQwMDA2Q0I4ODVGOEFDQUZGNjMyNjM5QjM5OUQyN0I3Nzg3MDEyCis6MTA1MEUwMDA1RkY1MjhDQTA5QTg0RjlGNzQ2MjEyQ0E4RDE5NjA1QUM5Cis6MTA1MEYwMDA2MUJGMzMyNkE5OUUyOEI0REUxNEIyMzAzRjRDRkM4ODMxCis6MTA1MTAwMDA1RjhEMjgwMERCOTE5MjhFNDM1RjQ2QkM1NUQ4MzREMjI4Cis6MTA1MTEwMDA1QjI1RUNERUVCNzJGMEZEMjgwRkUyMzkyMEVDMTA2ODI1Cis6MTA1MTIwMDBDRkY1OUJENzE5MTkwQUNGREFGRDI3NUNGNTNBQkUzQkJDCis6MTA1MTMwMDA1MjcxNjIzOEVFNTc0MEVFMzUyNEUyMjdDNjlBODlBRkE1Cis6MTA1MTQwMDAwRjdDMzM5NUZBNzlGMzdFMjVFMjgwRjk0RjU2M0ZGQkM5Cis6MTA1MTUwMDBFRDU4QjQ2N0JGNjVGMzM5MzQwMkNCODI3NDlERUE2M0JFCis6MTA1MTYwMDA2MkUzRUE3NzRERDZEOTAxMjc1ODYwMENEOTk1QTVDN0Q3Cis6MTA1MTcwMDAyQjFENjhCRkFFNTM2ODlENEFGQ0NGMDkxOUVEQ0Q2MDY5Cis6MTA1MTgwMDAxM0Q4NjU1QTRGRkIxNDNBQjMyMzNGRjdENTNFMzVEQkFFCis6MTA1MTkwMDA1NzlGNjUwQTdCQjM4Qzk1RTlFREFBNjQ3QTRBREE1NTg0Cis6MTA1MUEwMDA1NkU2NTdCM0Y4N0FCMkEyREU5RDBFMEYxMkM5ODE5QTY1Cis6MTA1MUIwMDAwQ0JFMEUyNkFCMUYxMTdENEU1N0E4MUFFMkVCNDhFODM1Cis6MTA1MUMwMDAwMzE3RUVDNzhGN0NBNkYyN0RCMDNGRDc2MEM3MTU2NDhBCis6MTA1MUQwMDA3MUJGQzA1NjNCMTg2NEYwRERENjdFQ0U0ODMzNzRCNTNGCis6MTA1MUUwMDBFRjlCOTdFNjc3MTA3REI0MDdDNzIzMUQ3RjZEMjMzOUFBCis6MTA1MUYwMDA5QzZDQkVFRTkwQ0E4NjAwNjM0RTBCMjk1NDRBRkExNTg5Cis6MTA1MjAwMDA4NTUyOTg1NUE3MUY4QTU4RTJGOTVGOUFDNUY3QTFCOTQ4Cis6MTA1MjEwMDBBQjk4NDU4MzcxMzNDM0NDOUY2ODdGMkNEQkMxQkU3OENDCis6MTA1MjIwMDA4QTk1NTFGQjY4MjZDQzZGRDkxMDBCRjFBN0RDMUZBNzFDCis6MTA1MjMwMDBEOEMyRkU0MjgwREZCNjc3NzkxOEY3Qzk0NTMwM0Y5QzY3Cis6MTA1MjQwMDA4NzA2RjM0MzdENTkxQzRBQTNGQUEwNTAzNjk1ODM0MzQxCis6MTA1MjUwMDA5OTU0MEUwOTE1RDJGQkExQTFDMTU0NUUxMjJBQTZFN0VBCis6MTA1MjYwMDBDMzQyOTc1MUJEMjQzNDhBQ0FFMUExNTIyQTJGMEQ1RDUxCis6MTA1MjcwMDA0NUU1NjVBMDM3QjFERDg4NTAyNTk1OTc4N0FFQTVFNzUwCis6MTA1MjgwMDAyMzQzRDc1MTc5NDU2ODI2OTVCRUQwNkM3QTVGMUFBQTE4Cis6MTA1MjkwMDBBN0IyMkM1NDRCQ0Y0Nzg1MTY1MzdENzRFODU2QUE5Nzc2Cis6MTA1MkEwMDA4Nzk2NTMzOTI2NzQyNzk1NjM0MzJENTQ1Njg0OUFBOUJCCis6MTA1MkIwMDBEREI4RDAzRDU0QkYzMjc0MUY5NTU3ODUzNjUzMzkzRTAzCis6MTA1MkMwMDBGNDMwQkQ5Nzc2NEJBQTU4OEZGNzY4NzMzREU4RUYwMDJFCis6MTA1MkQwMDAwRUQ3OTA4RjkzQURCQjg1NTk1QzBGQkM5OEU5OUY4OTIxCis6MTA1MkUwMDA3QzI3REJEOTJEQTBDNzVEM0REQkNEMTM2NTI2RDIzNUVDCis6MTA1MkYwMDA0MTdGQzEyQ0NFOTcxRkZCREVGRUZFMzAxNkE3REI0NjlBCis6MTA1MzAwMDA2RkVGRkUwQzU2RDIzN0JGNTcyMDhCQ0JBRkFERDY3NkEyCis6MTA1MzEwMDBCRjhBRkNEQkM0N0M2MTc4MzQ2REY0OEIwQUNBOTczNjkzCis6MTA1MzIwMDBDRDVBOTVDOEJFN0IyOENCNDZFMzNFOUExOTZDQ0E4MkZCCis6MTA1MzMwMDBFRkQzOEE0RjFFNDA3OTMyMjNFQ0Y5RUQwNEU0OTcxMTQ0Cis6MTA1MzQwMDAzOUJGOUUwMEZEMTVBREI1RDA3NjVGNjM5RTdERTg1RkU5Cis6MTA1MzUwMDBEMzI2MzE5MjhCRDJBRjA0NzY5RDQxOUY2RUNFOTI3NjRBCis6MTA1MzYwMDBFM0NFODM4MzY4M0QwRDI5RTNGQUE3RTMxQTVDNUZGNjc5Cis6MTA1MzcwMDA2RjBFQTJGREZCNTY3QjU0QjFBMjdEQjM4MjMxQkRGRDAxCis6MTA1MzgwMDBCRjc1N0REREJGRTFGQjc4N0Y3QzdEMTY2RDYwQ0ZBMUIxCis6MTA1MzkwMDA4OTVERENBQTRENDg4MTcyRjAxNkZGNzMyOUYwQzlEMEVGCis6MTA1M0EwMDA0ODcwNDIyQUQ0ODdFRDA4M0Y4N0U1RjA5RDkxMDk2OTRFCis6MTA1M0IwMDA1MDVFQjYyN0ZBMUM2RUUzMkU4Rjc2NEM3MDQxRkQ4QTQ0Cis6MTA1M0MwMDA4MzZDM0YyRUZGRDI3NjZEQTIxQkVBQTM4RUY5RjcwMzAyCis6MTA1M0QwMDAxQkIwRjI4RUUwQzQ3NDBERTcxMzY5NDk4N0Y5NkM3RDQ4Cis6MTA1M0UwMDAwMzBDM0RBODU3N0NENEFBQzI3NjI4NEU3RkIwRTNEMEU4Cis6MTA1M0YwMDA3RTkzNzQ3MThGNkU5Rjk0MERGRkVDQkZEMjUzQUFFMjFGCis6MTA1NDAwMDBGN0Q2OEU5NENDMTEzREU5RDM4NjcwMjM5Q0EwNDcxRTFECis6MTA1NDEwMDAwM0I4RkFGQkEzOEE0N0M3MjdDRjA4RkUwMDNBQjQyMTk2Cis6MTA1NDIwMDAxREE0NUZCMjZENkQxNkY5MjVEQjUyM0Q5NTM4NjRENzJBCis6MTA1NDMwMDA2NEU2RDlBNjIxMUY1QjA5NEZGNjc1ODNDODFGMjdGOUJCCis6MTA1NDQwMDAwRUYwNkJCMDY3MzcwQjM5QjFCNURCREU0RDhDREY2NzIzCis6MTA1NDUwMDAxMEJGRTVGRjNBRjg5RDlBQzVENzQzMzJGQzNBOTE1NzAxCis6MTA1NDYwMDBDNjVENzgxRDFGMTE3QzA4RUJGOEQ3ODhENzY0RURDRTk4Cis6MTA1NDcwMDAwOEZDOUJGMURDNjY2MTA3NDE1N0MxQjhDMEE3N0M1REExCis6MTA1NDgwMDAzMUY0QTM3RDJDRDZGQjg1RjA3QUVBNUYwQ0FGQ0YwQjBECis6MTA1NDkwMDAzOTkxMENBRjRDQ0IyMTM5MDlGQzNBMUNGRDYzQzlFNEFFCis6MTA1NEEwMDA4RDVERUM2N0NDRUYzRjE3RkNBNjkzNzNEQzZGRUIwMUNGCis6MTA1NEIwMDAzOTM3MzhCOTlDM0I3NDIxRjkyNUU0OENEREU0REY0OUE4Cis6MTA1NEMwMDBDREU2RTM1NTc4MDJDRUVDRjIwNDdFNkExMTM3OTA3RTg5Cis6MTA1NEQwMDBFQUE5QUFBNzEyRTUwRDFCQzZDODhFNEUxQjExMDlFMzQ3Cis6MTA1NEUwMDAzRUE1MjhBQzk1QTlEODBDODUzMkUyQjE1RjA5RjkxRjE5Cis6MTA1NEYwMDA4QUMxQ0VCMDAyRkRBMUFCMjg5NjRFQ0Q2M0E5NDNGRjcxCis6MTA1NTAwMDBCQjVDNkY5RTVBQUY3RUJENDk3RDFGNUY4RjkyMkZCMkVECis6MTA1NTEwMDBEQUVFRTY3RTQ5NkQyNkQ4MkZENzY0NzM3RThCRjdDMzBCCis6MTA1NTIwMDBGRDIwRUJFRkU4RDc3NkI3NEUwRUI2NzlCRDU0OTdFRDc4Cis6MTA1NTMwMDA5M0YxRUYwMkYxQkU2REVEMUFDMkE3NzM3QzYyQkI2MUZECis6MTA1NTQwMDA2MkI2MkFFNDQxOTcxRkY5M0NGQzI1RTY0MTdCMjY3M0FECis6MTA1NTUwMDBFRERCMjQ5RjMyNDEzRTI5MjQ5RkY4RjhGRDQzQTlGRjRCCis6MTA1NTYwMDAxNjg2RkE4NEVDM0MyMUNGM0RBOTM3QjhGRkRGRjE3M0YyCis6MTA1NTcwMDAzRURBNTRBODA3QzY3QkY2QTkxOEE3MDEzREE0RTEzQTc0Cis6MTA1NTgwMDAxRDBGNzMxRjhERjhCMjEzREQzNUM2RTlBODhENjcxMUE1Cis6MTA1NTkwMDBCNDdCMDE2RjUxRENCNzg3MkQ2RUYyMzNEOUVEQUQ3RTUwCis6MTA1NUEwMDA1Q0NGQ0M5RTQ5RjA1Nzc4ODIzM0IzN0I5MTM3OUUzNEUxCis6MTA1NUIwMDBBRDE0ODk1QTk3QkRFQjFBMTdGMERGRkE2MjRGMkFENjVECis6MTA1NUMwMDBFNzQwN0Q1MzA1OEM5QkQ1QzE0NDdEQTM2QkRDM0ZFRTRBCis6MTA1NUQwMDBGN0E4QkJFRjY3ODdEMEVGQjEzRkNCMUZDQ0U2N0M1RDcwCis6MTA1NUUwMDA4N0E1N0Y5OEM3NEFGRUVBM0VDNkMxRTRGQThDQUYyNzdBCis6MTA1NUYwMDA0RkE5NUM0RkI1MjM0ODFFMkVDMTdFNjU3RkM5RUM5QjI5Cis6MTA1NjAwMDA0QkIyQjk5Q0ZCNTZCNkM1QzBENzNEQzc2RDM2QUZGQjk0Cis6MTA1NjEwMDBCRUQ5Mzc2MkJFOEJCMzdCNUZGRjJGMUZCQzZGQ0I3NkNCCis6MTA1NjIwMDBBNkYzMzdGNkZCN0VCQjU1NDM3RjA2RjdEMzU4OUNFREI4Cis6MTA1NjMwMDBENDlGNUJGODFCRkRFODZGMDQzRTcwMEVFMTc1RkM5MzkwCis6MTA1NjQwMDBDODVGOUMxQzhGMTE5QUFGRjQzMzRBN0Y2MkJBRTAyQjdCCis6MTA1NjUwMDA2NjU1MjJBOEM3RDMyQjNDRDYzQUVBQUY4MzdEMERGQTE0Cis6MTA1NjYwMDBGQjgxQzA5MzVDRDcyOEI3OUUxQzgxNzIyOUNCOEFGQjMzCis6MTA1NjcwMDA3NUY0MjdCOUIzRTJGRDYzM0RBMzJDMkU5Rjk4RDhDN0RDCis6MTA1NjgwMDBERDJBRTZEQ0JBQzY5NzgxMkVFN0YwMTFFRTQ3NjlGRDA4Cis6MTA1NjkwMDAzNjVGOTdEM0ZBQjNDODFBOTQxMzdFQTY3OUEwN0QwQTExCis6MTA1NkEwMDA5MzdGRkMwNjdGRjJENDRGMTVFNjg3RjkxRkZFNTRBNUMxCis6MTA1NkIwMDA1MjE5QzJBMjZFRDhFRjRERjMyOTUxREMwN0RBMkRDRTc0Cis6MTA1NkMwMDAwOEVBRDJDQTdFNEU4NkYxNEQ3QkJBMjU4MkYxMTFGQkUzCis6MTA1NkQwMDBEQjBBQzE2OTJGNEI4QkEwRjA5QkQ0QUYyMjAzRTM5ODY4Cis6MTA1NkUwMDA2NzBFRUY3NzA1MTNEMEZGQzY2MEFEQzFGRjY1QzY2M0Q3Cis6MTA1NkYwMDA3N0JCOUI5RkY3MjAxRTFGQkU0MDlDRjY1MDc2Nzc5QzgxCis6MTA1NzAwMDA3NjdGMzZEQTQzNzNCQkQ2REFCNTc4OUM1NkM2MUYwQjY0Cis6MTA1NzEwMDBCQ0JCMzc1NkEyQ0E1QUMyRUREMzdFMkNEMkFDQjdBQkIzCis6MTA1NzIwMDA3NDcxRDBERjIyQkYzRjFDOEY4M0I2NUZBMjhGODMzNjk4Cis6MTA1NzMwMDBGNkRCOEJGNkVFNDNERDcxRDA2MDE0QzdGNTY3RUYyQzE2Cis6MTA1NzQwMDA0NUZFN0REOEI3RkJDN0RGNDU3QzNBNDRCQzYyRDQ3MUM3Cis6MTA1NzUwMDA5Nzg2N0VGQUYyRkRCOTA4Q0Y2RjRERjM5N0E1RjRFMzczCis6MTA1NzYwMDA5OUY3QzFDN0IzOERGMTg1MzNCRUVCMzJBMkM0NUJEOUMzCis6MTA1NzcwMDAwOUQ3QjdGNDJGQ0FGRDMwRkEwRjNEMDlEN0ExMTFERkMxCis6MTA1NzgwMDA3MkZDMUE4NUVGNkI5OTRERTFGMjRGRTg1MTkwMkY5RDE1Cis6MTA1NzkwMDAyNDA3MjI4Q0Y0QTZERkExNkM0MzdENzNDNjM3Q0E0NzY5Cis6MTA1N0EwMDA3MUNGMjRGMjQ2Q0UwN0YwMzgzNDUxRkMxN0M2NEIxODlGCis6MTA1N0IwMDA2NzREQzlFMTdBQUFDNkM2RkRBNkNBRjJGMjI2OUM1NzcxCis6MTA1N0MwMDA4RERCQTUzODc0RkVGRUIzNDJBRjlCRTM0MjZBQzY2NzI5Cis6MTA1N0QwMDBFNTQxRTFGNzRFMDRCRjM5QkU3MzU2RTgwQkM0OTdERUNFCis6MTA1N0UwMDA0RjdFMjE3QzFEQjNCNTUyRkNGMEQ4M0M5NTM1NDMzRjJDCis6MTA1N0YwMDA2NzgyNjNGMzU5ODJFRjY1RjkxQUYyQ0Q1MEM2REVDQ0E5Cis6MTA1ODAwMDBFMUUzNzVEMzMzNDlCQ0U4RDhFQTA2OEEzMzlCRTM2OTAwCis6MTA1ODEwMDBEREVGNkI1M0FBNTE3RjU3MjMxRTc1RTM1RTI5RjA3N0E2Cis6MTA1ODIwMDA5RDI4OTkyM0E4NzlFMEJEQkRFRTAxMEZDM0Y4RDdEMDFDCis6MTA1ODMwMDA0RkNBQzM2RUY0OEI3NUZEMUNFMzE3RUM1QjZFRjI1NzE5Cis6MTA1ODQwMDA1NEQ3OUUyRDZGQkU1Qzg3Q0YwQUM2RTNCM0ZCMUZGMjExCis6MTA1ODUwMDA2OEYwQkM3QUU4REFEQ0IwMkIzOTFFRDFCNzg1NzhCQUFCCis6MTA1ODYwMDAwNzFGOEMyMzdGNEM3OUNFNDVGODYzRDgwODFFMTc2MjNBCis6MTA1ODcwMDBGQjUzMjg3RTlBRjIwN0Q1ODc3NjAzOEVDQkY1MDBGNzg3Cis6MTA1ODgwMDAyN0FGMTQ3MTEzNzMxQ0FGM0FCNENDMjA1RkQyNjIwQUY1Cis6MTA1ODkwMDA4QkU4RTIxNzY5RDY5REU0OUY0RDhCNTlFOUI5NzlCRDM0Cis6MTA1OEEwMDBFNUU3NzRDNzM5NjlCRDQ5RkMyN0EzQTdDNEJGRjk3OUU3Cis6MTA1OEIwMDA1OTBFRTdDQjYzQjUwQjM1RjQxQkRBNTMxM0RCQzExQjcxCis6MTA1OEMwMDA0NTNCNTkzN0U3MjMyNDhCQkJDRjE3NzQzRDEzMUM5N0Y3Cis6MTA1OEQwMDA4RkZFQUE2QTdCNzg2ODVGRDZCOUM0Q0Y4NUYyMUNFNkQyCis6MTA1OEUwMDBFNDcwN0RFRUJFRTkyNTExQzc1M0Q3NjI2RjUyQUZBNkIzCis6MTA1OEYwMDA1OTdCOEZDN0ZBNERGMUQ4QjREMTNERTI3OUZGMjNGMTNFCis6MTA1OTAwMDBEODk2OUM3RjJDMUU3QkFERTBEQjBCRTVBMURDNjgzN0Q1Cis6MTA1OTEwMDBEQTNEREQ3ODE1NzQzQzEzNEM2MTYxOTA4RkI3NTZBQTVGCis6MTA1OTIwMDAxNDg3MDJGRTIwRkQ3OEVDMDE4NUVDQ0Q2OEFEODNGNDkwCis6MTA1OTMwMDA3MjdENkQwQUY5NjdFQjRCNTU3QTVGN0ZBRjRBRkEzMzk4Cis6MTA1OTQwMDAwQUYyNjEwOUM4ODdERjBBMzk2MUY2Q0Y1NjMyQzUxMEZECis6MTA1OTUwMDAzRjlGM0UzQUM1NTBCRjY5REU3REJGNUQ4REZFRTUwQUMzCis6MTA1OTYwMDA5Qjg2RTMxREQxQjhCRjM5RUM1N0M5N0U4NTNFN0M1MTdCCis6MTA1OTcwMDBGNDRGREY3RkI1MEZGNTk5RTQ4NzIzN0U5NUQ2NUJGODZBCis6MTA1OTgwMDBBOEVBQzM2MURCODUzRkZBQzg4NkQyMDhFNkE5MzAyNUJDCis6MTA1OTkwMDAxRUE3RDcwNjYzRkZGNTE0MDc3RUQ1QkI4NUUyOUMyOUI5Cis6MTA1OUEwMDA5RjNGMTgwOEQwRkUzMUE4OTU5MkRFRTRGMUQzMTRCMUUwCis6MTA1OUIwMDA0RTI3RjZBQkI4MDFGNUY4OUI5QjZDMENGRDQ2NkZBRTFECis6MTA1OUMwMDAzQTQzRUJCOTYzNzUxM0U1NDU0OEZGQjJGNDBGOUJGRDBECis6MTA1OUQwMDBDQzY2RkY3MjBGQkZCMkM5OUY5QzJDOUZFMTU3NDlGODVDCis6MTA1OUUwMDA0M0NBQUI2NEZDMDE2MkVCNDg0RUVFQzVDQjMxMjkzRkE0Cis6MTA1OUYwMDA1RTEzNzA0RUVDQjdFNURFNjZDMDQzREE1Qzk1RjAyMENFCis6MTA1QTAwMDBGOUYyRDVDRkVFN0EwNEU1NzAwQUYwQzcxQTg2RjhGQ0YxCis6MTA1QTEwMDBGN0U3NzExRkMyMTYyQTA5RkRDODE5NTJBRTYzRkU0NDhBCis6MTA1QTIwMDA0OTlDMkUzNzA1MTc3NkQ3NzFGOUNGNkU1ODZFQzhGQjkzCis6MTA1QTMwMDAzMEVCOTVFNDcyQUQ3N0I5QjUzOTg3REI1RDY2QkQ2MzUwCis6MTA1QTQwMDA1RTBGNUZCNERFQTlBRTdEQTAwNEJGQUZBRTlEMTdDMUVGCis6MTA1QTUwMDA3MjYzM0Y2NzAzQ0E1RkIzN0MzMEVCODk2QTkzOUM4REE2Cis6MTA1QTYwMDBFQjA3OTU0NTQ2RTlFN0FENTFCQkI4OUVCMEQzRkI3MzU0Cis6MTA1QTcwMDAyOTNDREYyMUU0RTRFNUVEQTlFOURCQjAzQzk3QzJGMzgyCis6MTA1QTgwMDAxREMyNjgxNEEyOURGQTQ2NUFBNDg1RjZFNTRENjM5MTlECis6MTA1QTkwMDA0RjQyQ0NENzExNDYzOEJEQTlFNDQ3NjhFRENGREJBOTBBCis6MTA1QUEwMDBEN0E0NzJCQkZDNDAyNUMxQUI0QUMzN0M2RDI1QUQ5QjFFCis6MTA1QUIwMDAxNjAxQ0JENkVDNjA1MTJFQ0NBN0M1NkY0OUMxRjhDMkY4Cis6MTA1QUMwMDA0NEI3RjUxMEJBNUU1QTI3NTg5ODgzQzVGMTE1Q0YwQjI1Cis6MTA1QUQwMDA2MTFFMDVCRUE3NzcwQUVFM0Y0QjlERjZDMTY0QTcwRTc3Cis6MTA1QUUwMDBDQjQ1N0VGOTM2RUMwRjgxRUYwRjFGNTY3N0I3MDFBODMzCis6MTA1QUYwMDA4NzdEQTMzMjEyRDlFOUIyMzRDNzkxOEY3RkUzOTU4MUI0Cis6MTA1QjAwMDBCODZFREY2MUMxQjI1QzhBMUZEN0RGOEJGMUUxQzYzREExCis6MTA1QjEwMDAyQUM1OTc2RUJFRURENTRCQzhFRTM2QzUyOUQ1NzQ2NzNDCis6MTA1QjIwMDAwOUZBNTM1QTk0NTQxRkNBMTM4OUM3N0Q2RTNCQzk5OTA5Cis6MTA1QjMwMDA5NkUzNjlCNDlGNjg3OTRCMTE3NTM3Qzk0Mzg5RjcwM0I4Cis6MTA1QjQwMDBEMEFFNjAzNEU2MkFCOTQ5NkU0QUZDMDM1QzEzNzAxRTdECis6MTA1QjUwMDA5MjBFOTUyQzdBNzg3Q0YxM0YwNUQ3MzRDNDc3NzJCOEQxCis6MTA1QjYwMDBGQTdCNDg3RTIwOUZBOTcxMzg1NEI3OTVFMEVCNjRBOTcxCis6MTA1QjcwMDAzRTlDNUY0OEY4ODdEOEVCNjlCNEZGOTM3NDZFMTRGQ0MxCis6MTA1QjgwMDAyOEU5QkM0Q0QwQjk3M0VGRDlFRjVDMDVFRDVCRkQ1OTRBCis6MTA1QjkwMDAxNDc1NTAwNzMwQzI0M0U3RUI2RUUyMTM4OTA3MDkzN0VCCis6MTA1QkEwMDBGMDQ1MURDRTUzQzJCRDdGRUZBODYzNDFGQzNFM0Q5NTNECis6MTA1QkIwMDBFMkY4RDJFRTk2NzkwNzNERTQ5NEQ4QkYyRkNENTVCQURFCis6MTA1QkMwMDBFRDVFRjQ1RkZDM0U3QkMyRDJEQ0RDMDRFRDg1QkQwQkY4Cis6MTA1QkQwMDBGODZFQzI3MTJCM0RFQzkzMDg4QkVGRjM5MkU1MzdBQzc2Cis6MTA1QkUwMDAxMkZENzdGNzczRTFGQzg2NTVCOTg5RjIxQkZFNzE3QUQ1Cis6MTA1QkYwMDBERTc1MzFGNDZDQjRCQTM2MjgxOTcxN0NDQjdEMzMyRDQ3Cis6MTA1QzAwMDA2OUFERTdGQTM3QUYzRjQ5MEY2NUVGQkVCRjYyMUNERkYyCis6MTA1QzEwMDAyQzE3NkU1NzlCOTgwMkUzQUNCRjlDQUY0QkI2OEE2OUJBCis6MTA1QzIwMDA5NDFGNjQ1QTJGMTc5MjM3NDBGRjZEMDg1NzMyQjlEMzJCCis6MTA1QzMwMDA1N0ZBM0ZEMTkzRkU0RkY0NDZGRkVGNjUwNzdFODZFRjlDCis6MTA1QzQwMDA3MUE4QzIzMkRBMTdFRUMyM0FDQTEzRkIyMDFBOEZGOEQzCis6MTA1QzUwMDBCNjJCOTM1MTNFOUJDQzhGOTFGMzkxNzkzMjUxNEM1QTk0Cis6MTA1QzYwMDBDREQ1RTVFMTk0RjgxNEQ0MTM3REUwOEZBODdFN0U1RjU2Cis6MTA1QzcwMDAwMDdGRkNBNjc3MzkxNkE1NzVCQTU0RDA3RkE5Q0NDQjg2Cis6MTA1QzgwMDBEOEREN0I1RTQ2MUZFOEY3NUEyMkZBRERBRUZBQkE4MjBCCis6MTA1QzkwMDBDNTdEQTdERjNCM0RFOUY3NEVFRkY0MEI5RUMyRjcyRDI0Cis6MTA1Q0EwMDA3NkY2MDlEOUVGMTVCNTVFRTQ5NzBBOEY3RjE2RTZBMTVGCis6MTA1Q0IwMDAzQ0RCMkNFNDRFMzFEMDBGREUzRjlGQTM5MjVDRkIxRUY5Cis6MTA1Q0MwMDBCQjk0RTRGNjk3MkMxNjlBNkYyN0M4RUI2RDRBOUZFMEI5Cis6MTA1Q0QwMDA4Q0U1RDJGRTJGNkNDRDgyN0U2RkJGOEU1MTdDQ0ZBQjE4Cis6MTA1Q0UwMDAzNTJCNThDRkQ3NDA0RjZCN0Q4NzU3Q0RFMzdBNUMwNzc0Cis6MTA1Q0YwMDBBRjlBOTc0MEFGRUJFNDk1M0Q4RkYzRTc0QUU0NEZBN0E3Cis6MTA1RDAwMDBFNkIxRjYyNkFGQjJGMjhDNzY0MjFGRjgzMTJCRUY4QjVDCis6MTA1RDEwMDBFNUM3MDE3OUJEQ0FBQjhCRTZCMzYxMzhCRjY0NzJBMjM3Cis6MTA1RDIwMDBBRjc5QTBCMDRFNTk2MTU2Q0ZGMTE5RjM1MTVDQUQzMjQ1Cis6MTA1RDMwMDBEREM5RjVGNjJFNDVFOEYxRDIyMEQ1REQ0RTEyMTYwNzY1Cis6MTA1RDQwMDA4NDlFM0ZCRDlCQkY1NzI3MjRCNjJCN0Q3OTU5QzRDRjc2Cis6MTA1RDUwMDA0Qjc3MkUwRjU4MERGOTI0NjE3QUZFNURGRjY5Q0YxMDQ1Cis6MTA1RDYwMDAxNUYzQjQ1RDA0NEZGNjM0RUU4Nzk0RjBDQjNDRUQ3NDNDCis6MTA1RDcwMDAwMTRGRjYwMDBFNzdGNjcxOUVENzJFRjE5NTJFRjYxQjg5Cis6MTA1RDgwMDAxOTE1NTZDMzNFNDJFMkVENzYzNUEwQTAxRjNEMzM4NzdDCis6MTA1RDkwMDA2MTlBMDRFQzEzNDYyOEU4RTdDQUY0MUJEQjRCN0NFNzY2Cis6MTA1REEwMDBCMjREN0Y1NjMxRTVBQkNBRjgzRTE3RjczMzIzRjFCRDRDCis6MTA1REIwMDBFRTc5ODJGRDJCRDBBNzA0RjNDNzY2RTcwOUZGODM5RDI4Cis6MTA1REMwMDA3OTUxMUYzMUI1QTY1NzNFRDJFRDRGRUFGMkZBRTA2NzlFCis6MTA1REQwMDA2OUM4QjM4ODdEODM1MUVGRUQ0QzYxMDlGRDBDN0YxMURCCis6MTA1REUwMDBFQjAxRUMxNUYyMzdBQjQyQ0Y0REVBMjhBNjdDOTcxNUI0Cis6MTA1REYwMDA2RThERkMwRkFBRUE3MzRFMkRFRUY5N0RBNjFGOTZCN0E1Cis6MTA1RTAwMDAwRTFGRDk1NUE5NENEM0MxOUQxQkM4MzJENEYzQUJGQjhGCis6MTA1RTEwMDAxOURBMTcwNDA3MTlERTE3MzY1QzZBNzgzRkEwQTlDQzk3Cis6MTA1RTIwMDA1MDJGMEE1RDY5Njg1RjBDODhENUQ3MDc2RkY4QUFBMTYzCis6MTA1RTMwMDBGREQwRDZBRjE5RUFDM0I2N0NEREQwN0U3OEE0Q0VGMDEzCis6MTA1RTQwMDBGRUIyMUQ4QjBDRUYyRkRGQjlDMjUwQkY2MkNGMzcwREYyCis6MTA1RTUwMDBFRDVCODQxRkQ5OEM5N0ZGQ0NFMzcyQkJDNUNBRTU1MEJDCis6MTA1RTYwMDBCM0FCOENGQzlCMkQyRUEzN0ZGMzNFODFGRkNBOENGMTNDCis6MTA1RTcwMDAyNUU4NTc2Rjc5QkJCNDA0RjE3RDIwRkQ0QUYyQjMyN0MyCis6MTA1RTgwMDBFMzBCQjM1QzRCMjY0RkNEQ0Y5RjE0RTM3REZDOUNERDMxCis6MTA1RTkwMDA4MjdDQkQ2QzNGQUNEQjJCQTBFRTdBNkQzREMyQjQ3MTUxCis6MTA1RUEwMDAwNDhGQ0ZEQTE4Q0YxNzkyRjExQUY5N0Q3N0JDQzZFQUMyCis6MTA1RUIwMDBFM0ZFREE3NDE3QkIzQjAxNUZEQzk3QTcyNUY0QTc0QTIyCis6MTA1RUMwMDAzRTRBODYzN0M5OEYxN0MyREJEMzAyQkZGRjJDREU1RTg2Cis6MTA1RUQwMDA1Nzc4QkVBQjVFMUZFQzRBMzBBRjMzNzkxNjExNUYwRUI4Cis6MTA1RUUwMDAxRTE1RkE2Njc0MkE1OUYyMUU1QThGMTdBQjBGRTQzQzNFCis6MTA1RUYwMDA0MDFGQkM5OTk3REIzMzRGRjdFM0VBOTdFNjNGQTg2MTcxCis6MTA1RjAwMDBGQkY5QkNCREM1NTc4Mjc0NDlFNjRGM0YyM0YwQTZGM0E5Cis6MTA1RjEwMDBBNzM3NzA3RjdBQUEwMTZGNkZDOUY1NkVGMkVCQjVBNDRGCis6MTA1RjIwMDA3RjRBRkVGNDE2QkJBRkE0MkZGRUY0QjdGMjE4RTFGRkQwCis6MTA1RjMwMDA2OUE0NzNBRThFQkVDMjFGOUY2QzFGMTU2MkVDMTA5RUNCCis6MTA1RjQwMDA4NzYwMkVBQkE2REYzNzI1REIxRjRCNzkwRUZCRTMxMkY0Cis6MTA1RjUwMDA4Q0QzQjZFMkZFNEI0OUE4MDc1M0YyQ0I2OUZGNENGQTRCCis6MTA1RjYwMDBBMDE1RjRBMDgzRkMwNEVDOTAwNkY1REIyNzVBRDhERERECis6MTA1RjcwMDA1QTFDNkU2OUNGM0I5OENGNjk1Nzg5QUUxOUY4M0RGQjIzCis6MTA1RjgwMDAzNjVCOTlBMjdFMjFGQkNDN0VGOTE3QTFFN0Q5ODVFMzg4Cis6MTA1RjkwMDA3RDY0QTc0RDAzRjhEN0U4RjZENzEyM0ZFNkY4OUVDNDE0Cis6MTA1RkEwMDBDRjM0MUY4RkRGQUQwM0ZEODhGMUJEN0RCOTVDNEZBRkVFCis6MTA1RkIwMDA4M0ZEMzdFMkQxOTMxREYwMEU0NDdCMUU5RTZGNDM3MjJBCis6MTA1RkMwMDBFNDhFQTFGNTIzRjE2QThFRjNGNTU1RUU4Q0NGRUY2MUU3Cis6MTA1RkQwMDBCNzhFQ0ZFRkM1NkU5NUYwQUYxMEZCRTdDOUVBODg5RDhECis6MTA1RkUwMDBFOEM3M0MxREIzMTNERTU0QzZGMzJFMUIwRkRBNTg4NEVBCis6MTA1RkYwMDBFOEM4RjM5NzI1MUQ2REIxRjVFREE4OUY2RENDOUNBRjVBCis6MTA2MDAwMDBBQzY1MjBGQ0I2ODNGQzlDMThDQkUxRUZDM0NDRDk4Q0VCCis6MTA2MDEwMDA3NjRGNDY4NTUxN0Y2NUZBOERGQTJCQkIyQUNCQTRDRkVDCis6MTA2MDIwMDA4Q0ZBMkJCRkRBQThCRjBBODI0NkZENTVEODUwNjZEMjNCCis6MTA2MDMwMDA2NzQ2RkQ1NTE0OUE2MEQyNjc0NkZEMzU3OEMzRDc0QzQ0Cis6MTA2MDQwMDBGQUNDQThCRjg2NkQzMUVBQUZFMTExQTNGRUJBNkNDN0U2Cis6MTA2MDUwMDAwQTkzM0UzM0VBQUYyQkY2QUMzMUJDMkY4RERFNkQ3ODYwCis6MTA2MDYwMDAzRkVBRTBGNzBDRjVGMkY2MUYxOERBMkYzOEY0MTRFNUUyCis6MTA2MDcwMDBGNThDM0RCNkNERDA2RTVDQzc0RjBDRUQwMEUxRUQ5OEQwCis6MTA2MDgwMDBGRjNEOTc0OEMyRDg1NUE3OUUzNEJDOUYyQkVDQjVBQkJCCis6MTA2MDkwMDBCQjlFMzZGNEMzNUE3OTFFNzcxOEZFMjJCRERFNjM0MURCCis6MTA2MEEwMDAzQjFBMjk1NkQ2RjU0MjIxRDA3NTU5NDRGMTQ1QTFEOTVDCis6MTA2MEIwMDBDMjNEQkJDNkUwM0MzRTdDRTM5QTgzRDhDRjgyMkRDNjZFCis6MTA2MEMwMDBGQ0VGODUxMTYzQkQ5MTBEQ0E0MEI5RDAwODdDMTEwMTY4Cis6MTA2MEQwMDAzRTU5OEM3OUUxM0FGOUI2OTgzNTg5NzM4MTdERTNCM0ZECis6MTA2MEUwMDAwNTg3QUU2Mzk0NEYxQUY2Qjc2M0RFQkI4NDUzRjI5QjA5Cis6MTA2MEYwMDA1RkYwOUI5QzlGODQ3NzMxRDg3RjUxMkQwRUE3MUZGRUE4Cis6MTA2MTAwMDBGMkZENjY4NzFERjk3NkZFMUU4NUZENDBFOTA5NEZDMzQ1Cis6MTA2MTEwMDBERUNERUIwQjEzQzA2NTg2QzM2Qzg3RkU0N0JFRDEzRjU3Cis6MTA2MTIwMDAzRTU5NzU1MUJDRTBGNDUxRDVDN0ZEOERDNjc1QjhFMjM2Cis6MTA2MTMwMDAxMDhGMTNBQzc4NDIyMTdGOUQxOTFGRDIzRTREODYxN0Q4Cis6MTA2MTQwMDAzNUNDRjcwRDhEMzkyQzEyRDFBRDNGNERFMEMzRTEzNTgzCis6MTA2MTUwMDBBRUJGRDNGODBGOUNDRjBGRDUwOEU2MUJBNTY4QTk2Njg0Cis6MTA2MTYwMDA3RTFCMTM2NTNERjE5QzU2NjI1Q0E3NjYzQ0JCN0RGREMyCis6MTA2MTcwMDAxMkYyOTUwNjdGNzExRUYzQzVGOTQzMzM1Rjk5RjFCRUE0Cis6MTA2MTgwMDA2Q0NGNjYzQkNBQzM4QkM1RkI2QkY5ODlFMzEyQTBFREVDCis6MTA2MTkwMDA0NkRCMTNFNEQ3NDlCQ0MyQkVCRDAzRjU0OEIyRkRFQ0YzCis6MTA2MUEwMDA0N0Y5MTdCRDlGRkQyOEZGOEJERENGOUVFQjREQ0Y3NUM3Cis6MTA2MUIwMDBBMkJGMERFQzRCQjM5RkNEQUM4Nzk1QkRGQkZGQUFBNDRFCis6MTA2MUMwMDA5MzVGQkJDMzgxRUIyRUU4NzNGMjNDMTg5MzlFMkMyOTlFCis6MTA2MUQwMDAzMUU4QzlFRTdERUZEQjBBRUQ3QjdGOTFFMUI3N0I2MUIyCis6MTA2MUUwMDAzRUJGQzlGMDNCQkMwMEU3MkQxOTdFQTc1NzA3NkYwQkQ4Cis6MTA2MUYwMDBFMDg1Q0VGRDgwOUVEQTk1QzA0RTlDRTQ5NTcxOTcwMEI3Cis6MTA2MjAwMDBGOTRERDY1NUYyRjZFNjc2MjNCQ0ZDOUNEMUJFREMzMUM2Cis6MTA2MjEwMDA1RUIyM0ZERjJBRjU5MkZERTkxRUQzQUJGREY5NUQxMUI5Cis6MTA2MjIwMDAyN0JBMDdFMzkwNDNFM0Y5NDFGNzhBNzgwRDJDM0IzRjA3Cis6MTA2MjMwMDBEMjZEOUQyREUwRDVFNzBGNjc3ODMzNjlCQ0Y0NzE0RkJGCis6MTA2MjQwMDBCNjYzMUU3NThCQzdFMjUxMzQyQzc5M0VGNzVBOTdCNTY5Cis6MTA2MjUwMDA2QUJCRjgyRUM3RjAxRDNGQ0ZBNDIyQkUwMUFGNTY5N0YwCis6MTA2MjYwMDBGNTUzM0RERjRFRjIzMkVBMzcxOTlDOTNCQzdDM0Y2OTBGCis6MTA2MjcwMDA2M0MxN0JEMTFFOTJGMTYxREJEQjk1NEU5NDc3MkRDQzBGCis6MTA2MjgwMDBFRkUxNzJEMkU3RDFFNzdGRDgxODhGMDc0RjEwRjE2MUE1Cis6MTA2MjkwMDBGOTVDRjVGQzYzNzk1OEVEMTlDMTg5REUwNDc5NTg3NzBBCis6MTA2MkEwMDA2NEY4MjdFMUYzOTAzNUVDNDBCQjMzRTQ0Q0JDMkZGRTlGCis6MTA2MkIwMDBBQTk3QUYxMzlCODAxNzBDNTBFMjJCOUE4NzdBRjFGMUMzCis6MTA2MkMwMDAxRkIwMzdBRkM3NzE2RjU3QzM5NDI3RDlFMjFFNTMxMjVGCis6MTA2MkQwMDA3NEY1RERDRjE1RjRGNkIwOEY4MkRFNUVFQzIzQjA0RjlGCis6MTA2MkUwMDA2N0UxNzkzMjdGNDYzRjJCNkQzQkFDQkUxMkM0RjcwNkE3Cis6MTA2MkYwMDBGQ0Y3MzhGMkQzMkVDMEVGN0JFNEJEOEE3M0I4QjA4RkMxCis6MTA2MzAwMDBFQjM1OEY1N0Y2QjMzRkNCQkZDQ0NCRjMwRDlCQjAzRkY0Cis6MTA2MzEwMDBGRjMwQ0Y1QTU1RDc0RkZBMDVGQTkxN0U4RTNFRjhBRDMxCis6MTA2MzIwMDBCRUVENERFQzFGM0Q4NUZBQkRBRjc4RENFOEVERTEyRjA5Cis6MTA2MzMwMDBEQ0U4RURDNTVGNzhFRUY4QjAwQzhDNjc0QjdGOTdCOTYxCis6MTA2MzQwMDA5RDNDMTcyOUVCMUIzMjhERTNBRjJGRTNGNUZCQzVCODVFCis6MTA2MzUwMDBBRjg4N0IzQTc2ODhCQUQzNzQ1RUQ0Mzk5NUQxM0QxRDI3Cis6MTA2MzYwMDBGMjlDQTlFQzY3ODdENzRERUQ5QkIzMjdFQ0MwRjlBRTQzCis6MTA2MzcwMDAyRjU2NjgxRkJBM0U1MzMxRUM0N0VCQkQ5NTNCOTAwRTRDCis6MTA2MzgwMDBEQjQ0RkYzQjkwN0Y3MzI5NkY5NEZDMzlFNjNDQ0MyNUJFCis6MTA2MzkwMDBBMkZEMTJFRjA0MkFGMTVDMkJDQTMxQkJBQTI2QzRFMzhBCis6MTA2M0EwMDAxMzVFM0VGRjU5OTlCQzVGRTk3N0FCN0Y0MDExRkIyNzM1Cis6MTA2M0IwMDBFM0JEMDhCMENFNUY0RTAzRjk3MzYyOTM4RENFQkRDRUMwCis6MTA2M0MwMDA1MzVERUI5MTFGOTNERDczNTAzQjIyNDBGOTRGRkZFQzdGCis6MTA2M0QwMDBGOTMxQzQ2NzVBNTY0RkJERkFCQzM3RjFCRDA1QzlFNDVGCis6MTA2M0UwMDA4OENFOUY3NkQ4N0IxMTc5NEIxREE5OUM0RkJCREMyRUE0Cis6MTA2M0YwMDBGMjlCOUJEQkJEMkJFOEIzNDlGODM1NTBBRUEzN0VDOUI5Cis6MTA2NDAwMDA1MjU5NTMyMjNERjNBRUMwRkIzRjdFQUU5OURGRTc5MTc4Cis6MTA2NDEwMDBFRDcyRDE3N0U2NzNDRDFERjY4RTc1RjkzOERGQUIxNUM5Cis6MTA2NDIwMDAxRjlFNUZDOEFGRjFFQ0NCQ0ZDMTczOEMxQUY5RjhENkMxCis6MTA2NDMwMDAxN0IzRjQwQTdDNUY2QUExRjc5OUIzM0NFQjZEOThGNzQ4Cis6MTA2NDQwMDBBRDMxQ0NEQzY3MzYxOEM3MERFM0E0MTcxNDczQjhDMjlFCis6MTA2NDUwMDBEN0VEQ0I4Nzc2MTk1QTE3MUIzNDgyQ0U3QjRGRjFFMkVBCis6MTA2NDYwMDBCQUFERTZGOUYzM0RGMDJERTQ5QjZCMURFQzJGMTAxRjQ4Cis6MTA2NDcwMDA1QUUyM0NGNEYzNDJCRjgwQkNGOTNCRjI2QkE1QzY3NjBFCis6MTA2NDgwMDBGMzczNTkzQzBGMTZEOTkyRjIxNTdEM0M1RjNCMERGMzI3Cis6MTA2NDkwMDA5RDA2NzM3OTgzRUY5NUVDODlENjgyRENGOEZBNTIwNTc0Cis6MTA2NEEwMDBCRUNERTdCOUQzMEJGODM4N0QzRENGM0RBMzI2RjE3Q0I3Cis6MTA2NEIwMDA4NzE3NzBCODhFNjcwNDcyNzBEQzE5RTM5QkI5M0ZFQ0U0Cis6MTA2NEMwMDBCM0YzRTdENTMxNjgxQ0YzNzUwMkRGMzNGNDU3QTRFNDY2Cis6MTA2NEQwMDA3MDM5OUNBMjY5MjQ5Nzk5NDdBMTNDNTdBN0U2NkJDMEU1Cis6MTA2NEUwMDA3QThBRUI0QThGOEE3NkIyODNDNzI1RDk1QzBCQzNGQkM1Cis6MTA2NEYwMDA1NTI2OEE3RUZDRDU0Qzc5Qjc4NEZCNjVCOTlDQjVCMjJDCis6MTA2NTAwMDA3NzI1RkZBQjAyMzk2MzUwQ0ZGMjNGNjAzRjZENEEwM0ZFCis6MTA2NTEwMDA3ODI2QkEwRTUzN0MzMjY1NDg1MzI1OUU2Qjc4N0UwRUUyCis6MTA2NTIwMDBFRkUzN0I0OUNFMERDOEYzRUVEREU3RkFEOThGMEUxQjAyCis6MTA2NTMwMDBDRUY1QUY3QkU0RjBDMUFCNzVFN0ZBQzM4RjFDRjY4RkU1Cis6MTA2NTQwMDBGOEM3RjNEQkE3M0NGNEM4RTFCNUFFRkZCOTczRkQ1MjYxCis6MTA2NTUwMDA5RTFENTM4M0M3RUUwNEZDNUYwRjRDMTUyQUMzRDJDQTlECis6MTA2NTYwMDA2QTg4REU1RUMyREIyQzgxRTdGMEE3ODA2NzY3MUNDRkZDCis6MTA2NTcwMDBEN0VGM0Q0NEY4M0I2NjgzNzlDM0Y4QjYwOTFDRDVCNjFFCis6MTA2NTgwMDA2RjY2NDQ1QTQ4MkU0NjY4REMxQjlDQUQ5MzcxREZEOTc4Cis6MTA2NTkwMDA2OUVGMUE4OUUzNzYzRUYzQ0E4MDMwQzg5M0UzREYzQUE1Cis6MTA2NUEwMDBFMzY2QzA3RjZGNUFCQkRDRjhGQ0Q0QUE5N0RDNzgwRjk3Cis6MTA2NUIwMDBDMkYxNTUyQUQ5NkI3NDJFNUE5NzhGRDQyMEY4RUE1NzE2Cis6MTA2NUMwMDAwNTgxMzlDODU3NzM1NjdGM0U0NjZGOEZCMzUwMkVFOTA5Cis6MTA2NUQwMDBERjg1MTE5NTUyQUZBNEZDNUJCQzIzNEQzMDFEQUYyRjVFCis6MTA2NUUwMDBERDk5NkRBODRCQkRCQ0Q0OTFGODlDRkFBMzA1OUNFRTM3Cis6MTA2NUYwMDAwQjFGNkZCMzE3NkEzODdFNzAzOThFN0Y0QUU0Mzc5QzYxCis6MTA2NjAwMDBEQUVEQTY3RDk4OUM0RkRERTNBNTc2REM3N0JFQjlEN0ExCis6MTA2NjEwMDBDMUEyRTQwNzZFQjczMUYyNjdGOUE3MkE3OTc4OEYxMTIyCis6MTA2NjIwMDBGRjYzOUVFNzBCQ0ZBNjUxN0ZGMzFFNTBDOUVGNTQwQkJCCis6MTA2NjMwMDA2Mzg1MDBBRkMxQkQwQkY5M0VEODA0QzdCQ0UzREExNEQzCis6MTA2NjQwMDA5NDU3RjMzNjJBMkNBQ0YxRjZBQkYwRkU4Q0QwNUQxNEU3Cis6MTA2NjUwMDA4NzMxQzM2OUQ2MkYwQjkyREM5RkIzNjBFRjNERjRGRDA5Cis6MTA2NjYwMDA1Q0U2QkYwN0VERDk3OUFERTZGN0Q3QkM4NzRDQkVFMDU1Cis6MTA2NjcwMDAwMkYxOUNGQjBCODRERTE5QzNDNjlFMUY0Q0YxQTM4QzU4Cis6MTA2NjgwMDBDQkI1MEJFQjlENTNBQkY5MjJGRDYwQjU5M0NBOEY1NjhBCis6MTA2NjkwMDA3QkE4OUM1M0MwRjk3OEYxOUU3RDJGMTREMjMyNkYxRkQ2Cis6MTA2NkEwMDA4MzdBRTlFNTgzRjU2OTVGRDdFMjc2Rjc5OEI2NUJGNzE5Cis6MTA2NkIwMDAzRjRDNEQ4REY5OTkzNTAyRUY2MzQ1NUVFNjAyNzFFRTcwCis6MTA2NkMwMDBBMUZDNThFRjc5OTkzNTg4OEY5MTNERTcyQkVERUMxQUI1Cis6MTA2NkQwMDA5M0RGNTdEQURENjY3QzlDM0UzODMxMERGOUUzOTcwNTkwCis6MTA2NkUwMDA2MjlGM0IxNkYwQTJGRUYzNzg0OUY2REQ1Mjk1REY5QkUwCis6MTA2NkYwMDA2NjdFMkVEN0QxMUNDMUQ3NzNCN0NGNUNERjBGQzY2RkI0Cis6MTA2NzAwMDA3OUU2QkQ4MTFEQzRBN0RDN0Y1MTJFRjA1NUVFNUFERjFFCis6MTA2NzEwMDA4RUYwOTczMzkzREYzMENDOEUzMjFEM0YwMzNGQTlBODE0Cis6MTA2NzIwMDA3N0NDN0MyQkY5ODkxREU1REYzQjg1NUZBMzlCNUZGNzY5Cis6MTA2NzMwMDBERTRCRjg5NTdDODUyNzFEMkM2OEMzQjFBOEQ3NTI3MTE0Cis6MTA2NzQwMDBFMTdCQUVFNkI1MUFFQjFGREIzQTA2QTIzQzU5NjBGMkRDCis6MTA2NzUwMDAzNzdDQUMyNERFQkYxRDJBMTg0NEY4OThBQkY5QTc2MDNCCis6MTA2NzYwMDBGRUM1M0MxNjU4Q0ZGREYzRkM3RTlDNTNENkQ2MTdFRUUzCis6MTA2NzcwMDBDNDc1QkU5REFGQjNBNUJGN0NFMjE3MjhCRjE2RkRFQzY0Cis6MTA2NzgwMDA4MTc0OTQ1RkVGNUI1QkYzNzBCQzI1OEZBRDRCNDc3OUYxCis6MTA2NzkwMDA3RkNBMUE0RUM3RUZERjhGQTgwOUNGMTE1RkQyNEZFRTI1Cis6MTA2N0EwMDA5RkZEMkVDQzUzNUI0NkFDMDZGRkNEMEQ0RjQ3RjlGOTRDCis6MTA2N0IwMDA5N0M3NkMxRUY0QzMzNkVFNzA0NDFEODA4RjY1QkIzOURECis6MTA2N0MwMDAxRUExRkUxNkFGREY0NUY4NkFEQzYzNUM5NzhCRkVGRDA5Cis6MTA2N0QwMDA4MTNDOERGQzAxRTE0MjgxQkY0MjE0RTFDQkI2REIyODU0Cis6MTA2N0UwMDBBRjc1RDk1MUQ1ODdDMzM0QjIyRTgyQ0ZGQzNEQ0UyM0FECis6MTA2N0YwMDAwNjc0NkJEQ0E5RDZEQTMzN0FCRTA3NEJDODhFRUJBREQ0Cis6MTA2ODAwMDA3MTM3QTc2N0UzNkU0RUFGNDY5MzFEREEyMEU0QjY5OTYxCis6MTA2ODEwMDBGRkYzRkEwOTc5MjBGODFFRjA0MzdFMzU5OTZGQ0IyMkY5Cis6MTA2ODIwMDA1QzdFQjdGQ0Y4QzE5MTZGQzFGQzNFREFGRTlCNzQ2NURCCis6MTA2ODMwMDA0NDlDRkYxOTY2ODUwMjNENEVFRkFDOUY2M0VGRTVCRUI5Cis6MTA2ODQwMDA5RThGQzUzQUU5RDYwQjQyMEY2OTdCNjA2MkY5NTBERDM1Cis6MTA2ODUwMDBDQkNCMjVCNjY4RkE1NTgwOTcyNTZEMzY1RjE4MUUyRjZECis6MTA2ODYwMDA3OTQyRjVCQkQwOEU3QUQ1NDFGNzRGMkM3RUUyRjk5NzZECis6MTA2ODcwMDBBRjg0RjkyRERFNjVDQjk5Q0FDMTcwQTFGQzk2RjQ2QThDCis6MTA2ODgwMDA0NDNFMkY4QkQzNjdEMTUzQ0ZEQjMxNEYxMzlGQUZDQTE5Cis6MTA2ODkwMDA4QUQzNjlGMUFFN0Q3NkNDRkIzNEUzNzNFMkNFN0Q3NkFDCis6MTA2OEEwMDBCRURFNENGNERBRjlENjE0RDREQjJEM0YzRTY3NDc3RUNBCis6MTA2OEIwMDA3OEZGNTk4NUU1MTdGN0ZDQkVBMUVERjk3NDk0MzM4ODhDCis6MTA2OEMwMDAyN0Q0MkY5MjZFREQ3NEVDNDFCRkU4RjRBNzQ3NTMzQjA5Cis6MTA2OEQwMDAwRkM2NzkyRTQ0QzdCRkUwMTk4NDVDRTJGNzlGM0UwREQ2Cis6MTA2OEUwMDBGMzY4NzhDREUxNDMzQzM0RkNGNEQ2NzQ4NEU3M0Q2QjI3Cis6MTA2OEYwMDAxM0U3RkI0N0Q2RTVBMURFNkVCMDg1RjMzQzU0RjJFNzIzCis6MTA2OTAwMDAwRDVCQkY0MUZDQjhFMEM1NkZGMEZCOUM5OEJGMDBEN0EyCis6MTA2OTEwMDAzM0MwNUI4MDcwQ0VGQkUxRjUwNEU3N0MxNjI0N0U2QzBGCis6MTA2OTIwMDA3ODg0REY2Rjc4RDZDQUFBMTJFRDA3REFDNEJBNzk2RjE1Cis6MTA2OTMwMDA5QjgzMzYwRkVGRDkxOUJGMkZFNEY3QUFCODBGNkIzOTM1Cis6MTA2OTQwMDBEOTJCREYxMDMwODM4NEE2RkE1OTI3QTdEN0NBN0VGMjQ1Cis6MTA2OTUwMDA5QzNEOTc2RjhEQTI1NUUzRjZCQjQ4QkU3RDMwQzA5RjJFCis6MTA2OTYwMDA4RkVCMUZGMDYwRjRDRkJFMzgzOTVGQzg0NUJBRDc4NUNBCis6MTA2OTcwMDBCRTAzRkU5Qjg4Q0ZCMTdEQkJDRDlGMzJEMkYwOURDOEI4Cis6MTA2OTgwMDBCRkU1RTNBRjE0RTNDM0JDNTNEMUNGRjc1RTlFNzE5RjY1Cis6MTA2OTkwMDAyQkNCRjY2RUI5QzBEQTk5OUVDRjkyQzk4MUVEMUI4OUQ3Cis6MTA2OUEwMDBCRjNFMzlDQUU1Q0NCMkM4Q0MyQTdBREY2RThCRTZFM0FCCis6MTA2OUIwMDBGQkM4QkU1OTBBQzkwOUIwNDMxMkFERjNFRDM2QjFDRURBCis6MTA2OUMwMDA4REVGNjE5RTU2NDU4RkRGNjdGOUY5M0RDOTJGRjNFRkQzCis6MTA2OUQwMDA4N0Y2QkE3NTFERTcxRjdCRkM3OTcxN0NCRENBRkM4REZCCis6MTA2OUUwMDAwNTI2N0I0RTk2NjYzOUYxQjA0OTRFQzhFRkQ5MEY3MzM0Cis6MTA2OUYwMDAxMzlFOEY4OENCODczMEUxNkY4OTJERjI2RjNGQzA3NTcyCis6MTA2QTAwMDBGREFBODNDRTQ1MkU3OUMyNDZGN0ZCN0NGOEY4RkU5N0E3Cis6MTA2QTEwMDBCRjBFRkNGRkUxNEVCOTlFOERGMkQ3QkM5RTFCOUVCQzAzCis6MTA2QTIwMDA5RTI1NUFDRjFGRTYwNDU4QzJGNTBDQ0YxM0FFRTcxQ0MzCis6MTA2QTMwMDA3RURFRTBGRjk2RkM1RDkwNDRGRUJFRDBBRkE3REQ3MTI4Cis6MTA2QTQwMDAxNTU0M0ZGOEM5RTIyMkRBOUY5OUYwMkJGMTZBOTZBNzE0Cis6MTA2QTUwMDAzN0EzQjE5MERCNTM5RUMyOUZBMzRDODc0Rjg5NDdDOTkwCis6MTA2QTYwMDBBNzhCRkU2MzI5OEREM0NEQ0Y5MjVGMjUzRjc3RjNBQjA0Cis6MTA2QTcwMDAxOTZFMjMzRUNERUYzN0UyREVBOTNDNEU3RkRCMUFEOEZDCis6MTA2QTgwMDA5NzYzQkNGNjE5OTVGMkYzM0FCNUFFRjQyQzE4Nzc5RERFCis6MTA2QTkwMDBDOEVGRTlGNDg4N0EyNkFGNzdFNURBRDdBMzNDOTFDRjNGCis6MTA2QUEwMDBCQjUyNzhCRTQzNjdBMDJCM0Q1M0I3MUY3ODZCQUY5QTlDCis6MTA2QUIwMDA4RUU3MDEzQTIyODlGMzMyMjg2MzAzRkQyMDQ5RjIzNjNBCis6MTA2QUMwMDBFNEI5REZDRTU0RUVFRkVCNENFNTdFQkVDOUFBNkI2MEI1Cis6MTA2QUQwMDAwOEY3NzdBRDNDQkUzNEI3RjlDNjc0RENERjc3RUUxRDNFCis6MTA2QUUwMDAzQ0EzMUFGNzAzODc1NDlFNzMxNEY2NUIwQjAwQkZGNUEzCis6MTA2QUYwMDAxQzc0NzY4QTg1QkYzRjFFRURGN0JEOEJBNzYyM0Y3MzdFCis6MTA2QjAwMDAzNzE5RjEzMkRGQjVERDhFRkQ5QzY1QUJBODlDN0ZCRkU4Cis6MTA2QjEwMDAyRENFMjdGMERGMjJDQ0Q3NDIzRUZGQTFFOUY5REU2Qjc0Cis6MTA2QjIwMDA4OUFGMTY5OUY4MkE4ODdDOTVFMDNDNDk2NkExNThBRjUwCis6MTA2QjMwMDBBNUFDOTRFRkI3NDU3QzRDQzhCREM5RUE4ODE5RDU5ODc3Cis6MTA2QjQwMDA0Rjc5OTA5RkY3MzhCRDU3NjVFQjExREVDNzQ1QkMyQ0Q4Cis6MTA2QjUwMDA5QzRCRkNCQTBDRjg1QkVGMzdGRDA4Rjk2RTU4NzIzREEwCis6MTA2QjYwMDBGRkQxQ0Y4RjhGQjkxMzlBMkNGOUM1MUY0NzNFMENFNTgzCis6MTA2QjcwMDA0N0JGNzhGNTkyRkZDMkZBMkY1RjE5Rjg0N0Q2QjNGREU5Cis6MTA2QjgwMDBDNDY3RkY3QTBCRTU3NTNFRUJBMDdCNEQzQjlGRkRENUJGCis6MTA2QjkwMDBDMDNCQjFGRUI0ODNFRTE3RUQ1Q0MzRjdEOUUxNjdERDBFCis6MTA2QkEwMDBBNEZGM0IwNzcwN0JCMUU1OTk3MzIzM0I0ODdGRjE3QkUyCis6MTA2QkIwMDA4M0M3MTdGMjdCMkE0RUVGRkREQjFCMEFFNkYzRUQwNUQ4Cis6MTA2QkMwMDBBODUwM0U4QUZENUJFM0QzMjlCNDRGRUY3Q0U2OUM2MTdECis6MTA2QkQwMDA3RkZBQ0ZDMkIzNEM5Q0JCRUE3NEIzNkEzQzI3REQ5OTAxCis6MTA2QkUwMDBDOUNGQTkzNkZFRDdCODFGRTFCOUNCQTVCQkY3RDlFQjAyCis6MTA2QkYwMDBFMUZEQzRGRkYzRjk0ODk0NDM5RDRGNzJCQjAzRUNFMTAwCis6MTA2QzAwMDBBRENDQzdEODU3MEEzN0RGNkIwM0ZBN0Q4QzM2MjJBQzgwCis6MTA2QzEwMDA5OThFQzIxN0E3RTE3OTkyOUU3OEUxNzhFODA0M0MyMDJBCis6MTA2QzIwMDA1QzgwOTcwNjk0OUZDOUYwNzE0QjIxM0YwN0YzQUY4N0IzCis6MTA2QzMwMDA4RjNGREY4MkUzMkZEOTNCOTZFRTE5OEVFMzQ1RjFGM0M4Cis6MTA2QzQwMDBFNzZFQ0FGNzAwRjhGOUYzNjdDRjhENDQzQkVBNDJGMEVDCis6MTA2QzUwMDBBRUZBNUYwNkVGMEZGRUM1Rjk3RDUwMjFENzQ3NjZCRTNECis6MTA2QzYwMDBFRkM5RDdCRkJDOERFQTNGNzVGQjY4QkU3RDVDRUY0RkI3Cis6MTA2QzcwMDBGRjJGQTNGN0IxRkY2RkU5N0Q0OEQwREJFREMxQjg0QzIyCis6MTA2QzgwMDBFNzMzOUYwRjY0MTcwMUY3Qjk3RjU5M0FGNzBFNzdCN0NCCis6MTA2QzkwMDBERDYzRjEzOTQ3QzNGQzVFNjM5MUVCMkI5NUU0RjlBMzA3Cis6MTA2Q0EwMDA0M0ZBMkI3MjFGNDRGQjBDNzkwRkY3RjQ5Q0Y5NjQ0N0VECis6MTA2Q0IwMDA0Q0Y3NzM3RjRDMEIyQjNCODhFN0VDQzI3RTk1RTIxN0I5Cis6MTA2Q0MwMDA5NEJDMDM3ODY4OUY1NTFBQTEzQzMxNkI3OEU4RjczMTgyCis6MTA2Q0QwMDA2RkVDODZBNTNFN0U1Rjk5NzFGRjM1M0RBRkFBMEFFRDQ4Cis6MTA2Q0UwMDBCOTIzQ0QzMDJGNjg3N0M0NkRGMUI0MDAwODMzRkMyQTg2Cis6MTA2Q0YwMDBEOTdGNTA5MkRERjc4NzA5RDc1MjFFQ0E4QzBBRTMzRTJFCis6MTA2RDAwMDBFNEVCQTZGREM0OERENUM2RjczN0IwNkRCOTk4RUY3NzIzCis6MTA2RDEwMDA0MzgzOERGMjkzQUUzN0I1QjdGNEY3MTA1RTZFNjQ0REQyCis6MTA2RDIwMDBFQkI4M0ZFN0UyRjAzNEFCM0ZERjhGRjVDNDQzRUY3OEQ5Cis6MTA2RDMwMDBFQjgxMjdCMURGQTREQzIxQUQyN0RFMUM0MUJFRkY3NDRGCis6MTA2RDQwMDBDMDBCNjE2Rjg5QkNCQzE1N0RDMjI3MTNGQjUyODcxODJECis6MTA2RDUwMDA1QUUyRDdFMUU3Rjc4RUVBRkEyNUJDNDhCQzVGMkNCRUMxCis6MTA2RDYwMDAyNTlEQ0M3ODk3Rjg5NTc4MzNEMzYxMTg5RUY3Q0M4RDE0Cis6MTA2RDcwMDBFMzNGNUUxQUVGRDU2NkMyNkU5Q0RFNkQzN0JBMDg4RkIwCis6MTA2RDgwMDBCRkRCQ0VDRjRCRkNBRUEyN0U1MzI5RDYxRkU3RjdDMUE3Cis6MTA2RDkwMDA5RjFEM0Y4QTM5MDFERTIzMzZCNjg3RTI0MjdFQkZFNjc5Cis6MTA2REEwMDAxOTEzQ0Y5RjUxMkE3RTQ1RjEwOUNDNUZENEVGNTczMTlCCis6MTA2REIwMDA3RjUxMEYxN0U2MkZFQUVCOThCRkE4NkY4RkY5OEJGQTc4Cis6MTA2REMwMDBGNzk4QkZBODdGOEZGOThCRkEzQUU2MkZFQURCNjNGRUNDCis6MTA2REQwMDBBMkJFOEVGOThCRkFGNjk4QkZBOEFGNjNGRUEyQkUzREE1Cis6MTA2REUwMDBFNjJGRUFERjYzRkVBMkZFM0RFNjJGRUFFQjk4QkZBODlFCis6MTA2REYwMDA2RjhGRjk4QkZBRjc5OEJGQTg3RjhGRjk4QkZBM0FFNjc1Cis6MTA2RTAwMDAyRkVBREI2M0RFQTJGRTNERTYyREVBREY2MzlFQTJCRTMzCis6MTA2RTEwMDA4RUY5ODlGQUY2NUY4RTNENjdBODU3QjJERjE4REE0RjEwCis6MTA2RTIwMDA3NEJFNjRBODRGRjZGQ0QxRDBGRTJCREUxMzg2RjdEN0Q0Cis6MTA2RTMwMDA2ODFGMUFERTRCRkE1RjVCNzJDNkYwMUM2MzFGRTEzMUZDCis6MTA2RTQwMDBCODhGRTE3RkE2RjlGRTY2RThDN0NBMDIxNDI3QjVCMzdBCis6MTA2RTUwMDAyNjJBOURFOEVGODUzMjk1RURBNEQyMDVDQjFDQ0JGNzExCis6MTA2RTYwMDA4NzA1N0ZEQTFGRjk3NTZCNzgzRDMyRDc5MTcxRTcwNjk4Cis6MTA2RTcwMDBBMkZDRkZEREY4RUJCODVGNDJDNDE3NjZFMDNGMzU2MDY3Cis6MTA2RTgwMDBFMkI0Q0ZGQUUzM0U1N0M2NEZEMzYzMkE4QjhFMDIzRTVECis6MTA2RTkwMDA4QzI5NTQ3QTYyNjkyQzlBMEQ3QzE4NEJBMTMyMkI5NjVFCis6MTA2RUEwMDA0RENGQjM2Mzk5NTRFNkM0MEFFOTc5NkVBQzgwQ0FCQzhECis6MTA2RUIwMDBEODYwMkFGMzYzQzU1NDdBNjM5NzUxNTkxMDFCNEU2NTA1Cis6MTA2RUMwMDBCRkQ4MjhGQUFFMzA1NjRBNjVGRkQ4NTVGNDdDNDA2Q0RFCis6MTA2RUQwMDAxQzk1MDM2MzEzRTk3OTUxQUM5MjRBMkQ3NjJEOTVDNTIzCis6MTA2RUUwMDBCMTZCQTgxQzE0QkI4RURBMEQ4RUNEQTQ3MjQ4NkMzNjIzCis6MTA2RUYwMDAzRDFGMUFCQjg5Q0E0QjYyRjU1NDBFOEJENTUyNTkxMkVECis6MTA2RjAwMDA1QjRDRTVGMEQ4NDIyQTJGOERERDRBREY1RDE2NUI0RUUzCis6MTA2RjEwMDBFNTg4RDg5REY0RkNGMkQ4MUQ1NDhFOENCNTUwNzk0NTg3Cis6MTA2RjIwMDBBQzk5NEE1RkVDMUU2QTU3MUFEQjQ4NjU1OUVDM0U3QTA5Cis6MTA2RjMwMDAzRTJBQjY5OUNBRDFCMTg3RTk3OTc5RUMyMTJBQzdDNDJBCis6MTA2RjQwMDA3RTQ0RTVEODU4MUI5NTE1QjFGRkEwNzI1Q0VDQzc1NDgwCis6MTA2RjUwMDA1RTE5N0I4QUJFQkIyQUI2OEJDQUYxQjFGRkEyRTc1Nzg2Cis6MTA2RjYwMDBDN0ZFOTNDQTJGQzVGNkQzRjMyRkM3RjY1MUU5OEZGRDlECis6MTA2RjcwMDA4NjlFNTdDNjBFNTEzOTIxRjYxMjNEOUYxODdCOTFDQTQ1Cis6MTA2RjgwMDA0OUIxM0ZEMkYzQzlCMTU3QTk5QzEyM0I0MUU1NTc2MkMxCis6MTA2RjkwMDA2RjUxNTkxNUZCOTBDQTZCNjJFRjUzRjlENUQ4MTlGQUE2Cis6MTA2RkEwMDBFRURBRDg5RkE5OUMxQUZCMUIzRDlGMTZGQjJCOTVEREEzCis6MTA2RkIwMDBGQkZGRjE0OTdGNTdDMDcyMUVGN0NGQUVBQzNFREQ1N0U1Cis6MTA2RkMwMDBCNjM5MkQ5REU0RTJGNDU1NUMyRTNFOThGNkYxMDE5MjFGCis6MTA2RkQwMDA5M0UzMUM5QTgzODRERjE2NDNCQzhCN0U0NDAyRjY3REM4Cis6MTA2RkUwMDBGQkM2QkRENzFGRUQ5REY1OTUyNzVFQkYxNUY1RDk3MjgwCis6MTA2RkYwMDAwNzEzRkFDQzI0NzczRjczMDk3RjI3QzM3Q0M0OUIwNTEyCis6MTA3MDAwMDA1RkZGQUU2MjdGMkVEQTUxRUJDQjNBOTZBMERGRTRERTczCis6MTA3MDEwMDBFMjhFMUEyQzBCMDc3MDNEOTkyNUNBODIwMUMyQ0Y1QTA1Cis6MTA3MDIwMDBDMkY1NkZDREYyQTFGQ0Y3MDU3MkZBMDY1RkI1RDBEQkIxCis6MTA3MDMwMDBCMkJENTIyNEVBQUVBRTgxNzQ1RUFGOEZGREY0QjVERDExCis6MTA3MDQwMDA4NUYyQjAzRUVGMUZCQzYyNDA2RTZGRTcwN0ZCREM0RjdFCis6MTA3MDUwMDBDNTE3RDQ0RkU1ODAwNDc5NjFFNjdFREUxNDc0NkYxQjlBCis6MTA3MDYwMDAxMDk4OENFRDk5RDUzRjEyREY0RjU4NTNBMEUyRUZBQTRDCis6MTA3MDcwMDBENDZFNTIzQ0M4MkZGNTZCNEJBNzIwNURDQjk4OUZGQzdDCis6MTA3MDgwMDA5MjM3MjdDOTI3NUIyQ0U4NUFENzY0NjNFODlGQUNEM0IzCis6MTA3MDkwMDAxOEY5ODdFQjc2RjMzQzY0RjRBNzRFMDM3RTY5MTBGQzg1Cis6MTA3MEEwMDBCMjc0RTM5RkM5RUZENEQwQjQ4MEU3M0Q0NUI4N0Y0QUJFCis6MTA3MEIwMDBGRThFQ0RFMkQ2QjYxN0QwQUQ3Nzk2MURBNkZDRjhDNUVDCis6MTA3MEMwMDAzQjhDRkVBQjQ2RTE5RjVBQkFEM0Y0QkNFOTJCMDlGREQ5Cis6MTA3MEQwMDA5RTY2QkZENERDMDFDMkRGRTlFMzc5NEY0Q0VENEY3MDBGCis6MTA3MEUwMDA5RjA1QjgzMTlGMjQ3ODlCREI4OTdBMDNGMDQxNzExOEEyCis6MTA3MEYwMDA4OTA3RTlGNzk0Rjg2MDNEQ0Y1RDUwRkVFQUU5ODM0M0U0Cis6MTA3MTAwMDAyOTRGRUVCNEE2RTU2M0JCNjAzQUZGM0QyQkM1MUExQ0MwCis6MTA3MTEwMDA4QkNGMDE4Rjk0Q0ZEMkQ1OUM0NkY5NTA2RjgxMUVEMDcyCis6MTA3MTIwMDAzMEYxQ0ExMzFDOEJGN0M3NzVCQzM2ODA4OUZCMkI4REQ5Cis6MTA3MTMwMDBGMTA4RTcyNkNBMTNBRjg1Mzk2MDVFNEFFRDYzRDk3NDVBCis6MTA3MTQwMDA2RTEzRkExQkI5MDdGRDlBOEZEOTI4MUYyOUNDNTY3OEUwCis6MTA3MTUwMDA1OTQ1Q0Y3ODQ1NjA5RDhERjhBMjZFNEYyNkNGNEYwQkQ1Cis6MTA3MTYwMDBGQjhGRTJCOTAyNDk5N0I3RDYwRTlFODI3OTRENzUxQjA3Cis6MTA3MTcwMDA4QTRCQzk1REI3Qzc0NkY2QTE4Q0NCNEE3QUY1Q0NERkZFCis6MTA3MTgwMDBFNkY5MDI4RDJDQjIxRTUzOTc4MDVFMjcxM0QyQUI3NUExCis6MTA3MTkwMDAxRkQxMTVFODc2MzIwOURENEVGNjQ2Qjc4NzRENzQ0M0E4Cis6MTA3MUEwMDAzRkY1OERGODcyNTUzNkFERTc5QTM1RDFBMTREM0FGRUNGCis6MTA3MUIwMDAzNEZCRkZEOURDMkJFOURFMTM5OUZGNUNENTRGRkVDRTAzCis6MTA3MUMwMDA5ODJGMEZFOTdCNjY1MzM5RDFDRDRDQUZBQUJGRDcxM0E3Cis6MTA3MUQwMDA1REQ4NkI2RUJBNzdGOEU2QzE2Q0NFRDdFMEY5MUNFMUVBCis6MTA3MUUwMDBGN0JDQjlFNTFBQjJCRjc3MEIzOUY3QkJENTk4RkJDOTI1Cis6MTA3MUYwMDBEODhCQUI5RENDMEZDNkY3NEJBQjNENTRGRkMzNkEyRjZBCis6MTA3MjAwMDBENTVGNTlBRDUxRjlFQUVBMTIyQTRGREE3OTVFOTE1Q0ZECis6MTA3MjEwMDA1RkMwMDg5NERGRjdCNDU4NTc0RjBGOTBGQkIyOTU1RUVDCis6MTA3MjIwMDBGNDczNTdGREZEQTU3MjBCODlCRTM3QTY0RjFFNDA3NjNECis6MTA3MjMwMDBCQjIxNUZBNDdBOTYzMTFGQTRDMzI2RjJDRDM2MkEzRTI1Cis6MTA3MjQwMDBCQzRGQTYyRTcwOTVBMTNEMkIxOTE1QUZBM0ZFMTFGOUM5Cis6MTA3MjUwMDAyQjc1MUIzMkU5MUVCQjlCQTY2NjFCREFERkIwQTFEMEUzCis6MTA3MjYwMDA1MEZGRkQwMDhERTA5RTU5MzVEOEYwRkNFQjM1OTcxOUE1Cis6MTA3MjcwMDBFQUI1RTJGNzIzOTg1NjQxRUI0NkM2QkY0MDczNzNCQUFFCis6MTA3MjgwMDA3ODc4REI0RjlBQzZFNkRGMEVFMzdGNzJEODQ2RUZDRDAzCis6MTA3MjkwMDBGNDM4NjkwRkQzN0UzRUJDQ0RFMUMzRjhERTI5M0NGRjU0Cis6MTA3MkEwMDAwNkY1NTM3RjUwMjlCRkU4OTQ4RDg1M0QyMEUyNEYyOTk0Cis6MTA3MkIwMDA2QzJEOTZDQ0NBRDdENUQ5NjM3QzVENTVGRDVENjVCODdDCis6MTA3MkMwMDA4RjY3M0Y3MTUwN0NCMDdFOEJDMkMyNzgzNzQzMTc2MEE2Cis6MTA3MkQwMDAxRUM2NURGOTYzMDdDMTNENzc4QkNBODI3NEJFNEFEQjY3Cis6MTA3MkUwMDA4OTcxRjI5NThGMERGMzYxN0NGNEU2QzFEMTAxNzhERUVFCis6MTA3MkYwMDBCMEVCRTcyOTNFM0NGNzU1REZDMUJGM0YwNUZCRjM0QzQwCis6MTA3MzAwMDBDQzhGNTJDQTI4MUVGMUE3NjlBREYzMkQ5ODZGQTcxRTI2Cis6MTA3MzEwMDBDRUM1RjVGQUE3MjdGOUVGOUEyRDVDRkU4NzMxMUVDMDdFCis6MTA3MzIwMDBGM0EyMTc3NkJFNUMwMUUzOUM2QzU1NjlEQzBGNzczOERECis6MTA3MzMwMDBEQTU0NUFGN0ZFN0NCQ0RGMzYwRTc3ODRGQzE0RDdGNjlECis6MTA3MzQwMDAwQkZDMERFNUY1MDdGMzIzMjM0OUZFQUNFMkZFRjE5RUFECis6MTA3MzUwMDBGODAxNzg5MURFQzhBRjNBNzkxNkQ3NkYzQ0ZFMDY0MjQ1Cis6MTA3MzYwMDBBODAwRTU0NEJEQ0Q0NzcxRDk5MzlCNkMxNDJGMDQ3REQzCis6MTA3MzcwMDA0MEY5MDYyNzVCQjMyRDVDMEUzRDQ5N0M1NzY3RDVFQzgxCis6MTA3MzgwMDBGQTcxRUIzNkE5N0VGRUZCMTg5QTFERTdDQjM2QUI0MUFFCis6MTA3MzkwMDAzNjE2RUIzQzNGMjJCQzQxMDlGMkY4OEY5MUJFQjcyRTY2Cis6MTA3M0EwMDAxRjRCRTdBMkNENzk1Q0IyRkMxOEQ2NTQ1MDE3NTc1QTQwCis6MTA3M0IwMDBGNDBDOEZGRkIyRDExRDU2N0Q5RUJCRjRDRkIwNjA4NTFCCis6MTA3M0MwMDBFMTNFQTMyNTgzMUVGQ0NFNzgyODRGRkJGOUQ1OEI2N0MxCis6MTA3M0QwMDBCN0JCNDk0RTdFNjQ3OTZFQ0NFRDUwN0UzODJERkNBRTQ1Cis6MTA3M0UwMDAxNUU4RjJBMjFBMUMzNjEwRjM4NjJDOUJCNjJBMTQ1NzA1Cis6MTA3M0YwMDAzOUYxMUQ4Q0ZCN0ZGMDg0Q0Q0N0NCNTBFNDhEMkRGQTA1Cis6MTA3NDAwMDBDOTQyOEE0RjI1QjcxNzk4OTdDN0FGQTM3OThBMTc2RkQ0Cis6MTA3NDEwMDAyNzY2OTQyRjMyOUJFRDE0RkU4NTA4Q0YzM0MwNDkwMEI4Cis6MTA3NDIwMDA3RTNDNEI3ODVDRUM0NEI5RkI2RTNDM0Y1QzZGM0E2RjQyCis6MTA3NDMwMDA3QzQyOUNCM0I4NzJBMDYyRDBENzc3MENFNDcyQTBERTE1Cis6MTA3NDQwMDBDMkQ3Mjc3Qjk2REY0MzI5N0YyRjRFQ0E3MTI5NkZBNUFDCis6MTA3NDUwMDBCQ0ZFRUE0MDlFQzcyMkU1MkM2MzNCNDlCRUNDMTdGNzMxCis6MTA3NDYwMDAyNTJGRDlFMUUwRTc4QjM0RTY0MTNDMkVFNDY0NjI3N0Q2Cis6MTA3NDcwMDAwREU0RUI3QTkxRkQ4OUVGMjM1QjJGNjBFREE0RjczRURECis6MTA3NDgwMDBCMDQ1RTZCNzE3RTNGNzZENkJCM0U4N0I5QjJGODJFQjU0Cis6MTA3NDkwMDAzODIyN0Y4RkNFNEE3MjY0MDFFM0YzNUNEQUFBNDRBMkY5Cis6MTA3NEEwMDAzQTdGODdGQzdEMTI4NjdBNDIyNzc3N0FFODA1OTMzRUY5Cis6MTA3NEIwMDA5ODI3RjRERjNDNjZDQTM3NkEzNUVBQTk0MDlBOUJFMDEwCis6MTA3NEMwMDA1QUQ0MkFGMkIwQkJFN0E1QjJGMzE4RUYwQTQ2NUU5ODg5Cis6MTA3NEQwMDA0RUYzNTY3QzkxMDRGMzU4QzBCQUEyNzgyRkYyRDJDNzZCCis6MTA3NEUwMDBGOTM5MjZGM0JDQ0M3MEY0NzU5RUYzN0QzMzI3RTFGREFBCis6MTA3NEYwMDBDQURERTM5QUU2MkRGMUNERjA2MDk1OEUwRTEyRUZGMzIyCis6MTA3NTAwMDBDMzFDOUZGM0Y3MkE0NEFGNzc4NEJEMjVDRjA3OUFFOUMwCis6MTA3NTEwMDBCRjgwMDVBNkEzOUM1QjcwM0ZFQzMzOEJFM0ZDMjBGOTk2Cis6MTA3NTIwMDA2MEUxQUUwODlEMDdGQzkwQjVBNkJCNjAzRDJDRDlCMkNBCis6MTA3NTMwMDBFQjg2NzFGMEZEODIxRkJFNjg0NzdFQUZDOThBMEVCNTJCCis6MTA3NTQwMDA2NEMyRkUzMzNDRTlCQjU1NTcyN0QwRkIyNjNERkY0NUJGCis6MTA3NTUwMDBFMTg5MDlCRjE1N0QwNzc4OTlCNzVEQTUzQzBBNUQzQkI4Cis6MTA3NTYwMDA5MTQ3MTAyNjdDMzU4NEY5RUYwOTM2MUM1NTdEMkRGMEE2Cis6MTA3NTcwMDBCNDAxN0ZFNkE4RUNFMkU3MkJGMUY2M0YzRDZGQjM1RDg3Cis6MTA3NTgwMDBGMzhCODFCRERCMzU2Njc5RDNDM0FFMzFFOTUzM0NDRjk0Cis6MTA3NTkwMDA4MUZBQjMyQjk3RTdBNzdGNjJGNTY3NjQ5MTlDMzZDOUEwCis6MTA3NUEwMDBFMURDMzJCQThGNTVDQUUxRjk0MjBGQ0E3MUU2QTFGRTk5Cis6MTA3NUIwMDA4M0ZBQkI1QjlFNEE0NzdGQzYzQkY3M0Y5NTQ3RjkxQTY0Cis6MTA3NUMwMDBBODZGNDZDNEY1Q0Q2REY1N0NCQ0RCN0U5OTQyRjk1MkJGCis6MTA3NUQwMDA3RjlBRDYzRTEyRURDMTlBNDc3RTk1QUVCRkVGRjU0RjJBCis6MTA3NUUwMDAwNUMxQTMwMzcxQkU0MjNGMkU1NURCMDZFMkVGMUE0QUU2Cis6MTA3NUYwMDAzOTdCQzE3RDVCMzIzOEREMTc4MEQzNkQ4NEIzMEVFMUZBCis6MTA3NjAwMDBENDlENTNBOTE3NzBCRUJEODFDMzc3NjIxMzg3Nzc2RTZGCis6MTA3NjEwMDAwRjM4QzMxNDU3QjlFRDQ3MEU1Rjk4RUM4RTI4RTlGNTgzCis6MTA3NjIwMDA1M0JCNTQ4NkZCQUM2RUJCQzM2NDA3OUM2NUFENUIxMTVBCis6MTA3NjMwMDAxRjRCNTdCQ0YyODYxNUY4NjJFMTI1ODAxRkUwODM5QTQ0Cis6MTA3NjQwMDBDRDBFRDJGQjBCN0ZDRUUzQTkxRjI4OTVGOTE0RDAzRkI2Cis6MTA3NjUwMDAxMDREQkYwMzlFMkYwMjdCMDFFRDhERjgzQ0JBRUQ4MEVCCis6MTA3NjYwMDBDRjEwOEZERDc2NDAxRkYxQjc0Q0Y4QjU5NkVERkQxNUM0Cis6MTA3NjcwMDBGRDhFOTZFMkU3Rjk5OENCRTRCRDM2N0I0Q0Y3REE2OEVECis6MTA3NjgwMDAyODAzRjgzOTdGMjdEMkE5QkZGOTNFMkVFRTlGRkRDQjA0Cis6MTA3NjkwMDBEMDNGREZCMjgyRjhCRkVCMTJGRDM5QjZDNkQ0QTgwREQ5Cis6MTA3NkEwMDBGMzkwQkI3NjI5NjQyNzJENUQ1OTk5NUVDOUYwN0MxQjQ4Cis6MTA3NkIwMDBGN0FCMTUxNDcxRkRBNkY4RkQ5NDVGRTMwMEJBQTZDMkZFCis6MTA3NkMwMDA3OEZEOEIzNEZFNUNGM0YwN0NGMzFGMzJCQTQ3NDdDRTczCis6MTA3NkQwMDBEN0ZDMUNGREVENEVENDg3MkUwQkU5NDMzM0ZDRDcxNkE3Cis6MTA3NkUwMDA3MUJEQjk1NEI1OTA3REJEQzRDRUVERUM0RTcxN0ZDNTcyCis6MTA3NkYwMDA3MDMxOEZFMTQ1RkM5Q0MzMTVDMkFGRDA4OTc2MjVDNjk5Cis6MTA3NzAwMDBCQkFGNzZEMEVGMTgzMTM2ODlGQ0VFNTZDNkY5Q0YyQURBCis6MTA3NzEwMDBGMUU2QjE3RURDQkRCRUM5N0VFRUVBOEY3OEJBODVCNUYyCis6MTA3NzIwMDBEM0VGMjI0RUFGOThBOUUxNzk4NjM3RjI5Qzc0NEYxNEJCCis6MTA3NzMwMDBGQzA5NjAzRkIzNDUzRjQ3NkNGQ0ZDQzIxQjM4MDZDMEU4Cis6MTA3NzQwMDAzNTVCRjhBN0RGQzBFQjUxNjFGQzM3MEFFQzY0RDc4NkU0Cis6MTA3NzUwMDA5RjcxOTBERDcwNTcyQUY3MUZCMjlDMEMyQkFFODdBRjNDCis6MTA3NzYwMDAwQjM5NzVGMzc4ODcxRkU1RkFFQ0YxNzcwNUIwODRGRUU1Cis6MTA3NzcwMDBDMjBDRjA1NUUzRUM1QTU3MEFFMzM0NUJCOEJFNkZDRTQ3Cis6MTA3NzgwMDA2MkRDMkZCMEI2QTMxQ0YxNzcwNTk4Qzk5OEJGMEZEMDYzCis6MTA3NzkwMDBFRjNFOUZERDFCMUYxOUNGNEYyQzQxM0ZDMzk1OEMzMzBDCis6MTA3N0EwMDA1ODA1RTFENzUwNUY2MkU3RUY2QjFGREQzMUUzRkVGMTczCis6MTA3N0IwMDBCMDRGQzBBQzI5RDQzMzg4MjNFNDhCREEwQ0RBRkZDRTg3Cis6MTA3N0MwMDBDMEYzMDU1OTU4NUE4OURGQkU2NjY1NjEwQjJGMzdCODdCCis6MTA3N0QwMDBFODVFMjVBRkUxNzc2MUFGQUY2MEQxMEM4MDJGN0FDODRBCis6MTA3N0UwMDA3OEJFRTNDNkE4MjUzQTBDRTM0NUQ2RTgzRUM0OUZDNTVCCis6MTA3N0YwMDBBOUQ5M0MzMDRFQTA0QTI5NDNCQzJGNTlEM0I3RjlBRTgyCis6MTA3ODAwMDA3Q0Y0QTkxOUY3Rjc4NzNBREVFNzg1RjNCQzQzQTE3QzNFCis6MTA3ODEwMDBBMUQ5QjBFODkxNEY2RkIxQjIwMzZBMTlBNzFGRjI2MTA1Cis6MTA3ODIwMDA2Mzk2MTZBNjc2Q0IzOTlGQ0I3MzI1OTIyRUE1RDBCRDM1Cis6MTA3ODMwMDAxRUJGQjNDNUZDQTA5RjBERTlGOEJEM0RCMTVGMjUyQzZGCis6MTA3ODQwMDBGODUyREE2QjhCQzVCQTVEMkNGOUVFNzFFMzdBREQyNjVFCis6MTA3ODUwMDBENzBEREE4NzgwQjdEOUEyNENDNkY3OEY4QTc1RjE2ODQxCis6MTA3ODYwMDAxMURGNjdERTUzMjRGNzk5N0QxQjZGQTk4MzQ1MDlFRTZECis6MTA3ODcwMDA2NzFDNDQ0NzM5RUUwQzUxM0U1MjM0ODhGQTkzRjM5MDFBCis6MTA3ODgwMDBGQzNCOUYzNTUxM0VDRjdDRTFBN0IxODAyNEExRkNFMEI5Cis6MTA3ODkwMDBENjFGNzFCRjkwMjlFRjA4MEMyNUNBNkY1QkI0RERGQ0MxCis6MTA3OEEwMDA1Q0U3RTc1MTBENzI4OUZDQTY4QUJENkIyRUNFNEZGOUJECis6MTA3OEIwMDA1MjhBMEZGOTdEQjY3RDI3RjkwN0NDRUQ2Q0Y4RkJBOTRDCis6MTA3OEMwMDAxODc3REIwMDc2OTUyMkUyNjU1MDc3NkM1MkU4NzcyRkM3Cis6MTA3OEQwMDA2NkY3RUZCQTFDRjUzOTQ4RUIyOTc0MkU1NEQ4REJGMzYwCis6MTA3OEUwMDAwNTdEMURFMjdFQUJGOTY4NUY2MTVDMERFRDJCQzREN0IxCis6MTA3OEYwMDAxNjZFNTc1QTg1M0Q1Q0I3Qzk2ODZGQ0M1RUFCQjMzQjFCCis6MTA3OTAwMDA3OTYxQjgxRkMwNjFDQTUzQjcwOUJCRTM0RDdCRDdFNUE2Cis6MTA3OTEwMDAyOEY3Q0RGNzA1QkM2OUUxNzA4NEYzMThCRjU3MzM4N0FBCis6MTA3OTIwMDBCRkI3MEFGQjUyRjJENUNGOEE2Qzg2Nzg5QjNDNzc1QTU4Cis6MTA3OTMwMDA4M0YyOEFERkRCNjBDQUQzNzJEMUZEMzEzNTBBQkZCRjYzCis6MTA3OTQwMDA1M0ZBMjE1RjE3RTU2OUIwNDNFOUJFOUNFMzY5MTQwNzY4Cis6MTA3OTUwMDAzN0ZCMjczQjJCREQ2MThCQ0U0Rjc5NzNDNjZERDMxMTdGCis6MTA3OTYwMDAzRjM1RTk3NjJCOTZBRjc3REYyQkQ2NDFFMzFGRjcwQzM3Cis6MTA3OTcwMDAyMkZCNjc3REU1QTgyRDk4OUZGNERFQTM2NzY2MzgwNzk0Cis6MTA3OTgwMDA1MDM0NDU5QzlGOEFGRDBFRjNFOTY3N0QwNkYwNTBGRDVCCis6MTA3OTkwMDBBRjMzRkNCMDhGRUE3Q0JFRUIxNjI3ODhFRUNGOEIzRTcwCis6MTA3OUEwMDA5RDYxMDUzRERGRjk0MEQ3NTZBQzY3Njg2QTgwRUFGNzBDCis6MTA3OUIwMDA3NjBEQzQzQjk3MzMyMjBFNUU2Rjk2RkQzOTAyRDg1Rjc5Cis6MTA3OUMwMDBFNzQzQkNGRUQxQTM4RTQwMThFRDVGNzE2RUE5RTY0QTc1Cis6MTA3OUQwMDA4NUU0QUYwQkQ3NTc3OURDQ0Y1NDYzNzk4RTk3MTNGOEQyCis6MTA3OUUwMDBFRkEyNUNBODlENTcwQkI4OEFDQUYxM0VENDkzRjRGQjcyCis6MTA3OUYwMDAwQjgzMDdGOTVENDU4MDdGQ0ZDMEUwMzkyQzE3Q0Q1NDRDCis6MTA3QTAwMDBDMjc2M0NFRjdGMzQ3Mjg5RDA2QjA5N0YyN0M0MjVENkJDCis6MTA3QTEwMDA2QjYxNzE4MEJFOTc3RTc0RTg4NzY5RTUzREZCRjk2RjA1Cis6MTA3QTIwMDA4RThCM0VBMDAwODAwMDAwMDAwMDAwMDAxRjhCMDgwMDJECis6MTA3QTMwMDAwMDAwMDAwMDAwMEJFNTdEMDk3ODU0NTU5NkYwN0RGNUI3Cis6MTA3QTQwMDA2QTRCNTI0OThBMjQ0MDQyMTYyQTA5MDkwMTAzMTQ5MEJDCis6MTA3QTUwMDA0MDgwQTA0NTEyMjAyQzgxMEEyOEEyQTAxNjhCMTAxMDZECis6MTA3QTYwMDA0ODQwRURBNjVCN0FBQUMyMjZFMjE2RDRCMTY5MUI5REY2Cis6MTA3QTcwMDAxMkQxQzY2RUI1QTNCMjA0RDkyQTZDODIzQTUyMjhEQTYyCis6MTA3QTgwMDBBOEEwNDE1MDQxNjM3NzQ0MThFMzBDQjZGRjM5RTdERTA0Cis6MTA3QTkwMDA5N0FBRkJBOEIwRjRGNENDMzdERkY3ODc4RkVGRTZCQ0VBCis6MTA3QUEwMDA3QkRGNURDRTdFQ0VCREY3NjUxQzYzQUU3QTFCNjMzRjg4Cis6MTA3QUIwMDBFM0NGMERBMUQyRDZENUMwNTgyMTYzMkYzQURDQjZBRUE0Cis6MTA3QUMwMDA1MDRFNUQ5ODEzRUZDOTY3Q0M5RUUxODk3MjAwM0NCN0I4Cis6MTA3QUQwMDA1MkYxOTlGQjMwQzY4RUZBNzNEREIxOEM4REJCNDIzRkZCCis6MTA3QUUwMDBCRkM4QkNBNDlGODQ3RkE0OUY4Rjc0RkREQ0FFQzBCQkM1Cis6MTA3QUYwMDA4M0UwM0Y3MzNBRjBGRDNCQjI1REJEMUQxRDE5QkJFQjRBCis6MTA3QjAwMDA1Rjk4MDdGQjYxNjU0MzBDNkMwMDYzNzc1QjE5RkQ3QzM0Cis6MTA3QjEwMDA1RkIzMzVENzVBMDBFNTRCOTY0NDk2MDlFRDVFRDk5NjhBCis6MTA3QjIwMDAzMTBCRkE2MThCRTFBNTE0QzZCRTY5RkNDOEVDODA3RUZFCis6MTA3QjMwMDAxNkI0QUFDQzk1Qzg1ODc1QUI0MkU1ODI0RDhERTYxMUI2Cis6MTA3QjQwMDBEMEFFMUFDQUQyQjBGOUNEMTNGMzY1QUNDOTM4MjEzNjFDCis6MTA3QjUwMDBGNEJDQkY4M0NGOTdCMTM1OENFMTdDNUUzOTZCRjQ0MEM4Cis6MTA3QjYwMDBCQkJCMENGNTVGM0U5NTA0OEYwNzJCQ0VFNzFEOTdBRTkwCis6MTA3QjcwMDAzMzU1QkNGNzI5NjNFNUY1Rjk5N0Q2MEY3MjI4NTRGRjAyCis6MTA3QjgwMDA1ODhFQUIwOEQ3RDkwNUZBNDA1ODM1RjBGNUVBREIyRjA3Cis6MTA3QjkwMDAxNUZENEQ4RDY2NzdCOEExN0VDNjgwNThBQjAzRjA1REFDCis6MTA3QkEwMDA3OEQ0QjMyQzE2RTYzMTZCNUQ2NjNGMTVGQUU4OUY1MTI5Cis6MTA3QkIwMDA1MjgyRkRCMTk5ODMyNTdDOTU3NzYxMkM4OEVCMzNCNjkxCis6MTA3QkMwMDA3NDYyNTA3RUJGQTMzMDlFQzFCQ0E2MjYwNEVGNjE3REM3Cis6MTA3QkQwMDAxOUZCOERCRjdCOUQ3NTI4NjM2MzdFMEI2REJBRDAyQjFGCis6MTA3QkUwMDAyRTA2RUY5NjVCMDRFQ0JCREU1RDU2MENGMERGNTU4MjkzCis6MTA3QkYwMDAzRDhFQTIzQTFGQkM3RjEwRTcwM0U1NkQwMzdCNDVCM0MyCis6MTA3QzAwMDBERTgwQkRDQzE4ODMzRDlFQjE5MkY0NjlCRjQxQkVCODAxCis6MTA3QzEwMDA2REUwRDAxMUY4N0M5ODI1MzY3NzFBRTE5NzExN0Y5NEEyCis6MTA3QzIwMDBBNEJCMjc2MzNEQjY2N0IwMEU4RjM5RDBGMTY2NTg4Nzg1Cis6MTA3QzMwMDBFNzJERDVFOTgzNzU3ODdBQzc3OEZDMTFGMDM2NDlFMEVECis6MTA3QzQwMDBFMTM3MEUzQjk1MDcwRDMwQ0Y3RUExNzk2OEUzMDM2N0RFCis6MTA3QzUwMDBERTEzODRGRTRFMkY0REU5QkIxQUZBN0IzNjdERDgxMjE3Cis6MTA3QzYwMDBDMjhCMThGRkQ5NzRDRjlDRjBGMTYxQjlCREYxRjlENTgxCis6MTA3QzcwMDBDRTYzOTY5OEM3MTI0MTM3NzczMUYwOTlDMEY1Q0ZGMEFGCis6MTA3QzgwMDA3RjQyNTk4QzA0REYzODM2OTFCOUYyNDJGMEE0MUI1MzdECis6MTA3QzkwMDAyNTc4RjJENDZDQTlGREFEMzNBRjkzRUEyQjJDQzE4MkM5Cis6MTA3Q0EwMDAxQTVCODhCRkY1RjNEMTRBMjAxNEYxNjk3NUVDQzYzODI4Cis6MTA3Q0IwMDAwNjUzM0NCMUUzQzI4NzUzNDA0RUZFQjY0MTc1MkEzMEFECis6MTA3Q0MwMDBENzM5M0I5RkZGNzAwOEI0M0EwNzBCNEUwNEJDOUQ3MzM1Cis6MTA3Q0QwMDAwMTAwRUIzREI3NDlGNUZCMzI5MTNGNUNDNjhBNEU4QzAzCis6MTA3Q0UwMDA1NTYxNTdEMDdFRkVBMUQ3Q0RDM0UwRDdBQTlBRDk2M0ZDCis6MTA3Q0YwMDA5MThFNzNGQ0E2Q0Y5QkMyRTY3OTgxNUQzNEIzMkM5MDQ0Cis6MTA3RDAwMDA4NzhERjJGMzZBRjZEMDc3NkE2Rjg0MDI2Njc3MkZFODgwCis6MTA3RDEwMDBBNzVFNTc1RjMzRjIyQjE2ODdFRDhDOUYzNzY5RUI4NDk0Cis6MTA3RDIwMDBGMTE3MUZDRjdDNjQ1RkQ4QkE5Rjc2QzQyNjdENzkxRDdBCis6MTA3RDMwMDBGQ0QyOEZGNUZCNTlDNUYxOUEwRkMwMEE1OTY5NDMyMzRDCis6MTA3RDQwMDBEMTY5RDkyMUQ1ODkyQ0JBMkM1RDYxMEFBQzczRTQyNjlFCis6MTA3RDUwMDA4QjNGMEE0NEVCREI2RDI3Q0QwRUMwRDcwRjVFQzcyM0U4Cis6MTA3RDYwMDBGQjRDMjhGRkI1OEMyNUUyN0IyN0NENERGMDdDQThDM0NBCis6MTA3RDcwMDA0MTc4NUFCMEUzM0IzMzAzQkE4RkRDQjE5MEU0N0EwNDI0Cis6MTA3RDgwMDBFOEIxNzhFMDlGNjAyM0VCQjUwOUZBRjc2NUM2M0E5RjQyCis6MTA3RDkwMDA4N0ZFRUY1QTM1MEE4NDhCQjFGOEQ2Mjk1NENFQUIxQjM3Cis6MTA3REEwMDA0NUZEQ0Q2RjlENDhGMDgyRDYxODgyMEY0NjA3NDczMEJCCis6MTA3REIwMDA5OEM3QzEyRDFERDgzMjk4Qzc2MTM1OTBGQjdCRUNDN0ExCis6MTA3REMwMDAxMjRCN0FBMjIyRjVCNkE1QjhFRTgzRDFCRUZDQkI2MUY4Cis6MTA3REQwMDBCQzhBM0Y4RjJDNDdCQzJFRDhBNEI4OTBDRjJBNTQ3NkFCCis6MTA3REUwMDA1MDQ5QzBGOTQ2NTE3RjE1RUE3QjA1MEJFMUY5OThEMjVECis6MTA3REYwMDA1ODlGMjE5RUVBMTk4MzdBNzU0MEVDNkEwNkIwNkEwNjlDCis6MTA3RTAwMDA3RDExODEzRjBGMDlGRDYyNkFFMkYzMUVERTVBNDlGREQyCis6MTA3RTEwMDA2OUY1ODcxRDU5QjQ3RTBEMzY3NURDNjA5QzZFMEJBRDFGCis6MTA3RTIwMDBDN0Q0QTQ1MDM5QkFGNTNBMkFBQjM3NTUxQTFEMzBDRTBCCis6MTA3RTMwMDA1Qjc5Q0YyNTIxOUVBMEJEQ0QxMzUxMkYwRjhDNjcxMUVCCis6MTA3RTQwMDBGNDk3NTY1QTg0M0U5RTgyRkExOEZBM0Q5MEU1RkEwMjVCCis6MTA3RTUwMDBFNTcyREM5MjI2QTMxNUY1QTlDRDZBN0YxRUY4NjA1QzU5Cis6MTA3RTYwMDA1MTVGQzdBQ0IwNzVBOTdCNkU2MTBFRTAyMzRCNTI4QjlFCis6MTA3RTcwMDBDOTA1RkQ0RjgxMzI1QzdGREZEMThFQkRGOUE2NEQ3RkY0Cis6MTA3RTgwMDBENzUyQTlEOTI1RTY1Q0MyMThGMEY5RUQ3NjNFNkY0REMwCis6MTA3RTkwMDBBRThFODlGNkRBRkI0MTg1Q0I4NzZGQjNDNUZGM0NGQzFDCis6MTA3RUEwMDBGRTU5OTZFNzI3OUM2RjcwMTg5QkZDMUFFOUQzNjA0NjMxCis6MTA3RUIwMDA2NUVDM0Y2RkZFNDA1RjJCRDIzRkNFRDhDNDEyRTA3RDExCis6MTA3RUMwMDA0M0E2MzY3RjJFRDc1NzlBN0Y4Qjk4RkY2MTk1MkQ0NjE0Cis6MTA3RUQwMDBCRTM4N0NDMzBENDExN0NDQUJGMUJFRkVGREQxM0U2ODcwCis6MTA3RUUwMDBFMzI1NjY5QUE5M0Y2NjZGQjk4OEZDNUFCRDJCQzZCMUQ3Cis6MTA3RUYwMDAxQUQ2NTcwMUI0NDFCODY1QTdDNUJGM0U5MzlFMzMyNTM2Cis6MTA3RjAwMDAwOTRCQ0I3QTA1RUFBQkUzNUE3MkQxRkU5NEVFOEUwQUE2Cis6MTA3RjEwMDAyMERGMzZFRThFMzJBMjFENzkzM0M3OTM5OEQ5MTE5Rjk4Cis6MTA3RjIwMDA3NzJGNTM4MEJGNUQzQjJDNDZFNDgzNjQ4NzJCMjlCM0I2Cis6MTA3RjMwMDBCMEZERjk1RTQ5OEY2OUYyQThFNzMzQ0YyQTJFN0YxRTg0Cis6MTA3RjQwMDAyMTg3RDMwNERGNEUxNzcyMzhDREU4OENGRjI1Q0NGQjk4Cis6MTA3RjUwMDA4RTc3NTQ4NjdBN0NGQTEyQTVEN0E2MDJENDY5QjFDRTYwCis6MTA3RjYwMDA5QzMwMzlENEU0Q0Q4NDdDRDkxRkY5OTNGM0U1QkNENjk5Cis6MTA3RjcwMDAwRTQyQkUzMzQ1QkY1QzBFMkFDMDQwMjM3RTJBQUVFQkM0Cis6MTA3RjgwMDBFMDQ3Rjk1RUQwOUE0OEVEMzQ3OUQ1RTQzNDNEREI1M0NGCis6MTA3RjkwMDA4QUVCQUU1ODA2RjIwREUzNzg5NkE2MTRBMEJDODRGOERFCis6MTA3RkEwMDBDNDZDNDc3RTAyM0U0OTlFMTVDNjA3Q0IxQTdGMzQyMjE5Cis6MTA3RkIwMDA5Rjk4OEExNUUyMTMwQjk0QTU2MTdDRTQ2RUYzNTNFQzUxCis6MTA3RkMwMDAyMzNBQzEzQ0M2MkRDRjM0QUM2NkExRkE3MkU0OTc4RTM5Cis6MTA3RkQwMDA1N0NGRUY4NUEyRkQ3NDVCMjBDNzAwRkQ5OTZBQTI5Qzc0Cis6MTA3RkUwMDA0QjYxNUVFNzkyMUNBNEM3MTYzRDAwMDBBMDYwOTFDOURBCis6MTA3RkYwMDA1RDhBN0VDNkEyREYyOTRFRDRCRkU4N0ZBMEZFMTk3MDNECis6MTA4MDAwMDBBQ0M2RUMwOTlCREYyREFEQkQ5OTAzRjAzNEIxQjUxQkI3Cis6MTA4MDEwMDA5NUZEMzMzQzkzMTAwRkQzNUEyNzA5M0NGNkE2OTIzOUFECis6MTA4MDIwMDA4QTBDMzg5RjdCQUNEQ0NFOUNBRkI5RkY3NjFDRUZCQ0QyCis6MTA4MDMwMDBERkUyQzRGMTE4MkJFMkY0MTZGMzJENzQzOTNCRkYxMjgyCis6MTA4MDQwMDBFN0Y3OEU4OTNEMEJFRENGNDQ3OTU0OTRDQjMzRTlDQ0RGCis6MTA4MDUwMDBGRTM4NEM3MUM2NUFBMDMzRjQ3QkM2QzQ3Qzc2QTBFN0M4Cis6MTA4MDYwMDA0QzgwM0QwODc3NjBBRTBFRkQ1MEVFNjA5RDYxNzZFNTc4Cis6MTA4MDcwMDA4MkIxMkU4MzY1MDM3RDE3RkRFNTUzMjNBOEMyMzlCOTZDCis6MTA4MDgwMDBDMURFMDExODc3RUEzMDZFRkY5QjM3OThDOEZFQ0Y2QkQwCis6MTA4MDkwMDA3QzZGODAwMUVBQkZDRTc0NzU2NkEwN0JDNzc0RjFENDkzCis6MTA4MEEwMDBFMDdBRTY0RUYwQkY2MjAyRjhBRTg3NUY4RjFCRTQwODBECis6MTA4MEIwMDBFMUIzREUxOEM4MzFDMkZCRjU4MDQ3MUZDQ0FCRkUyMTBGCis6MTA4MEMwMDBCNURDQ0ZGRDlFOThDQTVFNTdFNkVCQjlBREQ5ODQxRkVCCis6MTA4MEQwMDBDRERFNjhGQTdCQUIzNzE5MTYxMUQyRTM1N0IyNDMxQURCCis6MTA4MEUwMDA3RkNGMTc3MjMwMUZFNTgwODVEQjlCNEFGNzMwRTRDM0YyCis6MTA4MEYwMDAzQ0M1OTlDM0MyRUQwRDk3MDc0RDRGMDNCRjkzREM1NEE4Cis6MTA4MTAwMDA2NEE3M0I5N0IxOTBERUQ2REJBM0JENkFGREUzODM2MTM0Cis6MTA4MTEwMDBCRENCQjMzQ0VCNTEwRjk0RkNFOUJGNUVGRjE4QUFFNjYwCis6MTA4MTIwMDBCREY2NjIxOUQyNjlEODc1MEE1Mzk1QUJEMTkzM0Y5QUJGCis6MTA4MTMwMDA0ODRGMkVBOTY0QTQyN0ExMENENzkzQTY3NkZDRjQzRjQwCis6MTA4MTQwMDA2NDVFOUI5RUZGNTdDMUY3RTBERjkyREY4ODdBM0NCQ0ZDCis6MTA4MTUwMDBCRkNGQjI0QUI2MjE5RDc3NjUyQTVDRUZGRTkzRTZBREFDCis6MTA4MTYwMDBEN0VGQkJEQUU0RjVFQUY0RkI0QkEyRkQ5NUY0RkIxMTgzCis6MTA4MTcwMDBENEVGODU5N0VBNzMwNkZEQTEzRUZGREJDRTFFN0VENEM5Cis6MTA4MTgwMDBGNzlGMzJEMEZGNjhERjc2QzQzODlFMTdGQTlFRUM0MTI1Cis6MTA4MTkwMDA3NEJDRkY3MkZBRkVCMTlDMTk0NzEwM0YxMUY0RkQ3QkNECis6MTA4MUEwMDBGRjBDN0RBRkYxOTc1RTFFRjQ3MkEwRTdGQjMxMEY4MkVBCis6MTA4MUIwMDBGRjg1NzREQUFBMzBENEFGMjE3RjhCMTExRjFGQ0NFMjY4Cis6MTA4MUMwMDA3Q0FDQzk0RDk4RkY0NTc2MUVFNEMxOUY5Mzc5QTk1Q0FDCis6MTA4MUQwMDA3RTVGRjM5NzAyMDdDNjlCMDVCMTdEOTkxMkUyNzc0RDRBCis6MTA4MUUwMDA1RTM0N0VEN0RCOTEzOTU5MUUzNUFCMzAyNDI3RjM1RUUwCis6MTA4MUYwMDBEM0RCODFGNkY4Njk5QjA5RTM1N0QzQkNFRkI4MUQ4MDQ4Cis6MTA4MjAwMDAzMkRDMEVCNEU3RUY1OEIzQUU0RDBFRkVFMzJBRjkyOTg3Cis6MTA4MjEwMDAzNUVCN0Y5QzlGNTJCMzIyRjM1MzVBNTZDNzdGOUM5RkU2Cis6MTA4MjIwMDAyRTQzNDdCMjMzMUE5RjhENzk5QkYzMDdDQkU2RkUzRTcwCis6MTA4MjMwMDBGMDBCQ0RGQkEwMzlEREJGMkMxM0Y1MUVENzg3NjM3RTc1Cis6MTA4MjQwMDA2NjM1ODhDRjNCNDQzRTQxRTNENzExRDkxRTE3Q0U1MzQ0Cis6MTA4MjUwMDBBMzMzRkFGN0U4Qjc1RkFENUYzODI1QTk4NkI5RTBGOTJGCis6MTA4MjYwMDAxRDUwODZFQjBEMEJEMjJGODI3RjNGRkMxQUU5REMzRkJECis6MTA4MjcwMDBFQkVBRTgzQzQ5RDBGOTlGRTgxNzRFQ0I4QUUwMTczMjg5Cis6MTA4MjgwMDAxN0I3RkYyMUJBNTgyNjIyREY3QzFGMzAzMjk0QUZGNjkxCis6MTA4MjkwMDBFODZBNUFDQkYxQUVDMTJCMDI0NkNEQkUyNkEyN0QwNUJGCis6MTA4MkEwMDA3RTk5RkVERkUxOTc4QUQyRkFGMzU2NzBGRDdDRUI4QjY0Cis6MTA4MkIwMDAyQjhEODMwMDFGNDU0Q0U0M0Y4NkFFNzE3NTQzRkQwMjU0Cis6MTA4MkMwMDBCRjBGQTYxRTI5M0Y3MjU4MTVCMEVGRkEyMzY1MzA4RkY1Cis6MTA4MkQwMDAzMThGQjdENUZCQjA3RTc4NzE3QzVCM0UwNTQzMDlBRDJECis6MTA4MkUwMDBCRDc3RkQ5MDIzMEZEMUJDRUIzOEJFM0Q0RDQ2NzdBRjM3Cis6MTA4MkYwMDAzMEI4MDBFMEQ4MzBCODQ4MDdBRkUzRUREMThFRDhBOTQ4Cis6MTA4MzAwMDAxRjNGOTc0RkU4NUZFOTg3QjBENjlGOTAwM0Q2MzJBMjEwCis6MTA4MzEwMDAwM0ZBOEI5QjE0M0JFNjQzNkUyREZFOUIxOUU5NTM1MUU4Cis6MTA4MzIwMDBEQTc0MjAxNUQ2RkJGOEZBRTE5NUI2MUVGMDFDRjUyMDlDCis6MTA4MzMwMDBDQ0Y3QjlGNTE1NkI3QzQ2RjE3RTI3Q0E4RkQxOEZBNTk2Cis6MTA4MzQwMDA1RTcxQTk0MEE3Nzk0NThBM0YyQkYzNTIzQzNFOTcyNUExCis6MTA4MzUwMDBEQjMzRkMzMUNBRUYzMzczQzFCNUJEOEZGMjRCRUY2NzJFCis6MTA4MzYwMDBEMUZCMDFDQjM1OEM3RjczMzE3M0Y5MjNFOEM5NTdCNTQ1Cis6MTA4MzcwMDA3NjE3MDFENkZBMDdEQzREQUNFNzcxQjhCRUZEMzYyMUExCis6MTA4MzgwMDA2RjQxODM2MTNFMDM3QzM1QUU5RkI2MDZGMzY1QzMxOTJBCis6MTA4MzkwMDBFNzhGQkRFQjNEOTU5ODBGMjM0MkVCRDY3QkI5RjlGRUY1Cis6MTA4M0EwMDAyMTRCOEVFRkYwQzcyMUJGMUZCODFDQkU1RUJFRTQ3RDFGCis6MTA4M0IwMDBDMTFGNTUzMkJGQzQxQkRERkJCRTg3NzlDNDI3Mjk3Njk4Cis6MTA4M0MwMDBGNDZCMTdCOEEzMUU0MkZGQkRBMjU0RTNFRkJCMkE1REI2Cis6MTA4M0QwMDBDNUIwQkUyODI2RTVGRjQyRkMzREFGMTJGOTdCMDFEM0I0Cis6MTA4M0UwMDBEQTJGNTg4Mzc2Qzk2RDY4NkJDRkY5N0Q4N0QyRjY3RTE4Cis6MTA4M0YwMDAxRUYwMEZBNUUyRTBGRDEzRUJFN0FGRjFEOTg4MUU1NEE0Cis6MTA4NDAwMDA0RjcwQjdDQkYwN0JCRDBFMkVENkM5ODdFMDZGOTI0RjcxCis6MTA4NDEwMDBENERCODA5RjlDMDg3QUUzM0YwNTlEQkY1NUQ4NjRENDg4Cis6MTA4NDIwMDA3QkMxMTJFRUVGMDVCMzc4RDkyNTlCRkI3Nzg2NkNERTE2Cis6MTA4NDMwMDAyRTNBNUJEMDM5M0EwQzBGNjkyMTNBQzM0RjAwRTM4OERBCis6MTA4NDQwMDBCMDc1MTM5RTZFNDlEMkQ2RkQ3MEU1NTg1ODU3MzA4MUVECis6MTA4NDUwMDBGNTUyODA0RjkyQjIxRjU4QjMzQzhDNEYzQTY1M0Y1QzQ3Cis6MTA4NDYwMDA4OTc4MDhGNUY3RTAxMUQ0RkJCNzA4M0M3NUM5N0VFOEI4Cis6MTA4NDcwMDA4ODhGRUIzMzA1RTU2RTNFMzEwNEYwQzEyNkM1QTdDMkY3Cis6MTA4NDgwMDAzQUU3MjMxRjQ0NThFN0U5NEJFNUM2QTc3QkRGNjVCQTA3Cis6MTA4NDkwMDBDQ0ZCNUY1RkNBODcyRURERkJDQzk0NzQyREVGMEIzQUNCCis6MTA4NEEwMDA4REQ1RDFCMTVDNDdDNzMyMUQzQzU1ODNGRDkyM0VEMzdCCis6MTA4NEIwMDBGNERDRjQ4NjM1MkIzQTI1NjFCRTUxNDEzMzgxRkFEQTdBCis6MTA4NEMwMDBBQ0Y0NjVBQ0NGNzM0RjU2REEwNjIxQkYzQTRDQTlBMDg1Cis6MTA4NEQwMDBGM0ZCM0ZCN0Y2ODgxNTc4QjkxMkY1MTlGMUVGRUZENjJGCis6MTA4NEUwMDBCODgwMUYyN0EyQkMxM0ZDNTRBNUFCMEZGMjRGQ0Q4QTU2Cis6MTA4NEYwMDA2NDY4M0ZFOEI5REZBRkIxNDJEMzVCOTdBRjMxQTE0RkJBCis6MTA4NTAwMDAzM0Y0QjlBN0Q3MTg4MTdFQjcxNEZDRjkwMEY2NjdBQzJECis6MTA4NTEwMDBGREI3MjM2MzMzMkZDM0FGNzVCQTc1QUNEM0MxM0U1RENFCis6MTA4NTIwMDBGQjI3QUVBMERGOTdFQkRFNUZBMkFCN0Y0ODA3QUZENTlFCis6MTA4NTMwMDBDMUFCRTRGN0E3Q0Q1NDQ4NEVBNjAxRkQxMDcxNTc5Mjg4Cis6MTA4NTQwMDA5Qjg5RDk2RDc5QTQzNjdCQTZEOEM4NEY5MkY4N0VDQzhBCis6MTA4NTUwMDAzMjBFREZGNkRDQ0I5NUFCRjJDM0UwRUMzRjU3ODZGMzhGCis6MTA4NTYwMDBCMTg5RjE5RjI5NDlDQzg3RjZDM0Q0OEUzRTFCOTNERDk4Cis6MTA4NTcwMDAwRTFGRTVFOUVEMURBRkZGMEM3RjREQTE3RDE2QzkyRTQ1Cis6MTA4NTgwMDBFRjU1NjVCODUxRDVFNkJERjNDODNEMzY3Q0E4QzEzQjczCis6MTA4NTkwMDAyQUQxMUY2Rjc3REY4M0JENTE4OUZCMUU2MzFFMTVCMDgzCis6MTA4NUEwMDA2RjVCMjVFQTNENkQ5RDVBRkIxMTNGRkRBQ0UyNzg3NzhDCis6MTA4NUIwMDA2NzZGQUJEQzgwRkIyQTI1ODExQ0NDRDc0RjRERTAyNUIzCis6MTA4NUMwMDBEODE5MTVFRDU4QjVDODc3OENEOEE5QkFEMUNFNEM4RDJECis6MTA4NUQwMDAwRUU0MkNDQTBGNUIyN0FCQ0ZDNTc1MzZERUE3MTI3RDI0Cis6MTA4NUUwMDA3Q0NCNzgzQzMyOUQzOUNEOThBRjY4OEM4RjVGRkMwMjk0Cis6MTA4NUYwMDBCNERGN0I5RkJBMThFRERBQTc4QjEzM0JFMUZDRjc2NTdDCis6MTA4NjAwMDA3M0JGNkQ2RjdDRDc0RTc3MDJEQzE4NzM4NzE5RjNCNTkzCis6MTA4NjEwMDA4REY3MEZBNzcyOEZFQTVBRDkwMjdDQkNFNkI5ODM2NDQyCis6MTA4NjIwMDBFNzFCNjNFMjA5M0YwRjY3RUZBQkFDMDVCOUE4Q0I3NjU4Cis6MTA4NjMwMDBEMEZCOUUwNDdCQTcwNkY0NTc1NzlCMThFNkFCQzE5MTZECis6MTA4NjQwMDA3QTg2RjhFNjYxNEJERkQ1MzA4RjY5QjVEN0QxRkVEMTk4Cis6MTA4NjUwMDBGNDdGQUQxQzkxMDJFREE2QUYzMEQxQkUwMkZDRjRDNjkyCis6MTA4NjYwMDA3OTdCNTYwRjM3NjNGRENDRTVBMkY0OERBNDcyRjdERjVBCis6MTA4NjcwMDA1RjdGQkIzN0I0NkY3OTQwNzVBRTg3QzZCQjVBQjNFMjM0Cis6MTA4NjgwMDBBNkMzQkM0RTQ1NzEzREZDNzk3M0I3Mzg5QzY3OEY2RUFECis6MTA4NjkwMDA5RTc1RDlDOEFGNzFCMUQxMEExQTBGQkIyMzZFMDJGNDBGCis6MTA4NkEwMDA5QjlCRTM3QTNBQkI2M0E4RkRFRUJGQUJCNDBGQjZCREFDCis6MTA4NkIwMDA3OTdBMjdDQzNGRkQ0MUU4RUY1REFERDMzQjREMEZCMzU5Cis6MTA4NkMwMDBGN0IzQkUzNTEyOUU3NzlCMURGN0EwN0ZCOTNCM0E1RDhECis6MTA4NkQwMDBDMUJDMENFMDM5MTFGM0I2MzM4NTdGMERGQ0IyRjhGNTVGCis6MTA4NkUwMDAwODc2RkY4OTZDOTVGMDcyREFCMjk4OUQwMjI2NkU3QzRFCis6MTA4NkYwMDBCMDYzMzFDRTUzN0I0RkRCN0YzM0E1MzlGQTg1RkJEMTk1Cis6MTA4NzAwMDAxQkJBOTZCQzhFRUIwOEYxRDk2NzQ3OTA2RkM4OEYwNkVECis6MTA4NzEwMDA3OEQ3NzM5RkFDRjFBMTJEREMwQkZFM0ZDRTIzQzkzNTdBCis6MTA4NzIwMDAwMkVCRDk5MjQ0QkUwRjlBNUM5RjFCOUU4RjA4RjlBOTU5Cis6MTA4NzMwMDA0Qjg1M0VFMEVENEVGODYyMjk2RTNERjE1Mjk0MUZFMzA5Cis6MTA4NzQwMDA5OTEzQkU0RjYyQzNGM0VGOUE5Q0NDOEU4QkY1QTEzMTg3Cis6MTA4NzUwMDBGRTJBMzZENjg4NzhGREQ0RThGREYyNTdCODZGRjhCNDEzCis6MTA4NzYwMDA4OUY0RThBQ0E3M0IyRTY5NDE3RDAwRjRDNDdDOTA3RTdGCis6MTA4NzcwMDBEQ0U0NkUyNjFBQjdGREZEQzFFNkNBQjJCNDMwMzk2MTM5Cis6MTA4NzgwMDBDRDk1QUVGQ0Y2RTVFNEQ4NzNERjU0NkVCMEI1MkYyNzc3Cis6MTA4NzkwMDBCMzg1REYzRUUyNjk5MzFCRjk3Qzc2NjFBQzExRjdFOUEyCis6MTA4N0EwMDA0QTlFREVGRjNDRjJFM0VDODU1MUZEMkMzMEYxRDk0RkJGCis6MTA4N0IwMDA1Qjg4QkU0REIxQjEzRTNCRUUyM0M2QzUxQTNCNDBGOUM2Cis6MTA4N0MwMDBBREQwMjM0REI1NTExNEE3QTg5RENDQTRGN0Q0OTU4NTYxCis6MTA4N0QwMDAwRUM0NEZBOUNBOEM1NkIwMkI2QTlDRDNFMUU2RjA3MjQ2Cis6MTA4N0UwMDBDQzFCQUU4ODJENzIyMDdEM0I3NkUzRjJEMDU2MUYzRjI2Cis6MTA4N0YwMDA3OUI0RDIzQkI0NkY3Njc2RjFFMzRGMEU4NEY5N0RDRDM4Cis6MTA4ODAwMDBGQzkzMDY2NkZFRjdGN0QxQUE5OTNCMUVGMzhGRkY1MzQwCis6MTA4ODEwMDBGQjY4RTY2RUZBN0RCNEZDRjg5QjkxRkQxNkFCMzQ2RkY1Cis6MTA4ODIwMDA3NTY5OTQxRkYxQTk2NjcwM0IzMTkyMjlCNDhGQzZFQzJCCis6MTA4ODMwMDBCMEZFNUVBMTdEMzRGNUQ3RkQwOTNGQTdCREMwNTdERDcxCis6MTA4ODQwMDAwMTJGNzE1NjZBQUZGRTVBRjU1QjYwRENEMjQ0OUU2RjExCis6MTA4ODUwMDA1NTlGQUM2NEI4QUYwNjc4RjVEOTAxMUU5OTU0NDNGQjE3Cis6MTA4ODYwMDA2QjRCODU5RTk5QTYzMDc3M0RDOUJGMzMwM0UzRTQ1OTJFCis6MTA4ODcwMDA0RjQ3MTExRDY3M0YzM0U3QzNERjE1MjBERDJBOTJDMjQyCis6MTA4ODgwMDBFNTI5NTNGMDFGRjRDN0FDMDlBMTdFQkVBQUZENEQwNjMxCis6MTA4ODkwMDBDRUE3RjRERjIwQkVDNEI4NTNGNTNDNzkwQkU5Q0QxODYwCis6MTA4OEEwMDBEQTZGNjNGNkE2ODcwNzIyQkZENEM2RjRDNTNDRjlFQzlECis6MTA4OEIwMDBBNzUzMzJCMkYyNDNFRkNGNUU3QTVGMkU3RjFGRTJENjJDCis6MTA4OEMwMDAzOEQ0NUI1MUI0OUU3OTlCMkNDNDJGRDMxRTUwNUQ2NDY5Cis6MTA4OEQwMDAyN0QzQ0Q2NDI3M0Y1RjFFNDVGMEJDQjQyMjkyQjc2OTExCis6MTA4OEUwMDAwNkJFRkYwNjNFNjEzMkU5Nzc4RTcyMzZDRkM2NUNBRkI4Cis6MTA4OEYwMDBEQjUwREYzRjE0NTQzOTdEN0M4MjZFNjZBNDRGNzFCNzI0Cis6MTA4OTAwMDA0NDkyQ0IzQjEwQzc2MEJGQTYyMkJGNzVBNEZFNzgxRTYxCis6MTA4OTEwMDA2QTk3NDJGQjREOENENTM4NTAwRjRDMzUyOEE0RUZGNEE0Cis6MTA4OTIwMDA3MjU5RDE4REZCQUZEMzMyOUNCN0UzN0JGMzFGQjEzOEMzCis6MTA4OTMwMDA5NzY2RjIzOUE4REE3QzIwNkU5QTZGMDhDRUMyN0Q0ODFECis6MTA4OTQwMDBCNkM1NDJGOThENkE1ODQ3NTQxQzNGRjdGMDFBQ0NCRkEwCis6MTA4OTUwMDBEQUM4OEM2NkNDNEYzOUI4NUVEM0U2NTNFREE4MUM4OUQzCis6MTA4OTYwMDBGQzBBRjVDNzhDNTAzRjNGOTZFQkU1RjkxRDc4REU4NzkyCis6MTA4OTcwMDBDNTVBRkRDRjg3OEY4NzczQ0VFNkVGMzlFMjUwREUwNjBBCis6MTA4OTgwMDAxMUJGQTBGQzFCQTBGRTZGOENENzk3QzYxNTM5OUFGMkI5Cis6MTA4OTkwMDA2OUZGN0UxNUU2NEI3MDNFM0Q3QTg3OEQwQjcwNEE2RkZFCis6MTA4OUEwMDBFNEM3ODVDNkFDNThBNDQzRTJBNEM5MzhERUNCMkFFOUEzCis6MTA4OUIwMDAyNzEwQUE0NzhBRDAwRjdDNTlFRDhGRjFFQ0I0MDdGNjQ3Cis6MTA4OUMwMDA4RTU4OEJGMEFCN0RFRDM4ODU2OUFGQkM0Rjc2RUEyRUMzCis6MTA4OUQwMDBDMTY3NERFOEZGQTNERDAyRjg1NTI4RUZFREM2RjU4MzJBCis6MTA4OUUwMDA0N0U1Rjk5QzdCQkIyOUQyQkU5RjU2M0ZGRjAxMTNEMUJGCis6MTA4OUYwMDA2M0ZFMEFDRTBGRjM2QkZGNDJGRENFOEYwRDc2NDI3QUY3Cis6MTA4QTAwMDBDQ0RGNkMxQTgwN0NGRDJGNjJERUQzNkJEMzhCOEYwMUExCis6MTA4QTEwMDA3RjRDMzdDNURCMTU3ODM0Q0Y1NzYxNDY3ODVFOUQ0MjcxCis6MTA4QTIwMDBCMDM2REVGQzA3M0VFODY0QzhFN0ZENjE2OTExN0MxNERFCis6MTA4QTMwMDBFQUI3NjMwNkRBQjU2RjVFNEFDQzk4MTY0NkY3NkY5NkNBCis6MTA4QTQwMDA2RjhEQzM3REVENTM1MTgxMUMzQkU2NjMxNjQ2MzlEN0NDCis6MTA4QTUwMDA5MzlDNzI3QTdDQjMzQzY3M0RFNjZCNjZEQTgzQjFCODZGCis6MTA4QTYwMDAxRjNFRjM5RUVDMDRCNDc3OUZEQTAzNjZBQ0ZGQjQzRTdFCis6MTA4QTcwMDBEMzgwQjBDQjZFMkY0NkQ4NjVFQzQzRjAzN0UyOUMwQTJBCis6MTA4QTgwMDBGRDAwOUQxNjI4OUM2RkU2QkRCNEQ3OUMwNUUzM0QyN0VECis6MTA4QTkwMDBGOEVDREI5N0RGQ0ZDNUJDQzFGQzhDNjAyRURBNjFFMDVGCis6MTA4QUEwMDBBQkRDNTRBNENCMUYxNUYyMTcxNkJDQTRCQUEyN0E4NzZDCis6MTA4QUIwMDBGODZBMDFGMjE1QzhGRjVDQzE1NzBCMzY2REZEMjVDQTc3Cis6MTA4QUMwMDBFOTAyRTRBNzdFOTdGMjI1QzQ5N0ZCRThGOTZCQ0Y4RTA1Cis6MTA4QUQwMDA2MEZDRkQ3REM4Nzc5QUREMDc3OEI5MDlGMzZCNjYwMTA0Cis6MTA4QUUwMDBDMzM4MDg2RjEwRkExQUVBQ0I3OEJEMkY5RkVDMDk2QkQ4Cis6MTA4QUYwMDAzMkEzNUY1Q0FENzI3RjAxRTQyOTE5RkQ4OUVBMDY5MzE4Cis6MTA4QjAwMDBBRjI5NEMzRjJFQzBGQUZDNTA3RDdCN0NCM0JGOUJEODc1Cis6MTA4QjEwMDAyRkFCQjU5MDVEREEyRkYwRDJGNEMwRTYzOEU0OEI2RjVFCis6MTA4QjIwMDA1RkRFN0I2MDMwQzY1OUFGMjk3NkQ0RkI5N0M4QTFDMDAxCis6MTA4QjMwMDA1QjM1RTIyOThFRDY0OUZFNTEzNUUyMjUyRTg0QTczNkQzCis6MTA4QjQwMDA3OTEzN0M1MUNEMzgxRTM0QkM1NDFCMDU5RUI0N0FGMTg4Cis6MTA4QjUwMDBGRTAxQzE4N0YzOThDMEVCQTZFRTVDREU4NTdDMDNDN0ZGCis6MTA4QjYwMDA5MDFERDFENkU3NDk5MENGMEZGQzIwRjhGRUE4NThFNzFBCis6MTA4QjcwMDAzQ0UwMUI2NzNFRjE5N0NCM0M0MEM0RkY1MEY1RURBQkFBCis6MTA4QjgwMDBDRjUyRkU0OEEzQTczNkVGRjgxQzg3QTZBNzVEMUQxMjlCCis6MTA4QjkwMDA0Mjc0NkUzMkIwQUE0OEY5RUFBRjg1REM5OTZDNUNBRkRBCis6MTA4QkEwMDA5Q0FDNERCRDdEMzFFMDZGRUU0QkFBOTM5MDg3QjE1N0UxCis6MTA4QkIwMDBEOEI4MTY0MzUzMkNGOUE3QkY1NkVEQjhBRUQyM0Y1NURGCis6MTA4QkMwMDA4RUM2NzU2QjdDNjdEQUE4MTgxQjcwOUY5MDc1MjBGQ0E5Cis6MTA4QkQwMDA2QkYzMkJFREVDMUVERDgxRjM1RDAwRTdBM0NERjNBNDc5Cis6MTA4QkUwMDAxMjIwN0FGOTVFNTVFQ0RDREY2RDMyNjMxRTUxOTM1MzJGCis6MTA4QkYwMDBGRDdDN0YxMEYzNTVFMzk0QzE0QTFGOUM4RkQzODFGMjEzCis6MTA4QzAwMDBDREMwMEVEMjdDNkNDN0VFQTNGMTdDMjdFRUNCRUMxRDYxCis6MTA4QzEwMDAxQUU3NTM1RkFDMTFEQjdEQ0FCODFFRDBGOEYyQTRDOEM2Cis6MTA4QzIwMDA0QjlDNUNCMTk1RkM2MTZEOUNEODFDQ0U1NzYxRTM3ODgwCis6MTA4QzMwMDAxNjI3NUQzQThFRDZERTk0QzNFN0E1QzlDNUMxMDRDRTFBCis6MTA4QzQwMDBGRkE1Q0JGRjQyRUQzNDNEOEIzRjk4OEZEM0YwQTlFMUQ4Cis6MTA4QzUwMDAyRDRDMkUyNUZDNjhGMkE1Qzk5MzQ2RDc3RjU0QUVEODdCCis6MTA4QzYwMDA5MjhFRTRCN0RFMkZENjREMzJEMjI5NjQxNzkwM0ZEMUQxCis6MTA4QzcwMDBERTU5Q0NGQzFDNUM5OEREMjRCRjY2NjREQTc3NjY0RjU1Cis6MTA4QzgwMDA4NEU3MUE5RUY0Q0Y0MzcxOTUzRDAzRjEzRkQyOTY0QzkxCis6MTA4QzkwMDBGQkU1NkM3OUYyQkU2RTYxRkVEOTI5Q0M3QkExM0U3REVECis6MTA4Q0EwMDA1MUY1OTMzRTY1MjA5NTYxRjY1Q0YzREI2QTE3OEVCNDRGCis6MTA4Q0IwMDAwRjQzRkU3QTQ5QTE3MzQ3OUFGRDg2OUY4N0RBRjgxNDFECis6MTA4Q0MwMDBGQUFCMkE1ODk4OEJGRUM0RUE5QzJDMUFCRjNBQzk3NTk1Cis6MTA4Q0QwMDAxNkRGOUY3NzI2MzgyMkNFMTE4QTVGODY5RTBGQThGMTc1Cis6MTA4Q0UwMDA5ODFGREM5NDI5QzUwRkYzOUFGNzkxOUNDRjY3QzE5NTIzCis6MTA4Q0YwMDAxOEVGNEU3QkUwRkQ4QTgxNDhGRjE3NEQ3NDdFNjE2NjU4Cis6MTA4RDAwMDA1RDI2RDlCRkIzMUI2NkY0QzdEMDc2REE4QTFDODJFNzJBCis6MTA4RDEwMDAzQzdGMjc4NzFGRTA3RUREQjQxNTg1MkY2MDdFRkU1NEUzCis6MTA4RDIwMDA5NDZCMDRGMjc5Q0IxQUM1OEVGMUQ3OTBFNzBCOTdEQ0UwCis6MTA4RDMwMDAwQUY1NDM2MkJCNzZDMEY5OUVEODcwQUE2MjMwQzYxMUFDCis6MTA4RDQwMDA4QjU1OTIxQkQ3ODZDNzI3NjFCREFCNDE3NUUyMTI2NzcxCis6MTA4RDUwMDAzMkZCOTI1QjkxQ0Y4REYxMjQ3N0RBQjlDNjY1MjZDRUNFCis6MTA4RDYwMDA2Rjc3RTY3MEJENzE1QjBFRDcxQkI3MDlGRTJENURCNjQwCis6MTA4RDcwMDAyQzE3Q0YxNUI0M0MwQjc2MEFGN0Q3Q0Q4RUZBMDBDNjY4Cis6MTA4RDgwMDA4MTNCM0IzQkQ3QzMzOEQ1MTBCNjI2MDMzRjlENTFCODM2Cis6MTA4RDkwMDAzRjVFNjU2NjU2RTRBRjQzQTZFMEJEMzhGRjQzRjdDNkM1Cis6MTA4REEwMDBGNkFEQzUwOUE4MTcwN0EwN0NCODQ0REMwNTcxMTQ4RDgxCis6MTA4REIwMDBBQkUxNEIxQjdGQTYxODU3RUI0NzdCRUYyMEZBNTU2OEJBCis6MTA4REMwMDA0N0M0N0NDRjJFN0Y3MTEyRkEwQjY3MzdFNjI0QjAzMDkwCis6MTA4REQwMDBCQzlGQzU3NTAxQkVFNzgwN0U3QzJENDIzQ0I4MzA0NzA0Cis6MTA4REUwMDBDQjRGRjhBOUFDMTI3OUM0NDNBNkJBMzREQ0NGMDVCRjg3Cis6MTA4REYwMDBGRTc0Qjg3RkZFRDVCMzUxNTZFNDRCRjBFQkU1RTcyNkExCis6MTA4RTAwMDA2RTU3QzA5Rjk3OUU4M0ZDNDg3MDVCQkNBNzRFOERGNzQyCis6MTA4RTEwMDA0NEQwNDc1QUE5RjdGNzk3RTdEODIyRkFGQjlBRkM1REE2Cis6MTA4RTIwMDBBMkQ3ODQ3RkRGOTY3N0U5NzY2REU3QkE5QUJENDAxOEJFCis6MTA4RTMwMDAxMDg4NjI3NENFRTBGREIyOTg5RjVFQzdGMzk3QjNFQUU0Cis6MTA4RTQwMDAyQzc2MEJFMEY3MzRDQTE3RUUwQjZFNTZCOUJGNjhFNTA3Cis6MTA4RTUwMDBGMjc2N0E2NzVGM0ZFNjE1NjYxRDY3Q0UwMEMwQjM4RTc3Cis6MTA4RTYwMDBBQTRFMDdCNERGQjdFNjdFM0FERjcxRTczQTg1NzU1NjVBCis6MTA4RTcwMDBDMkUyQUUyN0Q2NEM0MjcxM0JFN0Y0QUM0QzgxRjZFNzM4Cis6MTA4RTgwMDAzNkYyRjMyODUwNkREM0M1NUIwNzUyMUNFREM3NUJGRjZDCis6MTA4RTkwMDBBQzM4NEJDQjNGRTlGMUJGMjkwN0UyQUQxOEY4QzVDOUEzCis6MTA4RUEwMDA5QzMyRkU3OURDQkUxQkQ4QThBOERGQTVGODZGRjY3QTQ1Cis6MTA4RUIwMDAyOEFFRkFBQkI3OEFDQTQxRjVDRjk2QTZDMjNBRkVBNjRCCis6MTA4RUMwMDA5QzdDNjQwOENBNTE2QzNDRTU0RjlBQkQzNUI0MzlGOEI2Cis6MTA4RUQwMDBENzg2RkUxN0M3MDE5RUI2REJFMkVEQTgzRkZFRUE1RDJFCis6MTA4RUUwMDA0Q0NGREJGODQ2RjBFOUQwNEQ4RDZBMkFBM0Y2M0I4NkRECis6MTA4RUYwMDA0MEZCNURCNjc4RENFRTg4QjAwRkM3RTlBQzNGN0Y3MzBFCis6MTA4RjAwMDBGN0MyODE5REYxQjlCNkRFQUY3RkM1RTlERDY2QzczNzJGCis6MTA4RjEwMDBDRTg4NDM3RkI1RjFGNzg5M0IwNjIxOUQ2M0UyRURDODFBCis6MTA4RjIwMDAwQUIzQzUzOTlDMkZENzcyN0Q3NEM2MUFGRjAyRTY1MTY5Cis6MTA4RjMwMDBDRkFDOUJEODA5RTNDMzNCNEQyRDY2MjdGNEVCREM1OTNFCis6MTA4RjQwMDAxOTg3Rjk4MjJGOEM0RDcxNzYyQ0ExN0QwMEU3NjFGNDkxCis6MTA4RjUwMDBBQkE4MDcwNzk3MzNEQTFGMUMxQzMwMzI0NzI2NkRERDlDCis6MTA4RjYwMDAxM0ZGMEM2QTM2RkEzMTZFRkUwNkY3MEREMThFNUY4QzU4Cis6MTA4RjcwMDBFNkZCRjc2MjNGRjBDRTZEM0NDRkQ2OTY1NzExRjk4NUYwCis6MTA4RjgwMDAyMTYyQkQxRDcyMTNCNDdEMjA3QTVFNUFDNDlGN0ZCNUU1Cis6MTA4RjkwMDBFRUY1NzFEOERGRDkwRDI2M0JDRUY3QUYxQjRDRDRGRkQxCis6MTA4RkEwMDA1Qzg4RUYwREMwOEY2NzM2RjJGMzAyNzM3NzQwOUM5Q0FDCis6MTA4RkIwMDA4OTdBNDQyMUZFOUQwQkZDNkI0NUZFNUI2ODcyOTlFMzQ4Cis6MTA4RkMwMDAyRkU1Q0JEMjhEM0NCRTlFNUJBRjUwQkNBREYxRTc1Q0Q0Cis6MTA4RkQwMDA5NzdGMDRFMTVERjBBOTE1RkVGRDBDQTZBMzAzQUI1RjJFCis6MTA4RkUwMDA4OUY4Njg4RjVGRkZEMTdDODAzNTM3NzIzRTQwQ0YwRkE0Cis6MTA4RkYwMDAxQURFMzRCRTA4RjEyOTIzRkVENEU4OUY1MERGNzc1OEVCCis6MTA5MDAwMDAyQUJERTAyMzdDRkE0QTU4MUVGQTBCQ0JDQzJDMEZDRjlBCis6MTA5MDEwMDA0M0Y5MENEMTRFOTRGQjFGQTJFMjdBNjMxRTZBQjE5NTBDCis6MTA5MDIwMDA5N0JGOEM4RTVCOEZFNTBGNTExOTdFOUNGNzBGMDZGQjY3Cis6MTA5MDMwMDA3RThDQjNCQ0I5OTlDNEI3QkY1NDFEMjYwNTdFOUQ5OERDCis6MTA5MDQwMDBENDU0NDY2NkEwRDRFMDMyQTAxRDVDNjYyMTNEQTJENzcwCis6MTA5MDUwMDA0MzM5QjkyMjBGOThDQkE4MUM5NkNCQ0Y4OTlCNTgwRENBCis6MTA5MDYwMDBGOTE3NUEwOUZFNDAzQUZBMkY5NTMxMDkxN0YwMjg3OTc1Cis6MTA5MDcwMDBCRjE3M0E0RkM0RkRERUNBMjEwOUY3NjY4M0U3MzlGODA2Cis6MTA5MDgwMDA4NUY0ODk0NkUwRjNDQUZFMDk5QkIzMDAyRUNFNERFMzdBCis6MTA5MDkwMDA3MDlGODQ0MjEzQzBCNUI1MTkxM0NCQTBGRDJEQjkyRTE2Cis6MTA5MEEwMDA2NzZFRDgzODVBQkZGMEJDM0YzRTFGOTlFMjE5OTA4QkNCCis6MTA5MEIwMDBGNkRGNkM1Qjg1NzZFMDZGNEFDQjAyODMxQTZBN0Y0NEU5Cis6MTA5MEMwMDA2MTlGNkU1NzQyNzA5Mzg5NjVBMEJGM0RBQzZERkU5MTY0Cis6MTA5MEQwMDBDQjU1QjlBRTFCNzIyMzNDOUZDRUQ4MEFDQzRCNENGNzc0Cis6MTA5MEUwMDBCRDc5NEMyMTdEQzZEQzU2QTBFNzc4QzE3RkQzQURCNkYzCis6MTA5MEYwMDAwMEU5Qjk1NUE2RTYzNkZFQzg0MjNEMTU2RjQ0QkE4RjYxCis6MTA5MTAwMDAxMzY0MUY2RjBDMzRFMkZCM0REODcyRkI5NzU2NzIxNTQ3Cis6MTA5MTEwMDBEN0ZEOUNEOEJFRkUwNzQxNjU1RjZBRkRDMUZBRkU2NkI5Cis6MTA5MTIwMDA4MkY1MDI1RDE1MTdEMDFBNDQ0QzAxMjQ0RjA1N0RBNzI2Cis6MTA5MTMwMDBFQzc4RjM0N0VDNzc5OThGMzU0NTExMURBNkRBOTEwRjNFCis6MTA5MTQwMDAxNUU2MzFGQzBDRTVGQzE4RTA4QjNFNTgwMjNGNDBCQkI1Cis6MTA5MTUwMDA0NTlCQkZERDg3NjIzMTQ3RjNCMzNDNDVFNDJGREU2M0I3Cis6MTA5MTYwMDBFN0VCNjE5RUMxQzRBRkY3MEE3RUZEQ0FDQjZBMzA1NUZBCis6MTA5MTcwMDAzNDNFMTg4Q0MzQTNCMENERTMwMkI5QTgxRkNBNTU0RjIzCis6MTA5MTgwMDAxNUQyRTFBQjc1Q0JEMjE2MDFGRjdDRkI5QUM1MzkxNjFGCis6MTA5MTkwMDBEQTlGRjFCRjFFODc3Njc1OUVGMEY3RDk0NTM1NzAwM0NCCis6MTA5MUEwMDBENDFGQ0NFQ0IxN0U3NTE4N0YyRENDRTU3NkJGMzkzMzVBCis6MTA5MUIwMDA5MDcxMUZFQTk5NEMxRUFGQjI4QjdCMzNFRTgzRjZFNUJDCis6MTA5MUMwMDA1OUEzMEE1NzEzMTY1Qzc3RTc4NkVENEY4RTMzNDYzRTU4Cis6MTA5MUQwMDBCRjMxMjk4REZCRUI2QzAzQjdDNzE2MjNGM0M1MjY1MEFGCis6MTA5MUUwMDBDOUUyMDA0RkEzNjAyRTQ1NzgyRTE1NjA5NUY2RjNGRDc5Cis6MTA5MUYwMDBENDFFREJDNUExNUZFMzk4OTFDQ0Y3N0I5ODFCRjU5NjU1Cis6MTA5MjAwMDA0NjVGOEQ2RTk3RDAxM0E2OEM3RUJEQzFDQTRDQjhERTZBCis6MTA5MjEwMDAxRTZDOUQxREVEOTM0NkQ3QUY4NDNDN0U2NUU1NzIzODhDCis6MTA5MjIwMDA1Q0I1OTE5RTVBQjQ5OUU3RjUxNjI5NUNERjJFREFBOTUwCis6MTA5MjMwMDBGMEZDRTYyNUY2NzZGMzRBRDRDOTU1RUI2NjkwM0VEM0FBCis6MTA5MjQwMDBGNDk4MDNGRTIxN0ZDREI1QkJFMzAzOEU3RkMwRUVBRTY1Cis6MTA5MjUwMDAyQkJEMkE3REI2NUVEMzY3N0Q1OTVGRTRCRjJCRjk0QkVBCis6MTA5MjYwMDA5QTFFMDNGMkJDOThEQkYxMUFFODg1Mjg4Mzc1Q0YxNkE1Cis6MTA5MjcwMDA3MzFDQUU0RTc1MTgxMTJGMURBRDRFRDRFNzhCOUVDRUNDCis6MTA5MjgwMDAyNjNCQzkyRUFFNjVFMUVERDhCQTQ0RTJERjk1OTkyQUI2Cis6MTA5MjkwMDBEMUI1QTIyMTk1MzlFMEQxOUMwNjg1Q0VDOThFNkQ0ODA1Cis6MTA5MkEwMDAyNDM4QUUzNTg1RTA4QTNGNzQyRUMxNzVCN0VEODNGRTU0Cis6MTA5MkIwMDBBMTNCQzE2NzVGNzhCQkMwQzNGMzM0NTZFQ0RGQ0RCNENDCis6MTA5MkMwMDA3OUU0RDdBM0ZEMzk2NzgzNzkwMDlFRERCNjU1OTQ3NzlECis6MTA5MkQwMDA3NEIzQjY3ODQ4Rjk1OTQxMThCODA2RTVDRTY1RjI3MTBECis6MTA5MkUwMDBGQTU4NkI0OUZFQzVCQTE2MDlCOTVBNzQ4OERCRUI0NUMyCis6MTA5MkYwMDBDM0Y4N0VBMUQxRDcyMzFFRTk2RjNBQTgzMjNGQzAzNzA5Cis6MTA5MzAwMDAxRDUyMEIwM0QwNzQ5OUQwRTc5NjY0MDM3Mzg0RDEyRDVBCis6MTA5MzEwMDBDQTExQ0QxQzYxRjQ2MTNFNTcxMEUzQURDOTgyNUZFRTA2Cis6MTA5MzIwMDA4RkUyN0EzRjI2MkY0MTZBMzdEOTM2OEJGODI3OTgzMTVBCis6MTA5MzMwMDBFMjIwQUUzN0Q2RDk0NUVBOTc3OUI4N0ZBQ0YxRDUyNDhCCis6MTA5MzQwMDA5MTM3MUZDNzVBOTZBMzlEQkM2OTMyRDQ4N0Y1NjcyQTA3Cis6MTA5MzUwMDBGRThFRUM4NkE5NThGNkFCMDEyRkE3MkZDNzRGQ0QxQTZBCis6MTA5MzYwMDAzRkY1NjAzRDg4OUY3NEY4MDFGOTIwN0I3RkVFMjhCRkIwCis6MTA5MzcwMDA3RjAyNUVDOTZGOEIwMTlFNzREMEM0RkM1MEJGNDJFMDc3Cis6MTA5MzgwMDAwNUZENTY4QzdGQ0VCOTYyNDk2RTM0QkUwQkEyREQwMzVCCis6MTA5MzkwMDAzRDE3NUYyNEUzQUQ4MzRCQzY1QjYyQjk4QzlGOEU2RTM1Cis6MTA5M0EwMDAxOTFGOUQyNzY3NDlGNTI5OUU5RTUyN0Q2QTU1M0YwOUUxCis6MTA5M0IwMDA0RUFGMTkyQ0I1RUZCQUI4NDQ4MjMzN0RBM0E1RjZEOUM4Cis6MTA5M0MwMDBBQjI2NDg3MDRFRERBRDUyRkJFRTZCQTc0QkY1M0RGQzc2Cis6MTA5M0QwMDA3M0E1RkFFQjM2MkU5MkUwNUVGNUJGOTZEQUY3Njk1ODgwCis6MTA5M0UwMDAyQUQ1RjcwREFDOTZFQUZCMUY3QzRDODIwQjgzNEY0OUM0Cis6MTA5M0YwMDBFRDA3MUU1QjJGRDUwRjZBRkFBMzU0M0ZFNENDNkIxMjI2Cis6MTA5NDAwMDAzQ0I0RTUwREE5RkQwREFEN0IyNDc4MTg3QjVCNkE1RjRDCis6MTA5NDEwMDA2QTdENUY4Mjg3REIzRjkxREE4RjRDM0UyNUQ1OEY3MjY0Cis6MTA5NDIwMDA3QzIzRDU4RkM5RkI1RTgyNTcwODNGQTdDMkY5NUZEMjY0Cis6MTA5NDMwMDA3QjQxODhEODkwOEY3M0QyM0M0M0JCNTNERUU3OEMxMUJECis6MTA5NDQwMDBFNUVGRDg2RDBBNEJDNEY4RTdFMDQ0M0JDOUZEMzVDNkVCCis6MTA5NDUwMDA4MUMzQkI4QjM4NDRGMEYxMDU2NkJCMURDRkIzNUY0OUI4Cis6MTA5NDYwMDAyRjY2QTMzRjUxODg3QzNFOTZFRTU1OURBQkU3RjkwRUUzCis6MTA5NDcwMDBCRDVERDdGQ0I5NzgzMENCQzZCMDcxM0JCOEFDMTBEMDZECis6MTA5NDgwMDA4N0UwQzQ3MkJCMDQ3Nzc0Mjc0QkVEM0I0Rjc2NDhGNUY5Cis6MTA5NDkwMDAyOTlFM0NBOTNFQjVDQTI5QzFFOTM1NDU1MkZCQUU4QjkwCis6MTA5NEEwMDA1RDEyOUNFOTJCOTdEQTY3QUY3MjRCNzA0RURENjRBOUIxCis6MTA5NEIwMDA3REY3QjUxRUE5QkU4N0JGNEFBQUJGNkU2MzhEMDRGN0FDCis6MTA5NEMwMDBBQTVGMkNCNUVGRDNFMDkzRUFGQjA2NTY0OUY1RkQwRkYyCis6MTA5NEQwMDBENjQ5NzA2MTcwQURENDdFRTAzMUJGNTQzRkE4NjlBMzE2Cis6MTA5NEUwMDA1NDNGRTQ0Q0JEMDQwRjZENjk5MERBREZEMDFBOTBFMDcwCis6MTA5NEYwMDA2MUVDOTBENEJFRDQ3QTQ0ODI4N0RCM0Y5MkRBOEY0QzAxCis6MTA5NTAwMDAzRTI5RDU4RjcyOUM5NUVBRTc3REUzMENEMEJFRDQ3NkQ4Cis6MTA5NTEwMDA3RURGNTVGM0U3QzZFNDdEMjdCNTMzMjU4MUJGOEZGOTlDCis6MTA5NTIwMDA2RjE2RURDNEYzRkVFREY5Rjk5QTFGNThFMUZDNTExQURDCis6MTA5NTMwMDBGNzA3MDNGN0NGNUZFQTlFMjVGQzdGRUUyNzJFRjNCOUVFCis6MTA5NTQwMDBFOTdDNUUwMjFFNzgwNTM5ODlGNzI5QzQ3RjE4NjI0RENGCis6MTA5NTUwMDBBNTdDNjQxMkVENUI5MEM5NzRFMDc5MzdGMDgzMDA0ODE0Cis6MTA5NTYwMDAzMDY0NjY2MjFDMTIxM0YyNjNEMzdFRUU3RkY1N0VFQ0VDCis6MTA5NTcwMDAxQjEwRTNBMDVGN0RCNkJCRTdDRjI4OTc3M0VCNUYxREExCis6MTA5NTgwMDA4MTcxQ0UxQ0U2NUI4OUYzMDBCQjFCOEZGQjU4RUY0NjU1Cis6MTA5NTkwMDBDOUY5MjhBRDFDNjUwNTNDODY4RDc3MjhBQTJFQURERjVDCis6MTA5NUEwMDA2NUU0Nzc5NEI1OTlEQUI3RjUyQkYyNTUwQUFDNkY1MUFCCis6MTA5NUIwMDA1OEZGOEY0MEZDNjUwNDM5QURGMzgyOUM0MUEwRkQ5OEIzCis6MTA5NUMwMDBENzRFRjAxM0RFNjQ4MjlGRjQzQUE4NUNFQkNEQTNGMjkxCis6MTA5NUQwMDAyOUFGOTNFQUQ3Nzk4QjA4N0VDNkVCMjJEOEVGMkRBNzY3Cis6MTA5NUUwMDA3MkJERDc0RENGMzc3ODI3MTNGQzgyRDc0M0U1NDY2RjNFCis6MTA5NUYwMDAxNTk1N0ZGNEQ2NTBGRDRCREVDNTA0QkZFMkY1NTE1OUY5Cis6MTA5NjAwMDBFRjVENDVDRjVGRjNENjExQkNDOUJCOTZFMDJENUUzRjQxCis6MTA5NjEwMDA5NTBEREU4RDU0QkVFMUFEQTdGQTFEREUwNjgyNzc3OTg5Cis6MTA5NjIwMDAwMzA0MDdCQzA3MDlERUUzMEQxMkJDQ0Y3QjhDRTAwMzBCCis6MTA5NjMwMDBERTI2MkEwRjdBQ0Y1MEY5OTZCNzg1RUFERkYxQjYxMjA3Cis6MTA5NjQwMDBEQzJDRjYxM0JFRUFBRTQ4RjcxODM1OThCMTMyRTIwN0MzCis6MTA5NjUwMDBDREZGMUQ4NzcxMEYzMjQ3OTFFOUFGNTJEQ0EzOEIzRkRECis6MTA5NjYwMDBGNEY0Rjg1QThDNjMyQTAxRjcxN0ZEOUYyRUI5RUI5NzkzCis6MTA5NjcwMDA4NUM1MDVERjhCRjFFRThGNjZCRTI4OTA4NzVBMDNDRjM0Cis6MTA5NjgwMDAwQkQ0MjYzMEJBMUZDNjg0N0YzRTVCRjAyNTRCRTI3RUFBCis6MTA5NjkwMDBGOTJDMzFBRkQ5NDIwRTBBOTEzRkYzODgzRkRGQjk5NkRBCis6MTA5NkEwMDAzODRCOEJCN0VEMTkxRTM1MEZGOTMzRERFMEEzQkM4M0MyCis6MTA5NkIwMDA4RERGQzNFRjlGRTEzMUU3ODExQzlEQUJCOUYzMDA4REQ2Cis6MTA5NkMwMDA2Nzc3RTZFMjIwMTU5NjQwQzc5QjMxOUY3NDQ4QTUzQzFBCis6MTA5NkQwMDA2QzdCRTM1NThCN0IxMkVERDZFRjNBOUI4NkY2QThGQ0FDCis6MTA5NkUwMDBFRjJBRTVFQkRGMzVDNTRFQzY3QzRCNzIxRUM3NEI3MkM5Cis6MTA5NkYwMDA5RTQxMkE3NzY0QjgzQkUzM0NCRkNBQTk3OUUxNkUyNTU1Cis6MTA5NzAwMDA3NEZGN0YzQzg2RTYyMEU3OTVDQzYxQTI3M0I4Q0NCNUE4Cis6MTA5NzEwMDAxRkFGREVEQzA0MEUxRkMyMzczMzFGOTUyNUU5MUUwNzdECis6MTA5NzIwMDBCRTdGMEIwNDE4MDg3QjA2NUIzMjIyQUQ0NzNGOUY5RTJECis6MTA5NzMwMDA3OURDN0ZFRjk5Njc5MENBOEYzMkRDM0QxMDNGQTc3M0M5Cis6MTA5NzQwMDA1Q0QyN0NFMkJBM0FDNDdEOUM5NjY3NzA1RUZGQjFGMzRFCis6MTA5NzUwMDBCQjJGOTVFQzEwQkVCNUZDQzZDQTYxRTI5Q0Q2NDI0NTUzCis6MTA5NzYwMDBEQjA3RTc3RUEyOTU2OTdFMjJENTRGQkQ5N0U3N0IzNDY0Cis6MTA5NzcwMDA3Qjc5QkNBREU0RkFGMDVDOEQ4OUY0RTY1NDI1REE4OTk2Cis6MTA5NzgwMDBGRUY2Qjk5QTdCRkJFMDdFRTE2RDEwRUZFMUZFQTlBNjQzCis6MTA5NzkwMDA0N0E3MDI2QzAwNzgyQUUzRTcyRUE2MUU4RjI1M0VEMzRBCis6MTA5N0EwMDBFQjU3Nzg4RkUxN0VERjU0RjAzRjMxN0U1NEJBRjI3Qzg0Cis6MTA5N0IwMDBDQUJCRUVFRjRDRDgyRjRCNkFBMTdCQUJDMDM3QTM3MTZECis6MTA5N0MwMDBGRDczMDdBOUY0RkQ4Njc3MERGRTVDNDUyNTdFMzEyQkUwCis6MTA5N0QwMDAzMEZGRDk0OUMwMkYxMUZDMDU4RDJGMTY4ODdCMzlEQTRGCis6MTA5N0UwMDA3M0UwQjcxQjkxM0U3RkREMzYzMDhGRjY2OTc2MEQ3MkUwCis6MTA5N0YwMDAyMDNFOTcxOUY4QkQzQURGNUIyQTNGOTc4MUE5N0MzQzUwCis6MTA5ODAwMDAzNzEyOUZGRjJDREQyRjQwRTcwMkU5MzcyODk2RUUxNzJECis6MTA5ODEwMDAzNEFBNkNGMUFCMTFGNEU5QkQ4MjhFRUYyNjlCQ0FGRDMwCis6MTA5ODIwMDBENEFGQkNBRkI4NDBEMDc1ODE2ODU3QjFFNzUwM0FERUNECis6MTA5ODMwMDAxQjVDNzBEMDQ0NzExMTJCNjhDQTc3NDczODU3NTVCREVGCis6MTA5ODQwMDBGOEMxNUY3NDBCRTNGM0VBODY5M0ZDM0MxNjZCQ0EwRjE2Cis6MTA5ODUwMDAzRjg3RjVCMEUwNkI4REJGNTQ3M0FDRTc1OTVCRjhGQzA0Cis6MTA5ODYwMDBGOEY4QzBFN0Y3MDgzRUZGMTJGREZFNzExNjQ3RkNDRDgxCis6MTA5ODcwMDBGMDZBMTNBMDI2MDBBNUU3REZFQzc0OUU0RjNCRDczN0I0Cis6MTA5ODgwMDA5M0I5QTk5QzBERTQ0NkJFNzZGQkQ2RDBCREZBQjlBQzFGCis6MTA5ODkwMDA5RTlFMkYyODlBOTE4MTcwMzU2QjI5NEI4NkZFNkU1QUI5Cis6MTA5OEEwMDA1NUJCM0YxOTY2MzdCMTZFQ0Q3MENDNzM0RkYwNEZEQkFGCis6MTA5OEIwMDA4RjY1RTUwNkU1NEI5RjgzRTQ2NDA1OEVERkE0RDRBQzk5Cis6MTA5OEMwMDBFODAyRTNEREZBRDJCMDE1OTg0NzFFQTc3MjNBQjBCN0E2Cis6MTA5OEQwMDAzOTFEODA5RjVDNkFDMkE1RUIwM0I5Nzg0OEM4MDVDREU1Cis6MTA5OEUwMDA1RjkzOEJBOTRCOTk0QjQ5MEFERDAzNjk5MzkzQTJCQjA0Cis6MTA5OEYwMDAzRTRCQzUzRDE2NjMwQjlENDNBOURFNjU0OUMwRkNDOUJGCis6MTA5OTAwMDA1Q0M2RUQ3NjI4MEZDNEVEQjUyNjA3NUY5QjM4RERCRjNBCis6MTA5OTEwMDA3RTU5QTE3QjM2NUYyQjhDQkVFN0QwOUVERkEwRjk5RkRFCis6MTA5OTIwMDAyMDdGNUNFRTNFOERFMUZDQUY4QUJDNUU4NjI3Qjk1RjhFCis6MTA5OTMwMDA3NkM4M0U3RjZERjAwRjg4Q0IyNkZCQkQxMUQ3NjMyQTFBCis6MTA5OTQwMDBGMTNDRDQxN0NGRUJCREEyMzg5N0MxNUNCRUVFRTBDRjlGCis6MTA5OTUwMDBFMEU3MDREQUVDMDBGQjM5MjY5NDI3N0NDNEM0RjM3NkY0Cis6MTA5OTYwMDA3QTdGNTc1QjQ3N0JGM0I0OTg5OTBGRjdCMzk0QTIwM0MwCis6MTA5OTcwMDAzRkEyMUY3MkU5N0MzREM5MDMwMDJGQ0I5MDQ0OTg5NzBBCis6MTA5OTgwMDAyQzcxM0IyMkNENjNCOTE4RkZFMDRGM0MxRUY3QTUzMzg1Cis6MTA5OTkwMDAzQTE3QTRDN0E3NjJFN0UzQjQ5NzVGQjU0NEYzRjk2ODQxCis6MTA5OUEwMDA3NjRBOUJFN0E1RjNFMkY0N0EzRjJGOTNFOEFBQ0QwRjFFCis6MTA5OUIwMDAzNDQ1OUUxREM2MzcxQUEzOUQyOEFGOTU0NkNGN0I4ODk4Cis6MTA5OUMwMDA0RjJERkZBNkM1QzUwNzMzQkYyMjdCQzAyRTJFNEJFMzBDCis6MTA5OUQwMDBFNzhGMDNFREQ5RTFFNkI2NzgzQzJCNjQyN0I1M0MxNjVBCis6MTA5OUUwMDAyQjhFOUM4Rjc0NUJFREE0QkYyNjMwMjdEOThCMUVFQzg5Cis6MTA5OUYwMDBCODg2MkZDQTYzQTlCODQzNDg3OTVFMEZBREMzODJGQTBGCis6MTA5QTAwMDAxQUNBMjhDQ0EzOTBCREY0OTM3Q0M2RTBCQzY4NUQ0MTIzCis6MTA5QTEwMDBDQzg4QjAzNTMxNzE4NDg3QzFDNzE4RTlFOUMxQjgwNjZGCis6MTA5QTIwMDA1OEVGQ0U5M0NDOEZFN0E5MUEyRjRDMkE4RDg1RkE5RDNCCis6MTA5QTMwMDBERjFBMjkwRUZBNkRDQzJCQTlGODFEODk5RDY3M0Y0Q0MyCis6MTA5QTQwMDBDNTdDNEZFRDg1MkQwNDBGNjgxRTcxOTZFN0NGOEU0RkI0Cis6MTA5QTUwMDBDMUZFQjY5RjM3M0IyQ0U0MDcyQzI0M0M2ODc5Q0FFRDQ1Cis6MTA5QTYwMDA4QzM5NzExRkI0RTgyMzFCREQzMzJFM0M1QTFGNDM3ODE5Cis6MTA5QTcwMDAxMzc5QjU2MkIxRUVFMkYzM0MxRkIyMEI4MTQxMTAwN0RFCis6MTA5QTgwMDBCNDk4NTkyMENDNUYzNkQ5NjVCODg4ODVDMTk5MzgyNEY3Cis6MTA5QTkwMDBDMDYxNzk4RTZCOEQxRjYzN0I4ODNDQzg0MDM2MzAzQzNCCis6MTA5QUEwMDBBRkM2NUExMzIyREVBN0QyRUYyMzE2Mjg3Q0RFNjdGMjU4Cis6MTA5QUIwMDBEQzlEN0E1MEZFNkM4MkNBRjFGRDc3MTVGMTc1ODNDRDdECis6MTA5QUMwMDA5RjgyRkU2REUzOUMxNzUyRDBERkZENkRDQ0RGMDk4RkM2Cis6MTA5QUQwMDA0RkZENjQ0RTQxQkNENjBERkIwRkIyMjM3NUYwNkUxMEU2Cis6MTA5QUUwMDBFMzVGQTMzRjhBNTFGRTZCM0VFNUQ3NkUxMDc2RjZBOTgxCis6MTA5QUYwMDA4QjlGQjM2NEMwNjc1RDExMjNGQkM5ODQxREQ2RUFFQjVECis6MTA5QjAwMDAyRTlFQUI0MjdBNUUyOEI2M0E1MDJGRTQ4QTdDNjhFREVFCis6MTA5QjEwMDBGNUZGOTlEQzE0ODY4RjlERTA1NzA3ODBDMERCQzFBRjRECis6MTA5QjIwMDAwRTgwRUZCRjBERkM2QTg0RjFERTI5OTY5QkMxQUZDNkEzCis6MTA5QjMwMDBEMjBGN0UzNTk2Q0Y4MDVGOERFREQwQUZDNkYyMjlGMDgzCis6MTA5QjQwMDBBQkIxNUMwQjdFMzU5NjRGODI1RjhERUQ5RTAwQkYxQUU4Cis6MTA5QjUwMDBDQkM3QzBBRkM2RTc3NTE3QTc5N0QyN0M4RTMxQkE1RjY3Cis6MTA5QjYwMDBCRjM0MjZDRTgwRkExNUU2MUY4RDc5QTFDM0FFN0VEMTEzCis6MTA5QjcwMDA4ODhGRUJDRjFCMjRGQTE2Mzc0NzRCRjBFMEQzMDkyMTJGCis6MTA5QjgwMDBGQTIyRkQ4Rjc3OTFFQTA3MUNDRDkyRUEzMzdEM0QyNUJECis6MTA5QjkwMDBCOEVCRTI3RTEyOENGOUExRjBGNzUzQUI0QTI0MzhDNTNBCis6MTA5QkEwMDAzMzVBNkFERjc5RjIwNDA5RUVFOEJFNTU2QTlGNTgzRURGCis6MTA5QkIwMDA1REFBN0YzNDRFNDc0N0ZGM0M4MzRDNDdGRTdEODUwQkIzCis6MTA5QkMwMDBDNTM2M0E1RkQ5MUU5RjNFMjZFOEEyQzE4RkZGNEE5RDQ3Cis6MTA5QkQwMDAxQzI5NkY3QjU3MEY4MzE0MEY3NDExNzNCQkJCODc4M0QyCis6MTA5QkUwMDA5RUVGM0IzMUYwQzVEQzAyQTQ4NzgxNkY5QkJBNUE2MkJECis6MTA5QkYwMDBCQTAxNUQ3MjFGMzczMDNDNTc0ODI3MEU2MDdFNzZGMTAwCis6MTA5QzAwMDBERUUzMjVFNzYyOTAyRkY3NTY5OEEzOTAzRUJCNUQyNUQzCis6MTA5QzEwMDBEMTA4MkZBRDMwQTc4NEYzNTE1REE2QTcxRkRENTNGMDA3Cis6MTA5QzIwMDBGMEY1NjlFRjNGNUEzMkUxQjJGQkU4OEYyMUZGNzVCRkQzCis6MTA5QzMwMDA0Q0ZERThCOTU5MjgwRjk3RTA5MTU1RDE3RTZEMDg4RkZBCis6MTA5QzQwMDAxM0U4RkI0RUNDNTMyNUNENUYyRjE3MEMzN0U5NTM3MDJCCis6MTA5QzUwMDA1Q0FCOEM0RjU3RDYwMzg4ODdBNzlFMzBEMjM5QUNCNjAxCis6MTA5QzYwMDBGRUM0RkI1QTdGQzNENThCMzE0REY5OTdDRTdGQjc4QjlFCis6MTA5QzcwMDBCNzA3RkYzNzBBRjEwMjYzNDlGMzRCNzAzQTg2MjE3RTNBCis6MTA5QzgwMDA3RTI3RTRFRDVGODVCQ0ZENTZEMDE1RTM1ODg0OTk5RDkxCis6MTA5QzkwMDBCRkE3RDFBREFFRUFCMTUxQjkyODM3NDU3QzVFRUI2RkI1Cis6MTA5Q0EwMDA3QzRDNDE3NTkzQzg5Q0I1RjYzMEJDM0UyMUU2RjE4Q0U2Cis6MTA5Q0IwMDA1OEQ3M0FFQzE3RTA4RTM3QkExNEM0NUZDNjYyQjc4MjQxCis6MTA5Q0MwMDBGMkQ2NzU0OTEzQzE0RjA5Rjk0RUFCNjlBMUU3RTlGNzFGCis6MTA5Q0QwMDAwNEE4RUM1MjE1QTRGQUUxRUE0QkI0OEUzNjNDMzg2NTgwCis6MTA5Q0UwMDAzQ0VBRTlFNDE3RUJEMUZBMERCREZGREEyMUU0QjcwQjRBCis6MTA5Q0YwMDAyRTNFRkYzODlGQ0Q4NUY2MjJDRTY3NzdGMkQyMjE0QURECis6MTA5RDAwMDBBNzEzRjU3RTlDQ0YyNUUwOUE3Qzg0Qjc4OTc1QzVGOUE5Cis6MTA5RDEwMDA3QzA0RkJDNUJBRUFBQTkyMEVCREUwMDg4REM3MUNENTJCCis6MTA5RDIwMDA4NjcwN0JEMzFFM0Y2RDE1RjhERjJDRjBBNDdGNkY5QkYwCis6MTA5RDMwMDBBOUE2QkYzRDgyNUM2OUE1NjY0RjhCOEUxQjc0N0EyN0VFCis6MTA5RDQwMDA1QTkyRkI0M0Y4MEJCNzAzN0ZFOTgxRjJFODczQUI2MkU5Cis6MTA5RDUwMDBGRjhBRjAzOEIxMkQ1RTlBNEFGQ0I0MjZFNkY2QjczMTk4Cis6MTA5RDYwMDBERUJFRjFBOENBQjhCRDFEQjcxRkY1RTVGQkEzMkM2NDg0Cis6MTA5RDcwMDA0RjFCNDc4RDRDMEZFN0JCMDZCMThFQUQwMkVGODM3Q0M2Cis6MTA5RDgwMDBBRTEzRjc0MEZCMzE2RTBCRTVFMzA3MzI1N0ZBQkREMDU3Cis6MTA5RDkwMDBERkU4QjFBQTMzMDBGRDFENkRCMzI3RUUxODdFREU4MTJBCis6MTA5REEwMDBEQjkzMDk2MjBEN0JDNjRFN0MxMEM3N0ZGRjI4RTgwNTU4Cis6MTA5REIwMDA0NzY4OUU1QUZERTZGMjg5NjM3QTIxMUQ4MzlDOEVFREU5Cis6MTA5REMwMDBFMUU3NEQ0MUFGRkQ2MjVFN0IwNUJEMUEwNTdGRUYxNkYxCis6MTA5REQwMDBGNjY0QTdCMDI3REJEMTlFNTg5MENFNDU2MjNEREM5RTRECis6MTA5REUwMDA2QzE2RjYyNDg4RjYwNENBNzc4NTNENzkwN0VEMDk5NDQ4Cis6MTA5REYwMDAwNUEzQjJDQjQ4NkZFMjI1MzZCMjI3MTBBMEQwNzk4MkY2Cis6MTA5RTAwMDAwNUQyQkFCNDc5OTVBN0E5MTJCRDQ2MjRDNTQ4RjQyQTRCCis6MTA5RTEwMDBCMzI1NEFGNTI1QzY1NDA5NzY1RENDOTJFMEVCQ0ZGNzIxCis6MTA5RTIwMDBENEQ5MjlEOUFFMEMzRTNENTg2N0E3NEEyNDc4QzBEMTcxCis6MTA5RTMwMDBEMUQyRkI5NUFFODk1MkZERjhBMjI5NTI3RDg1NzM4NjU5Cis6MTA5RTQwMDA1NENGQzQ3RTE4REZBMjgzMzI3QTlENEE3MUFFRDg3NzkwCis6MTA5RTUwMDBEMkZDQTlGN0NCNTVEQUI3MTlGNDgxRUEwQzk3REI0MkFCCis6MTA5RTYwMDBENkI2NEY2NkMwN0QzMjcwNUYxQzQ2QURCRjJDQTk5RTMyCis6MTA5RTcwMDBGQ0E4QTMyNjc3MkE5RURGQUJBRDA0M0U4NEIyRjgyODY3Cis6MTA5RTgwMDBGODY5OTQ3QzA0QkUwNkJGQjdEMDNEOTJGQzQwRjA5N0MxCis6MTA5RTkwMDBGQTEzMUQ1QUY4N0U5M0I2NkYzNTQ4QjdGRjM0M0E1RjEwCis6MTA5RUEwMDBERTlGMkFCQ0MyRkU5NEFCNjczQjdFNTlCN0M0QUJGMkJGCis6MTA5RUIwMDBDQjQwQkVDOEZGRkE2RENDRUQ3QjkxNkZCNjdEMDQ3RUMyCis6MTA5RUMwMDAyQUZBQjkxRkZEODJGQzJGQ0Q2RkRCRkFDNTJGQzhCRjYwCis6MTA5RUQwMDBERERBMjYyRjFFNDk1RTBBODVEQzZFMzk5QUQ1RDAwNDVDCis6MTA5RUUwMDBGMkI2Mzk1OTcxMEE1NDkzQkMxNDY5RjJEMjI0RjQ2NjVCCis6MTA5RUYwMDA3OTM1M0QxRjIwREVEQjZBNzJDN0EwRkZCN0Y5RDg1MjYzCis6MTA5RjAwMDBEMTZGOTgxRTIxN0YzRDRDOEY2MDFDQzkxMkU0RkFFNDhBCis6MTA5RjEwMDBENDUwN0QxNjI3NTY3ODdCQzY3QUVBRkFFQkE3ODMwN0RBCis6MTA5RjIwMDBFQkRBOTdFOEUwRDFCQUY2MTM3NEYwQURCQUY2RDNBNTQwCis6MTA5RjMwMDBGQTA2NThGN0U1RkNFRENENDIzRjY4RUQwQThENkVENTg3Cis6MTA5RjQwMDAxOTQxREYwRTM4MkFFQjU3RTZBRTk2Q0UzRDM0OUU5ODg3Cis6MTA5RjUwMDA0NTdBNzNDQkYxOTUwMjhGNTUxMjdERjY2OEUzMUMwNUE3Cis6MTA5RjYwMDAzQ0U3NUZGQTdFODlEMTE3RDMxQkY4QTBFNDk4RDE1OTVBCis6MTA5RjcwMDBFQjA4RDE0RkEzMTNDMzc4MzhBQ0JGNTJBQjJBQzk1RkVCCis6MTA5RjgwMDBDMzMxNEVERkY2RDZCOTRCRThFNzFEQzJDRUJDQTFGMzE0Cis6MTA5RjkwMDBERkQ0OUZDRUJGM0YxRUY4Njc0QjkzODFFMkFCMkQ0N0M2Cis6MTA5RkEwMDAyNzI0NjI3RkJCMkZDRUE0RjkzNjFDMzNEMDNEQjIxN0Q1Cis6MTA5RkIwMDA3QjhFQkZBOUI2NUI2ODdFREE3QzBBM0Y1ODFBODNGQkFBCis6MTA5RkMwMDBBQzE3OUEwQ0E0RkYwQTRERUU0NDdCMDRCQ0VCRjlBQjMyCis6MTA5RkQwMDBCRDdFMzVCRTA1MDcyQTExRjFCMjFCRUMxMDlEMUIxNjg0Cis6MTA5RkUwMDBGQTU0QzNDQjlFMTM0RjEyREVCNzFENUI5NDg4NzhCRjIzCis6MTA5RkYwMDBBMUQ1MjBFMTY1Njg4QkVDQUYwRjM5OTMyMEMxMDM0RkU5Cis6MTBBMDAwMDA3MjdGMTBFQ0FFODRERjJCQ0Q1QjJGMTdCODMzMjJDM0U5Cis6MTBBMDEwMDA1REU0RjY1N0U5MEY2QzE3NzREQTI2RThCNDNEQ0EzOUU3Cis6MTBBMDIwMDAzOUQyQkVDNkI2NEZDRDU1RTFERjU1MzhEMzkzRTdEQjA1Cis6MTBBMDMwMDBDRUY0RTRGOUFGQ0Q0MDQ3RDRCMzE3NEUxQjQ4Q0YwRTUyCis6MTBBMDQwMDBCMUQ3QUIzNTExRTg1MURDNkNEMEQ5MDlEOTZGQjhENjhFCis6MTBBMDUwMDA3OEY1NTQzQjdBQjFCREY3MzVCRDU4QTI3RDNGMjU3OEUwCis6MTBBMDYwMDA2M0M0RjNCMTIxM0E4ODczOTUzQTdDNkE3RUY0OTVFOTJBCis6MTBBMDcwMDBBNjlENDdEN0QxQUY5REY3NDNGREY4RjRGMTM0QkIwRTUxCis6MTBBMDgwMDBGQjY5QUEyNDdCQjMyNkU2NURBMUNGREYyNTdERkVERTNBCis6MTBBMDkwMDA4RjQyOUZGRkQ4ODlGQ0E0MjNBMzNBQTdBMzFDMUQ2OTY0Cis6MTBBMEEwMDBEM0UzMkMzNjVDOEY2QkU3MjE4M0NERUZDNTg0RkJGOUJFCis6MTBBMEIwMDA2RUMxOEYzQjVERUY4RkU5ODNGNEVDQTZGRUFGRkEzQkY4Cis6MTBBMEMwMDBFRjBBN0ZFNzFERjQ3N0JBRTMzRTEwRjc3NzBFQjk2NjIzCis6MTBBMEQwMDA3MDdGMjc1OUExRUZDNTJDOERCOURFRTg4OUMwQTdGRjk1Cis6MTBBMEUwMDBEN0ZEOUNGMTQ1QjI5RjUzRTE5NEZEMUM2REZGNjBCNzE1Cis6MTBBMEYwMDA1REExNzM1ODYzRjI2NEJGNjczN0ZFODI3OTI2QUJFMkQ1Cis6MTBBMTAwMDBDNzdCNUNEQjVEMTMyRkFCODcwMzQyQkUwRjA5RkFCQzM0Cis6MTBBMTEwMDAyOUY0RjA3RTExMzdFQzQwRkMxMzVEQ0EwNTVENzhCRTcyCis6MTBBMTIwMDBBMkY4QkNEM0U2NzQyMDdEQUE3ODVDOTY1NzRERjFGNDcyCis6MTBBMTMwMDA1MENEQkU3QjZCQThGRDkxMEJEM0NGRTNGREZFRERGNkNBCis6MTBBMTQwMDAxOENBQjNFQ0M2RjlDMDEyOEU5ODNDRTdGMUZCMTVCQkY4Cis6MTBBMTUwMDA1RDhBNjM2OTg0Qjg3RTQ4OEJBQzA3MzQzRjQxRTNDQkFBCis6MTBBMTYwMDBERENEOUYxMzVGRUU2QUJEQkMzREQ1RjQ5N0Q2RUU0REI1Cis6MTBBMTcwMDBGNjdBMjlFMkU3RkE2NkM2MzA2RUI4OTJGRUQxREJDNTAwCis6MTBBMTgwMDAyQjhEQTM2RjNGQzQ1OEFGNDZCMjNCRkE3MURDQUQwMUQzCis6MTBBMTkwMDAxNUNGM0ZFRjZDMDkyNkUyNzY5RDNCNzA0OEM1N0JFMDBBCis6MTBBMUEwMDBDNTJEMDE5QUVGM0U5NzYyNTczM0E5NUQyOTlFOEI3RTlDCis6MTBBMUIwMDBGM0UyN0I2M0YwRjlBRUYzNDY4Mzg1RjY5OUVDMjRCN0JFCis6MTBBMUMwMDBDNTQyM0VERkI5NjhCMDM5MDlCRjJBRUQ3MzA0NUEzRTczCis6MTBBMUQwMDA3RjEwRTVENTY3NTVFOUJFQzhFRThCRkQ5MkMyRjFGNjVBCis6MTBBMUUwMDBFODc1MkFFOTkzRUQ2NTE2MDNFNjk3Qjc5RjM3OEFGMzdBCis6MTBBMUYwMDBENjAxRjIxRjc2QjQ2NkQ5QjBEQ0VFMDJGOTIxN0QxMUVBCis6MTBBMjAwMDAyNEZDRkZGRTNBN0U0RTc1MjdGNEM3RjU4NDgzRTZBMTUxCis6MTBBMjEwMDBGMTQxRTBCQ0ExM0NEMkY3NzY3RTJGQzYxQjcyRjFCM0IwCis6MTBBMjIwMDAxOEM0Q0Y4MUYzN0I2MjUwNUZFRDZBRTFFMzBDNTlEMjMxCis6MTBBMjMwMDAxNDgzNzFFNkRCQUQ4NjU4OUU1N0U5OUY4NENGMUI4NzU4Cis6MTBBMjQwMDBERjZGRUI4N0VCNkEzMUYwRkQxQkUxRDc2OEUzRUQyRUEyCis6MTBBMjUwMDA5QjRERjlGQ0REMkQzQzBFREI3RDlFRTc4RkI2RkJGOUI3Cis6MTBBMjYwMDBCOTM1MjZGNDk4RDY3RUZCRjkwOTYzN0E2MUZFQzA2RjkyCis6MTBBMjcwMDBBMkY2NDM5ODdGNjUxQ0I0REJERjcxRUI3NTc0QkVDNjM0Cis6MTBBMjgwMDAzNzhGODVFQkJENTJCQkVDRTc5NEI0RThFQzkzNjcxRUM3Cis6MTBBMjkwMDBDOTgxNDY4NzIzREY0REI4QjE5MkNFRDc3MzNEMzlDQTA1Cis6MTBBMkEwMDAyOEVCOTc1REU3OTcyNjREQzBGMTZEN0M3Q0U2RTdFRkU0Cis6MTBBMkIwMDA2QkYxMTlGRTE4QzNCRUJCNTIzQkZDRTY4OTE1RDhERjEzCis6MTBBMkMwMDA2NjdFQ0U2Qzg4NERENjY3NDc4NkNERjhGRDdDM0NGRjE4Cis6MTBBMkQwMDBCRjI5ODZFQ0VDNzY1QzNGRjY3Rjk0NTFGRTZDNzdGOUYzCis6MTBBMkUwMDBFM0E1NzE5OEI3NkU2NjRFRUVDN0M5N0FCREY0QzJBNkYzCis6MTBBMkYwMDBCRDcxRDBGRUJEMEQwQUUxNzc2NDlFQkNERTlEQUVFQzYzCis6MTBBMzAwMDA4NzMxMEVCRUQwQ0NGMUFCRTU5MzM0QjlEQ0QzOUM3MDcxCis6MTBBMzEwMDAxQkU5QTczMjc4MUJGMEY4NUVGOUVCOTRDNzlFRTM5NzMwCis6MTBBMzIwMDBGQjE5QjgzMTQ2OUFGN0ZDQTYwNDVERkMyNkU3QzdDMUM1Cis6MTBBMzMwMDBERkQ0RjIwM0I2OEEwMUExRjhBREIwOTVFN0Q3MDdGRUU2Cis6MTBBMzQwMDAzNEExN0YwMEU2NUI1Q0M2Q0ZDRkVCRjNFMkEzOEMxNkIzCis6MTBBMzUwMDBEOUNGRDJFNUM1MEJGNTc5NzFCRDNEMTdGRUQ4MDBCMTU3Cis6MTBBMzYwMDBBRjcxODlGRjIzRUM5Qzk2NkZEODY2MEE0QzcxNUY4M0FFCis6MTBBMzcwMDBGRjMwQzgwOEExMEI5REVCRjUyNDE2MDBGRURGMTBGRTkwCis6MTBBMzgwMDBFNTIwNzNEREREMjkyMDJBNUI1NURGMTAxNkU2MTczMDQ2Cis6MTBBMzkwMDBCQjhGMjUwRDA4QzVCNzgzNEZDQkYxNDBEMTcxOTkyRkU1Cis6MTBBM0EwMDAyMTdFRkMxMkUzQzk1NUI4QTc0OTcyRTBFMzc5RDBBQjJFCis6MTBBM0IwMDBGNDMzRDZDNEY0NkU2ODAyQkEwRTNDQ0FDNDdFQzdCRjdBCis6MTBBM0MwMDBFQzQ1QkU2QUY4NDJEQkNGMDBEN0EzMTNFRUNGMzNGMkUxCis6MTBBM0QwMDBCNzFCQkYzMDEzREY2RDE5Q0VFRDk0RTZBNzY4RkIzNEQxCis6MTBBM0UwMDAzN0IyQTZFNUE1MEE5RUNCQjZBRTY4MDI3QzZFM0EzMkJECis6MTBBM0YwMDAyQjc1MDFGNEZGQzFDN0I0RERDOUI2MTQ2QURGQTdBRjdFCis6MTBBNDAwMDA5M0UyQ0I4MTVBMUVFQUI4QzE5NzU4ODBGRUJBNDU5MkIyCis6MTBBNDEwMDA2QkFEQkVFMUY4RDIxOEZDQkVDODg1QTA4MUY4QjRGMURFCis6MTBBNDIwMDAyMzMzQzNCRjBGRDBCMEMzNDJGQjM5MERDN0NDQjRERjU5Cis6MTBBNDMwMDBCMjZEMDc5NzEzMkRFRkFDRjlGOTZGMDk3RDdFNTBGOEQ3Cis6MTBBNDQwMDBCRDA3ODRERkIyNEZGODJEN0I4NERGMTIxMDdFQ0IyRTQ4Cis6MTBBNDUwMDBFMUI3RUMxMDdFQ0IxQkMyNkU2RTNBMkVFNDZGNDk4Q0Q2Cis6MTBBNDYwMDA5RjdGQzc5NkU3NjVCNTc5REVEMUJERTk4NDExMTY1QzlCCis6MTBBNDcwMDBGREYxODBCNTAxODZGNjVDOTY5MzUxMEU1OTRFNDYyNjQ1Cis6MTBBNDgwMDBDQkZBNjNCODNENTU2QTVGNkFDRDk2RUE4N0IxRUJBNDEzCis6MTBBNDkwMDBGQTFCNUFGQkU5RTI5MUMxQkE3OEE0NDRFNzhGOEM5MTg4Cis6MTBBNEEwMDBFNUYyNjg1OEJDNEJGMUI1MUNFRkRFMTQxRUVGNjYyMkQ2Cis6MTBBNEIwMDA5RDc4MUNCOEFERTkzMUEyRTNCNkQzNTlGMUUxN0VEOTVDCis6MTBBNEMwMDAxQjQyNkVCNjlERTZGNkY5OEQzM0U3NjIyM0Y5NkQ2N0EwCis6MTBBNEQwMDAwNDNEQkUxNkY0NjgxNjdFQ0E0RDI5QUVEQkYzMEIzMTdGCis6MTBBNEUwMDBBRTM4NjdDNjczMUZFREYxQjNGNkJFRjZERTE5RkZBOUVECis6MTBBNEYwMDBCODcwRkJGNzA1MDU4RDIxRjhEQjJEOUZFNDUyRkVFNEQzCis6MTBBNTAwMDAyQUU1NjM1OTJDM0ZFN0I2NTk4OUE2RkJGNzU3QkFENzE2Cis6MTBBNTEwMDBGMjlCRkMyQ0IxMEY1MUQzODdFRjhCRDYwQ0M0RjIwNTA0Cis6MTBBNTIwMDA5MzNCMTVFRjNGNkQ1NkRDNTM1MDhGRkI3RTY3OEVGOEUzCis6MTBBNTMwMDBGNzI0OTZFNzJCOUFGMDM3QTA3REUwNDc5MkUxRTcyNUQ0Cis6MTBBNTQwMDBDNTg4RkMxNTI1QzA2Nzk5NjczOUUyQzc4QUYxM0EzNDk2Cis6MTBBNTUwMDA1MjZENkU4NkVCREE2NDYyMEQ2OEU3OTk4QjM5RUM5RDdCCis6MTBBNTYwMDAxODE3MjExOEU3ODc1RTlFRDVGOTMwMkYyNUM4Rjc4Rjc5Cis6MTBBNTcwMDBDMUJDRDJGNzNFRjA2ODE2N0U3NzBCNEJEQzI3QjM1ODkwCis6MTBBNTgwMDBGOUJEODNFODdDNEY1RDdFMjFGRjlFNkQ3QzNGRUNCNzdCCis6MTBBNTkwMDAyNDlCRUZBMzA2NDg3RjRGMTFGRDFBNjI3NkE0OTMzRERBCis6MTBBNUEwMDA2RDRGQUZFQUUyNUMzNjRGQkU4RkEyRTc5NzA2QTE2NzE4Cis6MTBBNUIwMDBERkM4NzQ0Rjg5RjQxRDhDM0YwQUZDNkNGQjZBOUM4QUNGCis6MTBBNUMwMDBFMzE2NThFMzVDRkNCQjkwMkUxNUVGODFCREYxRjVFODc2Cis6MTBBNUQwMDA5ODY5MTFGODZDN0ZFRjY5N0ZDQzBGRTM4MzgyNjA4REZGCis6MTBBNUUwMDAyQUZFNEU4NTQxQ0U2RjE5MDI0OEVGMEIzNjMzQzlGNTZFCis6MTBBNUYwMDA2MDVDNzBDMkE1RkQwRDM5MjNGQjc5ODM5QUU0RjgzRkI2Cis6MTBBNjAwMDBCNEJGNUZBN0UwNzlCMzM2N0U0MjgyMjBGRDhGRjBFRkMyCis6MTBBNjEwMDA2OTVDODk5RkY0RkJGNkM3RjNCNUYzOTI5RTRGRjAxQzdCCis6MTBBNjIwMDBCMTFBNkZBM0YzMzU5QjhFNThEN0EzMUZBOUNGRjcxRDdGCis6MTBBNjMwMDBGRTgwRUI3MUZERkMxQjNGOTg5NDhBRkVEN0U2QTEzN0E0Cis6MTBBNjQwMDBBN0EyMUM2RjQxMDU0RkRGRUY1OTM4QzkyNUMxQjA3RTY1Cis6MTBBNjUwMDAxQkVBN0IyNkJFQjM1NUNERUI0NzY5NzBDRDI0M0MzRjRBCis6MTBBNjYwMDBCMzY1MTg2RkZGNDlGRTkxMjdGMTdCNjA1QjZFMTNGNUIwCis6MTBBNjcwMDBCRTQ3NzhCRDA2QjM0NTkzODYyMTZDMzIxMDNDQTkxN0JFCis6MTBBNjgwMDBCNDg3RkU3RUVBRTkzQThFRkMxOTlERUYzQTgxRTU5Rjk4Cis6MTBBNjkwMDA1MDc2QTAxQ0QxRDNGNTE5QzJDNzkxQzc2MERENDc3QkE2Cis6MTBBNkEwMDBCODRFODZDMzg5M0Q1Q0E3QzJFMUNENkRGNkE1QzUxNjNGCis6MTBBNkIwMDBCRTdGQUNGMUUxRTE2MzEzODREREUxNzQxRkFGQzUzNTBBCis6MTBBNkMwMDBDNTU3OTdFN0ZGNzdDMUE3NkYwQjdENzU0OEQ4OEYzN0MwCis6MTBBNkQwMDA4NUZERDg4RkY2ODNFMjYxNkUzRjFBQzVCRUYxNkU2MUNCCis6MTBBNkUwMDAzRjc2OEFCODM3MTQ3N0I5ODU3RjMxNTlDNEMzM0MwRTk5Cis6MTBBNkYwMDAyQjE4NUFDQUUzNUVCQjk2RTdDRjMwNDY4QTg3QzYxNTQ5Cis6MTBBNzAwMDBDODdFRTJEODdDRDlBRThDRUU5NjI4RjE2OTc5NUFBQTM3Cis6MTBBNzEwMDAyRTRFQ0VENkM1QzlCMjVEMjkzMUY2RDdDNUM5ODM3NUNGCis6MTBBNzIwMDA3MUIyMUNGNzE2Mzc4RkQ2QzVDOTEzQTRGNkM3RjMxRDJGCis6MTBBNzMwMDA0NEQ3QTJFM0I3RUFFMkU1RTk1MkJCMTAxREU1N0Q5QkYxCis6MTBBNzQwMDAxMEJENjY0NEE0RTM5NkUyMTkwRkZFREZBMjYzRTRGREE4Cis6MTBBNzUwMDA5QUZGRkZFOEY4MEZDQUEzQ0QyMEVEREZFOENCNzc4NDlFCis6MTBBNzYwMDBGRDdGNEJEODhEODNDMjBGMzgyMEYyMUNGQjg0M0ZCNzhFCis6MTBBNzcwMDAwN0U5RDgxREZEM0FBN0YwRUJGODM5MEUyRDBGRjI4NjQ4Cis6MTBBNzgwMDBDODQzMzU4ODczMUM1QkM0QkVEQjI2OTE4NzVBNTZGQ0QwCis6MTBBNzkwMDAzRDNGQzc3MTkxMDkzQUJFMUI5MThFMTU0RUQ5Q0YxQjEzCis6MTBBN0EwMDA5MzI3RDM3MTk0MjM1MUU3RjdDOTdFREU3MEJCRUNFN0EyCis6MTBBN0IwMDA5NTVBNjUzQTBFNjNGRDc1N0U5RjRDQzdBMTJEMjUzQUNCCis6MTBBN0MwMDBCRjZGQjRDRTRFQzlFNzM4QzAyRjc4QjQ1NzIxREU0QkU3Cis6MTBBN0QwMDA5MENGNzMxNDA2RTVGMzFDN0FGQkFFREQ1N0Q0RkM4NkVDCis6MTBBN0UwMDAzNjNGQzEyQkVGMzM2RjQyMUI4QUZCNDUyOTY2RkVCRDA2Cis6MTBBN0YwMDAwREEzQTcwQkZBMUQxQUJFRkNCREY4MzlDNDJEOUZEQ0IyCis6MTBBODAwMDA0RUY4MkM0NDdCMUVDMTdFRkZBOTE3QjdGQjdGRUE2NTdCCis6MTBBODEwMDA2RkJCMUYxOUREMEZEMzlCM0VFRUZGQzQ4RkI1RjM3M0UzCis6MTBBODIwMDA1NTJDODhERjlGQkE4Q0RGRjQyNzVDQUZFNjJGMTlFRDNCCis6MTBBODMwMDAzNTBDRkQwOEQ1NjJGMEUxRjc3Nzk5NkFBNTczNzc4NzQzCis6MTBBODQwMDBEQkYxQTM0RUY1Q0FENEJFQkZBQTYwQkY5Rjg4N0U5NTM4Cis6MTBBODUwMDBFMjM3RjlCOUJDNUVBRUNEQkRGMDVFNEZBOUIzMDVGM0VBCis6MTBBODYwMDBFMjlCM0YzMjNCNkI5MTlGQTNGODc3NTBGNEZFRDZFMTE5Cis6MTBBODcwMDA1RUI5RDQ5Rjg2M0YzQ0ZGRkYwQkI0OEZGOEExNThGQTE2Cis6MTBBODgwMDBERURFRTczQUZCMDkwQjg2N0U1RTg4RTZGMDkxOTc0RkE1Cis6MTBBODkwMDA0REYyQTU4NUVDRjUyN0JEMkU5MDNEQ0RCNTc1OTk4MTdFCis6MTBBOEEwMDBGMUIyQjJENjk3QzBGNzJCMDMyNDVGN0FCRkFENURGRjNDCis6MTBBOEIwMDA1N0U3QTc5RENDNzMwNTExNkZERkEzNUQyRUE0NzM1NUQ5Cis6MTBBOEMwMDAyRTYzQkZGNkRGN0YyMURBN0QxN0ZGMUU4QzRCQzU3MTJCCis6MTBBOEQwMDAzNTNDNjlGNTg3MDRERDBGOEJGRURBRjBBMkYxMTU3RUI5Cis6MTBBOEUwMDA5RjI2MjFFQzFFQUM2RUZFMUFCRTU2MUVEOTFCQzQyMzM5Cis6MTBBOEYwMDA4Q0Q3QkExRTZEMUQxMUY4Qzc3RDA1QkZGQjdCQTJBRkJCCis6MTBBOTAwMDA4RTdGRDg1OEE3QjhBNzFCRDlFRjMzMDkzRjMyOUNGRURBCis6MTBBOTEwMDA4MzY5NUQ3RTZERkQ2Qzc4M0ZCQ0ZGQTJERDVCRTdGQTZECis6MTBBOTIwMDA1MEJCMzM5MzYwQUZCMzY3ODIxQ0REN0U1NEE1NzMwRUJBCis6MTBBOTMwMDA0Q0VDODMxQkRCRTg1OUFDQTA5RDMxOEU1MDU4NjI1ODFCCis6MTBBOTQwMDBERTU1QkY5RkE4Q0YxRkU4Q0Y5NTE1Mzc3NzkxRTBFQjc1Cis6MTBBOTUwMDBDRkNCRTdDQTVDMTc3QjVFRDZBRTk0RDk4NkU4RUM1MkMzCis6MTBBOTYwMDBBOUNFNkU4REQxRDlCNTg5M0FCQjI3RTdDNThEQ0NBOEM0Cis6MTBBOTcwMDA3RDY3NDhFQ0Q3MkIwRUZDRkU4RTkxNjMyOEJDNUU3Qzc1Cis6MTBBOTgwMDAwNzg4RTM3Qjc5M0JGMkRCNzY3RUI2OTc4M0YwREUyNkExCis6MTBBOTkwMDAxRkVCOTg4M0QzQ0YyN0REMzM1MTZEMUVBMkYzQTMwM0EyCis6MTBBOUEwMDAzNDNCRTZBNEI4RDcxQzE4NDRERkYzMzQzQkU1QkZDRkYzCis6MTBBOUIwMDBFMEY3NUEzRjJFQ0JDMTdCMzY4Q0NBNjdCQ0Y2OEZDQkYzCis6MTBBOUMwMDBFODNFNEUzMjk1NEY3OTFERjQ3Q0FEMzc4RkNBMjdCREQ2Cis6MTBBOUQwMDA0RTdBRkU4NEI3ODhDQUM3QkMyRTJBRUJCQ0U1NTQzRTJCCis6MTBBOUUwMDBFNDc1NTNCQkQ1REVDOTA0QUZGMjdBQThDQzAyRjcwNkYyCis6MTBBOUYwMDBGRkRFNDA5NjhGMzk2MUM2MkM3QjE1OEMxNzg2RTc0QzlECis6MTBBQTAwMDAxRkNDMjMwQzhGNUQxN0RCMjUzOEJEMjY1OTZBOUY1QTUyCis6MTBBQTEwMDBFNTkwRUE1MzNDNzk1MjdERTdDOTRFMDlFRUU4MkU5MjYzCis6MTBBQTIwMDBEQTI3OTZCQjI0Qjg4M0FCNUM2QTFGRUI3NDRCNzA0QzdGCis6MTBBQTMwMDBERTY0QTk3RDk0QzMyM0Q1RUZCOTdFNzA3Q0QzNjVFNDMxCis6MTBBQTQwMDBCOUNFRUIzQTgxNzg1OEVENzU5RkUwNzgyQTNGQzFGMTk1Cis6MTBBQTUwMDAzMzk5Q0FCOUJEM0IxMDdERURDNjdBMTdEQTZEN0JCRTVFCis6MTBBQTYwMDA5REUxRjk3NkIzOTVERkZCRUU2MEI0MkIxREMyRkFFRkUyCis6MTBBQTcwMDBFMDgyRkVBNEY5NDI3RjUyM0NFN0U3RTc4OUYzREMyNzU2Cis6MTBBQTgwMDBFNDc5NEY5NkRFMDMxOTI0M0JBOUY5MzFDM0Q1QjQ1OEI0Cis6MTBBQTkwMDA4Q0M3MUUzNEQ5RkZCRDNGQ0NFMzgxRTEyQUMzN0IyQjk5Cis6MTBBQUEwMDA0N0NBMjY1MjVFMDRBRjZDQjIwODdBRjQwQkUxOUZDNjI3Cis6MTBBQUIwMDBGNEI2NTJCQzM4RkUwOTg1RTIzQjU4NDkwNUU2MTE2N0Y5Cis6MTBBQUMwMDAxRENENzY4NkZGM0QyOEFEM0NGQzFCRkVCREExOTgzRDBCCis6MTBBQUQwMDBEQjFDOTgxNzFCNUYzQzJEMzEyQTJDRkUxQjFGRjhCMTg1Cis6MTBBQUUwMDAyQzg1RkFFQjNCMjAwQUU2MzE3RUVEMzRGMzhDRkNEMDZBCis6MTBBQUYwMDBGQUI0NzZCMzlFOTBGREQxMTBGRkZCQURDMjFGQTc3NUNGCis6MTBBQjAwMDA2QUZBNjlCNTdEM0QzRDVGOUQ3N0Y5N0Q5QkIzNjI1REQ2Cis6MTBBQjEwMDA1RjA5N0ZFRDBCRTFBRjlEMTI3RUY3NDlFMTc3N0YyQTU4Cis6MTBBQjIwMDBGQ0VFRTNDMkVGRkU1OEY4RERDNzg0REZGREExRjBEN0VECis6MTBBQjMwMDA4RTBBN0ZFRDNERTE3N0FGMTQ3RUY3RUFCQ0Y1RjQ3NzNFCis6MTBBQjQwMDBBRDJFNkM1NDk4N0E5OUYzQTU3MzM3QzhFQkFDNUEyNzlECis6MTBBQjUwMDBFRjFCQ0U3QTQyRjZCQjY3M0UyNEZCNkJEMzk3Q0I3RUNFCis6MTBBQjYwMDBGNzFEOEI2NTdGRURCNjFBRDk1RjlCNTIyNUVCQzc1QjRFCis6MTBBQjcwMDAzQ0E1MTI3Q0YzNjQzOTJGNzc5MzVCREUzN0Q0RTgzNDNECis6MTBBQjgwMDBCMTVDRDY5Mzk2NjREOTVGNkI2RkJENUIwM0EzNTRGQzM1Cis6MTBBQjkwMDAzQjI0NDhDQzUzNjFGNjMwRUM3QkYwRDI3OUM3MDJCQjQyCis6MTBBQkEwMDBBQjE0Rjc2QjBBOTk3QjE5RUVFNzBDMzUwNERGQzdGRDkwCis6MTBBQkIwMDAyNkY2QTE0QURGODE2Q0MwMzcwNjgxQkM1RTE4MzA3NjZDCis6MTBBQkMwMDBCQzIzQ0NFRUY4NjRCQzRFM0QyRUU3NDc2RUJENDdGNjg1Cis6MTBBQkQwMDA4MzJCRTdDOUYxOENCOTVDRjY4MzVENjlGMjdFRUM0NEE2Cis6MTBBQkUwMDA5RERENjFDMjFFOUFGOUVGQUNDQzdENzkzQjY0ODg5OUZBCis6MTBBQkYwMDA0N0Y3OTVBRUQ1MUU5OTk5RkVGQzE4Qjc0NzM0NkU5NjY3Cis6MTBBQzAwMDA1NDRGRjYyOEFBMEYzRjI3MzE0MERDNTNBODhEMUFGODdECis6MTBBQzEwMDAwRUVFREZFREY5ODhERjJGMDBCNDA3QkJDMUZCRDczM0ExCis6MTBBQzIwMDA4RTZGQjM3NTI0N0QzRjZFQTc4OURGMUJEODlENjI3MzNECis6MTBBQzMwMDAyRTg1QUFFQjJGRjJGQjAxQUNENTQ4RTdDNzNDNzg2RjE1Cis6MTBBQzQwMDAyNDBCRkI5NUNGOEYxNTA2OEREMkY5MzJCM0FFM0UwRDk2Cis6MTBBQzUwMDA2REUyNjVFN0MzQ0ZEMUZERUZDRDQ3OUNFM0U4QzNGQUQyCis6MTBBQzYwMDBEMEY5ODhBNkM4RjcwRERBRkMzODFEOUY2QUZBQTcyMDJDCis6MTBBQzcwMDBDMEZEQTM4Mjc2RkRBM0E5RjQ5RDMxRTM4NzhDRUVEOUI0Cis6MTBBQzgwMDA1QjBDMkQ2NzlFQzNGQjUxNUZGMjNDRUMzMDI2Qzc2RDE5Cis6MTBBQzkwMDAzNzhFOTVFM0I2RTFGNkNCQzc2REEzMUMzMkJGOEVDOUU0Cis6MTBBQ0EwMDA5M0Y1NDA4NTUzRDYwMzk3RjgzNTRERkMxQzYyN0I3RUE3Cis6MTBBQ0IwMDBDRDREN0RCMkI0N0IzQTg0OUZBODlDN0QzMTdDMUY5MzlGCis6MTBBQ0MwMDBGM0NGMTBCMUNFNDdDRDZFQkFCRkIyM0M5RDExOUQ4Njc5Cis6MTBBQ0QwMDBEOEY5NzlDNTVBRENCN0MxRjM3RjFGRjA3QjJGNDZFNjYwCis6MTBBQ0UwMDA0RUVDODNFNUU5MTFFMkZDRTI1ODI3RjVEN0NDRTk1NUIzCis6MTBBQ0YwMDAwNEZGN0VDRUJBRjQ3Q0EyMjU2ODk0QkVCQjYxNjQ2MTc5Cis6MTBBRDAwMDBGNDg1RkEzOUM4NUYxRDQzN0NGNDdGNjc1RUUyRkIwODc3Cis6MTBBRDEwMDAxQTlGRDkxMkFFQjA3RkU3OTNGQzQwQUQxQzE2NzRBOTAwCis6MTBBRDIwMDBCODhFRkQ3NkJFOEZCQTNGNTgxM0M0RUY0NDdFOUZDQ0Q5Cis6MTBBRDMwMDBGMzE0RjdBNzREMzBGMkVGQjZCODZDQzM4MTJFMjNDNERECis6MTBBRDQwMDBGQThCQzQzRUQ5MTYyRjBCQTIzRkI3Qzk2QkE1NTJEQkI1Cis6MTBBRDUwMDBGRjVDOTlCQzI4MTFFREU2OTYwQzRGMkE5RTBCRENEMkM1Cis6MTBBRDYwMDBCMUMzNzIwNjdBN0FCM0E5NDM1QUE0N0IwNDhEQTY4MTMzCis6MTBBRDcwMDA2NDY3QjczNEE2MThEMTBGMUQ2NkI0MUJFOTdCNTI2OTBFCis6MTBBRDgwMDBEMzU1Q0NDRjhFQzRGQjI2NDkwODMzREFBN0RCRTQwREJDCis6MTBBRDkwMDAwNENCRTg1Q0E4ODdDRTExQzEzQTRBRDE4RjJEQjM0RkJFCis6MTBBREEwMDBBM0JGRjdEOEY4MDFDODg1MDNGREUzMEU1M0YxQkQ3REJECis6MTBBREIwMDAxREY5Rjk2QjhCOUQ5RjZGMUQ5MTM0OUJFODU1RTBFNDY1Cis6MTBBREMwMDBERkVGMkI0OEIzMzlGREQ4NUQzMkZGOEU0RjE1RkNFMzIyCis6MTBBREQwMDA3NEUxNzYwMkU0NUVGQUJFQ0Y0MDE2MDYyM0JENzRGMDNECis6MTBBREUwMDBEMzdBM0RBMDNCOTdCOEYyOTgzODNGRDcxNDc5REZFNjg1Cis6MTBBREYwMDAzM0UxNTc2QzExNzk4N0UzQzJBRkY4NThGODE1NDc4NEVGCis6MTBBRTAwMDA1RkIxNTI5NzA3N0E1RkY4MTVGQjQ0MUVFODgwQzhFN0U4Cis6MTBBRTEwMDAxRDE0RjlCQ0I3ODQ1RkExOURCRkQ2RjgyMjc5MTU3M0M0Cis6MTBBRTIwMDA1OEUyMTk3Qjc3MUFDNzczQ0EyQUM1NUYwRUVCMjg5REIzCis6MTBBRTMwMDBDOUUxRTRDNTdDN0ZCNEFCQTdDRTVENTI4MEY1MjZFN0JGCis6MTBBRTQwMDA0ODU4NDdGMkU0QkFFMUI4OEU5NEE5MkQ3NDRGNjlCMjFDCis6MTBBRTUwMDBDN0VDNzAyOTc4M0ZFOTI5QkExN0E1REQwQkJCOTNBMzhFCis6MTBBRTYwMDA4NkREM0U3MzA0RTlERjNCM0RFMkRDQjFEQTVDNDhGQ0ExCis6MTBBRTcwMDBGNTg0ODlCRTkzQTQ3RDNGNkVGMjRDRjk3QjRBRDM3NTZECis6MTBBRTgwMDBGOEJENUQwNzlCMTVBRTQ3REVEMUU0QTIzRkVCMUY4RUY4Cis6MTBBRTkwMDBGNzE0RDEzNkVBNEU3MTlFMTcyRjVENDU5MDk3QjUwMjkzCis6MTBBRUEwMDBFRjFBNUUxQUFGMUYxRENCRDdDMUY3NDMyREEyOUZBMzg4Cis6MTBBRUIwMDBDNUI3QzY2MjNGMUZBNEYxRkUyNjA4NzlEMEY3Qjc1QTdFCis6MTBBRUMwMDBFQjRGRENBNzg5MTZGNDdGQjRFN0U1Q0Y5RDFFRjYzMjgxCis6MTBBRUQwMDBFOTlDRTk2MTQxOUZCNjdFNEIxRTM0RTFGN0I0MjcwNzM4Cis6MTBBRUUwMDAxRTQ4NDc3OTA5RERBQjcxQzVGMkZCMkI2M0ZGM0QxM0FCCis6MTBBRUYwMDBFOEI0NUFEQzQzRDBGNEVBQ0Q0MjdFRjVFMzdERTBCRDEwCis6MTBBRjAwMDBGQ0ZEOUQwRjRBQTY5OEYwN0JFODM3MDU3RUM1RkYxRTI1Cis6MTBBRjEwMDBCMEIxMjYzOUZDQkNFRjA3MzgzRkQwOTVGN0RGNzQzNzY2Cis6MTBBRjIwMDBGRDFEQzk2MDA2RTcwN0NCOEQxNjA3N0U2N0IwNkI5QURCCis6MTBBRjMwMDA2QjA1RTIzMTM5Q0QzOTVDRTQ0N0M5OUVGRDNGRUU4MUI2Cis6MTBBRjQwMDAxOTFCMDA4MDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDlCCis6MTBBRjUwMDAwMDBCRUQ3RDBCNzg1NEQ1QjlFOERBRjM0RTMyODEwOTU4Cis6MTBBRjYwMDAwNDlDNjA0MjI3RTE2MUFDMDQyNjJGRjI2MDA4M0IxMDhDCis6MTBBRjcwMDAzNDQ1MjQxMzEyMjE5ODEwMjYwOTkwNjhEMTFCQUEzRDRDCis6MTBBRjgwMDBEMjdCNjhCMzIxMjE4NDE4Nzk5QzZCM0Q1MDA5MEVGODVGCis6MTBBRjkwMDA2OENGQjk5RTFBQUNEN0QyN0VFQThEOEFENkRFQTMxMkNDCis6MTBBRkEwMDA3QTQzMEI2REM1RjA5MkY2NkI3QjJGNUVENDlFRDNBM0Q0Cis6MTBBRkIwMDAxRkY3RkZGRkI1RDZDQ0RFM0I5MzgwMEFBREY2MzRGOTIwCis6MTBBRkMwMDA3NEIzRjY1RTdCQUQ3RkZEOEZGNTNGRDc4RTkzQzE4RjU3Cis6MTBBRkQwMDA4RjMxNEJDMjVFNjU0MjMyNjNDRTYyODU4RDg3RjZBNkE1Cis6MTBBRkUwMDA5MjQ1Njk0MzMzMTg1QjVFRERCQzk4Q0Q2NEVDMTJGRTdDCis6MTBBRkYwMDBDQzgzRTdDQ0E2MEQ2NUUyNEJDQzcyNDk4MUZGODc5OUUzCis6MTBCMDAwMDBDRjM2MUJFRkUzMURDMzczNzYyOTFERkZERkNBODI4OThDCis6MTBCMDEwMDA3MDNGNzhDQjZGNzE5QzZBRDZFQUVGODdGQkRENzlFQUU3Cis6MTBCMDIwMDAwNDBGOENDRkVBRUM2Nzg3NUM4QzY1QzJFRkE1OENFOEQ3Cis6MTBCMDMwMDAzQ0YyNUFDRDZDRjQ1QzhFQjc2NDMxRjQ5N0UzMzM5QUVBCis6MTBCMDQwMDBDRkYwN0M2QjE3RjMzOUM3NDJFMzIzODA2RTIyQkMyRjBECis6MTBCMDUwMDA5RTZEQjU4NTVEMzg1Rjc3RjA1RTk3RUE2NjJDMjNENUU3Cis6MTBCMDYwMDBEMkUwMDQ3ODJBRDIzNkFGNjRCMDZFNTZFOUY0NENDMzBECis6MTBCMDcwMDBGNzAzMEJERkNFQ0Q4MzZCRTY1QTFGMkUwRkZCMzU0MzU0Cis6MTBCMDgwMDBCRkUzMzc3NkE2Rjk2NjQ0RTFEQUJBOEQ5NTg0NjA5RTBGCis6MTBCMDkwMDBBRDY5N0ZFNzVEOUI4OEZEM0U2QzBCNjEzRjNCQUJFOTkzCis6MTBCMEEwMDA4M0YxQkJFN0ZGMkUzNUREMURFRDdGNzA1NkU5NENGRkM4Cis6MTBCMEIwMDAwNDE4QjAxQ0ZFOTdDMkQ4NzQ0NzI4QzMzRjYzRjg3QUJGCis6MTBCMEMwMDAxOUQzMTg5QjgwRjg4RjY3MENFMDM4RDNBMDg0OUQwMEJCCis6MTBCMEQwMDA1NzREMEZFMDZGMEMzRUJGRDA4MkY3MUI3QTlDQkU2RUJGCis6MTBCMEUwMDAwNDkwQTlFRURCNjA5RDZCRjkzMjU5QzNCNDhFRkM3RUVGCis6MTBCMEYwMDBCOEFFRUQwMUJBNjFGRkRERjZEMzg4MkYxN0ZDMjI3RUQyCis6MTBCMTAwMDBEMzVBNkRBNzIzRjhDMkZFNENEN0M2Nzk0QzZEMDdDRTMzCis6MTBCMTEwMDAwMUYwREVFMjRGNEM3RUY3MjZGODc3MkVDQkJENjRFNURBCis6MTBCMTIwMDBGNDQ3RkNENjg4QkU3MTBENTU2MzE5RDJEMzBCQzgyQ0Q5Cis6MTBCMTMwMDAxQUJFQUUxNUZGNjY2NUZERTMxOTMxMENDQjhGREUzRkZECis6MTBCMTQwMDBCMTdBNEE3QzA4REY0M0JFNzEwOUJFOUE0NTNDRTk3Mzc3Cis6MTBCMTUwMDBDQzQ2RkE3M0JFQUExNjdDMDVBQ0Y5MTJGMTk1NjZEN0Y3Cis6MTBCMTYwMDAyMjcwQzJCQUQ4N0RGNjI4REY2NTE4QzY2MzA4RUYzMkIwCis6MTBCMTcwMDA3RDlCREU1NzhGNEQwNUY4NTcwQUZFNUYxOTY4RTFGODkxCis6MTBCMTgwMDBCQThGRjNBMzBCNkU4QTcxQTJGQzA2RTMwNDRERkM0NzUxCis6MTBCMTkwMDBGNDlBMjhFMDg0NzE2RTJGMkJGQjFGM0YwNTlDM0RCRTY3Cis6MTBCMUEwMDAzM0UzMzZBNEQzRURERkI0MzIyQkNDNTcwNUREQjA1REVECis6MTBCMUIwMDA1NUEzODRDM0QwNUUxNkI4OTlFNDYxOTk3RTdDQjg1RkNDCis6MTBCMUMwMDA1RDZEM0ZBQkE3Q0YzQjFCQTdEMDM4QUJDQUY5Mzg2QzNFCis6MTBCMUQwMDBBMzZFN0U4MjZGMjdFMTMzQzhEODE2OEY4RURGREU0REQ3Cis6MTBCMUUwMDA2NzUzMTlFMEYxQTUzRENERkJGMEZENzNCQjlDMENGOTU1Cis6MTBCMUYwMDA4OEUxQkJCMzkxRUUxQ0FGQzc4MDc3OTFGRkNGNkY1MzRGCis6MTBCMjAwMDBDMjA3MDBFRUIzN0I5QzA0RTdCQjZCOTQzMDQzRkEzMzc4Cis6MTBCMjEwMDBDRjkzRkQ3MEZGMDE3RjEyQ0Q3MzJFMkVCNEVGMUJGMDg0Cis6MTBCMjIwMDBCQzcxNkI4MjVGODNGNTc2OEQ2QkJEMjcwOEYzOUU0QkY3Cis6MTBCMjMwMDAwQUQ1RTMzODhENUI2RkIyNjhEMEJGMkI1RTczNjVFMEQzCis6MTBCMjQwMDBCODhENTZGRjAxOTg2Mjg1MEQ3MDNBMEVBRUYwRUZFQkE3Cis6MTBCMjUwMDBFMURBRDBBNUEzMUZGQzM3RTg1Nzg4RUY5NzU4NThBODI0Cis6MTBCMjYwMDBDRjNEOUM3RkRDRDkwQUNEOEYwODc3RUFFMDVGOTI2MTAxCis6MTBCMjcwMDAyMTc4OEYzRkU0MjQ3OEM3NjRGQjY4OUM4NkMyMzgzNTA4Cis6MTBCMjgwMDA2RTBDRDI5MUE5QjYxQzgwMjc1NTlEOEM3MDlFNTU0MDlFCis6MTBCMjkwMDAzRTgxREZDRURDQUU2ODg4MUY2NkUzNzQ3MTVDM0Y2OTc3Cis6MTBCMkEwMDAzRkNBRDMzRjg5NzU5RTdEQjA2MDMyRjJGMzk5MjRGRTg4Cis6MTBCMkIwMDBGQ0I0MzczRThDRUIzQUVERTM2RENERUIwRTNGODFCMjQzCis6MTBCMkMwMDA2MTBCNjUyRTRCRTRFQjUwODAwRjFBMDU1QzhEM0U4QkI1Cis6MTBCMkQwMDAxQTA3RjQ2RDdDNjhGOTU3OTFDRThEREU5RUY1NzgzREE2Cis6MTBCMkUwMDA5NkE4MjUyQUYwRkVGOTNENTY4NkY4NDY3Q0I4NzJGMEZECis6MTBCMkYwMDA3OTcxMzMzRTM3RTNFNTAzN0YwNkMxODNGODFCMEY3ODhFCis6MTBCMzAwMDA3Qjc3Nzc3QjYyMDhENkMxM0MyQ0U0OTgxOEM1NDNDMzkxCis6MTBCMzEwMDBDRTFGREVBRkNDMjQ3OUQ2QjhCQzczMzk1MTk4NkUzRkJFCis6MTBCMzIwMDAwNkZFNURFMTczNjhFNTMwMEUzQjNDOTVGODc2ODU4NzU3Cis6MTBCMzMwMDBGM0FEQTM2OENCODQwQ0RFQ0QxREUxMEYxRkI1N0I3MDkwCis6MTBCMzQwMDA3RjZGMTRFRDA2RTQ1QkMwRUIwQTk0OTc5OTg4OEY3MUM4Cis6MTBCMzUwMDBCM0ZCRTE3RUNENkEyM0RGNkU0OURFRkM2MDE1QUM3MzgyCis6MTBCMzYwMDA0REExOUQ1OUUxRjkxQUFGQ0QyMDM3OTUxQjhDNzIwNDgwCis6MTBCMzcwMDBFQjM2QjRDNzY3MzM1QTc3RDczOEMxOUY5RDlDM0Y4MTVFCis6MTBCMzgwMDBEMzI3MDdCM0EyN0NEMUVCQjc0OEJFRjBEOTQ3QzFCRkUyCis6MTBCMzkwMDAxOUFGNUYzNDNDOUM0NjdFMDU3RDczMjZDREI3QUY4OEUwCis6MTBCM0EwMDBGNDAyRjAwRjg3OEI1OTc1RjJEMEQwRTUyNEJFNjdDMDQ4Cis6MTBCM0IwMDAxRTg4MjdFMDRGNDc2NTU2OTQ1RjI0N0UxQTc2NkYyMkQ5Cis6MTBCM0MwMDA3RTZDMTA3Q0Q3RDgwM0ZDMzM0NkM3NDcyNjdDRTE5QUI1Cis6MTBCM0QwMDA2RDcyOUUyOTUxM0VBM0U3MzFGOEVDNDUzRjg3NUJDQTY5Cis6MTBCM0UwMDA1RjAzMEJENjMzRUI3MEI5OTY1N0EyNzMzMUQwQjM2RkFFCis6MTBCM0YwMDA1RDhEMTZDMDUxMzQ5MkUzMUQyNUM1NjM4OURGMDUzRDdGCis6MTBCNDAwMDBCOEVBQTExRjE3RDIyRDUxRDI0NzYzODNCODlGQkJDNTlECis6MTBCNDEwMDA0M0NGMDZFNTQ0MTlFODFCQUJEODY3MURFQTQwQjgxRkM3Cis6MTBCNDIwMDBFRTI3NkRCMEQyN0RENDJGMzZFODhGRDMzMjI0RjhGM0Q3Cis6MTBCNDMwMDAwNTRGNEY4Nzc2OUM2OEJCMDU1REFENTY3NzBBRTIyQkJBCis6MTBCNDQwMDA5MTE5RUQ5RTcxQ0NBNDRGRkM5Q0FFNTJDRkVFQjRCM0RCCis6MTBCNDUwMDAxNERDOEZFM0M0RkVERUJDNzA4QTgyRkQ3NjJBMEFEOTMyCis6MTBCNDYwMDAwNzhFMzIyMzFGNTg0RDdBNjA1QUI2ODVENjJGRjFDMDA5Cis6MTBCNDcwMDA4NEJFNzVCOEY4N0FFMzUyMkMyNDE3MUZBNDgyNDI1NTczCis6MTBCNDgwMDBBMkY4NzA4OEY1OEZFQkY3RjVGNUMzRjM3QUFGQ0IxRjExCis6MTBCNDkwMDA0NjNFNjIxRUQyMEZBNTMwNTNCRjZFREVFQUM1MDlBQzMwCis6MTBCNEEwMDA1RjQ3RTc4NTlFRjE4NkY2MkRERUVCMERGREJGRTI5QjQzCis6MTBCNEIwMDA2Mjc4N0U2QkU2NEQ4NkU3QjdGOTczMEQ2RDA3RDNFOUM5Cis6MTBCNEMwMDA3NTg0NzM4OEUzREQyMUYwQUM3QjJFRjVGMjAwRDJCMUY4Cis6MTBCNEQwMDA0QUFDNjM4NzIzRTQwREMyM0U1Q0U1NUQ0QkZBNzk1M0M5Cis6MTBCNEUwMDBDOTVEREUyMTU4ODdEM0NCRTVDRjgxRjYyNDhDMUIzNzhECis6MTBCNEYwMDA2REI1ODdFQzA4QTE5RjBCRTExN0U5RDA4RTgzQTQ0NEJBCis6MTBCNTAwMDBGOUNDNjFDMkIzNTlGRUNDRjZFNERBNkNCMDdCMTJBMDgwCis6MTBCNTEwMDBGMTY1RjY2NUIyN0JEQ0UzNjJEQTM3NjZGQjBENzQ4NEI1Cis6MTBCNTIwMDAwNUY5MzU1RUQwNkJBMUQ1NEQ3QTYzNkIzNUQ4NzMwQUJBCis6MTBCNTMwMDBEQTk3NEJCOUJEOTRGOTVGODhBRTQxRDE4RjY5MTZCMkU1Cis6MTBCNTQwMDA1Qjk3ODlGNTRCRkJFQkFEMzZDNkZBNkYwMDdDQ0NFNzE5Cis6MTBCNTUwMDA3NkQ2QjJDMjBCRDU3QUJCNUM1RUJCNDUzRkQ5OEUyRjg3Cis6MTBCNTYwMDBEQ0FGQUEzMUY0Njk0NzM2REYzNzEzMDJGQ0Y5MzIxNzMyCis6MTBCNTcwMDBCM0ExMUU5MkNGQjc2NDczN0RCQzRDRThFRDI1MjBDNzA0Cis6MTBCNTgwMDBDOEI3MTU3OEQ1RDlBREJCMDQ5RkVFOEFGMDJCMUJDODgwCis6MTBCNTkwMDBEMUNCRTk1MzhBMERGMTEwMjc5QUZCNTk2ODU3RjYwNDZECis6MTBCNUEwMDBDNEIzNDY5REFDRUUyMDIzRjlGRTA4QjAzQjlCRUMxOERCCis6MTBCNUIwMDBGQTI5Q0Q1RURERkI3NUY0NDdBQTEzRkRFODVCMzhENUFCCis6MTBCNUMwMDA4NjI3QkUwREY4OEJBRjRFRjA1QjdDNTE3RTI3QkYwMzA0Cis6MTBCNUQwMDBEQUM5OTk5Q0RGNkI1MjVEN0U3QUFDQTk4MzUzNjc0N0M5Cis6MTBCNUUwMDBFREIyNkE2MURGNEQ2MEFEMjQwN0MzRkMxODE3RTdDQkVECis6MTBCNUYwMDA5MUZEMThCRUZGQzhGOTlDNjJGRjY3RDY4RDdFRTJCQjQ1Cis6MTBCNjAwMDAyMERGRjcyREYwOEI3Qzc3N0I4RDkxQUY5Njg3NDZFNzE3Cis6MTBCNjEwMDBCMzFGNjQwQkZCQkE4MDE1MTA5Rjg1RDYxMTVGMzg0NUE4Cis6MTBCNjIwMDA5RjFEOTM4MTVGMzg5RTg4M0ZFMjI1N0U4NUJENkRCNzYzCis6MTBCNjMwMDBCMTdFMUJEMEU5MDhEMjFGODA3NERCNTkyMkFFNzM0MDYzCis6MTBCNjQwMDA3RDg1RTQ2MjIwOTNEOUY1N0MxMDBDNThENUIwOEU4RUEwCis6MTBCNjUwMDAwMzQ1MkNERTAzRkE2NUMwQ0VEMjc2NDFCRjMxRUFGMjUzCis6MTBCNjYwMDA0NTFFNThERjQwQTkzM0IxODEzNkQ1QjBDMTZFM0YwMkM3Cis6MTBCNjcwMDBFMzlFNzJCMzExRUQ3REIzM0M0Qzg3N0ZBMDFFRDg5QTM4Cis6MTBCNjgwMDBGNkFFMTdFMUQ5NkE2N0I0REYzMzc2QjEwNkUxREEyRTk4Cis6MTBCNjkwMDBEQkRBRUY2QTRBQjExRDI3REIxRkVFNTZBMUZGOTNGMUZCCis6MTBCNkEwMDBCQ0ZENjFGNkE1REQ1QTJBRDE4QkY4MkE0MUQwMjM0MTkxCis6MTBCNkIwMDBEQUVGMzM3NDc4MDUzQUI4OTI3MzY4OUY3MTk5RjA2RDM4Cis6MTBCNkMwMDBCNkVCQTU5RTMwRUZDM0U2Nzk3RjI3RjcwMzQxQTc5MTNDCis6MTBCNkQwMDBENjNEMEM1RTYwQ0QyRjhGMkUxN0VGQTM1Q0I4QzA1RkY4Cis6MTBCNkUwMDBENkNCQzVGMDcxRkFDOTdFQUYxNUVCQjYyNDNDOUYxNkQ4Cis6MTBCNkYwMDA4QUUxNDc0NkYwQkZDRUZFN0JCREJGMDA3ODNFQTRBMEU2Cis6MTBCNzAwMDBEREFCQzJEQkIzMTk1NzFEMzA4RTUyRjhEQUJGQTNGRTkyCis6MTBCNzEwMDA1Nzc2NkJFMzEwOEY1NkU4ODA3QURFQ0U0MjA0OEY5NDIyCis6MTBCNzIwMDBENzM4RTQwMzJCRTJCRDlGOUU4M0ZFMUQ1MkE2RTAyMDg2Cis6MTBCNzMwMDA3NTFFRTQ1RjA1RkE1RjQyRkM1Q0U5M0U1OUNFRjVEQTFFCis6MTBCNzQwMDAwQUIxRkY1NUUwOTQzMDVFNDUxNzJCNDVGRjNDNkU0RDI2Cis6MTBCNzUwMDBEMzgxNkRBOEU3NTQyNzVBMTQ3MEZGNDIyOUMyMDdDRjNFCis6MTBCNzYwMDA1NTI3NUQyRkE4NDgzN0UwNjc4M0RFNzlBOUU0NEZCRkVFCis6MTBCNzcwMDA3OTBDREVFQjFDQjBGQTlEMzA2RTY3RTBDNzBDRURFRTg1Cis6MTBCNzgwMDA4QjMzOTgxRjE3REQ4MTFEMDFCRUZBOTA2N0ExQzM4NzE3Cis6MTBCNzkwMDA3MkQzN0ZCQzYzMUE2M0E3REFEODQwOTk3RDM4QkMwM0EzCis6MTBCN0EwMDAyRkM3Mzk3Q0IwRDg5MDk2MzRGMzU5MThBN0FCRDBFOTlECis6MTBCN0IwMDA0MTdCRUU5RDhENTYwN0QyNjk2MDczODM4NkM4Mzg5MUIwCis6MTBCN0MwMDBBMkY1Mjk3MEJGQ0IxNjYyRThERjNCMzZCNjJGNDRGRUU4Cis6MTBCN0QwMDAzRTYxRDdGQ0UzRTBEQUI1NTlCQjFCRkQxMEQ1QjdCODI1Cis6MTBCN0UwMDAzQzFERTAzRkQwNjUyQjBGQzdEODlGRDdFNzcwN0ZFN0EwCis6MTBCN0YwMDBBRDk3RUVBNEY1MUY0OTcxRjhFMzYwREMyMThDNkYwMDcyCis6MTBCODAwMDBGRDhFRDg3N0E2Rjk3MURDNERGRjJEMERDNzNGQjI2NkNFCis6MTBCODEwMDBBQkZGNjU4MEVCQzgyNjI3N0E1MkVDQzgxRTU3MEQ4RTA5Cis6MTBCODIwMDA3QjY0NkVCMzc3QUQ2RTdDRDdGNThFNTZCQzNGMzBDOTY2Cis6MTBCODMwMDBFMTk4NDJFQjc5MkZEMThCRUJEOTk4M0IxRTc5QjMzMzRBCis6MTBCODQwMDBDNTMxQjkwOTlGQUY2RDY2Qjg1RTg3NzdBNzFERDdFNzg5Cis6MTBCODUwMDBCMkIxRERCOEJGN0NDOTdCRTFDRDAyRjQ5NzdDOTZEOTRCCis6MTBCODYwMDBCNzQwRkZGRkVBMEZERDlBODNGRUM5ODY1MzBCNTEyRkM1Cis6MTBCODcwMDAzOUNBOTJCNkUwQjU1M0MwMjlGNzJCNDlERkExOTQ0NkU3Cis6MTBCODgwMDAxN0VFNjM5REFCOUI3ODFDQzY2QjY5MjAzQUE2NTg4MjY1Cis6MTBCODkwMDBCODFGNzUwNkQ2QjhBNkNGRTBGNzlCQzcwQ0M3NEIyN0Q1Cis6MTBCOEEwMDBDNjVENjYyMTlDNkJCRDZCQjNCMERGODc2RDIxRTgzNzQ5Cis6MTBCOEIwMDAzNEQ3NTkxMzBCOEZDRDM5NUM4RkI5REE5QjMzMzYwMEVGCis6MTBCOEMwMDBEQzlEN0I1QzFFQzQ0RkE3MTJEQUREMDA3OEQ1RDJERDhCCis6MTBCOEQwMDBGRTI3N0NDM0RGRkI4MTc4NEZGMjA3RDA4OUU0NzA3REJGCis6MTBCOEUwMDBDRUE0M0Q5QTBERUQ1NTRFNDdDMDhCQ0JBRUQzOUIwN0YyCis6MTBCOEYwMDA2Nzk1QUVDQkQxRUQ5M0MzRTY0REU5MjQ3REQxQTk3MDE4Cis6MTBCOTAwMDBCOUZFNDE0RUNFMUUwREM2QzlGNTg3RUVDQjgxRjk4RTJDCis6MTBCOTEwMDA3NDgxQUNDREEyNzU0RTQ2N0I3RjI0RjkxOTEyQ0YzQkMyCis6MTBCOTIwMDAzN0MxQkE2M0M4RkZEMDZBMkJCQjYxMkNCRjVFMDdENzkzCis6MTBCOTMwMDBFOTlCQUQ5Mzk1MThGODE5OUFEQjk0ODE3MUFBMjNGMENECis6MTBCOTQwMDBEQzAyRTMwQ0VENzFGMTJCRENDRjQwRkUxQTgxM0ZGM0ZBCis6MTBCOTUwMDA3MkI4QkVDRjlBMTlFQ0M2RjVCMjE5N0U4QUYzQkQ5OUJBCis6MTBCOTYwMDAxREVDQTEzNjZCRjU2MkZCMEJDMEJGOEY3RDRFRjg5N0M3Cis6MTBCOTcwMDBCMTQ5QzBBRkNGQ0NEQ0EzODE0QkNBM0NFMzBDNzZFQjIyCis6MTBCOTgwMDA0OEZCNjc5MDBERDk3MDNGREU1NEYyQTcxNkY0MDdCQTUyCis6MTBCOTkwMDBCMzFDM0VBNzJFMkUyOEVERTgyNTk5NUNCRjA1QTc5RDc4Cis6MTBCOUEwMDBDRDgzOUQ5QjU1Q0Q1ODRCRkUwREQ4Q0IxNDFGRjRDMEI1Cis6MTBCOUIwMDA2RkFDRjg2MDEwRTM4MTNBN0RCOEM0RDQ5NkY2RTlCRjY1Cis6MTBCOUMwMDBFNjA4RkI0NUQ4QzlBOUJFOURDMUY5RTg3RkJDNjFGNTcxCis6MTBCOUQwMDA4NzAxNkY2OUY4MDJCNDJCMTcyQjYxQjRENzM3OTVGQzM4Cis6MTBCOUUwMDAzM0Q5RjE0Q0Q4NzE0QjA0OUNCRjZDNzNCMUIyNjkyQzQ0Cis6MTBCOUYwMDBFMkNGQUQxMEY3MTM1QTRFM0Q4RUZFNzUwMkM2M0YzMUIxCis6MTBCQTAwMDA1RURCRTJGNDUxRkMwNTg5MEZGMzU3ODlGNTQ5QkY4RURGCis6MTBCQTEwMDBFQzQ4NThDRjhBMTYxMTA3NjVCQkI4QkVCMTA2RjI5MTQzCis6MTBCQTIwMDAxRjYwMUQwNkJGMjRDODRDN0VDODZBQkJDMTlGQUIzNUQyCis6MTBCQTMwMDBEOTBGNjZCRkExQ0E2NDM3RUM0MERCMDlFRDQyNUI5RkJBCis6MTBCQTQwMDAwQkY5RTlGRDE5Mzk0NzMyN0NGNDU4RUI5N0Y2M0RGNEQwCis6MTBCQTUwMDAwQjE1MEU2RTE5RDJFRDNGODM0MkZGRkNBQzREM0Q4MUJDCis6MTBCQTYwMDBGQTY4NEJGMDMxMTdDNkUxQkI2RDYxMTdFQTkzRUVGMjRECis6MTBCQTcwMDA3QjEzOTFFRkJBRUJBQ0U1Qzg2RjAzNkRFNUQ0RUZBRDg2Cis6MTBCQTgwMDBCNjIwNUQ2REI5NUM2RjU0RkFENThGNzAzRjkxRjY1OTUxCis6MTBCQTkwMDA1NTc5RTk4OTBFMUQ1RDJCRDVBRjlDRThEMEMxNUY1MTZBCis6MTBCQUEwMDA1ODY5Njg0QkZFQUFCMEIyRDZCRTE4RkI0QjVFQUU4QzhFCis6MTBCQUIwMDBCQkE4Q0M2MDhGNUE5RkYyODc2MkVDMTdGMjFBQ0Y2QzRBCis6MTBCQUMwMDBFRkVCRjEzODJFRDc2OEY3M0UzMDYzRkVEOEQxRUMxOTkyCis6MTBCQUQwMDBCOTRFODkxRkI5N0VGOTdDMjQ3OEZGMjM0N0ZBMjc5RjQ2Cis6MTBCQUUwMDAwRERFQ0M0RjA4QUYxOTRFMDlGRjQ4RkQyQjcwMTM5QjlDCis6MTBCQUYwMDA4NEYwNzZBQ0QwNjYyMDFENDM4NUI5ODBFN0FBMzI2NTE0Cis6MTBCQjAwMDAwQkU2NjU3RTI2RTI5NTNGMEIyNDg2MzU4MEU3RDU0QzEzCis6MTBCQjEwMDAxRUZGOEM2RkUxN0U2NTdDNTlFNTQyREM5RjNFMjlCREFFCis6MTBCQjIwMDBFRjI4NTQ0ODNFQUIwMzRBNTg4NTdGREUyQ0ZDRDU1Rjk2Cis6MTBCQjMwMDA2NjMyQ0EzRjgwQkNCRTk5MDhFRDVGQ0NCNUYzMzgzMjlGCis6MTBCQjQwMDA1MzE3REYzNjNCRUFBN0M2RDdGMUZDQzQwRTA3RjNGNzVECis6MTBCQjUwMDBFMzdCMzdCQUZEOUJFMUZFMzIyOTdGMzVDNjNDNDQ3NTU1Cis6MTBCQjYwMDBCNUREQjBDRjU0OThGMjBFRjFBNjdENjY3OUFFQjBCQkNDCis6MTBCQjcwMDA2NzAzREVBNzQ0RjEzRTkyRkYzMTEyOUYzMERCODUzQzI0Cis6MTBCQjgwMDA4QzhCOTlGMTczOEYwOTNGNjY3RkE3RTI3OTkzN0M1Qzc4Cis6MTBCQjkwMDBBMURGNzNBMDJCRUZENTY0QjQzM0NBMTRGRjM0QTQxRjA0Cis6MTBCQkEwMDAzRTgyRjdFMkQ1ODM5NDBFRDkyMUU1NDhGODdCMzI1RkQ3Cis6MTBCQkIwMDBCNTYzNjkxNUY5N0I2RkExM0QzMDk2RjI0RDkzMzE1RTA3Cis6MTBCQkMwMDAyREM3OTc3RTVFQUU1RkZENDY2RUZFQzg3MDBDOEFGNzhECis6MTBCQkQwMDBCNjU2QzZCNjEzMDZEMTRFOThDNUFGRDdDMTc1RkFEMkMwCis6MTBCQkUwMDAwNTY5QjFFQzg0QzEyMjYxMjdDMDczQjQwRjA2Rjc5NEQ0Cis6MTBCQkYwMDBGMzZCOTFEMTRFNjBFNUI5OTdDMUNCMjY1QTZGRENCNDk3Cis6MTBCQzAwMDBCQ0IxQjFFNDZFNzA1NkU4RTFEQzA5RDE3NjQyNjYyQjM2Cis6MTBCQzEwMDAyQkQzRTFGREFCRDlFQTNGRTI3QTJCNDUxQzQyQ0UwNzlDCis6MTBCQzIwMDBGQUZEQjBERTBFMzNDRjc3MjhDN0MzRjE1QzNFOUVGNDM5Cis6MTBCQzMwMDA4NUJDNUU4RTdFMzY0RjJCNDMzRTdCQzBBRUQ2QTBCRDBDCis6MTBCQzQwMDA2NzhFMjdGRDMwOTdEQjg5NUQxOTZBMEIzRTY3RUU5Qzk2Cis6MTBCQzUwMDBDQjhDQkI0OUM2QUIzM0IzMjdGMkY0MDNDNTdENENGRTk2Cis6MTBCQzYwMDBBMEY0OUZGNkUzQzNGQ0E4NUY2OEYzNzBCRjMwM0VGNTE1Cis6MTBCQzcwMDBDMjYxMEYzQzVBOTcxQjdBMUVGMTM1Rjc0MjU4QjM4MEM4Cis6MTBCQzgwMDBEQzM5MTcyQjY0M0YzOTUzMTlEOTNENTdFQzg3NUQ2MTc3Cis6MTBCQzkwMDBCRjJFMTQ2QUUwRTdBRDhEM0MxRTVGOUE2REEzNzY3Q0UzCis6MTBCQ0EwMDBDODdBODBGNjA1NTMxQzI3NUU3RDhGRkNCMDI1NjAwNzlGCis6MTBCQ0IwMDA4OEI4MEREOTUzQzc4NTNEMTU2NEFERTRFRkI5RUQ2MTgyCis6MTBCQ0MwMDAxN0M2MkJDQzcxOUI5QTU0NEJGRjc0RDBFQjM1ODUxNzVDCis6MTBCQ0QwMDBBQTdEMzNFOTdENDNEQ0E3QzY5NzcxNzg4Mjc4RUU4MTJGCis6MTBCQ0UwMDBFQjkyMjA4RjAzMkRDMzM4MTA4RTVGMURFRUNBQzAzQzJGCis6MTBCQ0YwMDA5Q0RGRTY1NzE5RjdGM0QwQkU1OERFNzQ3RkQ2QzNCRTdCCis6MTBCRDAwMDBBQjE3MDc5MkYxMjU2OTJGNEE3QjA2RjQ0QkQ3NzhBNDJECis6MTBCRDEwMDBDQjAyQzU0N0JFQkYyOTRFNjQ4RTBCQzlCODhDMzk3RTk1Cis6MTBCRDIwMDA2NDhFMTc3RDlDOUI0RUY0OTBGNjk3OENGRjdDOTQ2QkYxCis6MTBCRDMwMDBCNEMzQUMzMDM3RjZFQjJFODIyRDE1RTRCQkRCQ0VEMjhDCis6MTBCRDQwMDA3NkNFRTBGMTFEQjQ5NzhFOTRGRUM0ODNGNjg1MzVDRjkwCis6MTBCRDUwMDAxNEU3QkNDMkZEQUQxM0Y2QTEzM0I4QUZCRTEyNjc0N0ZFCis6MTBCRDYwMDA3QjNCRTgwRDUxM0M3MTg5NjI5NDkzQzk3OTdDOUZGM0M4Cis6MTBCRDcwMDBFNEI5RjkzQzIyOEZEQ0Q5QjY0MUJFQUZBMUJFMDlBNjE5Cis6MTBCRDgwMDAzQUMyNzE0QTc0MUM1Njk4N0Y0NUYyOTQ5Q0FENEVDQUQzCis6MTBCRDkwMDBDQjI3N0YyNDE1QUZDQzBGRkU0ODE2RkEyMzFFQ0VERjJCCis6MTBCREEwMDA4NTEzNjgzRDRDOURDMENFRThGM0M2MDJFRTA4MUMyRUZDCis6MTBCREIwMDBGMDVCQjIzRUY5RkMyOTg4RTdGQ0U4M0M5N0MzREI4RUQ4Cis6MTBCREMwMDA5MjYyOTcwM0UzMTE0MDYzMkJFNzJCNEYyNDdFOUY4MTAwCis6MTBCREQwMDA3MTlENzUzRUJENUQ1MThGNzk4QjVDQjQzQjc5NUU0MzNGCis6MTBCREUwMDBERUQ3QzVDRjZEQzhCRkYxQTkyMTM1MTg2MzVGNUQ5NTVBCis6MTBCREYwMDA2NzMxRTQ0RjIzRjFGNzRDNDZGOTIyMzk4RThENzkzN0JDCis6MTBCRTAwMDA5MTFDQTBBQzRBNzhBQzMxRTJGNDAyREVENTQyMEUwMEJGCis6MTBCRTEwMDBFMTJFMjdCMDRDRDM0RTJCRTM3NTA5NUM0RTY0M0VDMjM1Cis6MTBCRTIwMDA1NjE0MkM0Rjg3RjUzNjZENTMyODZGQ0NCNDlBQzM2OERGCis6MTBCRTMwMDBERkFGMTFDRjFEMjJGRTY2Q0UyM0FEMTE3OTE4NjY1REVFCis6MTBCRTQwMDA0Nzc2REFFQTg3OENGOUI1QzYxRTYzREI2Qzk3Q0I3ODQ4Cis6MTBCRTUwMDBCRjBEODA0NEI4REIyNDlENDBDMTVCNDdDN0MzN0U1QUY5Cis6MTBCRTYwMDBFNzVGMjkxRTI0MUYyRUNFRkRBQTE3RUI1QTNBRTM0MkE0Cis6MTBCRTcwMDBCQjFCMzBBRkRERUJBMjc4MDhGOTkwMjgyRkZERjAwQjRCCis6MTBCRTgwMDBFQkQ5QjZCN0YwMzE1Q0NGRjYzQzJCOTc3Qjg1RDdCOUIxCis6MTBCRTkwMDAxQzRFNzlEODM1QTRFM0I3RUQ4MkNGNjZFNUY5NzhEQzlFCis6MTBCRUEwMDAwNUY3MjU1MDg5MkMzNTk5RTQ0OEQ2QjUxQzQ5RTE3NjJCCis6MTBCRUIwMDBBNTIzQzBFREM2QTdBNkJFQkM5NEU3NUQ3OTdENEI2NjAxCis6MTBCRUMwMDAyMDVBREY1MjBBRjhDOTEyRjhDOTlDQjZEQURGMEZENzM4Cis6MTBCRUQwMDBBQzAwQUY0QjlBRjFBQ0QxNUZCRDM1RDM2ODU3NjY5QUQxCis6MTBCRUUwMDBGRDU1NTNGQjQwNUVFQ0JBOTY2ODlFNERDNEREMDVGQ0UzCis6MTBCRUYwMDA2NkI5RkE1RTFCQ0ZCN0ZDMzNGOEFENzg3REFBQ0Q0M0E3Cis6MTBCRjAwMDBEN0VGQjc3OUU5REFEN0U2MjMzQkVEOTlCNjRDQkE0QUQxCis6MTBCRjEwMDBCQzNGNjAwRkQ2NjM1RTRCQzYyMTY1N0NCQzNGOEZGQjg4Cis6MTBCRjIwMDA2RjJDQzBFMUE4MTA2QjU5Njg0RDRENDQzQzFGMEQ3MDNCCis6MTBCRjMwMDBCQjcwQTRGREE1QUFEQzE4MDdCRDNENjhDQ0VGMkRBRkYyCis6MTBCRjQwMDAzMUU2RjdFRTlCQTlCRTk0MDdGMDI0Q0NGNERBNDNCQUFECis6MTBCRjUwMDA3Q0Q0MUFCMUZFMUQwRkYzN0M5MzFDRkZFODM3MzlERDRBCis6MTBCRjYwMDA2NUZCOUM1OEZGQ0YwNDVGMjRCQzlDNjJGNzAxQjEyQTlCCis6MTBCRjcwMDAxRkFBQkMxOUUzRjZDQzkzNzM0NUY2RTAyRjg1NUMyNjI3Cis6MTBCRjgwMDA2Q0Y2RDgzMTJFNTREOUJGQzI4MUUzQUNEOTBERTNCOEQ5Cis6MTBCRjkwMDBBRjdDOUNBRDY5MTNEMzhDRjk4NUFGREQ4MTcwMUM4REFFCis6MTBCRkEwMDBFNDE3NUFFRkMwRkNDMjUxOTE1RkY4NDNERUJEREY0MTk4Cis6MTBCRkIwMDAzRjZCNTY5RTdBMUFGNTg2MkI0RjNEODNGOEY4ODNEMDU3Cis6MTBCRkMwMDA5QkQwM0VBNzZGQzNDRkVCNDkxMzQ3OERFM0ZGMjEyRkQzCis6MTBCRkQwMDA3Rjc4MUNERkJBNDA2OThENTVEN0YyQTE5MDE3RDA1QkVFCis6MTBCRkUwMDAxNzcxMUVFNjhBQzREMTNFRTA2REFFOEZFMkYyMzk3RTUzCis6MTBCRkYwMDBEQTdGQzk1QTcwOUNGNjFGQjM5NjY3NjJEOEYzMkM1RjNDCis6MTBDMDAwMDA5MTcxQjk4RjQ5MEY3QUE1MUUwQzVFOEEzNTlFRDU1OTVDCis6MTBDMDEwMDAzOTE5RjE3RENFQ0VFQjYyQ0NFM0M1RTUzQjI0N0NDRTc1Cis6MTBDMDIwMDA3QzdDM0YzNTAyNUY1QzdFN0U3NEJDMUQ4MDgzMDFBNEY2Cis6MTBDMDMwMDA5M0NEOTM0ODc5NEQ3NjM3RTUzRjI1MUYyNUQ0N0I2RTA4Cis6MTBDMDQwMDBDM0JBMDU3MDJDMTlFRTJGMDlDRjc5NkVDQkMzMzhDRTQ5Cis6MTBDMDUwMDBDRkE3Rjg5RjYwMjNEM0Y1Qjc4MkJGQ0UwQkY5M0E4N0ZECis6MTBDMDYwMDBGMjA1NzI3NDQ2QzhENzI5OTQyRkI4OUUxNEYyRjVFQkU2Cis6MTBDMDcwMDAzNjNGQjU3RkQ5NTY0OEVERTM2RDJBQjU3RkRFNTY0RTgzCis6MTBDMDgwMDBEN0MxQjYyMERERkY1OTVCMERCNTNCREI0Mjc0M0Q1QThECis6MTBDMDkwMDBGNkQ4Q0RCOEVGN0NGMDNEODVGNEYxNDhGMERDRjVCODhBCis6MTBDMEEwMDBENTIwM0YyRDdCMTMwQ0YyQjZGNkExRjE4NkY2RUExRUUxCis6MTBDMEIwMDA2M0ZFQkNCMTYzOEFBMUJENkE4MzMxN0ZCRUIyRDU5OEVECis6MTBDMEMwMDAzRkFGNkQ5OTYzOTg2RjQ1Njg4MTQ5OUU2RjM1Qzk3QjE1Cis6MTBDMEQwMDA5NUExQkQzMDlGREI4OTU1RTVCNTg2Rjc5Q0RFNDY0M0NCCis6MTBDMEUwMDBCRjg0QTUyQzE0OEJGRUI3RTVGM0I4QzlDQjI1QzU2Mzc3Cis6MTBDMEYwMDA4NzQ2ODk3MzM4MzZEQ0ZBMzZEQTI3OTFCNjJEQzREMEY0Cis6MTBDMTAwMDA5RTc3NkM1ODQyRjcxRjg4RTNGQjlERjlCRDI2QzFBRkFGCis6MTBDMTEwMDA5RDY1QUI4M0YzMTlEQTQ1OEJBQzdBQkJFNzlFNTlBMUQ5Cis6MTBDMTIwMDBFNUY5M0E3RkQwRTFFNUZFRDhDNUE5RDU1NjJGRjBEMTgzCis6MTBDMTMwMDBEMkIyRjc1RUJEMEVGODI4MzRDMEM4RUY1MUMxRENGM0FGCis6MTBDMTQwMDA4MjFENUNEOEJBNkJDMTc1RDBBRUQ2RDYxQkZDQzdFMkQ3Cis6MTBDMTUwMDA5NjgzQUY4MEY4QjI0MEQ5RDFGNjY0NzgzRjNGM0JENEE0Cis6MTBDMTYwMDA4NEUzOTc3ODJGQkM4MkVGQ0Y1RjlDNkQ0MzM2N0YyMEFFCis6MTBDMTcwMDA4OTkxM0Q3QTJFQ0QxMTNFMTA4MzFGRUUxNzcwQ0JGQ0I2Cis6MTBDMTgwMDBENTI3RERBN0NENzlGQThDNEM1NjhBNzFFNDhDQ0MwQjdGCis6MTBDMTkwMDBBNUE4RDdBMEFENjJGRUVCRTBBQ0QwRkQwODFGREM1NzMwCis6MTBDMUEwMDA1MTRGM0U5MEI1MzYwM0Y3OTM5MUYyNDY4RkU0MUJFMzZGCis6MTBDMUIwMDAwOTEyQUUxRDI1MUM5RUEzMjJCRjMwNjRDQTJGRThFMkRGCis6MTBDMUMwMDAwOUVERjlBM0M0MTNDRTg5Rjc4NkJFMUQzQjlFNzA0RUMwCis6MTBDMUQwMDBFNDFEQ0VDOUJDQzNDMzU1MzFGMzBFRTcxNjhBNzgwMkZECis6MTBDMUUwMDAzQ0M3MzhDMkI5M0QzNUZDQkE3MEY0QkM4MzVDMUZFQzY3Cis6MTBDMUYwMDA0NzdCRjIwRDc5MDc2MUU3OEJCOEY5RTAyQzc1MkYzRThDCis6MTBDMjAwMDBGRjZBQjZEQThCRDczRjY2QTlGQjEwOEY0Nzc1Rjk0RkU3Cis6MTBDMjEwMDBDRjQ0NURGRUIzRUMyNzg2RkNFN0ExOUNEMDkzRjkzQ0FDCis6MTBDMjIwMDA2RkNERDBBRjZBRDdEODUwREMxNENDQzcwNkVGODlDNTI0Cis6MTBDMjMwMDBDN0NGRTRDQkY4NjJGRjY3Q0FDRkVBRjJBODk2NEIzN0M0Cis6MTBDMjQwMDBCMTJCQ0UwMzVDNzFCRjQyNUU5NzYyQjY2RjEyMTAyM0IyCis6MTBDMjUwMDBFM0EyNzZERkQzNzlBMTlGMjBERTNBOTI5RUYzRjFGQTMyCis6MTBDMjYwMDAyQjRCNzRGRjQwRTUzNzgyM0Q2NDlFNEY4RTg3RkEwQTYwCis6MTBDMjcwMDBGNUQ2MjA0ODBDRUUzM0RCOTMyRUQ0QTE5RjcyNENEMDIwCis6MTBDMjgwMDBEMzdDM0Q5RTJGRThDOTNDQzk0OERGQTdGMzgyQkYyMDdECis6MTBDMjkwMDBGREYzNkM5RjhGRUFEQUM0RkQyQjg1RTM0OTQ3RjA2RDBGCis6MTBDMkEwMDBCNDYzM0IxQkFEQkUwM0RDNkVBN0I4QzUwRDgxQTQ3MEEzCis6MTBDMkIwMDBCNzJFMUY3QzExRjdDQjdDOEMzRjBFNEQ3NTAwQkREQjdDCis6MTBDMkMwMDA0M0FGQjhCMTFFRkM5REJEMzZBQzg4NjFERjRERDRFQ0U4Cis6MTBDMkQwMDA0OEZGOUE0Q0JFQkZDREY3ODZCRTM0MzQ4QTlDMDMzRkRDCis6MTBDMkUwMDA4Q0I3NzgwOTBFOEJBNTkwQ0ZDQUFGOUE4MjU3NzNGRjhGCis6MTBDMkYwMDA4MUJERUY0RkYwQzE3OERGRURFNUY5QUYxQjdBNTdCQjk5Cis6MTBDMzAwMDAxQTc1RTNERjMwNUJFQzk3QzgzMzc5OTg5RjU0QzI1OEI1Cis6MTBDMzEwMDBBODVFMTM3OEVGQ0QwMkNDQUZGODJDMTRFNzc4NjdFMzcyCis6MTBDMzIwMDAwN0M3OTY2M0RDNTFCNTUyRENGMTlEOEQxN0E5N0REQzAyCis6MTBDMzMwMDA2N0M5NDVGMkJERTNGRDdGQzdCMEZGMERERjVDMzM5MUY4Cis6MTBDMzQwMDBGQjJEMUMxRkFCMzZFNjNFRDk5RDRFNzkzMUM3NkM5ODRDCis6MTBDMzUwMDBFN0I4N0EzMTcxQ0E4QzY4RkU2Qzk1QzI4MkIxRUM5OEVDCis6MTBDMzYwMDBDOUIzMzlGRjJGNTI1QkVGNDBCODE2ODU5QzBDRUI5QzhDCis6MTBDMzcwMDA4RjM3NkM3RDFCREJERjJENTU3QzU2RjRFQjMzRjkzQzlFCis6MTBDMzgwMDAzNTdCNkQ1NDRGMEJGODU5ODdFRDM3RkMwOTBDRTc5RDUxCis6MTBDMzkwMDAxRjNBNjhDM0ZFMUY2NjI5RUMzQUU1MkFFMjU1QkQzODBDCis6MTBDM0EwMDAwMUU1RjAxREU0QkYxOEYwNUY5NEYyMkJFNDY4QkEwRENDCis6MTBDM0IwMDBFNDNFMDdGMTdGRDhBRDhGNTM0QTdFRDJGMkQ0Q0NEOTc4Cis6MTBDM0MwMDAxNEY3MEJCNTA0QzlDRTVEN0ExOUZCNzQzM0FGRDNGRUY1Cis6MTBDM0QwMDBERTA1MUJFNjFFRTIxRjZGOUQ4NEYxQTU2MTcwOEUwMEQ1Cis6MTBDM0UwMDA1RjkxQTBGQjFGRjM3OTFDRjM4NjVFREI5QjVGNDE3RUIwCis6MTBDM0YwMDBERTY4QTczQTg0NTk3OUMxMzlCM0Y1RkVENjU1REUzN0UwCis6MTBDNDAwMDA2NEZEREE0MDIxM0Y4RjAwRTYzNENEMDNGMDY2REEwMEE4Cis6MTBDNDEwMDA4RTM4MjVERUFGNzFCOUEyRjg5QzRCRUM3RkQwNEYxRDUyCis6MTBDNDIwMDAwQkZENTZCMUJFN0U4Q0YzMzE5QkJBRDM4QUYxQzMyMjg5Cis6MTBDNDMwMDAzQkY5QzdDQjU3REExMzkxMkVEMTdDOTlERkUwNkY5ODg3Cis6MTBDNDQwMDBBRjY3MzAzRjQ2NzUxQTJFQkEwRTgwOUY4REY5MTJGQ0U5Cis6MTBDNDUwMDAwMTRCMUMxRURBODREREVGN0Y0NDlEMEE3MjJGRUE0QUVECis6MTBDNDYwMDBFRjNGNzRFQjIzNTg1NzdBQ0NDMkRCNzcxREJBRjVGQTRECis6MTBDNDcwMDBDREIwQTQzMzkzNUI4RkREMEVFQkVBREVBNUY4MzdGOTgwCis6MTBDNDgwMDBGMEJBN0Y3NzIzOUVBRkQ4QTBGOENCQTE2QjdERkY4RDRDCis6MTBDNDkwMDBGNTk4NjI2Q0VFNzI5MjhEN0Y3QURCRkQzNzIzQkY1RTdBCis6MTBDNEEwMDBGNDMyMEZGMkYzRjIxNENFQ0Y0RDgzMkM2QzgxRjYyREMzCis6MTBDNEIwMDAzREJCMjhFRjE5MUNCNDUxREQ5QUNDQ0I5RTRDRTE3OUUxCis6MTBDNEMwMDBEOTdGNjhFQjI3QjhEMUFGNUQzODlCQkJEOEY4MzNDRUE2Cis6MTBDNEQwMDAwRjcwNjAxQ0I1Q0M0NkY5RDJGMUNDRDM4OUZCNEJCQ0I0Cis6MTBDNEUwMDA5QTVFQ0FFRDY5OEY4M0YyM0M4QjE5RkIwRUM2NzkzNkQyCis6MTBDNEYwMDA3MEJGQjk0OEQ0NDVDQTNDMTYzQkNCRkREQjE2Rjg0NUE2Cis6MTBDNTAwMDA3RDMyQkVEQ0U4MUZFNzlCRkM1RkE5REZDQ0Y5MTZFMEJCCis6MTBDNTEwMDA3RjBERUY3N0NFNEUzNEM0RUI0NjhBREJDQkVCQjM2MEI2Cis6MTBDNTIwMDA0N0UwRkE5RTEzNzlEQzQzNjBBRjYzM0VGM0M3NjBBRjI4Cis6MTBDNTMwMDBFM0Y1NzlCMEQ3RjFGRThCNjBBRkUzQjUxRkVDNzVCQ0M2Cis6MTBDNTQwMDBCRTBDRjYzQTVFMEY4M0JEOEVEN0Q3QzA1RUM3RUJFQjRECis6MTBDNTUwMDA2MEFGRTM3QkZGMEJFQzc1QkNCRTAxRjYzQURFN0Y3Njg1Cis6MTBDNTYwMDAyRURGRkYzQUE3MzlDMjlCMDFERTRFM0JGQjM1RjI5NTI5Cis6MTBDNTcwMDA1NjJBRjJDMjIyNEZCNjJENjkzQUVERUZBRThGODBDQjJDCis6MTBDNTgwMDBDMTlFMUE1MDQyNzcyMTNEQjQzNDE3RjUxQjQ4QkNGMEM4Cis6MTBDNTkwMDAxRkZGMTdEQkRCRDJDOTBGNjEzNkRGQTEyMTc4QUZFM0M0Cis6MTBDNUEwMDAxQkU5RkU2RTY4NzYzOTE4RTlGQjUzNDc5OTQ3MDE3QjEyCis6MTBDNUIwMDBFNkZDRURDQTRDOENBMzlFQjk0REU5QzNGNkMwNkQwQUVBCis6MTBDNUMwMDBEOTEzRDM1MUY0NzJBMkZCNjhGMUZCQkUwM0I4OUZCNTM3Cis6MTBDNUQwMDAyNzMyQzE4RjRGRjZBQUMwN0ZFNzExMzZFNDU3MkRBOTQ1Cis6MTBDNUUwMDAxRUZERDI3OTRFRDkxRTUzOEZDRjFCMzcyOEMyNEYxRDQ3Cis6MTBDNUYwMDBCNzRGODUzNTZDNTNFNEZCQTlCREQ4QkY0M0JFMkZEQUQ2Cis6MTBDNjAwMDA4MzE2RjlGRUJBQkRFODI3MUY4QkNDQjdCQTU2NEQ4NTA1Cis6MTBDNjEwMDA3Njg2N0NCRUI2MEVDNzNGMTVBOUFCOUJCNzEyREYxRjRGCis6MTBDNjIwMDA4ODhDM0ZCQjE3REYzRjkzMjZDN0JGQjM5NkRBNzZEOTE2Cis6MTBDNjMwMDBGRUE3OTVENDlFQzBGQkNGN0FFMUJBNDdCMTZFRTU2QUZBCis6MTBDNjQwMDA4RkQ3MUVFMkZCMUZFQzYzQUEzRTlGQjNBOUQ4NEFGQjFCCis6MTBDNjUwMDA5RUFFMUU5Q0UyNkUzMkNGNkY0OTcwNEZCQjkyNzhBOTlFCis6MTBDNjYwMDAyRUNGNEZGMTUyOThDRjhFNzJGNkY1RDJBNEM5QTg3NzhCCis6MTBDNjcwMDA0RkE1Rjk2M0ZBMjlFNUM1OTFGQTU2NjNGQzU0NTU3ODNDCis6MTBDNjgwMDBCREJEODc4NUIwM0UzRTVFREM4RkVGRTE3NUY0OEU0QzFDCis6MTBDNjkwMDBEQkIwM0FGQTJCODkyN0NBQkEwNzE5NEZBQzU5M0Q3QTUxCis6MTBDNkEwMDAzQ0IxQTZENDE4NEY1QzI1OUU4RjE0NEY1QzY1OEEyNzM5Cis6MTBDNkIwMDBBRUQ4NjhDQTQzODQzRTU5M0NCMThFRjVEQkQxMEY2M0Q2Cis6MTBDNkMwMDBBQTQyNzI1NEU3RTk3Qjc1MjJGQUZCNjc3RDE0NEY2NDM2Cis6MTBDNkQwMDBCRUQ3MjlERTJBQ0Y0RkUwRkYyREIzRjFCQzE5NkY5RkUzCis6MTBDNkUwMDBCRjVCRjFBMjVGRDE3REI3MzIxMUFGMjdFRjU2MjZBMTE0Cis6MTBDNkYwMDA3QzlEQkQ1QkYxQTBCQzdENTg5MDQxRjhDRkZGOERGRkM0Cis6MTBDNzAwMDA3NTFGRUVCNzVFOEI5RkEzMjNGODAyQTYyQTgyQUI5MzE4Cis6MTBDNzEwMDA3Q0REMzBDRUE5QkI5NTcxRjhGRUNBRkJEMjFEQzgwRkQ3Cis6MTBDNzIwMDA2MDc3MEE3RUI0RUU0NUZFQjQyNjI4ODY3NkRFNjRDOUJDCis6MTBDNzMwMDA4RkUxNDc1MDNFRTY4RDE3NkQ2REY5NUU5NDlGNTI4N0VECis6MTBDNzQwMDA3QzdGMzNCNTU3ODQxNEQxRkZFQjdCNTFCRjFDOUIyRkVCCis6MTBDNzUwMDBGQjRGQUNDM0U3Qjc0RjkxRTMxRDIwNzk5Qzk3MjBEQkRCCis6MTBDNzYwMDBCQjQ5RkVCQTIyRTM3REZGMTFFQ0ZGMEJENDkwRDRERTZGCis6MTBDNzcwMDBCOTE3RTVCREI0NTJFODMzNkQyNjhEREY1OTI3QzdGRkUxCis6MTBDNzgwMDA1QTJGQzZBRDZBMkRGMkZEQzUyNEZGNEQ0Q0I2QzE3RUIxCis6MTBDNzkwMDA4N0Y2QUZDNEZFNzBENzBGM0ZBRUM1QjhENjFERjJCOTRECis6MTBDN0EwMDBGNkYxMjMwODRGOUQ2OEFGMkJGODk3QkRGOEZDQUY3RURDCis6MTBDN0IwMDA3RDdGRTZGOUNDRUQ5NTZDNjBFMTc1Nzk1MUI5MzBFRjhDCis6MTBDN0MwMDAyQjBENDVEQ0RGMjk2QzM5ODhFQThCRDVCNUVFQjdBMjk1Cis6MTBDN0QwMDAzQzQ2RjM2QTI5RDU0MUU0NkY5Nzk1RUFFNzgyNUU3Njk1Cis6MTBDN0UwMDA3M0FDN0FGRTRCMDU3QzlDOEQwNTU3OUE1RjhCM0RDRUQyCis6MTBDN0YwMDBEQTIyQkVDRjc1Q0Q2NzMxRkREQzgzQjNFNjZGMkRDODdECis6MTBDODAwMDA4RkRBMEQ2ODIyM0FFMDVBMDI1NzBCNUMzRkNFMEEzREEwCis6MTBDODEwMDA4OENGOTFENjE4ODc5MTcxRUQyNUEyOUU3ODUzQzk3NzVDCis6MTBDODIwMDA4MkYzRjFGQzUyOTFERDJGQzJFMTAzRkE3Q0FGNEQ5QzAzCis6MTBDODMwMDA3M0FEOURDRkVCQkM0MkRENEVGMkQ3QUFCQjQ0MUQ4OTQwCis6MTBDODQwMDBENTRERjkwOERCRjU4RUZEOTQzNzEzRjlENDEwRDYxREJDCis6MTBDODUwMDA2NzUwNUREN0E4RTczQjZDQTYzQzZBOTc1ODZGNjlGNkFFCis6MTBDODYwMDBGQjk0QTc2RTdBODNENzBCQ0IzQzc2QkQ4MEFCMDlGNUUyCis6MTBDODcwMDAzMkMwRERCODVBMDk1QkUwQkQ0NjU0M0M5OEQ3Q0Q2NDYwCis6MTBDODgwMDA2MTVGN0EzNEFGQkNBMkNDRDZFRkMwNzM2MUUyN0MwNkE0Cis6MTBDODkwMDAxM0Y2NzAyNDFGNUVFREVCQzNGQTE4OUIxQUU3NTc3MTZECis6MTBDOEEwMDAxRUQ2MUZBNEJBMzhDQzE3QTVCMzQ4RkU1OUVBOTFDQUMwCis6MTBDOEIwMDBFNkVCRUVDNjNDQjU0RTZGNTE5RTNBOUUwREQzMUJBNERGCis6MTBDOEMwMDAxNzIyNzU0RDIyOEYxRUE5Q0YxMTdBNDBFNkE3MUJDNEVGCis6MTBDOEQwMDBCQTk2NDVGNEMwRTIyNTY4RTdDNjNGMjBGMkQ0MjJGRkFECis6MTBDOEUwMDAyQ0YzRDQ5NUE2NzM2RDhEODEwNTYzMjg5RUVCQjdGOTYzCis6MTBDOEYwMDBBOUFDMjZENTc4OUUyOURFNDQ4NzlCOEFGOUI5NEE5OTQ2Cis6MTBDOTAwMDBBNzNFNUE2MENDMzczRjYwNjdBNDc3QkIzMjhDN0NCN0I4Cis6MTBDOTEwMDBBMDk4RTc0M0ZDQzUzMjBFMTlERjFGODdGNjM3NzM5MUU1Cis6MTBDOTIwMDAxRkQyOERGMTlDQjFEQzFGQTFDMzVDQTZCODhFNkQ0M0Y0Cis6MTBDOTMwMDAyREM1MUZGMUI5MDI3Q0E4NjRCRUY2RUZBODk3QjE1REMyCis6MTBDOTQwMDAwQ0ZENkQ3OEJFMDVFOUUxQjY5MDNGMkFFMzNGNjhBNjhECis6MTBDOTUwMDAyQ0NDQTEzOEQwNzlFNDY3REI4NjdBMUE0NzlFNjc3RkIyCis6MTBDOTYwMDAzMjNFQjY3QzVDMkM5MDc5RDYzRTNCRjZBQkY1QkU3NjdCCis6MTBDOTcwMDAxQ0U3RkJDQzcxMjBFMTg3NDVFQzE4MUZBRjdGOTk1NDcxCis6MTBDOTgwMDBFMDkzNzY4OTlEOUZGNzYzRjZBNTU5MTQyRkY5QjgwMEI3Cis6MTBDOTkwMDBFRkNGRThGMzIxMUM3MjVGQkFBM0U4MzlEQUM3QUUzQ0U3Cis6MTBDOUEwMDAwRkNFREY1QkZCQTM5NzZBQjVFNDkxRjMxODM3MDUyMjNFCis6MTBDOUIwMDA3OTA3MzdBNkMwNTlCMkNDM0JBODg5RDg4RUVBNTk1ODE2Cis6MTBDOUMwMDA0OEExNDFDRkQ2QjVGQzI3RDBCMzUxQkIzRkEzMEU5RkEyCis6MTBDOUQwMDA3RkQxRTAwNzdFQkFBNTkwRUFBNzc4RkNFRDhCMDZGRjMxCis6MTBDOUUwMDAxQkY5NkEzREYyRTFCNTlFRTdDNUZDRTAzQTlDNjdBQkY2Cis6MTBDOUYwMDBBMkQ2QjhFOTVDMENGMzJCQTNFNzBCRUZDNUZFRTY3Q0VGCis6MTBDQTAwMDBFMUU1RTIxODdGOEI1QjhDMUVCN0U4MkQzNEU2RjUzRjNECis6MTBDQTEwMDAyRjcxOEI3RjA0RENFMTNFMDlGMjc0OTBFNDI5QzBFNUJDCis6MTBDQTIwMDBFOUFGN0RGRjgzRjUxRUMxRjU2RTU1RkFDMkYxRDZBQkI1Cis6MTBDQTMwMDAxRjM3NzgzQTJGRjQ2Qjk0QTNFOUE5QUUwNkI0Njc2MDY4Cis6MTBDQTQwMDAxRTFGQ0E1RjM0MUUwMjcwMTcxQUUyMjE3QjVCQUU0MUMzCis6MTBDQTUwMDAzQzA0RDZGOTdCRDI3RjY1OUNBRTdGMDU3NDczMTRFMUVDCis6MTBDQTYwMDA3QTU0NkU0N0ZDMTVGMjY1MDZBREFGOEZBRkVGMkYzMEVECis6MTBDQTcwMDA3RjRFMTFFRTAzNEY3MTdFODlFMjg3REI0OTNBRkNENDg5Cis6MTBDQTgwMDBCNUZDNjVGMDczMzNDMTc3ODhDM0Y3MDVBMDY3MUREMTg2Cis6MTBDQTkwMDBEM0NGRTFCRDlDRkZCREJFODBGQjE3RjA1RTEzQkQ5N0Y5Cis6MTBDQUEwMDBDN0Y5RTA1RTYxNTc4MzVGQkVFMDNBNUZENDJGNEZDRTk3Cis6MTBDQUIwMDA1NjlCOEJCODlEN0I2NzkxQTFDRTU0QkRBQjY4NzRCRjZDCis6MTBDQUMwMDBGOTlFQTJEMUZERTZGQkYwRkQyRjhBREZCQ0JGODBEQjIzCis6MTBDQUQwMDBGQkQxQkM0REQ4QzUzRkJFRDE0MkY5RTU3QUQxQjc3Qjc5Cis6MTBDQUUwMDA0M0Q1QTIxQkIxQUUwNkYwOEY2RDI3QUVDN0FBNUI0RjMwCis6MTBDQUYwMDA5QThERkJEQkE2RjM2QUYyN0IwNzcyNUQzNjZCREREODlECis6MTBDQjAwMDA3RTVGMTQ5RjZGOEQ2OTc1RTA3OUE4NjYzNUE5MTNDRjk0Cis6MTBDQjEwMDBERDJFRTg3ODhGRUEwNjFEQUFEMzg3N0VFMTk3QkNCRTlBCis6MTBDQjIwMDA0RUNDQ0I1NkE5N0NGRDhFMTYwRjlERUY5M0U3RERFNDJFCis6MTBDQjMwMDAzOTk0RTZGRTFCNUY3M0UwQjkzOUYwNUY1MjYwRkM4QUZFCis6MTBDQjQwMDAzMkZCNjlGREJBOURBNjczMjkzNjUzN0JDM0FGRDNCN0I5Cis6MTBDQjUwMDAxRkQ2RjU3RkFBQzg1NDRGNjg3REFBOUNCRUQzRDFBMTI5Cis6MTBDQjYwMDA3ODQ0OUQyRkQ1NjUzNDhCMzEzNjk1RENCMTA4RTM5NzM5Cis6MTBDQjcwMDA2MEM3RjkxMDBGMEI3NkVFMUFDMDdDOUFBM0MzNEFCOUFFCis6MTBDQjgwMDBGMzNGQjZGOUI2MUYwNjkxOEFFQkI1NTJCQ0UxODMwREFGCis6MTBDQjkwMDAwQUZGREVDNzYyOUVDNzZGMTI3OTdDNjY4QTMzQzg3ODQ3Cis6MTBDQkEwMDBCOEM0NjNEQzgzQkNGRUMzNTE3OEFBOENDRTM3RDZBRDQzCis6MTBDQkIwMDAxOUM4RTdCQzQzRjEwNjFCODc4Q0M5RUY2RjU0MEFCRTQ2Cis6MTBDQkMwMDBBQTBGQkNENzgxRUYyREYzNUEwQ0Y1NDNFNjc4ODQ4RDdDCis6MTBDQkQwMDA5OUVCRTQ3OTFEQTc0REU1NzU5Q0I2NEM1RTI3MUZDRkY4Cis6MTBDQkUwMDA1NEZBNUU0N0ZDOTYyQUEyNjdBNUNBRUIzOEMxNDgxMkUwCis6MTBDQkYwMDBERkRERTI3NEE5MDhBQ0E3M0ExRjczMUNDMTU5Njg4QzI5Cis6MTBDQzAwMDA0Mzk4RjlEMjRDOEY5MzI2N0EzQzYxRTNFNzkzM0EwNzM1Cis6MTBDQzEwMDBBRDdFMEQ2RTc3M0VCNEJBMEJFM0U3REE0MzE2OEE2MzU2Cis6MTBDQzIwMDA5Qzk1RjUyMTAwMjRDNkYzOTdCMzA4N0VDOTVFRUU2QzhGCis6MTBDQzMwMDBFNUY1MDI5MjJFQ0I3N0YyQkExMUVBNjU4OERCQTczMkNFCis6MTBDQzQwMDBGRDc3M0M5NjhCQjhDMjFEQUM4RkNFM0JBQzY0NDM3NjZGCis6MTBDQzUwMDA5NDgzNTUxODRBQjc2MjNDQzY0N0Q3MjZBNjZENjE4NEFGCis6MTBDQzYwMDBCRjUwNTczQUNDRjc0NEVCNzgzRkM2QjVGQjI3RDk5MzcyCis6MTBDQzcwMDBERUNERTQ3RTQ0MkNGQjM1OUFBRkI1QjE3Nzc1NzFGRUZECis6MTBDQzgwMDBCRkM1QjUzRTY5NUNDQkFBRDFGOTUyQUYyMzNDNERCOUMzCis6MTBDQzkwMDA3QzVDRUI4OEM4NEJDOEI4RDZEOTlERTI3QjFCRTJCQzU0Cis6MTBDQ0EwMDBDNTgwQkQ3NUYyNEUzN0Y2RjM5MTlFMTlCMzc3RjkyMjIwCis6MTBDQ0IwMDBFNDgzMjNCRDNGRjE4OEYzQUYxQjI3OEVGRTVEODg4MjlFCis6MTBDQ0MwMDBFMjE4RjVBNDNGMkY2MDM0NUU2N0ZBMTA5REEzM0U2OTE5Cis6MTBDQ0QwMDAzN0Q2RTVDQUVCRUQwMTU5QkYxOTUyOEI3NUY2MzFGMzIyCis6MTBDQ0UwMDA0NEVBMzhFNzE3RDM0NkMwQ0Y2QkNCMzhEM0JBRENEMDkxCis6MTBDQ0YwMDAyRDc4N0ZFRTA1QzEwRjhCOTVCMDAyRUJBRDcwMkJBRjk5Cis6MTBDRDAwMDAyQUJFRThGQ0NDNUM0N0ZGQjc3QzE4QzExRDg3RjgwMTQwCis6MTBDRDEwMDAzQzBFQzRGMUJBREE4MTc0NTZGMzRDMENGQURDMzg5NzQ1Cis6MTBDRDIwMDBFQkQxODFFQ0Q4RjQ5M0NGQzEzRUI5QkY3ODAyRjc5RjI1Cis6MTBDRDMwMDBDNkYwQjhDMkVGMURBM0M3MTVCRTU1MUMyM0FFMjBFOTJGCis6MTBDRDQwMDA3QjcwOUVBQTcxQkFGM0I2MjcyN0Q0ODlGRERCNDM0MUQ1Cis6MTBDRDUwMDBBQUQ3MzlERjYzRjU2RDQyRkNGN0I3QkU1NTA4RUQyNTVDCis6MTBDRDYwMDBERkIyN0EzMDFGN0VBREYzN0M5MzBBRDI4OUFGMkU5NzYzCis6MTBDRDcwMDBFN0ZCNTBFMEY3NjRBNEFFRkI1Qjk0NEZFRjhFRjg2N0RGCis6MTBDRDgwMDBEQzdFQUMxREE3NkJDMzk2NUMzQ0M4RkJCRjU4NUNCQzhCCis6MTBDRDkwMDAwRkNGRDk4RjY0NkZERTE3NThENThCRkU5Q0I0MzdBMUE3Cis6MTBDREEwMDBCRDEyREJGMjdEOTA4NEM5QTVBMDM0OUI1QTY0M0VCMUNDCis6MTBDREIwMDA4MkYyRjVEMUY5NTZFQzQzRkJGOEFDREQzOEJFQjQ1NzNFCis6MTBDREMwMDAwNzhBQ0JGN0ExQkQxQThDQ0M1RkJFMEZFREQ5NTNBNjU1Cis6MTBDREQwMDBGRUY0N0Q0QTE4RUZEN0M1NjVENEJGOTFDOUYxQ0JFQUZGCis6MTBDREUwMDBCMTdGMjRBRUM4RDY5MzNGN0FDQzIxREJGN0Q0QTMzREU0Cis6MTBDREYwMDBCRTNEOUQ4RjM3MTg1OERGQUI3RDBFRTFCOUQ2RTM3RjdFCis6MTBDRTAwMDBEMkZFMjNEOUZEMjdFREJDN0U1MDAzM0JFRDg5NzQyQzY3Cis6MTBDRTEwMDBBM0VDQjM3MkUxNTMxRDc4QzZBRTU4NTU2ODNGRkE5MzQwCis6MTBDRTIwMDA4ODgzMDdERDE2RTFFNzZDRUM0NUJGQTdCNjQ0RjJFOTVECis6MTBDRTMwMDBFMzU0MDczMjEyREZBRDdGRkU0NzhGNjhGQTc1NkEzRjExCis6MTBDRTQwMDBBQTM1QzBBREI1NTI5RDg4ODRGQjA0RjY4Nzc1RDRERTQzCis6MTBDRTUwMDA3M0E3MTdFMUFDOTVGMTBERDZEOThCRUJFQjRDOTJFRkE0Cis6MTBDRTYwMDBEREI0MEZEQjIzQ0RCQkU2Rjk5REJEODhFRkRBQzgzQzBFCis6MTBDRTcwMDBERkE2Rjc2QkUzRTU3OEJERDQ4RUUyRjMwMEM1NEJBMkU1Cis6MTBDRTgwMDA3MEI1MThFMDdBMkQ3MEEwMTdFMTBBN0FDMjVCNzA3RjQ2Cis6MTBDRTkwMDAwODdBMTlFREM3NzdCNDZDQTJGQUVFODgxQzY5M0JEMjA4Cis6MTBDRUEwMDA0QTUxMEVCRDkxMzZDNzU3NDQ4RUVFMjczOUJBREE3MDEzCis6MTBDRUIwMDBDMTdFOUEzRTA3RjdCRjRDRUUyNzVFRkQ3NUMzM0U4OUUzCis6MTBDRUMwMDBFQkVFRTE3QTQ4RjI1MTlENDc4RTAzRjgwNzdERDJFNEZDCis6MTBDRUQwMDA5M0VEQUZENUI3QjhBRkM2QkNEQ0RGMERGRTlFOTE3RDNDCis6MTBDRUUwMDAyQkU1ODk2OUFCNERGMjczNjVFM0I1QkJCRjQ2NzUxNDlECis6MTBDRUYwMDBDREEwRDc2M0Q1NjNERjVCMTBEMTRGQjcxMjNFMEJBNTMyCis6MTBDRjAwMDBGRkNDQTRERDUxODFGNzIzNzY4NzJGNjI3NzU0Q0U4OTM5Cis6MTBDRjEwMDA2MTc3NzQ2MjlERDUyQ0FBRTcyMkJEQTlDMjEzQUZBRTdBCis6MTBDRjIwMDAwRTY4QzY1QzlFMDc2QzE3NzU5Mjc5OUJEOTVBQkRCRjc3Cis6MTBDRjMwMDBGREZENzlEQzlGN0Y2QTFFODc0QjdFREZGNkNDM0E4NTRDCis6MTBDRjQwMDBFQUM0REE3QkE2OENDMUYzNkVBNzUzN0REQjUxQUYwRDJCCis6MTBDRjUwMDBBNDVCRTgzQjA1MjdDNUY3MzUwN0JFRTE0Q0JCMEZFRUU4Cis6MTBDRjYwMDAxRjRGNzNGOTUxNUYxRDRGREE0OURGNTEzQkVEQjcwQThGCis6MTBDRjcwMDBGRTNDRjQwRUVFRjNCQUI4QTI4NjdBNDVDNjBERUY5RURCCis6MTBDRjgwMDBCM0Y1NTE5NEEzMTMzRURFMkU5Q0Y3RTM3NzUwOUU1OUUwCis6MTBDRjkwMDBBNkY5N0M2NzgwRUMxOEM3Q0RCMDhERTBCQkUyRkI5Q0E2Cis6MTBDRkEwMDBDNUUyNzlFNUI2MUY3Q0JCMEFDNzEwRjY4QkQ0OUZFNkI1Cis6MTBDRkIwMDBGMzlFRjg2M0Q3REI1RjVENTY2RTdGNzk3OTNGMkYxQjU5Cis6MTBDRkMwMDBEQTc0Qzk4MkUzRjJCNjZCODRFRkMyRDZDOEYzQ0IyNjFCCis6MTBDRkQwMDA3QkFBRDI3NDNFOTk4OUVGQTA0QTdCQkMzOEI5RDE4RjI1Cis6MTBDRkUwMDA3RTVDRjEzQUEzN0Q3NEJBRUI5NTlFNDJGNDZCRkQ1NkRDCis6MTBDRkYwMDAwRjZFOTNCNzY2MUE5RjRCM0I2QzUxRDc2M0U0OEY4MkQ5Cis6MTBEMDAwMDA1RDY4OTg0N0Q2REZERUNBRkEzQUU4NUNCOEVGRjVDMzQ4Cis6MTBEMDEwMDBENjg5NTFCRkE1REQ1MzQ5NzY0QTczMjZCNDYwM0RDNzEyCis6MTBEMDIwMDBGRUJFMzQzMTFGRUQ4MzFFMkI3RTExOTZEN0RFRUJENjZDCis6MTBEMDMwMDAwMUZERUM5NjY0REFBN0ZEOEFBMkFGMEJEQUYyMjhDQUVBCis6MTBEMDQwMDA0NUI0MkU4OEI3QTNGMUY4QkY3RkQ0NTA0N0M3QkVCNjBBCis6MTBEMDUwMDBDQTEwRTdENDZBMUZBNTNBM0UxOTE3RDNBQUU5RjkxOUVECis6MTBEMDYwMDA5Qjg4ODM2OTREOEZFMjdFMTY4OTkzNjlCRkVBMzVDNDM4Cis6MTBEMDcwMDBDOUI0MjAzRDBGNDZGNkJGNURGQkIwQkRDQzIzRTBEMTY3Cis6MTBEMDgwMDA0RUY2MjJCRkI1QUI1QzlGQkMzNEM3N0Q1MkIzN0RGMjc4Cis6MTBEMDkwMDBGRTIwOUZGRjczMEVDNkI3ODI3Q0JGMzMzRjJGMUUwQzRFCis6MTBEMEEwMDBCNzhGMTE3NjFERDY4QjlCRTU3QzVDODBEN0RGOTVBOTY5Cis6MTBEMEIwMDBEOTFEMTM3QzNDN0VFNTA0RkFBODJCQUQyQjMxNkUxMEY0Cis6MTBEMEMwMDBBRDU3MjlBMkVGQTQzNThENTA1RkIyMjRDMEU1RjdFODMzCis6MTBEMEQwMDAxQ0I3QzEyRjM3RDdBOTM0ODkzQTk1OTFDNkI5QjM4NDAzCis6MTBEMEUwMDBFN0Q5MDcxNDRGMzVEN0NCNTY4NjdBQjk3NEQ3MTQzNzlBCis6MTBEMEYwMDBFNkE2NjRCRjlCNEJGODNFRjA3MTk2N0ExMkQ3NkY4RTBFCis6MTBEMTAwMDBBNzlEQzU3ODFBQzkxOThGN0IyQzE1QkM2M0RCQzlCRkQ1Cis6MTBEMTEwMDA1NzJGQkY2NzcyMjZDOUVEREYwQ0Y3OTdGNjg4Nzg0NTYxCis6MTBEMTIwMDBGOTY3OEI5RkJEMzdDNzc4NEU3RkE0RkE4N0QyMTJCRUFFCis6MTBEMTMwMDA5RjE1ODlGNTdFRDZGQTg3MjdFMzU1MTVGMTM1MDQ3RENECis6MTBEMTQwMDAzMTNFMzhBQzFFNDJENDM5QzgzQTg4QjE4MTBDNUVCNzQyCis6MTBEMTUwMDBDMTc4M0Q0NEJCRDY0QUY4QkJFQUU3NUNDNEZFMEY3QzBECis6MTBEMTYwMDA5QTFDNDAzRUFERTE3QTQ0RjJEOTRGRTdGODM4RkZGRDEyCis6MTBEMTcwMDBDNjRGRkMyN0Y5MEVGQTRGMEFBMDFFQTlFNkZEOEI3RkM5Cis6MTBEMTgwMDBDM0JGN0IyMUVEOEI3MTgxMzNCRDlCQTY5MjFFRjIwNTNGCis6MTBEMTkwMDBGNEZFQUYzQjcyMkUzMjIzMTA0MzBGMUQ1REEwNEUwREU3Cis6MTBEMUEwMDBFOEZDMjM3ODNGMzM5MDFGRjNGRDJGMTNCQ0E2RjdCM0ExCis6MTBEMUIwMDA2NjA2QjNFOEZEQzg3OTRFNzU2NkUwNkY3NTEwQTAzRDUwCis6MTBEMUMwMDBDQzc1Mjc3Q0JGMzBENzlENDg3QkYwQ0U5MkRGQUZDNEIzCis6MTBEMUQwMDBCQTkzNEJGM0Q1NjUxQ0NGMUNCRjExQkI3Mjg4REIzOUVBCis6MTBEMUUwMDA1MTdCMzI4N0Y2QzM2QjYwMkYzNjEzM0Q0NTNEQ0QzNUZECis6MTBEMUYwMDAxOEZGNUVGREY4RDI3RTgyRkI3RkE3QkZGRjc5RjNERkM5Cis6MTBEMjAwMDAwMEJFNkU4MjRGRTQ0RDNFQzVGQkZGNDBFRjhCN0NDREYwCis6MTBEMjEwMDA5RjAxREUzMEYxOTFCMEZCM0Y4N0Y4N0NGNjczMEVERkEzCis6MTBEMjIwMDBFQjQ0QUZDNTlDREU2NTczOThEQ0I3RkYzNTM2MUY1Q0Y5Cis6MTBEMjMwMDAzMUZGRkY2RjdBNUZFNENENzVFM0ZFNUMzRkRGNDhGRUIwCis6MTBEMjQwMDAzOUY0RkIxNUUxNkRGMTMwRjkzOTE5RDBFNUUzNDc3OThGCis6MTBEMjUwMDBGRjhDN0U3RURERkJFRkVBRjlGMzJBQzhGOTA1M0Q3RDAwCis6MTBEMjYwMDBBRkMxM0VGMjExOEQzRjk1OEZGRkJCRTJDODNBMkVFOTY4Cis6MTBEMjcwMDBFRkZGMkQ0RTc2NTkzRTlGMzYxN0YxRDVDQUY5RTkwQUQwCis6MTBEMjgwMDBFQ0VCOUJFNkYyRkE5NjEwOEZDRjZBOTI3RjY3OEFGQkVGCis6MTBEMjkwMDA0Mzc4OUU3NEY5MUMyNkJFOEYxMkNDQzZGQjJBRTNGRThGCis6MTBEMkEwMDA2REM0MUZEMTdBRjcxOUZEMTExODY4ODY0MUNGRUZEM0VECis6MTBEMkIwMDBGQjFCRTU3MzlGRDg4Nzc0QjcyRUUwRkRFN0JFMzA2RTg5Cis6MTBEMkMwMDAxNUUyREZEQzA2N0I2NERFNUM2MzVEQTY4QUVEQ0I4RDU4Cis6MTBEMkQwMDA4QkY5N0Y3QUNGOTRGRkQ3M0Q1RjQ0Q0ZBM0Y1MEI2NEUyCis6MTBEMkUwMDBCRjgyRERFNjcyMDI4RDdGNTE2NzRENkU4NDc2QjVGMEE4Cis6MTBEMkYwMDBEQkMxRkU4ODc5QUVCQjNBMUFFN0FFOUVBQkFCQzcxODZFCis6MTBEMzAwMDAwQzVBRTk3QzYwQzQ0RTYxRUU0NzExRkYxMTNCNEFGQkE5Cis6MTBEMzEwMDBGRTNFRTNCOThEODMxNEU3MkExMUY0NkQ3RUUxRDk3QURDCis6MTBEMzIwMDAwMUU3MkFDNDM3NEIxNkVCQjg3Q0ZGMzVENERGQ0JGQkMzCis6MTBEMzMwMDBDNzc4N0UyNzNENEZFNTcwMzJGN0VCNjdBREJBN0MxOEIyCis6MTBEMzQwMDA0QTlBMDVGM0JDRjgyRjFGQzA2RkJGN0Q2RTMyRDgyQkYxCis6MTBEMzUwMDAyRjc3MjkzRTJCQjQxQkY3NEE3RTdBODFFNDQxNTdGNzk5Cis6MTBEMzYwMDA0MUYyQjc0MkYwRkJENjE3MEVENzIzM0ZBRjc4NUZDMjJBCis6MTBEMzcwMDBFQkU0RUI4RkQ0MzExREE2RjU5RjEwRjE4ODA5MkY0MjA1Cis6MTBEMzgwMDA3RkNFQkZERjI0Rjg3QzFDQkU2QjMwRkUzNkEyMTNFM0Q5Cis6MTBEMzkwMDBGOEE5NjE5QTdERTIyODc1MTZCQjA0RkRFMUJEOUQwNEU0Cis6MTBEM0EwMDA5NzhCQzM1NTEzNTJDODVFMEZBRTA2ODkwNjM4RUEwNzNECis6MTBEM0IwMDA1OUNDMzhEM0VFQjkwRUI5OEZFREE2NzlEREMyOEZGNTExCis6MTBEM0MwMDBDNzNFMkZCQjJGQ0E0RkZCQThCRjg3Q0ZFNzAyRkQ4RkY5Cis6MTBEM0QwMDBFRDQwRThFODAyRkMwRTQ0OERGOERFNzg0RDk5OERCRUY0Cis6MTBEM0UwMDBCNzUwNTM3ODYxQTk4ODgzNTA3RTUzRTZDMTRCMUY5Qzg4Cis6MTBEM0YwMDA0QUY5Q0RGOEIyMzhFRTJGQkE4QzdGQzcyMkQ4RTRBNDEwCis6MTBENDAwMDBFRkM5QzlFRkQ2Q0FCQThDNEE2NkZDQkU1QzhDRkM5NkUyCis6MTBENDEwMDAyMURFMjJFMzIyOTFFRkM5NTk1M0M5QkY3NTNDMkFGRTkwCis6MTBENDIwMDBGRTkzRTlGQjcxRjExQjE4QzVCNzlDMURGQzFDQjgzOUI0Cis6MTBENDMwMDA0RkQ1QjBCMUY1QUQyMkFDRkJCMEQ5MjkyRjZCQ0U2NzdCCis6MTBENDQwMDA5QUZGMUVDNjNDMTc1M0M3RTQ1MDNEQ0E2QjczRjNBMzQzCis6MTBENDUwMDA3NTI4RTdGNzRFNzFBMzFDOUFGREU3RjMyM0Y5Q0Y3QkZDCis6MTBENDYwMDA4REZFRjM4MEY0OUZENUFCRTMzRjlGOTg2QkY0OUYxRjM1Cis6MTBENDcwMDBDRjBERkU4QUY4Q0FBNkQyRkVGNjcyNDlGMTUyOEMyMzZECis6MTBENDgwMDA1QzE0NzUxNEE3MUU0QTVFODJGMTI4QUQ4NzlGNTczODM5Cis6MTBENDkwMDAyREYyRkMzMkRGN0ZBQTg4QjkzRDc4RERFMjI0N0M5RTQ0Cis6MTBENEEwMDA1QTkzMTRDNjJENzg0QzQ3RjM2MkZDQUVBMEY0QTMxMTM2Cis6MTBENEIwMDBGMzE4RkZBQTEwRUIzNEZCREJGMTg1NDBDRjU5MjQ2NjRCCis6MTBENEMwMDBFNDY3OUZGMjc4MjgyRjUwRDEyNUJFMkYyMUVBMDVBNENBCis6MTBENEQwMDA5RjVEMjFDRUYxMzc5NUYxNzNENTE4QjE0MzdFOTBERjcyCis6MTBENEUwMDAwRkFDMTA3RUI4RjRDN0ZCN0ZDQTE0N0QxREMwNTJFNjk2Cis6MTBENEYwMDAyN0ZFQUQwNkM2QzBFQjMyRjEzREM1MUEwRkRCODI0MEY4Cis6MTBENTAwMDBGRDMxMkJDNDRBMTAyRjdCMzk5RkIwRUQzNkZBM0I1N0MzCis6MTBENTEwMDBBNzdBNzZEMUJFM0FEMjM5MDY3Nzg5M0NDN0EwNTE3RTI4Cis6MTBENTIwMDBGNjFBRjhGOTQ5MDQ5N0Q4M0ZBRTYwQkZCOThFRkFEQjE2Cis6MTBENTMwMDBCODFDNkZDM0YzQkZGOUQxRUY0QUM4NzNGM0RCOTM3ODFDCis6MTBENTQwMDAxQzY1NDYwOURGNkZDQzU3RjlERDg4NEZBQTNGNDA3RjQ1Cis6MTBENTUwMDBERTUwODJFRjQ3RkRGOTRDODRFNzBBRjRFNzRDODI1QjJBCis6MTBENTYwMDA3Q0I3NjIzMkU2ODFGOEZBQjM0Qjc4M0VENzM3ODYyNzJDCis6MTBENTcwMDA3MUJCMUNBM0Q3MDExNDk2OEM5MkNGNjU5N0FGMjM1MDMzCis6MTBENTgwMDA2M0JERkZBMUIwQjNEN0U1ODYxNjk2RjA3QzNGRjFBRDQxCis6MTBENTkwMDAzOURGMkZGQjFEQzNGODU0OENGRDc2ODM4ODUzOTUwMjI5Cis6MTBENUEwMDA4QjVBNzI4NjlGRTdGRjQ1OUI3QTEyNkRCQzYzNkRFNUNGCis6MTBENUIwMDA3NDNENkVEMzEyQjE3RUVCMkQ3MTlFMUYwQzJEQUE2N0E4Cis6MTBENUMwMDA5Mjc1NTE3MkRDOUFCQUQyOTM2Nzc1RkI1OUM1QzJDNzdFCis6MTBENUQwMDBBOUNFQUMzREYzQzBFQjBBQzA3OTVBRDQ3QjBEMjRGQTM2Cis6MTBENUUwMDA2ODlGRDM4RUYyRUY0QjJEQUJGRUNBQzlCM0JBRkRDMzExCis6MTBENUYwMDAwQzJGRDY0NTY5MjBFQUVCNEJGODc3Q0I1RTI5NzVGNjAwCis6MTBENjAwMDBDRkNCQzNFRjM1NzEzOTVDREQ3MzhBQ0VDM0Q0NkY2ODdECis6MTBENjEwMDA2MEExMkNBQTlCQjIyMTdEREY5RUMzQkZCRjUwNTE2ODgxCis6MTBENjIwMDA2NTlBMEVBRUU0NkNGNUFFMTIxRUY3NTk0NzdDMTJBRDRBCis6MTBENjMwMDAwQkJDMUJEQkE1NzY3NTBDRkVGRDQ5MTk5Rjk0Rjk4Mjg2Cis6MTBENjQwMDA5QjVGRkMzRjk0NzcxQjQ4NjIzNDdGRDBDQkMyOTg3N0I2Cis6MTBENjUwMDA1RkEwQUU3NzBDNjFERUM1RUJBM0Y4QzhEQTEyMUZDRDcwCis6MTBENjYwMDBEQkQ4QjU5RkUwODkwRkJDNDdGMDgwNkRERDhGRjU4Mzc3Cis6MTBENjcwMDA2NjdDNEJCOUU4MTRGOEQ2QUQ5QkYwM0Q5MkZDNTYyQzc1Cis6MTBENjgwMDBCNDI1MjI3RURGNDI3QTQxQkYwN0M1M0U3MEM0NzZDMTExCis6MTBENjkwMDBFRDg5NDFGN0M4N0I4NUE1MDY3QzNCQkRFNTA2QkFCNTlCCis6MTBENkEwMDBBQkY3OEVDMUY1NDgzQTM3OEE2N0U3QkJBQzZGMjIxREVFCis6MTBENkIwMDBERjA3M0EzMkEyNjNFQzNBODhBMzQ4QUYxQjgwNkY0Qzc1Cis6MTBENkMwMDBGNEFBRUZFMERGQkRBRUVGMjhBNUVGQzVENTE3N0VDNTA0Cis6MTBENkQwMDA5MTQyNzkwMEE1MEZDRjRCMzY5NTM1MzBCNEE3MUQ2QTFFCis6MTBENkUwMDAxMjdEREY0RUQyNkY2OTE5RDA0RjA3MkZDOEUzNjMyNDM0Cis6MTBENkYwMDBBN0MyRUVGQzE0RjFGNUZGNUVBMkIzODNBRjc1RkMxRjY5Cis6MTBENzAwMDBFNkZCNTE0OTBDQkJGQ0NGOTU3RjE4RkUzRDFGQkVFRkQ5Cis6MTBENzEwMDA5RTEyRkM2MkJFQ0E3RDc3QzRGQTY2MkRCOEFBRTU1Mzk0Cis6MTBENzIwMDBDMDIxRTUwNkU1NzY5MzgyRjU5MzhBMURGOTJDODhGMkVGCis6MTBENzMwMDA4QkU3RDcwQTdGQkIwNUYzQTFDRDVFRDY4NzdCRTEzRUExCis6MTBENzQwMDA5NDIzQzA5QkEzM0NERDgxRjJEM0I4Mzc5REY4MDJGRDQyCis6MTBENzUwMDA3RkMyQTdEOEE3REZDNDdENUFGOEZGNzRCRjg1RjNDNTgxCis6MTBENzYwMDA1RjNBRUYwM0YwRkMxQkMxNTMyN0NFMTc3Q0NFRjI1Mjc5Cis6MTBENzcwMDBDOUU1NDFGNzNDQzA1QjUwREQ0RkZBRTVBNzQyREVFMDZBCis6MTBENzgwMDAyNzhEN0ZCN0U5OTNFNTQxOEI1NTVFMzcyNkYzQTEzMUFECis6MTBENzkwMDBGMjlGM0VFNTUzRTQzRkNENzlENTkxRjJBMTMxRjI5RjVFCis6MTBEN0EwMDAwNjdCN0RBNEZDMjczM0U1NDlDREY5Q0Y0NTVENTMyOEExCis6MTBEN0IwMDBGRkJDMjhEMzQyREZBOTk2NzZCRkNDN0JCRUQxRjUwMzUwCis6MTBEN0MwMDAxQjdEMTc2OTg2QzI5MkQyODdFNzQ3QkYyREY0MzE0MzhDCis6MTBEN0QwMDBBQjRFQjdGRUUzNjlGQ0ZCRDdERDI5MkVGQUJCQUJGOEY1Cis6MTBEN0UwMDA4M0Y1NTgxMjlGQTAxRjVDNEU5OEI3NjMyMUFGQ0JBQzU2Cis6MTBEN0YwMDA0QzdGQzY4QzU3ODdGMDRCQUUwOEFGMzJCRkVFRTg1Mjc1Cis6MTBEODAwMDBDMjlCOTEzNUJDMkM1MkZGRTdEMEQxRDk5MUY5MUNEMUU0Cis6MTBEODEwMDA5MUQ5RkFEREY4M0RFRTQ2RkY3OEFBMjczM0QzQTFCOEI3Cis6MTBEODIwMDA4QkZGNURDQTYyQ0Y2Q0ZBQkI5NDkyRkVDNURFRTE3NUQ4Cis6MTBEODMwMDA4MzM2MDk1RjhDQkFDMTNGM0IzRDdEOUI1RDE5QTNEMDA4Cis6MTBEODQwMDA1M0U2QjE0N0EyRTNBQ0JDRTBCREYzMjY0NEJGREYyNEZFCis6MTBEODUwMDBFRjFGNEZFM0Y4M0Q3MzIzMTM3RkZGRDQ0ODRGQzBCRjQyCis6MTBEODYwMDA0QUU3RkEzM0Q5RkVDRENBNzA3RTI4MTZGNTk4QzU5OUQ1Cis6MTBEODcwMDBEQTdBQUE4MzhGNUZFQ0M1QkM1OTA0QkZBOTg3MDhCRkI5Cis6MTBEODgwMDBFREFEQkVFREU4MUYxRDJEQjM1M0JENEEwQzdFQTBCRjBDCis6MTBEODkwMDA2RjdCMzk3RTE4NDZGNzlFNEY0N0JGREFBMjI3MTZBNDQyCis6MTBEOEEwMDBDN0UwOEY0RjRERDdDQkQwRDM2MTdEQUFBQkQwMTc0QkZDCis6MTBEOEIwMDA0RTVGRTkyMTM5RjU1QjNENDg1NzQ5NEY0OURGRTFGNEI3Cis6MTBEOEMwMDBFNEZCOURBNEY3REJGOUVBQkZFMDdFMThBNUIzRkEzNEM4Cis6MTBEOEQwMDBEMjM5MkFCRjlBQTE5RUM1RkNERDlCMUY4QTNBMTYxODMxCis6MTBEOEUwMDBFNzM5MUNFNzEwRkE1ODE0M0Y1NDBGRTEzODU1NUY4QUE2Cis6MTBEOEYwMDBGREY3NEU5RTI5RTVGRTRFMURFQjdCNzUyMkZBN0Q2N0Y2Cis6MTBEOTAwMDA5OUE4RDdGNEJGRUVDMzM4Q0Q4NjI5MzFFQjM1OEYzRENBCis6MTBEOTEwMDBBMEYwQkZEM0UzNjVGQjJENjI3RkI1RThGQ0RENTM1ODczCis6MTBEOTIwMDBCNzA5RkVFRDA5QUNEQjg0RUI1QkYzRDJGOUY3RTVCMUE3Cis6MTBEOTMwMDA3RTczMkNEOEUzQTJCRUIzMEVDN0M2NzlDMDlFQzVCQzA5Cis6MTBEOTQwMDAzQ0IzODUxODlFNEIxRkMwRUZCM0NDQzJFRkIzNkMyMjIzCis6MTBEOTUwMDBCRDFCQURDM0Y4OTBGNDU1MzRFRUM5REI5NTAxRDk3NjAzCis6MTBEOTYwMDA4N0E5RUU0NkU2M0Y5OTM3NjRDQzdGQ0UwQzFCRjQxREE5Cis6MTBEOTcwMDAyQjBDMTlGMzlGQkM0RTQ3RUFCN0NERUFGQzEwQzZCNTk1Cis6MTBEOTgwMDBBMzcxQzU3MjFBRkY2NDlERUNCRjIzNUMzQTQzOTdGRkY1Cis6MTBEOTkwMDBENEFBQzJBQTVCOUZERkJDMkRBQ0NGNkY4MkJFQTRCNjU3Cis6MTBEOUEwMDA4QzQzM0ZEMUZGNjAwOEVERkFBQzk5QTEwQjQ4Mzc3OTYxCis6MTBEOUIwMDA2RTFFMTQ5MDhBN0Y4N0NFRUFGNjFDNDAzRjFDRkMwMzQzCis6MTBEOUMwMDBBNkU2OEY2QzU3NUZFQkVCRkYwNzEzMzQ0OUExMDA4MDhECis6MTBEOUQwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRTUzQzY5Cis6MTBEOUUwMDAwRDcwNTQ2N0I1REZERDdCRjcyN0M5ODY2QzQyQTA0QjBECis6MTBEOUYwMDAwOUVENERGODc5NjkyNTYxRjkwOTA0NEFFMDZFNzYxMzVECis6MTBEQTAwMDBCNjJEOTQwNTQyOUIwQUM1MEI2NDEwMUQ1RTBEQjUyODBBCis6MTBEQTEwMDAzRUVCQ0I0MjQyMUE0MjBCQzFFMUY5MzdBRkJFMkQwNUI2Cis6MTBEQTIwMDA2NzdDRDYzMTM4NkFBMTQ4NURBMDQ1OTQ5NkE2MzY5OUEwCis6MTBEQTMwMDA1MjFGRDI4MDc5MENENUFBQjQ5NjU3NzU1NERFMzlFN0I3Cis6MTBEQTQwMDBGQkJFREQ3QjZGMzY4NTAyM0E3NURDNEVFN0U2QkJGNzQxCis6MTBEQTUwMDA3Q0U3M0JFNzdDRTdGRjdFOTc0NUIzMTVDNjY2MzFGODY4Cis6MTBEQTYwMDBGOTkzODZDNjU4NUYyREZDNzkzMzhFODNBNjUxQzJEOEIwCis6MTBEQTcwMDBEMkIxNzI1Qzk5MzQyNjMyMzYzNzRGOEVBQjRENjMzNjU1Cis6MTBEQTgwMDA2MzFEMUUyNkU2QjMwNDAzRjhENzk4OUJDNjlCOEQ1QUU4Cis6MTBEQTkwMDAzMzMxOEVCMUYwMjI1NUMwQzcwOEZGOTlFNTEyN0U0Nzk5Cis6MTBEQUEwMDAzMjBDRjg5NkI5QzQzOEIxMjQ2OUY4MTlGQjI4OTNFMzBECis6MTBEQUIwMDAwNTM0NUU5RTFFQzc2OUZDMDBFM0VCRUY0RDNENkUyNjBDCis6MTBEQUMwMDA2MEZFNzdBNkM1NkYzNjQ2QzBCRDY4QjcxRUFGRjhDNzAzCis6MTBEQUQwMDBBM0ZGOUMyMkU5MTk2QkUyRjMwRjNCQkQyMEVGOTg1MUE1Cis6MTBEQUUwMDA4NUU4QjlCQ0ZGMDFFODVENDFGQUIxOUZEM0ZCMjFBNEYxCis6MTBEQUYwMDBFRjIxOTJFN0QzOUNCRTBGMDEzRDZENDQ0RjM3RDA5Mzg5Cis6MTBEQjAwMDBGRkI3NUZFRkM1MkE2MzI3RUVDRkRGODA4RjI3NjhERjdGCis6MTBEQjEwMDAyNzcyM0VBRTAyRkUyOUUyM0JDNEY3QzFGOUZDRTY3MDczCis6MTBEQjIwMDA4MDMxN0MzRThERTM3QkREMkRGNDI4RDE2NEEyREU5RjI1Cis6MTBEQjMwMDA3NTVCRjYwREM2QjM3QUU1N0ExQkY0QjA2NkE1N0YwMzc0Cis6MTBEQjQwMDBEOUM5QjIyMjNFRkZEN0E5Q0Y5QTg5OTJDQzE4N0UwNkI2Cis6MTBEQjUwMDBFRUJCOUNGRjFCN0M2RTlCRkYxOTlBREZFOTRFQzNEMzgzCis6MTBEQjYwMDA3QTFFRjE1QzM5QkM4OUU4Q0RGMDlCMjBGODFFMDc3QzU5Cis6MTBEQjcwMDBBM0UwQUZFMDcwNDczMjYxOTEwNzRCM0M0QUYyNDlGQkFBCis6MTBEQjgwMDBBNUM0RTNFNDk3RkEzQzcyQkM4REVDNjY3QjI5QzczRkUxCis6MTBEQjkwMDBFQUYwRTM0OUE0MUZFNDc3ODJFNDNEOEVDQkVGOUY1RDdBCis6MTBEQkEwMDAxRUJGMzU4NEJFOTQ3Mzc5NDgzREZDQ0UzNEUzNzdBODFDCis6MTBEQkIwMDA2NzFGMzY3QTYxRkZENEYwODg4Q0ZFRkYxREQ2MkJBNDM4Cis6MTBEQkMwMDBGNTg0M0Q3REQwRjk2OTdCMTQ3MTlGQ0Q0RkNCNzc3NDdGCis6MTBEQkQwMDAxOEVFOEZBQUQ1RTk3OUY1REE3RDkxOUJFMENGRTVDREY2Cis6MTBEQkUwMDA0RkFBMjZFMjA1MTg1NkNDNThCQzlGMjUzN0MzOUE3NzEyCis6MTBEQkYwMDBCMEE0Q0EyMDg2QzU0MzI2MEI0Q0I0RDgzNUZCMzJEMTFECis6MTBEQzAwMDBFMUYxQkJDNEY4QkZDOEZGMkQ5QjIzRjVGQTU0MTJGMzEyCis6MTBEQzEwMDA4QjBDRERGRTk1Qjg0RjY5QkFEOTEzMzZCQTY3MUZGNjdCCis6MTBEQzIwMDAzRjI5RjgwRTg1MkQ3NjcyQTNGMTA3NkI0MTJFOTY3QzY1Cis6MTBEQzMwMDAyODNEMTZGMjU5RjZFMDU3QzdBMDFDOTY5NTQ5QkNERjVGCis6MTBEQzQwMDA0ODIyOUVENzBCMjVERTdEQjRFRUIyRjQzQUNGRjE3MUI3Cis6MTBEQzUwMDBBRTg0RkYyOUMxNjdFOEVBMzM2RDc0MjU1RUE1QkM0QjJECis6MTBEQzYwMDBEMkY1Q0RDMzdEQjQ1RjlFNDA3MkNCQzg2OTcwNkQ1MjUyCis6MTBEQzcwMDA0MjA5RDg4RjhGQUVEREE0OUE1NkJGQzBCQUY1MzBDNDIyCis6MTBEQzgwMDBCN0ZCNTk3QTRDN0E5NUYxMDNEREI0RUU4REE2NkI3RDI2Cis6MTBEQzkwMDA1OEM4NDdEODY5OUFDRTdFMTY0QTMwMkI3REZCRjlGRUNDCis6MTBEQ0EwMDBEQ0UwRjUyRDdFRTEyMUQ0REIxQjJGRjc5NEZCMjY4QkU2Cis6MTBEQ0IwMDBEQ0E1MUQyQzBGQTRFRERCNjAzRTkwQkIyRUYxQkM2MEZCCis6MTBEQ0MwMDBBRUY1NUZGRkJBQTBFNzhGNUJGREM5RjVGM0QxNTM0NzBGCis6MTBEQ0QwMDA3Q0JDQzVGNzI1RTM3RjVFMzZFREZFRTdBQUU5N0IzMjIzCis6MTBEQ0UwMDA2Qzg5RTcxRjc0RkU3Rjg3RUQ3NjY2RjEzRkRGNDJCRUU5Cis6MTBEQ0YwMDA1QkZENDUxRUQ0RUY5NTQxNjYyNDgxQkVDQkY4OUI5QjBFCis6MTBERDAwMDBCOThFQUE1NUM4M0ZBNUVEQjM5QUNGNUZCMjgzMzU3N0Q4Cis6MTBERDEwMDA0RjFDMEM3RjUzQUQ4QkUwNUE5RjY1NkJCQjAxNUZEOEU2Cis6MTBERDIwMDA3M0IxMjk2RTgxNEI4NUY5RjM0MzYxODVBRUMwREYyMTY0Cis6MTBERDMwMDA5MkZGNDY0RURGODlCMDRFRUI4NTk5QzYwQ0IwQTk4NjlFCis6MTBERDQwMDAyNTYzNEE1MDBGNUE3RkNFRjFCMTYwODgyRENFQ0ZFMEM3Cis6MTBERDUwMDBCQjIwRjBDOTc1MEUyRkNBNkZCNEYyRjExM0IxQ0U4OTkyCis6MTBERDYwMDAzMEU3MDNFMzNGQzlGMzExQ0U4NzVBQjAyRTg4RjhENUM4Cis6MTBERDcwMDAzQzU5NUZGRTlBRTREQUVFMTZFM0M0M0IxNEQ3RkFEMkJDCis6MTBERDgwMDA3RUU4NzdBNEVGNEJCRDUyMkZERjIzRkI5N0Y5RkEzQkQ4Cis6MTBERDkwMDBFMTNGMjUxM0IzOTE3RUM2NUM1M0FDRjM3RTRCN0VGMDFFCis6MTBEREEwMDA0QUYzRkE2NUJDNjgxM0ZCOTU0OEVGRDc1OUE0RkI0QUMwCis6MTBEREIwMDBGM0Q1ODhEMjRDNzJGMkIxOTQwMkYxNDNGNTA3NzY3NzJECis6MTBEREMwMDAwMjJCMTU5NUM2OUIzOEZGQTVDOUM2QUZBRTA2MEZDODc2Cis6MTBEREQwMDBFOTIyRURDQkMzRjY3QUM0RjJGQ0REQjBBRDFFQjhCOEQzCis6MTBEREUwMDAyRThFNzg2MDY1MkZFQ0RCNkJDQkQ1RTI1NTIwQjdCRjZDCis6MTBEREYwMDBFMkZFNTQ1MTdEMTBDQkE2NUY3RkNERUNDQjVGQzNCNjY2Cis6MTBERTAwMDA3QzNFOTI1RjA1NzZDNDQ2Qjk0MkUzRjVDMUYzRkNCNUFBCis6MTBERTEwMDA4QUQ0MzNCMTRGREE5M0M4NDc3QkRBREVGODc4N0IyMUI2Cis6MTBERTIwMDA3RjlFNzNDNEJENTJEODUzNUUyREFFRjMzRDIxNUYxNjY1Cis6MTBERTMwMDAyOEM2RjVEOEM0RTMyOTc1M0FDNDU3OTZGRTE5MkUxODlBCis6MTBERTQwMDBBRkMyQkY2MEZEQkVDODU5MzdFQUMxOEEwRUM1NDg2Njc5Cis6MTBERTUwMDBEMUZCNDE3NkQyMjFGMDNGOTZERUJGNTFCNTIzMDhBRjBBCis6MTBERTYwMDBDOUE2OEJGODAxQkZCRThGNkYyMkJDOEQ0RDBBRDk5RjBBCis6MTBERTcwMDBEMzVFQzZENjcyRjk4REFENERDQjY5MkNEMTZGNzBCQzE3Cis6MTBERTgwMDBCRTY5RjFGMTg4MTc0MDk5Nzc0QTA2RkYwQTQxNzdEOEIxCis6MTBERTkwMDAxRDNGNzQxM0U4NDE3QjlCQTJBMzNGNUFCOTcxNjU0N0FDCis6MTBERUEwMDAyOThDOTlFNjBFOEQ4N0NCMDQ5NDE0Q0M2QjBGOTZGOUQwCis6MTBERUIwMDBEMTBGQkMyNEQ2NDM3QzFFRDg0NzhDMjVDMTIyODI2MzU3Cis6MTBERUMwMDAxQTVDQTdDN0Q2MUZDNUU5N0ZBOTMwQUI3MERERUFGODk5Cis6MTBERUQwMDBDRTA4QjIzNUFCNzFERjUxQkNERTAzNkUxQUYzOTQ0RDQwCis6MTBERUUwMDA3M0JFMTZBRjg1RkRFQjk5RTkwRUExQUE0MTc2RDYzMzM0Cis6MTBERUYwMDAwRUU4NkExMDc0NjlDNkJDMzdEOTMwQThBMjNDMkM5NENECis6MTBERjAwMDA5QTg2NzFERDFGREEwQ0Y3MUI5QTNFM0U5RjU1MDI0QzM0Cis6MTBERjEwMDBEQzNERDBFRjQzNjY0Qzc2QjkwQ0YxNkEwM0ZERTU1QzVECis6MTBERjIwMDA2Njk3QzFDNzJEREFFOENFOEM5MTM2N0NFRUNCM0M1RjhDCis6MTBERjMwMDA3MjJCRjc0RkNCNkE0MTlFMTZCREZCOTFFMEVGNDc0MjMzCis6MTBERjQwMDA5RTNCODA4NjlFODk4NDIwOUZBMUREQjBCNTJFOTRERjA0Cis6MTBERjUwMDA0QTgxQUJBNzZEQzk1REI3MDE3RDk3Q0E1OTA4Qzc1RUY1Cis6MTBERjYwMDBFNDRGQ0RGMDc3NzY4Q0M2Rjk2Mzg2N0ZDMTQ4NTg1NzY5Cis6MTBERjcwMDBFQ0VCQzkxNkYwNzVGRjAyNjhEQjgwNEZFMDQ3NTM5NzYyCis6MTBERjgwMDAxN0E0MkM3QTdDNzI5OEM5NDI5OEI3OTUyN0I2MzBEMERFCis6MTBERjkwMDA5Mzg4QjlEM0REMEY3NERDREFGNEY2NUFDQ0ZCNTY5OENCCis6MTBERkEwMDA1RTdEMUU5MDc4RkZEQTQwMURFNkI1NEI0QzIxOTdGOTU3Cis6MTBERkIwMDBFRTczQzhCNzBGRkU0M0I5Nzg1MjZGQkVFMDQxMzlDRjU4Cis6MTBERkMwMDA1NkQ4MjhDMEJGMzBDQTlGNEJCOTc4OTk3NkNFMkExNzQ5Cis6MTBERkQwMDBDRDMxREU3OEJBNzRGQkYzMTZGODRGRDVFNjE3OUZGRjA0Cis6MTBERkUwMDAwOEZDMzE5NTREQkQwQzdDODIwMzU5ODBGNDVDRUE1MEVECis6MTBERkYwMDAwMjZBMjk4MUI5MThGMEU5RjFGMTdERENEQkIxRkUyNTc3Cis6MTBFMDAwMDBCNEQzMTU0MTJERTREMjkxM0U0NkYyNkIxNDZCQkNEN0NDCis6MTBFMDEwMDBBMjZGN0YxRTcyRDVDOEM2OUQ1REE4NzdGN0Y3QUFDQzAwCis6MTBFMDIwMDAwQjcwRURDQkY3MjIyNkZDRjkxMDlGMjZGNEMyOTVGNzcyCis6MTBFMDMwMDA5RjNEMUFDMDY5RkZBNjMyNUM0RkNBMTFFNDFEOTgwRUJECis6MTBFMDQwMDBGN0NGRjVDMTdDMDBCREJGMUFFNDA0RUJERTYzNzg3NTQxCis6MTBFMDUwMDAxREUwNzI2N0JGREQ4NjcyQ0E2NUNEQTlFMTMwQkUzN0FCCis6MTBFMDYwMDBFODYyMjk1Rjg2MkZFMDNCMjFFNEUyQkFBQ0QwNUFCQURECis6MTBFMDcwMDAyNkQ3NzVEOTlFOTM1QzcyM0YxNzYxMEM3RDc3QzJFOEY1Cis6MTBFMDgwMDAxOTA3NzA4QkE0REU3NkYwRkQ1QzY0RjBGRDkwRkJDQThFCis6MTBFMDkwMDBBMjVDNUZFNUJFRTQzQUY0RDU1QkVEQ0VFODY3MTY3REExCis6MTBFMEEwMDA3NUVFNDNEMkIxMEY3QjM1NkUyNzY3N0I1NUNBOEZDRTk1Cis6MTBFMEIwMDBFRTJBQkVBNzFBRTQ5MUQ4RTUyMjNCODYzQTZEQkY1MkZDCis6MTBFMEMwMDAwMDdGQTQxNEE2ODFGQ0VGMTNGNEQyMEZFMEY2MzYxN0ZDCis6MTBFMEQwMDAyNjNCNEIzM0ZCNzE1RkY5QjEzRjJBOTU4QzQzOERDQ0M2Cis6MTBFMEUwMDBGODIzODY0NTJDOENFRjE1QTNGQkJFOTIyODQyM0JGREZFCis6MTBFMEYwMDAyOEVCNzZBMzVEM0ZDMEZBRERBOEZGMUZDMzUyNTA0NTUxCis6MTBFMTAwMDBGRjE4RjJFMEZENDY1RkMwODM3MkRDQkJFQjQ4M0VGQUNECis6MTBFMTEwMDA5MUQ0Q0RFRUMyRjNFNTY0MkFDQ0VBMjc5RDU3OTRDNDhFCis6MTBFMTIwMDA3OUM5MzcwMEE3QTRGRkY0OTk0MUYyQ0I3RUI4OTI5RjNBCis6MTBFMTMwMDAzNjE4OEUwQkVCQTIzRTMzNEIxQzM5MzZENUZDMzFGQTI4Cis6MTBFMTQwMDAyMzM5RDYwMkNEMENFOUQ4MzMzNUZFMTNFRTc3RjlGQzJFCis6MTBFMTUwMDBGMTk1QzY0RkQxN0ZFRTlGNjI5Q0MwRkJERkMwN0MwRjY0Cis6MTBFMTYwMDBFMkMzQzVEQTQ3QTgyRUY5NEI4NTcxMTJFRjNCRkREODAzCis6MTBFMTcwMDAzOUY0NjM3QTQ2MUYxNjNCRjQ0MUZBQjE1M0U4QzdFMDFECis6MTBFMTgwMDBEMTYyQjQ1NzkwMUI4QjVEOUYxRjNCMkJGNUUwNzY3NkQ5Cis6MTBFMTkwMDAzQkNBMDdGOEY5MjVGOTdGMERGODAxQjk5Q0MxN0Q5RkFECis6MTBFMUEwMDBDNEIwRkI5NjYyNDVDNEE2MUUwMEZBMTQ0MTFGREU1Nzk4Cis6MTBFMUIwMDBDMEJGMkIxQjdGRkM0NzY1MTgxRkNGMDIzODQ1RUMyQkQ3Cis6MTBFMUMwMDA5NjkxNzUxODM3QkUxRUYyRjlDNkEyQkYzMDRGMjFERkY3Cis6MTBFMUQwMDA0RUI5NDA2MDc2NTM1RDE2M0M3NjBBRjVDNjk1RjdDMzk2Cis6MTBFMUUwMDAzMTY2OTYzODk4REVENzc1RUVCN0QyN0NBMTFENDEyNkYwCis6MTBFMUYwMDA4RjdDMjhDQzc0NUQ0NjdFMDI0MEM0QThGN0QzOEIwNDg0Cis6MTBFMjAwMDBFOTQxRkIwMjg1Rjg2QjJGNjU4REU4Q0ZEQkYwRDE0QzNGCis6MTBFMjEwMDBEMEY3MDU0QTM3RUFGQkI3MjI0NTNDNUYxQUM3RjNDMjdECis6MTBFMjIwMDBDRUMyNjQzMEM0RkIyQzA0Q0ZDQTQzNkM0OTQ1MDZFRjEwCis6MTBFMjMwMDBCNzIyMkFDMTRGOUE2NkU0NjFFMDgyQkM4RkYyMjU5OTI5Cis6MTBFMjQwMDBBRjRBQjg0MDg0RTc5NUMzMjMzQ0NGQThBODhDMTc1MUE4Cis6MTBFMjUwMDBBMDJCMEU5MURDMjE4RjFBNEU2MzdGMkFFOTFBMjlGQTJFCis6MTBFMjYwMDAyMkZDQTdCQjJDNzk0NERGRTgyNEMzM0MyNEQ3Qzg5RUZBCis6MTBFMjcwMDAzN0RDMTI0OUM3RjU1QjIyQzhDNzJFMTlENzhENUIxMTUxCis6MTBFMjgwMDBGRkRDRTE4MTA2RjQ3MzFFQTA3Qjc3NjkyNjVFRkY2MEU4Cis6MTBFMjkwMDBDMTE3NTQ1ODk2N0QyNDUyNEFGNDU1MzdFRDZDMUQwOTI4Cis6MTBFMkEwMDBGQjFEMEU4RkY1NjNEQTk0QUE0OTA2MzE4RkU4MUMwNTMxCis6MTBFMkIwMDA3MkM4NjIyRjFCMjMzQzBFNEVCQjQ1QzAwOTc5QzlCOEZBCis6MTBFMkMwMDBFRjgzRjREQjBERUI2MDk5RUZDMjNDQTA4NEU3MDEwRjE0Cis6MTBFMkQwMDA0NENBNjg5RUNDMDcwMDNFRTEwMUI4RjAwNDkzRjBCNDU0Cis6MTBFMkUwMDA4RkNGQkVERTAzNDI5RTk5NzgxQjJBNDA3RkNENTgzM0U0Cis6MTBFMkYwMDBDNThCQjg4ODI3QUZCNTE4NjcwNjQwMjlGQjVBNjI3NEVBCis6MTBFMzAwMDAwNUZGREYxMzA1MDc3NzRBNEJFNDg3QjJDODZGNjFERDZECis6MTBFMzEwMDAxRTFGQzZFREQ2RjI1NUJFN0VDQ0ZGOEMwOEUxNkQ1Q0FCCis6MTBFMzIwMDAxRTNFMzM2MEYxQjc5RDI1NkMwQ0U2MDFGNzM2REM3OUIzCis6MTBFMzMwMDA2NkMwNjI2RjNERjk5QzVFOEMzMzA5NkYwNkVGNTJENDY0Cis6MTBFMzQwMDAxM0EwRjc2OEQ4OUI5QTBCMDJDRDBEQjJBNDU3QTFBQkNFCis6MTBFMzUwMDA1QjQ3M0I4OEU4RjQzQzZFQUM2NDI2RDZFM0Q1NjczNTcyCis6MTBFMzYwMDBFQTdGMTVCMjM0RkMyNkQ4OUE0ODM5NzMyMzVERjE2MEYwCis6MTBFMzcwMDA5MkUxQkM1QzE4MjM3QzdDRjZEQjA0QkZCMDVBNjUwOUQzCis6MTBFMzgwMDAwQjlERTA3RjU2OTAxRTM4RjJBNTFEQTg2MDgwQjc3RERBCis6MTBFMzkwMDBBNjkyREMwQzc4MUI4MjZCMjhGRTZDOUE5MzRCRjc2MTdCCis6MTBFM0EwMDBEREE0MTdFRURGMzNCRTg5RTI5NkNDQUZEQUEzRDExMDNECis6MTBFM0IwMDBDNUE3RUJDQ0E3OEU0RDhEM0Y4NEZBRTgwOUE2RkRFQUYwCis6MTBFM0MwMDBDMzQ0NjdDNkFGNkU4ODcwQkZGQTE5QkM0QUZGQjFGQjgxCis6MTBFM0QwMDBFODZCRTQzRkEwMDYyMTM5Nzc4MkJDQkY5QjY1MUYzN0ZECis6MTBFM0UwMDAwOTNCRTgyQ0U0N0FFODdDRkU1NUExQUY3RkE5ODhCNzA5Cis6MTBFM0YwMDAyMjFEMDZDNEI0RTA5NDZCQ0YzN0RCNjVCRTI5RTQ3OEY4Cis6MTBFNDAwMDBCREYyMDE3OTdDMjk2MkYxQ0IyMDhGMkY2NzkzMDNGQzQ5Cis6MTBFNDEwMDBEQUQwNUZBOEQyNUIzQ0FENjhBOEZGMzk2MkY4MjQzMzNDCis6MTBFNDIwMDA5MzM4Q0ZDNzlBMDk0OEY1QzcxOUM2QkJDMTc4NTIwQ0IzCis6MTBFNDMwMDBFNzJEMTNGQzdENTA3RkZDMUQ0ODZGQjg1RjMzOUU4RTI3Cis6MTBFNDQwMDA1MDVEQzhGNTU5RkE2NUIwNEIxRTdGQUZEMTZGRjdCQTcyCis6MTBFNDUwMDBDMDlGMDIzRDFENzg2QjY2RTZGOTIxQjFDRkNGNTU5OTdCCis6MTBFNDYwMDA4NzcwMUYyNzk0Rjg1NkEyRkMxRjU1OENBMDVGQzVCRTZECis6MTBFNDcwMDBBN0Q5ODg3RTg0RTk1MzZDRjMwNkFGQjM4OUYwRjQ5NThECis6MTBFNDgwMDA5OTZCRDFBRTk5QkVGODBBRjA5QkM1QkE4MjRGOURGMzQ1Cis6MTBFNDkwMDAwMUVCN0UyNTc3NkM2NjdDMjVCRTdFMTAzMTdFODZGMjkwCis6MTBFNEEwMDA2QTM1RTNCRjQwQkI3QkI5RENBNTI3MTRCQTkyMUQ3NjYxCis6MTBFNEIwMDA1NkU3MjQxNTE4MDdBNjk4QUZGMzdEMDQzRjBBQTgzQjNBCis6MTBFNEMwMDBDQkRGQTFCQzY4RTE3Qzg1RjJCNDg1M0VBOEUwQjJGODYwCis6MTBFNEQwMDBDOUYzMjJERTJDRDRGOTczNzZEQTA4NUFGQjFEODU1MTc0Cis6MTBFNEUwMDA5N0JERUUwNTk1MzBBQ0ZEOEJBODZCMTVGNkU1NjUzQzQ4Cis6MTBFNEYwMDBDM0JFNDkzNjdCQkIyOEVDNDlGNUJFNUQ4MjdFRjU2NTFGCis6MTBFNTAwMDA3Nzc2QkZGRDRFQzQ0MzcwNEE1NEY0MjU0NEZDNUJFQTYxCis6MTBFNTEwMDBFNUY1MTU3QjExRThCM0M0RDdFN0FBNkFGRjhGRTI2MjdECis6MTBFNTIwMDA4MjI1MTQ0QjVDRUMxQjdEOTFGQzFEM0RCMURDNUYyODBBCis6MTBFNTMwMDBGQTRFQUNENzhFNDdGMjU5MTQ2NUI2NzU0MTVGNUQ1MUZFCis6MTBFNTQwMDBERUM3NTBBMzk2RTc0QjU1QzZGQjFFM0Q3Njc5MDEzRENECis6MTBFNTUwMDBCRTI4QUZCQjlCOTRFOTU5RTkxOUM3QTY2N0ExRTc5NDA4Cis6MTBFNTYwMDA5RDlFQTIyOERGOTdFN0FBOEMyMkM0MDdGMTc5MzhEMkIyCis6MTBFNTcwMDBEMTUxMEJGQTk3NDVCRUZCMjZENURFODQ3MDFBNEI3NDM5Cis6MTBFNTgwMDA5NDk1QkU2RkRFN0EwQkUyOTE2MzRCREVBQTQ3RURGRUY3Cis6MTBFNTkwMDBCNTM0Q0FGRDZCNTk5NEZDNEFGNjc1MkI4NURDQUVEN0IxCis6MTBFNUEwMDAzRjVDQUJERDZGNzNEOEJCQkM3NkY2N0YyRkFGMTJFODU0Cis6MTBFNUIwMDBGMDdBMTM5RjI2N0I5RDc4NzVGNkZEQjE1QjdBNDYyMzMyCis6MTBFNUMwMDA5Rjg3ODQ3RUEyNkZDNzdDQzNEMDc5M0VGMjYwOTRFQkI0Cis6MTBFNUQwMDA3MTc4NDI5MkUwOUUxRDIyRkY0OEMzODE2MEIwMkYzN0MwCis6MTBFNUUwMDA1NDFFMzJGMzFBRjM5MENFRDk3RDc5ODhBN0Y1RERERDdDCis6MTBFNUYwMDA3OTU4QzczRjNCNTA5QjM1MEYzOTU0RDI0NTc0M0FGMzk1Cis6MTBFNjAwMDA5MDAzNDNFNDIxNkJBMjNDNUYzREZBQkYxRUNBMkI2QTE0Cis6MTBFNjEwMDAyRUYwMzg1RjczQTE0QkQ1NDEzRkQ3NDVCOTNGOUIzOUE5Cis6MTBFNjIwMDBEMEEzOUFBMDI3MzU5ODg3MDA5RTAzMjIwRjQxRjg0RDZBCis6MTBFNjMwMDBBMEJBOTE3N0JCNTRBNDZCRTY4NTFFOUE1NzAzNjNDQ0FFCis6MTBFNjQwMDA0MzY2MEU5MTg3MDAxNTJBRUFEREZFOUFDRTU3NzFERkU4Cis6MTBFNjUwMDA5Q0ZDQkU1ODY5NkU4ODVBRUFBREVBRkUxRTdBNEYyMkNCCis6MTBFNjYwMDBFNzc1OTY2RkNFMzM2OTlGRUQ3QTczNkMyQUE3MzczM0JGCis6MTBFNjcwMDA4RkVCQkIxMzZFMjhGREFBNTNGREU1RDgxRkQ4Q0E3MkQ1Cis6MTBFNjgwMDA0MzI4ODdGNzcyODY1NUIyMDI1RUQ3NjA1RUJDMTU0MTlCCis6MTBFNjkwMDA4MUVGQURBN0YzOTIwOUFDQUI3REZDRjk2NzczODdFRDExCis6MTBFNkEwMDBDNkFCRjQzRjNFNjExN0VGRTVEQzkyMTQ3NTkwNTEwMDY0Cis6MTBFNkIwMDBGMzNGQUIxQUE5QjkxMDBGQjY4RUZCNjI4MEYzQjM5RTdECis6MTBFNkMwMDBFQzY4ODM5MDRERUQ0RThERUFFOTNCODI3QzFGNjRGRTQxCis6MTBFNkQwMDBGNUQyNTI4NUYyNDM0MDMzN0YwMUMwQ0YxMEY4M0REM0NECis6MTBFNkUwMDA3ODdENThBRkZBMDk2RTVCMzlDRjIzRUY0ODVDQTRGRTAyCis6MTBFNkYwMDBDNUNDN0U4RkFFQzM3ODQ2RkYxQTVFMkZBQTNGM0M5RUU0Cis6MTBFNzAwMDA4N0Y5RkU0NzM0QTZDMkZEQTU2REYxNTZEMkNGRDMxRUMwCis6MTBFNzEwMDBFQTY3QzhGRTQyNTU2RjM3QzkyRDZGQzA2M0VCNzNFNERCCis6MTBFNzIwMDA4MjI3NEI1OUYyMTY4RjYzQ0NENEU1MDVEOUZDOTBCQ0Y3Cis6MTBFNzMwMDAzQUZCMTBGQkEyQTJGRUFDNjQ5MzJFODM1QzJFQjE0NzgxCis6MTBFNzQwMDAzQTkwMzdFRkY4REFBMzRGQjFDMUYzNjU3RkUxQzE0OUUxCis6MTBFNzUwMDBDNjMzQTgxRkUzRENGRERGN0UwNkU0NzVFMDJEMEZGNTcwCis6MTBFNzYwMDAyRDBFRUNEQTc1NzcyNUYwOTdFOEQyQThBRjJCRUIxOUQwCis6MTBFNzcwMDA5MDVCRDEyMkFDNjc1MTA2RDQ5NzNFQjkwQUY1RjI2MDlFCis6MTBFNzgwMDBCRTFDODM0MzAzQkEwRkE2REZENzdGNjI5NTYxMTk5RjMyCis6MTBFNzkwMDA4ODZFMzk4NzcxRUZFMDA4MDlGRjI2OUYyRkM3ODlGRTMxCis6MTBFN0EwMDA1NTc4NUVFM0UwMjgzRUJFMTQ1NTlGNEFEMEZFRjY2QkQ2Cis6MTBFN0IwMDA1NDQ3NkZGQ0E1M0Y5QjdGM0M1OTY3RDdENzdCQUFEN0FGCis6MTBFN0MwMDA3MzdEQkRDMjNDRjBFQkFGNDdCM0NDQ0I1OTYwNkVBQkIxCis6MTBFN0QwMDAwMDc5MUMxQzcwRDFGQjIxQThCMzUyOTgxRjNDMzhDOThBCis6MTBFN0UwMDA3QzAzRTExRjNEQzVFNTdBRjBBRDg3MDJCODRGREVFMTVECis6MTBFN0YwMDBGRDBGNjdGM0YzQkYxMUYxMjg1REU3NERFNkZFODNCMTJFCis6MTBFODAwMDAwMTBERTNENjhFMzlDRjlFQTg4NDc1NEVDRTFDM0Y0NUIwCis6MTBFODEwMDAwNTE2NDAxNjNFQ0M5N0U1N0M2RjFEQUZFMzMyRjRCRDg0Cis6MTBFODIwMDBBMkFFNDJGRkYzRDZCOTg2NkNGNjVFMTUzNTdGMUZCNUYyCis6MTBFODMwMDBDMUYzRjdBMkFENUQxQUM5QkZFOEQ4QkNERDc4RUUyN0Y5Cis6MTBFODQwMDA1NUQzRDVBM0MxRkUxRUY4OEQ4QjYxOUQ3MkEwNDJENDE1Cis6MTBFODUwMDBFMTQzRDExNTAyQkE4QUFFOEFBRTVEMzNCMkU4MUJEMDZECis6MTBFODYwMDBFNUE5MUIzMTk4QUU5N0VCMThDOUU3QzU0QUMzODdDRjE2Cis6MTBFODcwMDA5RDc0MzJEMUM3OUMyNUZDN0RDRTlCNUZBNEJFRTM4MUY1Cis6MTBFODgwMDA3RTE3MzU0RjJFMERFQzU2NTFGNTY0RkZCQkYzNTQxOTJFCis6MTBFODkwMDA2NjQwNkNFRUZDQjMyQUFBOTRGOTg4NkFCM0JCMTlBNzQ4Cis6MTBFOEEwMDA3MjZERTMwNzlBODdEQkM2Q0JENjhFQ0VEODIxRkNCRjJDCis6MTBFOEIwMDAzODNBRDYzNkY2MDY2RkI3OERDMzZDQUE2RERDMzBGRkRBCis6MTBFOEMwMDAwRTFCQkVCQTQwQzQzNjlFMTdCQ0RCMDY3RkE3QkVDNDczCis6MTBFOEQwMDAzNkJFQkI3Qzk5MEQ3RTQxNjhCNUVENzk0RDYwRTcxNjdCCis6MTBFOEUwMDA2QzFGQzUyNzRFRDY4NjMzRDJDN0M5NzVCMDBGNzlCRDA4Cis6MTBFOEYwMDAwNkU5RTNBM0E3MUUwQUEwNUVBNDZBRTI2MzUwREZGQTVBCis6MTBFOTAwMDBGMjdCNEFCMDdGRkQ5MjNCN0JCREY2NDg5RDJBRTM3N0MwCis6MTBFOTEwMDAwOUM2N0I4M0YxN0E0REMyODdDQkZBNkQ3REY5RDU3NTM3Cis6MTBFOTIwMDAzQzNFQUZBODUzQjJGNjA5OUNGMTU4QzY2MTE5OTc5REI5Cis6MTBFOTMwMDBFQjNCRTNBRTMzREUyRUJDNkRCNzhGRjdGQjc5REM1RkNDCis6MTBFOTQwMDAyQUY0QTBCNUZDNjc3RUFDRDc1RjZBRTA3RDg0Q0U5MkU2Cis6MTBFOTUwMDAzOEY1MERGQTQ0N0MzRUJBRjRCRTMxRjg1RTJEQjdEQ0QyCis6MTBFOTYwMDAxQ0VFMkRDREM0RUI0ODc5OTJGRDEyRkIzQzgxMjQxQjlCCis6MTBFOTcwMDA1QjgxQ0Y5MzZDNzUwNUY1QTVCNUM4NDQ3RTdGODJCOEUxCis6MTBFOTgwMDBCRjA2QUYxMEE3RUIyRDcyNzNDNkRGQjA2RkYyMEIwNTk5Cis6MTBFOTkwMDAyQzkzQUYzNEZDQzE4ODE2MDA3RDc3MzVFREQzOEFFMTI2Cis6MTBFOUEwMDAxQUYxMUZENkFDN0VFODY0Q0RBRjhBODc4OEQzOUZCNEI2Cis6MTBFOUIwMDBEQkM3MkI2NDFGMDcwNjE2QkY2RjFDNzhBMzg1RjdERDI2Cis6MTBFOUMwMDA3RkQwRTI2MzI5RTBFRjc0NEI4MEFFM0Y2RjA5RDJGRDQ4Cis6MTBFOUQwMDA1NzVBNzRCQUI2Qjc5NEQzMzVENTEyQTJFN0FGQjY1NDI2Cis6MTBFOUUwMDBEM0Y1RjkxNjgzQUVDNzVBNjI3NDNEREUxMjI3Qjg5RjdECis6MTBFOUYwMDBCNjM0RDJGNUM1MTY5M0VFNkYxNzc2RkE2MUExQzcyODIzCis6MTBFQTAwMDA5NzdEODVGODUxOTc0MjcyNkRDMEEzQkFCMzJFMThBQUFDCis6MTBFQTEwMDBENUNGODM1Q0ZGMjM5QjVDQUYzNTlFQTQ2QUJBNDdBMzI2Cis6MTBFQTIwMDA5RTQxQkNDQTZBNEZERDc1MzJBRjRGRUYzN0QxMjVGMzM3Cis6MTBFQTMwMDA2MUFDNUY1MDRGNjQ5RjBFRThGQjI2RDJFN0M1RkU1Q0Q5Cis6MTBFQTQwMDBEMUY1RDM3NzUwRTE3NDFEMkNFNEZEMUJDNEIzMjgxRjBFCis6MTBFQTUwMDBGREY5RDdFMkI1RTRDRjQ3NEMyNjdGMUU2NDlBREQ5RkNGCis6MTBFQTYwMDA5NzBFRjJFNzJCQzlFRUQ4NzFFQzkzNjI3RjkxREU1M0RCCis6MTBFQTcwMDAzOEZBMjAwNUY1M0FDRDkzN0Q5MDM5N0ZFMDdEOTAyQkQzCis6MTBFQTgwMDBGMTBGN0MxRjQ3QkYyNUZERjZENUYyRURFNEY3RDg1NDEyCis6MTBFQTkwMDBFMzY1QzQyM0UzRjNBMEY4NjFBRUEzRjg1MTJENkM5NkFGCis6MTBFQUEwMDA2OUVGNTI5RTk4MjdGOEQ5NzE2RTcxMDFGQTE3MkYxMkVCCis6MTBFQUIwMDBDOEVCNzQ4MzU1RTMzRTMzNzkxRTYwRjdEQTkyQzE3ODcwCis6MTBFQUMwMDBERkE4RTlBNjc4QkUyRDlERTdCQzRENzlDQ0UwRjg2NUJFCis6MTBFQUQwMDA5NzAzRTY0MkQ2RjgwRTcyNzhCM0FFNkFCMDdFRDZBOTM2Cis6MTBFQUUwMDAzRkVDREYwQ0YxRjk2MDNGRTM3REIyNjlGQzdEOUQ4QzZBCis6MTBFQUYwMDA4MzA3MkZGMDNFQzYyNTRENDkzMkQ4QkE1QUQ2REMzNUE5Cis6MTBFQjAwMDAwM0FFRkJCRkMwOEFFM0Y4QkU2OThDMkJCNDE3NDBGMzk5Cis6MTBFQjEwMDA4RTFDRDA3RDAwMTdFRTM3ODdFN0MwRjNFQTU0MEVDRDg4Cis6MTBFQjIwMDBBQjlEM0YzOTg5RTM4NkY4REJFNDlGNkEzNTdCOUNDNDYzCis6MTBFQjMwMDAwQzM1MUQ3N0E4MDk1NkU0MThERjlDODE1NzcxN0ZDQkVGCis6MTBFQjQwMDAzMjYzQzBCQjZFQUFBOUQ1MDM1RjhCMkYzNjMzMURGMDhECis6MTBFQjUwMDA3QjRCOTg5QkNFODcwQzhFRUZFQjE0NEI5RjRENjNBMUE0Cis6MTBFQjYwMDAwRUU0NDNGQkRDMzZGRTVFQ0ZBMTZGNTI0RUIyREYyNkQxCis6MTBFQjcwMDBFQkYwMjc5OTExQzBGNTlDRjhEQkM0N0IxN0U3RkI5NkY3Cis6MTBFQjgwMDBGNzJBQ0MyMEMyMkI4MTYzRjRCRTg1QUQ2NUZDN0M4NDYyCis6MTBFQjkwMDAwQkVBMTM5NERGMzA0RjcyNkZFOTYwQkREQjNGRTVDRUM3Cis6MTBFQkEwMDAzMUY1NjRERjA5RTVDNkQ0RUQ1RDBBRDVFREEyNkU2MkVDCis6MTBFQkIwMDBGQUE3NUNENjNBNDZENjREQ0VGQUU4MzFFMTY3NjU1REY0Cis6MTBFQkMwMDBGNDk4OUI1MUJERDVBRUU0ODY3NjEzOTNDRDkzRjhGQkI0Cis6MTBFQkQwMDBCOEU2MTk3OEFEQTk5NzdFRTkwQkI2M0FDOTFGQTgzRkU4Cis6MTBFQkUwMDAzMzMwMzU1QjFEQzdFQjExNzc3QUJGNEIwMkU3RjMzMjQ5Cis6MTBFQkYwMDBGQkVERjc5ODQxM0NERkQ4M0U3OURENTc1NkEyQkM0Njg1Cis6MTBFQzAwMDBGOEU4RkQyNkQzRTIzQUZBOUJDN0YxNDQzRkRBNzMyMEQ1Cis6MTBFQzEwMDBDMThBQTc2N0Y2NTc2NURBNzlFQ0M3NzY0MEYyODJFRkNBCis6MTBFQzIwMDA3N0UzRjUzQzlGNzBEMkU1QkU0NkJBNzAyM0U5M0RCNTY3Cis6MTBFQzMwMDBCNDc3MTYxN0VGMjU3OTFFRTkxM0Y3REI3NDZFRjcwQzFFCis6MTBFQzQwMDBGRDk2RTUzRDc5OUJERkYwMDUyQ0ZCRjgyOENBRDkzQjAyCis6MTBFQzUwMDBGNEJFQUFBNTZEMDFFQzY3NzdGOTVENjRBNzFEQkFCNjhECis6MTBFQzYwMDBCNTE0QzYxRDdFOERFNzI5QkEyQjk2RUQ3RDUyNDdCREEyCis6MTBFQzcwMDAyMkY4RTY3NDA1MDQ1RDZBNzgzMUU1MzM0M0FERDcyOTlGCis6MTBFQzgwMDBGNjVEOEU3MzI3OUEwNkQ5OTUxRThBNjNCRERCRUEyRjNGCis6MTBFQzkwMDA1NkIwQ0YyOTlGQUZBQTU3QzRCRTc3OTExQ0I2OEFGQzQ1Cis6MTBFQ0EwMDAyOEI3QkMzQkU1NDI3RDE5QjU2NjJBOEFDRDA3RjlDRTY3Cis6MTBFQ0IwMDA3OUI4RUY5QkQ4NERGOTUxRkIwODlGRUQ3Qzk2QkMzRThGCis6MTBFQ0MwMDAyNkYwNkQ3NTg3NjI1NEJGRTdCQjE4RDZFRjVCNEJCMzc4Cis6MTBFQ0QwMDBDN0MzODdDNUZFQjZFQTUzRTIwODlGMDBCOThDNTcwNjQyCis6MTBFQ0UwMDBDM0FEMTE3MDVCREM1REMxMDBBQ0JCNzVGQ0JENzRERUY3Cis6MTBFQ0YwMDA2QkVCMTg3MjM1NkNGNDhGNkY3QjZBOTM3RkIwN0RDMEJECis6MTBFRDAwMDA5OEY2Q0YxRDYwRjIzREJBRUREQzQzQUJERUQwQjgxMjExCis6MTBFRDEwMDBENkQ1NUU2MTIxMzQwQjY5MzdEQjMxM0Y4MUFCN0JENEMzCis6MTBFRDIwMDBFMjQ2RDRERjRCRDVCOTIxODRBRjUzNUY0Q0EwMUNEQjQ2Cis6MTBFRDMwMDA0MzhDRkExNjVBNjE5MzBGRTk3RUI0NDRBMzczMEU5MjgyCis6MTBFRDQwMDA1RUM4QkI3N0EzRkZDODBGQjk2Q0Y5Nzk0MTc1QUVDMzM0Cis6MTBFRDUwMDA4RkRBRTk4MUY1NDhFRjg2REE1RjI3N0Q5NDkyNEY3OTYzCis6MTBFRDYwMDAxRkY4NDJCMzMxOUUwNURGQUI2OTdCQjdFQjk3RkIwQTE3Cis6MTBFRDcwMDBGQTc1MjU3RTZDNzFCMjI0MTMyNzhGMUNGQkQ3RDVGODRBCis6MTBFRDgwMDBCRUUzNzFDNjlGM0Y3RjZDMEVENUVEQ0VGMThEQjJGMzIxCis6MTBFRDkwMDA1NkFEQUIxMUY3QTU3NTlDODdGNENGMzk3RjZCMjlBN0NBCis6MTBFREEwMDBBQkI1N0U5NjU4MzdBMEEwRkU2RkFGMkVDQTQxM0ZFRDlGCis6MTBFREIwMDA0Nzg3NkI5MUVCMEI5NUU2Q0ZFQjJENzFCODMwREE0Q0IyCis6MTBFREMwMDA3MUY4QkJGNThDRTRFOEQ3RTM4MTcxQTAxN0ZFNUUxNUZFCis6MTBFREQwMDA3NDBBRTRFRUZBRjMxRkNFRUFENzJFNDdENjY1OTBERTJBCis6MTBFREUwMDBGQTU5RTZGNzY3OTBDQjMwQzZGNUM0Q0YxRUVCQTFCODUxCis6MTBFREYwMDBDNDM2MTA5Qzk0RDdGNjVCNEY4NjUyNkNFODc1RkRENUVGCis6MTBFRTAwMDBGNjNFRDMwN0VEMjNGREE5M0VCRjk4RTQ5Q0MzNzI1MEE0Cis6MTBFRTEwMDBDRTk3RDgyMzBBQzVFMUE4NDE3NjE3NDhGQjU1N0VGRTU4Cis6MTBFRTIwMDBBNDU4MEU4MTFEMUM5M0NBMjk5OUZFMTJDM0Y3MTc2OEI2Cis6MTBFRTMwMDA1RjI2QTMzQzg1MjA0NzhBNTc1NzNBRUQwQkNEMUIyRDAzCis6MTBFRTQwMDBEMERDOEMwNzYzNTRENDdGRUU3NzJGQjFCN0Y4RkEzMDVCCis6MTBFRTUwMDAwRENGOUYyODA5MTdDNUNCNUI1MUFGMDFBRTk0OTk3RkE5Cis6MTBFRTYwMDAzQzlCRTU1Q0NFOTg0MEQzQkVENTcwMkQ5RTI3RkE2MkMwCis6MTBFRTcwMDA4MjlGMkJDOTQzRDJGREI3RDI1QjE5RTc5REZENTBEOUM0Cis6MTBFRTgwMDAyRjdEMDZGQkE1Q0E5NUZCQTE0Q0JCNDg3MjkzNzlBQ0JDCis6MTBFRTkwMDBCMzNGMEE3MTJEMEZFNUZFREUwNDhENzU5MkRDNzkxRUZECis6MTBFRUEwMDA5MEE5RDc0RDlGRjUxQzlEOEM5N0VEODFDNUI2M0VGQjczCis6MTBFRUIwMDAwQ0E5NEIwRTNFQkY3Nzg1QjhEOEQ5MEI3RTEzRjNFMTcyCis6MTBFRUMwMDBFMDY2RUFCM0VGM0ZCREVBMzhENkUzOTc4MjFFOUQ1OTZDCis6MTBFRUQwMDBGQzdGN0JCRUZEM0Q4MEM0RkJGOTc5QTI5RjNFQUE5RUNDCis6MTBFRUUwMDBFMTdDQURDNzY0NzhGRUNFMTMwQzUxNUM2ODU1QjJCRkFGCis6MTBFRUYwMDAzRjY4OUQyN0YyMDk2NzlDNzBCQzY3Rjk5RjFDN0ZEMjExCis6MTBFRjAwMDA1M0M2RDJGMTQzMTVGRTU5QzY1N0E2NDExNDFENjk5RDNCCis6MTBFRjEwMDBDRkZEQTg5NEM3N0U5MTU3NzYxRUY5MDQ5RDE3NjA0MUQ2Cis6MTBFRjIwMDA0QkZGQjYyQ0NCRkFDRUZDQ0YzMEY0QzBGNDRDM0VBQTRCCis6MTBFRjMwMDBGNEYzM0M1NEFFREYyRUVBRTdENkQzN0MzRjcyQzVCOTdBCis6MTBFRjQwMDBBMTQxRkE1QTYxN0U3QTFFRjY3RkNBNUQ4RTNFOTVERDNBCis6MTBFRjUwMDBERjM4RjM1QUFGOEYyNTcyMkRGRTBGRjJEQThERjMyOENBCis6MTBFRjYwMDAxRkIxRTdBNUMzNjM4QzlGRUYyOTM0MTlGNjcxMjI0MUM1Cis6MTBFRjcwMDA1M0M1QkVDQkY0REU2Njk1MDFERjMzNEVCRkZGN0UyQzVBCis6MTBFRjgwMDA5QUM3RjM5Q0Y2RjI1NTcxQUM3RjY0MUY3OUM3OUNCQjlFCis6MTBFRjkwMDBDOEJGNDIxQ0REM0FDRjUyQzdDQTczMEIxRkI0QUYyNDlGCis6MTBFRkEwMDBGNTc1QkFEODQ3ODk2RkQwRjk5MkQ5MUJGOEZCOUZEMzcyCis6MTBFRkIwMDAwRjlENDA3RERDMEZGQTg4NzFCRTNEM0ZCMUFEMDJGMzdECis6MTBFRkMwMDA5MzU3NTRCNjU3MUZEQzg3NzJGMjI1RkI0OUZFMThEN0JBCis6MTBFRkQwMDA1MzRGQjBGREU4NUM5NzQ1M0VGRENEQUE0RUYyMzExODg3Cis6MTBFRkUwMDBCRUVGRDFDNEZCMUU2N0ZGQzhFQjM1OUEzMTdFQTc2QTFFCis6MTBFRkYwMDA4QzQ2NkJGRjU4Q0E2RDkxRDBFNzM3NkE5QUU5N0RENDg5Cis6MTBGMDAwMDAzMzQzQkNGRjk1NzBGODk5MThENkQzQjIxRjU1M0FDOTRGCis6MTBGMDEwMDBGQzNFRUVFQkY0RDg3QTE1REQ0ODc1N0MzRDlEQTNDQzIzCis6MTBGMDIwMDBGQjc3NDY3NTIwQ0I1NTkyN0I2MUE5MjM3MzlFQTUzQTQ5Cis6MTBGMDMwMDBGMUY3NDE0NkZEMzIwRkQ2ODlDNTU4MTdGMjNBNTFENjNECis6MTBGMDQwMDA5RkQyNEZENEE5NEY3Nzk0RTFGOThDNUU4RENFREJFNTRBCis6MTBGMDUwMDAxREY5ODQwRkYzREU3MEVGNkFBQUQ1MEM2NTY5MUVFRTA4Cis6MTBGMDYwMDBBMzNDN0YyNEU5QkNERTNBQjMwQUVCNENDQjdCOTI4QzA5Cis6MTBGMDcwMDBERjg4RkQwMkY1QTBCMzI1RkU4QjI4RThDNzgxMTY4MzQzCis6MTBGMDgwMDBDNkVEMkQ4RDc0QUREMjkyMDZGMjUzNTU0RTk1MUI5QjU1Cis6MTBGMDkwMDAzNTAwQ0YyRDc0NTRGNUM0NkNFMzFEOTVFNjE5RDRDQjFGCis6MTBGMEEwMDBCQ0YyQjhFREJFMzcwOEY4MkM3QTAxNzVFRTM5OTJFRjU0Cis6MTBGMEIwMDA2OTJFNEZDRjdDODVDRTE1MkNFQzY3NUJCODZERkZEM0U2Cis6MTBGMEMwMDBGODIxMkQ3NjYzRkM1MDRFRUM3REZEMTA3RjVGRUFFOTYwCis6MTBGMEQwMDAxN0VGNEIxREY2QjY2NzlFNEU3NjkwQjYzQjdDNkY0QTk3Cis6MTBGMEUwMDA3MTJFNDFGM0U5RERERjRDRTA2N0Q4MjdCOURGQ0E5QzE4Cis6MTBGMEYwMDBDRkEwRUYxMkMzRTI3QjY5M0QzNjZCMEZFNkIzRURBRkY1Cis6MTBGMTAwMDAzM0Y5OURGMDFFQzNGMjFDRkU2QUMyRUY0NDBFNjNCMUQ4Cis6MTBGMTEwMDAwQjc5RTZFNjU4NjExMzdENEYyREJFODc4OTM0MTY5NjJDCis6MTBGMTIwMDBGNEIxQ0NCOTQ1QTdCQ0I2QzQ1Q0I2NzMzMTYxQzZGQkJCCis6MTBGMTMwMDA2MkYyRjkyNzYzQTI2RTAzNzY1Qzk2NzMwRkI5NzhFRURDCis6MTBGMTQwMDAyMTRCRkVERTI0RjAzNTBCMzk3NTc4RjhCOTgzQjk4RTgyCis6MTBGMTUwMDBFRjNDNjZDNjc4NUQzMEQ0NzcxRTlGMTM3OEFFRjQ1REMxCis6MTBGMTYwMDBDNzYyMDE3NzNGQUU1NzQ1RTcyMkMzMzFBNDM3MkVCRUIxCis6MTBGMTcwMDBDRjEyNzRDQ0VBNERCNjBFQzMyNDMxQzhCMkUyQjkzMzEzCis6MTBGMTgwMDBDNkNGRUZBNTYyRkMzQ0IxMjc2ODY4QjgyRjgwRUY2RTUwCis6MTBGMTkwMDBDMkQ3QzhDRjU5Q0FFN0IzMkVBNDlGMkYyNDNENjlFMDM4Cis6MTBGMUEwMDBDRjY3NUQzMEE5MUYyNEJGQUZCQkYzRjhEODNEOUJDNjI2Cis6MTBGMUIwMDA2NUNFRDdCNDYzM0ZDMjhGREY5OUYwNzM0QkJCMDRGREJDCis6MTBGMUMwMDBDRUFCRkNDRUU0REU4MDM4QTc5M0I4NzU4RjgxNzgwQzg3Cis6MTBGMUQwMDBGRTVENjVFREYxMDkwMzA5OERENkZGMThEMTI3QkVBQkExCis6MTBGMUUwMDA5OTJDRjg4NUZCQUI4ODJFQzdCRjBGRjBDMEYxRTAxRTRECis6MTBGMUYwMDBGMTNEQ0UxQTlBRDdDQ0U5Q0VGQzdCMDdBMTNERDZFRkU0Cis6MTBGMjAwMDA3QjI2MUZBRjZDMTJGMEVCMDg3RTJEODdDRkEyMEY0MjNBCis6MTBGMjEwMDAxRkE3RUNDMTVFRUE1NUUwRkIwQ0QxQjc5Q0QzNTcxNjkzCis6MTBGMjIwMDBEM0Y5Nzc1OTBFQkQwNUI4Q0ZEM0JBRTIzQjlGREVGOENDCis6MTBGMjMwMDA2QTFGRkFGM0NDRjdGQkI3RDE3QTU3MjFBNzM2QzI2MzFFCis6MTBGMjQwMDBDQUY1OTgzOENGQzRFRDQyRUFCRkQ0ODc2RjA4RkRCQzM5Cis6MTBGMjUwMDAzREE2NDhCRDdBOENFODZEQkE2MUZDN0Y4OUU4NzE3Qzc3Cis6MTBGMjYwMDA1Nzc0MjUzRTJBMkFFMzRGRDBCQzYwRkE1Q0YxRDc4OTU3Cis6MTBGMjcwMDBBRUVCQTQ0NzdFMDdFNkI0OEJFRjBCRkU2MUREQTc2OTFBCis6MTBGMjgwMDA5RDkyMTA5RDJGODI3NUJGN0QyM0Q2MDVCQ0NGMTAxRTg5Cis6MTBGMjkwMDA1RjFBRUZGRTU4NzY3RkYzODFGMEIyOTJFMkFCM0ExRjJECis6MTBGMkEwMDAyMkM3RkYwRjk0QjBCRTM2MzA0NjAwMDAwMDAwMDAwMEI5Cis6MTBGMkIwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDlDCis6MTBGMkMwMDAwMDBCOTNFNDY2NjBGODUxMEZDMTgxNDg2QzYyRjExQTNCCis6MTBGMkQwMDA3NjA2ODY2ODE2MDY4Njk5QUMwQzBDMTU0MDJDQzc0OTM0Cis6MTBGMkUwMDA5QUZFRTU0MEZEOEI4MDc4MkUxMENGMDBFMkM5NDBEQzBECis6MTBGMkYwMDAwN0M0OUQ0MERDMDJDNDkyNDBGMzQ0ODA5ODFGODhCOTQzCis6MTBGMzAwMDA4MDk4MTU4ODE5ODBGODM3MDcwM0MzMzcwRTg0MzkzNzdBCis6MTBGMzEwMDA4MDYyMEY0OEI0MUI4NEFENzgxMEVDMzM0MEZGNkYwNDVCCis6MTBGMzIwMDBFMkFCNjQ4NEMzMjgxRTFFMzg5RDlGODFBMTVBMDBDMTkwCis6MTBGMzMwMDAxNzEwNDQ5NUNGRTA0N0IwQjk0NDI5QjM0QjFBQTgxRjIyCis6MTBGMzQwMDAwMDY1NkQ0MEI0ODAwMzAwMDAwMDAwMDAwMDAwMDAwMDc0Cis6MTBGMzUwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkU1N0QwQjc4NTRENUUyCis6MTBGMzYwMDBCNUYwM0E4Rjc5NjY2NjcyRjIyMDRDNDI4MDEzNDgzMENECis6MTBGMzcwMDA2QThBMDM4NDA4ODJGNTI0MjBDNjk2REE5MTUyQzVGRTczCis6MTBGMzgwMDBENjBFMzQyMjRBMjA1MUIxNzIyQkZENzI2MDAyMDQwMTY0Cis6MTBGMzkwMDAzQkJDMTQxNEU5RTAwRDhBOEEzNjIyNTZBQ0U4M0YyMEMzCis6MTBGM0EwMDBCNUI0QjU2RDZDQjlENTVBRUQwREI1QUQyRjBDODg1MjBECis6MTBGM0IwMDBGQ0ZCRUJFNUVFQjUxRjk5NzM0RTY2MTI1MEYxQjdGNzAzCis6MTBGM0MwMDAwRjlGRUVFQ0IzNUY2QkFGRDc1RTdCRURCNTc3RENCMjMyCis6MTBGM0QwMDAwRkYyODcwMjlDQzQ5RjhCMDBFRTcwMDNDMEQ4NzQzQTcyCis6MTBGM0UwMDBFQUI2NkZDQzdEQTQ5QUZDRkU3RkREOTE2RDdBQkE5RTYxCis6MTBGM0YwMDA0ODg3ODI0NEVCMDExODAwNDUwMDE3NzlDOUFGQTRERUE1Cis6MTBGNDAwMDBBNDlGMUZGRUQzNzk4NTAwN0I0MTAxMEZGOTk0NTIyN0Y5Cis6MTBGNDEwMDAxNTdDOERGNEIzRjcyMzg4NjBCOUZDRjM0MDY5NTcwMDdECis6MTBGNDIwMDBEQjk5QjRERDk3ODFCNTRCOTVFOUE1NUExNTY2NDBDNkMxCis6MTBGNDMwMDBFRjg2OTdGRTRFRkExOUJFQjk5OUI0M0ZGRTYxODBCNkM5Cis6MTBGNDQwMDA3N0MyMjE1MkY4NDg4NjE0NkY3MzcyMThGNkFCN0VEMERCCis6MTBGNDUwMDA1NUM5RjM2NTQwMDYwNzBFRUY2NDgwOUEzNEJDRkI1RjI0Cis6MTBGNDYwMDA3QjgzQzJCQjRGMjVGMEVBMTlDNkY3MTJGODBCRDNGMDI1Cis6MTBGNDcwMDBFRjg1NkZFNDQyMTU4M0RGQTg0OUMzN0ZCQUYwRDBGOTY2Cis6MTBGNDgwMDAwRjAwNThERUEyM0Y1REVFMDI1OEREMDI0Rjk3NTcwMDk1Cis6MTBGNDkwMDBBQzZDRjFEMkZDRDIxNjhERTZFMzJENjE5QTVGQUU5MjkwCis6MTBGNEEwMDAyNjA0MEZDQkRCMjE2OTkyRjZBMTZBNTI1RkY0NDdGRTc2Cis6MTBGNEIwMDAwQjU0Nzk2RDc5NzcyMTY5RUY0REU3RDU0MEQ4OTZGN0YwCis6MTBGNEMwMDA5NkVBQjYzQzAxRTc2MDk4Q0NGQjFDM0U5RkE1MkQwNDU0Cis6MTBGNEQwMDAwNzFFMUNERjBCQzY1OTU4RkU2RDhBMTcxRkM3NUIzQzAxCis6MTBGNEUwMDAzOEUyQ0E2MTA0MkY2RDJGMkE4NEQyMDAyRUREOTg4MTY0Cis6MTBGNEYwMDBGMDk1MDdEQzdBOTJCMEM2Mzk4MUQ5NTM2MTI0MTkzNzY3Cis6MTBGNTAwMDAxNDAzMjBGNUUyMUIwMEQ2MTJCOENGMEU0Qzc5MEI0MjQzCis6MTBGNTEwMDAwMEY3OTNGRURCNDhGRjRBQThFRDY1MEYyOTVGNTFFNjJGCis6MTBGNTIwMDBENjE1QzRDQjc2RjUyRjVENjQwQzJGRjk4Nzc4M0I2QjJECis6MTBGNTMwMDAyM0NCQTdFNzQ1RjI5Njc5OUUwRDk2NzJEMkZFOTc3OTc2Cis6MTBGNTQwMDA3N0JFMkMxMTM4RTJFNTZFREQyM0E1QzdFOUExNEIzRjVDCis6MTBGNTUwMDBGRDU3MjRFQzc5NjdGRkU1QkE1MTg3N0MyQUZBQUQ4MDI0Cis6MTBGNTYwMDBFODEyMkRGMEM1RURGNzFDODJEQjgyRkM3NEJGNjI5Q0IzCis6MTBGNTcwMDA3RUZCMjVFNDhGOTJCNjE1MUIyMTk5MkFFQjNENEVCOUVGCis6MTBGNTgwMDAxRUE5Mzc0OTc5Rjk0NjE1OTI2NUVDN0IyMTkxODc3MjVFCis6MTBGNTkwMDBGNjJCMkMyRkFERjNDN0FBN0FDMzAzRDY3MTg2QTVFOTQzCis6MTBGNUEwMDA1MkFFQkI2N0NBODQyRkNBQ0JBRjk4MkIxMUJFODE4NEUxCis6MTBGNUIwMDA4NUNFQzMxODgzQTJCQ0ZDQjA0NUEzRkNCOEJBQTU5MjAzCis6MTBGNUMwMDBBNkVEMkQ1QTA3OTU5RjhGOTUxOTFENTVCREU1RjBBRkY2Cis6MTBGNUQwMDBBOEE3NDhCQjNCNUM0MEY5RDBEQzA2Qzk2RDEyRjYxNzAyCis6MTBGNUUwMDA5RDMxOTNFNDU3OEQyQTFBN0RCQjhFRjkxOTMyRUEwNUI1Cis6MTBGNUYwMDBDMURGQUIyNDlERjJCNzQ5RjgxQkY1OUY1MzNFNTZCQkM0Cis6MTBGNjAwMDA4Q0FGNjA3RjJCNDZDOUQyMTJDNDczMzlFM0Y3NzI1N0FGCis6MTBGNjEwMDBDQTNCMUNGQjREMEMxQjY1NjIzRjkxREY3NTYxQkRGMjVGCis6MTBGNjIwMDA4QTExQkE0MkM2M0RCQjlDRjFGRjJGQzdERUU5NDUzREJBCis6MTBGNjMwMDBEODMzRkY4NTQ1MURFNTYzMDA3MjFEN0NBMDlEMjIxRjA4Cis6MTBGNjQwMDA2ODEzRkJFNjAzMzFDRTY3MkQwRjY3OEVCRjEyN0RGMjg0Cis6MTBGNjUwMDBEN0FBQzhEQUI3NTA2RkI0OTczM0JERTE4NEFCNzg2OEU2Cis6MTBGNjYwMDAyQTFDMERGNEU2QjdGMjcyQzI2NzQ4QTc0OERGN0NFNkIxCis6MTBGNjcwMDA0QzM3QjQyNEUxNzVDMjQzRUI1QUMyOTRFRkQ2QjRFOEQ4Cis6MTBGNjgwMDAzNDVEQzlGOUQwODUzQzU1NENGMjlDMEZBMUIwOUFFNjg3Cis6MTBGNjkwMDBCM0FFNTdCMDk4QUU0NzAzQTYyNzIxNDZFMDVDODdGQzdGCis6MTBGNkEwMDA3OTAxN0U1RjZBMThBNUE0NzlBNUM4NDM0QTI2QkE3RjY2Cis6MTBGNkIwMDAwRDk2OTdEMEJDMDFBNUM4OUZBMkZDMzFEMzIwRURGM0Q1Cis6MTBGNkMwMDA3OUZEMjlEMjYzNjY5QzIwNjk5RDhGRTVFQkE1NkVDMzA5Cis6MTBGNkQwMDAyQ0I1QjY1RjY5MTgxM0QzRjU0OTNFNTU1NzZFRUQ4RkJCCis6MTBGNkUwMDBGNDVGNjU4NUU3Mzk1QTVGRjRENzIwMUQzMjRDOTI1RjhECis6MTBGNkYwMDBFMzYzRkRCNTQ5MkY3RjJFRkRERjJFMjVDMkI4RDBBQ0M4Cis6MTBGNzAwMDA3MEY0NzNCQkM4OUIwOUMzQTg0QThGNTNCNkY4NTFDM0EyCis6MTBGNzEwMDBCNDk2QzNBM0I2RjI5QUM1MDlEMzI0NzhCQjBCQTJDMzhGCis6MTBGNzIwMDAyNTQyREZFMkE5RDEzMDEwRkFGQkEyNDkxMzk3REEzNDVGCis6MTBGNzMwMDA3QzBDREZFOUY5REQ0OUUxRjU5N0IzRjIyQUU5Rjc0NkY4Cis6MTBGNzQwMDBEQzQyOUY1QUU5MzcyNkMyMkZFQzFCODVGM0FCRkNGMzUyCis6MTBGNzUwMDBEMjlCNUYyMEZDQUFFNEJBMjNENENFMjgyNDk5RjE2NDdBCis6MTBGNzYwMDBCQ0U5MzFEMDA5MUM3MjM4MDZBODBGOTRCMEZBNzdBQjA3Cis6MTBGNzcwMDAxQzA4RkUyMzcwOEVBMzcwNEU4RUNFQzgwMkE3Njk4NTJBCis6MTBGNzgwMDA1M0MwRDExRkRDMDI4RUVDN0NDQUM2NzdGMjUzREQ2NTE0Cis6MTBGNzkwMDBFMzdFM0I5MUIwQjhBRkQzMTU0MTNCQUYwMEYxNDRGNEU5Cis6MTBGN0EwMDAwMDdDQjRDRTcwOTFFRjA1RDMwOEVFNzU0QUI3MTkzMERFCis6MTBGN0IwMDBCQzc3QkY4NTUzNEIyMDY5NTlDNzNGNkJCQTBFQzdGQzU2Cis6MTBGN0MwMDA1ODhBQjdFRjQ4NjNEM0Y0MjVGOTk5NTYzQzhFRTNGNTkwCis6MTBGN0QwMDA5Q0ZDMjdFNkU3RUUzNUJGRUZEQUU2MDc2QTIyMUMwRDUwCis6MTBGN0UwMDBGNjNGQkYzNUJFQzg4QzY4QTA3N0JENUY0QUNDOEVBRUYxCis6MTBGN0YwMDA5QjMyRUVFQkMwQzYwMzBGRDE1Rjc5MzhERUU4RjQ3OEI4Cis6MTBGODAwMDA3OTVGMjFFMzYxNjc2QTMyRTM3OEY5OTNDOTc4REUzMzdGCis6MTBGODEwMDA4NzRGQTczQzBBNzg3REJERTA1RDY3ODNGNzc2MTc5MTM3Cis6MTBGODIwMDBEQjBDRjQzRkQzRjA5RUFBRkNGOTg5RkVBNUYyNTdEOTcwCis6MTBGODMwMDBCN0ZDN0RENkZERTVFMUFGODQ5RkRFNTcyMTc1MTFDMTkwCis6MTBGODQwMDBENzgyOEJCRDQ5NTM0QUVCQjlDRjFCNUYwNTU4NDRFOEJCCis6MTBGODUwMDBCN0UwRDc2MzBFNUQyNDYzODZGMEY1OTdEMkUzQ0Y5N0M4Cis6MTBGODYwMDA3NDBBNzczNkZFQ0UzNjFGODBBNEFEOUZGRjU3RjNDOUNBCis6MTBGODcwMDA4NkQ3MzNBRDg3NEU1NUJGMkVGOTgzOUZFRUVGOTY5NjEwCis6MTBGODgwMDA0MzEyRTU2OUU5ODE4QkU5M0U3M0U5MEI5MzA2MDJFOUNFCis6MTBGODkwMDBDN0Q1NzYyRTE4NjQ1Mjc5RENDRTU4OEE3NjA2RjYzRkE0Cis6MTBGOEEwMDBGOUQ0RUM4Q0RCNUJBMEEzOTUxODVENEY4NEEyRDQyRTE5Cis6MTBGOEIwMDA1QTJBMDE2REJGOEFEODZENDk2MkJGNTRCRkQ4RUU5REU4Cis6MTBGOEMwMDAxOUEwNzYxNTREOTdCQTgwREEzMUQ1MkZFRUQ3MjY5MTRCCis6MTBGOEQwMDAyOUY4MkJGMjQ3MjFFRjJGRjU4OUVGMDdFQkQxQ0U1RDA5Cis6MTBGOEUwMDA1OTRFQkUxM0Q2NTgxQTY0RkQ5MUVGNTFBQzlGNTNDMUM3Cis6MTBGOEYwMDBCRTY3ODMyQkE3OTJDMDYzQzFCQkNGOUQ4QzY1RDI4RjlGCis6MTBGOTAwMDA1Rjk2NjU4QTlGNEREQ0VFNUE4RDc2MTc1MUM4M0U3RjEzCis6MTBGOTEwMDAyMjg2NzZCNUJGQzhBRERGMjdGNTZFMzc0MzY2NzZGRjIyCis6MTBGOTIwMDBGQThBOUY5OEU4RDI1ODgxRjYxQjk5RkZCRUNCRUY4N0UxCis6MTBGOTMwMDBBRTJBNUMwNzEzODY4Q0VEMjNDQzM1QjBDOUIxREUwNzQ3Cis6MTBGOTQwMDBEMDg2QTNFQjY2NTg5QTQ0RDY0Q0JGMjNCRjVBRDQzNzBGCis6MTBGOTUwMDBGNTVBQjRENzQyOTVBQ0JDNzZDOTg1QjU3MTZCMzk5QzY0Cis6MTBGOTYwMDA1NzhCRUJBRTI4QkY2NkM5NTg1QTVFRUM4REJFM0M5MUYyCis6MTBGOTcwMDA4QzVGNENGNDY3OUNFMEE5NTg0RDQ4Q0Q5NDlFOTlGOTUyCis6MTBGOTgwMDA2NUZEQjVERTE5NDkwMkMzRkFDQkVGMkNCQjM2MDM5RUU5Cis6MTBGOTkwMDAwODE1Mjk5RDQ1QkVBNEMxMkU1RjlCMzhERTU2NzMzQ0Q5Cis6MTBGOUEwMDA4NjUxQzYyRDdBQ0RDN0FBRjZFODM1REY1OTRDQUZGOTk2Cis6MTBGOUIwMDAyQjEzOEIxMUNGMjUwRDEwNDEzQjdCM0RDMTVGQ0MzMjBBCis6MTBGOUMwMDBCRUFGRDJBRURGOEE1NUZCQkNDRUQ0N0NFRTAyRTMyQUJBCis6MTBGOUQwMDA3OTQwRjZGRTlERjI3NTE3QzQ2NjYyRkQ2MkJFOEVGQjJECis6MTBGOUUwMDAyQjkzNTJBQ0FBRkZGOTNCRTc5QjZEREU1RkU1RjgyNDUxCis6MTBGOUYwMDBFM0NDQ0YzNENFRTc4NTk3RTIwMDE5QTdGQUIzMUZDNzRGCis6MTBGQTAwMDBERjYwRDc5M0E3OEE3NzY4NkMzNzcwNUY4REE2MjZFRTg0Cis6MTBGQTEwMDA5QjdEMzAzOTkyQTJGQkI5REJBODFGRUUxNjBFM0JDNENBCis6MTBGQTIwMDAzNjY5NjhEN0M0MDEzMkVBMzNCNURDOURGNkE3RTFGRjM5Cis6MTBGQTMwMDA5NEFCNzMzM0QxNDVBNDBCNUY3RDJGNkZCRkE1N0U1MjZFCis6MTBGQTQwMDAwRTE2RkUzRDg3RkM3MjNFOUM3RjUyNDlCNzA3RUVFRkQzCis6MTBGQTUwMDA1MzA1MUM4MTdDREJCQzRFQjQxQ0NEREI0RkY0QzYxQUI1Cis6MTBGQTYwMDA2RDFBRDVDN0Q5QzY3QjkwRThEMTE0OTFBRjA3NUFCQzlGCis6MTBGQTcwMDAzNERERDZBMjQxOEFDOEQ5QkYxMzc5QzNGQzU2MjI3RjkwCis6MTBGQTgwMDA5OEZFODhFQzE3MzFCREI3MjU0MkNCRUY2OTE5NDdGM0QzCis6MTBGQTkwMDA5QjVBMEM5QUJGQUJBNTlFQTYxQjVBQTJGNEZCQkE5NjIyCis6MTBGQUEwMDAxOTM0REY4M0NGOEZDODc4MzU5NDY1MDFFREFBQjM2NzI5Cis6MTBGQUIwMDAyNDRERDQ2M0IwMDMyMjE1MDRCRkNCRjFCQjA1RkVENUEyCis6MTBGQUMwMDA3MkVEQjMzMkZBM0Q2N0Y4QTg3RjIzQzhFN0U5ODdBNDRGCis6MTBGQUQwMDA4MUZBMUIwRTJBQjAwREIyQ0ZFQjBFM0VBRkFGMjgzMjJCCis6MTBGQUUwMDBGMzlGQUE5NTc0NzA0MTRGQjkxREE4NUZBNUE4OUFBQzYxCis6MTBGQUYwMDA1QjQ0RTVFNjVFRDg5QThGRkM1RTU0Q0RCRTA3MDM4NDc2Cis6MTBGQjAwMDA5MUM4NzdBNTFBNTJCRTEwMUQ1QUM1RjYxQTZGREYzNjc2Cis6MTBGQjEwMDA0RUE2RjU1NjZCMkE2REVGRTQ4QjczQTE5M0FFMzM2MDVFCis6MTBGQjIwMDA3ODIzMDhBNzc3QkNDQUVBNTdCMTc1MzI3OEZFM0VBNDlECis6MTBGQjMwMDAyMEI0NEQ5NEU5RkFCOUJBOUNDMUExNjg3NjdFMDlENjgxCis6MTBGQjQwMDBEQzA3NjhFRjg3OTU2MTc0MUVBQjJGNTAzNzBENDczNjgxCis6MTBGQjUwMDA4MENFOTc4NzkzN0UzNjkwQUQwREFFNkIwRjZDREVBOThECis6MTBGQjYwMDBDREI0RDBEOUFCMzBGQkZDRENFOTNCQTMxNTA4OEY0QTAwCis6MTBGQjcwMDBFNDlBOEM1RkI4RDk5RkM0NzU4N0QwNDM0MTc4NzM3QzcxCis6MTBGQjgwMDA2QzNFRTdFMjk4MDQ4RUMyNDU5MEJDQUYyQzVEMUVDODY3Cis6MTBGQjkwMDBFM0YzRDE4QzVBRUE5NzEwREZCOUUyMzk1N0VGNDhDOTNECis6MTBGQkEwMDBEODZFMjM0NEVFODM3NEI5NEZCNDMzRUNFRDdDQTI5RDQwCis6MTBGQkIwMDA5OTQyREM0MkUxMkE3QjNCQkY2ODA3QjVCNjc2N0VEMTJECis6MTBGQkMwMDAwRUQ2MUE3NEJDMDQ2OUE3QTdDQjE1REVBRTQ3RUUyQjgwCis6MTBGQkQwMDAzNUQ5MkE2NzRBNDA5Nzk5RENEOEU5OTQ4RDdGMzRFMDdCCis6MTBGQkUwMDA3NEQ4Njc0QTI3MTE1RkQ1MkMyRjQ5REVCNjkzMzJBRTAxCis6MTBGQkYwMDBCMzc2M0FGOTUxQ0VBRDdBMjY2MEM5MTNEMjQ1NTE3NjIzCis6MTBGQzAwMDA3MUJGQzZFOTk1MzQzM0QzNkI5RDFBRjk0NTM5Q0VBRjMwCis6MTBGQzEwMDA0QUI1Q0Q0RkQwNjk5RDk3RDNEMUY0NjdBNEQzM0E4RDFGCis6MTBGQzIwMDBEMzMxMDYzNjNBMEI3QUFEMTNGNDZBQjRFMzRGRDA2Qjk2Cis6MTBGQzMwMDA1RDE2N0FBRDEzRjQ2QUNFNENBRjc1NTlFOEI1NEVEMDY3Cis6MTBGQzQwMDBBQkMxREU0RUQwQ0I0OTBGQjFFRUE0RTlENjJDMjFEREZECis6MTBGQzUwMDBDRTE0M0Q5QzdBRTEwNTU5QTdERkU1RjZBMzlENjgwRjE4Cis6MTBGQzYwMDAxNjJENTBEOTNFQTlCMjEzNTBDRjQzNjk3RTNGNzZBQkQzCis6MTBGQzcwMDBDOUVEOTM2NjVBN0YyREZFMkFGQzVGMjhBNzZFOTZCRkJBCis6MTBGQzgwMDAyNjdFQTgxNkVERjA3QzQ5OTRFRkFCNDU3RjU4MTJDQjQ5Cis6MTBGQzkwMDA4OUZENzU3M0ZDMzgyRDdGNTI4RUM2MTREQTVGMTI3MEExCis6MTBGQ0EwMDAzRkUyQzQ5NzI3OUE4NDhEMDRBNDBBMzU3QTY5MDVGQTNECis6MTBGQ0IwMDAyNTM3Q0IxMUY0REYwQTc4M0MyMEYwMDRGQ0ZDRTZENEI1Cis6MTBGQ0MwMDBGODFGODBFMTBCQzEzQjM5RkM5NEUwQkM0NUExRjg0QzI2Cis6MTBGQ0QwMDAzMjNDMzlFMTI0RkJDQjhENjQ1RjMzODRGM0Y3MTBGM0JFCis6MTBGQ0UwMDBDQ0MwMDkwRDZDQkRFODU5OUZCOTlERTQ4MkNDRkQ1NDkwCis6MTBGQ0YwMDA2RTk2NkQ3QzMzNjJCRERGQzYzN0U1QUJGMjZERTVDMzUyCis6MTBGRDAwMDA1QTRCNkM3OTdERDEzMDVCRkQyMTBCQ0VCMTk1OTczNjg2Cis6MTBGRDEwMDA4RUI2OTU5NzM0NUM2MENCODdBRkFFQjNFNTdCRjEwQkM1Cis6MTBGRDIwMDBDRkI3MkJBRjJDQjZGMThCMzlBMjBFRjc2RDQ5NjA3NEFCCis6MTBGRDMwMDBEODFFMUY1MTg3RkJCNkZFQ0FCRjdFOEI2QTc4MDlGRUFDCis6MTBGRDQwMDBENTQyMzc1RDg3MDgwNTI5N0UwNEJFNzIzNTMwRERFODZGCis6MTBGRDUwMDAxRjI4MEMyNDJGMjFFNTdFQ0QzMEE5M0Y0MDMzMDBGNzJBCis6MTBGRDYwMDA3M0IyMTZBMzc5NTdEODJFNUY1RjQzMDEyMjdDRkFGNTUwCis6MTBGRDcwMDBBRDJBNzgwQkZCRUNERkY4MjRGREY3MzcyRjI3QkY4ODdGCis6MTBGRDgwMDBGNTVEMjk2NEVCRUEwNkIyNURDMkYzMzU5M0U4Qzc2RDExCis6MTBGRDkwMDA2NDVDOTdDNkQ2NzU5N0UwMUZDMkNGQTg1NzM0NTVFMjZBCis6MTBGREEwMDBGMjdCN0E3MjM2N0NBMzFEREVCMjg0M0QzRkI0Q0Q2MTE2Cis6MTBGREIwMDAwNzlFMjI3RjdGNUVGMkRCMUZGRUQ2NDFDNDU0NEUwMUI4Cis6MTBGREMwMDA3RjExNTVFMkU3RDVBNzI3RkZBNThENzZGQzk0MzRCOEJGCis6MTBGREQwMDAxRDcyRTJEMEU3OUYzM0ZFNUFDNTdBMDFEMTNBQzQ0Qjc3Cis6MTBGREUwMDBDRTdBRTY0MzQxQkIyQjkzNUQyMUY4NjVDM0Y0OUJGQ0JGCis6MTBGREYwMDBENkY1MENBQ0VCRDRCMEY0MzgzNEFGNjRDQTdGRDFGODhDCis6MTBGRTAwMDBBNEFCMTZFRDhCOUM4NTY0RkU2NUNDOEVDOTM4N0Y0RTA1Cis6MTBGRTEwMDBFRjc1NTM2NUJGRDUwRUZCQTJDRjNGNERFNzFGOUM1NjM0Cis6MTBGRTIwMDBGQjcwMEZCQ0E1MUFEREFGODlCQzYzNUZENkJCQkRDOTMzCis6MTBGRTMwMDBGNDREQ0MyNzVCRjUyNEY5QTk1NEFCRDEzNUU5OEYyMERCCis6MTBGRTQwMDA5RjlERjA4NTQ2NDIyRUQ5MUY3QTU5N0FBNkY3NkQwRkVECis6MTBGRTUwMDA0QzY3RkIxMkYzRDU5QzY0MDVFMjkzQzc3MUFDN0RGNTRBCis6MTBGRTYwMDA0QjQ5ODQyNzM5NTU4NjNCRjE5Qzc5QjI5Q0FDMjBGOUVCCis6MTBGRTcwMDA1QkZEQTFGQjEwQUU2RjJBQjE1QkQ1MDEwOEVGOTAyNEFBCis6MTBGRTgwMDA5RTE3ODNBQUU3NEQwQjVBRTZDOUVEMjIzMUZGNkNGNkE3Cis6MTBGRTkwMDBEMTkyRDY5QkVERUIxOTRDQUZCM0YyRTM1REFEQ0I2OURDCis6MTBGRUEwMDAzOUIxM0I1QTU1NEFBRjJGOEE3RDk0MTVDRTRERUExNzhBCis6MTBGRUIwMDBEODNFMTJFNzAzQ0VGNkZGMkFGNkQxMDFCNTcxODlEREVGCis6MTBGRUMwMDAzRURBQ0RFODAwOEMwRTJGQjRFRUFFM0I5NTcyNjExRjhBCis6MTBGRUQwMDBGOTAzNkVCRUFGNzdEODJGOTVDNDNFQzJGM0EzMDBCNzI3Cis6MTBGRUUwMDA1RjJBOTNENDVFRjE1NTI2OTlGRDUyMjlFQzE5RkI3QUNECis6MTBGRUYwMDA3NjIzMUFBMDYzRDNGNjUxMUZGRDFCOUZBNEZGRkVFNkQ1Cis6MTBGRjAwMDA5NTZEN0RGNzA1ODQ3RDk0NjBGNjExQzEzNUM2OTkyOEZECis6MTBGRjEwMDA0NDZERjg0NjIyNUZEOEQ3Rjc2QTU3OTZGNUZEN0Y4Qzc3Cis6MTBGRjIwMDA3RDk0NTk3RUZCQzNERjNBNDgzMEZCQTgxRkZDNERDRkMwCis6MTBGRjMwMDA4NkJGN0Y3MUZCNjhCQjBBRkY5RkQ5NDdEOUY4RTQ3RjcyCis6MTBGRjQwMDBCNjdEOTRBNkYzNjc2M0U3MzhFRDFBNjE0NzlDNjlGQkI5Cis6MTBGRjUwMDA0NkQ4MjdDNDhFQTE3Njk2NDlFQzJDQjQ3MzRFQzg5QTI1Cis6MTBGRjYwMDBFRjRFMzJDRjVCMTVERDg3N0VFQUI1NUM1RTE3QUFEMTE2Cis6MTBGRjcwMDAzNTJFQkE3RUVCNzk2ODY3NkM0NDdEM0U4MEVCNTlCNEQwCis6MTBGRjgwMDA4MzAyM0MzRTRGOERDMEI0MkY2MUZERDg0Njk3RTUxQ0RGCis6MTBGRjkwMDA0MjA5RTg3OTNERTczNjVGMjAzQzEwM0JBRjUyMkRCNDczCis6MTBGRkEwMDBDQzlGRTM0NUUwNjE5NzJCOEZEM0JCRjlGQzI4OUJENzBGCis6MTBGRkIwMDBFMzE0MEZBMDRCRDRERTUyNzUxRkE2NEZGM0Y1OERBRUEwCis6MTBGRkMwMDBDN0Q1NTY3Q0IwQkM1MkFGMjc1MTFFNDhGQkE3NUQwMzc2Cis6MTBGRkQwMDA2Qzc4RjFEOUYwNDJENjIxMzYxRTI4Q0M5RTMzNkRGMUQzCis6MTBGRkUwMDA2Q0ZFNkE0RDQyQkYzOUM5NzYyMkZGRDJGMzcyMUQyMEUyCis6MTBGRkYwMDAwODg5RkExMUE0RkY4MkQ4QjIxQjMxMUUzM0Y4RUFBNTkyCis6MDIwMDAwMDIyMDAwREMKKzoxMDAwMDAwMDZGNjE1QzYzNDFENzRDMUFERkQ4NUEzNUZBNDAxREE5OUQKKzoxMDAwMTAwMDk3MUJEMTJFOUZBMkUzQkEwQUQ0Q0ZCODAyM0JBM0U3MjUKKzoxMDAwMjAwMEExMTBBRjBERjA3MzFDMjJERkJGNTk3QTlDQUY5QjA2NjUKKzoxMDAwMzAwMEQ4RUQ3MjU5NTc4NTNGNjk1ODc2NzkyMTNGRDI0OTRGOUIKKzoxMDAwNDAwMEVGRjZEOUU0QzM2NTk1NkIyQTlGMzc5RDlBN0M0RTY1ODAKKzoxMDAwNTAwMDcyNkQ5MjdGQTgyRkYyMUNGREU0MUE4RUYzMDRCMEU0QjcKKzoxMDAwNjAwMDQ5Rjk4NzlDOEY4OTg1RjJCOThDQTdDMTVBQUY0RUY4QTAKKzoxMDAwNzAwMENENTUyRTZCMTgxRjk5MEI1QTFFRjI5RjdGQjIwQTI5N0QKKzoxMDAwODAwMEY0QkYxNDFFMzVEMTA1REIxRjVENUFCOTFGMUQyNUYwQzUKKzoxMDAwOTAwMDcyQ0I3RTIyRTg2NkYyMUE5RUQ1NUFCNjhDRjQ3QkJDRUYKKzoxMDAwQTAwMDlBQzVERjE3NjhFNEJGRDFCREU3QjM5MkNCNTc0RkJFMDcKKzoxMDAwQjAwMEVBM0U3QTZFMUEyN0ZDMzQwQ0Y5Qjg0QUE2RjcwODU2QkQKKzoxMDAwQzAwMDk0MzMzRDJFRUE5REU3OTY2Q0Y3MDgyQ0ZCMzY1REFEMjgKKzoxMDAwRDAwMEUxRjYzNEMxOEY1MjJFMUI2ODA3N0M1QUZFNTAzRTIxMzgKKzoxMDAwRTAwMDdGRTQ0Q0I1REIwNUE3NEJBRjg5RkM1RUM1QTlGMkM3MjEKKzoxMDAwRjAwMEE3MUQ0RkQwQjVCNzVDMkRFNjc0NkRGMEEyRERCRjJDMDcKKzoxMDAxMDAwMDNDQURDRjczRDRERTc0NUQ0QkU5RUEyRjA3MjM5OUExOTAKKzoxMDAxMTAwMEZGNUFCNzk0MzE3RUQ2QjkzRjcyREFFQkNBQzA5QTE5NEEKKzoxMDAxMjAwMDVCRkJBMjVCQTFEMzJFNjNGREZBMTYyQUZBNUY1MTc5MUQKKzoxMDAxMzAwMEE5MUE1RDA3QkNCQ0JGMTVGQTVBMTNENzkzRTM2ODMzRkQKKzoxMDAxNDAwMDEwN0MyODg5NTEyOUQ0OUY1MDBFRjQxQzExMTkwNkNGMTgKKzoxMDAxNTAwMDREN0RCQTQxRjdFMTc0MDVBQTQ5QzNFNzJFOTU2REUzRDkKKzoxMDAxNjAwMEE5ODU3RUJCNUQzREMzOTRBQ0YwRkIxNkJBMjkxQzVFMkQKKzoxMDAxNzAwMDFDMEZGNUI0QzZDRTNERDU4MDM4Rjc3NEVDMUYxRDc2NDQKKzoxMDAxODAwMEMzRjJEMkQxMTlFMzBDRDRDRjZBQkYzQUREMEVFRjI5MDYKKzoxMDAxOTAwMEI3MEJBOEZBREYyRDc2NTRGNjc2MkFGQ0RENjI0RkFENTgKKzoxMDAxQTAwMDQyN0VCN0QwN0Y5OTBCNzY0QjY0MUQ4RTg3QUY4MDk4QzcKKzoxMDAxQjAwMDRFRjI1ODU0MENEMDg2RTk3OEU0QzNEMTFBNURCRkI2MkMKKzoxMDAxQzAwMDRCRjQ3Qzk4OEFCNDhFRkZCMTczQTJBQkRDM0FFRDQ3NTYKKzoxMDAxRDAwMEY2QzYyODlFOTQ4MDAxQjRCRTdFNkFFNzQ4MjcwNkIzMUYKKzoxMDAxRTAwMEI4QTU2MTEyRDhFQTNGRUM3NkQzNzIxNUEyRjQzQ0ZEQjMKKzoxMDAxRjAwMEM0NkI5Nzg0NjlCRjA2Rjk1NDkzODZDM0Q5RUY1NUVFNTMKKzoxMDAyMDAwMEQ4QzM2RTZDQTczMTc4QjAwMUY1NDc4QzYzN0U4MUIwOUUKKzoxMDAyMTAwMDk3QjUzQjMxQjNFRkI4ODE4RDI4NUY2NzU5RjIzQzJFMUIKKzoxMDAyMjAwMDBCREE0RTJEQUVFQjA0MTlCM0IzOEFGMkJGMUZGN0I1NEMKKzoxMDAyMzAwMDkwNjBGNkQwNTA0RUIzQUQ4QkYyRTlGN0FEQUQ3RENCMEIKKzoxMDAyNDAwMEY5REQ1Q0NFQjc3MEZCQTgxREVEMjM4QkRDQjdGMzc4MkUKKzoxMDAyNTAwMEIzNkQxMkQ4RUU1OTU0Nzg1ODdDRDYzQjVDRUVCNzdBMjEKKzoxMDAyNjAwMDREMUZCREFGRjBEQzBBREYwODhDNzczOUE4NDQ3QzA0NTEKKzoxMDAyNzAwMDBGRTVENzFBRjlCMTNFRjA1MDkxQjBDQkRCRTlDNjc3NjQKKzoxMDAyODAwMEJDRUFDRTFDREY5MUFEQkQ4OEVCRjhCNDc4RDlDNkY3RDcKKzoxMDAyOTAwMDMxMTU5RUQ5NzFCQTZGNDk1RDQ0RTVCMzk4RjM0REYxQkMKKzoxMDAyQTAwMDFDQTA3NkVENTAxMzkyM0FENkZERTgyNDU4Rjk4M0ZDNTEKKzoxMDAyQjAwMEVDNDMzRjQ1NDkwMzE5MEJFOTE1OTMwREQ0MUYyNTFCNEEKKzoxMDAyQzAwMERDNDk5OUNBQkI3NjNCQjYwRjFGNTQ1OEFDMjExODgxNDQKKzoxMDAyRDAwMDk5MzU5NDU1NjlGQkIwRjI0MjJEOEFEQTcwNkU5RkMxNTAKKzoxMDAyRTAwMDJBRkJCRDhCRDI0NUY2RkI1MjI1OEU3QjEyNjFCNEVGMDMKKzoxMDAyRjAwMDQyRTg3N0I1RDQyQkZCRjRGNDA4NzkwODNEQ0VGREZDMzkKKzoxMDAzMDAwMEU5RDFBRTFBN0VDREQyQkU1QzgyNjg0Nzg2RkVDQTNENzgKKzoxMDAzMTAwMENDRUUyODVGQjM5RUM1ODEzNTA0RTA3NTMxREY2MTQ4QkUKKzoxMDAzMjAwMDU3MjMxRjE3ODMyRDg5RkIxNkUzMzk5QkQ5QzBFMjZCMzYKKzoxMDAzMzAwMDA2MzU4MjZDRTVFMzMxOUUxQ0RBOEYwQjBDRjMyQzgyQzAKKzoxMDAzNDAwMEI3QTVERkJFQTJFQjE5QTRFQjQ0QjBFOUIxMENGQTYzODgKKzoxMDAzNTAwMDhDODdDODhCQUI5MEU5OEZGNkM0MzQ5NjdFQTREMEY1MTkKKzoxMDAzNjAwMDIzQkMwODkyNEIwODg4OTM2M0IxQzUyRUE0RkYxQ0EwNDAKKzoxMDAzNzAwMDcxRThFMTg2RTZCRDE4NUY1RERDMDgxMTFDODZGMDE1QUEKKzoxMDAzODAwMEU1QUZGMDBDNDgxQTk0NUZFMDYwOThGMEM3NjAzNjE1NEUKKzoxMDAzOTAwMDE4OEM3QzgxRUJDRjAyNDY1RkMxMTcyNThERjZGQjM2QUEKKzoxMDAzQTAwMEUxMDY3QkJFODhEQkZENDVDRUZCNUI4RTdFOEE3NTc2RTMKKzoxMDAzQjAwMDBGNEE1RjI0MDNERUZCODNFOUY2RkIzNjYxRTg3QUYwM0YKKzoxMDAzQzAwMDAxODQ2RjdGMjA5MjQyN0UzNTFERTMzOEZBNTcyMTc2RjMKKzoxMDAzRDAwMDg1ODdFMEYzODlFRjRGRkRFNTU5QTRGRThGMTZENTE1MEIKKzoxMDAzRTAwMDIwNUVCNjdBQTNCOUY0NUU1MTVCRTZCOEIzNUVGQzJBMzAKKzoxMDAzRjAwMEVDOEUyQ0Y1RDM3QUQ0QjRDNTM1M0JEMzY1MTU0NTM3OEYKKzoxMDA0MDAwMENGMjI3MEFDMDgxQTQwRjU5QTc5MTVENUVGMEE5N0RGMUMKKzoxMDA0MTAwMEU3OEFBRkYwNjIzQ0U5RDJDMEU4NUNENEIzN0IzMTRGRUQKKzoxMDA0MjAwMEQyQTVFMTExMzQ2RTU3RjRBM0YwRjg1RDkxOEY3MzdEN0UKKzoxMDA0MzAwMEVBMUNFRjE2MEZEM0EzN0YwN0UzMTZDNEMzMjg0RjJDODMKKzoxMDA0NDAwMDhDRjM3Njg1OEIxRTlGQTlEM0YzNDIyMzk5QTFERDc1OEEKKzoxMDA0NTAwMDFFM0ZCMzJGNzVGNTlGNTZGQzkzMDU1Q0EzNzIwODcwODEKKzoxMDA0NjAwMDVBRkU4NTU5OUU1ODFCRjJBNzU5NDdCNjEzQzhGRkMzQjkKKzoxMDA0NzAwMDIwMTk0N0ZBMzcyN0I4REZCREE3REU2QTVFQ0ZBNDdFMTIKKzoxMDA0ODAwMDRGNTEyRjk2MDBFQkJFOTNENDVCOEJGMzIxRjUwQzVCQTEKKzoxMDA0OTAwMEJENjhBRjdBNzdGMTdBNjAxQkQ3RTgzNUVFNjYwMTFGNDkKKzoxMDA0QTAwMDU4RkI4QkY0RUE2RjJCRUY4RkRBODMzREY1RjQ1RUZEOUEKKzoxMDA0QjAwMEREQ0ZGQjMzNkNGNUI0NUVGNTFFMTZGMEQ5QzYwNUZCMzcKKzoxMDA0QzAwMEI4M0RFNUU3Qjg5MzcxQUFCNzU5M0NGREJFOEEyOTk0QjcKKzoxMDA0RDAwMDVGRjY1NzRDQTk5RjQ1QzZCOUY5MTcyRUFFMjNBRUExQkEKKzoxMDA0RTAwMEVCQjZFMEFCQkRCQzVFMkJGMjU1MTVERUMzODVCNjQ2NjAKKzoxMDA0RjAwMEJDMDdDQ0VGMDlDNzAzRDNCQzMxQ0JGNzFFQkUwQTRDRjcKKzoxMDA1MDAwMEQzMzI3RjlGNjVBQkFGQjZGOUMwMTg0M0JGRDNGQUFEMDYKKzoxMDA1MTAwMDFGMkJEQ0VGOUQzNzE5RkQ3MUNCMEI2NUVFOUZGQjVCNEQKKzoxMDA1MjAwMERDNTA4OTFFMUJBMERBRjI2RDYxNTYzRUQyRkJCN0I4RDMKKzoxMDA1MzAwMDg5Nzc4QUY4M0QxOEEyMkI5RkFFQjJDODc3Q0ZGODlGNzMKKzoxMDA1NDAwMDE3RkNGQzNDMjMwREZGRkI3MUEzREMwQTNGQ0IwQkY4MkYKKzoxMDA1NTAwMDQ1REU1QkNDQ0E0N0I3QkQzRjA5MkY1Njg5N0IwMEMzMzgKKzoxMDA1NjAwMERCMEE1QUE5RkZFMjBCM0IzRkE5RDUzRTNGOTY0RkNGOEUKKzoxMDA1NzAwMDhGRTVDNUZDQUFEQkE0QzlGRjVBRjNDQjZEQjVGMzFGMDkKKzoxMDA1ODAwMENCQTdFN0M3RjI2MjdFMzU2REI5QTczNTNGNjczREJDQTMKKzoxMDA1OTAwMEFGODQ3QTdFNDVDNUZENjE1Qzc3NTZFMDQyNEFGQTFEMUMKKzoxMDA1QTAwMEQ3RjY1MjdDMzFDOURGM0U0MEQ4REIzQUQ1RUZBM0MwNDUKKzoxMDA1QjAwMDM4QzczQkI2RkY3NkJGQzJFMDM3RDJENjFCNjRFN0MxNkYKKzoxMDA1QzAwMDUwRTFFNkU3QzE4OTMwRkEzOURGRjA2ODNDOEU4RUMxMzAKKzoxMDA1RDAwMEE5NzhFREY5QTE5ODFGOTBDRTkzNUZGRTg5RUIzMDg2NDQKKzoxMDA1RTAwMDI5QjJGREE0NDNDRkY3QjNBRTJEMkQ2NkVCQzlCMjYwOUYKKzoxMDA1RjAwMDQ0QjZBRTZCMjIwRUZBQjkwMTM1NTRGRkM0MzVBNjdGNUUKKzoxMDA2MDAwMEY2MEVFMEZBQTg5MEFDNkJDQzlGNDdFQkJCQjhCRTVBOTUKKzoxMDA2MTAwMERCQzJERTBCNDhGMEZCQjBGMUMyRDExNDNGMDk3MTFGMDEKKzoxMDA2MjAwMEQ2OUM2MkQzNkZGQjZBQTcxQzQwRkZENUIxODNFQzlEQkIKKzoxMDA2MzAwMDg4QTdCQzZDREQ1QkRBMDIxREVDREQwMzJGQkREN0ZEQTYKKzoxMDA2NDAwMDJDRTkzNzQ2MkFFQzIxRjYxRUE2M0YyNUY2MUVBNkJCNEUKKzoxMDA2NTAwMDVCQzIzNEZENDk4QjRFRDM5RDY0NUM0QzFGNkQ4OTQwNTkKKzoxMDA2NjAwMDhDOENCRkEzNjUxQzRERUZFMkZCQUIwRDY4MkY5MkY0QTEKKzoxMDA2NzAwMENCODUzMkY1NUI2QzZEMjE5NkIyMEJGREJENUU5QURFQ0IKKzoxMDA2ODAwMERCQTJBRDUyMkJEMERGMUJBNkY5NjNEMkI0RUJCQzc0NTYKKzoxMDA2OTAwMEZGREExNUNGMjU3MDNFRjFCQjcyN0E0RjdDNjJBMTRBMUEKKzoxMDA2QTAwMEQ3NUY1MDUzNEE2RTc1RkFCQkMwRUIzMUE5QUUxMURCNzAKKzoxMDA2QjAwMDVEMTA5NjU5M0Q2RjMyMUVDQTVDRUY0NkFDMzcyRUFDQ0EKKzoxMDA2QzAwMDUyNzgyMDYwMkFBMUMyOENGNUJFODdGQzU1MTNFMEZENEMKKzoxMDA2RDAwMDY5QjE3ODMwNzM3RkI3NjE3RkEzMDNCQ0JGNDIzRDFFMTEKKzoxMDA2RTAwMEM4REM5Rjg5RkQ4REQ0MTgxRTIwRENCNTI0Mjc3M0JEN0UKKzoxMDA2RjAwMEE1NThBRjRBRTNGMzJENERDOTM5OTlDN0JEMURFQkU1QTgKKzoxMDA3MDAwMEU3MjdFOEZEOUQ4QkFFMDY2QThGQkEwQUY1QURENDY3ODAKKzoxMDA3MTAwMEMxRUIyNTA3NDQ0MTI2N0M5RTVGOTA2OEM2N0ExN0M2QzgKKzoxMDA3MjAwMDIyMzA4QzhDQUY4NzIyMjAxMzdFNzYwNTQ4NzkxNURFMjcKKzoxMDA3MzAwMDI1MjdGRDkwNzRDMjc0NTI4RUU3NDI1OEZFMjU0QjM5MkUKKzoxMDA3NDAwMEI2MjdFOUY4MTlCQzdEQUVCRDVDOENFNzZBODM5RUZCRDkKKzoxMDA3NTAwMEQzNzg2OURDRDU2QUNGRTdDOTRDM0UxRjZBQkI2QTMyRTEKKzoxMDA3NjAwMENBN0QxRTNGN0ZGQTM1RTZDOUI4QUU0NTIwRjQxMUFCMEQKKzoxMDA3NzAwMEVGNjdFNUNGODhGQTIxNTZGRTFBQ0ZFN0U3QjM3OUZCOUEKKzoxMDA3ODAwMEE2Nzg2OUJDRjBCREI3OEMyODlFNTU5NTlFRUZFMEVGMkEKKzoxMDA3OTAwMDU1OUUzRENCMzJCRjdCQkY3NzQxRjFBQzQwN0EzRTgzNjMKKzoxMDA3QTAwMDZGOUQ3OEY2QUMzRUY2M0QwNUY1NzJDRjlCMjRBOEI3NTkKKzoxMDA3QjAwMEYyMTI1NTU0N0Y4RUYyNDRBOTdEMzg2QTYwOEQ4MUYyMjEKKzoxMDA3QzAwMEFDQUM2MjcwQkRFQjJENkI1REEyNTJCODRDN0E0RjkzMEUKKzoxMDA3RDAwMEMzNzVDRjNDM0I1QzgzRTZEQkUxQkE2N0JFMURBRTQxMkYKKzoxMDA3RTAwMDREN0RDM0Y1OTQ5N0U5QjU2Q0YwOTFGMTBERUJGODVCOTUKKzoxMDA3RjAwMEZFQ0QzRUZFOTBFRkRCQzdERkYyN0RGQkY4NDM2RUZCRTQKKzoxMDA4MDAwMEQ0RTNBN0FDNzREOTdDQTM3REZDRDI5QkVDRTM2RkJFOTAKKzoxMDA4MTAwMEM5M0U3RUU5Q0Q5RjZFRkNDRkNBMUVCRkQwMUJGQkE3OTEKKzoxMDA4MjAwMDk3REJCQjhBRDVFRTZDOEVEOUVDNTM1MkVGMjRBRjY3QzEKKzoxMDA4MzAwMDJBNTYzQjM2MTZCM0Q5QTdBNDlFRUFFM0Y2QUVBRDVFQzAKKzoxMDA4NDAwMEI0NTczRDlGOEZEQkJCQjY3MThENUVFMzg2Nzg3RjI5MDEKKzoxMDA4NTAwMEQ5REE1RkE0NTc3RjA1QkM5RTI5NUJGQkQzN0JGNTE3RDQKKzoxMDA4NjAwMEU2RTMxQUI2N0E1QUFGN0E4MzA1N0NCNjcxQzEzRTJFOUEKKzoxMDA4NzAwMEYwMzhCMDVCNzkxQzE4OTU3NzUyN0ZFMUQ1NjQ5RjVEQTUKKzoxMDA4ODAwMDg2RkJEMEE4ODRGQjdEQUQwMDQ2RURDN0ZCMjZDM0Q5MEYKKzoxMDA4OTAwMEJCNDc3OTUzMTYwRUM1RjU1QzlBQjJGMDJDNUNGRkRBQjMKKzoxMDA4QTAwMEYyQzBCNjZGOUJFMjYzN0U4NEIxM0U4NUE2NUEwRTM0RDkKKzoxMDA4QjAwMDUzRkY5REI3QjlGODcyQ0JCREQ3MkRCQzVFNEY3OUEwNjEKKzoxMDA4QzAwMEI5RjgxQjk2RjI0Qjc4RkIzNjdFNkY3MEIyRUZCN0Q0NTcKKzoxMDA4RDAwMDFFRDEwNjkxRkExOUZDNjY5NzhBRkU3ODM5MTQ0NjNBQjkKKzoxMDA4RTAwMDBEMDJGNzVENTc0RDFCNkJENUNGNUI3QzJFM0E3RjZEQUMKKzoxMDA4RjAwMDI4MUZCNzM0MzM1QzZENjU2Q0RDN0I3MURDMDA3RTE3QzAKKzoxMDA5MDAwMEY2NDc3MzMxQzVCN0M2NTJGMTdENDM3MEI2RjQ1N0M0OEMKKzoxMDA5MTAwMDZBQkI5N0FFRUI2RUJFQUVFN0I5OUIxRjI4MjM3MEM0Q0YKKzoxMDA5MjAwMDA3Q0I4MEY3MjI5Njk3RjZFRENGNjk2REIxOUYyRkE4ODAKKzoxMDA5MzAwMDVBRDRDMDdENUZDOTFDNkQzNDhBNDdCNjc2NzdEN0NCNTEKKzoxMDA5NDAwMEY1OTlDRTFGMUFGODdDNUFFN0Q0MjVDQUM5RjhCMERGNEEKKzoxMDA5NTAwMEVFQzcyNTBDMEVENkZCQzg1N0I5NjMwREJFNEM3RURDMjYKKzoxMDA5NjAwMDU2QUZDREJFQzkyQjlBOTYwQjdEQ0MyM0RFNjJGN0UzNDIKKzoxMDA5NzAwMDEyRDU2QjY0QTJEQjRBMUYzRjFGMzlFOEI1RDk1Qjc5RkEKKzoxMDA5ODAwMEY5MzJERDc3MUVBRjYyRTcwNjYwMTY1MzNGNjEwRjVFRjYKKzoxMDA5OTAwMDRCRUFCQ0Q2RjE1NzM4QzZGM0MxMzQwM0Q3MDE1Q0E2ODUKKzoxMDA5QTAwMDUwNUVEQ0U1RUM1RDE1N0Y2MTQyMkJEM0QxN0ZEMDQ5RjEKKzoxMDA5QjAwMENGMDM4MURGNzcxM0ZEQjY4NkE3RDFGREY4NzE3RTBGRDcKKzoxMDA5QzAwMDU2MEQyNzZBOTlERjkxQzNBNzcxNURDNUM3MjlEOUE4QkMKKzoxMDA5RDAwMDQyQUE4MDhDRUQ4QUFERjQ4REI1RDJDREE0Rjc0QjRFRjIKKzoxMDA5RTAwMEI4OTI5N0QyRjc5RUNBMDhGREE1REVGM0JGRDNDN0ZDMjUKKzoxMDA5RjAwMEM1NzdFQkQzN0U1Qjk2ODFCRUY3QTBCM0Q4RDI2RkM5MjMKKzoxMDBBMDAwMDg3NkU0ODhEQzk1RTNGNUQ4RkMxRDVDM0I3NjFDMkFGRTgKKzoxMDBBMTAwMDI4RkYzQUU3NUJCN0YxMjM1RkE2NzgwQkExMUZGODM5RUYKKzoxMDBBMjAwMEY4QUM3MUMwN0ZGNDJCRkY0NEU2NzFGRDAxMTc3Qjc3QjIKKzoxMDBBMzAwMDQxRENCN0UxQTVENzczQkZFOTJDRUU3NzZEODA2ODA4N0MKKzoxMDBBNDAwMDBCREYwNUI5MUVFNUVDNURGODVENjg4Qzg1RkU0RkZCOUMKKzoxMDBBNTAwMERDMENBRTM2MTdGNTc3ODk3M0RGNkIxMzJFOUIzRkVDRkEKKzoxMDBBNjAwMEJBOERGNkZDNkM5ODU2ODQ3QTZCRjY3QTE3RjVBRjVEMDIKKzoxMDBBNzAwMEVGRjBEMzNFQ0NFNzdCMUQzNDJGNDMzQjVFRENEQjlFQTcKKzoxMDBBODAwMEE1ODE4QUVGRjJDQzdCRjJERTFBQkMxRkI1Q0ZDN0VFOTAKKzoxMDBBOTAwMEVGQkQ0REY4NDZCN0M4REIwRDgxQTQxQkVGMDFCQ0JFMEUKKzoxMDBBQTAwMDZCQ0MxNTEzMDBEQjI3OTc5NUEwQkVDRDgzOENFRkJFRDIKKzoxMDBBQjAwMDdEQjdDRDBFNUY3RkYwM0JFMTA1NThEMjI3MUNFQTc2NkIKKzoxMDBBQzAwMDI5QTM3RkFCRDMyN0NFODkxOUJEQjJDNTc5ODhCODhCNEUKKzoxMDBBRDAwMDYzOUM4RjdBRkMzMDdGQ0VFMTdFMTgxNjdGRDE1RkZCNUUKKzoxMDBBRTAwMDEzRkRCNDlGRTdFRDcyQTNGQzM0QTlDREY1OTI5QzNFQjMKKzoxMDBBRjAwMDlGRjJCODYyQzYyMDMyNEZEN0VFREFENDIwQjBENTZCNjEKKzoxMDBCMDAwMEVCQkJERUQxMjk0MEY1NjU3MzE0Rjk0OEQ0OUIwRkE0RTMKKzoxMDBCMTAwMDFFQ0FFNTlFQ0I0RDVCQkQ3MjUyNkY3OEY2N0FERDVDRTYKKzoxMDBCMjAwMEFGRkU3Q0M3QkZCQkQxMUZGOUVFNDM4NzJFNDNCOTlDRjQKKzoxMDBCMzAwMEZCQjQwMjVFMzI2RUY3OEUyMEE0RTgzRTM2RTlDNkZEQjUKKzoxMDBCNDAwMERDMERCQjk0OENFN0I5MzQ2MjgwRjQzRkY3Qzc0MUJBM0YKKzoxMDBCNTAwMDVFREVCMEQzOTM5QzRBREFERkYwOTNENzQ3MDJDMTQzRkQKKzoxMDBCNjAwMEY3OTJBM0NGMEZDMjc1RjcyMTg5OURBQjlBNUQyMzcxRDAKKzoxMDBCNzAwMDVEQkI0MTg1RUY0NDMzRjQzN0MwQ0ZGOEYwRjA1MzM5MTMKKzoxMDBCODAwMDMzOTBDRUQyRjZCREQ3RDA3RTNCQUU3NDc5MkNGQTIyMEMKKzoxMDBCOTAwMEUwNzc4OTdBQ0MxRkY3QTA0NEUzQTM3QkMzQzdDRUMxMUIKKzoxMDBCQTAwMDBFM0YyODMxRjg3NkJCOTIzRTg0NkZGQjU2Nzc4Q0MwOUYKKzoxMDBCQjAwMEQxQjRGRDNEQ0E1NzkzN0VGQzQ4MDhGMUQwQjQ1QkIxNzcKKzoxMDBCQzAwMEY5ODk5QkI2MkIyOUNGNDg5QTFFQzIxNENGNTdBNDFBNzUKKzoxMDBCRDAwMEM0MjdEMzhGRjM3N0NEQTNGRUYzRjkxRDJCREY1MzQyNDgKKzoxMDBCRTAwMEQ4REVDRURGMDQyRjkxMTRFMkY1MjUyNTMyMTVGMzhGRTAKKzoxMDBCRjAwMDNGMTBEMjA5QUFERUVFREMxNjQyQkM5MjdFNjdCQTczQzEKKzoxMDBDMDAwMEYxMUNEOEVFRjdDNkZFM0ZDQ0VGREQxRkMwNTEzN0YyMjYKKzoxMDBDMTAwMDU3NTNDNzBBMzZERUFFQUZCRDgxRkFBNUM5MjE0NzZGNkIKKzoxMDBDMjAwMEUzMkZDNUJEQ0Y1RDJFRjQzQkNFQzFCNjE3OUM5MjdEQTAKKzoxMDBDMzAwMDM5Rjc5MUUzNUI0QzMyRUVFMTlERUY2QzMxMDlGQzhEQUQKKzoxMDBDNDAwMEZGRjVGRTk2REJEMDBFN0FENkE3QTExRTY4N0FFODNGQTQKKzoxMDBDNTAwMDQyNjA1OTM3QUZGNDMzNzlFQzdFRjA4MUZCRUYyNkYyMzYKKzoxMDBDNjAwMEQxRkQ0NzBGNUQzRkJBOUY3OTYzODg0RUU2RERGREQ4MjEKKzoxMDBDNzAwMEZGMjlEMjQ5RkQwNUNGNUM0Q0ZEMDUwQjlFOTgzNEIwOTEKKzoxMDBDODAwMEFGRjUxM0Y5MzU2OTdEOTc4Q0RGM0ZENzc3OTM3MTA2MDAKKzoxMDBDOTAwMDkyRUMxRTlFM0FFOEYzREMyRTA1N0MwNENFNzc1RkY2REMKKzoxMDBDQTAwMEQwN0I1MjRERTREQkMyRDE0OEFGNzk1NDJGNjM3RTExMjMKKzoxMDBDQjAwMEMxRjNGQzFEQ0JERjUzNDY2NkMyQjczOTQ4QzY0QjA3QUMKKzoxMDBDQzAwMDQwQzQzMDhDRjRGRUM2RDcyRkFDQzZENDQ1Q0Y1NzlBNUIKKzoxMDBDRDAwMEUwMjhENUFCQ0U3NjREMDcwOTVEQ0ZDQjRFQzdFM0YwMEMKKzoxMDBDRTAwMDkxMUJFMzU2OUE3NkFDNjBFMzc2MTAzQTg2N0FEM0YxOUMKKzoxMDBDRjAwMDVERkM2NTdDNkYzQTdFQ0Y0MUM3RTNEMEY4MjMzQzFGOTMKKzoxMDBEMDAwMDg0NUQwNTE5Q0Y4NUM1RjlEOUJDMjdCRUQ5QTdCRDI1RjYKKzoxMDBEMTAwMEY0NDI3Rjc4OUUyMzMxQjhFQUZDQzYzMjNGQ0FEN0NFNzAKKzoxMDBEMjAwMDg3RUZCRkJCOTBEMTc5MkE0MTRDRjcyM0M3ODcwMEUxRjkKKzoxMDBEMzAwMDkzMzc1RDQ3QUY0MUZENzhGNDE5OEY4NkVCRkQwRENGRkEKKzoxMDBENDAwMEJDNDRFNUFERkI4OTE3REQzQUI1QkYyMTIwMTE3QkEzN0IKKzoxMDBENTAwMDFCN0E3RTNBRDFGRTk4MkZCMTRDNTM3QjMwRTUwOUE1MjIKKzoxMDBENjAwMEU5MzUzRjc5NzlCRDFFQTJERjBGRDFFRjQ5MjYwN0YzQTAKKzoxMDBENzAwMDkzN0JBNzRCMTlFOEY3QUM5RkRERTc4NkU0MDA4QTk3RTEKKzoxMDBEODAwMDc5RUQ3RjcyRDM3MzcwMEI1REE1NzE0OENGNDM1M0YwM0IKKzoxMDBEOTAwMDdCMzY3QThBRjk2QjM4RkZGMzJENzQ2RDY3RjI5QjREQzEKKzoxMDBEQTAwMDRFQkJCNzdBNTQ4QzZCNzBEMkI5REJDNUY2MDk0RDQ5OEUKKzoxMDBEQjAwMEU5QTU0Qzc0MTdFQkUwRTk5RUFCM0VFNTk0NkYzRUVGN0UKKzoxMDBEQzAwMEZFRTRCQkZGRjk5QzFFQkVCNkZCNzUxQkRGMDhCQzFEMTUKKzoxMDBERDAwMEZFMjhCM0RFM0ZFODk3MzgxQ0NERjUyNUMzN0JBRjgzRjMKKzoxMDBERTAwMDJBNDRDRDQxNjU2OTc4MEZEM0I3Qzk0OEZBOTA0MkRGRUMKKzoxMDBERjAwMDNCNURENkYxMUNENURGNEUzRDMxM0Y4QjlERkQzN0FFQkYKKzoxMDBFMDAwMDlGRTZFRkRFM0IxMkY1RDlFMTdENEY1MTdFOUNCRkUzQkIKKzoxMDBFMTAwMDkwMUJGNzM3Q0Y2RjdGRENERDU1OTVFNjdGNUMxN0FDMTUKKzoxMDBFMjAwMEVGNUIxQzdFNzRFRjQ4QUFCRkIxRkYwQ0Y0MzlDNkZCMjAKKzoxMDBFMzAwMDZGREE2M0VGQkY2OUM3N0JCNkZFRTc5QTFENkVFQTVGQTQKKzoxMDBFNDAwMEVENjc5Q0I3NTVFMzRBOUNFRkRCOUQyRUMwNzc5M0RFQTAKKzoxMDBFNTAwMEVFNTBFQTMzRDk0MTJGRjE3NUIxMjdBRTI2NThGMzMyNUYKKzoxMDBFNjAwMEZBMjc5NTdDQjc4RUZBQUY3NUIxRjExMkJFOUI2OEJFQkEKKzoxMDBFNzAwMEU4NjJFRjU2QUFDNkNCMUUyMjlGRjEzQ0I3OEVGQkRFN0UKKzoxMDBFODAwMEQ2RTAxNUEwNUJGNDc4QzI4MTRGQUQ1MEFCQzVGRDgwQjQKKzoxMDBFOTAwMDM2Mzk1QTZEREQ3RjA5RjhGMzBDRDkwNkZGODI2MEZEMDMKKzoxMDBFQTAwMDQwN0NFRjBBRjc3MTNBQkU1M0ExNDY5OEZGM0EzNEE1NDkKKzoxMDBFQjAwMDlFREU3QkQ0NjRDRDk3NzFERDY2RkRBMURGMEVGOURGODgKKzoxMDBFQzAwMEE1QzlBMDVCRjg2QkQ0QTQyQkNFNDU5NzlEMEFCQTZEM0IKKzoxMDBFRDAwMDNGQjA2NjMyM0IwRjE2RjM1RjMzMTgzNjAzRDFDMzZCNTYKKzoxMDBFRTAwMEE0QTMwN0YwOUQwOEYzNTIxNjY3MjhFQzNCRTBGQkZFMzUKKzoxMDBFRjAwMDEwRUVGQkNCN0FEQjdCNjAxODNBRUEyM0FBOEU3NDM2QkQKKzoxMDBGMDAwMEJFNjFCOUU3OUM4RUUzMDU1RDU2MzA5RTM5NDIzNzAxREMKKzoxMDBGMTAwMDJBQzQ2ODEwODYxN0UzNkM4N0UzQkVBQjgzQTYwMUEyRTAKKzoxMDBGMjAwMERFMzA5RDk4MzM4Q0YxMzcxQ0E1RjlCNUY1N0ZBMTcxQTIKKzoxMDBGMzAwMDhGODUzOUQxNTEzOTAzMzA5RjJGQjE3OUE0RTgzRTRGQzUKKzoxMDBGNDAwMDVDRTM5NzczNEE4QkZCRDIwNzMwNTkzRDZDRjUyNzc5RTgKKzoxMDBGNTAwMDYwMzNERENGQTAzQkYzNjQ0MTFBMkYyMkRFNEVGNEJCOTkKKzoxMDBGNjAwMEM2Mzc1MUMyRjUwOEU3MzkwOERGNjlDMzQ3OEUyQ0VGNTEKKzoxMDBGNzAwMDcwODhGOEM5MDEyMkVGMTgwNzZCNkEzNTdDMDlBNkEyQjAKKzoxMDBGODAwMDE5OTM1Q0MzRjE3QzNGMjFFMUZDNEFBMDgzQTZBNUQwNjQKKzoxMDBGOTAwMDQ5RDM3Q0FGMjZBOTE0QkU1N0E5QkY0Qjg2QkZDMEM5OTEKKzoxMDBGQTAwMDFDMDc3Q0E3NjBDNzNCRURFRjVCMTVGRDk1MThBMTYzOUYKKzoxMDBGQjAwMDlDRUY3M0VFQ0JCM0M3MjM3RDNCODdFOTk5MUI3MzY0MkEKKzoxMDBGQzAwMDExRkYxQ0IzRUVEQkUyRDA0ODcxRTAyQjY0Q0Y5M0Y1NDgKKzoxMDBGRDAwMEM4NDE0RUVDREExQzBCOUYyOTgxNEUxNjVGRTZEODJGRDQKKzoxMDBGRTAwMDVGQUMyQ0EyRTdGQkNCQzM3REM3NzUyREM1RjhGMEIzNzIKKzoxMDBGRjAwMEIyOTcyNzA2Nzg2NzZFMDUwQTNGRjM4MzQ5NUUxNkU3QzYKKzoxMDEwMDAwMDZEODBBRTU5RjkxMTYzNzk2QUFDNzE5Mzg2RUQzRDFEMUYKKzoxMDEwMTAwMDE3RjJBMTgyNzgzNjY5RUE0M0I5MjI2OTBFRjIxNUExNjYKKzoxMDEwMjAwMEMzNEFDRTg3NDFFOEUyOUQxQ0E1RkU4RjJERUU1ODFDRDkKKzoxMDEwMzAwMEY5NzA2MDc5NEM2MkMxNDQ1MTg5RjlENTBDQzVDQTA3NzEKKzoxMDEwNDAwMDcyQ0VENUM1N0RDNTZEQzE3NEMyMjc5NkI4OTlGQjM4REYKKzoxMDEwNTAwMDVENTQxNTU0RkY2ODg0NjczM0E3QkY5MzNGRUQ3MUIwQUIKKzoxMDEwNjAwMEMyQUUwQkYwOUM4N0M3RTNGREFDRkE3N0Y0RkQxN0I1NzEKKzoxMDEwNzAwMDMwNDBFMzVGMDJENUFEMzdFMkZCQUQyQTM0NkJBODU3QjEKKzoxMDEwODAwMDAzMjJCRTI1QzJFMjE2QzVCRURBNTc2OThGMTdGNTM4QUUKKzoxMDEwOTAwMEUyNjM1RDdDRkZERTJCNUU5Q0FGQzc3N0UwODcwQzc2NUEKKzoxMDEwQTAwMEIzNzMzRDdFMzgyNzczOUMxMzhDQ0IxQzk3MjhFQ0I0MEMKKzoxMDEwQjAwMDRGQ0FGRjYyRkZEOUU4RUQ3QzlFMDJBMTE5MzRBRTUzRkUKKzoxMDEwQzAwMEU1N0U4QkRBRTkxQUY1QjcxRkQ5MjFCMUY3MzYxQ0ZDOUEKKzoxMDEwRDAwMDc0NjQ2N0VFNDhENDk3MjhDRkY4N0U3OTBFRkYyRUVEMjIKKzoxMDEwRTAwMEQ4QkIxN0VEQUJENjEwMTg3OUY5NTRGRkU5MEFDMUZGNDgKKzoxMDEwRjAwMDMyNjk5NDU3MjJFOUJDNURFRkZERTY2OUY0RTNFRjUxRjQKKzoxMDExMDAwMDAwREY3NTNCNDJFNkQ4ODlGMzU0OEQzQzI0NUEwRUFDN0YKKzoxMDExMTAwMEIyRDFGOTkzQ0VBQkY3MzkyNjkzQkY5QjM0MjE3RjAxMkYKKzoxMDExMjAwMERBRUVEODBFODlCREYzMDNFN0RFODVFRjVEMzUxRDcwN0QKKzoxMDExMzAwMDQxOTI5NDFGMDNENkVGQjFDRENDNkVCOEVFMTc4RkQ3ODYKKzoxMDExNDAwMDEwNDk4MDhEMUMxRTVDQkZBQ0VCNEM0MUJEMUY3NDBCNjUKKzoxMDExNTAwMDlGODRDNUJBNjAxQTlERjhERTczMDNDN0NGODA2OEJFNEUKKzoxMDExNjAwMEFEOUU5OERGM0JCM0VBMEY1MEZGNEY4Q0JERkYzQzcwNDQKKzoxMDExNzAwMDQ2ODlBRDdGRTBGRTExOURGQzQzQkVFQ0U1Njc5MDYzQzAKKzoxMDExODAwMDZFQTBFQjRBMzQzNzQ1RUQyMEIyOUZDNkZENDc1MjhBMjgKKzoxMDExOTAwMDIwREM0RTdGQ0FGQ0REMTI1RENGQUUyN0VCMTlCRUM3NDcKKzoxMDExQTAwMDc2N0REMkIxMUY3NUM0NTMwOUZDM0JGOTU2MEU3MDNCRDYKKzoxMDExQjAwMDMyMDA4MTJDNzg4RUE0QUFFOUY5MkM5NUJCOUI3RUExRTQKKzoxMDExQzAwMDUwN0JFQ0E2NDdBNDI0OERBN0VFM0EyQjE3MjhERTE1RkEKKzoxMDExRDAwMEVBOTc3QTAzOUFFRjI0MkI0QzlBQkYxREY4RjM4NEVEMUIKKzoxMDExRTAwMDc4RjdFOTc2QkNFNzU0REFGMTFCOENEOEYxRThDNDczRTAKKzoxMDExRjAwMEVFQjg2MUI2RkE3Mzk1NDYzNzY1M0U4RUVGNEFGMjBGNDgKKzoxMDEyMDAwMEYxNERGNDI0OURDNzdDMzI4Rjk0REUxQjlGNzNGNkFDQTYKKzoxMDEyMTAwMDU5ODZGRTkyN0VGMUU4QzBERjM5MEVGQzFEODczRDdCQ0EKKzoxMDEyMjAwMDU5Mjk0NEJENDU5NkY4NEYzNTQ1RTVDQTI5ODcwMjRGRUYKKzoxMDEyMzAwMEE1NUE2NzJERkQxNjA5NTIzRjc1OTg3NzIyMzVCMDc2NkQKKzoxMDEyNDAwMDI1REUwRTI2NTRBMzIzNTQwRTQ1OUM3MjRFQ0ZCQUZBQzcKKzoxMDEyNTAwMDNBOUMyNEU5Q0Q5N0VGM0YzNDBCQjJDQjVENDc4QjM3RjcKKzoxMDEyNjAwMEQyRTBDMkYzNzE4ODM0NTRFMDc5Qjk0NkQzQ0Q1OEZGNDcKKzoxMDEyNzAwMEJDQkVENjVCODM4RUU3ODI4ODg2RTkxREZDRENFNDQ4MzEKKzoxMDEyODAwMDE1N0IxN0E5MjNGNTQxMTFEQTdGNzc4QzNFN0ExOURBOUQKKzoxMDEyOTAwMEZENERENzQyOTRCRUNCMTQ2NEVCRUYyRTlFNEUwRUIyQTIKKzoxMDEyQTAwMDM4RUJEQkEzMzIxOEU4MkZEOEEzMjQyNUY0NDM2OUM2MTIKKzoxMDEyQjAwMDJGMkU0MkJCNkQ4RjRCQTdFQjlGNzZGNDM3RkY4Qjk2OUIKKzoxMDEyQzAwMDhGRDFGMDFDQTM1ODRFOENDMjcxNDk3REVBRUYzRkIyMUEKKzoxMDEyRDAwMEU3RjVEMDc3MkRGNjUxRjdFRTc1NjdFM0ZBQjQ0OTg2NTYKKzoxMDEyRTAwMDM5OTlGNjAxMEQwMTM2N0U3N0U1NUY4QTkwMkRFNzc5MTEKKzoxMDEyRjAwMDhGRDI3REY5RjIyRUJCOUZDREJEOEJGOUUxRTZFRkJFMUIKKzoxMDEzMDAwMDlDREFBM0ZCNjdCM0Y3Mzg5RjM4Q0NFRUE1NEU1MUFFRkQKKzoxMDEzMTAwMEZFRUE5NzQ4N0VGQzdGRjA3NzhDQzA5ODNBQjM4ODg1QzgKKzoxMDEzMjAwMDcyMjAzREUzM0U4MjY3ODJDN0Y1M0M3RUIzRTlBRjMyNkYKKzoxMDEzMzAwMDhEREYxQzdGMjE0ODI4QUZFM0ZGMDgxMTEzNTFEQjNDRjAKKzoxMDEzNDAwMDlCQUU1NzRGODdBNjFDQzA3NEYyMUU4OUZBOEY5QTBFNjcKKzoxMDEzNTAwMEIzRjU2RDZDQTdERDRGNzRGRTY0QTIxNzQ4RkYzNTdCQjMKKzoxMDEzNjAwMDk4N0ZBQkE2OEI5RDBGOUNGRkIyQkRERUY4MkU3QjdFRDcKKzoxMDEzNzAwMDQyM0ZGQ0JCMjRDMEQ3QUQxMDE0OUQ0RTdDRUUxRTk3OUYKKzoxMDEzODAwMEIxMjJDMENFRDNFOEJEQjI4ODlBNzlGRkQ1MTU2NDc2NzQKKzoxMDEzOTAwMDE4QzEwNzlERkY5MUEzMTA1OTQyRTY3MUE0QTFBNDE2OUMKKzoxMDEzQTAwMEVGMjkxREY5ODA5RDM3MUNGOTQ4QTlDRkI0QkZEQTEyODcKKzoxMDEzQjAwMDYwRkNCMkM5Q0RDRThGMzdDRDBFMjQxNzkzNzlFQzlCNEMKKzoxMDEzQzAwMDdEQzM1MERDNTdGREUzREY2MjQzQjVCRUVDMTJBMjIyQzEKKzoxMDEzRDAwMDY0QkEyNjFBQjkzMDBFRTVBMzk1REQ3NzgzNDQ3MUE2NjkKKzoxMDEzRTAwMEY3OTM4NTVDMDgzOTExRjI1MTNDREIxRkNCRTQxNzFERTQKKzoxMDEzRjAwMDE2NjRGQkJGQkFEOTk1MTJDNjZGNzczRjJCRDEzM0E2QkYKKzoxMDE0MDAwMEVFMjUwNEFFM0VGMDY4QzI5MjQxMDg0RkQzRUVGN0E5MzQKKzoxMDE0MTAwMDlGQzJCQjI3QjNCRkZCRDk0MDg4Q0VCRjdCODlCOTc4QjkKKzoxMDE0MjAwMDAyQzFEN0Y3ODg3MDlCMjgwRkVFNDQ1OUE2RkU0RDU4OEQKKzoxMDE0MzAwMDRGRkQ1N0RCMDI4QzlGQkJCRDZDMUYwRTZBQTIxOERGRUQKKzoxMDE0NDAwMDhERThERTNERTlEMjY1MDRDRUJCODlGQ0UxRkFCREM5NzkKKzoxMDE0NTAwMDE1QTE3MDlCRjM4MEJFRkYwN0ZDN0U2MUU5NjVCMEY1QzYKKzoxMDE0NjAwMDc2Q0I3RUVENDBBMEY2MjBEMkZCNjA4MEM1MUYxNUM0NzAKKzoxMDE0NzAwMDIyMTJDMjFERjlGODQ0MDhGQjNGRjJBMTg3RDJBRjg0QzMKKzoxMDE0ODAwMEZCOEI0NEJCMjMwMTdFMEUxNzM0N0U0M0Y5NjU0RTIxNEUKKzoxMDE0OTAwMDU1OEE5MTU4MjhEMjMwMDZFMEJDREQwNERGMTZGRDlENDgKKzoxMDE0QTAwMEE2OUI0OUM3Qzk4RjAxQkQ0NzlGMUY5MEQ5NzkxOEQ5RkQKKzoxMDE0QjAwMEE3RTFGRUEzMDlDNDhGNDlGNzJCNDJGRUYwRDI5QjZBMzUKKzoxMDE0QzAwMDg5QkI5N0Y2NDhBOTIwRDE5RkQ1REU0MDBBRkQzMkY5QTUKKzoxMDE0RDAwMDczNjQ3QzgzODdEOEEzNUVENjVGQTdERDZFNDUwRDhDRDEKKzoxMDE0RTAwMEZBMTc3NTAwRDAzQ0RCMUYwOTdEMkNGNDc4NkIxRUQzRjYKKzoxMDE0RjAwMDdGQUQ2QjU0QUExRjM3QUI1RDNFRjQ0Qjk3MTk3QTlEQjUKKzoxMDE1MDAwMDRBQzZDRDU3NzUxQTZGMzE3ODBFOTNGNzlDRTFGN0U2MEUKKzoxMDE1MTAwMEY1RDg0NTEzMDAxRUZCNThDOUU4MUYzOTJCMjhGMDE1RDQKKzoxMDE1MjAwMEZCMDdFMjZCRTQ4MUEzRkJEMEJDOEFGOEEwMDBFOTNEOTUKKzoxMDE1MzAwMDg1REIzREUzREY2NUZBNDhEQzMzNjhFQUI5NDc2MEQ3MEQKKzoxMDE1NDAwMDQ3OUI3Q0RDOEU4MUM0RUZGMURDRkVBOUJGQUFGNEZFRDAKKzoxMDE1NTAwMDQwOEZGRTk5M0Q4NUFFQTdBMDU0M0Q4N0ZDMzVFMTU3RUQKKzoxMDE1NjAwMDdDN0JDMEY1MEZEOUVENTFCQzlDRkY0MjJDOEU3MDM4QUUKKzoxMDE1NzAwMEY1Q0QzODIwN0E0OUVBNUZFRjM4RTk0QzhDRjA5RTdDNTMKKzoxMDE1ODAwMDI5NDFDQTk4MDM0NENFMkNFRDlEN0E2QTYwOTBBRkIzOEUKKzoxMDE1OTAwMDVDNEYxRDg3ODkwMzJGRDZEM0ZDMzQ3QTYxRTQzOThGRTEKKzoxMDE1QTAwMDg1N0Y4NDlFNEFGMzUzOTJFMkQ1Mzk4RTA0REU5RUJDMzkKKzoxMDE1QjAwMDM2MUNGNUNCMEIwQUZBNTE4RUQ0QjJCRkYzOTNFMjcyMEMKKzoxMDE1QzAwMDk0Rjc0MUYyNTJFNDg3RjU3QjJFRjEyMURGRUYzQzMwQjYKKzoxMDE1RDAwMEM5OEI2Mjc1NTM5OEREM0I1M0Y3NEUzNzgxQjM4RkY1NTYKKzoxMDE1RTAwMDVDRDkwNTVFM0Q1MDg5Rjg5MDI5MUUxNDhERTQyREUzRTkKKzoxMDE1RjAwMDFGNEI0OEZDREVBNTlFM0IzREMzRkJEODIyQkQyOUNDM0EKKzoxMDE2MDAwMEVFOTVFRDNDMzAyQzk3RUQ0NzUzOTRFRTNEN0NDRkZEQUQKKzoxMDE2MTAwMDE3NDIyRTA0QkYzQkY5NUJDODQzOUNCNDkyMkQ3Njg0REQKKzoxMDE2MjAwMDIyNzVGMEZEQTNERDhGMTBFNzc2NDQ1Q0JDM0Y2MzE2QTYKKzoxMDE2MzAwMDUzRkI3MDAxQjcwRkUzODExMTJCRjFDRjFDQjRBNkVBNjUKKzoxMDE2NDAwMDM0M0NGNzU4MTAxQzQ2RTNBQjE3MEM2MEY4NzNFMjQzQzgKKzoxMDE2NTAwMEE0NEQxRjEyN0JEMTEyMDdERkE0MUVBNUZFQjFBNjBGNTkKKzoxMDE2NjAwMEREQjZFRjAyQkZEOUYwMjJGMDdCMDFFMjU3RkFFNEY4RDEKKzoxMDE2NzAwMDNEM0ZDOEU4RUNDNEYzQTc5RDdGRTk0REUzMzJERUU3QzgKKzoxMDE2ODAwMEZCNTc5OUZGMDQ4ODNEREQ0NUZEQjFFQzNFODlFMDM3MEQKKzoxMDE2OTAwMEExM0Y2QTZFNkU4QkU3RTg2OTdEMjFFRTgzMDhCRDIzNkEKKzoxMDE2QTAwMEY0Q0JGOThEODlFNzcyMzJFODBGQTdERTg4QjhCNEVGODIKKzoxMDE2QjAwMEFFMjJGODhCRkMyQzQwREZFQjcwRUE5MTBGRjA5NzYyQzIKKzoxMDE2QzAwMEVBNzdCQjI3NDhFMDdERUNGOUI3NjVGNDlCM0NGMTUzMjIKKzoxMDE2RDAwMDMyNzc1MjFFRDkzQjk5RjkwNTNCNEZFREJDNEJEOEFENDMKKzoxMDE2RTAwMEMyNUU3NUQ2MTNGNkFBNTg3N0M0NzlEM0FGODNCMTg3OTMKKzoxMDE2RjAwMDcwN0M2OTM3OTFBNzEwQzZDN0IyN0RGMjgxNDBFQzExQUEKKzoxMDE3MDAwMEZDOUU0MzYwRjY2MzJDNjA2NUFBOENFRDY3RURGMjlBNEYKKzoxMDE3MTAwMDREM0U3MzFDRjJENzkxNTJEOTNCMzIwMUY2MkU5NDEzRjEKKzoxMDE3MjAwMDBFMzE3RTQzOTBCRjJCNDBCODBFRUQ5QUQyMUE2MDgzRTMKKzoxMDE3MzAwMENENjdFRjA2OTQ4RTg0MThBRUNGNzhCRDE0RTdGOTJCRjEKKzoxMDE3NDAwMDZFOTdCREMwRDcxQjkxMUUwODQ0RjcyM0ZDMkUxNTRDODUKKzoxMDE3NTAwMENGRTg0RjBFQjdGMDJGRkUzQTY4RUNDM0ZFQkNGNTA2OUIKKzoxMDE3NjAwMDlEQzcyMDBEMjI2OEVGMEY1MjNCQTQwODgxMjNCRjUxNzMKKzoxMDE3NzAwMDk3N0E5QzNENjI1RDI3RkQwRDlBQUFEN0EyMUMwREMyRTcKKzoxMDE3ODAwMDNCMDU1ODFGRURBMzBDRjRGOTczOTBDNTM1Q0RGMzc2RTYKKzoxMDE3OTAwMDNEOEYyNjdDRDNENEU2RkE1MDFGRTdFQkU5RjcxMDIyMDEKKzoxMDE3QTAwMERDQ0Y2NThGMDMzOUYyQ0M0QjgzRjFGQ0YzQjUxRkJDNjIKKzoxMDE3QjAwMDFGQzQ3M0FERkY1NDhGMDYxMUNFMzcxN0ZEM0U4OEY3NTcKKzoxMDE3QzAwMDIxNUU1QkM0RjYxRkQ3MzhFQzlDRTMxQzdGRDM0M0QxNkEKKzoxMDE3RDAwMEMzNDE5MjdFQTdFNUUzMUFEQjNCMjQwQkQ5RjlDQ0Y1OTQKKzoxMDE3RTAwMDQ5MDUzN0E1M0RGQzNFNzc3QjBFRjVFRDg5RkNCQzhFQTcKKzoxMDE3RjAwMDAyNUI1RUYwRTkzQzBGOEJEQjcyQ0VCRjJBQzRFMjY4NkQKKzoxMDE4MDAwMEFFREZCMUQ1M0Q0OEM3RjE2M0ZGODVFM0JGQzlFREI4OTEKKzoxMDE4MTAwMDM3NzcwNUE5RkY0M0MwMzM2QkM3MjgzN0UyRTEzRkY3QUQKKzoxMDE4MjAwMDc4RjhCOTdGQTc4QkUxREY5ODhBRTc3MzMxNEUwQTI3RjIKKzoxMDE4MzAwMDlDQ0YzRjlCNDNGQkJCNzY4MzQyRUQ4RTk5NjRBQzg1ODYKKzoxMDE4NDAwMDg0QkY2MzdCQUVBN0ZCNzBFNzNDQUU3RDREOUYzMjkwQkIKKzoxMDE4NTAwMEQwRUZEQTE1MTJCNTU3QjFGRTIyQzIwRkIxODVDQkU5MzAKKzoxMDE4NjAwMDM5OUU3MzlFMzM0RDQ3RkMwOEI3MkI5QzcxMjZEN0VERUMKKzoxMDE4NzAwMDYxRTdFRjBEQTBBRjlDNTg5NjIxRUU2NENGQTVGNERDOTQKKzoxMDE4ODAwMEVEQkE3RUY2M0Q2NTIxNkU0RkQ0QzBGOTE4Mzc3RjFDNDYKKzoxMDE4OTAwMEFBN0U1OEE1RjdCRkVGNzlCMzA1NjgxMEQ5REIyRDVFOTYKKzoxMDE4QTAwMDlBMUU2RUQxNThDQUY1RTdEQ0REN0I5RkE3N0NBNjc2MzEKKzoxMDE4QjAwMEQ2QTBEQ0VGM0NGMDdBQ0VCN0Y0QjQxRUZGRjJENkY3MzgKKzoxMDE4QzAwMDlGQkI4N0U0QzcwMEYzRjMwODdGRkJENTFDRUYxNzcxQkMKKzoxMDE4RDAwMDdEN0UxREI3MTdDNjdDRDhCNzNFQkYxQUYxMzFCMjM3MkYKKzoxMDE4RTAwMEJDNDI4RjVGOEQ3RjZGRDA4MjA3QTFENzlERjgzODc2N0QKKzoxMDE4RjAwMDYwNzgwRUYyQzdFNDkwRjNCQ0Y5RDNFMTI1NUJCQjc5QzUKKzoxMDE5MDAwMDRBRTY3ODQ2MjE0Nzg3ODM4Q0FGMUJEQTJGNUY1NjQyMjEKKzoxMDE5MTAwMEM2OEYzRkYzQzY5MDJFQTYyNzBFQTI5RTEwN0MwQUQwM0IKKzoxMDE5MjAwMEVDNDYzOTc2RjJBM0UwOTMxRUJFREJCMzlBRTI0OUYwQUYKKzoxMDE5MzAwMDA3OTFBQjMwM0ZFNzBDRTNGRUQwQzk3RkZEQzUzNzc1OUIKKzoxMDE5NDAwMEJCQkE4NkEwNUU3MEYyNTlCN0UzNUVCNDQ4QUYwODMxMDcKKzoxMDE5NTAwMEZGN0I4MzZFNENDMUZEMkE1OTZFOTZCMUYzNDBBNjhGNzIKKzoxMDE5NjAwMERFNTQxM0NGREY4NkYyREFDRUU0NjVERTkzOEZGQzA0MUIKKzoxMDE5NzAwMEY1RDAwRDNGREUxMDQyM0RGNDk2OUEyOEMyRjExQUI3MTkKKzoxMDE5ODAwMDJEMERFMUI5RkE5QkFBMTlDMkY2NkYyNTk1OENGMThGM0UKKzoxMDE5OTAwMDNCNDI5Mjc4NEZDMzE2MjcwMTZERTY2NTI4QzdGRkQ4RjIKKzoxMDE5QTAwMEU2RDJGMDFDQUM2OUJCODc5REJCRUY2Mjc4MjM3OTc2RTkKKzoxMDE5QjAwMERFQkUyQjczOUNDNDBEMEY2QzI4RDI1OURDQUQzRDVFOEUKKzoxMDE5QzAwMEEyREQ0NUZEMTdFODVGQzM2MUIyOUQxN0Y3OUMzRjc3MjUKKzoxMDE5RDAwMEY0N0Q5RURFQjQ4QkM3RDlFQ0JBMzQ2M0JDODQ4ODRCRUIKKzoxMDE5RTAwMDcwRjJGMTY2MDdGRjEyRkM1MEJGOUY0OUUwQTJFRTc2NEQKKzoxMDE5RjAwMDdFNEUxRTdGRjBBRTkxODcwODdDODdEQjdGMTU5MkFBMTIKKzoxMDFBMDAwMEFDRkU3ODc2MUU3RkFDRTNCQjNGRjJDQUQ5RjlCNzlCMzgKKzoxMDFBMTAwMEYzN0JEQTlFNDg2NjhDOUY2ODc0QTU0MkI4QUY2QURDOTcKKzoxMDFBMjAwMEVBQTJGQkMwQzY0NzE0RkE1RTFERkNEMTQzRDdGM0I5NDYKKzoxMDFBMzAwMDhGRkNFQzBGMTcxMEY4RTYzRUU2MkE5Q0NBQTY0MUUzOUQKKzoxMDFBNDAwMDI0MDRCRDdBRTI1ODM4N0Q2RTc4RkM2N0VDN0M1OUU3NTcKKzoxMDFBNTAwMEYxMkM5QzRFNzMxRkRCRUJDNkI4MUMyNzNFMjc3NUVDQTAKKzoxMDFBNjAwMDc1NzczOUUyMjAyOEJEM0EwRTREQTFGNzA5MUYzQ0UxRjgKKzoxMDFBNzAwMEM2NzVGNkFENjcyNTE4NThENkJCRkQ5Q0FEM0YwQkExQ0EKKzoxMDFBODAwMEJFNDAzQ0QxMzgwMDRFQjdFQzcxNEJBOUNCN0U1QTREQ0QKKzoxMDFBOTAwMEVCNTFCRjVEN0Y3NDVDODRCMjM4OTZGMkZCQTMzRjI1QTcKKzoxMDFBQTAwMDcwQ0M3OUM1NDNFM0E3RTYzQzdBMzM4RDMzN0E0MzZEMzYKKzoxMDFBQjAwMDY2N0M3RkVGRDIyMjVDN0ZFN0I4Q0MyMjhEQTZFQ0ZCNjAKKzoxMDFBQzAwMDlDMkRCNzUwN0VCQ0VFQzU1QjhBRjg3REE0NjJFNkVGMjQKKzoxMDFBRDAwMDMxOEI3MTlFRDc2RUZFMjY5REU3NkM4ODUxN0U5QzczN0MKKzoxMDFBRTAwMEFGMTI0NTNGQ0I3MTE1RUExRkNCMjAzNzIzNzI5OURDMkIKKzoxMDFBRjAwMEJDNzE5RjA3MUZEMzgxMzdCODlGRDNGQzlEQzJGRjVFODcKKzoxMDFCMDAwMEE0RjNCQzhBQkQxQjczOUNFRkJGRkYxOUVBMzk2RkY0QzUKKzoxMDFCMTAwMDVBRjc2MzRERURDQjNCOTE0RTZGMEYzNjA2NkEzNDlFRkMKKzoxMDFCMjAwMDQwMzUzOURFRThGQkVCQ0E4QjE3MEZFNEZBOERCRTc3NDAKKzoxMDFCMzAwMDIzRUNBMDQ5RjgxREVCNzdCQUU4QkIzNzk2NzZCNjc3NjkKKzoxMDFCNDAwMDZCMTZGMEYxMDlEQzdFRTkzQzkyMTY2NUY2ODM3RTMzNzQKKzoxMDFCNTAwMDU3MTI3MUYwMkNGRTQ2RjA1OTM2M0REMENFRTI1OTNFNzgKKzoxMDFCNjAwMDM4QzhGNDBDQzZFNUQwRjI0RTU3NkFBMDJEMUVDNzYzRTQKKzoxMDFCNzAwMDdCMTcyNTFENjdFMkUyNzI2RTJGMjc3MEQyNzg5OTFFQkYKKzoxMDFCODAwMEZDM0UyQjI1RjExRDY0QzEyRkIzRDc3QkVDRjE3OTNERDEKKzoxMDFCOTAwMEZDRTM3Q0I3QzcxRTNGNzM5REMzMkUxMzY5QUZGNTNGQUYKKzoxMDFCQTAwMEQ3NzE1RUI3RjlENEUyNjcxQTVENDkxQUZGRDRGODQ3RDYKKzoxMDFCQjAwMDBGREQ5RjM0M0VFMjhBMjI1RURFRDlGMURDMUZCRTQ1OTYKKzoxMDFCQzAwMEY4RkU5RDBFMjFDNzc2QkRFQjk0RTMzOTNCQzc0MjI2NTQKKzoxMDFCRDAwMDM5N0UyNzEwODE4QzcyNENCRTY3OTRFMzQwRkE1QzQzRDcKKzoxMDFCRTAwMDg3MzNBRjc3QUZDQkEyNzdCRkVBQzAyN0IxMUI3MjMxODMKKzoxMDFCRjAwMDhFRjhFRDg3RTYwRUE1RkUwQTA3N0U4NUJFNzVFQUQxNTIKKzoxMDFDMDAwMEQ3NDMzQUM1NzNFRjc4M0ZCNkVFQTdFMzMxMTkxRTA1MDcKKzoxMDFDMTAwMDdGREVGMEYwM0MzQTRFMEYxRjBCM0UxNTdDOUMyNTZFOEMKKzoxMDFDMjAwMENDODk0RjY3NzkyRUZBQ0VDNkY2RjY4Qjk4NzU1MDg5MTcKKzoxMDFDMzAwMDdGQTcyOUVFMDZGNkRFOUJFQzhGMjBGRkY2NzdERUY5MTQKKzoxMDFDNDAwMERCREMzMkYxRkVEQjc5NkM1RkM4Q0UzQjIzMDEwREZGOUMKKzoxMDFDNTAwMDYyMDVERTk3NTMzMjlEQjM0NzI2QzkxOUVERkYxRkU0OTUKKzoxMDFDNjAwMDMyM0IwOUREQjI5ODNFOTlDQkYwRDdBQTQ0QjkyM0FGRjUKKzoxMDFDNzAwMDgzREU2M0EwNjdBQjA4Njc1RTg4Q0E5OThCQzdBOTkwQUIKKzoxMDFDODAwMDlFRTk3REY0NDg4RUZDQkU0RUZBQjhGQjg3RkIyRjUxQ0YKKzoxMDFDOTAwMEQxM0YzQjQ2QkU3OTM4QzlFRkZDRTFDQjk3QTg4NERFNDMKKzoxMDFDQTAwMDkxMDlGMkUzQzM0ODdFRDcwRkZGQzhDQUNGOTNDN0I4RTQKKzoxMDFDQjAwMDA4QUI2RTM3NUZCOTY0MzJDOUNGRTdGMzlFMkZGQzI0QkYKKzoxMDFDQzAwMEFENjM2RDdFMTI1NTNFNzQyNzlFRTdBODNGNjU3RjhGRkEKKzoxMDFDRDAwMDY4MjU5MTdCRUZFOEY0Mzk3MzhFMDc0QzFGQzlFN0I4OEMKKzoxMDFDRTAwMDQ5NEFGMkNCQ0E3RUJGMEMzNzkxQkZGMkM3MzZFNjUyRTMKKzoxMDFDRjAwMDdDRDVFOTg4RTdDMzlBOTdDNkVGMkM3OEVBNjIxQTQ3NDEKKzoxMDFEMDAwMEZBNjQyRUYzNDc5RkZCRjgwNEZBNzcxRENGMjAxQzBGQ0YKKzoxMDFEMTAwMEU2MEVDODBFNDdBQjhCRjU3Mzc4RTdCOTkzMTBDRkU3QTMKKzoxMDFEMjAwMDBFNDU5RjVBOUExRUEzNTU5RDdFRjcxMUI0OUJDQ0VFOEIKKzoxMDFEMzAwMDBGRTNGRDk2Nzg5RTlCRjZGMzI0RTdCMzUzNEQ0NURDMDUKKzoxMDFENDAwMDhCOTJDM0Y4NDJDOTk1OUIxRjIzRTlCMzlDMUZGRTc3NzIKKzoxMDFENTAwMEFFMjZENjIxQkFFRjNFRjJDQ0MwRkJEOEJCMzE0Nzg3QzYKKzoxMDFENjAwMDIwQkQxNUU1RDg5RkQxREUzQ0ZBRUQxQ0ZBNzc0QjVFMUQKKzoxMDFENzAwMEYxMzNCQ0JERTI2Nzc4QkIzMjc3OTVFQjFDRjI3REI0RTIKKzoxMDFEODAwMDc3QzhDREM4RjRBRjQ4M0I2RUMxNzRBQjE2RkIyNUEzMzIKKzoxMDFEOTAwMDA3QTRCMERGNkY1REEzQjA3RTAzQ0Q0MTdDMzc0RTMyMjgKKzoxMDFEQTAwMDk4MUQyRTExNjZCQTlBRTAyMzZFODBFRTFFOEUyMjZDNkMKKzoxMDFEQjAwMDhGRkY1MDk0RDE0NzUzNzRGQ0EwNkQ3QzI4MjVFQjI2RUYKKzoxMDFEQzAwMDkxRjMyQkM3MzM3QTExRENEMjc1RjRBNTcxMkMyRkUwNzcKKzoxMDFERDAwMDlCOTExQzE2RUZEMjI5M0M3RjQyNzg0Njc5OTI4MzcxMDEKKzoxMDFERTAwMDNGRjUyRDYyNTYzMUJFQjdFRkVCQkJGREVDN0NCMzFCNkMKKzoxMDFERjAwMERCOEY0Q0M3MEYzNEZENERBNkZCRDkyNjlDMDNDOTNGOTIKKzoxMDFFMDAwMDdFMThGOERGMkI2NEVGRUIwOEJGQzdGODVGREY0NEZERjcKKzoxMDFFMTAwMERGRDVCQkU3QjIzODEzRUVFRjEyRTdGOTM1RkJEOUY5OUUKKzoxMDFFMjAwMDlDRDNCRjM1MDE1NjUxN0QzQURFQTE0NzI3RUNGRTJBRUYKKzoxMDFFMzAwMEQ1QUZGRDlEQ0ZGRDQzRThENTEyMjgzOUNERjNCOThGM0QKKzoxMDFFNDAwMDczNEZFMTdDRUVCRjAxMzM1OTExOEIwMDgwMDAwMDAwMUQKKzoxMDFFNTAwMDFGOEIwODAwMDAwMDAwMDAwMDBCQjU1QTA5NzQ1NDU1OTAKKzoxMDFFNjAwMDlBRkU1RkJEREE5MkFBNTRBQTJBNDUwODA0RTM0QjAyRkYKKzoxMDFFNzAwMDI0MjEwQjQ1MTIyMDA0RDQyMjIwRDAzMTRBODAxNjgxMUYKKzoxMDFFODAwMEY2NDg4MUIyOThBRDk4QjREQjY5OUQ0Mzg1MjBEMkRBREIKKzoxMDFFOTAwMEEzMTk3NTZDQ0U2OUJBRTc4NUQ2MTEyNUU5MjkyNEQxMzUKKzoxMDFFQTAwMEUwNTQzMkM1MjIwNDI1NEU5MDQ1QTAxRDNCRUQ3NDIzMUQKKzoxMDFFQjAwMERBNjQzMTNEODI0QkY3NjFGRUZGREVGQkE4MjU0MUU5ODQKKzoxMDFFQzAwMDNFNjdDOEUxRENCQUVGREQ3N0RGN0ZCRkZGRkJCNzdCQTIKKzoxMDFFRDAwMERGQkE0NDA5NjAwQ0QwM0YxRDI0MDNENDlCRjE5NzAyNjQKKzoxMDFFRTAwMDMwN0MzQzIzMTFGMjAwRjQ3QTAwRDkwOTYwNTQ2NDI4NTQKKzoxMDFFRjAwMEMxRjYyQUZEQkIwREEwNkQzMzhFMzM4NUZCNkYyNTJBRkQKKzoxMDFGMDAwMDZDOUVGQzUzRjZGQkMxNDYyREFDODY4Mjg4NzlFRDdDMzUKKzoxMDFGMTAwMERFREI2NTJCNDAzMUNFN0YxMTU0NTMzQUMwQjRCRUVDQUEKKzoxMDFGMjAwMDlGQ0ZDMUJFQTFEQjAwMkFCRDk3OUVBMEZCNjc3NUFBMEIKKzoxMDFGMzAwMDFGNDU5QjcxRUNENzQ1MjFCQ0I0MzVDRTU2MDA1M0YxRkIKKzoxMDFGNDAwMDk1MjkzQTUwQ0M2QzVFQjg4QUZGRTM5NDc4NTBCMkMzQkUKKzoxMDFGNTAwMDdENEJCNjMzQUEyRkM3REI3NjQxMjJGRUYwN0I3QTUzNDYKKzoxMDFGNjAwMDUwOEUyMjdFMEIxMkRDRTNBM0U2NzlEQkI2QTg5QkU0NUQKKzoxMDFGNzAwMDJFQjJBRkFGMjBCOTEzNEIzMkEyRTY4MUUzRkE0RkZBOEIKKzoxMDFGODAwMEIwOUY4RDdGNTczMzAwQTY0MzY1NjIwOEU1MkY4NDRBRDIKKzoxMDFGOTAwMDhGODRGMkJBM0YwMjc3MDhFNTlGNzE4QThGRDM5RTczRDAKKzoxMDFGQTAwMDg3RkNCMjE3NzEyQ0Y5MjhGQTdBMjk0NEY0NzE5RUM3N0MKKzoxMDFGQjAwMDNFRkFDMjcxMzg0MjlFRTlGNjA0RDcwNTBCRkUxODBGQUYKKzoxMDFGQzAwMEUzQUZDQUEzRTJFODBFMTE0RUE3NjQzN0FBMDFFQThGNzUKKzoxMDFGRDAwMEUxMjAxN0I2OUY4MTBBODhEQjM0Mjg0ODA0ODZBQjBDQzEKKzoxMDFGRTAwMDJBRjZERjA0RUYwQjczQjBCREIyNzlDODcxNzg1MjE4Q0UKKzoxMDFGRjAwMDRGODcyNzFBQ0ZBNDQ1RDE3ODhFQTk4Q0M2NzNFQzhBNTcKKzoxMDIwMDAwMDY4RENDNjc5QTM3MTRBREQzODI1RUFGRTREOUIwQUEzMzgKKzoxMDIwMTAwMEZBMzczRjU2MUEzNTNFREQ1RjE2RDVDRkRDNUUxRTM1RUEKKzoxMDIwMjAwMDdFNTJEM0QyQTg3RUQ2OEU1NTUxRTM3M0Q0QjU1MUY3RTQKKzoxMDIwMzAwMDczNzc1N0REOTBGRUYzMDNGNTUxRTM2MkY1M0ZCNUUzQTcKKzoxMDIwNDAwMDI3NTFGMzk2Q0FGN0NBOTAxMUU2ODExRkZGODgwNzg1Q0EKKzoxMDIwNTAwMEE0NjJEMjNGRUEyMTA0MjNGNTNGRDNFNTI3QzZGRkNEOTIKKzoxMDIwNjAwMEZBN0Y5OEY0OUYxQkExN0ZGOURFNDRBRjM1NkM2RkIxMDYKKzoxMDIwNzAwMEFEQTZENzlGRDA1QUM3OTA1RTcxNEUxNEVFMEFFOTE5RUIKKzoxMDIwODAwMEFGMEQxQUFDREIyNTZDMURDODlEN0JGMUZBNjM2NjdFMzMKKzoxMDIwOTAwMEZENTE4MUNGOTVCODM0OTVENkVGMDgxRUZENUFDMjE2NzIKKzoxMDIwQTAwMEQ1QzJFQ0QwRkZCMTQ1NkQ0NERFM0MyQTJCMERDNEFCNEMKKzoxMDIwQjAwMDE3RTU0QTA5NTA5RTU0NTQ5RDJFMTM3OUE0ODM4RDAxMkYKKzoxMDIwQzAwMEU0RjdCMzNBRERFQUNBMDhGOTlFQjM3M0JGRjI5QzVENDgKKzoxMDIwRDAwMEM3REE1RjE4RDE1NkYxQkRBOTE2RjA5QjBCRDk3M0I0QkUKKzoxMDIwRTAwMDM2RkFFNzAxNUNCNzJEODk4MTgyMkYyQ0RGM0U3RjBFMDcKKzoxMDIwRjAwMERFNzdGNDY1MkIwRTAwMzNGNTZGMDEzODFGQ0ZFNTNEMTkKKzoxMDIxMDAwMDFGQ0ZFNTVDNjU1MjFBRkJDODdGQzhFQTI0OTJBN0Q5QTUKKzoxMDIxMTAwMEVFREQ2OUM3Rjc5Qzk3OUUzMEUwOUJDMUUwRjIxQkM4REIKKzoxMDIxMjAwMEVFNTJDREUwQjdFMUZCMUEwREIwQkExMkZCMEU3MDQ5Q0EKKzoxMDIxMzAwMEY1RDgyNkMyNEUzQkUxOEI2MjI4NTc5MTE0ODdBQTcyQ0MKKzoxMDIxNDAwMDEzRkJGMEZBRkIyNEQxMzhCMjMxQjcwRTY2MDBBQ0Q0RTEKKzoxMDIxNTAwMEZDRTFDNjFDRTYwRjg3NzE4REJEQTQ1MEJEOTIwOEQ4NjYKKzoxMDIxNjAwMDBFM0Y5MEM5QUU5RkJCMEZBRDEwRURFOTlDOTFFM0ExNkUKKzoxMDIxNzAwMEUxNzA1MUY4QzlDRjM3OUI1OTdCNjlCMzNEQ0E2RjZFODcKKzoxMDIxODAwMDZDN0UyMTQxQzE3OUNFNjVDM0EyNDAwNDdFNUQ4NERGQUYKKzoxMDIxOTAwMDc0NkE2NTg2REY4MEZBQzc2NDgyNjc3MEREQjc5MzQ5MjkKKzoxMDIxQTAwMDY4OUZENEJCQ0Q4QTQzOUVEQUYxMEY5NTgwN0EzMEI2MTIKKzoxMDIxQjAwMDJERjFBMzRFNjBBNTUxNjFFM0I1Nzk3Q0MxQjk0MDM4REEKKzoxMDIxQzAwMDEwNjNFOUZBM0QxRkMyMjY5MkVGOUU2RkIxOEQ3ODVGRDIKKzoxMDIxRDAwMDhGRERDMERFRDc0M0VGQzM3NjM5MzY3NkM0NkQzOUVBN0EKKzoxMDIxRTAwMEM1NDFFREQxMzkwQkM4MkVGMDdBNDhDMkZFRTI2RTMwRkYKKzoxMDIxRjAwMDkwM0QyQ0YxQTYxQjQ4OUU5M0UwM0VERDhFRjI5Q0I1RUYKKzoxMDIyMDAwMDJCRUNGOTFGNDJBNTgxRTQzQTczNUY2RDAyOERCQjM2NUEKKzoxMDIyMTAwMDlGMzYwRjBBRUJDMDc4RjJBMUMzNkY0ODQ2QkYzNTc0RjIKKzoxMDIyMjAwMDhCRTRERUE1QjBGNzk5RTk3QUU1QkRBOTRGNUE5NUYwQTAKKzoxMDIyMzAwMEZCQ0U4MEI3RkYzNEVBN0IyOUI4RDlCQ0RBRkM2ODc5RDkKKzoxMDIyNDAwMDUxN0VGMThEOERENUJGNEJDQTIwN0ZBODAzMzNGOUMzRDIKKzoxMDIyNTAwMDRFMTNGMzg3ODM1NTU3NUE1RkMyRkJBQjUzRkI2RTMyNjUKKzoxMDIyNjAwMEUyNzNFN0FCQkU5RDRDQjhBQ0RDMjE4MzgyRkFGRjI0NUQKKzoxMDIyNzAwMEMxRkIwN0ZCRjQzMDFFRTcxRUY4NzMwMkRENUY2NTUyRjkKKzoxMDIyODAwMDVGNzkwOUVEMDBGNjk4RENBRjAwM0RCNzg3M0RBNzhEN0IKKzoxMDIyOTAwMDFCQjBDRkZEOEM3ODA3MjUwOEQ0QUNFQkRCQTc4NkZGRkQKKzoxMDIyQTAwMEJDRDc3M0M2MTJDRjM0N0UzRDI4Rjg1NUZGNUFENjU4OTYKKzoxMDIyQjAwMEUyNTM3REMyMzU3RUYxRkUyQjk5NjM4OTVGMzMyNENFRDQKKzoxMDIyQzAwMENCRDg3OUJCOTA1RjRBMTZBRTFCNzlBNTIwQUZCQUJFQkEKKzoxMDIyRDAwMDJBNEIyMjNGQjFFRkI4QjM4OEU0RDQ4M0Y3NkFFNEJBNUIKKzoxMDIyRTAwMEY2QkRCRjJBOTdFRUMzNTlENzBEQzk0QkI2RTk0NzM5OUEKKzoxMDIyRjAwMEVGMDEyRTY3OEZCMDhGMTVDMUE0MjJEMjNCREE5REM1QTYKKzoxMDIzMDAwMDgxRTM1NkZEQzc2QkZEQkYyNTdDM0FGN0JDRjIzODhERTMKKzoxMDIzMTAwMDI5QkUzMTNDMzRGRkI0Mzc5RUM3MjMxMDcxQ0UyRDcwRDcKKzoxMDIzMjAwMEMxMzg5N0FENDc1MTA3MjFERTRERjlDMkY1RkNENjVFQTUKKzoxMDIzMzAwMEYyMEJDOEFCMkIzQTc0N0M5OUU0QUYyQTgxRkM4MjA1N0UKKzoxMDIzNDAwMERDMEFCNUU4NjVERTlCOEQ3QTZDM0NBMDgzQTdCMTZCOTcKKzoxMDIzNTAwMDIzQTdBNkY5OUYxMkVDQ0IzQUVFN0ZCMDZGNEVDMTM4OUYKKzoxMDIzNjAwMDIyRkNEMzI0QzdCRjJFREFDQUVDQzc2MzVEMzM4M0I5MUUKKzoxMDIzNzAwMDQ0MjY1N0YxRTFBQTBBN0EyRkY0QTIxRjQ3NTkyQkYxRkMKKzoxMDIzODAwMDhGRTJDMTZDRDg3NDI4MEVFNTlDQjEwM0YzMDMxQzM3QUYKKzoxMDIzOTAwMEYzMkNCRkFGRjlGNTU5MjFERDFBNjMyMjhERkJEOTE3NTQKKzoxMDIzQTAwMEIyOEQyMDhBOEUwM0IzMEY5NzdGNEFGM0NFODY4OEU3REIKKzoxMDIzQjAwMDQ2ODkwRkIzMUM3RjVGN0M5OEVGRTBGRTIxOTBDREZEMzYKKzoxMDIzQzAwMDdCMjAxNEFGRkFEM0Q5QjQ0NTk1RjlDODE3Mjc4RjFGQ0UKKzoxMDIzRDAwMDJEODgzOUQ5QjE1MTFBQzgzNkEzMUY1RUU0NjhERUJFMTQKKzoxMDIzRTAwMDdEMDJEMjYxMjJDNzg1RkE4REY0NUIyOTYyM0NCRTk2REMKKzoxMDIzRjAwMDM3MUU5RUMyRkMyMUZDMDVBNTIyQkNFQzQyRTYxODc5RTIKKzoxMDI0MDAwMDhBRDFFRTc4MzA3NjQ3RTU5REExMjNERkQ4RkE3MDFEOUEKKzoxMDI0MTAwMEFENEVFNUJGNDg1RjQzOThENzkwNUY4OEQzRjcxOTFENEQKKzoxMDI0MjAwMEEzQUNFRjRERjJBRkM4RkZFNzFDM0EyNkFGQjk0M0YyQjkKKzoxMDI0MzAwMEE4Rjg3RUIzRTIwMTA5RDcxMDY3Qjc0RjkzQTVGMEY4NkIKKzoxMDI0NDAwMDMyMDc4RjRCQjU0N0NFQTcxOTUxNUZGREJBRTNCNjNDQjMKKzoxMDI0NTAwMDlDQkZBNkZEMEQxQjJFMUY3RTZDRjNBRTczRTAzQ0Q1MUEKKzoxMDI0NjAwMEU3M0U5ODQxQTEwQjE5OUU1Njk5NDAzODY1MjQ5MjNENEMKKzoxMDI0NzAwMEU1RUJDMUFGMkYxQzI5ODc2RjA3MkUwNjI5NUZCNzIzMTUKKzoxMDI0ODAwMDg5QjUzOTFEMTI1QjlGMkZDNEQ3MzlEMEQxRTg4Q0Y0QTAKKzoxMDI0OTAwMDFCRDc5RUZCQ0ZDRUYxQTRCNzNENjM2MDA1RjlFM0ZDRUIKKzoxMDI0QTAwMDYwRDEwNkUyMzFDOTYyNDA1REJDRkU1NTJFOUJFRjA5NEEKKzoxMDI0QjAwMDQ3M0FDRkFGRjVBMEE3RUIwMEFBNkUyOTBFREE2M0MwQUEKKzoxMDI0QzAwMEU3NzBERTgxQUY2NDM2NEU5QjM3QkY2M0FFNkM0NzFFNEMKKzoxMDI0RDAwMEU1ODU5QTBFNTI1RTE4MTczNDI5QTRFN0I4OTc4MUUzNzAKKzoxMDI0RTAwMDEyOEM2MzdFRDFEN0I1MTAyODdGMUQ3NDgwNUJDMkZCMzAKKzoxMDI0RjAwMEFERjE0MzFGMTMyRjg2M0E0RENBMkU4OUYwNkIwMjI3ODgKKzoxMDI1MDAwMENFREY2QUU0RjEzMzA3MERFMTBENkJGOEJBRjZCRUI4MjEKKzoxMDI1MTAwMEUwQ0Y4MUZDMTVGMkMzQTNEMjdEN0QxM0RDNjI4REM0QjQKKzoxMDI1MjAwMDNEODFDOUZGNEIwN0U3NTc2QjdDNDg2NzI1QkY4RjlDRjAKKzoxMDI1MzAwMERDQzVFNDBBQ0IwOUVDQkQ5QTlDMzlBQzBFNjgzNTBFQkIKKzoxMDI1NDAwMDVENzhEQ0M1RTRCMjEzMUY3MjgwQ0IwOUMxMkNFNTE1QTAKKzoxMDI1NTAwMDdBREVFRTYxRUI4OEIzMkI2RUJGMzQ1MjJFNUYwMUU2NUMKKzoxMDI1NjAwMEM1Njg3N0NGNkU4MTZCNzY0RTc2RUY4QjBGRjdDRDY4QUYKKzoxMDI1NzAwMDEzQUQxOTIwRkNDMjI5OTY4Nzg0RkJFOEIwNEFDMkNGNkMKKzoxMDI1ODAwMEJGRjFDRjY3QjY2RjlEQzNFQTIzQkY4QzdDQjA2MDlCNjEKKzoxMDI1OTAwMEUwQTQ3NTcyRkJDMkIyQzkzM0E2OTBFM0UwNDY5QzJDNUUKKzoxMDI1QTAwMDY2N0VGRkRBNzhFNEJCOTVGQTU2M0VDRTlENjhCNzk0MTYKKzoxMDI1QjAwMDRCQ0M2RTgwRUNBNjRFRjg5OTg3QTREMDg1REI1MEI1NDUKKzoxMDI1QzAwMDVGODYwRTE2MjgyODRCQ0REMUI3MTk2RkFCNzVDMTk3MTIKKzoxMDI1RDAwMEYyRjE3RTU5QkMzNzQ4RkVGN0FEOEY3NDYwQzNGNTdGQ0EKKzoxMDI1RTAwMEZFNUE5QzVBODE3ODY0RUY2RjRFRjY1ODQ3Q0VGN0Q0NjYKKzoxMDI1RjAwMEQ5MkRDRkE3OTJCRUY3NEIwQTIyOEQ3OUUxNTAxQUM5ODcKKzoxMDI2MDAwMDU3MTdGQ0Q0RThDMTc2NjFDN0VGOEQxNDlGNTYzOUJEQ0EKKzoxMDI2MTAwMDQ3QzgwRTRBM0ExQUU2MTE3RUIzQTBBOUQxNkU2NTdFNkMKKzoxMDI2MjAwMEQxNEIzQzBEQTQ3MEZGMzE3QzZBRjJBRTg2MDhCQzJGMDIKKzoxMDI2MzAwMDM5NzhERTAyNDNERTlCQzk2RTgyQzIzRUJCMjhGRkMxRjEKKzoxMDI2NDAwMEI2NURFNDYxRUQwNzU2NjYyQUY5RTFFN0ZDNzAzMDE1RTYKKzoxMDI2NTAwMDcwQ0UyRDcwMzg5NTcwRDZBRTBGQUFGQTQ1QzRBN0RDOUYKKzoxMDI2NjAwMDMzRTZENTlFMDhCRTVEMTBGNjdFNDFCQ0VGMUY5RERFQjEKKzoxMDI2NzAwMDhGMDg4N0VBMDM5RjE4NkRCODJFREYxRjAyNjkxNDlGMjkKKzoxMDI2ODAwMDAyOThBN0Q5QkZDMzJGRkE2MkVDQzZBNzFGMzJEMjc4MkYKKzoxMDI2OTAwMERGNDU2MDdFMDRGNUJBMzUxMUY1QjRFNzRDQzc5NDM1RDMKKzoxMDI2QTAwMDU2MjYzRjI0RTJCQURCQ0Y5OTk4REY2QzRGRTdGNkQ3ODYKKzoxMDI2QjAwMDcwRkE3MjAxRjlBRENCOURENTM3MTM1RUVGM0IwQzFBNjIKKzoxMDI2QzAwMENGQ0JFMkM5OUVGNjAyRjM2MzlBM0RFNjkxM0RBMkU4QzQKKzoxMDI2RDAwMDc5QzRGMzYyRUFFN0IwRjk1QThEQkRFNUNDRkVEQTc1NEMKKzoxMDI2RTAwMDQwRjY4NzNDNjdCQzQ3OUVEQjI5RkZDOEIzMjNFRkQ5ODAKKzoxMDI2RjAwMEYzNTlDQzlFNUI3QjMxRTA2MURGOEY3RTdDMTJFQjk3RTAKKzoxMDI3MDAwMDJEQTM3RTZCRUY3QzNCQjM2NzFENDI1QjQ4NzYxOTNBODUKKzoxMDI3MTAwMEM4RTYwOTYwNEMyM0Q1NDk1MDE5OTlBNzk2Mzk2QzRDRTUKKzoxMDI3MjAwMDVFQ0QzRjU2M0FCOEZGMEY2NDJCODk2RTVDOEY0NTk2OUQKKzoxMDI3MzAwMEEzRUMyMDIyNUVGMkJFODhBNzJCOUYzN0ZDRjRDNTA5Q0MKKzoxMDI3NDAwMDY0NEQyMjJFODhCQ0FDNEJFNEMxRTAyRDYyRkVGRUM3NzYKKzoxMDI3NTAwMDIyOTZENUJGNTNCQUI4MDVENzVCREYyMzczRkYyRjc4MTYKKzoxMDI3NjAwMDcyNTBFNEM5ODczN0E3QjAzRUM1MEIwNUY1MzQxRDVCMzEKKzoxMDI3NzAwMDBGRkFEMzE5OUU0REYzRDBDNkEwNjQ1MUQzMjE2QTRCRjIKKzoxMDI3ODAwMDJCMDNGMzEwNzE5OEIzQTJGNzkwODE5QjczMkVGMUFGRDYKKzoxMDI3OTAwMEVERTAwRjcyRjVDNEY3NzMyNjg4NDMxMURCQkUxOUZBMUEKKzoxMDI3QTAwMEY4NzVDNEUxOTEyRUM0N0Y5NEI4ODRDQjYxRkM0MzA0RDYKKzoxMDI3QjAwMDE4MUZBRkM3OUI0MUE5RUZBRUQ5NkU0Q0Y5OUYxRkZCMDUKKzoxMDI3QzAwMDAzN0QxQ0RBMEYxMTAzRjFDODdCN0VDQzRGRkQyODUwMkUKKzoxMDI3RDAwMEJCRDMzM0Q1ODkzOEZFMzZDOTNCRDU4OTM4MEU5RUY4MzAKKzoxMDI3RTAwMDI2OTk3QzdBRkJBOTRGNkNFNEVGREI4QzlFNUNFMjU5NjYKKzoxMDI3RjAwMDVCMDZENjBCQTNGMDczODI5M0YzQTdEODE0OURBNzZCNDcKKzoxMDI4MDAwMEVENTIyN0U3RkY2NDNGM0M0M0ZDQTk2QjkzRUQyQUVBQjYKKzoxMDI4MTAwMEJCQkY0REY2MTgzMThGQkFFMEYxMjZFQjExRDI4QkUwMzkKKzoxMDI4MjAwMDVGM0U5QkUyQkJBODdGRDc3MUQ4NjExREU1MkYxODY3N0IKKzoxMDI4MzAwMEQ2QkY2ODg4QUE0QjZCQzRCRTQ2MTZGNDZENEI0NTlDNDgKKzoxMDI4NDAwMDdDMkY0QkFDQUVERDE4OTM4RkQ0NTBGRTUyNDBGNTQ1MzMKKzoxMDI4NTAwMEIzOTFENjUzRjU3MkNDM0M5NEM3MTREMEI4RUZBRTczOTUKKzoxMDI4NjAwMDk3M0FDNTNFNDcyNjY0NTIxRTgzM0M2MkY1RjREMDY5MTAKKzoxMDI4NzAwMEQ5QkQ4QjYyQTAxRUJBNERDOERGM0QzQThFMTNGQTREMEEKKzoxMDI4ODAwMDY2OEY1QTNFNjM3Mjc5RTY5MUREQ0ZEM0UyOEFBODVCMDgKKzoxMDI4OTAwMDg3NUEyNTk1RDlDRjZFRjRGM0Q4MkZCREE4MzQwM0M3MzYKKzoxMDI4QTAwMEUxNTRDQTBDNUEwRkU3NjVBOTlFOEYyRjBEQTYzM0ZCODIKKzoxMDI4QjAwMDJCRjE2MDNEOEZFQjVFOEZGNUJDNEFFQkQ2RjIzQ0Q1MzkKKzoxMDI4QzAwMEMwRDY4RkUxOTdFNTc5QjM0MDZEQjRFMUI4MERCQjI1NzMKKzoxMDI4RDAwMEI2RUY1M0JEREIxMDk1RTdGOTA0M0UzNTNCNEUxQ0ExMjYKKzoxMDI4RTAwMDcyQjIzNjEwNzM1RkUwRTM4QkMxRTcwREZBMzE2QjI0RUYKKzoxMDI4RjAwMDRFOEYzQTQ1QkU5NzA2Njk5MUY5MUU3NDNCNDdBRDBCNjIKKzoxMDI5MDAwMDM0N0NCNDNDRkI0RjA2OUU1RjdDMjBFNkQ3QzZGRDhCMzMKKzoxMDI5MTAwMDkzRDdFNzc1MUU2MEZCNDczNUFBQUNBQTNDMUZCNEFFM0YKKzoxMDI5MjAwMDQxQkVEQzJGRjg3MkJGRTA4QjBGRjhCOERBREQ5MjFBRTcKKzoxMDI5MzAwMEEyNzhGNTMzQUU3NzMzRkUxMTJFRUIwMjZCMTZBNDJBODQKKzoxMDI5NDAwMDIzNzk1NTI1RjBEOEQ4NjI2MEY5MkZDMDI2MjNEOUU3MUUKKzoxMDI5NTAwMEM2OUQzMUUzMDQyRTU1MzFCOEQ0NzlBNTE4Rjk3ODNFRDcKKzoxMDI5NjAwMEZFQjdDQTU3NkRFMEZCMzVENUM4MkZCRkYyRkYyNzZGMDIKKzoxMDI5NzAwMEFDRkVGRTVERDNERjE0OTgxMkE1QkY0NTQ5MzdBNEJGNTYKKzoxMDI5ODAwMEQ4M0M3OUVGOTEyOTE2N0E3RUI4M0I4M0VENDM2OEJDMzkKKzoxMDI5OTAwMDg5OUQ2NzgxQzhCMzE3RUVFMEY5Njg3RkM3M0M0QjNFNUQKKzoxMDI5QTAwMEQ1NTNDN0Y1NkUwOUU3MjlFQUY5NUY1QjNFRTI1MUQ4RDYKKzoxMDI5QjAwMDI5NDMwNTRFMzExODJDN0FDNjhGRUJEQ0Q3M0Q3MTk5MkYKKzoxMDI5QzAwMDgyRjFBMUIwNDdDRkUyNEI1MTRGQTE0QTc1NEQ2MTRGMDMKKzoxMDI5RDAwMEExMjUzMzgxMTk0RjEyRDUwQjM4MEY4QkNGODNDNzI3MTEKKzoxMDI5RTAwMDlFQ0MyMzNGREIzREJGOTg2MDZGMzg1RTY4QTEzQzYyQTAKKzoxMDI5RjAwMDFGRjA3RDBEQTlBNzM4QTkyRjIyREU3NDNCRjlCRUM2QjIKKzoxMDJBMDAwMEI2OTRGRjc5OTZGMkZDODU3QjBENkVDQTQ3MTYxQTg2M0UKKzoxMDJBMTAwMERFOUZFREEyRjdFQkREMEREOEFGRTk1OUJCMjU4RUY0QjMKKzoxMDJBMjAwMEZFOUFFNEE2NzRGQzQ4NkZCREVCNDdBNERGQTBDMTZFMUMKKzoxMDJBMzAwMDYyRjIzRTdDOTBFRUZCNUIyNEY3MjQxQ0VGRUJCQzNEODYKKzoxMDJBNDAwMEI3MTVGQjg1Q0Q0NTZFODI1OTdCNUZBMTQzNzlBMTgyODUKKzoxMDJBNTAwMEYyQzU3MTE2NTZDNzJGQkNDOUMwRTJFRUE1RjE5NjVGNEMKKzoxMDJBNjAwMDUzQkU1NEU1Njk1RTQwRkVGOEQyREJGQjhDRTQwRjA2RjIKKzoxMDJBNzAwMDVCMjU0OEMxODUxQzQ5MzlGNDFCM0ZBRUYzRDI5QjI3MjcKKzoxMDJBODAwMDhDOTQ5NENGNkIzQjYxRUNGQjhFN0NBMjVGOTUyMUM0NTAKKzoxMDJBOTAwMEVBRjcyNjIzRDU0MUI1Q0Q1QUJGQ0Y0ODdBQUExNEY5MTMKKzoxMDJBQTAwMDU1RERDQkJGNjdGRDJBQUExM0YwN0Q1NTNCNjU1NUMxQTcKKzoxMDJBQjAwMDlGODczQURGMzIxMkRFNzUyRDEyOEM0RDhGQjhGRkIyMzAKKzoxMDJBQzAwMEM0RUU2QkJDNUYwQjlDMDc2Qjg1N0ZBQTE2RkI5MEQ1OTEKKzoxMDJBRDAwMEI0MEY4OUQ3NjEzQkY3MzcxQUVGMUZEOEJERTQwODg1REIKKzoxMDJBRTAwMEVGNzU0REQxN0VFODQxQzFGMzBENTQ5N0IyRkFEQjZCMUYKKzoxMDJBRjAwMDI0QkQ2RUQ4MTEzMzRFRjBGQ0MxRUZFMUI5MzU0OUY4NzEKKzoxMDJCMDAwMEYzMUNDODIxOUU1RjlFQ0JFM0M5RTUxM0YxOTYzQzVDQTQKKzoxMDJCMTAwMEQ3RTU2M0IyMUJFMDNCRjlDRUUyRUY3MTkxMkYwQzg3NTIKKzoxMDJCMjAwMDc0MkM5RTY5RTMwNjNBRkVDQ0UyOERFRkY4QjA5MUYyODgKKzoxMDJCMzAwMERCMDVDMTJGOTgzRTJBODIwN0U2MTNERTc3ODJCNzg2MkYKKzoxMDJCNDAwMEYwQkIzMzY4QjE5M0ZENTdGNDcxN0Y1MDFFMzRBOUI0QzQKKzoxMDJCNTAwMDBGN0UyNzA0QjY5MjlFMDdCQjVFRERFQTI0REVGQzFCRDcKKzoxMDJCNjAwMEU3MEQwODdGQjc0MUUwQkE0MUUwQkEwMTFEN0UxMkJBMTUKKzoxMDJCNzAwMEQ4QUFCQzAzMkY2MUJBMEZFNUMwRkQ1MDc5NDBGOEExNzcKKzoxMDJCODAwMDlERDEzODYzRTRCOThGRjQ1NTE3MzRDMUQzNzhGRjBFNjMKKzoxMDJCOTAwMEUxOEZFRTY4RTFGRTI4MzY0RUQ2ODk3RDgwQzE3MUI5OUQKKzoxMDJCQTAwMDhCRDk3RTJCRDZCQjk0QzdENUI0NDRFMzVGMjdGNjA1RkIKKzoxMDJCQjAwMEVBNjJFMkYwQ0Q0OTdDREZFRUZCRUFGRjU4M0RDRDhEQzUKKzoxMDJCQzAwMEQxNTNDNTEwRTc0RjM5QzUzRDVDN0Y3NzY4NEIxRUVEOEIKKzoxMDJCRDAwMERCNjk3OEM1RUFBOTVCQzk0QzFDQUQ5RUQ1REFGNzQ1MUYKKzoxMDJCRTAwMERFQUZGNTE3MjM3MTI5REYwQ0Q4OUJBQzkxNzVGQ0FCRDgKKzoxMDJCRjAwMDQ5M0NGRTU0Q0Q5MkZEQTRFNzZCRjVDRUM0NDMwNThBNTMKKzoxMDJDMDAwMDJFNUNFRjYwOURCMzMyNjkwQ0FGN0JBNkUxRDQ0NzI3MDEKKzoxMDJDMTAwMEM4RTA3Mjg1RUI5REE3NTI1RUE4MjhBNDdDQTU4NUZCMjEKKzoxMDJDMjAwMDkxODExMjlDMkY5MUYyNzk2MEZFQ0JENzYyNTJBOTRFMEUKKzoxMDJDMzAwMEYxMjE3RjU4OUQ0M0JDQzFCNjMyMjhERDRFQkNDMUZBOUMKKzoxMDJDNDAwMDYxMURDREJGODRCNjhFMTE4NzI1MUQzQ0VGNTkzMkZGMjMKKzoxMDJDNTAwMDBCQzZCNzYzMTNGOTdBODdGNUNBRDhEMUVBMDlBRDhFRTYKKzoxMDJDNjAwMEE4RkI4QUU3QTlEQUY1M0FCNDdCMUE1RjE3OTQ1ODVEOTYKKzoxMDJDNzAwMERDNzZGMEVCQjQ3NEY0OUY4MzlENTdEMkQ2NjBGQkEyNTAKKzoxMDJDODAwMDU4QkY5NkE3MEU2MTlFOUEyMUYyMTRDQTlGRDc3Mzk1REEKKzoxMDJDOTAwMEMxMDY0Qzg3MUY0MzFFQUUxNzcxMEVBNEFEQ0M0RUVBODEKKzoxMDJDQTAwMDI4RDkyNUJFQjU0QjdDMUY2NzNGNUU5ODg5RkVGNzgzMDgKKzoxMDJDQjAwMDc4OTZDNzBDOUNFMUU3NDNGNEZDMTM5ODQ3MERBQzBERTQKKzoxMDJDQzAwMDFDNzZFMkY4Q0JBRDEyOEI3RkVCMzFDN0JEQjU3MEE0OUIKKzoxMDJDRDAwMEJERDcwQTVFMzZDMDE2NTE5NzZENjU2RDc5RjZERTRGMjkKKzoxMDJDRTAwMDFFMjc3RkQ0NjI1NkM4QkYwRTc0MzQxQUQ5RkVCMjFBOUEKKzoxMDJDRjAwMEYxN0NDNkM4N0NBODU2RjBCN0Y2N0JGNkI1NUU0RDEyREYKKzoxMDJEMDAwMDcxNTJGMDEyRDdDMUYyREJDMTYzQjJERDI0MzFGQzdFMTcKKzoxMDJEMTAwMDM1M0UxMjI3OTFGRkI0MUQ4QzYzN0ExRTNDNjE1NTI5MDQKKzoxMDJEMjAwMENGRkY1Q0YwRUY5MkQ4Nzc2RjI4OTExOTJFQkE1OUJDN0IKKzoxMDJEMzAwMENERUQ3QTJCODNGNDRBN0FGMEQyM0U0QUQ3NUI1MzNDRUUKKzoxMDJENDAwMDZDOUY0RjY1RjY1NEJENUJBNkMzQkVCMEZDMDEwQkRCQTgKKzoxMDJENTAwMDBCRDVGQTFBQkUzRTgxMkZDQTM1RDlFODBBQ0JENUFFQkIKKzoxMDJENjAwMEVGQjNCOTQ3QjExQjQ5M0FDOEY0QTY5M0EyRUI1Q0RGQjUKKzoxMDJENzAwMDdFQjk1MjhEQjAyNzVDQ0Y2QUYyNkZGQjA1M0Y0MDNGQjIKKzoxMDJEODAwMDk0NEM3RUI5MzM0OTYxRjIzNTA0Qjk5RTc1OURCQ0M1M0EKKzoxMDJEOTAwMEY3MkZFN0ZCMzYwNkY2RkUxMUY3Q0JGQzM1NzRGRjcyMTIKKzoxMDJEQTAwMEJBMDUxODRGQkVGMjU3NTBGRjkxMEM5OUY5QTk0NzNFNEEKKzoxMDJEQjAwMEE4Q0E4Mjg4Rjc4M0M0RUI3MTlGNjEyODk5RDVDMzI3N0QKKzoxMDJEQzAwMDc0NEMzRURGODlFMUU0ODk1NkYyODNDREYzRUQ3OUU0N0EKKzoxMDJERDAwMERGQjg3RjM4OTI2MUQ5NDhGQ0Y2RDM3QkM3ODZFNzU5QzQKKzoxMDJERTAwMDk4QzRFMzNDRDA3QTUzMjg5Qjc5OTFDRjJCRDZCQjA1NkUKKzoxMDJERjAwMDk2MzIxQ0I2MDg5RTc1ODk3QzE0RUJBNjMzNjQ4RkIxOUQKKzoxMDJFMDAwMDc1RDNGNUYyREQ4OEZBOEQzRDdGNzlBRTcyRjI0N0M4NTEKKzoxMDJFMTAwMDgzQzI2MzdBM0ZENUVCRkJDRTcyM0ZEMUQwQjlFMTc3NjUKKzoxMDJFMjAwMDU0MDdGQkNFOUI4MEZDQzQyMzVEMUJCMjI4MEU4M0Q3QzYKKzoxMDJFMzAwMDNCOTVGMkJCQ0I1RDBGNEU2NUZCOTdEMjE2MjY5NzlGNTUKKzoxMDJFNDAwMEU0NEJBMUJDRTk3NDMyRTU0M0I1OURBNzkzNTk1QzZGOEYKKzoxMDJFNTAwMDlGRkUwMkU1NDk5ODE3REQ0MUQ3MzE1RjYxRkMyQkVDRkQKKzoxMDJFNjAwMDI5NjZGQ0RCNzdCQzM4Mjk5MzA0MDdCNzg1RTZBRDNEQkUKKzoxMDJFNzAwMEE2QUYyNDdDNkE4RjE1QkY1NzQxRjk0QjRGMTlDQjkzRUUKKzoxMDJFODAwMEI0QkNBODg4RUE3MUNBOTM4RTREOENDQTkzRkEwNTdFQTkKKzoxMDJFOTAwMDgzMDdFMkQ4RkU4NzA0MTk5QzNGMzAzMThBM0YzNTZEQTUKKzoxMDJFQTAwMEVGQjA3Q0EyQTY0M0Y2NDRGMkU4REE3MzJFM0RFMzhENDAKKzoxMDJFQjAwMEMxQTVCMEY5MUEwMjkyODdGMTYzMkY2RjZCM0FGNkIxOTAKKzoxMDJFQzAwMEY1NTUxQjAyNENERjBEMkQwNjdFQkY5NUI3MDA0REVDNkUKKzoxMDJFRDAwMDc5M0YzOEZEODRDNzdCNzQwOUY1NTA2RTU0MjdEMEZFQzYKKzoxMDJFRTAwMEZBQkJFOUJDQkU4OEQ1Qzc3NjE3REY0Rjc4Rjc5Q0Y3RTkKKzoxMDJFRjAwMDY2RTJDQkJCNzNCRDU5RjY1MUUyODYxRkNBNzhERDJENjEKKzoxMDJGMDAwMDA5QkNEQjBDMkNBRjhDMURCN0NEQzVGNzdCNkM0OTEwMTEKKzoxMDJGMTAwMDc1REVBOEI1RjUyRUNFOUY3MjIzREZBNzhBQkQ3RkFCRTUKKzoxMDJGMjAwMDhCRDdDREY4RUYxOTFERjJFMjY0ODVDMUZFQjRBODI3NTYKKzoxMDJGMzAwMEM2QTFCRkJENEJGOERCNjU3NzFBNThERTcxNTI5QzMzRDIKKzoxMDJGNDAwMEREQTVGOUREMTIxRUJGQjVGREZFMjUzQkUxNDkyQ0ZGRDUKKzoxMDJGNTAwMEUxNEJDODYzRTc2MDRCM0NEMTdFRUY2RTkxNUYyRDVCMjgKKzoxMDJGNjAwMDE0NzM1REU0NTM3NzdGNEYzRTM1QzMyNUZDRTE2NDk4Q0QKKzoxMDJGNzAwMENDRUIwNkFCODVGNjQ1QkZFQzM2RDg2NTI2QjczQUIxNDMKKzoxMDJGODAwMDMyN0ZFNDNBMzU3RjczNDQ5QzBGNzVBMzFGQTRCNjIxQUEKKzoxMDJGOTAwMEU3NDNCNjRGRjVFRTgxNzNCRjcxMzAzRjFBMDcxOTdDRDYKKzoxMDJGQTAwMERGOTFFREQ3RDc1RTY3QkZCRUUxOUE5REZFMzA4QTc3OEQKKzoxMDJGQjAwMDlBOUVGQTI5Q0ZDRjFCQTlBN0E1MDJFRjVBRjMyNTIzODIKKzoxMDJGQzAwMDNCQjc4NDREREI3NTcyRjg5Q0QyNjRGMDdBNTI3MTFENjgKKzoxMDJGRDAwMDg2OEVCOTIxM0FCRjZDQzgzMUIxN0NBOUZGNzY0OTI1RUMKKzoxMDJGRTAwMDdGOEY3MkE2OTkyMkZDN0RGRjM4OUU3RjNEQjI1QzYyODYKKzoxMDJGRjAwMEZCQzIwNzcyM0U2NDcxQkMzNkQ0NkIyNDVFNEQ2RTVCQkYKKzoxMDMwMDAwMEYzMjRCMzVGM0Y5Q0EyN0E0OUQzRTc2MjMzOEY5RkQ3MDMKKzoxMDMwMTAwMEY0QThBRDk3NkUyQUI0M0VBNzlGRkI2NTE3NkI2OTNDNzkKKzoxMDMwMjAwMEM1Q0JCQjQ0N0M1QzVDMTJBREJGMkNFODVENDBGQjIzOTAKKzoxMDMwMzAwMEY3NzgyNDk2MkY1RDRGRUY0QjU3NEM3Qjg3RENERjhENjUKKzoxMDMwNDAwMEVBRkY5RjVDREU4NzVENjRFRkJEQzNDQjY5N0ZGN0REODAKKzoxMDMwNTAwMDlDNEZEMzI4QkVENjVEODdDRjdFODFBRkNGQzJDRkM1NzAKKzoxMDMwNjAwMDdDMTY3RTFFRTZDRTUyMUFGQjEwMUZCREMzQkJEOTQ1OEYKKzoxMDMwNzAwMEZCNEZCQUJGRDhBNjAwQ0REM0Y3QUI3QTg5RjQwMzBDQzcKKzoxMDMwODAwMEZGRUJEOUQxMzYzMUVGMzY5NzlEREI4QjhCOUYwRkM1ODgKKzoxMDMwOTAwMDUxOUZFQ0Q5QTA0RTIwM0YwMTc5Mzc3NkNFRDdCMEZGQjMKKzoxMDMwQTAwMDY4MDFFOTY5RTBDMEIxMDI2Mzg0M0UyRkQ1QTMzRkEwNjcKKzoxMDMwQjAwMEY4RDI3OTI4NTlCMTQ2RjI0RDI3RjhBNjY3QUQyNDJERUMKKzoxMDMwQzAwMDE1NzEzMzlBN0Y5Nzg4N0ZBNEZGQkQ4N0VFQTJCQUIwQUYKKzoxMDMwRDAwMEJGNkQ5OTRCNTIyMkUyNkFGQjQ5REJBNDg4NzlGQjgzREUKKzoxMDMwRTAwMDMyMUI4RkY1RDhFNEJCMTMyMkU1N0M5MkM5RDkxRkUwQ0YKKzoxMDMwRjAwMEYzMDFGNDRENUU5NjFGNzlCRjkxOUYxQjk5RkIxODhGQ0EKKzoxMDMxMDAwMDlGQ0FERUM0Q0VERDM1MUVFQjgxRjNCOEFFNjMwOUIwRDUKKzoxMDMxMTAwMDM4MjVENjFEMzBFMjBGQUEzM0JBNEMyQTlENTNEMDdFRjMKKzoxMDMxMjAwMEJCMjNDMjRFOEUwQTlDNjc2MjcxNDBGQzlDMDU3RTk5NEYKKzoxMDMxMzAwMEU2OUQ4OTMzREU0QjdEM0Q4NEU4NEM2RTM2ODQ2NDdFQUIKKzoxMDMxNDAwMERFM0QwMTg4RDczMzA0QUY2N0VBNDMwN0E0MDIzNjhFMTkKKzoxMDMxNTAwMDlENEI5NTQyMkYxQjc3MkIwQ0IxRDYwMzc2M0RCNTY1NjEKKzoxMDMxNjAwMEUwNjY2RDg5Mzk3NDA3Qjk5M0JDNDA4MDdEOTcxNDRBMzUKKzoxMDMxNzAwMEQ2M0IyRTk4RDk1MTI5OENBNkJGRjBGQUY1NzA0MUUzQzEKKzoxMDMxODAwMDI5MEVDNkE0ODdFREUzQzc4RTFCMTY3NkVGQTZEQTgyNUEKKzoxMDMxOTAwMEY0REMwRjZDMUZFRTE2RTg5M0U5MjVCM0Y1QjA4OEJFOUEKKzoxMDMxQTAwMDI3QkI0NTBGRTY3ODk0NzdFRjYxMURCM0U3QUUzRTQ1NDgKKzoxMDMxQjAwMDI1N0ZFNjRFMTJDRjdEODZDRjYxN0ZBNjg3REIyRDg1RUEKKzoxMDMxQzAwMDIwRkE2RTQ1NUI2RjJDMEVBNTM4MUZFRDBCQ0VENDYzMzUKKzoxMDMxRDAwMEU1Q0I3MDBDQjFGN0RENDY4MkUzQkFFNzgyQTJBN0ZFMjkKKzoxMDMxRTAwMDFGNURFOTYyM0Y4NUQ3NjlGMzQ0OURBNjMzRkIxOTFFMzUKKzoxMDMxRjAwMDdGMTJGMTkxQ0U3MzZDMzg0RjY5OTMwNDY3RTk3QzI2OTYKKzoxMDMyMDAwMDkzQUY1NzlCQkYxNEIzQzFDNDQyMUFDRkUzMUI2RDg1NjQKKzoxMDMyMTAwMDlGNzVGMjczMUUxQjNCOUY5QjZGMjdCQ0E0NTBCMkVFQTEKKzoxMDMyMjAwMEFBRTVDNjcxMUQ0QzA2MjZCN0VERkVBMTgxQzc4QkMzNkEKKzoxMDMyMzAwMEU3NURFRUUwRDFCM0Y0NUQ4RUU0RjFCMEVGN0FEQzY2RTkKKzoxMDMyNDAwMDZCODhGMjczNjRDN0E1QzhCQ0ZCQUE2QkVENUZDOURFQ0YKKzoxMDMyNTAwMDI1QzVDRUYwMDIyRjI4OTQ3RjhDMEQ3RkVGMDI1NzkzNjcKKzoxMDMyNjAwMEMyREZEMzEwOEMxNzkzQzNFN0ZCREFGNzM1QkJENUE1QzQKKzoxMDMyNzAwMDhBMEVGNUIyQzI2NTc2OTM1RTBBQ0Q2OTQ1NTQwRjM2NjMKKzoxMDMyODAwMERCQkQ3Rjc1QjFFRjZDNUEyNkIxQzlGNEVBRjRDQTg0OEMKKzoxMDMyOTAwMDMwREYyREUwMjkyMUJDQjU3MzdENDlFOEVGN0FFN0Y2RjAKKzoxMDMyQTAwMDY0QUJDNDczMEJCQTdERkEyRUU4MTlCNDE3QjM3M0I0QzgKKzoxMDMyQjAwMEVGOEZGODc5M0U1QUExNDJERjFEQzExM0YzMTRGQTJFQTUKKzoxMDMyQzAwMDYwOUJDM0VDN0U1QUEyMTQxRkQ3NjcwOUFGQUZEMUNDNjUKKzoxMDMyRDAwMEJGMjc2ODM0RjNFRjAyNjBFQjc0QjY3RkY2OTAzODhGNDcKKzoxMDMyRTAwMDY4QjRFQUIyQTlERTZBODQ3ODM3OTVGNDlBQkMwRjI1RUYKKzoxMDMyRjAwMDcwM0UzRUY0REYxNjc2M0UxQTJCRjdEN0YxREU5QzMxOTYKKzoxMDMzMDAwMEQzQzNGMjNGMkFCQkNGNjJFRTEzODVFNzFDMEQ0RjVEOUUKKzoxMDMzMTAwMDE4Q0YxNTZBNDY2MzlGQzJGMDlCNDZDRjRGMzNBOTM3M0IKKzoxMDMzMjAwMEQxQkVDODJBMTNGRjdFNDlDMzBEMTVDQTQ4NkQxN0ZBQ0UKKzoxMDMzMzAwMEQwRjBCMzkzQkU2OTFEMUVENEI3QzY5NzhDMzA3RUNGMzQKKzoxMDMzNDAwMEM0NzNEQzBDRjRFNTQ0MjY3QjU2MjE3RjFEOEJDQkZGMzgKKzoxMDMzNTAwMDAxQUY2QjdGOEVGMDI5MDAwMDAwMDAwMDAwMDAwMDAwMkMKKzoxMDMzNjAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRkJDQUNGQzBGMEEzQjkKKzoxMDMzNzAwMDFFODE0M0QxRjhFODM4OUQwRjUzNEM5NDExODJEN0IzODYKKzoxMDMzODAwMEUwRDc4QjBENUIzMTIyRDhGRURDMEMwQ0NBOUMwQzBDRjgKKzoxMDMzOTAwMDJBNDBEQzA3QzRGRDQwRkMxRTg4MERCODE4MTgwQzgxQkIKKzoxMDMzQTAwMDM4MERDODRFMDc2MjdCMjA3NkUzODZFODY5NjY2NzYwNjEKKzoxMDMzQjAwMEU4MDZFMkM5NDAzQzlCOUQ3NEZCQ0QyNTE5MThDRUNBOTYKKzoxMDMzQzAwMDIyRjhCMjcyMEMwQzUxMEFBNDlCMzM4QTg3MjY3NjMzRkEKKzoxMDMzRDAwMDQyRTVDNzZCQTNGMkJCNzQxOTE4NEUyM0E5NDlEMDI2NDYKKzoxMDMzRTAwMENEN0M0NjYzMDYwNjI2NjNEQ0YyNzFFNkE4RkM1MDRCRjIKKzoxMDMzRjAwMDU0RkU1RDMzNTRGRTQ1NzcwODBEMDBBRUEzMjQ4M0I4MTgKKzoxMDM0MDAwMDAzMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDcKKzoxMDM0MTAwMDAwMEJDNTdEMEQ3QzU0QzVCNUY4RENCQjc3RUY2RUY2QUYKKzoxMDM0MjAwMDJCOUIwRkMyMDY0MjcyMTMwMjA0MENCOEM0ODBDMTRBMUYKKzoxMDM0MzAwMEJCODlBMEEwQzg1QjUwMkI1ODVGNUQwMjI0MjAwNDgyOEEKKzoxMDM0NDAwMDVBNDkyQkZFNzMyMTIxMDQxMjYwNDFENEEwODgxQjNFRUYKKzoxMDM0NTAwMDE0MkJEOEEwQTBCNkI1NzZGOUQwNTI5RkNGNDY0NUE1N0IKKzoxMDM0NjAwMEFEQTUwMTE1RDQwMjREQjVDOEY2M0Q3REZDRTc5Qzk5OEMKKzoxMDM0NzAwMDlCQkRGNzY2MzdFMEVCRkJCRjdGRkFBQkMzREM5OTNCNDQKKzoxMDM0ODAwMDc3RTY3QzlGMzM2NzY2NjUzMTg1NjRFNjExNzIxMUZFQ0QKKzoxMDM0OTAwMEJFNDdDODA0MEIyMTY0NENCQzI0NDE1NTIwNjMwOUY5ODQKKzoxMDM0QTAwMDkxOURFMDlGRDZDRjVDMzZENjEzMTJCNTExMTI5QjRCN0YKKzoxMDM0QjAwMDQ4QTc4Qjc2OTQ2QUVEQTQ5ODk2QjdERTI4OTIyQzQyQTIKKzoxMDM0QzAwMDUyRTE3RDg1OTAyNkExRjZDOEUwNTI0MkQ0NDEyMkQ5MkUKKzoxMDM0RDAwMDQ5MUZBRENBOTk5RTFBNzIyNTFGNzczNzFGRjdCOTdBMEYKKzoxMDM0RTAwMDNCOTYxREY1NUUyQzlGQUZGNzYxQjlBRjVFMjFEMTYxQjAKKzoxMDM0RjAwMDg0QkM1ODVGODRFNUNCRjU3RTdDRkU4QkZBMzIyQzVGNzIKKzoxMDM1MDAwMEE5MEY2MEY5NkFGRDI0MkNBM0Y1NDEyQzBGRDZDRkMwN0EKKzoxMDM1MTAwMEYyNzA3RDA4REY3QkJEN0UxRTk2NDdFQTZCRjFGOTFCREEKKzoxMDM1MjAwMEY1NzU1OEJFNTlBRkUyRjNCN0VBOUJCMUVDQUMwRjYzNDcKKzoxMDM1MzAwMEY5NEU3RDFCOTY0N0VCMjNEOEVGRkRGQTVENTgxRUFCODUKKzoxMDM1NDAwMEVGQzBFNzdGQTg3RjE5Q0IwRkVCQTM1OERFNEVEMjA4NjAKKzoxMDM1NTAwMEU5NDdDODZEQjc5REI3Q0ZBMkVCMURGNkM0N0RFRjRDMTAKKzoxMDM1NjAwMENFMjQ2NEZEMThEMTBGRTAxQUY2QzRDN0JFNTA3MTdDOUEKKzoxMDM1NzAwMERERUJCRkIxQ0NFODQ4MDA5N0VGMTMwMUM3NTlFRjI2NDgKKzoxMDM1ODAwMEQ4QkVGRUMwRUY4OTMyOTI5MDc1NjNCQTdDMkFBRDRGRTcKKzoxMDM1OTAwMEU2REYxOUJFRjNBODdENTY3MUJDOUY3OTlDNEY4ODg1RTQKKzoxMDM1QTAwMDhENjNBNUVEQjRERkQwQ0RBQ0JGRDYzRTE5QkUzMzI2QkEKKzoxMDM1QjAwMERFRkU1NERCM0JGNkQ5MkU3RDNCN0JGRkU5MkRFRkQ4QjkKKzoxMDM1QzAwMDAxN0Y2QjYzMTI4OTIyREU1NTQyNjhFOTUwQkFEQkZBNEIKKzoxMDM1RDAwMDUxM0NBNzFDQjMxMTVCM0VDNUJGRDI0MUJBRTgzOEVCRTIKKzoxMDM1RTAwMEM2M0QxMjE1NEI2MUREQjQ5QjAyRUI3Qzk3MDgxNDBFQUYKKzoxMDM1RjAwMEFBOUIyMDNEMjgzMEM2RDVGMUVGNUM0RDQ0OUNDN0IwNTYKKzoxMDM2MDAwMDI3OEVCMkVGREM3QTFFQ0I1N0ZGMjExMzQyREY1Qjc3QTgKKzoxMDM2MTAwMDlCMTA3MUQyRjFENzhERkZDMjE3MDA3QTUzOUZCMTAwNzIKKzoxMDM2MjAwMEJEMjFCOTJBRjA5RjJFNUY5MDhFQkQ3RUZDRkIzRTk1OUEKKzoxMDM2MzAwMEMyNjlFRDM3RUZDRTk4MERGNDM3OUFGOEUxN0I2QjBGNDYKKzoxMDM2NDAwMEZDOUMyOEQwM0VCMjFCRTFEN0MwRDdCRDc2RTZBQzNDOEYKKzoxMDM2NTAwMDZGNzE3MkJBQTQ5NDQ0QzQzMkJBNUMxNzA5NDQxMkMwQTAKKzoxMDM2NjAwMEY3NUYwMTA4MTQzRTE2NkYwNEQ3RTRBMEZEMTJFMUUxRjQKKzoxMDM2NzAwMDVGODk4Q0ZERDZCQTgzRUYwMTVDRDREQkFDRkU5RDc0MTAKKzoxMDM2ODAwMERFRDdGOUEzRTQ5NDJCM0U2RkE4N0Y0NEVCQUVCRjQ3OEYKKzoxMDM2OTAwMDg5QzUwREYzRkVDQzY3QTFFQjc3OTZDOTU3QTVEMEQ5QTQKKzoxMDM2QTAwMEI4QkFCQjhGQzFGQkFFNkJBQjAyQjBGNjc1QTNCQjdDRTcKKzoxMDM2QjAwMDU1QjRCRkJEQTgxM0Q3NEJGQ0M0M0Y4NDhFRUIyODUyMzIKKzoxMDM2QzAwMEM5RUM2MjgwODMwNUYxNkE5RUNGNkM4MDc3M0ZDMEQzREUKKzoxMDM2RDAwMDU3M0VDMDg5NDY4N0VGRERGQUFFQkQ1MkQ3RkY2OThERjAKKzoxMDM2RTAwMDNFMDQ0NjVGQTQzNTZBOUZFNjhFQjczRkExQjVBNzMwN0EKKzoxMDM2RjAwMEZBMjE3NjYzRkI2NjEzMUQ5MzlDMjRFRDU2MEE2OEM0NzkKKzoxMDM3MDAwMDk3MThEOTI5MjBEQ0VERDM0N0Y2OUU3NzZCRjRCN0M4MUMKKzoxMDM3MTAwMDA3MkU3RkQ0MUU0QUIwMkVDQTI3NzY5MDNCQTlBNUEyQjkKKzoxMDM3MjAwMDFGRTBCNTZFM0NFNTk3RTJGODNBMkZDNTc3Q0QxQzJFMjkKKzoxMDM3MzAwMDZCNEJBN0JCNjFGQzRCQzlBRDkxMUQyMjg5MTY3MTk5REEKKzoxMDM3NDAwMDQ5RkY3RkU1Q0IwRTNBRjM3ODdENzQzNERENTBCRkVBNTQKKzoxMDM3NTAwMEM4MDA0M0ZGMzE5RDA1ODZGNkFCOEY4RDMwQjQ4RkVCRUIKKzoxMDM3NjAwMDJBMzFENEJGRjNFOTM1ODZGRUUzQkIyQjBDRjVFRkM1NTgKKzoxMDM3NzAwMDZFMzRGNDJGMjdCNzE4RUFEN0Q5N0Y2MEU4M0ZEMTNCRTIKKzoxMDM3ODAwMERCRDA3RTgzNkY4MUExN0RCMjcyQUZBMTdFNTNEMTAzNjYKKzoxMDM3OTAwMDg2RkUzN0ZCMUIwQ0VERkY1MkQ2NjI2ODlGMTY3OEM4NzkKKzoxMDM3QTAwMDUwQkY2NUQyRTM4NkZFQjcwNUI3MUJEQTZGOUZGMUFDNTkKKzoxMDM3QjAwMEExN0Q2NkU4MDU0M0JEQzYxMTNBMEVGOEY5QzFCQzVGQUMKKzoxMDM3QzAwMDFBREVGQkQ3REE0Mzg2RkE3Qjg0NEM0QTg0NUYyMjMwQzgKKzoxMDM3RDAwMDM5NDMyOUM4N0JFQTBBREU5RjhBMzgyRkQwMUNEMDcxNzIKKzoxMDM3RTAwMDNGNDZBNzQ1RUQ0OUU0MjQ2RjdGNjZDNzNCRjZCOTA2MUYKKzoxMDM3RjAwMDM5Njk2NTc0OUNDRERBNzc0NURFNDlGQ0ZFMjBDRTI3MTkKKzoxMDM4MDAwMEE0RDMzRUREQUQ2RjY3RjNCQUUyMUY1NEJFNDJCQkE0NDIKKzoxMDM4MTAwMDdFMkJGOUVBRjZGQUIxQkYyNjU3Mjk3RDEzNzIwRDg1ODIKKzoxMDM4MjAwMEFGM0E1MDU1RjE3Qjc0M0MyQTJGMkQ2Q0M5QTQ4RTMwRDEKKzoxMDM4MzAwMDM5NDVDOEJERjg1Q0QzRkIyNDg3NDQyRDc0REMwNjc3N0EKKzoxMDM4NDAwMDRFRkIxQTgwMDkxRDVCQ0E4NDdBRjEzNkE4OEI0QTgwMjgKKzoxMDM4NTAwMDc0MjU4MEFCQzUyQjFCRjA2NDg2MkY3MUE1NTM2MkVFRDcKKzoxMDM4NjAwMDRCQ0VBQTA4M0Y3NTIyMjk5MkUwRkI4MkMzQkY5Q0FFRDMKKzoxMDM4NzAwMDU3MjJBMTAxMDI3RDdFNDEwQ0Y5NjBGMjRCMkRFQTZGQzcKKzoxMDM4ODAwMDQyRjlGMUZFQ0JDN0QzN0Y0MkZGMTM0MjY0MDVGNjU3REUKKzoxMDM4OTAwMDEwOEUwRDIzNDkwMEY0ODY5QTJENDc3NkU2MjMzQzZENjEKKzoxMDM4QTAwMDIwNEZCNEY3RTgwM0E1OEJDRDU3QkQzOEQ4NTA2N0YzNDgKKzoxMDM4QjAwMEJENjRGREVCNjFDNkJBMzZFRTRGOENGMEE0NzA4NkZBOUIKKzoxMDM4QzAwMDVEQkNEMjZCREQ3RTM5NEVCNzE2RThDN0VBOEEyODkwMTgKKzoxMDM4RDAwMDhCMjgwNzhERUREQTc3MkVBNDc4NDY5MTU0OEE0NzNCRTIKKzoxMDM4RTAwMDJCOTczQTNDREJBMEJDOTA5MjFCMjExRTQyOEFDNTUwMEMKKzoxMDM4RjAwMDA1QzA0REFENjBGMDUxOEYzQjIzMEQzODVFRURENUMxNTUKKzoxMDM5MDAwMDkxMDBERkM0RjYwMjIxMkIxODdGN0MzODU5RDRBRjIzRjUKKzoxMDM5MTAwMDE5REUxQUMwNkUxQkE2QTM4MzFDM0ZDQTcxQkE2QUQ0RjMKKzoxMDM5MjAwMDZGRTZGRUI3MEIzMjFCREY0NTUxNDVDN0I3MTE0NjYzNDMKKzoxMDM5MzAwMEE5OTZEMEVEQzIxODU4NkQ5MDQ4Mzg0RjNGMDkyMkJFNjUKKzoxMDM5NDAwMDI2MTFCMDRCRUQxQTNDQzM3M0IxRUVFMjc2RTYwMUY3RjcKKzoxMDM5NTAwMEQ4NjMyMThBRTdCNTAxRDkwRjYzNTUwQTBBQzc4M0RGMDcKKzoxMDM5NjAwMDA3N0FDMDU2MjY5MjM1QjRCNjU2NzlDNzBFRkNEMTlDNUMKKzoxMDM5NzAwMDJGNjc4MzVDQjc0OUI1QzQ0QkVCQjY0MkNBMDcwOUY0NUQKKzoxMDM5ODAwMEM4RTIxRTM5RjEyMEI5MUNCQkQ4OENBNzIyRkEzQTlCOTkKKzoxMDM5OTAwMDA3NDEzODZBRjMwRjBGRUFCNDE3MDA1RDhFQTc3NjMxM0UKKzoxMDM5QTAwMDlERUFGQTZCRkJENjJGMkIzOTdDNUJDMDJFQTZFNTNBM0QKKzoxMDM5QjAwMDY1N0EyQTQxQkUyNTMzODFCRTlCRjNCMzQ0RTQ1MzBFOUUKKzoxMDM5QzAwMEE3MUVCOEU0QkY2RjA3M0U1RENEREY1RkVCN0YwN0VENUQKKzoxMDM5RDAwMEY0RDU5QTFFMzdDMUIxNzlGNDQ5ODRDRjJDODFFOUUzM0IKKzoxMDM5RTAwMDk2OTE4RTE5OTEwNDcwOTkyNTc4QjBCRDE5NzgyQTEzOTMKKzoxMDM5RjAwMEVEMkJDNjVGMjY3QUExMkRCRTRBREE2RTU3QkMyNTZCMjkKKzoxMDNBMDAwMEU4RjgxMzQ2NEEzMzgxMkVEQzY1NDRCMTIxRkYwNjVDOTkKKzoxMDNBMTAwMEQ5RjRGQjBFREU1QjUyNDQ4M0ZDNzA2NzMyQkFCNTdGOEIKKzoxMDNBMjAwMDI4NDQxNERBREZFNTYzREZCM0I5NDgyNDgwRUYyRjMxOEYKKzoxMDNBMzAwMEUwQzU1MTE2OUE0MjQ2NTEzQkU5MUYxNjdDOEZDRTkxNDQKKzoxMDNBNDAwMEQ5MTE0NzI3MjMzRjVBQkQ2QzlEQTQ4OEUxQzk0QkZGN0MKKzoxMDNBNTAwMDc3QjE4MDhFQTdDODA2QkRCMUJDNUNGNjQ3RTk3Nzk2MDIKKzoxMDNBNjAwMDdBNUM0ODRGNTYzRDVFRTk3NzlEREZCQzEwODRGMTU3ODQKKzoxMDNBNzAwMEU1RENFMzU4NEVDN0JGNTBERUI0MEFEOEQyRjJFMUU0MjkKKzoxMDNBODAwMENGODBFRjJDRTZGRTgzQTZGRjZFNzAwMjNFRDA0QTY3MjEKKzoxMDNBOTAwMDk3ODc0NDMzNjA4MDNCRkJBNDAzQ0Y4N0VENkYxQ0Q2MzAKKzoxMDNBQTAwMENERjMxNUMxOUQ4OUYyRjU2QTcyMzVDQTg1NEJCQzdGOEQKKzoxMDNBQjAwMEExM0VGMkM2RTEyMTA4MEZGMTcyRTg3OUE1ODlBRjlCMUEKKzoxMDNBQzAwMEYyMzVCREE1RkFBNkU5RUNCMkYzMDJEMzZCNDQyRDQ3NUIKKzoxMDNBRDAwMDM4NEI5QzlGOUJDNjkzNkVCMDVCRDdFNUNCQ0EwQURBODYKKzoxMDNBRTAwMDQ1MkE5M0EzNDAzQUYwRDc0REJGMEZCNjE5MDE3OUFEREYKKzoxMDNBRjAwMDM0NzVCMkU3M0YzMkM4Q0RENUZEQTdGQUEzN0RDMDREREUKKzoxMDNCMDAwMDJBMzRFOTlCNEJBQ0JGMEVFMEE3RUJGRjMxQzBDRjE5QzUKKzoxMDNCMTAwMDg3OUY4RDA0NTNBMzQwMkZFMTQ5MDYzRjc2NTVGOUZENTkKKzoxMDNCMjAwMDRBOTRGRTczRDU4MDQ3MDIyNzg4MEU4RURGQTM3Q0E4QjcKKzoxMDNCMzAwMEUzMEY1QjRFODRFOEJGQUZDOUM1NUJDNDQwMzdDODYxQzMKKzoxMDNCNDAwMDhCRUM0NzM5NDUwQTY0RjQ0N0NDRjMyQjEyOTlCQzg5QjYKKzoxMDNCNTAwMEMzRDkyRTExMUQ3RjkwMjkxMTg0M0JGRDBCREFCMzM4OTgKKzoxMDNCNjAwMEZDRTg1RjhBRUZGNTdGMDBGQ0E4OEU4RTNBNDdFMUYzMTAKKzoxMDNCNzAwMDQ2QTk4NENFMjc5M0E4Q0UyQkU5RkIxMjkxQTAzRTQ4RkMKKzoxMDNCODAwMENDNDdCRUE1RUQxM0U0NzRFMERGRUJGRDIwMDc5QkI4NDYKKzoxMDNCOTAwMERGNDdCQ0VEM0VCRDVEM0U0ODY0Nzg4REI3NDc3Q0I3REUKKzoxMDNCQTAwMDE5REE5OUJERDNBNEQ5RjVERUVEMDZCQUU4NzkzRjhEQ0YKKzoxMDNCQjAwMDI0RjQzRkZBODlDQ0NFMUUyNDdBMzlGRDZDNDdGRjZEODAKKzoxMDNCQzAwMDc1RTY5NDE4QTAyMTI1RkI3QTdGMjVGMEFCOTcyMDFDODEKKzoxMDNCRDAwMDM0M0RBMUU5MDVBQTJGMDY4OUZERTJFM0M5ODU0MTIyMEEKKzoxMDNCRTAwMDYwQkI1MUZGMjY5NUQ3MjZCRDlCNTI2NDk0MDM0NDZGNUEKKzoxMDNCRjAwMENGMTRDMDdGNzNCQzQ4MkZDNEFDRUY3OTE5QkNGMUIyQUQKKzoxMDNDMDAwMEY4QUE5N0JFMjQ4OUZEQzU2OTIyOTNDMzQ0Q0RDNEY1QTMKKzoxMDNDMTAwMDZCN0M0NUI4M0Q2MUQ1RTg4MjMwN0FGNUYwRUZDQTMwNkIKKzoxMDNDMjAwMDlGQzE4MEU3MDgwRUVFQTQ2RTE1RDREREE0MTZFQkU3NjUKKzoxMDNDMzAwMENCNEFBMjAwMjc5QkQ0RDU0Q0I4N0U1NEYzMTNGODUxM0QKKzoxMDNDNDAwMDNDMEU5MzZDMURFQkM3MjdENjBGRTVBMjA3RjE2OTcxRjcKKzoxMDNDNTAwMEQ1OTIxMEQyRjE5RDY4MDcwQTZBODg1QzQ0N0IzMENDMEIKKzoxMDNDNjAwMEY1QUFERjA3Nzg1QzU1NUY0NzNFQTI4QjcxMUM5QzhDRTAKKzoxMDNDNzAwMEZFQjk5NDEzMDg4MDdGNkYwMTIyQzhBNkZGNzc5NUIyMjIKKzoxMDNDODAwMDUyRjIyQjdBRkFFQ0MxMjM1OThFRTM1OTI5NTg2MDlERTAKKzoxMDNDOTAwMDU2OTc3RDE2RTgwMUFCQ0IzQjBEQ0JBMjExNzMwNTI4REYKKzoxMDNDQTAwMDUzQUZBRjEzOTFBRDEyRDM5MzM2MUVBNUFCNzkyMjhDQ0YKKzoxMDNDQjAwMDk3MTk0MjdFOTZCQzQxMkM4OTJCMTNFRDU3REE1RjA5ODgKKzoxMDNDQzAwMDI2OUMwN0E3MDNERTJGMjlEREY1RDA4RDA2MDc0NTg2NDQKKzoxMDNDRDAwMEYxQ0NGNEU0MjhBNTFFODk4OEQ1NEU5ODZGN0Y4RUVEMkYKKzoxMDNDRTAwMEZFNzM5QTk2MDA4OEREMjREQzNDOTRFMkFEN0ZEN0FDNkQKKzoxMDNDRjAwMDI5QTA3N0RDQTA3RkU4M0E1NzE2OTcxQzAxOTMyRkQ1QUYKKzoxMDNEMDAwMEVGREQ3MEJEMDI3MTAwMjIwMDFFNTZDMzYwRDdDMDc4N0YKKzoxMDNEMTAwMDNGNTg1RThFRjEwRkZBMzc4MDBBOEIxNUMxNzJFNjFGOEQKKzoxMDNEMjAwMDA0NEM3NkFCQTg0ODlBN0QyNkY2NjlFRjA4MTc2REJENUUKKzoxMDNEMzAwMERGNEZCNjdFMUJEMUYxMTVFQUYxN0IyRUNGQkVCQTkzRDEKKzoxMDNENDAwMDdENEZBNUZGMDM3RTRDMzNFOUQ5RDQ4MDUxMUZCODRENzgKKzoxMDNENTAwMERGNzkwRTYwODlGMDVFRjJCRkYyM0QyRkQ5Njg1N0MwNUYKKzoxMDNENjAwMDVFMjkxNEJEMTE0QUNCQTlDNDlCMDY3RTk0NjMwMkY1NUIKKzoxMDNENzAwMEVGNjhERDlCRDNBREMyOTQyRTg1OTc5NURDOEYyNTk0OUIKKzoxMDNEODAwMDlGRjVGNDdGODhDQkQ3RUNBQTREQjM5QUU4QjhFNzRCMDAKKzoxMDNEOTAwMDVEN0VBMEU3RkU1NDlDNjZBNEY3NUU0RjRCM0QzMUYwN0MKKzoxMDNEQTAwMDczNEJGMTM2QTRFQjA2QUFGMDBBQzAzRjI4MTZEMTVFODkKKzoxMDNEQjAwMDVGNURGOEJDNTdBRkM3M0VEMUU0NTAyRkZBMjA4QTM0N0MKKzoxMDNEQzAwMDk2RkI5MzE0M0U5NjQyMzE5MDMyRUE5RkE3MEZCM0ZEQzMKKzoxMDNERDAwMDc0QjlGNEUxQkNEMzg4OEY2RjhCQUYyRkJFMjU3REZDMDcKKzoxMDNERTAwMEIzREY1Qjk5MkMzRUMxRTU1OTc2NTUyM0YzNTc5NEJFNUEKKzoxMDNERjAwMEZEODNERTc4REQ4ODc4NzU1MEJGMjY5MTdDQkVEMDgzNDgKKzoxMDNFMDAwMDRGQjU3NzY5RDAyQkM2Qjg4MEY1ODZFRkNGRDhEMTA3RUMKKzoxMDNFMTAwMDNDQUMzM0NDRkUzRjFCMzdBNUNFQTI3QzBDRjZBREU0MDgKKzoxMDNFMjAwMDM1Rjg0MUFCOTU4RDJBRDhGM0U3QzEyRTA3RkIzMDVDRkUKKzoxMDNFMzAwMDhFRjE2MTUyQzhFMkI1MzA4MDQ4RUIyOTRBMjBDMkZDQkQKKzoxMDNFNDAwMDlCMDhEMUVCNDEzOUM3MTg3N0IzNjQzQThDRkE3Qjg2NkIKKzoxMDNFNTAwMDJBRThFNzlGNTIyN0UzM0NFQ0YwQkQ0QzhDRTc0NkUwQjQKKzoxMDNFNjAwMEJCMTYyRjg5QTZBMEZEQzlGMDA3OUY2MkYxODAwNzJFMUYKKzoxMDNFNzAwMDhCMEUzNDdBMDUzMzk4RDFBQkYxQkQ1NTM5MjUyNDExMTkKKzoxMDNFODAwMEZFN0E3REVGNTZFMzdDOTNDQTI1RjM3QjJFNDkzOUE1NTQKKzoxMDNFOTAwMEIzNTM5MkJGMjc5MTUzM0E3QkE3NDJEQkY3RTE3OEEyNTUKKzoxMDNFQTAwMDc2REVDQjQyMkE5NTA3QkVFRjkzMTA4NTZGMTMzNDY1RkIKKzoxMDNFQjAwMDQzM0M5NEEwM0U2QkYyOTU3ODUxOUZFRjEyNEM3RUJCMzEKKzoxMDNFQzAwMEMyRTg0NzQ5QzdGRUEyOURFOTREQUQ5RTdDM0VFQ0JCRDIKKzoxMDNFRDAwMEYxN0QyNDA1RkREQTY0RkQxQkVBQ0IxRTk2Mjg3MTNBQkMKKzoxMDNFRTAwMEVCMEU2RDkyMjgxRTFCOTcwNzY2MDREMUJGM0RCMjQ5QTkKKzoxMDNFRjAwMDFBMTJFRjU3NjNEMUZDNzZBQTNFQzdDNkY3MDcyNDQyRDEKKzoxMDNGMDAwMEZCMjFEQzQ0NzJGMTJBNzhFODI1Q0E1ODgwMjZGQkIzRUQKKzoxMDNGMTAwMDkzNEU2Q0E3NEYzOTFFODlEMEUzQ0ZEMDIxREI2MDlEMzMKKzoxMDNGMjAwMDE4OUYzODg2RkQ2MEEwOEIxODZGRUE2Mjc1RkEyMkQ0NUMKKzoxMDNGMzAwMDVCQUM4MTAwQ0U0QjBBREJFRkExRjA2QTQ5RTE3NTg1RUQKKzoxMDNGNDAwMEQ3RDM3OEREQ0JFQkY5QkM0RUY1MDVENDlEMzJBREQzOUMKKzoxMDNGNTAwMDMyQzUxQUY2NjJEREMxRUJGOUJDOUVDRUVCNjlCQzVFRTAKKzoxMDNGNjAwMEMwRUJDMjQ2QUNCN0M4NkNCQzM1NTI4NDhERUZFMDc1NkYKKzoxMDNGNzAwMDg1RDdEMzc5RERDQkVCMDVCQzRFQjZCMUVGREI1OEREOTEKKzoxMDNGODAwMDYxOERCMEYxOURCQzlFQ0ZFQjE5QkM5RUM2RUI4Mzc5RDEKKzoxMDNGOTAwMDVERDg4NkY1NjRGODczMTQ1MkY4MUJFNDQzNjdCQzhFNTEKKzoxMDNGQTAwMDRBODRDM0I1QTdERTY1NkE2N0Y0OTIyMTEwNkU4N0E5QkIKKzoxMDNGQjAwMEQ5NjBCNzFEOTg3NTdGMzZDNDQzMUYzRDcxQjUwRkU4QjIKKzoxMDNGQzAwMEE3RTE2NjhEOUVGQzI4M0Y0OUNFNEQyOEM3RkE3MzdGMzYKKzoxMDNGRDAwMEFFRTFDRTE1MTg4NzY4MDhDOThDODk3ODdDMjZERTVFMkMKKzoxMDNGRTAwMDcyMDRGNEY2RjkxOUEyMUYxQURCOTJGODJGQ0Y3MjNCNzQKKzoxMDNGRjAwMEZFMTkxRTk3Nzk5QUVGNTdFRUU0RkI5NURCRjk3RTY1ODMKKzoxMDQwMDAwMDNCREZBRjdDOTJFRjU3M0VDMUY3MkIxRkU3RkI5NTlCNDEKKzoxMDQwMTAwMEY5N0VFNTI2RDhBRkE0RkQzNkYwRkRDQUY1N0NCRjcyNjcKKzoxMDQwMjAwMDJEREZBRjZDODFGRENBNjE0MEVGNzU1OEFFRTJGQjk1QTQKKzoxMDQwMzAwMDJCRjk3RTY1MDNERkFGN0NFNENFOTJERjE2RDJGNTlEQ0YKKzoxMDQwNDAwMDc3ODk2ODBGMjRDMzQ3RjE2RUEzRkMxQ0IxQzMyODNGRDYKKzoxMDQwNTAwMDhCQjZBNDFCRUE0MzM3MEQzMEM4RjdDMjU2RTNCRTQ1MDIKKzoxMDQwNjAwMDQxRTMwODQzNUQ1OTU2NjJBOEU3REU3NzhENjFCQzlDNDkKKzoxMDQwNzAwMDg1QzY3RDhCMDE3MzZFMzRENEZCMDVBNzFCRkFBNzRGNTEKKzoxMDQwODAwMEI4QzM1MEY3NUU1QjY5QTg3QjRBRUYzNkQ0NURDNUY3Q0QKKzoxMDQwOTAwMDE4QzY3MzE0RkVDNDUwQjdFN0FDMzBGNDdGREM1MjgwMEUKKzoxMDQwQTAwMEY0MjU2N0FFMzFGNDkzNUMxQjBERkQ2QTFDODFDRjJEQTYKKzoxMDQwQjAwMDIwRUZBNjY0NUU5NjdDMjM3RjU3QjNGNEYyRDJBQzFGNDgKKzoxMDQwQzAwMDJDQjkyNDEwNDAzREM3RjQxMUM2NjgyMUFFMzY4OEM1MEUKKzoxMDQwRDAwMEFGRUMxRkRFNzAwNEZDMTc1QjIxRDM1M0U2Nzg5NTc5QjMKKzoxMDQwRTAwMDNDRDlGNUQ0MzE5NTdFQTdEQzczQzREN0E1QTM1QkUyOTgKKzoxMDQwRjAwMEQzQkQ0Nzk3OUEyQTMxMzlCOUU2NDE0NkRGQUQwRjI2M0QKKzoxMDQxMDAwMEE2NzNENDA0NzQxREFEREYyNDhFMTdCQjI1OEI0MThGOUQKKzoxMDQxMTAwMDY4N0U0REVCODMwMkY2RkY2N0M3RDdEQUNERTNDNkJGRjMKKzoxMDQxMjAwMDQ3NzEzRDU2NkZCNzQ0Rjg3Q0E4OEVEMEQ5MEJENkFFRjgKKzoxMDQxMzAwMEI0RDkwNEY1M0NGMzk3MkQ5Q0RGQ0IyN0Y4NEYzNDUyQ0MKKzoxMDQxNDAwMDc4QUZGNDEyQkY4REQ2NTdCQTJBMDJDQzJFMTExNTk0MkYKKzoxMDQxNTAwMDBGQ0I2RTQ2QkY1RUVCQUZDREFCRDEzNTlEQzkxN0EyN0QKKzoxMDQxNjAwMDhCNUJBMjlDNzIxOEUyMEEyQjMzRkJCNkRGRTQ5ODA1NDYKKzoxMDQxNzAwMEUzN0Y5Njk4NDBBMjU0MkZDOTUyNzA1MjNFRTU1RkY5RjIKKzoxMDQxODAwMEE4QzVCRjlDQTA3RTRBMTgxRjIwNjQyM0RCNzdGNjE5QzAKKzoxMDQxOTAwMEUzQTY4RDczNENGMjhGRTc2NTU4MzVGOTk2NTk4MUNGQjgKKzoxMDQxQTAwMDFCQkQ3RENGQ0IwNkYzODJGOUYwNzk1OTYzNEUyQzJERTAKKzoxMDQxQjAwMEIxMTQ5Q0VGQjg1ODA2RDZDQjYyNjk1ODVFMUQxQjg4QjcKKzoxMDQxQzAwMEU1RDg1ODM2OTY2MzYyODNCMTJDOERFNTYzNzk1NUVDNUEKKzoxMDQxRDAwMDBBN0NBRjI0MzYxQ0NCRDFCMUFCRjBCOTNGMzYxQUNCMzkKKzoxMDQxRTAwMDJCNjNERkMxRTdBMzYyRTNCMDFDMTlCQjBFOUYxN0M3QTcKKzoxMDQxRjAwMENBQjFCQzIyNzYxMzNFMUYxMTlCOENFNUYwRDgyREY4NzYKKzoxMDQyMDAwMEJDMjgzNjBEQ0I2MUIxMUY2MDM5MzQzNjEzQ0IyMUIxRDgKKzoxMDQyMTAwMEQ5NTgxNkM2NjY2MTM5MzhCNjAwREYyQjg4Q0RDNzMyNEIKKzoxMDQyMjAwMDNGNzYyRjNFNTc2MjRCQjBDQzhCM0Q4MDY1NkVFQ0M3MUUKKzoxMDQyMzAwMDU4MEU4QTM1NjA5OTEzNUI4RUU1QzA1ODBCQkUzNzIwNDcKKzoxMDQyNDAwMEI2MUFDQkVDRDg0M0Y4REMxN0RCODA2NTU2NkMzMzk2OTYKKzoxMDQyNTAwMDY5QjFFREQ4RUU4REI1NjM5OTFBN0IxNjlGN0I2MkNGNUQKKzoxMDQyNjAwMDYwRTk4RUJEODBDRjVEQjFCRDU4M0E2M0JGQzRFNzhFQjMKKzoxMDQyNzAwMEQ4Q0ZCMTRDODkxREMyRTdGNkQ4MDEyQzJGODVBNzRCQUEKKzoxMDQyODAwMEQ5QzE2NTFGMUJGNzlGQzc3RTY4REM3RjJFM0Q2QTk0RUUKKzoxMDQyOTAwMEUzMjU2RjFBRjc5RkZEODc4REZCQ0ZBMzVFMzFFRTNGQkQKKzoxMDQyQTAwMDE3RUYzM0NBRjExMUJCOERGQkNGNDUzQjhDNzI3Q0U4MTUKKzoxMDQyQjAwMDk2M0I4QzdBNjQ5MzUxOEUxN0I0REU2REQ0MjM4RDQ2NzEKKzoxMDQyQzAwMDM5OUVCQkVDMjc0NjNENzJERjBBQTMxRTU5QjhDNkQwMDMKKzoxMDQyRDAwMEVFOUI2Mzk0REY1OUU0MzFBMzlGM0U2MTlCNTE4RjVDNTkKKzoxMDQyRTAwMEZCNTNDMzc4QUVEMkU3NEQ3RTREMDRFNThCQTNGODE3QTAKKzoxMDQyRjAwMDg2RjdFQzg1MDc0RDcyNTk2NUYyQzkxNDZGMDc5MEMwQjcKKzoxMDQzMDAwMEZFRTY1MkUyRjA4MzVGNjNDNjY3M0E5NzA3MTlDMDc3MEIKKzoxMDQzMTAwMEI0Q0NFNDdDRDcwRkY4OEU5NkU5MzcyREY0MDEzRDY0RDgKKzoxMDQzMjAwMDRDMkQ5QjA1NzZDQzg1MTM4MjAyQjEzMjYxNkFERDMwNUIKKzoxMDQzMzAwMEQ4RUY0OTFGNDg1ODNDODE4Q0I4MEVFMjY4NEREOTVBRDUKKzoxMDQzNDAwMDlEQTgwMjZENkYxQTQ0MzBCRTQwRDRFNTE1MDExN0M2MTIKKzoxMDQzNTAwMDlCQjFGRTVCRTlDMTBBQzg4QjY5QjJGMjc2QjI5MkI1MzUKKzoxMDQzNjAwMEE3QjBGQUIxQzYzOTJCQTAzRDNEQjUyMzFCMTI5OTFFNEIKKzoxMDQzNzAwMEI3MjY5NkU3NUQxMkRCREYxQjI4MDU3RTI3RDFGNUZGMDgKKzoxMDQzODAwMEI1QkNFQjdFODhDQkZEQkIzREY0QUU0NDlGMkZCNDg3MUMKKzoxMDQzOTAwMEYyNjA2QkVEQUMzNUY0MzRBODhFMDIyMTcwMTRGQThEMDYKKzoxMDQzQTAwMDE0MDJFRjQ5MjhCNzhENzFENjI5QTAzOEU5RjM3QzI5OEEKKzoxMDQzQjAwMEY4MDdFODk3MzFENTI3QzBGQTM1MzgzNEI5RkI5RUNGRDYKKzoxMDQzQzAwMDVCNUMzRjM1QTUxMUY0MzdENUQ1N0MzRjE4RkUzNEJENzUKKzoxMDQzRDAwMDQxRjVFMUEzNEUwRkNBRkRDODZBNzk5QjhERDk4NTQ2ODgKKzoxMDQzRTAwMEZEQTE2NkNEQzY3ODYyNzNEMzEyRDRDNzgwNUY0QkEyOUQKKzoxMDQzRjAwMDM4NkIxN0Q2NTNDMUJBMUMwQzcxODFFRTVDODk5NjhCNTEKKzoxMDQ0MDAwMDZDRDEyNkQwMjc1RkE1NzUxRTE3MkMwODhGRjNCMDlFQTAKKzoxMDQ0MTAwMEZCNkYwQzYxRkYxNUNFQTk2NUIwMUUwQThGQUYzODNDNEIKKzoxMDQ0MjAwMDJFRjQwNTBGRkExN0Y0RDFGOUY5MzRBQURBMkQxOEUyQUYKKzoxMDQ0MzAwMDlBQTk5NjkwNjBFREM3RjY1MzYxN0M1RkM4OEY3RUQ5Q0MKKzoxMDQ0NDAwMDFGMjUxNjZGRDdFMDQ3RkZFRTRCRDdFMjM4MDRERjRCNEUKKzoxMDQ0NTAwMEIxOEVFOTNEOUUzNjhFMDAwMDAzQkFFNjdBNTFBM0VCOTkKKzoxMDQ0NjAwMEJBMjQ3QTRBOEI3NzEzRjVFNjZGQjVFRjc0NDRFNjdFOEIKKzoxMDQ0NzAwMDlDRTkzQjE2Qzk4RkZCQjZFNkY3MjQ5NzUxMEU1QTVEQUYKKzoxMDQ0ODAwMDIxQ0M4NzkwQTVDNEZCQkJCMjhERUY1QjZEOTk3QTU5QTcKKzoxMDQ0OTAwMEZCREMzQkI0NzUzNERFN0M1OUZEREJCNUZFRDQzMTg0RTYKKzoxMDQ0QTAwMEZFMzkxQzhFNjRDQkNENDg3NzA1NUMxRkU3NzBGQkVFQjAKKzoxMDQ0QjAwMEQwOUY2RTU4RDE0QUY5Mzk0MjlGRDkxMkM0MTEyMkNERUEKKzoxMDQ0QzAwMDIyRUU2QkU2RDQ1MDgyQ0I4RkMzN0JBMEMyRUM0MkVERDAKKzoxMDQ0RDAwMEJCMDM2QjhENzE5ODAzMUExQzM3NUQxRUZDQjVGQ0NFQjcKKzoxMDQ0RTAwMDFDNEFGOEJGMjhFOTNEMEZCMjYzMkE1QjhGOTc1NUE1OTgKKzoxMDQ0RjAwMDBENDE3QjBBOUQ1NzAxQTMyNTMyOTBCQTIzRkEzOEEwQkIKKzoxMDQ1MDAwMDc5M0U4NEVGNUYwQ0U0QzMwRDc0QjFGRTY0OTc3MURDRjcKKzoxMDQ1MTAwMDVFREZCNUJDMzJCQTJGM0REOEVCM0JERjcyM0ZCMENBOEQKKzoxMDQ1MjAwMDlBNzgzRjk1RTIwQkYxM0REMDY0RkY2OUE1QjYxRkE4Q0MKKzoxMDQ1MzAwMEQ1MEZGREE5REEwRTc2NzdEM0MyNEFEQzZGNkZGMjMxNjAKKzoxMDQ1NDAwMEZENERCRUE2QTM4RThEQUZEQjNDQ0U0RTBFRjdFRERDNEYKKzoxMDQ1NTAwMDlGRENCOUE5MDJGMzFGQzk2RTIzN0QwRTc5Rjg1NjQ3NzcKKzoxMDQ1NjAwMDg4RDk2RkU5NTAzRUQ1QzZGQTBEREQzQzg3M0ZBRkM0MTAKKzoxMDQ1NzAwMEU3REI1QkQ5RjNDMTZCNEJGOUYzMTI3Q0JFMjNDQzlFMTYKKzoxMDQ1ODAwMDE3NkU5OEUwODA3ODRFQTNCNzIyMURFMzNBNzVGNDRGN0EKKzoxMDQ1OTAwMDI3RUY4Njc4NDMyMkM0RTM4NkI0OTEwMDNDMUJFQ0Y1RjgKKzoxMDQ1QTAwMDhCMjBGRjBCQkQwMTJDQjU3OTBGREFCNEFEN0MzOEVENTMKKzoxMDQ1QjAwMDNGNjg2MTcwM0FFNEI5NTJDMkM0RkM0MzAyMjExNTNBMjMKKzoxMDQ1QzAwMEVGQzdGODdBNzNCNUY2OTBCMUJEOEQ3RjJGQUZBRDcyOUUKKzoxMDQ1RDAwMEY5NzBGQUNGQkM4NUExOEQ5MzRCRjE5OTdGMDg4OUY3Q0IKKzoxMDQ1RTAwMDdCODQ4RjYzRDdEQTAzQzZGNjMwNkY1NzVBNEZBMjE4MTEKKzoxMDQ1RjAwMDUwMTZGQURGOTkwNEZEOUE4RERGNUJDN0ZCQjkyOEIzMkIKKzoxMDQ2MDAwMEMxQkMwQjE2MDYxQ0MzNjE1RTQ1QUNERjEzMUFERjlBRjIKKzoxMDQ2MTAwMEU0ODIxNDZFMjQ5Mzc1REY2QkU1RjNCNjJDNjQ3MTU2NTcKKzoxMDQ2MjAwMDREM0U2Q0UzNzE4MEFEMTAwNzE4MTZFRkJGNDZFQjZGN0YKKzoxMDQ2MzAwMERGRkVDNEM3NTQ4RjRCMEI1OTNFQTlENkRFQ0NFN0E1OEQKKzoxMDQ2NDAwMEU1RTUxNERDNjc4Q0RGRkVDMkNBRjhCODVCNjZGMTVCOTcKKzoxMDQ2NTAwMDhEQUU5MkQxMzc5OTI3MUFGQzNEMTI3MjE4RUIzMzc0NDQKKzoxMDQ2NjAwMDc2MjFENDAzMDM4Q0VENjUwNUM2NzZGRjA4NjNCREE4RUIKKzoxMDQ2NzAwMEM0NTg1N0FFMzFENDJGRjRDNDYxM0E1M0Y0NzExODJEOTUKKzoxMDQ2ODAwMEE2RjM4NEI3MTJGRDkwNzhGQ0FGM0I0NTlGNDc5RUNCQzUKKzoxMDQ2OTAwMEY5RURDOUJBMTJFQ0Q3RTBFMjdDNjRDQUE3Njk1MjJBRTQKKzoxMDQ2QTAwMEVDRkE3REY4QkQ5QzhGRjY0MTNDODQ5NjJGNDBGRTM2OTcKKzoxMDQ2QjAwMDJERjc4RjBFRDhGMzQxQkZCRjY3RjE2RjIzQzlFMUI2NjUKKzoxMDQ2QzAwMDk1RTM3MTBCRTdDM0M3MDA5RkI0NkNFM0Y4N0M4NEM3MjQKKzoxMDQ2RDAwMDc1RDZGM0I4Q0U1QTFFRDc2OTgxQjgwRUM2Njc1ODVDMzYKKzoxMDQ2RTAwMDY3MTU4RkVCRkM4Q0U3QTFFRkUxNzE5RDY3Nzk1Q0U3QzMKKzoxMDQ2RjAwMDE5MUVENzc5OUFFN0ExRUZFNDc5RThEQjc5NUNBNzlERTkKKzoxMDQ3MDAwMEM3NzUyNjcyRjlCRDdGNjI0NzM2QzREOTFFOUY5OEQ4RjcKKzoxMDQ3MTAwMDRGOUUyODMzN0QxNjg0ODAyNjJEQUYyMjRBODMxNUU4Q0MKKzoxMDQ3MjAwMDlBQzIwNkY2NzU0QUVBMTQ4QjBERjI2MjAzMENBRTI1QTYKKzoxMDQ3MzAwMEYzMTQ4QkNDRjI3MUYwNkYzQUZGMEVFODE1Q0M5Rjc5MzEKKzoxMDQ3NDAwMDkzRTdGNUU0NTBBQjQ4NDdFRkEzMEY0NzA5RTQ3NTY0REUKKzoxMDQ3NTAwMDRERjA4RTg2OTA2ODJBQTc0N0RBRTY4MzdFNUMwRDkwM0UKKzoxMDQ3NjAwMEFDQzM1RTMwNzM4ODY0MDk3OEU1N0UzMDNFQzE3RUY5NjMKKzoxMDQ3NzAwMEJCQzMwN0MxOUMxOTExQURBRDcwRDJGNzhCNUUwRTU2NEQKKzoxMDQ3ODAwMDUwNEY5QjBDMkRGMjFGMTQxNEM4MTcwQTg4ODBFN0ZEQTgKKzoxMDQ3OTAwMEU1RkUyMzRBNjkxQzVGNzQxNjA2QkFBMDczNDQ3RDk2MzEKKzoxMDQ3QTAwMEE3RTk4NzZCOEQ3NDcxNTU2QzJCREFDQjRENzUzQzVGMjcKKzoxMDQ3QjAwMDRBMjEwOUZENzhBREY0NUUyQjlBRTI0OTQ2M0ZBQTY5ODkKKzoxMDQ3QzAwMDk5MzFERkMzNUM4RUQ4NjFGNEMzOEJCNjk4REU1N0ZBOUIKKzoxMDQ3RDAwMDdFN0ZFODI2RDExNDVGMzNFNjExMzdCOUE2RjcxOTFGOUIKKzoxMDQ3RTAwMENGOEY0REVERDM1RkJDQzU1Mjc5OUQzQzI2NUU3N0M2MTkKKzoxMDQ3RjAwMEJFOEJGRENERjZBMDA0NzYxRUI1NTdBNUEzNzIwMEVDQzYKKzoxMDQ4MDAwMDVERTlBODM3MDA3MTEzRTlBOEMyNEIzRjdGMUVFMEY1QjAKKzoxMDQ4MTAwMDIwRDZBOUREMTg4NEYxMjk1RTBDNzZBMzg1MEE3Q0Q4MDAKKzoxMDQ4MjAwMDFCRDkwRkMyMURGRDkwOEIyQjAyRDQxOERBN0YxQjQxQzAKKzoxMDQ4MzAwMEJGMjI0RDc2NUVBNzgyNzExNDk4OEJGODkxMzk3RTMyMzMKKzoxMDQ4NDAwMEU0REFBNzIxMEUxMkE5MTFDOTM2NUE3RjdDNjFERkYyODIKKzoxMDQ4NTAwMEFFNTc1RTg1MkI4MEZCNDkzOUI1REUxMjRCMUZGQ0JFN0YKKzoxMDQ4NjAwMEE5NTY5Qzk0Njg5RjZDMzFBN0VCOTVCNUQzQkRBODNGMjIKKzoxMDQ4NzAwMDBFNUYzMjZGNjBCMUFDQ0IxQkU4NzcyQkNGMUIzOEMzMTgKKzoxMDQ4ODAwMEYyRTIwNjY5RUJCQUJGNkYzQTc4RDRCNDhFRkU0OUVDMTcKKzoxMDQ4OTAwMEVBRTczNUJFNzNCMUJDMTM4REVFMzMwQUZBQTY5MzU1MjEKKzoxMDQ4QTAwMDVDM0VDNjIyMjJFOTA0NzkyQjA1NTA3RUY2QkIzNTg0OTYKKzoxMDQ4QjAwMEY5RjFBMEEwRjU3Q0QyRjRDRDc1Qzg4N0VBODNFQzFDOTEKKzoxMDQ4QzAwMDRGQkY1QjAzNDQ5Rjc3QUZDRDYzNTA0RTE3Qjg3NUE0QkQKKzoxMDQ4RDAwMEU5QzAzODk2Qzc0MUUxMEZGQkQ3NEQwNzA4RkY4RThBMjQKKzoxMDQ4RTAwMEMyQzE3RTFGQTk4MEVGRDk0OTJEQjE0MzdDQjNDRUFGQTEKKzoxMDQ4RjAwMEMyNzM4QjhCQzEwQkZDNTVERTFGRTdENUJDNENDNDk0MzcKKzoxMDQ5MDAwMDhBODYwOTJDM0VBQUM5N0Y4RDRFMUE3QzNDNUUzRjQxQTcKKzoxMDQ5MTAwMEMyNzhCN0U0QUQ4RDAyREU5QjQ2MTMzQzZGNDNFREFFMkIKKzoxMDQ5MjAwMDhCMTczNUZGMDZGMkJDMzIzQkYxREZENkEyNjgxNEU4RTQKKzoxMDQ5MzAwMDkyMDQyNjIxRkNCNEZDQzAyNjc3NTYzOUVDRDNBQkYzQTUKKzoxMDQ5NDAwMDM1RkI4MkU3QTE0QTdFM0NCNzkwRDMzNjhBQzVDMzMyOTUKKzoxMDQ5NTAwMEMzOTg1NzcxQkYxODdBNEVFRUE3QTdCQjBFODQ0RjUzNkEKKzoxMDQ5NjAwMDkyRjMwNTZCNjU5NkY3RTQ0QjgyRDdGN0I5MUNDRTkwQUUKKzoxMDQ5NzAwMEEzOTM5OTNGNEFFOTNGNDE5Q0EwOTNGN0RCRDIzQ0ZEQ0EKKzoxMDQ5ODAwMDc3NDM0OTlDN0ZCNUY2M0Y0QTBBQjY2QkY1OUM5ODhDRjUKKzoxMDQ5OTAwMEYzMjY2RERGQ0UwRkI4NUVGM0Y3NENGRTlCNTUwQTFBNzcKKzoxMDQ5QTAwMEZDQjA1Q0FCODJGREI0QkE5QzY5OTQ2Nzk3M0Y0Rjg5QjkKKzoxMDQ5QjAwMEU1NDMxNkRGNjhDMDczQzY4MEJFRjlBNjg5RjNDRDg1Q0UKKzoxMDQ5QzAwMDQxMjZCQkEzQjA4OEVEMUJGN0Q4MUQyMkYxNTBCODZFNkQKKzoxMDQ5RDAwMDM1RDE5M0E2NDdBQzQ1REUwREMzRjI3QkQzQzVENjY1NzIKKzoxMDQ5RTAwMDk1QUEwMEZCMkE3RTgyRkI0MjZFN0Y0NzAwRjYwNTVEOUEKKzoxMDQ5RjAwMDM5OTE3MkIwOEYyOTFERkMxNUU4NDBBMzhCOUNCNkIxOEMKKzoxMDRBMDAwMDA4RUYxNzM1QkQ1NzQ3MkEwMjA5RTZBRkQ5NzVFMDZGQTEKKzoxMDRBMTAwMEY5RDI2MTY0OTNERjQzODI1RUYwQUY3Mjk2MzMxQjcyMEEKKzoxMDRBMjAwMDIwOEYyQjBDNTRGQkY2RkIyRTc3RkY1QURCNEZDRUE1QzUKKzoxMDRBMzAwMDdGRTBGN0ZDNDJDM0Y3QTdBNkI4OTU5N0IyRUM1ODlENjQKKzoxMDRBNDAwMDdFRkYzNDQzQjBFOEU4QjJDN0NGMzdCRDQ3RkQwQjZGRjgKKzoxMDRBNTAwMDIyQjkyRDU5NDI1OTM2MURCRDk4RkQ3N0IzOUY0RDdBMjUKKzoxMDRBNjAwMEU1QkQ5NTEyQzg5QkIyNEM5OTc0MDRGMjFGN0JGQ0VEMTYKKzoxMDRBNzAwMDJENTM5OUZDRTI3OEIzNzI3RkI0QjczRjc5QTdCRjJGNkIKKzoxMDRBODAwMDdENjI3NTk5RjY1OUJFQTUzRkU5QjcxOUYzNEIyRjNCRTcKKzoxMDRBOTAwMDNGRjc1QkM2MjMxQTc4OUU1RTJGQkZDMzM0OEUxODBFNzUKKzoxMDRBQTAwMDg4ODlDRTZEMEMwOTFCRTEyRUI5OEM3NkM3OTU1NkM2NDgKKzoxMDRBQjAwMDlGODM5QjhENzFFNEJDQkEwMTg5RTM5RDNDNUZBREIyREQKKzoxMDRBQzAwMDRDQzM5MzcyRkIxRjI5QkZDRDNGNjI2NTNFMTBGNzgzMzUKKzoxMDRBRDAwMEI1NzhEMzdDOUUzNzVEMDk3OTZDMTQ0RjczNDhEMDAzNDkKKzoxMDRBRTAwMDhENjc4OTg4RjkzMTY3QzkzQjlFQUI3NDdDNTM2NTYzRDgKKzoxMDRBRjAwMEU3RTg0OEIzRjUyNDlDQkZEMEYyQjNFNjg2NTk1RDlCNDYKKzoxMDRCMDAwMDRGNzU5QkIxNUU0NUE2Njc0MURDQjU2QTkzOTU0MDNFMDMKKzoxMDRCMTAwMEQ2N0MyMjlERUNEMkU2NEZGOUZERkIzNjY2MDc1NTkzMTUKKzoxMDRCMjAwMERBMjY5MDZCMkI3OTNDQjFEMjRCMjRDOEE3QUE3OUU5M0QKKzoxMDRCMzAwMDg5QjE3MDlFQTdDNkM2RTRGN0U3MTRGRThBMkVFRkU2OTkKKzoxMDRCNDAwMDZFNTc0NDA2RkVGRTY4REY1NURGRkYwRTgxRjcyMzRERUEKKzoxMDRCNTAwMDAzNDA2RkE2MjUzRTA3MzFCQkQ5MzhCRjRCQ0RERjNDQTQKKzoxMDRCNjAwMDVGRUQ5QzQ2QjI3OTQ4QkI4NDg0RTcxNTFGRDBFMjVFQjYKKzoxMDRCNzAwMDk3Nzk4RTY0QkI4REUxM0ZEOTM5OTI0QkJEQkYwQkRFNzcKKzoxMDRCODAwMEVGRTMxQ0NBQTVERURGRjM0RkJFRkZGQzI1RTY1RjYzNDMKKzoxMDRCOTAwMEVGQkUxRUU0QzRBQUNDREEyMEM4NTUyRDlGNjUxMTA5Q0EKKzoxMDRCQTAwMDA1MjA1NjYzNzk2NTlBM0E1MEQxRjVGMzVENjZCRjFDQ0UKKzoxMDRCQjAwMERBQ0Y3MjE5RkQwQUZCMUVFRjFDRDdDM0JGRDlCRDVENEEKKzoxMDRCQzAwMDA2RkUzREZCRDMxMzUzQzEyRTU4RjA0QjBCQjE1MzNBQTUKKzoxMDRCRDAwMDM4QjdEQkNEQ0Y4QjQ1NjREMDhGNzdFRkIzNjBEQzgwMDcKKzoxMDRCRTAwMDQ4RDFCMUI3RThGMjA1MzFCMzkwOEVCRkUwNjc2RURDMTMKKzoxMDRCRjAwMDVGQkVGQjc5NUI2NDBBN0RGRkVFMTczRjFBNDUyODFDRjgKKzoxMDRDMDAwMENFQURFODdFN0QyMEQ4M0QzRjE1NThGRTk1REEzNUVBRDkKKzoxMDRDMTAwMDE2RkFGQzZFODlEQzE1NENBMEI3M0EzOTFGOUNGOUI5MUQKKzoxMDRDMjAwMDczMDZEMDk5QjBFQkMwMEY3MURDOEVEQkFEMzY5RDVFQTQKKzoxMDRDMzAwMEY4OERDRDhBRjBBN0ZERDg3OUFDNjc4NEM4MTA4MUNERjYKKzoxMDRDNDAwMDRGOUYyRkFFRTVCRDlENzk0NjYwRjM3QkQ5MUE0OTgxMTAKKzoxMDRDNTAwMEY5RUQ2QTk3NDNCNERGRTI1RDdGNDNCQUJFRUU2NzdCNEUKKzoxMDRDNjAwMDNDMDA4N0M1MkY1QjBDRjI2N0YxMkU0QkQ0MzYwQUNCODQKKzoxMDRDNzAwMDEzMzY5NEY3MDE5NzMwMTZFMDQ5NTAwRjJDREE1NzgzMUEKKzoxMDRDODAwMDc5QjI4QjNBNUFGRTY2RjFDMEZCNDZGRUEyNzBDMTczNDAKKzoxMDRDOTAwMDFGMEIzRUIwRjhBNzQwRkQ4NUE3M0Q2MEM3N0VERUI5N0IKKzoxMDRDQTAwMEQzMDM3MEE1RTNDRTkyMjk1RDdERjdFRjNBM0UyNDZDRTUKKzoxMDRDQjAwMEZDNTg3QUVGRjEyMDUyMDNGNEI1Qjg2MzM1RkJERUJFNDEKKzoxMDRDQzAwMDlCNEY4MzdDNUI2Q0UyRTNDRkUxMUZEOUJERjU0N0NDMDIKKzoxMDRDRDAwMDY2OEM0NzlFMjc2RjhFODU3RDBBQjIyQjIzNjE3RTcxN0QKKzoxMDRDRTAwMDhGRkVFMDdDQkQ2MENGRjlBRDcwOUVGOENDRjM3RkQ5MkMKKzoxMDRDRjAwMDBBNzZGREMyRkZGQTcyRUIwMzEwMEY3ODM1QzUwQkYyOEUKKzoxMDREMDAwMDY4RjE0RkRGRjMxMDFERkMzM0VDQ0M4RTNGRjdDQ0QzQjIKKzoxMDREMTAwMDRGM0Q0NkY5RTREQ0VGNkQ2OEU3OUNGQkQ1RTk1Qzg1MjcKKzoxMDREMjAwMEFFRkZEQ0RFN0Y2NEMxQjlEQkZCN0UzNUIxM0ZDMEUzQTMKKzoxMDREMzAwMEJFRkREN0Y1RUZDQkNGMDBCQThERDhGNEY4OEQyMDdFMkQKKzoxMDRENDAwMDk1OTcwNTk2Q0NGQzBBMkY0RDc4M0FCNEVGNTAyRUNDQUYKKzoxMDRENTAwMEYzRUMzMTFCOUVCRjU5NEM5RkQ1OTUwMERFNkE1MDNGNDYKKzoxMDRENjAwMDQwN0QxOTg1RjdBMkREQUJGRTY2MTk5NTA4RUVFQTQwOTUKKzoxMDRENzAwMDExMzc0NUEyMDNDMUM4NUVCNEVGOTY3RjE5NUYwQUE1M0IKKzoxMDREODAwMEQ1QUZDMDc4QTQxQkU1QkJGOUJEQzU0NzI5N0VBRjRDQTQKKzoxMDREOTAwMDhFQ0ZGM0U0NkIxOUUwQkY3OEY3NkFGNkREMEU4QTRGMjkKKzoxMDREQTAwMDRGNkY3QzlFODU3RjhDRUI4RENGMTJCQjE5OUYwQjlGMjUKKzoxMDREQjAwMEM0RDhFOEJFOEM4NDc5MjQxQTNFNkJGNkRGRDZBN0REMTIKKzoxMDREQzAwMEEwQzk4NzRCQzE3OTFFQ0Y5QkZBMkY1QkEwQzIwRTdDNzYKKzoxMDRERDAwMEY2QkM1M0Y1MzEzQzQ3QTZEMEI2NzM3QkNFRTcxMjRBRkEKKzoxMDRERTAwMDI3OUY1QUJCN0YwODcyQjJGQjU3MzYyRkY4MUQ3N0ZGRkIKKzoxMDRERjAwMEVBMDNFNEJCNzNGQkRGOTYxNTc2RkVDNDI1NTBCQkUyRTUKKzoxMDRFMDAwMDFDRTlGOUVCMDQzQjYzMTFERjMzNUJCQ0MzMURCNTc5Q0YKKzoxMDRFMTAwMEUyRjg1QTE0OTkzNjQ5RjFFMEYzMTNGODNDQzJGODYxMEMKKzoxMDRFMjAwMDUxRTRDMEFENDIwMkZDMkRCMzE3MzBGRDE0RTk4NzcwODgKKzoxMDRFMzAwMEE5QTE5RTBFOUNDRkQ3RTM1NTI4MDM3QzlFQjgxRUU4RkYKKzoxMDRFNDAwMDJGMTkzRUI1RjU3QjYxRkQ1N0VCRjBCQTgzRjFCMUI5OEYKKzoxMDRFNTAwMEZGMjJDQUFGMjA4NzdCRTEzNzIyN0MwMEU1Qjk3NjlCMzEKKzoxMDRFNjAwMDA0Rjk5MUU3QUMyQ0ZFNjZDNjdCMUNGRUZDRkNFNEI3QTMKKzoxMDRFNzAwMEI0MTdFRkI3MjdEOTdGRTA3MEI4MTRCRjVGNkE3RERGNDIKKzoxMDRFODAwMDE2N0U3M0VDMEE4RTZCODZFMzk5QUYxM0VCODM4RDVDMTEKKzoxMDRFOTAwMDdFMkMyMkI1OTMwNkU4RjQ5OUNENEFGNTU5M0VEODdCOEQKKzoxMDRFQTAwMDQxNzVBMDEwOUY2RjUzODcwNUU1RkM5OTVEOTYwOEU4NTIKKzoxMDRFQjAwMDBCQjNCQzU4NDQxMkVGREI0NUVDQ0M3RTU5RjRGMjgxQzUKKzoxMDRFQzAwMDUxMjBEN0NFMUNGQzM5QTc0QjQ2Rjc4Qjc2OUY5MDU1QzcKKzoxMDRFRDAwMEFFMUYyMjdBRkQ5MEM0REZGRTI5MUY2RkYxMkI4OUM3MTgKKzoxMDRFRTAwMDVCQkNGQjZGMDlDN0ZCNUMwQURDMEVGM0ZGQkNEMzRBNUIKKzoxMDRFRjAwMDU0M0FDNEU3MUQ5NjQ5ODlFQ0FENEQ3NkFCMzFDRkQ2MTcKKzoxMDRGMDAwMDNERjY1ODJBN0RDRkUyNzEyOEIwRUU4NjE1ODEwRjU0MDgKKzoxMDRGMTAwMEIwNEJERUIxNjI5Qzk2NDhGRTRGNkQ3OERFREFBMUFDRjQKKzoxMDRGMjAwMEExNzA2QkYwNTQ2MTNDNDUxQkFGRDEwNDI3QzkxNzQ0RjUKKzoxMDRGMzAwMEJGNTRDQTBDOTYzMjlCM0E2MkYwQTdBREQ0REZENUNGRUUKKzoxMDRGNDAwMDlCRUFERDFDRDA0QkM3NDc5RkI2QzIzQUZGNkNCMjFGMkQKKzoxMDRGNTAwMEZGMkM5MUE2RkU3NEJDM0ZBQjgyN0ZCOTkyQzg1RjM0MzAKKzoxMDRGNjAwMDhFMUY1QTY2MjE4QTVFMUZEQUJBOEZDMzdDQzhBRjUzODAKKzoxMDRGNzAwMDA4RTRBRjU5NUU0RDUxNDE5RTJDREU5QTEyODE3RENERTEKKzoxMDRGODAwMDQzRkIyRjNDMDU3MDNCRjdBNDhERUY3M0IyM0NEQjZBMEIKKzoxMDRGOTAwMEJFRUY3NzdBRkY4NUFERkY0OURCNEZDM0NCRjRGQkQ1N0UKKzoxMDRGQTAwMDVCNjk3RkIwREI3NzNCMzE1RkYzQUZDRkE3OEUyMjU0RDUKKzoxMDRGQjAwMDRFNTdGRkZBODFBOTIwNUZBQUMxQzdBMkZEQUI3RkQ2RDkKKzoxMDRGQzAwMDNGRDI0MEM3M0JENThGRDU0RkVEMTkxNDAxQkMyQzdDODcKKzoxMDRGRDAwMEUxNTc4QjQwOUYyQzc4Q0U0OTgwMjQwRkVERkZFMDg3NkUKKzoxMDRGRTAwMDUwM0ZGNzZCMzdFNjdCOURGQkY1RTlFRjAyMUY1MDdCRTcKKzoxMDRGRjAwMDVCRDFFQkY1RjlGQUYzREU3NERDMDU1MDY3RURDMjQ1RTEKKzoxMDUwMDAwMDJFRUJDMDhGNTkwMDI1QTVGNzA1MkZBN0UyRjkwNzVEMDQKKzoxMDUwMTAwMDNGN0M2RkIxQURGQjdFMTY4ODUyMDc4OEU4MTM0NTA3QzkKKzoxMDUwMjAwMDAwMUYyRUQ4NjVGQ0RFNUZFRENDOUU1QTJDNzc1N0IxNjEKKzoxMDUwMzAwMEZFRTEwMThDNUYzQkYxQkRBRjM1M0FFNUVERTZGN0I1M0EKKzoxMDUwNDAwMEZFRkY2MTJGMzA4REMzREU1RjY0MjNCNTg5RThERjk2RjQKKzoxMDUwNTAwMEMyQzY1REIwRUI5QjYxQzZGMTE4QkRGNkZFMEU3QkZFQ0QKKzoxMDUwNjAwMDIzODFFNUU3OTNCRDI5Qjg0RkIwNTA4RTBFNEQyRkM2NzIKKzoxMDUwNzAwMDc4QzczQ0UwREI4NTlFRThEMDM0RkFCRDVGNzI3OUI5MzEKKzoxMDUwODAwMEQwNDFFQkY0RjkwMDNFMEZFODBGNzU2MkVGN0EwRUYwQjUKKzoxMDUwOTAwMDVCRjM1MjBBMDE3QUFGRjlCNTFCRTNDOTM1MkY1RTM4Q0QKKzoxMDUwQTAwMEY1Mzg3RDdFNjZCRjEzRTM3QTM1QkY1RThBRjhBRUIxMTAKKzoxMDUwQjAwMDQ1N0YwOEYxQkRFRUJEMzZCMjhERjYzRkIzRjdCN0I5MDcKKzoxMDUwQzAwMDYwOEY5Q0IxNDY3M0QzRkI4ODBGRDU3NEQ4NzgzMkI4MDMKKzoxMDUwRDAwMDcxMURENDJGMjhBQUE1RjM1MTM3QjBCQzlDM0FDMkVFNUIKKzoxMDUwRTAwMDFEQTg4M0EwMEVEMEYxODcyOUVDMUMzMURGOTdCQTg3NjkKKzoxMDUwRjAwMEM3QTNCRTk4QTNBNEUyRkNBRkJEODkzREU3RjE4NjdCQzAKKzoxMDUxMDAwMDZFNTZGQUE3RTlFNjAxNzk3M0U0MkFFQTk3QzhCNUMzQUYKKzoxMDUxMTAwMDQwQ0U1QTYyMzcxMTA1RjZGRjYyODNCMUQ0RkE1OUUwRTYKKzoxMDUxMjAwMEZFODY2MkM4REY2MkZCN0VENjRDM0ZBOUE2RTVEMjc0M0MKKzoxMDUxMzAwMDEyQzJGMzk3QUUxQjdCRjhFQzc3MTRDNUY3NkM1NkZBRTYKKzoxMDUxNDAwMEMzNzhGRTE0MjY1RjZBMUM4MUYxMjk5ODBGNjlCQzc3MjkKKzoxMDUxNTAwMDQxRERDRkQ2NzU4MURGQTc2MDlFRUYwNUFCNkEwMzc5OEQKKzoxMDUxNjAwMDFFREZBRjYzNzk4Mzc1OTJGMjAxQzQ3REM5MTEyRTk3NUEKKzoxMDUxNzAwMDdBQUQ5RkYxRDkxN0RFNzRFNDMzNkQxRDJERjU1RTk0ODEKKzoxMDUxODAwMDI3QUJFQjdENThBRUFBMkYyMjBBRTYyOUZCQjE2RUUxRDAKKzoxMDUxOTAwMEYwQjAxNUFCMDRFRTk5MDAxRTg0M0Y5QjJCMTg4MEZCRUEKKzoxMDUxQTAwMDJDNjA0Qzg4Qjc1QjVDMjFBNDJGOUJBRjE2NjMwNTc2RkYKKzoxMDUxQjAwMDdFRkY4RUM1QTU5MjZBMTdDNDY3MTg5QzIwNkUwQzcwN0UKKzoxMDUxQzAwMDkyNzk1RDZBOUI4MjcwQTVFRkUzRjM4OThFRDA5Qzk0RkYKKzoxMDUxRDAwMDMxOTBFRjNCQzIyMEE3RTRDQzEyNDNCRDE3REMzNEJBQjgKKzoxMDUxRTAwMEQ4RjNCRjBEM0Y4MkYwNUE1RDZGQzc3MjU1N0QxOUMyNkIKKzoxMDUxRjAwMDZENjU3RDAwRUJGRjFGRTBEN0NBRTA3NzBENTE3NEZDQjEKKzoxMDUyMDAwMDIzNjc1NjE4RUE0OUUxQjc5OUMyMkYzM0NFNTc2NjM4NUIKKzoxMDUyMTAwMEQ0RjFGQzFDOEQ5RjkyRjFFRjIzRjUwNDM3NUYzNkQ2NTUKKzoxMDUyMjAwMEI3NjFBOTNENEY0RkEyRDdDRkE2MzA3QkE0OEU4NDk2RkQKKzoxMDUyMzAwMEUzM0VBODk3QzU2MTQ4QTY0QTcyNzRGMTI3RTI1M0YxOEMKKzoxMDUyNDAwMDFDMDg5RTM3ODVGNjlDOUIzMDdFQTlFMUQ3RTI5NTRFREYKKzoxMDUyNTAwMDE5RTU5RkYyMDFBQzY3RTkxQjU2MTFFNDk1QTU2RTNCNzkKKzoxMDUyNjAwMEY5Mjg0M0M3Qzc1MzgyMjkwQUMyRDk4RjcxRTAwNkFFMTUKKzoxMDUyNzAwMDVGNTdGNkUwRDNDODFGMkRGNTBBOTY2QjM5OUZBQ0U3NTAKKzoxMDUyODAwMDdDQjIwMUYwMEVGMTNEQkY4ODM4NkQ5RDQ0NTA3RjNFRTkKKzoxMDUyOTAwMDRDRUJDQ0RGOEYxMjdEM0MzQ0NEREYxMUI1NTJGQ0EzMzMKKzoxMDUyQTAwMDRDNTJCMDY0Rjc3MDFDQjM0NTg2RDBGNzlDQzUyNDAwRkYKKzoxMDUyQjAwMEY0OTI3NkVDQzcxMTVDMkJFOUMwRjNENjY5REEzRDMwODUKKzoxMDUyQzAwMEFGMTRBNENEQzRGRDFGNjI2NTdBOEE1ODU4MTlCNjgyRkUKKzoxMDUyRDAwMDFGNjU4NjZGODNGRjIwREUyRjkxNkMzRUU1QzdFNzBCQ0QKKzoxMDUyRTAwMEYwQkQwQjMzRDk5RTU5RTY5RDFEQzdFMDNFMDg1N0FCNzQKKzoxMDUyRjAwMDEzRkRDQTJDN0Y2RDVFMkVDQTU3MUJEMkFCQ0IxRjEyN0IKKzoxMDUzMDAwMEFBNzU3OENDNEE2MkZGMkQ3MzRDRkUyM0QwRTM4NzkwQjgKKzoxMDUzMTAwMDk3NDhGMUJCQjE2RDcwMEFDMEI5QzVEQUUxMDM3OUQ4MUQKKzoxMDUzMjAwMDkyQzZGNDhEMzI4MzQyNDE3N0JGRDg2QjVDNEU3QTRBODUKKzoxMDUzMzAwMDhENzI0MDkzQ0JERTZCNEIwQ0Y0QUNDOURERjQwOTQ2QTcKKzoxMDUzNDAwMEJBRDdFNEVFQ0Y3QUU0NkVGMDJDQzhERDhDRDgxNkU0NDAKKzoxMDUzNTAwMDRCMzMxRjM0NTg2NTU1QjgxMkVGQTM2MUYxQTcxMzAyMDAKKzoxMDUzNjAwMERCNTdFRjJEMEY3MERGRkQ4QkFFRkM2RDcwMUU1QkUzMjYKKzoxMDUzNzAwMDFGRjNGQUE1RTZDOUY4OUQxRTdCRDA5QTM4MUY2MDIwNUUKKzoxMDUzODAwMEJGOTdBMTk5RDIxQkExNzRENDRBRTkwQzEwQjE4RUQyNTcKKzoxMDUzOTAwMDE5OTQ2MTRBNjc4QzlGQ0FCMEQ0RTg3ODA1NjEzMjQ0OTkKKzoxMDUzQTAwMEREMjdCMjc5RjI3OEFEQjY3RkIyQzI1RTEyMDAzQ0FFQjQKKzoxMDUzQjAwMEVDNjAzQzM0QzhDMUY3NDkzMzQ1Q0MwQjkwQTgzRkU5QjkKKzoxMDUzQzAwMEEyOEZBNDAzRTNFQzYwNUY0QTU2QjY4RkRGRUQxNjNCNzUKKzoxMDUzRDAwMDYwMUY3RkE1NkJCQTFERjI0QTg1QjQ1MkE0OUZBRkRDNTMKKzoxMDUzRTAwMDk1Nzk3REVERUJDMEZENkI0MDdGNUU5NzlGOUMyQzhFODkKKzoxMDUzRjAwMDlGOUJCNDc4NEIwOEY4QTU3QjVDOUQ5OERGRTQ3Mjg4OEUKKzoxMDU0MDAwMDg2RkRBNzFBNDdBOEMwQTFBQjhGODRBRjczQkNDM0IwRjkKKzoxMDU0MTAwMDdCOTI5Q0JGMUNDNUQ3NDM3MjU0NTJBODkzMTMzREY3OEYKKzoxMDU0MjAwMDI1MjkyQTI5RDJDOThCMTU0M0FFQzdGQjk4N0FDQjg5ODcKKzoxMDU0MzAwMDI0RjI3MEU3RkY4QzNDNkNDODhCMjA1RUFENjZGOTkzNUMKKzoxMDU0NDAwMDE5QzAzQkEwNjhBOUMyRDUwQUQ0M0E1RkY5ODNEMTQ4RjQKKzoxMDU0NTAwMEE3RDczOUMwMEY3MTZERUJCMTgzQkU1N0QwN0I5RTY2NjUKKzoxMDU0NjAwMEY5MTdENzZCMEFDNkMxQTg1RTdCQjQwQ0U0Njk1MkJEQkMKKzoxMDU0NzAwMDU2N0IxN0QyNzFFQjQwMDVFOEY4QzBCQTA3OUU4NEZBNTQKKzoxMDU0ODAwMDQ3RUI2Qzc4RUY0QjU1NkMzNTUxRTg3Q0FCNjNFM0IwODAKKzoxMDU0OTAwMDlDRDdGNjEwOTY5NTZERUQ5NDg5MDg1OUJFQjY3QUREQzUKKzoxMDU0QTAwMDRDRThCRkQ5ODJGMTlGNTM5MUFCQ0VENUQxRkFBOTU2MjIKKzoxMDU0QjAwMDFCREFFRkE3QjZEQzlCMDdGNkRGQTk1NkE3NjIwMTdCRDQKKzoxMDU0QzAwMDdGQ0IxODYzN0IzM0JCRkZFNTU0OUIzNTYyNjFGNDdCNzQKKzoxMDU0RDAwMEQxMDJGQjExODRDQjc3ODgwMkU5RTY0QjRBMTVCNEUzOEQKKzoxMDU0RTAwMEJGMzBFREI3NTRBRUI3MDUwNDRGNzJGODU3QjYyNUI2QzYKKzoxMDU0RjAwMDI3RjFGQzM2RTQ1QzkzREE2MTIwNUZDQjhGRkYzODBGMzUKKzoxMDU1MDAwMEU4NDM5MzMzNEJEM0E5REMwM0Y4MURCNzkxNDRGQjAyNjYKKzoxMDU1MTAwMDEzMUQxMzE3MDM5RTI2M0EwMjRCMTlCRTJFRUZERUFDNjUKKzoxMDU1MjAwMDhGNDQ2QTc3MjM5RTQyOUU2OTg2QjgyRjhCQUI3RUM0RDgKKzoxMDU1MzAwMEVENzI2MjRGRDJFRUUxRUY3QjEzQjdEN0I0RkVFNUY1MjMKKzoxMDU1NDAwMDA3Njk2RDU1QjEzMUFFNkQ4MTc4QjUwMEZFRjgzNDk2QkUKKzoxMDU1NTAwMEVGQTBFRDAzRjVBNjZCNjY0RkI3REE1MEFFQ0NFMUYxRTQKKzoxMDU1NjAwMDI4OERDRUUzNzQxNkYyRjA3QzMxMDMxRENFOEY2RDQwOTIKKzoxMDU1NzAwMEI5MjdCNDhDN0M3NDFDODVERjk3OTRGRTgwM0U4NDk2OUEKKzoxMDU1ODAwMEYxRkQwMUJFQ0JENzdDNjdGRDlENzRGQ0JGQkY2OUMxMzcKKzoxMDU1OTAwMEU3RjM2MjI5RDhGRkIzMDdGRDhGREUwOUZFQzJCRjVCQzgKKzoxMDU1QTAwMDA5Qzg5RkJGMUY5OTg4RkJDODlGNTk4RDcxOEM3MjI3QUUKKzoxMDU1QjAwMDkzOTdBRjcyRkVBRjhBQjUxOEVDRjNBQUU2RDkzMkM0NUUKKzoxMDU1QzAwMDQxQUI2MkVCRjA3OTE1NkMyMjYxMUVGRDFEQUZDMTA2ODcKKzoxMDU1RDAwMDcwMTUyQ0ZEMUE3OEZGRjY4OTJCNTA5Rjk2NjAxQ0FEMzQKKzoxMDU1RTAwMDdBQUQyRDYxOUVGRkFCMEVDNTIwQUZBQUJCNUE3MTVDOTAKKzoxMDU1RjAwMDQyRURCM0NDMkMzRTlFNEVFRTU0QzczMjkwM0Y4ODU3QkUKKzoxMDU2MDAwMDI1OTBGNzVEQzVFNTRGQ0ZGQ0I2NTgwREYyRTdCMzk0OTIKKzoxMDU2MTAwMEM0NzE5QUI3MUM2QzlENTVCMUVGMjBERkY1NUVERjc3NDIKKzoxMDU2MjAwMEYxNzk5NUY2REQyRUM2QTdGMUY1M0MzQTJFRDE3QUUyNTYKKzoxMDU2MzAwMEVCQjgxNkZCN0Y5Njk2RjhGQkU3Mzk3QzRGRDVDRjIzNjYKKzoxMDU2NDAwMDAxMkFCRjJBNkRCNDlGMEJCRTdGNkY1MzE5RjhGOTVCMTcKKzoxMDU2NTAwMEQyRDIwNUREQkFBQURCMTY5MDgwNkU1REQ1NUI2NkM5MzUKKzoxMDU2NjAwMEZBRkIyOUUzNzhCOENGODA4N0YzNkIxNjIzMUU5NjM5QUYKKzoxMDU2NzAwMDgyMjc0MDBGNTRCNjhDMUYxNTQyM0Y3RjM1QzJGOTIzNTUKKzoxMDU2ODAwMEFCM0YxN0U0RjFFOUI2N0IzRDg5RUU5MTNDNkZDNjRGMjUKKzoxMDU2OTAwMDFCQzcwRkI1QkI0Qjc1RjhEMUYwNjI3RUZGRDQ5RkFBMzQKKzoxMDU2QTAwMEJGN0ExMEU0RDQ2NkI3NDFBRTk4Q0I1RTc4Q0I0RjBDOEUKKzoxMDU2QjAwMEI3NTQ0RTlGQTdBOEZFMEUyMURDOTQxNzhGMDE1REFGNTMKKzoxMDU2QzAwMDc1NjI3RTVDNzJGODVENDE0MjdEQzEyRjg5RkQ0Q0VEQjMKKzoxMDU2RDAwMDJDQkI3MzBDN0M5NzIwMUNBQURCMTgxRDVDMEE2RUYxOTYKKzoxMDU2RTAwMEVGNzIzQTI4NEZCQzlFRjE0RThEMEVFQTg4NEExOUY2QTkKKzoxMDU2RjAwMEE0N0MyOTNBNzg4MEE4RjYzRUQ2RDE0MzA3NkRBRjk1QjEKKzoxMDU3MDAwMDE3QzZFOTYwQkMzMzNDNzEwNUVERjcyOUQ4M0ZDMzdBNzEKKzoxMDU3MTAwMEUzRkZBNEFDN0FBRTAxN0I2NzhEMDVGN0JENEUzQUQ0QUEKKzoxMDU3MjAwMEFDM0I1ODdEMzRDOEU3OTM5RUYwRDQ2QjRBRTNGNUY5NUYKKzoxMDU3MzAwMDNCODc3OEY0RjczQTlFNkVBNjcwNDgwMEJGRjFDRTI0RkUKKzoxMDU3NDAwMEY0NTNBODkyRTJCMUZGRUZFOEU3QTMyNEU3NjAyNjNBMUEKKzoxMDU3NTAwMENBQ0IwMTlGMjQ5QzM4OUVBQzk1OUFGQ0I2QTRCQTdBMTkKKzoxMDU3NjAwMEZDNUVEMEEzMjc1RDA1NUY0NTY4RUIzQTQ3RTg2NjI3RjYKKzoxMDU3NzAwMDZENkY0Q0JCMUZGNUZDQzk5MzAyRUFFMUU1N0Y1QTNBMTUKKzoxMDU3ODAwMDBDRTQ3MDJGRkJCNzNFRjZEOEM3NDMzMDZFRjlGOEM3NkMKKzoxMDU3OTAwMDU2QjRBNzcwNUM0MkVEMUZEMDAzOTg2RjhFN0VDMDQwNTgKKzoxMDU3QTAwMDhDQjMyNERCQ0ZCRDE3MkVGRjFEMTNERkQ3RDVGNjZGQ0IKKzoxMDU3QjAwMDU3RDY3NzNFMDRFMzEzQkI0QUJDREE3OTdEMDU0QTY2QzcKKzoxMDU3QzAwMDhGRkQwN0NDNDMxNzlGOTdBRDIxQUYxRkZDNUQ4MTA0NzAKKzoxMDU3RDAwMDgxRUVBRDUyQTgxOUYyMENBREJFQ0NEMUFBMEVDRTRCQzMKKzoxMDU3RTAwMDlDMkMyRjI3RTVGMEUxRTY3Q0ZBN0VDQURDREY3OTIxRUMKKzoxMDU3RjAwMENFNjdBM0RGODFEMjlFMjM3REExOEY5NzVCMzM1OURFRDUKKzoxMDU4MDAwMDE3MjlENDNEMkY4MDczQzhCNDZFODgzQkQwRjlGNkUxRDgKKzoxMDU4MTAwMDM3RkY1MkU4Qjk2NzBERUYzNzlFQTk1REY0MDVBMEEzRTUKKzoxMDU4MjAwMDc0RjM3QjJEN0Y0NTZBNjRFRDY5NUE3MzIzNkJFNzcxQ0UKKzoxMDU4MzAwMEQ0QzU5NTJDNEU3QTY4NTYyQUMyNEY1QkQ3Q0M1NzU2QTIKKzoxMDU4NDAwMEUxN0Q2QjMzNUZDOUM2RjM0QzMzNURDMzNFMDE3OEZFMjcKKzoxMDU4NTAwMDEyMTI2QjgwRUVEMzk4N0UzNkQzQzU0MzVDRkVGQ0EwNUIKKzoxMDU4NjAwMDVENTRBRDc0QkNDM0Q2RUU4MzRFRTA4QjFGMDlFODU3ODAKKzoxMDU4NzAwMERGRjFERTYxMkI5MEZDMUY4RTlFQjQ0MjVFRDQ1RDkwMDIKKzoxMDU4ODAwMDU4NDRENzMzOEIyODMyMzNBMjIzRjhGRTZDRDJFMTY2MUEKKzoxMDU4OTAwMEY1OEU3RTcwRkY2OTdDM0NFQTMyQzM3ODRCRDhGRUYzMEMKKzoxMDU4QTAwMDFERUYxRDlEMDg2QTk0OEVCNzEyQ0FCQkRFMjQzMjhDOTAKKzoxMDU4QjAwMDNGNkI5RkQyQzQ4RTQzRjFGMTVFQTFFMzg5RjFGMTdBOEYKKzoxMDU4QzAwMEUwMjdEOTExMUU3MUY4RDgxMTVFQkZFRjM5NUZBMkEyOEYKKzoxMDU4RDAwMDdEQTE4MzJGREEyQjFBN0MxQjAwNkUxNDdFMzM1MzY3NTUKKzoxMDU4RTAwMERDNDg0NjI1RTc5Nzk5QUVBMTlGOTA1MUYxRjk5OEUxRTAKKzoxMDU4RjAwMEZCNzc2OEEyRkNGNjg0MzNCMDE3RjhBRkQxMTk3ODFFOTUKKzoxMDU5MDAwMEY4NjdBMUJEM0I1NzJBQzA3MzYwMkZDMkYzNDU5NjUwN0MKKzoxMDU5MTAwMDVFMTZBNUFCQjM4MzQyQzNGQUMxQkQxRTlEODlGNzc5NUMKKzoxMDU5MjAwMENEN0M3QTFDRjhFNTRBMjgyOTVGQzAzQ0Y4Nzk5NTFGQTAKKzoxMDU5MzAwMEYyNzUxRUZBRjE2OTM3OUU0N0Q5RkY0MTJFOTQzNTk2Q0MKKzoxMDU5NDAwMEFFQjVCNzAzQkZGRDlCMDVFRENGMkZGNjBERUIzM0FGMjMKKzoxMDU5NTAwMEVFMzg4RkJCQkNFNTE0Rjk3OTZCQjZDRUJCQjgzRDc3OUEKKzoxMDU5NjAwMEQ3M0U2NzA0RUU0MUJDQUJDRUQyRTM1RjAxNURERjU1QUQKKzoxMDU5NzAwMEM3RjI0Rjg4RDQzOUVBNTY4MzNERDlDOEY3NDM3QThGQTYKKzoxMDU5ODAwMDAzRkU4Mjc5MUM2RDlEMDc3MzA3NUMwMUZFRTU5MzYzM0UKKzoxMDU5OTAwMDY0RjQyMzBFQkNGOUM1RUZBQjY5REQzMUM4OEU3RUMyNUQKKzoxMDU5QTAwMERBMzQ0RUJGRTVDQzZGN0QzMjJERTAxQzA5RjFBRjM1MDYKKzoxMDU5QjAwMEU5N0U5NUFFNzNDRDZCQTQ0M0E0NzAzQTM4RkNGRTQ4RTMKKzoxMDU5QzAwMDQ1MjlEQzBCMkQ2MkVDNkM3RDZDN0JCODAyREUyQjY2MEUKKzoxMDU5RDAwMEY3Q0U3OEI5NURCQUJFRjM2NDFCRDBFM0U5NjMzNkRDNzkKKzoxMDU5RTAwMDc3RjhDQ0NEQ0UxMUFFQjEwNjczQzE4RUZGQTQ1RDRFNUIKKzoxMDU5RjAwMDc4RkZEOTlGREQxMkNFQjc1REU4MTI4MENFNjc5M0IwRjUKKzoxMDVBMDAwMDFERTRDNUJFQ0VFOUZENjEzRTFFM0ZGMTAyRjk5RkRFRjkKKzoxMDVBMTAwMDYyMTFEOUZENjg1QUJDMjUyQUIxNzhCRjJBQjE3QTgwQjMKKzoxMDVBMjAwMDk3REUxNEZEN0Q2M0FCMjc0REMwM0M4RjM5QUQ2RjYzQUUKKzoxMDVBMzAwMDMyOUVBNzM0RjEzRDNGQTkyRTM2NUY3NzY3RkE2NEJDRUEKKzoxMDVBNDAwMDc3NzM4Mjg4NzlEODZFN0ZCNzAwRUZFNTc1NTZDOEY4MEUKKzoxMDVBNTAwMDdFNThFOEYzRkRCQzY1NUVDQzQzODVGNzQxQ0VFNzVEM0IKKzoxMDVBNjAwMEU2RkIzNjE3Q0JEM0RBQzBGREVDNzZBQkJGNjkwMjFEN0YKKzoxMDVBNzAwMEE3N0Q2RDlBMDBGOEQwRkEyOTJFMjY1NzRFNEZEMEUyMTYKKzoxMDVBODAwMDQ4NjE4QzIzRTUxNjdBNTNFMDFFOEJEQzAwMzIzNzcxQjcKKzoxMDVBOTAwMDk3ODZGMUJFRUY2REQwOEZDNTU5MTEwRUVEQzM1RjhDQTcKKzoxMDVBQTAwMEMyM0VGNjFBODhBRjAwOUVBRDhDOUVENkFDMTUzMEFFQzUKKzoxMDVBQjAwMDRBRTEzNzAwRjRDNDI3MEZEQjZFODI3NUU0MzUwQjVFRDQKKzoxMDVBQzAwMEYwREQ2OTk5NzBERTMzREM3NjQ2RTdBRDhGQTI1RjA4QzIKKzoxMDVBRDAwMDYxNUExODM3NzdDQkJCMzgyRjc3OTJGNUFFNzBCMzdCMEUKKzoxMDVBRTAwMEYyM0ZCOTA0N0Q3Q0U5NjRGNzI2RTZENjc1RjJGQkYxNTYKKzoxMDVBRjAwMEEyNzgwRjVFMThFMDA0RjU0MDI5QkJERjQ0MEEyOEZBQkIKKzoxMDVCMDAwMEZDOTgzOEZGMkNFNzc0NDgwMkIwQ0Y1NjU5MjY0NzIwM0UKKzoxMDVCMTAwMDhFMjAzNkI3Q0Y4MDc1Q0YwRURCQzgwRDc0N0RBRDQyQjkKKzoxMDVCMjAwMDY3MDBGODQ1MUQyM0YyRkI5NDAyQzcwMTRFRUIzNkY0RTMKKzoxMDVCMzAwMEM3M0NCQzU1NjIyMDE3RjRCMEZBN0Y2NERDQTczQjE4NjEKKzoxMDVCNDAwMEY4NjIzM0RDMUZCRkI1NEM0NkJFMzgxODYwRTcwRDlGQzYKKzoxMDVCNTAwMDVDNTZEMDBFRkI5NEVFQkE4QUI2RDk3NEJDODg1NzQ2MTAKKzoxMDVCNjAwMEM5RDI1MDRBREUxODA2RkI5NENCNDRBRjQwRkI4NzgzNzIKKzoxMDVCNzAwMDVBREVCNkQ3MDE3NDMxREFGMkU1RTQyMkQ4QzdDQjE2ODMKKzoxMDVCODAwMDMxQTY3NDVBNjBGNzM2QUM1QzU2RTEwNUJDQUVGNDY2REIKKzoxMDVCOTAwMDBBN0FGRkU1NzY0RTA3QzdEMzgzQjdCQjI4N0M3QzBGMTQKKzoxMDVCQTAwMDZFRjQ1MjMzOEVGMjY3QzYxNTEwNDc1NDlCNjU0NTNCMjEKKzoxMDVCQjAwMEI3MEJGNzNENjQ3MEJDNjQ3NDhBRDEyQTBGRDY1REYzQ0QKKzoxMDVCQzAwMEQyRTEzRTVEMTYyRjdERThDNjEwOEI3M0MyREVFODU4MjkKKzoxMDVCRDAwMDhDNzNGMjNGMUZFMjM1OTNEN0Q2OEM3MDYwNjVEMzhBMDEKKzoxMDVCRTAwMDJBRUMwRkUzNjREMTcxMzI0QUM1RTg1ODNBRUVCNkI0RjQKKzoxMDVCRjAwMEMwNTY4Q0RCNERCNDIzOUM4OEQ0RDUwNjcwOEE0QzFDQ0YKKzoxMDVDMDAwMEUwODc3QjZEMzc4RTFCRkEzNjlDNUZDOTM4RDIzRDFEMEQKKzoxMDVDMTAwMEY0Njg2NDkwRTMwRkVEMjBBNzU2Q0EwQUYwNzlDNkIyODMKKzoxMDVDMjAwMDUzNzdDMkYzMzRGRjIzRjc0Mjk5RDFGOEZFMDMyMEE3M0MKKzoxMDVDMzAwMEQzQkFGRTU2OEZDRjI3Qzk4NkY4NjJDNjg3OUY3RDAzRTkKKzoxMDVDNDAwMEVEMTk0MUQ5MTBBN0ZDM0EzREY4MTM4MENCRDZFMjcwOEMKKzoxMDVDNTAwMDE4RUZDNTA0OEM2NkM1RDdCMTY3NzlFNzI0QjhFRkY4QUIKKzoxMDVDNjAwMEY0MzREMUJGOERCN0UzQkEzNjc5MjM2QjE4REM0QTQxREYKKzoxMDVDNzAwMDJGNjg3MDVCMjUyQTFENTE1OEQ3NTQzQkQyNDcyMUU5MjQKKzoxMDVDODAwMDQ0Nzk5NTBEQkJEOTgzRTM3OEM5Rjg3MEY1MTJDOEQ3NkMKKzoxMDVDOTAwMDMwQ0Y2NzlENEJFOEI5N0YwM0VFMDkwNDVDNDE3RThDRjEKKzoxMDVDQTAwMDlDQ0RDRTE1RUUyREU5RjQ4MTNEQkYzNjJENzE3Q0YyRjEKKzoxMDVDQjAwMDJEMzc3QkRGMjZCMjM4QUJCOUZEMEQzN0EzMDcxMDg5MkUKKzoxMDVDQzAwMDZEMjUyQzVGN0UyNDk0MkVBMkE2NDI5OTYzMEY0MEZFODAKKzoxMDVDRDAwMEYzNUU1MUY5MjNEMkY5NDY4QjAyRjg4MUZFNTY4QUJGNTIKKzoxMDVDRTAwMDAzNkY3QzhFRjFDNTAzRTE3N0IxN0NDNjVEQTRFNURENzEKKzoxMDVDRjAwMDQ3QjNFOEZCRUI0QUQ5N0RDN0VCQkM4QzQ2QUE5Qjk5MUUKKzoxMDVEMDAwMEJDQThGNjc1RDk2MURGQTRCQTk4NzhCNzcxN0E1MzM1MTMKKzoxMDVEMTAwMDM4NDNCQzhDRUJBQkNBNUIxOTVDMzM4QjA5RUVGQjQyOUUKKzoxMDVEMjAwMDJDMDhFRTlCQ0E4MjdFMTQ3RTk5Q0RDQjk3MjAxRTQ5MEIKKzoxMDVEMzAwMEE3M0E5OEY2NUIwN0UzMDI3RTFBNDVDMkM2RURCMjIzODYKKzoxMDVENDAwMEZGODYyREI4RUY0OUY5RkQyRDg4NkI1NUI2RjZDNzdENTYKKzoxMDVENTAwMDdGMzgzNjBDRTNBNUYzRUZBNkYzRjFEQUU5MzgxMDNGMEMKKzoxMDVENjAwMDNDREQ2Q0MxNzMwMTkwN0UwMzc1NjUxOUE1NjVBNENGRjgKKzoxMDVENzAwMEVFRjIyMjNBQUU1MkVBRjVBRUQxRTg0MDkzNjM5NDM1QTIKKzoxMDVEODAwMEU2NTA3RDAxNzA5QkEzQUE0QjgwRkU0RURBQkQ2RkMwMkEKKzoxMDVEOTAwMDNDOUM5QjZDMEFBQzdGQ0VBNjk3OTY4MkZERTJGNDc1ODQKKzoxMDVEQTAwMDM1ODM3Q0E4MkU2M0YzNEQ2RkE1Q0ZEMUNFNTFERTgyMTMKKzoxMDVEQjAwMEZFRDVBRDM2ODU3RDhGQzNBRjk0RDMxOTg3QzM1QzNFQzYKKzoxMDVEQzAwMEVGQjk1QkQ4QkMxRDgzMjI2MUEwQ0ZFQTY1MTRBRUQwQzkKKzoxMDVERDAwMDE2NjI3NDBGMjFEMThCMjJGMkQ1MTE1OEJGNUJDREMyNTAKKzoxMDVERTAwMDcxRkJDRDMwRjE4NTg5RkVCNDc1NTVGMjc1NTUyRTYzODIKKzoxMDVERjAwMEVCMjI5QzlGRThCNEEyMzA2RTY1Mjk1QkU3MUNDMkRFRjMKKzoxMDVFMDAwMDE3RTEzOTFEN0YyRTVGNEZBNUZBMjI5NjczOUI2RDg2OTEKKzoxMDVFMTAwMEYxQjcxNkVERTg4NEY5RTQxN0NCMEE5RTEzMjFFQ0JFMjYKKzoxMDVFMjAwMEMzNUNCRUFFREM0NkY2QkREQ0UyMTcxMTVFQTQ0RTM3QTUKKzoxMDVFMzAwMDVGOENBQkVBRUE5NEFGNEVGRjk2MzIxNjVDMEEwMDA3MUQKKzoxMDVFNDAwMEQ4RThCODI3N0YyQ0UzN0U0RUUxMjZFM0JBNEVBRjFFOUEKKzoxMDVFNTAwMEI2QkQ5NUI2N0ZGNEIwOENGQkRFN0I0NUZGRjEzQ0Y0MUMKKzoxMDVFNjAwMDQ3NjU4NUM5MUZGRkJCNTM0MDRFQ0Y2REY0ODMxQ0RGRDAKKzoxMDVFNzAwMDUzQ0VFMDdGRkE2NjEyMDE3QTE4NzIyNDk4MEVGMDFFNTMKKzoxMDVFODAwMDcyMjRDNENCNUFEQzRGQTcwMDExN0FFNDFFOUQxRjc1MDMKKzoxMDVFOTAwMDk5OUEwNTkwOTdCMUMxQ0ZDRTAzMzk1MEM2RUUyMzFGMTIKKzoxMDVFQTAwMEE0OUYzNzlENUY0NjczNTYwNUU0NDM2NTk2QTU1N0M4ODIKKzoxMDVFQjAwMDc4QjVBQkE5RkRDODYzRDM0NTY4M0ZGQ0Q4QkRGMDlENUMKKzoxMDVFQzAwMDZDQTI1QjBGNkQ5NzNEODNEOTc5OTZDM0I0MTVGQUQ1NTMKKzoxMDVFRDAwMDlEN0ExMEYwRDFDQUNGQjkwRTgxOTlBNTYzNzkxOENBRkQKKzoxMDVFRTAwMDBDQ0FERjJERTkzMDRGODk0QzI4ODlDQjgzOUQwRjhGNTkKKzoxMDVFRjAwMDFEMEQ3MjA1NTM5RTRBQjA4QzkyOTJERTcyNDNENzdGN0QKKzoxMDVGMDAwMDM4RUZBRjBBMDlGQUI5M0Q4QUMxM0ZERkY5RjBGNUMzQUUKKzoxMDVGMTAwMEMxOEY1RjA3NzY2MjJBRENDN0U2RkQxMkYyNzQ1NEJGQjgKKzoxMDVGMjAwMDg4NzA1RjY3OEREQThCNjk3RDE1QjUxQkMxN0U1OTVGRkYKKzoxMDVGMzAwMEY0QkUwODdDQjc2RTFGRjEwMzdENjQwNEZGQ0JBNkM3RDcKKzoxMDVGNDAwMEUzMEQ2RUY2RkIzQzkyNEM1QTgwRkYwRjBFM0YzNTA5NzUKKzoxMDVGNTAwMEYwMTQzOTQwRUQ0RURBQkZFMjM3QUVDNzlDNjAwRkZENUEKKzoxMDVGNjAwMDlFRTVDMUI0RkZCNjE2RjVGN0ZEQjk3MkMyRkI3OEM5NUMKKzoxMDVGNzAwMDI1RUM0NDczRkZGNDIxRDMzMTlFOTdCNzY5MDNERUVGMUMKKzoxMDVGODAwMDU5M0Q0OUYyREY0MDdCNjc2RTJBMkYwNzNCNDYwOTUyOTUKKzoxMDVGOTAwMEVBRUE0RkU3QkQ2NUY0NzI2MDQyNjUwQURCMkY1MzI2REIKKzoxMDVGQTAwMEIxRTdDQTA0NTZCNkQ0MUY3OTA4RkNGNkYwMkUyOUE1MkQKKzoxMDVGQjAwMDkwQ0U3N0M0NkE3NkFGNTg0QkYxMTdGNjEwQjU0QjRCQkQKKzoxMDVGQzAwMENCOUZCN0RGNEM5RjdGNUM0QUI1MjA3REZFRjFCNTVGNkMKKzoxMDVGRDAwMEE0QzBGRUNFOTNBNTE1MTkwMENGN0RDRDQ2QkI4RUMwQzMKKzoxMDVGRTAwMDY1NTdENDFGMUE2OTBCMDdEQzc0NUVBREVGMTE4NEE3RTcKKzoxMDVGRjAwMEM1MTY2REFCQTQ3NUNCNEIyRUIwNzA3QUY5MzlBQjVCN0YKKzoxMDYwMDAwMERCNjcwMDlEQ0UyOTkyMzE2QzZGNUVFRkZCNUM5RkNDMEQKKzoxMDYwMTAwMEFFRUI5RTA0RjdFQkU3QUI4NEM1RjdDMzhGQTI1MDlFQUYKKzoxMDYwMjAwMENCNDU0NkJFREE4OTQyQzdCRDg5RjkyNzYxMjlGMDNBRDYKKzoxMDYwMzAwMEM4RTU3MDcxNDg4NjU3MzQ3OUQ2M0FBNEYyMjk5MDY3M0EKKzoxMDYwNDAwMDdGRTI3NjFEQTk5RDg3RTdDODkwRkYyRDYwMEY3NTk3QTkKKzoxMDYwNTAwMDI3RjI5QjRBNUQwRUVDN0Y3QUNCMkQxRjQwOUM3QTRFMzcKKzoxMDYwNjAwMDFEQjNGN0YzQjY3QzI5MjAzRUE4REQ5NzREQzdDRjJCOTMKKzoxMDYwNzAwMEM1QUIwNkM5OUM2NTYxRkI0OEMwNEZBMTQ4MTQwNUU2NDUKKzoxMDYwODAwMEQzNDFDMDRGMDg1M0ZEQTM4NzgzMzZFRTdGRjdGRDI1MkMKKzoxMDYwOTAwMDZFMUJGMjYxMjlEOENFQkFGNUI4Rjg3QTcyRkQ3NDNENUMKKzoxMDYwQTAwMDA5RjQ3NDA5RkZFRThGOUVGOEYyQzAzODgwRkYzMkU2RTMKKzoxMDYwQjAwMDIyRTU4NTRGMDg3NkREM0NGMkQ0Q0I5QkM3NTUzMDFFRDgKKzoxMDYwQzAwMEQ4QUY2RTJGOEVFQjJFRURDMkZCNUNDQ0YyMURDQzc5REYKKzoxMDYwRDAwMEUwREJBRENFNzNBMzk5N0Y2Rjk0QTdCREVBOUNBRUNDRjUKKzoxMDYwRTAwMENGNzM0REYyNkFBNEFERTM0NkM0RUYxRTc2RUYzNTY0N0MKKzoxMDYwRjAwMEM0NDJCQjQwNDQ4NURERkIxOUQxRUVBN0FFODU3RTIzQUIKKzoxMDYxMDAwMERDMkUyRkQwNDFFQkYwRjc0QjAwM0U2QkI5QkQzMEI3MjIKKzoxMDYxMTAwMDk4QTBCRjNBMzdBNzEzRUQ4NUQ5OEREQzVFOTBGQzRENzIKKzoxMDYxMjAwMDIwNjQ5RDVCRDJDODFBOURGRDgwQTYxMkI4RDA4RERDN0MKKzoxMDYxMzAwMDVFRDBGNDNGRDdEQkQ1QkVDRTY2RDRBQjhERUNCQzVGNzIKKzoxMDYxNDAwMDhGOURBMTMyQkQ5QUU3NjM3QUJEQkE5OTdFNDdFMUM0QkIKKzoxMDYxNTAwMDNDNTY2Rjk3MzAzREFFNkNFMkY2MDNEN0MzMTlGQ0JCREIKKzoxMDYxNjAwMDk5Q0Q0QzVGNjU4MDFERTE4MTM0MDgxNUY1MzJFRTYxRjMKKzoxMDYxNzAwMDY1QzVFRDk2N0VDNTRDNUY2NkI0RUU0NUJERDYwMTNGNjQKKzoxMDYxODAwMDJFMzMwNkU0MDZEMzk3ODNERTNFQUEwMjk4N0NGNDcxOTAKKzoxMDYxOTAwMDFCOTVEMzhGRjM3NjlGOTdEQTY3RTk3MUZCNkM5NUM4RUYKKzoxMDYxQTAwMEY3OUIwOEIzMEYzMUU3OUZDRUYzMjFFOEFGQjMxQjc3MUUKKzoxMDYxQjAwMEYwRjlFRDNEOUM3RTEzQzhENzlERTEwMjNDNTdBRUYxNEUKKzoxMDYxQzAwMDJENDYzRjY5M0RCNzk0RTVBRkU0RDZCMTdENzJCN0JGQzgKKzoxMDYxRDAwMEVBMjlGREY5QjM3OTZFNzZFRkQwM0M4REFFRUFBMjNFQTYKKzoxMDYxRTAwMDE4MTdFRjg1NDAzOTJFNjM3QzcxMzVCNTk3MzBGRUM0QTIKKzoxMDYxRjAwMEZEQUI2QjVDM0NBRUMxRTkyNzk5M0VEMUU0OTA5QjA0QkEKKzoxMDYyMDAwMDNDQzUxNEJFMUY0NzlFNDI3OUFENTI3RjA5RDZGNjcxMzgKKzoxMDYyMTAwMEI4NjFDMEREQzBFRkUxNjlBNTMwRkY3NUUzQkVDMkZDMjcKKzoxMDYyMjAwMDhGQkMyNEZFRTI5RjM1M0ZGMzVCQ0E3NUY3QTRBM0NDNzUKKzoxMDYyMzAwMDBGRUQxNDEzOUVFRkM5RjFCMEY4NDM4NzQ0OUMwMENGRDMKKzoxMDYyNDAwMDk0MzBCQjQ3MkVBNTRDNEVEODNGRDVDM0VDRUNDRjM5OEMKKzoxMDYyNTAwMERDRDY4RDdCMEFDRjY3MjZENUNGMTI1MTJEMDlGNEE5NDQKKzoxMDYyNjAwMEE2NkY1QjAxQ0ZEN0QwRkVFRTM3OUE1NEY0RDMyMzQxMEIKKzoxMDYyNzAwMDBCQ0E1Nzc2N0UzMTRDQkFEMDhGNTQ4QjY0OEMxQkI2QzgKKzoxMDYyODAwMDVBQzM3NkMwQzdGQTUyOEU1N0FGQkQxREVFQjdGOUQ2QzYKKzoxMDYyOTAwMDc4QTFGMDAwM0NBRjBFODgxMTIxMUZGMDFDRjE4RTY0MzQKKzoxMDYyQTAwMDcxMUQzQ0I3N0M5QUZBRUZGQUZEOEFFMTFFOTFDMzQ5NTEKKzoxMDYyQjAwMEMxMUZFNkNCNkI2NkY0QjU2RTlDOENGMzU4MzMzQUFCREEKKzoxMDYyQzAwMEREOTJBRjk3QkYwMjk3OUZFQzlDRDg5QTcxQUYyMzdENjgKKzoxMDYyRDAwMDVERUVGQ0FBRUE5RUM1N0IzRkI0RTdBNzM2M0Y1RDAwQjIKKzoxMDYyRTAwMDcwOEVERjdGMTFFOEYzM0M0NTU1RERERjM2RUQ0OEIwQjkKKzoxMDYyRjAwMDRGRDBEMzBFN0U5NDBCRkNDMEM4MUQ4NjdENEQ4RURGMjMKKzoxMDYzMDAwMDA5MUVEMTEwNzcwM0Y5NkE0NUU3MjIzMjAwRTI0QjdCODAKKzoxMDYzMTAwMEM2NDczQ0YwMUU1OUM2RjY2REU3RjM3RERCQ0Y3N0RDNTAKKzoxMDYzMjAwMDgyRTdDOTQ3NTJCMkIyMjZDMEZCNjdGNUM2RjNFQTlGQkYKKzoxMDYzMzAwMEVEN0M3QTAwOEI2QjQ0MEM3OUMyRjM5RkZBRjkwOEMzQTkKKzoxMDYzNDAwMEZFNzA4MDI4OTk2M0Y5MTVBQ0MwRUZBRkZCNTU5QjI1MTMKKzoxMDYzNTAwMDdFRkY4MDBDQkY1NzAwNzE3NkUwRTBDMTcwQUI2MjA3MzIKKzoxMDYzNjAwMDk2MkVFMDVGNUE3QTQ4Mzc5NjVFNTA0NzgzQzE0RkYyQzcKKzoxMDYzNzAwMDYzOTk0OTgyNTg2NjkxNUEyQzdEMjQ4Q0U1MDBEMjgxMUMKKzoxMDYzODAwMDY1MEVGOEI5ODM0MTJGNzQ2M0E5MTBBRjQ4NzQ3MkJGQ0EKKzoxMDYzOTAwMDgwRjhCMTVFNDg4MjU4NEE4MEI3OENGOEJFODRCNENCOEUKKzoxMDYzQTAwMDhFRjkxQkIwN0YwMTdDOUZFQ0RDOTlERjUzQjlDNDgzNkQKKzoxMDYzQjAwMEZDNUQ3QjI1RkIxRDIzQjY1RjMxREQxM0I4Qzc4Mzc4RjkKKzoxMDYzQzAwMDg4QTJGQzlFQ0Q0NUY5OTFFNzQ2NzRDMEY5QTM3QkQ2MUYKKzoxMDYzRDAwMEIyNzMyRjlBN0M0N0ZGODY3RUU3RDk3NEE2MEZENDhEQkYKKzoxMDYzRTAwMDAyQ0FCMTE1Q0VBOURGNDU3OEI2NUFDRkU4RjcxQjg4QTcKKzoxMDYzRjAwMERENUUwOEJGMEZBMjhEM0I5QkM3MTk2NjczM0QwOEUxQTgKKzoxMDY0MDAwMDZFNzY3RUQwOEZFNzkzNjY0M0JDNDFENzRFN0FEQUQ5NTkKKzoxMDY0MTAwMEJEMzREQTM4QTJGM0RBQTE3REVERjdFOURFQzdGQ0U4OTYKKzoxMDY0MjAwMDRBOTMxRjcwNDlGRDZEQUFDRjMxQkZGRjM1OUQ1MDU2NkQKKzoxMDY0MzAwMDNDMUVGN0VDNzc5NTVDQTQ1N0FFQkYyOTQxMjlGODVFNjYKKzoxMDY0NDAwMEIzRUQwNEZBNjNFMTg5MDEzRDVDOUVFMTdDQTBFOTk1MkUKKzoxMDY0NTAwMDM5QTY3QzBGNzMzOTQ3RTJGQzYxMUE4NzZBQzAzNDM4NjkKKzoxMDY0NjAwMEQ3OEI3NzRBRThGODVCQkI5RjU0QkJCRjY3N0UyMDI0N0QKKzoxMDY0NzAwMDY3QjNENzdDODA0NzJGOUY3Nzk4NkNBOUM4QTZFNUE3RkMKKzoxMDY0ODAwMDUwRDdDNUY3OEZBNjg2NUVGMkU4RkMxMTZGQTA1NkQ0RjAKKzoxMDY0OTAwMERGNzdCMzkwRjNFMzQ0NEI2QjM5QzhCOUQzMjFFMjA3RkMKKzoxMDY0QTAwMDNGNjIzRUE5RjU3QzA3RTJGOTQ3MkQyOEU3MDZEMjc5M0QKKzoxMDY0QjAwMENCRjA3QjJGQjBDMTkxOEU3NTE1N0VFRkU1NkMzRDNCMjcKKzoxMDY0QzAwMDI3NzQ4QURGMzNGQzE0REM0NzQzQ0JCRkYwN0I4NTQ3NUUKKzoxMDY0RDAwMEI2MkQ5RDBBNzRGMDM5QkY1RkI4NjhERkVBMjBDNDdEMkQKKzoxMDY0RTAwMDQ2NzYzODY3ODFERTFGRDkzMUJFMUFEQTQ3RUVCMkIxN0YKKzoxMDY0RjAwMERGRjFFMTcyNDI5QjE3MUM3Mzc3QTRFMzM5NzZENTlFRDYKKzoxMDY1MDAwMDBFRjI4NEEwREUzRERCRUE4OEMwRUZGRjlDRURCMEIwNjgKKzoxMDY1MTAwMDdCNTU4QjQ1QkNCRjBDQUUyMUI0RjBGOUE1QTZDM0Y3RTMKKzoxMDY1MjAwMEZFRjM4NzYwOEY3Q0NFRTVDOTE5NEYxQUMzOTdBNDBBODIKKzoxMDY1MzAwMDZBMjZBNEE1MTAzRkQ4MzUxQjlDOEJGMDFDNjQ5NTJCQjQKKzoxMDY1NDAwMEYyRDQ2Mzk5OTAxRjZFRjdBRkEwREYzRkIwRjdBNTVDNjAKKzoxMDY1NTAwMDc4RkVBODczMTE5NjdGRDlGQzQxMkVDOEFEQjNGQjNGREUKKzoxMDY1NjAwMDkwMTNEMTZEOEQxNDk1MjEzRUI1NjA5RjIwQzJGRTQ5RDgKKzoxMDY1NzAwMDc5QzcyQzE5RjY0N0FBNzYxRkMwQjg3MjhEMzc4NEVERkIKKzoxMDY1ODAwMDBCREJGNjYyN0RDMkVFQjc3MUZGNjQ3MEFBODJGMzNBNEMKKzoxMDY1OTAwMDlCMURDMjM4NkY2MTlCMkQwQUJGQzdCMUE3MjA3Qzc3QjYKKzoxMDY1QTAwMEMyN0RGQjU0QTY2NzM2Mzg1RkM1RjExRjc1QkVGQTNBNDcKKzoxMDY1QjAwMEMyNjVCMzBEQ0Y3RjFDRDhGQzFCMUNGN0NDRkU5N0Y4MkYKKzoxMDY1QzAwMDdDMDlFNjBCOUU0REU5MzhGRTEzRDA1RjdCRjk3OTRDRDAKKzoxMDY1RDAwMDdCQTc0NzFGMEY5NjUyMDU4MzdDM0RFQkU2RkI1RTM5OTgKKzoxMDY1RTAwMDk3RThDN0YzMDU4OUFCRDNDM0U0NTJBNzA3RjZDREFBNTIKKzoxMDY1RjAwMDNBMTgxQ0ZFNjI4RENBNjA0NzJFRTgxMDE0RjgzREJEQTMKKzoxMDY2MDAwMEYyRERFRDc4MUU3MEMxM0UzQjlFOTc1ODAwRjAwMEI4NTkKKzoxMDY2MTAwMDUxNzgyMTVDREEwRUUwRkMwQjAwMkVGRDYwMURFRjYyNkMKKzoxMDY2MjAwMDNFN0VFMTNFMEE5NzUxRjE3NTJGNzA4NTkwNUZCNUY1N0EKKzoxMDY2MzAwMDUyMzhCMDc1RUZCOTE0OUU0MjQ2M0NCNUJEMkQ0MzVDNEYKKzoxMDY2NDAwMDY2RTEzRTAxRTFCNzcwMzc5QjQ3RDUzRTM2QUYwOUJCRTcKKzoxMDY2NTAwMDY3MjFGRUNGRUMyNzBBQzQ1QjRFRURGREUwNzM1OENGRjcKKzoxMDY2NjAwMEQ5RkQ3NkJDQ0Y1NzlCMTdEQ0I3RTAyOTAxRkU2MTc0REEKKzoxMDY2NzAwMDRBRjYzMUI5QUFEOUREMzU5MTJDRkNERDgxOUVGNkRERDMKKzoxMDY2ODAwMEVDNzc0OTAxNjQyOTk0NUU0N0VFOUI4NkZCODJBNTQwMjYKKzoxMDY2OTAwMEJDQzBGRkRFOEUxMUVDRjcwNUMzQjkwMEQ3M0RFM0EzMDQKKzoxMDY2QTAwMEI5MzBFRjMzREFFRjIzNDlFMTVDQzA4QkRGMTMyQTREQjkKKzoxMDY2QjAwMEQ1RTFFM0IzMTMyRkExNUUyQzEyNkJGRkZDMjBGMEYxQTgKKzoxMDY2QzAwMEYzRUM3NzM4OTY3RUI4NDFENEMzRTMzQUY4NDFBQTMxNjcKKzoxMDY2RDAwMDAwQjdCNzNDMDhCNzlFRkI1QkMyMkM1RjhBODQ5MDFGNTMKKzoxMDY2RTAwMEFCMzgzRjlFNkRBNzdFMjc1REZGNjc2RDJGNjBGQkQ5OUUKKzoxMDY2RjAwMDZDNjM3RUQ1NUZEQTBFQTUwM0RDMkFGOTc5MEMxMkI5M0EKKzoxMDY3MDAwMDA1RTUxMTg1NEJCMzNEODE5RUVGMzlENzE2NjFFNzE1M0QKKzoxMDY3MTAwMENGMDlGQzNFQ0QyNzM0QjhENUNBRDMwREZCN0M0QzFFMjcKKzoxMDY3MjAwMEU2NkNDOTNGOEM3RTQ2MjRGMTM5NDdCMzlENjRCRTJGODkKKzoxMDY3MzAwMDM1NTkzRUMwNDkyRUNGM0VFNkY3NzQ2OTdBNzdCQTI3QkQKKzoxMDY3NDAwMDM0MkJCNTVGRjJGM0RFOTUyRDM1QjkwMEVGNEEzODFCRDcKKzoxMDY3NTAwMDg5Rjc5QzFFQjgwMUUyMTU3ODZFODhERDkzMUEwNUY4NUEKKzoxMDY3NjAwMDlDRUFCOTA3RjVBNTFCMjBDRkY0NTQxQUFCRDdBNTc2NDAKKzoxMDY3NzAwMEFFMDJCQkY2OTQ3NkFGQUFGQTFBN0IzRjlGQjU2RjgyNDIKKzoxMDY3ODAwMDc2REFGRjM5NEZCMDM2OTVEOUY3MDJGQjdEMUY2QjFBQzkKKzoxMDY3OTAwMEZDNEU4M0E2Mzc5MkMzQzFGODNCMEQ0RkQzQjUwMjVDQzQKKzoxMDY3QTAwMEU4NzgzRkMxRjEyNDNBREVDODdGN0UzQzRENEVGRkQzRUUKKzoxMDY3QjAwMEUzRDhGRjY3QzdEMUY0MTdGMDI3QTQzRTEyQkY3RkM0MDgKKzoxMDY3QzAwMEZGMDRGQ0ZFQkJFRjkzRjA1QzAzNUY1REQ4M0NCODA5QUYKKzoxMDY3RDAwMEY2RDFDRUZCRDgzRDMwQjZENkU1MDRGNEY5REM0RDFCM0UKKzoxMDY3RTAwMDEyRkVGRTVCNEY5REU3RTVDODgzMjlCRkU5RjhGQTQ4MzIKKzoxMDY3RjAwMDJBQjNDQjhGNzAzOTBEN0ZCMEJGMDU3N0U1QTA1RDRDMTQKKzoxMDY4MDAwMEZGNUFCMzMwNzUwOUZERTc2MUZDMUVGMzIyMTI0NkZCMDcKKzoxMDY4MTAwMDc0MDRFOUMwQjI5ODc0NjIzOThBNzQ2Mzg5REJDQzgzRUEKKzoxMDY4MjAwMDIxNTRFQUM3RjJBRkU1NUQ2MzYxRjEwQkVEQTEyNzUzOTcKKzoxMDY4MzAwMDQ0Q0MzQjc4MERFNEQwRDk0MUExQTdFMUEyQjYxNUNFNTYKKzoxMDY4NDAwMDQ1RDdDMEZDREY0OEY1NzI3ODQ1MERCRkI3NDJGNEJGQUQKKzoxMDY4NTAwMDg3QTE4MDNEMzhDNUQ3OTczRDQ4QkNEMjk5OUVCQzk3NEIKKzoxMDY4NjAwMDAyQkNDRkY2RUQ1NDVDNUZCMkRGNTE1QjYyQkFGNzg2RDMKKzoxMDY4NzAwMDlEMEJEN0UwNTA0MzNBMzA4RkU0QjUyREY3QkMzMTlDRTcKKzoxMDY4ODAwMEMyRkZFRURENkVCNDkzODc2RTY5NUMwMkYyRkM2RUQyREQKKzoxMDY4OTAwMDk5MDVFNzg0ODdGMjdCNDQ0ODFCQkIwRjQ3QkIxRjY0MDUKKzoxMDY4QTAwMDc4OUJDREY4M0JDMkE2REZFMzU5QzA3RjNGNkI4MUY5RUYKKzoxMDY4QjAwMEY3QTlGODM5REMxNjc4OTAyMDFGQzM3QzhFRjdBRkE5QjIKKzoxMDY4QzAwMDg5RUY3RDIxQzU4OTdGMEZDNTdDOEU3Nzc3ODc4OEY5MTEKKzoxMDY4RDAwMDUxRjc0MERFOTVDRUJGMThCRUEzRDY2NkE0MkZFNURGRTQKKzoxMDY4RTAwMDBBQURCQUJBRTA2N0YxMDhCNzIzQjA1M0U4RkQ5REZGREYKKzoxMDY4RjAwMDBCODJEOEIyQjQwMDgwMDAwMDAwMDAwMDFGOEIwODAwOUIKKzoxMDY5MDAwMDAwMDAwMDAwMDAwQkREN0QwQjc4NTRENUI1RjAzRTMzNjAKKzoxMDY5MTAwMDY3OUU5OTg0OTk2NDkyNENERTEzMUUyMUM4NkIwMjIxRjQKKzoxMDY5MjAwMDQ1QTQ3QTEyMjI0NkE0M0EzQzZBQzE1QTlDODA0MDgwMEYKKzoxMDY5MzAwMEJDQTA2OEIxQzU5RjgxNDQwODE0MjVENDg4NDAwMTA3RDQKKzoxMDY5NDAwMDQ0QzVGQUU4QTQxN0U1NjFCMDAzNDQ0NDhCQkRBMTVBREQKKzoxMDY5NTAwMDJGNTIyRjFEOTAxRjExMTE0NjZERDFGNjZBRkRENzVBODcKKzoxMDY5NjAwMDdCRUY2NDY2NDgwQUY0RkFEREZGRkZGRUY0QjM4NzdEMkYKKzoxMDY5NzAwMEY2M0VGQkIxRjY3QUFGQjVGNzBDNzcyODhDQTUzMkY2NjgKKzoxMDY5ODAwMDgyQTJEQ0UzMURDNEQ4MzdGODc3NTNENzczQUE1REM3NUEKKzoxMDY5OTAwMEQ4MDgwNjdGOEQ2QzVDMzE2MzBERDVBQTdEMTU5NDFBREQKKzoxMDY5QTAwMDAyNTY0REVGODRBNzVEMTc1MEYyMTlDQjRBMkMzM0NGMTYKKzoxMDY5QjAwMDg1MzI3M0U4RUNGRERDOEM4REQ1OEYzRUVDODZGNkM2MTcKKzoxMDY5QzAwMDFBNzVCODA5Q0FFRERCRTY3NjE4RjA3Qjk3Q0E0QzMwMjkKKzoxMDY5RDAwMDY0OTYwM0ZBODUzMkNCRDAwNUZBNDFCOUQxRkUxQkM3QzQKKzoxMDY5RTAwMDBDMThCRkMwMDZFRkExOUYxQzNCMEJCOEExREZGRDVCREQKKzoxMDY5RjAwMEVGRDc2MUI5QTE5RUIxNzQxQzQ3RjE3NUI4RTkzQjk1MTkKKzoxMDZBMDAwMDNEODVEMzYyREFGOEEyMzRDNkYyRjA5RjMwOEVDQTU2QzIKKzoxMDZBMTAwMDdGQUE0RjYyQUNCQ0U2QjQyNTZDODNGN0UxQ0FGMTZDODcKKzoxMDZBMjAwMDA4NjNBNUY2N0M1QUE3RkFGRUFEMUY2MTc5Q0JBMjUzODUKKzoxMDZBMzAwMDBFMUY4Q0Y3QzZENkU1N0YxODBCRkQxOTAyMzAyRkU4MjQKKzoxMDZBNDAwMEEyRjBFQjg2RTM2MzYxQkNDODU2MjNEQkM2QkFFMDkwRDQKKzoxMDZBNTAwMEJCNTgzRDE1MzZEMzgwRUMxQkY4MkY3QjYxNkNEOUM4MzEKKzoxMDZBNjAwMEEwNUMyOENBRjkzODhGQTg3QTI4MEYxN0UzMzMzNjg1MzcKKzoxMDZBNzAwMDg1RDJCMDVFQ0NEN0E5MzEwNkYzNjQ3NjlCRjNDQzQwQzcKKzoxMDZBODAwMEM2NkVCMjJCRUM5QkRFNURFNTExQTJCQ0MzRDA1QzY2OEEKKzoxMDZBOTAwMDg1NzlFRUY4NEZDNUIzMTRBQTBGNkM5RDk1ODdFQkJCQjMKKzoxMDZBQTAwMEI0Qzc5NzY3ODc3NTJDMzIyNzBENjFCRDJFREYzRjgzRjIKKzoxMDZBQjAwMEREMkRGNkNGNkZEMUI5RjAxOUIyMzA1NzU3RkIwMURCOUUKKzoxMDZBQzAwMEVCNEQzRUU4QTc3MTA5RjM5Q0VFQzc5ODM5RDA2RTFERDcKKzoxMDZBRDAwMDg4RkI3OEQ4RTA4MTIyN0I0ODYxNTM4MjUwQUZEQTk4RjYKKzoxMDZBRTAwMDE2ODQ3MTg2MEI3Qzg5N0YzRUI0QzRGREJCQkU4NkFFMjYKKzoxMDZBRjAwMDcxMUZGQTdBRDIxNERDREY0OEEyNTVEQkE2NUMzRTJGNjgKKzoxMDZCMDAwMEY5OUQ2QTc3RkI3MTdGMEREOUNDOTMwMEUzMTk5QzFEMjkKKzoxMDZCMTAwMDk5NzZGODZFRTAyRUEzQzcwNjIwMUJGQkVCNDFCREMyQTEKKzoxMDZCMjAwMDMwRUVDMDgzNTM5OTNCOTFDMzBCRTdBQjJFMzI3QTRFQzQKKzoxMDZCMzAwMEE3MzA2NjVBRTRGNEE4QzNCMTlEOERGMEYxMzM5QjMxQzAKKzoxMDZCNDAwMDYwNDJGODJGRkE3OTMzRDYzNzZDMkQ3MUI5QTNGMDdBRjkKKzoxMDZCNTAwMEY5MTJCQjQ3ODU3OTZFNUE2MkY2QThCMEMwRTU2MjdEMkUKKzoxMDZCNjAwMEYxRjNDQjcxRThCQzAxRjhDRUE4NjMzRUFDNUYwMEZCNEIKKzoxMDZCNzAwMDgwNzA1QzYwNEZBMEU3N0M1MURFQUNGQTI3RTJGQzM3MDYKKzoxMDZCODAwMDAzRkUyQzQ1N0M1REM4RjE3NzQxODYzOTgwNzhCRUUwRjQKKzoxMDZCOTAwMDhEM0VFOUFDMUJCQTkyQ0ZBNzk3QjgzQzdENjExRTlCOTYKKzoxMDZCQTAwMDE2NEU3NzMxRjhCNDc0N0VCQkU1MTY1OEZGODI0NEIzQjUKKzoxMDZCQjAwMDFERjE1MTlGNTRGMEY4NjhDNEY3MzcwRDBDRTlBQTIxNzQKKzoxMDZCQzAwMEIxQzQzRDIzQUEzRjdERDI0ODE3QzI0M0FGRjM2NzMyMTkKKzoxMDZCRDAwMDNCNjMyQkVDRDMyQUQ0MENDNDE3RkY0NkU2NjE2QzREMDMKKzoxMDZCRTAwMEYzQ0RCQzlDRThDRjU0QTBGRUYxRTY1Qjc5MzlENUJGNkMKKzoxMDZCRjAwMDUxODFGQTI3OUFCRkM3Q0IzOUZFNEMxRDk0OUY2OTlFREQKKzoxMDZDMDAwMEMwQ0JGREZDMUJCMUZDRUJFNkVGRjNGMjYwOTg0MzI2MzIKKzoxMDZDMTAwMDYzQkI5QUE3NTZGODYxRkMwNjgzNjc4QTA3QzY3RDExOTUKKzoxMDZDMjAwMEU2M0YwOEU2MUYxNENGM0Q3NkJFQUZCMkZFMzdGODFFMzIKKzoxMDZDMzAwMEUwQkQ1MzNDRTNFQjVGMTZERkVERUVBMTdFQUZBODZGNDYKKzoxMDZDNDAwMEVCQTFGRjU3QzU3N0ExMUVCRTNGMjBCRTZCRUZFMUZCNTYKKzoxMDZDNTAwMDQzRTJCQkMzM0RENEJGMjlFQThGRjREMEZGRUZDNTc3MzEKKzoxMDZDNjAwMDFEM0Q3Q0ZGMDdGMUREM0IzRDdDRkZBRUY4RUU1ODBGOEMKKzoxMDZDNzAwMEY1Qzc0NUZERkI3MUZEOUYxMEVEQzNFMjdENzY2MkQzNDQKKzoxMDZDODAwMDcxM0ZFMDVEMzZGMDJERkMyQjRDNkM0QTQ2QkNEQjU0NkEKKzoxMDZDOTAwMDVGNENGOERGMzAwMkYwN0M1MDE3QkU2NzJCQ0M4QkU1RTEKKzoxMDZDQTAwMDIxMEU5NUZBMUI4MkZDMTg5RTZGOEJGRTRCRTdGNzVENTkKKzoxMDZDQjAwMDgzNzhCN0UwMkRCRDA3RjFCMDQxRjExQ0YzNDFGRkZFMzEKKzoxMDZDQzAwMEY5M0EwRkYyREQwNTZGRTgzOTlFQ0Y1NzAzMkM4QUJFRTMKKzoxMDZDRDAwMERGOEU5QkZGMTYzMUJGNDYzMURGREZEOTdCMTNEREU0NEEKKzoxMDZDRTAwMDJENzI3OUM2NEI3RTg5NzQ2RjhGMkQ5QjgxOUUzNDE4Q0YKKzoxMDZDRjAwMEJGRDFDOUU1NEJFMUZDMzI3MzdGOTQxRjIwNUY5MDZGRDkKKzoxMDZEMDAwMDNFNjQzMzg2NEMzMEZFNDM3Njk1RUExQjlENjU3NkFDMzcKKzoxMDZEMTAwMEY3REI1NTkyM0YwRjM5Q0JDQzMzOTBBRkRBODBEOTk1NjIKKzoxMDZEMjAwMEMwNzg3NkRFNzdBMzVEQUQwODIwRkY3MDk0NTNGREQ4NjAKKzoxMDZEMzAwMDVGOEZCNzIzMUY2RDY0MTE0NzI5QUU2RjMxQzgxNUY4RjcKKzoxMDZENDAwMDdFN0Y3RDE5QkRDRjczRkNDNTgxRkNGOTY4MzI1RjU3MkEKKzoxMDZENTAwMDdCRTIyMTRCM0VCNDUzRUZEMzkxQkMyOEIwQUIyNEM3QTgKKzoxMDZENjAwMDdBMkZENjA1RENEMEE0RERCRTQwODdFNTI3MUJCOUJDNTEKKzoxMDZENzAwMDgyQkZDNDIyMThCRjJGMUY5RUVEQjhCRkU0Q0Q0Mjk0M0UKKzoxMDZEODAwMDY3MEZBQjFFQjc5QkJGNTNBM0U0NDE1Rjk0NTc0OTM4Q0QKKzoxMDZEOTAwMDZFNzI4Q0JDREE1Q0NDMzRFQ0Q3RUYzMjA3OUU4MjdFMEMKKzoxMDZEQTAwMEZCQUFDQzk1OTJEQzA1RjczQzg3OUVDQjE3RkQ3ODBGQUMKKzoxMDZEQjAwMENBQjUzRUNEQjFGMjI5QkYyOTRBM0UzMTk0OTdCMUYyMEUKKzoxMDZEQzAwMDI5NUU1RUU1RDQwMzdGOENGQURFRTRCMkM3OTQyRDhFOTMKKzoxMDZERDAwMDQ0OTI0RkMwNjMzQ0RGQzBEMDBCNUExN0RDNjI2NTVENDQKKzoxMDZERTAwMEZDM0E1RTFFMzUwOEY5MjBGOTZFQzNEN0MzNjNFNDgzMEQKKzoxMDZERjAwMEU0Q0JGMUYyRTFDQUZDRjVFRDVCRkIxMzFFMDJCNzcyQzYKKzoxMDZFMDAwMDVGOTlDRkJFOEQ3ODAwRjg2N0YwMjkyNDNGOThFQTczMjgKKzoxMDZFMTAwMDc5MTNBRjBDMkY4M0MxNkJCN0RCQUUwQzM3NDNFQTNCNjIKKzoxMDZFMjAwMEE0NTcxODdDMkFGNTdGOTk1Q0I5MDI1QzY1M0JBM0Y5RUQKKzoxMDZFMzAwMEM5Q0RBNzQxQUVGREU1RkQ5RjE0MzIyMDk5RTUwMDFCQTkKKzoxMDZFNDAwMERBRkY1NDVERTAyOTU4NzdGNkEyRTczNjYzRkY1OTg3RTkKKzoxMDZFNTAwMEFDOEQwODY3QTM2QkM2RTY0NjVDNEZGM0UzOEMwMTNFM0UKKzoxMDZFNjAwMEU5Q0QxQzlGOEMxOTY1NzZGQzVFRDU2OUFFRTQzRTUwNzkKKzoxMDZFNzAwMDdFRjZEREJCMTRDMDI3N0Q0QUJEODdDMUJFMUQ3RUYxRjUKKzoxMDZFODAwMENERTREQjEwN0U2RjE5ODhDRTREM0FBRjlERjVBMUU5QjgKKzoxMDZFOTAwMDEwQkVBREM4QjE2RTVENDU3OEVDMzMyMzlDQjI3Nzk4RDcKKzoxMDZFQTAwMDQ5MEUzMEZGRjY5NTFBMjA3NTAzNkMwNzFCODVGNTUzQzQKKzoxMDZFQjAwMDU2NkFCMEVFMUQ0QTY3Rjk1NjJDMDcwMzQ2REUxRTU4ODcKKzoxMDZFQzAwMDM0RkU1RkFCNEUxMUY1NEM1MzVEQTQ3NzhBRkFERjU0NjQKKzoxMDZFRDAwMDk0OEY4NkY2QUE3REEwMEE3MjY3QzFEQTk3OUEwQzM5NTgKKzoxMDZFRTAwMDU4QUY5M0RGNkI2QzI0QUMxN0M3MTM2NTE1RjZFN0I5ODEKKzoxMDZFRjAwMDc2NTFFRjNGRDg1NDBFNDRENDZBOTRFMzMzM0ZCNjZGRDMKKzoxMDZGMDAwMEQ1RTk3OEQ5REZENjg0RkRCRjUwMjZCRUY3M0ZCRDUyMDQKKzoxMDZGMTAwMENCQTZGOURDQTY3NzQwRDFGMTdBOTNFREZBQUVGOUFFQzMKKzoxMDZGMjAwMDREN0VBQjY5MjlBQ0VGMTM3NzM4MDk5NkMxNkFCNjlFREUKKzoxMDZGMzAwMDRFNDNGOUJDNjI0QUJEMTdFMTg2ODhFRjA1OTlEODRCRUMKKzoxMDZGNDAwMEVGMjYzQ0VERENCNzlEMTNGQzU5NTA3QkYxRDBERjkzNkQKKzoxMDZGNTAwMDA2NDE1NTlEM0U3QzI4MDFFMDU3QjNCQkRFNkM4MEVGQjcKKzoxMDZGNjAwMDREMDZBRjNGMkJCRkVCQkI5QTlEOTVBNENGRDRCNTE1NzMKKzoxMDZGNzAwMEQxQjM5QkVGMEVBQkJERkZBNUVGQ0NDNkFCMThFRjkzMjMKKzoxMDZGODAwMEQwMUY2QTlGODdBQTFBN0Q3RDkzNEQ0RkVEMTlERkZGQjEKKzoxMDZGOTAwMEVFRDcyN0JGRkZFNEY5M0ZEQzg5RTM1RDcwODdEM0M2RjYKKzoxMDZGQTAwMDQxRUIxNTIxODA0QjM3REZDOUY2QjVCQjI3RDBGMzU4MkQKKzoxMDZGQjAwMDgyQjZDNjAxRUY2NzAzRUYyMjdFQTVENjdCQjA3REQwRjcKKzoxMDZGQzAwMERDNkNGNzAwQTAyRDg2NjYyRkNBMEQwMDdENDAzN0IyMUQKKzoxMDZGRDAwMEVCRjkwQjQ3NUY2QTFGRkYzRTlFQkU4MjY2OTYzMjFFMkMKKzoxMDZGRTAwMEY5NzhCNTRBNzIyQTY4RjYyNzBDODFGMjZBQjA0Mzk2OUUKKzoxMDZGRjAwMEMyOTQ5NjE1QkQzQjZDMTA5NjVGQjIzMUI0NEIxQUFBODEKKzoxMDcwMDAwMERCNUQ4MzkwQUUzQzQ2ODZGQUVFRUFFQjgzMTk0OEU3RjcKKzoxMDcwMTAwMDhEMzVDNjI5REIxMTdGNDMwQjVDMzNBM0Y0QURCNUM5QjUKKzoxMDcwMjAwMDA2OUFDN0NBRDc4MEVFODZDMkQzMTA3NDI4Rjg3RDNGNkYKKzoxMDcwMzAwMDkwMUIwQUYyNDU5RjE5RUQxQzRCNDYzMkYzRTc2MzNCNjgKKzoxMDcwNDAwMERCNkFBNENGOTUwNjVGNDUxOUI2Q0JEMDkxN0NCMUY0MkQKKzoxMDcwNTAwMDlCNUM1MTA2RjM3MEE1RUExNDNEQ0RBM0ZDRDgyQzk0OUIKKzoxMDcwNjAwMDZGNzYyMzRBNTA3NjIyNzlGQTZFODREMzczQUFBNzFFQ0MKKzoxMDcwNzAwMEU5RjAzOTlCQ0RFRTg3MEFFMDkxMUFGMjNGQjU5RjMzRDQKKzoxMDcwODAwMDgwNjU5MzlFRDVBMzFDQ0YyQTAyNzkxRUE1Qzc5RTEwQUEKKzoxMDcwOTAwMEZDRjM4NEMzNDhGQzZFQjUyNTM4QTExNEZBQjEyRUQwOTgKKzoxMDcwQTAwMEQ5RkQzMERFQ0E5QTc1MUQ2MzYxOUM1RkQ2QkM3Qzc0QzUKKzoxMDcwQjAwMDI5QkM1Rjk1QTYzMjlDODdDREE5ODY4QzIwN0YwQ0RGRUEKKzoxMDcwQzAwMDgzMzlDMkJDNUY1OEVBQjUyMzdGOERBNEFBNkMxQkQ0NTgKKzoxMDcwRDAwMDVCRkIxQTk5M0I4QTVGRDkwNjQxMzk4QTRGQTYzODU1MUUKKzoxMDcwRTAwMENEMDJERjdGOTVFQ0ZCNzcwNzhDM0JGQ0FENzdDQ0Y4Q0UKKzoxMDcwRjAwMEJENkI4NDRFODc2NDEzNTRGOTNFMjcxNUM3RjY2MzFGOTIKKzoxMDcxMDAwMDFEREI0RjcyNzk2Q0JENzM3QzZDN0REQUU0RDg3QUQ3NjUKKzoxMDcxMTAwMEREQjFFNUNDN0I2M0NCNTMyNEJFMDFDRkIxODEzQ0I2NUUKKzoxMDcxMjAwMEYyMkE2NjBEN0ZCQTA0RTUyREMwRTczRDg0QkZCNTQwNjUKKzoxMDcxMzAwMEU3NDFGODU4NkFCNjlGOUQwNUY1NTlDODRGRDAxRTFBMDkKKzoxMDcxNDAwMEMyNDhFRTFFQzhGREE5MUJGNTAyNTM3MkJEREIzMUU4MzMKKzoxMDcxNTAwMDcyNzg2NEU1OTg2RkMzRkRCMkY1NTVFRDBDREFEQkRFQUQKKzoxMDcxNjAwMEZGRTg2QkVDREZDNkEyREFFNTIzN0NCNDg4MjM5NTk3QjEKKzoxMDcxNzAwMDVEMzA5RjQ0RkM4NzFCRTE1REZGRTcwNzUxMkUxRUQ1NjQKKzoxMDcxODAwMDdCMTBERTU5MzUyQThERkZGMDY0Nzc0MENGRjUwOTE3NjMKKzoxMDcxOTAwMEVBMzM0OUEyN0Q5Mjc5NzU4NzFFRjg3OUQyRkIyQkU3RjUKKzoxMDcxQTAwMEEzREQxQjBGRDczNDU2QUYyMDVEMDI3RTcwN0JCQjkyRjAKKzoxMDcxQjAwMDkxRkM1OEExNjM1NTg4Mzc2ODIzNjA3RkE0MUUwMUJGRTYKKzoxMDcxQzAwMDk4OTQ2MjI0Mzg5OTkyMTU2MTM3QUEzQUFDNEYxM0ZBMTEKKzoxMDcxRDAwMDkzMzFFMzVFMEJEMkYxNDM4NzM4RkUzRjY0RTRGRDc0RTQKKzoxMDcxRTAwMEY2RTdBNjQxMTFFNTE5RjJDOTk0NjQ1RDRDM0ZFQkVDNUEKKzoxMDcxRjAwMEEyOEQyOEE3M0E3OEI5QjUzREY5MzZBNENCNzU5MzkzRkIKKzoxMDcyMDAwMDg3MjE5RTk4RDBFRTgyRkU3QTY1OUJCNTAxQjAzRUNCNzkKKzoxMDcyMTAwMDFCNDZCRjAyOURGNjUyNTlCQjAxRjZCMkQ1Q0FFRUYxMkMKKzoxMDcyMjAwMEMyM0MzNjFDQjZGQUY1RjBERTMyRjMxNzc2RDREMzhBQjgKKzoxMDcyMzAwMEM1QkM1Qjk3NzlERTQ2M0UxMEE5NTQwOThFOTZENDY2OEMKKzoxMDcyNDAwMEZCQjA0MTdDMEQ3RTk4MUZBMjAzQ0FDNUQyN0UyREE0M0YKKzoxMDcyNTAwMEU3NTk0QTlCNDlCRTVCOEE5QTlCMTE0RTFCQzZFQjQ4NzUKKzoxMDcyNjAwMERGNDhCRTU3NDdGODZDQzkwOTFFRUQ4QjdFODI5OTNBRkMKKzoxMDcyNzAwMDNCRjY5NzBDODJERjA4OUQzQzlBRERFQzQ1QkYwOTAzODUKKzoxMDcyODAwMDk4RUI0QTM4QUE2MEJGQjQ0MjE4Mjc0NUMwRDVFOURDNUMKKzoxMDcyOTAwMEY5MTMwNUZBNDlDMUZFODZGMEY2MDgyNzg3ODBEM0U4N0UKKzoxMDcyQTAwMDY0MzdDMUREMjlGQTRERTkwQkVEODdGMDdFMUE0QkJBNDAKKzoxMDcyQjAwMEZBOTFGQkI4QTE4MjA1NzA3RTcyNUNEOTRGNjdGRjRDRDIKKzoxMDcyQzAwMDUzOTBBRjFBN0UwNzcwODM3RDUyNzJDRDM0Qjk4N0U2MzIKKzoxMDcyRDAwMDMyQjI4RjVCOTc3OUVCQjcxMjVEREJDOENGOTFFOUNDMDcKKzoxMDcyRTAwMDJFNDMzQ0NBM0NCQzcxQTI2RTA4N0U2N0E1NzEwQzMzNkMKKzoxMDcyRjAwMDU5MDBGMTM4NTM2NUU2MUI5MzUxQkZGMTEyMUNFM0U5QzUKKzoxMDczMDAwMDM1QTNCRDc5MTJFQUE5NzI1RkUyRTkzNzQzNjU0REZBMDgKKzoxMDczMTAwMEU0Q0JFOTM4QzNFOTJDMkIxOEQyMEQzREM3RDE0QkM2QkQKKzoxMDczMjAwMEUxQzg3RDg4RjRGMTc0QkQyNUUxNDIxMUMyODU0NUI3RkQKKzoxMDczMzAwMEQ3NUZCOUFDRDcwNzhGQTI5Rjg3QTU4MzlDMDBEMEU3MDIKKzoxMDczNDAwMEM2OERDN0Q4M0Y0QzU4NTY5OENFRkQ0RDFGRTRGQjBFNTYKKzoxMDczNTAwMEUxQkYwMTc5MDVDNERBM0FDQzNFQzY4Njc0M0E5RjExODIKKzoxMDczNjAwMDdFOTVFRDVBN0REN0VGQTBCRjRCRkQ4Qzc2OTQyQjM5REYKKzoxMDczNzAwMDg3OUIzQjUwM0VCMkREQkVGRUI4MEY5QjU0REYxMzA5MjYKKzoxMDczODAwMDUwQkZFOTU4M0E0M0JFQkREMkMyRUQzMTU1RTA3OUJDOTkKKzoxMDczOTAwMDdDNTkyQkU4QzY4RDcyQ0VGNUFGM0ZBNTdFMThFQzlCQ0QKKzoxMDczQTAwMDM2RDAwRUI0QjdGNjE3MTU2Rjk4NTNGRjA3RjUyQ0Y2QzUKKzoxMDczQjAwMDAyRTk1OUQ5RUQxRDRCNkQzOEZFREFDMzRENjY4MEFGMzkKKzoxMDczQzAwMEU1MkRERUJFMTlDQTdFMTVFMTU3NERGRUFDMDMzOUIzN0IKKzoxMDczRDAwMDA4NEVFQTcxMTM0MzNDMURBQ0Q3MDI1ODY2N0ZCMjMwQTkKKzoxMDczRTAwMEU0QkYzQjVFQkFCQkNBOERGQzI3NkQ5QzFCRjlEMDM2NEYKKzoxMDczRjAwMDQxRUYwMTYxOUZDNUFGNUYzNTZBM0VENDI3RTJERjZGODEKKzoxMDc0MDAwMDRDRDY4OUZERjQ5RUFEODQ3RDFDRkNBNDkxQUQ4MkNBNEUKKzoxMDc0MTAwMDQyRERGNDI2QjRFRjIyMkI4MUZGNDJFRDc0QkRCQkY2QjIKKzoxMDc0MjAwMEU3NTFGNkVEMjNENkQyNjAzMkRBMjU0QkNDQ0MwNzBBRjEKKzoxMDc0MzAwMDczRjY5NzBBRjMwMTcxRTYzOEZGNTA4QUZDMjc5Nzg1QTcKKzoxMDc0NDAwMDE0OTRCM0I5RjVBMEYwMjI1RTJEQjQzMjVGMTRCRTY3NzgKKzoxMDc0NTAwMDdGQTk1MkZCNDdBQzVBMzA3OTA0N0Y2RjA2M0U2MEUwNEIKKzoxMDc0NjAwMEZGNjRDRjI1N0I1OUE1OTNGMzI4RDQ1RjBDQ0Y1QjRGRTYKKzoxMDc0NzAwMDIyREY2MENFNzJBREQzMUVFOThERjgwQjcyMUZDNkRCMjIKKzoxMDc0ODAwMDI3RDY2RDAwMTgxQTg2QzE3RjM2NURDODM0RTRGMkY2M0YKKzoxMDc0OTAwMDA3MDQ5QzU0QjMyRDg0RkM1MkI1MUQzOTQ2RkNDNUFFN0YKKzoxMDc0QTAwMDlFOEY2RTg3NzYzNzMxQjE2QTQ2N0U1OTg0MEI5NTdGMDEKKzoxMDc0QjAwMDZDQTc3MjE2RjA1RkQzMzBEMkZCRkQ2ODdGRkI5M0I4RTgKKzoxMDc0QzAwMDNEQzIzNENERUQ0QzQzN0E2MTA0RTQ2QzMzNkIzMjQzRkUKKzoxMDc0RDAwMDNCQzI3NkEwQjcwQ0Q2NjEyMUJEQjk5REI5OTExRUQwMzMKKzoxMDc0RTAwMEMzNzYyNjgxNTgxNjQzQjg2RTYyQUMyMjlBMEVFNDUzRDYKKzoxMDc0RjAwMEZBMjVENDQ1N0FCMkE3MDYxRUI0RDA3QzBDRjUyQzYwRDAKKzoxMDc1MDAwMDQxN0QwOEU3MDZGMDU2MTdCMjgwOUFERkU1MTcxQ0UyQzYKKzoxMDc1MTAwMDcwRDM3NzQ2NTY0RkZBRUMwQjVGOUZDODQ0M0U2RDNERTMKKzoxMDc1MjAwMDA0RkFEODUwREM2NzFERjEyOUFCMzU5NkZFMTg1QjRBOEEKKzoxMDc1MzAwMDcwOEEwOEZDRDhCQ0M0NEVGQkRDNjlCRkY5REUxMUZCQzUKKzoxMDc1NDAwMDFDNUU4QUYyMjI3NzYxNzJDQ0ZFQ0E3NkQ5NUY2NjMxMDAKKzoxMDc1NTAwMERGRjBFODdFMDNENDZGNzZERjc2MDVGRDMyRDk1RkU2OTMKKzoxMDc1NjAwMDUyRkRFNjI1RUUyQkY0REZCQjg3RkUzMzA4OEY3QUVFNjMKKzoxMDc1NzAwMDNGOUJFQTM3ODdERTcxREMwRUEwRDgxNDY5Nzc3OEREOEYKKzoxMDc1ODAwMDVERkE3NTNDOUNCMzE3QzZGMkU1QTFCQjYzQ0IxMjJFMjYKKzoxMDc1OTAwMDE2ODNFNjlDMDAzMEI3RENBN0YzNkM4NUZFQkU3MzJDMjcKKzoxMDc1QTAwMEI2NUQ0NUZFMUZDOUZFRUQ2QTFGNzI0RUMyRjY2MDlGQjIKKzoxMDc1QjAwMDZGODVCNzM3OUM4RDZERUYyRDdEQ0Q4MTc0RENENTlFQTkKKzoxMDc1QzAwMENGRUZBNjJGNjNEQkM1RUY0RkZDN0M2MTVFQTlERjhGOTkKKzoxMDc1RDAwMDlBRDcxOEIzMjlBNjdFNEFFNTY1RjM0QUZENDFENEJDODMKKzoxMDc1RTAwMDZFNzFDNUI2RjcyREVEN0U1RUI3MTU5QUZFRTlCQzY0RTcKKzoxMDc1RjAwMEJCM0I0NjVFNURCQkY4NzU0Q0FBMzBGNTAwNzdERUZFRkUKKzoxMDc2MDAwMDA3NTNBRUFFREYxRjU2RkRGMzc2RjcyQzhBMUZDNzRGMjgKKzoxMDc2MTAwMEY4QkU0MEE3OEQ0OTgxRkFFOUY4MEFGNTQ1OUI5NUY0MzMKKzoxMDc2MjAwMERFQ0JFQzJDMjE5RkM2QTFFMjAxREY3OTkyQjQ3MUY4ODgKKzoxMDc2MzAwMDVEODVBNDNCRTE2NzM4RkNFMjc1RTlDOEQ3QjM4NDFGRDgKKzoxMDc2NDAwMDlEMDlCRjQyNkJCNThCRkMwQTNFRDExRUU0NDkyM0YyNzMKKzoxMDc2NTAwMDhCRDYxREYwNUQxMjlGNTdCNEZFOTQ1MkNERUQwQTNCQzAKKzoxMDc2NjAwMDhCMTAzRDRCN0QyOTk5RDkxNTZFOEY3MzdEQTdBNzcxMUUKKzoxMDc2NzAwMEUyRkI3RjE4MTU0MDk4RUY4QzQ1NjNEODA3NDA4NzJGQjEKKzoxMDc2ODAwMDFCRURBNTJBREE2NzVCMTREMjA3NjY5NDZCRkE0NEMwMzcKKzoxMDc2OTAwMDhGNTE0RDBBRjk5NTY2M0NGMEY2QTNFODhGQjlGRUI0MTgKKzoxMDc2QTAwMDdCNzcxOERFQ0YwODM4M0MzODZDNkQwN0QzMzA0RTkwQUUKKzoxMDc2QjAwMEFFOUY1RkY0MjAzQzFGM0JDMDI4OEU4NkU1Rjk4ODZGQTMKKzoxMDc2QzAwMDM2Q0Q4REY2NDYyNUNFMDhGQTM5NkZBODJGQjIyM0RGQzYKKzoxMDc2RDAwMEZDOTE0RDQzQkU1OTM5NTk3QjhGRDZGQjE1NjgyNUQwOTcKKzoxMDc2RTAwMDZFMjY1RjNBREJENTMyQzE4OEYxOEVDQUJCREQyMzUxRUQKKzoxMDc2RjAwMEVGQTkwQzVBMzQ3QTlBOTk2QTg1NzU1NDgyM0U4NkNGREUKKzoxMDc3MDAwMDc0MjM1MzJERjhCNDMyMzMzRTRCOTY3MUZEMkI2OUE0OEMKKzoxMDc3MTAwMEQ3NTgwOUUzNTdCNjNERjM1N0ZDNkVCNjFBREFDRkY1RTIKKzoxMDc3MjAwMEM5MDBBREJCQjJFRDhEQkZBMUJFMzY1M0YzMUE5MTVGNTgKKzoxMDc3MzAwMDBDREM2MUU0M0FBOUMwODdDMUMxRDgzMkYyODNFODcyOTcKKzoxMDc3NDAwMDUxMjhCNjNDRkM3MDZDRjlEMzE0MEVERjUxQzI4Rjc1MTIKKzoxMDc3NTAwMDYwOUY4OUY4RjZCQzhGQURBNDdGRUUwNTgxODc3NkIyNzUKKzoxMDc3NjAwMEZGMDUxM0M5OEYzMUYzNkNCNDVGMUY5RkIzNkU0NUJGMjQKKzoxMDc3NzAwMERFRkVFMzU2NkEzRkY3MzkwQjZGQUYwQkJFODg2NUZGM0QKKzoxMDc3ODAwMDhCMDk2NDY3Q0Y0QjA5OTYyNEMzQkM1RkY5NUE0RkYwNEQKKzoxMDc3OTAwMEM2NjUxOUIwRkYxNzA3NkM1RDg1RjVDMzgzMjUxODE3RkIKKzoxMDc3QTAwMDdCRjkzQUM2M0FCMDVFMEQwQ0MxNzVCRUZDMEZFRUI3NjAKKzoxMDc3QjAwMDhFM0M2QjBBNkM4MzdFM0ZERUYzQ0M4QjNGQzM3MTlGQTQKKzoxMDc3QzAwMENENEE1NjYwN0Y2RTQwQjkwMEVENDYzRDY5QjZBMkJEMTgKKzoxMDc3RDAwMDMxRUFFM0U3RkIyMERGOThCN0MzMTRCM0JFMTc1MzE0QjUKKzoxMDc3RTAwMEExM0ZCODkzMTBFRjdBRjIzQjlFNUFGOTBDN0Q1Rjc4NzcKKzoxMDc3RjAwMEY2MThFMURENUU4MzVGODc3MTNDRkY0QThFNjc3QjJENjMKKzoxMDc4MDAwMERDNEZCQUQ3OTIxQkMwN0REQTk3QzJFOUVBMDZEREI2MzMKKzoxMDc4MTAwMDVGRDZBMjdFRjkxNkQ3NDM3QUVBQkZEMDM1NjM3Mzc5NzMKKzoxMDc4MjAwMDM3N0VDNkNFN0ExODM3MUZGNkY5RTI0N0Q2N0JEMDFGQ0YKKzoxMDc4MzAwMEQ3N0Y3REVDM0UwRDA4QzQ5NjVGNEJFMTdBQzI3NDE2OEIKKzoxMDc4NDAwMEY1M0UxRkU3RDM3QkI5MEJFN0IzOTVEMTdDMEFDRkJFREEKKzoxMDc4NTAwMDdGNTczRUVBRTMyNkFFODdDNDhGRkJGQjE0MkUzRjdGQTMKKzoxMDc4NjAwMEY1MkJFODg3RjMxOTNERDdDMzAxNjI0MEQ3RjMwNDNERjgKKzoxMDc4NzAwMEJDQTI3MDNEMThGRTE2NjYwMUZFQ0Y0MzA1QTI3N0Q3NjUKKzoxMDc4ODAwMEZCNzk3MUYzOTBGRDJGMTU3MEZBREM5Q0I0MERFNUI5MEUKKzoxMDc4OTAwMEQzQzhGMUZFREM5MkMzOEY2MjFDNTNCNjNCQjM0NEQzMTIKKzoxMDc4QTAwMENBQTNGQ0NBQjNENkNGM0Y5NDAxRkI1RkREOUE0QTc2RTgKKzoxMDc4QjAwMEE2N0M1RkZERUNDMUI0MUZDMkZCRjMzQjU0MEZBQUJFMTQKKzoxMDc4QzAwMEQ1NTM5RjdFNjQxNEI2N0I1NjFGQzQ3OTYyQkQwNkZERjYKKzoxMDc4RDAwMDlGMEZCRTk2ODRFRDY2NkQ3MjBDNDM3Rjg5RkM3RUY2MjkKKzoxMDc4RTAwMEZBOUJCNUYyMjg3RTdBQURGNDI0RTlCRjVBRDhDN0JCMUIKKzoxMDc4RjAwMDQ2NzY4Q0NEMDI3OENGNUJBRjc4QjBEOUJDRTBGNzI3NjUKKzoxMDc5MDAwMDdEMEY3NTlENEQ3QTBGQzYzNzRBNTRFNkQ1MEYyM0QzQTgKKzoxMDc5MTAwMDdEMzIzRUFCNUI1RjNBOTQwOUY1NzVGQjQ2OTRFMEJBNjUKKzoxMDc5MjAwMDU2RTlCQ0I3MEQ0NjdBRDk2MjIwM0Y1OEZDRkUxODlEMzcKKzoxMDc5MzAwMDFDN0ZFMUZCOTAwRUJFNUY3NUE3QUQwQUUzMjJEMDZGRkUKKzoxMDc5NDAwMDNCOTYwRjE0NkVEM0EzMUYzRkU5MkNGMDM3RkVGRTk4MzEKKzoxMDc5NTAwMDBFNzhFNkQ5QjY4Nzg2ODBDRDAyNzg2QzZCNDJGQUQ4NkQKKzoxMDc5NjAwMDhCOEUwQjFDRTcwNTNEQzkwOTE2RTJFQjE4MjVGQ0NGRjEKKzoxMDc5NzAwMEYzRkVCM0M1QThDMkYzRUNEOTY1NDlBNTlDRkU2ODlGODgKKzoxMDc5ODAwMDkwQTkzQjYxN0Q1NTRGMEUyNjdBOURCRDNFOTZCRTY0MDMKKzoxMDc5OTAwMDNCMzlERjM5ODFEOEZBNzhCQzI4NzA0QTdGMDUyQjhDQjcKKzoxMDc5QTAwMEM2QUZGODc2MjlFM0ZENDZBNEM3RUE0NUMwQ0ZBM0U4RjEKKzoxMDc5QjAwMEE2RkE3NEIzMTFGNUFFRjg3MTUwODM2NDcyNUZGNTg0NjIKKzoxMDc5QzAwMDk3Q0M0REVCQjVGMEY1ODJDQTZCODZGNTlFQzM3RjcxRkYKKzoxMDc5RDAwMEJGQjk4Mjc2RkQ1Qzg1OTZDOEU2NURDN0NBREQwMENGN0IKKzoxMDc5RTAwMDc5MTM1OTA1M0UyNTNGM0MzRjMyMzgwNERCRUYzNTg0OUYKKzoxMDc5RjAwMDlGRkUyNUYxQzE0NEUyMDdFN0VEQTEyNEY0MkI2NTBBQkYKKzoxMDdBMDAwMEJGREU3OTc3MjgwOUY5REM0NTExQjdDMzdBMkNDRjZEMzEKKzoxMDdBMTAwMDAzNzkwMDc0RkRGMTI3NDY5MjBCNEI4MzA3OTM3MEJGRTcKKzoxMDdBMjAwMENFQkY2OEQxRTk2MDVGM0U2RTREMjk0MzdGRDBGOUUwNUIKKzoxMDdBMzAwMEVGOTI3MDVERTc4MjI5NjVFOEQ3RUI4OTRGQzRGMzM3OTEKKzoxMDdBNDAwMEE5MEY5Q0M0N0Y1RTBGN0E4RjUzMUJFQjQ0Rjg2MjkwQTIKKzoxMDdBNTAwMDIxMDNFNDRENEE3RDUxN0QzNzc0MkZCRjczMUFFQjhCQTAKKzoxMDdBNjAwMDMwNEYyM0YyMjM5QjY3MUI4NzEzQzVGMzNFM0I5Q0IyMjkKKzoxMDdBNzAwMDBERjc1QkYyRDk0QTg1RjcyRkJGOUZFQUJDM0FCRTVBOTEKKzoxMDdBODAwMEIxNkEwMEM1OTkzRTYzRUU1RUM4RTdFRjQ2REE4MEY5NTkKKzoxMDdBOTAwMDFEREU1RkQwMEJGNTBERjlGRUMxMzRFRjNENEVFOENGOTIKKzoxMDdBQTAwMDU1RDY0MUY5MDFBRTcxQ0NEMzAwNEQzRkQwN0JFRUI3MzYKKzoxMDdBQjAwMDAzRkNFRjY1MjBGRkYwNTlFQzMzOTJERkE2MzE5NUQ2MzkKKzoxMDdBQzAwMDM3NDM2NTIxMTVGMDdEMDZDQUU3MjE1NDI2N0Q2OEM2MzcKKzoxMDdBRDAwMDI2MjVEMDAwRUJCOTc3NzUyQ0JDNjZCNTk4QkFGMDA0QjIKKzoxMDdBRTAwMEZFOUJDMzgwQjEyMjIxNkU4QTZBMDdGRENGNDEzOTBDMEIKKzoxMDdBRjAwMEZCMzBEN0NDNDIwOUQwRUZEQ0VEQjFERkNENjMyMTlBNkEKKzoxMDdCMDAwMDRGRjVGM0RGOThCQURCOEZCRjhBRkQ3ODMwNEQ1Qjg0ODkKKzoxMDdCMTAwMEZCQTE0QzM0RDNCQzdFRkM4MjQyNzJEMjI5RkM5NTkxRUQKKzoxMDdCMjAwMEM3N0EwNTMwQUUzNjRGQ0FGRDc3RjhCRUQ1M0Q1MEE5QUQKKzoxMDdCMzAwMEREMEJGODc3NzFEMTBDRURERTE0NEEzREQxNTAxRjYxOTkKKzoxMDdCNDAwMDJEODk4NENGRjNDQTU5MjgwN0U2MzdBRjREMDkwRDRFNkEKKzoxMDdCNTAwMEVBRUE4RkZENDZFMTc2MUVFM0YxQ0VCRkJFQzNGN0YxNDAKKzoxMDdCNjAwMDJFQTEzRkNEODREN0E4OEZEQ0EwRTM3OTNEOTEwRDBBRUIKKzoxMDdCNzAwMEM5RDc1MUNGMkJGRTQ0RTBDRjMzQ0Q2MDJBMjI5RjEyQ0MKKzoxMDdCODAwMEVCQzZGNkJEQTAzQzlCRjkwOTRFQkY3NEU2RDNGQUU2RkUKKzoxMDdCOTAwMEIwMEUyM0E3QTM0MDQzMUE4QzVCN0IxNjc4MTNCQjFBNDUKKzoxMDdCQTAwMDdDQjg5RUY2RkQ3M0U2QTE3RERGODI3MzRFNDU3QzI4OEUKKzoxMDdCQjAwMDIxM0M5MUVGNDE0RjYyOTZFNENCQkZDN0ZERDNBMkUwRDkKKzoxMDdCQzAwMDVEQjUyOUI2Q0NCNjQ3OTU3QkUzRkU0MDM5NkFERjZBREUKKzoxMDdCRDAwMDc3N0U2M0QyQkFEOUFGQzczQUU1NUI2MEMwODRDMUQxQzIKKzoxMDdCRTAwMDc0QzJGNUYwMTM2MjNGMUZGQkZFQUMwQ0U0NEI2QjUwMEMKKzoxMDdCRjAwMDlGQ0UxNDFEOEM0NDNFQ0VBNDlGMjU2NDg2RkVBREMzNEIKKzoxMDdDMDAwMDU5OENERjA1RjQzRDJBQkZFMkZDRDFCOEY1RDk4Q0FEMjMKKzoxMDdDMTAwMDMzRjgyODdFMzE0M0VGM0Q4NEExQjZBMjc0REY2RjExQTMKKzoxMDdDMjAwMDRGNjZFOEI0NUM5NUUwQUExNTkwRkRCRDg4RTNDM0UzMTgKKzoxMDdDMzAwMEMzRUEwN0Q0Nzc2Mzc3Q0JGOUFGNTM4MjIxMURGMkE3NEMKKzoxMDdDNDAwMDNENUM1RjQ5MkM4RTE4N0M1MTc0RkY5RUUwQkJCRDBFREQKKzoxMDdDNTAwMDg0MEY2NTIxREVCREE0NTA5QzYwODNDMjFBMTU4MEIzRDkKKzoxMDdDNjAwMDBCRjYxOUU1RDMwNkU1RTQyMTk0NjcxQjZFNzVCMzA2QTAKKzoxMDdDNzAwMEE4MkZERTM5NjFGRTZCNjRCQjVCMjlDRkE4NjY2N0E5QkMKKzoxMDdDODAwMEJFQzY0NkVCRTdGQTczNDJGRDU2MURENEE3REY1MzM4NTQKKzoxMDdDOTAwMDBDRTkwREQ2N0RDRjQ0Nzg3RkMyRTlBNjc5NjVEODM4NDYKKzoxMDdDQTAwMEZFQjg5NkY5RjMxN0EwOUZGODgwNzdGRTZCODg3NzgzNkMKKzoxMDdDQjAwMEFERTQ4RjRCMDc1ODI1MjZEM0IzMDlGNTYyMTc1QkFBQUQKKzoxMDdDQzAwMDYwQkJFNUE5MEFDRjgzQTg2NDUzN0UzMzg4QjA1OUVEMjEKKzoxMDdDRDAwMDk1Q0M5RkM3RTBBOUE4QUMxMUZEQ0JFOTJBRThEOUZDNTcKKzoxMDdDRTAwMDdEMjM4RUYzNTgxMjlGNTdBQTRFN0ZDRjA0RDRGMzg3N0IKKzoxMDdDRjAwMEYxNzJGMjYyNDVEQjQ2RjI2QzJEQ0QyQkREQzQyQTcwQTkKKzoxMDdEMDAwMERERjgxRUVEMDI5ODg2RDY0QUY1MDE4MjUzRkE5OEZBRkMKKzoxMDdEMTAwMDIyOUM0NzdBMUZGRTc0MUE0M0Q5RDhDRjkxNEUzQ0YxNkEKKzoxMDdEMjAwMEU5NTA3RTJDMTQ3QUMwQzJBRDY1RTlDOEVGOEY5QzM3NEMKKzoxMDdEMzAwMEFCQzhENzhGQjhBNDNFMUJCMkExM0VDQkZBMTZGMkY2NjEKKzoxMDdENDAwMDQyREUyRTJDMUE5MzhFNDRFRENDOEQ2RDc3RDFBMEY1QUEKKzoxMDdENTAwMDFBOEU3MkVCQTg5RUUyNEY3RkIxNjlCRDFDRDBFRTA2NzEKKzoxMDdENjAwMDIzRUIzNkVGQUY1NzJBREZEN0JBMkYxNTE2ODhGMjYzMDkKKzoxMDdENzAwMEQ0NERCOTQ0RjY0MkREOTc2QUNDRkJGMzRCQ0MyQzEwQzIKKzoxMDdEODAwMEU1QzdBOEFFM0EzMDE2REJENUIwOEVFNTg4OEYzNUMxOTEKKzoxMDdEOTAwMDA0MTY4OEEyOEYxQkFDREQ4RjJCRTlBMkVFNEIzREYzQkUKKzoxMDdEQTAwMDc3M0JBRTMxRjZGRDk3MjlDQzlGRDI1REJCQjREOEY3QjcKKzoxMDdEQjAwMEIwOEU5OEYyRUUyRjNBRDc4MUVGRDlDODcwMTJGQTc1Q0IKKzoxMDdEQzAwMEM3QTM3Qzg2RjJDNTgwQ0U2RjAwQkU3NUM0QzBFNUVFNDkKKzoxMDdERDAwMDA1N0IzODQ2MkU1RjcwODdCOTVDNDZCRjk1OERDQkIzNjcKKzoxMDdERTAwMDA5QjhDRjZBMjQ2OTYyNjJENzM4QjIxRUJGNEY4RTVBNzMKKzoxMDdERjAwMEVGODUyOTQ2MTZBMkZEODlEMDNDMTA3RUZFRkU4QzZERDMKKzoxMDdFMDAwMDZDRkJENDg4RjkzQUQ1NkRGQjA5N0UxMjZGQTJFMUU4Q0MKKzoxMDdFMTAwMDhGOEU4MzM1NzQ4NDc0QzAzM0M2QTU2RTVGMzU2ODAwNTkKKzoxMDdFMjAwMEEwRTAwMUM5MUY5RTVFQTU4RDg2N0FCRDJFODY1RjI0QzcKKzoxMDdFMzAwMDE0NzdGMjBGNjI1NzhGNjE1NDhFRjhDRDMzQUJEMDZGNDkKKzoxMDdFNDAwMERCNTVFNkVEQkJCRURGMzEwRUVCOEIwN0YxRUYyN0E3NkQKKzoxMDdFNTAwMDNFRkJFNjMyNEE2QTY5RTY3QTk3MUFDOUY1MjY0Njk1RTQKKzoxMDdFNjAwMENENzE2NTFCOTQwNzQ3OTVFRDcxRjVDRUI4N0E1NzVDRDcKKzoxMDdFNzAwMDM5OUJCNzNGOUYxOENBRDU3QjE4QkIyN0Y1ODU3MTJBNTgKKzoxMDdFODAwMEYwQ0RGMzE5QTE2OTk4QzdCNkJBRTFEN0UzQ0E4MTlGQ0IKKzoxMDdFOTAwMEQ1MTQ3MzM5NUZEQkE2Nzg0ODVDMDlGOEQ1N0FCODFFMkIKKzoxMDdFQTAwMDZCRjM4NDhEOTgzRjk3NTBEQzcxMDhGOTRCRjU2RUM1RTQKKzoxMDdFQjAwMEFFMDAzREQ4ODJBRDIxMkFFMzc3RUVBOEVGODIwQTdEOUQKKzoxMDdFQzAwMDU3MUQzQzQ5REZGNUQ4N0ZBMThFRTg3RDU1RTEyOURFQkQKKzoxMDdFRDAwMDJFRjgyMUU5MTMyQjFBRTc1M0JFODA4Qzg3RUI5OTRGQkMKKzoxMDdFRTAwMENCNTJCQUUyRTE5MkNGNUVDOEQwMEUxMjlGRERBN0Q4ODYKKzoxMDdFRjAwMDkxM0UzQkYxMTRGQjhERjI0M0M5RjY3RjFBRENGNjQ3NDUKKzoxMDdGMDAwMDU0NTcxMjE2N0VCQTE0RjVFQkZGQUNGOTcwMDRFQTlCRDUKKzoxMDdGMTAwMDdGMTJGMjY0OUQxMjE4ODBFMzZFNjRCRTAxMjg0RjdGQzkKKzoxMDdGMjAwMDU0RDM2RkJGMEVEQTlEMzA4NDM3NjNDQzZGNEJFQTZCNEUKKzoxMDdGMzAwMDA0QkYxMzg5RTExQ0NDMEIwQzNDRjZFRkJDOUMxQURFOTEKKzoxMDdGNDAwMDhDRjBCQ0Y0NThDNzM4Q0NGQjNCOTExM0NFQzEzQ0MwN0QKKzoxMDdGNTAwMEVEQTlGRkM1Q0JGREMyOUJCMTdDRTRCMTMzQkMzQzM4N0QKKzoxMDdGNjAwMDlDQTM4N0VGN0JGQjNGMUM1NzBFREYzRjY1RUY5RUFFNjgKKzoxMDdGNzAwMDFGMTNGQzQ0Q0VBRkI2QUZENjlDOEE3QTVFMzU5NzQzQ0EKKzoxMDdGODAwMDlCQzE0NjMzMDNERjlDMzZGN0RDMEI0RjAxMUNBNkZEN0IKKzoxMDdGOTAwMDM0ODFGOEQ5NTNFNzI3OERFM0Y2ODJERkFCOTZBMDNGMTMKKzoxMDdGQTAwMDk5RkY5MTlDMjQ3RUFGOTI5RTkxODFCMjMxQjk2QjNGMzMKKzoxMDdGQjAwMDEyNzMzQkRDMjQ0N0FFQUI2RjQ1RkQyNTdEREEyMDkyODIKKzoxMDdGQzAwMDIzRTU0RUVEMEIxQzU3M0VGNzY3QzExM0RBN0Y5MTZBMkMKKzoxMDdGRDAwMEU3RkM1QkFGQTNGODdBRkFDRjEyNDlDRjVCNjNFMUVCMjIKKzoxMDdGRTAwMDAxQkFBMUZEQjU4OUZERjg5NTU4Q0ZBRjUyQjkxRDdBRjgKKzoxMDdGRjAwMEJGRjM2NkVBRTcyRUExREZCN0FDMEMzQzZCMDFGODFGQkMKKzoxMDgwMDAwMDk3NzkzQjZCQjlCREYwQzNBREMwNTc4MDhGQjczOEI0MUIKKzoxMDgwMTAwMDBDRTQyNzNGMTQ3OTc4OTI3RkUwRkJFNDI4M0JBOUE1ODQKKzoxMDgwMjAwMDA4Q0FCNjJFN0JCODY1ODI5NjYxNzVFMjMzNEQ4NzcxQkEKKzoxMDgwMzAwMDI0Qzk4RjVBRjJGOTc3NTIyRUE1MzdGMDcxRDNENzBDOTUKKzoxMDgwNDAwMEQ4ODZFQjQ4NTBCOTNGNkNFNjk0ODI2RDRCNDkyRjk4MjcKKzoxMDgwNTAwMDQ4RjM2NTlBOTZBMTQwN0ZBN0U3RjRENkExOUY0Q0VFMUUKKzoxMDgwNjAwMENGOUFCRTVBM0JBRDQ3QzQxOUU0M0VDOUZERkMyMjk1RTgKKzoxMDgwNzAwMERCRjczM0Y0QTA1N0MwM0EyREU5M0VFQTBGRjQ4QzIxMjgKKzoxMDgwODAwMEMyMUY0NzdBQzYxN0I4Qzc1MUYwNjU2QTc4MDRCRUZGQTkKKzoxMDgwOTAwMEZGMDg0RTFGN0QxQjcwQUE1OTA0RkM0Mjc3MTVGQzQyNTUKKzoxMDgwQTAwMEMwNkY5RDEyMzJBNDczN0U0MUY2M0RCRTQ3QjlEM0VFMzgKKzoxMDgwQjAwMEY0N0Q5RDFBOTVBRjMzRUQ2NzM1QTQ1N0NBNzkyNUZDMzkKKzoxMDgwQzAwMDY0NTdDNTBGRDhFNTc0MTZBRkY3OTlEMkY4N0U0OUZEMEQKKzoxMDgwRDAwMEQ0MjNGREFBNjI5QzEzQzdDRDE0NDczOTYxMEMxMkRGNkIKKzoxMDgwRTAwMDNDMDE3NkQ1NTJFNDJGMjIwRkEwRTRBN0YzOEVBMDdEQTkKKzoxMDgwRjAwMDJBRkJBRDQ5RDM3M0ZGQjREQzc3QzVEQjNBMkIxRkYzMDIKKzoxMDgxMDAwMDYyOThERjhDRUI5ODYwQTQ3RDk3NzJCN0M1QzFGMzVDNzEKKzoxMDgxMTAwMDVBMUVDOEEyM0M5NzhCMkNDQ0M4M0YzQjkyMTE3RjA0QkYKKzoxMDgxMjAwMDNDQTBGQUM4RDQzNEEyN0Y2OEVGQjc2MEZCMzlENzUxQkUKKzoxMDgxMzAwMDdCQzAwQjNGRjE4N0E5NTZCMjgzNUEzMDZFOEVGNTUzNDAKKzoxMDgxNDAwMDBCMDM5ODk3ODM3NjNDRTFEQjFDMUQ4RERCMERCRTcwMjUKKzoxMDgxNTAwMEZGNzc3RjlFRjcyMUYxMjZBRDgxRkI5OTk4QUEwRDk5QjMKKzoxMDgxNjAwMDEwMjVFNzZGNERFM0ZCOUM1MDFDN0VFOTNGNTBBRjVENEYKKzoxMDgxNzAwMDZEMjFCRDE2NjUyQ0M1QTg5QUQzQTkxRkQ4RkY2MTY5Q0EKKzoxMDgxODAwMERDNEY0MTc4NzZFRjIzODkyMkJGQ0U1MzgyNzA1RDkxMTgKKzoxMDgxOTAwMEM4RjE3MjkzODVDN0NGMzY4MTFFNEQ3QzUxRTBBRkNDQkMKKzoxMDgxQTAwMEVGRjMwOTdEMkY1Q0E1NEI0MjdENDE0QjkzNzYzM0M4OUQKKzoxMDgxQjAwMEY1MTJFMUJGODdGQUU5NjFFNTI0REE3RkQzRkRGQTkwOTEKKzoxMDgxQzAwMDA5RkRDQzREMzc2QkUxMjgzQjA2RkYzMEZFNzg4RkUwOTAKKzoxMDgxRDAwMEFCNkMzRDIzM0JFQjFFRkMyRTA5RkJCNzI2NjFCQ0Y1QzcKKzoxMDgxRTAwMDFFRkMxRUVEQzhDNTM3QzdDNDE1MjdBNjcxRkE5NkYzNDUKKzoxMDgxRjAwMDhCRTdGQjEzRTVCQzlBMUZEN0EyQzc5MUZEQzdGNzA3MTIKKzoxMDgyMDAwMDc2RURBNEI0NTQ4MjczQTgxN0VFRUY1MjNERUQ1RkZDRjcKKzoxMDgyMTAwMDNDQzNFQkI5MUYzRUJDM0U4RkYwNEVGNkQ3RDMzQ0ZGQkMKKzoxMDgyMjAwMEFDOEZEQ0E3ODAxQzlDMzU4NkRCRkJEMkZFOTkyOUVDNDkKKzoxMDgyMzAwMDcxQjYzOEQ2QkU0M0JGNEY2NzU5N0Y3OTM5REU1RUM0MDkKKzoxMDgyNDAwMDdDODFEOEY2NUM2RjQ5MTgxNDMxMTJEREJBOTU5OEY5MjMKKzoxMDgyNTAwMDRCNzhGNTA0ODcwN0FFMTE2RTUyRUUzRDZFMDEzQTAwODEKKzoxMDgyNjAwMDdDNTk4Rjc5OTU4MDVGRUIxRjQ4MjAzOUU2MzQwNjA2RUMKKzoxMDgyNzAwMDIwNUU2REM0N0MxRDkyQTdEQzhFRkZGQzQ4QUMzRjI2QkYKKzoxMDgyODAwMDdFRkY3RTlFMjZGRDZBRDc2NjdGM0Y4Mjc4RDE4REZENzgKKzoxMDgyOTAwMDVENjc4RDZDNDFGOEQ3NTkxOUQxRTc4NTdEODk0NDhGODkKKzoxMDgyQTAwMEFDNkY3ODFBRTZEMTVEREM2QjYyNDgwRkI1NEFCODAwNTYKKzoxMDgyQjAwMEY5RTAwNTQ1QUJBNDc2NEIxM0RDNDg5N0QyREZGMUMxNUEKKzoxMDgyQzAwMENCRENERjUxODczQjAzRUJBREYzRkYxN0U1NzFENUVENTkKKzoxMDgyRDAwMDhFQjVDQjJGQzA3RjU1NDA0NzE3NzRFMTEyRUM0RkYyOUIKKzoxMDgyRTAwMDE3RDBDQjM1RDJCN0FBNzg3Q0FCNTZDN0ZDNjhCN0REQzAKKzoxMDgyRjAwMEEwOUIzRTg3RjM4RDRDQjY4RERFOUYyQzU4MTBBNUY3QzIKKzoxMDgzMDAwMDQzQkI3NjI1OTlBMzIzRDI2MUI1RDg5NzVBREQyOTZBNTQKKzoxMDgzMTAwMDU3OERGOTU4QjgzRjY4QkZBMTFGMTAyQkEzRkNENkI1RTUKKzoxMDgzMjAwMEFCM0ZBNjdDQjBEQTlEQjFGODUzREQ4NTVGQ0EzNzBBNTIKKzoxMDgzMzAwMDdFMTc4NTZGQzQxRkZDODJCRjMwRUU4RjI5RTdGMUY5RUQKKzoxMDgzNDAwMDQ0NTE0RUE4RThBMEZDQjAzQUUxOEY0OTNEMTAxRThCODUKKzoxMDgzNTAwMDdDMkFCMTM4QzhBNkMzQjNFRTJDRDc1RjQ2QjU2RDNEQjUKKzoxMDgzNjAwMDg4NzZCQUEzQTIyMzA3QzlBQTRFRjg0MTI1RkVDODc5ODgKKzoxMDgzNzAwMDVFREZCNjU2OEY3NkE0RDQ3QkEyRUNEODAxMTM2M0ZDRTMKKzoxMDgzODAwMDE4Q0JFODNCQjQ4QjcxQkMzMEJFQ0E0MEY0RTJGMjcyNDkKKzoxMDgzOTAwMDlEOTA5NzA5Njg2MEEzNUM2REVFNEY3MjE1RTUxRUYyMjMKKzoxMDgzQTAwMDNCNjk1NzIzRkY0M0ZDMkE0QTJGM0I4RUY0RkY0NjdBNTIKKzoxMDgzQjAwMEQ5MUYzOTlGMDRCQzQ1M0IwMThEQjRFQjdCQzYzRjA5RjcKKzoxMDgzQzAwMDFGRDkwRUVERUI3RkVFOUYxNDdDOUM3MUJGRTQ4MjM3Q0EKKzoxMDgzRDAwMDUyRkYyOTFEOUNFRkU0QUY1N0Y0NEJBNjIzQkUyRjUwNEMKKzoxMDgzRTAwMERDRTk4OEVGMTcwNTdGM0NCQ0JGODBFMkEwRjJGRDE5RjUKKzoxMDgzRjAwMEJEOEZGQzhGRDJGRjM1MDdGRDdFRjBBQzE2RkM2ODk2NzIKKzoxMDg0MDAwMEYwOTdDRDkyN0VCMkY1QjFGMTVBRjQ1MzQ3OTdFNzRBMEYKKzoxMDg0MTAwMEJGRDkwRTUzNTcxRTEzRkFBOUNBNTkyODExRkFBQjQxRjYKKzoxMDg0MjAwMEJGMUIzRTgzQjFERkQ1QjIwODdENTdCN0ZCMUI1MzRDNTIKKzoxMDg0MzAwMDNDQjg4NUMzRjExRTgxNEY4RUYyODAxRUY5RDgwNjBCMjEKKzoxMDg0NDAwMEY3OUY0OUZFMzY2QUYxNTZDMjkzNUVDM0I0RkM4NzkwMkIKKzoxMDg0NTAwMDZFREUzMDkwRkZFNTdGMEIzQzkwNzA3OTMwQURFQ0NGNTUKKzoxMDg0NjAwMEI4QUY1NkJERjAwRjNFNjQyMkJFN0UxQUY0ODU1NkUxQzkKKzoxMDg0NzAwMEY3OTk4ODc2RjIxMkE2RTEzOTAxQTZEQTczQTNFRDY4QkUKKzoxMDg0ODAwMEY5NUNCNUQ3NTI4NUY4OTg5OUFFOEJDMUQ3RjYzNDAzMEQKKzoxMDg0OTAwMDk1QzkxRjQ2NzIyMzgxRjQwMjYwNzM0MzEwNUY0QjdBQzMKKzoxMDg0QTAwMDRCQjlDRDg2QTAxRkVFQTRCMEVCNkJFRkI0RjlCMEJGMTMKKzoxMDg0QjAwMEIwOEVGM0M1RkVFOTdDOUZGQkE3RjNCQzU5NTlFRUI0MUYKKzoxMDg0QzAwMDQzMDUzRUNBMzgyQkZBQTVBMkUzMTQ0MzNBREJBRjE1QTUKKzoxMDg0RDAwMEZBMkVBM0Y1QUU5QjIzRjJFODNCRTk0MjQ3N0MyRTYxREUKKzoxMDg0RTAwMDkwOTdFNEMzMERCQTMyRTI3MzkxOEY2QzZFODQ0QkM1RTIKKzoxMDg0RjAwMEM3RDU3MzcwMUQ5RjREQjFEMjc5Qzk3Qjg1OUZGQ0M2Q0UKKzoxMDg1MDAwMDc0OUU4NzI2RkREQkQ3RUEyNzJGNERFRkM0QzcxODNGOUYKKzoxMDg1MTAwMEY5NUVDMTE3RjczMjNFNUZGRjU5MkJGN0Y3QUFDQzhGRjAKKzoxMDg1MjAwMDdDNzI2RjcwNDAwMEU3NUIyOUZDMjNBODdGMjFCRjhFMUYKKzoxMDg1MzAwMEJDQzRGNzkxQTk1QzVGREJEQjM2Mzg4MDc0NzREMkUwOTEKKzoxMDg1NDAwMERCMzAxM0ZENERBRDA2RjIxQjMyMzVGMEVDRDNEOENGNDYKKzoxMDg1NTAwMEFCMTkxRUNDQjNCQUEwOEI2Q0Y5M0RCNERCN0JGNjU3REMKKzoxMDg1NjAwMDU5MTg1N0RCMkJFMjFCRDVDNjUwMDFFOUY1MjJBRkI0RjEKKzoxMDg1NzAwMDNBMjk1NDgwN0VBQTU3QzQ3RTU1NUJBMTBDRUY1MzJDMzgKKzoxMDg1ODAwMEJFQkJEMjUzQkJFMjhGRjgxREJFM0YxNUUwNzZDMzI5QjgKKzoxMDg1OTAwMEM2RjFDMEJGOUFDNzk3MDFCRTE5MzM3MUJFMkJEMzI5NEMKKzoxMDg1QTAwMDdFODlGQjgyRkJGMEMxQkVDMUI0QUU3NTA2RDE3RTBGRTEKKzoxMDg1QjAwMEY3NzMyQjEzMEJBNzkxOUM1OTY1NEE0MUY4NUZGNDFBODYKKzoxMDg1QzAwMDI5MkZCQTZFMERENzZCNjdFOERDNUIxNjIxRUY3RDM1N0UKKzoxMDg1RDAwMDgxRDYzN0IzRTUyOEM1OTVFQTFFOTk0REU3NERFQkU2MDAKKzoxMDg1RTAwMDJFQkU5REZEOTM3ODBCQ0FBOTY4RkZGRTA1MTZDOTI1MEUKKzoxMDg1RjAwMDdCQkRBQTc3MzAwNEYzQjhEMDM2QzBDM0MzQTVGQ0ZDNUEKKzoxMDg2MDAwMDUyQURDOEJGM0Q2RDYwMUFDRTNCQjJDRjEwRThFRTVDRjQKKzoxMDg2MTAwMDY1NEZGRDkzODNCMzg0Q0I0QjFDQTcyRTNBQUU0NUYyMzYKKzoxMDg2MjAwMDI1MzZDRTc1QTVGMjA1NDNCOEUwMDExODdGNzU4QTZGMkYKKzoxMDg2MzAwMDc1QkFEMDNCMTE1RTc1QUY2NjEwMUZGREUwRTEyRjcyNzkKKzoxMDg2NDAwMDQ5RUY2OUU2RjE5NEQzMDY2RDFBRDI4OUEzM0M2NDlDODQKKzoxMDg2NTAwMDFFQzU1RkI3MEIzQTlFNjExMkZBMkRGMEMxNjhCQTk3M0EKKzoxMDg2NjAwMEY1MjU2NUIxNzQyNjlGNEYwQTdBNEIxNDc5MTg5N0Q3NzAKKzoxMDg2NzAwMENCM0NCRjQ5MjY5NEM3RENGNTg1RkRCQUY5MzkzNDExRTYKKzoxMDg2ODAwMERGMUM3NTM2QjIxRkYzRDlBQTgzNDUxNDNGQ0Q1QjFDOUUKKzoxMDg2OTAwMDIyQkEwNDc4ODdEMDNFMzlCRDIxOTFGMzEzNTgyNkY2Q0IKKzoxMDg2QTAwMDMzNkIyNDIzRkQ3QTk2OUVFNzk1Q0MzMjgxQkVDRUY1QkUKKzoxMDg2QjAwMDAyNkE3RjY2NDMzQUMxQTE2NDE5RDc1MzIzMkYyOUM0QTQKKzoxMDg2QzAwMDE3NjU5Q0I3OTJGMUVGNzczNTlFRjRFQkExN0RFNTBFMkYKKzoxMDg2RDAwMEE1MDg1ODJCQUI2QzJDQTVCQzkzQjk5QkYyNjlGRjQ3M0UKKzoxMDg2RTAwMDA5RkUzQkMzQTQxNTZDNDA3Q0RCQzVFMzg0MzAxRUQ5NzYKKzoxMDg2RjAwMDA1RDU5ODVCMzc4Q0Y4OTIxMUU1NkJENTBFODVFMjI1OTAKKzoxMDg3MDAwMDcyRkRGMTcxNTUxNjg4OEQ0NzhEMEE3MkZFOEQ3MjgzNDgKKzoxMDg3MTAwMDQ1RTk5MzUyMEVBMUJDNjA3MTdBNkUyQzVFRjhBRjRBQTcKKzoxMDg3MjAwMDlFQzZDQjgzNzdEM0FGNTZBRjhDOTVBN0VGMjFGRjRBNzgKKzoxMDg3MzAwMEJENUM5RTgyREQ3MDFDRjFCMEE0OENEMzcxQTQ5NUM3ODIKKzoxMDg3NDAwMDlGNkE1ODNEOEZDMzA5NzlENkI5MkUyMTBGQ0ZFOEI5NUEKKzoxMDg3NTAwMEZDOUQ2NTVBNEJDRjhCRTkzQzBFMzU5Nzg1NDUxQzJBMEQKKzoxMDg3NjAwMDYyQzRGOUY1ODQ1RjE3RDM2NTdFN0IyQzdFNDlCQzhBOTEKKzoxMDg3NzAwMDIwOUU0MTdGRDU2NzU5RThCQjMwNUVGNTYyMTZBQTE5ODUKKzoxMDg3ODAwMEMyOUY4OTQzNDhCRTczMzk2RkU2NzIxRTlGRDZBQjkwNzUKKzoxMDg3OTAwMEY3RjE3MjNFNUVBRUM3Q0I3MzE0NjcyOEI3MjUzRTQ1MkUKKzoxMDg3QTAwMEM3MjM1MDRGMUFCNTM4QTBFN0ZFRTY2QzNCRTY2NUNBMTIKKzoxMDg3QjAwMEZEQkRERkE5MzlCMjUzQkJGNEMwQkE2MzY2QjM3QjI4RjEKKzoxMDg3QzAwMDk2QkRBQ0I3MERGRDY4QTU5QjczQTBCRTRFRTVFN0MzOTMKKzoxMDg3RDAwMDEzMDA0RTVCRTFGRDY2NjE4N0FDQ0FFMTc0RTYxMkY5RjUKKzoxMDg3RTAwMDU3MDZENUNCOEE2Q0I4NEYxREU0Mzc4OEE0MzJDQUE3ODgKKzoxMDg3RjAwMDk3RjBERDlDMDhERjYxM0U0MjBFQzc4RkNFRUZDREFDMTcKKzoxMDg4MDAwMEQxMUFGNTdERDk1RTBCQzlBOTRCN0IxMkU5MUMyMDUzMDcKKzoxMDg4MTAwMDdENzkwRUU4MkZFRDRGNjAzRjQwRjlDMkRFNDREMjEzNjAKKzoxMDg4MjAwMDJFMDhCOUUxOTRGRTE5QjY5Q0Y2QTM4RjhCRUZCMzlGODcKKzoxMDg4MzAwMDk1NjVBMTlGOUIyOUUzQjIxODlEOEZFN0ZBNkM4REEzRTQKKzoxMDg4NDAwMEE3Rjg4NEE4Q0ZFRkI4OTNFMzk5ODlFNEY1MjU0N0Y4MTIKKzoxMDg4NTAwMDdFMkNDMzdDMjhCRjNCQ0JDNUY3QkQ2RUU3OThBMjlGOUIKKzoxMDg4NjAwMDYxNUU4NkQ3RTZFMTUwRjUxNUExRkU2MUQyMkZCQ0QzM0IKKzoxMDg4NzAwMEFDQzc3QjEyMTY0NzFFODA3NUQ0RTREODI4NkZCQzNDNjkKKzoxMDg4ODAwMEVGRkQ3N0E3NDJGOUEzOUQwNjNBNUYzQUU3QTk0OUJERjQKKzoxMDg4OTAwMDQyRjg5OUFBQjlCQUEzOTMzOTAxNDNDQ0I5QzU3OTNCMzcKKzoxMDg4QTAwMDYyQ0IzNUMxRDg3MjVEREMzRDA1OEJERURGRkE2NjdCQkQKKzoxMDg4QjAwMDU0N0RCOTRCOUNFQjc0MzMwRkU2QkQzM0ZERERCRDdDQkQKKzoxMDg4QzAwMERERjA1REY5RkM2MjQ5RTBDREY2N0U5NDM3Nzg5QjhCNTQKKzoxMDg4RDAwMEQzQjMxMUY1QTNFOTg4MEZERDdDQTc3M0YxN0QzNTk5M0EKKzoxMDg4RTAwMEVBQ0ZFMkY5MDNEMzJCMjZCQUNGMjBEREU1OUJFQzRBOTEKKzoxMDg4RjAwMDQ1M0IyQTcyMDhGN0QzOTQ3NzdFMDhDQUQzQjJCQ0FGM0YKKzoxMDg5MDAwMDI4NkU3OEU5NDFFNjQxRjg1Q0IyOTQ5MjlFNzQ2OTgzREUKKzoxMDg5MTAwMEM1OEQ3NjYzNEJBRThERjBBMEU1NTUyNUEwNzBCQjYyOEEKKzoxMDg5MjAwMEZDMDhFMEFGNTUzNDE1NThFRkZBNUIzRkUyODc2NTk4RDUKKzoxMDg5MzAwMDk5REY3RjAwNTY5NTBCRjk5NTQ2NzZERTk5MDk1NkZCMkYKKzoxMDg5NDAwMDMyRjhBRTZBM0Q5N0RCRDVBQzIzMDlGOUMwMDZCOTdGOTIKKzoxMDg5NTAwMEZBRTc4RDY2Rjg2NzdFQTMzNjYwMjlDQzc3OUVENzRBMDIKKzoxMDg5NjAwMEU3QTRENEFGNTVCQTFGNjAwNTc2MTk2NTk3RDRCQjM4MTQKKzoxMDg5NzAwMDNGQTgzMTg3OERBNTM4RkU1NzBCMkJEMDA1MjhGRDc5RjAKKzoxMDg5ODAwMDI2ODM0RkMzRjM3ODg2REQ0NUExMkM3ODM1N0JEMTQxMTIKKzoxMDg5OTAwMEIyQkYzQUUzRjZGQjM4REY5QUZEQzA3RTdBQUY0Q0FDNEIKKzoxMDg5QTAwMEEwRjU5RTgxRjUyMjVDMEU2RTMwRDE3QUNGRTREOEM4NTYKKzoxMDg5QjAwMEZFM0RCMzk5REJGOUIzRURDNjgwOTlGNDk2MkY1M0YwRTEKKzoxMDg5QzAwMDFDRjM5OUNEMDZCQTNGRTA3Mjc4REM0MkU3ODkzRkRDQzAKKzoxMDg5RDAwMEY0M0FGOTFCM0Y2NDdDNUNGRjRFM0RFOTNEMUZEQTIzMEUKKzoxMDg5RTAwMDI1MjE4NEEzQkIzRTA5RjVFNkFBRjU3M0U4M0NGMkVDMjkKKzoxMDg5RjAwMENEN0EyRkYyQjNEOTlCRUZGQkZERjVFODI3OUI3ODU3OTMKKzoxMDhBMDAwMDMxMkVFOTI2QzdDMjM0QjdBREFCNUVFQUJCNkFGMkM4MDUKKzoxMDhBMTAwMEE3OTEwRTZGRkE3QTRDQzc0REE4Nzc2RDA2M0FDOUU3NTEKKzoxMDhBMjAwMEU3MUQ1MERGNkZERjdDMEJFOUI3QjMyNzU4MURCODJFNjkKKzoxMDhBMzAwMEY3QTZBN0M2QTIxQ0ZBNzA0MjI2OUQ5RjlFRkQ4MkMyODEKKzoxMDhBNDAwMEYwQ0E4Q0Q5OEU0NTY5Rjg3RUI2QTI3QUJCQzNBN0ExQkQKKzoxMDhBNTAwMDJFN0VFRUI5MzRDRkU2MDlFMTc3N0ZENDEzOUUwMDVEMTgKKzoxMDhBNjAwMEREODk3MkI4NjZCMzgxRjRFN0Y2ODlDN0RGOURFQUVDNjkKKzoxMDhBNzAwMEEyMkI2NUUyRkFEQjQ3NjFGQjY3MENENEJFNTM2RkRBQzkKKzoxMDhBODAwMEY0M0Q4OTJGMkM1NDgyRjYxOTg3NUIzQzlEOTlGMjE2OTAKKzoxMDhBOTAwMDE3RTBCQ0UyRTk2REY2QjJGQTAyMUVBN0JCMzZCQTYzNzQKKzoxMDhBQTAwMDlCMzhEREZEOUI0QkRDRkY3MUY1NzRCN0Q3OTU3QUY1RUMKKzoxMDhBQjAwMDc0QzdCMjkzNjNFNEYwRTVGQ0NENEZGMDk0NzEwRUIzNEMKKzoxMDhBQzAwMDg3Njk0RkQ5MjhBRUFEMjlDMDdGM0ZDMDgwRkUwODdDQTIKKzoxMDhBRDAwMEYyNzM2MkVBREYxNkVDNzgwQkYxRDhFNTNCODJGM0M4NUIKKzoxMDhBRTAwMDYzNUExMUNBNEQ3N0M0NUU4NjY3QzA2QzQyMkY2NDlCN0YKKzoxMDhBRjAwMDRDRDI5RTIwM0I2MTVEMkE3QjdBNTU5NDVGRTRDRkEyRTUKKzoxMDhCMDAwMDNGRTAwMzdGQzQ3RTJFQkNGN0Q1MjFEQ0E3REFEQ0YzN0YKKzoxMDhCMTAwMDQzRDBCRjVERjdFNTVGMjgyRTZBNkJFMzcxNzU5QjI3MzUKKzoxMDhCMjAwMDQyRjkwNjA2QTc5N0YwNTBGMkY3M0EwRjk3M0ZGMUVCOUMKKzoxMDhCMzAwMDJBQzhFMEY2NjE5RDMzNDJGREU4MzNERDU0NkUxMTcxQzEKKzoxMDhCNDAwMEE0OEQ4QkFDRTQzN0RFRTgwQzU4QjhERkMzQ0Y1MDNFQzEKKzoxMDhCNTAwMDhEMUZBOUU3RjE0MEExQjc3RDRGRjg1RENEQzUwNzE5N0QKKzoxMDhCNjAwMEM2MDFEOTY4OUU4RkY3NTZGMTQxMzUwNUNBQkYxRjc5RjYKKzoxMDhCNzAwMEIzODdDRTUxMTYzRkQ5RDQxQkQ3M0REQTIwRUFGQkQwQkMKKzoxMDhCODAwMDNEMjdGRkFFOTU1MkZEMDI5N0RFOERGNDNEQkU5OEU3N0UKKzoxMDhCOTAwMEEzQjJBQTI0RjJFN0JDNTVGQzgxRjNERUE4Rjk3Qjk5QzUKKzoxMDhCQTAwMEQ5NkQwM0JDOTkwOEM0MUE5REZGNzhGQjY4OEJEQjE2NEUKKzoxMDhCQjAwMDg1M0Y5RjM1MkIxNTVDN0Y3NkY3OUEzQzk4RkI2QjQ4NzkKKzoxMDhCQzAwMDFFMTdDN0MyNjM4MUNCNDhFM0JFOTE1RUNBMzIwMENFOTYKKzoxMDhCRDAwMDM3RERDOEY3RTNEQzBCQTYwMEYyQzE3M0UyNUM1MjNDNjAKKzoxMDhCRTAwMEZDN0E2NTA4RkM1MTA3QzRFNDI3Mzg4REMxNUM5NDkzNzYKKzoxMDhCRjAwMDFGMkJCMURGQ0Q2REQyNTM3RUMwOUMyNjg1MDU2MEJDOTYKKzoxMDhDMDAwMDczQ0ZFRUNBNDU3RUZFRDE1M0JCNzJBNzQ3Q0QyN0ZFNzgKKzoxMDhDMTAwMDNCRjlDQ0M4ODhGNTdGQzZGQkIzN0JGMjYzQ0I3NjE3RjQKKzoxMDhDMjAwMEQ3MzM5RkI5NEY1N0ZCOEI1NTdGMjczRkY2RjQzNkUxN0IKKzoxMDhDMzAwMDA3RDdCNEJFNEVCNEFCNDRGQkY4RkVDQTA1N0UyOEJCRDIKKzoxMDhDNDAwMDE1RjI5RjQ4M0ZFRUE5QzM0RjYyQzRBODczRkYyQzZENzUKKzoxMDhDNTAwMEY5QkFFODNDNTJGOTFDMjVGNjZEMTJFRTFCMkNDNUQyNzAKKzoxMDhDNjAwMEM0Q0IzREVENTc0RkY0Nzg0MkM4MjFCOTZGQTc5QUZBQUIKKzoxMDhDNzAwMEY0NDIzODFBNkI2RDJBRTNFNzAzMEI1MUVGREZDQ0FDRkIKKzoxMDhDODAwMDFFQTRBNzJGNDQzRUIxRDMwQTRGRDBEMzhDOTkyRTFCREMKKzoxMDhDOTAwMEYyMzM3OTFGQzM0RkFDNDlEQkYwRjk4NUM4Mzc3NjVBRjgKKzoxMDhDQTAwMEUxMDlGREU0NjQxNjUyN0Y1RkU4QkM2NDFGRkU0NERGMDcKKzoxMDhDQjAwMDRDRTc0NjZGQzlFMDcwNDg2NzIxNDU0MTU2M0JFRjY1NzgKKzoxMDhDQzAwMDg1RjJFNDlBNjJFMTlERDZDMEU1NDhBNEQyNDhGMjRCMTEKKzoxMDhDRDAwMEMyRkQ4NkU5Rjc5MzFERENDRDdFQUQ0NzNDQ0ExQ0M5QjkKKzoxMDhDRTAwMERGRjkzM0YyODUxRTFEQTY3ODg5NjUyNEIzQTM5RkEwMDIKKzoxMDhDRjAwMEUxN0EzRkNENDNFRTU3MUQ2RkNFOTQzNjg1RjQ2N0NDQjUKKzoxMDhEMDAwMEYzNDk0OEE2QjhCMDVGM0M5OTJEOTk3NUM2NDkxMjg0QkQKKzoxMDhEMTAwMEREQ0NFMkUyMjJFOUEwNzc2MzNCMzk0RjI4NTNCRUQwOTUKKzoxMDhEMjAwMDFBNDdCMEI5ODBDNzk1NDkyRkM1N0VGMUZERjQ0MTJBOTUKKzoxMDhEMzAwMEM1MTVCMDlENzFEODk1RjFBRjEzNEY0NTNFRTg3OEY5NTAKKzoxMDhENDAwMEJFQ0FEQTZEMUM2NjNDOUVDQkMyN0QwMEY5ODg3QTIxRDIKKzoxMDhENTAwMEYzMTg2MkNFNjU2RDAyN0QxQUVEM0QxOUU3RDZFQjgyMDAKKzoxMDhENjAwMDQ1MkVCMjRGM0FDMkU4ODczMTk2OThERDI4NkYxM0Y0NEEKKzoxMDhENzAwMEMxNDJEQ0JGRjhCODM3QjRDQkU3RjkxNkQ5MEU5NDMzNEIKKzoxMDhEODAwMEYyREM1NUVEQTIzMTVFOENDNzgxRkVFMTM3RTNGRTREOEEKKzoxMDhEOTAwMEUwRkI1N0ZCNDAyOUJENTcyNjE2MkU0NUZDQUE1QkNDQUQKKzoxMDhEQTAwMEU4N0U4ODMxNkRBRDk0MEY1NjU3QzFGNUIxQkFERDI3MTUKKzoxMDhEQjAwMDhEMENGMDc3QkFGMDBCMzFFMTE3NEYxM0ZCN0E0QUU4Q0MKKzoxMDhEQzAwMERGNUQ3MUJERjAxNkNDQjc2Rjk5OTM0REU3QUNFM0YzNUYKKzoxMDhERDAwMDY3QUUzNUFFN0IzMTExMDAzMjM0MkE1RUQ3Q0JDQ0U1OUQKKzoxMDhERTAwMDhDRDg3RjQ5REYzMjdFOTczOEM4OUI4RjlBQjg2MUJEOTcKKzoxMDhERjAwMEU5ODg3NUM0QjVFNEM3ODQxRjJFQ0ZGRTI3RjkzMUZFN0MKKzoxMDhFMDAwMEZBREIzMTNGQzY4QzVBQkVBOEM3Njk4MDFDRUQzQzQ3Q0YKKzoxMDhFMTAwMDY5NzE1MzdDQUZCMzFFRUZCRjMwRUY1NkM0NzgzOUI3REEKKzoxMDhFMjAwMERGQUM1MjlFQUYyODlGNUE4RDdFQjEzNTE2MTYzMzVFNDkKKzoxMDhFMzAwMEY0RkNENEI4RkUwREQwQkZDRDJEREJFQkM2NjM3RjhGMjUKKzoxMDhFNDAwMDBEMTM2NTdGRTU2QUNDMDc1QTYzODhFRDhGNTA1MDlFRkQKKzoxMDhFNTAwMEZCMzQ3NzhEQjczOTNCRjhGMEVBRDE1REYyMUNFNEZCQzcKKzoxMDhFNjAwMDYxOTQxNzUyQUVBRjM4M0VCRTc5QTgxQkU5RUI3M0NBQzYKKzoxMDhFNzAwMDlCOTZGMkI5Q0VDOUYzNjVFMkY5RDhEQjgyOUY4MzVFOTcKKzoxMDhFODAwMDNDMTY0NUVFOEEyOUYzRTlCRTg4Q0UzODc3NUJBNTg2ODUKKzoxMDhFOTAwMEZBQjA4QzczRDcyREY2NTJGRTM0RTgwM0ZGOTE0MUZBRjUKKzoxMDhFQTAwMEMwRjkzM0ZCMTlFQTlERTdDODJFQThGQjUyRTVGRTI2NjAKKzoxMDhFQjAwMEQwMkJGMEZFMUY3MzVCMjlGOTU1MzE5REI3NUZENEZFQUYKKzoxMDhFQzAwMENGMTU3MjBBNzU3OEE0ODdCQTREM0Y3ODRBMEZGNTQzREIKKzoxMDhFRDAwMDMzQjUzMEY1NkJFOEZFRkVBRkJGNjU3MDNEQkVBRUIwOUEKKzoxMDhFRTAwMDZDMDNGMjAzQjY1REExRkJCNzU2MTU3RTQ2N0E0N0VEREIKKzoxMDhFRjAwMDlFOUI0NzQ0RTdGRkNGRDlGRDE4Q0YxRkRGNjFFODc2N0YKKzoxMDhGMDAwMEZEN0ZDQkUwN0E2QUVEOUU5N0M4NkY3QTJFQzA4RjJERDkKKzoxMDhGMTAwMDU1QTk4MTk1QTg4NzU2NTVFOTUwRjM2MkM1ODFDQUE5MUMKKzoxMDhGMjAwMEE0MEY0QzgxNzVDMEJBRkU5Q0MxRTE1M0I3NjM5MjFGNzgKKzoxMDhGMzAwMENGMjNENEMxN0YwQUJDREFFODlENDU3NkMxQzYyOTY2MzUKKzoxMDhGNDAwMDFCQzY5N0VBMEFBN0NGMjdGQ0I3NUIzNTVDN0ZGQzNDQzIKKzoxMDhGNTAwMEJCRTJFOTU2M0EzN0JFNkFCN0ExMDJGNUE4MTJEMDlCMjgKKzoxMDhGNjAwMEZFMERFNjlCOTMzQ0FFQzIwMzdDMjk0QkRGNUFGNDYzQjMKKzoxMDhGNzAwMDFCRTYxNzc0MkY5N0I3NjQ3MTNEQTA1MUYxRkFFRjI4RTMKKzoxMDhGODAwMDI2N0YyOThCQ0U1N0NBREJDREY1MzM3QkE2MzFDNjNGNzIKKzoxMDhGOTAwMDZGQ0ZFNEY3NEM4REY2Nzc4QzQxOUM3QjU1MEQyN0EwNjUKKzoxMDhGQTAwMDlFNUNDN0I0NEZEMUZFNjU1RTlCOUJGQ0M0OENFNzEzRUYKKzoxMDhGQjAwMDM4OTdCOEM5NEY2Qzc2ODY3RjNFOTRGNDI4OTVFMkU5REQKKzoxMDhGQzAwMEQyQkVCOEIwODdGQkQ3OTY2NUZBNzIzMkQxM0ZBODBGRjAKKzoxMDhGRDAwMDNGN0EwN0MyRURFN0FBRjAzNzczM0U5MzNCQzkzNjBDRTAKKzoxMDhGRTAwMEZENjExNjY3RjhEMTBBMzdFNTE5OTE1RkEyRDc3NzFCQTMKKzoxMDhGRjAwMDY5MUY1RTc1MzIzQkMyNjc4Q0JGNTI1NUEyRTQ4Q0U0OTgKKzoxMDkwMDAwMDFCNjMzQUNGNEQzOUM5MEY1QkM2RDkxQUVCMDdCQjc1NDUKKzoxMDkwMTAwMEM2NEMyOERBRjg0RDRBOTc5RTcwRjhBQkM5MkFCRTk0MjAKKzoxMDkwMjAwMEZBODNDRUVDMjMzQkE3N0MwQUQ4OEQ4ODk3Q0IyMzg3ODUKKzoxMDkwMzAwMDc0RThGNzc3NzY5MEZFNTgxMzU0Njg5QzlBQzJERjUwMTQKKzoxMDkwNDAwMDFFRTAzQzkxNkZENjk5RjdBNTg2MjkwRkVFM0I5OTA5NTIKKzoxMDkwNTAwMEMyOEZEOUM4RjE5Mjc1OTA1RENDOUVFN0YwMDdGRTQ0QUYKKzoxMDkwNjAwMEY5NzE1RDdBRkM1MjZBMjdGQjMzOEE3ODQ1OERGMEUzMEIKKzoxMDkwNzAwMDAwQTBBOEJFMkM1M0ZBRTE5Njg5QTdDQ0U3RTNFMzMyMUYKKzoxMDkwODAwMEQ1NUQxMkVENzc1ODM3MDEyNDA5Q0RDQjlEODRGMzdENTIKKzoxMDkwOTAwMEM0RUFCRDJEMTNFNjc1MEFGMDE3RDc3OUFBMjk4MUVFMjcKKzoxMDkwQTAwMDAzNUJBNzc0NjhFOEQ3RjQxN0YxQkNFMTc4M0NGMjg5NTgKKzoxMDkwQjAwMDcxN0IxRDg4OEM0NTc5MTJEOUQzNTNERTMwQ0YxM0RFRjYKKzoxMDkwQzAwMDMwRTIzQUNBREIyRkRFRkRFOTU4QzQwRjU2QzE4ODFFRDQKKzoxMDkwRDAwMDZCNzc1RjVEREVGMDRDQjExRkZGQ0ZFNDBEN0IxNDZENEQKKzoxMDkwRTAwMDFCM0NFRkNGNzQ3MEZENEFFNjBEN0JGODdFQzk3ODZCQjAKKzoxMDkwRjAwMDdDQkVGMDg1OEM5MENBRjNGQUMyNUI5RTQyQkI3REI3MDIKKzoxMDkxMDAwMDg5RjI2MUM2RUY3RUZEMThGQTM1Qzc5QjU5OTBFMkNGMTAKKzoxMDkxMTAwMDcxRkE0M0M0Mzk2OTA5RDJDOUM1NEZDRTZDNzk4ODYxRTcKKzoxMDkxMjAwMEJFRjlDQjFFN0UxRTM2NTYxRkU4QzkxRUEwOTg0OTk0NzQKKzoxMDkxMzAwMEREQjgzNjUzRThFN0RGOTIzRDIwRjk3NTlEQjBBRjNFQ0MKKzoxMDkxNDAwMDU2MjI4RjE0RTBGQUY2RTlFREREOUQ1RkRBMjJDN0VGRDMKKzoxMDkxNTAwMDI5REZBNUFERkI3QzE3RTk4RkFFMDhFN0M3QzRCRjc2NTIKKzoxMDkxNjAwMDc0RjY3NzZERjFCNEU3NTA3Njc2MTM0RjUzNDVGRTlBNTcKKzoxMDkxNzAwMEFBNzBENkMxMUMzQ0JGNDlDNkQzRDRENjAxMTQyNzMzMkMKKzoxMDkxODAwMDc1QzVEMzQyQUM5Qjc4OUEyQUUyNTMyQjBDNUEyNUY5MjkKKzoxMDkxOTAwMDY5RjY5OURDREM4RUY2MTJGRjZBNkM0REY1MjA3RkFCMjgKKzoxMDkxQTAwMDlCN0JFRTQ1M0M3QUExM0FDNkJBRjA5QzVGQTM4MDdGRDgKKzoxMDkxQjAwMEY1RDVDN0QzREEzM0JCODlBNzZEMTU3QURCMDc4NUJBMzYKKzoxMDkxQzAwMDkwMTFFMEJBOTU3MUZFRUI2RjkzNzEzNTFERDlCNTkxOTEKKzoxMDkxRDAwMDg3NzM2OERFQ0E0NDMzQ0RGQjgzNTc0RERCRDAzRjM1MDAKKzoxMDkxRTAwMDQzQzZDQjVFRTVGRUI1MTkyMjJFRjZDMUM0MDJGMjNGOUUKKzoxMDkxRjAwMEY1MDRFNzE5NERCMTcxODc3NzA1OUMyRjU5NEFDOTRGN0UKKzoxMDkyMDAwMDdGRkYyRjI2OTA3RjdFMTZGQUY3RkJBMDdGQUI1OUY4RTEKKzoxMDkyMTAwMEVCQjk5RkNGRERDNEVGMzE3MEVGNTBFODFFNTk0NDEzMTYKKzoxMDkyMjAwMDFERTlBNDc2QkE0Rjc2MUVCMEQxOERDODdBRkQ4MDM1N0YKKzoxMDkyMzAwMERGODFENzhBNEU0MTdEQzhERDA4NjU1MEZBRDU5NUFBRjEKKzoxMDkyNDAwMERGMDVFREI2MUU0QjIwQkZFMjBBQTc1QkU0RTdGMUY4QUQKKzoxMDkyNTAwMEI1N0ZCNTEyRThDN0ZCQTVGQkUzRkM4RDNBMERGQkI5NjIKKzoxMDkyNjAwMDk0QzlFNTdDNTI5NkIxREJGQjI4MUEwRDIyNEUyMkM2MkEKKzoxMDkyNzAwMDVCQ0E2MERGRTFBOTUzRjg3Mzg1Qjg5RjMwMUUxRUIyNDgKKzoxMDkyODAwMEJGNDY0M0JEMTlGRDdCOTExQzdFMEZDRDI1QTMzNjg1QkUKKzoxMDkyOTAwMEZDQ0VDOTA1NzRERjU0NjM2MjdENTMwNUFGMjc5QUJEQzgKKzoxMDkyQTAwMDY0ODk3OEE5RkVCQjJBNTc0ODk5M0I5OUYyQTgzMzQ1QUYKKzoxMDkyQjAwMDVFNjIxQzlDNjczNkM3OTZFM0UzNDdGMUU3RTM2NjMwREUKKzoxMDkyQzAwMDVGRkY4QzNFOTc5RjFGM0I4RkZDMTZGQUJGQjQyQTVGNEYKKzoxMDkyRDAwMEVDOEI4N0UyMjg4RDA2RjcxRkYyMjkwRUNCRUY5MzVBMEQKKzoxMDkyRTAwMDlBQ0RFMUE2Q0JFMUNGREU4RTcyQkExNzEwRTg4NUVCRkUKKzoxMDkyRjAwMDcxOENDRkJGRjc3NzlEMEFEMjRCQTM4M0UzRUQ3Rjc3QzUKKzoxMDkzMDAwMERFRjFGMzREQ0IyQUUwN0E4RDgzRDM2QkUzNEEyNUMwOUYKKzoxMDkzMTAwMEUxQzVFNzdEQjU3RTkyRTJBQzZGRDc0RkYyODFFMjc5OEQKKzoxMDkzMjAwMDNBOTQ0RkRGMTE3RkYwM0Y2QzIwQkFEQjZCRTFFNzVFRDAKKzoxMDkzMzAwMDI1QkZBMjg0MjNCNDNGODVCRDdCMjMyQUQzMTg1NzNEODQKKzoxMDkzNDAwMEJCOUNFRTg1REE1OEQ1M0IwOUUzQUU2MzI2RDk2ODFEOTAKKzoxMDkzNTAwMEI1QUZGMjczRDUzNThCQzNCOTg4RDdCNTY1RTE4MkZBNUQKKzoxMDkzNjAwMDZFRTA4QTAzQTg5MkJGNDJCQkU5NEVDNkVGMTc2QThBMzUKKzoxMDkzNzAwMDhEMjNDNkM3ODc1N0E3NjhFM0IzNDZBMEJERjQ0MUVCNkEKKzoxMDkzODAwMEVCQjhERkFEMTY5MkFGQjU4QjIzNEZBM0ZGQzA5N0UyQ0EKKzoxMDkzOTAwMDlCOTQwNUY4NzFGRTgxRTM2MzE1Mzc3RDQ2RkFGQ0M1QTEKKzoxMDkzQTAwMDdERkRFOTNDRThGNEM2RDg3MzcxNkM3NTZDN0M5MjM1MzAKKzoxMDkzQjAwMDI1OTNERjlEQjVDNEJFQzc3MzVCMzFERjVEMTZBRkU0OTcKKzoxMDkzQzAwMEZBQ0QzQUEzNkYwMEVBOUYzN0REQzhGMzMxM0U5OUEzODcKKzoxMDkzRDAwMDYzQjhBRjlGNThGOEZFRkIxRjRFMTRGQ0RBNTMxMDJERjQKKzoxMDkzRTAwMDBGRUE3QkRDNUY2ODM3MDhGMzAyNzg5RUFDNkM1RjgzMjIKKzoxMDkzRjAwMEZCMEJGQjVBMkRGNkY3OTM5N0JFNTM4MEZCN0JCRUY1MTQKKzoxMDk0MDAwMDNCMDVCOEJGRUIwQ0NEMUFEMjQ3NTFCQTZGMjFDMkUzNkUKKzoxMDk0MTAwMEY0Q0Q1RUQyMEY2NTVFRjBENUUyNURDM0I3OEM3N0Q3MzEKKzoxMDk0MjAwMDJBOEY5QkIzRkUzNTc5OEM3RkQxN0U5MzU3QkZEMkZCQjkKKzoxMDk0MzAwMDJEMjQ1RkY4NzlFMjJFRkZERDM5QkE1N0VERTI5NzNBMzUKKzoxMDk0NDAwMDA1Rjk3MTRGRkRFNTBCM0RDRjY1NjY3RUQ0QzM0QUNBNzEKKzoxMDk0NTAwMEMyRjQ1REM5REY3NTBDRjU0MUE5MDdDN0NGRkY0OTMxREIKKzoxMDk0NjAwMEZGOUQ1OTlBMDlFNUEwRjRGNzU2ODlCRUNEODFDRkI5ODEKKzoxMDk0NzAwMEJFQkQ1RDIxN0ZBRUQ5RUQ0RjFBNDVGNkQ1Q0NFMTdBNjAKKzoxMDk0ODAwMEUyMkZGRjQ2RTc0MjU4OUI2MjQ3M0I2NUNFRjZBNTU0NjQKKzoxMDk0OTAwMDdGNjFGNzBDQUFENzk5NDMyMUI0Qzc2QUEwMUVDQjJCRDIKKzoxMDk0QTAwMDQ2QzdFNjc5MUI3N0YyNzg5MEI0N0Y2MTFFN0FENEQ3RUQKKzoxMDk0QjAwMDEyOUMxMTIzRTI2NzJERUFENzMwQzU1QTk1RkJCRDZCOEMKKzoxMDk0QzAwMDlEQ0NFMzY3QTgwRkM3REE4QjMyQUVCQkQxQ0JFRkVERjMKKzoxMDk0RDAwMEQ5RDhBNkQwRkQ1RDY5NDY1RjdFMzZFRTZCNUM3Qzc3QTEKKzoxMDk0RTAwMDdGOTY3NjBFRjE0RUM2RTcxRjRDRDMwRTIyREQzQThERTUKKzoxMDk0RjAwMDJDOTdGMkY5MENGMjVDNUFFQ0I5Q0Y5RUYyRTQ4RTc2MUUKKzoxMDk1MDAwMEUyQzE5NUY0QThBOUE0MkZGRDk1Nzk0OTVGN0EwNzJGQTgKKzoxMDk1MTAwMENEMjQzREVBNEVEMkFGRTRGQkNCRjNFNDAyMzFGMUZDQzMKKzoxMDk1MjAwMDU5RTI5Q0VFMkM3MTRFMTdGOTdFMjg4RUVGNDc5N0FCQ0YKKzoxMDk1MzAwMEEzRjJFNDQyRERFNTNCNDRFNUM5NDU3RjE3OUQyNzE3Q0IKKzoxMDk1NDAwMDhBRTE4RjlDOUZBNEVCMTc1MDFDQkQwRUU4NjZEMUIwM0EKKzoxMDk1NTAwMDJFQkNBRTY2RTI2RjdERTQwMzNBMzdCNEMzNDQ3RUJBRjQKKzoxMDk1NjAwMDZBOTFDNzVCNTc3NThBRUM5RjNBM0M4N0M0RTk1QkUzMTUKKzoxMDk1NzAwMEU3RTlCOTdFNTUwRDc2MjVFNTMzMDc2M0YzN0Q5NUVDNzQKKzoxMDk1ODAwMDZGNTdGRjk2RUQ3QUYyQzdEQkIyQTU5REM4RTk1QkFFRDcKKzoxMDk1OTAwMDRCQUVBM0JBNERFMUY0MTgzN0NGNzg3QjNBREVBRjJFNEQKKzoxMDk1QTAwMEVERTFBQkU1NzNFRTZGNzlEREQ3Q0FFNzA2QzdDMUUxNDAKKzoxMDk1QjAwMDVGRTU3Mzk3QzUyN0ZBNDY5MjNDREY0MjdDRTIyMzc3NEEKKzoxMDk1QzAwMDczMUFCQTI4NjU5RTc0RDMzRTlFMjczRDU2NkZEMzc4OTIKKzoxMDk1RDAwMDNDNTRDRkYzMjVFMkUzQzJFRUIxMTRGNzk0NzE2OEYzODMKKzoxMDk1RTAwMENCRkFDMEIyN0M2QUVGQzE3Q0I0OUE3RDg5OTRCRjUwM0IKKzoxMDk1RjAwMEU1QUUyMjNEM0UzRTFFM0E5N0I1OEVDNUFERjgyQjNCRkIKKzoxMDk2MDAwMDQyRTdERUZFQkI3OTA4REZDRjRFNzQxMjlGNzJCM0ZDRDcKKzoxMDk2MTAwMDZCQ0M0M0I4M0JGQjFBRTJBMTA3NkQ5RkE3RjhBMkYwMDEKKzoxMDk2MjAwMEE1NkMxMDE4MDQ4MzdBQ0UzNzlCMkJGNjNGNDFFNEFCMzAKKzoxMDk2MzAwMDk4NTUzRjczNDQ3RERGRDM3NzBCQjJCOTNGRjFBMEM4OTMKKzoxMDk2NDAwMDkzNUE5Mzk4NDBGNzM3Qjg4Q0ZDOUM4NzRCQzdGM0I5NzMKKzoxMDk2NTAwMDg2NjY3QTE3RTJGQ0NENkVCRTlGNEZFQ0Y5MDFDMzczQUMKKzoxMDk2NjAwMDdCNEYxODgyNzQ5RjgyQkZDNkU2NDFCOTI4RkQ1OEIyNkQKKzoxMDk2NzAwMEZGNzZFMTVGQkQ1QTNBNUFGOTNGQ0MzRjFFOTU3NDczQUQKKzoxMDk2ODAwMEI1RjFCQ0Y1MDA4MzI4RkE4QUE3ODc5RUJFRUI4OUJGOTcKKzoxMDk2OTAwMDZDQ0ZGNjNFQzFGMTQyMUI0MjcxOTBBQkU0NEIwOUM1NjEKKzoxMDk2QTAwMEMwQjc1MUVFRUYzNEI5RDExRTQxQkYwQ0M5REJENTE5OUIKKzoxMDk2QjAwMEQyOUVFN0Y3NDJBQ0M5MjFCOUY4ODk4NURCMjdGMkRDRjUKKzoxMDk2QzAwMDk0NUNGRjJFQjlGRTZGNDk2RkI0QTQ3QkY3NjQ0MzdGQUYKKzoxMDk2RDAwMEE3NEIzNTNBMjdCMTIyOTFDQjk3QzhCMzNDMUYyOUZFM0YKKzoxMDk2RTAwMEZDNTBCQzVDOTFFNzVGRTQ3OEJGRkJCRkNDNTc4RjdEM0IKKzoxMDk2RjAwMDRCN0MxNUU0MkNFOTFEM0RDNjdEMkZGQkRFQ0ZFRkMxNzEKKzoxMDk3MDAwMDI5RUJEMDQ0RkUwRDlERkI5MEYzQUFFQkUwNzk3QzY3M0EKKzoxMDk3MTAwMEM1RkNFNEZCOTBEMDczMDZFNzY4MUYyMTVFOUQ3RkNGRjgKKzoxMDk3MjAwMDZDQzZCODZBNzEzMUU3OUZCNTVFMUJDNTI1NkE4MzNDN0MKKzoxMDk3MzAwMDVGQTc3NjMxMjMzRjgyM0MyNzNDREJFNUZCMUNGNzZGQkMKKzoxMDk3NDAwMEM1NzExQkRENUY1QkJCN0I2QjUzNkZDQTY3RjA5MUJFNUUKKzoxMDk3NTAwMDc4RTEzREZFM0VEREU1RkIwMkRCRDUyRDBFQzdDNDNGQzMKKzoxMDk3NjAwMDRBQkVGOTdDNzk0NTMxQ0Q5N0ZDMDA0RTUzRUNGOUFCRkMKKzoxMDk3NzAwMDhDMUNDRTZGRTQzMzJENDdDMjE3RUMxREY4RUU3QzE1MjAKKzoxMDk3ODAwMENGM0ZBRjczNkFGNjUyQ0E2M0UwRkVGNTA0NzcwN0Y5N0MKKzoxMDk3OTAwMDk1NkE3NzkyOTA2MDk0MEM4QkY1M0ZDQjI2QkNBOUREM0YKKzoxMDk3QTAwMDU5NUE0NEY3MzYwNDJENDU3NDBGRDE5RkY4QkQ1REU3MzMKKzoxMDk3QjAwMDFGQzgwQ0U4QjkzRjNFMjk2NzA0OUUzQjA5REM4QTdBNDIKKzoxMDk3QzAwMDZCMUU4QzgzMkFFRUY5RDY1QjhCQzhERjE4NDc3NzkyMjUKKzoxMDk3RDAwMERFM0FDRkRERkVEMDFDNjg1MEJBRTg3MTlEODFDQjQ5REUKKzoxMDk3RTAwMDI5REZGRTkxRURFNkYxMTBBN0M4NDc2QzlCQzA2NkRBNTEKKzoxMDk3RjAwMEJBQ0EzNjY3NkM5RUU2Q0VBQzlCRkY4MUZCRjM4RjZDREEKKzoxMDk4MDAwMDU1QzREMTc5REMzRURGMENENjZDRUZDQkYxMzA1RkM0QjAKKzoxMDk4MTAwMEVEMjc4ODdDMEJFNjM3NzdFNTU5RjRCRTcyREM1RUNFMjcKKzoxMDk4MjAwMEFGOTNFRjhCQjg3REMyOTdFMjc3MjJFQzQ2QzI4QkM0MzAKKzoxMDk4MzAwMDI2Q0UzNzE4RTAwNUVBRURBMzIzMUQ2M0YwQkM1QkRGRkQKKzoxMDk4NDAwMDk2RDA2ODg0NTcyRjA0M0Y5RUEzNjFFMTlGMEZDNTc4OEYKKzoxMDk4NTAwMDQ4OEEzQTFBRTMyMTVCMTYwRDNCODA3MTVBNzU2NUM3MzkKKzoxMDk4NjAwMDc3NzE2QkRDQ0RGNjMyMzQ1OTY3QkJCQzM3RTQxMDdGQkYKKzoxMDk4NzAwMEE5MkY0NEZDMkZGQkEzODFFNzQ3QUU0QzIwNzlERjkyNTAKKzoxMDk4ODAwMDVCNERGOTkxMTc4RTlCNjJDRTIzQzUzRkZENkM5OTBCMDIKKzoxMDk4OTAwMEZENTBCRDlCREVBNjc4NDRFMjRFQTVEQkJDRDc5RkU2MUIKKzoxMDk4QTAwMEQ4NDRGRUU0MzIxN0ZBQjUxMjlCM0FGQzIzRDE0RkYzQTkKKzoxMDk4QjAwMEIwQzJFRjAwODVEOTJCMkVGNDI3QTgzQUQ0M0I2NkVDMzIKKzoxMDk4QzAwMEU2RTdFNTY3MzQzQkNBQ0NDNDRGMTUxRUNGMTlFRDI0M0IKKzoxMDk4RDAwMDNFQTlBRUJDNEQ4Nzc2OUZCQTk0RDE3RDdCRjM3M0I4MTkKKzoxMDk4RTAwMDVGQkM1RjhCNUQ4N0ZCRkVEQkFGRjVEREM2RTk3QzM5RDYKKzoxMDk4RjAwMDNBMTk1NzM0MjJCODZBNEM5MTQzOThEQTI5RTM4QjMyRUIKKzoxMDk5MDAwMENGQUVBNzdCRUNBNTNDOEFENzY3MkZEMzYzODUzQ0VBMTMKKzoxMDk5MTAwMEQ0RTdFM0YwQjhBN0VGMjQ3RTRCN0NGRUFEODE5MTFFMjcKKzoxMDk5MjAwMEY2NUJDNTRDRTdERTI0NUUzN0NBRjMwNzVGNzMzRjcxMTEKKzoxMDk5MzAwMDlFQzhERjM5QjVFQUJGODZGMDdCMDI2NDdDMjZDMEVGQTMKKzoxMDk5NDAwMDcxMzU4NDk3NjcxMUJDQzIzN0ZBNzFERDNCMURCQURBRjUKKzoxMDk5NTAwMDQxRTQ1RkFCQTU3RTU2RjI3QkYyRjI5QUZBMkMxQjU5REEKKzoxMDk5NjAwMDhDNEYzQjUzNjAwQUE3RjZDRUNCNDNCQUY0MDMxRUY0RTgKKzoxMDk5NzAwMEVCMDYwRjZFQ0FFMTc5NTJFQUNBMDREQTM3NzUyREREQkIKKzoxMDk5ODAwMDEwQ0U1NDQ3MUFFRDlCRkExOERGOUZFQjczMzgzQzY1RjUKKzoxMDk5OTAwMDdDNThGQTQxMDdFN0Y4RDY2MDNFNzBFNzM5QjU0NTU2N0UKKzoxMDk5QTAwMDdFNEU0RDlDQUI0RTVDNzRGQzA1M0NGRkI1NDVGOEEzNjgKKzoxMDk5QjAwMDBGQkMzQTkwN0VERkUzRDI0QTU1NDEzREY1OTJBMzkyMjcKKzoxMDk5QzAwMDdFQ0Y2QUEzRDhENzQ0QjU4M0Q5NkREMUY4Nzk4MEYyMTgKKzoxMDk5RDAwMDc0N0JFRkUzRjk4NkFBMzgzN0FFQUU3NDZFNDU3ODk2OUQKKzoxMDk5RTAwMDNCN0Q5NDhGRkNEREM2MTBGRDA0QzZBQkY2RDMxNEY3QTcKKzoxMDk5RjAwMDAzQkQ4OENFMDc5RkRCQTM0OEJEMjg0NjFFNEFCQjJENkEKKzoxMDlBMDAwMERFMUU3QjUxRjJDREZGMjEzRDY5NEYyNzlGQkU0NjNCQjUKKzoxMDlBMTAwMDhCQzVEQTlCOURFREE1RkQxODZGNEZDNDdEREY5M0ZFQ0UKKzoxMDlBMjAwMEMzMzQ3RjRDREVDRDExQjFFRjUyQkU2NzBBREUyOEYzOUUKKzoxMDlBMzAwMDcxM0FDRjg5QjM4MDA1Q0Y3MTRDNDFBMjFDRDE5NTk3NjMKKzoxMDlBNDAwMEM0NDRCRUQyN0FDNUVBNDE3REE5QTdCQ0E0Q0VCQzIxM0MKKzoxMDlBNTAwMDU2M0Y5NEZCMzdFQkJGODM0Rjk5RDcyNEYzOTYyQzk4NEUKKzoxMDlBNjAwMEJGOTI3Mjc5RkU4QTA1RjM1NzUyRjA3NzUwRjg3OTczRjYKKzoxMDlBNzAwMDk5N0ZEMjYwNzA1MzNFOEJGRjQxNDY3MTQ5NjU2MjA1MDQKKzoxMDlBODAwMEY5RkY5MkJENDZDMkJGOEIyQ0IwMDE3RjA3QzAzRkQ5MDIKKzoxMDlBOTAwMDQ2RTdFQUYxOUMxM0UyN0Q0NDcxNTFCRjYzMkEzNEQ5NTEKKzoxMDlBQTAwMDVFODdFRDNCRUY5M0FDNjQ1NDlGREM1N0NCNDAzRENDREQKKzoxMDlBQjAwMDAyRjU3OENGNzVFNzM5RjM5OUZDREVGREY4RkMxNTk5Q0UKKzoxMDlBQzAwMDQ3MjVFM0NBOTlGRDVGNTZEMENGOEE2MTA0Q0E2N0Y4N0IKKzoxMDlBRDAwMEIxRjgyRTlGRjdEM0YyMjMzN0YxOERCNDA2OUUyNzE1RTgKKzoxMDlBRTAwMEI5OUVEOUQxQ0Y1RjI2Rjk4RjM5NzY1RkQ3MjlCRTdDNTEKKzoxMDlBRjAwMEE0Q0Y3NTU2N0VDRkMyNjZFNjY5RDI0M0I5M0RBNzM3N0IKKzoxMDlCMDAwMEVERTM0NkU2REVBRjIzODZERDRDQkZEQkYxQkM1M0QzOEQKKzoxMDlCMTAwMEU3QTY3NkUxOTM5QzE3NUJDRkQ3N0QxMUNGQUQyOTVEOEEKKzoxMDlCMjAwMEUzNUQ5Q0YzRjc1Q0Q0QUZDQURBNEMxQzJGRTNDNkRGQ0QKKzoxMDlCMzAwMEQ4NzlDRjREQzA4MkYyQzQ5NUNCRjFDMTEzQTdFRkNBM0IKKzoxMDlCNDAwMEE3MkI1Nzg5QzlGQjkzRTNGN0I0M0U4OTlGNTdEMkUzMEMKKzoxMDlCNTAwMDI1RkVGNTg0NkZGRTMyQjE0RjI3MTI0OEZGOTBGODc2NEMKKzoxMDlCNjAwMDYwQzkwRUJBNEZCMjdENDk5MDlFMTcyRDRBNTA4RkU3QkIKKzoxMDlCNzAwMDg3MkQ5MTY5QzgxOTczRjJCMkVFQzA3QjUwMkUyNjQ2MkMKKzoxMDlCODAwMDcyRjExRTk1MDE2RUI3MTdFRjUxQjk5ODFBMzk4MUU1MzgKKzoxMDlCOTAwMEVCOUZGOEJFOTdFQUZCNDVCNkUwQkQyQTc3RTQxREJCMTQKKzoxMDlCQTAwMDgzRUE3MTNGMzMxOTJCREE3MkU0MEVCRjBEQ0ZBOTg0MUIKKzoxMDlCQjAwMDk3NzdBMERDMkE4RUNCOEI4OUJCRkYyMTQxRkMwRTU0MEEKKzoxMDlCQzAwMEJBQ0Q0OEZBNjRCQTg4MTNCMjcyQTFENzYzNDQwQkNBRkIKKzoxMDlCRDAwMDBEMTk0NTE0MTdCNDMxRjdDRTBFQUNDRjM2RjE3QjIyRjgKKzoxMDlCRTAwMDE4RTAzRkQ2RjdDQkU3RjkxNThDQUY5QjY1MEI3RjM3QjUKKzoxMDlCRjAwMDBCRkJFOTc3MURGMzFERjQ3RDI3MUZERjY5MTJGMTJFQTIKKzoxMDlDMDAwMDNFRkVEMTk3Nzg1QzUyRTYwOTMzNjZDRjQxN0RDOEU2QzcKKzoxMDlDMTAwMDY2MzE2NTc5N0YwQTUzRUQzOTc4NUY0MjgzRjQyNzhBOEMKKzoxMDlDMjAwMEYyMkIwOUJFNDlCOTUxNzJGOUU4Q0QzRjE5NDRCRjJGNTMKKzoxMDlDMzAwMEYzRjJDRkZBMjJERkJDQzUxODdCM0ZCNzdDMjZCQjM5RDUKKzoxMDlDNDAwMDlGQkMyOEVFQTFCQzJGQzE3Nzc3RUUwOEZDN0Q5OTY5RjcKKzoxMDlDNTAwMDYzRjE0QUUxMjkyOUE1NDYwN0U5NkZDRkVBOTE0RkE1QUIKKzoxMDlDNjAwMDBBRkM3MDRDRTZGMzczOTQ3QjE1RkM1RDE3NzkwRjY0NjYKKzoxMDlDNzAwMEFBNEYyNTNGMDFGM0I1RTg1MUFFQTY5RUY2NTJGRTYxMEMKKzoxMDlDODAwMEI1Mzk5MjhCQkZCRkYzOTZEOTU3ODVGM0JDNTQ3OUYyOUYKKzoxMDlDOTAwMDdFOEEzRjY2MUUzRDgxRjkyMjQ3MERDRDYzOTI1MDhFMkMKKzoxMDlDQTAwMEU0OEI3QjM4MzBDMDBCRTU0MzU5Nzk2NDBGNzZGMjg3M0IKKzoxMDlDQjAwMDdFMEFDNTQ3Qzc0RkU2RTc3MUM3QjFBMDhBRkIzQ0Q2MEQKKzoxMDlDQzAwMENFQ0Y4NzhEMkRDRUY3MzRDMDc4RTM0NUJFQzlEODYzOUIKKzoxMDlDRDAwMERFMjRFNDZGNjM3RjEwNTZGOTNEMjExMTM1M0FCRjQzMEUKKzoxMDlDRTAwMDNFOTlDQkUwOEVBNjg3NUJERDUxNjU4NkY3NTVDNzk2MUEKKzoxMDlDRjAwMEJGRTc4OTJEREYzMUYyRUJGRUQxRTVDMThBRDY4MEVCREIKKzoxMDlEMDAwMDdDNDUxMUY3NkQwMDdGRTFFQkUyNzk4Q0JGMTJGNkRDNDgKKzoxMDlEMTAwMDQwMTczM0U3NjE5RUE1NTNGMUEzQkQzMDcwNTcyNkM1QTgKKzoxMDlEMjAwMDZENzY4RDY0NTQ0RURCNjFERTY2OEU1RUZGNUExRDhGNEMKKzoxMDlEMzAwMDZCMEJCRkJBRkM3RDJBQUM0Mzc5RkJGMjdCNjkwNEFGQTUKKzoxMDlENDAwMDM0MUJGMDVCMjc3MTFGQzJCNzAzODI2RTBGMDgzQTJERDgKKzoxMDlENTAwMEM5MzI1QjkxRkYxRjMwQjgzNzExOUUyNzlBRERFOEE3MDMKKzoxMDlENjAwMERBOUY2OEE0RkI3RjFCRTZGM0RGQjc1MDkyQ0NDQzA4RTgKKzoxMDlENzAwMEZERUFBN0YzMzJCNDYzMzc0MkJEQkVDNDRDRjkyOTA3RUMKKzoxMDlEODAwMDQ0REU3N0MzODMyQUY5QjlCMDFFRUY0MUQ0M0Y2MjI1ODAKKzoxMDlEOTAwMDdGNzk3OTUyRTFERDU4QUY0RjMyRDJCOThCRkQ4OTI1RjkKKzoxMDlEQTAwMDNFMzExRUZEMkVDMUY2NDQ3MzA4N0YyNzIzRkUxRUQ2Q0EKKzoxMDlEQjAwMEEzMzgyRjg0MUJDQ0VCMjkzRTBGQTI0NzdEODk5MUY0NTkKKzoxMDlEQzAwMDcwNzkzRTFGRkFBMTc4OUUzRUQzNENFMzFENzBEOEY3MDAKKzoxMDlERDAwMDIzREUzNTdDNDQ5QTFFRDQ4Rjc0NjMzRTk5QzRFRkYyMUYKKzoxMDlERTAwMEE0OTFGNEJCMzM0MDdEN0RBM0VGRDlEN0E3NzlEQ0ZDRTgKKzoxMDlERjAwMDFDMzBGRjNEOTVDMkNFREY1NzgxNjFBMTFEQkFENTE5MzgKKzoxMDlFMDAwMEQxMkQ4RjBGRTY0OEI4MzM1NUMzRjYxOTRDOTZGOUY5QTIKKzoxMDlFMTAwMEI1QjRDRTcyQTk0QUY3MkQyOUIyQkM5NENBOEY4QjdBRjkKKzoxMDlFMjAwMDc5NkY2QzZBMUVFNzUzNEFEQkVCN0Y0M0JDRUQ5QjA0MDIKKzoxMDlFMzAwMDcwODE3REYyMjQ3NDdGN0VFQUI0RTBFRjk3RUY1Rjg5NTIKKzoxMDlFNDAwMDBCRkRGRTBBQUU3MzUwRDdGQTBGMzgzQzJFNkY1NEI5OTMKKzoxMDlFNTAwMDlCN0QwOTIwQkVDNUVGQ0IwMThCQzc4RDdFQjYyQkY3NEUKKzoxMDlFNjAwMEM3RTEyQUQ3QTFDRkU0RjBFQzVDNDc0QUY3RUI0OENEMzUKKzoxMDlFNzAwMEUzRUIwODhBNzNFM0YxRjU0QTlFRUVEQjVFNjdCN0Y4MjEKKzoxMDlFODAwMEY3MkZBRjMzMkQ3NjlEREZFMjNDQzNDQUI3MzA0RjdENEQKKzoxMDlFOTAwMDJFQ0NDRkQ2MzUzRkZBRjlCODEyRTQ5QjFDRkZDNjg5MDkKKzoxMDlFQTAwMDdDNjk1NjE4OUJFN0M0NDY3QUNDNUM1RjhDQ0Q2QkJBNTQKKzoxMDlFQjAwMDQ1RDlENDg4RjJGNTcxMTEzNzdGNUREMEQ1QTE4NEZGRTMKKzoxMDlFQzAwMEQ1MTdGNUFERDdBNzE1QjQxM0JGRURCNUI0MTE4OTRCQjAKKzoxMDlFRDAwMEYyNjdDOUZGMkY2NTlDMkNDMTMyQzg4MTAxNzkyMDY3QzgKKzoxMDlFRTAwMEVFRUY3RDc0MUE3NkRFRUU3OEJDMkZDQTJCRTA5QkQ3OUUKKzoxMDlFRjAwMEU1OERCODdDOUU5MjdFM0JFNzBCRjQ4Qjc0MjRFOTM3QUEKKzoxMDlGMDAwMDdFRkU5MjhFRDhFRDQxNEExMEREQ0M0MkY0NzQzMTlFMzMKKzoxMDlGMTAwMDhGMEY3QTA5REQ3M0NGREMzOTVERUIwMzIyMUY2QkFFNDcKKzoxMDlGMjAwMEU3RUI1OEVBQTc3OURGRTI3ODk0RjIxMDZGQzlGN0REMjIKKzoxMDlGMzAwMDk0MDdGQjNENjVFOEE3NzRGRjE0NzM1NUY2MjczQjRENjYKKzoxMDlGNDAwMEQxQjRGRjlCRjNDNThDN0Y3QzJGRjVGQzc4QkRGRTRBMTYKKzoxMDlGNTAwMDc5RTk3MjlFRjFGQzUwQ0U0Nzk5Qjg4M0Y0RjgzQUQwNzMKKzoxMDlGNjAwMEUzNzlERUJBNDJGQ0JFQUU0QUM3RjlGMDZFODVGNEZBNzgKKzoxMDlGNzAwMDVBOTAzMzI4QTdFNEJEQ0MzNzE1NTgxQkYxOUVDREJEQjAKKzoxMDlGODAwMDA2RUU0RkY1QkY2NDcyQzdERTRCMTU5RkJGMkVFQzg5RkUKKzoxMDlGOTAwMEM1NENEQTBCRkM3RThCMUEzQkJGNzc0QUM4OTk5NkZCRkYKKzoxMDlGQTAwMDdBQ0I3QkE5QjgzQzA0MzkxNTczMkY1NUE1M0JGNjVFRDcKKzoxMDlGQjAwMEFBMUVFQzA1QjAwQjQ4M0Y2M0JENzRDMjJFRTA3MkJBMTYKKzoxMDlGQzAwMEU1N0FCN0REQ0ZDOEZGQ0M3RjI3NzRBQTUxRTg4MzAwQkMKKzoxMDlGRDAwMDhCQjRBRTdCRjNDMDBFQTBGQjAwMUJGM0YyQzVCRDY0RDcKKzoxMDlGRTAwMDAxRkVCQjJDNDJGRjhGRjc0NzE3QTVGQjU2MjA5RUNDRTYKKzoxMDlGRjAwMDFDQTRFNUUyNEYwNENEMzA3MjdGMzNFMERCQTYwRTg2NzEKKzoxMEEwMDAwMDY5OThGNURCRjE1RUQ5NUI1OUZEM0JCQTNFODQ2RjBGNzEKKzoxMEEwMTAwMDEzQkUwREZDOTRERjM3REI4NTZGOEZFNEE1NzJCOTg0MjYKKzoxMEEwMjAwMDQyRTY0QTc0MUM3MUZBMUVDNzcxNUIxQ0MxM0ZFMTNERDgKKzoxMEEwMzAwMEY4MUJEQjRDMDQ2Rjk5RTcxQTRGREY1MUYzMzk2REUwRTEKKzoxMEEwNDAwMEYzNzFFQUY1MzQ5RjI3QkE5QkNGRDVFMDdEMzQ1RUE1NDYKKzoxMEEwNTAwMDMzOEVERjNERTEzRjlFMjc0OTFDRDY4NUZGODMxNURGMDgKKzoxMEEwNjAwMDhCMzg2RTI3MUQyQ0U3NzZENzY1RjNENkRCNjhCRkVGRkMKKzoxMEEwNzAwMDlDQ0FFMzcyNzUwOUQyNEVENkM2NjdBNEExMUY5MjhGRkYKKzoxMEEwODAwMDdGRTc0QThFMTc3NzU2RjJCQ0E0MDk2RDM1MTQ4NzYzQjMKKzoxMEEwOTAwMEU1M0NBRUU2ODFGRkQxRUZGQzA4RkUzNkQ5NTk2NDQwQkQKKzoxMEEwQTAwMEQ0RkIyQkJCREI4MDdFQ0VDOUUzNjNFMzZGNTNDQ0I3MUQKKzoxMEEwQjAwMDUwQkNFRkNFQzk4Njk4REYzOTk1NzA5ODIyN0U0NzdERDcKKzoxMEEwQzAwMDRBRENFRjlCQzZDMzI1M0U2RUQ3QzkwRkM0N0FCM0YwRjYKKzoxMEEwRDAwMDc3N0ZFMDk5Q0RGODM5OUUwQ0YxN0I3NDQ3RjMzQUUzMzIKKzoxMEEwRTAwMDdCRkRBRjMxQkU3NzJDRUYxQUUyN0JFRDg2MDhERDNCQkUKKzoxMEEwRjAwMEYxNUFFQUVDNERGMzgxNkVGQUZGNzIxMEREREI3RjczRUIKKzoxMEExMDAwMERBOUNFRDZCQTFGQ0NDQzZFQkE4RkM1QURBMEYxNzFFNEIKKzoxMEExMTAwMEM1RkEyRDA1NTQyRUQ3N0QzQTBERTlBMEIwNjRFQTM4NzIKKzoxMEExMjAwMEZDOUQ4Mzc2MEJFRkM3NjVGNUI1RTBFRkRGQjg4NkY0RUQKKzoxMEExMzAwMDFFODZGOUM4RTVDNjA4QjVCQjZENjhDRDcwQ0NBRjJBRTAKKzoxMEExNDAwMEI3RjJGMjkxQTJGRjE4NDZFNURFQTIzQ0VDOTVFQkIwMjcKKzoxMEExNTAwMERDQUU3QzNBQURCQkY4RTBDMDQyMjU4NEJGNzM1NzlFQUQKKzoxMEExNjAwMENDREI4RjFGRjY2QzI2RkE4QkNBQ0I3ODc5QTBBNzc0NEMKKzoxMEExNzAwMDY1MUZBQ0Q3N0QzNkFEM0I3REM0MjhFQzIxQTk1RjdCNDQKKzoxMEExODAwMDA1QkRFRkQyNEUzNkUyQjk0NEFGNERGMUUwRjkxM0VGMjEKKzoxMEExOTAwMEM4OTNGQzNFM0EzM0NGNTNGOTNGNzIyMzAwQkQwMDgwOTEKKzoxMEExQTAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFNTdEOTAKKzoxMEExQjAwMDA5Nzg5NDQ1RDI3MEJGRjNDRTk1NjQ5MjRDMEUyMDIxNUQKKzoxMEExQzAwMDEwMjYwOTg0MDQ5MjMwMDk4NzI4ODcwMzA0OEMwQTM4RjIKKzoxMEExRDAwMDVDMDI4QUYwODYzM0U0MjAxMTc0OERCQkVDNjYyMDgwMkIKKzoxMEExRTAwMEU4QTI4NjE1MTUxNTc0NDA0MDcwMTE4MzAyQTIwNkJFQzAKKzoxMEExRjAwMEUxNTA1MTUxRTNCMUFFRTgyRTdGQTJBQ0RDMTI4M0FFNDgKKzoxMEEyMDAwMEI4RUJBRTdGNTU3NTc3NjZERTM3QzkwMkZCRkRERkYzMkQKKzoxMEEyMTAwMEVDRjdGQ0Y4RUM3NkZBRURBQkJBQUFCQUFBQkFCQUJBN0QKKzoxMEEyMjAwMEM3RUJDOTM1Q0ZDQTYyNkNCODQ3RjFGODIxMURFMTU4QjgKKzoxMEEyMzAwMDkyNjhFRkM3RDg1OENEREE0RjU1MTg3MzNBNTI5NjM5MEQKKzoxMEEyNDAwMEUzMTk4QjFFMzhBQzNGNzM0MUI5OUQ1OTU4MkE2MzM3QzcKKzoxMEEyNTAwMEE0NjhFMUFFMEU4QzREQjlFNkRCRTQyODk1MzFFNjI4MjIKKzoxMEEyNjAwMEVDRTk4RDg0OTQwNTE4MUJDMEQ4MzhGQzEzRUE4RkIzMzEKKzoxMEEyNzAwMDNCMDI2QTBFRkM5RDZGMzlENzkwQzFFOERGQ0ZEMDNFMUMKKzoxMEEyODAwMDVCRjEzODVERkQzMUQ3MjVFNkVCREU4QzYxMTczRjVGNzIKKzoxMEEyOTAwMDRGRkQ3NkMwRUY1MzA2N0Q5QjZDQzY4RjA5QkNERjBCNkMKKzoxMEEyQTAwMDE2Qzc0QTI1M0FEOEZGNERBMjdGRTY2MURERTMzQjMyNkYKKzoxMEEyQjAwMEE2ODhGQzRENzJCQzBDRkQ3OEY4NEY4MTdBOUQ5OEY4MDkKKzoxMEEyQzAwMEJCRUVBRDFGMTVBQ0I3QTI1NjYxNjkwMDA1RjM1MUJBREMKKzoxMEEyRDAwMDlFRDUyODA4NENCNkEyQTVFM0ZDQUNBNjdBMTc3RUVGNjMKKzoxMEEyRTAwMEE2Qjg3QjM5MTE5RTgxNkVCQjM3QkIzNURDMTJCRUFFODIKKzoxMEEyRjAwMDI2Rjg5MEQ3MUEyRUZDNjc4NjdDMTI5M0ZGMTRBN0IzMUEKKzoxMEEzMDAwMDIzOEVDQkNCQTE5RDg3QzUwNkUxODJGMTA3MTA3RTU2MzcKKzoxMEEzMTAwMDcwNzhENjJCMTU5NDYyNDMwNkVEMTY4ODc2MEJFNDdDOTQKKzoxMEEzMjAwMEY3RUFFNzNCMjA5Q0Y5QzIwMDhFMDRFNjVFQTk2MkJCMTcKKzoxMEEzMzAwMEY4REM1RUZGMEFFRUYyRjBBODFDRDY4N0IxODk3NkVGNTIKKzoxMEEzNDAwMDgzMzY5OEMzQTQ5ODU5NDRFN0M5Q0NCNzNCMDZFNkZGQzcKKzoxMEEzNTAwMDYyODQ1NjgwRjBBODI2REZCRTA2OThENDFDRTZCMTIyOUYKKzoxMEEzNjAwMDVFODA4RTM3NzIzQTcyQkE0OEI4OENGODY4ODFEMzg4QUEKKzoxMEEzNzAwMDE3MDNEQzQ2M0MwNEU5NTM5Rjg4NjkyMkFCQTA3Q0NCRTEKKzoxMEEzODAwMEJDMENGM0E5NDYxRTA0N0U2RENBQjVGOTM3RTIyMDY2RkYKKzoxMEEzOTAwMEY4MUZGMEYzRDFDMjc0RkYwMzRBMTBBRUEzMEFDQjMwMEEKKzoxMEEzQTAwMDQzM0Q5RjEyRUVERTlDQzJEODBGNjEzMDdGRjgxRTJGMTYKKzoxMEEzQjAwMEYwMzA2OEU2MkZDNkIyQThENkYwNTZEQTc5QkQ3QkMyNzcKKzoxMEEzQzAwMEEzMzY2MjdBN0Q3QUY4MzI1MzM0QjY0RkY2NjNGREY4REQKKzoxMEEzRDAwMDcwNDg3MzgyRjBGRjYwNjI5QTFERTBCRDQ3QUQyNUZBQjgKKzoxMEEzRTAwMDc1NjE0RDRCQ0MyOTQxM0U3QkQ4MDU5M0VFOEY3QzI5N0UKKzoxMEEzRjAwMEU3RTM1MzkwNEU1NjkzMzJDM0VCODAzOUUxQkZFQjgzRDIKKzoxMEE0MDAwMEU5QzMyRTQwNjgwNzhFMkYzQkMwMzU0MzcwRDM4QzA2QkUKKzoxMEE0MTAwMEE1NTE0MTc4NUQyOTBFNUMyRjMzRUM2QUMwOTZEMzlBMjIKKzoxMEE0MjAwMDVGNzA0Njc2QTBEM0NDQ0JGMDBGQUI3OTlDNjFCQkUxREIKKzoxMEE0MzAwMDc2NUU2RjI2RjY4RkY1MTY4RkY0ODRENjlCODlFM0UwNUYKKzoxMEE0NDAwMEI4MkJFMUJCM0RGODVEMDFCQzI3QzVCNkE2MEZDQzhGOEMKKzoxMEE0NTAwMEUwMUY1MzM5QzI3QjIyMEVGMDY1MTVGNEJBMzc5MkU4M0IKKzoxMEE0NjAwMDM1RTZERTYxRjQ1RDE5OUZBMTM0QzBGQzQ3MTRCODI4QkQKKzoxMEE0NzAwMDhERURGN0ExOTk2NTEzRERBNkQ0NjYwNUU5QTg3NkQ0MUMKKzoxMEE0ODAwMDlFQzI3NUNBQ0MwREZEQzdDMUJDREZFQkZGNUNBRTA2M0EKKzoxMEE0OTAwMEU1Qzc0REFDMDhFQjE5RjFGNzVDMTA3RjU3QjQ4RURBQzUKKzoxMEE0QTAwMDgzRkZGNTA4RUYzNkU0RkJGMzRBRkQwMDJDQ0NFRkVDMUMKKzoxMEE0QjAwMDI0M0EzMkE2QTUyMEZENjI5QzI5QzM2MjEwREYzRkMxNjkKKzoxMEE0QzAwMEI4ODBFRjg5NTgwNDdDQjBBN0EzQjYxM0UxOURDQ0JDM0IKKzoxMEE0RDAwMDIzQ0QzMERGRDgwMkNEQTIzOTY4MzgxM0MyQjNEMEM5M0EKKzoxMEE0RTAwMEUxMTlBOTNBODg2RjlCQjcyQjdFMUJENENCRjc2NDNFNEEKKzoxMEE0RjAwMDNFMThGMkU1NDcyQ0NDMEZFNUNEOENGMzc1RjMzQUQ1MzkKKzoxMEE1MDAwMEVGMDM3RTlBRjdGNkNCMDM2MDA1QjJBRjA0MUZGNzVDNEEKKzoxMEE1MTAwMDZCNjIyRTQ5MEZGODVGQTYzRjlDQjkzMjgyRjlERTVCNzEKKzoxMEE1MjAwMDYzNzVGOUVDREFDRUJBRkE3REY2QTZFQUNBNzMwM0JEMTIKKzoxMEE1MzAwMDc0RTU3RDhGRTRFOUYyRkRFQkFGRDNENUJGRTZCM0UxN0YKKzoxMEE1NDAwMEJBRkNCNTBEMzdFOUVBMEYzQTM1NUU5NzFGRDI3NDlCMTYKKzoxMEE1NTAwMEFFN0U3NTE4QUNBRjNFODg2RTRGN0QwNkUwNjVCNkEwNDYKKzoxMEE1NjAwMEQzRjU5NzY2RUFEQTlEOEQxQTc1MDREN0RERUM1NUYzQkQKKzoxMEE1NzAwMDQ2RTNCQTFCQzY0QTc0RkRCMDFBQ0I5N0M4OTcxNUYwQ0MKKzoxMEE1ODAwMDFGRDI3MzJFRjM0NjA3MDA1RjIzNTlEMzlCNDk4MEJGMjgKKzoxMEE1OTAwMDA1N0VDNThENzg5QkI3OTZENzkzRURFNkVGQkQ3Mzc4QjIKKzoxMEE1QTAwMDBDQTY3RUZERjcxMjY2MEVFNkExOUZDQTNGNkQ3OEU3MDYKKzoxMEE1QjAwMDcwNDg3OUJFQjNEMDg0RkM3N0RFMTUxOUZGNzUwNDIyOEMKKzoxMEE1QzAwMDgyNURGM0IzREEyNjdEREQwMUE0REYyN0FBREIwNjlGRDcKKzoxMEE1RDAwMDE2QkVBREQyM0E1OEY4ODJFMjY3RDA2RjNBRUIxMThERDEKKzoxMEE1RTAwMEY5RjIyMzJBRjMwM0ZENEZCMjhBQzcwNjQzRkE0Mzk1RDMKKzoxMEE1RjAwMEZGOURDMzNEODJGOEIxMjVFOEU5MUNFNkQyRDMzOTIyOUMKKzoxMEE2MDAwMDQzNEZFNzQ4Qjc5RUNFRDEwM0Y1NzQ4RUYxRThFOTFDQkQKKzoxMEE2MTAwMDU3QTBBNzczMDdBRjlFQ0U5REE2RThFOTlDQThFOUU5REQKKzoxMEE2MjAwMDlDNTRBNEE3NzNENzBBM0Q5REJCNTVFQUU5OTlFMjJCMzgKKzoxMEE2MzAwMEQ2RDNDRjQwN0YyOTlGRDM1NjJFRDRENTZCRTEwMzZGNUQKKzoxMEE2NDAwMEQxNjg0QzdCRDRGQzUyRDc2Rjg5NUE2QTY1QTYyMDNGRUIKKzoxMEE2NTAwMEY4RTAzRkU0ODc5RThDQjkwMzgwRTcwNTQwODc4MEFCMzQKKzoxMEE2NjAwMDM1MUYxNEQ1QUQ1RTkxRjQ2RkYwNDE3NjBBRDBCRjc3RjcKKzoxMEE2NzAwMDA4RkRENTY5RDE1QTFCRjI1Q0E2OTJBRUEwNEZGQkE2OEQKKzoxMEE2ODAwMEY0MjczQjY4MDBBNjUzN0E4MjFEMDQ3MjgzNzlEQkI2RjcKKzoxMEE2OTAwMDgzQTRGQzBBQjUzQkNDMDM4MkZBQUEzREI5RDY0QUNGQzMKKzoxMEE2QTAwMDhFOTVGQUE5MUQzREVCRUExQTk0ODM4MDkwNjM4Q0RCQUEKKzoxMEE2QjAwMDAxOENBRDMyMjExQzUzMDU1RjFGMENFNzdDNzkxMThCOTcKKzoxMEE2QzAwMEFFODU3QTUwNjcyMEMwNzUwQ0UxODY3MThFODVGNzNFQTUKKzoxMEE2RDAwMDhDRUJGNDM2NTY2QkMxRkVBN0IxN0E0QUE3QjMyNjRBNzMKKzoxMEE2RTAwMDM1RTYyNEJCNjIyNjczNTMzQTlCNzkyOTdEQ0ZBRTRENjQKKzoxMEE2RjAwMDQ5MDFCOTU5NkE2RjE4ODA3NkM5NUYwQjNGM0NBRTIwOUIKKzoxMEE3MDAwMDMwNDdFMzEwRDg3NkYxMkFFNUY1QzdGODI3RDQ3QjMwMzcKKzoxMEE3MTAwMEM1QUIyMTVFRjNFREFFQkIxRTg1NEYwNzUxNEZBMEZDQ0MKKzoxMEE3MjAwMDFEMUQ0N0YwMzJCMzM3N0I3Qzc2NUJGRDJDMjVGOUZFOEYKKzoxMEE3MzAwMEJBQTI2OTI4Nzc3RDg5NzZGNzY2OTg1QkVGMjQ2NjRGMjEKKzoxMEE3NDAwMDQ0M0Q5N0UwNEYxRDBGRjQyOTRGRDFFQjk3NUU4MjI3RDAKKzoxMEE3NTAwMDVFRTg1Q0JCMTBFRDI4QzZGQ0IxQTgxRkFFNzZEQzVGREUKKzoxMEE3NjAwMEE1Nzg3RTgxNzBDQkZBOTc5QkFGRDU1QTdCMjdDMkQ5NEIKKzoxMEE3NzAwMDU0RTY3MDZGMDRGRUZDNDREMEUzRDk1QjZEMDEzNTJBQ0EKKzoxMEE3ODAwMEM4NDc5RjQ1NEM3RkIzMDNEMEVERUUwODZEMTlGMURCNTAKKzoxMEE3OTAwMEU0MUI1NzYwNUUzOTE4RTc1QTA4RjA1RDI4MDQ3QzczQTMKKzoxMEE3QTAwMEZDQUZDNEYyNTJCQkQ2QUQyMzRDRjE3QzU3QUQ2NzM0M0QKKzoxMEE3QjAwMEUyREZDQkYxMEY3RjY0N0JEQjg0OUZDMzMzNDJFMUUzQjUKKzoxMEE3QzAwMEJGMUVBMUFEQzY3RTBFOUFFQTkzREQ4ODBGNzNGRDAwMTEKKzoxMEE3RDAwMEIyNEIxRDFEQTg5RkYzNTY4RTk3RjZGMDMwM0NBMkVCQUUKKzoxMEE3RTAwMDM0OUNENzZDOUJDRDhERkI5M0UxMEFBN0VCODlCODE5RkMKKzoxMEE3RjAwMEQzQ0JFMUNGMzkyNjZGQzc4MEFBODNGQjE5ODJEQjU5RkYKKzoxMEE4MDAwMEQ4MkQxMUY4RTZCQzQ1QzA2REVGMjBGMEVFQ0FDMjc1MzgKKzoxMEE4MTAwMEQ1MUVEQ0Q1RDgzRkRBODlCRjU2RkM2ODI3RDIzRkM4QTEKKzoxMEE4MjAwMEJGRTI4QkYxM0YwMDc5OUJFOUUyMjcxM0QwN0VDOTM2NjYKKzoxMEE4MzAwMEI5Mzc0MkQxQkE3MEU4MUFGOEZEMDM4MUVGRjUxNkM4QUUKKzoxMEE4NDAwMEM3RDJGNzk1RjgzRDIxOUNCNzRGNzhDQ0U0QUY4NkY2OTgKKzoxMEE4NTAwMERFRTFBRjEyOUQ5RTVERTBBMEY5MTQzMjk3MTUxN0Q5ODUKKzoxMEE4NjAwMDJDNjE1RkZGNjVEOERGRjczNTAwM0RGNkE1Njg3QjcxODkKKzoxMEE4NzAwMDFFMzNFMjRDQzk5RjEwMUM1QTZGQjQ3N0Q4RTAyQkUzMEIKKzoxMEE4ODAwMDdGQjk0RUM3M0JGOTE0RTYwOEJDNEQ2MDFFNUE3NzkzNUEKKzoxMEE4OTAwMDk4NjZDMTcxM0ZGQUM2RUE0MUY5Rjk5MTkwMjc2MEZGQzUKKzoxMEE4QTAwMEQzRjdBOUNDNEZFOUVEMkM0MEY1RUY2MDBEOTRGRjMwQzQKKzoxMEE4QjAwMDIyQTc2QjI1QzAzN0VFRjE5RTNENTBCRTg2RTBGRDdEQTAKKzoxMEE4QzAwMEJFNUVCNTE5RjE5QzVGNEU3NjQyQkNBRkU5NzA0NUZDQTcKKzoxMEE4RDAwMDNCNEVGMDBCQUNENzRGQjExRjU4QUZGRDcyNTM0M0Q2NzAKKzoxMEE4RTAwMDREM0VFNzE3NjY3NkY2Rjg1N0VCQTZCRTk5RUIwQjEwRDAKKzoxMEE4RjAwMDhDOEU0NDk4RkYwRDgyODQzNzc4NEE0ODRGQTA5RDE1NkUKKzoxMEE5MDAwMDBGRjhBRjc3QTk2NDY3MTUwQzZCMzQyM0ZDNUJCRUU1QzkKKzoxMEE5MTAwMDcyRUNBRDI1MkNEMjA3RTU2RjBENTMxOUQyNkJFQ0RBMzIKKzoxMEE5MjAwMDUxQTdCMURENTExNjg4RUYwN0Y1NDc1RUQyMEU0N0MzMzgKKzoxMEE5MzAwMEZDQzc4MjdDMDc4OUNDMEFCQTgwOUUwOEQxNEIzNzI1OTgKKzoxMEE5NDAwMEFDQ0U0NzNCRTJBNkVFRkFFRjM3QjMxQTE1RjEzNzNBMzEKKzoxMEE5NTAwMDRCQUY1N0M2QTI1RTkxRjU2MEJDMDM4ODg3RDhENkZBODQKKzoxMEE5NjAwMEU1NDdBOTVGN0FCMTVFNTdBMzVGMTY5QTNDMkM5NUVDMzgKKzoxMEE5NzAwMDU0OTcxNUY5N0VBNjk5NzlEQTVBNkY5MzdCMkFDMjlFNkQKKzoxMEE5ODAwMEU1NzZDQjJENjJFQ0U2RDExN0FEMTc2MEJFMDM1M0I1NkIKKzoxMEE5OTAwMDA4RUM2N0UxOThCRjRDNDc3OTBDRkJBQ0Y3RkFBMjFFQjQKKzoxMEE5QTAwMDdENUY2NTBGNDBGOTk3NTU4MDcxNTBBRTI3QUFFQ0NDQkEKKzoxMEE5QjAwMDAzMDZDRUQ3NTU0RUNBOUZBQTRBQTBGNDRDOTU4QkQyMTcKKzoxMEE5QzAwMDczNTUxOTU0RkU0RDk1OUJGMjUzNTNCREYxRDhFRkNDRkUKKzoxMEE5RDAwMDk1REY5QUQxOEVCQTJGNENEMjhGQzNCMTQ4RjBFRjdENUMKKzoxMEE5RTAwMDYxN0M5RkI1Mjg3MkQxNjc4NTMwRUUyMjUyODBBMEFGN0UKKzoxMEE5RjAwMDZCNkI0NkExRDk1NUJDQjdGNjRENENFMUJCRUFDMEYyMzIKKzoxMEFBMDAwMEQ1OEExQkY1RDM5Q0MzREEwQTY0OUY3OTQ3MUJDNkEyN0IKKzoxMEFBMTAwMEQ4RTlGRjg3MTMxRDExNkY2NTk3MTRBNkMxNTIzQUQwNkMKKzoxMEFBMjAwMEMzOTM4NkUzOUZBQzFBNDg3MDlEQUVGMjEwNUM5RUJBNDkKKzoxMEFBMzAwMEM2MzdFM0EwRkREOUFBMDJDQTJGNENGNTY2QTY3NjQwMTgKKzoxMEFBNDAwMDc1RkJBRDE1REI4RkQ5REU2ODRFODJGMjkxMUVDNTgzOTIKKzoxMEFBNTAwMEVCN0JBODg3RjlGRDQwQkZCNTE2QUUyRkQ2ODJCRTQwNkUKKzoxMEFBNjAwMEZFMTk5NjNEN0VGRDVEMENFNUI5RDYxN0M3OTkxNDNCREUKKzoxMEFBNzAwMDZCNjQxQ0YyRDVDMDQyMzNENjlCRkMxM0Q4NUMyOTQxRDEKKzoxMEFBODAwMEZFQkVEQzNBMzlCRjVGMjFGQzlDREYxRjQzRjg5MDc4QTMKKzoxMEFBOTAwMDJBMTNGNDNBQkZBN0Y3MkQ4M0EwREZGRDYwNDdBQTAwNzEKKzoxMEFBQTAwMDVGRjMyNTEzQzFEN0ZDNTlCODFGOEQwNDYzRkI4NUJCMjkKKzoxMEFBQjAwMEQzM0EzMTA3Q0UxMzFBREIzMERGQkIxMzAzM0E5QzdENDgKKzoxMEFBQzAwMEUxOUUwNEE0NDc4NjYyMzY1NTgyNUMzODFCNUJGQkQ3NDcKKzoxMEFBRDAwMENGNTFFRUZEOTlDQjNEQzY2QUJGN0UxMkU1NjI5NzA0NjkKKzoxMEFBRTAwMEY3MDM5MEZCQzYwMkZCMzREQUQ3NTQ0NEEwNUU1QzYwRTcKKzoxMEFBRjAwMDY1MUFDRjZCQkQzMTdGMzY5Q0QxRkU3NkMwOEVBNEUxNDYKKzoxMEFCMDAwMEI4OUU3MDNDNTdDRkEwNUM0QkRGRjE3OEVBQUY1Q0MxRDgKKzoxMEFCMTAwMEY5NkU3OUUxODlFNkQ3NUM1OEVFMjdCRURDQjY2MzdEMzUKKzoxMEFCMjAwMEU3QTcyMDU3QkE3Mzc5MzhDMkY1M0FEQTE5QjA0RTVFMDIKKzoxMEFCMzAwMDVGMUQ0MUYyRUI3NThCRkI3ODI1Q0FFREY1MEVGNzY2Q0MKKzoxMEFCNDAwMEE4RjdEQzQzRjc3RUI5MTdEMzA3Q0JGMkVFNDVGRTQ4RjIKKzoxMEFCNTAwMDhEQTU3RTY2RkY2RTdFMkY2QzBGN0E5QzI1QzJCQzdFMTMKKzoxMEFCNjAwMEZGOEExMjA4NDNGRkNCOUEwMzRCMTM2MUJDM0VFQjFBREEKKzoxMEFCNzAwMDREOUQyMUNERERBNDU0NjNEQUJCNkJDMTExRDQ5RjE1NkIKKzoxMEFCODAwMEE5MkU2QURGNzc3QjhBOEFGNjYxQUZDRUZFQ0ZBRjI3MjgKKzoxMEFCOTAwMEZEQUVEN0ZCNTk2QkJFMURERTk5MDVGNTdGMkZBNUY2REYKKzoxMEFCQTAwMENDMTJBMEVGN0Q1RDNGQ0RFM0ZCQkUxQUVBNjc3N0RERjcKKzoxMEFCQjAwMDg0OEY2RjY3MzgwRkIwMkMxMEVFNDIyQkY5MjU3MEJBRDYKKzoxMEFCQzAwMDE2Qzg5RkRGOTVCNjAxRkQxNzdCNENCRTBEQTQ4RjY2OUUKKzoxMEFCRDAwMDcyRkJFM0JDRDdGNzA0RjI0RDE5RDRGNzQxQkUyQ0Q3NzIKKzoxMEFCRTAwMDE3NzUxRDk0OTdGREI5QkIxQjM4ODQ3NTdERkE4NjAyRDUKKzoxMEFCRjAwMEM0Qzc4MjVEOEY4RUVBMENGNUNFMEY2NjZFMDU0MDJGQkUKKzoxMEFDMDAwMERBN0Q3MTE0QjY2MzVEQzE1NkM2N0U3NjU1NzdCQzBEOEMKKzoxMEFDMTAwMERBRkQzNjZCNzg3RkU0MTNBRjVBNEJFM0IwNzIzRUNFNjkKKzoxMEFDMjAwMEUzNDI4RkIxODYxQ0YyMEI5MDRBODE3QUJGODVDRkY4NDAKKzoxMEFDMzAwMDNEQjYyRUU2MDBGNzZENzFGQTk0RDcyRDQ5NDFGRjRBRDMKKzoxMEFDNDAwMDNGQ0RFRTU2NzExREE0RjgxMjJCMUM0MUJEMDhGQUVDNDUKKzoxMEFDNTAwMDc3Qjg3RTEyQURBMjVGRTc4NDY0RUY1NUU4MzNBQkQwREUKKzoxMEFDNjAwMDRGQjJCRkM3QURDQzE3MTZDQkVENjAwNUY1QUQ5NUVCNzgKKzoxMEFDNzAwMEUxQ0QyMDJGOTA1RkE1MUU4NjcxMzdBNkYyRjY2NEZGMDYKKzoxMEFDODAwMDI2ODFEMkNEMDUzODkzMUVCN0Y5NDlENzVGRTFGODQ2NDIKKzoxMEFDOTAwMEJGOTlCNDQzQTZDNDU1RUY2QjQwRkY0RTg0QjYwM0M3QkIKKzoxMEFDQTAwMDkxN0UzMjY2NzZCQkQwQ0U1OTE2RTE3OTMxOTVFQ0E4MEIKKzoxMEFDQjAwMEE2NjQ5QzAzRThDOTk3QjFERTAyMTVFQ0FBQjQxMEJCRTgKKzoxMEFDQzAwMENBN0U2NTdBRjJDNTA4Q0ZBQkQ4RkU0QUVCMUJFNUU4MzEKKzoxMEFDRDAwMEEyRUY0RDJDMTdGODYwRDFBMzM2REE3NzU2MEJGRjQxNUYKKzoxMEFDRTAwMEI1RjA2NzU1NDcwRUIwRTNGQTY3ODc0REE1NkY4MkZFNTIKKzoxMEFDRjAwMDFDQzI3QjY4RTk3NzUxNjQxRUM5ODc2QUM2REFDNERCNjcKKzoxMEFEMDAwMDdFNThENzFBQzg5MTAwRTgwMTBERDZGN0QwNEI0RDJBQ0UKKzoxMEFEMTAwMEU3RkJGQTQzRDFGRDUwN0UzMjRGQTQwQkY3RjUyNkE2OTAKKzoxMEFEMjAwMDg1RTg0NzYzM0Y0MEI3NjMzOENGNjEyQzgyNjkyMTdBNTkKKzoxMEFEMzAwMEQwQzM2MkFDQjg3RTk5MjNGNkRGOUFGRjYwNDEzRjM5RjkKKzoxMEFENDAwMDhGQzFDMjdGMzdCOEY5QjMwODk0ODM4QkJFQ0YyMzc5MDQKKzoxMEFENTAwMEQ4REVGQ0Y2ODlGOUZEMTdDRTBGNTI2RjRGRUYzOTg0MUMKKzoxMEFENjAwMDczQzg3NzRFMzNDRTczODg3OTVDMzJEQTJEMDA3RjMzMjcKKzoxMEFENzAwMDdFMUZGQTlENDkwRkZGNEZFMUJBRkM5NUNFRTM2RTg1MjkKKzoxMEFEODAwMEY5NENCODNFQkZCNUZBNzE3REQ2MDE3RkUzN0FBRTlCMzAKKzoxMEFEOTAwMDlGRTU0NzM5QjAwN0Q2MDNGQUYxN0RFM0FENjRCN0Q2MzYKKzoxMEFEQTAwMDA5QkY2ODVEMDcyN0Y5OEI1RUI3RjBCQzZGQUE2ODFGMDMKKzoxMEFEQjAwMEM2NDgyRkQ0NERFRDRDRUQzQkRCMkFERUNEQzZGRUFCQjUKKzoxMEFEQzAwMDIzNDg3RUQ2NTlGQzJCNTNCMUZGNUZDN0I5N0Q0MDJGNzYKKzoxMEFERDAwMEQ1RkVFQ0ZBMTM3RDYxRkZFMDM3RjkyQ0M4MkY5NkMwNDEKKzoxMEFERTAwMEVEMkFGNkY3QUQ5NUUxNzg2QjYyMDI0OUU1NTA3RkNEMkIKKzoxMEFERjAwMEZDQ0U1NEZGMzMzMDhERDAxRjM3Qzg2NDlBMzFDRTgxREEKKzoxMEFFMDAwMEU1OUVDNDU4QzhFRkY5QTc0QTdBNjA0RDJFRTQxRDI0ODgKKzoxMEFFMTAwMEM3QzlCRkI3NjY5QzI3MzEzQzFFRDM4RTI2ODI0NzY1QzMKKzoxMEFFMjAwMDE1RjQzRDg1QjdGQkRDQzJFQkREMjZFODc3NENEMDA3OTcKKzoxMEFFMzAwMEQ2MzlDOTAxNkQ2Qzg0MTlGOUY4REFCNDk5NTk2OTY0ODUKKzoxMEFFNDAwMEM3NzgxMjE1ODBFN0M5RDkzRDE4Q0FEMURCOEE2RjRDODMKKzoxMEFFNTAwMDIxQkUxMTdFQ0UyOTgyMDZCMjNGMjZGQ0E0OTNGODY3NUMKKzoxMEFFNjAwMDM2NzVDRUU2MzBBNEU3QTRBMjMwRjI4MzdFNTZCNDM0MjEKKzoxMEFFNzAwMEQyMDVFRDI3NjlDMkZGMzk1MUVGMTdCRDM2Q0Q0M0UzNDcKKzoxMEFFODAwMDk2RDU2NkE2OUQwOEUxRUI5OTM2OTAxQkQwRkY0M0UxNkQKKzoxMEFFOTAwMDVBREYzNEU0QzdCREI5NTRCRTE3OEM5NTlGNjE1RDdEMDAKKzoxMEFFQTAwMDM5QkJDNzBFRjI1M0NDOTZGQkMyQzAyQ0E0RUJGRTI2RDYKKzoxMEFFQjAwMDNCQzNGRDQ2N0JGQzUwOEQ3NDgwN0VCQjIxNURFMjA0NkMKKzoxMEFFQzAwMEJGMjJGREE3ODRGMzdEOEIxOUY4MDVGMkQ1QjU5OUI0OUYKKzoxMEFFRDAwMDZGNzlDNkMyM0MwQUQyNkJCNzhERTg1RjMwREVFRTIxRDcKKzoxMEFFRTAwMDdGRTI5NEYwMEQzNjI4OUYyMUU0NTlGNTk0NzBGQTVFQzQKKzoxMEFFRjAwMEJEMkZEMjZGNTI2ODNGNDQ3OURGNEUwQkI1MkJCNUZBQTgKKzoxMEFGMDAwMEI3NkQ4MTdFNEFGNzY3OTJCRUQ5NjMxNUUzQkUxNkMxNUQKKzoxMEFGMTAwMENCQTMzQzI5Q0JGQjYxNzkyN0UyODNENzJEQUU2ODJBRUUKKzoxMEFGMjAwMDdGNUI2NTU0MUUxRTQ4OEYwMTNDQzY4NTY5MTMxMTFGNDcKKzoxMEFGMzAwMDlENkQ0MDY3MDdGNkNCQkYxRjE3RkM3NTFDQkE0NUZBMUQKKzoxMEFGNDAwMEY5MkEyMkE5NUY1QUZBOTBEN0FBQkI2RTQ0N0E2QTU2QTgKKzoxMEFGNTAwMDVFQ0U3RUE5NTJGOTcxQTcyNzcxMEVFNDhGNTcyNDExOTYKKzoxMEFGNjAwMDVDRDI2Rjc0REM2QjI1QkUzRjVFQUE5MEZERjNBNzRBRUUKKzoxMEFGNzAwMDM1NjAwREY1REI4RkRGN0E3RjNBQjRGQjZBQkY4NUZDNjUKKzoxMEFGODAwMDcyRDMxRTJFMzk4QURGQTcyRDJEMjNGRkUyQjRFMkM1MkUKKzoxMEFGOTAwMDc0MkVGMENERTJBRjA2QUM4NUY5MzQyQ0ZEMjI1OTBCQUUKKzoxMEFGQTAwMEYxMzM0RjJCODU1NjIxRUJGOTM3Njk5RTMyRTQ4MzI3MjUKKzoxMEFGQjAwMEQzQjQwQTlDNUY3OTU2QzM1Q0I0OTdCRkIxRDYzRjhEQkEKKzoxMEFGQzAwMEY2N0Y3QUJDQjYwOEJGNUY3OEY1RTQxNjZFNDczN0E1MDIKKzoxMEFGRDAwMEEzOUU1ODYwRTY3QzIyRjU2REI5RTBDMzVFRERCNTdCQ0IKKzoxMEFGRTAwMEIxM0VFMDZEM0FFQTk1ODhBQzdBMkVGRjE2NUY5OUZDODcKKzoxMEFGRjAwMDNGNTNCNzc5OEYwMkUzOTQ4NEQ3MkRBMDU0RjVFNzYwQ0YKKzoxMEIwMDAwMDNGNjc5NTQwOTQ5MjQ2NzhENDcwNUQ5RDczMDZBMjEwNzgKKzoxMEIwMTAwMEZGOUE4OURCNkQyNTVCRjVGM0MyN0Y3ODlFNTU4MjdGQjEKKzoxMEIwMjAwMDQwQkI5MjVBRDUxMzg2RUI4MEY5QUQwODdGMDlCMzA2NzEKKzoxMEIwMzAwMEVCQTcwNEU5MDVGRDEwQkQ5OEUzNEZEMzdGMDU3NDI4MDUKKzoxMEIwNDAwMERFOTY5OTg3RkI4NTkyOThCRDBGMERBMjdBRDA0RUFFMDEKKzoxMEIwNTAwMDE3QjU3NTVFQ0VBNzM1M0M3QzdFRTdDNDNBMzgwNzVGRUUKKzoxMEIwNjAwMDJDQzgyRkRCNkQ3MkRGNEVFMzdGRjM2QTI3MUFCRkEzNzQKKzoxMEIwNzAwMDU4MjdERjI4ODI1RkI3ODU3MUJFNzJDM0JDMTBDRTE3MTgKKzoxMEIwODAwMDM5NUYzRDI2RTVFNDM2REU0RjQ5OUNDRjg0NzJBOUE0QTIKKzoxMEIwOTAwMENBNDk3QzI1RTUxMkMwNDJFQkVCRUM4RTI0NkEyN0U1MTkKKzoxMEIwQTAwMDE4RjMzMjQ2RjU3NzI0NkVFNEY2OUJEOEJGMjJDMDUwRTEKKzoxMEIwQjAwMEJGRjhGNzdDMUNDQ0EzM0MzRkYzN0M5MjFDOTdFQzY3NTkKKzoxMEIwQzAwMEEzM0UzNkNFN0I3RjlBODlFQzJERDBEMzlERkVENUZFNTQKKzoxMEIwRDAwMDJGMjM2MUQ2RkFEOTdENDNFNjEzNjkxNTcyQzE5RDMwREQKKzoxMEIwRTAwMDJFMUJDRjBCQUNCQTdFQkY4OUI0Q0VGMDM4RjBEQzQwNUIKKzoxMEIwRjAwMEZGNURGNkY3NEUxQURGMUY3NjMzRDBCOUIzREE3NEMwQUUKKzoxMEIxMDAwMDg2RUJGMDU5NDY3QUMzMDhDNzg3QTJEREYzQ0ZCN0QwRTQKKzoxMEIxMTAwMDU1MTVGRTcxRTY5MkZDRTRFMkY2M0NEMUVGOTg1NUQyNkIKKzoxMEIxMjAwMEVGQUUyNDkwQzcyNTg4QUJENDIwMUVGN0U0NkE0OUE4NjcKKzoxMEIxMzAwMDM3QkUxMUU3M0Q3QjYyMjA5Rjg1RjYxNEE3OEJDQzRCNzEKKzoxMEIxNDAwMDdBMThGOTcyRTlCMUI5NDk3OEJFRjRDRjM0RUVCNzMzNjEKKzoxMEIxNTAwMEUyN0IwOUUwMTVDQkFCMkRCMDVGQzlDMjdERUI5MTQ3MTcKKzoxMEIxNjAwMDRFRjQwOENFRTdFQjJBOEY2Nzc2NDg3RUVFREE1QzNCM0EKKzoxMEIxNzAwMEFFQzc3OUVCNzJFRDMzNDNFODUxQkRCNUVGMTExN0UwN0YKKzoxMEIxODAwMEZEREM1NkIzMUJDNTdCQjVEOUZGMTBEQUU5RDU1QkQ1MUQKKzoxMEIxOTAwMDVBRTQyMzI4QjcyM0JFQ0YzOTBFQkU4RkY1RTZBRThCMTcKKzoxMEIxQTAwMEM5NDMzQjVDQjY5RkI3NzZBNDY3NzYwODFEN0E2RkQ1MTYKKzoxMEIxQjAwMEQzMjVCQjU2OUZFRkIzNTc5RkI3Nzc2NzM0QkZBQjZEQUYKKzoxMEIxQzAwMDk3MUJEMEU3RkIxRUQxRTc1OTEzNTA2RjAwREEwMzlDQTEKKzoxMEIxRDAwMDZFQUYwQzc0MUY3MTAxRERCQUY5NTUzNzdFRUFFNjE4QkYKKzoxMEIxRTAwMDNGNjEwQ0RBMTFFQjU0NzcwRjI4RUZCNkQ4N0IzM0RBRDYKKzoxMEIxRjAwMDE1QTdENkNENzEyM0Q5OEI1NERGODI1RjAxNEQ4QkJFNEQKKzoxMEIyMDAwMDE4NzUwNEY1RUE1OTU2RkJFOTE4QTBDQkRDQkFENTU2RjcKKzoxMEIyMTAwMEIzMEJFN0FERTdGNzNEMjZDMUJGQ0Y3MzdGREM3Q0JGNDMKKzoxMEIyMjAwMEJFQkNCNTVDNTgyMkZEMTgxOUExRkM2NUU0MDMxOEY3RjMKKzoxMEIyMzAwMDU2MEYwMDU0NUFGOUYxMjMyODE3OEE0NjAzRTNBMzFFMzgKKzoxMEIyNDAwMEFGNUQ2RDQ1RkJFRkYyRTNGOEI4N0RFOUYwQjgxMDFGOTQKKzoxMEIyNTAwMDg1MDM3OUQ5NzU5NTIzRDg1N0IwRUVEOEFBMEY0NzIxMjEKKzoxMEIyNjAwMERDODVCRjU1QzhGRTI4N0NCOUU3NjFFNEFGQzY5RDUzQjUKKzoxMEIyNzAwMDZGQTJGNEQ2MDI5QUJGRjRGQkNEQUI1MzAyOTE5MDc3NDQKKzoxMEIyODAwMDBFNzRFRDZEODA3NjczRkNEQzdGMzE3Mzk5MkQyODBGODEKKzoxMEIyOTAwMDE5OUU3QjE5RTA1ODEzNTIwRUYwQ0ZEQjdCRTA0NzNDNDAKKzoxMEIyQTAwMDE3MkU1QUE3NkYzNzFGRTQzNEVBOUZFMjREM0ZEQjQyNjcKKzoxMEIyQjAwMEJGQ0JGREU4NzU3NTFCNTQ5Q0Y3MUMwMUJGRDQ5RkNDMTgKKzoxMEIyQzAwMDM3OTRDRTFEQUVFMzRERDgwOUZDM0ZEMDNCQkZFRUE4NkUKKzoxMEIyRDAwMDhERUVERTNGQTg0N0FGNUJDM0RCODNEODJEQzQ3OTk3RTMKKzoxMEIyRTAwMDM5QUMyRTlDNzc5OTlEMDUyMjAwOUUyMzkxNTYwRkM2NUUKKzoxMEIyRjAwMDk1NUM1QzFCNDk3RUI3QjkzNkIwNTdGMzI4NjUxOEI3MjMKKzoxMEIzMDAwMDAwODI5OENFQkZCRUZFNDAyNUJCQTcyQzhFRDNCREVDREQKKzoxMEIzMTAwMDE5ODVGNjY5NjVFODJDQzVGQ0IzM0MzRjlGMDU2ODNFN0UKKzoxMEIzMjAwMEM4MkY5RUQwNzlGQUY1Nzk1NkMzRjc3N0E1RTZDMDAxMDQKKzoxMEIzMzAwMEM0NEIzMTZCRTBGQjMzQTBBNzI3RTRGQ0JBMTRFNkY5NTkKKzoxMEIzNDAwMDU5MkNEQTZGODZGNkNDQUREMUI5OUM4M0RCNjNFNTdCRjMKKzoxMEIzNTAwMDdGQjY4NTk2Q0I3REE2REMwNzRCN0ZGMDMzRTlERTcwQTgKKzoxMEIzNjAwMDFDQzcyMkVDRTYzNUY3N0JEMjExREVFNTE2NEYzQUUyMzgKKzoxMEIzNzAwMEMxQjczQThDRjZGQkI3NkRFMEZBNkI0RDBDRDhCMUYxNjIKKzoxMEIzODAwMDY0M0Y5MzNEN0U5QkMyRUQ3MzM2OTVDQkMzNDFBNjk3MzgKKzoxMEIzOTAwMDAyQTg2RjlBMUU4RDcxNkY3NDUxN0REMjYzNkIxRUNDQTMKKzoxMEIzQTAwMEU0RjZGRjNGNTVCMjg3OUE1NkYzMzg4ODM1QjkxQzdGQ0IKKzoxMEIzQjAwMDZCMUVDQ0U2RjZCRkQ0N0IxRDE4RjVEN0RBREVGNkE0RkIKKzoxMEIzQzAwMEEzMUY4MjNEQzJFMUZBMUNBNzE0NjI1RkU3NzZEMjFFN0EKKzoxMEIzRDAwMEU4MUUzMjNGNjk5N0IzQTIyQjNCOUZEODJDRTIzMjlBRUEKKzoxMEIzRTAwMDU2ODdGOUYxN0NFMjg0RTI3REQzMTQ2MkRGM0VENTlEN0QKKzoxMEIzRjAwMEVCODkwMUMzM0Q1QjQ0M0QzQUM3OTg2RDFBRjdDMEY1MzAKKzoxMEI0MDAwMDAwRDdFQ0M3NEMyRUY0QTdCNUUwREJFMzQ5NDdGRDc5NDQKKzoxMEI0MTAwMDYyNzU1ODFFRjJEOTgwRTFEQ0JGNzQzQzk3Q0JGRDg4ODEKKzoxMEI0MjAwMDdFOENFMjlCMzY4OTdFMzc3NTM3RTlEMjg0NzBFMDNGQTcKKzoxMEI0MzAwMEU4RTdDNDQ4RUVERjhFRUNFNzI1QkZERTY2MTc5N0ZCMzIKKzoxMEI0NDAwMEM2NzlENDhBN0U2NjVCQkRFRjBDNjkwMzFFODkxNzk2QTgKKzoxMEI0NTAwMENGRUQ4RTEzNzcyQTFCMzk1QzQwNkZDODBGRjg1RDE4NEIKKzoxMEI0NjAwMEY5MDM0RjA4QkQyNEYxMEI3QzQzNzEwQzUyNkVDNUI0MzcKKzoxMEI0NzAwMEYwOEI3RjVCMThGMENCNkEwQkU3MDNCOTZGMEJFMTE3MUEKKzoxMEI0ODAwMDQxRkZBRTQ0REZEQjA0N0REOTgzNjE4MjVGNENFQzZGMEEKKzoxMEI0OTAwMDg4Qzc5MTRFQ0UwRjU3QjlGRjAyN0ExRjQxN0ExQkY3MkEKKzoxMEI0QTAwMDYxOTJERUNDRUNFRkZGQUZDRTUxQ0E1RTc5NjE4RjBGQjcKKzoxMEI0QjAwMEVDOENFMjE3MUY4RDYyNTBFRkI0QjlBNkEzMUJEQTk3OEMKKzoxMEI0QzAwMDZFNUUxRUU1ODFGNDk0RDkxN0U1ODRGMTRGRkJENTAyMzkKKzoxMEI0RDAwMDdGMUJGOEI2RjY5MEZFNjg4RjQzMDkzOUY3M0NGM0ZDMDIKKzoxMEI0RTAwMDZGQzdFMjNDRkZCQUQ5RTI0NDkxNTBCRUQ1NDZGQkIxRUEKKzoxMEI0RjAwMDA1QkJFNjkzQkQwRUY5NDY5RUJGRUY1QjNDMDcyRERGMTMKKzoxMEI1MDAwMEFCRjdCNzE3M0ZGNzY4NDcxN0UxREI5NzY0NEFDMDM0REEKKzoxMEI1MTAwMDkwQzQyMDVEQjBDOUQyNzIyRTBDQzM4MEZERERCNDAyOTAKKzoxMEI1MjAwMEUxMzNCNjQ3MzgyRTAxQkRDQjZCRDU0MjZCNzRFQkYyREQKKzoxMEI1MzAwMDcyMjE1RkNBNzdGREY2NUJGNDFCOTZFRkJBRjEyNENBNUQKKzoxMEI1NDAwMEZCNzI4MzlGQkY0ODlDNzcxOEZERkM3RkVEQUUzRjQ3QTEKKzoxMEI1NTAwMDA2RkM1MERDODAwRkUwRUE0MUVDQzJGREM0RDVEQjFFRTYKKzoxMEI1NjAwMENGNjk0NEZCNjFEM0JCNTE0QTU2RDBERjJGQ0Y0MTlBRkMKKzoxMEI1NzAwMDZCNjczRDgzRkVEM0Y2RDZFNTM3QzJERjFCQTQxQjk3NkUKKzoxMEI1ODAwMDVGQUVCRDBBMEY5QUFCRTM2OUE5MjUxMDM1MDhGNzdCQkEKKzoxMEI1OTAwMDFCMkM2NEZGOTZCRUYwRUM5NjI3OTFDRjhFRDk0OEJGNDYKKzoxMEI1QTAwMDk3QkNGMEM2QTdEN0ExRkRCQ0QzMTIzRjlBNEZDM0ExNDkKKzoxMEI1QjAwMDg0QzREOTk0QkJCODNGNEVEMkE3RjhFNTM3QUNBRTZDODMKKzoxMEI1QzAwMEZFN0Q3MTZDOTA0RTI1M0IwRjU4MzFERUM3ODhDRjExNDAKKzoxMEI1RDAwMEI1MDdBQzBEOEUzNkU4NTVEQjM4OEFGQzUwREI3RUIwMDMKKzoxMEI1RTAwMEUyRkEzOEJENUY2MTlENTI1QUI3MkZEQUYwNDYxNERBOUQKKzoxMEI1RjAwMDY3ODgyN0Q0NEY5MjZFMkQ3NDM0RDQ4N0ZFQzdCRUQ2ODkKKzoxMEI2MDAwMDhGRUEzOTcxOUY3MjM5M0E3RTJBRUNBQ0IyNTcyMjU5Q0YKKzoxMEI2MTAwMDBDQzA1MUY0QjlDRDNGMUFFOUJCNjM1MTE0Q0VFN0E0NzUKKzoxMEI2MjAwMEI5ODJGM0ZERkFFNTFERDFERTJCQjJGODNBM0EyOUU1RUQKKzoxMEI2MzAwMERGOEI5RUJFOUJGODcxOUU1MkQxRDE5OTQ1RkM5RTY4Q0UKKzoxMEI2NDAwMDIyNUJDMjk3ODhGMzlDQjM2RTEyQ0Q3MzJFRDM4ODFGRjIKKzoxMEI2NTAwMDhCRDZBQjVFM0ZBNERGOUI1OUMxQ0UzNkQ2Q0Q1MkIxNUYKKzoxMEI2NjAwMDZFNEU2RTA0RTJDMjNDNEY4QTc4MkJERjQ3QUFEODQ3NjEKKzoxMEI2NzAwMERGNDlGQUZDNkUzMTY3QzYxNjUyRkU3QjYxQ0Y0REVDOTYKKzoxMEI2ODAwMEQxNzI5RTZEMEZERDg3OTY2RkJBQUYxRUU5NzRBNkFCQkYKKzoxMEI2OTAwMEE3MTNDMjA5NzhGMDA5QkMyOTNGNDNCRkVBODcyMzNCQkYKKzoxMEI2QTAwMDcxM0EzMTE3QzYyMzUwM0JEMEFCMjNGMDNCRDZBRkI3MkUKKzoxMEI2QjAwMDc4RDBDRjFFRDI0RUVDMTNGOUY4Nzc4OUYxMDFFRTcwRjUKKzoxMEI2QzAwMERDMDc5RkVDRDg3NjNDRDdDRTE2QjlDMEVBNDNFM0I5ODUKKzoxMEI2RDAwMERBOTUwMzlCRUUyN0ZFRkFFRTEzMkU2NzE2RjhDNzE1RDAKKzoxMEI2RTAwMDUwNzlCRDI1RDAwOUNCRkQwNzI2MkEyNDI3NkMyQ0QwMDQKKzoxMEI2RjAwMEQ2M0FERjY0MTFFQjVDNUYwRTcwOUE5NTUwRkNFRUU3NzIKKzoxMEI3MDAwMEY2QTlFNDk3Qjk2MDk3MDU0MkVDODQyMEZGNTg4M0RGREYKKzoxMEI3MTAwMDY5RkVCRjEzRjg2RUEwRjMzOTc5QUUzNzRGQzgwN0UzNUYKKzoxMEI3MjAwMEZDOERGMjYyNzE4RkI2RTM0RUQ4QkFCNkNGOTM4MjcyQjcKKzoxMEI3MzAwMEMyNDdFMzk2ODI3RTQ3N0JBNEY0OTg4REVDODhEMjE3QUIKKzoxMEI3NDAwMDJDNUVDNEQzRDlFRDg3M0VCRDBERjdCN0I1NzI1REVCNjYKKzoxMEI3NTAwMEU1QjA3MTVEMTdCREQ0QkZDRDc1N0Q3NjU1NkVEQkVCNjEKKzoxMEI3NjAwMDFBQkVCN0I5QUU1NzI5MjRFRkZFQkI3MjE4MzQxRkY5QzEKKzoxMEI3NzAwMDI1MkVCNzdFRTdCNTIzODc5RjMzRTBGNTdCOTYxNTNERjEKKzoxMEI3ODAwMDA4MEI5RDg1REQ4ODRFMDZGQzRBQkMxQUU1RUExMDE0QkMKKzoxMEI3OTAwMDkyMUQ1QUNCNTU4NjIxMUEyMUY4OTQ3ODk0RkNDQTk4QTgKKzoxMEI3QTAwMDQ2RTNCNEYwQjVFNDVCQzlENzJEN0M2QjlDQjcxRTlGMTQKKzoxMEI3QjAwMEM2RjJGOTQ4N0I4MEM3RkJBQTg1RUM4NUQyM0ExRTZGOUEKKzoxMEI3QzAwMDA4RUQyODNFQUUxQ0ZERjM1NEJCRTZDREE0RjhEMEJDN0EKKzoxMEI3RDAwMERGOTBBRjM1RDRGNzE4RjI1RTQzN0RDRDkwQUZEMEQ1NzIKKzoxMEI3RTAwMDJGREQ3QkM4Q0FGNzBGMDE1RDNENUJFNUNEQjQxRjY5NTYKKzoxMEI3RjAwMDZENjdGOEY5QjlEM0FFNkZBRDNFRTQ4RjJFNEQ1Njk0MTgKKzoxMEI4MDAwMDkzOTZBNUNDMTcwOUVEOUJGNkE5NjRGNzVDNzAzNTQ1QjYKKzoxMEI4MTAwMEExRERCMjNDOENEQjc1MTc5QzIyMUZDM0YzNEQxREFDMjAKKzoxMEI4MjAwMDJCNTA0RUNBRUY0RDYxREMwRjczQzFEQjE0MTUxM0IyMDAKKzoxMEI4MzAwMDlGNkZBQzUzQTNEMEZGREJFMDY3MDU2REM3QUI1NDEzMUMKKzoxMEI4NDAwMDVFMUI1ODdCRTVEQ0JFQkIxMENFRkQwRDE3QzJCOUJGMzkKKzoxMEI4NTAwMDYxQTRFQTQ4QUU0NDNGNkMwRDhGMEI5Q0JENjQ3MjE0MkEKKzoxMEI4NjAwMEM1NTVENEE1REQzMjA1QkVDRjc5NUJFNTYxRTAzRThGREQKKzoxMEI4NzAwMDE5RTMxOTY2NzE1MkIyNTNDQzQ3RjE4MUIzRUE3ODVDOEYKKzoxMEI4ODAwMEMzRUM1NTdBM0FDRjc1NkNBMkY4QjdFRkQ5NjI0QUU3QTQKKzoxMEI4OTAwMEFFRDFDNzIzMTRCMzU1QzQ2NzQ1RUIwQ0RGRUI2RUE2REUKKzoxMEI4QTAwMDc1NTI2QzU4Mjc5QUYwMEYxQkQ3ODkyMzVEQzQzREU2NkIKKzoxMEI4QjAwMEIyNUM1RERDQTM5MEU3MjNENUFDNUJBNjAwM0QyRTFDRkIKKzoxMEI4QzAwMDUxOTkwREYyQ0Q3NTJBNUJEMThGQzdCOUUyRjkxMzZFOEMKKzoxMEI4RDAwMDQ4NzBGRDJEODBGNThBNzY5M0M0RDczOTVDNDczRERCRUYKKzoxMEI4RTAwMEI3NUZDRUVERkVGMzgwNUYyMURGRUNGOTIyMDdDRjg1NTUKKzoxMEI4RjAwMENGRUQzOTk2RkUzQUU2NUZGOTYzRjIxN0FDNzVGRDExQUMKKzoxMEI5MDAwMEZCN0Y5QzhFNzJGQUMyN0UxQjQzN0VCRkIwRkZBRDY0OEMKKzoxMEI5MTAwMEY0NDc1RTc4Q0Q0NkZCRUMwQjRCNkREQ0NGQkQzRkQyRTAKKzoxMEI5MjAwMDhGMkFFNjQyNTc2RTE3NTdFRkZCMjFBNzgxRjRGMjMyQjgKKzoxMEI5MzAwMEEyREYzNUU5NTY2RTVGRDVGREZEMzhGQUQzOUJFQjYwOEIKKzoxMEI5NDAwMDU2MjhGN0Y3NDdEMDdBMkE3RjJEOENGQ0NDMTdGNkZEQzYKKzoxMEI5NTAwMDMwMjBENDNGRjdERjlEOEYzQzRGQkYxMEM5QTZCQzg0NzkKKzoxMEI5NjAwMDdDMUNDM0Y3MDVFNUFGNUZGQjJDOUUyRjk3RUQzQTYwN0IKKzoxMEI5NzAwMDlEMDVFNTIzRkVFQjFGMzkyODU3MkZCQ0M0RURBOTZGQTkKKzoxMEI5ODAwMDJDMEQ0RkEzOEY3M0Y4OTZBODQ3MkM4OUU4RTc4M0NFMzgKKzoxMEI5OTAwMDNBMzNGNkM1OTZCMTEzN0M1OTZERTE4NUUzRTEwMkUwRDcKKzoxMEI5QTAwMDAxRTcwNTc4Mjk0MjdERDAxRTNFQTYyMjNFM0FGQzI3QkIKKzoxMEI5QjAwMEUyRTNEQkU5NUNCRTVEQzNGMDNDM0E4ODE3QzVDM0JGNzgKKzoxMEI5QzAwMDQ3RkFFRDBBQ0Q5RjdGREZGRjQzMEVDQTlGQ0JDREY3MkQKKzoxMEI5RDAwMDlFRkZDRkU2RkJFODdGRUM3QzM5QkY3NzRENzcxMTlDNkIKKzoxMEI5RTAwMDQ2QkU2RkNERDdBRkZDODJGMjNCMjJERDA0RUYxNUFFMzEKKzoxMEI5RjAwMEY3RERGRkIxRUJGRDdGODZERTFGRkZDN0NFRjc3MkY0RTgKKzoxMEJBMDAwMDdFNUJEMDNCRDI4OUU3OTkxN0Y2RkQyMzk5NURDNUJDRDMKKzoxMEJBMTAwMDlCRkY5N0NFNUJEQUYxQzM1NUY3OTE1Q0E4RkYyRUFCODUKKzoxMEJBMjAwMEZEQzQ5RDQyRDY0ODlCNzY0OEI3NjA5QzFGRUQ5RjQ2NUIKKzoxMEJBMzAwMDMwQUVBNzQ3RDg0QkM4RkUxQ0QxRTU0MUIyOTdBQjU5RjEKKzoxMEJBNDAwMDFFOUQ1RkY4QkFBODc0QUU0MzQxMjA4MDg3QjcxMjcyN0EKKzoxMEJBNTAwMEU5NUUxNTMzMDdCQTJDODJGQ0YwQTQzMjhBRkYzMkVFN0QKKzoxMEJBNjAwMDJCNDc4NDhGMjk0MEZCRjREMDEyODAwQkZBMzkxNDY5REMKKzoxMEJBNzAwMDcyRTIxOTc1N0UxNzdFNEYwOUQyNDY0Q0RGNENCRTk5OTMKKzoxMEJBODAwMEUyRjhGMzFERkFGREQ1Q0Q4NjdERDI4RDJFN0Q3OTAxQUMKKzoxMEJBOTAwMDdCMjkxRUNGRUQwQUIyMkM3NDVGNjIxNEQ2MEZEOTU3RTIKKzoxMEJBQTAwMEZFMjNERDQ5NzhCOTkxRDUyQzczM0FBRTFFNEZCNzA4MDUKKzoxMEJBQjAwMDNDQjVDNkMzQkZDNjVCMkIzQzg5N0RCNDU5RDQzN0UyQzUKKzoxMEJBQzAwMENERUM3OEEwMUVEQjk5MTlFQzhCRjk3QzY5M0YyREY3NDIKKzoxMEJBRDAwMEM1OTdDMzI3MTNGQjZEQjMxODVBRTJEN0RDODU5RkNGRjgKKzoxMEJBRTAwMDg2RjQ0Qjc4OTE3OEJGNUE3QzRCM0ExOUYxMkVGMTJCQTIKKzoxMEJBRjAwMEYxNjZBNDQzMkFDNkY4RjUwRkUyQkY4QjM5RDc4Q0VCNjkKKzoxMEJCMDAwMDZFODhCMEVCRjNDRDMxM0NERkE1NUVGNUQyN0FGNDczRUQKKzoxMEJCMTAwMDNFRkZDRTZENDZCQjdFOTgyMzg2RTI0MjhERjcxMTY2Q0UKKzoxMEJCMjAwMDBFOEMxOUEwQzA3QzkzQ0NDQzY3ODM3RDI4OUVCRDkxRTAKKzoxMEJCMzAwMERGRjU3RUIzN0Y2OTBBOEVDM0ZEQkI1RENEREM3RjBENzMKKzoxMEJCNDAwMEFCREIxNzlFNDdGNTNENTZDODE3M0UzMjhGNzlBMDdFNzYKKzoxMEJCNTAwMDYxMTI3MzJCQkMzRThCOEVBNUYwMzhBNkM2RjI3QjlCODAKKzoxMEJCNjAwMEQ4QUUzMDlBRjc1QkQ4ODlGOTk3NzI3QTEyNUREMEVEMkEKKzoxMEJCNzAwMDgzRkUwREU4RDc2MzhBRTVFREEzRjJBOEJEQ0ZDNERCNTEKKzoxMEJCODAwMDdCQ0M5MDc2NEJFMzcxMEE0RENCQjk1RkJFRjBCRUFFNzUKKzoxMEJCOTAwMEU5MjgzRjQ2MEZEN0ZCOTlERkVBQzlGREQyMzJFRDlCN0EKKzoxMEJCQTAwMEUxMjI3Q0E5MjY3NzAyREQ4RjU4OTY0OUZCMjMzNURDRkMKKzoxMEJCQjAwMDVCQjYxQkZERjQzQjc4OUM0RUUxOEEzQkM2RjQ0N0Y4MkMKKzoxMEJCQzAwMDc2QzRCOTExQkMzMzYzNzcwRUUwRjVBN0RFRkQwN0Y4NDQKKzoxMEJCRDAwMEFFNkQwREEzRUY5MzMzQjRBNTNEMzExRTQwNzE0RERGMjMKKzoxMEJCRTAwMDBEMUY2NjRFM0E2NDREODAyMUI0REE3MUU3RDE0RjM4QUIKKzoxMEJCRjAwMEQ2QjdGMzdEM0M5RjFDM0I1MUE1RkE2MzE5OEZGNzY0QzAKKzoxMEJDMDAwMENCNjAxQzI4MUZFM0ZCRDY5QzAwRkQ4RDgxNEQwNzk2NjEKKzoxMEJDMTAwMDM3ODYzOTkzRUYwNEY4MEI4NTdGRjgyMTVDMkYwODZGODYKKzoxMEJDMjAwMDM4RDM1RTcyMjA1QzVERDM1M0UxRkIxOEQ2NzZCQ0YxNEQKKzoxMEJDMzAwMDUxNTk3RkI4QjIwRUNGOTlCQThERTBGRTdCNTkxRkZCRTgKKzoxMEJDNDAwMEMxN0UzRkVBQzlGRDUxNEY4ODU0RTYwMUFGNTQ3RkY2RUIKKzoxMEJDNTAwMDRBNUI2MzFBRUU3RjU2NUEwMjNEMjE3NUY0MUFCRUJFNDYKKzoxMEJDNjAwMDI3RTA2Rjc0MkExQkI1MTZGMTdFQUZDQTM2MTJCQzREQTEKKzoxMEJDNzAwMDg1NzRBRTEwOTlFMTQyM0E2OEMwRDI3NEJFNTI5M0UyMjQKKzoxMEJDODAwMDQyQkY1OEUzQjBEQTAwOUUyNzM0M0U5MUUyQUU3NjExMEYKKzoxMEJDOTAwMDk1MjkxRTQ4RUVCNzFBODcwNUJBQTMxRkJGMjk5NzlGOUIKKzoxMEJDQTAwMDRCMUM3NzM2NDRFMjdFNzE5NkMzQ0VFRjQ5OEFCOEEyMjgKKzoxMEJDQjAwMDM5RTI1RTRDQjdFQTg2MDdBRkMxN0RFOEEzMkE5REQ3N0IKKzoxMEJDQzAwMENDNzk5NERGRjdGQThCQzNFRTU3NzBERkI2NDZEQ0Q3M0EKKzoxMEJDRDAwMDVDQTU4RjIzNjI0RTM3Rjk4MTY2RDUwQ0IzRTI3RTczODMKKzoxMEJDRTAwMEI2QzM2M0M1NzlGRTMxNDM3QjFERTcyNUVGMTdGNjQyRTYKKzoxMEJDRjAwMDIyNDA5Nzg1MzU4NTE0QUZBMjQ2QzFCQUMzNzU2Mjc2RDYKKzoxMEJEMDAwMDQ1RTEzRUQ4MTg4NzU0MkVFMjhFNjRGRUExNzBFRDMwRDYKKzoxMEJEMTAwMEYyQzNDQzY4RDcwRUU0OTcyRjJCRDNDODNGQUEwQUJFMzQKKzoxMEJEMjAwMDFCOEQ3MTk1Nzg5RTYxNkU0ODQ0NzhFRUVFRTkyMkJFRDcKKzoxMEJEMzAwMDFDMURFQjRDNzcxMDNGODczMUM0NDNBM0M1OTk4RUZDODMKKzoxMEJENDAwMEREQjgzQ0NDODRFNzcyQTM5NzcyQkU4Njc1NjYzNzQzMzQKKzoxMEJENTAwMEZCRkJDRDJDMUNDRjE5N0UyN0RBNEY1QjYyRjY2RTgwODEKKzoxMEJENjAwMDdDMTczQjMzNDdDNjIyNUZFNTEyNUZERkQyNEI3QjAyNzUKKzoxMEJENzAwMEU3NzdFQUQ3NkMyMEYyQzNBQzU1QUJFOTNDNDZGMjA1NTUKKzoxMEJEODAwMDMzRDdFN0M3QzEzOEE3MzZBN0U0QTFEQzZDOTFEM0JEOTAKKzoxMEJEOTAwMDg2N0Y4MUVENUFGODYxQTI0MjdDMDBFOTgxMzRFMjg3MTYKKzoxMEJEQTAwMEYxMEQzOENGRDFDMzAzREQxNzY2RTE3RUI0OTQ3OTUwMkQKKzoxMEJEQjAwMEJGMjczMDM3REEwOUNEQUM4OUNFMkI5QjFENTYxN0ZBMzkKKzoxMEJEQzAwMEJGQTQzQzkxNzIwM0U4RUFDMTdCQjc5MjBGQjY4MEJFNzQKKzoxMEJERDAwMDM3NUIxOERCNUE2NUE3RjRGOTJBMjczM0Y3NjA2QzdCQzkKKzoxMEJERTAwMDU1MDJFNTc3NTRCOTI4QURBRENBQTBFRjJGNTVCOTI5NTIKKzoxMEJERjAwMEJGQUI2QTIwRTVGNzU0NzkyOEJGQjdBQTgwRDJEN0FBOEIKKzoxMEJFMDAwMEJDRjQ1RENBMjVDMDBCQzkyMTI5NTdBNDNDOUFFNUIwRjIKKzoxMEJFMTAwMEQyN0Q1RjI5OTc4QzdDMzMxREQwM0IzNDhGREE5M0RDNDUKKzoxMEJFMjAwMDkzRjIwRUU3NjFDQTBCQ0EyMzQ5REY1NEM1RUI0QjQ4QjYKKzoxMEJFMzAwMDQxMzlENjMwMTVFOTNGNTIzREY3QzIyQkI4MkYyRjcyNEEKKzoxMEJFNDAwMEI4Njk5RkNFQjhEQzZCMDY3RTQ1QkMyNDVCRDk1RUY0MzYKKzoxMEJFNTAwMENCNTZERkU5NjlCQzJGMjU4OEZGREI4QjE0NjYwRUUxMkEKKzoxMEJFNjAwMEFCM0IyQUMyOTgzOTQ0NkZDQ0E4OENEMUU1QTc1NTdFNEMKKzoxMEJFNzAwMEZDNDYyN0U4RkY5RTBFNUE3QzA2QzA3MUZDMzc1RkFGNzgKKzoxMEJFODAwMEZGMjM3QzdGRTYzNzY3N0EyMEJEMDE4RUNEOEZFM0I4MzQKKzoxMEJFOTAwMDhCQzM1QkUwODhDNUZDMzIwQjlENzM3NTEzRkU5MzZFRkMKKzoxMEJFQTAwMEMyN0Y4MkZGOTAzRUYyN0VGMzMzQkZGOTFCQURGM0M2MzMKKzoxMEJFQjAwMDRBOUIwQkVERTJDRjkxNUU4MERGM0YwOTdBQ0RBQ0I0QjcKKzoxMEJFQzAwMDExMUUwQjk3N0ZGNUMyMkJCOERFMTc1QjQ5REVDRDVDRTgKKzoxMEJFRDAwMDI2RDZBM0UxNUVGMzk3ODk4Q0ZDMTI2MDU1QjM0QUMwNjUKKzoxMEJFRTAwMERGOTdCRkI2MDYyMkEwRkYyRjE1QkU4RTE1MzAwRUE2MTcKKzoxMEJFRjAwMDYxRkNFMUNBQjczRTQzMzlBMDU0MUVBMUYzNzcwREVGQjAKKzoxMEJGMDAwMEUxMjE3QzNFQ0IzOUREM0RFOUNBMzdBOTFFNkJFODEyNDEKKzoxMEJGMTAwMDgzN0UxMzc5Q0YzOEEyOUZDN0VBODJGOTIzNkYyM0ZENkUKKzoxMEJGMjAwMDY2NjYxQzY0ODk3OENFNTJBMzM4RDE4NTM4NUI3QzlGQzUKKzoxMEJGMzAwMEJEOTJCRkRCODA3MTNDMTNDMUZFMUI5MkExMTIzRDJCNTEKKzoxMEJGNDAwMDdCOUEyOUZEMTRGNTJERjk5MzZCNDg0RjQ5QkU5REJEOTEKKzoxMEJGNTAwMDBBREFFMUZBQThDOUI1Q0UwRDkxQzczM0M1Rjc1OTE5NjgKKzoxMEJGNjAwMDI2NEFFNUY3MzFEODJGOUVGRkFEQ0M5RDgyNzY0NTY3RjYKKzoxMEJGNzAwMDJDQ0ZDMjM0NkYwQUUyQjdCMzYzOTQ1OTA5RTE4MzFCMzMKKzoxMEJGODAwMDMyQ0MwMjBFNDZFRDNFQzU0NTA3RTkwMzE5QTlENjM5NjQKKzoxMEJGOTAwMDU5NzRCRjhGRjQ5ODFDNjc2NjQ2REUwQThDMkY5REI5RDIKKzoxMEJGQTAwMDZBMTg0QTYxNTY2RDcxMjdDNDQzM0Q2RjRCM0ZEQzdFNzIKKzoxMEJGQjAwMDYzNzYxRTQ3NUREQThFMUU5MTdFQjU1M0Y4RTdCNTM0ODEKKzoxMEJGQzAwMDZGRjJGQjE2RUZGOEZEOEVEN0EwRTdFMjJGNkM0NERGOEYKKzoxMEJGRDAwMEUyM0UyMjZFMkJDQjNGNjAwMjM5MjBGNUZFRUNGQ0RGMDcKKzoxMEJGRTAwMEZGMzk4QUNFMjk3NkYxRjg0RTQ4Qjk5Rjc1NzExMUY3NUQKKzoxMEJGRjAwMENCQkE2MTdEQjU3MTVFNzQ3OEM3MTc1MTZERkFCMTc3QjAKKzoxMEMwMDAwMEE5NTdFNEM3MkU1NzdFOEE0MjNCNDJDRTY3RTRCRUVGNzMKKzoxMEMwMTAwMDNCMTIxQ0NBMjUzQTI3MkFERkI3QkM2MzVCNzE1RTQ2MTgKKzoxMEMwMjAwMDNGNzY4QkJGNUJGOEY1Q0ExNzE3QjRFOUVGMzZGQUVGMjYKKzoxMEMwMzAwMDk2NjUxOENFMEZDQzhDRUU4RDQ5RkYxRDUzQjNBMkYxM0YKKzoxMEMwNDAwMDFDRTA3QjcxOUZBNEJEN0Q4RUY0N0Y5N0FGODU0RUUyOEYKKzoxMEMwNTAwMDYwQkQ5QTVERDE3OEJFNzVBMTFERkJGQTY4MDZEN0ZGNTkKKzoxMEMwNjAwMEU3ODVCRkZDQzI3Njk1RjYzRDE3QjY0N0QyQkE1QUIwRkYKKzoxMEMwNzAwMEZEOTEzN0YxREM3MUMxMjY4NUMwMjg2M0Y1ODQzRkMwOEUKKzoxMEMwODAwMDJCQjM4N0VBMzU4QzYzOEI2QjBENzdCM0JGNDczNEVBRUMKKzoxMEMwOTAwMDk1OTJERjQ3NTYyMEJGQ0RBRjU1M0M5QjAxOUU2NkJCQjYKKzoxMEMwQTAwMDJCQkE0MzA4M0M1QjkxREY4MDdGNEE2Q0I1MDMwOERGMDUKKzoxMEMwQjAwMDAyRkVBNzUxNEVGNjBGRDY5QjVGRjcwOEY5OTdBMURFNTcKKzoxMEMwQzAwMDM3NjQxN0JEMTg4MUIxMDI4OEY3RjcxMUNFQjNFQkZBQzgKKzoxMEMwRDAwMEJBRjFCQzcwN0VFRENFMDU2NDU3NkM4RjcwQTI1RkUxNDMKKzoxMEMwRTAwMDhDODg1Qjk2RkRFQzEyRkNCRDJCODNEQjMxNjdDNUY5QjgKKzoxMEMwRjAwMEQxRDkxREZDNUUzRkMyODlFQkVDOENDMkZERDBCMkREMTQKKzoxMEMxMDAwMDZCMDJDRUQ3MzJGOEJFRTQ4RTBDQkVDRTY1RkRGOUI1MUIKKzoxMEMxMTAwMDhENTFEREExRkVDOUJEMUY1MzdBNThENDlGRUZBOENGMjIKKzoxMEMxMjAwMDQxN0Q3QzcyNTcwNDlEN0Y5RERDRjVENEE4RDc2MUJDMEUKKzoxMEMxMzAwMEYzQjVDM0UyNzE1REM4RkUzRkNBQjA1MEZERjNFQkQ0NjYKKzoxMEMxNDAwMDAyQzQxN0YzRjNCODk5MzJDNDZGREY1MDM4RTMzNkY4RkUKKzoxMEMxNTAwMDUyNDJENzFGOEYxRjNBQkJFQkU1Mjg1MzU2OTA5RTY1N0UKKzoxMEMxNjAwMEY2MEE3QkEyMDlEN0QxOUQ1RUU0RUY2ODY0MUU4MEQ3RjIKKzoxMEMxNzAwMEJBNkI5QzBGNzU1ODc5NUQyRTQzQkVBNkY1OTc0OEY1QUUKKzoxMEMxODAwMDU3OUE0MkVBRDkyQzZFOEEzM0I1RUMyREY0ODgzNzU0OEQKKzoxMEMxOTAwMEY4M0QyNzExQzczRjUyQ0RBMjczQzVFOTdENUM5MzZGNkYKKzoxMEMxQTAwMDQ3MzlGOUFFODVFOEIxMzBEMzM1MTlFNUQzQzU3QTk1NkQKKzoxMEMxQjAwMDIxOUMwQjUzNTgwMEVEOTM0NUY3NDY2RTQwM0QyNkUxMTgKKzoxMEMxQzAwMDlFREU5N0NCODNEMjk1MEFGM0MwRkM0QUZEMkFEMzIwOEEKKzoxMEMxRDAwMEVEMENGNEY3MjEzRjI1MzRGNEM3MzhDOUM2MTQ2RTU3NjcKKzoxMEMxRTAwMEM4RjhEMTI3OEI0QzFFMkJFOEMxOUYzMjYyRTVGQjBGQUMKKzoxMEMxRjAwMDRGQ0NDMUYzQjNGMTE5QjQ5RjNCNkU2NTNFMTVGRDRBQjgKKzoxMEMyMDAwMDJGRjFGOEQyRDI1NDFFRDdGQ0E0ODg4NzJGOEQwREE0MEQKKzoxMEMyMTAwMEM3NDE3RkU3MDQ3RDRCQzcwN0QyMzFFRUEyRjRBNTQ0QTYKKzoxMEMyMjAwMDhBQkIzODY3RTVFNzlFRjgxRENGNTk0QkYzQTBCRDgzNjUKKzoxMEMyMzAwMERFQ0REMDY0RkI5ODEwN0UyQTlERTk3NjYxM0QzNUQ2MkYKKzoxMEMyNDAwMEVEQ0E3NTIwQkNDRTZGQzhDRUREMURDOUQwQ0UzNUJEQzAKKzoxMEMyNTAwMDEyQzlFM0E2OUUwQkRCNjgwQkExOUIzMzkzRjM5RjdDNzMKKzoxMEMyNjAwMDhGODNEREM2RTM4QzFFQjNGMEI4RDRDNzM2MjdGQUZENDIKKzoxMEMyNzAwMDIxRjg3QUNDQTI0RDQ1M0NFMDNDRDBCRTlGNkZBRDQ5NDEKKzoxMEMyODAwMDQ3RkI1N0MyM0IzRkFBODZFMDNDMjdGODdEN0U3ODBERUUKKzoxMEMyOTAwMDhGRTcxNkY3N0JCMTNFRTYxQjQ1MUM3QUQzMzYxQkM1RUMKKzoxMEMyQTAwMDAxOUQ0OUFDREY4M0UzOUZEOTk2ODkyRkYyMDBGQ0ZFMDQKKzoxMEMyQjAwMEI5N0JBOTFDRUM0QkEwNjdGMUYzQjYwMENFRTdGNDM2Q0UKKzoxMEMyQzAwMEVFOEYzRTZERTFGNkRBRTk3MTA5MkVBNDZGQzFGOEI1ODMKKzoxMEMyRDAwMEQzQzk1RkIzQzlBNkEwOUZFRkI0QzJBQzA5NThCRUI5MTkKKzoxMEMyRTAwMDAzQzU5RjE3NTc1NTUyRkM3NjMxODgwREJDM0YwNDY5MzIKKzoxMEMyRjAwMDAxREUwMzNBQkQzOTkzRTJDRDRFRTMzQjBDMEE3RDVGOEMKKzoxMEMzMDAwMDg5REYzNTU2MzNGRDk3ODg4RkFEN0M3Rjc1RTZGOUJGQTEKKzoxMEMzMTAwMDY3ODZDNjdCQ0JCNDc4OTMzRUJFNEVGMjg5MkNDRkNERDgKKzoxMEMzMjAwMEU0RjIyRDU3RTBCOTdGMjY3RjJGQTQyQ0EyRjZCMTU0NUEKKzoxMEMzMzAwMDlBMjdDNzNCRDA4OUJGNUJDMzFBMjI5RkVBODdGMTE0QjMKKzoxMEMzNDAwMDNEMTQ5NDIzNEZCMjQwRkE1M0U4NzdEOENBRjc1RjY3OTkKKzoxMEMzNTAwMEI2NUIyODZFQkRGODk1NDgwRkM1QjFERDc3OEQ4OUUyRDMKKzoxMEMzNjAwMDI5NTQ2RUE3MTc5QjAwN0Q5MDJBQkZEOTRBRjE2NUYxMjkKKzoxMEMzNzAwMENGODdFNUQ5QzgzRTY3QjRDRjZEREFBQzhBNzFDMDI2RTUKKzoxMEMzODAwMEM2Nzk2RkUxNzFDN0EzRDE5NkE0RjI2QzJBM0YyREYyNTIKKzoxMEMzOTAwMEE3Rjc2NDkzREQwN0ZEN0JGMDdFNTVGMTJGN0ZDNUYxOTQKKzoxMEMzQTAwMDM4QTFFODI4QjdCQkVDMjQ2RjRCNUJDRTc5MDY0N0EzRDYKKzoxMEMzQjAwMDFFMkNCQjZGNTAzNERFM0Y2NDFGQTgwQ0VEMTYyMzlFNkQKKzoxMEMzQzAwMDJFOUFERDlENTBDRTJFQ0IxNDcyNzdDRjdBM0E5RjJBQ0IKKzoxMEMzRDAwMDExRjcwODRBOUU1N0Y4MzkzNEFDNDNCQzlGNTlCMjYyRjIKKzoxMEMzRTAwMEQwRTNDNDlGRUY1QjU4MEY5OENGQjlEQTQ3QTI0MkU5NzgKKzoxMEMzRjAwMEIxMjA5M0NCRDM5NkZBNTYzN0Q1MkY4MUZBRDg0RkM5QUYKKzoxMEM0MDAwMDhBNzdBMzA4OUUyRDE2OEE1NzMxRDJGMThBREIzRkFGNzcKKzoxMEM0MTAwMDVFNTFGQjE2RkVBOEU1N0U5NjU2RjM2N0Y1QkZGODAyNUYKKzoxMEM0MjAwMEZBRkY2RTdCOThEQjQ3NUY2QkU5MUVEQzU5NEJFRDVDRDYKKzoxMEM0MzAwMDlDRkZEOTE3QzI0ODZFOUQ4REUxRjJFMTI0Qzg1MzVGN0QKKzoxMEM0NDAwMDRGODRFM0U2ODcyOUJFRUJBMzA5NzQ3RjZGOUU1RkRGMEQKKzoxMEM0NTAwMEFGMUM3NzUxMjY5N0UzNjU3MUVFNjg4QzE3MkNGQjgwMzMKKzoxMEM0NjAwMENCNDFBMENCMkRENEZFMDMwQkI1MzdDRTYzQkM2OEQ3MzAKKzoxMEM0NzAwMEIyM0U1Rjg4MjA3RTM4REI5OUQzRTVFQzhFOUVBNDlGODgKKzoxMEM0ODAwMDFBNjMzODlGMDNCQ0M5NzhERkVGRUMwQjNENzNFOTFFREMKKzoxMEM0OTAwMDFEMUEzREMwMEZDNTYyRkY3QjM2QTYzNkQ5MTk1MkRFODQKKzoxMEM0QTAwMDY4MTFGQkI4MDBENDQ0QkVDMTM2MjBERjhCMkJCOUJENjgKKzoxMEM0QjAwMDU1NjI1RjQ1RjEyNTE4QUYzQjIwOEZEMjgwMkRCNjc1QjAKKzoxMEM0QzAwMERDMkRGMDJCRUQyRkRGQzkxNDdFNEMxQ0FGQTM4ODEzOUQKKzoxMEM0RDAwMDI3M0JBOEQ2OEE3MjVCMTNGNjYyRTk3NjYzREMyRTJGQkYKKzoxMEM0RTAwMERGMjZEQjAzQjRGMTMyNEUxOEY5RDBBNzUwOUM0QUM5QkQKKzoxMEM0RjAwMEIyM0JFNzUzRkM3REM1RUFEQjcxOUQ0OUY4NEJDQ0FDMDAKKzoxMEM1MDAwMDAwRjc2OThEOEE0QTcwMzQ4NkIxMTlFM0QxQUUwQzFERUIKKzoxMEM1MTAwMDI3QzQ5RURCMTUxQzg3RTFGQjVGQTVGODA3QUNEOUJEREUKKzoxMEM1MjAwMDk5MkVGQThFRjkxQUU4QUY3NDk5QjI4QUM2NDk5MUZCMkUKKzoxMEM1MzAwMDVEM0UyRjg5Mjc0MDg3MTVFMzA0MUI4Nzg5RjI3NkU2NDUKKzoxMEM1NDAwMDJERTEzNENFQkJDNUVFQ0FFNEZFQTVDNjE0RDdDMzgzMjUKKzoxMEM1NTAwMDkxQ0VFRkE5NzQ5RkY3RTI0RjdEQTM2M0RCQjBEMzgyNDYKKzoxMEM1NjAwMDdBREUxQThDOTcwNUY4OEY2NTMyRUE2NzdEMjZCN0QzOTUKKzoxMEM1NzAwMDRCMzAxRTE3RTA0QzVGQTc4RjE3Q0ZEOEE0Q0ZGN0RBNDgKKzoxMEM1ODAwMEFFQ0Y2N0VERDJFNzczRUFGNDc5Rjc2MTdERkU4MDE4RUMKKzoxMEM1OTAwMDE3RjdFMTc4N0YxOEY3RTE5OEUyM0VEQzY1RTNGQjcwN0UKKzoxMEM1QTAwMENDRTMzRTFDNTNEQzg3RTM3N0RDODc2MzFFRjdFMTk4MUUKKzoxMEM1QjAwMEM3N0QzOEU2MjVCRTcxM0Y4RTc5REM4RjYzNzk3ODJGOTEKKzoxMEM1QzAwMDhFQTc1MjExNkY4OTc0NDA3RTY3QUY4NkU5RUUyMzVEQjYKKzoxMEM1RDAwMEQ4QzdFRjk3MDAxRkYwNzUzM0Q1NEFFQkU2NDlBQzQxNTkKKzoxMEM1RTAwMEZCMTFFRTc3RUEzQ0MxRUVDMkY4RTE1NTcxREE3Nzk5QkEKKzoxMEM1RjAwMEZERjExRTRBRkQ4QTQ0QTQ5QkI5ODFFMjU4Q0I1RkUzNUEKKzoxMEM2MDAwMDcxQUNBNTc5NjEwRUY0N0YzNDJDM0ZCOTAyQzM0M0I1RjgKKzoxMEM2MTAwMDM4RUQ0N0FDN0ZDMUQyQjQwNUYxNUI1Njc5ODhFRURGQzcKKzoxMEM2MjAwMDM3MkM3MTdENzAzREE3MUZGOTYxNTg1MTJDRDk1MTg1NjgKKzoxMEM2MzAwMEE4RTc2MkRCQTdBMzMxOUU5Q0FERDJDNzhGMUJFM0M5REQKKzoxMEM2NDAwMDhENzFFNDQ2M0U5MEY2REYzMzk2QTY0NDk0RUI1RjZEMjEKKzoxMEM2NTAwMEIzQUY0MkY4QkYwQTEzRjc2MUE2RDgwREYxMDAwRTkyRUUKKzoxMEM2NjAwMDI3MEIxRjU0MzZBMkJFRUVEQzhCREI1MUNENDdDMDVFREMKKzoxMEM2NzAwMDZGNDNDRkNBNzRENkE1QkU2NDk3QjdFNDU3MjkyNjhBRkMKKzoxMEM2ODAwMDRGRDczQ0E0ODcxNjA5OTg5Mjk1QTZDNkZCNTBDRUNERUQKKzoxMEM2OTAwMDM3OTFERUJDMDhGNjFBRDk4MzlGQTg2NDNGRTAzQjU5NjYKKzoxMEM2QTAwMEExRjNDMTc3QjI0MkY5MEJERkM5RDJERjk3RThBQ0FCOTcKKzoxMEM2QjAwMDhGRUY2NEU5RUY0QkY0RDJDN0U3NEY1QzcyMDBGN0ZERjAKKzoxMEM2QzAwMDEzNTZGNUQ1RDU5QkVEMUQ2NEMwQTM4MDVCRDhCM0IzREQKKzoxMEM2RDAwMDQxN0Y3OEQwQkU1Q0JDMzYxOUU5QkI2ODdFNzNFMzdERDAKKzoxMEM2RTAwMDQwREY0NUJCQzNEQzU4NUU4NEZGMDc3MkIxMDhGQUM0NjMKKzoxMEM2RjAwMDdCOTc0NUJCQzRGREU1NEFCRDFFOUUyNUY0NTA5MTk5MkMKKzoxMEM3MDAwMEY5OUNCMTQxM0UyQzcyMzI0RjBDQjQ5RkRGQUIzRTA3MTcKKzoxMEM3MTAwMERGQzM5QUZGRjZDNzAzOUNBOUI4Q0YxOEQ2MDlFNTUxMjUKKzoxMEM3MjAwMEIyQzU0MzcxQjVBNTNCN0JDNDJDODE3RTdCRjdEMDZFMkYKKzoxMEM3MzAwMEVDMDVFQkZBNDRDREExODdBNkExM0VEQ0M5Rjc3RjVGRUIKKzoxMEM3NDAwMEFEN0EzOThBRTJDQjA0QkYyNTVCOUNFMTQ4RjcwRDM1MTEKKzoxMEM3NTAwMDNDQkUwRUZENjc2QTZDOTAyRjM2RDRDNDg1Nzc3NzA0OTMKKzoxMEM3NjAwMEU3MUJFNDgzOUY4ODRFNDAxRkVFRTcyOTNBNDhFNzIyMDMKKzoxMEM3NzAwMENEQjU2MkJFQzMxNDFGREFEOTcyN0VGMjFEMkRCNjhDMDAKKzoxMEM3ODAwMEY3NzM5N0M4OUYxMEZCMEQzOUNGNzM5OTA3NzI1Qzc4QzgKKzoxMEM3OTAwMEFGQTM2QTZGQjI4QUYyRENCNDdEMEJFRTQzRkU2OUQzQkQKKzoxMEM3QTAwMDY2RjdFQThGRjFBMDNERkU4OEVGQUExNUZGODFDRkU3N0IKKzoxMEM3QjAwMDJGNkI0NjQ0NUQ4QkY2RTcwQjE2Rjc2OEM4REY1N0YzMUYKKzoxMEM3QzAwMEFDMTVGNzE1QzU2NkJGOTVFMjMzQjc2REIwNjJCQ0YyMjQKKzoxMEM3RDAwMDBENUIzN0QwRjdCOTVCMEIyOTFFNzMxRUFCQTBGREU4Q0MKKzoxMEM3RTAwMDI5RjlFRTgxQzA0N0QxNzA2NTlEMTNFMDdFNDdDODhGNUYKKzoxMEM3RjAwMEEyNzA3RUJFMDdGNkQxMUJGOEVFQzhDNUFENEEyRUM2QTQKKzoxMEM4MDAwMEY5NENGNEVFQjQxNkMyRjc1RjhCN0FDNjc1RDI3Qzc0MUQKKzoxMEM4MTAwMEMyQzgwRTg0MEY3RTBGRTQwRjBDNzZGNzY5QUREN0M1NDIKKzoxMEM4MjAwMDg0NEIyOUI0MkUyNjVFRUE0REZCQjQ0OTgxNENCRTFGRDEKKzoxMEM4MzAwMENFMzJFQzg3OEZBQURDOUY1N0M3RDc0MTkxMzUxMDNGODYKKzoxMEM4NDAwMDAxRDdDOTdFMEJEOUI5NjU2NkZFNkU1MzE5RkM3RDFERjMKKzoxMEM4NTAwMEE0REVDMUFBOEU1RkNCRjMyMzc0RkMzQzg1QzVFQUVFNEYKKzoxMEM4NjAwMEQzREM4QTQxMjUyMUY5ODlBM0QzNzRGNTI3NEZFQzZERDgKKzoxMEM4NzAwMEUwRkZCQzYwMzlDOTkxRUI3NEY3RkVDQTE2RkI1Q0Y0QUIKKzoxMEM4ODAwMEJFMjExQkFFRkZDRTc4N0MyMUJEMDg2QTBGRkQzRTNFNjcKKzoxMEM4OTAwMDU4MEZGOTdCOTNDMkY3M0RCQjYyMzZBMjFGQjBDOEM0RTQKKzoxMEM4QTAwMEY3NEY1MzM0RkU3REMxNUVGRTlENEQ2MUJBNzVEODJEQTQKKzoxMEM4QjAwMENERkQ0N0FFMTcyRDc0NkUyMEZERUQ1M0YwRUYzNkYwMzEKKzoxMEM4QzAwMDBGOUFBMkU1MUUzQkRFRTM0N0ZGODRFRTdFQjczODJGQ0EKKzoxMEM4RDAwMDQ0Qjg5MTBFNjVDMjlGNTQ5NkMxRkQ0OTY1QkU3QTJCM0UKKzoxMEM4RTAwMEJFOTMwMEY4MzdDN0M1NTIzRDdCMUNDNjU1RDYyOEU0MTkKKzoxMEM4RjAwMDZGQzQ3NDMxQzU1OUVBRTNCNEIwM0Y4QzdGNUM3MDQ0QjcKKzoxMEM5MDAwMDJEQzQ3NTYyMkMyRkMyNzc4NzkwQkVBRkYxQjhENDA1QzUKKzoxMEM5MTAwMEU4MTc4QTZBRkRERUQ5MDJGNDEzQTE3RkNCRjBCRTk5MzUKKzoxMEM5MjAwMEEzQjc0QkY4MTFGRDJCM0EyMzFFNDcyQkI5NzQ2RjczMzUKKzoxMEM5MzAwMEZCMDEyQkM2RTc0RDlDMTg5MzhCRUJDN0M4Njc1MkJFMTMKKzoxMEM5NDAwMEMzQkFBNkI4QzJFNkEzODc4OENGOUE4QkNDQzRDNzk3RDAKKzoxMEM5NTAwMEMzQzcwMjBGRjdCMzFBRjk2RjJFQUJCN0UyRkQ5NEI5NTQKKzoxMEM5NjAwMEJCMTQzN0VFNEJCMTFFRTJBNTMzRjJBNTAxMkY3MUIxMTYKKzoxMEM5NzAwMEFERjEyMUYxRDQ4MjM3NDNGOTNDQzZGMTM1NkZBRkUyMTYKKzoxMEM5ODAwMDQ3RjlEODBBNEYwMjdGNDZGOERCQzM5RjlDRDc1QzREMUUKKzoxMEM5OTAwMDFCODU3MjQyQ0U2RjFFQ0UwM0M3ODE3OUUwMzhGMkRDNzAKKzoxMEM5QTAwMDgyMEQzNEFFRDczNEYyNUYyREYwRjIzODVCMjM3RjhDRUEKKzoxMEM5QjAwMEJGQzRGRDMyQjc1RTMyNTMzQTcxQjQ3RTdENjIzQjVDRDgKKzoxMEM5QzAwMDI3OTMyRTc1QTRGMkFCRTU5RjA1MDAyN0VBODVBQkU1MUEKKzoxMEM5RDAwMDFCMzkxRjI5OEY4M0VCODRERjRCQjhEQ0JCNDU0NkZGMzcKKzoxMEM5RTAwMDY0NDI2RkUxOUZFQ0NGRkFFQkUyOUI4NUJDMzVCNjM3MzIKKzoxMEM5RjAwMEM2Mzc0QkZCQzBBODc3MEEyMzREMTQ2RkQ5RUM0ODI1RTYKKzoxMENBMDAwMEJCNDNDQTVGNERFODE1NkRGOUY3NTQ0RjgzN0ExQzFBODIKKzoxMENBMTAwMDhGNEUwRjY5QzI0RkI4MzAzMjk1REU5MTQ4NUUxMkQ3MDMKKzoxMENBMjAwMDExRTk1NTE4RTZBNEI4RkVDMjI1MkFDNTUxMTc0MjNEQTIKKzoxMENBMzAwMDU3ODhEREIyNjI1OTVBMzJFQTkxMkZFRkVGRjlCNDBGRkQKKzoxMENBNDAwMEVDRjkyRkVGOERFRjM4MTBDNkY5NkFCOTI1REVFRTBBNDIKKzoxMENBNTAwMEQ2RkI3MkY5Qzg2NDhDRUZGODZBQjU2RDhBQkYwRDdDOUQKKzoxMENBNjAwMDBERUZDREZEMEE2NUJGRjk4Q0Y0REM3OUQzRDFBODI5OEYKKzoxMENBNzAwMEQwQkU3NEY5RUUyOEJDM0U1MEIyOUNFQkY3RjdCQTZCMEYKKzoxMENBODAwMEMzN0FEM0I5RUY4NjJERjQ5RUIxNzM0MzBFRkE4OUJERjQKKzoxMENBOTAwMDFDQTcyRDc2NDVGMUYyOTE5REQwRUUyOEZERTdBMUE3QzgKKzoxMENBQTAwMDlENzgyRjdDODlBNTIzREFBNUE3M0YwMTNEQTk5MDlFRkIKKzoxMENBQjAwMDIzN0JFMjU0MTg3NDQxRTc3MDkxRjQ5RUQ5Mjk4NTc5NUIKKzoxMENBQzAwMEYwM0NFQTlDRTlDMDVGRUZDM0ZENjI2RTZEN0E0MEMxNDUKKzoxMENBRDAwMEMzNTNDRERCMUJGN0Y3Q0I5RjI1N0JBNkY4ODEyNUU5NTgKKzoxMENBRTAwMEY4QUVBMEI2QTQ0Nzc0NUJGRTE0OTk2RTExRkExQ0VENjMKKzoxMENBRjAwMDdBNENEMUFFQzdGODFBQjRFQjMxOEY3NjNEQTY2OEQ3MjEKKzoxMENCMDAwMEUzRjdGMkI1N0FCQjcwNkE0RjJFQjdBNERGQjk1Qjc1NTUKKzoxMENCMTAwMDUzMkU5RUZCRjk4NkIzOEMwQUQyQzMwRTdBMDc3ODkxMDYKKzoxMENCMjAwMDEyRUU0NkY5QjQwODZEMjhDQ0ZGMzk4MkZDMEVFQzkzNjYKKzoxMENCMzAwMDFCNzU3NDk2RUYwNENCNzc4MDg3MzQ4MUFEMTZCMjRFQTcKKzoxMENCNDAwMEFFQkY2NDY3QTFGNzc0ODdCMTE4NUQ3RTg0M0Q1MTU3MEQKKzoxMENCNTAwMDdGQTQzMzQ1NTc3RTQzNDJBNkFFRkM0NjU3QUUyRTdGOTgKKzoxMENCNjAwMDczQzZCNUJBRkE2M0RDQzM3NEY5NUIwNkRFQThBQjNGRTMKKzoxMENCNzAwMENFMzM0RTk3OUY1MDMwNTU1NzdGOTJCNzUwNTczRTc5REUKKzoxMENCODAwMENBN0M1REY5NTRFRDRFNURGRUY2QTI3Qjc1RjVFRkE4MEIKKzoxMENCOTAwMDU4QTIyQjk3RUYyMkQ3RTE3RUNDODZFRkJGRDgyOTk1RkMKKzoxMENCQTAwMEVGMjNERkEzMzI3QTVGNkRGMDA4MTNGNzMzREFCODNFNzQKKzoxMENCQjAwMDVBRjQ1RTBGNDcyODFGM0MyOUY4Rjk1Mjk2RTc1MUU0RDIKKzoxMENCQzAwMDU3RjlCRUE1N0NCNzcyMkJFQUEzRkU3ODhFMTk1MEY4RjAKKzoxMENCRDAwMDdFQjgzRTExRjlEODU4Q0Y1ODNFMzhFMkUwNDUxN0QwMUMKKzoxMENCRTAwMDMyNjZGQkE5NDk2NjkwMTc4M0FGMzlEODM3MERGMjUzRTcKKzoxMENCRjAwMEI3RTdEQzRBRjk0MTA3NUY0RTg1N0M2MUQ2RERCNzlBMUQKKzoxMENDMDAwMDQxNUUwREVFNzNGMDIyOTY5RkREREU5Nzk3NEY2MDY0RDQKKzoxMENDMTAwMDlBOTQ2NTdEMzIwOUUzNjUwNzVGOUZCQUNBQ0RGRDI4MDYKKzoxMENDMjAwMDZEREU3Nzk3MjlFMjAzRUY4OTIzM0UzMDBEMDAxRjYzMDUKKzoxMENDMzAwMDdBMTBGODE4RDNDM0MwQzdCMzJEOENCRDA5N0M4Q0U5MUEKKzoxMENDNDAwMDExRDg5RkUyRjc3NzYwN0Y4QUU5NTFEODlGNjJGQTNFNTgKKzoxMENDNTAwMEVDNEIzMUFEODc3RDI5QTYxRjU1NERBMUY0OTMyQThENEMKKzoxMENDNjAwMERBN0Q1QTU1NDRFOTY3NTUxNUY0RkRGM0FBNEE0QUZGOUYKKzoxMENDNzAwMDU0RTVBM0VGODc3QjRCRkY0MzQwRjc3RTY4N0JFRjg0NEYKKzoxMENDODAwMENBNzM0RTc5QUU1OTVEQzExQTIyNTA2RTM0OTg2M0JFOTQKKzoxMENDOTAwMEI2MDdDRjJCREJGNzEzOThEOUQ3MjFGNjVBQjZFMkY5QUUKKzoxMENDQTAwMEEwMzc4RERGQzU0OTcxRTJFMkZCMUQyOURBMjc0OEU3OEQKKzoxMENDQjAwMDNGQTQ0Q0U4RDE1NzQ1M0Q1NkYxMDY4NkRBRkNDMUQ0NzUKKzoxMENDQzAwMEY2N0I5MDVCN0I3MzNCRjlERDJDQ0YzMUVDNkY4ODlENUQKKzoxMENDRDAwMERGNEYxRTYyRTdGNzhGODc5OEVCQUI5MUJGQUE3RjY0QTcKKzoxMENDRTAwMDJFOENGRjM5MTBDOURGRkRBOEJFREZFQzQ3M0ZBODcyQ0MKKzoxMENDRjAwMDg5QUZGM0ExRjE4Q0YyRDUzRjM2RDA3REU1MjE0RTc3OTcKKzoxMENEMDAwMDAyRUEyQjk5NkYzOUY3Qzc3RjIxNzEzRUYyMUM1RUM2OEMKKzoxMENEMTAwMEY3RTQ1RkFBMUY4MUY2QzI1MDg3RDU4NTcyMjQzNDZFNkUKKzoxMENEMjAwMDAwQ0ZEQjBGNDQ3RTJERTE2MTM4OUUzQ0RGREZGNDIzMzIKKzoxMENEMzAwMDBCOTg3MjgyRTdGODQzRUNGNTI5RTgzNzE4N0E5N0REMEIKKzoxMENENDAwMDFEMUFCNzI0Q0ZFQjk1NEIwRDJBRkE1NTY1N0M5MjFDMjIKKzoxMENENTAwMDQ3QzIxQjY5ODZGRUYyODJGMTQ3NDM5Q0I1Qjk3OERFNzMKKzoxMENENjAwMDUxNURFNkEwRkUzQUMxNzc2QjFFRDVGM0E4RDRBRTM2NkUKKzoxMENENzAwMDE3RkQ3MjQzNEIxRDE0MDcyQkUzMDQzQTg5Nzk0MzNEOTkKKzoxMENEODAwMDlBNjdGRTI1OERFMjI0ODY4QTM4MDlFQ0M3Q0VDQjdERDIKKzoxMENEOTAwMEQ4Q0ZEMEY4NDAyMkM2ODEwREFERTBFRjkwQUQ1N0Y4NjYKKzoxMENEQTAwMEZCRjMzMjZFMDFFQjQ3ODRBQzVCODQxM0ZCRURGRTM3ODMKKzoxMENEQjAwMDgwMTdFRDI4OEY4N0YwM0I0MUVFRUI1QzIyMkZDRjFERDMKKzoxMENEQzAwMEVEQzNDOUJGMzU0MkM4OUE4RjUzQjRDRTU5Nzg2RkM1RTkKKzoxMENERDAwMEU2RkM3MzA0QURFRkI0QUVFODM3MUQyN0VDRkE3RkMxNzMKKzoxMENERTAwMDJGRERCMEREN0Y5RjVGM0M5Q0RFRjg4MDdGNEE2QkJFMEQKKzoxMENERjAwMDkxNzQ5MTc0NkU4RjhGMjRERDQzRTJDQzg4Q0UyRDcxQjcKKzoxMENFMDAwMDYzQTIxRjIzN0ZCNUM3NTc5MjlGODZEODM5REQ5MUFFQTUKKzoxMENFMTAwMDE4QTcyNkY5NDhCOUM0REY3NTFCNUE2QTI3N0QyN0Y5NzgKKzoxMENFMjAwMEM4QzgwN0FERjk4OEYzNjVGNURENzZFQUFGMzUxRjA1QUIKKzoxMENFMzAwMEU5OEZGOEY4RjdGOUE4NDFDNUYzQUJBQkU1OUYxOTREQjkKKzoxMENFNDAwMDZDNTQzNDE0M0Q5NEFBNkQ0NTM5NTI3OEM5RjUyNkU2RTAKKzoxMENFNTAwMDY3QjE2MUEzOTBBNTY0RjlFMzU4REVCRjc1QjlGNjVEQ0IKKzoxMENFNjAwMDkzMjUzQTg0Q0Y4NjA4M0VEQkRGNEU3RkIyOUU3Q0Y3NjcKKzoxMENFNzAwMDQyRjY3RkJDOURGQUVGMEFCQkUxREQzMDE5QTdFMjcxRjMKKzoxMENFODAwMEU0MEUwOEM2OEQyRTFBQzlGOUFCMjA0NTI1QkI2MzQ0QjQKKzoxMENFOTAwMDE2N0ZDRjlDMzlCODlERUQ4MkZGNTAxRURGQzRCNEMzMEUKKzoxMENFQTAwMEQxMjlGOEVFQTg5N0RFMUIxRDE1NkY3ODZGNTREOEU3Q0YKKzoxMENFQjAwMDA1ODY3M0ZFOUJCMjZFMjBGQkZDQTZDQkJDNUJCRDJDMzMKKzoxMENFQzAwMDRCRENERjQ5NjEyOTU3RjlBRUU4NkZCMzY4N0Y3OEE1N0QKKzoxMENFRDAwMEVGOEFGMkY3NjhGM0M1N0E0RjEyRkM5NEU2NTJEOUUwNzQKKzoxMENFRTAwMDU4N0M5RjVEMzNBMzcyMzk4Q0VGRDFFNkUwQkJBRDNFMzkKKzoxMENFRjAwMENBREZDOEZDOTRERUNDMDI2NDQ3OEMwMTQ1ODRGOTVCMzAKKzoxMENGMDAwMDE4QTM3QkZCODcyMkM2NEVDMzNCODcyM0ZBOEVFODhFOEQKKzoxMENGMTAwMERGNDNERUQ5RjMyMzdDMEI1NEVERkYzODQzREVEOTNCRUUKKzoxMENGMjAwMDk4RUZBMkZCQUIwN0VENjk2NDg3RTI3QUI1ODRGODRCMTIKKzoxMENGMzAwMERGMDZGRERDMURFNjc3MDhGNDM3QTY2RjgwRkVFRTBFRjcKKzoxMENGNDAwMDdBRjQyREQwREY5OEJGMjk2MzA5QzM3NkEzNUNGQUI4QzEKKzoxMENGNTAwMDI3RDlGRTY2RTcwOEQ4QThCNThGQkY5QjczNUVFRDgyMjAKKzoxMENGNjAwMEY4N0QzN0E2NjczRUYyQzVCQjMxRDdFNEUzN0NERjhEQTEKKzoxMENGNzAwMEU5NjRFMkE5Q0Q0QTY5RjYyQkREREJCMjkzRTU3QTA4RDQKKzoxMENGODAwMDhFMzc4QUM2MzNFMjU3RTJEMzg4NDc4OURGN0YwMzlGMTMKKzoxMENGOTAwMEVGQjQ4NUNGQURCODhGQzBGQjIxRjY4RkEzMTI1MkYxNEQKKzoxMENGQTAwMDdDOTNDQkQ5QjI4ODY0RjFCRUU4N0IzOTZBMkFDNkZCOTAKKzoxMENGQjAwMDBFMjIzODg3NTY1RUNCQ0M3OERFNkVFNzc4M0E1OUM1QkMKKzoxMENGQzAwMDdDODhERkQzMzgwNTc0NzgxQkZDN0JDQzNDREMxNDFBREUKKzoxMENGRDAwMDA3RkQ4QTRERkIxM0MyNzE3MjlENEFGN0Y1Q0ZCRjE0NEUKKzoxMENGRTAwMDQ2N0VCQjUzN0VFRTk3NUM2OEQyMUFCM0QwNkZBRkJBNjEKKzoxMENGRjAwMDU2QjlEMURFN0M1NzI1M0YzMEZCRTk1MEYyRjhDOEFCN0IKKzoxMEQwMDAwMEUwRDc0REZDOUQ4MzUyRkJBODM2RTkyOUY3OTdDRkE1QzEKKzoxMEQwMTAwMDdBNjhGRDMzQzNFRjRCNzRCMUYxRjcyMEU0QkI5NDk3MEEKKzoxMEQwMjAwMEZCREQ5NjJFMzYyRUFGMjU3REQ3NTk4NTFEMDBGRDBDRDQKKzoxMEQwMzAwMDAwMzk5QkY0NzAzOEVEQjdGNjc0RjRGQzg4RjM4MzdEMDcKKzoxMEQwNDAwMDBDQkQzRkQ1REMyNTkyRjREMzQxMTExNzM3MzREMDlCNkEKKzoxMEQwNTAwMERFNUIyQjEwQkYyM0YwOTY3ODlGRkRBMDg4OTdGQjdCQUIKKzoxMEQwNjAwMEJBNjZDRTA2NzhERjcyMURFQzgyRkU4N0VCMTkzRjA3QTkKKzoxMEQwNzAwMEJBRDFDMURGQzNCRkRBRkRCOTIzNUJFQ0NGNzM1OENFQTEKKzoxMEQwODAwMDU1RkRFRTQxMDc5NUVFNTMwQzY1RTk3NDBFM0YwMkUxNDQKKzoxMEQwOTAwMDQ1MzlGN0Y2MkMzM0VBQzk5MERGM0RBMDc5RkQ2RkZCRTcKKzoxMEQwQTAwMEREMDNDNjlBNTQ5QzU3OTI1MzYxNEZBNjVDRkRFRjIwNTYKKzoxMEQwQjAwMEE4NjI1RjI1N0YwRkExODAxN0I1RkExRDg0QTdBMjBBNzkKKzoxMEQwQzAwMDc4NUNCRTYzNkU5QkJGODM5MDI0REVBOTY2MkVBRTM3NkMKKzoxMEQwRDAwMEU0RUYyMDhDNENEMEVCOTExMUNFNjE4NzlEOTRFQUZENUEKKzoxMEQwRTAwMDNDNDk5Nzg5MUYxQjlEMkRGNEM3RDVEMkJGOEMxMUZEREMKKzoxMEQwRjAwMDVCRTI0Q0UzNzlGQ0QzNTBBREQ3QzNFODlGMUYxMTZGQkYKKzoxMEQxMDAwMDcxRkI1REFERjlFMDNGRUQ3NzRFREFBMzkzRjFGNzRGOTgKKzoxMEQxMTAwMDhDNzQzMkZFMUU0QTkyNUE2QUE2NzcyMDA1OURBNkMwREMKKzoxMEQxMjAwMDdGNDhBN0VCQzVFRjU1RTRFM0VGNTVCMEZGNzc3NEFCNEQKKzoxMEQxMzAwMDM2RDBFRDdCQjZBQTNGQkU1QjdBQTE5MENCRjVGNkY0NzQKKzoxMEQxNDAwMEZFMEQyOTlFRkJCMzQxRkUzQzJBRkM0N0QyM0YyMkUzNjEKKzoxMEQxNTAwMDcyOERCRjk3MjRGRDAwMzI1RUQ3Mzc5Q0QzREI3NzNDQkUKKzoxMEQxNjAwMDgyQ0VBRkVFNTExQjIyNTFDRjFDMzdGMURGNDcxQUQ4QzgKKzoxMEQxNzAwMDQxN0IxQ0U1RDM4Q0FDMEEwNUYxOTFDMEJDM0JFNzAyQjYKKzoxMEQxODAwMEZDRDNGRkNCOTY4Q0Y5RTlEREY4N0I5MTJDOEJGRkZFNkQKKzoxMEQxOTAwMDhGODQ2RjdBMTI4RkU3N0EyNjVCRTE3RTNGMzc4RkRGQ0QKKzoxMEQxQTAwMERBOThDREY3MDE5MTZFMjdDNTk5MTc2NjMxMTEzRkNCRkIKKzoxMEQxQjAwMDkyQTc2NzIzN0YxRTBERUI4OUZDQjc4NkZCMDMxQkYwNEMKKzoxMEQxQzAwMEJEQ0FGOEUwN0I5NTY4QTdBMzVEREM1NUQ4QTVENUM3OTcKKzoxMEQxRDAwMEVDNzZDRTg3NENBN0ZGMzNGRDc2NUQ5QzczRUZBRDRFQUEKKzoxMEQxRTAwMDVEM0VCQjM2NDE1N0JGQ0Y1RTk3QUUzQzM3OTBBMTJCMUIKKzoxMEQxRjAwMEVGN0JDNEFEQ0JGN0FGMUZBOEFCN0ZDRDY3MUU1REZFNDUKKzoxMEQyMDAwMERBODYwMjVERkQ0MUE3QkNCQTdDMTI2QjdBMDJGMTdCMjMKKzoxMEQyMTAwMDJDM0I5NURGOUY1MDg0OUZDNEM1RTkzMUZEOUU4RTc0RTEKKzoxMEQyMjAwMDVGNDlFRTNGNjREQ0JCMjZGOEQ5QjhBRkU5NjZFNTc2MjYKKzoxMEQyMzAwMDdENzUyMkUzRkI1NkJCRDg5RjMyRkRGRTQ2MTM3MUVCOTIKKzoxMEQyNDAwMEQyQUU2NzNFN0REQ0JBOEM1NzZGRDkwNzg5N0Q4RURDMDQKKzoxMEQyNTAwMDRGODRDNEFCN0IxMDdFMTlBRkRFNDI3N0YxN0VBODkxN0MKKzoxMEQyNjAwMDVGQkYxNjc0MzdDRUEzOUI5NURGQUZBQkJFRDc0QUY3MkYKKzoxMEQyNzAwMDg0MjQ3QzQ2QjhENDBDQ0VERjlCRUQ2REJGMDdGNTVERjIKKzoxMEQyODAwMDM2QjcxM0YyQkI3QkNGMjFCRjNFMERFMjhBRjBEOTZBREQKKzoxMEQyOTAwMDNDNzcwM0ZFOUU0MEY1QUZBREVFQTVBRUNCOEYzN0JEMUMKKzoxMEQyQTAwMDBGOUZDRjM0N0MzNzM3OEJERTVGQTU3QjgxNzI1QzczMzkKKzoxMEQyQjAwMDBFMUZGNzVDMUZDMUU3ODZGMUE2NDdGM0Y4MzgxNjZEMUQKKzoxMEQyQzAwMEE1N0IyREVEOEZDN0YxOUE2MDY1Q0JFOEREMkE3MUNGODQKKzoxMEQyRDAwMEUzOEU1NUI1MEZBMjBCNzU5QUI1QzZDMjFGMUVGMDVCNDMKKzoxMEQyRTAwMEQwOEYzNjdBMzhEODg5QjlFODVGN0RGODUxMDdEODY5ODgKKzoxMEQyRjAwMDRGNTc5QUM5MkYxNjkxNjM5RkVDRUIxRUJDQjdEMzBEMDUKKzoxMEQzMDAwMEY2NjlDODI3QTM5MUZFRDBFRjkyM0UzQzNFM0QwQjZEREYKKzoxMEQzMTAwMDlGMEVFNDdGNkZCOTZGNjFEM0M5N0Y0NkYyQkYwREJFMjgKKzoxMEQzMjAwMDIzN0U5NEYzRjg5RkJBN0YyMUY5RDc4ODI3QjkyRjY3MTYKKzoxMEQzMzAwMDQyQUY3NTE3NzA0OUZDQzk3NTIxRjEyN0VGQkZCOEVFRjAKKzoxMEQzNDAwMEI0NzgzNzNBRTgxRTREMDFDNkU1NDlGQUFERTlDM0ZEQTgKKzoxMEQzNTAwMDlDRDMwNTNFQjAxRUNBQTNGNkVBOEQ1NEIzQTJGMUJDMUQKKzoxMEQzNjAwMEEwOTlCOUEyOUQ5N0YxOUJGRjBGREQ0QjIxRkNCNzc3RTgKKzoxMEQzNzAwMDlGQUUzRDM5RDE0QTNFQjQ3M0JGQUUzREZFQTQ3RjU3NDgKKzoxMEQzODAwMDcxQ0YyRTQ0NEVGMDc4Mjk0MTBGN0Y3NzEzQzUyNURDRUQKKzoxMEQzOTAwMDE3QTk1RkM3MEZFNTcwRkNFNjg5RjUwNEZBREI5MUFCQ0UKKzoxMEQzQTAwMDk3MTMwQ0NGM0ZBQTk3QUI0MjRFQ0M2REY5RkQxMEZDMDIKKzoxMEQzQjAwMDNFNjdCOTg1RUM2RUM2QkM4RjYxOUNDNjVGRDY1OEU4RTcKKzoxMEQzQzAwMDlEQzdBMTFFNDZGNkNEQ0M3NThBN0Y4MzEyRkNEREFFQ0IKKzoxMEQzRDAwMDQyOUZFMTlEMTZGNTI3QjIwRkJGNUZBNTM4RjFGNzFGRjkKKzoxMEQzRTAwMDY2QURENDk3Q0Y3M0YwREYxRDk5NjM3Q0FGNDY5RUM3QkYKKzoxMEQzRjAwMDVENjY1RjVGOTUyM0Y0QkI5QkI5QzkyRTEzNzExNDQ1MUQKKzoxMEQ0MDAwMEEyOEVEMTJFNkJGNkYzRjM0NkRDOTdBQkRDOEY0NUYxQTEKKzoxMEQ0MTAwMDc3NTJFRkJCRjBCQzJCRTQxRDE2QzA2Qjc4MDZFQUYxMjcKKzoxMEQ0MjAwMDY1RTYzNkUzMjI1QkYwREE0RURDQzczOTg3ODhGQjcwQUQKKzoxMEQ0MzAwMEYwMzg5N0U2NUQ2MUZDN0M1ODlFQzM4OUZBRTc3QzE3NUIKKzoxMEQ0NDAwMEE5MUNFQjYzNkZFNzczNzlGQzhBM0M3RjMzOUVFRjM1NTEKKzoxMEQ0NTAwMDNCNEM3NDNFRDVCQzJCOTJFMjFDRjBEQzJCMUFGOEUxNUQKKzoxMEQ0NjAwMDhDNjk2N0M3ODEyOTQxRjhCNDA2NTU3NzZFNjQ0Q0I1NUQKKzoxMEQ0NzAwMDI1QkI2OTNGRjk1RTc3NkQ1QjBFQzZFOTlCREQ3NjM3QUMKKzoxMEQ0ODAwMEU0RUY3NzFDQTQ3N0JDNDYwQjNGOTgxMURFOTZERkYxRTIKKzoxMEQ0OTAwMDFCQ0NERkQ1NjlGNjcxN0JCN0I5ODBCRjc3MDJGMjkxRkIKKzoxMEQ0QTAwMEUxN0E5MkYxMUNFMzE4NTg3NzkwMTYwNkFFMjU3OEFFMTMKKzoxMEQ0QjAwMEY2RkM2QkMyQTU1QzdFRkU3QjY5MTBCNUQ3NTY1RTRCNTEKKzoxMEQ0QzAwMEY5NkVDQjFFQkMxM0VGMTk0REFBOUU2N0MxNTA4MDg2MjIKKzoxMEQ0RDAwMDI3MTY4RjBDODdBNjBENURGRDRCQzM5MTZFQzM5NDM2NDYKKzoxMEQ0RTAwMENGMkZERUM5RTE3QUE1QzE3MDZGNDFBNkQ3RjVFMTdBRTkKKzoxMEQ0RjAwMDc1MzJDNkU2RjQwRjg5RTc1QUEyRDA3QTU4QTgzMDE5RDcKKzoxMEQ1MDAwMERGNDVGMjVDRTYyRkQ2ODhGQzQ4OUU1RkI0OUNFNzFCQTMKKzoxMEQ1MTAwMEM0RUYyQTZDMTFGRTE2OUMzN0E2Mzg2RkY0MEI2QzE3RkIKKzoxMEQ1MjAwMEZFMTg5QzM3QTYzODZGRkM4RUYyMEJGMzI4QkYzMDhGQTUKKzoxMEQ1MzAwMEYyMEJGMzI4QkYzMDQ1Rjk4NURGNjczMjZGNzJBRUNBNTAKKzoxMEQ1NDAwMENGRURGMjQzRDYwNzlFREJFNTg3RDg0Nzc4NkUxNzlBNzIKKzoxMEQ1NTAwMEM3NzNCQkQwRkE3ODZFMTc1QThFRTc3NkExRTU3ODZFNUUKKzoxMEQ1NjAwMDE3OUFDNzczQkJEMEZBNzg2RTE3OUE2NzAzNkYwQ0U2RTkKKzoxMEQ1NzAwMDUxREU3OUM2RTlGMjEzQzBGRUNGMEY1OURGNzg2RTE3N0UKKzoxMEQ1ODAwMERBM0Y5RURCRTlGQUQzRUVENEI1QkY5RDU1RUFEQUUzODQKKzoxMEQ1OTAwMEI5NUQ2OEZEMTk5NThBRUU1QzZGODY3ODg3NzZENkRBNzQKKzoxMEQ1QTAwMDM4RTI5RjdEMjk1RTVCMUZBMEVGRkY4OUY4RTdERDE2NUIKKzoxMEQ1QjAwMERDMkZBQTc1RjNGOUJFMkREQ0NERTk1QzUzQzBFOTZFMTIKKzoxMEQ1QzAwMEUyRjcyQzk0QTZBOTQ0RTdDNTU2OUUxRkM5RTNCQzhEN0IKKzoxMEQ1RDAwMEZDODNFNzYyRjkxNjdFMkU4NjI5OUU4QjYxOEFFNzYyQkMKKzoxMEQ1RTAwMDk4RTJCOTU4N0UwRjdFMkU4NjI5OUU4QkUxNzczQzE3RjQKKzoxMEQ1RjAwMEMzMTRDRkM1MzBDNTczMzE0Q0YxNUMwQzUzM0MxN0MzMTkKKzoxMEQ2MDAwMDE0Q0ZDNUIwMUQ5RThCNjE4QUU3NjJGODFEQ0ZDNTMwNkYKKzoxMEQ2MTAwMEM1NzMzMUZDN0UxQ0NGRTcyQzQxQjhEMDlFRUZBRURCNEEKKzoxMEQ2MjAwMDU3MDIxRkVBRjY5NTRFNUQxRUVERjlEMEZBNjhDRjg3RDYKKzoxMEQ2MzAwMDk2QTMzRDFGNUE4RUY2N0M2ODFFRURGOUQwRkE2OENGOEUKKzoxMEQ2NDAwMDg3RTY0N0U1Qjg2ODdEQTE1RDFGREEwRUVERkFEMDdDNkMKKzoxMEQ2NTAwMDc2OERFRjBERjQ5RDhENTlGN0NENjE0QzFCMjI5NUE3NkEKKzoxMEQ2NjAwMDE1MTAxOTA1N0RGQzkzRjFGQ0IyMjE0QzQ5OEUwMUM5QkUKKzoxMEQ2NzAwMDY5NTlCMjc5NzIzRUU0MzUxMTQ3OTlDMzlBNENGNEZCNkIKKzoxMEQ2ODAwMDdCQjg3OUM0Mzg4NzAwQTNCOEQ1RUMxRjEzQTk3Q0FBNEUKKzoxMEQ2OTAwMEJDN0Y4N0ZGODBFRUI5QkIxOEZEMUU4RDNDNUY5N0VEMDgKKzoxMEQ2QTAwMEREQ0NBOTYyMkFFQjA3RjM2REQ3MzM4RTJGRUI5MUZDMEIKKzoxMEQ2QjAwMDBDODEwMzZGNUE2M0JDNEZFRTYyNDcxRUM2Q0Q2RTExREMKKzoxMEQ2QzAwMEJGOEZCQjY1Mjk4RkI3MzZGMkQ1NjI2MTJGNkQzMUVEMDMKKzoxMEQ2RDAwMDNDODhGNzY5OUEwQTE1QkE3NzlENkU2NjQ3MkM3OTg4NTcKKzoxMEQ2RTAwMEE3OEEzQ0I0MjM2NkY3ODkxMTdBQTlFMjNBRkMxRDMxNzYKKzoxMEQ2RjAwMDA5QjdGNDgzODI5Q0EwRkI4OTgzOUJFQTQ3NDQ0MzNGOUMKKzoxMEQ3MDAwMDlBNkYxOEZEM0VDRTY4MkJCNzFGQjAxREVFMkI3QkZCMkEKKzoxMEQ3MTAwMDE0Q0ZDNjEwRkU1RTIwRUM3MUNEQzdDNzdGRUU5OUIxNjUKKzoxMEQ3MjAwMEJDNUQzODZGRjdEQzMzNTE4NEM3QjFDQjE0OEEzQjFCMjcKKzoxMEQ3MzAwMEJDOUQ3OUYwMUVGNDNENDI5RUY2REUxRTUwNzFCQ0MyQzcKKzoxMEQ3NDAwMDY1N0MzQ0Q5NkZFMUJBNjRCQTE3NUFDODFBRjJGMTVFMjcKKzoxMEQ3NTAwMDBCRUJBNzMwOTREQjEyNkYzMEJGQzMzOEJGNzQ1ODJBNkQKKzoxMEQ3NjAwMEU4QzdCRUQyRkI1NDQzRkFDNThDQzQ3ODQ0NTZDN0U4MTgKKzoxMEQ3NzAwMDVERDEzMUZEM0VENENEOTdDODNFODBGQTI1QkRENkQzQ0MKKzoxMEQ3ODAwMEE3RDAzQkNFNjM3RDRCOTYyMjVCOENGMURERjk0NjA3M0IKKzoxMEQ3OTAwMEFDQkY4OUI5NTM1Q0E0OEFFOEZFQjE4NEE3OTc2N0E3OTgKKzoxMEQ3QTAwMDA5RDQyMkNCNjJGNUE2MzAwNUU5Q0QwRUM1ODVGMDBGNzAKKzoxMEQ3QjAwMEFDRkM4OTQ4RUY1Q0I3ODVERTU1MUU2Nzc2NUFFODlENUMKKzoxMEQ3QzAwMDhFNzZFMjc1MkUzQTY0QkM4RUMxNUUzMEM0RTU1NDJGNkQKKzoxMEQ3RDAwMEZFMkMxOUZEQ0QwQjIzNERFNDM3NTlCODNCODJFQzA2RTYKKzoxMEQ3RTAwMDZEQUQ0MjcyNEREQTQxODUyMkRFRUZFMkIyMzczQTRDM0UKKzoxMEQ3RjAwMDQ2QkNFRkI0NTA3RjMyNUVBNzJDQ0Q5RjZDQzJGQjA5QjQKKzoxMEQ4MDAwMDlEMzdFNEM0QUE2NDA3M0M4RkYyRjBBQ0VGRTU1QjA3RjgKKzoxMEQ4MTAwMDYyQkRFNUZDNUREMThCQ0I3NkYzREYxOTE1RTczQkYyRkEKKzoxMEQ4MjAwMDc3NEI2NzhCRjhBRkMyNkM2RjM0QzZDM0M4REY0NzkzQzIKKzoxMEQ4MzAwMEY3NjRFNEVGOTI0QTNGNEZFMTdCN0RERjQ0RkExNkFFOTYKKzoxMEQ4NDAwMDE3RUY3RUFGMkNBNEZCRUZDNkI4QUIxMjYxRkZDRDVGMjQKKzoxMEQ4NTAwMDY2QTFCOEFERjkwNkZCQjA0NEM0NjU1REVFRjc0QTBGQUEKKzoxMEQ4NjAwMEY1MzFEODg3RjI3NzcyNDQxREE2NzZGOTE0RkRDMkYyMUQKKzoxMEQ4NzAwMERFRTczNDBCOTcwM0QzNzYzMjNBQUY5QUI2NjQ4NDA5NjUKKzoxMEQ4ODAwMERGQUI2NkJCMzlGRjRDNUJDMkVEOUM2OUFGN0FFOEZFNEIKKzoxMEQ4OTAwMEE2QjQxQjNGMTBGNkNDRjg0QjQ5ODRGRjhGODVGRDMyQjAKKzoxMEQ4QTAwMDA5RTM1NTAxQ0ZBMzFCQzI0NDFDNUIyMkE1OTMyRkYxQjIKKzoxMEQ4QjAwMEY4RDVGMTBFMkUwRjFBRjZGMTc3Mzc5QTdEMzY2RTU3OUUKKzoxMEQ4QzAwMDFENjZGQ0REMzgwMzdGOEUzM0ZCNEQ3OEExRDEzRDE4RkEKKzoxMEQ4RDAwMEY4MTNGMjYzRDAxRTgyRkVBNkEwN0QxNDg3RkM5RTMyNTAKKzoxMEQ4RTAwMDkyRTIyMTBCMTRCQTQ3NjRFNEY3RDE5NjhBMzczMERFMEUKKzoxMEQ4RjAwMDc2RjQ2NkU2RjZCMTUwN0UwNzNFQzZGRTdDMEFCREM3RUEKKzoxMEQ5MDAwMEEwODk3REFFRTQ2MzIzREY0RjhGMTBGRTI5MDdGNzNGMjgKKzoxMEQ5MTAwMEI1RjgyOUQwNTZDNTQ3RDQ3RDdGOUI4Q0YxQzREM0QxQUYKKzoxMEQ5MjAwMDY3RDg5OUE2RTFDMUI4QkRDODJDNUVGRThGMTdGRjM2MzcKKzoxMEQ5MzAwMDc5MTk2RTdBREFGMTVCQThCRkI0MTIzRTM0RjlFRTQ0N0QKKzoxMEQ5NDAwMDNCN0UwNEY0MUZBMEJDQkNFM0FFNUNFQkNDMTA3OUY5QzkKKzoxMEQ5NTAwMDdGMDE4MTY1RTVBOTAwODAwMDAwMDAwMDFGOEIwODAwQTEKKzoxMEQ5NjAwMDAwMDAwMDAwMDAwQkVEN0QwQjc4NTRENUI1RjAzRTczNDAKKzoxMEQ5NzAwMDY2MjY5MzY0MTIyNjIxOTAxMDQ4OTgwNDIyQTkwNjM4M0UKKzoxMEQ5ODAwMDc5NDE0MDFFODdDODIzNThCNDAzNDkxNDMwMDlDMzNCNkEKKzoxMEQ5OTAwMEE4NzgyMzZBMERCREI0OTk5MDgwMDFDMTFCMzQwQUEyRjYKKzoxMEQ5QTAwMEU4ODBDQUE1OTY2QUI0REUwQTRBQkQ4Mzg4NTVFQjAzQUYKKzoxMEQ5QjAwMDgzNTRFRjZGMUI4NkE3QTBCNTQ2QjhENkY2N0U1RUZERjIKKzoxMEQ5QzAwMEQ3NUE3QkVGQ0M5QzkzOTkwMDZBRkZGRjdFRjc2QkY4RTgKKzoxMEQ5RDAwMDc0Njc5RkIzOUY2QkFGRjc1QUZCRTRBREZDRDI4Q0ZDMkUKKzoxMEQ5RTAwMDdFMEM3RjJDQUMzRjYzMEI1Q0Y0M0I5QkEyRTZBNTA2NTAKKzoxMEQ5RjAwMEYzMTg1QkIxMkUyNzk1MzkxOUZCMDY3RjI2RjYyQzE3RjUKKzoxMERBMDAwMEZFRjU0QUU2RUVDQjU4NEQ5RkUwMUQ4QUM2RDgyMDhEMjQKKzoxMERBMTAwMEU5OTNEMzE4OUI4MzgzOENBNUExMDIyQzk3QjFCOUEyNUIKKzoxMERBMjAwMDNFNUQxQkYyNDEwQjhDNTcxM0NGRUI2OUVEOEVEOTNFNTcKKzoxMERBMzAwMEE4MkY3NzA0QTdBQUYwRTg5RkYyRUFDQTA2NTgxOEVCQzUKKzoxMERBNDAwMEEzQkExOTgzNzVDNUQ4QkNGQUMwMkNDNjZDN0JGMjAzODcKKzoxMERBNTAwMDAzRTE5MTlBRUJBMkU3Q0MxQTFDRTA0OTYwQUM3QTQzNEYKKzoxMERBNjAwMEZCQzY2MTZFMUMxN0ZFNTdDQzU4OTVCREQ1QzY3MDIwRkQKKzoxMERBNzAwMEU2Qjc3OTg2QzNGQUYyOThFRTc3NjI3QkY4QUY4OEIxQTEKKzoxMERBODAwMEUzRUI5RTdGNkFCRDEyNUFGRjcxMUI5QkREMUU2MTdGMTcKKzoxMERBOTAwMDkzMzQwQkNEQjNCMzgxMzFGNzMwQzY3NjM1MzhBODdDREIKKzoxMERBQTAwMEIyQzFDNURDMzE4Q0VENkU0OEEzRkE1MzBENkUyQURCOTIKKzoxMERBQjAwMDFCNzJFOUY5QjMwRDFBRDU5RjZCMjhBMUZBQUYxQjc0M0QKKzoxMERBQzAwMEFBRUY2OTI4QTNGMjg1MDYwRjNEREYzRkQwNUJBMEMxMTYKKzoxMERBRDAwMDdBMUZCMEU4QzdFRTgyRkRBNUFCQUQ4QzBEODEzNUI2REYKKzoxMERBRTAwMDZFNjY3ODBFOEI3MDBCNkU4MjlGRUUxOEM1OTg5NzFGMkUKKzoxMERBRjAwMDBCMUI2Q0Q3RUQyQzg1QjFBNjc1OEE2QjM1RjRGMzNBMDgKKzoxMERCMDAwMEVEQzc5NDQ0Mjg1Qjk0NDBDQzA4NjhFMDlCQTIwNzczNUYKKzoxMERCMTAwMDc5REI2RkIyMTE1RTFDOEUyQ0I3RUJDMTI3QTA1RjRENzUKKzoxMERCMjAwMDgzOURBRDg3NDc4RjVFQzY3NDFDRTdEMTlGRDhGREJFMkQKKzoxMERCMzAwMDJDODREQkExODM4RUFDMTAxQzNGQUNCRkQ3MDYxODgxQjAKKzoxMERCNDAwMEM3OTdFMzg2NzY3M0VCNjJCNUY1RjBGRUFEN0M0RjE5QUYKKzoxMERCNTAwMEFFM0IzRTRGQjM3QjAxNkUxOUY5OENDNkJGQUU5RkU3NUIKKzoxMERCNjAwMDg3MUE5NENCMzdFQzdGRTQ3RDNDQzc3RDU5NzYyRkUwNTQKKzoxMERCNzAwMENGRkMzREY5NkJEM0RDRDhDRkVCQzE3RUYzOUQyRUJCNDAKKzoxMERCODAwMDA3RkFEREQyOUM2NDc3MjMxRUE0QjJCQUY2M0M5Q0E3QTgKKzoxMERCOTAwMDJCNzM1NjQyMDhGRUI1OUE0MkVCQzgyQUUwRTM3Rjg2MTMKKzoxMERCQTAwMEU3NDRFRDVBNkQzMzBERUQyQ0Q0MEVFMEE2M0JGQTg3MTkKKzoxMERCQjAwMEUwOTQ2MTY1M0U0QjAxQzJDQkNCNzQ4NEQ3MDBBNjIxQjMKKzoxMERCQzAwMEJDMDZDMkYzOTgwMkZFM0UzNjM5MDQzRjMzRENFQzAwNUIKKzoxMERCRDAwMDc3MEJCQzFGMDhBNUJEMjAwNEM3MEM3OEFGQzI3MzVCRDAKKzoxMERCRTAwMEVFRjEzOTJDMUJFMUM2RTY3OTIyRTBDRjgzQjg3RTg0QzIKKzoxMERCRjAwMEZCNkMwN0QxRDU2MjA3M0Y0RkEwQUJBOUE5ODA4NzJCNEIKKzoxMERDMDAwMDM2MjkyRTQwMDNCNkM4RTlCRTdFMENENDE3QkQ2NjYzMjQKKzoxMERDMTAwMEFCQTEzRTIzRDk2RDFGMDBGNTJFMzhERjFENTA1RjcwN0MKKzoxMERDMjAwMDdCQkVERDBERkJBRUMyQjM4MDc1MkNEQTMyODZFODZEQUIKKzoxMERDMzAwMDkxMUZDQUMyRTg3NDc5QzNBNjAzMTk3QjExN0YwMkJBODcKKzoxMERDNDAwMDFERTk2NDkxNEJCNzI3RTc4NUQxNkRBQjQyNzQ2MUFFOTYKKzoxMERDNTAwMEFGRDM1NDVBNzcxNTYzOTMxMTdFRDVCNzY3RDkxNzM4NjgKKzoxMERDNjAwMEIxRkU5QTZENDUxRUVFOEJDMzQxRjY4Mzc2MDE2QzM3OEIKKzoxMERDNzAwMDIzOUJCRDhBRjRENTA1RkJEQTkxQzVFNzJCMDgxQjdGRjIKKzoxMERDODAwMDAxOEUxRjM2M0ZCNDlGRTc4MUZBN0Q1QTAyOEQzN0RGNDAKKzoxMERDOTAwMDA1RkJDRUMyRDI0NUVCMDQzODEwOUNCQTM2QzI3ODZFNzIKKzoxMERDQTAwMDlBODdDRTYzNjFDMDZGRDM3MDNENTY5ODE3RUE3MzVENTMKKzoxMERDQjAwMDdFMUJDRUIzQTAzOURGOEU3Q0NBQkI4MUNGRTM2RDQ5MUEKKzoxMERDQzAwMEIyMEY4N0ZBN0NBQkNCOUU4MUYwOEIwMzU4QTREMEZBQkQKKzoxMERDRDAwMEZDM0JFMDY4MTYwMTVDOTI5RDM4MEY5QjM3Q0JEOTEzNTMKKzoxMERDRTAwMDNFRjNDNTdBMTdCNTI2RDkxNzFCOUU2RkIyRTE3OTAwQUUKKzoxMERDRjAwMDdGRDMyM0YxOEQ4M0UyREMxNzM0NEZCMjMzRUM2RkQ1NDEKKzoxMEREMDAwMEVEMUFBRTQ3QzBGN0Q0QURCMUVCNTkxRkU4REZCNkQ5NzUKKzoxMEREMTAwMDk2MDVGNTdGMTNGODdCNTBDMDc1NDY3NjIwNDdDMTdEODgKKzoxMEREMjAwMERGMUFBQkUxM0FFN0I4NUE2OTdGRERGMEJEMUZFMDAxQzkKKzoxMEREMzAwMENGMTdCQjNDMDQ1RkMwMEIxRjAzMzgyQzZBMzM5RTY3QjAKKzoxMERENDAwMDY4M0QxQ0JFOEJEQUU2MTNCRDJEQjE3QUVEQUVGMDc1RTEKKzoxMERENTAwMDZDRDk5RkEzMDA1Q0U2MDA3RDJCMDA3RkU2RjI2NjIyNzMKKzoxMERENjAwMEJFOUNCRUZGRkE0Q0RBMjdBQzEzRTE5QUEwQjlBN0E2NzUKKzoxMERENzAwMDE1MTE5RTEwMUU0QjdDQTkyOUU0RjQyQkU3RkJBMzY2MkEKKzoxMEREODAwMEE1RjlGRTI4Rjg2Nzc0QkFENDVGNEQ0M0JBODRGMzVERjEKKzoxMEREOTAwMEVEOEU0RTk3NzY2NERDMzBBRjdEOTFFMjZGNTI3QUQyOTEKKzoxMEREQTAwMEE5QTQ0RjQ5OTc5MjRFMjVGRDNFNjJGMzA0RDI5NDEwRTgKKzoxMEREQjAwMDlGQTlFOUMzRUE5RThEMDBBNzhDN0M3RTBFNzNDNUI5MkUKKzoxMEREQzAwMDAyNUM1RjQxQjhDQUY3RjY3Q0NFOEZBQUIyOERGNDhFQTIKKzoxMERERDAwMEUzRTFCOEU3MDRCRkFBMkEwREU0REM5QTE3NkEyRkU3NEIKKzoxMERERTAwMEFENEFFNkZEMTBFRjExREZDRTg5NzNDN0Y2MkJBOEJENTMKKzoxMERERjAwMEUwNjM4MjVGMkNFQ0U2MTdCQkQ3RjQ0NzdFRjE4Q0EyODAKKzoxMERFMDAwMDIxQkY1OEIxRjE0MEM2OUQwMEI3MTVCRjhDRDcxMDA2OTEKKzoxMERFMTAwMDlGRENGQ0M0MkQwM0IyNTFCRUY5RTlEQ0U0QkExNkZGNjUKKzoxMERFMjAwMDM1OUZGOEM0MTIyMTlGMTcwNTIyRjM4QkVCNzNCRDZBNEYKKzoxMERFMzAwMDdFNzFBOEJFRThCRTVGNUVFNkU1RkMyNjgwRkNFNjBGQ0MKKzoxMERFNDAwMEJGN0NGMUM4NTg3NzQ4OUVDQUZEMkM2ODc5RDczNkRGNjkKKzoxMERFNTAwMDE5MEUzRkJFREZGNUI5RTdFNkUzNzkyRDc0REFERDJBNjYKKzoxMERFNjAwMDNDNUFEODNDOUZGODJGNEI2MzVBOEUxMjNBN0YzMzVFNTAKKzoxMERFNzAwMENDNkY1Njc0RUE1NzNGQ0FBRjdFOEY3QzdBRTE4Njk5QTEKKzoxMERFODAwMDBDRTU5NDNDMzc5ODk4QjE1MTIxRjkyQUQ3N0Y1OTNFMzcKKzoxMERFOTAwMEE3REIxRkU0RjNGRTczMDU3RUNGQUQ5RDY0MUY5MDgyNjgKKzoxMERFQTAwMEZCOUQ1Rjg4NkFDNTFDRjE3Q0NFMjJFM0YzRUU3MzczQTEKKzoxMERFQjAwMDc1RjNGOUI1NDgyRkU3REFGOUI5OUREQjYwMjNGRTczRjYKKzoxMERFQzAwMDZFNzc4MjlGQzFGRTNFNTlGMUZDREJENzQxQkI4RjFGQUQKKzoxMERFRDAwMEQ4OUU4OUZBNEFGOEI5QjE0MjdFNkU1ODJFODU3MzYzOEUKKzoxMERFRTAwMDdEMjM5RURCRDhGMDczNUJGQTI4M0ZCNzg1NEZCREY1RTUKKzoxMERFRjAwMEM3MTdEQ0I0NUZDRUVGMzZDNkY4OTExRjJGNjg3Rjg2NTgKKzoxMERGMDAwMENFNzE0RUNCMjY1QjE2QjRCQjNBM0Y4QkNFQUI5QkZGOUMKKzoxMERGMTAwMEQ3RTVCQjE4QzA3NzZFQ0I3NjFCRjI4OUFCMjUxQzRDQkUKKzoxMERGMjAwMEY0MDBBNUNFQzJFODBDRTU5MjkyMUNEMkM3NjQ3QkU0NTMKKzoxMERGMzAwMDhGQ0ZDMDNDQjdERjFBOUJDODQ2ODZFNkI5MkQ5RkYzNEEKKzoxMERGNDAwMDg1ODU3NTQ5QzkzOERGQzJCQUY5RjdCMDExMjE3OTYwMDIKKzoxMERGNTAwMERFRTc4OTU4NEUyRjBCNjAzQ0E0REIxMzkzQjRDQzE1M0QKKzoxMERGNjAwMDg0OUY5Njg4NzJGNzQ2ODE4NzBGMDFCODYzMDExRjA2NjgKKzoxMERGNzAwMEM2QjdGRjFDRTEzMEYwOUZFMjM0RTQxRjQzODcwNkZEODMKKzoxMERGODAwMDM4MkZFMjM3QUVEQjBFRkNEMzAxRUQ4NkRFMUNGQzFDMjUKKzoxMERGOTAwMEQ3MzExNDMwMENGQjYxOTk5MDRDMjVFQjBGRjUxREIwNzcKKzoxMERGQTAwMEVDMTIyOEIzNTU1RUI2RTY3MzNEMDlERTA3RjAzRDRCMzMKKzoxMERGQjAwMDA5MTZFM0ZFMjU3RTlCRjFEN0NFMUU2RkM5NDYzRTk2MUQKKzoxMERGQzAwMEMyQjQyNjc3MDg1RkU1MzgxMjVGMjUzRTQ3REI1RkNCOUEKKzoxMERGRDAwMDQ1RUVFRjQ0MTY4N0E3M0QwRUY2OTc3QzA5RkIwMzY0RDgKKzoxMERGRTAwMDJENDkwRUVENEJBRTBGNzQ3OEREODJGQUUzM0YwRkRGNjMKKzoxMERGRjAwMDhFRkFGMzg5NDYyREIzQ0VEOURCN0VEQkE2RjQ4RkIwNDMKKzoxMEUwMDAwMDVGRjMzRTI1REQyQzcyNzA5QTA2QkFFOTgzNzZDN0I5QjQKKzoxMEUwMTAwMEQ2MjE3RDUwRUU5QzUwNDBCRTQxQkYxM0I3QzY1QTcwMEEKKzoxMEUwMjAwMEZENzI1RkE4OTdCMzE4QUU5NzYzODk3QTM5MUJDNkY1NUUKKzoxMEUwMzAwMDcyQUNBMzVFOEUyNUVBRTVGNDNDM0Y5OUNCMjMxNjRDRTcKKzoxMEUwNDAwMDQwM0QxM0Y0MDFDRTBGMDI5QzRFM0FFQjg3RDBCRUU0NjQKKzoxMEUwNTAwMDczQTkxNzc0QkE4MjA5Qzk2MUZDRkI2NDlEOTA5QjJDNUIKKzoxMEUwNjAwMEI4MTFFOTlCRDUwRjYxNEZDMDU0OURBRDI3MTIyQzc5OTMKKzoxMEUwNzAwMDg4OUY3QzdEQjJERkVEQjYyRUUyODcyQ0MxRUU3RTAyNUEKKzoxMEUwODAwMDQ4MkVGRUY2NzdBN0E0QzI3QzhCREJCMkYyMTVFODU3QzgKKzoxMEUwOTAwMDVENUZEODU5MEZFRkFCOUI1MzM1RTQxQjhCOURFRUI1RkQKKzoxMEUwQTAwMDI4MTcxN0ZCQjIzNDk0OEJGMTZERjlBN0I3QzBGQkM1RTUKKzoxMEUwQjAwMENENTc2OEQ4RkU3Njg1Nzk5MEJFQTQ5REIwODQ3NUZGNTMKKzoxMEUwQzAwMDkwOURCMDU0RjBCNUE1QzgyRjAxNUU0QkVBMEYwQzc1QkEKKzoxMEUwRDAwMDQxRkYyNTVBNkMzRUNBRjdBNTVCQjg5RDMwQzNDMjVBQjIKKzoxMEUwRTAwMDE0OTRDMzREOUVBOUM4QzdCQTFFNTQzNEQ0MzdEOUMzOUIKKzoxMEUwRjAwMEMwNUYxRDIxRkVGQTdFQUVFN0I3Qzg2N0Q4NTc4MDdGQTQKKzoxMEUxMDAwMDMwRkVFNTI4ODM1NURDNTdCQjhFRkI2MEEwOEYzQ0MxRjkKKzoxMEUxMTAwMDcwREQxRUQyRUJBNzBBQkVEMUQ5NzYyQ0MxOURDN0UxMTYKKzoxMEUxMjAwMDhERkEzQUYzRUExNkU0QkIyQjg0NUMxQjZDRUYzQTc2NkIKKzoxMEUxMzAwMDE3RUEzMzA5MTY2RDA3RTc5N0VGQjg3MTlGQUZBQjJDNUQKKzoxMEUxNDAwMDg2RTQ4RDY4MkZGOEU5RTA5Rjk1Mzg5MEJGQUQ0OEM4MDgKKzoxMEUxNTAwMDRFMjVCRDZBOEI0QUZDNTFFMjRGQUQ1OEYzRTJFREU1MjYKKzoxMEUxNjAwMEZEMTE2RjE2QzM3Qjk0Nzc1QkYxMjFCMEQwQjU2RDU3NkQKKzoxMEUxNzAwMEY1NDdCQzVBQjQ2OUNBMDMzRTkwNjM5OTAyOEUyN0FEMzUKKzoxMEUxODAwMEMxOTk3ODNFNjdCNkE3MjYzN0EyNUVCOEJDRTkzMjA2QzkKKzoxMEUxOTAwMEVGMTc2REJGMkIxM0NCMzNEQjYzNjcyM0JGOUZFQzlBNjUKKzoxMEUxQTAwMDM5MzkwOUY2QkJFNEUxQTQ3QzM1NEM2RUZDNDVEMEUzN0IKKzoxMEUxQjAwMDhEQ0JBRjRBNDU3QkUwRTZBRjBGM0NFMjAyM0I2RTMxRDAKKzoxMEUxQzAwMEMwMUFFMUZFNDU3QkJDREYwNzRENkU2RUQ4OTNBOTAyRjUKKzoxMEUxRDAwMDhEN0QxREUzRkQxQ0UxNzk5MzY1REY3NTYzOTBGRjJCNTkKKzoxMEUxRTAwMEZFOUQwM0E4QkQzQkQ1RDU4QjlEN0QxQUVENTBDMEU3QTQKKzoxMEUxRjAwMEU1M0ZGQjgwQzZGOUQ0RjJFNkI1NzNBMEZGQ0RDQjdGMzcKKzoxMEUyMDAwMDk1ODhFM0RDNzRGRkUxNTEyRTc4RkVENjUwRUY3RkEzQjIKKzoxMEUyMTAwMDNERkZCMUIyN0RBNzBCMDVEMzk2RUQyMzUwNkU3RjhERTgKKzoxMEUyMjAwMDc2NUEzMUUyQjVFN0JBMzkwOEY3RDc1NTgyN0JCNEY5QTcKKzoxMEUyMzAwMDZBRjcyODA0NUY1OUFGRjZGNzIxN0RENjFCNjA3NjE3ODEKKzoxMEUyNDAwMDk2MkU0NkZBRjIxOTk1RDVBMzNFMjBGNTFBRjkzQ0E5NjcKKzoxMEUyNTAwMDgwQzNFNTRDOUZENjRDQzQ4QjY1M0IzNzY3QTI1QzM5QzUKKzoxMEUyNjAwMDlCQzBFQjU1M0JBRjdGMDNGOTk0RjdGMTE4QUVCNzVCNUEKKzoxMEUyNzAwMDE5RTlDOTBCN0Q1Q0VGNjZCNTQwQUYwMzQyRjMwRjJDODMKKzoxMEUyODAwMDg4QTdGMTk2NkQyOTM0Qzg0M0QwNEJFOEY5NTkyQjJCNTgKKzoxMEUyOTAwMEMzNzUwQzZFRUFDQTQ3RkRFQjQzNkI2MDMxOUVFQjg3OUEKKzoxMEUyQTAwMEEwRDdBMjdERkIxN0MxQzczRTZDNTVBN0UyNzMxRjEwMTQKKzoxMEUyQjAwMDEyRUEyMzFGQjZGRTJBNjFBODMzQTRDNzI1MTRCNTA3QTYKKzoxMEUyQzAwMDkwQ0YyRDdGMkVBOTQwRTUyODQ1Rjg3NTRCQjc1RkM0NDgKKzoxMEUyRDAwMDM5NzU2MDBBRTk2MzJFQzREMzE1N0IwRjRFNjVCQzBFRjkKKzoxMEUyRTAwMDgyMzAzQTNDNkYxNDdBNTg3N0ZEQjk2N0M4QUVCQjc5NzMKKzoxMEUyRjAwMDM3RDcyNzZFNkU3RkU2RDU3NDE4RTc5NjNENDI5RjEwOUMKKzoxMEUzMDAwMDdBQ0E3MjQxQ0ZCNzNDQzdFMUIyRkNCOTYzRjY4NUUxODYKKzoxMEUzMTAwMEY2NDg2RUYyREE4MUEwMDk0RTc4RjZGMkQ5RjdCQkQxNTEKKzoxMEUzMjAwMERFNTZDOEFGNTJBOTY1Q0U2OTFDOEFBNUY0OTc3NDkxRDAKKzoxMEUzMzAwMDdFQjgzRUI3ODNFQ0YyRTVDRDYyQkNEQzhFQjVEOUI0RDUKKzoxMEUzNDAwMERGOTk3REMzRjVBMTg5MDUzNkVBMjdGQjAzM0NBOERGRTkKKzoxMEUzNTAwMDk3QjE4OTIzOTBGRjA1OTZDN0I1QTA1Q0Q3NkY3MTVBMTYKKzoxMEUzNjAwMEIxNkM1QUVFMjQzOUZGNzA5RDI1RDcwQUYwRDU5NTM4NDcKKzoxMEUzNzAwMDBERjVCODdBMDc2RjdGNjc1Q0UyMEUyQ0Y3QzVGMUZBRUUKKzoxMEUzODAwMDk3QjE5OTI0QTdCRUI0Nzg5RTU5MDJFREVFNTQwRkM1RkIKKzoxMEUzOTAwMEEyRkY2MzAwRUIzQTYwODE3QTQ5M0ZFRjc1MDUzMDZGNjkKKzoxMEUzQTAwMDJBMDNFQTUxNTE3RTA0MTQ3Q0ZGRDk2RjNFMkFDNDc1QkEKKzoxMEUzQjAwMDRDMTgxQzNDQ0Y2MDY5QjZDNkJDMzk5MzAxNEY2QTBBNDEKKzoxMEUzQzAwMEM0M0VGMzgyODU4OEVGRkQ1RUU2RkM3QTlCOERCNUEwQTYKKzoxMEUzRDAwMEJDNjM1NjBGOUIwNUNGMDNDOEJGRjBGQ0ZGNjZGMTIzNUIKKzoxMEUzRTAwMDNGREVBNzA0MUUwQkQ3QkZFRTEzNzhFQjg5NzFCNjI4NkEKKzoxMEUzRjAwMEIwQ0VDN0IzQkM0QjcxMUQzRjUyNkNDMzUxNzU2MTZFM0IKKzoxMEU0MDAwMDM1MDdDN0ZGQ0NDNkRGNEIzREI2NTQzMEUxMEM2MThGRkEKKzoxMEU0MTAwMEQ5RDNEMzlDQjhCRjI2MDEyRjQ1RDc1OTNEQUM2Mzc1REUKKzoxMEU0MjAwMERFQ0IwQjExNUZFRUVFNzJCMDE4OThCRkI0MkI4RUY0RkEKKzoxMEU0MzAwMERBOENGNDMyOTI2RjREMDIyRThBM0IwNTY1MEU3QjM5RTEKKzoxMEU0NDAwMENGRTI4QjgxRjVERUNEMUM3RTZDQ0YxQzI2RkRENzEyNzIKKzoxMEU0NTAwMEFCNjMzRjY1REY2RkZGODZGQzdFQTBGQUY5ODEzRUQwOUIKKzoxMEU0NjAwMDdFRTA5RDhBRDYwNDZENkFDRTlEREVGNjBFNDNGQkQ5MTIKKzoxMEU0NzAwMDlGOEZGMEJCQjM5RkI3QjEwMEY2RDc3OUFFRUM5ODE3N0EKKzoxMEU0ODAwMENFRkI2RTU3QkI0M0NCRTNFMzg1RUY2M0RGQ0FCRjI1MEIKKzoxMEU0OTAwMDI2NUI0MkVCRkJBQ0VCRjQyRjlGMkZDMkQyNDE3MkE4NUMKKzoxMEU0QTAwMDc0OUZDQUZENERBNkY1N0M5NkU2QjZEMjM5NzUzOTAyNDEKKzoxMEU0QjAwMDE2NkNFRkI0RjgxNTA1REIxRkY4MDBENzU3RUE3MDA2QTUKKzoxMEU0QzAwMDU0RDRFMzFEQjYzRjg1Q0IxOTc2MjgyM0U5RjQxNTI0RUYKKzoxMEU0RDAwMDVBRDgzN0EwMkNGNDZGRTJFNzM3QTE4RkQxQkVEQzU5QjAKKzoxMEU0RTAwMEMwRURBNDlERTI5QzI0N0MyNURDOTg1QjY3RTE3MkU2OEMKKzoxMEU0RjAwMDI1RTdDRTZBRUVDN0UyNzRGQzRGRTJGOUI5QkY2NjkzMzYKKzoxMEU1MDAwMDdFNzE2RTFGRTgxOTExRjQ0RTU5MUU0NjNEMDNGNDg3QzMKKzoxMEU1MTAwMDJGQjNGNUE3MTA2RTUyQ0U1NjRBQTkyQkU0QjAyQUM2RTcKKzoxMEU1MjAwMEFEMTRGMEFBNzQ1QTM4N0MyQTRDRjAxMTc4NjNDNjBCRUIKKzoxMEU1MzAwMEYzQjlDQkYzNjQzRjM5NzRCMDRGMTY5REUzRjA3RjYxQkMKKzoxMEU1NDAwMDc0N0U3QjExMUYzQkZGRjZFNjFBMjAzNzk2QUVFQUM3QjIKKzoxMEU1NTAwMEJDNTlGRjEzQ0YyRjEwM0IwQ0Y1OEFGQjJEQTQ1N0EwRkQKKzoxMEU1NjAwMERFODc3QUEyRTQxRjVFRTQwMzIzRTkzOUQ3MDM3MzE5MzcKKzoxMEU1NzAwMEYxOEQxQTM1OEVGQzhDNjZCRTIxRjk4NTM3MEVDQTExRDUKKzoxMEU1ODAwMEM4Mzc1QTg5MUZEQ0E5NzYxREI0MjgyMTNFMzFCODJDMjIKKzoxMEU1OTAwMDM4MUNFNTcwMjc5OEZFRjgzRTY4NjlBN0U3REYxNDY0MjkKKzoxMEU1QTAwMDEzN0YxOEM0MEUwRDIwM0ZBQjM1NTg4QzdBQTBFQTc4NDMKKzoxMEU1QjAwMDZDREI0OTEwMjk2REVCMzg3RDM0RDlGQzBGMkU0MUZFMDAKKzoxMEU1QzAwMDUwRTlENDUwQUZGQkNDNkZGMUQ5NjA5RDZENDk5QzZGODEKKzoxMEU1RDAwMEI0MkQ0QjI3NzlGRTE5MTM3QzY0QjY5REY4Qzg5NTE2QTcKKzoxMEU1RTAwMDhCOEZFQ0FEMzlFOTY0NkY3NUI3Q0Y3MTkzN0ZGNUQ3MzkKKzoxMEU1RjAwMDVGQUI5NzZEQzFGNzMzMUQyNDc3REI1MDFFNDNCRDZEQjQKKzoxMEU2MDAwMEUzNzA3QUZGQTJFNDRCQ0IzODVGNkE5QkE5MEY4OEMzMDMKKzoxMEU2MTAwMEY3MzNGQjVCNzBCRUREMjlERUJGRTFCOUE3QUJGRTlGMjAKKzoxMEU2MjAwMEM3QTIzRTc5NTMxQzdCMDI5RUI3NjVFOTAzNTBERTNFQ0MKKzoxMEU2MzAwMEEwNzhFNjJDQzZGRUMzRjlCQTgzNzNFMjlFREFDOThGQ0UKKzoxMEU2NDAwMDI3ODBGRUE0Q0VGQTg0MURFMTdFNkZFOTQ3MUZFQzNCRDQKKzoxMEU2NTAwMEY2MjBDMkNCNTdDQTcyNTE5RkVGNDRGQzFDMTkzQTJGQzcKKzoxMEU2NjAwMEIwQ0E1OTdENzJFOERDNTI0Q0U3MjZGMUQ1Njc4M0YzRDYKKzoxMEU2NzAwMDRCRTFFN0I3NUE4OTdFN0UyOUUyRkM5NDdBQzA2RkUyQ0IKKzoxMEU2ODAwMEZGRkM3Q0VFNTQzOTdGNjcyRjY5NkUyQ0Q1RkVERUQ0RkIKKzoxMEU2OTAwMDQyNTg1RkQzQUQ3MDJFMjQxMDgzNzcyMEJDQjZBRDRDQUEKKzoxMEU2QTAwMEQwNzExRjlEMTY1NkRCMUU4MTZFQjMwQjg1REYwOUE1NDkKKzoxMEU2QjAwMDMxRDBDMzNDNDEwRkYzMjRERUFFMzJFMTZENzA1MEQyNTUKKzoxMEU2QzAwMEU5Nzg4MUI3RDBGRkM1NzhDRjUwOUNGNzUzRTVGMDI4QTMKKzoxMEU2RDAwMDdDRjhFNjdGQUJCMzIzQ0QzM0JDOTBGQjBCRjY4MzU2QkYKKzoxMEU2RTAwMDVBNDhGMkI1RDRBMEFGQkU5OUZGNTEwNkNBMjlGNkQ1NTMKKzoxMEU2RjAwMDgxNDEyODc3NUY0OUYxOEMyQzA0RkUxMTNCQjQ4QkZDREYKKzoxMEU3MDAwMEU2OUQwM0JBNkNCOENGQ0UzOTFGNjdBMDVFMzRBRkZFNkEKKzoxMEU3MTAwMEI3NDQ1RjE3QkJDRUQ1RjEzNTM2MUMyN0E5MjJDQjE2REYKKzoxMEU3MjAwMDg0MzJCNTIyRUIyMEUyQ0Y5MUU5MzFFRTk4MDg3QUM4MjUKKzoxMEU3MzAwMEZFRTlDMzMyNTBGRkVEQTgxQzk2ODE3Q0FGMDMwRUYwQkEKKzoxMEU3NDAwMDEwQUVDRkVBNEU0MEZFQzdGNjU0MTMxRkFCMTQ3Q0FDOUMKKzoxMEU3NTAwMEEzNjIwODdGMkVGODY2RDhGMzhENDVBOEQ3M0EyRDVBQzQKKzoxMEU3NjAwMEI4QkU2MDJFQ0YwMkRGMEMwMERGRkMwOEVDMzMyQzRGNkMKKzoxMEU3NzAwMDgxN0QxNjAwRkRGNTA0RDg2NzU4M0YwNkY2MTk5NjQ3QzcKKzoxMEU3ODAwMEMxM0VDM0IyQTM0MUEzRjc0RDE1NDNGNjA0RTE5Q0JGQkMKKzoxMEU3OTAwMDY4NTE2ODdDRjRERjQ2RDI4QjZGN0M1QzY1MDEwOTFGOTEKKzoxMEU3QTAwMEY4QUZGNkUxNzgxNkM4MERENTk3QjRGNTM1RDQxNzZERTYKKzoxMEU3QjAwMDE4NjhBODJGNjgxRTYyQTg0QjNERDJCQkVBMEFDM0I4RUUKKzoxMEU3QzAwMEU1NjU4NTg2NzZBQkUzNDdEOEYwNUM5M0NBRjIzOURDMjEKKzoxMEU3RDAwMENCRjIwOUVFMURENzQ0ODFGQjM1QTMwOUVFODdBNzhGNDUKKzoxMEU3RTAwMENFNDA3ODFFNDZCOEEzRkQ2NkQ1MTJGMDFDMjREQzY3MjcKKzoxMEU3RjAwMDg5MzkwRjk3MTVGMkU3MDJFRUExRTdFNUJEQ0FBOTRGRTcKKzoxMEU4MDAwMDEwREUzMTA4NzcwNzk1MUYyMUJDMDlFRTFDREUyNzEwQUEKKzoxMEU4MTAwMERFMzEwOEY3NUMyQThGMjJCQzg3RTFCODAwRUZBMjBCM0IKKzoxMEU4MjAwMEMzRkJFNkREQUEwMTBFMzczRTZFODQ3N0VEQzM3RDRENTYKKzoxMEU4MzAwMEYwMUY2ODgwRTNBMjBENDMwQzc1MDlFRjA1Q0Q0Njc4MDMKKzoxMEU4NDAwMDdCNTcxNTlBREEzMUI2MDFFMDUwOEVCRjAwMUQxQzJFQTEKKzoxMEU4NTAwMDlFNDY3MTI5QUI4M0Y5RTI4MUFGMjQyMUJEQzFGQUFEOTcKKzoxMEU4NjAwMDE1MEFENzhGRTBBNzE1RTg3MDE2RkUwMkY0NjU3NUYyNTkKKzoxMEU4NzAwMEY3Q0Q3MzE0M0ZGMjI1RDQ4OUQwQUUwMEI4MDZFMjgxRkIKKzoxMEU4ODAwMENFQ0E1RDk3OUQ0MkJFNzQzRDcyMzAxNUVEN0EzRjk1QkMKKzoxMEU4OTAwMDM3QjAwMEQxNjczNTBCNTI3RDFFRUJDQUI0NDM3OThCN0MKKzoxMEU4QTAwMDFBNTg4QkZFQkJCNzFDREUyNzkxOUVGRjMyRkRERDRFNTIKKzoxMEU4QjAwMDA1ODk1MjlCM0YwQ0U5OUMzOTkzQzlERThDNzY0RUMwOEEKKzoxMEU4QzAwMDI5MjU3RjYyQ0U1MTYyNUZGMDUzODFGQzFGRkE3NUM0MjcKKzoxMEU4RDAwMDhGQjhFMzBFMzg4N0NGRTYwNzQ3RTFGQzM3M0JCQzhGQTQKKzoxMEU4RTAwMEE2NTg2OEJFM0QzOERGQTczNkVGQjBCRUYwRkNBREUyRkIKKzoxMEU4RjAwMEQxMTk0OEZGQ0NEM0NGNjAyNzQ1OUI2RjEzNkUxNkUwMkMKKzoxMEU5MDAwMDMwQkYwQ0UwQTQ2MDFDOEVDM0U1NjQyNTg3Q0JGRTREQjAKKzoxMEU5MTAwMDMxNzZGNDY3OUM1QzY3MjM3RkU1RTZGOENDNENDNERCN0EKKzoxMEU5MjAwMDkzNkJBNjY1MjJERTM1NkUxQTk2ODlGODNFQUI2NURBRTIKKzoxMEU5MzAwMDU5RTRERjUzRDQxOTM1MTQ0RjZERTU3OENGRDhBREE0MjEKKzoxMEU5NDAwMDc3REQyMUNFRUVCODlCNjkwMTc4NUYzOTNENDFGM0MxOTcKKzoxMEU5NTAwMDdFQkNCRUFDNDQ1QTJGRDM5REY5RDA2RUExRDhGN0MyNkQKKzoxMEU5NjAwMEQ2QTUzMzcwM0NCOUZGMDUxQjYyMENFN0ZGQTMxMjYzMDkKKzoxMEU5NzAwMEJEOTJEOTQzNzg5Njg1RTc2QzBGQkRDN0YzNTdBQkZBQzQKKzoxMEU5ODAwMDc4N0JCMUEzRUJGRkIwRkQ4RDU3QzJDNjNCNUU5ODkwN0MKKzoxMEU5OTAwMDgyN0EwQjFCQ0Q0NjdGQTM4NkZBNDc4M0VCOTcwREZFNDkKKzoxMEU5QTAwMDM3NUVDOTA5QzE1NUUyRDM2RjBBM0Q5RkUwRjlDMDYzRTQKKzoxMEU5QjAwMDhBQjcwMTJEOTEzQ0I4QTVEQkFGQjUyRjExRTFCNzI5N0UKKzoxMEU5QzAwMEZFQTU3QkFFNDRCOEJDQzdGRDFDOUJFMzZCODg3RjdDNzcKKzoxMEU5RDAwMDgyN0MzQjBCRjlGNEY1MTlDMTMwQkUyMEZCMDcwNTNGRTMKKzoxMEU5RTAwMDNERjJDQkVCODk4RjFDQTg0Q0E1Nzg0Q0M3NzNEQ0JGREMKKzoxMEU5RjAwMDdDNTREMDdENDdDNUY1RDU3NzAwRkZFQ0Q4QUQ5MjlFMEQKKzoxMEVBMDAwMEQ3QjFFN0ZDNDFGNEQzNzRCNDJCOUEwMEI5MjU3Q0RDNzAKKzoxMEVBMTAwMDhFM0RDMENGOTFERjdBNkNGNDdFRkZFRTVGRDEzQUJGQkUKKzoxMEVBMjAwMDJGN0U1RUIxNTdGMEYzMkQ3Q0ZFQzU1NjBGRjExN0U2MzEKKzoxMEVBMzAwMDlENkREOERGREY4QkFGNUY4ODlGMUZCMTcxM0NFRDM4RDQKKzoxMEVBNDAwMEEyOTJCRjhERjlGNDQzQjlGREMzRjBCMzhDRTM2NzYzQzEKKzoxMEVBNTAwMDY1MENFM0YyOTVGMzk5NTkxNTQwMDdBOEU3MzM3NzMxMzAKKzoxMEVBNjAwMERBOTQ5RkVDMjlFRjQ3RjI3MjgzRUQzOEVBRDMyRUY4NUYKKzoxMEVBNzAwMDg3NzJEQjBDQzc0QTY2M0QxRTBDQzNERjlCOUY4M0Y2ODMKKzoxMEVBODAwMDYxRUI5Qjg1RUZDM0YwRDk4Q0FGMjU0NTQ2N0NGRDgyQjkKKzoxMEVBOTAwMDdEOTU2OUNGRTZFRjBGRjUwRkYxM0RGQzA5RTcyRjkyNjkKKzoxMEVBQTAwMDZGNDlGQzA1QkU1NTgzN0MwREY4Q0E1NTQ1ODBCNzNGQkMKKzoxMEVBQjAwMDJFQzhGQTRENTAwOUUzMkIxN0M5QzczNkM1N0Y0RDcyRDIKKzoxMEVBQzAwMDcwNzNGQ0Q3ODRDNzg3MkIwNTFFODM5RTgxQ0YzQkFFMTYKKzoxMEVBRDAwMEUxRkEwNkYzQ0YyNjdBOTgyN0Y1MDg5QjI3MDFGREE0RDMKKzoxMEVBRTAwMDQ3NTZGNTREQzRGN0M3OUFDQjg5RUUyNDNEOTlFNzNCQ0QKKzoxMEVBRjAwMDJBRjA0RkI2OUI2N0VEQjI2OTExRTRBMTc3OTUxMTdGQkIKKzoxMEVCMDAwMEQ4QUVEOTg0RUY3Nzk4RjAyQ0RBRjhFNkY2NzI5RTc5RDEKKzoxMEVCMTAwMEE2NzhBRjc5OUVEQjhBODRERUQ5NUU3RDUxRjMyMTE5MTgKKzoxMEVCMjAwMDc2RjcyN0ZEMzYyRTg0OTcyQUYyODEyRjEzODJBNDdGNTEKKzoxMEVCMzAwMENEMzZFODY1NDdDQjQ2OTM1RTc2QjhFMjdDNDRGREVDODMKKzoxMEVCNDAwMDY4QzVGOUI3NDYyM0JEOTVEOTA0QkRENzUyRkY3MkYxMDgKKzoxMEVCNTAwMERFQkM4RThGODRERTcwNEFGMDhGMTM4MkFFRTU3Qjc1NEIKKzoxMEVCNjAwMEZCOUFGRTczMTFFRjU3QTkxQUYyQUIyMzMzMEEwOUNGQjAKKzoxMEVCNzAwMENGRjgyQjY5RkVBMzE1MkFGOTlCRUUyRjlBMzIxN0ZEQzkKKzoxMEVCODAwMDRENzIzRDcyQkVGMjZCQ0UyN0EwM0ZFRDBCODAxN0ZBOUYKKzoxMEVCOTAwMEM3Q0E2RDVBQkY0OEZBODUxOTFFRDFDNjk1RjgwM0ZBM0YKKzoxMEVCQTAwMEVDMTFEQ0U3NjFFNEEzRjhENjZCODREMzYxRUMwRkVGRTIKKzoxMEVCQjAwMDY3NkQ1NzI5REU2Njg2RDM4MUU5QzM4ODJGMURERDI1NjEKKzoxMEVCQzAwMEY4MjdDMDE1RjVGMERBODc4REU3QkFBNDJEREVDNDZGRkIKKzoxMEVCRDAwMEZBMUFERUNGQUFFNDdBOTlFNEQ3NzI3RDg3NTcwREU5NTUKKzoxMEVCRTAwMDE3OUUzNzc1QTFGMzk2RTM1QzJDQkVEQzI4RkFBM0Q4RjgKKzoxMEVCRjAwMEZDODZFNDZGQjI2MTNDQjAxNDRERjM2NTlCREU1RjZFNDIKKzoxMEVDMDAwMDdBNUY2MEFDNUYyNDFFMUYxM0Y4MjNFNUNGQjE1OEFEQzcKKzoxMEVDMTAwMDNBNTIxQ0VGRThENTMxQjVFMUY5MDk5RDQ1REM3RkQzQzcKKzoxMEVDMjAwMDU5MjRFMkRFOTcyOEI3RkZBMzI4QjJEQzhFRDY1RkYyMjQKKzoxMEVDMzAwMEJEQTcwQjNENDFFNDc3MkM1MDRFRjFFQzhCRTU3MzYxQTEKKzoxMEVDNDAwMDcyRkU0QzExRDI3OTUwQjE2MzdGQTk1N0RENThDNkU1RTkKKzoxMEVDNTAwMEMyRTZGOEE3Mjg0RkUzRDM0NkFFMTdFRDZGOEMyMTNDRjAKKzoxMEVDNjAwMEZDRjMzNUZDRkQ5RkZGRUQyM0QyQTcwRUVDREQ5QzE4RDUKKzoxMEVDNzAwMDJFRTcyNTVFOUVERDMzMkQxMUZEQzIyNzJCMUU0QjBDOEEKKzoxMEVDODAwMEI3MDNFNEZCOEYyQjFFQkI2NzJDRDFCN0FBRjU3NjJFRkEKKzoxMEVDOTAwMERGRDYxRUU4QTgxMEY2ODBEMDE3NkVCMkI2RkYzRkIxREYKKzoxMEVDQTAwMDA3Q0M3NkMwMTRGNUUxNDRFNDdGNjY3QkUwQUM1QjRGQjMKKzoxMEVDQjAwMDc0MTE3QzA0REQwOUI5NzJBMzgwQ0Y5RjZEN0EyMkM1REYKKzoxMEVDQzAwMEU5NzYxNTcyQjk2MkMyNEYwOTg3RDMxMjBFMUJDQTdCNEYKKzoxMEVDRDAwMEM1OUI1MzQyMkVDOEZBNjIyQjIzNzg3ODFEOENGNDY1QUQKKzoxMEVDRTAwMEQ2QTY2ODE4RkZDMjM0OTUxMjM4OTc0MzE1Rjk4RkExM0MKKzoxMEVDRjAwMEZGNEFCNjdGQTY1ODI1RkM5NkYzMUNEOUE2QjRBMzdGN0QKKzoxMEVEMDAwMEU1QjdDREU1RDU3NzYwQkVDMzhDNzhFMkFCQjJGRDEyMzYKKzoxMEVEMTAwMDVGRUZGMkVCQzhDNkE0NkI3MTFFRUYxNjU1QzM0NzVFREEKKzoxMEVEMjAwMERGQjE3RUUxRUI5NzdBOUFCOURGMzI2QkVCNDVEOUQxNEYKKzoxMEVEMzAwMDVFREZGNjQ0QjQ2RjgzNjI5REMxRkRCMTc2Nzc0MkNGNEEKKzoxMEVENDAwMDdFMThBRkMxRkQyRjlCQTE2QThEQjBGRTY1MUJGOEJBN0UKKzoxMEVENTAwMDJBN0RBQTk2MERGNURGQjYzRTc2MkREMkMxODk3QTlCMjMKKzoxMEVENjAwMDg1REIwNzJFMDM5RUJGRDk1QUY4MzZCNjNGNTlDNkU1NTQKKzoxMEVENzAwMENBQjE4QUFCMTIzMTBGQ0VCN0M1QTZFNUI4N0JDRTU3NjQKKzoxMEVEODAwMDUzQ0NGM0QyQ0VFRTg5QjFBMEZGRjQ2Q0JEOEQwNUM4OTMKKzoxMEVEOTAwMDdGRTEyMTdCRjlDODg2MjE1NDlFNDVGODcxRkI5QUNFMEMKKzoxMEVEQTAwMEZGQzY2MkVFRTczQUQxQkFCMDNGQTcyNzM3QUQ0M0UyREMKKzoxMEVEQjAwMENCQjE1RDZBOTkzRjAyQkZCQTUxOUNEQkE5QUY5RTI2RDkKKzoxMEVEQzAwMDdDN0I3NTU3MzlDOUUzMTMxNTdDOUU1M0FCQjQ0NDg0REYKKzoxMEVERDAwMEU3RUYzNkE4NDRDNzI3N0Q3Q0ZDRkQ3QkVGNEExQzBCODAKKzoxMEVERTAwMEZCMzg1QkMxRjc3NTc2Q0Y5RDZGOEY4MTdEMDYyQkE0QjUKKzoxMEVERjAwMDNDRTY3MjRBRTZGNzA0MzcwQ0ExNzhFRkE3Q0REQ0ZFQkIKKzoxMEVFMDAwMDk2RjQyRUUzRTE1N0FEM0M5MjQ4RkRBNTlDREIzRERCM0IKKzoxMEVFMTAwMEIwRkU4RTVEMjdDODBFM0JCQjAxNjZFMzcyQ0U5OThGQjQKKzoxMEVFMjAwMEY5ODZCQzNCNUIzMkMzNzhCRUIzMkFFMjBERjU3OTJEN0YKKzoxMEVFMzAwMDQ2NzlENkI4OTdGMzJCQjM5RUJCNzgwM0U4QzFFODk3MjEKKzoxMEVFNDAwMDMyRDk3OTBCMUIwQjEzNEI5MDdFNTEwRkM2M0M5MzI3ODUKKzoxMEVFNTAwMENBMEZBNkUyM0VEQUFCQTk1RDg1ODg5QjJENkM4QjMxOEIKKzoxMEVFNjAwMEYwODNDQTY2QTM1REI3QzA2NEM3RjVCMEVCNENGMjQ4NDcKKzoxMEVFNzAwMEMyNjk3OTE0RjkyNEY1QjkwRTYxQUYxQ0I1NzlBQTIzREEKKzoxMEVFODAwMEU1NTNCNDE3NzNGOTMzMEZFODM3MERFMzQ0NENBRkJDQzcKKzoxMEVFOTAwMDUyQzA3QjNEQzJDN0RFRjU0NTBFRThEMzFEQUEzNjFFMjMKKzoxMEVFQTAwMEY1RUExRTc0NjBEMjAzQ0JDQjhDRjA2NTlBOEY5NTQ4M0YKKzoxMEVFQjAwMDdGODQ5QkY0RkJEM0E4RkZCN0Y0MTU3MkRCMDc3MjI4OUQKKzoxMEVFQzAwMDAxRTU5MkZFNkMzMUNBOTU4QkY1MUY1Q0I0N0U1RTIzMjIKKzoxMEVFRDAwMEY0RjMxQTgzN0VERTgxNERDMkZBRUZBRkJDOUVGQzU0ODAKKzoxMEVFRTAwMDQ3QUVCOTlFRjRGNTIzREQ3RTJBOEZDMTRGMjVGNUJBRDIKKzoxMEVFRjAwMDIzMzNDQTBERkE2N0Q4RjMzRUJERTU4QjQ3RDMzNzhGNkUKKzoxMEVGMDAwMDIxM0YyNjNFQ0RFNUQyNUE2MTQ3MzYwQjNCRjJDODBDNzUKKzoxMEVGMTAwMDYxNDdBNjMwQTIyM0FCNTU2NzkxRjhEOUE1RUE2RjBCREMKKzoxMEVGMjAwMDlBOEQ3MkM5QkJDQTY4M0YzRTNGQzk3QjE2Q0YyNTI2NjIKKzoxMEVGMzAwMEVENzJDMzczOUJBQkMwRTgzRjM0RTFFNzQwQzZGREU3MjkKKzoxMEVGNDAwMDc3QTEyRjAwRTBERTU0QzlGMzRFRjEzOUU2QkY0OEI5OEUKKzoxMEVGNTAwMEM0QTAzREYyOEJDQTBEOTdGQkQ3RjNGNzNFQjUwMEQzQTMKKzoxMEVGNjAwMEU1MThBQTc0RDRERUNBRUJCQUMyRUIzRUE3NzhBRjhBMjIKKzoxMEVGNzAwMEJDMzcxQkQ0OEY2NTY5QjM1MUVGQzJCQzlFRjg2NEZFRTkKKzoxMEVGODAwMDFFNTE2NDIwRTA3NTYyNzI0OEZFQTE1RjNGOTY4N0Q2RUQKKzoxMEVGOTAwMDdEODlEMDZGNTA0NUQ2MkI0OEQ3OThFRjczNTkwMURBNDkKKzoxMEVGQTAwMDhDM0MyRjJDMEQ1REZBMDUzNDdFMDBGMzdBODI0RDEzRDQKKzoxMEVGQjAwMEM5REY1Q0VFNDhFNEYxNzlCMEEzN0JDN0JGNDZBRUQ3QUEKKzoxMEVGQzAwMDk1RjVBNUM5MDY1OUY5N0FBMkUyQjM2ODc3MjE3QzBFQjYKKzoxMEVGRDAwMEQzQzMwNjhDMjIzRjlBODVGQzJEOUJFMjQ3RDgxMDdGMzUKKzoxMEVGRTAwMDY3MzkzRDE5MDgwN0MwNzc5MkFGMURCRkIxMTMxRkRFMDcKKzoxMEVGRjAwMDVGQzlGREIwMUREMzQ3NkZCQjFEOUU4Rjc4REE0OUJFMzgKKzoxMEYwMDAwMEY0OEVDNUQyMEZERTk1MTA4RUI3NDc1NzlEQjAyMDVGQTYKKzoxMEYwMTAwMEZFRkQxRUE2NjExRUUzRDFERDU1MDdERjgwNzEwRUFDM0IKKzoxMEYwMjAwMDVBQjhCMTE4RTlFODREOTVFQzA2QjNGRjc2RDJEM0UzQjAKKzoxMEYwMzAwMEM4RkVCQUVFMUE5NUYyQkIwRjk3QTkwQ0U1REFFMTBERkUKKzoxMEYwNDAwMDcxMDYzQjI0RTRENzU1MDkzRkJFRDg2N0E1Rjc2OEVBQTcKKzoxMEYwNTAwMEU0NjJGRTE1RkEzNzMxNEZBQjhDOUZDQjBCODI5RkI1MjQKKzoxMEYwNjAwMDhCNzNGQ0I5RDA2Mzc2MEFCQTY5MTM3NDczQUZBMDlCMzMKKzoxMEYwNzAwMDc1NjZGRkVFQzM5QzZFMEVFRjAxQzMwMUU0RkEzQjMzRUQKKzoxMEYwODAwMDE2OTY5MkRGN0EwQkEzMzg3NEQ2NzQ3NTdEMTFFQ0VGNjcKKzoxMEYwOTAwMDhBMThDRDg2RjA5QjM0MjM5RkMzQjM0MkIxNjBGQ0E2OEYKKzoxMEYwQTAwMEJDMkNERjg2RjQ3RTQ1NUZCNzBERjk2ODc5RDk0Q0FBOTAKKzoxMEYwQjAwMDRGQUVDODIyM0I3RkZGMkE5MDhGNjhFRjI3NjgxOTQ4MjAKKzoxMEYwQzAwMDk3NDM2N0M0MDQyQzg5NjgzNzE2MTI5RkI4RjI4Q0M1MjEKKzoxMEYwRDAwMDQwMkZGOTgxMzgwM0RENURGRTc4QjJFMUZEQjAyREU5MDYKKzoxMEYwRTAwMDg2N0EzRjRGQjZBMTdEREYzMjIzM0RDNjBEMkQzMEYyMkIKKzoxMEYwRjAwMDVEQzZGNTQyMDlFNzI5RUEzOEYyNzMxRDBEQzk1MTdBNTgKKzoxMEYxMDAwMDJGRjUxMUU5QUY5M0VEMDE1QTA2QkVENjIyRTRDODA4RTcKKzoxMEYxMTAwMEE4NjMzRUREQkE4QTI2MDdFNjREN0NEMTZFRDVGOEY4QTUKKzoxMEYxMjAwMDU1QTQxRjM4QjI5RTczMjA5RDYwNjgxNUYzQUI1QUE0OTYKKzoxMEYxMzAwMEZFMjlGQ0Y3NEM2N0E2NzU2RDYwMTg2NzNENUFDNjA4MzYKKzoxMEYxNDAwMDlGNjI4NzMyMDVGNUFGMzY3MURFRjc4OTc5ODFBRjRFNjAKKzoxMEYxNTAwMEIyOTE5RjhFOUY2M0RGMTkxRTZBQzczQzQ2RkIyMDBENEMKKzoxMEYxNjAwMEU5QUMwMEYxODRGN0ZGQjlFOEJGNTNFMENCRDFCMkM3RjcKKzoxMEYxNzAwMDU2QzcyMTNFQ0M2NkE0NkY0QzUxNkY1RThERjFDNEEzN0YKKzoxMEYxODAwMDMzMThEMTQ5N0JFMEU1Mzg1QzNGOEU4M0Y5ODEyRjQ0MDkKKzoxMEYxOTAwMDFCQTdFMjU3MUZERTgyRUJEOTY1QTc3MUNBMUY2NzEzNTEKKzoxMEYxQTAwMDEwNEYyRUZGRDFCMThGREY0NkYwNkQ3MTFEODg2NTNEODgKKzoxMEYxQjAwMEU1RjA4OEM3NzUwRDgxOTM3Qjg2MDU2QzU0MDY3NEU0NzEKKzoxMEYxQzAwMDNGQjk2NzBFRTkxODBGQkNGQ0NGQkIzRTdFOEFFMUJDOUQKKzoxMEYxRDAwMDVDMkVCNDA4RkMzNkYzRDc1RjNDRjFFQjA1Mjg5RjdGMkIKKzoxMEYxRTAwMEIxNzM2QkMxMDc1MEZFNjBGNTgzRTlGNTUwRkU3Q0Y1MDUKKzoxMEYxRjAwMDRENUI2Rjc3ODdGQ0E1M0JBRjVEQkFBMzBERUFDMzdFN0QKKzoxMEYyMDAwMEY4RDMyNzlGNDNCQ0JBRjZBN0ZGRTczOTVDRUZCNTdGNzkKKzoxMEYyMTAwMEZCQTMxM0Q2N0Y1OTUzMDI0M0ZBOTZFQjMzQ0Y5M0M2MjEKKzoxMEYyMjAwMDVBMTQ4QzhCMjIxRjI1QkU2Q0Y1NTE3REJFQ0Y2OEZGMTIKKzoxMEYyMzAwMDk4RTUzRUI2QjcwMkZDQ0FFQjdGNDFGMUU1MzREMUZGNTkKKzoxMEYyNDAwMEYwMzU3NzI5MkFDQ0ZCQzE3Q0NFNTczQTFBQkFEQTI2OTgKKzoxMEYyNTAwMERCQTg3RDAwREIwMzlGQTQ3Q0NEODE4MzgwQUQ2MDdGMzQKKzoxMEYyNjAwMEJCNEZDMUI4MzgyODQ4MUFDNjdCMDdDMDdCRTRFN0NDM0YKKzoxMEYyNzAwMEVEMjZGRDJBNTNFMkFGRTAyQjc4Q0Q4MTkxM0ZEMDRBQjUKKzoxMEYyODAwMDc4OTYyQkUyOTFDODdGOTFERkJGMzEyQTlCRjhGMjQwM0MKKzoxMEYyOTAwMDI3RDNGMTdDQ0I1RURDQTA2MDlFREFGQjVFQjc0NjdBQkEKKzoxMEYyQTAwMDQxMDNCQjdGMzJEOEM5OTdBQjNDRUYyMkI3RUNGREI5MjUKKzoxMEYyQjAwMDc4MkVCMDU1QUJCNzIwMzRFRTJFQTFENzk1QkRFOEE0N0IKKzoxMEYyQzAwMEJDRURGNzc3MzlCNzkzOUU3RkU4NUE0QkI4N0U1OEZBNzIKKzoxMEYyRDAwMDhCM0YzREZCM0JDNEFGRjlCMTg0NUY2NkJEQTU0M0QwMTYKKzoxMEYyRTAwMDQ3NzdEREU2REU3NjNCQzBDN0Y3MUIwN0I3QUI3NDc3MjEKKzoxMEYyRjAwMDA2RDlFOTlBM0IwM0YzNzdCQURCRkQ1NEM2RDNCNDNGOTIKKzoxMEYzMDAwMDIyM0Y5RjU1MTU0RjcxMDYxOTU3NTJDQjNFNUY4M0Y0MkMKKzoxMEYzMTAwMDM4QUZBNEFFMThGNUY3NzQzQzg3QkVBMTM4RjYwN0NCMUEKKzoxMEYzMjAwMEVDOTQ2RkUwNTNFMjI4MkYzRDVBQkNGQUJGODQzQzY0NTIKKzoxMEYzMzAwMEFDNkUyNEFEODNENThEQzZGMkZDRUNBNjZENzY3Nzc0RTkKKzoxMEYzNDAwMDc5RDUyQ0NFMzVEQTdCOUI5RDc5MjNDNTk1RkY2QjE0M0YKKzoxMEYzNTAwMEY3MjMzNkUxMzlEOEMyQ0VDMUY5RkJCOTE4MUY4RTc2MzIKKzoxMEYzNjAwMDBFQ0NFQTJGQTAzQzRCODc2MzI4RTY4MUE0OEFDNzlCN0EKKzoxMEYzNzAwMEUzN0ZGNjE2Q0FBQkNFMjM1QzVFQTVENjdGRDk4MEY0QjgKKzoxMEYzODAwMDI3RkQxNjM1NjlBQzNCNkVBNjQzM0Y5QkU4OTcyQUUyMDIKKzoxMEYzOTAwMDJDNDhDM0E4N0ZENzg4Nzg1MTY3MzVBMzc4NTE2QUZENzgKKzoxMEYzQTAwMDQ3RkY4REYwRDkyNEM2QUY3OThGOEY2RkI3MDZGNjIzNEMKKzoxMEYzQjAwMEJFRDQzOEREMjQ3NzNBRkIyNTZBNzhBRjg5N0RDNUYzNjIKKzoxMEYzQzAwMDUzRDIxOUM3NDczOTNFMTNFM0UzQ0E1OUQ4QkE1M0UzQjYKKzoxMEYzRDAwMEFBREVBMUVCMTAxMzU4MjAxRUYxNDc3MUQwQkNFOUFCOTcKKzoxMEYzRTAwMDYyMjhBRjU1RUE1N0E5RjU3N0REQUE4RTMwOENBN0EwMjEKKzoxMEYzRjAwMDVFRkQ3RTE1QjdCN0QxRUNFQzFFMzdDQkEwNTc5MTlFQzIKKzoxMEY0MDAwMDY1NUU4N0VDRDc2OTYzN0JEMEZFMEREM0IzNDgwRjYzOEQKKzoxMEY0MTAwMEUxRjMwQzMxRDQ4NTFGQ0Q1OEI3QTVEOTBEN0NFMkZEQTEKKzoxMEY0MjAwMEFGQ0FGQkQ0NzEzOUUwNEUxOUM1RkQ3NzA4MEZBOThGMUIKKzoxMEY0MzAwMDQ5QkRBREM3Qjg4MkRFQzNGNDRCMUZGMjBCOTk0N0QxNkIKKzoxMEY0NDAwMEFEMjdENTg2RDk0REQ5M0RGQkM5N0MzNTc5MEUxMjlFQTUKKzoxMEY0NTAwMEQxRkEzRjNGNDk5RjMyOUFGNEFDMDA4REUzMTVDMzU4NkYKKzoxMEY0NjAwMEUyOUQ5OTA0NUYxM0JGMDRCNkM1RjNFOTg1MUUwQTVBRUQKKzoxMEY0NzAwMEE0MjE4RjQxRUE5NTkyM0Y3NzBBQkUxQkNDMEE5MkRGMDYKKzoxMEY0ODAwMDUwRTY4OTBGODIzRTk5RDBGRjg2RDE0OURENzlGNkE4RjIKKzoxMEY0OTAwMDA3MUQ2REY4OENFMkVGMzVBODg3QzJGQ0MxRDU5RjE4MTcKKzoxMEY0QTAwMEVFQTExNDk1NEVCQTgxRDY2QkNBOTcwODhCQkJEMjdBNUYKKzoxMEY0QjAwMEJEODI2RjRFNTE5RDk0QjdEMkM5RTIzNEU0NUY5RDNFNDgKKzoxMEY0QzAwMEExOEZGRDIxOUVGNDMxQzkyRkNDRkNFMTFBQ0RDOEZGREMKKzoxMEY0RDAwMDdGNTQ2MkU0RkYzM0Y1QkUyNkJCRDAxOEE3QUFGNDk4ODgKKzoxMEY0RTAwMEUyRTFFRjREMzdGMDREQzk3RkVFNDQzNzlGOEFFRTI1QkMKKzoxMEY0RjAwMDBGQzU3NURFMTRGQ0YyNkRBMTA3REE1OTFEM0Q3NzMwOUEKKzoxMEY1MDAwMDdFN0YzNDhFQjU1M0U5NjQ4N0E4NEM2NDVENTRCQTk4MDUKKzoxMEY1MTAwMDhCRjI2QjkyOTk0NjY1MEFGMzUwRDk5RkQ1NTE5OUM2RTMKKzoxMEY1MjAwMDc4M0U1NTNBNkJBNzcyMTAzQjQ0NjUyNkVCQTJEMkNEQ0MKKzoxMEY1MzAwMDVDMTYyQ0IzOTk0NkU1NTBFNkExRDJDMzVDMTQyNzdGMzQKKzoxMEY1NDAwMDJGMjE5ODcxMThFMDM3RTM3QTI2RUVGRDFFQkE0MTg3MjUKKzoxMEY1NTAwMDczRUFBQzY0QTE3QkMwNDg1NzUzOTg0MEJFQjdGOUZCMkYKKzoxMEY1NjAwMEU5QjJGRUNFMEQzQUJFOUZDNERCNkY3REZFQkQ4N0YwRDMKKzoxMEY1NzAwMDVFMzBGMDFCRjFCRTgzQkZFRkFFQkY3QkMzMjRFQzZGRTgKKzoxMEY1ODAwMEIzNTA3REE3Njg3RkFBNDg3RjA4Q0ZGRkU5RDE4Q0NFMTIKKzoxMEY1OTAwMEJCQUM0OERGMzZCQTM4NTQzRjUzQTgzRjFBNUVFRjNGNDIKKzoxMEY1QTAwMDRBREYxRTVFMUY1REE4M0YxNkRFN0Y0OUExRkU0NEY4QkMKKzoxMEY1QjAwMEZCN0RDNUZBQkZGMkJBOEJGMEYyM0Q5QjRFRkEyRUZDRjIKKzoxMEY1QzAwMEVDNTI0NjcxN0NDMzlGM0VBQUY3NjlDMkMzREQ4QTE1MUYKKzoxMEY1RDAwMENGMzU0NkQwOUIxRENGNTE0NTNBRDIxQzMxNTg3QTc4NTEKKzoxMEY1RTAwMERFNEYzMEQ2MTk4Q0I3RjQ2MkZGOThFODI4ODhGQzA5MDIKKzoxMEY1RjAwMEYwNzBCOEUyREQ0N0YzOThGODg5RTIxM0Y5ODMyOUM2ODEKKzoxMEY2MDAwMEI4MDlFMDNCRjk1NTgzQUJCODlEQ0U1OEU0Rjc3MkRFRkMKKzoxMEY2MTAwMDBCRTEzOUQzQzNGQ0JDRDlBMTcxQTNFREMzOENCRjg3NjcKKzoxMEY2MjAwMDg0OUVENzIxRjRCQ0Y3NDQxQ0I5N0JERjQxNkJEMjY5QkYKKzoxMEY2MzAwMDQ3ODg4RUEzREI4NzU2NzYzQTlDNUZGNkQ4Rjc5RkFBNTkKKzoxMEY2NDAwMDZENDBEN0MxRkExODE3Q0FCQkNFNThGNjM2REE2OUJFNzQKKzoxMEY2NTAwMDIzMkE0MzNERTM1MkQ3REI1NjM4RjUwQ0U3OEI4MzVDMTYKKzoxMEY2NjAwMEM4NjdCQUU3MTU3Q0E2MTM3RjA1M0RFNzhBM0VEMkJFODAKKzoxMEY2NzAwMEQ0MUMxQ0RFRENFRTQ4MTJFQjZBOUE5QzdDNzUyRUY5RDkKKzoxMEY2ODAwMEYzQjk1RTlGNjczQjM0NzMxQUFDMzM3NTAzRjdBQjI2NEYKKzoxMEY2OTAwMDIyN0Q2M0U4RUNFOTNGQjgzMDhFRDYzQUM1QzI5MDRGODAKKzoxMEY2QTAwMEFEOTE3RTVFOTMzRjZFRDNFNDE1QUU3MDdGRjA5QTQ0QzkKKzoxMEY2QjAwMEJGODJGMUNCRjQ0MDJDRjc0M0E0MzA3RjJDQ0FEMTMyNjcKKzoxMEY2QzAwMEFEOENGMjY2N0NBQUFCMENFQjU1RUNEQTVDQTgyRjY4MkIKKzoxMEY2RDAwMDUzREQ2NTMwRUY4MUI2NUZBRDQwM0ZFMEEyMkEzQkM1MDgKKzoxMEY2RTAwMDMxNkNGQUQ0QjNEQ0ZGQzdGMzM3OTIwNTlFMzdBRjhCOEEKKzoxMEY2RjAwMEQxMDIwOEM3N0U0RUYyREJFNkFEMjkyODQzN0JCN0M5QUQKKzoxMEY3MDAwMDk5OUM4Q0I4OTg1Q0I1ODRGQzg2NEQ0RUVEMzVCQ0RGNzkKKzoxMEY3MTAwMEUxNzM1OTI4M0Y5MUI5NzQ0NzM5RTgyQkRCNkZCNzk2RUQKKzoxMEY3MjAwMDIxMUZDRjc4QTYyODUxMEQ1QkY3ODlFNjczQjExODA3MjIKKzoxMEY3MzAwMDc5RDQ2NUExRjc4RkFFMkE3NTJDNzFFMjNENDZCMDE3REEKKzoxMEY3NDAwMEEwM0NFMDNBQUVBM0ZFQkUxNURBQTBCRkYxOUVEQUUzMUMKKzoxMEY3NTAwMEFEOTdGNTcyOEU4OTY1NzYwM0RFQzY2QkM2N0E4Q0M5NjUKKzoxMEY3NjAwMERGNjgzM0U5MDVDMzRBMTI1MkU4OUM0N0IxNTE3OENFQUQKKzoxMEY3NzAwMDIzOUZGQzhBRUNERjc5NEUzN0Y5RDU0QjVCMTRDQThGOTcKKzoxMEY3ODAwMDA5RUVENzMyNTFERjNDQjE3MTE4RTVCQjM0QjcxOEZEMzMKKzoxMEY3OTAwMEQxQzEwQzk2ODlGNzdERTZCNzJBQTRBRkFBQ0Q5RjM3RDEKKzoxMEY3QTAwMDYyQkZDMUI5RUUwMTM4Q0U2MEFENkI4MDJCOENGRTFFRkUKKzoxMEY3QjAwMEZERTk4RjYzNTFERTM1RTM4NTM1QzIyM0M2RTM0MkMyREUKKzoxMEY3QzAwMDVFOTVGN0NBRTdCQkNFNTVBM0RFQkZBOEY1NUQwRkMyQjUKKzoxMEY3RDAwMDNGNDlCNzEwQ0QxQ0I1RjlEM0YwRkNENzRGOUE0NTc0MEIKKzoxMEY3RTAwMDg5RjdCNDUwOEZFOUExOEZGRTE1RDYxOTc2M0Y2MTREODgKKzoxMEY3RjAwMDRBNzYxQ0NFMUJDMjVGM0QxMUY3N0JCMkI1OTBGNEEzRDUKKzoxMEY4MDAwMDFEMkRBNTc0MUZDMDNDQ0VERDBEQUMxREY1RDYzNTBERUMKKzoxMEY4MTAwMDhFRjY0OEZBRUZERDk5OUU0Q0JDQkY3RDZBRDNBNEI1NDUKKzoxMEY4MjAwMDBDQ0VGRkQ0RkU2NTY5NzhERjdENzE2QjBDOEI3NUY3QUMKKzoxMEY4MzAwMDZDN0Y3MkQzNjg5QTZGMzFERUEzQzY3OTVCNjdEQTUxNDkKKzoxMEY4NDAwMDZFNEM2QjlCNjQ0N0I4RERERDMwRkI5OUYwNzkxRTJBNjYKKzoxMEY4NTAwMEY1NTY5NzAwRkRDNUI3M0U0Mzc4RTI2NDAxMUZDMkY1MzcKKzoxMEY4NjAwMERGQzdFQjk5QTg1RjlDQ0M2MTExRjMzOTk3OTYyODQ0QzgKKzoxMEY4NzAwMEI3QkYxQkVGQTFGQjI5QTczMjIyQjdCQkE5ODRFQkU3RDcKKzoxMEY4ODAwMEMxMTIzN0JGQjc2RTY1NkYyRjREMjE3QkQwODVGNDdBREIKKzoxMEY4OTAwMEEyQTU5MEUyNzczNjhDQkIwRkMxRUY1NjdDRDU4MEY4REQKKzoxMEY4QTAwMDdGQkU2QUUxMDc0QkUxRkQ5QUU5RDc5REMxNzJBNEJEMTUKKzoxMEY4QjAwMDhFRjQ2NkY2N0I5NUU4MDFGNDQyQkEyN0Y2OUYxNTBFQTIKKzoxMEY4QzAwMDU3NTM1ODFFMjFFQThGQkFDMUFGRTE2MTY4N0ZEODVBRjkKKzoxMEY4RDAwMEQ0ODAxREY4QkI2RERGNjlEMkMzMTE1RkY1MzBGQ0E1ODQKKzoxMEY4RTAwMDlGNTE0MjlGMTdGOTIxNjlBM0U4REUxREZEQUNCOUZBQ0IKKzoxMEY4RjAwMDNBN0YwMENBRTMyRDBCMUQ5MUNFMzFGQUZDNjFFM0EyRTEKKzoxMEY5MDAwMDdFM0I5OUU5QjE2MUYzODM1NDBDOTA1RkRCQ0JFN0VCNkQKKzoxMEY5MTAwMDZFMjdERTgzMTlBQUQzRkE4NDVFNkU3RURGNEQ2RjVCOUQKKzoxMEY5MjAwMDhDRjRCOTREOUM4RkQ0Q0ZBM0FERjcwNzdFNjNCRjE3N0UKKzoxMEY5MzAwMDMwMzg4MTg2NDRGQkI1MDY3QUI5NUM2RDVGODE3MTE1RkMKKzoxMEY5NDAwMEY2M0VFN0ZGNjBENzMxNEY4NDM4NTc4OENGQzJEQUZCRTUKKzoxMEY5NTAwMDBCRjgwMTNDRDdBNkNDMjJGQjI0REEzQUVDRkU0MzdBMjIKKzoxMEY5NjAwMEQ2ODg5MEZERjY4MzM0RTNCQTY0QkIxN0M0QkU2MkZDNEMKKzoxMEY5NzAwMDJDNjA0QkM0MzI0MEY3Mzk2MkEwM0ZDQUVGMkZBQTZFMDkKKzoxMEY5ODAwMDczNUQxRDgxMkU2NDY5RTY1QkY4RTMwRThCRkY5OEY5QzkKKzoxMEY5OTAwMDA0QTJDMTUwQTk4RjU4Nzg3RjNEOENDRjI1RENDRkY1Q0MKKzoxMEY5QTAwMERGOTM1QjE0RDI3RkQ3NkZFMjc5MTQ1RkY4QTE0RUNBNjAKKzoxMEY5QjAwMDA1M0YyNzU0MkRCRTExQ0E4RTMzRUNERUUxOTIxNzVCNTIKKzoxMEY5QzAwMEVFQjlEQzZEODBEQkEyRjBFRjk5OUM3OUYyMjc2RkUzNTIKKzoxMEY5RDAwMEZCOEY5RUZBODkwNzk3N0I1N0NBQTI0NENFQjc4RTJEMUMKKzoxMEY5RTAwMEMwNzk0RTVENjEyNzdGMENGRTM4MjQ3RTQwQzNBNUZFQTIKKzoxMEY5RjAwMDE4MDMxRUFFREZGQkU0OTYwNTI4NzdGNjNBMzQ0Q0M3QjEKKzoxMEZBMDAwMDVCQkNDNUY4M0UyNjJENkM1RjhDRTM5N0NGMDBBNzYwRUEKKzoxMEZBMTAwMEY2NENBMEEzQTMzRkZENTdCQTFGMUU4N0ZDMTNFOTcxNDQKKzoxMEZBMjAwMDU1MENERDBCMzNDMzc5NUM0OUY3Nzc0NjA4NkYxNzg0QjMKKzoxMEZBMzAwMEUyNTA3NDFGNDREMkQ1RjEwRDREQTc1NDE4NjdFRDJBM0EKKzoxMEZBNDAwMEJCOUJCRUE3NjBCMkJGOEVCQTY3RUE2OTYxRjE2MUZCN0EKKzoxMEZBNTAwMDJBN0U0RjkzODVEQjg5RDlBMUZEQ0I3MThGRkExNjNBQTcKKzoxMEZBNjAwMERDQ0U5RUUzRjVDMEJCMjhFM0Y1MjlENUJGNDZCRTk4QTIKKzoxMEZBNzAwMDU2RUE2MTYzMjgxRUJEOTBGNjVEQkY2N0Q1RDEzN0EwRjkKKzoxMEZBODAwMENEM0Q3MTVFRUI5ODdFQjhGRTIxQTMxNEJDMkY2Mzc1NEIKKzoxMEZBOTAwMEQzQkRDMUU2NjY0QjJDRjJGREQ2NzY2QkVDNTA4NDc3NzUKKzoxMEZBQTAwMEIzODVFNDdDNkI3QjRBREM1MDk0NEI0RTBCQzU0RjUxQzUKKzoxMEZBQjAwMEFFQTg2MUZFRkREMTYzMzhCQzQyRjJDMzkzMThBRUZGMUQKKzoxMEZBQzAwMEM0MDk3QzNDOTUyQkY0OUZDOTVDRkY1MTlFREU0NzdBQUMKKzoxMEZBRDAwMDQ3RjMxQTFFQTc5MkZBODY0QkUwOEZBQjk5QzcyMUEzNzIKKzoxMEZBRTAwMEU5M0ZDODc4NzBERDA5QzU4QjVDQzhEN0Q2MjRGMkVGMzIKKzoxMEZBRjAwMDZGMkM5QUFDRjlGMDNFRTc1NTRFNDY3MjYzMzA1RUFBMjEKKzoxMEZCMDAwMDQwM0RDQkM5RkNEMzYwMUVENUM1RjUxQjZGMkIyMzdEQjMKKzoxMEZCMTAwMDI2RDlFOUQ0MTBENEE5NkQ3RTFGQUQ1QkU3NzRFNjgwQzkKKzoxMEZCMjAwMDdGMDhDRkI4NUM5REUxRjg1NjkzNUU2MTM3RTkwREFBNzYKKzoxMEZCMzAwMEE5QUU4RDExNzkyQjQyOEY2MDQyRkY5NkYxRTA4NDhENDIKKzoxMEZCNDAwMEJERTcwMTQ5QkY2RUFCRjA0RjgwRkVFNEEzN0IyMzI1RTgKKzoxMEZCNTAwMENDOEY3OENCNzRERDlERDIzRjY0MDdBNDg5RUYxRUE1QkUKKzoxMEZCNjAwMDk1QjBFRDRENjFGMTI3NDU3Rjk1RkMwNkQyMkYyOUZEMUIKKzoxMEZCNzAwMDBGRDJDRjMxQTIwNEVDQjVDNDMwN0ZDNDRCNjA1QUFBNzcKKzoxMEZCODAwMDE0MEY5QjhFNzg5MjA1RUM4MEVDQzkzQ0E2RjBFQjE5MjMKKzoxMEZCOTAwMERGNTI0RkFGQkZCOEI4Q0Y0MzJGRjNGQjQxQ0Q5NjM4RkMKKzoxMEZCQTAwMDZENDc1NkNGNzYzNzhERTNGODE2NzcwMEY2ODY3QUVERjcKKzoxMEZCQjAwMEY1MEVCQTg3MzM0NURENERGN0VFMzcxNzU5Nzg1RTMzQ0EKKzoxMEZCQzAwMDNCRTQ0MjdENjBFMTE4Q0U3N0IzNEEzRDBCQzY1MDNDMjIKKzoxMEZCRDAwMEQ1OTM4NTc4MDNGMEYwRDlGMEZFOUVGMERCNjZEQzkxREEKKzoxMEZCRTAwMDFEODdGQUYwMDcwMzRFNkY0MkJERENCN0M2NDJGQzQ2RTQKKzoxMEZCRjAwMEMyMzFBQkQxNzIyRkEyNjE1ODdDMkU2MDJEMDhDNUQ5QkQKKzoxMEZDMDAwMEQ2N0JDRUY5RjBCRUYwQjVFM0I4REYzNTZFRTZDOUZEQzAKKzoxMEZDMTAwMEU4MDc1RDM3RDQ0MjdFRjZCQjEyNzQ4QURCMDFGRDM4RkIKKzoxMEZDMjAwMDU0MUVBRjdCMERFMzZEMkRFRUU0NjRGQ0VFQ0U1MzQ5MjQKKzoxMEZDMzAwMEZDQkRGQzdFRDUwMzA5RkRCNzg3RTc5Nzk0OEVFM0ZBRjgKKzoxMEZDNDAwMEM4MDM0QTY0N0RBNUVGMzg4NUU3NTlFRDA1NDBGNjIxRTQKKzoxMEZDNTAwMEJGMTZCN0M3N0Q1RjU0RTlDRUIwM0FEMjFFRjRGRjE3ODYKKzoxMEZDNjAwMDFGQjdBNzVCRjY3RTUxRTUxQjRBNzY5Mjc4OUY1MzRERUUKKzoxMEZDNzAwMEY2M0FGQTE4RTFGRDg5QkQyRjU1RjlBMEZFNDg1NkU0ODEKKzoxMEZDODAwMDc5N0YyQkU2N0RFNDc1RUY2MEQ0Njc4MzdCMDE3RkZBOTMKKzoxMEZDOTAwMDQ0M0FERjAwQjM5NEQwQjg5OTE4OTcwQUFFOEM5OTFERjYKKzoxMEZDQTAwMEU5M0IzNjgzQzZGMzdENkU4Njc3MzE3RDQyN0FFQ0U2OUEKKzoxMEZDQjAwMDJBQjM5RUVBMjc3RTc1QkVGNkY4NDE0QUQzMDZGRTUxNjYKKzoxMEZDQzAwMDBDRjQ5MEM0MjJGM0NCMEJFQkFCNUExQUVBOUQ0RDJCRUMKKzoxMEZDRDAwMDk1QjVDODNGOUE0MDVGQzVCODYwQUFDQjRFRkE2QTczMjMKKzoxMEZDRTAwMEQyOEYyN0UxQjk5Q0FGNjUyRUJDRUZCQTAzRDQzRUU0QjYKKzoxMEZDRjAwMDVGRTg1N0M1N0JBQ0QzRUEzOTlGRjFCQUI4OUYxNUVDRTIKKzoxMEZEMDAwMDM4Q0Y1NTg4OEYwM0FDODQ4RjUyN0ZCNTU2NzFGRTczMDAKKzoxMEZEMTAwMDQ1MENDRjQ3RUU0QzcyOTJERjM0QTk5RUU3MUZDN0ZCMUMKKzoxMEZEMjAwMDQwOUZDNUZENERFNkY5QzMzQUZDNDMzRTI0RjU1QjY3QjEKKzoxMEZEMzAwMDlFRDU5MDQ3NkMzN0U1MTk1QjRENzlDNUZCQzcxOEVEMkIKKzoxMEZENDAwMDk5ODRFMkEyNUVGNUFBOTdDMEZFQzU3NUVFMDNGRTgzMTQKKzoxMEZENTAwMDY1MDBFQzYwMkM1RjA2QkIxRENCNTdDMDZFQzdCOEMxRjkKKzoxMEZENjAwMEFCMERCOTU0QkVENkEwRDFGMzM3MUE0QUE4OUM5ODE5NDYKKzoxMEZENzAwMEE0QjgyMkY5OTFDOTdGQzMwMjBBRjlGMTI0N0U3RDNBMjEKKzoxMEZEODAwMEE4MTRFQTRGNERFMkVGRkZGMzg1M0IxRkY1MEQ4MkY3MTQKKzoxMEZEOTAwMDI5QTJCREVGRUE2QUM0RDdFRTNBQUJBRkM2RjYzNTY5MjEKKzoxMEZEQTAwMEJDNUUzREY2QzdENUU4RkZFOTlBQTI3Rjg4RjJBRDlGMTkKKzoxMEZEQjAwMEM1MzM3RjBEQjZGRDQ5OEMxNkM5QkVBRjFEMkJFNDc5NDYKKzoxMEZEQzAwMDE0RkI5REUxMjcxMjhDRkU5Q0IzNjM3QUYxRTczQ0EwMDMKKzoxMEZERDAwMEYwNzVGNERERjdEMkMzNDgxNzdENjY1QTNEODhDNzk5QTAKKzoxMEZERTAwMEQ5NDYzRkZGRDU2MzM5NUQzQzM4OTZGMzlGQ0MzNzgwQzkKKzoxMEZERjAwMDNFN0E4MUJCQTQ4RjY4RUY5QkY2MDIwQTQ0QTAyQjU5ODAKKzoxMEZFMDAwMDZFNEU2MDEzRTg3RTc2QjU3RDc2QTQzQ0E3RjM4MjdGQzQKKzoxMEZFMTAwMDQ0MURERkM5REMzMTIzNDNGNEQ2RTQzNEQzNUI5MEUyRTQKKzoxMEZFMjAwMEJCRTdFQjZGREI4RkYyRjJCQkQzMUIyM0ZCMzA1OEFEOEMKKzoxMEZFMzAwMDkzQkMwRTAyQkQyMTNGNTc2QjM5QkRBOTU2N0UzRkIzMUYKKzoxMEZFNDAwMEU2NERFRTFGRDk4MUY0ODVGOTcwNDg2RkYwRUIzNDFGNTEKKzoxMEZFNTAwMEFGQTc5QUU4QURDOTRDNkY0RTIzQkQwNTkxREU2MEJDREIKKzoxMEZFNjAwMDI0MUZENzJGRTJBQkRBQkY1NzdBMUIzOUY2QkJEMURCQTEKKzoxMEZFNzAwMEJGOEYwRjUyNUU0MzY3NTZERDAwODRDRjY2RjEzREJDRjUKKzoxMEZFODAwMDRCQTVDMzM3QzdEQUI5M0MxOEFFOTM1RkEwNTk3Q0ZGQzYKKzoxMEZFOTAwMDEwNThDQzA2RkNDRUNBQjQ0MThERDY2NDgwREY4Qzk0NTkKKzoxMEZFQTAwMDdDRkEwRUMxNkQ2M0ZCMEIzQTM5RTQ0NDdGNERFMjI0Q0EKKzoxMEZFQjAwMDdEREE1OEE0QUZFQkNFRDBGREM2N0UxNjRFQkZCNTYzM0IKKzoxMEZFQzAwMEJCQUE5MEZFMzJENjc0Q0M5Qzg2NzRCNzUyMjUzOTY5OTEKKzoxMEZFRDAwMERFRDc4QjEzMzhERDM1Mjk3QzVFMzhCOTAxRTE3MUJEODEKKzoxMEZFRTAwMEI5NjMzOTNFQkE1NzM2MjkwRUQ0QzdFNzMzMkQyNzhCNkQKKzoxMEZFRjAwMEJFMkI0M0RGQkJGOTk3RTZGRjc0RTFCODJGNEVFMERGN0UKKzoxMEZGMDAwMDczNzEzN0JFOTdFNEU1RkVCNTM0QjRERkU4NEE3MzQxNTgKKzoxMEZGMTAwMDRGN0E4NDlGNzY1QjdGMDMzRDJGQzQ3RDQ0QTNFNzBCMUMKKzoxMEZGMjAwMEYxOEZFMDE4NDVDMDg1NTExRUIwNTdEQ0RGOTQ3MTkxMDgKKzoxMEZGMzAwMEE4RjQ2Q0YyRTM0NkY1MUYwRThGRkM1RENBQzlFM0Y5MjUKKzoxMEZGNDAwMEJDNERDMkZGNkJENkY3RTRGRTBGNEZGMkZFNkMyQzhDNUIKKzoxMEZGNTAwMEEzMzg1RkU1N0VFMDdEQ0M4REVCOTQ3MUIzRUUzQzIzNUUKKzoxMEZGNjAwMEE5MUZGQTk4QkYwOUY1NkQyQkE4MzJGREI5QkE4MUUzMzQKKzoxMEZGNzAwMDc1RTcxRjA5M0Q3MTU5QTk3NzFEOEVCQjlEQjlGN0EzODAKKzoxMEZGODAwMDdDNzM2QTNDNUZFMUY5NDlGQTdBODJFN0I3RDQwMzRCQTQKKzoxMEZGOTAwMDRBRjU3QjcxREM2ODc4QjU2QzlBRkU0MDZGRUZEOTU3RjMKKzoxMEZGQTAwMDMwQ0FBODUwNUM2QkQyNEMyQkU3MEJGNThBRTAwM0NFMkQKKzoxMEZGQjAwMEI1NzZBODZGNEUwMjdFRTY0NkJEOURFRkRCMDU3Q0MzOUQKKzoxMEZGQzAwMDRENzY4NkQxOEU5ODhBQ0U0OEU0MUJDODQ3MDhCOEZBODkKKzoxMEZGRDAwMDBDQ0NBQjRDMTRFMzg3RTQ3NUYwMjBFQUE1NDE4MEVEMkUKKzoxMEZGRTAwMEJERjAyQUQxQzdFNTc1RDM5QjlDQUZEODgxQUY1MDVDREIKKzoxMEZGRjAwMEJBODREQjA5RjI1RTUwN0M5RTQ2RjY5N0FBRjc2RTNGMDQKKzowMjAwMDAwMjMwMDBDQworOjEwMDAwMDAwNTg0REY2RkQ5RUIxQzI3RTI4NjA0NTA4Qjc0QzhCRkI2QgorOjEwMDAxMDAwQkUzMUYwQkNGMEMxMjk4N0M3QzBFM0UyNkQ4QkZCQTIwMworOjEwMDAyMDAwMzgxREJEN0Q0RDM5N0VFRjZCRDkxM0E3QjZBMzlGNzRFNAorOjEwMDAzMDAwQ0M3RkM0MzBGMTVEMzVDQTMzRjgzQkNBMTkzQTk3RjMyNworOjEwMDA0MDAwRkI1OEI1Q0Y4QUZDMkEzMjFFQUYxOUNGRTU5RjhDQjM3RgorOjEwMDA1MDAwRjY4MkM3RUYxMzFFOEIzOEU3MjVFMEIxRjMwMjc4N0NGOAorOjEwMDA2MDAwMUNGMTM1MDIxRTlGRjg4RTc4RkMwOUY2QkYxNzBGMDFCMAorOjEwMDA3MDAwRDYxRDNCNERGRkI0MzdCQzlEM0E1NUZGQkMzNzdFMUFBOQorOjEwMDA4MDAwMTYzRkUwRjk0M0FDOTZFQzY3MTlCRkVDMDE1Nzk0QUYwQgorOjEwMDA5MDAwMzlCREY4QTVENkVEODg0NTdCQjZBOTc2QzdFQkY4REQ2NgorOjEwMDBBMDAwQzdBNjdBNkU2Nzc3MjY2ODhFMTJCNDZGREU1NUU5N0IzNQorOjEwMDBCMDAwNTZEMUZBQTNEREVEMDM2NkI5NkEzQ0NGOEYzRUIwMzI2QworOjEwMDBDMDAwMjYzMDExQzY0OTc3NzI3OTlCRUVENDE5RTY4QjVCNURCOQorOjEwMDBEMDAwNDE5QjM3MDFGNTM1MEY0M0JEQ0Q5RTYyNjFCRTMwN0YzOAorOjEwMDBFMDAwQ0M0OERCMjE5MkNCOUQyMEM3OTEzRTgwM0UzOUJEMjU3NworOjEwMDBGMDAwRjE3MUE0N0M5RUI4RjIzRThDRTRCMEYxNURDMEZCQzIwRAorOjEwMDEwMDAwRThFNEY1QkQyNUU0ODc0QjI4N0U2RTA1RjY1M0FCRUQ5QworOjEwMDExMDAwNkVDNEVGODk3RjA1QjkxOTM2Q0YyNEQwNDRDMkVCNTc5RQorOjEwMDEyMDAwMzkwNjE4QzY5OUUyQ0EzMkJDOUY5NkY2MDNDM0ZCQUJFOAorOjEwMDEzMDAwMDE1RkVDMTRDN0U2RjcwMkE1NUUzM0REOUQ2RjY4OTc5QgorOjEwMDE0MDAwMjRFMjFDM0ZDQzFENjMxOENGQUE3RTc1RUY2OEE0N0YwNAorOjEwMDE1MDAwQTE0NzhDODM3RkY0NUQ1RTkzQkU2MEQ2MjdDQ0ZBQzM0MworOjEwMDE2MDAwRTgyQjhERjc1RDQ2NTg0NTFFOUE5NUU3NDc2QzY2MEU1RAorOjEwMDE3MDAwRkEyRTA1RjA0MUZBRUU0MTREMjg0RjgwRTg2NDg0M0RBNworOjEwMDE4MDAwQjhFMzZFRjRBQkNDNzE2ODNFNzhENkJDRjdFQUI0Rjk0QworOjEwMDE5MDAwNDUyMUZGRDlFNjdBRUVGNzZCREFFM0Q4OEVGNEIwNTU1NQorOjEwMDFBMDAwRDBBNUE0QUZCQzg0RTM3MzE4Qzk3NTNCNDM3OTZDQTY5MgorOjEwMDFCMDAwNTc5OUVGMjRGRDA1RDI5RkEwRDQ3MjNGQzNEOTA5NTlBNgorOjEwMDFDMDAwM0NFRjQ4RjA5RkNENTVEQ0ZFN0Q0ODA5QzQyQTQzMzhGQQorOjEwMDFEMDAwNURCQTkzNDNERkE3NEI2MzhBNkYzQUE3NkYzRDU5OTQ4QgorOjEwMDFFMDAwQUFDODQ3OTU3OUFGMzgwRURBRDk2OTdDM0VGNjFBQ0Y5RQorOjEwMDFGMDAwOUI2Q0ZDNjdFQ0VGNjJCRTQxQzI5RjkxOTExQ0YyNTM3NQorOjEwMDIwMDAwNjA3RUMyQ0RCQzlGNkZCQUU4Mzc1OEU0NUJGNkUxRUI4NQorOjEwMDIxMDAwMEY0QzExRjM4RDgwNTJBREQzODU3RkRBNEI2NTBDQzY0MAorOjEwMDIyMDAwQzNBMUNDNTZCNDM4RjQ3RjBDNTEzRDE0Njg0OTE0RjE4NQorOjEwMDIzMDAwRjU3NDExNEY4RjU3MDI5Qzc5N0M0QjNFMzIxMkQ4MjhBRgorOjEwMDI0MDAwRTYyNUIwNjRGRTdEOTFEMjVGMzg5OTRBRjQ2MURGODE4MgorOjEwMDI1MDAwRjJFOEFFNjNEQTNCQzVGMEJDMzlFMUM3NkY0RDg0RTcyNQorOjEwMDI2MDAwMkRFRkFBMUFGQTQ5RUZDQUYwN0Q4MDc0NkQwNTY0RjA4QgorOjEwMDI3MDAwOTE1RkNCMzMxRkNGNERBRDcwQjhBNjQxM0ZENUI3QkQxMQorOjEwMDI4MDAwMTFFM0JCMjNFREZFRkQ3NDlFQUI2Mzg4REU4M0QwMEZDQworOjEwMDI5MDAwRjE2MTZCMDJEMDI5RTIyQjdBQkE0Njg1RjI4MTY0MUNBNworOjEwMDJBMDAwMjMzODQ2NzNBMDFDMEQ2MjNCRUU2RjM2RjgzRjIzRTQwMworOjEwMDJCMDAwOUI5MEJGRDQyQUVBQ0RDRTFEQTRCRkFGNERCMUUzMTdBQQorOjEwMDJDMDAwNTMzMUJGMjdCMzFFRjFCMjVGMUNCRjdGQ0I3OERDNjAxOAorOjEwMDJEMDAwMzBGRTEyOTY2RjZGNzc0NUY2NkI4MkJFNDY3MDA4MzYxOQorOjEwMDJFMDAwMkU0REVCNERFRjhBMUE0NzcxNUEwMkY2QzQ4QjhGQTMzRAorOjEwMDJGMDAwQUNCOUYxM0E3RjIwNkM5RDcyREY2QjlEM0I5NDA1RUNBRAorOjEwMDMwMDAwNTJFNjY3QzYzODRBMkREMzYzNDc0NDg4QTMwNEZEMEFFMgorOjEwMDMxMDAwQUU3MzcwMkQ4RkIzMEMxNkZFRkE2RjFCNDdBOTlDQzBFRAorOjEwMDMyMDAwRjVDNzRCOERBM0M4RkQ1RTIzN0U5RjAxODgyREVFMTk3NgorOjEwMDMzMDAwNTMzQzgxQ0VDQjEyNUE1RjE4RkMxRTI3N0U0NEI4MjE1NQorOjEwMDM0MDAwNTAwNEVBM0YxMkY1Qjc3Njc3RkNFOTQ5RjhGNUNENUQ0MAorOjEwMDM1MDAwMkZFRkM2NTJFQTcxMzNDNUZCNkI4NzdEQjkwRjczQjdCOAorOjEwMDM2MDAwNjZBRTVCMjFFMjU4QzZGOEMzMzU2MEQ1ODVGQkY5RjE2RQorOjEwMDM3MDAwN0IwMUUxRjU5OUE2RjU5NDVBOEQ3MTgyQzk0RTYzRkIxNAorOjEwMDM4MDAwQTkyOUM2Rjc2NTgzNjI3QTlDMUJGQUU1NjlCRjRBQ0Y0MworOjEwMDM5MDAwRkRERTE1N0YwRkUzREY5QjBBM0IwN0Y1QzI3NTA3RTYxRAorOjEwMDNBMDAwQ0Q2MURDQzdERDEzNEZDMkUzMDA5RURGNTg1OTcyMTFFNworOjEwMDNCMDAwRTI4Qjg1RjREMkFEQkVBNUY3NTcwMkZEQUMwNTM5Q0E3NAorOjEwMDNDMDAwNzlCMURCNDA3RkExQjg0Nzk5OEVGODI0RkRGREQxRThEMworOjEwMDNEMDAwRTlCODMzOUJGQ0ZGODNFQkY3Qjc0RkVFQ0JCQUUzMDBGMgorOjEwMDNFMDAwRjdDNDc5MURFM0YwN0I0MUNFNzMwQUVBMjE4M0VCNUYwQQorOjEwMDNGMDAwQTFGN0Q3Q0QyOUVFMTU4RjcyRUEwRkI0NEYwRUZCOEUwMQorOjEwMDQwMDAwNjA4RUQ1NjM0MUZCMzlBN0ZFNTU3QTFFNTU5RkVGQzkxMworOjEwMDQxMDAwNDcyODZGMkQ0N0UwODVDQzBCREM4QTc5ODEwMEY3OUM1QgorOjEwMDQyMDAwNUFGMTdERTBCNkRFRjNERkE0M0M2QzBFQ0JFRkEzNjRBMworOjEwMDQzMDAwMDZCN0MyQzJDNzk3NzJBRjg3M0Y5RDcxQkZBRjlDQUY2RgorOjEwMDQ0MDAwM0IyRkQwMzQ2RkI3RkM3MzcxRjlGN0ZDMjRBRjM2QUU5NQorOjEwMDQ1MDAwMzhFQzVFODZCOEM3MDFGQjhFOTgwNzNBNUFGOEIzN0IzMgorOjEwMDQ2MDAwQzk2M0UzNzY2N0M1NkIxRkUwRjg5NzZDNzc0NjE5NzcyOQorOjEwMDQ3MDAwNjI2NjMwRTIzREE5QTlDMjZGRDUxOTFCQ0M0MEJGNDFDRAorOjEwMDQ4MDAwNjc5NEJGOUJGMEQwOTRBOTNGMUNENzhCQkU4Qjc5QjNFOAorOjEwMDQ5MDAwMDhDQjY4RUJGQ0I2NzlCMzc1MjJERTI0RTNBRDMyN0Y3RQorOjEwMDRBMDAwNTZFNkM1NUUyODdGRjZCQkZBRTE1NzBBN0Y0MEU5Mzg3OQorOjEwMDRCMDAwMTYzMTBFNjE1RUVGNkRDMjNGOUU1NUVBNTk4MTc4MTE4QgorOjEwMDRDMDAwMkRGRTIwREI3RjMwQzAxRUQxMkY3RTY0NDJFNEVGMEU3NAorOjEwMDREMDAwQzhGQzUwNTg2RjRBQjgxRDI0RkJDOUJDN0NGMzc4NjAzNworOjEwMDRFMDAwMTdBRDE5MTdFNjBGRjQzNkU2OTBCRjJGQ0NERTkyRjk2MAorOjEwMDRGMDAwQjA0NDFGOUI4NTFGQTI5QjBFQ0M3QUExODg4Nzk4RjVEQworOjEwMDUwMDAwNDIxOTFGNTFBQUI4N0YwMkU4QTMwREU3NDVCRDBCRjNCRQorOjEwMDUxMDAwRDJBNTlEMjdGMzQ5NjVERTI4RTY4NTUyM0NFQTVCRUFEMQorOjEwMDUyMDAwNTVERkJCM0RENTM4ODVGMkJBOUE1Q0E1QUY3RDE3N0IwOAorOjEwMDUzMDAwRUFERjI3MThFRDI5QUY5M0ZCMURCQzY4NEYwREVGNjk2QgorOjEwMDU0MDAwNEYxNTk1N0E1RjQ0Nzg5OUVEQUFBMzNGRkI4NEYyNjMzNworOjEwMDU1MDAwQzEwRUREMzdFRUZCRTAxMzI2RkZENERDMzExQ0JGQTU1NgorOjEwMDU2MDAwOUM5NkZFQjRGRDQzMkQwNkJGRUI1NDc1RDU3RUNBMTc4RAorOjEwMDU3MDAwQUZFNUZFOTY3NEJEOURFQzM0QkJEM0VFNDY3RjhCNzUyNAorOjEwMDU4MDAwMzJBNzIzNUIxRUYzRUIzQ0NFNEJGRTE1OTk1Nzk2RUMzRQorOjEwMDU5MDAwNUMxMkYxQkVBOUI0MTM4M0QyNEVGNEYxRkJBOTlENkY5NgorOjEwMDVBMDAwRjJCODZEM0NGQTVCQjA2MTE5OTc2QkQyREY2MjRCMTEwOAorOjEwMDVCMDAwRkUxNjUzM0U3NkJDQzlCRjYyRjZCNzlDMUUyN0ZDQjYzQQorOjEwMDVDMDAwQzJERkYyODhFMkJFMUI0OUZENTc1QkE2RkMwRTQxRjE3QgorOjEwMDVEMDAwNkYwRjJGOEU0NzUzRkY3OUZGOUExRjBBN0ZDQjgzNEVGMQorOjEwMDVFMDAwNThERkRFMEY4Q0ZFMTY3M0ZDMkI0MkRDOEI5QzU3ODM4RQorOjEwMDVGMDAwQzZGRjhFRTI2RTEyQkU5MjZFQTUzRjJCQkQ5RTdGQkZFMAorOjEwMDYwMDAwNjlBQUJBNUI0MUZFQjJEOUM5RTFBQkEyM0YyQjI1RTQ4RQorOjEwMDYxMDAwQ0Y1MjlFRkU1M0I3NUY4QUVFRTNGNjg4OTNEN0JEOEUyNgorOjEwMDYyMDAwRUJCNDAyQzM1OTFGQzlCRjI1RTA2QThFNDcyNUQ2OEI5QworOjEwMDYzMDAwN0JDMERGOTMzRjJCNzlCQzExQkUwNTBGMTZERTg3REYzMQorOjEwMDY0MDAwMzUyRURBNTY3RTE4Q0I1MURCNkZFQjNCMTdDQTkyMjc1QgorOjEwMDY1MDAwRUUyQkM3RjIyRkFGMDdCMzUwRUYzNEZCQjExNDA0N0U3QgorOjEwMDY2MDAwNzE0RkY4OUFFMTI4RjFENDVCMkJGMUQ0NjkyN0JBQUQyOAorOjEwMDY3MDAwRTI3MDM0QzMyOTU1RTc3ODlBMDM3ODBBMkE0MjM3RkU5NAorOjEwMDY4MDAwNzUyNjcxRkE0QzlGQUNCRDg2RkVCNUMxNzk1NjE2MDkyOAorOjEwMDY5MDAwOEZBREY1RkM3QjU5MTI4RTVCMDUxQzkzNkI5NzkwOUY3OQorOjEwMDZBMDAwRDA4Q0E3ODNEQjJFMEQzRkM3OUFFMEY3RUM5NkMyQkIzOAorOjEwMDZCMDAwMTE2RUNGM0Q1Q0ZFM0IyQzdGRURCRjJEMUVFMUI2RTdGQQorOjEwMDZDMDAwRjFGQjdFMjhFMDM3ODBCRUE3NkI4MkRGMDNGODExRTlEQgorOjEwMDZEMDAwN0UzREUxMzc1MUUzRjZGNUU3QTVERUIyRjEwMERGQUI5MQorOjEwMDZFMDAwODE0M0EwM0Y2NDQ3NEI4MUMzMTgwNzMyRjJEM0Q0RUY1NAorOjEwMDZGMDAwQzkzRjE1RUNFNkE3RUNFRDlDNEJFMEE3MUY5QkZDNTMxNAorOjEwMDcwMDAwQTkzRTRFMzdBOUJFNjM0NDlGRTk0MDlGQjFFOEFGQUExNgorOjEwMDcxMDAwRTU3QTI0ODg3RDdGQkM4MjM2MzdFN0FGNTJBRTIxQ0JBNQorOjEwMDcyMDAwQjE4MEYwRDlFQUUyNzFFNzA4N0VDQTAwN0RFRkQ3QzQ1NAorOjEwMDczMDAwODdEMTgxMTM4RTc3MjA1N0VCMTA3RTUyREU2REFERTVBOQorOjEwMDc0MDAwNzFCNERCQTY3ODU2OENFRjE3OEFBQjNEM0Y0OUJGNkQ3RAorOjEwMDc1MDAwM0NERDVGRjhENkZFQzc3RkM2RkVEMkZGMDg3ODRBRkJCNQorOjEwMDc2MDAwNTcwMURGRjFGQkU2NTc4MTNDNDFGQkRGNUExQkI0QTE4NworOjEwMDc3MDAwNUNBOUE5QkY1NUYxNDJEOUU3NEE0RTNGQTk2OTVFODZGNworOjEwMDc4MDAwNzFGRTlFRkVCQTYwMDJFQUVEMTM4Nzc2RTNDMzdBOUM5RgorOjEwMDc5MDAwNDdFMkMzQzg5NUU3RUY0MzNGNTczNDdDNDg4RjkyQUY5OQorOjEwMDdBMDAwNzQ2MTdDMjgzNUM4RDdDRERERjg1MEI3RUVCMjk0OEI5NAorOjEwMDdCMDAwQzc4N0I4MDlGQ0ZCMTFEREY4MjBFODNGQjUzNkY4MjAwMworOjEwMDdDMDAwRDJBRjU1RTA4M0Q1MDU3QzBDRTBBMTIyMUVFNDg1RTI4MgorOjEwMDdEMDAwOUU5MjFFODIyMkZGQzAwQzlGQTA2RjQ4OTQzQzg0MTVGRAorOjEwMDdFMDAwNEE0OTJGRUJCQkU4RkMwMzExMEY2RDEyRjE1MDZGM0QyRQorOjEwMDdGMDAwQ0Y5N0VENUMxOTMzRDU5ODdGQTBEMUJBQTczOUVCOTQ4OAorOjEwMDgwMDAwRjAzQ0ZFMDg3OUIyMkZFM0Y5QzkzOEE3OEM2QjdFNUUwNQorOjEwMDgxMDAwRUE3OTA1OUY0RkNDRTVFNzFDOEMxRTY3MEFFMEZENTY4MAorOjEwMDgyMDAwNDAzRjk3MDlDRkRGMjIzQzk3RjcwRjg0MUU3N0RCMTRGOAorOjEwMDgzMDAwRkQ2RDFDNzc4NERENEY3OUNFQTBFRjFEQzY3NjVCRjc4QQorOjEwMDg0MDAwM0VDOUJGQjcyQkZDOTAzMjJGRUYzQkZCQ0QxMkVEN0VBNAorOjEwMDg1MDAwQkMyRjI5RkQ2NjlCMTNFQzNCRjBCQ0U3QjNFMDE0RkExOAorOjEwMDg2MDAwQ0UyRkM2MjlEMEVGQjQzMTg2RjIxQTE3MkE2MDc4MjMyQQorOjEwMDg3MDAwNUZCQ0NBRkJEMTc4OEFFQjc5MjgxRkQ3NUJFMTcwQTFGNgorOjEwMDg4MDAwOUVERjlDMzQzNTBERjk0NkNENUE5NUU0N0EzNEZCNDYwQgorOjEwMDg5MDAwRDI1QjBERjAxQkEyQjc3QUNFNkY1MjAxQkYwOERGN0M4RQorOjEwMDhBMDAwMEFGMTlCNzRFMDM3OUNGRkU4MENGNTNBMkJEMjlEQjMxQworOjEwMDhCMDAwMjdCRkQ5REMwQkZDMkY5MkVGN0M4MzcwOEZDMDc3OTQxRAorOjEwMDhDMDAwMDlDNTA2QkU2Mzk5RjAxREY4Q0U0RkM2MzM2RTFGOEE2OAorOjEwMDhEMDAwRkQ2MzNDODBGNjhGRjQxNUJFN0ZCMzNFREJCRDZGMjMxNgorOjEwMDhFMDAwN0Q0OUJBRkI1RjQwNjcyMzI3NDRBNkIzRkMwOURGOEQyRgorOjEwMDhGMDAwQ0VDNjYyRkYwODc0NzZFNTA0MjM5REU5MTNGRTY3RDIzNQorOjEwMDkwMDAwNTkwNUUxREIwNUU4RUNBM0YxNENEOEI3RDcxQUY0OEExNgorOjEwMDkxMDAwQ0JENUY2NzMzOTM4RkZGRkU3RkNFRDgzNTc3MjNCRkUwQQorOjEwMDkyMDAwNDJGOURCRjg3MzMxRkU1MzczM0VGNzNGRkNBOUZGNkJDRQorOjEwMDkzMDAwRkRBOUNGNEVGODFFRkNBOUFFNzE2RUMyM0ZCMzVGRjVBNAorOjEwMDk0MDAwOTNEMUZBQkUwOUJEQzQ5NTI1OUZCNjRBM0UwREZDMTg0OQorOjEwMDk1MDAwNzk2RjBERjAzM0U0Q0ZBOTU1NUQ5RjNFQ0ZFRDREMkQ1RQorOjEwMDk2MDAwREU0REZFODZENzcxQkM3NEMxQUZDRDdDMTlGNENFMzc5NQorOjEwMDk3MDAwMjZGQzFERkQwRDdGMkZCRkUxNEFFMTY3QkREMDdERkI0OQorOjEwMDk4MDAwOTUwMkNFRDFFRUREMzcwOUZCQkUwOUM2QzA3QjdBNUI4RQorOjEwMDk5MDAwNTdEQUZEQ0RCMDYwOEZEMEFCNDdENDVFNzczNTEyRDkzMgorOjEwMDlBMDAwM0JDQkVDNzFDMTVFRUMyNkY5NzcyNDVBMUJCQzJGOUUyMQorOjEwMDlCMDAwQ0MwOURGMUY4QjI4QjdCQUY3NjdEMjkzQzNFRDI2RjdCMAorOjEwMDlDMDAwMjVEODREMzMyNjFBRjU2NDZCMkRCNzczQUQyMEVGMjg2QgorOjEwMDlEMDAwQUVBRjk3MDQ5MDVGQTdGQjk0NzY0QzBERjZBNkQ0Mjk5MgorOjEwMDlFMDAwMjgwNzUzNkIzRDk0MEY3RkE5NzE3RDMzMUU0NThCRjMxMAorOjEwMDlGMDAwN0ZERjcxN0Q3M0RFQzBGRjk0Mzg3RkQxNDQ2MUNGOUI3MAorOjEwMEEwMDAwRTJGQ0QyRkY2QThFQ0I4RkIwQjc5NjkxN0NBREI2RTA5OAorOjEwMEExMDAwNUZDMDYwQ0Q3QjNGREU3MTM3OUVGNzFDMDdEREQzMzBCMgorOjEwMEEyMDAwRTcwMzQ0OEJEQjhGNDhCNjA3RTNCM0EzQzdFRkE1QkY0QgorOjEwMEEzMDAwRTAxMTVCRERFQjY4ODczRkQyNjhBMUYzMzVFNzBERTQ5OQorOjEwMEE0MDAwMjVGMEZDRjFCMzEzNzY2REEzRkMxRkE5MEY1NzA5M0VFNworOjEwMEE1MDAwNTNBRkQ4RTlCQjhFNTU3RUUyMzM1RTdENTcyM0M2OTNGNAorOjEwMEE2MDAwNTM5REFDMURGNUFDQjg4OTZFQzIzRjM1NEQyNzNFNjMzMgorOjEwMEE3MDAwQURGMjEyNUVDOUY4NDQ0RDI2QkYzNzE3MkJGMDRCMUQ1RgorOjEwMEE4MDAwNUFGNzE2OEU5Rjc0NDhENTMwQkVCRDExOUIwMkNGNDhEMQorOjEwMEE5MDAwNDA1OTg5N0FDNDE4MEJFNTQ1QjQyOTc1RTRGNzY4NTVCRgorOjEwMEFBMDAwRENGNEY3M0Y5MkYyNUNBNDFGM0Q5NUE0RkQ3RTM2QUVDOAorOjEwMEFCMDAwQkYxRkZGM0IyNTA3QTYyRjQ5NDMzRUI4QjZCMTMxMERGNgorOjEwMEFDMDAwRUYyN0RFMzQ5MUYzODc3QkE3OUZBRUE2Mzg3QTJFRTgxNgorOjEwMEFEMDAwN0YwQTk1ODZCRjY3MkJDQjFEQkEyMkZFREU5MjlGRjI1RQorOjEwMEFFMDAwMTE2MURENUJBOERGNTAzQkY5RDk1NEZEODFEQjkwMEYyQworOjEwMEFGMDAwQTg5NzREMjVCQzZFNTU1QzczMTZFMDc5RTVEODQ5OEZGMworOjEwMEIwMDAwNjlDRTE5MzU3QjExRUM2QjVEM0Y0RjU5MTY5RTZCRDI0OAorOjEwMEIxMDAwNTBEQTY3NzM1MkZGNDRENDQ3RDcwREM4QTZGOTVCMTQ2NworOjEwMEIyMDAwNkY1OTE2RjYxQjYwMjFCQTU2NDU3QzdFNURDRTkyRDc3MgorOjEwMEIzMDAwRjBFRjgwMzRBNTVCMThERTNCNjhDQjM5REQ4MkVEREE1RgorOjEwMEI0MDAwQzZGMDNGODI2MzVFQUZFQTMyREU5M0MyMEYxRjIxRkYyMQorOjEwMEI1MDAwNTZEMzc4NUM1QzE1NzE3MUQ1MTQ1NzJFRDUxNTk5RkY1NQorOjEwMEI2MDAwNDg3MTg3NThDMUI3NkE3MjU2Q0ZBNkVGMjczOEVEMkU2NQorOjEwMEI3MDAwNDRCMkE2ODQ2MDI1RTFDNzRBMUJDMzM4MURCM0I2MUEyOAorOjEwMEI4MDAwRjRCNEJCMUI4Q0RGN0Y3MUU2MTlEN0QzRDI3RDNGMjEzNAorOjEwMEI5MDAwQ0I4QjdDODZGRTA2MkNERDVGNDhGMjIyN0UyMEJGRTVGMworOjEwMEJBMDAwNDk3RkYxQkMxRTJCRUEwMTlCRDcxN0UxN0NGRTUxRkU2OQorOjEwMEJCMDAwQTNGQzQ3MTkyQUZGMkYwRDIyNDgzQzAwODAwMDAwMDBBQgorOjEwMEJDMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJDNTVCMEQ3MDFDRjVCQQorOjEwMEJEMDAwNzU3RjdCQkJCNzc3Mjc5RDRFN0JEMkM5M0U4MTZDNTYxNAorOjEwMEJFMDAwQjY0NDY0MTBGMjVBQjY4NDk0RDg2ODRGREYzMjJFQkRGMgorOjEwMEJGMDAwMzg3Qzg4QzQ3NkNFRDhCOENFMzQ5MzJBNEU0OUVDODQ1QgorOjEwMEMwMDAwNTY2N0VCNjRDOTVGQjJBNDE0RTQ0QzNBRDNCMzQ5MzJEQgorOjEwMEMxMDAwNkRGMDgwNDI2NjFBRjMzOTY3NzAwODIxRDAyODgxMTA4MAorOjEwMEMyMDAwMzI5MzA0NjE4ODVCNTI5QTMxMDEyN0EyNDM0QkRGN0JFOAorOjEwMEMzMDAwRkY1RERERURFQUU0QUZCODEzMzFDQ0RGRkZEREZGRkU5MQorOjEwMEM0MDAwM0ZERUU3RUZCREY3M0YwMEYwQzAwMjAwRDkwRjAwM0FFQQorOjEwMEM1MDAwQzBBNjIyNEYxMjIyMDBFN0FBMjAwRDk1RDhGNzRFOTc4MgorOjEwMEM2MDAwNjk0MTgwMEZFOUFGMjVEQjFFRTgwN0M4RjhCMkZENjBENworOjEwMEM3MDAwQUQwQTY2MERGMERGODdBMjcxQ0QzQjZFNUFGM0MyOUZCRAorOjEwMEM4MDAwNzNERUUxNkFCNTM3MUQ5QzNCQUYzREFFRDU5NDAwMUFDQgorOjEwMEM5MDAwRjJBRTAzRDIyNUFENzNFNjY3M0E4RTRGRkU0Qzg2NkFGQworOjEwMENBMDAwN0RFRTdBRUVFRkVERUYzNjE1QUQyRjg2REFGRkJGRjE3MAorOjEwMENCMDAwRjNEMTc1QTlFOTAxMjgxMzdENjhDNDczNTNCQjQ0NzQ0QgorOjEwMENDMDAwNzVBNDgzMDI4MjBFMDM5RDhERTkwQ0ZFNzM0MjRBMENDQgorOjEwMENEMDAwNTdEMkY5QzIxRUUzOUIzMDk3MEU3NjJCNkI3M0Y4OTdCMQorOjEwMENFMDAwOUQ1RjE2RDM0N0VDRjk3MTBCRjJDRTgwMTkwOEQxMkIxQQorOjEwMENGMDAwRkMwRTY5QUZFMUI2M0Y0NDk2MjgxMTBGM0YwNzZCQkU2QgorOjEwMEQwMDAwMjhDMEIzMUZFMkZFOEU2N0Y5MDVEQTgyRUNCQ0YyMDY1QQorOjEwMEQxMDAwOTVDNzJGNTdGQjVFNkM1ODg1Q0Y1RTkxOEQ2RkVBRDlEMgorOjEwMEQyMDAwNzk3OTNGOTVDMDBCODBGRDVENjVGNkJENjJBREZCOTFBNQorOjEwMEQzMDAwMjMyQTY0RUNGMUY4RkYwOTMzQ0M3NDlBRDg3ODNGMjQ2NQorOjEwMEQ0MDAwOTBCRTNGREZGMDg5RTI0NDFFMzlCMERCNjU2OUU3RjcwQQorOjEwMEQ1MDAwNkZFMDlDQzA3NDgzRjQzN0YxREZBOTVGOEM0QUJDRjg2NAorOjEwMEQ2MDAwMDlGMTNDQjU0MjRCRUZDN0U3RkJBNUY0RkVFQjY4RENBRAorOjEwMEQ3MDAwREQ4MkJFMzYxRjBBMkQzRUUwNUZCNDBBRTlFOEI1RjgxMQorOjEwMEQ4MDAwRTQ3NTlGMEJGRjk0MDU0QzI3OEIzODM5N0M1OEMyNzM1MAorOjEwMEQ5MDAwNTREMUI5MDdFQ0Y5NzQyMzAzNDhBNzAzQ0JFQjU2RUMwNQorOjEwMERBMDAwRDdFOUZDQTNGRkYyNkREQ0M3OTFFMzdCREVGQTM2QkUyOAorOjEwMERCMDAwMEVENEQ2OEQzNEUxN0UwQTBDOEYyMTkzM0M3RkVBQzQ5OQorOjEwMERDMDAwMDk2NDE3MENENURFMzM0QUQzNkUxRDk1NEMwRERGRkIzRAorOjEwMEREMDAwQjVFMDMxOTlDRUU4OTc0QzlBNEYzOUJDOTBDRjEzRERFRQorOjEwMERFMDAwRUE5NDgzMDlDOTU4NTA0RUU3MUI5MzgwRjg1MjY4MzgzQgorOjEwMERGMDAwREZGQkY0OUNGM0UwRkY0Nzg4Q0YyQzlGMzlDRjkxNkU0NworOjEwMEUwMDAwNDhCRERFQzlEQUI5NzQ3RkM1OTI2NzA1QzcyN0VENzk5OQorOjEwMEUxMDAwOTEyRUUzNUVGRDE2QTJGM0Y4M0UxOTkyMzhFNUY4MkUwNgorOjEwMEUyMDAwNTQ4QUFCMDA3RTZCNEU3RTdBMzczMkZEOUU0MTJGRjNBMworOjEwMEUzMDAwNjEyMkE2QTYyNTFDM0Y1MUE0RERERTRCRkQzMjhGNzEzOQorOjEwMEU0MDAwOEM4OThBRkZFM0I5NDY5NzVEQ0JFN0IyRDdGQjZDOEIwMQorOjEwMEU1MDAwQ0VFQjhEQzUxNjk0OTMzRUUyQjhGMkY4MEQ3M0U1Q0Y1NAorOjEwMEU2MDAwQkRGRjRCOTVCRkVENjY4OTI1RUZBMzQwRjNDM0U0MkQ4RAorOjEwMEU3MDAwMUVEMjI3QkYzNUU2M0E3OUIyN0UwOUFERjc3MzE5ODRFMQorOjEwMEU4MDAwRENGNDQxQkM2ODJFN0QwNkM5MUU3QzI0MkIyN0FBMjVENAorOjEwMEU5MDAwNDc3QjIzRUI3RjRDRDNDRjI3Q0Y2QTdBQ0FBQ0FDQTM3NgorOjEwMEVBMDAwNzVBMDhGRThCRTJDRUFEQzlGM0RFRTczMTZCRjdDNjkwRgorOjEwMEVCMDAwQzg3ODQzRDQ2NjRDQThBMzc2Q0E5NEIwM0RCN0UxMEI3QQorOjEwMEVDMDAwREE1QTdERkU3NTdDOTAzMzZGMjVDRDA3N0M2RTJGMjQxQQorOjEwMEVEMDAwOTg1OEM0NTczMzg3QUY3QjBBRUJFRTI0QkUwQ0RFQUNDOAorOjEwMEVFMDAwMDJDQjlGOUJDRTE3RThBQjRBRTZBNDE0MjI3OUY4MDgwMAorOjEwMEVGMDAwQ0I0NzEyRTVBMzFBRTdGMTQ2OUQ3MjE4N0Y3MjE1NEM5NQorOjEwMEYwMDAwMDcwNTlGOTJGQ0JDREIyNDNFMjU1QUJDQjM3NkM4OUZFNAorOjEwMEYxMDAwNjMyRjQxREZGRDFCMTlFN0ZCNkFCN0FBRUZDNzdEN0U5MAorOjEwMEYyMDAwMzVCRUVEQkVEQjQ4Q0Y1RjkwMEQ4OURGRUI2QzBGRUY3OAorOjEwMEYzMDAwQjFENjgwRDEwOTk2ODc2MkNCRUZFQzNDNzFFRjZCQ0ZENQorOjEwMEY0MDAwMTM4RkJBRDVENzg5NkVBNEM3QjM3NDExRjZEOUY0MzcwNQorOjEwMEY1MDAwNjZENzNCREM3NDdBNzgyOUQyMjEzNTlDN0ZGRUJCNEE2OAorOjEwMEY2MDAwRjVDRjExRkQ2QzNBQ0YzN0VGQUNGRERFNzk3MkIyN0Q3MworOjEwMEY3MDAwNjVCNjNGNTI5MDA4QzRGMDlDMjM0MTAzOEQwMEJEM0ZFRAorOjEwMEY4MDAwQzVFRjYxMTVDQTY1RjlGQ0ZDNDQ4QUIyM0NCQzQ2RkY1QQorOjEwMEY5MDAwQzQ3MTNERURBNjE2QzNCRTdDMDJCN0JFMUNFRDYyOTFDNgorOjEwMEZBMDAwN0VDQjdBN0NENTExNzk3RDIzRDE3RjZCRDBBM0M5MzlEMworOjEwMEZCMDAwRkEzNTcwRDAwQjk5MjAxMTAyRDc0NUI5NUIwN0QzMUJDNgorOjEwMEZDMDAwRDdFMzM4QThGMkIyOUNDQjkxMTVGQzdDNEI1MTVDRjE3NQorOjEwMEZEMDAwNjA3QjZENkMwOUFGNjc3RkRGMDNGRkEwRUNDMEU3Q0JFMAorOjEwMEZFMDAwQkREQTJCMjQyN0E5ODg0NDNCQzJFNzQ4NDBEQ0ZBNUFFMworOjEwMEZGMDAwMDVDQzEwQjY1RDdBQ0M0RjdFQURGQjA5NUEwOEEwMjUxMgorOjEwMTAwMDAwM0MxRTIxQkY1NEY3RDg5MThBMDRFOTc1RDI5Q0FBNDFBRAorOjEwMTAxMDAwRkU4NDJENzY1REVGOUI4QUI3RTE3QzAzMkZDQUM2MUU0NgorOjEwMTAyMDAwRUM4NzgzREJENjAxQ0E5MUY0NzA5MEVEQzQwMERBNzlDNQorOjEwMTAzMDAwMUZGMjVEMDk3NkJFNDVDRkQ3OUMwNTY4Q0Y5MUE3OTY3NAorOjEwMTA0MDAwMTkzRkI0RTdEOEJEMThDRTlDREI2RkYzOTczQkM2Nzc0QQorOjEwMTA1MDAwNjg5NThFRjczMjk4NDYwNkU5RDQxNTVERTYxODU3RDRBMAorOjEwMTA2MDAwQjA0QUEzRkRGNkU4MkIxQ0NGNkZBRTY5NzY3QzBGRUQ3RQorOjEwMTA3MDAwQ0FFOTY5RUNBRkM2RkY4OEVGMzI4ODNFQkZBRjI0OUM1NworOjEwMTA4MDAwODBGRDlDRUYxNUM4RTlFM0ZCQjVCMUEyQzgxOTcyNEEwRgorOjEwMTA5MDAwMzdDMjhEQTQ0N0M4OTc2MzA3QzhGRUY0RkFEOTZGMEQwRAorOjEwMTBBMDAwNzhFMTg0NTQwQ0E0RkE0OUE4Mjc2MjlCRUNFRjI1NEIwNQorOjEwMTBCMDAwNUU5M0IxNEFFNjkzMTQ3Q0Y2N0Q5NkMzMjdBNjNEODRFMQorOjEwMTBDMDAwQjNFMDMxQTgyN0ZCRkE4RjlBN0VEMjgzNDNBRUE2MjlEQworOjEwMTBEMDAwRjFGQjI4MEFCQThFN0M0MjE4OTYwQ0Q0RjM3MzczNjkxQworOjEwMTBFMDAwMDlGOTM5MjlEOTgzRkQ0NTM4MkUyQTQ0MTE5RUEzNzE2NworOjEwMTBGMDAwN0VEOEZEMTUzMTBFMTZEMTM4MEQ5MjE1RDhENzBDMjg5MworOjEwMTEwMDAwMjBCRTU2RTAzQzlGMkRFMUVGOTIzREQ2NzdENzg4RUY4OQorOjEwMTExMDAwOTJDNTI1NjJGRUJBN0FGNkEzOTkwRTZDOEY4MjAxM0VDMworOjEwMTEyMDAwQjYzRjcxMDQ0RDY0NDVGQUI4QkQ4Njc2ODVDRjFGMDA4MQorOjEwMTEzMDAwQTM5RUZBRDUzMENENzYwQUQ5MkY1MTdGMjE0QzZBQzJCMQorOjEwMTE0MDAwQzg2Nzg0REQ5RTU2QzI2N0ZDQzJFRUU3RDM5N0FDREU2QgorOjEwMTE1MDAwMjg3MEM2RTYwNzBFQkVCREM1RkMxMkU5Q0RFRDc3MzY5OAorOjEwMTE2MDAwOUMxNzc3MjgzQjlGNzFFOEVEMjMzMTVERjhDMzlENURBNworOjEwMTE3MDAwQUMyN0NBQ0U2N0Y5RkQ0QkIxRjgxRTlBOEY0OEVGQUY4NgorOjEwMTE4MDAwOUY0QkVGM0EzNTAzNjRCRjUyMzEzMDkyMzg0NUVBRDE3NAorOjEwMTE5MDAwQjVEMUNEQzhERkU0QTM3RUEzMUFBRTFDM0YyRTk1MEZCOAorOjEwMTFBMDAwNjlEMDBBODhBRTcyREZFNUYyMDFEOENGMDc0RkY4OEYxOQorOjEwMTFCMDAwRUU2NzYxMzREOTRGRkUwOTdDRjlGNkU1RjBDNUNEMEYzNQorOjEwMTFDMDAwQjhCNzE0QTBGOUMyNzZGNEVCNTIyNjIwMkQ2NTdBOThCMAorOjEwMTFEMDAwRDFGQTJDRkRCMTlGNUM2NkQxQUJDNEUyODcyQ0RBOENDRQorOjEwMTFFMDAwNkMzRDU3NEFFNkU3MEJDRDU3NUE5MkU1Q0Y4NUY4MTI4QQorOjEwMTFGMDAwOERFM0ZCRkEyQzdGRTQzRTkzODk2N0ZCNjkxRjlDNjVCNgorOjEwMTIwMDAwN0NCQjQ0MzI5ODVGNEJFNUI4ODdGQTg1NTJDNjAyM0RGNQorOjEwMTIxMDAwNjlGNjlCMjFEMDk4M0Y1NzQxMUZCNzExRUZGNDY2QzY3RQorOjEwMTIyMDAwQzMzQjcxMjFDMkIzMUZBMDk3Q0Q4OUM3NTJDMTU2N0Y1RQorOjEwMTIzMDAwMjVEOUQ3MUFDNUYwNjBCRkI2QzgxMzRGMjMxREFGNTZDNgorOjEwMTI0MDAwMjA0M0U3MkI1NzIwNDlGNjFDOTEwMUNGOUY3QTE0QkQwQworOjEwMTI1MDAwMTVGQTk5MTRCQTY5MEY3REI3Q0I5RjRFNDlEOUY1RUJCMgorOjEwMTI2MDAwMkNCQkZERTNBMjZGNjlEM0I1NTkzQTlGMjZGQkI1NUM1MQorOjEwMTI3MDAwRDBDM0MzRjY2NzMyNDNERjQ3QkJDMTE4RDBFN0RBMzNDOAorOjEwMTI4MDAwMUM5Nzk0MkQzQjQ1RUQyNjdBRDFDQzc0NEI4NkIwMkYxQworOjEwMTI5MDAwMERGRkUwN0RDMjE5MzQ5RjgyRkRFRkM1MTJFRjkyM0YzMgorOjEwMTJBMDAwMjU5QzFFMkM2MUJCMzQ1RDQ4QzA3QTJFMkUzMDA5NTcxOAorOjEwMTJCMDAwNkNCNkQ2RTlCRDQ5NUYxQ0M3N0Q2RTFFRjZCRDRFRjMwOAorOjEwMTJDMDAwNDFDQUU3QzQwNUVFRUY3NTA5NzJCRkI3QkY5Qjk1MkIwNgorOjEwMTJEMDAwRjdGNzk3QTkwN0IwQjNFQ0EyNzA0MEVDRTFENUM1RDNGRQorOjEwMTJFMDAwNzk3MEZCMkNDRTI0M0QyOUNERkQ0RUYwNDk4RDI0MTg3QworOjEwMTJGMDAwNzdBOEE0MkZBNTE3OUVDN0VCQzIyRkY2M0M1RTE0NUNGRgorOjEwMTMwMDAwOUFDNzZCRTExN0RCNEY2RDgzQjM1RTY1QTlCNTRGQTQzOAorOjEwMTMxMDAwRDcxNkIwRkYyMjRDQ0Y0RDE2RkQzRTRERkUyQTQ0RjRBOQorOjEwMTMyMDAwQzQ0MDA1Q0ZCRDE1RTIyQUM5RUQ1RjIxODQyNjFDQkY0QworOjEwMTMzMDAwNjRERkQ2MTBFMzA1NjhENzg4M0U1MkU2NjNGMjg3RDdBQworOjEwMTM0MDAwNUYwMjFEMkQzQTZEQ0FCQ0U1RDVDOTJFRUQyQzgyMzc0MgorOjEwMTM1MDAwNzJFMzM3RUJGREJCMUIzRTIxRTI3NEJGQkZDQTlGMTM5NAorOjEwMTM2MDAwMUYxNjlFRjhBMDlGOENGQTlFQzJCRjdGQjEwNUI3M0VBNAorOjEwMTM3MDAwRjg5MjZDQzg5NUY0NUVFMEU2MDAwOEZGNUQ0ODdBOEE1MgorOjEwMTM4MDAwRkIyRTdDRTJDQ0ZGRDBGODQyMTdBRUE2OTkyMTY3NUUxNworOjEwMTM5MDAwNEZFMTQxQzZCMzg1MjE1NTY3OUNFRDkyMzMxQjQ3QzM4RQorOjEwMTNBMDAwMDcwMjA3MDcyREVBRTVDQzJCMTE1RUI2RTMxRTlFNTcxOAorOjEwMTNCMDAwOUFCQkVFMEQxNjNFQzc1N0IxMEYyRjAyQ0ZCQjcxM0E0NQorOjEwMTNDMDAwQ0NFMjczRjEzRTE4NTQ4NTlFNjA5Qzk5NzFDNEMxN0EzOQorOjEwMTNEMDAwNUUzREIzRjc2RDdGNTdBNkM2MkI4RERBM0NERjVCN0M5NQorOjEwMTNFMDAwQThBNTQwMUNFREMyQzIwQTQ4RUZDNkZEMEUwRkVGODg0QgorOjEwMTNGMDAwMTU2MjdGQUMwQzc0OEMzMDYxQThGMzhCMTJFMThERDYzMgorOjEwMTQwMDAwODgxMEE1NzA5M0MwODVCNDA0RDg3MTNDRkU4NUZGNDM1NQorOjEwMTQxMDAwREY1RjgzRUZCNzU1MDQwRERDMTkyQzdDMUI3MTMyQ0VENgorOjEwMTQyMDAwNzM3Nzg1REYzMEYxNDEwQUM0RkI2NDkzNDdDNDkzNDk2NQorOjEwMTQzMDAwNzg5OUYwRTg1NjhCM0ZERTI3MDRDRTY0REVBMDFFMUVBRQorOjEwMTQ0MDAwNkMxNUY4NkFFQjg5Q0ZBRTIzRkU4RTk0REM2QTY0NzA2QgorOjEwMTQ1MDAwREM1NkI0NEZBNTg0Qzc0NkJEOENFNzEwRDczOTcwQkZBMgorOjEwMTQ2MDAwQUYyOTA3MDdFMkZGNzcxRkYxM0FGQTVFMTc0RTNDRDAyQgorOjEwMTQ3MDAwOEEzODEwRTVEQkM2ODFGN0I3MDJFQjE5RUQ4QkZDQzlBMgorOjEwMTQ4MDAwOTU1QTA3ODIxMUI2QTczNzI4NTM5RTdDRjkzNzlCMUZDMAorOjEwMTQ5MDAwMzZGRTdFQjI0Q0QwRDlGQjlFQTAwQjA2Q0MzQkU4QjkwMQorOjEwMTRBMDAwRUYzRDExOEZBMTAxMEYzNjJDMjBFRjJGRThFNzZCNDBBNQorOjEwMTRCMDAwRkFEMEQzRjc4NDNGQzAyRjc5REYyNkZFNDdGQjc2RTNDRgorOjEwMTRDMDAwNjE5RjBCMEZCQkY3NkJGM0UxNjE5QjNFOEREMDQ4RjQzRQorOjEwMTREMDAwNDE3Q0NFMzhDMTNFOEZGQjFDNEY2MDdDREU4RTQyRjFEQQorOjEwMTRFMDAwNTRCRjlGREI0Q0JGQzZFREQzRkQ1MTZFNEZGNUVCRDAyMworOjEwMTRGMDAwOEUwMEVDRDlGRTFBNkU5RkVCMzdGOEY5RjNGRDREREM0OAorOjEwMTUwMDAwREE3NDk4NEIxRjkxRDdCQ0M2REFCMzUyM0IxNTI3M0YwQworOjEwMTUxMDAwN0E1NUJCODc1NTYxRUM1RTBGRDNFRDFDQ0EyNzI5NUY1NgorOjEwMTUyMDAwQzhBMERDMUI4RUVGRjZBNDI5QTRCN0UzOUY4NTk2QkM2OAorOjEwMTUzMDAwNUVFRjNCN0JEMjg3RTM0N0NBQzFEODgzREYyRjZDREFFQgorOjEwMTU0MDAwQzY3MkI2RTZBQzI3QUIyNzQwNzE0RTgxMjM0RjEwODM5RAorOjEwMTU1MDAwNTI0N0JGQ0Q3RkI1NjM3Qzg3QjZENEYxQkUyNDM2Q0Q2QworOjEwMTU2MDAwNzZBQTJCN0FCRDYzOUNDREU3N0ZBMjM4MEJGNzM3RDZERQorOjEwMTU3MDAwN0U1QTIzQkFGNkU4MkIxREUzOTQ3QjkxRkY3NTE0RkY4NgorOjEwMTU4MDAwN0NDQzMxMkZDOEVCMENCMkQzMjUxQjlDNzIxODcyRjFBNgorOjEwMTU5MDAwNTVERDdFRkUzOEM4RTZGM0RCQURDRTc4NjgzRUZFQkE5OAorOjEwMTVBMDAwRTVENUE2NkJDOTJDNUQ0NTVDOTlBMkI4MTJFOTVBQTI5MworOjEwMTVCMDAwMDlCQURBRTcxREIxQ0U2QkFGQUIzNDg5RjM1REU5Rjg1OAorOjEwMTVDMDAwMzI0NEYxNjU2NUJFRjhGMjREOEJDRTE3ODgyRkJCOUQ3NgorOjEwMTVEMDAwRjFBNTlCQUUxNzhBMkYxN0I0MzlFRENBQzVEMjczRDNDNAorOjEwMTVFMDAwNjI5MTc3MkI3OTQxRTZCODQ1RUVFRTYzM0Y1ODNBMjU5NAorOjEwMTVGMDAwMUI1RDY0MTIyRDVDNTY0NDM2MDBDNzZENkE1MEQzODQ1RgorOjEwMTYwMDAwMzNDNzYwM0E0QUZFRkNCMDg0NTQ0NTc5MkJBRDM1Q0FFNQorOjEwMTYxMDAwQzlDRTNDMTQzNjVFRTkyNURDRDgyM0YyODBDRkM0NkVGNworOjEwMTYyMDAwOEYxMkVFMThEQzdEMzQ4QUNFMEE5QURCM0M2Q0VGNDZEMgorOjEwMTYzMDAwNjM2NzM4N0ZBMUU4QzBGOTBCNkNDRDc0MUU3QzYyOEZBNAorOjEwMTY0MDAwQjdGMzhEODczN0FBNjkwOUM3MUZCNkYyOEQ4NzdCNjYwNgorOjEwMTY1MDAwRjM4RDVDREY5ODY4MTBGOUM2OEZCNkU5NTY5RTI5MTk5QworOjEwMTY2MDAwQTU3OEU1QUIxQjFCQ0JEOTU5MjlEOEJGODE4NjFCQUMwQworOjEwMTY3MDAwMjdGQjAzNUE4OEUyRThENDQ2OEY0NkU3OTI1N0RERkZGRQorOjEwMTY4MDAwMDU5MjhGNDM1MkRGQkUyQThBREZDQTNDOUM3NzREODU4NAorOjEwMTY5MDAwMUJDQjM3RTMzODc5MTNDMjE4RUE2RjZDN0M5NTZDRjY3NAorOjEwMTZBMDAwNDQ5OUJFQUY4QUJFMEY1NzMxRkQwNjU3REZFRUE3NzVDRQorOjEwMTZCMDAwNDZDMjBCN0EyODNGMzJEMkUxNjExRUM5ODQzMzQyM0NENAorOjEwMTZDMDAwNEZDREY5RTIxRTc3MUQ0MDI2OEI0QkYxNUJDNDkzNTE0MQorOjEwMTZEMDAwQzk1RjExRkVDOEM5RkJEQkZDREYxRjU2MzkzRkJCQTU0NAorOjEwMTZFMDAwRURDMUEzQzkyQTdFQ0NGNjZCQTE1RDk3RDlEOENBNzk4MgorOjEwMTZGMDAwRTY3Mzg0MjdBNEY5RUIzMjdCQUQ3Q0U3QUNERjg5M0E1MworOjEwMTcwMDAwRjc5MzY3MURDNjA1NzY1RDgyRkU3NDNCNEY4QjdGQTlGQworOjEwMTcxMDAwNUIzQUQzRTQ0N0M3MjFERTRERjYzMzE5M0M3RjFENDRDNQorOjEwMTcyMDAwMDk5RUJGMEUzMjVGREQ2MzU3OUJDOEEzN0U5OUY4MkVEQQorOjEwMTczMDAwRUEzMzhFN0E4OUQyNkRENTQ1QUNGOEY1MzBFNUMzNDlFOAorOjEwMTc0MDAwMUU1Qzc1MTI3QjFGMDNENjdDQTk1OTM5NzJENTRENTY4NAorOjEwMTc1MDAwQUJENjdDMDZFNENCNUZGRkE5RjU5M0ZCREI0NEJERTY4QgorOjEwMTc2MDAwNTJFQjI2REY2RDAzQjE1RjJCREZFREI1Rjg3RjlEM0NCQgorOjEwMTc3MDAwQjk4M0U0RjFDRjlERUZGRTZFREI5NUNENzdDRkFEMTM0RQorOjEwMTc4MDAwQTU1OTVGRTBDNEQ5Mzc1OEFGOTcyREIwRjBDQkY5RUIyRQorOjEwMTc5MDAwNDBGQjA5RTgyM0ZGQzY1NzIwMkVBNUZBODdENTRGREU2OAorOjEwMTdBMDAwMjBFNjc1RDc4NTAyNTYxRUU1ODc2RDRCNDVCQzQ1RjY4QworOjEwMTdCMDAwODQ5OEFCMTg4Qjg5QUU0MUU1M0I0OTBEQ0Y1MTEwMUM4NQorOjEwMTdDMDAwODMzMEI2QkVDOEU2MjRCNTJEOEI3NUFFMEY4RDJGRjNEMgorOjEwMTdEMDAwQjBCRjFBMkY0QTFDMURBNEZEMkYwQkU2RDU4QjU3MkQyOQorOjEwMTdFMDAwRkIzNzZDRDU2RjQ4ODAzREE0NkY5MkFEMUM5MEYwMjAwNAorOjEwMTdGMDAwOUYyNjQwRjBGOUVEQjYzMDhGNTdCNEQxQTZCQjUwNkU5RQorOjEwMTgwMDAwREUyNDc5MjhFM0YzRTRBREZGOUM2OTEzRjU5RjlDRjk4RQorOjEwMTgxMDAwQkY0MTcyOUFCMjI2QTc3OTM2RTMzQ0ZGNjVDOTIzOTA4RgorOjEwMTgyMDAwRTM1ODQwQzE4RTU4Q0ZBRjhGMzYxMTJFRjg1RDlCMjZGRQorOjEwMTgzMDAwREUyQjJCMENEMjg3RjE3MEZFRjU3RTY3OUQwNzI4MTVGNQorOjEwMTg0MDAwRDM5OEM1NDcwQjM3ODg3OUMwMkZCRTNGMkM5REVEM0RGRgorOjEwMTg1MDAwQkQ4QUY5Q0FGQTQ0RkJBMEY3RUVGQTk3N0JGRTQwOERFOQorOjEwMTg2MDAwMzNCRTUxMkI5Q0UzM0Y5ODNEODczMzJFM0EzNDRGN0Q1NgorOjEwMTg3MDAwNkM1MUJCOTBENzk2QzU0MkNFNDgzRUY2RTQ5MTBGQjc2NworOjEwMTg4MDAwQkVBQjk0RjdBNDc4QUEzRDZDQUQyN0VDNEU1MDk5NkE5NAorOjEwMTg5MDAwQTU3ODI3NTgwQjA2RDcxNDk1OTM3Q0RFRjg5MzU1MjcyNworOjEwMThBMDAwQTY1NzkxOUQwRjE5MTQwNzI5N0UzNDk1RjVEOTM4RDE4MworOjEwMThCMDAwN0RFRTBCQzU3OThBMDI0OTZGRkREQzc4MEZFNzM1OEIyOQorOjEwMThDMDAwRUI4NTlGNDlFNkNDNzc0REJCOTAxMzM5MzcxRUFDQTQwRQorOjEwMThEMDAwNzA0NEJGODVFQjc4NTQwN0E0RkUyRTVGNkYzRTNGNUREQQorOjEwMThFMDAwREQ3NkZFQkFDRTkxMzhDNjExMTRBNDNFN0M3MERGMTZBOAorOjEwMThGMDAwRUNCRkFCNzkzNDFGOEZEMUYzRDY3NTM0QUIzRjVCRDdEOAorOjEwMTkwMDAwODk1RjVDNUQ2N0I0QkRBNEE3RUE1MkVBM0FGM0NDM0JCOQorOjEwMTkxMDAwRUI4RkU3RDY3NURBREJGMTlDNjM0MTUxNUY5OUFERUI1NAorOjEwMTkyMDAwREMxQUI5QTg3QzBFNTg3RUI5QzRCMkNCNDUzRDU2MUMxMgorOjEwMTkzMDAwQjE1M0UyMzhFMkU5ODY3RjNGQjA5Q0U0QUNDMUNCNzJBMAorOjEwMTk0MDAwMDAwNzI3MjA1NzRGRDY2REQwQkY1NjRBN0VFNjU1MUY1OQorOjEwMTk1MDAwNTQwQkJCNjZEMjdDNzY1QzZDRDM0RkI1RTY2RjdERjBFMgorOjEwMTk2MDAwMDU4NUM2OEY5NzdCMUE3OTNFQzhGODNDNUNFQzRFQUE3OQorOjEwMTk3MDAwNTYyQjUzQkI1Q0NEQzhDNTM0NkYwOTU4NzVGNDhDNDRFNQorOjEwMTk4MDAwQ0Y2MzQ4QUNEQ0Y4NjA2NEU2QTc2REM1OTQyNzA5ODI5NAorOjEwMTk5MDAwNDEyNjY4MjRBNkVEMkVBNjdGNTAxNTg4RjA0RUE1OUUwMAorOjEwMTlBMDAwMjY3QkRCRTYyRjc0RDhGRjkxMUU1NUQ4RDc2QTcxNUY2RQorOjEwMTlCMDAwNjZGQ0E0RkVCNUFEMzg3RTY4Njc4MDcxRDNBMTBBOEYzRQorOjEwMTlDMDAwRDBBRkE0QzRGNUU0MEVDRDE5Rjc4QzRGMkUxMTc4RUNFRQorOjEwMTlEMDAwQTBEN0EwN0IyMkM3MjdDNUY4MkRCMUM2QjRDQ0I4REJGMQorOjEwMTlFMDAwMTkxN0Y1RThDRUI4Njg0Qjc5RkQyQjg0MTc2MUQwQ0I3OQorOjEwMTlGMDAwRjk3OENEQzJCNTM3RDczOEUzQTRBMkNBQkVFNzA4QTdBNQorOjEwMUEwMDAwNkMxQTE0Nzg3ODZGQjQ2NEMxMTZCNDdGQkY2QUQ3MUQ5RQorOjEwMUExMDAwNzFFMkU2QzFCQkI5NkUzNEE4MDJENzUzNDczNkFBQUMwRgorOjEwMUEyMDAwMUYyM0RFRDc4RjZDNjFEQzU4QzA3NDlDRDhBODk2MjcyMgorOjEwMUEzMDAwNzJGNEE1QjRDMzY3REQ4QjEwRjgwM0UxNjU2MjMyQ0ZBMQorOjEwMUE0MDAwRkJEMjBFNjE3NzUwQjBEOThGREJGMkYyMTc5RjExNzQ4MQorOjEwMUE1MDAwMEU1NTQwNUEyNzFDRDdCMzIzNDM3MUU1NzgwNTlFMDlEQworOjEwMUE2MDAwREYwRjQ2QUI3QTRFRDJGQTJGQ0I0MEU3NzRDQjYxNjVERAorOjEwMUE3MDAwNDczNUVCRTlBQzNGNkRGMjM4RThFNEY1QzVGQjY4N0UyRAorOjEwMUE4MDAwQjgxOTc0QjI2QkVEREREOEE3M0NDMDA2MTUyODNGRTA0RAorOjEwMUE5MDAwOEJGRTJEOUZCNzA0RkIwMUVDRkJCQjQ3OTMwQUY2RkRDMQorOjEwMUFBMDAwNTU4OTk1ODQ4QjlGRDk3NUM3NzAyQzQyRkU0RUU4QjczNworOjEwMUFCMDAwNkZDM0I2RjgyNzY4RkMyQTJGMDQ2ODdGQTA0QjUxREE2MQorOjEwMUFDMDAwNUY1MkRDNjc3MEVCQzNERUQ0RjdEQjg5NEY3QjBEODk5NworOjEwMUFEMDAwNTlCNEE5NjdGRDc2QkVCNzE0Mjk2MERDMzRFQThENkY2RQorOjEwMUFFMDAwNjY3Qjc0OUI1RjRCQjIwRjlDRTYzOEMyRkIxNTFGOTA2MAorOjEwMUFGMDAwREM0REVDRkE0RDE5RTFFRjFGQjU4QkJBNjY0MDc3QzZBNQorOjEwMUIwMDAwRDc3RTE4NjVCRkJEREE5Q0RBNDBERkFENkU1MkE5RTIyMAorOjEwMUIxMDAwMDE0RjM3OUY2MUJFNEQzNEY4MEMxRkVFNjNBMjU5NjIyRQorOjEwMUIyMDAwM0FGRkExQzE5QkE2NzU5RTUyQTc2NDVBRjdBOTNGRTA1MAorOjEwMUIzMDAwREE5NUY5RjQzQkJGNUVEOTdBRTQxRTNGRDJCNERFNEZBQQorOjEwMUI0MDAwNzJCMTE3QTY2RTI1RkEyNDY3NDQ5RUNBM0QyRURFMjE4NworOjEwMUI1MDAwRkNENURFRDQ2RDM1MEFFN0IzNTRBRUI3MkI2NzBEQjNCMQorOjEwMUI2MDAwMTg2NzBGQ0ZDNEZGOTk3MkFGQzk3NjQ1QzQ0OUU1OUU4NworOjEwMUI3MDAwQTQ4NEYzMERGNTg4N0IxOTQzNDU4OTYxOTJFNzIxOTQ4QworOjEwMUI4MDAwN0I4RTkzMjJFMjNFRDI3ODc5QzREODlGQjNERTc4RjM3RAorOjEwMUI5MDAwRUQzNTY0Q0Y1RTZDMDgzMEJFMUYzOEY1Mzc3NzExQkU2NworOjEwMUJBMDAwNkY5NURGRkVFRUMzMTQ1NzU1QThDQ0NGMjE2RkRGQUI4NgorOjEwMUJCMDAwMTQwNzI1MUIwMkJDREY1MzhCNTRGMDkzM0Q4OERDRjVFMgorOjEwMUJDMDAwMDBDNUQ5NzA3QzAzRTRDQUVCNDRCN0QwRDM4OTBBQTExRAorOjEwMUJEMDAwRjdEMkMzMUIzODBFMTg5NzY0QTZCMzU5NzY0QzIyM0MzMworOjEwMUJFMDAwRTZFQkI2RjM0RTIyQ0YxNEIzQ0NEOUM0ODY0NzM4MEZGOAorOjEwMUJGMDAwNzU1NThGQzhBM0M2QkFBRDdDOTMxQzRDQjI1Q0RFMTg3OQorOjEwMUMwMDAwNzg4MEY0REY1NEJDOEVGODc4Q0Q1OTY3QkM3Qzk1MkI3NgorOjEwMUMxMDAwNUU3NkU3QTNGRUI3RERDQTQ3NTg3OTI3NUIyRTQzRDYyOQorOjEwMUMyMDAwOTg4OTI2Q0I0RUFGRjJBNTg1MUNGNjk1NkJCNTczRjU1QQorOjEwMUMzMDAwRkJERjJDRkMzQ0Q1RUZFNzdCNjQzRkVERDdCODFGMzJEMAorOjEwMUM0MDAwREZEOTVEOEFGM0JDREMxRkU1RTc3RkI5RkFBODk0RkIxNgorOjEwMUM1MDAwRERDOEFBREJGQzNBREI5M0U5MjhDREVCQjYyMzZFQjlFRAorOjEwMUM2MDAwRDhERjVFRTBGMDI3RjYzRThCOUE1QkM1RkRCQkIzNkMxOAorOjEwMUM3MDAwOTE2MTRENzBCQThEN0QyMzRDMDU3M0YxN0VBNjVGRENCQQorOjEwMUM4MDAwNzM3QkRBREFFNzI5REFBNzhGRjI2NDYyN0ZDRkY1RUJBQworOjEwMUM5MDAwREMzRURGNUZDM0VEQzYwRTEwRjUwMERCM0U1QzgzRjY3NQorOjEwMUNBMDAwMDFFOUQwNUUyMUZBNjQwRjg4RkYyNTkxQkIzODRGRTYyOQorOjEwMUNCMDAwOEIyQTFBRTlCQkJGNjIzNDIzRTVEODg3ODlBMkJFNUZBRAorOjEwMUNDMDAwREM0RDc2QkYyQ0M4RjJFODNFRDc5QTBFNEZERTczNkQxRQorOjEwMUNEMDAwNkFERUMxNzZFNzFDQUU0M0Y0NDczQkIzOURFRDEwREFGNAorOjEwMUNFMDAwMDU1RTc3ODM3QTI3RUZDMzQ0QkJDNDc2QTFFRjZCNzc5OQorOjEwMUNGMDAwQjA1REYwMDJDOUI5REIwRTk0MjQ4NTdFMjc3NDkxQkZENAorOjEwMUQwMDAwQjNFRjA5Q0REQTA1NUMyNzhERUIzQzhENzY5REZBNDM2OAorOjEwMUQxMDAwNjgwNzY4OURBMUU2RDdGRjlBRDZGREMzRkIwNTdDMkYxNworOjEwMUQyMDAwNkE2MkUzMkI2QzE3NUUzQzg3MzZGQjBBREEwNTVCMEZCMQorOjEwMUQzMDAwNUYzQjE1M0I5NjFCQ0Y2N0Y5QkNGRThFMTM4MjFFMUFDNAorOjEwMUQ0MDAwMDhCQUY2QzZGM0M0ODk5N0NBNjczMDJGMEVDN0E0OTVBMAorOjEwMUQ1MDAwRTkzQjQ1REQ1MTY1M0FDQzVCNzc0QzdBMEM0QTBCMEM3QworOjEwMUQ2MDAwNEMyQURENTZERDExQThFRTY4RDcxRjczRUE4RTA1Q0UyQQorOjEwMUQ3MDAwQkFBMzlBNEUzMUJFNDk1Qjc1QzdEQkQ3OEFCQUEzNUE1QworOjEwMUQ4MDAwMzAxRENDRUVDM0FFMzcwRUQyQTNGMjZDN0RGRUFFOEUwQworOjEwMUQ5MDAwQzRBRThFODY2QzlENTE5NzQ0MURGQ0E1OThGOTY1N0E1QQorOjEwMURBMDAwMEU5MTEyRjZGRkVFM0FBNTVEOEY0NDc4MjcyNTcyRUE3MAorOjEwMURCMDAwOUI3NUY4REM1RjkyQUQ3RkI5RUI5OUY2QkQ4QzNBNzVGNworOjEwMURDMDAwRkFEODAxQTRDQkMwOUQ3RUM2MEZGNkZFMDYxRUZERTgyNAorOjEwMUREMDAwQUI4OTQ4RjYzRTgwNURFRkI0RUI5OTc2REQxM0Y3M0RCNQorOjEwMURFMDAwOTZCQjZGNzgwMkQ4RUVDMDYzRkVBM0U0REZEQ0ZCRkQ5OAorOjEwMURGMDAwNUUyQzcxN0Y0NzU5OUU3RDVGNjQ3RDcxMUQ1OEYzMjM3MgorOjEwMUUwMDAwRUUyMjdEN0VDREEyQTMzREVFNDE0QjFGOTdBQjIyQkZCQworOjEwMUUxMDAwMEQyMTk1RTM5REQ2MDc4MzIwMTNDRTJFNTI4RjkxNUUyMAorOjEwMUUyMDAwNkM4NkU5MEVBMkVGNDA1OEUwQkNENDIxMkZEQkM5RTM1OQorOjEwMUUzMDAwMUQzQUYzQUY0QzM1RjkzRTQ0RDk5NzAzQzY2RTlDMjY0NAorOjEwMUU0MDAwNzU1MjBCNTFGRUE5QTdERDNDREVDMUZCMThCRDc1M0RFNworOjEwMUU1MDAwRUQwMzcxM0JEOUJCNUY1N0RGMTdFMTdBM0ZERDdCMkE4QQorOjEwMUU2MDAwQTZGOENGNTg0Qzc5OTAxNzNBRjJERjU3NkE1OTdDNzYyQQorOjEwMUU3MDAwM0RBRjVCRTQwMThBQ0Y1MjAxRTMzOUJFNTdGQ0E0QzJGNworOjEwMUU4MDAwRjNGNUUwMTQ2NjNEREY1RjZBNTc0QjY4MUU3MTNGNzVERQorOjEwMUU5MDAwMjA3ODlBRjlENTUyRUQ1QkMxNzlCREEyRkM3MUUwQjMwRgorOjEwMUVBMDAwMUQyMjZFNUQ4QjczQTkzOENGNjc1QTEzREZBNzdENTM1MAorOjEwMUVCMDAwQUUzNENBNzIyQ0UyQkIxN0M4NEUwQUZCNzVBRkE3MzEwRAorOjEwMUVDMDAwOUIwNzJCOTYxMzJGRDA3ODM4MkUyOUU0MUY3RDk2RENBNAorOjEwMUVEMDAwRDg3MUUyM0JBREU2OEJDNDc3RTQ4NzQ5RUJEQkY3ODA1MgorOjEwMUVFMDAwRUNGNTVGQjJGODkwRUMzMDdGNEFFMzVFQjdENkE5RDM0OQorOjEwMUVGMDAwOTIzMUQyQzNCQTA0Q0E4M0M0RkFFM0FBQzMwQkI5NzAzRAorOjEwMUYwMDAwQ0JBQjJENkZCMzc1Nzg0QjBFMjU0REQ0NkI1MUFFNUVCOAorOjEwMUYxMDAwRTdGRDNFQTU5RkY0NDg1NDZGNEYxQzNENDBERjVFNjZEMQorOjEwMUYyMDAwQkRGQkVBMzZGMzJEREE3NzcxNkJGQzNGNjlERTVGRUZCQworOjEwMUYzMDAwQkE4M0VGMDU1RkVDM0Q4RTk2QzU3RDUxQUFFMzBGMDU5MAorOjEwMUY0MDAwMDQ2RTdFMjg2NjM4RUNEREEyNEVDMTlGNDU5RDAyMkZBRgorOjEwMUY1MDAwNUQ4RjMyMzNDNUY3NEIwREJFRjcwREIwOUQ3MUI0NkQ3QgorOjEwMUY2MDAwOUY0NkZCMTM4RkJGNTk5REZEM0VENTBGOTM1NDBGOUE4QgorOjEwMUY3MDAwNkYxRkRFN0QzQjM4QUYzQjUwRDFFQTI3RkI4M0Y2QURDOAorOjEwMUY4MDAwOThGQTQzMTU2NjM0NzcxRkE5MjIyMUU3Qzk0NTIyNkZDNQorOjEwMUY5MDAwNDFGOUI0NjRDRTdERjI5MjRFOTlDRkQzNTYwMTE5OTI5NQorOjEwMUZBMDAwMUQ1RjUwRDRERDdDQThCODNBRkExRjlGRDlDNEY3OEJDNworOjEwMUZCMDAwRjFGOTI0QTUxOEFFRUFENDQ1NUMxRTMxQzBBNDc4QjM2QgorOjEwMUZDMDAwMjIwRUE0REYzRTJERkIzREQ1NTFEQjJBRkFGOEJFRTVGQgorOjEwMUZEMDAwN0NGM0M4NTFGQkZCMDQ3RjdGNTNBN0M2RjNBQTExOEY4NAorOjEwMUZFMDAwMjMwRjcwMjFCQUI5RTkzMjQ4NzRBQjlFOUY2RUVBNDU1RgorOjEwMUZGMDAwRDM0REU4OUQ5QjVFOEQxNkJEOUUwOTdGOTFDRjA3MUYzNworOjEwMjAwMDAwQjRCMTlFRjkzNDNDMjdCNkFCM0I4NTdEOTE4MzI2MjQ0MQorOjEwMjAxMDAwOEFDODQ2QzUxMTQxNTI5RUJEMEZBODBFNkREMzU5RDYzMAorOjEwMjAyMDAwMDQ5RDY1QUQ4RkJGRjM1NTE4OTBCODgxRTg5MjYwQkFGMgorOjEwMjAzMDAwQjhFOTgwNzYwMkM4NEVGQ0YwRDEyMzExQzJBNzJERDg5MgorOjEwMjA0MDAwOEYwQUZCMDEzRTZDQkZERTIxRjg2MkVCRTkzQUY4NDlFQQorOjEwMjA1MDAwNTBFNEJGOURGRUMyNkQ0RkVERjYyMTJCRkZFQzdFMkVBRQorOjEwMjA2MDAwNzUwNTg0RkREMEMxNDFGNzIyRUJGNzBCQzc4NkVCMTk0QworOjEwMjA3MDAwMUZBMEZGNENEMkJEOThDRUYyRUEwMkVBNUZFOTNBQTI3NQorOjEwMjA4MDAwQkI3RUU4QUUxM0JBRUI4MzU5QjkzMUZEQjRDRjc3QjU1NworOjEwMjA5MDAwRDNDOThGRTc5MTE3QkIzRDYwRTlEQjYwQkYzRkFGREU3RgorOjEwMjBBMDAwMUQ0MDdEMjdGRTBEMzU5QjQ5QUExQkVEMEQ0RjQ3NTk1RAorOjEwMjBCMDAwNkU0RUJFQzVCODU4Nzk0MTM2MDg1RjJBOEFFMDczRTc4QworOjEwMjBDMDAwQTI2OUU2NjM1NzkzMDk1NDZGM0FEMERGRkI5RERDNzkzMAorOjEwMjBEMDAwQkZERTlBRjg0QTI3Q0E0OUExMzY2OUQyM0M0MUM4MjREMgorOjEwMjBFMDAwQzlGRkFDMkQzNUZCRjJFMUE2MjFDQjhFQkNEMzFBREZBNAorOjEwMjBGMDAwNERERkQxQjU3NUUyRkY5QjMxNzMwRkY1MkZENjZFQ0Q1NQorOjEwMjEwMDAwQTc0RjhBNERCQjRCRDZBN0QzNDI5RjlBNzZCMDNFOEQ0MAorOjEwMjExMDAwNTRGNDMxQ0UxQUY5ODk0QzQ4MkE4QjIzMkQ3RDFBNjk0MworOjEwMjEyMDAwM0VDM0ZBNkVFQjU1REFCNjNGNEQ0MjJGMjg4RjQwRkU4NAorOjEwMjEzMDAwM0I1NDYxQjJEREY4OTZBNTRGMEFFQTA5RTk5M0NGRDI4NAorOjEwMjE0MDAwQTc5MDk2MUQ0RkY5RjEzNkEyMzMzRTU3MkFBNkY5QkI0OAorOjEwMjE1MDAwNTA5M0E1N0ZBNDRGNDFCQTNGMEM4QzAzODY1MEVGMjhDMworOjEwMjE2MDAwMkZFMkQ2QUY5NjJBRTEzNzlGNjg0RDNDRDQ0OUY4NjJGQQorOjEwMjE3MDAwRDE3QUNFQ0IwRjU1RkNCRTk0RjE4QjI1RkY1OUJDNUJCOQorOjEwMjE4MDAwQ0ZGRUZDRENCMEM3MjA3REE4MjMwMDVEOUZENTAzRkJGQworOjEwMjE5MDAwRENBQjY3NjRDODIwNkJENkNDNDhEQ0RFMzQ1M0M4NkQzQQorOjEwMjFBMDAwQ0I0QzgwNUI3M0E2OTREQkQ4NEM5OERCRDY5OUFCQjk0QgorOjEwMjFCMDAwNkQ5QjI5RTdCNjdEMDZGNTYwMjVFQUMzNEMyNUI3OURFMgorOjEwMjFDMDAwMzNENzczREIzNUIzOENEQkVFOTk5NTNDQUU2NzY2MDU5MAorOjEwMjFEMDAwQjc2QjY3M0VDNkVEQ0QzM0NENjI5RDFBNzFBRTNDRkE0QQorOjEwMjFFMDAwNDA2NUIwMkJBMDBGNDYxMjhBNDgwRjNFRjMyQURCNzdEQQorOjEwMjFGMDAwNERFNTNCNEFBOTcwMjNENzg5N0NDQTM0RUJDM0IxMjY4RAorOjEwMjIwMDAwNjFFRkJCODI4MjRGNkU3RDc4QTczNUYxQUI3Q0ZBMzBFRgorOjEwMjIxMDAwOEI2RjE1RDA4OEZFMkE1ODdGMkVGQzgwRjhFNzM3RjRBNAorOjEwMjIyMDAwQkQ4RDdCRDVBOEM5NzI4NkY4RTQwQ0YxRjM3MjcxQzIzQQorOjEwMjIzMDAwMkNDRTVDQUMzMjFFQjU3MUU2QzgyMkM0OTk5NTU5OUM2RgorOjEwMjI0MDAwMzlENDJDRTJCMkQ0MjExRkM3NkY1QjI0NzFCRkVDRUFGMgorOjEwMjI1MDAwQjZDNDdGQjM3RTgyQzgxMzI1NkVGNTZCODQ5QjUzRTFCMQorOjEwMjI2MDAwQ0U2ODkwRjI3QTdCNjVBMDdDMDFFMjkwMEY3ODlGNEE1RAorOjEwMjI3MDAwNUNEQzY3QkQ0ODdEN0UzMzI2RUNCRTNEQkUwRTRFN0JFQQorOjEwMjI4MDAwRkEyRTAxQzdGQzlBRkVEOTNDQkY1RDI4Qjk1QzNGRUIzMgorOjEwMjI5MDAwNkQxMzc2NDExMzc2MjE1NUQxMzdDQzc1Njk5NzVEQjBCMgorOjEwMjJBMDAwRkQyQ0QyQzM2MTE3OTY3NjU5NzZDMUQyRjM5MjBBRTExQQorOjEwMjJCMDAwMkY0QkM4MkUyMDdEOTY3NUQ5NzZDMUU5NjcxNTFCODdFRgorOjEwMjJDMDAwNzREQjM4QzRCMjBCRERFMjNCQzRFRDBFM0Y4QkVDRjZBMQorOjEwMjJEMDAwNDMwRTJFNDYzOTVBREU5NTA3ODdCMDNGQ0ZGMTczMDM4MAorOjEwMjJFMDAwNTVENTMxRkEyRDQxRjgyQ0M0NDgzQzQzMzNGQTVBMjNEMgorOjEwMjJGMDAwOEZERjQ5NjlGNUFDMDcyNzk1MzZDOENEQUY1Q0IyOUUzNAorOjEwMjMwMDAwODU2REJGNjNCMkRGNzE4RkIzRjU2REU4NjQ4RjM4QTc1OQorOjEwMjMxMDAwRTU4NzRFRTJGOUNEMUM3REVCRDI4NDNGNDJGRjczMzM1QgorOjEwMjMyMDAwOUREM0FENkYyRDhCQ0Q0NDNDQ0YzRTNGRDkyNUYwRkVFNAorOjEwMjMzMDAwOEZENjU4QjgxNzcxQTUxMTY0N0M5RjE3Mzc3QzkyRjgxNworOjEwMjM0MDAwRDcyMDdFQTdGMTE4REE5RjhFRUU2NDRBRDE1OUNGM0Y4RAorOjEwMjM1MDAwNDlFQkFFNkU5RjkyMjkwRjc0NTNEM0U4Q0I1NDEyNDFEMAorOjEwMjM2MDAwM0RGRDU0NTdDM0U1RUI2OTUzQUI1NUVGREI1OTJBMkVCRQorOjEwMjM3MDAwM0I1QkVEODVFNERGQzY0NUI2MUVCOEM3M0Q1NDY5RjY0NAorOjEwMjM4MDAwRTZBM0M3QjMxNjNEMDY4NjNEM0Q3NEUxQ0Y5NjhCOTMxOQorOjEwMjM5MDAwQ0E1MkM2M0Y3OUVDQUQ2OTVDMTE3QjdCNzFGOEUzMjRDRQorOjEwMjNBMDAwRkE0MUUyRkI3OUYwQzc4MTdDRkM5RjBGN0Y4Qzc3Q0RFRgorOjEwMjNCMDAwRTI4RjMxRTI1MzRCQURDMDFGQ0Y3NkMxNzlFMzlCQ0JBNworOjEwMjNDMDAwQzYxNUIxRDM0Q0I3Q0JDNTE1MEY3NjlEMUY1NzdDQTc0QgorOjEwMjNEMDAwNEJEODRENDU5QjY2RkIxMUJBNEM1Q0UxQjYxMzg4MUY4OAorOjEwMjNFMDAwRkU5NUU5NjMwOEJGNkJGRkRFODQyRjUwRTZGODJGQjQzQgorOjEwMjNGMDAwMzM4RkQzMzhDMjBENzQ3OUVDNThCMDM1MjlCMTFFQzQ2RgorOjEwMjQwMDAwOUZBNEU3QTNFNjEyOTZBMzJCQTUwRjg4MTM3RkQwOTU3MAorOjEwMjQxMDAwRDNCRjkwNUU1Q0Y0QjhDOThEOUMwN0I0RUI5OTdGMEM3OAorOjEwMjQyMDAwODRFQTI4M0ZCMkQzMkZEQTJGMTU4NDhFNTEzQkQ2MkY2MgorOjEwMjQzMDAwRjJEMDdGMEMyQzRFNTNERTZDQ0MwQjVDM0YxODk0MEExMAorOjEwMjQ0MDAwOEM2MzIyM0ZCQTlDN0Y1RjAzN0QzNzUyN0JBNkNCQUU2NQorOjEwMjQ1MDAwQ0JGRjlEQTM1RTFBRDZCNjNERkU2NjY5QkVGRDg4RkIyNgorOjEwMjQ2MDAwQkQ5NDhBRkY5MEVGODE1NzY4OUMzRkI3RTg0MTY5MjA4RgorOjEwMjQ3MDAwRjZDRkQ1MDU4Q0ZGMDA2MTRCNTM4RURENEY3NUFDMTM0NQorOjEwMjQ4MDAwNzE3MkE1OUZFQjc5MzIyODY3MjgxRjNGNEM2QkYxRkVENAorOjEwMjQ5MDAwN0FCOThFMTlCMEZDMjEyODQ5RkRFM0JDNUY5MTA3QjVEQworOjEwMjRBMDAwN0ZGN0I3NkZGNUZBNjI3MTA5NzkzQjhGQjdFNTdGNUYwOAorOjEwMjRCMDAwNzBENEFGRDUzQUY0RERGMUJCNkU3NzJCQUYzOEE1QjU0QworOjEwMjRDMDAwRTE3RUM3NzQ4NUVCQUUwNzhENDg4MEVCMjYxNTIyN0IzNQorOjEwMjREMDAwRUU1RkU0ODlBN0YzRThFOUI1RERCM0Y3MjI3ODVGNjE0MQorOjEwMjRFMDAwNkI1RkJFMEUxMUFGQ0RCN0RFRkU3RUU3M0RBQjgyREE4RAorOjEwMjRGMDAwQjg0OUZFQzQ1RkQ5MTcyN0JBRjkxNzQ1MjRDQUFCQ0UyRAorOjEwMjUwMDAwRDJCQjVCQjJFRTY5MTg5OTE2QTRGN0IwQTU4NzA1MzU2MgorOjEwMjUxMDAwOTMxOTBGRDEzOUJDNkQyNUQxRDY1RjkzODYzMzM0NEZEMworOjEwMjUyMDAwRUQyNEJDNDFGRUEyRDJERjlCNkZERkQ3NTlGQjFFRjYyNAorOjEwMjUzMDAwMjZFMzg0OTM4NjJCMTVBRTVGMEU1N0U2RjcyRjI1REQzNQorOjEwMjU0MDAwQzJGRUZBMTdFREUwRjFCMDQ4RTFGQUIzN0I5Q0QyMkQ2MAorOjEwMjU1MDAwRTQ2ODlGREFDNzc1OENBMTQ1RjdGMzdEQjcyMUZBMjFBRQorOjEwMjU2MDAwQ0Q0N0QxRUVGRDcwRTY4MURERjhGQzUwRkZGNkM3REYwOAorOjEwMjU3MDAwRjQ5MjlDMjZCOERENzdFRDdFOERFRTcxMUVBQUY3Njg4OQorOjEwMjU4MDAwOTQ4NzBCRkIzMzdFRkE3RDY2NzhCNUM4NzM5NkI0RTMwNworOjEwMjU5MDAwQjhEQzc4NTVBRTA4OTA5RDBEQURDMjc5NzJFMkQwMzFBRAorOjEwMjVBMDAwRDAwMkI0RUVCRTkwNkQxRkE3RkRDMjNFMEE3OTJBQjJEQQorOjEwMjVCMDAwQzY4RUFDMTI3NUE5OTE3NTc2RkU1RkYwMkZGQjdFN0NGRQorOjEwMjVDMDAwQkJCODJGQTdFQUMwNzk2ODUxOTdFMkQ0OUU0RUY3Njc0RgorOjEwMjVEMDAwRUJDMzc0QUUzMjRERDRBMzBFNTlGMjM1NjhFNUQ5RERBNAorOjEwMjVFMDAwNzQzOUI0Nzg4QUZEQzlBMTM1NTNCREU0M0Y0MjlBREZGRQorOjEwMjVGMDAwRTgyNkI5M0VFRURDRDdERUU2NjkwN0RFMTg2OTM4NkRGRAorOjEwMjYwMDAwRURERkJEM0YyMUY3Q0FEMzZGMDkzQjY5RTFGRTkwRjFEMQorOjEwMjYxMDAwN0JDNjU5RjYzREFFQUVENTQyMEY4QkFEN0JGNEM1OTE2RQorOjEwMjYyMDAwQjg0OUYzRURCRUY2Qjc0OUFBMTMxRDJFQjdFRjE2N0NENQorOjEwMjYzMDAwREU3OTBGMDNBNjE5MTc4NzU2NUI3NTM5Rjk2REJFRkY1MgorOjEwMjY0MDAwMEJCNzhBN0IxMkY2M0Q2RjM1QTIzQUYyMDJBNUFFRkJCQworOjEwMjY1MDAwNTkyMTU3MUZFNDBERTdCRENGQjZGMzk3NDc5RjNGOTUyQworOjEwMjY2MDAwQzNDRkNGNzczQkVGODM1RkU4RkIzRkY2QTc5RjNGODU2NAorOjEwMjY3MDAwN0U2RTZDRDVGOUY1Q0ZFNkQzRTFGRTI2NkU2RDM5QjRFQQorOjEwMjY4MDAwRTUzMjRDNDdBQzlGRkZGQkIxNzAzQzZGQkRFNTExNEI5MQorOjEwMjY5MDAwNEZEQ0YyRUE5NkQzNjI1RjlDRkRGRUU4MUFFNzNDRjc1NgorOjEwMjZBMDAwNTk3QTdFOUYzNThGQkExOENBMDkwRjhEODY4NTVFOEUzRQorOjEwMjZCMDAwMDZBMEY3OTEzQ0U3N0FBQzVCRTVGMTU5Qjk3N0UyODI4NQorOjEwMjZDMDAwQTJDQkM1MDUyQjVBQURCOEEyODRGNTZENkM1NUVCNzM0MgorOjEwMjZEMDAwMjQzN0VGOTE1RUU0RDgyNzc3REVEQ0M2MDU0QThGQzA0OQorOjEwMjZFMDAwQTVDRjg0NTU4OUZDQkExNjlDNjZCQzNDRUJENzJEMUM0MworOjEwMjZGMDAwRTBGNkVCN0U2RkIyOTdGNENGNUZBOURBNzY4OUVENDcwQgorOjEwMjcwMDAwNjU3N0UwMUJDOTIwRkIwMzI5RDcwRjFFQ0FEQ0M5RjM3QworOjEwMjcxMDAwODY1RDc5NzM4ODM4N0Y4N0IyQjcxQjk4NEU2MUREQjJDQQorOjEwMjcyMDAwMkZERDhBQjg4NzM1NkE0MkVFM0Q5QTMxQ0ZEQjMzNkZCMQorOjEwMjczMDAwRThFMkRGMUZEODM4QTI5MkRFMUY5Q0UyREZDN0MwM0Q2RgorOjEwMjc0MDAwOTBCQkZFREU5NjRERkM3Qjg4MEJGMUREREUxN0REQ0IwQQorOjEwMjc1MDAwQ0FENTlCNEJENThCOTc2REJEMDg0MDgwRjRFMjFDREMzRAorOjEwMjc2MDAwQ0I3NTc0MThFRDc2RjgyMUFFMjgyQzYwMTMyMEZFRjA5RQorOjEwMjc3MDAwOTg0QUEzNjVDN0E0QUNCRTQwOTc1NURGNEU4ODNBM0Q0MgorOjEwMjc4MDAwNTE5OEJFMzNBQ0NGQ0FFOTk2MDRDNUQ3OTBFMURGMUQ5RQorOjEwMjc5MDAwREFGNkU1MUNGQzkyRDc0RDNFMkQ0OUIzQjhFOTZBMEMzOAorOjEwMjdBMDAwREZFOUY3OEM0QjY5MEI5QTg3NUFGN0ZFOTc4MEMxQ0YwOAorOjEwMjdCMDAwQUIyMENFRURCNUQwQzc2RDBEOEM3MjdCMUQ0QzcyNUIxRQorOjEwMjdDMDAwMEI1M0RDRDZDMTU5NkU1NzgwMkVEMzIyMkJDMTk0ODE3NgorOjEwMjdEMDAwQUY1RTI2Qjg3RjIzMjRCOTZEODZDNEZCNzQyNzc0QjAxRQorOjEwMjdFMDAwNkNEQjBBQjI1N0VGQkJFODY0RDMzOThGQkUzMzJFQjQyQgorOjEwMjdGMDAwRTk2MUQzRkQyMTMyRDIwRDE3RTY2QjJBMkNFQzZGNUIxOQorOjEwMjgwMDAwRDMxNEUzRDdBMkEwMURGRjBBMzlCN0U3OTkwRkM3QkFCRgorOjEwMjgxMDAwNzE5NzlGNzBEN0NBQjk3MjcwMjFEQzY1RTNDNEZGMDM1QQorOjEwMjgyMDAwMDhFOTcxMDFCMDQ4MDAwMDAwMDAwMDAwMDAwMDAwMDA0RAorOjEwMjgzMDAwMDAwMDAwMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDA0MAorOjEwMjg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4MDAwMDAwMDA2MAorOjEwMjg1MDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDA2OAorOjEwMjg2MDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAzOAorOjEwMjg3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDA1MAorOjEwMjg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwMjg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwMjhBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOAorOjEwMjhCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOAorOjEwMjhDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAorOjEwMjhEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAorOjEwMjhFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOAorOjEwMjhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOAorOjEwMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNworOjEwMjkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNworOjEwMjkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNworOjEwMjkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NworOjEwMjk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NworOjEwMjk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwMjk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NworOjEwMjk3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NworOjEwMjk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NworOjEwMjk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MDAwMDAxMDAwMDA5NworOjEwMjlBMDAwMDAwMDAwMDgwMDAwOTAwODAwMTAwMDAwMDAwMDAwMDI3NQorOjEwMjlCMDAwMDAwMDkwMDAwMDEwMDAwMDAwMDAwMDEwMDAwMDlEQTgyMgorOjEwMjlDMDAwMDAwMDAwMDAwMDAwMDAwODgwMDAwMDAwMDAwMDAwMDA3RgorOjEwMjlEMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwMjlFMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxQTAzNgorOjEwMjlGMDAwMDAwMDAwMDAwMDAwMDAwODAwMDA5M0MwMDAwMTAwMDQ3NworOjEwMkEwMDAwMDAwMDAwMDEwMDAwOTNDODAwMDAwMDAwMDAwMDAwMDI2OAorOjEwMkExMDAwMDAwMDkzRDAwMDAwMDAwMDAwMDAwMDA4MDAwMDkzRDRFNAorOjEwMkEyMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDA5NDk4MDAwMDAwMDA3OAorOjEwMkEzMDAwMDAwMDAwMDgwMDAwOTNEODAwMDgwMDAwMDAwMDAwMDgxMworOjEwMkE0MDAwMDAwMDlCMzgwMDQwMDAwMDAwMDAwMDQwMDAwMDk0MTg4NworOjEwMkE1MDAwMDAwODAwMDAwMDAwMDAwODAwMDA5NDU4MDAwODAwMDA3MgorOjEwMkE2MDAwMDAwMDAwMDgwMDAwOTRBODAwQzgwMDAwMDAwMDAwOThDMgorOjEwMkE3MDAwMDAwMDk2MzgwMDk4MDAwMDAwMDAwMDI4MDAwMDk2NzhCQQorOjEwMkE4MDAwMDA5ODAwMDAwMDAwMDAyODAwMDBDMDAwMDU0MDAwMzA1MQorOjEwMkE5MDAwMDAwMDA1NDAwMDAwQ0IyMDAwMDgwMDAwMDAwMDAwMDFGRAorOjEwMkFBMDAwMDAwMENCMjEwMDA4MDAwMDAwMDAwMDAxMDAwMDIwMDgwOQorOjEwMkFCMDAwMDAxMDAwMDAwMDAwMDAxMDAwMDAyMDAwMDAwMDAwMDBENgorOjEwMkFDMDAwMDAwMDAwMDgwMDAwOUQ2MDAwMDgwMDAwMDAwMDAwMDJGNworOjEwMkFEMDAwMDAwMDlEQTAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDBCOAorOjEwMkFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNgorOjEwMkFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgorOjEwMkIwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDBDNQorOjEwMkIxMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAzNQorOjEwMkIyMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQorOjEwMkIzMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA5NQorOjEwMkI0MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwNQorOjEwMkI1MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQorOjEwMkI2MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA2NQorOjEwMkI3MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBENQorOjEwMkI4MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwMkI5MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQorOjEwMkJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQorOjEwMkJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwMkJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwMkJEMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDA3NQorOjEwMkJFMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQorOjEwMkJGMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDA0NAorOjEwMkMxMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAorOjEwMkMyMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwMkMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NAorOjEwMkM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAorOjEwMkM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NAorOjEwMkM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAorOjEwMkM3MDAwMDAwMDAwMDAwMDAwMTJDODAwODAwMDAwMDAwMDAwODA3QQorOjEwMkM4MDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMEEwMDBBMworOjEwMkM5MDAwMDcxMDAwMDAwMDAwMDcxMDAwMDAxRUM4MDAwMDAwMDAyMAorOjEwMkNBMDAwMDAwMDAwMDgwMDAwQUVDMDAwMDgwMDAwMDAwMDAwMDg5RQorOjEwMkNCMDAwMDAwMEFFNDAwMDA4MDAwMDAwMDAwMDA4MDAwMEFFODBFOAorOjEwMkNDMDAwMDAwODAwMDAwMDAwMDAwODAwMDAyMDA4MDAxMDAwMDBCQworOjEwMkNEMDAwMDAwMDAwMTAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDhCQworOjEwMkNFMDAwMDAwMEEwMTAwNzEwMDA0MDAwMDAwMDQwMDAwMEFGNDBBRQorOjEwMkNGMDAwMDAwODAwMDAwMDAwMDAwMTAwMDBBRjQxMDAwODAwMDBEMworOjEwMkQwMDAwMDAwMDAwMDEwMDAwMUVEMDAwMDAwMDAwMDAwMDAwMDFEMworOjEwMkQxMDAwMDAwMDFFRDgwMDAwMDAwMDAwMDAwMDAyMDAwMDFFREFDMworOjEwMkQyMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAxMkIwMDAwODAwMDBENworOjEwMkQzMDAwMDAwMDAwMDg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQgorOjEwMkQ0MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA4MworOjEwMkQ1MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBGMworOjEwMkQ2MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwMkQ3MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA1MworOjEwMkQ4MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBDMworOjEwMkQ5MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMworOjEwMkRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMworOjEwMkRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMworOjEwMkRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworOjEwMkREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA3MworOjEwMkRFMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDA2MworOjEwMkRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMworOjEwMkUwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDBDMgorOjEwMkUxMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAzMgorOjEwMkUyMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwMkUzMDAwMDAwMEIwMDAwMDE4MDAwMDAwMDAwMDE4MDAwMEIzMDBGRgorOjEwMkU0MDAwMDA0MDAwMDAwMDAwMDA0MDAwMDBCMzAwMDA0MDAwMDIwRAorOjEwMkU1MDAwMDAwMDAwMDEwMDAwQjMwMTAwNDAwMDAyMDAwMDAwMDA3QgorOjEwMkU2MDAwMDAwMDgwMDAwMDQwMDAwMDAwMDAwMDQwODAwMDAwMDBFMgorOjEwMkU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwODAwNDA4QQorOjEwMkU4MDAwMDAwMDAwMDQwMDAwODAwNDAwMDgwMDQwMDAwMDAwMDQ2RQorOjEwMkU5MDAwMDAwMEJCMDAwMDI4MDAwMDAwMDAwMDI4MDAwMEJDNDAyQgorOjEwMkVBMDAwMDAxMDAwMDAwMDAwMDAxMDAwMDA4ODAwMDA4MDAwMDBGQQorOjEwMkVCMDAwMDAwMDAwODAwMDAwODgwMDAwMDgwMDgwMDAwMDAwMDI4MAorOjEwMkVDMDAwMDAwMDhDMDAwMDIwMDAwMDAwMDAwMDIwMDAwMDIwMDgwRQorOjEwMkVEMDAwMDAxMDAwMDAwMDAwMDAxMDAwMDAyMDAwMDAwMDAwMDBCMgorOjEwMkVFMDAwMDAwMDAwMDgwMDAwMTEwODAwMDgwMDAwMDAwMDAwMDhCMQorOjEwMkVGMDAwMDAwMDExNjgwMDA4MDAwMDAwMDAwMDA4MDAwMDExQTg5MAorOjEwMkYwMDAwMDAwODAwMDAwMDAwMDAwODAwMDAxMjcwMDAwODAwMDAyNworOjEwMkYxMDAwMDAwMDAwMDEwMDAwMTI3MTAwMDgwMDAwMDAwMDAwMDEyNAorOjEwMkYyMDAwMDAwMDhEMDAwMDEwMDAwNDAwMDAwMDA0MDAwMDEzMjBDOQorOjEwMkYzMDAwMDAzMDAwMTgwMDAwMDAxMDAwMDAxMzI4MDAzMDAwMThCNgorOjEwMkY0MDAwMDAwMDAwMDI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgorOjEwMkY1MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExRThGOAorOjEwMkY2MDAwMDAwMDAwMDAwMDAwMDAwMTgwMDAwMDAwMDAwMDAwMDBFMAorOjEwMkY3MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwMkY4MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA0MQorOjEwMkY5MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBCMQorOjEwMkZBMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQorOjEwMkZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwMkZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorOjEwMkZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQorOjEwMkZFMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDBFMQorOjEwMkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwMzAwMDAwMDAwMDAwMDAwMDAwODMwODAwODAwMDAwMDAwMDAwODAzNQorOjEwMzAxMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDg4NworOjEwMzAyMDAwMDAxMDAwMDAwMDAwMDAxMDAwMDAyMDAwMDAwMDAwMDA2MAorOjEwMzAzMDAwMDAwMDAwMDgwMDAwOEQxMDAwMDgwMDAwMDAwMDAwMDhEQgorOjEwMzA0MDAwMDAwMDhENzAwMDA4MDAwMDAwMDAwMDA4MDAwMDg0NTA5RgorOjEwMzA1MDAwMDQ2MDAwMjgwMDAwMDQ2MDAwMDA4RUEwMDAwODAwMDA0QQorOjEwMzA2MDAwMDAwMDAwMDEwMDAwOEVBMTAwMDgwMDAwMDAwMDAwMDEyNworOjEwMzA3MDAwMDAwMDg0MDgwMDA4MDAwMDAwMDAwMDA4MDAwMDg0NDhFOAorOjEwMzA4MDAwMDAwMDAwMDAwMDAwMDAwMTAwMDA4REY0MDAwODAwMDBCNgorOjEwMzA5MDAwMDAwMDAwMDIwMDAwOERGNjAwMDgwMDAwMDAwMDAwMDJBMQorOjEwMzBBMDAwMDAwMDhFMDQwMDEwMDAwMDAwMDAwMDA0ODAwMDAwMDBGQQorOjEwMzBCMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDA5MAorOjEwMzBDMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwMzBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAorOjEwMzBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwMzBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwMzEwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDBCRgorOjEwMzExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwMzEyMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwMzEzMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDA4RgorOjEwMzE0MDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDBGRgorOjEwMzE1MDAwMDAwMDAwMDAwMDAwMzAwMDAwNDAwMDAwMDAwMDAwMDhGNworOjEwMzE2MDAwMDAwMDMwMDgwMDQwMDAwMDAwMDAwMDI4MDAwMDMzOTBGQworOjEwMzE3MDAwMDFDMDAwMTAwMDAwMDAwODAwMDAzMjAwMDAyMDAwMDAyNAorOjEwMzE4MDAwMDAwMDAwMjAwMDAwMzcyMDAwMDAwMDAwMDAwMDAwMDhDMAorOjEwMzE5MDAwMDAwMDEwMjAwNjIwMDAzODAwMDAwMDA4MDAwMEEwMDBGOQorOjEwMzFBMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzRUE5MDAwMDAwMDAxOAorOjEwMzFCMDAwMDAwMDAwMDEwMDAwM0VDODAwMDAwMDAwMDAwMDAwMDIwNgorOjEwMzFDMDAwMDAwMDFDNDAwMEUwMDAwODAwMDAwMDA4ODAwMDAwMDAzMworOjEwMzFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwODAwMDBBNworOjEwMzFFMDAwMDAwMDAwMDEwMDAwNDAwMTAwMDgwMDAwMDAwMDAwMDE5NAorOjEwMzFGMDAwMDAwMDQwNDAwMDA4MDAwNDAwMDAwMDAyMDAwMDQwNjBBMQorOjEwMzIwMDAwMDAwODAwMDQwMDAwMDAwNDAwMDA0MDAwMDAwODAwMDA2NgorOjEwMzIxMDAwMDAwMDAwMDQwMDAwNDAwNDAwMDgwMDAwMDAwMDAwMDQ1QQorOjEwMzIyMDAwMDAwMDQwNDAwMDAwMDAwMDAwMDAwMDA4MDAwMDQwNDg4RQorOjEwMzIzMDAwMDAwMDAwMDAwMDAwMDAwODAwMDA4MDAwMDAwMDAwMDAwNgorOjEwMzI0MDAwMDAwMDAwMTAwMDAwNTA0MDAwMDEwMDA0MDAwMDAwMDFEOAorOjEwMzI1MDAwMDAwMDUwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDUwMDhBNgorOjEwMzI2MDAwMDAxMDAwMDAwMDAwMDAwNDAwMDA1MDBDMDAxMDAwMDBERQorOjEwMzI3MDAwMDAwMDAwMDEwMDAwNTJDNzAwMDAwMDAwMDAwMDAwMDEzMworOjEwMzI4MDAwMDAwMDUyQzYwMDAwMDAwMDAwMDAwMDAxMDAwMDMwMDBGNQorOjEwMzI5MDAwMDAzMDAwMTgwMDAwMDAwNDAwMDAzMDA0MDAzMDAwMTg2NgorOjEwMzJBMDAwMDAwMDAwMDQwMDAwMzAwODAwMzAwMDE4MDAwMDAwMDI5OAorOjEwMzJCMDAwMDAwMDMwMEEwMDMwMDAxODAwMDAwMDAyMDAwMDMwMEM0RQorOjEwMzJDMDAwMDAzMDAwMTgwMDAwMDAwMTAwMDAzMDBEMDAzMDAwMTgzMAorOjEwMzJEMDAwMDAwMDAwMDEwMDAwMzAwRTAwMzAwMDE4MDAwMDAwMDE2NgorOjEwMzJFMDAwMDAwMDMwMTAwMDMwMDAxODAwMDAwMDA0MDAwMDMwMTQwRQorOjEwMzJGMDAwMDAzMDAwMTgwMDAwMDAwNDAwMDA1MDAwMDEwMDAwODBCMQorOjEwMzMwMDAwMDAwODAwMDQwMDAwNTAwNDAxMDAwMDgwMDAwODAwMDREMAorOjEwMzMxMDAwMDAwMDAwMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDUwNjhFQgorOjEwMzMyMDAwMDEwMDAwODAwMDAwMDAwMTAwMDA1MDY5MDEwMDAwODBFMQorOjEwMzMzMDAwMDAwMDAwMDEwMDAwNTA2QzAxMDAwMDgwMDAwMDAwMDI0RAorOjEwMzM0MDAwMDAwMDUwNkUwMTAwMDA4MDAwMDAwMDAyMDAwMDUwNzA3QworOjEwMzM1MDAwMDEwMDAwODAwMDAwMDAwNDAwMDA1MDc0MDEwMDAwODBBMworOjEwMzM2MDAwMDAwMDAwMDQwMDAwNTA2NjAxMDAwMDgwMDAwMDAwMDIyMAorOjEwMzM3MDAwMDAwMDUwNjQwMTAwMDA4MDAwMDAwMDAxMDAwMDUwNjA2NworOjEwMzM4MDAwMDEwMDAwODAwMDAwMDAwMjAwMDA1MDYyMDEwMDAwODA4NworOjEwMzM5MDAwMDAwMDAwMDIwMDAwNTA1MDAxMDAwMDgwMDAwMDAwMDQwNgorOjEwMzNBMDAwMDAwMDUwNTQwMTAwMDA4MDAwMDAwMDA0MDAwMDUwNTg0QworOjEwMzNCMDAwMDEwMDAwODAwMDAwMDAwNDAwMDA1MDVDMDEwMDAwODA1QgorOjEwMzNDMDAwMDAwMDAwMDQwMDAwNTA3QzAxMDAwMDgwMDAwMDAwMDFBQgorOjEwMzNEMDAwMDAwMDUwN0QwMTAwMDA4MDAwMDAwMDAxMDAwMDQwMTg0NgorOjEwMzNFMDAwMDAxMDAwMDAwMDAwMDAwNDAwMDA0MDkwMDAxMDAwMDBFOQorOjEwMzNGMDAwMDAwMDAwMDQwMDAwNDA5ODAwMTAwMDAwMDAwMDAwMDRERAorOjEwMzQwMDAwMDAwMDQxMTAwMDAwMDAwMDAwMDAwMDAyMDAwMDQxMTIxNgorOjEwMzQxMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDA0MTE0MDAwMDAwMDA1NQorOjEwMzQyMDAwMDAwMDAwMDIwMDAwNDExNjAwMDAwMDAwMDAwMDAwMDI0MQorOjEwMzQzMDAwMDAwMDYwNDAwMDA4MDAwMDAwMDAwMDAyMDAwMDYwNDI0MAorOjEwMzQ0MDAwMDAwODAwMDAwMDAwMDAwMjAwMDA2MDQ0MDAwODAwMDBDNgorOjEwMzQ1MDAwMDAwMDAwMDQwMDAwNjA4MDAwMDgwMDAwMDAwMDAwMDg3OAorOjEwMzQ2MDAwMDAwMDYwQzAwMDQwMDAwODAwMDAwMDA4MDAwMDYwMDA4QworOjEwMzQ3MDAwMDAwODAwMDAwMDAwMDAwMjAwMDA2MDAyMDAwODAwMDBEOAorOjEwMzQ4MDAwMDAwMDAwMDEwMDAwNjAwNDAwMDgwMDAwMDAwMDAwMDJDRAorOjEwMzQ5MDAwMDAwMDYzNDAwMDA4MDAwMDAwMDAwMDA4MDAwMDYzODA5NgorOjEwMzRBMDAwMDAwODAwMDAwMDAwMDAwNDAwMDA2Mzg0MDAwODAwMDAyMQorOjEwMzRCMDAwMDAwMDAwMDEwMDAwNjNDMDAwMDgwMDAwMDAwMDAwMDJERQorOjEwMzRDMDAwMDAwMDYzQzQwMDA4MDAwMDAwMDAwMDAyMDAwMDY0MDA2NworOjEwMzREMDAwMDAwODAwMDAwMDAwMDAwNDAwMDA3MDAwMDAxMDAwMDA2MAorOjEwMzRFMDAwMDAwMDAwMDQwMDAwNzAwNDAwMTAwMDAwMDAwMDAwMDQ1MAorOjEwMzRGMDAwMDAwMDcwMDgwMDEwMDAwMDAwMDAwMDA0MDAwMDcwMDBEMAorOjEwMzUwMDAwMDAwODAwMDAwMDAwMDAwMjAwMDA3MDAyMDAwODAwMDAzNworOjEwMzUxMDAwMDAwMDAwMDEwMDAwNzAwNDAwMDgwMDAwMDAwMDAwMDIyQworOjEwMzUyMDAwMDAwMDcwNDAwMDA4MDAwMDAwMDAwMDAyMDAwMDcwNDQyRAorOjEwMzUzMDAwMDAwODAwMDAwMDAwMDAwMjAwMDA3MDQ2MDAwODAwMDBDMworOjEwMzU0MDAwMDAwMDAwMDIwMDAwNzY0ODAwMDgwMDAwMDAwMDAwMDhBQgorOjEwMzU1MDAwMDAwMDcwODAwMDA4MDAwMDAwMDAwMDAyMDAwMDcwODQ3RAorOjEwMzU2MDAwMDAwODAwMDAwMDAwMDAwMjAwMDA3Njg4MDAwODAwMDA0QgorOjEwMzU3MDAwMDAwMDAwMDgwMDAwODA0MDAwMDgwMDAwMDAwMDAwMDE3QQorOjEwMzU4MDAwMDAwMDgwNDEwMDA4MDAwMDAwMDAwMDAxMDAwMDgwNDJBRgorOjEwMzU5MDAwMDAwODAwMDAwMDAwMDAwMTAwMDA4MDQzMDAwODAwMDA1NworOjEwMzVBMDAwMDAwMDAwMDEwMDAwODAwMDAwMDgwMDAwMDAwMDAwMDI5MAorOjEwMzVCMDAwMDAwMDgwMDIwMDA4MDAwMDAwMDAwMDAxMDAwMDgwMDRGQworOjEwMzVDMDAwMDAwODAwMDAwMDAwMDAwMjAwMDA4MEMwMDAwODAwMDBBOQorOjEwMzVEMDAwMDAwMDAwMDIwMDAwODBDMjAwMDgwMDAwMDAwMDAwMDI5RAorOjEwMzVFMDAwMDAwMDgwQzQwMDA4MDAwMDAwMDAwMDAyMDAwMDgwODA4RAorOjEwMzVGMDAwMDAwODAwMDAwMDAwMDAwMTAwMDA4MDgxMDAwODAwMDBCOQorOjEwMzYwMDAwMDAwMDAwMDEwMDAwODA4MjAwMDgwMDAwMDAwMDAwMDFBRQorOjEwMzYxMDAwMDAwMDgwODMwMDA4MDAwMDAwMDAwMDAxMDAwMDgwODQ5QQorOjEwMzYyMDAwMDAwODAwMDAwMDAwMDAwMTAwMDA4MDg1MDAwODAwMDA4NAorOjEwMzYzMDAwMDAwMDAwMDEwMDAwODA4NjAwMDgwMDAwMDAwMDAwMDE3QQorOjEwMzY0MDAwMDAwMDYwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDYwMDJBRQorOjEwMzY1MDAwMDAwODAwMDAwMDAwMDAwMTAwMDA2MDA0MDAwODAwMDBGNQorOjEwMzY2MDAwMDAwMDAwMDIwMDAwNjA0MjAwQzAwMDE4MDAwMDAwMDJEQworOjEwMzY3MDAwMDAwMDYwNDAwMEMwMDAxODAwMDAwMDAyMDAwMDYwNEMyNAorOjEwMzY4MDAwMDBDMDAwMTgwMDAwMDAwODAwMDA2MDQ0MDBDMDAwMThERQorOjEwMzY5MDAwMDAwMDAwMDgwMDAwNjA1NzAwQzAwMDE4MDAwMDAwMDE5MgorOjEwMzZBMDAwMDAwMDYwNTQwMEMwMDAxODAwMDAwMDAyMDAwMDYwNTZENgorOjEwMzZCMDAwMDBDMDAwMTgwMDAwMDAwMTAwMDA2NjQwMDAwODAwMDA4MworOjEwMzZDMDAwMDAwMDAwMDgwMDAwNjY4MDAwMDgwMDAwMDAwMDAwMDhGQworOjEwMzZEMDAwMDAwMDY2QzAwMDA4MDAwMDAwMDAwMDA4MDAwMEQ5NDI5OQorOjEwMzZFMDAwMDAxODAwMDAwMDAwMDAwMjAwMDBERTQwMDAwMDAwMDBBMgorOjEwMzZGMDAwMDAwMDAwMDAwMDAwRTAwMDAwMDAwMDAwMDAwMDAwMDRFNgorOjEwMzcwMDAwMDAwMERENDAwMDAwMDAwMDAwMDAwMDA0MDAwMERENDQ3NworOjEwMzcxMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDBERDQ4MDAwMDAwMDA4MAorOjEwMzcyMDAwMDAwMDAwMDQwMDAwREQ0QzAwMDAwMDAwMDAwMDAwMDQ2OAorOjEwMzczMDAwMDAwMERENTAwMDAwMDAwMDAwMDAwMDA0MDAwMERENTQyNworOjEwMzc0MDAwMDAwMDAwMDAwMDAwMDAwNDAwMDBERDU4MDAwMDAwMDA0MAorOjEwMzc1MDAwMDAwMDAwMDQwMDAwREQ0MDAwMDAwMDAwMDAwMDAwMjAyOAorOjEwMzc2MDAwMDAwMERBMDAwMDAwMDAwMDAwMDAwMDA0MDAwMERBMDBBMQorOjEwMzc3MDAwMDAwMDAwMDAwMDAwMDA2ODAwMDBCQjYwMDAwMDAwMDBDNgorOjEwMzc4MDAwMDAwMDAwMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDQ2NQorOjEwMzc5MDAwMDAwMEIwQzAwMDAwMDAwMDAwMDAwMDA0MDAwMEIwQzQ0MQorOjEwMzdBMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDBCMEM4MDAwMDAwMDA5RAorOjEwMzdCMDAwMDAwMDAwMDQwMDAwQjBDMDAwMDAwMDAwMDAwMDAwMTA4NQorOjEwMzdDMDAwMDAwMEQ2QjAwMDAwMDAwMDAwMDAwMDA0MDAwMEQ2QjRFNQorOjEwMzdEMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDBENkI4MDAwMDAwMDA1NworOjEwMzdFMDAwMDAwMDAwMDQwMDAwRDZCQzAwMDAwMDAwMDAwMDAwMDQzRgorOjEwMzdGMDAwMDAwMEQ2QjAwMDAwMDAwMDAwMDAwMDEwMDAwMEQzNDgxOAorOjEwMzgwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDBEMzU4MDAwMDAwMDA4NQorOjEwMzgxMDAwMDAwMDAwODAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAxOAorOjEwMzgyMDAwMDAwMEQzNTgwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDA2NQorOjA4MzgzMDAwMDYwMjA5MDAwMDAwMDAwMDdGCis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvYm54MngvYm54MngtZTItNi4yLjUuMC5mdy5paGV4IGIvZmlybXdhcmUvYm54MngvYm54MngtZTItNi4yLjUuMC5mdy5paGV4CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWY5YWE2Li4wMDAwMDAwCi0tLSBhL2Zpcm13YXJlL2JueDJ4L2JueDJ4LWUyLTYuMi41LjAuZncuaWhleAorKysgL2Rldi9udWxsCkBAIC0xLDE1NDU2ICswLDAgQEAKLToxMDAwMDAwMDAwMDA1MzEwMDAwMDAwNjgwMDAwMDcwQzAwMDA1MzgwM0YKLToxMDAwMTAwMDAwMDAzMTgwMDAwMDVBOTAwMDAwMDBCMDAwMDA4QzE4RjEKLToxMDAwMjAwMDAwMDBDMTM0MDAwMDhDRDAwMDAwMDBEODAwMDE0RTA4NTAKLToxMDAwMzAwMDAwMDBGMUYwMDAwMTRFRTgwMDAwMDA3NDAwMDI0MEUwMTIKLToxMDAwNDAwMDAwMDA1MjVDMDAwMjQxNTgwMDAwMDBCODAwMDI5M0I4NjIKLToxMDAwNTAwMDAwMDEyMTNDMDAwMjk0NzgwMDAwMEZGQzAwMDNCNUI4QjkKLToxMDAwNjAwMDAwMDAwMDA0MDAwM0M1QjgwMjA0MDA0ODAwMDAwMDBGQUYKLToxMDAwNzAwMDAyMDQwMDU0MDAwMDAwNDUwMjA0MDA1QzAwMDAwMDA2NzkKLToxMDAwODAwMDAyMDQwMDcwMDAwMDAwMDQwMjA0MDA3ODAwMDAwMDAwNzgKLToxMDAwOTAwMDAyMDQwMDdDMTIxNzAwMDAwMjA0MDA4MDIyMTcwMDAwRjYKLToxMDAwQTAwMDAyMDQwMDg0MzIxNzAwMDAwNjA0MDA4ODAwMDAwMDA1RTYKLToxMDAwQjAwMDAyMDQwMDlDMTIxNTAwMDAwMjA0MDBBMDIyMTUwMDAwOUEKLToxMDAwQzAwMDAyMDQwMEE0MzIxNTAwMDAwNjA0MDBBODAwMDAwMDA0ODkKLToxMDAwRDAwMDAyMDQwMEI4MDIxMDAwMDAwMjA0MDBCQzAwMTAwMDAwN0UKLToxMDAwRTAwMDAyMDQwMEMwMTAxMDAwMDAwMjA0MDBDNDIwMTAwMDAwMzAKLToxMDAwRjAwMDAyMDQwMEM4MzAxMDAwMDAwMjA0MDBDQzQwMTAwMDAwRDAKLToxMDAxMDAwMDA2MDQwMEQwMDAwMDAwMDMwMjA0MDBEQzAwMTAwMDAwMjAKLToxMDAxMTAwMDAyMDQwMEUwMTIxNDAwMDAwMjA0MDBFNDIyMTQwMDAwQjMKLToxMDAxMjAwMDAyMDQwMEU4MzIxNDAwMDAwMjA0MDBFQzQyMTQwMDAwNTMKLToxMDAxMzAwMDA2MDQwMEYwMDAwMDAwMDMwMTA0MDEyNDAwMDAwMDAwOTgKLToxMDAxNDAwMDAxMDQwMTI4MDAwMDAwMDAwMTA0MDEyQzAwMDAwMDAwNEYKLToxMDAxNTAwMDAxMDQwMTMwMDAwMDAwMDAwMjA0MDFEMDAwMDA4OTA2MDMKLToxMDAxNjAwMDAyMDQwMjU4MDAwMDAwMzYwMjA0MDI1QzAwMDAwMDM2NUYKLToxMDAxNzAwMDAyMDQwMjYwMDgxMDAwMDAwMjA0MDI2NDA4MTAwMDAwN0IKLToxMDAxODAwMDAyMDQwMDA0MDAwMDAwRkYwMjA0MDAwODAwMDAwMEZGNTkKLToxMDAxOTAwMDAyMDQwMDBDMDAwMDAwRkYwMjA0MDAxMDAwMDAwMEZGMzkKLToxMDAxQTAwMDAyMDQwMDE0MDAwMDAwN0YwMjA0MDAxODAwMDAwMEZGOTkKLToxMDAxQjAwMDAyMDQwMDFDMDAwMDAwRkYwMjA0MDAyMDAwMDAwMEZGRjkKLToxMDAxQzAwMDAyMDQwMDI0MDAwMDAwM0UwMjA0MDAyODAwMDAwMDAwOTkKLToxMDAxRDAwMDAyMDQwMDJDMDAwMDAwM0YwMjA0MDAzMDAwMDAwMDNGMzkKLToxMDAxRTAwMDAyMDQwMDM0MDAwMDAwM0YwMjA0MDAzODAwMDAwMDNGMTkKLToxMDAxRjAwMDAyMDQwMDNDMDAwMDAwM0YwMjA0MDA0MDAwMDAwMDNGRjkKLToxMDAyMDAwMDAyMDQwMDQ0MDAwMDAwM0YwMjA0MDRDQzAwMDAwMDAxOEUKLToxMDAyMTAwMDAyMDQyMDA4MDAwMDAyMTEwMjA0MjAwQzAwMDAwMjAwNjkKLToxMDAyMjAwMDAyMDQyMDEwMDAwMDAyMDQwMjA0MjAxNDAwMDAwMjE5M0QKLToxMDAyMzAwMDAyMDQyMDFDMDAwMEZGRkYwMjA0MjAyMDAwMDBGRkZGM0EKLToxMDAyNDAwMDAyMDQyMDI0MDAwMEZGRkYwMjA0MjAyODAwMDBGRkZGMUEKLToxMDAyNTAwMDAyMDQyMDM4MDAwMDAwMjAwNjA0MjAzQzAwMDAwMDBGQUIKLToxMDAyNjAwMDAyMDQyMDc4MDAwMDAwMjEwNjA0MjA3QzAwMDAwMDBGMUEKLToxMDAyNzAwMDAyMDQyMEI4MDAwMDAwMDEwNjA0MjBCQzAwMDAwMDBGQUEKLToxMDAyODAwMDAyMDQyMEY4MDAwMDAwMDEwNjA0MjBGQzAwMDAwMDNGRUEKLToxMDAyOTAwMDAyMDQyMUY4MDAwMDAwMDEwNjA0MjFGQzAwMDAwMDBGMDgKLToxMDAyQTAwMDAyMDQyMjM4MDdGRkZGRkYwMjA0MjIzQzAwMDAwMDdGMDcKLToxMDAyQjAwMDAyMDQyMjQwMDdGRkZGRkYwMjA0MjI0NDAwMDAwMDNGMjcKLToxMDAyQzAwMDAxMDQyMjQ4MDAwMDAwMDAwMTA0MjI0QzAwMDAwMDAwNEMKLToxMDAyRDAwMDAxMDQyMjUwMDAwMDAwMDAwMTA0MjI1NDAwMDAwMDAwMkMKLToxMDAyRTAwMDAxMDQyMjU4MDAwMDAwMDAwMTA0MjI1QzAwMDAwMDAwMEMKLToxMDAyRjAwMDAxMDQyMjYwMDAwMDAwMDAwMTA0MjI2NDAwMDAwMDAwRUMKLToxMDAzMDAwMDAxMDQyMjY4MDAwMDAwMDAwMTA0MjI2QzAwMDAwMDAwQ0IKLToxMDAzMTAwMDAxMDQyMjcwMDAwMDAwMDAwMTA0MjI3NDAwMDAwMDAwQUIKLToxMDAzMjAwMDAxMDQyMjc4MDAwMDAwMDAwMTA0MjI3QzAwMDAwMDAwOEIKLToxMDAzMzAwMDAyMDQyMkMwMDAwMEZGRkYwMjA0MjJDNDAwMDBGRkZGRUQKLToxMDAzNDAwMDAyMDQyMkM4MDAwMEZGRkYwMjA0MjJDQzAwMDBGRkZGQ0QKLToxMDAzNTAwMDBDMDQyMDAwMDAwMDAzRTgwQTA0MjAwMDAwMDAwMDAxNTMKLToxMDAzNjAwMDBCMDQyMDAwMDAwMDAwMDMwNjA1NDAwMDAwMDAwRDAwMDMKLToxMDAzNzAwMDAyMDUwMDQ0MDAwMDAwMjAwMjA1MDA0ODAwMDAwMDMyOTEKLToxMDAzODAwMDAyMDUwMDkwMDIxNTAwMjAwMjA1MDA5NDAyMTUwMDIwQ0QKLToxMDAzOTAwMDAyMDUwMDk4MDAwMDAwMzAwMjA1MDA5QzA4MTAwMDAwRDMKLToxMDAzQTAwMDAyMDUwMEEwMDAwMDAwMzYwMjA1MDBBNDAwMDAwMDMwOTUKLToxMDAzQjAwMDAyMDUwMEE4MDAwMDAwMzEwMjA1MDBCMDAwMDAwMDA0QTIKLToxMDAzQzAwMDAyMDUwMEI0MDAwMDAwMDUwMjA1MDBDMDAwMDAwMDAwQTYKLToxMDAzRDAwMDAyMDUwMEM0MDAwMDAwMDQwMjA1MDBENDAwMDAwMDAxNzIKLToxMDAzRTAwMDAyMDUwMTE0MDAwMDAwMDEwMjA1MDExQzAwMDAwMDAxQ0IKLToxMDAzRjAwMDAyMDUwMTIwMDAwMDAwMDIwMjA1MDIwNDAwMDAwMDAxQzUKLToxMDA0MDAwMDAyMDUwMjBDMDAwMDAwNDAwMjA1MDIxMDAwMDAwMDQwM0UKLToxMDA0MTAwMDAyMDUwMjFDMDAwMDAwMjAwMjA1MDIyMDAwMDAwMDFDNTIKLToxMDA0MjAwMDAyMDUwMjI0MDAwMDAwMjAwNjA1MDI0MDAwMDAwMDBBMjgKLToxMDA0MzAwMDA0MDUwMjgwMDAyMDAwMDAwMjA1MDA1MDAwMDAwMDA3QjMKLToxMDA0NDAwMDAyMDUwMDU0MDAwMDAwMDcwMjA1MDA1ODAwMDAwMDAwRUIKLToxMDA0NTAwMDAyMDUwMDVDMDAwMDAwMDgwMjA1MDA2MDAwMDAwMDAxQzkKLToxMDA0NjAwMDA2MDUwMDY0MDAwMDAwMDMwMjA1MDBEODAwMDAwMDA2MzUKLToxMDA0NzAwMDAyMDUwMDA0MDAwMDAwMDEwMjA1MDAwODAwMDAwMDAxNjAKLToxMDA0ODAwMDAyMDUwMDBDMDAwMDAwMDEwMjA1MDAxMDAwMDAwMDAxNDAKLToxMDA0OTAwMDAyMDUwMDE0MDAwMDAwMDEwMjA1MDAxODAwMDAwMDAxMjAKLToxMDA0QTAwMDAyMDUwMDFDMDAwMDAwMDEwMjA1MDAyMDAwMDAwMDAxMDAKLToxMDA0QjAwMDAyMDUwMDI0MDAwMDAwMDEwMjA1MDAyODAwMDAwMDAxRTAKLToxMDA0QzAwMDAyMDUwMDJDMDAwMDAwMDEwMjA1MDAzMDAwMDAwMDAxQzAKLToxMDA0RDAwMDAyMDUwMDM0MDAwMDAwMDEwMjA1MDAzODAwMDAwMDAxQTAKLToxMDA0RTAwMDAyMDUwMDNDMDAwMDAwMDEwMjA1MDA0MDAwMDAwMDAxODAKLToxMDA0RjAwMDAyMDUwMEUwMDAwMDAwMEQwMjA1MDBFODAwMDAwMDAwMTkKLToxMDA1MDAwMDAyMDUwMEYwMDAwMDAwMDAwMjA1MDBGODAwMDAwMDAwRjUKLToxMDA1MTAwMDAyMDUwMEU0MDAwMDAwMkQwMjA1MDBFQzAwMDAwMDIwQjAKLToxMDA1MjAwMDAyMDUwMEY0MDAwMDAwMjAwMjA1MDBGQzAwMDAwMDIwOEQKLToxMDA1MzAwMDAyMDUwMEUwMDAwMDAwMUQwMjA1MDBFODAwMDAwMDEwQjgKLToxMDA1NDAwMDAyMDUwMEYwMDAwMDAwMTAwMjA1MDBGODAwMDAwMDEwOTUKLToxMDA1NTAwMDAyMDUwMEU0MDAwMDAwM0QwMjA1MDBFQzAwMDAwMDMwNTAKLToxMDA1NjAwMDAyMDUwMEY0MDAwMDAwMzAwMjA1MDBGQzAwMDAwMDMwMkQKLToxMDA1NzAwMDAyMDUwMEUwMDAwMDAwNEQwMjA1MDBFODAwMDAwMDQwMTgKLToxMDA1ODAwMDAyMDUwMEYwMDAwMDAwNDAwMjA1MDBGODAwMDAwMDQwRjUKLToxMDA1OTAwMDAyMDUwMEU0MDAwMDAwNkQwMjA1MDBFQzAwMDAwMDYwQjAKLToxMDA1QTAwMDAyMDUwMEY0MDAwMDAwNjAwMjA1MDBGQzAwMDAwMDYwOEQKLToxMDA1QjAwMDAyMDUwMEUwMDAwMDAwNUQwMjA1MDBFODAwMDAwMDUwQjgKLToxMDA1QzAwMDAyMDUwMEYwMDAwMDAwNTAwMjA1MDBGODAwMDAwMDUwOTUKLToxMDA1RDAwMDAyMDUwMEU0MDAwMDAwN0QwMjA1MDBFQzAwMDAwMDcwNTAKLToxMDA1RTAwMDAyMDUwMEY0MDAwMDAwNzAwMjA1MDBGQzAwMDAwMDcwMkQKLToxMDA1RjAwMDA0MDYxMDAwMDIwMDAwMjAwMjA2MDBEQzAwMDAwMDAxREEKLToxMDA2MDAwMDA0MDYwMjAwMDAwMzAyMjAwMjA2MDBEQzAwMDAwMDAwRDUKLToxMDA2MTAwMDA3MTgwNDAwMDBBRDAwMDAwODE4MDdEODAwMDUwMjIzRTEKLToxMDA2MjAwMDA3MUMwMDAwMjk5MjAwMDAwNzFDODAwMDMxMkEwQTY1N0YKLToxMDA2MzAwMDA3MUQwMDAwMzRBMzE2QjAwNzFEODAwMDJFN0EyM0Q5QjEKLToxMDA2NDAwMDA3MUUwMDAwMDM1MDJGNzgwODFFMDdGMDNGMDIwMjI1MDYKLToxMDA2NTAwMDAyMTgwMEJDMDAwMDAwMzAwMTE4MDAwMDAwMDAwMDAwN0IKLToxMDA2NjAwMDAxMTgwMDA0MDAwMDAwMDAwMTE4MDAwODAwMDAwMDAwNEMKLToxMDA2NzAwMDAxMTgwMDBDMDAwMDAwMDAwMTE4MDAxMDAwMDAwMDAwMkMKLToxMDA2ODAwMDAxMTgwMDE0MDAwMDAwMDAwMjE4MDAyMDAwMDAwMDAxMDIKLToxMDA2OTAwMDAyMTgwMDI0MDAwMDAwMDIwMjE4MDAyODAwMDAwMDAzRDUKLToxMDA2QTAwMDAyMTgwMDJDMDAwMDAwMDAwMjE4MDAzMDAwMDAwMDA0QjYKLToxMDA2QjAwMDAyMTgwMDM0MDAwMDAwMDEwMjE4MDAzODAwMDAwMDAwOTkKLToxMDA2QzAwMDAyMTgwMDNDMDAwMDAwMDEwMjE4MDA0MDAwMDAwMDA0NzUKLToxMDA2RDAwMDAyMTgwMDQ0MDAwMDAwMDAwMjE4MDA0ODAwMDAwMDAxNTkKLToxMDA2RTAwMDAyMTgwMDRDMDAwMDAwMDMwMjE4MDA1MDAwMDAwMDAwMzcKLToxMDA2RjAwMDAyMTgwMDU0MDAwMDAwMDEwMjE4MDA1ODAwMDAwMDA0MTUKLToxMDA3MDAwMDAyMTgwMDVDMDAwMDAwMDAwMjE4MDA2MDAwMDAwMDAxRjgKLToxMDA3MTAwMDAyMTgwMDY0MDAwMDAwMDMwMjE4MDA2ODAwMDAwMDAwRDYKLToxMDA3MjAwMDAyMTgwMDZDMDAwMDAwMDEwMjE4MDA3MDAwMDAwMDA0QjQKLToxMDA3MzAwMDAyMTgwMDc0MDAwMDAwMDAwMjE4MDA3ODAwMDAwMDA0OTUKLToxMDA3NDAwMDAyMTgwMDdDMDAwMDAwMDMwNjE4MDA4MDAwMDAwMDAyNzAKLToxMDA3NTAwMDAyMTgwMEE0MDAwMDdGRkYwMjE4MDBBODAwMDAwM0ZGOTkKLToxMDA3NjAwMDAyMTgwMjI0MDAwMDAwMDAwMjE4MDIzNDAwMDAwMDAwRjkKLToxMDA3NzAwMDAyMTgwMjRDMDAwMDAwMDAwMjE4MDJFNDAwMDAwMEZGMTIKLToxMDA3ODAwMDA2MTgxMDAwMDAwMDA0MDAwMjFCOEJDMDAwMDAwMDAxQ0UKLToxMDA3OTAwMDAyMUI4MDAwMDAwMDAwMzQwMjFCODA0MDAwMDAwMDE4OTMKLToxMDA3QTAwMDAyMUI4MDgwMDAwMDAwMEMwMjFCODBDMDAwMDAwMDIwQTMKLToxMDA3QjAwMDBDMUI4MzAwMDAwODY0NzAwQTFCODMwMDAwMDAwMTU3QjMKLToxMDA3QzAwMDBCMUI4MzAwMDAwMDA1NUYwQTFCODM0MDAwMDAwMDAwMzQKLToxMDA3RDAwMDBDMUI4MzQwMDAwMDAyMjYwQjFCODM0MDAwMDAwMDAxMUQKLToxMDA3RTAwMDAyMUI4MzgwMDAwODY0NzAwMjFCODNDMDAwMDAwMjI2ODUKLToxMDA3RjAwMDAyMUIxNDgwMDAwMDAwMDEwQTFCMTQ4MDAwMDAwMDAwOEUKLToxMDA4MDAwMDAyMUI5NDQwMDAwMDAwMDEwNjFCOTQ0ODAwMDAwMDAyRjcKLToxMDA4MTAwMDA2MUExMDAwMDAwMDAyQjMwNDFBMUFDQzAwMDEwMjI3QzUKLToxMDA4MjAwMDA2MUExQUQwMDAwMDAwMDgwNjFBMjAwODAwMDAwMEM4QTYKLToxMDA4MzAwMDA2MUEyMDAwMDAwMDAwMDIwNDFBMUJGODAwOTAwMjI4OEIKLToxMDA4NDAwMDA2MUEzNzE4MDAwMDAwMDQwNjFBMzcxMDAwMDAwMDAyQ0MKLToxMDA4NTAwMDA2MUE1MDAwMDAwMDAwMDIwNjFBNTAwODAwMDAwMDA0QUEKLToxMDA4NjAwMDA2MUE1MDE4MDAwMDAwMDQwNjFBNTAyODAwMDAwMDA0NjAKLToxMDA4NzAwMDA2MUE1MDM4MDAwMDAwMDQwNjFBNTA0ODAwMDAwMDA0MTAKLToxMDA4ODAwMDA2MUE1MDU4MDAwMDAwMDQwNjFBNTA2ODAwMDAwMDA0QzAKLToxMDA4OTAwMDA2MUE1MDc4MDAwMDAwMDIwNDFBNTJDMDAwMDIwMkI4ODIKLToxMDA4QTAwMDA2MUE0MDUwMDAwMDAwMDYwNDFBNDA2ODAwMDIwMkJBMEUKLToxMDA4QjAwMDA0MUE0MDQwMDAwNDAyQkMwNDFBODAwMDAwMDEwMkMwNzcKLToxMDA4QzAwMDA2MUE4MDA0MDAwMDAwMDMwNDFBODAxMDAwMDEwMkMxMEYKLToxMDA4RDAwMDA2MUE4MDE0MDAwMDAwMDMwNDFBODAyMDAwMDEwMkMyREUKLToxMDA4RTAwMDA2MUE4MDI0MDAwMDAwMDMwNDFBODAzMDAwMDEwMkMzQUQKLToxMDA4RjAwMDA2MUE4MDM0MDAwMDAwMDMwNDFBODA0MDAwMDEwMkM0N0MKLToxMDA5MDAwMDA2MUE4MDQ0MDAwMDAwMDMwNDFBODA1MDAwMDEwMkM1NEEKLToxMDA5MTAwMDA2MUE4MDU0MDAwMDAwMDMwNDFBODA2MDAwMDEwMkM2MTkKLToxMDA5MjAwMDA2MUE4MDY0MDAwMDAwMDMwNDFBODA3MDAwMDEwMkM3RTgKLToxMDA5MzAwMDA2MUE4MDc0MDAwMDAwMDMwNDFBODA4MDAwMDEwMkM4QjcKLToxMDA5NDAwMDA2MUE4MDg0MDAwMDAwMDMwNDFBODA5MDAwMDEwMkM5ODYKLToxMDA5NTAwMDA2MUE4MDk0MDAwMDAwMDMwNDFBODBBMDAwMDEwMkNBNTUKLToxMDA5NjAwMDA2MUE4MEE0MDAwMDAwMDMwNDFBODBCMDAwMDEwMkNCMjQKLToxMDA5NzAwMDA2MUE4MEI0MDAwMDAwMDMwNDFBODBDMDAwMDEwMkNDRjMKLToxMDA5ODAwMDA2MUE4MEM0MDAwMDAwMDMwNDFBODBEMDAwMDEwMkNEQzIKLToxMDA5OTAwMDA2MUE4MEQ0MDAwMDAwMDMwNDFBODBFMDAwMDEwMkNFOTEKLToxMDA5QTAwMDA2MUE4MEU0MDAwMDAwMDMwNDFBODBGMDAwMDEwMkNGNjAKLToxMDA5QjAwMDA2MUE4MEY0MDAwMDAwMDMwNDFBODEwMDAwMDEwMkQwMkUKLToxMDA5QzAwMDA2MUE4MTA0MDAwMDAwMDMwNDFBODExMDAwMDEwMkQxRkMKLToxMDA5RDAwMDA2MUE4MTE0MDAwMDAwMDMwNDFBODEyMDAwMDEwMkQyQ0IKLToxMDA5RTAwMDA2MUE4MTI0MDAwMDAwMDMwNDFBODEzMDAwMDEwMkQzOUEKLToxMDA5RjAwMDA2MUE4MTM0MDAwMDAwMDMwNDFBODE0MDAwMDEwMkQ0NjkKLToxMDBBMDAwMDA2MUE4MTQ0MDAwMDAwMDMwNDFBODE1MDAwMDEwMkQ1MzcKLToxMDBBMTAwMDA2MUE4MTU0MDAwMDAwMDMwNDFBODE2MDAwMDEwMkQ2MDYKLToxMDBBMjAwMDA2MUE4MTY0MDAwMDAwMDMwNDFBODE3MDAwMDEwMkQ3RDUKLToxMDBBMzAwMDA2MUE4MTc0MDAwMDAwMDMwNDFBODE4MDAwMDEwMkQ4QTQKLToxMDBBNDAwMDA2MUE4MTg0MDAwMDAwMDMwNDFBODE5MDAwMDEwMkQ5NzMKLToxMDBBNTAwMDA2MUE4MTk0MDAwMDAwMDMwNDFBODFBMDAwMDEwMkRBNDIKLToxMDBBNjAwMDA2MUE4MUE0MDAwMDAwMDMwNDFBODFCMDAwMDEwMkRCMTEKLToxMDBBNzAwMDA2MUE4MUI0MDAwMDAwMDMwNDFBODFDMDAwMDEwMkRDRTAKLToxMDBBODAwMDA2MUE4MUM0MDAwMDAwMDMwNDFBODFEMDAwMDEwMkREQUYKLToxMDBBOTAwMDA2MUE4MUQ0MDAwMDAwMDMwNDFBODFFMDAwMDEwMkRFN0UKLToxMDBBQTAwMDA2MUE4MUU0MDAwMDAwMDMwNDFBODFGMDAwMDEwMkRGNEQKLToxMDBBQjAwMDA2MUE4MUY0MDAwMDAwMDMwNDFBODIwMDAwMDEwMkUwMUIKLToxMDBBQzAwMDA2MUE4MjA0MDAwMDAwMDMwNDFBODIxMDAwMDEwMkUxRTkKLToxMDBBRDAwMDA2MUE4MjE0MDAwMDAwMDMwNDFBODIyMDAwMDEwMkUyQjgKLToxMDBBRTAwMDA2MUE4MjI0MDAwMDAwMDMwNDFBODIzMDAwMDEwMkUzODcKLToxMDBBRjAwMDA2MUE4MjM0MDAwMDAwMDMwNDFBODI0MDAwMDEwMkU0NTYKLToxMDBCMDAwMDA2MUE4MjQ0MDAwMDAwMDMwNDFBODI1MDAwMDEwMkU1MjQKLToxMDBCMTAwMDA2MUE4MjU0MDAwMDAwMDMwNDFBODI2MDAwMDEwMkU2RjMKLToxMDBCMjAwMDA2MUE4MjY0MDAwMDAwMDMwNDFBODI3MDAwMDEwMkU3QzIKLToxMDBCMzAwMDA2MUE4Mjc0MDAwMDAwMDMwNDFBODI4MDAwMDEwMkU4OTEKLToxMDBCNDAwMDA2MUE4Mjg0MDAwMDAwMDMwNDFBODI5MDAwMDEwMkU5NjAKLToxMDBCNTAwMDA2MUE4Mjk0MDAwMDAwMDMwNDFBODJBMDAwMDEwMkVBMkYKLToxMDBCNjAwMDA2MUE4MkE0MDAwMDAwMDMwNDFBODJCMDAwMDEwMkVCRkUKLToxMDBCNzAwMDA2MUE4MkI0MDAwMDAwMDMwNDFBODJDMDAwMDEwMkVDQ0QKLToxMDBCODAwMDA2MUE4MkM0MDAwMDAwMDMwNDFBODJEMDAwMDEwMkVEOUMKLToxMDBCOTAwMDA2MUE4MkQ0MDAwMDAwMDMwNDFBODJFMDAwMDEwMkVFNkIKLToxMDBCQTAwMDA2MUE4MkU0MDAwMDAwMDMwNDFBODJGMDAwMDEwMkVGM0EKLToxMDBCQjAwMDA2MUE4MkY0MDAwMDAwMDMwNDFBODMwMDAwMDEwMkYwMDgKLToxMDBCQzAwMDA2MUE4MzA0MDAwMDAwMDMwNDFBODMxMDAwMDEwMkYxRDYKLToxMDBCRDAwMDA2MUE4MzE0MDAwMDAwMDMwNDFBODMyMDAwMDEwMkYyQTUKLToxMDBCRTAwMDA2MUE4MzI0MDAwMDAwMDMwNDFBODMzMDAwMDEwMkYzNzQKLToxMDBCRjAwMDA2MUE4MzM0MDAwMDAwMDMwNDFBODM0MDAwMDEwMkY0NDMKLToxMDBDMDAwMDA2MUE4MzQ0MDAwMDAwMDMwNDFBODM1MDAwMDEwMkY1MTEKLToxMDBDMTAwMDA2MUE4MzU0MDAwMDAwMDMwNDFBODM2MDAwMDEwMkY2RTAKLToxMDBDMjAwMDA2MUE4MzY0MDAwMDAwMDMwNDFBODM3MDAwMDEwMkY3QUYKLToxMDBDMzAwMDA2MUE4Mzc0MDAwMDAwMDMwNDFBODM4MDAwMDEwMkY4N0UKLToxMDBDNDAwMDA2MUE4Mzg0MDAwMDAwMDMwNDFBODM5MDAwMDEwMkY5NEQKLToxMDBDNTAwMDA2MUE4Mzk0MDAwMDAwMDMwNDFBODNBMDAwMDEwMkZBMUMKLToxMDBDNjAwMDA2MUE4M0E0MDAwMDAwMDMwNDFBODNCMDAwMDEwMkZCRUIKLToxMDBDNzAwMDA2MUE4M0I0MDAwMDAwMDMwNDFBODNDMDAwMDEwMkZDQkEKLToxMDBDODAwMDA2MUE4M0M0MDAwMDAwMDMwNDFBODNEMDAwMDEwMkZEODkKLToxMDBDOTAwMDA2MUE4M0Q0MDAwMDAwMDMwNDFBODNFMDAwMDEwMkZFNTgKLToxMDBDQTAwMDA2MUE4M0U0MDAwMDAwMDMwNDFBODNGMDAwMDEwMkZGMjcKLToxMDBDQjAwMDA2MUE4M0Y0MDAwMDAwMDMwNDFBODQwMDAwMDEwMzAwRjQKLToxMDBDQzAwMDA2MUE4NDA0MDAwMDAwMDMwNDFBODQxMDAwMDEwMzAxQzIKLToxMDBDRDAwMDA2MUE4NDE0MDAwMDAwMDMwNDFBODQyMDAwMDEwMzAyOTEKLToxMDBDRTAwMDA2MUE4NDI0MDAwMDAwMDMwNDFBODQzMDAwMDEwMzAzNjAKLToxMDBDRjAwMDA2MUE4NDM0MDAwMDAwMDMwNDFBODQ0MDAwMDEwMzA0MkYKLToxMDBEMDAwMDA2MUE4NDQ0MDAwMDAwMDMwNDFBODQ1MDAwMDEwMzA1RkQKLToxMDBEMTAwMDA2MUE4NDU0MDAwMDAwMDMwNDFBODQ2MDAwMDEwMzA2Q0MKLToxMDBEMjAwMDA2MUE4NDY0MDAwMDAwMDMwNDFBODQ3MDAwMDEwMzA3OUIKLToxMDBEMzAwMDA2MUE4NDc0MDAwMDAwMDMwNDFBODQ4MDAwMDEwMzA4NkEKLToxMDBENDAwMDA2MUE4NDg0MDAwMDAwMDMwNDFBODQ5MDAwMDEwMzA5MzkKLToxMDBENTAwMDA2MUE4NDk0MDAwMDAwMDMwNDFBODRBMDAwMDEwMzBBMDgKLToxMDBENjAwMDA2MUE4NEE0MDAwMDAwMDMwNDFBODRCMDAwMDEwMzBCRDcKLToxMDBENzAwMDA2MUE4NEI0MDAwMDAwMDMwNDFBODRDMDAwMDEwMzBDQTYKLToxMDBEODAwMDA2MUE4NEM0MDAwMDAwMDMwNDFBODREMDAwMDEwMzBENzUKLToxMDBEOTAwMDA2MUE4NEQ0MDAwMDAwMDMwNDFBODRFMDAwMDEwMzBFNDQKLToxMDBEQTAwMDA2MUE4NEU0MDAwMDAwMDMwNDFBODRGMDAwMDEwMzBGMTMKLToxMDBEQjAwMDA2MUE4NEY0MDAwMDAwMDMwNDFBODUwMDAwMDEwMzEwRTEKLToxMDBEQzAwMDA2MUE4NTA0MDAwMDAwMDMwNDFBODUxMDAwMDEwMzExQUYKLToxMDBERDAwMDA2MUE4NTE0MDAwMDAwMDMwNDFBODUyMDAwMDEwMzEyN0UKLToxMDBERTAwMDA2MUE4NTI0MDAwMDAwMDMwNDFBODUzMDAwMDEwMzEzNEQKLToxMDBERjAwMDA2MUE4NTM0MDAwMDAwMDMwNDFBODU0MDAwMDEwMzE0MUMKLToxMDBFMDAwMDA2MUE4NTQ0MDAwMDAwMDMwNDFBODU1MDAwMDEwMzE1RUEKLToxMDBFMTAwMDA2MUE4NTU0MDAwMDAwMDMwNDFBODU2MDAwMDEwMzE2QjkKLToxMDBFMjAwMDA2MUE4NTY0MDAwMDAwMDMwNDFBODU3MDAwMDEwMzE3ODgKLToxMDBFMzAwMDA2MUE4NTc0MDAwMDAwMDMwNDFBODU4MDAwMDEwMzE4NTcKLToxMDBFNDAwMDA2MUE4NTg0MDAwMDAwMDMwNDFBODU5MDAwMDEwMzE5MjYKLToxMDBFNTAwMDA2MUE4NTk0MDAwMDAwMDMwNDFBODVBMDAwMDEwMzFBRjUKLToxMDBFNjAwMDA2MUE4NUE0MDAwMDAwMDMwNDFBODVCMDAwMDEwMzFCQzQKLToxMDBFNzAwMDA2MUE4NUI0MDAwMDAwMDMwNDFBODVDMDAwMDEwMzFDOTMKLToxMDBFODAwMDA2MUE4NUM0MDAwMDAwMDMwNDFBODVEMDAwMDEwMzFENjIKLToxMDBFOTAwMDA2MUE4NUQ0MDAwMDAwMDMwNDFBODVFMDAwMDEwMzFFMzEKLToxMDBFQTAwMDA2MUE4NUU0MDAwMDAwMDMwNDFBODVGMDAwMDEwMzFGMDAKLToxMDBFQjAwMDA2MUE4NUY0MDAwMDAwMDMwNDFBODYwMDAwMDEwMzIwQ0UKLToxMDBFQzAwMDA2MUE4NjA0MDAwMDAwMDMwNDFBODYxMDAwMDEwMzIxOUMKLToxMDBFRDAwMDA2MUE4NjE0MDAwMDAwMDMwNDFBODYyMDAwMDEwMzIyNkIKLToxMDBFRTAwMDA2MUE4NjI0MDAwMDAwMDMwNDFBODYzMDAwMDEwMzIzM0EKLToxMDBFRjAwMDA2MUE4NjM0MDAwMDAwMDMwNDFBODY0MDAwMDEwMzI0MDkKLToxMDBGMDAwMDA2MUE4NjQ0MDAwMDAwMDMwNDFBODY1MDAwMDEwMzI1RDcKLToxMDBGMTAwMDA2MUE4NjU0MDAwMDAwMDMwNDFBODY2MDAwMDEwMzI2QTYKLToxMDBGMjAwMDA2MUE4NjY0MDAwMDAwMDMwNDFBODY3MDAwMDEwMzI3NzUKLToxMDBGMzAwMDA2MUE4Njc0MDAwMDAwMDMwNDFBODY4MDAwMDEwMzI4NDQKLToxMDBGNDAwMDA2MUE4Njg0MDAwMDAwMDMwNDFBODY5MDAwMDEwMzI5MTMKLToxMDBGNTAwMDA2MUE4Njk0MDAwMDAwMDMwNDFBODZBMDAwMDEwMzJBRTIKLToxMDBGNjAwMDA2MUE4NkE0MDAwMDAwMDMwNDFBODZCMDAwMDEwMzJCQjEKLToxMDBGNzAwMDA2MUE4NkI0MDAwMDAwMDMwNDFBODZDMDAwMDEwMzJDODAKLToxMDBGODAwMDA2MUE4NkM0MDAwMDAwMDMwNDFBODZEMDAwMDEwMzJENEYKLToxMDBGOTAwMDA2MUE4NkQ0MDAwMDAwMDMwNDFBODZFMDAwMDEwMzJFMUUKLToxMDBGQTAwMDA2MUE4NkU0MDAwMDAwMDMwNDFBODZGMDAwMDEwMzJGRUQKLToxMDBGQjAwMDA2MUE4NkY0MDAwMDAwMDMwNDFBODcwMDAwMDEwMzMwQkIKLToxMDBGQzAwMDA2MUE4NzA0MDAwMDAwMDMwNDFBODcxMDAwMDEwMzMxODkKLToxMDBGRDAwMDA2MUE4NzE0MDAwMDAwMDMwNDFBODcyMDAwMDEwMzMyNTgKLToxMDBGRTAwMDA2MUE4NzI0MDAwMDAwMDMwNDFBODczMDAwMDEwMzMzMjcKLToxMDBGRjAwMDA2MUE4NzM0MDAwMDAwMDMwNDFBODc0MDAwMDEwMzM0RjYKLToxMDEwMDAwMDA2MUE4NzQ0MDAwMDAwMDMwNDFBODc1MDAwMDEwMzM1QzQKLToxMDEwMTAwMDA2MUE4NzU0MDAwMDAwMDMwNDFBODc2MDAwMDEwMzM2OTMKLToxMDEwMjAwMDA2MUE4NzY0MDAwMDAwMDMwNDFBODc3MDAwMDEwMzM3NjIKLToxMDEwMzAwMDA2MUE4Nzc0MDAwMDAwMDMwNDFBODc4MDAwMDEwMzM4MzEKLToxMDEwNDAwMDA2MUE4Nzg0MDAwMDAwMDMwNDFBODc5MDAwMDEwMzM5MDAKLToxMDEwNTAwMDA2MUE4Nzk0MDAwMDAwMDMwNDFBODdBMDAwMDEwMzNBQ0YKLToxMDEwNjAwMDA2MUE4N0E0MDAwMDAwMDMwNDFBODdCMDAwMDEwMzNCOUUKLToxMDEwNzAwMDA2MUE4N0I0MDAwMDAwMDMwNDFBODdDMDAwMDEwMzNDNkQKLToxMDEwODAwMDA2MUE4N0M0MDAwMDAwMDMwNDFBODdEMDAwMDEwMzNEM0MKLToxMDEwOTAwMDA2MUE4N0Q0MDAwMDAwMDMwNDFBODdFMDAwMDEwMzNFMEIKLToxMDEwQTAwMDA2MUE4N0U0MDAwMDAwMDMwNDFBODdGMDAwMDEwMzNGREEKLToxMDEwQjAwMDA2MUE4N0Y0MDAwMDAwMDMwNDFBODgwMDAwMDEwMzQwQTgKLToxMDEwQzAwMDA2MUE4ODA0MDAwMDAwMDMwNDFBODgxMDAwMDEwMzQxNzYKLToxMDEwRDAwMDA2MUE4ODE0MDAwMDAwMDMwNDFBODgyMDAwMDEwMzQyNDUKLToxMDEwRTAwMDA2MUE4ODI0MDAwMDAwMDMwNDFBODgzMDAwMDEwMzQzMTQKLToxMDEwRjAwMDA2MUE4ODM0MDAwMDAwMDMwNDFBODg0MDAwMDEwMzQ0RTMKLToxMDExMDAwMDA2MUE4ODQ0MDAwMDAwMDMwNDFBODg1MDAwMDEwMzQ1QjEKLToxMDExMTAwMDA2MUE4ODU0MDAwMDAwMDMwNDFBODg2MDAwMDEwMzQ2ODAKLToxMDExMjAwMDA2MUE4ODY0MDAwMDAwMDMwNDFBODg3MDAwMDEwMzQ3NEYKLToxMDExMzAwMDA2MUE4ODc0MDAwMDAwMDMwNDFBODg4MDAwMDEwMzQ4MUUKLToxMDExNDAwMDA2MUE4ODg0MDAwMDAwMDMwNDFBODg5MDAwMDEwMzQ5RUQKLToxMDExNTAwMDA2MUE4ODk0MDAwMDAwMDMwNDFBODhBMDAwMDEwMzRBQkMKLToxMDExNjAwMDA2MUE4OEE0MDAwMDAwMDMwNDFBODhCMDAwMDEwMzRCOEIKLToxMDExNzAwMDA2MUE4OEI0MDAwMDAwMDMwNDFBODhDMDAwMDEwMzRDNUEKLToxMDExODAwMDA2MUE4OEM0MDAwMDAwMDMwNDFBODhEMDAwMDEwMzREMjkKLToxMDExOTAwMDA2MUE4OEQ0MDAwMDAwMDMwNDFBODhFMDAwMDEwMzRFRjgKLToxMDExQTAwMDA2MUE4OEU0MDAwMDAwMDMwNDFBODhGMDAwMDEwMzRGQzcKLToxMDExQjAwMDA2MUE4OEY0MDAwMDAwMDMwNDFBODkwMDAwMDEwMzUwOTUKLToxMDExQzAwMDA2MUE4OTA0MDAwMDAwMDMwNDFBODkxMDAwMDEwMzUxNjMKLToxMDExRDAwMDA2MUE4OTE0MDAwMDAwMDMwNDFBODkyMDAwMDEwMzUyMzIKLToxMDExRTAwMDA2MUE4OTI0MDAwMDAwMDMwNDFBODkzMDAwMDEwMzUzMDEKLToxMDExRjAwMDA2MUE4OTM0MDAwMDAwMDMwNDFBODk0MDAwMDEwMzU0RDAKLToxMDEyMDAwMDA2MUE4OTQ0MDAwMDAwMDMwNDFBODk1MDAwMDEwMzU1OUUKLToxMDEyMTAwMDA2MUE4OTU0MDAwMDAwMDMwNDFBODk2MDAwMDEwMzU2NkQKLToxMDEyMjAwMDA2MUE4OTY0MDAwMDAwMDMwNDFBODk3MDAwMDEwMzU3M0MKLToxMDEyMzAwMDA2MUE4OTc0MDAwMDAwMDMwNDFBODk4MDAwMDEwMzU4MEIKLToxMDEyNDAwMDA2MUE4OTg0MDAwMDAwMDMwNDFBODk5MDAwMDEwMzU5REEKLToxMDEyNTAwMDA2MUE4OTk0MDAwMDAwMDMwNDFBODlBMDAwMDEwMzVBQTkKLToxMDEyNjAwMDA2MUE4OUE0MDAwMDAwMDMwNDFBODlCMDAwMDEwMzVCNzgKLToxMDEyNzAwMDA2MUE4OUI0MDAwMDAwMDMwNDFBODlDMDAwMDEwMzVDNDcKLToxMDEyODAwMDA2MUE4OUM0MDAwMDAwMDMwNDFBODlEMDAwMDEwMzVEMTYKLToxMDEyOTAwMDA2MUE4OUQ0MDAwMDAwMDMwNDFBODlFMDAwMDEwMzVFRTUKLToxMDEyQTAwMDA2MUE4OUU0MDAwMDAwMDMwNDFBODlGMDAwMDEwMzVGQjQKLToxMDEyQjAwMDA2MUE4OUY0MDAwMDAwMDMwNDFBOEEwMDAwMDEwMzYwODIKLToxMDEyQzAwMDA2MUE4QTA0MDAwMDAwMDMwNDFBOEExMDAwMDEwMzYxNTAKLToxMDEyRDAwMDA2MUE4QTE0MDAwMDAwMDMwNDFBOEEyMDAwMDEwMzYyMUYKLToxMDEyRTAwMDA2MUE4QTI0MDAwMDAwMDMwNDFBOEEzMDAwMDEwMzYzRUUKLToxMDEyRjAwMDA2MUE4QTM0MDAwMDAwMDMwNDFBOEE0MDAwMDEwMzY0QkQKLToxMDEzMDAwMDA2MUE4QTQ0MDAwMDAwMDMwNDFBOEE1MDAwMDEwMzY1OEIKLToxMDEzMTAwMDA2MUE4QTU0MDAwMDAwMDMwNDFBOEE2MDAwMDEwMzY2NUEKLToxMDEzMjAwMDA2MUE4QTY0MDAwMDAwMDMwNDFBOEE3MDAwMDEwMzY3MjkKLToxMDEzMzAwMDA2MUE4QTc0MDAwMDAwMDMwNDFBOEE4MDAwMDEwMzY4RjgKLToxMDEzNDAwMDA2MUE4QTg0MDAwMDAwMDMwNDFBOEE5MDAwMDEwMzY5QzcKLToxMDEzNTAwMDA2MUE4QTk0MDAwMDAwMDMwNDFBOEFBMDAwMDEwMzZBOTYKLToxMDEzNjAwMDA2MUE4QUE0MDAwMDAwMDMwNDFBOEFCMDAwMDEwMzZCNjUKLToxMDEzNzAwMDA2MUE4QUI0MDAwMDAwMDMwNDFBOEFDMDAwMDEwMzZDMzQKLToxMDEzODAwMDA2MUE4QUM0MDAwMDAwMDMwNDFBOEFEMDAwMDEwMzZEMDMKLToxMDEzOTAwMDA2MUE4QUQ0MDAwMDAwMDMwNDFBOEFFMDAwMDEwMzZFRDIKLToxMDEzQTAwMDA2MUE4QUU0MDAwMDAwMDMwNDFBOEFGMDAwMDEwMzZGQTEKLToxMDEzQjAwMDA2MUE4QUY0MDAwMDAwMDMwNDFBOEIwMDAwMDEwMzcwNkYKLToxMDEzQzAwMDA2MUE4QjA0MDAwMDAwMDMwNDFBOEIxMDAwMDEwMzcxM0QKLToxMDEzRDAwMDA2MUE4QjE0MDAwMDAwMDMwNDFBOEIyMDAwMDEwMzcyMEMKLToxMDEzRTAwMDA2MUE4QjI0MDAwMDAwMDMwNDFBOEIzMDAwMDEwMzczREIKLToxMDEzRjAwMDA2MUE4QjM0MDAwMDAwMDMwNDFBOEI0MDAwMDEwMzc0QUEKLToxMDE0MDAwMDA2MUE4QjQ0MDAwMDAwMDMwNDFBOEI1MDAwMDEwMzc1NzgKLToxMDE0MTAwMDA2MUE4QjU0MDAwMDAwMDMwNDFBOEI2MDAwMDEwMzc2NDcKLToxMDE0MjAwMDA2MUE4QjY0MDAwMDAwMDMwNDFBOEI3MDAwMDEwMzc3MTYKLToxMDE0MzAwMDA2MUE4Qjc0MDAwMDAwMDMwNDFBOEI4MDAwMDEwMzc4RTUKLToxMDE0NDAwMDA2MUE4Qjg0MDAwMDAwMDMwNDFBOEI5MDAwMDEwMzc5QjQKLToxMDE0NTAwMDA2MUE4Qjk0MDAwMDAwMDMwNDFBOEJBMDAwMDEwMzdBODMKLToxMDE0NjAwMDA2MUE4QkE0MDAwMDAwMDMwNDFBOEJCMDAwMDEwMzdCNTIKLToxMDE0NzAwMDA2MUE4QkI0MDAwMDAwMDMwNDFBOEJDMDAwMDEwMzdDMjEKLToxMDE0ODAwMDA2MUE4QkM0MDAwMDAwMDMwNDFBOEJEMDAwMDEwMzdERjAKLToxMDE0OTAwMDA2MUE4QkQ0MDAwMDAwMDMwNDFBOEJFMDAwMDEwMzdFQkYKLToxMDE0QTAwMDA2MUE4QkU0MDAwMDAwMDMwNDFBOEJGMDAwMDEwMzdGOEUKLToxMDE0QjAwMDA2MUE4QkY0MDAwMDAwMDMwNDFBOEMwMDAwMDEwMzgwNUMKLToxMDE0QzAwMDA2MUE4QzA0MDAwMDAwMDMwNDFBOEMxMDAwMDEwMzgxMkEKLToxMDE0RDAwMDA2MUE4QzE0MDAwMDAwMDMwNDFBOEMyMDAwMDEwMzgyRjkKLToxMDE0RTAwMDA2MUE4QzI0MDAwMDAwMDMwNDFBOEMzMDAwMDEwMzgzQzgKLToxMDE0RjAwMDA2MUE4QzM0MDAwMDAwMDMwNDFBOEM0MDAwMDEwMzg0OTcKLToxMDE1MDAwMDA2MUE4QzQ0MDAwMDAwMDMwNDFBOEM1MDAwMDEwMzg1NjUKLToxMDE1MTAwMDA2MUE4QzU0MDAwMDAwMDMwNDFBOEM2MDAwMDEwMzg2MzQKLToxMDE1MjAwMDA2MUE4QzY0MDAwMDAwMDMwNDFBOEM3MDAwMDEwMzg3MDMKLToxMDE1MzAwMDA2MUE4Qzc0MDAwMDAwMDMwNDFBOEM4MDAwMDEwMzg4RDIKLToxMDE1NDAwMDA2MUE4Qzg0MDAwMDAwMDMwNDFBOEM5MDAwMDEwMzg5QTEKLToxMDE1NTAwMDA2MUE4Qzk0MDAwMDAwMDMwNDFBOENBMDAwMDEwMzhBNzAKLToxMDE1NjAwMDA2MUE4Q0E0MDAwMDAwMDMwNDFBOENCMDAwMDEwMzhCM0YKLToxMDE1NzAwMDA2MUE4Q0I0MDAwMDAwMDMwNDFBOENDMDAwMDEwMzhDMEUKLToxMDE1ODAwMDA2MUE4Q0M0MDAwMDAwMDMwNDFBOENEMDAwMDEwMzhEREQKLToxMDE1OTAwMDA2MUE4Q0Q0MDAwMDAwMDMwNDFBOENFMDAwMDEwMzhFQUMKLToxMDE1QTAwMDA2MUE4Q0U0MDAwMDAwMDMwNDFBOENGMDAwMDEwMzhGN0IKLToxMDE1QjAwMDA2MUE4Q0Y0MDAwMDAwMDMwNDFBOEQwMDAwMDEwMzkwNDkKLToxMDE1QzAwMDA2MUE4RDA0MDAwMDAwMDMwNDFBOEQxMDAwMDEwMzkxMTcKLToxMDE1RDAwMDA2MUE4RDE0MDAwMDAwMDMwNDFBOEQyMDAwMDEwMzkyRTYKLToxMDE1RTAwMDA2MUE4RDI0MDAwMDAwMDMwNDFBOEQzMDAwMDEwMzkzQjUKLToxMDE1RjAwMDA2MUE4RDM0MDAwMDAwMDMwNDFBOEQ0MDAwMDEwMzk0ODQKLToxMDE2MDAwMDA2MUE4RDQ0MDAwMDAwMDMwNDFBOEQ1MDAwMDEwMzk1NTIKLToxMDE2MTAwMDA2MUE4RDU0MDAwMDAwMDMwNDFBOEQ2MDAwMDEwMzk2MjEKLToxMDE2MjAwMDA2MUE4RDY0MDAwMDAwMDMwNDFBOEQ3MDAwMDEwMzk3RjAKLToxMDE2MzAwMDA2MUE4RDc0MDAwMDAwMDMwNDFBOEQ4MDAwMDEwMzk4QkYKLToxMDE2NDAwMDA2MUE4RDg0MDAwMDAwMDMwNDFBOEQ5MDAwMDEwMzk5OEUKLToxMDE2NTAwMDA2MUE4RDk0MDAwMDAwMDMwNDFBOERBMDAwMDEwMzlBNUQKLToxMDE2NjAwMDA2MUE4REE0MDAwMDAwMDMwNDFBOERCMDAwMDEwMzlCMkMKLToxMDE2NzAwMDA2MUE4REI0MDAwMDAwMDMwNDFBOERDMDAwMDEwMzlDRkIKLToxMDE2ODAwMDA2MUE4REM0MDAwMDAwMDMwNDFBOEREMDAwMDEwMzlEQ0EKLToxMDE2OTAwMDA2MUE4REQ0MDAwMDAwMDMwNDFBOERFMDAwMDEwMzlFOTkKLToxMDE2QTAwMDA2MUE4REU0MDAwMDAwMDMwNDFBOERGMDAwMDEwMzlGNjgKLToxMDE2QjAwMDA2MUE4REY0MDAwMDAwMDMwNDFBOEUwMDAwMDEwM0EwMzYKLToxMDE2QzAwMDA2MUE4RTA0MDAwMDAwMDMwNDFBOEUxMDAwMDEwM0ExMDQKLToxMDE2RDAwMDA2MUE4RTE0MDAwMDAwMDMwNDFBOEUyMDAwMDEwM0EyRDMKLToxMDE2RTAwMDA2MUE4RTI0MDAwMDAwMDMwNDFBOEUzMDAwMDEwM0EzQTIKLToxMDE2RjAwMDA2MUE4RTM0MDAwMDAwMDMwNDFBOEU0MDAwMDEwM0E0NzEKLToxMDE3MDAwMDA2MUE4RTQ0MDAwMDAwMDMwNDFBOEU1MDAwMDEwM0E1M0YKLToxMDE3MTAwMDA2MUE4RTU0MDAwMDAwMDMwNDFBOEU2MDAwMDEwM0E2MEUKLToxMDE3MjAwMDA2MUE4RTY0MDAwMDAwMDMwNDFBOEU3MDAwMDEwM0E3REQKLToxMDE3MzAwMDA2MUE4RTc0MDAwMDAwMDMwNDFBOEU4MDAwMDEwM0E4QUMKLToxMDE3NDAwMDA2MUE4RTg0MDAwMDAwMDMwNDFBOEU5MDAwMDEwM0E5N0IKLToxMDE3NTAwMDA2MUE4RTk0MDAwMDAwMDMwNDFBOEVBMDAwMDEwM0FBNEEKLToxMDE3NjAwMDA2MUE4RUE0MDAwMDAwMDMwNDFBOEVCMDAwMDEwM0FCMTkKLToxMDE3NzAwMDA2MUE4RUI0MDAwMDAwMDMwNDFBOEVDMDAwMDEwM0FDRTgKLToxMDE3ODAwMDA2MUE4RUM0MDAwMDAwMDMwNDFBOEVEMDAwMDEwM0FEQjcKLToxMDE3OTAwMDA2MUE4RUQ0MDAwMDAwMDMwNDFBOEVFMDAwMDEwM0FFODYKLToxMDE3QTAwMDA2MUE4RUU0MDAwMDAwMDMwNDFBOEVGMDAwMDEwM0FGNTUKLToxMDE3QjAwMDA2MUE4RUY0MDAwMDAwMDMwNDFBOEYwMDAwMDEwM0IwMjMKLToxMDE3QzAwMDA2MUE4RjA0MDAwMDAwMDMwNDFBOEYxMDAwMDEwM0IxRjEKLToxMDE3RDAwMDA2MUE4RjE0MDAwMDAwMDMwNDFBOEYyMDAwMDEwM0IyQzAKLToxMDE3RTAwMDA2MUE4RjI0MDAwMDAwMDMwNDFBOEYzMDAwMDEwM0IzOEYKLToxMDE3RjAwMDA2MUE4RjM0MDAwMDAwMDMwNDFBOEY0MDAwMDEwM0I0NUUKLToxMDE4MDAwMDA2MUE4RjQ0MDAwMDAwMDMwNDFBOEY1MDAwMDEwM0I1MkMKLToxMDE4MTAwMDA2MUE4RjU0MDAwMDAwMDMwNDFBOEY2MDAwMDEwM0I2RkIKLToxMDE4MjAwMDA2MUE4RjY0MDAwMDAwMDMwNDFBOEY3MDAwMDEwM0I3Q0EKLToxMDE4MzAwMDA2MUE4Rjc0MDAwMDAwMDMwNDFBOEY4MDAwMDEwM0I4OTkKLToxMDE4NDAwMDA2MUE4Rjg0MDAwMDAwMDMwNDFBOEY5MDAwMDEwM0I5NjgKLToxMDE4NTAwMDA2MUE4Rjk0MDAwMDAwMDMwNDFBOEZBMDAwMDEwM0JBMzcKLToxMDE4NjAwMDA2MUE4RkE0MDAwMDAwMDMwNDFBOEZCMDAwMDEwM0JCMDYKLToxMDE4NzAwMDA2MUE4RkI0MDAwMDAwMDMwNDFBOEZDMDAwMDEwM0JDRDUKLToxMDE4ODAwMDA2MUE4RkM0MDAwMDAwMDMwNDFBOEZEMDAwMDEwM0JEQTQKLToxMDE4OTAwMDA2MUE4RkQ0MDAwMDAwMDMwNDFBOEZFMDAwMDEwM0JFNzMKLToxMDE4QTAwMDA2MUE4RkU0MDAwMDAwMDcwNDFBNjJDMDAwMjAwM0JGN0MKLToxMDE4QjAwMDA2MUExQUYwMDAwMDAwNDIwNjFBQUYwMDAwMDAwMDA4RTUKLToxMDE4QzAwMDA2MUFFMDAwMDAwMDA1NDAwNjFBRDAwMDAwMDAwMDcyNzEKLToxMDE4RDAwMDA2MUFEMjQ4MDAwMDAwMTAwNjFBRDZCMDAwMDAwMDIwRjgKLToxMDE4RTAwMDA2MUFENDcwMDAwMDAwOTAwNjFBRDQ2ODAwMDAwMDAyQTYKLToxMDE4RjAwMDA2MUFBMDAwMDAwMDAxQzQwNjFBMzAwMDAwMDAwMDEwMDMKLToxMDE5MDAwMDA2MUEzMDgwMDAwMDAwMTAwNjFBMzEwMDAwMDAwMDEwOTYKLToxMDE5MTAwMDA2MUEzMTgwMDAwMDAwMTAwNjFBMzMwMDAwMDAwMDEyODEKLToxMDE5MjAwMDA2MUEzMzkwMDAwMDAwNzAwNjFBRDQ1ODAwMDAwMDAyMTYKLToxMDE5MzAwMDA2MUFEMzQ4MDAwMDAwMDIwNjFBRDM1ODAwMDAwMDIwRkYKLToxMDE5NDAwMDA2MUFBNzEwMDAwMDAxQzQwNjFBMzA0MDAwMDAwMDEwNUIKLToxMDE5NTAwMDA2MUEzMEMwMDAwMDAwMTAwNjFBMzE0MDAwMDAwMDEwQzYKLToxMDE5NjAwMDA2MUEzMUMwMDAwMDAwMTAwNjFBMzM0ODAwMDAwMDEyQTkKLToxMDE5NzAwMDA2MUEzNTUwMDAwMDAwNzAwNjFBRDQ2MDAwMDAwMDAyRkMKLToxMDE5ODAwMDA2MUFEMzUwMDAwMDAwMDIwNjFBRDNEODAwMDAwMDIwMjcKLToxMDE5OTAwMDAyMUFBRTIwMDAwMDAwMDAwNjFBNTAwMDAwMDAwMDAyRUIKLToxMDE5QTAwMDA2MUE1MDgwMDAwMDAwMTIwNDFBNDAwMDAwMDIwM0RGRjMKLToxMDE5QjAwMDA0MUE2M0MwMDAwMjAzRTEwNjFBNzAwMDAwMDAwMDA0NkMKLToxMDE5QzAwMDA2MUEzMjAwMDAwMDAwMDgwMjFBQUUyNDAwMDAwMDAwQ0YKLToxMDE5RDAwMDA2MUE1MDEwMDAwMDAwMDIwNjFBNTBDODAwMDAwMDEyM0IKLToxMDE5RTAwMDA0MUE0MDA4MDAwMjAzRTMwNDFBNjNDODAwMDIwM0U1NzYKLToxMDE5RjAwMDA2MUE3MDEwMDAwMDAwMDQwNjFBMzIyMDAwMDAwMDA4QzkKLToxMDFBMDAwMDAyMUFBRTI4MDAwMDAwMDAwNjFBNTAyMDAwMDAwMDAyNTIKLToxMDFBMTAwMDA2MUE1MTEwMDAwMDAwMTIwNDFBNDAxMDAwMDIwM0U3RDkKLToxMDFBMjAwMDA0MUE2M0QwMDAwMjAzRTkwNjFBNzAyMDAwMDAwMDA0QzMKLToxMDFBMzAwMDA2MUEzMjQwMDAwMDAwMDgwMjFBQUUyQzAwMDAwMDAwMTYKLToxMDFBNDAwMDA2MUE1MDMwMDAwMDAwMDIwNjFBNTE1ODAwMDAwMDEyMTkKLToxMDFBNTAwMDA0MUE0MDE4MDAwMjAzRUIwNDFBNjNEODAwMDIwM0VERDUKLToxMDFBNjAwMDA2MUE3MDMwMDAwMDAwMDQwNjFBMzI2MDAwMDAwMDA4RjgKLToxMDFBNzAwMDAyMUFBRTMwMDAwMDAwMDAwNjFBNTA0MDAwMDAwMDAyQkEKLToxMDFBODAwMDA2MUE1MUEwMDAwMDAwMTIwNDFBNDAyMDAwMDIwM0VGQzEKLToxMDFBOTAwMDA0MUE2M0UwMDAwMjAzRjEwNjFBNzA0MDAwMDAwMDA0MUIKLToxMDFBQTAwMDA2MUEzMjgwMDAwMDAwMDgwMjFBQUUzNDAwMDAwMDAwNUUKLToxMDFBQjAwMDA2MUE1MDUwMDAwMDAwMDIwNjFBNTFFODAwMDAwMDEyRjkKLToxMDFBQzAwMDA0MUE0MDI4MDAwMjAzRjMwNDFBNjNFODAwMDIwM0Y1MzUKLToxMDFBRDAwMDA2MUE3MDUwMDAwMDAwMDQwNjFBMzJBMDAwMDAwMDA4MjgKLToxMDFBRTAwMDAyMUFBRTM4MDAwMDAwMDAwNjFBNTA2MDAwMDAwMDAyMjIKLToxMDFBRjAwMDA2MUE1MjMwMDAwMDAwMTIwNDFBNDAzMDAwMDIwM0Y3QTgKLToxMDFCMDAwMDA0MUE2M0YwMDAwMjAzRjkwNjFBNzA2MDAwMDAwMDA0NzIKLToxMDFCMTAwMDA2MUEzMkMwMDAwMDAwMDgwMjFBQUUzQzAwMDAwMDAwQTUKLToxMDFCMjAwMDA2MUE1MDcwMDAwMDAwMDIwNjFBNTI3ODAwMDAwMDEyRDcKLToxMDFCMzAwMDA0MUE0MDM4MDAwMjAzRkIwNDFBNjNGODAwMDIwM0ZEOTQKLToxMDFCNDAwMDA2MUE3MDcwMDAwMDAwMDQwNjFBMzJFMDAwMDAwMDA4NTcKLToxMDFCNTAwMDAyMDBBMkE0MDAwMDAyMDkwMjAwQTI3MDAwMDAwMDAwMUUKLToxMDFCNjAwMDAyMDBBMjc0MDAwMDAwMDAwMjAwQTI3MDAwMDAwMDAwNDkKLToxMDFCNzAwMDAyMDBBMjc0MDAwMDAwMDAwMjAwQTI3MDAwMDAwMDAwMzkKLToxMDFCODAwMDAyMDBBMjc0MDAwMDAwMDAwMjAwQTI3MDAwMDAwMDAwMjkKLToxMDFCOTAwMDAyMDBBMjc0MDAwMDAwMDAwMjAxMDBCNDAwMDAwMDAxNzUKLToxMDFCQTAwMDAyMDEwMEI4MDAwMDAwMDEwMjAxMDBDQzAwMDAwMDAxQTkKLToxMDFCQjAwMDAyMDEwMEQwMDAwMDAwMDEwMjAxMDBEQzAwMDAwMDAxNzEKLToxMDFCQzAwMDAyMDEwMTAwMDAwMDAwMDEwMjAxMDEwNDAwMDAwMDAxMDcKLToxMDFCRDAwMDAyMDEwMDdDMDAzMDAwMDAwMjAxMDA4NDAwMDAwMDI4QTcKLToxMDFCRTAwMDAyMDEwMDhDMDAwMDAwMDAwMjAxMDEzMDAwMDAwMDA0MkUKLToxMDFCRjAwMDAyMDEwMjVDMDAwMDAwMDEwMjAxMDMyODAwMDAwMDAwNTUKLToxMDFDMDAwMDAyMDE2MDU4MDAwMEZGRkYwMjAxNjA3MDAwMDAwMDA3NDEKLToxMDFDMTAwMDAyMDEwNTU0MDAwMDAwMzAwMjAxMDBDNDAwMDAwMDAxNzAKLToxMDFDMjAwMDAyMDEwMEY4MDAwMDAwMDEwMjAxMDBGMDAwMDAwMDAxQzQKLToxMDFDMzAwMDAyMDEwMDgwMDAzMDAwMDAwMjAxMDA4ODAwMDAwMDI4M0UKLToxMDFDNDAwMDAyMDEwMDkwMDAwMDAwMDAwMjAxMDEzNDAwMDAwMDA0QzUKLToxMDFDNTAwMDAyMDEwMkRDMDAwMDAwMDEwMjAxMDMyQzAwMDAwMDAwNzAKLToxMDFDNjAwMDAyMDE2MDVDMDAwMEZGRkYwMjAxNjA3NDAwMDAwMDA3RDkKLToxMDFDNzAwMDAyMDEwNTY0MDAwMDAwMzAwMjAxMDBDODAwMDAwMDAxRkMKLToxMDFDODAwMDAyMDEwMEZDMDAwMDAwMDEwMjAxMDBGNDAwMDAwMDAxNUMKLToxMDFDOTAwMDAyMEMxMDAwMDAwMDAwMjgwMjBDMjAwODAwMDAwMjExQjUKLToxMDFDQTAwMDAyMEMyMDBDMDAwMDAyMDAwMjBDMjAxMDAwMDAwMjA0QjQKLToxMDFDQjAwMDAyMEMyMDFDMDAwMEZGRkYwMjBDMjAyMDAwMDBGRkZGOTAKLToxMDFDQzAwMDAyMEMyMDI0MDAwMEZGRkYwMjBDMjAyODAwMDBGRkZGNzAKLToxMDFDRDAwMDAyMEMyMDM4MDAwMDAwMDAwMjBDMjAzQzAwMDAwMDM3RkQKLToxMDFDRTAwMDAyMEMyMDQwMDAwMDAwMjEwMjBDMjA0NDAwMDAwMDIwRDMKLToxMDFDRjAwMDA2MEMyMDQ4MDAwMDAwMUQwMjBDMjBCQzAwMDAwMDAxNjIKLToxMDFEMDAwMDA2MEMyMEMwMDAwMDAwM0YwMjBDMjFCQzAwMDAwMDAxQjYKLToxMDFEMTAwMDAyMEMyMUMwMDAwMDAwMDEwMjBDMjFDNDAwMDAwMDAxREYKLToxMDFEMjAwMDA2MEMyMUM4MDAwMDAwMUMwMjBDMjIzODA3RkZGRkZGMzAKLToxMDFEMzAwMDAyMEMyMjNDMDAwMDAwN0YwMjBDMjI0MDA3RkZGRkZGNDQKLToxMDFENDAwMDAyMEMyMjQ0MDAwMDAwM0YwMTBDMjI0ODAwMDAwMDAwNjkKLToxMDFENTAwMDAxMEMyMjRDMDAwMDAwMDAwMTBDMjI1MDAwMDAwMDAwODkKLToxMDFENjAwMDAxMEMyMjU0MDAwMDAwMDAwMTBDMjI1ODAwMDAwMDAwNjkKLToxMDFENzAwMDAxMEMyMjVDMDAwMDAwMDAwMTBDMjI2MDAwMDAwMDAwNDkKLToxMDFEODAwMDAxMEMyMjY0MDAwMDAwMDAwMTBDMjI2ODAwMDAwMDAwMjkKLToxMDFEOTAwMDAxMEMyMjZDMDAwMDAwMDAwMTBDMjI3MDAwMDAwMDAwMDkKLToxMDFEQTAwMDAxMEMyMjc0MDAwMDAwMDAwMTBDMjI3ODAwMDAwMDAwRTkKLToxMDFEQjAwMDAxMEMyMjdDMDAwMDAwMDAwMjBDMjJEODAwMDBGRkZGNzIKLToxMDFEQzAwMDAyMEMyMkRDMDAwMEZGRkYwMjBDMjJFMDAwMDBGRkZGRkIKLToxMDFERDAwMDAyMEMyMkU0MDAwMEZGRkYwQzBDMjAwMDAwMDAwM0U4Q0UKLToxMDFERTAwMDBBMEMyMDAwMDAwMDAwMDEwQjBDMjAwMDAwMDAwMDAzODIKLToxMDFERjAwMDAyMEM0MDA4MDAwMDEwMTEwMjBDNDAwQzAwMDAxMDAwMDIKLToxMDFFMDAwMDAyMEM0MDEwMDAwMDEwMDQwMjBDNDAxNDAwMDAxMDIxQ0QKLToxMDFFMTAwMDAyMEM0MDFDMDAwMEZGRkYwMjBDNDAyMDAwMDBGRkZGRUUKLToxMDFFMjAwMDAyMEM0MDI0MDAwMEZGRkYwMjBDNDAyODAwMDBGRkZGQ0UKLToxMDFFMzAwMDAyMEM0MDM4MDAwMDAwNDYwMjBDNDAzQzAwMDAwMDBDNDAKLToxMDFFNDAwMDA2MEM0MDQwMDAwMDAwMDIwMjBDNDA0ODAwMDAwMDE4NTAKLToxMDFFNTAwMDAyMEM0MDRDMDAwMDAwRjAwNjBDNDA1MDAwMDAwMDFGMzcKLToxMDFFNjAwMDAyMEM0MENDMDAwMDAwMDEwNjBDNDBEMDAwMDAwMDNBRkIKLToxMDFFNzAwMDAyMEM0MUI4MDAwMDAwMDEwNjBDNDFCQzAwMDAwMDAzNDgKLToxMDFFODAwMDAyMEM0MUM4MDAwMDAwMDEwMjBDNDFDQzAwMDAwMDAxMUUKLToxMDFFOTAwMDA2MEM0MUQwMDAwMDAwMUEwMjBDNDIzODA3RkZGRkZGNzkKLToxMDFFQTAwMDAyMEM0MjNDMDAwMDAwN0YwMjBDNDI0MDA3RkZGRkZGOTMKLToxMDFFQjAwMDAyMEM0MjQ0MDAwMDAwM0YwMTBDNDI0ODAwMDAwMDAwQjgKLToxMDFFQzAwMDAxMEM0MjRDMDAwMDAwMDAwMTBDNDI1MDAwMDAwMDAwRDgKLToxMDFFRDAwMDAxMEM0MjU0MDAwMDAwMDAwMTBDNDI1ODAwMDAwMDAwQjgKLToxMDFFRTAwMDAxMEM0MjVDMDAwMDAwMDAwMTBDNDI2MDAwMDAwMDAwOTgKLToxMDFFRjAwMDAxMEM0MjY0MDAwMDAwMDAwMTBDNDI2ODAwMDAwMDAwNzgKLToxMDFGMDAwMDAxMEM0MjZDMDAwMDAwMDAwMTBDNDI3MDAwMDAwMDAwNTcKLToxMDFGMTAwMDAxMEM0Mjc0MDAwMDAwMDAwMTBDNDI3ODAwMDAwMDAwMzcKLToxMDFGMjAwMDAxMEM0MjdDMDAwMDAwMDAwMTBDNDI4MDAwMDAwMDAwMTcKLToxMDFGMzAwMDAyMEM0MkQ4MDAwMEZGRkYwMjBDNDJEQzAwMDBGRkZGNTEKLToxMDFGNDAwMDAyMEM0MkUwMDAwMEZGRkYwMjBDNDJFNDAwMDBGRkZGMzEKLToxMDFGNTAwMDBDMEM0MDAwMDAwMDAzRTgwQTBDNDAwMDAwMDAwMDAxRTcKLToxMDFGNjAwMDBCMEM0MDAwMDAwMDAwMDMwNjBENDAwMDAwMDAwQTAwQkEKLToxMDFGNzAwMDAyMEQwMDQ0MDAwMDAwMzIwMjBEMDA4QzAyMTUwMDIwMEEKLToxMDFGODAwMDAyMEQwMDkwMDIxNTAwMjAwMjBEMDA5NDA4MTAwMDAwQzAKLToxMDFGOTAwMDAyMEQwMDk4MDAwMDAwMzYwMjBEMDBBMDAwMDAwMDAwQjUKLToxMDFGQTAwMDAyMEQwMEE0MDAwMDAwMDQwMjBEMDBBODAwMDAwMDA0QkYKLToxMDFGQjAwMDA2MEQwMEFDMDAwMDAwMDIwMjBEMDBCODAwMDAwMDAyOTcKLToxMDFGQzAwMDAyMEQwMEMwMDAwMDAwMDEwMjBEMDBDODAwMDAwMDAyNjgKLToxMDFGRDAwMDAyMEQwMENDMDAwMDAwMDIwMjBEMDE1QzAwMDAwMDAxQjcKLToxMDFGRTAwMDAyMEQwMTY0MDAwMDAwMDEwMjBEMDE2ODAwMDAwMDAyMDIKLToxMDFGRjAwMDAyMEQwMjA0MDAwMDAwMDEwMjBEMDIwQzAwMDAwMDIwOEUKLToxMDIwMDAwMDAyMEQwMjEwMDAwMDAwNDAwMjBEMDIxNDAwMDAwMDQwMEEKLToxMDIwMTAwMDAyMEQwMjIwMDAwMDAwMDMwMjBEMDIyNDAwMDAwMDE4M0YKLToxMDIwMjAwMDA2MEQwMjgwMDAwMDAwMTIwNDBEMDMwMDAwMTgwM0ZGREIKLToxMDIwMzAwMDA2MEQwMzYwMDAwMDAwMEMwMjBEMDA0QzAwMDAwMDAxQzIKLToxMDIwNDAwMDAyMEQwMDUwMDAwMDAwMDIwMjBEMDA1NDAwMDAwMDAwQ0MKLToxMDIwNTAwMDAyMEQwMDU4MDAwMDAwMDgwNjBEMDA1QzAwMDAwMDA0OUUKLToxMDIwNjAwMDAyMEQwMEM0MDAwMDAwMDQwMjBEMDAwNDAwMDAwMDAxODUKLToxMDIwNzAwMDAyMEQwMDA4MDAwMDAwMDEwMjBEMDAwQzAwMDAwMDAxMkMKLToxMDIwODAwMDAyMEQwMDEwMDAwMDAwMDEwMjBEMDAxNDAwMDAwMDAxMEMKLToxMDIwOTAwMDAyMEQwMDE4MDAwMDAwMDEwMjBEMDAxQzAwMDAwMDAxRUMKLToxMDIwQTAwMDAyMEQwMDIwMDAwMDAwMDEwMjBEMDAyNDAwMDAwMDAxQ0MKLToxMDIwQjAwMDAyMEQwMDI4MDAwMDAwMDEwMjBEMDAyQzAwMDAwMDAxQUMKLToxMDIwQzAwMDAyMEQwMDMwMDAwMDAwMDEwMjBEMDAzNDAwMDAwMDAxOEMKLToxMDIwRDAwMDAyMEQwMDM4MDAwMDAwMDEwMjBEMDAzQzAwMDAwMDAxNkMKLToxMDIwRTAwMDAyMEQwMTE0MDAwMDAwMDkwMjBEMDExQzAwMDAwMDBBOEQKLToxMDIwRjAwMDAyMEQwMTI0MDAwMDAwMDAwMjBEMDEyQzAwMDAwMDAwNzAKLToxMDIxMDAwMDAyMEQwMTM0MDAwMDAwMDAwMjBEMDEzQzAwMDAwMDBCMzQKLToxMDIxMTAwMDAyMEQwMTQ0MDAwMDAwMDAwMjBEMDExODAwMDAwMDI5MUEKLToxMDIxMjAwMDAyMEQwMTIwMDAwMDAwMkEwMjBEMDEyODAwMDAwMDIwRkQKLToxMDIxMzAwMDAyMEQwMTMwMDAwMDAwMjAwMjBEMDEzODAwMDAwMDIwRDcKLToxMDIxNDAwMDAyMEQwMTQwMDAwMDAwMkIwMjBEMDE0ODAwMDAwMDIwOUMKLToxMDIxNTAwMDAyMEQwMTE0MDAwMDAwMTkwMjBEMDExQzAwMDAwMDFBRkMKLToxMDIxNjAwMDAyMEQwMTI0MDAwMDAwMTAwMjBEMDEyQzAwMDAwMDEwREYKLToxMDIxNzAwMDAyMEQwMTM0MDAwMDAwMTAwMjBEMDEzQzAwMDAwMDFCQTQKLToxMDIxODAwMDAyMEQwMTQ0MDAwMDAwMTAwMjBEMDExODAwMDAwMDM5OEEKLToxMDIxOTAwMDAyMEQwMTIwMDAwMDAwM0EwMjBEMDEyODAwMDAwMDMwNkQKLToxMDIxQTAwMDAyMEQwMTMwMDAwMDAwMzAwMjBEMDEzODAwMDAwMDMwNDcKLToxMDIxQjAwMDAyMEQwMTQwMDAwMDAwM0IwMjBEMDE0ODAwMDAwMDMwMEMKLToxMDIxQzAwMDAyMEQwMTE0MDAwMDAwNDkwMjBEMDExQzAwMDAwMDRBMkMKLToxMDIxRDAwMDAyMEQwMTI0MDAwMDAwNDAwMjBEMDEyQzAwMDAwMDQwMEYKLToxMDIxRTAwMDAyMEQwMTM0MDAwMDAwNDAwMjBEMDEzQzAwMDAwMDRCRDQKLToxMDIxRjAwMDAyMEQwMTQ0MDAwMDAwNDAwMjBEMDExODAwMDAwMDY5QkEKLToxMDIyMDAwMDAyMEQwMTIwMDAwMDAwNkEwMjBEMDEyODAwMDAwMDYwOUMKLToxMDIyMTAwMDAyMEQwMTMwMDAwMDAwNjAwMjBEMDEzODAwMDAwMDYwNzYKLToxMDIyMjAwMDAyMEQwMTQwMDAwMDAwNkIwMjBEMDE0ODAwMDAwMDYwM0IKLToxMDIyMzAwMDAyMEQwMTE0MDAwMDAwNTkwMjBEMDExQzAwMDAwMDVBOUIKLToxMDIyNDAwMDAyMEQwMTI0MDAwMDAwNTAwMjBEMDEyQzAwMDAwMDUwN0UKLToxMDIyNTAwMDAyMEQwMTM0MDAwMDAwNTAwMjBEMDEzQzAwMDAwMDVCNDMKLToxMDIyNjAwMDAyMEQwMTQ0MDAwMDAwNTAwMjBEMDExODAwMDAwMDc5MjkKLToxMDIyNzAwMDAyMEQwMTIwMDAwMDAwN0EwMjBEMDEyODAwMDAwMDcwMEMKLToxMDIyODAwMDAyMEQwMTMwMDAwMDAwNzAwMjBEMDEzODAwMDAwMDcwRTYKLToxMDIyOTAwMDAyMEQwMTQwMDAwMDAwN0IwMjBEMDE0ODAwMDAwMDcwQUIKLToxMDIyQTAwMDA2MEUyMDAwMDAwMDA4MDAwMjBFMDA0QzAwMDAwMDMyNjQKLToxMDIyQjAwMDAyMEUwMDk0MDIxNTAwMjAwMjBFMDA5ODAyMTUwMDIwNjQKLToxMDIyQzAwMDAyMEUwMDlDMDAwMDAwMzAwMjBFMDBBMDA4MTAwMDAwNkEKLToxMDIyRDAwMDAyMEUwMEE0MDAwMDAwMzYwMjBFMDBBODAwMDAwMDMwMkMKLToxMDIyRTAwMDAyMEUwMEFDMDAwMDAwMzEwMjBFMDBCNDAwMDAwMDAzM0EKLToxMDIyRjAwMDAyMEUwMEI4MDAwMDAwMDAwMjBFMDBDNDAwMDAwMDAwNDIKLToxMDIzMDAwMDAyMEUwMENDMDAwMDAwMDYwMjBFMDBEODAwMDAwMDAxMDIKLToxMDIzMTAwMDAyMEUwMTQ0MDAwMDAwMDEwMjBFMDE0QzAwMDAwMDAxMDkKLToxMDIzMjAwMDAyMEUwMTUwMDAwMDAwMDIwMjBFMDIwNDAwMDAwMDAxMzMKLToxMDIzMzAwMDAyMEUwMjBDMDAwMDAwNDAwMjBFMDIxMDAwMDAwMDQwREQKLToxMDIzNDAwMDAyMEUwMjFDMDAwMDAwMDQwMjBFMDIyMDAwMDAwMDIwMDkKLToxMDIzNTAwMDAyMEUwMjI0MDAwMDAwMEUwMjBFMDIyODAwMDAwMDFCRTQKLToxMDIzNjAwMDA2MEUwMzAwMDAwMDAwMTIwNDBFMDI4MDAwMUIwNDE3N0EKLToxMDIzNzAwMDA2MEUwMkVDMDAwMDAwMDUwMjBFMDA1NDAwMDAwMDBDRTYKLToxMDIzODAwMDAyMEUwMDU4MDAwMDAwMEMwMjBFMDA1QzAwMDAwMDAwNkQKLToxMDIzOTAwMDAyMEUwMDYwMDAwMDAwMTAwMjBFMDA2NDAwMDAwMDEwMzkKLToxMDIzQTAwMDA2MEUwMDY4MDAwMDAwMDMwMjBFMDBEQzAwMDAwMDAzQkYKLToxMDIzQjAwMDAyMEUwMDA0MDAwMDAwMDEwMjBFMDAwODAwMDAwMDAxRUYKLToxMDIzQzAwMDAyMEUwMDBDMDAwMDAwMDEwMjBFMDAxMDAwMDAwMDAxQ0YKLToxMDIzRDAwMDAyMEUwMDE0MDAwMDAwMDEwMjBFMDAxODAwMDAwMDAxQUYKLToxMDIzRTAwMDAyMEUwMDFDMDAwMDAwMDEwMjBFMDAyMDAwMDAwMDAxOEYKLToxMDIzRjAwMDAyMEUwMDI0MDAwMDAwMDEwMjBFMDAyODAwMDAwMDAxNkYKLToxMDI0MDAwMDAyMEUwMDJDMDAwMDAwMDEwMjBFMDAzMDAwMDAwMDAxNEUKLToxMDI0MTAwMDAyMEUwMDM0MDAwMDAwMDEwMjBFMDAzODAwMDAwMDAxMkUKLToxMDI0MjAwMDAyMEUwMDNDMDAwMDAwMDEwMjBFMDA0MDAwMDAwMDAxMEUKLToxMDI0MzAwMDAyMEUwMDQ0MDAwMDAwMDEwMjBFMDExMDAwMDAwMDBGMTcKLToxMDI0NDAwMDAyMEUwMTE4MDAwMDAwMDAwMjBFMDEyMDAwMDAwMDAwMzIKLToxMDI0NTAwMDAyMEUwMTI4MDAwMDAwMDAwMjBFMDExNDAwMDAwMDJGRUYKLToxMDI0NjAwMDAyMEUwMTFDMDAwMDAwMjAwMjBFMDEyNDAwMDAwMDIwQ0EKLToxMDI0NzAwMDAyMEUwMTJDMDAwMDAwMjAwMjBFMDExMDAwMDAwMDFGQkYKLToxMDI0ODAwMDAyMEUwMTE4MDAwMDAwMTAwMjBFMDEyMDAwMDAwMDEwRDIKLToxMDI0OTAwMDAyMEUwMTI4MDAwMDAwMTAwMjBFMDExNDAwMDAwMDNGOEYKLToxMDI0QTAwMDAyMEUwMTFDMDAwMDAwMzAwMjBFMDEyNDAwMDAwMDMwNkEKLToxMDI0QjAwMDAyMEUwMTJDMDAwMDAwMzAwMjBFMDExMDAwMDAwMDRGM0YKLToxMDI0QzAwMDAyMEUwMTE4MDAwMDAwNDAwMjBFMDEyMDAwMDAwMDQwMzIKLToxMDI0RDAwMDAyMEUwMTI4MDAwMDAwNDAwMjBFMDExNDAwMDAwMDZGRUYKLToxMDI0RTAwMDAyMEUwMTFDMDAwMDAwNjAwMjBFMDEyNDAwMDAwMDYwQ0EKLToxMDI0RjAwMDAyMEUwMTJDMDAwMDAwNjAwMjBFMDExMDAwMDAwMDVGQkYKLToxMDI1MDAwMDAyMEUwMTE4MDAwMDAwNTAwMjBFMDEyMDAwMDAwMDUwRDEKLToxMDI1MTAwMDAyMEUwMTI4MDAwMDAwNTAwMjBFMDExNDAwMDAwMDdGOEUKLToxMDI1MjAwMDAyMEUwMTFDMDAwMDAwNzAwMjBFMDEyNDAwMDAwMDcwNjkKLToxMDI1MzAwMDAyMEUwMTJDMDAwMDAwNzAwNzMwMDQwMDAwRDYwMDAwREQKLToxMDI1NDAwMDA4MzAwN0Q4MDAwNTA0MzIwNzM0MDAwMDMyMkEwMDAwQTIKLToxMDI1NTAwMDA3MzQ4MDAwMzEzMDBDOEIwNzM1MDAwMDM4RDAxOEQ4OTQKLToxMDI1NjAwMDA3MzU4MDAwMkY4MjI3MEQwNzM2MDAwMDI2MzYzMkVFMTEKLToxMDI1NzAwMDA4MzY3MTAwMzFFMDA0MzQwMjMwMDBCQzAwMDAwMDMwNDUKLToxMDI1ODAwMDAxMzAwMDAwMDAwMDAwMDAwMTMwMDAwNDAwMDAwMDAwRTUKLToxMDI1OTAwMDAxMzAwMDA4MDAwMDAwMDAwMTMwMDAwQzAwMDAwMDAwQzUKLToxMDI1QTAwMDAxMzAwMDEwMDAwMDAwMDAwMTMwMDAxNDAwMDAwMDAwQTUKLToxMDI1QjAwMDAyMzAwMDIwMDAwMDAwMDEwMjMwMDAyNDAwMDAwMDAyNzAKLToxMDI1QzAwMDAyMzAwMDI4MDAwMDAwMDMwMjMwMDAyQzAwMDAwMDAwNTAKLToxMDI1RDAwMDAyMzAwMDMwMDAwMDAwMDQwMjMwMDAzNDAwMDAwMDAxMkUKLToxMDI1RTAwMDAyMzAwMDM4MDAwMDAwMDAwMjMwMDAzQzAwMDAwMDAxMTIKLToxMDI1RjAwMDAyMzAwMDQwMDAwMDAwMDQwMjMwMDA0NDAwMDAwMDAwRUYKLToxMDI2MDAwMDAyMzAwMDQ4MDAwMDAwMDEwMjMwMDA0QzAwMDAwMDAzQ0UKLToxMDI2MTAwMDAyMzAwMDUwMDAwMDAwMDAwMjMwMDA1NDAwMDAwMDAxQjEKLToxMDI2MjAwMDAyMzAwMDU4MDAwMDAwMDQwMjMwMDA1QzAwMDAwMDAwOEUKLToxMDI2MzAwMDAyMzAwMDYwMDAwMDAwMDEwMjMwMDA2NDAwMDAwMDAzNkUKLToxMDI2NDAwMDAyMzAwMDY4MDAwMDAwMDAwMjMwMDA2QzAwMDAwMDAxNTEKLToxMDI2NTAwMDAyMzAwMDcwMDAwMDAwMDQwMjMwMDA3NDAwMDAwMDAwMkUKLToxMDI2NjAwMDAyMzAwMDc4MDAwMDAwMDQwMjMwMDA3QzAwMDAwMDAzMEIKLToxMDI2NzAwMDA2MzAwMDgwMDAwMDAwMDIwMjMwMDBBNDAwMDA3RkZGNEUKLToxMDI2ODAwMDAyMzAwMEE4MDAwMDAzRkYwMjMwMDIyNDAwMDAwMDAwMTYKLToxMDI2OTAwMDAyMzAwMjM0MDAwMDAwMDAwMjMwMDI0QzAwMDAwMDAwNTIKLToxMDI2QTAwMDAyMzAwMkU0MDAwMEZGRkYwNjMwMjAwMDAwMDAwODAwQjYKLToxMDI2QjAwMDAyMzM4QkMwMDAwMDAwMDEwMjMzODAwMDAwMDAwMDFBQ0EKLToxMDI2QzAwMDAyMzM4MDQwMDAwMDAwNEUwMjMzODA4MDAwMDAwMDEwODIKLToxMDI2RDAwMDAyMzM4MEMwMDAwMDAwMjAwQzMzODMwMDAwMDg2NDcwQzcKLToxMDI2RTAwMDBBMzM4MzAwMDAwMDAxNTcwQjMzODMwMDAwMDAwNTVGQUQKLToxMDI2RjAwMDBBMzM4MzQwMDAwMDAwMDAwQzMzODM0MDAwMDAwMjI2QjAKLToxMDI3MDAwMDBCMzM4MzQwMDAwMDAwMDEwMjMzODM4MDAwMDg2NDcwQjMKLToxMDI3MTAwMDAyMzM4M0MwMDAwMDAyMjYwMjMzMTQ4MDAwMDAwMDAxNEYKLToxMDI3MjAwMDBBMzMxNDgwMDAwMDAwMDAwNjMyODAwMDAwMDAwMTAyMUQKLToxMDI3MzAwMDA2MzIyMDA4MDAwMDAwQzgwNjMyMjAwMDAwMDAwMDAyMTcKLToxMDI3NDAwMDA0MzI4NTIwMDA4RjA0MzYwNjMyODc1QzAwMDAwMDA5QzEKLToxMDI3NTAwMDA2MzIzRUIwMDAwMDAwMDYwNjMyM0VEMDAwMDAwMDAyMDUKLToxMDI3NjAwMDA2MzIzRTgwMDAwMDAwMEEwNDMyM0VBODAwMDIwNEM1ODIKLToxMDI3NzAwMDA2MzIzRTAwMDAwMDAwMjAwNjMyNTAwMDAwMDAwOTQwRjIKLToxMDI3ODAwMDA2MzI0MDAwMDAwMDAwMDQwNDMyOTRDMDAwMDIwNEM3NzYKLToxMDI3OTAwMDA2MzI0MTEwMDAwMDAwMDIwNjMyRDAwMDAwMDAwMDcwMzYKLToxMDI3QTAwMDA2MzJEQjAwMDAwMDAwRDQwNjMyREVBMDAwMDAwMDAyOEEKLToxMDI3QjAwMDA2MzJFMDAwMDAwMDA4MDAwNjMzMjQwMDAwMDAwMTE4ODMKLToxMDI3QzAwMDA2MzIxMDAwMDAwMDAxODgwNjMyNTAwMDAwMDAwMDIwOTAKLToxMDI3RDAwMDA2MzI1MTAwMDAwMDAwMjAwNjMyNTIwMDAwMDAwMDIwQTYKLToxMDI3RTAwMDA2MzI1MzAwMDAwMDAwMjAwNjMyNTQwMDAwMDAwMDIwOTIKLToxMDI3RjAwMDA2MzI1NTAwMDAwMDAwMjAwNjMyNTYwMDAwMDAwMDIwN0UKLToxMDI4MDAwMDA2MzI1NzAwMDAwMDAwMjAwNjMyNTgwMDAwMDAwMDIwNjkKLToxMDI4MTAwMDA2MzI1OTAwMDAwMDAwMjAwNjMyNUEwMDAwMDAwMDIwNTUKLToxMDI4MjAwMDA2MzI1QjAwMDAwMDAwMjAwNjMyNUMwMDAwMDAwMDIwNDEKLToxMDI4MzAwMDA2MzI1RDAwMDAwMDAwMjAwNjMyNUUwMDAwMDAwMDIwMkQKLToxMDI4NDAwMDA2MzI1RjAwMDAwMDAwMjAwNjMyODRGMDAwMDAwMDAyMjMKLToxMDI4NTAwMDA0MzI4NTAwMDAwMjA0QzkwNjMyODUwODAwMDAwMDAyMjcKLToxMDI4NjAwMDA2MzJERTkwMDAwMDAwMDIwNjMzMjg2MDAwMDAwMTE4RTYKLToxMDI4NzAwMDA2MzIxNjIwMDAwMDAxODgwNjMyNTA4MDAwMDAwMDIwMzkKLToxMDI4ODAwMDA2MzI1MTgwMDAwMDAwMjAwNjMyNTI4MDAwMDAwMDIwRjUKLToxMDI4OTAwMDA2MzI1MzgwMDAwMDAwMjAwNjMyNTQ4MDAwMDAwMDIwRTEKLToxMDI4QTAwMDA2MzI1NTgwMDAwMDAwMjAwNjMyNTY4MDAwMDAwMDIwQ0QKLToxMDI4QjAwMDA2MzI1NzgwMDAwMDAwMjAwNjMyNTg4MDAwMDAwMDIwQjkKLToxMDI4QzAwMDA2MzI1OTgwMDAwMDAwMjAwNjMyNUE4MDAwMDAwMDIwQTUKLToxMDI4RDAwMDA2MzI1QjgwMDAwMDAwMjAwNjMyNUM4MDAwMDAwMDIwOTEKLToxMDI4RTAwMDA2MzI1RDgwMDAwMDAwMjAwNjMyNUU4MDAwMDAwMDIwN0QKLToxMDI4RjAwMDA2MzI1RjgwMDAwMDAwMjAwNjMyODRGODAwMDAwMDAyRUIKLToxMDI5MDAwMDA0MzI4NTEwMDAwMjA0Q0IwNjMyODUxODAwMDAwMDAyNTQKLToxMDI5MTAwMDA2MzJERTk4MDAwMDAwMDIwMjMyODQ1MDAwMDAwMDAwRkYKLToxMDI5MjAwMDA2MzI0MDEwMDAwMDAwMDIwMjMyODQ1NDAwMDAwMDAwMTEKLToxMDI5MzAwMDA2MzI0MDIwMDAwMDAwMDIwMjMyODQ1ODAwMDAwMDAwRUQKLToxMDI5NDAwMDA2MzI0MDMwMDAwMDAwMDIwMjMyODQ1QzAwMDAwMDAwQzkKLToxMDI5NTAwMDA2MzI0MDQwMDAwMDAwMDIwMjMyODQ2MDAwMDAwMDAwQTUKLToxMDI5NjAwMDA2MzI0MDUwMDAwMDAwMDIwMjMyODQ2NDAwMDAwMDAwODEKLToxMDI5NzAwMDA2MzI0MDYwMDAwMDAwMDIwMjMyODQ2ODAwMDAwMDAwNUQKLToxMDI5ODAwMDA2MzI0MDcwMDAwMDAwMDIwMjMyODQ2QzAwMDAwMDAwMzkKLToxMDI5OTAwMDA2MzI0MDgwMDAwMDAwMDIwNzIwMDQwMDAwNzMwMDAwOUYKLToxMDI5QTAwMDA4MjAwNzgwMDAxMDA0Q0QwNzI0MDAwMDJBRjEwMDAwNTEKLToxMDI5QjAwMDA3MjQ4MDAwMjc2NzBBQkQwODI0RDM1MDYzRkMwNENGOTYKLToxMDI5QzAwMDAyMjAwMEJDMDAwMDAwMzAwMTIwMDAwMDAwMDAwMDAwRDgKLToxMDI5RDAwMDAxMjAwMDA0MDAwMDAwMDAwMTIwMDAwODAwMDAwMDAwQTkKLToxMDI5RTAwMDAxMjAwMDBDMDAwMDAwMDAwMTIwMDAxMDAwMDAwMDAwODkKLToxMDI5RjAwMDAxMjAwMDE0MDAwMDAwMDAwMjIwMDAyMDAwMDAwMDAxNUYKLToxMDJBMDAwMDAyMjAwMDI0MDAwMDAwMDIwMjIwMDAyODAwMDAwMDAzMzEKLToxMDJBMTAwMDAyMjAwMDJDMDAwMDAwMDAwMjIwMDAzMDAwMDAwMDA0MTIKLToxMDJBMjAwMDAyMjAwMDM0MDAwMDAwMDEwMjIwMDAzODAwMDAwMDAwRjUKLToxMDJBMzAwMDAyMjAwMDNDMDAwMDAwMDEwMjIwMDA0MDAwMDAwMDA0RDEKLToxMDJBNDAwMDAyMjAwMDQ0MDAwMDAwMDAwMjIwMDA0ODAwMDAwMDAxQjUKLToxMDJBNTAwMDAyMjAwMDRDMDAwMDAwMDMwMjIwMDA1MDAwMDAwMDAwOTMKLToxMDJBNjAwMDAyMjAwMDU0MDAwMDAwMDEwMjIwMDA1ODAwMDAwMDA0NzEKLToxMDJBNzAwMDAyMjAwMDVDMDAwMDAwMDAwMjIwMDA2MDAwMDAwMDAxNTUKLToxMDJBODAwMDAyMjAwMDY0MDAwMDAwMDMwMjIwMDA2ODAwMDAwMDAwMzMKLToxMDJBOTAwMDAyMjAwMDZDMDAwMDAwMDEwMjIwMDA3MDAwMDAwMDA0MTEKLToxMDJBQTAwMDAyMjAwMDc0MDAwMDAwMDAwMjIwMDA3ODAwMDAwMDA0RjIKLToxMDJBQjAwMDAyMjAwMDdDMDAwMDAwMDMwNjIwMDA4MDAwMDAwMDAyQ0QKLToxMDJBQzAwMDAyMjAwMEE0MDAwMDdGRkYwMjIwMDBBODAwMDAwM0ZGRjYKLToxMDJBRDAwMDAyMjAwMjI0MDAwMDAwMDAwMjIwMDIzNDAwMDAwMDAwNTYKLToxMDJBRTAwMDAyMjAwMjRDMDAwMDAwMDAwMjIwMDJFNDAwMDBGRkZGNzAKLToxMDJBRjAwMDA2MjAyMDAwMDAwMDA4MDAwMjIzOEJDMDAwMDAwMDAxMTcKLToxMDJCMDAwMDAyMjM4MDAwMDAwMDAwMTAwMjIzODA0MDAwMDAwMDEyMTkKLToxMDJCMTAwMDAyMjM4MDgwMDAwMDAwMzAwMjIzODBDMDAwMDAwMDBFRUQKLToxMDJCMjAwMDBDMjM4MzAwMDAwODY0NzAwQTIzODMwMDAwMDAwMTU3MEYKLToxMDJCMzAwMDBCMjM4MzAwMDAwMDA1NUYwQTIzODM0MDAwMDAwMDAwOTAKLToxMDJCNDAwMDBDMjM4MzQwMDAwMDAyMjYwQjIzODM0MDAwMDAwMDAxNzkKLToxMDJCNTAwMDAyMjM4MzgwMDAwODY0NzAwMjIzODNDMDAwMDAwMjI2RTEKLToxMDJCNjAwMDAyMjMxNDgwMDAwMDAwMDEwQTIzMTQ4MDAwMDAwMDAwRUEKLToxMDJCNzAwMDA2MjIxMDAwMDAwMDAwNDIwNjIyMjAwODAwMDAwMEM4QzMKLToxMDJCODAwMDA2MjIyMDAwMDAwMDAwMDIwNjIyQjAwMDAwMDAwMzMwRjAKLToxMDJCOTAwMDA2MjJGNDAwMDAwMDAwNTMwNDIyRjU0QzAwMDEwNEQxODkKLToxMDJCQTAwMDA2MjJGNTUwMDAwMDAwMDMwNDIyRjU1QzAwMDEwNEQyNjcKLToxMDJCQjAwMDA2MjJGNTYwMDAwMDAwMDMwNDIyRjU2QzAwMDEwNEQzMzYKLToxMDJCQzAwMDA2MjJGNTcwMDAwMDAwMDMwNDIyRjU3QzAwMDEwNEQ0MDUKLToxMDJCRDAwMDA2MjJGNTgwMDAwMDAwMDMwNDIyRjU4QzAwMDEwNEQ1RDQKLToxMDJCRTAwMDA2MjJGNTkwMDAwMDAwMDMwNDIyRjU5QzAwMDEwNEQ2QTMKLToxMDJCRjAwMDA2MjJGNUEwMDAwMDAwMDMwNDIyRjVBQzAwMDEwNEQ3NzIKLToxMDJDMDAwMDA2MjJGNUIwMDAwMDAwMDMwNDIyRjVCQzAwMDEwNEQ4NDAKLToxMDJDMTAwMDA2MjJGNUMwMDAwMDAwNDYwNjIyRTIwMDAwMDAwNDQwNDMKLToxMDJDMjAwMDA0MjIxMjQwMDA5MDA0RDkwNjIyMzAwMDAwMDAwMEMwQTcKLToxMDJDMzAwMDA2MjI2NzAwMDAwMDAxMDAwNjIyOTAwMDAwMDAwNDAwNDgKLToxMDJDNDAwMDA0MjI2QjA4MDAyMDA1NjkwNjIyMTFGMDAwMDAwMDA2MkUKLToxMDJDNTAwMDA0MjIxMjA4MDAwNjA1ODkwNjIyMTIyMDAwMDAwMDAyNDQKLToxMDJDNjAwMDA2MjI0MDAwMDAwMDA1QzAwNjIyQzAwMDAwMDAwMDA2NDkKLToxMDJDNzAwMDA0MjJDMDE4MDAwNjA1OEYwNjIyQzAzMDAwMDAwMDBBOUEKLToxMDJDODAwMDA0MjJDMDU4MDAwNjA1OTUwNjIyQzA3MDAwMDAwMDBBMDQKLToxMDJDOTAwMDA0MjJDMDk4MDAwNjA1OUIwNjIyQzBCMDAwMDAwMDBBNkUKLToxMDJDQTAwMDA0MjJDMEQ4MDAwNjA1QTEwNjIyQzBGMDAwMDAwMDBBRDgKLToxMDJDQjAwMDA0MjJDMTE4MDAwNjA1QTcwNjIyQzEzMDAwMDAwMDBBNDAKLToxMDJDQzAwMDA0MjJDMTU4MDAwNjA1QUQwNjIyQzE3MDAwMDAwMDBBQUEKLToxMDJDRDAwMDA0MjJDMTk4MDAwNjA1QjMwNjIyQzFCMDAwMDAwMDBBMTQKLToxMDJDRTAwMDA0MjJDMUQ4MDAwNjA1QjkwNjIyQzFGMDAwMDAwMDBBN0UKLToxMDJDRjAwMDA0MjJDMjE4MDAwNjA1QkYwNjIyQzIzMDAwMDAwMDBBRTYKLToxMDJEMDAwMDA0MjJDMjU4MDAwNjA1QzUwNjIyQzI3MDAwMDAwMDBBNEYKLToxMDJEMTAwMDA0MjJDMjk4MDAwNjA1Q0IwNjIyQzJCMDAwMDAwMDBBQjkKLToxMDJEMjAwMDA0MjJDMkQ4MDAwNjA1RDEwNjIyQzJGMDAwMDAwMDBBMjMKLToxMDJEMzAwMDA0MjJDMzE4MDAwNjA1RDcwNjIyQzMzMDAwMDAwMDBBOEIKLToxMDJENDAwMDA0MjJDMzU4MDAwNjA1REQwNjIyQzM3MDAwMDAwMDBBRjUKLToxMDJENTAwMDA0MjJDMzk4MDAwNjA1RTMwNjIyQzNCMDAwMDAwMDBBNUYKLToxMDJENjAwMDA0MjJDM0Q4MDAwNjA1RTkwNjIyQzNGMDAwMDAwMDBBQzkKLToxMDJENzAwMDA0MjJDNDE4MDAwNjA1RUYwNjIyQzQzMDAwMDAwMDBBMzEKLToxMDJEODAwMDA0MjJDNDU4MDAwNjA1RjUwNjIyQzQ3MDAwMDAwMDBBOUIKLToxMDJEOTAwMDA0MjJDNDk4MDAwNjA1RkIwNjIyQzRCMDAwMDAwMDBBMDUKLToxMDJEQTAwMDA0MjJDNEQ4MDAwNjA2MDEwNjIyQzRGMDAwMDAwMDBBNkUKLToxMDJEQjAwMDA0MjJDNTE4MDAwNjA2MDcwNjIyQzUzMDAwMDAwMDBBRDYKLToxMDJEQzAwMDA0MjJDNTU4MDAwNjA2MEQwNjIyQzU3MDAwMDAwMDBBNDAKLToxMDJERDAwMDA0MjJDNTk4MDAwNjA2MTMwNjIyQzVCMDAwMDAwMDBBQUEKLToxMDJERTAwMDA0MjJDNUQ4MDAwNjA2MTkwNjIyQzVGMDAwMDAwMDBBMTQKLToxMDJERjAwMDA0MjJDNjE4MDAwNjA2MUYwNjIyQzYzMDAwMDAwMDBBN0MKLToxMDJFMDAwMDA0MjJDNjU4MDAwNjA2MjUwNjIyQzY3MDAwMDAwMDBBRTUKLToxMDJFMTAwMDA0MjJDNjk4MDAwNjA2MkIwNjIyQzZCMDAwMDAwMDBBNEYKLToxMDJFMjAwMDA0MjJDNkQ4MDAwNjA2MzEwNjIyQzZGMDAwMDAwMDBBQjkKLToxMDJFMzAwMDA0MjJDNzE4MDAwNjA2MzcwNjIyQzczMDAwMDAwMDBBMjEKLToxMDJFNDAwMDA0MjJDNzU4MDAwNjA2M0QwNjIyQzc3MDAwMDAwMDBBOEIKLToxMDJFNTAwMDA0MjJDNzk4MDAwNjA2NDMwNjIyQzdCMDAwMDAwMDBBRjUKLToxMDJFNjAwMDA0MjJDN0Q4MDAwNjA2NDkwNjIyQzdGMDAwMDAwMDBBNUYKLToxMDJFNzAwMDA0MjJDODE4MDAwNjA2NEYwNjIyQzgzMDAwMDAwMDBBQzcKLToxMDJFODAwMDA0MjJDODU4MDAwNjA2NTUwNjIyQzg3MDAwMDAwMDBBMzEKLToxMDJFOTAwMDA0MjJDODk4MDAwNjA2NUIwNjIyQzhCMDAwMDAwMDBBOUIKLToxMDJFQTAwMDA0MjJDOEQ4MDAwNjA2NjEwNjIyQzhGMDAwMDAwMDBBMDUKLToxMDJFQjAwMDA0MjJDOTE4MDAwNjA2NjcwNjIyQzkzMDAwMDAwMDBBNkQKLToxMDJFQzAwMDA0MjJDOTU4MDAwNjA2NkQwNjIyQzk3MDAwMDAwMDBBRDcKLToxMDJFRDAwMDA0MjJDOTk4MDAwNjA2NzMwNjIyQzlCMDAwMDAwMDBBNDEKLToxMDJFRTAwMDA0MjJDOUQ4MDAwNjA2NzkwNjIyQzlGMDAwMDAwMDBBQUIKLToxMDJFRjAwMDA0MjJDQTE4MDAwNjA2N0YwNjIyQ0EzMDAwMDAwMDBBMTMKLToxMDJGMDAwMDA0MjJDQTU4MDAwNjA2ODUwNjIyQ0E3MDAwMDAwMDBBN0MKLToxMDJGMTAwMDA0MjJDQTk4MDAwNjA2OEIwNjIyQ0FCMDAwMDAwMDBBRTYKLToxMDJGMjAwMDA0MjJDQUQ4MDAwNjA2OTEwNjIyQ0FGMDAwMDAwMDBBNTAKLToxMDJGMzAwMDA0MjJDQjE4MDAwNjA2OTcwNjIyQ0IzMDAwMDAwMDBBQjgKLToxMDJGNDAwMDA0MjJDQjU4MDAwNjA2OUQwNjIyQ0I3MDAwMDAwMDBBMjIKLToxMDJGNTAwMDA0MjJDQjk4MDAwNjA2QTMwNjIyQ0JCMDAwMDAwMDBBOEMKLToxMDJGNjAwMDA0MjJDQkQ4MDAwNjA2QTkwNjIyQ0JGMDAwMDAwMDBBRjYKLToxMDJGNzAwMDA0MjJDQzE4MDAwNjA2QUYwNjIyQ0MzMDAwMDAwMDBBNUUKLToxMDJGODAwMDA0MjJDQzU4MDAwNjA2QjUwNjIyQ0M3MDAwMDAwMDBBQzgKLToxMDJGOTAwMDA0MjJDQzk4MDAwNjA2QkIwNjIyQ0NCMDAwMDAwMDBBMzIKLToxMDJGQTAwMDA0MjJDQ0Q4MDAwNjA2QzEwNjIyQ0NGMDAwMDAwMDBBOUMKLToxMDJGQjAwMDA0MjJDRDE4MDAwNjA2QzcwNjIyQ0QzMDAwMDAwMDBBMDQKLToxMDJGQzAwMDA0MjJDRDU4MDAwNjA2Q0QwNjIyQ0Q3MDAwMDAwMDBBNkUKLToxMDJGRDAwMDA0MjJDRDk4MDAwNjA2RDMwNjIyQ0RCMDAwMDAwMDBBRDgKLToxMDJGRTAwMDA0MjJDREQ4MDAwNjA2RDkwNjIyQ0RGMDAwMDAwMDBBNDIKLToxMDJGRjAwMDA0MjJDRTE4MDAwNjA2REYwNjIyQ0UzMDAwMDAwMDBBQUEKLToxMDMwMDAwMDA0MjJDRTU4MDAwNjA2RTUwNjIyQ0U3MDAwMDAwMDBBMTMKLToxMDMwMTAwMDA0MjJDRTk4MDAwNjA2RUIwNjIyQ0VCMDAwMDAwMDBBN0QKLToxMDMwMjAwMDA0MjJDRUQ4MDAwNjA2RjEwNjIyQ0VGMDAwMDAwMDBBRTcKLToxMDMwMzAwMDA0MjJDRjE4MDAwNjA2RjcwNjIyQ0YzMDAwMDAwMDBBNEYKLToxMDMwNDAwMDA0MjJDRjU4MDAwNjA2RkQwNjIyQ0Y3MDAwMDAwMDBBQjkKLToxMDMwNTAwMDA0MjJDRjk4MDAwNjA3MDMwNjIyQ0ZCMDAwMDAwMDBBMjIKLToxMDMwNjAwMDA0MjJDRkQ4MDAwNjA3MDkwNjIyQ0ZGMDAwMDAwMDBBOEMKLToxMDMwNzAwMDA0MjJEMDE4MDAwNjA3MEYwNjIyRDAzMDAwMDAwMDBBRjQKLToxMDMwODAwMDA0MjJEMDU4MDAwNjA3MTUwNjIyRDA3MDAwMDAwMDBBNUUKLToxMDMwOTAwMDA0MjJEMDk4MDAwNjA3MUIwNjIyRDBCMDAwMDAwMDBBQzgKLToxMDMwQTAwMDA0MjJEMEQ4MDAwNjA3MjEwNjIyRDBGMDAwMDAwMDBBMzIKLToxMDMwQjAwMDA0MjJEMTE4MDAwNjA3MjcwNjIyRDEzMDAwMDAwMDBBOUEKLToxMDMwQzAwMDA0MjJEMTU4MDAwNjA3MkQwNjIyRDE3MDAwMDAwMDBBMDQKLToxMDMwRDAwMDA0MjJEMTk4MDAwNjA3MzMwNjIyRDFCMDAwMDAwMDBBNkUKLToxMDMwRTAwMDA0MjJEMUQ4MDAwNjA3MzkwNjIyRDFGMDAwMDAwMDBBRDgKLToxMDMwRjAwMDA0MjJEMjE4MDAwNjA3M0YwNjIyRDIzMDAwMDAwMDBBNDAKLToxMDMxMDAwMDA0MjJEMjU4MDAwNjA3NDUwNjIyRDI3MDAwMDAwMDBBQTkKLToxMDMxMTAwMDA0MjJEMjk4MDAwNjA3NEIwNjIyRDJCMDAwMDAwMDBBMTMKLToxMDMxMjAwMDA0MjJEMkQ4MDAwNjA3NTEwNjIyRDJGMDAwMDAwMDBBN0QKLToxMDMxMzAwMDA0MjJEMzE4MDAwNjA3NTcwNjIyRDMzMDAwMDAwMDBBRTUKLToxMDMxNDAwMDA0MjJEMzU4MDAwNjA3NUQwNjIyRDM3MDAwMDAwMDBBNEYKLToxMDMxNTAwMDA0MjJEMzk4MDAwNjA3NjMwNjIyRDNCMDAwMDAwMDBBQjkKLToxMDMxNjAwMDA0MjJEM0Q4MDAwNjA3NjkwNjIyRDNGMDAwMDAwMDBBMjMKLToxMDMxNzAwMDA0MjJENDE4MDAwNjA3NkYwNjIyRDQzMDAwMDAwMDBBOEIKLToxMDMxODAwMDA0MjJENDU4MDAwNjA3NzUwNjIyRDQ3MDAwMDAwMDBBRjUKLToxMDMxOTAwMDA0MjJENDk4MDAwNjA3N0IwNjIyRDRCMDAwMDAwMDBBNUYKLToxMDMxQTAwMDA0MjJENEQ4MDAwNjA3ODEwNjIyRDRGMDAwMDAwMDBBQzkKLToxMDMxQjAwMDA0MjJENTE4MDAwNjA3ODcwNjIyRDUzMDAwMDAwMDBBMzEKLToxMDMxQzAwMDA0MjJENTU4MDAwNjA3OEQwNjIyRDU3MDAwMDAwMDBBOUIKLToxMDMxRDAwMDA0MjJENTk4MDAwNjA3OTMwNjIyRDVCMDAwMDAwMDBBMDUKLToxMDMxRTAwMDA0MjJENUQ4MDAwNjA3OTkwNjIyRDVGMDAwMDAwMDBBNkYKLToxMDMxRjAwMDA0MjJENjE4MDAwNjA3OUYwNjIyRDYzMDAwMDAwMDBBRDcKLToxMDMyMDAwMDA0MjJENjU4MDAwNjA3QTUwNjIyRDY3MDAwMDAwMDBBNDAKLToxMDMyMTAwMDA0MjJENjk4MDAwNjA3QUIwNjIyRDZCMDAwMDAwMDBBQUEKLToxMDMyMjAwMDA0MjJENkQ4MDAwNjA3QjEwNjIyRDZGMDAwMDAwMDBBMTQKLToxMDMyMzAwMDA0MjJENzE4MDAwNjA3QjcwNjIyRDczMDAwMDAwMDBBN0MKLToxMDMyNDAwMDA0MjJENzU4MDAwNjA3QkQwNjIyRDc3MDAwMDAwMDBBRTYKLToxMDMyNTAwMDA0MjJENzk4MDAwNjA3QzMwNjIyRDdCMDAwMDAwMDBBNTAKLToxMDMyNjAwMDA0MjJEN0Q4MDAwNjA3QzkwNjIyRDdGMDAwMDAwMDBBQkEKLToxMDMyNzAwMDA0MjJEODE4MDAwNjA3Q0YwNjIyRDgzMDAwMDAwMDBBMjIKLToxMDMyODAwMDA0MjJEODU4MDAwNjA3RDUwNjIyRDg3MDAwMDAwMDBBOEMKLToxMDMyOTAwMDA0MjJEODk4MDAwNjA3REIwNjIyRDhCMDAwMDAwMDBBRjYKLToxMDMyQTAwMDA0MjJEOEQ4MDAwNjA3RTEwNjIyRDhGMDAwMDAwMDBBNjAKLToxMDMyQjAwMDA0MjJEOTE4MDAwNjA3RTcwNjIyRDkzMDAwMDAwMDBBQzgKLToxMDMyQzAwMDA0MjJEOTU4MDAwNjA3RUQwNjIyRDk3MDAwMDAwMDBBMzIKLToxMDMyRDAwMDA0MjJEOTk4MDAwNjA3RjMwNjIyRDlCMDAwMDAwMDBBOUMKLToxMDMyRTAwMDA0MjJEOUQ4MDAwNjA3RjkwNjIyRDlGMDAwMDAwMDBBMDYKLToxMDMyRjAwMDA0MjJEQTE4MDAwNjA3RkYwNjIyREEzMDAwMDAwMDBBNkUKLToxMDMzMDAwMDA0MjJEQTU4MDAwNjA4MDUwNjIyREE3MDAwMDAwMDBBRDYKLToxMDMzMTAwMDA0MjJEQTk4MDAwNjA4MEIwNjIyREFCMDAwMDAwMDBBNDAKLToxMDMzMjAwMDA0MjJEQUQ4MDAwNjA4MTEwNjIyREFGMDAwMDAwMDBBQUEKLToxMDMzMzAwMDA0MjJEQjE4MDAwNjA4MTcwNjIyREIzMDAwMDAwMDBBMTIKLToxMDMzNDAwMDA0MjJEQjU4MDAwNjA4MUQwNjIyREI3MDAwMDAwMDBBN0MKLToxMDMzNTAwMDA0MjJEQjk4MDAwNjA4MjMwNjIyREJCMDAwMDAwMDBBRTYKLToxMDMzNjAwMDA0MjJEQkQ4MDAwNjA4MjkwNjIyREJGMDAwMDAwMDBBNTAKLToxMDMzNzAwMDA0MjJEQzE4MDAwNjA4MkYwNjIyREMzMDAwMDAwMDBBQjgKLToxMDMzODAwMDA0MjJEQzU4MDAwNjA4MzUwNjIyREM3MDAwMDAwMDBBMjIKLToxMDMzOTAwMDA0MjJEQzk4MDAwNjA4M0IwNjIyRENCMDAwMDAwMDBBOEMKLToxMDMzQTAwMDA0MjJEQ0Q4MDAwNjA4NDEwNjIyRENGMDAwMDAwMDBBRjYKLToxMDMzQjAwMDA0MjJERDE4MDAwNjA4NDcwNjIyREQzMDAwMDAwMDBBNUUKLToxMDMzQzAwMDA0MjJERDU4MDAwNjA4NEQwNjIyREQ3MDAwMDAwMDBBQzgKLToxMDMzRDAwMDA0MjJERDk4MDAwNjA4NTMwNjIyRERCMDAwMDAwMDBBMzIKLToxMDMzRTAwMDA0MjJEREQ4MDAwNjA4NTkwNjIyRERGMDAwMDAwMDBBOUMKLToxMDMzRjAwMDA0MjJERTE4MDAwNjA4NUYwNjIyREUzMDAwMDAwMDBBMDQKLToxMDM0MDAwMDA0MjJERTU4MDAwNjA4NjUwNjIyREU3MDAwMDAwMDBBNkQKLToxMDM0MTAwMDA0MjJERTk4MDAwNjA4NkIwNjIyREVCMDAwMDAwMDBBRDcKLToxMDM0MjAwMDA0MjJERUQ4MDAwNjA4NzEwNjIyREVGMDAwMDAwMDBBNDEKLToxMDM0MzAwMDA0MjJERjE4MDAwNjA4NzcwNjIyREYzMDAwMDAwMDBBQTkKLToxMDM0NDAwMDA0MjJERjU4MDAwNjA4N0QwNjIyREY3MDAwMDAwMDBBMTMKLToxMDM0NTAwMDA0MjJERjk4MDAwNjA4ODMwNjIyREZCMDAwMDAwMDBBN0QKLToxMDM0NjAwMDA0MjJERkQ4MDAwNjA4ODkwNjIyREZGMDAwMDAwMDBBRTcKLToxMDM0NzAwMDA0MjJFMDE4MDAwNjA4OEYwNjIyRTAzMDAwMDAwMDBBNEYKLToxMDM0ODAwMDA0MjJFMDU4MDAwNjA4OTUwNjIyRTA3MDAwMDAwMDBBQjkKLToxMDM0OTAwMDA0MjJFMDk4MDAwNjA4OUIwNjIyRTBCMDAwMDAwMDBBMjMKLToxMDM0QTAwMDA0MjJFMEQ4MDAwNjA4QTEwNjIyRTBGMDAwMDAwMDBBOEQKLToxMDM0QjAwMDA0MjJFMTE4MDAwNjA4QTcwNjIyRTEzMDAwMDAwMDBBRjUKLToxMDM0QzAwMDA0MjJFMTU4MDAwNjA4QUQwNjIyRTE3MDAwMDAwMDBBNUYKLToxMDM0RDAwMDA0MjJFMTk4MDAwNjA4QjMwNjIyRTFCMDAwMDAwMDBBQzkKLToxMDM0RTAwMDA0MjJFMUQ4MDAwNjA4QjkwNjIyRTFGMDAwMDAwMDA0MzkKLToxMDM0RjAwMDA2MjIxNTM4MDAwMDAwMDIwNjIyMTFFODAwMDAwMDAyMzIKLToxMDM1MDAwMDA2MjJGMzAwMDAwMDAwMDgwMjIyMTE0ODAwMDAwMDAwMUIKLToxMDM1MTAwMDA2MjI1OTAwMDAwMDAwMDYwNjIyMzMwMDAwMDAwMDAyQzcKLToxMDM1MjAwMDA2MjI2MDQwMDAwMDAwMzAwNjIyRjMyMDAwMDAwMDA4NjAKLToxMDM1MzAwMDAyMjIxMTRDMDAwMDAwMDAwNjIyNTkxODAwMDAwMDA2NkIKLToxMDM1NDAwMDA2MjIzMzA4MDAwMDAwMDIwNjIyNjEwMDAwMDAwMDMwNUQKLToxMDM1NTAwMDA2MjJGMzQwMDAwMDAwMDgwMjIyMTE1MDAwMDAwMDAwODMKLToxMDM1NjAwMDA2MjI1OTMwMDAwMDAwMDYwNjIyMzMxMDAwMDAwMDAyMzcKLToxMDM1NzAwMDA2MjI2MUMwMDAwMDAwMzAwNjIyRjM2MDAwMDAwMDA4NEYKLToxMDM1ODAwMDAyMjIxMTU0MDAwMDAwMDAwNjIyNTk0ODAwMDAwMDA2RTMKLToxMDM1OTAwMDA2MjIzMzE4MDAwMDAwMDIwNjIyNjI4MDAwMDAwMDMwN0MKLToxMDM1QTAwMDA2MjJGMzgwMDAwMDAwMDgwMjIyMTE1ODAwMDAwMDAwRUIKLToxMDM1QjAwMDA2MjI1OTYwMDAwMDAwMDYwNjIyMzMyMDAwMDAwMDAyQTcKLToxMDM1QzAwMDA2MjI2MzQwMDAwMDAwMzAwNjIyRjNBMDAwMDAwMDA4M0QKLToxMDM1RDAwMDAyMjIxMTVDMDAwMDAwMDAwNjIyNTk3ODAwMDAwMDA2NUIKLToxMDM1RTAwMDA2MjIzMzI4MDAwMDAwMDIwNjIyNjQwMDAwMDAwMDMwOUEKLToxMDM1RjAwMDA2MjJGM0MwMDAwMDAwMDgwMjIyMTE2MDAwMDAwMDAwNTMKLToxMDM2MDAwMDA2MjI1OTkwMDAwMDAwMDYwNjIyMzMzMDAwMDAwMDAyMTYKLToxMDM2MTAwMDA2MjI2NEMwMDAwMDAwMzAwNjIyRjNFMDAwMDAwMDA4MkIKLToxMDM2MjAwMDAyMjIxMTY0MDAwMDAwMDAwNjIyNTlBODAwMDAwMDA2RDIKLToxMDM2MzAwMDA2MjIzMzM4MDAwMDAwMDIwNjIyNjU4MDAwMDAwMDMwQjgKLToxMDM2NDAwMDAyMTYxMDAwMDAwMDAwMjgwMjE3MDAwODAwMDAwMDAyMDcKLToxMDM2NTAwMDAyMTcwMDJDMDAwMDAwMDMwMjE3MDAzQzAwMDAwMDA0QzkKLToxMDM2NjAwMDAyMTcwMDQ0MDAwMDAwMDAwMjE3MDA0ODAwMDAwMDAyOUEKLToxMDM2NzAwMDAyMTcwMDRDMDAwMDAwOTAwMjE3MDA1MDAwMDAwMDkwNUMKLToxMDM2ODAwMDAyMTcwMDU0MDA4MDAwOTAwMjE3MDA1ODA4MTAwMDAwMzQKLToxMDM2OTAwMDAyMTcwMDcwMDAwMDAwMDYwMjE3MDA3ODAwMDAwOUZGMDIKLToxMDM2QTAwMDAyMTcwMDdDMDAwMDA3NkMwMjE3MDFDNDA4MTAwMDAwMUMKLToxMDM2QjAwMDAyMTcwMzQ0MDAwMDAwMDEwMjE3MDQwMDAwMDAwMDhBMDIKLToxMDM2QzAwMDAyMTcwNDA0MDAwMDAwODAwMjE3MDQwODAwMDAwMDgxQjMKLToxMDM2RDAwMDAyMTcwNDBDMDAwMDAwODAwMjE3MDQxMDAwMDAwMDhBOEEKLToxMDM2RTAwMDAyMTcwNDE0MDAwMDAwODAwMjE3MDQxODAwMDAwMDgxNzMKLToxMDM2RjAwMDAyMTcwNDFDMDAwMDAwODAwMjE3MDQzMDAwMDAwMDhBM0EKLToxMDM3MDAwMDAyMTcwNDM0MDAwMDAwODAwMjE3MDQzODAwMDAwMDgxMTIKLToxMDM3MTAwMDAyMTcwNDNDMDAwMDAwODAwMjE3MDQ0MDAwMDAwMDhBRTkKLToxMDM3MjAwMDAyMTcwNDQ0MDAwMDAwODAwMjE3MDQ0ODAwMDAwMDgxRDIKLToxMDM3MzAwMDAyMTcwNDRDMDAwMDAwODAwMjE3MDQ4MDAwMDAwMDhBNzkKLToxMDM3NDAwMDAyMTcwNDg0MDAwMDAwODAwMjE3MDQ4ODAwMDAwMDgxMzIKLToxMDM3NTAwMDAyMTcwNDhDMDAwMDAwODAwMjE3MDAzODAwN0MxMDA0NUYKLToxMDM3NjAwMDAyMTcwMDA0MDAwMDAwMEYwMjE3MDFFQzAwMDAwMDAyMjUKLToxMDM3NzAwMDAyMTcwMUY0MDAwMDAwMDIwMjE3MDFFQzAwMDAwMDAyMzEKLToxMDM3ODAwMDAyMTcwMUY0MDAwMDAwMDIwMjE3MDFFQzAwMDAwMDAyMjEKLToxMDM3OTAwMDAyMTcwMUY0MDAwMDAwMDIwMjE3MDFFQzAwMDAwMDAyMTEKLToxMDM3QTAwMDAyMTcwMUY0MDAwMDAwMDIwMjE3MDFFQzAwMDAwMDAyMDEKLToxMDM3QjAwMDAyMTcwMUY0MDAwMDAwMDIwMjE3MDFFQzAwMDAwMDAyRjEKLToxMDM3QzAwMDAyMTcwMUY0MDAwMDAwMDIwMjE3MDFFQzAwMDAwMDAyRTEKLToxMDM3RDAwMDAyMTcwMUY0MDAwMDAwMDIwMjE3MDFFQzAwMDAwMDAyRDEKLToxMDM3RTAwMDAyMTcwMUY0MDAwMDAwMDIwNjE2NDAyNDAwMDAwMDAyNDcKLToxMDM3RjAwMDAyMTY0MDcwMDAwMDAwMUMwMjE2NDIwODAwMDAwMDAxODIKLToxMDM4MDAwMDAyMTY0MjEwMDAwMDAwMDEwMjE2NDIyMDAwMDAwMDAxRDIKLToxMDM4MTAwMDAyMTY0MjI4MDAwMDAwMDEwMjE2NDIzMDAwMDAwMDAxOUEKLToxMDM4MjAwMDAyMTY0MjM4MDAwMDAwMDEwMjE2NDI2MDAwMDAwMDAyNDkKLToxMDM4MzAwMDBDMTY0MDFDMDAwM0QwOTAwQTE2NDAxQzAwMDAwMDlDOEYKLToxMDM4NDAwMDBCMTY0MDFDMDAwMDAyNzEwMjE2NDAzMDAwMDAwMDI4RDgKLToxMDM4NTAwMDAyMTY0MDM0MDAwMDAwMkMwMjE2NDAzODAwMDAwMDMwRjAKLToxMDM4NjAwMDAyMTY0MDQ0MDAwMDAwMjAwMjE2NDAwMDAwMDAwMDAxNDMKLToxMDM4NzAwMDAyMTY0MEQ4MDAwMDAwMDEwMjE2NDAwODAwMDAwMDAxQjYKLToxMDM4ODAwMDAyMTY0MDBDMDAwMDAwMDEwMjE2NDAxMDAwMDAwMDAxNkEKLToxMDM4OTAwMDAyMTY0MjQwMDAwMDAwMDAwMjE2NDI0ODAwMDAwMDAwRUMKLToxMDM4QTAwMDA2MTY0MjcwMDAwMDAwMDIwMjE2NDI1MDAwMDAwMDAwOUUKLToxMDM4QjAwMDAyMTY0MjU4MDAwMDAwMDAwNjE2NDI4MDAwMDAwMDAyNzYKLToxMDM4QzAwMDAyMTY2MDA4MDAwMDEyMTQwMjE2NjAwQzAwMDAxMjAwQkMKLToxMDM4RDAwMDAyMTY2MDEwMDAwMDEyMDQwMjE2NjAxQzAwMDBGRkZGQjgKLToxMDM4RTAwMDAyMTY2MDIwMDAwMEZGRkYwMjE2NjAyNDAwMDBGRkZGQTgKLToxMDM4RjAwMDAyMTY2MDI4MDAwMEZGRkYwMjE2NjAzODAwMDAwMDIwNUEKLToxMDM5MDAwMDAyMTY2MDNDMDAwMDAwMTAwNjE2NjA0MDAwMDAwMDAyMzUKLToxMDM5MTAwMDAyMTY2MDQ4MDAwMDAwMjMwMjE2NjA0QzAwMDAwMDI0REMKLToxMDM5MjAwMDAyMTY2MDUwMDAwMDAwMjUwMjE2NjA1NDAwMDAwMDI2QjgKLToxMDM5MzAwMDAyMTY2MDU4MDAwMDAwMjcwMjE2NjA1QzAwMDAwMDExQUIKLToxMDM5NDAwMDAyMTY2MDYwMDAwMDAwMDAwMjE2NjA2NDAwMDAwMDJCOTgKLToxMDM5NTAwMDAyMTY2MDY4MDAwMDAwMkMwMjE2NjA2QzAwMDAwMDJENEEKLToxMDM5NjAwMDAyMTY2MDcwMDAwMDAwRUMwMjE2NjA3NDAwMDAwMDAwOTcKLToxMDM5NzAwMDAyMTY2MDc4MDAwMDAwMjkwMjE2NjA3QzAwMDAwMDJBMTAKLToxMDM5ODAwMDAyMTY2MDgwMDAwMDAwMkYwNjE2NjA4NDAwMDAwMDBEMDMKLToxMDM5OTAwMDAyMTY2MEI4MDAwMDAwMDEwNjE2NjBCQzAwMDAwMDA4QjYKLToxMDM5QTAwMDAyMTY2MERDMDAwMDAwMDEwNjE2NjBFMDAwMDAwMDA0NjIKLToxMDM5QjAwMDAyMTY2MEYwMDAwMDAwMDEwNjE2NjBGNDAwMDAwMDAzMkIKLToxMDM5QzAwMDAyMTY2MTAwMDAwMDAwMDEwNjE2NjEwNDAwMDAwMDJEQ0YKLToxMDM5RDAwMDAyMTY2MUI4MDAwMDAwMDEwNjE2NjFCQzAwMDAwMDA4NzQKLToxMDM5RTAwMDAyMTY2MURDMDAwMDAwMDEwNjE2NjFFMDAwMDAwMDA0MjAKLToxMDM5RjAwMDAyMTY2MUYwMDAwMDAwMDEwNjE2NjFGNDAwMDAwMDAzRTkKLToxMDNBMDAwMDAyMTY2MjAwMDAwMDAwMDEwNjE2NjIwNDAwMDAwMDBEQUMKLToxMDNBMTAwMDAyMTY2MjM4MDdGRkZGRkYwMjE2NjIzQzAwMDAwMDdGQkIKLToxMDNBMjAwMDAyMTY2MjQwMDdGRkZGRkYwMjE2NjI0NDAwMDAwMDNGREIKLToxMDNBMzAwMDAxMTY2MjQ4MDAwMDAwMDAwMTE2NjI0QzAwMDAwMDAwMDAKLToxMDNBNDAwMDAxMTY2MjUwMDAwMDAwMDAwMTE2NjI1NDAwMDAwMDAwRTAKLToxMDNBNTAwMDAxMTY2MjU4MDAwMDAwMDAwMTE2NjI1QzAwMDAwMDAwQzAKLToxMDNBNjAwMDAxMTY2MjYwMDAwMDAwMDAwMTE2NjI2NDAwMDAwMDAwQTAKLToxMDNBNzAwMDAxMTY2MjY4MDAwMDAwMDAwMTE2NjI2QzAwMDAwMDAwODAKLToxMDNBODAwMDAxMTY2MjcwMDAwMDAwMDAwMTE2NjI3NDAwMDAwMDAwNjAKLToxMDNBOTAwMDAxMTY2Mjc4MDAwMDAwMDAwMTE2NjI3QzAwMDAwMDAwNDAKLToxMDNBQTAwMDAxMTY2MkQ0MDAwMDAwMDAwMjE2NjJEODAwMDBGRkZGNzkKLToxMDNBQjAwMDAyMTY2MkRDMDAwMEZGRkYwMjE2NjJFMDAwMDBGRkZGNUEKLToxMDNBQzAwMDAyMTY2MkU0MDAwMEZGRkYwQzE2NjAwMDAwMDAwM0U4MkQKLToxMDNBRDAwMDBBMTY2MDAwMDAwMDAwMDEwQjE2NjAwMDAwMDAwMDAzRTEKLToxMDNBRTAwMDAyMTY4MDQwMDAwMDAwMDYwMjE2ODA0NDAwMDAwMDA1MTcKLToxMDNBRjAwMDAyMTY4MDQ4MDAwMDAwMEEwMjE2ODA0QzAwMDAwMDA1RjMKLToxMDNCMDAwMDAyMTY4MDU0MDAwMDAwMDIwMjE2ODBDQzAwMDAwMDA0NUYKLToxMDNCMTAwMDAyMTY4MEQwMDAwMDAwMDQwMjE2ODBENDAwMDAwMDA0QzkKLToxMDNCMjAwMDAyMTY4MEQ4MDAwMDAwMDQwMjE2ODBEQzAwMDAwMDA0QTkKLToxMDNCMzAwMDAyMTY4MEUwMDAwMDAwMDQwMjE2ODBFNDAwMDAwMDA0ODkKLToxMDNCNDAwMDAyMTY4MEU4MDAwMDAwMDQwMjE2ODgwNDAwMDAwMDA2NDcKLToxMDNCNTAwMDAyMTY4MDMwMDAwMDAwN0MwMjE2ODAzNDAwMDAwMDNEMTgKLToxMDNCNjAwMDAyMTY4MDM4MDAwMDAwM0YwMjE2ODAzQzAwMDAwMDlDRDYKLToxMDNCNzAwMDAyMTZFNkU4MDAwMDYwMDAwMjE2RTZFQzAwMDA2MDAwQjUKLToxMDNCODAwMDAyMTZFNkYwMDAwMDYwMDAwMjE2RTZGNDAwMDA2MDAwOTUKLToxMDNCOTAwMDAyMTY4MjM0MDAwMDI1RTQwMjE2ODIzODAwMDA4MDAwRkMKLToxMDNCQTAwMDAyMTY4MDk0MDAwMDI1RTMwMjE2ODFGNDAwMDAwQzA4NDAKLToxMDNCQjAwMDAyMTY4MUY4MDAwMDAwNDAwMjE2ODFGQzAwMDAwMTAwOUUKLToxMDNCQzAwMDAyMTY4MjAwMDAwMDAwMjAwMjE2ODIwNDAwMDAwMDE3ODYKLToxMDNCRDAwMDAyMTY4MjA4MDAwMDAwODAwMjE2ODIwQzAwMDAwMjAwMUIKLToxMDNCRTAwMDAyMTY4MjEwMDAwMDAwMDAwMjE2ODIzQzAwMDAwMDEzNDIKLToxMDNCRjAwMDAyMTY4MjIwMDA4RjAwOEYwMjE2ODIxQzAwOEYwMDhGMTkKLToxMDNDMDAwMDAyMTY4MEYwMDAwMDAwMDcwMjE2ODIxODAxRkYwMUZGNzMKLToxMDNDMTAwMDAyMTY4MjE0MDFGRjAxRkYwNjE2ODBGNDAwMDAwMDAyNjQKLToxMDNDMjAwMDAyMTY4MTFDMDAwMDAwMDUwMjE2ODEyMDAwMDAwMDA1MUMKLToxMDNDMzAwMDAyMTY4MTI0MDAwMDAwMDUwMjE2ODEyODAwMDAwMDA4RjkKLToxMDNDNDAwMDAyMTY4MTJDMDAwMDAwMDYwMjE2ODEzMDAwMDAwMDA3RDkKLToxMDNDNTAwMDA2MTY4MTM0MDAwMDAwMDQwMjE2ODBGQzAwMDAwMDAwRkIKLToxMDNDNjAwMDA2MTY4MTQ0MDAwMDAwMDIwMjE2ODE0QzAwMDAwMDA0ODgKLToxMDNDNzAwMDAyMTY4MTUwMDAwMDAwMDEwMjE2ODE1NDAwMDAwMDAyNkIKLToxMDNDODAwMDAyMTY4MTU4MDAwMDAwMDUwMjE2ODE1QzAwMDAwMDA1NDQKLToxMDNDOTAwMDAyMTY4MTYwMDAwMDAwMDUwMjE2ODE2NDAwMDAwMDA1MjQKLToxMDNDQTAwMDAyMTY4MTY4MDAwMDAwMDgwMjE2ODEwMDAwMDAwMDAwNzIKLToxMDNDQjAwMDAyMTY4MTZDMDAwMDAwMDYwMjE2ODE3MDAwMDAwMDA3RTkKLToxMDNDQzAwMDA2MTY4MTc0MDAwMDAwMDYwMjE2ODE4QzAwMDAwMDA0QjQKLToxMDNDRDAwMDAyMTY4MTkwMDAwMDAwMDEwMjE2ODEwNDAwMDAwMDAwMUQKLToxMDNDRTAwMDAyMTY4MTk0MDAwMDAwMDIwMjE2ODE5ODAwMDAwMDA1NkYKLToxMDNDRjAwMDAyMTY4MTlDMDAwMDAwMDUwMjE2ODFBMDAwMDAwMDA1NEMKLToxMDNEMDAwMDAyMTY4MUE0MDAwMDAwMDUwMjE2ODFBODAwMDAwMDA4MjgKLToxMDNEMTAwMDAyMTY4MUFDMDAwMDAwMDYwMjE2ODFCMDAwMDAwMDA3MDgKLToxMDNEMjAwMDA2MTY4MUI0MDAwMDAwMDIwMjE2ODEwODAwMDAwMDAwOUYKLToxMDNEMzAwMDA2MTY4MUJDMDAwMDAwMDQwMjE2ODFDQzAwMDAwMDA0QkQKLToxMDNENDAwMDAyMTY4MUQwMDAwMDAwMDEwMjE2ODFENDAwMDAwMDAyOUEKLToxMDNENTAwMDAyMTY4MUQ4MDAwMDAwMDUwMjE2ODFEQzAwMDAwMDA1NzMKLToxMDNENjAwMDAyMTY4MUUwMDAwMDAwMDUwMjE2ODEwQzAwMDAwMDA0MkMKLToxMDNENzAwMDAyMTY4MUU0MDAwMDAwMDUwMjE2ODFFODAwMDAwMDA4MzgKLToxMDNEODAwMDAyMTY4MUVDMDAwMDAwMDYwMjE2ODFGMDAwMDAwMDA3MTgKLToxMDNEOTAwMDAyMTY4MTEwMDAwMDAwMDEwMjE2ODExNDAwMDAwMDAyQ0EKLToxMDNEQTAwMDAyMTY4MTE4MDAwMDAwMDUwMjE2ODA5QzAwMDAwMDRDREQKLToxMDNEQjAwMDAyMTY4MEEwMDAwMDAwNEMwNjE2ODBDNDAwMDAwMDAyMUQKLToxMDNEQzAwMDAyMTY4MEE0MDAwMDAwMDAwMjE2ODBBODAwMDAwMDAwNzcKLToxMDNERDAwMDAyMTY4MEFDMDAwMDAwNEMwNjE2ODBCMDAwMDAwMDA1MDIKLToxMDNERTAwMDAyMTZFNkY4MDAwMDAyMDQwMjE2ODI0MDAwM0YwMDNGN0YKLToxMDNERjAwMDAyMTY4MjQ0MDAzRjAwM0YwNjE2ODI5MDAwMDAwMDA0MzUKLToxMDNFMDAwMDAyMTY4MjQ4MDA4MDAwODAwMjE2ODI0QzAwODAwMDgwRUEKLToxMDNFMTAwMDAyMTY4MjUwMDEwMDAxMDAwMjE2ODI1NDAxMDAwMTAwQzYKLToxMDNFMjAwMDA2MTY4MjU4MDAwMDAwMDIwMjE2ODI2MDAwNDAwMDQwMjAKLToxMDNFMzAwMDAyMTY4MjY0MDA0MDAwNDAwMjE2ODI2ODFFMDAxRTAwQzYKLToxMDNFNDAwMDAyMTY4MjZDMUUwMDFFMDAwMjE2ODI3MDQwMDA0MDAwQTYKLToxMDNFNTAwMDAyMTY4Mjc0NDAwMDQwMDAwMjE2ODI3ODgwMDA4MDAwQzIKLToxMDNFNjAwMDAyMTY4MjdDODAwMDgwMDAwMjE2ODI4MDIwMDAyMDAwRTIKLToxMDNFNzAwMDAyMTY4Mjg0MjAwMDIwMDAwNjE2ODI4ODAwMDAwMDAyQkMKLToxMDNFODAwMDAyMTY4MDkwMDAwMDAwNEIwMjE2ODA2MDAwMDAwMTQwODYKLToxMDNFOTAwMDAyMTY4MDY0MDAwMDAxNDAwNjE2ODA4ODAwMDAwMDAyQkYKLToxMDNFQTAwMDAyMTY4MDY4MDAwMDAwMDAwMjE2ODA2QzAwMDAwMDAwMEUKLToxMDNFQjAwMDAyMTY4MDcwMDAwMDAwQzAwNjE2ODA3NDAwMDAwMDA1MjUKLToxMDNFQzAwMDAyMTY4ODBDMDEwMTAxMDEwMjE2ODgxMDAxMDEyMDA0NkMKLToxMDNFRDAwMDAyMTY4ODE0MjAwODEwMDEwMjE2ODgxODAxMDEwMTIwMUEKLToxMDNFRTAwMDAyMTY4ODFDMDEwMTAxMDEwMjE2ODgyMDAxMDEyMDA0MkMKLToxMDNFRjAwMDAyMTY4ODI0MjAwODEwMDEwMjE2ODgyODAxMDEwMTIwREEKLToxMDNGMDAwMDAyMTY4ODJDMjAwODEwMDEwMjE2ODgzMDAxMDEwMTIwQjkKLToxMDNGMTAwMDAyMTY4ODM0MDEwMTAxMDEwMjE2ODgzODAxMDEyMDA0Q0IKLToxMDNGMjAwMDAyMTY4ODNDMjAwODEwMDEwMjE2ODg0MDAxMDEwMTIwNzkKLToxMDNGMzAwMDAyMTY4ODQ0MDEwMTAxMDEwMjE2ODg0ODAxMDEyMDA0OEIKLToxMDNGNDAwMDAyMTZFNkJDMDAwMDAwMDAwMjE2RTZDMDAwMDAwMDAyRjcKLToxMDNGNTAwMDAyMTZFNkM0MDAwMDAwMDQwMjE2RTZDODAwMDAwMDA2Q0YKLToxMDNGNjAwMDAyMTZFNzk0MDAwMDAwMDEwMjE2ODBFQzAwMDAwMEZGM0EKLToxMDNGNzAwMDAyMTQwMDAwMDAwMDAwMDEwMjE1QzAyNDAwMDAwMDAwMkYKLToxMDNGODAwMDAyMTVDMEVDMDAwMDAwMDEwMjE1QzBGMDAwMDAwMDAxQTUKLToxMDNGOTAwMDA2MTVDMTAwMDAwMDAwMDIwMjE0MDAwNDAwMDAwMDAxMjgKLToxMDNGQTAwMDAyMTQwMDA4MDAwMDAwMDEwMjE0MDAwQzAwMDAwMDAxQ0YKLToxMDNGQjAwMDAyMTQwMDMwMDAwMDAwMDEwMjE0MDAzNDAwMDAwMDAxNkYKLToxMDNGQzAwMDAyMTQwMDQwMDAwMDAwMDEwMjE0MDA0NDAwMDBGRkZGNDIKLToxMDNGRDAwMDA2MTQwMDA0MDAwMDAwMDMwMjE0MDAwMDAwMDAwMDAwQUEKLToxMDNGRTAwMDA2MDI4MDAwMDAwMDIwMDAwMjAyMDA1ODAwMDAwMDMyOUIKLToxMDNGRjAwMDAyMDIwMEEwMDMxNTAwMjAwMjAyMDBBNDAzMTUwMDIwMDUKLToxMDQwMDAwMDAyMDIwMEE4MDEwMDAwMzAwMjAyMDBBQzA4MTAwMDAwMEIKLToxMDQwMTAwMDAyMDIwMEIwMDAwMDAwMzYwMjAyMDBCNDAwMDAwMDMwQ0UKLToxMDQwMjAwMDAyMDIwMEI4MDAwMDAwMzEwMjAyMDBCQzAwMDAwMDAyRTEKLToxMDQwMzAwMDAyMDIwMEMwMDAwMDAwMDUwMjAyMDBDNDAwMDAwMDAyRUQKLToxMDQwNDAwMDAyMDIwMEM4MDAwMDAwMDIwMjAyMDBEMDAwMDAwMDA3QzcKLToxMDQwNTAwMDAyMDIwMERDMDAwMDAwMDAwMjAyMDBFMDAwMDAwMDA1OTcKLToxMDQwNjAwMDAyMDIwMEU0MDAwMDAwMDMwMjAyMDBGMDAwMDAwMDAxNzAKLToxMDQwNzAwMDAyMDIwMEZDMDAwMDAwMDYwMjAyMDEyMDAwMDAwMDAwMTUKLToxMDQwODAwMDAyMDIwMTM0MDAwMDAwMDIwMjAyMDFCMDAwMDAwMDAxM0YKLToxMDQwOTAwMDAyMDIwMjBDMDAwMDAwMDEwMjAyMDIxNDAwMDAwMDAxRjIKLToxMDQwQTAwMDAyMDIwMjE4MDAwMDAwMDIwMjAyMDQwNDAwMDAwMDAxRTMKLToxMDQwQjAwMDAyMDIwNDBDMDAwMDAwNDAwMjAyMDQxMDAwMDAwMDQwNTQKLToxMDQwQzAwMDAyMDIwNDFDMDAwMDAwMDQwMjAyMDQyMDAwMDAwMDIwODAKLToxMDQwRDAwMDAyMDIwNDI0MDAwMDAwMDIwMjAyMDQyODAwMDAwMDIwNjIKLToxMDQwRTAwMDA2MDIwNTAwMDAwMDAwMTIwNDAyMDQ4MDAwMjAwOEJGNDAKLToxMDQwRjAwMDAyMDIwMDYwMDAwMDAwMEYwMjAyMDA2NDAwMDAwMDA3REUKLToxMDQxMDAwMDAyMDIwMDY4MDAwMDAwMDAwMjAyMDA2QzAwMDAwMDBFQzUKLToxMDQxMTAwMDAyMDIwMDcwMDAwMDAwMEUwNjAyMDA3NDAwMDAwMDAzOUUKLToxMDQxMjAwMDAyMDIwMEY0MDAwMDAwMDQwMjAyMDAwNDAwMDAwMDAxOEEKLToxMDQxMzAwMDAyMDIwMDA4MDAwMDAwMDEwMjAyMDAwQzAwMDAwMDAxNjEKLToxMDQxNDAwMDAyMDIwMDEwMDAwMDAwMDEwMjAyMDAxNDAwMDAwMDAxNDEKLToxMDQxNTAwMDAyMDIwMDE4MDAwMDAwMDEwMjAyMDAxQzAwMDAwMDAxMjEKLToxMDQxNjAwMDAyMDIwMDIwMDAwMDAwMDEwMjAyMDAyNDAwMDAwMDAxMDEKLToxMDQxNzAwMDAyMDIwMDI4MDAwMDAwMDEwMjAyMDAyQzAwMDAwMDAxRTEKLToxMDQxODAwMDAyMDIwMDMwMDAwMDAwMDEwMjAyMDAzNDAwMDAwMDAxQzEKLToxMDQxOTAwMDAyMDIwMDM4MDAwMDAwMDEwMjAyMDAzQzAwMDAwMDAxQTEKLToxMDQxQTAwMDAyMDIwMDQwMDAwMDAwMDEwMjAyMDA0NDAwMDAwMDAxODEKLToxMDQxQjAwMDAyMDIwMDQ4MDAwMDAwMDEwMjAyMDA0QzAwMDAwMDAxNjEKLToxMDQxQzAwMDAyMDIwMDUwMDAwMDAwMDEwMjAyMDEwODAwMDAwMEM4QzUKLToxMDQxRDAwMDAyMDIwMTE4MDAwMDAwMDIwMjAyMDFDNDAwMDAwMDAwRjcKLToxMDQxRTAwMDAyMDIwMUNDMDAwMDAwMDAwMjAyMDFENDAwMDAwMDAyMjMKLToxMDQxRjAwMDAyMDIwMURDMDAwMDAwMDIwMjAyMDFFNDAwMDAwMEZGRjQKLToxMDQyMDAwMDAyMDIwMUVDMDAwMDAwRkYwMjAyMDEwMDAwMDAwMDAwQjkKLToxMDQyMTAwMDAyMDIwMTBDMDAwMDAwQzgwMjAyMDExQzAwMDAwMDAyQTIKLToxMDQyMjAwMDAyMDIwMUM4MDAwMDAwMDAwMjAyMDFEMDAwMDAwMDAwRUMKLToxMDQyMzAwMDAyMDIwMUQ4MDAwMDAwMDIwMjAyMDFFMDAwMDAwMDAyQjgKLToxMDQyNDAwMDAyMDIwMUU4MDAwMDAwRkYwMjAyMDFGMDAwMDAwMEZGOEUKLToxMDQyNTAwMDAyMDIwMTA0MDAwMDAwMjAwMjAyMDEwODAwMDAwMEM4NjAKLToxMDQyNjAwMDAyMDIwMTE4MDAwMDAwMDIwMjAyMDFDNDAwMDAwMDAwNjYKLToxMDQyNzAwMDAyMDIwMUNDMDAwMDAwMDAwMjAyMDFENDAwMDAwMDAyOTIKLToxMDQyODAwMDAyMDIwMURDMDAwMDAwMDIwMjAyMDFFNDAwMDAwMEZGNjMKLToxMDQyOTAwMDAyMDIwMUVDMDAwMDAwRkYwMjAyMDEwMDAwMDAwMDEwMTkKLToxMDQyQTAwMDAyMDIwMTBDMDAwMDAwQzgwMjAyMDExQzAwMDAwMDAyMTIKLToxMDQyQjAwMDAyMDIwMUM4MDAwMDAwMDAwMjAyMDFEMDAwMDAwMDAwNUMKLToxMDQyQzAwMDAyMDIwMUQ4MDAwMDAwMDIwMjAyMDFFMDAwMDAwMDAyMjgKLToxMDQyRDAwMDAyMDIwMUU4MDAwMDAwRkYwMjAyMDFGMDAwMDAwMEZGRkUKLToxMDQyRTAwMDAyMDIwMTA0MDAwMDAwMzAwMjAyMDEwODAwMDAwMEM4QzAKLToxMDQyRjAwMDAyMDIwMTE4MDAwMDAwMDIwMjAyMDFDNDAwMDAwMDAwRDYKLToxMDQzMDAwMDAyMDIwMUNDMDAwMDAwMDAwMjAyMDFENDAwMDAwMDAyMDEKLToxMDQzMTAwMDAyMDIwMURDMDAwMDAwMDIwMjAyMDFFNDAwMDAwMEZGRDIKLToxMDQzMjAwMDAyMDIwMUVDMDAwMDAwRkYwMjAyMDEwMDAwMDAwMDQwNTgKLToxMDQzMzAwMDAyMDIwMTBDMDAwMDAwQzgwMjAyMDExQzAwMDAwMDAyODEKLToxMDQzNDAwMDAyMDIwMUM4MDAwMDAwMDAwMjAyMDFEMDAwMDAwMDAwQ0IKLToxMDQzNTAwMDAyMDIwMUQ4MDAwMDAwMDIwMjAyMDFFMDAwMDAwMDAyOTcKLToxMDQzNjAwMDAyMDIwMUU4MDAwMDAwRkYwMjAyMDFGMDAwMDAwMEZGNkQKLToxMDQzNzAwMDAyMDIwMTA0MDAwMDAwNjAwMjAyMDEwODAwMDAwMEM4RkYKLToxMDQzODAwMDAyMDIwMTE4MDAwMDAwMDIwMjAyMDFDNDAwMDAwMDAwNDUKLToxMDQzOTAwMDAyMDIwMUNDMDAwMDAwMDAwMjAyMDFENDAwMDAwMDAyNzEKLToxMDQzQTAwMDAyMDIwMURDMDAwMDAwMDIwMjAyMDFFNDAwMDAwMEZGNDIKLToxMDQzQjAwMDAyMDIwMUVDMDAwMDAwRkYwMjAyMDEwMDAwMDAwMDUwQjgKLToxMDQzQzAwMDAyMDIwMTBDMDAwMDAwQzgwMjAyMDExQzAwMDAwMDAyRjEKLToxMDQzRDAwMDAyMDIwMUM4MDAwMDAwMDAwMjAyMDFEMDAwMDAwMDAwM0IKLToxMDQzRTAwMDAyMDIwMUQ4MDAwMDAwMDIwMjAyMDFFMDAwMDAwMDAyMDcKLToxMDQzRjAwMDAyMDIwMUU4MDAwMDAwRkYwMjAyMDFGMDAwMDAwMEZGREQKLToxMDQ0MDAwMDAyMDIwMTA0MDAwMDAwNzAwNzI4MDQwMDAwQjUwMDAwNEIKLToxMDQ0MTAwMDA4MjgwN0I4MDAwOTA4REYwNzJDMDAwMDI4RTkwMDAwNzkKLToxMDQ0MjAwMDA3MkM4MDAwMzY3MDBBM0IwNzJEMDAwMDM1QkUxN0Q4RDgKLToxMDQ0MzAwMDA3MkQ4MDAwM0IxQjI1NDgwNzJFMDAwMDM1RDgzNDBGODAKLToxMDQ0NDAwMDA3MkU4MDAwMUIyMjQxODYwODJFQkZEMDI4MDYwOEUxRDcKLToxMDQ0NTAwMDAyMjgwMEJDMDAwMDAwMzAwMTI4MDAwMDAwMDAwMDAwMUQKLToxMDQ0NjAwMDAxMjgwMDA0MDAwMDAwMDAwMTI4MDAwODAwMDAwMDAwRUUKLToxMDQ0NzAwMDAxMjgwMDBDMDAwMDAwMDAwMTI4MDAxMDAwMDAwMDAwQ0UKLToxMDQ0ODAwMDAxMjgwMDE0MDAwMDAwMDAwMjI4MDAyMDAwMDAwMDAxQTQKLToxMDQ0OTAwMDAyMjgwMDI0MDAwMDAwMDIwMjI4MDAyODAwMDAwMDAzNzcKLToxMDQ0QTAwMDAyMjgwMDJDMDAwMDAwMDAwMjI4MDAzMDAwMDAwMDA0NTgKLToxMDQ0QjAwMDAyMjgwMDM0MDAwMDAwMDEwMjI4MDAzODAwMDAwMDAwM0IKLToxMDQ0QzAwMDAyMjgwMDNDMDAwMDAwMDEwMjI4MDA0MDAwMDAwMDA0MTcKLToxMDQ0RDAwMDAyMjgwMDQ0MDAwMDAwMDAwMjI4MDA0ODAwMDAwMDAxRkIKLToxMDQ0RTAwMDAyMjgwMDRDMDAwMDAwMDMwMjI4MDA1MDAwMDAwMDAwRDkKLToxMDQ0RjAwMDAyMjgwMDU0MDAwMDAwMDEwMjI4MDA1ODAwMDAwMDA0QjcKLToxMDQ1MDAwMDAyMjgwMDVDMDAwMDAwMDAwMjI4MDA2MDAwMDAwMDAxOUEKLToxMDQ1MTAwMDAyMjgwMDY0MDAwMDAwMDMwMjI4MDA2ODAwMDAwMDAwNzgKLToxMDQ1MjAwMDAyMjgwMDZDMDAwMDAwMDEwMjI4MDA3MDAwMDAwMDA0NTYKLToxMDQ1MzAwMDAyMjgwMDc0MDAwMDAwMDAwMjI4MDA3ODAwMDAwMDA0MzcKLToxMDQ1NDAwMDAyMjgwMDdDMDAwMDAwMDMwNjI4MDA4MDAwMDAwMDAyMTIKLToxMDQ1NTAwMDAyMjgwMEE0MDAwMDdGRkYwMjI4MDBBODAwMDAwM0ZGM0IKLToxMDQ1NjAwMDAyMjgwMjI0MDAwMDAwMDAwMjI4MDIzNDAwMDAwMDAwOUIKLToxMDQ1NzAwMDAyMjgwMjRDMDAwMDAwMDAwMjI4MDJFNDAwMDBGRkZGQjUKLToxMDQ1ODAwMDA2MjgyMDAwMDAwMDA4MDAwMjJCOEJDMDAwMDAwMDAxNUMKLToxMDQ1OTAwMDAyMkI4MDAwMDAwMDAwMDAwMjJCODA0MDAwMDAwMDE4NjkKLToxMDQ1QTAwMDAyMkI4MDgwMDAwMDAwMEMwMjJCODBDMDAwMDAwMDY2RkYKLToxMDQ1QjAwMDBDMkI4MzAwMDAwODY0NzAwQTJCODMwMDAwMDAwMTU3NTUKLToxMDQ1QzAwMDBCMkI4MzAwMDAwMDA1NUYwQTJCODM0MDAwMDAwMDAwRDYKLToxMDQ1RDAwMDBDMkI4MzQwMDAwMDAyMjYwQjJCODM0MDAwMDAwMDAxQkYKLToxMDQ1RTAwMDAyMkI4MzgwMDAwODY0NzAwMjJCODNDMDAwMDAwMjI2MjcKLToxMDQ1RjAwMDAyMkIxNDgwMDAwMDAwMDEwQTJCMTQ4MDAwMDAwMDAwMzAKLToxMDQ2MDAwMDAyMkI5NDQwMDAwMDAwMDEwNjJCOTQ0ODAwMDAwMDAyOTkKLToxMDQ2MTAwMDA2MkE5QTcwMDAwMDAwMDQwNDJBOUE4MDAwMDQwOEUzMjUKLToxMDQ2MjAwMDA2MkE5QTkwMDAwMDAwMDIwNDJBOUE5ODAwMDIwOEU3REQKLToxMDQ2MzAwMDA2MkE5MDAwMDAwMDAwNDgwNjJBMjAwODAwMDAwMEM4NTIKLToxMDQ2NDAwMDA2MkEyMDAwMDAwMDAwMDIwNjJBOTEyODAwMDAwMDg2QTkKLToxMDQ2NTAwMDA2MkFDMDAwMDAwMDAxMjAwNjJBOTM0ODAwMDAwMDAzM0IKLToxMDQ2NjAwMDA0MkE5MzU0MDAwMTA4RTkwNjJBOUZCMDAwMDAwMDAyQzIKLToxMDQ2NzAwMDA0MkE5NDE4MDAwMjA4RUEwNDJBOUNEMDAwMDEwOEVDREQKLToxMDQ2ODAwMDA2MkE5Q0Q0MDAwMDAwMTEwNDJBOUQyMDAwOEYwOEVEMEEKLToxMDQ2OTAwMDA2MkE5RjVDMDAwMDAwMDUwNDJBMzAwMDAwMDIwOTdDMDUKLToxMDQ2QTAwMDA2MkEzMDA4MDAwMDAxMDAwNjJBNDA0MDAwMDAwMDEwRTEKLToxMDQ2QjAwMDA0MkE0MDAwMDAxMDA5N0UwNDJBODQwODAwMDIwOThFQTIKLToxMDQ2QzAwMDA0MkFDRjQwMDAwNDA5OTAwNDJBQ0Y2MDAwMDIwOTk0MTQKLToxMDQ2RDAwMDA2MkE5RkEwMDAwMDAwMDQwNjJBNjAwMDAwMDAwNTQwOTIKLToxMDQ2RTAwMDA2MkE5RDE4MDAwMDAwMDIwNjJBQjAwMDAwMDAwMDUwQjMKLToxMDQ2RjAwMDA2MkFCQjcwMDAwMDAwNzAwNjJBQkI2ODAwMDAwMDAyOUEKLToxMDQ3MDAwMDA2MkFCOTQ4MDAwMDAwMDQwNjJBRDAwMDAwMDAwODAwNkMKLToxMDQ3MTAwMDA2MkFDNDgwMDAwMDAxNTAwNjJBOTQyMDAwMDAwMDMyQkUKLToxMDQ3MjAwMDA2MkE1MDIwMDAwMDAwMDIwNjJBNTAzMDAwMDAwMDAyMzUKLToxMDQ3MzAwMDA2MkE1MDAwMDAwMDAwMDIwNjJBNTAxMDAwMDAwMDAyNjUKLToxMDQ3NDAwMDAyMkE1MjA4MDAwMDAwMDEwNDJBOUFBMDAwMDIwOTk2RDkKLToxMDQ3NTAwMDA2MkE5NUIwMDAwMDAwMjIwNDJBOTYzODAwMDEwOTk4MjQKLToxMDQ3NjAwMDA2MkE5NjNDMDAwMDAwMDMwNjJBOTZFMDAwMDAwMDIyN0MKLToxMDQ3NzAwMDA0MkE5NzY4MDAwMTA5OTkwNjJBOTc2QzAwMDAwMDAzMzMKLToxMDQ3ODAwMDA2MkE5ODEwMDAwMDAwMjIwNDJBOTg5ODAwMDEwOTlBMkQKLToxMDQ3OTAwMDA2MkE5ODlDMDAwMDAwMDMwNjJBOTk0MDAwMDAwMDIyODcKLToxMDQ3QTAwMDA0MkE5OUM4MDAwMTA5OUIwNjJBOTlDQzAwMDAwMDAzM0QKLToxMDQ3QjAwMDA2MkFCQjU4MDAwMDAwMDIwNjJBQzlDMDAwMDAwMTUwQUEKLToxMDQ3QzAwMDA2MkE5NEU4MDAwMDAwMzIwNjJBNTAyODAwMDAwMDAyNjEKLToxMDQ3RDAwMDA2MkE1MDM4MDAwMDAwMDIwNjJBNTAwODAwMDAwMDAyOTUKLToxMDQ3RTAwMDA2MkE1MDE4MDAwMDAwMDIwMjJBNTIwQzAwMDAwMDAxQTQKLToxMDQ3RjAwMDA0MkE5QUE4MDAwMjA5OUMwNjJBOTY0ODAwMDAwMDIyNzIKLToxMDQ4MDAwMDA0MkE5NkQwMDAwMTA5OUUwNjJBOTZENDAwMDAwMDAzQ0YKLToxMDQ4MTAwMDA2MkE5Nzc4MDAwMDAwMjIwNDJBOTgwMDAwMDEwOTlGQzgKLToxMDQ4MjAwMDA2MkE5ODA0MDAwMDAwMDMwNjJBOThBODAwMDAwMDIyMjcKLToxMDQ4MzAwMDA0MkE5OTMwMDAwMTA5QTAwNjJBOTkzNDAwMDAwMDAzRDcKLToxMDQ4NDAwMDA2MkE5OUQ4MDAwMDAwMjIwNDJBOUE2MDAwMDEwOUExRDIKLToxMDQ4NTAwMDA2MkE5QTY0MDAwMDAwMDMwNjJBQkI2MDAwMDAwMDAyREEKLToxMDQ4NjAwMDAyMkFDRjAwMDAwMDAwMDAwNDJBOUFCMDAwMTAwOUEyMUEKLToxMDQ4NzAwMDA2MkE1MDQ4MDAwMDAwMEUwMjJBQ0YwNDAwMDAwMDAwNjMKLToxMDQ4ODAwMDA0MkE5QUYwMDAxMDA5QjIwNjJBNTA4MDAwMDAwMDBFOTcKLToxMDQ4OTAwMDAyMkFDRjA4MDAwMDAwMDAwNDJBOUIzMDAwMTAwOUMyNDEKLToxMDQ4QTAwMDA2MkE1MEI4MDAwMDAwMEUwMjJBQ0YwQzAwMDAwMDAwQkIKLToxMDQ4QjAwMDA0MkE5QjcwMDAxMDA5RDIwNjJBNTBGMDAwMDAwMDBFNTYKLToxMDQ4QzAwMDAyMkFDRjEwMDAwMDAwMDAwNDJBOUJCMDAwMTAwOUUyNjkKLToxMDQ4RDAwMDA2MkE1MTI4MDAwMDAwMEUwMjJBQ0YxNDAwMDAwMDAwMTIKLToxMDQ4RTAwMDA0MkE5QkYwMDAxMDA5RjIwNjJBNTE2MDAwMDAwMDBFMTUKLToxMDQ4RjAwMDAyMkFDRjE4MDAwMDAwMDAwNDJBOUMzMDAwMTAwQTAyOEYKLToxMDQ5MDAwMDA2MkE1MTk4MDAwMDAwMEUwMjJBQ0YxQzAwMDAwMDAwNjkKLToxMDQ5MTAwMDA0MkE5QzcwMDAxMDBBMTIwNjJBNTFEMDAwMDAwMDBFRDIKLToxMDQ5MjAwMDAyMTAxMDA4MDAwMDAwMDEwMjEwMTA1MDAwMDAwMDAxRTkKLToxMDQ5MzAwMDAyMTAxMDAwMDAwM0QwMDAwMjEwMTAwNDAwMDAwMDNEMUYKLToxMDQ5NDAwMDA5MTAxODAwMDIwMDBBMjIwOTEwMTEwMDAwMTAwQzIyQTAKLToxMDQ5NTAwMDA2MTAxMTQwMDAwMDAwMDgwOTEwMTE2MDAwMTAwQzMyMTAKLToxMDQ5NjAwMDA2MTAxMUEwMDAwMDAwMTgwNjEwMjQwMDAwMDAwMEUwNEUKLToxMDQ5NzAwMDAyMTAyMDFDMDAwMDAwMDAwMjEwMjAyMDAwMDAwMDAxOTYKLToxMDQ5ODAwMDAyMTAyMEMwMDAwMDAwMDIwMjEwMjAwNDAwMDAwMDAxRkMKLToxMDQ5OTAwMDAyMTAyMDA4MDAwMDAwMDEwMjEwMzBEODAwMDAwMDAxQzEKLToxMDQ5QTAwMDA5MTAzQzAwMDAwNTBDNDIwOTEwMzgwMDAwMDUwQzQ3QjYKLToxMDQ5QjAwMDA5MTAzOTIwMDAwNTBDNEMwOTEwM0IwMDAwMDUwQzUxNzIKLToxMDQ5QzAwMDAyMTA0MEQ0MDAwMDAwMzAwMjEwNDBEODAwMDAwMDMwMzcKLToxMDQ5RDAwMDA2MTA0QzAwMDAwMDAxMDAwMjEwNDAyODAwMDAwMDEwRUEKLToxMDQ5RTAwMDAyMTA0MDQ0MDAwMDNGRkYwMjEwNDA1ODAwMjgwMDAwMjEKLToxMDQ5RjAwMDAyMTA0MDg0MDA4NDkyNEEwMjEwNDA1ODAwMDAwMDAwRDcKLToxMDRBMDAwMDAyMTA0MTM4MDAwMDAwMDEwMjEwNDEzODAwMDAwMDAxOEUKLToxMDRBMTAwMDAyMTA0MTM4MDAwMDAwMDEwMjEwNDEzODAwMDAwMDAxN0UKLToxMDRBMjAwMDAyMTA0MTM4MDAwMDAwMDEwMjEwNDEzODAwMDAwMDAxNkUKLToxMDRBMzAwMDAyMTA0MTM4MDAwMDAwMDEwMjEwNDEzODAwMDAwMDAxNUUKLToxMDRBNDAwMDAyMTIwNDkwMDFGNjgwNDAwMjEyMDUxNDAwMDAzQzEwOEUKLToxMDRBNTAwMDAyMTIwNDk0RkZGRkZGRkYwMjEyMDQ5OEZGRkZGRkZGMDIKLToxMDRBNjAwMDAyMTIwNDlDRkZGRkZGRkYwMjEyMDRBMEZGRkZGRkZGRTIKLToxMDRBNzAwMDAyMTIwNEE0RkZGRkZGRkYwMjEyMDRBOEZGRkZGRkZGQzIKLToxMDRBODAwMDAyMTIwNEFDRkZGRkZGRkYwMjEyMDRCMEZGRkZGRkZGQTIKLToxMDRBOTAwMDAyMTIwNEI4RkZGRkZGRkYwMjEyMDRCQ0ZGRkZGRkZGN0EKLToxMDRBQTAwMDAyMTIwNEMwRkZGRkZGRkYwMjEyMDRDNEZGRkZGRkZGNUEKLToxMDRBQjAwMDAyMTIwNEM4RkZGRkZGRkYwMjEyMDRDQ0ZGRkZGRkZGM0EKLToxMDRBQzAwMDAyMTIwNEQwRkZGRkZGRkYwMjEyMDREOEZGRkZGRkZGMTYKLToxMDRBRDAwMDAyMTIwNERDRkZGRkZGRkYwMjEyMDRFMEZGRkZGRkZGRjIKLToxMDRBRTAwMDAyMTIwNEU0RkZGRkZGRkYwMjEyMDRFOEZGRkZGRkZGRDIKLToxMDRBRjAwMDAyMTIwNEVDRkZGRkZGRkYwMjEyMDRGMEZGRkZGRkZGQjIKLToxMDRCMDAwMDAyMTIwNEY0RkZGRkZGRkYwMjEyMDRGOEZGRkZGRkZGOTEKLToxMDRCMTAwMDAyMTIwNEZDRkZGRkZGRkYwMjEyMDUwMEZGRkZGRkZGNzAKLToxMDRCMjAwMDAyMTIwNTA0RkZGRkZGRkYwMjEyMDUwOEZGRkZGRkZGNEYKLToxMDRCMzAwMDAyMTIwNTBDRkZGRkZGRkYwMjEyMDUxMEZGRkZGRkZGMkYKLToxMDRCNDAwMDAyMTIwNEQ0RjgwMEMwMDAwMjEyMDRCNEYwMDA1MDAwQjUKLToxMDRCNTAwMDAyMTIwMzkwMDAwMDAwMDgwMjEyMDM5QzAwMDAwMDA4RUIKLToxMDRCNjAwMDAyMTIwM0EwMDAwMDAwMDgwMjEyMDNBNDAwMDAwMDAyQzkKLToxMDRCNzAwMDAyMTIwM0JDMDAwMDAwMDQwMjEyMDNDMDAwMDAwMDA1ODIKLToxMDRCODAwMDAyMTIwM0M0MDAwMDAwMDQwMjEyMDNEMDAwMDAwMDAwNUYKLToxMDRCOTAwMDAyMTIwMzZDMDAwMDAwMDEwMjEyMDFCQzAwMDAwMDQwODAKLToxMDRCQTAwMDAyMTIwMUMwMDAwMDE4MDgwMjEyMDFDNDAwMDAwODAzMkMKLToxMDRCQjAwMDAyMTIwMUM4MDAwMDA4MDMwMjEyMDFDQzAwMDAwMDQwRUMKLToxMDRCQzAwMDAyMTIwMUQwMDAwMDAwMDMwMjEyMDFENDAwMDAwODAzMDkKLToxMDRCRDAwMDAyMTIwMUQ4MDAwMDA4MDMwMjEyMDFEQzAwMDAwODAzRTEKLToxMDRCRTAwMDAyMTIwMUUwMDAwMTAwMDMwMjEyMDFFNDAwMDAwODAzQzgKLToxMDRCRjAwMDAyMTIwMUU4MDAwMDA4MDMwMjEyMDFFQzAwMDAwMDAzQTkKLToxMDRDMDAwMDAyMTIwMUYwMDAwMDAwMDMwMjEyMDFGNDAwMDAwMDAzOTAKLToxMDRDMTAwMDAyMTIwMUY4MDAwMDAwMDMwMjEyMDFGQzAwMDAwMDAzNzAKLToxMDRDMjAwMDAyMTIwMjAwMDAwMDAwMDMwMjEyMDIwNDAwMDAwMDAzNEUKLToxMDRDMzAwMDAyMTIwMjA4MDAwMDAwMDMwMjEyMDIwQzAwMDAwMDAzMkUKLToxMDRDNDAwMDAyMTIwMjEwMDAwMDAwMDMwMjEyMDIxNDAwMDAwMDAzMEUKLToxMDRDNTAwMDAyMTIwMjE4MDAwMDAwMDMwMjEyMDIxQzAwMDAwMDAzRUUKLToxMDRDNjAwMDAyMTIwMjIwMDAwMDAwMDMwMjEyMDIyNDAwMDAwMDAzQ0UKLToxMDRDNzAwMDAyMTIwMjI4MDAwMDI0MDMwMjEyMDIyQzAwMDAwMDJGNUUKLToxMDRDODAwMDAyMTIwMjMwMDAwMDAwMDkwMjEyMDIzNDAwMDAwMDE5NzIKLToxMDRDOTAwMDAyMTIwMjM4MDAwMDAxODQwMjEyMDIzQzAwMDAwMTgzNkIKLToxMDRDQTAwMDAyMTIwMjQwMDAwMDAzMDYwMjEyMDI0NDAwMDAwMDE5MzIKLToxMDRDQjAwMDAyMTIwMjQ4MDAwMDAwMDYwMjEyMDI0QzAwMDAwMzA2MjUKLToxMDRDQzAwMDAyMTIwMjUwMDAwMDAzMDYwMjEyMDI1NDAwMDAwMzA2MDIKLToxMDRDRDAwMDAyMTIwMjU4MDAwMDBDODYwMjEyMDI1QzAwMDAwMzA2NTkKLToxMDRDRTAwMDAyMTIwMjYwMDAwMDAzMDYwMjEyMDI2NDAwMDAwMDA2QzUKLToxMDRDRjAwMDAyMTIwMjY4MDAwMDAwMDYwMjEyMDI2QzAwMDAwMDA2QTgKLToxMDREMDAwMDAyMTIwMjcwMDAwMDAwMDYwMjEyMDI3NDAwMDAwMDA2ODcKLToxMDREMTAwMDAyMTIwMjc4MDAwMDAwMDYwMjEyMDI3QzAwMDAwMDA2NjcKLToxMDREMjAwMDAyMTIwMjgwMDAwMDAwMDYwMjEyMDI4NDAwMDAwMDA2NDcKLToxMDREMzAwMDAyMTIwMjg4MDAwMDAwMDYwMjEyMDI4QzAwMDAwMDA2MjcKLToxMDRENDAwMDAyMTIwMjkwMDAwMDAwMDYwMjEyMDI5NDAwMDAwMDA2MDcKLToxMDRENTAwMDAyMTIwMjk4MDAwMDAwMDYwMjEyMDI5QzAwMDAwMDA2RTcKLToxMDRENjAwMDAyMTIwMkEwMDAwMDAzMDYwMjEyMDJBNDAwMDAwMDEzQjcKLToxMDRENzAwMDAyMTIwMkE4MDAwMDAwMDYwMjEyMDJCMDAwMDAxMDA0OTUKLToxMDREODAwMDAyMTIwMkI0MDAwMDEwMDQwMjEyMDMyNDAwMTA2NDQwNTYKLToxMDREOTAwMDAyMTIwMzI4MDAxMDY0NDAwMjEyMDVCNDAwMDAwMDAxNTIKLToxMDREQTAwMDAyMTIwNUY4MDAwMDAwNDAwMjEyMDVGQzAwMDAwMDE5ODQKLToxMDREQjAwMDAyMTIwNjAwMDAwMDAwMDEwMjEyMDY2QzAwMDAwMDAxNTEKLToxMDREQzAwMDAyMTIwMUIwMDAwMDAwMDEwMjEyMDdEODAwMDAwMDAzMjcKLToxMDRERDAwMDAyMTIwN0Q4MDAwMDAwMDMwMjEyMDdEODAwMDAwMDAzRTcKLToxMDRERTAwMDAyMTIwN0Q4MDAwMDAwMDMwMjEyMDdEODAwMDAwMDAzRDcKLToxMDRERjAwMDAyMTIwN0Q4MDAwMDAwMDMwMjEyMDdEODAwMDAwMDAzQzcKLToxMDRFMDAwMDAyMTIwN0Q4MDAwMDAwMDMwNjAwQTAwMDAwMDAwMDBDRkEKLToxMDRFMTAwMDAyMDBBMDUwMDAwMDAwMDAwMjAwQTA1NDAwMDAwMDAwQUEKLToxMDRFMjAwMDAyMDBBMEVDNTU1NDAwMDAwMjAwQTBGMDU1NTU1NTU1NjUKLToxMDRFMzAwMDAyMDBBMEY0MDAwMDU1NTUwMjAwQTBGOEYwMDAwMDAwQTgKLToxMDRFNDAwMDAyMDBBMEZDNTU1NDAwMDAwMjAwQTEwMDU1NTU1NTU1MjQKLToxMDRFNTAwMDAyMDBBMTA0MDAwMDU1NTUwMjAwQTEwOEYwMDAwMDAwNjYKLToxMDRFNjAwMDAyMDBBMTlDMDAwMDAwMDAwMjAwQTFBMDAwMDEwMDAwQkYKLToxMDRFNzAwMDAyMDBBMUE0MDAwMDUwMTQwMjAwQTFBODAwMDAwMDAwM0MKLToxMDRFODAwMDAyMDBBNkE4MDAwMDAwMDAwMjAwQTZBQzAwMDAwMDAwN0UKLToxMDRFOTAwMDAyMDBBNkQwMDAwMDAwMDAwMjAwQTQ1QzAwMDAwQzAwOEMKLToxMDRFQTAwMDAyMDBBNjFDMDAwMDAwMDMwMjAwQTA3MEZGRjU1RkZGRDcKLToxMDRFQjAwMDAyMDBBMDc0MDAwMEZGRkYwMjAwQTA3OEYwMDAwM0UwRjEKLToxMDRFQzAwMDAyMDBBMDdDMDAwMDAwMDAwMjAwQTA4MDAwMDBBMDAwMDIKLToxMDRFRDAwMDA2MDBBMDg0MDAwMDAwMDUwMjAwQTA5ODBGRTAwMDAwN0EKLToxMDRFRTAwMDA2MDBBMDlDMDAwMDAwMDcwMjAwQTBCODAwMDAwNDAwMUIKLToxMDRFRjAwMDA2MDBBMEJDMDAwMDAwMDMwMjAwQTBDODAwMDAxMDAwRDMKLToxMDRGMDAwMDA2MDBBMENDMDAwMDAwMDMwMjAwQTBEODAwMDA0MDAwNzIKLToxMDRGMTAwMDA2MDBBMERDMDAwMDAwMDMwMjAwQTBFODAwMDEwMDAwODEKLToxMDRGMjAwMDA2MDBBMjJDMDAwMDAwMDQwMjAwQTY4ODAwMDAwMEZDN0QKLToxMDRGMzAwMDA2MDBBNjhDMDAwMDAwMDcwMjAwQTZGNDAwMDAwMDAwOTYKLToxMDRGNDAwMDAyMDBBMTBDRkY1QzAwMDAwMjAwQTExMEZGRjU1RkZGNTIKLToxMDRGNTAwMDAyMDBBMTE0MDAwMEZGRkYwMjAwQTExOEYwMDAwM0UwMEUKLToxMDRGNjAwMDAyMDBBMTFDMDAwMDAwMDAwMjAwQTEyMDAwMDBBMDAwMUYKLToxMDRGNzAwMDA2MDBBMTI0MDAwMDAwMDUwMjAwQTEzODBGRTAwMDAwOTcKLToxMDRGODAwMDA2MDBBMTNDMDAwMDAwMDcwMjAwQTE1ODAwMDAwODAwMzQKLToxMDRGOTAwMDA2MDBBMTVDMDAwMDAwMDMwMjAwQTE2ODAwMDAyMDAwRTAKLToxMDRGQTAwMDA2MDBBMTZDMDAwMDAwMDMwMjAwQTE3ODAwMDA4MDAwNTAKLToxMDRGQjAwMDA2MDBBMTdDMDAwMDAwMDMwMjAwQTE4ODAwMDIwMDAwOUUKLToxMDRGQzAwMDA2MDBBMjNDMDAwMDAwMDQwMjAwQTZCMDAwMDAwMEZDQTUKLToxMDRGRDAwMDA2MDBBNkI0MDAwMDAwMDcwMjAwQTZGODAwMDAwMDAwQ0EKLToxMDRGRTAwMDAyMDBBMDMwMDAwMDAwMDAwMjAwQTAzNDAwMDAwMDAwMTkKLToxMDRGRjAwMDAyMDBBMDM4MDAwMDAwMDAwMjAwQTAzQzAwMDAwMDAwRjkKLToxMDUwMDAwMDAyMDBBMDQwMDAwMDAwMDAwMjAwQTA0NDAwMDAwMDAwRDgKLToxMDUwMTAwMDAyMDBBMDQ4MDAwMDAwMDAwMjAwQTA0QzAwMDAwMDAwQjgKLToxMDUwMjAwMDAyMDA5MEM0MDAwMEUwMDAwMjAwOTBDQzAwMDBGMzAwRjkKLToxMDUwMzAwMDAyMDA5MEQ0MDAwMDAwMDMwMjAwOTFBMDAwMDAwMDAxRDMKLToxMDUwNDAwMDA2MDA5MTcwMDAwMDAwMDMwMjAwOTBFQzAwMDA2MDAwNzgKLToxMDUwNTAwMDAyMDA5MEY0MDAwMDczMDAwMjAwOTBGQzAwMDAwMDAzQzYKLToxMDUwNjAwMDAyMDA5MUE4MDAwMDAwMDEwNjAwOTE4ODAwMDAwMDAzRTIKLToxMDUwNzAwMDAyMDA5MTAwMDAwMDQwMDAwMjAwOTEwODAwMDA1MzAwNkYKLToxMDUwODAwMDAyMDA5MTEwMDAwMDAwMDQwMjAwOTFBQzAwMDAwMDAxMzkKLToxMDUwOTAwMDA2MDA5MTk0MDAwMDAwMDIwMjAwOTE5QzAwMDAwMDAxQjMKLToxMDUwQTAwMDAyMDA5MEQ4MDAwMDYwMDAwMjAwOTBFMDAwMDA3MzAwNTEKLToxMDUwQjAwMDAyMDA5MEU4MDAwMDAwMDMwMjAwOTFBNDAwMDAwMDAxM0IKLToxMDUwQzAwMDAyMDA5MTdDMDAwMDAwMDEwMjAwOTE4MDAwMDAwMDAxQkMKLToxMDUwRDAwMDAyMDA5MTg0MDAwMDAwMDAwMjAwOTEyODAwMDAwMzAwRkIKLToxMDUwRTAwMDAyMDA5MTZDMDAwM0YwMDgwMjAwOTEyQzAwMDAwMzAwMDQKLToxMDUwRjAwMDAyMDA5MTMwMDAwMDAzMDAwMjAwOTEzNDAwMDAwMzAwMjAKLToxMDUxMDAwMDAyMDA5MTM4MDAwMDAzMDAwMjAwOTEzQzAwMDAwMzAwRkYKLToxMDUxMTAwMDAyMDA5MTQwMDAwMDAzMDAwMjAwOTQyQzAwMDAwMDAxRjYKLToxMDUxMjAwMDAyMDA5NDMwMDAwMDAwMDEwMjAwOTQzNDAwMDAwMDAxRUQKLToxMDUxMzAwMDAyMDA5NDJDMDAwMDAwMDEwMjAwOTQzMDAwMDAwMDAxRTUKLToxMDUxNDAwMDAyMDA5NDM0MDAwMDAwMDEwMjAwOTQyQzAwMDAwMDAxRDEKLToxMDUxNTAwMDAyMDA5NDMwMDAwMDAwMDEwMjAwOTQzNDAwMDAwMDAxQkQKLToxMDUxNjAwMDAyMDA5NDJDMDAwMDAwMDEwMjAwOTQzMDAwMDAwMDAxQjUKLToxMDUxNzAwMDAyMDA5NDM0MDAwMDAwMDEwMjAwOTQyQzAwMDAwMDAxQTEKLToxMDUxODAwMDAyMDA5NDMwMDAwMDAwMDEwMjAwOTQzNDAwMDAwMDAxOEQKLToxMDUxOTAwMDAyMDA5NDJDMDAwMDAwMDEwMjAwOTQzMDAwMDAwMDAxODUKLToxMDUxQTAwMDAyMDA5NDM0MDAwMDAwMDEwMjAwOTQyQzAwMDAwMDAxNzEKLToxMDUxQjAwMDAyMDA5NDMwMDAwMDAwMDEwMjAwOTQzNDAwMDAwMDAxNUQKLToxMDUxQzAwMDAyMDA5NDJDMDAwMDAwMDEwMjAwOTQzMDAwMDAwMDAxNTUKLToxMDUxRDAwMDAyMDA5NDM0MDAwMDAwMDEwMjEzMDA3ODAwMDAwMDMwNDcKLToxMDUxRTAwMDAyMTMwMDNDMDAwMDYxQTgwNjEzMDEwODAwMDAwMDAzNDAKLToxMDUxRjAwMDAyMTMwMTA0MDAwMDAwMDAwMjEzMDEzNDAwMDAwMDAwNEIKLToxMDUyMDAwMDA2MTMwMTA4MDAwMDAwMDMwMjEzMDEwNDAwMDAwMDAwNUYKLToxMDUyMTAwMDAyMTMwMTM0MDAwMDAwMDAwNjEzMDEwODAwMDAwMDAzMUYKLToxMDUyMjAwMDAyMTMwMTA0MDAwMDAwMDAwMjEzMDEzNDAwMDAwMDAwMUEKLToxMDUyMzAwMDA2MTMwMTA4MDAwMDAwMDMwMjEzMDEwNDAwMDAwMDAwMkYKLToxMDUyNDAwMDAyMTMwMTM0MDAwMDAwMDAwNjEzMDEwODAwMDAwMDAzRUYKLToxMDUyNTAwMDAyMTMwMTA0MDAwMDAwMDAwMjEzMDEzNDAwMDAwMDAwRUEKLToxMDUyNjAwMDA2MTMwMTA4MDAwMDAwMDMwMjEzMDEwNDAwMDAwMDAwRkYKLToxMDUyNzAwMDAyMTMwMTM0MDAwMDAwMDAwNjEzMDEwODAwMDAwMDAzQkYKLToxMDUyODAwMDAyMTMwMTA0MDAwMDAwMDAwMjEzMDEzNDAwMDAwMDAwQkEKLToxMDUyOTAwMDA2MTMwMTA4MDAwMDAwMDMwMjEzMDEwNDAwMDAwMDAwQ0YKLToxMDUyQTAwMDAyMTMwMTM0MDAwMDAwMDAwMjExMDBCODAwMDAwMDAxRTgKLToxMDUyQjAwMDAyMTZFNkU4MDAwMDIwMDAwMjE2RTZFQzAwMDAyMDAwREUKLToxMDUyQzAwMDAyMTZFNkYwMDAwMDY1NTUwMjE2RTZGNDAwMDA2NTU1OEEKLToxMDUyRDAwMDAyMTY4MTUwMDAwMDAwMDAwMjE2ODE3NDAwMDAwMDAxRDcKLToxMDUyRTAwMDAyMTY4MTc4MDAwMDAwMDEwMjE2ODE3QzAwMDAwMDAxOTYKLToxMDUyRjAwMDAyMTY4MTgwMDAwMDAwMDEwMjE2ODE4NDAwMDAwMDAxNzYKLToxMDUzMDAwMDAyMTY4MTg4MDAwMDAwMDEwMjE2ODFCNDAwMDAwMDAxMkQKLToxMDUzMTAwMDAyMTY4MUI4MDAwMDAwMDEwMjE2ODFCQzAwMDAwMDAxRTUKLToxMDUzMjAwMDAyMTY4MUMwMDAwMDAwMDEwMjE2ODFDNDAwMDAwMDAxQzUKLToxMDUzMzAwMDAyMTY4MUM4MDAwMDAwMDEwMjE2ODExMDAwMDAwMDAwNjIKLToxMDUzNDAwMDAyMTY4MjQwMDBCRjAwQkYwNjE2ODI0NDAwMDAwMDAyMjEKLToxMDUzNTAwMDAyMTY4MjRDMDBCRjAwQkYwMjE2RTZDNDAwMDAwMDAxMjYKLToxMDUzNjAwMDAyMTZFNkM4MDAwMDAwMDMwMjE2RTc5NDAwMDAwMDAwRTEKLToxMDUzNzAwMDA0MkFDRjQwMDAwQTBDNTYwMDAwMDAwMDAwMDAwMDAwODQKLToxMDUzODAwMDAwMDAwMDM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKLToxMDUzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKLToxMDUzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQwMDM1OTQKLToxMDUzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKLToxMDUzQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKLToxMDUzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1MDA2MDAwMDAwMDAwMzgKLToxMDUzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKLToxMDUzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKLToxMDU0MDAwMDAwMDAwMDAwMDA2MDAwOTEwMDAwMDAwMDAwMDAwMDAwQUIKLToxMDU0MTAwMDAwOTEwMDk1MDA5NTAwOTkwMDk5MDA5RDAwOUQwMEExQzQKLToxMDU0MjAwMDAwQTEwMEE1MDBBNTAwQTkwMEE5MDBBRDAwQUQwMEIxMzQKLToxMDU0MzAwMDAwQjEwMEI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKLToxMDU0NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUMKLToxMDU0NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUwMzExODMKLToxMDU0NjAwMDAzMTEwMzFCMDMxQjAzMjUwMzI1MDMyQzAzMkMwMzMzMDgKLToxMDU0NzAwMDAzMzMwMzNBMDMzQTAzNDEwMzQxMDM0ODAzNDgwMzRGMEMKLToxMDU0ODAwMDAzNEYwMzU2MDM1NjAzNUQwMDAwMDAwMDAwMDAwMDAwQjgKLToxMDU0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMKLToxMDU0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkMKLToxMDU0QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKLToxMDU0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREMKLToxMDU0RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MKLToxMDU0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkMKLToxMDU0RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUMKLToxMDU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUIKLToxMDU1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEIKLToxMDU1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0IKLToxMDU1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMzVEMDM1RTAwMDAwMDAwQUEKLToxMDU1NDAwMDAwMDAwMDAwMDM1RTAzNUYwMzVGMDM2MDAzNjAwMzYxMEMKLToxMDU1NTAwMDAzNjEwMzYyMDM2MjAzNjMwMzYzMDM2NDAzNjQwMzY1MUIKLToxMDU1NjAwMDAzNjUwMzY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKLToxMDU1NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkIKLToxMDU1ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUIKLToxMDU1OTAwMDAzNjYwMzZEMDM2RDAzNzkwMzc5MDM4NTAwMDAwMDAwNDIKLToxMDU1QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkIKLToxMDU1QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUIKLToxMDU1QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREIKLToxMDU1RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0IKLToxMDU1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMzg1MDM4NjAwMDAwMDAwQUEKLToxMDU1RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUIKLToxMDU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUEKLToxMDU2MTAwMDAwMDAwMDAwMDM4NjAzQjEwMDAwMDAwMDAwMDAwMDAwNEQKLToxMDU2MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0EKLToxMDU2MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKLToxMDU2NDAwMDAzQjEwM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKLToxMDU2NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEEKLToxMDU2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRTAwNDBGNDQKLToxMDU2NzAwMDAwMDAwMDAwMDAwMDAwMDAwNDBGMDQxNjA0MTYwNDFEQzIKLToxMDU2ODAwMDA0MUQwNDI0MDQyNDA0MkIwNDJCMDQzMjA0MzIwNDM5QTIKLToxMDU2OTAwMDA0MzkwNDQwMDQ0MDA0NDcwNDQ3MDQ3QTAwMDAwMDAwMzEKLToxMDU2QTAwMDAwMDAwMDAwMDQ3QTA0N0UwNDdFMDQ4MjA0ODIwNDg2RTIKLToxMDU2QjAwMDA0ODYwNDhBMDQ4QTA0OEUwNDhFMDQ5MjA0OTIwNDk2NUEKLToxMDU2QzAwMDA0OTYwNDlBMDQ5QTA0RUEwNEVBMDUwMDA1MDAwNTE2MDMKLToxMDU2RDAwMDA1MTYwNTE4MDUxODA1MUEwNTFBMDUxQzA1MUMwNTFFRDIKLToxMDU2RTAwMDA1MUUwNTIwMDUyMDA1MjIwNTIyMDUyNDA1MjQwNTI2ODIKLToxMDU2RjAwMDA1MjYwNjkzMDAwMDAwMDAwMDAwMDAwMDA2OTMwNjk4QUYKLToxMDU3MDAwMDA2OTgwNjlEMDY5RDA2QTIwNkEyMDZBNzA2QTcwNkFDNTkKLToxMDU3MTAwMDA2QUMwNkIxMDZCMTA2QjYwNkI2MDZCQjA2QkIwNkJDQUQKLToxMDU3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKLToxMDU3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKLToxMDU3NDAwMDAwMDAwMDAwMDAwMDAwMDAwNkJDMDZFMDAwMDAwMDAwQjEKLToxMDU3NTAwMDAwMDAwMDAwMDZFMDA2RTIwNkUyMDZFNDA2RTQwNkU2RDMKLToxMDU3NjAwMDA2RTYwNkU4MDZFODA2RUEwNkVBMDZFQzA2RUMwNkVFQjkKLToxMDU3NzAwMDA2RUUwNkYwMDZGMDA3MDUwNzA1MDcwODA3MDgwNzBCMDEKLToxMDU3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKLToxMDU3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKLToxMDU3QTAwMDA3MEIwNzRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKLToxMDU3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKLToxMDU3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NEYwN0UxOUIKLToxMDU3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKLToxMDU3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKLToxMDU3RjAwMDAwMDAwMDAwMDAwMDAwMDAwN0UxMDdFRjAwMDAwMDAwQ0IKLToxMDU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKLToxMDU4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgKLToxMDU4MjAwMDAwMDAwMDAwMDdFRjA4MkMwMDAwMDAwMDAwMDAwMDAwNEUKLToxMDU4MzAwMDA4MkMwODM1MDgzNTA4M0UwODNFMDg0NzA4NDcwODUwMzgKLToxMDU4NDAwMDA4NTAwODU5MDg1OTA4NjIwODYyMDg2QjA4NkIwODc0MDgKLToxMDU4NTAwMDA4NzQwOEQ1MDhENTA4RUEwOEVBMDhGRjA4RkYwOTAyMTUKLToxMDU4NjAwMDA5MDIwOTA1MDkwNTA5MDgwOTA4MDkwQjA5MEIwOTBFQjAKLToxMDU4NzAwMDA5MEUwOTExMDkxMTA5MTQwOTE0MDkxNzA5MTcwOTIwM0EKLToxMDU4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKLToxMDU4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKLToxMDU4QTAwMDAwMDAwMDAwMDAwMDAwMDAwOTIwMDkyNjAwMDAwMDAwQTAKLToxMDU4QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTgKLToxMDU4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKLToxMDU4RDAwMDAwMDAwMDAwMDkyNjA5MkIwMDAwMDAwMDAwMDAwMDAwNjUKLToxMDU4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKLToxMDU4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLToxMDU5MDAwMDA5MkIwOTMzMDAwMDAwMDAwMDAwMDAwMDA5MzMwOTM0QUUKLToxMDU5MTAwMDA5MzQwOTM1MDkzNTA5MzYwOTM2MDkzNzA5MzcwOTM4OEYKLToxMDU5MjAwMDA5MzgwOTM5MDkzOTA5M0EwOTNBMDkzQjAwMDAwMDAwRTgKLToxMDU5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcKLToxMDU5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKLToxMDU5NTAwMDAwMDAwMDAwMDAwMDAwMDAwOTNCMDlBQzAwMDAwMDAwNEUKLToxMDU5NjAwMDAwMDAwMDAwMDlBQzA5QUQwOUFEMDlBRTA5QUUwOUFGRjAKLToxMDU5NzAwMDA5QUYwOUIwMDlCMDA5QjEwOUIxMDlCMjA5QjIwOUIzNTcKLToxMDU5ODAwMDA5QjMwOUI0MDlCNDA5QzgwOUM4MDlEQjA5REIwOUVGN0YKLToxMDU5OTAwMDA5RUYwOUYwMDlGMDA5RjEwOUYxMDlGMjA5RjIwOUYzMzcKLToxMDU5QTAwMDA5RjMwOUY0MDlGNDA5RjUwOUY1MDlGNjA5RjYwOUY3MDcKLToxMDU5QjAwMDA5RjcwQTE2MDAwMDAwMDAwMDAwMDAwMDBBMTYwQTE5ODQKLToxMDU5QzAwMDBBMTkwQTFDMEExQzBBMUYwQTFGMEEyMjBBMjIwQTI1OEYKLToxMDU5RDAwMDBBMjUwQTI4MEEyODBBMkIwQTJCMEEyRTBBMkUwQTMwMjAKLToxMDU5RTAwMDAwMDAwMDAwMDAwMDAwMDAwQTMwMEEzMzBBMzMwQTM2QzMKLToxMDU5RjAwMDBBMzYwQTM5MEEzOTBBM0MwQTNDMEEzRjBBM0YwQTQyNzcKLToxMDVBMDAwMDBBNDIwQTQ1MEE0NTBBNDgwQTQ4MEE0OTAwMDAwMDAwQjUKLToxMDVBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKLToxMDVBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKLToxMDVBMzAwMDAwMDAwMDAwMEE0OTBBNjEwMDAwMDAwMDAwMDAwMDAwQTgKLToxMDVBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTYKLToxMDVBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKLToxMDVBNjAwMDBBNjEwQTYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKLToxMDVBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKLToxMDVBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKLToxMDVBOTAwMDAwMDEwMDAwMDAwMjA3MDAwMDAzMEUwMDAwMDQxNTAwRDIKLToxMDVBQTAwMDAwMDUxQzAwMDAwNjIzMDAwMDA3MkEwMDAwMDgzMTAwNDIKLToxMDVBQjAwMDAwMDkzODAwMDAwQTNGMDAwMDBCNDYwMDAwMEM0RDAwQjIKLToxMDVBQzAwMDAwMEQ1NDAwMDAwRTVCMDAwMDBGNjIwMDAwMTA2OTAwMjIKLToxMDVBRDAwMDAwMTE3MDAwMDAxMjc3MDAwMDEzN0UwMDAwMTQ4NTAwOTIKLToxMDVBRTAwMDAwMTU4QzAwMDAxNjkzMDAwMDE3OUEwMDAwMThBMTAwMDIKLToxMDVBRjAwMDAwMTlBODAwMDAxQUFGMDAwMDFCQjYwMDAwMUNCRDAwNzIKLToxMDVCMDAwMDAwMURDNDAwMDAxRUNCMDAwMDFGRDIwMDAwMDBEOTAwMDEKLToxMDVCMTAwMDAwMDAyMDAwMDAwMDQwMDAwMDAwNjAwMDAwMDA4MDAwNDUKLToxMDVCMjAwMDAwMDBBMDAwMDAwMEMwMDAwMDAwRTAwMDAwMDEwMDAwMzQKLToxMDVCMzAwMDAwMDEyMDAwMDAwMTQwMDAwMDAxNjAwMDAwMDE4MDAwMjEKLToxMDVCNDAwMDAwMDFBMDAwMDAwMUMwMDAwMDAxRTAwMDAwMDIwMDAwMTAKLToxMDVCNTAwMDAwMDIyMDAwMDAwMjQwMDAwMDAyNjAwMDAwMDI4MDAwRkQKLToxMDVCNjAwMDAwMDJBMDAwMDAwMkMwMDAwMDAyRTAwMDAwMDMwMDAwRUMKLToxMDVCNzAwMDAwMDMyMDAwMDAwMzQwMDAwMDAzNjAwMDAwMDM4MDAwRDkKLToxMDVCODAwMDAwMDNBMDAwMDAwM0MwMDAwMDAzRTAwMDAwMDQwMDAwQzgKLToxMDVCOTAwMDAwMDQyMDAwMDAwNDQwMDAwMDA0NjAwMDAwMDQ4MDAwQjUKLToxMDVCQTAwMDAwMDRBMDAwMDAwNEMwMDAwMDA0RTAwMDAwMDUwMDAwQTQKLToxMDVCQjAwMDAwMDUyMDAwMDAwNTQwMDAwMDA1NjAwMDAwMDU4MDAwOTEKLToxMDVCQzAwMDAwMDVBMDAwMDAwNUMwMDAwMDA1RTAwMDAwMDYwMDAwODAKLToxMDVCRDAwMDAwMDYyMDAwMDAwNjQwMDAwMDA2NjAwMDAwMDY4MDAwNkQKLToxMDVCRTAwMDAwMDZBMDAwMDAwNkMwMDAwMDA2RTAwMDAwMDcwMDAwNUMKLToxMDVCRjAwMDAwMDcyMDAwMDAwNzQwMDAwMDA3NjAwMDAwMDc4MDAwNDkKLToxMDVDMDAwMDAwMDdBMDAwMDAwN0MwMDAwMDA3RTAwMDAwMDgwMDAwMzcKLToxMDVDMTAwMDAwMDgyMDAwMDAwODQwMDAwMDA4NjAwMDAwMDg4MDAwMjQKLToxMDVDMjAwMDAwMDhBMDAwMDAwOEMwMDAwMDA4RTAwMDAwMDkwMDAwMTMKLToxMDVDMzAwMDAwMDkyMDAwMDAwOTQwMDAwMDA5NjAwMDAwMDk4MDAwMDAKLToxMDVDNDAwMDAwMDlBMDAwMDAwOUMwMDAwMDA5RTAwMDAwMEEwMDAwRUYKLToxMDVDNTAwMDAwMEEyMDAwMDAwQTQwMDAwMDBBNjAwMDAwMEE4MDAwREMKLToxMDVDNjAwMDAwMEFBMDAwMDAwQUMwMDAwMDBBRTAwMDAwMEIwMDAwQ0IKLToxMDVDNzAwMDAwMEIyMDAwMDAwQjQwMDAwMDBCNjAwMDAwMEI4MDAwQjgKLToxMDVDODAwMDAwMEJBMDAwMDAwQkMwMDAwMDBCRTAwMDAwMEMwMDAwQTcKLToxMDVDOTAwMDAwMEMyMDAwMDAwQzQwMDAwMDBDNjAwMDAwMEM4MDAwOTQKLToxMDVDQTAwMDAwMENBMDAwMDAwQ0MwMDAwMDBDRTAwMDAwMEQwMDAwODMKLToxMDVDQjAwMDAwMEQyMDAwMDAwRDQwMDAwMDBENjAwMDAwMEQ4MDAwNzAKLToxMDVDQzAwMDAwMERBMDAwMDAwREMwMDAwMDBERTAwMDAwMEUwMDAwNUYKLToxMDVDRDAwMDAwMEUyMDAwMDAwRTQwMDAwMDBFNjAwMDAwMEU4MDAwNEMKLToxMDVDRTAwMDAwMEVBMDAwMDAwRUMwMDAwMDBFRTAwMDAwMEYwMDAwM0IKLToxMDVDRjAwMDAwMEYyMDAwMDAwRjQwMDAwMDBGNjAwMDAwMEY4MDAwMjgKLToxMDVEMDAwMDAwMEZBMDAwMDAwRkMwMDAwMDBGRTAwMDAwMTAwMDAwMTYKLToxMDVEMTAwMDAwMTAyMDAwMDAxMDQwMDAwMDEwNjAwMDAwMTA4MDAwMDMKLToxMDVEMjAwMDAwMTBBMDAwMDAxMEMwMDAwMDEwRTAwMDAwMTEwMDAwRjIKLToxMDVEMzAwMDAwMTEyMDAwMDAxMTQwMDAwMDExNjAwMDAwMTE4MDAwREYKLToxMDVENDAwMDAwMTFBMDAwMDAxMUMwMDAwMDExRTAwMDAwMTIwMDAwQ0UKLToxMDVENTAwMDAwMTIyMDAwMDAxMjQwMDAwMDEyNjAwMDAwMTI4MDAwQkIKLToxMDVENjAwMDAwMTJBMDAwMDAxMkMwMDAwMDEyRTAwMDAwMTMwMDAwQUEKLToxMDVENzAwMDAwMTMyMDAwMDAxMzQwMDAwMDEzNjAwMDAwMTM4MDAwOTcKLToxMDVEODAwMDAwMTNBMDAwMDAxM0MwMDAwMDEzRTAwMDAwMTQwMDAwODYKLToxMDVEOTAwMDAwMTQyMDAwMDAxNDQwMDAwMDE0NjAwMDAwMTQ4MDAwNzMKLToxMDVEQTAwMDAwMTRBMDAwMDAxNEMwMDAwMDE0RTAwMDAwMTUwMDAwNjIKLToxMDVEQjAwMDAwMTUyMDAwMDAxNTQwMDAwMDE1NjAwMDAwMTU4MDAwNEYKLToxMDVEQzAwMDAwMTVBMDAwMDAxNUMwMDAwMDE1RTAwMDAwMTYwMDAwM0UKLToxMDVERDAwMDAwMTYyMDAwMDAxNjQwMDAwMDE2NjAwMDAwMTY4MDAwMkIKLToxMDVERTAwMDAwMTZBMDAwMDAxNkMwMDAwMDE2RTAwMDAwMTcwMDAwMUEKLToxMDVERjAwMDAwMTcyMDAwMDAxNzQwMDAwMDE3NjAwMDAwMTc4MDAwMDcKLToxMDVFMDAwMDAwMTdBMDAwMDAxN0MwMDAwMDE3RTAwMDAwMTgwMDAwRjUKLToxMDVFMTAwMDAwMTgyMDAwMDAxODQwMDAwMDE4NjAwMDAwMTg4MDAwRTIKLToxMDVFMjAwMDAwMThBMDAwMDAxOEMwMDAwMDE4RTAwMDAwMTkwMDAwRDEKLToxMDVFMzAwMDAwMTkyMDAwMDAxOTQwMDAwMDE5NjAwMDAwMTk4MDAwQkUKLToxMDVFNDAwMDAwMTlBMDAwMDAxOUMwMDAwMDE5RTAwMDAwMUEwMDAwQUQKLToxMDVFNTAwMDAwMUEyMDAwMDAxQTQwMDAwMDFBNjAwMDAwMUE4MDAwOUEKLToxMDVFNjAwMDAwMUFBMDAwMDAxQUMwMDAwMDFBRTAwMDAwMUIwMDAwODkKLToxMDVFNzAwMDAwMUIyMDAwMDAxQjQwMDAwMDFCNjAwMDAwMUI4MDAwNzYKLToxMDVFODAwMDAwMUJBMDAwMDAxQkMwMDAwMDFCRTAwMDAwMUMwMDAwNjUKLToxMDVFOTAwMDAwMUMyMDAwMDAxQzQwMDAwMDFDNjAwMDAwMUM4MDAwNTIKLToxMDVFQTAwMDAwMUNBMDAwMDAxQ0MwMDAwMDFDRTAwMDAwMUQwMDAwNDEKLToxMDVFQjAwMDAwMUQyMDAwMDAxRDQwMDAwMDFENjAwMDAwMUQ4MDAwMkUKLToxMDVFQzAwMDAwMURBMDAwMDAxREMwMDAwMDFERTAwMDAwMUUwMDAwMUQKLToxMDVFRDAwMDAwMUUyMDAwMDAxRTQwMDAwMDFFNjAwMDAwMUU4MDAwMEEKLToxMDVFRTAwMDAwMUVBMDAwMDAxRUMwMDAwMDFFRTAwMDAwMUYwMDAwRjkKLToxMDVFRjAwMDAwMUYyMDAwMDAxRjQwMDAwMDFGNjAwMDAwMUY4MDAwRTYKLToxMDVGMDAwMDAwMUZBMDAwMDAxRkMwMDAwMDFGRTAwMDAwMjAwMDAwRDQKLToxMDVGMTAwMDAwMjAyMDAwMDAyMDQwMDAwMDIwNjAwMDAwMjA4MDAwQzEKLToxMDVGMjAwMDAwMjBBMDAwMDAyMEMwMDAwMDIwRTAwMDAwMjEwMDAwQjAKLToxMDVGMzAwMDAwMjEyMDAwMDAyMTQwMDAwMDIxNjAwMDAwMjE4MDAwOUQKLToxMDVGNDAwMDAwMjFBMDAwMDAyMUMwMDAwMDIxRTAwMDAwMjIwMDAwOEMKLToxMDVGNTAwMDAwMjIyMDAwMDAyMjQwMDAwMDIyNjAwMDAwMjI4MDAwNzkKLToxMDVGNjAwMDAwMjJBMDAwMDAyMkMwMDAwMDIyRTAwMDAwMjMwMDAwNjgKLToxMDVGNzAwMDAwMjMyMDAwMDAyMzQwMDAwMDIzNjAwMDAwMjM4MDAwNTUKLToxMDVGODAwMDAwMjNBMDAwMDAyM0MwMDAwMDIzRTAwMDAwMjQwMDAwNDQKLToxMDVGOTAwMDAwMjQyMDAwMDAyNDQwMDAwMDI0NjAwMDAwMjQ4MDAwMzEKLToxMDVGQTAwMDAwMjRBMDAwMDAyNEMwMDAwMDI0RTAwMDAwMjUwMDAwMjAKLToxMDVGQjAwMDAwMjUyMDAwMDAyNTQwMDAwMDI1NjAwMDAwMjU4MDAwMEQKLToxMDVGQzAwMDAwMjVBMDAwMDAyNUMwMDAwMDI1RTAwMDAwMjYwMDAwRkMKLToxMDVGRDAwMDAwMjYyMDAwMDAyNjQwMDAwMDI2NjAwMDAwMjY4MDAwRTkKLToxMDVGRTAwMDAwMjZBMDAwMDAyNkMwMDAwMDI2RTAwMDAwMjcwMDAwRDgKLToxMDVGRjAwMDAwMjcyMDAwMDAyNzQwMDAwMDI3NjAwMDAwMjc4MDAwQzUKLToxMDYwMDAwMDAwMjdBMDAwMDAyN0MwMDAwMDI3RTAwMDAwMjgwMDAwQjMKLToxMDYwMTAwMDAwMjgyMDAwMDAyODQwMDAwMDI4NjAwMDAwMjg4MDAwQTAKLToxMDYwMjAwMDAwMjhBMDAwMDAyOEMwMDAwMDI4RTAwMDAwMjkwMDAwOEYKLToxMDYwMzAwMDAwMjkyMDAwMDAyOTQwMDAwMDI5NjAwMDAwMjk4MDAwN0MKLToxMDYwNDAwMDAwMjlBMDAwMDAyOUMwMDAwMDI5RTAwMDAwMkEwMDAwNkIKLToxMDYwNTAwMDAwMkEyMDAwMDAyQTQwMDAwMDJBNjAwMDAwMkE4MDAwNTgKLToxMDYwNjAwMDAwMkFBMDAwMDAyQUMwMDAwMDJBRTAwMDAwMkIwMDAwNDcKLToxMDYwNzAwMDAwMkIyMDAwMDAyQjQwMDAwMDJCNjAwMDAwMkI4MDAwMzQKLToxMDYwODAwMDAwMkJBMDAwMDAyQkMwMDAwMDJCRTAwMDAwMkMwMDAwMjMKLToxMDYwOTAwMDAwMkMyMDAwMDAyQzQwMDAwMDJDNjAwMDAwMkM4MDAwMTAKLToxMDYwQTAwMDAwMkNBMDAwMDAyQ0MwMDAwMDJDRTAwMDAwMkQwMDAwRkYKLToxMDYwQjAwMDAwMkQyMDAwMDAyRDQwMDAwMDJENjAwMDAwMkQ4MDAwRUMKLToxMDYwQzAwMDAwMkRBMDAwMDAyREMwMDAwMDJERTAwMDAwMkUwMDAwREIKLToxMDYwRDAwMDAwMkUyMDAwMDAyRTQwMDAwMDJFNjAwMDAwMkU4MDAwQzgKLToxMDYwRTAwMDAwMkVBMDAwMDAyRUMwMDAwMDJFRTAwMDAwMkYwMDAwQjcKLToxMDYwRjAwMDAwMkYyMDAwMDAyRjQwMDAwMDJGNjAwMDAwMkY4MDAwQTQKLToxMDYxMDAwMDAwMkZBMDAwMDAyRkMwMDAwMDJGRTAwMDAwMzAwMDAwOTIKLToxMDYxMTAwMDAwMzAyMDAwMDAzMDQwMDAwMDMwNjAwMDAwMzA4MDAwN0YKLToxMDYxMjAwMDAwMzBBMDAwMDAzMEMwMDAwMDMwRTAwMDAwMzEwMDAwNkUKLToxMDYxMzAwMDAwMzEyMDAwMDAzMTQwMDAwMDMxNjAwMDAwMzE4MDAwNUIKLToxMDYxNDAwMDAwMzFBMDAwMDAzMUMwMDAwMDMxRTAwMDAwMzIwMDAwNEEKLToxMDYxNTAwMDAwMzIyMDAwMDAzMjQwMDAwMDMyNjAwMDAwMzI4MDAwMzcKLToxMDYxNjAwMDAwMzJBMDAwMDAzMkMwMDAwMDMyRTAwMDAwMzMwMDAwMjYKLToxMDYxNzAwMDAwMzMyMDAwMDAzMzQwMDAwMDMzNjAwMDAwMzM4MDAwMTMKLToxMDYxODAwMDAwMzNBMDAwMDAzM0MwMDAwMDMzRTAwMDAwMzQwMDAwMDIKLToxMDYxOTAwMDAwMzQyMDAwMDAzNDQwMDAwMDM0NjAwMDAwMzQ4MDAwRUYKLToxMDYxQTAwMDAwMzRBMDAwMDAzNEMwMDAwMDM0RTAwMDAwMzUwMDAwREUKLToxMDYxQjAwMDAwMzUyMDAwMDAzNTQwMDAwMDM1NjAwMDAwMzU4MDAwQ0IKLToxMDYxQzAwMDAwMzVBMDAwMDAzNUMwMDAwMDM1RTAwMDAwMzYwMDAwQkEKLToxMDYxRDAwMDAwMzYyMDAwMDAzNjQwMDAwMDM2NjAwMDAwMzY4MDAwQTcKLToxMDYxRTAwMDAwMzZBMDAwMDAzNkMwMDAwMDM2RTAwMDAwMzcwMDAwOTYKLToxMDYxRjAwMDAwMzcyMDAwMDAzNzQwMDAwMDM3NjAwMDAwMzc4MDAwODMKLToxMDYyMDAwMDAwMzdBMDAwMDAzN0MwMDAwMDM3RTAwMDAwMzgwMDAwNzEKLToxMDYyMTAwMDAwMzgyMDAwMDAzODQwMDAwMDM4NjAwMDAwMzg4MDAwNUUKLToxMDYyMjAwMDAwMzhBMDAwMDAzOEMwMDAwMDM4RTAwMDAwMzkwMDAwNEQKLToxMDYyMzAwMDAwMzkyMDAwMDAzOTQwMDAwMDM5NjAwMDAwMzk4MDAwM0EKLToxMDYyNDAwMDAwMzlBMDAwMDAzOUMwMDAwMDM5RTAwMDAwM0EwMDAwMjkKLToxMDYyNTAwMDAwM0EyMDAwMDAzQTQwMDAwMDNBNjAwMDAwM0E4MDAwMTYKLToxMDYyNjAwMDAwM0FBMDAwMDAzQUMwMDAwMDNBRTAwMDAwM0IwMDAwMDUKLToxMDYyNzAwMDAwM0IyMDAwMDAzQjQwMDAwMDNCNjAwMDAwM0I4MDAwRjIKLToxMDYyODAwMDAwM0JBMDAwMDAzQkMwMDAwMDNCRTAwMDAwM0MwMDAwRTEKLToxMDYyOTAwMDAwM0MyMDAwMDAzQzQwMDAwMDNDNjAwMDAwM0M4MDAwQ0UKLToxMDYyQTAwMDAwM0NBMDAwMDAzQ0MwMDAwMDNDRTAwMDAwM0QwMDAwQkQKLToxMDYyQjAwMDAwM0QyMDAwMDAzRDQwMDAwMDNENjAwMDAwM0Q4MDAwQUEKLToxMDYyQzAwMDAwM0RBMDAwMDAzREMwMDAwMDNERTAwMDAwM0UwMDAwOTkKLToxMDYyRDAwMDAwM0UyMDAwMDAzRTQwMDAwMDNFNjAwMDAwM0U4MDAwODYKLToxMDYyRTAwMDAwM0VBMDAwMDAzRUMwMDAwMDNFRTAwMDAwM0YwMDAwNzUKLToxMDYyRjAwMDAwM0YyMDAwMDAzRjQwMDAwMDNGNjAwMDAwM0Y4MDAwNjIKLToxMDYzMDAwMDAwM0ZBMDAwMDAzRkMwMDAwMDNGRTAwMDAwM0ZFMDAxNzAKLToxMDYzMTAwMDAwMDAwMDAwMDAwMDAxRkYwMDAwMDIwMDAwMDA3RkY4MDQKLToxMDYzMjAwMDAwMDA3RkY4MDAwMDBBOTAwMDAwMzUwMDAwMDAwMDAxMjYKLToxMDYzMzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNUYKLToxMDYzNDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNEYKLToxMDYzNTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwM0YKLToxMDYzNjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMkYKLToxMDYzNzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMUYKLToxMDYzODAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMEYKLToxMDYzOTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRkYKLToxMDYzQTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRUYKLToxMDYzQjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwREYKLToxMDYzQzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQ0YKLToxMDYzRDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQkYKLToxMDYzRTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQUYKLToxMDYzRjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwOUYKLToxMDY0MDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwOEUKLToxMDY0MTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwN0UKLToxMDY0MjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNkUKLToxMDY0MzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNUUKLToxMDY0NDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNEUKLToxMDY0NTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwM0UKLToxMDY0NjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMkUKLToxMDY0NzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMUUKLToxMDY0ODAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMEUKLToxMDY0OTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRkUKLToxMDY0QTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRUUKLToxMDY0QjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwREUKLToxMDY0QzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQ0UKLToxMDY0RDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQkUKLToxMDY0RTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQUUKLToxMDY0RjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwOUUKLToxMDY1MDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwOEQKLToxMDY1MTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwN0QKLToxMDY1MjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNkQKLToxMDY1MzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNUQKLToxMDY1NDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNEQKLToxMDY1NTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwM0QKLToxMDY1NjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMkQKLToxMDY1NzAwMDAwMDAwMDAwMTQwQUZGMDAwMDAwMDAwMTAwMDAwMDAwRkQKLToxMDY1ODAwMDAwMjAxMDAxMDAwMDAwMDAwMTAwOTAwMDAwMDAwMTAwNDgKLToxMDY1OTAwMDAwMDA5MDAyMDAwMDkwMDQwMDAwOTAwNjAwMDA5MDA4QTcKLToxMDY1QTAwMDAwMDA5MDBBMDAwMDkwMEMwMDAwOTAwRTAwMDA5MDEwNzcKLToxMDY1QjAwMDAwMDA5MDEyMDAwMDkwMTQwMDAwOTAxNjAwMDA5MDE4NDcKLToxMDY1QzAwMDAwMDA5MDFBMDAwMDkwMUMwMDAwOTAxRTAwMDA5MDIwMTcKLToxMDY1RDAwMDAwMDA5MDIyMDAwMDkwMjQwMDAwOTAyNjAwMDA5MDI4RTcKLToxMDY1RTAwMDAwMDA5MDJBMDAwMDkwMkMwMDAwOTAyRTAwMDA5MDMwQjcKLToxMDY1RjAwMDAwMDA5MDMyMDAwMDkwMzQwMDAwOTAzNjAwMDA5MDM4ODcKLToxMDY2MDAwMDAwMDA5MDNBMDAwMDkwM0MwMDAwOTAzRTAwMDA5MDQwNTYKLToxMDY2MTAwMDAwMDA5MDQyMDAwMDkwNDQwMDAwOTA0NjAwMDA5MDQ4MjYKLToxMDY2MjAwMDAwMDA5MDRBMDAwMDkwNEMwMDAwOTA0RTAwMDA5MDUwRjYKLToxMDY2MzAwMDAwMDA5MDUyMDAwMDkwNTQwMDAwOTA1NjAwMDA5MDU4QzYKLToxMDY2NDAwMDAwMDA5MDVBMDAwMDkwNUMwMDAwOTA1RTAwMDA5MDYwOTYKLToxMDY2NTAwMDAwMDA5MDYyMDAwMDkwNjQwMDAwOTA2NjAwMDA5MDY4NjYKLToxMDY2NjAwMDAwMDA5MDZBMDAwMDkwNkMwMDAwOTA2RTAwMDA5MDcwMzYKLToxMDY2NzAwMDAwMDA5MDcyMDAwMDkwNzQwMDAwOTA3NjAwMDA5MDc4MDYKLToxMDY2ODAwMDAwMDA5MDdBMDAwMDkwN0MwMDAwOTA3RTAwMDA5MDgwRDYKLToxMDY2OTAwMDAwMDA5MDgyMDAwMDkwODQwMDAwOTA4NjAwMDA5MDg4QTYKLToxMDY2QTAwMDAwMDA5MDhBMDAwMDkwOEMwMDAwOTA4RTAwMDA5MDkwNzYKLToxMDY2QjAwMDAwMDA5MDkyMDAwMDkwOTQwMDAwOTA5NjAwMDA5MDk4NDYKLToxMDY2QzAwMDAwMDA5MDlBMDAwMDkwOUMwMDAwOTA5RTAwMDA5MEEwMTYKLToxMDY2RDAwMDAwMDA5MEEyMDAwMDkwQTQwMDAwOTBBNjAwMDA5MEE4RTYKLToxMDY2RTAwMDAwMDA5MEFBMDAwMDkwQUMwMDAwOTBBRTAwMDA5MEIwQjYKLToxMDY2RjAwMDAwMDA5MEIyMDAwMDkwQjQwMDAwOTBCNjAwMDA5MEI4ODYKLToxMDY3MDAwMDAwMDA5MEJBMDAwMDkwQkMwMDAwOTBCRTAwMDA5MEMwNTUKLToxMDY3MTAwMDAwMDA5MEMyMDAwMDkwQzQwMDAwOTBDNjAwMDA5MEM4MjUKLToxMDY3MjAwMDAwMDA5MENBMDAwMDkwQ0MwMDAwOTBDRTAwMDA5MEQwRjUKLToxMDY3MzAwMDAwMDA5MEQyMDAwMDkwRDQwMDAwOTBENjAwMDA5MEQ4QzUKLToxMDY3NDAwMDAwMDA5MERBMDAwMDkwREMwMDAwOTBERTAwMDA5MEUwOTUKLToxMDY3NTAwMDAwMDA5MEUyMDAwMDkwRTQwMDAwOTBFNjAwMDA5MEU4NjUKLToxMDY3NjAwMDAwMDA5MEVBMDAwMDkwRUMwMDAwOTBFRTAwMDA5MEYwMzUKLToxMDY3NzAwMDAwMDA5MEYyMDAwMDkwRjQwMDAwOTBGNjAwMDA5MEY4MDUKLToxMDY3ODAwMDAwMDA5MEZBMDAwMDkwRkMwMDAwOTBGRTAwMDA5MTAwRDQKLToxMDY3OTAwMDAwMDA5MTAyMDAwMDkxMDQwMDAwOTEwNjAwMDA5MTA4QTEKLToxMDY3QTAwMDAwMDA5MTBBMDAwMDkxMEMwMDAwOTEwRTAwMDA5MTEwNzEKLToxMDY3QjAwMDAwMDA5MTEyMDAwMDkxMTQwMDAwOTExNjAwMDA5MTE4NDEKLToxMDY3QzAwMDAwMDA5MTFBMDAwMDkxMUMwMDAwOTExRTAwMDA5MTIwMTEKLToxMDY3RDAwMDAwMDA5MTIyMDAwMDkxMjQwMDAwOTEyNjAwMDA5MTI4RTEKLToxMDY3RTAwMDAwMDA5MTJBMDAwMDkxMkMwMDAwOTEyRTAwMDA5MTMwQjEKLToxMDY3RjAwMDAwMDA5MTMyMDAwMDkxMzQwMDAwOTEzNjAwMDA5MTM4ODEKLToxMDY4MDAwMDAwMDA5MTNBMDAwMDkxM0MwMDAwOTEzRTAwMDA5MTQwNTAKLToxMDY4MTAwMDAwMDA5MTQyMDAwMDkxNDQwMDAwOTE0NjAwMDA5MTQ4MjAKLToxMDY4MjAwMDAwMDA5MTRBMDAwMDkxNEMwMDAwOTE0RTAwMDA5MTUwRjAKLToxMDY4MzAwMDAwMDA5MTUyMDAwMDkxNTQwMDAwOTE1NjAwMDA5MTU4QzAKLToxMDY4NDAwMDAwMDA5MTVBMDAwMDkxNUMwMDAwOTE1RTAwMDA5MTYwOTAKLToxMDY4NTAwMDAwMDA5MTYyMDAwMDkxNjQwMDAwOTE2NjAwMDA5MTY4NjAKLToxMDY4NjAwMDAwMDA5MTZBMDAwMDkxNkMwMDAwOTE2RTAwMDA5MTcwMzAKLToxMDY4NzAwMDAwMDA5MTcyMDAwMDkxNzQwMDAwOTE3NjAwMDA5MTc4MDAKLToxMDY4ODAwMDAwMDA5MTdBMDAwMDkxN0MwMDAwOTE3RTAwMDA5MTgwRDAKLToxMDY4OTAwMDAwMDA5MTgyMDAwMDkxODQwMDAwOTE4NjAwMDA5MTg4QTAKLToxMDY4QTAwMDAwMDA5MThBMDAwMDkxOEMwMDAwOTE4RTAwMDA5MTkwNzAKLToxMDY4QjAwMDAwMDA5MTkyMDAwMDkxOTQwMDAwOTE5NjAwMDA5MTk4NDAKLToxMDY4QzAwMDAwMDA5MTlBMDAwMDkxOUMwMDAwOTE5RTAwMDA5MUEwMTAKLToxMDY4RDAwMDAwMDA5MUEyMDAwMDkxQTQwMDAwOTFBNjAwMDA5MUE4RTAKLToxMDY4RTAwMDAwMDA5MUFBMDAwMDkxQUMwMDAwOTFBRTAwMDA5MUIwQjAKLToxMDY4RjAwMDAwMDA5MUIyMDAwMDkxQjQwMDAwOTFCNjAwMDA5MUI4ODAKLToxMDY5MDAwMDAwMDA5MUJBMDAwMDkxQkMwMDAwOTFCRTAwMDA5MUMwNEYKLToxMDY5MTAwMDAwMDA5MUMyMDAwMDkxQzQwMDAwOTFDNjAwMDA5MUM4MUYKLToxMDY5MjAwMDAwMDA5MUNBMDAwMDkxQ0MwMDAwOTFDRTAwMDA5MUQwRUYKLToxMDY5MzAwMDAwMDA5MUQyMDAwMDkxRDQwMDAwOTFENjAwMDA5MUQ4QkYKLToxMDY5NDAwMDAwMDA5MURBMDAwMDkxREMwMDAwOTFERTAwMDA5MUUwOEYKLToxMDY5NTAwMDAwMDA5MUUyMDAwMDkxRTQwMDAwOTFFNjAwMDA5MUU4NUYKLToxMDY5NjAwMDAwMDA5MUVBMDAwMDkxRUMwMDAwOTFFRTAwMDA5MUYwMkYKLToxMDY5NzAwMDAwMDA5MUYyMDAwMDkxRjQwMDAwOTFGNjAwMDA5MUY4RkYKLToxMDY5ODAwMDAwMDA5MUZBMDAwMDkxRkMwMDAwOTFGRUZGRkZGRkZGNjQKLToxMDY5OTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDcKLToxMDY5QTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjcKLToxMDY5QjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRTcKLToxMDY5QzAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRDcKLToxMDY5RDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQzcKLToxMDY5RTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQjcKLToxMDY5RjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQTcKLToxMDZBMDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAzOEYKLToxMDZBMTAwMDAwQkVCQzIwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAzRDQKLToxMDZBMjAwMDAwQkVCQzIwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAzQzQKLToxMDZBMzAwMDAwQkVCQzIwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAzQjQKLToxMDZBNDAwMDAwQkVCQzIwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAzQTQKLToxMDZBNTAwMDAwQkVCQzIwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAzOTQKLToxMDZBNjAwMDAwQkVCQzIwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAzODQKLToxMDZBNzAwMDAwQkVCQzIwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAzNzQKLToxMDZBODAwMDAwQkVCQzIwMDAwMDAwMDAwMDAwMDAwNTAwMDAyMDAwNDcKLToxMDZBOTAwMDAwMDA0MEMwMDAwMDYxODAwMDAwODI0MDAwMDBBMzAwQjAKLToxMDZBQTAwMDAwMDBDM0MwMDAwMEU0ODAwMDAxMDU0MDAwMDEyNjAwOTIKLToxMDZBQjAwMDAwMDE0NkMwMDAwMTY3ODAwMDAxODg0MDAwMDFBOTAwNzQKLToxMDZBQzAwMDAwMDFDOUMwMDAwMUVBODAwMDAyMEI0MDAwMDIyQzAwNTYKLToxMDZBRDAwMDAwMDI0Q0MwMDAwMjZEODAwMDAyOEU0MDAwMDJBRjAwMzgKLToxMDZBRTAwMDAwMDJDRkMwMDAwMkYwODAwMDAwMTE0MDAwMDA4MDAwRDIKLToxMDZBRjAwMDAwMDEwMzgwMDAwMTg3MDAwMDAyMEE4MDAwMDI4RTAwNkUKLToxMDZCMDAwMDAwMDMxMTgwMDAwMzk1MDAwMDA0MTg4MDAwMDQ5QzAwMUQKLToxMDZCMTAwMDAwMDUxRjgwMDAwNUEzMDAwMDA2MjY4MDAwMDZBQTAwQ0QKLToxMDZCMjAwMDAwMDcyRDgwMDAwN0IxMDAwMDA4MzQ4MDAwMDhCODAwN0QKLToxMDZCMzAwMDAwMDkzQjgwMDAwOUJGMDAwMDBBNDI4MDAwMEFDNjAwMkQKLToxMDZCNDAwMDAwMEI0OTgwMDAwQkNEMDAwMDBDNTA4MDAwMENENDAwREQKLToxMDZCNTAwMDAwMEQ1NzgwMDAwMDVCMDAwMDAwN0ZGODAwMDA3RkY4MDgKLToxMDZCNjAwMDAwMDAwMjJBMDAwMDM1MDAwMDAwRkYwMDAwMDAwMDAwQzUKLToxMDZCNzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMTcKLToxMDZCODAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDcKLToxMDZCOTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRjcKLToxMDZCQTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRTcKLToxMDZCQjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRDcKLToxMDZCQzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQzcKLToxMDZCRDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQjcKLToxMDZCRTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQTcKLToxMDZCRjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwOTcKLToxMDZDMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwODYKLToxMDZDMTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNzYKLToxMDZDMjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNjYKLToxMDZDMzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNTYKLToxMDZDNDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNDYKLToxMDZDNTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMzYKLToxMDZDNjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMjYKLToxMDZDNzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMTYKLToxMDZDODAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDYKLToxMDZDOTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRjYKLToxMDZDQTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRTYKLToxMDZDQjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRDYKLToxMDZDQzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQzYKLToxMDZDRDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQjYKLToxMDZDRTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwQTYKLToxMDZDRjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwOTYKLToxMDZEMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwODUKLToxMDZEMTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNzUKLToxMDZEMjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNjUKLToxMDZEMzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNTUKLToxMDZENDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwNDUKLToxMDZENTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMzUKLToxMDZENjAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMjUKLToxMDZENzAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMTUKLToxMDZEODAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwMDUKLToxMDZEOTAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAwMDAwMDAwRjUKLToxMDZEQTAwMDAwMDBGRjAwMDAwMDE5MDAwMDAwMDAwMDAwMDAwMDAwQ0IKLToxMDZEQjAwMEZGRkZGRkZGMDAwMDAwMDAwMzkzODcwMDAwMDAwMDAwQkEKLToxMDZEQzAwMDAzOTM4NzAwMDAwMDdGRjgwMDAwN0ZGODAwMDAwQkEzMEEKLToxMDZERDAwMDAwMDAxNTAwMDAwMDAwRkYwMDAwMDBGRjAwMDAwMEZGQTEKLToxMDZERTAwMDAwMDAwMEZGMDAwMDAwRkYwMDAwMDBGRjAwMDAwMEZGQTcKLToxMDZERjAwMDAwMDAwMEZGMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwOTYKLToxMDZFMDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwODQKLToxMDZFMTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNzQKLToxMDZFMjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNjQKLToxMDZFMzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNTQKLToxMDZFNDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNDQKLToxMDZFNTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMzQKLToxMDZFNjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMjQKLToxMDZFNzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMTQKLToxMDZFODAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDQKLToxMDZFOTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRjQKLToxMDZFQTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRTQKLToxMDZFQjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRDQKLToxMDZFQzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQzQKLToxMDZFRDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQjQKLToxMDZFRTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQTQKLToxMDZFRjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwOTQKLToxMDZGMDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwODMKLToxMDZGMTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNzMKLToxMDZGMjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNjMKLToxMDZGMzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNTMKLToxMDZGNDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNDMKLToxMDZGNTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMzMKLToxMDZGNjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMjMKLToxMDZGNzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMTMKLToxMDZGODAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDMKLToxMDZGOTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRjMKLToxMDZGQTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRTMKLToxMDZGQjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRDMKLToxMDZGQzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQzMKLToxMDZGRDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQjMKLToxMDZGRTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQTMKLToxMDZGRjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwOTMKLToxMDcwMDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwODIKLToxMDcwMTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNzIKLToxMDcwMjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNjIKLToxMDcwMzAwMDAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNUMKLToxMDcwNDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNTAKLToxMDcwNTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNDAKLToxMDcwNjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMzAKLToxMDcwNzAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMjAKLToxMDcwODAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMTAKLToxMDcwOTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDAKLToxMDcwQTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAKLToxMDcwQjAwMEZGRkZGRkZGMDAwMDAwMDAwMDAwMjhBRDAwMDAyOTE4QkUKLToxMDcwQzAwMDAwMDAyOTE5MDAwMDAwMDUwMDAwMDAwNzAwMDBGRjAwNzMKLToxMDcwRDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGOUEKLToxMDcwRTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwOTcKLToxMDcwRjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwODcKLToxMDcxMDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNjkKLToxMDcxMTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNjYKLToxMDcxMjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNTYKLToxMDcxMzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMzkKLToxMDcxNDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMzYKLToxMDcxNTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMjYKLToxMDcxNjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDkKLToxMDcxNzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMDYKLToxMDcxODAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRjYKLToxMDcxOTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRDkKLToxMDcxQTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRDYKLToxMDcxQjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQzYKLToxMDcxQzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQTkKLToxMDcxRDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQTYKLToxMDcxRTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwOTYKLToxMDcxRjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNzkKLToxMDcyMDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNzUKLToxMDcyMTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNjUKLToxMDcyMjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNDgKLToxMDcyMzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNDUKLToxMDcyNDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMzUKLToxMDcyNTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMTgKLToxMDcyNjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMTUKLToxMDcyNzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMDUKLToxMDcyODAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRTgKLToxMDcyOTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRTUKLToxMDcyQTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRDUKLToxMDcyQjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQjgKLToxMDcyQzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQjUKLToxMDcyRDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQTUKLToxMDcyRTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGODgKLToxMDcyRjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwODUKLToxMDczMDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNzQKLToxMDczMTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNTcKLToxMDczMjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNTQKLToxMDczMzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNDQKLToxMDczNDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMjcKLToxMDczNTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMjQKLToxMDczNjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMTQKLToxMDczNzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRjcKLToxMDczODAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRjQKLToxMDczOTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRTQKLToxMDczQTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQzcKLToxMDczQjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQzQKLToxMDczQzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQjQKLToxMDczRDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGOTcKLToxMDczRTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwOTQKLToxMDczRjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwODQKLToxMDc0MDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNjYKLToxMDc0MTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNjMKLToxMDc0MjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNTMKLToxMDc0MzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMzYKLToxMDc0NDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMzMKLToxMDc0NTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMjMKLToxMDc0NjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDYKLToxMDc0NzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMDMKLToxMDc0ODAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRjMKLToxMDc0OTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRDYKLToxMDc0QTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRDMKLToxMDc0QjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQzMKLToxMDc0QzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQTYKLToxMDc0RDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQTMKLToxMDc0RTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwOTMKLToxMDc0RjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNzYKLToxMDc1MDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNzIKLToxMDc1MTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNjIKLToxMDc1MjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNDUKLToxMDc1MzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNDIKLToxMDc1NDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMzIKLToxMDc1NTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMTUKLToxMDc1NjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMTIKLToxMDc1NzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMDIKLToxMDc1ODAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRTUKLToxMDc1OTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRTIKLToxMDc1QTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRDIKLToxMDc1QjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQjUKLToxMDc1QzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQjIKLToxMDc1RDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQTIKLToxMDc1RTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGODUKLToxMDc1RjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwODIKLToxMDc2MDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNzEKLToxMDc2MTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNTQKLToxMDc2MjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNTEKLToxMDc2MzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNDEKLToxMDc2NDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMjQKLToxMDc2NTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMjEKLToxMDc2NjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMTEKLToxMDc2NzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRjQKLToxMDc2ODAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRjEKLToxMDc2OTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRTEKLToxMDc2QTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQzQKLToxMDc2QjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQzEKLToxMDc2QzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQjEKLToxMDc2RDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGOTQKLToxMDc2RTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwOTEKLToxMDc2RjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwODEKLToxMDc3MDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNjMKLToxMDc3MTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNjAKLToxMDc3MjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNTAKLToxMDc3MzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMzMKLToxMDc3NDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMzAKLToxMDc3NTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMjAKLToxMDc3NjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDMKLToxMDc3NzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMDAKLToxMDc3ODAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRjAKLToxMDc3OTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRDMKLToxMDc3QTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRDAKLToxMDc3QjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQzAKLToxMDc3QzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQTMKLToxMDc3RDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQTAKLToxMDc3RTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwOTAKLToxMDc3RjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNzMKLToxMDc4MDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNkYKLToxMDc4MTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNUYKLToxMDc4MjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNDIKLToxMDc4MzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwM0YKLToxMDc4NDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMkYKLToxMDc4NTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMTIKLToxMDc4NjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEYKLToxMDc4NzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRkYKLToxMDc4ODAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRTIKLToxMDc4OTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwREYKLToxMDc4QTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQ0YKLToxMDc4QjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQjIKLToxMDc4QzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQUYKLToxMDc4RDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwOUYKLToxMDc4RTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGODIKLToxMDc4RjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwN0YKLToxMDc5MDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNkUKLToxMDc5MTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNTEKLToxMDc5MjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNEUKLToxMDc5MzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwM0UKLToxMDc5NDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMjEKLToxMDc5NTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMUUKLToxMDc5NjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMEUKLToxMDc5NzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRjEKLToxMDc5ODAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRUUKLToxMDc5OTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwREUKLToxMDc5QTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQzEKLToxMDc5QjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQkUKLToxMDc5QzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQUUKLToxMDc5RDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGOTEKLToxMDc5RTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwOEUKLToxMDc5RjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwN0UKLToxMDdBMDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNjAKLToxMDdBMTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNUQKLToxMDdBMjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNEQKLToxMDdBMzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMzAKLToxMDdBNDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMkQKLToxMDdBNTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMUQKLToxMDdBNjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMDAKLToxMDdBNzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRkQKLToxMDdBODAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRUQKLToxMDdBOTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRDAKLToxMDdBQTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQ0QKLToxMDdBQjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQkQKLToxMDdBQzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQTAKLToxMDdBRDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwOUQKLToxMDdBRTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwOEQKLToxMDdBRjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNzAKLToxMDdCMDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNkMKLToxMDdCMTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNUMKLToxMDdCMjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGM0YKLToxMDdCMzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwM0MKLToxMDdCNDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMkMKLToxMDdCNTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMEYKLToxMDdCNjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMEMKLToxMDdCNzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwRkMKLToxMDdCODAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGREYKLToxMDdCOTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwREMKLToxMDdCQTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQ0MKLToxMDdCQjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQUYKLToxMDdCQzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQUMKLToxMDdCRDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwOUMKLToxMDdCRTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGN0YKLToxMDdCRjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwN0MKLToxMDdDMDAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNkIKLToxMDdDMTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNEUKLToxMDdDMjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNEIKLToxMDdDMzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwM0IKLToxMDdDNDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMUUKLToxMDdDNTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMUIKLToxMDdDNjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMEIKLToxMDdDNzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRUUKLToxMDdDODAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRUIKLToxMDdDOTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwREIKLToxMDdDQTAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGQkUKLToxMDdDQjAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwQkIKLToxMDdDQzAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwQUIKLToxMDdDRDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGOEUKLToxMDdDRTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwOEIKLToxMDdDRjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwN0IKLToxMDdEMDAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGNUQKLToxMDdEMTAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwNUEKLToxMDdEMjAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwNEEKLToxMDdEMzAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGMkQKLToxMDdENDAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwMkEKLToxMDdENTAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDBGRjAwMUEKLToxMDdENjAwMDBGRkZGRkZGMDAwMEZGMDAwRkZGRkZGRjAwMDAwMEZGRkQKLToxMDdENzAwMDAwMDBGRjAwMDAwMEZGMDAwRkZGRkZGRjAwMDBGRjAwRkEKLToxMDdEODAwMDBGRkZGRkZGMDAwMDAwRkYwMDAwRkYwMDAwMDAxMDAwRDkKLToxMDdEOTAwMDAwMDAyMDgwMDAwMDMxMDAwMDAwNDE4MDAwMDA1MjAwRkYKLToxMDdEQTAwMDAwMDA2MjgwMDAwMDczMDAwMDAwODM4MDAwMDA5NDAwRTcKLToxMDdEQjAwMDAwMDBBNDgwMDAwMEI1MDAwMDAwQzU4MDAwMDBENjAwQ0YKLToxMDdEQzAwMDAwMDBFNjgwMDAwMEY3MDAwMDAxMDc4MDAwMDExODAwQjUKLToxMDdERDAwMDAwMDEyODgwMDAwMTM5MDAwMDAxNDk4MDAwMDE1QTAwOUIKLToxMDdERTAwMDAwMDE2QTgwMDAwMTdCMDAwMDAxOEI4MDAwMDE5QzAwODMKLToxMDdERjAwMDAwMDFBQzgwMDAwMUJEMDAwMDAxQ0Q4MDAwMDFERTAwNkIKLToxMDdFMDAwMDAwMDFFRTgwMDAwMUZGMDAwMDAwMEY4MDAwMDA3RkY4RkQKLToxMDdFMTAwMDAwMDA3RkY4MDAwMDA1RjYwMDAwMzUwMDEwMDAwMDAwQUIKLToxMDdFMjAwMDAwMDAyOEFEMDAwMDI5MTgwMDAwMjkxOTAwMDAwMDA1RjUKLToxMDdFMzAwMDAwMDAwMDA2MDAwMTAwMDEwMDA1MDIwNkNDQ0NDQ0M5MDAKLToxMDdFNDAwMDcwNTgxMDNDMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMjAKLToxMDdFNTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMjQKLToxMDdFNjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMTQKLToxMDdFNzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDQKLToxMDdFODAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRjQKLToxMDdFOTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRTQKLToxMDdFQTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRDQKLToxMDdFQjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQzQKLToxMDdFQzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQjQKLToxMDdFRDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQTQKLToxMDdFRTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwOTQKLToxMDdFRjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwODQKLToxMDdGMDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNzMKLToxMDdGMTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNjMKLToxMDdGMjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNTMKLToxMDdGMzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNDMKLToxMDdGNDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMzMKLToxMDdGNTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMjMKLToxMDdGNjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMTMKLToxMDdGNzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDMKLToxMDdGODAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRjMKLToxMDdGOTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRTMKLToxMDdGQTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwRDMKLToxMDdGQjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQzMKLToxMDdGQzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQjMKLToxMDdGRDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwQTMKLToxMDdGRTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwOTMKLToxMDdGRjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwODMKLToxMDgwMDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNzIKLToxMDgwMTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNjIKLToxMDgwMjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNTIKLToxMDgwMzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwNDIKLToxMDgwNDAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMzIKLToxMDgwNTAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMjIKLToxMDgwNjAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMTIKLToxMDgwNzAwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDAwMDBGRjAwMDIKLToxMDgwODAwMDAwMDAwMDAwMDAwMDAwMDFDQ0NDMDIwMUNDQ0NDQ0NDMjQKLToxMDgwOTAwMENDQ0MwMjAxQ0NDQ0NDQ0NDQ0NDMDIwMUNDQ0NDQ0NDNEEKLToxMDgwQTAwMENDQ0MwMjAxQ0NDQ0NDQ0NDQ0NDMDIwMUNDQ0NDQ0NDM0EKLToxMDgwQjAwMENDQ0MwMjAxQ0NDQ0NDQ0NDQ0NDMDIwMUNDQ0NDQ0NDMkEKLToxMDgwQzAwMENDQ0MwMjAxQ0NDQ0NDQ0MwMDAwMDAwMEZGRkZGRkZGRTkKLToxMDgwRDAwMDAzMDMwMzAzMTM0MjAyMDI1MDUwNTAyMDcwNjA4MDUwOEIKLToxMDgwRTAwMDAyMDAwMjAwMDYwNDA2MDQwMDBFMDAwMDAxMTYwMEQ2N0QKLToxMDgwRjAwMDAwMjYyNUEwMDAyNjI1QTAwMDI2MjVBMDAwMjYyNUEwRDQKLToxMDgxMDAwMDAwNzIwMDAwMDEyMzAwRjMwMDI2MjVBMDAwMjYyNUEwMTAKLToxMDgxMTAwMDAwMjYyNUEwMDAyNjI1QTAwMDAwRkZGRjAwMDAwMDAwOEIKLToxMDgxMjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNTMKLToxMDgxMzAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNDMKLToxMDgxNDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMzMKLToxMDgxNTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMjMKLToxMDgxNjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMTMKLToxMDgxNzAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDMKLToxMDgxODAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwRjMKLToxMDgxOTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwRTMKLToxMDgxQTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwRDMKLToxMDgxQjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwQzMKLToxMDgxQzAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwQjMKLToxMDgxRDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwQTMKLToxMDgxRTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwOTMKLToxMDgxRjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwODMKLToxMDgyMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNzIKLToxMDgyMTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNjIKLToxMDgyMjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNTIKLToxMDgyMzAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNDIKLToxMDgyNDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMzIKLToxMDgyNTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMjIKLToxMDgyNjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMTIKLToxMDgyNzAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDIKLToxMDgyODAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwRjIKLToxMDgyOTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwRTIKLToxMDgyQTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwRDIKLToxMDgyQjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwQzIKLToxMDgyQzAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwQjIKLToxMDgyRDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwQTIKLToxMDgyRTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwOTIKLToxMDgyRjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwODIKLToxMDgzMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNzEKLToxMDgzMTAwMDAwMDBGRkZGMDAwMDAwMDBGRkZGRkZGMzMxOEZGRkZGQjEKLToxMDgzMjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzOTEKLToxMDgzMzAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGMTMwRUZGRkZGRjMKLToxMDgzNDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNzEKLToxMDgzNTAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGNUQKLToxMDgzNjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNTEKLToxMDgzNzAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGRUIKLToxMDgzODAwMDBDMzBDMzA1QzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzMjMKLToxMDgzOTAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGMkUKLToxMDgzQTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMTEKLToxMDgzQjAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGQTMwMkZGRkZGMjIKLToxMDgzQzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzRjEKLToxMDgzRDAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGNzMxRUZGRkZGM0MKLToxMDgzRTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzRDEKLToxMDgzRjAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGNTMwMkZGRkZGQ0YKLToxMDg0MDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzQjAKLToxMDg0MTAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGMzMxOEZGRkZGMkYKLToxMDg0MjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzOTAKLToxMDg0MzAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGMTMxMEZGRkZGRDEKLToxMDg0NDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNzAKLToxMDg0NTAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGNUMKLToxMDg0NjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNTAKLToxMDg0NzAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGRUEKLToxMDg0ODAwMDBDMzBDMzA1QzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzMjIKLToxMDg0OTAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGMkQKLToxMDg0QTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMTAKLToxMDg0QjAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGQTMwMkZGRkZGMjEKLToxMDg0QzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzRjAKLToxMDg0RDAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGNzMwRUZGRkZGM0MKLToxMDg0RTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzRDAKLToxMDg0RjAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGNTMwNEZGRkZGQUUKLToxMDg1MDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzQUYKLToxMDg1MTAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGRTMKLToxMDg1MjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzQzMKLToxMDg1MzAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMDMKLToxMDg1NDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzQTMKLToxMDg1NTAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGRTIKLToxMDg1NjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzODMKLToxMDg1NzAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGQzEKLToxMDg1ODAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNjMKLToxMDg1OTAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGOUYKLToxMDg1QTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNDMKLToxMDg1QjAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGN0IKLToxMDg1QzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMjMKLToxMDg1RDAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNTMKLToxMDg1RTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDMKLToxMDg1RjAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMjMKLToxMDg2MDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzRTIKLToxMDg2MTAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGMzMyMEZGRkZGQUMKLToxMDg2MjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzOEUKLToxMDg2MzAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGMTMxMEZGRkZGQ0YKLToxMDg2NDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNkUKLToxMDg2NTAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGNUEKLToxMDg2NjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNEUKLToxMDg2NzAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGRTgKLToxMDg2ODAwMDBDMzBDMzA1QzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzMjAKLToxMDg2OTAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGMkIKLToxMDg2QTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMEUKLToxMDg2QjAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkY4QTA0MkZGRkZGQkIKLToxMDg2QzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDQzAwMEYzQ0YzQ0YzMjEKLToxMDg2RDAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkY5NzA1Q0ZGRkZGRTUKLToxMDg2RTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDQzAwMEYzQ0YzQ0YzMDEKLToxMDg2RjAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGNTMxMEZGRkZGRUIKLToxMDg3MDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzQUQKLToxMDg3MTAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGMzMyMEZGRkZGQUIKLToxMDg3MjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzOEQKLToxMDg3MzAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGMTMwMkZGRkZGQUYKLToxMDg3NDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNkQKLToxMDg3NTAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGNTkKLToxMDg3NjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNEQKLToxMDg3NzAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRkYwNjFDQkZGRkZGREMKLToxMDg3ODAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDQzAxNEYzQ0YzQ0YzNEMKLToxMDg3OTAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGMkEKLToxMDg3QTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMEQKLToxMDg3QjAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGQTMwMkZGRkZGMUUKLToxMDg3QzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzRUQKLToxMDg3RDAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGNzMxQ0ZGRkZGNTgKLToxMDg3RTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzQ0QKLToxMDg3RjAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMjEKLToxMDg4MDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzRTAKLToxMDg4MTAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGRTAKLToxMDg4MjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzQzAKLToxMDg4MzAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMDAKLToxMDg4NDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzQTAKLToxMDg4NTAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGREYKLToxMDg4NjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzODAKLToxMDg4NzAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGQkUKLToxMDg4ODAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNjAKLToxMDg4OTAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGOUMKLToxMDg4QTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNDAKLToxMDg4QjAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNzgKLToxMDg4QzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMjAKLToxMDg4RDAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNTAKLToxMDg4RTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAKLToxMDg4RjAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMjAKLToxMDg5MDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzREYKLToxMDg5MTAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGREYKLToxMDg5MjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzQkYKLToxMDg5MzAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGRkYKLToxMDg5NDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzOUYKLToxMDg5NTAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGREUKLToxMDg5NjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzN0YKLToxMDg5NzAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGQkQKLToxMDg5ODAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNUYKLToxMDg5OTAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGOUIKLToxMDg5QTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzM0YKLToxMDg5QjAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNzcKLToxMDg5QzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMUYKLToxMDg5RDAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNEYKLToxMDg5RTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzRkYKLToxMDg5RjAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMUYKLToxMDhBMDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzREUKLToxMDhBMTAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGREUKLToxMDhBMjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzQkUKLToxMDhBMzAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGRkUKLToxMDhBNDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzOUUKLToxMDhBNTAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGREQKLToxMDhBNjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzN0UKLToxMDhBNzAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGQkMKLToxMDhBODAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNUUKLToxMDhBOTAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGOUEKLToxMDhBQTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzM0UKLToxMDhBQjAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNzYKLToxMDhBQzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMUUKLToxMDhBRDAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNEUKLToxMDhBRTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzRkUKLToxMDhBRjAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMUUKLToxMDhCMDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzREQKLToxMDhCMTAwMDAwNDBDRjNDQ0RDRENEQ0QwMDBDMDAwMDAwMDcwMEMwMDMKLToxMDhCMjAwMDAwMDI4MTMwMDAwQjgxNTgwMDAyMDIxMDAwMDEwMjMwNjcKLToxMDhCMzAwMDAwMEYwMjQwMDAwMTAzMzAwMDBDMDAwMDAwMDgwMEMwREMKLToxMDhCNDAwMDAwMDI4MTQwMDAwQjgxNjgwMDAyMDIyMDAwMDEwMjQwMDcKLToxMDhCNTAwMDAwMDcwMjUwMDAwMjAyQzAwMDEwMDAwMDAwMDgwMTAwREYKLToxMDhCNjAwMDAwMDI4MTgwMDAwQjgxQTgwMDAyMDI2MDAwMDE4MjgwNjcKLToxMDhCNzAwMDAwMEU4Mjk4MDAwODAzODAwMDEwMDAwMDAwMDEwMTAwMzAKLToxMDhCODAwMDAwMDI4MTEwMDAwOTAxMzgwMDAyMDFDODAwMDEwMUU4NUIKLToxMDhCOTAwMDAwMEUwMUY4MDAwMDAyRDhDQ0NDQ0NDQ0NDQ0NDQ0NDOTQKLToxMDhCQTAwMENDQ0NDQ0NDQ0NDQ0NDQ0MwMDAwMjAwMENDQ0NDQ0NDMTUKLToxMDhCQjAwMENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQzAwMDAyMDAwMDUKLToxMDhCQzAwMENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDRTUKLToxMDhCRDAwMDA0MDAyMDAwQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDRTEKLToxMDhCRTAwMENDQ0NDQ0NDNDEwMDIwMDAwMzAzMDMwMzAzNDIwMjAyOUYKLToxMDhCRjAwMDUwNTA1MDIwNzA2MDgwNTAxMzEzMTMxMzEzNDIxMjEyMDAKLToxMDhDMDAwMDUwNTA1MDIwNzA2MDgwNTAwMzAxMDIwMDAwMDAwMDAwQUUKLToxMDhDMTAwMDAwMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwQTIKLToxMDhDMjAwMDAwMEJGQjUxQ0ZDMEYwMDM4QTBGMDkzMjMwNjg4QTIwNTUKLToxMDhDMzAwMEY4QzRFMDVDNzYwNjg2NzUxQzBDMEM1QkI4NDlEMzA3NUIKLToxMDhDNDAwMEMzMkMwQzBDMENEQTRDRTRFOTA1RTFGQkJDMEMwQ0FGQkEKLToxMDhDNTAwMDgwOTg4NTBGNTU5Qzg3MTM0MkZGMDE1QUMwQzdDQUMwMzAKLToxMDhDNjAwMEEwQzE4NjVERkYzQTM1MDQzQjQwODU4MUExMUM4OEQ5QUYKLToxMDhDNzAwMDk0MTgxOENDNTQxMUUyRDJFQTBDMEMzMzgwRkMwNEE4RUUKLToxMDhDODAwMEQ4MUQyMDFEQUI0NkJFOUI0N0YxRTBDMTM3OEQ1MUY5ODEKLToxMDhDOTAwMDVCMERBMTY5MDEyQTdFMEI0RDdFMUI1NEJFNEEwNzQyMjMKLToxMDhDQTAwMERGMzZDNjZFNkVCNTBFNzFGNjlGQjU0NkU1QUZCNEM2M0IKLToxMDhDQjAwMEFGRkVBRTNEMkFGRjIwOUFGQUFENTAzRTAwQzVENTVCMEYKLToxMDhDQzAwMEE3RDgwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKLToxMDhDRDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRUQ3RDdGN0MxNEQ1ODkKLToxMDhDRTAwMEI1Rjg5OTlERDlEOUQ5Q0RFRTY2MDgwOTZDMjBFMDI0NTQKLToxMDhDRjAwMDg2MUFGQjgyREZFNTc3QTg0MTg3ODAzNEI2M0NERjhBOUQKLToxMDhEMDAwMDVBRDNENkY2QkI1MDZDNTUxNDU2QkYzRUUxRjU2OTMzQzUKLToxMDhEMTAwMEY5NDExMjIyNjIwNDlGREFENjFGMkI1NTRCRkI2Qzg5NTYKLToxMDhEMjAwMDk0MkFBRDNGREUwMjRBRjFGNUM3NDNBQUQ1RDdBMjJGNTgKLToxMDhEMzAwMEZFODBBQTQ1NUZDNEQyRDg3RTUxREUzREU3REVDOUNFQjMKLToxMDhENDAwMDRDNzY5MzBERDAxRjdGQkNGMDgxRTFDRURDMUZFNzlFRjcKLToxMDhENTAwMDczRUUzOUU3OUU3M0VFOERFQUYzQzNDN0NFMDUzODhFMDYKLToxMDhENjAwMDNGRUNEOTEzMDI4MDU5RDlBNzcxRjVCQ0FFQkU5OTAwNkEKLToxMDhENzAwMDQ3MjFEMkQzNUQwQUQwQTY4MDA5QUM2QzFEODhBNDFGMDAKLToxMDhEODAwMDk0MDA3RjZBMTQ1NjVFMkQ3RjNDREU1RDA5NzA2N0QxQ0EKLToxMDhEOTAwMEQ3RUVDM0ZBNkIyQzA1MDJFQ0Q5REQwQzkwMzk4MzdEM0MKLToxMDhEQTAwMDBGNDUzNzQzMzE0MDExQTRCNkUyNzdGNjkzNzg5MEY1M0EKLToxMDhEQjAwMDM3MTA5QzlDODY2ODc2RkMzMkYwRDFCODAwMTVGQUExNzkKLToxMDhEQzAwMDIyQUEwN0M3NjVGNkNGODFFNDdDMTgwNzIwODNGREIzOEMKLToxMDhERDAwMDA2N0E1OTNGQ0FGMzcyMUFDNzk1RTVDNUZBOEI1NUQ5NzkKLToxMDhERTAwMDdFQkM0RjU5NTcyMUEzODlGRUYwMUZGOUIyRTI2NDM4QzcKLToxMDhERjAwMDdGRkQzNTA3MkFCNzNFNUQ5M0FEN0YwNjQ0NEEwRkZERTAKLToxMDhFMDAwMDFERkI4RjAyMEFDMTIzQUYwN0M0QzNEMTMwQTRFNUNBM0EKLToxMDhFMTAwMEZDRkQwQzM0MUI1QjlGRjYyMzFFQkY1MDlDOTg5QUJGMzEKLToxMDhFMjAwMDlFOERBN0FFNjY4RDlFMURDRDNBNjQwMjAwMEM2NEIzODQKLToxMDhFMzAwMEI3OTYzREMzNjA2RUFFMUREQTZFMDE0ODg0MkZDREIwOEIKLToxMDhFNDAwMDA4OUVGNkIwMkY1RDU0ODk1MDI3MDExODdFRkQ4ODFGQkIKLToxMDhFNTAwMDA5REYyRkQxQ0MxQ0VERUQyNzk0MzJGQ0Q4RjM2NTc4RDcKLToxMDhFNjAwMDBDMDJFRjBGRDhGQzFFNjRGRDA1NzFGQzFDRjhCQTA4NUIKLToxMDhFNzAwMEM3MkY2M0RGQUI4NzhFNkZDRDNDRjFGMTQzNjcwMkVDMDgKLToxMDhFODAwMDBCMjNCRTREODQwMTdDN0EwQUUyODJERTlGOTQ4NkU5NDAKLToxMDhFOTAwMDQ3RDA1OTMxNzgzRjIzRTFCREE4QzY5NzFEOTdGRDBERjYKLToxMDhFQTAwMDFBMjExNzlGMDQ2MjI1NkVCRUYxRjIyNUUyQTkwQ0U5OTIKLToxMDhFQjAwMDY1NDhBRjRGQzlGNkFCMjJERDcyRTBFQjRBODFBRkZFRTkKLToxMDhFQzAwMEY5ODlBNjA0QzNDN0RBNjZCMDVFNzNCNDkzNjM2MEE2N0IKLToxMDhFRDAwMDczRTA2OUI1Njg2NzhGQTc5NEIyN0EzOUZBMDc2ODExQTkKLToxMDhFRTAwMEVCQzc3MkQ1MkYxNEJFOUI0RTEwQkU5QkZGNDJGMEREMjgKLToxMDhFRjAwMDI2Rjg5RDQ5Mjg3QUY2Q0Y0RjEyOUNERUZFNzJBRDJGRTAKLToxMDhGMDAwMEI2ODgwN0NCMjEyNTZERjk5MEJGNEIyMUZFMjA3QkY4NTkKLToxMDhGMTAwMDM1QkVDRUVDRUZERjA3M0ZGNUIzMDMyNTBFMUJBNzREQTMKLToxMDhGMjAwMEMwRDczRjlGQ0JCRkI1RDNENEY0NjY4OUU0OTEwQkNFQjUKLToxMDhGMzAwMDg3NTE3RUIxNzY5MjI0RjBBMUY1MDJGMjVGRDEwNzBBNDMKLToxMDhGNDAwMEMwNTg4NENGODQ0NDA0NjA1RDc1ODMzNjlDRkMwMTVEMDkKLToxMDhGNTAwMEY5NTM5RkNENzc1NTQzRjlFRUUzNkMxODg0MkIxNENFNkIKLToxMDhGNjAwMDhEQTdFRjBGQ0FEMUNCQUNENzU4M0Y1QTkwQkQzRjFENEMKLToxMDhGNzAwMEZCMkQ4RDU1Q0MwNjlDMURGREY4QzU3NzkwN0NGMjcxQkMKLToxMDhGODAwMDVDQjdDNzU4QkREOTQyQ0VDQUQ0M0ZDOTExQTgwMDkyMTgKLToxMDhGOTAwMEY3QjJBODRGRTNCMEZBMDEzNjJENzMzQTdCRTJGQjFBMjEKLToxMDhGQTAwMDMxOEUzNEI0NUY2RkJCMDEyOEUxRjgxMUYwRDg3MjVERTcKLToxMDhGQjAwMDg2MjdBODlGNDE3ODk0MDRFMUNCRkJERUNGREVFQkUxNkUKLToxMDhGQzAwMDkzN0Y3RkIyNjVCRjkxNjdCQzFFODlGODY5QTRGNkFGMzUKLToxMDhGRDAwMDA4N0UxOUMyOUY3OUU4QkE1RkFDMzMwNTdBNEQzODNERjcKLToxMDhGRTAwMENCNDczNjdGOUQyODFGOUQzNDlGQjBFMTQ5NUZFNEUxNjgKLToxMDhGRjAwMDEzMEI1MkI0NkU1ODM1QUI3QkRBRThGOTI1MDc5RjY0NDIKLToxMDkwMDAwMDlDRjUxNzRCNjNGODNDOTQzOEYxMEI4MzQ3MjFCRUQ1OTAKLToxMDkwMTAwMDM5M0M2NUQzNEJBOTNGMDlEN0Y4MTlEODgzMjgyMzFFQkIKLToxMDkwMjAwMEQ4N0M5N0Q5RUQyMTRFRUIzNTg0NzY4RUEzM0Q5QjFDRTEKLToxMDkwMzAwMEMxMkJDOTkyOTBGQkJDREUwRDYyOURDRjZCQThFMEYwMDYKLToxMDkwNDAwMDgzRThERjAzMkZFQjRGNzNGNjI3NDM4NTg3Q0YzOURDQTcKLToxMDkwNTAwMDFCMjQyRURGNThGRDBDRTFEMzNCQkUyMjExQkMzMjI0NzEKLToxMDkwNjAwMDJDMUY2QkI3NTk4Q0VGOTU1RkY2NzNCQkU4NkZCRDA0OEYKLToxMDkwNzAwMDREQkQ2MUJFOUU5NjM4RjQ2MTgzMjRFNDg0QzZENzk5QzEKLToxMDkwODAwMDU3M0VGOTkxQUY2NjlDMzg1RjE1MkFENzE3NEJCOUY1NTMKLToxMDkwOTAwMDBFQjM4QTYyMTc0NkYyRUI5RDYyOUZBRDBGMzIzMTQxRUIKLToxMDkwQTAwMEI3NTFEMUZENzRBOUM0NDVGNzQyRTE1RDc2ODJGMDRFMTcKLToxMDkwQjAwMDFDMEE2RjQxN0M3NkE2RTQxQjk1OUVCQ0UxMDRFMTBCODMKLToxMDkwQzAwMDdBRTAzQjU1N0MzRDQzRjA1OUExRjBEQkVCNjBCNEYwMTYKLToxMDkwRDAwMENCNDNGMTVCRDAzQTlBM0I0QUY4MzY5RjIwN0VDQjdDNUIKLToxMDkwRTAwMEI2OUQyNEUwQ0JCMzZFRTcwOTdBNUJDMEY5NDM2MTc2QTUKLToxMDkwRjAwMDM4RUU3MzBBODVFRkQxOTFFMTAzRjgwNEZCNkJCRDZBOEEKLToxMDkxMDAwMDk5MEFEOTZCMDAxMzAwOUU2RTc5RDVCMjk0MkM3QzI2RjcKLToxMDkxMTAwMDcwQjkzRURBRjFGNzhDNEMzRjMxRkU1Qjk2NTk5RDFEREMKLToxMDkxMjAwMEZGRjk5NkI3NUNFMzJCOEM3RjkwRDkwQTFERjc4NTQyMzcKLToxMDkxMzAwMEU3MERFRkI5RTZGREJBRjQ5RTZCREMxM0M1RkJDMTgyMDcKLToxMDkxNDAwMEM3RkZBMzZCREVFRjRCN0Y3NENGM0JDQ0U2N0Q3QUUxQUMKLToxMDkxNTAwMEUzRkVGRTA0RjlCMTUyQUM5NzA2NDk3N0U5ODE3Q0Y2NEIKLToxMDkxNjAwMEZCMEM0MUQ3QkJFREZBMzZCQzc5RUE5RjI5RTA2QTJGQTgKLToxMDkxNzAwMEIwRkU0NEQxRkZFNzBBQUNERjJCRkFFRkM1RkE2NTIzNTYKLToxMDkxODAwMEQ3M0Y1REQ0NEYxNTU4NUZGMkYxNzU5ODRGN0ZDRTk3NUEKLToxMDkxOTAwMDZDRkM4MTZCRkZEMUE2NzEzRjg4RDlBNjQwRjA5Q0ExRTEKLToxMDkxQTAwMDdFMTNBQjIxRjVFRDNFNDY3QkFCMzVBMEI3OTU5MkRGNDQKLToxMDkxQjAwMDg0RkMyMjZCMDAxMkU4MzdGOTI2MjRFQjdDQUMxRjYzOTkKLToxMDkxQzAwMEM3NERGNzYxQkQyMzhBQTY3N0VCQzAxNzI0RkIxRTNDNzEKLToxMDkxRDAwMDEwRDlEQzVEOTkxRDZGQjU5QzZDOTI5MDk3REFBMkZBNUMKLToxMDkxRTAwMDgzRTQ1RjQ5MzU0OUVDNTk2Njg1NzVGNERCMEM1NDI1RjkKLToxMDkxRjAwMDVBOTY5NkUyM0MwQ0RENjJGREZDRkE4QThCNzY2Mjc5MjcKLToxMDkyMDAwMDkzMjZFOTMyMkJGRkNCMzk3MzZGRkIwQzZCMzVGMEUxMDIKLToxMDkyMTAwMENFOTc0RUMzN0FEM0M2NTVCNTkyQkMzNDI1QzQ0RjY5OTgKLToxMDkyMjAwMDVDMzVFNTI4N0I1RTdDNzE1NjFGRTAzRjhCMUQ2NTY2RDMKLToxMDkyMzAwMDA3N0NCNkU5MTIyRUZGQzVGN0NGMjdEREU1NEIxQTJGQzUKLToxMDkyNDAwMDcxQjVCRjM0RTFGRTlFOUQwRkYwN0RDN0I5RENGRjMwRTQKLToxMDkyNTAwMDUwOTVGQTJGMEVEN0M3MkEyREVFNUZBMEY5RUE1NjU0ODMKLToxMDkyNjAwMEVGNjZGMzVDRkZFMUI1NTQ1RURGNTJBQkI3QjJGMkU3RjUKLToxMDkyNzAwMEFFRjRCNzJDNjVDRkIwMDRCQUNDOTY1MjcxNUNBNUY5QTgKLToxMDkyODAwMDAyOUJBRjVBQzc3NjhGRTczQ0RCMzVEQkM4QkZGRjJBQUUKLToxMDkyOTAwMDM2M0RGMzhDNUY5Qzg1OTNDREIzRTlFQURDNzBBQkZBODUKLToxMDkyQTAwMEZCMTNERTYwRjZEMkMwQ0VBMDg5RjA4NEY3Q0FFOUEwMzUKLToxMDkyQjAwMDQ0NzRERDM5MDlFOTYyMTUyNzM5N0Q0MEFBNjZDRjIzNTgKLToxMDkyQzAwMDhEM0FBMDdGQTRBMTMxNjlDOEFDQkMzMUE2QzUwMzA2MDQKLToxMDkyRDAwMERBQzkxOTBERjExRTQxMUFDQzY1RUZFM0JFMjBEQTYzM0QKLToxMDkyRTAwMEFBRkUwN0VBNUYxN0RGN0JFMjU1RTNEMTNGRjJFM0U2MzAKLToxMDkyRjAwMDM1MTMxNUI2REU3NzM0NUJGNDdDQjRCOThCOUVEQjlCRkIKLToxMDkzMDAwMDdCMjYyQUNDODhERkQyN0MxNzNERURGOUExMjQzMUVDRjUKLToxMDkzMTAwMEY5QzlCOEFGMzY1QjkxREYwNkZDQ0MzNDQyM0NDRUY3REUKLToxMDkzMjAwMEQxRkU3NjAzQ0ExMTNGQ0FFMTc0NUIxNERGRDdDMUI0MjIKLToxMDkzMzAwMDZFNDBCOUM0RTVDQkM2RjhCNkRERjg3RTYzM0Q0QzQzNUMKLToxMDkzNDAwMDkyNkQzNDM3Qjc0NUQ5M0NBRTJCODdFOUQ4RjdDRTk3MjUKLToxMDkzNTAwMDFGRTNERjJCNjA3QTgwOTU3NzM1MzY5MDVDRUQ4OUZCRDMKLToxMDkzNjAwMEQyODE0QTgyRkY3Q0U0RTc5RTQ2MUYzMDkzMDc4QUVCNTYKLToxMDkzNzAwMDE4NUMwRUJDMDY2MkVFRjJBRTQ2MjZCMDY2MTIzRUQyMTUKLToxMDkzODAwMDAxMjkzQjdGODUyRDMzQzRDNzQ2QjMyQUU4REM1N0NGN0MKLToxMDkzOTAwMERBRTc2RTdGNjZEQTVEREU4OEVEODdGMTRCQ0RFRDczM0YKLToxMDkzQTAwMEQ3OUZGMzkyQkJDQzI0REIyQjgzN0NDMEYxRjhBRjNFN0MKLToxMDkzQjAwMDI2MEY3NkJGM0NERTY3RTFCQzREM0U0RkY2RTRGRUMyQjEKLToxMDkzQzAwMDk4MkY4REM2RTcxNjgxM0YxQkJGMDMxMTJFNUYzNjM2REYKLToxMDkzRDAwMDczM0Y2MDNFNzgzNjdFRUFBQUQ4NzA3RTAzQjVCMTIzMkIKLToxMDkzRTAwMDgxRkU1NEI1QjEyNzAxNjdFMTMzMkQ5RUJEMDlBNzlGQ0EKLToxMDkzRjAwMEQ1N0VCRTg4QzY4RkMzNUZEMjExREI1OEIyQjQzNjBCQTAKLToxMDk0MDAwMDhGQjdGRTc4NTkyNTc5Mzc1MEM2QkY3N0M0NUVEMzk3OUEKLToxMDk0MTAwMEQ2M0FGQjkzQkNERkI1Q0JDM0NFRUZEQ0FGMzI1MDZFOTgKLToxMDk0MjAwMDdGM0ZBMjJEMERFNzY4M0Y4OTdEQ0Y0MTk3QTUzMkZGOTEKLToxMDk0MzAwMEZFRjRDQjgxODYzQjkwMUYwNTdFNzdCRkZDMTNBRDFBRUYKLToxMDk0NDAwMEYxRkRCQzBDQzg2NzFCRjczNTkwQkM0NTNFNDM3OUIxQjQKLToxMDk0NTAwMDhCRjE0NTVGMkREMjdGRkQyQkNFNzU1QjVDRTcyRTMzMDQKLToxMDk0NjAwMEJFRTJGQ0M1RkFDNUExN0U4NkY0NjAxREZFQkJGMENCNTIKLToxMDk0NzAwMEVFMTU3RUQ5M0RDRDMxN0EzRURENkNEMDczNTc3MzBEM0MKLToxMDk0ODAwMDdEQ0YzNEM3QTlGQzU0NzMxRDk1OUY2ODM2QTlGQ0UzQjIKLToxMDk0OTAwMEU2NDYyQUVGNjg0RTUwRjlEMUU2MjY3QTZFNkY0RUQyMzQKLToxMDk0QTAwMDczNEJGMzE1RjQ2NEZDNEJGQ0JDQTEzOTI1RkNDMDZCNzkKLToxMDk0QjAwMDVDRkNGMEY3RjE4MDhCRkYzRTVERTMyRTlGNkY5QzkxOEIKLToxMDk0QzAwMDVERDdFQ0VGMjc2M0VFRjI3OUZBMjc1REU1MDU5QUJCRUQKLToxMDk0RDAwMDNDMUZCRUUyRUFFRkRDMEZCRUVDMkFDRkVCRUY3MEQ1MEIKLToxMDk0RTAwMDNGRkI0RDc3Nzk2RURGNDM5RUY1RTIyRUNGREFCN0M3QUIKLToxMDk0RjAwMEIzMUVEREU1RTJCQTQzQUVGRTAyMzE3N0Y5N0UxNDMyRTcKLToxMDk1MDAwMDVDNEUxMTdGNzRDNDVBNEI3MkYyQ0ZFMEY3OERBMTJGREQKLToxMDk1MTAwMEI5QkVDQkQ0N0U2NEZFNTlENjU1ODlGQzkzRjZDNTJERDEKLToxMDk1MjAwMDk0M0IyNkU3Mjc1QkVFNzhGOUM0QTZEQjQ4RkM2NUMzQ0QKLToxMDk1MzAwMEYxOTdFNkFCRkZFNUE3RTFGOUE5NjA3RUE4NTc3MkYyQzMKLToxMDk1NDAwMDgzOTdFRTVFRkUxODIyNjcwNEJGRkMyRjFGRkM2REYwQjAKLToxMDk1NTAwMDAxQ0M2NEM0MkVDRkFGNTc3M0Q4Nzc2NDlGMDYxMjQwRjYKLToxMDk1NjAwMEY2OUQxRkVEMzQ0NzdCNzU3MjJBNjlFNkQwOUY1N0Y5NDcKLToxMDk1NzAwMEU2NkY5NTU5M0Y4MTUyRThDMDc4Njg0MEM5RTNFNzk1QTYKLToxMDk1ODAwMEY5M0UyNUEwRjFFRkMxNkE5M0VDQjI2MjMwQTZDQjYzM0QKLToxMDk1OTAwMDAwQUU3OTZDNUVGOTMyRjZGRUU3NDIxRjc2NUMwODk2MDMKLToxMDk1QTAwMEM0RkExQjM3NDE0REUyM0VBNkI4REFCRERGN0I0NkU2ODIKLToxMDk1QjAwMEZCMThGQkI5RTk4NzkxMjZGQzBFQTUzMzQ3OTgzNzhGMzYKLToxMDk1QzAwMEQ3QzgxMzY3MzdGREM2NjBDRjBCNjY2RjU5Q0JERTg2RjEKLToxMDk1RDAwMEFBOTMxOUYyMDE5NTk2OTI3RDlBMEMxOUQ0QUY1OTk3RDYKLToxMDk1RTAwMEI2N0NBNTE4NDc4MzM4REE4OTcyRDg4NDI0MUI2N0FFMDUKLToxMDk1RjAwMENGRkMwNUNFOUJEOTQ3RkYyMUNGQ0FEQTNEOUJDNEYzRjAKLToxMDk2MDAwMDQ3NjIxRDVFRTQzMzdGMjlFQTNEM0Y1QzNEN0JEQzExMTAKLToxMDk2MTAwMEU5MDU0OTRCRTJGRUE5Rjg4MzBDNDQ3RjY5REM2NTNGMEMKLToxMDk2MjAwMEQ5RjM1Mzk0ODQ5OUM4NjE2RkZDNEVFMDRCRDJFMzRENUIKLToxMDk2MzAwMERDMEZBMjAyQ0E4NzdDRjUwRkNBQjZGRkM5NzJFRDA3MUMKLToxMDk2NDAwMDhCQTEzRjIzMjMxQzMxMUU2RjgyNjMxNzE5MTc0RTFERjgKLToxMDk2NTAwMDBBODdBQTI0OTIzODBFQzZBQjM3QjM3MURBQzc3Q0M2MjQKLToxMDk2NjAwMDQ4M0FDNkY5NDhFNjdFMkEyOTY2MTIzQ0FBQ0VFMTUxNUMKLToxMDk2NzAwMDk1Qjg5OUM4QzE0NzAzMDIxRUJCMUYzQjZFMjZDNUZBQTkKLToxMDk2ODAwMEExMkY5Qzg1NkY2RDMwRDE4NEZCMjU2QjhDNEE3ODZBNDUKLToxMDk2OTAwMDhGQjhFREFGMTkwQUVGQTc1QTNDREJGREI5RUQ0MzgwNTcKLToxMDk2QTAwMDU2QkUxRjFFNTdBNzYxRkY2RDc1MEQxQURBRDc4QzFEQTgKLToxMDk2QjAwMDY4QkZEMjFFNUU1MjNDOUNCREJENUVEOEJGREQyODBGODgKLToxMDk2QzAwMDAzMTgwRkQ3ODVCQzhBRDFCMzNEQkNBRDExRDdDMUQxMkEKLToxMDk2RDAwMDVBODY4N0NBRkNGRDQ0RTJFRUI4NkU1MTREQzgxM0M3RTYKLToxMDk2RTAwMDREMTM5QzQxQTNDNDEzRUY5REUwNkFFNzFGQTdGOEVDNUMKLToxMDk2RjAwMEI4MzY0ODIzQzNERjIxRTBCN0VCNzUyQTI5NERDRjg5NUYKLToxMDk3MDAwMDI3M0VCRTVEMEVDNERDRjBGRUY5RjBDN0RCMTdGOTdCMjcKLToxMDk3MTAwMEY1NUM3MDlEMkFCQ0U1OEJDM0RBNEY3NUFDOUE0QTczMzEKLToxMDk3MjAwMDdGNEFDQ0I5MEUzRTJCRjg0QjFEQUJBNTQ4M0U2OUY5REMKLToxMDk3MzAwMEJFODc3OEZCNzA4MkZDNUI1QTM4NjE0MDU1MzYxRUFCQTEKLToxMDk3NDAwMEUxN0E3MEUwRTk1QUQxRUVENzhBNEZBQ0NCNTQwQ0ZERTgKLToxMDk3NTAwMDVDOTI5MTZBNDI3RUQyMkFEODNBOTI4NkI2QjM5RjQ5RTkKLToxMDk3NjAwMEQxQkVGM0MzRkZGNzEyQUQ5MzMyOERENjg5NjRCMDc1QzUKLToxMDk3NzAwMDk0NjMxQzQ5MzFBRjU2RDhGMzFERDlCQzQ2QzFGOENDMEYKLToxMDk3ODAwMDQ3NzIzMkQ3N0E1OTIxRTBEMTE2MjcwQ0FEOEE0Mjc4MzgKLToxMDk3OTAwMDNDREZDMzAzQzczQTg1RUI4MzQzMzZGQzU2OEFGQzU2NEQKLToxMDk3QTAwMDg1QzJCRkE2NDBGOEVENzExOEZDRUQwMkZFQjVDM0MxM0QKLToxMDk3QjAwMERGMjZFMDI5MDFBMzg1N0M5OTA2OTdCMzAwMTcxQUNFMEUKLToxMDk3QzAwMEJDOEIzN0M0RjgyNTQyNEUzMTRDMTFEREVDRUZGRjI1NDAKLToxMDk3RDAwMEZBMjk3NDNFMUIwNTlDMjNDREU3OEQyQzNERUVDNTc5RkYKLToxMDk3RTAwMEIwRjlEQzg3RjNDQTM3OUY3QjA0MUM2RjI4NUNDRjY4MTUKLToxMDk3RjAwMDg5ODQxMUFCMjI1NTlGOTNBRjlFMTA3MEY0MkIyMjhFNUIKLToxMDk4MDAwMDY2NUQzQjJBQkVGQUQ3MDJFN0YxNDQ5NjJFOEYwOUJBNkQKLToxMDk4MTAwMEVDMTg2RTFFOEY4QTc5RjRDODMwRjcwREY0MzM5RTJFNDMKLToxMDk4MjAwMEY0MEUyQzcxRDFFNUE4QzA0RjRGQzBBNkNCNzUyRUJBNEYKLToxMDk4MzAwMEZDNEVDQ0FCRDBGOTNDNTMyMDlGMURDREQyRTUzOTMxNDUKLToxMDk4NDAwMDlGRkRDM0NEQzc1MUZGNDU1MUZGMjU1MTlGRkNFNzQ3MDEKLToxMDk4NTAwMDk1MkI1QUFENUFGQzlFMzhBMENDQ0E4RUM3RUFCREVDRjcKLToxMDk4NjAwMEFDNzc2REZCMkNCQkRFQUJDODBGNTIyM0Q3ODNBQ0RFQ0QKLToxMDk4NzAwMDZCQ0U3QTYwNUREMDhBRjZEQjVBOEM4OTdFMDJFMDgxRkQKLToxMDk4ODAwMEY2QUYzNjg4NzY2RjUyQkJDNTgzRkRCRjI1RDYwN0I1QzgKLToxMDk4OTAwMDVCRDczRUJGRDUwQTUzQkQ3N0YwN0RDQjgyOEZFQzdBODQKLToxMDk4QTAwMEVGQkFFMTVENjFDMzcxODRFMDREMENDMkYxQkVCM0RFN0QKLToxMDk4QjAwMDEzQ0FFN0E5QkYyMTc5NDdCMTkyODJFQzFGN0Y2OTkyNTEKLToxMDk4QzAwMEYyRjc0QTIwRDI4M0ZFQzUwRTI1NDVGRTY0MEMzNkEwNzEKLToxMDk4RDAwMDFGNzI3NTIwNEVBOTJBMjNGOUEzQ0IyRUU2RUQ3NDQ1RkQKLToxMDk4RTAwMDIzN0Y2QTAwNTI3MDE3N0JCRkExNTRBMUY4Qzg2MjI1N0MKLToxMDk4RjAwMDE5RjFBMzFEMjEyNTJEMEFBRTgyN0U1OTBCRjYzRkQ2MDQKLToxMDk5MDAwMEEwRkMyRjFCOUVEQjhBQkVEODQ1RkQzMDc4QjBERjNCMjQKLToxMDk5MTAwMDhCQTIzQjkxQUYzNjRFNTIwREU0QUI5RDkzNkUyMEJGQjAKLToxMDk5MjAwMEY5NkQyRDNDN0ZGMEI2RjM1NURBNjc2RDdBMzk0MkZBNUUKLToxMDk5MzAwMDc3QUQxMkZGMkNENkI3NENENTQwM0ZGQUVBRDA0NzJGNkYKLToxMDk5NDAwMDJENjdFNUJFOTY2MjVEM0E4N0U2NDE3MDVCM0U0OEI0OUUKLToxMDk5NTAwMENENzRFNDIzMzJCODAzNzFDQUE3MjMzRkRDNkQ4RDNDN0MKLToxMDk5NjAwMEFFQzM3RUNBQjFGREVBMDU0NkJDREI0MEYxQzVFNDE4RDIKLToxMDk5NzAwMEZCREU1OUE3OTJGRDdBNUI0NUQ1N0MxQzZGNTM5RDQ2NTMKLToxMDk5ODAwMEY2QzZBNkM1NTUyREU0QzdBQjBCOTFCRkIyMjQ2QzQ4RjMKLToxMDk5OTAwMEU4Njc4RkNFNTE5OTAxQ0VDQUE1NDYwQkRBOUI5MUQ5QzMKLToxMDk5QTAwMDIxNDBCRjUzNDkwNTFGMkY3MjA2OTAxRkNBMEYzRDg5RTIKLToxMDk5QjAwMDZBRjY4Qzc2QTk5MDE5OEJGRDJEQzk3QzA5RUQ5OUJBQjAKLToxMDk5QzAwMDAwRjlFMUQ5QzRGNkQ3OEVBMzk0MzdGRTIzRkYwQzEwMUIKLToxMDk5RDAwMDFFRkY0NDE5MTBFRjM2N0RBMzNEODNFRDg3Q0Q2MzhDQzgKLToxMDk5RTAwMEE2MEJBQzk3MjlBQzVFQTQ0QjgxQ0M4QzAyRUFGNTE0OTMKLToxMDk5RjAwMDU4MkY1RDYwQkQwQ0FGMTc4MDBCODdDREU3ODMzOENGNDQKLToxMDlBMDAwMDIzRDREODFGOUVDN0U4QzgyQkFDRTRGNkJCRDM2RUYxQjUKLToxMDlBMTAwMDdCQkU4RjM2MkZGNDJBQkZDODBCOUQwMzczNzg1RUU4OTgKLToxMDlBMjAwMEYwRURFRDdDRDA5MUU2MEJFMENCQzIyOThGNUM3RjZEMzEKLToxMDlBMzAwMEYzRjA3RTYzRkZCODFCNjI5ODdGRDk1OUY2NTVGMUJDRUQKLToxMDlBNDAwMDkxM0ZDQkM1RkJGMjM1MzE5NDc3OURFNUUyN0JGOThERjMKLToxMDlBNTAwMDREQjlGNkFGNzdGQUI5MUNBRTgxQzRCMDc0MjgxMUYwRDUKLToxMDlBNjAwMDFGNjJCMDYzN0U0RjhEQzJFQTQ3RjJENzU3NEI3REMzNkEKLToxMDlBNzAwMEU2NTk2QThBRDU0MEVCNzZCMThGRDY2RDAwODUwMUFFODYKLToxMDlBODAwMDlCMEFCRThFRkQ5MDRBNTRGMzc4NTVCNERDQjE3RUZDM0YKLToxMDlBOTAwMEY1N0I2OEZERkNBMjVDMDZBOThFRTgxMzQ3M0M3QUY5QzkKLToxMDlBQTAwMEM0Q0IxNzAxNzA5NDJCNEY5RTRGQjZGRTk5RjhDNERGQkMKLToxMDlBQjAwMDI1MTdCNDdFRkMzRDA1RDY0QjE3NTgyRjUzNTgzREI1OUUKLToxMDlBQzAwMDRCMkE0OEFFQTgzRDA1RDY0QjE3NTgyRkMzRUJBRDlEOEEKLToxMDlBRDAwMEFCNzI3RDBFN0Y2OEM1NzhCRkZGMTM5QUFCQkNGNjEzREYKLToxMDlBRTAwMDIxRjdGN0IzQzNBRTcyQzcyQzc3N0I3NUI2QkI3REM3QzIKLToxMDlBRjAwMDZDNzc3Qjc1MEU2RjFGRUM4MDA1MThDRjJGNzQ5RDFDNDMKLToxMDlCMDAwMDNDQzE3NTUyQTMwRDVGM0Y1MjM3QzJCQUQyRjQyMEI2QTIKLToxMDlCMTAwMDJGNTEwQ0M4OTQ5MkJFNEEwQkJEOTUzMzFFN0U5QUNBMzMKLToxMDlCMjAwMEQ3N0Y5NTlGQzdDRjZGNTNGNDIwRUUyM0ZGRDZFNzI5NDkKLToxMDlCMzAwMEE5M0M5RkMwOUVFRjQ4RjBEQUYyRjdCN0IyQjBCN0YyOTcKLToxMDlCNDAwMEU0N0Q0MzhDOUY3RkYwNDMyODhFNzY4RUIxNTA2Qjc4RjYKLToxMDlCNTAwMDg1RTFEMUZGMkNDRjdCRjdGNkZCOEE5QTlDQTYzQUY2REIKLToxMDlCNjAwMEM1Q0MzRTgzQTRDMzBGNzM3RTk5QzJGMzZEMTgxREQwN0MKLToxMDlCNzAwMDFFNTIyMUQxNThDOUZBNkJBQkYwOTEzREEyODQ0N0QwNTcKLToxMDlCODAwMDFCMTUwRUI5OTUyMzJGMkZFQjk3MDIxM0NGNTNEMDI3MTgKLToxMDlCOTAwMDAzNjBGRTlCN0NEQzUwMUMwOEVFMDhGNEQxNjZCQTE4MEEKLToxMDlCQTAwMDUzRTU0RTA3MTgwMzg2QzQ5M0JFRTIxMkNGMTNBQ0Q3MTkKLToxMDlCQjAwMDUxOUU5NTA2NEY3NUJGOTc1MUJGOTI3OTFCMUMyRjFBNjYKLToxMDlCQzAwMDQ1QkY0QTFGRTVDQjlDRjI3RTQ3ODAzNzA4Nzc1M0JGREQKLToxMDlCRDAwMDZDOTc1NDdBN0M2Q0I2NUY3RjJDNDUyRjMxNEY1Njc2NEMKLToxMDlCRTAwMEU0Q0JFMUI5MDhDQTM3RjFDNTMzOTRERjMwMjE0QUZCMzEKLToxMDlCRjAwMEIyQjVBNUQ3QjlGMkMxRkY1OUFENzJGOTg3NTRCREUzMkIKLToxMDlDMDAwMDVBMDlFM0JBMTU1NzlCN0RDM0YwNzkzMzEzNTdFNEY3MkMKLToxMDlDMTAwMEFDNTg2RUY2RDVFNEFGMzc5OEE3OEZGOTlFMzlENjQxODgKLToxMDlDMjAwMDg3OUE0Q0EzRkQ2RTREMEVGM0ZEQkM5MjIyN0Y2M0E3NzUKLToxMDlDMzAwMDU0MzIxREYzMkRFQzdBNEEwNTkzQjQwQ0FFQzg0Q0QzQzQKLToxMDlDNDAwMEMyRkQ1RUU3NTg1RjFDRUQ1NDA1RDZFRjkzQ0U2MkVEODIKLToxMDlDNTAwMEU0QzU3MUE3RkZEMkZCNTQyQTk0Qjc5REYzQjk1RDY1QTMKLToxMDlDNjAwMDdBMTJFMTE0N0FCMjZEMDQ3RTFGRDFFRTUxRTNDOTVDMjEKLToxMDlDNzAwMDdFRDE2RkFCN0M1RkVCMEZFNUZFREUxNzZBNzg0MDlEMEYKLToxMDlDODAwMDM1MTQ2RjhGMjE3RTcxN0YzQjA2QkFBNEZGQzNEOTg3M0QKLToxMDlDOTAwMEYyQTUyQUY2QkM4NDc4NTg1QkI2MjgzNkRDN0NEOTA2NTcKLToxMDlDQTAwMEVBRjAyMDVEMTg4OTdGMTYzMjFGNDE3OTMwMEMxQzNGODUKLToxMDlDQjAwMENDMDUwNzg0MEJGMzdGRUIwQkUzQzQ4NzgzRjY1MjI5QjMKLToxMDlDQzAwMDg4RkQ5ODE5OTUxOERGODcwNDU3REUzMjczNzMwNkNGMjUKLToxMDlDRDAwMDQzRjg5Nzg2NERBNDlGNkM2RTAxRjQ1N0RCNzY5MzZDMjYKLToxMDlDRTAwMDg2NUVGNTExM0RFQkI5RkQ1NEMzRUQyMTkzRkRDMTc5QkQKLToxMDlDRjAwMDQ0RUI4N0I3QUI2NTRGRjkzOUQ1NkQwRkI1MzVFRjAwM0MKLToxMDlEMDAwMDY3OUU5QkY3NUM4NUZENEM4NzFBNUVDQzhEOEZDMkY2RjMKLToxMDlEMTAwMEMzQjczMzdFQzEzQ0ZCOERDRDFBMjIwNTdBOUE3NTJBRDIKLToxMDlEMjAwMDZGNjg4RTUxNzk3REIzNDFDRkY2RTYxQTdBREU4QzREOUQKLToxMDlEMzAwMEU3RTJGOUE3NTQ1NzI1QzM1QjU3RUM4MUQ4RTVBQ0NBRDUKLToxMDlENDAwMEVEMjgzQjI4OEZFRkRFMDU2ODJGNzcwRjk2RDkzNjkwRTgKLToxMDlENTAwMEMxREQzRDA5Nzg1RTlGN0FFQjAyRENFNzc3MDc0MUY4QzkKLToxMDlENjAwMDE1REExNkEwNUQ5RDJEREZEMTM2MUZDQkMyQ0YxMEVBQ0MKLToxMDlENzAwMEJDNkYwMUVFRjc2RjE3RjkwRkEwOThEQTI1MEVCRDc3Q0IKLToxMDlEODAwMDVBQzA0RkZDNDc3QjU3NkE2RkI1NjE3RjQxNDU5NEUxRUMKLToxMDlEOTAwMDkxMDVFRTMyOTgwODRGNTBFM0U1MDU4MTZERDQzRjg5NzcKLToxMDlEQTAwMDAwMzZERUE3MDMzRkUwRTM0RDExRjk2REI1NEI0NkMwMjkKLToxMDlEQjAwMDIzRjdFRjVCQUFDMUZENURCNTI1MTQzRjUyRTM3MTc0MzMKLToxMDlEQzAwMEJGQzJFRDYzMDREQzA1RjYwMzRBOTJFQjNCNzE4RTJGQjQKLToxMDlERDAwMEZGQkExOTQxQUYwOTM4NDZBMjNGNDMwN0Y5RDFFREYzNjUKLToxMDlERTAwMDY5Q0EwQkI5RjVGNEE5MUVGNzc2RkZFOEYwQTJENkY1MUIKLToxMDlERjAwMDVCNzg4NkVEMDkzNTM5MjdDMERBNDdDQ0RFNEMyNTJCNTgKLToxMDlFMDAwMDQ3MTc2NzJDNUFCRTA1OEUzQjM2NjBFNzM5MjY2OUZEMzkKLToxMDlFMTAwMERCNzg1Njc0NkU3N0FDRjBEMEQxNUZDQUUzNzU0MTcxRDAKLToxMDlFMjAwMEZFQTQ1MDc4OTNBQTE4NDdGNDAzMEYzNzk0MEY2N0FGMzYKLToxMDlFMzAwMDk1MjU3QzY4ODQwRENBOEJCMThEMjFFMTlDRTFFNTMxQ0IKLToxMDlFNDAwMDY2ODlBQjVDNUMzN0MxNTUzRjEyQUY3MjdERjdFQjFGODMKLToxMDlFNTAwMDc3N0QzRjUxM0E1REUyOTlDN0E3ODRERDY4OTdDRkY1REEKLToxMDlFNjAwMENFQjNDMDdFMEYxNjI3NTYwNTcwREQzNDQwNEQ4QUUxMTMKLToxMDlFNzAwMEY1Q0UyRjNDNDRGODBGMERBRUQzODVFRDY2MDVFNTgzOTYKLToxMDlFODAwMDhCNzUzRDhGOTc3NUZCN0I1REJCNTlDRkNBODZGRDdEN0EKLToxMDlFOTAwMDA2MkY5QkY2RjczOEFGNkZEOURGQTdGMkVGMjhGNzU5RjcKLToxMDlFQTAwMEY5NkI5RDY3QjQ1QkY4MUQ1QUM5NkYwQjE1Mjk1OEUyMTEKLToxMDlFQjAwMEEwQ0ZEOEYxMERBRDA4REZGOENCRDIzMThCQkRFRkZFQ0UKLToxMDlFQzAwMDUwRTZGMjAwN0E2MkNFN0E3NzZBREMwRkZEQ0M5NDNCRTIKLToxMDlFRDAwMDYyRThBRjVDNzdFNjQzMzEyMDc5MjdFNThDMDdGRTNDRUEKLToxMDlFRTAwMEMwRjNDNUNBNDI4OTlFMDBBRDc3QjNCRjk4RjFFMUExMjYKLToxMDlFRjAwMDg3NjQ4M0VCMjFFNTM1RDQ4NzNFOEJFN0UzQUIxMERGNDYKLToxMDlGMDAwMDY3QTI1RDU0QzNGREQ1MjFGMTlERTg1ODk5QUQzRjQ4NDYKLToxMDlGMTAwMDU3NEZGOUVGMzRBRUQ3N0Y4NzQ5MUIwQ0NFRUYxNTlCMTcKLToxMDlGMjAwMEY3RDBCODkwOTYxQUQ5N0FBRkIwQTAxRkNGMUY4MUIwRTIKLToxMDlGMzAwMEZCMjZGMkE2NTA5QTQ4OTM5RjZGMTJDM0E3Q0NCRTRGNDAKLToxMDlGNDAwMEJFQjhCRkM1Q0Y3MDZENUNBNkZCNzA4OTU0MkQ4RkZCNkEKLToxMDlGNTAwMDQ4QzAwRERBOTE2M0E1RTNFQ0Y5M0RBNDE3Q0FFMzlCNzEKLToxMDlGNjAwMDUyODBGQTdCRUQ5OTBGMzUyMTVFMDI5OTdGMDI4M0UxRTEKLToxMDlGNzAwMEVEMUYyN0E1QzA0MEZGNkY4MEMzMTVCOEFDMDc0ODNFNTIKLToxMDlGODAwMDU3RjcxMDlFQkRGODVBMzc4OEY3QjQwQkVGM0YwOTcwQUEKLToxMDlGOTAwMDdGN0UyQ0M5REIwREQ2NTM1OEJEQTk0M0VCNzUwNzdCREIKLToxMDlGQTAwMEU2QUI2OEJGNERFMTc4RjQ4RUYzNUU0MDEyRTc3NkRERjQKLToxMDlGQjAwMDcwRDhGRDdBRUJERjEyMTA3MTZEMkQ0REYxOEQ2N0NFRUIKLToxMDlGQzAwMEJDMjE4NjdFRURDRTI5OENGRUI1RjlFOTdGNEI4MEU3N0EKLToxMDlGRDAwMDVCMTlDNzZFMjJCOURCM0Q2OTIzQzUzM0Q3NTU2RjI2QTAKLToxMDlGRTAwMDdCRjIyOEIzMjNGMEZDNzQ3NzY1RUVGNjlEQ0QzQzNGMDEKLToxMDlGRjAwMEU2NUNCOEJCQjE4QUQxQTdGMzc5OTlGQ0I0REU3QURGMEQKLToxMEEwMDAwMDA5NTRCOUUyOEQ1QTg1N0IzRkM4RjhBRjBGRTVFODQ4OUYKLToxMEEwMTAwMEZDMjc0NzFFRTBFQjcyOTQ3Qzg3NjYyMTNGQ0Y1MEQ2MjkKLToxMEEwMjAwMDhFRjY4MDVGOTRFRjBFMUM2RjEzRkE5RkU0N0ZGOUYyQjcKLToxMEEwMzAwMDFFNzBFNjRCQkUyRkY4MjIxM0UwNzIyNjU4QzFGOUEzMUEKLToxMEEwNDAwMERCNkY0OTRFRkFDNUQ4RkJGOThFNzZGOUU4OTY4RjFGN0IKLToxMEEwNTAwMDFFMTdFQkUxN0QyNURFNDRDQTVGNDlFOUI5RTRCMzEyN0UKLToxMEEwNjAwMEZCRjQyRjE3M0FDRTdCQjUyQjY5NEQ0N0Y4NkIzNjRBNzgKLToxMEEwNzAwMDRFQkJGNjFCNjYzMkE0MzlGNjI3QTFEODA1QkY1Qzg4MTMKLToxMEEwODAwMEZCMUYyNTlFNzM5RkZFMjlEMzhDNkE2Q0ZDOUI5QjYxRjIKLToxMEEwOTAwMDQ2MzU5RTRCNTBBQzAwRDZCQjU5QzkzNEQyQkVBMkRBNkQKLToxMEEwQTAwMDQ3RkVGMjc1MTVEN0VEQzUzQzJCQUJENjE3Qzc2QTZEQzkKLToxMEEwQjAwMDE1QkIxQUFCMENFNDk3NkQ5NDY3RkFBNkJFMjQ4NkZEMTcKLToxMEEwQzAwMDA0NjJFQThDRUFCMTk0REY5REMwNzk4NzZCNTlCRjBFQjgKLToxMEEwRDAwMDdBREJFM0RFMkRGOEY2NUJCQTM5NTlFM0YyRTAzNEVERDIKLToxMEEwRTAwMDJGMjAwRkRFODc3ODhDMUI1OTBDQ0YzOUY2NTc0M0YxQTAKLToxMEEwRjAwMENDRjMwNDNBMkI4NkUwNzk4RUU2RTBFQjAwRTI3OTA2QjkKLToxMEExMDAwMEM5RkI5Q0ZFMEI4NkU3QjM1RDc4MDY4NkU3QTk1OTNDNDAKLToxMEExMTAwMDc3NTc3MDNDNzdENjZDRUVBQTcyRTJCOTY2RDdERTRBMDIKLToxMEExMjAwMDAzQzdFNzc4N0U0OEUzRTc3MzQzODg2NzA3OUM1RTNDOTQKLToxMEExMzAwMDg3MjU1QkZGN0NBQzFERjlENkNCRjcwQ0VGN0Y4RkYwNEEKLToxMEExNDAwMEQ4RUYzRjBBRkM4MkVDRTFCMUUzMTMxNzZBRTQzRjQ5MjAKLToxMEExNTAwMEQxRkVFOTRFMjlBRjVFQkE0NDJCNDAyRjc1OEE3NTc0NDMKLToxMEExNjAwMEE3QzAzRkVCRkYwQkQ0N0ZBOUU4REZENkI3NDIxRkZFQTUKLToxMEExNzAwMDgzRjY2RjBCNTAxRkIyN0FDQkE4OUU5RUEyN0RGMDYwMzMKLToxMEExODAwMDNEMEI4NkQ1QTNBQ0REOTVDNDQ3NjE0RkZGMjY4QzRBQjUKLToxMEExOTAwMDFGQjM3RUFFQTM3RTM0Q0ZGODA2OUM5NDlFNjdGRERFOEYKLToxMEExQTAwMDQ0RkQyQTlFN0U0RkIxM0RDMUM2RTkyNkZDODEwNzBGQzIKLToxMEExQjAwMDdGNjYzQjI2OTZGNEYwODNEMkUzOTI3QjM2M0Y5NDJGNjIKLToxMEExQzAwMDc3RDdDQkFGRDc3QUI4NUUxQjZBRDcxMERGRkVCQzczRTgKLToxMEExRDAwMENGNkVEQzI3QkRBOTlCREY0NkJDOEU3NjFERDg3NjYwOEUKLToxMEExRTAwMDU5MjhCOTRERTM3NjIwOUQ4M0IwQkU1MTk0NkU2MzZEQkUKLToxMEExRjAwMDk1RTMzRDUxMUU3Rjc3RUJBM0YxQjYzRDU0Q0RGNTQwN0QKLToxMEEyMDAwMDcwOTQ3QTY5OUZCMEQ3M0FDNjMwMTk1NUNDOUVGRTQ0RjcKLToxMEEyMTAwMDUzMkUzRkMzMzM5QTlEQjdFNkI2OUI3RjgzNzMyNDNGOEIKLToxMEEyMjAwMDUxODJGQzZCRURCMUNGRUNFODYzQjQzMzFCN0IyMDk3MUMKLToxMEEyMzAwMDlDNEY4NjkyM0ZDN0Y5QTlCQTY1OTI3QTE1RkU5MTdDMjgKLToxMEEyNDAwMEZEOTYyNkFDOUQ3QjY3OTJEQ0VEQzdCQzQ2MTA3MjE4NkMKLToxMEEyNTAwMDRENkJGNEM3NDUxOURFMEU2OUU0QzI4OEEzN0ZBREVDRUYKLToxMEEyNjAwMDYyNkIzRUNBQjEwQUM2MkY1ODdGNUNEMzNFMjk5OTJCMzgKLToxMEEyNzAwMDNFNkVFRjdGMTA4ODFDRkI5NzcxOUY5QjlEQTQ3Q0I4NUUKLToxMEEyODAwMEM1MzM0N0Q4REZCNEQ4RjZFQjZGNzE1RTg3RDQ5RTBCMjkKLToxMEEyOTAwMEE2MzhGMDZFRDNFOTBFMjk3MUUxNzkyODRGRTc3MTNBQkIKLToxMEEyQTAwMDE1OEY5MjRFMDM4MjRFQjA5OEU3QTE5RTdCRUM1QzhEOTkKLToxMEEyQjAwMEZDOEIxMTVGMDJGREYwNDE3RjhGNUVFMkUwQTM3MTNFRjcKLToxMEEyQzAwMDQ4RjY4RTAyRkU3QUU4REY3RDFDRjc3RjYxMUZFRDc3OEUKLToxMEEyRDAwMEJCQzNDQkJFODNGN0VGNThCQTFBOUY2MjY0QzdFRDY2NjMKLToxMEEyRTAwMEZBQkVDNEExN0ZCQ0ZFQUFDMTdERjRFMkMyRjI2NUE3OUEKLToxMEEyRjAwMDU4NzMyOERFOUZCRDNGQzg5RDdGQzAxOEFCMDZGMzg2MEMKLToxMEEzMDAwMDU2Q0JEQzdGN0U2N0QxRDcyODBGNjE4RDE1RDAwM0E1OTIKLToxMEEzMTAwMEE0QzdDOEZFNUIyN0YyRDkzQTQ1M0VEQjVBOTFDRkU2ODcKLToxMEEzMjAwMEI3NTY2RkM1RkE5QjAwMTJFODk3NkM5OTk3QTI3ODdGOTEKLToxMEEzMzAwMDU0RDFGNEQ2MzhDMjkxOUE4MzdBMjI1QTZBQUZDRjFGODkKLToxMEEzNDAwMDJGQzRGNTM5NThCNkJFRDFERUMwRTYxQjhERDlFNThERDgKLToxMEEzNTAwMDY0QkZCNUI3NzA3OUYzRDlFMDBCMEJBRDdBNjRDNTNFMzUKLToxMEEzNjAwMEEyQzdBNkJBMjVDNTMwOEMzRjMyNUNFQkNFOUYwQjU1RjkKLToxMEEzNzAwMDg3NUM2NUFEQTJDNDU1NTY0QjI3MEMxQkI3RjgxOUZBN0MKLToxMEEzODAwMDg5NjZFMTdDRkEyMDhFNzBFNkM5MTc5RTEyRTQ3NkI2RTMKLToxMEEzOTAwMDJDNEZFQkNGNjBCRUMxRDk2QTdDQjM4MUU3QThERDc5RDEKLToxMEEzQTAwMDlDRUQ0MTZFMEYzRThBMEUyMThBRTMwQUJFQThFMzcxM0UKLToxMEEzQjAwMEQ1QTJCOTU1QkQxODA3ODIzMTlDMkYzMDRGRDBDOTBGOTcKLToxMEEzQzAwMEY5RjhFMkFGOEQxRjVGRDFFMTE4RTY1RERDRDIxQTA1MjYKLToxMEEzRDAwMENDNzNCOTY1RUVBRkUyMTkwM0U1NkE1RjBDRjMzM0RBQ0IKLToxMEEzRTAwMDk4MjQ2OTY1REYzN0NDRkQ5NTkxQ0I5RjdDNDA0QjJFM0YKLToxMEEzRjAwMDBGMjJGRUMyMDlCMkJGMjIzMzkzRjRGQzZCQ0Y2QjI0NTEKLToxMEE0MDAwMDdBREUxOUU0N0E2RThBQTBBNzgyRjQ5Qzk5QTVFN0JBNEQKLToxMEE0MTAwMDNBNDZDRjk5RDk3NUJFNEVFOUQxMEFBMUU3RjkzODdFRkYKLToxMEE0MjAwMDE5Q0FBMUZGQTY3RERCQ0Q3NUJFNDY5NDQzMDZGNDUyNDIKLToxMEE0MzAwMEZFRUQ4NjVBOUYwRkZCRkY2QkUxQzU4NjJCM0M5N0M5NEIKLToxMEE0NDAwMDQ3QTI1MzI2ODE3QTYxNDM1Q0YxQTExQ0Y5OUJFM0MzQzcKLToxMEE0NTAwMDhGRkFFODdEMDE3Q0Y4QzM1QzdDQjg1Q0QwNDMyRURBQ0YKLToxMEE0NjAwMEQ3OTQyQkVGNkU0QTUwNzJFMTY1M0REMjhCRTNBNTkxRjQKLToxMEE0NzAwMEUzQzVGNzU3QzFDQkEwQkVEMDkyMkI5MTZGQUU4OEE5OTAKLToxMEE0ODAwMEI0RUY1NjRBQkEzQTI4NUVDNEY0MUVDNjFCNTZDOEE2OTQKLToxMEE0OTAwMDgxRjEyNkY4OTY5RkRGQzc4NDdBREJBMTVGRkUxODBDNTYKLToxMEE0QTAwMDcyRkI0NDVFQkY4OEUyMTg2QzZBQjgyRjYzRTU4RjBEQkIKLToxMEE0QjAwMDFCMEY0REZCRkI5REY3OTQ3OEYzMzI1RTBCQkFFMzEwNTQKLToxMEE0QzAwMDQ3MkE5NjE0MjNCREYyRjVGNzc2RjM1RTFEQ0ZENURBNTEKLToxMEE0RDAwMEY5MTlERUVGMkI2NDQ4RTUzQUI3Mjg4NTM0NjE2N0Y2NTEKLToxMEE0RTAwMEFBODQ4NzFCOTlBRTlEODZGOEY4RDg0MjNDOUZEOTU5MUIKLToxMEE0RjAwMEQxM0E4RUVDMTg3MUFFNjFDNTk2Njc3NUM1MDFFNzBBNTEKLToxMEE1MDAwMDg1QTlCRkU5NDNFNzYzRTM3NzA1QUFDOTEyNDdGQkY0Q0UKLToxMEE1MTAwMDVFNTc3QjZGQkJDMUZFNDQ3QjY2QjdGOTQzMEMzRTUzNkQKLToxMEE1MjAwMDQ5RURDNTc4QjM3RDdFNDNERDMyM0Y0MzZBMzMwRkRDQUUKLToxMEE1MzAwMDhDOEUyNzA1NzdBMUU3Mzg4RTNDRDBENjgxRkI2REI0OTEKLToxMEE1NDAwMEJGM0VDMUY4RTRCNzhGQzhGMTU2RjZGNThBQkJDRjU4QzUKLToxMEE1NTAwMDg4RTc1QTBGMDFFNzE3OUIzRTZGM0REMDM2MkUxNzVGRjUKLToxMEE1NjAwMEU0QTNDRjc5QTEyMDg3RTcxNEYzRDc1OTIxMEY3RkY1MTIKLToxMEE1NzAwMDVFNTQ5QzgxNTNDRjVGOEJGM0YxOTdDMENGRTE1RThFMjkKLToxMEE1ODAwMDBGQjg2QjZDNEUzQUU1OUJDRjIwOURFQzc2ODJDRkJDMkEKLToxMEE1OTAwMEVERjNCNTYzN0M5NUUwN0M5NTg5OUU1RDA4NUYwOTc4NTUKLToxMEE1QTAwMDZERkE5RDJDQkMyM0YxNTU2MDhENkNFMDc5QUU0QTI1ODcKLToxMEE1QjAwMDQxNzJCM0IzRjQzQTRCRENFQjQ4Rjk5RTcyQ0ZCNDhDRTIKLToxMEE1QzAwMEI4RDc0QUU0QjU0MzA2RUQ4OTQwQTk0OTc2NzQ0OERDMUEKLToxMEE1RDAwMENGQTM1NUJCRTVBNjEyNzM5RjlCODgzNTI1MzI3NkJGNjYKLToxMEE1RTAwMEU4QkYwQ0FDNTE2OURDQzFGODcxMTgzMkMxMjg5Njc5MEEKLToxMEE1RjAwMDlDMTRDNTFGRUUyQjAyRjA0REYyN0JCMjc2MzlGRDlFMDYKLToxMEE2MDAwMEY2NTMxMUY5NkE5OENCNEJGN0IyQzFFNzQ3Qzg2RjcxOUYKLToxMEE2MTAwMDhGMTNCQjc4RjhGQzFBNkY3RDA4MkJDNjIxMDdERUYzNzkKLToxMEE2MjAwMEI3NTNFMDkwNjM5RkIzNDFEQzJCNkFFM0RGRENCMjk0NjUKLToxMEE2MzAwMEYyQ0E4M0UwOEJEM0ZFMjBENjYxRTFCRUFGNDNBQ0U3MjQKLToxMEE2NDAwMDRFN0NDRUM1NzNCQ0QzNzVEQUFGNTVGMDc4OEIyNTdEQzMKLToxMEE2NTAwMDk5RkMwQ0Y2QjkzMzdCM0NGQkJDOTk1RDZGMjRGQUFGRDcKLToxMEE2NjAwMEM2RjU5NDYzN0RFRjBBNzE3RDNBRjBCNUQ0N0ZFMzNFODEKLToxMEE2NzAwMEM0RkExMzE4NzgwRkM1RTNDRDFGNTA5Q0ZBOUNDQzVCMkQKLToxMEE2ODAwMDMyRkFGNzlGMDk4REEzN0VDRUU5RUY5MzE3MzhENkU1MEUKLToxMEE2OTAwMDM5RTIxQzA3NDBBRjlDRUI5Qzk3REYwQUVDNDI3RTc4QzYKLToxMEE2QTAwMEVBMzBERjhGM0Q3NUY4MDhEOUUxNEZGRERFOTc0NkJFRjEKLToxMEE2QjAwMDdCRUE4M0UxRjMxRTFFMTdGQjIyQkJERUUzQkZFN0Y2NTYKLToxMEE2QzAwMEQ5RTM0QTZGNTEyRUZCMkUzQjdFOUFFRjA3MEZCQkY5NjEKLToxMEE2RDAwMDE1OTQ1RTE5Rjk2NUUwQTY3RDMyRkEwNzFFNkZENkE0QkYKLToxMEE2RTAwMEQ3OTlGQzk5MjdFNjc5Q0VFMTNFMTlGNzREMjNDRDZCM0EKLToxMEE2RjAwMEFCODdCRUY2M0NCN0Q2NzM3Qjc0NkJGRDkxMTBGQUZGNDcKLToxMEE3MDAwMEI3M0VDMUU3N0JCNDlFOUY4RkNEMDdFRkFFNjY5RURGNUQKLToxMEE3MTAwMEIxRjU4OURDRjg2ODk4QzdGN0M3MEQ3RUEzMzRBNzVENEIKLToxMEE3MjAwMEVCMzk2N0I1NDA5M0RERTdCQjRFMzE3Q0JCRUJCOURENjAKLToxMEE3MzAwMEI1NUI4OTg3NEYwNDlFQkNFQkJCQUVBNzExREQwODUxMEEKLToxMEE3NDAwMDQ4MzZDRTk3MDhCREZCNUQ3RTkyMDM1RjZGRjkzMkU2MTcKLToxMEE3NTAwMDZCMkMwRDlCMTJFRTY1QTEyRkYzMjQ5QjU3ODlBOTI1MjUKLToxMEE3NjAwMEYwREU5OEUyRkExRTY5MzJFNjc3QzQ3ODFFRjkzN0FGNTgKLToxMEE3NzAwMDdFMkRGMzMyMkJERkRDNTQ0NDY1NUQzNzlFNUI4NEY4MUQKLToxMEE3ODAwMDI4RDVDOTlGNzIzMzdBNUM0ODQwN0Y3MzJERTYyN0QwNjUKLToxMEE3OTAwMDdBNjRFNUMwQ0QzREU3QTEzRjRCMDEyRTJGOThDNTZCRjQKLToxMEE3QTAwMDI4RTNFODVFM0Y3MkQyRTQ5MzFCRUM0NzNBMUVDOEI2M0EKLToxMEE3QjAwMENCM0I0RjRGREU2RDAwOTYwQzJGQzc5NkYzRkExNkZCN0UKLToxMEE3QzAwMDgzNzJBOEM0OTM2N0EyMkY3NEU3QTU0NDNERkQ0RjQ1NEIKLToxMEE3RDAwMDVCQjVBQzgwQkNGMjkzMUM2NzBDNkNEMzBDREM2N0Q3MDgKLToxMEE3RTAwMEZBRjQzNEQ2MDc2MzBDRTYwRDg2MUI5OTgxQzRFODM5NjgKLToxMEE3RjAwMDQ2MDcwOUNERTU5MUYwQkUwRUEwOTFGQkJGMzNFMDNDQ0EKLToxMEE4MDAwMEE3RDM1MEM0RTVENTg0QUI2RTk3NzA5RjcxMzRDRUI4OTIKLToxMEE4MTAwMDYyMUE5NkRGQ0M5OTdGRDUyRUU0Qzc2MDU5REY0NUYyRTYKLToxMEE4MjAwMEI0MDM3QUY3NTI1QzIwRTkyMzNCRkNFNkRBRDYzMUNFNUEKLToxMEE4MzAwMEY2NEI4QjI0REIxRjI4RTgwRjg2MzIzQjRCN0YzNjNGREQKLToxMEE4NDAwMDMzNzhENjVGOEVGRUIxRTU2RUJDOEY5NjJFRDcxNDcxMkQKLToxMEE4NTAwMDc5MzUxMkZENEY3NjFDOUI2RTQzRDc0NzhCQTBEQjAzRTcKLToxMEE4NjAwMDE0MTdFREFFMTk1RUVFMEZBNURCMzZEMjc3RTFEQURDMTgKLToxMEE4NzAwMEY5QkFENzE1NDkyRTc5NkMzRjM1NDg0MTlDRjE4OTJDOUUKLToxMEE4ODAwMEVFNjc5NkM3Q0Y2RUJBN0YxOEY5MjMzQkVGNjc4NjZDRTkKLToxMEE4OTAwMDNGRTM4QzFFMTNFMzU2RTNBMUM3QzQ3M0RGOENBN0UzMjkKLToxMEE4QTAwMDE5NDBGRTM2MDFFRDI0NjYxRTExMUZDOTlFRkREQzQ2Q0YKLToxMEE4QjAwMEMxNDc0MTc4OUVEQUIzNTU2MEU5QTQ1NzUyQTAzQkYyRjQKLToxMEE4QzAwMDU0Q0U5M0MzNzFGNDVGQUNEM0MzNzQyRjEyQ0E0RjlFOUUKLToxMEE4RDAwMEJGQzNGM0ZDOEIzOTQ4MENCRkZEODBGMjJENTQyRTgzOEYKLToxMEE4RTAwMDg1N0VCRjdBMDFBRkM0RjgwRUYzRkIwRkJDNzUwMEY3OEQKLToxMEE4RjAwMDJCRTE5OTZFM0EyOTA3OEEyOEFGMkRFNDNEMjc3MkUwQjMKLToxMEE5MDAwMDlBNkI2ODdGRTNBMUUzNjhGM0ZFQkY1RjI0RUNGRjIyNEMKLToxMEE5MTAwMDA4OTNERDI0REFFN0NCREZCM0VEN0UxQkJGQzZCMTA4QjkKLToxMEE5MjAwMEU1RUQ3NDFDOTAwODFGNjU5MzEzRjdFM0ZFMEM3RTI1N0MKLToxMEE5MzAwMDAzQ0ZDQjA0MTNGM0Y2NTZGRjc0MTY3RDFGMUE1NzQ4NDYKLToxMEE5NDAwMDU0MjI1RERFM0E1MEE0Qjc1NjE2OTIyRjk5NDhCNkIwRkQKLToxMEE5NTAwMEZBQzY4MTQwQkNENTIwRDVFMkQzOTA4RTdEMTJEMTUxNkMKLToxMEE5NjAwMDFBQTc1MUJFRDZFQTdGRjdERjFGMTgyNjVGQ0I4RTNGQUUKLToxMEE5NzAwMDBFOTYxNThCRTI5QjVEQzY3NENEMjk0RkNBNDJDOTVGMDYKLToxMEE5ODAwMDE2MzlFM0Y2MjJBRUVCRjVBRjA3QzNFREIxNjc2MEY0MUQKLToxMEE5OTAwMEYxOEZEMkYxMjBFMkYyOUY1Rjg0RjY0QjE3QUUwMTlFNTkKLToxMEE5QTAwMDE3NDc3OTdBNURFNUJDRkM0NkQxOTQ0NTE4REZFOThBMDIKLToxMEE5QjAwMEYwNzI3MUY4Qzg3OTJEMjQ2NzEzRTRGRjVCQzMxODBFOTkKLToxMEE5QzAwMEYxMDg3QkZERTIxRTQ5NjNGQzg1QzNDODBCRUZGQ0Q3OTEKLToxMEE5RDAwMDJCRkIyODRGRkU5RUYwRkVGM0NGNDBGQUM0N0RFNDhGQTAKLToxMEE5RTAwMEJCRTdGQTZEQUVGQjkzREVENDFCREUyRkEyRjVBQUI3NTAKLToxMEE5RjAwMDYzN0M3QTYyRDJDRUQ3NzRDNzQ1MjZBMEQ2NjBGMzlCMUIKLToxMEFBMDAwMEM0MDhFMzY3NzgzOEVENjI2ODQ1QjZBOUJDQUNCNzFDRUEKLToxMEFBMTAwMEY3Qzk2QjRCQjc4REUxRTdGRDE3RUE4N0M4NkU5NzI5MzkKLToxMEFBMjAwMDNFOUQwRjVFQUY5RDlFNkZCRTc2QkNERERCRkVBRTA4MjkKLToxMEFBMzAwMEJGNDdENTFCMTdGM0ZBODMxRTQ0RkM5NjUxRkUyQzYwQ0EKLToxMEFBNDAwMEZFNkNBN0JGMkY2NzNDRUE4RDIyRUVENzZDQUY1ODk0RkYKLToxMEFBNTAwMEI4MUNFN0E1OTg3MzBGMzI3Q0RDNUIxQUE1N0Q5MEZGQ0MKLToxMEFBNjAwMEEyREE0QjdEMEU3QkMzQ0U2NzUzQzQ3RUNFNUY5QTIyQTMKLToxMEFBNzAwMEI5QTg2ODY2RDcxOTE4MkY3QTVFQzYxNTA1MTUzRDNCMkIKLToxMEFBODAwMDI1QjRFN0VERkIyMDEwQUQxNzRGRTVGM0M1NzkwNTgwNDAKLToxMEFBOTAwMERCQzU3ODVFRTFCODYzREUxMDczRjhDMTUwOUU4OEZEQjcKLToxMEFBQTAwMERCMjlBMEY3QjRGMEFDQTFGNDlEREZDNUYzRDA2MzU3NjgKLToxMEFBQjAwMEYwRjM0RDEzOTVEQ0Y0MUU3Rjk5RUVFM0YxQUY1MzRCQTkKLToxMEFBQzAwMEU3N0NFREYzQzUzREVGOEFBOEI0N0VBNkU4QUJGN0UyREMKLToxMEFBRDAwMDNENzcxRDU2NzExMkUzMzEwM0ZFNTQxN0NBQUIwREZGQ0IKLToxMEFBRTAwMEU4ODNDRDM0RkZEMUU5Mzc0NTRGRDAzRDdBMTUyOTdEMzQKLToxMEFBRjAwMDNBMkVFRjdDRURFRTQ4RUQwQTEyOUUyRDlFQ0ZFMEZENDIKLToxMEFCMDAwMDdFNzk5OEVCOUI5RTk0RUYzNkZDNkUzRTlEREFFOUM3MEEKLToxMEFCMTAwMDdENjc4Q0VGQUJFRDdENzgzMjk0QkMzQ0VDQjBDRjc1QUIKLToxMEFCMjAwMEQzMjIzRTlBOTJCQzk0RTRDMDQwNTk2MUY3MkYwQ0UyQzQKLToxMEFCMzAwMDJCNEYxRUYzMUQxMUFFOTdBNzE4QUI3OUJGOTM4NkY3NjUKLToxMEFCNDAwMENCREE3OEY5QTA0QjE2QkYxNzIxMTM0NDM4RkM4QzkxNEYKLToxMEFCNTAwMDEzQjgyRTZFRTQ3MkUyRUUzNUJCRThCRDcyNjNERjdDQTMKLToxMEFCNjAwMEZFQkRCRjA1RjVFQTFEM0VCODIyOTdERkE4MkRDMkUzNjIKLToxMEFCNzAwMDQxOTNDRENDM0FENDFCOTM1MzNFNDBGQkY0RjY4ODQxMkQKLToxMEFCODAwMEVGQzc1RkM2RjFENDM1MDlFMjM4RUM2OUQ4MUZGQkNGQjcKLToxMEFCOTAwMDlFNEE5NUY0RDJEODUyQTBGQjkyQzZBRTAxRDJEQjYzOTYKLToxMEFCQTAwMDZCMjA2REIwNzJEN0NFQjkzQkQxQkU1NUFCMjE4RUFFMDYKLToxMEFCQjAwMEVCREQ5NTM3NTg2ODBGNkNBQTAwMTNGNUI4RkY0NkI2NjEKLToxMEFCQzAwMEMwNTg3REQ1RjBBNTMxNTBCQzI5QjU4Q0VFNjk1OUNCNjQKLToxMEFCRDAwMEQ2MjU1MjYzQUREMTQwRjZDM0QxMTgyRjA3MkFGODM5RDQKLToxMEFCRTAwMDk4QUUzMzE1ODJDM0JFN0Y5Q0VDNEVBNjFGRkNCNUZEMEMKLToxMEFCRjAwMDI2NUVGRDY1QzAxNUQ0OEY3RjJFQTdBQjcxNTczRDlEOTYKLToxMEFDMDAwMDUzRUIxQUYzMTBERDRCNjM1RDAzM0NERTY5QzdBNTE1RkEKLToxMEFDMTAwMEM2NUY2QzlDRjYyQkY0OUNGRTk1MjNBMUU0Qjc5REZDQ0IKLToxMEFDMjAwMEMwRjg5MUU0NEMxN0U2MTNFNEMwNjc2Nzk4RTNGMzBFQUQKLToxMEFDMzAwMDIxRTcwNkZDRjAyOThBOTdCNEY4RTgzRTE3NkZGRDY1MTYKLToxMEFDNDAwMDAyRkY3NzVCNEJGRUUxMEMyM0FCNkZFQ0VGMDc4QjBDNDUKLToxMEFDNTAwMDk3N0ZBM0UyMDM5NUU2QjM0OEJFMTE3NEE0M0JCMzkzNzgKLToxMEFDNjAwMEU4RkUxN0JDMThGNDc0NUE5NjE3OTQzQkNFQjNEQzFCNUQKLToxMEFDNzAwMEVGODVDOTg4NjdEQjJFQUFFNUY2OEM3REVFOTFFMTIxOTAKLToxMEFDODAwMDczMEZGQkFFRDcwNUU4N0VEMUYxNERCOUVEMjNCNTQwOEEKLToxMEFDOTAwMEZCQThBQkM4RkM2OTE4RjMwRDQ0M0VGRkQ3OTcyRjIxRTIKLToxMEFDQTAwMDdEOUZFRkRFREFCQjIzNUNDRURGMjU1OTk1MUQ0ODlGRTMKLToxMEFDQjAwMDQ5RkNGRTE5NkZCRDgzQzI1RTY0RjYyMEYxQ0QyNjhCODAKLToxMEFDQzAwMERGQkJCNTg5NkQ3RDFFNDVCRUJBOUVERkYzQzdERUYzREYKLToxMEFDRDAwMDczMEUwNkQwNzlGMUQ4MERDQkI0NUNFQkQ1MUI1N0NFRjMKLToxMEFDRTAwMEI3RUU4MjZBNUYzMjU3QkNBNTU2RDBBRDI0QUVDRkY3MUYKLToxMEFDRjAwMEYxRTk4M0U5QjA0NzhCNkE4MUVFRkZEMjE5N0REMEY2ODYKLToxMEFEMDAwMEFEODA1RTRBQkFERkQ4NTg1Mjg5NzFBMTVCNkY1NDBEOEQKLToxMEFEMTAwMDdDN0Y1RjY1QUZCNTEwRTcyRDQxRUY4Mzk4MjNBM0Y0RTcKLToxMEFEMjAwMDlBNzgxRUJEMjIzRUNFRTg3NjlDRjcyRUFFNzg5NENFNjEKLToxMEFEMzAwMEMzREZGRTU0MDAwMjc1NzgzRkE5RTdGN0Q5MzhFOTIzNEQKLToxMEFENDAwMDY3RTk2Q0VCQUI3Q0YzMkJGNDc5MEJDMzk3RjNGNzgwREIKLToxMEFENTAwMDMwODgzMzM4OEYyMjBCMENCQTFGRDlFODI1M0JGNEE4NzIKLToxMEFENjAwMDE1NDRERDBBNDY3RDJGRDcyQkVEMjE3ODMwOEVGN0NDQTgKLToxMEFENzAwMEYyRjJBNkYwNTRDMEZCNjczNUE1OTdFQzc1NERBRkEyNzMKLToxMEFEODAwMDcyNTE3NUEyOUJFQ0YzNjlEQkY1NUNGQUUxNTM5MTRBRDEKLToxMEFEOTAwMDk3REYyNEU0ODk1MzY5QzkxQjlBQjg5RjU2ODUyOTM5REUKLToxMEFEQTAwMEQ2RDlDMTIyODVEQkQzQUMyOUM1NzNBREUxRTVFREM5QTgKLToxMEFEQjAwMEYyQzc5QjQyREZFOEQ5N0QzMkYxMDdDOTJFNDY4RjcwN0EKLToxMEFEQzAwMEM1QTJCNzY0Qzc3RDlDNjFFRkY5NjIyRjNEM0RFNTkzNTUKLToxMEFERDAwMEE1RTczQUE0QTcyM0JFQTBENTI3MzVBNDlGQzFFQzI0OUMKLToxMEFERTAwMEIyRkJFQjAxOUNGN0E2NkZEMjJDN0UwRjgzNjFGODJDOEYKLToxMEFERjAwMDA3N0VDQjg1RERBNzdDQTBEMDc5REJCQjk2NzZEMEZFMjUKLToxMEFFMDAwMDYzMkNFQjAzRjM3QUQ5MzNFN0JERDMwNzhCNzg1RTc4RjUKLToxMEFFMTAwMDU3NTE2MjQ5ODRGMjcyODFFRTE5NUUyN0U0QzY3OUYyRDUKLToxMEFFMjAwMENGODI5ODg3MTUwNEE2RTc5MDhGMTZGQkUwQzExQzc0QUIKLToxMEFFMzAwMDJEOEY3MDNDQTc0M0U2RTcyMkIzRjJDRkY3NzEyOUY3RDUKLToxMEFFNDAwMDdEQTI3NkZCODNDMjBGNTBCODFDRTZGMzlENjIwRUQwNDQKLToxMEFFNTAwMDc5RDI4MTlCMEFEM0RGMDM2QzZFRkJEMDJFNTdFMjVDNjQKLToxMEFFNjAwMDRGRjcxOUQwM0U5M0VFN0Y0QUEzREVERDE0NUI0Mjc4QTQKLToxMEFFNzAwMEJGMEZGNTI5REE1NkI1NUM0RkZBNTNEQzRGMEM4NjQ0MDgKLToxMEFFODAwMEY3Q0E4NkM0QkQxQkY3QTU4RTNDOEI3NkNGRDExQTA1QjkKLToxMEFFOTAwMDNEM0UxMEFDNDg1QUE4NUY4QkFCRkIyQzA5RjU2QzY5QTIKLToxMEFFQTAwMDlBRTJDNzRDOEY1OTg4NjdFM0FFNDUwNEI3NUZFOTZERjYKLToxMEFFQjAwMDQxN0Q5OTU2MjA4NEZBN0MwMDhENDk2NkM3M0QxMjdFRkIKLToxMEFFQzAwMEE0MDNGMzVERkNCNTY5NTA2NERDRDcwMzM4RUZGNzM3QjIKLToxMEFFRDAwMDYwMkZEOTU5N0VBNjg3Qzk2RTUyRkE1QTUwMkVCNUQ3MUYKLToxMEFFRTAwMEVCMTRENzM5RURDNjNFNzBFRUVGRDhCOEI3RTJCODEzMjEKLToxMEFFRjAwMDRBRDk3ODQ2NTY3RjdBRUQ4RDdDNzYwNkQzQjMyMjJGRDkKLToxMEFGMDAwMDY3NDEwN0VFREY2ODI5QjFGMkMzRTFFRDFENjg2RjdFOEUKLToxMEFGMTAwMDRCMzdCRjRFRkM5MzY3OUZDMUY4RTI5RTQ4RDlFOEY5RDIKLToxMEFGMjAwMEUyQjlCMDlCMkYwNkZEMjdDMkVGQkFBQzRFMDg3QTMwQ0IKLToxMEFGMzAwMDJFRkQwRDgzRkJDQUJEN0VDMEY5OUY3QkVDQkUzREY3QTUKLToxMEFGNDAwMDMwN0NDOEE4NEZDOTcyRTlEOUYzMjRGQkJFMUNGREIwMDAKLToxMEFGNTAwMEFDN0NFNTgxQTkyQUNBQkQ1RjREOTBGMUVDMzBGMjU5NzUKLToxMEFGNjAwMDE0RjlFNzFERjA5MTdGRTgxREQ4MUY5REUxODA2NzY3MDgKLToxMEFGNzAwMDg0QUYxM0U4RjJCRkQ2RTdGMDNGNUVERUMzQ0JCNkZDOEEKLToxMEFGODAwMEZCQ0E1REVFRjI5NzYxQzkzOEI0QkZCRTdDQkIxRkQyNkQKLToxMEFGOTAwMDEyRkVERTI5RjdCRUY5OTEwOENGMzdGRjBBQTQzQTEwNTYKLToxMEFGQTAwMENGNkJDNUY5QTQ2QjFFOUJBQUEyRkQ3NEU1MENCRDEyNjQKLToxMEFGQjAwMEUzOUYzNjFDQ0YwQTNERkQzNkUzNjNDMzIxMEZBRjBBODIKLToxMEFGQzAwMEE3NTVDQzk3N0E3REZCOENDRjlDMEREODRGQkE2MzAyRTYKLToxMEFGRDAwMEZBMEZDNzQwNEUzREZFQTUyRTM3OUMyM0NEQzMwQkI3QkQKLToxMEFGRTAwMDdEREUyODFGMUNDQTE2MjlBNzFGRUNDNTg4REIwRjc2M0IKLToxMEFGRjAwMEIyRjdCMzFGNDVGQjc4NTZGNkY3RDdEOTc5NjYyN0RCNEEKLToxMEIwMDAwMEVGOUZGMkY0N0I4RDg2MTc1MTAzQUM1MjdBMUFBNUFBRjIKLToxMEIwMTAwMDZDREMyQkU4QjdDQzg5NjhGRkVEOTg5RkMxREM3NTQ3RTUKLToxMEIwMjAwMEJEQUUwMkVCMzVGQTg2QTkzN0QyN0M1Njg3RUU4REEyRUIKLToxMEIwMzAwMEJGQTg0RjgyNDRBRUZCNzdDQTQyQzkzMUQxNTk0M0VGMTIKLToxMEIwNDAwMEUxMDFGMUZCODIwRUJENjJERjYzREZCRjA4RkQ3QzAxMjEKLToxMEIwNTAwMDYwRkI3QjdBMkFDNDA3RTRGRjkxRDA1RUVEQzk5ODk1MjYKLToxMEIwNjAwMDE4M0Y1NjVDRkM1MTg0RjExNDY2RjdBRTEyRjY2NTUxMzgKLToxMEIwNzAwMDhERkJCQkQ3MUY3NDdBOTRBRkVCN0FFODIzRkIzRkFBMTIKLToxMEIwODAwMDg1MzMzMjlFNkJBRDczRTczRkRENTlGNDQ1OTJCQjJCQTAKLToxMEIwOTAwMEY3RjlDOUNFNUMwOUM2QURGNTMzNjkxRDkyMUZFQ0ZBMEMKLToxMEIwQTAwMDc1QTc1MzlDRjhGQTMyMjM2RUExNUM4M0I4NDk2RDNEQjUKLToxMEIwQjAwMDdDQjdFQTAzMDlEMjBFM0ZDMTJBQTU1RkM1RjVCNjhBNUYKLToxMEIwQzAwMEU5MEZFN0ZCRUI2MkIyRjE0NjhFREZERjY0M0ZGREEwRTQKLToxMEIwRDAwMDE5RTExQUM0ODM4RjlGQTdENTU5RDkzMUNGMjMzRDUyODcKLToxMEIwRTAwMDIzOEZDQjE5QzUxNzBGQjM3RkJGMkVBNkQyMzhDQkQ2NkYKLToxMEIwRjAwMDREMjlFNkZFMjFCN0RDN0M1N0U4QTk5RjNDRkMyRDk1NDUKLToxMEIxMDAwMEVFQTNGQUVFQUIxNzIwMUU1NjNDMkU4M0M2QzY3REY3ODMKLToxMEIxMTAwMEUxMDg2NDQ4N0ZBNTU1RDQ1RjU3NkQ5NzczRUE3N0NDRjMKLToxMEIxMjAwMDc0QTJCQzk0QUREQzdGNzlENUI2NDA3QTMxNkI3RkQ1MDMKLToxMEIxMzAwMEEzQUY5RjA1MENCRTc3NUJGQkY3NENDNDc1RjA1REVFQ0IKLToxMEIxNDAwMDU3MDRBQkVGQUM4QkQ4RkJBQjE0RjhCRkI5RUNBOUNGNkQKLToxMEIxNTAwMDQ3QjlCRDdERjg0NzQ1NERCOEJFQTUyRDNCQkY0OEZENUQKLToxMEIxNjAwMEY2NUVFQTBGMzhFMjczNEJBMkZDN0MyQ0FCQzdGREEwNjUKLToxMEIxNzAwMERGOTFEMjUzNzJDNEVGNkNCRkZCRTFFRjQ4MUNCRTFERTAKLToxMEIxODAwMEZFNzQxMEUxREI3MkJGOUE2NDcwQUNEQUYyMUVDOTkzRjAKLToxMEIxOTAwMDA1NUJCRjE3NDUzQ0FDREFFMThFRDNBREQ4RkE2MTA3NDkKLToxMEIxQTAwMEU2QTFBQzkwQTE3RjMxRjJCMzdDOENDQTQ3NERBRDVGNzQKLToxMEIxQjAwMDI2QjlDRkNGNTdBRjI0OTJCMDdBM0ZGOEVEQTJERkIwRDcKLToxMEIxQzAwMEVGNkZDNzY0MDgzMkQxRkJGNkJFODNFQUUzNTg0RTg2QzAKLToxMEIxRDAwMDUzQjhDMzVEQjVDMzJERjc1NjZENzk5REYyMjI3NDFGMjgKLToxMEIxRTAwMEY0NTc5QzhERjkwMTZFQkVGNkQ2NjdFQjQ3NDVGQjY5QjcKLToxMEIxRjAwMDU1RUZCQUY3RDBBRTVDQjVGRDlENUZBM0ZDNThFNTkxNjUKLToxMEIyMDAwMDlGNkZFMzdGQ0E4N0ZBQTlEQkEyOUVGQjY5QjYxNDk2RkIKLToxMEIyMTAwMDNGQjFFMjdCNDdFRkI1RDhCODg3QjdGREVFNUVDQ0IzNjAKLToxMEIyMjAwMEJGRkFBM0Y3RUZGRDY3QjQxNzlFMEFFQTI4RkY1NzdEMjAKLToxMEIyMzAwMEY3ODUyODM4RjhGMTFFQjFGRURFOUQwNDU2MzlBQkY3Q0MKLToxMEIyNDAwMEVFN0YwNkQyNzhBMEY1REQyNzdGM0IxOUNGQzlCREZCODUKLToxMEIyNTAwMEM4MUZDNzE5QUNGRUY1NEY5RTQ3RjdGMjVGRkZDMzA1NDUKLToxMEIyNjAwMEUzODdCM0FCOTA1RkQzMDEyNzVDNjlBMkFCQjE0M0UyNDQKLToxMEIyNzAwMEM2Q0IxM0UyRTlBMUM3RTE0NzA2NTRCNDc3RkYyMDQxRUEKLToxMEIyODAwMDNGRUFCOTk1QkQxRkFBQjgzRkQ5NjM0MjNGRTI2N0Y3Q0QKLToxMEIyOTAwMEY2RDdGNzdDOTU5NURGNjFGNDA5RTRBMDBGOUJGRjQ0OTYKLToxMEIyQTAwMDFGRTk2RjI2MjZEOTczRTVGNkQ3MTcyMUJDQUJBMDlGRkYKLToxMEIyQjAwMEY0RTkxMDdBM0VDRkU4MzkzMzRCNEZFRkY3QTM3MDRDRTcKLToxMEIyQzAwMEM1N0RDMUFBODcxOUZEQ0U0MjNBMzJGQTlEMzU5NDdFREEKLToxMEIyRDAwMEVGRTA3RkU2MEVBNURGRTM1MUY3QkQwOTQ3RTFFQUZCQUEKLToxMEIyRTAwMENBNzE2M0JBN0Q2Q0NFM0M4ODZDOUM2MUY4N0I1MDZDRjMKLToxMEIyRjAwMDc5MzAxMjdFQUY5MDM4NUM1RDUxRjNBNzI4RUYwRjZGNjUKLToxMEIzMDAwMDJCMUFBNEVGNjJBNEVGRjc4RTRFNDZFM0VENEQ3RkZGQkMKLToxMEIzMTAwMDE3MTEwRkZENEYwNjc0RkNGRDEyNTczREY5MjJBREIzMTYKLToxMEIzMjAwMDc3N0ZGODlDNkE1MDVDMDdBMkQyNkM1Njg2QzE5RkZENUQKLToxMEIzMzAwMEMwQ0EyQkI5MEYxQ0FFNzlFMEZGMkZGQTM1NkI3RjBEMTkKLToxMEIzNDAwMEVCMDJGNzk5OEM2RTU0REVDM0Q2MUREMTIxN0Q2MUEzMkIKLToxMEIzNTAwMDgxN0EzMzVENDZGMzVFOTlFNkVCNjE2NTdBRTdDNTc4RkQKLToxMEIzNjAwMDFGODUxN0VGRkU2MkZCM0VEMDJDM0RGMUJFODM5NURCQkYKLToxMEIzNzAwMDVGNUQ4NDdDOTc4RjlFRjZGQzc1OUNGRjFDRjZGRDAxM0IKLToxMEIzODAwMEY3N0FGNUQ2NUZDOUQ2MjdFOTI5MkY3REQzM0I3RjgxOTAKLToxMEIzOTAwMENGNzdFRjBGMjg3ODNFRTM1RDcxQUZBRTk3RUU1OUZDQTMKLToxMEIzQTAwMDhCNzNGM0EzOEM0MzFERjdGMEM3NjAxQzRBRTAyOTNGNjEKLToxMEIzQjAwMDdGRjA3NTNFRDJGQzQ2OEJCRjc3QTI4NjhCOEY2QzNDQUMKLToxMEIzQzAwMDFFM0U5NjVCRkU0RjJDRTY3MjYzMjVGNDM0QTJFOUVDMzgKLToxMEIzRDAwMEI1NTcxNDQ4NUExMzJCQjNGMDFFNDZGQjgyQzE3QkY4QjUKLToxMEIzRTAwMEJCMzJGOTg1M0E3QTc3OTMxQ0Y3Q0E4Qjk1OTBGQkY3QjUKLToxMEIzRjAwMDZGRDUxNjczN0I3MUU1OEU5RDY3QTE1QzNCQkNFQjQ3RjcKLToxMEI0MDAwMEM0OUYyQjFGN0U1NUM1N0RDNzlFMkQzRjUwRkI2QUIzNDEKLToxMEI0MTAwMEVCMDFGNTQzREE4MUVGQzNERkRGNzkxNjk3MDdCOUZENUEKLToxMEI0MjAwMDVFNzNDNTdDNTYzREUxRUU3RkQ1QzNFRkI5RkE1RjYxMkYKLToxMEI0MzAwMEY1OTJCRDMwRDIzODZGMkJFNkE1MzhERkI3RjdGOUU5QzIKLToxMEI0NDAwMDFFQzJCNzdCRTVDNjVDNzZGMEU0NjJCRkNCMEVFRTc4MzkKLToxMEI0NTAwMDZFRDE2RkYwM0NFQ0NDRkQyMUJBN0Y3MTdCQUIzOUZFMzUKLToxMEI0NjAwMDE2QjRERkY2RkI0NTdDRDFGQzFEREFBNURCOUYwQjkxMDIKLToxMEI0NzAwMDlGNjdGQkZFQ0Y1MDNFOTBERERGNjMxRTdDQ0U3OURFMDIKLToxMEI0ODAwMDVBMTA2MUZEQ0RFOTRCQ0M5NDhEQTE3MkEzRUUwMERCODcKLToxMEI0OTAwMEVGMzlGOEUwRkFFNzFBQzdBM0RDQzdGREIxODFCRjVGNTcKLToxMEI0QTAwMDRFODlEMzM5MkMzOUJBODhGMkNDNjVEREE3MDc3M0VBMDcKLToxMEI0QjAwMDZGREU5RjNGQ0NGNzkzN0VDNjk4Q0VGQkRDQ0YzREY2ODgKLToxMEI0QzAwMDFGQjQ3RkVGODhGQjcyRTJFMTNFODE3RkZCRjczRkQ5M0IKLToxMEI0RDAwMEVGRDc0QjlDNkZBQzY3NzkzQzI0REZGQURBRDgxQzhCMzIKLToxMEI0RTAwMDU3MzM1NERFREE1QzE3QzdCOENGQjVDNUZDQkU5RUIxODIKLToxMEI0RjAwMDZGMTgxMjlFMkQ5OURCNjc0Q0M3RjkxNzQzMkZFMDc5MUYKLToxMEI1MDAwMEZGREI5QkY1QjgzMzNFNTQ3NkQ4NkNDMTdBNjdCRjA5MzAKLToxMEI1MTAwMDcxQUM4N0UzRTI3RTZEQjRFMzVBQzVGQ0RDRjM5MDcxNTUKLToxMEI1MjAwMDZCN0IwOTJGODU4Q0FCOURDMEI4Qjc5RTgyNzFDMzI3RkEKLToxMEI1MzAwMDgwNjc4MENEMDU4REVCQ0RCM0YyOEVBRjRFRTM3OTYzOUUKLToxMEI1NDAwMERFRjE5MkI2M0UxMEYxMDU1QTdBQzNGOERCRkNBMjlGRjkKLToxMEI1NTAwMEE1QzU4NkVCRjc5NTgxOTJBMTdCQUJCMzc5MTc2OUE5NTUKLToxMEI1NjAwMDczMjZDNkVGMDZDRjFCMjczNEM3Nzk2M0Y2OURDRTFCMjMKLToxMEI1NzAwMEI3OTkzQzBGOTZCNUEzNzVEMDI1RkMxMzE4Q0Y1Q0U2QTAKLToxMEI1ODAwMDgwRjcwNTIxOUYwMjE1QTkxOERBNUY5RDc5RTIxMUFGQjYKLToxMEI1OTAwMDA4M0VFRjhDMzQ2ODM4OTk5REZBRjRFMkJFNjFGNDg2NzcKLToxMEI1QTAwMEIyRTY5QjMzOUNFNzkyMTUzRDIzQjlFMkM4RTZFQjc0MDMKLToxMEI1QjAwMDdGNTZCRUY2REVGOEEyMEQ3RkU3Q0U3RjgyQUFBOTk4NUQKLToxMEI1QzAwMDM3OUI4MEQ2MUM3MDZFMTdFQjA3RUI1NTYyQkQ1ODEyODcKLToxMEI1RDAwMDVBMUNGNUQ0MTg5RkE3NURFRTE0N0VBMTU3NkU3REE1NjkKLToxMEI1RTAwMDkzRTJGNjc5RjBCNDQzRDBGMzA1NzRDQzk3RDFGNjREREQKLToxMEI1RjAwMEMzRjg2RjU3QzQ0NzcyQjIyQjk4RkIxRUZCRkYyQ0Y2QTMKLToxMEI2MDAwMEI5RTRBNDhBRTcxRkM5MEZCQjhGRjY4REM2QjE5NzRENjkKLToxMEI2MTAwMEJDMUZFOUQ2NUE5NUZDNjA5MUZBRkQ1NDNFNkFGQUM4RkYKLToxMEI2MjAwMEZBQ0Y4NzFGRkIzRTgzQzE3MjFFRkY1M0JEQ0VFOUJCMUQKLToxMEI2MzAwMERCREM0NkY5QjFENzRENTU4REUxRjIyRDQyNkJBNkM1NDUKLToxMEI2NDAwMDMxNkY0MjVCNzM3NjFDQ0Y2Qjg3NkFGOEVGNjFEODMwM0QKLToxMEI2NTAwMDBGRTI2MTA2REY4NjNDRkNGMTNGNTk1QURFMkQwMDgwODcKLToxMEI2NjAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFRDdEQjMKLToxMEI2NzAwMDBCNUM1NEQ3OURGMEI5MzM3N0VFM0M4MTNCMzBDMEYwODIKLToxMEI2ODAwMEJFODMxMEQxNjIzQTI4QTIzNjNFMkUwRjBEM0U2MjQ2OEUKLToxMEI2OTAwMEM0QTgwOUQ2RDEzQzRBMjIxOEI0MzZBMTFCMUIyRTAyREQKLToxMEI2QTAwMDgyRjhDMjI2NkJDREFFNEQ0N0EyMkQ2REQzMTY1M0RBNkMKLToxMEI2QjAwMDM1OEZGNjFCNEM3NEVENjM1QjYyNkNFMkY2RDMwNjEzQjgKLToxMEI2QzAwMDM3QUI1OUQzNjVCN0NERDZFRDk3MzZERkY5RkZDRkJEOTAKLToxMEI2RDAwMENDQkRDMzBDNjhEQUY0QjdGQjdENEI3RUM5QzlCOUU3QjIKLToxMEI2RTAwMEY1M0ZGRkYzN0Y5RkM3N0M0QUU0MDg5OTQ5QzhFRTJERDgKLToxMEI2RjAwMDg0MEMxNTEzNDJGOEIwOERCODA4RDk1NzYyQjI0MzNBOUEKLToxMEI3MDAwMDI4NEY0RjFBQTZFOTg3RjBCNzYwNkM2QTZERkVEQjE5MDcKLToxMEI3MTAwMDU1MzMyMkY5Q0VCQzQ0MkU0OEZCRDk5OUY3MzgxOUE2RTcKLToxMEI3MjAwMEE5RjU4MzE2MTJBMEVEQUQzQzkxRkI2OUVBOTZDOTYwQkMKLToxMEI3MzAwMDkyODdFNkU1NUI3QzU2MUY0RDVEMjRDMzU0NEFEQjk1M0EKLToxMEI3NDAwMERGQzJFREYwOERFRDdGMzBFNzExRUY1QkI0NURCQTRDRjkKLToxMEI3NTAwMDMyMjBFRDJDMTczMjRDM0E3ODdBQkVEMDQ0MDI3NDlDRDkKLToxMEI3NjAwMDhFNzI2MTJEQzA2OTBEN0Y5RTQ4MDk5MUYyMjc0NTEzQTUKLToxMEI3NzAwMDIxQTlGNDdCNUQ4RjJDQzNGQzA4QzkwODI0QzAzQzQ5NzcKLToxMEI3ODAwMDQ2OERBRTVFMEY0N0Q2RjQxNzhGMURGRjEwRTA4N0I2Q0IKLToxMEI3OTAwMERGQUQ5NkVGOUJGM0NFQTE3QjI5RkNBMjJDOTU5ODY5OTcKLToxMEI3QTAwMDM3RkIwNkFGOTJGQzY5MzQxRkJFMkE3MzMwMkYwRjk5MDYKLToxMEI3QjAwMDZFMjc2M0ZCODE3QTNFNUEyRkQxMUIyNDFCMDBDRUVDRUYKLToxMEI3QzAwMDYxMTJBNEUzMjcxNjBEMTM5OEJGNDMyMjkyNDlDMjdFNEIKLToxMEI3RDAwMDEwRkVBNEQ5MjM0NEExRjU5MkU2MEU3Qjk1NjlCQTdFQUEKLToxMEI3RTAwMEZFNjA4RTA5QTcxOUU2NDlEN0QxRDE1Q0VBMkY0ODIxMUUKLToxMEI3RjAwMEM0RDYzQ0RGNUY0MEQ3MjU4MTFGMjIyMkVEMjc0MTYyNUUKLToxMEI4MDAwMEY4OEY2RUY3Q0Y0OTBDM0YxQTVFN0FDQTZGNDkwQUM2QTUKLToxMEI4MTAwMEU4N0Y3NDdENUJDRUE0RjExNjVEQkVCQzY3MERFMERGRjIKLToxMEI4MjAwMEUyMDkyQTMwRkZDNEQ5MEMyRjVBNzlBMjM0NEM2NDNBNjkKLToxMEI4MzAwMDZFMjI2MUYzMjRBNTQ0M0U0NjkzODQ1Mjg1QzAzODc0MzkKLToxMEI4NDAwMDQ4NTkzRjlGMDc1NDdBN0M0MDlEMEZGQ0M5Njk1ODhGMjcKLToxMEI4NTAwMDEwRkEyOTQxNUU3NEQ1N0MyQkU0NzlGMjU2MTEyQkZGNDYKLToxMEI4NjAwMEQwNDc3MDQxREZCMkE5NzlGM0Q4N0NCQ0Y5NEM5NEVFOTMKLToxMEI4NzAwMDZBMjFFNDJEREQ3QzZERDk3NEZFNUFCRkY0REYxRTBCMDYKLToxMEI4ODAwMEM5MDBGQzdFNTRCQzA5REU2MUE0MDdFREZCMzY3NUZFRTEKLToxMEI4OTAwMDE2Q0YzMEUyNjcwQ0ZFOEExOUZFOUNDNTBDN0ZDRTI4QkQKLToxMEI4QTAwMEZDRUQ1NURCRUZGRDJGODZCRjUxM0M3MUE2MzU0MDg3N0YKLToxMEI4QjAwMEQxNzhENEVBNTc4Q0MyQUQyMDVERDI3Njg0N0MwQUYyNkUKLToxMEI4QzAwMDgxNkFFMERGMUUzQkNCMUYxMkVGQUMwNkZFMDBCRTlBODIKLToxMEI4RDAwMDgwNUYwOEM5QTQ0RDdBQjgyRTI4Q0YxNTQ1RUNERjdBRDEKLToxMEI4RTAwMDFGOTUwN0ZBN0M1MDkzMEY2QzVDOTdDRjVGNEQyODNERjYKLToxMEI4RjAwMDEzOUY4OTFDQTMyOEVEOUFBQjc4NjFCREJBOTE1MzIyOUUKLToxMEI5MDAwMEZERkZBMzM4MDlFQjc3NEE4Mjg5RkIyNDREQ0YyQzRDRUQKLToxMEI5MTAwMDA3QjlEOTY2RUJCMUMxN0NCQjJDM0REODRGNUI4RTQ5RDIKLToxMEI5MjAwMEVDOEQyMURGNEVBQkYzMzUzNzNCNjcxQzlEMTExRjhGMkMKLToxMEI5MzAwMDY2ODEwNDYzRjFGRERCQUE3QzZCMUI3Q0VBOEM5OUQyRTcKLToxMEI5NDAwMDA3MkYwOTkyOURDMjBCNENGRkI2QjZCRUY5QjQzREU5NzQKLToxMEI5NTAwMDFGRjJGOTYwOUM0NDFDQzdBNUMyRTUyQTM0OTE1NkRGNEEKLToxMEI5NjAwMEM0NzAxRTU3RTk4QTZGQjY4RjBCMjcwRjcwQzY5MDMzQ0QKLToxMEI5NzAwMDFBOUNFRDAwQTcyNzNFOUNDRTlDMEFBNDUzQkVEOTg1RjUKLToxMEI5ODAwMEUzMEM4QTEyNUIwRjRCOTM2RDIzOUQ5RkFCMzU0OTZBODUKLToxMEI5OTAwMEE1RTkyRUJFQTlBQjBFRDIyMTBCNTE2ODE1MEI5MUNGOTQKLToxMEI5QTAwMDU0NTBCOEY5NjlEMzA5QTFGRDc0NUM5QTY1OUIwNEI0M0QKLToxMEI5QjAwMERGREM0MzAyM0EzOTFGNzQwNDJGODlCNDNGNUUwQzkyRDYKLToxMEI5QzAwMDIwODU5Mzc3MjkzMjgwRjFBQzRBMDdEQUJBOTFBMjY0RDQKLToxMEI5RDAwMDQyRTZEMEYxODJGQzBDOTBBN0NFQTA4MEE5RDY4RjQ2N0IKLToxMEI5RTAwMDI3NEU4QjRDQzQ2MkU4QzcyNDg3NDBERjQxNjc3MzIyMkYKLToxMEI5RjAwMEY1RTZCQjE5REVEQUU2ODYwMzU0RjY5MUVFMTI5RUVDMEMKLToxMEJBMDAwMEEwOUZEQThCMjhCRDI0RDFCQzQ1RUVBQUEzRjhFODdFMUUKLToxMEJBMTAwMEQ1NDI3QTc1N0NBMDhEOUJFQjY2RkFDNzRFNkE5M0MyQkQKLToxMEJBMjAwMEQwQjdGOUIwMzczODhFM0VCNjAzREU2OEJCRTYwQkJFNDIKLToxMEJBMzAwMEVGQkNBMkUxMTVGRTE1MTMzQ0VGMzg5MTc2MzM4MDlGRTEKLToxMEJBNDAwMERGMjdDNUFCNERBNkY4RkRGQ0FFNDVGQUNFMkIzQTc5MDMKLToxMEJBNTAwMEQ1NEM5OEZFMjA0NDRBNUYzMTJEN0VCQkREMkQ2NDQ2RDcKLToxMEJBNjAwMDQxNjEyNEJGODcwRjIxM0VCQjVEQkQ1REY5NzQ5RThBOTUKLToxMEJBNzAwMERGRTQyRkE0RUI0NUIyNEIwRDc4OEE0RTA5Njk2NTcyNUQKLToxMEJBODAwMDcwQ0NCQUFFOTZDMkI0N0Q3NzkxODlCNzAyQkQxNjkwREMKLToxMEJBOTAwMDkwMTlGMDkyRUQ0MUJFRDRENjM1RTg2MDc0NjNGMTMwNzAKLToxMEJBQTAwMDM5Njk3NkM5OThEQTAwOEYyMEVGQ0M3QkJDRTNDOTZCOEIKLToxMEJBQjAwMDFCRjA0OTBDM0MxNkI5MjkxRTNGRjFERjBGOEYxRTM3RDIKLToxMEJBQzAwMEMxRDQ5OTUwOTMwNEY4MjMyRkVGMjJEMjM0MDBDM0M4NzUKLToxMEJBRDAwMDdGNUEzQjhEREVBM0U3NUZGRERGN0NGRTFBOURDNEFGN0UKLToxMEJBRTAwMEFGNjhGNjEwM0Y0OEFCNjYwNTQ5QTg5QkMzN0NDMDk2N0IKLToxMEJBRjAwMDg2NEQyOUU4NTRBNUQ4QzJBREEwOUE3MkVBRkEzMzRFMTEKLToxMEJCMDAwMDExRDBDRkVERTIzQjM2MTQ1REZFMEY1M0M2RUI5RjI3RkQKLToxMEJCMTAwMEVGNjhGODM0NDdDNkQzRTNDNzA0N0FFNzhDMjU3NDhDMDIKLToxMEJCMjAwMDhCRTAyOTQxRkNCNDc3OTBEQzA4OUU5QTZDMjA4RjNBMTgKLToxMEJCMzAwMDVENUJDRkY4NEEyMzc4RUFDQzdFNEVEQ0EwQTNGNzJCREUKLToxMEJCNDAwMDYyODVFMkE2RjhEODA5NzY2RDBDNzk3MkFGQkJBMjFEQUEKLToxMEJCNTAwMENBMDU1MzZDNzk3RTQ4OTU2QjU0ODBGMzBCRTkzODBCMUEKLToxMEJCNjAwMDQ2OEM3ODlBQTdFMjY5N0VGQTNCOEZDMTM0QTk5NEU0QTcKLToxMEJCNzAwMDA5MTVDODE1MDE3RjE1RTBBRDZBNEQwMEM4ODIwODU5NDYKLToxMEJCODAwMDFGN0MyMjg4RjQ1MDI1MDI1RTM4NjVCMkU5NDNFNzhEQjgKLToxMEJCOTAwMEUzMkYxRUJFNUMxQzA5QzQ4MkZCMTlCMUU2ODgxQkY0QUUKLToxMEJCQTAwMDQ5MzFDNTlCQ0VGRUEwODQyMUEyN0NENEQ2QzVFNTk5OUYKLToxMEJCQjAwMDgwQUVEOEJBQkQ3QzMxRERBNEQwQUE5RDVFNTMwOEZDMEUKLToxMEJCQzAwMDE5MEI2OUVBMDJCQzkzNzM2NjAyNzY1QTVBMzgwM0NCQTIKLToxMEJCRDAwMEFEREVGQzEwRThCQkI0QjA5REM4RTgyNzg4MjEzQkFEQzIKLToxMEJCRTAwMDdGNzBFRDVEN0VENDQzRDc2RjIzNjE0QTM3MjhDQjQwMDkKLToxMEJCRjAwMDhFNjVDQjYxQjBBNzc5NTEyQTM3NEIzMENFQTMzNkYwOTIKLToxMEJDMDAwMDZGM0FCRDM1NDk4NEQ5REIyNDk2MUVEOEUyMEVGRTAwN0EKLToxMEJDMTAwMEQ2OERCRjNFMUZGQjMzRDk5OERDQkJEMUY5N0M2OTY1NUIKLToxMEJDMjAwMDIyMDEzQkMwN0U4MTBCODEyRTNCQjA3MjdFRDc3MDI5RjIKLToxMEJDMzAwMEM4Q0Q4NDFFMkI0RERCNzgyNTBDN0E0Q0I5NjA5NzAwNUIKLToxMEJDNDAwMERGNUIwQjk1REI0RDM0MkRGRjk1QkQ4OEE3REZCQjM4M0YKLToxMEJDNTAwMDg3MUZGMEQwNTU0ODk3OUNGNkYzQkJBNzlDMjE0MkYzNzEKLToxMEJDNjAwMDNCNTcyRTFGNDk4MjdFOEU5QTI1Mjg3RkYyQzNBNjRGMEUKLToxMEJDNzAwMDgyM0Q2NUZCNjAzRkZBODczNkQ1M0YyNDdDRDMyQzU4NDQKLToxMEJDODAwMDNGRkI0Nzk0MTNCQkY5MUVBNEZGNUQwNUQzNkQ3QUY5MDIKLToxMEJDOTAwMDlFRUEwODBFMDM1RUI0QkNERDRCRTVEQjBDQTRBN0I3M0YKLToxMEJDQTAwMDg2MjkzRDk5MTQ4RTdDNDhFOUQzRTZEQUU2M0QyNUMxMjQKLToxMEJDQjAwMDdDRTk3NzhEM0U3QzkxN0ExMUJFMzVFNjNEMTRENzYwRTQKLToxMEJDQzAwMDY3MTI3MjY0MzFEODkxOUQyMDZGRDA2RTI1MEEwN0VCMDAKLToxMEJDRDAwMDk2QzFDQURGM0ZCMDYyMzFEOEExOUQ3NkFEN0NFNTYyRTYKLToxMEJDRTAwMDU5OUY1N0ZFNzAwNkYzQUFEREVCNEZGNkVDODJGQTlFRTEKLToxMEJDRjAwMDJDRDJDNEYwMTMyMEFCNzRGNjRDNDEzMjhGRUJENkU3NTQKLToxMEJEMDAwMDk2N0ZFRkQ2RDlDRDFBNUQ3NjE1MzBCQTdDRjk2MjY3ODkKLToxMEJEMTAwMDM1QzhDRDRFNEE5NzU2MDlFODcwOTdDMTRGRDY1MjhEMTcKLToxMEJEMjAwMDBFM0IwQjE4OURDNUMzQkJFNTdBMDkwOUVCRUM0MDhCQjQKLToxMEJEMzAwMEE3MDdFOUQxRTYwOUEwMUQxRDVEN0Y0NTBBQjM2MzM0NUQKLToxMEJENDAwMEZBQjc3OTA5RjI4MzREMEEzRTc1M0ZGMjg3Q0IwRkVDQzMKLToxMEJENTAwMDY3MkQ2ODIyMUNBNTEzOEJDOEZDRTE4OUU2MTEwRjNFRjQKLToxMEJENjAwMDhERkUzQjBCRjIxNUEwRDdGNzQ1RTIyN0UzRDRCNzVDNzUKLToxMEJENzAwMDJGQzVGOTZDNzFDQjkzOTI3NTc4RjRFNDUxQkNDNzk4RDgKLToxMEJEODAwMENGNTc5MkQ5N0MzQTAyNzU4MUZCNjlCRjcyQkRBNDIwNUUKLToxMEJEOTAwMERGNzg4OUJGMUJGNDEyMjU3RkIwM0JBOUJERjlDOUU0NDgKLToxMEJEQTAwMDU0M0Q5RTk4M0RBMkY1QUY3MDREODMxNkUwNzMwRjZEMjQKLToxMEJEQjAwMDQ3QkZCNjkzOTcxNDU4N0E4QjI3NjRFMEVGMkZBNjA0RjkKLToxMEJEQzAwMDY3RUJGQkUxNDVFNjFGMkUzNEJCNENFNDIzRTA2NzNGMDUKLToxMEJERDAwMEY1Q0JDMjkzQTk5RkQ4MjI2MkJBQTdDNThCNjk1NzhCQUUKLToxMEJERTAwMDg0Njk3NzhCNENDMjU2RUFGRTkwRUJFN0VGMDUzQkRCQUMKLToxMEJERjAwMEU1NDBGODI2QTI4QjhFMTYzRkI2NkY2Rjk5Q0RGQUUxMUIKLToxMEJFMDAwMDM0M0E5RkJBMEJFOEMyNjFEMkY4QzRCRjBCRTgzQ0M5MTAKLToxMEJFMTAwMEFDOTU5NzYxQkU4NzYzRTU4RjI0MkY1OEFDMTRFMzdDMDMKLToxMEJFMjAwMDUwRUU3NTREMzBBRTM5NTQ4NkVCNzdGM0ZEQUJGMjVCRDcKLToxMEJFMzAwMEM1REZGRTc5OEY1NEU3MDNGREJENjEyNkZBMzhDNjE4QzkKLToxMEJFNDAwMDdBMDlCM0YxNkVCNEZGQUU2QzEzQ0FEM0ZERjM3NjlFREMKLToxMEJFNTAwMEYxRDFCQ0U1NzVEQUZGNzhGNEQ4QzNGQThGREI5RjA2MjEKLToxMEJFNjAwMEVGRTAyRTg0RDc0QUQ3REI0RUZCQjM4QTRDREVDN0UzMjQKLToxMEJFNzAwMDg3RThGOUQyOTQyMDdGNzgwOENBRTlGRDgzNkJDOUNCQTMKLToxMEJFODAwMEMwOUY3NDU4QkIwODdDMUE5MDIxREUyNUI0NTMxQ0ZCNUMKLToxMEJFOTAwMDQxREYwNkMyQ0Y4MEJFQjU3MUU0MThDRDBCMkFERjUwNUEKLToxMEJFQTAwMEI1QUZCQzRDRkIxMTY0MUJFOUE2RUQwNkU3REQ0NUEwNzAKLToxMEJFQjAwMDVERTcyQjM2MEExM0E1RDM5NDdDQjQxN0VDODVCNUE0QTMKLToxMEJFQzAwMDhERDZEQjU5NkQyNzY2RkEzRDY5RkUxQTAyRkRFREZDNDEKLToxMEJFRDAwMDk5MURGQkY3OUQ5OTgyRkNCQTRCNjQ3QzM0QTExQ0YyM0UKLToxMEJFRTAwMDlBNDg1OEFGQzc2RDhFNDgzRTFGRTRFNTdEMjQzMDBENUIKLToxMEJFRjAwMEY5RkE2OTNENUY1MzNERDkwQkZDMjQ5MDJBODU3MEEwNjcKLToxMEJGMDAwMDg3MUZGMDMzM0I0NDUxRTU2OUUwNTgzMkRBODEwMTZDMTgKLToxMEJGMTAwMDFGQjEwQjlCODgwOEZDN0FDRTFDRUEwNkJGQzREQzgwRUMKLToxMEJGMjAwMDQ2REYyMkYzNjFEQjMwRjJCNUJDM0NBMzhDMTAxNzAzNzMKLToxMEJGMzAwMDgxRUNGMjg3NDkyRUUwMjVDMzRDNkQzMTIwNEI4MTg0ODIKLToxMEJGNDAwMEE5REVFOEExRkYwMDdDRkM4NUFCMTdDOEFEODRBNEFGRDcKLToxMEJGNTAwMDExMENGM0UwMkYzODJGOTk2RTA1Rjg1ODdENEQwRkYxMzUKLToxMEJGNjAwMDE3MUExQkExM0U0Rjc0RjVEMTlGQTk0QjFBQ0YyRjhDRTYKLToxMEJGNzAwMEI2RTMwNzkzNTU3RkQwNDk3MjQwRUZCNUI3OUMyMDZGNjkKLToxMEJGODAwMDVCMjJGREYwNTE3MTI1MkRENUVDRjk4NzUzNThEQzYyMDkKLToxMEJGOTAwMDk0OUUyNDQ2REYyRjUwM0YxREU4QjFFMzE3NjZEMjFCNjUKLToxMEJGQTAwMDgzQkVBRjI3RkIwQ0Y2NkU0NkQwMTQ5OTFGRkRGNzk1QTQKLToxMEJGQjAwMDhCRDY4QTgzMDZGQTFDN0ZGREIzRUE4REVENzM5QTFDM0IKLToxMEJGQzAwMDA2M0NFNjM1MjcxQkYyM0UyNUQzNTA3RjUyNTdCRUExRDMKLToxMEJGRDAwMEJDQjA2N0FBQTE3Q0YyQTFFOTg2RkM5NEQwQTcwQ0Y1QkQKLToxMEJGRTAwMDNGRDE1NzYxQzg0RkVCNUY2MkE4RkZDOTEzMzU4NjdDMEMKLToxMEJGRjAwMDQ5Rjg2RTQzRkQxOTY3MzYxQUNBNjcwRTNENjQyODlGREIKLToxMEMwMDAwMDc1N0VBQjIxM0Y2N0Y4QUYwQ0Y1QkQ0MUYxRTQwOUUwNjcKLToxMEMwMTAwMDRGNEE4RjY2OEFBRjVEMTlDQTIxRDA5RkMzNkRENDhFRjcKLToxMEMwMjAwMDlCQ0ZFQzYzRDBCNzI0OUJBOEY2MzE1NTRDNjk0MDU3QTEKLToxMEMwMzAwMEVDQUYxREY0MDBDOEY5M0Q4Rjg1QkY4MDdBRDJFNDA3Q0MKLToxMEMwNDAwMEZFRTUwQjE2QzkxQkExNURCQjY4MjI1RTlEMUM5MTE2MDcKLToxMEMwNTAwMDExRjg1RUIxQzc4RERGRTVEMjU2RTQwRjgxQUEwRDdCRTIKLToxMEMwNjAwMDIyRTg2REUzN0ExMEYzNzZEMjBGRjBCREMxRTBFMzQ1MkMKLToxMEMwNzAwMDI1QTY3QzEyQjI4REY0NkYyNUY3MjQwNUM2QjFGQjJDRTIKLToxMEMwODAwMDkyQjFGRUNERDJCRjJGNDVBNUZGMUM0QUZGRTY4OURCNEEKLToxMEMwOTAwMDZCNzRGRjkwNDk5RTlDQzJGQ0MzQUE3MzFFODNERjgzMEUKLToxMEMwQTAwMDc4MURGNTdCNkNBNDFERDhBOUJDNkUyNEVCMTRBQkFFMzcKLToxMEMwQjAwMEZBMzc1NkQzODc5RkI4NzFGRjI2OUFCRjY4NEE3MTRFRTgKLToxMEMwQzAwMEQ3QzlDQkU0QjU2NkRGOEZENTg3MzMwQ0Y2NTk3NERBNjAKLToxMEMwRDAwMDk2RjgxMENBM0IyQTE3Q0I1MzBDNzIzMTUwMDVGMzEzNTQKLToxMEMwRTAwMDc4MTlFNUEyRjZEREQ3MzcxNUU1NzI5N0M4RUM5NDRFQkUKLToxMEMwRjAwMDg5RjJFNTM4Rjg4QTk2Q0I1RjRFOTY5OEJGMTg0NzNFOEUKLToxMEMxMDAwMDBCNTRDRTgyQzJEREI5RjJEMzVEODAzNzc5MUI0MUJEQkQKLToxMEMxMTAwMDQ0NzUxMENBRDlFOEZFQTk1RDc1MzdDMkU5NjVGNEE0NzMKLToxMEMxMjAwMEY5NDM5QUJGNjVBM0YyMDNGQzJCOUI0NDEwNUY1NjhBMjgKLToxMEMxMzAwMDJGMjdEQTQ3OEZBMjdENDlFNzIxODE3RDY0RjU1MEZCRTcKLToxMEMxNDAwMDEzRjQzREI1M0Y5OUJERjlFN0I1MkZGMzYxREU3QUZCRjYKLToxMEMxNTAwMDRGRDU5NzIxODdEQzk0OTIxQUJGRkYxN0UzRUM0NzlERDgKLToxMEMxNjAwMDQ5RDZGQ0VFRkY5RUY0MjdBNzE4RjFBMUQxQTE0NjY3OUUKLToxMEMxNzAwMDU2MjAzQTNBREVGQjEyNUI3N0RBMjI5MUQzRjYyRjI0NkYKLToxMEMxODAwMEY4NEYxMEU5RTVENEVDQjM0QTI1QUM1QkQwMjU1QkE5QTgKLToxMEMxOTAwMDVFREQzN0JCMDZEQjA5OTM3ODAyNzIyNjYxNzhDMzMyMTUKLToxMEMxQTAwMEQwOTNBNDk0QzkwOTg1RkUwM0Y0RTYyODM2Q0EwRDVCMzIKLToxMEMxQjAwMDk0MUUxNTQwMUYyNzhFRDVCQjlBN0NEMEZDRjM4OUU0RDIKLToxMEMxQzAwMENCQjc1MkQ0MzhEOTJDMzI0QjJGNUZFMkY5RTE5QTdDQUQKLToxMEMxRDAwMEQxRjBCMEUwODMxNjExRUQ4RTBGNjhCOTY2NEZEMDdFQjYKLToxMEMxRTAwMDJDMzk3QzAwRTJDQzgyOUZDODQ3NjJGMERGQ0JBQTVFOEMKLToxMEMxRjAwMEVFM0I2OTk3ODEyRTVENkIwNEY0QjMzMkZERTE3MkM4QUEKLToxMEMyMDAwMDY3MzYxMTNGRTA2N0Y2NzA5ODA0NjlGRjNGRjRCMEY1QjgKLToxMEMyMTAwMEM4RjQ4NzM4QjBDRjMzMkY4NzM4ODBGM0EwODVDNTg1MjEKLToxMEMyMjAwMDMyQjc4NTM4N0REQ0U4OUFFQUM3RkRFRUUyQTM3RTU4OTYKLToxMEMyMzAwMEY3OEEzQzE3RjJFOTY3MTcxM0E0OEYyMUVGQzY5RTcyQTUKLToxMEMyNDAwMEQ4NTc5ODRCRkNDMDNGMkUwRjRGMzIyMTdGREUxQTQyNDkKLToxMEMyNTAwMDc5RTIxRjUxQThBRjQzOTJFOTQ0NjE0REFGQjQ5MEU5MzAKLToxMEMyNjAwMEY3NTFGRkZEREQxNjFCQTZENzVBNDQ0QzJCRjM4QTA3NjYKLToxMEMyNzAwMDE3RDA3QTVCN0QwRThDMTc3NEU0M0I3MDlDQ0U1QzAxMEEKLToxMEMyODAwMEM3Rjk4RjlDODdGMkMwMkVGODc1OEIxN0VCNzczRERFRDAKLToxMEMyOTAwMDU0MDRGMTg0Q0U5M0ZGODk3MUNEMDgzRDUzQUM3OTAxRUMKLToxMEMyQTAwMDlFMzBFRUY3MTBCRUM5MEJGQkJFNDlGMjBDREMyN0VENDkKLToxMEMyQjAwMEI0MDRGRjcxMDNDNDEzRDcwQUZFNjMzMUY4MzdFOUU1MEMKLToxMEMyQzAwMDFGQTE5RjBDRjgwMTNDQjREQjE5NUVBQ0NFMjZCRjFCNEUKLToxMEMyRDAwMEUyRkQ5M0M4RkExNUIxRjg1NEM1MTNBNTMwQjM0MEU5OEYKLToxMEMyRTAwMDM3ODk5MTA2MTFFNjg2REExMjQxQUZGQTQ5M0YwNTlCN0MKLToxMEMyRjAwMDU4M0E0MjFDRUM4NzkwMDc0NTA5RTI0NUQ5QjZEMDIwNTAKLToxMEMzMDAwMDk0NjdENzhCRkUzNkFDNEY3MDVGNDE1QjI3OEI5RDA0RTMKLToxMEMzMTAwMDhFQkJBMDVFOThEQjQyQkZCRkU4MTFEOUZBMEQ4NTcwRDUKLToxMEMzMjAwMERGRkQzNzE3NkUxRkNDMjFGMUY5N0I0RjRCRjVEOTJBNzIKLToxMEMzMzAwMDVEM0NENjQ1NjJFRjBCRkZDQjZEMTUxNjBGRURGNzc2MjIKLToxMEMzNDAwMDgwNkQyNkFDRjdBQzcxRjVFMzhERjY3QkJCODc1M0UzQ0MKLToxMEMzNTAwMDEzOTNEM0MxNUU2RUU2NjNEQjk5NjY5MUFEMEZDNDdGMjQKLToxMEMzNjAwMEMwOEZERTVBMjhBNUJCNURGQTdFMTgzRUNDMjc5RkM3M0EKLToxMEMzNzAwMEY1NzExNkIzRjlCNzdERUY4RENEOEY1MTNBRjk3N0RBQjQKLToxMEMzODAwMDEwRTI1NUFGNUNGQzBDRkE4RkVGMjU0QkZCQzFFRjUyNkUKLToxMEMzOTAwMDdFNkMyNkIwQ0VFRjdEN0ZENjY5NTg5NDMxRjM2RTM5MkUKLToxMEMzQTAwMDkzQ0NFQkUyNDlFRjdERkJENTMyMEJFREZGQkRFNzVFQjEKLToxMEMzQjAwMDJERTM1MTA4ODUxMDFGNUE3OUUzODdBRjk1NDFGQzRBNTgKLToxMEMzQzAwMDY4RkU0REU2NjUwQUFGNTI0MThBOUEyMDRGMEQ2OEU2MzUKLToxMEMzRDAwMDg3NkU1OTFBMUUwNzZGMDdEMzFFRDgwMkYxQzI1MDlCRjEKLToxMEMzRTAwMDRCRTRBOEJERjYyNUU3MUYwNUEwQzc2NjgwOUZBNjBGRjIKLToxMEMzRjAwMERCNDY3NjcyNzQ4OUI5RjQ3Nzk3NTREMUZFQjY3MjhBQTcKLToxMEM0MDAwMEUyRTIwMDZGOEExNUZDMEE3MkMxRUEwN0JBRDk1QUM4N0IKLToxMEM0MTAwMEY0RTVENjA3QzU5MDAyNzIyQ0RDQzRDOERERjY1QUU2RjYKLToxMEM0MjAwMDY1MkE4N0VEM0YwREMxMTkwMEQyQ0UwNTJBMTMyMDdFNjMKLToxMEM0MzAwMDM3OEQyMEJEREY3NkFEMjkwRkY2OTVERDQ0QzgwNzNBNkMKLToxMEM0NDAwMEI0OThDQ0Q4Q0ZDODQ1NjdBODE3RTU2RkQzMkM5MDQzRDQKLToxMEM0NTAwMEFEMTcxRjlEMENFQkY1N0I1NUJFNjg3MUI3MzQ1M0QzRjgKLToxMEM0NjAwMDgxM0ExRkM0RERGQzE4NzdEQkNERjc2MzlDM0VERTdDOTAKLToxMEM0NzAwMDlENUVCNkFGQzA1NzEyMzVERUY1REJFRTcwNzY4NDFFREEKLToxMEM0ODAwMDM0RkU4QTZFQjdCNzg1Rjg2MUJDOTc1QTZDOThCRUQwRjcKLToxMEM0OTAwMDIyNjI3QUEyQzU4QkU5Rjc1QjI0NEMwNzVBOEEzMEVERjkKLToxMEM0QTAwMDZCRjFGQjBCMkMwMEU3NkM0QzNCMkM2NDdENDA0NzY3MjkKLToxMEM0QjAwMDVGRjBCMEZEQzg3QjkyQ0FCRjAwNzRGRTI0RURGNzMyNzYKLToxMEM0QzAwMDZERjc0NURBRkUzMkFEM0ZBRjM2NkM4NkI4Q0NCQzExQTUKLToxMEM0RDAwMDJBMkYyNTI4RUZDMkVGRkI2OTdGNTA2RjZDQjlBRDA0OUUKLToxMEM0RTAwMENBNEJBQkZCQzM4MEM3RDI2MkZBOUQ0MDdGN0Q1ODdGQTkKLToxMEM0RjAwMDdGQ0IwOTNGMkIxRkFBQjQ1MEZDOTZGRTk2OTUzQkU3RDUKLToxMEM1MDAwMEQyN0U2OERFQTlGNjQzQzcyRjYxRjU2NzYzN0Y3NDVDNEUKLToxMEM1MTAwMENDQzdFOEI3ODRDMTczQTIyNDE2M0NEMUY1QTk5NTZGQTYKLToxMEM1MjAwMDI2NTQ4Rjg4RjBCRkUwRUY1OTI0MEVGNzUxMzgxMjNFQTEKLToxMEM1MzAwMDA2RjJGODgyQjUxQ0Y0RTc5RTEyOTI2RkEyRkFDRDkyMzEKLToxMEM1NDAwMDVBQzA0MUZFQTk2NjIyOUE0QkE4Q0FDQkE4RDk1NTRFMUIKLToxMEM1NTAwMEEwOUQ4Q0RGOTU1NTdDRTg5ODBGRjUxM0Y2QUJFOUE3MDUKLToxMEM1NjAwMEU0RUEzMEVBOUQyNDNGQzkzN0JCNjlDQUQzODFBNzUzQTcKLToxMEM1NzAwMDU0REY0NzIyRTcwRDUwM0VCMTNDQUUwNzZEMjc1NjkzN0UKLToxMEM1ODAwMEM4NzkwMzMyNzE3REFBNUZBMkNBNjNEM0RCNDc0RDIxMEMKLToxMEM1OTAwMDNFQTYzRkY3NzE3MDFFQjE4MzVGNEI3REZEN0U5MjRCQ0YKLToxMEM1QTAwMEYzQUE3REY2NDVCNURFRkU3OTY1NDkxQjIxQkZGODgxMEEKLToxMEM1QjAwMEE3MjAwRUZFMUJFMkU1NjAzRjdFQjQ3RDk0M0Q3N0I4NzgKLToxMEM1QzAwMEU1NEM1QTU1QTFBQTE0NDBERTZGMTM4RkU4RUREQzZDRTAKLToxMEM1RDAwMDg1RDJBQjhFMEY3QTlBRjhFQTVFOEMyRjA0MzM2QTc0OTgKLToxMEM1RTAwMEZBQURDMzEyQ0NBMENDNEJBRTNGRjE4RjhCNDEzRTgwNTUKLToxMEM1RjAwMEJFMDYzOTNENzc4NEU5Rjc1MUJERkU1QjI2MUYzNTdCQ0EKLToxMEM2MDAwMDQyNTBENzZCOUZCQ0IxMkQwMUY3RDNBODNFOTJDMEFFNkMKLToxMEM2MTAwMDA4OTIwQURBM0VCMTdDRUJDQkYwOUQ5NDE4QkYyNzA4NTQKLToxMEM2MjAwMDhDOEYzMkJEMjEwRUYyOTk5RUMwNEYzQ0IwREY5MDdDQzIKLToxMEM2MzAwMDQ4N0U4NkNFRjdCNzAzNTYwOUU4QUZFRkU0REE3QTg4OEEKLToxMEM2NDAwMDFCM0U0QzEyMjUzQkVEMjdGM0E1NEIwMkMwRDE2MTFBQ0UKLToxMEM2NTAwMDE2ODAwODQ3M0NDRDRCNzg2QTA3NzUwODlBOUNBNDg2REIKLToxMEM2NjAwMDBGNURGRjhFMzQ1NTJFOTBERjc3NTdEMUZBMDc0REMxRkQKLToxMEM2NzAwMEFCNTQ1NzhFRDYzRkU4MDg2RTgxM0NGRDkzNkQ1NEFGQTYKLToxMEM2ODAwMEVGMUQ4REEzNkZFQjk2Mjk0REVDNTVFM0U2MjM5RUNGNkUKLToxMEM2OTAwMDc2MkJEOTkwQTdGNUREMkNERjRFREJFRjc1MEY3OTREQUEKLToxMEM2QTAwMDM0OUZDODZERTkzRTkzMDM3OUFERkU5NjZFODVCNkJGQTMKLToxMEM2QjAwMEVBNjFFNzAwODgyQkU4MDNCOTM3OUExNzY5M0U0MTk3OEEKLToxMEM2QzAwMEU3NTk5RUQ4NThEQTc3RjIzRjA1RDA0MzFENjkyM0E3NzIKLToxMEM2RDAwMEIzMDA5RjNGRTRGQTQxQkUzNkJFRkNGNTQxQzg2RkFFRTEKLToxMEM2RTAwMDI3MTJDNEU3MzI0RjFDQzE3NUY4QUFCOTdDMDRGMEQ2RjIKLToxMEM2RjAwMEQ3NzI0NjQ0NDMxREZFQjQ3NUExNzZFQTE0MkZDMTc4NjMKLToxMEM3MDAwMEIyMTBFMjQyRjk2MEJGMTVGNzk4RDA3RURCNEU0OUIwMTcKLToxMEM3MTAwMDA0RjBERDk1MDZFQjVDOTFDNkZDODEyOTIxREE4RjhFNTEKLToxMEM3MjAwMDdGQTY1MEJFQjM0RTA3NzU2NTE5MTlENkZCNUJDNDZGNjMKLToxMEM3MzAwMDAyNzgxMUU1RjAxRkU1N0YyRjAxRkRENDM3NUI3MTRDQzYKLToxMEM3NDAwMEE1RTM2RERBQzBGQjVCMjVEMDNGQTE1NjAxRDZGRjA0RkYKLToxMEM3NTAwMDg3N0FDMjc3MjY2M0M3Mzc2OEZFNUE3RjRBMkZGODFCNEQKLToxMEM3NjAwMDk2MUQ4QzNFMzdGOUZBRDNBNkQzQjRDM0NFRTg2MjkzQjQKLToxMEM3NzAwMDVCQ0RCQjhERjk3NkQ1OUVGNEJBMTU3NzMyRkRCRUY5NDcKLToxMEM3ODAwMEM0ODE1QzMwMDBBRjFFOUI4NTdFRTQ2NjBEMUU3MjAwODYKLToxMEM3OTAwMEUxQjkzQTM4MjdFOTM2M0FERkM2OUZCMkI4NjZFMzQwRDYKLToxMEM3QTAwMEM5MTI5ODdGRTMxRTEzMDEzRjZFRjMwMEE1MjcxRDdGN0EKLToxMEM3QjAwMEVDQTM3QzI4NEZBNkYzOTA3QkE2RjI5NDNFMDIwNzBCRDUKLToxMEM3QzAwMDk2REFFOUZBN0UzRDVGMTYwMTVGRjU2OUI3RUVCNjUxN0MKLToxMEM3RDAwMEU3RThFQjgyMzgwNUU4QTEzRUFENzQzN0QwRDNBNjM5M0YKLToxMEM3RTAwMDZGMjEzRDI2QTU5NkZFQTQ5QUUyRUJFOERERDU0QjQwRUQKLToxMEM3RjAwMEFDQTU5OTE4NUY1MjgyNDMzOTY3NzY2RjQzRkNGRjZCOTMKLToxMEM4MDAwMDM5MTlCMUJBMTE5REI4Q0Y5OTA3RkY0N0UxOUIyQ0NBREUKLToxMEM4MTAwMDE1NTA1RjVDNDY1RDIyQTA1MzIxNzAxMkVDMTBBNUMyM0EKLToxMEM4MjAwMDg2NzFEMjBBNzExOTk2RTdBRTIxQTY2RTBBQ0YxMTI5MzgKLToxMEM4MzAwMDM5Qjk5NTM2QjUxN0M4MjZCMDUzRjIwMzBFOEM3RjlBRDYKLToxMEM4NDAwMDEzQUE3NjgwM0Y3QUVDMUNDQjQ3RDZFOTEyRTJDNTUxOTkKLToxMEM4NTAwMDE0RUFCN0QxN0U2RTcxRjEyMkY4MjI2OTY2RDkwNkVCMkYKLToxMEM4NjAwMDQ2Nzk3OUU4NTgyOUYwMEJCMzAzOTQyRjE2NjNCQ0U3OTcKLToxMEM4NzAwMDYwMjJBOTdGOEVCNjNCNkFEQUQ4RkQyMzVBRUY2OEIyRjAKLToxMEM4ODAwMDg3ODA1REQ5QzE3MUVCNkJGMDdCQzVENEFENzQzRDhFRjMKLToxMEM4OTAwMEFBRUI2Nzc2RkI0NTU4QUZBMzZFNjM3RTJGQjdGMTQxRDUKLToxMEM4QTAwMEMwREIyM0E5MkYyRTgxRjlBNTU5RTU5RTE0MEFERkU3RTUKLToxMEM4QjAwMDUyNUZFQ0Y2NjYyMDlFRjM2REI0RkM3MzdGRkQ0MkI3QzkKLToxMEM4QzAwMDhERTJGRDY4QUI5QzI5RUFGMjkzRkY0MEE1MzZDRUUzRUEKLToxMEM4RDAwMDA1RTQ1M0RFRkRDNTg3ODA4RjY5Rjk4RjZENTRGRjdFQjcKLToxMEM4RTAwMDNENTlCMzA3NTg3OTQxQkVDNkQ3RDRBRjlENERFMTY4RDUKLToxMEM4RjAwMDFEQ0QyQkI2MjJEOEY3OEFENEFGQTI3Q0ZFRDVBN0NEMEEKLToxMEM5MDAwMDQ0RUIxRkVDMDlDNzlDN0U5QkMzOENGMzIwMEVCMDY3RTEKLToxMEM5MTAwMEE2RjE2OENGMzhEQzZDNUQxRDUzRjJEMTRFM0E2QTY3RTAKLToxMEM5MjAwMEY4MUFDOTMxNjFGOTIyRjNCMzIyQzQwN0FDNTM3ODEzNjIKLToxMEM5MzAwMDlFRTUyMTREMDFEMENGN0MzNjRGNThCQ0Y3QjAzQzQ1MjkKLToxMEM5NDAwMDgyQjAyOURCMUZFNDdBNTZBMDdGNjgyRkQyRUQwNzEyNTAKLToxMEM5NTAwMEYwNjM4REZCODc3QzU0QkVEMDNBOUM2MUEyN0FEODczNzkKLToxMEM5NjAwMDYxMDU5NzRCRkJGQjZDQUFFQTJGN0E0ODA2QzQ2MzFGNEMKLToxMEM5NzAwMDRENjU3MkU2RDE4MDcyQkI0NTAyMUExQjY2RTc1NjQ5QzcKLToxMEM5ODAwMDYwM0FBNEU5RUIwQUQyQzczQkJGMzJGNjVDNDAxOEVEMkYKLToxMEM5OTAwMEIyM0QyRTkzOEFCNzQ5QkJDMzA1RDQ1RTc2M0QyNzgyNEMKLToxMEM5QTAwMDFDQTE2QTdFQzc2MUQwNkYxRTFFRTlBNjEwRjg5RkU2MjMKLToxMEM5QjAwMEI3Qjk1OTFDREVEN0I3RTQ0QkIzQzEzRTdDQjVEMDA0NDAKLToxMEM5QzAwMEZDQ0Y4QjdFMTFDRUQ5OTUyNzk0MjY4MUREQzY4RkQyRTAKLToxMEM5RDAwMEU5RUI0QkMyNDAzNzgzNzNFRTA0M0Y1MDAwRkVBNTlGNDYKLToxMEM5RTAwMDBGREJEOUY5RDA5MTBDRDIwRjcxNjFERTJCMTNGRDNFMTQKLToxMEM5RjAwMEExQzZCRjNCNUI2Qzk4NTI3RkZFNUREMDFGNUZFQjIyRjAKLToxMENBMDAwMEI4NEYyMDc4MDM5ODk3REEwOTA3N0NGMUYyQTdFRUM2QjEKLToxMENBMTAwMDcxOUZFMTAzNDlFQjQwREU5RTYzNzYzRDkwMEJDNjM5ODIKLToxMENBMjAwMEMyNEY3MDEwRTc3OERGMTY0ODgyNzlFRjc3MUJFREJGQjEKLToxMENBMzAwMEIyMzQ2NkM3NzZBNjMyRjlEOUQ5QzJFMkEwQzJGNTRGQTAKLToxMENBNDAwMDYwNUNBN0MzQTJDOTIzRDdEMkYwNUNCMEU3ODM3ODhFMUQKLToxMENBNTAwMEQ2MUFEQzI2ODNCQ0IyMTE0NTExNzU3MTcyNUJCNjMxRjIKLToxMENBNjAwMERFMjU1Q0JGOTVDNTg3NTJEOTM4RDFFNzBENUM5Q0Q2RDEKLToxMENBNzAwMDdGQzFFRUYxRkMwMzJEOEQzRTlGRDA0QzAyMjg4RkM4NjQKLToxMENBODAwMDEwM0JGN0IwNkQ1NzY1N0FCMkFFOUY2RDlDOUMyRThFQjEKLToxMENBOTAwMDQzMUYwRjVGMzc5MzkwRUU5Q0NBQzNGQzg4MDBGMzc5NjUKLToxMENBQTAwMEY4QkE4MERGODk3NzM4QjExNUY2NjUyOEMxNzVDMzNBQzEKLToxMENBQjAwMDNFRkY1REQ0NEIwRUQyMTM4NjAzNzM1Njg4NTNFOENFRTcKLToxMENBQzAwMDg1MTIyRjNGMzI0QUZGRjkxMUZFQzA3RDc1MkUwNjdGNzkKLToxMENBRDAwMDQ4QzY3Q0Y0N0VGQUEzRTAzQkQzN0Y3NzM4N0YyREMwMzUKLToxMENBRTAwMDNDREZBQjI0MjM2MDg3MTIzMkJDMDhGOEI3QjFEMjgxOTcKLToxMENBRjAwMDcxRUE4NzQ5OEZDRDA2MDYyRURGMjNFQUUzQzU4RDAzNTEKLToxMENCMDAwMDk3MTIzNzk0RTIzRTk2MDQ3NkYwQzMyRjk1MUJFMjU0QjkKLToxMENCMTAwMERBRjkzMDJEQkZGOUM0MDY4QzFGM0U3Q0Y0OUEzMEI1OEIKLToxMENCMjAwMDE0QzExOEIyNTA3RkFDRDFENjczQzY5QTFGQTk2RkI3ODMKLToxMENCMzAwMDA0OTUyQ0EwRkY5NzVBRTUyQ0ZBRTk1QjAwMjc5Q0FCRTMKLToxMENCNDAwMDZBOUUzNDBCRkNCRkRGOEFGNTE5ODAyNzI3QUZFQThGNzYKLToxMENCNTAwMDM1MzZENDFGRUQ3NkVBQUYwMTlENUU5QzhDRkE5NDE2QjMKLToxMENCNjAwMEYzQTA5RkI1RjE1Nzc4MTgxRDhFQThGRTdDMDIzNTMzQ0YKLToxMENCNzAwMDAxQkYxRDhFQzAxNTY2QjQxMzk5QTdGNjRFNDdCMjQ2ODUKLToxMENCODAwMDM3Q0REREEwRkYwRTBBMTFCOTA4OTMzREU4NjBGOUU0NDYKLToxMENCOTAwMEI0RTZFRTc2QTY4N0IxRkVDODkzRkM2RUIwODczQUVDOTkKLToxMENCQTAwMDZBREU0MzMwN0Y1MEU4NDEzRjQxRjlCRTU1MDIzODBGRkQKLToxMENCQjAwMDNBMDI3RUYwMDc5NTFENTMyNEQwMjc1NUU5MkU5Qzg3MTUKLToxMENCQzAwMEU1RUZBQ0JEMjAwRjMzM0RDMUFCNjBCNzEwMEZCMzhGQTUKLToxMENCRDAwMERFNEJCRDkwNEI1QzMxRkIxOUUxNkVBNDFGQUZCMTFGNjIKLToxMENCRTAwMEZCNUMzNkZFN0I5QzM5QjBBMzM0NTI4RkI2MEZFM0I5QTEKLToxMENCRjAwMDgwN0I2QzE4RkZEMUVBMUZCNjE4RUQ2NDJEOUQ5MkM2OUMKLToxMENDMDAwMEUyMEMyMDRGODBBRkI1RUY0MkYwM0VFNDVGMkI2OTQyNkIKLToxMENDMTAwMEZFQjU3QThERkI0NTFBM0YwQkQ3QTcxOEUyOTdERjRBN0UKLToxMENDMjAwMEY1RTFGQTY4NzI0MEI4NUU4Q0U1OUQyQTlERUU4NDdENDAKLToxMENDMzAwMEY0NzFDNzQ5OEUzM0NFMEM5NDEzRjFDNzI5NTNFNTA4MUMKLToxMENDNDAwMDUxRTM0OTNDOUUzM0QzRjgyNEJFQkMzMEM2NzFBM0U1MDIKLToxMENDNTAwMDlGOTY2QUYyRUY4ODRBQzdGRjYwMEYyRTRDQTNGRkZGMzIKLToxMENDNjAwMDUwQTg3RjkxMDM1QjA3NkY4NUY1RjlBMzZBRjcxNkY1NjYKLToxMENDNzAwMDFEMzgwOUU0Nzc0NTk0NUI1MzUzRTEzQzk1N0MxQ0QyMDUKLToxMENDODAwMDlCRTU5QkZBMzQzNkRFNTgzOUM2RTIwRkRCMUU5NDUwMjIKLToxMENDOTAwMDNGM0ZDM0ZCMURGRTE4NzBENzVGNzcxQUU0NTc3RUFBOEIKLToxMENDQTAwMDg0RkRENUYzMEFDQUIxRkFFQjg5NThGRUQxRkJCNzkzREMKLToxMENDQjAwMEQwOENGMUZBNzc2MUY5NjhGRkZEQUNGRjk3M0ZGNUUzOUYKLToxMENDQzAwMDgzQjNBMUZGRTMxNjkzNTVFN0NGNkQzQkJFMzAxREUyNjIKLToxMENDRDAwMDk1REJFQzU0MkUxQkY5NTYwNkJFRTU3RDY0RDQwRjAyOUQKLToxMENDRTAwMDNFREZBRkY5NDVDQUEyREQ1NTczQzE2RUQ1RjFGOTZDQ0YKLToxMENDRjAwMEIwQkYyMkVENzlCQUNFRkIxRDVBRkIzQjc3ODMzRDM0QTIKLToxMENEMDAwMEE2QkUzM0FBN0VCRUQ2RkY2QUVDM0YxQTFFNEQ4RTQwRTkKLToxMENEMTAwMDFFRUMyREZFMEY1NjBEM0U5NDQzMDc0QzUxRkQ4RENBNUYKLToxMENEMjAwMEE1MjBGNkI3NjkwRUIzMzM5MkZFQkFGRTI3MEEwRkY0QjgKLToxMENEMzAwMDE3MkFDRjAyM0JFQjQxMjJDMTM5RTc2OEJDMjdBOTc0MEYKLToxMENENDAwMDU4N0Y3RDkyNjE1RDIzRjhCRUM1RjBGRDlGNUJCQzI0REEKLToxMENENTAwMEE0RTNCN0NGMDRCNzJEMDI3RTRCRDJENjg5MjgzQkIxQ0UKLToxMENENjAwMERERTEyQzEyRDJGMURERkZDMEYxNTFFMUI4MkQwRTFDMzYKLToxMENENzAwMEYzRkZDMjcwRjgwQzdDMTk4MUEzQzBGMEZEQTNDMjYxNUYKLToxMENEODAwMEI2NURDRkJDQUNDQjVCNDQ5MkE1Q0Y5Nzg0NkQ1OTk3NzEKLToxMENEOTAwMDc1NzZDQjhDMzNBMjIxM0Y3M0M4NkJBODNGRUJCQzY0ODQKLToxMENEQTAwMDI4OUYzMzVDNjQyOEJGRUQ4QURGOTA5RjM3MzJEQjUwQzkKLToxMENEQjAwMDdGQzE3NUQ5OTAyRjI3OEIwREY1MkI2RDJCMENGOTg1MjUKLToxMENEQzAwMEUyNUE0M0ZENjk2QTlDRkM3NkVGMDY0M0JEQzVEMjgzRjcKLToxMENERDAwMDg2N0E0MjczQ0E3N0MwN0U1OUYwQzEwMjFCRjgxNzNCQUUKLToxMENERTAwMDVEQTZFQTEwQzVDRjRFM0U2ODRCOEUyMTFGQ0JENDdFODgKLToxMENERjAwMDQ3RjU5RDM3MEREQjJGMTQ5QkRBNDExRTJFQTRBRTcwMzQKLToxMENFMDAwMDFCQjVEN0QyRUIwMkVEQTBGN0FCNDUyMjlBRDE2RjBFM0UKLToxMENFMTAwMEIxRjhDOTA3MkJBQkUwRkI5RDhCODlEOEVEOEVFNDZGOTEKLToxMENFMjAwMEZGMkI0MjIwNkZDRDk2RjE1QzlCQkREODg0RTcwNjc2NDAKLToxMENFMzAwMDE3RDc4Q0JCRkZCMDRGQjVERkY3NDRFOUZCNTFGQTMxOTAKLToxMENFNDAwMEIzRjM5M0QxREY4QkQzMTk1RDFENThCMDhGQzAzRTgxRjIKLToxMENFNTAwMENEMTVDMjdCM0U4MzUzNzY3QTIxRkZBNTA1REZGNjgyOEUKLToxMENFNjAwMDlGRDEzNUU1MTEyRkQwNEY2N0NFNTcwREU3RjIxQzA1NDYKLToxMENFNzAwMDZDN0YyNkJBREZCRjU1RkIyREI4RkVBODBERjRFN0VFOTgKLToxMENFODAwMDZDODZDRkU4N0FEQUY5RjRERDM2MTYzN0ZGQjhFNkI5MDIKLToxMENFOTAwMEY4NjM5QUU3RTU3NDY2NjdFREI2ODUzMEZFREY1REY0MEEKLToxMENFQTAwMEYxQzA3RkFGM0FDRTgxMDU4RjEzMDZFRkUzNzgwRUI5NUMKLToxMENFQjAwMDJCNDc5MEY0N0E1NjRCRTFERTI4Q0NBN0QzQjdEMzBCOUYKLToxMENFQzAwMDdBQjdDQkY3ODhDMUZFQjdDMjdDNjI4QzYzRjMzMjNDODEKLToxMENFRDAwMEVEMTYzRkRFRjkzQ0ZFMjdDRjY3NjdDQzdENzc1QjlDODQKLToxMENFRTAwMDc5MTU2QkYzRjJBQUY3MjgzRUE2NzkzREY1MTc5RTU3MDAKLToxMENFRjAwMDU4MUQyRjM1OUREOUE3QkIyNUM2NDc0OUU2QzBDRkYzOUUKLToxMENGMDAwMDdERjFGOTJGNjlCNkYxOUM1MjgyREZFODA3RTQxNzA0M0UKLToxMENGMTAwMEM2M0Q3Rjc0NUVDNTRGM0M3RTVENjM1MTUyMDE4RUQ3MjYKLToxMENGMjAwMDVCRDgzOURCNzM4MDQ3OUE5RTBGNEVBQTgwRkIwQUFGMEQKLToxMENGMzAwMEMzNzkyRDBFREFFRjQ4MTg2RjFERDYwNkNEMDYzODI3QjcKLToxMENGNDAwMDkyMEYyNUU5Rjk4ODhGRDU2QjhDRUQ1NjA1OUNDNkYzQjkKLToxMENGNTAwMDUyRUEzOTAzOEFBN0ZEMTA1RkQ2RjAzNjY2OURGRjRDNzIKLToxMENGNjAwMDc4OEE0NzZGMzc4QUE3RUVBMjlCQzNEMzQ0RjQ5RDlBNzEKLToxMENGNzAwMDJFMjFCRDRDODQyNzhEOEVFMkY1RjNGRjJBMUQyREJFOTgKLToxMENGODAwMDcxRkMyMEZEN0NEQ0Y4RjlBRjQ2M0ZGN0E2NEIzN0M0QjcKLToxMENGOTAwMDY3RkZCRkUyRTdGMTFCQzRDRkU4Nzk2QjgxRDRDNzNBRTIKLToxMENGQTAwMDA3RDJFOTE1OTAwRTI3NzM0RDY3MTc4MzlGQkREODhDNjQKLToxMENGQjAwMEYxQjNENzBFMTczNDkyN0M3RDNEQTYwNzVFNUIzNkE5OTAKLToxMENGQzAwMDExQ0Y4RjU1M0JGMUFDRDY1OTUzRUM3RTVGNTNGMUYxNDUKLToxMENGRDAwMDkwRDdBRDlFQTdGM0E3ODJERDdCQjY3QUU1QjhGMzIyQTIKLToxMENGRTAwMENCQ0NDNkYzOEJDNDExOTk5Rjk5RjY0QkE0MEE4QzlGQTYKLToxMENGRjAwMDUxQkMxRTFCNjdEREI1NzU4QjM3REU4REFFREJEOUVBMDQKLToxMEQwMDAwMEI2OUI1QTM3NkQzQzhBQTc5OEVERUVGNkU2REYxMERGNDcKLToxMEQwMTAwMEMzMDk3Njg2Mzc3NjFFQTBFRjcxNjZCN0Y3MDFCRTY5NDEKLToxMEQwMjAwMEJGQkY4NEEyMENCMEZGMDlDNkZENTZBRjQ5M0YwMkYwNTYKLToxMEQwMzAwMEJFRTY2NUYxRjAwMTQxNkFDNDc3NDE1NjJFREIwREU3OEIKLToxMEQwNDAwMDUxQ0VBRDcyNzMxMEQyRDBFMDM4QTZBRTY3NTk1RDZDODgKLToxMEQwNTAwMEJCRjMzOUI1M0NEMjlFMjM5M0E1QjFGNThFQTg3NkNGMEMKLToxMEQwNjAwMEFBM0EwRUVEMDdDMkNCMzlGQTc3M0ZGRTIxQUEzQ0JBQTUKLToxMEQwNzAwMEZENEJERTQ0MkMzRjE3RTczQ0U2QjdENEY2QUI2QkM3NUQKLToxMEQwODAwMDZGNEZFQTUzRjBEQzFGMjE1MjhFRkUzRUZBMjg1REE5NTUKLToxMEQwOTAwMDdDQjBDMjFCRkNCRTk3RDY3RjlEMEI3RUY5NzMxMDRGRjAKLToxMEQwQTAwMDlERTJDMkYzM0Q4NDI3M0VEOEY3MUZFRDg3OTdGMUJDODAKLToxMEQwQjAwMEM2RTU0Njg2RjdFODdFNzVGRDg1QkRBOUYxRkI4Qjg3NDEKLToxMEQwQzAwMDVGNkQ1RURBNzhBNTI0ODA3RTFEQTkyNkUyN0UzNkJFREQKLToxMEQwRDAwMDE5Q0UzOURDNTk0OTlBNzA3QzVFNDI3ODUyREVBNEZFNDIKLToxMEQwRTAwMDlDMkY0MjFGMTc0Q0QyM0FCQzQ4QTNGNjMzRjBGQkNBMjAKLToxMEQwRjAwMEE1RDBDRkMwNTk5M0I4QzMxNzFGRUU3OEYyRTA5RjU0NjQKLToxMEQxMDAwMEZBRjE5ODgzM0JFMDVDMDE1OUNGQzUzQ0I3RjcyQkFGRjAKLToxMEQxMTAwMDFERUJFREY3OEVFRUQ3RTMzOEI3M0MxOUI0NDhCNERGMUEKLToxMEQxMjAwMEJCRDQ3MzY3ODQwNDczNTZFOEM2REZBRkNFM0JCQTlEQTkKLToxMEQxMzAwMEM3Q0NGNkM3QzkxQjY2QzQ1RjVGRUY0MzM5QjFGOEU3RDgKLToxMEQxNDAwMDM1RDU1RURFRUYyRDMyRjhDN0I1ODEyRDE2QjA2QjZCOEQKLToxMEQxNTAwMDk3QURCMDQ4MkUyODk3MThEREE5NzBGNDA5QzE5QzEyMkMKLToxMEQxNjAwMDU3MDQ0RjcxRTU4RjhBOUY4MUYzNDEzQ0I3QjFCRTk5NTcKLToxMEQxNzAwMEMzNzNDN0M1REIxOUZEQURERjNFNjg2QUE0RTkxMTk1MkQKLToxMEQxODAwMDBGNTdDMDNFOTNBRTNGNzcwNjlCNUY1RkFGMjMxN0UwMUMKLToxMEQxOTAwMEVGRDM5RkJGQTA3MDdDRkExMEMxQjg5RDJERTNFOTNEOEQKLToxMEQxQTAwMDEwQjcxQkU2ODgxQUU3MzMyRDg3RkQ4NjYxNzU1RkFDRTMKLToxMEQxQjAwMDkwOTZCNzAyQkM1NUE5QzhFN0VCQjdBRjQwM0ZGRjk2QzIKLToxMEQxQzAwMDZBRTZFNzBGMDgwNENGMDFCRDM5MkYyMTA0RUYxRDEwRDcKLToxMEQxRDAwMDlCM0NGODI4Q0RCRkY1ODcyNEQyRUQ4RkQwQzcxMzQyRjIKLToxMEQxRTAwMDc4MUFEMDQ3NkE1QkUwNzNCMUUyRDM1MjA2RTNGM0RGMEIKLToxMEQxRjAwMEJBRDgzRTVFM0NCQzlDNTVFNUE5NTZBRjg2OTcyQ0IxOEIKLToxMEQyMDAwMEVBQUZBQzM2Q0EzNTBERkUxNDZCRjgzRDEyMjM5RTNFRDQKLToxMEQyMTAwMDRBOEZBMUYxRjVERDJGNTQzOUZENUE5NEJGNTQ3QjNFNUUKLToxMEQyMjAwMEI2REYzMjM3NDMzREE3MUJBQUQ4ODRGQTRBQjE0QTc4MDEKLToxMEQyMzAwMEI2NTg4NUM3QTNBQzQ2N0M3RUI4OTQ4ODkwQkZEMzJBRTUKLToxMEQyNDAwMDNEMERGMERENTU2QjhFOTJDMzIxRUM2N0ZEMzJBNzYxNzkKLToxMEQyNTAwMDVFNEZGNEZFNzgxQURDNEJDQTJGNjBGMkY3RkQyMjE3RkUKLToxMEQyNjAwMDlFMTM3RjgwMzQwOTcwRkVBQjhFMjhGMzkxMkY4OTY0NjIKLToxMEQyNzAwMDAxRkEzRUE3RTI0RjgzRUYxQzkxMTM2NjgyQkM2ODM2MjkKLToxMEQyODAwMEM3RTRBRkJCNTQzQTNBMTdBODVDODVFN0RGREJDRDc4M0IKLToxMEQyOTAwMDFFRTE1MjZEQ0E3Mjg4N0YyQjAxOEIxRjhFMzc1RDZBMkIKLToxMEQyQTAwMDVGOTk3MEJGNkU1RDM1QkRBN0Q5MzVFNzgzOTVFM0VBMTkKLToxMEQyQjAwMEFGNTUwMUUzN0FGNTA5M0RCOEZGQTc1NDkwQTY2Mzk0RjIKLToxMEQyQzAwMENFMjY3RkY5RjJERTU5MzQ3RjM2NjQyQTYxRTdEQ0Q4NTYKLToxMEQyRDAwMDdDQ0Y4NkIyQjQ3M0YxODQ0RkEzRUJBRTE2NUQzNTBERUYKLToxMEQyRTAwMDYzN0RFNTZGRDhCQ0Q2RDU4NTE2QzI5NkQ4M0Q4NzdBQzIKLToxMEQyRjAwMEY2Q0RBMkY5ODYwQ0I3QkFFRjM4N0YxRUYwRUJBRjlBRTUKLToxMEQzMDAwMEM3QjcwN0EyRTlFOTk2MjcxRDg2N0NEOTc5MjJFMDdCNzkKLToxMEQzMTAwMDE0REI2MkVCODdGN0IyOUM2QzVGODdGN0U3QzIzQUFDMkQKLToxMEQzMjAwMERCMUVCQjlFM0JEQjg1RjVBRUZFRDE1QzFGQ0JFRjNFMkIKLToxMEQzMzAwMDkwQzVENjYzN0QzRDE3NTM5RTFGQzg0QTYwRTUwREIxNjkKLToxMEQzNDAwMEZCNUY5NUU5NTRFNTlEOTgwQkVCQjIzRTBFQkMyQjMyOEEKLToxMEQzNTAwMDEzMTE4RUI3M0I1NkFGODNGREZCMkI1MUY2NTU0NTI2NzcKLToxMEQzNjAwMDgzNDNDQTY0RTcyQkFGRjZCRUQwOTEwNkY0QjA5MzEzQTMKLToxMEQzNzAwMEUxMUNEOTVCNkVGRjE0QTBCRjBERUQ5N0QwQ0Y0RjU3QzYKLToxMEQzODAwMEVCM0JEMjAzNEY2NkQwRjRFRUYzQ0Y5RDgyRkEwMzc1RTgKLToxMEQzOTAwMEM0Q0Y0OUYxRjVDMEUxMEM0RDBGNjhGN0EyMzU3REQ4MzcKLToxMEQzQTAwMDYzMDc3RDA0RkYwQkZCQUIxNDA0MjUyOTE5RDY1RDc5QjcKLToxMEQzQjAwMDA4Q0ZDNUY0M0E0NDc2MEZDQTNGNTM2RjU3N0Y0M0E1NTEKLToxMEQzQzAwMEU3QUI0NzZGNkVCREVGQTkzN0RBNDU2N0MxRkVGMzQ0OUYKLToxMEQzRDAwMEVDQkZBQjgyQjRCNzk0OEU3Qjk1RDI1QjJCOUQwRkY5REIKLToxMEQzRTAwMEUwODk1QkY1RkE0NkUzODc3OEUzREVBODFENzhGNUU4ODcKLToxMEQzRjAwMENERDk4MTEzQ0RGMzY3MTlCRTFCQjIwM0RGQUY3RTYyQjcKLToxMEQ0MDAwMDVGQTkwNEYzRUNCOTM1OTZCQ0Q1RTRGMjJGNTVCOTE4RjEKLToxMEQ0MTAwMDREMkY1QUZBNEI1NUNFNUYwOThEMEZENzY3MEUxOUUxODQKLToxMEQ0MjAwMDU5RDc2NDg0NDdFMzhGMkJBMTM2MDdCQ0FCNDU0NzlGOTAKLToxMEQ0MzAwMDA2RUJBQ0Q5QTVBNDZBRTYwREJEMTcxMjBGQ0U1RkFCMDMKLToxMEQ0NDAwMDc0RjJBQjY2MzM4RjcyRUYyODg3RjFFOTVGMzUzRjkxNTUKLToxMEQ0NTAwMDE4MkI2RTE1M0RGRkFCMjY0QTBGNDAxRjRGRjMyODdGNTgKLToxMEQ0NjAwMDBBRUIzNzlDNEM5MzIyRjRGODdGNTQzQ0ZDQTk3NEE4MzcKLToxMEQ0NzAwMEM5NTc0RDlGNDRCN0ZGQUY0QTc3OUEzRTlCODhFRTNDMTEKLToxMEQ0ODAwMDcxRTI4RjA3MzI2Qzg4QkYwREJDMjhDMEZFRDE4MTBDQzEKLToxMEQ0OTAwMDg5RTU4OUI4QzgwQkY2RUI2Qzc2RUU5RDRBQTg1Qzc4RjYKLToxMEQ0QTAwMDU3RTI2QUFGMDNFRjgzMjlEREQ2NTAyMTVEQzcyQkJENUMKLToxMEQ0QjAwMEI3NEREMUFGRTNFQzRDQjYxRUVCMUJEQzNCNjFDQkZBQjYKLToxMEQ0QzAwMDhBQzlCRjM4MURENkFGODZCREVGNzFFRTdDRjJBMjc0NUIKLToxMEQ0RDAwMERBRkU4OTIxMTNCQzkwNDVENjZEREI2MDg2RjlDRENDOTAKLToxMEQ0RTAwMDY0N0E2NEZERjY1N0QxRUVCQjU5QkE1RURGNjRENEU3QzcKLToxMEQ0RjAwMDVGQ0UxMDU1M0RDMUVDRjAzQkE5NUQwMEU3MDhFM0UxQ0MKLToxMEQ1MDAwMEExMzA5M0UxRTE5RUZBRTMyODRGRUZERENFQTEzQ0JEQ0YKLToxMEQ1MTAwMDI1OTNFMUUzNUUzRTg0NzI5OUI0MzNGQjk5RDgyODNFQUIKLToxMEQ1MjAwMEE4NUNCQTA0OTMwMDdDRkMzNUM3Q0U3N0YzMDE0MUZGQjkKLToxMEQ1MzAwMEZFQzZGRDdCNTYyRjA0M0IzMDlBM0ZCRUE3RTJFOTJCODcKLToxMEQ1NDAwMDk5RUEzQjg0RTlDMTNCMzNEMTNGMEM3MEQwREY1QjlGNEMKLToxMEQ1NTAwMDY3RjBBRURGQkUwNUNGMjc1RkNDNTBFRDZCOTUzRjJGNTgKLToxMEQ1NjAwMEMyM0FDRDhDQ0MyRjQ1OURERjA1QzdDODM2RDAxNzk0NjUKLToxMEQ1NzAwMDZGNEM3OEJFRTQ3NTMzQzI3NUY1QUJERjZDODI3QUUyMkUKLToxMEQ1ODAwMDU0MTdERUY3NDIzQjk2RTZGQjk2Mjc4NDVBNzVGMTNBMkMKLToxMEQ1OTAwMENEQUVDOUY3MzM3RUE4RTU2NTgzNUREODkwRTkzM0Q4NzEKLToxMEQ1QTAwMEU5RDFGNkM2RkZFODAzOTZGNkE4NzhGQTRCRTk4M0MzRkIKLToxMEQ1QjAwMEFBNURGMEE3RUE4MzQ3NTRGRThGRDYwQkEzN0NCQzkzRTkKLToxMEQ1QzAwMEYxRjFBNUYzRkZCRTEwRjJEMTdDRkNBRENDOEZBNjk3OTQKLToxMEQ1RDAwMEEyRjlGNzRBRUZERDQ4RDdDQTEyMjIxNjFBRkNBMzlDMUIKLToxMEQ1RTAwMDEwRjhDMUEzRjQxRkYxOTMzODM4REZGNjQ0RUY0RkE2Q0IKLToxMEQ1RjAwMDQxOUNFQkQyREVENUVCNjI4REZGNDQxNkIzQjMzNjI2RTkKLToxMEQ2MDAwMDRBMjY3QzFGRjI3NTQ2NjdEMTcyMjJCQUREMjg1RkM0QjQKLToxMEQ2MTAwMDg5MkZENkQ2Q0M0MUZGRjA1Q0NENkRCOTcwRUYyRERBRjUKLToxMEQ2MjAwMDNGMTg1MzlGOTM1MzU3ODE3RkRDQUFGQUM3RkJBQ0Y1OTEKLToxMEQ2MzAwMEJEMzFFMEY1NjYzMTdDRTYxNzhDOUMwMjdDQkZERkMwMTMKLToxMEQ2NDAwMEUxN0Q2MkY4RDNEQkU5Nzc5RkY3RkY2MDU4MUEwQkVGQjMKLToxMEQ2NTAwMDY4NUVGMzRGQjZCM0YxQTJDNzc5NTc1REI3NTFGRjQ0ODcKLToxMEQ2NjAwMEExRkUwOUM1RjM3MEFEMzkxMUNFQjE2QUZFQzlCMEYyQTEKLToxMEQ2NzAwMEU3RjU0RkRFMjQyM0ZGMzAwQkQ2Rjk2ODZDQjgxQ0VBQkYKLToxMEQ2ODAwMEZDQUYwOEMxN0Q3MzI4MUM1Nzk3OThGRDBBRjA4Qjg5NjEKLToxMEQ2OTAwMEI2RDNGOTI1RDFFREZFQThDRUU3Q0RFRDM3Mjk4RkNFNTMKLToxMEQ2QTAwMDFCRTNDOUYxRjg2RDE0QUUzRjkxREZGQTg0OTExQ0UwRTEKLToxMEQ2QjAwMEZCMzc4RjdDNzBGMTUxOThDRjExMDdCRTNGMTZERENGM0QKLToxMEQ2QzAwMEQ3QjJDQ0FBN0ZFMDQwM0VEMEY0RUY4MEQwQjNGOTA1Q0EKLToxMEQ2RDAwMERBRUVDRDNCMzJGRDNCODg4RTJGMDhFNTBCRkFGREMyMUEKLToxMEQ2RTAwMDFGMjk1RkY4NTFCRTIxMUZGN0Y1M0FFQjYzRjkyOTgzMzMKLToxMEQ2RjAwMEFBM0YxNDFEQjcxMTdCQkZEMTA0N0VCMTRDRkMxNjdEMkYKLToxMEQ3MDAwMERDRTkwRDc1REQ3RkExQ0FBNUEyMkNBNjNGRUZBQTVEQkQKLToxMEQ3MTAwMDIxNDBCQ0U4RkVEMTc4MTE0MUU3NDI5QzlBN0QwNEZDOEYKLToxMEQ3MjAwMENCRDdENDdCMDJDQUM2ODQ5OEYxREU5OTJBNUUyNzhBQjkKLToxMEQ3MzAwMDFGQUNBOTMzRkFGNTc3RDUxQUU1QzczQkExRkM1MTNEREIKLToxMEQ3NDAwMDUyMzhDRTdFOTQ0NkJGRjFDNkJCNTFGREQxMTdCQUI5NEYKLToxMEQ3NTAwMEZEODA4OUU2RjdEOUFDMUJEMzFGQUI0OEQzM0M4QzczNTMKLToxMEQ3NjAwMEQwRjU4MUI0OTYzNDREN0I4MUMyRjNDRUExOTUwOTYwOEEKLToxMEQ3NzAwMDQ3RkQ4MjkwNkFCNEUzM0ZGOEVDMzRCRDVEMTI1NEYxOEEKLToxMEQ3ODAwMEZDN0VFRDY3RUYwMDcyNzk0MzY4OUExNjRCRkY0NEM3NDEKLToxMEQ3OTAwMDY5N0UxMThBN0QyRUUzMkU1NUFFQkVBMUREQTdCODJCODIKLToxMEQ3QTAwMDc2M0M3RjhCM0FFRTFCNzVFM0YzNEQ3NERDQTY3Njk5REQKLToxMEQ3QjAwMDcxREU0QTE2QjM4N0RFQTg2QjczMDQ5OTVGQ0RDNkZEOTAKLToxMEQ3QzAwMDFCMzYyRUU4MkRCRDVEQUE2NEZENzlGNEUzMzBDNEVGNkQKLToxMEQ3RDAwMDYxOUNFRDg0NDAzQ0E1NEY1MEE2RUFDRjVEQTU2NDMzMjMKLToxMEQ3RTAwMDNDRTQxNzhEQkYwRkE1RURBNzY4RjVBMkVEQUM5RjY3RDAKLToxMEQ3RjAwMDRBODY3QkIzQjVDQjhDNzBCNTY5RjYyRDExMzEwRTcyQUMKLToxMEQ4MDAwMDE1RjRBNTI3QTIyRkVGQjRGQTFGMDQzQTIwMkUwOUNCNTYKLToxMEQ4MTAwMDRGQTg3OEJGQkJGRURGMkMzMDdGMkEzRjNCRjAxRURCREEKLToxMEQ4MjAwMDU5OTMwOEYyQjNFQzdDQzhBMkM3Q0I4NTFCRjRBQjJFOEUKLToxMEQ4MzAwMEE4RjZDMjQ0NzIzNEJGNjgwNEU1REJGQjIxMTdERThGMTMKLToxMEQ4NDAwMDc4RjMwQkJGQjNDNEVBQjdGNjdBOTZFMTFDRjFGQTQwNUQKLToxMEQ4NTAwMEVDQjg4QTk4MjU4QzhCNjczMUNCODhCRkY1RDc3M0YxRUMKLToxMEQ4NjAwMDVDNzAzQ0ZCRkYxMEM4QUY5OTYwOEYxRUU5RDBEQkZGRjYKLToxMEQ4NzAwMDRGNjU0OUFBRkRBRkNBMzM5RUQ5RkRGMUUyQUY0MzJBRjUKLToxMEQ4ODAwMDlENEQxNDdGRDVGNEIzNTYyRjdBRkRCNTM0NUE1RjBFRjMKLToxMEQ4OTAwMEFCRkMxQzVERUY1MkQ2OEREMUREQTgxRDEzODdFRUUyRTcKLToxMEQ4QTAwMDhEQUJGOTFGNUFEQzM3QkY5OEI2OEZCMTJGMzM2NjFDOEEKLToxMEQ4QjAwMEI1NUVGNDM4NkY0NkFEQ0YxODNGMjI0RURDMkUyOTlCNjMKLToxMEQ4QzAwMEUxMzcxODI3NkU5Nzk0Q0RFMjc2NjcwOUQzOEI0QUM4NjMKLToxMEQ4RDAwMDg5N0FFQ0NBRDE3QkY3ODFCOUY3QzBFMkNGOUQwNkY1MTIKLToxMEQ4RTAwMEQ2QThDNjZCRUFFQTVGM0QwNTdFQUFFNjU3NDRFQ0YxOEUKLToxMEQ4RjAwMDYwMUJFQzkzNUREREMxQTFCRDExM0Q0RUI0NURERTA4NDIKLToxMEQ5MDAwMEVGMTU4MjIwNTVFMzA3NDU2NjE5RTNENEU0MzE3NkJFNkUKLToxMEQ5MTAwMERGRDNCQzFBRUQ0QjJEM0VERDI3MDQ3NjI0RDBFRkI3QzQKLToxMEQ5MjAwMDZDRkZCNzZEQTA1RjM1M0ZGRTJEOEJGRjQxMTY2NzY2MUMKLToxMEQ5MzAwMEY2RUU4NTVFMTdERTczREQzQUVBRkZGOTMxREUzOENBQUUKLToxMEQ5NDAwMEZGNkFGQzcxQTJGNTE4OTUzNzcxRDY2MzIyNzkxMzJGRkYKLToxMEQ5NTAwMDJFQTJBNUEzRkIyQzgyNTRGODBBOUM0QkU1MTJGREJEMTgKLToxMEQ5NjAwMDM0QUQxMTA4MEY3OEE4NTlDRUExOUY1OTIzQzg0QjMxNjcKLToxMEQ5NzAwMERFRkNBQUM5MDQ3OURGNzJERjZFMzgwN0JGQjJEQTIyOTMKLToxMEQ5ODAwMERCQTVDOEZFNEJFOTZCMEQ4NUFGODA3RjQxMjcwQzdFODAKLToxMEQ5OTAwMEVDQzAyRkE1N0Y4MkZCQzFBRjJGQjY0QkIwM0Y3Mjc2OTQKLToxMEQ5QTAwMDlFMzRFOEExRjlCMzc3NzAyMkQ4M0Q1NThCRUYzNzRGRkQKLToxMEQ5QjAwMDgzRjE1NjcxRjgwRThEQjM5OUE4RTdCNTZGNUQ1RTU5ODYKLToxMEQ5QzAwMDQwQzgzNzAwNDREREJEOEYxQTZEOUY0NjU5QkIwRkVFMkUKLToxMEQ5RDAwMENENEU0RDFEMzBCOTI4NEFCRjdCNzhFRDNFMUI4NUFCM0YKLToxMEQ5RTAwMEEzMzVFMDg1RkI3OEY3NjU5N0VDODNGQjc4Njk2OUYyRUUKLToxMEQ5RjAwMEQwMDI2QTQ3MURDQzlFQjExQ0YyMDM3RkEzRjU1N0JBMzMKLToxMERBMDAwMDBGRUVERkJENjgwQUZBMzg1QUZFODNFQzY1Q0I3OUQ4OTEKLToxMERBMTAwMDhGOThBNDhEQkYxRUNCRUY1QUYyRTBCMTZEQjRGRkI3NjMKLToxMERBMjAwMDBGNkY1OTBFNjdEN0NCRUFCNEYxMUY1OTVFQzk1M0ZBOEQKLToxMERBMzAwMDlGQUJFNTFGNEI4NEJDQzc0OTIyRkI0Q0IzMDlCMTQ0RTMKLToxMERBNDAwMEVFRjdFMTc5Rjc4MUQxRkI3QzJEQ0JFMUZDRjhFQkU1M0EKLToxMERBNTAwMDREOTU3MDhGQjNFQ0NCMURGQjhBQTcxMDMyNkI1OUI5NzMKLToxMERBNjAwMDI4RDNGQ0RDOUMyRjJGNzdDMkZFMzFBMUY0NDhGMzcyM0YKLToxMERBNzAwMENFNTcxMDdFOEZEOUE0RjYxRkRBMjc2NzAzM0NDQTU0MEQKLToxMERBODAwMDI4RTc5NDY3RjY1NUJCRTEzRUMyRjA2OTIwQ0I4NzlCM0YKLToxMERBOTAwMDdCNkM2OTg2N0IwOThBMENBNjg5NzBBMjNDOUM4NUUwMTgKLToxMERBQTAwMEE4RkJEQUQ5RTE2OUVDQkU5RDlBMkY2MjcxOEFEMUJDREMKLToxMERBQjAwMDk3RTUwNzc2QzRCRTdGRjI2MTBFOTM1RjAzOEVEOEU1Q0IKLToxMERBQzAwMDNEMkFERjZCRkJBRjQ5RTc4OUZDNkMwQ0ZFRkYzQ0M0RDEKLToxMERBRDAwMEZENjc0NkY4RTkxNEM0NDMzQ0Y4RTQ1QzUzMkJFQ0MzRkYKLToxMERBRTAwMERBMTg5Q0YxRjY3MUY3QTlFMzE0QjQyNkUxM0I0NUNCQjMKLToxMERBRjAwMDlBOUNGOEFFQ0UyNDNGOTMzNzk0OEJGODk1MjBGRkNEQjcKLToxMERCMDAwMDI2ODQzM0Q1Q0NFMTdCMjY2OTBFMTIzQzRFRDNENDE0NDcKLToxMERCMTAwMEY2QkVDOTMyOEE2QTc4Nzc2NEUxQTRDMDUxM0NERjlCQzMKLToxMERCMjAwMDlFNTFEMjA2RTdFQjVBN0ZDRTgzMURBNkI1MUYwQkE3RTkKLToxMERCMzAwMEI4MDVFMDRDMzVENzk0NkMyOUQ2RTFBRjk4QzE0REQ3RTQKLToxMERCNDAwMDVENkQyNzdGMTNERTdCMTkxODlBOUEwRjc2NzU2NUI2N0YKLToxMERCNTAwMDY0ODhDQjk0MERENTU4RTA1Q0VBRTUxQzU1NEU0OEFDODIKLToxMERCNjAwMDdENkEyNTkzMkIyMzVCRDRGNzJBNkNGRTEyNDM1QzVGRkUKLToxMERCNzAwMDlEN0Y2NUU3QjIyRjQxQkQ4NjIxMEI4MTczODhEQjhFQzcKLToxMERCODAwMDk3RTMzQkZERjFGOEJGMDFDRUJCRUJGNDc2MDMxRkM2NzQKLToxMERCOTAwMDczRTYwRDcwREU3RDA2RjRGNzUzMDFDRTM3NDIzRkUwQTkKLToxMERCQTAwMDFGQzBCRDBFQjA5QjUyREI2MkFGQjcxNjU3NkVCOEVFMEEKLToxMERCQjAwMDI2Q0EwQ0ZENzc4NkFGNDhGRjFFMkM5RjY4NUU5MUZFM0IKLToxMERCQzAwMDhDRjdGOEM2RjZBN0RFRTdEM0YwQ0VBQjc4MTc2MkMzQzIKLToxMERCRDAwMEY5QUE0Njk3MTRERjI2MUQzREFENTJFOThCNEEzRjdDREEKLToxMERCRTAwMEQ3RjdDMkYyRTI1RUZEN0IwNTg0RUM2MEU3M0E3OEJBRDMKLToxMERCRjAwMDhFNjA0RjBFMzlGMDdERTAzMjlFQzlDN0IyQTE2NDUxRUMKLToxMERDMDAwMEUxQzZEMjg1QjZBRTAzQzk0REY4M0VEMUM4MEEyRUU2QUMKLToxMERDMTAwMEVGMEY5Q0Q3RTA1MkVEQTdGNEJBQTA3OTgzMEUzRThEQUEKLToxMERDMjAwMEZFMjNGRDBGN0Q0MUUzOEY3NUM4Qjc3QjE5N0M2MDZGQzQKLToxMERDMzAwMEMwM0NGQ0UxNjlGQTczMjAxQUZDQjc1M0Q5ODFFNzQ5NkIKLToxMERDNDAwMERCNTRGQ0RGRTEwQUY1NzIxMUJDOERDNTdGRDYwNEVCMTUKLToxMERDNTAwMDk5OEJFNTY1NDMyNzA1OTg2NzQzMUMzRUZENjUwRTNCQTAKLToxMERDNjAwMDI3OTI3RTNFOUMwOEU3MDM5NjY2MzNGRDM1RDAzRkMzN0UKLToxMERDNzAwMDdFMUJGMEM1MzIxM0UxMjQzNjZGQjAzM0NCMzRGOTRBNDIKLToxMERDODAwMERFRkI1OTA1OTVBRkU5QTM3OTJBNUYyNTU4ODc1MTc5QkQKLToxMERDOTAwMDFCQjZEOTIyRjU3RjlBRjNERUYyNzZBQTNGM0M1Njc2ODAKLToxMERDQTAwMDFGOENEQThGMzZBMkJCODc2OENENjFGMURCRDlDMUQ4NzIKLToxMERDQjAwMEZCRDZDMzM5MDkwNkI5RjU1NDczMjU3OTlCQ0U2RjY1MzgKLToxMERDQzAwMDM2RDNFN0IzODcxNTdDMjc0OUUzRUI2OEI5NTQ5OEMzOEIKLToxMERDRDAwMEQ2RDE5N0MzRUNGMThGNUYyRTcxMTNDOEE1MTVBQTVDM0UKLToxMERDRTAwMDYyRTVDNDEzNjg4MEYyMzQ5MzdBMkY0MTY0RUJCRUYxOEQKLToxMERDRjAwMDQ3MzMwQTIxMEVCN0Q1NkI5NkUwOUVDMzRBQ0U5RkYzRjkKLToxMEREMDAwMDJEM0E0RUFENERFQTQ4OTAyMkY0NTE0QjZDOTIwQkYwRjcKLToxMEREMTAwMDRENDc4MDdCQUYzNUNCRUM5ODg3M0ZCMDNCRkVCRDg3NEUKLToxMEREMjAwMDYzRjQ0N0E0QTREQTcxRUM1QTBEOUVBRDVFMDFDN0RCMjMKLToxMEREMzAwMEI4QUIzMDI5QTg4NzkzMEYzQzhCRjEzREE3MEFBNzJEREMKLToxMERENDAwMDRBNUZGMUM2N0M1QTVBQjhEMTY0RDY5NUJCOThGRUVBQjAKLToxMERENTAwMEY2Q0FFNTM5NjA1RkFBRTc5QkEyRURBMjdCQjIzOTgzRTAKLToxMERENjAwMDFDRDZFQ0EyREY3OTE5OUY1MEZFNDVGRjMxOURGQThGM0EKLToxMERENzAwMDA0RUU3QkY0MDdGMDNDMTgzQzYwNTQ4OEY3NzVEOUZCM0YKLToxMEREODAwMEM2NkYxRDI3NzNDMTRGRDJGQUI5MkJBN0Q4RDA2RkRENEMKLToxMEREOTAwMDZBQkE0ODlGQTRDQzY5QUI5NDJGRUJFNEQ5MTlGNTdERkUKLToxMEREQTAwMDdBNEEwRjMzODE1RjU3RTcxMDYzM0I3MzIwMUJFRTk1NzAKLToxMEREQjAwMDkzNzRBQjFGRTRDRDI5MjE3MDE4RDc1NzI0NkU1OERGMTgKLToxMEREQzAwMDg1RTYyRDg3OTEyRUNDQzRERDg2RTdBNDhFNjBGQkVBMjQKLToxMERERDAwMEJBOTE1MkI0NTMzRjMwODc0MUVGRkMzQzM3MDNFMzM5RUIKLToxMERERTAwMEE5NEU0NkI3QTdFQzRERDg4RTI3NTIzMkNBMTE1NUVFMzAKLToxMERERjAwMEZEM0M3NzBBQkU3RkExQzlDRkM4N0QxNkFEMUY1NjdFRjgKLToxMERFMDAwMDhBNUI5MTBERUZDNDlFNEE5RDVDRDJDNjE5RUQxREIwOTAKLToxMERFMTAwMDdGMjJGNkQyRjNGQjZFQTdGQzM4QUJCQTNGNEM2MUE2NkIKLToxMERFMjAwMDUyRTVBNUU1OEZEMkZBNUI3Mjk4RkUzQkU1MEIwQ0MwN0MKLToxMERFMzAwMEI4QTdEQzQ0MDRGODY3MEYwNzlGODVGQzYyQUYxM0RGQzcKLToxMERFNDAwMDcxRDNENjIzQ0RDNDdFMUYyNjRERkRGRDE1RTAxMzQ4QUEKLToxMERFNTAwMEM1NUNDNjZGODc3M0Q5M0FCRUEzRTZEMzEyNjNGRjlFMzMKLToxMERFNjAwMENDN0ZBOEY1N0FFMEZFMUZBREQ3NUQxRUZCREVFODFFNzUKLToxMERFNzAwMDk1OEYxQjZEM0RENTcwOTU1RTc3Q0YxM0VGMkRGMzg0OTUKLToxMERFODAwMERBNTVCNENBREUxQ0Q2MEZENTY3ODhBRkNBQ0UzQUZDQzUKLToxMERFOTAwMDNEQjFGNzg3NTZFMUJCQUVBM0JGRjMwMUVGNTREMTc1OTcKLToxMERFQTAwMDBGOTM5NUZCMDFFRkMyMkZDQzc4N0VCM0MzQzJFODUyMkIKLToxMERFQjAwMDcwMDc0NUI4ODc5NEUyOENFREVGN0U1Nzg1MjdDNUNDNzcKLToxMERFQzAwMERFRUJENkVFMkY1OEQ0RkJGQ0M3NTQ3QjJDRDE1QjhCRkEKLToxMERFRDAwMDcyMURERTU4OTM3Q0YwMkVEQjA4REVDRkQ1RDYzMUZBRUEKLToxMERFRTAwMDNDQUU0NUJEQzc3RkYzRjY0MzQ5MUNGQkExRDQ2MDNGNjAKLToxMERFRjAwMDY4RTM0NkRCMTExN0UxM0Q2RTVEQkM3QjlERjdEQzQyQkMKLToxMERGMDAwMEEyQUJGRjY5MzJEQzAxRkQ3RDdBNUI5NjIxMkUxMUNGMzkKLToxMERGMTAwMEZFRjg5MTJBNkZDMTVFNTA2MkMyMjUxOEJFNUZBNDdFRDIKLToxMERGMjAwMEEwQTIxRkZGMEExQjNGMzJBRTkzMjhCQTcxRjdFNkM4QzIKLToxMERGMzAwMDNGQ0VDMUY4Q0Q1QzExREZCMUIwMTMzQzBGNUJBNkJFODQKLToxMERGNDAwMDVGNDdGNTEzQkU1NzQ4RjU1MjM1Qzg2RkNEMkYwMkJFNTcKLToxMERGNTAwMDE3OTM4MEFGQ0JDRkU2QTRFQUY0QTREQTJFNUExRURERTUKLToxMERGNjAwMEExREEwMTc3QThGQTI2RTlCQzY2MzczQTI0OEU4QkU4NTUKLToxMERGNzAwMDlEQjE3QThCNTNFREU4NjhGOTE4QUQxNzhDNzYzNUE1MEQKLToxMERGODAwMDVCNDU2RjA3OENFMTE3MTVBRjM3NEYxRjkzRTJEMEM3ODIKLToxMERGOTAwMDJEN0YxMUZCQjI2QzZFRDAzQzBERTQ2NjM1NDc2MDFGREYKLToxMERGQTAwMDY0NTY5NTUxREYzQjcyOTlERkUxQzg3NTFBQ0VFMUQ2MTAKLToxMERGQjAwMEQ0MTlFQjI1NDIzREUwQUI1Q0U3MERGOTI5N0E3REM0MkQKLToxMERGQzAwMDk5NDFFRUIxRkUzNkFCRjRFMDdCRjdBQzAwRUYzNzJFQjMKLToxMERGRDAwMEM5NjVGNjUwNDk5RTlDOUE0QkQzMjM3RkE4RUM4M0RGRkEKLToxMERGRTAwMEExMTg2OUU1NDlBRjA3REFDOTdEQzMxRTk4OTc0RDA0QUEKLToxMERGRjAwMDNGQjU3QzZENTVEMTExNUE2RUY5QTkwNURGOUQyNDI3RDcKLToxMEUwMDAwMDYyRkJGN0FFNjY0RUJFOEZGMjczQkUyQUU3MUEzQzZDMTcKLToxMEUwMTAwMDVFMEQ5RUIwNTA0MEUxQzg2QzYwRjA2NEY3MEY3MkJDQkEKLToxMEUwMjAwMDRFRUU2NUQ3QjM3QUM1QjkxNjgzRkVGMTQzOUVDMjc3MkIKLToxMEUwMzAwMDZCQUUxNkJGMENCNUMyRUZBMTY0RDdDQjNDRThCQkNDMkUKLToxMEUwNDAwMDdFOEVBOEVGNkVFMjdCQTk5OTdFRDZCRkNCMUZFMkVFNTMKLToxMEUwNTAwMDJEOEVDQ0JCQ0JCNEEyMThGNDQ1NTc5QUQzMEZGQUUyNUQKLToxMEUwNjAwMDczNzlDMTMyOTg3N0MzODU3MDE4RDAzNkVCQzIxMDBGMjAKLToxMEUwNzAwMDc2REZGRTNDNzkxNjdDRDdFNjI3OTlDNTRDRDgxRjc3MEEKLToxMEUwODAwMDVFNjBGMEY1NDREMTNGMjFCQkQ1NzVFOTY1RjBCOTAyN0EKLToxMEUwOTAwMDI1MDA0RjVBQTI4NEVGMTBEMUJGN0NEMEFCNjlDOUFBMkEKLToxMEUwQTAwMERFNDgyMzQxNzgyRjg4RDg2ODNEQjA4MzFDQjQ5RUZFOUIKLToxMEUwQjAwMERFMjYwOTk0QzIzRTQxMjg3NURBNzREMDczMEIxREZFMkEKLToxMEUwQzAwMDkzMzZEMEFGRDM3REQzRTE1REExMTcwRUM3OEVBN0Q3MEUKLToxMEUwRDAwMEFBN0E4N0MyN0ZBNzFFRkU3OEZDMzFGQURFQkE1QUNGMzEKLToxMEUwRTAwMDEyQzc4RkQ2RThERTU5MUREQjVFQTU5QTAwQ0JDQkQ3RDEKLToxMEUwRjAwMDdBRUU4NkY5MzRCNDBCRjgxQjVEMUFERUY3RTcwNTM2QzUKLToxMEUxMDAwMEU2QTZDMjNBMURFMTgwNUYzM0ZCQ0I5MUFFMzIxNTlFOEQKLToxMEUxMTAwMDgwNUREMUVFQzgwREMxM0JCMkVEQzk5RjRBMDdGQ0M3NzcKLToxMEUxMjAwMDgzQkJBMUQ5MkNERkE3RTdFNzc2MDFEN0UzNDhENEY5NzEKLToxMEUxMzAwMDM1Q0RDRjc4MkM5N0U5QTNEMzc5ODFBRDMwRkVFNjEzQTYKLToxMEUxNDAwMDA3RjA5Q0UwODM0NzJGMDlFM0JERUI3M0EzNzhFM0VBNzQKLToxMEUxNTAwMDk5RkZEMkIwODZCRDk3NTFCRTk2NDczQURDRDQyRUUwRTcKLToxMEUxNjAwMEJCRUEwRENGMUUwRkUzN0VGMTc2ODJGQkEwMERGREM3NEIKLToxMEUxNzAwMDRGQzMzQkFENTkwREYyNENGREVGMTI2NDM1QjA3N0UzNjAKLToxMEUxODAwMEQyMTI0NjdGMUY1NDAwQkQ5REQ5QkZBMjAxRTk1QTI0NzcKLToxMEUxOTAwMDIyNDEzQTBBQTJERDk1NkQ2M0Y2QTg4NkRGRDM0MjM4QTQKLToxMEUxQTAwMDE3RTI2N0E3NERDNERGNDZDQkFGNTk5NDIyODlFNkFGOEIKLToxMEUxQjAwMEY5MUM3RTc4N0ZFMUVGOEZCRjIxM0QwNjc4ODZCODE4ODUKLToxMEUxQzAwMEJDN0I5MDE3RkMxMkUwQTNCQjk1OUQyN0VGNUU0OEVENEEKLToxMEUxRDAwMDFFNUE2RkExOTM2Qzg1RkNDMjM2MTcwMUZFQjg1MTNDRTQKLToxMEUxRTAwMENDOEFBMjhCNTlEQjE5OUZGQzI4Mzc1MUU1NTc4MkVGNjcKLToxMEUxRjAwMDI5MURDRjRENTBFREE4NjAxRERBQUY3NDFFOUQ3MzEwMjAKLToxMEUyMDAwMDJFOUM4Nzk4MkI3RjE1RTk1NjRDQzY3MTMzMUJDMjlDRjgKLToxMEUyMTAwMEZFRkU4OTk2NDZFODRBN0UzNjM3RjU2NkUwRUNDNzdEMTUKLToxMEUyMjAwMEM2NERBQTlDMjk1RjdCOTQ3QjVCNDcwNzJGRTY5QTkxOUEKLToxMEUyMzAwMDZFMzI5RjNEQzI4MTdGNDhDQjVCMTc3QUIwM0VDNjA3RTYKLToxMEUyNDAwMDMzOUY2NTdFRDMyNjVBN0VCRjQxQUU2Q0MwRjk3NDM5QzgKLToxMEUyNTAwMDk4RkQ0OEU1Q0E0OTgwRUI5NDY5MEJCRUVGNzc2QTNBQUUKLToxMEUyNjAwMEMxNzc2NkVGQjgxMDNFOERFMjU5ODVGNzk0QzBENjkzMUEKLToxMEUyNzAwMEE3Nzg2OEE1Rjk5RkU1NEEzOEZFNjkyMTc4MUZBQ0ZCQUQKLToxMEUyODAwMEU5NEM3NkJGQkJDQkI0MDNERjNCRDVGODNFOUE0RjdGNUEKLToxMEUyOTAwMDk2Q0JGQ0M5Q0MzNTQ3Mzk4ODI3Nzg5Q0NDOUVENEUwRjYKLToxMEUyQTAwMEQzRUE5NUU0NTU5QzA1RkNDRUFBMUU0MjNDMzRBRUUxNkYKLToxMEUyQjAwMEQ5N0QwRDE1OUU4NTQyQTAwMEZDQjQ2MUI1QkY5M0FCMUUKLToxMEUyQzAwMEJGNkQzRTQ0RTE2QjJDRTY5MDlFOUZGQ0JCNTc5MTJFQTgKLToxMEUyRDAwMDFCN0IzOEY2QkI0MTNEQUYwQUFCNzRGRUQ1QzFFRkJEMjkKLToxMEUyRTAwMDhBN0E2NUU5MDA4QjFGMzQwRTFDRTdFRjc1ODFCRTM5MTEKLToxMEUyRjAwMDg5RjREOTQ4RTlDRjVFMEFFQkM2RUNEODZCOTY3MDJFNEMKLToxMEUzMDAwMEU4Q0I2OEZBNzQ1NjMzQjkwODMxRDc0MkY2MEUxQ0VFRTIKLToxMEUzMTAwMEZGODZENkRBRDBFRUQ3RTRBRkE4QzIwOUVGMDg4MjdDMzgKLToxMEUzMjAwMEZEOERDQUVGNUFGRjExN0ZENUVFMDdGQUY2QkQzQkZEMTIKLToxMEUzMzAwMDI0QkNFQkQ2RThFN0ZDNzAxRUY5M0Y0NkY1MDk5M0Q3RkQKLToxMEUzNDAwMDUyMjJGQzc2NjBBNEZGNjhGQ0U1RTYzMUY5MUE0MzhGOUYKLToxMEUzNTAwMDdDMTg0QjhGNjg3QUQ2Rjc3NDA1QkU5N0FDQUQxRkFGQUIKLToxMEUzNjAwMEUyN0Q1NEJGRTdCMUZCNTc4OTc5QkMwQThGRUM4NTM4NTEKLToxMEUzNzAwMEI2NDRGOUI5QkIxNERFRjUwQjE0NEI4MDlGNTRBNzFGQUMKLToxMEUzODAwMEUyM0I3RkVGN0U1RERBQTBDM0Q3Njk4MUYyM0JDRDlGOTAKLToxMEUzOTAwMENFNzcyMDNDOTQyRjkyRjI3NEVCRDc1MENDN0U2N0VBNzQKLToxMEUzQTAwMEM5RUZBRTQwQkMzNkMwREE1MUJDMzYwNEVGQkIwRkYxNEEKLToxMEUzQjAwMEVDMjVFMjMxOTAyRjQxMjZCRjFBRDZEQ0M1REUwNUQ3MDkKLToxMEUzQzAwMEY0REY3MzFDRTJCRjQxNzFFMTNCRDc0QkZCNTcyMDdENkIKLToxMEUzRDAwMDEyOEZERDVGQzhBMTVDQzM3NUQ2Rjg0Q0NDRDVGNjFEOTUKLToxMEUzRTAwMEQ4QkI0M0Q0QUY2Rjg1Nzg4OUU2RDcyN0Q2MDU5NDA0ODgKLToxMEUzRjAwMDY5MkM5RkE2QTg3RUZENENENUFGQjdDQ0I2RkQ1OUZEQzQKLToxMEU0MDAwMEZBNERDRDNGNDFGRkU3MjFFRjhGMzBENUY4ODRGQThERUIKLToxMEU0MTAwMDA2N0VCQTJEOEZEOTJEOTI5QTU2RTQzMUJFREM1NERBOUQKLToxMEU0MjAwMDhGRjRCRkU5NzIxM0YyOEZBQjlBQzkxMUQ3MDVBM0ZDMjEKLToxMEU0MzAwMEQzRTI2MEQ0ODM2Mzc0RThFQzVGMDRGQjExMEJCRkMyQ0EKLToxMEU0NDAwMDg5MjAwN0UyQzFGRDE5QUVFOTY3NzA1RTg1MUM2N0U3QTgKLToxMEU0NTAwMDI4MTY3Q0YwRjM0NEZEM0JBNDM1Nzk4Q0JFQUZGNTk5Q0EKLToxMEU0NjAwMDQ5MThGMENEMzcwOUUzRDlCRkYxRkFDQjA5NTdDREY5RjcKLToxMEU0NzAwMDI3QkE3RUZGRDI5Nzg0RTc4MkFFM0RCQkYyRjM5MDU3NzYKLToxMEU0ODAwMDhFMjZFMTM5OTI5QzcwMkREMkM1MzVDRjFDM0ZEMDgxQUMKLToxMEU0OTAwMEE3OERFMUU5NUE3RjI1RDJDRkJCRTk5MjA5REUwOTZCNEUKLToxMEU0QTAwMEVEN0Y2MjNFRkM1RTc0QkQwQUQ3QkJERjM1MzcwMzFFQ0QKLToxMEU0QjAwMDc2N0NFRDNCRjNFMTVEQzk0RDIxMkUwNUVFOUI1REVCRDYKLToxMEU0QzAwMEZCQ0ExRjQxRUZENTFGN0QxOENGN0RCNTdERjM3RkExMUUKLToxMEU0RDAwMERENkQwQTFENjFERkZCOTI0NEE4NzdGNTk5MDNGMzAxMTYKLToxMEU0RTAwMEJGNkRGRDZENThGRUVFMzM0NzMwN0ZGMjZCREYzMTFGOUQKLToxMEU0RjAwMDJBOEREMEYxQkJERjNERjJDM0RGNDMzRTkwODhGNzcyMzcKLToxMEU1MDAwMDFBODI0RjNFMEU3OTUyOUJDOEVFNUQwNTVGMTFGNEJGMzMKLToxMEU1MTAwMERGNzVGMEY4MjBGMkExNDYxNzRCRkIzOUY1REQzMDAxMkQKLToxMEU1MjAwMENGNzk2OEY0RkI1NjQ1NzExOUYwMURBNTUwQkY3OTNFQUYKLToxMEU1MzAwMENENzcyN0Q0Qzc4QTIzRUU1MUU3REIwMEI0MDhFM0FFREEKLToxMEU1NDAwMEUxNDJDMDA3NUQ4MkQyODdGMjVDRUNDRjA1NzlFRTJDMDgKLToxMEU1NTAwMDBFMEJGMDJFRTlFQUJBRTNGM0Q5Q0YxMEI2NjJGOTRBMEUKLToxMEU1NjAwMDFCM0IyRjM2OERGMjBCQkMxRjQ1N0IzQkZBMjFDNEY3QkEKLToxMEU1NzAwMEJBMUU1QzA3RkQxRDM2MTNEMTlDMTE4MTc3QjMyMEExMTMKLToxMEU1ODAwMDdGQjRCOTg2RjM1MzBFMjMxQ0Q5NzYyQTE1RjZDNzlBQTEKLToxMEU1OTAwMDg5N0FBRThCRDVFQkEyRUVBNTJEMTlGNTEwQjFEM0I0QzcKLToxMEU1QTAwMDZDNUJFQzM4RTg5Mzc5MkU5NTNFMTlCRjY2MEVBQ0M4Q0IKLToxMEU1QjAwMDA2Rjk0MTNDNTY3RkExMkZEMjVGQ0VGOUE2NkU3OERFRDgKLToxMEU1QzAwMDNGQjM3RTY4MTFDQzYzNDlEMTg2MTkzMDBGMEZDNEZCNkQKLToxMEU1RDAwMDQwQkYyODJFRUNCRjExRTI5Mzk0OUZCRUFBQ0FDNzM0NTUKLToxMEU1RTAwMDMxODBFRjhDRDhFNDQwMkFGQzI2OUI2NDBERTAzOTZFMjQKLToxMEU1RjAwMDY5N0RDMEQyMEE3Mjg2MUZDOTVEODU4QUYwOTg2MUZGNjUKLToxMEU2MDAwMEYwQTAyNTk4MzExM0ZBRUI1MkY1RDM1MTA2M0Y2RDhGRTgKLToxMEU2MTAwMEZENDk5NUIyMDdEQUQzRkVCMTNGNUI5RENDRTM2RkJFRjcKLToxMEU2MjAwMEQ5RDgzQUZDRUIwRjZFM0Y2NjhDOTc4N0M2RjQ1RkVBNDkKLToxMEU2MzAwMDAyRkRBMkFDQzE3NTkzMDQ5Q0VGQkI1MDE1RjFBRERDOUIKLToxMEU2NDAwMEFBOEY2MzQ3Qzc3QjQwOUVDMTdFRUZFOUJDRjJDMUJDODUKLToxMEU2NTAwMEQ0NDhBQUM1ODFBMkYxQ0M0QkI0OUNGNjUzMjFDOTk4RTkKLToxMEU2NjAwMDkyQkUxQkJCNzdBNkM5RURDRDdCNTRCREZCRTIyNTk0QzIKLToxMEU2NzAwMDNCOUI4MzNDRDNCQkMxQ0JBODc3RkZBNTQ1MjY2RjUzRkIKLToxMEU2ODAwMEMzRjJFMEYzOTc5MEJFRUYzREMxRjRFRUU2MTMyNTAyMkUKLToxMEU2OTAwMEQwQjNGNjFFRjJFNjhBNkJBODdGMTUzMzQxQkFERTJDQTIKLToxMEU2QTAwMEY0OUZGNjQyRkZEREM0NEQyRDdCQjI3OUZFRjAyRDIwQTQKLToxMEU2QjAwMEZGN0VGREJDN0QwREI0M0Y2NTMyMjFCRDlERUFGREM0RUEKLToxMEU2QzAwMDkxMzY0RTBGMUZGMzAzQjhGQTEwRjJFMzY2RDUyRTI4RTkKLToxMEU2RDAwMDVGN0JERjAxRjBDNzFBRUJEOUVGMTE2QzFFNTBGOThCOEQKLToxMEU2RTAwMEZBNjM4MERGQ0QyNzVFNDVGQUQxRUM1RURGRDMzNTQ4OTMKLToxMEU2RjAwMDZGNkU0QTZGRjhCQjA5NTU0MzA4MUZGREYzMTdEMkQ0NUMKLToxMEU3MDAwMDVEQzVERUM1NUQ1MjU0NTIwNkY0NzY3MkY1MEY3NzgyMTAKLToxMEU3MTAwMERFREU1QzQ1NDRFOEZGNjA4RUZDM0NCRUZGRkIzQzg3RDAKLToxMEU3MjAwMEVGNTExRUI0RjQ1NEMwM0RDOTgzMEIyNTExRjg2MzczMzcKLToxMEU3MzAwMEIwNzY1NDNGRTFGOUVBNjBFRDAwRjI4RjY3OUQxRkVDN0YKLToxMEU3NDAwMDg3RUVENjIwREFENUREMTk0RUI0MEIwRTNFREY4QUZBRkQKLToxMEU3NTAwMDczQjNFNEYwQzNFRjk5MkMzREMxNkRDNUY2OEE4QjMwREQKLToxMEU3NjAwMEY4MzlCNEYzOTc4NjZFQzM3MzVCMUEzRTk2NTYwREU3N0QKLToxMEU3NzAwMDMyNzlDMUUwRkVCNTY1RThEMzMwRUY1RjdGQ0YwQTZGMzUKLToxMEU3ODAwMDdFOEZEMkRGRkYwNUQ2NDBBRTU2MDA4MDAwMDAwMDAwMkQKLToxMEU3OTAwMDFGOEIwODAwMDAwMDAwMDAwMDBCREQ3RDBCNzg1NEQ1QjYKLToxMEU3QTAwMEI1RjAzQTczQ0UzQzEyMjY5MzkzMjdFMUU5QzkwMzA4RUEKLToxMEU3QjAwMDk4ODQxMzA4RUY4NzI3MDQxMDJCQjU4M0YyQjIyMjBFM0EKLToxMEU3QzAwMEM4MjM0MjQ4NDZDNDhBRDc3RTM3ODMwMzMxNTI2RjZGQ0QKLToxMEU3RDAwMEFDMkZFQUE1NzZBMDZBRDEyQjEwNkRBQzUxMDMwREE4MjEKLToxMEU3RTAwMDE0QUJCNUQxNTI4QTE2QkRBMzIyMkY5MThDRTA4M0RFRTMKLToxMEU3RjAwMEQyRjJBRkI1RjYzOUM5Q0M2NDAyNjJFREZGRjlGRkU5OTgKLToxMEU4MDAwMDU3MzdGQkVDRjdEQUVCQkREN0RFOTMzNkQ5QkZGMThFODUKLToxMEU4MTAwMDMyODAyQkQ1NjFCQUFDMDNBNDJCNkRCRTNCMzIwMUQyNDIKLToxMEU4MjAwMDAwRjQzNTk4NkZCMDdCOUQzQTk2NDdGRTQzMEE2RENFNTMKLToxMEU4MzAwMEM1RUZEM0MwMDgxNTAxRTRERjIzMTkyMTM3NDA4QTI2MkMKLToxMEU4NDAwMDAxNjQ1MTZBMzM1MzA3QzAwOEMwQkYwNjkxQUE4MTEyMDAKLToxMEU4NTAwMDZGMzFDMDI3QjUwNjdDMzgwMEY4NEZDQjA2NThDRUZGODUKLToxMEU4NjAwMDAwNThCMUE4RDVBMTYxN0Y1NTRGODlGRTMyOUQ0NkU5NzgKLToxMEU4NzAwMDJEOTg5RUEzQkZDQjMwNUYwMTM3NzhCMTNDNEI5NjZFOEQKLToxMEU4ODAwMDk4QzFBOThENTNBQkRDNEE4Nzk5RjNDODdENjRFMUJEN0IKLToxMEU4OTAwMDUzNzBGRURGQTkwNDNEMDk4N0U4NUQ4OERGMzEwRjdFRjQKLToxMEU4QTAwMDA4MERDMEY5RjdBRUY0RjZENUE4M0M3M0E5MkU2MzNFNjcKLToxMEU4QjAwMDJCMDNCRTRGRTU5MTM1MEVEODJDNzVFRDc3MjRBRDZCNEIKLToxMEU4QzAwMDA0RDVGMzk2NDk1ODJGQUI2NzhBMUVBNEExRTQ3MjVCNjYKLToxMEU4RDAwMDEyQjUyQjk1RjRDRDFBRTVBRjdFMTQwODRFNTlCRDc0RDAKLToxMEU4RTAwMEVBMDcyMDY0QzJDMTVCNjZDMzdBNDdCMzUzRjRGNUY0MDgKLToxMEU4RjAwMDNERjQwN0U1NkE4NEM3MjQ0REI1Q0E0QkE5OURFNjAxREUKLToxMEU5MDAwMDU4NUZEQUQ5NkU0QUJFOTdGQjlCRDIzMzQ5MEZFMjNDN0YKLToxMEU5MTAwMEE3MzcwNDRBMjA0RkMwQzFFQkVFODQ0MzY4NERGMkRDQjgKLToxMEU5MjAwMDUwMTQzQ0M2MTMxQ0IwN0Q2ODMwQ0M2RDJDMjJGODdCOTMKLToxMEU5MzAwMEFCQTg5RjZDOUI5RUIxMUUzNzE1REM4MTkyNkI1MjY4MTEKLToxMEU5NDAwMDlDMjBDMzZCMDBDRDAzRDMyOUI4M0UzRkY1OUJFRjVEMDAKLToxMEU5NTAwMEM1RjBDODRBRDExM0MxNjNDRjI1MDIxRUJCRTc2QzkzMzMKLToxMEU5NjAwMDM3NjBCREVBMjIyOUU0QzRGOURERkZFMjhDNTI1QTY3MjAKLToxMEU5NzAwMEY1NENCNzBFOThBRkY2MjkwQjY5NUMwOEI4RTAzMUNDQkUKLToxMEU5ODAwMDgzNkZEMUJENTMzMDVGNURFOUQ1RDc2QkJDRUU0NTU0ODUKLToxMEU5OTAwMERFMzczMzQ5NUY4RkU1MEYzRTJGMTk5NEFGMEVCODQzMzIKLToxMEU5QTAwMDQ5OThCRkIyNTlFMDQzNzVGM0QzQ0E4RDk4RjYyMEJDOUQKLToxMEU5QjAwMDczNTNCQjQwQzk4Q0UyQ0VGOTAwQUNFMUY5NTQ0RjNBMzUKLToxMEU5QzAwMEQxRkY2NTZDMUY5MDQxOTcyNzYyREUxMTFFQThFM0ZBMDQKLToxMEU5RDAwMEFCMjc4NjA3MTJCQzRFM0U5RjM0OTdEQUJGNjJCMzA1NjEKLToxMEU5RTAwMDY4OUM1NzM2NUZCQTI5Mjg3NUVERTdBNEREREI0NEVCNTgKLToxMEU5RjAwMDNGODlFQjBGNjBGOTZGOUZGRjczODhFODYxMkREMjgzMjkKLToxMEVBMDAwMDlDODM3QkI0NDYyQkE3RjJGNTUzNDBBNTdEQjFGNjZCRjIKLToxMEVBMTAwMDhGMjM1MDQ4NzhCNTI3MkY5OUYxODNFNkU5NDUzODFGQjEKLToxMEVBMjAwMEE3N0ZGNjAyQjhGNTEyNkY4RDg2NzBBRUI2QjVENjI5RkYKLToxMEVBMzAwMEQ0NkU0QjA2QzAxOENDQkY3MEY3NDA5RkJCMkI5Q0IxNjcKLToxMEVBNDAwMDNERUY4QjRCMDFDNjVGNTdBODQ3MjgxODg1NTcyRTE3RjcKLToxMEVBNTAwMEQyREEzMDRFMDM2RTRDN0JBQzE2RjA4OUVGRTc0RUNEMjgKLToxMEVBNjAwMENERkRBQzcwODVGN0UwQ0U0MUNERUEwNjU3MzZFMjkxOTgKLToxMEVBNzAwMDJGNTlFM0VGNDlGNjgwRDEwN0U3RTM2ODJFNkZFRDgzNjYKLToxMEVBODAwMEU1RDlFOUY4MUZEQUI3Q0QzRDQyQjQ2RkQ5RDlFMDdCQkIKLToxMEVBOTAwMDI2NDFCRkFCNEMzQ0IzRjZBNTIxMUQxODJGQjMzREEyQjgKLToxMEVBQTAwMEZFQ0Y0REJBRjk4OTQ5OTc1QkNDMzQ4QTJFNjJGMURFRUMKLToxMEVBQjAwMEVEQ0IyNTNFOTE5RDBDQkVDNjA0RTM1OUVENzE3RTVDMDUKLToxMEVBQzAwMDZFQ0QwQjVDRDg0RjI2QjVEMzZDOENERjcxNzQxN0NBMzIKLToxMEVBRDAwMDJBMUU0Njc0MzcyNTU5REZFRDIyN0ExQTk2M0IyQzA4RjgKLToxMEVBRTAwMDlERTMyMDI0NzI2N0E0NzRDNTAzNUEwN0QxMEZBRDhCMzAKLToxMEVBRjAwMEU4QUNCQjdBMERCQjA0N0Y4QUM3Q0I2NzRDM0FBOTIyMkUKLToxMEVCMDAwMDVDQzc3OTZGOTM5MDFFMTNFRUIzRThBN0RFOTY2QjdCMUMKLToxMEVCMTAwMDEwRTdGQkEzRkQzMkYzRDlGODdBNTZCQUFCMTZBMDc1MEQKLToxMEVCMjAwMDEwNDBERUM2NkI1M0JEQzVEREQ3REI2NkQ2RkI3MUFEQ0QKLToxMEVCMzAwMDhCNTNCN0FFQUQ1MUIwRkZBMTJENUFBOTBDMzQ5RTM2MDAKLToxMEVCNDAwMDg5QzYwQkUwNzhCNENGMjkxM0UxNTMxOUUxRTMxOURENEQKLToxMEVCNTAwMDUwNzg2NzJFRTE3OUUzNUM1QUQ3NTAyNTZDMkIyNUJFOUYKLToxMEVCNjAwMEVCQjU0MTZCQTFFMERGRTdGMEZGM0RFNzI2NDNBQkFCNDAKLToxMEVCNzAwMDMzREZDQjk3MUU5M0VGNTNEOTNCQTY3RTNGN0Y1RTRDOEUKLToxMEVCODAwMEY5MjVBQjg3QzQ5NEU3MDY4NkM1RTRGM0VCQzdDNkQ0ODIKLToxMEVCOTAwMDFGRDAzMDI5MjYzRjY4QzM3NzYyRUEwRjBFNUQxRDkzQjAKLToxMEVCQTAwMEJGNzRDQkY3NjNFQTE3MzcyRThDMjk5RkY0OEZGQ0RERjcKLToxMEVCQjAwMDNGMjUzQ0E3RjUyN0UwNzM1NjFBRDE3Mjc5RkY4NjM2QjgKLToxMEVCQzAwMEM3QUUzRjc1NzRFQ0ZBMTU4ODAwRDFGQkE0RTRCRkVBMjgKLToxMEVCRDAwMDg5RThEOTRBNTM0MUY5MkM2Q0I1MjMzRUUwRDI2QzBGMzkKLToxMEVCRTAwMEUyM0NDQUZGMkM4N0Q2Mjc5ODg3ODVDRjU2N0U5MjIyOTMKLToxMEVCRjAwMEM3OEM2QkYxODkwQkUxNTc5RUVGRkNGOEYyNjNDMjE3RUIKLToxMEVDMDAwMEU3NzlFNkZEMEYzOTIxNURBQUI5ODIwRjI4RTBFNUY1MjUKLToxMEVDMTAwMEE3NEU5QzdCREVGNURCRTNENzBGMUFFM0JEODdENjlGQkIKLToxMEVDMjAwMDAwRUZFM0Q3OUYzQTNBNzYxRkFDRjVFN0Y5MDYzNzg3NEUKLToxMEVDMzAwMEIxOUZDRkU3NEEyQzVGRjY1MUQxOThBRUZEQkQxQkI3MEYKLToxMEVDNDAwMENFRDlBQjUyNTk5RjAxRUYzNTA5RUI3N0NFRTM0RTlFRkIKLToxMEVDNTAwMEM3RjU0RUYwMjc4MkMzNzQxMzBFOTVCOTgyREUyRjQ0OTgKLToxMEVDNjAwMDlGRUY5QkYzRjgxRkEyNEY0Q0RENkI3Mzk5MUU2MTlGQzIKLToxMEVDNzAwMDFDMUE4MDVEMkRBQzk3NzZGNTQ0QkM0OEY3Qjk1OTJGMjYKLToxMEVDODAwMDVCQThCNDQyNjk5NDlDQkZERkE0RUYwNzRERkFERTUwNDUKLToxMEVDOTAwMEFCNzIzRjBGRDdFNjcwQkFCMTU2RTNFRjhGRDQxNjcyNUUKLToxMEVDQTAwMDFBQUFENUY5RkJFNkRBRDE5QzNFOEFGQTE4QTU4RkQ3QzUKLToxMEVDQjAwMDRFRTM3NDRCQUQ5N0VCM0Q1OTNCOTdEM0E3NkE3REZDNzAKLToxMEVDQzAwMEREREE5RkVCQ0RGRDAxNkYwNkNCQjNGOEY1Q0M1Rjk1OTgKLToxMEVDRDAwMDE4MkY0MTJFRTJGNkYzOTFDRUU0RjNGMEI1MkVFREU1RDgKLToxMEVDRTAwMDc5QTlFN0MzQTNENTA3NzNCN0JGMUM4NTA3RDdFNUE2RTYKLToxMEVDRjAwMDY0MUVFRTgxRkYxODA1QTNDRUM5MTc2RUZGNjVBREI2ODEKLToxMEVEMDAwMEZENjVGQjg1RTlDMkMyMTczOEZCRTE4MDQ0RjVBRUE3N0IKLToxMEVEMTAwMDMxQzcyMkJGQzlERERDMTA3MDc3MEY5RjRFM0M4QUMzMUMKLToxMEVEMjAwMDU3MkZFMjJCN0UyRDIxRDlERThCQ0FDM0JEQTNDN0Y5OTUKLToxMEVEMzAwMDkzQjlDRjU2N0VFNjRDODFBRkYxRkRERTZGRTJERjJDNUEKLToxMEVENDAwMEMyNEYyQzlGMUQ0N0FGQTc3Mzg1RkMzQzlEMkJGNEY0NEQKLToxMEVENTAwMEZERERGMDhCN0I3MjZEQTZGQzE0RkIzRTZCOUZFMDRCRTAKLToxMEVENjAwMDc3RjY5ODNGQzE5NzYwNUMyOTRGOEJBMUNGRDkzMzYzNjkKLToxMEVENzAwMEY3NzFCRjVERjBCN0ZEN0Y5MjQzNkIxMkVDRkY4NURBNTAKLToxMEVEODAwMDVCRUI4OTZGRjcyNzczQkQ5RkZFN0Y0NjZGRkJBRjREMkYKLToxMEVEOTAwMDYxN0Q3RUJGRERENzJGMkI2QTdGRjY1RkRCNjM2RUEyQkUKLToxMEVEQTAwMDdERkZERjVDQkJEOEFGNDIxNTQ4QkU0MzNBMThBNDA3Q0QKLToxMEVEQjAwMEUxOTIwMjBFRDJFNUEwNDAzRDRDNzQ4MkM2MTBEMTQ1Q0UKLToxMEVEQzAwMEY3NzhBOUMwNjE4QjlFNjQ4MjY3MTJFQkUzOUZDRjRDRkEKLToxMEVERDAwMEUxRkQwNzlGNkE0MDU0RkZBMEE4QUM5NzZFRkIyRUVBQTYKLToxMEVERTAwMDBBMzQ5RTgyRTNBMTFFMEFCQUFENzNGRkYyRThCRkM5REUKLToxMEVERjAwMDlERkM1QUVFOUVERTJFODQwNzE2MUY5OTREN0NFNDNDNDYKLToxMEVFMDAwMEYyQkE2QkJCOEJFMzIzODc4ODhGNUNGQUNERjMxMThCNEYKLToxMEVFMTAwMDhFRTFFQzhEMDNCQzI5NURDQjY3MTExRkU5MERGMEQzQUEKLToxMEVFMjAwMERDQjc5OThGN0M2RDM4NTk3NDZCRUExM0YxRkNBNERCNjUKLToxMEVFMzAwMDc2Q0Q5OTE3OTA3RjI2M0Y1N0ZDRjU2MUM0OEJEQkU0QjQKLToxMEVFNDAwMDk0ODZGNUQ4RTQyRUM1RkY3M0NBMDcwMjBBM0M4NkE5NEEKLToxMEVFNTAwMDczRjVFOURFODc4NjczQjc4NTBBRDcxQkMyRjY5RDUzMjMKLToxMEVFNjAwMEYxRkYzMkNDRjZBMDUzQTU3QTBGRjVGOEY3RUQ5NDVGRDkKLToxMEVFNzAwMDhEMUNEMzg5RTk5NzQ5RkQ0MzgwQjY0MDY5OUVFMDNGRTgKLToxMEVFODAwMEIyRUI0Q0VGNDM1MUYzQjNBQkQwMjczQTVGREFFQUVBODcKLToxMEVFOTAwMDczMjg2QURGODZFRjU1NjNGMjIzREE3MjYyRUE4RjNBRUIKLToxMEVFQTAwMEEwQzU5NDhGMDkxN0M2OTQ4RjNCQUFDN0U0Mjc0NDQ2OTAKLToxMEVFQjAwMEM3RDRCRkVDOEMxMTkzMkY4NzJCNjJFQTU3Qjg2NkM0NzYKLToxMEVFQzAwMEU0QTdBOEQ3QzZENEJGM0M2NzQxNENGOTE1REE0REIxQzkKLToxMEVFRDAwMEZEMTU3ODg3RTdFMUJBMTczQURDRjU1MjJBREE2OUI5MDUKLToxMEVFRTAwMDQ2MTlFNTkzOTNBQkZEMEJDODRFNUFFMzUxNjEyMkQ1MDkKLToxMEVFRjAwMDBFODUwODZFNzUwRTk3QkExRUY5RDQwNzkyRDExRjEwQjEKLToxMEVGMDAwMDRGRUZCM0ExRDU5RDhGRjVFNTMwNTA3QUQwQTY5NzUyM0IKLToxMEVGMTAwMDlBNjc2Q0YxMTE5RDZFMkY0Q0Q2NjgxRjkyMDcwMkI0NTAKLToxMEVGMjAwMDkxOUM1MkY0MjQ0MDdFRTJFODExRjk1RDAxRURDQjZGMzMKLToxMEVGMzAwMDZDRjAxODI2REI1NTU0RjRBOTdFNzM2Njg4RUNERkFDQzAKLToxMEVGNDAwMDY0REYxNTM0OEZGNUI2MDZDRjFBREE2NzFCNzgxRkNCNEUKLToxMEVGNTAwMDY0QkNGQUM5NjhDQzFGN0U0MUIxMTE5RTZENkZCMURERjIKLToxMEVGNjAwMDMzMTZGMzlGNjFGNzMyOTYzN0I1OURGOEM5OTU5ODFGMTAKLToxMEVGNzAwMERBNjZEN0E5RjY1MDkwRDk0RTVDQUVDMDNENEE3QUY3MTIKLToxMEVGODAwMDc4RjZGMTBGODQzRDE1RkZGRDY3Nzk4MkRGNjc1NTA4M0MKLToxMEVGOTAwMDNCMzNCRUZDOEUzQzIxREYzRTc2MjQyRTVGNkVCNkFGNDcKLToxMEVGQTAwMEI4NkJGQTQzQzREN0VDNkQ3NjIwQkZDNUFBMkNBMzI3NTMKLToxMEVGQjAwMDlDNEY1RjNEOTMwRkExRTE1MTc5QzUwQkFBOUJCRTBGRkEKLToxMEVGQzAwMEU0RUYxNTc3Q0Q4M0IwNUJGNDQzN0VBQzU1NDk0NjRGRjMKLToxMEVGRDAwMEYyM0I3QzNDMjlGMTNDNkUzMUU3NjEzRkQzQTM5QjdFNDEKLToxMEVGRTAwMDNERkNGREUzQkNGM0FGRDM3RTI2MDk0MjE5ODlEQUJCQjEKLToxMEVGRjAwMEY5N0I1NjMwNzFGQjdCQ0NGMTNGNEU0RjVDNUVERkQxMkQKLToxMEYwMDAwMDdGMkYwODY0NDRCNzEzN0NBNzczOUNCRTVDNkUzRjkzNEMKLToxMEYwMTAwMDA2ODE4NEVCQzhFNEVGOTA2M0U0MTBERUVDNDIzQTI3MEIKLToxMEYwMjAwMDdFNTE5RTk2RUQwMDI0RjFGOTEwNzlDNTQwRjhDRjIwNkQKLToxMEYwMzAwMDkzMDBGMTE0NUM3QTI5RjEyOTUwRUM5MUIwNDUxNzI4MUUKLToxMEYwNDAwMDNGMTY4MEYyMDFEOTBCMzY0NEM2NzMzOEI1MUI1NkRCMjgKLToxMEYwNTAwMDNGMDg0N0QxRDEwQzIzMzYwRjU0M0Y0QURFN0M0MjdEMTYKLToxMEYwNjAwMEUzN0E5Mjg3MTRBNjEyQkU5RjAyMkQ1NTREODA1RjU2RkIKLToxMEYwNzAwMDNBQ0YyNTdCOTVBOEY1MUNFQzQ2NEY2QTMzRTE3OEIwNzIKLToxMEYwODAwMDU3NjIzODNFNkZGMkIxOTFGMzIwQTFCRUQ2OTZFNzExRDgKLToxMEYwOTAwMDc2NTlBMURFRjM3QzcyODNFMEVCQ0I4OEVFMzc3RTFGREUKLToxMEYwQTAwMDMyQjlGQ0FCQzIxOUYxODJFNTdBRTRCQkVFMTBGQjI5NjAKLToxMEYwQjAwMEJGNzE3ODVCRjhERDI3MDYyRjNFQzk4RjlGNzc3RjJFQzMKLToxMEYwQzAwMDJGRThFQjdEMkI4RkU1OEEzNjkwRTQ2MjkzNDlCRjREQTQKLToxMEYwRDAwMDhBRDE2Mzk4OUJGODE4NTQyNjgyN0Y5RjdDNTM0RjhENkEKLToxMEYwRTAwMDVCNzcxMzE4MzkwQkM4QUZBMUQ4NzVFMjY3QzkzMkY4M0UKLToxMEYwRjAwMDlGNEUwMEZGRjg3NUE3OUFGM0M2RjY3MzVCQTkzRDc4OUIKLToxMEYxMDAwMDc0QzFFN0MwRUJDQTQ2M0Q5RkZFODU0QjI4MEZCQzY5MjIKLToxMEYxMTAwMEE3RkVFN0Y5M0RGQTdBNTQ4MTNFQ0YxM0ZBRjQwMjA4Q0MKLToxMEYxMjAwMERCODkwRjc3ODE5RjNCRDM0RTdFREI3ODM4N0E0MTlCMUEKLToxMEYxMzAwMDJGRTU1RjE4OUVFOTA1QzZFNzA0MUY5QjRCQ0RERThBQ0QKLToxMEYxNDAwMEVCOUMxRkYwMDBGOTY5NkU5ODA3OUU2MjlDOEZFRkJCRTUKLToxMEYxNTAwMEU5NkYxODU4NzdFMTU1NDM0QUQ2NTI3QUU5RjgzQTk5NTcKLToxMEYxNjAwMDVCNEY2NkJENEYwQUY0OTFDRjVERkFENUY1QkUzQThGN0QKLToxMEYxNzAwMEFGOTBFOEUzOTBBNDJENjEzODQ4MDgwNzkyMzdCRDhGMUYKLToxMEYxODAwMDBGNUMxMDA1QzcxNUZEQ0E3RjlGOUY0NUU3MDM2MDY0QUMKLToxMEYxOTAwMDkwQkY3ODg3OTNGRDU2QjAwMTU4MEZBREQ5Mzk3ODEzRDkKLToxMEYxQTAwMEM5ODUyRkYyN0RBRjUxQkQ1MTkzNERGRkFEMTExOTc4MzcKLToxMEYxQjAwMDc1Q0FDNUMzMEJGRkVDNDQyNzE3ODI5NzZDRDJGQjQxN0QKLToxMEYxQzAwMDRGNjJCQzE5OTcyRkY2RUJBQkQyNEI2NkJFODA0MzA0NUYKLToxMEYxRDAwMEUxQjBCOUVDOUJBNzE3ODQ1RjBDRkY3ODJENUZGMDVGNUYKLToxMEYxRTAwMDJCQjVFMDM2NkE1QUFDN0ZGNzM1NzMxREFGRTU3QjM4MzcKLToxMEYxRjAwMEZEMjJERkNCNzA2RUVGRjdFOUUxMjQ5MkZGMEU1QzdGMUEKLToxMEYyMDAwMDAyQkNGNzc2NDMzN0REQURCRjNCN0FGOUE2RjhGMkMxMTEKLToxMEYyMTAwMEU0QzRGMzVDRkMyRDk5RTcxQjM0NEZFMkYzMjU4OUU3NDYKLToxMEYyMjAwMEY5NkYxNzg5NEZCODNGNEI1Q0Y5REZGQzNDQkZDODM3MUIKLToxMEYyMzAwMERFQzhBNzc5QTYyNzlFRTc0RjJGMTI5RUM4RUM5NkI0OEEKLToxMEYyNDAwMDYyQkREOUM4MDdBOURFMzczRDVGMDgyQzk4NDI3MkU4MzUKLToxMEYyNTAwMDFBOUZGMEZGMTcyM0M3MjUzRTg0NTM3OUY0REM3MEQyNDAKLToxMEYyNjAwMDZGRjU3NTFCODhFRkFDRjRFODAxOTVGOUM4MUJGOTgyQkUKLToxMEYyNzAwMDBGODI4MUYzOTkzOTRENjI3RjUyRkI4ODRGOTcyODg0MjIKLToxMEYyODAwMEVGRDlEMDlBNDZGQzZBQTc5M0ZERDlGMUVCMEY5OUVCMjEKLToxMEYyOTAwMDQ3M0E3OTlDRTAwNEQzMjMwMzg5OUYxQzFDOTg5ODRGMUMKLToxMEYyQTAwMDNDMUU1RkJGM0VDMkYyNjk3RDc5NjJGRDc0OUI0OUFGMkYKLToxMEYyQjAwMDJCNUMwREQzQjI2REQxRTcyQkI4NDA5OUI4NkNDMEU4ODgKLToxMEYyQzAwMDQzRjJCNjRDNUQ0QkZDQzQ4MTcyODlFMEVBRTgzM0E0OUEKLToxMEYyRDAwMDI3RUQwN0U2QkQxMkY5ODE3MzVFM0YyMDc5MThERTI3MUUKLToxMEYyRTAwMDNBRTA5N0Q3MzlDRUYxREFCRDZBODFCRDdCN0VCRTVDNEMKLToxMEYyRjAwMDdFNjZBNDNGQzE3QUI2NkFCRTVERjk1MTc2RTNGMjJEMEYKLToxMEYzMDAwMEFGQUEwNUQxRkU3MTA4REI4MDA1NDdDNEU2RTVGMzQxRUQKLToxMEYzMTAwMEQzNkZEMDEzMkVDQTZGNTA5QzI5RTg2NTQ1M0YyRkNCODEKLToxMEYzMjAwMDA3OTIxQjY0M0ZEN0JEMzBBNjk0MzYxN0Y1MEYyMEZCMUMKLToxMEYzMzAwMDIwOTI5MkNDRjIyMkQ4N0I2Q0ExMTYwNUNGMEZGMzJEMzAKLToxMEYzNDAwMEZENTNFRTQ2QUY3NEM0N0M3RkI3RDY4NTI2NjU2N0ZFNTUKLToxMEYzNTAwMEZBQTNGQkE2OTAzRTNGMUZDMkVCQThGRUZDNTUzREU4N0EKLToxMEYzNjAwMDA4QjI2MzlEMURGRDlEOTE2MkY0REJDRUZFMTVGRTVFMkQKLToxMEYzNzAwMEVFNzJCN0NBNDMzMTc1RkYyRUUxN0U2Q0Q1OENBMzA0QzMKLToxMEYzODAwMENGQjVGRDhDNjNCNENFNzhGODA1RUUxQTlGQzY3RTA0MjcKLToxMEYzOTAwMDgyREY2NTVERjdCREJCN0RGRUFCNjY5Q0E2RkU1RUU4QzkKLToxMEYzQTAwMEE3NUE3RTFEOURDRkUzOTJBREYzNjE0NTNERUNFQTg0MDMKLToxMEYzQjAwMEY3NTdERDk3NjREM0JGODhGQUM0Mzk5QUI3MDE1NTdFRjEKLToxMEYzQzAwMDlBQ0YzQzhCQkVFM0Y0MUMyODE0RkU4MDNBNEZEQkJBODQKLToxMEYzRDAwMDVENTE3NDc4ODMyRDkyMjVFNDc2NzgxRDM5OTlGRTY3MDYKLToxMEYzRTAwMDQ3MTJGMzhGRjYxREJGRURFN0UzRjMzNDRCRUZFODIxNEYKLToxMEYzRjAwMDlGRUJGMUQ1RTc2N0Y5MTdFQ0M5ODlGNTY5RUIxQzYzNTkKLToxMEY0MDAwMEI3QkRBODgwRjUxMjNBRTcxRDhENzk0OTVCNDRGNkFBOEQKLToxMEY0MTAwMEEyODIxRUM0RjU5NTVGOEVEODg0RkQ0RDkyRkJCNjg0MDIKLToxMEY0MjAwMDcxMUQ5RkMzRDlFNDA5OThGRTI3ODhGNUFGN0FGM0EzMkQKLToxMEY0MzAwMDc0RjI2MzRFNTJFQ0M3QTNGOTUzQkMxRjY4NDA0MUFDNTEKLToxMEY0NDAwMDNGRjkxNENDNEI2RDI1Qjg4QzRGNjdCODZDNkY5OTk0MEQKLToxMEY0NTAwMDRBRkQ5NDNDM0ZCOTI3QTVCQjZBRUI1NUM1REVFOTBGRDEKLToxMEY0NjAwMDhBOUY3Rjc5Mzc3NkU5QjAwMkExNzdCRTlFNkMwQzJCMUMKLToxMEY0NzAwMEMwQjRCQzlCRjU4RjMyRUI4NTkzOEQ1MTA1NTk5REZEMzIKLToxMEY0ODAwMDUxRkQ0NEYxMTA2RDgzMkMzRkFFODBFQjM1ODEwNUFDMEUKLToxMEY0OTAwMDZGRDk1Q0M4NTc4OTdGQTJGRTJBQUJFNDI3MkNCMDMzMTIKLToxMEY0QTAwMEJEMUJBMEE5RDlFQzM3MTRGQjhGN0M1REMxRkMwNDMzRDQKLToxMEY0QjAwMDJGRDVCRjFEQTQ3NjFCNkZGMUYwMzkzOEY4MzQyMEY5MzEKLToxMEY0QzAwMDgwODBFMTczODEzQUM5Q0Y3RTA3MTdDNTdENjBCQTVFM0YKLToxMEY0RDAwMEQyMzc5MDJFMjZEQjIyMTk4MjJFNDIyMkFFMDE3QzBBRTAKLToxMEY0RTAwMEU1N0YyQjg1ODMxNDI3QjBENkY1RUYzRjI3M0ZCODExNzIKLToxMEY0RjAwMDU0MjA2OTIyRTYxNTYwM0Y2M0UwNjAwQTlGQ0JGMUNDOUYKLToxMEY1MDAwMDcwMUU0RTZCNUU2NjNFQzVDQ0I3Q0Y5QTNBNkQwMEE2QjQKLToxMEY1MTAwMEI3MjUzRkUyMjEzQzBENEJDODQ3QjE5RjJGOTNGRkJENUMKLToxMEY1MjAwMDk1RTlDNjlGQUNEQjdCOTM3RkU5M0RDRTRCMkI5Mzc1NzIKLToxMEY1MzAwMDI5ODdGQzRGOUU0MkQyNTM1NzQzQjJFRUM0NzEwQzc3RDkKLToxMEY1NDAwMDcxODBDNjc1NjhDMEZFRjg2NDY4RTQ3NUI4REQ5RjA0MTQKLToxMEY1NTAwMDA4MjgyQUE4MTJEQjRGQzlCRTY1MDU2Q0FGMDA5RjkzMkYKLToxMEY1NjAwMDFGN0UyRjY1MzNBRDNGNDkzREQ1N0EwNzdFQ0EwMDgzQTQKLToxMEY1NzAwMEVCNjVDNEM5QzcyQ0Y3MkE4OUUzMzdCQzRBOUM1Q0Y0MDUKLToxMEY1ODAwMDQ5MDRGRjlFNzNFM0JGQzdDQTRCMTcxQzU0ODk5RjQ4QTkKLToxMEY1OTAwMEFEREU5QzczQzg5RkRBMDg2RTY1OUQ3MDZCNTM4NDVEMDkKLToxMEY1QTAwMDY3QzEyRDMwQzlGRjRCODI2QkUwNEVBNzFBQ0NFQ0RFNTEKLToxMEY1QjAwMERGODYwMDFBNDVGQTc4OUJCQTY0MkJENTQ3QzMwOTZDREQKLToxMEY1QzAwMEQ0NUY4RTU4NUZBMEQyMjlGNjQxRjE2REE1RjZFRkQ4MzEKLToxMEY1RDAwMDczNTRCMjdCMkMzQzdCNjhBMEM5QUZCQkYxNzczQzUwMjUKLToxMEY1RTAwMDIwRjRBM0VBRjRDM0Q1MjRFNzAwMDdCNUY1MDczODk5NUEKLToxMEY1RjAwMDcyNzQyNEYxMEQ5NDk3RjUyNDJGOTNFQzA2QzNEQjkyREIKLToxMEY2MDAwMDlCMkI5QUQ2MDBEMTU1NzVGMzAyMjBCRUYyOEVFNDFCRDcKLToxMEY2MTAwMEYwMzJEQjIzQzA3NkQ5OUM2OTgxNTc2QzFBRjlCMjY2NDcKLToxMEY2MjAwMEFFNzM2M0ZBNDk0MTFFRTNEN0ZFNTdBNkJFQzI2QzQ4Q0IKLToxMEY2MzAwMDc2MTc1M0JCRDJDQkJDNTNCMjcwREM2MDMxRTg3NzYyMzMKLToxMEY2NDAwMEJENjA5MjZGRUJCM0I0QUUzNzY1RkQzMThERTIyMTJBMTgKLToxMEY2NTAwMEUwQzNFMTI2MzJFMUY3NERCMzMzRDg2RjlBNTkxMUE5Q0YKLToxMEY2NjAwMEEzNzg4MUM4RERBMDUyN0M0RjE3RkEzODhCRUIxQjA5QjkKLToxMEY2NzAwMEYwMEIxRTBCRkI1OUE0QjYxMkZFRjQ0MjdDOTNENENFQzEKLToxMEY2ODAwMEYyNDdBOTNDNUZFNDJGQzM3QzhERDg1MkM4NkYyOUZGOTUKLToxMEY2OTAwMERFMDg4MjQ3OUIwQzE0MTY1NUQzMjJEOTY4RkNGQzk5Q0UKLToxMEY2QTAwMEMzNTlBRjI5QTBGMkNDRThGMkI0RTU0RjYxQkU2MEVFRDkKLToxMEY2QjAwMDA0OURDODQ5QjNGOTdFNzYyQjk1QkYwMUJDMEUzMEY5ODUKLToxMEY2QzAwMEY3QTgzOEZBMURENzQ5Mzc1QzVFREE5MUY3NTdEMDdDMzYKLToxMEY2RDAwMDVGQjkxOUQ4OEVBRDMxRTU2RDBDQkREMTYyQjFDQzE4RDIKLToxMEY2RTAwMDQ5RjhEN0QxMEY1MDNGMTU2NjdFOUNBMjcyM0Y3REZEMzEKLToxMEY2RjAwMDYwRjIwNUVGQzYwN0Y4OUNDMEE2OTM3RkIyNEU2QTYwMjEKLToxMEY3MDAwMEY4NDBDMENGRkExRUM1Q0QxMEJERjQ5RkI3NkJCNzlEQjIKLToxMEY3MTAwMDA2Q0IxNDc0QTdFRjE1NzQ1NzA2NUU5OUUwMzU1MkJERjkKLToxMEY3MjAwMDNCNDhFM0NGOTk5N0NCN0M2NkNDNTE2MEI4MzBFNTYxMUMKLToxMEY3MzAwMDdFNDI5QUM0RkI5NDNGMjA5RkYxNjVCQzRCQUY5NzExNkEKLToxMEY3NDAwMDhGNjRCOTM0M0YwOUM3OUIzQjRGRTJGMzg5NTk3MzVEMUUKLToxMEY3NTAwMDIxMDlGRjM5MEJFOTgzRTNBMTE0NUZFRTZDQzRGNzM5OEIKLToxMEY3NjAwMDNFNDk5Q0ZCNjI3RTVFOTQzRjFFQjU2MTNFMzc5QkVEMzkKLToxMEY3NzAwMDA0RkZEMzA5RjAzOTdGODBDMDc3QUI3RENENUE0NzhDMjkKLToxMEY3ODAwMDdGRTc5MjAxNkVFMUU3MTgzMEY1OTMwMkU2QkYyMkFFMDMKLToxMEY3OTAwMDI1MkJEOTFCMTE3Q0EzODFGOUQ0NjExQkVBREZBNEZGQkYKLToxMEY3QTAwMDgyQzFGQUY2MzUyNkJENUJGQzYyOTY3MTBCREJDMUIzRjQKLToxMEY3QjAwMEJDQjE3QUY0M0JCNDI3NDQwN0Q3NEFBQ0U3Q0U5OTdCNzcKLToxMEY3QzAwMDdFM0RGQjVDODE2NEM2RERGNDU1NTk5RTk5REYzNUQwRTIKLToxMEY3RDAwMEQ4OUVCRTlBRjQ5QzEyRkMzODBERjU5MDI4RkQ3RURFNzIKLToxMEY3RTAwMDZENjdEM0I4N0VDRkM3NTc5Q0JCMDQ1MUExNTJGMDk3MjkKLToxMEY3RjAwMDFBODQyN0YxQ0JGMjZCMTVBNjk3RUFCNTBFOEVGRkFBRjUKLToxMEY4MDAwMDY5NUU2M0NGMjY3Q0ZFMjFFODAyNUZERkFGRUI4M0YzMDYKLToxMEY4MTAwMEVDNTM2NThDOTBCNTI4QkY0RDU1NDgyMkJBQ0UyNjlFMzQKLToxMEY4MjAwMEMzRjA4RjM4QzgyRjM3REJBMTU3RDFCQTY2QTc4MzFBMjgKLToxMEY4MzAwMDQ4NDNCQ0JDRjY4QThERDRGRjVBMTdBODMyQ0FEQkRFMTcKLToxMEY4NDAwMDJENkY4NjA4QUY5MDk1RUI4NDkzODgzOTFDRDdENjU3RDcKLToxMEY4NTAwMEVEQzFFNzBCRjVCNjYxMUNCNzU1RUY0OUQxQTNFM0E0QTEKLToxMEY4NjAwMEQ2QUZFOUM0M0I4QUQ3RDI5QzMwNEMzNUY3Mzc5MTlENEYKLToxMEY4NzAwMDM0NjQ4MEUwNTcwRjRBQzBGMjIyNzBBRDhCRTE5Qzk1NTIKLToxMEY4ODAwMDJGRTI5NUIyNTI3NTQ3MzA4REY4OEQ2NkQ1RTMzOEJCQkYKLToxMEY4OTAwMDA3RURCRTVFQzMzMTBEQTE1QTI5RjY0N0I0OEJBN0ZCMTUKLToxMEY4QTAwMEFDMENCMzlGMUU5QTE0NDQ2MjlDRDk1MjVBNjYyM0I4N0EKLToxMEY4QjAwMEI5NTM3NDhBNEZCNEZBQUQ0ODM2RUNDNEI3MkE4NjQ4QjcKLToxMEY4QzAwMDIzODIwQ0NGNERDQTIyRDI0RjkzNjJGOUJFREQyRUY2QjEKLToxMEY4RDAwMDA1REUxNTdDM0Y1RTBFQTIxQzYwQkU0RjdFRkI2MDE5RUMKLToxMEY4RTAwMENCQUY4QTAxNTkyQzBGQjg5RkQ1OEE0Qjc1RUFEMDQ1MEEKLToxMEY4RjAwMDlFNjU3QTIxODVGQzVDQzMxMDY0QTRBRkI3RTU3ODY3ODgKLToxMEY5MDAwMDUwRkM1RUUwNzU4NUZENkE2NTczRjVFQjE2NDdFREVCMUYKLToxMEY5MTAwMEU2MEUzOTEwOTlDRkYxNTAzRkQ0RkI1MDNDRDREQUYyQzcKLToxMEY5MjAwMENFM0NDNTNENTY0MjgzODNGMEJEMzI0RTNFMkU3M0JGNjIKLToxMEY5MzAwMENDN0FFNEIyNDdFRDlERjgwQjE0MjdBQUU3MTNGRkE4OTEKLToxMEY5NDAwMDdBQUE4QjNGODhGOTU0MjczRjhCQjMyRjQxN0Q4OUQ2MDQKLToxMEY5NTAwMDMzMDJGOTMxRjEyMUEzMjA0NTY2RkYzMkNDMTM3MjE0MzIKLToxMEY5NjAwMDFFOTdDODJGMjY3QjU2RDc5M0RDNkI5NzUyMUFFNEIyQUEKLToxMEY5NzAwMDRFM0UzOUMyRENBRkJCMTRFRjRCMTQxRjFCNDA3REU5NzgKLToxMEY5ODAwMDMxMTVCQUNBMDFGMEIzRkUzMjExRTUyNkU5RDE1MkNCRTYKLToxMEY5OTAwMDFDOTlDNkREQjgxNEZCQTZGMzdDMjU1QzQxRjlEQjk2MDcKLToxMEY5QTAwMDhBNzM1MjA4RENDQ0U3NjBFMzAyNEU5NUU4RkZDQkU0QjMKLToxMEY5QjAwMEZFNkJDRDcxRkQ3NjY0RDZDN0Q0MUY3MjdGODBGQjQyOEIKLToxMEY5QzAwMDdBOEI0NEZDMTBDQjdCNEZDM0E2NDgwN0UzNUE4RTcwNUEKLToxMEY5RDAwMDdGMUIzMzA0NURDNEVCMzEyRkRCREMyMTlCOERGODZFODQKLToxMEY5RTAwMDgwRTU0RTEyODQ3MjA4N0U0NjgxRTBCMzY1MDcwNDlGNkQKLToxMEY5RjAwMDdEMkU4MDFBQjQ0Q0FBQUNGRjlBRTlCOUFDMDc3MkY5MTMKLToxMEZBMDAwMEQ4MDg3MEZDQ0MwRUYwNTU5QkZBQ0U1RDAzNDY1MEI0N0UKLToxMEZBMTAwMEE4NUZGMDcxNTM1RkIwRjRCODI5NzFGQjc4QjlGQjdFMzEKLToxMEZBMjAwMDg1RjhENkU1Mzk1REY2NEJBNkZFQTc4MUM0RkFFMjE1NDYKLToxMEZBMzAwMERBRjlGOTk2NjFGMTI1ODhFNTRCQjk3MDk2RjcwRkVFODIKLToxMEZBNDAwMERFNzMyQkY5MDk4MjcxN0E1MEYwMjJGNUEwNUVCOUJFRkYKLToxMEZBNTAwMDVGRDBGQUUyRjVBMUVFRTIyOTlGMUE3MDcxRjE5NEE4NDUKLToxMEZBNjAwMDQxQ0MyN0Y5MzVENkIyQjNFMkYwQTc3QUNGRjFGOUY3NTYKLToxMEZBNzAwMDQwMjdERTc1RTA3MzYwRDM3NUI0MEU5NEU3MkFEOTdEMTQKLToxMEZBODAwMEQyNkYxRTYyQkE1RThCRjVFNEYxMDRDRDgzQzFGRkMyNzIKLToxMEZBOTAwMDdDQUIwREZDMTRBRjAwM0VGNTM0RTFBOTI1Nzc5MTEzNDIKLToxMEZBQTAwMDMxOUVENDJEMTY3ODM3NEExMUY5QkVBOEM4MTI1RTA2QzkKLToxMEZBQjAwMDQ3QzdFQkVCQkU1Q0YyNDcxQjY1QzUxQzFGNkJDOUUzNzgKLToxMEZBQzAwMEUxMzY4M0YxNjQwNEU4MTk1NENGQzI5MzkxNjE1MThFRjkKLToxMEZBRDAwMEY4RjExQUYxOTM3MUQzMTA1RkYyMjhDRTc2NTQxRkQyNDkKLToxMEZBRTAwMEJCQ0E0MTYzRkMyODhGOTM2QjE1RUU5OTBBRDE3OTg1QzcKLToxMEZBRjAwMDJCN0VGRjBEM0U3NzlDNkNFMkM3MTRGNUVCRTFDNzI1MkEKLToxMEZCMDAwMDg0MUY5NkRDNDIzREY5QUUzOEZCRTJBRTM4RkJFMjJCQjcKLToxMEZCMTAwMEUwQzc5MThCQzE4RkM4NDVFMjQ3QkJGRDg3RUYwNUNBOUYKLToxMEZCMjAwMEQ4OUVGNUNCRkRCQkUyODdENDcyREI5MjdCODhERTgzNjcKLToxMEZCMzAwMDI5NDBGQkZFNzQ5MjVBRTFDNjc5RDY1NDhBQjhGM0UxQTMKLToxMEZCNDAwMEJGMkYwODUyM0U3QjQ1MkVFQjg1NEZBN0U5MkY3MUI5OTkKLToxMEZCNTAwMDVGOTQ5N0I1MTk3MjBBRTZGMzU3NjEzOUU2OUZDRUY1QkYKLToxMEZCNjAwMDU2NTBCRTY2MzU5NjYzRkQxMUZCN0M0MUNBMTdGQzUwQUEKLToxMEZCNzAwMDk0OTdERUU5N0YyOTg1RTQ3QzQwQjQ3RkUxNTg5REVDRDEKLToxMEZCODAwMEMxRjI1MDlERDlCRUJDQTE4MkYyMzVGNUEyRkRDODAzRDkKLToxMEZCOTAwMEExMjBFNTA3REYyM0M2QjdGNENFQ0I0Q0ZFRjlCNDc0NDEKLToxMEZCQTAwMEVBQTVEQkE5M0ZFNDlGOUI5MTdGOEUzQjYxOTQ2RUMzRTYKLToxMEZCQjAwMEZDMjJENTY2MjNCQzVEMUMwOUQ4MDkxRjBFREJBQTQ2QjIKLToxMEZCQzAwMDEyRkVDMDQyNUYwRUUxOTk5M0VDNTZCOTkzN0ZEOUM4RkIKLToxMEZCRDAwMEE5ODNFRDI2MkE3NkQ2RkI1RTk1RkMwQUQ1OUI0NjI0QTIKLToxMEZCRTAwMDQxNzI3NkI0RUUyMkZFNEVGMUM4OUI1MURFMTQ5OUYyQkEKLToxMEZCRjAwMEM4OEFERkE1N0IwNDMzQTJGNkFCNjhBMDkwRjM1NkJEOUMKLToxMEZDMDAwMEVDNzQ4MTE3RjBCMEMwMEIyQkJFQjhGNTIxOTBDOERGQTMKLToxMEZDMTAwMDQyNkI2MzNGNDQ5Nzc4NjMzRkNCRUY1MEJGRTI2MTg0MTAKLToxMEZDMjAwMEI3OTc1MzlDMzE5NjVGM0U1NkM0MTk5NzlFM0IzRDM1MUUKLToxMEZDMzAwMDkxNUQzNDdDQTBCMEU3OEY5QUY3MjJBQ0VGOTVBMTVDODAKLToxMEZDNDAwMDFCRDFDRkQzODQzQ0JEMDk5RURBMUY0OTVGN0E5QUM2ODcKLToxMEZDNTAwMDFBQ0IyMDBEQzA2OERBNDc5MTJGN0ZCQ0VGN0RGNTdENzAKLToxMEZDNjAwMDAxOTZEQUZDMEFFMTExRjQ5Nzc0OUFGRjU1NkRGRUM5MEEKLToxMEZDNzAwMEJDOUUyQTgwRUZGNTRBQjAwRTUzREUyRjA5M0EzNjhCMzAKLToxMEZDODAwMDM4MTFDMTdGNjY5OUZCNzY0QzlERjdDQUVENkMzRjdCQkUKLToxMEZDOTAwMDc0M0I4RTMzNjlGQzAwQTZGQjk5NzMyNThCRUVCRjMzNTIKLToxMEZDQTAwMDkwRjQ2MDNBQzE2MDdGQjY4RkUzREQ2RjgyOTA4MzA2ODcKLToxMEZDQjAwMEI5Mjk4RUVFOTdCQjNGN0I4RkU0RDJGMjJEQjE3NEJEOTQKLToxMEZDQzAwMDAyNUExREMyREYxQzc5RTQ2REVDQkY3MjQzOEE0QUYyMEUKLToxMEZDRDAwMDY3NDU2MzZDQkRDQTBEQkYzRjIwOTU3NEU1MDM5NTE2NUIKLToxMEZDRTAwMDFGMDhDNUYyMDE1NDM4MDQxRjc4NjgwODlGN0ZBRENDMDcKLToxMEZDRjAwMDkxQjU0MzE5RTRGRkYwQjNCQzRGMDIyMUVGRUY1MkY0OEEKLToxMEZEMDAwMDMwRDM1RjhCNTNEODUxQTY3RTdFOUIyQ0Y0RjMyNDcwQTYKLToxMEZEMTAwMDY5RUU0MkUyQzMzNjMzNUU1NUU0QURGMTIxMkVDRUU1MDUKLToxMEZEMjAwMDU0QzNDRENDNkZBQzc4MTgwNDIwQ0JGQjUzODFDQkQ1MUEKLToxMEZEMzAwMDY4M0Y1QjA3OUY4RkEzRjdEMjk2OUVBRDc0REZDMEYyM0EKLToxMEZENDAwMEIzQTA3RUMwRjYxNTJDNDI0RTM3OEVGOTEwRUY5QkI0NEYKLToxMEZENTAwMDBDRkYzRjg2RDZFNUUwNzUzREQ0QTMzRkYzRjdENTQ4QzkKLToxMEZENjAwMDEwQ0U1MkIyOEI5NUUyNTZFQTczODhBMDI3MTdEMTExQjQKLToxMEZENzAwMEYxRjc2OUIxRjY1NjEyMDgzRDdFNzg5QkYwRTM4Q0U4MDYKLToxMEZEODAwMDk0RkI3NUI0QkY0RUQwNUQ0MkVFMzcwMEQxNTdCN0Y2NDUKLToxMEZEOTAwMDhBN0I1NTQyN0I4NTI1MTRGNjNGN0I5QUUwRUIxN0IyQjAKLToxMEZEQTAwMDU3QkFCMzQ3M0FGNjMzMDlGNTM2NEM2N0ZBOTJCNkQzRTkKLToxMEZEQjAwMEJBMkYzQjlCOUE5MjI4OUU2QTY2QjlFQzI1QkI2Q0E2MkIKLToxMEZEQzAwMEREQzg0QTRGQTBFNzNGNjBFQUQ5MURGNTdENkVFRTRGRDIKLToxMEZERDAwMEYxNjU2Q0E3RjgyNUVDQjc5NUY4N0ZEQkVCOEU4NDcxQTUKLToxMEZERTAwMEM5OEFEOUJGNjIzN0Q0NDRGRDVGNDU0RUE5Mjg3RkJCN0QKLToxMEZERjAwMEUyQ0JFNjdFQkYwMTdERTU3OURBOTc3ODc5RTREODFEMUMKLToxMEZFMDAwMDc3NEUwOTgxODFEMTcxMDU0RjBGMTJGQzZFNDI4MUYxNEQKLToxMEZFMTAwMDlCODE3NDRFOTRENDlGRjk5RDU2OEFGNjU0MUZDRTczREQKLToxMEZFMjAwMDdGMDc2RkJFOUNFMzI0M0UwM0UzODI3MTEyNkJBM0ZDNDkKLToxMEZFMzAwMEU3MDdEMzEyOUY4QkJDNjFGMkQ3MTQ4QTdEQzNGNDc2OTcKLToxMEZFNDAwMENERjgwMzhEN0ZENDIxQ0U1RDhFMjY5QkE5NDc5QzVCODgKLToxMEZFNTAwMEJERDM1MTVGRjBDNzg4QzUyNzZEQTJGQzY4N0FFQzc5RTUKLToxMEZFNjAwMDhENTVFRjk0RDlFRTUwQURDQkJCMzZDQUZGQUEzREU0MTkKLToxMEZFNzAwMEY0OTM5Q0NFQ0EzN0VGNzFBQzAyQjY5RkRCOUY0RkRCODkKLToxMEZFODAwMDE0QkRBRjY3MDc5NkE3MENBMkY4QTI3Q0MzRDE4QkUwODQKLToxMEZFOTAwMEY4QkM5MDdGRDU0QUQ4NDFGQkZCRjAyNUJFQTMzNEVGRDgKLToxMEZFQTAwMDZBMEQ4QzY3QTgxRjJERUNCOEE2OThFQzA2MTExRkQyMUUKLToxMEZFQjAwMDZFMTc3NjYwN0I5MjQ4QUQ3OTlEMUQzODIzNjUxMDlENDUKLToxMEZFQzAwMENCREUxQzY2QkVEODkxOUYxMTY2QkU3Nzc2QTA5N0M3MjEKLToxMEZFRDAwMDZEOUY2NTk1OUJGOUZGMTA3OTBENTQ5REU2NUJFRTMyQTEKLToxMEZFRTAwMEVEODc0Mjc1MkRGQjVENTFFRjIzQkY0REZDRjkwMUMwM0QKLToxMEZFRjAwMDc4QTExRjlCRjE5RTQ2REZCRkYzMzk1RTc3N0U3RTlCMjQKLToxMEZGMDAwMEFCRUQ5NUZGQzJFRkYzNEQ3RkIwQUZGOUQzNTdFRUQwMTUKLToxMEZGMTAwMDE4N0YwRUQzQjgwQjQyNDlDMDcxREZGRkE0NUZCRkJEOEQKLToxMEZGMjAwMDVGMUJBRjY3N0Q3OUE0RkZDMzY1MUMyRkMwN0VCNTE1MkQKLToxMEZGMzAwMDJEQkY2NUJFQkVDMkEyRkJBNjU4QkFFRjY1QzJGMTQyOTQKLToxMEZGNDAwMEU3NkFGMUU3MkRERjAwOUQwRDFDOTQ0MEVGRkIzNUM5RkEKLToxMEZGNTAwMDZCQzRBRjI5RjI3NEU2NkJBNzlBMjRGNjg3NjhEMDU2NzMKLToxMEZGNjAwMDQ3NzA1RTI5ODk3RDU5RjlFQThEMTUwRUNBMkYwNjk1Q0QKLToxMEZGNzAwMEY5N0M1MzNDM0ZGMzA1NDk0RjU4NUUwRjJDRUY0QTIxNjMKLToxMEZGODAwMDNGOTVFMDVEQjM1NzI2MUYwMkRGQjdEMUEyRjgyNEREMEQKLToxMEZGOTAwMEI3RDFBMkVDNjJCQTZGMTM5REE3RkIzNkQxRjVFOUJFQ0IKLToxMEZGQTAwMDRENzQzOUREQjc4OTJFQTdGQjM2RDE3OUJBNkYxMzVENTEKLToxMEZGQjAwMDlGRUVEQjQ0RTdFOUJFNEQ3NDdEQkE2RjEzOURBN0ZCNEUKLToxMEZGQzAwMDM2RDFGNThGODBGRkMxRjExMkMxNzVFMjA2ODI2QkQzODUKLToxMEZGRDAwMDFBQTc0QTcwQzVFRDdBQUIyODlCQzUxOUUzMUZERENCODQKLToxMEZGRTAwMDg5RUU2N0I5NjdBQTYzMDVDMjYxNEY4RTBDRDI2OEJBMDEKLToxMEZGRjAwMDc3QjMyQ0E2REZFNTcyMTVGQjA5NTBFRDYwMzlFMkM3MzcKLTowMjAwMDAwMjEwMDBFQwotOjEwMDAwMDAwRkYzMTNDRTUyMkI2OTMzRjZGOTYyMDAzRjE3NUU5ODZGOAotOjEwMDAxMDAwMzhGREExRTVERTNBRDJCNzZGMEFDNTdFNUYwRTUxN0U4QwotOjEwMDAyMDAwRjdEQ0FFRTc0MDRCMDY5OUYxQzBCREExMzdFMUYzMTQxMAotOjEwMDAzMDAwRDlBREQzM0U5RkRBMjdFQjRFMzA1RDAwQjRDRjVCODU2MAotOjEwMDA0MDAwM0ZCMjE0MDYzRDM0OUVGN0QxMEUyMThEOEU0NzQ0RjkwMAotOjEwMDA1MDAwQTk4RDcyMjg5MERCNzkzRTc0NkFFRkFGMEVGQkIwREU5QgotOjEwMDA2MDAwRDI1RUIyNEE3NEU3Q0M4OURERUYyNDJENzZCRjdCMTREMwotOjEwMDA3MDAwQzZFRTc3OEExRUJCREZBOUEzNjNGNzNCMUVDRTY5NDY5NwotOjEwMDA4MDAwRUNGRTgzM0M5REUxQkNCQzBGOUE3NzM4N0VDNkI0NTgyOQotOjEwMDA5MDAwN0NCMEUwM0IxQUZGMjdGMDU1NjNGODJFNDFGODNFMkM2OAotOjEwMDBBMDAwRDFCOURBM0Q3QkZBNjg1REUxNUNERDdDQUY4M0Y0RDdFMgotOjEwMDBCMDAwOEI4NUYzN0Q3MTcwRkUxQ0M2NTdCODE5QjgzMEQzMzVFNwotOjEwMDBDMDAwQjI1MzVGMkFEQkVCRTcyMDgxNjM2QURGMEFGMzVFQUY5RQotOjEwMDBEMDAwMzhERjMxRTE4QUZBMEJEQjBCNTFFNzUwRjVCMkNDRkE4RAotOjEwMDBFMDAwQ0MyNkEyNjcyMzMzODVGOTgwQkVBMTA3RUZENzMwOTdDRQotOjEwMDBGMDAwRTg2RjMxRjg5ODNGMkQ4RUQzNkI5NkJBRUY3NzkwNUUwQwotOjEwMDEwMDAwMTNCRjRFOUEwREY5NUQyQTVCODQ1RTEzQkZERTJFRkU4RgotOjEwMDExMDAwQTg0MkI1QjU4RkUwREI4RDBGRUJCNENDMTY4QjRGRkI0RgotOjEwMDEyMDAwQzg4RjkxMDk2RDBFRDI2M0JBRTM4MzMzNzI4QzVGOTNFQgotOjEwMDEzMDAwREM0MDJFMDYwNDBGNjEwQUYwNUY0MjdEQjJBNkEzNTg5MAotOjEwMDE0MDAwRjhFNzlEN0VFMUU3ODc0MDFBQ0Y2MzE0ODg3OTcwQTNCMgotOjEwMDE1MDAwMjg3RkZGMjgyNUM0N0UwNzM0MjlEOEJGNjREOTYzRjFERQotOjEwMDE2MDAwRjA4NEJFRDJEQUI3QjA1RkY5MjUzMEUxQThDQjkyQUQwQQotOjEwMDE3MDAwRDM3RjhGNTZBMDQxRkFGNUM4Q0Y4NEZFMzREQUQ1MTg2NAotOjEwMDE4MDAwNTRCNEFFRjZGOTI3RjlFNjM5Qjc2MkM2N0Y1RUUwMUNEMwotOjEwMDE5MDAwOTJFNjRGN0U4RTZCQ0NGOEJCMDkyREEzNUVBMTdDQzc4NwotOjEwMDFBMDAwQjlFNENFNTdGQkQwN0U4RERGRjlGQjBDNEFERjkyQjQ2OQotOjEwMDFCMDAwQzdFRUMwRjFBRjk2MDQ1RUM0REI5NUMxMURFMzM0REEyRgotOjEwMDFDMDAwRkZDQjI0MkZGQjJCQTY4MkJGQUZCMDQ3NDIzQ0FGODlBOQotOjEwMDFEMDAwMkUxRkVCQjUzNjk3NjFFN0YzMjhEMzdGMDkxMDlFNEFBRgotOjEwMDFFMDAwN0FGQTMyRERDMUYzNThBQjdFMzA5NUZDMzFDQkMxRjRFNQotOjEwMDFGMDAwQzczNEM3RUU1RjE3N0IyOENFMEVBQUMyRkRBNzdFRTNFOQotOjEwMDIwMDAwRUQ5RTA0NzgxNDE3MEYxMDJCRUYxNzE0NUFGN0NBNDVGOAotOjEwMDIxMDAwQkM4QTA2RTJGRTc3QTVFOTQ3QUE3NDZERjQ4ODczMzhCNAotOjEwMDIyMDAwOTQ3MzdEQTE4QkREQTQxMEUwQzdGMDc5ODVCRDkwRURCRQotOjEwMDIzMDAwNjJCNDA3RjhCQzVGNzMyNDhBRDcwMzM1OTNDRkQ1NkZCOAotOjEwMDI0MDAwNzRDRjY0QkU3QzYzN0QxN0JGMEVFM0Y1RTI4NjBCQUMxMgotOjEwMDI1MDAwQ0JENDEzQzZEMzM3OUNGRkUxNDE5QTkwRkJDOUQzRjdBNwotOjEwMDI2MDAwMUE1NDVDRDZENjNGNUE5RkFENzE4OEZCQjlFMENGODg0RgotOjEwMDI3MDAwQjlCNzMwQjg1MDlDN0I5Nzk5N0E1M0E1Q0I4NDUzNjExQQotOjEwMDI4MDAwQTA4RUY0RTMwRUJEQTk4QkJERjhGNUVFQzk1OEYxMkU5MgotOjEwMDI5MDAwMDhBRkEyNDJDNkUzMDZDRjlBQ0NDRUYzMUQ2QjFEOUZEQQotOjEwMDJBMDAwOEM2ODdCQkMxNUUxMjVBNzRDNzYxMTdGNUNEMUNGMzdEQwotOjEwMDJCMDAwOENFQUY3M0IxMDNFNEM3NDAzNkU4REY1RjU5M0NEQzc3OQotOjEwMDJDMDAwRjZDQjc5OURFQjQyM0M3QjcwMUNBREEzNTk1NkM1QkQ2NgotOjEwMDJEMDAwRjk0MEREMzhFQ0I3QkQ1NEUwNURGN0Y2QUY4MDI3Q0VDRQotOjEwMDJFMDAwRUJCMkMyQUNBRUYzQjJFMkVDQTdDODQ1QTlFMTI4QkRCRgotOjEwMDJGMDAwM0RDMzg0NUZGQjEwRUYxNDZBNTdGNkM3QkUxRTlBQUY2QQotOjEwMDMwMDAwM0RBRjcxNEY2RkQyOEI2RjE1N0EzMUVFMkJGQjQxNjQ4RAotOjEwMDMxMDAwM0I0OEE0OTc0RTkxQ0ZERTQyRjk1MzM5QTA5MkZEOTkwNAotOjEwMDMyMDAwRDkyMzIwN0I0OENGNUIwMEVDMjcwMkREQUYxM0FBQzg5RQotOjEwMDMzMDAwRkQ4QUQ4NEVDRUJFMTVFRDI3RUNGN0RENTUzN0E2RDE5OAotOjEwMDM0MDAwRkRGRUVDOTQ0NTY5Rjk2RThBNkZDMkE5MEVDMEJDNjRDQgotOjEwMDM1MDAwRjM4QUZCRDlDRkJDRjc2RjY1NTQzRThGRkREMkQ3M0JGNAotOjEwMDM2MDAwQzUzOTczRUUwRkZFQjY5Q0U5MDBCNDc0RTcxODFBQ0ZENgotOjEwMDM3MDAwQzdFRjBCNDREMjY0OUU1RkY5QjU5RjBEMjdGREFBRjcyNgotOjEwMDM4MDAwNTlGNzMwRDJDRjdBRDEzOTJGODI3NEE4NDkxRjk3NTVBNwotOjEwMDM5MDAwNDQ4NkZCREQ5RDcwQ0FDQzRGNkNCRjY0OUJGMDM4OThERgotOjEwMDNBMDAwN0M3MjM2OUQ4NzU4RjczMDFFRUFGMTA2OUY4NzlGMzQ4RQotOjEwMDNCMDAwQ0Y0RkYyOEM2OUE5ODRFNzA3MDc1QUU3NUFBRDU5RTQ5MQotOjEwMDNDMDAwQjJBQTRFMzI1MkU3RDAzQ0RGOTRGOTdFQzU2N0FBOTFCQgotOjEwMDNEMDAwOUE4NkU1MjdDMUNCRkE2M0EwQ0RDRUU3NDRBQkVFQUU1QgotOjEwMDNFMDAwRTg5OUVFRUUzRTZFN0Y0REExQjA2RkFBRTJFMkEyQUFCRQotOjEwMDNGMDAwOTQ1NjA3OUQ2NzU1RkQ5MzcxNTE0RDY4NzEyNzNBMEZDQgotOjEwMDQwMDAwQjNENjVGOURBNjgwMzIxNDUzMDlCQ0U3QUJGN0UyM0YzOQotOjEwMDQxMDAwRTQ4NDcwREM2Mjk2Nzc3NzdGRTNFN0U2RkFBQ0ZCMTk1OQotOjEwMDQyMDAwRDU3NDNGMDMzRkFEN0FCRUJDMjc5Q0M3MEVBRDNFMzNBQgotOjEwMDQzMDAwMkVFNjFFMDREOTZCQjRCRUVBMzMxM0Y5N0JDNTVEMjdFMwotOjEwMDQ0MDAwMUM4NERGRDQwRjNEODU2MEREQ0ZFODBFQ0VEOTg1QzI5OAotOjEwMDQ1MDAwREVBOEE2N0IwRDE5RDFERjA1MUQ3N0Y2OUZDOUU1NEZGNAotOjEwMDQ2MDAwOUE3MDdCNzJBRjZEREFFNjA0RjM3Q0JENTBEOERENDM0MQotOjEwMDQ3MDAwQjIxNEY2MTc1Q0RBMEFDNkE2MDRFMzVBRjVBQ0Y3MEQxNwotOjEwMDQ4MDAwQkE5QjU3RDNBNEYwN0M5QTM3QzUwNTI3MUE2RkE3MDlFMgotOjEwMDQ5MDAwNDc2QkJFNERFOUUxMjU1RTcxQ0UzQTkwREUyRkU4Qzg4QwotOjEwMDRBMDAwQUI5MUZFNTc0N0YxRDNCM0E2N0ZBMEU5M0JFMUZFRkMzOQotOjEwMDRCMDAwNUVDNjE1QzI4RUVENkU5RkU3RjRGM0E1MTM3RjE4QTlGMwotOjEwMDRDMDAwQjRERUZBNEEyNjlCNUQ0MDdFQjQ5RUYzNUE2RDI0MjcyMwotOjEwMDREMDAwM0JGODRGMzdGQkREMDk2NzM5RTYxRTRDNTczODNCQjgxMAotOjEwMDRFMDAwQkNFM0ZFMTkxODFFMjk5QkU0MTBCMDNFRjBEMDFGNEI1MAotOjEwMDRGMDAwMUMwRTFDRkY5ODBEMjJDNDc3QTZDODdEQTdCRTQwNzlBQwotOjEwMDUwMDAwQjQxRjg4MkU4RkIxRUNDMDc0ODNDQ0Y3OTk4RTNEOUFCRQotOjEwMDUxMDAwRUYyMEJCNkM0OTM5NDQ2NEU0NUJDN0RFRUE1RjQ3NzE5NgotOjEwMDUyMDAwOTdEQTAyRDQyNEM3QTFCQUIzMzZGNkZDQjExMjhDM0RENwotOjEwMDUzMDAwMjlEOEVFQzYwM0RFRDQ1NkNDMkZCQTI3NTY4RTFEN0JBMwotOjEwMDU0MDAwRUJDNzBFQjIwN0E0ODU2RTNGQzUxNUUxM0NBN0JFODA4MAotOjEwMDU1MDAwRjlDNUNEMEVCRTlGQjVFNEZFRjhGRTYyRjVFMDZDNTMyMgotOjEwMDU2MDAwREVDNkVCQzM5RjE3OUFGQUYwNDgxODQ5NzJFNjg1REE5RgotOjEwMDU3MDAwNjZGMTdFOEU3OTFGMTFGNTNGMjMxMTlFNTg3QTcwMjhGRgotOjEwMDU4MDAwNzlEMkRGOTlFRjQzQTM0QzdDNjk5QzkyQjhGRTkyMjIwQQotOjEwMDU5MDAwQjEwRjJCMUYzQkVERjA2OERERDNEOTcxRTQyNzA1Mzg4RgotOjEwMDVBMDAwRkU4OTVBOTVEM0FDQzE4NjZCMzBGNjNGNjBCMDJGNjU5QgotOjEwMDVCMDAwMzBCNjk3QjU0OEZGNEZEOENGMjlDRTQxMTFERjM4NUYwRAotOjEwMDVDMDAwNDNGN0Q0NDhERUNFMTU3QTgyNTNCRUI5OTJGNUQxM0VCOAotOjEwMDVEMDAwQTAwNjU5N0ZGMUZCRDk5RjZFNDNGRDI0OERFMjM3NkU1MwotOjEwMDVFMDAwOTEzREVDNkYxMEVGMDc4REY5Njg1MTFBQUQzN0YzQkZFRAotOjEwMDVGMDAwRTczQzRENzBBNTNCMEU0MEVGQjA5NDFCQTVDNERGRDc4MAotOjEwMDYwMDAwQ0Y3MEYzNzlGRjI2NUI4MEZCQTE0MEFEQkIxMDlFQTFBQwotOjEwMDYxMDAwMjdDN0VDMjZGNzc5NDFFM0JEOTNDOEVFNTM1Qjc2QjU2NwotOjEwMDYyMDAwOTJCRDUyNkZGQjc0MEZDNTI1RDQ0RjA0M0RDOEQwMEU0OAotOjEwMDYzMDAwRjEzODM1MkQzMzlFQTZGNkZENjdCQTc1QkE1RkJBM0UxRQotOjEwMDY0MDAwRDcyODU1QTNGQUQ3MjBGMjFFRTk5OTI3QUI2Q0VDMzdDRgotOjEwMDY1MDAwM0RENUZDMEIzRUFGNDJGQjJFNDJDQUY3QTlBQTNDRjZBMQotOjEwMDY2MDAwOUI1OTcxM0Y3Q0Y2OTdDMDZGNzgwMkU1MUI0NERERTcyQwotOjEwMDY3MDAwNUVEMUI0Qzk0NkZBRjhBNUI0NTE1MTcxNTVENkJDQUE5OQotOjEwMDY4MDAwRUU2Q0NEQkU4RUU0RUUxMzBBQ0JEMUNDREY1Q0MxRjFCMwotOjEwMDY5MDAwMDNCOThBMjYxMTNDQUY5MzU0QTE4RjlBN0FGMkI1NjBDMAotOjEwMDZBMDAwRkQzNUJDNDJGQUU5NDJEMjkzMTEwRjNGOTQ0MjFDQUY5MAotOjEwMDZCMDAwNjk4Mzk2NjdBOUZEREMxQ0ExMEY4MkQ2Mzg4MkZDRDcxRQotOjEwMDZDMDAwRTEyQUYzN0RBMkU1RjYzNEQyNkZBQzczODJFRUYwQTE5RAotOjEwMDZEMDAwM0IzRjBGRjZCNEU0MUQxQ0Y3QTQwNEVDNkZBQUIxNDUzMAotOjEwMDZFMDAwRkFEM0ZDOEVEQjEzQ0JENzc5ODM0RDNFMzBEMDFGNjIxQgotOjEwMDZGMDAwNzk5RTBFRUE2MzM0QUYwMjVGMkVEMTY1QjU0RDVCQzlCQQotOjEwMDcwMDAwN0VBRjdENUU4RTBGNjk5N0Q0RjQ5ODc3NUVENDg2NUY1NgotOjEwMDcxMDAwOTNERTVENjM1Mzg1N0Q3M0MwMjhBNUYzOThGNjE5NDU3NAotOjEwMDcyMDAwRkNFRUNCNDk3QkI4M0ZGMzExRTQ3QjE0OTc3NUVCMTNEOAotOjEwMDczMDAwNEQzMzE1ODQ1Qjc1NkZENEJCMzBCRkY5ODk1RDMzMTVCQwotOjEwMDc0MDAwN0E4NzI3MkZCQ0M0ODZGOTU3MDdGRjQ1OTQwRjA5MUZFNgotOjEwMDc1MDAwQTZGQzFGOUZGODQ4OTQwRjBCMkZBMUZEMzlGOUM0NjkxRgotOjEwMDc2MDAwOTEyNzAzMEMxMUVDNkY0RkZDRUZDQzAwQUVFQkI4RTkxNgotOjEwMDc3MDAwRkYwNDNEM0M5RkU2NTlGREMyMjA1QkI0N0ZGMUM4NjA5OQotOjEwMDc4MDAwQzEzNzhGMjc4OTdBQzc3M0UxODZBQjQ5RkYyODBDRjNGRAotOjEwMDc5MDAwN0QxOEFCREU2QjgzQ0RGQjA0MjZGRURGRjQ2MjUyMkJBQgotOjEwMDdBMDAwQzUwOTVCRUQyMDI3NzFGRjQxQjNERDRERTY3QjU5NDg1QwotOjEwMDdCMDAwN0ZCRkEyN0EyRkU3NjhFOUJDQ0Y0NzkxNDcxMTVDOUVDMwotOjEwMDdDMDAwMUZDQ0U3M0QzNzBENEVFN0ZBMDQ5RkY0QTJBRUUzMkRCMAotOjEwMDdEMDAwMjMzOTRGNzJDMDFFN0JGRkFEQzFEQzJGMjgxMkZENTc5RAotOjEwMDdFMDAwRjc1NkQzNjgzRkIyRDM4NTlEODExQjkyNzYxN0JGNjNCRQotOjEwMDdGMDAwQjBDOUQ0QUJDNEZFNjRDQTZBNjk1MDY1QjkzMzlDRUMxNQotOjEwMDgwMDAwRTY5N0NGRjYyRDY1QkJCOUEyOUJGQjlFODM4NTFDQkJFQgotOjEwMDgxMDAwMjkyOEM2ODlGNEQyRDRDRDdDRUYxQzBDOEE0Nzc5QjkzQgotOjEwMDgyMDAwMzk2OTczRjQ3QjI5Mjc0REY4MUUxOTlDMjZFMEQ3QjE0RQotOjEwMDgzMDAwMEYzRDI1MUUyNzY4QzJBNTJGQzJCQkI4MTM3RkFDRjY5QgotOjEwMDg0MDAwMTc1QUY3RjY3RkQxQkFCQkVDNTM5OTk4OUZCNTFFODAyMwotOjEwMDg1MDAwN0IwNTFDNzA3RTY5QThFNzFGNUY2M0I2MUI2RENENDNFNwotOjEwMDg2MDAwNjM3QUI4RTlDNURCMzcwOEZFQTdBNUIzREQwRTNGMTFGMwotOjEwMDg3MDAwNzA3MDU5RTMxNkYxRjlFNDBBNTMwRjk2MDM2RjM4QzgwNAotOjEwMDg4MDAwREU1ODUxREZDNkVGQUZBRDY4MTRFRjZENzVEMjlEQjE4NAotOjEwMDg5MDAwMkE5QUNFMzJGM0M1M0EzMzY1MjMzM0M4RjQ4OEVCNjMyMgotOjEwMDhBMDAwN0EzNENDNzg4MzU4RkNFOTgwNzczQzFENzdFOTRGNEI0QwotOjEwMDhCMDAwOEZFRDRGRTNGRUJBREI4N0IwODkxN0RGRDgzRTA0MTMxNAotOjEwMDhDMDAwQzNCMzgzQkZDNEMxQUY4MzFFNzNDRDc2NDU4ODY3NjU0QwotOjEwMDhEMDAwNURFOUYxOEZEREQxNzFFRUQ3MUNDRkJDNzdCMkUyNzY0NgotOjEwMDhFMDAwMzM1RTU1OEJDNUUzMTU0REI5QjY4NTQ1OURGNUVGNkU2NQotOjEwMDhGMDAwQkNENzFCMUQ0RkVCNkE1QTEwMjBGOTU3RDM1MkNFNzE0QgotOjEwMDkwMDAwQjUyQjlFREJGQUVCMDBCNjVGQjZGRDAxMEYwNTUzMUY1QQotOjEwMDkxMDAwNTMxQUIyNDkyRkFFN0E2QzlEQzdBMDczMTYyNUUwMjFGOQotOjEwMDkyMDAwQkU3OTJDMjQ0RjRCNzQ3Rjc1RDQxMDI5NDYxRkFCQTY3QgotOjEwMDkzMDAwN0Y2MkZGQzc5RkZDNUJEREJGRTFGQ0JGOTA1MEJGNDIwMQotOjEwMDk0MDAwNzg1NzM3RkRCNThFRUNCNzNEODYyQjQyNzJGQkE4MTI2NwotOjEwMDk1MDAwOUU0QTcyRjRBNjA1NkUzRkJEMkY1OEQzMUNBQjRGMkQ5NwotOjEwMDk2MDAwRkJFNTAzRDkxQTA3NzcwN0ZBRDg1ODlGNkFFRDQzRUREQwotOjEwMDk3MDAwQUExRkI1RUI2NEJGNTdFRjkzNzUxQzA2NkEyMDUyNDc1OAotOjEwMDk4MDAwRjM4QjZGNUZEM0Y4QTE4M0UwQUFBMjNFRDg3NzVDRDc0MAotOjEwMDk5MDAwNzJFNDI0OENGNzM1NEQzRkZBNTRGNjUwN0FFQzFEMjg1QQotOjEwMDlBMDAwQTFGRUEyRkMxMTA4RjdDQTZFRjRCMkMyMjFCMUY3MDI4RgotOjEwMDlCMDAwMkNGODQwMjg4QkY1OUJFMDEzMEY5NUJDOEZGMzNBRjE5MAotOjEwMDlDMDAwRTg2QjFFQTkyODVBNUVERTI5Q0VBOTFBNkZGQ0Y5MEIyNgotOjEwMDlEMDAwNUFGNzcyRjUyNEU5MDdDRUFFN0E4MEQ2MkMwOTI1QkJFQQotOjEwMDlFMDAwNDVBNDU1RjY1NjBGRjkwNUFBMzZEOUY1MDA3RUFFREFCQwotOjEwMDlGMDAwRkE4QkM3RTk1QzA1REU3NkVBNzRGNDU4QjVGNUI0ODM4MgotOjEwMEEwMDAwREUzRkFCOTI4Qzg4QzQ3QTE2NzhBNDkxOURGQkI0N0NBRgotOjEwMEExMDAwRUI0N0MyNUZENTRCODZFOUI4NEZDQjdFRjVCOUE4NkZERgotOjEwMEEyMDAwNDAyNDA5RUIyRjdGRkE3REY2NkY1NUY5REM3RTU3ODI2MwotOjEwMEEzMDAwN0RBQTY4RENFNTA4QkIxM0VDNTNFM0ZCNTM0OTBGMEFCRQotOjEwMEE0MDAwM0VGMTI1RUZDM0IxOUQxMkY0Q0NFRERBQkU3MkQzNDc2RgotOjEwMEE1MDAwMEVBMjlCMTNCODIxMTk2OTAyNUU2NDlGRDYzNENBMEI5QgotOjEwMEE2MDAwMUNBOTg5RjZBREY1MkFEMkZGQjA5Q0ZEMjAxN0RBM0YwQwotOjEwMEE3MDAwRDcxMDEwNzRGMURDRDY2RDY0MEY1NEJFRTNENEE3RDM0NQotOjEwMEE4MDAwQjhEQjZFRjEwMEVFRkYxMUM1MkZGMEZENjdFQkIyMEQ4NAotOjEwMEE5MDAwMUNCN0QyMUVDODU2MzkxNURGMkIxRkI5OTVGMTcwRTk2NgotOjEwMEFBMDAwOUJCNzY2QjM1RTA3NDYyRkRCNjg1RTZGMkY1QUU3RTI5RgotOjEwMEFCMDAwOERCMzc4OUQ0QkMwQzc3ODU4RjkzM0UxQ0ZGODVDODE4RQotOjEwMEFDMDAwNjk4OUVFMUI2RjFGMjJFNDg3MTM2RTJFMjFGQUY4MUMzMgotOjEwMEFEMDAwN0IyMjNGQ0MxMTA3ODg3OERFQjdDNDNCNjQ0RUI4M0ExRQotOjEwMEFFMDAwMzVGQTlEQjkzQjg3MDgzOTEwODBEMDdCRjRGRTY0MEQ0MAotOjEwMEFGMDAwREFDNUM0MTdFNDM3M0Y5RjRBRkRBQ0NBNTVGQzRFOTU5MgotOjEwMEIwMDAwRDcxRjMwRTEyNTlEMTNGMTFDOUE2MkM1OURFNkUxN0U1OQotOjEwMEIxMDAwQkQzOUE1MjdEOUMxNEUzOEU1QjhCRThDREY2OUQwQzgyQwotOjEwMEIyMDAwRkYxQkQ1OEVFMTc2NjRCMzMzNTk0MjNCRkY0ODc2RTIzMgotOjEwMEIzMDAwN0I4NEVGOTlFQkMwQkZCNzIwMEE5RjZBQjYxQzYxN0MyQgotOjEwMEI0MDAwMDJCNEJCNTI3MzQ0RkU2MUEyNDNCNDhCNTIxMTZFOUYzOAotOjEwMEI1MDAwRURGQkQwRDE5QkZDMUQ5OTM2MTg0MEYzNkRGQjg4RjM1QgotOjEwMEI2MDAwQTA2NzY5NTRERkVBQkZBNkQ5MTlGMzJFNDlDREEzMUZBOAotOjEwMEI3MDAwQzVEMUIzMzNFRUJEMTMzRkMzQjMwNjUyMzVEMjM3OEY2MQotOjEwMEI4MDAwMzgyMjUzNUZBNDcxNzA1QzhBRDc1QzcyQkYzM0U2QkRCNAotOjEwMEI5MDAwQjA0RTdDNzE3NDdFQ0ZFREE0NEZDQkJFNUE2QUQyN0YyQgotOjEwMEJBMDAwRkNGQUUzRjlDMTkzNzFGQzAwMzY2NjdEQTVGNzlGQUFCNAotOjEwMEJCMDAwRUNBMUM3MDkzRTU1NDhBRjAxQTY1NzQxN0ZBOEEzNDdGRQotOjEwMEJDMDAwMDYyMDNEN0NGQ0Q0NEJGQkJGNEY3RUJBNDY3QkU2NzRDRgotOjEwMEJEMDAwMUUyRDk2Q0Y1NjNFODNGNDRCRkUzNDg0Nzc5MjRFN0M4NgotOjEwMEJFMDAwRjY0QjA3RTlCRDM5MTU2ODA3RTNCQzNGNzZFQjc0Mjk3RQotOjEwMEJGMDAwQUQyQkRERTJGNzg0NzRFQjA2M0VEN0ZBQkZDNTVGOTdGNQotOjEwMEMwMDAwNzZDMzVGRjdDNUMxRjM3MzI4NEFBNTNCMENDNzlGNUM0OQotOjEwMEMxMDAwN0UwOUZCMTVFMkUwNkJEOUJCRjE3Q0IzN0E4OEM2NzAyNAotOjEwMEMyMDAwOEVFNzlCRjhCNzFGQTJFMEI4RUNCRjNGNjFCQ0ZEQTIwNgotOjEwMEMzMDAwOTczODA3QUI3RUY0QUYyQ0JGMTBBQzExMjdFMjZENzU2RgotOjEwMEM0MDAwRTg1M0NFQUYyM0Y5QzVGOTVEMzNFOUJDQkFFQkJBNjMxQgotOjEwMEM1MDAwRTExOTVGQkVDMUU0NDcxREY3RENFRTg0MDBDNURENDU0OAotOjEwMEM2MDAwNzZDOEZDMEU0MzNCQ0VBNThFRjRGM0E3NzJGOTlDNzBCOAotOjEwMEM3MDAwOURBOUVGQjdBQjExMEZFOUU3RUJEMkFDM0NEQzQwRUYzRAotOjEwMEM4MDAwQzFCNDA3NEFENDAwQjU0RjMyRTMwRkJDMTE0RjVBOTQ5OAotOjEwMEM5MDAwOUVGNDdFOEJFQzIxQkQyRTFDODI2OTg5REYwNTBDRjI0RgotOjEwMENBMDAwM0NDMkQwNURGOTFBNzE1RjRCM0VCQjJENkNEQUY1NEUzQwotOjEwMENCMDAwMUMyRkJDRTZDQjZENzQ2RTdFNDg3MUYxQjlFNUEyMzU5MAotOjEwMENDMDAwNzMzQzdDRkZBRjI1RkYzRjA5MkYxNkJGOEE3MDI0N0E0MwotOjEwMENEMDAwMEExODhFNUUwOEU3MUIwNTA4RDBGQzA4RjA3OUIwOUM2NgotOjEwMENFMDAwNTJCNkU3NDVBQ0I3MDQwMTRDRTcyNEYxRkU5NDY1RTA0OQotOjEwMENGMDAwNEQ2RENERURFQTM3NDEzOUU4MjBGOUJGMTRFNTExRkIyMAotOjEwMEQwMDAwQkQzN0M2OTYyRjZCRjk5OEYxNkM1OTFDOUVGOTA4Q0YyOAotOjEwMEQxMDAwN0E3NUM1QjNEQzRCNERGRjRBMjk5NDlBRTdCQTZDQ0Y3QwotOjEwMEQyMDAwQjdFRjk1RjkzQ0ZGOTQwQjU4REZBMDczNUVEQzMxMzhDOAotOjEwMEQzMDAwRDUyMkYzRkU5QzdBNEEwQTcxQkM2MTIwNEJCQ0RGOEE0MwotOjEwMEQ0MDAwRjg0RTdBOTY4NTg3RjFGNjdEN0M3QUUyRDk3NzQ3RDI5QwotOjEwMEQ1MDAwM0RCMUFBNUZGRkE1RTRCRjMwM0RGMUVCQjcwN0JFNDg0OAotOjEwMEQ2MDAwRjlFN0ZFRENGRjJGRDBCNTdFQzVDRUJGQjIxREQzQkVFNgotOjEwMEQ3MDAwRDNDOUZFRDBGNjlEQkZFRDRGNzJCOUZEMDVBNzRFRjg2MQotOjEwMEQ4MDAwREI3RUE3NTNDNDM1RUM0Q0UxNzdDQ0RBRkIwOUJGNURDMQotOjEwMEQ5MDAwNzBDNzk3MjU2MTk2NUI2Qjc5MUZBNzVGRUFFMEZEM0UwMAotOjEwMERBMDAwRDVGMjM3OTYyM0E3NUE5QzFBQURBMzY2NjcwRkY2OEYyNAotOjEwMERCMDAwRDVCQzkwMTQyMkZGNDBGQjhFMkY0NzQ2QkY3N0Y1Q0Y1RQotOjEwMERDMDAwQUVBN0RBQkM0RkQzOUUwMjczMjk2RUE2M0Q0REM0NTkxRgotOjEwMEREMDAwRDZCQzM4RTYxNzZCQzgxRTY5REFFNTIwRkY3RkM1NkYwMQotOjEwMERFMDAwRkU1RTQyN0NBOUZEOTk1RDBFRTI1QjY4OTczRTAyODgzQgotOjEwMERGMDAwMUY3MzJFRkRFOTAzRjY1RTc0NUYwQ0Q4REUzRTdERTlCRAotOjEwMEUwMDAwM0JCM0U4N0RBQ0FFNzAxMTcwNjg0NzM4RDBCQTEwMkU5NQotOjEwMEUxMDAwOTVBNDk3NzUwNzhGRUE2RjJEM0MzRTY1N0JBMkFBNjU2NgotOjEwMEUyMDAwMTREMzUxMjc1QzI0NDM3QzRGMDlCOTI0NUFGRkYzMUU4NQotOjEwMEUzMDAwRjIxQkI1RTdBMUZDRDc2OURENUY5NjkwRkU3NEExNzU0MgotOjEwMEU0MDAwRkZDN0E1RTI3REVFRkZFN0Q3NkQ4MzhCNUFGNzUzREYyRgotOjEwMEU1MDAwREE3NTBCRkMxRjc2QTkyNkRFQTc4QUEzODNBRTc4RkU3RgotOjEwMEU2MDAwREMwRjM4QkYyRDQ1RTdGOTdFNDVGQTdGRkQ1QkJCRkUwMQotOjEwMEU3MDAwQUZCQ0VGMjVFNEI3QkREODdERkZGODVCQkJFRTBCRUQ1MwotOjEwMEU4MDAwRkJBQkU2QkVBN0E4NzRCRkFFN0RDN0RGRkJGMzdBQkY5RQotOjEwMEU5MDAwRTJCQTkzOEJCRUFERkNFREZDRUJFRUQwOEY2NEFGOEI3MgotOjEwMEVBMDAwOUVEOEJBMDc1QURCMzQ0Q0Q3NzVBM0E3OEMyQUIyRkM1QwotOjEwMEVCMDAwMTBDMjFFOTE0RDdENjMxRDBDMzMzNjkxNUQ4NTdBMDZGRgotOjEwMEVDMDAwRDkwMUVCMzI0NUJFMUVGNTA3OTlFRjBGNzJCMDBBRDQ3NwotOjEwMEVEMDAwRjdENUM1QkJCNjhBMUY1NENDREJGRjdDMjNDN0IzQUNBOAotOjEwMEVFMDAwQ0JGRTBFRTQ5NUQxNzk4NUYwNjMwNEQ3RThCRTVERDhEQQotOjEwMEVGMDAwM0U5ODY2RDM4MjNBM0Q1N0I1RDJCNzA5Q0JENURFQjIxQwotOjEwMEYwMDAwNEFGNkNEM0FFRDZBNTdGNDNCMTY4QURCMTE2M0E3Qjg2RgotOjEwMEYxMDAwRTNFQzhERTQwMjQ3OEM1RDkyMDRCQjU1RjJDMzI3RTlGNAotOjEwMEYyMDAwMEFDN0ZGMzkyMUFBM0RENkNGMkExMkVGRjQyNzQzMjg1QQotOjEwMEYzMDAwQTBCQTJGMUU0RThCQkUzRTlDNUM3Q0FGNTIzNUUxMDRBNgotOjEwMEY0MDAwODY0MUVCNzY2QTBBRUI2MTBBQTBGRDI4RDYyMUVDNEVCOQotOjEwMEY1MDAwODRBMzE2MDU0NzMwRUQ1MEM1MDRCOUEyMEQ2MzM4QTIyRAotOjEwMEY2MDAwMDFBMTREMUE0RDcwRjUzMzFDODNCRDY0OTVFMURBRDlBQQotOjEwMEY3MDAwMUZBRjNCN0UxRkQ2Njk5MzIwQ0ZENEM3MjVGRDlCODcyQgotOjEwMEY4MDAwRjNEODIyMTExRjEwMEY2NzJCQ0RGNzk1QUYyMUZENzdGNgotOjEwMEY5MDAwRDUxQTcxQ0VGNUNDRUZCRUMzRjkyNjNCRUFDMzc0Q0ZBOAotOjEwMEZBMDAwMzBENUI3QTI4OEZDOEU1RTQzMjIzQTVEMzU0M0JDMkYxNAotOjEwMEZCMDAwNTg0NkY3QzAzMkM5RDQxNzcxQjg5OUFFQkVBMEIwQkZCOQotOjEwMEZDMDAwMTJFRDBDRjY1N0FBNDBGNjlGM0MwOTFBRDkxRkU4NTVCNgotOjEwMEZEMDAwRTJFMjdBNTU4RTdCMEFERTJDRTI5RUEwMTAzNEYxNEVCRQotOjEwMEZFMDAwNEI2Q0ZDNEY2MDEyMTQ1MjVDQzMxNEI5QUE4MUU2NzVCNQotOjEwMEZGMDAwMEE1MjFBMjhFRUQyNjE2RkVEQ0ZGRUUxN0UwMDhGOTE4QQotOjEwMTAwMDAwQkZBNUZDOEI4RDU0OUU4QjdBM0REMDdEMzJBNUY1M0RERQotOjEwMTAxMDAwOEE2RkI4NEQ0RTA1OEVBQjhBRTBBNzI4Qjg1RDc2QzZCQwotOjEwMTAyMDAwMDU0QTE0OUNDQjIxMkQyNjdGQTJERkUxMjZCMjEzRjJDNAotOjEwMTAzMDAwMDI0RTk1ODJDNzJBNUNCRDYyREE5RkU4NzU4NkM3MEJBRgotOjEwMTA0MDAwM0E1RDJBRDk0NzUzRDREQzk4RjZCMjY3RUY3QjY0RDc3MAotOjEwMTA1MDAwQkM5MTZFNjNCQkUwRjI5Q0MxMzFFREFGRkFFMEM0QzY1NwotOjEwMTA2MDAwMDUyNkNFRDIzQUJFRjdBRUI4QTc4QUY2RDYyM0FGNjMyRQotOjEwMTA3MDAwQkIzN0VGMDcyMEJGRjExNTVBNjk0Q0JCNjZEM0JGMTJDRgotOjEwMTA4MDAwOTk2MkU3Rjc2NkFFMkMxQzEzMzM2RTczNzgzN0MzQTVFRAotOjEwMTA5MDAwMkEwQjI0M0EwRkFFQjIyMTQ5NjBCREVGRUFFNTMxRjVFMwotOjEwMTBBMDAwQkUzN0ZBOEE5ODdFNjcxODMzNjJGMjU1QUJCRjAwMjVDNwotOjEwMTBCMDAwMDM2MERDRUFCMzQwRUYwNzk2QjYzNkM2QjQxRkJFQjc4RQotOjEwMTBDMDAwMzlBNkJFRTc3NTM0ODUzMDJERERBNzA1MjkxRDc1NTA3RAotOjEwMTBEMDAwREMyMzFEOEVGQjQxRTcxQkNERTE4NTNBQzVFQjE0RDMyNAotOjEwMTBFMDAwMDVEMDMyM0ExNkYwNTY1MDE4RjJDOEEzRkU5NzI4QkQyNAotOjEwMTBGMDAwNTBGQzMyOThFRkIyMjY5QkU3QUZFQjZEQTFDNjA1Qjk2NQotOjEwMTEwMDAwMTRGRkQzRjBFMzVEMTJDNzQzRUUyNjNDMUQxRDY5QTgxMgotOjEwMTExMDAwNDhDNUVBNjNDRjM0QkU0NDY5NTNEQkY4N0E3QUM3QjM3MwotOjEwMTEyMDAwMEFBMDhERTVBRkRCQzZFNzAyNTNFNDk2MTI4OUVEOUY3NgotOjEwMTEzMDAwMUVDMzlENTFFNzJFRERCREQ3RjlBM0QyRjI3RDQ1NDhGMAotOjEwMTE0MDAwNDc2QjczOEM4NjVEQzRGNzI3QkQzQjVGQ0VFQjVBMEZCMAotOjEwMTE1MDAwNTQyNTEyOERFNzNGMkFGNTFFQTYzODREMkI0RTJBQjk4RAotOjEwMTE2MDAwNDIxNkJGNDc3MUI5ODg5M0E5QjNFOTQ5MjZGMzYyRkRENgotOjEwMTE3MDAwNDA5RDZBRTczOEZFNjVDNTgyQkY4RDZDREJEQ0U4MkVEQQotOjEwMTE4MDAwMjNCQkQzQTVEMUJFMjY2N0M0REVGM0JFNzFCNEI4QjcwNgotOjEwMTE5MDAwRjc0NTkxNzlCRUEyQTg1OUQ3OTMxRkJDMzg0NUI0MjcwQgotOjEwMTFBMDAwMUYxRjhEMzdEREM2RkE5NEU3ODBCRUM3OEVGOUZCMEE5NAotOjEwMTFCMDAwRjdBOUM0Q0U5QUE2N0YxMEUwRjc0RDBGQjQ0RDkwMzQzNgotOjEwMTFDMDAwODA5RUY3OTREQUM4MEU4N0JENzZGRTdEOTlBNkMyQzlDNwotOjEwMTFEMDAwQTcwQkE4N0NGQTVCMUNDM0I4NkJDMjJGMEI0OUJFQUQzMgotOjEwMTFFMDAwMUMzQ0U0QkNFRjhDN0FDRTQ4QTA0NUM1NDEyQzJCRDZFNAotOjEwMTFGMDAwNzgzRTFFMjVDQ0VGMTI3OUNFMjg1Q0VFOTlBN0RCRkE1QgotOjEwMTIwMDAwNDc4REI3NzI4MkQwRkY1NjBFNEVERTRBNzhFQjM5NjBCQQotOjEwMTIxMDAwODhCOEE4NDJCNzM2ODBFOTIzOUNDMzdDNDIwOUU3NUNDMgotOjEwMTIyMDAwOUYyMkUyQUJCNEYzQkNGMzdGN0NDQjg4MzQ5MjYzMTk4QQotOjEwMTIzMDAwRTU3QTFBRjk0MTMzQjZDQTFERjdDRTY4M0QzRkE2RkZERAotOjEwMTI0MDAwRDBDMTNBQUNERjNGMTlFN0I1ODU2MkQ3NDQ3OTJCRjJCQwotOjEwMTI1MDAwMjQ1OEVGQjBDQTkxMjU2MTNFNDNCMkNBRDdDRjlFNUNGNQotOjEwMTI2MDAwQzRFRjMxQzZENDFGOUFENzUxREY3MEU1NzRGNkFGMTVCRAotOjEwMTI3MDAwQUZERkJGQjY4OEUwMzdDQTQ2NzEyNUVCN0Y2N0U3NzdGNwotOjEwMTI4MDAwMDY3MDlEQUM0RkFDNDQ3QTA2RTk3Q0YwRUM3MTAxNzhCNQotOjEwMTI5MDAwN0FCOEZDOTBBNEM1QkQ5RkRCNUE0Q0Y5ODJCRUJFNDExMgotOjEwMTJBMDAwQzU1OEZGOTJCM0E5RkMwRUMwNjdGNTQ5MkNGRjJFMzkzMwotOjEwMTJCMDAwRkIzRDdFQUZCM0M5NjFGNEJGOURGRDM3NDkxQzZGMzY1RQotOjEwMTJDMDAwRTNFNjhGMzdBQzI2QkFCRUVBNzgyMUM1Mjg1OEVGNTczNwotOjEwMTJEMDAwRDZBODVGMzAzRkIwRTJFQzNBRTE4N0Y4OEI3OEZGNjM0NQotOjEwMTJFMDAwNUI2NzlFRjg4M0E3MTM5RTA2QkRDRkI1M0UwQUJFRjQ4QQotOjEwMTJGMDAwOUIyRjMzNEM3OEZBOEEzN0NFNUU4QkZENkI4QkE2RTUzRAotOjEwMTMwMDAwMTA1RDlFMDYzN0M3RjU5RDU2MUY5RjRERjMzREJEQzUyOQotOjEwMTMxMDAwQ0U0MUI0NEQyNkJGMEMxNDlBRUYxMTY0ODY3M0U4NUU3QgotOjEwMTMyMDAwN0VGMTlCMzY4RTQ3M0E4OEY4NjAyMDNFRTRCN0JFOTkzRQotOjEwMTMzMDAwNUU0Q0VEMzI5NTc0OEE2RjM4M0RGRUNGRkM2RUMyRTk4QgotOjEwMTM0MDAwMUYwMjA3MTcyRjBCM0IxODVFNEQ5OThCMkFDQTE5RkZGNgotOjEwMTM1MDAwQjU3NEYyM0Y1OEYwNkQzNEZCNzlCOEQ0QjhCMjk4RkQ0QgotOjEwMTM2MDAwNUNFNjdEMTE2M0VDNDVCRDNGQjk2QkMyOTc3QzJFQjA0NgotOjEwMTM3MDAwMzYxN0Y1RkMzNDBBMzkzRTUzNDdFRjRCQUVDQ0I1QjNDNAotOjEwMTM4MDAwNUM1QTk5RjZDNUQ0NENDMkY3NzI1Nzg0REU4MUE4NTlDRAotOjEwMTM5MDAwRkQxOUMzMTdCQkM5OERCRTA3QTY5QzkxNDE4QjhBREY3RgotOjEwMTNBMDAwRDI4NjhBRkQ1NzE0ODNGNzVGMzlFM0UwRjJBQUQ1QTcwNgotOjEwMTNCMDAwOTk2RjVCRUQ0Rjk4RTdBQkY0MkUyM0REMTdBQUZBODcwMAotOjEwMTNDMDAwQ0NGNzQ2OTExRkQ2NEJDMzI4RERFRDU4MTlDNTRGQTA2OQotOjEwMTNEMDAwRjFEMzBFM0UzRjE0RjdFQUJFRTk2RjI1OTM5RjcyODY2NAotOjEwMTNFMDAwQTRDRUEyRjlCNTZDM0IzMzlCRTIwNTY2MjRBOUIzMjhEMQotOjEwMTNGMDAwREVBMDZFREJGQkIzMjlCRTYwNDYzRjc1MTZDNTE3REM2OQotOjEwMTQwMDAwNTczQzc5MEU5N0Y3NTIxRkIwQTFGQzdBQjk2NEJFQzg1OQotOjEwMTQxMDAwRTdBQTdGQTJGQzUzNUJFRjk4QzNGNTUzQzRCRURGQjZDNwotOjEwMTQyMDAwNzVDRTlDMDBGMzYzMzdEM0MxQTlGQTFFMjFFNzc5RTg5MgotOjEwMTQzMDAwNjBFOUVBMTcyMUZBM0REQjJFRTVFNkVGNDlDMTVDQzEyMAotOjEwMTQ0MDAwRjczRUI5QkIwRkJGREIwOTA1NkQxQzJGQjZCRTU4RjhDMAotOjEwMTQ1MDAwRkIzQkNGNTc0MUE1RjNENUNDN0MzMEM4REY5Q0Y5NUM3MgotOjEwMTQ2MDAwOTJGODVEQTI0MzZERkQwOTdFNDczNkRFRjIwM0YyQTdENgotOjEwMTQ3MDAwQUU5MDgwREZEMUFGMDI2RDI0RDFENTQyNUJGODNENEFGQQotOjEwMTQ4MDAwNUYxQ0VFQkJCNzk4RjVBOTM2OEU3NzVEQkE3QTI3Q0Y4OQotOjEwMTQ5MDAwRUY1M0REOEM1QjU2MjM0NURFQUZGNTRFMDRGNjlGRjAyRgotOjEwMTRBMDAwOUQ4OEQ4MzhFMzBGNkNEQTQwRUE1NzMxRTFCMjUwNkVDQwotOjEwMTRCMDAwOUJFRjEwRjM3QTk0RTZCNTIyN0QxN0M3MzkyQjZBNUI1MAotOjEwMTRDMDAwQjY0RkU4NTE4NTZDM0ZFNTI0RjM3QkQxNzVCRERGMjkyQwotOjEwMTREMDAwNDlGNDNCMDg4REI1MjhFRjkxRTQ5RUE5NkRFNjc0RjVCQgotOjEwMTRFMDAwNTA2MDdDRUJBOTg0MUQzQUY2NTM3RDQwQzg5RDkxNkRGOAotOjEwMTRGMDAwMUYzOEEyRTMxOTc3OUJGMDREMzU3RkVGMkEzRTFFNzcwOAotOjEwMTUwMDAwMzdDOUE1QThCODgzMTVCRDVCRkI5MjdFNjhFRDZCRTc3NAotOjEwMTUxMDAwQkVCNEY2MzVGNzA1NjhCRTk5MTkyRjNENDVFRjlENTBDRAotOjEwMTUyMDAwOUNFQjBGRTkzQ0UzQjlBNDU2RjI1Qjc3OEYyN0Q2M0VEQwotOjEwMTUzMDAwODg3OTM3MjUwQkJFMTE3OTM2ODlGNUE2Rjg3NTFDMzRFNAotOjEwMTU0MDAwRTc2REFEMjc2MkNBREZFRUQ2MTEzMUU1RUJCRjZBMUQ0QwotOjEwMTU1MDAwMTE5M0JGQzdBRkM3QTI2RkVCQkI0NURGNUREQjhCRjk1NAotOjEwMTU2MDAwNUYzQ0RFODk3QjZEMTdDMjNCOEJGRjU0ODNBRjUwREM0MQotOjEwMTU3MDAwOTcxNkZDQzY4MkI3MzU0RjBCNkU0REREQzRFMzJBQUIyMAotOjEwMTU4MDAwOUY4RjU5OEZEMjM2ODk4QzFFNDgyRDExRUY1RjI5OEQ4MAotOjEwMTU5MDAwNTcwMEVEODdCMkJBODVFQjc1QjcxRTM5RTUzMzNFQzcwNAotOjEwMTVBMDAwNTlBNjgxOUZGNERFRjg3NTU1NDEyM0I3RUJCQUFFMDgxMgotOjEwMTVCMDAwRjNFMzE1OUFFMEM3NURFM0Y4MjNDQzlGQUJEMTNFMjM1QwotOjEwMTVDMDAwN0REQzVBNzcwNzlGQzZGNTEzN0Q0RjQwODZDMzdDOTMxOQotOjEwMTVEMDAwRUUxMjRBNjQ1RkY4NjJGNEUzNzJCQTMxMTE3RDZFRTU4RgotOjEwMTVFMDAwQkEzOTI2M0Y0NUJEM0RBNkZFRTUzOTZCNjJDQUFGRDA4QwotOjEwMTVGMDAwRUU4RTI5QkZCMkYwREU5OEZDNzdGNTlGQzZFOUY3OUIyNwotOjEwMTYwMDAwRTJGNEZCMjc2MkNBQzc4N0RCNThGRjdFQTM3NjFBQzdCRQotOjEwMTYxMDAwQTc0RjNDMUE2MTNEQkNCNTU2RTVGQ0VFREExQzRFNUZBNwotOjEwMTYyMDAwQUVENTk4RkVGN0Q0MTY3MkJBQjc1NkU3RUZCRkFCMUQyQQotOjEwMTYzMDAwQ0RFOUVCQjUwNkE3NkRCNTVFNEVFM0Y5NDY1OTVCQjg0QgotOjEwMTY0MDAwOENGQ0ZCQTMzMzUzRjkzQzZBRTM1MERGRjUyNTE0MDcwOAotOjEwMTY1MDAwQjkyRjUyNDRGODM3RjY0MEUzNEIyNDBBRjI0MzlGQkVCOQotOjEwMTY2MDAwNDdGNTRFQUIwRThFNDc1Q0JCNkJDQzFGNkVDMTdDQzY4NAotOjEwMTY3MDAwRUIzMjI0NjlFN0QzOEI2NDMwQTJGMEM3MzMzRDBDNzQ5RQotOjEwMTY4MDAwRkVFRDAxRjEzRTU2N0NGRDg1MjU0MjRGOUUwQjYxRjEzQQotOjEwMTY5MDAwOUVDMDZBM0UwMTg3QjkyRUY1MTUyMzkzQzU0Njg0RUM5QQotOjEwMTZBMDAwRjZCOUUwNjczREQ0QjY1QUJDNTMzMzE3NzQyODIzN0I5MAotOjEwMTZCMDAwRDYwN0ZFN0IzODFFMjlGNjdEMDFBRjMxNjNEREFGQjA2MgotOjEwMTZDMDAwN0MzNkREM0JDNUY2REY3NzM3RjJCREYyNjdGNkE2NEYxNQotOjEwMTZEMDAwMkVDNUVGRDc3QTI1RkU5RDhGMDMzQkVGQkFENUM1RjYxMQotOjEwMTZFMDAwQUY3NUZGRjQxRERCQzVFODEzMEI0QjA0N0RCNTRCN0FEQQotOjEwMTZGMDAwMUJDRDM3OTAyNkRFMkY4QTZGMzdDQTVDRTc1NUMxMDhBRAotOjEwMTcwMDAwRUIxRjExRDQzRjI4REVDQ0EyQ0IxOUVBMjE3M0ZEOUEzRQotOjEwMTcxMDAwMkQ3NTBDRDFDNzFBQkVERjUwRDVBNkU5NDE4NEY3OThDNAotOjEwMTcyMDAwNDM4MjJFNDYyMDVERDBCRThEM0QyQUU4NjAyNEQyMDE0MgotOjEwMTczMDAwQ0I0MUQzM0VCNEU4MDBFREE5OTdBOEZEQTk4M0EwM0IxNwotOjEwMTc0MDAwQjE3REREQzQxRkM5NjQ3RjhERjkyQzE0QTRGNEIyQjMzQwotOjEwMTc1MDAwOTE1REU3QjA3QzVDOUJGOEREQTQwQkQ5OTM5NjVFREFEMwotOjEwMTc2MDAwNTIzQjk3RjE2ODY3QUQ4RkQzRDZEQTRBMTMzRkZEOUNBMQotOjEwMTc3MDAwN0ZCOTc2MzVFN0Y3RDQwNjM4REQ1QjVCNkZFMjY3MDM0OAotOjEwMTc4MDAwOTdCRjVFQkI4MUYzNkZENDg2NEMzQ0REQzJERjM1OTJFMAotOjEwMTc5MDAwNjcwODlGQkI0QjRDMzlFRDJBMzdFRDBBOTE3QThEMzU5RQotOjEwMTdBMDAwNzZCRUU3OEY5Rjg4OUZDQ0E1QjkxMjdFNTQ0QTIxRTI2RQotOjEwMTdCMDAwREY3NUU5MDEzQkU1RUI5MjY5MEY2OEQ2MDFBRTdGOURDRAotOjEwMTdDMDAwMUI1QTQ5MEU1NEU1QkMyOEY0QjAzODNDMjlDRkJDODZERQotOjEwMTdEMDAwRjE2NEE2MTlDNzdBMjBCREVFNTYwN0UyQzM4OUM2RkI5RAotOjEwMTdFMDAwRUNCMUVGOEQ1RTFDNUUyQzczQUZFNTdCN0RGMTdDRjE3RgotOjEwMTdGMDAwMjY3QThGNDJFRUNBMEYwMTc0QkRBQzRDRENFRkEyMzhFMgotOjEwMTgwMDAwQkRBRkNBRUY1NTVCOUI3OTVGNENEQzdGQTlFRUVCRTY4MQotOjEwMTgxMDAwMzhEQjdGOUQ5QzUxNEQzOTAzMEJBODdFODdGRDlEN0M1NQotOjEwMTgyMDAwNzAzRUJEOEZENzA1MkU3MUY2RjdFMTQxNjI3RjJERkIyQgotOjEwMTgzMDAwMUJGNTRDRjY0QkI1ODc2NEI2QkYyQTczMUIzQzZDN0YxNwotOjEwMTg0MDAwOEY4RTc4NjgzRjZGREEyMTAzRUI4QjhBMzhFRjVENEEyMQotOjEwMTg1MDAwMUQ2OTE0RDdEM0JBN0YxQ0NCOTk1NTdCODgyRjJEMzNBNAotOjEwMTg2MDAwQ0Y3QkUzQ0Y2REFCRTlCQzU3NEEwNEVGMzBDN0Q1MkYzMAotOjEwMTg3MDAwMzdDRjdCRTNENzVEM0RGRTA4OUZGNzU2NUZFMDVFRTkxQgotOjEwMTg4MDAwN0IyNUIxQkZFNzEzN0Y3RkI3M0I3Q0ExNzg4MkU4Rjc2OAotOjEwMTg5MDAwNUM0RjlFQUQ2NTNCRURDOEI2M0IxRTBBRjRGREQ3RUQyRgotOjEwMThBMDAwREZBREE1REVDRjRBNDQxQzM1REY5QkIzRjZCM0NFRkNEQgotOjEwMThCMDAwNURDRUJBNDkyRUJFQzdEMDNFNDJFNUY3NkZEQTI1RjFCQwotOjEwMThDMDAwRkU0RUZCNUY0MTVGQTNEMUZCM0FFQUNCMjQxNzJFRDMzOAotOjEwMThEMDAwMURDQzU3NDc4N0M1N0IwMUUzRTk1RTYyODJGNzAyMjY4QwotOjEwMThFMDAwMUMwQTA1NTNBOEREQzEwMEZCQTNDNkVDRjMwNUU5REUyNQotOjEwMThGMDAwRURBOEQ3MEQ5OUM4QUJGNDY1QUY0Qzc4NjBDOTI3NEJGQwotOjEwMTkwMDAwNUU3NUQyOTU3OTZGOEU2MjMyRjJCRjNBRkQ2OThCNDY3MQotOjEwMTkxMDAwRTc5MDdFRDc2MUI3QkFBN0YyM0I0NUE3NUI4MUEzNDlBMQotOjEwMTkyMDAwMkRCRkQ4RjA4Mzg2NENGNzEyNDYxQ0YyMDU0OURFRDY0RgotOjEwMTkzMDAwOTk3NkU2QTgxMzAxMzkxNUJGNEZGOENDQ0Y3NkQwMThBOQotOjEwMTk0MDAwQjQ1M0U1NTI3MThGREE4ODgyQUZFNUQ3QjJGODlDQzVGRgotOjEwMTk1MDAwRDdBQzdCN0JBQUMzQjc4NUZDQ0ZGMDQyMTJCRkZGMTI4NgotOjEwMTk2MDAwM0ZFRjQxNDM2REQ2N0JENjgzODYxMkRGMzNFRkU5NERERgotOjEwMTk3MDAwOTFDRkVFM0E0Nzc2NDE5Qjg4MTdCOEU0NkNGQkUzNjQ1RAotOjEwMTk4MDAwRjdBQzdBQjYwN0RGNTNCQjkwN0Q1MEEzOUU0RUE4OUY1RAotOjEwMTk5MDAwNUE2OThENEQ5Q0EzMENBQkQwODY5M0JENDk3QTJCRDk0NwotOjEwMTlBMDAwQTE5NjVEMUE1RkJGQUM3NEQyRDhBMTU5MzRBRkYxNkQ2NgotOjEwMTlCMDAwMDZFMUI3NkEzQjJGN0VEN0FDRkVGNEJDNzZBMTM1N0UzQwotOjEwMTlDMDAwQ0Q4RTExRUFDMjI4QkZENUVBQTE5MjE5QzdGMkY1REU4MQotOjEwMTlEMDAwQTE5RTEwOTkxQjIzQzdCRUVEN0ExRkQyNjExOUUxMTc5MgotOjEwMTlFMDAwRDk4NjI0QTdCRTRGM0I4MEVCQjgwRTVBNTk1RkI5REVBQgotOjEwMTlGMDAwRkMxRDhCMUIwMDFDRDFGNzY0NkYwNDgzRjlDMzlGNzQxQgotOjEwMUEwMDAwNUYwREUxQ0Q2Mjg4Q0NBNzdDOEQxNEE5N0ExMTQxRjhENQotOjEwMUExMDAwQzlDNDcxNkFBRUQ2NTU1RTVGQUM3QzRFMzZFRkMxQzZBNgotOjEwMUEyMDAwQzNGRDRFMTM2RjJERkVERkVERkVDNEYxRkZGNjUyOTVBMAotOjEwMUEzMDAwRUY0MUI3M0YzQkNFNDZFNzM4RURCRjk3RjlGRDU0QUNEOQotOjEwMUE0MDAwQzg3QzI1Mzg0Q0RDM0IxRDNFQ0Y3Qzg3MDRGOUNBMDA5RQotOjEwMUE1MDAwQkQyQjVGMzkzRDdFQ0U2NEY2MUZEMUMxMDZDNTlGMkFERQotOjEwMUE2MDAwN0FFMUY1NTFGN0NEODJFNkVGQkE2Q0MxOTRFMjI1NTNFNQotOjEwMUE3MDAwRTc4NTk1RThGM0IzOUY5QUYzMkZCRjc2MzI5MDNENzRENAotOjEwMUE4MDAwOTUyQUVDQ0VBQjVDOTA3OTg2NzhFMUQ5RDM0NUIzOTBCQQotOjEwMUE5MDAwNDE1QzQ1RkFFQzcwN0U4N0ZENjE4MjczQzczQjIwQzREMAotOjEwMUFBMDAwOEYyRUMxN0Q3QjVGOUNGM0MxNEQxMkZCNEI5QjlCNDRGMgotOjEwMUFCMDAwQkU3ODcxMUFBRkVCQUJFRTIzRjZEQ0EzMDREN0JGQjg0OAotOjEwMUFDMDAwNDkxOTQ2RjQzRDM0M0Q5MjQ3NzQ1OTNDRTZFRDc0MDk5QQotOjEwMUFEMDAwRTc1NTYyREVDN0MyNjlENzQzRDRFRjVCQkQ2QkFFRTNBNwotOjEwMUFFMDAwRjNBMUM2MzY5QURGRDBGNEI2RjVGNzkxN0VGOUFDMERDNgotOjEwMUFGMDAwQzg2Rjc4NjRDQ0VENEIyMDRBMkU3QjRBMjdGRDhBRUFEQQotOjEwMUIwMDAwNkQ5N0NDNzdFQTc2ODhERjMzQzAxNkQ5RDFGRUFEM0YyQQotOjEwMUIxMDAwRTkxNUNGNTNCRDU2RDNDRjAwQUI5RUU3N0JGQzMzNTRDMgotOjEwMUIyMDAwQjEwNzMwMzlDQkZDM0RDOTQ4RkY0NEJGMkY2NDlENjdFNgotOjEwMUIzMDAwMEQyNTU4MEFGRjIzQkYyQkI2RERGNDRGQkUzOUY0ODNDMQotOjEwMUI0MDAwMzlFNDVGODRENjQ4MUVDREUzNDg5MkI4NDdFRDI5RjVDNQotOjEwMUI1MDAwRkQ4RUY4Q0M1MEYyRjNEMjNBN0UyNkZDMDM0N0QyRkMzRAotOjEwMUI2MDAwN0M4RkU0NkRFNENGNzQ3RUZDOTc1QTE3QTdFRkEyN0RCQgotOjEwMUI3MDAwNDRFOUZGQTA3RDQ0RTlGQjY4MUY1MUZBMjFEQTQ3OTQ0QwotOjEwMUI4MDAwMkUzRTgzOURFMkZFQ0REMDhEQjc5OUJGNzZCMzhFRUUwQgotOjEwMUI5MDAwRjk0QkMwRDRFRjEzRkY0RUQzNUIyNkZDNEI5QTBFRERGRQotOjEwMUJBMDAwRDk4M0YwQTA1OUU2RjhFOEUyNjcxNUQ2NEY0RkI2OEMxNgotOjEwMUJCMDAwOEFGOTVENTJBNEQ3QzNCNEJFOTJFNjNGRkU4NEVFNTlDMwotOjEwMUJDMDAwOTczNDI5QUFBNEQxQkRFQ0QzRDkxQzdGMTgzNzNGODIwMgotOjEwMUJEMDAwMDM5RDM3NDQ3NjM4QzRFRjI5OTlGM0REOUVENkI2OUUyRgotOjEwMUJFMDAwREE2RjdGMzY4RjY2NDhFNzM4MDIwRjc3MzgxM0ZFREVFQwotOjEwMUJGMDAwQjAxNTZGRjdDNDUwQTE3RjdEQ0YxOTI5OEIzRTdGOEMyNAotOjEwMUMwMDAwOEY0RjYzM0ZGMDE4QzJFNzgyM0ZEMDM4ODFCRDMyMEM1RQotOjEwMUMxMDAwNjBCQzhDRjU2RkY0RDNDNTNEMDQyQjJEREVFMUUwMzhCQwotOjEwMUMyMDAwRTVFRDNCRjY1RjdEMjVGNkY3N0YwMDIyMkY1NEJEMDBFMgotOjEwMUMzMDAwODAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkNEN0QxRAotOjEwMUM0MDAwMEI3ODU0RDVCNUYwOUEzOUYzNEEzMjkzNENDMjAwMDk1NwotOjEwMUM1MDAwMTIzODA5QUYwMDAxODY2NDEyMTIxMkUwMjQwNDhBOEE0NQotOjEwMUM2MDAwNzQ4MkQ0ODJBMjhFQjQ2MjU0MUUyM0QyOUFERUQyM0ZGMgotOjEwMUM3MDAwMjcyNDQwMTI4MzA2MDVDQTU1ODQwMUMxQzdGREZDQUU2NgotOjEwMUM4MDAwRDEwMjE3NUJGNDRFNTBBOUY2QjczNDIyRTJBMzU0QzczMQotOjEwMUM5MDAwNDc1NTJDNEE4QTYyRUJBRDJERkY1QTZCOUY5Mzk5MzNCRgotOjEwMUNBMDAwNEMwMjIyRkM5N0YwRTlDRTNFN0I5RkZENThFRkM3M0VFOQotOjEwMUNCMDAwM0JCMzI2NUU1RTI0QzkwMEE3RTk2NzBBODBDQkRCMTcyOQotOjEwMUNDMDAwQTAwODYwNENFOUQ3MEZEQ0VGQzFGMjU5OUJEQjA0MDBBMAotOjEwMUNEMDAwRjM2MERCMzQzN0Y2QkJDRUQxRjFBMjFCRUJEN0JCREYxMQotOjEwMUNFMDAwOUI5NjhFRjUxQjMzNEQwN0E4QkM0OUNFOTk5RTgxMjU0NgotOjEwMUNGMDAwNDA4OERGRkY1MTVFQzU4MTBDQUNDREY0NTZEQjAyNEU0RgotOjEwMUQwMDAwODAwQTkwMDBGMjgwN0Y0RUUzN0Y1MzFEMjkwMDhFNjg4OQotOjEwMUQxMDAwN0Q5QUJCOEZBMUZFQkRDQ0NCMENGRDJGOTc4NzE4REEyNwotOjEwMUQyMDAwQUZDQzFCNkQ2OEQ3RTc5REU5MkQzNEY0MUI5N0QxOTU5NwotOjEwMUQzMDAwMUI3NEQyM0VCRUJBQTcxQ0Y3MDMyNjA4MEZBMzdERUQ4NQotOjEwMUQ0MDAwRkVGMkVEREJCMTlDMzU3MTlFOEZGNjdGMENEQUFFMTk5OQotOjEwMUQ1MDAwOEQxQkZEQTRBNDc5RTNGREY0QjI0NUIxNjVGNTAzQjg4QwotOjEwMUQ2MDAwODU3RUM3RjZFMzEwM0U1Mjg2RUQ5MjZCRjk4MTNCRjExQQotOjEwMUQ3MDAwQkREQjMyMjU5MEJDMDAzNTlCQURFRjQ3NjJENkIxMDQ4OAotOjEwMUQ4MDAwRkM2OTYxRUM3N0RCMEVFMzczODA4ODJERUMwM0I4M0REMgotOjEwMUQ5MDAwRTAwQ0I2MjAwMDE3M0Q4MUVEMEU0MzNCOEZCQjc4QUZDMgotOjEwMURBMDAwQ0Q0REVENEJDMDEyNkRDRjAxQTgzRDlBRjNFNDBCMzE0MAotOjEwMURCMDAwRTM4RENCRThCQ0VGN0UxQzZGREM5RTM5RUUwNjVDREY2QQotOjEwMURDMDAwOTNBNTVGMEY5MDcxOUZFNTVFOTdFNzIzMDQwRDRDODAwQwotOjEwMUREMDAwMDlBNzExRTQyMDM5Q0Q4MEZENEVCRDI0ODUyNDVDRDdCMAotOjEwMURFMDAwMzRFOTlCRDQ0ODNFM0VBRjQyM0M2N0UxN0IyNkY5MEY4NQotOjEwMURGMDAwNjVEOEFFQkUyQ0MxNEUxQ0U3NkY3NUYyOTMyRjU4NjlBMwotOjEwMUUwMDAwN0NCOEQxOUYxRkE1MEI4MDk1MEM1RkJEN0NBQjBFN0Y2RQotOjEwMUUxMDAwMUQwMUYwQzczQTA3OTc3RkFBNzM3M0Y5NkU1RDI2OTc4NQotOjEwMUUyMDAwRUZENUM5NUM3RTUwOTdDN0U1QUM0MzEwNjhDN0YxRkU5QgotOjEwMUUzMDAwRkNGN0YxMDA3RDY4MUMxNUEwNkZCNDFDNjdGMzlBMDdDRQotOjEwMUU0MDAwRTAzQUJBN0UyRjg1QjZFMzdFQkYyODlGOTAwNkI0Q0VENwotOjEwMUU1MDAwNkY3MEZFNjIwRDBGNDgwMkQ1NDQ4Q0E1RjhERjhGQjc3NgotOjEwMUU2MDAwQkQ5OEU1RTNFN0FBMEJBNzVBRjI3NzA5MTQxQzc3QjlFNgotOjEwMUU3MDAwRDcyNEM2NURENEYxNjI5NjI3REEwRUNCREYzM0Y0ODcyMAotOjEwMUU4MDAwMTVBNjAzODY3QTYzOEVCMURFNUE3MTIwRjY3RDFEMEU4QgotOjEwMUU5MDAwRjFFNTJEOUJFRkIwMDU1QzU4QUUzNzI5MjFFNzk5RURCMAotOjEwMUVBMDAwRkE3QUE2RUQ0RjUyNEMzODlFNjU5RjNENjRDN0ZEMkREMgotOjEwMUVCMDAwNzEyQkEwNjA3RjBCODBEMjlFN0ZFNjdCMDBGNTBDRTc0NAotOjEwMUVDMDAwNzkxMjA0REIxMzhDNUI0N0UzMTJCREVGNEYwMkU5M0M1MAotOjEwMUVEMDAwQzY3RDBCNjk4M0Q2QTNGRTk3M0RCNDEzREY3QjJCNERFNAotOjEwMUVFMDAwMDE3RkNDM0MyRERBRjg5RkE1QjdGREUyMkJFQ0Y3RDlBQQotOjEwMUVGMDAwMzM0MDRGQjAwRTczNjkzRDYzNzc3RDZDMzY2MzM5MkU4NgotOjEwMUYwMDAwNTlEMEM5NTg3N0M0OUM4MUU1ODk5QTdGNkMzQ0UyNjFCRAotOjEwMUYxMDAwMzJGNTlCMjY2MzdCNkVENzExMDdBMkZDQkVGNkFCMzY2QgotOjEwMUYyMDAwMzkxMDZGNkY5QkNEMDAwMzQwMjBCRTA0RkJFMzE4NTRCMwotOjEwMUYzMDAwN0ZEMDdCRDVEQzQ2RkNGRENBRkQ0OTYxRjM3OUVDRTczNwotOjEwMUY0MDAwNDFFNDQ1QTZBMzRBQzFFRjM3MTBERDg4NzkxNDQwNTExQQotOjEwMUY1MDAwQjM3NDE1RThGMzJBMjQxRjY4RkY1NDdGQUREREZGRTY1NAotOjEwMUY2MDAwN0FBMjMzRThEQTQ4RjJFMTM4NDBCODg1RDdBRkE0QzZBMAotOjEwMUY3MDAwRjJGRkQyNjc3RkMyRkNCOTI4MEJGOTlFMDRFMDY2QzE2QwotOjEwMUY4MDAwQkYwRUZDNzczQTk3RjgzNTM0REQ4OUVCQkQzNThDRkMxNAotOjEwMUY5MDAwMEYxNzlGRkY5RkYxM0FBMzdDM0UyMjIxOUYxRkJBMTI4OQotOjEwMUZBMDAwRUI0QjlGOTFCQzc2NkMzRUI5NkY5OEUwMjc4REVGNzUzNwotOjEwMUZCMDAwM0VEN0UxQjg3NDkzQzQ3Q0E5RDczRkRGMjdDRDA4MjU2RAotOjEwMUZDMDAwODBGNzM2OEQyRTg2Mjg1REIzNjlCRTY1Q0Y1QUEwMDU5MQotOjEwMUZEMDAwRDdCNzZDRDI4OEZFQjFFM0M3QkZCN0I0NDkwMjM5NjY0MAotOjEwMUZFMDAwRkMyNzlGQjNENzEwQkZDOEQwRDVBRjFBRjk2N0RDQjNCMQotOjEwMUZGMDAwQTczMjJBRjI0NTU5Q0ZGODY4RDNFNDRERDcyMEZGMTgwRAotOjEwMjAwMDAwOTRENzI2RkY5RjdFOEVGMzAxRTI3MTI3QzJBNzMyNzMxOQotOjEwMjAxMDAwNkUzNkNEM0ZEQjA5NEFDQjc4MDZDQjFDMDdDQTg5QUJBRAotOjEwMjAyMDAwMDU4OEUwRUE5MkVCQjIwMUUxQjkxOUQxMjUyMUREQ0RCNQotOjEwMjAzMDAwNTFBQTVGQkYwRUYxRjgwMzczRTAyQTkyRjNDN0JDNDNDNQotOjEwMjA0MDAwNzhGQzZCNUNDQkFENjA2NjcyQ0QzNkUxNzg3M0U3RDgxNwotOjEwMjA1MDAwMEI2OTNGQjMxQTA0NURCRjlFREU3NTlDOUVCRjNFMjk4RgotOjEwMjA2MDAwQzVENDgwRUZCRDZFODI0NkM4ODhFRUUzNzVBQjNGOUI1QQotOjEwMjA3MDAwRTgwRDM3RUVGRTA4RjE2MzUyNDY0OUE3NTM3QTk2MTdFQQotOjEwMjA4MDAwNDRDOTFGRTk3ODk0QTJGMjZGOUFFNDU0Njk5RTkzNkU1MgotOjEwMjA5MDAwMzNEM0JEMjVBQkQ1NDZFQkJBMTU0MjA3MTQ5Qzc3ODlERgotOjEwMjBBMDAwMzc2QzIzRjk3NzNCQjgyRDU0NjJEMUQ1NEQxRjQ0N0Y0RgotOjEwMjBCMDAwRTVGRkU4Mzg4REVGMkZFOTk0NDIyNkVDREY1RUQ3MEU3RQotOjEwMjBDMDAwMTZDNEVGRDM3NTdCQjkxQ0ZDQ0RFMEM2Q0IxMDFFQ0I3QwotOjEwMjBEMDAwQzdEQkJDMkRBNEI3MzRGQTMyQUIyNjM4OUQ0MDVGOUREOAotOjEwMjBFMDAwNDk5Rjk2NjgzQkFFQkJDMkUxMEM0QkE5RjREODdBM0M0MQotOjEwMjBGMDAwNzYxRDhERDk0QUNBNzhEQzhGQkFBNjNDOURFOTkzNjhEMwotOjEwMjEwMDAwNjE3MDc0OUZFMzZDMDA0RTkyRjMzQjUzNThDRTFGN0I3QgotOjEwMjExMDAwQUVEODRDNzgzQUY2M0I2QkM4NDRGNTJEMjNERUI4RDNFNQotOjEwMjEyMDAwQzc3NTIwNzk3MzJDQzM2QkI2NTE3QjQ2NkU0OEM1RjZENAotOjEwMjEzMDAwNUJDQ0EwOTI1Qzg2RUQ0MjZFM0QzRkU5QUU3NzQ4OEU2NwotOjEwMjE0MDAwMkRERkU5MzJEOTREODI4RTY1MzQwMUE0NDdEN0JFRjMyNQotOjEwMjE1MDAwRUYzOENFQURDOEFDNzY2RjU0NkYyQzlBRjJFOEM2MjczNAotOjEwMjE2MDAwOTAwRTE2OTlEQkVFMjlDNzY3QTcyMDNDRDY4REYwRkNCMAotOjEwMjE3MDAwOEJBOTdEMzhFOUVEOEYxRkIyODdDREY0REVDMzIzQjc3RAotOjEwMjE4MDAwNEIzOEZFQ0JBOTgxOTFCNDFGQzg1NEZBRTdFMEYzOUEwQgotOjEwMjE5MDAwNDM3REExMDVERjlGRkFFODNGMEY5MkRFQkNGNUM5QkU4MwotOjEwMjFBMDAwQ0M1RjNBREQ0RjIzM0VDNEY1OUM0MDNFQTRGNTlDREM1OQotOjEwMjFCMDAwMzc4NEY5MkU4QTdGMDE4N0M1MjgwRkM4MjQ2QURFQjFDQgotOjEwMjFDMDAwQ0U0RkY4MEMyNENCRkNEQzAyQUE3MjE5RTE3QkVGNEQ1OAotOjEwMjFEMDAwNDA3NjUzODE2NDUyODhDRUJCOUExMTVFQTYzM0U5NDk5QQotOjEwMjFFMDAwMTk2RkU2RjcxNjk5NTFCRjEyMUQwNkU0NDI4MkM3MDkxRQotOjEwMjFGMDAwOTM1Q0EwRjEwNUQwN0FERTdGNkVFNEY2MTY3QzdGQUVBQwotOjEwMjIwMDAwRDYzRjRBNzc0Nzk3RkM4NkU4NkVCM0RENkJDNzI1MUMzRgotOjEwMjIxMDAwNEYzMkVBN0RCRDlDMzkzRTlERjlFNTE2Qzc5NzYwMjk4RQotOjEwMjIyMDAwOEMzRTVGNTJGQkI1QjE5RTBGMEFDOThEODIwNkI5RjA5NAotOjEwMjIzMDAwMEUyQ0VGRDRFMDdFQzU0OEZGRjdDN0UzRkJCN0I1QUY4MAotOjEwMjI0MDAwREJGMzhBNENGMzZFRkVFOURCMzRFRjRCNEU5RTE3NUVGOAotOjEwMjI1MDAwMTFGMDNCNjExMkZBQTU1QkJGM0FGRUNBRTNBM0U0RTFDOQotOjEwMjI2MDAwRjVFQUNGM0Y3RUU4OERCMTAxMUNGRkUzRERBMzg3MDNENAotOjEwMjI3MDAwRDJERDAyQTlGM0EzMDcxMTVGOUZCQjNBREZGOTM5OTZCQwotOjEwMjI4MDAwNEZCRjc0QTgxRkMxMkY3RUJEOEI2QUJGMDA0QjhDMUMzMwotOjEwMjI5MDAwM0E2RTMyRjE3RTE3RDEzRUYwRjk2RjBBRkQzNzMzQkU0OAotOjEwMjJBMDAwMkRBODI3MTA2RTBCNUFDNjZDMjc3OTMwNERDQTRGMjNDNAotOjEwMjJCMDAwQkJFOUM0MzFFM0ZBRTJEN0E5OEZBRkFGNEYxRjVGRUY5RAotOjEwMjJDMDAwQjc4Q0UwOEY3MDk4MzhDRTJERjRBQkFERjM3M0MyRUZCRQotOjEwMjJEMDAwNjc3QjQ2OUI5MDE1QTNDRjMzM0FDN0E2RTc0N0YxRTQ0NwotOjEwMjJFMDAwNTdFQUFERDRFRjFBMTJGNTg4OEFCOTBFODFEN0I5MzVGRAotOjEwMjJGMDAwQTY1MDQzMEVGN0UzRjZFQkYwMzlFMUJEQzJEM0MwRjVDQgotOjEwMjMwMDAwMzk0RUQ0NjdEODdGNTFFNjZGNzg1RDI0RTgxQ0E4RDc5MgotOjEwMjMxMDAwN0UwMEZBNEZGNUFBNUY2MUJGMzc5N0E1QjI1Qzk4N0I0NAotOjEwMjMyMDAwNEI5Qjk1RUNEQzZFNzlBNkJFNkQzRTNERkFEQkNCMzM2NAotOjEwMjMzMDAwODQ5RUVDRUUwN0NDQzNBNDNGMDEzNzY3QzFGQTI0QURGRAotOjEwMjM0MDAwNkUyQUY5NjNDM0FGNDgzRURGOTlFQTk1RDA2NDg0MUFEOAotOjEwMjM1MDAwMTlDMkM0RDcyNzIxNDRGMDVFNkQwQUIyQkRFNzIwM0QwMwotOjEwMjM2MDAwODA2NThCQzk5QjY5QzE1MjMyNzdGNTAxOUUyN0M0NzA4NQotOjEwMjM3MDAwOUEwNjAxMEJENTdGNkI4QTM0MDBCRUI3Q0E1Mzk5NDlDMAotOjEwMjM4MDAwRjRGRjI2MzhGRDY0MTdGRDIwN0RGNTE4OTJBMzk1RUUyNQotOjEwMjM5MDAwOTk3M0U5Rjk2QzM1RDVERDgyRkI2REI0Q0E3N0U3OTNBMwotOjEwMjNBMDAwRkRGMzAzQzk0Qjc2QUYwRTE3NUQ3RkNDQjU3OEFEMDQ1NgotOjEwMjNCMDAwREY3RTQxRDlBQjIyRkQxNkJFQTIzODRDMEM3Rjg3NEE4NgotOjEwMjNDMDAwRTNCRTYxMDlGNkE1NzVCREU1NUMzRkM2NjQyNjNCMkRGRAotOjEwMjNEMDAwRTQxQTgzOUI3REZCRDA3RjE0RkQxRURGRkYyMzI4OTMyRgotOjEwMjNFMDAwQzgxRTk4RjM1QjA3Q0JGMTlCNDA2NjdFRkYxMTI4MkMzQgotOjEwMjNGMDAwQzc2Rjg2MDBENzZGODE4OEY1NEI3Q0VGREREMkZGRDlBMAotOjEwMjQwMDAwQjkxRkEyRkI3QTc3RTI1N0JCQzlBRTlGMkJCNUY3Q0RCOAotOjEwMjQxMDAwQzE3NkI1MTJGMjQ4Q0ZGQ0RBRjE3RkI2NDY3MDFENEE5QwotOjEwMjQyMDAwODMwNTkyRDBCRUZBMzVEMTI5RDlFRjQ3NURBMTlERDg1OQotOjEwMjQzMDAwRUZBRUU0MkRBOTFENTg4Rjk4ODRGREE1NTYwNjlGQTRFNAotOjEwMjQ0MDAwRkVBQTE5RkMwRDU4RjY0RDBFM0M0RjdDRjhDQjE0MzEwQQotOjEwMjQ1MDAwNEVBREM1RTEyNkY5NDgwNjE2OERGM0QxM0IyRUE2Nzc4MQotOjEwMjQ2MDAwRDJCQjM3NjFCRDBDQjE0NUYwM0FEMTU3RDA5QkZBNTc3QQotOjEwMjQ3MDAwNjBCOTdCQzJFQUVENTQ2OERDNTNCMjc3MjdCRDNBRDUyOAotOjEwMjQ4MDAwQ0NFRkMzNjk5OUQ3NTExNkE3NUY3Q0EzQ0RGQzNFRkM2NgotOjEwMjQ5MDAwNDNFNkY3Mjc3NTU5MENGQUM1MzdDRTFDN0MxQUY3Mzc3NwotOjEwMjRBMDAwRTVFRjk2NUVGNUNFQ0QwNTgyN0Y3QzdEQ0NDMTQ0RjYwRQotOjEwMjRCMDAwRTBGRjY4RkM4NTEwOTI2ODNEMEQ3QjREQTExNjI2NDIxOQotOjEwMjRDMDAwNjExRjk0RTlGNDA4OTFENTQ0NkZFNTAwNDFBMjdCRDhERgotOjEwMjREMDAwOEI3QTRDOUYyNzk3RjdGRkI5RUEyMzNBQzQ3NkI2MDc2MQotOjEwMjRFMDAwREI5RjI3Mzk2OTBGMEEzRUMxRkE1NERBOEYyMzA4NUU1MQotOjEwMjRGMDAwQjJENzUwMjE4MzA1RUI0OUY4QTI5MEJCNkUyMDNCQjZDMgotOjEwMjUwMDAwQTUwMkRBQTkzRTA5MjIxMkUxN0IwQTQxN0EwOEY5QzM0MQotOjEwMjUxMDAwMzJEM0VENTQ1MEI4QUVEM0YxRjc0MEU1RjI3MjA4NzEwMgotOjEwMjUyMDAwNzkyNTg0ODVCRTA3QjlGMTI5OUNGRkFBNEY0MEVDNjc0NQotOjEwMjUzMDAwNTQ5OEU5MUQxRDE5Rjc0NzY4NkZDMEU1Qjc5OEM5RUVCMwotOjEwMjU0MDAwRjBGRDMwQjFCRjMwQTg0MDg3MEIyMkM0NzNFRTcwOTkwNAotOjEwMjU1MDAwMEU4MTRDMzFCRjgwODc5RDlFRkJBMkYwNzBDNEMxMjNDOQotOjEwMjU2MDAwODlFMEUxOERDMjAzRTcxMEYwMzgwM0JFMDIzRTkzMTQwOAotOjEwMjU3MDAwODQwRkNBQTdDOUQwMjVEMTNDOEE2NkRGNTQ4Mjk3Q0I4NQotOjEwMjU4MDAwMkFGMDczRDkwQjVDNUVBOEY3OUMwOTk3OTI0OEMwMTI5OQotOjEwMjU5MDAwQzg0RjAwOUZBOTg5RTk2Njg0MDY5RjNGMTYwMENCMkY4QwotOjEwMjVBMDAwNURGRTVDNUIyMEYzNzM1RDBFMjE3RjY2OTIzRDFBMkYwQQotOjEwMjVCMDAwOUZGNEU3QkU5NENBMkY2NEE0ODdBQTgyQUM3OTE2RDQ4QwotOjEwMjVDMDAwNjdCRUMyQ0EzQjg3NjBGREVBQTdGMzQ0QkRBQ0YyNTdDMQotOjEwMjVEMDAwQjk1OEZGNDFDMTI4NTExRjU3NTk2ODQ1NzhENTlCNDZDNgotOjEwMjVFMDAwQ0ZBQkMyRkE5MDgwNjkyM0YxRTVGMjdBQjRBQjcxNUZBOAotOjEwMjVGMDAwODFBNDdCODI0NEM3QTYwQzcwOUJCMDNENTA1RkU0MkQ0NAotOjEwMjYwMDAwQzA3QTAwRTkxMjEwNkU3NjI5QTc5RUUwNkNGRjM5NzgzNwotOjEwMjYxMDAwMUI3MDE1MTk2OTgxQzkwNUI4REVGQ0Y5OURBQjA1M0UzMwotOjEwMjYyMDAwMkJGQkNGQzVGRUM3M0JBRDZDQjdBQ0IxMDU4Mzg0Mjc5MAotOjEwMjYzMDAwNjQ3Nzc3N0Q2OTc0N0ZDNzlGRkU3OTBEM0Q3RjdBMDA0RgotOjEwMjY0MDAwQjg0OUJGODA0NzJFRjRCQkNFNUM4RkQ5MDE1QzVGOEM0QwotOjEwMjY1MDAwNzI4M0UyMUYzOERGNEM5QTJGODBFQTQ5QTY3NTNEMjUyOAotOjEwMjY2MDAwODUwOEZFQ0JFQkE3QjEzRjcwMjRDRkZGRkQ4MkJFMzFDMgotOjEwMjY3MDAwRTNFMzNFQTRGMTM0QUZEMDczRTBDOTI5MjRCODk1OENDQwotOjEwMjY4MDAwRjQ1RjRCRkQ0RUI4NTBCRUE2NTFCQkMwNDM0RjY1NjNDRgotOjEwMjY5MDAwODEzMjk3RTY4RDdGNkU0RUY5RTY4NjI1MzhDRjUyQTRCQgotOjEwMjZBMDAwMTE5MkQzOEIwQjAyMzdEMkI4NEJDRDkxNDE4NUY4NkM4OAotOjEwMjZCMDAwNjVDQTNCMzZBNjBCMDVFOTkzRTQwM0YxMkJFREI3MDY5QgotOjEwMjZDMDAwRTk5MUU4N0FCRkUwNTdFNDAwNzdCN0ZEOEFGOEY1RjhCQQotOjEwMjZEMDAwQkI2RTU4RTgxMzIyNEVDMkZGMTVDRjBEM0U4RjY2MzVGNAotOjEwMjZFMDAwOEQ3RjNCQUQ2M0E5RDRCNTkwRThGMkYzRjRENzZDN0Y0RQotOjEwMjZGMDAwNjZCRTFDMjhFODRFOTM1QjRCOUZGQjlBRjlFNzU5MzM2MwotOjEwMjcwMDAwMDQyNUNEM0Y4NjE4QkU1QkZBNUM5Mjg1RkNDM0E1OUY2RAotOjEwMjcxMDAwNDIyODA1REYyRkRCRjc3ODAzRjkzQkE1RThGRjkzOUZGRAotOjEwMjcyMDAwQkM3OEQ3NTNDQzZGRkI0ODVGMjJFODk2RkVGN0IzQ0Y1NwotOjEwMjczMDAwM0Y0ODdDN0E2NTEyQzdBMTI2QkQ3Njc0MDhEOTQxNTNGQgotOjEwMjc0MDAwOEU0NjFBMTA2RDcwRTJEOTM3MkUxM0Y0QUZGQjI1N0YzOQotOjEwMjc1MDAwMzM5RDhGMUU5RjI2QURCODg3RjBCRDBDRjE2RkM3Rjk3MgotOjEwMjc2MDAwOTY5OTgyQTI2RTc1Qjg1NTk2N0JDMjRGQUVEMUY2RjE5RQotOjEwMjc3MDAwMTk3NDZFOUNDRjcyNDUzRDUwNEFGQkM5OTQ4MEU1NjM0NQotOjEwMjc4MDAwNDhGODEzMzJGRTIzRkVCRkZENjg2ODM1QUQxM0E0NkYxMQotOjEwMjc5MDAwNkMyNDZGNEVBMTVGNENGQkJBRkRCMTc4QkZBM0VCNDAzOAotOjEwMjdBMDAwMjlGOURERTQxN0UzM0UxN0I3MUJEQjk3QzZFQTg3MDQ3OAotOjEwMjdCMDAwN0VGMjk2MDIyRDFFOTYwREQ5QjRBRjVGQTMzRkY0QzFGMQotOjEwMjdDMDAwMzA5QTc3N0UxQUQ5ODcxMzI5QUU5MDQwNUVFQUZFNzE1RgotOjEwMjdEMDAwMjhCOUYyOTEwMkI2OTdEQjI1RTI4NzMyNEJFMkZFMEI3NQotOjEwMjdFMDAwRjM4NTVGQUNEQkZGQ0IxRTkyRDg4RjVCRjY1MDlGNTExOQotOjEwMjdGMDAwRUMyNzZCRkMwQTYxMkZGM0VGOTNBNDU3ODhDRTAyMkZDRQotOjEwMjgwMDAwMDNEMUMxMkREQTlFNjA3MzFGQTZCOTVCOUI0Q0VDQzc0OAotOjEwMjgxMDAwRDhBNTNCQkNBNEY3QzczREQyRkZCNjdGNjNCQTQ5NzVDNAotOjEwMjgyMDAwNDMyNkQ1MjdDQzdEQ0NDM0Y2NTU5MDg0MzVGQTU1NkMxQwotOjEwMjgzMDAwNjczRTk5REU5NTRCRjMzRjk5MkU4MzhBRjMzNTI0NzVENQotOjEwMjg0MDAwRTU5MjlDNTU5Rjc1Nzg0OUVGQzZBRkZCRUQwMkUxMEYwRAotOjEwMjg1MDAwMEMwOThGREYxNEYxMDgzQzEzOUZFN0JDNTRCQTg5RjBEMAotOjEwMjg2MDAwN0MxMkY5OUNGMEI3Q0MzNUJDM0YzOEM5NkU5ODlDMTlFNgotOjEwMjg3MDAwQzFCMjQxQjNEMzczMUUxQjk1MzYxQkUxRTJBM0Y1QzY2QgotOjEwMjg4MDAwRDhENTFEQUY1RTkzNDJGNkYyNkU4QjNGQzU4REZENEVERgotOjEwMjg5MDAwMUVDRTM1Rjg0MUYxNjU1MTE4OTE1M0Q4NEJGQjFCMzNDRgotOjEwMjhBMDAwODcwNDEyQzA1RDJGN0Q5QjJDMEMyRjlENkU3RjVEQTczMgotOjEwMjhCMDAwQzAwNzU2QzI0N0I5RDg4NzZBNzdEQjdENDQ3RkExQTk5NAotOjEwMjhDMDAwRTQ0RjJFQkIxOURDMkREODdCRDlDQjBGMzczOEE4REVDRgotOjEwMjhEMDAwMEM0Q0NEMjdFOTdGRDRGRjEzNzM4OEVDRjE1RkE2OENGNQotOjEwMjhFMDAwQkRCNzFDRUJCQjhFNTk4NDlGQTIyQTg3RjI2M0VDNThCQwotOjEwMjhGMDAwN0JBNjE5NjQwM0JENzY0QThCNDkxRTEzREQyM0JEMjZEMgotOjEwMjkwMDAwQzlDOTIwQzdEMDYzNEE1RTg2QTFFRUYyMEUzMEJDOUZEMwotOjEwMjkxMDAwNTY5MjZCNjg0RjU3NDYxOURBOEJBMTM2MTJDMEY1MTRFMAotOjEwMjkyMDAwNjU0QUVFMTBBRUI4Q0Y4QzAyNDNCQjFERTkzQTRDRUJDMgotOjEwMjkzMDAwRkM1MkQ4NTEyNUY4NEZFOERCMjBEQjQzNjUxMTgwMDdCNgotOjEwMjk0MDAwOTAwRTI2MUUzN0RBNTkyNTkxMzZGNjM3OTMwRTVCMEMxQQotOjEwMjk1MDAwNzEwMEZCNTlFMjUwQzk4NTFBN0YwRDg0ODFDNDVGNDgxQwotOjEwMjk2MDAwRkY1RTkyNjMyNzBGOEJCODkzQUNDMTczNTlCNkQwQ0Y3QgotOjEwMjk3MDAwQ0I1RTk2RDgwRTVDNzZDQ0NDN0FFMjI0NzhCQkYxNDM2MQotOjEwMjk4MDAwRjI1MUU3QkI3OEI4RjdGNTFCRTFEQzdGQUUxMUFFNTkyOQotOjEwMjk5MDAwMDEyMzVDMkZBQjMxQzIzNTNCNjg4NEVCRTA1QTIzNUNFQQotOjEwMjlBMDAwNzM1NDIzMUM4NzM0NEQzNEY0MUZENjU2NjlBODhGRDgyRQotOjEwMjlCMDAwNzQ4NUExRkZDOEQwNkM0MzdERjQ2M0Q3MUFGQThGNjk4MAotOjEwMjlDMDAwNUY2MDY4MUZCN0Y3MzY0MzdCM0M1RDhEMEYyRjMzQjRENAotOjEwMjlEMDAwREI1MzhGMzA1RDFENDBCQTMyQTEzRTI4N0NFOURGRTIzNwotOjEwMjlFMDAwRThDMkMyNzAyRjFBRThGNDg2NjJGMEFGRTIzRkMyN0ZGRAotOjEwMjlGMDAwOTk5Njk3OTgwMDZBMDNGMUUzODVDMkZGMTU4NEZGOTRDNgotOjEwMkEwMDAwMjhGRTc1QjlEQTEzOUZFQUY4MUQ0MkZBOUFFNTY1Nzk0RQotOjEwMkExMDAwODRGMDdFQjIyNDg1RTlFNUUwNEIyNzBGMkI0MEY4NEY4OAotOjEwMkEyMDAwODUwMkRDRUZBQzI5MjI4RTIyQzlDMTI2QTI5MzRFNzAwQQotOjEwMkEzMDAwQjU5MUZEQjlDNjEyNjRGRjQ1NDVCMzcwMjcyOUU1Mzg0NQotOjEwMkE0MDAwN0ZGM0ZCMjVFODZGQzZBQ0IzNUE0OTAyNEJDQzdFQzc3NwotOjEwMkE1MDAwODdEQjBERjVDMjk3RjYxQUZBMTc3NTg2MERGNUYxODcyMwotOjEwMkE2MDAwNDEyMjdENTVGMEE2Rjc3OTJBOEIzRTU0MzhGQzU1RkM1RgotOjEwMkE3MDAwNDlGMDc5MkE0QkJGMENERTQ1RkEzN0RFQ0ZCRDVBQUQ5RgotOjEwMkE4MDAwOTdEMkM4QUZGRjdCRkJGMzY4RDZBMDdGMzY0ODI1QkYzRgotOjEwMkE5MDAwMzc3MjQ3QUFENzM0MDBFMTkxRkM0RTAzRjlERjgwNzYwNAotOjEwMkFBMDAwQjQxNTk1MTFCODBGQjIzRTk4RUYxMEVGRkYyRDY5RjJGMwotOjEwMkFCMDAwMkFFQTZGNDJGRjlDRjA4RTcwQzkyMzdCQUYxNjkyQkQ0RAotOjEwMkFDMDAwMDQxN0IyNUJDODBGODMyQjg0M0RCRkRBQTRCMjNEOUFEMgotOjEwMkFEMDAwODRGNjI4RDkyMzBEMTU3RUI2OTdBNzQzNzAyMDNEQkZGNQotOjEwMkFFMDAwMDY5NDU1QzQ3NzkyMTlFRDU3N0NGRTNGMjMwMjhEODVERAotOjEwMkFGMDAwNDU2MkIxNDQzRjc3N0QyMUIzRkYzRDg1RkM2OTA2QTY2MQotOjEwMkIwMDAwMDJBNEY3NEVEMEVGQjQzRTc4NjkxRUM1RTM0RjkwMkU3NQotOjEwMkIxMDAwQzNGNUI3QjVCQzMwNEYyNTNCQzMwM0VFMDhBRTNCMjAzMQotOjEwMkIyMDAwNDAwNjlCMEIwM0Y3RDBCOEVGOUJEQ0FCMEJGMUREODNDQQotOjEwMkIzMDAwMTNGRjMyODhFQzkxNzU4NUMyRUVCMzRCMDgyOUE0ODE0RQotOjEwMkI0MDAwRkVGMzE1QTBFNzhERDlDQTdEODU0NUQxMzg0QjRGRjRFQQotOjEwMkI1MDAwQTNDNzMzRjVGOEU2QUVCQTMwOTcxNkI3NTcyMkJBOEI0QgotOjEwMkI2MDAwOEYzQjQ2Q0NFRUFBRjFBNEZGOTY5OUQ4RUZGQzBCMkQzMwotOjEwMkI3MDAwQUU5NEU3NDk2NTM5RUY4MDRFN0IzQTJGOTlGREZGRUIyNAotOjEwMkI4MDAwMzVCQzk5MUQ5REFCN0U4RUVGREQxMDE0RjZENjAyOTNGOQotOjEwMkI5MDAwOTdGREY1REIzMzhGNzMxQ0M1MkU5OUMwNDdGRTUwNUE0NQotOjEwMkJBMDAwRkU3NjExN0ZEMUUzMjU5NzQ5REZDNkNFM0FEQjdFNkZGMwotOjEwMkJCMDAwQ0YzQzY2ODg1N0MxMTM3RDEyQzZEN0EzRTNBQkFDRkZFOQotOjEwMkJDMDAwNjJGNkI5NjU5MzQ3RTgzNUYyRjNERjZGQ0VBRTg0RDQ5MQotOjEwMkJEMDAwNDRGMzdDQ0VGMUFCRUI4M0FGMUFGOEUyQzZEQUI3MEM2NAotOjEwMkJFMDAwN0M3MDkzRkE5RUExM0RFMkU5QjI1MkJDMzJCMjI3NkJFRgotOjEwMkJGMDAwM0FDNUQ3M0ZEQjZEMkYyNjNDMjBGRTBGMTZDNkM0RUIyRgotOjEwMkMwMDAwMjJDREEzQUI2MEVDQjlFQ0Y3MkZCQzhFQTM3NTlEOENFNQotOjEwMkMxMDAwNTc3REJGRUZENEJEQzlGNTQ4NUQ4NENCRjhGREVBRjExRgotOjEwMkMyMDAwMTFCRDQ0NzFEODQ0RjZDQzVEMTJDQTBCRjI3NzQ5NUVFRgotOjEwMkMzMDAwNzg2MkU0MDU0MDFFRDlGRjc3NDlBM0JDNDRFRkI2RkQ5NgotOjEwMkM0MDAwQzE0N0E5QkRBQkRFRUVERUVFRTNGODA4Qzc0RDZBOTFFMQotOjEwMkM1MDAwMkVDODZFMDBBNzc4N0Y4MUNEQzE3NkU4MUQzRUUxMkY5QQotOjEwMkM2MDAwMUVBREY4RUEwNkIyNUY3MzIwRDU4QjMyMTA3RkMyN0ZBQgotOjEwMkM3MDAwQTJCOEM5N0M1MzFBRUJGRkQ1NTkwN0I4RkU2MTMzODg1NwotOjEwMkM4MDAwQkM1MTRERjgyMUYyNTc5N0E2QTYwQUJCNThDMUZFNTg3MQotOjEwMkM5MDAwM0Y5MTYxRTZGQUExMTE4MUFGOTgxRkYzQzM5Q0RGNTgwMQotOjEwMkNBMDAwREE1RkM0RjNDMDEzMTk0NDdDRjgzM0Q5RkZCNUUwNTc5OQotOjEwMkNCMDAwNzc4MERBNkIzMkQwREY0NkZBRkRDNEFDOEUzNTExNkIwQgotOjEwMkNDMDAwRUQxQTcwQUQwNUYxRkU0OUIyRkEzOTU5MzQ2MzdDRkQ1NQotOjEwMkNEMDAwQUUyNTNGRjMxMzlCRTBERjQ5QkI0RUNGNTMxMTNFMUZBMAotOjEwMkNFMDAwOUEyNEY2Q0ZENTY3NEMxQ0FGMDE2N0M0NTY4RDdFRDhBOQotOjEwMkNGMDAwMDM4MzAzNTYxRjhFREY2NjQ1N0JEMjI5OUVDRjFFMTNBQQotOjEwMkQwMDAwOERDQjlFQjA2MjQ5NzFEMDI0NTEzQTdEQzJFRTc1RjlFNwotOjEwMkQxMDAwNDQ5RTUzMkY0NzEwQ0NCMDlDRTREM0U1N0NFQjcwOEFFMwotOjEwMkQyMDAwQkY5RERDNkMwNzkyNUIzOEJGNDJGRTk2RkFBQzg4RTMyRAotOjEwMkQzMDAwRjdDQkYwMkYwMjgxMTdGNzFBNUNBRjY3ODhGQzA1RjExQgotOjEwMkQ0MDAwOUY0NzQyQkYxNkY3MjFGQjcyMENGMTY3NzI2MDUzQjFDNwotOjEwMkQ1MDAwRkRGRDNERjY2RDg0QkZFRUY1MUUxNkYxQjBDRjlBNDcyRQotOjEwMkQ2MDAwNzNCQzVCQTcxM0Q5QTdDNUJEN0YwQzIwREEyRkRCNDY0OAotOjEwMkQ3MDAwRUQ4QjVGN0VGRjFEOEFDRkZEQTYzMDMwRDQ4N0VEMEIzMwotOjEwMkQ4MDAwQ0M3MjMxQzlDOUM1QTkxRDFDQTcyQkY2QzkzQzJGQUVGMQotOjEwMkQ5MDAwOTdGNzhCNzJBQjExN0Q3MTU4RUM4ODcwNUNFRjZDRjExQQotOjEwMkRBMDAwRkI5RUY2RkZEOUNEOUQxQkYzMzk1RTJEOEYyNUI5QTI3MQotOjEwMkRCMDAwQ0Y4QkVCMjhBNjc1RThGQkQ0RDcxMTFEQTc3N0ZFRDFFMgotOjEwMkRDMDAwRTNEMDdBRkRFMzg3RDYwQ0Q3RjIwODM3RkExM0U4RTVBQgotOjEwMkREMDAwQUI3NDNBQjYyNjhFRkJENzY4Rjg4Q0M3NEZDMTg4NjBCMwotOjEwMkRFMDAwODhFMzc5NkU3MDM3NjBGRDVBMEQ0RTlGQ0RDM0ZENzAzQwotOjEwMkRGMDAwM0M0NDE5NEZGODVEM0NEQkU5MjUzOEVCRTNGN0NCODAyOQotOjEwMkUwMDAwQzA1M0JEQ0M3M0M1NDhGRjFDQTJCRkRCODIyMjRGQTBCQwotOjEwMkUxMDAwQjcyM0ZEODkzODY3NzMwQUQzRUJFMkU3REU3QUU3RTc4OQotOjEwMkUyMDAwMzhDQkFEOEY4RTI5MjRGREExQkYxRjBGNjc4NEVGNzBCMwotOjEwMkUzMDAwNUFDRjAyNDlFNENGMTBCRTM3RDFGOEYxRjk4MUYzODVCQQotOjEwMkU0MDAwRUI4OUVDNEVENjBCMjdCNkZEMkM0NEVCM0I5MTA1NkU3RgotOjEwMkU1MDAwMTNGMkUzRTI3REJGN0REMzM0OTZFOEM0MTk5NkIwODRDMwotOjEwMkU2MDAwNURDNkY4NTdCQzlFNzI0M0UwM0E5MjIzNzY5NDIzNjQ4MQotOjEwMkU3MDAwREZEOEY1RjcwNjVBMENFRjU1NjcyQTc3RjlEODFGNTVCMgotOjEwMkU4MDAwRUUyNjc5NjQ1Nzg1QkYzNjI0NTBDMUY1RTU1NkUxQUY4QgotOjEwMkU5MDAwRURFQTM0Q0JDNERGQkIyQzEwMjIzREJFRkNENTBDOTUzMwotOjEwMkVBMDAwRUNDN0U1Njg3N0IwQTc5MzE3RTRGNTQyMzJGQTQxRTkzOQotOjEwMkVCMDAwMDlFQzA2OTM1N0U2Nzg1QzVBNjAwREMxNEJGQUQxRDQwMQotOjEwMkVDMDAwMDc5RkM4ODlGQUEzQkFCRTJDRDJGNEJEOTI3RjYzMDNEMAotOjEwMkVEMDAwOERFRkQzRTI4MTY4Njc3MkJDQjMxNDAyOUExREExQzU1RAotOjEwMkVFMDAwRTE5QTBGNzAxQzQyOTdEQjM2OThFQkEwRjhDRjlBQkVBMAotOjEwMkVGMDAwMEIxQ0U0MUZDQTM4MkNDN0Q3M0NCM0QzQTAxNzNCNzJCNgotOjEwMkYwMDAwNTUxRDRBREExMUQxQkFCNTA3M0Y1RTNGMUZDMDZCRUNDMQotOjEwMkYxMDAwNDdEQjA1MTJENkQwN0FENTgxNDgyM0ZFREEzQUVCNzcyMwotOjEwMkYyMDAwNUQyRjYwRDkzMkU2OTFDODRBNkFGQkU2QjQ0NDc2QTRDNAotOjEwMkYzMDAwNDNCMzAzQjhFODQ3RUIxNEVGRDkwNkFFQkVDMzg0RkEzNwotOjEwMkY0MDAwMzNEOTZCODFGNzYzRjRBMDAzMzlGRkZEM0M2RDVFQjJBQQotOjEwMkY1MDAwMDczMkJCREJGRjQwNzhFQjY5MUYxN0FCMjRGOEJDNkY2RgotOjEwMkY2MDAwRURBNURERTZBRDQ5MjQwRjEyQzI4QkM4QzQzM0ZEMThCMAotOjEwMkY3MDAwRDE2MzMyQzRFQzlCRUQ5RTk4QkExNDA3MkY4OUNBRUUzOAotOjEwMkY4MDAwNzZFNTc0ODJGQ0U1NzdEREQ3QUFCQUYwQUIxRjFBRUNDMAotOjEwMkY5MDAwODExMEFGREY2QUYxODMxN0U5QzlFNkMxNzZDMzM5MEM0NgotOjEwMkZBMDAwNTVDQjdGMjIwMTE3QzdFQ0VGMUNGNjQ1NzZCOTU1REJGMAotOjEwMkZCMDAwOTdGNTIyRUY4QkM2RjVGN0JCQTREN0E3NUVFMkVCMEIyNAotOjEwMkZDMDAwNUZFMkY4ODVFQTRCMUI3RTRBRjVBNTBEM0ZGNTEyNUZERgotOjEwMkZEMDAwNUZGODEyQzcyRkNDQkVCNEQ3QTdDQ0JFQjRGMUFCNUU5RQotOjEwMkZFMDAwRTJFQjBCNUZFMkY4ODVBQjJGNkRGODI5NTc1RkRBRjA2MwotOjEwMkZGMDAwNTMyRkYxRjU4NTJGNkRGQ0FBNkMwNzNBQ0I4MUNGQ0QwRAotOjEwMzAwMDAwQTYzNzlBNDM3NENFNDZBQTBBNzNERTM4NTcwNThFNDcxMAotOjEwMzAxMDAwQTczNjAzRTcyQkI2N0I4NTFGQTVDN0U5NDdEMjEwMzIzOQotOjEwMzAyMDAwRkEyRDU2NzcxNkQ5RDFEQjFCRUZBQkZDMzE4RTczMkEwNAotOjEwMzAzMDAwMTMxNzRGRjlGQ0VDMjMwQThEQjM2RDFBNzBGRUMyRDkzOQotOjEwMzA0MDAwRjhEMTUxOEE3RkU1NDBEODFCQ0VBMUI4OUEwNEUxMTg4NwotOjEwMzA1MDAwQkJGNEZBNjAwQTg0NjNGQzg5NkFBNThGQTE1RUQ0Mzk0NwotOjEwMzA2MDAwQzBEMEZGOTY0RDQzMENFRDM3Qjc4RDM2QjRGRkE4QTlGRAotOjEwMzA3MDAwRDA1MEJGNDkyRDMzRjRCNzQzNEU0QjFFRTU1RDFCMkQ5OQotOjEwMzA4MDAwNUVDQTgzNTk2ODZGQTU2N0MyMEQ3NkQ4RjgzRDA1RkYwMwotOjEwMzA5MDAwOTExRjkzODMxNjdERjdCOEI4OEY3NEQ1NjYxOEQ3MTkyQQotOjEwMzBBMDAwRDc3RUI2N0M0MDdDM0U2MTRFQjE5NjRGRThGRTdFNDFCNQotOjEwMzBCMDAwQkMwRjZFNEZDMkI4QTc5RTRGRDBGMTM5REM5MkM0Rjg1NgotOjEwMzBDMDAwNUFBNzhBN0NEMzlBNjlDMjhGOUMxQTcyOUIyODZGQTlDRgotOjEwMzBEMDAwRTM2RkI0NDY3MkZBQkVCN0Q1MTlGREM5RjQ0Njc3MjUzOQotOjEwMzBFMDAwRkJBMzREQzBGOURDREMyQTczNDhDOUExMzhDMUMwNEEzMgotOjEwMzBGMDAwMDdFMjM5QjQ0M0QwNDcwODA0N0Q4NDFBODFGMzg1QTFERgotOjEwMzEwMDAwQUFEQzk1RDQ3RTJBMDQ3QzBBNDZBNzhGRDE1NTBCNjc4QQotOjEwMzExMDAwNTJEQ0I1M0VCQjVGMTZDNTE5NzJBQTA0M0QyQ0RENkJBRgotOjEwMzEyMDAwQTQwMzRBRTdEMjU2RDMwRjRCQkNGRUY0RkE4QzAyQ0E3MgotOjEwMzEzMDAwRTc5RDgxOTcyNzA0OUNGNUYzRTdFOTcxNzBDRkRCNjE4OAotOjEwMzE0MDAwQzQ0QjNDREVCRTJENUVENjE0Qzc3RjU3RjJFREYwNjI1NQotOjEwMzE1MDAwOUIyMTc3QTQ1MTlDNTQwNTk5RTIzMjJGNjYwRjM3MzM5NwotOjEwMzE2MDAwMUM5QUJDOEM5RjE5RDg4REY4MzBBNzA5MzhERjEzNEZGMwotOjEwMzE3MDAwOEZBRDc1MTBBRThBRTFERjFDNkY1ODIxRkM0QzkzRjJDNQotOjEwMzE4MDAwMkI5OUNGRjBEREZFQzBBNzQ0MTk1RkRCOUE0NEZFMTZGMQotOjEwMzE5MDAwQ0I2NDFBMUZGNkNBMDMyOEFFMTA1MjY3RjNCQUI3MzdDQQotOjEwMzFBMDAwREI5MkU5M0NERjU3RjU2NkEwRjNGMkRCNzNFNDAxOTRCMAotOjEwMzFCMDAwMTdEQkZFOEM2OTZFRUNGOTIwQTQwQUJCMzk5M0Y3NjEyQQotOjEwMzFDMDAwMzc5NzcwNjkxMUE1QTI5NTYwMTFFRDYxODlFQTgzNTY2MAotOjEwMzFEMDAwOThFM0YwQTk0QUQ0OUUzRTIzMzlFRUI5NjJBMkZFNUI4MQotOjEwMzFFMDAwOEE3MzE5M0U2OTRBODYwMTVGRDYxMjIzQkYyMzE4MEZERQotOjEwMzFGMDAwRTVBMzdDMUM0Q0JGQ0I0NDU3ODI0RTQyQUY0QkExOTVGQwotOjEwMzIwMDAwMUM1RkU5MzJENTEwREQ2OEU3MkREMjU3Q0QwNkNBNDdERAotOjEwMzIxMDAwRDU2N0ZGNzQyRUNCQUY3QTFCQzMxRDU2MDhCQUQwRjMwNwotOjEwMzIyMDAwODJENjI2NDE4N0YxRjRFM0YyMUFFOUM3MkEwRDM0ODlFMAotOjEwMzIzMDAwRkM5NkUwMUY3RDFEREIxNDZEREUyQzA5NTQ5NjdCQjZEOQotOjEwMzI0MDAwMDFDNDY3RDZCOEYxRUMyNDNDNDlERTc4MDQ1RjNBNjFFQQotOjEwMzI1MDAwMzZEMDdCQ0UxMjNCRTdCMTQxM0FDQUY4Qjc0RTAwRTgxMAotOjEwMzI2MDAwMTM3MzRFMjE3RUJENjc1REU3NzdBNEYzMEZCRjIzOURFNwotOjEwMzI3MDAwRUJGMjY3QUQ1NzkzM0Y0NUUyNUNFNDI5QTQ2QjhBMUZFQwotOjEwMzI4MDAwNERBREVBMDRGRUZFMEFEQzI2QTI0N0E0ODM1OTU5QzVDNwotOjEwMzI5MDAwN0NGNDgxN0Y3NjkxMUNCMjEzQkNBQUQzQThEREQ1QTk5QQotOjEwMzJBMDAwNEMyNUZBOUQyRUJEQTJCODcwOUNCNTg3MDU5REEzN0VDNgotOjEwMzJCMDAwNzk4OUVBQURDRDE2QTA3MzI2Mjg2NzRDM0ZBMjc5NEJEOQotOjEwMzJDMDAwRURFRTk1MjQ3OUE0ODFFMzY5REQ4NTNFOTQzQjE0NDdCNgotOjEwMzJEMDAwN0NDNTI4MkY4QTNBOEQ3MENCOEQ5N0VCM0RDMEIxMjdFNgotOjEwMzJFMDAwM0QxMTBGNDdENzA0MEQ4RUM1MDhDNzIxREYxRThFMzY0RQotOjEwMzJGMDAwQUZEMEMzRTkyNTQyQ0VCRTk4RkQ1MzdFRDU3RDU4OUMwNAotOjEwMzMwMDAwQUI0OTU3ODBFMUZBODUyQUY0RjI3NEU5Nzg5OEU0Q0I2NgotOjEwMzMxMDAwM0EwNUU1MEJCNkNGRDBEQUREMjU0MjlFRTg3MENFRDU3MgotOjEwMzMyMDAwRTBBQ0NCOTM3NUYzMjE4M0Y4REU0REYyQzQ0OTcwRkQxOAotOjEwMzMzMDAwODhGNTc2NUI5MTgwMzM0MDg0RjM5RkE5OEFFMDkzMzVDQQotOjEwMzM0MDAwNTZGMDUyOUNCNkFERDRFOUE1Nzg2MUFFQTJDMUI3NDk5QQotOjEwMzM1MDAwODM5NzA5NEMwNERGNzhCQTk0MjFBNjhFRUI0QjhEQUI5MgotOjEwMzM2MDAwN0Y1QkY4OTY0RUQwRjQ2NDNGMjgzRTFGRjhBRTRCNDk4MQotOjEwMzM3MDAwMTVGQzM2NTRDMEM3RUE4Q0YwQjlFNkE2MUM4Qjc3MjUzRAotOjEwMzM4MDAwRjI3NTQ3MEVDMjFCREI5QjVFMTdGMEZFQTVENjdGRDVGQwotOjEwMzM5MDAwMThFMDdBNTNERkQ1OTkwQ0FGOUM4NTk5NDRDRjRERDY3MAotOjEwMzNBMDAwMzY5NUYyNTg0RDNBRkQ2OUU3QzI1QzlBOUM5ODg2RkNDNgotOjEwMzNCMDAwQkQwMERGNUY4REYyODlGMjkwQTkyNTAxMDc4REQ3OTRCQQotOjEwMzNDMDAwNkYwMTg5RjdCRkQ5OUI2OEZGMEU5RkNEMjAwNzJGQUJGOAotOjEwMzNEMDAwMzFDMjM1MjUwRThFNDlERjkxRkY3RjNDRTFCQkYxRkYwNQotOjEwMzNFMDAwNzZGQTE1RkJBRDE5MDZEMEM5NzlDODkwODNFMDY0MkIzNQotOjEwMzNGMDAwOTk5ODRDNzRENEQyQkE5REVCMzI4NDlBNzI3MUZGMEZCMwotOjEwMzQwMDAwM0I4NUZERDVEMjNBQkJEN0YzNTEyMTREMkU2Q0E5NzMyNAotOjEwMzQxMDAwNzA3OTVGOUQ5QkNCQjZCQTRDMkVFRkE5OTNEOTdFNjk4QwotOjEwMzQyMDAwQURDQkUzQjJBNUNFQ0I2NTUzNUQwOTk3QUJFQTE0RUUwNQotOjEwMzQzMDAwMjdBRENEQTg2MDM5NUMwNTFDQ0Y1RTk5RjIzOUU3REY3NgotOjEwMzQ0MDAwRTNFN0NCNTE4RDdBNkM3MDZEQjIwMUVFN0Q2NjE4RjVCNQotOjEwMzQ1MDAwNTVCQTYyRDQ1Nzc0OEUyOUI2RERFNTFENjU2ODRGQzkyQgotOjEwMzQ2MDAwMkIzMEQ0OTNFNDg5ODZGRTUzMjYwNDdFMzk4MUU0ODA5MAotOjEwMzQ3MDAwQTczMjRFMEYyMjNGOEU4OTlFQjM2QjY5MTVERjRCRTk1MQotOjEwMzQ4MDAwRjBEM0Y1OTM1M0UzRjMzNTU2RUYwMENBM0IzOTVCMDVCMAotOjEwMzQ5MDAwOUYzNjZCNzY1RTEzQzExMUNCNjQwNUY4REM4Q0VEQjAwMgotOjEwMzRBMDAwRTQwRDAxRjFGRjZBQTZGMzg3NzFFRUZFNDg4QjFERDk4QQotOjEwMzRCMDAwRDcyODY0MjdCNEM4QzI4RUI3ODIzOEY3NkJDQkY0ODc5RAotOjEwMzRDMDAwNkJGMDc5MTJFQTJGQ0FFQkRBRTZBNkIwNUM3OEQ4RTNBMwotOjEwMzREMDAwRjREMjM5REI5NkQ2NjU2RTVFOEY1NzlDQTc3MUUzQkYzOQotOjEwMzRFMDAwNDQ3OTgwRjhGMzM1OEVBMUM2NzMzOUQ2QjM5QzZGRkM0RQotOjEwMzRGMDAwNzU0RkY0REE5NDkxNTA4RTlDMjE2N0JCRjMyRkVGNkJEQwotOjEwMzUwMDAwNzQyOUYyMkZGNzc4MDQzQ0VEM0RDOEEzRDYzODdCRDk1NwotOjEwMzUxMDAwQTlFNTVGNjBBMDJGNjFGRkE4M0QyNUYyMEJBRDcxNzE5OQotOjEwMzUyMDAwN0JGNEMzMTJFNjZGREU5QTIwNzFGRjNGNEY5MDg1QkY5OAotOjEwMzUzMDAwNjYwOTAzQzk2Qjk3MTdERjhGRjUzQjE0RjE3REU4Qjk3NgotOjEwMzU0MDAwQ0U4RjNGM0U0RjhDN0MwQTI0MDdGRTNDMDE5RjJCNEZDMQotOjEwMzU1MDAwMDgzQjI1NDkxNkRGQTFEODQwNTE1ODNFODFDODg3RDA4NQotOjEwMzU2MDAwNTkxRkQyMzdBOTVBQkVBNzVCQ0U5MDg4ODhBMTNCRTdFNgotOjEwMzU3MDAwMTlGRUFFQzg4QkQwNjcxNjQ0M0Y5NkU4RkIxN0M0QkY1MAotOjEwMzU4MDAwRkRCNjY1MjNGOUMzQzM3QTY5QTdGQzUwMDJCOUUwMkFFNgotOjEwMzU5MDAwRDFCRjFGODMyRTRGMzE4MEVFQkEyM0ZDNUMyNTg5RTExOQotOjEwMzVBMDAwMTcyNjc4MzU5QUQ2Q0RDOEM1RTdBOTVFOEIxNzMxMDBBNgotOjEwMzVCMDAwMTUyNUYyNUUzQTVGQjE0QTQ5NjVGREJFQUE0NDZFMjcwMQotOjEwMzVDMDAwRkVGOTQyNzE3QTA5MUZBREY5NTVBQ0FDOTM4NjdEQzhGRQotOjEwMzVEMDAwQTJCN0IxQzRDNjc2QkE4RTg3MjQ2RDVFNDQ0RjY3OTU5NAotOjEwMzVFMDAwMEU2N0VDRUZDQzlCMTFBREUzN0ZDRDYzMzY3MjVFQUYxRgotOjEwMzVGMDAwRTVBQTQ3MzhERkQ3MzJFQjNGMzhERkI3M0E2QjdBMUVBMAotOjEwMzYwMDAwQzlCREE0OTJFOUM3RjgyMDk3ODYxRjY2MEREMjIzNzkxOQotOjEwMzYxMDAwQzZGQ0RFRTlEM0EyQ0U3MEEwRjg4NDk2MDcwNDhGMzFGMQotOjEwMzYyMDAwQ0Y2NzkxRkQ4NkY5MkYzNDlFNjBBMEQwNDM2MDUxRjg5QQotOjEwMzYzMDAwN0I4MzMzRTk1QkYwQjVERUFGNjczRTUwRjVFRjRFNTc2NQotOjEwMzY0MDAwRDJGOUUwMjY4RjkwQTM0REUwN0QzMzQwRjU1NzI0QUZBQgotOjEwMzY1MDAwMkFEM0YzODIzN0U5QkNFOUVBODExNkM2Q0JFQUNDRDk5MgotOjEwMzY2MDAwNERDMjhFMTc3RTUzOTM2NzI1RTc2REUzRjUzNjlERDdFMAotOjEwMzY3MDAwOEM5NURCNzQ1RTMzNTZCRTM3QzlCMzdCRDVDQjU5MDEwRAotOjEwMzY4MDAwNzM5Q0RFMzdCRTlGMUQzNEVBMUZGREJEQTRDQzJCNUZBQgotOjEwMzY5MDAwQUI4QTM5MkZENTZDRjEzQjQ4NUVBQ0YyREM2NzhBRDUzQQotOjEwMzZBMDAwNzMwRjI4ODEwNTI1MzFFNzkzQUM5OUIzRjgzRDdCQjZCQwotOjEwMzZCMDAwMkZFMUJBQUU1MDk0ODU0NERGQjhGRjVFRUQ4MUY1OUFGNAotOjEwMzZDMDAwNUNEQ0E4RTk5N0IzRUQ3MzkzRDZGRjAxQURGRjY2RDIzQQotOjEwMzZEMDAwRUIyM0EyRjgxOTNFRjRGMjY0OTZDRkVCNDQxQzgzNzlGNQotOjEwMzZFMDAwMjA2NjVFQTUyNEIwODJENjE1QzVBQjM5MEExN0E0RDNDRgotOjEwMzZGMDAwRTFGOTU3QjBEREQxQjA2RTc2MzJFMTY5RTdGQURFRDc5NQotOjEwMzcwMDAwQTNFN0Q1RjU3RTdBMUUzNTNFQkY2RUYzOTgwREYwREY0OAotOjEwMzcxMDAwQTNDOTg1MTc1QzBCMkIxRjQwRDBFQzZDMTNGNEQ0QjBGRAotOjEwMzcyMDAwNEVFODkxRTE0Rjg4N0Q5QzQ5ODdDNkY1RUU2Q0VCREQ1NAotOjEwMzczMDAwMEU4QUVGNEY5MUM1NkUzQUUxN0E0NjVDN0Q0MDVDRkZBMAotOjEwMzc0MDAwRENCOEY2NTE3MUVEMDU3MUY1ODk3MUZEMkJFM0VBNTc4RgotOjEwMzc1MDAwQzRGNTlGMUQ1N0JGMzZBRUZGODJCOEY2REJFMkRBOTc5RAotOjEwMzc2MDAwQzVENUZGQ0Q4ODRGREZCNTY5ODlFMDE4OEYzRkJEREYzNAotOjEwMzc3MDAwQjlFMkVGNUQ1RkM1N0VBMkEzRTEzMDgzRTk0NUE3Qjc1QgotOjEwMzc4MDAwNzNDNTQzRDRERUY1MzM5REQ5NEE0NkIxN0NERjgxRjY1QgotOjEwMzc5MDAwMTVEOTQzM0JEQjJBRERFMjdDNDc2MEU1NkU4RDNFNDg3MAotOjEwMzdBMDAwM0Y1ODM2ODg3OUQwQ0U0QUU2Rjg5Q0QzNjM5MDIzNjc5OQotOjEwMzdCMDAwQzNCNzA5MzI4Q0VEQjE3NjY4RUU4NUM3RjdEOUU5MzMyNgotOjEwMzdDMDAwQTREOTE3QkRBRjVCRTdFMzI5MTNGQzI3NDkwRTQxNDg5NQotOjEwMzdEMDAwRjg5OUJBNURCQjREMTVGQ0IzNEQ1RDUwQjk5RUU0NkREMwotOjEwMzdFMDAwOTM1OUM0OUZCNUZCNTBFODZFMUQxMTI3MEY2ODRBMzhFNgotOjEwMzdGMDAwQzJGMTg0MjZDRDRGNjhEM0U0Qzk1QTREOUVEQ0FERjlBMQotOjEwMzgwMDAwMDk0OTQzODM5QjI4RUU5QjdDOTg4RkU3NDBCM0FGRTA0OAotOjEwMzgxMDAwQUYwQjEwM0ZGNzk3MTY2RkEzRUZDN0VFMUU1M0YyRjhFQQotOjEwMzgyMDAwQzM1ODc3RkQ1RDgyNzAyMURBRTk2MzVCMTRCMjU5REExRgotOjEwMzgzMDAwOTQ4QzI0M0E0Rjk0NjI3MkI0OTM5RkI4QUFCMENEM0Y0RgotOjEwMzg0MDAwMTRGQkFEREQ3RkFDRkQ3OUM0QjM5QzY5RjNBMkNFMDc1OAotOjEwMzg1MDAwRDlEMjY1MjI3QTgzN0MyRjdGOTc4NkVCNTRDOUM2QjI3MgotOjEwMzg2MDAwOTY3N0Q1MjUzQTc3QkFGNjBBQjc4OThDQjBGNDE5QjJBQgotOjEwMzg3MDAwOTlDRTExRjc5OTEwRTg1QjhBRjAxOERDMDQ2NjA1RUIyNQotOjEwMzg4MDAwMTk2QTk4Q0ZFMjVDNTMyQTBCRkZFQTE5NjQyOERFNkZBRAotOjEwMzg5MDAwNTcxNkMxRUJBQjY2REI3RUFBRjY4QzBGOTBCNDM4REQxMQotOjEwMzhBMDAwNzk5NUZBMzg2OTgyMzRFODg3RTM4RUIyNDVBQkFCOEZGRAotOjEwMzhCMDAwNkNBNkYzRDA0RTQ5RDRBNzNDRjNGOEZDOTVGOUQxRkFBNQotOjEwMzhDMDAwOTg2NzFFMUZCODEyREI1QjBCMDc5OTQ4OUVBNjdCNTJCOAotOjEwMzhEMDAwMTNERTEzNzM3NUE5OTA5RkRCOUIxNzBFNEVFNDhGRTlERgotOjEwMzhFMDAwQTUzQzEzMzgzMDIxRTc2QjI1RDFENDA0MkM4NzZBQTU3OQotOjEwMzhGMDAwQUMzRENGMTRGNTJCMzVCOEM5QjU1QUJCNDc5NDE3N0FGMAotOjEwMzkwMDAwOUVGOEYxRTc5NEJBNzUzQjdCODA5RjhENkNDODc3RjY4MwotOjEwMzkxMDAwMzNEODhCNTc5N0Y2NjIyRkEyNzlDQ0YxREFBRDU2Nzk2RQotOjEwMzkyMDAwMDA5RDIzRENEQTZDMDNCQUZGNjE2QjM2ODhFRjkwNTc5OQotOjEwMzkzMDAwRDlGOERDMjg1OERDMDNBRTcxNDVENzFENUFENTZGMUU2NwotOjEwMzk0MDAwRDE0REM4MDQ4NjM4NkVBNjA2NUZGQjQ0OTM3NjhFRjI4RQotOjEwMzk1MDAwOUIzMDdEQzdCNzU1Q0JGMzZDODU4OERCOUQxRjhCRTcwQwotOjEwMzk2MDAwNUZDRDI3QkNFQTc4REU1N0ZBQUZDRDQ0OUYxREQ5MEI1NwotOjEwMzk3MDAwMkIzN0UyN0JFQjFBQ0QxQzM3NTlENzk4Q0I3NDRFRTMyQgotOjEwMzk4MDAwOTA3RDc0NkFDNTIxMzNEOUFERjlEMDZFMjYzQjdGMTQ4MgotOjEwMzk5MDAwN0Q3OTNEODRBRTQwMEE3MEQ5QUVDOUU3RkZENEZDRjgwQQotOjEwMzlBMDAwNjFBMEYwRjM0MUQwQzVDMEY5QjQzOEYwMTM4MkNCMTA1OAotOjEwMzlCMDAwMTI2RDEyRjE4RkRCRTRDMDc5OTZFQzRCQUY0OEE0QjdERgotOjEwMzlDMDAwRUI0QUY1RUY3QUExQzY1MkFDRjkxNzMyQzNCNzhFRjhCRAotOjEwMzlEMDAwMjgxRUJFNzQ0MjlGRTM4RThBQkY5RURBOUQ3QjVGMEREOAotOjEwMzlFMDAwNUY4NkQ1REQ2RjE4RTk5M0YwMzYzQjQ2Q0Y2Q0Q0RTBBNwotOjEwMzlGMDAwRTdGNkZBMTVDMkUxQjVDNTgxMTY3QTdGQzlBNkJGMUVFMgotOjEwM0EwMDAwMjA3MzU0NTY1NTMzQkRGRjE0RTExRDlGMkYwQzA3QTc5QgotOjEwM0ExMDAwRDMzMDYzQkNFMTRBRUEzRkJBNzZEQjdFOEFBN0U1MDU4QwotOjEwM0EyMDAwRUZBOEVDOEZFQjFCQUU1NDU3N0E4ODg2OTRDMEZEMzQxOAotOjEwM0EzMDAwQ0VEMENFNDg4NTBCRUJDRTREQUY4NkIzNzgzRDYzNzlDMwotOjEwM0E0MDAwQkM1QzdEM0Q0ODBGRDU0QzQ3NkUxMUM3RDdGMDRCRjg5NQotOjEwM0E1MDAwQTc3M0NCMEIzNzBCRjg2MDdCMTZFRkNGRTJDRThBNURGNgotOjEwM0E2MDAwRkZCNjY5RkRGOEJCODU3OEJBNjhENUUwRjc1ODE0OEVDMwotOjEwM0E3MDAwNjAzNUZBMzU4RjI1ODJBMzRFQTczQTNDNkU3OEEyNkI0QgotOjEwM0E4MDAwMTVFNTNBRTc4NzNBNUYyNDM5RThERkU0OUVDNkYyQjBFRAotOjEwM0E5MDAwMzhGMDI0QkRFRjZCRjMzNzcwMUU3MDU3Mjc1RDQ3RDRBNQotOjEwM0FBMDAwMEQxRkE3RDI0OUQ3QkI2MDNGRTU2OUMyRkJENjE1RUYxMgotOjEwM0FCMDAwNTc3MkJDNzgyRjg4Qjg1ODlDM0VENDRCQUIxMjlGNjc4NgotOjEwM0FDMDAwMTBGN0U1OENEQjZCQjQ5MzkxNUU5NThEOUU1ODdBMzUzQgotOjEwM0FEMDAwNzNCRTMzQTRFOTkzNTAxM0QyMkZDREI3NDJEMDZGNDhCMQotOjEwM0FFMDAwNURFNjRFNDQ2NzhGNjg3QTY1ODc0NkI3RkFGM0ExM0Q3NQotOjEwM0FGMDAwOUNCQjNDNTREQUVEMjc2NjRBNDY3ODFFRUE4REVGRDMyQwotOjEwM0IwMDAwQzBDQkZDODA3QzcwODRGQTY1MTAxRjYwN0RGMDBBMzdBMgotOjEwM0IxMDAwRDNBN0NFMDc0QkY2RkVGNTAwREQ2N0UzRjRDOTA1QjE4OAotOjEwM0IyMDAwRjdENzQ1MzQzQzIyN0RCRTQzRUYyRkQ5RDQ3NTgwN0MzNgotOjEwM0IzMDAwQzVDMTJCMDQ3RDdFNEM3Nzg3MTU0NUU5MENGREM3Rjc4MQotOjEwM0I0MDAwQTg5RjRFM0ZGMUZCNzg1NzFCNEYyRUY2N0Y0Qzc4NUNCOQotOjEwM0I1MDAwQjgyOUM4RTMyMUZGMUMyQkU1NzEzQUMzNDlDQzcyNEE0RQotOjEwM0I2MDAwMjVFRDY3NkIxQkI4NjkzRkY2NUYxNDc0OTA1QzM4NTVBMAotOjEwM0I3MDAwNkI2MkI4REU5ODFGNUU2NUM2RjJGQUExNjBBNUVCODY5RgotOjEwM0I4MDAwQUEzMzkxNkM3MjI5OEY2QkNDRkYwRDZCMzNFMjBGRTk3NgotOjEwM0I5MDAwRTc2RjM0NEY5MTI3NjAxM0MxRUJBMDhERTU2OTBGNzQ3NwotOjEwM0JBMDAwMTFENTdCQUEwRUZGMTU3MTcyRDczQ0IxMTc3QTNFRDc5QgotOjEwM0JCMDAwNzFENzE2MkI4RTg5NDVERjYyMURFN0Q4NEY4RjM3OUQ1MQotOjEwM0JDMDAwMTkzRjFEQzVGRTQzNEJEMzZDRkQ5Q0YwMENCQThGNjdBQgotOjEwM0JEMDAwM0JDNTRGMTFBRUFCOUE3QUI3NTcyRjU4RkNCNEY5QTQzNgotOjEwM0JFMDAwODg5RkFFMDA4RTAzQUQ0QzE5NkI0QTQ0Mzc5NzQwRkM1QQotOjEwM0JGMDAwNzRDQUM0NDRGMUQzQzg3QjA2M0I3MzU1OTM5MDBCM0EwNwotOjEwM0MwMDAwRkM4NjU3OEQ0QzE2NzkyOTQ4QTU3Qzg5MUUxRkQzRjc1MQotOjEwM0MxMDAwNzVCNzY2NEYzNjY5NzA2QjIxQjgzMTNDMDVEQ0RBMDg0MAotOjEwM0MyMDAwNkUwQzRGMUQ2RTMzODQzRjQyNUY4ODUzQkNENjYzMTZDMwotOjEwM0MzMDAwNzlCMTkxMEIzNjUxQkVFMDU0QTZDODkzRDc2N0RCNDRFNwotOjEwM0M0MDAwN0I4RUM4MkY5QzQxMUY5OTMxRjYzNEYyQzE5QTY2NzE2MAotOjEwM0M1MDAwOUYwOEJFQ0Y3OUI1MTdCMzBGMzg4NjUwOUUzM0QzQ0NBQgotOjEwM0M2MDAwNzFEQUVEOUVGQjZBQjY3MzNEOTlGOUNGMEE2QTVCMUU2NQotOjEwM0M3MDAwQ0UzQkZDQzNCOUVBMDI3QTVFNjJFNzczRjI3QTNFQTdGMgotOjEwM0M4MDAwQTVBRkM4RTdCOEYyQjQ3QzRFREM3Qzc2QjhBOUIyOEQ5QgotOjEwM0M5MDAwRTZDQjEzN0U0QjhGNzRFQ0QzRjIxMTVBMUUyODIzREYzMAotOjEwM0NBMDAwOThBRjcwQzRFNTJCRTJGMzk1NkI5QTE3RUNERjJFRTIyOAotOjEwM0NCMDAwMkIyQzlGODdGRjc4MjRGQjYzRjFGM0I4NjcxQUZEQjdCRAotOjEwM0NDMDAwMzUyMzc1M0ZFQTExNDdBMkVGMTg1MkFCOENGNEQ4QTIwNgotOjEwM0NEMDAwRTFCQkExQUZDODQ3OUM2RDdDMjg0RjM2Rjg1NTJENzlDNAotOjEwM0NFMDAwRTcxNjQ3RDBGQjkxMUZFQTRFRDAzRkRFMEYzRDFGRkY4NgotOjEwM0NGMDAwRDZDREUzMUJFRjA3NENFMERGNkU5OUM4RjExNDQxREYyRQotOjEwM0QwMDAwNkI5QUM1RkVCQkUzNjk5QTVGQTU5RjNGRDJDN0IxNkFCNAotOjEwM0QxMDAwN0UxQ0Q3NzNBMjcyNEFDRjg3MEQ3NURCOTg1RTg3NkFDNwotOjEwM0QyMDAwRjc0NTM1RkM3QjRBNjg2NTBFRTVENzY2NzU1MTNFNzJFRQotOjEwM0QzMDAwRTgwRTg5RjNFRTQzOUQ3RUNFNDM3NDZDOThDRUY5RjE4NAotOjEwM0Q0MDAwQkVDOTgxQTcyN0M2QzQ5Rjc2Qjg3RTlBQzlGOTAyMkQzRAotOjEwM0Q1MDAwREVDRkY3RTZBMERFNTNENzE1NzYyQTY0RUY4RTA0QkVEOQotOjEwM0Q2MDAwNjcyNzM5MkUxRjEwN0YzRjRFN0M3RDRFOTlEMEMzOTkxNwotOjEwM0Q3MDAwRDc0MUMyN0I0RjNFOUYyOERBQ0ZGNERGQUY2MDM4QTEzNgotOjEwM0Q4MDAwQkY5QjJDRTRBREEyRDdGRkJGRTRBOTc2QjYxREUyRUYzRQotOjEwM0Q5MDAwN0Q0RUY5NDA5M0IzRkYwOTk3QTI5QzNENTExMjM4OUU4NgotOjEwM0RBMDAwNTBDRTVBQkE1OENFODYyNzI4OUY5MTlFNUM0RTE3N0REQQotOjEwM0RCMDAwMTAxRTZFNEM3QzNGOEY1Qzc2QTlFMkUxNjk4MTg3N0NBNgotOjEwM0RDMDAwMUQwRkY3NUM5MkY5NDJDNDQzNzY1OTIyM0NBMDVGNDUyRgotOjEwM0REMDAwRjA2QUYzMjk4M0E4NUQyOTUxMDY1M0Q5OEQ4RjFGMjZEOAotOjEwM0RFMDAwRTY4QjU5NjVDMkVFQkI1OEY4NThBN0UxRTM1RUMyMDdGRgotOjEwM0RGMDAwQzc2OTY0MkQ0RTkzQzdDRjlCMzU3Q0FDMzkwMzFGRUY0OQotOjEwM0UwMDAwMEI3Qzk0RThGODc4RUVCQ0YwOTE1MTk1NjE2ODc3OTc1NwotOjEwM0UxMDAwMUJGMTkxRUFDQjM1RDQ5REY5NDY3QzI0MEYyRDMwOENEMwotOjEwM0UyMDAwQjdCQzRDMTZGNzI0MEQ5QzY4RTg3NzI2M0U4Q0ZFQzA4NAotOjEwM0UzMDAwOURGNDVFMkZGNkU4QzA0MDY3MDU3RDRCMzQ2MDZFN0JENQotOjEwM0U0MDAwMDdDOUU2NEM3RjVCMDU5NUZBM0UzN0M3Rjk3MzdBQjkyNwotOjEwM0U1MDAwNUNDMzVGRTZENEM0Rjg1REEwRjE1QkM2NDRFNTI2MDMwRAotOjEwM0U2MDAwM0Q3QzJGMzE3RkQ2NjhGRDk3OTcyOEI3OTRDNUYyRjMzNAotOjEwM0U3MDAwOTU4OUZCMkZEMUZBREYzNjQxNTkxQ0RCMUY3RkQ2NEJDQQotOjEwM0U4MDAwMzFGNjc4NEZGQjBFMjQyQkNCQ0I3OEZEMjI0RkI2QTMxNwotOjEwM0U5MDAwM0U5NUYzNjYzQjkyRTQ3NkNBNTdBQkY1NEVDM0JENzVDQgotOjEwM0VBMDAwODNFOTM3QUM2N0ZFRTg5QjBFOTVDRUQ5RDEzRDQxNjhEQQotOjEwM0VCMDAwNTk2REJCQTM1RkVFMUE2Q0RBOTYzMTdDMjVDMUIxQTlBRQotOjEwM0VDMDAwNkM4OEI4QkY3NTkxRkY2RENBRUYyOEVBMDlFRDFDRDI2NgotOjEwM0VEMDAwN0NCRUVGQzgxNEVFNjNBMjdCQjJDMDlENzE0RUY5MjM4NQotOjEwM0VFMDAwOTQ2N0UyNUVCN0MxMjBCRTIzODYyMEVCNDFDOTBGRTk4QgotOjEwM0VGMDAwRjREREIyMDVGQzIyNUY0RUZEQzVGNzg1QkNGOTE0MDg2MAotOjEwM0YwMDAwNzNERDA1MTFBRUE3Njk3RURFMDM2NTM5M0M2RTNBQzhFNAotOjEwM0YxMDAwMjYwMTI0QUY4OUU0QThDRUE3MEU0RjkwRTlERjUzRUIyQQotOjEwM0YyMDAwMzZBRDI0NUZDRTAyNTA0NjdFQTA3MzIwN0ZDRjBCOTUyNgotOjEwM0YzMDAwQTA1MjNFQ0IwNDBFQjYzMzRERUIwRjdDQ0Q3OTNBRkQ0QgotOjEwM0Y0MDAwRkJDMzk3RkI4OEVGMEZDRjcxN0ZFN0RBQUY5MUVFRTUwOAotOjEwM0Y1MDAwRjM0NEVGRTU2QkQ0RUMwMUZENUUzRUI1MzJDOERGOTc2QwotOjEwM0Y2MDAwQUIyQkVERUUwNkNGOTlERjk3M0YzQTMxQjA4QkYwRkRFQQotOjEwM0Y3MDAwQjdBNDQxMjE5MTY0MEU0RTk4RURCQUEwRTM4NzJGRjJDOQotOjEwM0Y4MDAwRjhBRjVDRTRGMURGRUM2REZDQkJFOUQ3NTJDQUVCRjlBQQotOjEwM0Y5MDAwOEYxMjNGMzdCODhBRDlFRUQ0Q0I3OEJDNURBMTI4MTFGNwotOjEwM0ZBMDAwRUEyNzM5NUUxQkYwNjE5RkE4M0RFNzNDNkE2MjdGQTg2MwotOjEwM0ZCMDAwQzEyNENFOUZBOUVGOTlEOEVFODI3QzQxMDc0RTE5RjIxOQotOjEwM0ZDMDAwNzJDNjQ1Qzc3MTdBODM4MzQ1REM0OUM0NUZFQUZGNzREMgotOjEwM0ZEMDAwRDcwOEIyQkY3Rjk5MzIyQjkyODZFMzFEN0M1NUQ4N0ZEQwotOjEwM0ZFMDAwOTZBOTkxQ0Q3NEJGNzNGRjM0OUI3NzNCRjJERDNEREEyOAotOjEwM0ZGMDAwN0FFREE1MTNFRUJEMTM3RkJENzk4QTkwMTcyRThCRjc0RQotOjEwNDAwMDAwRjIwMjNFQjczNDMzNDJGNkEzQUJEODIyNTNBRUMwMTkwNgotOjEwNDAxMDAwOTdENzZDQjVCNDI1NTNCQ0IyNzVDNzdEMTVBM0IwRkI1QgotOjEwNDAyMDAwNjM3NTJGQjkxQjEzN0NFRkU5RDRGMjlBMjNBNUM0NzJGMAotOjEwNDAzMDAwRjA5RjkzOTI0NERDQ0I2N0JDNEZEODVBQUU5RDJCNDk3RQotOjEwNDA0MDAwODU1NEIyMjMyREZGNTJEMjEyOUQwN0QwNEI3REZFMjIwNAotOjEwNDA1MDAwNEZBNDhBQkVCRjhFRDAyNTZFODhFN0EyOTJFQUE0NjRFMAotOjEwNDA2MDAwMEY5RjhCRTgyNEY4NTY3QUMzMEVCMjdGMUY1RjEwQkNGNwotOjEwNDA3MDAwMzVGNkZCRDNENjEyNzA5MTFERUY5QjIyQ0VDMzZFNTA0NgotOjEwNDA4MDAwMjQxN0REQUZGMTYwQzRDMkY3OEUzRkI4RThFOUU2MTQ0QgotOjEwNDA5MDAwQUNFRjNENkE3NjEzM0M1QUZERUYzOTkzQjFGRTM4OEU5MgotOjEwNDBBMDAwNEJGMkVFRTAwRTcxQ0U1MjlEMEZBMTYxMDhCRjU2RjJBOQotOjEwNDBCMDAwMkFCMUJFNUIxMUU3QjJEOTIxMkJENkFFRUE0M0Y4RkY5NQotOjEwNDBDMDAwNzU3MjVGMDE2RjA4NTZEM0JEOURFQjUyMjZGMzdEOTY0NgotOjEwNDBEMDAwRDk3MzQ0M0M3OEJBNzRCNDgzREU3RkIwQzRDRUY4MUI4NQotOjEwNDBFMDAwQTI5REQzMzFBOUQ1N0M5RjY1REZGOUM2NzMzQTBGMkUwNwotOjEwNDBGMDAwRUY1NDA5QkZFRTUyQkI1QkU1RjM5NzRFRDc1ODdDREYxOAotOjEwNDEwMDAwRjVBODE5MjQ1NjcxNUQzQ0Y5NzRDOTI5RDZFNTE1N0VDOAotOjEwNDExMDAwRUVFMzcyNThBNUZCOEVGQkUyN0JGNTZFQkUzNUQxNzBFNwotOjEwNDEyMDAwMUU2OEY3MjZFMTlGQTY4RDc3N0E5MUQyNzFCRDcxRTc1RgotOjEwNDEzMDAwODVGNDc1QjVFMUJBRThERTYzRDc1MDhFNDc2NENDMzFCQgotOjEwNDE0MDAwQUUyRjJEQ0U2RjcwQzZENUE3OTY3N0RGRTMzMzlDRjBFOAotOjEwNDE1MDAwRkQ4NUZGQTc4NUFGNzFBQjU3NEVFNDdGQjZENjQxNjdBQgotOjEwNDE2MDAwNTVDQ0I5MDQ2NzBGNzFDMDlBQzk4MkFFNkQ1OTJGMzgwQQotOjEwNDE3MDAwQzg0RUY5QzI3RkM0NDMzODc4RTU5RjA3M0VCQzk3Q0E1MgotOjEwNDE4MDAwN0ZGRDZFRDc1Mjg0Q0ZFRkJGN0U3M0M3OTNCNEJGREE4MwotOjEwNDE5MDAwQkIwRjExQkRFQUZFMTg5RkMxQzRGNUJDNTg2RDYzQjhEMgotOjEwNDFBMDAwRjk2NzY4RTczOTdEMUQyRjU4N0REQ0NFRjlBNUI1RkI5MQotOjEwNDFCMDAwOTNCODdENjQzOTg0OTJCMDdEQTQ0NUM5QkE5OUU4QUVCQwotOjEwNDFDMDAwNTNGMkQ2Q0IzNDg4Mzg4RkE4RTM3RkVEMEQ3RTEzOEM2NQotOjEwNDFEMDAwMjEzQ0ZBMjVCQTBGNjM5QTc2QkU3NkMzMjI5MDA5RkY3NgotOjEwNDFFMDAwQjY0NUVEN0M1RUREQjc1QzlDNTdGNzI5RDU0OTdDREU5MgotOjEwNDFGMDAwNzQ4RTk5Q0Y4N0Q0NTc1RjczRjkzMEFDRUZCQTVDREMxQgotOjEwNDIwMDAwNEYzNTYzQjkzMjhGRTc1NzA0QkRBNDc1MTY5Qjk3MTNEQQotOjEwNDIxMDAwNUQ2Njg5RkI5QUY0RjNBNjQ1RDBDNURGN0Y4Q0Y0QjZDMgotOjEwNDIyMDAwNzdEODQ4REVDQzQ3MDBEM0ZBNUEzNTdDNjk3MTgzMjJBRgotOjEwNDIzMDAwNUZBNzRBRjZBNENCNkJDNDYzNDYxQ0RFRTJGMUJBNDIyOAotOjEwNDI0MDAwQzdFMzQ4MTg0OTc4OTRBMTJEOTlGNEUxNDMwMEVENzQyRgotOjEwNDI1MDAwQUZDMDg2RTU0RkNGQTNGMzZDNUZBODY5MENBRjlFRjhBMwotOjEwNDI2MDAwRjkxREI0NTc5NTExNzQwRjhCODNDQjRFQjQ1N0E5REM0RAotOjEwNDI3MDAwODVGNjJBOTVBRTYwQzU3NUNCNzFERDdCREUzOEY4RDI0OAotOjEwNDI4MDAwMEY3MUJBNTk0QUY1OTU3NDQ0QUI0OENCN0I4MUJBNzQyNwotOjEwNDI5MDAwNTAyNUFFRkYwNkUyNUU1MURGNDI4OUM0Nzc3RDkyQTFEMAotOjEwNDJBMDAwQkVENjYzODlGRTNEMDBGQ0Q1OTVBNUZGN0Q4MEQzNUIxRQotOjEwNDJCMDAwOTRBMTA4OTY0QzhCOTY4RjExRjU1OUU0ODdDNEI0RUZGRQotOjEwNDJDMDAwOUU2OUVDNUZCNjNGNjZGQzgxQjhERUM1MzY2RTBGRURDOQotOjEwNDJEMDAwNUJCQTQ1QjVDNEI0M0Y4N0Y1NzI4MDU3MzVGQkYxRkEzOAotOjEwNDJFMDAwOUQ2NkZGRjYwNEYyRURERDcyNjE0NzVBRkUwNTJBQzlBQwotOjEwNDJGMDAwQjUyRkQxNEUyM0ZGNUUzMjJCMkNERjIxRDcyMjI3QkFEOAotOjEwNDMwMDAwNTcwRjAwRTU2MUFDNUYyRTFCRTVFQkU1MUE1RjU4RkMyQgotOjEwNDMxMDAwMTVBMEU1QzdFMDFCM0RGRTgwM0Y3QkZFMzg4QkVGNjNCOQotOjEwNDMyMDAwNUEzNUM0QzJGNzBGQTEzRUYwRjY5NkFGQjM3ODJDOUY3MgotOjEwNDMzMDAwQzZERURCRjVBQzJFQkY4N0MxMzA5QUZGNEIyOEZGNDNBQQotOjEwNDM0MDAwMDVGMzQxQ0NCRDBEQzRGNzZEQ0Y1RkI2MTRFN0YxMUQ4OQotOjEwNDM1MDAwNERFNjM4QUFFNDVBOUZDMkY3MzFENTM1QjEzQzdGNDBDQgotOjEwNDM2MDAwMDlGQ0I2M0NFNjdDNDk2M0ZBQzI0MjkyMkZGQTM5OTlCRAotOjEwNDM3MDAwRThCRDQ3RDc5OEJGQ0RCREY3MURENTA3ODBGNEMyOTdEQwotOjEwNDM4MDAwNDg1QUY2NUVFOEIwQjE2RUVGMTE1QUM3RUFCQTc2MkUxNwotOjEwNDM5MDAwOUQ2RTg1ODU4REREMTJFNEI4Q0YxNTRBRTA0RkI0M0VBMQotOjEwNDNBMDAwN0IyNkI2QzdGMDg5RDU4REVGMTlGQzBFRTM3RDlDQjI1NAotOjEwNDNCMDAwM0JFMjI0Qjg2RjI4RjlDMDQ5RjNCNzFFMTY3Q0JERTE3MwotOjEwNDNDMDAwRjBFQzI0RTJCQjU2RUZBMTI0RTI5QjJGRThFMkM3RUYxQQotOjEwNDNEMDAwQzAyNzNFRTU1NTk2NjFCQkRGNDhCRDlFRTg2NzRGNDM2OQotOjEwNDNFMDAwMUFEQjE1MDc5N0RGN0YyREYxQ0Y4REJGRjgwMUMzQkIxNwotOjEwNDNGMDAwOUI2RkUwRTE0MTk1Q0UxOEJFODE4Nzk5QUVCQkY5NDYyRgotOjEwNDQwMDAwQUJGN0NDMzc3RjY3QkVEQUREQ0QzN0EyRUVDQjA3NDMwMwotOjEwNDQxMDAwRkRFMDRDNjNGRjZFQkVBMEYxOTEyRjFFQUZCMDczQkJFOQotOjEwNDQyMDAwN0REMkMzNUJENDE4QkUzQTQ5RjU1OEJFRjkwOUYyNERBNgotOjEwNDQzMDAwMDJCOTNGN0Q5MjQ2REYxNzk4NkY1MjJFMzJERjBDOURGNgotOjEwNDQ0MDAwQTRDOUNGRUZDRTM3NjMyNzVEMTRCRUQ5NjMzQTFGQkUzMAotOjEwNDQ1MDAwQjlFQzRDQkVBOTlBRDRGN0RCRjM0REFCM0JDQ0U3RTkwMgotOjEwNDQ2MDAwNUFFNzk4MTNGRTdEOTAwRjM0NzkzOTc1N0VBMEIyOEQ4RQotOjEwNDQ3MDAwRUMxQTQ1RENERjM3NEQ5QTk5RTVGMzEwOUY0OTc0ODdCNAotOjEwNDQ4MDAwMzRFQTRGQTFDRjBGNUVERkZEN0QwNkVCNjdGREZFRjU0MQotOjEwNDQ5MDAwRjU4NDUwQjI5MzE2MEJCQUU5QUMxMzcxREY2OTUyRjk4NwotOjEwNDRBMDAwQjRDNUE0NzdFOTNCMDI0QTM1NTNGNjk0RUMwMkQ0RkIzOQotOjEwNDRCMDAwMzJEOTg1RDA1RUUxQzE3OTM2NTQ5OUEwNERBNjJEMDczOQotOjEwNDRDMDAwQUI4N0YxRjg2MUI2Q0Y4NjY4NzE3RkE3OTQyRkJFNjc3RQotOjEwNDREMDAwOUEyOUZFRUU4NUZFNUQ0Q0I1NjJCQzVGQjZGRjU5RUNENQotOjEwNDRFMDAwMjY1Qzc3MEFGOTMxRUUxMkYxNzc1MDE2NEQ4QUQ3QkY2NAotOjEwNDRGMDAwNjg4N0UwRkEzQTA3REE5ODRFMzYyODU3RjcxQTI3M0FDQgotOjEwNDUwMDAwRTM1Q0I1MkY5ODMwMkZGOUQ2MjQ5Mzc2Q0ZCRUYyMzNFMwotOjEwNDUxMDAwQTJCM0RENkY2QzQ5QTY3MzEyN0IyNEUwRjMzOUYzODNGOQotOjEwNDUyMDAwNEZDRDIzQkU3M0E5NDJERUI0QUVGODMzQTUyMzYxRDdDNQotOjEwNDUzMDAwQjQxRjFBRjUzNDdDNkFENEQzRjBBOTUxNEY2QkY1MUUyMQotOjEwNDU0MDAwRTU4RDdBQzJBOEE3QjU3QUI3OUVENkVBREQ3QTVBQUJDRQotOjEwNDU1MDAwNDdFNUNEQTcwNjNEQkQ2MUQyQTcwNjc5RjMxRUQ1Q0ZBRAotOjEwNDU2MDAwNDE0RjFGOUU3NDcxRjRGNEE4OEIyQzZGOUVCRTcwRjJBNQotOjEwNDU3MDAwNjZERkE0QkUxNzQzREUxQzM5MkY3OTkzN0RBNkJDMzlCNAotOjEwNDU4MDAwNzQzRUYyQzZCNUI5NDNBNUY0Q0NDMjFFRjhBMDU2QzMxQQotOjEwNDU5MDAwRkI1QjY1Q0FEQjM0M0U5NDlDNUJCQzI2OUVCRTNBQUE5QwotOjEwNDVBMDAwMTdBRUE2QkYyQkYzQTU1N0Y4N0YzREJERUZBQUZERDVFQgotOjEwNDVCMDAwOTFDNjE4M0ZEQzY1RTkxNERGMjNENEVFRTFFN0I3NkM2MAotOjEwNDVDMDAwN0U5NUUzQjE2NzVEMkY1RDEwNUE3NEE2NUU0NUJCQzg0QQotOjEwNDVEMDAwQzFGNEVCMzU3MzJFRkM3Q0Q3RDEzQTQ3RjBEQjk1Q0Y5NQotOjEwNDVFMDAwREVDMUZDOTQ1QzZFOUM0RkI3N0YzQkFBNkQ2NjlFQUZBQwotOjEwNDVGMDAwNDRDOEU5OUVFQ0ExOUVFNkZEQTA1QzE2RjdGRkM1Q0Q4MAotOjEwNDYwMDAwMUY0RkJGNDg5RkU5OTM4Qjk4MUUyRDc0MkZGODE3OUQ1RAotOjEwNDYxMDAwQzA3RkE3RUFCRjRFNkVGQ0JGOEE3QzQ5RTlDNTExOTNGMwotOjEwNDYyMDAwQ0Y4MzRFQTc2QkY4NENCMDZGRUZDNURERjcwNUUzQ0YzNgotOjEwNDYzMDAwRTk5M0NGQzM4RTNFNENGQkVFOUI3MERGREY2NzM4NUVBNQotOjEwNDY0MDAwQjQ3RDVGMzBGRkUxRTZGM0MxRjdCQkU1RERGQkU2RUZFQwotOjEwNDY1MDAwNTEzMkI0N0Q2RkY4RTczNUVGNTE1QzYzQzNCRkFFN0Q3NwotOjEwNDY2MDAwOEFFMjFBRjc3RDlEQjc4REUyMUFGQUJENzI2OTEwRkRENAotOjEwNDY3MDAwOTFGNUVGOEYxMDJFMkVCRkY4OUUyNDYzNEVDQzc3NDUxOAotOjEwNDY4MDAwQzBGRTdERjRCQjEzQjIzNzdDRERFREZGMkJGN0NBOTE4MgotOjEwNDY5MDAwN0REMkRCQkQ3MkFEMzY2MzVDNEYyRkFGMkExN0Y2NEE3MQotOjEwNDZBMDAwQUI2OTFEQzcyMzM2QTA1RjU1OEY3OEVCOTgyM0UyMTFDNQotOjEwNDZCMDAwQUQ2OEE3QjBEQzk5NTNEMEFCN0RCNEFCNEVFMUI4NTMzNQotOjEwNDZDMDAwNkI5RDlGQ0I3QkVCNjY3MEI5RUJCNTI1NjUyNDc3N0Q0MQotOjEwNDZEMDAwQUYyRDYyQkRFN0YzRkFBRjdCMTg4MUU0QUVGOEQwNDlBNQotOjEwNDZFMDAwQ0ZFRkY1RThGRTkwQjA1RkQyQzg3RUMxRkFDMzkzRDc5MgotOjEwNDZGMDAwNkY4RDhEMEI4Q0ZBRUZFMTVCRDQ4MUQxNzg1NTVCNjZDMQotOjEwNDcwMDAwOENERDIzQzdGQTUxQTAxMkI5NDRGRDI4QUMxQkVDOUFFQQotOjEwNDcxMDAwMTFFQzQ3RUQyNkJCMDZFQkVEOTM0NzE4RUMxQTdEOUU5NgotOjEwNDcyMDAwQjU2NkE4MjFCQjY2RUQwRUYzOEM0NDc2Q0RBQ0YyQzQyMQotOjEwNDczMDAwN0UxNEQ2MzkwRkUyNzAzOUY4RkI3RjQ5RkJGQjVGNTFERAotOjEwNDc0MDAwN0VFOUREQUVDOTlENzI3MUVEOUFERjRGQkUzMEYxODcxMwotOjEwNDc1MDAwNkUzRUQ2RUM5OTA3MTRFNTBENERBRTdDNDdGOUIxRDEwQwotOjEwNDc2MDAwNENGMUUzNkYyQjNGNDY5MkZDQzgzN0M4OEZDRkNFNDc0MgotOjEwNDc3MDAwN0VDQzJBNzcxQkUyQTIwNzY1QjVDRjU4QjJEMzc3OThEMwotOjEwNDc4MDAwQTE1RUQ2RjQyRkQ2M0JEMUFGMzEyMTlDN0U1MjIxQjExMAotOjEwNDc5MDAwOUZCM0MxMEJGQ0Y3RkRBNjRCRjM1RjI2N0FEOEJEQzhDQgotOjEwNDdBMDAwQ0NERkJCM0ZBODg4NzMyMjBGQ0QxMUU3QTkxRTVFNUU0OAotOjEwNDdCMDAwMzA5QjNFMjM1QTk3NzJDM0RENDkxNEQ3MkUxN0Y3MDQ1NgotOjEwNDdDMDAwNEM5N0NBMzlDRUZERTAwQzYxRTc2NDNCREIyRkE3RkRCNwotOjEwNDdEMDAwMUZBQ0IwMDBEMUQ1RDlFMkRDMTQ2RUU3NzhCNUU2NDc1RQotOjEwNDdFMDAwODFCNDk5RkQwRUQ3MEYyRDZFM0FBRjFBMUZCRjc2OTY4MgotOjEwNDdGMDAwN0NDQ0RGQ0Q4M0Y0MEE3RkRGN0RCNkY4RjVCNzhENUIyNwotOjEwNDgwMDAwMEY5OEYyOURFM0Q2Q0M4RjM1Q0YwREJGNDE3NTlFNDlGMQotOjEwNDgxMDAwOUY0NzI2Q0JFMjVDNjIwRjdBMkM5RTlGM0JBQUE3QTdGQwotOjEwNDgyMDAwNDU3QTM5MTdFNTI0RkIyOUU2MUU1OUZEN0JENjU5RTU2MwotOjEwNDgzMDAwNjIxRTI3RDk0Rjg1NTFCQUU4QTgyRUVFRjU1RURBOTRBQwotOjEwNDg0MDAwREE2NzhFQzRFNjg1NTIyQ0VEM0M1RTRBRUQzRTdFQkVCNAotOjEwNDg1MDAwOUVDRTJGOTBDQ0IyNzg1OUFFM0U1RTg5RjIzOUMxNzhBNwotOjEwNDg2MDAwRkJFQTgyODcwOTJFQkZBRUFCM0Q0QzcxRUE0OTk2NEVGQQotOjEwNDg3MDAwODlGRTlFRUJERTNBOTVFQjdCRUE5QUI4REM1NUQ3QzYwQgotOjEwNDg4MDAwRkRENkQ3NkRFMkYyQkVCQTEwM0ZCRkI3RUUzMUFFREY1NAotOjEwNDg5MDAwNUREN0NFRjVDNzczQzUzQzEzMkQyMTFFNjc1MjE3OEUwOQotOjEwNDhBMDAwMUZDMzBGNjU5RkUwM0MzMTc4MkU4REE4ODZGNjA5NkZGNwotOjEwNDhCMDAwMzYxOURBOEIzQURCMENGNUJFRkU0RDg2RkU3RDY2ODQzQQotOjEwNDhDMDAwMENFRDZGOTUwNTAyNTM4QUU4NUNDMzYzODY3RUNFRkNDRgotOjEwNDhEMDAwNzY0M0ZENUNGRDg1MEJERDZGNjU0QUFBRTUxRkM4QUYxOQotOjEwNDhFMDAwODMwMjQ4NEY0ODY3RTlCNUIyQ0E3OUYzMUFDMTk3RkQwOAotOjEwNDhGMDAwNkJCRDYxQUE2RjcxRDk5OEJGNzVCQUU0MzNDQjI2QjE4RAotOjEwNDkwMDAwN0U1M0NDM0RCNTFEMkU3MTdFQjJBMUFGODhBNzM0RkM3RAotOjEwNDkxMDAwNENENEI3NjQ4OUYzOTFDM0FCNDQ3RUE0NjFBMEI4OTcyQgotOjEwNDkyMDAwNDRDRkMzNkY3MTY5Rjc5M0Y4QzQzRDFBODNGMjIzRkMzNwotOjEwNDkzMDAwRERFRDIwRURFRkMxMzlDQjQ1RkVDQzBENkVDRUNGMzc4RQotOjEwNDk0MDAwRDQ4MUY2N0Q2Mjg0RjMxRDE5NjBGNjhBRkJENTE1OTkzMgotOjEwNDk1MDAwRkY5RTkyMDU0MkY1Mzg1RjQzQkU1QkJEODVFNDRDMzA1NwotOjEwNDk2MDAwRDU2QkY2RjI5Rjk2MEQ5OTI5OEY0OEUyODk5MzMwRUQyOQotOjEwNDk3MDAwOUFERUQxRjJGMjQ5MUYwMDlGM0JFODg2Q0ZFN0UyN0I0NwotOjEwNDk4MDAwODREQTJFQkVCN0E5N0Y2RDE3RTdFM0I2RkM0MkRDNjM3RAotOjEwNDk5MDAwMTMwRkQ3OEU1RjdDQzVGNzJBNkRGREQ5NTc1OUM0RDQ0NAotOjEwNDlBMDAwNUJCQkNGRUQ3NDI1QzU3RThGQjZBNTI2OTVFRjVCRDg5MgotOjEwNDlCMDAwNUE5QkNCRTcyOEI2RDY4OEVGOEQ2NTEwRkJEREIyQzhEMQotOjEwNDlDMDAwQzZFNzMwQjZENjlBQ0QyNDI3NEYyREIyMzA1Q0Y0RjUyOQotOjEwNDlEMDAwQzdDRkFCN0ZCRkI5NEUzQkQ3NzNBRjc2QUU2N0FENzY2RgotOjEwNDlFMDAwQ0VFQTZFRUQ1QzRGQjM3NkNFNkE4RDc2M0U3NjE1OUQzRgotOjEwNDlGMDAwRUJCMTEzM0NDNUI5OUVBREI1MEIxNEVEM0NBQjdFMkZBRQotOjEwNEEwMDAwMDNDMzU3NDJGOEYyNzcyQTU2RDg2QjFBMDdGNDg3MEM3QgotOjEwNEExMDAwMTk2RUYxREZDNzY2NTQyNUM3OURFNzMxOUVCNzRBRjU4OQotOjEwNEEyMDAwMEQzMEQ0OURGOUM2RjM1NkM5NDM0NzE5Q0ZBOTBFMzRBQQotOjEwNEEzMDAwOUVFRkIxNzk4Q0U3N0EyQ0NFNEFFM0Y5RDA1OEZBNDQ0QwotOjEwNEE0MDAwNjA5QTU2NkNBQzI3RkM3N0ZGN0Q0NzdBRDg4RkZGN0U0MwotOjEwNEE1MDAwNUMzN0ZEODZGNDczNDAxMjlENDM0OTYzN0FDREFDMTJGNgotOjEwNEE2MDAwRjQ5OUExN0QwRkUzODY0RTJFNTM5MTVFQTg3NDUyOUU1OQotOjEwNEE3MDAwNURBMjczOTAyQUQzNTFGNEZCMzdBNTU3N0EzQURGQkY3MgotOjEwNEE4MDAwMDcyMEFENENGQ0Y3MDBGNDczMDg3RkQxRUNBOEE1NTNDOAotOjEwNEE5MDAwOTQ0RkE3MTQ0NUU3QkI3RjhBNzIzQ0I2QUU5NzNEQzlEOQotOjEwNEFBMDAwODVGRkFERjJGRjAxQzE4Q0UzMkIwMDgwMDAwMDAwMDAwOAotOjEwNEFCMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJCNTU1Q0Y0QjFCNDFCOQotOjEwNEFDMDAwMTRGRUIyQkJEMTQ0QTM1OTM0QjY4NjVBNDgxQTUyMERDQgotOjEwNEFEMDAwQTRCMDZEMzdBMjI1RDJENTg2OTI4M0M4MTYzQzc4RTg1QgotOjEwNEFFMDAwMjE4NzlDRkFFMzU4RTg2RDYzNUI5MDRBMjRBOTQyMkYyMgotOjEwNEFGMDAwNTJDOEMxMUUwQTgyMUVGQzAzNjIxQjdBOEU2ODBCNTJDQQotOjEwNEIwMDAwMjlDMThBRTc0MDVCN0ExMUQyMzc5M0FDODk5QkM0N0E3QQotOjEwNEIxMDAwRTk0MEYyRjI2NkU2RkRGOEJFRjdFNkU1MEQ2ODc5ODE1OAotOjEwNEIyMDAwOTBBMkREMTM3RDQwMjQ1QTJBMzg0ODA2NTQ2OEI5MzBEMwotOjEwNEIzMDAwMzA1MzI0RTlBMkZEQjVBQTk0MzU5MTE0QzBBOTA5NUNBQgotOjEwNEI0MDAwOUFCQTFFMkY0OTEyRDlDOTE2M0JGREQ0Q0VDRUVGOEQ4RAotOjEwNEI1MDAwMzFCQjAxMjYyNTJFQUYxRjM5MDAwRkIwMTVCM0U1MTY2NgotOjEwNEI2MDAwRkRDMEMyMEU5REFCQzBFRjMxNUIwRTdFOTZEQzQ5QTU0OQotOjEwNEI3MDAwMzJDQTREMDE5MTdENjlCRERFNEJDMDJDRkI0OUYxN0FGMwotOjEwNEI4MDAwQzczRDAzMDlGMjlGMzE4MEZDMzBCQkYzRDBDRDc0NTc5MQotOjEwNEI5MDAwMzQzQkU1QTMzQzQyN0I0NTQ4RTQyRjUyODREQzA3ODY0NgotOjEwNEJBMDAwQUZBQzgxRjZFN0FGREUxNzI1OEFGQjYxMDlCODRDRkI5NQotOjEwNEJCMDAwMEJGNjUyRUMxMUREREIxQUVGOTQ1RjI4Q0NDRkI0RkQ3RAotOjEwNEJDMDAwMjk5RENGNUMxMTIxMzI1REI3MUY5NjI4NTVEODYwQUI2NwotOjEwNEJEMDAwNUMyMzdFQTI1MjU1QTc1NUExQ0YwMzM0RTg5NEY3MEM2RAotOjEwNEJFMDAwRDM0N0VBQkFGQjI0MzAyOTUzNUVDRjBGRkMxQjg1OTFEMwotOjEwNEJGMDAwQkE1RDgwNTI2MUZCQjdCNTFFQ0Y3MTM3NkQ4NDEwQUFDNAotOjEwNEMwMDAwODg3NTFDMTVCNkVFMzZDQjNGODY2RkEzNjA2NzM4MjFEQQotOjEwNEMxMDAwMzBCRUQ0M0QyMUU3QTczOEJENUY5NkJCMTgzRUIxQTg5MgotOjEwNEMyMDAwOEIyNUIyNDc4QzUwOEYxM0NFM0RERDhENzNGQzdENjc5NQotOjEwNEMzMDAwRkM3NTAyMDc4NjgzQ0JBMjIxNzNCOTY1MEM3Mjc5NkM2RgotOjEwNEM0MDAwRjhCODNDMzI0NkI4M0MzNDE0MkU0QkM2MTg5NzQwOEEwQwotOjEwNEM1MDAwRDdCM0QzMDYxRTJGNjNDNDc3NjNDMUY2RjE2NDVCNTlFMwotOjEwNEM2MDAwNjc3NUM3ODQ4NEY3QUNDRTQzMkFCNzZCQkExNzI1M0Y2NAotOjEwNEM3MDAwMEQ3QzExNURCQzE5MEEzRDZGMjc5OUZEQkIyNzAyOEY4MgotOjEwNEM4MDAwQjkxQURERjRFQUUxNjZGQkQ1Njc1M0U3RTI0RTFCNzMyMAotOjEwNEM5MDAwQkJBRkVDRURDRjVEMUQ0ODZDQjZGMEZCQjJENkM3NDBBNAotOjEwNENBMDAwOTZFNzExODgwQjU4QTQzQ0JDMEVDNTI5RDNGREY0QjY3OQotOjEwNENCMDAwOTNGNzc1NDg3MUU0OUMwQ0RGOUEwQjNGNEMxQ0Q0M0Y3MgotOjEwNENDMDAwQ0I2OTZBMTk4MjlDRDUyNDk5N0FFQUQ0NkY4RjQyRjkwQwotOjEwNENEMDAwMzRGNDU1NjBGQUUzMjBBQjY3N0EyMjNGQTgxMzhFRDVFRgotOjEwNENFMDAwOUI5RkU3ODZDOTJFQjUyMzIyODhFNkJDNUU2QjM2OUU2NQotOjEwNENGMDAwOTc4OTJCMjAyOTgyREMwMjdGM0I1QzhGNkJGNjE4RjJCMAotOjEwNEQwMDAwRjBCOTYwRTVERjdBREZBQzNCQURCNDM0NUE3QkEyQjRENgotOjEwNEQxMDAwMTI1RDg5OEM0Njc1RDJENjZEOUMwN0E3MEZGQzdENzdGNgotOjEwNEQyMDAwNDBDQjMzQkMxN0M4MEZCODQzM0NFNzIzODk5NEFCOUVGNAotOjEwNEQzMDAwNEZCQjNBOTk3OTc0RDdGQUNGOUIyQzNCMTI4NDZGRjkwOQotOjEwNEQ0MDAwMUY3REQ4NjcyRjNBNThCRDk2OTI0MjNDRDcyMjhGRjVFNwotOjEwNEQ1MDAwREE5QzVCNTI2RjM5RDk3QjQ0Qjg3NTFFRkQ3MTZCOUYyRAotOjEwNEQ2MDAwNTZGMzU5OTFDODNGOUI0RjJBRjk2RkMxRjczN0M2Nzc2MQotOjEwNEQ3MDAwQjU5RkY3NDVBQTZCNDYxMzdDQUM5RkZCODkxQjhENDIwMAotOjEwNEQ4MDAwRjU0NzkwNEIxMTZGRDlBOEEwRTRFOUZDOTdEQUExNzAyMAotOjEwNEQ5MDAwRjc5NkY5RDAxNDVGNkRFOEEzNkJDRDczNjc1QjczNTUxRAotOjEwNERBMDAwRTc0RDEwNDEzNjZGN0UwRUNEQkFGMzJERUE2QjRBOTM3NAotOjEwNERCMDAwNDc3M0VFMzRGMzU4QUVFMjRDNTY3MTIyRENGQTNERDcxRAotOjEwNERDMDAwRUIzNTVGMUJFQTQ4ODg2N0ZCRTZFQjc5N0REMzhFN0Y4NgotOjEwNEREMDAwNkIxRkFDMjQ3NTc3OUVGRTFGRjA2OTFGQkUxQjhDOEY2NgotOjEwNERFMDAwQjNFRkFGMUQ2RjU2OUU4RUZGMzM0RkQ2RjNBMjM5NTdFOAotOjEwNERGMDAwMkU4OEYzQTJGNzRDRkQyRkRCQTc5MEE2RjAwNzAwMDA0QQotOjEwNEUwMDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDBGMAotOjEwNEUxMDAwMDAwQkZCNTFDRkMwRjAwMzA5NzdGM0EwRjJCRkEzRjE2MQotOjEwNEUyMDAwNTdGMUEzRjJDQkI4NTFGOTlFNjhGQzI2MzRGREU3RDFDNwotOjEwNEUzMDAwRTQ1OTE4MjBCNDIzM0JBQTM4QjE1ODk4ODM4MTQxMEUxNQotOjEwNEU0MDAwODgzNTM5NTBDNUYzQTFFNkQ2MDAyREU4MDdFMjE1QUM0OAotOjEwNEU1MDAwODRDRDdBMjdDNUMwRjA1Rjk2ODFFMTI4OTBBRTA2RTI0NgotOjEwNEU2MDAwNEI0MDM2OTMxQzAzMDNBRjM0MDM4MzA3MTA0NzAzRjExMQotOjEwNEU3MDAwM0IxOTA2ODZBOTQwRkEyNTEwNkY5MDg2RThFMzA0OEE1QwotOjEwNEU4MDAwOUQ5NDIxQ0ZGRDZENDJFNEU5MUJDNUQ0QzFCNzk1NTA3NwotOjEwNEU5MDAwRjk5M0I1MTkxOEFFRTkzMDMwQThFOTQxRjhFNzkxRTQ4MwotOjEwNEVBMDAwOUQ4MDYyNTNCNDIxRUM3MDU1MDY4NkJEQkEwQzBDODcwOAotOjEwNEVCMDAwOTVCMDlCMUIwMTk0REYwNzk0OEZEMEMzNkZCRjgzMTEwNAotOjEwNEVDMDAwMkE3RkFCMzUyQUZGOEIyMTJBRkZCMjI3MkFCRkQ2MUJBOAotOjEwNEVEMDAwOTU1RkVBMDNBMTAxMzU3MjBDRDZEODAzMDAwMDAwMDBFQgotOjEwNEVFMDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAxMAotOjEwNEVGMDAwMDAwQkNEN0QwQjdDMTVFNTk1Rjg5OUM3OUQzQkY3OTk4NwotOjEwNEYwMDAwNDk3MjAzMTcwODMwODk0MUEyMDYxQzIwNDA0MEM0NDk1OQotOjEwNEYxMDAwMDgxQTZDOEExN0E0NEE1REFBNTc2QTJEMjI4RjJCNjI0MQotOjEwNEYyMDAwNEQ1RDZCMjZFRkYwQjA4REU4NTZGRTZBRjVDMjZBOTdDQwotOjEwNEYzMDAwNUFBREQxRDI5NkI2REEyNjgwMkVCNjE0MjJBNUQ2QjZCMAotOjEwNEY0MDAwRUNCRjQxNUQ2RDU5NjVBMzVCRDRCNUI0RUM3N0NFMzc0QQotOjEwNEY1MDAwOTNDQzVDNkUxRUY2RjFCMzcxQkJDMzM3RjMzRENFNzdENQotOjEwNEY2MDAwQkU3M0NFNzc1RURGNzcxNUQxMDdGQTI1MDA2N0YwOEYyNQotOjEwNEY3MDAwM0RDRjE3MDE2MEU2QzAzMzVBMDFBNTcyMzlDMDI2MjEyMgotOjEwNEY4MDAwNjg4NDhCRDhGMzRGRDJGMkNFMzBGQjA2NTY3Q0U5OTQ3RQotOjEwNEY5MDAwODE3NjU3ODM0MEY1OUYyRjZBOERGN0IyRUZFRDkzQkU3MAotOjEwNEZBMDAwMUE4NzMyNTY3RkJDNDBGNTlEN0FDRUYzMDY5MDAwMEFGMAotOjEwNEZCMDAwMDA0QTNBNTZBQTA5RDZDRkE2MzE4RDJBRDY2RkQ3Qjc1RQotOjEwNEZDMDAwMkQwNzM2REVBOTEyMDUyNDFDQUYyODdCRkJENjdBODA3QwotOjEwNEZEMDAwQUVDOTAwOTdDMDU2QjUzOEM2Q0E0NzI1NjMzMzY0MUJBRgotOjEwNEZFMDAwQTc4OEM2NzFDQUZFQjgwODVEQTU0MDdGNjdEOEZGMzY5RQotOjEwNEZGMDAwN0QyOTA5MDkzNjZFQ0JBNEFGMkU0N0I4OTVBRTlCNDBFQwotOjEwNTAwMDAwOEYwMERDMzYyNjA5M0E3QjNGMEQ0NDlBOTc1MjYxODEyNgotOjEwNTAxMDAwQzlDQUFBNkVDNUFEMjk2NzhGRDM4RTc4MjlDMzVFM0JGNgotOjEwNTAyMDAwRTI0QjIzMDNFRjk3Mzg3ODYxRjhDOEMwMEJDMDVDMDBFRgotOjEwNTAzMDAwMERBNjc3NTk1ODBFMDBCNUNGRUNEN0I0QzdEN0UyMjNFOQotOjEwNTA0MDAwMUJGRkVDRjlGM0YxQTc4MjRFNzgwMEI1MjM5RTg4MEM4NAotOjEwNTA1MDAwQzBCM0M5RDdENzI1MzE3QzVCNDU2MDNDQzZBQUU0QjA1NAotOjEwNTA2MDAwNzEyQTVERkQ2NDhFRDczRjRGQjlDM0IzRkU1MzEwQ0U5NgotOjEwNTA3MDAwMDI5QTg3MjBCQkZBQ0I4NDY3OTY1RDZGMTY5QjM5M0VGOAotOjEwNTA4MDAwOUQ3OUU1Q0NFM0UzMENEN0ZGRTU4OEUyMDJBQ0RGMTFDNAotOjEwNTA5MDAwQjcyMjJFN0E5NDJEMEZERTgzNzY3RENERjRENjFCMENBRAotOjEwNTBBMDAwM0YyMUM0Q0Y0Q0M0OEYxNTQ3N0E3NEU4NTgwQUVCMERFMgotOjEwNTBCMDAwMzU2QzNFMDUxNkY0NDlCOTQ0MzYyNjhDMDJDOEM3N0ZDNAotOjEwNTBDMDAwQjEyNkIyQTY1NzIyQkQ4RTMyNTk1REY2N0Q3NENDNkFFOAotOjEwNTBEMDAwOTBEOEZCMzFGM0QyODJDQzlFMTE3ODQ4N0IyMzA0MDgxMAotOjEwNTBFMDAwNERDOTE5NkE2NDcxQkFFRjlDRDFERUNCRThGNjE0NDQ1RAotOjEwNTBGMDAwM0EzNkIzNjc5M0NDRkE0NUJDMUQ4QkE0MUY2MzIwMzVBOQotOjEwNTEwMDAwNUM5QzdBQTQ5Nzk1MjM5NjBDOERFNTM0MkVGMUUxRUQwNQotOjEwNTExMDAwRDJGOUM2NjY0NkQyOUI2REZBNkZBRjU3RTlEOTVBQUYzRQotOjEwNTEyMDAwNDE5NzFGQTBCOTNFNEVDRkZCNDM3N0ZEMUJGNjVGNjc0QgotOjEwNTEzMDAwRjkzNTNGN0JDQTlEQjczRTg1RTUyNjgwMDQ4RTE3ODlFOQotOjEwNTE0MDAwRjFGRTQxNTZCNUM3MzQyQzgzODk3ODhGOTRGMEU3NEIzNAotOjEwNTE1MDAwODgxNzA2RTc1NzE5MjYxMTJGM0ZCMEYxQTQ0MzE3RjExRQotOjEwNTE2MDAwNkI5M0IxMzQwN0IyRTBEMzc5ODY0QUJEN0MxNkQwODMwNQotOjEwNTE3MDAwQUNFNTQwRDkxRkNGRjM5NDdEREE1ODRGN0Q4MDQyQzIxMQotOjEwNTE4MDAwMUI5NTk5QTg1ODI1NzA3OTE0OTE3QkMwNDAzODE5QkU5OQotOjEwNTE5MDAwQjJDQTA1NUJBRTQ4RDJCNEJFMkUzNkJGRjA2Q0M1RDhERAotOjEwNTFBMDAwQzk5QURFMkQ3OEY5NkI4Q0MwRTlBMzRDNTBFOTE5ODNCQwotOjEwNTFCMDAwQkU3RDY3MTAyRjg2OThERUNDQzYwQTRFMkJFRUVDOEE5OQotOjEwNTFDMDAwRTE5ODhBMzE4OUFENjNEMDk3RDZGMkIyRjAxNzk0Q0JDQgotOjEwNTFEMDAwNkZGNTNBNzAxNzdGRkNGODkxQTRFRTU0MjJDQkI4N0Y5QwotOjEwNTFFMDAwQjBEN0VGOTJEMzg3NTVFNDdGNzU5QTk4NDg5NzIxQkM0MgotOjEwNTFGMDAwNTY4MjREMUVCNkVBQjI4OEYzRkVGOEUwMUU3QUJEOEVFNgotOjEwNTIwMDAwREJGQ0RDMEEyQUQ1OTc3MUJEQ0EwN0Q2QUJERDYwRUJBMwotOjEwNTIxMDAwODVGQzUzQ0VEN0FCNURCNkQ0OTFBQ0Q3RTMwMDFFQkNCMgotOjEwNTIyMDAwODRGQUYxRDJDOUYxNTJGNjMxRTNBNTY5RUZGMjQ0OTY1RQotOjEwNTIzMDAwNzlCNERBRUIyOTgzNjE5NDEyMUUxNDFERTFEQ0RBQzAyMwotOjEwNTI0MDAwRTlENjYyNzQ5QjRERkUwRTg2MDcyOUU3NTgzQzU5NzZENQotOjEwNTI1MDAwMzZERUFGMTJGODM4MEI2QzNFNzFGMEI0QzkxMDZCRDI2OQotOjEwNTI2MDAwNjFDNDUzNDcwRENBQURBRDI1QTI4ODcyRTlFM0MyOTM2QwotOjEwNTI3MDAwMDNEN0U2N0VCOEQyMUNBRUQyOEYxNzJFMjlENEI1M0MwOAotOjEwNTI4MDAwMUIzRkI2NjZGMEUzMTY4NDlCRDM1RDBEQTczQkYxNjMyRAotOjEwNTI5MDAwQTUzQjA3QUUwMEYyMDM1RkU3MDQ1RjY3RjkxRjYyOUQ1RAotOjEwNTJBMDAwNUJGQkQ3MzlDOUQ3MzlGRUYxQUNCM0IzOUY4MzZBMkMwNgotOjEwNTJCMDAwQzc3NTVCQTUzMTNFNjQ3MERDMkM1OUNBRjVCOEJGODY1MgotOjEwNTJDMDAwMDQ3OENDNjA3NDgwRjA4RjYxN0E2NkI4RjE2NTVEMDcxMAotOjEwNTJEMDAwQjg0RjA4NzA3RDQzNUE5MTkzNzRDMUJCNEE2NjNBQ0I2QwotOjEwNTJFMDAwNzQ3Q0JGRjVEQ0U0MTBGMzgwQjRBRkFGRDc4MTkzRjFFOQotOjEwNTJGMDAwNkZEREIxODZCNkZEMkUzOEJGMjQ0NDYyMDRFNzZDOTg5QQotOjEwNTMwMDAwOEQ3MEJFMUI1RTlBRDMwNTgzRjc3N0EyNUU2RDkwN0Q4QwotOjEwNTMxMDAwMDBFRkQ3NUI2REZCN0Q2NzdGQkY1OTgyNTQzNkZERjI4RQotOjEwNTMyMDAwNDE1QjJFODBEQUE5RDBGQ0VGNjQzQzM4MERGMTcwNkU0MQotOjEwNTMzMDAwMzU0NEQ5N0E4NDFCNDdFMTNDMjBDQzNFQ0U2MUZERUM1QwotOjEwNTM0MDAwMEEzNEM4MkVGQzBFMzY5RjdFQkMzQUVEOThCQUUzQ0ZFNQotOjEwNTM1MDAwM0JCQkZENjBFRDNFMTQ5MjhGMDgwQ0JGMkQzMUIxMUE5RQotOjEwNTM2MDAwRTE1MjRCMjA4RDZCRTBERkI1QTQ2QjJDMEMwRTZGNEIyNAotOjEwNTM3MDAwRUM2RjAzRUZBMEVCNjZENzdCMzdEQ0Q4MEFBQzVEOTMwQwotOjEwNTM4MDAwQ0YzOEEwMzMzQTY5MkUxMDhENDYxODgwQzNBMTE3NjcxNQotOjEwNTM5MDAwNUQxQzNDOEU3NDVEN0VEQjRGNUY1QjJGMDVEMjMzNDExRAotOjEwNTNBMDAwOTdBNkZERjU3NDc1MDBFOUVBODJCRjNGNURCREYxOEZGOAotOjEwNTNCMDAwNEI1NzI3ODQ4MjdGNUNCQTUyRUEyNEZENzU2NjY3MTRENgotOjEwNTNDMDAwQzkyNjk3OTNEQTRBOEJENjFGQzc2NjcyNDlFQTk4RDZFMAotOjEwNTNEMDAwODVGMjEyRTJDQzNFRTNDMzgwQzhDQThBNjY3MkJEMTc2QQotOjEwNTNFMDAwMEM0MEZENTUyREYxQ0E0OTVGQTE1NzRFQzY5NzlCNURGNAotOjEwNTNGMDAwNEVCRjlCNzUxQzU3QTE3MUQxM0NDMjcxRTUzMDc0MDUzRAotOjEwNTQwMDAwQTI1ODU2QTgxRjI0RTczM0U3MzAzQ0MxODMzNUM1QkNGQQotOjEwNTQxMDAwOUQ4MUVEMDY5QjhGOENFREQ4NzhBODdFOUMyOUMyNzY2NQotOjEwNTQyMDAwRkY5NDkzQzg2MkY3MEVDQ0RGM0I0RTdDNTkyMjI3MTFDNAotOjEwNTQzMDAwMTk3OTdEMDhDQkZBMUIyRUJDMEZERTRFODYzNzFDQkNCQgotOjEwNTQ0MDAwMzBGQTJGNDUzRjQ5QzEwMEZFQ0Q1REI3OTBGRjIyMDBFNQotOjEwNTQ1MDAwQTI0MTc2NUQ2MUFCODU1RkRCRjBGRkNEQzE3RDlGRjMzRgotOjEwNTQ2MDAwNzU1QkUxNzQwREY1MkQ2MEZCMERCRUI3ODQyRjAwOTZDMgotOjEwNTQ3MDAwM0YxNDc0RTI1QjY3M0MyOTlDMDBBMjFCQkJERTcwRUIwRgotOjEwNTQ4MDAwN0YzQkYyNTMxNkZFNUUyMTcyN0RFM0ZEQkI1MkZGOEQyMgotOjEwNTQ5MDAwRjZBMEI1NTlEMDFGNjM3ODNENTRGRjAxQkNDNkY4NzIyMQotOjEwNTRBMDAwNjVENzc5MEFGQTNEQUUxMzQ3NTFCRDk1RjM4QTk0MDU0NQotOjEwNTRCMDAwQUU3RTU2MDJCNzBCMDE3QUU1MjUxMUY3QjgwRDVDMEZFOQotOjEwNTRDMDAwRUQ5NEY2RTJCQzVGQUQ5MEQyQjhGRkJENUFGMTNGQTRCNwotOjEwNTREMDAwOUZCRjZBNEE2OTQ0RjJBQkVENTdFNjBDMjU3NzBFRDVCQgotOjEwNTRFMDAwNzM3QkQ2QTk3N0M4OTQ2ODdGM0YyNEY3ODZCM0U5RjEyOAotOjEwNTRGMDAwMDNFM0E3NjlGQzJCMkEyNEVGM0UyREY3Q0FCOEZFRUY4MQotOjEwNTUwMDAwN0YwOTdDQTgzRjFGQUE1Nzg1RDcyNjMxRTMxN0U3QzkzMwotOjEwNTUxMDAwRTg2ODY1NDU5MTgyN0U4N0UxRTZCNUM4RjY4MzM5Rjg4QgotOjEwNTUyMDAwNzVFNkQ5MUMxNjY5OUVDREUxMkFGMjVCMzU2QkVGOTJDOAotOjEwNTUzMDAwRkQ3ODhBQkQ0Nzc5MzAxOEJDOEVERkFBNTk1QjlBMTU3MQotOjEwNTU0MDAwMUY0QTg0RUI1QjhBMkY5OUREREVCNEU3RUI5NDMzRkREMQotOjEwNTU1MDAwNTkwRTdDQUQ2MTZFMTdCNTg2Mzk1Q0FEMzEzMThERkM2RAotOjEwNTU2MDAwREYxQUNGM0VBRUYzNkNCMkUxNzNFQTM1QzdCODVFREE0QwotOjEwNTU3MDAwQ0NFNEM5NDhFMDkxQzM1RTc4MThEQThFQTBCRjY0QkM2MQotOjEwNTU4MDAwMkQ2QkYyNkI3QjFBM0U4Rjc2NzYzMjZDNEEwNkJFRTk0MwotOjEwNTU5MDAwMTEyNkIwRjJCOEI4MDQ5QjM1MzY2RTRENTU3QjM1NjM5NQotOjEwNTVBMDAwODFCQzE1ODkxNzE5MTgzMDFBM0EyQUQxMEYzOEYxNEJENgotOjEwNTVCMDAwMUJCQkJGQzZFNjM1NkU4RTVGQzM3Njc5MzVBOUVFRTdCNQotOjEwNTVDMDAwNThCQkIxNENDQzQ5QUNEREU4NjM2QkQ3QTI5Q0ZEMTc0RQotOjEwNTVEMDAwQjQxMzUxMTA1QjM3MzZBMDFGQUIxOTg3OTgwQkYwQjA4RQotOjEwNTVFMDAwQjhBMjEyRkQ2QzMyNzBCOUMwQTQ5RTJFOEY0MkZGMEM3RgotOjEwNTVGMDAwOTA3MzY2MzBGOUMwRkU4NDMzRkU4MTc2ODNFMTJENjJCQwotOjEwNTYwMDAwQ0IyQjlBMzdDOUFCQTU0M0NCQUI4REJDN0Y4QkZEODcyQQotOjEwNTYxMDAwRjI2NkRDQzA3OEQ0N0VDQzJBQzU4M0M3RDExOURGRjcwNwotOjEwNTYyMDAwREI3NEU5ODcyNTdGRDc3MUM2QzJEMjAwRUEyNzkxNjU2RQotOjEwNTYzMDAwQTI5NkM2RkFEMDk5OEI3RUE4NTE2QjY0RThDMkVGRTVCQQotOjEwNTY0MDAwMUQwRDRDN0MwQzhCNzcyNkY3NkFCOERGMzgyOTJDNzEzRQotOjEwNTY1MDAwQzFGQjJCOTFGQjk5MjZEQzcxNTQxMEQwRUY2QjMwOTU3OAotOjEwNTY2MDAwN0UxQTk2RUJBNjY1QTNEMzZEMzY3REY2OTc2QjU2MEEyOAotOjEwNTY3MDAwNDkxQTJGQjE2ODEyQ0FCNTVBOTFFQ0RFN0Y1OTM2M0RFRQotOjEwNTY4MDAwRDdEREZFMDM3QjlDODFGNTA3NUQ5RTg1NjVCRUZFRjIzRQotOjEwNTY5MDAwMzJEMTBDNENGRENCRDc1RkZFODhFQjlGQkY1MUYxRUNCNAotOjEwNTZBMDAwQTcxRjc1NUQ2NEI0M0QwQTg2NUZGRkJGNzYxQzY3REQ4QQotOjEwNTZCMDAwQ0VFNjBGMkUxRjI3REM1MTFENDBGOTc3NUY2MjY4QjlENwotOjEwNTZDMDAwNzJGNkJBMkRBNTc1MUJCNTBDQ0M3NDE2QjkxMjkwMDRFMAotOjEwNTZEMDAwQ0ZCRUVBM0M1NTQ4ODFDMUQ2NTkzQTJBOTE3QzkzNDZCRgotOjEwNTZFMDAwQ0Y1QUJFMDMwNjFGNTc4QTI5MTlGNjlCREQ5RjY1RUUyOAotOjEwNTZGMDAwMkI2MUVCRkY0OTcwRkU3QTY0OTQ0M0I1Mjg4NzUwMkVFNgotOjEwNTcwMDAwOTVGQjVFNzdGQjQ3MThDNjA3Q0EwQ0Y3NkY3RjcxREYwMgotOjEwNTcxMDAwN0U5NDQ3MTY5MzQ3RTgzRkNERkM1RThCNjUxNzNENUM1MgotOjEwNTcyMDAwMkFGMUZENzdFRjc3N0U3OUFFQzBDNjM5NkNGODc1M0YwOAotOjEwNTczMDAwN0I3NTUwRTg3OTgzRkNCRTk1MTJFREM3MDg5RjNBMEI0NAotOjEwNTc0MDAwREIwMzI5Mjc4NzREQzlBQzY2RjU3QkNBMDVEQTQ3RkQxRgotOjEwNTc1MDAwRjBEMkI1RkY0Q0VENDMxNEVGRTg5OUY3REE5NzJGNjJEQQotOjEwNTc2MDAwRUQzRjc5QjEwRjM5ODc2MzAyREJDN0Q5M0Y1MUFGMzlCQwotOjEwNTc3MDAwRERGQkU1OEI1OEZEODMxN0U3MEZBOTZGRDVFMjdDNUQ1NAotOjEwNTc4MDAwNzQ3MkM1QjNERUYyMEFBNDM3ODRGRjNGREVBQzdEOTBBRAotOjEwNTc5MDAwOEQ3NzE4NzIxMjdFN0M1NjcwRjgwRTIzN0M0OEY3QkQwOAotOjEwNTdBMDAwQkY3RTAzRjVDMjQzQTY0MEZFQThDMzE1M0Y4RkExM0RBRgotOjEwNTdCMDAwNUU2OTBBQTQyRjJFOUUyN0E0RkQ1OUU2Qjk3OERFMkQzNgotOjEwNTdDMDAwMTMyN0IwRkUxMjQ2NDgwQkIwRUYwNzJCREZEOTdBMTEzMgotOjEwNTdEMDAwODNGNzhBRUY0Qjc3RTNGM0U0MUVBOTIwNTkzNjM4QkNGMAotOjEwNTdFMDAwQ0VGQjJCNENFRkZCN0VCRDE4OTIxNkUyMUQzNDFFOTdBQwotOjEwNTdGMDAwRjBDNThDQjg5QjVFRkJGNTE4Mzk2MTY2RjNCN0FEOTFDNwotOjEwNTgwMDAwQjhGRjUxRDAwQ0QyRUZFNEIwMDIzODhGQzFFQURGMzhENAotOjEwNTgxMDAwMDhGREU2NDA1Rjk3ODQ3MDM4RkFGN0U5MkI3NUI3M0NDRQotOjEwNTgyMDAwNzRFMDUwRTQ0NDEyQzc5MTM0MDU3NkEyOUU5MTdCOTVCMgotOjEwNTgzMDAwRUU5RTdGQkRDNEUzNDI0MkRDMjQ3ODE0OERDM0EzQzgyRQotOjEwNTg0MDAwODY5OUNEREY1NDY3QzNFM0Y0MDNEMDYxQjdFRjgzREVGRAotOjEwNTg1MDAwRjAwMDdDMkQ4MUM0NzJGNDVCNThCOURDN0ZEODFDRjE1OAotOjEwNTg2MDAwRkEwMzc3REJGRDNDRTZGNEU3ODNBQzcxMTU4MDQ2RUE4QQotOjEwNTg3MDAwQkY2QTU0ODU4QUZEMzc1NTcwM0Q0OTA3ODNGQ0UzQ0RFNwotOjEwNTg4MDAwQ0M2RTg0MjFGNEJBQURCNkJDRDg4Q0YxMEQzRkM2MzlDQwotOjEwNTg5MDAwMzQzQkNFMTFFN0ZBNTNGODE5RjI5MzlEMkExM0M5QUU5RgotOjEwNThBMDAwMTlBQzlGODhFMUQ1NDc0MkE1NUUzQkM2RDE1RjAyN0ExRAotOjEwNThCMDAwNUU4NjFGQzhFQkY3RjE4RDkyNDU0N0VGNDM3QTFEMEVDOAotOjEwNThDMDAwRkU3RTNEQ0ZBRUQ3MjZBNzU0MkQyQjlFRDI0M0VBNzM0MgotOjEwNThEMDAwN0YzRkZDRjFGNjIxNUZBNzk2MERBRUJGMTVERTFDQkEyNwotOjEwNThFMDAwQ0FFQzVGQzk1NzUyNjk4QURCMjVFMjFFN0RDMDk2OTNEOAotOjEwNThGMDAwNEFCRTlBQzI3RDAxRDRDMUJFMDc3OUZCMzBGQjhFRjE0RQotOjEwNTkwMDAwOEM3MDQyNDc3RjhBMDQzQzJFQTQyMjFGQjhGMEYzOEU4RAotOjEwNTkxMDAwRERFRTFBNTlCNEY1RjkxNEM1NDEwNTNENDU3RTNCQjU5OAotOjEwNTkyMDAwOTBGMThGNzA3NjNCRTdEOTZCQjc2RkZCRDNBREFGMTBCQgotOjEwNTkzMDAwN0YxNEE4QzQxRjgyQ0VGODI3Q0IzODhEOTJGOTk2QzQ2NQotOjEwNTk0MDAwOUVFQjI0RjM2RDdDRkFGRTJDMjVCM0YxQzk3RkQ5NzI0RQotOjEwNTk1MDAwNDVBRDRERTg2QTMxQzUxNUM5MUVDOTg0MjMyMEYzN0VDMwotOjEwNTk2MDAwNkY3NEUwQjc1MjE0QTcxQzI5RkMxRjhDMTA3RTY3MUNCMwotOjEwNTk3MDAwMDZCRjJDMTcxMEZDM0U3QzBFMDZCRjY0QzM5MzA3N0E0QgotOjEwNTk4MDAwODM4QzcyNERFN0YyMTU2MDg5RUVENjRCNkU5MEI5QkNGMAotOjEwNTk5MDAwQzhCM0U1MTNDMDJENzFCN0JENzU5REREQ0Y0OEU3OTM0MgotOjEwNTlBMDAwMjc4RjZDM0VDRUI4NkMzRTEzNjRCRTFFMTNFNTIxRDYyNQotOjEwNTlCMDAwNjNCQzBEQzcwRDMyREZFRkQ0RUE4NDFFNjdFQjkyM0I2OAotOjEwNTlDMDAwMDg1RENEQjNFMTQ4QzlBMkFENTdEQ0YyOTFFOEVBODJBNwotOjEwNTlEMDAwMTFDRTYzREVDMEJBQ0NCNkQ3QTU2MkE4NzlDQ0IyRTc0NwotOjEwNTlFMDAwRDEyMUMxOUNENzUxMkYzRUM3RjFGNzJDRjVBQ0NCNkQxRgotOjEwNTlGMDAwMzY3RTNBRkNDRUJBNkNGMEFDQ0JDREY2QkM0NjNBOUZDNAotOjEwNUEwMDAwODU3NjdGQzNDREU3QjY4MTc1NTk2MkNGNjdFOTUwRjNEQwotOjEwNUExMDAwNzFENUJGREFBRUJGRENBRTRGNzZDNzZENzI2OTIzREFERgotOjEwNUEyMDAwMTk4RDUyNjI4NTVDMzAzMDFFQUJGNzE5NzdCRDc3OUFCRAotOjEwNUEzMDAwNEUzNUQ4RjVBRUM3Rjc0MjBEREZGRjU4QkQ5NUVFN0E2QgotOjEwNUE0MDAwNjA0NTFCRDEzRkQwODJCNjAyQjM2MzRBOUFFNzU2RDk2QwotOjEwNUE1MDAwRUQ1NjUxQkJEQUZFRkU2RkIyRjk4M0RBMDU5QTg1NDY0MAotOjEwNUE2MDAwMkI0Q0Y1RDY2MkJEODYwNTdGNzZFQUFERjNDMjdCODEwRAotOjEwNUE3MDAwMDNFRjA2ODJCN0JBMUY4RTVCRERGNUU2QzlFM0E4QkY2OAotOjEwNUE4MDAwQjNFMjBFMjNGNDA3Rjk2MkM5NzY4Q0YzRTc0MUE0MDM2RAotOjEwNUE5MDAwRjMzQzVBRTVENDIzOTgwNzYwNTkzMjNDODZGOTA0N0VEQQotOjEwNUFBMDAwNDM0MDFGNUJCNDIyRjU2RjU4MkZENzYyRjYzNUFFNUJDQgotOjEwNUFCMDAwNTVFQTI5MkM1QjIyMjQ5QUNBMjk5RjgwRjIwNUVBNjRDMAotOjEwNUFDMDAwNTVGMzFCOTg3RjYxQzA3NjU2RDY2MjcyMUFFREYzMTZCNQotOjEwNUFEMDAwMjE2OUUxQkVGODMzMjlGOTY1OTlFNEFCQjZBMjAxRkI2RgotOjEwNUFFMDAwQ0ZEN0I5OUUwRUJEQjQ2RjM5NzBERDEzQkE5NkYyMUZEMQotOjEwNUFGMDAwNzIxOTVDRTg4RjZBQzk4MEVCRkVEMDg0NkVEQzZGRUZCMAotOjEwNUIwMDAwMkQ1MDQ4NEY2NjA2NTYyOUNBOTdEQkE1QTA4MUZENzUyMgotOjEwNUIxMDAwMTc3QzgxRTBEREQ2QzBGMzFCQjY3REYyMEIwNEVGN0Q3MAotOjEwNUIyMDAwMDI1MERDRjYzRTFGQ0Y2RkI4QzdBNzZBOEQxQUY2MTc3MgotOjEwNUIzMDAwMURGMzM5Q0E4N0M4RDFGQ0U1MzYxQzA4REYyNzhBMDk1RQotOjEwNUI0MDAwQkU3Q0QwMkE2RjEwNDg3Qzc1QTM3RERCNTJBMTkwQkUyRAotOjEwNUI1MDAwQkMyRDM2QkQ5MkZBQUI1MDQ5NEZCRDJGMzFCRDgxRjRGQgotOjEwNUI2MDAwOEU4QTIwRjlFOEYzQzMwNkQ5QUREMUQ5MEE1ODU4OEVFOAotOjEwNUI3MDAwMTkwREE4Njc0NjY2MDUzMTA3MDZGMjBCMDE5MzBCMjA0NQotOjEwNUI4MDAwMzIxOUQyNThGNjQxNDc0NzA5N0I0NkRCOTk1RDkyNEY1RgotOjEwNUI5MDAwNzYxM0RDODA3NjZGMDVDMzNCREExMTk2NzkwNEVEOTJCQgotOjEwNUJBMDAwMzBEODdGRDI0MTEzRTdFRDFCMjcwMUZBM0Q5Q0Y1OEREQwotOjEwNUJCMDAwNzZGNEI3MUZEMkVFOEFBNjQ3NThBRjZCNjRGNTIyRUQ5NAotOjEwNUJDMDAwQ0NFRTlGMzE4MjdBMUQyM0FDOTcxRTYxQkQyRTVFNkY5NQotOjEwNUJEMDAwNTg3Rjg3QzFFRDNEOTVGRDg3NzY1QjIwRDM2RTBFN0JBOAotOjEwNUJFMDAwRUQ2MTVGQzZGN0NDNzg1Q0U2MzMzMzFFNzI0MkY2QzZEMQotOjEwNUJGMDAwNDM4NjZCRUZDNDQxODY5QjJGM0EyNUZBRTE5NDg2QUYyQQotOjEwNUMwMDAwRUZFODlCODM3RDU3QzY1RTE1Mzc1OUZCOTYzMUQ3QzRBNQotOjEwNUMxMDAwNDlBRThENTlDMTlGRTNFREY3RTM5N0RCRTU2QkVDRjJGRAotOjEwNUMyMDAwOEFFNTY2MTZGOTNFREFDN0U1NzAyOUZBNDM4NkYyM0I0MwotOjEwNUMzMDAwMDBENzFGREY2MEIwOUYxMTMwNzk2OTY4RkY0OUE2REU4OQotOjEwNUM0MDAwOUIyOUVGNTREOUFBNDI3RUREOTZFMDdFNEQzRjMyMjM1OAotOjEwNUM1MDAwRjI2MTIxOTAxRkQ2MDdBOThFMTI5NDEzNjA0NjE3OEUwOQotOjEwNUM2MDAwMUFFMDFGOUZGOTgyODlGQzdDNjg4QzA0NDIwNUFEOEY4NQotOjEwNUM3MDAwNDFGRUY0MEMzQUM5QTQwQjdGODYzRkU3QUZBNTkzMEIxNgotOjEwNUM4MDAwN0RERTc4RUNERjhBNEU5NDc2Njk0NEZDQTM3NDhDQjA5OAotOjEwNUM5MDAwNUU3QTg0RjVCQTQ2NTZDRkRGMkU4Q0FDNUVDNzA4RUIzMQotOjEwNUNBMDAwQTU0NzU4QUY4QkQ3NkI5REEzRjBGRDFDQkVEQjY4OTY1NAotOjEwNUNCMDAwMzBCOEU3QUE5RTcyRUJEQ0EwRjdGQjQ1NjE0RkI5NkRFNwotOjEwNUNDMDAwQTY0MkZCQkY1M0Y2Q0Y1MjNERTUzNjI2RTczRERGNjdFMAotOjEwNUNEMDAwODdBOUJDQTlBNUFCOEE2RDY1MjNFNjkzRkZGQzBCRjlFOAotOjEwNUNFMDAwQTQ1NDFEQzYyRjVEMjE2NkQ4NkQxOTdDQTVFQTAxNkNGMAotOjEwNUNGMDAwOUYyRkVCODBGOTUzRjkzMUJFNEZCMUE3OTlDRTgyREZDOAotOjEwNUQwMDAwNDc2Q0ZFREYyOUYzRkNDRDZEQjIxRTQwRkJGMTFGN0QxOQotOjEwNUQxMDAwOUUwRDNFMEVBRjMzREZFMUUwNzVFNEVGOUI5MkFENkY3OQotOjEwNUQyMDAwMEQ5NkY3NTFDREYzMzI2NTA4NTI1RTY2NDlCNTU5NjU1NwotOjEwNUQzMDAwMzJCOTI0QkZDOEUzNjA5OUZENUVBQjI0OUZGNkI5RUM4RAotOjEwNUQ0MDAwNjE1OTRCRjJGODlFRERERkEyMDI5OUY0MTI5OUM5MzUzMAotOjEwNUQ1MDAwRDQ3QjE0NDhENDE0NTExQzUxMjQ3RjlGMUMxRTY2REYzMQotOjEwNUQ2MDAwMjg3NEM5QURFMjIxRTBCNkYzNThFOTkzMEU1MEY5M0IyRgotOjEwNUQ3MDAwM0U2RUQwMDA5MkFGMTFFODI1NjMzQTA3QjU5RTczNTA4RQotOjEwNUQ4MDAwNEZEMzA1QTBGNjg2QzBGREU3RjMzNERDRjc2MjgxQkY5MAotOjEwNUQ5MDAwNzVCRjJCQTg1RkMxQkMwN0NFODQzRTQyQkY3MjJGRjlFRQotOjEwNURBMDAwM0JGRkU2RkQwRTAzNkYwMEYzN0IyRkEwMTA0MkNDOUQ1RQotOjEwNURCMDAwREZFQjhCQTdFODI1OUMzRTczNDY5QTA1QkMwOUZEMjVDMQotOjEwNURDMDAwMjlCRTJFOEIwNkY5NDM2MTZDOTRFQ0IyOTZEODA2RDVBOQotOjEwNUREMDAwQkRBRTdGRjQxNTdCRkMyNjhBRDY3QThCMTA2NUNGQzJDOAotOjEwNURFMDAwMzU2NkVGMTA3NDdFMDY4MzMxRTgxRjI5QkNDMUVDMURCNwotOjEwNURGMDAwNjIzRkVEOEY2NzYyQkMzRTBCMUZCNDJBQzkzNEVBRUZFNQotOjEwNUUwMDAwRDY4NDMwQjdFN0U1MTRGOTE5REI4NEJDRTk5QkNCNUQ5OAotOjEwNUUxMDAwRjQ1QkE4NzQyMTVDOTE3MkQzNDI3QkFGMkQ1RjM0NTA0OAotOjEwNUUyMDAwNEY5NTYxNkI4RjMwOTVCNTkzNkE4RDY0MTYzRDYyQTA3NgotOjEwNUUzMDAwQkQ3Q0MyM0Q5Rjk4RTJENUE3OUE4NkExRjc5NjYxRjRGMgotOjEwNUU0MDAwMUU5RjYyMjRCM0Y5NDMyNzJCRENBRUY1MDVCMzdGQkY1OQotOjEwNUU1MDAwNDNBQzJBNTE2NjlFOEQzN0E2RTY3M0ZCMzYxN0RBODU2QQotOjEwNUU2MDAwMEIzOUY5NTBCRTQzRTEwQkFGMjAxRTVBMEEyRThEMEY5RAotOjEwNUU3MDAwMzU1RkQwQkM3OTk3Mzc4QUU2MzQ2NTY4Mzg2NjY2ODNDMwotOjEwNUU4MDAwNjNBNEY5MjA1QUI1NDE3NEQ4QUYyRkM1Mzg1REEzOUVERAotOjEwNUU5MDAwMjQ4Q0MyN0MwRkZFNzc3N0Y5Q0UyRUNDMDNGMTVEQ0YzOAotOjEwNUVBMDAwRTNCMjkyQjkwQkQwNEZFREU4NEQ5MjE5M0MyRUQyN0E2NQotOjEwNUVCMDAwQ0VFM0ZBNTMyOUQ3ODc0Q0Y2MUZDRTIzM0E2RjY4QkQzRAotOjEwNUVDMDAwNUFDQTI4MkY1MUJDRkE1MDUzRkQxRUMwRjhCQzAzQkY1QwotOjEwNUVEMDAwRTNDN0NCOUNENzVDQjFFQUVBRUNGODE4OTkzRDdDMUY4QwotOjEwNUVFMDAwQTMxNzk4OENGMTI4MTU5MTAyMURGNTFBOTVCRjVDMUYxOAotOjEwNUVGMDAwQTdGMkQ2N0E5RDlFQ0RGNUE1RjREQzgyNERFNzIwOUZEMgotOjEwNUYwMDAwQTdEQThCMThERURBRTM4RkM2M0ZDN0FBREM4N0IyODMzNQotOjEwNUYxMDAwRjZGRDZCMTdBMDlFQkNCOUJGQ0NDQzQwMDZGNzY2MEM1MwotOjEwNUYyMDAwNzgzMzNERTI1NkU1OEEwNTY4QkY2RjBFODBFRDU3NTgxRAotOjEwNUYzMDAwQjBDMEY0OTRBRjZBQUFDNEIyRUQ2N0Q4REM3QTFERDVCQwotOjEwNUY0MDAwQkY2RjNDRDhFNzIwNENGNTUzQUU3REVGMTFDNTQ3RkM0MQotOjEwNUY1MDAwOEQ3QjBCNkY2RjM2NjE3RjAxRDkyRUMzMkQwQkJDNjUxNgotOjEwNUY2MDAwMzAxMTlFODBDQUNCRkI5NDBERDQzRjg5MDAzNkRFNEZBMgotOjEwNUY3MDAwOTU1QkY5Nzg5M0I4MUYxRkNBOTYwRTgzNDdFRUQ3MDczMwotOjEwNUY4MDAwNDVFN0YyQjMyQzhGRjI1OTE0QzM0MEY3MkJEQzk3NkIyMwotOjEwNUY5MDAwQzMzREQyN0VFNDI0REZFRjhFNjZERjJGMDdGODY2OThEQwotOjEwNUZBMDAwN0RDRDg2NjNCOEY1NjdFOEIwRkQxMDQ5QjA3MERDNUY2MQotOjEwNUZCMDAwRjAzOEUyREY3QkRDRkI3QzFGMEQyRjRBNDU5Rjg1RTczNQotOjEwNUZDMDAwNDdFNjI5QzlFRjIxQkQ0N0NDQ0VBRTIyNTY4RUQ2NzYwNAotOjEwNUZEMDAwNTlDNEJFMjMxQ0Y3NUU0NUIzRTc5RDI0RkU3N0YwRUM2MQotOjEwNUZFMDAwRTgxREZGRTVGM0FFQTMyRjY2NTIxRTUyMjBDQ0Y5NkZEOQotOjEwNUZGMDAwQTRGMEY2QTI3RTM1NzNBMDFGNzhBMjZBQ0M1MEZBNUE5QwotOjEwNjAwMDAwNDE0MjQ0MjVBQzVGNUVFNEQ3MDREMTE4RUIyRkU3OUFGOAotOjEwNjAxMDAwNzk5RTcyNEVDNTU4NEZGRDg4NTFFQ0Y5RUVEM0NFRjdGQwotOjEwNjAyMDAwN0NGRjRCRDdFOTE3MTlGM0Y4ODlBRDM3M0FFNTFGNjdCRAotOjEwNjAzMDAwQ0U3Mzg0RkQzQUU1RUVERTA1NjIyOTVCODc5NzZCMjUxQQotOjEwNjA0MDAwRDJFRjVFQUU3REVEQkUxOTU4NEU0ODE0QkYzREI1QkNEMwotOjEwNjA1MDAwQzk4NzhDNzQxNENDQzg0Q0Y0ODcyNTI1REI5RjZFOEVDMQotOjEwNjA2MDAwNDc3Q0ZFMDJGRkM5QzY3QjA5RjczRDI2OUYwRURCRTc5MgotOjEwNjA3MDAwN0Y5ODlDMTg4RkU3OUYwRTVGM0M3QjNDQUVFQjYxMUZDNwotOjEwNjA4MDAwRTc2RkIwM0E0ODNFRkREQzA3MUU3OUYwNzM1QkZFMThGRgotOjEwNjA5MDAwNkREQjlCRDAwRjc5NTRFMDY1QTk2REZCMDI4QkUyODMyOQotOjEwNjBBMDAwNUI1QjJGNjM3QUNCOTUxQzg1QjBCNDU2Qzg2QTBGNDRFRQotOjEwNjBCMDAwRkMwQUUxRTM0MzIxMTlGMUIzNzk5QUQ1N0E0QjBDRjM0OQotOjEwNjBDMDAwREY3NDIwN0RENTBGMDlEMkNCRUFDMEFBMTQ1MURGNjE1RAotOjEwNjBEMDAwRjQ0NzcxNkVCOUFGMzA5QkRFRjE3MzdCM0ZGN0MzOTUyOAotOjEwNjBFMDAwQTRFRjJGQURDREY1QTEzMUVGQUY5OUU2NDMzRkVBOTU4RgotOjEwNjBGMDAwMzU5NTNFQjBGNTY1Q0QwNTlGOTgxMEU4RkNENEIyNUFCMQotOjEwNjEwMDAwRkY0RUM0RUIzMkQ5RjQ2NThCNkI1RDk5RjA3QkY2QTkzOQotOjEwNjExMDAwNjkwQzg3MDhGRjUxRkJEQzAzNDA1RkExM0JERTM0Q0RGNwotOjEwNjEyMDAwQ0ZFRDlENzhDOUQwRjY4MjAzQjc1MzVFNTIzQkVENzkyRgotOjEwNjEzMDAwQzQwM0MzMzY5RDQ3MDFCNUFGRjBEQTg4QkJERjkwMTNDNwotOjEwNjE0MDAwMTc4RTYwQkYyRjJGRkYyQ0RGOUYxOTVEQTA1RkYxQzU1OQotOjEwNjE1MDAwRTM5RkY3NTE1Qzc2NTlCRTg3RkY5NjU2NEIxRUY4MTNBNgotOjEwNjE2MDAwRjM0MjlFRjI1NUI1NTdFNjBDQTk3RjI0RkQxOUYyQ0NGNwotOjEwNjE3MDAwQjJDRjYxOEEyNDg3MzcxRjEzNDgzRUU0NENFODRCNjM1MwotOjEwNjE4MDAwOUUyNkJDMkMwMUQ3RkYxQ0ZGRUI1Q0YyQkY0NkM3RjU3NwotOjEwNjE5MDAwRTlBODJGQzA2RjQzREE2MzJFRjlEOTZDRDNFNTYwRTMyOQotOjEwNjFBMDAwM0ZFN0U3N0FBRDlDNTc0M0YxRURGNzhGMEIzQUNFNTdCNwotOjEwNjFCMDAwQzhBQjlCOENGMzk1MTVCMzExQzc2RDJFMTJEMzE4Rjc4RQotOjEwNjFDMDAwQkVCRDc4OUI4QUVCQkRBOUU0QTNFOTgxQkUxODhGRjcxOQotOjEwNjFEMDAwRUI5NjM2MUREOTdGQjA3NjY5OTM5RjIzQzg3Q0JGQzZFNgotOjEwNjFFMDAwQ0ZFMzJEMkRENjUyQUQwNDk3NzFCRjU2ODlGMzBGMTQwRQotOjEwNjFGMDAwNDJENjczQTY4Q0ZFRDdGOEQxNkYxRkIzODBDN0Q3MTNEMgotOjEwNjIwMDAwQTQ1Nzk3QTgyQjI5MEY1NzFFM0I3NEJDMzYxMzZGQjJBNwotOjEwNjIxMDAwMUQwN0NDQUNGN0E0NEQ4RjI1MTUzQkE5REZGN0NGMUI4RAotOjEwNjIyMDAwQkE1RjA3MkYxRjE4MjJGNEQ4RkEwNEQ2NTc4MUNEODdGQQotOjEwNjIzMDAwRTE3RjRCMjlDRkMzNkQyRTdCODZGMDJDOTk5NUE0Q0Y5RgotOjEwNjI0MDAwRkFCNDk0ODlGNUI2OTRBRDI0QkE2QzYxNzVGMkQ5RDBEQwotOjEwNjI1MDAwQjlENTlENzQ0RTczQ0I5Rjc4N0NFMkM5QjZGRDREQTgyRAotOjEwNjI2MDAwM0Y2Q0U5QkUwOTMwQUYzMjE4NEYwM0NBOEYyRDUzNkUxMQotOjEwNjI3MDAwNTQxMTBGNUI3NjAwRjQyMDFEQ0I5REU0OTQwQkQ5RkVFNgotOjEwNjI4MDAwRjA5MDA2Njk2NjQ5NDFBOENDMDQ5NDBCNzkxQTNGNTNGMwotOjEwNjI5MDAwQjkzNzVFMDVCODZFNUJDQUMxNDBENkNDNEZBNzFBMzA3RAotOjEwNjJBMDAwRjRCMzI1Q0VFM0RGQzE1MkIzQTYwOEUxMUUyMzkyMTg1MgotOjEwNjJCMDAwRDAyMUQ5OEVFNUU2NUE5OUU2RDFBQTcxN0NBMERENzU4OAotOjEwNjJDMDAwQzZDOUVGQzIzQzk4MTI2RTc3OTVBMDdGOUZGNUFGN0M1MAotOjEwNjJEMDAwODlDRjVCREY1RTQyN0VBMjJEQjkyRjlCQThFRjVBOUYyQwotOjEwNjJFMDAwMDQ2MzEyNzBCRDk2RjQwNDk5RDExMUY2NUZBNzY1NUQ0MQotOjEwNjJGMDAwRjdBRDYyRjI5QjdFNTdGQzVFRDY3NDAxRTkzNDEzM0YyMgotOjEwNjMwMDAwRUZGQkUwNzI5Qzc3RjMzNDExNzY2NkQxMzdGNkY4NzlCQgotOjEwNjMxMDAwQkMyRTZEMkNCREEyMzhDQjM4Q0ZGOTc1NEY5RTgwRkVCOAotOjEwNjMyMDAwODE0MjcwMEY1NjdGQTA5RTRDN0U3RDM0M0MxNkIxNzkyMQotOjEwNjMzMDAwMTRENDcwN0YyOTY0OUM2MzhENDE5MkVDREJEMTYwMzU2RAotOjEwNjM0MDAwMjAzRjNBRTc1N0M3NTUyNzdFOTU2NDRGMjlCMjhDRjIxNAotOjEwNjM1MDAwRTkwNjNCQ0ZFQUU0NzlBRUFDQjAwNTMyRTg1N0ZGODZGOAotOjEwNjM2MDAwQ0RGN0E2MDMzRTQwQkM1RDcyRkE5MTE3MzA1RkNBNTc2NQotOjEwNjM3MDAwRTFENzI4QkYwQTNBNUVDMEZDQ0QxQjk4M0E4NkU1OUI2MAotOjEwNjM4MDAwOEU0RDUxMzBGRkU3RTVCMTEyRTZDNjIwRkY0NDkxMEU3NQotOjEwNjM5MDAwREYwNjkxRjJDRkRFODYyM0QxMTkyRTNBN0ZDQkRFNzc0RQotOjEwNjNBMDAwNTBCMkEyMUM2OUNBRTVGMzkyQzNBRDNENTIxNEQ3NUQ0OQotOjEwNjNCMDAwQjY3QTlERkMzRDUyOTg3ODVFM0I4NEQ5N0I5NUIyOEYyRQotOjEwNjNDMDAwMUE0OEZFQjVGMzdDMjEyNzNGRjI3MzFEREVGQ0ExQ0ZGNgotOjEwNjNEMDAwNkZGNzk2NkY4NEE1QTM5MDZGNkU2NDBBNUQ5QUY1N0I0NAotOjEwNjNFMDAwOTMzQkVGOEI4RDdGRDRDRkY1ODNDRjQzQUExNUY3OUZENwotOjEwNjNGMDAwMzYzQjNGNjZFREY3QTYyODQ4RDczN0NERDA4QUYwMUM0QwotOjEwNjQwMDAwODYzMzhGM0ZGOEI5MUQ3QTgyRjFBOUVFRTJGRkQ1QjE0QwotOjEwNjQxMDAwMzRFNTI3NjdDRUVGRURERDBCQkE5MkFDRkM5QTJFQTdFMAotOjEwNjQyMDAwQjg5REVEOUQ2NzlCQUY2NzMxRTY3QjU5NzdGQjZDQkRFRgotOjEwNjQzMDAwQzE5QkU3Qjg3QTU3QTU4OUY5NjIwQzdCN0FCRUI3M0Q1NAotOjEwNjQ0MDAwQzFGRkQ5NzZFRjdDODdDMzQ3RTZGQzFEN0Q3MEIwRjlBQwotOjEwNjQ1MDAwMjhCQjg0QUNGOTdFMjFENTlCMkZENUE0RjI3OEEzRDk5MwotOjEwNjQ2MDAwMjQ0MzYwRkVEOUU3QTNBREFBMTQ5RDZGQjYxQUZENUE2NgotOjEwNjQ3MDAwNTM4Q0UyOTMxNEZGQUI2Mzg0ODNGMUJENzI1NUE3N0UwNgotOjEwNjQ4MDAwREUwRjRDNDgwMzlENDM0OENENDZGREU4QUZFRDc3OEVDNwotOjEwNjQ5MDAwQ0FGOUYwNkZEREVGRkM0MUUwNURBQkY2MkFDODlGRUI3NwotOjEwNjRBMDAwRTU4RTFBQTE3OEUwN0M0MEMwNjc5OUUzMThCRUZEN0JCOQotOjEwNjRCMDAwOTY3NDhEMDM0RkJERjYxMUQ2M0I4MDQ3QTA0NzUwQUY3MQotOjEwNjRDMDAwNDYxQ0EyQkY5M0Y2QkVGNUVGNEZGQ0FCODJGQkY3REI5OQotOjEwNjREMDAwOEYxRjVGOEM3MkVFRTYxRjRBQTBCMjdBMjc5Rjg4NDAxQQotOjEwNjRFMDAwMTdFRDNCNjkwNUU1RjJFQUREMTJBRDNGQzg1REIzQUVERAotOjEwNjRGMDAwRjRFNERCMzdEMUZDNkY3RTJBNDJGQkMzRUE2N0ZDRTk5OAotOjEwNjUwMDAwNUFENjdFRjU3NzVGOUIwQThDNkY0RjM2RjZCRDMwMEVGQwotOjEwNjUxMDAwRjFGN0I4QzBGMzE4QUNERUE5NTdCMkY3QUI2NUI4MkVFNwotOjEwNjUyMDAwNUIxRUMyRjUyQUU3QUJCN0JFMUY1QThFRkJCQkIwQUJGMgotOjEwNjUzMDAwRkI1QUVBQjdGMzZBOUZERjI1N0Y5N0FCREM5RTY2RjVDRgotOjEwNjU0MDAwNENGQzZFN0Q0MzQ4NEYxMjM4N0NEOUYyRjJERUZBMDZERAotOjEwNjU1MDAwRjdBM0FDREVFMzRCNjM5RUUyRUE1RDNCOTQyNEFCQjc2QQotOjEwNjU2MDAwN0VENzNCNDRERjBCOUU3QTMyOEE3ODU4QkZDNzdCMUVBQQotOjEwNjU3MDAwRTFFNkE3RkVENDNBQjc5Q0NFM0JGNUQ1QTJGQzkzNEVGQwotOjEwNjU4MDAwNTNGOTk0QTlGNkYxM0M3OEVFOEY1OTQ3MUNDQkVBN0Q3QwotOjEwNjU5MDAwRkJDRDRCN0ZDM0JFOUY4ODRCMTA2MDIyRTU0NENGN0Y2RAotOjEwNjVBMDAwMkEzRkM0NzIzMjlDNjJBMjhDRjVFRjdCRDVDRDg3RUI3QgotOjEwNjVCMDAwNzdCRDQ2RTc4RTM0OTEyOUIwMTdFMTc5ODg4Q0VGMTlDMQotOjEwNjVDMDAwRjU5OTlFQUJBMDNDNUNERkI5RTkxRDk0OTdFQjc3QkZEMgotOjEwNjVEMDAwRkQ2QkE0QkJGNTIwQkZFQUU2RTcxM0Y4OEYzMTY3Qzc3MAotOjEwNjVFMDAwQjMzNkE5NUUzRkREMjkzODM4OEIxQzAwQkJGMkIzREEyNQotOjEwNjVGMDAwOEI0RTNDQ0JFMUVGOUI5RjNDRjUzMEVBMTE2RjNERjNCNgotOjEwNjYwMDAwNUYwRkUzRkQwQzZCRkVGQzNGMEY2MzVFMkJGQzI4QTBDRAotOjEwNjYxMDAwQTFEQzVBRkZGODJGQTJFMEMyRkZBM0I2N0MzOEY5OERBNwotOjEwNjYyMDAwN0ZGQkZBMDMwQzBGMjc3RkU1MjdBQzlEN0NFRUNEMDk5RAotOjEwNjYzMDAwNzg0RkM3QzlBN0ZGNzcxNEVBMUYxQjlGNUIzODFBRTk3OQotOjEwNjY0MDAwNkNFMzc3MTY4QzFFRUExQzI4RDI2RERBRUY1RURGMzQxRAotOjEwNjY1MDAwQkZERjYwOEY4MDlCMjBDMEIzRjYzMzYzNURFMDYwOUYzNwotOjEwNjY2MDAwODI3QUVGN0IwMkY0NkRDRTY1RUYzQkZGQTRBMEZFRjJEMQotOjEwNjY3MDAwODIwOTdEODhBNzdEQkI1RjdCRTEwRTU2N0U5QkFEOTMzMwotOjEwNjY4MDAwM0ZDQjNBQjFGOThGMTM2OTdGNjNFQ0MzOUVFQjc2NUYyMgotOjEwNjY5MDAwNzlDNUM1RTVGOEY0MTlEOEZEN0FFOEEzN0RFM0FDRjUzMgotOjEwNjZBMDAwM0RDQUQ2Qjc3QzYwN0QzM0JGOUY4MkQzMEFFMjdGRkRBRgotOjEwNjZCMDAwMTM2QzNEQTdFMkJBQjJGNTlDN0FGNjdBQkU4REZGOThDQwotOjEwNjZDMDAwNzNGNjdBRUU1M0JERkVCODUzQjBFNjkxMDdGMEUzRUVGMQotOjEwNjZEMDAwRkNBQ0Y2QURCMzlFNkJCRkYzQTkyMUY1NzI0NzNFMEMzRgotOjEwNjZFMDAwODc2NzNBREZDQkUwRkE4QTZBRkU1QzQ1QkU3REU2OUJBRgotOjEwNjZGMDAwNUY3RjIwQzZEN0I5OTYyMUU2RTQ5M0E3MjZFMDYxOEQ5NwotOjEwNjcwMDAwREZGOUZBQUU0NTNDRjQzREU3RDc1MDhGNUFGRERDMkY1OAotOjEwNjcxMDAwODlFRjRFN0VFNzI1M0FEN0MzRkVBMjAyREJFRjRFNDI1OQotOjEwNjcyMDAwRkZERjExNjBFNTc1MDIyRkFDRDVGQjJFRkQzNUVCNzc1MQotOjEwNjczMDAwMkRFQkMyMzI2OEZEMkVGRDc1MzlBRTlGREE0N0VCOTEyNQotOjEwNjc0MDAwNUU1MkEzQTNGQzREMTdEMEJDRDdBNTM5N0ZBQzRCNzdDNQotOjEwNjc1MDAwMkY0MzdGNzYyNkRFMjMwMTI3OUY3MDYwNUREMTVGQkFDRAotOjEwNjc2MDAwNkVGN0YxNEI5MUZFMDY1QjRGNjdGRTFBQ0U3RjM2RkI0QwotOjEwNjc3MDAwRkVBODk3N0YwN0U1NTc3QjdENEZFRTc4NUY0MUZEQUEyNgotOjEwNjc4MDAwRUI4NzhBMjYzMjNCRkZBNEFGNEYxOThCRkJDREQzOTIwOAotOjEwNjc5MDAwODZFNzhEMzNENzdEMDBGRjhENTlDRjFENjczRTMzRTlFNgotOjEwNjdBMDAwQzMxRkM4MUVCRjc2RjAzNDFDQkYwRjNGQkY4Rjg2QkYwQwotOjEwNjdCMDAwNTNGNjNFOUM4OUM3Qjc0RTY3REYwRkNFMDk3MDdCNkVEQwotOjEwNjdDMDAwMUQ3NEQ0QTA4QTk5Qjk5RkY5MjA2NThEMkIxQTgwQjdDMgotOjEwNjdEMDAwQjU1MzIyMzlGRkQ2MkVFRUE3Qzk5NDE3RUIwNkIxQ0ZEOQotOjEwNjdFMDAwQTYzOUUzRUNFOTlFOEE3MkVEQURCRERGQjdFOTkyRDMzRAotOjEwNjdGMDAwRkRCQTI3OEUyQjk2QkQzRkE0NURGODVEM0Y4OEJGRkI5OQotOjEwNjgwMDAwMjJCQkJGRjVDRjY2RUY2RkZEMTNFRjY0RURFRjg0NkMzNQotOjEwNjgxMDAwNUU4REYwOUZFOEYxNTE1RUQyODk0RTI5QUI5RDNCMjlGOAotOjEwNjgyMDAwRTBGM0U4NURBRDkxNTlBRkU0QjA3NjUyMzQ0ODc5NTc2MgotOjEwNjgzMDAwNEQ4REU2MkZEMTRGNkExREYxRDk3RTAwRTM3Nzk4NkYxOQotOjEwNjg0MDAwRDUxNDA5RDIzOUY3QTZFODhENzQ1RjkyRDM1RjczMDYyOQotOjEwNjg1MDAwOUVFNDc4ODJFQzI3Mzk5NjI4RTczMUIwQjRDNzhFRjFGMAotOjEwNjg2MDAwMzE4MjcwQzMwREIyNTU4ODdBRkZBMUEyMzc2NUVDRjc2QgotOjEwNjg3MDAwMzBFQTkxMkVCQkZFQjAwQzJERjlFNTc4MkU0MjMwMUE4RAotOjEwNjg4MDAwMjA4QjdGMjNBM0ZGQzQzQzA5NzRCNzlGQjA2QjhDRjhBNwotOjEwNjg5MDAwMDdENkRFN0Y1NDRBMjM2QUVCMjBENTQ1RTcwMjBBQTFEQQotOjEwNjhBMDAwRjNCMTJDRkQzRDU0QUY5M0ZENUM5NEI4OEVGQzNGRkVEQwotOjEwNjhCMDAwNTRDQTQ0N0RBRDcwQTM1NjJDRUE4MzhGM0IzRUU1OEREMAotOjEwNjhDMDAwNUY4RjY1OTRGRjA3MUNFNzgwOEZGNDQxRDhGNUY4RTNFQwotOjEwNjhEMDAwOEY4RkUyNUIwQUVBRTUyRkUwOTNDOUJGNEI1NkU5ODU0QgotOjEwNjhFMDAwNTg3RUM4OUUzN0UzMDEzQUM3MzhERTRBQzgyOEU3ODQ5NQotOjEwNjhGMDAwRDgxMjE5RjU4Qjg1QTk4NEJDRDJCNTlFMEI2M0MyNThGQQotOjEwNjkwMDAwREM0RkQzODNEQzAzRjVCRDAwREYzRjFCMUFBRUEyM0M5NgotOjEwNjkxMDAwRjYwN0JGMjQxMjVEM0YxOEI4QUMxMEY5NkM3RkVFRUM5RgotOjEwNjkyMDAwMzBGQUQ3QkFEN0NFM0EzODk5QzEzOTJFMkMwMTlBOUM3MQotOjEwNjkzMDAwRkJDMjQzOUZEQjdDRDhGNjJGRUNCNEVGMUY3QUQ0Q0U5QQotOjEwNjk0MDAwMkZGRkJBOERCNzVERjVBNUY0N0NCQ0RFQTBFRjRGRDQ2OAotOjEwNjk1MDAwNTc1MEI5QjNCRTg2OUVDRkQ0MjdFODdERjQ4RTYwMTIxRgotOjEwNjk2MDAwRTk3Mzc3RkQ3MjdBM0YwRURFMTE3MEZEQkY1QjlGQTQ2NQotOjEwNjk3MDAwRjJBMzgxNUM4MjdGRTI5RDIwMjZEOUZCODU4ODhGRjA3RgotOjEwNjk4MDAwQzBCQzFENzhEMkI2RERGREJEQzA4RjlCOTEyRkZBRjE0MgotOjEwNjk5MDAwOTg4MUVGNEJBMDQ3NTBEMTdGMTUxMzc0NUNGN0JBODBGNAotOjEwNjlBMDAwQ0VGMzVDMzNGMDNCQzFERjI3NjA1Q0FFRUU0RTlFMEY1MgotOjEwNjlCMDAwRjFCMEUwM0RFRjcwQkYyREZGQkY2REYzRTkzQkQxRTRENwotOjEwNjlDMDAwOTMwMUQ2Q0ZCQjM1Q0I0QTQ5MUYwMkFEMENFOUU2NjEzNgotOjEwNjlEMDAwMjE3MUQ4MjgyMjNDN0JDRTlEQUNDRTRCN0UzQkUwRjI5MQotOjEwNjlFMDAwMEY0RjY4RTc3NkZERjY4MDJEREYzNjgyODhGNDM2M0U1RAotOjEwNjlGMDAwMDUzQUQyOUIzM0VGQkQ5NTdBMjFDQUM1QkQ4MjQwRUJFMwotOjEwNkEwMDAwOERGNDU2RUFBMkI3N0VGQTBERDg3OUM5RjFFQ0ZCRjhGRAotOjEwNkExMDAwMDBGRDcyRkU4RkNGMkRCREE3MUFGMUIyNDEyNDNGNDg3MQotOjEwNkEyMDAwMTM3RTcyQjVGQkQwQTYyMzY2Qjc4ODE2RDJGMzJBOTFERgotOjEwNkEzMDAwRkNCOTEzOEYxRDE3MjYzMEY4NzRFRDlCMDFCQ0I3MkJFMgotOjEwNkE0MDAwM0UwMTZDN0Y1MzY3MDBFOUVCQzE1NURDQkZGOEI1NjNDRAotOjEwNkE1MDAwRkMxQ0QzQTk4REM1NEIyNkIzRkE4QjE5N0UzMDE4OTUzMwotOjEwNkE2MDAwQjdBOEM0RTNCNzc0Q0UyRjdDNEQ0REU0Njg0M0Y4QjdBNAotOjEwNkE3MDAwMzJGM0RFRUU5Rjc4RDcwNzM5NkM5QzcxQzc0MjNBOUU5RAotOjEwNkE4MDAwODdCOTY3RTI4RkJBMTU1NjFFREIyQjkwM0Y2OTZDMzhDOQotOjEwNkE5MDAwMzUxOUQ3QjNGMkZGN0Y2MzRDQUY2QjFEMUU1ODlCOUExRAotOjEwNkFBMDAwODg3QTYzRUJDNDZGMDlDODA3NjM0RkZGNThDMDdENjRFMQotOjEwNkFCMDAwQTI5NjdDMzNDMEQ2NjE5QzZDOUYxMzk2NTNCM0QxMkVBMwotOjEwNkFDMDAwQjgyNjJGRjE3QjVDQjc0NDYxRkFEMzQ4NEZBNzZBMzZFQQotOjEwNkFEMDAwRkUzQkY2RUZDNDIxRUJFQUY0RENDOTJFRjk5MDc5OUU3NwotOjEwNkFFMDAwRTJBMUQ0RDBGRTRDNjdGRTBGRTFGQzg3QThFN0NDREYyMwotOjEwNkFGMDAwNTlCRjUzMzVCMTM1MjgxNzMzRjE5OUQ5NkZERUEyNjVFNwotOjEwNkIwMDAwNDM4RUZGOTA3RDhGMTg5QkJGM0ZFOEEyQ0ZDMjU0QUY0QQotOjEwNkIxMDAwOENFRDlDRjY4M0M1NUQzM0U3REJFRjI3MUE2MTlDQjZFRAotOjEwNkIyMDAwRDMwN0Y5NDgxNzRGRkY3MUMyQjcwRjAzOTI0RTQyNDI4NQotOjEwNkIzMDAwRkZENERFNDA3MjRDNzAyNkRFMUY5N0EyMzI5MzhFOTRGMwotOjEwNkI0MDAwQ0Y3RTQxMkVFN0RGMDc0NjdEN0QwQ0YxOUQ5QzJFQTI3NgotOjEwNkI1MDAwQkM4RjExOEVENzAyODk0NDI1RUU3Mzg2Njg2NERCMDdFQgotOjEwNkI2MDAwQTYwNDM5RERDRjgzMTRGOTQ3QzVEMDlENDNDN0Y5MEI3RgotOjEwNkI3MDAwQkQ3MUZFQUQ0MDkzMDBBQjRCQjVFMzFGMjA2QkU4MEYzQQotOjEwNkI4MDAwM0IwMEQzRDEwRjk5MUZFNEZDNUUyOTczRkI3MkM2MDE1MQotOjEwNkI5MDAwN0Q4N0M0RkQ1NkQyOTI4ODBCN0ZCNkRGQ0VDN0JCNjYxOQotOjEwNkJBMDAwNzBERjA5OUE4RUU3QkVBNjc1MEIyRTdFN0QzRjk0OUMwMgotOjEwNkJCMDAwOEZFQkE2QzRCOTNGRDIxNzRCRDI3OUNCODU1MjU4MjQ1QwotOjEwNkJDMDAwN0Y2RTA3OTdGRjc1OTA1MENGRTM3MTE5QzA3OUVCMTA3NgotOjEwNkJEMDAwMTc3MUJGN0Y2ODIzM0ZERkFFNkIyMTgyRkJBMTk4NEUwOAotOjEwNkJFMDAwRTUzQTVCNEZGOUIxNEQ0N0RGQjdFNUZFRjc2QzdBRjk0RgotOjEwNkJGMDAwMEVDQTdERjYyQ0U5MzVGN0U3MzBCOEJFNkRDQkZGQTc5RQotOjEwNkMwMDAwNkRGOUZGOTQyREZGNjcxRUVEODU2Rjk0OTMzQzM2MzAzMAotOjEwNkMxMDAwRUZGOUNCREJFMjhEMzhDRDI3RUI0REFBQjdCMzdFMTU2QwotOjEwNkMyMDAwM0RGN0U1OEUxNkY3QjA3QThGNkUxNDc3MjIzRjNGQUFCNAotOjEwNkMzMDAwOERCRTFDRUZCQjRBOUJBMjIxQjBDNjBGNTlEQjE2NDQ4OAotOjEwNkM0MDAwMTlGQzNCNTQ4MUUyNjcwRkQ3QTdBOEREMEU1NTZGNTQ5RQotOjEwNkM1MDAwMzE5RUMyQUM2NTBCQzlBMEFFODdDMjFFOTVCRkVCRDNGNwotOjEwNkM2MDAwNkE1OEJEQUY3NUU0NUQ4RTcxQjg3QjZCNjQ2QUU3RjBGRQotOjEwNkM3MDAwOTEzRTczMDMzNjg3Njg5RTNGODg2Qzk1NTdEMEE1OUVEQQotOjEwNkM4MDAwODM3NkZBNDY5MUZBRjk0QUUwMzNFQTAyRjYxQzNGRkVBRgotOjEwNkM5MDAwODg3QTk5OEU4QjcxREM0Q0IxRUYwQjE4OTI3MTFFMTVBRQotOjEwNkNBMDAwQkRCRDE2OTY0QjVFMEY1M0JFRjZBQzU3N0FFMTY5NTZFMgotOjEwNkNCMDAwMkU1QTE1QTFGMjc4Q0JDQjE3NTM3NkY3NUExRDBDOEVBRQotOjEwNkNDMDAwRjE2RkYxRUZENTc5QkZCNzNBNTlGRDlDMEQ1MUVBQUY5RAotOjEwNkNEMDAwRUFGNTVFMDFFOUQ5NTdFRTNEN0ZCNURERjdBQjdEMTFGMQotOjEwNkNFMDAwMzY3RUVDNjA0MjQwQkNFRDE1QjQwNTk4MTI2MjdEOUE4OAotOjEwNkNGMDAwOUZCRjE5N0QwMEFBRjA3RDNDQkE4OEQ2NjE1QkIwODg0MQotOjEwNkQwMDAwRThFNzZCQ0Q0N0UyMzcyMTlFMzZDNjlBRDFDQ0Q5Qjc5QQotOjEwNkQxMDAwNzEwMzlENEZGMDZGRENDOEY1QTAxNEY3N0Y4RkJGNkQzNgotOjEwNkQyMDAwQkZGMDc5OTc3QzI4NkM5NkIzRkFFREI2MDVGRDNDNEUyMgotOjEwNkQzMDAwQjI3MTU5NjIzMjA3NkY3RjE4RjVCRDEyRUVBRjJDNkEzRgotOjEwNkQ0MDAwQTlGNkU0MzUzOUYxOTEwRjg1RTRCNjIwRDk0RDNDNEVEMgotOjEwNkQ1MDAwMjI2QjI5N0E3RkIxODRCQTIyN0I3REJCQzhGNUE0NDQxQgotOjEwNkQ2MDAwNEZDMEVEODdEMTZGRTNGN0IzNjVDMkIxMzMyODEzMUM3MQotOjEwNkQ3MDAwQ0Q1NkY1MkE5NDE3NzdDRjU0RTQwMEMyMzFEOUJFOUY3RgotOjEwNkQ4MDAwQzU4RTQzRjZFRjYzNDI3MjY3RDBFM0I3RTc3MDhENjc1NQotOjEwNkQ5MDAwQTgwQzIxREM1RDNEOUZFRTY0RkQ3QzkwNzJGNjMxMzNFMgotOjEwNkRBMDAwNDg3QUQyM0QyMkYxQzdENjcyN0UwRTcwOUZGMTZFMTdERgotOjEwNkRCMDAwREU3M0UxRjA1MzhCMjExMkZGNkU5Mzg1QjRDMEZBRDlENAotOjEwNkRDMDAwNTY1RTlDN0IxRUQyNEYwQzc3NkY5QUFGOEE3ODJFOTFCRAotOjEwNkREMDAwN0QzQzg3MDNDQ0JERTgxN0Y3QTM1RjlDQUQ3N0M5QjFCNQotOjEwNkRFMDAwRDA3MTkxRkM3RkRFRkNFRjIyQ0JCQkZFNjI5REY3REMxNQotOjEwNkRGMDAwREQ3OEE2RjRCOEYzOTU4MTExNEQzRjlERDFGRTVBQkRDMwotOjEwNkUwMDAwRjczRjkwMUY5Njg3ODhDRUMwMzJBMzk1QTMzMDdERDFERgotOjEwNkUxMDAwRkU5MzZBRTlGQzczNDlDNjM5ODMwNzZDRkJGRDYxRkI4RAotOjEwNkUyMDAwMUMyMTlDQkUwNTUwNkUzRDYwOUZCRjdFNjA4RDE4RDRCNgotOjEwNkUzMDAwMTk1RTlFQjc4RUQwQkUzOUJFQUVBQjkyMDIzMzlBREZEQQotOjEwNkU0MDAwOTM1RkVEQkY1MzZCQzRGREI1MjhFNUNEMTNBQUNDQzg0NQotOjEwNkU1MDAwMEIyQUY5MkJGM0FDOEYwNUJENzZFQURFMTM0MTAzRUY2NQotOjEwNkU2MDAwQzM0QjFGOTUwQ0Q0NjdCRjdDQzcwQzkyN0ZENjZBQUUwQwotOjEwNkU3MDAwQjdBNDU3RTUzRDgwRTc1REYyMDUzMEYwQkREM0FGNjNDMQotOjEwNkU4MDAwQkZCRTFCQ0MyM0JFNDlDRjYxREY3Mzk4NUM4OTc0MkVEMwotOjEwNkU5MDAwNUE4NUVCMDUzOTVBNjMwQ0NGNDNERjBFREZDMkZFNTcyQwotOjEwNkVBMDAwRjFGNUFGMkMwNEJBNUZBNzMwMDY3NENFOTkzRDM3OUYzOQotOjEwNkVCMDAwOEJGQ0JGNTFDNDk4Mzg5QzQxMzk4RjcyNUNFRDc5MTFCRAotOjEwNkVDMDAwREZFNzVFMkVEMkZEMzk0NUNERDY3OTM4Q0ZCRDczQzcwOQotOjEwNkVEMDAwOEU0NUZBRDgxQUU2RTc1RTlBODQxNDY4MDg2RjAxRTdDRgotOjEwNkVFMDAwODcxRDkxMkVDQTA3QkRCQjQ2ODQ0NkE0Mjg4NjRCMDM0NgotOjEwNkVGMDAwRkI1OTE5REM0OTc5MkMwOEVGNENBMjNCRDJCQjMwNDYzOAotOjEwNkYwMDAwODFGQzY4NUQxRkU0RkJDRTY5RUIzQ0Y0MkI0NzQzQkQ3RAotOjEwNkYxMDAwOURGQjU4M0ZFMTM2QzVEOEM5RkFEOTUxRTlCREE3NkVFNgotOjEwNkYyMDAwNTI4OEVGNzc4MTkwRTBDNEY3MDMyMUY2MzRCNzAyRTU4OQotOjEwNkYzMDAwMkRCMkI5MTA3RjMzQkVCMjgwRjYwNThERUMyQTI3QkU4NAotOjEwNkY0MDAwMUZEREJCNDgyQzlBQzI5RkM1MkVGRURENjlDQkQ5QjQ4QwotOjEwNkY1MDAwOURCN0YwQjBCRDdGMzhGQUM2MDNCNkREQjBENURFMzdEOQotOjEwNkY2MDAwOEFDQzJCMUExNUE0REI1NTMwMERGMTU0QjJBNjUzNTgxOAotOjEwNkY3MDAwOTlDREJFNkZGN0NBRDU0QzdFOTk5OEM5MkYyOUVGMzlBNAotOjEwNkY4MDAwRDU3MUFCOEEzRERGMjNDNkY5OUVFRjE0OEFDMTc1NjdDMAotOjEwNkY5MDAwRkIzN0UyQjkyRDUwMjZBMURFMzcwMzEyQTY1QkFFMENGQgotOjEwNkZBMDAwQjZGRkU3MDdDREE5QTE4RkEwRkY0NDQzODkxNEVBOUY0QwotOjEwNkZCMDAwOTlGQUY3NDVGNkJBNUMxQjQ4Q0NDMUY1ODhDRTVENEUxMAotOjEwNkZDMDAwNzkzQzZCMDM4OThCQTg3RjM5MkRBMDNDOUQ4N0VENjJBRQotOjEwNkZEMDAwNTlFMUE1RTRBRjExQzA1QkZENTFFMDA1RDlBMEYzNUMxOAotOjEwNkZFMDAwQjc0QkNFN0RCNkRFRjM1QzkwNzE3RjZERTZGREI0RjNGQQotOjEwNkZGMDAwRkY3ODI3REQ0RkRCMjIzMDQ1MEZDQjM5RjZGREI0N0UxRAotOjEwNzAwMDAwN0UzRjZENEI4NERCNUQyRDc2MUVENTNBMUIwRkQ3ODVGOQotOjEwNzAxMDAwRjg3REFGNkI2QzNBOUQxRkNBN0VGRjkxRTNGNzRBQTFFMgotOjEwNzAyMDAwNkNDMDdBQTNCM0RGM0I4NjFBMTVGNjM3N0Y1Q0Y2RUZBOAotOjEwNzAzMDAwQTkxMDhGM0JDRTlGMzhGNDM4MUI3MDFDRDZDRkFDQTA2NAotOjEwNzA0MDAwQjkzNkU0RjJBRkNDMDg5OUVCRERFNTVCNDM3NjdFOTE4RgotOjEwNzA1MDAwOUMyMEJERDI5NEY5N0U1ODE0MzQzNzg2NjZCQUYwNkIwMgotOjEwNzA2MDAwM0ZGMzE2OTVEMzc5QkU1M0Y2NzkzRUQ2NkVCQjQwNzg4MgotOjEwNzA3MDAwOTVCNDkxRTBEREQxRkY1QjA0RkQxRTkyODNCRjYwN0E4MQotOjEwNzA4MDAwNUY5NkY1NzgzRjE4QjVDNDlDODE3ODk0QTMxRkVEMEFFQwotOjEwNzA5MDAwNzE3QjkyRDFEQjI2M0U4RjM0RTU0MTg3NDFCRjA3RUZGQwotOjEwNzBBMDAwODExODg3Rjc3MEVCRTg1NzM4RjZGMEJGQTJCQ0JEQjg3RgotOjEwNzBCMDAwQTcwNkY1QTdCNTNGOTBFODdFQkJCM0YwQjU4NkQxOUQ5NgotOjEwNzBDMDAwMkIxRkM1NzkzRkY2ODM3MTY0MDc0Rjk0OTJGNzg3NUM1NQotOjEwNzBEMDAwRjZDN0Q4NTU3RDBBRDIzQkMyNUZDREUxRTdGOUQzNDI2RQotOjEwNzBFMDAwRkEzQzZFMEYwMEM1NzE1QTZFOEE3QkYyMDkzM0VEOTEzRQotOjEwNzBGMDAwM0NCQ0U3ODBFNDhBNDI3QTVEMjY1QzhFM0RFMTk0MzNCNQotOjEwNzEwMDAwQ0YyMzFDQjJFOTA4RkZGNDUxNzg0RjM4NzA2NTU2MzYyQQotOjEwNzExMDAwMjVFNEFGOTk5MEE0RTc2Q0QwRTlDOUVDOTY0RTlDMDdBMgotOjEwNzEyMDAwRTMzRjFERTE2QzBDNERCODA4RTdGMTc3QzREQjhGNDJGQgotOjEwNzEzMDAwMzNGRkYxRjBFNkQwNzE1MUYyOTI3RTNBQ0U3NkZGRjU1MAotOjEwNzE0MDAwRkRBMTI4QzlEQkJBNjMxMUQyRkJBMzdCQkY0ODc0MkQxNAotOjEwNzE1MDAwMzFCQTBFQzQwNkYyNjVFQUMwQ0VBMzBGNDMyN0VBQkREQQotOjEwNzE2MDAwNDVDOTdBM0ExNzdBOEFEMTMxRjYyQjY5RkMxQ0FCMENFNwotOjEwNzE3MDAwNUEwMkUzMzY1MjhDRjM4NzRGMkVENTQ0MERFM0IyOTY3NAotOjEwNzE4MDAwMUZGMzBFQUM2MjMwNTBENkEyM0ZEMjBENkY3OTM4RjlBMgotOjEwNzE5MDAwQTYxQjhGQjcxRkJCODdFNEVEQjU4MUU0MDk1Q0NGREI4RAotOjEwNzFBMDAwNEIyQzNGNkE3NjJFMzlGQzk2NUIwRTBCMTBENjkxRkY2NgotOjEwNzFCMDAwRTY5RkU2RkI2NTY1NTI5NzkxMUUxNjMwNEU0N0JDMkY0MQotOjEwNzFDMDAwODQyNDk1MkYwMzhCOUU4QjIwNERDRjRGRTA5NTQ2QTRCMgotOjEwNzFEMDAwQzdEOUU3MTZCQUFFMTZEREU3MTZGQUYzQjlDQjlEN0MzMAotOjEwNzFFMDAwMEUxRUE3MkFCMEU5MTA2QzNCRjVGOUU1NEIxQjE2QjI1MQotOjEwNzFGMDAwRjFEOUUyOUIxODhGRkFFQTcyOUVDRkUzOUYyREQzRjk2MwotOjEwNzIwMDAwRDU4MkRFRUI2QjMxNEUwNENCQjg1RUU2RTQ0MUU0RDVDQgotOjEwNzIxMDAwN0FGNUI0QjNFRUI3M0FGNkZCNjNEODJFRjM5QzlDQTM5MQotOjEwNzIyMDAwQUY2NUVFNUJDRTMzNTM1RkNCMEI2NzNGM0YzOUQ4QkVDNAotOjEwNzIzMDAwOTMxOTU3QThDMzdGNzJGQkQ1QjZBQjEzMzlFRTdCRTMyNgotOjEwNzI0MDAwMzM5Rjg3RUFGQjlBRjdCQkYyQ0MwRkUzRkQ0NjU5Rjc3MQotOjEwNzI1MDAwMDExRUVGOERFRUZEN0RFREIyNzJCQTVGQ0VDMDk0QzkxNgotOjEwNzI2MDAwOUVGQUFFRjlBRjRGMUFCMDgzMTNGMzcyOUY0NzdGNzQ0MwotOjEwNzI3MDAwQTIzQTc3QkFDNEYwQkUzOEZFNUVGM0ZFN0M4MDI1NjY4MwotOjEwNzI4MDAwRjdGQ0Q3NURGM0VDRDExOEI0NTlGNDg0RkVGMTRDREY3MAotOjEwNzI5MDAwODdFRUZERjc2RDg1Q0I5NzE2N0JCQzg4MUQxRjZCMTNBMgotOjEwNzJBMDAwMkQzRkYxQUJFRDdGRkI0MzIxQjdEMzFERkIzRURCN0NENAotOjEwNzJCMDAwOUIwOTVGQkQ2MUE0ODdDMUU2RkJEOTMwREY0RjQ3MkQzNQotOjEwNzJDMDAwMzdFOEJFRkMyNkZCQkVGQ0E2RjE0RUZFOTZBMUExM0UxMQotOjEwNzJEMDAwNzk2MzM4OTdERjU3MTAyRUExRjg2QTUzRjcxQ0YyMjcwRAotOjEwNzJFMDAwMTcxQ0Y0OTEzRjdERDRCMkE0NjBCOUY2QzU3QkVCQjkwRAotOjEwNzJGMDAwRkZGNTJCNENCRkMzN0M5MDJENENBRkMzRjJERUNBNTlCNwotOjEwNzMwMDAwMkFEQTBCQjc0NkE2NTNCQzc2NzNCREUxQzkxNzcxOUU0NgotOjEwNzMxMDAwNzgxRjVERDJFNURGNkI0QTU0NjkxOEVGNkRBRTlEQUUwNAotOjEwNzMyMDAwQTJERDIxN0RCMjlDQ0FGMjc5RDMzQkFBMTgzRjdGNjZDOQotOjEwNzMzMDAwRUJENDRCMEIzMDJFNTFDNkVGMjNCQjhFOTUxQjRBOThENgotOjEwNzM0MDAwMUQxREU2RkJFQzIxRTNGNTMwRTJBOTJBQUMzQkY0NDMzQQotOjEwNzM1MDAwRUJFODVCOTYzNDdEMjgxN0UyNUExNUU2Q0EzOEVGQzE5MAotOjEwNzM2MDAwQTYyRkY2OUVGNEVCQjc5NUU0NEQ2MTM2RkY0M0Y2QkRDQwotOjEwNzM3MDAwNTg2RDRBQUE3NDQzMTk5RThCNjcwMjA3RkRDNDJBRjcwOQotOjEwNzM4MDAwMTMyMjFEMzRDRjE4ODA3QjgzOERERkI5RjZCODRDMjBEMwotOjEwNzM5MDAwODk0RkJCRDY0Rjg5RjNGNTZCMTM2MTU1QjZGNUI5MzNGOQotOjEwNzNBMDAwQ0NGNTlCNjZDREQ0ODZBNDIzNERGRUQwNzM3RjY4NzkzRgotOjEwNzNCMDAwOENFN0U3QzcxODFEQjlGOEY5NkM3QUU3RkM1NDFFNEU0NAotOjEwNzNDMDAwMzQ4NzBCNTAyRTQyNjk4QUU2MUYyNkY5NDNFREE0ODFDQgotOjEwNzNEMDAwN0IyQ0UzNjFCMzFERUJGRDJDRDdDRTg3MkVFNDc5RDA1NwotOjEwNzNFMDAwRUM3RDZCMEU5NkU1MTRDOTc3NDcxRjZDOTNCOTNFMzc1OQotOjEwNzNGMDAwNTI3RDMwNkZEMTQ2RDIwN0RGNjVBQzQ1RjZEOTI3MzdDRAotOjEwNzQwMDAwOTJEQ0RFRTg1M0U5RkVCRkJERjM2NDhBNjc0NUNGODFCNQotOjEwNzQxMDAwRUJEQzc2OEIxNEIxRUZGRjhGNzBCRjNDRkU0RTQyN0FFRgotOjEwNzQyMDAwMzJENzdCRjA5QzQ3MzQwNDc0Q0VBNTZGM0NDRjJGNkREMAotOjEwNzQzMDAwODMxRDM1RTcxMDdDOTMzNEY3N0U1NjM5OUVGQjE5RUU5OQotOjEwNzQ0MDAwQUUwQUFFNzJGQjFCRTZFNEYyN0M5MUZEQjk5NUJGNDczNAotOjEwNzQ1MDAwM0EyODBCQTdBQjkwMzUyRkQwQTAxN0YzNjlBMDhBOUZDRAotOjEwNzQ2MDAwMUYxMzBBRjkzOTFCMUYxODJBRTdENzZBMERFRjBEMTVFQwotOjEwNzQ3MDAwMjA0OUU3Q0YwNjVEM0ZGMERFMkZGQUI4OUM2RTBDMjI2NAotOjEwNzQ4MDAwREU2MkRDQUYxM0Q5MkU1MEQyOUVENDY5NzZFMUQ5OUQ0RAotOjEwNzQ5MDAwQzZEQ0E1M0YwODEzQkUxMzA2RjI3N0Y3QUMyMEQ5N0JGNAotOjEwNzRBMDAwRUY3NTJCNjQ3RkJFNzcxM0ZDMDZGRDQ5RUZGOTcyQzBDMAotOjEwNzRCMDAwNjI0QkY1MjM1MUZDQ0Q1MzZDQkU3RDhDNTk3NzYyRkUzNwotOjEwNzRDMDAwOTdDNkJGNEZEQjJBOTBCRkU5NDcxRjA2QzcyMUJEMUJFOAotOjEwNzREMDAwNTExMEYxRjcyQzE2MzM3RDgyMjcwOTQyMDhFM0IzRDEwRQotOjEwNzRFMDAwMDVEMDc1MDlCNkVGMEUxM0ZFN0NGMTlGQ0U3RjdEMDZBOQotOjEwNzRGMDAwRUQzRjIxQjEwMkNGNkI4OTBGRTJGQzlGODk0MzFFQjY5RAotOjEwNzUwMDAwOUZGMUJGNTUxMkZBQUYxQzdERTgxRTJENzkwNEUxOUQ1NQotOjEwNzUxMDAwMERENkFBNkVENkZFNkU4NUYzRDdERDc5NEExQUUzOTRBRQotOjEwNzUyMDAwRDMwQjQ0RDI0M0MwMTc0QTRGNjJERjE3MUY3OEJEMUFFRQotOjEwNzUzMDAwRjMzQjE3NTc0Q0MzOUEzODNFQURGNzQ0MkQ3OTBDRTkwRAotOjEwNzU0MDAwQUY1QTVCNTI5RENCRUE5NzFGRDU0OUZFNUUxQUJGNjVDNQotOjEwNzU1MDAwM0Y5NjY3MURFMzY1OUY5RkVCRjFBOEM3QjhDRjA3MkM0NwotOjEwNzU2MDAwRkU2MDAyQ0RFQkNEMzBENzY3OUJFMzY2OEYyOTBDQzk1NwotOjEwNzU3MDAwNTcxOUY3RjI3QUNGMTczODc0QzBCNjc1MURGM0QyRTlGMAotOjEwNzU4MDAwREYzQUQxNDVEMjI3MEVGODlGQTBDMkIwQ0Y5RjM4RjQ4MgotOjEwNzU5MDAwNjAwQTFGODUxRTc2ODdGOUJFRDA4NkY5NjZCMTgxN0NBOAotOjEwNzVBMDAwQjMzNjVCN0YxQjY5QkU1OTI2M0ZFNTJEOTI2OTFEREUxMAotOjEwNzVCMDAwNjVGQTE2REVFNzcxMzY5RkRDNDJGNzdGNjZGMjkzMDNDOQotOjEwNzVDMDAwRTdFNkYyQkMxOENBNjE4NzZGQjREOTc3OTI1Q0Y2NUZDMAotOjEwNzVEMDAwQUZEMDdEQTYwRTFGMzlGQzMzMkJBNzlGOEZCRTgyRjI0MgotOjEwNzVFMDAwNjI1OTU4NUZDODUzMzQ0QzcwRjNDOTk1QzNGMEQ1NjJFMwotOjEwNzVGMDAwRThEQjFGNjNFNUM1MzI1ODM5NEMwNDFEOUFGM0JCOTI5MgotOjEwNzYwMDAwMDkyRTNFQzlDNEU3RTI3OTAyQkNFQTkxODNCQ0VDQzIxMAotOjEwNzYxMDAwQjdENjdGMEY3MDE2M0I3OUIwNzUzOTIyRjM3MzBGMEUxMgotOjEwNzYyMDAwOUZFMkVGQjFFMEY5QjE3NkQxMDBEQzhGMUE3MzU3MUFGRgotOjEwNzYzMDAwMTEzNjRGQjkzNjc3MERGMkMzMTYyMTkxNDI3RTg4Q0NCMAotOjEwNzY0MDAwN0UyQjc0MjNDM0ZCN0JBMzk4MTY4OUZFNDM3REU1NTNGMQotOjEwNzY1MDAwQzRFRkFGODRDODJFQkI3QkQ2NkE4QTRCQkQ3NzUzNzIwQQotOjEwNzY2MDAwMjJFRTJGOUIxOERFNUZBNUZEM0MzRDVBQTQ1Q0RCREVCRAotOjEwNzY3MDAwRDEzQzZGNDI4RkYzNjczMkNFREY4M0ZEM0Q2RDk3NEQ3NgotOjEwNzY4MDAwQkI1RTJGRDU2M0VCRUI5MTlCMDdBMjlDMEYwRTQ0RjlEOQotOjEwNzY5MDAwM0VCNTQ5RTk1MDkxMUVGQThBNTRDRDlEQUY3Qzg5N0Q1MwotOjEwNzZBMDAwQkZGMENEMTEzQkFFNzhCQTQ5QzdGOEM0Q0QxMURFRUVCQwotOjEwNzZCMDAwREVGQTRFRDI1NzM2RDVFRkExNjc3RTZEMUEzMDNGMkVENwotOjEwNzZDMDAwNTg2QUU5QTg1N0E4N0Y1RTIwRTAzRTBCRTdGMzc4M0JCNQotOjEwNzZEMDAwQkU2RjcwRTk2QjlGQjJFNUI2OEFGNzAwQjE3OUFCOERFQQotOjEwNzZFMDAwOTZFRUJFNzc1NjE1ODVBQ0Y3MDNGRDI0Q0FGREJGNkEzQQotOjEwNzZGMDAwMjNEMDc3NzVFRkZGQTNCQzg0RkMxMjQzRjgxQzk2MUJDNAotOjEwNzcwMDAwM0JFODc3NjMwMjVERkM3REFDQzQxNDZFNzBGNTFCQUI4NwotOjEwNzcxMDAwRURGNEVDOEZBQUQ4MkI5MzNENTQwNzlBODVDNjlERENENwotOjEwNzcyMDAwNUI4RDdFQjdGNkE1QzEwRUNDNTdDRUE0MjNGQzdCRDVDRQotOjEwNzczMDAwNDUwRkVBOUZBRjI0QkQwODhFNzBCREI0QkE1ODI1RkEzNAotOjEwNzc0MDAwNkRBOTUzNzZBMDVGRUYwRkIxMkFDQTUzNkZCMkYxOTZCRAotOjEwNzc1MDAwMzkxRjhDQUIzMzREOEZGQzY0OTY5RkM3RDdBREM5M0NBNgotOjEwNzc2MDAwQkU4RTY1OENBRkUzMTNFM0VCRjhDNEY4M0E3RUM3RjgzRQotOjEwNzc3MDAwM0E5NkJGNTU2RjUyMTlFM0VDNThDNjM4M0I5NjMxQkU2NgotOjEwNzc4MDAwOEU2NThDQUJFMzczNEZGRDJBN0FGRUEwM0U0NURGOUZFQQotOjEwNzc5MDAwQURBRkEzRjIyNUI2REM4NDUyRkUzQjVGRUQ1RjU0NENFNwotOjEwNzdBMDAwQ0M4QkZBQTFCRDNFRkJDQ0E1QUI3RThFN0U0MDg4MUE2OQotOjEwNzdCMDAwQjg1RjA3MEUzNkJFRjIxM0JCNENGNzVGQzc4QkYzRDEzMQotOjEwNzdDMDAwMkYwOTMxMTEzMDlFRDAxQURGQzY3NENDODFGOTA1RTQzRgotOjEwNzdEMDAwN0I0MUE3NzhCQUI1MEFGMzE5Nzc0NjBFNUQyQTMzRkRDNwotOjEwNzdFMDAwQTEyNDdFNEI1NTFFMkJFRjhBMUM2REM1RkNEMTczRjU3MQotOjEwNzdGMDAwODZFNTNCNUM2NTNEMzI3REY1RDNEQTQwNzk2MkQ5MEU5MgotOjEwNzgwMDAwMzlDOEJFM0Y3OUY3Q0JBRDI4MDcwMjMxQUVGNzdEMkZERgotOjEwNzgxMDAwRjJBQjRCMUIxODQ5NzQxNTMzQzUwNkU1NTg5MTkyNDZENwotOjEwNzgyMDAwM0FCRTAxRDc2OTEyQ0U4M0VCMkQ5RjgwQTYzOEU2RUZEMgotOjEwNzgzMDAwNERENDk1RTlDODdGQUM3RTE3QTdGQjkxRDVGRjIxMDZGMwotOjEwNzg0MDAwNjE2NjlFREQ2RUE4N0E2MkY5ODhFQUQxRjlEQkMxRUE0OQotOjEwNzg1MDAwRTE3NzYxODg3RTVBQTA0OUVCNjFCMDZGRjFGMUZERDUwNwotOjEwNzg2MDAwMkFFMEZFREY3NjFGRTdGQkY2MDA3RjRFQzhFMUY0Rjc2MwotOjEwNzg3MDAwNEVCNEVBQUUyODdCREUxNUU1RUJEQjFFRTBGNzBFRjQzNgotOjEwNzg4MDAwNEQxMUU5Rjc3OEEwNEVGODI3RUNFNzBCNjM0MUMzQkMzNAotOjEwNzg5MDAwQzdFOTUzOEFGMzUxRkYzRjYyRDNDM0E0ODkxMUJFNkY3NgotOjEwNzhBMDAwRkZCMzRBRkJGNjY1MTM5RjZDQ0U2M0U1NDlGRjZBMTg4OAotOjEwNzhCMDAwQjgwRjZGMDEyMzg4RjdCNjVBNUI0NUNBMjNGQTY2RjlGOQotOjEwNzhDMDAwMzk3OTRCNThGNTBCNjY3RTI3MEZGNURFRTlCNkRDNDlCMgotOjEwNzhEMDAwREJGNjQ5NDNDQjhEMTNEMTNFNzhFRjI1MkVGNzhFREJCNwotOjEwNzhFMDAwRTNFQ0YwRjVBNDY4M0Q2Nzg2RTkxQzA1NDAwN0U5MjU0RgotOjEwNzhGMDAwMEQ3MTk5RjJCRkM0MzFGQ0E5RjhCNDZCRTg1RUNDMTZFNwotOjEwNzkwMDAwODVFRTYxNTJGRTM0NUIyNTdGRUEwNzdFRkIxRUUyMUU5OAotOjEwNzkxMDAwRDI1Nzk0NDA1MkNCNjVFRjNCMkM5MUZDMEY0RDVBMzAxRgotOjEwNzkyMDAwOERGNzYxNkQwOTRGQTdERjY1QjBDQTY0OEE4NzZEMjkzRAotOjEwNzkzMDAwRTM3MTlENTBFNDJBQkFFRkVBMkJERDAxQUFERjEyNTY2QgotOjEwNzk0MDAwMjkwRjM4NURCNkZCNDA1NTBDOUZBMjg2RkI3RURBNUNBMgotOjEwNzk1MDAwNEFGNzUzNUE5QUE4NTEzRTMxRkIxNzdENUYxMzIzM0ZENAotOjEwNzk2MDAwMEY5RDJCQzZFRjZCNzgxQ0MyMzdGQTIwOTU5QjNFQTU2NgotOjEwNzk3MDAwNTFGRjYwRTdFRDkzRUEyNUUyRUY0NDI0QkFCREY3Q0Q2RAotOjEwNzk4MDAwRjZGREY0NDJGNDgzQUNFNkU3NTJBNjZBNEJCQjlGNjM3NAotOjEwNzk5MDAwREY5QjREMzU1MUNDRjhBMTQ1N0I3NzZGMDhDQjJCODAxMQotOjEwNzlBMDAwRTJBNEExMjlBRjM3ODZCMEZFMEQ5QUMxRjNCMEY4MzkzMQotOjEwNzlCMDAwMDhCMEVGMzc2RTJFNUJENkZEMUZEOEZGRjIxMDRDMzJBOQotOjEwNzlDMDAwQjA3RUI1OEFGQzBBQ0RGMDAyREU0NzU1NjhFQjMzQTFFNAotOjEwNzlEMDAwRENFOTAyRUE2MzJEQjU3NEVEMjY4M0NGN0I3RUEwMzkwNgotOjEwNzlFMDAwRUY3MjE1RTk0NjVBOUM0N0UzQjQ4MEE5NjI3REFCNTYxNQotOjEwNzlGMDAwQTY3REIxMzBBQzc2QTFERkEwRDBGNjNCMzhGMjIwM0ZCNwotOjEwN0EwMDAwRTUzQTQ3QzBGRTM3NzY4REVDMzk2NzMwRkEwNjZGQjkzNAotOjEwN0ExMDAwMjBFMzdFREQwQjZERkFDOUM0NUJFNjNDRjM2M0NGRTQ4MwotOjEwN0EyMDAwMjIzQ0Y5NkJFODQ0QzQ1OUYwREYxQjlCQkUwNEU3MzVFOAotOjEwN0EzMDAwNDZEQjJCRUMyODI3OTM0NkQzRjE3RTcxNDgzNUI4RjMwQgotOjEwN0E0MDAwMzBGRTVBNzhBNzk2MzVGNzIwM0Q0Q0Q1NjVEMDE5NUVBMwotOjEwN0E1MDAwMkU4NEJFNDZFQzdGOEI0REZGRUQ0NURFRkRGOTg4NkQzMwotOjEwN0E2MDAwRDczMDNFRkQ3Qzc0MjZDNjMzNDRCMDVDRkQ2M0JDQzM5NgotOjEwN0E3MDAwNzJDMTczNEU3QjlFQTczQ0E5NjNBQ0E3RkVFNEVEQzUyMwotOjEwN0E4MDAwOUVFRkU3QTVDRkY3N0NCRjYwRDc3NDRGNzk0QUU3NUNEQwotOjEwN0E5MDAwNEZGRDBCRjc1NDc5Q0FEM0JBMkVGN0Q0OUY3MTYwQTk2MgotOjEwN0FBMDAwQTczQ0IzRTcxQTRGRkREOUFGQUNGNDdDOUZEM0JCREE0OAotOjEwN0FCMDAwRjNGREEyREY2REYwOTQyRkVFQkJDMzUzREZEMUVCMzNBOAotOjEwN0FDMDAwRjdDREVCQTM3Rjk5M0U4RkJGRkJFMzNFNEY5QzY5MkYyMQotOjEwN0FEMDAwOUM3NTZGQ0U5RjlCNzQ4Q0ZGNDE5NERGOTMyQkUzRkVDQwotOjEwN0FFMDAwQ0VDQTFCQkVDOEVEMkU3NUJFQTFBM0JDQjlEQUE2Q0IwQgotOjEwN0FGMDAwRDU3OUU2M0E5NEFGOTU1MTk1RjYwOTM5Q0NFQkM5RTFDMQotOjEwN0IwMDAwNEI0OTFGOTlCMDlEQzlBOTE5NjQ4RkY1N0ZDNzM4NzQ3NwotOjEwN0IxMDAwN0JCRDM1QkZDNEU1QUYwQTY4MUQ4MEY5NUY5NUQxMUFGQQotOjEwN0IyMDAwQkEyRkQwNjkyRjZCMjY2MDVFRENENTUxOURERjczQzMwMQotOjEwN0IzMDAwQUM1OUJBMDc0MDY3RUQ1REYzNjJGNjFGNUQxREQxQzcxMgotOjEwN0I0MDAwRUM0M0Q0RUJGQkVEM0YzOTg3RTJCRUNDRkUyM0ZCRDAwOAotOjEwN0I1MDAwMDg3MjdCMTA0RTRCRjREREY4OEE0MEY3RjMzM0ZCOEU0RQotOjEwN0I2MDAwRUNDMzY3QzJDQzNFOUM4NkY2NThFRjE2OTQ0MzdEM0YyQgotOjEwN0I3MDAwOTMyOThFQzhGRUM4RkUyQjY3RjZERkU2NUNCNzFGQkNGNAotOjEwN0I4MDAwQjcwODlGNjlEMEM2RTJCMzVCRTkxMjQ3MTc5MTNENzgwOQotOjEwN0I5MDAwMUZEMkYzNjczNkJFQjQwQUZCOUQ1MkNFRUZENTZCMUZFMgotOjEwN0JBMDAwNTUxQjQ3M0RCOUJEQTg5M0Y4QTRBRjQ4RTZGQjkwOUM5MAotOjEwN0JCMDAwMjg3NUZCRjc3RTZDQUY3NzQ4RkQyNkQ5QTE2QzFENDg3MAotOjEwN0JDMDAwMkUzQkVCQjA0NUU4NERFM0ZEODVENjE3ODNFNEVGOUVGMQotOjEwN0JEMDAwRjA1QkZGMTFFNDM3QjU1ODFEODdGOTdGQzYzRUM1QzQ3OQotOjEwN0JFMDAwRjFFRUI1RjE1Q0FDNERBQkMyOUY3OTJDODkyRkQ5OEJFRQotOjEwN0JGMDAwQ0Y3Mzc1QTY4RkIwNjc2OUU5M0Q3QkYxRjk3NDk0OUZFNwotOjEwN0MwMDAwNUYzRERGNzhCQTBBNjU4QzNBOUZGQkFERTVBOTRBQkFCOQotOjEwN0MxMDAwNTE0MDdGMzM4MzIzOEJEREQxRUY5Rjg4NkVFN0Y3RkRFMwotOjEwN0MyMDAwOTRDODZGMjBGREExRDY3Rjg2NERBMTMyNEZBNUI4NzFCMwotOjEwN0MzMDAwMDBFOTQyQTAyN0QxNTM0MDBFRDFGRTEyQzA0M0E4NThGQwotOjEwN0M0MDAwQUUxMEQyMThFQTQyRkQxNUYzNDEyQkYzQjYxMzFEMzhERQotOjEwN0M1MDAwN0EyREVBQkI0OTZFMUZGRjE4RjExQUFCRjVBRTdGNDhDQgotOjEwN0M2MDAwRkQxNkUxQTlEOTNFRUZEQzlFQUIxRkFDNjJFM0I2MTc2RgotOjEwN0M3MDAwMTRFN0ExQ0YxNkZEMjk0QjVDRjI2NzlGQkRFRjNFOTI0MgotOjEwN0M4MDAwMjM3QUU0Q0Y2Q0NDNTE5ODM5QTAxNzMxN0VEODJFOUU0MAotOjEwN0M5MDAwODNGMDI2MjhCRTFFMzgyODkxM0QxRkI4QjM4MzdFNUYyRgotOjEwN0NBMDAwMzVBMDU5M0E5MEZFNkZFOUQ4NkY3NUYxNzJGMkZGRkQ3OQotOjEwN0NCMDAwNEY2QzNBRTlDMTgxQkExRjY1QzU1QkEwNTcwMjczQzYxNAotOjEwN0NDMDAwRTBGODhDOUVGQjAwRTkwMzMwMkFBOEUzM0U1QjE3MEIyQgotOjEwN0NEMDAwOUEzQkIyRDgwNzlGOEQ3MEZGRDlBNjA5OEUzRjMzNDFEQQotOjEwN0NFMDAwRTc1RDVCRDBERjE2QzZBRDREMTUzMTRGRTdENjlGMTU2QQotOjEwN0NGMDAwRUM3NERGMDc3MTZCMDFGNzRGMEUzNjdFODBEOTk5NDkxRQotOjEwN0QwMDAwMTc3QzlCNThCRjI4Qzc1QjRFMkZBOUExRkI1NDcxOUJDMgotOjEwN0QxMDAwMjlDN0YzQTA2NTNCQzg0RjZGREI0QjlGQjVGMTdBNzM2MgotOjEwN0QyMDAwODRFMzcxODIwMjBCNzZBMDNDQzk2M0ZBMTE0MzY5QTUxMgotOjEwN0QzMDAwRUQ1NzcxRkMyRkYxMUMxRUQ3MzcyQzkwQjg1RkNFRTdBMgotOjEwN0Q0MDAwRUM1QkUyMTlCQzg3NDYwNzVEOTk2NTFGRjEyNzE1OTgyMgotOjEwN0Q1MDAwRUY2QkVDRkZCQUYxNUNFMDM5RURBRTdEMEU3MDNGRjBGOQotOjEwN0Q2MDAwOTYyNzZGRjc5NkNGNEI3QkNCNEM4QjdFMTlGNTgwNjVCMgotOjEwN0Q3MDAwMDBEQ0FGQjFDQkZCM0QwQ0E2MEZFMzI4NjM5REZCRjMwQQotOjEwN0Q4MDAwMTNGQzlDQTBDQTIwNDBGQTJFRUI0Qzc3N0Y4RENEMkZBMAotOjEwN0Q5MDAwRTFEQzczOTk3MTVGRkU5NERENjlEMjVGQUVCMDdGQ0Y5NQotOjEwN0RBMDAwMjNGMzFFRjdCMUY4RkIxRTUzNjk1RTlFN0Q3NEJBNEYzNAotOjEwN0RCMDAwMjI3RjAzRkE4OTBDOTc5RjY4QTJBNjdCRUMyQUM3REY3MwotOjEwN0RDMDAwOTMyOUQ3ODNDN0VFMDFGNjg1RUNGNUE0MUZFRjQzRDVDMQotOjEwN0REMDAwQ0FEMEFGRDA1QTc4RDc2RjhGOTcwRkY4NTc1QUU1RDREQgotOjEwN0RFMDAwOUJDN0M5N0ZDOUY0QUYxOEY3N0ZBMDVGRkFENjlGRERBNAotOjEwN0RGMDAwRjZERkM3NUQ3RUNBNzdBMkM5QTlFOENGQjg3RjIyNkYzOAotOjEwN0UwMDAwRUZEQzk3RUE5Q0U3N0JCNzQ2N0U1RUQwMzkxQzQ5MTdDQQotOjEwN0UxMDAwMUNCNzk3NUE5NzcxNzUyNTNEMDZGRDQzOEU3RkM1RjFCNgotOjEwN0UyMDAwMjM1QzkzNjdERTg1N0NCN0M1Mzg5MkRBQzdGQUFERkE3MgotOjEwN0UzMDAwOTUxRkIwOUY4NUQyQzEwM0Y1MjhFRkM2Q0I5NDJGQTIyMgotOjEwN0U0MDAwQ0Q1RUYzNDgxMEZEOTlGODlEOTVBQjhBRjREMUM0MUYxRgotOjEwN0U1MDAwMkZGQUM4OUZEMDY2RjNCRDczMkVENUYxQzc3Q0MyQjY4QQotOjEwN0U2MDAwMDMyRUNCNzFGNDI4MkI2ODlGQzcwOEEyOUU3Q0MxMkVERAotOjEwN0U3MDAwQjY4NjlFRkQ5MEZCMDMxREJGREY5NDRFRUZGN0YzRjEzNgotOjEwN0U4MDAwODgzN0Y5M0Q3NzUwN0U5MzMxODdFNzM3OEQ1QTlFREVFQwotOjEwN0U5MDAwOEJFQjdDQTFCRENFMThCN0FBOUMzNTEwM0YxREJEMjIyRgotOjEwN0VBMDAwQkQxN0Y1RDBBOTc2OUU1MkQ5OEJDRkQzNEZGOTgyNTQwNgotOjEwN0VCMDAwMjgyMTdEOUQ4RkY5NDlBQzlEQjE1RkY2OUMwNzE5MDU3RQotOjEwN0VDMDAwMDJFNUY5OEMzQTJBMTk2OUQ2Q0ZENDY3QkRERkNCQzA1OQotOjEwN0VEMDAwNTUyRTQyRjhCQ0U1Q0NCODE0NTNCN0RFQjk1RUMwREYwRQotOjEwN0VFMDAwNDU0RDA5MjhDRkI2QUU2MDM2MDIyQkFGQ0FCMUYzOEIzMQotOjEwN0VGMDAwQ0U4NTczOTE2RTE3NEE2MTAzRUZDRERCRjAwQjg5RjJFQgotOjEwN0YwMDAwOEJGREM3MjdGRjEyRTNBM0YwMTJDRkE3RDRDRUUxRjE3OAotOjEwN0YxMDAwNTZFREE3OTJDMTI0MjA2ODIxOTgzNjJEM0MxMEM3RkE0RgotOjEwN0YyMDAwRUExOTAzRUZEMEVGRjc4RjNEQ0VENjFERjdBMTI3OThDMgotOjEwN0YzMDAwREQ1RkUyNDMzQjVFQTM3MjI3QjNGQkIxRkMwQ0IzRkJGNgotOjEwN0Y0MDAwRjFCOTlCRDlGREY4RkVCQkNDRUVDN0YyMUU2NkY3RTM5NAotOjEwN0Y1MDAwRjMwN0NDRUVDN0Y3Q0YzMkJCMUZDQkZCNzMyQkM5MUY4OAotOjEwN0Y2MDAwREY4M0Y3MTk0REM2REZCNURENERGOThDNkRBQTRGNDNBMAotOjEwN0Y3MDAwRkFDOTk0Njc5NTk1QjdBQUNCMTg3RTM3ODcxNzUyMUMxNAotOjEwN0Y4MDAwQTU2QTIxQ0ZBNzZGQ0Q1OTQ4RjY3NEJGOUYyRUMzQ0ZFNgotOjEwN0Y5MDAwMzlFMEI3RUIxNTFDQkYxRDFFNkQ4RURCRjY2Q0JGRkYwNQotOjEwN0ZBMDAwMzM2OUQwQkQwNUMzRjc2MzNBRkQ5MEZGRjRBQzdFNkMzNgotOjEwN0ZCMDAwM0ZFQURCNUZGQ0Y1RDc5QkQ4QTdCNTMzQjdCNTA3OEI5NgotOjEwN0ZDMDAwRjEzQzRGOEE3RkI3RjMwQTMzN0Y0RjZCRURFRTA2Q0E2MQotOjEwN0ZEMDAwRjM1M0M2MUM0REUxQkFFRTJFMEY5M0JFODFCRkI3ODQ5QQotOjEwN0ZFMDAwNzIzQkQzNEU3NEVDQzM0QzdEREM3OTY2RUU4Nzk5Nzk5NQotOjEwN0ZGMDAwMzAxMTVCMkYxOTJFMkZFMzZFNUY4QUUyRDY1NjAzOTM2MgotOjEwODAwMDAwMkZCODVGRDRBN0U3QkZFRTNCREI2RjNCNTZDQkNCMzgzNwotOjEwODAxMDAwN0ZDQ0YzQUVGQzA3NzgzRTVFM0IyNDM1RjdGQzlENzNDNgotOjEwODAyMDAwMEY2NEYzMTU3M0ZGQTFEQjZGMUIyQzQ5RDNCRDBDQzE4QgotOjEwODAzMDAwQjA0OUZBQTJDMEY0NDhEMjJCQjUyNEM1MDE1QjA3RjlCOAotOjEwODA0MDAwRERFQzM3NkQzOUQxMzBFNjJBREFFRjVCNUZGNDkxQkVCMwotOjEwODA1MDAwNTU2REU3QkYzNThENTFBOURDMzQ2NjU2OUNGMjI2MjM1OQotOjEwODA2MDAwQjNENERFMkNGRDZDODgxNDBGQjlCRjRBNkNGRkQ3ODdFMAotOjEwODA3MDAwRDhGRjI1M0YzRkVGRDVCNDc3OEU4QUU3QTJEQUMzMkIyRQotOjEwODA4MDAwN0JEMDZFNkY4RkM3QzhGRkRGM0Q2Njk2RTdERTcxMjkzNAotOjEwODA5MDAwNUU0MUY3NTQ0ODYxQUU2NzRCNzE5NUY0NkMxOUU3NUYyOAotOjEwODBBMDAwMzY1MERGQTlCNzJGODdFRjIzOENDREM5OEYxOTA4NzdGQQotOjEwODBCMDAwNTAzREJGOUMzMEQxREZFMjhGRjFGQzYyQkZDNkUzODU0QgotOjEwODBDMDAwQzExMjExRDQyQ0U3MzA5RUNERTFFN0FDREFDQjkyMUE4NQotOjEwODBEMDAwRkE3NURBRTMzMjlERTc2OEQ3QTcwRjE2NkYyNUJERTg3QQotOjEwODBFMDAwOEYzOTgyODc3RTlCNkNCRjQzRDMyQTg1RjRDMjQ0NUQ1RgotOjEwODBGMDAwQUU1NjlENEZFNzExRkE5MENGREJDMzhEMkFDNjVGOTUzMAotOjEwODEwMDAwMzFFNTQzRjZBQjY4QkNERkZGMDM4MzdFM0QxRjAwODA5MwotOjEwODExMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkNEN0Q1OAotOjEwODEyMDAwMEQ2MDE0RDVCNUYwOUQ5REQ5OUYyNEJCQzkyNEJCOUI4MAotOjEwODEzMDAwRUNFNjhGMDkyNDFBMzRFMDI2MjQzMTY4QzQ0OTA4M0M0RgotOjEwODE0MDAwRjQyMTJFMDIxQTVBMkExQjEwNDUwNTA5NjhFQjZBQjU1QwotOjEwODE1MDAwRDk5MDgwMTBBNDA2N0YyQTRGMkNERDU4QjBGNkFCRDZGQwotOjEwODE2MDAwNjhFOTJCQUY0NTVFNTBFNEY5ODM5QUFBNTVCMEE4MDE5RgotOjEwODE3MDAwQUNENTNFQjUxMUE0QTVFQUZCRjhDRTM5NzcyNkQ5OTkzRQotOjEwODE4MDAwQ0MyNjQxN0RFRjdCRDgzMkRDOTlGQjczRUVCOUU3RkY1QgotOjEwODE5MDAwOUU3QkY3RDQyOUY4NzMyMTYzNkQ3QjUyNTQ1NjA5Q0YyNwotOjEwODFBMDAwQTU4RTc4NEExMTYzRTE2ODc5NzZDMzI0QzZCRTk1MTUxOQotOjEwODFCMDAwRkUyMkMzQ0Y5OEMzQjM0ODhFQjkxOUIzMzNBNjc2QzM5MgotOjEwODFDMDAwRjM5NEQ2NEU3RjdBNjU4MTMxQTgyN0NBQkY5OEYyOUU3NAotOjEwODFEMDAwNzdFODc3RkQyOUE2NkY2NjExNjhDRjhBQTVGN0ZCNUM2MwotOjEwODFFMDAwOENEOTE0MjY5Q0IyNDE5OUI5RTVGN0NGNjZGNEU3OTQ4RgotOjEwODFGMDAwODg3RkY3MDZDMjlFRTRGRDc4NUNCRjlDRjJERUE0QTFGNgotOjEwODIwMDAwRUQ5Njk3RjUzOTQ0ODVCMUY1REIzQUMzMENDQTlGMEI1RgotOjEwODIxMDAwNTBBODQyQjg2MzZBMUVDQ0VCODY5RDJCNTlBNDhDQjE0MgotOjEwODIyMDAwOEQ1MkFGNEIwNjM4MzY3RTI5MkMwQzk3MERFRDdGMzFFMQotOjEwODIzMDAwQ0VBNzBBN0I5NTYyMDgyN0ZDQjE5RDNBMDdGRTU2OThBNwotOjEwODI0MDAwRTJBODY2MkMwRkRGOENDNTI3RkYwRUEzRUMzOTA1RkRENQotOjEwODI1MDAwOTdGNzQwQjk1NDgzMDdGRTNGRTkzOTYzQjlBQUQ3NTg2NQotOjEwODI2MDAwM0VGNzgwQjFDQzU4QzgxRTlFQzBEOEVCMkREMEU5OTlGRQotOjEwODI3MDAwOENDRDM5RjRFMTIxOTZDRUQ4REM1OEU4RDlBNzdDOEM5NgotOjEwODI4MDAwRTVBQUFFNzA1QzY2NkMxRTBCM0RGQjM2OTRGMzFBRDMwOAotOjEwODI5MDAwNTg0RjA4MDZCN0IxQTVCODJFMzBDRDM3OEIwMUJFNDY3MgotOjEwODJBMDAwNDZCMEIyQkNBNUE5OENCOTA2RkI5RjJGNjdEMjNBMzU2MAotOjEwODJCMDAwRjYzNUNENjQxMzE5RkJFMUFENkQ4QzQxM0ZCMTdBMjFFOAotOjEwODJDMDAwQkUxREUwOUZEREIwNkRGNjM4NzgzRTUwNjkyQjc4MTgwMgotOjEwODJEMDAwMUI0NUVDRUZFMUZDNUNEMEQ5Mjk5ODZGQTY2REU1OThDMQotOjEwODJFMDAwQjE1MDNGM0MzNTRENjg4MzdBM0YzQ0VGQUNGNUM1NTAwQgotOjEwODJGMDAwRUU5RDVFMTI0MkJDMDNCRURFMUI5ODBGRTA3RjVFOThDRgotOjEwODMwMDAwQjdEN0M3N0ZBNUYyRDhEQzcxRjBEQzUyRjlFNDZDN0NGQQotOjEwODMxMDAwQ0U0OUFDMEZGRENEQUFFOTZBNzU0MDdGOTcyRTUzMkE0RQotOjEwODMyMDAwQjBCRjcwODNCMTdENUVBREIxMEM5MEYzRjlDMEJGQkMzRQotOjEwODMzMDAwNTk0M0UxMUQwOTFFRjNGODdBN0YwRkI0Mjg4NDdGRjZCNAotOjEwODM0MDAwMjVEMDAzRTAzMzhDOUZBMDdENThFQTk3NDI4MEU3REM3QwotOjEwODM1MDAwNUE0MThEMDNEREU0QTk4MkRBNjVDMTBGMUQxQTNGOThFOQotOjEwODM2MDAwRjEyRkM2MzIxOEYyNTlGRDNDMzFERTAxNTU3MjVENzZBRgotOjEwODM3MDAwQzI3RkVFNEMyMUFFQzBGOEI5NEJGQjdCNEU0MUY5NzI4NwotOjEwODM4MDAwOTczRDJFQzJGN0FDQ0M2RTAxQkYzRkIwOENCMUNFMjI3MAotOjEwODM5MDAwMDIyRkJEMkU2MTdEMUY3MEFEQjExN0MyRjc3OTQxOTFEQgotOjEwODNBMDAwRDk4MDBFNThFRDM4MUE4RkUwMTg0QkY4MzhDMkYxRTEzOQotOjEwODNCMDAwMjI3Q0U0MkQwQjNERkI2MzE4RkY4QTFBQTcyQzQyRkQ5QgotOjEwODNDMDAwMkIxQUY5NzcxREJFOEQxMkQwMTk3Q0RGMDg3NDE2MjM4NQotOjEwODNEMDAwM0E5MzhFMjRFMjY3Q0VBMUU1Q0I5MTFFRTc5OERFMTc5MwotOjEwODNFMDAwNDM1RDlDRUZDNzkzMEY5QzUxMDg3MDJEMTczQTY3QTQwQgotOjEwODNGMDAwMDEyODI5RjY2NkM2NzBBMTAxODM0OEQ3M0EzRkVBNzg3QQotOjEwODQwMDAwNUFCRUEzOTVGODMxODFDRkVDQTc5MDlGRjFERkQ5ODRCNAotOjEwODQxMDAwMUFFMkIzQTc1REJGOTI1MTZFRUNDRUVDREJDMjgwODQ1MgotOjEwODQyMDAwQjdDQTJDRDY5MENGRDhCRkE3RjY5RjJENDA3OUJCN0M3QQotOjEwODQzMDAwRjlCQTc1MTdDMEY3OTRGRTVGQjA3MkM2OUNDRTZGQ0ZDNQotOjEwODQ0MDAwOTg5MTUwNEU0REJEODZDQTNFNkQxQzk4NDI4Q0FGRjczOAotOjEwODQ1MDAwQzBCODQ0MUZGRjI5NzNGODM2QTg2QzkzMDg2NUM5MjY3NQotOjEwODQ2MDAwNkYwQTE1MERCNkNCQzI3NkMyMzBFREMyNkM5MzY0RDFFMwotOjEwODQ3MDAwQ0VBREI3MDMzQ0FEODVGNTRCRDVFNjk1QUE3REI3Njk4MgotOjEwODQ4MDAwRjAyNDhFMkYyMURFNjRDNTJEQzA3QTQ4RDMyNTE5RTk0QQotOjEwODQ5MDAwRTVFQkMyOTEzREQyQkMyMzZDOTM3RERDRDA3NjAwNzZCNwotOjEwODRBMDAwQUIwRUJGQ0QxQUZFMzg3RTRGMUNERjNFMENGQ0RGMzQxNgotOjEwODRCMDAwM0U0NkVBQ0ZBMTdEM0Y2REY4QTBGQUVBRUNFNEYzNDUzMQotOjEwODRDMDAwQjhFQ0E4QUYxNEM1NkQ0QkU4RTdBRTNERkY3OEYxMUNFMgotOjEwODREMDAwMjA1RTY5M0UwQkE1NDAxRjkyNUQ5NTQzNDBFNzY1RjIyMwotOjEwODRFMDAwQkQyRUVDNUNDQTZDOTAyM0MwMEZFQkExQUNDMkZCRjVCNwotOjEwODRGMDAwREQ5RDJFMDVERTk3MTVERkJEMEU4OUJFQUMyNzk1QTE0QgotOjEwODUwMDAwM0M5OEMwRTRDQzQ3QTFERjA5QjJDNDdBNzBENTJFRDgxQwotOjEwODUxMDAwNkI0QjgzMzJCQjg0ODU0QUEwREY4QzNEQTkyNDRGMzI0QwotOjEwODUyMDAwOEJDRUZCQTkwMEUzNjY2NkJBNTQ2QzlGOTY1OUZENTM0NwotOjEwODUzMDAwNDZGNEMxMTQyOTAxMUY2OTc1QUZEN0E3MjE1Q0IzNTk0RgotOjEwODU0MDAwMDg1OTUxMTJFMkFDMEU5OTZDM0NGMDEwOTQzM0E3NkRBRgotOjEwODU1MDAwNjMwRDUwQUVGOEQ4QTM4OEM4RDMxMkQ3NzcxREQ4MUVBNAotOjEwODU2MDAwRjU3NDNCREI4N0ZBMjVBOEM5OUY3NTBFNzkxM0U5OEY0RgotOjEwODU3MDAwRUIyNDg2RkEyMzZEQzJCRDAyQzJGMzAwNzQyNTAyNUZBQwotOjEwODU4MDAwOTY5NTY1Q0Q2RTgwNzJEOTdFNUI0ODUxNzAzRTlENDI1NgotOjEwODU5MDAwMjFDRTI3MjA5MkRFRDJGMUE5Q0I5MThBNEY3QjM4RDMwRQotOjEwODVBMDAwOEY2N0YxRUQwMDdGQkIzRERFODNGMjJBMzZGOTBBNzk1MQotOjEwODVCMDAwM0JDMDkzN0I1NTgyQkNDNkJGRkEwMTA3MDhFRjRCOTdCRgotOjEwODVDMDAwNkRFRjI4NDJGQTk2REU0QkVDMkZFM0QzNzgwRkNBMzNENwotOjEwODVEMDAwNTZENzE4QzZGNkJFOTk5MjQxRkVBNzZBRjIyQ0Q1QTRDQQotOjEwODVFMDAwMDc1QUIyRUMyNENGNzQ3REMwNTQ0OTkxNjFERTgyMzZDMwotOjEwODVGMDAwNkZGNjgzMzBFOTAzMjcwQkI5MUM2NEFGMkMyMDNCNDQ5MgotOjEwODYwMDAwNjA3REMyQTkzNDk4M0Y1NjQ0QjgwQkY4M0M4NkI0QUY5RAotOjEwODYxMDAwRTZFRDU5MjBFNDQyM0JDNzk5REFEQzhDRjVFMTYzNTY3QwotOjEwODYyMDAwMkIyMDU3QjgyRTU1NDVGRDJDMzg5ODJCNTgwMUYzQjYwMgotOjEwODYzMDAwQjE0ODM3RDA0OUFCQzAyNDJDMEY4RUQ3QzM3MDNDQTdBQwotOjEwODY0MDAwMkJBRDFERURBRUE3NUQ2RDM2QzQ1RkRCNzNBMDNGNjA0MwotOjEwODY1MDAwMUU3N0Q4NTkyM0RBMDU2RDcyQzg5NTA1RURBMzlBRkRFQQotOjEwODY2MDAwQjZBQTdDNkMwRTk2MzM4MEI2N0JEMTZFOTBDMjMyRDJBNQotOjEwODY3MDAwRTUyQTdGNzEwRTgzRjdFOURFQkU2RkEzOUNGREE3Q0NEMAotOjEwODY4MDAwNUZDRjcwMTU4MDFDQUQ4NzNBRTc4MURDREZGNEY4QkE2NAotOjEwODY5MDAwNTgyRDhDNzczMjhGMjkwOTc2OUU1MzZBNjY2ODRGMzkzOAotOjEwODZBMDAwNEYxNjFBREVGN0I0QzA4Q0NFMUMyQ0FCNkU1QjAzOEU1QgotOjEwODZCMDAwNzM1REE2NDI3OEFENjM3MjNCQjZBQjAzNjQyODA5RUJFOQotOjEwODZDMDAwRTIzQzE5NjRDQTI0QUJGRUYzMERFRjdCQzA0RTUyOUMxMgotOjEwODZEMDAwQTNFOTNGOEQyOUE1ODlGRDhGNEJEMkZGMTlBNkZFNjUyMQotOjEwODZFMDAwQ0JGRTA3RkJGNTFBRkE1RDIzMzFCMkEzNjMzRTM3QUQyQgotOjEwODZGMDAwQkJEOTJFNTg5RDU5QkYyMjEzRUQ1MTI3NkJFRUI2QjA1MgotOjEwODcwMDAwM0I1QjMzNkQwNEY3MUQ4MUU2NUUxNURBRDczMzYwN0M4MQotOjEwODcxMDAwQTA5MzBCQkYzQzIyMzJCMjY3NjBBNTgwNUU1OEJFRDRFNgotOjEwODcyMDAwM0Y0MEM3NjNCMTFFQTc1RjVCNEM2MDI4OTcyRTk0RUM1NwotOjEwODczMDAwMDYzRTk5QzI4QzY1QjM1RDU0MDI2QjhERTNEQTNDOTVCRAotOjEwODc0MDAwQkQ0ODNGQUJGQ0E5OEFEMzAyN0VGREQ5REJDMkE2MTQ4QgotOjEwODc1MDAwOTdDMDdDNTNDMzRCMTlGMEYxMDM5OUZCNUM2QjAyNTAzQgotOjEwODc2MDAwNEVFNzc0RjI0OEU2MUY2N0EwQkZEMDJCNzBGQTVCRTNCOAotOjEwODc3MDAwQjMxMTVFQzJGNTM5NUQ2MjQyQkY2MTA3MkI0MUI5MTg4MgotOjEwODc4MDAwNDZGQTc2NzM3ODcwRkM1RTdGRkU0MzFEMTZFMzgzRDg0RAotOjEwODc5MDAwMzVEODBGQjM1NTYxNEE3MUMyQkM3QTM1M0I3ODYwQkM5RAotOjEwODdBMDAwQTk3OTVEQzgwNzAzRTMzOTU5MTU4RDI3MDJGRTEzQzc2MAotOjEwODdCMDAwQ0JGRTZBRTNGRDFFRTc1NzM2MzhERUVDRTlDNkY5Q0Q5RAotOjEwODdDMDAwNzZDODM0QkZEOTFBRkZFQUUzRkQxRUU3NTdGNDE1QzY5MQotOjEwODdEMDAwQzNGOTI1OEVGNzRGQzZGOUNENzZDQTM0QkZEOTIyQTc4MwotOjEwODdFMDAwQUY4MUYxQjJCRkRBNzhCRDJEQTU2NDA3REZFMTAwRjlGMgotOjEwODdGMDAwMDQ3NDkyNUFCRUMzMzUwRUM2QkRDMzY1OTcwNTY1QjBGNQotOjEwODgwMDAwNUQ1REREOERBRUI5QTg3QkRENTNBN0ZCNjE5Q0ZBNjk4OAotOjEwODgxMDAwNTAzOTE3N0I5OTNBQkRBRTk4QjE0RDAyQTc4QkZGREM1QQotOjEwODgyMDAwRjRFNzc1NDgxN0M3NjdBRTJBMjU3REEyRDlENzk3NjJBNgotOjEwODgzMDAwNTVEMEM3OTc0QTFDREU1OUY5RUU3ODZCMDIxRTFGMDAwRgotOjEwODg0MDAwMzlBMjAyMUMwRjAyQkZBQkMwOEY1QjgxMkZCMTFDNkYxRQotOjEwODg1MDAwMDlEMEYzMjFCMEQ3RjFCOTBERTBDNUVGMEZCNzg0QTg2NwotOjEwODg2MDAwRkM0ODRCMEQzREY1N0U0QTZCQjhERDNFQkVENkRBNkU1OAotOjEwODg3MDAwM0YyMzhCRkI3RDlCODJGMkZDQUI1MEFGRDVBNTg2NTA4RQotOjEwODg4MDAwMkZCMjlBRjM5OTlBNjg1N0IzRTZBNzUzRTBGQkM2Q0I4OQotOjEwODg5MDAwNTkzOUVBQzYzMzM2NzNCODdEMEREOTY0QjdBNzk2RUY1OAotOjEwODhBMDAwRUQ2RDgxRjIxRDkyNUQ0MUJEN0M4N0MyNjY1OEY5Q0RBOAotOjEwODhCMDAwNDVBODY3QUFEMDVFRTVFREQ5RjlEQzBGRjM4NUZCRjY5NAotOjEwODhDMDAwQTJERTlCODM3NjNBRTBENTNGQjc2RjJGRkE3Rjk3ODE4MAotOjEwODhEMDAwNUQ0RTdBOTkxRERFRkIzNjdDN0YxREZDQkYwRTJDOEIxNgotOjEwODhFMDAwNkUyNjQzNzlENjFDM0Y4RDBGN0ZEMkVCQjJEMTdFRTc0NwotOjEwODhGMDAwN0ZFRTk5Nzk4Q0ZDOEE3MDBBRDcwQjNFMzZGQkQ5M0QwNgotOjEwODkwMDAwMDg2RkM4QTFDNEE5M0Y3NjVGMThGOTQwQjUyQjFEMjQ5NAotOjEwODkxMDAwMEFDMjc2RDREMzdFRDREM0YwQkRFRUIwOTNEOTEwQkVDNAotOjEwODkyMDAwNjkwRTkyNkI3M0U3MUFGRDg2NEQyOTNEMzJEQTNGOUI0MwotOjEwODkzMDAwQ0E3REFDMTVGQUJGNkNBNkYxQkJEM0M5RjkyRDZDRjI5OAotOjEwODk0MDAwMUI2Njk5Q0EyMDIxQjlERjJEMkVDODQwN0JGRjBFN0MwMwotOjEwODk1MDAwMzU3OTI4REVBMjg3NUFFRkQ4OUI0MEE3Nzk1OTFFMUY4OAotOjEwODk2MDAwQzUwMUNFNjA2N0EwM0MzQkMxQ0FFRTZBQzA4RkY5NTkxMQotOjEwODk3MDAwNjRBQzk4REJGRkJEMjU3NkM3NUU0MEZEMkIyOEY3QUFDNwotOjEwODk4MDAwOTBCRUI5REMxOENBMUYxQzlFQzk1QUJEMDc1QTdBQTdFNwotOjEwODk5MDAwQkM1NzMyMDg1RkFFMTQxNzUwMEZFNDJEODVGNzA5RjM2QQotOjEwODlBMDAwOTU3QzcxMDFGRDFEMjYzRTVBOEVGRThENzkxRTBGMDhBNQotOjEwODlCMDAwOEYwNjk5QzU3OEZBMzM5NzQ5RUYyMzVFNzAyOTUxOUU0NwotOjEwODlDMDAwOUJFNzNCNzlDODdDNkI1RjI5NjY1NkZDQTQ2QzQyN0JCNQotOjEwODlEMDAwNkVENjczNjJBODU1MTlDNDg3M0VGRkZGNjlCRTNBQUFENgotOjEwODlFMDAwRTkxOUE2RkE1ODBGRDBDQjJCNDBFRjFEREM4RjYxNjgzOAotOjEwODlGMDAwQTdFQUY0MEExNUM4N0VCQUY0NTJGODhFNzRBMUFBMDU0MwotOjEwOEEwMDAwODhDRjU3QzZGNjZGQkIxQURCODFFQzY4NDM3RjU3QjczOAotOjEwOEExMDAwODM3QTBFREFEMDBFRkFBQUZENUU3QTlEODNFQzJEQzYxQgotOjEwOEEyMDAwMUFFNEY3NEIwN0ZCNEJCNjNFRDhFRkZCMDlGQTczQzBDRAotOjEwOEEzMDAwNEVDNDNGRDU5QUU4NDMxODVCNDMwMUIyMDc2RTAxRkI3MQotOjEwOEE0MDAwMThGREZENjhDMzg3NTIzQUZGN0UyNEMxNEVDNTNGNDdEQgotOjEwOEE1MDAwMTJGQTZCREJGMzczNDEwMUI4QkE1QUJBQTdCQzY3NEY3RAotOjEwOEE2MDAwOTAxNzRCNjVEQjFBQjRFNzVBRTMwMkM1MjE3QUEwMUVDMgotOjEwOEE3MDAwRDgwMzYzOTcyQUI2NzZDMEZGNTVEODBGRDJBNzQ5QUU2MAotOjEwOEE4MDAwOEY2RDg3N0UxMkVEOTREQUI5RjJBMzQwMEZFRDY1RjU5NAotOjEwOEE5MDAwOUQyMTc4QUVERkNDRTM2NTdBRkQ4MUI4OTkyRjQ2RkU0MwotOjEwOEFBMDAwQjk5RDM1MzMwMUUwNzRBNEZDRTAyNzdEMzAxRkI1NEQzRQotOjEwOEFCMDAwNjIyOTUzQTA2Q0U3RjYwRTdCREI0MzcyNDE3NDM3RkZFQgotOjEwOEFDMDAwMENCRjA3NjIyMEI3NzBERUY1Q0Q4RjYzMzk2NjYzRTFCNgotOjEwOEFEMDAwMzY3OERFOUZDNkRCNDcyNTk3RUMwQzYxOUNBNDdEMDZBQgotOjEwOEFFMDAwNEUzRjMzMThCOTJGMEJGMEI3MjYzQjk1RTRBMEUzMUQ5QQotOjEwOEFGMDAwQ0Y0MzI4QTcxQzk5MTU0QkQxRUU1OTEwRkQ3RTE4RTNFMgotOjEwOEIwMDAwOTFCMjk3MkQwQzVCRDBENzAyQ0Q3RTg4NjdGMUI4Q0JBMAotOjEwOEIxMDAwMjE3QjRGNDEyNkMwNUQxN0FDOEY2M0JGNDNFQTQ3N0Y3RgotOjEwOEIyMDAwNDBGRDREMTFBREVEQjA5RDVBM0Y1QjZDRDY3MkUxMDkzMQotOjEwOEIzMDAwRURGQjE1Q0I5RkZDRjA2MTk4NEY1QUIxM0I4NEU0QjYzNgotOjEwOEI0MDAwRkUxQ0I2NDNCMDBEQURCRkNCMUZFOTRFODQyM0E1NTgyNAotOjEwOEI1MDAwOTYyODBFQ0FCQTI3QTMzREI3RkU4QjA3QkIxRjA3OTQwMgotOjEwOEI2MDAwNjc3REUxMjYzOTlCMjU3QUUyNDI5MUExRkRDRUFDQUEzMAotOjEwOEI3MDAwQTFFRDc3RkZFMzhEMDBBRUNGRUUxNDQ2RkE5NUIxMTc2NQotOjEwOEI4MDAwMkY0MjdGNzJFMzQwOTlDNTA0OEM3MzY2NkFFNUQ4MjM0RgotOjEwOEI5MDAwMTdBOTg2RjJFMjhCRUFCMDhDQjQwQjQ0MzlGOTlFRUY0OAotOjEwOEJBMDAwQUU4RjYxN0I4MTk3NTlFQzdCQkNCRTlERDdDRkQxQkU4OAotOjEwOEJCMDAwNEZCOUY4QTM5RkRFODVGQUEwREE0MTdFRTg0NkNEMEVENAotOjEwOEJDMDAwRDJFMTNCREYyQjEyRkQ5Q0VGMUQxRThGMDczNUI5RTA3NAotOjEwOEJEMDAwMUEzRDFFMEY1QUUxNzE3NzUwN0QwQkRGQTdCMDZFMDE3MQotOjEwOEJFMDAwRTkzOEU1MEJENzRERDhGRTVGNUE1OEY4MkE4MDdEOEJCRgotOjEwOEJGMDAwQjJFM0U3NzcyOUQ0RkVCMDE1MUVDRjBBQUE0N0IwQkQ2RAotOjEwOEMwMDAwNkJGOTkxOUZERTA1NzA3ODc0MzhDRTY1MzcyNTgxRTM2NgotOjEwOEMxMDAwMkZDM0FERTc4RTZDMkVFN0U2RjlCOERFQzhEMkVDNEQ3NwotOjEwOEMyMDAwODdBMzM3MzAxQjlFNzJFNThGNkU5NDQxREVBQzJERUEzMAotOjEwOEMzMDAwNkVCNDhBM0Y5RkYwREFBODVENjY5Mjc4N0I4Njk3RTNGMAotOjEwOEM0MDAwNkQ1NzRFRjg3Mzg0QTM1RDdFRDI4NUUzQTcwQTJDOEMwMgotOjEwOEM1MDAwRjUzN0Q0RjQzMTIxQTFERkIzN0Q3QzFEMDA2RTlCMTc2NQotOjEwOEM2MDAwREFBNTRFNjYyQUQyOTk4Nzc5RTIwQ0U4Q0M1M0M5RTE5RAotOjEwOEM3MDAwREYxMDc4OUQyOUQwQ0U1MzBBNEYzN0JFRUYyM0ZFNDczMQotOjEwOEM4MDAwOTc4MzBCMzUxMDc0NTA3NjY4RjQ5MTcxNEZDNzQ1NDgzRgotOjEwOEM5MDAwMEY1OUEyNEU2Rjc5MUQ0ODJGMEU5QjVFM0ZFRjYyMkMzRAotOjEwOENBMDAwNzc2NUYxNzJCOTJGQUYyMzk2MEY3QUM2MDE2RDUwMkVGQQotOjEwOENCMDAwRTQzQUM4REUzMUNGMkY0NzgzQjdDM0FGRkFCRDdFMEI4RQotOjEwOENDMDAwN0MzQUZCNjg5RDM2NEU3MDg0NjJCMEFFNTM2Q0JEOERBRAotOjEwOENEMDAwOEJGMURCQzU2RUIyRDdFMDdENjMzQzYxRkVEMzM1M0FFNAotOjEwOENFMDAwOUNFRUU1RjZENkM2N0ZCODFBRTMxNkVCOTE4QzRFMjdCQwotOjEwOENGMDAwN0E0RjlCNEUyNzdBQURFOUY0MUNDNDdGMDI5RDdFQzY1NQotOjEwOEQwMDAwQUNFOUI0REFBQTNERDBFOUI5NTZGODMwOTc0NUE2NkU3OQotOjEwOEQxMDAwNkUwMjAwQTVDRkE3M0Y3MjE3NkFBQjdGQUVEREZDMzhBRAotOjEwOEQyMDAwM0NBNzdDRTE5NkJDNTA0NzNDODM5MTlENjg3MzcxRjlFOAotOjEwOEQzMDAwM0UyOEY3MjNEM0IwN0Y0OTZFQTZGN0EyM0I0Q0ZCMzUwNAotOjEwOEQ0MDAwMkY2NUYxRkU4N0Y0N0I2RUY1NjY5NDVCQTNFODM3OENBNAotOjEwOEQ1MDAwRjMzNkY3M0JDNkNCRTE5RDcyQjEzQjEyQjdDMEZCNDk3RQotOjEwOEQ2MDAwQUZDNEZENTIxRjFGM0YxOUJGOTRGQUI4REY5Qzk0NUYzOAotOjEwOEQ3MDAwNzRGQUNGMDk0NzEwOEU5MUY4RTVDMjQxN0U1OTNBM0EwQwotOjEwOEQ4MDAwN0VEOTQxRkM5MjU2QzZGOTI1MkQwOUJGQjA5ODkzRjhCQgotOjEwOEQ5MDAwNjM2RDExMkZERjcyOEY4RkY4NjE4MDdGNjIyNTQ2RkUzMQotOjEwOERBMDAwODk5NTE4Rjg2N0RBQkQyNTU0REZEQzNFMURFNzZEODEzMwotOjEwOERCMDAwOTc5ODU3OUY0N0I4MDVFN0ExOUUyREI3OEI2NDZGRjQyRQotOjEwOERDMDAwMzE5NDUzNURBQzdGOEYxM0Y5QjA1NjA4NkQ4N0I3QjNGQwotOjEwOEREMDAwNjJCRDBEMkUwNUJGRjdCMkQ5NjA3RkFDRDNFODdFMkIwNAotOjEwOERFMDAwQzI4M0ZFNTBCNTE2Q0Y5MjdBRDk2NTlFQTE3Q0VDQTlCQwotOjEwOERGMDAwRUMyOThEMjRFMEJGNDBDM0UzRTVCRUYwNUQzODdFMTc2QgotOjEwOEUwMDAwRUIxQjhGNzY2OUIyNzVCQTU3ODNGN0E2ODA3QUFGMTVEOAotOjEwOEUxMDAwOUQ4RkE0Nzc3NkEyREVGMUUzOTNDMzlERjU4NUFCMTkxMAotOjEwOEUyMDAwRTU4MDk5Q0ZBN0RDRjBEQjBGMUYxRUE2OUY1RjZCNzA1QwotOjEwOEUzMDAwM0NBNjNENEY4M0VGMUZGMzVBRTlFOUEwRkE0QjEzREYzRAotOjEwOEU0MDAwNTcwQTYzMkRGOUZFRDc1NkVEODFFRkZGRDUwQTFGNUY1NAotOjEwOEU1MDAwODNDRjlGQjZFMkYzMDdCREJDRkY5MUYwMkNGOTM4OUU5QgotOjEwOEU2MDAwMjVERkQ3QzNGMzExNkQ5RERFM0E3RDNDQkY5NTA0Q0Y1RQotOjEwOEU3MDAwN0ZGNEZBNDc4NUU3MjM0OUU0RUI1MTJGQzE2MThCRTE4OQotOjEwOEU4MDAwQkUwMEYyM0JGQUVGRUJDRThERjVFMzdFQTgwNTFDRkZBQQotOjEwOEU5MDAwOTlEODhGNEJFMUZEODA2OUZGOTkwMDc0M0VFNUYzNzUyOQotOjEwOEVBMDAwQTE4ODA1NUY0MkJCNjM4OUYwRUJFREVFRjVDQTlBMUYxRQotOjEwOEVCMDAwQTFBQzQ0QkI3QUNCM0ZCQjY5M0YwMUY0RTBERkJDREYzMAotOjEwOEVDMDAwQUM5Q0I3RjkyQ0U0RjExNDFCOTc0Mzk3REY3Mzc4M0QwMgotOjEwOEVEMDAwQzY2OUJFNDZGRkU5NTZGRDNGQUZEMUQ3NDhGQUJGMjg2NQotOjEwOEVFMDAwNDFGRjYzM0Y2Njc5RDdDNTc4M0NBNUMzMUZDOUY3MTExOQotOjEwOEVGMDAwQkVGQTJFNDJGOUI0RjVENjJDMDFGREJBN0NCNTQ3NDAzNgotOjEwOEYwMDAwRkJERkFGRTk5NzhENUVFRUNGRThFREI2NEEzRDgyODQ5OAotOjEwOEYxMDAwRjU5QjY1MjEyNjE4RkEzQjYzQjhGRUNDNzAwMDdDRTMxNAotOjEwOEYyMDAwMTFCRUNCN0RFQTU5RjhCQ0Q3M0I2MEVGOUQ5NjNENTQwRQotOjEwOEYzMDAwMUQ1MDJCQjAzREM4RTk0QTFDNUYzREQzMjhBN0Y1NzlFOQotOjEwOEY0MDAwRDhDMkREQUMwRkY1MEJCOERGNzEwQkJBRjI2QkZBMTJCOQotOjEwOEY1MDAwRkFCOTgwRkFEMUU0N0Q5NTRGQTcyQkRFREZFOUVBMUI1MQotOjEwOEY2MDAwODA2RkJBMDZERjBDN0M5QUUxMzNFMzY1MjQzODZGNDZFNAotOjEwOEY3MDAwMzg3OTdGOTcyNUMyOTlBQzNGRERCRkQ2RDc4OUY0Njk5MAotOjEwOEY4MDAwNDI1QzY3RTFBMEJFQkUxMkZCNzNBREIxQzU5ODZGOTBBNQotOjEwOEY5MDAwN0Y3NTdEMEQ5MjI5MTVGQkRGRTJFMDcxRDQyRENCRUVCQwotOjEwOEZBMDAwQUVDMzdDODNBRURCRTQ3MjQ0NDlFRTUyQUVFNzk0NjUxNwotOjEwOEZCMDAwODUxNDU3QkQ1NkVCRDcwQ0ZGNDA3QjQ3RjdGODQ5NjU0MgotOjEwOEZDMDAwMzRFRTcyMUNGN0MyNUFENjgzNzIyMzAzRUQwNDhBM0YzMwotOjEwOEZEMDAwQzgxMkM2MTdCMjlDOUQwMThDQ0JBRTE3M0ExQjE3QTFDNQotOjEwOEZFMDAwMUVCREM4NERGQTk2MDVFNjVBQzZBN0Y0QTcxRTdGRDI0NQotOjEwOEZGMDAwRTdDRDAyOTUyM0Q0NkZBNUZBNzI1QTY3MzNEQTQ5QTNGNQotOjEwOTAwMDAwQUVFRkVDQjRCNEFCN0VBOEQ5NTUzMEJGRjVDM0UyMzVCMgotOjEwOTAxMDAwRTBBM0Y4OTY4RURGQTFFM0YwRjVBQjBCMzcwQjg4RUZGQQotOjEwOTAyMDAwRDQzMjE4MTI1ODMyMzVEQzQ5OUJBREI2RTIzOEVCNDNFNgotOjEwOTAzMDAwRkJBOTE0RTg4NUZBN0JERDMyRUUzN0Q4REY1QTFEQUU4NgotOjEwOTA0MDAwMDc5MTFFQkYyRTVDN0FCREU0RTNGMTdBQjg3RjQ2RjE0QQotOjEwOTA1MDAwMEUzNzk3NUJGNDAxQ0FDNzlFRjM1QUVFMUZFOENGM0I2OQotOjEwOTA2MDAwNUE2NDU1MDJGRDczNEM1NjMyMzA1RTc4ODdBNjA3MTk1NAotOjEwOTA3MDAwMEIwNTJFRjNGQ0Y3RDcxQjlDNDc5Q0M3M0I0REY1QTM3NAotOjEwOTA4MDAwOENEMzNEMEJCOEM4QkVDMzMwN0MyMkREQkNFNkUzRkUwQQotOjEwOTA5MDAwNjg0Nzc2RjgzOTJFMUY0MzIxQTQ2QjI4QkY4MEY4NjdGNAotOjEwOTBBMDAwMkUyODdCQThCQzlGQ0FGMjQwRjk2NUFBMUZFMEY1OTk1QgotOjEwOTBCMDAwMkM4RjBBQ0ZEMEVFMEZENDRFMUFFOEU3NERFQUQ3M0RGOQotOjEwOTBDMDAwMzBFRTQxRkFFRTFCMjhGRjkxQkVFN0YzRkFBMzFEMjcwRAotOjEwOTBEMDAwNjE1REY5RkM3QjQ1OUFGRjY3OTI5QTgxRkJBMzk3NDdGNAotOjEwOTBFMDAwMTc1MzlDNjg3RUY0NUE3QUFFNkI5MUVCMzAxRUY3NzI4MAotOjEwOTBGMDAwNEI3RjdCM0IzQzJGOUZCRjU4NDZCQjdGRkU5MjdCNjhEQwotOjEwOTEwMDAwRkY1RUVGRkY1MkY0MkI5MERGMTU2OTA2RDk0NTQ1QjY5NwotOjEwOTExMDAwRjAzNkY3MjBCRjBEQzJEMUFFRTU5OUY1MzUyMDFEQjk2NwotOjEwOTEyMDAwNTRENkRGNTEwRUVENkIzRTZENkYzN0U0Mzk3NTUyRkU0QwotOjEwOTEzMDAwNEM4QTIyN0Q5RTE4NTdEN0U1RTBDNzBFRjU3M0RGRTkwQwotOjEwOTE0MDAwRDFCMTY5QkU4Q0VEODVGMTNGNzMxN0M3NjM0NEQ3RjU4NAotOjEwOTE1MDAwQjIxNUJGRThGMzRFRDZCRjNFRUY2NDcyNDZDNzlGRkUxRQotOjEwOTE2MDAwN0U3RDcxODVDQ0YzN0ZFMjA2QkNBNDk0MzQ1MEJFQ0ZFMwotOjEwOTE3MDAwQTU4MjA2QTdDN0E1RjExQkFGMzcwQkM2NzlCMjhDRTg0RAotOjEwOTE4MDAwNDM0MUZBOURBNUY5NzE2NkJEQTA4RkZCQjEyMzUyRTQ1RQotOjEwOTE5MDAwRjdFMzdFMDM2M0I3NTU1OEUwNzc5NDc4M0JEMEIyMzQ1OQotOjEwOTFBMDAwREM2MDQ3NzlEQzlENDJGQkY3NENBNjM4QkY1RUFGMzFFRgotOjEwOTFCMDAwQzlGQzJGRjA3MzNEQzI5QzJBQ0Q2N0MzRUQxOTcxQjQ3MQotOjEwOTFDMDAwM0IzNjM0RkQ1QUM2RTA0QURBODRDRkFBNjJGODE0RkE3NAotOjEwOTFEMDAwNEYyQzQyRjk3MkJCODdGMjMxMUE5QjRFNTRCNTI2RjREQwotOjEwOTFFMDAwQkZGMDk5N0Y3MzYxQkNCNzcxQzI2QTNGQzY1RDE2MzIyQQotOjEwOTFGMDAwRTlCM0M0N0MwN0YzQjg4REQxMUI4ODZFNjNBRDQyQTM3RAotOjEwOTIwMDAwOTVCRkY1NjYzNkU3RUI4NTk4MjIyMzUyN0Y0NzEyRjcyNAotOjEwOTIxMDAwOTE5Qjk0MEEwN0M2Mjc5QTYyQzZGRDFDRDA5MDBFQTRBMwotOjEwOTIyMDAwOEZDNUVCQ0NFRjEzRjY3MzQ0RUM5RkQxQkM2M0I4OTlCOAotOjEwOTIzMDAwODc3QTZGOEQ4REU4NkQwQkUwMERGREMwNDI1MDk3Rjg3OQotOjEwOTI0MDAwN0MzMzNCNEJFM0M3NUVDMkU3N0YzNzNDNkY2NkNCN0MyQQotOjEwOTI1MDAwREZDREM1NjI2OTU5ODM3NDkzMTNFOTY0QTg5RjNDOTU3NwotOjEwOTI2MDAwMDJFRDZGRkEzQzdBN0U0NDM3RTlBOTdCREQ3QTE5RjQ4NgotOjEwOTI3MDAwMTZFMDNGNUNBNkQ5MzlDNUZDQkIwRENCRThGRkE0RjVEMQotOjEwOTI4MDAwRUVCNTAxMUZBRkI5RUZFOThCMDNFM0ExQkZCMjQ4QzA1MAotOjEwOTI5MDAwMjY1M0Y5MDVDOThGRjYxNzJGQjNEOEQzMkZFQzI1N0JBQQotOjEwOTJBMDAwNTYzRTRCMDgwMUZGQjdFRjdFRTFCOTAyRjJFNzM1N0I4RQotOjEwOTJCMDAwNkNGNzBCNjQ4RkU5NjVDNjdBMThDQ0E3MkI3NUEwQUM0OAotOjEwOTJDMDAwQkEwMjUwMUUzQjUwOEU2MTc5QUI2NkM3QUZCOTZGRjdEQgotOjEwOTJEMDAwMEJFRDY0OUY4NDYzRkUwNDNENTlDNzc4N0NGOTlCRDZFRgotOjEwOTJFMDAwOEY1RDgxQUIzQTMxOUYyODU2NkMyMzdGMkZENUM0OEY3OQotOjEwOTJGMDAwOEZGQTFENTRBRjI4Mjc3MjM3QzIzM0VCQjY3RTA5RTNDRAotOjEwOTMwMDAwMEQ4RUUwRUIzRTk0MDM2MzhBOEZBOTYzODFGRUM3RDQ4MAotOjEwOTMxMDAwRjIzNDE5NTZDQUM3RUQyQTVFNDU3NjQzOTdCNjJFRjA0OQotOjEwOTMyMDAwQkZENUE4RjcwNkQ3QTdEN0I0M0U3QzNEQzI5NUJEQjQzQwotOjEwOTMzMDAwM0U5RUIyNUU1QTJGMUI5NjI5RUVDN0Y3RTMyRkE5RTQ5MwotOjEwOTM0MDAwRjY4NkVDRTRGQjBBREJGRDlDMUY3NkY4Qjk3RkJCQzMxNQotOjEwOTM1MDAwQ0ZGREQzOENFMkJCMjlCRTkzMzJDMzQ2RjUzM0I0QTcwRAotOjEwOTM2MDAwNTk4RUVGRjA0QjlBM0NFN0Y4RDgxRDhDNzRGQjEzRUM0OAotOjEwOTM3MDAwNTY3ODFGMkVBRDQ0RjlFNkNCQzI3REQ2QkE2MkU5MjZGNwotOjEwOTM4MDAwQTRFNzlGNjhGRTI5QUNEMzVEQjQ0RTQ1QkVENDA4NUYwOAotOjEwOTM5MDAwQjdERkY4RkQxNkVCNTYzQUJBNzU3QkEzMjU0MkYyMkFFMQotOjEwOTNBMDAwRDlCQTVEM0U1RjBDNUJDNURENUVEMEYwRjA0OUUzOUY0RQotOjEwOTNCMDAwN0U4NEQzNTlFRUVBNzdFMDNFQ0NGQUUyNEQ4NkJDNkE3MQotOjEwOTNDMDAwRDc4RUQ5M0Q5ODBCQURFNzU1QUY0RTRCQUY0NUI5NkQzNAotOjEwOTNEMDAwMUVGNzhEMkZGRkMzODdGODlERjkwRkE3QTU3Q0ZDNTRCRQotOjEwOTNFMDAwOTM4RkFGQjczNDUyM0I1ODYwNDVDQTI2MzlDMDc4REVGOAotOjEwOTNGMDAwQ0I0MDlFOTg3MENBNDlEMzdCMDNGM0QwQUUyNEQ2Njc4NgotOjEwOTQwMDAwNkM2RUY4MzBFRDU3MkYwQTg4MENGN0M3MTczMjYzNUU4MQotOjEwOTQxMDAwMTk4QkVBNzlDMTNDMEZGNjBEMDk1QzUzNDBFMTFCMzExMQotOjEwOTQyMDAwMjEwNDk4NjI0REQyNkM1REFFMThGMkMzRTZDRDlEQkRBRAotOjEwOTQzMDAwMEZGN0UxMTc2QkZCRjAyMDVGMENERjk3OThGMkM2QUVEOQotOjEwOTQ0MDAwNjg2QzBBMzc2OERGOEZEM0RGNzFDMkQzNUM4NURCOEQzMAotOjEwOTQ1MDAwNzNERDZFRDJBRkYzQzJGM0MzMEQwOUZCNzE2RkZFOTdEQwotOjEwOTQ2MDAwNjg5OTg3N0U0MUI2OEU5NzcwQjhBMTY0Mjg1RTE2ODU4QwotOjEwOTQ3MDAwMDU4N0FDOEM4QzFGMzMzRUVBMjQ4RUFGMjYwRDVGNjZDOQotOjEwOTQ4MDAwRkM5OEYxQjA3OEVFNkM1QTdGRjNGQ0RGNzA4NTA5M0ZGMQotOjEwOTQ5MDAwNkYwMDdFMzA1RkQ4OEMwRkM2MjI5NzIwRERCRTM5NUYwQgotOjEwOTRBMDAwNjQ2ODFGNEYxNzY3REEzMTRGNjBGMTZDODE2MTdFRDFCQwotOjEwOTRCMDAwMTIxNjRBRTdGOUMxRUFBQzY5MDlGMDlBRjE2OEM2RDcxMQotOjEwOTRDMDAwRTJBNzU4QTgwN0ZBNUQ3QzlGODdENkVGNTUwRDNGNjI0QgotOjEwOTREMDAwQ0Y1RjY5NUU2MTk4NTcwNzlGRDcxMTlFQkYyQUQzQkNBMwotOjEwOTRFMDAwMkU1M0NCOUZGNUMxRjc0ODNCNDg1QkM1NEE4RkYwRjkzNwotOjEwOTRGMDAwMkM4MkY5NzRDODQzRjVDOTA5NTZEQjhDNzRCMkM0OTQ0NAotOjEwOTUwMDAwQjc2MDg2Q0YwQ0ZGNEM5NDgzOTM4N0VFRTM1NzY0NkI3MAotOjEwOTUxMDAwRkJGODEzNTk0OERCQzdDRkEwNjMwRDIxRkZCMDc5MEJDRgotOjEwOTUyMDAwODM3Q0NFRTk2QjYxNzRGNkMwNzhEOEFGQzAyMjAzNjU0NgotOjEwOTUzMDAwMTlGMDNCRjM3OUVGQzY3OUYwRUY1NTAxNTFDMTNDQzEwOQotOjEwOTU0MDAwRDlGM0M3QURDMUY5ODc1OTM4QTNBNzA4RURGRDdFM0IxNAotOjEwOTU1MDAwQ0E5MUNCMTg5OEIxRDBFRTQyOTgyNEVBREI3MDQzMEE0NgotOjEwOTU2MDAwOTVGNTdFOEY3NTdFNkEyNzNEMUU2MUNEREI2OUZGNURCNwotOjEwOTU3MDAwQzk5ODNCMjFCOTdDNTkxNTcwRDA3ODY2M0I2NTY2NzlFRQotOjEwOTU4MDAwNDkwNkNBMEIzMzNFNzQzQ0NENDNCQ0E0MTE1RTI2OUVGMwotOjEwOTU5MDAwMEU1RTVFNDQ1RDg1RkUyQ0M2RDE2MDFERkJBRjY1RUNBMgotOjEwOTVBMDAwQTFGMkMxRkQ2Mzk2QUY3MjdCMzI5QkQxRkVGRkI1RDlBQwotOjEwOTVCMDAwOTk5QURERDE0QzcxODcwNTlBNUUzODY0Njc4RDRGQjhGMgotOjEwOTVDMDAwRjkzRTcyNDU4MjdDRkM1NkIwRUVEQUVDMDQzQjU1REY4NgotOjEwOTVEMDAwNDc3NkIzM0VDMkRGOTUyRTc3OEYzODkxRThFRUEzMDEzMAotOjEwOTVFMDAwRkEyMEY5QTVFNzZCNDYyODVGNTNDQzU4QTY1MDVDMkNBRgotOjEwOTVGMDAwMkQ3RDIyQ0IwMEJCOThGMTc5ODMxRjczNTNCNjFGREZGQgotOjEwOTYwMDAwMTdDNkQxMDg5OEY5RkM0RkQ3Q0Q1MzA2RDc2REZENTUzNQotOjEwOTYxMDAwREIzQjUxMUVBNzJDRjk1NThDM0E1Nzc4M0U0NzlBQjYzQQotOjEwOTYyMDAwNkU3NURBQkEwREQ4RDFBNUYwM0UwMUJGQzczQTM1M0IwOQotOjEwOTYzMDAwQUM1NDhCRTNFMzFGMjgxRjJCNTZFM0MzRjlBRkZBM0E3MAotOjEwOTY0MDAwQTY5NDgyRkY2MUM4MjNFQzI0N0NFQkVCMDk0RTQ0M0ZENwotOjEwOTY1MDAwRjI2NTI0MjA1MUNFQjA4REI5QzgzRjhFRENDMkYzMzEwMwotOjEwOTY2MDAwMTYzMjY1MkJFNjA3MkQ4Q0RBOEYyNUY2MTMwOTRBMDQ4RQotOjEwOTY3MDAwNDc2NDdEOEExNjM3MDk1MTNGOEI4MkJDMUY1NkNBRkQ0RAotOjEwOTY4MDAwQkMwMUJBOEY0MUZCODRGQzQ3OUIwQjRDNDk2QzlGQzlDMgotOjEwOTY5MDAwNDJFODNGNDE3RkQ5QThFRkQ5QkE4NDcxQzYwRTFEMzc4MQotOjEwOTZBMDAwNTk3RkU2NzZBMkI2N0YyQjNBNDNBMTUwODI5Q0RFQUU2QwotOjEwOTZCMDAwRDlDRkM3MDI5NUREQjZCMUM5RjFCN0M4RTU1NUE1ODRDNAotOjEwOTZDMDAwQkNEODIzNDE1N0EzNTU1QzRDRUY0RkQ3REYwMzc2MjIxQwotOjEwOTZEMDAwQkJFNkM1NDQzQkQxRUQ2ODdBRjFCOTBCMTJFQzQ0RDYzOAotOjEwOTZFMDAwRjQyMkVFRkI3RjU1M0JGMUU1RUNBNjE3REI2MTdFN0ZCNAotOjEwOTZGMDAwN0ZGQjlGMjg3RkZDNTgzMzA4NENDMEEzMzczQTk1MUQ0OQotOjEwOTcwMDAwRjVBMjdDOTA0OTdGMTUzNjgyNDc4NUM5REY5MjMyMUVDQgotOjEwOTcxMDAwRTkzRDI1OUFBNzRBMDlGOUIyNkY2NjJCMDRCRkI3NThFRAotOjEwOTcyMDAwQTVGRDMyNjhEQThEQUVCODU3MEEwOTg4QjdCQkI1Qjg1RgotOjEwOTczMDAwMTkxMEVFRjhEOTlFQzQ3NjdDREVGQTc4NEU5NzRDNzBGQwotOjEwOTc0MDAwMzhGNEYxNThBODk1RjJFQjY3MzJEMjIzN0ExRTg4Q0UwRQotOjEwOTc1MDAwRDc3QTNGNDdCMzhERjFCQTUxRjBGM0QxNkNGRjUwN0UwOQotOjEwOTc2MDAwMTZDNUU2Nzc2RjQ3MzlGMUEyNDg3RUQ4NzcwMkI3RDBBMQotOjEwOTc3MDAwN0I3MzNDRTBFMzZDNkUxRjhFMTEyMzFGQTM1Q0U4NkRDRQotOjEwOTc4MDAwN0NFRDNCMzc0M0JCMTUzQjlDMjE1NEMzQ0JCRkY3RTE3QQotOjEwOTc5MDAwMEZBQjE0QzQxMzVGRkZGOTRCMTZERjU3ODVGMzJBOTEwMwotOjEwOTdBMDAwNjREQURGMjhFMDcxMTg0N0FCNDBGRTZCNEE5MTIzQkNCNgotOjEwOTdCMDAwMDM5RTg3N0Q3NUI5MzkwOTcwMURGNjM1NTA3OUVDMEMxQgotOjEwOTdDMDAwMEVENzMxRThCMzQzQzE3NjlCMUFDOTVGRjRGMDdERUY0MQotOjEwOTdEMDAwNjM4QTkyQzE0OEFFMzBCMjI3NDQyNzdGQkE3Mzc4NUM1RgotOjEwOTdFMDAwRDg5REMzRTM3OTUyMEVDN0I3RUJBNDQwOEI4NDc0REREOAotOjEwOTdGMDAwOENGQjE2NTI4Q0YyQTA1RDI3MjU3QUVGMTAwNDRCN0I3MAotOjEwOTgwMDAwNERFRkNGNzUxMjg0MzNFMjJCQ0REQ0RFNDFFRjcxM0U5QwotOjEwOTgxMDAwRDg1RUY0MzI4MzdERTNDRkUxNzZCMjdGMDA4RTM0MEVFMgotOjEwOTgyMDAwODdEN0RDNEYzQTdGQUZGMTlGMTk4RTE1RDk1MzgzODhDNAotOjEwOTgzMDAwOTdDMzNFMzUzNzg3Qzc1MUI4MUM3NkJGNzA0MDk4MzhGQwotOjEwOTg0MDAwMUE3OUNDRjNGNTJGMDk0QTJFOEFFQkREMkVDNDRCNDA1MgotOjEwOTg1MDAwM0U3NTk0MUU1QjQzNzJBQkM4RDU4Q0U3QTQxMkVDMjcwRgotOjEwOTg2MDAwODE5RkJCRTFFNzJBMDZFREQzRkU2OTczMkEzMTdBQ0RFOQotOjEwOTg3MDAwOTQwNzQyNDNFREFENzcyQjRGQ0M5QjgzMDVFREZDQzRBMQotOjEwOTg4MDAwOTVCQUVDOEQ0MTE5RUNCOTc3QjQ2MjkzMzI3NjJEODY5NgotOjEwOTg5MDAwRkEyRkFERTVGNkQ5NjJCNENGNDIyNEI3MEM3Njk3RDk0QQotOjEwOThBMDAwM0U3MzgzQkU5RjAzNzRCMTI0MjBDOTQ4MTc2NjNCQUQ0NQotOjEwOThCMDAwQTM3MjFFRDkzNTFENjBENzYwQkVGNjUwM0I4RENCOUI4MQotOjEwOThDMDAwM0JBMzM2QTY0MkJEOTc2QjQ1RjIzMzVFMkVFRDdCRkU4MQotOjEwOThEMDAwNDJENDE3MzU3Njg1RjQ0NTY5RkY5RDczRThGQjI0MUE1OQotOjEwOThFMDAwQzdBREY5Nzc1MDlGOUY3NzA4QTVDNTRCRTBERDJCQjUzNQotOjEwOThGMDAwNDdERDhCMTNENkZCRTU5QUEzRTNEMTJGRDg5QTI0QkY3QgotOjEwOTkwMDAwNDI4RkQzRUNCRDk1RTc3RkJEN0JBRjEwNzcyMkRFNkUzMwotOjEwOTkxMDAwMTM2REQ4RUZDMjcyMEZFNUFENEUxM0REMzRDRUUyOEQ3QwotOjEwOTkyMDAwNjJEQzQ5Mzg1NEQzQTc2NTBGREE4RDRDQUNDRDdFMEQ3RgotOjEwOTkzMDAwRjE3MDk3OURFMUY5QzE4MjlCRkEwQzc2RUVDMkE4RDEzNQotOjEwOTk0MDAwOUU4QjM0ODNGREEzOUNCRTFENjhCNkZGQ0M3NkNDRjIwMwotOjEwOTk1MDAwMUNDRDdFQTk2MDE1NjhCRkJDRENCMjkzMUQyRDE5QjQ2NwotOjEwOTk2MDAwNjM2NjI1RDlGRkQ2RUQ5OEYzNkNGNURGRDVFODk5RjY1NwotOjEwOTk3MDAwMEY2NjQ5RDZGQkZCOTc2OEZFMjkwQjcxN0Y3MDlBRjgzQQotOjEwOTk4MDAwMTFBREQ3QjE5MEE0MjBGRURDQjdCQzQwRTczQURDRkZCNAotOjEwOTk5MDAwMjU4NkFEQzZCQjMzQzdBMUVGQzc5MUJDREQ1QTkxNDY0MgotOjEwOTlBMDAwNzlENzdCNkUzRDJCQTc4RkQ2NEJCOUJGMTZEN0ZGMDU1NgotOjEwOTlCMDAwM0JDOUMxNjRGQTJEMjUyQUIyNjI5ODk4MjcyQUQwNTM1MAotOjEwOTlDMDAwNUZDRjMxRDExNDk2QTgxRkM2MjRDOTUzRjg3MTBFOUZEQQotOjEwOTlEMDAwODdGRjM2NjY0MzNGM0IzM0M2NTQyQkJGNTRBRjA3RkU2OQotOjEwOTlFMDAwRTg3NDhDNTE0M0ZEOUU0QzgwRUY4NjYyMUJDNUZENzU2QgotOjEwOTlGMDAwQkYzNEM1Q0VDRkZCREE3N0FEOENBMTdGM0EwNkUwNDMwQQotOjEwOUEwMDAwMzgxNDgwMEZFNTcwNTEzNDhEQ0E2M0EzNUU3QThFOEI1MwotOjEwOUExMDAwNjZEMkIzMzg5QTQ3REY0QkEyRTNFODc5NDZCNDg4REVEMgotOjEwOUEyMDAwOUYxOTNEOUJDQUE1RDE0OUY0MUMxRjJEQTdFNzU5RDEwOQotOjEwOUEzMDAwRjNFOTc5MzZFODJEQUM1NzE2QURBM0U3ODRFODNGRDNCOAotOjEwOUE0MDAwRkI4OUQxMzlGNDNDMjczQTlCOUVBMUU4QjdFOTdCNzlBMQotOjEwOUE1MDAwNzQzMTNEMkJBMjRERjQ3RTUyRjQ3QTJBNTc0NjZGQTRGRQotOjEwOUE2MDAwNzI1NTc0MjUzREFCQTNERkE3RTdCOUQxMzY3QUQ2NDQ0QQotOjEwOUE3MDAwNUJBOURFRTRFODA2MkE5RjE3QkQ4NzlFRTc0NzM3RDEzQQotOjEwOUE4MDAwQjMzNkJBODVCRUVCRkM5Q0E2RDlEMzJGMDVCNkM5OTRENAotOjEwOUE5MDAwNkZDRjdBQ0E1MDNFMjZFM0MzNDM5QTNDQUVDRjUxRjcwQwotOjEwOUFBMDAwMjJGREU5RjVGNjZCRTcwRUNDRjUwRUU0MEM5Rjc3RjM5QgotOjEwOUFCMDAwOUFCNjVFOUY4NDhFRkMwODhGRDNFQUVCQjYzRTMwN0M2QwotOjEwOUFDMDAwMUM4MTk1Rjk0NkQ4QjdFMkYzN0IyNjQ3RTFGNDJCNzU2NAotOjEwOUFEMDAwOTJCREIxQjU5OTUxM0U5OEE3QjI1NzQwNzlEMzE1OTAzMAotOjEwOUFFMDAwNjY1OEQxOTEzQkMwRjNDMDhBNzIyMjQ3NTE3RkI4ODMzOAotOjEwOUFGMDAwRUZFREM1RkRBODRCNjNCREJFQTk0ODJGMjE1RkVBNTQxOQotOjEwOUIwMDAwRTg2RjRDQkI4RERDNkI4NUM5MDI5Njk1MDYyNkY3QjBENQotOjEwOUIxMDAwQzE3ODBFRDg1NzA2QkQyNjA1NzRGQkFENzdFNjI0ODRDMAotOjEwOUIyMDAwRTdBQ0UyMEFCMjVGQjVGREU0RkRCNzhFNjVFODc3NkM5RAotOjEwOUIzMDAwNzVGNDA4MTJDQUNCNTU4QzI1REFFMTVCRDcyRTdBMzgzQQotOjEwOUI0MDAwRjE5Qzg2MTRFMEZDMzk2NjFEN0IxQUUzNjQ0NTlENEE0RQotOjEwOUI1MDAwM0Q5RTI3MUNCNzU5N0QxQTUzM0M0QkUyOTFGQTU0Mjg3RAotOjEwOUI2MDAwOUZGOTQ4RUM2OTdDOEVFRjhFRDdBN0MxRjNFQzlEM0Q0MQotOjEwOUI3MDAwNEZBM0Y4OTlEMEQzNTdFRjg2RjIzOUNGQjE2NzMwRkNCNQotOjEwOUI4MDAwNTRERUFCNENGNTQwNzlEMjAxRjUxOURDMjZBOUVBOEJGRAotOjEwOUI5MDAwNEM0RDU3MTA5RTc4NUIzQUMwQjNGNTFEMzBCNEEwNUNCNQotOjEwOUJBMDAwRjM1MUE3MDg2RUM5RTBGQTgzRERGNjQ0QzJCQUE0MTRFMwotOjEwOUJCMDAwRjdBQTIyRkMzM0ZGMjZCOTFDRTVFQzU2QTkyRjI1QjNFMgotOjEwOUJDMDAwNkNFOEZBNzRFMUJDNzE5RUEwNTdCNjZCRkJFODcyQzJGOAotOjEwOUJEMDAwN0E4NDAyODIxRTBGRjQwNTEyRTI4MTVERURBRjUyM0NFMQotOjEwOUJFMDAwQjAyQjU1QUVDMzUwNTdGRjM0MjYzRkE0MjAxRDczM0YwMgotOjEwOUJGMDAwMjE3NUNENThEMjRGM0FERDAxN0UwREY2QTQxNEUwNzRFNAotOjEwOUMwMDAwQjc3NUMwREVCNEM2NkYwOEYxNUJGNUJGMDdCRkZGOUUzNgotOjEwOUMxMDAwQTNDOUFGMjRGODdEMDlFNzExMUM5OThGRUIwMjlDMkY5MwotOjEwOUMyMDAwODE4RjJGMDg1NDI1QUY3N0I1ODY3RjMzOUVCNzRBRjJEMAotOjEwOUMzMDAwNTk4NDJGMzdCM0M1Q0EwN0Q3QUQ0OUEzRUY5MUYwRkFCRQotOjEwOUM0MDAwRURGRjY1NzQ1QjEzMTgxRUFGQUNEMkNCRTNDQzVBN0UyQwotOjEwOUM1MDAwNUEzMjc5QjMzRkM5Mzk5MUU2QzAxMDM5QzdFM0E1MzIwQQotOjEwOUM2MDAwQzhCOTcxQzlFNTVDNkQ2MDA0Rjk5NTI0REZFMUY2ODAzRgotOjEwOUM3MDAwOUVFRjEwRkU3RTYwMTQ3MUZEM0I2RDcyMURFNkJCQzQ0RAotOjEwOUM4MDAwMjYzMkYyMTNDMEJFNkNDN0ZDOUQzMTMxQTU4MkI2QjEzRAotOjEwOUM5MDAwNTAyODIzMUUyQkNFMjYzRkJEMDhFQzBEQTk4MjYxQUFCOQotOjEwOUNBMDAwNjMwRjNFMkZBOUNDQjQyRDJBQzNCQzA2OERERkU0QTZEQQotOjEwOUNCMDAwNDAyMkJGRTlGQTdFOTAxRjc1QkFDOEVBQTI3MzE2NDAyNwotOjEwOUNDMDAwQUY5ODRGQjg0QkMzRDM2MDNGM0MxRUIxRjY5NkRDQUVBNQotOjEwOUNEMDAwOEUwNDM5RDgxNUNBQTNCMjVFM0YxOUZEQkVBNTdEMDcxMwotOjEwOUNFMDAwNzk0MUZCRkQ5N0Q0NUFFNzlCRkM2QjQwRDRFQzlDN0VGQQotOjEwOUNGMDAwMTVFOTNDMzY4NUM5NzRERUI5RkQwOEM5QTc0QzkwNEZGQgotOjEwOUQwMDAwNDIxMTBGMEZFMUY4RjlEMUQ0ODczMTRFRkJFQjQwQjY4OQotOjEwOUQxMDAwMjZDRkU1RDRDQjNERkZGRkU4QjkwMzdDNzVFMkE3NUExNwotOjEwOUQyMDAwNzkwRjlFQUIxODAzN0E0ODQxMzk1OTBCQjA1N0EyOUU2MAotOjEwOUQzMDAwNzNEMEJBMkI4Q0FGQTM1MkNCRTIzRDAyRTFBRDA3RkQ0RAotOjEwOUQ0MDAwRTY5ODhEOUZDRkQ4RUZFODU2NDlFRjM4MzI2NUNDM0Y4MwotOjEwOUQ1MDAwRDlFNThGRUMwREY4OTNGMzg1OUNBNjk0RTNBMkZFNjEwMAotOjEwOUQ2MDAwRjM3NTMzREQ0MUNDQ0I5MTUzQjFGQzJBOTRFRkFDQzFGOAotOjEwOUQ3MDAwM0NBMTNFQTY5NUVGNzQ0RkZFRUFGMTg3M0YwNEFFRERBRAotOjEwOUQ4MDAwOEZGQjU0RDUwMUY1MzVBNDY3QTBFQjNGMjA1Q0VBOTkyMQotOjEwOUQ5MDAwQjI0NEYxRTE1MUVFM0ZFOUZDMzlDODRGNzJCOUNFNEYwMAotOjEwOURBMDAwNEQ2NTI0MEZERkM1RkVGNUZFOTJEOTM3RkZBMkM5Q0Y1RQotOjEwOURCMDAwRkVDMEYwRjY4RDRFRjdBNzZEREY2OEYwQkUzMzAyRkZGMAotOjEwOURDMDAwQ0Y3Q0ZFQjVDRERCRDg2MEZDQ0Y5M0ZCNDZBRkE0QTAyMwotOjEwOUREMDAwQkQzRDk1MUQ5RDg0NzFBRjVFNEVGNzhDQzdGOTU0OENDNwotOjEwOURFMDAwRkYwMTFEQTQ1NEJBNEM3MTVCNjE4NjE2NzcxOTM2NUU2QgotOjEwOURGMDAwQUJDNzkzRjU3ODlGMUVENzRCRDdFODBBMkYwQzQwM0Q5MQotOjEwOUUwMDAwOUU1RTIzNEI4QkE4QkYzRTc2MTlGNEU3MDk3MjNDRTlBRQotOjEwOUUxMDAwN0M4RDcyMEJGN0U3NUQ2QkIyQTRCMTY1ODNGRDgyQTQwNAotOjEwOUUyMDAwMjQzOUQ1RDVDOEU0OEU0Q0JFRkY5QTAxRjJBNTczMzUwRQotOjEwOUUzMDAwMjMzRjJGRjZCMjQ4RkQxRjU3NkQxRjNBQTFERUYxNEFBRQotOjEwOUU0MDAwNDAyMENBMDU5NTI5NzJCNjc2MEU4MTg4NUMyNjdBNzVGRgotOjEwOUU1MDAwMzJENjhERkUzNkZCNDFDOEU1QzAzOEY3RTcwMjUzMDEyNAotOjEwOUU2MDAwRUVGRDlGOEJGNDk0MzBDMjBEOEQyRTA5OTU4N0IwNzE1NQotOjEwOUU3MDAwNUQ0NjZEMDhGNzAzQzVBMzUwMDYzODFCMzI2QTMzQjA0MAotOjEwOUU4MDAwQkM3RkZGQTQxMEIzODhERjVEMTE2OTMyQzQ5N0NDNzgyMgotOjEwOUU5MDAwMUFBOEY3OUQzNTk0QUZCMDY1ODRGRENGOUFBMDQzQjc1QgotOjEwOUVBMDAwM0IyQjgyNjhFRjVDRDVERkVFNTAwNkY3M0ZGNTdEQkRCQQotOjEwOUVCMDAwNjBGMTkzMTdFMTNEM0JDMTY1RENGRUNDNjVGMUQ2NDQxMgotOjEwOUVDMDAwQkIyOTYxN0ZCMTE2RkJEOTMyQjhCRkQ4N0I0NkUyRkUxMQotOjEwOUVEMDAwRTI4QURDREJGMEU4RkVCRjBDRUMyRjQ2Q0VDMUZBQUEyQQotOjEwOUVFMDAwQjdCQjFDRTk1M0NGODdEREVGRTBGQjAwNkNEMjhCM0VBNAotOjEwOUVGMDAwQzU4MjNFMTY5NDNGRUIyNzdBRDRGQzg5MjFERkI1QjhBMgotOjEwOUYwMDAwOTlEOTBGOUUxNTM0QzZGMThGODdFNjY0RjRFMEM3MjQxMwotOjEwOUYxMDAwNzE3QzNEOUVBN0ZCQzExOEFGOTMyREY5Q0U4ODdGN0Q0NAotOjEwOUYyMDAwRkMwNTAyRjc2Mzk5NUQyMDc5QTdFQjREOTAyNzkxQTA3RQotOjEwOUYzMDAwOUY5QTUxM0M1QTc1MEE5NEFGNzUzQ0I0NTgyMUJGMjg3QQotOjEwOUY0MDAwODk3QzE5RDgzNzYwM0QyNTU2RkJBQzBCQjRCQzEzRjNBNAotOjEwOUY1MDAwRkI1QjgyNUMzRjJGQjBGMzM4QTVCMDcyNDkwNEM3NUQ0QwotOjEwOUY2MDAwMTA3NDA5Q0UwNDNCRTlFQTIwRDc1RkZBRkU4QjIzRjc5MQotOjEwOUY3MDAwNjQxNUUyRDlFMTg4Mjg1NkYzMzZFRkEzNUMxRDY0MDMyQgotOjEwOUY4MDAwRTdERDQyMTY3QTJGMTk5RTBFRDgzQjY5NUZFRUMwMTJBQwotOjEwOUY5MDAwOTFDRUVCMUU4RjlDNEJGNzNFMjQ5MzBCNkYyMUZEOTRDQgotOjEwOUZBMDAwMzAxNkNFRTVFMzBEQUVBMzM1REVGNDNDMTlGMzdFRDVENQotOjEwOUZCMDAwQzBGN0E2MTQzQTdGNjNDRTk3Nzk0Q0MzREIzRTBEMkZEMgotOjEwOUZDMDAwRkZEREY5MzJGQjM0RkNCREE0QzU2N0Y0NzhENjI1NDkyMgotOjEwOUZEMDAwRTRGRDc5QjZGQTQ3ODg4RTQ2ODhDQjlDQTFFN0ZCNjhGQQotOjEwOUZFMDAwRjg2MUNGOENBNzdCMzkzNkY0REFFMzI5MDJDMjYzQTM4OAotOjEwOUZGMDAwRkRDQkM2M0Y4ODIxQjRCRkY0NzY2RTkzQkNEMEYzNzcxNwotOjEwQTAwMDAwRjQ3MkRBNDk4MUM1MTNGNjExRDJBNDZFOEE5M0E2OUQyMwotOjEwQTAxMDAwOTRFOEJEOTlGRkVFMzBGMTlGQkUyRUM5RDY1OTVGMTc2NwotOjEwQTAyMDAwRjNGQjJFNkQ1RDBFMzRGRDVCMDBDRkJCNkM0ODYxOTY3QgotOjEwQTAzMDAwRjk0NDVGMDQ4REYxNzc3MzFFNDBCMjdERUU4MzVBQkIwNQotOjEwQTA0MDAwRTM5MUM5MzkyODk3MUIxREIxOTJEMUYwQkQ4RTlGMzc3RQotOjEwQTA1MDAwQkVGQzhEMEJGOTZDQzM0OUU3MENBQkY1NzgzNUM4RkQzOAotOjEwQTA2MDAwMTZEMEE3RUIxMkY3NDEzREYzNUY2QkM3NUVEMzI0RTMzNQotOjEwQTA3MDAwM0VBOEFFNEZGNTdERDBCNDRBRjMzRTlBRjUzRUU4MDZEMQotOjEwQTA4MDAwNjYyRDFGOTNFRDgzMEVEOUZGRDRGNEVEODk2MDkyRkQwOAotOjEwQTA5MDAwQ0ZCMkUxQ0ZCM0VGRDZFODc5QTRCQzhGMkIxQ0ZDQkNDOAotOjEwQTBBMDAwQUNGOUZEOEIwM0VCQjBCRUUwNDdDMDU3MzczNjM5NjlEQQotOjEwQTBCMDAwRjdBOUE3Qzk0OTdDQjhCODI5ODVFMkIyOEJDQjc5QkM4RQotOjEwQTBDMDAwNzdGMTdEODJCNjVGNjc4Q0MzQkUwNEYyNjIxOTlFQUZFMgotOjEwQTBEMDAwRDdGNENFNTExNkFFNDY3Qjc0NTZBNTYwRDgyNzBGRDc1RAotOjEwQTBFMDAwQTYxOENBRjM5N0RDRjMxMkRFOUJGMDcyOEQ1REExRjgxRgotOjEwQTBGMDAwMzNGNDE1NDNCQkEwOTZFNzI5MzJBNUZGNEU4QzczRUJEMgotOjEwQTEwMDAwRjE2NzdERkQ1RkFFM0Q0QUY3QTBDNUMwQ0UyRjA5NjE2NgotOjEwQTExMDAwRkM1OTI0RkU3QUY5RjU0OUZDNUUzQTYxNzAzRjVDMDExNgotOjEwQTEyMDAwM0I2MUMzNzlFMzI4REZFMzYwRDlCNzI4Q0VCQjAxRTMwNQotOjEwQTEzMDAwRTIzMEQzMEQ1RkZFNjYwNkQxMTEyOEU1MThGMkVCQzRCQwotOjEwQTE0MDAwQUMzOENBQzdDNTEzMkFCMjkxMkU5Rjk5RjhCOTA3RTM1NAotOjEwQTE1MDAwQTJFRkRFNzZEQzhGRUJENEQ3RDI0Qzc5MDdFNjc1MzdFOQotOjEwQTE2MDAwQzc5OUNERjFFNUQzOEQyNzlGOUIzQjkwMjc0MEY0RjAxNQotOjEwQTE3MDAwOTIyOTlFQUNDQjJCQjNGQzQ4ODgyNzVGOTgzQjhBNzgwQQotOjEwQTE4MDAwQjIyRUI3NzQzOUExQ0JBRjgzNjUxRDZGM0YwNEZGM0M3RQotOjEwQTE5MDAwMTg3MTEyNEM2RjY5RjMxRUUwNEI4RDJFMEZFQTdDRjg5QwotOjEwQTFBMDAwQTU5M0VDOTE2NzI2RkU5NkYyQURGNDdBMkRDMTRDRTJCMAotOjEwQTFCMDAwQzM2Rjk1QzVFREI0M0Y4Qjc5MEFBNTgzRUIzMjNGNzIyRgotOjEwQTFDMDAwRUQ0MDE5QkJGREY2RDI5NTA2RkExODkwNTMyM0NBQjE5QgotOjEwQTFEMDAwRTFFNTk0OThDQkUzMTNDOUYyMzU3NTNFMThBQTdGNEE5RQotOjEwQTFFMDAwQzg0RTRERkJCRDNERUUyQUZBRUE3QUE4QjFFOUQ3MEE3RQotOjEwQTFGMDAwQjY4M0U3NjY2QTNGRDExMTg5NUJFODI3MzMzQzY5Mjc1QwotOjEwQTIwMDAwNDUxNjlGOTRGODVFRTFFRjA3RjQ4MDgzQkVDN0VBOTU5OAotOjEwQTIxMDAwRDVBQjdEREM5RTZFMjNGRThDMzk2OUZGRENBN0I2RTRFRQotOjEwQTIyMDAwNDI3RDlGNUY4RDIxM0QzQ0VDNTM1QjczMTNFNDY5OUI0MgotOjEwQTIzMDAwOURFRjQ3OEEzNjE2NzlDMjAyMkY0RkU1NkE3QTk5ODVEMwotOjEwQTI0MDAwMDNEOERGOUEzQUUzNzkyRUZEQjkzRDk3RUZFRkVERjFCMAotOjEwQTI1MDAwNTcwN0QwQkU2RTNCNUMxRTQwRkVEOUVCQTkyNjdCM0I2OAotOjEwQTI2MDAwRDlCQUREQTVGMzEzQ0FBRjkyNDE3RjYyQTNCNkRFQzBBRgotOjEwQTI3MDAwQTIyQUVFRTNBRUIxODcwMzg5RjFDNjc1QjkzQzhGMjNGQwotOjEwQTI4MDAwN0RGMjkzQkQ2ODM3QjdDOTM2Q0ExMzZDOTM3OUZFNzVGMgotOjEwQTI5MDAwQkI1QjlBQjE0RDZCRTczM0I0OTNGNDczNTQ3NDVGODYzMAotOjEwQTJBMDAwRTQzNkU2NTczRkE1RDkzQkM5RTZGOTU0QUU0REJCNUY0RQotOjEwQTJCMDAwQjRFN0RFNUE2MTUwQUZEODhGRDRCOUU4RkUwN0E2Q0ExQQotOjEwQTJDMDAwM0NCRjI5NjRDOEE3QjY2QkZBQTVERTk0QUYyMUNBNUY2QwotOjEwQTJEMDAwQ0Q2RjBCRkEyM0JCNzIyREZDQjYzRDNFRjUyOTVDRUYyQQotOjEwQTJFMDAwQTgxNDczMjI3RDQ0NURENjdDRkY4Q0I2QUUzRkQwRTZDOQotOjEwQTJGMDAwNkJCRTU3NTUzNERERkIyMDlBRUU3RDg4RDUzN0ZGQUMxOQotOjEwQTMwMDAwMEZFOTZEQjU1MzZFRjNEMTNEMEY3NEVGNDMxNEFGNUM5RAotOjEwQTMxMDAwODJFN0RGNTM3ODNFMEJGODdGRTdGMkYzMDZBMTNFOTQyNQotOjEwQTMyMDAwQUYyQ0UwQTI3ODU0NjdCRUFBRTY0MzU5RjREODFFNUE2RgotOjEwQTMzMDAwMERGREI1QTlGNTJBMUU1REU5NzREQkJBNzA5RjJGMzNCOAotOjEwQTM0MDAwMTgzOTg4RjM5OEVBOTE0OEVGNzQ1RTlDNEE3QTA4QkVGRgotOjEwQTM1MDAwQTc3MDM5QzI2NEExOUFGQzQxQkEzNDA1N0Q3MDNDNUY5NAotOjEwQTM2MDAwNjYwRjM4Mjg5RUQ1MTY2MTdEQ0U3MUZDRkMzRkY2NTNGMgotOjEwQTM3MDAwQzc3QUY2RDcxNkExQkRFREFBNDQzQ0VEMEY0RENBODhBOQotOjEwQTM4MDAwNThDODA5RkQ2OURFRkY3RkZCQkI2RjE2NTJCRUFBMThENQotOjEwQTM5MDAwRjkwOEZCRUI2RDVDQkMxMUY3RjU1N0VDMTQ0M0I4OEY3MwotOjEwQTNBMDAwRjA5REVGMUQzQzgzOUYzNzMyRUUzM0RGOUYzNkE1MEZDNAotOjEwQTNCMDAwRjU1OUQ0RURBMDdBN0IzQ0Q1OUQ4OEE3MzZDMUQzODlDOQotOjEwQTNDMDAwRkU2RURCRTE5NTNGNDEzQ0I2QjVGMjM4QjcxOUNGN0I2NQotOjEwQTNEMDAwM0RERkEzRkIzNThFQzM3MjYyN0RGM0ZEMUFBQzczMjU5RQotOjEwQTNFMDAwNUYyN0E3OEJGNjJENjFCRTJDQUY4QUFGMjNDNTA3MEY2MQotOjEwQTNGMDAwNzlFODFFQThFM0ZCOUY3MTIzN0M1RjYzREU2OTc5NTVEMgotOjEwQTQwMDAwQzNDRDNCNUYyNkZCNDVBMzFGMjY4NUQ3RTFCQzZFMTY1NwotOjEwQTQxMDAwM0Q5RDFEM0VCQzI3MERENjFCRTFERTY1Mjc3RkZGRkU1RgotOjEwQTQyMDAwQjQ3NDVBRDcyOEMwODdFQjJBN0ExQTU0NzRDOUZFQkE3MgotOjEwQTQzMDAwNTNBNDc1OEU0QUNEMzQyRjE2OTNEODc2N0NCRkVCQzRDNwotOjEwQTQ0MDAwMEZDRjQ3M0E1MEIzNjg1NzRCMkM2ODI2QkNGQzE1RjAyOQotOjEwQTQ1MDAwQjJEQTAyMkY0MDNGNDU3OUI4NUZCNEVCNDZFQUE3RDNBMgotOjEwQTQ2MDAwRTE5MkQxQjI2OUYzNTREMzc5RTVEMURFMkY1Mjk2Qzc4OAotOjEwQTQ3MDAwRjkyNEUxN0U5MUIyQkMyQThCRkE5QTlGODVGRTM2OEUzMgotOjEwQTQ4MDAwNUIyN0IzQ0ZFMjZDMTBFRkM5RjI1N0NFRDdGQTFGRThDMwotOjEwQTQ5MDAwNjdFNEZDOTVGMzEzQzdEN0M3RkQxQUVCM0FGRDc0RDZGMgotOjEwQTRBMDAwQjVDREY1N0ZBN0EzOURBNThBRTlBMTk0NDIyOEUzM0FGQgotOjEwQTRCMDAwMjFGRTcxOUQ3MEJEQjRCODBEQTkyMDA1RTk0MEVFQzkxQgotOjEwQTRDMDAwNDMzQUI4MzEzRDg0RjQzOTkyREM5MDE4NUY3N0JCMDQ4RAotOjEwQTREMDAwRjQwQzc2OUQ1MzhFMUNBMEIzOEI1QUJDNDc5NzI3NjYwRAotOjEwQTRFMDAwM0U2QjczMTlFNTU1OUI3RTJGREZBMUQxQzkyQkEwOTczOQotOjEwQTRGMDAwQUI3MUREQ0M3MjZCQjQ3NEIyMzI0RjMwREY0M0IzMzIyOAotOjEwQTUwMDAwQ0Y5RjlDNEVFQ0MxRjA4RDg4NzdDNDUzNUUwNUM1MkI2MAotOjEwQTUxMDAwQkU4QkY1RjdFRjE3NzczOEM2RTI3ODNDNkVENjFGNjQyRQotOjEwQTUyMDAwRjI0MzA5Nzk1OTNBM0NFREI4RDlDREUzRDQxNEZGOTAwMAotOjEwQTUzMDAwMUExOUMzM0MzODZGNjk0ODkwQ0I0NjQ1NDdFRDg5RjBGRQotOjEwQTU0MDAwN0QwMzc0NzRENzcwNzRFNDY2QkQ3NDVFNjNCOTlFOUZCNgotOjEwQTU1MDAwQjM2M0Y4RkM5Q0FGQUI3RjYwM0RCQjEwOUUzNkNGRjc3QQotOjEwQTU2MDAwODgzRUQ3REE1RDMyQkY0N0VERjRENkY1RDFBMUVCRkFEQwotOjEwQTU3MDAwRThGMEVCMUE3OTFDQkZBQjc5RDU3NDhGMTFBQjY5MjI2NwotOjEwQTU4MDAwQkI2OTk3NUY3RDEzRjNDNTk4MTQzMkM4QzUyMUZDQTMzRQotOjEwQTU5MDAwQzlFRDlCQ0Y1NDI4NUY3NTc3QUIyNkU3NUE5RDMyREExOQotOjEwQTVBMDAwRTNDRkZBNkU3QzFDRUJERkNEOTQzMEM2NDNBN0Q4NTZDMAotOjEwQTVCMDAwMTE5RUZFMEFGMzdCMjg0NDcyQjUxNEY3N0RBMjJDMzU1OAotOjEwQTVDMDAwQTRFOUQxQTcxMTBGMzM5NDU2MjEwQkRFRkIxNjI4MzZEMAotOjEwQTVEMDAwQkE4NjU0RDlDNDZDNjVBM0M3QzM0QjQzRTVFMDRCMjM4QgotOjEwQTVFMDAwQzhDMTVFOEQ5RTZGNDI3QUQ2Q0ZEQjI3OTM4Mzg3NEU5QwotOjEwQTVGMDAwNUYwRTFFRkE4NkU1RTA5RkYzNEU0M0FGN0YwM0YyRTY1RgotOjEwQTYwMDAwMzM4NERGMkM2RkRDMUEzRjVGMTk2MjIxOEM5NzhGMzYwMQotOjEwQTYxMDAwOUYwREVDNEQwNUY5QUIyRURENDVGNEQzRjY4NDQwRjlFMgotOjEwQTYyMDAwNTI2MDg3NDdBOEVDNzE5MUIwRDlFQjcxRjBGQ0RGMUQ0NwotOjEwQTYzMDAwRkNCQjU4Q0ZGMTZDQzZEMzk3Nzk1OTNDRUZBNjdCNjUyQwotOjEwQTY0MDAwNTgzMkU0NDlDNTg4MUZFRTUyOEZDOUM1MjJFNkY3RDdCNAotOjEwQTY1MDAwMTIzRDdCMzU3QjQ2Q0ZFQjRGRDdFNEZGODA5RTlGNjk1MQotOjEwQTY2MDAwQTNGMUJDMDU1Q0JFN0JDMURFNDFCQjg4NDk3RDBDRkQwRQotOjEwQTY3MDAwRjg5QkYzNzhGRTNFRjAwM0QxMzc4QzEyNDY3RUM4QThEMwotOjEwQTY4MDAwOTE0Qzc5NUE5QzVGRkMxMkI3NzczMjdENEMyMDVEODNFOAotOjEwQTY5MDAwNzk2MkYwRkUwNEQ4MTM3ODNGNDFBNjZBNkM3NzczRUFCQQotOjEwQTZBMDAwOTUwMkVBQURCRTI2NzdCMzQwRTdGNEMzN0I3RTBDRTVBNgotOjEwQTZCMDAwMkNDQ0Y3MDJCRUYxQ0UzMEQ2RjdCMzg0QjI4NTdGMUUyNAotOjEwQTZDMDAwQUI2N0E1OThCNzU4OTZBRkY5RTkwRTE2MjBGREE4RjkyMwotOjEwQTZEMDAwRTlGQTdEODFFMkM4Nzk1Rjk1RjlBMzg4MkY5RTk3QUY0QgotOjEwQTZFMDAwRTc5OTE4RjU3MTc3MEFCMzhDQUZGRDQ3M0U5NzVCMEQ3QwotOjEwQTZGMDAwN0Q3NUY1Njg1N0FGRjIzMEIyQUI1NkExRUVDNDcyQTZDNQotOjEwQTcwMDAwODNFRUI1MDlFREE5NzQ1OURENTc5MUE5REEwQ0Y3RjM3OQotOjEwQTcxMDAwN0E2N0E0MUFFRUJERjU4N0IzMENFNTlDQzY1QzQzRkREMQotOjEwQTcyMDAwNjA2NEFDRTE3QkRFRDJCMzBDREYwQjlBMkIwQ0U1MzExRAotOjEwQTczMDAwRDFGMzBDRjU4QjAwQzE4OUU1NzFFQjJFMzZENDJGRTlFRQotOjEwQTc0MDAwQkNDQzUwM0U3M0YzQjcwQ0Y1QzdDNzE3MTlCRTlGRkRCRAotOjEwQTc1MDAwQzg3NTg2RUYxM0JBNTcxOUNBRTdFQ0JDRDU1MEJGOEQ0MAotOjEwQTc2MDAwNTlERkRGQjkyMTlGQ0IyOUUwNzc5MjYzQURFRUZBNDYzRQotOjEwQTc3MDAwRkExRDBERDk2MTg4RjMyRkQxRUFFREM5QUMyRUM1Nzg0OQotOjEwQTc4MDAwNDhEQjkxRjI1MkYyODdEM0NGMUJENjFGMzZDQkM1NjQ3QwotOjEwQTc5MDAwRjJEOEZDQkU1RDFCRUY5M0E3REZBRjVFODY3NDhFNDJERQotOjEwQTdBMDAwMUVFNEQyMjdFRUI3RDZFMjlDRDY5N0YxQkMwNEZENzcyMwotOjEwQTdCMDAwMzFDQ0Y3RjIwRkVDNTM0QTJBQ0Q2NzQxOTY4MzU5OUQ2RAotOjEwQTdDMDAwMEY1ODkyQUY1OEVFMkZCNDBCMjExN0VFMTUyNUMzOUJFRgotOjEwQTdEMDAwNEU4RjIzRTFFRDRFQURERUQ3QzVEQjIxQzExODA3NDIxOAotOjEwQTdFMDAwN0RGMjg0MDU1QzdCRjMwN0VFM0I3ODM4OUZFQkFCQ0FDOAotOjEwQTdGMDAwNTRGMjMwRjgzRDBFQTdBQjRGNzQzODQwOUYzQzkxNUY0OAotOjEwQTgwMDAwMzUzNDNGRkM5M0M2RDdBRUJFNUZDMUZBNTdGM0ZBQjZGNAotOjEwQTgxMDAwNTAyOUFFNEJCMjdEQTVCREY5RTY3REE1QUFBNTI4RTdENgotOjEwQTgyMDAwMTY3ODUyODVDNEZCOUE3RkE1RDVEM0UzRDk2REU5OUZFRAotOjEwQTgzMDAwRDNCRTUyOUIyMzU0M0E5QTdEQTU1RkUxOUQxQjU1ODg1OAotOjEwQTg0MDAwN0Y4NThGQTdBRkFCNUQwREM4OTZGRTlERDk4RTYxQ0Y3QQotOjEwQTg1MDAwRTMzRDE4MzFCNzQ0NzlDMzY2RkYyRUFBQzk2REREOUY2OQotOjEwQTg2MDAwOTNGNkQ2OTFCRkRGRTYxRTRCNzkxRjZERUEyQUQyOTc4OQotOjEwQTg3MDAwOUQ0OUZDNUNEMDk3N0Y0NDdDNEVGNURDNjRGMEU3MDY5NAotOjEwQTg4MDAwRTMwMTJBOEQwNzZEQzk2RTZBNEJGMEZGNzE1REQ1RkI0MAotOjEwQTg5MDAwRjlCRERBREY4MDFGRkM1MUZFNjlEODA5MEFFMzdFRjBCQQotOjEwQThBMDAwNzFDNkYxNzQ1Q0I1OTE5RDcwMUNFQzA0OTRCRjZCMjQ2RgotOjEwQThCMDAwNDZGQkRFQjE0QTQxQjFGMjhCM0I1NzZCRjZFMTZBOEU0MwotOjEwQThDMDAwMzdGMzdFQjdEOUNFQjgyNEI0OTJGMEI2MDZFOEM5NTVBRQotOjEwQThEMDAwODlGMTM4NkVGRkFFQjFGM0ZCMzc2NTZGMzg4MEZBQjY5OQotOjEwQThFMDAwREZFRjYwMEYwMUI0N0JGRDNDM0VBN0UzRTVBQkNBQTNGRAotOjEwQThGMDAwQ0M4MjIxNzY3MjY2QzEzMDc2RjIzNEIxQUMxQkVGNkQzQQotOjEwQTkwMDAwM0Q3NjkyQzc0NTE0M0M4QUU4QzM3QkM4RjlGQUFEN0ExNAotOjEwQTkxMDAwN0U0RTZDMDVFQUE5MjJBOTE5RjNENzQ1QTY2NDIwNUVFQwotOjEwQTkyMDAwNTYzQzI3QjJCODgwNzJDQzk4OUY2RjY3Q0QzRkMyNzhGMwotOjEwQTkzMDAwMUNGM0YxRjczMUU2NkE0NTNCMjlBM0M2QThDNzMyNTU5NwotOjEwQTk0MDAwQTMxRUYzQ0VDODMyRTkzNUEzMUVDQjY5MzRFQUIxNjA0OQotOjEwQTk1MDAwQzRBOEM3RjI5NjU2OThGNDlBNTE4RjhEODlENjlCRjQ2NQotOjEwQTk2MDAwOUE1MThGOEQ1Qjc3OTk0OUFGMTlGNUQ4OTk5QjhEN0E1QwotOjEwQTk3MDAwNkM3Q0RDQThDN0NFN0U2NDk1NDlBRjE5RjVEODM5M0IwRAotOjEwQTk4MDAwNTcxQkJFOTdGNzc0MThCRTRGN0FFRTZFNDNCOUFBRjdGRAotOjEwQTk5MDAwMDE0M0ZENzMwRjNDNjRGODNFQjlFRkZGMThCRTAzQTJGQwotOjEwQTlBMDAwNUZDNUYzMEM3ODBGMkQyRUUyRjkxRjNDNjlGQ0NFNTRFNQotOjEwQTlCMDAwMDdFNkUzNUY4RkU3MzM2MTFEMkZFOEZGQURBMTNGRDZDOAotOjEwQTlDMDAwQzlDRjJEQzRFMDNGNUNBRjNGQjMwOEREMDMwMDcyNkMxQwotOjEwQTlEMDAwNUYxRUI0QkIyMTJFODQ3QTE4RUFBNzI3REVDNzdEOUJCMQotOjEwQTlFMDAwNkIwMzIyRjk3MTJCMzBEODhBRjRGMEE4Mjc4RUY0NzAwQgotOjEwQTlGMDAwQ0Q2NkUzRjk4NzZCRTNDNjcyMENFODQ3QzFCODAyRDBCNQotOjEwQUEwMDAwMEZEMkQ3RjVBNkRGOEQwMDdCOTBFOEVEN0E0NTZBNDYzOAotOjEwQUExMDAwQkJEMjRDNUY3RkQ2RTkyQkE2QkU4QUU3MzlGNEY5RUFCMAotOjEwQUEyMDAwRjNCM0VCRTc0RjM1RkE1MzM1RkE2M0UyMkU4MkZCRkFDNAotOjEwQUEzMDAwM0M5MTdFN0Y0NzlGQUYwQUZGRjFFRjFGMzk3MDFFMjdDMQotOjEwQUE0MDAwNzYwQUNDOEJGQkZCMkNCNjJGQ0Y2MjNFMzdFQ0RDRTRENgotOjEwQUE1MDAwNDBGRTM0Q0ZDQjNDOEYyMTc2NkE4MTcxNUY3MTlBRThEQQotOjEwQUE2MDAwMEUxMURGQkQyRTkyM0VBMjI5MjA5RjNEQzZDRkVCQUQzOQotOjEwQUE3MDAwN0E1RUE0NzMzMUM4ODdFODJGODhCMTQ2QzJDQjBBQzA3QQotOjEwQUE4MDAwMEJERTFCQUVEQkFEQzdCNDc2QzcxRTE0RTk3Q0YzNDgwMgotOjEwQUE5MDAwRkNBODY4Rjg3MDA2OENGQzk4QTJBNDlBRThDOTg4REYyNAotOjEwQUFBMDAwQjQ1MjIzN0Y1RUZGQ0U0NTBFOTQ1RkZCMDBERjQyMEQ2NAotOjEwQUFCMDAwNjM5RTkwOTE1RkFGMTc5N0QxM0U5RjhFNjcwNUZFQzM0RgotOjEwQUFDMDAwNzEyNTMwNzU3MURFMzdDMEJDN0I5NEExRjg1REJBNkIxRgotOjEwQUFEMDAwRDNEQTNDMEJCQTE5MDlCRjhGMTYxOEY3RTlGNEZEQjlBMAotOjEwQUFFMDAwM0FDMDhFQzMyMkFGNTRDN0RGMkVCRkZBMjRDQUM3NjQ1MAotOjEwQUFGMDAwRkVGMEVFMDJFM0JFRkEyOEZDRTFERDg5RjJGNjFCRjA3RgotOjEwQUIwMDAwODc5RjJGMTg1NkNGRjVDRjQyN0ZDQUM5RDI0MzFEMTY1MwotOjEwQUIxMDAwNzEzRjg5QzkzRDE4QUZCNTM3RjNCOERGNjBGQ0VFMUI1NAotOjEwQUIyMDAwOEZGM0JDNUI1MDQ1RjdDRTkxOUU0QjkxRjQzODRGRThDNAotOjEwQUIzMDAwNDAwNEVEOTM4Q0IzNDI5ODE3MzVEQTM4Qzc1RjBBODYyNAotOjEwQUI0MDAwQzQzOUZFNTIzMDdDOUNFMzREM0M0RkE4NjZFNDM2RDhCNQotOjEwQUI1MDAwOTA5OUE0NTAyOURERUY4QzIwRjAzQ0E0NEYxMThGNDMzNQotOjEwQUI2MDAwRjI3NThCQjNCNEZDNjM2NUQ4RkNFMzRCQjRGRERERUE0RQotOjEwQUI3MDAwODA3QTEyRTE4MEZFM0VDN0U3QzA3RDZDOTU3RUVBMjdCMQotOjEwQUI4MDAwN0Q4NDdFNjJGNURDNUU4QkQ5M0M5RDZEREM1RUEzN0RCMQotOjEwQUI5MDAwQTY2RjIwOEU5MTVFODg3RUE5OUJFM0JGQ0RDMUUzQjZGMAotOjEwQUJBMDAwQTcxQjY3MEIxNjBFQzE3QkIwNzAxOEJDRkZGREVEMUMxOAotOjEwQUJCMDAwN0U2RTM1MDRENjQxNzk3MkZBRDZDRjYxRUFFNUY1OTkxMQotOjEwQUJDMDAwNDY3Rjc5NkQwNTg3QUI0NDFCRkZEQkQ5REMxRjk4NUNBMgotOjEwQUJEMDAwQzhGOTRGQ0ZCQkM0QkNDNTk0MEEyOENGRTRFNzk0RjRBRQotOjEwQUJFMDAwNzNBRDdBM0Y5MzBCM0Q1NEZGQjM0MEZERTQ0MjNGRTYyMwotOjEwQUJGMDAwQ0RGMkZCNzdENjY2MUFFRkUxRjlCOEEwNkUzMkNFNkJENAotOjEwQUMwMDAwOTJENkZGRTQ0MkM2RjM5OUM3NzJCOENDNzlBNzdGRDMzNgotOjEwQUMxMDAwRUFGRkFEQTA5RTlFNzg4RTE2RkQxMjg3Mjg1QUUyNzMzOQotOjEwQUMyMDAwNEEyMThGMTNFOEY3REU0Q0Q3Q0ZDRkREQzdDRkQ3OTlCNgotOjEwQUMzMDAwRUY1RDAwM0U3OTAzN0YxRkVBRTg5RDc2RjJGNzQwMUY0MwotOjEwQUM0MDAwRDFGOUI5MjU3OUZDMUNBMkY5M0U4NTQ4QTlCQzBGQzVFQwotOjEwQUM1MDAwRUIwOTU2NjY3OTJGQ0Y5MDNDODc0M0I3NTBGRUREQ0I4QQotOjEwQUM2MDAwOTM5OTJDMDQ0N0NFN0JCOEJDRDA3ODNGQzI1NzM4NDc2NQotOjEwQUM3MDAwNzc2NUUxMjhGMjFFMTY2QUU3RThGQTUyQjkxRUVCMEY3MwotOjEwQUM4MDAwQkFFMjBGNTlGOEJCNTE2RDlERUVENEZDNUFEQzlGQzY1OQotOjEwQUM5MDAwN0Q3MkJDREZEQjZBQkYzQzVBQzhFOTY3QjRFN0FBRUY0NAotOjEwQUNBMDAwNzY0NDIyQzhCN0U2NzNENUM5Q0U1M0Y3MzlGQUQ2RTQ0RAotOjEwQUNCMDAwMjBCQ0UzNTkwOEVERjc5QzA1RjI5RTFDQTg5N0RBQTA4QQotOjEwQUNDMDAwRDBGOUM3QjU0NTJDQkQwNkJGOTdEQjQyNzhBRTIzNzNEQwotOjEwQUNEMDAwQUVCQ0Q2OEU3QzVBQ0NCMjA0MjhGN0M1RTZEMEY4Nzc0NQotOjEwQUNFMDAwMzYzMjU5MDRCOEJBMEFGOTNFRkFDMkRCM0VBNUYxRkM4NQotOjEwQUNGMDAwQjUzMDM1ODVDRTlENEY0N0ZGMkNENkM4RThERTQyRjNGMAotOjEwQUQwMDAwM0NFRkQ2RjhDNUI1ODZERjkzOTM1MTZDOUQ4NzdGQjcyRQotOjEwQUQxMDAwNDY4RjIwQjczNjIxNUZENDE1QjMxREZDRkMyQzNGQTcwRQotOjEwQUQyMDAwODBEN0QyNTNGRTY2Mjg5NUY2MDUyRjg1NzVFM0ZCRTc5RAotOjEwQUQzMDAwQkRCNDdFMzcwNUE2REU4RkVCQTlGMzlCNDNDQjUzMzAyMgotOjEwQUQ0MDAwOUYyN0VGMkEzQ0JERjNFNEE5MEJBQ0UxRkQ5REI2REVFNQotOjEwQUQ1MDAwNERGRUYwQ0YxMERFRDREMjRFRkVGQkE1NUY5RTNBMjUwRAotOjEwQUQ2MDAwNTY2QjNGRURBODYwRkI0ODA0RjU1RjBBRTgzRjAxOUY4MgotOjEwQUQ3MDAwOEE0Q0U3Njg5OTRCQTBGM0IwMkVBNTk5RTgyQUE1MjYzRQotOjEwQUQ4MDAwRTRDNURGNDU2MzU3RDkxOERFRTMzMjU1NkJBRjM2MzI4MQotOjEwQUQ5MDAwMDE3RjRGODI3MjAxNDk0RTlCN0U1RjQyMERCNUI3NDJFMwotOjEwQURBMDAwRkI2OUI4NkYxNkMyQkNFRkQwNTJFQ0FGQzE5RDJBNjNFRAotOjEwQURCMDAwN0MzM0E1QjhCOTBFRDdFQkQ5ODVCQzhGQkI5MzlDOTdENAotOjEwQURDMDAwRDBDRkQ5MEZERTNGQjVFQzk1QkRCNTA5RjcwQUFDQkRDNAotOjEwQUREMDAwRkExNUUzRkQ1MzU3QkZGMjc1RUU5RjNBQjhGNUVBNTdGRgotOjEwQURFMDAwRkUyN0VFMTVEMEU1MUJBODIxM0JEQUY1MDc0NDdFOEY0MAotOjEwQURGMDAwREU1RjlGQkFDMjhFRUJCMEI2OEU3NTIzREU2MzlGMDMxMwotOjEwQUUwMDAwOUU1RDgzNzhCNkQ3ODc5RkREODI3NkM5QUFGNDEwRkY0RQotOjEwQUUxMDAwM0Q5MUQ4NzcxMENFNzdEMjk4OENFREY1N0M0MzgxOTUxMwotOjEwQUUyMDAwOTJCRTlFREIyODkwRkRDMEE0RkUxQkIwM0M3RjU3OUFDQgotOjEwQUUzMDAwOENGRUMzNUY5RjdBQjMyMDA2RjRGOUY2RURDNzNEOTgwOAotOjEwQUU0MDAwOUZGQUFFRDRFRjQxQjgzRUI4RUQzNTBGRTJFRkVEREIzRgotOjEwQUU1MDAwNDRDQTQzQTE3M0RGMDk3OTYyNUY2QUY0QjU2MDRDRjhCNAotOjEwQUU2MDAwMzhEMkQ3QzI5NkZGQUE0RUI0Q0Y1OEQ0NEZGQUZFREFFMgotOjEwQUU3MDAwMzg0MDlDNjhGNzNFOTI2NkY4NUREMUU1REQ1RTQzNTk0NwotOjEwQUU4MDAwRDdGM0NCOURENkU3RTYyQkM3NzBCOTc0RURBMzVEOEVFMwotOjEwQUU5MDAwM0MwNUM3OEZEOEM3QzAzQzNGRDBDRTAxN0RCMEMzNDM2RgotOjEwQUVBMDAwNzZCQzBFQ0ZBMjQ3Q0IxRDY4MEZCRkJCQ0JDOTdBMjg5QgotOjEwQUVCMDAwMkVEODZCNjc2RUFFM0YzMEVGMjJDMjg3MUUwMkU3QkUxMAotOjEwQUVDMDAwREQ3OTBFRTRCMzI1MDJFQjc3MTI3M0IzN0Q4OEVGM0Y5MwotOjEwQUVEMDAwNjlGRTlGNzkxRTRCREU5NjFEQjhCRTRCRUE1ODNGOUUxOQotOjEwQUVFMDAwM0I1Qjc0OTNCMEY2NjZBOEJGMjhFMjI2QkZERjNDNEZGOQotOjEwQUVGMDAwQjNCRUI5MDZFRkIzMTFBQ0VFODE2QkRFRjczQkU4RTcwQQotOjEwQUYwMDAwMkFFODA3RURDRjI1OURDNkVGQzc5RUJCNzFERjE2MTg1NwotOjEwQUYxMDAwNzdDNzRFMDdEOThCRDc4QzEwRUYxRjNGNDZEMzRCRDU0MQotOjEwQUYyMDAwRUNEQzUzRTM0OEZGNjU0QzUwOTJEQjFEQkEzRUZBQTBCRgotOjEwQUYzMDAwODU1MTkyQ0E1RkYwRjc3REUxRjk1MThCNENDRkUzODVFMwotOjEwQUY0MDAwMEFBREM3RjUzQkY3RUNBM0RGMTY5NjdBQUI1MURFQ0QyMQotOjEwQUY1MDAwN0M3RTcxREFCN0Q4NjA1RTUxNzU1N0RCMzM1Qjg4MTUzQwotOjEwQUY2MDAwRjQ3Q0Q1MUU4QUVGRDU2OEY3QkY1Q0EzOURGRkE4M0E5NQotOjEwQUY3MDAwNjBDRTU3RERGM0VDRUZEMDZFODNGOTlGQ0VCRDNEMEI3NQotOjEwQUY4MDAwNDY3OTZGQ0ZCMUU3QTZBNkQxRjkwMDFEMkZFNzAyNUU4MwotOjEwQUY5MDAwQzRBRjhGOTc2NEVEOTYyN0Y5REQxNjlEOUY4RTZCN0E2RgotOjEwQUZBMDAwRjdBQTZEQjNEN0U2QzJGODZENEZGREI5MTBFM0M3MzEwQwotOjEwQUZCMDAwQzZFOUJCRUE0MUZFRkIzRjU1RUU2Q0EyMzcxN0QyNjdFQwotOjEwQUZDMDAwMTBGMTZBQkFFNzIxQzZERTYwMDlGNDdEQ0RBRTM0QTI4NQotOjEwQUZEMDAwOTMwMEQ4NDNDRTFBN0NDM0U5QjUwQUVGRUQ0NEZBN0U1QwotOjEwQUZFMDAwOURCNzc3NjlGRTZENjREN0VEQkNGRUVGMUNCMjMzNDBCMAotOjEwQUZGMDAwN0MxOUIwRDFCMzI3NjBBQkIxQjg2N0NCN0NCRjU4QTc4MQotOjEwQjAwMDAwQjFGQzg5QkRBRjEwRTVDQTM1MjYzRkY0MTNDMTNBM0YwNAotOjEwQjAxMDAwRURDQTMxNjM0OTdFNURBNUE4RDMzMTBGNjAwOTBCQUYzRQotOjEwQjAyMDAwRTVGMTVCN0U2RkNGMDc1MkU3QkVFRjIzQkY2RjEzNTg4QQotOjEwQjAzMDAwMENGMEI0RkMzNzhGRkQyQkNBQjFFQjFFQkYyRjFERTUwMgotOjEwQjA0MDAwRDg4NzUyNjczNjhFQjc2Q0ZCOUE3NEJDNUZFNjAzMjlDQgotOjEwQjA1MDAwOTY4RUVEM0Y4QzczNzkzNjQ0NUY4RTExQjQ3RDI5MzUyMQotOjEwQjA2MDAwNUQwMDk5N0MwMzkxMUFGQ0ZGQUFGRUI1QjdDMjM4N0YzOAotOjEwQjA3MDAwMDMzQzIzREZERkIwRTMxRjU0REVBN0JBRkE1OTAwRkIxRAotOjEwQjA4MDAwRUQ5QjhFNzA1Q0RCRTQ2RTZFMERBMTdGNjlFNENGRUIwRgotOjEwQjA5MDAwN0U3NjVGQjY0Mjc5MUVCMTNDMEQ3Rjc5RDhFRTg2NkQyMwotOjEwQjBBMDAwNzZDQUYzNDUzRjFFODc1OUMxRkE2OTdFRTZGNjJCQkE4OAotOjEwQjBCMDAwOEYzQTUwNUVDQjM2RDY5RjdGRkVEMEVGNjAyMTM5OTAxRAotOjEwQjBDMDAwREY1NkVDRDhGMEE5OTg4RUNGMEZERkMyREY4MzVBNjEyQwotOjEwQjBEMDAwQjI0Rjk3NkFGMkRCNENGRkJGMzBEMTNERTA4N0UyMEIwNQotOjEwQjBFMDAwMzE4MDhCRkYxQzEzOTdFMzZEM0ZCRjdGRTI2MTgwRUZFMAotOjEwQjBGMDAwQTM2RDJGQTZFM0VGNERFOEY0QUZERkYzN0NBQzdCRjE1QgotOjEwQjEwMDAwNDJDNzMwRjcwODdEQTJGMUM5ODA3RUQwRjQ5M0IyMTMxNAotOjEwQjExMDAwMDBDQjgxRTIyRUZFNUM2NkVGNDkzRjFGRTZCQkFDQ0I2NQotOjEwQjEyMDAwMUU0MjlBNUZGNjk4QThCQUQxQUUzQUU4MjQ3QjY0RDk1OQotOjEwQjEzMDAwNjNDNzg5NkU5NzA5NkFCRjQwN0E4RUE1QTMxQ0Q3RDdDQgotOjEwQjE0MDAwRUJGQUM3RkUzNDFERTVGNEY1NDE5MUNEMDQ1NkJDRUU5MwotOjEwQjE1MDAwNTcyNzc4N0RBMEYzMTRBODdGRkQxMzg3QTc3RjFGQ0IwNwotOjEwQjE2MDAwMjA0RjVDMTZFQjM1QjU3QjhGQTNDRjZEQjE1RUREODdDRAotOjEwQjE3MDAwQTc2MzdDQkVFREU3N0ZBN0Y1Rjg3MEI3QzA3MjhBODYzQgotOjEwQjE4MDAwQjY1RkRBRjUyNzhBODM3RDA0MEJFM0NERTRGODQyN0REMAotOjEwQjE5MDAwQjNBMjVCNkM3MjY0NThBRDVGQ0ZBQ0RGNTZEMjc3Q0E5NgotOjEwQjFBMDAwMEIxRjY5MUQzNzhDNjE1QzNGRkVFNkIxNUZGRTE2RTA0OAotOjEwQjFCMDAwNThGQTk2MzMzNDEzQzdGREU1OERFOTBDRThFMENGNTIxOQotOjEwQjFDMDAwMzNBN0ZCMUZBRkM5NDZGREJERDQxRUNCOTZFOUM5REYyRgotOjEwQjFEMDAwMkZEREZBNURBMkM3NkI3RUZGREQ2QzZEQkYyMTY4MjM5QQotOjEwQjFFMDAwNzkxMDBCRTIzQzk3M0MzODhGRTY3OTM1OEIxMDNEMkU3OQotOjEwQjFGMDAwRkQzMUJGNjdGMTA0RjhEOTU2N0U0MkE1QzJFNTk2OTNBQQotOjEwQjIwMDAwQUQ5Qzc4QUIwRkU1MjZERUQ5MDI3MDM4MThCRkFGRUJFNgotOjEwQjIxMDAwNTU5RUZGRUU2NDk3NjUyNERBQjkwRTg1REI3MzMxMTYwRgotOjEwQjIyMDAwN0YwN0VEQ0UxNUEwOTY1MUFFODlCRjNGMzExREZCQjkwQQotOjEwQjIzMDAwQTk0ODZBNzY1MjdDRDRGQUZFOUFGRjA3NUM5NkQxMDMzRAotOjEwQjI0MDAwMDA4MDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDBDQwotOjEwQjI1MDAwMDAwQkU1N0QwQjc0MTQ0NUQ2NzBGNUY0QkM0MjVFNDNEQgotOjEwQjI2MDAwMUUxMDA4ODRDRTNCNDg4ODAzNDkyMDAxRDQ4MTQwMEMzRAotOjEwQjI3MDAwQ0E2MzAyNTE1MTIyMEMwMTQzODBCQzQ0NTY3MEY1REI3NQotOjEwQjI4MDAwNzQwODIwQjBBQzA2NjU5NTE1NzQwNzA0QzVFNzA2MDQ3QwotOjEwQjI5MDAwODEzNUMyNDQxNDgzRUVDMTI4QUM4QjJGNzYxMDA0NzkxQgotOjEwQjJBMDAwQzk4MEIwOEVGRkIyRjJERjdCQUIzQkU5OUUyNDAyQkJDQwotOjEwQjJCMDAwN0VFN0VDN0ZGRUVDNTk4QkRCNTU1RDVENzVERjc1QUI5MgotOjEwQjJDMDAwRUE0RTE1ODNCRjA0QzZGMjNFMUVENUREOUJDRTk4ODU5RgotOjEwQjJEMDAwNUQzMERGOUJDNUQ4NDVDNkE0NjdFQzhDNTUzMUEzRUMyNwotOjEwQjJFMDAwQjUzMkZBQkIxMkNGRDg4OUY1OTYyRUMyOEQ1MDc2NjM0RgotOjEwQjJGMDAwNjUwREQwRkUwQUZFREREMjU2NEU5NzA0QzZCMkE5RjlGRQotOjEwQjMwMDAwMjc2QzEwNjM5NUY4MkYwOUZBRDk3NDIyN0YwREY0Q0JCRQotOjEwQjMxMDAwNjI0NDE2MUVDM0UxNjdBMjE4QjM5NTg0NTQ4N0U3QzA0MAotOjEwQjMyMDAwRjcwRTFFMzVGNzg0N0EzOUNBQzA5MjZENTBERkYyMERFMAotOjEwQjMzMDAwQzFDQzFFMkQ2MTdCQjVGRkFBMUQxNkU2NTFDNzAzRkZDOAotOjEwQjM0MDAwQUZEQUYwOEQ5OTYxM0YwNkU2RUIzNUI0N0QzRDYzRDUwQwotOjEwQjM1MDAwMTlCRjhFQzI3OTg0NEJDQkExM0M2MUY2RTVCRjg1REY3NgotOjEwQjM2MDAwODFFRjZFODRFRjk0QUU4MkY2Njk5QUZFQjY5RUZDOUNFNQotOjEwQjM3MDAwNjU2MDdCNzNEQkYzNzhGQ0VGNDIzRTJGQjEzOERDMTU2MAotOjEwQjM4MDAwQzJEODRDOTgyNkNCNkQzRkZGMDU1RkQ2M0VGQUFFQTZERAotOjEwQjM5MDAwQkYwQzI5MzRFQTc4MzBGQzYzMzAxQjdDNDU2QzdCOUYwMgotOjEwQjNBMDAwQUQ4RDY2QUM0N0ZCRjc3RkE4OTExRjdERDc4NDZGQ0IyRgotOjEwQjNCMDAwOEM0MTkzNzI5M0ZCMDVDNDUzRjk2NzE2QkIwQzc4MkMzMAotOjEwQjNDMDAwN0ZFRDkyRDkwMDMwMTM5ODJGQjkyQjYzQTc1RkRERjM3RgotOjEwQjNEMDAwRTkzRDMwOUZEMzBEQTZBODMxRjQ1NTQ3OThEMEFEMEQ2NwotOjEwQjNFMDAwRUY2NTVCQkVDOTVGMDNFRDREODBGNzIwQTA2N0U1RDYzMgotOjEwQjNGMDAwMUZDQzA2NjgxRjkzQzc3QzE2MThGRkU5MjgyNzYzRkQzQQotOjEwQjQwMDAwMTE2RkE2QUZCRDFBQkNFNUMxNzM2RjA4OEQyM0Q2MTBBRQotOjEwQjQxMDAwODNBNTI3OTY0MTU5MTlDNUVDMUU3OEJGRjJBMDY4OTdGRAotOjEwQjQyMDAwMTA1RkNDQjdDNDE2RDJGRUZEQUE4NkEzMDE3NEQxRDc5MwotOjEwQjQzMDAwMzNFNjMzM0JGMUJCNUI3RjdCNUUwQ0QzRTJEREY4QjVEQgotOjEwQjQ0MDAwNTc4Mzc3MTVDRjgxNzhCRDNCMDBBRjk3NTg3QTM4N0MwQQotOjEwQjQ1MDAwODY5RDdBNzk0RTFGNTc3QTdCRkNBQTc4RkRBRTg2MjFBRAotOjEwQjQ2MDAwOTNCNzNFQkZEMDQ3MjIzQzRCM0JFMDQzRERBMUFFNTFGQQotOjEwQjQ3MDAwMjkxOUZCOTQ2OUYwMzhGQjk1QjNDNEJGRkZFODIxMzI2QQotOjEwQjQ4MDAwMTFGOEE2NzJDMzhGNEI5MEFGMDBBRDNFMEJGMDZGQTVDNQotOjEwQjQ5MDAwRkIzQ0MxOEIxRDU2MUYyM0I4QTk0OEM4RTg2OERFN0E1QgotOjEwQjRBMDAwN0MwNkQ2Rjc0MkE0NjZCN0QxREZCNDkwQzlBMUQwQUY2RAotOjEwQjRCMDAwRUY2REQxQkQxRTg2NzY0RUYyODU0NUMwRkMxNjA3QjFGNAotOjEwQjRDMDAwQTk0RTI4Q0ZEOTE0QjhBQjBBQjNBOUQzNjA5Q0U3RTQzRQotOjEwQjREMDAwMEM5QjhDRUYwNUIxNDkwRDQwOUY3MzRFNUY1OEQ3OTA4MAotOjEwQjRFMDAwQjY3OTFGNjkxNEMzMjQ2OEVGNzVCMzgyODY5MEY2N0MyMQotOjEwQjRGMDAwQzg1ODFEN0RERkNCM0FBQkFGQTU3MThFMTIyRkJGRUVDMgotOjEwQjUwMDAwODVFRjVEOTA4RENDMDJERkYzRDZGRUYwQkExN0NBNjNFQgotOjEwQjUxMDAwNDZBQjBERjEzNEEzRjZBRTMwNjY4MEVGMzcyNjhFOUYzMgotOjEwQjUyMDAwMDRFREVFREIwN0Y4QTNFOTM5Q0MzRDAwQkZEM0Y5RDQzNQotOjEwQjUzMDAwRDlCNzRDN0U2QTE4Q0M0RjBDQ0REQUZCMTZCQzVGMEEyQgotOjEwQjU0MDAwODgxNTgxNUY2N0FDRDBFMzY3MzY3Mzg2N0JFMjUxNkUwNgotOjEwQjU1MDAwNEQ2RDdDNDJGRjc1OUIzREYwREU0QzU3NDhGNTcyRjgwRgotOjEwQjU2MDAwNkVEOTVBN0RGREVDQzZEM0M0NUZCMzAzRjhDQjg1RkMxRQotOjEwQjU3MDAwRDVBMzNEN0Y2RDU0Rjk2QjAwMUI4MEZDMzU0QTBDMzExRgotOjEwQjU4MDAwMjAzRjlGNkIxNkREMTY3OEU3QzIyMjEzNUIwMkYwODUyMQotOjEwQjU5MDAwNTcwNTM3ODM3RTJFMzQ0MjIzODQ3NzcwOThDOUQxQzRFRgotOjEwQjVBMDAwQjcyQTlGQUI3ODNCODNGQzk3REExRTlGQURGNURCQkVENQotOjEwQjVCMDAwMUFGNDMwMzQyOTdGRjM4QjhDMzU1MDlFNzlGM0IzOTQ5MQotOjEwQjVDMDAwQjcxMERFRkVCN0I4MkY1OEZCRjY3OUJCN0U5QzQyRTM3RQotOjEwQjVEMDAwREE2NTYxMzhBRTczQkJERThGN0IxOEUxM0Y1QkVDQzg4OAotOjEwQjVFMDAwQjdFNzE2NUExQzBDRjVEREFFNTA3NzMyRDZGNzA2N0U1QgotOjEwQjVGMDAwMDBCQUQ3QkRGRDQzMDZFQTdCQzYxNjExMUQ1QjI0MzM5NgotOjEwQjYwMDAwOTUxNzFBRkY3OTU4QzA3OTM0NUEyNDlDNDdENTJFNDA5MwotOjEwQjYxMDAwMDJCQzVGRjVFNzIwMzdDM0Y3REZGRTYxOTAyQkU0OTdBQwotOjEwQjYyMDAwOUI0RkE1OTlCOTg4M0Y0M0Q5QTQyREM4QkY1RDk5MDMwNQotOjEwQjYzMDAwRTc1M0Y1NTZFRUYzQjVGMEZEOEFBRDRERTZFOTUwOUZDMAotOjEwQjY0MDAwQjdGQjVGMTlBODhGQ0U2RDY5MzJBM0JFRkFDRUU0N0QzOQotOjEwQjY1MDAwOEUwMTdGN0MyMTREQUUzNzAxOUVCRjBCODVDRTdBMzJBNQotOjEwQjY2MDAwMzYyRjdFOEQ1MzBFRTkwODJGMUMwRkU3MDAwRjM4MkY2MQotOjEwQjY3MDAwQzA0Qjk5M0JCRDczN0M1Q0Y4QUZDNUM3RjkyOUY4RkQ5OQotOjEwQjY4MDAwRjJDNkMxNEM4Q0Q3RTI0NTcwRjBFN0ExNkVBQjQwRjMzNwotOjEwQjY5MDAwRTdDRjc3RkQ5MEMxNDJBRTNFNUY1QkJDOTlFNEZERkYxMgotOjEwQjZBMDAwOTdGOTY2QzRGRkI3RDI5N0YzRkI5QjEyQjc0QjgxN0MyNwotOjEwQjZCMDAwREY5RUFGQjczRjQ4RjBFQkExNzYxQUVGMzVDQUZCQjg3MwotOjEwQjZDMDAwRkZEQUY5RkZFRkQwQkJGQ0JGNzZCRTU3QTNGNzNFODU4QwotOjEwQjZEMDAwREVBMTM2MEJFQUFEQjdGRjE1QzdBRTYzREVCRkZEN0Y1NwotOjEwQjZFMDAwNzRERUFERkU4RkMxNkVDRDgyRjE3RENFREM3NzBDMTc5RQotOjEwQjZGMDAwQzgyQkU5RDAxRkQ5MTEyRjUwN0JBNkFDM0JDNjI5N0VBMQotOjEwQjcwMDAwNDUxREZCN0FFNDM0RjhBRTBDRkUwNEZBRkI3NTIxNUZBQwotOjEwQjcxMDAwMUIwRjAyREMwMjdFMDJGQTE3MEM5RDEzQzA0MzRCRDFCMwotOjEwQjcyMDAwMDBGNzcyQjREQkM2NkE2NjAzRDhGNEU5NzQ4MjI3OTUyMQotOjEwQjczMDAwRkM2OENDODJGNjc3ODA5Rjg3RURGN0Q3N0E2N0Q0NDI5MgotOjEwQjc0MDAwRkRGRUFFMDZBOTBFRTBGMThFODlDOTVCMDFCNkY1MTRDNwotOjEwQjc1MDAwNkRCODhFQTk3MzY0NUEyNUNERjhDNkU3RThENzIzRjdFQwotOjEwQjc2MDAwMDRBQzJCRUU5QUE0QUZCRjkzQUQ4RjM2NDI3Rjc3OTY5MQotOjEwQjc3MDAwOTk5ODFCQTY3NDQ3NDBGQkE3RTI2RDM0Q0ZCQjU4RjVFMAotOjEwQjc4MDAwNjI1QkM4RjVFM0U5NzgzQzVGOUZENUIxODFDRDEyRTJGOQotOjEwQjc5MDAwQzUyMURBMzdCMkY2Nzg2Mzg4MzdDNDRCNEMyNjVCNkUyNgotOjEwQjdBMDAwQzdBRjc4OEQwNzAxQjYyOEZFMTVGQzkxM0NERTExNjUwOAotOjEwQjdCMDAwN0QwMUYxNjQ2MTczRDk4M0QwREYyNUM5NTg4REVEMkRFQQotOjEwQjdDMDAwMENENjhEN0NEQ0MyMTVBMTNEREVFMDRGMzIwRTIyNTczNwotOjEwQjdEMDAwOUM0ODMwREVGMTAwNDMzQ0UzRjMzRTMxQkFGNzY5REVDQQotOjEwQjdFMDAwODE3OEJFN0VCQzJFNEM3RTBBRjE1QTE0NkE3NzIzNUZBNAotOjEwQjdGMDAwMzg5RThGMzZDMkY3RUEwMENGODJEMDg2NEYxNTRGODEzMAotOjEwQjgwMDAwNzg3RjBCNzk0M0UzOTdBQjY1M0FGMzRENDFCRjMzOENCNwotOjEwQjgxMDAwODVEOTk3NDNGRjYxRDY1RUNDQzhFN0UxQjNGNEMwQzJENwotOjEwQjgyMDAwQzY3MEJEMjY4RTYwMERDQjYxQkRDNjcyOEM2NzVBRTdBRgotOjEwQjgzMDAwOTU0MEY1OUU4N0UxQkRCQUZCRTE3REM0NkIyRjI2MzlBQgotOjEwQjg0MDAwODlGRjhCNkRDN0ZCRTEzMkNGQzVBRTA0QjdGOTlGMUZFRgotOjEwQjg1MDAwRTU4MEZGMTk0RjI1RjFFRDQ3MUJCOEJGNzk2OUQ4MUI2QgotOjEwQjg2MDAwNEIwNjgwMjgzMTk4QjMzQzA4RkQ1Q0U1NEZGNjE2RTNBMwotOjEwQjg3MDAwN0IyMjMzRDg3MUZEQ0IxQzBFQzkzNjA4RkI2NUI0QUVGNAotOjEwQjg4MDAwMDlDRjMxRThENkJGNUQxRDVENzQ3ODhCMkM4OEQwQzE5RgotOjEwQjg5MDAwRDFDRTlFQkFGNkREMjcyNUU4RUE3QkI4NkVEMEQ1QzdCMwotOjEwQjhBMDAwOTYwREQ0QzFCREFCODdFOERBRjc1OTMwNDIwN0M3Q0I1NAotOjEwQjhCMDAwQjdFOURBMjcyRTlEQTA4MzkzRUJFRkQxQjU0RjVENURGRAotOjEwQjhDMDAwQTJBQkVGRUI5RUFEQUJFRkI3NjlBRTBFRUVERkYwNkI2OAotOjEwQjhEMDAwNURGQjFCNzcyQ0Q0RDUwRkYwMkNEN0Q1NjczNjNGQTE1NQotOjEwQjhFMDAwODNCMzVCOUVEMUI1MUY3QzY4QkRBRTNFRDdGQkIyQUVDNQotOjEwQjhGMDAwN0VFOEI3NUI3NEYwNERCRTNGRUJEQURGRTI3RjQ3MDdDRgotOjEwQjkwMDAwMEY2NzFGRUFEQUU3NTkwRkU4RTA1MUI2MkY3NEVENkZDMQotOjEwQjkxMDAwOEQzOTFBMTBFRkIwQzkwRjY0QTExQTAzN0UwMjM5MUJDQQotOjEwQjkyMDAwMkQ5REQ2QjU4NzE1NUEzMUYyOEQ0OUUxODdEQkQzQkVGRgotOjEwQjkzMDAwRDdENThGQjVGRjUzRDc5Rjk5NTUwMzExOTBBREVBQTk3RAotOjEwQjk0MDAwRUNDMjFBQTgwQzYxMkQ1NDNFRDRERjc1N0IwMkNBQzMyOQotOjEwQjk1MDAwNzNGMjEyNjRBQUZEQjkzRkM0QTExREY5NjhEODAzMzI3RAotOjEwQjk2MDAwRjJEREE1MTg2NjEzMDdDMDc4OThDRjg4N0M2RDA4QkVGNQotOjEwQjk3MDAwRENDQkE1ODkxQjg1Rjk0NUU2QzkwNDNFRjQwQjU0REFGNgotOjEwQjk4MDAwRkNDMUNDMTMwOTdDRTgwRkEyMzJDMjFGNDlDRjIzRkRCMgotOjEwQjk5MDAwNURBOThDRjJDN0QyRjM2ODdGMEYyQUJCRjkxM0E5RUMxQgotOjEwQjlBMDAwRUU4RkE3MzJDNkRGOEZDQTFFRkVCRTU0RjZGNDY3RDJGMgotOjEwQjlCMDAwN0JCMUZFMDE1NEY2RjIwRkE1RTdCREZEQjk1NEM2RjlGRgotOjEwQjlDMDAwRjNFODc5MUZGRjcwMkEyNUZGRUQ1NEM2RkI0NzUzOTkxMgotOjEwQjlEMDAwRTA5RjQ4RUQxMkZEODU1NDI2RjkyN0QzRjM2NEZGREQ3RgotOjEwQjlFMDAwNTRBNkY4QTc1Mzk5RUE5RjQ2NjU5QTdGMEU5NTdERkQ2OAotOjEwQjlGMDAwQjNBOEJDQzFGRjAwQkREN0NGN0YzRjk1RTlGRTg3RTk2MwotOjEwQkEwMDAwNzk3RkZGNDM1NDY2RjhFQkE4QkNEMTVGNEJBNURERkZGRgotOjEwQkExMDAwNUI2QTM3QzBCRjhDQ0E4MUZFMjdFOTc5QTY3RjI1OTU2RQotOjEwQkEyMDAwNTlGRTM1RjQzQ0RCRkYwNzJBMDdGOTlGQTc3MkIwN0Y2OAotOjEwQkEzMDAwMUQ5NTM5RkU1N0E4Q0NGNUJGNDRFNTEwRkYxQkY0REU3OQotOjEwQkE0MDAwNTBGRjY2MkE4N0Y5REZBMkU3MzdGOTc3NTI3OUIzN0Y4QgotOjEwQkE1MDAwMEYzREJGQzVERjQ0QTVDM0ZGMjEzRDFGRUVERjQ3RTUxNgotOjEwQkE2MDAwMDhGRjAxN0E5RUU3RkY5OENBOTFGRTJGRThGOTI4RkZBOAotOjEwQkE3MDAwNjc1NEU2RkI4RjUyNzlBQkZGMDg5NTA1RkVEMzU0OEVEMQotOjEwQkE4MDAwRjY5RkE0RjIzNkZGRjdGNERFRURGRUYzNTQ4RUYxRkZERAotOjEwQkE5MDAwOTM5RThGRjVGRjQ4NjU2QjNDNjE5ODI5NDAyRkI2RUE2RAotOjEwQkFBMDAwM0ZDMzE1Mjg1OTQ4NDQ4N0YxQjZENkY3MTU3REJDMzJGNwotOjEwQkFCMDAwRjgzOTg2NzE4RjcxRDUwMkFERDM5RjBFRkVFRTVERDIzRgotOjEwQkFDMDAwOTNCOTE2MDlFMUM1RDhCNDA3RkY4RUFEMUI2M0Y3RTI0MQotOjEwQkFEMDAwM0YyNEM2OUE3MjJEQjQ3RURGRkYzRkZDQkQyNUMzOEY4NQotOjEwQkFFMDAwN0VGOTAwREFDN0ZCMkQwQ0VENjNBMEZFNTVCRkZCNTFCQwotOjEwQkFGMDAwQ0U5RTY4RjRDMzk2MENGNDk2NjNGQ0U1NzdGMURFNjJBMwotOjEwQkIwMDAwMkNCNzI3NzA3RkU0RjUwNDZFNkZCNzI1MThBODdDQkNBRQotOjEwQkIxMDAwQkY4RENBRTJGQjkzQzMyOTRFMTU3NTZERjNCQUE0RDg0NQotOjEwQkIyMDAwN0RCNUZEMUY5MjE0MzhDNDE3NDdGNkUyMUFGQkI5RDY0QgotOjEwQkIzMDAwNzY4QkFEQkZGOTIzQzY3NTFDNzU0NjE2NzQzM0MwNDZBNwotOjEwQkI0MDAwNkVFRkU1MkY0M0REMUI2MTRBRjI4OEVBMTczMUNFMjMwMQotOjEwQkI1MDAwMkZCNEQ4RUFBMjEwQ0ZCRkY5MTNCNjVGQzA5OEQzMDJCMgotOjEwQkI2MDAwRTUzMzA5QUVGREE4MTc3RTA4OEE3MzgzNzE4NEJGRUFBNgotOjEwQkI3MDAwQzExMzQyN0ZEMUZFM0ZGRjVGRUVGRkY4Q0ZGNUZGNzdBNQotOjEwQkI4MDAwODU4RjZFNEQ3NDlFNEE0MEJGQzBFOEM4NDAzQThDNThCRAotOjEwQkI5MDAwRDg0MzhDODJGN0E3QUQxMDZDQzg0N0QzMTcwREM4NDdBMAotOjEwQkJBMDAwRkUxOEM4MUMxNDI3QkQzNzkyNEQ3NTc2RTA5NzQ1MjRDMgotOjEwQkJCMDAwMUExNEZGNDIzMkRGMDVFMzM5Q0I5ODA3RkQ4OTEyODk1OQotOjEwQkJDMDAwMTE1Rjk2MzQwQTZFOTlFMkQwOEVCMEIxNjBCRkNCMTQ4QgotOjEwQkJEMDAwQkUyRDU5NUE2QjlFMEZFRDJBN0FGMDc4MTk3M0YzNzhCRgotOjEwQkJFMDAwOTkxNUZFODc3MjM0QTc3RURENUUwQTM3OEE5NzI5M0U1MwotOjEwQkJGMDAwNzYwOUZENUU2MDlEMzk5QkRBQzc2M0U3NjM5Qzc5ODdCMAotOjEwQkMwMDAwRDk4Njc2QTNBMjIxMjA5RTFCMTAzNzBCOEM5NzA1Mjc3RgotOjEwQkMxMDAwODY0NkExQkMzMjNCQjNGMzM4Nzc0OEU5REZGMDdCMkM5MgotOjEwQkMyMDAwNEMxMkEzQUU4RTE3MzUzRTJCMzFBOTNCRTI3MTk0OTg4RQotOjEwQkMzMDAwMUU4RUVCOTgwQkNEQzlFMTBDNEI0OUVBOEVFRDVDNDBCMgotOjEwQkM0MDAwOEIxNjI4MDVBMzZCMzAzRTA3N0NDQTQ4NTc1RjZEQjA0MgotOjEwQkM1MDAwN0IzRDhDRUIwOEQ4MTMyOTEzODVEQjM1RDg4Q0YxQzhENAotOjEwQkM2MDAwQ0Y3QkIzRTUwMjUxOERGQ0IwQUEwRDIyRjlGNURFODUzQwotOjEwQkM3MDAwRkY1QzgyNzFFQzU5RjE0NjVBMDc0Q0MzOTgzQjhFNkZCQQotOjEwQkM4MDAwNjc1N0I3MkM1MEJGODQ3N0RGNkIwMkM1NUQ2NTM2MzdDOQotOjEwQkM5MDAwMDZFM0JBOUFGRDEwRjI2QjlEOEJBM0M3RTUyMDlEOTYzMwotOjEwQkNBMDAwNzYxRDY4NDE1QUM5OEU0RjkzQkE2OUU4QjNBODhFRjBFMQotOjEwQkNCMDAwNUExMjEzQzlFOUIzQzM0NDdFMkREMEE3MTZFOTMzQ0I3QQotOjEwQkNDMDAwNkQzQUE2QzVGMzI1NzZEOThDRkIzMTI1NEJDRjEzQkQzNAotOjEwQkNEMDAwNjZCN0QxNEJEN0FFQTJCRTg5RTgwQTc0RDIzREFGQUFFRgotOjEwQkNFMDAwM0VBMUM2RDE4RkZEMUNCRDg2MjcyQUYxNEQ4NTVFMTg2OQotOjEwQkNGMDAwM0ZCRjBCMkIxRjg5MjRGRDUwQkNEMDkzNUNBREUxRDMxQgotOjEwQkQwMDAwQzA3RDg5QTQxOTQzQzI5RDIwMEYwNTNEMzkzRDk4RDFCRQotOjEwQkQxMDAwREUwREU5RjlGRDhBNkNBMjU3MjA5RDBBN0U5QTRFRjQ0OQotOjEwQkQyMDAwNjA5Rjg3QjI4RDMwOUU3QjEzRDlENDA5RjA3Q0FBMTIxNAotOjEwQkQzMDAwN0ZCREI3NkU3NDAxQzZDQkVGNEVFNEZBRjIyMzU4N0Y5NQotOjEwQkQ0MDAwM0E2MEZERjk3MThEOTUzOTQwMzUxRkE4QjExMUZDRDdDNgotOjEwQkQ1MDAwOUExODgyRkY1NjIzNTFGOTU5NEQxQTk1QzdDQ0FDQUNBRAotOjEwQkQ2MDAwNDEyMzVGQzAwMDY2MUNERjU0NDVBRUE2MjZBQUZCNTJFNQotOjEwQkQ3MDAwRjM2MjMwRUU1RUYwRDM4MTZDMDNBQTUwQjlBMTcwRDRBNwotOjEwQkQ4MDAwNERCOEJFMDAyNDY4RjAzM0E5Mjg5ODdDNjkxNUY2OUE0RQotOjEwQkQ5MDAwNkNGOTMxQTgzRjk2MDlGNjhENDg1N0U3NTA1RDdCOTZDMAotOjEwQkRBMDAwOTZEOTA2QTNGRDMyNzI3RTAyQkU1ODhGRkM3N0Y3OThCMwotOjEwQkRCMDAwNDg1REZCM0I5N0M2RUFFMEY5ODkxMjhEQUZCMDIwNTE5MAotOjEwQkRDMDAwRjdGQzlFRTI3RTNBNzg5QTFGRDZGM0YwQTkyNEE5QzAyOAotOjEwQkREMDAwMjA0M0ZGMTdGRjYyMjI3RUJFNTgzREI4RkI3QzBFMTM0NgotOjEwQkRFMDAwREYwNUUyRkY5ODU5QTYzODgyQkNERTYyNDdGREY3NkQ5OQotOjEwQkRGMDAwMTBFN0VGNkZGRjJBQkFFQjY4REQyQjUzRENFNTkyRDUzNQotOjEwQkUwMDAwMjZFMTNBRTVDMUU5NzIxQ0Q2M0YxODBDMkVGOTAwQzRCMAotOjEwQkUxMDAwOTdDODMwN0VDMDVFQjY5MEZFOUNCRTVBNjAzMkNBODgxQgotOjEwQkUyMDAwOEZEMTdBNzlERTRCMTY5QUU3OENENTIyNzM2NTEyOUZGMwotOjEwQkUzMDAwQzQ2MUZCNzlEMTEyRjU3NzZGQTJENDgwRkNFQ0RCNjg4QQotOjEwQkU0MDAwQjFBRjg3REFFOTVFRTU3RDYxMjBFRDgzNTRDQ0ZEREI5RgotOjEwQkU1MDAwNjEyM0NBNDM0QTRCMDZDNkY3OEJFMzNERDFBODA3Q0ZGRgotOjEwQkU2MDAwNkMzMEQxQkU1Nzg1QjhBRTM0MDQ0ODM0RTc3NzZGODQ2MAotOjEwQkU3MDAwRTU0QTI0N0U4NERGNTMxRjQ3QUZDM0Y5QjdDREQ3NERDMgotOjEwQkU4MDAwNzExMTZGMUZFN0IzODk4MENGNTNBNUVFMEM1QTI3M0Y3RQotOjEwQkU5MDAwQzJFM0YxRURGMUMyNDg0RkM5ODYzMDY5MjNDRTc3QkFDQgotOjEwQkVBMDAwNkJCMDJENUQ2QjBGRjlCRURGNzQ5M0JEOUIzRDFEQjk2QgotOjEwQkVCMDAwM0ZBQjA3RUE4MTYzMkI0QzA1MTg3NzAxQkQzRjBFRjFCQwotOjEwQkVDMDAwNzRBQzNFRDJCMDlDMTY1NTVCODhCRjRBOEM5MjU5RkIyRAotOjEwQkVEMDAwREQ5MjE1QTI4M0RBODM3RTJGNDQ3QkJENTI3NEIxQzFGQgotOjEwQkVFMDAwMDhENzUzRkZGMjUyQzE4NUZCNEU0OTJDQTczQkYyRUQxOAotOjEwQkVGMDAwMDNGNzBGRUU4RUYzOThEMkM5M0VFMzc3MjAzMzJFQ0RCMQotOjEwQkYwMDAwM0VENkVDQjc0NUE3MUJCRjk3RTUzNTE2RjVENzhFOUZGNAotOjEwQkYxMDAwQzc4MTkyNUM0QjdCQ0Q0NTNBNkQwRUIyMkY5NzUwQUZFNwotOjEwQkYyMDAwMjY4NkUzM0FGNUU0NDFCMDFCRjA4RDU5NzU0RDE5MTJBMAotOjEwQkYzMDAwQjA1RUY5MDNEQjg5MEU2NUUzMUE1MjNDRjBGQzYzQUI5QgotOjEwQkY0MDAwRUJGRDQ0OThDMkI3M0QxQTlFMUE4QTcxQTJDNkU3RTM3OAotOjEwQkY1MDAwNjRCNDgzMEJGOEZFREFFQzk3NjdGNUQxRkFGM0VERkRFNAotOjEwQkY2MDAwMDkxNjYzQzhDMUMyRDM0RDAwQkNCODI0OTY4RkY4OUQ5MgotOjEwQkY3MDAwQ0MxQTk0Rjg4NTlCQzYyN0ExRDIwNTdDRDhDQUY5RkVCNQotOjEwQkY4MDAwREI3NDgzN0RDQTgxMkM0NDdGQTgwREU5QTJGNjc3RDRBNwotOjEwQkY5MDAwQzRFMzVDOUYyNzBBM0EzQjFDOURDNEU1N0JCQTgxQ0I3NgotOjEwQkZBMDAwMUREQjI1MTA5RjAyQzEzRTRERDJEOENCMkFCNjgyRUNCNAotOjEwQkZCMDAwNjU0Q0FDQzg3MERGRUU2NDYyODRBMjE3QjhGRDlCODM0OQotOjEwQkZDMDAwRjYwRkY3ODU2RDAyQzk0N0Y5MjY4QkRCMERGQzk1OThCNgotOjEwQkZEMDAwQzRFNTczQjZGOUI1QTcwNjYyRjNGODZBMzM3RTY3RDY4RgotOjEwQkZFMDAwNTY4MTNEMDM0RDRGOTlEQ0E1MkRCODJGNjU1QkI3MjhEMQotOjEwQkZGMDAwODJERTMzRDlEREM4QTc4QTdFQjc4MjQyNDBCRDMwMTNDNgotOjEwQzAwMDAwRkYwOUY1MTVBQjA0Qjc4N0Y4QzU0OTc2NjgwNkM2NEQzNAotOjEwQzAxMDAwNzBGRDhGN0E1RUEzNDdEQUU5RjcwMEJEN0UxRkQzREJBMAotOjEwQzAyMDAwMjM1NkFGQjcyRkNFRTA1MDJCOEU3M0Y2MkFFRUQ3QjYzRAotOjEwQzAzMDAwOEQ0NzY0NTcwMDU3QTUyRUY3REU3MTM0NUU4MUUyMjJFQQotOjEwQzA0MDAwODFERjlGODlFM0MzRjFDMkY4M0NGNkVCMUY0RkE5OUQ0NgotOjEwQzA1MDAwQ0I2OTc5QkRFMDc2NzczMDNFMTVBRkUxQzM5ODg0RjZDMQotOjEwQzA2MDAwNzlDRTA2QzE4REZDMzgyQUVBN0VDMkVGNkNDMDZGMjRGRgotOjEwQzA3MDAwRTI1NTc2ODZERDA1NzAyOTMwOTI5QkUyMkIxQ0ZGNTUzOAotOjEwQzA4MDAwNkIzOUZFODFDRTlGNjhFREVFMzc1MTNFMzNFMkY1MUJGMgotOjEwQzA5MDAwQjA5RjMyRUUwNzU2RkY0MDc0REYwQkY0NDVGOTlEQjVCMwotOjEwQzBBMDAwRDk2REM2OERDOEQzQUMzRTJDMDRGOTdFRjVDNzdCNzEyMwotOjEwQzBCMDAwNTlGMENEQUEzN0JBRTFGQUI1MzhDMjkzNkMwMEJEMTU3NAotOjEwQzBDMDAwMjk0NzNDNTE3MDUzMUJGRjA1REFFQjc2NzYzOTAwM0Y2OAotOjEwQzBEMDAwMzI3MzkyMUQ2QTg3MjdFQjhBMTZEQ0Y3NkU0NzNGMjU3RAotOjEwQzBFMDAwMkU3NjFGRkUwQkYwNzNERjA2RDExMTk0QTE2QkE3OUM3NwotOjEwQzBGMDAwNDc5MDg5RkZDQjY0MUZGOTA5NjUzMENGM0ExQjNFOTUwNQotOjEwQzEwMDAwRjMxMTJGRjdEOTE5RTlEREVCMUQ2RkUwMzg5OTU4NEM4MQotOjEwQzExMDAwRkM4OTcxM0RGNDQzRkVEREYxMDZGQTFGODU0OTNGRUZDRQotOjEwQzEyMDAwN0YwNEVBOTE0MEZGRTM0QjkzQzNCMDEwRkRCRThGRjk0QgotOjEwQzEzMDAwQkVGODQ1QTNBNzM3Q0FFRkM1QTgwNDNCQjQ2OEQzQTM4QwotOjEwQzE0MDAwRDEwM0JCQTM5RTU3RjU2OEE5NjJCN0Q0N0VFRjQzN0JBQQotOjEwQzE1MDAwMDVGMEYxRDU2Rjg0MjFERDU1RkFDRjQ0M0I5MURFNjZDMQotOjEwQzE2MDAwMjcxRTlDMEVGREMzRjcxRURDMUU0NEZEOUYxRDBCNzY5MwotOjEwQzE3MDAwMEFGQTJDN0VGNkZEMzBBNkQxN0YwQkZCQjgyQTkyNTAyRQotOjEwQzE4MDAwOUZBODc2NEQ1QzE3NjcwM0ZFNTJGNUU1RDVENjVEOURGOQotOjEwQzE5MDAwQ0UyQjI0NjA1RUExRkE3OTk1RTBCQzMyREJGQTlCQUUyRgotOjEwQzFBMDAwQ0NFQkVCQTU3QzNFNDc1N0YwRjlDRDY4MzcyRjZFRjcwNwotOjEwQzFCMDAwMUY3Q0RFNjI5N0M5MkZGMDQ0QTMxQzdFQkI1OTY0NzVCNwotOjEwQzFDMDAwNDQ1RkVFMzc1Q0IyMDIzRjBEQzBGOENEMEFCMkVCMjdGOAotOjEwQzFEMDAwQTM5OTg0NzE5RDRFRURGNzRBMEJGOTA1QjNCNkYxRkRCNQotOjEwQzFFMDAwRDY1M0MyRjBFRUI0RjFGRkFFMjdFQzIxOTRFQjJEMjIzMgotOjEwQzFGMDAwNDMzQkQ0MzY5RTU2QkJCRDJBMjk1QTYzQjdBRjExNkY1NQotOjEwQzIwMDAwMTg2NzQ1N0I1NjA5QTg0M0JFQUY2Q0VDQ0VGMDlDQ0JCQgotOjEwQzIxMDAwOEFFMUFDNDFBNDdENzgyRkU5MzE2MDIxOEE0RjgzMUZFOAotOjEwQzIyMDAwQUU4QjM3NTg5OERENkE0NTNBNzUxMjdGRkQ0N0YyRjlCMwotOjEwQzIzMDAwMjk3MzA5MUZCRTE0QzRCRkZBRkRBQTJFMUU1Mzc3RjQzQQotOjEwQzI0MDAwNkIzNjBCRTRENzU0Q0MxQjFFMzY5Q0UxNzc3OERDNkM0NAotOjEwQzI1MDAwNEIxMkI3NTNEQjE0M0QyNzM4QUEyOTJFMDYzRThERUQyRAotOjEwQzI2MDAwNzExQ0Q3NUExRTFGNjZFRkIwMDZDNDJGQzIxNDNGMzY4QQotOjEwQzI3MDAwRjA3OTA4OTI4RDE1MEZFNDcxNzkyQkRBQjUxMDAzRDk5NgotOjEwQzI4MDAwQjU0MDNDN0NBRDdDQTc0MjM0OTBGRjVCNkVFNjdFRjAwRgotOjEwQzI5MDAwMzk4MTlGRkY3ODQ3QjE4RkVGMjQ3MTdGRjhGRDI0MUUwRAotOjEwQzJBMDAwODczODg3N0UyMEY0N0JFRTI2OEJCQjU2NDBCN0Q1NDg3NwotOjEwQzJCMDAwRUI2NEUzMzA4QjFCRkQxOUEzMzVDNDIzNjYyMDdBOEQxNAotOjEwQzJDMDAwREZCNUNBMzNFMDZCMEE2QjMxMjEzREM3RTVEQ0JGMDkzRQotOjEwQzJEMDAwRTc3M0I4MjdCMzg5NURBOURBODlGQjA4OTM0OTMzMzAzRQotOjEwQzJFMDAwQjZERkY0RTU3QjE4OEY5NEExQUQwODZCODVDOTM5MjdCQgotOjEwQzJGMDAwN0E2M0ZCQjUwOEMzRkMwRjA3MzVCQzg3NzE5NkMzRjFBMQotOjEwQzMwMDAwNDY4NkZCMDJGMkRCMTZCMkZGQTYxMURFREUxNEE3RUNCNgotOjEwQzMxMDAwQzI1OEREMDA4Q0M3RUM1OThDN0NCNDM3MjYzMkNEMDY3MAotOjEwQzMyMDAwRURBNzFBQkJEODQ1QUU3RjQ2OUVDN0YxOTYwOTdDRkZBNAotOjEwQzMzMDAwNjY5MTM3MUJFOTczMjM1QjY0M0I2RUE1QUQ4NUFENTdGMgotOjEwQzM0MDAwMjI3RjhFN0Y4Q0VDQjhDQTA3MzBBNkYyMTFGMDhGMjFDNQotOjEwQzM1MDAwOEMzMzU2MEVFMTUzMDcwMzVFMDlGRTIxNjlERTg0NTVENgotOjEwQzM2MDAwQkQ3MEQzNDRFQThGNzQyRTRGRjAxOTcxM0ZDNTI3MzA0QQotOjEwQzM3MDAwREY3QUMwQzMxRDM5M0VBMzAzRTlFNTYwMERFMzgxN0Y4OQotOjEwQzM4MDAwM0RGQjk4ODBERjQxMTFDMEVGREVFNTQ5MTg4NTc4NjBGQwotOjEwQzM5MDAwNjkxMjBCODdGQUYxNDY4OUUwNUUwNTJDNDI1NEY2MERDRQotOjEwQzNBMDAwMzA4RTc1NjhBODQwNzQzMDU4MjUxM0NFREI1OTIwMENBOAotOjEwQzNCMDAwQzQ3REQxRjI4NUQ3MzZDRUEwOERCRjk5QjA2QTE4QzBBMgotOjEwQzNDMDAwMDYwMzVGQ0YzRUM0RDdCMzkzRTUyM0EzQzg0RjFBQzY3NQotOjEwQzNEMDAwMDRFNEMzQUE4ODA2MTNBREEzNDE1RTcwRkMwM0EwMUI0RQotOjEwQzNFMDAwMkRGRTI2MUJCRDdDN0M2NTMwQkU1Qzk0OEIyNEUyRTM3NQotOjEwQzNGMDAwN0JBQTA1RjIyN0FCQ0MxREM3MzVBMjkzRDU3RDM5OUIwRgotOjEwQzQwMDAwODRFREU3QzBCRjkwQUZFNzM0NkU0RkM2RUZBRDEwMzg5NAotOjEwQzQxMDAwMUZDQzUxRjlFQzU1QkQ1QzBFNEU2NkM0QTc5REYxNzU1RAotOjEwQzQyMDAwOTZEMjdGNTZCMjgxOUZFMzZBRkQ1RTAzRDlERDM5OERENgotOjEwQzQzMDAwRUYxRkMyNzU2NTY3RkQ1NzU4OTg4N0YwRjJCNjg1RTIyMQotOjEwQzQ0MDAwMDc4MkMxOTc0NDc0NDE0NDAyMUQyNkEzM0YwOTJFRTI4RQotOjEwQzQ1MDAwQzA2NEVFMjdBQUZDNTk4QUZFNDcyMjk2M0MyRTYyMDA1MQotOjEwQzQ2MDAwRTU4OUY2QjBBQ0ZFNzkzMzIyMkRGMEZDMTEzODNFNzQyQwotOjEwQzQ3MDAwMEU2OEY2ODZDMEU3OUFCODhBQThEMzNCMTRGNzE0Q0NBNgotOjEwQzQ4MDAwQkUxOTM4MUVFMUU2MjAzQkVBRTNDOUU2MDY1QTk3MDdFMwotOjEwQzQ5MDAwQjYzM0Q1NzMzRkNCQjQ5NEZCNTlCNEFGMDZCMDY1MDU0MgotOjEwQzRBMDAwRjczMzI3RjdGMkY1NjdBNEU3NkNGOTQyM0M2QkY1OEI5RAotOjEwQzRCMDAwNEJGOUE3RTE3OUI5Q0UyRkI2NjAxQzAxRTM1RUFCQjlBOQotOjEwQzRDMDAwM0Y2ODU0RkNENzkyMTU3QTdGNjFGMjIyOERCRjQ4REQxOAotOjEwQzREMDAwRkEyQTcwQkNBNjQ3ODIyOUVFNjI0MTdGNDJFMzA3RkMzQwotOjEwQzRFMDAwREQ1MDI4QTMxRTk2MTM4Qzc0RkVEMkM0MDJGRDA5MjdDQQotOjEwQzRGMDAwRTNGMTRDRkVEQ0E4Rjg4OTIzOTM0REJBN0QzNzc5MDQyQgotOjEwQzUwMDAwNEI0MzNDMTRBMzFFNEE0NDU1RTM1QzhBRjFCQzBCMkNGQwotOjEwQzUxMDAwQjQxRUUzNjZBM0M0NDcyOEZFNTc1Q0NCQ0ZBNTA1QzY2RgotOjEwQzUyMDAwRkYyRTU0QkZGNzJDQjZDNzdBN0MzRUJGQ0I0RjcxQjhGNQotOjEwQzUzMDAwQkYwOUNCNTJBNzcwMzNDODc3OTdDMzk3NUMyODFGQTA1OQotOjEwQzU0MDAwQTg0QzI4RUY0MUZCQkY0MTU4MzA4NDMzMjEwN0JGRUY4RgotOjEwQzU1MDAwNzkxNkZCOTdDRDU2MUJFQUFEQTc4M0MzQTg5RjA1MEJBMQotOjEwQzU2MDAwMDQ4QTBGMkZCMjcxNzlGQkVBQ0JEMEY1QThBN0Q0Nzg1MwotOjEwQzU3MDAwRUY5MkUxOTlBQkYxRENEMjZGOTI3NzRGQjBGNjQ2RjVDRQotOjEwQzU4MDAwQzBFOERDMTIxOEM2NEYxQzMwOUZBMkNCMjAzNzA0QkY3NgotOjEwQzU5MDAwMzdDMTExMEU3Q0ZFOUU2RjhBMTVGMEI0NkFFMzdCMTNERgotOjEwQzVBMDAwOENDMDhGRTc3RUVGN0IwRUUxMTczNkVFRTdGMEVGN0M3NQotOjEwQzVCMDAwNzE0MTA4MjcxRjk4NjAwNDM5M0E1N0FCRjY3NzYwODJCQgotOjEwQzVDMDAwMDNGN0RERkZDMEUxM0FBODk3MDEyRTQ2RkQ4NkYzMUU3MgotOjEwQzVEMDAwMjJEMEJBN0YyM0RBQTVFOEI2Nzg0RkIxRTExRDVFOEU4RQotOjEwQzVFMDAwNjAxRUI0OUY1NzZCRjdBNzY0RTc0NkI0RDc2MkU4QjEwMwotOjEwQzVGMDAwNTBGNDJGQjZBNjNBMDhERTkyRTg3QzJDMTlGREEwODNGMQotOjEwQzYwMDAwRUU2RUQxMThDNzMyQjAxNkE0MEJEODMxNDc0N0ZCRDIxMwotOjEwQzYxMDAwMUI5M0I4RkM2RTRFRTFGREE5Rjg4MjdFOUU0RThFQkU0NQotOjEwQzYyMDAwRkU3RTZFNjlERjhGRkJERjE5NEY5NzU0RTgyNzVCRDdEQgotOjEwQzYzMDAwQ0Y0QkZGNEUzRkU1MDFGREE4N0UxQjM4QzAxMkVBQTk5MwotOjEwQzY0MDAwRDM2OThFNzc3MTlFNzM3RUUzMThCMTE1RjVDRjdFOTExNQotOjEwQzY1MDAwRjhGNEZCRUFFRDI5NjhGN0JGN0ZENTEyODlGNjZGQ0VCMwotOjEwQzY2MDAwRUIzQkUzNEEzMThFQTBGODQ1QTc5QjNFMzM0QkYwN0U2RgotOjEwQzY3MDAwQTU1RjY0MEVEMEQzNTU3RTgxQ0FDQUFENERFNkZDNzQ2OQotOjEwQzY4MDAwM0M1N0RCNjRDRUQzOENBQjVDMTkyNzcwQkE3MTgyQzY4MQotOjEwQzY5MDAwOEZEOTk3QUNDNjlGNTdEMjc4RTdCQzdFRDI4OEY0OUNERQotOjEwQzZBMDAwNjM2ODM4OEVFNzhGRDkxMDFFRjcwQTlDREYxNkU1QkQ0OAotOjEwQzZCMDAwQzM3OERFQTA4MzM4QzA0N0M5RENFRjg4RTlFN0Q4OEZBQwotOjEwQzZDMDAwRjNEQjhDRkExQ0Y5QzVDMENGODcwNEI2RUY5RUMyRkIyMgotOjEwQzZEMDAwMkJFRUMyRjU3Q0Y2NDE3QkU5MDE1QUY3NjUxODQ0MjgzOAotOjEwQzZFMDAwMDcxREFBMzY5N0MwRjMwMzg5MjMwRTI1NzcxODg3RjQxMAotOjEwQzZGMDAwRjEzODY0MjM4RjQzMTY0N0I0Q0MwMzYzQzYyMjUyMkUwRAotOjEwQzcwMDAwM0M4MUYyNzZGQkQzQUE3QzgwRTg4MTdFMjlCMEE4NzBCOAotOjEwQzcxMDAwRDBDNDkxQzM3ODlDMEJFMTRCMUIwRDRGRTIzOUMyRTZBQwotOjEwQzcyMDAwMkUyREJGM0E4MEY2NjE1OTI4NUIwRjcyNzZFRkUwRDA2QwotOjEwQzczMDAwQjgyRDMwOEVFOTcyQjgwMEI2OTMwREI3ODRBNjRDODMzRAotOjEwQzc0MDAwNzYyNzEyODY0N0E0RjBGMzI3RTQxRjlFNDg3MDlFQzUwMwotOjEwQzc1MDAwRjE3OUUzODMwREUwOEMzMDk3OTlDN0IzNUMxRjg4MTQ5RgotOjEwQzc2MDAwQ0Y3MjY1MDRCQkRDMURFMEVCQjQ4MkNGODgxNEVFOUY3MgotOjEwQzc3MDAwMzUxQjYwOUMwMzcxMUNGQzdDMkZGQ0M1NkRDMTc4RDNGQwotOjEwQzc4MDAwQzIzRTAyRjI5REZBRkQ1QjEzODc3NzREQzk2RUZCRkUzOAotOjEwQzc5MDAwQUQ4OUNFOUY5MkEzQjVFREMzMTlCNkJGRDY3MUZDNTMzOAotOjEwQzdBMDAwQjFBNzVENTMzOEJEOUNDMzgwQkYzNDdBN0ZDMkM4NjBENwotOjEwQzdCMDAwMUQ1QzM0MjY5MjM5QjRGMUNEQTI1ODFEM0NBOTM4NTFFNAotOjEwQzdDMDAwRDdGRTlFMTlGRDc0RjU2MzJEMkQ1OUQ1RDdFMUVGOEI1QQotOjEwQzdEMDAwNjE2OUUxQjRGRUNGRTZFQjkwQUYxQTJGN0QzQTE5RkQwNwotOjEwQzdFMDAwRDgwREEyNUQ4MDc5Q0Q3QTdCRTNBNzQzQTk3Nzg5RTI1MgotOjEwQzdGMDAwNUNBNzlBNDVCMjQ3RTBERTlBQjVGQjI3Njc1OTBCOURDNwotOjEwQzgwMDAwM0IzNjc2NUQ0NEY2NkY0RTBDM0ZERjNEQ0JBRERGRkYzMAotOjEwQzgxMDAwNTBFM0YyMURFRDlCQTAzRDJCQzc3MzMxMURFRDlCQjQ4MgotOjEwQzgyMDAwQzVFMzdGNzZGRjI0MzM0NTU5MEYwRjY0MDNGOTdBRjg4NwotOjEwQzgzMDAwQ0M1RTk4MjlDQkRCRDE0NEY0QUFEQjI3REE5MTU1RUIwNwotOjEwQzg0MDAwN0EwQjRDODA3MURFQkFENUUyMEU4MjcxOUZERDc5QzQxRAotOjEwQzg1MDAwMkM2OUY2NEZBQUZDNjAwMDIyRjFCRDIzNjYzQzRGNzU5RgotOjEwQzg2MDAwMjA5OUVCRURDQUM2RjM2Njg2N0NEMTc4M0ZDOTc1NEIzQgotOjEwQzg3MDAwOTMyQjJBMUFFRDE3RjhBQkRCQjI5MEJGMUFCMkQwRkU5OQotOjEwQzg4MDAwMzUxQjZDNEVEQzBGOUJCMzc0MzRDNTk5QzNGRDkzQTk2MwotOjEwQzg5MDAwMkNBRjFGNERGRDU2RjgyNzEyNUNFOTBGMjZGODIzQjE4NwotOjEwQzhBMDAwNjVFQkM3RDhDRkQzRTEzNkI0RTcxNTQ2Rjk1NUE0NEJBRAotOjEwQzhCMDAwODUxNDlDODlGQjU1OTU1QjNGQkVGODZCQjRBMzM2N0UwRgotOjEwQzhDMDAwQUY2M0FDRjg0OTE2RDY4RkVENjMzM0Q0NzVDNUYxMDY2NgotOjEwQzhEMDAwNTEzRjJEMjNCRUM4NDJCQjU0ODBFQjAyNzg1RUJFMjU3QgotOjEwQzhFMDAwRDc4NTcyM0ZCQzJFRDQ4NjcyMkZFMjc5QjIwRUY4NzRDRgotOjEwQzhGMDAwNkEwQUQ3MkYyNjJGMUZFRjI4N0YyMUY1RDdCQUJFNEYwMAotOjEwQzkwMDAwNDlBMEY5QUJCMDI5N0E4MzExRjU4NzNBMEYxMzE4N0M0NwotOjEwQzkxMDAwMkM2RkYzRjdBM0IyNkE2QkExMTFDRkM1N0Y5MEY2N0NBMQotOjEwQzkyMDAwMTRFMjA5REE4NzYwOTkzNDcyMjhFOTk5RUZBQjA3ODczNgotOjEwQzkzMDAwQjMwRUY0OTY1QTVBMTQzRDNDMTlGNTMwRjQ1Nzk0RTY2OAotOjEwQzk0MDAwRjgzNUNBRTVCODQ3QkM0NjJCRUFEMTEwQUIwREY3M0YyNgotOjEwQzk1MDAwQzZFNTBDOTA0QTM1RjMxMURGQjkxQjU3MTJFMEFCRjg2RQotOjEwQzk2MDAwNENFODA3NEM4NjUyQUJCN0E3NzY2MjVGRTQxNDgzRTJDQgotOjEwQzk3MDAwMTdENUYyNzM5REFBN0U1RkY1MDRDMzc1RDgxNDdFNTY1MQotOjEwQzk4MDAwQUI1NUFFMkE5NEY2RUFGQjJEMDJGNzA3RTQ2RDNDQUVGOAotOjEwQzk5MDAwNUY5MUU2N0ExMkM3REIzMjlDNEREQTQyRkFCNDI1QUVEQgotOjEwQzlBMDAwMzBGNDk3MUI3Rjk4QjE4NUU4MUM2NjkzMENCOEFGQTA1NAotOjEwQzlCMDAwRDZBRjZFOUQwNzk3RUZBQkNENjNCMUQyRkUyMzkxMkQxRAotOjEwQzlDMDAwNDBCRUY4RTg5NjVCNUExQ0QwNkZEM0MzOTk5OUEyQzZCMwotOjEwQzlEMDAwNEVCRDk0QzJDRjM1MzM5QkVGMzJFOThCNURDMTEyRUE3NQotOjEwQzlFMDAwODFCMUI4Rjc5MEQ1RTZGN0UzNzk0ODhDNkI1NEVEQjI5NgotOjEwQzlGMDAwQUNDN0YzNjA1NTYxQjBDRTg3RUY4RkU5RTc3QTA5RjFGNAotOjEwQ0EwMDAwRDFCNDNCRjcyMkRFQTM3MUUwQzIwQ0U0RENEMTM4RjhFQwotOjEwQ0ExMDAwMjI5RUIzNzc1ODQxREJEOEQxMEY3MkJDNENGQUJGOTMzQQotOjEwQ0EyMDAwRjE1RTREOUYyNThEOUMxMzg1RkVDNEY3MzAyNEI0Qjc2RAotOjEwQ0EzMDAwNjBGN0IzMEU3MkQ4ODlGODcyMkRFNUYyRTc1MkU0NzAxMAotOjEwQ0E0MDAwOUFDMkJGMjU4QTFDNEUzMzcyMzk5Q0JBMkFEQzg2RjEwMQotOjEwQ0E1MDAwQ0U5MjQ3ODRGRTc4NUU4RTQ5QTE3NjU0MDEyNkU0Q0JCRgotOjEwQ0E2MDAwNENFNDRGQ0U5N0U1RkVBRThBM0NDNzJCRkQ3MEZFMEYxRgotOjEwQ0E3MDAwOTRDRjRBN0YyNEI1NTNFNUY0RTUzNEQ3MjE2RUU3NUFDNQotOjEwQ0E4MDAwQjIxNkMwQjg2RTAzQjk0NkJERTc1QUQ4MjMwQkU1QTQ2OQotOjEwQ0E5MDAwOEQ0RkNDMzZFNDI3RTA5Mzk4NTIwRDFGRDQzNUZENjhCNgotOjEwQ0FBMDAwNDQzRTMxMEQxMzg4NEYyQzUwRTY2OUY4QzhEOUVBOUZFRgotOjEwQ0FCMDAwRDhGMkJCQTE1RkI1MjhERUIwOUNCNUQ1N0Y5NUEyRkFCMAotOjEwQ0FDMDAwMjlEN0M2RUYxRjI4RUQ0QjQyQzA4RkEwRjg0RjE4QzNERgotOjEwQ0FEMDAwRjhEQTg1Mjg4OUUyQTQ3Mzk3QzEyMDAxMDU3MzREOUU3OQotOjEwQ0FFMDAwNjQ4Q0MzQ0NCRDNGODhFMjYwQTUwN0FCOTc4NDRBRUQ1OAotOjEwQ0FGMDAwRTk3NUI3M0Y4M0Y2OTcyN0ZBOTNBODNDOTBFODNBOERGQgotOjEwQ0IwMDAwRjg5OEU2QkY1M0MxNjNDNjM1RURDRjY1M0I3OERDQ0QwMQotOjEwQ0IxMDAwRTRCNkQ4RDdDNTYzRENDRDI1RDI3RTVDNkY2NjdCOTI0OAotOjEwQ0IyMDAwRUM5NEJBMUZDN0UzNkUxOENGQzNGODVFRTBGRTFBQzZENgotOjEwQ0IzMDAwRTE3MDNENkQ4OTMyRThGNjA5REJDNUUzODZFQkY3RDM5QQotOjEwQ0I0MDAwQ0E5QjNFMTk2NDgwRkE1M0YxMEU4QUNCNzlGQkI4OENFQwotOjEwQ0I1MDAwQTkzMDhGRDkxM0RDQUY5QkI0RkI2QzBBMUUxQjhDOUVEMwotOjEwQ0I2MDAwNjRCNEEzMERENTFDM0YwRDJCQzQwMkRBNkY2MjJDQjg0MAotOjEwQ0I3MDAwNTA3MzVFRjc2QTdDM0NEQjlGNDhGODUxRUQ4QkFBQjc5NwotOjEwQ0I4MDAwQjdEN0QwQTFDRjU2RkQ3RDM1QkI1M0ExRjA3QjA1RjJDMQotOjEwQ0I5MDAwQkJCREJEOUQ1MUY5MzU5MDlGNTVGRDZDOEEzRTQ4N0FDRAotOjEwQ0JBMDAwRTgzNjc4MDVGRDA3NTU1RjE3RTQwRDFEODY3NjdFRThBQgotOjEwQ0JCMDAwNEI4OTVCRkYwQ0YzOEY0QzczNjVBNTAyRkZEQ0YyNEFENwotOjEwQ0JDMDAwRUZBQzM1MDBERjY2NzQxQjZEMjFEN0EyMEY3RjM0OTE2NwotOjEwQ0JEMDAwM0U3Q0E0OTA5MTNFODQ1MkFCMEY0RDlERjhFMUI5QTlFMwotOjEwQ0JFMDAwRDdBN0NGNTM5NUY2RTBDNzcyRkYxMEY0QjVCNkJGOEE0QQotOjEwQ0JGMDAwQjQxMTYzNzBGQzg1QTlEQzRFRkU1MkUzRUU0QzhGMTczNgotOjEwQ0MwMDAwQTZBQUYyNzk2RDdBRkM2NkE1RkRENUY0Rjg4QzU0QUUyRgotOjEwQ0MxMDAwQzcwM0Y1MzY2ODYzRDJEQkU3REVFRTRCNzFCMkMzMENCNwotOjEwQ0MyMDAwRjQzQ0RBQjNDNjYwNjk2M0JDRTY5QzdCOTc3MEI3NTY4OAotOjEwQ0MzMDAwQUZDN0Y0OUIzRTAzRjlGRDFBRjRGQTdEODhCRjdGNTcxNgotOjEwQ0M0MDAwQUZFNzE3NkUyNkJGMEFGRTlDRTM2Rjg2RjVDNzZGNjFEQwotOjEwQ0M1MDAwN0Q4N0YwNDdCMEJFOEI2RjJGMEY4MTcyMTBDOEY3QjA4MQotOjEwQ0M2MDAwMUVEOUZBMzE4Q0FGRjlBOTNFMTQ3NzAwMzkyMEJFQUYzNgotOjEwQ0M3MDAwMDBCRTQ3Mzk1MEU1QTU3MkVCODA3MERDMzc2MDdGMTE0QwotOjEwQ0M4MDAwMTlFQUZGNDAzOTI4Qzg3QkM1ODg3MTJBRDRFMzg4QUZFOAotOjEwQ0M5MDAwM0QyMEYzQTg2NzAyRUQ4NDNGRDVCNTBBRTdBRkNBODMwQwotOjEwQ0NBMDAwMkEwNzU3RTdBMzlEMjY1Qzk3OUFDQUNGNzMzRDBGQTUyNQotOjEwQ0NCMDAwNTZDRjc3RTZDRkZDRTEzQUY5RkZEMUQ0NkJGMzAzNUVCMAotOjEwQ0NDMDAwNERFNUY3MjA3RTQxRkU3OTM1RjVEQUZDODJENzUyRkYzQgotOjEwQ0NEMDAwMjNCRkUwMkRFMjFGRDQ5RkI4N0VCQkZENDM3QkY4N0NEMQotOjEwQ0NFMDAwQ0UzRjc0MkUxMUY4MjEwQkUzQ0VDRDgzN0FEQjMxNEU4QgotOjEwQ0NGMDAwNzNGQjE1RUVENzgzNEUyN0JGM0VEMEFGOUVBQ0U4QkY4NwotOjEwQ0QwMDAwQTk0QTlDRTA0MDlBQjMyNTk1Q0IyQkY5RURDMzEzODMzOAotOjEwQ0QxMDAwMDdBMEJEQkE1NjdGNkY3MjU0MzVDMzM4RDM1NDI4QjVCNwotOjEwQ0QyMDAwN0FDMjgyNzRFQkMwNUZGRjZCRUFGNUQ5RUYzREQ3NDg1QQotOjEwQ0QzMDAwREZFM0E5RkZCMTlGRTdCQjE2N0Q5MEU0QjA0RTQ0N0NEMgotOjEwQ0Q0MDAwN0VFRjMxMzJDNEQzRDVENjAzQTZENTFDQ0YyQUJDRDhBQQotOjEwQ0Q1MDAwNjM1NEVENjYyNERBNERFMDhGRjNGRjA5N0Y4Q0NENkJEMQotOjEwQ0Q2MDAwQjg2ODA1QkE4NkE3MTk4QjMwMUU3ODI3OUVCNUEwNzhCQgotOjEwQ0Q3MDAwODY2OTk1MjMwOUY1MEQ1M0Y3MDUyOERFRjE5MUE4QzJDMAotOjEwQ0Q4MDAwRTY4MzIzNjExQ0I3M0ZDOURBRjYwREEwN0VENEIwRjA2QwotOjEwQ0Q5MDAwRDZGODg4QzBEQURBODdBNTg5MDc1N0QwQjhGOTc5MTVBNwotOjEwQ0RBMDAwRTZGMjFBRjkzRTk5MDI2NzAxMUNBQTgxNzMwMkUwQjUwNgotOjEwQ0RCMDAwQkM3RDk4RDFDQjZDREE3RTE0RkQzM0NFQzZGNzA1REE5NAotOjEwQ0RDMDAwRjZGMzdDRjk1REQxRkZEQjJBRDg3MDdGRTE5RTYxRTc0NQotOjEwQ0REMDAwQ0MxOENGMTk5QkU3REQxQjBCRURFMkQzNDI4QjQyQzA5MQotOjEwQ0RFMDAwQzRERkIzNTVBMEYxMEVEODE0QjU0QTRFQTIyMzVCMEU5MgotOjEwQ0RGMDAwM0M2RjU4OUVDM0Y3NEQyQzBENERGOThFMEVGODcwNDBDOAotOjEwQ0UwMDAwOUFERTRFRTE5RkIxMUJDNUM3RThDRkQyMjAzMDczMTYyMgotOjEwQ0UxMDAwRUYyNzIxRkVEQURFNDdGQUQxRkIwOUY0QkVDNzEyNzUwRgotOjEwQ0UyMDAwRURFRkRGMzU4QzM5REMxREYwRDEyRDY5OEEzRUM0QjhCOQotOjEwQ0UzMDAwQjBEQTNGRDA2NDYyODNFMEU4Mjg2RTczQUJEMkJFQzUzRgotOjEwQ0U0MDAwNjBBODYwODBBN0YxOUJEMjU2NjFEQzZCMTRFMzdDNTEzMwotOjEwQ0U1MDAwQjgyOUI1NDhFNkZDQzcxQzAxRjNGREI5RjE2NkE3RTk5RQotOjEwQ0U2MDAwRDc2N0Y4MjdFOURGRjdGQzFDQkU4NkI2QzM5NzQyRkZGOQotOjEwQ0U3MDAwMzIzRDlGODQxQjlERUY3RTBGRTMwODhGMTI2Q0U4QTc2NQotOjEwQ0U4MDAwNTYzQTgzNTZCMDcwQTRCQkMyRDdGMkMwMjJDNzMwOThCRQotOjEwQ0U5MDAwNUYxMEQzQzVGMTVBRjk1QUNFMkM0MkJFQUU2NDZBRkI3QwotOjEwQ0VBMDAwRUM1NTQ4N0ZBN0ExQjUzREU3RjM0NkExRjVGRDM0MjMzNgotOjEwQ0VCMDAwQzM0RkQwRkI3MzM2NjVBREMyMzgzOUQwODNFQTA5MzYyQgotOjEwQ0VDMDAwRkUwQzlGMzcwNEMwQzMwMkU0ODI3MTk4RTQxMkY1MzI2RAotOjEwQ0VEMDAwRTAyN0I5ODNGRERCQTUwQTdFQ0YwQUZDN0M1M0NCMDg5MwotOjEwQ0VFMDAwRUVDRkI1MjRGMEYyQzUzNEVFQkYzREFFRTBGMTY5QTU1QQotOjEwQ0VGMDAwNkNFOUEyQzE0M0FGMzYzQUMzOUYwN0Q3MDM5QTc5MTNBRgotOjEwQ0YwMDAwOUVFRThFNTJFNjJENEYyQzFBMDNGMzZBODk2MEZEMDVDMgotOjEwQ0YxMDAwRTA5Mzc1OUJDNkFGNUFBNEUxOTNFNzM3NEQyQzQyM0M5MgotOjEwQ0YyMDAwQjRGNjI3MTcxRTQ0M0NERUFERTBFOUM1NEQxMzBFMjJEMgotOjEwQ0YzMDAwMUZFMTkxMTM5NEI3OEExQ0JFRkY2QUQ5RkE3MTg3RjI3OAotOjEwQ0Y0MDAwMzZCNzNERkZDODk4NUZBMTgyMTgwOURGMTMxQ0E2MkNENQotOjEwQ0Y1MDAwREU0RjQyMDdGODU5RDBGRTdENDdDMEZCQ0MxNDc1M0QyQgotOjEwQ0Y2MDAwRUYyQkY0MTkxMzQwQkY4MjAwRkE4RDBDODA4QkY1NzAwMwotOjEwQ0Y3MDAwOUIxRjBDM0Q4M0ZGNTRCMjYzRTVFMjZFMTgzRkRCMjQzOAotOjEwQ0Y4MDAwRDAxRDJCRDBDRjY2MDE5RTM3QTZERDVCMTREMjAzRjlFRQotOjEwQ0Y5MDAwNTQzMkM1NDI1QjRGREFENDgzRDZCRTIwOEZBOEJGNDgzNwotOjEwQ0ZBMDAwRkZCQTQ4NUY0RjQ0MzkyNzc4NUE5MUUzNDZFNDlCRUEzOQotOjEwQ0ZCMDAwQzUzMUQwN0U2RjVBQzkyQUJDRjc3QUNGQTI5NTI2NDRENAotOjEwQ0ZDMDAwRkEwNzY5MzM1NjE5QTFERkJCQjNGRUI0MTdGQjMzMEE2NgotOjEwQ0ZEMDAwQTUwN0M3MDgzRkMzQTdGNTAxRjM1ODFCMDBDQjAxRUQxOAotOjEwQ0ZFMDAwNTc1RDQ1OUYyRjBBNzhGRjkxODBGQTE1MDFGMEVBMDBGRQotOjEwQ0ZGMDAwNzhBOUZFRkQ2OTMzRjhGRUU1MzRBMDFGMjJFRTZBRjIzRgotOjEwRDAwMDAwRTI0RDZCNUQzN0I0REEyRjAxRUREOTg3N0E3RUJGQkQ3MwotOjEwRDAxMDAwOEVDMzI3MzczRDUwQjQzNDQ0MDNBN0ZEQUE0OENCQkY4NQotOjEwRDAyMDAwMjZDNTVFNEM4RTcyM0EzQUUyREY0MzlERjE0RjVBQTAxQwotOjEwRDAzMDAwNUQ5Mzc1RTcxMjBGMzNBNkIzQkY3QjQ0M0REQzI0QUE5MgotOjEwRDA0MDAwRjJCNUYwRTBCQzc0Q0Q3RUEwNUM1Qjg0RjE5NENFRjdDOQotOjEwRDA1MDAwMkJFNDIyRENBRkI4RkQ3MUI1N0Q0RDkxNDMzMzNGQjU3NAotOjEwRDA2MDAwN0RGRUJGQUU4OEY4QkQyQjY5MzU0NTFCNjhGRjRGRDlFMwotOjEwRDA3MDAwQkY4QkUwRTUyRDk3QUY4NDIxNURGMkYxRkMyOEQ2NzdEOAotOjEwRDA4MDAwRjEyNENGNEREN0NDOEYzNUE0RTBGQzlBMUVFNkY3MERFNgotOjEwRDA5MDAwRTUzQUEwMDdDODc5MDlCM0QzRkU3NzUzNzhGODgyMTcyOQotOjEwRDBBMDAwQTBGRDlFODdDNTA1NjhCRjBFMkY4OEE0RjM0NkUzRkI0RAotOjEwRDBCMDAwNzI3RjdCNEY3ODlGNkVGNzAxREMxNDNDRDU4QzcxRDU2NQotOjEwRDBDMDAwQTY0NzQ3NTFGOThFRTg1OEUyMDNFNEY3RUFGQjU4NTFDNgotOjEwRDBEMDAwNDg1RkFDMEYyN0JDQzRCQ0I0QUNBODE2RTQyMEI2QUYwNAotOjEwRDBFMDAwNDRFRkJCMjI2Q0RENzZBMDFGQkFEQ0M0NzBGRjg5MzEyRgotOjEwRDBGMDAwRkI3M0M0MjdCRkIzOTA5RjNBQURCNjFGRURGNzk0RkMwNgotOjEwRDEwMDAwQkUzMEJGMDdCNDJCNTk2Q0EyRjgzRkZDRDE3RDBDRDdDMQotOjEwRDExMDAwRjI1MTY2QUM5RkIxNDgyOUU1NUJBOURDRkREMzFCMUYyQQotOjEwRDEyMDAwNjZEMEJFOEU0OEU3NzY3NkY5MjM4RTgzMjRCM0FGRTVDQQotOjEwRDEzMDAwRkU3NDVGRTFBODkyNUY2NTZCNUY1NzZBNUYxOEM3RDc5RgotOjEwRDE0MDAwNjc5MjI4NUYwQUIzNDk2MTEzRDA2RkJCQzE5MUQ2Mzc4QwotOjEwRDE1MDAwQkFBRERERUU5RjQ0REFBRjdBRUI0QzQ5MzdEQ0RGMUIyQQotOjEwRDE2MDAwRDg5N0YzQ0IyRTdGNDlCNzEyOEQ1RDJGM0Q2QjI0M0NCMgotOjEwRDE3MDAwRUYzNjRCRjM1MDZGRUNFRUQyNUI5MDQ5NkUxQjIyMzFEMQotOjEwRDE4MDAwQ0UzQTQzRjE5QjgxNEYxNkJDRDEwMTFGRjZFOTJCMTIxOQotOjEwRDE5MDAwNUU4RTU5MTZFMDU5NThENkY0REJFODYxMzgyRUY1QkQ5RAotOjEwRDFBMDAwRUM4M0FFM0FDQzE3NjNFQTI1MERENEZBQzdCOUM5MjM4QwotOjEwRDFCMDAwNkVDNkYxQjZGMUQ3MDZEMkU3RTQxRjAzM0NCQUVGQkE2OAotOjEwRDFDMDAwNTUzMkQ4MEZCNjA3RkM3QTFDNDc5NDIzMUZGOTQ5M0QwNgotOjEwRDFEMDAwOEZDNzYyMUE1MkI0NzE4NTM2M0Y3NEExMjJGRkJDREQzRAotOjEwRDFFMDAwNTc3ODM4MThCRUZGRDVBQjQxNzRFRUVCMkJGOThCNTA1NgotOjEwRDFGMDAwQUQ3RkFDQ0FDN0NDQjBGRjM5REM0MkVCRTI3MDQ5ODhFNgotOjEwRDIwMDAwMDNCRTMxRDYxQzdGMDhERTJCN0RENjQ0N0FCM0Y0RDkxOQotOjEwRDIxMDAwRTg0NzdDNTgwRkY0QzQyREMzQzBFRjNFREY5NzlGMDc0QgotOjEwRDIyMDAwRTg1QzNFQjYxNDhERUNBNTk1OEZDRDQ1MzhERkNFRTQ5NQotOjEwRDIzMDAwNjM3QURGQ0Q5REM4NDc0RDM3RTRBM0ZDNjc0RDc0QkVDQwotOjEwRDI0MDAwQkFCODRCRjU5RDE4NDcyQzM2RENDOEVBNjA3QzIzOUVBMwotOjEwRDI1MDAwRkQ1NTM3REM2Nzk5RjlBQzg1RThFQTBEMEQzRENFRTc2MQotOjEwRDI2MDAwRDUyNzFFRTdENTZBN0ZGQTcyN0RFNUFEQ0QyNTdCMjFGNgotOjEwRDI3MDAwMUFDMDNCMDNGRDJEMkUzMUQxN0E0NEVDNjYyNkJEMjcyMgotOjEwRDI4MDAwODZEOTc5N0QxNzE2QkYxMEVDRjJFMkQwMUMwOUU5RUJDNAotOjEwRDI5MDAwNTZFNDAxRUEyNUU0QjNCQ0YwNDlCN0UxQjk5NkMzMEIwMwotOjEwRDJBMDAwMTI2OTFGRUM2NDE2REYwNzlCRjVEMEYzNjFFODdGN0VGRgotOjEwRDJCMDAwMzU4RjlGRUY5RThERjk3NjcwOURGQjZGRUU3QjU1MjkyNAotOjEwRDJDMDAwRjk3NkZFQjdGNkJEOUVFOEFCREMxQjZBRERGN0UyRTc1OAotOjEwRDJEMDAwNDBGNzJDQzhDQ0UyNzg2MTkyMDVGMTE0Mzc4MEYwNzJFNwotOjEwRDJFMDAwQUI5NTQ5NDE4MDE3MzE4MkE1QTBGRTUxRjdCREM0NUZCRgotOjEwRDJGMDAwNzNGRDI0MUEwNDVBQTcxRkFCOTEyOTdGNDE1RTk4OTVBQwotOjEwRDMwMDAwM0ZGRjM1QkZCNzI3M0U1NUM4NjgxRjJDQUE5QUY2QzEwNAotOjEwRDMxMDAwNDIxMUFGMThCRjE1OTgxM0U1RTc2ODkwM0RFRUZFNzQxMwotOjEwRDMyMDAwRTRCRjIwQTJFN0NDRTc2NjdERkE4NzJDQTREQkQ4MjhFRgotOjEwRDMzMDAwNUQzQzQxRTEzRkY1RkQxM0I1MzdEMUY4NEUwOENDODY5MQotOjEwRDM0MDAwRjYzRUVGOEZBOTIzOTEzRTREQTJFQkE5QkI0OTZGMDY5NAotOjEwRDM1MDAwRDNGRTM5QjM3OTdGMzcxOEUwOTlCNUIwQ0U2NkM4MzdCOAotOjEwRDM2MDAwM0RFMjEyRDJEQkZBOTlCOUYwRTExNEE0NzdERTFGODMxMwotOjEwRDM3MDAwM0M3OEZFNjZDNkEyQTBENTc4MEVBM0JDOTFERkYzOUVEMgotOjEwRDM4MDAwQjZFQzdCM0E4RkNCRTI4REQ1MThFN0ZDN0E1MTEwM0Y5MwotOjEwRDM5MDAwQTdCRTc1MzBGMUNGMzQwMzNGRTdDMkUyQ0MxNDVGMkE1OQotOjEwRDNBMDAwMEY1MUUwNUUzOTA0NkJFRTJGOTk5MTFFRUFGRDlCQkQ5MwotOjEwRDNCMDAwQTg1N0UwRkJDNzU1N0NBMERGODg3QTU3M0Q0N0NGQUEyNgotOjEwRDNDMDAwMjU5NEZGNjI4M0QwRTEzOUFGQkZGNUU1RkVFOUI0MzhCQgotOjEwRDNEMDAwM0I5RDE3QUQ3OENDNjI1RjE4Q0ZFOTJDMEVDMkVGMzJCRgotOjEwRDNFMDAwNUExNzU1MTg3Q0Y5QUJCMTVGMDM5M0I2RDk3MEZERDBDRAotOjEwRDNGMDAwNTI4QUVCNkRCNjM1OTVGMjEwNTQxOTk5RDExQzAxQ0ZCNAotOjEwRDQwMDAwMjVBRUNGRDRGMTU0NDk4NUI3MTIzRjE5RDkyMTYzMDQxMQotOjEwRDQxMDAwRTJCMUU1RDMxNkU0OEY4NUExMTJDNjQ1MkFCQURBNUREQQotOjEwRDQyMDAwRDQ2RkE4RDVDNkVEODRGMjVEMUM3QjIyRjI4MURGMUM4RgotOjEwRDQzMDAwODE3Q0YwQTk2MEIwRjBGQzAzMEUwM0Q0OUY2M0JDQkVGNgotOjEwRDQ0MDAwRjUzQjhCOTZBNUQzQkNBRDM2QzM4ODFFQzg3N0U3RjNGMgotOjEwRDQ1MDAwNTdDMzdCQjczMjI5QTEwN0RFMTM1QjE2NzlFNzI0QUNFQgotOjEwRDQ2MDAwN0Y0RDI0QkQwNEMyRjQ1ODBFRkE3QkFGODk5OUI4NEVBMwotOjEwRDQ3MDAwOURCNjZDMEZDRDZGQ0VFNjAxNzg4MzgwNEQ3QkZEMDBBRAotOjEwRDQ4MDAwRDlBNzM5MEE3Rjc5OTU3MzZCMjUwMDZGNDYzQzJBN0FCNAotOjEwRDQ5MDAwQzEyNUIyNkE4QTg3Mjk3ODZDQzVBRjUyNUZCMUNDNDQ4NgotOjEwRDRBMDAwRjRBODU4NkMyMTNBNTdENEZFOERGQUFEMDg2REU5ODY4MAotOjEwRDRCMDAwRjRBOEQ4NjZBMkZDMURENjFCRjgzQzRBNkE3QjBGM0IzOQotOjEwRDRDMDAwMDRFMzJFMzE4NURCMDQ3ODU0MkU4RjM1MjM1QzVFMkZFOAotOjEwRDREMDAwMTBBQzdFQUY2MkQ5NUZCQjE5RDI3OTdGNTg1QTBDN0NGMQotOjEwRDRFMDAwOUZCNUFEREZFODM4QjQ2N0E3NUY4RDhDOUJBNkExRkIyNQotOjEwRDRGMDAwRTk0NURCQzM3MERGRjk2ODkwMjcxOUNGRjlGQUVFMEYyMQotOjEwRDUwMDAwQjJFM0I5NDIzNTlFNzY3QTUxMzJCRjBGNjQ2QjA5QzVEQQotOjEwRDUxMDAwRkRFQTE5RjMxMjIzRDBDRTFEQjY3OUNDNTg3RkI4MjE3RAotOjEwRDUyMDAwMUU4RkNDMzE4N0NEMzYwQzYxODdGMTQ2ODI0RjJCRTdCOQotOjEwRDUzMDAwNDhFODBGRjMwNzBBOUM2RkNBNUZERDYzNEU4MEVGRjU4MgotOjEwRDU0MDAwQkY4MUUzRTdFQzZCNDdGNzBFNDE3QzAwMUZEOTUwRkYyQQotOjEwRDU1MDAwQzRCNUE0QTAxREFFMzBCNEE0QzQyMjdENUUxNkM4NUZCRAotOjEwRDU2MDAwODBGNUE5MDNGMzhGNTQyMjVGMEQwNDdEQThGMDU1RTVFMwotOjEwRDU3MDAwRDZFREYzNTEzRTJCREUzQzk5OEY3ODNEM0I5Njk5MzFBOQotOjEwRDU4MDAwM0U1NkExQ0MxRkQ2OEZFRjFBQTE3REM1OTY3NUY5OEM5QQotOjEwRDU5MDAwQkZGRjJFRjI5RDZBRUYwMTVFNjQwMkI4RDlDQ0UxOEMyOAotOjEwRDVBMDAwMUJCODdFNkUzNjdCMjlFRjVERjM5RDhDRDFGRTk5OTE4MQotOjEwRDVCMDAwOERDNDc2NDA3OTdFMEY0MDE0OTVGQjY5RDUzMTEzNzg4MAotOjEwRDVDMDAwREUzRDU5N0I3RUFFMTJFQkQzREJFQTNCRTM5QkYxMzdDQQotOjEwRDVEMDAwMTgxNDNBNUJDODJFOEQ0N0JDMDBFQzVEQjYyRDBDRjlEMwotOjEwRDVFMDAwRTJFQzZCN0JGNjBFNDFCOUQ4MjJEODk4NTYxRTU0MzkxRQotOjEwRDVGMDAwOENGM0YxN0FDMERGMTM4OEJGMkRFN0YzMzEwRkM1RUM1MAotOjEwRDYwMDAwMzNBMTEyRDI1MEM1OTMyQTZGMkE1RUFBMThDNzgzOEEwMwotOjEwRDYxMDAwOTcyQUEzODIyN0E1REVBOUUwQTE5Q0Y5QTgzRjc2QTZCOAotOjEwRDYyMDAwQkZCNDExRkI3RkYzNDdEQTZGM0IzQjhEMDlGQzlDMzBBNQotOjEwRDYzMDAwQ0Y4QkE2Q0VDRjE1QTFERkRGQUZCRDgxRjNGRDE0NjU4MwotOjEwRDY0MDAwOUVFNTM2NkUxN0NCQTM5ODU0M0I4MEY4Q0M2MTU2RjMxOQotOjEwRDY1MDAwNEI0MjkzQjM5QjhGRThDNkJGNUE5MTgzNTY3QUUzM0MwMwotOjEwRDY2MDAwNjA5QzVFMDNCRjI3MThBOEJGRTYyOTdDNzVBNDc2QjIyQwotOjEwRDY3MDAwMDdGNUNBNkMxOUZBQzk0Mjc5QjA0REMxN0Q0RUY2QkFBOAotOjEwRDY4MDAwQThFODZGQjA5OTlBRUZFNkJENzI4NEY4MTA3NDk3MTQwOQotOjEwRDY5MDAwMDE2QjE2RDMyNjE4MDdGQTVGNjc3QTUzQkMzMEFGQkIwRAotOjEwRDZBMDAwOTdFNkJENzE4QzhEMTk0MDlGMUMxMUJDQTEzQkQwMUUwQgotOjEwRDZCMDAwM0MyNDkyOUU1MkM3RTk5MDNGMjQ3QTM4MUFCODdDMjJDMwotOjEwRDZDMDAwQkY2MDdDQjA1NTJGMDQ4Q0I3NTYxOUFGQzU2MEY3RTIyOAotOjEwRDZEMDAwQjk2MEI2NTBBMEZCNkJFMkMyQjNBMTg3QjhCREEzNDg0NgotOjEwRDZFMDAwNjI1QkZGMzdCRDhCRkI5MThFOEI2MTkyNDAzNTc2MjM1OQotOjEwRDZGMDAwQjZBQkJDMTg5NjgwRjZGQjg4MTI3NzM4QjI3ODdCNThBOAotOjEwRDcwMDAwODk4NjBFNEY3NUY2OUQyNTgzMjVBNDdGNUVDOEExODc2NwotOjEwRDcxMDAwNTE4RTFFNTNEQTM1OUJFRDIzMTdBMDNFQjgxNDI2RTEzNwotOjEwRDcyMDAwNzlBOUU2MDgzOTFERkRBODY2MDM1QkNBMjIzODFGMUFDRAotOjEwRDczMDAwQkJCNUUxMEZFNDg1RjAwN0Y1RDI5M0I2MzZCOTU0QzcwRgotOjEwRDc0MDAwMEQ3NEYzMjBEREEwQkQ4M0NCOTE5REY2MzEyQUEzRjhBMwotOjEwRDc1MDAwQkVFOEQ1RTUyOUQzNEJGQUE5NTY5MEQ2NjdCNUI1NTM5RgotOjEwRDc2MDAwRUZFNTNEQUFDQzlCNjRBNDVCOUIzRDQwRkU0NDdCNjdGOAotOjEwRDc3MDAwNTFGMjE4MDVFNjQxQkRCNTU3RDczOEM0NUY1NTg4RDU3NQotOjEwRDc4MDAwODA0QkI4QzBGQTQwQjg2RDNENTU2RDQ0M0Y5RjJEOEExRgotOjEwRDc5MDAwRDlBQkJEOTc3NjM0NDhBNkZCNjdCRTFFMjI1QjBGRjQ1QgotOjEwRDdBMDAwQThCREZGN0Q3RTlFQjc5MURGREI1MkVEMzRGQ0FENjhGNgotOjEwRDdCMDAwRTUzRjc4QUYyQ0VCN0MzRUVBRDcxNzczMkQ3NEFGQTkwOQotOjEwRDdDMDAwNkJCRjA0RkFDRTI5RDY2MDFFOEVGNkZGREI5NkZDMzBDNgotOjEwRDdEMDAwQTk2RDdENzJEMzQ1OEYxODRFRkU0MkJDNkU3RDUwN0U4MgotOjEwRDdFMDAwRTY1RDkyRTcwQUQ2NDJGN0IxQTcyRDNCMzA3NjMwRDJGQwotOjEwRDdGMDAwRkIyNTEzOUQxRjk4NTExRjRGNzZFRUU0ODZFOTk5Mzg1QgotOjEwRDgwMDAwREY2OThCOTMwOTlFQjVGMTNFMEUyRkUzRjkwRkE3MkQyQgotOjEwRDgxMDAwQ0U3RTAxRkRBRkEzNDE4RTdDRTQ2N0RGNEFDMTg2RUI3QgotOjEwRDgyMDAwQUJBMTFCQjMxRkI5MDdFQTg3ODZGNkU5OEFFM0ZFNkE1NAotOjEwRDgzMDAwQzNEMUIxNDhGN0FGMTY4OEE0OUYxQzFCOUVCQzEzRUI0NQotOjEwRDg0MDAwMUQzQjQ0QkMzMTA2RUIxOURCMjM5OEQ3OTQxOUMzNkRGQgotOjEwRDg1MDAwRTgxN0E4RTcwQkVCNEM1Q0RGOUU1MUY0QzIzMTQ1NEY1MwotOjEwRDg2MDAwMUM1M0Y4MkZBRkFFMkUwNUZEMjVERjNBQjA0N0I4RUZCOQotOjEwRDg3MDAwNkRGNjk1RDJGOTZFQzE2NjVGMEZGQ0YyQUQyMDEzQ0M0OAotOjEwRDg4MDAwNkNCNjg0REE1Q0JDQ0ZCMjk2RjJFMzlDNEJCNkQ4RDBDRgotOjEwRDg5MDAwNEZCRUQ3QzJFQ0U4RDdERUJCQkJGNzQwNUMyQTM4OTQ1QQotOjEwRDhBMDAwNzVENUQ4NDhGRTVEMTU1RkVBRjc0RjJCREY2NUUyOEEzNAotOjEwRDhCMDAwNTJEQTc3ODg5NDEyNTBCRjM1MkJFN0M2OEYyQUUzM0RBMgotOjEwRDhDMDAwQjlFOEE1M0JEMTJGMzhCOTI5Mzk4MjY5RjA3RTUyQzkxMAotOjEwRDhEMDAwRDMzNDBCRjRFMDk2MEVENjdCRkUxQkQ0Qjg4MzlCQkVFQwotOjEwRDhFMDAwNTNBNkM0MDNGNzk5RUE3QjYxREVDRkMwRkI1RDI3RDY2MAotOjEwRDhGMDAwMDU1OTMxM0Y2RkUwM0RBRjEzMjY2RTNGREFEREY3REFCMQotOjEwRDkwMDAwQTE4NzAzRjNEQzA2OEVBNzc1M0QxMzc4RkZCRjVGNDg0MAotOjEwRDkxMDAwODc3RUJDMkE2NzgxRUZCN0JCNEY5RTc0NkRFN0FCMzA0MwotOjEwRDkyMDAwMkYxOURFRjdERTczMDNBM0Y3NDYwNkZGRUIwREQ0RDdGRQotOjEwRDkzMDAwQTVGNTE2MUJERUJGM0YxNjI0RDE3QTQ4Q0U2NkQyNDYyNwotOjEwRDk0MDAwQjQzMzU2MjkxQ0Q3RjNDN0Y2NjVEMkY5QkZEMjJGMTlDNQotOjEwRDk1MDAwQzk1NUU5NTZEMThEQTk4QURGNUQ5OUZBRjgzMDgwRUY3MwotOjEwRDk2MDAwREI2QUIyRTNGQjI3NTdBREJDOTM4Qjk5M0VDRjQyMEVFNwotOjEwRDk3MDAwRTNGMjM5MTNENjQ5MUU1QkRCQkEyODcwQkQzNDdCRjU2MAotOjEwRDk4MDAwNjZCQTQ3Rjg0QkFEOTdENDM4NTIyMEJFNzNGQkU5RjMyMwotOjEwRDk5MDAwMkQwNERFOUZEQjBENkM5MzMzQjAzREJFQ0ZENEI4Njg1MQotOjEwRDlBMDAwNURGNDVENEQxOTk1QjkwREVCRjI2MjI1QkM0RjcxRTQ0NAotOjEwRDlCMDAwQjFBMTI4MzdBMUUxMTQwRjM5NTM1MzREOUI3OERGRUQwNgotOjEwRDlDMDAwQzhCQzhDRjc0M0RGMEEwOUI3QTFCRUY4QUU2NjgxNzIwNgotOjEwRDlEMDAwQjk0MEUxMTM4NTJGNkZEQURBMjRDNjMyNkFERjM4MTREMgotOjEwRDlFMDAwREFFRjBBMDlBN0JCMkU0OThFOUM3MEI0RjMyQTVEMDNCNwotOjEwRDlGMDAwRUYzN0FCRjMzQkY1MTBBN0FCM0FERTUzOUJBNjg3QTFGRAotOjEwREEwMDAwREZEOUI0MjZCMjMxMTdGQTkzODNDMzZERTg2RkNGNTREMAotOjEwREExMDAwQ0VCRjFDNUZDREY1Q0RCN0Q2RjAxN0M2RTBGOTk5QjVFRQotOjEwREEyMDAwMTNCQkUxQkFFRTNFOTNDRjZDODc3RUVENkYxNzg2RTFCNAotOjEwREEzMDAwN0FGRjFCQTMzNzBDRUYxQjdGMDNFRDNENjgyNzhDNkUyRAotOjEwREE0MDAwMTFGNURDOTAwMjQ2RkI3ODQzM0M0NjI2QzVEMzk2Mzk1NwotOjEwREE1MDAwRjE0NUVFMTlBMzFCRTk3QURBNzM3MUNGMTVFNEEzMzMwQwotOjEwREE2MDAwMDY4QTc3MDE2NkY2NUM4MUY2RjZEMDNFMTQyN0JDNkYxNQotOjEwREE3MDAwMjc1RjZGQjI3Rjc1RTFGNTAxRjcxNjlGRThDN0Y1RDIxMgotOjEwREE4MDAwODlCNTZGOENBM0Y1RjkwNjkzMERDN0Y5REQ4NkJGNzZDRQotOjEwREE5MDAwQzM3MzM4QjMxOTNGNUZGRkVEMjY4MUU2MzExQkY4MzFDMAotOjEwREFBMDAwMjgxRUY1MDM4RjgzQ0UwNkJENkYxNURBRjM2MURFQTY1RgotOjEwREFCMDAwNUFFMkMzRDlDMDg3MTZGNEQzMUMzQzFGRjM2Q0NDQzcwMQotOjEwREFDMDAwMkNCMTc2RjkzRkJBMkE3QzM3MDdGODBFRUZFRkZFRDI3OQotOjEwREFEMDAwNzkzRjk2RjcwQjNDQjdDQUY5NTBBNUJCOEExNzk1RkU1QwotOjEwREFFMDAwNkQ3Q0M4NzRGOTA1MjMxQTA2MEM4RjY1NkRGQTQwQkQ2QwotOjEwREFGMDAwREZDMThDREUxNTc4NEY2M0JFMTg1QThGRjlBQUY2MUI2QQotOjEwREIwMDAwQUJGRjQ4Nzk1QjY0MjNEQjQ4RjY5Q0E1NjFCRUJDRjk5QQotOjEwREIxMDAwRTIwRDc2OEMwN0Q2OTlBQjVCRjNCQTYwN0Q2MDVFMTczOQotOjEwREIyMDAwMzE4NEJGNUY4OEY5ODk2MUJFMjFFOUYxRjRCRDA5MzYwRQotOjEwREIzMDAwRkIyODQ0QjcyOUNBNEI3MTAxMzFDRkUwQTA3Qjc5NzUyRQotOjEwREI0MDAwMTY1QTM3MDdFQUExNTcxNEZBREU4NkJFMDNGQTNERkRERQotOjEwREI1MDAwRjg3OTZERjVERTlGNUE4MkExRTk4REZDNUUxODFDNzE4MwotOjEwREI2MDAwNDk4MjI2M0I1RUY5RkMwRURDQTcyRDFDMUFGMUFCNDQ2MgotOjEwREI3MDAwRjg3RTUzQkYyMzc3RTBCRDhEQzJDQzg4NkQwOTAwRUZERQotOjEwREI4MDAwNzlFNUVGQkNGRUM2ODg2QzEzRkEwMUMyRDc3NzhDNDRFNgotOjEwREI5MDAwQkZCMTlGRTNDRDdFOUFFRkE4RkRDMkYzOURGOEZDRjNFMQotOjEwREJBMDAwMzhEN0RCRkRGOEJFNjkyOUQyRkI5QzEwQzZGM0JEMjUzMgotOjEwREJCMDAwRjkyODBFQUFCRUY3QjFDMDBFQkYyNUI0QzE1RTEzOEIwMwotOjEwREJDMDAwQzNCQzA2Q0RGREI4M0VFREFDOEM0QTc3RUNFNURGRDdBMwotOjEwREJEMDAwM0Y0NzBBN0Q4RkVCNEM2NUZGQzc2MDk1Q0NFOEZGMzk2NgotOjEwREJFMDAwRUQ2NjNCQ0ZBRkM4OUM1NkYwQUJDNjJCRkM1QjYyQkQ2RAotOjEwREJGMDAwM0M5MkVDNkYzNUIzNUIzMDgxQzk1MkZEN0RBQ0JFNkQ5QwotOjEwREMwMDAwRjdGNkQ2NUVDRkJEM0QyNkYzM0M3Qzc1NEExRUJFQ0VGMAotOjEwREMxMDAwRUU1MTBBOERFRkZGODhGRTY1RTBGREE5Q0NCRkI0QkNENAotOjEwREMyMDAwODk3QzMyMEVGODBBRUQ0NTU2MEI4N0M3MkI3QzUyQjEyMgotOjEwREMzMDAwN0QyQ0U1N0I5RUZCQjFDOThEN0VDMjJDQzUxRjRCNzIyRQotOjEwREM0MDAwNzU2MTEyQjRCQjA0RjI4QjdBRTFDQzM4NEYwQUVBOEZDQgotOjEwREM1MDAwMTMzNUFDM0UwOTE0NTY4MUQ1RTU0M0JBMzRDN0JGNEZERQotOjEwREM2MDAwNzlEMTRFQUNBRDBCNDNCRkU3MkNBQzI3QzY0MDE3RTVDRQotOjEwREM3MDAwOEE3RkNGMkU4QjlFNUJEMDBGOEVFRkJCN0VCOTg2REY2NwotOjEwREM4MDAwN0VFQ0M3RURGRjk5Nzg0RjFDQUU2RkU0NzgwQkNGRDdEMQotOjEwREM5MDAwNzg3OTBGRTU3OTJFNDgxODlEOEQ3MUE0RkQzNTNCRDgxNAotOjEwRENBMDAwRDFFNEI2RjczQUJCOEYzMkM0MzA4MkE1NkJGNjI1QzdGNAotOjEwRENCMDAwMTkzQjNFQTdGMUFEOUE0RjczMDNCN0RGMTY2MzNERTVGRAotOjEwRENDMDAwRDEwMjUyNTZENzEyRUNBNEI4NTIwQ0YyMjhDNjg3QTUzRQotOjEwRENEMDAwMDcwODVFMzI4QkQ5RTgxRTZCREIzRTFEREQwNzU1RTk3OAotOjEwRENFMDAwRUZCMDVGMTk4OUVEQzYwMUZENTFERjE4QUMzRTIzQzJDQwotOjEwRENGMDAwQ0UwMjdFM0VBNTJGMTAwRUY1ODk0QUZGNTFFMjIzOEZGQQotOjEwREQwMDAwMjExREU2MkFGN0I4RTYwQUQ1MUMzNjU5RTk5QzZCQTAxNgotOjEwREQxMDAwN0VDNEI4NjYzMUU5NEQ3OTZGMkVGQTYzQTAyNzI5QUYyQQotOjEwREQyMDAwODJBMjE3MjVGODFGRTU0NUNBNTk2N0E2NjY1N0NGOEIwQgotOjEwREQzMDAwQjQzN0Y3M0ZEMDhGMTlFOUZBM0NFMjJBOUQ1NEZGQUE4NQotOjEwREQ0MDAwMzMzQUE5N0ExMkU4MzVFODdBRThBNUU2Mjk5QkZCMkM1NAotOjEwREQ1MDAwOEY3N0NFN0Q3NjdBQ0M0MEMyMUI0ODFDRkE0MzMxN0Y0OAotOjEwREQ2MDAwQTJCOENBNEM2NTBFNkM2RDI0RjFCMTY5ODQ1MzQyN0QzMgotOjEwREQ3MDAwM0I3NjQ3MkM5M0UwRDFBQzFEMDI5RDZGMURCMzIzOTJERgotOjEwREQ4MDAwRTAzMDdGMEY5RTU3NDlCMUY3NjM1RkVDM0UwMkUzOTNBQgotOjEwREQ5MDAwMjc1RkY4NjIxRUU2QkQxRkYzNUI0NkYxNjM0MzcwMDgyMAotOjEwRERBMDAwRTU5QjEwNDcyODc5MUNDNDkwRjdGMDFFRUIwNUM5NTg3NQotOjEwRERCMDAwOERGNkNBQzlEQUU1MEYzMDEwRkQ5QkY5Mzk1OTU4RTVERgotOjEwRERDMDAwQzk5QzRFRkNERURGREM3RERDQ0VDRjFEQ0VGNzA1MkZGRgotOjEwREREMDAwRTAxQkQwRkU0MjkxNDg3OTlBOUUwRUNFMjBGRkFERUUxOAotOjEwRERFMDAwMEUxM0REOEY2MEIyRTMxMzVDNTc0RDUyRjhDMTEyMDM3RQotOjEwRERGMDAwMEI0QjBEQkQ4MjI0OTA1NzBEN0QxRTBEN0FFQzNEMTcwNwotOjEwREUwMDAwRjRFRjg1NzU5N0QwMTNGQ0Q4QjQwODVEQkQ1MTBFRkFCOAotOjEwREUxMDAwMDZGM0M3OUE2MjQ0OUIxQkM2MUY2QUVGQTlFQkNGMjk4MgotOjEwREUyMDAwOTY5QjMwOUVDMjVDREM4RjU2Rjk4Qjg5Njc4Qzc0NkYzMQotOjEwREUzMDAwN0UxOENGNUY3MUM3MjRGRDNENDlEM0IwRjMyM0M5REVGRgotOjEwREU0MDAwMENEM0ZCREZDRUFCRTQ2RDVBQTBGMjUzNUZENjU3QzlCQgotOjEwREU1MDAwNEI0RkY2RkZDMjQxN0UzRjQ0NjJDRUQ1QUFCQ0EwRkUyNgotOjEwREU2MDAwMDdFRkU2NjlDNENGOURDRDI2RTY5NjA4N0ZBRjYxRkQzQQotOjEwREU3MDAwMDVEOTYyQzM3ODQwQUIxRjlFMDRFRjQ1QTE5MUI0MTI0RgotOjEwREU4MDAwOUY2MzVFNTBFRDNDMzEyRkE4MTYyRjk4MTc1NDBCNjNGQgotOjEwREU5MDAwNUU1MDZEN0JDQzBCQUFBREM3QkNBMERBN0FDQzBCQUFDNgotOjEwREVBMDAwODUzMTJGQThCNjNERTYwNUQ1QzI5ODE3NTREQjFFRjM4MQotOjEwREVCMDAwODI2QTYxQ0MwQkFBNkQ4Rjc5NDFCNUY1OTgxNzU0NUJENgotOjEwREVDMDAwOEY3OTQxQjUzMEU2MDVENUI2QzdCQ0EwREE3QUNDMEI2MAotOjEwREVEMDAwQUFBREM3QkNBMDVBMThGMzgyNkFEQjYzNUU1MDZEM0RFMQotOjEwREVFMDAwRTYwNUQ1RDY2MzVFNTAyRDhDNzk0MUI1RUQzMTJGQTg2RQotOjEwREVGMDAwMTZDNkJDQTBEQUY2OTgxNzU0MEI2MzVFNTA2RDdCQ0M0NwotOjEwREYwMDAwMEJBQUFEQzczQ0EwREE3QUNDRkJBOTg1MzFFRkE3QjY0NgotOjEwREYxMDAwN0QwQjVCOTQ4Qzc2NkM2N0JDQUIzOTNEMUFGNzlEQkU2QwotOjEwREYyMDAwMjU3RTNFNzQyRkYwMzNDQTYxRjM0NDFCRTUyRkJDQ0UyRgotOjEwREYzMDAwNzU2MjRCQkFCMjZFNTFGOEY3MTIwQjk5ODJFN0QwM0I3QgotOjEwREY0MDAwN0I1RkU1Q0Y5N0YwOUQ2Q0IyMDc0Qjg5N0Y1OTY4M0RBOQotOjEwREY1MDAwRkE3MzhGMUExRDc0MUY0QTZFRTBGNzEzOTk5MUZCMDEzMwotOjEwREY2MDAwRjM0NUM1RkY1MUYyNDJDQzE3MjVGMjAzMzA3N0IwNTE4QgotOjEwREY3MDAwMzM5RUFFMEUyQjMzNkFGMDEwNTk2MEQzQzFEMUNFMTg0OAotOjEwREY4MDAwNURGQkVFOTMyNDVEN0QwRjU3OUFBRTNFQjZDQ0FFODMxQgotOjEwREY5MDAwN0I1N0U3RThEQUY3NTlFMEQwQzFGMTcyODFBRTdERTI1NAotOjEwREZBMDAwNTJBNzBFNEVBRTlGQTQ2QjlGQkFEQUE1QUJFRkVCMkUzNQotOjEwREZCMDAwRDNENUY3REI1NEFEODNGQjM3MkNEMEI1QkY3MTg3QUMxRAotOjEwREZDMDAwQUIxRkUwNTlBQUFCQ0Y2Q0FFRDdDMUQ5MkRBQjc1RUQ2NQotOjEwREZEMDAwMDcxRjcyRUJFQTczQkQ5Qjc0RjU0M0JGNkREMEMxMzc2OQotOjEwREZFMDAwRjk3NkU4REFERkUyRjdFOEUwRTE2QzlGQUU3RDlFRjVENgotOjEwREZGMDAwNjMxRDNDQ0FGNjk5QUVGREFEMzE0Nzc0RjVBM0E1OTNGOAotOjEwRTAwMDAwQkFGQUYyRDNEQ0JGNjc3NUIwM0VDMDM4NjUwOENGQUY0RgotOjEwRTAxMDAwNTFFOTYxMERFODVGREM5RTc2NUVEN0RFMTQwNUVCMDUwNQotOjEwRTAyMDAwRTA5RjBBRDA4N0U4RjdGREQwMjU4RUYyMzFCM0VBMzBDMQotOjEwRTAzMDAwM0JERUZCOTY0NzU0RkY1MTdCQ0Y3QkFDRkQ0N0RERjdDMgotOjEwRTA0MDAwOUYwRTBFRjMwNEQxRkFDMjRBRjZGNkE2RkVGQ0JFNTlBNAotOjEwRTA1MDAwNkIzRTExRjUzRTNCRjNCMTk4MjgwQTA5RjlEMDNGMTIwNwotOjEwRTA2MDAwRjAxNzk2MDAwRTczRjBCQ0QwRTAwNzkxRkY2NDAzQkY3OQotOjEwRTA3MDAwMDhGRENERDY3NTkxMjEzRTFFRUQ3MjcwOUI1RkRDRUJFNQotOjEwRTA4MDAwOEEyNkNGQ0JENUZDRTJEQkYxREJEOTk0QTdEN0QxMUYxMQotOjEwRTA5MDAwQ0FEOTBEOUJGMzcxOUQzNThCQzk0QjcwM0Y1MUNEQjNFMAotOjEwRTBBMDAwQjgzRjQ4MUZERjUyQ0JEMTU2QzBBRkU2N0JGQjgyRUFCOAotOjEwRTBCMDAwN0IwREZDMTk3OTFGNkQzRDQzRUQ1QkZCNTVFMjVGMDI2MwotOjEwRTBDMDAwNEM3NkFFQTZGRkM3NjBGRDY3MDRCOUFFQUYwMUY5MDM5OQotOjEwRTBEMDAwN0ZFODg5MUExQkMxQUI2QTYyMDg3RUFBNDZBMjcyNzVFNAotOjEwRTBFMDAwNEQxQTk1Q0ZENEQ4QTk3RTZENEQwRUMxQ0ZENTM4MDgyNQotOjEwRTBGMDAwNzZENzE0NTBCOUJFQzY0OUNGMzdENDRDMjJGODg1MUEwQQotOjEwRTEwMDAwMTc5NTlCNkFDQUE4N0NCOUE2OUFFQTVGQUQ1OTQwRjBGOAotOjEwRTExMDAwRUIzNTMyOTUwRDM1NEJFOUY5OTY5QTdBODJCN0Q2QUM0NAotOjEwRTEyMDAwMjZGOENEMUEzNzk1M0I2QTM2NTFGOUU3OUEwNkFBNkY1OQotOjEwRTEzMDAwMDRGRjBERTE1RDM1MUU4MjNEMzVDRDA0QkY1M0QzNDI1MgotOjEwRTE0MDAwRjBCQjM1ODcwOERFNUJFM0E1QjJCOUU2NUIyQTNGQThFMgotOjEwRTE1MDAwRjE1MUZENUY2QUZDMDQ5RjUxRjYyMUU2RjcxNzc0Rjc1MQotOjEwRTE2MDAwRjE1NEQ4Qzg4RTcxN0YwRkYzNTY2MDFFODYxQ0QzNzc4QQotOjEwRTE3MDAwM0Y5NzFGMzc5MDBFQTc5NEZFNEQyM0MwNURDMjM4NzJBMwotOjEwRTE4MDAwQ0Y5NEY1NzU5QTc1NDU1RDdGMUVCN0FDMzVGMEZDMkRDMwotOjEwRTE5MDAwQjUzRDk5QUQ4RUZDNzYwN0UzRTdCNEI4REYzRTEzRkZEQgotOjEwRTFBMDAwMjVDMUQzQTg5QUJEQjhERTI4QURFNjc5Q0FCMzkxMUZDMAotOjEwRTFCMDAwRDM4ODFGRkY3MjVERUIzNDY1NURCMDI1RDFGOTA0RjJBMQotOjEwRTFDMDAwMjMwQjcxN0YxQTlGRDU3NjhGRkU0MEEyRUJGN0Y4RkNFOAotOjEwRTFEMDAwNDJGNTdEN0JCMUY1NEM5QjNEMDUzRjMyRDZFMjg5QzZDOQotOjEwRTFFMDAwRkM1RkJFN0RBMjdEQkRENEY5RjdBQTk0RkIwRjlERDYzRQotOjEwRTFGMDAwRUYzQUQ5MEJFRDU1QzE0RjIyQzVGNUY3OUI0MjI3RTEwOAotOjEwRTIwMDAwM0VGRjhCMEEzRTVFRUM2RkQwOTU3NzI1Mzk1RkU4OEYzNQotOjEwRTIxMDAwRkJGQkM5RDUyRjNDMjBCNEREREYxRjhGNEI3QzkwRUY3QgotOjEwRTIyMDAwNDIyNjUxMUU5Qzg5Q0NGMTFFQkFFMDc3ODAyMzg4RjBFQgotOjEwRTIzMDAwNUQ0Q0E2RjI0NDgyRUI0RjM4OUZCQjYxMDE4MkIwNkIwQwotOjEwRTI0MDAwODgyNUFFQTNGOTA0OEU2N0E3MzI5RTlEQ0EzOEQ0NzI4MgotOjEwRTI1MDAwNkU5MjczMDdGNjc3MkNEOUExMUJDRjhCNEE3RUExNzFFMgotOjEwRTI2MDAwQ0NGNzFDOEVFQjFGNkY5RjNGMkUyNEI2RTFCQjM1OUU3MwotOjEwRTI3MDAwQzJBQTI5NEY0NjMxRTNGMTk0NDczMTJGNDY1NDVCNUVFMQotOjEwRTI4MDAwMEM3NUZENTBCQzhGRkZDRTExRkRBMUZEOUMxRjRGRUIwNwotOjEwRTI5MDAwREJDMEJDMTk0Qjg2RUZFMTc5MzA2MDNEODZGNzdGOEJBMAotOjEwRTJBMDAwRUZGRjE1RTk1RkZDM0QyOEJDQjczQkJGQ0I2MUNBMzMyQwotOjEwRTJCMDAwRTM5RDA1QkMxQTRCNzkzNTc4REUxQjE3MjAzMDk2RjJBQQotOjEwRTJDMDAwNkE1MEJENzAwM0ZDQkYwNzhFQ0I5QTY2QTRGMTc1QTE5RQotOjEwRTJEMDAwN0MyNzRGMDdFRkE3QkMzNDE4NTNCMDc0QzVCQ0M3RjFGNwotOjEwRTJFMDAwMzRDRkZEQ0VGM0RDRUY4RUYyRDFGREQ0MkQ4OUFFQUY2RAotOjEwRTJGMDAwRkFGMzM4Rjk1Mzk5MTgyNzQyN0VDMkVGRDhEQzc0N0VCRQotOjEwRTMwMDAwMERGOEM5MkMwMDhBNjY0NjAxM0Y3NUUwNkZBODdDNTM2MgotOjEwRTMxMDAwQTlEQ0MzNTE5RjAzM0Y5RTQwN0M3RkI3NzM3MDFBRjIwNAotOjEwRTMyMDAwNERENUFFNUMwOUYxNUQ2N0UwRjdFOUU0MEY5NDdENDFGRQotOjEwRTMzMDAwRTVGNzEwQzRGMEY0NzU3NEVGMDA5RDcxQTQ2RjZFMjhCQQotOjEwRTM0MDAwREQzQjY4MTJEOTgyQ0QxREU4NTc2QjA2QTdGM0ZFMTg5NgotOjEwRTM1MDAwOUU0RkIyMkU2MDdGNTJDOEUwNzQxNzk0NzY2M0RGRDk2NwotOjEwRTM2MDAwNDc3OUM4MkE5Qjc5QkM5QTY1NzlEMzlEMUQ5Q0NCQUExNQotOjEwRTM3MDAwNUFGMERCQTc5MjM0RjNBOERBNzE4NDlGRTc2MkRFNzQ2NwotOjEwRTM4MDAwRUQzOTJFNDlFOTU3RTUzRkQxMUNFQTVBMTdBMjFENUYyNgotOjEwRTM5MDAwQUIxQzU4MzJCMjQ5MEU4RUUzQkRFRTcxMTYyOUZDMkUyRAotOjEwRTNBMDAwODE3RTFGRUMzQkNDMkZFM0ZBQTM4RENFMDNBQUU3MDJCQwotOjEwRTNCMDAwNjczMDI3OTUzM0MxNzIyMkRGM0JFNTk1NzQ3RjdFMzY0NwotOjEwRTNDMDAwNkJBMEU3OTUzOUQzRTMxMEFFNjJCRTkxMzFCODNFNUFFNwotOjEwRTNEMDAwNUFGQjFFODY4MzI2RDZBRjFDRDUwM0U2MzVDMTNERUQxQwotOjEwRTNFMDAwM0QyQzBCMzcwOEM3NjU4OUU0MjgwNkJGRUYxNUFBMTcyRgotOjEwRTNGMDAwRjc4NEVGRERGM0VBRjBDNTE4QjcxRTI3NzIzQUIwMEZDNQotOjEwRTQwMDAwMzkxRDhBODE5RkM1ODhGNkYzMDNCOUU5OTMxMTRENzJDRQotOjEwRTQxMDAwNDNFMzU3RTVBNjc4MjE3M0UwRjkwM0Y1N0U0OEFCMUM4QQotOjEwRTQyMDAwRTVDQ0Y5N0IyQ0VFRTE4MDNGODlGQzVBQjVDQjEyNDE1QgotOjEwRTQzMDAwRUI1M0NDMzM4M0ZBNEE5MTlGQzU0NkVFNUZDQTk4REExNAotOjEwRTQ0MDAwOTRGNDI3RjczNzRDMEUyNTlGMTdFM0ZFQzgxQzk5QUZBRAotOjEwRTQ1MDAwQzc0RTk5QjhCQzlERkEyQUQ0OERGQzNEQkZDQkVCNzE1OQotOjEwRTQ2MDAwMjQxRjI2NTUzRTdFOUE0MkU3N0IxOEY4MUYzN0I3RjdFMAotOjEwRTQ3MDAwM0Y1QUYzQ0NGNDYyRTQ2RkIwMzg1N0NDQzBDNDM2N0I1QgotOjEwRTQ4MDAwN0VDQUUwMUUxNEM2RjNGMjNCMTA1RjdCNjNGOEZBNzk5NAotOjEwRTQ5MDAwMEVFNkExQzFGQUFFNEUwOUUzQTVBN0EyQUQ3NDVGMjhBRQotOjEwRTRBMDAwMzBDRjE5NjM3NjlBOUY0OTk5MUY4QzZDMTJGQUQzMTY1NAotOjEwRTRCMDAwMjVBRTU2MTczMERGMUY4MkUyNjhCRUQyNzBENkMwRDBCQwotOjEwRTRDMDAwQjEzMERBRTRFOTI4RjcwRjcwM0IzMUJGQ0I2RjVDRjg2RAotOjEwRTREMDAwN0Q2RjEwQjMwOTQzNjkzRTE0OEY5NTBEQ0M1OUM3RTM4NgotOjEwRTRFMDAwQjMzNEJGMDU0NkFCMERDRkU1MkM5OTI2N0EwNUIyMTNBMAotOjEwRTRGMDAwMzA0RThDRTc0NTU5RUQzQ0FGQUE5QTdGM0I3MEJDMEU3RAotOjEwRTUwMDAwRkRGOEFDNzEwQ0U3RTcxMDk5MkY2ODI4MUYyRjhFNEY4QwotOjEwRTUxMDAwMDY3QTEwN0QwMDlFQTYxOTFGRjRFQkE2RkMzRkMxOTI1RgotOjEwRTUyMDAwMERGREIwRTY3RjNEQzBFM0NCQjVEQzdGODRGMTZGMjIwQgotOjEwRTUzMDAwRkFGNDgwRjFDNzVFN0RGQzI2NjQ1MTE4RkZEQzBDQUU1NgotOjEwRTU0MDAwQTdFQTcwMDc1MTQ0M0JEQjk1RjRFRjg0MjBFN0ZEQzg1MAotOjEwRTU1MDAwODc0OUFFRTVCREU2NjI1QzIzRDc2MkM3RjgxREJCNUNBOAotOjEwRTU2MDAwRDcwQkY1NTQwODkzMjhBRkQ2MzgwN0NGQUIwNUREMkQ3MAotOjEwRTU3MDAwNDI3RTI4QzRCQzc1MzZGMjAzQ0U2OEYzQjBCMTgwRjg5MQotOjEwRTU4MDAwMUE5MDg1RTJBQjEzMzBCRUM2RUYxMkJEOEJGMUQ5ODk2QwotOjEwRTU5MDAwQ0FGOUU2QkVFQzRCMTU3RjE0NUYxMzcxN0MxNEFGNzY5RAotOjEwRTVBMDAwRDEzODJENDg1OTI4ODMzMENFNDM3NDcwRDMzQzgyOTk5QQotOjEwRTVCMDAwNDc4OTY3Qjc5MDdGQjA1MkUxQzMyMTg3MThEOTg5MjE3NQotOjEwRTVDMDAwMjFEQzRFRUMzQUMyREM3OEVFQUJFOUM3M0JGMzQyQTE2QQotOjEwRTVEMDAwN0VENzc5MjNFOTI5QzAxM0U1MDNGQ0YzNUZCOTVERDk0MAotOjEwRTVFMDAwNzVGMjc4MkNFRTA3RDRGRUI4MzcxNkZEQzQ1RDI2OTc3OQotOjEwRTVGMDAwNTg4NUVGRTc1QTZDMEJFRDZENzE4REM2NDMyMTNDQUUyQgotOjEwRTYwMDAwQTNDNEY5NkU1MkU2RDlDODVBRUFBQUEwM0VBNzg3QzhBMQotOjEwRTYxMDAwMzAwRTk4N0REMDEzOENGMjhDMzk2QTNCREE2RjFDNzYwMQotOjEwRTYyMDAwRDFBQ0ZCNUQwQjkzNEQwRkU3MzAwRDFDOEYyMUIyODBGOQotOjEwRTYzMDAwREZGRkJDQ0U3NUVFNkIxOTlERkNFRUU3OTlBODZCRkE3NwotOjEwRTY0MDAwRERDRjJDNjUxRThGNjYzOERGQ0MyMEJCMzY0MTU0RjAwMQotOjEwRTY1MDAwMkUyMEJFNDAwRjM0MjFCRTlGQTkzMEQzRUYxQTM0NTU2RgotOjEwRTY2MDAwOTg3Qjc4MzVFM0FCOUZGNTBGQzJFRkVFN0ZGRDgzRUMyRgotOjEwRTY3MDAwRDZFRTZDMzUzRjRFNDMxMDNFMzdDQkExMTQ3NzdCRTY4OAotOjEwRTY4MDAwQjI4MUUyNkU2QkNBQkVBNkY1NDk3RDBFQTNERjExQUI2NwotOjEwRTY5MDAwQkY1QzQyN0VDMEE1MDI4NjlCNDhBQ0Y2RTZGRjUzODY2RgotOjEwRTZBMDAwRjBFMzM3NTlFOTdCODFFMzdGMUJGQzc5MEYxMEVBMkRGQQotOjEwRTZCMDAwRjBFNzNEQTlFMEFGODAzRjhGMzBERTY3QzU3MjFCRjgwMQotOjEwRTZDMDAwRjM1OEJBQzE5RkM3RjIzOUYwRTdCMTFERkFGMzU4M0VDQgotOjEwRTZEMDAwMDNGRTNDOTZBQkMxOUZDN0YyMjlGMEU3QjFERDJBRjBGQgotOjEwRTZFMDAwRTdCMTdDMDJGQzc5N0MwRUUzQ0FBMzcxMUQ2Mjc0NkZGMgotOjEwRTZGMDAwN0Y2MTcwRDgzMkY0MzMyNDM5OTRGQzhEOEYxQzAzQkJCNgotOjEwRTcwMDAwNzgzNTc2RjZFNjhCMDYxRDlEODc5REQxRkZCRUNEOTBCMAotOjEwRTcxMDAwNjMxMUJBREYzRkM5RjlCMkE3QUU3RUQwQzEwNDVEN0RGNwotOjEwRTcyMDAwQkNBQ0ZGN0Q5QjNFMEI3RUZFRjc2RDYyQ0I0NjA0RkNDRQotOjEwRTczMDAwM0VDRTZEMDFCRjlGQTNGRjdEOUI2OEU3M0QwMUJGQkYzQwotOjEwRTc0MDAwQTNGRjdEOUJDNzk1N0M5OTJBMUQ1M0E0RDc4MjkwMkY0OAotOjEwRTc1MDAwRDY5NDREMDg2NzFERjgxNzZBRjk4NDQyMEYxNTdFRjJBQQotOjEwRTc2MDAwMjE3MTUyNDc3MUU0RjAxQkI5QkQ3RkU3MkJDQkJFMEQ4MQotOjEwRTc3MDAwODBDRkREMkNEQzg5NzFGN0REMEUwM0U5QTU2NzU2ODdCNAotOjEwRTc4MDAwNTAxQ0Q2RTIxRDcyMTJGOTY3Qjc4MzQ5QzgzRkNGNUNBRgotOjEwRTc5MDAwMUVEMTA1QzczMzFDQzg4OENGNjNDQkI4N0RFQTc5QTNFNwotOjEwRTdBMDAwNDRGQzFDNUJFNjEzRjFCRUU4MkQ5NzdENzZFNEM3Mjc5OQotOjEwRTdCMDAwQzNGOEVGNkM0MUJGRUU4NUQwREYzQjYzMDdGNUM1Mzg4QQotOjEwRTdDMDAwQ0UzMzIxQzBDRjI4NkYxRTVGNzAxMkMwRTE1NzBDMENGMgotOjEwRTdEMDAwRjUyM0Q4NEFDQUYzMkZGRjIxNDQzOThGN0E4NUVFQzMzNwotOjEwRTdFMDAwODVBMzRFMDdCREI0QkI4QzdGM0ZDNTdCMzk1OEVCMEY2QgotOjEwRTdGMDAwM0RGRUQzRDVGMEMyODhBRjNBQURCRjZENzYwMjhFQjc3RAotOjEwRTgwMDAwMERFRkEwMUFBMTRDNjE2NUVDMzFDNDQ3Mzk5NzlGRkEwRQotOjEwRTgxMDAwMzIwM0M5RDMyNTkwMjdDNDBGQ0M5QUU4QzI1QUY0RjIyOAotOjEwRTgyMDAwRkUwNENBODc5NjBFRTUwOUNCNzA5RUNGQUMzMkQyNkUzRAotOjEwRTgzMDAwRDkyOEYxRDU3RDM3QzIyQjZCMEU4QUI0Q0QyRUQ5N0M2OQotOjEwRTg0MDAwQzExREY5NzdFQUI4RDczOEY4RkMyMkVDQ0M4MDc2MkVENwotOjEwRTg1MDAwMDJGMEU5QTZGRDZDN0JBREY2RjdBQ0ZFQTBDOEU3RUZEMQotOjEwRTg2MDAwMTVGOTdDNUFFMTA3NUM2RjIzM0M0QTVDM0IzQTA1QzdDQgotOjEwRTg3MDAwOTFDM0Y1MzVEMDUzQzBGQjU4OTc2NjMwRkExREQxREZGMAotOjEwRTg4MDAwMTcyNTc0RTkyOENGRjcyQTY1MUNDRjI5RjM1QThCRkQ4OQotOjEwRTg5MDAwOTIzQzczQjkxRjI1MTYwRkM3N0VENjM4MTlFOUYxMzU5QQotOjEwRThBMDAwOEVBRjZCMzE2RTc3QTk4OEY3REJFNzExQUY4MEY4RUQ5QgotOjEwRThCMDAwNTVFRDEzQjBGRkRFRjMzQzU0QkE5NTcxRjYyQzZCQTEwNQotOjEwRThDMDAwN0FCNTNGQzlFRUU2RkM1RUZFMzU2Qjg2RjlFMjIxNUI2OAotOjEwRThEMDAwOTFFQ0M1MTlDQThGQkFDNjY4NjQ2ODg3NTE5RjIxN0NCQwotOjEwRThFMDAwQzk2QUM0MzMxMkFDRTdBQzYzMENFRjMzRDc4NzE4NjkzRAotOjEwRThGMDAwOUY2MjRERTUyOTgyNTdEQTM4MUMyNjU3QTdFM0Y5OEIyQQotOjEwRTkwMDAwOURDQTdDQzI2NDk5NjA3N0MwN0M1MkE0QTlFMURBREYxOQotOjEwRTkxMDAwNzMwRDJDQjcyQjc4REVBNkUwNjNBN0M5NjVCODAwRTNCQQotOjEwRTkyMDAwMThGQzM3OTE3RUJGQTNCM0Y3NTQzQjlCRjNBNTIxNDA1RQotOjEwRTkzMDAwRkY3NEQxQzkzRkZFQzY5RTYyMTcxRUJBMTFEN0NGQjI2RgotOjEwRTk0MDAwOTNFQzgyQkE2RURCMzY4NkRCRDc5NUMxNTMzRUM0NzUzNQotOjEwRTk1MDAwN0Y5MUMyNDc0RjA3OEY3QjBGRUIwRjhDRTZCRjgzRDNBRQotOjEwRTk2MDAwMzRGQUQ2REU1QTNEQjk0MzE5Rjc3NjA1RUZCOUIyRTM2QQotOjEwRTk3MDAwQUI3OUQwQkVEMDY5QzE5MTgxMTk3M0Y0RkUxNUY0RTc2QgotOjEwRTk4MDAwMUMyM0RBM0Q0MEI3ODNEOUFBM0MzODgzNTFFRURFMTkwNwotOjEwRTk5MDAwMzM5RDFEQzJGRTBCRjhCRUQzQjY4Mjg5RjQ1QzYyQ0VGNQotOjEwRTlBMDAwREJGQkMzN0I5RkI0MThDOTlGODFFNzNGMkI4RkZCMTUwRgotOjEwRTlCMDAwRkNGRjQ1MTlDNzA3MEFGRTlCMTUzRUREOEI3NjI0MTUyMwotOjEwRTlDMDAwRTMyQzY5NTRCRUEzRDgxMThGNjI0Nzc2Mjk3NkE0NTFFRgotOjEwRTlEMDAwQjEyMzNCRDE4RUE0RTJCQzI2NTFCOTREQjEyMzU5QTMzQQotOjEwRTlFMDAwOUYyNDNGRTkxMkU2QzUxNUQwOEU1NEIyMjUzMENFN0M2NwotOjEwRTlGMDAwMThCRkQ4ODE3RDFCOUYyMzA2RkM0RTU2QjA4RTRFQjdBNAotOjEwRUEwMDAwQTc0NUVBRTBEMTUyNkNDMEVGNzQyNTA2RkM4RTU3M0Y1MwotOjEwRUExMDAwNUQ3RDlFMzUzM0UwNzdDMDg2RUFEQURGRTIxRjExRjBENAotOjEwRUEyMDAwM0I2MjdBM0IzMkU0RDgwNEJEM0ZGM0U1M0RCQUZBNDE5QwotOjEwRUEzMDAwMDc0Qjc0RjUzMkZFMDNFNjlCN0Q4Q0YxRkNCMkMxQzMzQgotOjEwRUE0MDAwN0U4N0ZDOTI3RERDQThGRTNFMzNFREEzQTlGRTU2QTA5NgotOjEwRUE1MDAwRkY5M0NENUFGN0YxMENCNDhGMjczMzA5Q0Y3NUQyNTZGNwotOjEwRUE2MDAwNjU4MkFFOUVGQ0E3ODMyNjY3MkM5RTNGQUMyRDA0QkUxQwotOjEwRUE3MDAwQzM3Mzg4MDc0QkM3MzBEQTg3MDdGRTA1NzlDQTc2OUVDRAotOjEwRUE4MDAwRjg5MkYyOEQ4QUM1OTlFNDI3NUQzNEVBRjZEMzcyMDNEMQotOjEwRUE5MDAwRjZDNTlDMjNGNUZCNjZEOTU3RDkzN0ZCRkI4RENBQkU1QgotOjEwRUFBMDAwNDMzQjdGMkNFMjlBRkMzMTkwMjcxMUM3RkQ3NEYwOTQxMAotOjEwRUFCMDAwM0Q4OEI3OUQ5RjcxM0JENUY0RDk4M0IxRjhGQzVENkM1RgotOjEwRUFDMDAwMEFGRDZDRkZFNjQxRjJCQkI2QjdDQTg3MkI1OEVCNkY2NQotOjEwRUFEMDAwNkRGMzcyN0JGMUU2QzE4NDFEQjhDRUM4OEExNjQ4MEY2QgotOjEwRUFFMDAwNjYxRDk5M0I5OUY4RjFBMDgxN0U5RjMzQTVBMDJBMTg1NQotOjEwRUFGMDAwRjFCMkVERDBDMjYwRkRGRDI5OEQ3RTIwNDI2OUY0ODMyNAotOjEwRUIwMDAwODhBQzFDQTFBRjhGRDJGMDYxMDIyNzhFQjZGREZGMDU0NQotOjEwRUIxMDAwNkI5MkU4MkMwMDgwMDAwMDAwMDAwMDAwMUY4QjA4MDBCMgotOjEwRUIyMDAwMDAwMDAwMDAwMDBCRUQ3RDBCNzgxNEQ1QkRGODk5OUQxOQotOjEwRUIzMDAwN0QyNUJCODFDRDAzREQ0MDEyMjZFMTYxNTQxRTlCRjc4QwotOjEwRUI0MDAwMjYyNDYxMTIwMjQ2MERCMDEwMUU0MTQyOTgyNDNDNTIwOAotOjEwRUI1MDAwQUIzNjU1QUJEMThGREU0QzA4ODQxMDUxQTJCNTE1QUM0NQotOjEwRUI2MDAwOEY5NThBRURFREUzMTZBRDA0NTQ5NEU1RTkwMzg0MDUzMQotOjEwRUI3MDAwODM0NjQ1NUQxMEQxREJEMkJGMjhEMERBN0VGNEYzN0YyNwotOjEwRUI4MDAwN0VCRjczMjZEOTE5MzYwMUZBQjhBREJEMzdGOTc0NzI1NAotOjEwRUI5MDAwNjZDRTlDMzlFN0Y3N0U5RDAzMjFENzkwODA5REUwQ0YxQwotOjEwRUJBMDAwRDcyMkZDM0ZEM0QwMkUyMDgxRjRGMDc2QTlBMTdEODMxQgotOjEwRUJCMDAwQTFGRjRDNDNGQjI2NDNGRjNBRERGM0FEQTE5OTgzMTUzQQotOjEwRUJDMDAwMjdGRDFCN0UyNjVFNzhERERDNEM0OEUwQUFCRTdFMzk0MAotOjEwRUJEMDAwNjY5RkU4MTk3MzYxQkZEQzZFNTNERkI4RjRCRjFEMUY3OQotOjEwRUJFMDAwMkMzMTlENEIyMEE0QUI1QkY0REI1MkU5RjVFODEyQTI3QgotOjEwRUJGMDAwNjZEMzcxQkE0RDdFMjJFMEQ1NDRFOEYzQUQzREFDNkRFRAotOjEwRUMwMDAwMjNBQTYzMUM3REJFQjlEQkVDRTk5MDA4RDlDRUJGM0JEQgotOjEwRUMxMDAwREFCNzcwQjAyRjg2OTA4OUU2RDMxMUJGMkI5RjM3RjVGNgotOjEwRUMyMDAwQUQ4RkMwNzgzMzA3OTMwOEZEQjRFQjRFM0U2RUEwRDk4QwotOjEwRUMzMDAwOEVENzZEQ0QyRTEyQjBGNTNEMTc2MzcyQkE3RDc0MUU1RQotOjEwRUM0MDAwNUQyMTkzODdERUE2RjMyRjhEMjc3NEREQkI5QzhCMUQ4MgotOjEwRUM1MDAwMzAyRTlEMkYyMTQzMjkxNjNDNDk1NTJEMjMwOTkxRTgzQgotOjEwRUM2MDAwQkM0RDc0MUQ5QjQzMjZEMjQxRDc5OTdEODQ3RDNGREJFQgotOjEwRUM3MDAwMjJDN0JCMjJDMDk1MTA5MzFFRkUxNzhDNDc3RjAwNEUwMwotOjEwRUM4MDAwNEVEMURGNDFFMUIyRjM4MzM5RjFFM0U4RjgyRjc0OEIyMQotOjEwRUM5MDAwMDRFNjYzNTUxQTFDQkVCMUI0RERDM0U2QTU4RDNCQzlCRAotOjEwRUNBMDAwMkVFQUUwNTA0MjFDM0E3QzE0OUQ4RUQzQjVCMzhGRDEyRQotOjEwRUNCMDAwNzlEMkY3QUREMkY0Nzg4MEVGQzVFNjQ5NDhCNDgxOEVCOQotOjEwRUNDMDAwRTIwQ0VEQTFCQUZFQTMyNThBQjdCMUZERTNFMTA1OEUwMgotOjEwRUNEMDAwODdDRDgwMDdCQUIwMTdBMjNDNTVCRTA4RjBEQUZDQTE3OAotOjEwRUNFMDAwQjVDMTFGNzZGRjNGM0MxNDI4NDNFMDZBQzI2QkY2MzE4MgotOjEwRUNGMDAwOTMyNzQwRTE3M0FFREJFNDAxRTBFNUJCM0FDNUM2MDgwQgotOjEwRUQwMDAwRTMxNDlDRDBEMzY3NkU3N0I0MEU1RTQ0QUMxRTkwMEZCNAotOjEwRUQxMDAwOUE4RUI2QUNEQTFERDZGRjFFNEY0Q0MyNDkwN0ZEMjNCMgotOjEwRUQyMDAwOEZFNEUxRkEyRkYyRkUxRjlCRDU1NUJCMkQ5NDhFMjk1RgotOjEwRUQzMDAwQzk2RUEyRkQ4OEFCOTI5MEM0RkVGQjEzQjI5QzMyNUJGRAotOjEwRUQ0MDAwMUYxQzg5MkI5RTJFRUU1MkYwRDQ4OUVGNUQ4MEFGN0U4MgotOjEwRUQ1MDAwREVFRjFCNDc2NUYwQTRFMDg1N0VBQkM2Rjk3RUU4ODE1NwotOjEwRUQ2MDAwNzE0MjMzNDRGOEZFODM4RURCQzQxMDlERjcyMzhFREJBMwotOjEwRUQ3MDAwNzYwMTdERUVGRjkzNTUwMkJFREVGMUE3QUUyNEI4QkY0QgotOjEwRUQ4MDAwMkY2MzRCMTJEMEZEM0VGQTRFMTBENjY3QTY1OEEzNkRFNgotOjEwRUQ5MDAwQUJCQUMwMDFGNEY1NDZGNzYxRTQxRjg5MDQ2RjFDOUYwQwotOjEwRURBMDAwMEQ2RDkzQTc4Mzc2N0IzOUJENzIzMDE5MDA2RUFGNzFGQwotOjEwRURCMDAwM0FEOUNCRjk3NTM3RTdENzlEQ0Q2RUNFQzcxMjVFNUZENgotOjEwRURDMDAwNjk0RUM3RkJEQjlBM0REODdFQjFEOThCRURBRENEMzIxNAotOjEwRUREMDAwQjZCQjlBQ0JGMTdBQThEOTg3RjcwRjM2NTc2MUZCQ0QyRQotOjEwRURFMDAwNjY4NUQxNjFGQTFENjUyMDhGQ0UyNTUxMDBEMDc1MkQyNQotOjEwRURGMDAwNzc0QzMzNDdDMkU3RjU5MjlFQ0ZBRTczRUJGOTZDMzI5NgotOjEwRUUwMDAwODU3Mzc4N0I5MjdEOTg4MTJGNDdFODlFNEZGQ0VBMUFBNAotOjEwRUUxMDAwRERGM0EyRDM5OUJBRjY4NENGMEE3NEZERjM0M0E1QkEwMQotOjEwRUUyMDAwNzY1RUNGMERCQUZFMzNDQjJBNzVDRjdEODVGM0Y1RjMzMQotOjEwRUUzMDAwMTM5RDI4NUZCNkJCMDQ5NENCRDNCMkVCNzVDRkI3QzM5OQotOjEwRUU0MDAwMUYyMDg3RUQ4MjVGNEQwNUI4NTQwRTI4NEYwMzgwMUZBOQotOjEwRUU1MDAwMUJDMDkxRjFGMUFCMUMzRjdCMDAzRjM2QzAwQjgzRkYyMQotOjEwRUU2MDAwQ0IwMDdGREE3RTA5RTA0REFGMzk2Nzk1NUQ4MzI1OTA1MQotOjEwRUU3MDAwMDMwREQ4QjZBNjBGNzY3QTI4RkM1Rjc2OEEyOEZGQjdFRQotOjEwRUU4MDAwMzQzN0UyN0JGQkNFRDU5RDE1NzFCRTBFMDlGMEIyOURFNQotOjEwRUU5MDAwQ0Y2NzlGNDUzOTJCMjY0MDVCOTA5NjBCMTdDRTJCQTc0QgotOjEwRUVBMDAwNDdDRkVGQTNDQjE3QTJEQ0RDREU3RERDMDFGNEY2Q0E5MgotOjEwRUVCMDAwNTc5N0E2RjdCNDdFQUY5MkNBNDk0MDFGQzVERDU0NTc5NQotOjEwRUVDMDAwQTU1RTVDRkY2OTdBRUI2MkUzNkJGRDQwQUY0NkQyMTc0QgotOjEwRUVEMDAwQzY3MTZGRjg0QTExMDk1REM3Q0IzREVBMEY2MkEwMURFQwotOjEwRUVFMDAwRjg5NjI4RDE3NjZFOEYzMjA5RjBCNjNCNUQ3MDg5MDJCNAotOjEwRUVGMDAwRjY5QjI0QzNCQ0NGMUZCRTExRUVCRjEyMzI5QjYwREU1NwotOjEwRUYwMDAwRkJDRkM3MTE1OEM3NzZBQTc3NkRCNERGMUI2NEM0OUFDQwotOjEwRUYxMDAwRjExNERFODE5RTJGRjcwMTVGQUE0RThCNjcxNEI5NzA0MgotOjEwRUYyMDAwMUUyOTE5MjJDQTg3Q0Q2MzZDMjY2MTNDRTgzQjMzMDk1MAotOjEwRUYzMDAwOEMwMTNFNTcxMDlFNUQ1RkE1MzlFMUJBMzk1REU0Rjc1QgotOjEwRUY0MDAwODNDOEVGNTc2N0I4RjBCRDk3Q0Y2NzI2NDBEQjQ0ODI5MAotOjEwRUY1MDAwMjgwRjAyNjc0REU1RkUwOEVCQkQxQUJFNDM2NTQ4Q0U5QgotOjEwRUY2MDAwRjk4RjFDMkVEQTdGRUZEOTNBMDdDODk3NTc3QUQ4Rjg2RAotOjEwRUY3MDAwMzlDQjQyMEU4MEQzQkVBRjM2MzhFMUZFRjZGNDJDMUNGRQotOjEwRUY4MDAwNzdDN0Q4QTU2ODVGNkMzRjZCNDJCQURFM0U2Njk1MzNBMwotOjEwRUY5MDAwMzMxQkQ3RTkwMUQ4NkQzRjVCQjcyNjAzRThCQUM3OENBRQotOjEwRUZBMDAwNkQ4OTI4MjQwOEY0OTZDRUY0RUNFNkIzNzVFNDMwN0Q0MAotOjEwRUZCMDAwN0VDRTIzRkE4MUNFNzI0OEU3REU0MTcwRkY4QTU1NTYzNQotOjEwRUZDMDAwOTJDNkUwNkZCRTgyOTA1QkQ5Q0I2NDkyNEIyRjA3NEEwQQotOjEwRUZEMDAwN0JGNEZBQzQxQUFBOUUzNTAzRUMwOEEwNjdEQTlFNkE4RAotOjEwRUZFMDAwOEVENzNEREZGN0VFRjI4NDk5ODAxNzBBNkZCOEY3Q0EyMwotOjEwRUZGMDAwRDlEQkY3OEQwNUY5RTM2N0VEREYxRjdEREEzQTk4NUUxRgotOjEwRjAwMDAwNUJDNkFFMUE3NjFCRjREQkVDRjBEODI0NzhBMjkwMkYwNgotOjEwRjAxMDAwNjkzQkVGQUNEOTBGRjY0NjhFNTMzRjhGN0Q1NzU3MjI5MQotOjEwRjAyMDAwREMzNzlGNjVGNkQ1Qjk3NEI2OUVFRDlFN0FGMjAwN0QwOQotOjEwRjAzMDAwRUY2NTZFN0Y0RDNBMzZCMjAyQkVCNzlGREE0RjYwNTcyQQotOjEwRjA0MDAwQkNFNEY5NEQ3QzE2QzgzM0FGQThBMzM3MEExRkE0OTdCOAotOjEwRjA1MDAwNzNERDA0QzdBMTNGODNBNjUyMzgxNEIyMkU5NDBGN0RFRQotOjEwRjA2MDAwQURERkExQ0ZGN0U1REI1Q0NCMjlBQUI3OUZERkI5RUIxQQotOjEwRjA3MDAwNzZEQUNFNEIxNDg5NDg1N0YyMkRCRjdFN0VGOTNGNzM2NgotOjEwRjA4MDAwRThEQUI3N0VBNkI3NEI2QzQ0RTBGQURDODk3MkEwM0ZBMQotOjEwRjA5MDAwRkU5OTcwREFBQTdCNkZBQUQ5QTYxQjM3OEY4NDNENDdFOQotOjEwRjBBMDAwN0M1QUZCOUVBNzVFREMzRUQ5QzJFNTlBNjY5RjZDQjE5NgotOjEwRjBCMDAwMjhGMzdENDBEN0MxNTkxN0QxQTNDQkI5RkU2RDQ0Nzk1MAotOjEwRjBDMDAwQjE5NTEwNEY0NzA2OTVFQjU3OEIzMkYwRTFCOUEzNzYxNwotOjEwRjBEMDAwODQ2M0RFMjMzMzI2MTBENEQ3Q0EwNEUwMDcyNEM2MzA2NQotOjEwRjBFMDAwN0JDMDdCRjQyMkY2OEE0QjI1MDlCOUZDNTMwNEFFRTZCQgotOjEwRjBGMDAwOTMyMURBQkY5REFBRjlBRjQxODc3MzdENkUxQ0I3M0Y5QwotOjEwRjEwMDAwQkRGRkEwNjMxMENBRkRDMjMyQTYxNzFFNzExQzQwM0Q5MAotOjEwRjExMDAwREZGNTAxRDVGMzAyRkI0Njg4RTI3RDM2RkMwMTdBRkY3QwotOjEwRjEyMDAwMDMyQkY2N0ZFOTdBMDFFNTg4NjYzNzU0MTJEOTQyNTVGOAotOjEwRjEzMDAwMUM5OUU2M0Q2QkJFOUZFMkNGNjdBRjE5N0IyQkJEQkUyRQotOjEwRjE0MDAwRjQ2RUQ3MzBFMERGOTdDMDNFNDBGOUQwRTg2MEY2NDE3QQotOjEwRjE1MDAwOEMxQTRGQTdCOEFEQzc4NjdDQjhFNUI0ODlEOEMxNkYwMwotOjEwRjE2MDAwRDg2NjQzM0FBNTdDN0FERjU4RkE5RDZENDE2NjJGNzRDNAotOjEwRjE3MDAwOURFNkY2REUzNjA3RjJDOThFREZCMzc5NzQyRDczMzA2MwotOjEwRjE4MDAwM0ZFMzk0NTUwNjdCN0NDQkIyMTg4NEYzNjgyOTI2NjA1NAotOjEwRjE5MDAwODZGMTlBRDhGODNEMUNBRjZGNzNCQ0VFRTNGQUVBNzVCRQotOjEwRjFBMDAwQUVBRjVFMDU3QjAyRjUxN0IzMjc3NjgxM0Q0MUFGM0JERAotOjEwRjFCMDAwQjgzREIxMURGNDE5QkQzRTdGRkFCOUY3ODEyRkNGNkQ2RgotOjEwRjFDMDAwOEI0MkJCNzMzNDQ5REYwNEYzREFFNkI0RTIzQzhENzA2MgotOjEwRjFEMDAwOUVBN0U4Rjk2MDZFOTVERTZFQTgxOEEzQjcxQjZFMTg5RgotOjEwRjFFMDAwMzk0Q0Q3MkU0RjFBQTE3QjdGNEFDMkI1QkFFNzY1Q0VGQwotOjEwRjFGMDAwMkNCRDNDMzI0RkQwQjVFNUYzN0FCQjYxQkFGNzQ2M0Q0MgotOjEwRjIwMDAwM0RDOTYxNzYwM0NBM0JCRERGMzgzQkRDNkY0QzA1M0MzMgotOjEwRjIxMDAwMzEzRjY3NEJDRkVEODhDNzJENDdEMzA2MkI2MTc2QzJCMAotOjEwRjIyMDAwNTYwRUU3MkQ0Nzk5RkVEQzFBRkEzMjQ2ODk2MDQ3N0M3NAotOjEwRjIzMDAwQzZGQkZEOTZFM0UzMTRDN0M3N0ZBN0M4MjczMjg2MDA0NQotOjEwRjI0MDAwQkY3Q0M5RTQ2RjNGNzRBQ0JEQUZCREY3OTlGRkUzNDEyQwotOjEwRjI1MDAwRTE3QTdEQjgyODIxOTM2OEVEREY3N0JEM0YxQTlFNUY4NAotOjEwRjI2MDAwMkE1RjUwM0E2RDBGNTEzQ0RGMkRDNjc0NzZEMDU3NTY0OQotOjEwRjI3MDAwOTkxQjlGODRCNkFBOUFDOUM2NkMwNDQ3QkExOTlGNUZBNgotOjEwRjI4MDAwRTMwMTc5REMxQUQzRjg1Mzc4QkVCOUM1RTZEQTkwMDAwOQotOjEwRjI5MDAwN0NGNDFGQkY4Njc2MTM2NTA1MUJCREZFMzEyQUM1NEY2MgotOjEwRjJBMDAwMjhBQjU5MzM0RDM4QUY2NzJDQkU2MTFFRDA5QjgyNkY5RgotOjEwRjJCMDAwRkVBREI0QkZCQURFRUFEOTI4NUQzODFGNjdBNkEwMzExQgotOjEwRjJDMDAwRkI1NkQwNDMyMkU3RkIzRjBCOEEzMzkzREU5NzdGMjkxRgotOjEwRjJEMDAwQTA5QzhFOTIwOEVBMDUxQkYxMDU4MDdGNDg4MzNDMUZBNQotOjEwRjJFMDAwRjg4Mzk4MjhGRkQwRUJCRDU5NEExQ0Y0MjczMjkxNUM3MwotOjEwRjJGMDAwNzQxQzY0NkRGQTNEMjFCOEY3NEYwMjlEOTc4NTM0QUFCRQotOjEwRjMwMDAwMzA4RUFEODE0QTE4Q0FDRjBGNjYyODg5RDhERjNDMTNFQQotOjEwRjMxMDAwQzc3RjdFMkEyMTIwQ0ZFODcyQjA5RDdEMTc3MTc1QzQwQQotOjEwRjMyMDAwRDJGOTExQzVGNDI1NkRDRkE3RkUzRTdDREZFNEI4MDUwOAotOjEwRjMzMDAwRjVENEZCRkY2REYyOEIxMUVDQTU1RTM4REY2MjM5MTU1OQotOjEwRjM0MDAwRDJFODJDRUQ0MkZBRTlFMjc0QjEzNUQ1ODdGMkQ3Rjg2QwotOjEwRjM1MDAwN0U2NjI2RjMwN0I3N0MzNDREMDRGQUNBQjYwRjkyQzExNQotOjEwRjM2MDAwQUVBMDBCMTQ2NzUwRjlCRUY1RjgwRDhFREEwOEVGNEQxQwotOjEwRjM3MDAwQ0VBRUNEQ0MxQ0QyRDdDRTBFNkUxMjZCOURFOENGOEIwRAotOjEwRjM4MDAwQjBBRUNERjQ2RjU4RDc4QkREQTYwMEUwRjc5Q0QzOEFFMgotOjEwRjM5MDAwRjJBNEJGNzVFNDg3RjQ3MTg4M0NCMDA3QzJGODhEOTA4MQotOjEwRjNBMDAwNkFEN0M5NkIwMURFOURDMkQ3RDc4NkQzOTc3QzVGMzhGOQotOjEwRjNCMDAwN0QzRDdGMjE3RDIxOUNFRjdFMkIxREUxREEyQTMwRkFGNQotOjEwRjNDMDAwNTIyOTdEQzE3M0I1QjQxMUU5NEIzNTExNUY2QjM2RDI0QgotOjEwRjNEMDAwMUJCRURGNjRCNkJCNkM1NDQyMkVDRDRDNDNCQUU5OEFFNwotOjEwRjNFMDAwQTk3ODNGMjBFMUY3NDZDQzQ0N0ZBRTg2RkI3MzM1MjhGMQotOjEwRjNGMDAwRTc1RjNGQzJFNEJDNzE1RDNCOEVDQzE5MTYwMjdCNjJCNQotOjEwRjQwMDAwRDREQzYxQzBFNzVEQTAwMDg2QzJGNDczRTc4MTdERDlEQQotOjEwRjQxMDAwREJBNkU4NDIzQjcwMzI4MTkwMTU3RDlFM0Q0Rjg2RkUxMwotOjEwRjQyMDAwRDc2QkVEMUNENkJGODRGNTVGOTJGOUYwN0ExNTlFMkY0RAotOjEwRjQzMDAwRTBDRjQ5MjVFQkFGQjVENUJDNzkyNUQwREY2MkMyRjY2OAotOjEwRjQ0MDAwMDdCQ0ZGNDMxRTc5MjlEMEUzODMxOTcyMDNFMDJGMDMyMQotOjEwRjQ1MDAwOEMxNjdBRkQ2NEJDN0MzM0RDNUY5QTQ5NzBCRDc3OEQ3NQotOjEwRjQ2MDAwOTc2RjA5NkZGRjY2OUM3QzVCNzg3QjczQUY5RkRBQzlFRgotOjEwRjQ3MDAwRkRENDVCRDEyRTdEQkQ2NzI2REFCMzEyRjFERDA4N0FBQgotOjEwRjQ4MDAwRTdGNTIwOEI0NzZEMUUzOUIwMUY3NDgwREJGM0ZCQjlBNQotOjEwRjQ5MDAwOUZGQTA2QzhBM0FCNDA5RjMwM0Y3NTBGRjc1Mzc3NzFCMwotOjEwRjRBMDAwQkRCMjgzRkJBOURCQjk1RTc5OTlGQjQ5MkY3MTNGRTlCNgotOjEwRjRCMDAwMDVGMDUzQUYwMjNCQTQ4QUM3NDk5ODlGOUEzRDZBNTIxMAotOjEwRjRDMDAwMTlEQTExMkVDRDRGNEQ4OUU4QTc0RUY3RUFGNUNENTQ0NAotOjEwRjREMDAwOEY1RURGREM5ODFFNkZEMDJGN0E3RDMzMjU0MUFGNkZCMgotOjEwRjRFMDAwQ0E5Q0Q3MUFGNDRCOTZBRUJGN0M1RUVGQTcxNjlGMkQzMQotOjEwRjRGMDAwRDVGNTJGM0NBNUY3NTMwQjRFQ0NENEY1NUY5QTI5MjFCNwotOjEwRjUwMDAwMUVCRDQ3NkZEMkY1Q0JFREFFRDNGNUVCQzM5QjBGRjEyQwotOjEwRjUxMDAwNjQ1NTFGNzc4MjFEQjc3OTY0M0RDNzFCQjMxNzM0QkM5MAotOjEwRjUyMDAwNzU1RDA0NkZBRjcyQkNFREUxNzhEQkM1RjFCNjgzRTNDNgotOjEwRjUzMDAwNkQzQkI3MDc1RUU2Nzg3Qjg5REIwMzJGNzBCQzZERTExRQotOjEwRjU0MDAwNzhEQkNDRTMwQjA3MzhERUY2NzNCQ0JEQzFGRERERUMyOAotOjEwRjU1MDAwNTFCQkQwM0YzQjc3OUE3MEJDM0QyMTQ2QzI1Qjc5OTI0QwotOjEwRjU2MDAwNjhDMDgzQzM4MDA3M0RERTRBQ0RDMzBDNzg0ODMzRTBEMgotOjEwRjU3MDAwRTExQTVEQkJGMDU0QTYwMTBGMDVCQUI2Rjc2OEE5MDEwMAotOjEwRjU4MDAwRkUzNzE4RUM4NjRBREQ3MzBENkY1MzNERjMwREY0NTVDRAotOjEwRjU5MDAwQUZFQjc3QzlGQ0U2NjQ3NkRFNUZDQjZGN0JCOTFEQjc1NgotOjEwRjVBMDAwOUJFMzZEMjdFMDBERTM0NDFFMUU4RkYwRjJCODJGQjNFRQotOjEwRjVCMDAwRTM1RUU0NzhEQkNBRTM0MjVEODAzN0IwRUYzOERFNUFDMQotOjEwRjVDMDAwNDc5RTQxM0JGRURDNzkwRDZGMDcyMkUyRUQ3MkY5RURCQgotOjEwRjVEMDAwM0FCNzNFMkUzNEQ5QTU4RjBCNERCMkVCRjlBRDg0RTg4NgotOjEwRjVFMDAwRURCQjg5NUZFOUY5QURFOEI0REVCRTlCRjA5OTlFREYyMwotOjEwRjVGMDAwRjI0MzMzNzU2RDZBMDcyNDY0MEQwMTNENzU5M0VFQkRDQQotOjEwRjYwMDAwOUM2MDlEQUUxRkY1OTM5OERGRTJFMTdBREY1Rjg5RkE5NwotOjEwRjYxMDAwQTg2RDJBRDM4Rjk0MEZEMUZFN0VFNjdCRDQwRUM4RTg2NgotOjEwRjYyMDAwODNDN0YzMDZGRkU5Rjk3RUY0RjdFODJDNjZENzc0QkRDQgotOjEwRjYzMDAwNUY4MzcwQ0QwMUZEMURBMTVGMDZFRjk3OTFFNUMyQUIyMQotOjEwRjY0MDAwQ0Q0Q0Q0RTg0QzlDRTZFRUExNzQzRUU2OTFDQ0VFMzE3NAotOjEwRjY1MDAwQzdBQzgxMjAwM0ZDMDQ0REI5N0Q3NjkyRThGNDExMTgwMwotOjEwRjY2MDAwOUZEQTRCMTk1OTYxRjZBMEQ5RDU0OEMwNkUxMDZEMEZCRAotOjEwRjY3MDAwNTVDM0JBODg2OEYyQTBERTM1RDg0N0E0QzEyNURGMEU4RAotOjEwRjY4MDAwRjc2RjFGRTRFOUEwQjA1ODkyMTU4QkYzNzA5MzREMTZGNQotOjEwRjY5MDAwQjAzM0VFQ0Q5MjBCNjA1QzcxMTI4M0M3RTY2NEVBQkJCNwotOjEwRjZBMDAwNTM3ODZDOEU2MjZEOTVDMjZCMjM2RDhCODNBQjExN0UyQwotOjEwRjZCMDAwNUQxNDVFNjIwNjhDOUY0MEVFQTJGM0FBQ0NCMjMyMzg5MwotOjEwRjZDMDAwQ0MyMzVDOUY2RUQ0RUI0MzMwMTg2OEZCOTk2OEQ2OUVDMAotOjEwRjZEMDAwOURGNUNDM0MzNUE5NEZGRkQ2RkNBNjZCQkQ0QUM3MTk5QQotOjEwRjZFMDAwRUQxQzVBNEZDNkQxNzFEN0E5NzE2MDY3OEVBMUYzMDM4MwotOjEwRjZGMDAwRjk2ODcyNkM0QjhFNjQ3RkY3Njc4N0E5RTNFNDU5NDAyMQotOjEwRjcwMDAwMUY3NzcxRkQzQTlBNDJDNDlDRDlGRkZCQ0Y0NEZCQkVFMAotOjEwRjcxMDAwMERGOENEMDY3ODg0QzVCREE2NjYzMUZCQUMxMkM2QzkwRQotOjEwRjcyMDAwNDFGQjUyMEVCNzJGNDlCMDEyREI2RDE5OENCRTdFQjI3MQotOjEwRjczMDAwNjYyNkQyOUI5M0MyNEI4Qzg1RjkzM0Y4Q0RCRjkzRDEwQgotOjEwRjc0MDAwRDdFNUFFNDM5QkZGMDA3NEUyMEJCN0E3QzNFOEU0QUU3NgotOjEwRjc1MDAwNDg3NDQyMkEzQzZFRjREN0ZCQjNFNzU0MzZERjU2NkU0QQotOjEwRjc2MDAwM0Y2QTc2QjIyRDQ5QjM5QkZEMUMwRTI0NTAxMDg3NTc3QgotOjEwRjc3MDAwMzI5OUMyMzVDRTQ1MzA1RTUzRTMzMkY5RkQxNDY0NTFGRgotOjEwRjc4MDAwQjE5OTAyQ0E5RDMyODFCODUyNjE3NDk5MzAzQzU2NDg5MQotOjEwRjc5MDAwRTFGMkM3MTgxRkY0MUU4RDM2QzhGNzM4ODMxRTFFQUE2MwotOjEwRjdBMDAwNkIxNzlGNEQzM0Y4ODlENzBDQThFN0NCOUMxMzBDRkE0NQotOjEwRjdCMDAwNjk5MkFFN0Y3OUQyOEQwNjNGQjZEMkUwRTdFQUY1ODQ1MgotOjEwRjdDMDAwOTk5ODU1OEUyRjEzQzYyRDU0NDEzMkU3QzI3RDgyRjg4OQotOjEwRjdEMDAwMDk3QjhFN0U2NzJGOUMxRjkzQUI5MDVGQjk1RjYzRTRCQwotOjEwRjdFMDAwRDc3QkIzMjQ4NEIzRTA2MjdFOERDNjBGREFGQjFBRkNBQwotOjEwRjdGMDAwQUM2RTg2RDdCNUI5OUE3RUYyQTBERUIxMDVCRTQ1MjBDMwotOjEwRjgwMDAwQUU0QTZENjg3OTUzMThCRDZENjhCNkJGNUYzNjhBOTA5MQotOjEwRjgxMDAwQTc5QkM5RkI2NTE0NzlGRTY2MTc1RTlGNjg3NkUzRjVDMgotOjEwRjgyMDAwQjE2NjA5QUY4RjM2QTc2M0JGNzVDRDFFNkNGRkE4RDkyRgotOjEwRjgzMDAwOEJENzg3OUI2NUJDRkY1MDczMzlCNjNCOUI3REQ4NUVFOQotOjEwRjg0MDAwRDM1Qzg1RDc4RTY2MDVFRjhGMzQyQkFBOURBRTZCNjQ5MwotOjEwRjg1MDAwM0JGMUE4NzQyOUEzM0FFOUY3QzJFMDM2QTI5RENFMjM3MgotOjEwRjg2MDAwMENFRUE5QUE0QkQ3MUVERUU0RDZGNTRGNkU5NDc0Q0ZFQQotOjEwRjg3MDAwODczNUE0RUI5RTI3MkExRTVERkJDQTJBQUZBRUZGMTA3OAotOjEwRjg4MDAwOUZBQzZCQzc5Nzk3RUJGQUM3Q0EzRTVEM0JDNjUzQTVDMwotOjEwRjg5MDAwRUJFRjQ4NTc3NENGNzcxNjE3MEMwRTBEQzBDNzBGMzUxNgotOjEwRjhBMDAwMDc4MjBDMkVDMTIwODNEMzZCNDEwNjlGMUVCQzlFMDI5MwotOjEwRjhCMDAwRjk0QkYxMTg2NzBFQTJCQzg4Q0I3NjUxRDJBMUY4QjJGMQotOjEwRjhDMDAwQjNGQzVBQkNEOTIzQzQ4NjhEMUY1RjRFQzc0QjBGOUYxNAotOjEwRjhEMDAwMkYxRDRGRTc5RkY5OTE1RTYyM0M0MUREN0Q0NzdBOEY5NgotOjEwRjhFMDAwRUVCREM5QTJCMzE0RjIxMTg3MEE0NThDN0IxRDJBOEM4OAotOjEwRjhGMDAwOEYwMUZCRTUzRThCNkI2QTM2QTVDNzgzNDc0NENGMDY3NQotOjEwRjkwMDAwNzgwRjVFODgyMDJGOEY3MUJERTgxODY3NDdCOTMwN0Q2QQotOjEwRjkxMDAwODVCMDQxNDRBMjY1RUZENzc1OEY4ODE4RjczQ0Y4N0QxNAotOjEwRjkyMDAwNTIwNUVCNzJFQzdDNDEwMkJBOTg1RTU4MUIxRjE1RTYzQgotOjEwRjkzMDAwQUY0RDBGRkNBOUNDMERGNzU3NjRFNDQ2RDFEMUE2Qjc2MwotOjEwRjk0MDAwQTc1QUVCQzdGNEFENEJFQjU3Qjc0MjZGNUZGNkQxQkQ4QgotOjEwRjk1MDAwREYwRUVCMThBRDdFREYwRUYyQUQyMzY5MDNCNjNCRDJBRQotOjEwRjk2MDAwMDdDRTkzRkM5NkRCNjE5RjcxM0JFQzI0OEZDMzlDRTAzOAotOjEwRjk3MDAwNzZEODcxRUVGNzg0QjgxREY2MjFCN0MzOEU3MkZCRjkwNQotOjEwRjk4MDAwM0Q2RTg3RjU3MEJGRTc2RDZFM0Y3NzczRkJGOTMwQjc1QgotOjEwRjk5MDAwQzMzQUQyOUY5QjgyRjJGMDk3MDIxMTIzRjhBOURBRjVCRAotOjEwRjlBMDAwREIzRkQzREI2MURGRjJFQkVEQjBBNUVCRjQ3NkQ4RTIyMQotOjEwRjlCMDAwNEVCRDFENTZERkFFQjdDMzZBNTVCRDFEQjZCMDQ5NkYwQgotOjEwRjlDMDAwODcyRDY4RDRDQkMzRjkwRDkzNzRFRDc5OEEzRUNFMzY3QQotOjEwRjlEMDAwQjc0QTZGM0Y2QkY4OTlFREQzQ0JDNUNBNzJCREZEREM1QQotOjEwRjlFMDAwREY3QTVGMEE1QzhGRjkxRjQwRTJDNzYxN0FBRjM3OUYwOQotOjEwRjlGMDAwMEI3QTg1RDI0NUY2NzlBQTU3MzAwRUVFNkI4NUZDQzk5NQotOjEwRkEwMDAwNTZFODQyRjU2RjkxMjlGODE2RTQ3REM4REIyMjgxQjhFQgotOjEwRkExMDAwRDNDRTczQjkxNUQzMjNEMDVGQUVBQUE3OUJFQUEzRkFCRQotOjEwRkEyMDAwRjhDNjRENzdFQUUxM0FFMzE2QkQ1RjYyMkREN0MzNTVCQwotOjEwRkEzMDAwNEVEMkZCMjU5NTQ2M0RFM0QzQzM1NTI1MEEwMUJBMzQ4MgotOjEwRkE0MDAwRUExQjkzRTMxNjA5RTRGN0U1RUExRDJCQTE3QTg1QjVENQotOjEwRkE1MDAwNzU3QUM3MEE3N0QyNzRDRjUxRUZCNDY3QjM3ODVEMkU0OQotOjEwRkE2MDAwOUQwNzE4MEIyRDUxNzlGQjNEMTQ2RTNCREYzNTYzOURDRgotOjEwRkE3MDAwMDg5REUwRTE5MTU0RkYxNEMzREYxNDdFMkY1QjE0QjVBMQotOjEwRkE4MDAwMTFGMjZDM0MyRjQyQzQ1M0JCQkU0M0ZCNUI4N0IxQkMzRAotOjEwRkE5MDAwMDhGOUNBN0MwMkM2NTdFODJGRTAyQjk3RDA3Njk4OUVDQgotOjEwRkFBMDAwQ0IwOUIyRTc2MUYzRDUzREZGMzFFMDZDQzBGOUM4ODdGRgotOjEwRkFCMDAwNDdFNkZFNEZDRTI3MjYwMUVDMjEzMjlFOENDNzdBODM4MwotOjEwRkFDMDAwNTBEQzI1QzU1NzhERjdCMzAzQ0MwRUNBNEU2Mjc2OTAzNQotOjEwRkFEMDAwMzc3OUE2QzhGMzRGMDQ0MjFFNUUxM0IxNjMzQzMzODVFOQotOjEwRkFFMDAwRjgzNzQyOUMzMzdBQkY2MzFBNkRCNkMyOTA4OUUwMjcxQgotOjEwRkFGMDAwRTlGOTdGNTZDNUMwRjk3OUEzMUY3NkJEMzRDMkUwQjdENgotOjEwRkIwMDAwNUQ2QkYwRUJGNEZDNkYyMzA2RkIyNTQ0MjRCMDI3MTE1QQotOjEwRkIxMDAwMDcyNkRENzM4NEQzNjE0RTQ3MkRDN0RBRTZDM0JBNUU4QwotOjEwRkIyMDAwNDhFNkY5MTU0RTNGMTMzOEJFMDhEOUI0QUI5NjNFRjdGOAotOjEwRkIzMDAwQkE0NTAyRkU4NjhEQThGMUUzQTFCRTI4RDgyODQzREU4RgotOjEwRkI0MDAwMjFDRjZCNzMyMURFQzQ2NTFFQjQ0QjRGMzFGQzc4RTlDNQotOjEwRkI1MDAwMkZFMENGNEJDMkYwMDVGODNCQUFDNzlGQ0RGMEZDMjRBNQotOjEwRkI2MDAwQTdBNzBCRTdDNUU4RTg5RjM3MkYwMzVEMzlFMzJFQTk2OAotOjEwRkI3MDAwOEVDNTc4QkYyNDI4OEIzMTc0N0U3QjVDMDJFNjUxRjdGQQotOjEwRkI4MDAwMDQxQjgzMjVCNDdEQzZDREVBODY1NjI1Q0QzNEUzN0M5RgotOjEwRkI5MDAwODkzQzY4MzJDNUMzMTRCRTVFMkZDRjZCNzUzNTEzQjQ3NAotOjEwRkJBMDAwM0I5RTZGQjZFMzk1OTA0NjExRTQ1MTlCRkJGNjc4RDBFRgotOjEwRkJCMDAwOEY1RDI5Q0EzMEE4NEZFQjFBMTJCQjAyRjJGMzlCMkRCRQotOjEwRkJDMDAwQjE0OTkxRUE1QTc2NThGMjUwOUY3NkVENDgzNDRCRjQ5OQotOjEwRkJEMDAwRkQxMkIzQ0IwQ0VGOTUyNEQ1ODlFMEVGNURENzQzRDA3MAotOjEwRkJFMDAwMkUyODQ5MjI5OENGN0FCRTM5NzA4ODdENEZDMTNBMUNBMQotOjEwRkJGMDAwQkE4RTQ5NjA5Rjk2Qjk2QTI3QzUyNDQwN0M5NkRBMzY0QQotOjEwRkMwMDAwMTJEOEI5QjFFOEJGRUUxRTYyNDNCQ0Q5NUM0QkNCQkU4MwotOjEwRkMxMDAwNEJENzc3MjA1MTI0ODI5N0UyQzc0MzNDMDFEMDAzNDk1OAotOjEwRkMyMDAwNEU4RjFGODY3MzVCOEUwMzlDMUJFOEVGRDc2OTdEN0EyRQotOjEwRkMzMDAwODFGMkY5RjE3MDdDRTQ5MUIwMzZFNjE1RjRFREExMzk2QQotOjEwRkM0MDAwQkMwRThBRTM0NzIyMEFENjU5QjRGNUIwRkEzMjEyOEFCQQotOjEwRkM1MDAwOUM2N0Y5ODhEQjBENUE3Q0ZGMjhCNzFCREVFMzcxQjc4MAotOjEwRkM2MDAwNDNEQzZFNjgzM0M0NkZERUUyNzZDMzZFNkUzN0VDRTU1QwotOjEwRkM3MDAwNzZDMzZCREM2RTc4ODNEQjBERkJCOURERDBFQjJGMTAyOAotOjEwRkM4MDAwQjUwNUYyOEFGMzg4M0QwNEZFQzI4MTVBMDY2N0Y3MEE3OQotOjEwRkM5MDAwQzE1RjBFRjk3MEE1RDM1NzRBRUZEQjU2NTg1MDdFMEU2MAotOjEwRkNBMDAwNEY1MjVCMjAzRTZFQUI1MjI3QzMzQURDRDU5RDJENzA4MAotOjEwRkNCMDAwNkQyOUVFNDg4NEZCRjM5NDkzNDdDMUNGMDY3QTk5OUE1NQotOjEwRkNDMDAwQ0JGOTlERTI2MUFEOTVDMTc5RERFMjE4Q0Y3MkEwNjdGNQotOjEwRkNEMDAwNjU0OTA1RjY0QjYyNzBCM0QzNUY4MDc3RTIyMjU1MDAyOQotOjEwRkNFMDAwM0E3MDJCMTYxREJDNkIwREYwOUQwN0VEMzBGOTExMEQxMAotOjEwRkNGMDAwRjQ0OEUxNzlCRDA2RjcyQzkyQzVFMEFFNDYwMURDQTNERAotOjEwRkQwMDAwNkEzOURDRDMxMzIyRjJDOTNBMEU3NzBEMkUzQjhBNkY4MwotOjEwRkQxMDAwMzZBOUI0RUI1QjQ5QUM2RUUyQURDMjlCNEQwN0U4RkM4MwotOjEwRkQyMDAwQkI2NTExRjNBRkRENDlCQzRFOTA3RkQ3MzhERTNCRENCRAotOjEwRkQzMDAwOUU1RDVCM0E3MEJDRUUyMEVGRDdEQjZFMjc5MjZENzA1NAotOjEwRkQ0MDAwRDgzOEE1Rjc1OTI0RkE3RTU1NjA3NTMyRjBDNURBNDFFNgotOjEwRkQ1MDAwNUE5RUQ4ODNGNkY1NjRCMUYwQ0Q1NDNBQ0YyMEFGODNFNAotOjEwRkQ2MDAwRDRFNEU1MUNDMjYxNjNGOERFNUI3QzlERkRDREU3QURBQwotOjEwRkQ3MDAwRDIxQjJEMTIxRDc3NTZFMDFFMDJERkIzOTkxQkRERTE2OQotOjEwRkQ4MDAwRjVBNUREN0M3RUFCNjZEQzQxODAyRjgzMjlBNzFCRDBFNwotOjEwRkQ5MDAwOEZGN0Q5MjRCMEJCODcyNzc5NTYwMjFEQjg5MzE0Q0JBRgotOjEwRkRBMDAwRjdFOEZENjk1NDFFNEEyRTk4NTZFNzhFMDRFODQ3REZBRgotOjEwRkRCMDAwNzk5NDAwQkQ1Q0IzMDlFOEUxQUQ2NDNCQ0E5REZFRTYwMQotOjEwRkRDMDAwNzM4MTFFRjExM0I0NDdGQUQzMjM1NEZFQTAzRDY0QUJGNAotOjEwRkREMDAwRjhGNDI4RjhCNTk1QTREMTEzQTBFRjA1QjMzRDQzODBGRQotOjEwRkRFMDAwOEY0OTk1MDVGNTczM0FGRDBEQ0ZBQjY5RDc0QTgzRkU3MAotOjEwRkRGMDAwNzY3ODJEMDNDQUUxRTFFNzlCREJDMUVGNzgwQkY4MDdDQQotOjEwRkUwMDAwRjNBMDI0MDZFQTczODIxNTc3RDgwMTNFRDM5M0QzNzYwNAotOjEwRkUxMDAwMDI3RTQ4ODkzRDM0OEFDMjYxNTVFMUNBMDUwMEFGNTU2QQotOjEwRkUyMDAwMTU0QjVEMDJEMDU1RDEwODdDMUUyQ0IxOUY4NDhBOUM1NQotOjEwRkUzMDAwOUU5MjU1Qzk1MjE4QkM1N0FEMjZDNTBBQzAzQkY5MkUzMwotOjEwRkU0MDAwRjcxMkJBQUVCNEE0M0YzNDJCOTQ2RjdBMkNDQ0VGNzk2RQotOjEwRkU1MDAwQTdGNDc3NDlBOTYxRkRDN0U2OTRGQzJDMDdGOERBQ0QzMQotOjEwRkU2MDAwRTg3Q0I0NTU0OThCNTQxRkFDRDE3OTRCNzEzNEM2NjVDRAotOjEwRkU3MDAwOEVEN0IyN0EwNTdBN0Y2NTEzN0Q1NUExRkFBQUMzRDNDRQotOjEwRkU4MDAwQzdDNzhCMzkzRDQ1OEQzQURCMDBGRDk1RDUzNjA5RkQ1OQotOjEwRkU5MDAwMzNCMUJBQUQ4OUI2QUJDMDVFMDJGQkU5NjEwQkYyQTUyNgotOjEwRkVBMDAwQzZDRkM5OEQ3QUI5QTkxOEY4QjZDQUMwRDcxQTNGRUQxRQotOjEwRkVCMDAwQkM5MDhGNjMwMEFGNTFCNThDOUZCNEY1MTlENzM1RUY2NwotOjEwRkVDMDAwMkI2QUU3QzQxMzYyRjRFRkRFNUQzNDIyOUFFOUIxMzBBNQotOjEwRkVEMDAwRkI3NjNDQ0EyNkM5NEFENzM3OEJEM0QzMkM0RTRGOTRENgotOjEwRkVFMDAwMjQ3N0MwN0MwRURFMzM2MjJBRTA0QjZEQTE3RTAwQ0MwRAotOjEwRkVGMDAwNkQ5OUE1Q0ZGRTREODM3NTkyNDE1RUJBRkU1OTRENjI1NAotOjEwRkYwMDAwMDZGOEE3RTQ0RTRCMUYzREE2RTlCRTg3RjUwMjczQzI3MwotOjEwRkYxMDAwREI0MEFGQUFGQzBFRDgxMTEwQ0U4NDhGRkVGMUQ4QTEyMQotOjEwRkYyMDAwM0RBREY0N0JERDQzRTM0OThCMDdDNzNCQzFFNEEzODRDQwotOjEwRkYzMDAwRTMxRDJDMTQwNzc5RTFGOUJEQTMzMjIwODU0RkMyRTlGNgotOjEwRkY0MDAwOTU4RTFGNTJEOUYzOUE3QjQ2NjRBMkI5QzlEQjFGMkQ0NwotOjEwRkY1MDAwMUIwMjE1NjRDNDU3NjFFOUVCMEZGRjJCMzMyM0ZFNjdDNwotOjEwRkY2MDAwMkYxMzM2NDBGQzZGQjRGOEM1RTk1REI0RkZBQzRBOUI3MwotOjEwRkY3MDAwQTc5NThFM0ZGQkMxM0EwQkQ4RkQ5NUFBQjJBNzlFRjY3NgotOjEwRkY4MDAwQUJBNDc0RTE3N0UxM0E3NDdDNzJEODRDMkMzMENFNjEyQQotOjEwRkY5MDAwNTkyMDlEQjQzRDZCOTY5RTZGNkE5NkU5REI0NjdCRTRFMwotOjEwRkZBMDAwNDg4QzkyNjJBMkVGN0YyQUQ4QzgwNjdBRERCMTdFRTkzQQotOjEwRkZCMDAwMTMzMERFMjcwRkRBQjBBRTkwQzBCNzcyNDEwRjEwMUVCQgotOjEwRkZDMDAwOUY5NDlGQjg4NzNFQUY1QjY3MjM5MDE3OTlDN0VERkQ1RAotOjEwRkZEMDAwNDFCOUE5MzhBRUM5NTE4REVGRDc3NkM0QTA1RjdDNzIwNAotOjEwRkZFMDAwRkQ5NUUzMDBGRkVENzE4REI3NDEzREY1MjdCMTRBMEQ1OQotOjEwRkZGMDAwRTBCNTZFRDVCNTI2ODg4RkI0NDc3NzRFODZGRTlGOUFCQQotOjAyMDAwMDAyMjAwMERDCi06MTAwMDAwMDA4ODZCNDMwNjZENEIwRjU5NjAzRTNERDQzRTgwNzhBQjA0Ci06MTAwMDEwMDAzNkNGREFGNjMwRkNDMzc3NzM1OTFDNzc5QTg5Mjg5QjYwCi06MTAwMDIwMDAyMkQ4MzUwRkU2RjZENjI3QThCNkIwRjkzRjlDMkJFMUNCCi06MTAwMDMwMDBGRDY5Njk3MTZEM0Y4MEVGNTBFQ0JCM0MxQzJFQjBFRTRBCi06MTAwMDQwMDBDOTJDMkVEQTlFRTRBOTE5NDJEQjI3MDRFMjVBOUUwMDRECi06MTAwMDUwMDA1N0Y5NDNFMDRGRjU3RTFCRDk4OEU4MjdEOERGM0E2QzgzCi06MTAwMDYwMDBFODUzMUQ2MUZFRkYzODNFQUY4RjYzRDlGM0UzRUU2OEJFCi06MTAwMDcwMDAzRkFDRjNCOEM0REFBQURCRTk0NzdBMzYyQkU5NzM2MkZFCi06MTAwMDgwMDBEODdBODQyQjYwMTcwNDlCREY5MTE4Qzk5QTg2RjgyMEQwCi06MTAwMDkwMDBEMjczNzQ1RTc1MEYzRjgyRjhERDRDRTEwM0ZDRDlFMzQ3Ci06MTAwMEEwMDA5MkRBNzZEMDc5OUNBNENBNUE4NUU3RUU0NzI3MDMzQ0JBCi06MTAwMEIwMDBFRkM4QTQ4NDlBNzgyMTlDRUVDRDhEQzNGOTlDNUNEN0JGCi06MTAwMEMwMDAxQTgzNzUyNjJFQTI1OEFGRTg4MzQ3NkRFNzk2QkI4NTQ1Ci06MTAwMEQwMDA3MUE4RTc1NTI2M0YxOEZGMDkyNDRDQkU1M0ZDNEVDQkIwCi06MTAwMEUwMDBGRkExQTUwRUQ2MUI0NTNBMDEyRkE2REQyQkVDMzBDRjg0Ci06MTAwMEYwMDA3OUI1MTZDQzhGMzk4OUFGMUNFNDY5RURDMzAyQjZFOTM2Ci06MTAwMTAwMDBDRjFBRDAxNzc1OUNCRkRBQTVCOEJENDBDN0M3QzExRUFFCi06MTAwMTEwMDA0NzdGRUZCMTNENTAxRjUwQ0JFNTU3RDUyMjNEOUQyRTc3Ci06MTAwMTIwMDA3NjlCNzVGQzMyQTM0OUNGM0Y3NDlEQkFGNkZBNUM1NkI0Ci06MTAwMTMwMDBEN0Q5RTNGRDI0MDFGNDczM0I1RDM2QzBFNUQzMzZDMTY2Ci06MTAwMTQwMDBCRjAxRTVBQjJGMjVCQ0JFMkUzNUQ3QTRDNUUxMjU0QjlECi06MTAwMTUwMDAxOEZDRUIyOEZERDU4MURFQjA5M0NFRDI0NDU4RjdBODI5Ci06MTAwMTYwMDAyOTQwRUZENjIzRDEzODRGMjM3Q0ZGRDVFMUYwNzFCMjdGCi06MTAwMTcwMDA1NDMzODRDRUU3NjM0QUM3NTBGRjczN0M3RDJCREEyRjVDCi06MTAwMTgwMDBGMDIzRUFGOERBRDUwNkY0QkQ4NENFRjI1MTE3RDJBN0VGCi06MTAwMTkwMDA3NUM2RDgzRTdBRDFFMDUzQkIyRTc1MkZGNDczN0YxRUZGCi06MTAwMUEwMDAyMzUxRTc4OUQ0QkEwQjk2ODIzREQ5NEI0NzA2RjhDMDU0Ci06MTAwMUIwMDA5QUNEREE3NzQ2RjREMTE5M0U4RjQwNjc5MzY4NUY2RTI3Ci06MTAwMUMwMDAxRjIzQkZENDk2RjVFNkY1NTIwNkFBNUY0NjdDMTcwMEJBCi06MTAwMUQwMDA1RUM3Q0Y4NzNDOTQyNkU3RDYxNkJGODE3NDcwQzY0NUFDCi06MTAwMUUwMDBGQzIyRjM2QkRGMDZCOTFGQzNFN0E2MTIzOTUwOUYwMDRDCi06MTAwMUYwMDBDQTg0RUE1RDE3REU0MzdGMzk5RUFGMzdCNjQ5NzhBRkQwCi06MTAwMjAwMDAyQzhCOTBCODI2RjFCRDMyN0EzM0I2MkMxODAwM0Q2MUE0Ci06MTAwMjEwMDA3MzczQkRCQjJERUZEN0EzQUY4MEREMEQwNEUzMzQ4MzMzCi06MTAwMjIwMDBBMjJCM0MwMTVDOEQyQjExRjcyOTU4NUM4OTYwRkYzQ0E3Ci06MTAwMjMwMDAyODA4NTUxMEI3MUY0NEY0NzY1NUJDMDExRTI0REI3Q0ZBCi06MTAwMjQwMDAyMkRDMkU4RkU2RjI3RUU5RTQxMTAyRkEzQkU1N0FGRjJBCi06MTAwMjUwMDBENDZDQjA4QjdFREU0QkQ3NkNGRDEyRkM0OUUxRDg0NkU2Ci06MTAwMjYwMDBGRDM3OTA1MzcxODFDRTRFQTBDRjFBNkFCN0ZBNzFGRDU3Ci06MTAwMjcwMDAxRUNDRUI1OENCMDRGMkE4RDAxN0JGRkE2N0M1MkYyRUJGCi06MTAwMjgwMDA4ODgzRjFGODQ1N0Y3MTMwMkQxRTUwQzk2RTUxN0Y0NzJDCi06MTAwMjkwMDA3MTQzREVBRkQyNERGRDlDNDE2MDY3RERFQzQ2QkZDOUM2Ci06MTAwMkEwMDA3RDEyRUQ1MjJCQjc0QkEzNDYyRDcyQjFGQzE5RTMxRjAzCi06MTAwMkIwMDAyRDFFNjBBNDJCNjM1Q0M5Qzg3RjQ2QkJGNEI3QjlEQ0I0Ci06MTAwMkMwMDA3RUJBODY1QzczMzlGMTAxMkQ4RUJGMkE5REY5M0RBQjU0Ci06MTAwMkQwMDBEMkVCOTY0M0ZEREEzOUVFRjdCODU0MTNFMjcxQ0UyQzI3Ci06MTAwMkUwMDAwMUYxQThEOTZCNzNCQ0E3NjcwMUZGNjlGNTA3MTdGMzg0Ci06MTAwMkYwMDA3QjNBMEM3RTQ4QjRGNzI5NTk4RUEwM0ZBRDc5MkMyRTVECi06MTAwMzAwMDBFNDI4NjRDRkU3RDg4OUQ5MUU5NjNGQjBFNTMxM0QzNzYwCi06MTAwMzEwMDA4N0VBNDEzQjVERTIzNEJFOEY2ODNBRDFFN0E3RTJGODU1Ci06MTAwMzIwMDAzOERBOTVGRTA0MzM3Mzc1RjU4MjcxNzlFQzNFRTY0MzU1Ci06MTAwMzMwMDA2RDNDMUY2QUU3RjU4MjI1MTk2Nzc3N0QwREY3NjU1NkQ1Ci06MTAwMzQwMDAwNzZDOTM2QjFGRkYxRTg1NDNGNEFDMTg4RjA5RTk1N0E4Ci06MTAwMzUwMDBEOUY4NDNGMDkzNjczOTUwREUyNkE0NEI1OEY3NUE5NUU1Ci06MTAwMzYwMDA2NEY3MjBFREFCRjJEQkUwOTdBMTlEMjlDMTk0NjU5NDgxCi06MTAwMzcwMDBCNzczMjlGRjA2NUMwM0Y4M0JGNjgxRTM2NjRFQ0RERkQ5Ci06MTAwMzgwMDAyOTY0NzRENTFCNUZGMjMxRjk2REEyQkY0MDRGQjNBQjQ2Ci06MTAwMzkwMDBGNEY0MzI1NzE5OTg3RTMyRjM3ODdDODlFRkUzMUExRDEyCi06MTAwM0EwMDAzQUJGRTM2QkE0MEJDNkJGNkI1MzU4M0VGQTVDMDVFRDM2Ci06MTAwM0IwMDAwM0Y5REI3RUVDNzFDREJGNzU1QUE4NUY0NEYxMTI5NDRFCi06MTAwM0MwMDA3NzIxQkQwN0QzODkyNTFDREZCRTQyNTE1N0RGMTBDQ0YyCi06MTAwM0QwMDAyN0QxMkVFQUY3MDQyRDI0Rjk0MURBNkY5MDNDRjcwNjc1Ci06MTAwM0UwMDAxN0Y4QkUyNUI2OTg1QUQ0MUI3RTlEN0Q3RjkwOEU3QkQ0Ci06MTAwM0YwMDBDQ0Q5RkYzQzhDNzRCRTdBRDQxMjhDRkYzRjcwM0QwNTgzCi06MTAwNDAwMDAxOTlERkY2QTQ4Mzg2M0ZEREU3M0YzQzE2RjdCMDBEQTI0Ci06MTAwNDEwMDA1ODVGRjA4QkY5NTA2RkY3NDA5NEQ2RUVGQUIxMUM1NjQ2Ci06MTAwNDIwMDA2RjcwRTc5Njk3N0ZBQzE2NTJCRkM2NEVGNTJEMURDRjY1Ci06MTAwNDMwMDAyMTExQ0M1MzExQjIwOUU1QjMwOEYxNDA5MENGNjNDMjRBCi06MTAwNDQwMDBFMDhCN0U4MzFFREU0NjNCNUUyQzY0NzExNEQxQzBGN0M4Ci06MTAwNDUwMDBDNkVGREU5Q0E3REY2RkQ3REZCQThERUZEMTlGQUE2QjA3Ci06MTAwNDYwMDBGNEY0N0Y3QkRFMDBGNUIyQzZGNzlENTAzRjExNzNGOUJGCi06MTAwNDcwMDA3NTA3NTQ5MDYyN0U1QTI0MjYwRkY4Q0JBNDk0RTBGN0I3Ci06MTAwNDgwMDAwNDE3QTMyQjkwMzBBMDA3MkQ4RDgzM0MwODM3REE4RUZDCi06MTAwNDkwMDAwMkJERTA3NzY4NzE1NTlDNzQxNEUwNUY4NDdDNjIwMDUzCi06MTAwNEEwMDBGNTM5OUQ0QTQ4MTgwMUZEQjVGQTAzODU3Q0VEQjg3NDBECi06MTAwNEIwMDBCOTQ3RTUzMThFMjM5NUIzRkNGMkJCMzIwOUMxRjc0NjRCCi06MTAwNEMwMDAzRkJBQ0U5NzBCRkVGQTExQUE2NzI1RDBFMzM3QUIxMERGCi06MTAwNEQwMDAyRjNCQkI4QzYwN0VDMEUxNTJCMDREM0YxNTZBNzU0MTI5Ci06MTAwNEUwMDBEQzhBQjU2QjI4OEM0MDJGREJEQ0ZBRkFENzFEQzU4RjcwCi06MTAwNEYwMDA5NjU4RTlGM0I2MzIxNjZGM0REODFDNzg3NzA1QTVCNTQ2Ci06MTAwNTAwMDBCNkMyMDI5NDk3MkJBMDYzRDg3QzgzM0JBM0FDMTA4NzIwCi06MTAwNTEwMDA1MUQ0RUZEQUMxNkVGRTY4OTk2ODg1NkI3MDc5QUQwQUM3Ci06MTAwNTIwMDA4QjdFMzc1MUREMjQ0ODEwNzc1MDA4RjhGOUQ2NjVBRDM5Ci06MTAwNTMwMDA5MzgxQUZERUI1QTg5RTM4MjdFNjU1MzE0RkRDQkU1QzBGCi06MTAwNTQwMDBCRDE1RkMxRTU5QUEyODRGQTU3Q0I0QTFERDhDRkI4Q0RGCi06MTAwNTUwMDA4RTk1RkUyRTQ5MEFFM0MzNTM1QzlFMUVEODExRjUwMDBBCi06MTAwNTYwMDBDMDYxOTU2MDBGNDVDMUQ1QTI2QzU4OUQwMERGQjM3QTdDCi06MTAwNTcwMDA1QUU4MTRERjZERjk0MTMyN0M2N0Q1RTI1NTlFOURGMDUzCi06MTAwNTgwMDBCQ0M1MDYzQjUwQzlBQUY1RjYyQTE4Nzc1NUYyMTJGN0YyCi06MTAwNTkwMDA5MkIwNzFFREMzQUM4RDcwM0YzOEI0MERFQjVBOTQ3MkNDCi06MTAwNUEwMDA4RjM1MkExNkQ2RjU0NTBDRTQ2N0RCOTc2NUM1MDMyRDE0Ci06MTAwNUIwMDBCNjI1NUE1M0VBQTFERjkyM0ZCRTk5MDc3ODk3NEM5ODI3Ci06MTAwNUMwMDBCN0I1QkEzQjJEQjBFRUUxNkU0NTg1RkNGODVGNzI5NDhECi06MTAwNUQwMDA1N0YzRTgzQ0U3MzUxRDlCOEM3NTczNjVCMTJCRTEzQTA5Ci06MTAwNUUwMDBGQ0ZDNzdEQTAxRkVFRkYyNzg0QzI4QjEwRUYzQjU2RDIyCi06MTAwNUYwMDA4QkVBRUQzMERGRTk4OTY5Q0JDM0UzMzE2RDg1OEJFREEzCi06MTAwNjAwMDBBM0U5N0I2OTZFNTNFREQyNDExN0QyNDcxQkM0NUZDNjg1Ci06MTAwNjEwMDBDM0JDRTg3QUM2NDJCRjNGMzQyQkI0NUYyOEQ5NUExNTExCi06MTAwNjIwMDA2OTlGRDZGMTNDRTZFRkQ5NUI5N0E2NDE1Q0E0NkRCRDBFCi06MTAwNjMwMDAxREQyMzNBNDRENTBENjQxN0U0MDRENzU0NkFDNjMxRjRDCi06MTAwNjQwMDBFQjY1RUZENTI4QUVDOTU2MDlGMTgzRkM3NjJBQUZFN0YyCi06MTAwNjUwMDBDN0VBNDhCMDJCMTlGRUVDNjY2MkI3ODRFOUJGQjEzOTJFCi06MTAwNjYwMDAyNTlGRTY4NUY5RDExNzdDMzdCMTBERjU0MTlCQzBGODgwCi06MTAwNjcwMDA3N0VDRDZDRjdGMENGNUMyQkZDQUYxN0QwRUVGQUQ2QTI1Ci06MTAwNjgwMDA1N0Q2MDFCQzg4NkEyNzgzOEFGQkU3OTNEMDZBOTI0MkQ3Ci06MTAwNjkwMDBBODNDNkU2QkIxNTU0NUFBNDMwQjJEMTJBNzAxOUY1MDg0Ci06MTAwNkEwMDAwRTNBMzYyODI1NEMyRTJGQUY0RjgzRjg0OEE4RTUyQTVFCi06MTAwNkIwMDBFNEVFREVGRUVCRUQxRjAyMUU0MkVCRDM2MzQxMUY4NjJDCi06MTAwNkMwMDA5MkVCRDJEMjgwNkUzOTVEMUFDN0RGOTRDN0VDQzk1RjU2Ci06MTAwNkQwMDA2N0Y5MkM1RUIwMkJDN0IwQkM2NzQ1OUVDRkU2NDVCRDIxCi06MTAwNkUwMDBEREU5MDYzQkY3MUI0MEI3MjkzMERGN0YyMkREQTI5RTA0Ci06MTAwNkYwMDAzQjlFNzcwQUU5OEFCODJFMkQxRkU5MjMyMTMzRTY1MzYyCi06MTAwNzAwMDA4QkZGOENGMURFOEVCMURBRkUyNzE2MUZENEVDREVBODRCCi06MTAwNzEwMDA1MTI3NTY4MERGRUFDQkQ3RjI1RDg1N0JDMDVGOUZBNjZECi06MTAwNzIwMDBFNTUzMkI1ODdDRDA0NTdGMjNDNTA3N0Q4NkY4RTAzNDAwCi06MTAwNzMwMDA0MzVCQjMzN0E3NzhCOTdEQzJFRERCMjRBOUQzNTcwQTUxCi06MTAwNzQwMDA3Mjc3QkZFODAxN0YyMjk5MzBCRDMyQTM0MkYwODM5RENBCi06MTAwNzUwMDBERDUyMUM2REM3NzlFN0YzMzgyN0Y3QkZFNkYxNzlCRkEzCi06MTAwNzYwMDBENzZDMjc5MDRGMzIzOTBBNTdDMkZDQTcxNUIwRjkzQjE2Ci06MTAwNzcwMDAxQTMyNzIwMjEyQzg3NzE2RTcyNjBEMzYwOUUzMjY4MDcwCi06MTAwNzgwMDBGQzQ0RDJFQkE3Rjk2MDEwQkE5RTc5MEQ0QkQxREVFRjk1Ci06MTAwNzkwMDA4MzVGMEI4QkYzMTBCRDNGRTEyMzA2RkY2MTExQjNDN0VECi06MTAwN0EwMDAzNDdGNkJCRUMxM0UzMERBRkJDNjM4NzU1RjVFNjA5MzQ2Ci06MTAwN0IwMDAxREU4RTlFQzk4Q0M4MzY5MTIzRTU2MDM1QTNFODBGNjU4Ci06MTAwN0MwMDA1QkU4RUQ1RTE5MEE5MzNGREQ1QzNGMUM2RTk2REY1QkQ0Ci06MTAwN0QwMDA0MUQ3QkZEMkY3MTMzQkQwNjk4N0Q5NkYwNzdERDI1MTdDCi06MTAwN0UwMDA3RTQ3MENEMDVGNDdCNTU4MEU3QzFGNkMyRUM3N0UwNzI2Ci06MTAwN0YwMDA5QTdENzg2REY2MzI3REIxMkY0N0JFREIxQjE2NzdBRTQyCi06MTAwODAwMDAyQzJGNzk2RjQ1NzhERDgzN0NGRDdCMkJDMkU2M0ZEREE1Ci06MTAwODEwMDAzQjQzRDdENkU4NkNCQTQ4MUEzNzQ1OTAyRkJGRjIzMjFGCi06MTAwODIwMDBGRTM3NTNCRDhGNzU4NkUyMkYzRDAzRDVERjUwN0ZGNTMwCi06MTAwODMwMDA2QzM4RkNENjc4RjVGNkVDN0Q2MzRBMDcwRjY0Qjc2ODMwCi06MTAwODQwMDBFQkQzRTBBMkFENUI3QkRFREYzQ0VGRkExQkU3RjlENDM0Ci06MTAwODUwMDA2NUNFRDMzODNGNkRERUZERjU5RjBFQzI4QUYyRkY1RDk3Ci06MTAwODYwMDA1QjRCQUFBMTJFNzY1RjhFRjIyQ0M4QTNDQTMyNjEyNUZCCi06MTAwODcwMDBFNDRCMEZGMzc4RTJFMUMyMThEQ0U3QkUyNzlERjk3Qjc5Ci06MTAwODgwMDBEMTBEOEM2RkEyQ0I2NjYwREVFRjcyRjE3QjkzOTdEOUFFCi06MTAwODkwMDA5NUIzMEEwNUJGNENGRjlDQzJGN0RCQkY5N0NFRjJCOUY4Ci06MTAwOEEwMDAyREM1M0Y3RjEzRjJEMEVGMTQ1OTU4QkM5N0M4RDNBNjdCCi06MTAwOEIwMDA4NkU1QjFENjVBRkQwMUM4MjdCREQ3NUJBNzcxQ0JDQTYzCi06MTAwOEMwMDBCQjY4M0I1QTkzMkI1NUZBQkNDM0FDNTlGQUZDRTE3NDk0Ci06MTAwOEQwMDA0MzlFMjFEQTIwNTc4MjFBREM3MzI5REM0N0Y0QzFCRDFDCi06MTAwOEUwMDAzRjdGQTIzRkZBMjBFNkQzRDlBMDg3OENGMEI5Q0QwMDk0Ci06MTAwOEYwMDAxRkEzRkYzMjdEOUI4MTFGMkVEMThGRDlEMDlFQkQwN0I0Ci06MTAwOTAwMDBGMjZBMkFCNTI3NDcwMUZFRTAxMTdEMkY1QTdFMTZEM0UxCi06MTAwOTEwMDAyMDUxRjk4QzFFNDc4NzRFQUQwMUJERDg0RDU1MDBFOERBCi06MTAwOTIwMDA5N0I1MzNFRjU4MDdFRDczNTRFRjAzNUVGQUZCOEVFNjhECi06MTAwOTMwMDBCRkZEMkE0NzNFRTM4RDUwM0ZEMDJCNDdDMDNFMTgwRkU2Ci06MTAwOTQwMDA3OUMxQzhGNjQxRjdBMjQ5NTMyM0RBMDczM0VCRDM3MkQyCi06MTAwOTUwMDA2MDVFMzNGNEY2NDFGN0ZBRjJDN0IzRTAzRUQ4MDdGNDJECi06MTAwOTYwMDBBNzNCQkY1RTY3MUY5MEYyQUM4QkMwODdDOUREQTg1MTYzCi06MTAwOTcwMDBEOTExRUJGNDdDMzk4QTJCM0Y2QzNEOEVGNDQ2MTI1RTI0Ci06MTAwOTgwMDBDRkY4NzlBRTFDOUI0RkRGOUZDMUUzMDhEQUY3QThGREQzCi06MTAwOTkwMDBCNURCMTJBMTdFNTFGQjVFQTY5N0M1M0Q0OTc5M0NEM0RDCi06MTAwOUEwMDAwRkZDN0EzMTNDNkE3NUQ0Rjc1OTY0M0NFRjQ1OEI3Qjc4Ci06MTAwOUIwMDA2OUZEM0NGOTRDQ0VCNkE3QzkwREYwOUMzODMzMkYzMkY3Ci06MTAwOUMwMDA2RThCMTZFNzQ4Q0ZCODgyRDcwRDRCQTRENzFGRkFCMzZBCi06MTAwOUQwMDAyMEUxRjMwOEZFMUU4MUJDNjQ3NEQyRTlERDJFREFFNTY1Ci06MTAwOUUwMDAxM0FGOTIwMzcwMjgzQUVENTcyMTFGNjJBQjEwRDA1RTBGCi06MTAwOUYwMDBCMjI1MTFCNDZCMkVENUJGQkFENDdFRUQ1MDFDMDBGRUNCCi06MTAwQTAwMDA1NjFEOEI5Nzk3NjQ5OEIxMURBRDg4MUI0MDJFNEMzQ0FBCi06MTAwQTEwMDAzRjU4MDBCOUUxNTNDNEE3NjBCRUQxRjIxNzlGRkQwNDRGCi06MTAwQTIwMDBGNDM1RDVGQjEwODdGMTkxNDZEQzY3RURCNEY4MzAzRTI0Ci06MTAwQTMwMDBEMTUxNDE0N0NFODAzOENDNzI0QjFBQzZEMzUzOUY4RENCCi06MTAwQTQwMDA3MUMzRDdGQ0VEMTAyRkI3NzlEODdFQTgyQUFGQkExMkEwCi06MTAwQTUwMDBDRUNEOTg1RTM0NEEyMEY0RjkzNDFGOEJERkNDODFGODc4Ci06MTAwQTYwMDAwRDhDM0JFQkY0MEU4OEZGQ0NGNjMyRjkwNTdFMUJFOENCCi06MTAwQTcwMDBDREI5RjU3NzhGRkQ5MUY0RDdDNDZERkNFREYxRDkxOEEwCi06MTAwQTgwMDA0RjkyMzA1RTYwODgwRkQ5MEFBNzYwN0M0OEFCNTNGMTYzCi06MTAwQTkwMDAxNThBQjhCRjlCMjQzOUYxMUMwQTYzN0NDNzE4Q0YzMTczCi06MTAwQUEwMDBDNjdCOENGMTlERUZFNkIzN0QxQTlBM0RENTk4QUY4RjRBCi06MTAwQUIwMDAxN0RFMEQ3QjEwNzJDMDVFQTJBMjkyRjI3NTg3ODUyNEFDCi06MTAwQUMwMDA3NzUyRkEzQzU4RjIyOUI5OTNDRUMzRjk0MzEzRDQ4MDM0Ci06MTAwQUQwMDBEMzdFN0EzQkVDNTJFNTU2OTBDQTk1OEY2MTIxQkI1RTdFCi06MTAwQUUwMDBCNzgwN0Y1QjJERDc2MjdDQ0Y0OEY3MEZFNUIzNzhERDA5Ci06MTAwQUYwMDA4QTdDQTcyRTFGMUM2QzZFRTJFRjQ3QTk4MEU3RUE5MTYzCi06MTAwQjAwMDA1NjdGNTQ2QURGMzg5N0NBMUY4RkU2Q0EwRkU0MzNCRjk3Ci06MTAwQjEwMDBBMjEzRTg5Qzc4MTREQzRGNTA5MUU3RDJEMTJENjkxQ0M4Ci06MTAwQjIwMDA0MjNFMEU4QkRGMThCRkFCQ0Q0NzFCRkY3MkU3NzEzRjE0Ci06MTAwQjMwMDA4N0Y3QTVGMkM5REFFMjAyQkI5NTdFRkYwQ0M1QjE4ODQyCi06MTAwQjQwMDBGQTkyMUFENDYxRjE2OTJEN0VBRUJENTcwMzc5ODMyQ0Q4Ci06MTAwQjUwMDBCMDIzMDVDQzFGNjhGN0MzRTJEODY2QTBEQkU4MjQ0NUM0Ci06MTAwQjYwMDA4RTc0REVENEExRkNERTNDMTVFNjMxQjVFRjEwNDE0MUI4Ci06MTAwQjcwMDBCOTUwQ0ZGMzM1REE3ODY2RTI2RTQxM0UwMERBRDZFNjU4Ci06MTAwQjgwMDAyNTQ2ODg5QjEzOEZERDQ2NDlBNjZFOEQ0ODIwRkVFM0RGCi06MTAwQjkwMDAyNDcyMjdDNDlGQURFRDE2NkMxM0I1NkEyRkQ4RTk4QjZDCi06MTAwQkEwMDAzODVGNTgwQkE3RUM4NUI4OUFDNjE3QzZCQzhENTU0QzU0Ci06MTAwQkIwMDA5QTAyQzNENjc3RUFGMzU3QzZGQzk0RDE5RUQ2RTJFQkVECi06MTAwQkMwMDA2NkZBMTE5OEQ3RkZEM0YwNDExNUI1Nzg2OUVCN0QwQTI1Ci06MTAwQkQwMDBEN0YzMEQ1REFGNDY1NzE1NTlERjc2NDNGRDQ5NUI5NDVBCi06MTAwQkUwMDBCMkFFOTZDRTRCN0REQzhFRjEwQTA3Q0MwRDYwMTJBMDIyCi06MTAwQkYwMDBCRjIwMjcxRkY3RkUwNEU0RUY1RkYyRDlGOTM3NkQwMjNCCi06MTAwQzAwMDBBQjQ3RDk5REY4ODc4NEYwRkQwQjdGRTFGQ0ZCNzRCRUY4Ci06MTAwQzEwMDBDNEUyMjI2NjEyODBGRDUyNjQ0QzAyRjI4NTU2N0Y3MjU1Ci06MTAwQzIwMDAzMDkxRDk4MUQzOEIxNjA3RUVBMEVENUZGMDdBQzk2QkI2Ci06MTAwQzMwMDA4QjM2NkFGOUZFNDEyNUI5MDQ0QjNGMDAyRTZCQURBQ0YzCi06MTAwQzQwMDAyRUVERTBENTY2QUMyNzIzRTJGRTlENzcyNEY0RDVFREFBCi06MTAwQzUwMDA1RUJCNDlFRjU3REU5OEFFQjcwNzhERjY5RkQ1RDA4RUI1Ci06MTAwQzYwMDAyQkUwNzJBREI3RkU0NEIxNjMxRDU5MjJBRjIzRTNGMzBECi06MTAwQzcwMDAzN0YyQzlDRjlBNTk1RUUzRTdCQ0VFRkY5NzdDRkZFNUY4Ci06MTAwQzgwMDA3RkYxRkFCRDREN0NGRkU1NzM3Q0RGQUMwNkY3RkIyQ0YyCi06MTAwQzkwMDAwQUM2QTM4RjVENEY2REJBRDhCRTM4RTBEQUUyN0JEREJECi06MTAwQ0EwMDBDMEM3RTMwQjU4N0M2OEIyRThEQzA5N0FBQTZGOUZDNTFECi06MTAwQ0IwMDBDMEU3ODQ1NTk2RUJGMzY2QjM3REZBQkNEOURDMkE3RDk4Ci06MTAwQ0MwMDBERUVDMEY1OUIyQTc2MDA4RUNDMzY4NTgwRUU3MTRDQ0VECi06MTAwQ0QwMDA1ODIxNjJCRTcyNkREQjE5RDRCM0U3MEFEMURBQkU1MDc3Ci06MTAwQ0UwMDAzRUYwN0QxOERBM0UwRUVEN0U2OTAxM0JCN0M4QjEzM0E4Ci06MTAwQ0YwMDBEMTAyRjVGODMzNTZDNDRFODFGODM5NzE2NTVFOTJGRDI0Ci06MTAwRDAwMDA3NjAzQzREQzYxM0VDQjVEMTYzODBGNjI0NjIwMTFFM0VBCi06MTAwRDEwMDBBMUI1RUQ5NzM3Q0VFQTUxNTc2MDlDQkEzN0NFNEZBRUFBCi06MTAwRDIwMDA1OTAwRUYxRkQyRTJGQzZBRkEwMjg4RjMxRkUyNzFGRTVCCi06MTAwRDMwMDBFQTgyNkIxRjA3RkZFOEU5N0M3OTI2QzA2MzU5QkU1QzM1Ci06MTAwRDQwMDA1OTkwMDNGNzk5NUNBMEVERDlFMTZERkFGMzVBQUNGRTI2Ci06MTAwRDUwMDBGQzg5NkE3OEFGQkY3OEJBMzg0OTY4OEM1NDJGQjJCODJBCi06MTAwRDYwMDBBMDM3Q0U1NTA3RUYxMzdCNkY5QzZCMTE2Qjc3RTIzRTdDCi06MTAwRDcwMDBCQjI2RkVEREQ2Rjc0ODAzOENEM0ZBMjI2OTc4MkU4MjkzCi06MTAwRDgwMDBEREZEOUQwMjQxMUJFRjE2OTgyRjcxNkJGQUNENzc1QjRECi06MTAwRDkwMDBBNEYxNDQ1QjZDMEFGOEZEQzc3ODdEOTk3MUJDQTYwMjhBCi06MTAwREEwMDBCNjFGOTM4RTc3MTdCRTlGRDQzQkJGMjYxQzlGOEZENzRECi06MTAwREIwMDBCNzdGQzYxNTAzNENFQkE4NTE0QzNEOTQ5RTQ4OUI4OEM5Ci06MTAwREMwMDA3NTI3OEUyRUQ3NTRBODRCMjI1MzQ2NjAxRENCQTFCMjU3Ci06MTAwREQwMDBDQTdGODlGRDM0ODdDQTdFRjM2RkI5OUZFNjM3MDVBOUJDCi06MTAwREUwMDA0ODA3MTdEQjRGRTM5ODQ5OTQ0ODcxOEQ5NzM4NURFRUJCCi06MTAwREYwMDAyQ0NDMUExQzFBMDA0RkQ2QTY3RDQxQjAzMzdBREI2Njg0Ci06MTAwRTAwMDA4NTQwREVDRkRBNzQwMEVGREYxN0U1QUE4OTY4NUY3MEVFCi06MTAwRTEwMDAzQTZEMkI1QkU0ODM5NEQwQUFFNDI5NjJCOEZERjJCQjVGCi06MTAwRTIwMDA2QzY1NEY0MTg0RkQ4OTY3NDY5RUREMDVBQTY5NjY5OTE4Ci06MTAwRTMwMDA2MDE2MTJEMERFRjYwODU0N0U2NjJGOUIyMUJBMjU0MjNBCi06MTAwRTQwMDBCQzhEMEY0RUJBOTIzRTlGOTU0NEZEQkJCMDc1MTczNEQyCi06MTAwRTUwMDAzQ0JCOEJCMjJCMjkyQzNCRDQ5QTQwRkJCRDk4QUIxQ0RFCi06MTAwRTYwMDA4MkYxOEJEREQyNkU2OENGRjI2NTYwRERGQjdEQjEwNDZGCi06MTAwRTcwMDBFREJDNjNBM0FDRkUwREE5MTdDRUZCMDQ5RjM3OTVDQjQ5Ci06MTAwRTgwMDBDQkNEOTcyMTk3REI5QUY1RjlFRjU1QzlBMzk3QzNGQzEyCi06MTAwRTkwMDA0Nzk3OTIxMDQ4RDgzNEY3RTkxMkM4RkY4RENENTE0RUNDCi06MTAwRUEwMDAwMDVGQTVCOTg5NkMxQjg3Rjc2NTEyOTZCRjMxOEUxQjUxCi06MTAwRUIwMDAzNTgxRTlEQkQxQTFBNEZCMjE5RTdDNTBGM0Y3OEIyRjc4Ci06MTAwRUMwMDBEQkRGRkYyMjFDREVDNkVCMzFDRERGNUYxOUQ5REYzRjUwCi06MTAwRUQwMDBCNjI4M0U3MjNFQTBBREJFMEVGMjAxQzc1NkVBRkRGRDM5Ci06MTAwRUUwMDA2M0VCREQzNUIwQ0ZFRjE4RjdGNzhGNERBNkZFRkU5ODE4Ci06MTAwRUYwMDBGRUYzMDFEQTNBQTkxQ0IyNEQwMEI5RDM5QjBGRTA3NjlDCi06MTAwRjAwMDAzQjhGNkJGQjcyRTQ2ODc4NEVGRDc5MDc1Q0VGQ0Q5MjA2Ci06MTAwRjEwMDA5RDEzRTBCOUVBNUE4MEZCOTE0OUU0N0RCMkU0MzE5NzMwCi06MTAwRjIwMDAwQzdFOEVCNkFGM0REM0FCMEM4MUY3QjVGREIyQTM0MUJECi06MTAwRjMwMDBCNEM1NDE1RUQ0NzU1QjI0N0E5NjI2MzA3RUY5RUJGMzE2Ci06MTAwRjQwMDBBNEJENzk0QzEzRUVBM0JFQzQzOEZEQTVGNjkzQkM5QjlCCi06MTAwRjUwMDA1ODNEOEU5OUQ1MTk0NjI1OTZCQTIxM0Y3NTZFOEMxRDQwCi06MTAwRjYwMDBGNTdCM0JGQzJGNENBRkE2MTQyOEI5MTM4Njg0OEY2MzA2Ci06MTAwRjcwMDAzODVGNTVCQUI0RUY2QTc1RkFBMEFGNDBCRjc0MTM1MjI4Ci06MTAwRjgwMDAwRUYyRTY4MUQ4NDY4QzdCOTQ3MUJDMUFBRkQ3NEQ3MEI3Ci06MTAwRjkwMDA3MTNERUI0QTAwNzhBNjE0RjhBNjIwREU5RkRGMjRFMTFECi06MTAwRkEwMDAzOUIwRkM3RTdGRjVGREM2NzkzQzYzRjU3RDgwRkJFQkI3Ci06MTAwRkIwMDA0QjQ1ODlENUU1MTFFNDhCQUJEMjVEQThBNzM1RkJBQkRBCi06MTAwRkMwMDA2RTQyMkEzQjU3ODE4NDQ2NUFFOTNBNUJFNTVEQ0UyQzU2Ci06MTAwRkQwMDBEQUVGQTNDN0NDMTlGMERBNEY2Mzg4MDVFNkVENEJBNzJCCi06MTAwRkUwMDA3MjhFQUVBM0Q0QUQwQzFGNDgzRUMyODk0NDI2MkY1QzNFCi06MTAwRkYwMDAwMzgyQzk4REQ3Nzg3NjU1MDVCODdGMDEzRjNFNzY3NjU2Ci06MTAxMDAwMDAwOEQ4RTMzRjdEOUNFNUE3QUU3QTdDOTFCRDJFNkNGQ0IxCi06MTAxMDEwMDA0NzI2NzBCOTk5QzRFNjVGMjMwQjdFMjkxNUU2NzMxQTNCCi06MTAxMDIwMDBGMzUwMzMyNDkzNDcyNjkwMzczRTc3NjQyRUM0MDlBOUEyCi06MTAxMDMwMDBGRDM2MEFEQjY3QjAxRDk0NEM1OTkwRDdGRUM4RkRFNTFDCi06MTAxMDQwMDAxMUU4N0ZENUY3MTc1RjgxRjRDRkUxQjE3MDU5RDYzMzNFCi06MTAxMDUwMDA2OEU3RTcyOERGMDNGQzA3MEJDRkM0OEMxODgzNzZGQzE2Ci06MTAxMDYwMDAzQUEwRkY4NTAyRjE0NUIyMTNFRUU3NzhCQjQxNkVCQ0IyCi06MTAxMDcwMDAwOUU4RUMwNkQ5NDY2MERGNUFCMEM0ODY3MEZGNjk5MTcyCi06MTAxMDgwMDAyMDgxREYzQTFENjgxRUUyMzk4Rjk5MzFERTRDRTE3MTEzCi06MTAxMDkwMDAwQjNDREZFRjcxRTBCOUQxQTVGMkIzNjY2OEZGNjFBQzNDCi06MTAxMEEwMDA0MEFFMUM0MDFGNUYzNjVDMEJDRjBDMDE3RUZDMDhFODk1Ci06MTAxMEIwMDAyRkMyRkNFQjM4RkY2QUZDNDRFMTVFOEFGMzkyNTlCRDEzCi06MTAxMEMwMDA0ODdGNzRGNTc5QkVCQzBFRThCMjNENEQ2OUMwNzMxMTFFCi06MTAxMEQwMDA1RDMzMkZFOTVDQzRFOTNGRjM2M0VEOUVFREU5QzZBMTAyCi06MTAxMEUwMDAyNDQyRkRENzQxQ0UyN0M2RkJGRjM5ODFGOTA1NEIzODk1Ci06MTAxMEYwMDA3RjVDRjVGOEQ5RkRENzAzNUYyRkIzQjgwMEFGNEZFNzlBCi06MTAxMTAwMDBGQjdFMDE3OEVCRjVCQkZFQ0U3MjY0QjI1ODhERjgwQjE2Ci06MTAxMTEwMDA1NkQwQjlFMzM5MEUyNDA2REFEMzQ2OUExMTdGNkEyOUVDCi06MTAxMTIwMDAzRkU3RTMyRUUyNkE4REM1QjdCMDZENUYyNjIwOUYzOTk5Ci06MTAxMTMwMDA5QzlENTU2MDM0OUJGMzFCOEZDQzg2Rjc0QTQ0RENEN0NCCi06MTAxMTQwMDAxRkI2Q0Y2NUMwM0FCMjEwREY3RkQ2MDZGQkNGQTgyRDAxCi06MTAxMTUwMDAxRjVDMjE2QUU3NkUxMTgxQ0FCNjYwOTk5OURCRjc5RjFGCi06MTAxMTYwMDAzRTJFRDMzRjlGRTFGNTk5MUYxNDg5NEY0MDdERTYxMTM0Ci06MTAxMTcwMDAxMzZCMUYyQTEyNTM5NkQzRUY4NDUyRDgzQzNBMUUxNDk1Ci06MTAxMTgwMDAzQzJEMTI1QzlGNUEwN0Y5Q0JGQTI2QzE1MzRFREIzNTMyCi06MTAxMTkwMDA4MTdCN0EyMEM0QjVFNDYxMUIwMTU3RTE5MzFGMkU5RDJBCi06MTAxMUEwMDAwMkVCMzlFMzI2NzhCRUVDREM0NEM2Mzc0QTkwRjg0REIyCi06MTAxMUIwMDBBOTdERkVFRDg3QzlDNEFGRTU0QjYxMUY5RDk3RUI5OUYzCi06MTAxMUMwMDA4NzYwMUYxQjlERjc3NUVBNzdENUJCMjE2RjRBRkQ1RUNGCi06MTAxMUQwMDA4OEFCQzU3OTU4M0UzMzNBNjhGNkY4MDlGOEJCQUMzRTlGCi06MTAxMUUwMDBCMkVEN0U4MTNDMDRFMzg4NkI1QUMxM0ZCN0YxN0FEREYyCi06MTAxMUYwMDA2OEI5MTZGREM3Mzg0QTlGMTI2OEQwOTA1OUI3OEZBREFECi06MTAxMjAwMDA5RTI4NDhCRkYxRTU5NDMzMzJFMEFBRjc4RkIzMkZCMjlFCi06MTAxMjEwMDA5RjZERUU4MjIxQjFDMDJGRTcyNkU4Rjc2NUY0MTc1RkQ2Ci06MTAxMjIwMDBEN0FFNzBERTBERTBBNzhCRTc1N0I3NTJCQjFERDZGQkRDCi06MTAxMjMwMDAyMkI1REJFMUJBOEREQUVENzAxRkNFQTk4NjJCRUM2NzAzCi06MTAxMjQwMDA4M0VCNEU2QUI3QzMxNUY2QjNDMTE1RjZCM0MxMTVGNkY1Ci06MTAxMjUwMDBCM0MxN0JCMDlGMERBRUIwOUYwREY3MUYxNkE5ODFDMTIyCi06MTAxMjYwMDAwMDlGOTI2ODAyRjlBMTM2MEJBMzMzMzVEOThBRkU0NjU2Ci06MTAxMjcwMDBBMDg4NjBGRTNFOTg2Q0REQjAxQ0UyNzUwMkMzOTMxQTM0Ci06MTAxMjgwMDBDQjlFMDc2Mzk0OUJCMTlEM0E4NkU1NzdDRDlFMTREODlCCi06MTAxMjkwMDA0N0I4NDIxODIzODFGREQ0NkU1NUIwN0VGOUQ4NzIzMzE5Ci06MTAxMkEwMDA4MUZBRTVEMDU0RTEwM0M4QkIxMEMxRTQxMUE5N0RCM0I0Ci06MTAxMkIwMDBGREVCREIxMEZFOEI2NTYyODJCQUY0RTU3MDZFMjhDODI4Ci06MTAxMkMwMDBFM0NGQzgwNjE2OUYwQjhBNzBCRTVDNkIwQ0UxNzU2NDk5Ci06MTAxMkQwMDAzN0Y5NjU0QTdGMjcwNUFEQkQ1NzAxN0Y3NDIyQzQwNEU1Ci06MTAxMkUwMDA5MDdFNzcyOUYwN0M3MTkzQzBEQkFGRkFFNTkxNTBEN0ZGCi06MTAxMkYwMDBBMDNEN0ZGMzQ5ODgyRkFFMzBCNEJCNERCQ0FEMEU3RjBGCi06MTAxMzAwMDAxMkM2M0JBMjdENEYxRDU2MDNFMzFENDlEMzlFMjcyRUQ3Ci06MTAxMzEwMDA4NEY2Qzc1MURBRkI5RjJGODRGNzgzQkRGMzM5ODlFMzQ1Ci06MTAxMzIwMDA4NTkyQjVGRTUyMERCNjdCRkRFNzA1MEFCNjg3QjBGRTg1Ci06MTAxMzMwMDBFQjc3RUU3QjBBRkNFNUJGRjc3OEFEOEE4QTcxN0M3NUE2Ci06MTAxMzQwMDAxNjIxMUI2MzIzRjBGRjQ0NTExRjBGOTUwNTVEM0M1NDhDCi06MTAxMzUwMDA4QkJGOUIxQ0Q1NTdFMkZFQjMwNzZDMjgxNzNGNEUyNjY4Ci06MTAxMzYwMDBFODg3RjQxNzE3MEQ4QkQ3NjM1Q0Y0RTcxM0ZCODk3RkNECi06MTAxMzcwMDAxMjg1QzBCODU1MTAwRkY0RTA1Nzk1RjBGRDY5NDQ2ODI4Ci06MTAxMzgwMDAyNDUwQTdFRTNCMTUyMzgxMUQ2OTREMEE4QkRGNzExOThGCi06MTAxMzkwMDAzMDUwQkNCMEI1OTFDNTA3ODM4QTg1QThBOTdENzVGRDdECi06MTAxM0EwMDBENjQyNUVEN0NGRTM4NTVBMUQ4M0I1RjA0N0JBQkM4MURDCi06MTAxM0IwMDAzMTVFNDhDNDVCMzAxRkVENUJBNDhGMDc0RTU3MkUyRjY0Ci06MTAxM0MwMDA1RTU4NEQwMjk2MkI4MUZFNjVDMTAzRkU3QkI1NEJGOTNECi06MTAxM0QwMDBGMDBBQjRGN0FGNjFFNzMzNEFBRjYxREM1NERCMzcwNjlDCi06MTAxM0UwMDA3N0UwRENBOTJBQkVFNjhFNUI4RjdENzAwNUVERTc1RkI2Ci06MTAxM0YwMDAxRTI1QzE2NkZDRjlCNzk0RTBGQkY5NzQ4NTEwREZBQURECi06MTAxNDAwMDAyRTRBNDM3OEU3N0NFNjc5NEQwMjc5RUEzNjc5OTg5OTU1Ci06MTAxNDEwMDBFNkZCN0UyMkQ4MEI4QjYyMzE2RkIyRTBDRThDMEY2MTdGCi06MTAxNDIwMDA5Q0M1QUEwM0RGQTM3NjI1QTdGN0FFMjc4MDlFNDQwOEI0Ci06MTAxNDMwMDA1Qzg2QjVCMzUzMzRGQTlCRkQwNEQwRkZDNDc4QUQxRDcwCi06MTAxNDQwMDBGREE0NUM0ODQ4ODk1NTdCM0YwN0RCRjMxNENFN0Y2QUQ3Ci06MTAxNDUwMDBGQTkzQzA3RjQ3NEEzNTdBN0RBMzA2OUVDRjFFRDEzQkMzCi06MTAxNDYwMDAxRUQyRjc0NDg3RDZCRTcxMjEzQzZGRUYxREFGMUVCRjYxCi06MTAxNDcwMDBGNzBFOUM2Qzg0RUQ0OTRGODIzRTJBOTlBMUU5QUJFM0JCCi06MTAxNDgwMDA0RkMwRjg2REQ1REFGQkEzRkQxMDhGOUE2RkQyRjg4N0E1Ci06MTAxNDkwMDBGODgxOUYxNUQyREI5NjQxMkZCRUNGRjlGRkM4QjY0RDFDCi06MTAxNEEwMDAzNTUwRDc3NTkzRjY1Q0REODRFQkFERTZFRDc3QjYyOTY0Ci06MTAxNEIwMDA0RjAyM0ZGRERCQUZFRjdGRjg3QkM2RjYwMjEyOUM3QzRDCi06MTAxNEMwMDA2NTc2MUY1RjE4RTVENTZCQzU0QzhFNzgxQjlFMDU3MjNGCi06MTAxNEQwMDAyNUQ1OEQ0RkUxRjk2RTEwMEY2MEY5QUNDNDU5M0U5MERGCi06MTAxNEUwMDAxNzc2RDE0MzM5ODNGOERDMkU4QzczMUFDNzU5NUNDNDQ0Ci06MTAxNEYwMDBFQ0VCNEYwQkY1NzlCMTM2NDM1RUNDQzdGMzUzRkQ4RDYyCi06MTAxNTAwMDBGMzI2OUY0RjdCNjk2NDNGNzY2QzRFRTk5Nzg1NTAzRjg5Ci06MTAxNTEwMDA0MDRFOEIzMDlFOEIwMjBDQ0UyNzZCQzk1MkJFODJGQjk1Ci06MTAxNTIwMDA5NDc1RjFEQzREMkFCMjNDNzA5RkZBQzUyQUQ4OTlEMzQ0Ci06MTAxNTMwMDAyODM4MjEwRkRCNTJGQzI4QzZFOTQzRjkxNkRENzkyMDUzCi06MTAxNTQwMDA1QTlFNzNBRDU1NDZGOUY4MDlBRkVCOTg1RjJBNEZCRTI2Ci06MTAxNTUwMDA4N0I2NkI4NzhBNjQwM0Q2NzkzODMxREY2MDFFNjY3RDczCi06MTAxNTYwMDAwQUU1M0FDRjdCNkFFNzcxNENCQkM4QkUwOEUzQkU5NDdDCi06MTAxNTcwMDBDRkY5N0FDRjE0NzY1ODQwM0VBQjQ0OUQ1Qzk2OERGMkZECi06MTAxNTgwMDAzQTA4RjVDNjI2QzcxQUNDMDNEQjhBMkQ5ODQ3RDBGMjU1Ci06MTAxNTkwMDBDRjBBM0ZGRjVCQ0JGQjRFM0MzRjk4RTlGNzc0MkRBRTgzCi06MTAxNUEwMDAzQjcwRkU1NzY5REFFMTQzRkJBMDUzMjQyNkUxQzI3QzdECi06MTAxNUIwMDBGMDYyOUY5QTBDRjUyQ0QzQ0E2MjcwQkY0MDU1RERFQkU4Ci06MTAxNUMwMDAzOEZFQTExNDgyRTcwNDQ3Q0Y2QUM0RkQ0MTY2NkExRjUyCi06MTAxNUQwMDBDQTAwMTc5RTJGRDZFQTYzODY5RkZGMEVFRTFCQURENzdCCi06MTAxNUUwMDBFQUNEQzU4QTAzNjBBN0RBMUVBMTdFMTY3NEUwRjk2MDExCi06MTAxNUYwMDAyRDVGM0NDMzIwRUYxNzE3NTZBMjlFMjVENDhFMUYxNUQyCi06MTAxNjAwMDAwQkRGMTk3OERGRjMwMzEzNTlGRUY4NDQyN0FCRTdGNzM0Ci06MTAxNjEwMDAxNkU5RjNDMEY3NTk1ODlDQUYzRDRENEY1NzFCMjczMjgxCi06MTAxNjIwMDA3RkY1MDc1QzlGRUUyQ0ZFNzkxNURBQ0ZDNEU0ODFCQzEwCi06MTAxNjMwMDAxODc5OEM5RDBCMDczMTE2REM2RjY1M0M4RjM5N0QwRTU4Ci06MTAxNjQwMDBEQTc1OEYwREE3NEJBNEI2QjZCOUU5N0Q4QzJCMEFFQkUyCi06MTAxNjUwMDBEODdCOUY4RDIzOERFMEI3OThDREFDNEQyRjJBRTRGRjJBCi06MTAxNjYwMDAzM0JEQ0FENDIyQThCMzY4RkExMEZCQjdBQUFDREVCQjVDCi06MTAxNjcwMDBCRkY4Q0RCQzIyNkQ5RjA4OEJERkNDNzdFRkVEODE3RDZECi06MTAxNjgwMDA2NTdGNzMxQ0M3QjBFRkQ1MjdCMUZBOTI5NTg1OTI5NjA2Ci06MTAxNjkwMDA0N0MwNzMwOTI5RTE1QUMwNUU0QzI5RjBENUMzQkNDOUMzCi06MTAxNkEwMDA5ODREMTJDQzQzOTMzNzNCNUVGOTc2MERDODFCMjI0NzA5Ci06MTAxNkIwMDBDRTRCNkI3Q0RGNjZDODRCRkJEQ0VDRkQzNzhCRUZBRUIzCi06MTAxNkMwMDA4MUYzMERGQUNCNDMzQzVDMjI2OEYxQjUzQjhBNjA1RTQ2Ci06MTAxNkQwMDAwOTVBREU0MEJFMTNEQUJEN0ExNDE2RTRENUU5RDE4NTg1Ci06MTAxNkUwMDAwREZGMEJGNDY4OUZEREZFNzYwRDhDRjc0RDlCM0ZBNTNCCi06MTAxNkYwMDBBQkZGNDJCQzk2QjNGOEQ5Mzc2REZFMTMyNkM4N0I2MEFBCi06MTAxNzAwMDBGRUZGRThFRjhDOTlFMDdCMEJCRUIzNUE5MEFCOUMyQ0FDCi06MTAxNzEwMDBCOUU3MTFGNDc5QkU3NzhCMDZDOEYzNUQyQ0ZFRjA3RjM0Ci06MTAxNzIwMDBGMTg2ODFFMzBENjJGMUJGNjZCQ0MxMEE3QkE4NzI5MEFECi06MTAxNzMwMDA4RkFFMkMwNkY5NUNDOEY4RThERjVERUVEMUY1RTZDMEE3Ci06MTAxNzQwMDA3QTU3MEI5QkZDRDEyM0ZFRkVGRTdFNEE4MTMyQTkxOEZDCi06MTAxNzUwMDBGNUEwNjJEQTQ5RTk2Nzc1ODk5REQ5MzMwMTA2REZERUI0Ci06MTAxNzYwMDA3ODA2Q0NERkFCOEI2NzNDRDlGMDBGODg2N0QwRjU1Njk1Ci06MTAxNzcwMDAyMjdFQ0JGOEY3QkZGOUY4QkIxNUUxMkIzMzdCRTJERjE0Ci06MTAxNzgwMDA5MDNFNTdFM0ZBMzZCMUY1RkQxM0JFQkYxRUU5RTU5NzZCCi06MTAxNzkwMDA4QzVFN0FFMUMzRURBNDMwRjgyQzZDRjhFN0MwRTc1NzEzCi06MTAxN0EwMDAwODlGQUQ2QzdFREYwMDdDRUU0Mjc4N0FEODdDMkZFNjE1Ci06MTAxN0IwMDA1RjFGMkQxNDM0QjlGQzA2QkU5N0NERThFMDQzQjBBRkVGCi06MTAxN0MwMDA5OURGM0RFOTRBQTlDRkVGN0UzNDU3M0U1MENDRUE2MzFBCi06MTAxN0QwMDA4MkM1QkFGQTRGRjkxMEI0MDdGMDhCOEZDMEYzMDg3RUI4Ci06MTAxN0UwMDBGMUZCQzVERjQwQkZEODU5QzRFMEQ2OTc3N0YxQjM3MzlBCi06MTAxN0YwMDA2RjQ5RDUwRDU3RDNFRjdDNDhFMTBERjFCNjhFMjYxMTE4Ci06MTAxODAwMDBFRDhCNzM0OTA0Q0YwM0QwRUM4RDUwMkNBQkRGQkI3MDU0Ci06MTAxODEwMDAzRjU4MTk4MUZEODhCNjdDNzZDRTg4NzYzRTgwNTlBQ0RCCi06MTAxODIwMDAxRTFDOTAyRTg0RUI4MTQxOEExNUVBQkM5NkM4MTk2RDY2Ci06MTAxODMwMDBCMEJGNzVEMjlBMkY3MERGOTU1NUI2RTFCRkFCMzlEQ0RBCi06MTAxODQwMDBFREIxREMwOTdFMzRGNTczQUY4Mzc4NkE4MzBCRjdEMTkxCi06MTAxODUwMDA2OUZCQ0FCNEZEMUY0QjAyRjNGNkMyM0VEQjBFNEEwRjEyCi06MTAxODYwMDA4OUY0M0JEM0NCMkNDN0MzRDc2RkI0MzdDQzg2QjZGMTQyCi06MTAxODcwMDBERjM1NEQ5OEE4QUYwN0E0RjA0N0ZCRTdEQzNBNTYxRkM5Ci06MTAxODgwMDBENzYxMjYzQkExRkVBMzVFMTVGRDJEQjRCRDcxOEQ4MEYxCi06MTAxODkwMDBFNzcxMkVBMjcwMDI3RjdGNTI2NzJBRDY5MzVCOTNEODlFCi06MTAxOEEwMDA3OTY3REFCRjdCNEFFOUEwMzMxRkVDQkYyMzIyQzE3RkVGCi06MTAxOEIwMDBDNzhFRUYyN0QzQ0VGOThFOUE3QTFBQ0ZEQkZBOThBRTdECi06MTAxOEMwMDAxRkNFRUZEMUNFOTk5OEMxRTk0NDgzNjc1NDRCM0NDMkY3Ci06MTAxOEQwMDBFNTFDODUwQjAxQjhGMEZEMzZEMzlBNTgzRUI4QUQ3QUI5Ci06MTAxOEUwMDA3MTEwQzhCQkE2RjA4QjE1OTFFQTUyRTZCOEY1RTdBNUQyCi06MTAxOEYwMDAxQkUzMTlDNkYzQzZDREM0MzcxOEY2RDU0RDJGMkM1MUFFCi06MTAxOTAwMDBDMTVFQjVGMTdBQ0Q2ODIyRTNCOTE2MUZBRkY5MDkzQjg0Ci06MTAxOTEwMDBEN0EyQ0NBMjNCNDdDNEY4REQ2ODAzOUREQTBDNzEwNzVGCi06MTAxOTIwMDAyMzlEMUFGMTcyOUQwMTJGMUJDREVDOUNDMUI2NkVEMTg3Ci06MTAxOTMwMDBBM0QyREI2RDBGMkY2QTg3N0RGOUVBQzMyNjU2Mzc0Rjk2Ci06MTAxOTQwMDA2NDNDRjdBOThENUFCQ0I4RkY5QzRFMTZFMkY1NzMzOTdBCi06MTAxOTUwMDAzQzM1QkMxMEQyNjgwMTdFQUJENkY2QTE5QjFBNTdDMkFCCi06MTAxOTYwMDA3RUQyNzk3QzFGRkE0RDY0MTNFRTMzNTgwMDE2MDRGREM1Ci06MTAxOTcwMDBFRTQyMDg5MThCNzBBRThDNjQ2NUNFODE4QkMwM0NFQUUwCi06MTAxOTgwMDBBQkQ4MzkxOTI2NTgwM0U0MDkxRTM2MjFCRkI2Qjk3N0ZBCi06MTAxOTkwMDBFMkJGRkIxNTE4NkE4OTNEOTlDRUZDODk0OEY2NkM2RjQ5Ci06MTAxOUEwMDA1QzgxNDJFMjY0NTgxQ0ZGRkZFMjU3N0Y1QkZDMkFCNzcwCi06MTAxOUIwMDA4ODlENDdENTE2MTU3MEU1QTdCMkYzMjZBMDlFMjlCN0Q2Ci06MTAxOUMwMDA0ODQyMzkxOEI0MjgyOUI4REY2MUZEQTcyQUQwODFCNjZBCi06MTAxOUQwMDBERjgxRkUyQ0JCNDI3RjZFQzJGQTg5MDNGODdGNDU0NTRBCi06MTAxOUUwMDAwNEM3NkI0QjBEMjU4MzVDRkJCMDlGQkFDQUVERTAzODkyCi06MTAxOUYwMDAzMDNEQjQ2MTIyRTZERkE5RkQ5QjBENzI4RkQ5QkYxNTgyCi06MTAxQTAwMDA3OUJFQTdGMTNFREZFN0FDQzU5MTNFRjEyQUZGMzkzMTNGCi06MTAxQTEwMDAwN0Y2RTcxMDk0QzNCNjBBQzEwRkZCNzdBNjNCODUzREQ2Ci06MTAxQTIwMDA4MkQ0Rjc3RDYyQUM2M0ZGNUY5QUI3QkE5M0ZCNkRDMTU2Ci06MTAxQTMwMDAyODgyRTcyMDA1NTM0OUQ1NzMxMUYwRjE4MzUyMTZBNzg4Ci06MTAxQTQwMDAwQzY2NDRDNjk3RjY5Q0RBMTlFRjRDQ0M2MUZFRDAyMEE4Ci06MTAxQTUwMDA0NjE0QTdBQ0ZBRjhDMDA3MDNEMTg3ODZDN0Y4QzlGMkM1Ci06MTAxQTYwMDA0NzEzNzNGQURBMEZFNDI5OUY0MEJCNTVGMTdEMDA3OEU0Ci06MTAxQTcwMDAzREE5OEExMkU4MTUxMjUwRjAzQ0JGNjlGRjIxQkEwMDU3Ci06MTAxQTgwMDA4RUZGRTgzQ0RDQ0FDMkQ0NEJDQUMzNTUwMzlEMEQ1MDNGCi06MTAxQTkwMDAyRjc4QjlEN0ZGMEZGOTYxM0Q2QjAwODAwMDAwMDAwMDdGCi06MTAxQUEwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkVEN0QwRDc4NTRENTYxCi06MTAxQUIwMDA5OUYwQjk3M0VGRkMyNDk5ODQwOTA0MUMyNEMwMEQwMjI5Ci06MTAxQUMwMDA0NjFCREM4MTgwMjQ0MEUwQ0U0QzEyMTI0ODYwRjgzNTgxCi06MTAxQUQwMDAwMkUyODUwMDhENURCNDUxNzkxNDU4QkFCOTIxMTAyMDA1Ci06MTAxQUUwMDBBMjYwQkZCNEI1RUFBMzQzMTBEQ0RERkFENEQ0NzVBRDZGCi06MTAxQUYwMDA4OEFFMjNBMkE1NURENEE4QTFDNjU1NjkxMEU0QjNBREY0Ci06MTAxQjAwMDBFRDg3MEE2QkVCQTdGNTdCREZGNzlDM0I3M0VGNjRDMkI1Ci06MTAxQjEwMDA5RkIxNEI5RkZEQzJBMzM3RTc5RUJGRjdCQ0U3RkQzRkQ4Ci06MTAxQjIwMDBFRkI5MzlFQTY0OEM0RDgyRkY4Q0MyNjU1QTAxNjMyRDhFCi06MTAxQjMwMDA1OEJFOUNFMThGQzZBMEJDQjhCRkE1OUMwQjREM0I3OTlECi06MTAxQjQwMDBGQkQxREFGRjg5MUEyMzE5RDM5OUU4MkZEQUJGMjNGMUUxCi06MTAxQjUwMDBGNjQ3ODMwM0EyODY5N0IxNDVBMjFFQ0EzQTk2Q0RGRUU4Ci06MTAxQjYwMDA4QzI5Nzk0MTA1RkFENzQ5NjY3OTk3QTY1OEU3Q0JEQUU3Ci06MTAxQjcwMDBBNUMxN0MyNzlDRjZGMTk3ODhGMThBQjQyRjY5RkM0OEFGCi06MTAxQjgwMDA3Q0ZFMkZBMzFBOTQ4RjI3QzE3RjAzRTNFNTUyRURDRjhDCi06MTAxQjkwMDBENDdFNjVCQ0ZEOUY3NTVDRUY0OUM5MkM4RkQyQjFGRjI3Ci06MTAxQkEwMDAxMTk3RDlGRjhBNjUzOEZGM0Q3OUJDN0U2QTY4NTRENEE1Ci06MTAxQkIwMDBCODA0RTFGOUE2QzdCRkQwRjY0N0E3QTg4QzBEMDQ3Q0VFCi06MTAxQkMwMDBENEZEMkM3QzE5RkNCQUE0N0U5N0FDNDNCRkEzQ0VDODJECi06MTAxQkQwMDA3QjJDMDdDOEVDNUU0OUREMDM3RDhBNThCQkNDNjQwMkQwCi06MTAxQkUwMDBEQjI1OEY4NzIxMzQ4OUI1QzA1QzJCNDJGMEJGMDk4MDhCCi06MTAxQkYwMDA0N0FGODNDRjYzMDRBMjFBRDBEOUUyQTkyNjlERDY0NDY5Ci06MTAxQzAwMDA3MURFREVFOEVFOURFMDc3MUZDMjc1MjdFMEZFRUU1MjQyCi06MTAxQzEwMDAxQkRDQzZBODY1REE5NDA0RENFMTEwQjQ4N0YxMTZERjlBCi06MTAxQzIwMDA3MjkzMUZFMTVDM0NDMjVDREYyNDlBQTczOURCRUNEN0RFCi06MTAxQzMwMDA3REQ2Nzk1RjdCQTE5NEYwQkQzODNFNEYyNUI1NUY5QzgyCi06MTAxQzQwMDA2RThFMzcyNzhBRjMyNkUwNUE0OEZCOTE4MDZCQTgwREU5Ci06MTAxQzUwMDA5RjgxRDA0MkMyNjdDNDE3REQzQzA4RjAxM0YxQjM4MDA2Ci06MTAxQzYwMDAwMUY4NUM1NEQ3MjhFQjA1MTYzRTMyQzIyQUYxOTEzRkE5Ci06MTAxQzcwMDA1RThFREFGOUE4ODBGOEE4QUZFMTFBMzYyOUIyNEQ4MzUyCi06MTAxQzgwMDA3RDYyRjlFRDZBNjRDQzM3QjFFRTk4RjMzMjVDQjcyMTJFCi06MTAxQzkwMDBEMUJBNEQzQTVBRTJCM0QwQkIwN0Q2QUQ5QUU1MkI5N0VECi06MTAxQ0EwMDBENTc5RkI2MkRFOEUzMjlBRjcyM0MwMzc0QkYwMTMzM0JGCi06MTAxQ0IwMDAwNjJGRDNCQzE3M0U1RTkzNzdCOTBCRTE1RUE1NDk1QTU4Ci06MTAxQ0MwMDAxNERBN0Y4NTNGRDMxMkNGQTM1MzI0RTIxN0MwRTdCRkI2Ci06MTAxQ0QwMDAxMjNFOEIwMDlGOTlGODlFMTExRjNDNUUxOEY5QjkwNkMxCi06MTAxQ0UwMDBGNTRDRDUxRDA3MDAyRTk3RTY2MTJEODA4M0FBODk5MUJBCi06MTAxQ0YwMDA3REQ0OUVFREY0MjNGRTAxMDAxQUE3Rjk3NUE2MjA5RjVFCi06MTAxRDAwMDAwMTZGMDUxQzkzQTFFQzY0MzVFRDI5RTZGRDYxQzg0MTI2Ci06MTAxRDEwMDBFRDlCMThBQjY4MDdGOEM2NkZGNEFEOEE3ODEzRjVCRTczCi06MTAxRDIwMDAzMjBFNTc5Njc4MUVDOUVDQkU2MTIwQ0NERjBENTUxQkQ0Ci06MTAxRDMwMDA2MUZDMjYwMzk4MTc5RTFGRDQ0OTUxMDlENkZDNDE2RUI5Ci06MTAxRDQwMDA2NDU2MzE5NDNCRjIxQzgxOEQzMDdEQzczQUY3RDAzNTEzCi06MTAxRDUwMDBEMEJFMkJDRjFCNDBFOEJBQjI3NzY2RkE2MEZDMEYwMjA4Ci06MTAxRDYwMDBCMkMwRDc0REVGMjM1RjFGQzk4Q0YzOTM4MUZBQTU0MzBGCi06MTAxRDcwMDBFMEY3RDc1QTcxMUJGMkQzREIyQTJGM0Y1MEZBRjdFRjY3Ci06MTAxRDgwMDAxQjA1NDg2RkNDQzcwNjAxMUVCMDA3RjBBQTIzNjM4QTYzCi06MTAxRDkwMDBDNzBERjNCQUNBNDE5QzYwNUYxRkQzNUQ1MEVGQzY3QThFCi06MTAxREEwMDA1OEUyOUMxRkVDRkVDMTNDOTVFNEM2Q0IyM0FGNjVBQzZBCi06MTAxREIwMDAwNkRGQUJEODVGMzFCQTNEMzRBRkYyOTU0NDRGRTZCQzk1Ci06MTAxREMwMDAzNjMxQUVBQkI1RTlBNTI2ODA5RkY5NjUxNjQyREVGMjQ1Ci06MTAxREQwMDBGM0Y2N0VENkRERjg5NTAzQzc4NzcyM0U0MzEyN0NFMUE5Ci06MTAxREUwMDAyQjU4QkYyNENBRjhGMzE1MkNEMUNCMjIxNTc5MDg1N0VDCi06MTAxREYwMDAzRTBCQjRDMDdDNzM3NEU3ODk3ODNEN0Y2QzU3QUUxNTk5Ci06MTAxRTAwMDA3MDIyM0NGMjg2OEE2Mjc4QTZEN0Q5REJDRENDODdCMjI1Ci06MTAxRTEwMDAyNzUxOUVEMTVBMUI0MkJDQ0ZEMEEwREI1OEM2MEVCNzZCCi06MTAxRTIwMDBENkM2NkEwMUNFQzM0NTZFOUYwNDk4NzZFNTJBQjZGNkZCCi06MTAxRTMwMDAzMzU5RkIyNkM0M0I1MzBGMUQ5NDAxMkY0QkM1N0M0RERBCi06MTAxRTQwMDBCRTM5RUYzMUU4QjcyQTFGNEFCMEZFMjNGRjEwQ0M5QzAxCi06MTAxRTUwMDA5MDgzRkMyNjA3MUNBMjhEQzNDNDA3QTM3NjRFMDc5NzY4Ci06MTAxRTYwMDBEMzAxMDlEQTM3M0Q2M0VFREJDNDM2RTQwMzM5NDNCMjBDCi06MTAxRTcwMDA5NTgzMkVCMzdFNEMxQkYyRTE5MUI4NUMxREI5MUNDQjRGCi06MTAxRTgwMDAwQkFFMzBGOTI2QjMwREY5NkE1QTg2NTk3NjJENDczRUM2Ci06MTAxRTkwMDBFQTU2OUM0MjlFMEQ2QzQzM0FEOTZBOEU2N0VDMjBGOTUzCi06MTAxRUEwMDBGMjE2MzNFQjFENTQxRjg5Q0JCRkYyNUQ1ODVFRTgxMzY5Ci06MTAxRUIwMDBGMDE4REYyNzc5RDhBNDcxN0Q3MkQ1MEJCMTZFRTMyMkJCCi06MTAxRUMwMDBEQTAzN0Y1RTE5NDQ3RThCNzA3OTk3NUMzRkE5MzNEQTIxCi06MTAxRUQwMDA5NDg1N0MwN0Y4MTlBNUY2RTRCN0Y1NDE5OUY4MjhBMjhFCi06MTAxRUUwMDA3RDJDRTNGRTk1RDYwM0NFNjBGRkMyMzU1MkU3MDRBNEY1Ci06MTAxRUYwMDA0Rjg1MEQ0NUJFNkY2RTAwOUQzRTBBQ0EyRkE2QjlENDEwCi06MTAxRjAwMDA0Qzk0RUJCRTcyMkQwNUZGRkUzQ0M4Rjk3NzUyRDA5Qjc2Ci06MTAxRjEwMDA3MzEyNzE1N0M4MEE5MUVFOUExQkQ2OUFGRDBEREM1RkI5Ci06MTAxRjIwMDA3REE0MkI5QTk2RDdGQjM4QUY4NTFEMjQ2NzNBMjRERjEyCi06MTAxRjMwMDA3Q0FFOUY2NTg2RkEzOTc4RUYxNURFNjI5NjY4Rjc1OEIxCi06MTAxRjQwMDA5OEVCRTVDNjQyNkQ3QTEwRTY5RDA1RTI5N0MxMUUzNjE0Ci06MTAxRjUwMDA0RUJEM0YxMjgyNzk0RTE0M0IwMzZFRTIzM0VEMERFNDI5Ci06MTAxRjYwMDBCM0I5ODI4Njc2QjgzNEI2MEVFNTQ2QjFEQkI3MTE2NUYzCi06MTAxRjcwMDBCNzVDRTA1QzBCNjU2NTA4RjAyQjk2MkIzODdERUJGMEM5Ci06MTAxRjgwMDBFRkFCMTEzOEFFOTJBMDdGODA2M0NFNUEzQjNGMjhDQzk2Ci06MTAxRjkwMDA0MkRGNTBCRjI4OTg5OTczRjI1QjUwQjg5QTVEOERFQjgxCi06MTAxRkEwMDBCRkNCRTk1QjhBNzI2Q0VCMDhERjJENTY3OUY2Njg5ODM3Ci06MTAxRkIwMDBDQkIxQTg1OEVGODFBOUZGNTI4M0Y4Rjk5NDM5MDIyOEQwCi06MTAxRkMwMDAzRkY2QTY0NzQ4OUUxRENCNjJBQzBENzVCRUM2NTRERkRBCi06MTAxRkQwMDAyMEU0NkJCRTBFMjk3RjIxQzNGNjBGMEU4NzI1MEMwNjY5Ci06MTAxRkUwMDAzOEQ2QkVEMzUxNUEwOEVGRUZFM0ZEM0VCQzg2RDUzMzU5Ci06MTAxRkYwMDA3Q0FGRjAzMjNDMEM2MzJDQjYzQjRBRURFRTBDOEVBMDZECi06MTAyMDAwMDA3OUQ5NDMwMThGMDc2OTFGOUFFMzdFN0I1OUJCMTM5RkUwCi06MTAyMDEwMDA4RThDNjc4N0VBMjlGNkM3N0NCMkQ1Q0U4RkUyNzg0MEVFCi06MTAyMDIwMDA1RTAyNEQ4OEVCOTY5OEVFRjgwQUQ3MkZFNDNGRDBFOTkwCi06MTAyMDMwMDAwNkRDMUY5MEZBQTQ0NzI2N0Q3OENBNDY2RkUzODIyQTAxCi06MTAyMDQwMDBDMTkxNEM3N0QwQUY4OUZBQ0QzN0ZCMzFBNzZFQjFEN0FDCi06MTAyMDUwMDBENzA3N0YxNDZEMUM0OUZBNjgxQkI1RjM4MjNFQ0FCMURECi06MTAyMDYwMDBFOUEzQkI4MjI5RjREMUM4NEFFRDZFRkU5RTk3QTFGRjc5Ci06MTAyMDcwMDBCREJERjRGRjVGQTlGQTQzRkIxRkQyN0I4RjRFRjhBQUM4Ci06MTAyMDgwMDA5QUE4RkQwOENCRTM4Nzk5RjIwNDFBMTY4MUZDMTg2MDIwCi06MTAyMDkwMDBDQThGRjQxQkVCQTY1OEU0OEYzMUUxNjE5NDM3RDdFQjdDCi06MTAyMEEwMDA5MkE4Q0Y3Rjk4RjQ0RUM4RUNGRkFCQTU3Njc5QjRFMDQ4Ci06MTAyMEIwMDA2MUJCM0M5QTc5MjNENjI3RTQ0RkVENDM3NkY5MTM3RTMyCi06MTAyMEMwMDAxOEU1NDU3MDhFRDA2QkVDRkQ4NzcwRkNFNjI1NjZGRjQ5Ci06MTAyMEQwMDBEMUQxMjBEQTI1MEU1MzFFQjIyOEYyQTFDRUUyNjU5QkEzCi06MTAyMEUwMDAxRDc5RTREOUY2QTVBOEU3NENCRjg5MTlFRDBGMjEzQzZECi06MTAyMEYwMDBBNjlGRjFENkIzRkFDM0E4MTc0MTJFQjJFMzI2MUY4Q0QwCi06MTAyMTAwMDBFOEM5RUZBNjFDMzBFOUM3QjQwRjVGN0IzMUFBMUJEMDJBCi06MTAyMTEwMDA2RTZFODUxNkIzRUU0QkRDQ0VFQ0U2NzY0RkMyQkVGQzlGCi06MTAyMTIwMDBERkRDRkVFRTdCRkJGMTc1OUFCRjgwRDNEQjM3MzBGRTQwCi06MTAyMTMwMDA3QkQ2RjE0RDdCMEFERTc3MTNGRDg5Rjc5NzlBM0YwNzJGCi06MTAyMTQwMDBGMDlEMjZGOEM2NzNGODJFQTJGRjE3QjRFRTAwRDc1MzAxCi06MTAyMTUwMDA3RjA1NzhEMzQzMTYzRkUwMTJDNEU3QjA0QjFDQkU3MTM1Ci06MTAyMTYwMDAyMURDRUYyQUJFREY4RjY5Q0M5NEUzMTMwOEVFMUU3NEU2Ci06MTAyMTcwMDA3MERFRjQ1RjQyRTM5NkYyNzU1QkM2RDVBQ0YzRjVFNjJDCi06MTAyMTgwMDBBRjQzQkIzMjdCQkIzOEZGNTQxMDVDNjJEQ0IzRjRBRkFGCi06MTAyMTkwMDBCNkI3OEJGNzhGODQyQ0Y0RDkwNzdDQkVDOEJBQkZERkUzCi06MTAyMUEwMDA4MDFDNTk0NUUzOEZFNEUzQ0Y0QkUwRjEyNkVCRkJGRkM2Ci06MTAyMUIwMDAxRjM3M0IyNzlERUYyMDdBQUFFN0Y0NzQxRUY2RjYwRjJGCi06MTAyMUMwMDAxMEJGREJBNDc2M0Q4QkUyNDQ4Njg5RjdGQjcwMUM3ODU4Ci06MTAyMUQwMDBERkVEODJGNzMxQjExRjhGMTQ0NzFFQzBGNjU4RjQ4RjIwCi06MTAyMUUwMDBCM0Y4MjdDNkRDNUQwODVGQzIzRjgxODEwQTJDRkE5RUU2Ci06MTAyMUYwMDA1REI3MEJENzYzRUFGQjI3NDI4Qjc2MTk0MDI3NzI5OEFECi06MTAyMjAwMDBCNzdGRjRDMENCQ0I3MEZEQzk2NUIwNEJGRTk5RjYzRkVDCi06MTAyMjEwMDAwN0VDOTIzMTY0OTdGQzBCQzI3NUFFNzEwMUZFNzZDMjc5Ci06MTAyMjIwMDBDM0QzOUM2RTUyRDQzRjQ5RTMzRUM2RUJCN0JBQjgxRDQ4Ci06MTAyMjMwMDBGQkQ2OTI0RkM5OEVEMzZFNTUxRDY4Qzc5OTdBRkRGOUFBCi06MTAyMjQwMDAxMEI3NjdDMTFFQTk4ODdBN0JEQThEQ0Y4Qjc4MUE4QzdDCi06MTAyMjUwMDBGQjNDQ0REQkNFRjFERjE5OTEzM0QxREU0Q0Q4MkQzMUYzCi06MTAyMjYwMDBGMjgzMTI3NkQ1MEFBMkEzQjg1REM1QkU0REU1QTk2Mjc4Ci06MTAyMjcwMDA5RkRGMDg3RDY3OTk4MEY3NTcxQzBGNjIzREU3NkVERjhGCi06MTAyMjgwMDA0MTcwRjg3OUZCMTRGNTlEMzQ1RTJFODc5Mzc5MEY5RDhDCi06MTAyMjkwMDA0MEJGOTVFODk1RkY4Qzc0NDA3OTk1MjgwNDlEMEI0QUMyCi06MTAyMkEwMDA3MkMwNkUzOUQwMkFBOTQ4MjYyQkVGMzNGN0Y5NzZFMkFGCi06MTAyMkIwMDA4QkI4REQyNkY4RjA3QTQxQzc5Rjg0RDZEMzNFNUU3Rjg3Ci06MTAyMkMwMDBEQUU0RkZGREQ0N0U3Q0RDNEY1RDRGRjBCRjJERTIxM0RFCi06MTAyMkQwMDBERjBCQUYzN0UxRkI5MEUwNTMzOTdDREZDMEY4QTcwOTkzCi06MTAyMkUwMDAzRjhDRTNBNzg2MTk0RUI0Q0JEMEFGRENDMzdBRUVFRkI4Ci06MTAyMkYwMDAxNzIyOEUwM0ZERkUyRkY1RjM3MEI4NkE3NDg5RUNGNzkwCi06MTAyMzAwMDBDODhBNjM0RUE0RjdBNTlENEM0QjQ1MUY3MkQ4NjVGNjRECi06MTAyMzEwMDA5N0MzNjQ5NzBCRkYzNkMwRTM0MkM5RUREM0MyNzE3QTBECi06MTAyMzIwMDA0QUEzRjYzRTNFREY4NkUyNDgwNjk2QTdFOEFGODcwNzU3Ci06MTAyMzMwMDBGMUFERjFBMDNEMUEyOTk1QTIyRDc5RThERjc4Q0I0QUJECi06MTAyMzQwMDBBMTNDQzdDMUJBQzlFRjYzNkMzM0M2N0RERENGMkFBQ0VGCi06MTAyMzUwMDAyNTQwQUQ1NUM1MTJENzAxMkVGRDM1RkE5MTBCQzQzRTZGCi06MTAyMzYwMDBDRjYxRjFGODhBMDNFMzM1OTZGODBERjk4MUVFRjA5RDFGCi06MTAyMzcwMDBGOUFEMkFDNTVEMjg2RUUzRjJDQkU0NTcwNEVGNUU0MTY4Ci06MTAyMzgwMDBGMTkxRjQyMkI3Q0Y4REYzQzhCOUU0RTdCQTFFMTBGMThBCi06MTAyMzkwMDBBMkY5RENCRjc0QzAzRkI0QTNEM0Q3MzJGMkRGNjY2REJECi06MTAyM0EwMDA5N0EyMkFENEJCMzU3QkZDQTU3NkMzQTkyNkYyRUY1NkFCCi06MTAyM0IwMDAzMDlGMDY3RUEyNTI2NEFGNzcyNUY5QUY4RDg1N0EwMEYzCi06MTAyM0MwMDBGMTcyRjJCRTVBMDdFMjIzNThDOUZEQjA5M0Y3NURFMUZFCi06MTAyM0QwMDA0NUZFNEJGNkEzNEZBMjFGNEQ1MkFBODcxRjZEQUNDM0ZCCi06MTAyM0UwMDBGODlBQzU4RjVFRDM4NzdFNzQzODZDRjdBMzg3MTU0NzNDCi06MTAyM0YwMDBDQUMyNDhFNzhBNDZGMkVEQzBENDQ5NzNDOTVGREUyRUVGCi06MTAyNDAwMDAzMzM3QjQzRkRFM0FGRUQ1MjIyODFCREI5NTAwODYxQjBFCi06MTAyNDEwMDAzRTcwNkE0QkIxREUwMDdGNUExRTQ2REJDNDMwQkUzNUNCCi06MTAyNDIwMDA1QkMwN0ZCQ0Y4NTQyOUMyQUZERDNFMkM4MEY0N0VGQzNCCi06MTAyNDMwMDA2RTM3RTFGOUY4Q0FFQzY4MDY4Qzk3QjVGREIzNEQ2OUMzCi06MTAyNDQwMDBEMEZGRTVFODEwMENCMkM1RkRFQjY0M0YxQ0RDMjcwM0IwCi06MTAyNDUwMDBFOUU2MzgxQkNBNUE3MDFGMTQxRkMzNzE5NUZBQUM4MDg1Ci06MTAyNDYwMDAxMTQ4RjhEQkIzRjM3RDA2OEVBNzQ3MzMxOEVFN0JFQ0ZCCi06MTAyNDcwMDA5NzRDM0E5OUNGRThDODAxRTk3ODBFNTM5RDU4OThDNzEwCi06MTAyNDgwMDAzNDI3RTI3RjAxRDNBOTdDMURGMDlCNzQwNUNFOTc2RkEyCi06MTAyNDkwMDAxMDFEMDBERjYxRkM2RTdEQTE3RTEzRTFFMzQxNEUxRjQ0Ci06MTAyNEEwMDBFQzFFNjUxNzlFNTcxQzM3RUVDRDQ0M0VEQjlCNkU4RkFFCi06MTAyNEIwMDAzNzk4Q0YzNTIyREVFMDQxM0Y3RjRDOUZGQUY5RUIwODk5Ci06MTAyNEMwMDAxRTIxMjdDRTQzQUUzNEYwRkRFNEZDN0ExQUZEREY4MUY1Ci06MTAyNEQwMDBBNDI3RUI5MENGM0I0NDFDRjg5RTZDMUUzRjY5MEQ3MzA0Ci06MTAyNEUwMDBCOTkyRkMwNDg2Q0ZDMUZFMTdBQTI3NDA1RkVFMDhEQjM1Ci06MTAyNEYwMDBGREY4OUQ1ODNFMEY3REY5NDM5MjMzNEZGMjc1MzY4N0I0Ci06MTAyNTAwMDA5OTI5N0Y3RTFDRTY3NjgwOUE0NUYxMTQxMEM1RDdGMjkyCi06MTAyNTEwMDBGREM1OUZDRjI1RkQ2MTFDNUY3QjRDQTJGRDRBNTMxOTcxCi06MTAyNTIwMDBDOTIxMzc4QkM0MzgzMTE5NjIzRDZDQzMyMDdCQkZCREQ0Ci06MTAyNTMwMDA2N0VCNzc2MzkwQ0ZGRjQxOTFGRTEzNkM1NzcyMEEyOEM3Ci06MTAyNTQwMDAxNERBQjlBQjc4MUM3Q0I2NTc3QTQ5NTIxM0VEOEU2MDE5Ci06MTAyNTUwMDAxQzJBNTVEQzVGQzg1MTY4MTY3MzgwQkRCMjIzMEJGNjg4Ci06MTAyNTYwMDAwMEUzREI0QUEwMUZDQUVCQjcxQUI0QTM2OEMzMUQ2OTE2Ci06MTAyNTcwMDBBOEEwNjc5NzUyNEZGMkEzRUIzRTM5REEwODVENUY2RDcyCi06MTAyNTgwMDA2MDFEQTVBMzdBOEU1QkIzMjQ3OEY0ODQ0NTFFQ0QyRUZFCi06MTAyNTkwMDA3QkM0MDM0MjkxMzVFNUI3MUQ5MjMwNUVBRkI5NTUzNzI0Ci06MTAyNUEwMDBGNEVGQzg4Q0RDODNGMTdBRTM3NTk5RUQwMTc4MTdDRUVFCi06MTAyNUIwMDBBRjNDN0FDMjIyMUY5MkM3ODVGOTk4MDEyQ0ZCNTY5ODJFCi06MTAyNUMwMDBDNzMxNUYwQ0JBNjNEMzAwOUUxNTg2MTQ0NTc5QjBDMjNCCi06MTAyNUQwMDAzOEU2QzQ3OEU1RDJCNUNCOTgwRUZCRTQyQTNBQTZFMEZCCi06MTAyNUUwMDA3RTk2MDc3REI0Q0VEOTQ1MzIzMzJDNzBERDdGQURENkQzCi06MTAyNUYwMDAxMUU2RjE5RDM3Njg3RjAzNzEzQkVBNEQyQzA3OUQ1QTI4Ci06MTAyNjAwMDA5NkFGMjAxMTg3MzRDRjA1MUUwQkVGMjY3QkI0MjM5QjlBCi06MTAyNjEwMDBEMUZDMTEzRjhCMzZBMkZDRDI5NkI5QkFGMTlDQzUxRkYyCi06MTAyNjIwMDBBMUI4RTlFMUIwNEFGM0FFNkNERDQ1RjBBNDRGRjk5OEVBCi06MTAyNjMwMDBFMDAxREIzOUU2RThERjEzREYyNjFGQkMyRUYwREUyQ0RECi06MTAyNjQwMDBGMERFMUI5RTNGMDlGMzc4OUU1OTlFNURBNjY0MjI5RTk0Ci06MTAyNjUwMDBERjUwNTQzQUU3RTg4REJGRTc5NkRBRjdDN0VEQUZCMDQxCi06MTAyNjYwMDA5NTlCQjREQjFENDg0RjI3NUJFNTI4RUUxMzNDNUZDMTBCCi06MTAyNjcwMDA3RDNCMERGQkM2RjIxMkUzNzQ2NEIyMUFBQjdFMzZGN0YzCi06MTAyNjgwMDA2NzRBQTk0QzcwOTlGQkIzNzQzQkRGOUZBNURCODM4NDM5Ci06MTAyNjkwMDA5N0E1QTU5NUFFQzFGQzVDQUQxRDY4OUJFOTQ1Q0IxODFGCi06MTAyNkEwMDBFMkM1QTUxRDUzNTA4RUY1QjY1RkMwNkZFRTUyOEJGRDhGCi06MTAyNkIwMDA3ODExRjFGMzdFQTUxNkJCRjY5QjhFRUZDMzdDNDM2OUMwCi06MTAyNkMwMDBCRTI0M0JGQkFGNzVCRTYwRDI1MzI3Q0FENTgyODQ1QzYzCi06MTAyNkQwMDAyRDJCRTVGQTIwRjk2OUNBNTU4QjNENDk3MTREMEIxQzJDCi06MTAyNkUwMDBDQkVCMkUwMjBFOTM0RjkwNEY1MTZFODQ3NzRBQ0VFRTc1Ci06MTAyNkYwMDAwMkRDN0ZFMEQ3MzE2ODlGRkQ3NkYzNjUzOUM4Mzc4Q0ZGCi06MTAyNzAwMDBFOEMxNTFDQUY5QzYzNTY1OEUwQkZEQTY5NUY3N0RBQ0JCCi06MTAyNzEwMDBBMEJFMDI3QzRFMjc3QzBBMzkzQ0I2OTQ5OTdBNjgwNkEyCi06MTAyNzIwMDBEMTQ1MURBNzhCRkZFRTczMUQ4MDY3MDlDMUI5ODRDMzE2Ci06MTAyNzMwMDA3OUE5OUQzQjdEQTczQTUyNUY0QUU3NDAyMDk3QkMxODk0Ci06MTAyNzQwMDA4RkY3ODlGRDY3NDM3OURDRkJDMkNFMzczRjY4QkQ5REJCCi06MTAyNzUwMDBBMTFEMzhFNzBGOTkyQURBODE4QjhBRjc2ODc5NkFDQTRFCi06MTAyNzYwMDBGMzRENTVCMjlENkZENjg2MThGOTE1OEM4NTA2QjM3MzU3Ci06MTAyNzcwMDA5RTZGMjY5RjlGRjYzQ0VGMzQ1RTZBQ0E0OUQ4RERDOTNBCi06MTAyNzgwMDBFNzlEQzlFNzlBQUM5N0YzQ0Y5RUU3OUQyRjU2MTUwM0I3Ci06MTAyNzkwMDA5QzMzMDJCMjRGNTUxM0U3OTlBRTI5MjdERjY1RDdGNDcyCi06MTAyN0EwMDAzQ0VGRkMxMkQ2MjNGMDk5QzMyQ0VCRUQxQUFBQjZDNzY2Ci06MTAyN0IwMDAwMEJFOTZDMTlFNDAxQjZGQ0VFNDZCMTM3ODA0M0RFMEQzCi06MTAyN0MwMDA3MUMzM0M5QkNBMDA3RUI0OTdGM0RBN0UzMDhGRDlGMDk4Ci06MTAyN0QwMDBFODIyM0M1QzIwMUVFOTdDMUJGMUQyMkE0NTM3NjI3RjRGCi06MTAyN0UwMDBBNURFNDA3OUJFOTJGOUQ0RkIwMzg5RkQ4QzhGOTc3RkRCCi06MTAyN0YwMDA4Nzg2RjJGOTFGNkFCRENDMDFGQ0JGMzlFNzM2QjYwQ0ZCCi06MTAyODAwMDBEQUE3MUY0RTYzMzJCNDNGQUNERTQ2RkI3REY4QTM0QzIzCi06MTAyODEwMDAxNUNGN0JERDdFQ0IzRTA4NUMyQTI2N0M3MjRGM0ZFOURDCi06MTAyODIwMDBBRkIwOEYxRTY0QjkxRUZCQThCNjk1QTI5RTNEREZGRDFBCi06MTAyODMwMDA3QkE0Mzg3MjA0RjlEODAzRkE1QTE5OTc3OERGMzU5NEQzCi06MTAyODQwMDBFM0IzRkIyQTE2NkQ5MzdBRUUyM0UwNUIyM0JGMzM5RjNECi06MTAyODUwMDBFRERBNDhGNUY1MENFMzAzOUIyNEM2RjE5RDQ0MTc4RTkxCi06MTAyODYwMDA4QzBEMDY5RTZCQkI5NjdCQzk4RjZBQUFBRjI3N0NCRjc3Ci06MTAyODcwMDAwRUY4MzY3QzlDQkZGMDlDRUEyQ0ZDNjVEMjA1OTMwNkQyCi06MTAyODgwMDA5RDNGNUQyNEVGRkJFMUQ2NUFCNkY2RDJERUQ3NUVGODY3Ci06MTAyODkwMDA3Mzc3MjlEQTNERTdCQkFGNTU5M0I1N0U2NTEzQUNGQjgzCi06MTAyOEEwMDBBQzY1OTcwREI0RjJBRDIxRjI1MjBDREE0NzYzM0U2MzhBCi06MTAyOEIwMDA3QkIyN0JEQTUxOTc4QkJDMTQxODZGMzBGNjFGNTJDNjZGCi06MTAyOEMwMDA0NDFDNTAxQjgyRTU3OUMzNTk3REFBQkMxN0U3NzRFRUZFCi06MTAyOEQwMDBDNzJDMDExMzlDRTIyQTQ2M0FEQjMzMUVCREFDOURFRkE4Ci06MTAyOEUwMDAwRDQyQkZDRUI4NEFDNTMyNTMwRjQ1OTFBRTZBRjkxMkI4Ci06MTAyOEYwMDBEODkxMURCQkJBQjA3RTM2MkNENjkxNDNBRjU0ODcwNTE0Ci06MTAyOTAwMDAzRjgxQjIzQzFBQjc3OEY1QjE1NzU0QUEwRUQwRjgyRUQxCi06MTAyOTEwMDAxMEZFRThBNzJFQzE5Nzk0NEZDMkEyN0I0ODBFRTg2QzI4Ci06MTAyOTIwMDAyRUM4RkIxQkQ2NDhFRjYxQkIxQTIzODNBMTVGOUJDODRGCi06MTAyOTMwMDBBQjc4MzQyOUFGODI5NzY3RTc4QTdBRTNERkRBNkNFNzBFCi06MTAyOTQwMDA5OEM2MEI0OUZBRURBRDM2QUIzRkM1OEM2M0E0REY2QzdFCi06MTAyOTUwMDBGNjg1NDU5RjFENzlFOUY3Q0IwREVCMzlBNkYxMzE4RDUxCi06MTAyOTYwMDA3Rjc0ODkzOTVGRDE2RUZCMzlFNjk3MzRCRTE5QTc2NjRCCi06MTAyOTcwMDBFQzMzMkEyRjg5OTczRjI3RkQ2QUM2OTFGRjU0MzZCMTYxCi06MTAyOTgwMDA5NkM3NERGNUI5QjhGRjcyNThBQTQ3RkIwODE0OEMyNkI0Ci06MTAyOTkwMDA1MUJDQzZENzg2RkUzNEQ4RkZGM0IwRkU2RjdEOUQ2MDc0Ci06MTAyOUEwMDA4N0RDNUM2NjM5RkZGODVCODNGRkI4MTlERjM3MEUyRkQxCi06MTAyOUIwMDBENzBBMkU3RDc4MDFERjBGMTBCRTJCMzhCRUZGMDZFMDUwCi06MTAyOUMwMDBGRDU5NTk4QTczODA0QjA4QkU5NzA4QkVGODM5QzQ3RkY5Ci06MTAyOUQwMDAzQjNDNkY5NTU5RkNDRjZGN0FCRUM5OTNCNTEzNDg0RkY2Ci06MTAyOUUwMDBERkMwM0E0RTk1NTlGMjBGQ0VBM0ZEN0Y1MTdCNzE1RTQ5Ci06MTAyOUYwMDA5QTVDN0Y3M0I5OEZDN0IxQzQzOUYxREJGMTczQkNBQzlBCi06MTAyQTAwMDA1QTFDQUYzQjcxQUU0N0U3NUU4OTczQzRFMTU3MDQ0Nzc4Ci06MTAyQTEwMDA1QUUxMUZCRTFCREI5QkU3ODg1M0NCRjM2QTI5MkZCQTExCi06MTAyQTIwMDA5NzczNEMwREVCMTU2QjdGOTVGQUI3MjRDREU3MTJGNTM0Ci06MTAyQTMwMDBGM0NCQkY1NTZCRDhGMDczMzVCNUVGNDg2QTVGMjNENjNCCi06MTAyQTQwMDBCN0JDN0NEQzZFQzM4MjBGRjAzOEE5N0Q1QzJFQjE4OUU3Ci06MTAyQTUwMDBCNUY2NzNDNzA5QjVENjczQzdENUU1MTM3NzlCRTdGRkZFCi06MTAyQTYwMDBFNTg4MUY3MTRFRkIzRjFEMUZDMTcyRTE2RjhBRjM3MjMzCi06MTAyQTcwMDA5MzBFODc0REQyNDJFNTEzMkUzRDc4NjFGRjE2OTY1QjhCCi06MTAyQTgwMDBFOEZGQUYzMERGOEE3MjRCREVDNTg1RjY4RkYzQTNEMDQ3Ci06MTAyQTkwMDBGQjY2RkUwNEUwRjcxNjVDQzdDREQzNTVDMjdGNzJCRTVECi06MTAyQUEwMDA4NEU5Mjc0NkJBNTkxNEZEOTZDOTJDMkFFM0I5NDQyNDZGCi06MTAyQUIwMDBBMDMzOEM4M0M2RjlEQUQwNkEyOTVFMTdCRjFGNTFCMUUzCi06MTAyQUMwMDBEQjdFM0ZBMjcxMzdEQTE3MDlGREZENTRBRDNEQ0ZBMTgyCi06MTAyQUQwMDBEQzA2Rjc4RTk3OUYzMkQ3REQ1NDZFQzk2N0U4RUJGMUJECi06MTAyQUUwMDA1NzRGQjdFMzI1NUUxNkY4NTk3Q0NCOEY4N0RBRUY1RjM3Ci06MTAyQUYwMDA0NDc2RDMzOTQ2RkNGRUM1MjI5QTM3OTFERkYxRUREREVECi06MTAyQjAwMDBGNkZDOEUzNTU0NEVFQzU3NDNEMjdFN0RDRjA2RDcxNzU4Ci06MTAyQjEwMDBFNTBEMDQ5NzRCRTRCREI5NTY0OEJERENBRkI4OUVFNDYzCi06MTAyQjIwMDA4Mjc5QUUwQjY1OUI1Q0EwRjIzNzAwRDc0MTkzOEUwNDhGCi06MTAyQjMwMDA5RkM2RTFFQzkxOUZCNzZDMzdDNjk5RkE3QTdFOEI1Q0ExCi06MTAyQjQwMDA3ODA5RTlBMkVGRjFDRUVGNzc5ODc4RUZFRDdFQzdGNTNGCi06MTAyQjUwMDBBQTU5RkU2RTZENURDMUQ3OUYxN0YzRkZDQTUzRTYxRkRBCi06MTAyQjYwMDA1REVDM0FGODdEMTE1N0YyN0QxMUI2QUVENjJFN0ZDRUQwCi06MTAyQjcwMDAxQkJFRDNBOUU1Q0ZGOUY1RkZCMjc3RjlGMzE3OTQzRjYwCi06MTAyQjgwMDA0RDVFMDdERDQ3RDFGRDJDRTU3RDk0OUJBN0YzNzNBOTJFCi06MTAyQjkwMDAzODdGOEFGQjI4RjM3NkE0RjZBN0ZGN0UzQThGNUY5QkU3Ci06MTAyQkEwMDBGMUVFQTBFQkQ0MEFFQjc5RDcwMDUxRUY5QjFFQ0YxQkJGCi06MTAyQkIwMDBGMDREQzc3MUQ3NzJGODg2QTEzQ0M0RjMxRUE2MzAwRDQ0Ci06MTAyQkMwMDA3ODZBRkVCQ0ExQjkwODVGRDM3RkYyRjE5ODFGRkNFNERDCi06MTAyQkQwMDBDQ0M0Nzg5M0M1NzhFNjNDMkZDQ0M5QUNCMUU2MzVFNERCCi06MTAyQkUwMDA5QUYzNEM5N0NDRjhGNEIwRTk4OENGMEQ3QzFENzJCRkY2Ci06MTAyQkYwMDBENTc0Q0YyQkVFNTcxQkFEMjRCRjlBOURBNjlGRkRFMDQ5Ci06MTAyQzAwMDA2RTkyNjc3MTM5RjQ2M0EyOEIwNTZFOTNGRUEzQkJBRDIwCi06MTAyQzEwMDA3MUUzQjI1RkVDRTY3QTE1OEE3ODhFOTdFODc3NUYyRERDCi06MTAyQzIwMDBGOTc5RTdFODU3NjhFMjc5OTNEODJGMjNCRTVGRTMxMTdCCi06MTAyQzMwMDBFRTczRjVCN0Y4RDEzMTI5MjdFMTQ3M0Y1RUE4NEQ0MTQyCi06MTAyQzQwMDAzQzgzM0Y1RDcyM0VFMzAwOUVDMkI0MkY2QkVDRkU4ODc2Ci06MTAyQzUwMDBBNTdFRkE3NDVCNUVEMkE5RDU2N0NCNEI5QTNCRkRFQzlGCi06MTAyQzYwMDA3OTQ5NzMxM0Y0MzA3N0JBQ0RBRTBGNjc0RUMwMzhDOUM3Ci06MTAyQzcwMDA2MDQ3Q0E3QjE0QkFEOEQ3NDQ3RUQ3NEY2OUJGOUE0REY0Ci06MTAyQzgwMDBCRTEzRTU3QkIyNzlGRDBEQkY3OEJDNTZDMDdGRTM3NEZGCi06MTAyQzkwMDBDQkY5ODU3OURFQzIwQTBFQzUzMENFNjNDOTJGRDIxQ0FFCi06MTAyQ0EwMDBENkI4NEZGODk4MTNDNzVCQkE1RDRBOTkzRkQzODM1Rjk0Ci06MTAyQ0IwMDBCNjhBRjFCN0M3RjdGMUU2RTkzQzFFQUQ2M0RDRjE3QUZECi06MTAyQ0MwMDA3M0RDNkYzN0QyQjgzNTJCRjhCOEM5N0M3M0E3ODg1MzNCCi06MTAyQ0QwMDBERDk5QTBFMzNCNjkxQzJEOUU2RkIzMEVDQjk4MzJFMENCCi06MTAyQ0UwMDAxRTk3MThERkJDREYxMzc0NDY5RUMzNzM5RDY2NDM1MjY0Ci06MTAyQ0YwMDA1MUJFRUE2Qjk3RDFCOTIyQUI2MDZDMTRFQzUzNzBGMDAzCi06MTAyRDAwMDA4OEVEMjgzQUNDRjk4NjU3RjBGRDgyNUY0QkIxOUQxRkM0Ci06MTAyRDEwMDAyNEE0MzExOEYzQzQ5N0QxQjlGM0I1MUFDRjVCOTk1OEVECi06MTAyRDIwMDBENTI4MEY1NDI5QUZBNTA1RjdBRDc4RkVBRTI2NUNGNjgxCi06MTAyRDMwMDA3NTRCN0UyNkE3Q0E2N0U5ODhFN0IzQjAzNzQ2MEUwMjBGCi06MTAyRDQwMDBGRTE2RjBFMUJEOTAzNTMwQ0ZEQkYxN0M5NkFBQjIzQkE4Ci06MTAyRDUwMDBBQ0Y5MkM5MUFGOTdDRjYyQzZGRjE2ODcwMEFGOTY3RDc2Ci06MTAyRDYwMDBDQkFFRTA3OENEQUVFMDc4NEQ5QzAzMzMzQUJGMURDREJECi06MTAyRDcwMDA2QTY2NUM4NUYxNjVCQ0I3MDVBRjNCQzQzREI3MzNCOTQ2Ci06MTAyRDgwMDAyQzhBRTdGRjhENTNEMzI5OEVENzlEQ0RFODVDMTUzNjZECi06MTAyRDkwMDAyNEFCRkE1QUNDMjNFMTNGNjlBMzRBMjk4RUVCODY3NTBFCi06MTAyREEwMDBFMTNBRjA1QzM2NzYyNTBDMkYyRkU5MTc0QjQxQ0ZBRjc3Ci06MTAyREIwMDA2NkU5MkNFMEM1QjhCRkIxOTkwMUREODRGNTdCRTk3Q0ZCCi06MTAyREMwMDA2RUY4OEE4RkVCNzBERUE1QkE1QjQ1MTJCOEJFQ0U1NzlGCi06MTAyREQwMDA0Njc5NUNBQjAzQ0UzQjMwMEVFOTk3OTk4NkYxRUMyQTNECi06MTAyREUwMDBFN0ZCRkM5Q0M2NDM3ODlBNURDQUNCMjY1RURDNEM3OTM3Ci06MTAyREYwMDBERjhBMTcyNUE5QkNGNkREQzYyRDA3MkRFRDVEQjFCNDIwCi06MTAyRTAwMDA0QzNDMTc3QzY5QkFDODA3MTJGNzhBOThFQzI1M0EzODA3Ci06MTAyRTEwMDBFMzc3NDRGMTFDQUE0MzYxMDcxNDgwQTM1Njk3RTlGQ0E5Ci06MTAyRTIwMDA3RENGRjY1QjVGQzFGQjYzNEJGRDRBQzAwMUVCMENBRjhFCi06MTAyRTMwMDA5NTI4RkZFQjdBMUZDN0QzNjcwREM2OTY4MzYwQzNBNjlDCi06MTAyRTQwMDAwRDFFNDFFNzMwNjc3QzFFOEFDNjM3MkZEOTQzNzE3QjQwCi06MTAyRTUwMDBBMDk3MEUwNUYzN0FENkM5MENDRkJEQ0RGQ0E3Mzk4MjU5Ci06MTAyRTYwMDA1RTRDM0NBNjJERkI5NEYwNzIwNkNGQzMxMTJGNDVEOUMyCi06MTAyRTcwMDA5NDA3MzUwQkYwQTFGQUU4OUM3RjEzRTIyOTlERDVDNzkyCi06MTAyRTgwMDAwNkMwQkMwQkZEMEUxNkIzQzRBMTYxRkRCNjNDMzIxOEUyCi06MTAyRTkwMDA5QkYyQ0UxNDdBNjNBQjI3RkNBNEFGMEJGMzdDMzRCOTVFCi06MTAyRUEwMDAyQTg2RkI3QUE2ODhFRjJCOTQwMzQ4RUZBQzk0RDNBOTJCCi06MTAyRUIwMDA4OUZGRjQyNDNBNzUyN0U1ODcyNUQzNjkzMkZFNEYyMzJECi06MTAyRUMwMDBERTJERjdCOUY2MjgyQzEwNDM3QUVCOTRDOUJFRTg2RUQ0Ci06MTAyRUQwMDA1NUIyMjhFRkFBRDU0MTc5NTc4QzQ1RTkxRUQzMUVENkE1Ci06MTAyRUUwMDAzRkQwODI3MjMzMjZEMTM5QzE3NTAyNkYyNkRFMTlBQjBECi06MTAyRUYwMDBERkJDMUNFM0RDRjU1OTAxOENGRjMzNDdGRDY2Q0M4RjRBCi06MTAyRjAwMDBCQTNFOUE0MUY5Nzc4QjU4M0JFNTQxREQ4MDFFMzJDQ0MxCi06MTAyRjEwMDA3QjIzRjNCOUIwQkM5QzA1RTgyOUIxMDJCQTVGQjI1MDdCCi06MTAyRjIwMDA5Nzg4MkY3NDE2QUJCRTBBRjAxN0JCREM5OTZEQ0RBQjNBCi06MTAyRjMwMDBFQTM1QUYwOTU2N0VEMjcyMUVEMUJGNDJDODRCOEZFRTIyCi06MTAyRjQwMDBFNzc5OUVCQUI4RjdBMzUxN0U1MDc2NTlBOTQ3NEYyMTI5Ci06MTAyRjUwMDA2RkE3MTVFQjgzMkIwNjI2Q0E4QUFGOUVEMUY5NzQ3MTMxCi06MTAyRjYwMDA2NDQ4QzU4NDQ0RkY0NzBCQjU1QzZDMzdBRTQ4MUI4QTg4Ci06MTAyRjcwMDBDRkJENjhFNzgxM0UwODFGMUFGNTA4RUE4M0M2NDI0REI3Ci06MTAyRjgwMDBDNUY2QzlGMkVBNzhFRkY5NzdCMUI1NDA3NzVEMjhBRkI5Ci06MTAyRjkwMDAyODhGQjA4MEY4QjBBRkYyRUYwQTJCN0FFNERGNERBOEFCCi06MTAyRkEwMDBCMEU0REYxRDc1RjI3QjY1OTQ4QjNDOTlGNUJDOUZCNjUwCi06MTAyRkIwMDBGNjNBQUEzN0VGQTcyNURGNEI2MzBGRjIzMjJDQzg2ODI5Ci06MTAyRkMwMDAxOThCRjc3N0VCNjlERDI2REU5M0YxQzNDNEJEQjRDNTc5Ci06MTAyRkQwMDBGRTk3QkJBNDZCRkEyMDZGQ0QwN0M2RERFMEIzRDE4N0E3Ci06MTAyRkUwMDBDMUVGMkY1N0RGREE5NTQzNzk4NDBBRTUxMTM2RTdGMTBGCi06MTAyRkYwMDBGQkNCOUJCMDA5MjYwMjhERTRGNkUwOTc0MjVGNkRDOURBCi06MTAzMDAwMDBBRUY3MDdBMDdFOEI5M0U3QzNCMDdDOURDRDFCOTMxOEQyCi06MTAzMDEwMDBGN0NCMEFEOTNDMTc1QThBNzQwMDc2MUZEOTRCQTZCRDQ0Ci06MTAzMDIwMDA2QUI2QUIxNTdBNjE5NUQwMEI4RjE3NDY1NjEyRkUxMzEwCi06MTAzMDMwMDBGOUREQUJCMDNGRjNDNkEyMEVGM0RDOEVGRkQwMzk5MEMyCi06MTAzMDQwMDA2OTNGMUMxOTUyNEZGOTM0NkUyREI1QkQ3MDZCNDU1QzRDCi06MTAzMDUwMDA5RkRGNEFFM0I3OUFGQTVDQkIwRENCRDMwNkY4RTYyM0IxCi06MTAzMDYwMDA5RkI5QzIzMjZCNDMzRDM2RkI2NjkyQkI0RjYxREUyODhGCi06MTAzMDcwMDBEODM0MTNGNUM2RjAyMEQ4RUY4NjBBNzFERTU0OTc4RDQ4Ci06MTAzMDgwMDBFODYyMUQxQUNGMjc4RDk1RDRGQjUxREY2RDE5OUNGQThDCi06MTAzMDkwMDBERUY3NjFCMUNFRjFDMzRFQzkzOEVFOTY2NThDNkQxQzdBCi06MTAzMEEwMDA4QkY4MzMyODhGQ0Q1ODAwQjIwNENBRTBFRTFGQzQ3M0VBCi06MTAzMEIwMDAxOTBGREEwMUM1QTgxNzc5N0I1RjFEQjQ4MTdENkMxN0U0Ci06MTAzMEMwMDBGODBGOEUwNkZBNDFGQjZCOTQzRDFGQzk3QzlBRUQ5Mjc2Ci06MTAzMEQwMDBGM0FENDA5NDY3RTJCQTkzRjNEQ0NDN0NBQjJFQzVDODY5Ci06MTAzMEUwMDAwQ0E0ODA3Rjc2RDkxQTBGRTU2QkU1MkVGN0EwOUU2Q0I1Ci06MTAzMEYwMDBENkMyMzQ1RTcyREVEQjk2NUMzNjE0RTE0QUNFNkIzM0E4Ci06MTAzMTAwMDBGM0E2Q0M3QzI5NzNEQzdGQUFCMEU3QjVCOUZENUM2RjcwCi06MTAzMTEwMDBDMTkzRjI2NDdFNUFBMUYyRUY1MjY4RjZGQzM2MzNCRkQ3Ci06MTAzMTIwMDAwNkRCNTM3RTREMkVFM0Y5MzVGRTdBODZGRERDNTBDNjc0Ci06MTAzMTMwMDBGNjExOTE3Rjk2OUM1NzA1NzJFODY3NDQ1NzNERUMyMzQyCi06MTAzMTQwMDA0Njc2NDY3M0IxQzgxQjYwREFFNjY1NjgxRkUxRjk2RDIzCi06MTAzMTUwMDAyMDg1N0QwNTAyMDFGNUEwMEJGNDEzRDYyQkYyRUEwQUI3Ci06MTAzMTYwMDA0Q0U1RjlCQTc2RDRCNEUyQzhDQjQ4OTcyRTdGNUNDRTUyCi06MTAzMTcwMDAxRTIyNzgxMzcyRjY5NzU4MEY3MkY2NTc1NjM5N0JFNjZGCi06MTAzMTgwMDA5MEYxMDhFNjZGNkU5MTM4MUQ2RTAxQkMzRjkxODIzRTUyCi06MTAzMTkwMDA4RTU0NDg4MjhGNTNEM0NGMUYwNEJEMzYxNjQ2REVDMkVECi06MTAzMUEwMDA3OUI0MUM3RUJGRTM0MkVEQ0NFNjg0OURDOUYxRDg0N0RCCi06MTAzMUIwMDA3NjI2RTBFMzc3ODQwRjIxQTcwMTFGQkY0NzM4OTNGMUZDCi06MTAzMUMwMDAwMDNGOUI1MDZFNThGMjRDM0ZDNTdFQkRFNTk5MjZGN0Y3Ci06MTAzMUQwMDBCRkQ4N0JDMjEyQzgwREZFMUQwOUVEMkYwODU3RDU0NDdDCi06MTAzMUUwMDA5NUVCNUQyMThGMTNGNzZEMkY0RTVFNzczQTQwOEUwMjdGCi06MTAzMUYwMDAzQzY4MTM1OERCRkIyQUI5OUMyQjk4QUNGQjJBNDkyRjVGCi06MTAzMjAwMDBGM0ZCQkVEQjgyRkNCRTJGOEI2OUE0Rjc4RjY0RUEzNTJCCi06MTAzMjEwMDBDOEE3MkM3RkRDMzlFNjZCMTRGOUI0N0E1RDg0RTRGQzMyCi06MTAzMjIwMDBEQzczQjRERjQ4RUQwQjI2OEJGNUU2RjcyN0ZEQjE0REQ3Ci06MTAzMjMwMDBEMkVFNEI5NzEzRTU3M0FEQ0Y1M0E5OERBQTQ0N0Y1M0JDCi06MTAzMjQwMDA4RkQwRjcxMkI2RTQzQjU0MDM5Njc2Q0Y0NEZENUJCOEJCCi06MTAzMjUwMDBBRTJERjkxQjY5RkY1QTgwRTAyNDkwOUJCMzFDQTdFRUFBCi06MTAzMjYwMDAxRTIxNTEzRUYwRDM1MjNGNzg3QUMwNjM0QjQxRDc0NTdGCi06MTAzMjcwMDAwMjNGNjBDNTUyM0Q3QjU3RjM1QkUzMUNCNTk1RjFCODQ3Ci06MTAzMjgwMDA4QTg4NEJGQ0YzMjNENjdCNEM3MzJCN0ZCMjAyRTNGMThECi06MTAzMjkwMDBBNjFFQzM3OEM5MTMyOUU4MjIyNEM2OTFEREI3REFGNDQzCi06MTAzMkEwMDA2NDcyQkJEMjRBN0UwRjY0NUVBNTM4MUYxMDdBNkY4MUFDCi06MTAzMkIwMDA5QkZCNTFFQzMwQzA2N0QxQUIwNTkzNDMxNTk1NUM2RTE5Ci06MTAzMkMwMDAxOTkyNDUxRjlBRkE4RjZBMkNFRkREN0U3RUZGODQ3NTc2Ci06MTAzMkQwMDBEQUM3MzFEN0I5NDJEMEE5MzkyRkQwRUJGQzRBMUVCRjhCCi06MTAzMkUwMDA1ODUwNjlBOTVGMjAzMzFFRUZFOEIwRTMwQkUwNTk0NDYyCi06MTAzMkYwMDBGMDMwNzZBMjE3NzgxRTQ5MDk0Rjk3MUQ5RTE1NzFCQUI2Ci06MTAzMzAwMDBENTU2RTA3OEEwOTc1N0UyNzM2QjA4RTgyRTA1N0VDNzg0Ci06MTAzMzEwMDA0QzA4REQ4NEY1MEEzM0I2OEVDODNCQUJERDVBOEZFQjIzCi06MTAzMzIwMDAzMENCMTZCQkY1QjY0QUJCM0NCREJEOTJDQkQzMzU5NTcxCi06MTAzMzMwMDAyNDQ3NTJDRkRCNTBDOUU1NjI5RjdEM0ZFMDNDRjlGRDU5Ci06MTAzMzQwMDAyRUZDMzUwNURGQjQ3NDNGOTk3MTBEQjA5QURCNkREQzRFCi06MTAzMzUwMDA0RUZDNTkzMEVFMUNGQ0M1RjlGOUM2NjFGNUE0RTc5RTk4Ci06MTAzMzYwMDAxMzc2Qzg3MzRFQTY2MDdFMERGMDU4MjA1NURFNEZBQzI0Ci06MTAzMzcwMDBEMkI0M0JBMjQzMTAyRkNGRjQ2Mjc3QzREQkY1OTI1RjQ3Ci06MTAzMzgwMDA3RjI1REI5OTcxMzFGNjQ3Q0I5NDIzMTk2NDdGOUM2RUJFCi06MTAzMzkwMDBDQjQwM0RGRkNDODk1MDRBRkJFM0I5REM5RDQzNTJEOTc5Ci06MTAzM0EwMDAxRkZCN0FCMTNGOUVBRTE0RjZDNzA3MkVCMjI3NEEzRUU2Ci06MTAzM0IwMDBFNEY2NDdDOTg3M0I2NUI0MjNGRUJENTJBNUY1MTQ5RkNCCi06MTAzM0MwMDBFODkwNzU4MEJCMDRFRDBGMTg2NzlGQjAzRkIwM0REOTAyCi06MTAzM0QwMDAxRkE3NzdDQTA4NTdGMTg3MURENEFGMDRDQTY4N0YxNEE2Ci06MTAzM0UwMDBGNzYyN0YwMDE0MzJFMkUxRTk5Mjk2Mzc3MUZGOTJEN0RCCi06MTAzM0YwMDA1QjM1NUVGRjg1OTU2RThCQkEzQjI4Q0U2M0Y2NkJDOTU1Ci06MTAzNDAwMDBERjk4QTFEMzdFREJFOTY3NUEzMTk3QkI4OTdFOUNERUNBCi06MTAzNDEwMDA5M0RCRjU0NjY3NjU3MkQ1RDY2RTU4RDczNjk2Qjk5MzY1Ci06MTAzNDIwMDBGMjMyOTVGQTg3QjE2QzE4MEFFNTZCRTEwNzM2OTA2RUI3Ci06MTAzNDMwMDBFRTlDMEQzMDY0NjNCQkZBNDdCQjUxQkYxODZFMUY3RTE0Ci06MTAzNDQwMDBERkUwQjNGNEE1RENERjU5QzM3Q0NFQzkwOTc5NDQ0Qjc2Ci06MTAzNDUwMDAwN0QwOEM5MDE4Q0ZFNUYxMzU4MUJERjRBMzhDMkNDMjM4Ci06MTAzNDYwMDBFMzVBOUYxOUQ3RDk1OTMxMDJGQURGNzlFNTQ4QkFGRkYzCi06MTAzNDcwMDAxM0JBMTcwNjgyRjJFNDRFOTlFQUNEMzhEMDJCODMxOTlECi06MTAzNDgwMDBFNUU5MDNGRkNFQUE4NkYxMjc4QUYxNDFERjY5Qjc0MzU4Ci06MTAzNDkwMDBGQjA1QzIxRTJCOTdCREQ0RkVBRTdDREU3RUIyNzFBQUE4Ci06MTAzNEEwMDAwRUNCQzVERDJFMTVFRjk5MzE3OTgzN0MwQkM2NkZEMTFDCi06MTAzNEIwMDAyRTgxRjY3NzNEMUIyOUYzNDA3REZBMTE4MDA0Qzc3QkVFCi06MTAzNEMwMDBENzQ1NzEwQzBERkUyMUZGNEVFODZDMjc3QzY2OUM3MDgxCi06MTAzNEQwMDBEOUUyMUJFOTIwRTE2MjE2RkJDNTk1NTQ2NkYyOTI3RUEzCi06MTAzNEUwMDBBOUU0OTNGOUVDMTEwRjlBMjFFMjExRDdCMEJGRkIwQUJFCi06MTAzNEYwMDBFQ0FEMzM2Q0MzNTY1Q0EzN0I1NEU4QzVEREFDNjc3RjkxCi06MTAzNTAwMDAzM0RFRjBGQkYxOUE3NzA2RUNFMzQ4QTc0RUZFQ0JCRTI0Ci06MTAzNTEwMDAwQUMwMzVFQ0QzQkVENkQ2OTlENzIwREU3NzJBMTRERjgxCi06MTAzNTIwMDAzREJBM0U4M0Y2NjlGRkJEQ0EyRThDMkIxRDA1M0VFNUQ0Ci06MTAzNTMwMDBGMUYzQjUyQjkxNUVGNzY3OUE2NTE2QzNGOERDRkVGOEQ4Ci06MTAzNTQwMDBGNzBBMDdGMDdBNTE1NjY3MDQzRTQwREY3OEZGNDBEMTEyCi06MTAzNTUwMDBERTY4RTVGNTY2OTlEREI1MTJGMzM3RjYwRkU2RTUxOTk1Ci06MTAzNTYwMDAzMzdFQkEwN0RCNjNDNjM3RjlENzZCOEY3QjUzQzlDRjdFCi06MTAzNTcwMDA1MTMzNTVEQjNEOEY1OTQ1Qjc3MjNBM0U0NzNGOTBGNzdGCi06MTAzNTgwMDBEN0NDMThEOEIzNUY1QTM1RjdCM0Y2MkYwMTEwQzcyMjNFCi06MTAzNTkwMDA5RUY0QzIxOTMwRkVCRUFFREJCNjhFODFBOUM2NEY1OTZECi06MTAzNUEwMDBERjQxNzI3NDQwRjc5QTU0NzIzRjM0ODNEQkNCQjE5MjlGCi06MTAzNUIwMDAyOEY5NURFMENCNzNCRjk3MjkwNzMxOEY3NTE2NTNDNzg0Ci06MTAzNUMwMDBBMTdGQkY2M0VBMzNGRjcxMERDQ0YzNkFGMUE4NzE3MjdBCi06MTAzNUQwMDAwQUJFQkU2MUM2ODhBNDc1QkQyRTJGNDdCOUY0RDFGQkMzCi06MTAzNUUwMDBGMzUzQzk4MUU2NEFCREMyQkUxRTdFNEVEQUI0NTMyMUYyCi06MTAzNUYwMDBGQ0Q3RkRDNzI3OEY2MEZFNDNBQzY0MjdDNUYxRjZGREZECi06MTAzNjAwMDBDMUMxRDA2RkQ5Mzc4NkRCRkY3ODUzNEZDRUU5MTNGOEFECi06MTAzNjEwMDA1QTI3QTZBMDNCODA2RjQ5MkFGODQ2Q0Y2NDNDNEY3NEQ2Ci06MTAzNjIwMDBCQ0I2MTRFQjkzRTE1NTMxREUwREYwODI5OTE1NDAzOUFCCi06MTAzNjMwMDA5MkY2REJFRjc3NjA1QzczNUZCNzgzODIyQjY3NEVCNEUzCi06MTAzNjQwMDBDOTQ4ODIyRDVEMjM0QUQxNkM5RDU2NzU0QzQ2OTIyQUZECi06MTAzNjUwMDBGMUREQkIxOThGODBGNTBEQjI4REZGMjY3NkE1REJDQTkzCi06MTAzNjYwMDAzN0Q0MEZCMDk1MTdENzBENDlGMDIzQzNGQjQwNTdEODc3Ci06MTAzNjcwMDBDQTZFRkZENUI2NzI5MDE1REFDQUYzQUIyNkRCQzYyQjNECi06MTAzNjgwMDBGMzg1NkRFNUU5RkU5OUI2RjY5NUVBM0M1Qjc5NjZGRTUxCi06MTAzNjkwMDA2MjVCRkJFQTQwQURBRDNFNTIzMDU2QzFBQjdDNDA5NzE5Ci06MTAzNkEwMDBDRDg4QUY4QzRFOERGODdDNEJENzZEM0VBNDhCNTg0OTlFCi06MTAzNkIwMDA4NEZDRUEyMzk5MURCOTE4Qjc3RUE1OTdFRkNCNzVDQzhBCi06MTAzNkMwMDA5MDg1N0UwN0QzMDhFNTI0RThGMzhERDk4OUY2QzExMUVBCi06MTAzNkQwMDBEREI2QjhGQ0NGNjc3MDdERkQ4NEEwRUY3M0RGODdFM0I0Ci06MTAzNkUwMDBGQUY5N0NFRkMxMjVFQkUxRDk1N0RENDY3MkE5NjVCRTM5Ci06MTAzNkYwMDAxQ0M1N0I1NTRERjk2Rjc4RjFGRUQ4MkJGMzc5M0NBMUIxCi06MTAzNzAwMDAyNTE3RDZFOUE1QkMwQ0UyQUYxNzE3NUMzNzE0Q0ZENzQ1Ci06MTAzNzEwMDBEMkYzRjUwMTI4RkY0REZEMURDRThGQjJFMzUwOUZFRTkxCi06MTAzNzIwMDA4QkIyMkJGMDlFMTk5NDZCQzU3REIzNzAwMTdGM0Y1QTBECi06MTAzNzMwMDBCQzVGODU0RkQwREJFNTE2N0MyNUVCRTNBMDY3RUM0QjQ3Ci06MTAzNzQwMDBFMDM2QjBBOTdGRjJEMTc3RkNFNjE3RjBCODRGRTlFOThGCi06MTAzNzUwMDA2ODI5REVBQjlFQTlCRDcwOTA1RjlGRTZGMkU3RDU5MjI3Ci06MTAzNzYwMDBERkU1RjRBMkI3RkZERENFMEZBRjEzM0ZFQzNCMzFGNzNGCi06MTAzNzcwMDBBQ0YyRkYzNzBEM0NDRUZFNTQ4Mzg3QzU2MDdERUYzNjNCCi06MTAzNzgwMDBGOEU4Rjk5RjBEN0U3QUZGN0E4MzRBQ0ZFNjg2N0M3QTQ1Ci06MTAzNzkwMDBDNjFBMDI1NEZGNjY0MzExM0QwRjM2NjhGNDdDQjlBMTg2Ci06MTAzN0EwMDA4MjlFODcxQTIyRDRFRTU3MEQzNUY0M0NEQ0EwRDNGQjYxCi06MTAzN0IwMDBGNzY3NzBCRUJDNTRFMEQxRjJDREI4NDJFNDQ1ODc0NDBGCi06MTAzN0MwMDA3ODlEOEYyOUJCOTMzRUQ0NjRBQjdDMDdCQ0ZFNzZDNjQ0Ci06MTAzN0QwMDA4NDlFNzhCRDU4M0QxMjJCNjkxRjEyRTE3QTJCMjUxRjVDCi06MTAzN0UwMDAzOTY3OUFGNzZFQjk5RDNDNEIyNzk5MUY4N0NGODU3MTMyCi06MTAzN0YwMDBCQTlDNDQ5Q0NFOEQyNjREN0Y4MkYzMkY3RDA5RTc3RUI3Ci06MTAzODAwMDAxMUM3RDk5RkNENkE5RUUwRkVENDI2ODlGNDhENkYyQzE2Ci06MTAzODEwMDA5N0U3Rjc0NzQyMjRDRjA3OEU0RDJEQ0ZGMzdBQzhGM0IxCi06MTAzODIwMDA2NUE0QjdEODIxOEM5RjYyN0ExMTBBRTM5NTM4N0ZFQUE0Ci06MTAzODMwMDBCODg4RDEyRkVGQUM3OEEwNzM0QjEzMEY5NkZEMUEzRUNBCi06MTAzODQwMDAzMzA1MUY5QzBCMEZDOUVCOUY1NkFDOEQ5RTM5ODFERjUyCi06MTAzODUwMDA0NzcxRjZFRkE5NDc0Njc3N0ZBMTYxNkNFQUU5MDIwRTRFCi06MTAzODYwMDBFRjhFRjdFN0Y2NDM3QkM1OEQ0MTI5RjJERkMxNzAyQjYwCi06MTAzODcwMDBDMkZENjY2NjVFQzE5RUJBREM5RUUzRkNBNkE0OURGNDEyCi06MTAzODgwMDBGQTVENzEzQkU3MDFCMjYzOTJEQkMxQ0Y0MUMyMDNFQTRCCi06MTAzODkwMDAyRDBCMUU1MkM4ODE2OTMzNTNEMDQxOTlGQzZDRjc0NkY5Ci06MTAzOEEwMDBFOEJGQkY5QjUxREM0QzQ1OUIxQUUwN0Y0NkUxREY2QkQ0Ci06MTAzOEIwMDBEOEZGQTE4M0YwN0NDNjIzOTE3Qzc0QUZCQkREODMzMTNDCi06MTAzOEMwMDBFRUE3QkZDN0RCMTlENTEyREQ2M0M4MzhCMDRGNDUzQjQzCi06MTAzOEQwMDAzNUQ4QUQwRkMwRUY4RTE1QzUyQTlERjg5REQwRDA5NDc4Ci06MTAzOEUwMDBCMTgxMzQwQjFEODQxNEJCOUU0NDRCMzVBRTc3MjgyODIwCi06MTAzOEYwMDBENjNGQTk3Qzc5QTJCRDhDRkIzRjIyNTFDRUEzRkJENzNBCi06MTAzOTAwMDA4QjcwNUQ3MzRGRDUzM0I1NDBDNDU5QkQyOUYxQjQ1QTlFCi06MTAzOTEwMDBCMkM0REQxNDE2RDgzQTMxOEZFQ0NFODM5N0UzRjlDRERCCi06MTAzOTIwMDAyODE2OTU4OUFFMENGMkJGNEQ3ODY1NkY4NEVFRTc5OTQ1Ci06MTAzOTMwMDA3RUZBRTc5MkI2MEFFN0VCMzE3RTlENDZFNzZGQ0NFMTZGCi06MTAzOTQwMDBBMEYzQjdGNTg1RkEyRDMzRTk5QzNFRTk3Q0M2RjdGMjgyCi06MTAzOTUwMDA5RjI1RDA2OTVCMUQyQzg2RjY4NTkxRTUyMkZDMjVFRjFECi06MTAzOTYwMDBEN0I4QTJDQURCQjFCRkZGNkJGQkY1M0IyNUVCRjcwMjczCi06MTAzOTcwMDA0NkFCRDNDODlGM0EwM0ZFMTRERTQ3Njk1MkY4M0QyOThGCi06MTAzOTgwMDBFM0REQ0NFODFFMDI5MkU1QTNERDc2QTc3Qzc1MDBGN0E3Ci06MTAzOTkwMDBGRjQ3MTlGRjQ4RkVEMTVBNTgyNEZBNUZEQjg1MUNCRTQ5Ci06MTAzOUEwMDAwN0U1MzAzQ0I3M0JCOUJGRDVEQ0U4RjZCNUU1QTBCRkNECi06MTAzOUIwMDA5NTY1Mzg0MDcxN0Q5NjM2MkNDQTYwOURBRDMzQjkzRTExCi06MTAzOUMwMDA3N0IzMUJGQTQ1QzY5QzA1N0VFMTlGMzhFM0ZCOUVFQjZGCi06MTAzOUQwMDAyMzdGNDM5NEJEMkVEREYxMDlGQTc1NDdFNDI4QzZERDQ3Ci06MTAzOUUwMDBCNjhEN0RCMDY2MzlFMjZGQUM4NzlGN0YyQTMxNzUwRTQ4Ci06MTAzOUYwMDAxQTY4M0U4M0U1NThFRUYxQ0I0QzM5ODk3MURBQUQ2MDM3Ci06MTAzQTAwMDBDQ0UwMzlFRkRERTIxRTZFNjZDMDYxQjM3N0ZBMTVEOUZFCi06MTAzQTEwMDBFREI1OUZGNDExREMyRTk0NDRFOEI3RTZCOEEyOTg4Rjc4Ci06MTAzQTIwMDBBM0EyREMwMkI4QjdGQTFEQzQ1RjlCNTQyRTFGMzY3OURGCi06MTAzQTMwMDAzNThGMkZDNUZFNkU0MTdDQkI3QjlGNUZDRURCRTRDMzIxCi06MTAzQTQwMDBCOEY3NEVBRjgzRjg3N0FCQUE2Q0NCODNGMjU2MkYzNzFCCi06MTAzQTUwMDA2QTlCNTQ0NzQ1QUFGQ0FFRUU5OURDQkU4MjI2Njk5NDY3Ci06MTAzQTYwMDAwRjE1OUM0QkY2NEU2RkYzQjQ4ODdEMzdDQkU5MDVCQTQyCi06MTAzQTcwMDA0NjdDQTYwNjIyQjg5RTI2NkY4RTg0RkI2MkQ2RUY5RkY4Ci06MTAzQTgwMDAyOTA5N0RDNUUzQ0FEQjg0RkQ5NDlFREYxRUMzQjg0RUMxCi06MTAzQTkwMDBGM0UwNTU4NTg4MkUwRkQ4NDMyN0UxQkRBN0EwOURFQzA0Ci06MTAzQUEwMDAyN0VGRTUyRTNEMTVCQzI3QzQ3OERCOUM4MTBBQzRFN0NGCi06MTAzQUIwMDBCNjRDMDczMzAwN0ZEQkYyN0EzOURGMTJGQUIyNDkxREM4Ci06MTAzQUMwMDAxNzIxRkEwNjdDOEM5MjdBQjY3QjVFRUNGMzY2RTc0RUExCi06MTAzQUQwMDAzRkRFNUJEQjM2NkEyMUU1ODU2RDFCQ0FFNUYzRUFDMzkxCi06MTAzQUUwMDBCRkRFRDM4OEZFODNGQTVERjYwOUYyNEQ4RTQyRkJBNjU3Ci06MTAzQUYwMDBCMjgwMDdGNTVDQjM0RkYxNjE1QzYwN0NDRTFEOUVBMDg3Ci06MTAzQjAwMDA0NUNFMjVGMzg5NzNGMERDMUFCQzRGNzhBNjI4M0Q4MDlBCi06MTAzQjEwMDA0ODJGOTMwRkQzNzc0NTlBMDMyMDc3RjMzMDZGQTlERUIwCi06MTAzQjIwMDA2N0ZENUUwMEQ4REQ5RjIxRkY5RjhCNEU1NUE2N0IxMDYxCi06MTAzQjMwMDBCRjMwM0VEMTUxNkZGQjk3MEM4RjE3MjVEM0I4QjNCNDZDCi06MTAzQjQwMDBDRkQ2NkI1MjdEQzc2NDU0MTVDN0FCNDkzN0NFNzNEMEZGCi06MTAzQjUwMDBDREI5RTBCN0U5QzVEQzg0NUUxQzU4NzVEOTJBM0M3RjM1Ci06MTAzQjYwMDBCRTlCRjFGQUNCMEVGRjhFRkNGNEU0RjJEN0U1Q0YyNjM0Ci06MTAzQjcwMDA2NTI3QzlFREE2OTEyRUEyQTdFNEZFREJGMjM4M0NFRjQzCi06MTAzQjgwMDBDQzNDMjlFMjA0MzFFMkRGNkMwRjhGMzdERDUzRDQzRkE4Ci06MTAzQjkwMDAyRDk1NUMyRTFCQUY4RkE5QjJEODFCRDlBNUVEQTQ2RkI0Ci06MTAzQkEwMDA1RDU1OENDNzZCRDU4ODZGMjQ4Q0UzRUQ5NDgxNDYwMUZECi06MTAzQkIwMDBERjhFMkZGRTc0NENCRDc4M0MyQTNCRUI1OTA0QzZDQkZDCi06MTAzQkMwMDBFQTk0ODkzRUYxRTcwQjkwODNGRDg0MUNEQzMyRkM4Rjg0Ci06MTAzQkQwMDAwQ0YzNDc3NjVDQTEwNDc4REVDQTQ3ODFCM0U5OTNBQzY1Ci06MTAzQkUwMDAyOUY2NzhEMjg1QzY4QkFBQUE0NDFFNDMxQTRCRTM3OURDCi06MTAzQkYwMDA0MzU1MjE4NUYyNzUxQzVDQ0Y2QUYwREYyMDIxMjIyNDE5Ci06MTAzQzAwMDBCMUZGODNDNDUxOTQ4QUFGNzg5QzJDNjcwOTIzQjkxOUZBCi06MTAzQzEwMDBDRjVGQzFFRkNGRTAzODNBMjM3QjA0MkZEMDYyQkJDQjFDCi06MTAzQzIwMDA1NzczN0IyQjk3NzU0Qjc4MUUzODFDQjM3ODY0QTQ3NzM5Ci06MTAzQzMwMDAyRTNGQ0ZCMDVDMDdFNUVGQzAzNDk4N0YyMjE5MEVEMjNCCi06MTAzQzQwMDA4QjNGMUM3RTU0MEFDMkRCN0I4QTU3OEQ0NTdDMjRBRjk4Ci06MTAzQzUwMDA2MzY1OTU4ODdCQzVENzcxNzYzQzk4NzBGNjM1OUQ5QURCCi06MTAzQzYwMDBGQUJCQzlDM0Y1QjEwNjhBM0IwRDhERTVBNEY4Njc5OTg3Ci06MTAzQzcwMDBCQzgxRUI2M0MzRUQ0MzdERERBNEQ0M0Y4RTY1RTgxREJECi06MTAzQzgwMDBBMTc4Njk1MkZDRjNCMzM0MUUxRjk1RUU2MDNFQTk5OEVCCi06MTAzQzkwMDBFMjlGRjlCODRGNkI1OTdBMDBFMzkzRkQxNEREODNGNTg5Ci06MTAzQ0EwMDAxOTIzMTVGQUJCMEM2MDc3NEZDNEYzOTY4NDVGQUU3QTg0Ci06MTAzQ0IwMDA3OUJFREM1QUNBMkI3QzFFRjUxQUI0M0JGMEM1RDlFNTk3Ci06MTAzQ0MwMDBEMTkzRTdEMDZCMkQ5RDIzQkQxNDVGRjdENDY2QTAzRjQxCi06MTAzQ0QwMDBGRTk0N0ZDNDYxRjQ2RkNFNzg3OEJFOTdEOUVFNDBEMjVGCi06MTAzQ0UwMDBGNzRGOUE4NTlDM0I1QzI1RTJFODY5OUZDOUQ4N0Y5QThCCi06MTAzQ0YwMDA1RjU1MzBBRjJFRTQxOTRCRjJCRDQ5NEE3RDVFRDA1OTc1Ci06MTAzRDAwMDBDNUY1QzE2OEY1MzU0RTY3QUJDREVGOTZBRDI2RjlGRjI5Ci06MTAzRDEwMDA0RUE2QTBERjNBN0QzMUM1OTU4NUJEQzczNDRERjU1RDEyCi06MTAzRDIwMDA5QkIwRjM0QzdERTk1NzdDQzZDRDM4OEVDOEI3RUFCMTVECi06MTAzRDMwMDBDRTAzMzczMUZDMUUwQkYzNUJFMkIzMjM3MEZFN0VGMTQyCi06MTAzRDQwMDAzQzNCRTJFNzI0RkJBRTM3N0NCNjA4RkZCOEM5MUZBMkI0Ci06MTAzRDUwMDAzQzhEMzMyOEIzNTI5QzlGOTg0RkIwNTMwRkEyOUM5QTJFCi06MTAzRDYwMDBEMDYxOTcyRjE5Rjk3NkY5QjJENTUxNEY3OTVGQzZENTQxCi06MTAzRDcwMDBDQzg3NzkyMUFDMkFFMEI3REFDOTYwQUZGRUIyOEFDRTJGCi06MTAzRDgwMDA3N0VENzZFNzRERDU4QzdGNjczQjVCNTUzMDRFMTNGNjZDCi06MTAzRDkwMDAwNDE5OUU0QjI4QjkzQUMzRkQ3MEY5MDM2N0REOEZCNjRECi06MTAzREEwMDAyQUFFRjc5QkYzOTc0N0QwQUZEOTMxRjUzQjg0OTdGMTEzCi06MTAzREIwMDAxNTNDMEZENTZDMDdGQUYyOUQyQThCN0Y2M0U2Mjk5QzkwCi06MTAzREMwMDBGN0Y3OTQ3QzBFQ0E1RjNDREYzODUyQ0I5NDk1RkM3QkFFCi06MTAzREQwMDA0QUZFRTVGNDNEQTVBNzNDRkM3QjRBMDczMkY1MENCNDRFCi06MTAzREUwMDBCRjJFRjQ3QjRBQ0JBQjM5QkQ4NjNDREY3RTcxREEwODRGCi06MTAzREYwMDAwQjlFQkE3NENBMUY3MUY5NEZEMUY5Q0QzNDkxNkY5MkVECi06MTAzRTAwMDAxQzJGNzJCQkVCRTlCQzJENTY1MkJGRDgxQTJGMzZGMUNFCi06MTAzRTEwMDBENzI2RjRGNjZGNEE3NENBMEJFQUVERUY0MTk4RUQxMDFECi06MTAzRTIwMDA2M0I4MkVCNzg4ODc2RTI5NTk0RkY4OUY1QjkxNERGMTgzCi06MTAzRTMwMDAyODQ1QzRBMzVDQTc3NENBMDM4RThFRDczM0FBMkRGODc1Ci06MTAzRTQwMDA3N0U3MUFBNEVGMzJGRTkxRjFGQkVFOUZGM0ZCRUUxOTM4Ci06MTAzRTUwMDAxQjU5MDhFRkI3ODdCRTE4NDdFNzU0QTE1ODFBRjFEOTg0Ci06MTAzRTYwMDBENEQzMDFGQTVFNzU5OUZDRDhENjExNTA3RkEwNTNBMTI2Ci06MTAzRTcwMDBFRkM4MUY5ODlBOUU4MzdBRUREMzRFNkVERjY2MUNCODBBCi06MTAzRTgwMDBFQUYwREY0MUI5QTRCMzE2NjMwMjIwNzcwMDk2RkUzRDQ1Ci06MTAzRTkwMDBENzMxRjVCNEUzNkJGOTk5MTNEMENGQjQ5Qzk3OThFMzdECi06MTAzRUEwMDBGRUJDRTExMEQxQzc5MzBEMURGNERDRDcxMEEzNjc0QjA2Ci06MTAzRUIwMDA0MzE3M0Q4QjE0MkQ4Q0VCMjlFQUEwQjM0QjM2RTkwNDU0Ci06MTAzRUMwMDBENDVCRTAyODdBMTdGQTVCRThDMTM3NUUxRjVGNERGQ0QwCi06MTAzRUQwMDBENzYxNkI5NzkxREY2NTZCMDc3RTZFMTFCNjUzRkMxQzQzCi06MTAzRUUwMDA5RjJFRkNDRTE4OEMzRkJCOEI2RDk2RDRGRjUxRjI2QThGCi06MTAzRUYwMDA1MTc1REZDOEFCMUJBQjA3OUU0RDVFRjFGM0Q0NTA5N0Y1Ci06MTAzRjAwMDBGOEFFNTgxMjNGRkU1Nzk1Q0FCRjhGNjRGMkE1Mzg1N0Q2Ci06MTAzRjEwMDAzNUY1RjQ1NkZDMTVGNDY5NTNENjc3Qjg3QzhCRTc2RjBBCi06MTAzRjIwMDBGMEZCOEFFNjc3RTlFRjc4RTVFNDVFQ0NFQjY5N0U1QjRGCi06MTAzRjMwMDBENDFCOUZFRkM1RjNEQ0M0REZDREY4RTMyQUJDNzdGMkQ2Ci06MTAzRjQwMDAwMjNBQjc2MDg3QkVGQkNBQjNBQkYwRkI0MTBCNkJCMjYyCi06MTAzRjUwMDAxNTBERTAwQkUzMDE2Qzc2RTJCRThDOTlENzk4OENCNzE3Ci06MTAzRjYwMDBERjU0M0JDQ0VGRDA1MTFDQkU3OTA0RkZGQjA2QzlFREZBCi06MTAzRjcwMDA1RUFDMTY3RTlCNkFGRkJCMUZFOUJEREMxMzdBQUU5QTZFCi06MTAzRjgwMDBDQjhCNUYwQUJDNkQ3NUYxM0M4NURFRUU4MzdDQkZGQTlFCi06MTAzRjkwMDBFQ0Y3NDFERTE0RjVFN0JBRkZGMTEzRDFFRTA5MzFFRjhBCi06MTAzRkEwMDBCMDQ5OTFGQjUxRkU5ODdGOTdFMzQ5RjEzRUZFRjczODA3Ci06MTAzRkIwMDBGQzJDRTUzODZENDJFRTVFM0VDQjI3RjY1M0EzRUY5RjE3Ci06MTAzRkMwMDBDMTc4OEYxMDdEODhCRjlGNjBENjRGRkEzMDVFRkY0RjVCCi06MTAzRkQwMDA1NDFGRkYzQjA5M0FDNTg5Q0NGQjc4NkRENTFEN0IxQjZGCi06MTAzRkUwMDAyRERGRkY2QThFN0Y1NzkxRTczOUZENTFFMDJERjk2OThBCi06MTAzRkYwMDBERTQ3ODk3RjNGOEExRERFQUI1OUJFMUZGNTQwRjU5QjJBCi06MTA0MDAwMDAyN0M1RjdBRDlFQTZGNThBN0IzOERCNzBCRDAzRTlGREI5Ci06MTA0MDEwMDA3RTdBOUZGNDNEODFBNzVFMzlCODU3N0M0N0YxNzk4MjVCCi06MTA0MDIwMDBCQjNFRjkzQjVERUZFRUI1N0UxRjYxNUJGNTNCQUI0NEZDCi06MTA0MDMwMDBGQjk3NjgzQ0YxNURBRjE0NzQyMUU4RjZFODVFQkMxRkE1Ci06MTA0MDQwMDA3QTFFRTNCRDQ2RTM4OUVGNzJBREFCRTY3Q0Q0MUIzRDNGCi06MTA0MDUwMDA0M0ZCMjMwNDZGRkM3QkM1QjUxRUQ0MkI4OTdCRkY0NzM0Ci06MTA0MDYwMDAwODNGRTc4MUFGQTMzNEFGNkVDRUNCRjEyNUJCMzlCRjlDCi06MTA0MDcwMDA5OEY5NjQyNjVEQjA1OTdDM0YzNjU2QzdGMzc0NEYxMkU5Ci06MTA0MDgwMDAxQzJCRkEwQzBGQTcwODlFQTQ3QjQ4RTc1QUM3RTM4NUIwCi06MTA0MDkwMDA5MUNGMDgwRTdGM0MxRkY5NEYzNENFRDc4NEM3QkMzRjY5Ci06MTA0MEEwMDA5NkNDMUZGRDY2NDk2NjFFQjQ2QjE2Q0U5MzFCRkY2RTQxCi06MTA0MEIwMDBBNzdCNTYxRkNDMEJFMzY2RDMzODg5RUY4MUY2OUY5NTFCCi06MTA0MEMwMDA1QUZFNUNEMEI4NEMzREJGRkMxMkIzRkNGRjAwMTVDOEQzCi06MTA0MEQwMDA0RUEwMDA3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCi06MTA0MEUwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkYzMTc2MDYwRjg1MTAwCi06MTA0MEYwMDA4RkMwOUM2ODdDNUFFM0JGNEMwQzBDRkFDQzBDMEM5NzFDCi06MTA0MTAwMDBEODE4MTg5QzM5MTkxODg0RjhDODMzRTcyMjlBQkU3QjRFCi06MTA0MTEwMDA0MEIzNjZGMDMwMzAyQzYzNjU2MEQ4MDlDNDdBNUNEODRGCi06MTA0MTIwMDBGNUQ5MDgyMkQ4NDc4MTdFNUYwMUM0MTdFOTFDMDZBMzkwCi06MTA0MTMwMDA3OEYwRTAxQTExMDY4NjQ5QTIwOEJFOUUxOEFBN0NBRDQ2Ci06MTA0MTQwMDAwODgyQUQyMzQ1OTk1RDRFNDBGRDAwODg1MEJFQ0I4MDZFCi06MTA0MTUwMDAwMzAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMEFBCi06MTA0MTYwMDAwMDBCRDU3RDBENzg1NEQ1QjVFODNBMzM2N0NFRkMyNkUzCi06MTA0MTcwMDAzOTQ5MDY5ODg0MTA0RjQyQzBBODQwMDcwODBBMTY3NUFFCi06MTA0MTgwMDAxMkMxNDZFNUI2NjNEQTZBNkNBOTFEQUM1MjdGNjFCNDEwCi06MTA0MTkwMDA1NkI5NTZDQzQ5MDhDOTI0ODQxMDEwMTVBOUNBRTAyRjc1Ci06MTA0MUEwMDA1QTZENTM0NTZCOUZFNURFMDk1MDhBQkRCRTI3N0FENTBGCi06MTA0MUIwMDBBQUQ1REU1ODI5QUQ1NjZEQkM5NjkyQkU4NzcwRjc1QUM3Ci06MTA0MUMwMDA3QjlGQ0MzOTI3MzM5M0ExNEFEQjg3NUZCQkIzQ0ZGRUZDCi06MTA0MUQwMDA1QjdCRkRFREI1RDc1RTdCOEZFMjcwNDFGNTA5MDA0NzUzCi06MTA0MUUwMDBGMURGNTkwMEY3RkIwMTYwNUMzQTlERjlCRDJGNUZGRERGCi06MTA0MUYwMDA3ODFERkJEQkVGMEUzRkM4OTI5OUJGOTg1RjExOUI5NjJECi06MTA0MjAwMDBBRTNGMDcyNEFBRDdGMDhCQzU3RjA0NTZFRkRGQzFBOUM0Ci06MTA0MjEwMDBCOUQ5QTc5RDA1NDNGRTMwQ0JFQjkyMTNCMDlEMUJFQUE1Ci06MTA0MjIwMDA0QkZGMjVDOENBODcxREUxNkU5NjRGMUQ3NjA0ODBGNUE5Ci06MTA0MjMwMDAzMzAzOUNEODA5NjhBMDA2QTJEM0Q5NzdGOUNCNDU2MDhGCi06MTA0MjQwMDBFQURGOUU5RUI5NDk4NjU0MjlDMEFFOTUyMDQ3NTlCREU0Ci06MTA0MjUwMDBENTA1QTcyRDFFMEMwMEJDRDA5MkZBQ0JGRTI5MDA5MUVCCi06MTA0MjYwMDBENDQ5QjJDNkZBRDlEREIyOTdGMkZGRDZCMkVGMkZGQjJFCi06MTA0MjcwMDA1RDAwMzEyOEE2NzExQUU2N0YyNDJGNjFFRDc2QjlBMDgyCi06MTA0MjgwMDBCOTlGQjU2Qjg4NDhBRTI1QTZGMTYyNjIzRUJCQkNBMjYxCi06MTA0MjkwMDA1Q0FEOTczMzk2MTdCMDcyRjZCRDIxNzg0MUM2RjIxODFGCi06MTA0MkEwMDA5QjExRDUyQjE2RkQwQzBGM0FCMTlFMDY0MzdFOUFFNzYzCi06MTA0MkIwMDBFMUE2OENGMzlDMjBEQTE5RjlCQTQxM0VERjlENkYxRDBGCi06MTA0MkMwMDAzQTFGRTk5MDgyQTJBODFCRDNDM0Q1NkYyMkJFMDczQzM4Ci06MTA0MkQwMDA5MjA2NTUwQ0JGODNFNzExN0U1Mzg4NUZENkM1QTFCNzAwCi06MTA0MkUwMDAzOUJFNzc3REUyMDhCNzMyN0MzNzc4RDQ0MDk4RTU0MTEzCi06MTA0MkYwMDA2NkY0NjBFNTBEMDE4ODEwNUMzMjRCMTkxQ0U3MEJCOEMxCi06MTA0MzAwMDAyRjE2NjkxM0E2NDQxNzhERTgzMkUwNjE3NDA5OEMwREVECi06MTA0MzEwMDBFRjU5OUIxNDgyRDc5OEU3MDBDRTMzOEY3NjA2NUREOThDCi06MTA0MzIwMDBENzQwQjQ4MEI1ODNDQzdDMzAxQTNGNkNCQ0Q5QzcwRTYzCi06MTA0MzMwMDBBNzgxRDdFOEZDODFCRkVDRjcwMEZEM0JDQUZFQjc1MDcwCi06MTA0MzQwMDA3REVFMkZGQjZCRDNGOUIzODZGNzU5RjI4Q0EzQzE3M0MzCi06MTA0MzUwMDAyQTgzMTdGRkQ0MzA5NUZGM0M2ODk0NTdGMTcyMUMyN0NECi06MTA0MzYwMDBEMUEyRkRCOTg2RjE1RjVGMEJGQ0I5ODZGMTVGNkY4QjVGCi06MTA0MzcwMDA4N0YyM0QyRDJBRTVCQjVCNDI5NDRGQzhBQzA5QTM2MzhECi06MTA0MzgwMDBBMjA3OTIzQTZCNUYxQzYxRjU0REUzMTVDRDY1RUQ0Q0NDCi06MTA0MzkwMDBGMDE1ODQ1NTRCREU1RjFCQjJENEY3NkE5QUE1M0NBMTk5Ci06MTA0M0EwMDA1REVGNDgzMkJBNzc0RDczMjQ5RDEyQzJDMTY0RTQ0NDc0Ci06MTA0M0IwMDA4NEMzNDMyOTAzRjdENTEwOUI0RjBENkYwMjZCNUREQTYxCi06MTA0M0MwMDBBRkFBMTE5RTE3OUREMEM2RjI4NTVBQzQ3MTI5Q0I1NzRBCi06MTA0M0QwMDA4NjlDOTAwQ0IzRjEwQjg3MDA1ODdGODk5NTAwMUI1ODgxCi06MTA0M0UwMDA3RjNEMzM0Rjc1NUNDQUYyRERGM0RDQUE1MzA1NDhCMjVBCi06MTA0M0YwMDBGRTEzNkVENkNGOTE5NEI2MEFGQjk5QUU4NEIxMUZFODM2Ci06MTA0NDAwMDA5MzdGOEI3OEYyQjBGRjhFNTYwMzRDRDY5NEI3MUQ4NTAwCi06MTA0NDEwMDAwMDU1M0FGQjZFOUU5RjVCMEZBMTVDMTdDREI1N0U5RjRBCi06MTA0NDIwMDBBQzJEQkQxNjU4RkRDOTYwRkE1RTk1QTZBNzMxQUU5MUI4Ci06MTA0NDMwMDBCNzhGNjcxRkU3ODQxNUI2RkU2REZENTY2QTgzRjVFQUYwCi06MTA0NDQwMDBCNDc0QkYyN0MwNTBBQjFBRjg2N0VFMzdEMjIwMjE5RDU1Ci06MTA0NDUwMDBDMkEwMjU2NzFFM0ZCODAzMkIzRTJFREUzRjNCOERFN0YzCi06MTA0NDYwMDAxRTE3RDc4Mzc2NzkxQjA0MDdFOTBGOTBDNzQxODRDMUQzCi06MTA0NDcwMDBBNTY5OEU2NDM3RUJBN0JCQ0E0MUZDQTNBRDg2MjRFQUNECi06MTA0NDgwMDBBREI1OTNGNkM1MzFERjVEQTU2ODZEMkM1RjU1QkJBNzUzCi06MTA0NDkwMDA1OTlBMDFCMDY2OTI0QTdDRDdCREMzMEQ2RDYxMEU0NzMzCi06MTA0NEEwMDA5MEYxNjlBNUMxQTc0NzA2RUJBQjkxMEYyNTA4NkY2MDk2Ci06MTA0NEIwMDBFNTU1REE4MTU2QUNBRkJFRUFEMzVDNzM0N0NGMEY1NkYxCi06MTA0NEMwMDBGMEY5NTM5RUNEN0YwOEZGOTgzM0JBREY1RkNFNTEyMkJCCi06MTA0NEQwMDA1MUU0NUIxRDkyNkUwNjRGNTc0RDVCQTNDRUM2Qjk1Nzk0Ci06MTA0NEUwMDA5NzAxRTVBNzdCNjVGRjZCODhFN0M0MTQwRUFGN0RERUZGCi06MTA0NEYwMDA5NTlBQjIwNEY5MUFDQ0UzQjNGMTJBNkIyRUJDMUFFN0YxCi06MTA0NTAwMDA2NTg3QzNEMDE3REY2RjUxNDkxRUVGNkFBOUE1RjRERTk2Ci06MTA0NTEwMDAxNkI1MUZGNUM0NUQ5RjM4MzNFMkY3N0M4OUVCRTdDRDE0Ci06MTA0NTIwMDBBRUE4MDNFMUQzRTczOTkyMEY5MkZFODk2REJFOTJFNTAyCi06MTA0NTMwMDBFRkY5RUVGODU5QjgwRTVDM0ZDRjQxRkFFNUNGM0QxQ0RDCi06MTA0NTQwMDBERkY3NDg3RDE3MDNENTU3MzRBQTZGOTNGRjdCRTU0ODAzCi06MTA0NTUwMDBEQkI3NThGRDdCNDJBNUEwMzM3OUFFNzRFRDNCRjc0NDQxCi06MTA0NTYwMDBFQzZGNDVGNTRDOURGNTc3Q0YwRDFCREVDNkY2OTVGMzQ4Ci06MTA0NTcwMDBBNjZBNEVENjdFRjJEQzAzNkZCMjQ1MUNFRTNBMzIxOEM0Ci06MTA0NTgwMDA4QTA2MzBDRkU1QkE3MkM1RjhGRTFBQzYyNzEzQjVCRTQzCi06MTA0NTkwMDBFQjcwRkNDQUI5OEE5NkFDNEFGMzY1MDU4NDY5OUMxMzMyCi06MTA0NUEwMDA5QUZEOTA1MkM3RTZDRjhBNkI3MkYzRTdGMUQzMDM3RjhGCi06MTA0NUIwMDAxRkI5MkE0N0I5MkE0REMzQkQ1OUQ4Mjc3NkJBMkY5MkI5Ci06MTA0NUMwMDAxQ0M0MkYyMzcyMzU5N0NCRDUxM0E3NzMzQTFCNzI3NTcyCi06MTA0NUQwMDBEN0E0QkU3NzhCNThCRUY3MUI5QzRGRUQ3QzVFMzVGNzlBCi06MTA0NUUwMDA0MDNERDJCNTg3Qzk0RjQ5MDhBMENDQUQ3RDJDQjE3Q0U4Ci06MTA0NUYwMDBFRjEyMjE4NzczMEY0ODRCNTlGQjNGQkRFMkQzMDBFNTEzCi06MTA0NjAwMDA2OTcxNjY3RDlEOEQ5RkQzQTk3NURDN0I2RjcwMzQ0NDg1Ci06MTA0NjEwMDA1OUJENUY1RTNFRjU4RjZFMUM2RkIxQTJBMTlDRjVDQUJECi06MTA0NjIwMDBCNTM0QkVGNjVENDVEMzRERjRBQzVDQ0NFNDg5RjE1N0FFCi06MTA0NjMwMDBFNTBENDI3RTZDNzIzNUQ2Rjg4OTk2MjRCQ0MzRTQ2OEQ5Ci06MTA0NjQwMDA3RDRCMDgyMjhDNkVFQjVBMzQ5MkFGQjU0MkNFRDAxNjE5Ci06MTA0NjUwMDA4NTMyOTYxNzcyMDZCNUIzMjg5RkNERkUwNDY4MjVCOTNBCi06MTA0NjYwMDBGMzY4Mjk4ODMxRkFBQzY3N0Q0MzM5N0U0RjQ1MjJGM0UwCi06MTA0NjcwMDAwMTRBNTA1NzlENEVFMEE0MUM2QzZENUYzNzUyMEUxMURECi06MTA0NjgwMDBDNkY0RDAyQjg5QkNGRTQ3M0RDMkM2NTNDMzNDRkY2QzY5Ci06MTA0NjkwMDBFQjFGRjU1NTRDMDhENzdCNzk3RTg3NTQ1QkFGQ0YzNzNFCi06MTA0NkEwMDBCN0RGNDNGRDFCRjU1OTNFRDU1MDYzRUEwRkZCOUY2NjBDCi06MTA0NkIwMDA4NkM3NTE4RkY1OERGRTVFNkYyREFGRDdEOUY4RUI0NENECi06MTA0NkMwMDA1RTY5MkJFNkY5RTNEQzdGOEZENDFGNjI0QzBGNkI2Q0M1Ci06MTA0NkQwMDBGREY0NDgwMjRGRkE3RjQ0MjI4MUY0Mzg3NzRBRUY0NkNFCi06MTA0NkUwMDA3NDRCRjkxRjIyODgyN0EzRkMwN0FERkZBMUVCQUNGRTlBCi06MTA0NkYwMDA0NzEwQkQ0QjYyNzQ5OEI1MjA1NjBFOENFRUZFQzYxNDYyCi06MTA0NzAwMDBBMDI5QjVERTg2RUZGNEZDNUVBNEY5MDVBNkYxRkM3REQ4Ci06MTA0NzEwMDBBRDlGNDQxMERGNDZGOUQzNTI0MTJCRTIxQkY5MjYzMEZFCi06MTA0NzIwMDAxRTIwNDQ0MjAyQjBFOUU3M0Q1NzNFOEY3RkQ3OTYwMEY2Ci06MTA0NzMwMDBDQzYzRTM2ODdEQTBCMTNFMUMzNTcxMDlGNzFEQTFDNUFFCi06MTA0NzQwMDBGMjAxOEIzQzA4QkU2M0YwM0QyRUIxNzRENkZDRDhENzg1Ci06MTA0NzUwMDA3MDI5Q0MwMDlGNkU4NkNGMTg3RjJDNzgwRDM4QjJGMzZECi06MTA0NzYwMDAyNzFGREZDRTQ3MERFN0NDN0Q2MTNFOTMyRkZGM0U1N0RECi06MTA0NzcwMDBEOEFERTEzQzU0MDlGNTc4MDkwMkM1RjQ1QUYxOTE1REQwCi06MTA0NzgwMDA0NDI3OTBGQjQzNjg0N0RCRkIyRDU5NTAwRTQ5RDMzQzJGCi06MTA0NzkwMDAzRjZCN0FERTg1Nzk4RUI3OTdDRDc0NjVGOTU3Q0Q3ODAyCi06MTA0N0EwMDA3QzFDRUJDRDE5Q0Q3N0M2RkNCQzM4M0Y0MDNCOThDRDg3Ci06MTA0N0IwMDBBRkNFM0NCRjI3OUI3MTdFRDlGMDY2OUZERjNBNkY1RjFCCi06MTA0N0MwMDA3MzM0ODNGRTNERDMyMUY2QkI2N0NFRkQxMkY2Q0ZDNjEwCi06MTA0N0QwMDAwM0Q0NUY1RTZEODhGNEFGOEFFM0IxQUQ2NkQxOTE1REJECi06MTA0N0UwMDBDREI4QjVDRDM2OUUzQTlGOEQ1NzdCRkNGMDM5MTYxRjVDCi06MTA0N0YwMDAwNzk4RkVEMjU4M0Q0NzM4MzcxRkRCRTVEOTk4QjcxRkQ5Ci06MTA0ODAwMDBFNzJEMjExRkYxRkQ4MDdEREUwMDhDOEYwQUZFRkY5RENDCi06MTA0ODEwMDBGN0M3MzJBN0U3MERBQzdGOURDRjhCQ0JDNzNGNjg1RTU0Ci06MTA0ODIwMDAxRjNGNUY0QUYyOEFGMDM4MzkzRjg3MzJGMUQ3M0I5MjE3Ci06MTA0ODMwMDA2NkQ5RTdEQUY5M0FEQkJDRkU1MTdDM0E3QTVFQjlGMTI3Ci06MTA0ODQwMDA3Q0JDRjU1MEJFRkFCNUVENTUxRkUxQjFGNzMyQkU0RjU1Ci06MTA0ODUwMDBFOEREQkI5MEZDMEVCRENGOUYzRDAxRTEyODRDOUMwMkUyCi06MTA0ODYwMDAxMTY2RkY0RUM1RkU1OTdGQkQ4NjdEQjFBOTZFOENGRUQ3Ci06MTA0ODcwMDBCOTdENzE2NzBCRjRCNzRGMDE3OEFBNzA5MEY2QzMwQzNECi06MTA0ODgwMDA0RTZBQkY5OUQ5OUY0OUE2RTBFQTVFQkNDMUJCODQ4RDQwCi06MTA0ODkwMDBCN0Y5OEEwRDVFRjQyQkY1MEE3QkIxRUVDNTA3RDY5RkZBCi06MTA0OEEwMDBDM0YwMzlFMUYyOTI5OTRFQzYwQUJENUVFM0ZCRjZFNzJBCi06MTA0OEIwMDBBNkIyRUY5QjJFMTNERjg1RkY4QTdEN0YxMUVCODc0NDI1Ci06MTA0OEMwMDBGRDZDNzA5NTI5ODNCMTI4QzkwQjgzQ0I4NDdGQTNGQzMxCi06MTA0OEQwMDA0OTA3Qjc0QjlGNDAzQkVCNDREQ0NGNzAzQkFCQ0NENzk5Ci06MTA0OEUwMDBCNzA0RTk1QkI4NTlEMUVFOTM0NkY3RkJCRjg1M0VCREVGCi06MTA0OEYwMDAxM0VEMzQzNkRGQkIyRUVGMjg0N0JCNkFFN0Q2NTM3NzdDCi06MTA0OTAwMDAwNTEwQUVDQjgwRjRGOTg5Qzk4NzA2NUMxQThFQUY0QkNGCi06MTA0OTEwMDA4OEU3Mjc1QzYwRDg1OUI0Q0U5NzVGNjZEMEI1NDkzQTJFCi06MTA0OTIwMDBCQjg2REEwOTNCOEJFN0JGM0ZCMkFFN0U5REVDOTY4QTMxCi06MTA0OTMwMDAxOENGM0ZEREY2RERGQTU1QjJBOTVDRkY3NjdEQTQyMkUzCi06MTA0OTQwMDA1REZFNDJEQkI1RjVCOEVFQ0VGMkM0REU5OENGNDgzNzU3Ci06MTA0OTUwMDA4QkU5QkQ1NTBDOEU1OUIyRTY4QzIzQkY2QzBBNjZCNDQ4Ci06MTA0OTYwMDAxN0I3M0RFNzY5NEUzMkZDNkVEQjNBNzVGMkU1MTlENkIyCi06MTA0OTcwMDAxMTQ2NDVBMkIzOTE5RkJERDcyQTY3NEYyMEZFREM4ODIwCi06MTA0OTgwMDA0NzZFQjdGNjMwRjQ2MkZENTA0QzVCODVGODlDQkQxNzVFCi06MTA0OTkwMDBDMkI4MUZDREE2RUZCMkQxMzE3NEI3NTVERkNEOTJBREZECi06MTA0OUEwMDBGMzNBNUVGM0Y5MDg1NEJFREYxNkZEQjM3NUZEMjUwNzMzCi06MTA0OUIwMDA5RjhGMTNFNTY4QjZDQ0U1RkZEM0NFMjc4NTc4RTI3NkU2Ci06MTA0OUMwMDBDNDZGMzJGNUZGRjc5QUVGQUMwMDFCMjdGOEQ5OEYxM0FECi06MTA0OUQwMDBCMjhEOTNBRDVGQkJCRUQyMUI0MDkyRDExRjVGMEU2MTAzCi06MTA0OUUwMDA4NEE3Nzg0MTFDRDA4RkVGMENFQzBCRTlDQ0RFOTNENTdCCi06MTA0OUYwMDA0MTRBNURDMUExOTBDRUY0QUUxMkQyQ0EzMDc1NTc4NDNGCi06MTA0QTAwMDBDQkYwM0JEQjFGMDlGOUU4NkMyNUJEM0E5MkVGNkE0NTE0Ci06MTA0QTEwMDAzREJBMEVGMzI0N0Y2QkE4N0NDMzQ4N0UyREU1NkY5QkM3Ci06MTA0QTIwMDBDNEU1RjMwNEU3RUQwM0E4ODdBQjUxRDkzMEI4RDYwRTNGCi06MTA0QTMwMDBCQ0RFOEM3RTgwRDJERDgxMzA5QTFBQTU4MTMwQTAxRTJBCi06MTA0QTQwMDAzNkNBN0IwN0RFMEQ3OUQwOEVEQjFEMDAyRkUzRjcxMjBGCi06MTA0QTUwMDAzNTAyRTZGNkVCMDZGRTFBNTI1OTc5NDA5NDA3ODI1MTY4Ci06MTA0QTYwMDA0QkY5ODY4MTkzQ0E0MjBDNDUzRTUxRUUwQkM1QThGQzFBCi06MTA0QTcwMDBCNjgxNzk2NTFBREEzMUJCMDMyQTdFRjc1N0M0NjlEQzNGCi06MTA0QTgwMDBCMzdGNzE4RDgzRkNCMThCMUM0OUI3NDk1RjI1MTZDRDZGCi06MTA0QTkwMDAyMkZEQkU1ODhBOURFNDY0RjRBOEZGNDU4RjA3RUQ4Nzg4Ci06MTA0QUEwMDBDNEVFNjkxM0YwM0JEOTNDRTQ0RjkyRkYyRkVFNDczMTNGCi06MTA0QUIwMDA3Qjk0RUNBMDgwN0FFMDE0NDEyRjY3OUExRTNENzg1RUNCCi06MTA0QUMwMDA0MTdFNjA3RTRFOTExMEU3MTQ3QTQzMkE4NUUzRUI4NUEwCi06MTA0QUQwMDA5QzRFOENBM0QzRkU2NzZBQkYzN0VEQUZBNkZDM0U0QjVFCi06MTA0QUUwMDBCRTQwNEQ0NjcwMUYyRDA3OTk3RTYwRURGRDExM0Q4MjQxCi06MTA0QUYwMDA3NDU3MkE3OERFMTkwOEE3NTA3RjZDRkEwNjg0MTE2QzY3Ci06MTA0QjAwMDA5OUUxMTNFQkFGOUJDN0YyMUFEMjNGNEFFREJCRTZGMDM3Ci06MTA0QjEwMDBCQzEyOEFFOTk4NEZDQ0U0Nzk3NzQ1M0M4NUY5MzUyNzcyCi06MTA0QjIwMDBGMUZDMjY4M0NFRjA4ODk1MEZFMDRGNDRGN0FFOTFCQ0EwCi06MTA0QjMwMDBCNzBEQ0IxMzA2REY4MEJGMERDQkQ3OUNDMUY1NkNCOTg5Ci06MTA0QjQwMDA1Q0JGMTNGMUJGNjlBMEFCNkMyOUVCQkYwOEY5ODFGNTFECi06MTA0QjUwMDA1RkI0Mzg0Q0Y0MzJFODcyQTdFNkEwRjVENkEwQ0I5RDNFCi06MTA0QjYwMDBEQTJDM0EyNzk4NTlDNDMwNDExM0QyODgxRTMzNEZCOEYzCi06MTA0QjcwMDBERUExRTI3OUM3Mjk4RUU0ODMxMjlFNEZGNTc4MDc1OUFBCi06MTA0QjgwMDBCRDREQjVCM0E4QkM1Mjc2MEFGRjAwRjc4NzNGMjhGQzlECi06MTA0QjkwMDAwMUQ1Q0NCQTQwQkJFMzQxQjE1RUVGQkM3RDZBMTFCNjMyCi06MTA0QkEwMDBEQkI5Rjk3RjExQkRDRjc0MTY1M0JCMzVCNUZDRkNFNkZDCi06MTA0QkIwMDAxOUI2NEVBMzlGRUVFOTE2MEZBNTNGNjJGREM1OThCRTNDCi06MTA0QkMwMDA3RUJDQzU0M0U5MEY1QTU0NEExRjYxN0ExQ0QzMUU1NjU2Ci06MTA0QkQwMDA5RTQyQkYwMzJCNEZCMTdDRkZBMEEzMTFFNUZGRjYxNjQ5Ci06MTA0QkUwMDA2NjlBQjFGNkI3QjU3ODNFOTZBN0EwQkY0MkE1RkNCQUMzCi06MTA0QkYwMDA5NjEwRTVCRkVENjg1QUUxRTRGRTE0RkYzNDM2QUZBNzI2Ci06MTA0QzAwMDA1RUFBMjFGRjVFRjg3NTQ3MzQ4OUYzNTZBMTc0NTE1REExCi06MTA0QzEwMDBGQUJCODE5RjZGM0IxQTU2MjJCRkZFNzA1MEE2NzE0MEFGCi06MTA0QzIwMDAxRUVDM0UyNTczQkQzNkFDMzdFMzc1OTlGNzE3MUNEQ0Q3Ci06MTA0QzMwMDA3MDdFMzA2M0JENEVBQ0Y3RDg3RTBFMzc3ODUyQkUyQ0Y2Ci06MTA0QzQwMDBGREY1MjBCQ0QzREUxMkYwODU1MjI1NTlGQTVCOEZGNUI1Ci06MTA0QzUwMDAxRUREMkZFMDBCMjRCQjRGQ0U1Q0VGMEUxQ0Y3RTRCNzNDCi06MTA0QzYwMDAwNDdDMTVDOTBERTc2NTFFRjdGQkQ4OUZBNzg0REIyQkQ1Ci06MTA0QzcwMDA5RjQzN0Y0NjFEQUQwMzVCMjU5MzNDNkY1Q0EyNEIwRUFCCi06MTA0QzgwMDA0NjY3NEZFOTYwMUNFQjREQUY4QjRCRDU2Q0ZDRTAyNUM0Ci06MTA0QzkwMDA3MUM5MzE5RERCMTkwRTk2Rjc2MjNGMkMzREE1OTY5NUEzCi06MTA0Q0EwMDBCMzdBMUJCMUJDQzA1NDhFRUQ1OTdBRDIzNDVFMUVGQzZGCi06MTA0Q0IwMDBBNkI1N0M0NDZGMzc4MzYxQTdBNkQwRDkxQUZBOEEzNTg2Ci06MTA0Q0MwMDAzRkQ1QzFGNUUzQjNDRURGRDYyM0JGNEY1NTc4Rjk3RjhCCi06MTA0Q0QwMDA2MzFFRURBRTQ1QjZGQTNFOUVGRkFENTFCRjkwQjc3NzZECi06MTA0Q0UwMDBDODNDRUYyOUUxRjMyRURDRUM0OUEyRERCNTdFNjE0NzNCCi06MTA0Q0YwMDBFOEQyNDA3QUJFQzVFNzI0NkEzMTZGQ0M2RkZEMzk5QjlDCi06MTA0RDAwMDA0Mzk3OUFFNjUzRkM4NUJCNkIyRjlEOTY3RDVERjE2QUI4Ci06MTA0RDEwMDAwRTg4OThENkREQTk3REQzMjA1MkZBQ0ZBRjVGQkU2QTQ4Ci06MTA0RDIwMDA1QTM3NzA1RDk5MjBENjg1MDk3M0Y5QkFDMkYwQTY3MzE3Ci06MTA0RDMwMDA3Qjk1RTM2REREMTk1NkJDMTU5RDY5QzVEQkJBMzNBREI2Ci06MTA0RDQwMDA3ODJCM0EyQjM3REU3RTI5QzZDRjg2M0YzNjdFQzQzQzkxCi06MTA0RDUwMDBGRTg2NzNBREUzOTc5QzY3MUQ3RkMzNzlENkYxNEJDRTdBCi06MTA0RDYwMDBGRkQ0RTNBN0NDN0NEMzU3NkYxRDVGNkRCMDhFREZENzI4Ci06MTA0RDcwMDA2MDFENUYzREZCRDM4RDZGRDBBNzZCRTAyRUVCQkE1RTVECi06MTA0RDgwMDAxNzA1MzNGRDEyMDM1RDIxQ0JCQTFFRTZFQkJBNTFCRTA3Ci06MTA0RDkwMDA2NkUwQTcyMTVDREZCREI4QkVBMzdGQTY5NkFGRUYzMzY4Ci06MTA0REEwMDBERkY5Mjg4NDdFRkI3NTY3RUMwOUUxM0U2MzFEQUJCQjMwCi06MTA0REIwMDA2RjVBN0FEREQ4NzlDNjhEOEU0NzU5QkZERjM5ODlBRkYyCi06MTA0REMwMDAzMzAzNjczQ0VENDFGREJGQTY5NkFGMzMwOTcxOUVEQjBGCi06MTA0REQwMDBERDkyM0E3ODhEMkIzREFGODI4NDk3RjY3QjQ2N0VDNDc4Ci06MTA0REUwMDA1RTgyREZENTIzMUYyNjZBMURDMjVFMkE2QjhCMzA1Qjc1Ci06MTA0REYwMDBENDczOTI2Q0M5Nzc0REUzRTUzN0I3OTdCNUU5RTg0QkMzCi06MTA0RTAwMDA5MUY1MzI1Qzg3RkNCNUYwRTc2OTE5RjY1QkM2RjgwNkU4Ci06MTA0RTEwMDAzQ0Q5QzdFN0ZCRTJGNEY4OTM2REUzNEZCNjhDNkZFNDNGCi06MTA0RTIwMDBCREQzNzlCOTJFRDczNDIwM0M5QkM0QkVGOTA2Rjk3NzlGCi06MTA0RTMwMDBBNDVGOEUxRjdDRDNEQjIyMzU2NkY4NzgzRTBEMUZDRjMyCi06MTA0RTQwMDAxQkYwREQyQUNGNjhEMDZCRkU5RUYwOUQ2NkMzREY2OTQ0Ci06MTA0RTUwMDAzNkZDOUQ2NkMxREYwQTc5RUUzMUUxQ0Y1RUFGQzdDNjkxCi06MTA0RTYwMDA5RjU3NDNFNDI2NzkxQ0NBMTE5MEJEMTk5NzU1NzExRUFFCi06MTA0RTcwMDBDNEZCQUI5Mzg1N0NFMUY4MThCN0IzNDQ0OTRFQTlFMjczCi06MTA0RTgwMDBFNTRENkM1RDVCMkM4QjdEOThBOERGNjhDQjFCRjYyQjBBCi06MTA0RTkwMDAyRTQ3NDdDOTBGOTNEOTdFNTU4MEVCNkQ2Njc3ODQxRkU3Ci06MTA0RUEwMDAyNEJEMUUyNjc5NEFFRjNCQjgxRjQzOTZBMzkxNjgwNjlFCi06MTA0RUIwMDA3RDcwODdDQ0NGODcyNTM1REM4QzcwQ0EwMTg1RkNBODM2Ci06MTA0RUMwMDBEOUVBRjdDOTkyQjBBRjc1Q0JGOTRFMTEwQ0E1OUMwODgxCi06MTA0RUQwMDA0NzA4MjgzRTA5MEU3RjU5QkI2MEZBNjgzODE0MzkxQTEyCi06MTA0RUUwMDBDMzcxOUNBQTAyRjdCMTcxREE4QjJGRDRDQzcxNEM4RkFECi06MTA0RUYwMDAxOEYwODQyMjA0OEZBMjcyNzgxNDM5MUNDOUU0MDdCRTBBCi06MTA0RjAwMDA0RkU2N0UwQkEzMUYwNkExNjgzRjA0NjgyNzFBRjBBRDg5Ci06MTA0RjEwMDBGNjQ2OUI5N0EwM0Q1RkFDMTA5RURBMEJBQ0U3RTVCRjcxCi06MTA0RjIwMDAxMUYzN0E0MUE0RUQ1OUNFRkQwMEEzMzEzMDdFNjlGQzI2Ci06MTA0RjMwMDA1Q0IyNDM1N0NENkRGMDIwNUY2QTEwRjZBMEJGQkUzRDU2Ci06MTA0RjQwMDA5MDM5OUVDODQ4RUQ3NjY3ODJEOUE1OThFRjYwNzYyOTlBCi06MTA0RjUwMDBBNkVEODEyNzFBNzFERDM5ODg3QzlDRTE1QzdCNDRDRjBBCi06MTA0RjYwMDA4NTFEOTAzMkVEM0ZGREI1M0U0ODU5RkNBNzQ5ODJEM0RGCi06MTA0RjcwMDBBQjk1NThCRUJCNDNFNTk2NzZBRUYxMzJEOUYzRUQwMTYxCi06MTA0RjgwMDA0NzEyNDM4REM2ODJCRjQzQzA2RkQ0RUI5NEUzMUUzNUY2Ci06MTA0RjkwMDA4RkZEQjIzQjY0ODVGN0Y4RTE4RkI3RjdCQkZBRDU0Q0NDCi06MTA0RkEwMDA3MDdENTY3ODMzRjhDQURFQkY1MkFBQzRDOTJFOTZBM0M0Ci06MTA0RkIwMDAyMTMzRkYzQjVEOUM0Rjk1NTI0RjlDREJFQkQ5Q0E3RDYzCi06MTA0RkMwMDBCQzdEODA5NUEzNUQxQzg4NkE3OEZFQzI0NDlFRTJDNEM1Ci06MTA0RkQwMDAzQzI4MDcyNkZDNEMxNEVEREE1REUyM0MxQUUyRTRBRjEzCi06MTA0RkUwMDA5NUI0NzgzM0YyOTFBNzQyQTFGMzAxN0IzQjIzRjU4OTc1Ci06MTA0RkYwMDBGNjlEOUY3Q0U3MzU5MjhGNzExRTkyMEY0OTYzRjI5MzY1Ci06MTA1MDAwMDA2MTlDQzdFNEM4NzgxNzRCMzdDOTkxMDk5OEJBOEUzOEE0Ci06MTA1MDEwMDA2Mzk5RTQ2NDlDOEJDQkIxMjcxQUQ1M0MzQ0Q0MjQyMzAwCi06MTA1MDIwMDBGQ0IzNDVCRjdEMDZGQzdBOUNDRUJERjI4NUJGM0E0RkVFCi06MTA1MDMwMDBGODY3QTdFMTlGRTE5QTQzRjA3RjBFRDM2Q0YwNEYxNzFBCi06MTA1MDQwMDBGMDk0NDI3ODAwRjdFREM4QTBEODJGQzAwNTlBRjk1QzFCCi06MTA1MDUwMDBBRTU3RjQ1QjJBRTAwM0I4OEVFODY2OTQ3NzA5M0NFNDI3Ci06MTA1MDYwMDAzQjlGRjk3OUNFQTczNzNEOUY0NjMxOUY3MzczQ0RFN0JDCi06MTA1MDcwMDAwQjYyM0VCRDJFQkU1RTc5MUFBMzVBODhGMTU1NDkxNkMxCi06MTA1MDgwMDBCQTJDMTVGRDZGMUVBMUNCNzVDN0M0NTc1RkNENzMxRTFCCi06MTA1MDkwMDA0QkQzRjM1ODIyRjhFQUQyNUNGMzg4MDk3OEZBOUMzMEIzCi06MTA1MEEwMDA2RjNGQzZDRjRDMTZFQjBEMzQ1OUU4QjJDNUUwMkIzNzM1Ci06MTA1MEIwMDA1RjM3MDBBRUI3RDBFNTc2RDE0RkJFRjM1OTlFRTc3QzlGCi06MTA1MEMwMDBCNkE0RTdGMzNENDE5NzVCNzJDREM3NTRCRjU1RDQ2RjhCCi06MTA1MEQwMDAxMzcyNDU3NkNCMTZENzhFMzZCNDNGMUU5M0EzMURBRTAyCi06MTA1MEUwMDAzOUU5RjE1OEJENEU3M0JEODlBQkJCOEQ3QTZCRjBCQjBFCi06MTA1MEYwMDBCNDY4QTQ1RThGMTg1RkQ4NDVGN0QzN0U2QzM1REExODk0Ci06MTA1MTAwMDBDQ0JFRjlFMkVBMTcxQUQwMUU2N0VEMzY1MEZGNTFCRTQ5Ci06MTA1MTEwMDA2RUIyNzZCNzk5RkI5RkJERkE4RTM2NTFFRjRFQUNENzgzCi06MTA1MTIwMDA3QUY2MTFBM0ZGNERFNkZFQjdCODUyMDYxQzc3MTMxQ0EyCi06MTA1MTMwMDA4RDIzRkRERDYzQUVCN0Q0RDVERkM2Q0YwOTJCRDQwM0Y1Ci06MTA1MTQwMDA3RTkzNUQxM0NBRUZEQ0M3MTU4QzI1MDZEMTVGMDkwNTc4Ci06MTA1MTUwMDA3RDY4Nzc3NEM4RjEyRDgzQzgwRkNDQzg3QjkwN0RCRjY0Ci06MTA1MTYwMDBDOTFEOTEyNEI2N0VBQTkxRjhDMzU4QUY0NDc3QUI0RUJGCi06MTA1MTcwMDBBNDVCNDNGQzQ3OThENzFEMTBDNUI4QzgzQkZEQjc2RTZDCi06MTA1MTgwMDBDMUZDMEFEOUEzQkFDMzY4NkY2OTc0MzRENDFCOTQyOUNCCi06MTA1MTkwMDA5RTY3QjUxNEQzNzE1RDNDMjRDNzlFNzE5MUREQzNCQTdGCi06MTA1MUEwMDA2NEUzREM1NEFBMjVCQjI1RjRERjgyQzRFRDBFMEVEN0UwCi06MTA1MUIwMDA3QUZGMjUwOTg0QzNDREUwQzJGOEUwRDUzNkI4RDg3OEE3Ci06MTA1MUMwMDBCNDJGRUYxQUM3RTM2RDQwODY1QTE5RkI3M0ZBQzJEOEExCi06MTA1MUQwMDBERkMwQjgxQjA5REU0NEFCNUJDNUY2ODkyOTM3MTJCQ0JBCi06MTA1MUUwMDBBQzJDNEFGMTc5QUUzOEMxREJFOUYyQTgxODhGNzdBNzY5Ci06MTA1MUYwMDA3RkQ5MjY4Q0I3NUJBMTE3NTE3RDgyMDNFNzNGQjk5QTBGCi06MTA1MjAwMDBFMEY3NDIzQ0I1QTQwQUQ1NTc1RkM0ODFGMDJDNTIyODgwCi06MTA1MjEwMDAyRTM5MTFEQzQwRkJEQkVFNDU2QzkxNjNFMzc2RDc2RUYzCi06MTA1MjIwMDBEMEIxRERDMTQ1M0U4QUFGRjMwNkZBMDBFM0FENEFDRjA3Ci06MTA1MjMwMDA1NzAwRTM4MEJDQzEzRUIyMzM0QkNFRjNGMTdDMDVEMEM2Ci06MTA1MjQwMDAzODI1OUZFN0YxQjIyRTE4NTRBQjU5NUE5QUUwNzFDNzJFCi06MTA1MjUwMDBEREI1NERGQTEyQjQ2M0U2RjI3ODU0RDAyMzJGNjE3Q0E5Ci06MTA1MjYwMDA1QjMxODg3RkNFOEEwMUVDREYzNUQxMDlDRTcwOUFCRUUyCi06MTA1MjcwMDBBNTdEMjNFRDhCNjIxOUU0NjVBNDVFMzJDRjdBQTlGQzhCCi06MTA1MjgwMDBFQTk1MjRFNEZDRUFGNUU1NTkyRjk5NjdCRDE0QUZFN0U4Ci06MTA1MjkwMDA4NjBCOEEzMkM1N0I4Q0YwRkQwMjg1RUMwRjIzQkVBREY4Ci06MTA1MkEwMDA5MDU5RkUyM0Y2NDkxNUI3REJDREY2OEEwQjk0QjRCREIxCi06MTA1MkIwMDA4MjdDRTY1QzlDMTM4RTE1NkZCNjA2Nzc5QkVDOUJBMEY4Ci06MTA1MkMwMDA1MjEwQTRGREM2Njk3MDFBQzlFNTE4RUQwRkI1RThDMTAyCi06MTA1MkQwMDBEREFFQjFFNzhCMTI5NjMyRjlDOUM3QUFCRjA2RUQzRDI0Ci06MTA1MkUwMDA3N0Y2NzJGRjhDMEI0M0E0Q0ZBNjdGNERBNDhCNzkzQTNGCi06MTA1MkYwMDA5MzdEOUY4NjY5QjNDODdGNERFNDE3Mzc0NzMyOEM1NzNCCi06MTA1MzAwMDBBRjcwM0Q1QzBCRDE5Qzc0RjAwQUY4MEZFMDk5M0Y2QkQ1Ci06MTA1MzEwMDA1MjJCQjNGQTE5Q0VDNzhEMzQzMENENjFCMzFCQURGQTIxCi06MTA1MzIwMDBDRTIzRUIwRDc0Q0U1MUNCRTMwN0REMjg4QzI4Mzc2MUZCCi06MTA1MzMwMDAyMEZERTI4Mjk0NUE0REU3OEI5MUMyMjVFM0QzRjJFMzNDCi06MTA1MzQwMDAwQThEMjdGOUY5M0Y2NTRFOTBFNjEyN0RDMjg4NDczQkVBCi06MTA1MzUwMDA5RkQ4RjkyMjYwRTM4QjRGQ0IyNzE3MUYyNzNFRjEyN0Y5Ci06MTA1MzYwMDA5Qzc5Qzk4RkJGMkZDRjdBQzkzQ0VCQTVGMkFCMTc0ODA4Ci06MTA1MzcwMDA0OEY5RDVFQkNCQjM1RTMyQ0Y3QTI5NUU2RkNEQkYyODJCCi06MTA1MzgwMDBDMkRGN0FGRTJBRjRDM0Y4QkZFOEIxRTRENzdDRDE2NzY0Ci06MTA1MzkwMDAyREZGNTJDMDkyRUYzOUQ3REEzRTcwOUVCNTdEQ0Y3OTlFCi06MTA1M0EwMDBENkY2ODFGMzc5RkIyNzNCQkU3QTM2RkE3OUYyOTU5M0VDCi06MTA1M0IwMDBERkZEOEQ3MjUyRUJDOTVEQkY2NEQxMTg3MkU1RDE2OTEyCi06MTA1M0MwMDAzRkU5OTUzNTQ4MDU3MUZENjJFQjk0NDQ2OTI0OTlDMTI0Ci06MTA1M0QwMDBCRTdCNEVDOEZGRjMyRUVFQzc0OUM4M0FFRDZCRkZEOTJFCi06MTA1M0UwMDBFN0Y5MDM4NUZCOEQ4Q0Y5OEUwNUFGQTE3RjdGRUYxNDY0Ci06MTA1M0YwMDBGNjk2RERGRTFBRjFFQjFDM0U3QUY0NTRENDIzODBDMUZDCi06MTA1NDAwMDBEMkEwNkE2QzZBRThDNzA1NUYxODQzNDVCQzM1N0Q3NDU1Ci06MTA1NDEwMDAzRTZERUZCRjBCQ0ZFQkI4REYyNUQ0NjQ4MkUzMzkzN0E1Ci06MTA1NDIwMDBGN0FCRkNCQ0FBMjM0NEU3QjU1M0VFMDhFMTNFQkQ2QkU1Ci06MTA1NDMwMDA5Mjk0RDFDRjcyNDRFMUU3ODJENTMxM0ZEOTE5OUQ5QTM4Ci06MTA1NDQwMDA4N0Y0NjFENzI0N0U4RkE5Q0JENTQ3RkVFM0FFMkE2QkM0Ci06MTA1NDUwMDA3QjhGQjAxRjhFMjg3Q0JDQUU5NTcxNDBGQjdGRjU5NDhFCi06MTA1NDYwMDAzQjlBNzE1Qzc3RUE1RjQxNjM3MDdGNzc1MjlDRTI0N0I5Ci06MTA1NDcwMDAzQkRDN0MxRkUwOEVFODgwRUI4MjQ3RDNFOUZDREQwRTRECi06MTA1NDgwMDA0RkMyODgxQjgyQkU1MDkzNjlERTRENkVDRTM3M0Y2Nzk4Ci06MTA1NDkwMDBGM0M5Njc1RUVGMjgwQUQ1NTcyMzFDN0ZEOUYwQjVFMzFGCi06MTA1NEEwMDAxOEYxNzVCOTlCRjdBQjg1QkM4NEFGODM3NTQwRUIwOUU4Ci06MTA1NEIwMDAxMkQyQzlFODQ4MjRENkYwRkYwNkMxQ0M2RkY2RjUxODIxCi06MTA1NEMwMDBDMDI3RjhFRDI4RTUzNUY5RTI5Q0ZDRDQyNUZDMzBFQjRCCi06MTA1NEQwMDBEMDBGQzM1MkVERUVBRkU1RTRFNzRFQjE5RUJCRTFFQjdBCi06MTA1NEUwMDBENEFGNUI4QjQ3NTBERkY5NkFGQkUwNTJDMjJGNDQ2MEI4Ci06MTA1NEYwMDBCQ0UwM0I4MkI3M0RFMkMwRjMwNTgwRjA2NjY2MjdGQTY4Ci06MTA1NTAwMDBDNjc1ODU1MzM5RkM2MjlFNUFFQjdBNzdBQ0VCRDk2QzQxCi06MTA1NTEwMDAzNzVCQ0ZGQ0U5RjVFQzIwRjQ5MDEzNzY4RDAzQUVDODMxCi06MTA1NTIwMDA3NEZGQzM1OENGQjRFMEM1MzlFN0RERDVDMkZENTYwMERFCi06MTA1NTMwMDBCNzQwM0ZDRUU3NjUyN0YxQjNBMzA2RjRGNThDNUVFRUU2Ci06MTA1NTQwMDA1QTk5RTIxQ0RDOTEzRTVDQTRDMTUzMDMyOTZGNjFGNkI5Ci06MTA1NTUwMDA3OUJEMkFGODRFMEJFNTFFNzdBREMwRjcxQUE0RDM4OUEyCi06MTA1NTYwMDAzOUVDMkM3NDM0QjM3REQ5QUI5REY3QUZDMkZENUJGMTQwCi06MTA1NTcwMDAwMjJFMDcyMzdDMkZGNzU5Rjg3MzU4RTE3RThEMkVBRjRBCi06MTA1NTgwMDBENjRBRjEyQzU1REMzRjYyRUZCNzVCQzA2OTk3QUI0NDVDCi06MTA1NTkwMDA5NkZCMzQ4NkRDRkU1NUQxQjgxRUYyRjQ5MURGQzE5MDQzCi06MTA1NUEwMDAyRjRERkI1N0QyNzM1RDkzREEzQzg4QTc4NEI2ODFGQ0ZDCi06MTA1NUIwMDBDNDA3NkIxNEMwN0IzMDc2N0QzMDAyODdDMEZGNTlEMEEyCi06MTA1NUMwMDBFM0MxRkI0QUREMkYzQkU5RkVBQkJEOUUxNzM3NjUyNkU1Ci06MTA1NUQwMDBCRjlFQkZENkFBN0ZDN0QyMjc3NzdFNEE3REYyMTM0M0VDCi06MTA1NUUwMDBFRTQ3RUIxMzVBN0YyRkVGNkNERjg1RjRFOUYyNzJGRjgxCi06MTA1NUYwMDA3NTQ5QTMwRTRCNENGM0VEMTFFMzJGNzY4Qjc1QTE4MjA5Ci06MTA1NjAwMDBDM0QxRTU1MkVCQ0Q3NDJBNjZERkVCQ0Q3QTMzMEI3RDQ3Ci06MTA1NjEwMDBCMkQxRkQyMjBDMDY5QzkzODZDMzNFQkY4N0RDQkM1RUU0Ci06MTA1NjIwMDAwOThFM0Y2RDZDM0M4Q0E2MDNDN0MzMkE3NzY2M0VGODkzCi06MTA1NjMwMDBBQ0U2RDNFNkNFOEY4RkVGMTZGNUVFMTY3ODM1RTYzNTZECi06MTA1NjQwMDA5NjlDMThGREY3MEI3QzE1MkZCMEU5N0Q1OUI3RDBERjdDCi06MTA1NjUwMDA2OUUwQUREMTU2Q0Y2M0FENjdFMDQ3NzY3MzdCQzU1ODNGCi06MTA1NjYwMDAyN0M2RUFGRjJEODVGMzg3QkRGRjZDNzJGODlCMTEzOUMxCi06MTA1NjcwMDBENEM5MkY2QjhDRTM4NjFGNDQ0OEVFOTg1RUVFOUUwOURBCi06MTA1NjgwMDA1MDEwMTgyNDdGMDFEQkVCRjM3OEE3NjAxNENDRTczQUM1Ci06MTA1NjkwMDA3NkZENjVFOEZGNkNGQUM4QkU2RjE5QUJCRTEyNTQ3Mjk2Ci06MTA1NkEwMDBEQTQ5ODY1RDUzMjJFRTREN0E0NDNDRjAwNjI5RjMzOUZGCi06MTA1NkIwMDBDRkIwOTAyM0E2RDhGMzhBRUJDMzMwMTFEQ0I3NDExNEU2Ci06MTA1NkMwMDBDNEZEQkZDODQwMkJDQjhGMEYyQjVBMzdGQTNGRTQ4NTYwCi06MTA1NkQwMDAwMzVCNTk3RURDQ0ZEQ0QwMUQ0Njk3Q0I4MjgxMDE4NkVGCi06MTA1NkUwMDBBRjM1MTE0RjE0Q0IyNzc4QUE0NkVFNjlGNTlEOEE3RTE3Ci06MTA1NkYwMDAyRDZFNzc4MUYzOTZEN0YwMUVGMEY4OEI2NDQwQkNCQTFDCi06MTA1NzAwMDA2MTFFQzU2OTFGNUNDMTc0RDhDQ0QxRjA4Qzk3MDEyNjhECi06MTA1NzEwMDA5NkIwNTRGODA3RThGQzEwQjc5NDVGQjFBRDhCOEI0QzkyCi06MTA1NzIwMDA3OUY0MDM3QkFDRUI1RUJFRjNCNkMzOTNBREREOThGMENBCi06MTA1NzMwMDBBNEY3QTFGQjcxN0MzN0U0NUVENzhFNzU3RTIzNzY2RDZFCi06MTA1NzQwMDA5RUYzMzJFRUEzMTlERkFCODY5REEwRTFGREY2NjE4OUUxCi06MTA1NzUwMDBEMjEzODZGRDk0NTYwRTdCMjk5RDM0NUMwQTFBMjM1QTc3Ci06MTA1NzYwMDBDNTcwMzFBNTEzODcyN0QyRjdGMkUxMzI0QUNCODYyN0RECi06MTA1NzcwMDA1MzFBMUFBRUEyQjQ3OEY4MTQ0QUQ1RTE5MzI4NUQyRkQzCi06MTA1NzgwMDBFNEIwNjg3ODM2RTU4REZCNkY4NUMzMzMyOTVGMzBGQzY0Ci06MTA1NzkwMDA3OTRBMDNDM0YzNzhCOTM4NEY1REJGMzIwNkU4QUY1Njk0Ci06MTA1N0EwMDA3MDFENjJGMkIxN0FFMTUyNUE5N0VDRjM1QUVGRTFFQkQ1Ci06MTA1N0IwMDA3MDg3QjgyN0RDNjFEM0RCRkRBMkZDNTEwRjk3RkJGNUE2Ci06MTA1N0MwMDA0MjJFNDA4RTgzRDk2RjdFOEZBOEI3QkUzQTQ2RjY3N0I5Ci06MTA1N0QwMDA4N0IxMUU5NjJEQjVBQzg3RjZGQTFENTlFRTI3M0Y2REExCi06MTA1N0UwMDA5NDBCNzhBMEI2NjkwQ0ZBRjBGMzU3NzczMDQ2RjcwNkI5Ci06MTA1N0YwMDAwMDYyQTQ5NzQwOEU1OUY0NkU4NzAxN0Y5RUY3MDhENzA4Ci06MTA1ODAwMDAyRjdDOUFGOEQ4Q0IwNDE5NDMwQkJENUZCOEJCRjkwMUM0Ci06MTA1ODEwMDBENDNCRTdEQzc4QzU2RTI2NzcxRkI4NjMzNzc5NzBEQzM4Ci06MTA1ODIwMDAyRjVDNDU0Q0Y3RkQ2NTM3ODc1MEJGQUQ1Rjc4MDdERENFCi06MTA1ODMwMDA2RjQyRjMxQkUzOUEzQkNGQjkyNUZFMDA3MTFEQTNDQjRBCi06MTA1ODQwMDA3NDZBNzdBQkM3NzQwRURBQjVGNEU2RTY4NzU4N0Y1QTA4Ci06MTA1ODUwMDBCQjAzMzQxM0JGNTZERUUyMDNDREFDQkYwRTk3OTY2MTk3Ci06MTA1ODYwMDBGQjhBMUI0QTJDREZDQkFGMjlCN0I0MzNFRTQ5ODQyRTE5Ci06MTA1ODcwMDBBQkI2RDQ1MzE3OUM2Q0E5NTczODdGOTZCNTlEMzgyNzgzCi06MTA1ODgwMDAwRkQ0OUQ2RTY5RTcwRTE4NzhFNUU3ODg4Q0ZFOTZGNUQzCi06MTA1ODkwMDBBMzUzQ0E0Q0M3Qjg4N0VCQ0I2QzdDNzNBMTg3QUY2QkEzCi06MTA1OEEwMDBFOUZFNzNEMzJENUJGRkY5REUwQjQ5RjM0N0Q2Nzk5MDAwCi06MTA1OEIwMDBCRDFCNEYyQzVBODBGNjk0NUI4REQxM0Q5NTYzQUY3RjE1Ci06MTA1OEMwMDA3Q0U3OTE2RjNEQkJCRTJBNDQ3RDU1OEFGQTQ0QTIzNEUxCi06MTA1OEQwMDA4MEZBQUExNEY1ODg5NzUyQTNERUIxREVCNzVEOEJGQTgxCi06MTA1OEUwMDAyNjYwRDIzNzczOThEQzY3RTA4NzgwMzdCN0JFMzk0NUNBCi06MTA1OEYwMDA5NDRGRjE3MjdEQjM1NkYwOTU5RDZGNDJBMkRFNUFENDVCCi06MTA1OTAwMDAzN0QzQzZENjM3MjE2RjZFN0QzMzUzOENGNzhGRDYzNzlBCi06MTA1OTEwMDA1REIzRUU4ODdEOEJFNUJDQTdEREREN0MzRjRCM0I2NzRGCi06MTA1OTIwMDBERTQ4NzlBNjJGNjQyRjJCRUYzQ0Y1OTZGOEZEMjYzRDM3Ci06MTA1OTMwMDAwMjg3RkY5M0YzQTVFMDg3QTJCOTU2RkQ2MUY0NUYxMERCCi06MTA1OTQwMDBCNkU5MTE0MzFFRkU0NkI5M0UyMkY4MzUxQjdERjY3RkFGCi06MTA1OTUwMDA0QUI5M0U3MjlDRTRGQTg4QTc3QjAxOUUyRkU2MkJEN0JBCi06MTA1OTYwMDBBM0VCMUZERjc5RTQ1QjRGNkY4MEQ0NTlCODJGOTlFQTFFCi06MTA1OTcwMDA0QkFFNDJCRjlCQTMyRkNDRUZFNUM1Mjg2RUE3RUIzOUZBCi06MTA1OTgwMDA5N0YwRjM3MEZGREYyQzRGRTQzQ0U0OUY1OTlFRTgyMjMwCi06MTA1OTkwMDAyRjZCN0Y3RDk1MzYwMUQ3Njk5NkZGMjI3RTM3RTVBMzcxCi06MTA1OUEwMDBCNjdDOTNBREZFNTc2Q0Y5MEI2REY1OUJDREU1MDk0REJCCi06MTA1OUIwMDA5QjgwRTc4Qjg5QkQyRTNBMUY0QzY4OEVDNjRDRkM3NEM5Ci06MTA1OUMwMDBBRTk3RjNDQjVFNEYzNDg2RkQ5RDk4M0M3OTAyRDI4NTJECi06MTA1OUQwMDBFNTJGQTVGRUJDQkMzRjk2QkZDQzk2NUY0QUUzQTdGMzdDCi06MTA1OUUwMDA1N0Q4Q0FBRkIyOTU1RjYzQ0IyRjMzRDdFRjNBMzJGOUFFCi06MTA1OUYwMDA0RTdBN0ZFMzk3MkVDMDdCMDk3NjM4NUYxMTdBQTI3M0M3Ci06MTA1QTAwMDBDQUNEQjEzNjJFOTczNzYxRkJDRUE5QjdDNDJGMDVFMkI4Ci06MTA1QTEwMDAwQkYyQTMzOTAzQjZGRDFGRTMzMzMzQkZFQzE1RkRGQ0Q2Ci06MTA1QTIwMDA3Q0QyOERCNDZGRUE2NEZCMjc4QTYzNDQzRjVFMDZGQzM4Ci06MTA1QTMwMDBGQ0RBMkJERUUxRDJBRUE0RkIwRjg5QjJFQkM5Q0ZEMUU5Ci06MTA1QTQwMDA1OUQxNDY3MTBBMDczNTg1Q0U2NzEzNTU5OURCMUI3RTAwCi06MTA1QTUwMDBBNkNFOEFDQ0U3MDhCRkM2MjA1QzkzM0QwMjM1RENGRkFBCi06MTA1QTYwMDA4NzYyNzBENDgxRUYwOTcxRkRCRUJBQUE4M0Y0QUI5MjRDCi06MTA1QTcwMDBCQTkyRkIzN0NBNjJFNERGQjg0RkQwNEYwOUM0QzlBRjRFCi06MTA1QTgwMDBFMEFFODg2N0RDRDc3NzhFRTBDM0VBRDdEQzY5RTA0MzE1Ci06MTA1QTkwMDBFQzIzNERGODIwMzk2Q0VCRkE2MDM3QUVBRjA5NkY2NjM2Ci06MTA1QUEwMDAzOUZCQjE5N0NCOTkyQjk0REZGOEEzRTdDRkQ3ODcyRDlDCi06MTA1QUIwMDA3OEE5MjVDM0JFMzZFMUUyNzFGMkZBMjRFRTA3OTBEOTQ3Ci06MTA1QUMwMDAzODY2QkY4MjdEQkM5MTc5REFGNkQ5RjcwQTNDMjVCQ0VECi06MTA1QUQwMDAzQ0NFREVFOENGMEVDRkMzQTJERUMzNUVFRTU3MzBFNjhCCi06MTA1QUUwMDAyNUFCN0M5Q0IxRkE3RjE2MkY2QkExMUY0MEI1RkIyMTIzCi06MTA1QUYwMDBBQzdBRUUxNjUxREYxNUI0RDZDQjg2OUY5NTIzRjhFMTJDCi06MTA1QjAwMDBGMTU4MDZGRjhFQzVFRkM2Mzg3QjExMkVEQUNGNjZERTYwCi06MTA1QjEwMDA4NzZCODdFNzUyRkNDNjQxMjhFOEVCQzY3REIzQUNCRTc1Ci06MTA1QjIwMDA4NjcxMUMzN0IxNkQxMkZBNDU1N0M5M0FDNTI3RTgxQTc0Ci06MTA1QjMwMDBBODBGRDJGOTI3M0Y3RkI4Qzk3OTcyMThGNTlENDdDNERECi06MTA1QjQwMDA1NTAwQzY1NTA0NEQ3MTg5QzJDRjc5QTdGRkQ2ODdCMURDCi06MTA1QjUwMDA3Qzg1RUU1NkYxN0Q5MzYxRUY2NDFFQjc3QTc4MDVDNUJBCi06MTA1QjYwMDA1Mzc0QjE5RDNBOEU3QkM4NUI5OUM0RjdBQzlDNDUzRDlDCi06MTA1QjcwMDA2NENGM0I5RDMzRTM5OUUyNEM2NTFGRTdEQkIzMEVBRjg3Ci06MTA1QjgwMDAyMzNEREJBMUYxN0IzNzFENzJDQzUzMzIwRDVERDUzQTNECi06MTA1QjkwMDBDOTZCOTc5NjNCN0VEMTFFMDdFOTUyRURGMTg3NTY3QzgzCi06MTA1QkEwMDA0REY3NzFGQTI2QzRGQTlCRjA4NjlCQ0RGMTQ5MjE5RkVGCi06MTA1QkIwMDA5N0NBODdCRDU2RjgzQTExQkUwMEMyMTVBNzc4RDI0NERECi06MTA1QkMwMDA4NUMzODE3ODNCNUVGMDE5RTMyQTU1OEUyOEUyMjUwOENCCi06MTA1QkQwMDAzMThBNTdGMTg0NjQxQUQ3RTFFN0Y4Q0QzNjJFNjhGMjlFCi06MTA1QkUwMDBGQkU2Rjc2MzhFMTczRTQ3RDZERjE4RTcyNzE5N0NDNDFDCi06MTA1QkYwMDA0RkRBMDI0RkMzMzZDQzNGRTdBNEY1RDQzRUNFN0U1RkVBCi06MTA1QzAwMDBFQzM0OUZDOTJGMkNBQjMxN0E3N0M2RThFRkRDNzEzQ0JFCi06MTA1QzEwMDBDRTVCQUUwMEYyRTMyQjEwNkRBQzYyRjM1RjU1QzFERkRCCi06MTA1QzIwMDA1OTk0MDM2M0M0NDU1NEQ4RkQxNUQ5Q0VFNUY4Rjk4OEQ1Ci06MTA1QzMwMDA3MTlFNTNGRjA3M0VBRTRGQzQwQjE0QzAyMDA1OEIxNjU4Ci06MTA1QzQwMDBBMTRBOUY4Q0YxMDI5QUM0REY4MTA4NEIzQ0FFN0MzRTk2Ci06MTA1QzUwMDBDNTkxMDdCRDlGNzVCRjhCQTk1RjI5QjIxRThFRkE4RkI0Ci06MTA1QzYwMDBBMTVGNzk5MEZDNUM5Rjc5QkY2M0MwRUI4NUJCQTk1RkE2Ci06MTA1QzcwMDAwQzREM0Q1QTlBRUUxN0Y1MkYzOTk1MEUxRjNEOEFFN0M4Ci06MTA1QzgwMDA2NjRFMzBGRTcxM0I1Qzc2RjA3QjU1NTA1RTQ4NzE4NzA2Ci06MTA1QzkwMDBBQjgzRDc3QkNDNzQ2REY1NTU1QkQ2NTc0NUVEQjg0RUNECi06MTA1Q0EwMDAyQUM0N0I5RkQ3NDQwNjczRjBFNTZBOTQyM0Y0MjM1NkY1Ci06MTA1Q0IwMDA1QzE2MTlBQ0NENUVDRjgwNTM2NkQzQ0ZFNDBGRUQ1MEE4Ci06MTA1Q0MwMDA2MkM5NTZCNDE3MkIwMzNDNUU1NThFRDNGOTQ4QTc1NENFCi06MTA1Q0QwMDAzMkFCQkJDRUM0QkYxNTRBMEFFMTJBQTg4QkU4MThDRjY1Ci06MTA1Q0UwMDBEODU5RUEwODYzMUM5NjBDM0RGQkU4N0QyN0U3QTI3MEIzCi06MTA1Q0YwMDAyRTc5OTUyQkU0RjdDQ0YzRDlFQ0IzQzY4MUFDMUE4MzlCCi06MTA1RDAwMDBERjU3MEI3RDlEQUREQ0E1ODQ2Mzk5RjRGMEUzM0VCMUQ0Ci06MTA1RDEwMDA4RUY5MzI5NzdGRUM2Rjc4RDQ5NzYxREREOTIxRjQ1NEY2Ci06MTA1RDIwMDA2NzMxNTNBNTlGRTNFQzgzN0MyMDU3RUM3OTBERjFCMEVDCi06MTA1RDMwMDA3QURDMzlCOUY1OTM2QUQ1NEZGRkU1OEZGQzA0QzdDOTAyCi06MTA1RDQwMDAwMUM3QjM5OUUwMDA3QzRDMjEwRkJCNUY1RDQwQzE4ODY3Ci06MTA1RDUwMDBFOTc4QTAyMEU3NkI4QzAzOTJDNkQzNzkyOEZENUI1QkMyCi06MTA1RDYwMDA3NzVGMEFFRDZFRDc5MjQwMDRFOUU3OEM2QzAzNUM0N0RECi06MTA1RDcwMDA4REI4MjA2N0M0RjdCNjgzRTgzOTlGQzcwN0Q1NzIzRjRGCi06MTA1RDgwMDA2Qjg0RkQ0NzcxNjRGMzczQzc4RDM5NkRGOTVGRDlFOTkxCi06MTA1RDkwMDBEQ0YyMENCRDE3NjFDMDZGQzRBOURCRTdGNUE0QkZFMTVECi06MTA1REEwMDAyRERGOUM0Q0Y4Qzg2RjFGQjQ5MUYxMEIzMDdFRDlDMDI5Ci06MTA1REIwMDBENjc3ODYxNEU4NkI1MTI5REZEQjEyQTI3QzRGOEI0NjI1Ci06MTA1REMwMDA2OTdCNEIyREE1NkJCMEU5M0M4Q0ZGODgyN0FBNzAzRkZGCi06MTA1REQwMDAxMjdBMjA3NDM5QUJCMjExNjk0MjcxMkQ1QjE3RTIzRTIxCi06MTA1REUwMDBCMjdCMjQwRkJBQzRFMEVFQzZGQkYxQ0MwRUZEQUI2RjY0Ci06MTA1REYwMDBDMzQyQjQ0M0JCQzVCQjNCQTA3NzJDNDRCQjJDOURCRjY3Ci06MTA1RTAwMDA2QjM1REE4NUREMjI4RTU2NUQ3M0RGNDJEQzNGNkU5QzlBCi06MTA1RTEwMDA2NEVDOTMyMzlFQUY5QUVDQUYyOTdFMTdGMTFGRURENTZBCi06MTA1RTIwMDBBOEZEQUFENUQ4OUY1NzE2NzlEOEJFRDA5QTg3MDhDMkEwCi06MTA1RTMwMDBFM0Y1RjBGQ0I5RkVBNzA4MUU1MjAxNkNCQzBCRkM0RjQ5Ci06MTA1RTQwMDA1MzdFRTMxNEUxNzc5OEQ2MzQwNjFFQjkxRkEzQzNBNzg3Ci06MTA1RTUwMDA3MTNCNjg1QTA5RjkyOTk0NzAxOEFGMTdDMEM2NjIwMURFCi06MTA1RTYwMDA3NzlFRkRFMEZFODdENkJCOTczM0FGOTc2OUI5MTk2MzdDCi06MTA1RTcwMDA1RDEzNzA4QzQ1N0Y4NjBFQjIyRjUwMEZFQjM4RUUyQkUyCi06MTA1RTgwMDBGQ0ZDRkM3ODhGQkJEMTc1NkM3ODUxRTYwRUU5NzhGNTk3Ci06MTA1RTkwMDA2QkE3MkY3Njg2OUZCNTJGODhGNEE3QUE1OEJFNzA1MTlFCi06MTA1RUEwMDA0QTI3RjFDRDczREMzMkJGQjg0RkM2RTY4QkYyNkZFMDA0Ci06MTA1RUIwMDBEOUIwM0JBRTQzM0E4RTRCRjdFNzBBNDZFOEJDQ0QyQjUwCi06MTA1RUMwMDBERTEzQ0UxN0RFQTUzRUQ1RDIwRjNDRDY1MDk2RUJEQ0M2Ci06MTA1RUQwMDA2NTVDRDQ4MTQxNDYyM0ZBQTJCNEQxMjc4MjM1NzhCRUNECi06MTA1RUUwMDAzODUyNjJDOTE3Q0QyREI3RDQyRjA4NTc1QkNBNURFQTY3Ci06MTA1RUYwMDBDOTk2RjJCRjk1NEU1RkY3QTkxNkJFOEVEQUU2QjVEMDA5Ci06MTA1RjAwMDA1NjlFNkZCRkRFMTU0RTBEREY4M0FDOTIwRDdCNzQwMzgyCi06MTA1RjEwMDBERDRCM0U4ODM4NDZGREQ4Mzc5M0VFRTk0MjhENzEwRjUwCi06MTA1RjIwMDAwMTI4NUVDNUFCNDU4ODNGN0QxMEE2NzU1QUE5QjBEQTM5Ci06MTA1RjMwMDBBOTcyRDA2QUE3ODY5QUY1OTREMTJGQzY2NzdCNTcyODk1Ci06MTA1RjQwMDAzNEVFQzgzQTE1RTBGMTIwQzYzOTE5RURENzI3QTNBQUQ3Ci06MTA1RjUwMDBGQkRFREUyQURFMkU2Q0JFN0Y2RjRGNjU3MTVFNDY3N0ZDCi06MTA1RjYwMDBFRkFCQzYzRTRGQjU4RjEzRkE0QUVFMzgzNTdCN0QwODRFCi06MTA1RjcwMDBDOERBMDE5M0ZDNjU2RjI3QzMwMUQzQkIxQTVCOTFGNkE2Ci06MTA1RjgwMDA3M0QyRjg4RjZDNUI0MjdFMEYzNzMwM0I5QUUxNzk1NUM0Ci06MTA1RjkwMDBFODQyODhCMTc5NzY2MDE1NDZCRjA0QTY4Q0NGM0I0MkIzCi06MTA1RkEwMDBCMzU0OEFDM0Q3Mzg1RDFEMUUyRTI3REZGMTZCOTY3ODU4Ci06MTA1RkIwMDAwRTY3ODBDQjg5NTE2RjJDRkFERkU0ODQ3OEE2RjVFQzZDCi06MTA1RkMwMDAxNTNGREYyNzFGQkEzNUZFMjdEQzVGRUEyRjAxQkRFMzRGCi06MTA1RkQwMDBEQURGMzI0Q0VGNUNENkE1Q0U3NUEyREZFNDM1RkY3ODcwCi06MTA1RkUwMDA5QTRGRERFRTg4RjM2QzUzM0Y3NUMwREZGQjY2RkY5Qzc0Ci06MTA1RkYwMDA2NjdGQUFFMTFGODZDMzFFOEEwQkRFOUVFMjcxQzFEQkFCCi06MTA2MDAwMDA1M0ZGQkRFQjI4RTZGNzNBRTg1REQxRURGQjcyREI1N0I1Ci06MTA2MDEwMDBGREMyQkUzMkVBRjVFRkU1RkJENTdFMTlGQzI1QjlFQ0YxCi06MTA2MDIwMDAxQzcxRkY2RDY2Q0ExNjc3Mjg4MzEzRTk3RjY4QTVFNkExCi06MTA2MDMwMDA0NDdCQTdCRkM1MjNFMUJBM0Y0QkNDQjMyRTE1NzFFMjE5Ci06MTA2MDQwMDA3QTNBRDZCQzc2REFFODZCQ0MxM0VGMUZFMjNDREIwMzdFCi06MTA2MDUwMDBGQzNFNjBCQkNBRTY0QjdDQ0RERkNCQ0UwNkVGQzhCRUI0Ci06MTA2MDYwMDA1RkNEOEMwRkE1ODBCRjdCQTFCODYyNkFBNjc5OEY3NUMyCi06MTA2MDcwMDA0RkQxODBBRjAzRTE5MzMwRTU3MDc1MDQzOTFEM0E0MjhBCi06MTA2MDgwMDBCOUU5QjA0QUMwNjdENDZCMEY3MjNBQjQzM0ZCMjAxRjMyCi06MTA2MDkwMDA3OEU0ODAxNTFFNjZFMzQ5NjgxNzA2MjBEOTQ4NkY5QTkwCi06MTA2MEEwMDBFOUYwMTJFRTgzNDg1NTY4ODg4NzlEQTk3QjEwNUVCQzk1Ci06MTA2MEIwMDA3NzgxRjY3QzcxOUQ3NDM5REVGQjg4NzFGQkIwQTAyRTcwCi06MTA2MEMwMDA5NURBMTEyNEYzMjQ4QUY3MzI0QTA3MDc1MjZGQjFGMkE2Ci06MTA2MEQwMDAzRENEN0U3QUVDNDlCRDdDN0YwQUZCOTFENTIxOTI5RjE0Ci06MTA2MEUwMDA2RTFDOENFQ0EzQzkxRDY4RUZBQ0M2M0Y5OTRBOUZEMENCCi06MTA2MEYwMDAxMzNBMDdFRDBGMTlCODVFNjAxMkE3QzlFMzg1N0Q5MkM4Ci06MTA2MTAwMDA0MURFNERFN0ZCRDI1MTc3QkE1RDM2QkNEOUVENEUzNzUzCi06MTA2MTEwMDAzNEU1RDY1N0UyQkM1RjY3RkZBMUJFNTE2REY3MjNFQ0IzCi06MTA2MTIwMDA3NkFFM0QwRUZFMENENEU3RTNGMkI4ODdGMTI5QzcyOTFECi06MTA2MTMwMDA4MkZCM0NGODFFODJCM0Q2QTFFMjNCQ0M0Q0E1MTdFMzEwCi06MTA2MTQwMDBGRDFGN0Y0NDg2MTRBMzY3NTE2MDkwOUVDRTFBMEJFRjBCCi06MTA2MTUwMDA0Q0ZGMzVGMkI4RDE3RTMwREYyMzZEMEE3MDNGNTBCMDZFCi06MTA2MTYwMDBBOTRFOTJGODNEMDIwRERGREQwQzM2RUQwRDY3RTI1M0NFCi06MTA2MTcwMDA4MzNGNDdGMjgxMjc0ODNGQUU4NjY0MDJFMzRFRjQ0NkYwCi06MTA2MTgwMDAwN0FENkJEREI1RDVDNUU2RkREMTc1MDE0OUVDNDMwRDE1Ci06MTA2MTkwMDBGQTgzMjY5RjlBQTYzRjlCNUZDNDNCRTNFRjQ3RkY5MjlCCi06MTA2MUEwMDA0NTU2QkMxRjJCNUQ1NjA2Qjg1RTFBOEJGRTlGNzYxQ0FCCi06MTA2MUIwMDA4MzZFQTNFNUEzNTVEMDZEMjNFOUJGQUU5QUZDRjQ0QUU0Ci06MTA2MUMwMDA5QTZFRjc5MUJDRkE2QjIxOTJDQ0QwQUU0REQwQ0I3RUJCCi06MTA2MUQwMDA2RkRGMDM3MUMwREZBMzcwOEE3ODU0RTc4NDUzOUJCN0U1Ci06MTA2MUUwMDA0MjBFQkE4QzhBQjNFMkZEMzgwM0RDOUZCNjU2RjI4NUM0Ci06MTA2MUYwMDA3MUE4QjU1OUZDQ0IzNTA1OTJEMEZGODMzQzlFNkZERTZDCi06MTA2MjAwMDA5RTEwOUUxRkY3Q0MzOTEwQzI3MzhFREU0RjMyOUY0MzEzCi06MTA2MjEwMDA5RTVCMjBDRTQ1MjJBRkQzM0VBMDc3MEVGNzBCRTIzRjI4Ci06MTA2MjIwMDBENDNCMzdGMTNGQTE1QTdGNzcxM0JFNjNCNkY2NERCRjFCCi06MTA2MjMwMDBDNTFFRUE2OEM5RUQ2RjUwQ0FBRjg4QTE5RDcxRTg2REFGCi06MTA2MjQwMDA0OUMzRjU0NjJBNUY3MTIyQzIzNTMwNkYyOUJEM0JEMjYyCi06MTA2MjUwMDA1MUI3OTNDRTYxN0FDMkI5RTk2MkM0OTk3Njg4QjhFODM5Ci06MTA2MjYwMDA5MUYxQjM5QzFCMUUxMkYyNUFBRDVGNERGNjY1NkZEOUNBCi06MTA2MjcwMDA0QjM0Q0VEQUJBRENFM0UwN0I1OUI5RUU0NTc5MUMxMDM5Ci06MTA2MjgwMDAyMzdGQjFFRDVDRjcwRDMxREUxQjAxNzEzRUUxOEE3RUFCCi06MTA2MjkwMDA2OTcyMTVGRTJFODc0RUZFQjFGMUI1RDEwMTA3QzM1QkMxCi06MTA2MkEwMDA1MzQxRUNENTAwQTM2QkVGQkMxQkNCMTAwRTdDMjdDNjczCi06MTA2MkIwMDA0Q0Y3MjBGNjlGMDFCRUYxMDUwRThCREQ3NEE4M0FGRTY3Ci06MTA2MkMwMDA1RjJCRUJGMEY3MjlBNkQyQkJGNTQ2QkQ5RTJDNzFFQ0Y3Ci06MTA2MkQwMDAyNzFCNzRENkJDQjRFRkU5QzBCODdGMDY1RjRGNTk3RTY4Ci06MTA2MkUwMDBGODM3RTg3QzE2M0NFRjk5OENFREIzQzRGOTFBQTk3RDE4Ci06MTA2MkYwMDBCRDFGMEJFRjc2M0NGNEJBMDYyOTBFQUE1N0NBM0M5Rjg1Ci06MTA2MzAwMDA3MzBCQjhEQ0Y1QUU0Q0YxNzNCNTc5MDdFODVDMkQ5MEYyCi06MTA2MzEwMDA3QTlERTIyN0JFM0I2NzFGOURBQjU1MTY3MDdBNjAxQ0M1Ci06MTA2MzIwMDAyNURBNTE4NTczRjk3QjgwRDlFNEU4NUU0MTNGNTlCNUEwCi06MTA2MzMwMDBENjAzNzlEMDcyRUVCMzI1MjBDRUNCODJCOUZCMzNFMDAxCi06MTA2MzQwMDAwNENGMjAzRkVGMTkyRDk3QjRGRTNDRDhGM0MwMUU3QTNFCi06MTA2MzUwMDAzNzA1NTI3NEFFRDBGMThBMTNFRkE2OEVFMDYxOTQ1Q0RCCi06MTA2MzYwMDAyNUY4RUZDMkY0RTJDNkUzNzQxQ0U3RDYwRUY0OTNGNDBBCi06MTA2MzcwMDAxQUU3NkMzM0Y5QkU0OUFFNEJEMTM5OUJBNzQwQjNEODZECi06MTA2MzgwMDBFQjgxQjBGMTJFNjI3RUYzMENFMDVBQzRGREMzMzJBRTU1Ci06MTA2MzkwMDBBQkU4OEY0N0Y4REE2NzVFNDhGRUI0NkM3NEZEOEUzRjU5Ci06MTA2M0EwMDAzNkJCNjA5Q0Q5QUZDRkY3NURGRjZDN0M3ODI4QTA1OUQ1Ci06MTA2M0IwMDBFQzQzM0IzRkJBRTExQkM3QjRBRkNCRTY1RjNFMjRFNEZFCi06MTA2M0MwMDAzMzg4MTU0REZCQTQ2RjE2Mjg5OUYxRkJENjQ1NjNFMTgwCi06MTA2M0QwMDBGNzlCOTlGMTdCQjEwRkUxM0Q3NDdCRTZERjI3MzJEMjY5Ci06MTA2M0UwMDBCQjZDRkFFRTJFMjMxRTA1N0YyNEE0OENGQUFCQkEyMEQ4Ci06MTA2M0YwMDBDM0JDOEQ3NUY1NTA4MUYxN0U0RkNDODdFQjQ2QjUzRTIxCi06MTA2NDAwMDBERjg3RTMzRkQ0NzNBOTBGQzc3RDY4NTM2RTdBMUFFMzIxCi06MTA2NDEwMDA2RjExRTc4QjQ5RjFFRTg4NTE5RTE0N0NCOUQ1QTZFNzQwCi06MTA2NDIwMDA1RjE2NzI3RDhGOTBBRjg3M0M1MTFGRkQ1RUM1QUU4QkFFCi06MTA2NDMwMDBDRjNCODlFMUFGOUFGMTA1QkExNEI1MkUyOEM5MzU3RTU0Ci06MTA2NDQwMDA5NTZFREI5NzFDRTNCRDk2REUwMjVCN0M2RjlFRjczNDk2Ci06MTA2NDUwMDAzRjJENUVCNjIyRkY5QzhFNzhGODc3OTI3QjY3QUE4OEU0Ci06MTA2NDYwMDBFNEE5RkExQUNFMzdENTk3MERBNTcwNUYzQjc5QTMyMzFGCi06MTA2NDcwMDBBOTUxMUM0QjhDRjA1Mjc2OERBQzUxNEM5QkI4Rjc3QURECi06MTA2NDgwMDBBMjU4REZDMTc5OEJBMzEyQ0JGMURFQjg4QTZFMTdGNTYzCi06MTA2NDkwMDA2QjE0MEY3M0I3RjVGNzNGMUVGMjQ0REExNEI0N0YxMzkxCi06MTA2NEEwMDAxNEU5MDhENTNERDZERkNCOTgwOEE2REZBQjYwRTM5NkFDCi06MTA2NEIwMDBCREY5MkVGRDdFNEE5OUVENzc0MTNFMkRERTc3RkM4M0I2Ci06MTA2NEMwMDBGMDlFOTRDMTY3RDZDNzlBMDREMTRDN0FGRjNGMDU1RjBFCi06MTA2NEQwMDA2QUFEQkJGOTNCMDZGMTAwQkM2MzNBRTc2MEY0MkI0MUJGCi06MTA2NEUwMDBCQjYwOEJCRUExMUVGMUE5MjcyMDNDMjU4MzFFRkI2RDNFCi06MTA2NEYwMDA4MURGRjgxRDlGRERGOENFODJBQjgyREYzRjVCQkRFNDFDCi06MTA2NTAwMDBDMkMxMUQ0QzY1NkRCOUE1QzE3MjFGQzBBNDE3N0U1QkM5Ci06MTA2NTEwMDA0MEVCMTNENzBCNDlCRDg5QTc4NzlEQzQyNzUzN0EyMDI5Ci06MTA2NTIwMDA4OUJGODNCMjYwNjM3Q0MwODVBMjdFMEQ3Rjg3QkEyQzUxCi06MTA2NTMwMDBBMTRCMEFDQjU3MzNGMzk1NzUwRjkzQUYwMDVFN0YzMUI0Ci06MTA2NTQwMDAyNDIzQzQ0N0YwNkE2ODdDRkFGNzRFMkEwN0FGMUJDMEMxCi06MTA2NTUwMDA3REYxMUVCNjJGQzZERjUxMzE3RUFGQzRFMDk3ODk3MTQxCi06MTA2NTYwMDAyQjdGNEM0OTU4RjMxMzZDRkM2MjZGNUZBREMxNzkzOEQ3Ci06MTA2NTcwMDA3RTREOEYwMzcwNUYzN0FFRDk1NDFGRkI4M0ExNzcxRjA5Ci06MTA2NTgwMDA2NkUzNEZEOThEMEYzM0IyQjQyRjc3RkYzMkM0NUM4NUU5Ci06MTA2NTkwMDAwQzlGNEZERDFBRjg2NTJEOUJFMEZEM0QwREE1ODg5N0ZBCi06MTA2NUEwMDA4NzNDNDA3MTExMDdBMzFFN0E3NzAxQTI5OUNGOTM0NkM5Ci06MTA2NUIwMDBGMUFENjFGNzY3QTk5RkQ2OTdCQzlFQjFFRTc1QkUyOTc0Ci06MTA2NUMwMDBGMTc3MkUyQUQ1QjdBQkQwQ0ZGOTJBRkZEREJBRjRCQkNECi06MTA2NUQwMDAxNUE3RDNCQjE1MjE4ODczRkIxMUEyOTRCNjBCRkU1NEVCCi06MTA2NUUwMDBDRkFFQTg0MjdGNjhFMjJEQkY4QUY3QjNENDUyQUIzRjRCCi06MTA2NUYwMDA0RDJFNjlBNEY3QzA0NkVDRUUxMjY2NzdCM0YyNDRCMUIzCi06MTA2NjAwMDA1NThGRDYxNzcyQkIzNTVDQzhFRjg1QUE3RURFMEY3ODMyCi06MTA2NjEwMDBGNDMyQjNERURGNTgyODU5Q0IwMzdBRDk5NzRERTUwRDE0Ci06MTA2NjIwMDBBMjdENDJCQzVCN0U1NkUxNzk5RDY4Q0ZBODEzNTlGRERGCi06MTA2NjMwMDAwQ0ZDQjk0MDhDNkI5NDQzMzBCQzBGREZGRkQ4RjQ4RDU5Ci06MTA2NjQwMDBBNjM5RTZGNTdDNjMyMTNGREY1MTRGMTBFMzU2NjQ4NjlGCi06MTA2NjUwMDAyQjUxQzVDN0JENEQ4Q0JCQjFEMEZBNkUxQ0E4M0MzNUMzCi06MTA2NjYwMDBCRURGNTE3MEEzQjQ5RkUxRkI5MDBCMUEzMDVFNjVENTdECi06MTA2NjcwMDAzODQ3MTJERjREQkI2OUJDMTExNzk2NUI0RjE4NzQxODcxCi06MTA2NjgwMDBDMUI3Q0FFMzkxQ0FBRjUwNjczOTMzQzhCMTkxNkU2RUQyCi06MTA2NjkwMDBFNDdFMkFGQkY3NEJDNDNDREFBRjY4RThBQjYxNzA0NTk3Ci06MTA2NkEwMDA3NjczQjk3MzA3MjFFMzM5MTA5M0VGNEIwQUU3NjQ1ODA3Ci06MTA2NkIwMDBGN0RCMUI2OTFGNzdBODM4RjdCQTZGREZFN0NBQzJCRkRECi06MTA2NkMwMDA2OEFGRDcyQUU4QTRCRDFDQTJBN0I4REI0M0RDOUY2ODRCCi06MTA2NkQwMDBGNDdGQTg4Q0ZCMTVFREVEQkE2Q0ZEN0JBMTI5ODI3MUNFCi06MTA2NkUwMDBDNjc4QkU4QUU3QUE0QTBEMjRGMUJFQTkyRkQ4QTc1NkJDCi06MTA2NkYwMDA2OTE4MUZCMDRGQzdGRDkxMDYwQzhGRTg2NzBCMDNEOUNGCi06MTA2NzAwMDA3NUVEMjFCRTFGOTU0MzdERjUwRThDMjc4MTQ2RDU2QzE2Ci06MTA2NzEwMDA4Nzk1OEJERjU1MzRGMkFFNDBBQ0I1OTBFQ0ExODg0NDQwCi06MTA2NzIwMDA3ODkxRjk3OUZFMjE1N0YyNUNDNEU3QUEyQTA3NjQ3QUM2Ci06MTA2NzMwMDBBN0JGQTc5MERCQjk5QkI1QTYxN0FBMzJEMDZGN0RBMUUyCi06MTA2NzQwMDA2NkIxOUZDQjg3QjlGRDlEQUQ3RUJBMUU4NzZGODQxRjUyCi06MTA2NzUwMDA0MzNBREQzRjAwOERGMzYzNTM0MUU0RjZDMjRDRTdCN0EzCi06MTA2NzYwMDA4NjVFMTE3RUM4NEJFNzBBODUwQkRBNDVCRjY2RjNCODMzCi06MTA2NzcwMDA3MkFGOEI2MkQzQ0YzQUJDNjUwRkVBNUYyN0QzQkZERDIwCi06MTA2NzgwMDBGNDNCNzI3RDdCRDAwRjc5MTlERTdGNjJGOTJCREY5Q0ExCi06MTA2NzkwMDBBRTU0QjJGMjU3Q0I5REUyRDFGOTY4MjE4RUZCMDEzODlECi06MTA2N0EwMDBDODVGRjIwMUJDNTQzOERCNDRCRjI3MEIxNUJFREUyNEEyCi06MTA2N0IwMDA1Q0E0NDcwRDdGRENFNTdEMkU4QjVFRkRGNjI2NkI3RUFGCi06MTA2N0MwMDAyOTM0OEQ0NzNGQzVEMjhEMkU0ODMyRkM1RTY5RDNCQjNDCi06MTA2N0QwMDBGNzE3RjI3M0EyNkY0M0JDMDNEN0NGRDVFMkZDRUZEQTExCi06MTA2N0UwMDA5RjRDNTc1MDZFQUU5Q0FENTYzOTRERjdBRTlFMkRFNDgyCi06MTA2N0YwMDBGNkREN0I4QzhGMzQ5MzlDNUQxNTQ4MkFCODhGN0I2N0MwCi06MTA2ODAwMDBGQkVDMEIzRjBGRDg0RkIyQTMxQ0ZENjlDNTk5RTMwMDA5Ci06MTA2ODEwMDBCRjk1QjBDMjM5RDYzQ0VDNzAxQkU3NzlEOUUwOTBCNzkwCi06MTA2ODIwMDA0OTE5RkQ0MkNGMTU0QTE2N0ZGQzJBMEY3RjBGMjlCMjY2Ci06MTA2ODMwMDA0QTA2RUY5OTE4ODcwNzc0Q0Y0RjdGQjM4MERFRUZENkYzCi06MTA2ODQwMDAxQkUyMTQ1N0E3QjdCOUQ1NTU0MThBQjNBMzc4QkExNTM3Ci06MTA2ODUwMDA4QzYwRjhGRUQwMDFDMTdGNDY1QzFEMzMyODRFQzM3RDlECi06MTA2ODYwMDBEQUI1OUU0MTA1RkRDQUNCRTU3ODIzRkU3NDlBNzEyRUY4Ci06MTA2ODcwMDBFMzc2QzUyMjEzMTlGQ0FFNjdFQTUzMTNDMTUyMkY5MTc4Ci06MTA2ODgwMDA2N0JEQkQ1Mjc1NUVGNTFBMUQzOUZBRkI1MEU4Qzk1RjQ4Ci06MTA2ODkwMDAzQzc2QkY4MkVCQ0YwNzhGQkVGRDQ1OTRDM0FCOUY3NTlGCi06MTA2OEEwMDAwMjVFQ0RGQkYwQjEwMjQ4RDFGRTIxQTlBMDlDNUZCNUVDCi06MTA2OEIwMDBERDk5RjExRDA5ODYzMUVBRkZFQTFGMTU5MDVFQkNFQUY5Ci06MTA2OEMwMDAwOTc3NzIxMTZCN0ZENUQzRUZDQzAwMjY0RjFGQjYwRDIxCi06MTA2OEQwMDBFRDk5ODhGODdCNTRFMkU3ODVGQUUwMEM1QzlGQUU5Mjc0Ci06MTA2OEUwMDBFMTlCOTlERTFERjMxNjcxNzk3RkZGQTdGRTY2QTQ5RkQ5Ci06MTA2OEYwMDBCNDZERTAxMkVBQjdGRjIyOTdGOTVEN0MyOEUyRUIwRjU2Ci06MTA2OTAwMDBBQkM3RTMyNjFGOTE5MjUzMzJFODBGNjMzRkY0RkUyMzk3Ci06MTA2OTEwMDAzQ0FFRTRBQTY3NUM0OTBDMDlCRTZBREI1NjI1QzZFMEJBCi06MTA2OTIwMDA1OEJFRUQyM0UyOTdCMzdGRjQ3ODIxRTI2MUY5MzM0RTRDCi06MTA2OTMwMDA4QjFENzFGNThGM0VFOTM4OUREMUY5NkEyNzBDMkQ0MkU4Ci06MTA2OTQwMDAzOTc2MUVBNkZDQzE4ODY3Qzg0OTcyQ0RFMzUzOTY5MTdCCi06MTA2OTUwMDAwQTYwRjU5RUZDRkQzOUJGNjZFNUVGODU5QzgwMjFBRTlGCi06MTA2OTYwMDBFRkVERkI5REYyMkNFNjYzMDE2NkI5NjFGRjU2QkU1RTVBCi06MTA2OTcwMDBCRUVEMUQ4NTdFQzdDODAxNDMxNTlGQzdGMzBGQUI5REI0Ci06MTA2OTgwMDA2NEFGMEYzMEE0QTA5RTVBREVERkY1OTE5M0YxREJGMkU1Ci06MTA2OTkwMDBFRDFGQkM4MTdDQjdEQzI2MUZFRkUxMUY2NUEzRURGMzgzCi06MTA2OUEwMDA5OTQ1MzZGQjdDNUI2OTVFRjZEMUQ1OEYxRkJDMTdGRDIwCi06MTA2OUIwMDAxMUVGM0ZGMUM3N0JGMTFFRUQzNTQ3M0VCRUY3N0IxODY3Ci06MTA2OUMwMDAxN0Y2NkY1RTE1RTU3QkY5QTNBRjE0ODI0OUZGOUY1RjUxCi06MTA2OUQwMDBDNEQ3Q0QwRjFGNzlGOEExQ0Q2Q0ZFMUZCRUVFMjY2QzdCCi06MTA2OUUwMDA3REI4RTNGNzk1RThGRkY5RjBDNzdGMUQ4RkZFQTAxQjg4Ci06MTA2OUYwMDA3NjJDQTRERkFEQjlFMUE5QjMyN0U0NUExNzkxNUY5M0QwCi06MTA2QTAwMDBFNkRGNTcxNEU3NDZEQTMzMTIxQTkzMDAzRjEzQTk4REQ1Ci06MTA2QTEwMDAxRUQwMzdBNEUwQkFGNjE3MDk4NkJBOEJEOUY3RkU0RjE1Ci06MTA2QTIwMDAxNEI0Q0ZGNjQ0NjAwOEYxQjM2QkZCM0I3QjZFNjZGOUEwCi06MTA2QTMwMDAwRjE4N0REQzE5RThDM0U2M0ZEMTQxRkE5OTg5MEQ0QjY3Ci06MTA2QTQwMDA5NzZERkZGMjk3Q0VBOEMzRDQ0NTc2Rjg3MjE4MjJCRDkxCi06MTA2QTUwMDAzOThBQUUyRjMzQkFENkE1RTk2QTJGM0YwODg3MTUzQzhECi06MTA2QTYwMDAzNzU4RkUxOEEzRTMwQ0E0MjdBM0UzOENEMTc0RkMwMEQxCi06MTA2QTcwMDBGRjk4Mzc5QThFNTcxNTU5RTM5MjBFQzIzNTVCMzY2M0VECi06MTA2QTgwMDBFMUY2RDI4Q0U3QkNDNjNFRUJEQUE3QkU5QUQzN0UzMkUzCi06MTA2QTkwMDBGNEMyNTg3OEJFNDJFMjcwOUQ1QTE0QjlCOTA4RTVFQkM5Ci06MTA2QUEwMDA4OTFGM0NCNDM5QzhFOUJDODgyMUU2QzNDNzBGNTYwMjI4Ci06MTA2QUIwMDBFMzkzM0ZCODg2MkU0MTNDMENFRDcwQUJCOEJFNUZCNTlBCi06MTA2QUMwMDBFMzU3MjQ2RjFGM0VGNUEyQTI1MTdDMEIxNDRBQTdCMkQ0Ci06MTA2QUQwMDAzQzhDRkM3QjA5NTg3RTk5QzQzM0Q3M0VGMEZGQ0U3OUJECi06MTA2QUUwMDA4M0I1QkYxNjdGM0E1NTI1RkE1MTdFMEY5MzNGQTI0N0QzCi06MTA2QUYwMDBGMjgyNDYwREY1NkU3MjFDQ0Q3QjU5OTJDQkM1QjJFNDg1Ci06MTA2QjAwMDBDMDU3MzBBRUNGOEVGNzI3OEIxQzg2RkUxRkExMkJDNjM5Ci06MTA2QjEwMDA4RDJEREJGRUY2MzlDODdGRDlFODY5Q0M1RkM1Rjk5RkJBCi06MTA2QjIwMDBDNkNBMUZCMENBNkQ1NjM5MTVGNEZENzBFQjIxMDVFRENDCi06MTA2QjMwMDA4M0Q0QjM4QUVBNjBGNkYwODdBRTIxODVENkM3MUYzQkJGCi06MTA2QjQwMDBENTA3QzNBM0U5OUVDNkJGODgzRjNBQzY3REY4MEZFREJGCi06MTA2QjUwMDA3MjJFRjAzMzk2OUM4RjNEQUY2M0MzREJERDQ1MUFERkE5Ci06MTA2QjYwMDA1RkQ5RjBGN0ZFRTFDQ0ZBRkYzOUExMzc5NjQxQkNCMTBECi06MTA2QjcwMDA3Q0YyRThGNTRCODZBODNFQjEyQTBERUZGQjE4M0ZDNjI0Ci06MTA2QjgwMDBFMDdERkY1MTI3RUQwRjNCRkE3NzkxMUVCN0VCOEI2NTQ4Ci06MTA2QjkwMDA1OUVDRTgzNzhBQjgzREIwRUM5OTgxMTlBOEQ3REVERjA3Ci06MTA2QkEwMDBGOTUzRTJDQjY1OEZCREFEQTBGRjY2Q0ZCNjI3OTVDMTg3Ci06MTA2QkIwMDA2OTY5MzlDMEY1QzFGQzNCMzhFRkZGNzA2MDA2RUFBRjg4Ci06MTA2QkMwMDBFNTU5RTIwMDdGMkZFNkIzRkM2N0Q2RkU5NzNGRjY5MUNBCi06MTA2QkQwMDBBNUZGQUJGNTdFODVGQzY0NjM4Q0YzOUUxQ0I5MDhFN0NBCi06MTA2QkUwMDBGQkRFM0UxNzlFNjBDMDdCRkRDRUM2NEM3NkNFRjM2MkM4Ci06MTA2QkYwMDA3RDM0RjBENDUxNzBFQTZCNDU3OEVFNTVDMkRGNjE2QzlDCi06MTA2QzAwMDA2RjhERkM4QTdFQkZGNzQ1OTdEOERGNDY1RTQzN0I2NjczCi06MTA2QzEwMDA1NUIxNDJGNzExREEwQjJFMjQ3RkJERDE1RjlGMEQ5RjM2Ci06MTA2QzIwMDA2QTUwQURDN0ZEODBCQTIwNUE2N0RFNTcxOUYwMTc0NzgyCi06MTA2QzMwMDAxQzE2Rjg2RjI4Njg5Q0EwMDVGOEZFNEM2M0ZCOEZGRkJDCi06MTA2QzQwMDAwMUFCOEExQTM0MDA4MDAwMDAwMDAwMDAxRjhCMDgwMDhFCi06MTA2QzUwMDAwMDAwMDAwMDAwMEJENTdDMEI3QzU0RDVCNUY3M0E3M0NGCi06MTA2QzYwMDBDRTNDQzI0QzI2MjdBRkM5RDM3ODkyRjA5NDgwNDMxMjExCi06MTA2QzcwMDBERUI0MEUwNDkxMjI2QTUwNUFBOUY1QUIwM0YyODgyMUMyCi06MTA2QzgwMDBDOUE0RjhFMjVBQkZDQjg0NDRGNDAyOUY4RDk1MTY2QURBCi06MTA2QzkwMDA2OTNCNzBBMTUyMjE3NjkwQTBCMTBEREMwMTJDMDYwNTU0Ci06MTA2Q0EwMDA2RjEwNUY3OEIxOEQ1QTE1MkIyNDYzMTRCNDU3NUJFRkM2Ci06MTA2Q0IwMDA1QTZCOUZDM0NDOUM0Qzg0REVGQkZCQkVERkVGMEJCRjRCCi06MTA2Q0MwMDA3NkJCQ0ZEOTY3OUZCNUQ3RkFBRkQ3REVFQjBDMjhERUZFCi06MTA2Q0QwMDBEQ0VBNTQwMEQ5M0Q2QjM2NjQ2MUFCNUFENDE0MDlFMDQ4Ci06MTA2Q0UwMDAyQkZBQkIyQUQ2MDI4NDAwQzYwMzU4NURENUUwNzc2MTMzCi06MTA2Q0YwMDBBQjVBNDA3MzAwRkY3RDQ1RkZBNzc4NUI3QkYwRjk3QkMzCi06MTA2RDAwMDBFNUQ0RDZCNTM0OEZCNUYxNTdENDg3MjYwNUI2NTdGMkZBCi06MTA2RDEwMDBCMDkxNEEyNUREQkZDMkJCQjYxODYwQTNGMzlGMUZBNzgxCi06MTA2RDIwMDBGQjJCODM3NkQ1OEU2RDczRUEzREJGQTVGRTA2MDlBQUJGCi06MTA2RDMwMDA2NUVBRDNGMzM4M0U2ODc1QThEQjU1QkM5RTBFMEJDMkRFCi06MTA2RDQwMDA2NTMxN0FGMjU0MjQzMjFCQTAwQ0U5QTAxNkZGRkMzMDA2Ci06MTA2RDUwMDAwMURGMkI0ODgyNjZBODAzMUMwMTI5NTlBMTIwQjVDNjcyCi06MTA2RDYwMDA3MzBGQUFGRTYyNzU3Q0FDMkZCQkJBQzE4RkYzNUUyRDg4Ci06MTA2RDcwMDBCQjJDQjRGRTA3NzMyRDIxN0IzMUI1MzdBNjQxRDk0MDFBCi06MTA2RDgwMDAzRTE4RUQwM0FCQUEyMTMyNjJGMEZCQUREOThFODU1QkQ0Ci06MTA2RDkwMDA4MEU5MEU1QTY4MUQ5MjIzQjQ5RDA4RjE4MUE2N0E4MDdECi06MTA2REEwMDA2OTAzMERGRjg3M0M3NEM0RDE4RDAzN0NCNDBFNDVCRkNECi06MTA2REIwMDA2RkM1NjVEMTREM0IwNEI5NEQyMTM5NjBFQjg0MDg0MDY2Ci06MTA2REMwMDAyOUQyQUQ5NkIwNUM1MkExNDc5RjI0MEFENTYzMDA2RUNDCi06MTA2REQwMDA0Q0Y1N0Y5M0Q2OTkzQkI0NTFBMkVCMUVBOEU2QjYxMkIwCi06MTA2REUwMDBGQzEyRERCNzM4RUJGMkZDNUZCMzNFNThBMDlDRTkxOTBBCi06MTA2REYwMDBBOUNCMTc1RkIxQzEyQUY4QUYyOEEwMEMyOTI3M0EzNkQyCi06MTA2RTAwMDBBQkVGOEZDNjc5RTg3RTI2OEQwQUIyMUNDNjU1N0Q2NzJBCi06MTA2RTEwMDA3NDBCQzE4MTg4OEZFM0YzMjMzMzY3NjQxMjZFOEM3MTI2Ci06MTA2RTIwMDBDRDhFQTI5MzEyRjJEQjI3QTdBODI5NDVEODU3OTAzMzFECi06MTA2RTMwMDBDNEE3NTNBOUNDQTcxRjREQzM5OUYxRkU4RjRGQTU2RUQwCi06MTA2RTQwMDA5NTUxMUU4RjQ4MDI0RjQxQzIxM0UxMEExQTFGMjc3QzM5Ci06MTA2RTUwMDBCODExM0Y2QkU5QjkxOThEQkY2NUJDNThBMEJBQjk1MkRBCi06MTA2RTYwMDBFN0E0ODdGODI3RkUxMDZGOENBNzk1OEE0M0I1N0I4OTI2Ci06MTA2RTcwMDBCNzNFNERBMTc5NkMxMDVBMkIxMUJEN0VFNkE3MDM1QTdGCi06MTA2RTgwMDBCOTFEMDI2MTZFNUREMENERUQ1REM0RTc2QzkyODM5NzU0Ci06MTA2RTkwMDBGQjY5RDBEMzNBMTQ5RjlCQTM1NkQ3QUE3OEZEQzdCM0ZBCi06MTA2RUEwMDAzMzI0NUE5RjBCNTQ5REJGODU3OUQ0MUY5NEJGMzM5MUNGCi06MTA2RUIwMDBCRjhFMTg3RkVEQzQ0RkU3NDA3RTNBNDA2NTNFQTQ3QjBECi06MTA2RUMwMDBDMUJCNzYxQ0NGMEIxMTVDQzcyM0QzMjEyNDMzODg1NDVDCi06MTA2RUQwMDA1MDExMkYzOUZBM0EzM0MxMjcxMTdEODQxRjVBNUZGNkJBCi06MTA2RUUwMDAwMkIxM0VGM0ZCNzJBMTk1QzdFNTQzOThEQjQyRThFNkE5Ci06MTA2RUYwMDAzNkMzQTE0QTBBRDM3MzRBOTdFRjNCRjA5NTMzNDY4RkM2Ci06MTA2RjAwMDBEMURBMDlDMTM4RkZCOTQyOUNCRjk4QjlFRDk2M0NCNEJCCi06MTA2RjEwMDA3RUUzQUY5QTcxRjg4N0NBODNCRTJBMUNBN0Y4NUQzRTRDCi06MTA2RjIwMDAzQjJFRTVGRjU0Q0UyMDEwODJGNTcyMDU0OEFFQUU5RTkyCi06MTA2RjMwMDA4NTczQzE4REMzQkQzNjg4OENBNEQ5ODM0QzVGQ0E0ODg0Ci06MTA2RjQwMDBEMTM3RUM4QjFEMDUxNTMxRThDN0U3QUNBNzNFM0M0NUIyCi06MTA2RjUwMDBDRjU5MjE2RTFDRDEyMURGOUE0NjdDN0Y5ODJFNEMxRTgyCi06MTA2RjYwMDBDOEY3OTVBNzlBQjI5RThCOUI3N0FCOUE5QTQ1RUI4NDBDCi06MTA2RjcwMDA4OTMwRjEyQjM5RjYzQzRDQ0E0MDIzMzNGMEY5Q0Y1NjE3Ci06MTA2RjgwMDAwNUIzOUVCM0M2RjhEMEUyRjg2N0M2QTUwRjAxOUNGMjIwCi06MTA2RjkwMDA0REVDMTM4RUIzNjIzODQ2NUNCMjlEMEJBRUI2QUJDREYyCi06MTA2RkEwMDA1OThDNDNDNkU5NEE2NDkwMUREQkNGNTI4QTQyQkM3RUFECi06MTA2RkIwMDA2ODlDNzgyM0RBNjE4QkMzMjc0OTc4QkQ0RTc1ODc4ODMyCi06MTA2RkMwMDAzRkY1QUVGMDJDQjYxMzI2QkIzMTdEQkUxQUM5Qzc3MTkyCi06MTA2RkQwMDA3RDhERTAyNUJFNkVEQzczQzM2OUUyNkI5RjA3MzQ3QjU5Ci06MTA2RkUwMDBCQUMwODU2RjAyRDkwOUMzOEU4MDI2QTM3Q0Q3NDhFMzM3Ci06MTA2RkYwMDAxQzEyQjZGNUVEMUZCRkY0N0IxQzlGRDIyOTgzOENGN0MyCi06MTA3MDAwMDBGQjcwQ0REREI0NkVDNTk3NEU0Mjc0QzJGQTA0RkQ2RUJFCi06MTA3MDEwMDA3NjA4RkQzMUQ2NjlENkQ3N0Y3NDlEMjg3OTlFOUZFNTg1Ci06MTA3MDIwMDAyMDkzRkQ1REZGMkZGNDdDM0ZBNEI2RDJGODREMEFCRTNECi06MTA3MDMwMDA5QUU2RUZCMjg2QjYyMzFGNTYxQzkxMTk2RjJCREFBNDdECi06MTA3MDQwMDAxMDkwOUMxNTJEOERGQUY3QkUyODgzQzAxRkYwRkQ3Qjk0Ci06MTA3MDUwMDA3RjU1Q0E3ODk0NjFGNDhGQTZFMUYzODFDRDU2MkY1QUZCCi06MTA3MDYwMDA0QzQ4RjcyNUZBQUJDQ0Q5NDM0MDhCQzMwMTA0N0QyRkE0Ci06MTA3MDcwMDBFNzIyQkYxNkVCRkNEQUU4N0M3ODBCRDFCM0E5NDlGODFDCi06MTA3MDgwMDBBN0VDRUE4Qzg0RjE5RkE1NUM2RjVCOEFGMzZCNzk0ODZGCi06MTA3MDkwMDBENzE0QzI0REU3RjAzNUQ4NUY1RTIwQUIzMjlBODg5QzlBCi06MTA3MEEwMDAwNUY5ODlGRUIxRDVGQTBFRTk5Rjg2RkYwOERGODZGRDU2Ci06MTA3MEIwMDA1QTRBRjY4QkVDOTA3QzNGRkJCRjczMjBGQzlGMDJDMkM4Ci06MTA3MEMwMDBGRjM1QTBCRDhBRTA3Q0NCMzY4OUU3OERGOTZBM0ExRjhGCi06MTA3MEQwMDA1OTUzODBFRDFEQTFDNEVCQ0I0MTg5RjVEOUNGQkE0N0Y3Ci06MTA3MEUwMDA5MjFENTgwOTQzQkM3NjY5MjBGRTJERTk4ODdGMDI4OUVDCi06MTA3MEYwMDAwQjVDNDIwRTJFMkZEOTk3RkU1NzY0QUY1REIwODJGNTIwCi06MTA3MTAwMDA5NUY4NEU3NjQ0RUUxOUIxNzExQUNFMTdFOEIyNDI0ODlFCi06MTA3MTEwMDAyMzc5ODlGQkZEOUJFNTUwQjAzOEE2MUZGRDVEN0I5ODY4Ci06MTA3MTIwMDAxRkNCRjI5MDFGODg0RjdCNkUyMkZGNTNCNDQ0RkUzQjZGCi06MTA3MTMwMDA0NzY2N0NBRDNDNTJCRDI2N0VDQTczOTlGRkM4NkZBMERFCi06MTA3MTQwMDBGOUQzMjY5NTI0M0VBRkYzN0IyNEZFMTNGQ0Y2MzE5RDQ0Ci06MTA3MTUwMDA0QjNCMjQ3ODRDMjIzRUFGM0Y1Q0EwMERFNDZCNDNDNzExCi06MTA3MTYwMDAyMzM2RDJGRjhCRjFENUNDQzdEMUU5QkExREQxRjk3ODNFCi06MTA3MTcwMDAwRTNBMEZFOEE4QUM3Njc4RDg5NEYwM0ExNEI1NzUzQTgwCi06MTA3MTgwMDBFMUI0MTBGNTk2NzA2MkQ2NkI4MzdGRDYyQ0Q1NjdDM0I5Ci06MTA3MTkwMDA3MTk3RDEzODVDNUZCRTIzMkM5NEQxMEJDQTA5QzJDQjQ2Ci06MTA3MUEwMDAyMjYxNzc5QjU1MUZGQjIzQzNERTNBMkZEOEVENzdFMTkxCi06MTA3MUIwMDAyQjZDQjNFNjU1M0U0NDM4QkE1MzRBNkQ5NTJCMDdFQTFCCi06MTA3MUMwMDBFREJBMzFGN0IwRkQyQTVDOERGNjk4RkQ2QTYyOUMxNjI3Ci06MTA3MUQwMDA1RUU1RjAyRTQ2N0E5RTVDMDVERUM1QzMwMDlFNUFBNThDCi06MTA3MUUwMDA3MjZCOEVERjBDN0RERjhDRjE5QjVERjg2NzlFNTc0MUUzCi06MTA3MUYwMDBGQ0FFNTVDOUZFNzg1NUEyRjM2MTFCQjA5RUY2OTU0MUQxCi06MTA3MjAwMDA2ODJCQkUzRjFDRjlENEEzOTFCRDJFOEY1RTVGOERGMTFDCi06MTA3MjEwMDA0NTYwMDk1NDUzOUNGMUFGMTkyMkFFN0I0NjZGNjc2NUY4Ci06MTA3MjIwMDBEOEI4NUQ1QjZEMDExRkJFQTdCNzUzMEU0OTQ4NUZBRjZECi06MTA3MjMwMDBFQTNCNzIxNUQ5OUQ0RUFCQzZGMTk1MUE3REU5N0I3QzcwCi06MTA3MjQwMDBCRjQyNUQ4QkZDQ0NCM0I0OEVBM0Y3RTJGOEQ5MjE5QzhFCi06MTA3MjUwMDBCN0FGRjM1REY3RUQ3MTdFQjlCN0UzRDE1MTE0MDdGRDE4Ci06MTA3MjYwMDBDQzAyMzVFMTI0RjFEMEYyNzQwQkM3MzFCRDIzREZGMTNDCi06MTA3MjcwMDBFMEIyQTFERTExQjUwMUUyRTlDMTlFQzY2QThBQTdFRUJECi06MTA3MjgwMDA3NDZBNEM5N0FEN0Q3QUE0ODBGMTMzOEZFM0UzRTc5NjdGCi06MTA3MjkwMDAwRTYxQkNFRDNEMDMyMUQyQkI1OUYyQURENzhFQzFGRUNDCi06MTA3MkEwMDBFNDU3MTVBRjlEOTVDQTc3RkRDMjA5M0M4NEU1QkVFMTYwCi06MTA3MkIwMDBDQjhBNERDNEJGMDBGMjczMzU1RjZDM0Q0MUYyN0FGNjY0Ci06MTA3MkMwMDBDRjBBOTBERTU1MzYzRUZEQUUxRkQ3NzkzODE3RDEzMDQ0Ci06MTA3MkQwMDAwOTYwODIyRjVDMTFDMTUxMzMzQkQzQTc5MzdFMDc0RUM3Ci06MTA3MkUwMDAwMUVCRUJGODZFMjUwMUI3MjBENzFEMkEyMEJCRjI4NkYzCi06MTA3MkYwMDAwODBGMjdCRTYxQkEwRjQxOTlFMkZGQzkzRDg5RDdBN0EwCi06MTA3MzAwMDA1RTA0RUZGRjYyRDgwRDM3NzgwOEVGOEZBREVBODA3NzIzCi06MTA3MzEwMDBDOTJGRUFGRTMzMUYxNzk4OEM5RjA2QkVGNzM4NjczQ0NCCi06MTA3MzIwMDA5MjJFRTI3Njk5NzBFQjU1OTI4RjdGMjc0M0M0RjkxQjFBCi06MTA3MzMwMDBCRTk0MjVDMjY1NUYxNEJDQUI5MTVGN0Q4QkYzNzlERDk0Ci06MTA3MzQwMDA3RDlGNTI0MDg2RUQ5N0YyRUM3MDkyNzhFQkQ3RTkzNjRDCi06MTA3MzUwMDA5NkRGQ0Y2QzAyRjczRjVCRUEwQTM1RTE3QTBFMkVBRDdECi06MTA3MzYwMDBCREJDMDdERjc3RkU5RkZDOTdBQjVGMTcwN0EzNjlCMTMyCi06MTA3MzcwMDA0QzYyNzlBNTExREZFRjlDRDcyMkIxMUU0MjZCMUVGMTQyCi06MTA3MzgwMDBDRDNDREVEMDEzNDM2RjBDN0RDOTVCM0FDNDFGNEFGMjdCCi06MTA3MzkwMDA5RUUxQjQzRUE0NkZDNkQyOTE5MjhENzBCQjVGMDI5MjAzCi06MTA3M0EwMDA2M0VGNkFBNEVCNkJFMkM3MjBBQzJFMjA3QTAyMUQ5RjJDCi06MTA3M0IwMDBEOEM4NUYzQjNBMjU1RjI4QzlGOEMzRTk2RUU2NUZFRjlFCi06MTA3M0MwMDBFQTYwRDM1NEU0RDczRDhCRjA1OUQyMEI1QjZCNzFCMkJBCi06MTA3M0QwMDBGOTgzQjBBMTAwODM0MzY4NEJENzA0RUUxRDcwMUJFOTBECi06MTA3M0UwMDAyNTI4QUQ3OUU0Qjc3QjNCQUFCRTQ1NzZGRDMxRDQ0MzcxCi06MTA3M0YwMDA4QTFCN0U2NkY1MzJEREMxN0E4MEVEQzQxNjBBM0NCMTg3Ci06MTA3NDAwMDA1Rjc4M0Q2QzU5MUI5NzQ3NzZBNzRGM0Y5NThFRjM5RDRDCi06MTA3NDEwMDA0QTU3NzlERTRDQkY1NzIyQkFCRDdGRkJDQzRERjNGN0ZDCi06MTA3NDIwMDA3RDZFNjdGOUU1OTMwRUM3QzU2RDlGQTYwQkZFQUNDOUNGCi06MTA3NDMwMDBGMEJEQzY3OEE5Qzk2MjYzRUFGNUJCQkQ4QjJCMDBBRTZGCi06MTA3NDQwMDBFQzQwN0VDN0UxMzIyNkI3MjBBRjNCQzMxRjY0N0EzMkRGCi06MTA3NDUwMDBCQTMxNzFFMkZDQ0JBNzUxQkMxQ0QwOEQzMzQ0MjQ1MDBGCi06MTA3NDYwMDAyNkM0RUM3M0E1QTMzMDUyMjBGMjg3NzAwRUYyMzdBMzI2Ci06MTA3NDcwMDBFNkM3NkNBRjUzRDAwRTUzMjgwRUREODk3OTExNUI2NERCCi06MTA3NDgwMDA3QzlFNzQ5RkVDNDJCMzJBRTJBQzk2NzQ2MUU3NUExRTZDCi06MTA3NDkwMDA1MTQyQ0RGOERFQ0Q0QTRGQ0EzMDZDOEI3RERBMEM0NUI3Ci06MTA3NEEwMDAyMzdCNUZDNkYzRTZERTA1QUNERjE2NDc0ODIyM0JFNEVDCi06MTA3NEIwMDAyQ0ZENDVGQTg1Qjg2QjJBQzBFRUJGQzlDQzdGQjM5Q0MyCi06MTA3NEMwMDA0NkVCN0FCMTI2QzNGRjA1RjE3NTZDNTdGNDIwODU2RjQyCi06MTA3NEQwMDBERTE0QzgyNEI5Q0U5MjVEQkNFRUM5Njc4NUZEMzFEQkYwCi06MTA3NEUwMDAxQjM5RjJBQjlGOTFCREU5RDNGM0E3MjRGNkU2NzZGMjAwCi06MTA3NEYwMDBBRjg2QkQwMUI5RUMxMEUxNjdFQThCN0E5QUE5REIxOTc2Ci06MTA3NTAwMDBDQzNFOTgwRjEzOEZGQTlCNUQ0OUVDQ0IyNEE4NEU0M0Q5Ci06MTA3NTEwMDAxNjVGRDRCRTk4RTU4OEMxRkU4NTdFMjEzMkEzQTIwQkZBCi06MTA3NTIwMDBGNTI4RUU3OUIzM0QyQUM4RDBGREFGNkU4RkNFQzFCNDM5Ci06MTA3NTMwMDA5Q0FCQjUxODVFQ0E1NzdBMEZEOUUzRjA2MUQ4QTExODkxCi06MTA3NTQwMDA1RTQyOEMzM0YzN0IyNDcwNUNFOEFCQTU2NDNGOEVDQTRCCi06MTA3NTUwMDA2OTY0NzdBNkEzREM3MUZFMkU1RDRGRDIzRjBEN0Q4QjUzCi06MTA3NTYwMDBFNEJGQTFGMzlBMTRDMkY1NTM1RDU1MEU1MjlCMTVCOUIxCi06MTA3NTcwMDBCMkY2Njc4QzlGOTUwM0YzODNBMEMzODVFQzlERjE1RTAzCi06MTA3NTgwMDAyQjM4MzRENzQ4RTI4Nzg1RjkyMEFCRDg4RjdCN0Y3RkIzCi06MTA3NTkwMDBBQjM0OUJFQzIyMEEyRDZERkU5OEMxRURDMThBNUMxQkI5Ci06MTA3NUEwMDBCRkU3QTlBRTkyMzRDMjkxMEIzMEJGNDVGOTU1NzY0QTc4Ci06MTA3NUIwMDAxQzI3OTg3MTZEQzY3MTMzQkVDMEMyNzk2MzM1QzcxMzdECi06MTA3NUMwMDBCMjE0RDZGNzFEMTJGM0QyRTJFMDY0RjY1Mzc3NjExRUNGCi06MTA3NUQwMDA0RTcxNkI3RjE3RkEyRDZDOUY0MjNGNEY3MTRBQjM2QjEwCi06MTA3NUUwMDAxNkFGREI1OEFGNDFERjVEQTkzMzcyQTA2Q0UwRkE4REI2Ci06MTA3NUYwMDAzNkYwQjkwQ0ExQ0NCOEJFMTJCNTExOEUwMzlGREIxMkM4Ci06MTA3NjAwMDBBRTFCRkMxQzhDMEYwNjNGQTcxMDNGQTVGRjNFM0ZBN0ZCCi06MTA3NjEwMDA2NjA4Qjk5QUY5RkEzRjVEN0ZFMThBNDk5MDZDNUZFMEFDCi06MTA3NjIwMDBGRjk3RjU0RjA1RkZFRjdCNDRCRUY1NUFBRTI3NjY0RjM3Ci06MTA3NjMwMDAwQTU3Q0M5Njk3MjExRjI2NTAzQ0VFOEREOTA3MDdGRTlFCi06MTA3NjQwMDAyMzdDOERFRDY4NjU3QjMzMDlFRDBEQzU5OTA1NzU2MTZBCi06MTA3NjUwMDBCNjJGMTM3MzQ1QkU2NEI2MUI1Nzc2QzI0RDY0MUYyNzAxCi06MTA3NjYwMDA0NzMwMkVCRDA0RkJGMTI5RkQ0NzFFRUZFM0ZDMzIwMzNBCi06MTA3NjcwMDBFOTFFRjdGQzgyRTVCQkYwRDI1ODBEMzJFN0UyN0JDNjhCCi06MTA3NjgwMDA3NjJCNUVGMjdCRDA5RDk5NzQ1RkMwRUMzNzhDQjhENEJBCi06MTA3NjkwMDA4ODQ3Q0RFMzhDNzhENEYwMjcwRDNBMUZGRTNEQzNGRjE5Ci06MTA3NkEwMDA2NDA2NUQ1N0Q1MjBFOTFCRUE1NUY4MzEyRkMzNUVBMzY4Ci06MTA3NkIwMDA3OEExM0JCRDdBMzdERjFGMTkwRTcyMUU1MDAyMkFFREVBCi06MTA3NkMwMDBFQkEwQkU3MjFDNTZFOTcwNDVFNEIxMDNGNUQzNjlEMjU0Ci06MTA3NkQwMDBDMzMwRjI4NUY2MDk4MjJFNEI2ODk4MzQ5MDBFMENCN0IxCi06MTA3NkUwMDA4MzE0RjdFMTAzRkNGRUE1QkFCRjI4QzQzMTJDQjQwNjBECi06MTA3NkYwMDBFMEY4QkY3MDJDRjhDOUVGMTY5NjYzOEJFQjNDQTZDNzc5Ci06MTA3NzAwMDAyMzJGOTk1QUE0RkI3OUUyQUI1NTgxQTBCREZDMUZBNzlBCi06MTA3NzEwMDA5NzQ4MkMyODI3RkVGOEZFNDBFQjc3Q0NGNjMxRkQwNTg0Ci06MTA3NzIwMDAyQTc4Mjk4RTJGNTBDMjkyMTdERjlGNTFBNzQ5MTczNjBBCi06MTA3NzMwMDA5MTBDM0Y4REYzMTVDQ0Q1RDg1RjE2MENDNTNFOERBN0E3Ci06MTA3NzQwMDA3ODI3ODk1QzdBMzJBQ0JDQ0U3QTQ3Q0Y2MTFCRjIyMUI0Ci06MTA3NzUwMDAzMEI3NzFCNkRCMTI4QkQzRUQ1NkJGQUY4MEY2OEYzQUUwCi06MTA3NzYwMDA0NEJDMEVCNERGMzc5RUVEOTI0NEVCNTE2NjA4RkUwNDM0Ci06MTA3NzcwMDA1NDkxNUZCOTQwNjVCQjU5QTlDQkIxRDIzMTk3Rjc3NzI2Ci06MTA3NzgwMDBDODI3REEyNzBGNUNCN0E0Rjk3ODcwRkU3Q0QwODI5MzAzCi06MTA3NzkwMDA2Mzc2RDVDODdGNzAxQUEwRjc5OEVENkFERkJFRDcyRjQxCi06MTA3N0EwMDAwQkEyM0VCRUY1QkYzRjQ5MDVCQ0ZGMjcyNTlBNEFGQzA4Ci06MTA3N0IwMDAzODdERkY4OTU0MUZGMkUzQURGQjQ1RkVGMjdENTM3QzFCCi06MTA3N0MwMDBBNDY0MEFCOTJFQ0VBQ0ZFODJGODdBREJBQUJGNEQ4ODNCCi06MTA3N0QwMDBCNzJGQjAzMjlCRjVFMjhFOTA0Q0M5RjAwNUZENTlCRTMzCi06MTA3N0UwMDBDM0M5N0JDRjQ2QkYzRTlDOTlEMDM3RjRBMERFMEU4RDM3Ci06MTA3N0YwMDBDOUUyRUE2OTk5MjIyRkJBNjNENzE2MUJFNUQxOEIzMzA4Ci06MTA3ODAwMDBGREE5OTlEODNGQURDNzdGQTdEQjUzNzkzRkMwQTA2N0RCCi06MTA3ODEwMDBEMUFFNzEzNkUyRjc5RjNBRUQxMDYxMDNEOTZEMTU3MjYyCi06MTA3ODIwMDBGNjVEMkY0REEwQ0Q3QkYxNjdBNkYzRjBGRTAyMUJFREI4Ci06MTA3ODMwMDA5RjJGOTEyMDJBRjZCNUUwRjBDRkIxRkY1RUFFMEM2QjIyCi06MTA3ODQwMDBCRDAzRDdCMUU0MkRENTY2NDFGOTJDOTkwRUQxMjBFQUJDCi06MTA3ODUwMDBENUEyQkJBNDM1RjdFMkY4NDU3RTE3NDU3MDAzRDZCOTJCCi06MTA3ODYwMDAzMDk4OThFNzJGRDNFMzk1REIxRkIyOUFGMkE0QzZDM0YyCi06MTA3ODcwMDBCNDVGQjYxOEU3QTE3Qzc2NDk2QkUyRkRGRUFFM0IwRjI0Ci06MTA3ODgwMDBGRjlDRkM0MDg3OERGREMwQjI4QkU0NEZFMzMyRjU3ODVFCi06MTA3ODkwMDA2NTAyNENGQ0FBOTRFMjk1QjIxRjk1Njk4M0RCMjUyMzBGCi06MTA3OEEwMDA1RTM5QkQwQTA4M0NGMDk3NTUwRTZFQ0ZBQzUyQjlGRDVCCi06MTA3OEIwMDA0MkI3RDdDQjNCMEUxQzY2NUMyQkREMTNDOENGM0VENTQxCi06MTA3OEMwMDBGNUFFRjMxNjJERTYzN0JFQjlFNTkzNDMzRkM3N0UwNTA3Ci06MTA3OEQwMDBBREIzOThFQzY1QzQ0QTc4QkM0QUY3MUJDQkY0MzhBNDI2Ci06MTA3OEUwMDBFMjczQjNERjM4RjA4N0RGNTM5RThERUJERkNFMTlENzFECi06MTA3OEYwMDBBNUM1MjNCNzgyRjI2OTNDMUYwQzNGNjJFNjQ3N0Y1NzVDCi06MTA3OTAwMDBBOTkzNzAzMjNGMzM3MTNGRjY3RkNBOTdDMTlFQUI5NzAwCi06MTA3OTEwMDAxMUQ3NDlFQzg3QTE0RjVGNjQwODdDMkZERTM2NkY0RDhECi06MTA3OTIwMDAzRUJFQkY3OURGMDc0NTNEQzIyRUJEMDY5RTE4NUVEMTIzCi06MTA3OTMwMDBEMDMzREU5NjAxNDRENzIyM0VGRDlERkY3NDk4Rjg3NDQzCi06MTA3OTQwMDA5OEYwMzY4OUZBOTdGMUZEREMyQUM0MkZFQUVEQjJDRTIxCi06MTA3OTUwMDAwRkRGODRCMUFDNUZCOTk2NUM2QTIzQjk5NDVGOUE3MTBBCi06MTA3OTYwMDA2OEM2OUYxOTZGQkRENjlFMjJCMjBGNjY5Q0Y1NEE4OUU0Ci06MTA3OTcwMDBFNzY0NDZCQjM0NTM5QzVGMkNENjdDQjMyOERGNDVCNzA1Ci06MTA3OTgwMDBCNjQ2RTVGNTA4RkI3NzVBNjkzREZDNDNEMkRCNkQxMjNDCi06MTA3OTkwMDBFNzg3RjVDRkI0M0Q0REY2QThGNkI3M0Y3MTkzM0RGQUIyCi06MTA3OUEwMDA1MDY5RjVEMEZCRUFCNjNGRTBGNjkxNUQ1MjgyNkU3QUZGCi06MTA3OUIwMDBGRUMzOTBCMDRCRTZGNzc1RUE3QzM0Q0UwNTJFRjhBNUYxCi06MTA3OUMwMDA4N0EyNkJFRTQzN0U5QzQ3N0QyNkZENkQ2OEZGRUI5QTk4Ci06MTA3OUQwMDBGQjI4Q0ZGMDM5QTI5NDc3OUU1NjdBNjYxMTFENzcyQzNBCi06MTA3OUUwMDA3NDM1MzY3OTI5QkY0RDVDNzdFREUzM0ZGMTY4QkM3Rjk0Ci06MTA3OUYwMDAxQzJDRDBGOUM3Rjk2QUMzMzZBQjM3ODJGMzM2QkMyMkU4Ci06MTA3QTAwMDA3QkU5MzUwMTg4RjJGQUNDQ0YwN0MyRUZEQUM4N0VBQjRBCi06MTA3QTEwMDAxNjg4MTY0RTFENzgxRkM1NjgyM0JEMDlCNEFGRkI1OEU0Ci06MTA3QTIwMDA3NjUzMkJFNDE1MjAzRUM3OUQzM0Q0RTg3NkQ4OENFM0ZCCi06MTA3QTMwMDA1RDk5RkFCRTg4OEU1RkU0MEZFRkE3MDY5MTJFREEzRkJDCi06MTA3QTQwMDA4MjkwQjBDN0NEQkZEOTM4RjY2REE0RUZDQ0I2MTdEREE0Ci06MTA3QTUwMDA1MjU5RkNCOUMyNkE5NjQ3N0ZGOEY2NUYzOTJDODNFMzI2Ci06MTA3QTYwMDBCNzU3Qzc3QjJDNkUwOUYxNzM1QTg3MjQwRTgzM0E0NUFBCi06MTA3QTcwMDA1QjY3OERCODI5NkZBQkRCNjJGNTA2RjE3MjVEOUIwQzFECi06MTA3QTgwMDAwRUYyNUYyN0VEMUMzN0Q0QjU3REMyRjhBQzkzN0M1MTY0Ci06MTA3QTkwMDA2OTFDMkZDMzJEQzVDNTExQ0JEQkRFOUI0NUY2NzY3OTVFCi06MTA3QUEwMDA5RTBDNzM1MUE1NkFGNzlDMTNFMzdEMTA0REMxRjFDQjc5Ci06MTA3QUIwMDA3N0JGM0RFQjg3RDQ0N0JDM0I5MkM4QUIyQTdDQzAyNjNFCi06MTA3QUMwMDBGNEM2MjRBRkYwREJCMzI4MUU2RUZFQ0Q2NzJDOEYwRkZCCi06MTA3QUQwMDBGNzRCOTA1MzNDRjBGOTlBMkRFRkQ5Qzg5RjlDNDFDMUM4Ci06MTA3QUUwMDA2NEE2MEI3RTkxREYwODg0RTU4NUI2QjQ2NEYyOEI1Q0Y2Ci06MTA3QUYwMDBGRkJCNEFCRUNGRkI3RjE3OTNFMzdBM0E2QjFCQ0Y3ODZECi06MTA3QjAwMDA3RkYyNzc0ODQ3Q0Q5Qjc2RUY1QzdBRUY5Mzc3QkEwMUE3Ci06MTA3QjEwMDA3MUYwODFEMjI4NzBGRjhCMDczQ0U0ODc2QkFDNDE4RkZBCi06MTA3QjIwMDBDQUFEQjg1RUYzQ0JCQjE5OEZDQjhFREZFRDExRjk4REVCCi06MTA3QjMwMDAyRjRGRUMxNzA1RjM2ODlENEIzNjdGOUJEN0I5MTRGQzhDCi06MTA3QjQwMDA4Q0M3OUE1RkM4RDVCNDRGNzM0RTgxRDlCQjkzRTg0REFCCi06MTA3QjUwMDA2NTk2ODhCN0VDRjA4M0IxRjc4OUYzMDBBMEZDRkMwM0NECi06MTA3QjYwMDA3RERGMzRGOEIyQ0M3MTlCMUQ2RTRDOUIxN0I3RkY2NDYwCi06MTA3QjcwMDBDRjEyRjYyQTA4QTEzRkQyQjk2QTAwREQyQjlGODMxQ0UxCi06MTA3QjgwMDAzRjM3OEJFNkI5QUI1ODY5QTQ3MzIyNUM3RjUwRTc5NzA3Ci06MTA3QjkwMDBGNDE1RUYwQjgwQTZDNEM1NTk1NUM3QUZDRUExN0QzMUYyCi06MTA3QkEwMDAzQkY0REJGRTU3MjVDN0Q1MUFDNTNENzFDRjMxREYzRTBCCi06MTA3QkIwMDBEODZBMUYyMjVEODlBRDI3RjlCRUU5RUQ1OTg2RkVDMzVCCi06MTA3QkMwMDBDQjEwODdBN0MwOEUwRjE4NEY4MEZFM0IyRDU3RjQxRjk4Ci06MTA3QkQwMDAyMzdENUNFNDZBNEM0M0JFN0RGQUNBQkIzNjNBRDcwQUMxCi06MTA3QkUwMDBFMjdBODYxMUJERERFRjcxMUZCQ0Q5MUE4RDM3RTYwRjIxCi06MTA3QkYwMDA3NEQ4NjNFNzgxQTREN0RCREUzM0U5NzVFMjdERjRERjc3Ci06MTA3QzAwMDBDQ0NGMDBBNDY5OTRCNzdENjA4QkNFMjI3RjFFQzRGN0QxCi06MTA3QzEwMDA1MjdEQzFEMjBERjY4NEYzQzYxODVFNENFNzhCQkE3RTU2Ci06MTA3QzIwMDAxQUZCOUNDQjRDRjE5OEQxOUFFREMyOTU1OTg5NzYwMUZCCi06MTA3QzMwMDAzNjY3MjczRDVGMzRFNzIxNzVENkQwQUY4OTNGNzUyNzdBCi06MTA3QzQwMDBFRDlDQkZENEI1MDlGREMzODAzQTNBMENGNUUxQTM1REM0Ci06MTA3QzUwMDA4NzVFQkIwNUQ3RjE1MUQ4OUEzNTk3REY5NjY4NkY2QjcxCi06MTA3QzYwMDA5RTQyRkRDNUYxMzJGMjNCODVFREVENjcxQzRGMTlGRURBCi06MTA3QzcwMDBFODIzMTc1RTFDOTM0NDZGRjE3QTUyQkQ3NTAxREJCM0E0Ci06MTA3QzgwMDBGRjU3NzY3NkQ5MjA3NkY2QkI1OTAzRTI4NDM0N0MwRDEzCi06MTA3QzkwMDBGQ0U1ODlFNTk3NTM3QzYxRTZBRjYxNUZDRDc2RjM5M0IwCi06MTA3Q0EwMDA0QzJEQTlERDA0RERDRjFCN0NBQ0RENzk5NjcxN0IzRUNDCi06MTA3Q0IwMDA0RjlDMzczNTZDRkIyQkZCMzE2NDZCRDQ4RUI4NkQwODUxCi06MTA3Q0MwMDA3RENDRkQwN0M4OEY3MUZGQzA3QzY5NkNCMjc1MjdGMjRGCi06MTA3Q0QwMDBEMzdDRkYzMjkyMkRFNzIzRDFFRjEzOUY2NThCREIyQkYzCi06MTA3Q0UwMDBGNkU3NTQzRUNGNkYyNkJGNDk3NjVBNTM4MUU0MDgzM0Y2Ci06MTA3Q0YwMDAyMDRDNzE4N0Q0RjlGQzVGRTk3REU2QkMyMjM4MDM0NjRECi06MTA3RDAwMDAzNkYyQjkyRUFDOEJBRkNGMDkyQjdBM0Q0NTMwNzk3RDU5Ci06MTA3RDEwMDA0RUIzMkQ3NjlFNEJGNzA3M0JDRjdENUZCNzU3NUU5N0VGCi06MTA3RDIwMDBDQUU1MDhENjJDNEQ0RTU2NTdFMkFEQjIyNENEMjM3RTdGCi06MTA3RDMwMDA5MjI1Q0U3NzRBQjNDNUJBOEY2NTA5NzlCNEM4RDVGQTBBCi06MTA3RDQwMDA0NkEzQzg5NzY4MEY5NUVENUZCQTlCQ0Y4M0FEN0E3RDQ4Ci06MTA3RDUwMDAwNkNFOUNDQkU3MDc0RUNCMjdDODEyRDhCREExN0E4RUEyCi06MTA3RDYwMDA0MkZCQzMxNTk2M0I0QkIxREZCNUUxRjYzOTBBRTJDN0RBCi06MTA3RDcwMDAzQkQ1QjJBNzA0RkIyRjZDNTgyQ0ZBNTc1QTJBQUMwOEYzCi06MTA3RDgwMDBGREM3ODM0QkU2Q0NBNDdEMDNDQkRCM0ZBNUY1MjlBQjM4Ci06MTA3RDkwMDAxNUEwRkE5MUQyOTZGN0I4N0Y5NzU1OUM1RjM1M0NCQkZBCi06MTA3REEwMDBCNzg2REVERjIwQTEyMDkwRkYyREVFNzAyM0Q3MzFFNENGCi06MTA3REIwMDA4MkJBOUEzNjhGQjUzRDdFQkFCRjI2MEZGMzc5OTQ0N0MzCi06MTA3REMwMDAyNENERkZEQjJDRjIyQjhFODg1QjJCQTFCQ0QyQjdGMTJDCi06MTA3REQwMDA3Qjc4NUY3OUQ5NEEzOTIxQUU1M0VDODM4RkRFMzMzNTE2Ci06MTA3REUwMDA5N0VDRUVGRjg1RjdGRjVCNTZGNkUwRUYzRkYzRDRCNTc3Ci06MTA3REYwMDAwQjY4RkM2ODE5NTQxOUU3MkI1N0I0MkFFQURCMzFCRjJBCi06MTA3RTAwMDBBNkJDQ0Q5MDQzQjkyMkY4NUVFNkIyNzEzRUQ3OTJFRUExCi06MTA3RTEwMDBDQjI1M0MxRDIzOUM2NjVGN0FEQkFDRDcwRkM5NEU4MTE2Ci06MTA3RTIwMDAwMzM5Q0REMkI4MUJEQjU3NzRGOUJGQUFGMzgzRkU2OEMwCi06MTA3RTMwMDA1RkEwNkY1RkNFNTZBRTVCODE2ODExQzk1Nzk2QjdCNjJCCi06MTA3RTQwMDAxMTNGQTI0RDBBNkNBNUZERDc3RDhGQjcxMTNFNUZCN0RDCi06MTA3RTUwMDAzOTc4RkZFOEU2QjRGNUQ2MkI5MEU0NzI0N0QxOUQwNDVCCi06MTA3RTYwMDBGRTM3QTU1RDc3NTNCQjJGREJERjkzMjVFNjhERDBCQ0I2Ci06MTA3RTcwMDBCNzdDNUYxNkYzQkExQTUzQzk3RjgyMEZGNTRBRUNEMzY5Ci06MTA3RTgwMDA3MEZDMEU3RUQ0MkJBMkY5MjBFQUQ1MzgzMjA1ODk3NTE0Ci06MTA3RTkwMDA0RTY2M0FFNEI0NUQ0Q0M3Q0Q3NjQxQzc4MjUwNDk3MzEzCi06MTA3RUEwMDAwRkQyMzFDRTFFQkE4Q0YyMkI3QzdGOTRFNDcwMEI4NkZECi06MTA3RUIwMDA1Qjg0RTc2MDIxNzQ5MURDNUVCRkVEQ0EyRDYyN0Q4NTM1Ci06MTA3RUMwMDBBQ0FGQUNGRjdDRkU3RUU2NDk5QTJGODBGM0QzMzk2QUQzCi06MTA3RUQwMDA0MEVBRTFGRTFFQzVBMTA2NTU2MURGMTdDNkVEQkIzREI4Ci06MTA3RUUwMDAwQkFEMjdDQUM0RkU3RTMzRTUxRDUzRjVCQ0Q4RDg3RjQxCi06MTA3RUYwMDAzM0VBMEQyNjc2RjlBQjVDNjRCMEU1NEU5OUVDQ0EzOUVECi06MTA3RjAwMDA4Q0Q3Qzg4RTk5RjdERDI2OUJFQ0VGRDQ4RThGRDgyRUI4Ci06MTA3RjEwMDA1RkVDM0NEMDk5QUREQkUzN0NDOEE3NzU4NEU5M0M5MDZECi06MTA3RjIwMDAwMjVFREQ0RjdBRTkzQzMwODlGRUM3OUQwNzY2NjYwQjJECi06MTA3RjMwMDAzOTdERUQ3OUUwOURCQUJERDFBODRFMEVEN0QxOEYxMzEyCi06MTA3RjQwMDA5M0RDRkE4RjJFODJGMjRBQUU0NzY4ODRGNEMxRkQ2QTUwCi06MTA3RjUwMDBCQkM5RkUxQjM4MUZGMzhBN0EzQkQ5QjMzMUFGQzA2RDYyCi06MTA3RjYwMDBCNERFQUJGNUYzOTNGRUQzQzBGNTgwRTM3QTFDNUMxRjVGCi06MTA3RjcwMDA2OEVEQjI4NjQyNTI1QzNEQ0E0OTBCRDdBM0Y0ODMzNzAxCi06MTA3RjgwMDBDNEY1MkI0MUJCMUE2NDdCMzk5NkVCNEY1QTRFRUFFNzk2Ci06MTA3RjkwMDBCRDdBM0Q0Mzg1NjBEOTNGNUMwRjYxQUU3Rjk4RTI5RTFDCi06MTA3RkEwMDAyNDJGQUNFNEYzMTk5MDI2MERBQzdGOTgyMkRGMkE5MzlFCi06MTA3RkIwMDA1RDgxQTM0MjlFMTdFQTIwRTQzMjk5RDY3NTJFMDI0MEQ1Ci06MTA3RkMwMDAyOURBODQ1N0UyRTQ4REZGOUI5ODE1OTRCOUZDRTk1NEIzCi06MTA3RkQwMDBFMkY1MjkyNjVDOThFNTdGNkRCNjFFREZFOEYyMUZCNDU2Ci06MTA3RkUwMDA4RUU0NDNCMUFGMzYwRUM2NzIxRDg5RDU1QzQ3RjI4NjZBCi06MTA3RkYwMDA4NTBCMzY2Mzc1MjQxNTIxRDJCNzA5NEQ2MkRGRjg2MjBGCi06MTA4MDAwMDA3NTNDRTYzQTFENzMxRDRFOUUzRjkxNEYwNTM1NTcyNDMyCi06MTA4MDEwMDBEQ0JGQUNCMTNDQTE3RkY5Q0EyOTA5RTM4QkQxQTFDNjcxCi06MTA4MDIwMDBGNzRCMUY5QTkzMzA3RTU4RUI4RDA5RkQxMTlCNkU0OURCCi06MTA4MDMwMDAxODNGMkFCNDI4RTFGRUU4MURCNTQ5RUI1RTBDOUM4Qzg0Ci06MTA4MDQwMDAwOUFGNDhCOEJGRDFGOUU0QkI4NEFGOTYzQzU5QTU3OEQ1Ci06MTA4MDUwMDBGRUNBOEVGQjRDNzUzMUQzMTgxNzUzOEM3RDc4NURGRUFDCi06MTA4MDYwMDA0NjVEMUQ5NTgxMTE5RkM3QTNGQzFGMkJBNkI4RTlGRTk1Ci06MTA4MDcwMDAyQTQ5MUI4ODAzNkYyNEM4N0VGQzFGQzVDMTdBOTMxRDQzCi06MTA4MDgwMDAzMEY0RkY2MkZCMzczRkQ2RkQ4NDlDNTIyNDUxOUNFM0MxCi06MTA4MDkwMDBDM0I4MkE2NTJBRDUxMThCNzM3Qjc4NEJENEFCN0M5NkY5Ci06MTA4MEEwMDBGMjc3OEU4QjM0QzlFRDg1NkZEMjVCNTU4OUUyQTA3QjY4Ci06MTA4MEIwMDBBQjM0OEU4M0VFMUQ1Mjc0ODBGNjBGN0E3RUUwRjY0QTYyCi06MTA4MEMwMDBGOTAzRUI0MkNENzVBMDE5MEVERjY0RTBBRDExNTEwNzQ1Ci06MTA4MEQwMDBEOTgyODY5RUVDN0Y3MDg2ODNFMzhDODcyRDk2REJBQUZGCi06MTA4MEUwMDBFM0U4N0YyMjVCRDg5RjI3QjI0NUJFRjU3MzVCNzgzNzA0Ci06MTA4MEYwMDBEOTAxQzUwMTZBNTM5RTc4OUU4QTFGODAyQTdCNTAyRTIzCi06MTA4MTAwMDBFRTRDMTBGNTYxRjBDNkRBOTk4NUU0M0Y3QjQ2NkFFOUVBCi06MTA4MTEwMDA1NDNGOEJGRDZGRTA2NTI1QzRGRUU0OTY2Njg1RjNCQzk1Ci06MTA4MTIwMDBENUNFMjdEOTlGOTQyQkMyOUY4QzkzODVERjQwM0ZEMjE5Ci06MTA4MTMwMDA0MUY2RjE0REU5N0VBQjg4QjM4MjU2OTI0RjgxMDM4MkJFCi06MTA4MTQwMDBFRTcyRjZBRjdDNEU5QzBFNTlEMjhBMzJBQTRGQkRFMDM5Ci06MTA4MTUwMDBCN0I0QUYxMDRDODc2QUE3NUE4ODRGRkQ4QjY1M0UwRkE2Ci06MTA4MTYwMDA3RTg5NDg0MjdBRkI2QjQ2NzE5RDczRkY4NUZBM0YyREVECi06MTA4MTcwMDA4REYyRUJGRUM1OEY5RUJEQkIzMkE2OTcyNzZEQzlGMzZFCi06MTA4MTgwMDBCQzhCRURCQkQ1NkM3OTM0OTVDRTUxNEU4RTg0ODRGQTgwCi06MTA4MTkwMDA4QzM3QjM0NTdFRjg2NkI2MkNFQTBDNDJFRjc5ODg0REYxCi06MTA4MUEwMDA3RDRCQkUxODRFNDQwN0E0RUUzNTJFMUNGMkUwQTYxRkYwCi06MTA4MUIwMDA1NDkzNUM2Q0VERjM4MkI0QUY2OUVDRTM1RkM4MDMzQkFFCi06MTA4MUMwMDBBNzczRkRCNjkxMkZEREZDQkFEOEQ3QkJGOThCQzQ3RDYwCi06MTA4MUQwMDBFQjhGQjJDNUI5QzA0N0Y0M0U2Q0NCQkJGQ0UzNDk2RTM0Ci06MTA4MUUwMDAzNzkwNDJGMEJFQjI3RjNDQzUwN0Q1MkE2OEU0RjcxNzQ2Ci06MTA4MUYwMDBGODE3REU3RDE0RkJGM0Q2NEIxQ0VGRDM3RDFBN0YyM0RCCi06MTA4MjAwMDBDQTkwRUU5RjAwRUZBQjdCOTFCRUNGQjMwNTNERjNBMUNCCi06MTA4MjEwMDBEQTRBNzRCRUY2RkRGQTU0QzJEM0VCRTk2MjdDNTQwMjJBCi06MTA4MjIwMDA2RDZCREM3QzM3RThGM0JERkVGREU1N0IyOTRGQTdGN0RFCi06MTA4MjMwMDBEMUZCODkxRTdBRkYzQzE1NEFBOEZGMUFGOENGQkU1QTE3Ci06MTA4MjQwMDAzQ0YwQkQzNzgxQ0ZBQUQ3N0I1OUM5NEY5NjQyQThFREU0Ci06MTA4MjUwMDA2OUIyQUI0NzJDREVCNUMwNkQyNDkzRkQ5MjlERkQ1MkYzCi06MTA4MjYwMDA1RjUzRjRDOTdCOTBDRTNGRDVGRTc1QUY4NDdDRkRFM0IwCi06MTA4MjcwMDBDMkU4QUY5RkM2RUJERkREMjQ4Mzg2QjhGODM4QzMyRjkyCi06MTA4MjgwMDA3QkUyRUFCNDRGMkVGRTI0OTVGODg5RjFDQUY2OUY5MjVDCi06MTA4MjkwMDBERUVEQjQ3QkE5QUVFM0NEREE5REMzRTNFM0ZBNTRDRkMwCi06MTA4MkEwMDA3NDA3M0QwNzkzMkVFRDNDQURFQTg5Qzk4Q0JGMTVEQjAxCi06MTA4MkIwMDAwNUZFNTZGQzY2NDQwRUUxNkM0NUVBMDVEQzg5RkVGNkQ3Ci06MTA4MkMwMDA1MjNFMjc5RDIwNDFEMkZDNzgzRkUyNEQxQkMxNzUzNUJGCi06MTA4MkQwMDBBMDIxQ0VGNjdGMkVFQUNBRjcxQ0NEQTgyMEZBMTRGMDEyCi06MTA4MkUwMDA1RjE2QkY5RTNEMkZERDMyOUFFQjc5REZDOEJBMjQzQTg0Ci06MTA4MkYwMDA0OTY3ODM2ODdGNkY2NjUzODlGMTgxQUUyNzBCM0EzM0Y0Ci06MTA4MzAwMDAyQkY0Nzg3Mjk0ODdFMkI5REZGRkU2RUM3RjEwNUZGNjFBCi06MTA4MzEwMDBFRERDRkU0M0Q2OTE0QkUzQzNDMDNBNUE3NTI3REIyNzA5Ci06MTA4MzIwMDAyMzBGQTNCQTU3Q0FEMzBFNTlEODRGNUUyRERGQ0Y3OThBCi06MTA4MzMwMDAxOEQ1Njk3MERFMzVBNDg4QzdBM0MxNTFBREMyQkU4OTA2Ci06MTA4MzQwMDBFRjI0MzAwRTZFRjY3MkJEMjdFQkVCNEE1NUM0MkQ0Njc2Ci06MTA4MzUwMDA5RTI0NUJCQ0I5OEFGOEM4RTBDNUE5M0M3RjA5RDBGRTYxCi06MTA4MzYwMDA5ODlCMTIyQkMzNUU2MTFDRTE5NjJEQkFCRDAyOUYwMzQwCi06MTA4MzcwMDBGM0QzRDFCQTNEOUJFNUYxNUVEQjIyQ0U2QjEyRTI0RjI3Ci06MTA4MzgwMDBFQzU3RUQ0QTEyNzc1NkUzM0Y4RTNCMzdGQjlCNTNEOEIxCi06MTA4MzkwMDAyRjZEOTZDQjI4RUVGMDM5MjJFNEM3Q0Q3MUU3NTQ1ODAzCi06MTA4M0EwMDBDRkZCMDAwM0UyQ0ZFN0ZFNzI0OUYxRTdGNzNDRkYzRDY4Ci06MTA4M0IwMDBCRkIzRDRBM0IxRkQwOThGMTQ3NjJFMUMxOUMyNzkwRTU4Ci06MTA4M0MwMDBGRTU1OTA3RTBEQTVCRDAwM0EwN0NEMTNBRDRERUExREJCCi06MTA4M0QwMDBFOTQwRkRBQ0Y1OTRBRjdCNjgxQUMyNjVBOEUwMEZGNUUzCi06MTA4M0UwMDA1MUE0NTBBQTdENzJFODJCOEEwM0JCMTU5NjVGRkY3M0Q4Ci06MTA4M0YwMDA1NzdDRUQ3NzI0OTVBODg3RTRFQzIzODdBNzcwQkQ3MzlECi06MTA4NDAwMDA1Rjk3RDA4RkI2MENFRERGQTc1MjlFODE3MUU2NTYyNEEwCi06MTA4NDEwMDAzMTQ1RTlCMUE1Mjc1OUNGRDM2NDdGNTExRkMyMUU5MUMxCi06MTA4NDIwMDA0NzM5M0FDNEI5QTg0M0YzMDFEOTk3MTQ1NTFENDc4OTcwCi06MTA4NDMwMDBCOTMxN0VCMTQ3RDhEREZBQzM2RjE2RDk1MDNFNjcyREVBCi06MTA4NDQwMDA0N0RENzRCRTUyQjdGNzI5MzcyRTE3OUEzM0ZEMEY5MEM4Ci06MTA4NDUwMDBGRTJDM0ZGOUYyMDQ5NUVCRENCNjE0NTFGRTFEOEVCQ0U4Ci06MTA4NDYwMDAzQzgzRTNCM0Q5QzhEQTcxODNBRjI3QjBBOTgyM0U0MjE3Ci06MTA4NDcwMDA4MDg2NEQ5OURDOEVBMjdEMTVCQzE0ODg4ODc1RjY3NkIxCi06MTA4NDgwMDAzNDY3MjREQjFGMDhGQ0RCNUIwNzY5QkQzQjhGQTU3MEVECi06MTA4NDkwMDBEQ0IyMzNCQjlCRjUyMDM4MEY2MDNCRjJGQjg5Q0Y0NzQyCi06MTA4NEEwMDBGMzdDMDgzMEE2RTM4QTZBNEQyMjdGRkYwQjdEM0QzQkJCCi06MTA4NEIwMDBGNUZDQjJGNzczOTlDNzE5RjM4RUU5OTgyRUFCODhBQjI4Ci06MTA4NEMwMDBCMjQ4RUI0MUFFRTNFQUI0NkIyNERGOTQ2RDIwRjhEM0ZECi06MTA4NEQwMDA5OUMyNzU2MTgxRkRENzg4QkMzMzVEOUM0N0I3MEQ4OTEyCi06MTA4NEUwMDBGRTkxREUxM0RENjdEN0E4NEUzNTQ1NkQ4NTBDOUNCRjI4Ci06MTA4NEYwMDBDRDI2RkNFQzI4MDRGRTUzQUVEODc1RTM3RDI5OUQxQkU4Ci06MTA4NTAwMDBGOTIzMDhDNDA1RDdFM0E1MjhBREYwMEQ1NzNDRkY1MzY4Ci06MTA4NTEwMDA5OURFRkQxRTExRUZCNDBEODk1ODVDRTQyNzMwNTdEQTVGCi06MTA4NTIwMDBDQTc0QzVFODA0N0VBRjQxRTcyODhFOEJEQjZDRDFGN0I3Ci06MTA4NTMwMDA2OUJGMURFOTUyMDkxN0EzNDBEMDA5OUQyMzM0OEE1NzBBCi06MTA4NTQwMDA1MjU0NzFBRTlFQTI2QURFQTAzNDkwQUVDMDU4MDg2MTRCCi06MTA4NTUwMDA3MDAwMEZBRjg2MEI3QUNFNzU4NDQzNjI3RDA3RUE0MkM2Ci06MTA4NTYwMDA1Qjg5MUVDNzA0MTdBRjlCMzkyREFFNEY4NjZDNTJFQzRBCi06MTA4NTcwMDBGOTEzOUU2NUVCNUEwQTY5NURDMjBGMkE0QTk4Q0ZDNzY0Ci06MTA4NTgwMDBERDBCNDBBNUYzRUYxNEM1Qzc3OTUyQ0E3Q0QwOUE1MEQxCi06MTA4NTkwMDA1RTRFODc4RkVGN0I3MDhFQTZDOURDOEYxMEZEMkFEREMzCi06MTA4NUEwMDBBNzdEOUIzNEQ1MzkwN0U5NEVGQjMyOEQ5RjZCRThCNjJBCi06MTA4NUIwMDA3MkRENzlERERGNkY0QTJCQzNGNTlEQjExQ0JDNjcxN0Y3Ci06MTA4NUMwMDBCNjFGMkQwQzBGQTc3M0RBMDk2OUZFQjdDODFFM0Y3M0RCCi06MTA4NUQwMDA2QUQxQkEzMTM4RkUyRjZENTZFRjVDQjI0QjNEQzExRkU4Ci06MTA4NUUwMDBEM0I5N0RFRDEzNTY4REZDRTI4MzZGRjQ0N0JFMjJGOUJCCi06MTA4NUYwMDAzRTJCQjE1REVDQjM4QUZCRDhENzlBRjA3RTQzRTcwN0Y4Ci06MTA4NjAwMDAzNjNBRDdCQUE2RTM2RDFCRUQ3RkFGQ0NGMUJGNEY3QUY4Ci06MTA4NjEwMDAzMEE5QTNBOThBRjgzNjE5NUE5QjY5OUYxM0VEMjFENzZGCi06MTA4NjIwMDA0Qjg0NzM4NUJERTg3RjY1RjhENkE2MzgzRUJCNzJGNEVGCi06MTA4NjMwMDA3REVGQThGRjcyRDI5QjRFNUQzRkY3NTM3Qzg0RUQ1RUM5Ci06MTA4NjQwMDAzRDRFREI3QkUwQkJBNTVBRENGOTY5MTAwRUYyN0VFMDAzCi06MTA4NjUwMDA2QTc4OEVFQjNBOERFQjdEMjE2NTM2RTE2OEY0NkI4RTlFCi06MTA4NjYwMDBEQjdDNzEzOEIzRTUwODdEQjdFOUVGRkI3OThFRkY0QjEyCi06MTA4NjcwMDBENkRCMDNFRkQ4RENCOEZFQzA5RkMzNDVFNEFGQzIxODE5Ci06MTA4NjgwMDBDRjdENUQxRDY5QzBBNDJGMTdFQThFNEUwM0RCOTE5RDNGCi06MTA4NjkwMDBBRjc1NzBGQ0JERjMzRTM1OURGNDFFRTk4NzM0RUNFRkY5Ci06MTA4NkEwMDBDNUY4ODJGNDY4NkZCMUQwQkJBNjU3Q0Y4RkE1RkRFMkE1Ci06MTA4NkIwMDBGM0ZCOTY1RjRFRkNFQUY1NTgwRDdDQ0YxODQyN0FCNDc2Ci06MTA4NkMwMDAxQkQ4OEUxOTdBNTg0NjdBMjhEMUY3N0I2MkJGQTc4Q0JGCi06MTA4NkQwMDBGMDREN0E2N0VCOUVDMzdBQjdENzAyQTQ3Nzg4NkZDNjRFCi06MTA4NkUwMDAzQkUyNUJBNTM4QTQ0QzQ1QkNGM0YzMjM1ODhGREJCQUJGCi06MTA4NkYwMDA1RkJFODJFQkQ5OTFCREMzQzY1MURGQzJGODZBOEJDQzk1Ci06MTA4NzAwMDAwOTQ5Rjg3Q0E1MzU3MjkwOUVBRkM0RjczNzY5MzFCRDMxCi06MTA4NzEwMDBBQzk0MTJFQjdBMTY3QjQ0OURBQzYxMUY3RkEwRUI2NzkzCi06MTA4NzIwMDA3OEE0OTZFNkM1RjE0RTU5NEVDMDdGOUM5RjE0N0RERDFFCi06MTA4NzMwMDA4RkRFQkJGMTI3RUIzNkEwQkU5NEZBMkEyQzEzMjhERTdECi06MTA4NzQwMDAzOTI2QjMxRkQ4QUZDN0M5MkJGRTMwRTU4NjVERTIzQUE0Ci06MTA4NzUwMDBGQkNGODg4RThCODM3QURDRkNEQ0FBNUNFRTkzNUZEMDQ3Ci06MTA4NzYwMDA1MDJFRTNCMUY1NTU1MEJENzc2MzE1NkRDNTREOUFEREJCCi06MTA4NzcwMDA3QTg4REEyOUQ1RTEyQTNBMkU5Q0I2QTBGQjkwRjhDNjcxCi06MTA4NzgwMDBDRDM3OUFGMEQ2N0VGMDVCQTNCOTRFRkFBNDFERTgzQjM0Ci06MTA4NzkwMDBDRUY2RkY4Q0ZFRjEwOTVDRkYzREZCOTFERjkwMzQyRTlECi06MTA4N0EwMDA2MUJDQTFDNzY2RkMwRDg2OTMzRUE5RTdGQUE5Njg5NzRDCi06MTA4N0IwMDBBRkRCRjhFQjZCMTU3NEU4MEQwNDA0NUNGRjlDOEREQkZDCi06MTA4N0MwMDBENjA1RDEwNzlFQzhGMTVEOTc4M0Y4RkIyMkQ3N0Y1RDYwCi06MTA4N0QwMDAwRUYyQURFRkY4N0Y3QUM4OUZFQzdERTUxRDM3RjlFMTI5Ci06MTA4N0UwMDA3NjlCNkYzNEUxQUFCRDA0RjM4ODI0Nzg5QzkyNjM2NTdDCi06MTA4N0YwMDBGRjVBMzk0OEJENDk2MzhFQzhCNzg2MDc2MTFERTFBNTk4Ci06MTA4ODAwMDBBMTVENTY0M0U0QTc3RERERDc5M0RGNzgxRjU5NDlGQjZGCi06MTA4ODEwMDBEQTRCQTcwN0REOTQyRkQ1RUMzREM0NzVGQTQ2M0VCRDczCi06MTA4ODIwMDAwNEY0M0ZGOUQ2NTlDNEZGNzNCOTIyM0Y1RUJBQzE5QTI2Ci06MTA4ODMwMDA5MERGOEU4MDg4OERDRTkxMDM3RTU3NjMwNDQ1NTI2MzBFCi06MTA4ODQwMDA4QTNCRUVFOEQ4QzJERjhERDQ2RTRCN0NBRThFRTIxNDRDCi06MTA4ODUwMDA4NDUwREQ0NUYyRTNDNjFDN0Q5RkE0MTQ0QTI5NEU0MTk1Ci06MTA4ODYwMDBEQ0YwM0U0OUY0NTVEOUJCMTVCOEJFQUE4QkVBQUI3NjBECi06MTA4ODcwMDA1QTA0OUY5QzBFNjg0OUNCODhDNTJCMjNGMjdDNEJDOEI5Ci06MTA4ODgwMDBERTJEMzFGQzg3NUVBRjE0NkQ5M0Y4N0I4QTUxM0I0NDNCCi06MTA4ODkwMDBCRTNDRTVCNEI2ODVCRjkzMEFGQUI4NEVBRjg2MDg0MDMxCi06MTA4OEEwMDBCQUE3Mjg0MTVFRkY5NERDNTIwOEUyRkEyN0ExNzkyNjk0Ci06MTA4OEIwMDA3RDU5REEyOTg1OTg5RkZBNzcyRjBBRkUxM0ZCNDU5QjhECi06MTA4OEMwMDA2NUZFQ0U2RkIzMDQ5OUM1MzQ2Rjk0Rjk1M0FCRUYxRkI3Ci06MTA4OEQwMDAyRURGOTE3ODdFNTFCN0U5Rjg2MTBBOTVFQUMzQTZGM0Q1Ci06MTA4OEUwMDAyMDlEM0ZFNkYzOURBN0U4M0Y5MjlDRUZGQzI0NDc4RjM1Ci06MTA4OEYwMDBFNzhBQTAyOEUxQkJCQ0FFNEJGQjJFRUYyMzhBMDc1Q0M2Ci06MTA4OTAwMDA3NEY4MDgwOTcxRjkxRTFENDcwREZBQkFFQjQyQjI1ODA2Ci06MTA4OTEwMDAzNzhBODJFQUEzNkZENzYxMTIwMDJGRjNBOTFFNzE0MjMyCi06MTA4OTIwMDAzODgwRjU0MkRFNDYzRDYzMkQ1NERCQTg4RUFDQkVCRERCCi06MTA4OTMwMDBFOTMwOURCRjJERDVFMzVBMzM5RTkwQTFDQ0FGNjU3QTI3Ci06MTA4OTQwMDBERDUwQ0RFNkM0RkJCNTNBNUY2QTREN0M2OUYwNEIyNjNECi06MTA4OTUwMDBGQTQ0REM3REE5RjRBMUU1RkEwRUUxQTA3Njk3OTVFQjQ3Ci06MTA4OTYwMDBCOUNGQzFBRDVDN0Y1NURGQkU4NUU5NTlBQUNCNkYyMDc5Ci06MTA4OTcwMDBCRDQxNUVDRjMyNUMwRkU5RDNBNUQyNkI5NkRGMzEwM0U4Ci06MTA4OTgwMDBFNzU3QzAxNTA5RjI5QjlENzk0OUYyMkIwNTc1MzlBRDYyCi06MTA4OTkwMDBBRkJGNEJFNEI1RkQ1RDI1QkMyRjYxRTBDNUZDRkMyQ0YxCi06MTA4OUEwMDAzRDhFQkU2NjkzODgzN0NGNzY1NDM5MjkxRUU4M0JBQUEwCi06MTA4OUIwMDA3ODI1QzQ3REM1QjE0RkRERjRGRDRERjkzRTE5RTg5QzI1Ci06MTA4OUMwMDBCNEFGQjM2MjVEMTBFREU1OUVBRUExMzc2OUU4MDdDQUFBCi06MTA4OUQwMDA4RjI5RUMzNzJBOEU5NTg3NTI4QUE5NUZFRTJDRTUzQUNCCi06MTA4OUUwMDAxMzJEOTNGMjAwOUM4N0ZENzBERkQxQTEyN0NBMzg0RTZBCi06MTA4OUYwMDA5RjU5NDkyOTZBRDNEMTcyMjdDNTBCN0I0MEVDNkY0ODM4Ci06MTA4QTAwMDBDNzJBMzM3QkUyRkNDQTdCMzk2MkJGNjE0REVFQkIwRkU0Ci06MTA4QTEwMDA5MzlEQkE2NkI3OTVGNzgzQUZCMTQ2NUZBMjNDNkM0RkEyCi06MTA4QTIwMDA5N0UyNkRDMjdFRERCMTQ1QUI1MzQ4REVCRjkxQkMxNDA5Ci06MTA4QTMwMDA3NjFGRUU1RTkxNDVFNzM1RjU5RDU2RDVDRUY0REU3RDg5Ci06MTA4QTQwMDA5MEVFMDc3NzQ5REU2MTM4M0VCMEVGRUFEMTZEQjQ0RjYyCi06MTA4QTUwMDBCNEE1QzI0QkVDMzVERTU3OUVBRTNENEFGNUFFOTBFNzZECi06MTA4QTYwMDBFNEJDRkQ5QUNCQUNFQzVGQ0ZFNDNCRkY3NTJFQUVBQjI0Ci06MTA4QTcwMDBENkI3NjUxNkQ5RTEzM0JGREJDMzc1MTU3RDZEMTJFNDNBCi06MTA4QTgwMDA0QUI0OEY3Q0U4NDlBQUY3MzlGM0Y0NzExQjlEMDc1NzY0Ci06MTA4QTkwMDBCNTFGRTdCQThEQzFGQ0MxRDkxMEUyOEVGM0Y2NTYxQkEzCi06MTA4QUEwMDBFNTM3RjU1QjhDN0UwRjdGOEY1MkFEQzc1MTBEREJERTU2Ci06MTA4QUIwMDBFNjdFMkRFNTAxODRDN0NENzI0OEMzRkYzQ0I0RUYxOUIzCi06MTA4QUMwMDAzRTFGNkVEODI1RUEzRTJFRENERjI2RjE3RDAzRUY4QkJDCi06MTA4QUQwMDA3NEJCQjUxQzM0QzZGQjcyMDNFRjdBN0Q5NDgxRjc3M0M3Ci06MTA4QUUwMDAzMDk3RUJCNDk2RUY3QTg0RjFCRDQ0QzdCN0I5NkUwQUZDCi06MTA4QUYwMDAyREIwQUQyQzRCRTgyQkVEQjc5OUJGRkZCQjQzQzdGN0FCCi06MTA4QjAwMDAxRDE3QzFGN0E4NUMxRERGQTM2MDE0RTFGQkZDNzQ1MUM1Ci06MTA4QjEwMDA0Rjc3RkVGODEwMjdDRDdGRkUwOEVGQkU3RTFEQ0VEOTIxCi06MTA4QjIwMDBFRjFFRDVFMzgyRkU4OEM1NjdCQjMyMzZBRUI3RTMxM0NFCi06MTA4QjMwMDBGRTBFMzE3MEI0REY0Njc1MjdCMzNBM0Y2Njc5Q0NFRDRGCi06MTA4QjQwMDAzQzMwOTNGODdEMURGOEVCODg3RkQ3NzUzQTU1OEE4M0MyCi06MTA4QjUwMDBFN0Y2MDg3QjM2QTdEM0NFRTcxM0Q3NDFCODg1RTREQzI4Ci06MTA4QjYwMDBCN0ZGRjE5NjBDQzJDREFGMDU2RTBDM0JCNzRDRTdFQkVGCi06MTA4QjcwMDBCNTY1M0Y5ODQ1Rjk3QkFERUUwRkZCQkJFRTlDQzU3NjI2Ci06MTA4QjgwMDA2NzFDMTQ1M0JDMzc0N0ZGQ0U3QjRFNThCNzQzOUIxMzJCCi06MTA4QjkwMDBGOTRFRTdENDI0Qjc4NjRFM0JENzlCNUMwQjNEMzZGMkFCCi06MTA4QkEwMDA2N0Q3RUFGRUQzRUMyN0ZCRjI5QzJDRTcyMEZBQUI2MUY3Ci06MTA4QkIwMDAzOEJFNkU5N0E5OEU1MkU5NjE3QUZBM0I2QzdDREVENTlECi06MTA4QkMwMDA2MEYyQkZEMzcyQUQwOUY1MTc4M0UxRDMyQ0FGREI3MjJFCi06MTA4QkQwMDA3NTdGQTJDQjZCNkU1NEQ0MzFDQzc5NDVGNkQyRjk0Mzc0Ci06MTA4QkUwMDA1NzY0NzUxOUM1MEIwNkRGQ0NGMkVBRDI0QUQzQkVFRTQ0Ci06MTA4QkYwMDBGNzEyNUVEMkUzN0NBMzdGODNGRUZENUI1ODZENzVDNUUzCi06MTA4QzAwMDBFN0VEQ0ZFNzVBRjQ3M0NFRDA0RjJCNzA5RDc3NDlEMDY0Ci06MTA4QzEwMDA0RDM4QzRGQ0U2ODY3MjI5Njk3RUIzMzIxN0M3M0Y1RkMwCi06MTA4QzIwMDA3OEZCRkE3MUYxRjk4RDZGQ0I3MDhBRjcxRTQ0QkI1MjU1Ci06MTA4QzMwMDA1MUM5RjUzQkREN0M1RUE4QjRDRUE1NzNCMEMwMkVBQkE4Ci06MTA4QzQwMDA5N0YyOUE0MDg3Q0NGMTQwNjA5NzNENjRDMTc5QUYyMTlCCi06MTA4QzUwMDAxQzIxNURENTlERDJENTg0MjNDQzFCNUE3MkQxM0VDRDJCCi06MTA4QzYwMDBBMzJENjUxQzM3QUYwM0UzMTE3QzZFREVDQzhGMTk3RjFCCi06MTA4QzcwMDA0Nzg2OEE3NUY3MkI1QTRFQjIzQ0MyQzgxRjFBM0UxNzU4Ci06MTA4QzgwMDBGMUFBNzFCRDAxRUQwMDhENkZEMEJGNEI2QjNGRjhEN0RFCi06MTA4QzkwMDBBMkUyNTQzQUI3RkRBQzY4MjFDNUE5QjkyMjdGMzFFMkZFCi06MTA4Q0EwMDBENTI4QzZBQjI1N0FCQzQyNzUxNzRCODVFODYwRTk3M0I5Ci06MTA4Q0IwMDBGN0Q5Qzg3RTFEQTYxRkI2QTBGQTQ5RDVCRjg2RjI2MUI2Ci06MTA4Q0MwMDBENTBGOEQzRkEyNDA0MzZBNjEzRDZBMjA5RDIyMUNFRTc0Ci06MTA4Q0QwMDA5NUM0RkVDREIzNTZBQTBEODFBNjk3ODc3MDVENjBFRjRGCi06MTA4Q0UwMDA2QkUyMUNDQUFDRUZCRDhCQkFEOTVFOUM1RkU4NkEyNDBDCi06MTA4Q0YwMDBCQzJEMkZEQkIyMDYyMzBDMThCREZGNzVCNjM3QTM3RjQyCi06MTA4RDAwMDA2NzUzMkQ2QTZDNUQ0REY0REQxREU3NjkyRDA5RjE3MjI1Ci06MTA4RDEwMDA2RjQ3QjM4REY3QTFFM0JGMUIyRTE5MTgxRkQ1NUY2NEYyCi06MTA4RDIwMDAxRkVCNzk5MzVENDFGQTM5REVFRDNCMjJBQkI0MkY4NDIyCi06MTA4RDMwMDA3Q0ZDNjU3RTNDQkZGNDc4QThGRDYwMEFGQkFGQkVFMzE3Ci06MTA4RDQwMDBBRTEwQzVGRDdGRDFGMTc4NDZERjk3NkY5QTI0MzMzRjhGCi06MTA4RDUwMDAyQzkzNDUzQjdBRkYzMzI1MjQ1RjkyODcxRkVERkRDRTkwCi06MTA4RDYwMDBGRENGNUNFMUUzN0RGNDkwQTgyM0RFOTE1ODg3NUQxRjgxCi06MTA4RDcwMDA0RUFDQjMzNkY4MUFEMEY5OEE3NDBEQTdFRjk1MERCQTM4Ci06MTA4RDgwMDBGNjJBM0Q2RTZGMTIzRDkyQTQ4MzJDMkY4Qjk0OThFN0E4Ci06MTA4RDkwMDAwNjlFOTVBQkUzRUI0ODcxM0RCNzkxREQzQjY5RTg4QkVGCi06MTA4REEwMDAxMkY1OTAxRjdFMkI1NzYzREMzNDc1MEFGOTVBRjY4OTQ5Ci06MTA4REIwMDAxNkRGRkYxREIxNUY2M0U1RjcwRkI4M0YyMzU4NDdGNzk0Ci06MTA4REMwMDBDRjE3M0JCOUJFMDEzRTBGQ0VBNUZFM0QyNUUyRjcwMzBFCi06MTA4REQwMDBFRTc5Qjk3NjQ0RkMzRTFENDgyMjFGMEY1OEEzNUNFRjg0Ci06MTA4REUwMDAxNzM4NkU2MUZBMDJDN0ZCM0Q0MzVENjQxN0I3Q0NBNDI4Ci06MTA4REYwMDAzQURBNkI3NTdCNzFCOEM0NTk0MzM4MEZEMjdCNzM2MjEyCi06MTA4RTAwMDBGMzJDQzkxNUU3MUI0MEVCQ0Q4RDdENUY2OUFDNzczNTQxCi06MTA4RTEwMDBEQ0M4N0M1OEFERTNFQTNGRjRCQzFFRjNBOEYzQjk0OUMzCi06MTA4RTIwMDBGMkE4QzFFMkRGMEI3NEVCRjFEM0Y5RTlEQTg5RUYyMUEzCi06MTA4RTMwMDAwRUNBOEYyODQxQ0FEN0Y3QkM5MTEyMjJGRkRGQjQ2RjQ4Ci06MTA4RTQwMDBEOTlGMjgxRjBFQkM2OTA3OEE0M0VFRDlCRjZDMDRENzhGCi06MTA4RTUwMDBFMUZCRkQ1NzkyM0QzOUJGRkY4RTJCQjk4RTUxMTJERkRBCi06MTA4RTYwMDA5NzA2ODlCRTVDOEFBNzVFRjU1MDlDNTRCRkVGNTVBRTRECi06MTA4RTcwMDA3M0FDREYzQkZFNTE4QTlGMzA1RUJBOTZBRTYzMUNDMzczCi06MTA4RTgwMDBGODJCM0Y1NkM5RjhEQjczQjQzMkIzOTQwODA3QUY5MzlECi06MTA4RTkwMDBFNkFEM0ZBMjcwREQ2M0ZEOTFDQTE3RTc1MjVDNzM2Q0NCCi06MTA4RUEwMDAwNkM3NEY0NkJDNTQ0MUY5MzhDNTRGNDc4NjI2QzQ0RkM0Ci06MTA4RUIwMDBBOTc5ODI3RjdEMDc1Mjc4RkY0MzgyMTI4MTFGMTg5QTE5Ci06MTA4RUMwMDA4MDlGQkFGNjNGNzA5QzUxODdGNjJFMUU0N0M2NzNDNTI5Ci06MTA4RUQwMDA3OTBBQ0YzMzJDNEZDNzRGNThGMjMxM0U3NjhCQjZBRTVFCi06MTA4RUUwMDA2MzBGQUY2RkI5MzVDQ0YyNkVEQTY1MTVGN0RCNDQ2QjAzCi06MTA4RUYwMDBENDQ5MDcyMTIzNDhGQzc4OTEyRUExMUNFNkQ4NDI4NTRECi06MTA4RjAwMDA5NDZGQkU1MDJDRjIwREIzM0M5RUM4MTNFNzg1MkY5Qzg2Ci06MTA4RjEwMDAxNERGMTlCRjMwREQzRjIyRDlGN0M2NDE5ODIxRjI3MDI2Ci06MTA4RjIwMDA0OUU3NzdCQjc1NzZCMkVGNzk3N0U0ODlGRDA5NzcyNjUzCi06MTA4RjMwMDAyNDlDNEIxQUVEQTM3OTQyNUZFNkQ4QzQzRTk1RjlCRTU2Ci06MTA4RjQwMDAzRkNGRjAzRkIwOEVDRTYzNEVDQ0I1QUFDNkVGQjdFNEFDCi06MTA4RjUwMDBBMUREQkQxRThDM0ZFRkFCRjNCM0U4OUM0QkU0RDUwMDI1Ci06MTA4RjYwMDAzRDMzQzkxRTdFOUJGNkY5MjlGRTlBMjRGQ0JBQjFDRjg3Ci06MTA4RjcwMDAzRjZGMzMzQzIwRjZGOTZGQjU5MjVEMzBFQTRCRTZGOTZFCi06MTA4RjgwMDBDQ0YxNTdGNUQ1MzRDRjhERThERjY5OUU5QjY2MjdERTlGCi06MTA4RjkwMDBGRkY2NDVFMkFFMDU3OUJBMUYxRjBFQzM0NTVFRTE3MkNBCi06MTA4RkEwMDA5MjNGMzhENzY1NTU2NTVFNDc2ODY4QjJFRjBCMERGQjk5Ci06MTA4RkIwMDA3Mzc4OTUzODNGRUE0MkJCNDg2REQzQThENzc5REZFQThBCi06MTA4RkMwMDA4NTAzMjc5RjRDNjdCQjlBMDIyNUM4RTJBQkJFRkM5MzgyCi06MTA4RkQwMDAyN0Q5M0M0RDE3RjQ3NTdFMDJGRTBDNzk5REE1M0NBMDY3Ci06MTA4RkUwMDA2Q0EwQkNFRUNDQjNFOERGMjU5REIxRjFGOTI2MzQzRTkwCi06MTA4RkYwMDA2NDkxMDdGRjJFQTk2OUQ0NjcyREE0NEY2N0Y1RUY1RTMyCi06MTA5MDAwMDA5MEJFMjI3QjlDREQzRjlCRjczMURGQkY2NzA2NDQ4MzI4Ci06MTA5MDEwMDA3OEZGQzAyODNCRkJCRkZBOTkxMjlGMUZENDQ3ODQzRkJCCi06MTA5MDIwMDBBQzlGMkZGQ0UxRjBGNjc5MkM5N0VGQTA1QzdDNUUzNkNDCi06MTA5MDMwMDAxM0FGNTE1REFFMjFFRkFCQkVFQzlCNjlFNDkzNzQ4RTMwCi06MTA5MDQwMDBEMzQ0Mzg2NzNCOURDNTZEN0RGQkRCMkQ3QzVFODk3RUZGCi06MTA5MDUwMDA5N0UyQzIxQjI2MjVDQTZEMDRGODFGQzhDNkZCMzdDRjhFCi06MTA5MDYwMDA5NkJDRTg0MTA2QzhGREU2NUJFN0IxREM2RkQyQkY4Rjc2Ci06MTA5MDcwMDBCOTk4REM3RjlCRTdGRjY5MUVFOTdENzdGRjc3QzYyMDAzCi06MTA5MDgwMDA4QjVFMThGNTQxMTFGOUQ3ODY0MTcwQkQ1NUU3MkYwQzVECi06MTA5MDkwMDA4RDNFNERFNzY1REUwQkU3RTk3RjdGM0FGRTNDQkRDNEMwCi06MTA5MEEwMDBFM0RGOTI0Nzc2RDVGMkE1RkIwQUEwRjk3QTdFQjk0MkIyCi06MTA5MEIwMDAyMjM5MDFFQkM1NjA3QUI1NDM5RjdGNDc5RTJBREU5MzM0Ci06MTA5MEMwMDAyNUNFODc0NkU5RkQxN0FDQTE0MkZFOUVBMkVDRDJDRThBCi06MTA5MEQwMDAwMTlCOUU3RDdFMkNEOUI5REUwMzQ3QzZEQUUyRTQ3QTk1Ci06MTA5MEUwMDA2NjA1REEwN0YyMzdGQjBFRjFGNzg3MzFEQzU5NzREQ0RECi06MTA5MEYwMDAyOURDNEFEMjhEQkExRjREQzRFMTE5QzIyMUQ5RTdERDVFCi06MTA5MTAwMDA4N0FFQTdGQ0YxNkNGQjRENTk5MjE2RTc2N0Y3OUU3MDhFCi06MTA5MTEwMDAwRjhCOUJGN0FDRkVCQjE4OThCNzBERkY3NjZBM0M5RDkyCi06MTA5MTIwMDAwRjMwOUQ2N0MzNjIzRUQ0RkZFMTM3OEQ4OUJGREY2QzhFCi06MTA5MTMwMDA3QzY3Qzc3ODdFNzA2NDIzOUZEMzFCNzg1NjQwRTBEOTQ0Ci06MTA5MTQwMDBGODNEOEMwQkRGNTVEQTgwQkY3QjBDRUVCNzczN0Q0NUE1Ci06MTA5MTUwMDA5RjM1NUE5NDFFQTcyRjFGMUE3MjQ0OTgxNTY2MzEyQkZCCi06MTA5MTYwMDBCOURFNzUyMjZDQThFMjczMDI0Q0RFRDc0REE2Q0ZFRkI0Ci06MTA5MTcwMDBDMkIyQTgwRjZERTRCQUM1Njk4REUwMjVEQzRBQjA5OThBCi06MTA5MTgwMDBGQjEzNjY4QkYzRjIyOUQwMkQxMzVEREY4NDI4QjczRUU1Ci06MTA5MTkwMDA1MDE1NkE2NzUwODUxOUI2OTMxQzYxOTlDMkFEQjZGNjMxCi06MTA5MUEwMDA4MzRFQzI1N0M0QTNBNEJGRUYxMEE1QTdDOUU0MTc1QkExCi06MTA5MUIwMDBCRjAyRUYxQjc4QzVDMTE4MDQyNUZENEUzRjJCNUZEOEI5Ci06MTA5MUMwMDA3RkFGNTNFODYzRjRBQ0Y4REQ5MzZGNDAwRkQzM0Y1NUE2Ci06MTA5MUQwMDBFOTY2N0E1MzM1MkQ4M0NFNEI3NjNGQjc0MkE2RkE5NzkwCi06MTA5MUUwMDBGREEwNDU0OUNGQkM5OThEQkNGRjE2OUQwRUUxQURFOUIwCi06MTA5MUYwMDBCMUY1NEVBMkY1QUFCMUZFOTQwNTYwQTFGNTRBQjA0QkI3Ci06MTA5MjAwMDBBQ0JGMTEzMkU4N0M2QzMyNDRGODNENTcxMUMxQjhERTc2Ci06MTA5MjEwMDBFOUEwMjlENEI3RTUxN0VCN0MxNkY5NUI5NTlFQkY1OUY5Ci06MTA5MjIwMDAxQzQxQUVGQjQ5Q0QxN0I4NzYyQTIxMzlBRjkyQjdCNkFCCi06MTA5MjMwMDBDMzhGRDBGOTRDQTk1OEU3NDRCQ0NFRTczODhEODJFRUY1Ci06MTA5MjQwMDAwQkZFM0E1RkQ4QkIyOTEwNjYzOTQzMERBODJGRjI4RjY5Ci06MTA5MjUwMDAyQkNDNTQ4OTVGNTJDNDYzQTFERjEzQkI1NEJFRjY3OTkzCi06MTA5MjYwMDA4MEU5NzdERjFFRURGRDYxNjVFQ0RDQ0JEQjk5QzNGNUIyCi06MTA5MjcwMDBEMEVCMjU0QjU0MjZCQTFDODVBMjFFM0EwMjYxRkUyRTY1Ci06MTA5MjgwMDAzMzkyRjg3QjY3QzVGOTM3NUU5RTRGN0VDRjJGQkVDMzAyCi06MTA5MjkwMDAzNUQ3NzVFRTA4NkRFNUJBOUIwNTQxNjQwRkNENTMwOENGCi06MTA5MkEwMDA3MERBMTNBQjAzQjA5Njg0RjhCRTk1Q0VEOTU1QUUzM0MxCi06MTA5MkIwMDBBREEwN0M3MTVGQjZGRkYyRkM2Q0FFMzcxREM2OTMyOTgyCi06MTA5MkMwMDBBMUYxRDVBOTMxQkMyMzY1RkNGQjNCNEU0ODZEMjU3QjQ0Ci06MTA5MkQwMDBENEFDRDdEMzA2NTVCNzVFQ0Y1NEM0RUJEMEQwQ0VGM0MxCi06MTA5MkUwMDA4RjQ4MjhBMkFFRkJERTJBNTE3RjdBRUY5MEZENUNFNzIzCi06MTA5MkYwMDBEQjIzODEyQTE1RDBGOUZGN0VBRTAzQTYxRjg2QjMxNkE1Ci06MTA5MzAwMDA3Q0NERjk3Rjk2RkVCQjBGMjVGRTM3MjY5NkVBNDYxRURBCi06MTA5MzEwMDA5RjZCM0U5NUNBRjVBRkNBMEM5RjQ2NzVCQ0U2N0FGMUM1Ci06MTA5MzIwMDBEMjk2RjEwRkY1NzA1RTZBRDA2QkFBMTM1N0JDN0NGRjIyCi06MTA5MzMwMDA1RUREQkUzNjNCQzRFRjAwNDlBQkVEQUEzNDhEQkU3Rjg3Ci06MTA5MzQwMDA1RkMxQkY2M0Q1NENBMTQxMjU3REY3QkU4MjlGQTczQTdGCi06MTA5MzUwMDA2NjJBMDJFRDRERjNERjQ0RkMzMkZGMkUxNUMyQUJGRjRGCi06MTA5MzYwMDAwNTlBMzc2RDM4RUZGNzI1OTNDNzM0NDMxRTk2ODE3NUZDCi06MTA5MzcwMDA1MjI4ODc1QjQ5QkU0NkREQUQ1MTZGNEI4MEEwNzUzQkRGCi06MTA5MzgwMDA3REUyNzdGMDU0QzQwOUZGRUUxRjQyQzk0RUI4RjQ5OTRDCi06MTA5MzkwMDA3RkNGNDNENEZGQjZFOEZDNDdCQTc2NzBEREE3NDM3Q0E1Ci06MTA5M0EwMDBBNzZEN0NDRjZCRTY5QjgxREZGRjAyQjlENzdFQTI1MDExCi06MTA5M0IwMDA1MzAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMEE4Ci06MTA5M0MwMDAwMDBCOUIyMkMzQzBGMEEzMUU4MUY5QTU1MUY5RThGODU4Ci06MTA5M0QwMDAwNDlBM0MwQjAzMDNDMzRGMjA1RUNDODM1RjFGMkUxQ0ZCCi06MTA5M0UwMDBDQjgyNjBCQjg4MzMzMEU4OEEzMjMwRTgwMUYxMTQyMDQ4Ci06MTA5M0YwMDA5RTBBQzQ5RjgxNTg1QjhDODE0MTA3ODg3MzgxRUMzQzM1Ci06MTA5NDAwMDAyMDc2MDc2MjZCQTBEQTJGMUMwQzBDRERDMjBDMENEMzhCCi06MTA5NDEwMDA4MDc4QTEzMEFBQjkyRjE4MjFCNDEyMTcwMzgzMjkxMDFDCi06MTA5NDIwMDAzMzMyNjNCNzdGQUExQTAzQzMwMTFEMDQzRjVEOTc4MURFCi06MTA5NDMwMDA2MUFCM0U3OTdFMTlDNTQzMEY2RjczNDRFNTFGQjU0MjlBCi06MTA5NDQwMDBFNTdGQjA2MTYwQjA3NzQyRjA4RjU5OTE2NjdFMzU1MDBDCi06MTA5NDUwMDA2RjhEMTM2RUY5QTM2RUE4RkNCRDFFQTg3QzBCMzRGOUFBCi06MTA5NDYwMDAxRDYxMTAxQTAwRkIzQjdDMjFCODAzMDAwMDAwMDAwMEM2Ci06MTA5NDcwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDNBCi06MTA5NDgwMDAwMDBCRUQ3RDdEN0MxQ0M1OTU2MEY1QzdGNEY0N0NBQUNFCi06MTA5NDkwMDA0NzFFRDkyMzVCMzIzREQyRDg5NjQxODZCNjJEREIzMkFBCi06MTA5NEEwMDBCNjcxNEIwNjQ3MjQyNDE5NENFMjA4MDJCOUMxMzZBQzA4Ci06MTA5NEIwMDBCM0UxQjgwOTc3MEIwRUMxRDFFOEZCQzNCMjE5MTkyRjdDCi06MTA5NEMwMDAzMTFDODE0MTdDQzQxMDJFMjgxRjk3NzUxMjcyMTkwMzFDCi06MTA5NEQwMDBDOUNGOUJDQjY1MUQ0MjM4MjcwNzM5QTFGOEQ4N0M2RUQwCi06MTA5NEUwMDA3NEVDMTlDRjVEMDhERTdBQUZBQUE1RTlENjdDRDk4NkRGCi06MTA5NEYwMDA0REZFMzhGOTQ3MkFENUZEQUFFQUJENTdBRjVFQkRGNzQ0Ci06MTA5NTAwMDBFQTc1OEQyMkJBNDhFQzIyNDJDRUMyREY2NjQyREU3Mjk0Ci06MTA5NTEwMDAxMTQyRDZDQzk2QTk3NjIzNEI1QTY4RjkzNDMxN0FFOUIwCi06MTA5NTIwMDBBMzRCQjQ2Q0JCNDBDQjE1RkU0OTUxRDAwOUI5MkM5QzYwCi06MTA5NTMwMDAyNjQ0MjQyNDM2RjEzMDExMjlEQzUwOUQ0MjQ2QTI4NDcxCi06MTA5NTQwMDA3OEY0NkQ1NUM0M0ZEQkFGQjNFQ0VEMjIyNEJCQUNGODJGCi06MTA5NTUwMDA3QkU5RjlFMTg4MUVBMEZEM0RCNUI2RDNBNEZEMEM3REU1Ci06MTA5NTYwMDBBNUI1RDM2QzlFN0Q1RjBCODM1MkZDMUEwOEM1QTY4NkY5Ci06MTA5NTcwMDA5MEZFRkFGQjg5MTgyNjY0OTA4RUJEOENGRUE3REU5M0MwCi06MTA5NTgwMDAyMDcxREE0RUM5MEUxMzdEMDVDMDg1MTA1RUZERkEwOTAzCi06MTA5NTkwMDBGMTY2RkE3Q0QwNDUzQTI3NjhBOTFFNEQ2NTdEMTRFRjI3Ci06MTA5NUEwMDA0QjlGRDM1NjQ5OTQxRThGNkM4QUJGQTU3NTRGNDRDQ0YwCi06MTA5NUIwMDBBNDgwOEVDODQxRUNGNzM0QTUwQjg2N0FBRkU4NTkwRDJDCi06MTA5NUMwMDBGNDUwM0EzNjU2NDhDRkM2NjJGNDNDOTc0QTAxM0Q5NzZDCi06MTA5NUQwMDAxREQ1NTdFNkQzQTNENjMxN0FENEJBMUU5Q0E3RDMxMTkyCi06MTA5NUUwMDA0QTRGRjQ0MkU4RjkwQ0QyMzNDOEU5MTk3NEQwRjM0MTc4Ci06MTA5NUYwMDA0RUNGNzY4QjlFREEwMUE0NjdBMDlFRDI0MzFGQjlFRkFGCi06MTA5NjAwMDA0OTkxMzg4NTU3ODE5RTAwQzBEOUU5MTkwMDdBOUEwQjkzCi06MTA5NjEwMDBEMEEzRkU3OUU4RjkyQjJFNkY0OUEwNjc0RDc5N0E5Mjk1Ci06MTA5NjIwMDA0MDRGNEQwNUY0RjhEMzQ0QTNDRjNENDQzMDI3OUFFNzhCCi06MTA5NjMwMDBFMkU1RTE3QzVDRjFGNTc0MjQ0NUZCMURGRTkzODRGM0M3Ci06MTA5NjQwMDA0QzU3NjQ2NERCOEE1OUI4NDk4RUQ3RjdBMjAzOTE0OTE1Ci06MTA5NjUwMDA5MEFGMjVGNzQ3MDhFRDZGQjg1RTQwNzg2N0JGMEYxMEYxCi06MTA5NjYwMDAwNUUxQjUzQUIzMUJGQUJGRjg4OEJERkZFMTdBODZBRkQyCi06MTA5NjcwMDAwNUZGN0IzRThGQkYyNzEyQjY1QkUwOEYwRjQzN0Q3OERGCi06MTA5NjgwMDBDOTM3NDgwMkM2NzFBNTIzMUFCNDhCQjI3NkZENEJENkYyCi06MTA5NjkwMDA3NjRFRkEwQkI1NjdGNDBDRUY0REExM0NBQkQ5Q0YyMDU5Ci06MTA5NkEwMDBCRkZFQTYzRTRENzQ1QUY3MUM0OTEwRTBCRjEyNjFGODg4Ci06MTA5NkIwMDA1OEVEMjk1RTg0NUMwRTY0REY2OTlBMEMzRjQyMTZEMjM1Ci06MTA5NkMwMDA3OTRBREQ5OTRERDFGMTYyRTlEQkQ1MzhFNUM3NzA2RDk2Ci06MTA5NkQwMDA4RjBBNzQwRkU5MDczQjQxNkY5RDhFMjk0NDhBMDI1RTExCi06MTA5NkUwMDA4NUY5NjBDOUM1NjYzMkFBMzZEMEY5RUM3RDU5MzI0NjkzCi06MTA5NkYwMDBDODVDQjgxNDA4NTdDRDZDNURGNjhCMjREQjQ0RjBFRkUyCi06MTA5NzAwMDAyQzAxN0ExMjM4RkZGRDRCRUU0N0JBMTVBMDZCMDVEMDNECi06MTA5NzEwMDA5NTI0M0E3REZFMkQyRTNGRUVBRkE3MDhDODk1QUFBNzQ3Ci06MTA5NzIwMDAyMkE5MTU3M0M3MTkwMkZFMzc0M0FGRTlDOEI2M0NGQTQwCi06MTA5NzMwMDA3RjZFQ0QyRjlENTdDN0ZDMjI1RjFFMjA2NjM2MDU3Q0FECi06MTA5NzQwMDBGMUQ4RTdDRDJBRkY5RUYzRkRCMkJBMTRGMkI3RENGOEU4Ci06MTA5NzUwMDA3M0U5NjdFM0ZGMUREMUIxMUZBMkE2MjNGMUMwMkMzRTIwCi06MTA5NzYwMDBDM0FFQzkxRTkwNkJCQTI2OEQyNzI4QzhBNTc0OUNCNkI3Ci06MTA5NzcwMDAzQzdFM0JDNzlCQTE1MzRFREJFNEY4MUI5QzRGQzM5RTMyCi06MTA5NzgwMDBFOUU3RjNGQjczRTJGMzVEMEVGNzVEQTI2MTY5RDE3NTYyCi06MTA5NzkwMDBFOTUxMzY0RUI5RkU3RjAyMkNBRTAxNzhDN0JBOTI1MzFBCi06MTA5N0EwMDAzNkJFREZDREUxMkY3QkNFMEU1NzhDM0Y5RjlERTE0RjI0Ci06MTA5N0IwMDAyQTAyRjI2OEFENDdGODMzRTcxM0MyNDUwNkZGRkM2Qjk3Ci06MTA5N0MwMDAwOTU5MEVGRjg3MzZGOUMzQ0Q5Mzc3QzJEMjdBMjU5QzBCCi06MTA5N0QwMDAzODBERUQ2RjIzODk4QkJDOEQ3NEJEQjgxMjVGODQ3MjE4Ci06MTA5N0UwMDBBQjZDQkU4NUZEMTJCRkY2QzYyNTVDRUUyNEQ0MDM2Q0JGCi06MTA5N0YwMDAzQ0RBM0RBMUZEMDc3ODdGQjJEMDQxMDg5NTY3NzcyQjExCi06MTA5ODAwMDBDOThDNTBENEFFOTI1RUNEMEE5NDlGMDcwOTMxMTY2ODc4Ci06MTA5ODEwMDA3OUZCRkExNERCRDdENzZCOTkyREIwOUY2RjkwMjkyMTc0Ci06MTA5ODIwMDA3NEJDMkFBMjc5QTAwNEY4MkM4NTBCQUVGMTFCNzQyNDE5Ci06MTA5ODMwMDBFMjI2MUZBRjhBMTc5MDFCNEYwQjQ5NzlBQUU4RjhBREIzCi06MTA5ODQwMDA4QTZENUQ3OENDMDQwMUJEMTA4ODkwQUMyNzQ4RjU4REY5Ci06MTA5ODUwMDAxMDA4MjNGRUVCQzgzQTg2QkYyRTQwN0ZENUIyREUyRDFFCi06MTA5ODYwMDBEMzcxQTQ5ODY4OENEM0E3NTUxQkM5RkExRDc5NzJBODI3Ci06MTA5ODcwMDAwQjRDN0VCQjYzQTIwODc0MEQ1MEZERUZBNjRCMzI1ODEzCi06MTA5ODgwMDA0RkQ3M0JBQzg3MDhCNTM3MEFDOEVEOEM3RUNGNDkyNDRCCi06MTA5ODkwMDAzQjhGRjY5QjEzNDg3NjM1QURGQkM5RkEwNDZEOTc3NjdFCi06MTA5OEEwMDA5M0Y1QTc3MDVDNjI4QzE3OTBCM0VEMDI5QjU3MjEzNjNECi06MTA5OEIwMDA3REY2MkNEQTA1MjRGMzNFQjQwQkQyQjg4RTk1NThEQTM3Ci06MTA5OEMwMDA4NDdENDAzNTgzODYxQkE2RkRFRDdCOTk1RTkzODkwOUQ3Ci06MTA5OEQwMDA3MjEyOEFBNUIzNTVGMDVFNUYxQTA1N0MxN0M0OTJFNDM0Ci06MTA5OEUwMDBGNTY2NTY0RUU1RTFBQkZBNTMxMUI0OUZBMjRCODU5RTQ3Ci06MTA5OEYwMDBCQzdERUMxODk1OUZBOTNDNzkxQkRBQ0JFQzgwRkVFODg3Ci06MTA5OTAwMDAwMEQ3MzM5RjQ0RkQ2OUJERkYwNEU3OTMzMjQ5OTEwMUJECi06MTA5OTEwMDBCQTc0MjVEMzIwQ0M5NUVCMjFBMUIwOUVEOEM5RTk4NTk2Ci06MTA5OTIwMDBCRjJCRDdEQUU1NTU5RUNGRTU5NTBFRTE5NjA5Q0FENzRDCi06MTA5OTMwMDBFMDUzMjQwM0Y4NTI0RTNFN0YzM0FENUZGMkEyNEE0NjE1Ci06MTA5OTQwMDBBODdDMzU5MzEzMjJDOENGQTU2NDFBNEI4MzY4MTI5NDYwCi06MTA5OTUwMDBBQjg4ODE2NTBCODk2M0Y5ODczNjJBRjdCNEJDQ0RBNDNGCi06MTA5OTYwMDBGMkRFODBGMkZGNTE4MThFRkZGQkZBQzRCMjIwN0RFRTYxCi06MTA5OTcwMDA4OUE1MkU4N0ZEODVDQUZGNzY3ODRFRTU0NDAwNzlBQTMxCi06MTA5OTgwMDAzNjQ5QzFGRDMyMjRCMEY1M0EyNjZCMUU4MDFCMzMwOURGCi06MTA5OTkwMDBFQUM3NDM0MjZGMEFGNjg5MjE2RTI3MEQ3OTg4NkQxRDRCCi06MTA5OUEwMDAxRkUwNzQwRkYxMzIxNDRCOTA0OTk4NUYzQTJGQTBENzAzCi06MTA5OUIwMDA4RjQ1NkZDNTc1RUM5NjU5N0Q4MENFMEJDQUREMjZCNkY2Ci06MTA5OUMwMDA4RjM5RjE1MDYxNUU1NjlDRkYzQzZDRkZGM0NGQzM4MDMyCi06MTA5OUQwMDA1MDUzNzAxRTA2NjExRUI2MEI0QzdGMkFCRjYyRTM5NzgwCi06MTA5OUUwMDBBMDBGRjdFOTlEREQ4RjIyRkY5NTUzRTcwNjZGRDFCRkVBCi06MTA5OUYwMDBENkExMzdENzcxM0RCNzgxNEMyRjk2QTkxRUI5REQ5REYxCi06MTA5QTAwMDA1NTY0MDFGMUZFMDJFMEZERDZDRjRFN0MwMkU4MjE5M0MxCi06MTA5QTEwMDA4OTY1QjA0RjUxQkMxRjE2NTA0RjI2QzkwOTNBQkVGQzhDCi06MTA5QTIwMDBCMjk0MDEzRjQ1RjQ1REEzMjY0QUY4Mjk0NEEzRkE0Q0I5Ci06MTA5QTMwMDBFNUZBQUMwMUZFQjc0RTdCQzMzNzU3RkYyRTlERjhBQjVFCi06MTA5QTQwMDA5MzY4NkYxMDM1MzEwMkZBNjk1MzUyMDVCOUU4QUREQkZFCi06MTA5QTUwMDBBNjgyMUMwREQ2RDEzQUM4NEQ0NDUxODVDQjY4RTkyNzYyCi06MTA5QTYwMDAxRDIwN0Y5NkZEMzExMEQ5MzExNDBEODNERDYzQUM4NTQ3Ci06MTA5QTcwMDA2RUFERjFCNzQ0MTI0NEMwRTc4OTc5RUVBOEZERjkyRjI1Ci06MTA5QTgwMDA2MUZENkI4OTg4NDRFOTUzMzJFRjUzODFDRTdFNkQ5QjMzCi06MTA5QTkwMDA5QUVGNzcyOUZFNDQ0NEExNzIzODA4RTNDMUY4QUVFNDk2Ci06MTA5QUEwMDBGMTY4MEJFODRGQjJCQTA3RjRCOTk2MjRBQjQxQkUyMzc0Ci06MTA5QUIwMDBFRDg4RTc5NkJBQjgwQUVGREQ5MTU1QzRBRDAzOEJFM0E0Ci06MTA5QUMwMDA2ODU3MEQ4NEVERkVEQzYwREQxREU0NTY4NDRGOTIzNzRGCi06MTA5QUQwMDBGQzczRUQ2QkI3M0Y0OTk0QkM3RDAyQzY5MUYyRTZEOUE5Ci06MTA5QUUwMDAyRDI3QjM0MDk3MTQyOUFDNzdGRjA3OTc3RjUxOEZFMzU5Ci06MTA5QUYwMDA3RTQzRDI5RjM3NTUyQUY3MkUyRTAzQUUwOEY5OTk3MDcwCi06MTA5QjAwMDA2OURFM0M4NUYzRjYxRDNBNEYwMzFFQTNCM0QwQkFBNDE5Ci06MTA5QjEwMDAzQjg4QkQ1RjQzMjBFQURBQ0FGQjlEREQ2RkY5QkNBNzM1Ci06MTA5QjIwMDBENzBENERFMkJDMDdEMjMwRUZCRDU0RUZFM0JFRkE2QTY5Ci06MTA5QjMwMDAyMEYzMDQyNUExN0I1M0YyMTE3OEVGNEFDOUE0Mjc4Q0E2Ci06MTA5QjQwMDBERDM0QzEzRTc3OTc3NEIxMDFGMjc3MDBGODQ2Mzc4RTY1Ci06MTA5QjUwMDBEMTJFMTVDQjkxMkUwRENCQTFBRTA4OTY5RkY3N0RFRUExCi06MTA5QjYwMDA4QjkzQjRERDlFOTQ1QjczODMxQ0E0RUY3QTE2RkFBM0U3Ci06MTA5QjcwMDA1RTc3N0MwNEZBMEREM0ZFQTE1RjU5RDU5RUQwQTBDRUFFCi06MTA5QjgwMDBGNjFENTc4Qzk1Mzc4QThDOEY1NUEyMTdGMTZEMTE5OTU4Ci06MTA5QjkwMDAxREFFMTMxM0U1MjVBRDk1RjZEM0FCNUFFRDc2NkVDMDI5Ci06MTA5QkEwMDBGMENFQUUwN0ZBOUZBRkE5REE1NkY3RTgwQjZERjBDRTBDCi06MTA5QkIwMDBGNUYyNjM5MUU5MEQ5NzFDMjc0NjMzOTQ4NUY1Rjg1OTIyCi06MTA5QkMwMDA0MTQyMzg0OTVBMzkwREY2ODdCQzQwNDFCQkEwNUZCMENECi06MTA5QkQwMDBFQkVEODc0NUI2REYzRDI2QUE0ODY3ODQ0Q0JGNzA5NkZCCi06MTA5QkUwMDBGMkMzQTU4OTY4RjcwNDQzMEQxMzU5RTA0RjhENjIyQzI5Ci06MTA5QkYwMDBBMTQ1RDAzNUE5NTUxNzE4OEY4NEU1REY0REU2QURGM0EzCi06MTA5QzAwMDBBNzA0MzMyNkZFMDVGMDY5MEVGRERERUQzNkI5REUyNzJCCi06MTA5QzEwMDBCMkZERUUyQzVGMkY5MkRCRUMwNDNEMTNBMTYyNDg1MEE1Ci06MTA5QzIwMDAzRUY0NDc4MTBGQTI2RkEzRDE0NEY5RDAxRjUyNzRGMEM0Ci06MTA5QzMwMDA4N0ZBQkFDNTgyRkI4RTkzMEY1MkQ1OEQxMUQwOEY0RTA1Ci06MTA5QzQwMDBCRTdGOTdDQkQxMzM5Q0VGOUJERkZFMzBFQTg5RkQ5QTM0Ci06MTA5QzUwMDBEODkxRjEwM0RGNEU3NDgwOUVFRjZCMTE0NTkwRjNCRkY2Ci06MTA5QzYwMDAxOEZFMzlFOEQ4MzNDM0JGMTkzQTkwNkY3RDYxNjYzNzYzCi06MTA5QzcwMDA4RjZBNTQ3RTYwM0Q4Nzk5RkNFODI0REI4MUVGMEQ0QUIyCi06MTA5QzgwMDA5NzMwOTcyRTI3RkZERTZCRkEyQ0JFNTc4NUM0NzhBNjM3Ci06MTA5QzkwMDAxOUYwOUI4RTIzN0UxQkU1ODJGOEZENkJGMUREQzJDQkI0Ci06MTA5Q0EwMDAzRjgzNTc5NkUxNjVGQzY1RTBGNTk0OTAxODg3RjU3RDU0Ci06MTA5Q0IwMDA4MENCRUIwMTc5NTIwNUJEMTBCM0U0QzZDN0Q2RDE1Q0E5Ci06MTA5Q0MwMDBCRDI0RDhFNDlERjZGMzI1RThFNzVFRTg4N0MyREYyQkU0Ci06MTA5Q0QwMDA0RkRCRkFCMUUwMDJDMDA3QjYyRUUyNkM1REM4N0ZENjVBCi06MTA5Q0UwMDA3NTYxRTEzNUMyRjFENjQ5ODZDOTc1NTM2MUI5N0VBRjU4Ci06MTA5Q0YwMDBGMUIyRjZEMzFFREYxNTA0RjQ0REM4MUY0N0ZCN0I4MTdDCi06MTA5RDAwMDAzRjlFMDU3RUY1RDYyODNBRDgzRkQ0NTFDMkZEMUE5QjE2Ci06MTA5RDEwMDBFQTc5N0U1MkNERjYwOEMwRjcwN0I2QTM1RERFRUY4QTdBCi06MTA5RDIwMDBBMzlEN0VCQ0U2MUJFNkNEOTRBRURFQjdBQjg4REJBMDgwCi06MTA5RDMwMDBGRTgwRUY4QUUzM0FFOEM1RTMxMkZBNkJCRDZGMzcyRTc3Ci06MTA5RDQwMDA0ODE2OTg2NzFGQzRDNzI4RkU1RUMwMEZFRDZBNjVDNjM3Ci06MTA5RDUwMDAwODA3N0M3QkZENTRGMUQxN0VERTZDMjYxOUQwQTcyRTNFCi06MTA5RDYwMDBCRjE5MDFCQkJCNzc4NTZBRjQyMDU0OUMwMDdGN0I3Q0M0Ci06MTA5RDcwMDA5RjY4NEQzNENGNkRFRkYzMEY3QzVBQkE3NDc2MUNGQTlFCi06MTA5RDgwMDAyNzlDMDVEQjk3RUVFMUUwQzcyMzdEODJFRDdENDEzQzFBCi06MTA5RDkwMDBDQUQ1NURCMzc1MERGQkE3NzU1RDg1QUUwNUYzNkNFM0E0Ci06MTA5REEwMDAyQ0RGMjkyRDREMzJFQzlCQzQ2QkMwRkNDN0UyMUQzRDVFCi06MTA5REIwMDA3RjA0M0VGREJEODQ3QUQwQzk5RkJGOTMxMjVFNjlDREZBCi06MTA5REMwMDA2Q0REMTU0RUUwQkM1OUZENUQ1RDIzQTMxRTk1RUI0ODhGCi06MTA5REQwMDBDNjJEQzBBOEYxMEVCMDZGN0JFQjQ0OENBRkM5RkU2REYxCi06MTA5REUwMDA1NTI1RURFRUJBQ0FFQzZFQzJFMzFFOTYzQ0I0RkQ4QTcwCi06MTA5REYwMDA4REVCMzU5OEZFMEU5MDQ5MDI3MTk1MkFDMkUyMUEyMTI4Ci06MTA5RTAwMDBBMjBCMDREQjFCNDIxQzgzMjUxQjMxOUUxMkY2QkNEQjFDCi06MTA5RTEwMDBGRERFODhGRDBBRTYxODM5RUIzQjg3N0U2NURBNkZFM0U1Ci06MTA5RTIwMDA3QkQwNkYxOTdDM0RFNDIxRUM5N0FBODdGMEQ5NzlCM0Y4Ci06MTA5RTMwMDBGREJBMjI0OTdDNDhERTNFN0I1NjVBNEI1ODEzRkM0QkY4Ci06MTA5RTQwMDBBMDdDQ0JBMjgxRUI5MzJDMEMxQTRGRDBBMjNGN0M4NzM1Ci06MTA5RTUwMDBDRDlGRkE4OEQ0NjA4QjlCMkFEQUMwQTc4NTIwMkRFQjkyCi06MTA5RTYwMDA2RTMzMjdGM0Y0ODM3MzdFM0I2MTIwRjAyRkVCNzY5OUZBCi06MTA5RTcwMDA5MzE1RTgwRDMwQkIwQkM1QTUwNjk0NDRBNjFCRjZFRjYxCi06MTA5RTgwMDBDNTdFOEMyMzEyMzk4OTcxRTE0MUExN0ExNUQ4Q0YxNjhDCi06MTA5RTkwMDA5QzVDQTc2NDAxQUY0MDhCOTkwMjdEMzEzODRGMzQyNDFDCi06MTA5RUEwMDAwM0ZBMUQzRDAxRkUwMDkxQUUzMTEyMjVFMjRCNzI5RDc5Ci06MTA5RUIwMDBGQzlCN0M3QUZFQUQxNDA4MjM5RTNDQ0VENTVCNDZERTJGCi06MTA5RUMwMDAwN0JBNEE5RjRGMjg4QTkxMjhFNENGQTQyNDY2QkYyODY2Ci06MTA5RUQwMDBERUMyRUZBRjU0REFGNzRBNkJFNkYyMkQwREJDQTNDRjJBCi06MTA5RUUwMDAwNzQzRDRFNUJFOEM4OTBGQzg4MTVDRjdGRDkzQzA4NzFBCi06MTA5RUYwMDA4MURBQUQ5MTUyRjQxMjhEREEzOTc5N0U5MUExOTgyM0VECi06MTA5RjAwMDA1MjY5M0MwRTE0QzI4M0Y4QTlGMEFDMkYzMTBFOUY1RjRBCi06MTA5RjEwMDBFRDRBODNDNTNCNDAyOUMyNzkxQ0I3Q0YyOERFNDE2MTk5Ci06MTA5RjIwMDAzRUQzRDNGMEI3QkY2NTNDMEI3MTM0RDdDRDdFMTNFNjdCCi06MTA5RjMwMDA0RjMyOEYxMDg5QzJGRkE4NTYyMjQyMkJENEJEQUY4QjVGCi06MTA5RjQwMDAzODlGMUIwREQ0NTc0RENDQkYzM0U5M0ZBMDIzQjg1MUU4Ci06MTA5RjUwMDBCMUVENUJBMDNGNjdGNkFEMjhDOEJGQkRGRUI0NjQ4RjBFCi06MTA5RjYwMDA2N0Y2NzYxRDI1QkY1QzMyOEIzRjdENjQxNjhBMTdDQjYyCi06MTA5RjcwMDA0QUZCNDQ2MTdFNTQ1N0M0OEY0MzU0NUUwODk1OTc4M0NGCi06MTA5RjgwMDBENDZGQTQ0QzIxNjlFQTM3NDJGRDAwRjUxQjA5RkE5MzBFCi06MTA5RjkwMDAzQTk2N0Q1RDRENThFRTgzQTZFQkUxRkMyQzM5MTQ4RDhECi06MTA5RkEwMDA0MkJDRjRGMUM4MkQxNEU0MTBFODBFM0M1N0YxQjY0MzVFCi06MTA5RkIwMDBGQzdDQzRBQUQzMjcwMkQ0RjkzOUNCMEY3QkZGRDgwNjg3Ci06MTA5RkMwMDBGMTk4MTEwRkFCMTMzMkRENjZEQUVBNTIwRkM0RkI0NzhBCi06MTA5RkQwMDAwMkFDRkQyRjI1N0YzQjlDNDcxQ0UyRTc0ODQ0MzZENTY5Ci06MTA5RkUwMDA4RkU2RjlGRjM5Qzk4NTc0ODAwREM0REFGRkJFMUJGQTBDCi06MTA5RkYwMDBGM0M4QkM5RUFBNDc3QzY2RUE5NDhGODA4RjQ3NjVGNUJDCi06MTBBMDAwMDBCQUJFQzVEODNGQUEwMDNBNUVBQ0VGMjIzNkRFMTI2NjcxCi06MTBBMDEwMDBERjkzRTY2RDY1RjhEODgzRjI3RjNEMUNDMjAxQ0RDRDlDCi06MTBBMDIwMDBENTcwQTg0QzE0QzMyMEIwREQxQzBBNzFCQzJCRUM4NzgyCi06MTBBMDMwMDBDODA5QjZERkYxQjg1MkYxNzU1MzY2NUZFMzc4OTQ5QkI3Ci06MTBBMDQwMDA3RjAyN0UyOUM0MkZBODFFNEVDMUI4M0YyREJDNEZCRjMyCi06MTBBMDUwMDBEQkUzMUU3MjlEMUI1Rjk0RDZFOTk0NEM1OUZDQjc1MjBBCi06MTBBMDYwMDA0MjkzNjkzRDYwNEU2NEEzQjQxRUJDMjY5QkMyRTU1QjZGCi06MTBBMDcwMDBFMUI4QkY5MzM0MUUwRjRERTBGQUI3RjgyQzZCQ0NFRTZECi06MTBBMDgwMDBCOEQyMzE4RkFFQjA4OUU3OTIxRTNGNUI3Rjk1RTJCQkJECi06MTBBMDkwMDAxRUM2QzlFQjg3M0NEMzVFMUIwRjE0NkY1NzEzMTc2NzlGCi06MTBBMEEwMDBFRDJERkFERkJDMEVFRkFDQkQ0NkZGMEI5OUQ1QjY3QUFECi06MTBBMEIwMDA1NUVCNDIxQjdDQzA2OEIwQkQ3NzY5MTdEQkRFOUZFRkI0Ci06MTBBMEMwMDAzQzVERUFBMEEzRDFFMjFGQUY0NzlDNzQ1NjJDNzdCMjQ3Ci06MTBBMEQwMDBDRUY3QjkxNEIzMUY2N0VBN0MzRjJFNTc3RjdCOTlCRDNCCi06MTBBMEUwMDBDRUZBNzU5MzFCQUE5ODdEQzNFQzk4N0Y0MzM4OEMxM0U2Ci06MTBBMEYwMDAwRjIzNEZGRjRBMDBDN0VBQkEyODEwQ0JCRUNEMzZDRDlBCi06MTBBMTAwMDBFREJGNTdGRDFDQzZFMUNDNUU5OTc4QUU5ODFCQTc0QkZFCi06MTBBMTEwMDBCNTI3MzFDRTk2RUE3MTZCQkQ2MThDQkI2MTlDNkQwRjJBCi06MTBBMTIwMDAzNUU0RERCNEJDQ0Q5NUQ4MERGMjdCQzZCMzM4NDM4MjlGCi06MTBBMTMwMDBEMDZGNzIxREM0QUQ3QjFERjEwNEE3M0NDNTFFQkFCRTE1Ci06MTBBMTQwMDBFMDc5OTk1NTBFNzVCMUY4OUY1NTU3RUIwQUU3MDFEQzk4Ci06MTBBMTUwMDAyREIzRjNGQUVGQkIxMjc3MDMxRUEwMUIwOUM2NjkwOUUyCi06MTBBMTYwMDBBRTAzOTdDRUY2Qzc2M0QxQURFNEQ3RThGRkIzRjMzMUMyCi06MTBBMTcwMDA4NUE0NEUzNjUyN0FEMkQ0NUYxQkQxODE2RUI2NEU4NkZDCi06MTBBMTgwMDBBMjVCRDUxODdEM0UxNjEyQjk0RDM3OERGNjUzQkE2REM4Ci06MTBBMTkwMDA3RTJEQUNBNzJBNzkxQUNGRURBQTYyODVGMUI5NTcxNkEwCi06MTBBMUEwMDBGOUJDREQ1NDkyM0VFNzdDREMwNDgxNTZEQTZFQUM1RThECi06MTBBMUIwMDAxMDkxRkZGNTYyRTYwOTg4NDdENTg5QjhBRUY3OUJDQUNBCi06MTBBMUMwMDBBMzcwRDRCRUJGQTVGQTdBOENBNzlCOEEyODIxMUQ1OUZCCi06MTBBMUQwMDBCNUQwM0FFQ0U3NzY1MzJGOEY5RjFFQTg2MzdFRUJCMTg0Ci06MTBBMUUwMDBCNjM3NTQzOEFGMzk2MEI0NjMzRTgwOUNGRTExQjYxRjU5Ci06MTBBMUYwMDBFNEZDNEVBRjlDQzIzOEY5NjA5MUYzOTcxRTk5RjlGOUNGCi06MTBBMjAwMDBCRDAxNkY2N0E2RTBGQjIwQkU0RjQ3REI5RTdGMDBFOEU1Ci06MTBBMjEwMDBBMEZBRjcwOUY0Q0Y0OEVEMkU0QTg3NjY2QUFCODBERkQzCi06MTBBMjIwMDA2M0Y1QTZGODZCOTBBQjREMjJDQTU5MTBFMjcyMTI5Q0VFCi06MTBBMjMwMDA4QkRBRkRFN0IxNEQyMjlFQjNBNjM1QkYwMUY2RkI2OTZGCi06MTBBMjQwMDBGMzREODIxQjkxQUNENUMyRjk2MkQ1QUIxQjM0REMyQjJDCi06MTBBMjUwMDBBOUJENTM5QjY3RTc1NzZENENBRTgzRjlCMkU4NzI5MzgzCi06MTBBMjYwMDA2QjBCQ0U4N0IwNzg0RjAyRjg3OUQ3MkFBMjgzM0ZFNkVFCi06MTBBMjcwMDA1RURDOTFGRDAyRURGN0NDN0FCNzA2QUFFMENBQzA5NTg0Ci06MTBBMjgwMDBEOUVGODAzQ0QxNkQwNUZDNjQ3N0Q4Q0M4MkRERTRFOTYwCi06MTBBMjkwMDBGNDExOURCRTBGNDYyNkQwOEU1MjIzMTIzMUMxQUVGQTY0Ci06MTBBMkEwMDBCRjEyQ0UxN0Q1MTk0ODk3N0M2OEZEODlDREI0QkRCMkQxCi06MTBBMkIwMDA0OTVDODA3NjU5MzNEQjZGMzRGQTBGRjYxQjM1NjZCNzhECi06MTBBMkMwMDBBQjI0NTcxNkZCQkI3N0YyNTEzQzU3NTYxQzc2OTU0Qzg2Ci06MTBBMkQwMDBGMkUwQzFFRURBQjRFREMzOEQwNUY0ODE1NTRBOTM0MTQ1Ci06MTBBMkUwMDAzQ0Q3MjVEMjhEMjVFRDZDRkZBQjlGRkM4NzE3RjNGODhCCi06MTBBMkYwMDAzRTI1M0JFQzc0NkVCRjU5RkQxNEIzREZDRTc0RURGRTBBCi06MTBBMzAwMDA4NzE3QTkyQzI3NUMyQzBFMkEyQkU2NkY2MDVENEVGMTc3Ci06MTBBMzEwMDBGM0M1MzE0N0RFNERDMkM1RDZDQjE5QkU4RTYxNjZDMUNECi06MTBBMzIwMDBERjA2RkYxOEY4RDU3N0Q1NzZFNjY3MTFDM0U2QzdEMDA0Ci06MTBBMzMwMDBGNTdFNDZDRUYzQjNBREZEMkU2RDk2RjYyNzY2RjM1QTQ1Ci06MTBBMzQwMDBGQzlFNTg4OUJDOTY2QkU1ODRFQzJBOTFENzYyQURENzA4Ci06MTBBMzUwMDBFMTREMjY4OUQwRjkxRDBEOTE0QzBGQ0NFRjY2OTNFQ0ExCi06MTBBMzYwMDAwNDc5MTU4OEQxQTMzMUY4NjlFQjFDMjUwQTcyNzgxNTk4Ci06MTBBMzcwMDBEOTA1RUI1Nzk3MEQzODg3RUM2RkZDMTA3NTE0OEJFM0ZDCi06MTBBMzgwMDAyQjg3RURGMjUxNkUxRUY3MzhFNjcxOTFDQjZFODdCQkNECi06MTBBMzkwMDA0OEJDMkExQjg1Mzg0NkU0N0FDMDYzN0Y1ODMxNjAzRDRCCi06MTBBM0EwMDBCQUM0MUI3N0VGRDBFN0NFMjM1OUM3RjQ4NjJCOUMyNTgwCi06MTBBM0IwMDA4NUM2QjVGODc5QkJDQjVDRTY4MjM4QkI2MjlDNEM4MDI1Ci06MTBBM0MwMDBGQ0I3MkJFOEY3M0FFMTZGNzJGMTNDOTYyODkxQzEzRTU5Ci06MTBBM0QwMDA0QkMxM0E4MUY1REI2MUIyQkMzMTQxNEIzRTY4MjBGQTlBCi06MTBBM0UwMDA3MURCQjk1NkVDMkRDQzY3N0I0ODIyQzk3OTFCMDlCOUMyCi06MTBBM0YwMDBDRTE1NjU3QUE2NkQzQkIzN0IzRTQwMDQyOTA0RjAwOTc3Ci06MTBBNDAwMDBEQ0JGNkE0RDREQTA3RDkzNjFDQjJFRDM2RThFNUM5QkRECi06MTBBNDEwMDBBNzI3QUZFM0YyMzlGQjNFMTFGOUE4RURCRDhCRTExOTk3Ci06MTBBNDIwMDBFMDc2QjNCNjMzNzJFRDhBMDJFRDQzODVGNUU0MDdCODAyCi06MTBBNDMwMDA1QzVGRTdFMkY2NDQ2QTI3RTYwNUY1RUIzN0M2ODFDRkI1Ci06MTBBNDQwMDA3RDlCNEQ2MzE3NjgyRDkwMTFDODQ3RjExMzlCN0Q0QzgwCi06MTBBNDUwMDBFNUZCM0FFMEE3MTUzRjkyQjUzODk2OTYzRDUwNkNGRTY1Ci06MTBBNDYwMDA5RDc2ODAyQjYyQ0YzQkE5RjREQzM2NzZFOEZBOTJFMzQ2Ci06MTBBNDcwMDAzOEY3NjcyQkJGMEQzNDVGM0U5RjVDOUMwRkNEN0NCREQyCi06MTBBNDgwMDBDQ0RBNEI2OUJFREUwRENDMDc5MjE0MzMwMTcxNDk0OTE5Ci06MTBBNDkwMDAyMDM2N0I2QjhDQ0I4QkU0NjVFRjlENzg1MEZGRjk0RUJCCi06MTBBNEEwMDA1OEE3NTJEMDQ0RkY5QUY4NUI5OEREMjYxQkZBQjUwNUYxCi06MTBBNEIwMDBGMEI3Q0UzOTFGRTM3OUJDQjFGNDg3NzBGRjFCMERCNTNGCi06MTBBNEMwMDBFM0JFRDdBNzk1RDYxRkQ2QkVCQTk5NUNBMzQyRENBRTMxCi06MTBBNEQwMDBCRkI4RkUxOENERDcxRjRBNThCNEFGNjNFRURGNTNGQUFBCi06MTBBNEUwMDBGNTQyN0NCNkY4MTRFMUYxRDJERUMwRjY0OEM5QjhBMDU2Ci06MTBBNEYwMDBFMzdDQzU1MENDMDc5MDJGQzVGOUY2ODVGM0UxREIyODQ2Ci06MTBBNTAwMDBDRkFCREJEQkZGRDJGMzNDMEZDMUFFQUY1NzE2RDVEN0Q1Ci06MTBBNTEwMDBGRkM5QTY0RkI5QkU3RTBGRjlGRkRDQkJDMUZGNEFFM0ZFCi06MTBBNTIwMDAzMDlFM0Q5MjdFNkExRTU1RjE3MjBBRTkxOUQ2MEZBNjM5Ci06MTBBNTMwMDAzMDFFMDNFQjFCRUM4MDc0MUJFNjJCOTAxODQxQkQwODBBCi06MTBBNTQwMDAwRDQxREY3OTc0MTNGOUU2RTU3MTI2QTVDRUJFQ0Y0ODNCCi06MTBBNTUwMDA2MUFGQUQxRUU5NEMxMUM4NTc4MzdFODE2RUNGMUUwNUQ5Ci06MTBBNTYwMDBDN0I1Rjg0RDZEMTZDQzI3QjNFQzRCNTg0RUUwOEYxNEExCi06MTBBNTcwMDBDQjRGQjM0QTJCN0UwM0M3Mzg2NzcxOUZGQUVDNzFFMDZCCi06MTBBNTgwMDBFRjY5M0ZDMUZEQTEzOEZERjY3MTIyMUY4OTk3RDY0RkIzCi06MTBBNTkwMDAwRTc4RTI5N0Y1MzcwQTlDMEJDRTZEMjc5MzM3RjJGNENECi06MTBBNUEwMDBEQUZGNzFFODEzRjNDOENEOURBODQ3ODk2ODQwRkNCMjczCi06MTBBNUIwMDAzN0IyOUQyNDI4REUwMzg0RTk5MzIxMjhENzQzM0VDOTdFCi06MTBBNUMwMDAyQTBERkNERkVGQkI3NEQ2NUU2N0ZFOURBOEYyMzhCRDk2Ci06MTBBNUQwMDA1RTk5QkY3NzE3REQ4NzBBRDkzRjRCMTU2NjFGOUZGOTM0Ci06MTBBNUUwMDA1Q0YyMEY5MDk3OTAxQTExNzREOERGNEU3NUU1RDA3RTBCCi06MTBBNUYwMDBEQTkxNURBRTQwNUVEQTcyNjUzRUMyRUQzODE0NTVCNjUyCi06MTBBNjAwMDBFNEFEQ0YxRDg0OURGQjUzNDQ5NDdDM0Q2QUFEM0YyNTUyCi06MTBBNjEwMDBFRDdFMUVFODlDNEFCM0I4QzY1NEZBOUZGMTVDN0ZFQTBGCi06MTBBNjIwMDBCMDk0MDFBNjRFMEQ1RDU3NzJGRDlDRTI3QURCODIzQjMxCi06MTBBNjMwMDA3NTU4MzJBMUJGRDQ5MDkwNTk0MkRCOUY5MkNENjBDMTMyCi06MTBBNjQwMDAzQzAwOTI2MUU3QzFCQzdFNEI1QUIyQzlFNTk5QkQwOTk1Ci06MTBBNjUwMDAwNUY0Q0NBOTJFNTVGODI1OUQ5QjVCODE0RThBRkY4RTczCi06MTBBNjYwMDA3NDU0MDE5RkFDMUM1REYzMTRGQjdDNUE3NEY2NDNCRTFBCi06MTBBNjcwMDA0Mjc0MzY3RkE3M0ZGQzI2RDI3QjlBM0U5NzRBQzQ5MzBBCi06MTBBNjgwMDA0NkI4OUVFODBGMTdENjI3NUU3RUZFRUE3NTY1MEFFNzk0Ci06MTBBNjkwMDAzRDM4RThGNTM1RDlEN0E1ODVERjIwQ0ZBNzE4RDQxOEUwCi06MTBBNkEwMDA1RTgzMTExMUU3NjFCMEFFQjQxRUVCRTNGMzYwQzFGNTU4Ci06MTBBNkIwMDA0N0Q4Nzk2QkJGMUM1NzJCQzFDN0E1RDlGMTI5MzY4RTU2Ci06MTBBNkMwMDBCQTcxQTIwM0I2RjkyQTkyRTg2ODhGMjI3QjVGODIzOEJBCi06MTBBNkQwMDAwMjg2MEU3NUYwOUY5RTNBNzYyQkM0ODE2RkY2OUI0MkUwCi06MTBBNkUwMDAwNDFFNEU2N0JGNDNFQjBCQThCRjAzRjZBOTY2NjY4NDQyCi06MTBBNkYwMDBDNTJEOTBENzI5MTE4ODFCM0Y5NDdDMzNGQjFBRjhBM0YyCi06MTBBNzAwMDBENEZGODE3QTQ4NEY4NkRFMDc3QTI4OTYxMDYwNURFRDg3Ci06MTBBNzEwMDAwN0U1OEY5RDdGQjBCN0FEOTlBRjNGNUFGRkQ0NDBGQjlGCi06MTBBNzIwMDAxNjg4NDNDQTI0Q0VFMzE5QTIwRUY5N0FCOEY0QzVFMjFBCi06MTBBNzMwMDA3QTAyQjRFNzU5Rjc2Q0JCQTI3NDNBRkMyMjM3RDk1NkI3Ci06MTBBNzQwMDBEQUZGREVDREUwNTNGNDFGRTg5RDA1MEUzRjJCRDQ2OTAwCi06MTBBNzUwMDBCN0JCQUIxQ0VGQzdCOEJDMTZGMzJCREZBRDcxRTY5M0VDCi06MTBBNzYwMDA5NzU0Mzg5NzU1NUI0NDJEMDNGMDI0MTk4MkZEMzY3OEIxCi06MTBBNzcwMDBBMzRDQzA4RTlGQUY2QkREMTBFMjJCQzdGNzdEODRFNTQ1Ci06MTBBNzgwMDBCOUMxMTcxMUY5RUJFRjQ5ODVEOUIxOEI2RTdGNUM4MEE4Ci06MTBBNzkwMDBGREU5MzQ3OEQ5MkJBMTlFMzMwQUM5QUZEM0VFMUJEMjgxCi06MTBBN0EwMDBBNzMwOUUzODQwNEU3NDM0ODIzREJGNEJDNEYzQTRGREE1Ci06MTBBN0IwMDAyRDA3NDNGOUVEQkZDN0M3OTk5RDdGQTJDQjZCRjE1NDFECi06MTBBN0MwMDAxNkZENzlBNTQ1MzQ2MURGM0FERkY5NzdGQUM5RTVFNjg4Ci06MTBBN0QwMDBCRjc2QjdERDJFM0VENzc5RjkzMTIwQkVBNkZDRkM1RkVGCi06MTBBN0UwMDBFODM4RDZCQ0NENUQxRjRDNkYyRUJBRkQ0NThDRTM4QzhFCi06MTBBN0YwMDAxQUE1RjVDRERDNzk3QjA5RTcyREQ4NDJDQzQyNzE5Q0I2Ci06MTBBODAwMDA1N0Y4M0VFNkNDRUI1MzQ5OTIxODkwOUZGODMyREI3RjI1Ci06MTBBODEwMDBBNEM2QjU5MUYxMTJGQTQ3OEEzOUZDMEZERTRGRUUxNjQ1Ci06MTBBODIwMDA0MjRFQzA3RTJCRUI2NUJFODc5QjM4MjREMzdERDNCN0M5Ci06MTBBODMwMDA2N0MzMjE3OTM1RTQ2Nzk5OThFNzM1REM2NUUyRjM5OUQ4Ci06MTBBODQwMDBGOTc3OEIxQzVGODE4ODZCQjk1RUQxRjFGQ0YzOTA4QzNBCi06MTBBODUwMDBGNjg2NDhDRTQyMUM4NDY4NDRCN0U0OEUwMDVDQzcyMTZCCi06MTBBODYwMDAxOUUzMzEzQUNGMjNBMEEwRjNBMTFENDFCREI0MTI5MjQ4Ci06MTBBODcwMDAzRDZCRjA5QzFFRkI4MThFNTgxQ0E2OTNENTY5NDM5Q0IyCi06MTBBODgwMDAyNzk3NjkyMjVFNzI1QUJEODNGMjczOUY4N0Q3NzU1RUUwCi06MTBBODkwMDAwRkYxQkFDNkVCNTE1RTI3MDdCMUVFNTM2ODFERTJGMjI1Ci06MTBBOEEwMDBBRUI0ODY3NTJGQUY0Nzc5QkQ5QUQ3NDNCQ0RFQzBFQkY3Ci06MTBBOEIwMDBDMjQxQUNFRjUzNTg3RjIzNzI4NkY1RUZFNTc1OURENzAzCi06MTBBOEMwMDBBQjc5NURFM0Y1MDY1RTI3RTM2QzdDMzdBQkMzN0U4ODJFCi06MTBBOEQwMDA3NTFGQUY0Nzc5N0QxRUFGODc3OEJEOTFENzg1NzFBQzY1Ci06MTBBOEUwMDAxNzlCM0Y2RkNDNDRGRUNFQ0U3RjA3RTMxQjIxRENERkZFCi06MTBBOEYwMDA4QzNCRUE5REIzRjA3OUZFNjg3Rjk3MkVFNDlGMUZCQUU4Ci06MTBBOTAwMDA4QUM0OUY1NkI5OTk5RTk5NkU4QjYzOUUxMkY1MTc1MjExCi06MTBBOTEwMDA1M0Y5RTc4RTkxQzJGMjZFRjI3NjMzRTdFNjYxMEE1Nzk5Ci06MTBBOTIwMDAzMDdFREQ1RDcwNUQ1NDhBREZENkYzQzRFRjIzRkY0QUNECi06MTBBOTMwMDBGOERERTBCNkQ2M0RGM0NGQTdEQjBDQzREM0Q5OUZCMzg3Ci06MTBBOTQwMDAxREQ4NUIyNEVGOUNERTJCNjc1MjEwQUZBMTM2MTJGQUE0Ci06MTBBOTUwMDAzQjJFRDU5RUNGN0E5NzlCOUQ3Mzc2QkI1OTNFNkIyRjJFCi06MTBBOTYwMDBDNzZGQkE4RDlEM0ZGNDJGRjE2NkM2ODVCOTcxQzZCRjFBCi06MTBBOTcwMDA3MUIzNzhDMjBGMkMzQ0Q1MDlGNDdCN0MzOUJBNjJEMTEzCi06MTBBOTgwMDAwRjYyN0VENDcwQUNCRDRDRkVCQUZDRkZGMkZENjU2NzcxCi06MTBBOTkwMDAxQ0U0OUZFMTFEMURDN0VCMkZDQ0E3QkI2NkY0Q0Q4RDNBCi06MTBBOUEwMDBBOTI5MEFBQjdBRTg3M0YwNjdCNDcwQTQyRTNGNkY5QUI2Ci06MTBBOUIwMDBCRjI3ODIyOEExN0U3OTlCQzI1OUY5MjIxMkY2Q0ZFMkU1Ci06MTBBOUMwMDBDNTc1MkM1RTJDNzE3ODFDMjdDQUJFNjMzMDU3QzEzRUZBCi06MTBBOUQwMDA0MzlGMzdGMTcxODRCOUZEM0FEQjY1RERENTZDQkUzODM0Ci06MTBBOUUwMDAzRTU2N0U4QTQ0OUVDMzdFNjZGMDkxRTNDODJGRTc3MzhECi06MTBBOUYwMDBDODQzRDZGQzE3RkVGQzQyRUIyRUJEQzg3ODY5NzZGRTM0Ci06MTBBQTAwMDA1MkFFRkQxN0I5QkNDQzkxQ0YyMkYzRkExRkREOTY5RDUzCi06MTBBQTEwMDAzMjYxNDIzRTkwMjU0Nzk2N0M5REFGMUM1REIwOUNDMDQ0Ci06MTBBQTIwMDA4NkQ0NTI1QzRFNTIyNDg5RUI0NjA2OTc3M0U1QjlDQjI3Ci06MTBBQTMwMDA0QjAxMzlDOUU2QzNEN0E4MjE3RTlFNkZBMEJDNTA3Q0NDCi06MTBBQTQwMDA2NDk0NUI4REUxNTNCMzJBOENGRDA5QjBDNjk3NDEwRjI2Ci06MTBBQTUwMDBCQzBFN0NBMEY0NUVBMjg2MzgxRjU4OUNDMjBCRTc4QzBCCi06MTBBQTYwMDA3OUVEMjk3MTg4QUYyMDA5NUNFRjMzQjhDRDJBNUJFNzE3Ci06MTBBQTcwMDA5QkRBRUIxOEZFODRGN0VGQzA5N0Y2QTdFNkY3Mjc5MTZECi06MTBBQTgwMDAzQTg3OUMzM0JDM0ZBNkIyRjlBNUYwRjg5RERGOUNGMTU0Ci06MTBBQTkwMDA2NTAxRjE5NTQ4M0MyNUQyNzY5RkUyRjA0RUZENjU5NTIzCi06MTBBQUEwMDA3QjM5N0VDMzIyRDlDREJFOTM4QzkzRkNFRjJBN0RBQTNECi06MTBBQUIwMDBDOEJGN0I2NEVCQ0NBOTlGNUMyMDU3QUJDRjVGQUUyQUFECi06MTBBQUMwMDBENUVCMzU2QUUxN0Q4N0VBRjkyNjg4RjcxNURCNzc0RTA1Ci06MTBBQUQwMDBBQTMzRkI0MTEzOUZCNzczOUFGN0RGODExRTVBMzMzQkFBCi06MTBBQUUwMDA5Rjk1RTI3QjA5MUZGNzVDRjEzRDM1MTdERjhBRTRFQ0E3Ci06MTBBQUYwMDA0REFFMjcyQUM1NkZGMzc5RTJGNzkyMDNCRjc3NEJBRUNECi06MTBBQjAwMDBERkU2RkI1MUE1Rjg3RkVDM0NFNUUxODc3M0Y5NUJEMTBCCi06MTBBQjEwMDAzQTEyRDU3M0UzRUZBN0NFMTNCRjVGMzhGMTJCQjI2RUI1Ci06MTBBQjIwMDAxNTk1RjEyQjQ1OTg3Q0M4RkNGQ0E1NTJGQ0JBQ0FFM0VDCi06MTBBQjMwMDBDN0YzQzVCNkY2OTkzMUI0RDdEMDFGREZBRjZFRUQ0QjcyCi06MTBBQjQwMDBDOUIzRjg5OTg0RTlGNTczMURGRkRFOEFDN0ZGNTA5RkVBCi06MTBBQjUwMDAyOUNGOEVGRjA1RjU0M0I2RjE2NUQ5NDA2MUFCNzREQ0IyCi06MTBBQjYwMDA4NzJCMUQzN0Y1NTExQkREQ0YwQzdERDQzNkVFRjlGMjY2Ci06MTBBQjcwMDBGRENCMTU4RjdGOTM4REVFRTc4NjZFQjJEM0VEMzczMDI4Ci06MTBBQjgwMDA5RkI4RDI3MUJGNzM5RUVCRkQzNzFDNUY5RkFBRDlGNkE5Ci06MTBBQjkwMDA4MTYyRjZGQkRCRENBRUJENDVENTZDNzI1QzBDRkU0RDE0Ci06MTBBQkEwMDA2RUFGN0NCMDQyRjg1M0JDRkY0NjBCOUYzMkYwOUZFMTgyCi06MTBBQkIwMDBGODdGQTY0MkY4REY3MTdDRDY1Nzg4Q0YwRkY4M0EyQzgxCi06MTBBQkMwMDBCNjdGN0EzOURGN0RBMDIzRjNGQzlBMEJDRDVCREFFNTAzCi06MTBBQkQwMDA0RTA4MUUzOEU3RkM3QTE3N0UyN0Y4QTZBQzZBMTBFRkZECi06MTBBQkUwMDAyNDFEMDRFRDcxQ0ZBQjgxNzE5NjU3OTJFMkZFN0YyMjU2Ci06MTBBQkYwMDAyNTMwM0Q4Q0YxMkQ1N0Q4QjA5REM3NTk3RTk3MkNDNzc1Ci06MTBBQzAwMDBDRDQyRTc2RDIxMEZEMzdGODI2Njc0QjJGNUFFMTBDOEQ2Ci06MTBBQzEwMDA0MzJBMDZFRkYzMTQ4RUJGNTQ5MTY5Q0MzRjIxMTE3RTc1Ci06MTBBQzIwMDA4RUY0RjY3NTdBQzE3MzAyMzk4RTc5MkQ5MkE2OTA3MUUxCi06MTBBQzMwMDAzQTRFNUY2OEJCOUU5RkI3MUNCM0YwODk5ODg4OEZBMjdECi06MTBBQzQwMDAzMTdDMTREOTMwMEJFNTI5RDc3QkQ4QkM1QUZENThGRThFCi06MTBBQzUwMDBBMTEwOTkyNkVDMUUwNzg2NUZCRjI3REUwOTc5RTJBOUJECi06MTBBQzYwMDA5MDgyN0NFQTBCRDhDRkM3QUZFN0ZEQkM5RkQzRDdFNzc0Ci06MTBBQzcwMDAyQTlEMjdENjNFQkYxNUYzOTU3QTVCNTlCRTkyNEUwQzlFCi06MTBBQzgwMDBDQ0VGRUNGMzk3QkVENzYwQjQ4QkM1RkY0Nzc4RkVEMzBCCi06MTBBQzkwMDAxMDdDM0YwQURGMTNDM0Y3QTNDQkEwRkQ1N0YxM0JCQ0U5Ci06MTBBQ0EwMDBEM0NENjJDOUZCNzEwMjg2M0RDRUVFNkJCMjdGQ0Y2MzFFCi06MTBBQ0IwMDBDNUU1M0RCQUZEQkIxRTc3QzRGRTVEOEY2QkJFOEM3OUNBCi06MTBBQ0MwMDA1RDdEN0U3NjNFNTAwRTdGMkJFRkREODIxQjk0OTNBQTM2Ci06MTBBQ0QwMDA1NjkwNEYxOURCQjk4MDNCNjJDN0Y3QkRFMzFGNkJFRjlFCi06MTBBQ0UwMDA3MzRENjg4NUYwN0FCN0Y4NTYyQ0RFMzA0MzZGOTU5MjM1Ci06MTBBQ0YwMDBDQzMwQkQ2MUNCQ0ZFOEUyRjJFNUFFNTI5M0EwOTdBOThDCi06MTBBRDAwMDBERTJERjJERUNCREFGQkUzOTgxRkEyNDZFMjNBQzZBM0MxCi06MTBBRDEwMDBGOTNFQTBDMjdBQzhFM0QzRTdBRDc1RTkxNUFEN0M2MzBGCi06MTBBRDIwMDBDQ0VCMTA3NDEzQ0YxRjU1NTg0N0MyREM3NjMzRjM2QTRGCi06MTBBRDMwMDBDOUZEOUZCNjQ0NzA5REQ0QThCODRFMDQ3RDFBQkZFQkUwCi06MTBBRDQwMDA3MjhFQjNDQzYzMUVGNEMwRjk5OEM3QkMwRjRBRDczQkQwCi06MTBBRDUwMDA1MkEyRDA3QTE5RjMzMDNEQUE1RTEzRDdENTA2NzQ1NUE2Ci06MTBBRDYwMDBEMUVFNzFFMkYxMkM1RjdGN0UwQkZGOTQ4OUY5MTc5NThDCi06MTBBRDcwMDBFMkZGNzA4NUY4NUJFMzUwRkM5RjA2M0Q0QkYxRkYxMjRDCi06MTBBRDgwMDA5NEM1RjA3RjhBRUJBMzZBQTI3N0UzOUVBRDMzM0Q0Qjc3Ci06MTBBRDkwMDBDOEI1N0E3RTdDRERFQjY1RkQ1NjczM0Q0NTQ4OUIyRDNECi06MTBBREEwMDBBRkM3QzVFOUFBOTQ5RUEzOTY1RTJCNDM4RjM1MkVBNTA3Ci06MTBBREIwMDBFNzQ1M0UxRkRGMkIzNTFGMkY3MDdBQkM1RUI2NkZBOUFCCi06MTBBREMwMDA4N0UzM0E1RDlBNjQ2OTkxNzk5OUUyNzhDQ0Y3RjJCOEIxCi06MTBBREQwMDA1MkFBRUQ5Q0U0RUFDNzE1RDIzMTM1M0IyRkFGRjE3OTg5Ci06MTBBREUwMDBGOTQ1MjkzQTVFRTU3Mjk1OTZDOEZBNTNCMDlGMzY1QUVFCi06MTBBREYwMDBGOTBCREI2Q0YzQjI4OEYzMjdFREI2RTZBNUREMzYyRjUxCi06MTBBRTAwMDBBMTczOUM5N0RGNTY0OENGQTJEOTc5MzlDM0U3MjU1NzVDCi06MTBBRTEwMDA0QUNFRjJFMEZGQzRFMURGRTFGMDY4MjcyRUYyRkVCMTk2Ci06MTBBRTIwMDAwRkNFQ0I5Njc5RTJBMkI3NjY3NjdGQTM3MDkyNzdDREVDCi06MTBBRTMwMDAyQ0RDRTc4NzhGNUI3MDZFODRFQjk4ODE1M0JENzlGREM2Ci06MTBBRTQwMDA5MUQ0RUI3RDcwRkVERENGQkZGRkY4QzE3MEUwMkFERTRDCi06MTBBRTUwMDAyRTg4RURBRTYxRjREMDc2NTVGOUZEM0YzQkZDQjJENUJFCi06MTBBRTYwMDBGRjNDODBFQkRFRjI4RTA1MTdDRTg3NUJFNDdEQzc4MjY4Ci06MTBBRTcwMDA4QkMwNzNFMUYwNEM3RkI1Rjk3ODRDNzlGRUE5OEZFNTcyCi06MTBBRTgwMDBFQjM4RjJCREI0Q0FGMjFENUNFMTA0REVFNzUwNEQwMkJFCi06MTBBRTkwMDA2OTg5OTYwMzMyQkI1RjIxNDU4REVBMjcyMDdGRDY5REM1Ci06MTBBRUEwMDBDODkyMEFFQzJFNTE2NUVERENENERFODJGM0UzNzkxQTA4Ci06MTBBRUIwMDAzOUU2RDFDMTA1MzFDODYxRkFGRTQwNTg0NjdGRTAwRTNGCi06MTBBRUMwMDA0RkEyQzU1QkMzRjBDNDNDODBENzk4M0RENkVENkZFMTdGCi06MTBBRUQwMDA3MTE0ODZENzk4RUYxMzQzRDA5RjQ2RjE4MkZFM0ZFRjVGCi06MTBBRUUwMDAwQjFFMDNGODgzRjUwQUU2RjMxRUFCQkYxM0VEQzRCMUU2Ci06MTBBRUYwMDA2RTk5QzBGQkIxQUIxNUI0MTNFRjdCMkQ4MEZCNzBCRjE3Ci06MTBBRjAwMDA2QzVDOEZGOTBGQTZBMjgzREQ3ODk3Rjc5RDkzOTBBN0NECi06MTBBRjEwMDAzQ0Q5NURBNTA5NTcyMDNEODg3RjRBMjRGMTVFRUM5RjBFCi06MTBBRjIwMDBEOTlEN0IyOEZFOTAwRjhDNUIxN0Y0REJDMUZDMThDMjA3Ci06MTBBRjMwMDBGMzlDRUZEQUEyNjNERThDNEVEOEZENEQ4M0FEMEFFNkJBCi06MTBBRjQwMDAyOThERDUzNUI0QzE3OEY3QjVBQTY4NzdEQzc3NEQ0MzNDCi06MTBBRjUwMDAzN0U2NzNCNzdBMzFGN0FEREFBRjBCOTBERjEzNUNBNzQyCi06MTBBRjYwMDAxMEY4MTBBNDNBQUM3NzgzREQxOTU4RUI4NTNCQkY0ODQ1Ci06MTBBRjcwMDA3NTFEMUIyRkIwOENFMDNEN0YyRTkyOEVDNzY4MTkxQzZCCi06MTBBRjgwMDA1MkYwMUVBN0ZCQUVEOTk2REQwOTc2NEQyQkNCNUZBNkZFCi06MTBBRjkwMDA4NEJEMTQ1QjRCODg5RkIzOTI0ODNGMjQ4MDhGNkIxMTE0Ci06MTBBRkEwMDAzQkNGQjdFNjM5OTg5RTY5NUZGMjFDMzE5OEE5MTAyRTA1Ci06MTBBRkIwMDA1QjE5NUM2MDQ4QzZGQ0U0QjI3MEU5MEFFMTMyMTVDMjc0Ci06MTBBRkMwMDA2NTE5NUNEOUYzN0I5RTRGQTlEMjdGMTA4N0YzMzhGM0M0Ci06MTBBRkQwMDBCMUZEQTVCRjhCM0JENzdDREQzMUFGM0RFRkJBNUM3QkNDCi06MTBBRkUwMDAyQjRGQjcxQ0JENzA5ODM5ODNBNzU0MUVERUNBQjMyQkY0Ci06MTBBRkYwMDBGNkRFMzVGRkNFMDg3Qzk3MzY1ODczMzcyRkVGNjE2NTQ0Ci06MTBCMDAwMDAyRDdGNUVCQjI3ODJGNzQ1RDZGMkY3QjVGN0UwRkQ5MUJECi06MTBCMDEwMDBDRTdFRkUwQkQ3Qzc0RDI0NUU3MjFFQUEzOUZFNkY1MDNFCi06MTBCMDIwMDBEQzIxOUVERDI0OTdDOTA3NzBFNkZCMzlGNDlFMkFBNzMwCi06MTBCMDMwMDBEQTcxREQ1RUMzRjI4QjY2QkU5RkFDRTNERjhEOTA2NDk4Ci06MTBCMDQwMDAzQzg2RjEyQzMzQjg3MkZFRUNGQTcxNkRGQzNFQUUxRkZCCi06MTBCMDUwMDBFQkJCNDkzQTNGRUM3QjQ5ODc5QzM4RTVDMkVEQzg0RkQyCi06MTBCMDYwMDBCOTUwMzk3OUU1M0Q5MjEzRDc5MDU0RDFGQTcxQTUyQjk3Ci06MTBCMDcwMDA4NENCNTQwODk3QUQwQzRFMTkxMjJBRDIyQjRBQkE0MkVGCi06MTBCMDgwMDBCODRDODU3MDU5MDZEN0JGNUVFMUZCRkE3MDNGQzRCNzc0Ci06MTBCMDkwMDA1Qzk3QUJCNjdBRkZFNTVFRkJGQjBEN0U1QjdENjA4RDVBCi06MTBCMEEwMDBCREJEQjJENkRFN0U2MEFEQkRCREIyOEVCNTM3N0M4NzhDCi06MTBCMEIwMDBBRTRBQzUyQTVGMjdGRkVCM0NENzQ5OTM1QTFBM0VEMEM4Ci06MTBCMEMwMDA1QTY2NURBOTlBMDdEQTU3Q0IzQTgxRkI4NUU4N0U5NUU3Ci06MTBCMEQwMDBFMUZCNTZDMUY4Q0Y1NjFGNUJGRjU3N0IzNURCRkQ3NDk0Ci06MTBCMEUwMDA3RkU5NzQzNkY5MThCRTE2QkRFNUYwQjVGNEVGM0Y0QUI2Ci06MTBCMEYwMDBEQ0VFMkE5Mjc3MUYwMjlENTM4QjhGMTc0MTdGQzc4RUZDCi06MTBCMTAwMDBCREI1MTBFQ0NBNjc1RjVGODdGNzlBRjY3RUQwQ0E5QjIxCi06MTBCMTEwMDAzMTMwMUY1MjNFRTlGRDM4RThBRDY3RTk3RTBCRjkzODYyCi06MTBCMTIwMDAxMzIxRTNGODI1NjBDRjA0NDQwMkY2MzI3NUEzRjA1RUU0Ci06MTBCMTMwMDA4RjY3OEZDQTY4N0ZGNDNFNTdEQUVGN0ZBNjhCRTUwOUU5Ci06MTBCMTQwMDAzRDBEN0UzRkQ1RkY0N0Y4QkQ1QjRGRjI3QkI3MUVFRjRECi06MTBCMTUwMDBEMkIxMUNFRjZBQzJGNzk5MkUwM0VCMEY3N0I1NjJGOUYzCi06MTBCMTYwMDA1MDk3ODlDRjFGRUNFQUMwRkFFMUFFMzhENkVGRUZFQThDCi06MTBCMTcwMDBDNEYyREVBRTA0OTZGQkJCNzY2M0I5QUYyQjg5RTU3MEYzCi06MTBCMTgwMDBENzFFMkMwN0JCNTIyQzZGQjM2Qjg4N0ZCRjk2QzZGMkJECi06MTBCMTkwMDBEMkVGNEM4RDVDMDI3NjkyNUZDNEVGQzA4QUUxQkY2MjUxCi06MTBCMUEwMDBDMjFFNzdCOEU0ODgzREVFQjAzQzYzOEYzNzJDM0I2QzExCi06MTBCMUIwMDA4RjM3MkM0OTM3RDhERTM3MEU1RDZDN0IxRjREQURCMjEzCi06MTBCMUMwMDBENTJGREE3M0I5MERCRTNFRDk2RUFCMkZEQUZEN0UxQkRCCi06MTBCMUQwMDA3QzZENjI5QjNEMUZBQ0YzMDYxQkJDQjY3MTg3RUQ3RDk5Ci06MTBCMUUwMDBCMEU1QUY2RDc1N0ZGMzFEMzY3ODZGRUM2RTVCMURFRUNECi06MTBCMUYwMDA3RENFODdCRkQ2RDdDMEUyODFFMTExMUI5Q0VDM0Y2OEIyCi06MTBCMjAwMDA4M0RCMzVERjdDQzRCNzA2RjJGMTgzNjg1RjNFRkJBQUJGCi06MTBCMjEwMDA4MEY5NURGMzE2MUJBRjAzREZDOTJCMTJDQTEzQjk5Mjc1Ci06MTBCMjIwMDBFNUMzQ0Y2QjQ4NUUwNkY3OTQxMTM5QjlFRUJBNDBGOTIxCi06MTBCMjMwMDA3QkE0QUQ3ODhGMTQ2QzREODBCQzlFNzk1REQwQzFERTRGCi06MTBCMjQwMDAxNTgyN0I5NjREMTY5MEM3RERBNzkzNjQwMkUyOTIzQzZGCi06MTBCMjUwMDBDRkFDNzEyMTMxNEREQUNFNEJGNTA5MUUyRTkyNjQ3NkJBCi06MTBCMjYwMDAyRkM2MkQ0NUZDOEVFQTMxMjE4MUY5MjZENDY2MzZGRUEzCi06MTBCMjcwMDBCMzA2NzlGNENFRkQ3N0MzQ0Y3Nzg3RjE3RTA0QjRDQkU0Ci06MTBCMjgwMDBEQjBFQjQ0RTBENTFGOEYxMTUwQURFNzczMzA3NUZDN0I4Ci06MTBCMjkwMDBGRDc2QkZGNTMxM0Y3OERGNUUxNkFGNkM3QzdFN0Q4MzM3Ci06MTBCMkEwMDAwQTc2Nzg0QjYyMUVCOEFBMzM3QTIzRkIzM0ZDNEUyOTA4Ci06MTBCMkIwMDBBMDFCNkJFMTBBODA0MDJDNEQ3NjM2MDNEQzA5MTNFMkJCCi06MTBCMkMwMDBCNjE0RkU2QkJFQkNGMTAyOEY5RjQ4NzlFOUYzRTU0N0U3Ci06MTBCMkQwMDAxMjhERjBEOUM0Rjg1RTE2MkYxRDFGNUUyQURFNEFDN0Y0Ci06MTBCMkUwMDA2OUM4MkUxNzk3QTJCRkYzMjRCQkQ3N0Q0ODE3NkZBNTU3Ci06MTBCMkYwMDA3QUExRTE1MDVDREM1QTgwNkZFMzdGMkExQzRGOURGNEY5Ci06MTBCMzAwMDA0OUQ4N0VCQzNCODNGN0NCNzlCM0RGQzQ3QjM4QUQ3OUJBCi06MTBCMzEwMDBGMTM1RUI2MjAyRkEzRDlDMTBDMTVFMUJERkNCQkVEMzYwCi06MTBCMzIwMDAxQjE3QTIwQjIzOUNDRTZFMDc5RDgwMTdBNThCREMwQUYyCi06MTBCMzMwMDBFNTQzNDk3MUFCOUYzRDZGMENDQ0Y2MEJFRjc3QzJGQjM5Ci06MTBCMzQwMDA0QzRBRENFMkFGODg3RkE2MTc5RTNGQ0VGOTc3MjQyM0Q0Ci06MTBCMzUwMDA5NkU0OUY3RUMyMDQ3RUFCMzFDQTNGQkQxNEZGRUU2NzA4Ci06MTBCMzYwMDBGQ0EzN0NCQkQ1M0Y5NzVGMzNGMDI5NUQ1Q0RCOUNDN0JBCi06MTBCMzcwMDA2RkRFMUVGODcyNkIwMUJFQ0VGMDg5QjY0RjYwRkJBODdGCi06MTBCMzgwMDBCODlBOEYwQjdDNjhBMDc0RUYyQ0Q0NEU4OEYyNzEzMjdGCi06MTBCMzkwMDBGNjcxMjgxRjZGQ0Q4QkE3QzM5RjNGMkY0RkM0ODI4N0E1Ci06MTBCM0EwMDBCRjhFQjUzQzRGOTFEMkVEOUEwQ0VEODRFRkFGREI5QTk2Ci06MTBCM0IwMDAxMzc4MEY3MEJGNUZDNEZCODVGQUZENUZDREUyM0RGREUyCi06MTBCM0MwMDAxQTQxQkQyOUNCNjZDRjRGQzIyQzBFREQyMzE0NUFBN0RDCi06MTBCM0QwMDA3NjNGMDFCRTRDQzlGRjlFQUNDRjZGRTVFMTk3QjE5N0I4Ci06MTBCM0UwMDBGOEJEQzIxMkJGNTc1ODkxRTMxRDUxQjY5RThENkUzMjAzCi06MTBCM0YwMDAxQjVGOUQzQkZFNDFBNDVCOEFEOEY3REZCRTVERjY3REY3Ci06MTBCNDAwMDAyRkE2REQ4MDcxRUNERTcwNjVERjBEQjk3M0NDQkU1NDA0Ci06MTBCNDEwMDAzODNFQUU5QzhGREQ3NzlDRjMyMDlFNjY2RTFFOTY5QjE5Ci06MTBCNDIwMDA3MzIxMkNBRkM4MkRDMkY3OUI3MkI1NThERjk4NkJDNDNGCi06MTBCNDMwMDBGQTg2NUMxNENCQ0I3Mzk3RTBGM0Y1QjlFNTU4NkZDRDgyCi06MTBCNDQwMDBBREM2NzI1RDZFMjUzRTVGOUJEQjgwRjUzNUI5RjU1ODY0Ci06MTBCNDUwMDA2RkM5NkRDMTcyNzVBRTBEQ0I1NUI5MEZFMEZCOTVCOUQzCi06MTBCNDYwMDBBQkIxNkVFNEFFQzM3Mjc5RUU1QTJDOUI3MjFGQzdGNzc0Ci06MTBCNDcwMDBDQjcyRDc2MzdENjk2RTI3RDY5N0U0NkVDNjdBMkNGN0I4Ci06MTBCNDgwMDAyOUFDMzdFNjNFODk2NTQzRUVERjYzMTlDRDdEMUFERkNGCi06MTBCNDkwMDBFQkI5Q0Y2MkZEQTJEQzY3QjBCRTM4RDc4QkY1RkE1Q0EyCi06MTBCNEEwMDAzN0Q2RUI3MkZCQjBCRTI4Mzc4Q0U1QzJEQzdENThENkIwCi06MTBCNEIwMDBFNkM2RjBGRDgyREMwMzU4Q0VDRjNEODZDRjQzQjk0N0M4Ci06MTBCNEMwMDBCMUQ0NzI1RkUyRjc0NTNGODU2NTMwRjczNTJDMDNCOTlCCi06MTBCNEQwMDBBRkUwN0I3RkVFREI1OEY3RTVCRTg5QTUzN0Y3MDI5NjM0Ci06MTBCNEUwMDA2QUVFMTg5NkU1RTZBOURDRjc0RjlCQzkzQzlCNUM2Q0JECi06MTBCNEYwMDBDQTJEQjRENTM3NENEQkY3RUZGNUJGQkFEODU2NUYzNzU2Ci06MTBCNTAwMDBCOUNBNTY1RjczRjI3MjVCRkZBQjRGRDhGN0VGOTVDN0JFCi06MTBCNTEwMDBERjZGQjcxRkIyRjZGRDdCNTlFNjA2QkJGRDcwNzg4NzdCCi06MTBCNTIwMDBERDdFNDhGRkI1QUQxRTFEQkFDMzZFM0ZBNEVDRkI3N0IwCi06MTBCNTMwMDBGRDFFRkJGRUJEMjgzOTYyQjcxRjc2MUZCNEMxMkYyMDQ4Ci06MTBCNTQwMDAwRjNBRjJDOUM3NkRGMDU1RTZEMzM2Rjg0MEVCNTcxREY4Ci06MTBCNTUwMDBFNzJCMTlBNkZGOEQ2RkQ5OUVBQjREQ0YxNzNDODc4OTdFCi06MTBCNTYwMDAxREJBMUFCRkRCM0Y1RDI3RjI3Qjg2RjhCREFERkM3RUJFCi06MTBCNTcwMDAzNEU3N0M1NjczM0QzMDJGQzdGQ0E3MzA1Rjc3MzVCMDdBCi06MTBCNTgwMDBFRUYyRjI5RUMwQ0U4OEU2RDkxOUYzMUFGNEFGQkM0OEE5Ci06MTBCNTkwMDBFQjY3MTYyQjQ2MzdBRDVCNzY4NjA1NUZGNjc3MkIxNDg3Ci06MTBCNUEwMDA2MzMyNDVGMTc0QkRFQUM2N0JFNzg0NjBBNzA5NzFCNUQzCi06MTBCNUIwMDBCQkE2MDREQ0VGQUIxNzExOUUxRkQxRDFDMUUyMTNDNEFGCi06MTBCNUMwMDBCQTRGMDdFRkY3MTlBQ0I3REVFRjdDMUZCRThGQjJGQUE4Ci06MTBCNUQwMDA3MUZGREVBRDEwNDcxRDc0NTlFRkJGRjQzRThDNzM3OEQ4Ci06MTBCNUUwMDA1OEZEQkZGQjc3MERDMEZCRUFBQTg5MDhFQ0IzRkI4QUM0Ci06MTBCNUYwMDA5QzZGRkU0RkJGQzJFQzdEQkZGOTIzRkY5QUQ5N0JBNjlCCi06MTBCNjAwMDA1RjA5Mjc1RUYyRDNFN0I3QTk4OThCRTBDQTZFQjhFNzc2Ci06MTBCNjEwMDAxRUVFNzFERTJBOUIzRjAxQjg2QjY1RjM2NTNGRUUwQkIyCi06MTBCNjIwMDA3NkZGRTE1QUM4N0Q1RDgzRjcwMkZFMENERTRCQzFBM0I1Ci06MTBCNjMwMDA5OERGNUZGRDgxN0JGMEJFQUFDMTAwQzVDNzVGMUM5RjdDCi06MTBCNjQwMDBGRkU2OTc2NkY2MUI2MkVEMzcwRDE4NEY0NTdCNzAyMEJECi06MTBCNjUwMDA0QUYwREU4Q0MxNTAzQzA1RjdGOUE1QkVBNzkyMjcwQzM1Ci06MTBCNjYwMDBBMDNCQ0Q5Mjk1Nzg3RUUyRTA3MkREOTIwQkRCRkU0NDRBCi06MTBCNjcwMDA0ODNDMEI3MTdDNUZDMkFGODNCREU2MjcyNzMwRkYyMkI5Ci06MTBCNjgwMDA0OEE2QjFENDg4MjZEOEVFREJCNkU4QUY2N0Y0QzNGRDkwCi06MTBCNjkwMDBGRjdFM0M4NzM3OEY0RTYyOUMzNTQ5RjhGREQ1NkZDMUUwCi06MTBCNkEwMDA3M0NBOTczM0ZFMzVDNUY5NzI5NTc0MEZEMUU4RjgwRjU4Ci06MTBCNkIwMDA1MzdCMTJFODc4OTgzMDdDRjc3M0ZGNTQyNkM5NzgyM0JGCi06MTBCNkMwMDA4RkY3RTRERjIzMjFCRkZBNEQ5NDFCMkJERTIzNEIxQkE2Ci06MTBCNkQwMDAzQkYwN0ExNzdFOEY0MzA3RkQwN0Y2NjE0REJDNzRCQ0MzCi06MTBCNkUwMDBDNzc5NkZDM0I5QzY3QkMyMDE2N0JDQzc4RkU3QzlBNzVCCi06MTBCNkYwMDA5QjRCN0YwNzY3QzU3REY2Mzc5N0JFQjczMkMzRkRCRTRDCi06MTBCNzAwMDA4N0Y5NzlFRjQzRkNCQ0Y3NDFFRUY3MURFNjdFREZGRERDCi06MTBCNzEwMDBFMEY3RTFCRDVBQ0NFRjNCMDA3RURGMzIzODJGMzY2RENCCi06MTBCNzIwMDBERjk3OEMxNkI5RkYyNTFBMTJCODlDRUQ0MUZCREVDN0Q2Ci06MTBCNzMwMDBFRjJCQTI5RTJCREFGMzVFNkVDRkY3RkE3QkU2QzNGRDBBCi06MTBCNzQwMDAwQ0JFMTBDOTgwOUZCMEZCRUE3MUZDN0U5NjkyNjJDMDZECi06MTBCNzUwMDBGRDAwQjdGRkZBOERGOUZGOEVENjYzMTE2MkJCREZDOTFBCi06MTBCNzYwMDBEQkVDQjgyRkExREMzODcyQzY4NDdFN0RENDZGNDgxQjE5Ci06MTBCNzcwMDBDNUY5NzNDRUZEQUExOUUyMzlBRjdFRDkzRDNGRDZCRERBCi06MTBCNzgwMDA2REQ0MDM0RjgxRkNGOTgwNkUwREU0RUFEQjM4Q0U2OTlECi06MTBCNzkwMDAzRTBFOTEzNjFFQzdGQjBDMkY5MzQ5MjkzOTk4MzNDRUE0Ci06MTBCN0EwMDAzOUNBREZBRTgwRTNGNzI5MUNGMkE3Q0JBNDA3RUZBOUMzCi06MTBCN0IwMDBFMURGNDNFQTdFQzM5QjFGNUZCMUU0QjBCNzk5QzUxRkM5Ci06MTBCN0MwMDBCQTVGRkYxOEZFNkVDMDhCMzU1QjE3RTZGQjdGRDY3NzNFCi06MTBCN0QwMDA0QUJEMkQwQzhFNUE3REI4Q0VGNzc3OUZENDNGQTlDRkE2Ci06MTBCN0UwMDBDMjNENjVDMTY5QTVFMzE5NEY1ODcwQTMwQzJFRDA2MjA0Ci06MTBCN0YwMDA4ODg1RUVFRkZCMjJERjRGQkVFQzMzNTM4MTlBRDk3MTdGCi06MTBCODAwMDBGNTlFOEUxQjUwNEZBQzUxRjE3Q0M2RDlFRUNCQkVDNDE5Ci06MTBCODEwMDA1MDIwMkYzRkMxRUEzRkJGM0RDODU3ODlGNkU5NTJFRDlFCi06MTBCODIwMDAxN0RGRERGMTczNTJCQUZERTFDMDlBRTJFREVCRUVFODBECi06MTBCODMwMDA3OEIwMENGRTk5QzJFM0E3MUVDMTczQTYwOEZCRERCMjY3Ci06MTBCODQwMDBFRTVBQTUwMUZDRTU3RDZCQThCRjRDRTdFMUM1MTU1QjkxCi06MTBCODUwMDBGMTVFRDlCRUQwMkI3QTIxMzlBMkZEN0VBOTE0NUU5NDY3Ci06MTBCODYwMDAyRjlENjVFOEZBNUFCOUY2NDI2OUJBQkU1RDg2QUYyN0UwCi06MTBCODcwMDBDQkYwRTU4NTUyRUQyOTVGMEY5N0MxRkZCRjE2QzYzRjlDCi06MTBCODgwMDA3NTExRTAxREE4NjNGMUJBRUU3QUNBNTdGMEQ3RDZCMEE5Ci06MTBCODkwMDAzODg0QjUxRTFFMUYyQkNBRDc1N0NBRjBBNTlDQkNGRTA0Ci06MTBCOEEwMDBFMjAyRTVGNThENTJFMzU3MjBBRkZGNTQ4NkFGRTVFNEExCi06MTBCOEIwMDBGNUFENjJGMjhBRTdBNEU3MkZBRjQyRjBDMkU0RDUxM0Y4Ci06MTBCOEMwMDAyQ0NERDc3MkYyMUEyQUQ1QkUwMjc5QUQyRDg1N0YwNTBGCi06MTBCOEQwMDBGMjFBMkQzNEJFOUI1MDg1MDhGNjdFMzMzQjE3REJERDE0Ci06MTBCOEUwMDBDNkVFMjM3MzM1QjE3REQ3RjdFQTE3RDEzRUVBQTNGQjQ1Ci06MTBCOEYwMDBEM0JDNTZEOEE3QTdFRUJGQkQ2NTc2NUY3NkVFM0JDRTJDCi06MTBCOTAwMDBGRTlDRkJFNkVERkZGQjQ5REMzNzAzN0NCRkIzRjBGMUE3Ci06MTBCOTEwMDBFOENFN0U0QURGNjc3MUFFRTM3QUUxNzc5OEYyN0VERkE4Ci06MTBCOTIwMDBFMkUyQzdFRERGQUQ1RUY4NzhGNjdEREREQjQyQzdBNzZBCi06MTBCOTMwMDBFRjA5MUQ3RjBCOUUyMzNFODNFNzg4NEIwRjVERThCODIwCi06MTBCOTQwMDBBNUUxOUIxRTcyN0M4RjdCOEU3NkMwMkQ0MUJCMUREQURDCi06MTBCOTUwMDBCMEU3NkI4RkUwRkQyM0JDOUYwNkQ5QzRERkVEOTNDOTMwCi06MTBCOTYwMDA5NUVDQkU5MzIxOTYyRjI0RURGOUNBMjNBNzU2RTdERDY3Ci06MTBCOTcwMDAyQjQ1NzQzMTNGM0Y0ODFBOUE3OEU0NTQxRTFEMzk4ODhDCi06MTBCOTgwMDBGN0IwRjgzMkU2MkRDNkI0Q0JEMTlFMTgxQzJENkRDNzhBCi06MTBCOTkwMDA3RTk5RUZFM0NGRjBGMzhCQTdCOTFEN0I4NEU3MkQzRUIzCi06MTBCOUEwMDAwOTc2RUMzMjM4Qzc2MEU3MTdFMzYwQzc2MjlFNjMyQjA1Ci06MTBCOUIwMDBDRjczMzQ3OTlFNjMwNzk2Q0ZGMUYzODc2Rjc1MURDNkY5Ci06MTBCOUMwMDBGNzQ3QkIzMjU4N0VBM0VCMDg5NjVGRUY5QUMwRjc1RjRDCi06MTBCOUQwMDBFRDNBOEFGNTg5QUUyQ0IzODc1N0RFODk3QTY2OTYwRUUyCi06MTBCOUUwMDA2N0RDQUEzNDFEOTcxREI1Qzc0MTU2NENEOENGMzEyRTAwCi06MTBCOUYwMDAzOTYyM0ZDNzU4OUVCMTlGNjMyQzNCNkM4RjgzMkM0OUEzCi06MTBCQTAwMDBEQkNGMzExQTg3RUNFNzE4QkUyNkZCMzk4NjQ3QjdDNzZDCi06MTBCQTEwMDA0MURDOTFGNzNCQ0U0MUI2MzlDRTQxRUNFNzE4RjU0OTEwCi06MTBCQTIwMDBGQjM5QzZBMkRERjYzODQ4NkRDMjdFOEVCMUEwRjM2RTNBCi06MTBCQTMwMDAxQjdDQzhFQ0IxN0YxN0RGNkE4RjgzNkM5QUI2OUY1RjVGCi06MTBCQTQwMDA2Q0Y4RDU4M0Y2QjhDRkE0M0QwRUIyRUVBNDNEMEVCMjhECi06MTBCQTUwMDBFNkM0NTc2REY1RDVDN0VERjE4RjBGRkIxMjJGODIzRTZGCi06MTBCQTYwMDA1RDk5NzVDNjQxMjY0NTk4QkY5RkZCRDlGOTlGRTU1RjUzCi06MTBCQTcwMDA1M0Y4MUY4MEZFQkM0QUYyNjczNzUwQjk3RkVDMjhCQkYxCi06MTBCQTgwMDBERkZEMzFDMkNFMzMwOUY5MEZFODJGQzgzM0ZFODI4OUJBCi06MTBCQTkwMDBGQTQ3RTJGQTY3RUNDQUE5NTdDMDlGOTFGNzMzN0ZFN0VDCi06MTBCQUEwMDA3NjYxNUQ1NkNERjc3NzVDRkYyOEU0QUY2QjQ5NzNGQTlBCi06MTBCQUIwMDAwRDY1RkE5NzBERjQ3M0U0MzJGRUM4REM3RTk5REU5QUM4Ci06MTBCQUMwMDBCRERGQkMyNTA1Nzk1NEYyOEMzRkYyMDE4NzNGNTIzNzI4Ci06MTBCQUQwMDA4Q0JGNjMzNUFGQjQzRjMyNjc5QzczRDQ0MzZGMDU4QjIzCi06MTBCQUUwMDBGOEMzMTExMUY5NjdGOTIzRkI1QUI4M0Y0MkQ4Nzc1MkNFCi06MTBCQUYwMDA1NjdGOTYxRTFBOEI5NDVFODdENjNEMkQ2M0RDNkY5MTIwCi06MTBCQjAwMDBGRDg1Q0ZCMUFEN0M5OUIxOTZDQUYyQkE3RjEwNjRFN0RBCi06MTBCQjEwMDA0OTE0OUFGQkMzRkY1RjNFREU0REY5QjhCQ0FBODhCRjRCCi06MTBCQjIwMDBGQTFFQ0I0NzMxQjg3Mzk1MEYxOTc0MDZDNjIzNkYxOUU3Ci06MTBCQjMwMDA4NEVGOTg1QzUwQkY3Q0I2QUVGMDdBRjBERURCQjY0MkE0Ci06MTBCQjQwMDA1RUM4MUVDMkNFNzVDOENCRUNCRUQ1NzI3OEM0MzZERUQ4Ci06MTBCQjUwMDA1NDMyRkZDMThBQUZGRTQ5NjM3OUJCQjFENjlCMzA2RkM3Ci06MTBCQjYwMDBGMjM0MURBM0Q0N0REQUNFM0MwQjI5OUM4NDFGREI4M0U5Ci06MTBCQjcwMDBFRkQ4MEI5RUY3RkNCNDlBRTU5M0M3M0EzRjUxRDI2RUNCCi06MTBCQjgwMDA3MUZFMUU1OENDMkM3REJGRUUzMEM3RkY4NUQ3MTZBMEE2Ci06MTBCQjkwMDBCREJBNkY4OEU5NjNCOTczQzVGMzIwOEY4RjgzM0MxQUYwCi06MTBCQkEwMDAxODRGNTE5NzAzNUQ0MzMyREVBN0U2RDcwOUM2MDUxNzQ0Ci06MTBCQkIwMDBGQjQ5QTYzQjBBN0MzNTUyNzA4RjE3RkRDMzczRTUxOTBDCi06MTBCQkMwMDBGOTFDQjJEQjUxNjcyQzNFQzU0QkYzQjVFQ0VGMTlBQzU5Ci06MTBCQkQwMDBENzMxMkY0REQ2NDk1MjBCRTFGQTIxNkY4NDExM0Y1Q0NBCi06MTBCQkUwMDBCNzgzQUQwNkZCREQzQjhBOEZBNkNENkRFRkM0Q0JCOTI1Ci06MTBCQkYwMDAzRUU1NUQ1NzYwM0NBOTQxQjBENkE3Q0Y4MDNDOUREM0MwCi06MTBCQzAwMDA3RTdGQzk3QkRFRTZGNDdCOEVFQkYxOTkzOUVCRjE5QTBFCi06MTBCQzEwMDA5RTlGQzJCOEEzMkM3RTQ0RjZEMEJGQkM3MzRFNjc3RkY0Ci06MTBCQzIwMDBENjdBQjRFQTJGQkM3NjE3N0VENzMyMzg3QTA3QkJBRjA0Ci06MTBCQzMwMDBCODhFREYwQjM2Q0FGNDYzMzFCQ0FDNzhEMDAxNkUxRjBFCi06MTBCQzQwMDAzRTcxQThCRDA3RjhEQjQ3RDc0REJFM0U1QUYyQjcxRjdECi06MTBCQzUwMDBGMTI2RDhCOTYyMzU5NDRGMUU2NkRGNkIyRjdENjAxN0QxCi06MTBCQzYwMDA3RkJFMDM5RjFGNjhEREQ2OEVGRUNGMjE2MjAyNTlDMUMxCi06MTBCQzcwMDBGNUE3NTRGNjdFNEE0M0Y4RjBGNDcxQjgxNzY5Mjk5NTkwCi06MTBCQzgwMDAzNzg4ODVERkJCQjFDNTg0REZBOEFDMEE4OUVENTA0QThGCi06MTBCQzkwMDBBMzkzQTg3NzQ5MkIzMTk3RTgzMEFFOENCRjlGQjMzODc4Ci06MTBCQ0EwMDA0NTFFMDU3QzE2OEYyNjQ2NDAzRTQ5OUExOEYwQkUyQTRFCi06MTBCQ0IwMDAxQ0RGNzYzNTg1QUZBMjgyMDk1NzU2QTcwODdCQkYzOEFGCi06MTBCQ0MwMDBBOUUxRkNDNTQ2MTMwN0FGMDZGODY2ODJCRkNCNDVERjg2Ci06MTBCQ0QwMDA2M0JENkVCNzg2RjkzRkJFRDFDOTIxQjhGNzlBOEVDMTUwCi06MTBCQ0UwMDBERkQzM0E3REJGMzBDMURBMDc0NjI3RDM1QkQwMkY5OTI3Ci06MTBCQ0YwMDA3OTlGREVEMjAyRjcwRUIyRjdGMjI4QTUwN0RFNDcxOEM5Ci06MTBCRDAwMDAzRTI5MzI3RDAyREVDRjBGQjNGN0NBMjhEQjFGRUZEREZECi06MTBCRDEwMDBCODAzRUZEM0EzRTNFMzdENTMyRUZFRkMzMUNFRkY1OEVGCi06MTBCRDIwMDBFNzNCMjc2MDFDMkIxRjIzNDVFMkI2N0JBOTlDRUJERTdCCi06MTBCRDMwMDBGQUZEQkY1RTZFQzdGQkQ0NDU1RjM4OTU3NzFGQzMzRUUzCi06MTBCRDQwMDA3RTVGQjU3N0Q0QkUzRkZGQjE4QUVEQjNDN0I4OUUyOUY5Ci06MTBCRDUwMDA3NzJGMUIyNDdBODM5Q0ZGMEI1NTU5MTk5NjAwODAwMDdFCi06MTBCRDYwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCQzUzRDE0Ci06MTBCRDcwMDAwQjc4NTRENTk5RTdERUI5RjNDQTRDQzI5RDMwMDk5M0NDCi06MTBCRDgwMDA5MDk5REM4NDA0MjIwNDNBODE0MDQxNTEyNzExMTExNTE1Ci06MTBCRDkwMDA2RDQ0REIwNjZCNzUwOEM4RkIxMTUxNEJCNERBREM5MEJGCi06MTBCREEwMDAwNDkyMTA2MEIwQUU0NEU0MzE4OUEyQThBMDgzODJEMjhDCi06MTBCREIwMDA5NkRBMDFCMzE0NURCQjREQUQ0NTZBRDE0NkQwQTgwOEYzCi06MTBCREMwMDAzNDUyNTE3NjU3RDdGREZGRkZEQzRCRTY0RTI2ODlENjFECi06MTBCREQwMDBFRDZFQkU0RjBGRTc5RUY3RkYzRUZGRjlDRjE5QzYxODc1Ci06MTBCREUwMDBGQjJBMTdGRTU3OTVDNEEyMDU4Q0ZFMjg1Rjk5Q0FBMkFDCi06MTBCREYwMDBCNjk4RkNGQzRDNjM3OTMwRDc5ODJGMUY2OUNDN0JDNjcyCi06MTBCRTAwMDAxQURCQkIyRjM2OTQ3RjdFMUQ2MzFENEVDODQ4N0UxQkY4Ci06MTBCRTEwMDA4MzU0M0E3QUIzQUQ2QzM0NjNCNUVFRTU5NDNGN0ZCQjlGCi06MTBCRTIwMDA1RTFFNDhDMjdDOUU3Q0QyOEVFNThGNTU1NUQ4NTgyMTI3Ci06MTBCRTMwMDA2M0FCM0MzMzA2MDVFMUZCNTdGODc3NzlFRkI0QTE5QTgxCi06MTBCRTQwMDBCMUE4OTVCMTM1RDUyMTRBOUJBQTVCMjg2RDJFNjIyMkY3Ci06MTBCRTUwMDAyQjY2NkNFRDY4MzFEQzk2QzNEOEVBQzIxOUQ0NUZCRDlECi06MTBCRTYwMDBCQkZGRkVEQUIwQkYxMThDODVBQjZEOTQ2RUFEOTZBOUE5Ci06MTBCRTcwMDBCRkNERDUxRTRBNkJBQjE1NEEzNzU1MTc1MERBNTJFRDc4Ci06MTBCRTgwMDBBNzdBMEY1NTRGQTQzNDU0MURBMDc0NURGNTM0MkE3RjUyCi06MTBCRTkwMDBCRUJBOENGMkJCQUJDQjI5N0RCNjNBNDhERjc3NTVDRjIzCi06MTBCRUEwMDBBN0Y0RTlFQTRBNEE5RkFDQUVBMkY0ODk2QTk1RDJFREJBCi06MTBCRUIwMDBENTBEOTRBQUIyQzg1ODFBQUNFNzRBN0Y2NjE5Q0NGRkQwCi06MTBCRUMwMDBEMTJCNTk3OUE0QjBGN0JDNTU1OUUwRjU2NDgwRTU3OEQ5Ci06MTBCRUQwMDBDNjkyNTgyOENBREM4ODJGRTg0QjYxQ0NERTEwNjIzNjQ3Ci06MTBCRUUwMDA4MDQ3RTY2MkY4ODZGOUFBMTBCMzQyREUzMzg3RTdEN0M3Ci06MTBCRUYwMDBFMTM4RDBBRThBQjEwMEMyOEQxNUIwRjA3NjgwOUI0RDhFCi06MTBCRjAwMDAwOUIxNTkzMDVFQzBBQkIyMUI5MjE5OUJBRThEODNERjc1Ci06MTBCRjEwMDAxMThFNkE4RUNBMTA1RjI3MkM4MUVCRTQzNEVDODc1MUI2Ci06MTBCRjIwMDA3OUZFRkU4RTgzODhENjMxMUQ5MTUyNEMwQjBGODc0NENCCi06MTBCRjMwMDAwOUQyOTE1MzJBNTc5QTIwMUQzNDU5MTVCMUZEMkE4RkUxCi06MTBCRjQwMDA1ODJBQzA3OEU3QUFDNEIwMDlCQTU2OEFEOTQxMTNFNDdFCi06MTBCRjUwMDAxRjJCMTRDMzREMzA3RTczMDkxMzQ1QzQ2MzA2RTA1MTkzCi06MTBCRjYwMDBFODU5NkZEMkY5QUQyQzNBMEVGMDVBMzU2MzEwNEIwMEY4Ci06MTBCRjcwMDAwRjNEMUQzQTVGRUNBMTQ3RjgyRjIzOThENDQzQUZGMDUzCi06MTBCRjgwMDBERkVBNTBGRkVEQzdFQzExMERGNTBCNzdDNkI1MkY4NDM2Ci06MTBCRjkwMDBGNkZERDBEM0M4Qzc4Q0VEMEIzNjI3MTlFNkIzREFEMzNDCi06MTBCRkEwMDBGRkY4RjlFN0FGQTc3NUY2NDVCN0E3MkMxNTNGNDNCOERCCi06MTBCRkIwMDBFQkY5RjRGMzk3QjFFODYwQzZERTcyQ0E4NENGRDQ2QkI0Ci06MTBCRkMwMDBFRkYzMDQwQjY5QjgyOTI2QTAwNzI5OEI4NTlCMDRDQ0M1Ci06MTBCRkQwMDAwNkQ4NkM4MEFCMTlGRUQ1MjRGMzNDQzJERDA0NDg2QTU4Ci06MTBCRkUwMDBGMjIzQkIyQTAxOTY4MkE5M0ZDMEM2NjAxQUEwRkMyMTk5Ci06MTBCRkYwMDA3M0IwNTkxRThGRjkzMkZFNUQwRTEyMUQzNDVGMDQ1RDYxCi06MTBDMDAwMDA1QzhDRkQ2NDM3MDQyNjQzRkVGQkYwQ0Y0Q0M2QUUwRkJDCi06MTBDMDEwMDA1RDM0NEQ4NUZDRTdFNkEwNTgwNUUzQUZGNTcyN0U1QzI0Ci06MTBDMDIwMDBFMTFCOUI4NEVCN0VCNEI5N0Y3RUFDRDVGODUxQ0Y5QkVFCi06MTBDMDMwMDA5QzAxMjY0MDNGQjkwREYyNThBNEEzQkVEQTNERDgyMDlBCi06MTBDMDQwMDA0RTBCMjdFOEY3MjlBNDVGOTg3RjdEQzMwQzM5MUY1NzUzCi06MTBDMDUwMDBERDhFMzI4QjMxQUI5MzExQkRDNUQ3ODdGNTNFODVGMEIwCi06MTBDMDYwMDAzNUJCRjkzQUQzNkUyQUEzMzQ2RkU3MjQ1QjE5RjBDM0NBCi06MTBDMDcwMDBFN0M5RkRFM0FGMzE2RUZFNzYxODMyOTI2MDVFMUY2QTRCCi06MTBDMDgwMDBGM0NBN0JFRDE3MjQxRjNGMUZERDNGNURFOTcyRUY3Qzk0Ci06MTBDMDkwMDA1ODY0MUQ4ODVGQTk4Q0U0NjlEQTRENDE5NjA3RUI1OTE1Ci06MTBDMEEwMDAwREZDRTI0NEI5RjdFNThEMEQzOTgwNTc3NTgzNDg3MjcwCi06MTBDMEIwMDA0MDlGN0ZGQ0I4MjZBNUIzNDQ4NEYyRDUwNzE2MzAwNTBGCi06MTBDMEMwMDBDNjM3N0JDQTk4NUE4ODc5NUQzRTQ3MThGNkVGNzA3Njc2Ci06MTBDMEQwMDAwNDcwQkQwRTE2MEE5OEEwN0Y0NzU1NTBDNUVGMTY4RjA1Ci06MTBDMEUwMDBDQTkwQ0U1NjY3NUNBODRGRjI3NjRENDgxNDExQkVBQjhECi06MTBDMEYwMDBCMkM0MzAxMzI4NjU0RUU0Rjc2MjQ2RjlFNDhDRTcwMkQ3Ci06MTBDMTAwMDAyMjkyQ0QxNzMwOUYwOUQwMEZGRURCODRGMDU2OTk4ODFDCi06MTBDMTEwMDBFQkM4Njc3RTI3Q0NDQjU2RDAxRDEwQTE3RTFFREIxNzQ3Ci06MTBDMTIwMDA0NTc5NjAyQjYxRkUyNkU0OUY4QzIzMDFBNDVCRjUwRTBDCi06MTBDMTMwMDBFNkNGMjczMjBGOTIzQzYyNTJEMDg2RjIyQUI3NjUwQ0M2Ci06MTBDMTQwMDBGMTgzNEQ4OTA4QjhFRTFGNTg4MkVGQzVGMjhCQzVDMzQ1Ci06MTBDMTUwMDBFNUQ4RUEyRjREMDlFNUVBQkY2QTcyMzFBOTBGQkMzOTZCCi06MTBDMTYwMDA1Q0JDRkM3M0IzNzIwREU5MUJDOEI3MjVBMDIzQjM4QjZECi06MTBDMTcwMDBDQkYxMzY3OUM2RUYwQjk0MUVCRUQ0Q0JERkMyNDU4RTExCi06MTBDMTgwMDBFRkM5RTc5RUI3RDBCQ0YzNkVGQUYxMjA1QzRGNUY3NDQ1Ci06MTBDMTkwMDBCMDRBQTNBRkY1ODNCOERDQ0Q5QjdDNjkwMEUxN0QwRThFCi06MTBDMUEwMDBFNkRBMjRGNEFFQkY2MDkwNDJGNUY0QkNFNDM0Q0FDN0NBCi06MTBDMUIwMDBBRjNGM0Y4OUU0NTJERUE5N0IzODFGNzhGQkE3NTc3RDRDCi06MTBDMUMwMDA5RTlGN0I4REY2ODA5ODY3MjMzRDVEMUYxMjQ5MkVENTdCCi06MTBDMUQwMDBCQTQ1OTYwMkY5QUQ0ODFGMzkyODMwM0JFRDE3QzE3QUIwCi06MTBDMUUwMDA2QzZGOTgxOEUyN0I2QjU1QTlBODQyNzk3MjhFMTQyNjYxCi06MTBDMUYwMDBGQUYzNzQ0NzUxOUNEOTI1NzYwMEU5MDNGMEFCQjhEMjI1Ci06MTBDMjAwMDAxMEVGMTMwODdFNTlDNTExMDFFOUZBOTRBNjE3RTFBRkEyCi06MTBDMjEwMDBDRTAzNzRFNkUzNEI0NkZFMUVFMTgyRUY4MTlEMDI5NzVBCi06MTBDMjIwMDAwMzFFMkUwN0NDQ0NBRjVBNzE3Q0QwODgxMTE4Q0ZGMUU5Ci06MTBDMjMwMDA4Njg5QkUzMzE2ODlERTBGRjkyNDU5RjRBM0RDNUM1QkQyCi06MTBDMjQwMDBCQzMyMURGOUNERTE2MkE0QkZFNjVGREQ0NkYyMDlFNDMwCi06MTBDMjUwMDBBQTdGMTNDOEQxQTUxRjc1QTUyRjgzN0M5RTg3Q0I1REIwCi06MTBDMjYwMDAxRDFFNDk4NTE2ODM1RTE4NzAxQzI5MUM0MDNERTkxMDZGCi06MTBDMjcwMDA5ODNGRTRFRjFCQ0VERkI4NUY1Qjk4RDlGRkExN0U0MTBBCi06MTBDMjgwMDA2MUE0MTM1RjY4N0YzQjU0OUExRkFFMUJGQUI1QjI1RjdGCi06MTBDMjkwMDBEMTM4RTdCNDcxOThFOUQ4NjE4NDZGRDI3NzI0NjY0QUJGCi06MTBDMkEwMDBDMDFGN0Q4RTYzQkFBNTVGRkQ1MDc1NkNDMUVGREI2MzY3Ci06MTBDMkIwMDBFOEY3MzY1N0IyQkI2QjE0RkNFM0JCRUNCQjVGQTE4MjYzCi06MTBDMkMwMDAzMDM5ODlCRUNFODEzRDgxRTMyQTM2NzYxMEYzNzVDREIzCi06MTBDMkQwMDA2MjM4MTE3RjdDNUUzREZGRjdFRDgwQkNCNTlBNUVBRkEyCi06MTBDMkUwMDA3OUQ3NUE0QUY0Mzk1RTBDNUJBMTdFN0JEQUQ0Q0NDRTg2Ci06MTBDMkYwMDAxOEJFRDBFNTcwNkQzMUQ3MDM0MEREMENGOTYxNkRDRDBFCi06MTBDMzAwMDA1MTY1ODFEMjUzRUY0OUJEOUVEQ0JGQkVEOEFFRDc2QjFECi06MTBDMzEwMDBFNkY1OTI4QkZENjIzMDQxRkQyNzM0N0U3QUM2MTFCODc2Ci06MTBDMzIwMDBDRjM1QkU2NzVDNjVFNUI0OUI0OTBFOERCNzMxNTM4MjRFCi06MTBDMzMwMDBGNTNERTMwOEQ2Qjk2MkY4NThFRjNGQjYzREQyNkYzRkZFCi06MTBDMzQwMDBFRDlCNUQ2OTdEQjdGN0REM0JFRDJERDY3RkZCMDdGQkYwCi06MTBDMzUwMDA2QjlGQjU3Q0RBQTYwMUU2QkYzOUYxRkNENTZERDgyRTBFCi06MTBDMzYwMDBEOTYzNjE0OEU3MzUxOTk2REMwNkM4QUYxOTZGRjE1QkYwCi06MTBDMzcwMDAwMTBGRURBM0E3N0ExMDZGNzVBRTIzNEEyMjdBODI3RTUxCi06MTBDMzgwMDA5RkU4NkY1RTAwOTdGMjAxRDZGNUVDMDA3MDJEMTdGQTZBCi06MTBDMzkwMDA1RkQ3OEJGREI1MDdCODFFMUQwMDJFQkYxOTAwQUUyRDRGCi06MTBDM0EwMDAwM0NDRkZCNzg5REJBQkQ5MzhFRkU0MkMwQkU5OTMxQTQ4Ci06MTBDM0IwMDAyRkMwRDU4REZDMDA3MDY1M0RGQ0YwRDg4NjNFRTFGQUJCCi06MTBDM0MwMDBGQTQwRjQzNkMwQkFERTFBMDAyRjAzRDFFQkYxMDFFMEQ3Ci06MTBDM0QwMDAzQTEwQkQ5RUZDOTZGNDdBQjYwRkI4NkVDMzc5N0YwQjA3Ci06MTBDM0UwMDA3QUZERjI1QkQyQUIzOUY1REJEMTZCNzI2QUZGNzI2MDFBCi06MTBDM0YwMDAyMDdBNERFQkFGRkREN0EwNTc2RkEyRjk1Qjk5MjNBMDMwCi06MTBDNDAwMDBBMkZENTNDOEY1RjhGQzEyOTFGNEJBQjk4MEVCNUZDN0VFCi06MTBDNDEwMDBCMTI3NDg4RkQ2ODE5RTFBM0MxMUY1RjVGMTg3OTYxNjAzCi06MTBDNDIwMDBGN0U4RTc3OEZEMTNERjVGQkNGRTVDRkFDOUUzQ0M4RTZBCi06MTBDNDMwMDA3OEQ0RjQ5RTNFMUZCQjEyREZDRjhGRkFCNUUzQkVFOTdFCi06MTBDNDQwMDBCODQ5MUUxNkI1OEZFOTY5M0ZGMjMxOEJDMThFRkJGNkY0Ci06MTBDNDUwMDBFMzE5RjU3QjUyMzE4QzhGRkUwNDE4RkY4QTg5QTg1N0E3Ci06MTBDNDYwMDA3N0ZBOTEyRTg3M0ZGODZEQzdFREJGN0VDMTY2NjNGRkY3Ci06MTBDNDcwMDBERkQ0MUU5ODk1MEFGNjgwQTNDNzFFQzhBRDdBN0VEQjZFCi06MTBDNDgwMDA3QjgzN0JGQUM5OTUwMjRDMDZCQTkxRDgxNEIyREI1ODZCCi06MTBDNDkwMDAwM0YzNkZDN0UyQUFERERCREUxQkQ3NjMwRjAwNDc4ODFCCi06MTBDNEEwMDBCODlGRDBDNzMxMzU0NEI2QkQxN0IzOEVGMzczOThCNjc1Ci06MTBDNEIwMDAwRkFCQTQ3RDRGOUU3QzcxMTJEMkYxRUFFNkZFRURFMjU1Ci06MTBDNEMwMDA2NzM0M0RCRTUzRjMzNzNEODVGRTI2NDg3N0EwQkYwOTRDCi06MTBDNEQwMDBEMkM3RDFERjA0RTk2M0U4NkYxQTgxRkUyOUVFNkY2QUUzCi06MTBDNEUwMDA0MjdGOTMxNUVEMEZFRTZGNUE4NUZFMjY0OEY3QTMxRjg2Ci06MTBDNEYwMDAwQ0QyNUY2QTdFQjA3REQ1NjE0QTVGQThERTQxRTk5RUJECi06MTBDNTAwMDBFQTA4OTUzRjU3QkQ4RkYyOTFFQTI4RTU5QjhCN0U0MjYyCi06MTBDNTEwMDA3MkE2NjcxRERDM0VDRjkzNzU3RjVERkZFQkY4Q0UzRUM0Ci06MTBDNTIwMDBFMzNFNjI3NEM0RTgyNzE5QjUyM0Q1OTBCRjI4OUM2OUZGCi06MTBDNTMwMDBBODNGQTIyNUQ3NTA5RTFGMUE2OTI4MUZENjMwRDY5MDMzCi06MTBDNTQwMDA3NzE0NUM2Q0E4NkY1NzRBOEQ3NEU1QjlDNjUwM0Y0N0E1Ci06MTBDNTUwMDA5RDYxQzg2NzU3REQ2Q0E4RUZBREFDMzA5NDBGOURCRkVGCi06MTBDNTYwMDBEMDUwOUUxMTVDNkVDODBGMjlCRkQ3NTBERjE1NTg2OTk3Ci06MTBDNTcwMDAyODFGMzRCMUM5NTA3RTY5RjcwMzg2RkMyNTFGNkUzMjJGCi06MTBDNTgwMDBENDlGRDREOTY2MjhGRkVFRDFBNzBDRTVFMzNCOUUzM0I4Ci06MTBDNTkwMDBFNEM3MURGRUE1QTFGRUY3MUNDMTI4Q0FDM0EyRTg0MTNECi06MTBDNUEwMDAyM0JGQjA0RTExRjFENzlFQzI2OEZGNjM4N0ZEN0IyMDg5Ci06MTBDNUIwMDA4MTNERjk1RjgzRjgzRUQ2Q0E0NjkxQkQ3QjBFRTQ1OUIyCi06MTBDNUMwMDA1MzExQjZBRjBDRTFGRTNBMTdDQTlBMTREQzlBODcwNUVDCi06MTBDNUQwMDAzNjhDQTFBRjI4NkE0Rjg5RTU4NzZGMjYwNzcwQTc4RjMxCi06MTBDNUUwMDBGNTdERjA4NzdDRjk1RkZBRkU3NTg3NURCRDBDQzdDRkRFCi06MTBDNUYwMDBFM0YyNTg5NTU1RDIwN0YxRUQ3NUJGNTBERThFOTk4MzYxCi06MTBDNjAwMDBCMEJDNEUyRTk1MTNDOTg1MTM5NkUwODk1ODNEMTFCRkQ1Ci06MTBDNjEwMDBERkNEMEIyNEIzMDA4RUQ3QTBGQkM1QjhEQzMzRjEyQUU1Ci06MTBDNjIwMDAyQ0Y3RDg1NTg3MDVGNDgzOTU4RjQ5QzVGNUU4RkU5QzBFCi06MTBDNjMwMDBENTFBQkZENjZCN0M2QTY1OTdBOEU4QUYzOEE3RURGQjIzCi06MTBDNjQwMDA5ODY5QjJCRjNGMzkxNTBGQUY2RjJBRDdCRTQ4OERERjRCCi06MTBDNjUwMDBFNzRDOEZCRThGRTMzNzQ4RTE0NEZBNTI0Rjc1Nzk5NjI1Ci06MTBDNjYwMDBGN0M2NkRGREUyNDc4N0FGOEU0NzkzREMxMTQwRkQ2QTQ4Ci06MTBDNjcwMDA1MzJBNTk4NUIzMzc5QzRDNTk5QzFFRkVEOUVCMUUzQTYwCi06MTBDNjgwMDBEODI4Q0ZDRkIxQzJEMjQwRUVENzU4NkZGOUFEQjQwRTkzCi06MTBDNjkwMDAxRDlGRjFGNUQ2NTVGMzdENTczM0UyOTVDRTExNjRDRDRDCi06MTBDNkEwMDBERkNGRjEyQjRFMENBQzQ0RjhBNkMwM0UxQUZEMDJBMjFGCi06MTBDNkIwMDAzRkNBM0ExM0NDN0JEMDQ0MjM3RDI1RkI4RDcyRDA1MUU5Ci06MTBDNkMwMDA2MDk0ODM5MkQzMjgwN0NERkU0QTE2NDEzRjJEOENDMzM4Ci06MTBDNkQwMDA4ODFFODMwQ0ZEQjZGODFGRjE5RjNDMTBERjVEMTIxMDIxCi06MTBDNkUwMDA2MkU4NzAyMEZFQzMyMUJFMUEzNjMwQkZGRUEzRkNERDE3Ci06MTBDNkYwMDAzRTI3OURGQUJGNDdFMzZGRTA2ODlFQUFFQzc1QTQ5RkIyCi06MTBDNzAwMDA4QTg5MUEwMTMxRTU4NzdGODE3OTJGMzg2QzI2M0ZDRkRFCi06MTBDNzEwMDBFNTVGNkMzQkI0MDVGREQxMTNBRDMyRkFBMzE5MEIxREQ3Ci06MTBDNzIwMDBGQTM1OTRDRjA5RDhDQTMwQkZFMEQ4Njg4QjBGQ0E4RkNBCi06MTBDNzMwMDA2NDAyMTE3OEIwQkMyQzA1RTVDMDY5MjY0RTQzM0ZERDhDCi06MTBDNzQwMDA2OUY2N0FDQUI4MTgzOUI3NjRCMDg1RkI3RjFBQ0NDN0M2Ci06MTBDNzUwMDAzQjZEMzhCQzRBRTc1M0I3ODc3ODVFNUZEN0JDMTY2MzNBCi06MTBDNzYwMDA3RTJFOUI5MTJFQzEzODczMUYzNEEzRTQ2MzBCOTg3NDAzCi06MTBDNzcwMDBCQzUzODcwM0QwQzE4RjA3Q0JCNDlFNzlBQzcyOTUwQ0E0Ci06MTBDNzgwMDBFM0Q2OUJGOUY5Q0M5MjE3NDc1QjEwMEYwQkM2QzkzOTVBCi06MTBDNzkwMDBBNkEyOUU3OURDM0Q5OEZCMDE0RjAyQkQyOUQ2OUVFRkYzCi06MTBDN0EwMDAwQjlENjEwQkNBRTUxMzdCQzZGREUwMTI4NkZEODQ1NzI1Ci06MTBDN0IwMDA2NUEyNUZEMzA1RjY4OEQyMUJCRUIzMUI4Q0YzMUM2ODQxCi06MTBDN0MwMDAxREYxRjM2NjZDMjVDMUEzQUY3OTQ4M0I4NDQwMjJGRjdECi06MTBDN0QwMDA3OUVENjBDMTgwQzc1QURCQ0ZCNjc1QzIzQzAzQjUxMjk0Ci06MTBDN0UwMDBCMzVGMDY3OTg5OUYxRkE5Qzc5MkMzREI1MTdFOTc1NjE1Ci06MTBDN0YwMDAzRUQxMDk3MDUwNTc1QUU1NUE0ODM3M0E3RUY2MkNENjQyCi06MTBDODAwMDBBRjAyODRFMUY5RDNDRUMxMEFGNzlGREE3RDYxM0M1RkM0Ci06MTBDODEwMDAwMDdERjNERDE5QzlERkJFREZEREZGQTQ3RTVGQzA3RUQyCi06MTBDODIwMDBEMzdBRjdCQkM0RDY2OUMxNzNCNDY1NTJFNTM0NDE0NEM5Ci06MTBDODMwMDBCRjIyQUY2NzM1MDcwMzQzRDE5RkI4QUYyODNBNTQzMUMxCi06MTBDODQwMDBENDZCRjg5QUY1MEUwQkI5NUZBQkRFMzRCMTlGRkVDRTE4Ci06MTBDODUwMDA2OEYyRURCNzNCMUZCNUEwREMzQUZERDRCQkQ3RTNCRTExCi06MTBDODYwMDA2OEQxQUY0Q0NDMDZGNUNFRUM0QzY2NTFCMkZCQzIxNjhCCi06MTBDODcwMDBCNDVGMTdFRTMxMDVDMjk0OEY0RUI4MzEzOTk2QUY2QjY1Ci06MTBDODgwMDBBOUZGNDVDRjI2RDNCRTZBRTE3M0Q2RjA3NDY4QkZGMDI2Ci06MTBDODkwMDA4NTEzNjMxOEM4ODMzMzJCQkIwRjBENDVGODNEMjU5MEQ2Ci06MTBDOEEwMDAxRENERDRDRTMxMzdDMkY3ODUxMkJCQUQyQzgxRERGMTYxCi06MTBDOEIwMDA2NzhEMUY0RUZEQzI1MThFRjQyNkVDMzg3MDJCRjUxQjkwCi06MTBDOEMwMDBGOUExRDkxQUEzQzczQTA2OUIwOTlGNTA4RkZDREJFQTRFCi06MTBDOEQwMDA5MzQyMzg1RkUwRjNCQjYxNzRFQ0ZDNkE3OEJEMjdCOTIyCi06MTBDOEUwMDAzRjc3RTEzRTczRDg4RUYzREJEMTZBMDk0MkJENjUzQkU5Ci06MTBDOEYwMDAzRTIxRkFCRUUyRDk1RDI5MDg4NzY1RkI0QzA2QjlCNjMwCi06MTBDOTAwMDBFOEQ5MkY1NzVEMEM3ODVFNjQ2MkRERDM0OThGN0Y0MTkzCi06MTBDOTEwMDBGOTczMDE1QkI3ODlFNDUwMjA0NTAwQjlCNTk0NDQxNjFBCi06MTBDOTIwMDBENDdCRkU4M0E5N0Y4MUYyOTMxRTEzQjM4MzI4MzhEOTY5Ci06MTBDOTMwMDBGMUJFRTU1Nzk4MEYzQTJCOTkxRkZCMzdGMkUxQjIxRDc0Ci06MTBDOTQwMDAyNzJDMzgyRjU5NjRERDU5QzBFODk3N0QxQUMzOTdBQzVFCi06MTBDOTUwMDA3NzdEQzZCQTJEMjg2Nzk3NDUxQTNGMzEwMUJEMkREQjdCCi06MTBDOTYwMDA3M0ZBMkRBNEJCNjU3MUZDN0MxMkZGOTFEMTVCNUYwQTQ5Ci06MTBDOTcwMDBFRTc4N0RGOURBMDQ4NkU3RjQzQjYwMTMzNEE5NkY3RDI1Ci06MTBDOTgwMDBBOUYzRjdBMjVERTdCNkFBMzBGRUE5RTczRURFQUEwMjQ4Ci06MTBDOTkwMDBDQTE3RkZGN0RGQjdGRTE0Rjc0OTJGRDk2NTk0NEJDQkMxCi06MTBDOUEwMDA5RUZBNTMwQThCODE3Rjk2OUI5RjI3OUQ3OUYyODlDN0I4Ci06MTBDOUIwMDAzNzAxMUNDRUZDRDk0QTUwM0JGM0VCMEY3QzBBQzBGRDdCCi06MTBDOUMwMDBDQ0VFRkY0OEM3RjNBNUJCN0U3REU1MTBBNEIzQkJGNjU0Ci06MTBDOUQwMDA1RTMxQTRCRjdEMDVEMjZERDgxQThCREYzMEY1QUZFQzg4Ci06MTBDOUUwMDA4MzcxODY0MDc2QkY5NkM2RTFFNUQ0RUVDRjJENzg0RUIyCi06MTBDOUYwMDBGNDk5QzBCQTUxRkUyRThEN0M2OTQxRkJFQzUwODA3NUQ0Ci06MTBDQTAwMDAyMzlDNUVERTczRTJEMEJEOTAzRjBENzhCMjI2QzAxMzRBCi06MTBDQTEwMDBBQzdGQTg0ODdBMjUzQTE0RjVDQkQyM0QzNzdFRUZEMkM5Ci06MTBDQTIwMDA2MjRDQ0Q3RTA1RjFDNEJBNDlERUY3QzJFRjFCODBERjUwCi06MTBDQTMwMDBFMjFFRkNDNjk3OUY2MzVGNTgxMEZFQ0I3NjAyM0VDNzhFCi06MTBDQTQwMDAyMDVFMDE5RjYzN0FFM0YzMzRGRTYzNTI2RjdDNUVEMjEzCi06MTBDQTUwMDAwQjlGOEJCNzZEQzJDMjNEODMwOUZGN0RFMTczQzlERUI5Ci06MTBDQTYwMDBFRkY3NkI2N0U5RjI2MTIwMzhDRjE3RjhCQ0FDRUVDMDg2Ci06MTBDQTcwMDBCNTZFRTRCM0U3MUNBQTg3RTMzOTNDMURDQUNFRUMzQTk1Ci06MTBDQTgwMDBFNzQzNjdDODg3RTZFRTVCMTEwRUREQkZCNkNBNzg2RTc2Ci06MTBDQTkwMDBCRkYwRDc2RjEyREY5REQ5RkIwNzBCRTIxRkZFNTI4NDU4Ci06MTBDQUEwMDAwOTkwNjcxN0ZFNUU2NzkwNUZDQTZENzBCNjg0NzU0RjE4Ci06MTBDQUIwMDA3REFCMTg1M0Q2QURGQTA5N0Y5NDNGMDQ3QzQ4RjgwODQzCi06MTBDQUMwMDBERjMwNEQ0MUY5MUI0RUEzNzUyRjBENzNGRTU4MUEzRUYyCi06MTBDQUQwMDA3MDkzMzBBNjM3RENFQkREQTI3NkZFRDM4MzU3NjEyMjVDCi06MTBDQUUwMDBFMkYzRERBOTQ4N0Y3REUxNTM1RkJGOENFQkZGMkU5NDFECi06MTBDQUYwMDAzRjY2RTRERkY4RkE0QjgxNUY3MTdGRDQwQkJGRTEwMzNGCi06MTBDQjAwMDBGRjhFRTk5OTU2QUIyNDgwMkQ3NDA2RUQwNDY3NkZCQzQ3Ci06MTBDQjEwMDBGN0MwOUZFQkU3NkY2QTFGNTdDN0QxODdERTVFODdEM0U5Ci06MTBDQjIwMDA0MEZDM0VEMEZBQkUyOUZDOTZCODE1MDMxREU5NzAzQ0M2Ci06MTBDQjMwMDBGNTQ1NjI3REYwODgyNjNGOTZCMkNBNjk5OUMzN0FFQkMzCi06MTBDQjQwMDAzMzEzMkI1Mzg3MEEzREYzNUQxNTMxOTE5QzNGQjVDM0Q5Ci06MTBDQjUwMDA0NEU3MzNGMUYyNjIyOTlFREIyNjE4RTc0OTM3Qjc2M0QxCi06MTBDQjYwMDA5NkVFM0IzMDA2RTVEQUE5ODNCRkQwRTg5MkQzRkREMjNBCi06MTBDQjcwMDA5REVGNUE1NDREM0Y4NDYzRTU3MzFGRTdDMENGNkJGM0JECi06MTBDQjgwMDA1RUI2M0Y3MTdGQ0I3NjdFOTJCMEJGOTM1MkUwODczODFFCi06MTBDQjkwMDBGRjkzMUQ2NkE2NDIxNzI3MjNBNjg0NzEwQjVCREM2NkY0Ci06MTBDQkEwMDA4M0REQjUyQTc5QzJEMTQxQjgyRjQ4NDk1MjcwRERCNTJECi06MTBDQkIwMDAyQjAzNkZFMkI5QThGQUJBOTlDRUY5OTlFNEZGRDAwQTJCCi06MTBDQkMwMDBFNUI1Qzk0OTBBRkFGMzZBNTNFNjMyMjU0NjhGRDdDNTU3Ci06MTBDQkQwMDBDMTQ5RjI5NEQxRjk5REU0MkUyQkU2N0JCQUIwRTFCQ0I5Ci06MTBDQkUwMDBENzBDMDQxMTNCNkZEMEJCNTlBODk3REUyOUZBQzA4QzMzCi06MTBDQkYwMDBFQkZDNkI5QzFERjk1Nzg5QUQxQTAyRkRGRDU1MTVGQzI4Ci06MTBDQzAwMDAzNTRBQTJGRDgxQjFGRkUwN0QyNkE2QzRGNEJGRDREQTg3Ci06MTBDQzEwMDBGRDBFQ0U4N0ZEQzZDRUQwMkUzM0JENjQxNzUwOUUyQ0EwCi06MTBDQzIwMDBEQjZBQTZGREQ3MzJEODU2MjFEQzNFRDg2MjBGQUI5MDI2Ci06MTBDQzMwMDBERkY4N0NGNUFEQTg5N0ZFQjZENUNBRjA1Q0UyRTVCRDlECi06MTBDQzQwMDAyQkJBRUU0MUI5RjQ4OEMwRDA5RkZFQjc1RjU0N0Y4NkZGCi06MTBDQzUwMDA3QTc5QzE2NjU4MURDODkzNzk4RUVFQzdCMUZEQkM2NzVECi06MTBDQzYwMDA4N0IyNUE2OEZGQjExMDk5ODA5QkQ5QUVCNEU4MDREQzUyCi06MTBDQzcwMDA4Nzc0RURDQUYwQUJENENGOEI0QkIxREYzM0NGM0FBODdBCi06MTBDQzgwMDBERjMzQkY3OTkzQzYzOUYzOUI2NEQyNkJGQUZDQzFERTA0Ci06MTBDQzkwMDA1NjYyRjUzOEQ4REJDQTA1M0UyMDdCM0IyNjBGRTMyQ0Q1Ci06MTBDQ0EwMDBDMjNDQUYyRjdDQTVDOTNDOTQ3RjhCMzAwNUJBNUZCNEUyCi06MTBDQ0IwMDA2RjUwMDBGREJCMzFGNUE4OUY2NUQ2RUU5RkY4NjlGRjY4Ci06MTBDQ0MwMDBBRDY2OEFCNDc3OEE2NjIyM0YyRURBNjExQ0ZGM0ZEQ0FDCi06MTBDQ0QwMDBEQ0FFNUE2NkU5OUVDQkVCODczMjM5REY3NjUwM0I0QkIwCi06MTBDQ0UwMDA5QTQ2QUY1QTc5N0M3QkJEQkU5NDk2NkJBOEE3Qjc1Rjc2Ci06MTBDQ0YwMDA2QTY1OTU4OUY4QzBBNUY1QkI2OEM3OTcyMzhDRkQ3MTU3Ci06MTBDRDAwMDBCQUVEM0QwRUZGN0VCN0MwQzg3RkMyNzZEQjI5RUU2QzYwCi06MTBDRDEwMDBCMTI1M0EzQzE1RjhGNjA1MEI5QjhGRkNCQjM4MjUzQTNDCi06MTBDRDIwMDBEQzA1RTNGRDRBOTM5QjhCOTMyMDBGREYzM0I1Nzk2MERECi06MTBDRDMwMDA3RENDMzM1QkU3MTlDNEVCOTIxN0VENzRBRUIyRTQ4NTlBCi06MTBDRDQwMDAzNzNGNDM3QzlFNDIxODAzQzY0RUE1NzU3Q0Y2NTNBMDIwCi06MTBDRDUwMDA4MzUzNUI0QzRDMDU3QjZEODkzNUVBN0IwNEY1RDQ2RUJGCi06MTBDRDYwMDAyQjZCNDNGRTdFRTkxNUQyNUJBNzlGQjM4QUZEOUQ1M0QzCi06MTBDRDcwMDAyRjg5MDAzNUQ4N0FBRjQzMkQ2NTA1OTU0RThDQjcwOUJDCi06MTBDRDgwMDA4OEFEQjg2RjM4NkMwQUQ3QzBEODU1NTI2MEU1QjNCOEQzCi06MTBDRDkwMDBCRUMzNjZEQTY3OUM5REMzMEE3MDVGNzk5NjY1RkE1NUQzCi06MTBDREEwMDBDMkJGRjJBNjA0RTUyQjVFMzUwQjg5RTI5MENDRTc0MUM5Ci06MTBDREIwMDBBODhGMDMzRTM4N0YyRDUzMjA5NUNFMEZBMzc0ODVBNUYxCi06MTBDREMwMDA3MjA0Q0E1RDkzMEM4QjJCMjQzRjAxRDlFRDY2Qjc5RjhCCi06MTBDREQwMDBDRDgzNzQ0NTJBMEIyMkZDOThGMzlBMEJGQ0Y1N0I0MDFCCi06MTBDREUwMDBFOUYyODc5NTIxRDg2RTUyMUE5NzJCNzNEMjAzNTdBNjcyCi06MTBDREYwMDA5MTdDNzFDQUU0NTdEMkU4NTRERENCRTdGOUI5OTBFNEVECi06MTBDRTAwMDBBRjgxNzlFNTlEQkZGNzM2ODRFRkYyNzcwNTI1RjZGQzEzCi06MTBDRTEwMDAzQzNFQ0VCMzRBNTJERTU0OEE2OUJEMjQ4RkYyRTQyNEVDCi06MTBDRTIwMDA4NjcwM0QyQkYzQjhCRUIzNzM5NDQxQUUxOEI5QkNBNjVGCi06MTBDRTMwMDA1QTI2RjlEMTU4RURBMTc0NzU3NTAxNTNDOEJGRTZBN0ZDCi06MTBDRTQwMDBCQzQ5NUJCRkI1NTBBNTM4MzVFNDY5RkNCMzNBQ0IwMkE5Ci06MTBDRTUwMDA2OEU3RTE5Q0YyMTUzQ0VFMEYxMjFENTkzRDk1RTQ5QkVECi06MTBDRTYwMDBCMjM5MTlFRDYzNEQ0RTk1Q0Q4M0Q0RUNFNEYwMzEzOUYwCi06MTBDRTcwMDBDQjA4M0UxNjJEMkZCNTRDMjc3ODQyN0JGQTdFNzk3QTY3Ci06MTBDRTgwMDA3MDExQzJDMzk2MzVEMjIwOTcyQ0VFQjE4NjdDMkY3OEQ0Ci06MTBDRTkwMDBFOUY4REZGNTdGMDUzNzQ2NzA2QUFDQjY1MUJBQkE3QTYxCi06MTBDRUEwMDAyMkMxQUJCRTNBNDBGOUZGMDdCODNEQzBFMTc2MzFDNkJBCi06MTBDRUIwMDA1QUM0QzBBREQ0OTBFRjEzNkUwRjAzREZCODYzRjkwNjA4Ci06MTBDRUMwMDBFMDg4N0NDMzkyRkNEQjEzQUMzRjNFN0RBODFBMTdDN0Y5Ci06MTBDRUQwMDBEODAzRDUyRDk0RUFERjUzRkJEMERCOUZBNDcxM0JBMDkwCi06MTBDRUUwMDA4QTA1NkJDQzc0QkVDNUZEMkRDQ0FEQjJBQzA5M0RGRTQwCi06MTBDRUYwMDA0REU2NTE5OTgyNzlFNDU1QzRDQkQxMjQ4MkRERjJCNzU1Ci06MTBDRjAwMDBFREU0MzczNkM5NTI1N0FDNUM1QjdFOUQzMjA0RTU5NzQxCi06MTBDRjEwMDBBOUVBNTE3NjYyNzA4QzFGNkQ3QTk5NUQyMUI4RkEwNTg1Ci06MTBDRjIwMDBGNEE3RDY2QTdBQjNGRTAyRkU4QzdDQjBBNjVBQTE3NDJFCi06MTBDRjMwMDBBREM2MEZFQjM1N0VEODgwNzg4NjdDQUQ5RjlGNkYzNjZGCi06MTBDRjQwMDA0RjYzQTQxN0ZGMDVGMjdDMUYxRjY1QjE3MTI2MkU3RjZBCi06MTBDRjUwMDAyNDZBMDY3QzkzOEM1NDI4OEQ1MjlDRUY1MTZCMzgxRkE5Ci06MTBDRjYwMDBFM0E4MEExOUM1RDFCOThFREU0M0ZFNjNDNjIyMUVGNEJBCi06MTBDRjcwMDBBN0I5MzRCOEIxRkRCOUFFOTlDOUI0M0MzM0Q3M0JDQ0VECi06MTBDRjgwMDBDNEQzOTAxOUVERjE3OEI4RDZGQTBGREE3MDdGREREN0Y3Ci06MTBDRjkwMDA3QzRBREU1OTIwRTA3ODlGQ0YyNDM0MzFGNzJEOTFBM0NECi06MTBDRkEwMDAxNUIwMEU2N0IzODNGNDZBQkFCRjMyMUJGRDdCRUM5OEYxCi06MTBDRkIwMDA5NUU4RDNFOTBGMEFGMzYyRjA5N0RFODc1RDc3NjdGQUE5Ci06MTBDRkMwMDBENTdGNDVGQUVCNDQ1OTA2N0FFODgxOTY2MTc2ODRGMzc5Ci06MTBDRkQwMDAxQTczQzQ4M0YyNkU4RDhCRUIwRkE1MUNBMEYwREQ5RTNGCi06MTBDRkUwMDA3NkFGNjg3MjMwQTVEOEM4RUZCQTdDOTUyNzhGMzVEMDU4Ci06MTBDRkYwMDBBRjJFNTc1M0E3MThFOTVDOTdBQkNGQTc3MTdGQzU5QzlECi06MTBEMDAwMDBGNEIyNEZEMjIwMUQ3QzdFMzNGMTYxM0NEREU3QzkxN0JECi06MTBEMDEwMDA5NzA3RERBODA3OThCRjA5RUQzNUI0MTlEMThFN0I1NzY2Ci06MTBEMDIwMDAwODczN0FFN0ZFQTlCMzlEMzk2RDY4RTdDMEFFODBFNDY2Ci06MTBEMDMwMDA4QThBRkM0MDc4RUE3RUY5MkI2OEI3NEI5MzBGMkI2REY4Ci06MTBEMDQwMDAzMzZDQjhERTA2QTAyMzg2RTc3QTQwM0YwOEUwNzU0MERGCi06MTBEMDUwMDAzRjk4ODY4MDdFMzg3RjRDQTQ1NEE3NEY0RjdBOEUyMTBDCi06MTBEMDYwMDAyRUQwOTQ3NzQ4RTRGMUYyMjJGOTlFMjVEOERGMzk2MTc5Ci06MTBEMDcwMDAzQ0U5QzAyNDFCREE3QjkyRDk3RjE4RTU1NDc3QjIxOEJCCi06MTBEMDgwMDA0MUJENTlFRjlDNjEwQkEwRkZDNjU1NEM3OEZGMkNCOUYwCi06MTBEMDkwMDAyMkJCQkYzODI3QjA1QkM4NkYyQjNCRkRFQzM4OEVDMzdCCi06MTBEMEEwMDAxOEY5NkQ0REYyNTg4NkZCQzQ1RENFOEUyNERDQjc1ODVFCi06MTBEMEIwMDBEMzQ1QzNCQ0U2QTQwN0JERTkzMUY5RDEzOEJBODYyRjAwCi06MTBEMEMwMDBFQzc2OTdENjRGRkM3ODE3QTU2QjdFQ0IyQzk1MDU2MjM2Ci06MTBEMEQwMDBDRTJEQUE3NEZBNTY1NDM2MjU4NkJGNTdFNjRGNjUxOEVBCi06MTBEMEUwMDA3RjExQ0ZENzdEQ0FBREVEREY0RTZFRDU2Njg3MDk1RjY0Ci06MTBEMEYwMDBFNjc4NzlFMTA2MzlFRUE0NTQxNTY1OUNCNzc3Q0Q4RkIzCi06MTBEMTAwMDA4QTg4QUUyRTREQzdGREExQjNFRDgyMUQ3Mjc5NkUwMkU1Ci06MTBEMTEwMDBGQTNBM0E3MjA4QzU2NzVFRDAzM0IwNkIyRTI0M0RCMzNECi06MTBEMTIwMDA3MTIyQjc0NzM0M0RDM0Y1RDNEOTY2MDdFOUE3QjM3Mzc2Ci06MTBEMTMwMDAyQTI5OUVFQTZDRjMxMDA1RTlFRUMwQkE0QkM2MjAzQ0UyCi06MTBEMTQwMDBFNjlFNkY2NDBBQ0M2RkRFRjk0OTk0Q0U2RkY5MzlBNTdCCi06MTBEMTUwMDAxNTJEQUQ0MEU0OENENUFDOURCNzZFMjZCNDNCRjFCMDM3Ci06MTBEMTYwMDA4OUUyODNCQUMyRTNDRTU0NDFCRUFCRDlDQTRDMzA0RTM5Ci06MTBEMTcwMDBEN0U2M0JCM0QxMkZERTA1RTNBMDdERDVCNTM5OUZFOEQ3Ci06MTBEMTgwMDBBQjBCRTA0NkY5MDY2MzdEOEMwQjM2MDE1RTJBMThDN0FGCi06MTBEMTkwMDAwQkZDMkY4MEY1RTdCRTYyNkE0RDY0Mjc1NUFDQjcwNkRECi06MTBEMUEwMDAxMjlERUY1QzI4NkY0OTZDQjdENUUyM0YzM0YwN0Y5NTU1Ci06MTBEMUIwMDAyMzEwNUUyNUVGREM5MzhERUJENUY5N0Y0NTJBQzgyMzNDCi06MTBEMUMwMDA4NEQ3M0I1Njk2QzgxRjdGNzlGQTk1NzM5MTJFMkY0RkJGCi06MTBEMUQwMDAwRjJDRTU3ODQ5NERFODVGRUJBMTdGM0VFRTA5MTFFQzlECi06MTBEMUUwMDA1QkMyNEIzMEU1MDY4MzlGOTVGQjMxNEY2OEY2MkZCMzRBCi06MTBEMUYwMDBGNTUxOUVBMkI1OTcxMzk3MkY2OUZFRjhEMEZEMENFRjVECi06MTBEMjAwMDAyOTU0OTYyMUQxRUJGQjY5MTM4M0ZEQjQ4MEZCREYxQjBFCi06MTBEMjEwMDAyOEZFNTk5RjBGRDhBOTQ0QzcwQ0YwODFGMjY1OEVFNjBECi06MTBEMjIwMDBFRjAxQjg3RkNGMDJERjRGQkM2MjEyOTAzRTdBRTgyOTRGCi06MTBEMjMwMDA5ODgyNzY4QkIwRTZCQTk1QkJBMEZDRUY4N0Y5RkU2Q0JFCi06MTBEMjQwMDBDMUY5MEQyNEVGODQzNUEzMzc0RTgyRUY3N0JFNjIyNkY1Ci06MTBEMjUwMDAzOTVGRDM3NEM5RkE1QjAwQkY5RkJFNjZBMkZDRkNGM0MyCi06MTBEMjYwMDA3NkFBRjdEMUZERkU4REI3NDBCREVFREY5OUM5MEVGRjVFCi06MTBEMjcwMDBGNEYwOTUxNEZGRjg5MUQ5RTgyNzk4MzA4NEYzRjFGMzhFCi06MTBEMjgwMDAxQTNGQ0YzREJGODZFQzBGQkQ3QzZFQzM2QzhCNDI3NEUyCi06MTBEMjkwMDBCQThFQkVDRkM1NDM5QjRDOUNGRkY3RkZBRDQ0QzJGMzkzCi06MTBEMkEwMDAxQzQ2RjcxNDlFN0ZFODg2NkI1NzkyNUUxQjRCRjZGRTdBCi06MTBEMkIwMDBCQ0I1NTY3RkEyNzhEMEU3RDMxNTgzRkM5OUQ3RDk0QzVCCi06MTBEMkMwMDBGRDMyQjA4QkRDRTk1QTdGMzE3MjY0REVGOUMxQzQwN0VDCi06MTBEMkQwMDA0QzU2MTlDNjE5Q0ZENUU0Qzk4NUY5NkQzNjFCRTRDOTdBCi06MTBEMkUwMDA0N0Y2QzQ3RTkwOTdEM0Y5M0U2QUVFRjk0Qjg4QkY3QTMxCi06MTBEMkYwMDBBRkVGMzJGQTNFNTcxRkI3OTNGMzYzQ0Y3QTM2NEU0QUY5Ci06MTBEMzAwMDBCNDlFOUU3NTRDQTZGQTFGQjkxMjhGN0Y1MjgzNkY1NzM5Ci06MTBEMzEwMDBGNTdDMTYwMEI5NTQ2MTg1N0E0RTFDRkZDRTU1MTM4QkVGCi06MTBEMzIwMDA3MTFEQUU1NDIxNjY1REYzNUExNkIxNDBDQ0JBRTY2RDVDCi06MTBEMzMwMDA5RTY1QTk4OEU5QjcwNzBGQ0IwQzc4Mzg5OUJFOTBGMEE1Ci06MTBEMzQwMDA3MDY3N0FEOTExRTQ5QjhBMzU5NzhFNDE3QTlDRDdEMjNGCi06MTBEMzUwMDA0ODcwM0U2MUY2RkI1MEJFN0VEMDcyNjc0QUEyMzhEODU0Ci06MTBEMzYwMDA5M0YxRjg2OUQxRjAwM0Y2NkU3MTBDN0U3NEJDQzRCNzBBCi06MTBEMzcwMDBFRjdBN0JERTY3MThEN0Q0RjUzMDM3NkVGQTgyNTcyRkY1Ci06MTBEMzgwMDBCQ0U1MjQ4NjlCMzQ4NEUzQUQwQkY0NkQ5MEUwQTZCQzMxCi06MTBEMzkwMDA3MDE0RTk3QUFEQzM4Rjc0REQzN0ZDNDZCMTYwN0ZGMDVECi06MTBEM0EwMDBFQkMzN0UwNTdCRTc0Qjk0M0IxMkZBNjhGMTFDQjI4NTE4Ci06MTBEM0IwMDBEM0MxNDA3MEVCMTk1N0EzODM5MkM0RUIxOTdCNjEzRDM1Ci06MTBEM0MwMDA1NTRDMDU4NjNENkUxOTg4MEU3RUNBNTQ1QjNGRUJCOEZFCi06MTBEM0QwMDA0MDA3M0YzN0QwQzFEODhENEREN0FFODQ3QTFGQTJCRDRDCi06MTBEM0UwMDAzMkEyMzdGRThGNUJENDk0OEJGMURDQTdDOTQ0RTc0QUE1Ci06MTBEM0YwMDBDNzkzRDRGNDlCNzlCRTA4RTVGMUYxOTREMEY1Nzg0RTRCCi06MTBENDAwMDBBM0U3MTc2Q0NGNEY5OTE1MzNFRTA3MEQwMDg3MDRGMDkzCi06MTBENDEwMDAxQjNCNDQzMUY4QTEyRUQwNEY5RUNBMEEyN0ZDRjNFOEVCCi06MTBENDIwMDBFNzg0MzlGMTNEQkVDQkQzNEIyNjBDNDEzQjI1OTREODQ0Ci06MTBENDMwMDA1RkFCQTdCQUJDMzYwRDcyNUVEODY3QTJGRTNDRUVDQ0RECi06MTBENDQwMDBGRDJDMENBNUY1RTlDMUQyMjFFMzMxN0VGNDI3QjdBMTZCCi06MTBENDUwMDAzQzM4N0U1QzIwN0Q1QkYzRjY4QTExQThEN0UyRUQwNEIwCi06MTBENDYwMDBEODdGMzZFMEI5RTcwQTUzNzI4OEVDNTBBOTcyMUI5RDQ5Ci06MTBENDcwMDA4M0FBMTJEQjVFOENGQjk0Q0E0REVGRTVBM0RGQjA4QTcyCi06MTBENDgwMDA1MkE2RDlBMTJCNEMyM0ZENERFNDk3QUQ3QzAyQ0Y0OTg4Ci06MTBENDkwMDA4MTQ4NjRBQzJGQjE0QTNBMzcwNTQxNTg4NkY5OEQwRTYwCi06MTBENEEwMDA3RUVFNUEyNUQ5NjQ2QjRDNUNDMjYyNEQ5RUQ3NTc5NzZECi06MTBENEIwMDBGREZDM0RGNDQzREI1NDI2QTc2MzdCMkUzNzI1QzZFREU4Ci06MTBENEMwMDBBRkZGQzQ3OUM2RTg3QjhCMzkyOEZCNzExRjJBQjAzMkM1Ci06MTBENEQwMDBFNDBCQjMxNEE0N0I0RTY2OEZCQjQ4OERDMUMzQzIyMTNECi06MTBENEUwMDBEQzdFQjRCN0I3MzdFNDQwN0JGQkVEQkY5MzUxMEY1QUY2Ci06MTBENEYwMDA2MTFDRjRCM0Q5QjJBNEIzQjFGRTZBQjMzQjQyRjc5ODRFCi06MTBENTAwMDA1ODVFQ0M3N0IwQUI5Qzg1OTAzN0Y4MDE2MEJFRkREOEYzCi06MTBENTEwMDA4NUJGMTJGQzlFQ0Y5MDFFNkIzODNDMjYyMjg4MjBGREQyCi06MTBENTIwMDBGMzlDNjFBRDI4OTcyNzRBNzUyNjhDM0I5QTc5N0IzRTAwCi06MTBENTMwMDBFNTM3Q0VGRTZBNzg2NzAyN0E5OEI5N0Y3NTA3REEzM0U1Ci06MTBENTQwMDAzM0Y3NjdDQ0M2RjM4Mzk5Q0VFMUVGNjMwQURCMDU1QjYzCi06MTBENTUwMDAxMkI0N0Y1OTYwOTEyNjQ4QTdEODFFQTVCOEM2OTczNTQyCi06MTBENTYwMDBGRjU4M0JFNjYzRjQ2MkJCNDY2RjYwRTc0Q0RCMERFOUI2Ci06MTBENTcwMDA0QzVCQzg3QzQ3NjE4RjNGMkQ3RURDMEQxQURGQjc5QjZCCi06MTBENTgwMDAyMzY5MjM5MTBFNjAxQzVDQzc4RkY3ODdCRjBGQUE5RjhBCi06MTBENTkwMDBERDEyMDk1RjM3MUFGMDczMkJFQjM2MjMxQzgzNENBNjgwCi06MTBENUEwMDA3MzBGRERBRjVCQzFGQzVBOUVEMUZFRjQyRjhCQ0Q2REE2Ci06MTBENUIwMDA0ODI3RjFGREREMTJFNUZERkRCODFERkE4M0Y0RDZDMzYxCi06MTBENUMwMDBEREZGOEE2QTM5MTg5MUE3M0E1ODRDN0ZGQkZDODcxQzBCCi06MTBENUQwMDBBQzc3N0ZGMTcwRjY0QjM2OTMxQTAzNTc0MDkxMTgwQkQ2Ci06MTBENUUwMDBGNzVFRjAxRDU0N0UwRDFCRDMzNzlGRjVDMDlCQ0YyM0Y0Ci06MTBENUYwMDAxRTFGOUY2MjExRjBFOTIzNDMwMkJCOTA2RkVGMUQxMkMzCi06MTBENjAwMDA3ODA2RDNDNUI2NkU5RjA0NzQ3M0M0MUQ3QzBFRjM0QkFECi06MTBENjEwMDA0REMxRUM3NDgwQzc2OTZGNzA0NDFBQzJBNTIzRjFGOTNCCi06MTBENjIwMDA2QjNDN0ZFNzk1OUZERTgyN0M3MzZCOERDNDEwQ0ZBQjI0Ci06MTBENjMwMDBGNjdFQjAwNUY5RjJCNDE5RjgwOEY2MDMyRkRGRjM0MUNFCi06MTBENjQwMDAzMkQyQ0QxMjYwQzA1ODc5RjI0RTU1M0VEOTRGNjdGN0FECi06MTBENjUwMDA4Q0U4RjdCRUM5M0I5QUJGRTQ1NThENEZGNDc1REU4NjYyCi06MTBENjYwMDAwQzA4RTNEREI2Qzc0MUZCOTlEQkFBNEMxN0Y2NTk0ODE1Ci06MTBENjcwMDBFRkI3NTVGMUY4MTAyNjc1OENCOUM5NjA3N0Q2NjlFNzEwCi06MTBENjgwMDA2Q0JERkJDMTdENDQ3QzNGNURENUMxNkRDNEY3NTI3MDVDCi06MTBENjkwMDAwMkRBREQyN0FBRTc2RjQzRjkxMjNGNEZDNTEzN0M3QkZGCi06MTBENkEwMDAwOEU5Qjc1OTg2QjhEQjM5Q0QwQkI2QzVGMkExNUVCRjI0Ci06MTBENkIwMDBCNjBGRjlCQTdGQjhCNjRFMUIxRjhGMjlERjI5NzE0RUZFCi06MTBENkMwMDBBMDdCOTlGNDY3OEZEQURFMTU2MkU4NjFBMEYxNThERTdECi06MTBENkQwMDA5NEMwMDVCOTQwRjdFNTQ1RTY0Q0VGREQ1RjdDM0RCRDA0Ci06MTBENkUwMDA3RjRGRDUxNUVDQzQzODVDNUZFMERDOTBGMTAzQ0Y5RjMxCi06MTBENkYwMDA3OTM0NzlBNkI1RDNCRkRCODMyMTg2NzZBMUZEOEI0MTMyCi06MTBENzAwMDA2NDI3RUMxRkNFRkQwRjlGNkE3NjAxNzNDMjdBOTFDMTI4Ci06MTBENzEwMDA0MjFCMDNGRjFGRUI4NTgxRTk1RUE2N0RCMzM1NjE1QzhCCi06MTBENzIwMDA1MTlBNDdFMjc0MTMzOTU0NjI0QjMwQkY1RUZENDUyNTcwCi06MTBENzMwMDBGNjc1RUFFRDFGQ0VBODVGNzQ5MzkxQkY2Qjc4MTJFRDdBCi06MTBENzQwMDA2QjJBQUE2QTY5OUZERDA4RjIwM0Y1NDFGQzdDOEUzN0RCCi06MTBENzUwMDAzREEyQTAxRUIwNUI0MjBBRkE0NTFCODdBN0U3QUM4NDM2Ci06MTBENzYwMDA3NjIwRDVDOEVGNjM0RjBBMjk1MkVDNzdDRDFGNjQ1RjRFCi06MTBENzcwMDAxOTUyNzA3RkRCOTg5RjQ5REZGNUZFMUEwNTJFNjc3NUY5Ci06MTBENzgwMDBCRTY4ODQ3RERGNzNFNDE3RjM3QjY2NjA1Q0U5MUJFMUIwCi06MTBENzkwMDA2OUM5RDBBRTZEMTU4QjlBN0M4QzFERjQ2NThFQzI3REU3Ci06MTBEN0EwMDA2RUE4REU0MkU3N0I4RDA1NjJDNjFDQzhBNzc4NkRFNEQzCi06MTBEN0IwMDAxRjZCNzU0NTY3RTIzRDVBNTU5MDQ4QkY4NjVDQ0FENUQ4Ci06MTBEN0MwMDBDOUU4REY1RDM5QTQwM0U1REZDMTNCMkNCNERFMzU5MzQ2Ci06MTBEN0QwMDA0NERBOEY1OTJGN0UyRjc0MDVGNjdGMTdGM0EzNUU2RDAxCi06MTBEN0UwMDAzQkZGN0M4QjEzRTVGMDUxRDhDRkEyREYxMDNCMDU3OUNFCi06MTBEN0YwMDBENDM2RURBQzFERjc3M0E5MTg1NzA3NzRCM0Q5MUNBMTIzCi06MTBEODAwMDA3OTZEQUFCMTUyQkY5QjVBMkRFNTg5RjBGNzdFODY0NDA3Ci06MTBEODEwMDBGNUMzNDIyN0M1MDcwRjY2MTEzQkMyRjU4MTY5MzMzNjUwCi06MTBEODIwMDBFNjQxQkI5QzNDMjZFMzdFN0U0REUxNTk2REJGMTkzMDNECi06MTBEODMwMDBGMUYzMjhERDhGQzhFQ0RBNzk5NjREM0JBN0IyQzVDNjY3Ci06MTBEODQwMDAxNzNFMTJEQTQzRkU0M0M3RjQwODRGQTc4OUU0N0Y4RUUwCi06MTBEODUwMDA5RkM3NTIwRkY3RTMzOTI2Nzc0QzQzM0RFMTI4MTY5OUNECi06MTBEODYwMDA4MEZFQ0QzQzI2RTBCQUU0Njk2RDc0OEYzOUE3ODBGNTVGCi06MTBEODcwMDBEMTlFQUY1QjBFNDBGQjYyREUxRTdENDJGMkQ3NkMzRjU1Ci06MTBEODgwMDBEN0MzRTMwQ0Q3QTIxRjBBQ0FDMzY2QkY3MDM1Q0MyMzI3Ci06MTBEODkwMDA3QzlEMkNBODRBNEZCRDZBMEZEN0FGREJBMEZGMjhDOURCCi06MTBEOEEwMDBEMTMwQURDQjU3MTA4OTIyQkRGOTE2OEI4NEE3QjUxM0EzCi06MTBEOEIwMDA4RkQzQjlDMDAzQzVCQTFGRDU0RkYzRDg1QzczRTQwMDRBCi06MTBEOEMwMDBEQTVGOUJFRjY2NjQyNzZENDYxOTBBRUQzNjVGQzdDMkMzCi06MTBEOEQwMDBGQzNDODk2NUEyN0NEQkI0QzA3MjJEOURFNzE3MDJGQzdECi06MTBEOEUwMDAwNTRBMTNDRUZCNDcxOTM2NUFCN0VGQkUwN0EyNzg0RjQ5Ci06MTBEOEYwMDAzRkM5Q0ZFRkRGNDI5QUIwN0U2RDg2ODlFNkJGQzkxQzczCi06MTBEOTAwMDBDRTQwRkY0ODVGNzQzMTQzQzM4N0FGNEFCM0FCNThDOEJBCi06MTBEOTEwMDA4Mzc4NURBN0MxODdERDM0OTZGQjE3QTQ4MDEyMUJDN0VGCi06MTBEOTIwMDBENUEzNEZCODFGMDNENjQ3NzFBRDgzRUIyQ0E0OEZDNDhBCi06MTBEOTMwMDBFOUQxOTlCOEFFRDQwMjBCQkIyQTA3Rjk4QkMzNEQxREIwCi06MTBEOTQwMDAyREYyQjgzMzE2NkU0MUZFNkNCRDI4OURFMjQ5NTc4QjBGCi06MTBEOTUwMDA2MTBGREQxMzJGQjVEMDc5RjJDMTg5RTJDQ0Y5NTBCRTQ5Ci06MTBEOTYwMDBCRUNFNDI3RTA4QzgxM0JGODQwMkI5QURDODZGOEVDOTRGCi06MTBEOTcwMDBBNUU1RjMyMUJGNDFCNkM4MDhERkRBNDJEOThFNzQ1QzUxCi06MTBEOTgwMDAxQjEwNjUwMUYyRUJDQUY0N0IxMjhDREUzMTI4MzI5OTUwCi06MTBEOTkwMDBFQzA1NTBCRTJENDM0NDFGMkREQjI2MDhDNEVGRjU4MTU2Ci06MTBEOUEwMDBEMkQwMzBGODVFMkZCQjg1NTgzRkMwNUUwREZGOEJCMkUyCi06MTBEOUIwMDBDQkY2N0E5MDZGMDIwRjg0ODYyOTFDOTdEMjA0MjIzMTBECi06MTBEOUMwMDBGQTRCNjZEMUY5MTg3M0QzNUFGRkY4NTFCQTBGNTU2NDYwCi06MTBEOUQwMDBBM0ZCQjNERUJCNDJFNTc0REZGMTIyOEI4Mjc4NkQzQkEzCi06MTBEOUUwMDAzRjc4MTRBREFGQ0VBMjIwM0Y2RjEwQzI1NzIzREY2RjM4Ci06MTBEOUYwMDBCRUUzOTA4QTdFNzVGQkZCNEU4QzFENjZDRUNFNEZBQTkxCi06MTBEQTAwMDAzMTdFQ0M1OTZDODkzQkM3NjIyMkNBNzE3RDVDRTcxQkIxCi06MTBEQTEwMDA1MUEyQTc0RTIxRjhDNzY0RjJGRjE0MzYxNUI4Mjk5RTBCCi06MTBEQTIwMDA3OTAyQzI3M0REQzU2RjE1Q0M0RDQwMTdEMERFOTkzRTJCCi06MTBEQTMwMDAxNkVENjUzMTNBNjEwQ0NBMjlBRUM3OTgyNDY3QzRFMjc1Ci06MTBEQTQwMDA3NzgzMzdGM0NGRTg2N0RBNUEwMkYzQzdGMUFBQkE2RUUxCi06MTBEQTUwMDBBMTc5MDU4RUZDMTRFRDJBRTdCMThGQkU0QzNDQ0ZEN0RGCi06MTBEQTYwMDA0OThGMjQxRjczNDRDNTMxOTgyRTk5NEVGNjU5NkMzRDQ5Ci06MTBEQTcwMDA5MEZCOEREOTgxQkY3QTAwQkVCQjZBQjhEQzZGQkU5REJBCi06MTBEQTgwMDBEMUJCMTNGODU3MTAwM0RGRTY0MjkwRDJGNDAwMDE0MEY3Ci06MTBEQTkwMDAxRUVCMTVDQUU0NDc1RjJEMkE5MTI4QzI3MzhDOERFOENFCi06MTBEQUEwMDA2OTA4MEI5MjVDOEI1RkFGRTM1OEUzMUQxODc3RTRGMEQ1Ci06MTBEQUIwMDAxQkU3Nzk1NkMzMkZGRTQ5RTk3NDVFODE5NjI4QjM2NDRCCi06MTBEQUMwMDBDQ0IxQTNGQ0RCM0Q1NkM5QzBGREY2MDNBRUM0N0FGRTYzCi06MTBEQUQwMDA0RjE5N0M1RkI0NEI0ODZDOUZGRjJEQzNDRUZCMDc1OTk5Ci06MTBEQUUwMDAxOTlENDBBODYyMTRENzA3NzkzMTlEQ0U2REM4Qzk2REM0Ci06MTBEQUYwMDAxNUI5NUM2MEQ3MzBEMjdCMjk0NTlENzY3RkNDNzg0RkI1Ci06MTBEQjAwMDA2QkUzRDAxRkY0MzM0ODZCQzdFNEVFNjgwREFDQkYxNTcwCi06MTBEQjEwMDBBODE2RUZCNUE1NzgzOTFDOUQ2QTBGMUNCMUJFQUNBRDM3Ci06MTBEQjIwMDAwQkY4QTA2NjQ0MzEwMjUxQTZGQUFDQ0M0MkU3MjIyMEExCi06MTBEQjMwMDAwREQ1QUZDNDFFMzgyNDZCRjUzNzREOTQwNDFCQ0MyQjg4Ci06MTBEQjQwMDAxNzgwMjE0MDdERDczNDhCRTExQzQ1QUUzQkEyNjJGOUEyCi06MTBEQjUwMDA0RjRENEM0OTlERDgzM0ZFOTYyMjE2NUUwOUUzMEYwQUJECi06MTBEQjYwMDAxOEUxOUQ3Q0Q3MEIyQkQwMkU4RkE3MDM5Q0MxODU3RUZGCi06MTBEQjcwMDAzMTU0N0M4RUIxNURGQTJEQkRGODgwRTA0OUYzMDREMEJDCi06MTBEQjgwMDAzNEJGQzFEQTJDMDA5NEU2MUQ5MjFFMUY0QkYyNzdCQzA1Ci06MTBEQjkwMDBBOTQzNDU3RjI4MDYyNEVEODVGOThGN0NGMjhEQzA0RTgwCi06MTBEQkEwMDBDODM3MDczOTlGMjUxN0JDQjAwMkU5RDI5MUM5RjFGNEYzCi06MTBEQkIwMDA0N0Y0MkQ0M0ZBMDg5M0ZGOEU3MTNCNkE5NUE4MjAzRUU3Ci06MTBEQkMwMDBCNjQ2NzM0OThGMzczMkE5MENGMUQ0NTg3OTQ0NDRCOTE5Ci06MTBEQkQwMDBCRTY2MEZGMzBCMDJEMkZGN0Y1QjYzRTc3NzUzNDYwRUZGCi06MTBEQkUwMDBDN0JCQTQ5MEZDOTM3Q0ZDRkVFODlBNDJEMTgxRjJGNTdECi06MTBEQkYwMDBFMDFEMkY5MERFREI3MjQwNjRDOEZGQTVCRjNERjZCMDhDCi06MTBEQzAwMDAwM0U5RkFDRjU2Q0EzN0JGNTI0OTcyRTMyN0QwNEU0REM3Ci06MTBEQzEwMDBFMDNGMUY0ODJGQzdEN0NGNUJEMjI2RTBGOTQ0RjZGQzgwCi06MTBEQzIwMDBDODJCQzM1MTNFODcyNEZGNTU4ODhGRjkxRDAxODQ5MzZCCi06MTBEQzMwMDA1MkNDQ0ZEOTlDRDNBM0Y0NEU4ODgyNUEwRDZDNTIyNTc2Ci06MTBEQzQwMDBBNEE1Q0RCQzlDREQ5NDRBRkJBOEQxRDZDRTg2NkI2MDQyCi06MTBEQzUwMDA3RThGM0MyOTMxRDQ5NzI2NkIyNDYzMUVGNDZCN0FEMUQ2Ci06MTBEQzYwMDA4OTlBQTBEN0ZFRTg5MUU5RDEwQzk0RTM0OTk1MTQwNjZFCi06MTBEQzcwMDBERDZCN0U2RjY3NzAzRUY0NEQ1NzVFMUQwRUZEQkEyNjVDCi06MTBEQzgwMDA3MzU4REE0MzQzMEVBMEJDNDQ5QjE5RUY1NTM4NTRBRTg5Ci06MTBEQzkwMDBFN0Q2NDlFMTAwQzY3OUFGQkIyQjY4QzFGMTk5QjY3RkUxCi06MTBEQ0EwMDA2OTVDNTJGMTM4QzJGOTg0QTZGNzU4RTU3QzdBQUZDNEIyCi06MTBEQ0IwMDBBN0YxOEJBMzhBOTUyNERBNjczREUwNDlFMkYxMkRGN0JECi06MTBEQ0MwMDA4QjA3OTAzRjdDMDE0NkZBNDNBRThBNDQ0NzY4N0ExOTM1Ci06MTBEQ0QwMDAyNzJFREZGNzVDMjNFQTE3RTc2MjkxRDZCMTRFRUFBODU4Ci06MTBEQ0UwMDBDMTc3MjVENkREQzVFNDFBQTU3NzdGRkY2OEZCRTUxOTY2Ci06MTBEQ0YwMDA1NjdFMkU4QTM4NEVFQjU5MDdCOUU0NDBCRUY5RTYyNzI2Ci06MTBERDAwMDA1RTQ3MDhDNzFEREZCMzhFMjQ3RDFEMDU5RDk0RDdFN0IwCi06MTBERDEwMDBCMTJEMTBGOTVBRjNEOEEwQUQ2MzREMDY3RkE3Qzg1MUI1Ci06MTBERDIwMDBEODQ5RUZCM0M0Q0JGQjk1OEU3N0U4RkQ5ODMwRDhFQTlECi06MTBERDMwMDAyNkJBOEYxNkI5MDZGM0NBQjMyMkUzRjdCNThDRkNERDE5Ci06MTBERDQwMDAyQkFGRDE1NUZDNzc4NUM1OEM5MzgzNzRDN0YxMEM3NEM4Ci06MTBERDUwMDBBN0Q5NEZDMDc3MzYxNDAxQTJGMjE1RjkzMTQyRkM5REM0Ci06MTBERDYwMDA5QzM4N0FGQ0E3Q0JDNUQ4Nzk0M0ZGQzkwRDRDQTBCODI1Ci06MTBERDcwMDBCOEM1NEMyOUNERTgyRDE3OTkyNjE3NkQ0QzhEQTJGQ0ZFCi06MTBERDgwMDBGQkJGOTY4QjIwMDc0OTJFMzZDMzRBMDdDMzRFMjVCOUUxCi06MTBERDkwMDBCREU5MEVENEUzQkEzQzFDOEYzOEMxNzdBMjU0RjM3NUE5Ci06MTBEREEwMDBBNTg1QjQyRkEyN0NEMUMzQUYzNkQzN0I0M0EyNzZERTQ4Ci06MTBEREIwMDBBNUMxMDVERDUwMDg5N0NGM0Q4QTQxOUYzRTg0RkY4MDc1Ci06MTBEREMwMDA3NUVDNkU0RkJEQjYxMEM2REI1ODlFNUI4NEZCMEI3QkJCCi06MTBEREQwMDBFODQ1QjIwRjdDODUzQzdFQzU1N0M1Q0ZDRjFENzk3MzEyCi06MTBEREUwMDAxRjhGQkQxN0I3MzBDMzQyRjRCNzUwQTdCRkFBOTAwNzIzCi06MTBEREYwMDBDNzU5ODdGREEyN0NDRUIzOTBCRTdDODQ0NUI4M0VENDgzCi06MTBERTAwMDBFQ0QzMTY4RjE2NDdBQ0QxNTUzQzlGQzRDQkE3NzFCRjNFCi06MTBERTEwMDA3Mzk3QTI3Q0NGMTBBQzMyRUVFNzUwM0YxRjRDMzdFQTJECi06MTBERTIwMDA2QkE0MTc1RDVGQjc3NEFDNzRBMTNGMkM0N0YzRjdFN0ExCi06MTBERTMwMDBEODhDNzEwRTQ1OTk1QzVGN0ZBNUY5MDE1NjhCOTVCNDFFCi06MTBERTQwMDBERjU0NEI0NURBQzdFOUY0Nzc0MThGQzdDMTMxMUU3RUY1Ci06MTBERTUwMDA0OEE4QUIyNjUwN0MwQ0U1NTM0QUJBMTlGMkVGNTYyMDdECi06MTBERTYwMDBEOTBENTA2NkNCNTAzNEZCNDAyNjM4QjdGRTU4MUM4QjdBCi06MTBERTcwMDBGMjcyNzc3Qjg1MURGREVCODJDRjc2MzVFRTBGRDcwQkU3Ci06MTBERTgwMDAyQzhBNzI3MzdEQzlFQjE0NTdEMjU0MDUzREMzQTI5Q0YyCi06MTBERTkwMDAwNUUyMkNDQjk4REU3ODA2M0VBNkZEQUE0M0I1NzZBMDE3Ci06MTBERUEwMDA1RjJCMTI2REEzQjg4NUE2RjBBMTk5OENEQkIxMENFM0IyCi06MTBERUIwMDA1MjlBMEE1NjY2MkU0NEY5NUU1MDU2OENGODZEQURCN0VDCi06MTBERUMwMDA1MERDOEM1Q0MwMTJGQTExREVEN0Y2MzFERjU0OEYzOThBCi06MTBERUQwMDBGNEZERTVFMkM0RkJDQTZCMzJGOUZFMzYyMjgxQTg4MjZBCi06MTBERUUwMDBGOTY0MTU4ODdFRTRGRkFDM0E0QkMyNzk1Q0FBRTEyOTVCCi06MTBERUYwMDAyRDkzREYwRjZCQUQzRjk0NDFFRjYzODk5NTYxRDYxRjgyCi06MTBERjAwMDBCRTYwRkEyQkQzNjNGMDMxQTkwRjdDNzg3NDdDNDgzQTU5Ci06MTBERjEwMDAzRTVDQjM4ODBGM0IzQjQ0MkU2RjQ5QUZBRDYzRjJDREZGCi06MTBERjIwMDBBODFGRDU0QTBCRDlCMThENjZCRTJGNkYyQkQ0Rjg0MkVFCi06MTBERjMwMDBCNkI1MjJCMTdENTNCQTRFNTkyMkQyM0QxQ0VGNDQ5MTYxCi06MTBERjQwMDBGNjg5OEVDNUNGNTE1Q0QzMjNBQ0ZCMTU5NDc3ODA2M0UzCi06MTBERjUwMDAxQTJGQkU3RDc5QTZBOEMxNTExMUZDQjQ5RkU2NzgwNEEyCi06MTBERjYwMDBCQ0QyN0MzNkU3QTdCN0M2RjJFOTAzOUExREZEODA4N0NECi06MTBERjcwMDBGM0U5RTZGQTg3ODg0RkJGRUUzQzc1Qjk1REFCRDlEMUJFCi06MTBERjgwMDAwQjAyNDEwQkFBMDM1NTI4OUI5QTgxRkFGMzMxRTY0NzBECi06MTBERjkwMDAzODMxOTM5M0VDRjIwRkIxNDk4QzVGRjZDRUFDRTBDMjBFCi06MTBERkEwMDBDQzk4RjM0NTM5NTA0OUVGMTY1RTg5RUYwQTQxRkIwRkQzCi06MTBERkIwMDAyMkZDM0VFODA3OTFFNzRCRThEREFEMjAyMzY2NUVDMDFBCi06MTBERkMwMDAzQTA0NjI3MjkwQTFEQjIxRUY5MTIyNTRFRTk5MEY3MzEzCi06MTBERkQwMDA3MUQxRUQ0OENBREI2Q0EwMTc2MTQyQTdBQkY5RkQ4QjhDCi06MTBERkUwMDAyRUVEQkRDOEM3QjVGNzIyM0ZDNkY3MjEyMTFERERCMjEyCi06MTBERkYwMDBCQUY0MTExQzRGOTE4MjI4MzM0RUUyN0I5MTc4RkY3OTVECi06MTBFMDAwMDBFMjVCMTQxNzdEMEE2NDZEOTMwQkUzNjE3RTU1NDJGNzYyCi06MTBFMDEwMDA0RkVFNjVCMjM4MDlGMzZCNEIzMUVFRjlDRTk3QUNEQUJGCi06MTBFMDIwMDAzREM5OEU5NTc4RUZFNTUxMTFENjBENkRENjQ4QTBFRjFDCi06MTBFMDMwMDA4NzYxNTE4MzUwMTk0M0M3QkIyRUVENDhDMTczQkVEM0NFCi06MTBFMDQwMDA5MTFCRkJGNTFGRTNGRDQxN0EyRjMzOTNFMzY5ODM2MzUzCi06MTBFMDUwMDAyOUREMkY5QkVCOENGQUIwRkQ4MURENEYzQ0JFMDlDNjVDCi06MTBFMDYwMDBGQjc4QUY4RERFMzVEOUU4NThFQUMzRjI4RjFGN0VEMzM3Ci06MTBFMDcwMDA4N0ZBRTJGNERFMzcyRDg5Q0UyNzk3NDg5MUE5Nzg4RjY5Ci06MTBFMDgwMDA2Q0IxM0E4OEFEODRGOTk3NDQ2NjU5MjhGRTY0RTcwMTdCCi06MTBFMDkwMDBCQTlGQjY0NDBFNUFCMEZGQzUyREJCMjkzRjY1RTcxRjk2Ci06MTBFMEEwMDA3QzU4RkU2NjI2RDcxM0E3MzM4MjNFRjQ0QkU0QjU1ODVFCi06MTBFMEIwMDBBMzIyRTg5RjVEQjlBMTg1MDlDRkQ5MzM0NTZEREUyRjM1Ci06MTBFMEMwMDA1MUZGMUIxRDJGMUQ0MkJDOUM3RUQ4NEE3RUI3MDMwRkZCCi06MTBFMEQwMDBGRjk2RkEzREI1Rjc0NTlBRUZDN0JCREVCQzE1RURFOUYzCi06MTBFMEUwMDBDNThDRjk1MTlFOUZCNjZCN0UzRDVCNDc0QUVDRkU3NjMwCi06MTBFMEYwMDA5RjA2MEYzRDdGM0E1OURCMDc2NzBENTA0RjNCOEY2MUZECi06MTBFMTAwMDA0RTgwM0ZERDFGRTg0OEMxRkI4NTFGOUI4MzE2ODRDN0Y3Ci06MTBFMTEwMDAyMjg0MDdBNDI1MDAwNzk0RkI4QjIyMDJDRDczNTE0QjY4Ci06MTBFMTIwMDAyQkREQjc1QUI0ODdGQjA3MTcwMUJDMDgyRTJEMDc2OEYzCi06MTBFMTMwMDBGRTQ3MzJCOURDMzhCNUY3OEYzRTdBOUY2MjhGOTVGNjhECi06MTBFMTQwMDBDRkZBQkExNzM5ODMzRTg0OEZCRTVFODAwMzVGRjdBRTg1Ci06MTBFMTUwMDBBRjg3QTdCOTNBOUU1QUZFNDBGMzVBQkM4N0NGNkJGMUZFCi06MTBFMTYwMDA0RTNFOEZCOTdCMDA0RjRFQzREMzJDQzJGRkE5QkQ0QzhECi06MTBFMTcwMDBDMTdCMzA1REJCREYzQzg5RjZDQ0U5QkQzNjA1RUQwQURECi06MTBFMTgwMDA3RDVFNTkyMDZFNTNDNjIyMUY3MTdEQ0NGNjA4QTQ4Rjg4Ci06MTBFMTkwMDA5OUQ0NDFFNzM5NEI2NDU5QzZGNzA5MkU5NDg3MkQ2MTBDCi06MTBFMUEwMDAyRTRGM0I0QTg3NDJGOUQzMEY4QUY0OEUyNTkzMjMyM0JGCi06MTBFMUIwMDBEMUJGRkE2MUE2N0VGRkE3QzM4NzdFQjE1RDk3ODY4ODJGCi06MTBFMUMwMDAzRTNGNEFENkUwMkQ3NUY4MzA3RTY2QzNEMEUwODc5OTkxCi06MTBFMUQwMDBCMUY4NzhGN0M1OTFCOEVFMTVBNkNBREY3QTcxOUMyNzE5Ci06MTBFMUUwMDA3ODdDRThFN0I5OTU3RkJEOUZFNjNEQ0M3MERFMTg5RjRGCi06MTBFMUYwMDAwMkRDNTJGMEZDQkI0MDY0NDFCQTk3QkNFN0U1QTREODBFCi06MTBFMjAwMDA3M0U4MkYzM0I5QkVEQUU4Nzg4N0VFMjM5RUM2RjcxQzkxCi06MTBFMjEwMDA2OTNFMTE4QUQzMUExRUE4RjBFMTM5REY0N0NDMTlDNDMwCi06MTBFMjIwMDA3M0Q5OEYxRjdCOTlFMjZEQkEzMjc0RkY1MzA3RDUzQkM4Ci06MTBFMjMwMDBCNUU3RTU1NDRDMkJCNDc4NzgxNkJFOTFFNDE4QzBCMTFDCi06MTBFMjQwMDBDMTM2MzY5MTdDRDRFRTE3ODVGOUJEQjEzMzAyMDg0QzQ2Ci06MTBFMjUwMDBENDEzNUI3NDM4NTc1QTY2MThDRTc1QjgxQ0NEREE5QzQ3Ci06MTBFMjYwMDBEMzRFRkU5NjcwRTJGQjY2RjFGMjM3RUZDMTQ5NzRBRTExCi06MTBFMjcwMDA3QzhFMjUzRTU3NjY1QTlDREMwQTUzMTJDNURGNkM3NEFGCi06MTBFMjgwMDBGQzhDRUVERjU2QTk1NjE5RUZBRjFDRDdFNEUyN0JEQTFGCi06MTBFMjkwMDA3QjBCOUYyN0E1QTgyMkQwQ0RGMzQzODNERUExNjlCREM4Ci06MTBFMkEwMDBFRkUxNTZBQzU5RTI0M0Y4NTZFMEI5MDc2RDZBQjY1RDQ2Ci06MTBFMkIwMDA4N0YxODQ1RDY5NEM3QjlGOTQ0NTA5N0U2NkJERkM1RjU4Ci06MTBFMkMwMDA3OEI5OEJFNzhCODczRUIzMTZFRDEzODQyRkI3NTMxRkI2Ci06MTBFMkQwMDBCRDBFRTMxQUJCNzI3ODc5MTk5NjQzN0U1NjY2NTlFMUYyCi06MTBFMkUwMDA1MEVFMzcxMUU4MUM4OTk5NUQ1RDM2QUVDMjEzQzFBM0FCCi06MTBFMkYwMDAwNzJFMTJFQkQyRUQ2QUE4M0M3QjI4MjNCODQyN0YxMzhECi06MTBFMzAwMDA4NkQyQkUxRUZBMUJGREVERkIwM0JDQUJCNkQ0RkY4NTY3Ci06MTBFMzEwMDA3RTZDRkY1QkZENDQ0ODJGODk0MTdDRUIwQUJFRjlCOTU2Ci06MTBFMzIwMDBGRTdCQjQ5NEM5NERBRTZGREZGRjNGREE3RTg1MjkyMEI2Ci06MTBFMzMwMDA3RTg0NzQzODQ4MjRCQUQ3RjlCQUVCRTExMTQ1QjhGRkE2Ci06MTBFMzQwMDBCNzM0REMxMTQ1QjVEOTk1NUM2QUM5ODBFRkU3MTQ3RTE2Ci06MTBFMzUwMDA3RTcyRkI4MzFCMENFRkE4RUE2OUZDN0JCNUZBMzk5RTQxCi06MTBFMzYwMDA2NTk4RjE3Qzc2RDU1MDJFOEY1NjBERURGMTEzRTJCOUZDCi06MTBFMzcwMDAxQzFFNTdEMUM2MTlGRTlBRDMyOTE0ODZEQkU5QUM1MjZDCi06MTBFMzgwMDBDNEY4QzM4Mjc2MUJCREQ3N0IxMTAzNDEwMUYzMUZDNUJGCi06MTBFMzkwMDBBMjIyRUFFRkQxQUM5M0YyREY0MTEwNDBCRTg4MjkyNkQ5Ci06MTBFM0EwMDBDQzhGNjNERDNFNjkxODlFM0Y0NzU3QTE5RDc2QzQxRDAzCi06MTBFM0IwMDBBQzQzQkFGREVDRTE4RTc3MDQyOEZGNDk2NkYwOTc5REU3Ci06MTBFM0MwMDBFOEVGMUNDQUVENTQyNzk4ODU0OENGMzJBNjQwODdBMkIzCi06MTBFM0QwMDA2M0JBMjc5MURDQkYwMDRGNTkzQTE1N0JERTc2ODMxNDcwCi06MTBFM0UwMDA1OEM3RjkyMjRCRUU3MkY0QzA1OTk3MDcwQkI1Rjc5NzRGCi06MTBFM0YwMDBGNEY2Mjc5RjdDMjI5N0RFMURFQTc5MDdCQ0RGRkJDMDdECi06MTBFNDAwMDA3M0FCMTYzQ0Y4RDhCODdFQ0EzNTM5QkJBQjI2N0M3M0UzCi06MTBFNDEwMDBBQ0JFNkZEM0UwQkM3REE4NjhCMDBCNjE1NEIyRTM5RTg0Ci06MTBFNDIwMDBCQTgxREI0RkJCMkUwREFDN0MxNEU1NkQ4Qjg5RjZEMzI2Ci06MTBFNDMwMDAxRkI1RkM5MUJGODc1M0M2QzhBRUVCNkJEQzhGRTJGMDEzCi06MTBFNDQwMDBGRUQxRjYyNzMyRjk3OTQ3RDhBMERGMTczQ0ZFOEI5MTMxCi06MTBFNDUwMDBCMUYxOTYwMDY2QzUzRDgxQkZDMzQxNzgzRkU0NTdBRDM5Ci06MTBFNDYwMDAyNkE0RDIzMkYyQzc1ODU4MjU4RjUzQzFGOTBFQzNGN0VDCi06MTBFNDcwMDBCODIyOTQzQTU5MDdBNTI5QUM5QjUyOTlDOUU0OUY0RUZBCi06MTBFNDgwMDA2NTdFNEFEREFDOENEMjc0NTYyOTcwRkIyRTQ0NjkyNjE5Ci06MTBFNDkwMDA4QjUwOUE4NUY2MjlGQTdCNTgzN0E1MEFERUY4OEM4OUM1Ci06MTBFNEEwMDBERkM4QzUxM0QzNjFGOERFNkUxOUZGMUUxNzFGMjQyMUM0Ci06MTBFNEIwMDAxRUM3MjU5MEU3NzE3MTQxRDI4RTJBOTJFNzE4MTc5NEYyCi06MTBFNEMwMDBFRkVFRkQ5RTgyMkVCRjM3MEMyREZEMTNDQUJGRTc4N0VFCi06MTBFNEQwMDAwNjhFMjBGRDFDN0VFNjU1N0VCRjYyQUQ0MEY2RjUwOTM2Ci06MTBFNEUwMDBGQjc0OEIwMkE4N0IzQTM1NDBFRjgwQTgyMjJCREIwRTExCi06MTBFNEYwMDBGQTdEOEVFRUZGQzczRjNENEUxODgxRDk2QzNFMTUxQjRECi06MTBFNTAwMDBCRkMzNkNDRTAyM0MyRjlFQUQ1NTlEQUQ5RDgzQ0NENjM2Ci06MTBFNTEwMDBGQzIwRjhDRTE5QkZBN0U3QTdGQkY2QjNCNUYzODdEOTYwCi06MTBFNTIwMDA3MUZFMTcxNkIyMUFGQzI4MkFGRTAzRDYzMTNCMjREMEZFCi06MTBFNTMwMDBCOUMxRUNBNEU5MkY3NUIyQkVFOTI0QTYzRkJBRjc1N0RBCi06MTBFNTQwMDAxMUU3ODcxQUQwOUYxNTk3OUYxM0RGREUyNjMwNUIzQUJECi06MTBFNTUwMDA3RUU3RjRGNEY0NjUwQUQ5NzVCQTNGMEIwODRFQTE3NjRDCi06MTBFNTYwMDAwREQ2NzdDOTJGMTRCQTMyMTAwQkE3RTQyQ0JFNkZCNUE1Ci06MTBFNTcwMDA4N0FFNEE0OUY0RUU5MjlFQ0UwMUZCQ0M5Q0RBQkIzREJECi06MTBFNTgwMDBFQzA4NURDOEY3QkExQ0Q2RTkzQzA3MzdCNkM4NDcwNUEyCi06MTBFNTkwMDA5Njg0RUZBRUVBRTkxQTREREYzN0REMUY2MjM4NkY3QkY0Ci06MTBFNUEwMDBGNDFFN0E4RkZBNkVBRjRBQkU1QTVCNjE5OEVFMDcyNDZBCi06MTBFNUIwMDAxNTg0M0Q2QTgyRjkzNUUxM0JDRUMwNUY0REM5QzY3MzEzCi06MTBFNUMwMDA5M0M1NTk5Q0ZGMTc2N0YxRjNERDQzMTdBNTk3RTI3OUNGCi06MTBFNUQwMDBGNjZBODVCRkVCQkE1QUUxQkY0N0IwM0E2QkEwRjdDOEZECi06MTBFNUUwMDA2RDg2N0JGMkFCMDY2RkE1Nzc4MEVDNUY2QzYzNjg0RjNFCi06MTBFNUYwMDBEQUE1QzRGNzUyNkVEMkUwQkE0MUFCQkY3MUYwNTZGMjYxCi06MTBFNjAwMDA5MzM0RTRGM0YzRkRGOEZBMDdGMjFGQTJGNzFGMUI3MzJDCi06MTBFNjEwMDA2MEJGOEJFOUZEMkFGNTVGOUZGRjUwMzlCNkI3NDUxQkY4Ci06MTBFNjIwMDAwREY3Nzk3Rjk0QzVFNTlBNkQwRkE3NDc1MzlFMjU5Q0ZBCi06MTBFNjMwMDA4QkY0MjA4NTI4QkU0MEFGRDdEOEM3NzlEMkI0MkNBRTkyCi06MTBFNjQwMDA4RjlBQ0M2MUJBMjdEM0E0RDk0MzhCQjMxQ0VCQzgyRkM0Ci06MTBFNjUwMDA5N0Q1NzYxNEY5RjU1QzFFQTNGMzQ2N0JGNDQ5M0E0NzQ3Ci06MTBFNjYwMDBCMDE1NTg5ODVERDA3RTBGMDBFMzNCMEEyMzg0MUY3NEQ5Ci06MTBFNjcwMDAzNjQ1MEQ3NDFCRjNFRUJEQTk3N0ZGNzU1Rjg1M0NCODc5Ci06MTBFNjgwMDBCRUM2OUMxMDhEM0ZEMDdBMkZENUUwRDlBOEU5RDc0NkQ5Ci06MTBFNjkwMDBCQkYxMUM2REFFODZFRjJCNzVCOEVDNjcyNDRGRkE4MTg5Ci06MTBFNkEwMDAwQkQ5N0JEMzM2RTc1RThGRjNCMUVEMUIxMDhFODZGQTY0Ci06MTBFNkIwMDAzOUFDN0M1MDIyN0U4OTk3RkZDRTQyMzFFRTFEMjU4MUY4Ci06MTBFNkMwMDBFNjc1NkU4RkEwQkRCQkM4REZCMUU4QjEwMzIyMTZFQ0MyCi06MTBFNkQwMDBGNzVGMzc1NzFDQkMxQUU2QjMzMEU4MEM2MEZDRTQxMzU0Ci06MTBFNkUwMDA5QkRCRTg5RUZFQTIxN0NEMTQ5RjMwQkM3MzE2OTc4MzY4Ci06MTBFNkYwMDAyREZDN0Q0NUZEN0RBMzhCNUFBQzg2RjdBNjk2QjA5ODgwCi06MTBFNzAwMDBGNzE3NjFCQzQ1QzczRTNBQzZFODlFQjFGMUJCRkU2RTQ1Ci06MTBFNzEwMDBDMDFBRkM5MDIwNEUyREZFREQ4MTc1NTk3REJDM0I1MDBBCi06MTBFNzIwMDA5OEQ4NEYxM0ZGRUVDMENFODg0ODdBNjMzOUM2QjFEMjZECi06MTBFNzMwMDAzRTYwNkIyOUVFN0JBQThFMDlFNDM3RThDRDg3Q0E5NjQ2Ci06MTBFNzQwMDAzQzczNEM1RUYwMTMzREFBQzk0OTgxRUQwOUY4RTk0RkNECi06MTBFNzUwMDA1RTRFMEZCQkYwNTA4REVDRkVGQkQ2NDVCMzMwQUQ2MzgzCi06MTBFNzYwMDA3OERFNTQ3Qjk3MjRFM0I5NzY2RDM4ODlFRTk3RDRDQTY2Ci06MTBFNzcwMDA2MjE4RTM0NkJDQzlBNTM2RjQzRjMyOTcyOEUzM0RCNDlFCi06MTBFNzgwMDBBOUE2Qzk3NEVGQzk3MkI3MzQ4RURFNjk2RDVCRDg4MUYyCi06MTBFNzkwMDBGN0VBNkEzRDEyNDMzRUY2QkE3ODFDMDFDQjEwRTk3REQ4Ci06MTBFN0EwMDA5QTNBRjk3NUQ3NkNEQ0M3MzlGOTNEQkQ2Qzk5ODUxNTc2Ci06MTBFN0IwMDAwMUVEQkEwMEMzRjM2NUQ4QUM1NDQ2QzFGNEYyMEE4MTQ2Ci06MTBFN0MwMDAyOEJFNzdDNTI2NTlFNUVERkM5RDk5RUI4QjI2OTAxRjU5Ci06MTBFN0QwMDA5OEZFMEVCNDRFOERGRTFBQzcwOUQ4Q0ExMEZGNTNFRTJDCi06MTBFN0UwMDA3NjkzM0QxOEY2OTgxOEM2MDExRUNGQ0EyMTM4NUE5MjYyCi06MTBFN0YwMDA0QkEzNkZFM0ZDNjYzQUM4QjcxQjU2QzU1NEM0QzMyQjgyCi06MTBFODAwMDBBREFCNjY1QzA1REZDRDYxODlFMjFEMEFCRUFDQkRGOTJBCi06MTBFODEwMDAyQTY4REZERDZBQTFGQjE2M0E5Qzk0M0FDOUYwN0U4MzMwCi06MTBFODIwMDBFRjNFNjNERTEyRjc1RTg1QzQ2MkNBMjFGRkM3MkNFRDlFCi06MTBFODMwMDA3QzkyOTVCMzY4NkMxQ0FGM0JDMDBGREQ2NTI3QkQ1QjU4Ci06MTBFODQwMDBENzA5RkM0OUU3MUY1QUZFNEY1QTdFODczOTQ0NzhERkMzCi06MTBFODUwMDBGMUI2NDBGRUQ1ODNBRDczQjM0OTVFM0E5NjZFNzNFMDcwCi06MTBFODYwMDBCRUYwMjgzRkM3RUM0QjNFM0Y5QUE1RThFRjdDRDhCNUY5Ci06MTBFODcwMDA3NzJBRUNFOEY3OEFBN0E3QkE2QUU2QzczODQzNUJCOEY1Ci06MTBFODgwMDAzRDY5MTRFMkY3QjA5OTdFM0ZBMDVFOTM4RjkyOTNDQkRGCi06MTBFODkwMDA3MTlENkVFMkQzRkEzOEZBQUIzN0ZCMEI0MjUwQkZGRUU0Ci06MTBFOEEwMDA0QjkzQjY2RjNDNzk3RDc0MzI4NjNEMjhCNEFGMzY2N0EyCi06MTBFOEIwMDAzMTNGQjI4N0Q5REQ5MTI5QzMzQzQ2QkQ2OEYxRTNFRjEyCi06MTBFOEMwMDAzMzRDN0RCNjcwMTBDQUY5NTEyRkNGMjRGOTg2NzA0MkFGCi06MTBFOEQwMDA3QzQ5NTUxNjNGREFDOUQ2MkFCNzVGMUE4N0Y1OUM0NDlBCi06MTBFOEUwMDA5NzY3OUQxNkIyODdBNDJBNDc4OEVDQUZENjA5MUUyNUU0Ci06MTBFOEYwMDA3NjVGNTEyREZCMjUzM0ZFNkU4RDhERDI1NTdEQzhGQjg1Ci06MTBFOTAwMDA2Qzk3NTg4NjdFNTc4QjY2MkZCQkJDNUM5RUJBQkMwRTNDCi06MTBFOTEwMDA3RUJFQThBRDczOUJBNENFNDA3QURFMDY3NDgzNzEzN0E5Ci06MTBFOTIwMDAwN0VFRTNGNEJEM0NDMzQ2N0E3M0Y5MkJDMzg2RjRFN0U0Ci06MTBFOTMwMDAxRjdDQkNEQUUzQ0YwM0MwNkVCREFGODJGQ0I2MjVGNzA3Ci06MTBFOTQwMDBCQ0Q3ODg3NEI3M0NEOTI2MjMxRDlBNTI4NjZGOUM4Q0ZECi06MTBFOTUwMDA3NEZGQUE5OUVFNzlENjI2NEY1MDY2QzdGNDY3NEE5OTk0Ci06MTBFOTYwMDBFODQxNzg5ODQ0MzUxM0U5NzlGODk2NURENzRCOTM5MDUwCi06MTBFOTcwMDA0RUQ0NEQ3ODlGN0Y4Q0Y3NUZBRTk3NDBCRUVDNDg1NkUzCi06MTBFOTgwMDAzM0YxQkM2QzgyRjc2MTlFNEY1MzM3MDk1MDdFOTk3NzAzCi06MTBFOTkwMDAwQkNGN0JENTRDMTFGMjUzQkRBRDNDOUZBRjZFQzJGQzhCCi06MTBFOUEwMDBGNURFRUQzQzNGOUFFQkEzMUY3ODlGMjQ3OTVFNkJGNjcyCi06MTBFOUIwMDA5N0EzN0ZGQTE5OTg3RjYxM0VCRTkzQ0FEMzcyMEQyRTNBCi06MTBFOUMwMDA3QUY5NzNGOEREOENFRkFBRjIzNEJFRkMwNUFERERCRTNBCi06MTBFOUQwMDAzRUNBN0ZBOTk1RUZFRkEzRkY5N0I0NzZEMTNFREExRjI5Ci06MTBFOUUwMDBENERBQjVGN0QxRkU5MEQ2RUU3MDFGRTVBRjZBRTVBRjg5Ci06MTBFOUYwMDBGNUQxRkZCRjZCRUQzQUZBNjhGRkJBRDZFRThEM0VEQTdECi06MTBFQTAwMDAxRkQxREExREVEQTNGQzJEQURGQzU4NUNGRkVGNjhGNUJFCi06MTBFQTEwMDAzQkI1RUZCRUU0ODZCN0QwNUVGMzgxQkM0Mjc5NTI5MDNECi06MTBFQTIwMDBEQzQwRkVBRUFENTVDNTQ0RkZCNUUzQjlGRUQ3RTlERDI4Ci06MTBFQTMwMDBBN0REMEJFOEYwRjJCOEQyMEUyRkI3NkY5NjZCNzQ1RUJECi06MTBFQTQwMDA3MjRGREVGQUM5NDg4N0JGRTNGNzE0NDE3RjFDQzU3QkNDCi06MTBFQTUwMDBCOEVBM0QyMkY5Rjc5NkJGQzJERjk1NTk3RThGNDRFN0E5Ci06MTBFQTYwMDAxQjNBM0RFQUVERjVGOTg3QjU3OUQ2NjlFOTQyMkY3RjgyCi06MTBFQTcwMDAyRjIzNDdGNUY4QTdDN0U4NDdCMzZDQ0NEQjgwOUYzMDVFCi06MTBFQTgwMDBGRUJGQ0VDREY1NENDMTNEQTUwRDc4NkU1MjBCN0EwNjdBCi06MTBFQTkwMDBENzU3RUZCNDQ0RDFGRjU1MkY0QjU0NUVFNzJFMERFMTBECi06MTBFQUEwMDA3OUJGMkE0QkE0ODdFQUREQTk1MTdDQUZCOUFFQUVEOEI1Ci06MTBFQUIwMDBGMERFNjc5RDJDRDFGQjMxOTI2QjhBNkRCNjEzRTVDNkYzCi06MTBFQUMwMDA3NDE5RTU2NzFEOTM1MzRCRTg1QzBERjY2OUE4NEZBQUNFCi06MTBFQUQwMDA0QTY1OTQzQjM5MkU3NzJBQ0FFNTVCQjNGOUJBREE5M0QzCi06MTBFQUUwMDBCQkVDNzg4RjQyQkE1RkE0QjcwMjg2Q0IxMkYxN0I1RTkzCi06MTBFQUYwMDA5RDE4NTY2MDFFRURGMjcyRjJCRjZFNkZENkNFMTQxOURECi06MTBFQjAwMDAzRjRGRDRFNUZDOEU5RjREMjUzRDU2MEI3QTRDMjEzRDYxCi06MTBFQjEwMDBDNjA2MTVBNUY3RENERjk0OEU4REIyQTBERTkyMzM0RENDCi06MTBFQjIwMDBDQzBDNzJGOTgwMzc5NUM2RERGRTIwRDc1QkY5QTBCNzEzCi06MTBFQjMwMDBGMDlEQjU2REM1OENCRkYzRTZCMTkxNUZCNzQyNjI5RUEzCi06MTBFQjQwMDBDMTMxN0VDQzAzNUU2RUM3MzNEMzc0M0ZFRUIzRjNGMUI1Ci06MTBFQjUwMDAzREM0MThGODBFMEIxOUY1NTZDRTAwN0EyQkJCMEFFNDBCCi06MTBFQjYwMDA2NTRDN0RBQjQ3MzZFNDlGRjI2QUVGQURGQTk5MUZFRDM1Ci06MTBFQjcwMDA5QkE5Q0Y2RTI2N0Q3MjE2RjUwOTQzRkRGMkVGNDlBM0RFCi06MTBFQjgwMDA1MEJGODAxRUIxQjJERTcyNTA5N0M3QkFEREEyQ0JFOThBCi06MTBFQjkwMDA1QTRENkZENEM2RTk4RDgxRTVFRURGNUYxOTQxRjQyOTQ2Ci06MTBFQkEwMDAxQURFQTFFOTRCRkUyRUM3MzgwMUEwNEI3MzUwMjBCREUxCi06MTBFQkIwMDBDMkE0MjBEREVGMUYwODZFNjY3Mzk5OENGNkY4NDBGMDUyCi06MTBFQkMwMDAzM0E3N0RFQTQyMzk2RDBFNEFGRUY3MTJEQzkzMUEwODJDCi06MTBFQkQwMDBCRTdBM0Q4QjZERTgxNkQ0NkI5RjFFNUI1MTgwN0VBRjc1Ci06MTBFQkUwMDA1NUU2OEU1OTNCOTE2RTg1NDE3NEJGNDNEMUZDMEU1QjU3Ci06MTBFQkYwMDBBQkY3QjExM0Y5RjhGQjNEN0ZEOTVDODdCRjhGQzUwMjM2Ci06MTBFQzAwMDAzMkY5NEIzMjRBMTU2QzY3ODc3REZBNjBCMkUzRjg3RUMxCi06MTBFQzEwMDA5M0M5QzFEMDQyQjRFNzVGQjQyODc4MkU3MEY4MTlFRERCCi06MTBFQzIwMDBGRDA2QUY5M0UwNzlFN0VFQkJBODlENTlBOEY0RjBGMzk5Ci06MTBFQzMwMDA3RTQ2RjA1RTlEOTk0QTc2QjlCMkMzQTZEOThEMUZBRkM0Ci06MTBFQzQwMDAwRkU0NDFCRjYyQTc4MEZBRTdGN0Q5NUJEN0RCNTAxRjFCCi06MTBFQzUwMDA2OUZCMDE5OEQ5Rjc3MEZGMTMwOTVCQjRGQTc4RDE5RDZECi06MTBFQzYwMDBCMURERjhFMzM0RENGRjFDOTAzQ0IxNzZBOEU5N0I1M0JFCi06MTBFQzcwMDBCMkYwM0M1NDFFMjU0MTdGRUVBRDk2RjU2NjJGOTY4QjgzCi06MTBFQzgwMDA3QUZCMDA1RTFFNDJGMUE1RTcyNUMwQzNEM0VENUFCOTU5Ci06MTBFQzkwMDBFQTVFM0YwNUU2QjNEQkEyOEYwRjA2RjU0NDFDNEZENEI2Ci06MTBFQ0EwMDBFODI5NzkzREY2QkZBQjU0NkY3RjdBM0RGRTNFMTdDQzI1Ci06MTBFQ0IwMDBFNzVBMTNFQ0MxNzI3RDlFRjVDRThDOUVGOTdBQjM3RDM2Ci06MTBFQ0MwMDBFQjZCQTBCRkQzNEE2NzBBNkVFMzk2QjRCRTk3OEU3QTA5Ci06MTBFQ0QwMDA3Qjc1MzlCRjNGOEMwQzgwRkUxMUZEMUVGMTA1QkNFRDJDCi06MTBFQ0UwMDBCOTQxNDU1N0VDREYwRUZENjc0QTIxMTQyRDMzNzUxRURGCi06MTBFQ0YwMDA3MjAwREM5NkVDQUJCNDk5NDU3Q0JGQUI0Q0M1RjdCQjVFCi06MTBFRDAwMDBGNDc2NEJGNkNDMjIzQjY3RDlGRTIyNEExM0I0M0I4Q0Y3Ci06MTBFRDEwMDBGNzY3RkU4MTc2MzZDQkQ3MThFRjc0RjRGNUE1M0IxNTZGCi06MTBFRDIwMDBCQzM3NTNEOUUwMzQ1MTdEQzZGRDVGODlEN0E3QjczRkMzCi06MTBFRDMwMDBCREYzRjUxRkUwNzg2Nzk0Q0VGNDZCQTBGNkVBMjhDMDI3Ci06MTBFRDQwMDAyNTQxM0JCREJFN0VCRkJBRDgxMzI4RjJDMUY3NEYzMTczCi06MTBFRDUwMDA2MDBDRTU5NjU0RTlDN0ZBMTE1Qjg4RUVCMUQ5Q0RBMUY0Ci06MTBFRDYwMDAzMkQ0MjcwMEZBMzBDNjI5RTg2OUIxMkY4RjlGQTNDNDk3Ci06MTBFRDcwMDA3RDhGRTdBRjg4OEQwRDlFOEVGMkYyMkU4OUNFREQyMzNBCi06MTBFRDgwMDAzNkQ1MzEwNkYyQ0RCMDRGQTk4MTI5QUQyQzNBMzIxNkQ1Ci06MTBFRDkwMDBFMzA1OUFGNzNBNDlBRUQ3REVENUVFMjk0NEJFRjI1QkQ5Ci06MTBFREEwMDAxOERBQkRDRDk3NzY2NEUwM0JGODc1Nzc1QkNBMUY0M0YwCi06MTBFREIwMDBGQThEMkVGN0RDMUU2Mzg3NzlCMzc5MUNCN0Q3MTUyQTM1Ci06MTBFREMwMDA0NzdFQjQwMzNGQTIzRTZFMzQwNzZERjg2RThBOUEyMUU3Ci06MTBFREQwMDA1MjVDQjUxRENBNUZBMzcyQUY1NkVFOUY3NjE1RURDQkEwCi06MTBFREUwMDA0NDE5RTc1NTlGMzc2NzVBMjlFQTM1NEYyQUZGMURDMjU0Ci06MTBFREYwMDBGQzI5RTVGM0EwM0MyQzVCNjQyNEFGNDVEOTE1MzcyM0VGCi06MTBFRTAwMDA5QzlFOTZGQzk1Qzg3RjRGM0I5RDMyQzY2MzgxQUMyNDg3Ci06MTBFRTEwMDA3RDIwRTVCQjI5M0VDQkFBREQ3N0YyMTY3MTNEN0Y0MTBGCi06MTBFRTIwMDBGRkY5QjgxRUFCRjNGMTM4RkNFNkU0OEUxQjRBQTA1RDk3Ci06MTBFRTMwMDBEMkJEQTJBQzQyRkY4RDc3M0Y1NDg2RjE4OTVCRUUzRTk2Ci06MTBFRTQwMDBGMjA3OEM2RjZENEE5N0U4OUQ4MTVEMzVEMTAwRDZFQjU2Ci06MTBFRTUwMDAxNjU4NDcxQkZFMkU1MkQ1OEMwRURDOEZBRTY1OEE4MjZCCi06MTBFRTYwMDBGNkZBMkU2MTQ2MDhGNTczNzc5QUM0REFBMDdFNTI5RUIwCi06MTBFRTcwMDAzMTVFRDU1OTY4OEM5N0NBNUE2Q0NDMzc2NjA3RUZGNjY1Ci06MTBFRTgwMDA1MTNDNTA3MTA5OEU5MzI2MjgwQTNFMUQ1Q0RDQzEyODM2Ci06MTBFRTkwMDAzRTNGM0QyRjRGQzZCOEVFOTRFMkI4MzhEOEM5QzY3RTgzCi06MTBFRUEwMDA1MkE3MThDQkRERDNFM0UyQjY2RTMyOTY3QjZFMzFFNjI1Ci06MTBFRUIwMDAzM0U3MThGM0VGRUJGNEU4RTFFNzBGRkFFRjNENkNCOTU1Ci06MTBFRUMwMDBGQjcxODY3QUJBRjE4QjQxMTRDRjhBNzA0NEJCM0Q2OURECi06MTBFRUQwMDBCOEU0Qzc3MzExQUZBNTYzMjZDNkMxQjE5MTQ5NjQyRkM5Ci06MTBFRUUwMDAxREY0MjUzMTA1RjJENkE1OENFNEE5MzUzNTcyMDBGNzVECi06MTBFRUYwMDBBQjU2NTEyRTUzNDk0MzQ1MEVCQ0VEQzZERkVCMzJEMTI0Ci06MTBFRjAwMDBCOTZDM0NGQ0JDNUVFRTFGNzQ1NkYyREY4NThCNDg1MTM5Ci06MTBFRjEwMDBCMjIzRUNGNzBDOTI2QkZDQjg3NThDRjNDMzJFOEVDOTQwCi06MTBFRjIwMDBGMzc4RUYyRDNFRUQxQ0M1QTNDN0E5MTE1RTYxNjU4ODdFCi06MTBFRjMwMDBCNzQ5OEM3RTNGRDI3QkY3N0I2QTE0RTZCMTU2QzlBQkVBCi06MTBFRjQwMDA0NDNCNjNCNUQ4NDlFM0E4MTVDRTIwRUVCQkQzMzBDRTAxCi06MTBFRjUwMDBEQjg0RjFERTJBQTVGMUY4RDhBOUQxOTdDMkU2ODQxMEE2Ci06MTBFRjYwMDA4RjlFNTkyMkM1OEZENDFGNEFBQUMzQzM5NzdBRURCRDdECi06MTBFRjcwMDAwNjNEOEU0REE3Q0JCRDNFNkU3RkVFNkUxN0M1MDBGQUU3Ci06MTBFRjgwMDBDMTZGQzk2QjQzN0NFQkY5OTZBMEJCOTVFMkZBOEIyQTYzCi06MTBFRjkwMDAzQjkxMkVEOTc1REMwRTA1M0Q0MEY3QjJGNTM4MzEzRDc5Ci06MTBFRkEwMDBBRUIwMzM5QkQzRjcwN0Q5QTIyMTBFOUNFMjg4NjJFMjcwCi06MTBFRkIwMDBDMEU5RThDRTg0NDcxNzIxMTlDRjdCQkM0NTY1MzJDQTJBCi06MTBFRkMwMDA5OTlGRUJGNzJGMThFRjE3OUYyRkE0NzM4M0U5NjJFMDQ3Ci06MTBFRkQwMDAyMkNEOUY4RTc2REQ2MDZEQkNDMTZFMjk0MEVGQkJDMzM0Ci06MTBFRkUwMDA5QzQ0QThGRjIwRTNGNTA3RTdFRDU5ODFGN0FFNzYyM0FGCi06MTBFRkYwMDBFMTIwRkZEQ0NFRTExQzRGQjcxOUVEQTFCMkQxMDgyRjAzCi06MTBGMDAwMDAwMUY0NjE1NjZGM0ExNjdDMkQ3NDFFNTg3RjJGNEJCNTU0Ci06MTBGMDEwMDAxNkY1QTZFQkYxMjY2RUZGNzQyRjUwMjhDRTcyMjAzQTFCCi06MTBGMDIwMDAzRkUxNzM3MTNGNzZEQTI2MTlFRERCQ0NCQzA3NkJFODY0Ci06MTBGMDMwMDAxRUNDQkQ0QzQ2N0Q5N0Q5REU3MTAzRkFCREUyRjkyMUE1Ci06MTBGMDQwMDBFQzQ4MTlDQkUzRTRCRTk5MUZERTY0RTJGQ0MxODY0OEJDCi06MTBGMDUwMDA4NEI3RjhGOEQyRjg3ODUyNkZCNjRCM0I4NzAyM0Q5MEYwCi06MTBGMDYwMDA4Q0Y3MDFFNDJCMzA0RUIwRkIxRTQ2RUYwNDk0QkVEODYzCi06MTBGMDcwMDA3Q0YzQkY0MTdGOUZFNTVCNjQ5NEQ3RDk2RjA0OUY3MDk5Ci06MTBGMDgwMDBDMEJDM0VGQjQ1MzAxQkU1RjQ1NkE5RDNFRThBRjE3QkFDCi06MTBGMDkwMDA0QTIyQkY3RkQ2NEI1RTZCRjRBMUEwREVGMEZDRTNBOTUxCi06MTBGMEEwMDAxN0U5MUI4ODJCOTI5NzNFNEE0NjdGRDVCNjc1QkZCN0E2Ci06MTBGMEIwMDBBNUZEMUZEQTJEQUEzOTg0NzY4QkFGNURDRjY3OTAxRDMxCi06MTBGMEMwMDA5NkZEMDZDRjhGREQ5QUIxNUU5NTEwNkU4QkM5NUY3NDg5Ci06MTBGMEQwMDBEMDNCOTdGQzQ1RDI1QkRDNUYzNERBMTQwODYzOUVGREJECi06MTBGMEUwMDBDNTRFNzE3NzNCRjZERTMyMUZFM0Q1RUFEM0FGQTFERjIxCi06MTBGMEYwMDAzRDE5OTNDREY3OUQ4NUQ5M0E3RjFCRDcyRjU5MDI0MUYyCi06MTBGMTAwMDBFNDlCRjhFRkMzQjNGNUYzQzRCMjBGNjcwMUZFNDYzRkNCCi06MTBGMTEwMDA2QUExQjhCQjAyQjFBMjIxMDdGOUExRDE0NEY4QUMzMDcxCi06MTBGMTIwMDAyOTRCRDdDNEVDRDNFQUQzNEIyNjY3QTdEMUJFODAwNUMxCi06MTBGMTMwMDA2MUMzQTA5QzE3NTgxMDk4Q0RFNzNFNUU4MkY0OUEwREVCCi06MTBGMTQwMDA2Qzg2RjIyNTVCRTUwNjY0NzY1NTEyMEJDNkQwQTk3MjczCi06MTBGMTUwMDA1RUEyRkFGNUU5ODFDOUQ5OUFEQ0MzNzMxRkIzQzZEMjlFCi06MTBGMTYwMDA0RkE3OTZCMTU5QTg5N0UxMUJFQTVERjNDRTI0N0VERTQ2Ci06MTBGMTcwMDBFMzM2REU4RjM0OTk3OEJDQzhENURBQkFDRDc4QUUzM0IxCi06MTBGMTgwMDAxNkRGN0IxM0EzRDYzMUJERUI1RkFGQzE0OUIyMzlBMzA0Ci06MTBGMTkwMDBBNjQxRTgyNzdCRUQyOEREQkI4QzNCMDdDNkZEMkRDNUNFCi06MTBGMUEwMDBFNTJDNjZFNDA3NDVCODUwRkU0RTk5QkZEQjVEQzVFMzJDCi06MTBGMUIwMDAwMTZBRUY2MzAyOUUwNUQ0NkFGNzU0RDQ1QkY5RUYwRTNGCi06MTBGMUMwMDBCMzQwNDBDMUY3NTU2ODhCQTlFMEZGQTJDNEJGMUUxQjI2Ci06MTBGMUQwMDA0QkM1RkExOUFDODNFMjE4NTkzQjUzNzhCQzg0RjFEQzc3Ci06MTBGMUUwMDA2OTZCMUZFRjQwRTk3RTAwQTlDQTQ0RkI5NDUxMkZEQkY1Ci06MTBGMUYwMDBGOUVGNDM1NTMxN0EyNzlDREU2Q0MyRkRFRjdEMkMyQzU0Ci06MTBGMjAwMDAwOTNEN0VCODBFQUY0MkVERjRGM0Q4NUQ1RkJFNDNCRjVCCi06MTBGMjEwMDBDNzVDMjBCNjA1NUYyM0JCMjE1OTZFNDNGRDk4NjRFNEFCCi06MTBGMjIwMDA0M0ZERkVEQUZEMUExRkUyRUY0OTA3NjNDRThGN0NFQTQ5Ci06MTBGMjMwMDA3MThBQjdDRjY2REQzNUI4Q0ZDQUFFNEEzNUUwRjk4MkZDCi06MTBGMjQwMDA1RkY2RkM1MDE2MUMxN0RCNkY5OEYzNzU5RTQ0RUY3NDQ1Ci06MTBGMjUwMDAyOUU3N0Q1NEJFQjU1QTE5QTBGRkRDM0VGQUNGMjA3QUNCCi06MTBGMjYwMDBFQUJCRkYyQzJBREYxNkZERDQ3NTNEODA2MjZCRjc3QjZECi06MTBGMjcwMDBBRTMyQTVDNzZFOEQ4N0IzRUYzRUEzRkNGRUNFQkVGOEJGCi06MTBGMjgwMDA3ODcyMEUxN0JCMzlFMEJFMDFFMDY2QkY1RkY0QjczMjlCCi06MTBGMjkwMDBGQ0REMUI2M0JENjkzOUU3NUNGQ0JDNUNBRjFGNzVERjNGCi06MTBGMkEwMDA4OEY1NjFERkRCQUFFMEVGRTgxOEVCOTc5NUJDRUZFMkE5Ci06MTBGMkIwMDBFN0VFN0E3RDNFQkZDQkNGMUJFQkM1RTMyNzdFQkUzMEFBCi06MTBGMkMwMDBBRkI0RUZDN0NDRUIwQTlCRDU1MDVFM0VBQkQ3QkNEMkY4Ci06MTBGMkQwMDA3RTE4MzNBRkFCM0NDNkZBQzE5QUM0RjNCQUI2QzBEQUYzCi06MTBGMkUwMDBFRkJDRjQ3QURGOUJGOEY1RUFDNUFGRTNDNjY5RDYzRTFBCi06MTBGMkYwMDBFMENFRUJGRkIwRkNFQkY1RkJBM0Y5RkREN0JCQUQyQUVECi06MTBGMzAwMDA3RTFDOTVFNDA5QzhDRDBFOTQ0RjE1NEM1OTg1RUY4NEE5Ci06MTBGMzEwMDAzMzY3NTJDMkI4RTBDOTFBN0Y5QzQyM0YwNTlFOTMwRUU0Ci06MTBGMzIwMDAwREJDODlGMkYxQTQ5N0M3RkQxRTdFNjY2MTA4Q0Y2MTBFCi06MTBGMzMwMDA5NkVGQjUyODc4REVFMUQ1RkNENjIwNzgxNjIxRkZFRUQxCi06MTBGMzQwMDBCNkM5MkU4QzA3MTQ3RDhBNzYzRkFBMjMwN0UzRjk3Njg3Ci06MTBGMzUwMDBFRjM4NzIzM0M5M0Q2NkI0Njc2MEJGNTY4MkZBMUE0NDBCCi06MTBGMzYwMDAxOEREQ0I3ODBEREJBNUM1QzY1MTA0QzhGRUFCMTdGRDczCi06MTBGMzcwMDA3RkE0N0RENTBGRjhCRTRBOEZERjhGQjVCM0Q4ODQxRTJBCi06MTBGMzgwMDAzQjRCOEZERkRFQTA4RDczM0U5QkZCMDNDMUNFNTcwNTQ5Ci06MTBGMzkwMDBCMkYzMjU4QTZGRkVCOUFENjMwM0RFM0ZGQUI5REJFRDQ4Ci06MTBGM0EwMDBDMkZEQ0M0MTZEREVCQUREQThERjZCMTgzMjJCQUZDOEQxCi06MTBGM0IwMDA5NDAwNUUxN0Y0NDg1MkNGN0QwOThDQTM3NEU1RTVEMTIzCi06MTBGM0MwMDBCQjE4NjhFNzhEMkRDNDdFMzk1Q0ZGMDdDQTg5QTc1NjM0Ci06MTBGM0QwMDAwMDgwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMEZCCi06MTBGM0UwMDAwMDBCREQ3RDBCN0MxNEQ1QjlGODk5OUREOTU3QjJCQkM0Ci06MTBGM0YwMDA5OTBENEIxRTNDQzI2RURFODEwMDEzMDgzMUEwOTUyNThECi06MTBGNDAwMDA0NDhDOTZEMjBEM0UwQURBRTI5MkYwOTRCQzAwQURGMTQzCi06MTBGNDEwMDBDQUFEMTMxMjExMTAzNTZBNDRBMDgwMEI4QTYyQUY2ODFFCi06MTBGNDIwMDBFODQ1MEQwOERFMTAzNUI1QjdEODg2QjZCNkQ2N0FGOUY4Ci06MTBGNDMwMDBBRkMwNDUyQTA4NkIxRkVBRkQxN0NCRkZGQkJFMzM5MzE1Ci06MTBGNDQwMDBFQzRFNzY1NUFBQjdGN0ZFRkVGMTg3QjM2N0NFQ0M3OUJFCi06MTBGNDUwMDA3Q0U3N0I3RkRGMzk3M0FGODkzMTU2Q0E5ODlBMkY4NTU1Ci06MTBGNDYwMDA3NjA5RjA1QjY2NkM0RDE5NjM2RUY4QzlCMjE5N0I0NDdFCi06MTBGNDcwMDBFRTczNEI1MEZGODg0NzkyNTVBOEVGQzlGMjMyMzY4OTk4Ci06MTBGNDgwMDBCMUJEQUY5OTRDN0UwRjYzOEY3RDM3NzdBN0U4MUIyOEZFCi06MTBGNDkwMDA2RjBBN0E3NjYwNzlBNDg5MDUzQjFERDg4OEJDOENDMTM3Ci06MTBGNEEwMDBGREJEMzZEOUJEQkUwNDhBNTI5RkFGREEwOUU1RERCRjg2Ci06MTBGNEIwMDBCOTQ5NzAzMTk2Mzk4QTUxN0JCNUNERDNEOTg5ODk4Q0I4Ci06MTBGNEMwMDBCRDY4ODlCQzdBMTFDN0IzNTEwOEVEODI3NjVFRUEyODFGCi06MTBGNEQwMDA5OTIxQzFGQjBCNEYzMzY2ODc0NzZCRUZCQ0VFOTE5M0NECi06MTBGNEUwMDA0MzE4OUI3QzUyOUU4NkY3NkJCN0JBMTUxMUVFMzdGNDIyCi06MTBGNEYwMDAzNUNEQzA3RTU4MTM1M0YyMTRDNkQyQzU2OUEyMTNEQUIzCi06MTBGNTAwMDA0OUJGRUZBOEQyMEE0MzdFQjRDN0RCMTU4NjcyNjQ4NzcxCi06MTBGNTEwMDBBMEVDRjQ2MkZERjI5MkU1QzVGMEJDQzNFRjc1QzA3Q0NGCi06MTBGNTIwMDBFN0UzNTBFOUJFN0I4NjE5REZCQkNFQTJCNDQxM0I2NzVGCi06MTBGNTMwMDBDRDZDNEUyNzNDNzcxMUZGQTYwRTVDRTc3RkQ3NUJDRUU0Ci06MTBGNTQwMDA2MEZDRjMzQkVGOUM0RkZEQ0EwMEIyNEMyOERCNjQxQTExCi06MTBGNTUwMDA4N0NEMkJBN0I2NDAzOTNEODlEOUVDMTMxODJCNUIyREVECi06MTBGNTYwMDBGN0RFODVGRDJGNzVDQTNCMDFDNkFFNzJCOUY3ODczODQ1Ci06MTBGNTcwMDBBRkE2MkM1OTU0QjBGMzEwQzE0MTZGN0ZBMTNGNjA2MTE5Ci06MTBGNTgwMDBEMEVGOThERDE2Njg4Q0QxREY0NUY4MzdCNjMzQjYzQzNFCi06MTBGNTkwMDBCRTJCQjY1Q0QyMUQ1QjlFRjg0NjZDRjk3OTk4MjMxQjk2Ci06MTBGNUEwMDBDQUQ4MTREQkYwNkQyNzAxREUzRDg3QUMwQ0M3QkJFQzdECi06MTBGNUIwMDA0QzUyQzgwQUYwM0U2MDY2MENFN0FGRUVCMTEyM0U0QzBBCi06MTBGNUMwMDA1RkU2RjAyMzdFOUNGOTIwNjk4NzE1Q0E4N0RGNDlBMjkwCi06MTBGNUQwMDBFNzZGRkQxNzNCN0ZERUQ0RjkxQzk2RDVFNzkyMTkzRTA1Ci06MTBGNUUwMDBCRjZDNDg2NzU5MkE4Q0ZCRTVDRkM0NUIwMkM1N0M1QUM3Ci06MTBGNUYwMDA2NjZDRkZCOUEyMURFQkIxN0U2MjY3OTkwQ0Y3NUYxQ0M4Ci06MTBGNjAwMDBDRDU4MUZENjRCQTE3MTM4Q0YxN0ZGMjY1MkJCOTE2NzNCCi06MTBGNjEwMDBBQ0ExOUREMEVFOTlGRDRGM0Y4N0YwM0FGM0NDRjA1NDZBCi06MTBGNjIwMDAwMUM2N0NCOTY5RTdDNEY1NThERkUyRjRFRTg0RkI1MzA4Ci06MTBGNjMwMDBDRTNDOUIxMzhDNUE5NzY1QkJBRDMxRjM1Q0U2MTU2OEU1Ci06MTBGNjQwMDA5RUNEOTI3RkY1MTNCODNFNDdDQzg0NEYyQjE3ODY2QTI4Ci06MTBGNjUwMDBCQkUxRkQ5NTQyOTZBMjYyM0IxNkMwRDM2MjJDMkJFOTFBCi06MTBGNjYwMDA2RUMwRDcyOTJFOEVCNzJCRUQ1MDhFQjNFRUZBQjU2NjRECi06MTBGNjcwMDA5M0M4ODIxMzA3Q0FDN0Q3M0Q0REUzMjkzQ0ZEMzZFMTQ1Ci06MTBGNjgwMDBGNTAxQjM2QTRBNDIzOEFFMTM5NDVEMzBGRTAzNzZENzczCi06MTBGNjkwMDAzODk2ODJEN0FDMTBFMkNEM0Y3OTREMzQzRTk4RDcwRkUzCi06MTBGNkEwMDAxQjEwMkZERTE0OTU5RDJDNzE3Rjg1MTlCRkRGNUEzOUYxCi06MTBGNkIwMDBGMTczRUFBMTVGREYzOEM2Q0VGRjIxRTkxNjNGOENBM0M0Ci06MTBGNkMwMDA2MDUzRUNCQTE3ODU2MkNCQUIxMTNFODA2RjM1MkNFQUU0Ci06MTBGNkQwMDBCRTBGQzc5M0JEMjY4M0U4ODREMTc4MEE0RkJGN0I5M0MyCi06MTBGNkUwMDAwRkM2M0JDQ0NBOUExMDJFQzY3RUVGQzM3OTQwM0IzRjczCi06MTBGNkYwMDBGQTExQjQ1MzQ4Q0Q4ODE3NDVERTlFMzcwREQ2NDFBMzg1Ci06MTBGNzAwMDBBQjk3MDU0RTQ3RjA3N0RCNzBBMEI3NjUwMkU3MkZGQTlECi06MTBGNzEwMDBGRDY1ODY3MUU4RUQ5NzZBNzBGMjU4OTQwN0MzQjRGRUYwCi06MTBGNzIwMDA1NjE5RDdGRjgzQkJBQjFFMzk2OTFFM0M5RTUzNzdGQjJFCi06MTBGNzMwMDBGRDk1NTFGNzE3NkQ1QURFOUIwOUVGRDVFRDFEM0E0MTQ2Ci06MTBGNzQwMDA4QzgyNkZERDMzQUZBNkREMENGN0NGRUU5NjE0NjQ4MUFCCi06MTBGNzUwMDA3NTczOUY3QTYwMEEzRUY3OENEODg5RTNDNTdBM0ZDQ0VGCi06MTBGNzYwMDBGNzZDRTdFQjJFN0M2RUQxNTZGNzA0RDEzQkYwRkVFMjRFCi06MTBGNzcwMDA0RDU3RjkyQjBCMDdFMDc5QTk3NEZBNTIzOUU3NzNDQjhGCi06MTBGNzgwMDAzQUNEMjExQkQyNDVFNzVCMzM4NjIzOUU2RTEyOTQzQzEzCi06MTBGNzkwMDBFOEE3NEMwQThBNDg3N0NFNTJCRjU5OURDQ0Q4RDQwQkUzCi06MTBGN0EwMDBGRkQ2M0IwQ0VBMUIwRjREMkE1QjBGRjVFQjREODFFQkFGCi06MTBGN0IwMDBCRTg1NzRCNzVENTQ3NkMxNkIyRkZDN0E0NTVBMzA2QUFBCi06MTBGN0MwMDA3RDdBMzRGQzVGN0Y2MzFEQjVBMzAyNkVFNDAxNTNFRkM1Ci06MTBGN0QwMDAyOUFDOTk4RUU1MjlDNTRDQjAwMjNGNzY5RDY2RkU5MDE2Ci06MTBGN0UwMDAwM0ZCNjM2RjlCNTIxOTNCN0RGMDlFNzE5Mjg5RjhEMUE4Ci06MTBGN0YwMDBDRDQ4Mjc2Nzk4NEI0MUJBM0JFMDZDRkExNUY1QjdDNzdGCi06MTBGODAwMDA0Q0ZENERFRDRFMTE5MEZGMUU3ODUyNTBENjMzODQ0NzdCCi06MTBGODEwMDAyQ0ZEOUQzRUJEREEzNThERDNGNTJEMDE5MjAzMjZFNkY0Ci06MTBGODIwMDA4MUY2OTYzQzMxOTZGODgwN0VERkI4N0U0QjQzMDYzQUVGCi06MTBGODMwMDAzNkUwQzUwOTZENUU4ODlBRDFGODY1N0M2RUM4NENENUY2Ci06MTBGODQwMDA4MkY0NThENzBDRjIyMjhBNkVFQTRFQjY1Qjk4NjM3MDQ3Ci06MTBGODUwMDAzRjhDRjVFMzJGNDNGQzA1QkM2NDVFOUFBRjlERjgwNjMwCi06MTBGODYwMDBGQzA5MzZDMERCMEZGMDU3MEUyRjMzRThGRjU2ODFBNjk4Ci06MTBGODcwMDBDNjk2OERFRUNDNDczRTI3NDg3MjQ1NUJFNjAwN0Y2NTE1Ci06MTBGODgwMDBFNTIxRTJGMzY3RTFFNzdBMDVGOTQyRTczMUE0Nzc5NEVECi06MTBGODkwMDBBNUJCNTBCRUM4RERFN0I2NjBCRDNBQ0E4RkZDNjgxODhDCi06MTBGOEEwMDAyMjI5NUNEOUYzQzlDNDdGQ0Y3QUMzNEZEMUZCQ0Y4RTU1Ci06MTBGOEIwMDA1NTU0Qjg3RDFFRTlDNTQxRUZCOTUyQTNGODUzNEJFNzQzCi06MTBGOEMwMDBBQkFFMzA5NENGRUMxRDUyMjFCQTEwNkY3RkU2QzI3OUY3Ci06MTBGOEQwMDA3RUQwMzlBNEMyRTI0QUNDMzc4QzdDMTM0NjQ2RjA3REY4Ci06MTBGOEUwMDAwRjdGMDJERTI1RjlGQzY2MUZDMkJCMEQ4NDJFQ0FCMzUyCi06MTBGOEYwMDAyMTREMjU0RDcxRDY0RDdGQ0Y2MzY5MkFGMTIyRkZGODQ2Ci06MTBGOTAwMDA5RTQzNDEzRTlFNkFBQjdEMUNFNTM1RkVGOUUxRkUxRjNDCi06MTBGOTEwMDBERjE4QjIxM0Q3RkY2MTREQUVDRTE3NzgzRjdBM0I0MzY1Ci06MTBGOTIwMDA3RDlDOUZCQzcxMzgzRjI1MENGREZDOTE3OTUzNTA1RTQ2Ci06MTBGOTMwMDBFQ0M5MDk2NEY4RTA3RTQ2NDU5RjVGMDQ3ODY0NUNDQkJGCi06MTBGOTQwMDA5NDU2NzhGNTg0QTg3QzVGODZGNTU4QzA0MDVFRTJCNTkxCi06MTBGOTUwMDAzNDY4NDFCRUMyREE4NkQyNzgxOTUzNjYyMDNDMTdDRjhDCi06MTBGOTYwMDAwNEY4OTdGMDMyQ0FCN0E1MDE4QkIyMUVFNDcwQURDNDlCCi06MTBGOTcwMDBFMTVEQkI1QjA4QjVDMjU4MTY2Qzg4ODVDN0EyMEVFQjZCCi06MTBGOTgwMDAwMDVFRTBGRkI2NDZENTQzM0Y0QkE1RDAxQTk0NUIyM0ZCCi06MTBGOTkwMDA0MEYzMTg1MjBFRjhGMDY0RUNGM0NCNTgzNzhEQUJFRTExCi06MTBGOUEwMDBEOThCRDY3ODcwRkU4QjA2RTczRDM5RkUwOTM4M0Y2MTZBCi06MTBGOUIwMDBCNjhEQzZCMzcyOEY0MEYyRDU2M0U5MjQ3RDIyQjIxQ0E2Ci06MTBGOUMwMDBGODMxOEM5N0ZEOUFBRkMzNEQ5QUJFRDQ3OEU3N0NGRjhGCi06MTBGOUQwMDAwMkI4OUU2RkFFRjUyRjgwMkEyMjM1RTQyMzFEMjk4NEJDCi06MTBGOUUwMDAzRkNCMkEzQjdCODlBRjMwRjlDNzM3Njc2MDdCQ0MyRjkxCi06MTBGOUYwMDA2Mzc5QTM5M0VCN0JFQ0M5NTc5MUFGRkM4NUM5OUQ4OEQ0Ci06MTBGQTAwMDA4NzUzOTYwOEY0RkU5NDVGOEIzQjAxQzNEOTRERkRFQjAxCi06MTBGQTEwMDAxNzIwMzhENjc5OTk4QzcwN0NDNzFDQTA3OUFCNEI5OThDCi06MTBGQTIwMDBCQzBCRjg0QTlEMkRBMEVCNUZGMkQ1MzA5RjQ1QUM4OTA5Ci06MTBGQTMwMDBFNjVERURDQkE2NzkyRTYxRUQ1NEFFNjc2MTBCMTM3MUQ3Ci06MTBGQTQwMDA3RENCNTIxMDVGRkZDNDE0NUE1RkQwOTM5ODNENzUzMDQwCi06MTBGQTUwMDA1RTIxRkNGRDUxNzA1QkIyMzVCNkNDOUU4QzJBNjcyM0NCCi06MTBGQTYwMDA5Q0ExMUMwNUZGODY3RDE3QURGRTM4NzA3RkI0NUYxRTFDCi06MTBGQTcwMDA4NThBQUFDNzQ2RTM3MTBCRTFERjMxNkQ1RDFFQkQ2MTZBCi06MTBGQTgwMDA1MTI2RjI5MTA3NTEyMTFFQTYzNTUwOEVGQzE3N0U0RDRFCi06MTBGQTkwMDBBMTcyQjcwRERBNEY5QUQ4NUZBNkZBQjJENUJDRENCMDI2Ci06MTBGQUEwMDBFM0M1QzBBNjJCMDBEQ0U2NjBBNjBDOEI1MzJCMDY3QUMwCi06MTBGQUIwMDA0RDAwRDczOUI5QzExNTQ4NTdCNTI2N0Y5NjQ0RkNDNEM3Ci06MTBGQUMwMDA5RjFGODA3MUIwNjZCRUJFOEY0RDY4MkE2QThBQTM3RjcxCi06MTBGQUQwMDBFOEUzREYyODc0NzY5QjkwOEZFQ0U3RkE4NUIzMzQ2MjE1Ci06MTBGQUUwMDA4RUU2RkYxQjdDNUNCRUE3RjQ4NDY5RkQyMzJGMDgwQzA3Ci06MTBGQUYwMDBGNURFQ0RDMjQzOTlCODhFOUIzM0JENDIyQkNDQTk3NEExCi06MTBGQjAwMDA1RkNCMzRFMjM3QzA4QkYyNjA1REVCRjdCREQ3M0IxQ0I3Ci06MTBGQjEwMDBDQUE1NTU3REI4NEMzMEVGQzBGMkQ3OTE5RTI3MjU3MTBDCi06MTBGQjIwMDBCRDM5Qjk2OTg3MDlEQTRCQkZBNTcwNDIyQkUwRTc0M0JECi06MTBGQjMwMDAzRTJGRjU5MzM0QjFGRDMwQjYxMzU5RUU5NTc3NDIzQjI1Ci06MTBGQjQwMDAxOUFCNTVERjhBNjJFQ0JGQTk4NUYwQjc5QUQxRkRBMTQ4Ci06MTBGQjUwMDBERjU5RDU4MkNGREQzNzhDQTU4QUY4MUM2QjExRjBCOTNGCi06MTBGQjYwMDAzNTQzMDU1QThGMzVGM0Q5OUMxRkMzNTU2MjMyRTk5RDQxCi06MTBGQjcwMDAyM0U2Qzg0MkNCNjQyQzM3NEQyM0ZDRjJDQUVFOUY2NUM2Ci06MTBGQjgwMDA2Mjk5QjVBNTgwNUVGREE4OEI5MTlFMzlENDI0REU1MjgyCi06MTBGQjkwMDAwREQ3NDcyN0YwNzJFQTJBQzFCRjkzODhFMTIxODI1NzI3Ci06MTBGQkEwMDBCQTk1NTUwOUE5RkM3RUE4OTg0OEQ4QkY5N0VBNDMzNDZFCi06MTBGQkIwMDBGRUY0RTk0RDI1Mzg4RUY0MUM3RUY1NTg4MkE2NUNFOEVCCi06MTBGQkMwMDBGRkM4NTE3MzY4MzVDQ0YzODg4NjJGQjdFREE4NDg4RkVFCi06MTBGQkQwMDBFNkJCNDdDRURBMjQxM0U4NzU0NzMyNzQ3REI2REI4MTg1Ci06MTBGQkUwMDBGQUVDNkQyNUQzRDM5MTE4QjM3M0FCNTI3MDVEM0Q1OUM4Ci06MTBGQkYwMDBCMUY1RTdDREZFOTQ4OTQ4M0Y0NzQ1ODZFQkY3Njc4NzI3Ci06MTBGQzAwMDAzRjA1RjVDRkNCMkQ3Q0ZDQzY3NTNGQUNBRDY3RTNBN0I4Ci06MTBGQzEwMDAwMjBCNDVDOUIzQzYzOTFGOTM5REQwRjhBOTE0NzNGRkQxCi06MTBGQzIwMDBFQ0REMzY4NjIyQUU1RkVFMkRFOTk5ODFDRkQ1QjNCRUVECi06MTBGQzMwMDAzNTg4ODdGNTlEQzkyQzE0NDUxNzk3MjdDNUVGNTdBNzE5Ci06MTBGQzQwMDA4N0M2NEY0NUE2QzZFREQ3MTI3QkZGRDMyMTRDMUQxMkE4Ci06MTBGQzUwMDBFRkI5QjREOEZCMzA4Rjk4NzJENzI3RkRGM0MwRkJBQzU3Ci06MTBGQzYwMDAzQ0VDMEE4MDlEMzgxM0U1Mjg5NENGODc0Q0FBNzkzQzU4Ci06MTBGQzcwMDBBQUYxNUNGRTlEOTNDMzJFRDRDRjQxNUUzNkUxQkE5Q0JGCi06MTBGQzgwMDBGMzg2NDkxRTlFNjdBQzBBRUIyRjM3OTk2RUE5QzZGNTFECi06MTBGQzkwMDA5NTIyQUVEOUNFODE3RUY0N0E3QzNGN0ExRENGQ0RCMTRDCi06MTBGQ0EwMDBCMDZFNUE5RjA4OEQwM0UxQTcxNjMwQjZFNUUwNDcxNkZGCi06MTBGQ0IwMDAyRkVBMTEwNzBGMTNGQzc0N0M4OTg2QTMxQUM1NkZEMjMzCi06MTBGQ0MwMDA1QUZCQkE0RDQwNTcxNzdDOUZCNTE3ODNDMTNBQjQ0N0NBCi06MTBGQ0QwMDBFNzBCMTdEQkZEMjAyNEQyNDQ1MzBDOUY0ODJFRURFN0ExCi06MTBGQ0UwMDAxQkM0QTYxRTM1ODkzQTlGNzlBODcyNDQ0Qzk5OUUxRjYxCi06MTBGQ0YwMDA3ODVGQThBRTA0QkU1MjVBQ0NERkI3NjQ5QjhFQUU0Njg2Ci06MTBGRDAwMDA1OUM2REE2OTdDMzA4RjJDODQ1RjdGRDk2NjI4M0JBMDg2Ci06MTBGRDEwMDAzQzM2QUEyQzFCRUEzRDg2RkEwQzQzNzkwNDdGRkVBQ0U0Ci06MTBGRDIwMDBCMzNCMEJFRDU3NzdCNkE1NUEwMjNBM0Q5QkQ5M0Q0RkYxCi06MTBGRDMwMDA4MEYyODY1NjVCNzUyNTk0RUI0QkI5QkM2RTM4MjgyODRCCi06MTBGRDQwMDAyNDZFMzRGODM1Mjg1Q0VGNzQyODYxNEI2RDMxQzJBMTA0Ci06MTBGRDUwMDBBRjE3Rjk0QTVEOTcyMDBCNDAwRjhFQ0VCRERENTRDNjFDCi06MTBGRDYwMDBGN0JDNTFFRjc1MEFGNDVFNURFNzdCRjQ1RUMyRjYwQkZCCi06MTBGRDcwMDA0RDQ0RTdFQjBCOEZGM0U3M0FERjI3QkRFMERFQjZFNTU2Ci06MTBGRDgwMDAwMTY0NkNCRDY2MkZGMTA1QjBFMkZDQzNFMUM1ODZBRTJGCi06MTBGRDkwMDA2QTE2NzQwQ0YwRDc3Mzk5RkU1Nzg5QkYxRTEyNjRBNEJCCi06MTBGREEwMDBDRjdFM0NDNTc2MUQwMzc0QTEzRkZGRkJCMTA3REY0MjQ4Ci06MTBGREIwMDBCNTIzRjlCNjhGNUEyNDc4RkUzRkVBREY5Rjg0N0FFMUIzCi06MTBGREMwMDBFRjM1MzlCMjUxMDgxNTYxQkY1QjU4QjAwOEU1RTBGNzZGCi06MTBGREQwMDBFQUYzMEU5QkUwQjk2M0U2RjAzNkU0QkRENUQ5NTlENTE4Ci06MTBGREUwMDAxMkYwQjU2M0NFRjA0ODAxRTRGQzc1RDk0NUJDM0MzNDUzCi06MTBGREYwMDBCQzBERTFGOTJGRDlBMzA5QkVDNzQ2ODY0NzlBQTBGQ0RFCi06MTBGRTAwMDA5RDlEMzdGMDcyNUU3ODFCOTZENTlEN0VGRUZDRDhGMEU2Ci06MTBGRTEwMDA0ODExREVDRjUxQTc1NTU3NDI3OTk3MUM5RkFFQUZDRTAwCi06MTBGRTIwMDBFNjdBQjQzRUJFREY0RkY0NTc2NEEzOUU1N0M3RTVDRkQyCi06MTBGRTMwMDBCQzVCREY5OThCRkM3NjlFODlDOTBDRjhGNEFFQjMyN0M2Ci06MTBGRTQwMDBGNkVDMDI3OEVDNkE0RTY2M0IzOTNBMDYyNEQwODdEMzRBCi06MTBGRTUwMDAzOUVBODM5QzY4MjdCRTFFRjEwMTlGMjdFNzUxNUY1ODRFCi06MTBGRTYwMDA4MDcyRjIyNDlCNzdCRDZGNjA1REY0RkVEMzQ3MzdFRDVGCi06MTBGRTcwMDBDNUY2RDNFNzE1OTMxQzExN0RGRTY3QjE3RkZERkE3NkI5Ci06MTBGRTgwMDAxMTVDRTFGOTY3QjM2NUNFQkY0NTkzOUY5RUJGQ0IxOTY3Ci06MTBGRTkwMDBDMkU3MUZCNEYzNzkwMUZERDAzQTNCQjQ3NUY5NUUzNjgxCi06MTBGRUEwMDBFNzkzREZDQkU2N0FBNEUyQkI4QURBQkI0OUQ3QzdEN0IwCi06MTBGRUIwMDA3NjBFMUQwREUzRUExMDU4MjdEQTM1RUY5ODk5NkEyNzc4Ci06MTBGRUMwMDAzRDI2ODlGNEExMEUxQzNCRDYzRjk0MTk1MkExOUY5QjVECi06MTBGRUQwMDAwNTE2NDBGRUEyRjM5MzBFQjczRjMzMzVDQUFFRTkyOEFDCi06MTBGRUUwMDA4MUIyNjNDMDhFRURBOEY2NjcyNjc5RjA5QTY2NDIxRDRFCi06MTBGRUYwMDA1RkU3NEYxRDNFRkU5RTJFOUZEMjVCNzkzRkU5MEYxNkI2Ci06MTBGRjAwMDBFREM0RjkyNDRCOENFNEREQzIzOUY5M0I1QjQ4M0Y5OEUyCi06MTBGRjEwMDA0REYzNjc3RTdGQTYwMEVEOUQ1QzlBNkQ0MjM4RUFFQjVCCi06MTBGRjIwMDA3NTYxQTJCRjk5RTYyNTcyQkI1QzVGMzcxREJFQ0Y2NkM3Ci06MTBGRjMwMDA3M0JCQjk1NjA0RkQwMkYwNEVDOTBENTI3QkEwNkY4QzA1Ci06MTBGRjQwMDAyM0MxQUVFOTFCQ0YyMkQyNDZDMTk5NDlFMTQ5NzhGRkNFCi06MTBGRjUwMDBGRjQzNzg2REM3RkFBRjBBQUZGQTY2RTAyM0E2MkZDMTU4Ci06MTBGRjYwMDA0NzM0Mzg2RTE0QkFDREU5OUM4RjkwREQ4Q0Y3NTExRTYyCi06MTBGRjcwMDBEREUxMEJGRTM4M0I4QTFFRTZERDU1NEY3QUE2M0VBRTJDCi06MTBGRjgwMDBFNDNCNUVBQUZBMEU0MzNBRkM4MEU4NkVERTNGMjU5MzFFCi06MTBGRjkwMDA5RDZCRDQwMzc1RkI0QUQ3NTcxRjRFRTBBRkVDRDZFNkY2Ci06MTBGRkEwMDBBN0U4N0U1OTZEMUNDOUM1RTEzREY3MDNCQzUyOTk1M0MyCi06MTBGRkIwMDA0NjNFN0FDQzEyMUVBQkMwRkJDNzRDQzEyNzVFQzI3MTU1Ci06MTBGRkMwMDAwRjEzNjVFMDIxODNEQTZCQ0UxMUE5M0RCQjhFMjcyQzgwCi06MTBGRkQwMDBFMjFBRUQxOUMwOTM3NTgwMjczNjdDQkZEQTQyRjY3M0JBCi06MTBGRkUwMDA4NzNCQjQ3OTExRTJDOTBEMjMxNEQ1NEI3Mjk4RTg1OUI3Ci06MTBGRkYwMDA2RDRFQTZGQUNCNERDNzE5RkE5OTIzOTM2NTE5RjU0Q0E2Ci06MDIwMDAwMDIzMDAwQ0MKLToxMDAwMDAwMEMwMkJBQUVGOTg5QjFGNTJCOUJGNDBCNTkzRkYzNDI5NkMKLToxMDAwMTAwMEI0MTNGMUFFMDQwMDgwRURDRDFENERGNTY4QUY5MzlGOTQKLToxMDAwMjAwMDYzQUU4REY3MzcxOEFGQjg1RDVEQzA3OEJENEZDM0RCRTkKLToxMDAwMzAwMEE1RDk4NEI3NjlBRDhDRkIyOTI0RkZCOEVBMjg3RDYxNzYKLToxMDAwNDAwMDRDMEVFNzIzQzlBNUUxMTc3RThCRkFFNzA2QkI5MkM3RTIKLToxMDAwNTAwMEI4MDk4OEZFMEZENjlFNEVFRDAxQkU3QzQ4RjhDNzM4MjEKLToxMDAwNjAwMDVFMkU3OEMwQjk4M0YzM0RBNTBDRTE3Q0FGQjM5RERENzYKLToxMDAwNzAwMDQ5RkUyQjMzOEQ3RkFCQkQ5QkY0NzA5M0NERUI0NjNGOTgKLToxMDAwODAwMEYxM0M5MTZEQ0NDN0Y2NUFDRDMyRTI4OTExREUyOTM5QTcKLToxMDAwOTAwMDlDQUYwREY2Njc4NjZGOEZGNjY3Q0VCM0FBRDYyQ0FDRjEKLToxMDAwQTAwMEJGREI0RTc2ODFFRUQ3OUM5N0MyRTk0QUY3NkIyMjdEODMKLToxMDAwQjAwMEM2OTMwQkJBNUZGMzE2MERBRjA2RDVBRkZGQUZCQzFBRjAKLToxMDAwQzAwMDY4RUZGRjY4NzhBNkY0N0M5QTM3REZDMUU3OERGRTkxNzAKLToxMDAwRDAwMDFBRkMwNUZERDZBQ0IyQkY4NzdFRDAxQUQ1REM2RDc1OTMKLToxMDAwRTAwMDIxMUZCOUNBMUY4RUIyRDNEODI2M0U4RkUwOUJFNjEwREYKLToxMDAwRjAwMEMyQTk1OTYyMUI5RkMyRjU1MUY5RkM1NzJFMEMyRDhERDgKLToxMDAxMDAwMDlFRDcxNjBCOUY5N0ZBNEZDRTk4Nzk2RDcxQjEyNTVGRTgKLToxMDAxMTAwMENGQkNGRTMwMjk3NjVFQTcyNzY5RjM2MkI2MzQ3ODRGRUMKLToxMDAxMjAwMDkzNzNCNzM0M0JERjEzQzZDMTE1RTcwNTU3QjYwQUU2MkMKLToxMDAxMzAwMDU1MzgzMEFGQUJEMTk2MUI0QUVCRDkxNDhGMEVBRjRFNkEKLToxMDAxNDAwMEI4OEVGRjRCRTZEQkZFOTgzRkRFN0M4REYzREM5M0UzNUQKLToxMDAxNTAwMEFGQ0E5OTQ0NzREMzJEOTcwRUUwNzU3MDMzQ0NBQjE0QUQKLToxMDAxNjAwMEQ3NzU2OEE4ODVENjk1RTMyNzYzMkUwNUY5RDhDQTg1ODMKLToxMDAxNzAwMDMwMkZCQ0I2QTQ5MzNGNkI5RUQ1REI4NTdFNURGNkMzNjYKLToxMDAxODAwMDE0NkQ5RThDRjhDMENBQ0QyMzg5MkUwMTZGMzlERDNFRDcKLToxMDAxOTAwMEM2RTM0MTJCRUREQ0NGQjA3MkI5QUNBODMyQ0VGRkM3QkQKLToxMDAxQTAwMDY0MDc0NzgwQkY5MjVFRDIxQ0NCRDdCRjE4MEVGNkFDNTcKLToxMDAxQjAwMDlBRTI2ODM4RDhCMkU2MTdDNzU5NzdENTRBRjg5QzY4RUEKLToxMDAxQzAwMERERkY4RjE4Qjk1REM4NDlFQzY3NjNBQjYyRkQxNEU4QzkKLToxMDAxRDAwMDZGRUMyRjhCODNDQjQ2QkYwNzYzN0ZCM0M2M0VBRjI2NDIKLToxMDAxRTAwMDg4NkY4NEJGMTc4RDQ3QzdDQzFBMUVERDY5MjdGOUEzMTYKLToxMDAxRjAwMEUzRDEzMTI3OUZBRjExOEYxODY4RDE0OEM3RkFCQzhENjIKLToxMDAyMDAwMDcwOUM4NzcwOEMxMzg3MDA3Q0NBNDMzODFFRDNFQzMzRjQKLToxMDAyMTAwMEMwQTczQzg0QTM0RTA3QjczNDczN0U2MDg0REIzMzg5NjgKLToxMDAyMjAwMEY5REE1NzlCODcwMThGQkZFQTNDRjRGQTQ0RjNEMEY1MjMKLToxMDAyMzAwMERCNERDMkYyQ0Q4ODlGOUIzMjk5REM0QTdBNzA3ODJDRDQKLToxMDAyNDAwMERBNDkxRTRCQTgwOEM3QjVDNTAyRjQwQkVERDY2OEZEMDgKLToxMDAyNTAwMDkzMjcwM0U2RjdBNzIzREMyRjdBNUNFQkQ3MzhBRUFFMDMKLToxMDAyNjAwMDFDREQyRjFBRUIzNzZCNzQ0NUI2QTMxRUQyOThDNEU1N0MKLToxMDAyNzAwMEUxQjk0MzRFQTIxQjk2MUI5RTg3RkFGN0Y5MDM1Njg2RjcKLToxMDAyODAwMEZDQjU0MTA4RTdFMzczRTcwNEZGN0M3QUFFMjVEOThCMjAKLToxMDAyOTAwMDcyNTFGNzM3OUU3ODkxRkIxQjU1MDZGNjJGRkFGOTgyQkIKLToxMDAyQTAwMERDNUZEQUE4RkU2QzBEQUVDM0M1MUNBOTA5RURDRkM2OTQKLToxMDAyQjAwMEFFNThGRjFBQ0NDRjg1RjMzRDY3NjI3REY4N0M4MzE4N0EKLToxMDAyQzAwMDVBOEEyNkVCNDYwQkQ3MDczNjlBNTgyN0FFREY4MDVENTEKLToxMDAyRDAwMDdFM0M5RkVDODQ0Qzk5QTEzRkE4QzFGNDVFRkU4QTI4MjUKLToxMDAyRTAwMDNCQkU0MUFCNkZDOEUyRkUyOThDNDc5MzlGMURCQkYyMUEKLToxMDAyRjAwMDBEODY0QkMzODYzMzlGNjEzQ0FENjE5RjkxNUU2MkU5ODEKLToxMDAzMDAwMEE5NkVBMDJDNUMxNEIwQkRBODdBREYwMDNEOTEzRDhFOTMKLToxMDAzMTAwMDc4NThDOTQyNzkwMkZBRDU3ODM5QjlBQTJGODQ3MUVEOTMKLToxMDAzMjAwMDQ2Q0RFRjNBQjQyNzNDMDNGNTA1Njc2OTI3NDMzRURBMkIKLToxMDAzMzAwMDc4OUFEQjIxNTMwRUVFNzgxNUZENkRFRUFBQkU5MUE4REEKLToxMDAzNDAwMDkyMzQ2QUYxMDdBM0ZEMzNGOUUwNDMyMkZBODc3NEZCODQKLToxMDAzNTAwMDI1Q0ExRjU1MzQzQkM2MUZCOTlBREU0M0ZGMTZGNjE3NTAKLToxMDAzNjAwMEM2NUJFOEQ3OTZCODlFQkI1MUQzNzM0MTFGMjZCRUI5NzIKLToxMDAzNzAwMEIwQkQ4MEY0NjFENDU3NTFFRkQwRkQ2M0E4ODdBMDNFOTMKLToxMDAzODAwMDNBMjdCN0MyOTIwQkYzRkM2QjZFODU5MDNCODlGNzQ3MTcKLToxMDAzOTAwMDc2M0YzQTVEMjY3RjBFRkZEMkUwQTMzRjg3N0VCMkNGNDUKLToxMDAzQTAwMDhGMDM3MDdENkE4QUMxRkZCRkUyQTc0MzA5Q0YwRjI0ODQKLToxMDAzQjAwMEQwNTM4N0U2RjZGQkZGRDNEMUZGQkY0MkYwQTYyMzlFQzIKLToxMDAzQzAwMDlGMTI4M0U0RTc1RkNDNTRGMjFGMkY0NUJGM0FGMUMxN0YKLToxMDAzRDAwMDZFRjI0QkRGREFDNDk0RjUxNDQ3MEZBRUMxNzJGRDEyMTIKLToxMDAzRTAwMDI2QUY0N0JGNzQ2NTkwRUFEMTJGRkRDREM5M0M0RUU1REQKLToxMDAzRjAwMDhEQzI1RjhDMDM0NTk3RDk2RTI4QzdGMEU5M0VGMjczMzIKLToxMDA0MDAwMDM3NDAwQjVCMTRGNDIzQzQzRURGQzg0MkQzMjVDNDhCQjIKLToxMDA0MTAwMEFFOEJENjk4NzYzQTM4OUM2RUQxRjA2NUIzOURGQkI3MUIKLToxMDA0MjAwMEE3QUNEQTIxQjIyODNGNDNDQTA0QkZFRjFFQTQ4NzlGQkUKLToxMDA0MzAwMDlBQzlCRkZBOUZEQUZBRUFGMEQ4OTM1MzkxOENFQjk1RjgKLToxMDA0NDAwMDg0N0UxRjdDRUUxRTJCQzlEOTkzMjZCNjA0RjFFNTQxQUMKLToxMDA0NTAwMDM3QkI2NTM2RkFCM0VFNjZGRTVDMzNFMjg1OUMxNUVEN0MKLToxMDA0NjAwMEVGRDJBRkVCMEZEODk3MjA5RTREQ0JFNTc2ODA3RTNGNDUKLToxMDA0NzAwMDkyNjNBNjMyRjlBQjQ5M0Y0REE2RjgzQkIwQTU3MTg4MEYKLToxMDA0ODAwMDg3NjVEOUJBNUVDQ0M2QTE5RkZDM0Q4RDNGMzVEQ0U4QkYKLToxMDA0OTAwMDA4NjI3QjYxMTNFNzY3QjM3MkI5M0Y2MTU2QUU4NUQ2RDgKLToxMDA0QTAwMDRGMkZGN0ZCOEIzNDNDODM3RUE4QkRBNDg5MkMyNkZFRkUKLToxMDA0QjAwMDc3NDNGRkYzMEY2OTc2MjhBM0Y5NkU1QzlBQzRGNUU4RDkKLToxMDA0QzAwMDdFN0MzNzExM0Y0QjJFMEU1ODgyQzQ0RjJBODg5RjQ1QTEKLToxMDA0RDAwMEZFRTBGMDIyNUNBQUNFRDQyREM1NzlGQzcxNEUxMkMzODkKLToxMDA0RTAwMDdDODUwNTVBN0NBOTI5RDc0REVERUFGMUE0MzhGQUQ3QzUKLToxMDA0RjAwMENEREQ5RTAxNzlBM0UzQTcyRTY3MEUzOEY5QkMyRjM1MTkKLToxMDA1MDAwMDJGQzA3OEFENUE1RjQ0RkM1QjFGQzcxNDgzNUU5Mjg4OEUKLToxMDA1MTAwMDJFOUFCNTc1MzNDNkM1MDBBRUM5Qzg2NzBGOThCOERENDkKLToxMDA1MjAwMDc1MDAxMDhCRkM1NjlENUFEQzEyRUM2NDk0MDMwN0Y2QTAKLToxMDA1MzAwMDE1OTA5RTNENUZGM0E3ODI5QzI0RkIyQTAyRjI4MkFGQjYKLToxMDA1NDAwMDc3NzBGMzQyN0NBRTMzOEZFMkI5RUY5OTQzQ0YzQzg1QUQKLToxMDA1NTAwMEYyRjYxMEI3MjNGNEY1Mzg3MDYwNzgwOEU5NzdDQTk5OTUKLToxMDA1NjAwMDBCNTkwOEZGMDNBNzdGMzQxQ0UzRTQwN0I0Qjg2NDlENkMKLToxMDA1NzAwMEE1M0I5RkVDN0QwQkQ3NTNFQjVDRERGOTA4QkY5NzM1QUUKLToxMDA1ODAwMEJDQTk0QjgyMzJEQzFGMzkzNEY4MzBGMjFGM0RBRjAwN0EKLToxMDA1OTAwMERGNzNEMzdDQkMyRUY0Mzc5Q0QwRUNDOEUzNjA1N0UyMDkKLToxMDA1QTAwMEI4ODA1QUZBMzA1RTBBRUI5RDg5RTVDOEJBNzRBRUVGOUUKLToxMDA1QjAwMEMxQjgxMDJGNEUxQzFBNEJGM0RCNjhFNjc4QUNFRTE3NkYKLToxMDA1QzAwMEM4M0Y3MURDMUMzOUQ1MENDRjFGQ0Y5Q0M4NUE2NDk0MkUKLToxMDA1RDAwMDc3OUYzRUQ1OEJFRDZGMTc5OTU1QzZCQzhENEYzRUVFN0MKLToxMDA1RTAwMDgyRTdDRjgzOUQ4QjdFQjM1QTUzNjA0NjI2RjI4QjE3RUEKLToxMDA1RjAwMEI5QkQ2RTVDMDc5NDdGRDE3MUJDNzMyQzkyNDU3RUJERjIKLToxMDA2MDAwMDI1RDk5RDg4M0ZFNzBFMTY1MTNFMTJGM0M4NEM4NTcyREUKLToxMDA2MTAwMEUzN0U2RURGMThFM0NCMjdDREIxRjg2RjZDMTdFNzg1NkIKLToxMDA2MjAwMEZFQjU0NkZDOERGMjNERkFGRDM4RUQ3RDUxRjk5QzM5NjEKLToxMDA2MzAwMDlDN0YyN0MwNjNBQTM3RDg5MzFCNjVBNzM2QkU5MjQ5MTMKLToxMDA2NDAwMEZDRjhDNEZEOUZEMDdBQjI3NjFFMzczRDY5RjZDRkMzNjEKLToxMDA2NTAwMEYxQjkyQkJCMkQzNTUxRjhGODNCOEQzRkQ3NUFCOUJDQkEKLToxMDA2NjAwMDA2RkU2Qjg5RTYzNzdBN0Q1OTA1OEIxQkRGN0Y1QkEzMUUKLToxMDA2NzAwMDczNjcxRjk3N0I4M0VCMzk5RURGQ0U5RTEwOTE1RkZDRTMKLToxMDA2ODAwMDJFRDc0QkVEOEREMkYyMTQ2RTY3N0YzQTZDNDVGREE0RTgKLToxMDA2OTAwMEIzODRGMjIwNDZBREVBMjYzRTAwRTMyNUZDM0NCOTM5OUUKLToxMDA2QTAwMDg1RjgyM0RCQzBGMTc1RDEwRkFEQzQzRjE2ODFGQ0UwQTYKLToxMDA2QjAwMEY2MzZDRkNCNjIxQjc4RkVDNUE5N0I3Qzg0Q0Y2NUFCQjkKLToxMDA2QzAwMEJCQ0I4ODFFREM0QzQxQkRFNEE1QjZGNzU0MTFFQUU3NkMKLToxMDA2RDAwMEVGMTY0QTMwRUY2QzdFOUI4RkVDOTQ1QkY3Rjk2ODdERTgKLToxMDA2RTAwMEE3Njg3Q0JERDZFQUE3M0MzM0Y2Mzg4RkMzMkQ3ODc4NEYKLToxMDA2RjAwMDI5RjU1MzlGQ0NEQzIyRTk3RjIxMEJDQUU1MjVCQjA1RjgKLToxMDA3MDAwMDg2NzQzNUE1OTNGM0ZGM0FBOUZCMzBFQTkxQzZCQzA5N0MKLToxMDA3MTAwMDE2OEE4RDJGQTMzQzYyNTE3QTI2Q0ExRjY2QjAwQjYyREYKLToxMDA3MjAwMEQ3NURCRDI0Rjk2Qjk0MzdFNkJDRjhGMjE3RUMzRDRCNkUKLToxMDA3MzAwMDFFNUY1NzJFMjdGNjBBOUM2RjY4RjJCNzFFRTUyRkVBNTgKLToxMDA3NDAwMDZBOUFEQ0QzRTVFNjYyNEQ2RTlFMTJCOURDNUU2NDdEOEEKLToxMDA3NTAwMDg4QUVDM0YzN0MzNENFNUIzMTFFNENGMUNGODgwNUY1RjcKLToxMDA3NjAwMDkzNDQ3ODMxNUMxQjk3OEUxNzIzMzA0OTY2RTgwMDVFMEUKLToxMDA3NzAwMEQ0OURFRUVFQjU5MjlEQTlCQzg4NzFFRUJBNTVBQ0RCNjYKLToxMDA3ODAwMDA5NzZEQTIyQTk4OUU0QzMzMDk5Qzk5NDhGMzczRDQ4QTQKLToxMDA3OTAwMEUzNEE1RjA5RkEzOUFDRjMyMjhDREQ0RUI4NzRCRDYwRDAKLToxMDA3QTAwMDkwMUU2MDkwRkZGQUI4NzUzQzMxRUE3RjUzNTY4NTQ0M0QKLToxMDA3QjAwMDhBMzNFNTMzQkFBRjVGNjVENjU5ODJFM0FEQjY3MUZERDIKLToxMDA3QzAwMEJCREFFNkU4MTZEMURFQUMzNDlGOERCNjM3QUEyNTdGQkEKLToxMDA3RDAwMDc5MUVDOUNCMTFFRTUzNjM4ODQ1MzA2QzU3RjFGOUFCRTQKLToxMDA3RTAwMDQ2NEYxQUQwMkI5MzRCMjM2QkVFODdGNkNDNkM5QzA5QUIKLToxMDA3RjAwMEY5QTRERUJGRTg5QkI2QjgxOEUzN0E1MjFGRDkyQjJDQjgKLToxMDA4MDAwMDgzQzlCQkEwQkZFQjhCMzk1QzkzNjExRDc2MDA1Q0NEQzcKLToxMDA4MTAwMDkyNEFGMDMzREI2NDc3OEIxQkQ3QkY4RkUyMzI5MUExMTIKLToxMDA4MjAwMDhDRkM3NEZBN0E2RDczMzIxNUYzMUNBRjJGRTZGNDdERUQKLToxMDA4MzAwMDdEMzFGNzI3QzNGQjE0RkYzNTE3QzJGQkQwN0VDNTAxRkUKLToxMDA4NDAwMDNCRDFFNUM3RkI5RDIxOTRDRjIwNzc0NkI5QTEzRUVENzIKLToxMDA4NTAwMEY3NjBBNzQwRjlEQzAxMjdFOTI5RTczNDc5RTFEMUZEMDgKLToxMDA4NjAwMEI1NkMwREI1Nzc5Mzg2MzcyQUFCMTg4RUY2MDgxM0FFQTQKLToxMDA4NzAwMDFEMEU2MzY3QkE5RTVDRUY0RTE0QzdENEVBN0Q3RDM3QzgKLToxMDA4ODAwMDcyRkNCNTkyQkVGMEIxM0JGQzdEMkNDMzc4MjgyNzY3ODMKLToxMDA4OTAwMEI2ODY1NzhERkJBNjk3REM4NUZDM0JFMDUwMzhENDgzQTkKLToxMDA4QTAwMDI1QThGRjU4QzVEQjZFQjQwMUIwNjc4OEFCMjI3NzIyNUMKLToxMDA4QjAwMERFOEY3NEM4NTY3OEE1NzJENEJCQkY5OTBCRTUzRkVDQTgKLToxMDA4QzAwMDMzMzMyQkUyQ0ZBRUVCNTJCQUYxMzVDOTlGMTExODNCNEYKLToxMDA4RDAwMDc4M0M0QjQzRTZFM0UxMjgzQTVFQjYzQkI2NUNERjE5NzEKLToxMDA4RTAwMDVCNkU2NEQyRjE3MDE0RkY2RjdFNzdFOTJGNUU4QkMyNkUKLToxMDA4RjAwMEI3QkJGMjlDOUU1M0M5MEM3RDZGQ0E0NUEwQTc5Mzc3RTYKLToxMDA5MDAwMDc3QjExMzI4MEJDNUVGQTYyMDdGNUMwMEU0MUY0RkFGMjMKLToxMDA5MTAwMEY4RTRFRTI1QkY3ODBEOUU5MzJDMTVBRDFDOUZCQzE2RjgKLToxMDA5MjAwMEE0QUYxQUQwMUJFMkQ5QTEyNTc5N0M3REFERDZBNkQzODAKLToxMDA5MzAwMDNCMDAzRUQ2OTdBRDRBMEJCQzM1MkIyRkI4MDFERjZGN0QKLToxMDA5NDAwMDMwNDU3QTcxNURBREEzQ0U4RTQzN0Y3NkM1QTgwQjk0RkEKLToxMDA5NTAwMDRGRjBGMTNGMzMwNUUxRjRCMTdEMUFFMUQzQzc5QkVERDAKLToxMDA5NjAwMDVFQjQ1MzNCQjIxQ0RDMEZGQjhBMTAxMkI4REQzMjZCNTUKLToxMDA5NzAwMDUyMUFFNjhCRDA1QzgwOEY0NUQ2NkM0NjNFM0REOTJBMTQKLToxMDA5ODAwMEFGOTY2OUJBMzYxM0FEMzc1ODZGNzBFREIwQTg2QkQwMUIKLToxMDA5OTAwMEFGREEwMTA2NjQ4QjgyNzY1RTlGMEI4OUUxOTdCODhFOTEKLToxMDA5QTAwMDg4REZFMkIzMTYxQkZDRjRCNUY5OEI1QUUwQjk2NTgxMTgKLToxMDA5QjAwMDI0ODY3OTdDRDI2NzUyMDBGMUVDNUU2QzJBQ0FFRUQ5QUIKLToxMDA5QzAwMDlEQzdFNTRGQkQyRDZDOTkwNkNGMzU1RUI4QUQ2QUE4QzEKLToxMDA5RDAwMDY5QzBDRjZGMzUwN0ZEQzM2MURDRTZBRTkyRUVFMTcwMTIKLToxMDA5RTAwMDZCNzFGMzc0QjJFRjgwREY3MkJFNzg4OEYzQzVDNTc3QTAKLToxMDA5RjAwMDRFQTNGQkMyRUMyQTlBRUYyOTk4MkZDMkU1RDVDRDU2MUIKLToxMDBBMDAwMDlBRUZBOTkxMEVCMkI3NEY2RDEzQThCQzU4QjY1MDFFRkQKLToxMDBBMTAwMDIwRTgyNzQzQTY3OUYwQkU1OUI2QjJDMUYwNjhEQzc0NkQKLToxMDBBMjAwMEVGOUFDRDUwRkZGMzRDOTEwOTgwRkZFRjZGRkQwOUM1QTAKLToxMDBBMzAwMDIzREU2N0JDN0Y3NTlGNDg3QUNGRkI3MkE0QUMxQkUxQjUKLToxMDBBNDAwMEU5NkQ3MjQ1REI5MzhCQjc4OTAxRTQ5NzhCQjdEREZFQzcKLToxMDBBNTAwMEYzQzkwOEI3RDkzNzk1MjIzQ0E2QkE2RjRCRjMzQTA2Q0IKLToxMDBBNjAwMEVBNzU3RDRGNEEyRDdGMEFFOTcyRUE2N0QzRkJBNkEyOTkKLToxMDBBNzAwMERFQjUwREU4MDZDNjJEOTk1ODEwRUQ4RkQ3QjY1RDRENDEKLToxMDBBODAwMEZBRjZFMkVBMjQzN0NFQ0ZCQjc1RDcwQzk0NkZFRjU3NTYKLToxMDBBOTAwMDBGMzNEMUJDRjYwODRDNDY3OEI4OUJEM0YwRkU2MjQxQzgKLToxMDBBQTAwMDBBQzRDM0FCNDU3OTNDOUUzMDZEOTQ0MzQxN0ZDM0UyOTkKLToxMDBBQjAwMEI3NDRDMjE3QTBCMzFCMzE4RTUwQkZDRDRDRkFGQzZCQUMKLToxMDBBQzAwMEIzREZGOUNENUNDRjAwOUQwOUIzMzdDRDlBODJDRjNGMUMKLToxMDBBRDAwMDZEQTZFN0ZCRjVBOUFEMUZCRThCN0UwMUZDMDNDOThFOTkKLToxMDBBRTAwMDcyODhFMDY3QTQzQkVCQTg1NUY5MzgyRTIzRkQyRDVFRjQKLToxMDBBRjAwMEREOTRDRkUzRkI5NzQ2ODc2QzJCRDAyMUYwRTNCMzQwMjYKLToxMDBCMDAwMDI3MTc0RDdGMTcxREZFRjk1MkU4OTA4RDQ4OEQ5MURGMTQKLToxMDBCMTAwMDgzRjk5RTRBQ0ZFOUYxNTE5QkMyRkNCQjFDOTQwRkUzQzEKLToxMDBCMjAwMDE3ODA1RjhGQ0M5Nzg4NEU0NkU2NUJFODM5RTlCRjU2NjEKLToxMDBCMzAwMEVDN0UxM0UwRjQ3ODVFRDA5MjhGN0ExN0YzOTdBMDdDNjYKLToxMDBCNDAwMEY2NDZFNDBBNzRDNTNBMzRCRDkxNkRFNUY5RTE2ODVGOTMKLToxMDBCNTAwMEUwRkE2RjFDQ0E5RTVBMUZFNTlGQzlDQ0Q3RUNDMEJDRjcKLToxMDBCNjAwMDYwMEFCNjczRUU3NzE3N0E3MUJEMUFCMkNFOEU0M0JEQTYKLToxMDBCNzAwMEJBRjFEMzNGNTM1RTg1RTMyMENGQzc3MTI4MTFDQTUzMjIKLToxMDBCODAwMDMyN0IwMjg0OEYzQURGNkY1NEI4MUMzMkNFQUIyRDlGN0MKLToxMDBCOTAwMERCQUQ4RDlFMDhCNUIzQkY4MEQzQkIxRThGRENEMjlDNkUKLToxMDBCQTAwMDQ0NzFBMTJEOUU5MDlERkI1OTQwREY4M0Y2Njc5NjhBODQKLToxMDBCQjAwMEM0Njc2Q0E1QUQwQ0U1MTgyQjE3Mjk5RTMzRjVDMjJGMjEKLToxMDBCQzAwMDE4QzZCRjdFN0VDNTc0MDVGNTRBNDdFOUFCRDIxMDlDQjYKLToxMDBCRDAwMDY3Qjk1OUFCN0Y3RTZEMzZENEZGRTI4QUFCQzgzRTVBMDcKLToxMDBCRTAwMDkxMjE3QTUxQUY5QTU5OUFBMzkyRkNGNEYzQkNEREE5RjIKLToxMDBCRjAwMDE3NTI4ODBFNjcyRDlENDU3QUE1M0VERTAwQjM3OTFERkMKLToxMDBDMDAwMDgwMjdCMzgxNThBM0YzOUI2NzVENjFGNzNBQTJGMEVCQUQKLToxMDBDMTAwMDhGRUQ0MjE1RDdBQkJEMjlENzhGRTU3RUExQ0U2MjJFRDEKLToxMDBDMjAwMENGQTNFMUIwMjJDMzQyRkRGRjM1NzdEQTY0ODRFRkQ0NkQKLToxMDBDMzAwMDJCRjkzQTdDQjBDNzFBNUEwREZEN0U2MDhGNkY0NzU2NkMKLToxMDBDNDAwMEU1NzM3RjZCQjY3NDBERjFBNURCRjY1ODI5M0U3RjQ2NDAKLToxMDBDNTAwMDg4RkZGQ0FENkI0NUNBMkI1QUJBNTY2MDIxRThFRjgzN0EKLToxMDBDNjAwMDY3NUVDQTQyQkVGRTg3NUQyRjY1RDU0NDhEMjdEMUZCRTYKLToxMDBDNzAwMDBCRjMxM0Y5NzdCQjE3NDREQkRCMzMyRDNDMkVDMDI2NzcKLToxMDBDODAwMDU4NjNGQ0JCMzM1RDVBN0VGRTk3OEM3NzdDMkJBMTlGMEIKLToxMDBDOTAwMEZGQTcyMzcwQkM2RkY2RkJGOURGMTgxMTFERUZFODhGN0IKLToxMDBDQTAwMDVCMjlEQ0NGNkY4QzU3RTU5NkZGQkIzNjVFOUUwRkRENzAKLToxMDBDQjAwMDJDNjlFMzU1QUMzQzZFQjE5MEM3QzU1NzFFMUE0Mjc4RkIKLToxMDBDQzAwMDM3RDMxMjc5ODBFMjU5QUY4OEIyMTZEN0YwREJFOEZENEUKLToxMDBDRDAwMDBDNUU5RjYwNUVDQ0VGQ0ZGNTk0OTFCRjg5QzYyMzc0MDQKLToxMDBDRTAwMDA5REQ0RUQ3NTc5ODFGRTM3MTBDRTNGQzZBMEU4QTcxMzkKLToxMDBDRjAwMEUzNzI3RjJEOTA3OUJDQjMzODQyNzZENUYxMzc5RUMwMzAKLToxMDBEMDAwMEM4N0IzRkJFREIwRkZBNENEMTc5RjRGREZBQUM4NkRGMkQKLToxMDBEMTAwMEQ3MjE3RUMzRkNFQzZCNzkzOTExNUUyN0UyNTcxOUY5QjQKLToxMDBEMjAwMDlDOEU3NUZDM0VCRTM2MjcwNUYxRUQxRTVCNDNCODE3NjEKLToxMDBEMzAwMEUwRTcxNzUzOTg3RDE4OTRCNUY4QkZGQTJFQ0Y2MzE1RTYKLToxMDBENDAwMEEzRUMxQ0E0ODM2REVGM0FDOUNFNjkzNTM3M0Q4RUZCMDkKLToxMDBENTAwMDdFRDQxNjg5RUQ4MkZCOUVBNDg2NTAwQjk0QkQ2NjI3MzcKLToxMDBENjAwMEU1NERERDkxMzQ2QjA3REE3NTYxNTA3MDA1Mjg3RjkyOEYKLToxMDBENzAwMDc0NkMwN0VBMDlDQzk2QzJDQ0QwOEY1QUExQkQ2RkIxNzIKLToxMDBEODAwMEM5QURBMDVGM0M5NkVDMjJGRUQyQkM4MDkxRkM0RTY3QzAKLToxMDBEOTAwMEREODIwMDAwMzk5ODlGQ0RGREI0Q0I1RTE0MjhGRjE4OEEKLToxMDBEQTAwMDI4MUVGNTNFMjUyN0JFM0VCQTU3QTM4QjVGNjEwMjBENzQKLToxMDBEQjAwMEM2RTVBN0M3N0ZFRTYwQkVFRTE3OTM4MkUxMjgzQkVGNDIKLToxMDBEQzAwMDVFNDFGMTEyREY4MTNGQ0M4RjM0QjNCRUI5QzQ5NzQxOEQKLToxMDBERDAwMDhGRkYwNUM4ODNFMUUyOEZDOTNGN0JFMkVFRTBFM0YxREMKLToxMDBERTAwMEY2NDlFOEQ3MDVEM0UzREJFOUFGNkJFMzJCNkMxNzQyOTkKLToxMDBERjAwMDY2MTdEMUFGNjk0NzBDRkQ2QTcxM0M2NzlBMDIxMjA2MEIKLToxMDBFMDAwMEUzQjczQzRFOTdDQkY0N0NGOTRERThCNzFGNTZDRUM3RkQKLToxMDBFMTAwMEU4RjI4NzE5RUExNzE5RUREN0IwRTAxMEE0QTcyOUU5N0QKLToxMDBFMjAwMDI4REY1NjJFOENGNUE3NjVENEFDQ0QyNEJGNUVDREY3NTgKLToxMDBFMzAwMDY3QTFGQ0RFNjQ3NkFDMTU1MkYwMUFFQjhGREI2NEYwMzAKLToxMDBFNDAwMEM3N0QxMTVGQzg0ODQ4Mzc5MzMzRDBCRkIxNjkyMEZFRDIKLToxMDBFNTAwMDQ3RjhEMzNBNUYwRTg5MDJDRDgyNDVDN0I1RDM1QUJENTQKLToxMDBFNjAwMEJENDFENDgzQTZEOTk0OURDQTYwRkE2MUU1NEEwNkNFRjUKLToxMDBFNzAwMEFCQkM4MEMzNEZBN0U3NDYwRDM1ODU4MzAyRDlBNTgzNTgKLToxMDBFODAwMEY5QTEwNkNGRkExMTA0NEY3QkZCMUQ2NDM3MjU5NzcwM0IKLToxMDBFOTAwMDNGNzZGMkQyOUEyMEYyOUY2NEUwM0Y2OEM3NTkyQzREMEEKLToxMDBFQTAwMDAyQURGRjE0NkVCN0FEMTQ3ODc5RTUzNDU5NTZFMTc5ODcKLToxMDBFQjAwMDhCNEJDQjk3QkQ5NkU3NjdBRkI0MDc4M0QxRjFCNENCMkIKLToxMDBFQzAwMDREMkJBNjQ1RTdFNUNBMENERTQ3M0UzQzg3RjczN0QzRjYKLToxMDBFRDAwMEI2OEFFNzA1MDc0MTQ3Q0ExQzgwNjM4NTA2QzdEQ0YyNkUKLToxMDBFRTAwMDI0OUVBNzdFQkI4REZDNUI1QkVERUQzNDVFOTM5N0RCQjAKLToxMDBFRjAwMEQ5MzVFQkVEQzRFRjg2OEI4NTE0MzdFOTMxNzNGQzUwOUYKLToxMDBGMDAwMDlEMzZBMjU3QTVFNzZEQ0EwRjFCN0U1OTg2NTdGNDQ1M0IKLToxMDBGMTAwMEUxQ0Y2REJDNUVDNzBCNjZDODJCQjA1OEJDQkRFOEJGNDcKLToxMDBGMjAwMDgzODEyODk4OTdCMjUyRjBGNjU2RDBCQ0U0ODhBQUUwQTQKLToxMDBGMzAwMEJDMzVCRTNDMkU4OUNCMTEzMDM3MzMzODVDNzk1Q0NDNjQKLToxMDBGNDAwMEIwNUU4MDM3RENBRjNFRDZDMUZENDYyQ0U4MjVCRENCNzgKLToxMDBGNTAwMDMwREZDMTc4QjNCRjEwRjk2RDRGM0ZERTc0MTVDNkUzQzMKLToxMDBGNjAwMEI3MEZCQUJEQkQzQkEzRjE4NTc5RDdBMDVGRjUzRTEzOUUKLToxMDBGNzAwMDhCQUM4Rjg3M0Y0QUFDOUQ2RkNDOTMzM0RBRkIwRENEQTIKLToxMDBGODAwMEQzMDM5QUZEQTFEQTY4M0QyRDY0N0YzNERDMzkyREMwOEUKLToxMDBGOTAwMEVEOEZDMjE2RjQzRjM1QUUwMjQ5MDVFRjRDM0YyOEQ4MUQKLToxMDBGQTAwMEIwQkRDNjM5MkVCMkJGMUJCQkY2NTJGQ0JDQTE4QTI5MEMKLToxMDBGQjAwMDM4OEMxQUNEM0ZBQ0NGRjNCODk5QzdGMTQwNjY3NTYyNTMKLToxMDBGQzAwMEZDQkVDMzFEREU4RUZCRjIzQTk2RUE3OTNDM0NBRjQ1OEYKLToxMDBGRDAwMEVEMTJCNDNDMUUzREVGMkI3MjBDRkQ5RjFEODI5N0ZDNjEKLToxMDBGRTAwMEEwRkRGQkZCNjBGRDc5RkVDRUE1RTU4MTM5OEIwMzNFQkMKLToxMDBGRjAwMEI0QzQyRkNGN0JFMjk3NDk5MzJFMjE4RjU2M0REMzgxRTYKLToxMDEwMDAwMDc5QjI4OUYzNjg1RkJGMDFFQjZEQjgxNjVBM0RBMjAxNTIKLToxMDEwMTAwMEU4Q0I3QUQ5NkZGNzYyRkVDRTQwQkQwNDc2QTdBRDRCMjAKLToxMDEwMjAwMEUwRUZBQkQ3REU3MDk1NDRGQjcyQjRGMkExNDdEMDFGNUUKLToxMDEwMzAwMEZFQTA5REM1RjQxNzNEM0VDOUQwM0U5QTk2MEVBRkZFNjgKLToxMDEwNDAwMEZDQjZEOUQ4REVBMzEzQjRCMkZBQjc4N0ZEMzBCRTA3MTkKLToxMDEwNTAwMENEQjFFRDExQ0E2OEVGNjM0MUVGQ0YzQkU2OTk4RTBEM0MKLToxMDEwNjAwMDIzMDZGNDc2RDBFM0VGMkU5ODM0QTBCRkRGRkJDRUNDN0UKLToxMDEwNzAwMEY2RjFEMDU3QjJGQzI3REEwN0E1RUJFMThEMUU5RTU3OUIKLToxMDEwODAwMDZCQzRGM0Y1MUExRjAzN0I3ODA2QUFENkY3Q0U1OTFFNTgKLToxMDEwOTAwMEMwNzZGQkYzREUwRUNFRjdBMzFEQUNFN0JEMzVBRTBBN0UKLToxMDEwQTAwMEQwN0UyOEQwRkIxRjI4QzAzQ0RBREY5RDNENzU5OEExN0IKLToxMDEwQjAwMDlERjkwMUY5MDMxQTNGOTVCOERGMTlFQzA3MDFGMEM1NTYKLToxMDEwQzAwMDc2RjAyMUMyMUZCNkRCMUM0MkQ3NEU4NzVCNjU4ODhGNDYKLToxMDEwRDAwMDFEODc4NDQ5ODg1RjhDMzU2NUREMDBCMDNGNTVFMERGQjIKLToxMDEwRTAwMDg4RjMzODk3MjAzRUZFN0MwMUI3REIxQjBCMkIzNkU3REQKLToxMDEwRjAwMDIzQUM5RjE0MThFQUUzRUIwQkZGNDg3NjQ1QzNGRUFCMjUKLToxMDExMDAwMDI2NDVFRkRGNUJEQUY1MjhERjA3QjZEQjFDNzdERUNGOUQKLToxMDExMTAwMDE3ODgzQzhGNzhGRjBCMTQzRkY5MjAyNDEwQ0QyRDkxQjgKLToxMDExMjAwMDQyRUJEMERFNUNCMkM0ODQ5NjE1MkIwRENEQTczQzU5QTIKLToxMDExMzAwMDM2QzdDMjcwRkM4RjE2NzBCODM0RUVCRTRFQzVGRDg0NDMKLToxMDExNDAwMDhERjAwRjQ4ODA2RDA5MkMyMjdEN0JDQjFDOUIwM0UzMjcKLToxMDExNTAwMEQ4OEQ4NTM1Q0I4OURGQzk0OTdFMzRFNThDRTNFQ0NGNkEKLToxMDExNjAwMDdGQkIzMzg5RjI2OEQ2Nzc5OUFCRDA0RTJBMDNCQUY4QTEKLToxMDExNzAwMDU3MDdGMkQ1QTNCRTFEQzgzRjg3NEMxMDVCNjVDQzMzMjMKLToxMDExODAwMDhDQUY3RkJGNTBDNEY1ODczNjIxQTA3RUJCOTRFMjIyOEUKLToxMDExOTAwMDJDM0E5Rjc5NTQxN0I3QkY3QTBCMkMzMUZFQzlERTAyNjcKLToxMDExQTAwMDg5REVCQjQyRUQ5QjhFQjhGNjhBMTQ0RTQ2N0JCODkxMjEKLToxMDExQjAwMEY5M0Y0MkJGMTcwQjM4QkMxNDE3NjI5REU0MEZGNERDRjMKLToxMDExQzAwMEVEMjVCQkM5RTYwOURGMzcxRUVCQUY5MEM4NkVEMkZEMzcKLToxMDExRDAwMDA4RTdGNkE3OTMzRTM2QTUzMEY4MkJDNDhCMzIzMUZDRDYKLToxMDExRTAwMEM4QjcxMTZFRjc0OTVBN0M4OUYzOTVBQ0VCMUMxM0QwNDQKLToxMDExRjAwMEJFMzI3QkI4M0U2MzA3N0QwNkY3ODk1Q0I5RUVFNENGNkIKLToxMDEyMDAwMEE2MjM2RkY1MDQ0ODhGNjAyMEU0NzBCRkY5NzQ5QkMwN0IKLToxMDEyMTAwMEUzMkIwNkJEOTlDOTRBMjVCRTNGNDNGMzRCRTdDMTZBOUMKLToxMDEyMjAwMDlEQjIxMTZBQjY1RDFDODJGRTBDOEY4QUYwN0UwMzI2ODkKLToxMDEyMzAwMDMwMDRFQUFGNjJGRTM2NUM5N0JGNkE3NkU0NDYwQkQ3QUQKLToxMDEyNDAwMEQ3Mzc5QTZDQTRBRkVCRkE3MEIyQTc4RkVDQzRGQTRFMDIKLToxMDEyNTAwMDgxRkFBOTJGRkMzMUVEMTc1OEE2RTVBNUY3RTc4NzRCRDIKLToxMDEyNjAwMDYxQ0E5NzNGNTc5MEFDRTk2RjZEREMxRkM1RkFDODFGODQKLToxMDEyNzAwMEM2OUVFNUVCMDA5QTI3RTVEMUVCNzBEN0YzQ0FGNUY2RTkKLToxMDEyODAwMDJDNUFCQ0I0NUVGM0U3MDJDMEE4RkVCRjBBNzRCRDcwNUUKLToxMDEyOTAwMEI1MTY1RkQ1RjNGRTc5QkY0Q0YyOTY0NUZCMUQzNzU2NjgKLToxMDEyQTAwMDMzRDY0N0UzRjJCQTcwQkNGN0E0MDU0Qzg1RjBGRTcxNjMKLToxMDEyQjAwMEMwNjNDNEIzRTM2QjkzNDNCOERGNkJBM0QwRTdDN0I4OTUKLToxMDEyQzAwMDg3NUFDMkUzMTk0NjdDNEEyRkU0RkRBNkY0NDQ2NjUwQ0YKLToxMDEyRDAwMERFRDVGRTA0RkI4QUJBNjJGNzE1MDE3RjU4RkUzQUY0QTgKLToxMDEyRTAwMDUzNUFGQThFODJGOEZEQTA1QjdCRkYxQTQ2RjlFNEM2REEKLToxMDEyRjAwMDdENDUyMzBBQkRGRjNCRjcxNTI5ODI3RjI3NUNDNzE2NzIKLToxMDEzMDAwMEJBRjlCRTIxN0Q1RjkxQzJENzRCQ0ZFMzMwRUUyNzNBQzkKLToxMDEzMTAwMDk3RDkyREYxRkNGRkYwRjY1RDI0MkZBRDY0MTdCRUZDQ0MKLToxMDEzMjAwMDYxNkYxQkZBOTlDRjk3NTgxNERDNDc5MTc2RDMxQjZERTgKLToxMDEzMzAwMDk0NEYyMzQ4NEQxODhGMzRFQTAzNEZGOEE2NUY1NjM4NzAKLToxMDEzNDAwMDA5RjdBNUJEQTg1MEJFQjA0MTFGNDhFNDA3QTA1ODY5RTEKLToxMDEzNTAwMDk0OUZFODlBQzJBRkQ3MEY2MDZGRkZDNDg1Rjg3NjQ2QjYKLToxMDEzNjAwMDg4M0M4MDc5QUNFQTIxMzE2RTFFRUI5MkMyNDRGRTAwQ0IKLToxMDEzNzAwMEZGOUM2OEZEQjQ0RENGRjc3MjI3QzVFNDNGQjYyNUM4ODIKLToxMDEzODAwMEY3NEFBNEY3NEIwOUYzQkNBRTIxRkRBREFEM0ZDRkFCOUYKLToxMDEzOTAwMDRBRDdERjYyRjM1OEU1QTRDRkI1OTdGNUZFQUJDMkJFREUKLToxMDEzQTAwMDk4QjhGQzNGNkI3NEYyQzVGM0Q0RUM5ODA0RjM0QjY0MkIKLToxMDEzQjAwMEI3NUQ2QTlFODExMTBFNkQwOUU0RTgzRDg1RjFGN0RGQTYKLToxMDEzQzAwMDAyNTg2NDhDQ0JCNzYxNUMxRUFFOTJDMDU0RjI5RkVEQTQKLToxMDEzRDAwMEVEQ0YzM0U4MjY3RkYxMEIwNUU0RjdCMjI2Q0MzM0UwRkUKLToxMDEzRTAwMEY5NjdEMkExMDIyRjNFNzdBRjM5RTA0NzdCNDZERDZCMkMKLToxMDEzRjAwMEQ2RTQ0MEU4MTlGNDlCQjQxRENBMjQzRjFCMkIwQzhGODQKLToxMDE0MDAwMDQzRkUyOEI5Njc2NEUwQjkwNjZEMUE3RUQ2N0RGOTNDQzMKLToxMDE0MTAwMDgzQzc5MUNGMTlGMzBDNzY4NDI2M0M5MENERURFN0JFQkYKLToxMDE0MjAwMDY0RDBDQjc2MzAyRUE3RDQ4M0RDQUYwOUUzMjZCRjVFMzEKLToxMDE0MzAwMEU0RkU5MUE0QUYwQUIzNkQzNDhGMTNBRjU4Nzc1QTQ5QzUKLToxMDE0NDAwMDBGNTcyODZGQTAyNjQzOTQ1MUJFNzQ1NDk3OUQ0MkY5QkMKLToxMDE0NTAwMDc1MDIxNDU3QTRFM0RBNUI1NzkxRkQ5QTY4N0Q2QUQ3NDkKLToxMDE0NjAwMEM2QzY3MUY1RkI1Rjc2OUQ1RTI5RTRGQUNFNzFCNEVGRDYKLToxMDE0NzAwMDQ5RDBBQUU0MkY1RUIyNTYzODRDRjlCQTg2Mzg3MjM3OTIKLToxMDE0ODAwMEYyMTA5MjEzQjE3OTAxMUZEQkE3NTEzQ0Y2RkIwRjU3MDUKLToxMDE0OTAwMDUzMUM1NkRGQjdBQkVGRDc2NTVBQkNDNUJCNTYyMjM5RDQKLToxMDE0QTAwMEUxREQyRDg0QkMzRTRFMjYyNkIyRUQ2NTEzOUQxRjAyNjQKLToxMDE0QjAwMEUyNkQwQjhBNDQxNUE4RTYzMkI4MkQ5ODA0RDQ1M0JEQ0EKLToxMDE0QzAwMDZENTA0RTg3NzlBRDkzRDQwQzc4NkVDN0RCQzlFNDdGM0QKLToxMDE0RDAwMEJERDdFM0Q1RjY1MTcwRkI0QkREMjA5MEZFMDdFRDkyQjIKLToxMDE0RTAwMEZEQUNCNjAxREU0MDNCRTE0MjFFMTdGOEI0OTBGQkE3MEQKLToxMDE0RjAwMDAxNDU0MjM0MUVFRERBQTZFNTUxRThGREI1MzA1MzM3MUIKLToxMDE1MDAwMDVFNEQwMkJGREUyQjRCNTVGMUY0M0JCREJEMzY3MzkzRjAKLToxMDE1MTAwMDBERTMyRDkxOTEyNjhBNjc3RTZDRjFDRkExNzg2MDZBRTgKLToxMDE1MjAwMDNFNDM3QkIxQ0REOUI0QjY4QUQ3MTMwRkZERDgxRTA5N0YKLToxMDE1MzAwMDUwRkQzNzI0NkUyODMwNkYyQThFRjczNzFBREQxOEQ3MDIKLToxMDE1NDAwMDc1NjE3QjZDRDkxOEVGMzc5RTQzNTBDQjgyMDU5OTM5NzIKLToxMDE1NTAwMDgzRjdFNUZGNDY5Mzg3MUZBRkY3NjlFQkEyNTBCQ0JDNEEKLToxMDE1NjAwMENERUNGREE1MEZFNUUzM0E4OUU0NzBDQjA4MEUzN0QzNDcKLToxMDE1NzAwMDQ4N0VDRDc2NTdDRTIxMzlFQzA2RkQ5NEM2Q0JDNzlGNjkKLToxMDE1ODAwMEZEMEQ4RjgwRjREN0U2RTZGOEY1NTVDNzNERTgxQzgxRTAKLToxMDE1OTAwMEEyN0MxQTZGMUIxQTBERDA1RkRCM0EyMUM0RTFDNUM3Q0MKLToxMDE1QTAwMEZENjVGREQ1NTk0NTVGQUY5QzNBMjEyODRGNzUyMzlFQjcKLToxMDE1QjAwMDM5NDIzRjQ0QkY1RjZEOEI1NTQ2N0U3NjQ2RDBFODdGMEIKLToxMDE1QzAwMDlENDhGQzZDQ0I5MjU0MkExRjVGOUI0NzdFQTA3RUJBM0QKLToxMDE1RDAwMDNEQkQ2NjM5OUVBRkYwNjVGM0I2OTQyMjhFMTczRjM3NTYKLToxMDE1RTAwMEY4RTE2QUNBODVBM0Q4OEUxMUVFODg1MDkyMkU3RkUwNkEKLToxMDE1RjAwMEQ1RTlENzE1Q0Y0MEZFRDg2MDYyREU3NEQ0MDdENjFBN0QKLToxMDE2MDAwMEYyNDMwQ0Y0M0NENTFCQkNCMjA4RUQwRjRCNUYyRkU3NDcKLToxMDE2MTAwMDUzRTE3Qzg5RjQ2RkJCODI3MDdCRDQ3NDYyRUY0RjEwMEUKLToxMDE2MjAwMDVGRjZEQTI5REZCMDYxNTVFNDI5RjQ1N0JBQkRDMUFCRTIKLToxMDE2MzAwMEYwQkRCMzc3QkUzMzQzRjA1MjczQTQyNzlEM0Y1NDQwQUYKLToxMDE2NDAwMEU3NzVENEI0MTlDRTQxRDgxMDlCOTdDMkQ2QTZGMkJDODgKLToxMDE2NTAwMDhGOEVEOEZCQjg1RjNGRTZCRDQxRjkyQUVEOUFCRTFEREIKLToxMDE2NjAwMDJDNDJGQjYyRUE5NTNDQ0ZFRkMzQTUyNjg2NzhGMUExMTgKLToxMDE2NzAwMDlERTM4RjdBQkY1MzkzMzM0QTdFQjQ1RTVCQTNEOTM3MjEKLToxMDE2ODAwMEZERjg3MUJGOURGMEEzNTZEQkU3NjQ1QzhGN0FDNDBGNTEKLToxMDE2OTAwMDU4QjczQTBEM0YzRTdDRTFCMjdDQzQ4RkIzN0IyRkNCNzEKLToxMDE2QTAwMDQ3RkNEODY4NkVGNzIzN0RDREM5MEQyRTJBODI3MTlEMjcKLToxMDE2QjAwMEJDMkFEMDZCRTI3QzI5RkY1MkYwRjY3NkUzQjhGRTQxRkIKLToxMDE2QzAwMEZBNTU0NzUxMjJCREMzRkJEREU4Nzg0QjhGOTlGQkM5MjIKLToxMDE2RDAwMDU0N0JFQzNFQTE5RTRCRjRBQjI2RjY4RjE1RTVDNkZBODMKLToxMDE2RTAwMEM3MEE3M0UzRUE1NzM2RkJFN0VBNTc5NzNFMEY0NkZCMTQKLToxMDE2RjAwMEM0RjQzODRDOEYzM0YyQzA1MzUxRjA1QTY5RTdGOTI4REIKLToxMDE3MDAwMDJCOEI2NDU5MkRDMUY5RDVFNEQwQkVCM0RGRDk5NDlEOUMKLToxMDE3MTAwMEMyRDczQUNGMTgzRkUwMkIxNzcyRDZCNEUzMzhGQ0RDQkYKLToxMDE3MjAwMDZGRjk4QUU0RURCRDFDRkE3RDg1NzFCRkE1NzFERUJGM0UKLToxMDE3MzAwMDJERTBGOTMzQkFEREFEREI4MUM2RkUwRjY4RUJGREIzRkEKLToxMDE3NDAwMDIyRkYyMUI0QUJBNzVFQjg0ODdFODREMzc4MkUwRkY0NzUKLToxMDE3NTAwMDZCMEJGRDJCRDk3M0VDQTAyMEQzQkUzNTJGOEY4MzM2QjYKLToxMDE3NjAwMEVDNUZGODA0RkE1RDk3ODZCNEY4RTUzRTgxRUNGNUE1RTgKLToxMDE3NzAwMDRGN0U0NEY1RTdCQTZBQTlERTcxNTBFOEM2Mzg2OEUzREYKLToxMDE3ODAwMDA4MTNDOTZEM0RGRjQxRjdGRjM0MUUyQzIxQkY4RkVFQkEKLToxMDE3OTAwMEZGODE3MUVDNDczRjREQjIyNzYyMjFCRTg1RjYyNUJDMjMKLToxMDE3QTAwMEQ3MjBGMUY4NkU4Mzg3MjkyQUIyREFBRTU4QkY4OTlFMTYKLToxMDE3QjAwMDFGQjUyNTYwMjE3QURGNzI1MDA4QTEzRDlFNjYwOUZBQTcKLToxMDE3QzAwMDQ2MTAzQzQ3Qzg5NERGQTJGMThEQjc4QkZDMTc5MDVGQTEKLToxMDE3RDAwMEU5Rjk2QjdCNzJGQ0VGMTRGMUJDQjcyQ0NBOTNEN0Q2MzYKLToxMDE3RTAwMDIzRDgxRjE3RTJGQjJDRkVGMjZCQkVDRjIyOUM4MDVGM0EKLToxMDE3RjAwMEZGNjc5MTlFNjc3QjIzRTlDRjdGNjE4MTk0RjhGOUU3Q0EKLToxMDE4MDAwMDIxOUU3RkRFOUZFRkM2RjNDQ0VCNjYzMkI2REVDRENCRkEKLToxMDE4MTAwMDc4Q0U0QzNEOUUzM0EzNzBGOUQ5NkQ5MDlGRDE2NUNDQTUKLToxMDE4MjAwMDJGRUI4RUUyOUI3NTUyMUZFNUIxRUJFN0NBNjBCRTU5MDQKLToxMDE4MzAwMEY0RjMwREI4NEYyMzg3RTc5REM1QjRBM0YxRDM3NDcxQkEKLToxMDE4NDAwMDA1QzU3RkUyQzQ1REJGMUI2RDdGMUNEMUVEQUMxMjdENzEKLToxMDE4NTAwMDVGNERDNDgyRkU5RDk1MkQ5RTA4QzYxMThFMzhCNUZENDQKLToxMDE4NjAwMEJFNUEzRUVENEE3QkU0MDRGQTNGNTYzRTkzNEVGQjQ3OTgKLToxMDE4NzAwMEZBRjVGQjNENTZDRDdGQ0VGMUJFOEVGRjY0OEQ0QjhFQ0IKLToxMDE4ODAwMDkzOURERjg4RkJGQTg1MDE3QTlBOTlEMDJFRkI2OTJFMDkKLToxMDE4OTAwMEM2NjM4RUY0REI2NTZGRTRFMkZFMUI5RENGRDYyOTlDMDgKLToxMDE4QTAwMDVGRDQ3NTA5N0MxRjU2NjdFQzNFOUNEQ0QxNUZBRkJFRjAKLToxMDE4QjAwMEEwM0Y5N0U4RkQ4QUQxODlFQ0Q5MkY4MjMzRTdCNzQ3NUIKLToxMDE4QzAwMDEyRUQ1RkQyRjhBNDBFNDcyMzNGQkE1NEY4RTlGNUZEQjQKLToxMDE4RDAwMEYwMDNCQTI2N0U2QjgwOUZEMThGQTZGQkMzNTg5QjRDMkEKLToxMDE4RTAwMEZFMzJEMDQ5M0EzMTlGNTNGNzg3N0Q1OTc5Rjg5REQxMUYKLToxMDE4RjAwMEZGMzNGMkYwRkJBMzEzQzlDM0FGQjYzRTg5RTRDNEE1MUUKLToxMDE5MDAwMEFFQ0IyMDc5ODhFQjMzMkVCMTNDQ0MyREZGNzc2RERDNEMKLToxMDE5MTAwMEM2M0MwNDZEREM4NjNDODQyM0U2QzgyQzdFOEUwNUMwNjQKLToxMDE5MjAwMEM3MzczODBGMjEyMUZFN0Q0MTFFQzJERjMxNEY0MzFFRDQKLToxMDE5MzAwMEMyRTdDRkQzOTg4N0YwRjhBMUM3NUMxOEFBQzNGRDZBQTUKLToxMDE5NDAwMEU4NzdFOEQ5NjVBNkY4RkIwQ0QxRTFFN0Y5NjEyMkNGODkKLToxMDE5NTAwMDI3NjU3RTNBOEZCM0QxNjYyN0ZGODIzMTdGMEUzOEQ1NTcKLToxMDE5NjAwMDlBMjZENDJGQ0I0MUVGQzdGRDNDREI1QTQ5MkVENzY3Q0YKLToxMDE5NzAwMDhBRTRBQkM0N0M0MUQ5MUIyNzNGNTNBQTRFRTlGNjBFM0IKLToxMDE5ODAwMENFMTNDM0ZDNzczQTE3RTAxMkYzQzRGNjhFRUVDRkQ3MkUKLToxMDE5OTAwMEY0RkQ5REY5OUFGQjQ3N0Y4OTNDMzEyNThGRjNBNzU3Q0EKLToxMDE5QTAwMDFEN0YxQTEyN0Q1RTY2NDUzMTE4RUFDNTg5RjNGNDdGMDIKLToxMDE5QjAwMEEyRDE0REIyOTZERjZCOTM1NDE2RUQ4RjRBRjRERTJGMTEKLToxMDE5QzAwMDQ2NzM3QkU3NTU0QkU0RUQ0RUQ0QUJBMDE5OEM3QjY2OTgKLToxMDE5RDAwMDU4QzA5QTJFMUREOEVGN0VBQTIwNzAxNEYzOTQ0MTFGOTAKLToxMDE5RTAwMEExRjUzREI3RkZCN0U0RUY3RjNDOTNDOTk4MzdGRkI4NDcKLToxMDE5RjAwMDU5QTU3NTU2ODczMkMyNkIzRDlGNDFFRkU3MkVDREZGNEIKLToxMDFBMDAwMEZENjVGOUNGRkJGRjYwQjkyMDhERjlFRjkxMEI1RjFCRUUKLToxMDFBMTAwMERGMTk5NEY3QzRFOUYxRUZFMDM3NDQ3RkZERkNDNENDNTMKLToxMDFBMjAwMEUzNDFGQTc5MTc1RjI4RTdCRTZFM0U2M0M4RDc0ODM0QjIKLToxMDFBMzAwMEFGQkYxNjMwQzI5RkMyMzE4MUVDMzFFNDE3RjM5MzlGRTAKLToxMDFBNDAwMEYxNTJFNTVGNzIyOUU4NDMwODhGN0Q1NjJGOTI5QTREMzcKLToxMDFBNTAwMDNCRDc4MjZEQzhENEZEQTJGQzdDQzEwNzQ3OTJERUY5NUEKLToxMDFBNjAwMEExOUQ4RjU3M0ZBRjQzOUZDRkU1NjMwQ0Y4RjkxNUVENkMKLToxMDFBNzAwMDU4MjUzN0YwOEQzMTMwQkY5M0QzRkNCNEVGRjc1RTI3OTQKLToxMDFBODAwMEQ3REIyMkNGRjBCQzc3RTNGOTEzNDAzN0ZDM0MwRUVERjcKLToxMDFBOTAwMERDNUZFMzNFRkE2RjFCQzdGNzBGOTJERjBERkZEQkU5NTgKLToxMDFBQTAwMEU4MTJFNUY3QTVDRjIzRDY5RTNERTJFNDc5ODUwM0Y2NUIKLToxMDFBQjAwMEVDN0ZEQkJDMkU0OTVFRUI3OUM2NjUxNTdEOUFCRjVGNzYKLToxMDFBQzAwMDYwRThFRkQ3RkI2OUVDRTNGQjc0MUVEMkQ2NTNCRkZGOEYKLToxMDFBRDAwMDVCQ0RCRkY3RDYxOEZGQzM4OEFGQTVBNUREREI3MUJGMEYKLToxMDFBRTAwMDRBMDM3MzMxOENCQjM3NzRERUIxRkI0RDBGREY3RjRCODQKLToxMDFBRjAwMEU1NDIxRUFGNjQwMTA3RURDRjdFM0MyRkI4NzUwQ0M5REYKLToxMDFCMDAwMEMxRjAxQUE0Q0Y1MTFFNTY4NjcxODNGNTg1QjM1OUFEMjUKLToxMDFCMTAwMDgzRjIxMDQyNTgzRjZBNTU3OEZCOUJBNTk0ODdENTg0ODEKLToxMDFCMjAwMEY0QUFFNzIxOTc1REZDRDM5QUFBNTIxQTJGRjk3RjNEQjgKLToxMDFCMzAwMEQ2RDg3MzNCMEU4RkUxRjI0Q0JGQkUzMjQ2RDBFMkFFMzgKLToxMDFCNDAwMEZFNEMxQ0NGRDkyNTdDM0Y2QUEzQzcyRkEzMUY1OThGRkEKLToxMDFCNTAwMDdCMjc3QkZCMjg2RkEwNjExRjM3OEFDQUQwNTZDNEZBNDcKLToxMDFCNjAwMEJCNDYxMDdEMzVFQzlCNTY4MkYxNTBENjY5MkZBMUYzMTAKLToxMDFCNzAwMDdFN0ZDRkNGRDkzRTdCRTczMEYyMzc0RTI5MENCRTg0MzMKLToxMDFCODAwMDdDQzk1OTFBQkEwNkVERTg1MUQwMEZDNjREQ0ZFRUJENEIKLToxMDFCOTAwMEE2MjQxODg3NkZBNjhCQTkyQUM2OTVEMzQ1RDZGOTg4OUYKLToxMDFCQTAwMDNDQzBCN0MwN0U5RTRCRkVFMjM1MTFGMjYzM0QzRDg2RTAKLToxMDFCQjAwMERGNkZGNDcwQjlERTc4QjA5QTJENzQwQzk0MUQ5RUQ4NDYKLToxMDFCQzAwMEZENTczRjJCQkFFQTY5MUNDN0QzNjMyNDJEMkY5M0U3MzcKLToxMDFCRDAwMDgxRkE0MDBENDNCRkExMTE5RjdDNUExRTY4QjU5NkU3NUMKLToxMDFCRTAwMENDNTREQjQwN0U3M0Y2MTdFNzgxRUFFM0QzQ0I3QTFFNTEKLToxMDFCRjAwMDY4RjJBN0RDN0VDRjk2MkQ5NDM3RTI1Q0NCRjkyQTVCQTYKLToxMDFDMDAwMEM1Mjg2RTcwNDVBNDZGN0EwQUMwMjlCN0EzRkIwQTg0NjEKLToxMDFDMTAwMDUzMEE4MjlEQ0U3RjBEREYzNzFFRUU3Qjg2NDg1N0EwOEMKLToxMDFDMjAwMDNGNjQ3QkYzODQxRUQ0N0ZBNTc1N0RERkMwMjVGMUI2QUMKLToxMDFDMzAwMENCMTVFODYyN0MzQzJGNzA4MkU0ODBENDU0ODg3Q0E5NjgKLToxMDFDNDAwMEUyMkQzM0RGQTdCNDJFOTlGNENBOEVBQzNBREFBNzc0MkEKLToxMDFDNTAwMEVFMUQ2QkRDNzMwOEY0QUJDQTU2Njc2MERDMjE3QkVEQ0MKLToxMDFDNjAwMEFGMjgyRkMwQjk0Rjg4QkI5RkFEQjJEOEExRUQ2MzVBNDIKLToxMDFDNzAwMDlEODE3MTBDRTdEQTNFQjUxQ0RBQ0ZCRTVGNjA5QTE5MjAKLToxMDFDODAwMDlEMjk2NEEwN0Y1ODMyQTE3Q0FERURFMkU3REJENUI2OUIKLToxMDFDOTAwMEJCMkI2QzI0NkZCOEJGODY1REUxMjEzOTIyQURGQkE2NUEKLToxMDFDQTAwMDA5Rjk4NEQ0MDI1QTJDQ0NGM0YyNjIxRTlGQ0VFQjkwMzkKLToxMDFDQjAwMDREMjhBN0ZFRUQzMzMxNkUxQ0M5NTYzQ0IwREYwNUMxN0YKLToxMDFDQzAwMDU1NkY4REY0NjZGODA2RjI3Q0Y0N0QyRUJBQkZBNzVGREYKLToxMDFDRDAwMEZFRUM5QjRGRkU5RTRCQ0ZFQjhFREM0Qzc5ODM5RkE1OTkKLToxMDFDRTAwMDUxN0M2NUE2OEJEQjIzMjA4OEI0RjM1RDYyREYxRjc0MTMKLToxMDFDRjAwMEJFOEJBNkI3RTg3NkIxOTEwRThDNzlEMkI5RTVDMzg4RDAKLToxMDFEMDAwMDJFODA4Rjc2NkU5MTYzRjg1RURDN0NFOTY2ODlFQkRENzAKLToxMDFEMTAwMDMwMEZDQjRBMUNDN0I0MEMwNUZENzM1RjM2M0ZERDY4M0UKLToxMDFEMjAwMDRGRjdFQjM5OUE1RUEyOEZGQkVGQ0RFN0Q2RUJFQjMwQTYKLToxMDFEMzAwMDhGM0I4RUZGNDNENzZCREFGNDdERDA5RkYxRjNCNzQ2MkMKLToxMDFENDAwMDY5RjZDNEYxRjU3RjFEQzdDRjM5RDRGMzQ2NDI3NDk1QzcKLToxMDFENTAwMENDQzAzRjA5N0ZDMjU3QUE4ODA3RkJEQ0E2ODY2MjhBRUYKLToxMDFENjAwMDJGMzU1MDNCRUJGOEY5RkVBM0Q2RTZBQzJFMkZDNUFCRDIKLToxMDFENzAwMENDMDQ4MEY3RjEwM0NCNDY1MUZDMTZFODIyMkYwRTVEMTAKLToxMDFEODAwMEJDM0ZDNkNDREI1Rjk3NEM3ODJDM0RDNDI4MEI1MjcyMEQKLToxMDFEOTAwMEE3MTExRTRCOEY3MjdDN0Q2RjBDQzcyRjNENkY0RDhGMkYKLToxMDFEQTAwMDAzQkUzNTI2MzgxN0Y3MjlGNjlGQ0JEMTlDQzRDRkU1NjMKLToxMDFEQjAwMEQwRjJCRjlEQ0RFRkVDQzFGMzJFQjY2QjcxRTA5RTU3MTQKLToxMDFEQzAwMEM2Q0NBNkY4REMzQTQ5NDBGQkYwNjNGN0ZDNTFFOEJGMEIKLToxMDFERDAwMDVCQTBFMUI5NTNFQTYzQjIyMzlBNUU3QjY4RkY2MEY2QzkKLToxMDFERTAwMDIxQkVFRjQ5RDJGMjU0QTU3NTlFMUQ4ODlGQTIyRjQ4QUYKLToxMDFERjAwMEZCMjRCRkQxRDYyRDUyMUU5NDdDRjI5MTJBMkZEQTFEREUKLToxMDFFMDAwMDExMEJFNkFEN0REMDIyNDU1NkJCNDk3RjhBRjE5MzE5NkYKLToxMDFFMTAwMEZENUU0Q0VBQTRCQzlDRTZFMjdGQUMxREIyQjEzOEExRTkKLToxMDFFMjAwMEZFRjQ5NUY2NUZCMDJGRjA0RjdENTVCQzRFRTQ5RkJBOUYKLToxMDFFMzAwMEY0NzkxOEY3NUQ3MEZCODRCREMyRjM5QkUyQ0MyQkM2MkUKLToxMDFFNDAwMDdGRjlCNUNGNEJGNzVCMUFGM0Q1MDZEMTMxRjc3RkU4QjEKLToxMDFFNTAwMEY2OTAxRTdGNjA3RTM1MjY5RkJDQzcyQzc3QTNERTgzNUQKLToxMDFFNjAwMEY5QjkyRjI4QTg1NzNGNkQ4RkNFMjdGQjM3MERFRkZCMTEKLToxMDFFNzAwMENGRkQ2MzIxM0JFRUQ3M0ZBRkVEMzc2NjkyQjIxNkUzNUQKLToxMDFFODAwMEEwNzc4OENFNzZCNEVGNUEzMUNGMUZGNTRCODRBRjEwRDAKLToxMDFFOTAwMEI1REZFMTVEMjdFNTNEMzQ0QjdDM0YwNDUzRjk3RThBOTUKLToxMDFFQTAwMDk1MEI5QjlFQzZGNzU3QjZBNENCMDg3RkI1QTJFOTc5RTAKLToxMDFFQjAwMERBMkY2MTYyODE1NkI4N0VBMjdERUY0MjFGOEY5RUZGQUUKLToxMDFFQzAwMDlGNDg3RTBFQ0FGRkZGODJGRDBCOTkwOUY2MkZGQzg3MDMKLToxMDFFRDAwMDg2Rjc4NTBCMThFRDVGNjA2QkZEM0I3MDVDMUQyRDEyNjYKLToxMDFFRTAwMEMzNzg2RjZBMTUyRjhGOTI2Q0Y0RkQxNTNCRTY1MTBGODYKLToxMDFFRjAwMEExRkRBNjk0RUYxQzAxNzg2MkRFQjYxREYzQTg4N0UwNzEKLToxMDFGMDAwMEZFMTI3RUNFQTEzMEJCOEFGMDJGMTVFMDgzN0E0MUFCNjIKLToxMDFGMTAwMDk5OUY2QkE4REVFMDIwN0M5QTVFQzVFMzk3QTkwMTBCMzAKLToxMDFGMjAwMEYxOUZGMzRDQTFCQzdCMTVDRjNGRjMyMDlFQUQyNkZDNjcKLToxMDFGMzAwMDhDMzhEMzI4RkU5QTlBQ0JGNTQ4N0JDMDYyQjJGOTI4MzgKLToxMDFGNDAwMDRGOUFGMDM1MjJFODc5RDI5Q0VGNzVDQ0Y3NTJGRTdBQTEKLToxMDFGNTAwMEZGMzk4NzBCMTlBRENGQkFCQzE5OTlGOEREODE2MUQ3NkMKLToxMDFGNjAwMDU5MDQ4Q0Q3RTg3MkE2NDJDMzhGOEUxRERBRkJGNUZDQUMKLToxMDFGNzAwMDdEM0MwNzExQzdDNzU2RjJGN0ZCQ0Y0MUZDMUVBRjZGODAKLToxMDFGODAwMDk2QzI3NDhFMTBFODMwREEzOTdDQkM3RUU1REMzNEEyNkYKLToxMDFGOTAwMDFGNTFEQkU3Q0E2RUQyRjJGNDA1N0VFRUQ0Q0FCOUMzOTQKLToxMDFGQTAwMDc4QkQ4QkYzNDE3NjZCOTIyNkNGQjVGNzZGNEYwRDY5RjUKLToxMDFGQjAwMEYxMDI5RTZGQkZENEE0OUQxRkQwQ0U2MkUyQjkxQTlEREMKLToxMDFGQzAwMEE1N0VDMTdFOEQ4NzA3RjJFRTg5OUU1QkFGOTEyOUFGMUEKLToxMDFGRDAwMDUwM0ZDN0IxQzI2MUUxRkJCODZDQjE3NEY1NDI3MTJBRTAKLToxMDFGRTAwMEM3RkI3MkM1ODZGRERFRTJGM0ZCQzZDNkY1MEY4N0U2Q0EKLToxMDFGRjAwMDQ3RjM5NTYxM0E1RkI5RDU2MkIwQ0JEMjM5NUM1RDkxNTgKLToxMDIwMDAwMEVEN0NCRjk3RjU5MkVDQjJDNDcxQzU2NzMyNjNFMzhBODkKLToxMDIwMTAwMEJCMzNBM0UzOEFGQUZBNTYyQ0IxMTA1RkU5NzA3QjVGRjkKLToxMDIwMjAwMEMzRkNBMzJEMDA1QTNDMTdDRjM4RUYyREZERTc1Qjg3OEIKLToxMDIwMzAwMEVDQTg5NzFBRURDMTIzMDlGMjhDRTY4RkU1NzY4RjkyMTIKLToxMDIwNDAwMEMwMEYzMTdGNkMyMkY5OTIyMDRFNUI2MkZENkY4QTM3QTAKLToxMDIwNTAwMDczRkVEQjkzNjA3RjVGM0ZCQzc0QkRDOTY2OEM3QkE4NTkKLToxMDIwNjAwMDk3RTRGN0U5QjFGRDgwRjhBMEJGNTU2MkY2MkJBMTZDQUIKLToxMDIwNzAwMEQ4OEYwNjdDOTBGOEEyQkFEQTJBQjc3QTkwOEZGRTgwQzEKLToxMDIwODAwMEY4NjIzMzU4QUVENjI4QkUwOEU2RTg2NUM4OEY3QkVFMDYKLToxMDIwOTAwMDJFQTRFRkQ5QkM3NkI3NDJEN0YzNzZBMTUzMUM4RkQ3QzUKLToxMDIwQTAwMEM4M0NENDk4MTYzRjc3Rjg0NjNDRUZGOUJDMzM5Mjg1OEMKLToxMDIwQjAwMEU3NDNERkYzRkM5QkRGQTFGMkQwQzgzMTJDQjczRDI3MEIKLToxMDIwQzAwMENEQTE3MjVFNjQzQjlFMTdCREU1QjkzNUJDMUU2OTZDM0YKLToxMDIwRDAwMDE4NjMzRjE4N0JENzc3NTQwNzdEN0Y2MTREMUZFQUY3NjAKLToxMDIwRTAwMEE1ODYzQzdFQzNGOUI1QjhERjE0RTc5M0VFQjA1MERDQUIKLToxMDIwRjAwMDM3NUREQkU3Q0IyQTM1RkYxMDY2N0EyMURENjU5NjUwMjgKLToxMDIxMDAwMDlFOUU4Mzc5RjdGNTYxRkQwODJFNzdBMUJFMDVDRjQ3MjYKLToxMDIxMTAwMDZEQ0RGM0YxMzgzNEUzN0M4MDhERDBGMjM4NTg1ODQ1REEKLToxMDIxMjAwMDdGNTRBQkNGNERFRkY3RUI3N0ZCQUM1QTFFMThFRkZGQTgKLToxMDIxMzAwMEU4MEJGQzVDMUY3REZGMzI2M0YyNDhCNDFCMUQ1RTE2OEEKLToxMDIxNDAwMDUzRDZDRjgzNjY5MjNDMTJDRjZGNkRENUYwNDAyRkJGMzAKLToxMDIxNTAwMDk0MUUwQzhEOERCMjJCOEY1RTc1NDczMUNFRjNDMzE3NTUKLToxMDIxNjAwMEVGQ0E0NTdERUE2QUVEM0I1MDQ2QkM2QTFDQ0ZGMTdCNjUKLToxMDIxNzAwMDc1RjJERkU2MjExRjdGNUI3NDI5RTQzRjQ4MEZGRTA4RkMKLToxMDIxODAwMEY5QzY0MjRGQ0IyNDM3RTA0RkE1M0M4REJFMzczMzQ1Q0YKLToxMDIxOTAwMDlEMkIyMDVGNzE1RkNGQzdFN0FFMEMwODBCOEIwN0JFOEUKLToxMDIxQTAwMDQzMzMzNDI4OTE5RjlFMDUzQjQ0RDRCNzg3OUUwQ0M4ODcKLToxMDIxQjAwMDA4OUYzQTVCMjQ0QjgyNzY3RUUzMDlCRTgwRTNGQzc4N0QKLToxMDIxQzAwMEZFN0JERkE3QkNCQzYxNDc4RkUxQjk5MjQ3Q0RFREQzNjEKLToxMDIxRDAwMDVEODg0RjNFRUQxQzYxMjZEMUJFOUFERUUxQTM3NjZBOTIKLToxMDIxRTAwMERGRDNFMUZCNkJGMjA0MkQwRURCNUQ4OTcyRTE1QUM2OTEKLToxMDIxRjAwMEYxMTZDQjU4RkY0REVEOUNCNDE5MzIzRjc3NzM0NkE5QzkKLToxMDIyMDAwMDhGQkU4RjM2OEI0NTI0QzQ4NzE5NkYwNzVDMENFOUUzQkEKLToxMDIyMTAwMEZBNjA2OUJDNzMyQkY0MkJDQjMwN0JBM0U5RTcxQTZGMTAKLToxMDIyMjAwMDU0MTlGRTdEQjMzMEI2RkMyRDI1QjZGQ0VERjJDRjBBNzUKLToxMDIyMzAwMEEyQ0JENTkyRkY5NzA4Q0Y5NzA1MkU3RkQ0Qzk1Q0ZFMUQKLToxMDIyNDAwMEM4QUM3MzM1Q0FDNzFGMzVDOTEzMjhBRUVFMTE1NDJDNUMKLToxMDIyNTAwMDhGNzk2OTE4RTUyNUIxMEM5RUNGMzBEQTk1MURFMjcwQjMKLToxMDIyNjAwMEM4RDk4QUYzOEE4MDlDREZFOUMxRUYyQ0YxRjNBRkQyQTEKLToxMDIyNzAwMERFQjZFQ0MwRjMxNTk4RDdCQjE1RTlGMDQ1NzMyMUU1NDAKLToxMDIyODAwMDZEQTYzOTZBRkVCNTg1RjQxOTI3Q0IyMzNFRTVERDRBRjQKLToxMDIyOTAwMDc4RURCNDc5RjFCQjBGODc5RDNDMUZBMUY1MjExM0M1RTMKLToxMDIyQTAwMDlCMDQ5N0NERTQ4N0U3QzQ5RDEyOTdGRkNFMjVEM0IxNTkKLToxMDIyQjAwMDVFMkM4MzA1MDE1OURERTNFNkRGNkQ2QTlEQzRDQ0FCN0UKLToxMDIyQzAwMDRCNzBERDk0Qjc0OTJGNzJEQTI4REZCRkQyNTVGODVEMjUKLToxMDIyRDAwMEFDMTc1RDE2M0EwRkUyQjBCMzJDQThGNUM3QjBGRDI3RDYKLToxMDIyRTAwMDlENEJFODdERTREMTY2MzBDODdCRUNEQ0JGMkU4MjdENUYKLToxMDIyRjAwMEJDOUFGNzRGREY2NzEzNTczMEFEN0YxQkIzNjBCOTg2QzkKLToxMDIzMDAwMDUxRkU3RThGNUJFNkUzQkRERDQ0RjExMEFDQkY5MkM2QUIKLToxMDIzMTAwMDY3QTM3QUZERkNDMjgxRkRCMkQzMjQzQUM3NUQ2MDVBM0YKLToxMDIzMjAwMDdDQUM4NUNBOEY2OTdDQjBENTJDMUY0NjNDNTVGRkMwNUMKLToxMDIzMzAwMDE4QUU0N0E1RUI1M0EyMDNEMUU0NTJFOEJDMUQzRkNCMzYKLToxMDIzNDAwMEY1QTQzMUVFQjM4MEU3QzUzNEI5MUJGM0Q5QzUxNTJFMUEKLToxMDIzNTAwMEIyOUI1MUYzQzFGQUUxRjg5M0U4NUFGMkIzMzJDRDM1QUEKLToxMDIzNjAwMDQzRkRGOThGMjMxRThGMTI1ODAwRDcyMzM4OEVFRkEzMTkKLToxMDIzNzAwMDdEQzI3NDc0MTNFNTU3MzgwMjU2MDVGQUIxRENDNDY4OUYKLToxMDIzODAwMDdEOTVFNEY4RkI2NEM3OEZFMzc0M0E3OEZEQ0EzMjMwNzgKLToxMDIzOTAwMDhGNDM3MDk1N0JGMURBRUEyQ0Y3RTJCRTlGMUVCNzkyNkQKLToxMDIzQTAwMDExODgyQUM3NTk5NzEwRTJDREMwQkFEOEJBNERFMzcwNDgKLToxMDIzQjAwMDNEMTQyRkVBMTc1RkRDMUVENDNCNzAzRTFBN0YxREE2MkEKLToxMDIzQzAwMDc4RDEwRUNENzU0MTNCQzBGNzk1MjFGMUU3MTExQ0M3QkYKLToxMDIzRDAwMEZEOEI5RERBQjk3QUM2RkE5OUUzNEM1RkY3M0MwREY4QUMKLToxMDIzRTAwMEY3MTVFNzk5MTYzQkNGQUY3MTlDNjFFMTZCMThBNzk4ODEKLToxMDIzRjAwMDA1RTM3MzBDOEMwRjdFRDIzOTVGRDczQTRDODQ1RkQ3REMKLToxMDI0MDAwMEVBRTcyRDE1QzZFRUJCMzBFRUIzNjA2Q0Q1NjZFNDMzNUIKLToxMDI0MTAwMDU3NkJGOUEzMTVDOUZGNEM3RUZDNkI0MENGNDdCOUQ2NkIKLToxMDI0MjAwMDlCRkM4MzVDQ0NERjlDOTFEMkQyQzY4OUEzRTlFQzQyQjEKLToxMDI0MzAwMEU0QzczNjgxRjhDRTM3NTlGNzFBQkM3RjdFNUFGMDcxNUYKLToxMDI0NDAwMDc3MEVGMUZEREJDNjBEQzVGMzUzODMwNUE5NTBGRUQwMTEKLToxMDI0NTAwMERDOUVCQkRDNDc3Q0YxRjY3MTkzNzA5QzExQTJCQjZCRDgKLToxMDI0NjAwMEYxN0I2QzQ4NzczMzQzNkQ1ODg2M0U5QUU4REMyREEwQUIKLToxMDI0NzAwMDQzQTQ1QjlEMEUwNzhGMUZFODEyOUUxRkRFRTRBMkZEQTIKLToxMDI0ODAwMDUwREI1ODM3NkQ2OENCNjBFRDAyRjdCNzM0OTFEQzYyRjIKLToxMDI0OTAwMERFOTEwM0YzMDRBMjlENjE2QkEyNzlGQ0E0NDUyNUY5QUEKLToxMDI0QTAwMDcwQjVGQjExMDlDQjRGMkFDMUY1MzhBRTM5RTMzRkEyMTUKLToxMDI0QjAwMEYzRjI1OUM2RkMwMkI0M0I2MUJDRjdFMTNDRkVBN0M2OEYKLToxMDI0QzAwMDNCNzg5RkZBRTdFRkEzRjg0N0Q5QTNDRjZCNzRBRERCNTYKLToxMDI0RDAwMEEzOUUyNEQwMjc2MDlDNUVDMUE1MzBEMDFGRkJFRDUzODYKLToxMDI0RTAwMEIzOERGMjEyMDZGNkY1NDY2QTY5RkZCMDkwMTI0MDc5OTQKLToxMDI0RjAwMEE2RUZFQjM1RjJEREE5NTc3MkJFRkJFMTcyOTdCMjlBRjcKLToxMDI1MDAwMENFMzlEQzRENzY2OUUzRjUwRTdEREYyRkU5NUY4RDRCMkIKLToxMDI1MTAwMDRDREFCRTVGODFFNDRBMDNCM0QxQjk0M0ZEREZBQjgzM0MKLToxMDI1MjAwMDNGMjE2REUwQkIxRTA3NzBGRjZGRTlFN0VERkZGNUQyQkQKLToxMDI1MzAwMEZFNjI3NTE1OEZEM0Y3REI3N0Y1MzJCNzVGRjVFRjQzQTIKLToxMDI1NDAwMERDOUVBRDlGRTNDRkY1OTRFNUVDNEJEOUI3NzFGNjA1NzIKLToxMDI1NTAwMDkzREVDODUyNEM5QUZEQ0FGNTg1OEVDOTVFNTk2NTE0NDIKLToxMDI1NjAwMDVGRTU3QUY4NUMwQkQ1NkY0QzBBRDFGNzU2NkFDNTc2RjEKLToxMDI1NzAwMDQyOTJFM0UzRENCQURGRDM0RURGNjVCMjI4RjlDODI3MjUKLToxMDI1ODAwMEY0MzhFQjlDRENFMDdGMjI1RTJGMkNGNjY3MDkzMDk1NTcKLToxMDI1OTAwMDVBMEI4RjlGMDIxRDZDRUQ4M0I3QUE1OEQzOTNGOEJERDkKLToxMDI1QTAwMEFFNkI1OEQzQUY0RDM5NDQwNzY3MTBERkU3OENGOTg4MUQKLToxMDI1QjAwMDdGQzc2QjgwMEVDRTYyM0IzNkM2RkQwMUQ3NkE3MUEyMjMKLToxMDI1QzAwMDk3M0Y3Q0FBMEREN0ZEQkNDMEY4RkVBRTQyRTNGRUFFM0QKLToxMDI1RDAwMEMwOUZDN0YxNzg5NkY2M0Q5RTU4QkUxMzM1OEU5MzY2MjAKLToxMDI1RTAwMDNFMEU4RjI4RDIzODJFQzQxQkM3MjAzQTY0MjFFQTFGMjIKLToxMDI1RjAwMEQ2Qjc4OUY2OUYxQkYwQzgzODFFRTFFMDFEQjQzRjZFQzgKLToxMDI2MDAwMEVCQ0Q0QzE2MjdBMzFDRUZCMzIzM0M0NzIwNDZFNEUwNTgKLToxMDI2MTAwMDNDODNDOUUzMjc5MTNDMEZFMkI5NjhCQTVEM0Q2OERDQjEKLToxMDI2MjAwMEEyODNENkY1QzZCOUZENzkzQUIzMzJDQjMwNEVDNEZCOUUKLToxMDI2MzAwMDdEMkNCOUUxNTFGNDdCMzRERTZDMjZGRTVFN0Q3MDJDN0UKLToxMDI2NDAwMEU5NjlCREFBNTVDNjI0NDg1NkM5RjM2QjE0RjgwRkM3RUIKLToxMDI2NTAwMDM1ODdGOUFGNzI0MzNCRDdDOUQ1NzRDRURBRjUzMzhERTAKLToxMDI2NjAwMDc5MzlFQTNENERGMEZFMEQ1QTlFQ0Y4REQ3OUI4RjQ3QUQKLToxMDI2NzAwMEVCOUJFN0NEMUJDQzA4MDdCNUQ2RDEyNDRFQzFGNkE0MDEKLToxMDI2ODAwMDgxRjc3RDgzRTEzMkU4OUNBNzM2Q0U5RjE4RTgzOUQ4RTAKLToxMDI2OTAwMDdFNkI3OTI3RjFBNzQ0N0M2QUZDNzg3RTJFMTRCNDU1QjIKLToxMDI2QTAwMEYwNzdFNkZCNUMzNkZFNEJFNEZCNENEMENFODU3QUNENzIKLToxMDI2QjAwMDFDQTFGMzNCNUYxRkJBNzhFQjcyOTg2N0MxMEY4QkU5REYKLToxMDI2QzAwMEZCQTU1N0E1MkQ3REYyMjEyODNGQkQ2NTM0OTU1RjRGQjEKLToxMDI2RDAwMEJCRjlCNkEzNThCRjNEOUZDQTk1QTY4RkU2MjEzRDE0MEUKLToxMDI2RTAwMDk2Q0RCRDE2QkZGQkZBOUE5REI3OTM5MTE0RUNBODg2QzAKLToxMDI2RjAwMEU3MzJDNjY1NEZDMDAzNjEyQTJEMTE3QUVFOUJFM0VCRUEKLToxMDI3MDAwMDI3QTIzRkE2MzI4OTk3OEY5NEZDNzYwMjk1QjNCNUYyNDMKLToxMDI3MTAwMDg0OTc0NzYzRjkzNUUxQTM3OUYxRjhFMjk4NDJBMUJCQzgKLToxMDI3MjAwMDA4RTQ2RDY1MkE3RjdFRTY4NDY3ODZBMTFENUY1OUMxMzYKLToxMDI3MzAwMENCNjM5NDY5RUI3MkIwREVGNEM3NzlGMUY0QTUwNUUzREQKLToxMDI3NDAwMEY5N0NBNzVFMzhERjM2QzQ4MzYxNjFGRTNERDI5N0ZDMTkKLToxMDI3NTAwMEVGRDFGNzM5MDIyMDZGNzFGRjdFQTA5Q0M3RTEwMkZFMjYKLToxMDI3NjAwMDEyMDlCRjA3NTVFMUU3RTVFOThFOTY0Q0U0ODNCMzgyOTEKLToxMDI3NzAwMDk2NTI4Q0JCQ0EwRTVGMUI3RTFGMzFBNTdDREEyNDVDOEYKLToxMDI3ODAwMEY3RTlBMDZFNjM5QzEzRTg2QjA5QzI3RkNFNjUxRjY1RjUKLToxMDI3OTAwMEI5NDgyRkQ1RTk0QjM2MTNCRDI3M0VBN0IxOUVBRjVCOTUKLToxMDI3QTAwMDJDM0Q0MDdCMkI5MDZFRTY1QzFFMkIzRjA3RDFBQjAxOEUKLToxMDI3QjAwMDBGQUZCNThERTA3ODA3NzJEMTVBM0U5ODVFOERGQzlCQzUKLToxMDI3QzAwMEFERTkxNEEyRTk3NTFCRTJBNTQ4NzRCQjFBQzc2NTMxQ0YKLToxMDI3RDAwMEY1NzlGMUZFMjg0MTE5MkQ3RjBFRkQ5RTM3QkZFQkEzNDEKLToxMDI3RTAwMDM4MTBEQzEwMkY4RkMzMzdFMDRGRDJGNTdDM0UwQTU5RUEKLToxMDI3RjAwMDRFQTNGQzY1OUVENzczRjBCN0Y0M0U2RTA3MTEzM0E5NjQKLToxMDI4MDAwMEZGODc3MUZFNkMwRDFGQ0YzNjNDQkY0NDQ0N0IyRkY4MTEKLToxMDI4MTAwMDA0RjI4OTg2MENGRTlENDk4Q0VCMjM5RDY2RThGQ0FBOTgKLToxMDI4MjAwMDJCNzZCRUFERTVDQUFENkU3MUYwNzg0RDM2MEVDN0VCQjYKLToxMDI4MzAwMDM1N0RFQ0FERTZDMEQwMTIxOEVDOERBQ0M5OENGMzdEQzMKLToxMDI4NDAwMDJDRDlBNTYyM0NCN0IxODY5RjQzRjkyRkU5QzEyNzExNjYKLToxMDI4NTAwMDFFQTI0OTNEMTQ4NkYyNDJFNkU3REZBRjk0RkNCQkM2RjgKLToxMDI4NjAwMDQ3RTk1RjBEREFCQTM0RDhERUE1N0MzNkZDQzNGMzUxRjQKLToxMDI4NzAwMDA2QzFBM0NCQzg0NzYzRTczRkIwMkU3RDk5NzhDREM0OEUKLToxMDI4ODAwMEYzNTc3MjcwOUVDQTVBMzFDRTdDOThENEI0MkVEQTRGNjgKLToxMDI4OTAwMEZGRDgxN0ZBRTkxOUY3QjcyODU2RUQzQzk1QzhCQzY4NzgKLToxMDI4QTAwMDdGNUNBQkIzRTlGMTY4M0IxOUNDMzIzQTA3RTk0ODRCOUUKLToxMDI4QjAwMDJFOEI4Nzc3QkE5RTc0NDREMEZDNUFBMEY3QTIzRUYwQzQKLToxMDI4QzAwMDQ5RDJERjQ4M0YwMThBMDk5OEIzRDBBRjM1OEJGNDE4NUQKLToxMDI4RDAwMEMxNjI5MzMxN0U5RDUxOTM0MUY4QkEwOUY0MTJGNEIzNjkKLToxMDI4RTAwMEFCMTU5RDM5RTQyRkRGMkUzMjNDQjc2MDAwMEUzMDEyNUQKLToxMDI4RjAwMERGMDA3RTdFMzgzRTlCN0ZGN0FCMUYxRTJBRjE1MThCOTcKLToxMDI5MDAwMDQ5ODhBQjVGN0QzOERFQTQ5RDlGQ0FGNzk3MzZEOEFDNjcKLToxMDI5MTAwMDNDRkY1M0ZCOUU4NTlFQzdEMjYwMkI1RUQzNDRGM0IzMkUKLToxMDI5MjAwMDcxRkEzMUFDRDNBMEJDMTY2MzlFOUMyRDlERjQwQjc5M0IKLToxMDI5MzAwMDAyNTM1MDFFMEVDRTgzMzFEQTA5MkFDREUzNUJGREYxM0UKLToxMDI5NDAwMDA1QzZGNTlGM0I5REE0RkY3QzRCOEIyRjA4QjMzRkE1OEQKLToxMDI5NTAwMEY1NDkwNUZDQjI3QTMwOEVFMDE1RDA1RTQ5MkQzRDJBNEUKLToxMDI5NjAwMEIxQjEwM0RGOUZDNEVGMzZBMTNGQUIyQjNCRjg3RkM3NkMKLToxMDI5NzAwMDQ3QzVFM0RGOUNGNDM0RTU4NTFDMzNGMTM4QTgxMTNFRUMKLToxMDI5ODAwMDY2ODVDNzgxNjQxNkE2N0NENTA2OEQ1RkZEM0YzNzlDQTIKLToxMDI5OTAwMDIwNEEwMDgwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwOUIKLToxMDI5QTAwMDAwMEJFNTdEMDk3ODU0NDVCNjdGRERCRUJEMjVFOTI0RTEKLToxMDI5QjAwMDlEMTA0MjQyNTgzQUFDNDEwMjc2MjcyMTgwNkM0RDgwRUUKLToxMDI5QzAwMDg4MEE0QzU4NTQ1MDg0MUI4ODZDNTkwNTlENDFDNzMxNjYKLToxMDI5RDAwMDFEMDI4ODBFQ0U4NDI3MkE0RjUxMUIwNDQ0MDc5ODQ2QjcKLToxMDI5RTAwMEQ5RDRDOEI0ODA4OENGMkQ2RTMzNkU4RjQ5NUM1OTI1RjkKLToxMDI5RjAwMDg2NDE3MUM2MzdGRUNGRUZENEJEQTQ2RjEzMDY3Q0NCRTIKLToxMDJBMDAwMEY3OUZGNzNERjhCNDM4QjdFQURFQUEzQUU3RDREOUVBMzcKLToxMDJBMTAwMDU0QjVEODYzM0JEMTk4MjVGOENGOEZEREYwRkY0RTQ5RjAKLToxMDJBMjAwMDVGRjYxNTQyMDUzQzAyNzA0MDg4RjY0MkVDRUU1MEU0MzkKLToxMDJBMzAwMEYwNTI3OTUyNjlDODQ3RTVERjdBQkI4NTE4ODA3QTJENTQKLToxMDJBNDAwMEIzQTg5RjEwNDlFRUNDOTE0OTFFMDI3RkY4RjFDNzFGMzEKLToxMDJBNTAwMEYzODU5ODgyQUFFRTQyN0NEQTVENEJDNDdCRDc4QkEyQzkKLToxMDJBNjAwMDMxNTY0NTg4RTRCMTlBNEQ3MzA5MzE0NkE1RkZFNTA5MTEKLToxMDJBNzAwMEQxQjI0NTA5M0FFOEY5Njg3RjhDNDVBNDA4NTE3OUM4NzQKLToxMDJBODAwMDE2MEMxMkJDRjA1NUVBODRFMDg1OEZBQTQxNDE3MDhCODgKLToxMDJBOTAwMEYwQUU2OTQ0RkI4MEMzMURBMEYyQTFCOEZFQkYxRDRBODEKLToxMDJBQTAwMEU1Njc4RkRBQkMwRUY0MUJGMEJGOTM0NUZEOTZBMDVGN0YKLToxMDJBQjAwMDgyN0JBRkIxMDg4RjUzOUYxN0ZERDcyNzE4MkIzQzU5NDYKLToxMDJBQzAwMEFENzBERkNEQzkyNkI4NUZBOEEzQTlGREU1N0JCQTk5OTMKLToxMDJBRDAwMEVBN0RFMUNCNENGNUI5ODc3MjRDRjA4MDg2MkI0Q0VENEEKLToxMDJBRTAwMDA3N0U1MDYwODIwNzM3NUU2RDZBM0ZFNEM4MjQxMzNDNUUKLToxMDJBRjAwMEFDRjkwNjUzRkIxMTY3Njc5OUVBNEIxMzBBMEYyRUE2MzAKLToxMDJCMDAwMEY5MUU0QzUzODUzMjQ4ODg5MUEyRDRENEJFNTQyREIzQkIKLToxMDJCMTAwMDBCMEJGREEzQ0VGNjY5MjNCRDU3NDU3Rjk5OUVFQTc0NDIKLToxMDJCMjAwMDJCRjA3QzY2OEYyMkRBNjUwQTMxNzc4REFDMzdERTlCMUQKLToxMDJCMzAwMDU3QkY2QTc5MDY5NUYzODNFNkU3QTVDMkRBMEFEMzdCMjUKLToxMDJCNDAwMDhCM0Y5OUZGRDY4MTg4RkU3QUE3MTQ1QjkyQThCQ0RBRTYKLToxMDJCNTAwMDFCOUZGMjY1MUMyNjJDMDZGRUE4MzI1REJENjFEMEU5RTQKLToxMDJCNjAwMDNERDVFQjkwQTQ2MDNBMkZEQ0FBMDRFRjI1M0FGNjEyOEIKLToxMDJCNzAwMDNEMUYwMkREODhDRTIyRTgwMTVENjU3RENCNUEzNTE4MDgKLToxMDJCODAwMEEwN0VCRUFCOUVGN0Q2MDExQkMxODc3MkQ3MzQxMkZENjMKLToxMDJCOTAwMEU3RDYzOERDMkFENTNCRDJDQ0Y0OENGMTk4RTkxOTk3RUEKLToxMDJCQTAwMDY1QTY2N0JDRDc0Q0NGQzQ0MTY2N0EyNkY5Q0RGNDZDRDQKLToxMDJCQjAwMDM3RDY0Q0NGRjY0NTY2N0E3Njk4NkFBNjY3QkE2NkE2ODcKLToxMDJCQzAwMDY3QzYzQzMzM0QzQjU3OTlFOUQ5NzVCMTk5OUU5OTgxQzgKLToxMDJCRDAwMDA1QTZGQTY4RkVFREJFNjJBMUE5RkVBMUI4QkQ1RjZBQjYKLToxMDJCRTAwMDg0ODc5NDhFQUFEQjQxNEJBRjY3REQxREE2RUYwOTc1ODQKLToxMDJCRjAwMDlDN0QxOUUxQUIzNDQzMTVBQUJCOTUwRjAyRjQ1N0FFODcKLToxMDJDMDAwMEVCMkE1RTVGNzM4ODBGMUUyNjNBOUMxMTJCMEY2Njc4QTUKLToxMDJDMTAwMENFRTc4NzhBM0RBQkVDNTg5RjNGOTUxRjdFMEQzRUU4N0YKLToxMDJDMjAwMERCQ0EwN0M0Nzc4OUY4Q0U4RkY4MzNFMkZDRDJBMEYzNzEKLToxMDJDMzAwMDQ0QUI3Rjk1OTdFNEM4MDZBRkI2MUFFNUQ0REVERjc0REYKLToxMDJDNDAwMEIxOTJEQzEwNDVDNUJEOEJFMjg1NzA4OUU2MTlFMEE3MUQKLToxMDJDNTAwMDBBOTFFMEJEMTdBNUYzOTM0Q0YwMEJGRTM4RDJFOTdGNDMKLToxMDJDNjAwMDdFRDFDMzRBNzg1Mzc0QkM4OTI4NzlBNkQ0RkYyOTEzMkUKLToxMDJDNzAwMEYzNUU0QkNDQThBMkZEODQ5MDAyRjlENTQ5MzRBNDQzNUQKLToxMDJDODAwMDNFQTU4QjJBMDU2NTlBRjBBRTUwMzE2RTRGRTc1NkY5OTYKLToxMDJDOTAwMDk3QzE4NEIxODRFOUZEMEY0QjZDQ0NCRjRCRTJGQTZGNTYKLToxMDJDQTAwMDAxNUY3RTUwMkJGOUYyMzQ5QTBDMTZFMjA2MTFCMkUxNjQKLToxMDJDQjAwMDNCMUZDNjNFRDIxOUZEMTUxMEMyOTVDMUE4QUNCQjA5NzkKLToxMDJDQzAwMEUzOUY4RUYxN0I4NUI4NDkzNERBRjBGMTk5NDJEODUxMEYKLToxMDJDRDAwMDE2MEIwRjk3QjM4NURGOEVGNzZGMTZFMUU1OThDQzFGQzMKLToxMDJDRTAwMDUzQjQ1REMwNDc4NUFBNzU0RDA1M0UzQTM1NzQ4MTlDNDUKLToxMDJDRjAwMDE1QUZCN0MzQTAyRjg4NTc0MzVFQkY4QjdGNTJCQkUzOEUKLToxMDJEMDAwMERFQTJCREY4Q0UyOEE3RTdENjA3MDgzRkZCMkM2MjVFRkYKLToxMDJEMTAwMDg4RTgyMkM2QjVFMzcxMEI2QjUxQkY0OUZEREFGQUNFRTQKLToxMDJEMjAwMDEyOTZFRjJGMjg5QTA2N0MwN0QyOURERThENDA3MjVBQUMKLToxMDJEMzAwMEU4MTk4NUU2Nzc1OUIyMjdFN0RFQTRENkY2NkY3ODJEMzUKLToxMDJENDAwMERDOUU1ODJGQTA1MEZCQTc3N0M0MzJCRUZBNzY1ODk3NjYKLToxMDJENTAwMDhDNzlGREQ0N0UzRkY0RkFERkMzQjg4REY2MTc5QkFGQjQKLToxMDJENjAwMERERUU1RDcwMUJGNURCQUM4OEFBRjUzNDg4Rjc3NEJBMkMKLToxMDJENzAwMDY0Mzg4ODdGNjhCQzE5NkE4MkI3MTY3NDhCOUI3MUIwRkYKLToxMDJEODAwMDNERTFBMUEyODNGNjI5RjREMkQ0RUJBRjVBMEU1OEQ5NzMKLToxMDJEOTAwMEQ3Q0VCMzkwQzY3N0FBQjgzMTFGRTMyNUZDN0Y4OUZFNTIKLToxMDJEQTAwMENCOUM4NDdGOUFEQUM5Q0U1QUVGNDQzMDQ1OTFDNDNGMTgKLToxMDJEQjAwMEZEQTM1RjUxOUJFMzk3RTMzOUEwRTM3Rjc3MDdFRDE0MTEKLToxMDJEQzAwMEZBRDk2NzY5RThFMjA1MURBRDBERjk0QzQ3Qjc5Q0Q3MDQKLToxMDJERDAwMDQ5QkJDNENCODVGMDUwMTBENzc5M0FGMDVGRTI3MDc4RTgKLToxMDJERTAwMDU1QzI2NzgxMjJCRkZCNzlFMkNDMTk5NTM0RUU5QjJENDkKLToxMDJERjAwMDQ1QTk2MUQ1MzRFRUZGRTA3MUJCOEFCQkE2NjNEQzM2MjIKLToxMDJFMDAwMDdERENDRUY2M0FERTNERDk1ODU3MTcxQTc3MkRCRTRGRTYKLToxMDJFMTAwMDc4MEFGQzRBMDk2RUNDQzRGM0YwNTM4MDc3MEJCN0ZCRjkKLToxMDJFMjAwMDVFMUZBRDM5OEJENENCQ0QzNTRBNzAzREQ1QkZBNUUzMDAKLToxMDJFMzAwMEY5NTExQkI1QzNCQTc0OEFFNDFBMUFERkNGODYyRDVCMjkKLToxMDJFNDAwMDg3NzZCRkQ2OUMzQ0VFOERDMjdCRDlFQTRDRDA0M0IwOEUKLToxMDJFNTAwMEJDQ0ZCODVCMDlENjEyM0M0Qjc4OTlFRjRCNDQ1MTk3RTUKLToxMDJFNjAwMDFERDQyRUMzQTdBNUZBNjgxQzdGOEVGQkZCODA0QzBCREMKLToxMDJFNzAwMDJGRTMwMUVGRDE3Nzc2MkRFOUUwQkQxN0QwRDA0QkUzRkEKLToxMDJFODAwMEZGMkM5MjFDRTg3RkQyNzhBOTc3NkVENkYxMzY0NTE0RDQKLToxMDJFOTAwMEYxM0FCRDRFNTQ3MTQ5MEJGRTY0MDVCNTlCNEFGRkMyMjEKLToxMDJFQTAwMEZBMjRCODFGQzYzNzBEQjBBRjc1NUQ0RjE3MEQ1Q0NFNTUKLToxMDJFQjAwMDEwRUUxNzFCRTk1QkVGRDQ3NEI4RUQ3NjZBMzNDOUQyMTQKLToxMDJFQzAwMERDQzVBRTYyOUREMkJBQ0Q2NEZDRjdGMzExRkVCRjFEMjYKLToxMDJFRDAwMEYzRjY2MTA1NzhCRjkzRTQxOEU4QkRCQUZEMjVGMUYxN0EKLToxMDJFRTAwMDQ0NDVFMjkzRDZFRDAwRTA4MUQ2NkQ5RUNGMTJCMTdFQ0YKLToxMDJFRjAwMDQ2Qjc5N0ZDNjc3NUY3RkM0N0VCODcwNDYzNDI3QUFBRUQKLToxMDJGMDAwMDEwNTc0QTUxMjgxRTNBOUQyMDUyNjg5RTBERERENEEwQ0MKLToxMDJGMTAwMDIzMTM3QUZBNEVFQjBFOUE2NzAzRDkxMzBFQ0NEQjVGQkMKLToxMDJGMjAwMERDRjExNEQ1OEYyNTdEN0JBRjk0QUZGMTAxODIyN0Y4QkEKLToxMDJGMzAwMDU1NzEyRkYzNDFFM0QyRjlGNEZDRjU0MTU0NEZFRDVGQTUKLToxMDJGNDAwMEE5MTFGMTc5MDRCRkUyQjM3OTZCODkwRkM3OUNENTBFNDMKLToxMDJGNTAwMDI0NTIzOTgxRTQ3RTk4NUE1RjlEQjY2QTM0RUM4M0IxN0QKLToxMDJGNjAwMDlENDg4RjQ0RTg4OUFCN0I5ODYxNUEwODlENDBBNzZCQzgKLToxMDJGNzAwMDc0N0M4RkNCMzZFQjlEMDlEMDNCNDZGQjM2RjQwRUM5RjMKLToxMDJGODAwMDU3MTVGOEJERDFBN0VCOUZDQkM0NjVEMDNGRkJBQkY3N0UKLToxMDJGOTAwMDg4Q0Y0OEJGMTg3QTY4MTRDRDMwOTQ3RDYxM0Q2NEI1MDAKLToxMDJGQTAwMDE3Q0NGNjMxREUzQzc2QUM4RjU5NTY2QTBGN0NCQkI1MzgKLToxMDJGQjAwMDhFMTMyM0Q2Q0I0QkY5MEFFM0Q3NDM4QUM3NDJGMzdGNUMKLToxMDJGQzAwMEVCOTAxQTA0N0VBQ0ZFRjAxMEUwNkZFMThCMEFGM0U5OUYKLToxMDJGRDAwMDIzM0VBRDAyREZGQkRBRDYzODA3N0NEMzMwMzQzNzUxREQKLToxMDJGRTAwMDUwRkY5RjU2RDM0MDdBRDNGQUFENzYwQTNGQUQ4NTJGNzYKLToxMDJGRjAwMEFCREQwQzFGQTk0RUUzRjI1OEI1ODdDQjEzRDU1OTVDNTYKLToxMDMwMDAwMEZGNzVCNTk3RTFGREJFQTI1RkUwN0JCMzU2N0M2M0Q1NEIKLToxMDMwMTAwMEIyRDE3RjE1REI0NzhCNkFBQzAyRjQ1QTE0QkY1MEMyQTEKLToxMDMwMjAwMDM2QTcxQjQyRjhFRUNFMDcyRDcxMDRERjFENTRCQ0QwMkQKLToxMDMwMzAwMDhCRjM3NzA0OTdDMzRDMkJBREY3REI1RDA0MkZFQTlDMzEKLToxMDMwNDAwMDNDQ0E4NUY2MEYyOENDRjU3MzBFNTUxREM0NzRCRjdFOUYKLToxMDMwNTAwMEVGRDNFQkM2OEJENkY5OTY5RjU1ODQ0NjRCMkU3QjgwREIKLToxMDMwNjAwMDdGMzlGQUZGQUE3QTEwOEZFQjY4QjU5RkM3RTVBRjZGN0IKLToxMDMwNzAwMDNBRDg4RUJFNzdCQzdBMkNDM0ZGRUUyQjVBMDlCRUY1MjgKLToxMDMwODAwMDhCNkZEODhFMThCRkE1QzkwQTNCNjM4QzVGRjE4M0NFQzYKLToxMDMwOTAwMEMzRkQyMjE4MjQ3Q0FEQjE0OUJEQjI4NkY0MEFFNEMwNTgKLToxMDMwQTAwMEM4N0U5MzFFQkQ1NTQwRUU2QjBGQTI5RjZCOTM2NzhGM0EKLToxMDMwQjAwMDgxQkQzQTYxNTAzMURCQUZEN0ZGMjBEODdFMzVGOEZGQjQKLToxMDMwQzAwMDYyRUJDODIzMUFCRUNFQTBGRTRFMDYyNDdFNUE3NkJDMDIKLToxMDMwRDAwMENCNzA4Qjk1RjA0MzMzREVCQkEzQjQ1NDkwN0REMDcyOUMKLToxMDMwRTAwMEY2MURGOTlDREFCMTlEQkE1M0I2NUI2ODkzRUQxNkVFMDYKLToxMDMwRjAwMEZDNzUzMjNGNTc5NDY2MTFBMUVGOEUxMzFEMDVFMTIxMzcKLToxMDMxMDAwMENFOTlGMUU4RTc4NDlGRTM1QjdGOTFBNjQ1RjBEN0YxODQKLToxMDMxMTAwMEU0RDBCNzFGNDE0RUZFQkJDNUJCOUVGOTU0RkJFQzc5MTIKLToxMDMxMjAwMEM4RDFBNTZFOTYzMzVGREI0MjVGM0UwQzM5REI5OUY0NjQKLToxMDMxMzAwMDJBRDc1N0M1NEQyMjNFQUJCMDBCOERGOTRFNjg3RDAxQTUKLToxMDMxNDAwMDFGOEYxNTMzOEI1Q0IyM0Y0RjZGRjkxQ0ZDRDg2QkRCQzQKLToxMDMxNTAwMDQzREQ3RUU5NjlFRDZGNzNFOEU2OEYxRTA2MURCNjdEREYKLToxMDMxNjAwMDlDNzAxOThEQjc4RjJBNDIyQUU2MkZFNDM4MDIxQjYyMjEKLToxMDMxNzAwMEI5OUZCMjY3RUU0OUY2MTNGQzk0MjI1QTU0RTZGNzIwNDEKLToxMDMxODAwMEYzRjNBRjZENjIyQUZBQ0Q1MkFDRjZDNUM5RTQ1N0RENTAKLToxMDMxOTAwMEI3M0IwM0YzRUVBRDhBMkE5NUQ2RTVFQ0RGM0M5N0YxMTkKLToxMDMxQTAwMDFDQkRGNzI0QzkyMjk1QzZGRjgyQ0RGQkY1MUU3Q0Y3MTYKLToxMDMxQjAwMDUxMUEzRkY1RkJFNDdERTUzOTkwODcyNUZGMzJGRjMyNTgKLToxMDMxQzAwMEUwRTE4RjEwNUE0NDg3REZFRERFQ0VGNjAyRjFBNDc3RkUKLToxMDMxRDAwMDE0QzlCNTdFQUI1RjVBOTI0RUVEMkY1RkRCNjRFOTQ4QjAKLToxMDMxRTAwMEE1NkY4MzUyOEJCMjc0Q0JGNjc3NkFBOEJGNUNCN0E1ODQKLToxMDMxRjAwMDBBRjZFQkM3M0UwRjhGMkIyN0I0NkVCRDAyM0RGMEMzMUUKLToxMDMyMDAwMDEzMURCMTJFQjM1NzdGNTNEMDUxNUNEOENFRjg1RDk3QzQKLToxMDMyMTAwMDBGNUE4QTNEMkMxN0Y4RkQ5REY1OTNERkJENTFDMDhFRTYKLToxMDMyMjAwMDIxMEIwNkUzMkRCNjdCNTlBRkQxQjQ2REMwQ0Y4RUVFMjYKLToxMDMyMzAwMEVCRjBGRTJFNEI4MEY1NTU2MDk2QjQ3MzRFMTYwNUZFRUUKLToxMDMyNDAwMDE1RjMyRkE3RjYwMTgyQ0I3RDBENERCNzUzN0Q3OTUyMzMKLToxMDMyNTAwMDM3MTFBMEY5MUYwOTJFOUE4NkZBODE4QTcwMDMzRjE1NEIKLToxMDMyNjAwMDNCMUUyOEVDNDhGMEM5QTFDMkFCNTBGRkYzNzY5RTJFNUUKLToxMDMyNzAwMDY0N0REODk5NkM3NTdDNkY0NzZERUEwREQwODdEOTA1NTAKLToxMDMyODAwMDAzNTRBQTJGNTI0M0RDOUZBODk0RkQ1NUQ2NkY3NzAyQjIKLToxMDMyOTAwMDI2RDQyN0FCQzQ2NzQ5RjUyM0Y3Njc3ODVBRTk2MzY5RjEKLToxMDMyQTAwMEZDNERBNjk1QkVENzlFRjQyOUM2QkIyNjMzOTA1RUU1OUQKLToxMDMyQjAwMDZBRDVCRjE5QkVBMjFGNTg3RUI5RUYyRkM2NzdCRUEwMzAKLToxMDMyQzAwMDcxQzEzRUJCNTQ3RDY5Qjc1NENERTdGMUE0MDk3NzYwNjUKLToxMDMyRDAwMDcwRUI3NzNCNUJDMkYzMzEwRjVBMURFRTAwN0Q2N0EzQTUKLToxMDMyRTAwMEJCNjExQUI3MjNGOEI3RENBRkU2Q0ExOTAwRkI4QUIwOTYKLToxMDMyRjAwMDlFMjJGNTdCMkRGQTc1NEZFRTAyN0E1RDZBRkYwRkM1QUYKLToxMDMzMDAwMEZEOURFREI0NEE0QjgyRDc5MUQ3NkFFNzRDNkQ1N0ZCRDAKLToxMDMzMTAwMDYyMjNEMUVCOTEwRTVBMUFGQUI5NTlCNzkzODVENUVCQkUKLToxMDMzMjAwMDgxRENCRkEzODMzRjNEODdFRDM0RDJDMzE2RDZCRjlENUEKLToxMDMzMzAwMDczMjJFQ0U2NzM3NjlCRjNEMkY0RUZFRjNBRjhCQkUzM0IKLToxMDMzNDAwMEZENEI2REVGRDFFMzEyRTdFNEYwOTkxQzkzMUNBRThEQjkKLToxMDMzNTAwMEI3MEIxRjNEQUY1REVERTAzODg2Mzg2MDI5M0I0OEZFNzYKLToxMDMzNjAwMENBMzA3Q0MyRDJGQUJENDVGMTM5MURBMDFGNkE4NTY4RkEKLToxMDMzNzAwMDEzNUY3QjY5RkQ2Qjg0REIzMEU5MEQ4REU0QzBGMEIzMzYKLToxMDMzODAwMENEQUFDNjcyQTI2MTdGNjIxRUU0QURGMEM3N0IxMDM3ODIKLToxMDMzOTAwMEIwMDgyRDQyM0Y0NjdGODdFODU1ODBGOThEMTQ3MTQyNzEKLToxMDMzQTAwMDhCRDBCMzdFOTE2NEM3QkExNUFFRTQ0QjlDNzdGODA5MTUKLToxMDMzQjAwMEIzRkVEOUY3NDRFNEJDODdCNjdDMTAwNzEzOENGMEQxNzgKLToxMDMzQzAwMDAxRTU4NUU2RjVBMjNFQUYzRjYwNUU1NDNFOUY1RjM0NjcKLToxMDMzRDAwMDI1ODdCRTNGRUMyRjZFMkJFNjM3Q0MzQUIxOEJBRjFCNjcKLToxMDMzRTAwMDhGRkIwNjhDN0JGODVGMkNFNjcxRkYxMDZCODIyRjc1Q0MKLToxMDMzRjAwMEZDQjcyOUU0RDg4MThGQkZCMTA3QjFGRUVBNjEyQkQwQjkKLToxMDM0MDAwMDNDRUFFNzY3MDdCMURFNzdEOTQ1QzAwOUJGNjc5MjlERkYKLToxMDM0MTAwMEVERTBGQUY4NDAzQ0U0NkFCREUyMEUyMUZFRjQ4MkFEMzQKLToxMDM0MjAwMDYxOUFGNDhCODQ3QkEzMEZGQ0ZCRTYyM0UwRkYxQjVBMUQKLToxMDM0MzAwMEVDMEFFMjU5MUQxREUyNEJEODU3NDI0RDE0MUI1MzIyOTIKLToxMDM0NDAwMEJFREZERUNENzEwRTE1N0EyMzk3RTBDMUZBRjM2OTc2RkYKLToxMDM0NTAwMDdFNUU2QjEzQUMyNzAzRDM2Mjc5NUNBQjkzQUE1RUVCMDEKLToxMDM0NjAwMDQ3RjVBQjZCMzJCQzM0NzJGMTgxMDhBRUU4ODZGQTNCQUIKLToxMDM0NzAwMDU1OTZFNzQzMkNFQjM3M0UwOEJGNjc2MjFBRUI5OUQ1QTgKLToxMDM0ODAwMDQ5RTE4QzRBQjQ5RjdGOTkzNzQwRkNCMEVCRUYyQUVCQkYKLToxMDM0OTAwMDhGRDUzRTdGN0FCMjBCNzI5MEU0M0NEMTc5RjU0NDdGQjAKLToxMDM0QTAwMDdBNkMwQUNBNTQwQkU2REI5MUU0M0MzRkNGQTQ3NjU0MTUKLToxMDM0QjAwMDdFNjQ5M0VEM0VENEU5NDY5ODRFODdCQzdEQjhBNEE3QzAKLToxMDM0QzAwMDgwRkM1OTk3NTM3MDNGRTg4NDBBMjdGMUYzQjU5MjA0QzIKLToxMDM0RDAwMDYyREFDRDBGODhEQkQxNEU1MzgzNkEyNkYwRjI5QkZCNzQKLToxMDM0RTAwMDdBMTE3Q0MzMkNENThEMzhEREI1RjM2MjlBOTRGRTU0RTUKLToxMDM0RjAwMDZBNkFEODkxNDAyRjRDMTlFMzhGRjREN0Q3RTVGOEVGREIKLToxMDM1MDAwMDA3OURDQjQzN0RCQTdGMUVDMUM3RDM2RUVFRjk3M0M4NEEKLToxMDM1MTAwMDg3NEZDOThGODZERkJEMkM1NTdCODREN0U5MUUxRkI3MjcKLToxMDM1MjAwMERCNDNDNkNEOEZEMDEzNEU0RjdGQjZCNzRCMEMzRjMzMjYKLToxMDM1MzAwMDNDMUJGOEREREJFQzY0M0JGNjQyRkMyMDg0RDc3OTE5QjgKLToxMDM1NDAwMDdERkY0MThCMDg4MTlGQkJFQTdBQkQxNjAxMDBEMDM5MEYKLToxMDM1NTAwMDE0QzM3QzMwNzY5MkQzQ0ZGMTJBOTc2NTNERUNFOEM3NEYKLToxMDM1NjAwMDg5NUVEMDZGODE5RDBFQTYxNzA5NEFBNkRGODM3QjNCM0IKLToxMDM1NzAwMEIzNUU5QUE5Q0JCMURBQTlCMUZDNUVFRDc2NUJEMDAyNUQKLToxMDM1ODAwMDNBMkJDMUE3MzZFMUJEMTc2MzU4N0Y5NkQ5MDVGQjJCQUYKLToxMDM1OTAwMDY1Q0ZGNzY1M0VEODY1Rjc2NzJFNDNCRjdCMUQ1MjZGMzkKLToxMDM1QTAwMDI3NzgxMkI5RkVERkRBMDlENEJGQTBFQkVCQjJEODcwRUUKLToxMDM1QjAwMEFGMjRBMjUzRTdGNjVBM0RFODQxN0M1N0M1Q0ZFREYyNjAKLToxMDM1QzAwMEY5RTE2MEMxM0FBQzRCNDFGNjREREM3MDgyODU3RjFENUMKLToxMDM1RDAwMEU0NTU4MEVDQTA4RDVFNDkzRjhDNEJBQkVEQkMxRUUzMDcKLToxMDM1RTAwMEQ1NjgxQ0EwQjNCODQzRTVGOTFDQTZCNThDRjkxREFFOEYKLToxMDM1RjAwMEVBQ0NFMzUyMjY4RDREQkY5OUVBM0Y1QjE4Qzc3MUQ3REQKLToxMDM2MDAwMEMzNDUwN0NGQzAwRTM4OUNBNkYyQkEyNzA5NzVERjQwMjQKLToxMDM2MTAwMEFBMjc5RERCNzAyRkMxOTVGMzNGN0Q3MzIwM0RBREE4OTgKLToxMDM2MjAwMEZEQjBDQjFFNEYyQkRFQTcyRjI5MUYyNzg4MEZBNjJGRkIKLToxMDM2MzAwMEI4NzM4MjQ4QjhGMDdBOUQ1RUU2ODA0RkQ5QkFCRTg1RUQKLToxMDM2NDAwMDFEQ0U5RDg0NDlBRTFGQ0JGMTdGODg3OURCNzNCNTRGQ0EKLToxMDM2NTAwMEMwMEY5NUQ5NjQ2RjEzMUY3RDZENkY3ODBDNzE5NUNGNzYKLToxMDM2NjAwMDNDREE5RkYxRkNENDczNUY2REMyNzM2MTZERUVDNUZDRjMKLToxMDM2NzAwMEUxNkMyQzQ0NUNBNkNDMjJFMzRBMEZFNTZBNUZFMDNCOTgKLToxMDM2ODAwMDk2QzYwNEE2NUY2NUM4QzFGNDhCQ0I2RTkwNzJGMUNFNkUKLToxMDM2OTAwMDRCRDMwN0M3RUEzN0VFNTJBODlGRDJEOEZBMEEyRUQ1RTUKLToxMDM2QTAwMDYwN0ZFOEFCRTM0QTM4NDFFOUNFRjhENUIwQUU0RUI4MUEKLToxMDM2QjAwMEMzMDlBMDhGNjY5MUY2NUVFOUU2RTg3OUQyNTA1MzExMEUKLToxMDM2QzAwMDc3MTM0MkZBQTkyMUZCMTAxQUQ3MDIxMkJEMEZCQkYxRTIKLToxMDM2RDAwMERDREVEQTNFQjM5NThFRjQxREE2QTM3MDdEMzJFMzk3NEYKLToxMDM2RTAwMDY4RkY1NDlGOUM3QjA5RUZBNTQ5N0I3RTMzMjRGMzdDQzQKLToxMDM2RjAwMEZDNDVDM0M2N0NDRTFGOEZCRTRFOEFDMjA5NTgyN0M3NjEKLToxMDM3MDAwMDE1Qjk0RTRFMDgyOUJGMDI5QjYzRjQ3ODgxMUNDN0Q3QjgKLToxMDM3MTAwMENGNzVFMDcxQTRFQUVCRTg2QjQ1NkZGNzk0NDNCNjIzRUQKLToxMDM3MjAwMERFODMzRDUzRkE3QkM5NzcwRkRBQkNBQzM3MDNBNDRGNzUKLToxMDM3MzAwMDIwMkY0QkRCNDlCOEQ0OTFFNjg2QkRENTUxMEQ1ODYyOTgKLToxMDM3NDAwMEMxOTdENTgyRDcwQjhEOEREN0U1RjE2RDE5RkNCRTIxQzAKLToxMDM3NTAwMEQ3NDQ5MTEwOTA2QkE1REJEMkQ3NEJCQjRFRjc5QjMxNzIKLToxMDM3NjAwMDAxNkFCRkUwNzdCMjNGQzA5MEZGQzc5RUNFRDBGQjk3MDMKLToxMDM3NzAwMEVCMjk5QUFFRDE3OEM4Q0U5NTcxQUVEQUY4RkMwRUZGN0YKLToxMDM3ODAwMDI4QkU5OTk1RjZGMTVBODhBMDA3NkQ3MjVEMDdFMkE1RUIKLToxMDM3OTAwMDFFMjFCQjI1NkQ2MjNGRUM0RkQ4NERERkZEM0FERTNFNkEKLToxMDM3QTAwMEQzRUZDMjNFODVGOUI5RjFCRDQxQjlEMkVGRUMxQTQ1NkMKLToxMDM3QjAwMEY3OEU2QUYzNEJCMDk3QzQxMzgyRTU0NEY0Mzg0NkUwQzEKLToxMDM3QzAwMDNEQTJEQkQzNEY5RkEzQjMyQUU5NEU4QzY0RjA5Nzg3QzkKLToxMDM3RDAwMEYxMjc2Q0EwQ0Y4Nzc2ODM4RUI3NjY5MDVDMkYwNUFFRkQKLToxMDM3RTAwMEJBQjVFMjcxOTc0RkNCODAxRUY5MUEzMEUxN0I1NzEyQzAKLToxMDM3RjAwMEMxRDlCMEI3QTRGRTMwNjA4MzFFRDE3Q0JBRTRDMzM5MEUKLToxMDM4MDAwMDE5OEQ5MDRGQjlEMjNGQTg4RDQ5RTgyRjEyNTE3NjA5RjIKLToxMDM4MTAwMDQyMEVENDEwNUU1MTRGN0E3MDY2NTEzNkZDRTFCMUY3MUEKLToxMDM4MjAwMDdGNkU2QjlEQ0Y5N0Q1N0UzRkE5QTA3M0YwOUMzNTNFRjAKLToxMDM4MzAwMDI3RDZFN0RDQjUzRUU3QUMwODdBRDQ2RUNFM0RFNDIxNkUKLToxMDM4NDAwMEJDOUZEODZDNDU2NDUyRDQ1QTgzQkZCOTIyMDVDRkQ1RUEKLToxMDM4NTAwMDUwNDA3MEJEMTNGODNFRTFEQUY3MjZEQUNENTk5Qjk0NUIKLToxMDM4NjAwMEEzNDZDOEE3Qjk2QkM2Rjg0QjIyRThEMDc3QjM5OTJFMDgKLToxMDM4NzAwMEZENDI2NkY4RjIzRDY2RjhFN0E0REIzMUJGOUZGQTlFOTEKLToxMDM4ODAwMDJGNkM4NjczMEY5OUUxREQ4MzlBRDUxRkExOUY1Qzk2RkIKLToxMDM4OTAwMEEwNTM0MUQ5QTJGRTA4RjkxRTU0ODNGMDMzQkFERTU5NzEKLToxMDM4QTAwMDM0NzkzQ0MxNDdENkNFRjY4MkNDNzNERjVGOTIwRkZBRjMKLToxMDM4QjAwMDlEREM3OUY3QUU3MjdBRUY0OEIyQzUwQkZGRUFCODA4MjMKLToxMDM4QzAwMEZENzEzQ0QxNjM0RUZEMkFCQkQ1ODNGOTlBRjk3Qzk3RjMKLToxMDM4RDAwMDQ1RTdEQkE3NjUxQzcwN0VEMDVDN0ZCRTdDQThEMUUzOEEKLToxMDM4RTAwMDRFMjIyQjkyQUZBMkU5NEZGRDVFRTdBNzgxOTUyRDlFNTgKLToxMDM4RjAwMDdDM0ZFQzlGNzlFMzg4RTE2OTdDODM0M0FCRUNDMjc1NDQKLToxMDM5MDAwMDI5RkQwNDE4QUZENjA0MTE0RUEzRjEzNUREMURDRkYxMEEKLToxMDM5MTAwMDk3MkIxNjhGMTI5RkQxRjdDQUFERUVGQzVGRDIzQzY3OTIKLToxMDM5MjAwMDM5MTU3N0MwREQxQTU3NkZEQTlFNUUwMTdEQkFEMTZEMDkKLToxMDM5MzAwMEYxOTI4RjIzREM4M0FBMEU2NkU0QzE5RjEwMjFCNzE3OTIKLToxMDM5NDAwMDcxRkRCQjk2QzNFRjlGNTc5NUMwRjg5OTJGODIxQzk3QzYKLToxMDM5NTAwMDlGQjVENEQxMkExRkU5QkY5Mjk1NTFFMzU5MUQ1MTRGMEMKLToxMDM5NjAwMEYzOThCN0Q2REM3RUMxODYxRjFEOTFCMEUxOTc1RTUxRkEKLToxMDM5NzAwMEJGNEVDNTdDNkZENkM3QUQwNjI2QjA1RUJFNDI4RjU3MjAKLToxMDM5ODAwMDdDOEVBNkE0NkZCNjc2MkZEQTlEOEJGNkFCNDdDQTdBRUIKLToxMDM5OTAwMEFCNTNEN0IzN0VGNkYzQ0E1RDc2MEZDQjMzRUJEQkNCRkQKLToxMDM5QTAwMDc5N0Y4N0Q2MjFGNEMzQTFGODM5M0Y4N0JDM0JFRDE0NUEKLToxMDM5QjAwMDZFODcwRkVEMzU4NkJGNkMyN0ZENDJERUI3QTBGNkE3RjgKLToxMDM5QzAwMEQ3MkFBQ0Q3Q0JEQjQ5QjhGQzA5MjU4ODE4NzAzOTgyRDcKLToxMDM5RDAwMEI2ODA5Rjk0NzFEQTMyMUQxRkUwMTM3RkM0N0M0MEFGMjQKLToxMDM5RTAwMDQ4NThENDE5RjFGMTMwRkJCRjE1NTVDMjBCM0I0MDEwQkMKLToxMDM5RjAwMDFERkQwNkRFNzgzRjJBNkMzRjAyM0QxQjUwNDIwRkZCNDcKLToxMDNBMDAwMDYwRUY5OUJGNTNCOUU3NDc0NzI0N0MyRUJFNENBNEFCNjcKLToxMDNBMTAwMEUxRUYwNzE5OEZBQTVERjgyMUM3RDVCQjYyRDk2RTI3RTAKLToxMDNBMjAwMDA1MTAwQkZENkVEM0VENkJCMTIyRDgxRUZBNkEzNUY0OEEKLToxMDNBMzAwMDE1OTVDQjc0M0IzQ0IwNEFFQUFCRDU0OUZFNUU2RUQ0REIKLToxMDNBNDAwMEFGNEFGNzAyMEYzNzI4QkE3RjBCQkIzRTA5RjZGNTNFQTcKLToxMDNBNTAwMEVFQjc1OTcxQkJENzI3QTFCRDA4QzRBNEIwN0QyREZEMTkKLToxMDNBNjAwMDg0QkZBQkFDRUY5QUM5N0U1RjBGN0JERDE3MEE2MzNDNjYKLToxMDNBNzAwMEFCMUZDODY0N0JGRDA1NDNFRkREMTcyM0VERjlGM0VEQzQKLToxMDNBODAwMDZFQjZBRkM0RkREMjdFRkM0ODA4RTlGN0Y2RDBCRTAzOUYKLToxMDNBOTAwMERENjdBQjQ1QkMxOTU1QjJDNDlGOEVFRjk2NENCMjVCNDcKLToxMDNBQTAwMDQwMEYzMUVGRDJGNjQ1MzY1QTY1RkZDRDM0NUZDNEVCOTcKLToxMDNBQjAwMDNGNTc4QTBFNUEyMkVDNjA2NzlFRDQwRkY5MDVGRTREREYKLToxMDNBQzAwMDdBM0IyRkRBOTU1OERFNjYzQzk0NTg4NDFCRkVGQ0M2ODAKLToxMDNBRDAwMEIzQUFCMDEyQkNCMUNFMTE1QzQyQUY5NDc0RjNGNzVBRTIKLToxMDNBRTAwMDk4OERGNzY0N0NFQUIwNEZDQUZCQjgzQ0UxMEY1Mjk5NUQKLToxMDNBRjAwMDk0MjdGNTU1NTI5RUM1NTQ4QUQxMzJDRUYyNzk4Q0U0ODIKLToxMDNCMDAwMEMzRTlBMkE4OTBGNzA3M0M1MkRFNDdDRkEzQjNGRTlEQkUKLToxMDNCMTAwMDEyN0I4Mzc5M0M5RkVDNjdCQTkwQ0U3MzJGMDE3RjhGMjUKLToxMDNCMjAwMDk2NzZDN0U3QjcyOEFDQ0Y2OTNFQkREQzA0RTdGRjRCMEMKLToxMDNCMzAwMDBDQzcxNzNGRDdGNTkxODE1RkUyOUYwMTg4QTMxOTcyRTcKLToxMDNCNDAwMDJCNDlFNzk3RDVGNzA0OUY4QTIxN0NBRkIyMTFERjgwMUMKLToxMDNCNTAwMDZFQzQzNzFCRjM5OEVFNkMxN0FFOUU5NkNBNzRCRjQxQzUKLToxMDNCNjAwMEE3QUJCODJGOUVFOTM2QzQ2MjkxNzhCRTJGOURGMTRDNjkKLToxMDNCNzAwMEVEQzU1RkYxREUxODhGQjRFNzJGRDEwRjIzQkEwRkM4NjAKLToxMDNCODAwMDFCNzBCRTNGNjZEMDVCNTg4MzAzRkVEMUZFNERGOUVFM0QKLToxMDNCOTAwMEFEQkIwMkM0RkYwQjdFRkY0MDgyQTA3NjQ3QUQ3NUE5ODYKLToxMDNCQTAwMDVFN0FCRjZDRTNCMjA0M0Y5NTQ3QUM4MTA0MzdGNTdGODIKLToxMDNCQjAwMDM0QTg4RTBEQjY4MUVGNDUzQTNGNjBGRjQwNDlDNUJFM0YKLToxMDNCQzAwMEFCOTRFM0M3OUVGRURCRjIzQjY4OUNERjJBQTIxOUYyQUUKLToxMDNCRDAwMEIxNjJDN0Y3Q0JFRkEwRjkxREY0M0I5QjIxNEY4RjU4ODMKLToxMDNCRTAwMDFCMEIyMTc3RTcxN0JCQUE2QUJDNThCRkU2MzhGRTgyRDkKLToxMDNCRjAwMDI3MUY0OEY1MzBCRTAzMTk5NjM0NUVGRjE5NzhBRjYyNkYKLToxMDNDMDAwMDgzQ0QwQkJGQUVFMjNERDVFQkMxQkExN0NEQ0IzMUJFRjQKLToxMDNDMTAwMEU4RjcyQjQzOUZEOTgxN0ZCNzQ1MzQ3NzFBRDI0NkJENDkKLToxMDNDMjAwMDY4NjQzOTVGQjlFM0Q3REZBODA5Mjg4RjdFMDRGRkEyNTMKLToxMDNDMzAwMDMyNkFGRjYwOUVCRUJGMTJCRDhGMzAzQkNGOUNDNzQwMzMKLToxMDNDNDAwMEY4RTEzQzg2MDA4REFCMjdCMzhCOEMzQkQ3M0VGNTUwMUIKLToxMDNDNTAwMEZGMjZEODBEMUI1RTRCNTBCMjVCRjcwRjhDN0Q5Nzk2RkQKLToxMDNDNjAwMEQwRUNDNzlGRjc1Qzc4NUQ3RUFEQzc4RDVCRTkyNkU1M0MKLToxMDNDNzAwMDk4NjcwRjBEQUM4MzQwODA4MUNCMzI1QjM4MDFGNjdFQjQKLToxMDNDODAwMEQ5M0ExQkNCOTFCMkFENEY2QzdBMThGQ0Y2QTFDM0RCQ0QKLToxMDNDOTAwMEQzMDNGOEI0MURGMkEwNENGMTM3MkIyQ0RGNDU4MjkyRjAKLToxMDNDQTAwMERGNEFBRkQyQUQ1RjE0M0UwMkZCM0E1RDE1RTM4ODVFOUEKLToxMDNDQjAwMDBCOUUzRDIzREJGQjQ1NzMwQ0I1MkZERERFNTQwOEZGNjcKLToxMDNDQzAwMEEwNEM3MzU1MzlEQkEwRDdBOEQwNEJGNjQ2NTcxQkY0NTAKLToxMDNDRDAwMDBBMzUxNTcyOUNFQUE5RUY5ODFFNDdGNzJBQTI0M0U2MTcKLToxMDNDRTAwMEY5RUZDRjVCRjc4NTVENDhGRkEwQjk1RDkyQzQxN0Y0OEIKLToxMDNDRjAwMDVENjU0ODJEQjYyNzlFREY5RUJFM0ZFMUY5M0NBRTc3NUQKLToxMDNEMDAwMEMzNUZCOTE4MUQ0NzAxMTc4ODEzRUM4RTE3NDlEMERCMjQKLToxMDNEMTAwMDFGMzk4MkUzNDBERjZEOEIxMjA0RjFGRjU3RDYyQUM5QTkKLToxMDNEMjAwMEY3OEYyRTRCODU5RDM3Q0YxNjQ4NzU3MzI5OUZDRjdCMTQKLToxMDNEMzAwMEVDMzZFNkM3Qjk0QTU1QUEzQjlCRjkzREREMzI4OEU3MjgKLToxMDNENDAwMDlCOEU3OURFQkNGNjVBOUVFNzFDQTEzMTNGQ0U3QjU0OTgKLToxMDNENTAwMDJEMEE1Mjc5QzYyQUM2NkU2RjYzREQ5Q0Q0RTU5NDQzNjIKLToxMDNENjAwMERDRDIxRkVCRTQwQzdEMDk3QUZDMkJEREFGMEZCQzIzMEEKLToxMDNENzAwMEZENjk4Nzk4OTQxOEI5OUZCNDU3OTc4QjAxMTEzQzBDMzMKLToxMDNEODAwMDNENTBEOTYwRTMzODg1RkFGNjk5NDI3Q0U3RDY0QzZCMTIKLToxMDNEOTAwMDE1RjIzRDY4RkUwMTFENUZDQThGRDI3RkYxMjBFRkExQjEKLToxMDNEQTAwMDEyRkYyMjdEM0FFQUVEMzExRDFBQjNGMUZEMTZGQjRERUIKLToxMDNEQjAwMEQ0RUY1RkUwMjc3QTRERUYzMURFQkU1QUVGODg1NTJFMDMKLToxMDNEQzAwMEE3MzI1NURBRUZEMUYzRTgzNDQwMzFFQ0I4Nzc0NDA0NDgKLToxMDNERDAwMDNGNTU2RUZFOEFGOTQ5QTRBOTIyMzE0REMyRDhCRjcwNjEKLToxMDNERTAwMENGNzI1NTI1MTJERUZFRjJERTY3NzZDNEJGMDMyOTE2QjgKLToxMDNERjAwMEQxMTNFMzZERjg4MjYxRTE2REVGNDE3QkUzRkI5NTdCQ0QKLToxMDNFMDAwMDFDMjIxQ0I5NkUzNzdDMTFCNUFFQ0RGNTQyNTQzMTNFNDMKLToxMDNFMTAwMDJCNDVBMjA3RkFGQjJCN0I3M0UxMEJFODg3RkFERDQ4MDEKLToxMDNFMjAwMEZEQ0MyMUZCMkI2Q0IyQUY5QTBCMUY4MTNDRDk2Mzc3ODEKLToxMDNFMzAwMDczRkM4MUVDQ0Y3MDA0REY5Q0RCMUZENUY3MDVFN0VBNEMKLToxMDNFNDAwMEYyMjAxQTBGRDFGMkUxQUIyOEY5NjBCQzJGRDZCNkJEMzMKLToxMDNFNTAwMDFGRDUyQTE3MDIyQzRGQ0I2QzIyMDAzQkEzRUM0MzA3NDMKLToxMDNFNjAwMEVCOEZCMkFENzIzRDBBOTJBNzNENjk3RDFDREZCMkZGQjgKLToxMDNFNzAwMDhGMzdDMDlGMEREOTUyQzY3MUFGNjZGOTNCRUY5OTJGQUUKLToxMDNFODAwMDc4NUVCMzA5RkYzMTVFQzhERkVGRUNGMDdGRDM0Njg5N0YKLToxMDNFOTAwMDY2MDdGNjhCNTdGQUVDRTBGQkYzRDYzMTNENkY3MzFERTYKLToxMDNFQTAwMEFGNTQ1OEJFRkQ1N0U1MkVFMURCMEU3QkVCNjJFQjc1QTAKLToxMDNFQjAwMEVFMDVFNDZFRjIwMDczREVEMDE5OTE5RDM4MDQ5NUVFQTQKLToxMDNFQzAwMEUyQUVCQzdGMTA4NTVGMDNBRkQxNzJGNEU5M0M0RjlCM0IKLToxMDNFRDAwMDcyOTRGRUZDNTE0NEUwNTE4ODQ2RTZFMzZGNDkyRTYyM0QKLToxMDNFRTAwMDFGQUU2MkMzRjdBQ0Q3MDhBRENEMEVFMkUzOEFFMDM3NzAKLToxMDNFRjAwMDBDMkY4MzVFNjNGOEE1Mjk4ODU3OUUzRjZGMzMzRUEzM0UKLToxMDNGMDAwMEVCREYwM0VGRDNEMDhCOUVCM0IxNUQ1MDU2MkZGMzFDODQKLToxMDNGMTAwMEU5M0RGNjNCMkExMUFGRTdENjc1MDczMzUyMjJFMTYwM0YKLToxMDNGMjAwMDE0MUM4QTZBRUY4RjgyOEJBMkRBNkI1MTcwOTVBOTdEN0YKLToxMDNGMzAwMEQ5OUVGREVDNjdEMUI4NERFRDFDOEJBRjYxM0ZFNDdDQTEKLToxMDNGNDAwMEJCMjJDODc4QUREQ0YxOEQzRDAwRkVFOEQ0NkM4NzVDMDcKLToxMDNGNTAwMEI0MkQxMTgxNzg3QUJGRjk0NTk1RURERTUzOUVFNjA0QzQKLToxMDNGNjAwMEQ4MjlDQjYyQTQxRDc3Q0FBREMzNDkwNjJDNjYxNkQzRTcKLToxMDNGNzAwMDM4NEUwNUZBQkI5MTU3RDAxQzIzRTMyREE3OEE5QTEzMUMKLToxMDNGODAwMDkyMjJGQ0Y2QTY3QTM1QzE0M0VEMUI4MzYyNkNEQjc5ODUKLToxMDNGOTAwMDMxQjU4Q0Q3NDY3MUExN0E2OUNGOEQ1MTdGRDgyNkYzODAKLToxMDNGQTAwMDQ1QURDMjQxRkQzNUQ2N0NCNzBERjFBNENGQzk3RjgyQTYKLToxMDNGQjAwMEZENTI1MjczN0QwMkY2NUY0RUQ1NzdGRkQ5NTRGODgxREEKLToxMDNGQzAwMEFGQUE5Q0YzMjUwMjdFM0JGMjI2NjY0QjUyOEEyMzIyM0YKLToxMDNGRDAwMEYwRTA1MDlBOUYxQTlGNzdGMDA1Rjg1N0M0MjhEOEZGNTEKLToxMDNGRTAwMDJDNTkxOTY1REY4OEEyQzQzMEZDRTlENUQxRjkwRDQxRkYKLToxMDNGRjAwMDNCRUM5QkI5QTQ2NzIxOEZFNkFEMzVENzJGQTgzRkNFMDgKLToxMDQwMDAwMEVCNjU0MUQ0N0FEMUY0Qjg3MUY0N0E1OTZDQUMxNzlGNEUKLToxMDQwMTAwMEYwRTlGOTk2OUNENzc3RUE5MENBRkNENUIyRDQyNjk2RjcKLToxMDQwMjAwMEE3QzhCQzVBRTRBM0I0RDRDQjdDOUQ5NjNEMTIxNjAxMUMKLToxMDQwMzAwMDNEMEY0ODVGQjcwNkRFNEU2MDNERjVCRUIwREQ3MjYyRjMKLToxMDQwNDAwMEU3QkZFN0ZGMTJGQ0IzRUJFM0ZFOEY1MDc5NjJENzg3M0YKLToxMDQwNTAwMEJENUUwMEJDRkI0RjVEM0UxNkU3QjcxRkI1RjdGQjE5MTEKLToxMDQwNjAwMDNDQUVCRDBFODE3MTlEREFGQjRBMTdEODFCQTc5RTc3MjcKLToxMDQwNzAwMDcwM0VDMkE5MjUwRUI2RDcwMzdCRTMzOTZFNzFBQUIzOTEKLToxMDQwODAwMEI0ODc2QjVGRkNBRTdGMjNFQkUzQTU0Q0M3MjcwNkQ4NTQKLToxMDQwOTAwMEE1NUQ1NUZGMzdENjhGMkRGNTBFMEZFNjUxQjkzNzhFM0EKLToxMDQwQTAwMEQ3NTVFNUYzMzFCQ0FGNzZFQUM1RUZGMjIzRTM3MUZGRjQKLToxMDQwQjAwMEQ1RjkxOEZCRjBBN0UyQzVENDY3QzBCRkJBRkQ1RkY5MTgKLToxMDQwQzAwMEMyRTAyNzZBRTAyRkVGNzhDOTNFMUI3OTI1N0ZGODhGODEKLToxMDQwRDAwMEZFOTBBRkE3OUU3OTg5RTVFRkQ3QjZDNkM3MTBEQkRDQTcKLToxMDQwRTAwMEI2RjNDMEMzQjY3NEM0RjVFODYzMUQ4NUI4NzI5N0Y1MUUKLToxMDQwRjAwMDQ2QUM5RkYzRjEyMkYxNzA4QUYwODA3OTExNUVFNkMxM0YKLToxMDQxMDAwMDJFQkYxMDNFNUVGRUE3QzVDNzM3MzNBNDlDMUIyOEIwNDgKLToxMDQxMTAwMEVGRDM4QTE3QzUyRjlGQzc3M0JDOEFFNjJGOUZFRkZEODkKLToxMDQxMjAwMEFFM0ZFNEQwQzVFNkZCMTlFNkRCRkVGRkNFN0M5NUZDOTYKLToxMDQxMzAwMDdGRDZGOTRBN0VCRjY3ODA4N0M3MTlDREY3RTdGM0Y1QzkKLToxMDQxNDAwMEVFOUYzM0JDMkRERUNCRTNCREM0RjU5RTk5RkY3RjhCODQKLToxMDQxNTAwMEJGNDdGQ0QzQ0VGNzYyRjQ3RTU1QTc3N0JDMUJGQkEwMEMKLToxMDQxNjAwMEE3NUVGQzhGMkVFMjI3Q0M3QkM2RkY1MjNFMzdFQ0Y5RDAKLToxMDQxNzAwMDAyRDU3QkM4NDdFRDVGMTNBMUY3QkM5OTZDOTVCNDY5NzQKLToxMDQxODAwMDhGRkMzQURGODhBNzQ4N0Y2QTE0RkVFNTQxRkI5Q0E1QjcKLToxMDQxOTAwMDIxQUMwN0IyMjdFMEM3RDRCQTcyMEVCQzRERjAyQjY0MzUKLToxMDQxQTAwMDI3QThCQzJGMkJFMzQ5QUZBNEY5ODIzMkJFNUIyNTEwQjAKLToxMDQxQjAwMENGMkFGOEQzNkM4NjVGRjc1RDc5MDA3OTI1ODVBQThDQzQKLToxMDQxQzAwMEM3RUNBRkYxNkU2OEEwNzlFQzRGQjI3ODZBMDkxRUREREEKLToxMDQxRDAwMDY5RjZFN0RCQTlERURENTE3NUMzM0ZBQkVEOTRFQkY0ODcKLToxMDQxRTAwMDQ0OEM2RkI0Q0JFQzY3NUQxM0U1Mjc1REU1MzFENzhGNjkKLToxMDQxRjAwMDE1Q0ZBNDYwQkY2RTZDQjY0REUwN0M0RTIxREE0N0Y4NTcKLToxMDQyMDAwMDk1RjNGM0REM0NDRkFCNDRERDUyQjdFQkE3RTNFOTM5REYKLToxMDQyMTAwMDNEQUY5MkYwQzJGQjM2ODE0RUFBOUUxNzY3QzY5QjAwNDcKLToxMDQyMjAwMERFNTI4MDk3NUNCNkRGMDNDMjdCRTA2RDgyQURCQTdENjMKLToxMDQyMzAwMDI1RjRGREM3NDI2N0ZDMjZGOEQxMEU1MTEwMEUxMjdDMDIKLToxMDQyNDAwMEM2NjNBRDQyN0JBQjIwN0Y1OENFOTNGREU4NjhCQzA5QzYKLToxMDQyNTAwMEREQUZCNkVBMjQxOERENjk1NDE4NzhDNkYzQUU2OUE2NTYKLToxMDQyNjAwMEY3NzlERUQxNzhGRUU5NzhEREQ3NjkxMUYwOUExNkVGOUIKLToxMDQyNzAwMDBEODIyRjNBM0Q5QjgyMzg2QjJERTE1OTUxNUFGMTY5REQKLToxMDQyODAwMEUwMjkxQUVGQkZBMUIxNEE3RjVERTJCQjkzRDU2N0M1QjQKLToxMDQyOTAwMDNBMUJBNkRCRjNBM0FENDkxMkVFRDRBMDE2RjFGQTBCM0MKLToxMDQyQTAwMDRBQkVGRThCRDcwQTdCNjRBNDJCODlGMzQ5ODU3RUNFNTgKLToxMDQyQjAwMDQyRDVGN0MzOTE2MUM3RTMyMEZGMTQ3OUI5MTNBRERBOTIKLToxMDQyQzAwMEFCRjk5QzhGRUYxNjA1RjA1QjBCNDQwOEYxNUJBNUZFODQKLToxMDQyRDAwMDk1RUZFMTFGRTE3QzQ5MTFFRjZCMUVGQzAwNzA2RkE3QTkKLToxMDQyRTAwMDJCMEM3RjUwQUNCNTlFMzg2NzI3MjNFRTFGNzVCRTYyM0UKLToxMDQyRjAwMEMyQTBFRDIzNDFBRjU5OEJFOTE5RTI1ODZFQ0Y0MUFDMTIKLToxMDQzMDAwMEM3RTJGQjFEMUVEMEFGOTNCNTgxRUJDOUQ3NzJENzBDQTYKLToxMDQzMTAwMEM2NkU3NTg4RTFEODEyQjJGNEQzRDFFRTk1OTFEQzdFRTkKLToxMDQzMjAwMDkxNzAyQjQ5NDhCNzBCMjk4MDVENkU5OUFGNDZDRUVCNTMKLToxMDQzMzAwMEI3ODBFRDRCRTMzREI1MzI2RTIyQzA0RjNENTA3NkMzQTIKLToxMDQzNDAwMEY3NjVGQkI0RDFGNDNERTRCQjA5OERFREU1RDgxRTFDNDcKLToxMDQzNTAwMDA5MTJERDk0MjJERTdGRUZEQTVERTY0NTM0MkY3M0IwN0IKLToxMDQzNjAwMEJGNTM3Qzc3RTc1RTkwNEJFMzBBQ0M3MUVCQTEwMzY1MEEKLToxMDQzNzAwMDNDQzcyODlGMUEyOEU1ODg2QUYxQTZFMTNCQjM5NkY2NjgKLToxMDQzODAwMDYxRkY0QjhEMkQyQURGMDkzQzZFOEI2MzNFMkY1RTdFRDUKLToxMDQzOTAwMEQzRjgwMUY0RkRFMjZERURCQzE4RTZCMTA5REJGMzY1N0QKLToxMDQzQTAwMEZCNjlCN0JENEZDRkI1Q0QzMUZDRkNGNTgxREFGN0Y5MkMKLToxMDQzQjAwMEM4MzM1MDNDMzM3NkQyODM1OUQ3RUVCN0E3NTExNzVBM0EKLToxMDQzQzAwMDY4RTI0OUM0MUQyNzA0QjZCRjg5N0RDRTA5NTM1NDZFRTcKLToxMDQzRDAwMDNGNDFDRkZGMTQ0QkUzNzhERjdDN0NFMDFCNkIxQTdEMDEKLToxMDQzRTAwMDZGM0MzOTM1QTg2RjhBNzE3N0I5ODVDNjVGQUNDNzlCQkEKLToxMDQzRjAwMDZEMDNFNTNBNTQ2Mzg1RjY4QzBCRTNFQURDQUIxQjNEQjkKLToxMDQ0MDAwMDFGMkY2NDNFNzRGNEJBMURBOUI3RUYzQUNBRUI0OTAxRjUKLToxMDQ0MTAwMDdFOTQxOEY3RkFCQ0Q2RjZGODBFQkU3QkE1OEUwRkY3ODEKLToxMDQ0MjAwMDQwQjlFRjZCQzA4NDU3OEU4Qjk3QUM3MDM0NzU0RjQwOUEKLToxMDQ0MzAwMDY5MEJGN0E2QjI3QTcwNDFDQTQwQUExRkQ3NEQxNEFFRDUKLToxMDQ0NDAwMEMxNzc2RjU3QzU3QTFFNkY3MzMxQzdEOUUzQjMzQ0EwRUMKLToxMDQ0NTAwMDgzMjZFQTM4REY0OEFDRUVDOUZCMzk0RDIzMDVGMzRGMUMKLToxMDQ0NjAwMEQzQUE0QzgzREU5QzlGNjRGODczNEQyM0JEMDc5MUJGOTQKLToxMDQ0NzAwMEQ1M0NEMkU5NURFRjQ1N0U0QjI4OEMzOENBRTEzNTcyRDgKLToxMDQ0ODAwMEJGQTY2QjZEQjgwN0U0NkNCMzRGRUU4MzdDQjEzOEQ3MzEKLToxMDQ0OTAwMDAzM0VCOUY5ODFDOTA5OTA5RkIzNTdBQjYxMDdGODdEMTUKLToxMDQ0QTAwMEE1Mzk2RjQ5QjhCRDlDMzczRUJCNkVBNDFERkU2Qjg5MTQKLToxMDQ0QjAwMENCNkZDN0JDQUUxQUE0NzkwNzQyRkVFQkU3MjIyRkMzMkQKLToxMDQ0QzAwMDk4NzBFRUE3QUVGODc1Rjg3RDZBMDJBRDY3QUMzRkFCQTkKLToxMDQ0RDAwMDI3MDE3RTc1NzRERTUzQTU5RURGNjRDMENCNTJCNUMxNDMKLToxMDQ0RTAwMEY4REVBQzQ0Q0YzNjNFNUZCOUI4M0JDNzU1NkYxRjI4RTYKLToxMDQ0RjAwMEU1QUZCMDg2N0IwMDNGOEZEMTVBQzBGQTNDOTEyRkY5Q0YKLToxMDQ1MDAwMDZGNUNCMkJCOTc4QkY5Mzc0NjYwNUU0RDM2NzcyRkYwMDQKLToxMDQ1MTAwMDczRDNCMjE4MEJGMDM0NkU4OUU0RTM3QkFDNzI3RDA1ODMKLToxMDQ1MjAwMEZEMUU0QjgwREU4RkQxRjk3NzdBOERCNTY4MURGNUQzRUUKLToxMDQ1MzAwMEM5MjlBQ0YxQzlDODVCRDNEQzE4QzdGODQwQ0Q2MUY4MTQKLToxMDQ1NDAwMEQ3QjM3NTdEMzU3QkE1M0MzRkQ2NzU5NEE0QUJCMDM2MEIKLToxMDQ1NTAwMDhDNkU0N0NGOEY2Q0NDQ0M0MTVFQkNDMTM3RjU4MzBCRTIKLToxMDQ1NjAwMDhBMDY0NkQwN0Y1QzgxQkZCMDNEN0Q2NzlDQzVEMzAyODMKLToxMDQ1NzAwMDM5NUMzMjQ1NzlBOUJCRTQ4MzZCMDdCMjNGNUZDRkVCNkYKLToxMDQ1ODAwMEJDODVFNDg0MjMwOUU3MDYxQjI0OEM3QzU1Qzg4REJBQkUKLToxMDQ1OTAwMDg3RkNDRTA4QkZERDJFNzY3MEJEQkQ0NEU2QTM3NkI1QTAKLToxMDQ1QTAwMDg3NkIzOEZGRUExNkUxNUU0MkYwMjZCMjIzQUMzNjIxNzMKLToxMDQ1QjAwMDM2NTczQkI5N0NCQTlBRTQ1RDRGMjFCNjU0QTczMUJDNUIKLToxMDQ1QzAwMEFEREFDMzY1QTgzQThCOUYzRjUzRUQ2NTc4NDdGNTIwNzgKLToxMDQ1RDAwMDg2Nzc1NUZCMTlERTUzM0Q5NkNCRTdBQjhCRjg3OUI0NjQKLToxMDQ1RTAwMEZDOTlFRDlBQzNGMkM0REQ4QjY4M0RGODdDQkU5OUUxN0QKLToxMDQ1RjAwMEExNzE0MUZFMzg4NUZCNkVFNEQzMEEyOUVGOTJCMkE0ODMKLToxMDQ2MDAwMEZDMTFCQTNDRUFENjQ3RjBGOTlCREI0MTBGQzJCQjZEMDcKLToxMDQ2MTAwMEM1NDgwQjlGRjdCNDM2QTY4M0VGQzZBODI3QjZFRTQ2NkIKLToxMDQ2MjAwMEJDNjM5RThCRjNCMjVBNDQyM0FGOTMxNjYxRjEwNkYyM0EKLToxMDQ2MzAwMEE0RkM3MTEwREY3NUJENkI2QzY2NjQ5RUZBOERGMzE0N0IKLToxMDQ2NDAwMDYxOERFMEFGOUJBQTYyODQzNTQyM0ZDRDVDOUM2NDgyNjEKLToxMDQ2NTAwMEE3MkY3RUY3RTUwRUY0RkQzRUREQjQ3QjQxRkZDMzc3NjcKLToxMDQ2NjAwMDdERjlFODlGRThGOUUzNzcxREVCMjlDRkY1RkVCMDJFNDEKLToxMDQ2NzAwMDMyRUVEMjIyOUEyNTZDNzVGMjdFRkNFMzc3QTRBN0I2QkYKLToxMDQ2ODAwMEVCMjZCRjA3N0FDREMyM0YzQ0EwNEZGM0QxMjdCMTBFMzYKLToxMDQ2OTAwMDk3QTlERTI1MDQ3RjA0RkExMDNFM0ZEMUU5NTNCQ0FDNTQKLToxMDQ2QTAwMEZCRjI1RjYwNURGQjlENUU4NUJFNzNGODhFQkU4NTgzMDkKLToxMDQ2QjAwMEE4RkRFM0ZBN0U5NDU4NDE3ODhERDQzMzY5NTI3RjdEMEEKLToxMDQ2QzAwMDBBRkQ5NTI0RjU1OTAxRTQ2ODU4RUFBRDRGN0Y5NTFBMjMKLToxMDQ2RDAwMEI4MUJGNUI3MjQ3ODcxMDI0MjVCRDEyMTMwOTdFMDk1ODEKLToxMDQ2RTAwMDNFQkI1NzQ1NUNBRjVFMkM0N0RDODY3MDJDRUQ4QTgwNjQKLToxMDQ2RjAwMENEQUNDNzFBM0IyNTIxMUU2QzlDOTM4RUNCMEIzQUY5OEYKLToxMDQ3MDAwMDlDMTY3NTg0RkQ5ODU5NTlGQjQ0M0FFNDUyOURFMkM2QzMKLToxMDQ3MTAwMDdFMERDRTc1M0E5MzIxREYxNERFMUY0NTFFRDAxNEQyRDQKLToxMDQ3MjAwMDk3Q0YwRTU0Nzk3RDlEQ0FCNzcyNzkwRDkyRTUwOEFGODcKLToxMDQ3MzAwMDMxQzJDQkYxOTk5Mjk1RDQxRUYyQjFDRTY3OUYxMzIxNkQKLToxMDQ3NDAwMDdGNjdFOUNGNjc2NzU5QjgzNDlFRUZEM0JGRDc3MTg1Q0MKLToxMDQ3NTAwMDZGMkFGOEEzMjNFQUIzNTFFNjRDQzVGODNBQkEwQUFEN0EKLToxMDQ3NjAwMDRBQzRGRTZGRkQ0MDJCRjc3NzJBNUZGNjdCMEQ4ODRBMUYKLToxMDQ3NzAwMEVGREY5QkQ1Q0Q3RTczMzY5RkNGNjJCRDY1RjQzMzJCQzMKLToxMDQ3ODAwMDJCNjc3OTM3RThFQjk1MjM4MTFENTE2QkYzQTZBNTUwNzQKLToxMDQ3OTAwMEJCOTcwNzVBRjU3OUU4RTdDMjlEMzIzRkJCRUMwMjdBMzYKLToxMDQ3QTAwMEMzODhEMzFEQzEzRkU1Mzk0OTlFRUY4MjZEQkZEQjg2Q0IKLToxMDQ3QjAwMDczMTIwQjNFNzZCMEZFNUE3MEI5RDQ0QjIyM0I5ODNGMzEKLToxMDQ3QzAwMDk5MDM5QUU2QjhGOEU4REY5RDNDNzgzNzhERTcyNENFNjgKLToxMDQ3RDAwMDMxMjFERUJGRTMzMzNCRjI0MzY5RDk1NDI1QTYwMzU2QUEKLToxMDQ3RTAwMDlCOTA2NzFBMUQ5RjNEQjBFREUzODQzNkUzRTIzQkQ0MTYKLToxMDQ3RjAwMDRCOEI4QjJCM0YyNDQwMkYxOEYzMTlGM0UyOTk1NEQ4OUQKLToxMDQ4MDAwMDU5OTVDQTU5REU2N0FBN0M5MTI0NzUxQkYzOEU4RThCNEQKLToxMDQ4MTAwMDlGOEI5RjhCOTVERkE4ODgzM0RGNzlBNENERjg3OTc0QkYKLToxMDQ4MjAwMDFDRjBGQjgxRDFGQjExQUUwMkM4ODkzMzg3RDQyMEY2N0UKLToxMDQ4MzAwMEQzNUI4MjNEMTM0NTFCRkQxQkYxRjNDQTM1RjQ1MjNCOUMKLToxMDQ4NDAwMEFDNEI0RjIyRjZDMzRFNURDMDJFMUYzRTQ4RkEyRjI3QjkKLToxMDQ4NTAwMEY1NzhGQkE5MkQyQUZCNEJBN0I2QzQwNzYxOUY1NjZDQzAKLToxMDQ4NjAwMEI5RkYyMEY2MjkyQjM2Mjg2QzlFOTc4QjA2QzYxN0UxRDgKLToxMDQ4NzAwMDUxMzgyM0Y1MThGMkREREFDMUI4RjYyNDQyNUUxOUUzQTcKLToxMDQ4ODAwMDJCRkQ1RDdDMTVGODZBN0U0OEYxNkZBNDcxQjQzODNENEMKLToxMDQ4OTAwMDg5RUQyM0M2RDE3MTkwRTRDRjUyNDcyODlGRjFBQThGQUEKLToxMDQ4QTAwMERCM0Q0OENBNDFBM0RERkNGQUZCMzkyRTRERURCRTY2NjcKLToxMDQ4QjAwMDdCRTdGNzcxODJGMzA0NDVGMzlCMThERkYxQjVCOTVFMkUKLToxMDQ4QzAwMEVDMkJDRTBGNkRBRkUwRkM4RTJENzE2RUM0MjE4RUU5MDYKLToxMDQ4RDAwMDc5Q0VDNjc3N0FFOUZERjUxQTI0RUQ5NEUzRkFGRUREODgKLToxMDQ4RTAwMEYxNkRGMjdDM0FDNjg5RjU3NDRDMzFFNzBCNjZFQkVGNUIKLToxMDQ4RjAwMDY1RUJGODdBNDc1RkM3NDZGQkY5QTFBNjg0MUVENEZFOTQKLToxMDQ5MDAwMEFCM0RFRjcyOTkzRjQ4QUU5N0Y5QUU4NkZFRDBCQjVGRTQKLToxMDQ5MTAwMEVEODhFM0ZERjhBRjc2M0M1Mjg4MzhGM0M5RDBDODE0NkYKLToxMDQ5MjAwMEYwRkYzOTdGNkQ5MDRERDI2MUFEM0ExNkY4MTI0MTk5ODIKLToxMDQ5MzAwMDY3NTMwRUJDRTY0NjhFQjNEREJBNDA2NkU0M0E5M0Y5OUYKLToxMDQ5NDAwMDQ2Qzc3NzNDOUI2MEM5NkVBNTYzQjlCM0NBODlGM0ExMUEKLToxMDQ5NTAwMDk1M0I2RTI5MDIxRjFGQjQ0OTdDREE3NzRDMENFMEQ4RDYKLToxMDQ5NjAwMDczNjVCRDRGODA3Rjc5OURBNTczRkIxNTk2ODg3NjBFODQKLToxMDQ5NzAwMDlCOTdFRDYyREI5RTYyM0ZEQTFCNzFFODg1M0I2RDdDQTUKLToxMDQ5ODAwMEJFNzBDNkU1OUVFQjZGQzQzQTdDQ0RDNjc0NThEOEM3REUKLToxMDQ5OTAwMDczM0RFNzIzMzVBODlDQkZCQzMwNTM4NDYxN0YyQ0JBOUMKLToxMDQ5QTAwMDNEN0UxREY2QzM4Q0YxQ0VDODk1RUJCRDZDODUyMkZDMTcKLToxMDQ5QjAwMDM0QUZCMkEwMkEzNDJBM0IxMkREMDNDODUxNEE2QjFDMjMKLToxMDQ5QzAwMDgwRkNDOUE2Q0NFMDNEQkQ1MkY4QkM2Rjc4N0Q0QTZCMzcKLToxMDQ5RDAwMDlFMjlBREUzNUUzODE3NTkzRTI4OTlFN0ZERTBCNDQyQzEKLToxMDQ5RTAwMEQ2Nzc4N0VEMjIwMEI5MTA3ODQ2RTZFMTk0NzU5M0Y5MDEKLToxMDQ5RjAwMEQxMEY4M0VGRDE1RjcyQjg1NzNCOUFFRjA5OURBRTY1MzcKLToxMDRBMDAwMDkzQzJCRDkwOTc1MUY2NEMzQUU3NjU5Q0IwQ0JGRDUyRUUKLToxMDRBMTAwMDNDQzc3RTcxNTkwRUJENEZFRDUyRjQ3QzVFQkM5RjE0QjUKLToxMDRBMjAwMEMxNDc2NUIzQkMxRUI0NTM5M0JEMUU5RjBCRTM3NTdGOTYKLToxMDRBMzAwMENENzZFQkNFNzgwMUJCRDVCMjNCNUVDRkFGOEFFMTNDMDEKLToxMDRBNDAwMDcyRTNCRDlBNDFEMjJFNEVEMUU5Mjk2RTkwRjk5ODBGQUEKLToxMDRBNTAwMERBNjRCRUVBODMxQkQzRjk3RTBDQTNGRDgzMzY2RDFBOUMKLToxMDRBNjAwMEVDMjdDQzAzRjZGQTdDN0I1RDJGRUNCQjE4RTM5RDlGMTMKLToxMDRBNzAwMDUwQzdFMzNDQTFGM0Y5RkNEODNBOTkxN0FFOUYzQjQ2RTcKLToxMDRBODAwMDdCQzA0RDdBMUU3QkYzNTMwRUNFNUYzOTk2REVGMDJENDAKLToxMDRBOTAwMEM2N0JFQ0E5M0VDODgxMDFCRUU3RUNFMTdBQjIxRjg5NzIKLToxMDRBQTAwMDlFMEI5RTc2ODQ1MTdGRjQyOTE5QjczRTZBMEI3RTBCQ0MKLToxMDRBQjAwMDM5N0NGNEQxNzY3QzNFRUE2OEZCNjAzRUU3MDcyODZFREQKLToxMDRBQzAwMDBCRUNCM0EzOEEwRURCREM2QzU3NzZCNTEzNENFRDUzQkQKLToxMDRBRDAwMDYyODUwNUY5M0I2MzI3QUQ5OTgxRkM4Njk2MEQwRUIwODIKLToxMDRBRTAwMEE3MzhCNkU5QTE1NEY2NkI4NDI3OTFGMzZDMEVBOTAyOUUKLToxMDRBRjAwMDc0M0JGNkY0REZGQTQ0REEyRjQ2Qjk2MDgzMzlFRkFFM0YKLToxMDRCMDAwMDI5NTNEQTk1NDZGRDNBN0Q1REFFRDNEN0Y1QzY0MTUyQkQKLToxMDRCMTAwMDRGOTVDNzg1MUVFQ0M2RjM5M0Y4MjZGQUIwN0Y0NzBBNzcKLToxMDRCMjAwMDNFOUVGMzI3QjZGNjU0MjAzNzFFMTZDMTlGN0Y5Q0M3QzIKLToxMDRCMzAwMDVFQjYwNzc5RjM2NUNGM0NGNTI2RjY2QjhGNTk0NDAzRDMKLToxMDRCNDAwMEVDMEZFNUFFQ0QzRkM3RkQxQzI5QkY0OTY0M0QyNEM0MzEKLToxMDRCNTAwMDA2OUVERjUxQjczQ0Q3NEEwQjk2RTczRkJGODM4NDE3QzkKLToxMDRCNjAwMDRDREVEQzBCRjA0MUQyMzkwQUFEQUYwNTE2ODVGQjVGOTgKLToxMDRCNzAwMEIwQUIxRkU3REIxMTNEMkNCQzRGQjY1REQ1Qzc0MzM2NEMKLToxMDRCODAwMDI1RjBCNzQ5RTYyQjhGNEIwRTZFODJCREQ3RkM2ODc3QjgKLToxMDRCOTAwMDgxRjNFRTYzRDRCNUZENDFCRkQzMUJFMjJDRTBBN0YyNTUKLToxMDRCQTAwMEJCODcyNDBFMDFERURFNTIwNUVDOEZEMzU2NkY4N0M4MUIKLToxMDRCQjAwMDM4NDIzNEJFQTJGM0MwQkZENUU1NTMxOUFEM0I5Q0ZGQ0MKLToxMDRCQzAwMDJDRERGNTI4REYyRjUyMEFCRTA0NUU5RTU2NzgxRkJCRUYKLToxMDRCRDAwMDc0Rjk5MDg3OTg0RkRGQjQ4OTlFRDRFRjg5RDBGRDA5OEUKLToxMDRCRTAwMDkxRjQ2OUQ0RTVFMkI5RUZEOEJERENCRTk0REFDQkY3MzUKLToxMDRCRjAwMDVGNEJFMDcxNkVCMjcxNUU0QjM0NUQyRkY5RkRBN0Q1NEUKLToxMDRDMDAwMDRCN0FGRkRDRkM0MzY0MTdGNDNGMUYwRkE3NDVDM0NGNkIKLToxMDRDMTAwMDNGQTZFRkZGNjU0QjBDRkI4M0U0MDFGMDM5QjZFM0I2MkEKLToxMDRDMjAwMEQwMUNDQ0ZCRjhENjE4OTY1RkM3OTNBNDlDRjg4QUU0RjYKLToxMDRDMzAwMDY5QTAzN0M2NzFDRDZGOTk0RkRGOTlDQ0U3RkRFNjA2QzUKLToxMDRDNDAwMENEREYzNUZBRkQwMjcyMUM3Q0Q3Q0U5QjA4QkZCM0ZDQ0EKLToxMDRDNTAwMDJEMjkwRjg5NUUzRkUzRjdERkIyRjFGQkQxRjMzOEEwRDYKLToxMDRDNjAwMEJGNzc2RTlENkU4RDYzQkUzOERFNTFEMkUzRjhCNkRFM0YKLToxMDRDNzAwMEFDOUY5QTkyREM4MkY5RTYyOTlCQUNCNzg1QkFDMDBFNEMKLToxMDRDODAwMDNFQkVCNUI3QUYzNkUyQkJDNzkzNDI1RERDMTFDRjlCRUEKLToxMDRDOTAwMDZDQzFFNTAzQTUzQzZEODY1RjJDQzIyNDZBRjM5MTVGNkQKLToxMDRDQTAwMDI0NThDRTFCRUY5NTNBNTczNkMwNEU0MTdFNkY3RTBFOEMKLToxMDRDQjAwMDk3NjE0N0YyRjk3OUJBRTM5MkE1M0YzOTZDQjA4QzBGNEUKLToxMDRDQzAwMDcwQ0U2QUFBOUU0RkNFNzY0RkM4MEUzOUFFRTlGNjYxMTUKLToxMDRDRDAwMEQ5OTZFODNDNUY1OURGQzk3ODlGRDY1RDhBOTE1NzZDQjkKLToxMDRDRTAwMEMxNzg0M0Y2MzQ4RTM3MDhDRjMzMzRERUQyQTVCN0NDNDMKLToxMDRDRjAwMDQ3RkU3ODY5RDVBQTFCNjEzRjk1NUFDNTU4M0I4REFCRDUKLToxMDREMDAwMDQ5NTE3OTFDNEQzMTYyRTYyNEQ4OTE5MUZENDREODZGMDgKLToxMDREMTAwMEJEMDc5RjhCRDMwQTc3MkFEQkFENkNEQ0Y3MUQyQ0Y1MjIKLToxMDREMjAwMDFERTAzQUZBNUVEOTUyNjUyNUJFNkZDODE3MEUxNEE2NkIKLToxMDREMzAwMEI2RTIwOTc5QURDOEVGNjkxQUE5RDc1RjYwREU0RDM2RDIKLToxMDRENDAwMDU5MUYzRDZGNjMzQzIzMDY0QjM5RDU5NEU5RjlFRDUwNkIKLToxMDRENTAwMEQwRTUwRDk1Q0Y3NzlERkUyMTM3MzFCOTBEM0JBRDU1OEYKLToxMDRENjAwMERGREI1QkYzNkM2OUZDRTM2MDVCRDM3N0RDODNBNUJDQzIKLToxMDRENzAwMDJCQTVGMTYxOUNCREQ2OUFGM0NBQjMzNjk4RTFDQkI2QTgKLToxMDREODAwMDk4RTFFQzFENjZCODdGQkQxOUY2MUUzMEMzNzk3QUJGNzUKLToxMDREOTAwMEYwQjM3MTZFMTk3RTM2NEFGOEQ5MUU4N0Y0QjMwMUMzOTkKLToxMDREQTAwMENGNDYwOTNGMUJDRkUxNjcwMzg2OUYwRDE4N0UzNjYwMTMKLToxMDREQjAwMDAzREZGMEI3MDFDM0RGNDZGREFGNzQzQzA5N0YzODE1NTAKLToxMDREQzAwMEY5OUExNTE2OTlFNzRCRjRGMEYzMzlBNjY5NzZEM0I5MzkKLToxMDRERDAwMDk0NTMyRkNBNzMyOUM0MEY1MkRFQ0Y3N0YxM0E3OTE4NTIKLToxMDRERTAwMDJEMDY0MzJGQzlGNTk0RjJCQzIzQjg4NERFMUJFMUQxMTQKLToxMDRERjAwMEU2MEVDNjdBNURGM0NEMUNGMDVENDVCNzQ2Q0U3QjZEMDEKLToxMDRFMDAwMDVBRjY0QUFGRkJBOTVEQTMxMjJGNjA1NzU0QUNGOTY2NUUKLToxMDRFMTAwMDA2RUNBODI0OEY1NjhFRjY5NUIxMERDQjA3NzJEQzNFQkEKLToxMDRFMjAwMENDRjJBM0IxQzZGM0Q2MDg0OTQ3OEVCRjE0QUJCODI5NUMKLToxMDRFMzAwMDgzRUFFNzI1Qjc5OTNGMTQ5RDc3MkU1NjlBRjNDQzJGMzYKLToxMDRFNDAwMDk2NzcxRUNEMDc4NjFERjhCOEFEMzlERENEN0VGQUQwMzgKLToxMDRFNTAwMEM3MTBFNzVEQThDNEJCRTFBNzdGMTYyMzk2RTBGRUEwQkMKLToxMDRFNjAwMEMwQUIzMjRGQURFNTkwNERFNjBEQUM1NEQ2OEIwOEZCOTAKLToxMDRFNzAwMEU0RDczQUJFMEQ3OEY2RDk1Q0I2QzdDRkMxMkIxNThCRjcKLToxMDRFODAwMEI4NUM4ODFFNUE3MzEzRkNFQkQzRjMyQzZDNzc5RjlFOEYKLToxMDRFOTAwMDU3NTBEODFFRjYxRkY5NjU1ODEzQjg5RjJCNzJCQ0I4MkYKLToxMDRFQTAwMDlGMkI5MjdGNzAzRjk3RjlEQzQ0NDc1MzdCRENDRjY1QTMKLToxMDRFQjAwMDNFMzc3MTk5QTk3RUYyQ0E1QzUzN0Q0OUQxMTA1MzdENkEKLToxMDRFQzAwMDBGMjFDN0I3NjhCRTFDNUYwOUU5MDc3RjNCQzA0QjM4OUQKLToxMDRFRDAwMDZGNzExMTY4NDc3NjRBMTcyNUIwOUNFNUYyM0E4NUNGODUKLToxMDRFRTAwMDhEN0IxNkFGMjgwNDVFNEUxMDNCMjM4RTYwRjBDRDZDOTgKLToxMDRFRjAwMDVEQkYwODZCQzAwRUJFM0I5MzIyRUI4RjJBMEQ1RkRFQjkKLToxMDRGMDAwMDRERUY5REY0RDU2REMyRDUyOTI3MkQ2QjFGMUNFQTQxQUQKLToxMDRGMTAwMDdFRkRCQTJFNkU1QTg3QjcyQUExNTQ4ODlFMzU3OURBNUIKLToxMDRGMjAwMEFFQzFFRDkxOUZEMjM4OTFGNzEzQjdCNzRGQUU4MUREODcKLToxMDRGMzAwMDc5NjhDMDlCODNEMERGMTY5NUYzMjYwQzdFRTk2MjkzRDcKLToxMDRGNDAwMDcxQkE3NTgzODg2NjY0NEZBQ0FCOTNGOUJDRUJFQURBNEYKLToxMDRGNTAwMEM1RjY4OEQ4N0YzMUU2RDkwMjNBMDg5NDRCNTI1MzM4QzcKLToxMDRGNjAwMDJFMjQxQTMwMEZCMkRCOTdDMDZFM0I3RDQ4REFFREM2QjcKLToxMDRGNzAwMDdDN0EyQzBENzc1QTQ0RjVCNzZFOEY2MUZDN0NBRUZCQzIKLToxMDRGODAwMDBEMjdGQUJDRDRERjgzRjMxQkQ1N0JCQUE4QjAwNzJDNUUKLToxMDRGOTAwMDVCMzZDMThGNzBBNDY4NkY4MkVGRTdBREVCRjkyN0RDNTkKLToxMDRGQTAwMEVGQjVFMDdENTVFMDNDQ0QxN0FCNDcyNTBDQTZFRjFDRDcKLToxMDRGQjAwMERCNkFGMzhFMjNGOEVFQkEyN0VDRjA5MzE3NTg4Mzc2NkEKLToxMDRGQzAwMENFQzM3QzZBOUQxRDc5Qzk1NzZFNUVDN0NGRTc2QzJFMzQKLToxMDRGRDAwMEU2QkNDQkI5QTI4QUZEQzgyM0ZBQjkyQzYzREVGMzBBN0EKLToxMDRGRTAwMDk0QjU2RUUyMkZFRjE1OTIwRkU3QzVDQUZEM0NFMkU3REMKLToxMDRGRjAwMDk3MzFBRkQzOUIxNTFGRUNDNzI5NDVEQkVEQzVEMENGNEIKLToxMDUwMDAwMDNBQkY3QUE2NEUxRDAzRkU2QjA5QzlGQjM5NUE1RTU3OUIKLToxMDUwMTAwMEU1QkQ2MzUzNTQ5OTE3NzM4MUZCN0MyNjlGQ0Q2NEZFRDUKLToxMDUwMjAwMDlFNzJCNjJGRkI1OUQ3ODZGQjQ4M0YzNjVCQ0E4Rjk2RDgKLToxMDUwMzAwMDdBOTVGN0UzNUE1RURGOUYzMjE5REZBQkI3RjFFRUREMDkKLToxMDUwNDAwMDNDN0I4MzNDRkY2RjExNTUzODQ3RTA5OURBMjBGOTJBMDEKLToxMDUwNTAwMDUzNTRDMUZFNUJGNEM2QkIwN0IxRUUxNjY1M0EzRDU4MkEKLToxMDUwNjAwMDBGNDU0MzU1MTM3RjU2OEU4RTMzRjFFRjU0OTE2QzNBQjIKLToxMDUwNzAwMDQ3NzMxRDkyNEEyMkUwMjlFM0JBOUJEQTVGM0ZBNTZGOEUKLToxMDUwODAwMDk0M0NDODY5QUQ2Nzc5NzA0NUQ0MzlDMDAyMTM1QzRFNTEKLToxMDUwOTAwMEU1OUQ5MDRGRTI2QUQzN0JFNTYyNTI2QjNCRjhDMzFCMDAKLToxMDUwQTAwMEE0REQ1QUJFMjM2OTNERjZDNUU3NTlBNDNGMzQ1NTkzQTQKLToxMDUwQjAwMENGMkJGNkM4RTc0MkM0OUUzQjk3OEVGM0Y4ODgwRjk4MzMKLToxMDUwQzAwMENFNkRFQkZCN0NFODk3RTM4MUREMUIzOEFFRDM5QzRFQzUKLToxMDUwRDAwMEYyOTIzMDVBOUVENTY4NDczQzhEQ0NFNTY2QzQ0OUNCRTgKLToxMDUwRTAwMDAzMDRBMzVGQkY2OEFFQzVGOTExQUJDNEFGQ0JFQkVFNTEKLToxMDUwRjAwMEI2MjRCRDk1MkYyQTc2OThGM0FEMkEwRUJEQ0JFRDhDNDQKLToxMDUxMDAwMDdDQzZFODdBQjJEMzk3NzdDNEI4QzcyOTNFM0UzN0I5OTAKLToxMDUxMTAwMEE1Qzk4RTc4RDAxNEFEMTNERjRCMTE3RDVGNUE1OUE4MDUKLToxMDUxMjAwMDg5Qzc3OUVEOUU1NDM3RjY2RDJCQTJFRTQ5NUI3ODg1RTEKLToxMDUxMzAwMDQ3RUEyNzNERkU4RjdCODZBNDlERDA2MDk3NzE1QkQ3QTEKLToxMDUxNDAwMDNFMEJBRjNGNzkyRkNGMzlCRTlDNjc5MUY3MDU0NEUxMDUKLToxMDUxNTAwMDY1OUNFRjdERUVBRjYzQkFDQzQzMDM1RUFDMTE3ODg5RkEKLToxMDUxNjAwMEU2MjNFMEM5MUE4MUE3Mzk0MkUyNjkwRTQ5OTMyMEMxQkEKLToxMDUxNzAwMDFEQzE2NzkxRjhGOTg5Rjg5QThCN0Y1MEZEREMzRDRBOTMKLToxMDUxODAwMDEwRjk2RkQxRjg5OUEzMzUzMkZFRTY2OEFFQUFBMEZCRkMKLToxMDUxOTAwMEZDRjk1NERDRjlDMTQxQzhBNzZERTlGMjVFQzM2OEZDQjMKLToxMDUxQTAwMENEMTUwRENCRTFGN0NFMjVCRDExNEU2MkJFQjAzQkQ5N0EKLToxMDUxQjAwMDRGNTNCQ0QwREI5RTQxOEQ3NjlCOTQ2NzFDRTc2RDc5ODUKLToxMDUxQzAwMEZENUQ1RTc3MkQ1RTVBRDVFMDBCNDFGNUQ0REVFNUY3NDcKLToxMDUxRDAwMDM0MkY2OTIzQ0Y3N0QyNTkxOTNGQjlFRUFDOTVDQjI5M0IKLToxMDUxRTAwMEUzQ0NFQkVFREFCM0E5RkNGQ0E3RTJBNTAyNzgwNjlGQkMKLToxMDUxRjAwMDIzQUU5N0QwQzYzRDdCODhGMzI1OUMzRjVGNjMzRkM0QjkKLToxMDUyMDAwMDkwQzNBRDc2OUQzOTZGRjk0MkY2NUY3NDlDRjBBRTJCN0EKLToxMDUyMTAwMEY0N0NDMTAxNjI4MDI5NkZGOTAyNzY0Nzc0REVCMkExODUKLToxMDUyMjAwMEM3NUI1QzUyNEY4RTUxQjNERkYyRDBCQzhCNUY1NUQ5NTgKLToxMDUyMzAwMDRGRjc0QzFENkJFMUYzRTNBRkNBRkJGMUI0NjU2NzlBMUUKLToxMDUyNDAwMEMwOUY1QUJDODVFNUUwQzJGODZFN0NBRjg1QTZDN0VENkQKLToxMDUyNTAwMDhDN0VCQUQ0QjQ0QjQ1RkNBRjM4QzZDREY5RjhDNTM1MTEKLToxMDUyNjAwMDZBMTFGNDU3MzFCNUYzNDRCNDVCQkVCNDdCMTdFODg1REIKLToxMDUyNzAwMDRGRUZFOUZENTg4MEQ2Q0JBN0I3QTdBNDIyRUVGRkQ5MDAKLToxMDUyODAwMDMyNUIwQTQ5Q0U3M0VEM0U1RDM2QTYwQkYyMzMzRTVCRDAKLToxMDUyOTAwMEU1OTgxQTZDMDMzRjlCNzQ3RDUxN0VENzA3QUNCNzRFREYKLToxMDUyQTAwMDVBNUU0Rjk4NEFFRjk3MkREQjk5ODBCNEZGRDI2NUVGOTUKLToxMDUyQjAwMEU2QkJDOUE0QjgyMjRGREI3ODA1RUZBRkFFREJFNDA2NEUKLToxMDUyQzAwMEJFRENFQkY4M0U4MTVEMjQyRUYxN0VGMUIyNjU0Q0Y3MzkKLToxMDUyRDAwMDA1OEFEQ0FGQkU1NTA5N0YzOTgyREE5RDg4NTk5NTMwNDEKLToxMDUyRTAwMDM1MTNCN0ExMEFDRUQzMzhCMzIxNUUzRjhGNTZDMzc5QTkKLToxMDUyRjAwMDQzMjc2MkM5MUVBMEY2NDc2MjI0M0U4RjZDOEZGN0YyRTcKLToxMDUzMDAwMDlEMThERTQwMTdGNkRGREFDQkZEOUQ1MjRCRkQ3NTE4NzgKLToxMDUzMTAwMENGNTUyOURBQUUyQjA2NjAxQ0MxNEQ2OTJBQjdFMzczNUQKLToxMDUzMjAwMEVCNUE0RENGQzRCNkUyMUZFN0U2QTlFQjY5RDhEQjI4RkMKLToxMDUzMzAwMDYxNkYyMzVGMDZGNjM2NjBEOERCMjg2MTZGRTM3OUU1OUQKLToxMDUzNDAwMDFBQjNGREQ2QTBFRjE3MUFGMUUwQUVCNUNEM0VEOEJCMkIKLToxMDUzNTAwMDgxMDI5MTU1QzU3QTc2NUNDMUJGNDI2RkJEMkFFRDg1NDkKLToxMDUzNjAwMDQ1OEE3NzQ1MjNEQjRCRjE3NUYwM0I2QkFERDJDRTBFMTIKLToxMDUzNzAwMDdDMjJDRjQ1RDE5RjJDQzhBNzVGQTg5Nzc5QjE5RkZGMEEKLToxMDUzODAwMDUwREM1RDhGQTNGRDYyRUMwRkU1RTFERTUzQjJCRDIyODAKLToxMDUzOTAwMEY4NzVDNDU5QTc4ODNDNzczQjkyOENCMDQ4Nzg5NDMzMTEKLToxMDUzQTAwMERERDQ3RThDM0JEMzU0N0Y2NTVBMUY1M0ZENTUxRTlGMjEKLToxMDUzQjAwMDA5QkUyNjZCQjBBOUZENzhFRjQ4MTNGQ0IzNDE1Nzk5OUQKLToxMDUzQzAwMERBNEZGNDRGMzRDMTkzQzc0RTMzQjVCRkI2QThEODU0QTMKLToxMDUzRDAwMDdGRkRENEY5QTZGQTY5REEyRDI2RjhDNjc5Qjc5QkRBRUIKLToxMDUzRTAwMERGNTQ1NTYzQUExN0EyRUE0OUUwQzcxRjkwRjdCMEQ1NkEKLToxMDUzRjAwMEMzN0Y3MkUwRkUxNzI3OTc1NEZGN0JFNDMxOEYyNDUxNUYKLToxMDU0MDAwMENGRjdBRUJDNzFEQkUzODBGNzIxQUY5OTU2RENEMDUxMEEKLToxMDU0MTAwMDk2QUFCNkUyRjhCNjIxMzJBRUE4MERGNUZGNzgwNUZCRTQKLToxMDU0MjAwMEI5MEQ3QzhGMjY2MkI3RTBCQjk0MjExRUREQ0Y5NkNGRUQKLToxMDU0MzAwMDNCNTk4REI4NTU0MzNBREY5NzEwRDVGRTQyRUQ4NkM2RUQKLToxMDU0NDAwMEVEM0JFRDIxOTZCQkYzODVDNzZFQjIwRTQ2MUVDNEJFODIKLToxMDU0NTAwMERDRUUwNEVGMUREMjc0OTM5NUU0Q0REMDIxRkI5RUVEREMKLToxMDU0NjAwMDQ2RjBDMTE3RkFDQzYwRjhGMjdEQTc1MTNGQTVGRTBCQkMKLToxMDU0NzAwMDU5M0Y1OUIwNjlEMjMwRTRERTlCMDJDNDc3NDM0Nzc0ODgKLToxMDU0ODAwMDVCRTk5NTcxOTEzNkNGQjcxQjI1RjA4NDczRTFDMDEzQUEKLToxMDU0OTAwMENBMzBGMTNEQ0E3REM0RjcyODBGMTBERjk3OTA1QzNCRkUKLToxMDU0QTAwMDQ4N0M4RkYyMTBGOTk5NzhGRTZGRTQ2N0EyN0M5REZDMkUKLToxMDU0QjAwMDRDOTQ2RjkyN0Y4OUIyODFGQzRCOTRFRjU0NEZFNUYyOEMKLToxMDU0QzAwMEJENkE4RERGRkI2M0Y1M0MyRTNGQThBRUUyRTcxRjU1QkEKLToxMDU0RDAwMDJGRTZGMjkzRUEwMDNGQkY3Qzg4OEMyM0I4NDhFRjQwNjgKLToxMDU0RTAwMEJGNTcyMDBGMDZGOTAyRDFGNzJDNTdCOUY5RkU4MzVBOUUKLToxMDU0RjAwMDVENkY4OTdBM0RBRjY2MUZGOUFGQzA2N0EzMzVFOTRCOTEKLToxMDU1MDAwMDY3RUJGRUUyODVGRDdEQUJGODMyQzI2RTlCNjhGNTBGNUUKLToxMDU1MTAwMDE5QzJGNEVERTRFNkZEMjFGREY5MEI1RUNEM0Y4NEU4MTAKLToxMDU1MjAwMEZCN0VFNkU0OUVCOTJBRjQ1REQ1Q0I4OTU0RjdCRUE1OEYKLToxMDU1MzAwMEVERkIyNzUzNzQ3RUYxMERGNThGQzE3QkMzOUM4Nzc5RkEKLToxMDU1NDAwMDNGREQ5MzRFRDZFQTEwODYxNUQwNUZDOTkxRjFDQjYxNEQKLToxMDU1NTAwMEQ2ODY1QUQ0RDc3RTJGM0NGMDlCNUY4QUZGMjNFRjgzRjkKLToxMDU1NjAwMEQ3OTJCOThDRjNDN0NBNTlFOUFGMENEN0Y3RUY2QkJGMjUKLToxMDU1NzAwMDk3RkJGN0MzMzE3NkFBMUZFNjk2RjVCNTM3OTNBNkYzRTYKLToxMDU1ODAwMEExM0VDNERGMUY4RUQzQ0VGMjdDOUIyOTZGNjdGNEQ5NzYKLToxMDU1OTAwMDg2NTE1Q0VGQjI3QjkwNkYzQURDMTk5NkRGNzMwQTM3NjUKLToxMDU1QTAwMEUyQ0IyRkM1RUY5MkZEOEY5MUZENkZGODNFQ0NERjg3RTgKLToxMDU1QjAwMEY3NjkxQjhDRjFCNzhFNjcwOThGQUY0MURFNEY5NzJEQ0UKLToxMDU1QzAwMERCRDdFQUVEODc2QkQ0N0YxMkM2NTcyNUM3NTc0Q0VENjIKLToxMDU1RDAwMEU1Rjg1OUNFMERDNzM3OTNFMDZEQ0JGQUQ4MzQ3OTNFNTQKLToxMDU1RTAwMDc5RjQ1OUJEREUyQkU3REJDMTJBNjE5QzI5NDE3RDQ2NTgKLToxMDU1RjAwMDNCNERGOEE5QkY4QzBDRTE0NUZDNkQ3ODRBNDMzQUI3QTYKLToxMDU2MDAwMEQ3RjMxOUUyQURGMjdCODk1RTc5MUY1NzhGQkY2QTcyQkIKLToxMDU2MTAwMDNGODAxMDgwRjExQjc5NDlDNkJBRUQ5QzFDNEU4NzlERDYKLToxMDU2MjAwMEQ3NzlBMTlEQkY5N0ExNkVGNzQxNUVFN0Y4QjQwMEU4NzYKLToxMDU2MzAwMDY3NzU1QTc4N0VCNTdFNzk1RUZFRUQxNzNEOUQ3MTFGQzgKLToxMDU2NDAwMEU5NDRERDVFRkYwN0Y0NUYyNkU5QkY1N0QyMUY5N0JDMzAKLToxMDU2NTAwMDY1QjRDMkNBMUNGQTZGNzA5QkY0OTdGODIyN0VDMUZDMzUKLToxMDU2NjAwMDg5RkU0QzBGRDA1M0E3QkY2MkUwNDdBN0ZGMzk3QTJEQzAKLToxMDU2NzAwMDg5QUNEN0Y5RTM3Q0ZBODcyNEJENzU3RTFBRUU5NDc5NUMKLToxMDU2ODAwMDEzNjgwRkZBMEZCMzRBN0VBODhEOTFGOTFFMkZDNTE3MjQKLToxMDU2OTAwMDNFOEM3QkIyMDgzNzQ1ODhDRjBGMzNGOEE1NEE5RTFGNTIKLToxMDU2QTAwMEZFREY0QUZGM0NBQkJDNDdDRTUxRTZFNDdCRUEyRUM2QTgKLToxMDU2QjAwMDBGMzM5QjQ1MjFFRUU5M0NFQkQzNTIyMDI3OEFDRjdBNkEKLToxMDU2QzAwMDBFMDI5RTJENDYxNkMyM0MzN0VBOTU5Q0I2RUJCNUJGM0UKLToxMDU2RDAwMDM0REIwMDFCQ0ZCM0QwNkU0MDZCQkRENUY5NEUxQ0U0NUMKLToxMDU2RTAwMDlFRjExREEzREQ5NUU3QjVDQjcxNDI1RjJDMUExMzVBQ0QKLToxMDU2RjAwMDBCRkQzNUI2QzZDQTcxNkJCMjRDMTgzRTQ0RkE0Q0U2ODcKLToxMDU3MDAwMDczRkExMzdDQTk5MUY5OUZERTAzMEJGMzcwQkZBODNDRDkKLToxMDU3MTAwMEJGMjU1Q0QyQUVGNkQwNUZDOEQ1QzIxRjhBOTZBMjNGMjUKLToxMDU3MjAwMEExNkVCMUMyRUYzODgzN0M1QUZBNEU2MThBRDkzRTFGMEUKLToxMDU3MzAwMDFCQjVCRjdFNzVGNjU3NkM4RjVGN0Q5MTdCQUU4RjBDNkUKLToxMDU3NDAwMEQxRjdERDMzNDVFNjdGRjI5RUQxRTYyMUFDNjcyRkVENDAKLToxMDU3NTAwMDlFRDEyQzUxQ0Y3QzMwQkE1OEU2NzNEMUZDMkQzOTg4QkMKLToxMDU3NjAwMERCRjg0NTE1RTA0MjUxNjUwNTFGOEMxNTc1NTZFOTU3NjQKLToxMDU3NzAwMEZBNEY1NEU0QjFEN0NFRjhCOTQ2ODRGOUY5Nzg1MjI4RjMKLToxMDU3ODAwMDUwMjYzRjIzRjYwMUJDM0Y2RUMyNzREQzFGM0MyQTc3RDMKLToxMDU3OTAwMDU0MEYzQzhGQjgzRkNGMzZCNDNEREY5RkY3Njc3N0M0RDcKLToxMDU3QTAwMEZENzlGQjQ2Q0JGNUI2RjA1QTE5NkZEQUU3RUNERUE2QzkKLToxMDU3QjAwMDFERkEyQUU5REIxRTNEODExN0MxRTVDQkE0OEY3QkQwMDIKLToxMDU3QzAwMEJDNUYyMTdEMENGOEVBQUMxQTgxRjcwQTNERTZCQzIzRTgKLToxMDU3RDAwMEUzRkQ2QkRDQTM4NEI1REQ4NUY1REQzNUZEOUZFQjA0RDIKLToxMDU3RTAwMDNDQkY5NkQ0N0IzNEU4RjU1QUQyQzBEMTg4QzdCRjk2NjcKLToxMDU3RjAwMEQ0QzEyMjRCODc5RENCN0VCQjdCQjQzNTNFNjM3REI0NDkKLToxMDU4MDAwMEY2NTdDOEZEMTlGNzA1OEY2RTJGRUYwQjhFQzZFQkQ1MzcKLToxMDU4MTAwMDIyNjRDMkVGMzgxREJGM0YwMUFGREVCNkYwOUE4MkMzRUIKLToxMDU4MjAwMDhFRUQ4MUNGNzc3NzE5Nzk1Mzg4MjdGNzU4REFDMEYwNTIKLToxMDU4MzAwMEFEMzZCOTBFQ0E3NzhGMkY0MDVFRjRDMkY3NjU3RUM3Q0EKLToxMDU4NDAwMDUxMEMwNTdBNzdGMTEwMUVGRkYwQzU4Mzg1MzU5N0Y3NjcKLToxMDU4NTAwMEEzMDJDMDc3OTk1M0UyRjE2NEUwQTVGRUI4RDczQ0RDMUYKLToxMDU4NjAwMDRFMUI4OUZFQkY1QUFCRjI3OUZCOTNDRkM0NzAzQ0VFNUUKLToxMDU4NzAwMDQ4RjBEOTA0RTBEM0UwRTMzMkQ1QjNEMjhCNzVGODlBN0YKLToxMDU4ODAwMDJBRUY1OUZBNjE3RjE3REM0MzdBMjFCRTI2N0VCRTdBNjEKLToxMDU4OTAwMDY4NUJGQ0VDMjI3RUVFNzczRTNGOEIwREYyMUU4MzMyN0UKLToxMDU4QTAwMDY3NjE5Qjc0MzZGQ0NFQTQxQzNGQ0IxRkI3MDhERjAyOTgKLToxMDU4QjAwMEZFQUYxMEQyM0ZBQTcwQkUyRUVGQTkyNDE4RTc1RUEzNTgKLToxMDU4QzAwMEVEQUFGQzU4NkE0RkY1NzZBN0NDMTczNkU4OURFMTkwMTMKLToxMDU4RDAwMEY3NTg2NkM0MDkzN0UyMjA0MkNCQkQwQ0UzRkRCNEJCRTgKLToxMDU4RTAwMEJGMTg3ODIxQkY3NjRCNjRERURBRjA3MDVGREU3NzFFN0EKLToxMDU4RjAwMDdCNDhFNTdDRjc1NzYyRTVCREVGOEQ0NDBGODVFQ0QzMUYKLToxMDU5MDAwMDJCRkI1NkI5QkExMTFERTdFNjZCNjU3ODVGQTgzRkE4NzcKLToxMDU5MTAwMEU4RjdGNTlFOEE2OEM3RjFGMzVDMTdGQkQ5M0ZEMTVGQzIKLToxMDU5MjAwMEJGNzVBOEVFQUZGNzE3RkRGRkUxRUYyOUI0OTdGNzBFQUIKLToxMDU5MzAwMDJGN0MzNTM3ODg3MTJGQUMyMUFEOTZDMkJGOEJDMUY3NTQKLToxMDU5NDAwMEM0RDVDMjNGQ0Y2Qzk1M0JDMzQ1MkZGRUJEOEM1MTI5QkEKLToxMDU5NTAwMDM2Q0UzM0ZGREZGNjdCMEExOTQyRTNGNUY3OUZGRDVEOTQKLToxMDU5NjAwMDg1QjFGMkQxNzlCRkFCOTA5MUIwRTI4MDk2RDJGQUJCMEIKLToxMDU5NzAwMDFBRDFCRkFCOTBBMURGNjcyRDNDNTI3RjE4QkZBNzMwNzMKLToxMDU5ODAwMDQyRjgzOTJGN0Y0QzlBNTlBRjhDNzI4RjNDRTBFNkQyQTcKLToxMDU5OTAwMDFDRUZDOUI4NDgzRUQ3QjM0Mzc1QkQ3MjMxQkE5NzBCRjcKLToxMDU5QTAwMDlERUVGMjVDMjdGODQwRkY3RDk0MjBGOEQzRjg3RDE0M0IKLToxMDU5QjAwMDgzRUVDNkVGQTRENEI2OTdCRjkzRjJDRkY2QkIyOEQxM0YKLToxMDU5QzAwMEY0ODlGRTlEOTQ2OEZBNDRGRjZFQ0E3MDJEOTZGMTM0RjYKLToxMDU5RDAwMEFBQ0NDNTdDNkREMDY5MkFGRDY1N0IwMEU3NzI5NUZGNzYKLToxMDU5RTAwMDdFN0ExRDhEQTJENzE5QjE3MjAwRUUyOTNENTUyQ0U1QTYKLToxMDU5RjAwMEZBODVGNEZGMDZBRkZGMTRFNEM1OEY4ODI3RTFCQzhCNUUKLToxMDVBMDAwMDUzQzY0M0ZDQjU1NjExMzM1Q0UwN0U0MkNFOTdGRDQ1NEMKLToxMDVBMTAwMEFEQkMwN0FBRDYyQUUzMDEwMUEyMkJFRUM1RkIyRUY2RTgKLToxMDVBMjAwMEVGRjIzRTQ3QjI4RjZDMUQxMTk3QTlFMkY3MDM3NkE3RkMKLToxMDVBMzAwMEJCRDYwQjdBMjczMDlGMkM1RTJDQ0YwMzFGQjZENEYxMzgKLToxMDVBNDAwMEVGNURDQ0NDQUU1MkIwN0Y3OTJDNTM1Mzg2QjU0N0JDQkEKLToxMDVBNTAwMEI4NjhGQjFDOEVDQjU3MEQ4NDdDOUZGMTA3NDcxN0Q0ODkKLToxMDVBNjAwMENGRTgyQUVGOEYxNEQ5OEQwMzIyRUQ5MTE5MTkzMjJGMjcKLToxMDVBNzAwMDJCNjY5ODJFQzdCRDMyMEZDQjM1NENGQTA5RjE1RTM3MzUKLToxMDVBODAwMDlGNkIyOENFMTY3QTdFQUJFODMyQTMxRkY4RjgxM0I2QzgKLToxMDVBOTAwMEUzNUIzQ0QyQUU2RUI0Qzk3QjJDMDNBRkNBN0M5RUI1MkYKLToxMDVBQTAwMDU1RUZCMEREQkY5MUVDNUE1NURBMzc2QkVFRTMzODQzNzIKLToxMDVBQjAwMDgyQzAzRUVFRTMzMUNENDkxODdGRUYzNUMyNjQyRkY0NEEKLToxMDVBQzAwMDA5M0E0RDc5Qzk3RDM3QkI0RDcwQkY1MDlBQTlGREU1QTQKLToxMDVBRDAwMDdCM0NBNjdBNUYzOENCNTQ5RjdCQzg2QjgyMDczNDBDMjMKLToxMDVBRTAwMDMyQjUxRkY4ODFERjA0MEY2RTFDNkI2QTNGRTQ0ODkxRUEKLToxMDVBRjAwMDA5MUUzREFDOUI4Q0ZCODMyNzY5M0UzMzE2Qjk4M0YyQUMKLToxMDVCMDAwMDFFN0QxOTI3RTk2QTk3RjY1NEVERUREMjlGMzBGMkQ3NDIKLToxMDVCMTAwMDM1N0QxRDQ0RTdBRjc3QjZDQUZDNzU3Qjk1RDQ2QjlBOEIKLToxMDVCMjAwMDRCRkFCN0VFNjRFMTU2Rjk1QzRDMDNDM0I4MUI4MkYzNDEKLToxMDVCMzAwMEM2MDNFNjNDRjM0RTRFRTk1RjU5NDY0QkZGQzNBRUU3NjIKLToxMDVCNDAwMDk5Qzc2NkM5NzMyRjQ2NUUzOUY5MTU3RUUwQkI4NzY4MzEKLToxMDVCNTAwMDlDQzZCRjc3QTBERjI3MUFDRENGNDUzQUREQTNDN0REQUUKLToxMDVCNjAwMEQ1MkVDRkQzRDVERTZFRTdGRDczQ0Q2NTZGNTIxMkNFNDUKLToxMDVCNzAwMDFGQ0ZFRDAzMjVGRjZGNzRCNjdERUZEMzhDNjEzMjhFOUUKLToxMDVCODAwMDEyQ0EyREJBNkUxOEI1N0I4Q0Q0MTZEQjVGRTdGNUU3MjkKLToxMDVCOTAwMDZEODRCQ0FCRkQ5NTlERjNDNjJGRDZERjhDQ0JFNTdDMjkKLToxMDVCQTAwMEE2NUIyQzMzMjc2NkIzM0ZDOEU3MDA4RDdFMkJGNDdFQkYKLToxMDVCQjAwMDI3OEQ1MERBOUNERjhDQzQ2NkJFNzc0RDI0REEzREUwMzkKLToxMDVCQzAwMDVGQ0RCNTlDNjE3N0FDNDg1MkRCQzA3QkVCQjkwQzk5REIKLToxMDVCRDAwMEE3N0ZEM0NBRDA3REJENjk5Q0QzRUQ3NTM2NzlFMTQwRUUKLToxMDVCRTAwMEQwMDY3RTE4NTc0MDc2QTQwRkYxRDc4MjQ3NUQ0NDhGQzgKLToxMDVCRjAwMEM3MTY1QjM5MEU3NkRCOEIyRkNFQzBENUY0RTM0NTMzNjkKLToxMDVDMDAwMEYzMDMxMjUxQjA5RjA4RkI1M0NENjkxREY3QjFFMTMyODgKLToxMDVDMTAwMEVGRkI0MTVDMkNDREY2Q0MwRjNDQUUxNjNEM0VEMjIyQzQKLToxMDVDMjAwMDQyRTdDRTRGMDREQUUwMzdDRDc1OTBDRjIxQjgxNzRBNUUKLToxMDVDMzAwMDdFRUExQzcxQ0UwQUZFRTdGRkQ0NzkwOTgxMUQ1MkVBODMKLToxMDVDNDAwMEM3NTYyN0U0MzlDNzhCRTBDRjM4QTdFMkI5QzU1NkI0QTkKLToxMDVDNTAwMERFODVGMzIyNjJBQzEyODE4N0ZGMTgyRUUzRkM4Nzg2NzMKLToxMDVDNjAwMDQ5N0FBMzFERTREMTg1REE5MUREOTc4OEZEODUxNkUxOTcKLToxMDVDNzAwMDQ5NzQ1RjI0QUVGRTNGMzFGRjBDQUI4QzMzNzQ3MUNBQTQKLToxMDVDODAwMEYzMjI5REFEMUFDQjBCN0I5NjdFQ0ZERDc5RkNBRUNCOUMKLToxMDVDOTAwMDBEM0Q0RUQ2QzkyQUQ3N0QyN0FGNUNEN0U3Q0I4NTAzMEMKLToxMDVDQTAwMEZDN0RCQjI2RUY0RDhCQzYyRkZGODk4OEFCMThFNzU3Q0QKLToxMDVDQjAwMDYyNDc0QjM5NjJDODg1NzNFNzUwN0E0QTNGRDRBNkNCMTYKLToxMDVDQzAwMDg3NjAwRjBCRTcxRERDMUQ2RjVFQzdERkVCRjI2MUFENzgKLToxMDVDRDAwMEExMkYwMkU0QzdFNzlCRTQ4NEMwQkU1RUVEMzI5NUU1RTgKLToxMDVDRTAwMDA0QzlDOTgzMUE4REIzMThGN0IyQjg1QjdGMUZFRUU2RkIKLToxMDVDRjAwMDA3QTQxRTFCRUUyRjdBMTBGQjI2QjM1NkRCQzQzQURFMzgKLToxMDVEMDAwMDU3OTBGN0MzQ0VENUUzRTRDNTgxQThGQjU5NzQ3QkZDNUIKLToxMDVEMTAwMENDNEFDNThEREY4RDk4QkRDMjVDM0ZEN0Y1RTUyN0YwMzUKLToxMDVEMjAwMDFGNkY4RUJFQTdDNkQ4QUZCQjQ4MUNFMEU4MzBERDRFNjMKLToxMDVEMzAwMEY3MEFBRjlFN0ZCRjA0RTMzQjEzOTRGNzVFOUYzQkFGMzAKLToxMDVENDAwMEE0Qzc3RjVBODJDRjRBRjg0RTIxMjI3RjQ3QzJCMDBCQTgKLToxMDVENTAwMDBDRDg4MzdEQjI4ODdCNTgwOEJGQjE1OUQwRUY0QkFEQ0EKLToxMDVENjAwMDZERTYzNzFBRjgzRDk3RTdBMUVGRDM1MUI5NjQxOUZCRjcKLToxMDVENzAwMDMzMzJCRjgxRTQwMUVGQ0I5REEwN0FEODgxMjcwMkE3RkYKLToxMDVEODAwMEI5RkQ4OTFEMzE5QzU3NzJEMkQ3RDAxRkZCQjdDNjNFRDMKLToxMDVEOTAwMDVEMEY0REVFNjNCNUVDODg5N0Y5MEQyRThCODQzN0NCRjQKLToxMDVEQTAwMDdCRUMxN0ZDMzVEODFGN0U2QzYzRTA1OUQzMzkwN0FEMDcKLToxMDVEQjAwMEQxQkNDRjE3NUQ2QTM1M0JEOURGQkMyMjRGNEIxRThFNUQKLToxMDVEQzAwMEJDNzRBQkQ3RTkyNUY4MUVENzNFQkVBNzZCMUNGOThGNzQKLToxMDVERDAwMDkwNkJDODRCNTk5NjIyQzdDRkYyMkI3MDVBRTJBRjRBNEMKLToxMDVERTAwMEUyRUY2NzY0RTg0MTdFQkUyRjQ4N0EyMjhFMjlDOEFCNzUKLToxMDVERjAwMEE1QjIzODNDOThGQkZGQTlGQjYwOTNDRkZBRTRGRUVGMTUKLToxMDVFMDAwMEQ5MjFGQ0JFQjY2MjMwQzM1OUMxRTY5MTFGNTBCRkQ3M0QKLToxMDVFMTAwMDY5MkUwRkUyNDhEN0Q2RkU2MjRDMkM3REJBRjE1RjVENDkKLToxMDVFMjAwMENCQjhFQzZDM0UzRjYwOTRCRUUxNTI4RjM0REFEQUFFMTAKLToxMDVFMzAwMDVGQUZDQjlGM0YwQzE3RkE3RDM1OTJERjE3RDYyOEJDOUEKLToxMDVFNDAwMEFGQjYxMDNDMEVGODNFNzkzRkE3MDE5RkFFRDNFMTMxQ0IKLToxMDVFNTAwMDEyNUVCNDRDQzI1MDREQjA4MzY3RTlCRjkzQjY0OThGMTAKLToxMDVFNjAwMEJGNjBGRTI4MzE3RkM0MDVCNkU4RjExOUNDMUYyNUU2RDYKLToxMDVFNzAwMDhGRTc5MDU3ODAyMUFGMDA0MzVFMDE4NkJDNDIwOTc5Q0QKLToxMDVFODAwMDg1RTc1RjI0OERFMjdENkRFQ0RCOEQ4RTU4NEZEOEI3QjIKLToxMDVFOTAwMDFCMURCMTNFQjA2RjE3MDk2M0RGMkVCMjNERjZFRDIyMzgKLToxMDVFQTAwMEVCQjE2RjE3NTk4RjdEQkI0ODE4RkI3NjkxRURCMTZGNDEKLToxMDVFQjAwMDE3MDk4QjQxNTdCNUMyOTA2QkZFODkyNjc4MzJGOTAzREEKLToxMDVFQzAwMEEzMjNENjMzRjZFRDIyQkY4RjdEM0JEM0Y3QjQ1QjRDRDMKLToxMDVFRDAwMEVGREYyODE2OUJERUM3QkU1RDY0RkI5OThCMTVEM0JFMzIKLToxMDVFRTAwMDlFMTBDREFDRDc2N0FGNjlDNzdDOTRFMTJCQUEwNEJGRTUKLToxMDVFRjAwMEZGMzlFRUVGQjdEOUJBQjE3Q0UwMzhDNkMyRjI1OEFGN0QKLToxMDVGMDAwMEE0NzdERDU4NDk3RjhCM0MxRkExMzRGM0VGMEI5Q0JFNzcKLToxMDVGMTAwMEQzMkVFMTMxRTZGQzZEQTNDNEJFRDc2ODlCRENGNzQyMEIKLToxMDVGMjAwMDg5N0QyRjk0RDhGNzQyODk3REFGRDEzREU1QkUxNzRBRDAKLToxMDVGMzAwMEVDN0JFMTM5RjZCRDUwNjJERjBCMjVGNkJENTA2MkRGMjgKLToxMDVGNDAwMDBCMjVGNkJENTA2MkRGMEJFRjYxREYwQjI1RjZCREYwRDAKLToxMDVGNTAwMDFDRkI1RTI4QjFFRjg1RTc4NzY5MUMyNTExNzIwQ0Y2RTIKLToxMDVGNjAwMDdBMEY5MzlGNDk3QzY4RjIzM0REMjYxOEY2N0E2NDdCQkEKLToxMDVGNzAwMEQ4RUI5MUY1QjBENzIzRUI2MUFGNDdDMkIwRDcyM0RCQTUKLToxMDVGODAwMEMzNUU4Rjg0NDNDMzNDQkNERTYwQjc0N0JFMDdCQjNERTYKLToxMDVGOTAwMDEyRUU1NzE3NzgxOUIxQjVGMTZCQkYzRTgwQjIzMTVFODIKLToxMDVGQTAwMDc5MENFNzBENDNDM0E3Q0NDNDdFNjY2MzhDRDIyNTg5RTgKLToxMDVGQjAwMDY0QkFBRDY2REFDQ0QxQjBDM0Y1RkNDN0ZFQTJEOTAyOTMKLToxMDVGQzAwMEY5QTNDMTk5Q0NFMzczODY5QzU3REFFRkZCNzRBRTZGRUIKLToxMDVGRDAwMDMwQ0VDNUUxMEZEMUREQjc0M0YwRUZDRTE4RkJFREM2RjMKLToxMDVGRTAwMEZCNUU1MkRCRkM3QjUxN0FGQjU2QjhFRDc2RDFGRDFCOTQKLToxMDVGRjAwMEVEMzhCNzJBNjIxQzM4RDE4Q0JDMTlERjlEQUUxQ0Y4NzUKLToxMDYwMDAwMDIxOUIyQzBBRTc5OTZDNUEyMkYzQTJBM0Y5RUEwQjVEQjMKLToxMDYwMTAwMDNFNkRCMjZDREY4NzczMzBDREM1OEExN0U3M0U3QUQ0MDgKLToxMDYwMjAwMDY5N0NDRUFDREY3NDYxNTE3REFERjNFOUZENzgwMkU3QTgKLToxMDYwMzAwMEQ1QkVBMUNCM0Q2M0ZDNDY3Qzk0RTQwNTlGMUYxQ0RBRDIKLToxMDYwNDAwMERDMzAyQTkxREE2QjgxOTFGQzNCMzhFM0VDRDI2RTIwOTQKLToxMDYwNTAwMDNGRjQwQUY4OTM3RDAzOEE3RjdEMDQ5RkZGNjlCOEQ0REIKLToxMDYwNjAwMDZGNUE0MDhFRTNDOUM3MjdDOEY3NjJFNTdCNEYzRTlFNTMKLToxMDYwNzAwMEMwRkQ0RjU4QUE3MDlFRDlEMDJEQzI4RjczQ0E4REZBMTkKLToxMDYwODAwMEY4RkI2RTA5QUJFOEFGNzhBOUVDQ0ZGODZFRjFEQTJFMjkKLToxMDYwOTAwMDc2OUNFNzM2RjA1NTJDMUE0N0UzM0U2OTkxQTdFMDRFMEYKLToxMDYwQTAwMDU5RDFDQkFBQjE1RERBNjFCQURCMDIzQkU4NTJDRjQxRUMKLToxMDYwQjAwMDBEQ0I0QjFBODMzQzQ0NTEyRkY4REVEMEYxNzk2RjlCMDYKLToxMDYwQzAwMEU2Q0JFOENBQzdFRkEwMEFGNjBEQjVDMDJEMTZGNDNCMjMKLToxMDYwRDAwMDgxMTBEMDBFRjE2NDgyMzExRjREMTM1NTk5ODRERkVCOEUKLToxMDYwRTAwMEE2MTYzM0JFQjNBNjBCMDVGOEVFMzM3RDlEMjU4NURFREYKLToxMDYwRjAwMEVCQUJCRDY0ODFCREQ2QUZBRTkxNEI2MzFFREVBMTQ5NTMKLToxMDYxMDAwMDJBRTA3MTM2RjcxODhDN0ZEQzE4ODVFNTQ3NzQxRTBGN0UKLToxMDYxMTAwMEVDMDM4Njk3REE1ODlGMUJGNkMzQzJGODczNzkzRTdGNkIKLToxMDYxMjAwMDQyOUVDRkU5NDMzNkNFRjMzOUJERjQwQ0Q3MTdFRjhDM0UKLToxMDYxMzAwMEUxQkMxRTZEOERDMjcyQ0RCMDFCOENCQzlEQjI1QkRFMEUKLToxMDYxNDAwMENGMDc3RThFNjUwNjM3MjU3NTY3M0Q5RjM4MDJGOTM0ODcKLToxMDYxNTAwMEREQjYyN0UwMDhDRTg5QTUzQkFGQzNEMUJERDM0Qjc3RDEKLToxMDYxNjAwMENBREZBQkQ1Rjc3NzhDREYzRDE1RDk3RUNFMDczM0VDOTAKLToxMDYxNzAwMDQwQTFENkRCMjNGNzcxOENERjRGMjNGOUM5RUQ0RUVGMzkKLToxMDYxODAwMEIxQkJGOUY3RUJGNERGM0IzNUUyM0VDNTZGRTQxRTA0MkIKLToxMDYxOTAwMDVFOEIxRjk1QkY3RjM2NkJDNUFBQzJBOTA0Q0ZGMTNCQUEKLToxMDYxQTAwMEMzRjg1REFDRTg3Q0FDRjk1MTc2RTBDNTdFRUZCNENGQzYKLToxMDYxQjAwMDA4M0RGRUQzNkFGRjMxQkY5Qzc5NUREQTdGQzU2RkVDODUKLToxMDYxQzAwMEJGNTZEQTJCMzZDRUZCOUY1RTIzRTM3NTYyQkJFMEZCNDYKLToxMDYxRDAwMDhGQTZENzhDQjJFMDFFRTlFOTNCRkQ1RUM1RDM2QTA3MDYKLToxMDYxRTAwMEJFQTVEQjJEOTNDRTY2MzA3RURGRDVFRDk0NkI5MTdGMUYKLToxMDYxRjAwMDRBRjgxREQ3MThBM0U3QUJBNTczNzlGRDU5OTk4RjNBRDMKLToxMDYyMDAwMEM5MjVENzdCRTM3MzgyRURFOTk2ODA0M0U2MTFENjBCNkYKLToxMDYyMTAwMDNEQkZENUNDNzczRTQxRkM0MUY0QjlDQ0FGRUM0N0RBNzkKLToxMDYyMjAwMEYyNzhEODNERjRCREE5QjA4M0RBODE4RjhCOTcyMTVGRDYKLToxMDYyMzAwMDk2REU2NkJCMzM5QThGMjc1OUMzNTNGMEZENDk1RTFCMjgKLToxMDYyNDAwMEYzRDczRkUyNjNEQ0NCNzE0RTJFODlBQTk3NzFDRTVGMDQKLToxMDYyNTAwMDZDOTBCRkUzMzA1NTkzRkNERDU3RTdFRjE5NzE3QUZDODIKLToxMDYyNjAwMEM5MjVFMzRCRTdFMjAxMTgyNDYyNjY4MUFEMzM5MTJGMjMKLToxMDYyNzAwMDNDMDNDOTBCMUQ3OTVBN0VFNEVCQzU2N0NCRkFEOTdGODUKLToxMDYyODAwMEQ4M0E3MzI5OUM5OTBCQzQyNUQ0M0JFQzdDN0ZCNUU2QTYKLToxMDYyOTAwMDcyRjJFRkQwNUMyODRFODBGODAwRTRFMzREQjdGQUVDRTAKLToxMDYyQTAwMEIzMjJFNDYzQzFDODgyRDVGRTAxMTFFNzFERUY5MTc5RTUKLToxMDYyQjAwMDUwMEJFRkU5RDlBMUFERjNCNjQ2Mzk5QkYwOEJGNTMxMjAKLToxMDYyQzAwMDIzQjFGMTM2OUMzN0FGMTkyMUZDQTMwN0M5REY5OUU0NEMKLToxMDYyRDAwMDc5RTFDNDREMTY3RTZGNTJDMjVCNDdCQ0ZGRTcxNUQ5MEEKLToxMDYyRTAwMDhDMEY4NjdGMzVFMjg1OTlDODg3Mjk3NzM2MTY4MkREM0YKLToxMDYyRjAwMDJBQjNBQkM2MjJFRkJBNTUwRTY5RkU4QzRDQzgyMTVGOUIKLToxMDYzMDAwMDE4QkYxQjc2QTFCOEMzRDYxMTkyMEVEMUYxODdEOUQ5ODcKLToxMDYzMTAwMDUyM0UwQkZEQkVGMDRGRUZEOUJEMERGMkRDMThGRkE3Q0EKLToxMDYzMjAwMDE3Rjg3RDhDOEQyMzJDRkZBREU3M0NBMkNGNzc3Q0QwNzYKLToxMDYzMzAwMDQ3N0I2ODA0RTIxQTE2N0YxM0YyRTgzQkFBNzU3QUZFREYKLToxMDYzNDAwMEFDQkNEN0MzQTA2RjRDREQ3NzFDRUYyOEQxRUZDMzI3QkYKLToxMDYzNTAwMDc5QzJGRUU0MkNCRkQzNUIwMzM5OTIyNTk2RTNCQ0QwMEYKLToxMDYzNjAwMDBDNTUzNEYzQkVGMTc5NzQ5Nzc4N0M3Q0RBNUZFNzIzQkYKLToxMDYzNzAwMDFGRjdGMTVGQzVDQUYzM0EzQUZFQTZEQjFCNUU3NjY2RUQKLToxMDYzODAwMEI2RTJFRkUzQzVGRjYyOTNGMjJCREMxM0ZCNzIzNzU0RTYKLToxMDYzOTAwMEM1NzA3RTVCQzFDOEEyMkQxODZGNUNCNjk3RUZDMTU4NUYKLToxMDYzQTAwMEVEOTdGQ0U0RUM1NkY0N0JDOEMxRjI5NTJGM0Q4NkZCREIKLToxMDYzQjAwMDEyMkFFQjMzRjk3NzY1OEFGN0Y4OTZFMzlDNjNDMTQ4QjQKLToxMDYzQzAwMDZEMDdERTJCNzZCOUY5REU5MDhBQTU0OUFDOUY2Njc0MUQKLToxMDYzRDAwMEQwQ0ZCRjhCNjZERTg3MzNGMEZFODYxRTlGQkE3RkE0QzgKLToxMDYzRTAwMEZDRkUyOUREQ0Y4MDIwOUM2ODZBNzdBMTM4OURDQ0JGNTgKLToxMDYzRjAwMDQxN0UwRUUyOEY5QTZCMTdDNzA5REM3N0M4N0IyQUVDQzcKLToxMDY0MDAwMEUyM0QxOTdGNEM2QjNCNkU5MEExQzcxQkQzQkQzMjNFNjIKLToxMDY0MTAwMDY0RTBFRkRFQUM1OTJDRTc2QzQ2M0NGNzFDRkVDQ0U3QTEKLToxMDY0MjAwMDMxOEREMkVEOTdGNkMyQUM1QjE1RjY1NzRCNTZBQjdDNkYKLToxMDY0MzAwMEFFN0M4QzNBOEVFRjcxNTlCODRBRjFGMEZBN0FBMDNCRjMKLToxMDY0NDAwMEU3N0IyRkJDODdBQzMxMEZDRTk3NzkwQTNCRTRFMUJFRTYKLToxMDY0NTAwMDc1QzUwREJCNjQzQTY4MTExMURGMjk1OTMzOThENzVCQjQKLToxMDY0NjAwMDQ5OTBDQTM2RUUzNTM1Q0ExQjU3RURFRkZDOUMwNzY0RTAKLToxMDY0NzAwMEY0RjNGRTY1ODlEQjZGNEY4RTU4RUZCM0VCMTREM0ZENTkKLToxMDY0ODAwMDBBMDYyQ0YwMjMxNkVENzE3RjNEMjk0ODFBQzdGNDFFMjkKLToxMDY0OTAwMDFFMDVGQjhBNkVCRkM0QzM0REI3NjZEQUYxN0IyNEQzRjkKLToxMDY0QTAwMEU5Q0I5NjlDMEJGN0ZGRkZCQkZDN0ZDNEJGRUY1MzAwMEIKLToxMDY0QjAwMDgwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFRDdEMzUKLToxMDY0QzAwMDBCNzg1NEU1QjVFOEJGNjdDRjJCQzk0Q0Q4Nzk5MTA0NTgKLToxMDY0RDAwMDQ4RDgwOTA0QzI0MzlDMTA5RUY1QzFDRTBCMjYxMDYwMUIKLToxMDY0RTAwMDkyODA4MjI3ODQwOTA0MDkxRUY0NDZENDEyNkM5NDA5MTAKLToxMDY0RjAwMDk5QzQxMDUxMTM4RDA2MjlFQTgwQzBBMTZBMjU1NjRGMTAKLToxMDY1MDAwMDg1MTZEQjAxN0M4QjhBMjBENkI2MzYxOTFFOEE2RDdERjYKLToxMDY1MTAwMEE0NzBBOEY2N0M1NEVGNUFFQkRGM0I5OUQ5OTkwNEQwQ0MKLToxMDY1MjAwMEY2RENERUZCRERGOEUxQ0VCRkZGRjdGQUQ3N0JBRDdGMEYKLToxMDY1MzAwMEE3Mjg5REJEQ0EyNjMxRDZERDJBNDhEQkQzMThBQjk0RTcKLToxMDY1NDAwMDE0RjM0NDFCNjNERkUyQ0YwQ0M2OTZCNTA4OEE2RjdDNTgKLToxMDY1NTAwMDZGQjkyODlEMkQ3NTQxMzk1MkIxMzMzNjk5QjEwQTQ5MjkKLToxMDY1NjAwMDM2MjdBN0UxNTMzMkM3QzJGQjY1QjcxRjMwQjE3OEM2RTMKLToxMDY1NzAwMDk2OEY2NDRDQzg4MkY2QjEwRUIzMERDNzVGMDVFMzBCNkUKLToxMDY1ODAwMDhDREQyMEY5MEJCMEZFODZGMTMyQUI4QjgxRjZERTJDNzAKLToxMDY1OTAwMDMzODNGOURDOUJGODNDRUVBNjE4RjMxNTUwQUUzMDRBNzUKLToxMDY1QTAwMEU2MTQyODk3NDUzMjg2RUQ2MTdEM0VFQzVGRTk1N0NDRDUKLToxMDY1QjAwMEIxMzYxQzk3MkQyREIxRjFGNUM2MDZBREFGNDI1RDZGMUEKLToxMDY1QzAwMDY1NEI4Qzc5NDVDOEZCNTY5MzBDRTVDNThDMjkxRDQxNUMKLToxMDY1RDAwMEZCRDM5RTMzMTQ4MUY2QjNDQzVCOUNEQTBFRUJBREY0QTcKLToxMDY1RTAwMEQ4MjU5Q0I3RDJBODk4MURCODJFMUMxN0ZBMkQ2RTZCMTMKLToxMDY1RjAwMDM3QTUwNUY1QkY0MjMxNTBCRjE5OEE0Q0NGQTI3NDdGMzEKLToxMDY2MDAwMDg2ODBGQkJEMzVDMjgxRUI1RDJDQjU5ODEwOUU0NTFBODYKLToxMDY2MTAwMDlDMUZFNjcwNTgyMUY5MzM3MEZDMTU1NjBFMDc2REJDQUYKLToxMDY2MjAwMENBMzYzRTRGREZGNTcxNzg1N0I2NTU5ODY1QThCRkQxODkKLToxMDY2MzAwMEU4NEE2RDg3RkUzN0MyM0EzREYwNUNCQ0Y5NDA4NjgwN0YKLToxMDY2NDAwMENGRUEwODg3MDBFN0MxMjQ3N0FBQ0JERURCRkY5Mzg3NzgKLToxMDY2NTAwMEFGNEZBNUZEQzNGQTExREU3Njg3M0MzMzA5RDZCM0JDMzQKLToxMDY2NjAwMDA1MTYyM0QzOTNFNjJEQ0Y2NkQ1MUQ0MTcwQkI1RTMxNTEKLToxMDY2NzAwMDMyOTY4MDRGMDMzRDU5NEJCQjYyMUQwQ0YwNjBGQzY3QTYKLToxMDY2ODAwMEI4Rjk0ODBFRUVBMzdFMEM2MzFCNjAxRjZFREJDRjczNjAKLToxMDY2OTAwMDcwOUZEMjlEOEM4OUQzNjFCRDlCREVBM0ZBRTU0OTRDRTYKLToxMDY2QTAwMDEyQTBERUNDNUUxMEIwREU1QzA5N0RBMENDM0MwNTRBQjkKLToxMDY2QjAwMDIwOTM4RkY1NkQzQTYzMjkzODMyQjRCNzAxRkU3ODkyOTIKLToxMDY2QzAwMDE5NUIzNzU1QTY3OTE3QjNDMDYyMzYwMkM2RDk1NDBDODgKLToxMDY2RDAwMDczQzAzQTEzRjkzQUNCMDdCMUVBOUY4NTgxNTc5QkJBNDkKLToxMDY2RTAwMERFMUJENEYzMkUzM0IwOTc1OTZDNkZGRERERUE3OTk3M0EKLToxMDY2RjAwMDIxM0UwN0Y1QzdGMTcwRENENTVBN0RBRTNGRTNENkYxRjgKLToxMDY3MDAwMEJERURCNTc5Q0I2Mjc5M0ZBNDA3QzRDM0Q1MkExRTYwMUQKLToxMDY3MTAwMEZCMzVENDlFOTcwQjQ0REI4NjA2RDhDRjlBRkI0NDlGNkIKLToxMDY3MjAwMDQ1QzBFNzkzMEQ4M0IxRkM5Q0UwNDBCOEZGNzlDRDhCNjkKLToxMDY3MzAwMEVGNUMwN0NGM0YzREIyQUQxQ0Y3QTdBRDYzQzVENzU5OUUKLToxMDY3NDAwMDRDOEU4M0YzRkRGQTJBN0E1NkZBQTczMzM5QkJFRjNFMTMKLToxMDY3NTAwMDBGNEY3NUZGNDg5OTFDODQzRjBGRkQ3NDk0MUJFNkZGOTMKLToxMDY3NjAwMEYzQjM2RjY1MjA5QzNGMDIxQzEwMDFDRUZGRjZEMzI3QzgKLToxMDY3NzAwMDREMkNCRDc3RkRDQjlBREUzMzU1RDg4MkUxMjUxMEJDNzgKLToxMDY3ODAwMDlBMzM4RkQyRjkyRENGRTRGRDk2N0JGRjUyODFFN0MxN0EKLToxMDY3OTAwMDZDNjYzOTIzQURFRkY5NTc3ODlGRTNFRDZCMUNENERFQkYKLToxMDY3QTAwMDZERkI4MDlGRkYxMDI2ODlDOTE3M0Y2RkVEN0NGNUU3RDEKLToxMDY3QjAwMEZFQjhDOUU1NEYxMkYwN0M1QTQyRTg1RkJGRkZDN0Q0NkMKLToxMDY3QzAwMDc1RkI1NEZBQkI0MUM1RTMxQkFBNUFBOURGQjJBNjhBREUKLToxMDY3RDAwMDI3NDU1OEY3NjI4RDdFMkI0M0RGNkJFNzczNzY5Mzg5RUQKLToxMDY3RTAwMENFRTdFQ0E2OENDNjI0MkM3N0YwRjNGOTc3QjE2M0MyMjAKLToxMDY3RjAwMDVBNjhGN0U3RDUzQjZGNDk0RUM3NTVGQjUyNUQ1N0YwRDYKLToxMDY4MDAwMEYzNjFEOUZDN0NGMEI5MTJDRTg3QzU4NTNEOUYzREMxQUYKLToxMDY4MTAwMEU3QjNGMjA5N0UzRUNCOUY3REZCMEZCRjkwMDlGRkY4RTcKLToxMDY4MjAwMEZFRUVCM0Y4OTBGRjJFRUI3OEVFRjgwRkUwRkRFMkE2NTcKLToxMDY4MzAwMDU2NTMxQUI0RkJCNTkyNDZGQkQyRkEyRkFGQ0U5MjU4RkMKLToxMDY4NDAwMDM0RUNBRjY5OUIwOUY5QzBBRjE1MzkyQzlFNkI3MDY1QUMKLToxMDY4NTAwMDQ2Q0U2NzFFMzdDMUQ5QzY1MDNEMTM2MjdCREIyRjY2MUIKLToxMDY4NjAwMDRBMjJGMjExRTYxOUM2NzZDNkY3NURGRjlGNTQzQTJBMEUKLToxMDY4NzAwMDRBNzc5ODEzOTE3RjM1NDRCMUVEMTJBRUEzRTI3RTM2OEMKLToxMDY4ODAwMEExNkY3QkVENzkyQTgyRDNDNTMyOTgwN0U5RjM1NDhFNDQKLToxMDY4OTAwMDIzMTVFOUEyQ0M2MDA4QTEzN0VENzk0MkE1QUZBMTUxM0IKLToxMDY4QTAwMDFEOEI3MUJENDNFMzk4NTQwRjIwRkU3MUE0OTI2QjgwNDEKLToxMDY4QjAwMDc5N0ZGQzAzQUI1NEVGQzBGRTZFMTlFQjJENTYyNjc5QTEKLToxMDY4QzAwMDAwRTREQjBERjI0NEMyNEZDNkFBRUY0OTQ2NTgwNjI2NDMKLToxMDY4RDAwMDIzREYxQkI5M0FGMDE3NUMxRkEyNTNDNDQ0RkVCNEMzQjQKLToxMDY4RTAwMEJFMkQzOTFDNEZBMENDMDZGM0Y3N0U3Q0E2MTgzQjg4NDIKLToxMDY4RjAwMDRGNDVENjcwRkMzM0IzRjdBOTZDMDZCRTg1NzhBQkY1NkYKLToxMDY5MDAwMDFCQ0E4RTA4RjgzRTE5RDY4MkYzMzc2NzJFQTNGMzMzREQKLToxMDY5MTAwMDhERTRGNEQyREZGRUJFQkRDNEZEOUQ0QTczRkI0ODRFM0MKLToxMDY5MjAwMDQ0MzA2OTdCMENFRDZGMEQ5NjdCRjY5N0M5MTQwM0Y0MjgKLToxMDY5MzAwMDJGRkZEMTE1REI5QTYxQzg1Mzc1Q0E0MTMzRDQ5RjVBRDIKLToxMDY5NDAwMDY3QTNGRUZGQThGREVBRjdCOUI4QjIyMjY0OUYzRDc0QzEKLToxMDY5NTAwMEQzMDI3QzJEMEQ5RkQ5QTlCOENFQjM1Njk4MDhFQTRGMjMKLToxMDY5NjAwMEREMUE2MTQwRjg5RjRBRTNGQTAyNjMwMTdCMDk5Q0NCODAKLToxMDY5NzAwMEFFRjVGMEFCODVCMURERUJBREY0N0M2QTNEMjBEMzY4QkMKLToxMDY5ODAwMEM2OUU1OTlGNDRFNTY3RDdDQkY0RUM1ODlGNDlFRkQzOTcKLToxMDY5OTAwMDczMzhGRTk1NDUyQUQxMjg5N0JCRUJFQ0QyNzY4NDg3RDUKLToxMDY5QTAwMDlGRDM0RDY3Q0QwODgyMDNFODA5OUMxRkFCN0E0MUE3QUUKLToxMDY5QjAwMDE0QjBDNzA2RjE2OTkwMUZGN0ExQkM2MzM1MjNEODRFMDgKLToxMDY5QzAwMDk4QTJCM0U1OTRERDMwMUVGMTkyQUY0RjZCN0ZCQkE5NjcKLToxMDY5RDAwMDg1QURDMzc2OEYwQUJFOUQzMDZFRDRFREVGMTUyNEEyMkYKLToxMDY5RTAwMDlDNkU0QkNCMTJBMERGOTI5QTczQzQwRjk3RDgwNkNCNDQKLToxMDY5RjAwMDBDRTVCOENEREQzODE1RUIzN0E3NDkxQkEwNUI1NDVCMjAKLToxMDZBMDAwMDU2NjcwREY0NUZFMTFERURDMEY2QjcwQjcyMjNDRDVCNDkKLToxMDZBMTAwMDI3Mzg3MDVFRjg1MUFDNTM4MDBGRTA2RjUwNUU2OTdCOTEKLToxMDZBMjAwMDc1QTRDQTJGMERDODJGOTdERkJGQUUzMTE5Q0EyNzBDMjYKLToxMDZBMzAwMEFDNUIwNEQwMTQxOThBNjc2MkI5Njg0QjhDQTMxRUU1NUQKLToxMDZBNDAwMDZEM0RERjBGREIwQTdDRDREQUNCNDcwQkE3QjlBRUNFQTYKLToxMDZBNTAwMDgxNzM2NjE3MDBERjYwRkNCMUIwMzYyNkUyN0UzQTE0MUYKLToxMDZBNjAwMDVDM0YwM0JENjMyN0MzRjVCQUNDRDhGRjk3MkFCRkVDQzAKLToxMDZBNzAwMDZDM0I2MTk3RDVGMzI5NDZCQTcxNzc5RkI4MDdDRkQ1OUMKLToxMDZBODAwMDY2NzAzNENCMjhERkU1Nzc2NTg0RkIxQjIyREIyRTIzODEKLToxMDZBOTAwMEZFRjBGQTM1NzY1RTBGQ0YwRDBENTBCRjY2OUJFODQzRDIKLToxMDZBQTAwMDc4MTQ4ODY1ODMwM0E4N0Y2RDE2ODkyRkFFRDg1NjNBNkYKLToxMDZBQjAwMDE4RjU4RDE1NTA0NkY5QjUwNUE3MDI3QzZBNkNDQkUzMzUKLToxMDZBQzAwMEVENUEwQjFFRjEwMDNGNEQxNTk4MEJGOUQxNjk2M0EwRUIKLToxMDZBRDAwMDE4RTFGMUU5QjZDNEQ4M0FENEY3NkVBRTFGQzVBMEJFMkUKLToxMDZBRTAwMDcyREIzREE5RjhGQzc0NUJDNDIyRTRFM0Y5NTI3MTdFQzkKLToxMDZBRjAwMDBDRUEzRjVCNjNCMjQ0Qjk5N0NFQUE3MjM4OURERDc0NEQKLToxMDZCMDAwMDczNUUyMkNBQkJENURGMUM3QTVDMDJCOUJBMDI3MDU0MkMKLToxMDZCMTAwMDgyNzFDRjc3NDRGOTNDRDA2NEY1RkFCREE5MjJBMDk2RTIKLToxMDZCMjAwMDI1REVCRDNDMDdGMEVCREYwREZCQUY5QjhFNzI1OEYwMEUKLToxMDZCMzAwMEVENEFBNkY2NzJBMjE0OEU4RTM1N0QwQUYwNTgwNjNDRjgKLToxMDZCNDAwMEJERjlFRTBGNjk5Q0NGMEQ4N0U3MkQ4NkZFQUI2RjdFRkEKLToxMDZCNTAwMDNFMUFDN0Y5Rjc4NzhGNEQ5MUUwRkQwRjI2QjlGRjE3NTEKLToxMDZCNjAwMDhFRkYyNzYxREIyRTA5NDBDMjM2NkY5QjgwRjJBMzNBNkQKLToxMDZCNzAwMDg3NzFCRTFBRUJCQTZFMzE4N0FGNjNCQkRDRkY3QzU1MDEKLToxMDZCODAwMDdCMDU4MkE3NTY1RUUyMUI2NDY2QTg5N0ZBOTk1OUMyRjQKLToxMDZCOTAwMEE3QzQ0ODBGRkU1NDY0MzUyOERGMzVCRDQ0N0I1RkFGODIKLToxMDZCQTAwMEMyRTVEMzQxMkRBOTc4RkVBQjc2QjVBN0EyRkNGOEEzMjgKLToxMDZCQjAwMDlEOTdERDNCNUU1QjcxMjdBQ0MzREQ2NjkwMThFMDlENjEKLToxMDZCQzAwMERCQzg0OEVGNURFRUUxRkEzNEFCMDI2NjkyREMzQkZGRDYKLToxMDZCRDAwMDdEMzk1MUI0RkU1NTlCQjM0M0U0MUVDODQ3OUFFNzhGRjUKLToxMDZCRTAwMDQ2RTZDNDc1MENBRkVGQ0U0MkZERTlGNzQ2RkYwQTNDMUUKLToxMDZCRjAwMEQ3REY4MzdFRUE0OUMzNzNFMkY4RjdGQjE2NzEyNkJFM0UKLToxMDZDMDAwMEY3REMyRUIwMEMwMUNCQ0ZEQjQ3REE0ODBGMzMxMDVGMzcKLToxMDZDMTAwMEZGQTVDOUI3MTNEQURCMjc3NUY4OTFFRkRERkM0MkNDOEQKLToxMDZDMjAwMDQ0MDQ2MzgxMzgzRTExRjE2N0NEM0VEM0NDQTE1QzlGMTMKLToxMDZDMzAwMDkyNzBGNkQ1NDZCRjM5RENCOUREQTRFQTUxM0RFNTE3QkYKLToxMDZDNDAwMDlFMzMyM0RFQUY3RTA2RjQwMUE0Q0YxNzA0MUZFQTM3N0MKLToxMDZDNTAwMEFCM0I5RTdCNzUwODhDNzdDQkRFOEE2QzlDNDc2QjdGNDkKLToxMDZDNjAwMENCMEIxQzBFMTEyQzYwMkUwREQyQUIyQjMyNjMxQjg3NkQKLToxMDZDNzAwMDAyOEY3Q0Y2QzA0NzRCMUY4NjJENTVFMDM5RkQ4MEIxNTEKLToxMDZDODAwMDdEMzMzRTcwRDc4REM0QTc0NEZCNjRDNjZFRDJDNzQxMjYKLToxMDZDOTAwMEJGMzJBM0ZDQkZEOUNCQzdCQjM5RjM2ODYzM0FFREFCQjYKLToxMDZDQTAwMDM4OEUwNTlERkY5RTFDMTNGNUQzRkFDM0JFQTk1RkJEQTgKLToxMDZDQjAwMEY1RUUyNzAyQjA1RUE1REVDODIyQUU4NUIyOTE3REI0QTYKLToxMDZDQzAwMDBCRTFDN0EyQTU5REI4MEYyMzNCRkQyQTNDRDc4QTgzQzEKLToxMDZDRDAwMDU4MzMzQ0I3NTZBRkY5MEY2QTVGNjc5MTQ0NzhENkRGRjcKLToxMDZDRTAwMDVDQkIyNzAwRjNDOTIyNzMzMUU4RUZDOUFEQTZGMTNDQzQKLToxMDZDRjAwMDY2MkU3RkRBQTM5RTdERjQ0NjI4RDcyQ0IwMzkwMEJEREUKLToxMDZEMDAwMEExMUM0REYwRDlGRjQzMDNGMUY5NjRENjdEQzgwMENGMzMKLToxMDZEMTAwMDQ0MDY1NDA0MDBGQTUzOUFGQjMwRTIzN0ZEQzBCODZCQzYKLToxMDZEMjAwMDZGOTM3REM4OEY4MTgzMEI4OEU3NUZCRTc0MjYxQkQ3NjYKLToxMDZEMzAwMDdERURGMEMwMzlDNDJCNTNERDE5NzczRUQwRkZGQjM5MTAKLToxMDZENDAwMDEyRDc0RkM2MDdCMkIxNURDMjQxOTVBRjE5OEY5MDdDODMKLToxMDZENTAwMDM0MjVDOUIxQThBRkY4NzEyQzVDREZERjBDODQwN0ZCQzgKLToxMDZENjAwMDA1RkY5MzM4QUYwNkE3ODg1Q0FFRkYxOUIyREM3RjQwMDEKLToxMDZENzAwMEZFQTcwOEE2M0JGQ0QwN0VCRTEwRURDMEZEMUU4OTE1MDcKLToxMDZEODAwMDMzMjYwMjNEN0Y2OUZBMjgwREM3RjUwMERBOEE0MzdCNzYKLToxMDZEOTAwMEY1RDg1Qzc1RTlFNjIxRDMzNjIzNUM3MjAwQTBFQzZBNzUKLToxMDZEQTAwMEIwNjVDNkM3MzIyMzk0RUY2NTg2NkUwQkFDMjNCN0ZCODQKLToxMDZEQjAwMDc3REJFQUEwMkMzRDM4ODg4OTIwQUFFQTIzNTI1OTJFOTUKLToxMDZEQzAwMDhDMkYxQzg0OERDMjdFMEU4RTNGQjgxQ0Q3Nzk2RkI3NzYKLToxMDZERDAwMDk1MjE5Qzk4MzU1NENGMzUxQjkyRkQzRjQyN0NBRThFNTkKLToxMDZERTAwMDc2QjAyNDk0NDMxRDU5Qzg4RkQ4MkQzNjQ3MzNCNDVGRUQKLToxMDZERjAwMDcyMjE5MEYxQkY1MDJFRkRFRDMwRTlFOTYzRDJERDVGRTUKLToxMDZFMDAwMEUxN0U4Njg4Q0EwOTM3RDRERjJCRjk0NzNDODBFM0Q3NzcKLToxMDZFMTAwMDQ0MzlFQUI4MUM2MUMxRUJERkJGRUU2RkQxNzFEMEVGMkUKLToxMDZFMjAwMENCRUU1MUM2M0REMEVFNEJDNUVBMDAwRDk2NzVERTM5NkUKLToxMDZFMzAwMEVFRTVBQkEwN0NCNTJBNEZGNEVCRkEzMjQ5MzZBMkREODEKLToxMDZFNDAwMEYxNjVCN0Q1OEY3QUM4OTczNjgzNEYwMDkwRTZFRTNGNEQKLToxMDZFNTAwMEY0QTEwMEYyM0JENzZBRjM4QkQxRDhDRkY0NTlCMEJDODAKLToxMDZFNjAwMDYxNDc1MjYyM0UxOTQ3MjI4NjdEMEJGMDFDQUNDQUE1RDEKLToxMDZFNzAwMDZCMDc4NURBOEY0MzcyQjkxRDM0MjQ5N0YzMUZBM0VDOTcKLToxMDZFODAwMDIwMzg5RkY1MTg1OTMzRTIyMTgzMzJDRTZCQjQ0QUNEQjYKLToxMDZFOTAwMEIwQkU1RkQ5NzYyRDAxQ0E2NzY3QkY0RTFGODQ3MkUzMEIKLToxMDZFQTAwMEVDRkUxMTgzRDhGOEZFRjlFMjMxRDQyNzQwNEY1ODNBNkUKLToxMDZFQjAwMDUxNDlDQjlEREMyQjVGMTdBQTcwODk2OEI5REU4NEYwM0QKLToxMDZFQzAwMEE4MDc3ODM0MDMzQzE2REEwQzdFMEJFQzhCMkQwODg1NzIKLToxMDZFRDAwMDAzQUJFOTJFNDdCQzYxODY2ODA3RDIwRDlFMkY5RUJGOEIKLToxMDZFRTAwMDJDMThCQUQ5NTU3RENGN0JDNjA1QzlGRjIzMjgyRjgxMjEKLToxMDZFRjAwMEYzNDRCODk2OUZGREU0OEEwNzE4OUREQjE1QjkwOTc0MjEKLToxMDZGMDAwMDhFMEQ1N0IyREVGM0ZCNTczQjJGNjY3NDM0RTEzOUFDN0MKLToxMDZGMTAwMDE1RUQyRDc4MEVGNTQ2QUVFRjc5MDBCNzc2QzY1MEI3NzEKLToxMDZGMjAwMDVENzgyRTZCRUI0N0QyMzkwREFFMDczRTgxNzY0QTlERDgKLToxMDZGMzAwMDkxNkQ4RjQ3QkU3Mjk0REFFRjU0RjU0MTk2NTk0RDdDQUUKLToxMDZGNDAwMEE2QkNERTIyMjFGQ0JFOEE4Q0E2RkUwQ0NFRDUzNDI0NDMKLToxMDZGNTAwMDFDOUZFMTdDQTVBNjkyMTE1RjU5M0FCRTVBQzA3MzRGOUYKLToxMDZGNjAwMEMyMTk2MDNGOUQ4NjgwMURGNzE5ODgwMDJEMTI5RUVCODcKLToxMDZGNzAwMDcyRDM4OUNFODcyMjQ3MThDMUNGMTlGQjNGQjZDRUJFNDgKLToxMDZGODAwMDFERjk4RDY4MURGQUQ4NjkxMDQ1QUNBOTNCN0EyQ0FDNjcKLToxMDZGOTAwMEFCNEQ2MDFEQjQyRjkzQ0EzRjU2RDk0ODlGNkI4QkYxMDAKLToxMDZGQTAwMDExN0Y2QjVCMzhDQzgxN0JGRDkyQTlGNTU1OTFDNDVGNTUKLToxMDZGQjAwMEFFMzIxOEE4RENCRDc4MzBEOTYzNkQzMUMwNUE3MUJDQ0YKLToxMDZGQzAwMEM1NjM0OTZGRjhGOTM3MjJCN0Q3MzIxOEFGQ0Y2MkEzM0MKLToxMDZGRDAwMDM2NjM3RDcxMjY4REY3NEI4RDVGREQ2N0E3RjFEQThBMDkKLToxMDZGRTAwMDk1RTQ0OEFBMUY2Q0MwRkU0QkQzRENCNzIxN0UwQzExODAKLToxMDZGRjAwMDc5M0I1MDNDQThERDk2MkQ0QTMyOUVFNzk2MTIzM0I1NzgKLToxMDcwMDAwMDdCNDQ3MDJENUU4MUUzNUM2MTIzQkQzMUIwMzhGMkQ5RTEKLToxMDcwMTAwMDVERkMzOEZERTg1RkVBQUNFMUZCRDZFODYwREQ1NENFMEMKLToxMDcwMjAwMDRGODc3QjRFM0M4QUZDQzM5MzBCMjc2MjQzNzlGMUM1QTMKLToxMDcwMzAwMDEyQzQ2QjQ1OEM3NjAwMEFGNzM5RTdBRjdBRjA5Qzc1N0QKLToxMDcwNDAwMDAzNzA1OTdDNjQyN0Q5RUI3MjA2NDM2MEMzRjk0OTJDNUQKLToxMDcwNTAwMDE3RjFFNDEwQzAxM0RBN0I0QzcwQ0VGMUZDOUMzN0M0RkUKLToxMDcwNjAwMEUzMzlDRkRCMTY3Q0NFMzA5RTY3MkRCQzE3RDY0NDNCNzAKLToxMDcwNzAwMDg0Njk3NENFOTkzODdFMEQ4Qjc0QTA3RERENzM3RUJGREMKLToxMDcwODAwMEYyNjVFMTUzMzQzODkyMkMwMDhCQkRFOUVFODc1NUZBNTYKLToxMDcwOTAwMDI1RjgzRUY2MDdEODFGQzBBNURDMTI5OERDODJGQUI5QTUKLToxMDcwQTAwMDgxNTU3NTg0RTEwMzRGRTQ3MkZCNDA2MkREMjY5NEFGQTUKLToxMDcwQjAwMDRCMzVGQ0FGRDVFMTdGNjA1OENDMjc1MTJBRkU0M0JGNEEKLToxMDcwQzAwMDE3MTM1RERCRjAxQzNFMTc4RTREQzE5Nzg3RkYyRTJFRTgKLToxMDcwRDAwMDBBMzdGRTRGNTRGOUYyNjZCQzZCMzdCNjFGNjkzQzM4NkQKLToxMDcwRTAwMEVDMzZENDM3RDY1OTQ4RkY2NTE3MEUwREMzNzlEN0E2QUQKLToxMDcwRjAwMEI5OUVDNkZBODg5MURENjZGNDRGNzUyNjc3OUI3MDdGM0UKLToxMDcxMDAwMDlEOEJGRjk0ODI3QUQ2RDI5QUQ3ODgzRTJGNzU3RDFCQUQKLToxMDcxMTAwMEEyMjY5ODUwNkVDNjM4QjM0QzAxRTg5RkU4Q0M3QTA1OTkKLToxMDcxMjAwMENGRTVFODVDOEI2QzA5RTMwNzM5MzA3NzZBMEFFQTQzRkMKLToxMDcxMzAwMEM3MEFBN0E2MjBCRjNDOTYwMjI0NEZGMkQ0NjE0NzNFNUYKLToxMDcxNDAwMDZBREE3Qjg1MURENzc5Q0M5OTRENjU5OUM5NkFCOTc0N0UKLToxMDcxNTAwMDQwRkVGQTY3RTBBRjdFNTAwNEZFMDhGNjFBM0VDRjgwOEMKLToxMDcxNjAwMEJERTYwNzdFRkIzMUQ4NkJGODNDMDVGNjFBQkUzRjAxNDEKLToxMDcxNzAwMEY2MUEzRUJCRDYzQkU4RkQzMUU3ODhCRDg4MTdFNzVCRDIKLToxMDcxODAwMEI4MUY2NUI5RDExMTU2MkY1QkZEOENDOEZDMUE3RjgzREYKLToxMDcxOTAwMDdGMzdFRDg4MEEyOTU3NkQ4RDBCMjlERkQ4MDYxODY0RDMKLToxMDcxQTAwMEVEMkQ1NzZFMUExMTUyRDZGNENGNjVERTcxMjFFRkRENDkKLToxMDcxQjAwMEI1RDkyMUU1RkY2N0UwREJDNEUxOEJGRUYyN0YyNUY4NUUKLToxMDcxQzAwMEUyQ0YyNjkwNzdBNUY4MEJFMEY3REI5MzY3MTExRjNEMjAKLToxMDcxRDAwMDI2QjBFQTM4NzhDNjQ4OUNGRjE5NUQwMkY5RERGMEE3QjEKLToxMDcxRTAwMDA1RTQ3NjA5RkUwMjc0NjNCNEM5MEQ1OEVGODVGNjBGMDUKLToxMDcxRjAwMDQyNUJCNDdERDFGRTYwQ0M2MUFBODBGNzBCOUQxMTEyNzkKLToxMDcyMDAwMENBRjNFQjU4MzVEMUQ5MjJENjQyQ0YxQjU4MDczRENCMTQKLToxMDcyMTAwMEQ4MTE3QTk2MzM0RTg3NUY1NjA0QTZFMEYzODM3ODc3QzkKLToxMDcyMjAwMDVBMUVBQzdGQjVENUZENDQzQ0RBNkQyOUVFRDE3MUM4NEMKLToxMDcyMzAwMDhGNkNCMTY0OTdGNjc3NEVBODYxMzM1NUNGQjU0RDUxMzkKLToxMDcyNDAwMEY3MDUzRjBCNzBFREQwRUY2OEQ0ODQzQkVFOTA3QkU3MDEKLToxMDcyNTAwMEQxQzY4N0Y5QUVDQzQzM0U2M0UyRjNCQzNENzk2QTBBRkUKLToxMDcyNjAwMEYyMDdFNjRBMDhCMUE3RkE5QkFGNTU5NTkzMTU0RTBFNjMKLToxMDcyNzAwMDI3RjREOTYyRjlGNDQyQzFCNzAxQ0EwNzVBMkQ2NkY0NUUKLToxMDcyODAwMDJGOUNERTY4NTJGNUY1QkJDOUNFM0Q3MTlDRkI2NTRFNjcKLToxMDcyOTAwMDM3Q0M0QTQ1RkNBQjZCMUQ5RDhBNzg3RURBMjQzN0Q0MDcKLToxMDcyQTAwMDAwRkM0RjRGMDdGRUVEMjAzRjhFMDNFNUMzNDlBNzlEMkQKLToxMDcyQjAwMEZBODNBNDg4Q0U4MjczNUJBRUVFRUZBNEVDMzBBRjgzOEEKLToxMDcyQzAwMEY2MEI5MzQ1RTY4MUY2NkU0RjVBMzRBRTVGREJCNzdFMjAKLToxMDcyRDAwMEREQ0IzNjU5NDJGMDYwRkVCNEQwRjI0MjY2RUVDNUI3NUYKLToxMDcyRTAwMDM0M0M2RjczNkYzREVBNDk2MkQ5MjBGNzAwNzY3N0NENjEKLToxMDcyRjAwMDQ3QUJERTdEMzkwODVGNkZDOEIzQzcyM0RGNjQ1M0Q5NUUKLToxMDczMDAwMEQ0NkZDNURFRkVGREMxRjdBQkY1NTVFRkJFNkNFQTg1NjcKLToxMDczMTAwMEFGODY1NzkzRjI1Q0NCRjE5Q0UwQjUxOUU5MTZFMDYyQjkKLToxMDczMjAwMDQwNzk3QzZDMkY4NzYzNkJENEI1Rjc1RDA1NzAyODc5NDUKLToxMDczMzAwMDVGNjQxQ0NFRTU5RURGMjMzRUVGRTM3RTdERkQzQzAxRDYKLToxMDczNDAwMEE0RUJEMTQ4QUY5Q0FFMkJCQ0VGOTFGREI2QjRCNkQ4NDAKLToxMDczNTAwMDg0RUIyQkIxNzVBN0EwREZFOUMwNURBMzUzRjA1QzhFNzEKLToxMDczNjAwMENFMUQ5RDgyN0NFMzUwRTFFOEM3NkU4NzcxQkI4QTQ0RTUKLToxMDczNzAwMDg3MDVGMEU5NDBEMUI5RkJCMDdDQUM1Njk0NzBERUFFMjUKLToxMDczODAwMEJERTc1NEZFRDJGREY2NTQ1OERGMTc0RTEzQzlBMUFFMjcKLToxMDczOTAwMEJERkYxQzNFNTNCMjBGRjgwQ0NDN0ZERUM3RjlDQzRBQzAKLToxMDczQTAwMEEzOEIzNUMyQkMyQjAxMkU2OEM3RkZCM0Y5Q0RDNUY4M0UKLToxMDczQjAwMENDNTE5M0FCMjAwMUUxNTUyNzM4RDBGRjU2NTc2ODIxQjcKLToxMDczQzAwMEZERTEyOEQwODc4NUUzNTNDM0VEQzgyN0E3ODFGRDJCQjYKLToxMDczRDAwMDIxQkVCOTI2QTM0RDc5NkNFRjg4MDQ4NDE3RjMyODQ3QTIKLToxMDczRTAwMDMzQTdGNEUyRkJGMkRBOTU0NUU4NUY2NzlCNEMyNzUxM0YKLToxMDczRjAwMEVGNDY2NzA4Q0FFNzEyNjYzQzE5MDhDMjUzRjcwQkE2QTYKLToxMDc0MDAwMERFMzJFMUI1RjE2NDIwMDhBRkY1NzhCQTQ3ODdBN0U3MjcKLToxMDc0MTAwMEQ5ODU1NDczM0FBRjNGMzJCODk3RUZFMTRGMzA3RkI5MTcKLToxMDc0MjAwMDQ1RjQzN0IyQjQ1RUJDRkQ2QkUxN0JFNUE4MjQwMDVGOTgKLToxMDc0MzAwMEY5MDVFMkVCMEYyN0E2QkQxNDEwODJGOENBMjVGMkIxQjgKLToxMDc0NDAwMEQ2QTg2RjQ4RUVCNTQ3N0Q0MzcyRUY3ODIxOTc3QjA3NEEKLToxMDc0NTAwMDBBQUYzRkY4M0JDNEZCQkIzOERFMUY1QjM4OTVGMEYyNDgKLToxMDc0NjAwMDk4MDlFNDE5QzBFQjY4NkQ3NjM0OTY0RjZEMkEyNTNBNzkKLToxMDc0NzAwMEQzRTg0NzNGNEY5NzhBRkY1QUJCQTVDNjZFOTMyMzBDQUMKLToxMDc0ODAwMDdFQkE2QkM1OTBGM0NDNzg2MUM5MjBGNDA3RjRCNzdFNUYKLToxMDc0OTAwMDZENUNBRDlEMzZFRTUyNUQ1QzU3M0ZFRTI3Nzk1QzRGREIKLToxMDc0QTAwMENDRDg1MTM2RTBGODYwMDBGNkY2NDM3RUMyMjI3QkYxN0MKLToxMDc0QjAwMDU1NDQzREUwN0FFNjAxRjg3NDM5Mzk3Q0JBOEFBRTI3NDIKLToxMDc0QzAwMDdBM0NFRUQ0RThEMkNEMzAxRTdCNzQ4MUU4NDNGREI1MjIKLToxMDc0RDAwMENCNzk4RUU4RjQzQ0QwMjk4REQxQ0ZCQzlGQUFGNEY5QUEKLToxMDc0RTAwMDg5NEE5RkE3NTVGQUQ0RUFDNTlEMEY1Rjc3MDM4RTVCNDMKLToxMDc0RjAwMDJCMTI5RjNFQkEyMDNCMDFFN0ZCRTM4RTBDOUExN0Q2NzYKLToxMDc1MDAwMDAzNDYwNUU4MjEyRkZGQkQwMjRDMzRFNDBGNzZFNDVGMEIKLToxMDc1MTAwMEM3MDEwRTY4Mjc5NDJFMkMyNTdCQkFENEU0NDgwOEE3MEYKLToxMDc1MjAwMDI3RThGN0FEMUZFRkMwNUM4QjgxRjFGMTg4REY5NURDQjgKLToxMDc1MzAwMDU1Q0ExQTkxMkYwMDFDMTAzRjhGNjM3QkE4MkZEOUM5MDEKLToxMDc1NDAwMEZEQzA4N0IwN0Q3QzMwOUM0NjkzQkU3MjdDQjdFMDQwMjYKLToxMDc1NTAwMEQxNjFEQUZCNzczQjlFQzMyQTVGMjhCRjU4QjkzOTJBMkQKLToxMDc1NjAwMEU0REM1NkI0QzQ4NTk0NEIwQUY5M0U4RUQ3OEVBMEZENTgKLToxMDc1NzAwMDVGRUVGOTY5RkQyRkY1RkM2RjUyRkJFMzlBQkYyNTNERTUKLToxMDc1ODAwMDI1MzY2NDNDMDQ1MkU4N0NFOUJBRkFCMUJBRkE4OTIxOUEKLToxMDc1OTAwMEU1OEJFMUUzMDkxNTJGMzQzOTcyMjI0MjVFMTIyRUJFQ0IKLToxMDc1QTAwMEQ0MzVDRjUyMTU5Q0E3MzEzQjlGRkI1QjY2RTc3M0ZGMzkKLToxMDc1QjAwMENCRTVDQUQ1ODJGQ0YwNzJCNUJGRkUxQTdGMUE5NUU3RkIKLToxMDc1QzAwMDJBQ0E0NzM5RUEyRjM1RTFCRTJFOTUxRjA1QzlFMTA1QzQKLToxMDc1RDAwMEQ0M0YyMDk4QjE3RkFCMkE2N0FCM0EzOERFQjU0N0REQTAKLToxMDc1RTAwMEZGMkFFMkQ1RTdBQTlFMEU3ODQ5RkNGRTBCOTVERjdGQzUKLToxMDc1RjAwMEYxOUY2QUY5QTcwMkUxRTVBMTdENkJBMzUxNkYzRkIzNEIKLToxMDc2MDAwMDc3NzQzNERBNjEyNzNCRUFBMzkxRUZDQkNDMTNGRDAzMDcKLToxMDc2MTAwMEMwQzdDRjVDMjAzRjYxQkE0RjNCMDY5NjlGN0Y1NEY5QUQKLToxMDc2MjAwMENFMTkzQzA3OTI5QjEyOURDNzI5NTU3RTlFNDBGOTQ5NzEKLToxMDc2MzAwMEYyM0U5MzlFNDc1MTdFNDJGRDgyRTc1NDNEN0RCNzQwMjYKLToxMDc2NDAwMEY0QkZDQUQ4MTJERTNGQkQyMzk0NUY1NTZEOEREMkM5RjkKLToxMDc2NTAwMEM5NTBCOTU5Qjk2OTY4NDg3OTk5Nzc0NDQ4RDk1RDFCQzcKLToxMDc2NjAwMDJBMzcwQkM0MzJFMkVCNjc3QzFDOEVBNUNFRUM5MEY2NzkKLToxMDc2NzAwMDY3NjQzOTVBMjJGODcwMzg3QzYxOTJBMzExQ0Y0RUZBQjAKLToxMDc2ODAwMEUyQTI4M0U5NDVFM0JGNDc3NTcwMzg4RDcwNDBGQ0Y0OTIKLToxMDc2OTAwMDk2MEU4ODI3QTdENEZFNUExOUVDNDIxM0NFNUI2QTc1NjIKLToxMDc2QTAwMEJDMTI4RjdFODQ0RDgyMDNFMzU0MEM3OENFMzQzOEM3RUQKLToxMDc2QjAwMDIzMEJCMjlFNkMwRUQyMzNBNDAyOTFGMEY5ODRGNzUwRTIKLToxMDc2QzAwMDc5MzJGMjFGMzBDMEQwQ0ZGQjVBRURBMTU0RjRBRjU2M0YKLToxMDc2RDAwMDNDMTM0NTdBOTM3RURFQ0FBMjUwM0VGMzU5NDM3MUVFQzUKLToxMDc2RTAwMEVGQTE1RkU5RkJBMkNGOEFGMDI4OEEyMUZFQjVFMDM5M0QKLToxMDc2RjAwMEQxMjc0MkI5QUIzNjJGM0E3ODFGNjc1NDNBRDRFNENFM0IKLToxMDc3MDAwMDRBNjM3NUQ4NzNBQ0RBMUE3QThFQTU0NTc1MzRDRUIxNTIKLToxMDc3MTAwMDg3ODUwRTYxMTAzQzBGNEMwNzQ5REFCNzVGQTk5MUVGREUKLToxMDc3MjAwMDdGRTUzMzIyRjk3NzU3N0FGRkYyMzZDNjE1NTc4MjFFNjYKLToxMDc3MzAwMDg4NkFDMjZCNERGNUYzMTBBRjRGQjg0QzA2RTJBNzFEMzcKLToxMDc3NDAwMDcxRjMxMDNFOUUwNUEyMjMwM0RBMUY2RTFBNDE3ODdFNjQKLToxMDc3NTAwMEIyMjk2RjMwQ0VGNzcyQkU0ODc0NzU2NkFGQzUyMDVDMzMKLToxMDc3NjAwMDA5NEY5Nzg5RjlDOTVFRjVEMzc5N0VFNjJEMjVCOTcxNjAKLToxMDc3NzAwMDA2RTE4MjdBOTA1MTIyQkE3ODM3OUZGQjkxNEVDMDM4NDkKLToxMDc3ODAwMDU4NkYwMDNBNDE3REI4Q0IyNzNBN0Q2MUU4RTNERDdDNTQKLToxMDc3OTAwMDdFMUVBNzJFM0M0MEY4RjNBQUVGNTAzNEVBMTUyNzNBOTQKLToxMDc3QTAwMEY4RjhBNzZBQTU2ODhDNEZCREU1Q0RCNkQzRkE4QTYwMTQKLToxMDc3QjAwMDVDRDQ3QkY3NUQ0RjcyRjI4Qzk3RTMyM0FFOTNFQ0MzRkUKLToxMDc3QzAwMDI2MkUzRjhFNzk5N0RGM0YxREUwRjFGOTI2OTFGNENFMEEKLToxMDc3RDAwMENGOUI0QUU3NERDN0YzREU2NEEyNzI1RUYxNDI4QTZGMjcKLToxMDc3RTAwMDFDRjM3MUY5NzJEQzc3QUExQ0NGRUY4QzE3NEUxRkNBRkQKLToxMDc3RjAwMDc1RkJBNkJFM0QyOTFFQ0ZEOTQ0Rjg1MEY5NENFOEI5MTcKLToxMDc4MDAwMDJDREMxNDRBNUZGMDEzOUQwNTdBNTcyNUZFMjZFM0ZGMTIKLToxMDc4MTAwMDk0OTk2ODI3MkQ0QjAyRjkwOTk0N0JBMkE4RDQ4NEZFODEKLToxMDc4MjAwMEM5MTI0RkE4M0NCMkIwNjIxM0UyMURFQTk3RDg2RUQ5RDQKLToxMDc4MzAwMDYzQTU5M0ZENDg3RjFFODFFNEU1RDIxNzAwOUY2MDNENUMKLToxMDc4NDAwMEE2MUQ1NzkzQkNBQjY4QjE4NENDNUI1MjFCNkExRjJEM0QKLToxMDc4NTAwMEQzRDk0MzdBN0JFOUIyRTU4NUE5QkEzQzlDQkMxODU0REMKLToxMDc4NjAwMEEwQ0EwNTI2Q0Q0NEI4OUYwNEMzQkEzOTBCRTBGOTgyRkIKLToxMDc4NzAwMEE4NjBGOUJDMzc4MkY4NjdDNUQyQjNEN0E4N0FFOUI1NTIKLToxMDc4ODAwMDg4MDdDQ0UxNjFEMzM0M0IzRDg4Q0U5Njc5NDU5RDlFRjcKLToxMDc4OTAwMDFFMEE1RkQwOUYzRjQxRkRCODI5NEU5NUEzOUU1MkYyMkMKLToxMDc4QTAwMEQ3OERDQTUzNjIwQTcwMUQ5NzZBN0Y1RkIyN0U1QkFFNDYKLToxMDc4QjAwMEVBQjdFNUE0REYxRTVCMDhGMjAyRjY3MzE0OUIwNEY1MzkKLToxMDc4QzAwMDNGQjBGMDdBRjJFQjFDOUY3QjNERTlCOUM3N0JGQzNBRjUKLToxMDc4RDAwMDJFRDVBRjczMEQ5RERCRjEyMkMwNjc5MjFCMEVBRDNDMjAKLToxMDc4RTAwMEEwMUVBMUYxOEI4RkQ1NzMzOEE1RjJDOTEzMkE5RkVDODYKLToxMDc4RjAwMDUyRURBRDQ2NTU1RTc4NTU3OTcxQkM0OEI1QjdFMjE5ODEKLToxMDc5MDAwMEM5MEJBMzUxNjE5N0MyNjc2RTZDOEJEMkM5ODczODlEMzIKLToxMDc5MTAwMDFEMzU1NDc3M0VBMUYyNjJCN0NCM0RCMzAwRTA2NjQ5MTYKLToxMDc5MjAwMDFBMUJGMkRFMjQ0RDBDMjk2N0VDRDg0RkZFRTNGMzMyMkMKLToxMDc5MzAwMENGMjdCQTA3NzEwMkUzMjUwQjc5N0UxNkIzNzY5MEZGNDUKLToxMDc5NDAwMDc4QTE0M0E2RkFBMTE4Mjc4NEY2Njg1MjYxMUU4OTg2OTkKLToxMDc5NTAwMDlGREE3QjI5OUVCRkQ3Q0FCMUIwRUIzQTZDOTdENjQxNkMKLToxMDc5NjAwMEU1RkE4NThDNjExRUNDNDg2RDFDMDA0NzFERTgwOTQzNzMKLToxMDc5NzAwMEQxOEYwREYzMjQ4MTgxODZFRDM1N0MxRkI2QTA5NURBNzkKLToxMDc5ODAwMEU1NTYzMTQ5ODA3NjU1MDU2OTg0RTc0OTRDMjFGRTMyMzgKLToxMDc5OTAwMDc4MzU1MzMwREY4NUY5OUVBNzc2NEZERTBERkIwMEJDQUUKLToxMDc5QTAwMDBGRDRDRjIwQkJCQ0Q0MUFDREUzREQyMDFGMDdDNkIzNTQKLToxMDc5QjAwMDNBNEUzRkNFMzhEMjVCODYxOTM5NkFGNjhCQjc2QUJCMkUKLToxMDc5QzAwMDhCRTE2RDkwMUU3NDA3RDEwNTMzOTAzRkEyMzU2QTgyMUEKLToxMDc5RDAwMDA5RjFCNEM0RTYyMkJGMDFFMEY1OTIzQkQwNUZGOTkyMTEKLToxMDc5RTAwMDk5RkIwOTE2NzJGRkU0RDFDMkE5OEZBMUJEM0I2MThGM0IKLToxMDc5RjAwMDhEN0NDOTQ3NTcwMDNFMTM3RkVGRTY3NjQyNkRBOTA3OUQKLToxMDdBMDAwMEU1REUwNzRFMkVFN0M2RURGOUNDODBGOTZFNUQ3Qjk5NzkKLToxMDdBMTAwMDAzQ0I4NzZBOUYzRkZCMjZEMkNCMDI4MUVDOEM2M0I1RjgKLToxMDdBMjAwMDc5OUMyRjMzRTZDMkZDQ0Q2M0NFQkMwRDU0OUUwNjg2RjYKLToxMDdBMzAwMDcxMTZEMjgzQjJDMTg4RUIwMEI4MzY1M0ZERjJGQjI2MzMKLToxMDdBNDAwMEEzQkU3MzU4MjRGQzRENTJGMzhDMjQzQ0Q3RTRERTcyNjEKLToxMDdBNTAwMEJDQTI5NkQ5NUUyQTI3MTVGMUZDQzA1RkE4RkE0MTg3MUYKLToxMDdBNjAwMDdBOUUzRjUxRURBMDVEMkFEREI0QTk3NEYzQTA0QTM3OTgKLToxMDdBNzAwMDFCRjVGRUQwQUQ5QzZFNDYxOTFERjc0NTQxNzk5NEM3QTQKLToxMDdBODAwMDRFNzJFNkREQTI1M0I0NkVBMDdGMDlFM0I5Njk4NTYyNDgKLToxMDdBOTAwMEYzMjQ4MERCMzg0QjgwRjg3NDI5ODhCRDBEQjA5RjlDOUYKLToxMDdBQTAwMEEyM0FDQTVGMkM3NTMzOEE1Nzk0MkNBOEEzRjUwNTMwRTcKLToxMDdBQjAwMEI2NzQxNUVBNEQ3NTgyQThENjIzN0YxQzE3RTdBN0Y2ODIKLToxMDdBQzAwMDI1NTYyNjYxRkY1MkU3NzMwNzMwMEY3N0ExMUI0MDAzNEQKLToxMDdBRDAwMEU1RkMwNTc1MDJDMUE3MDJDNjgzRjYwNzZBMUZBMkYxN0QKLToxMDdBRTAwMDhFNTdGMTc1MUNCNUYzRkVDNzJBOThFNDgxNzIwNjczQjAKLToxMDdBRjAwMDFFQkM5REFGRDM4NUYxRDBFM0I1Q0YxRjIwNzgyRkUwMUEKLToxMDdCMDAwMEYwQkVFQTUzNDMwODNENjZGOTIzNDNFODdBRUM4RUQ4ODkKLToxMDdCMTAwMDkwRkFEMTlCODc4NDk0MTM1Q0U5MjFFREUzOUNBMUY0NTYKLToxMDdCMjAwMDFFMzk3MjYyNDhGRDMxNjdBOTAxRTVFQ0Y5MDU1QTdFRkMKLToxMDdCMzAwMDBGRjc4QjY5NzY1RENFMUU5QjAxRTE3MURENUM1MUYzMjEKLToxMDdCNDAwMEUzMUFEODYwQjRCQTE4Rjk3RDlCNTQzRDkxQjU4QzYwQTYKLToxMDdCNTAwMDk4QkZGMUU0OUQwNkNBMEZEOEI4QTBERThBNzkwRkU3NzYKLToxMDdCNjAwMDNCOEM3NDVFMzAyRUYxOTFFM0ZCOEQzNEFFMzVDRDJCMjIKLToxMDdCNzAwMEEwMUZGMzVFODBCMzE4QTRGRjM1NjlGMjRERjVBQkUzQTcKLToxMDdCODAwMDdBOEM0MUVCODk5NTE5NjY4Q0Y1QjQ2RjUzRjFFOTIxMzQKLToxMDdCOTAwMDc1MURDMEI3NzM0QzM4QUY4QkUzNDk1QzExMzM5OEEwQTcKLToxMDdCQTAwMDdGQzIwMjJFQTdGNTc0RDlBMUY2RkY4OURBN0Y5NzhBRTIKLToxMDdCQjAwMDhGNURDRTI3Mzc0NDIyNUMxNjMxRDI0NzBBQzRENTFCQ0QKLToxMDdCQzAwMDIyNzAxRDQ1OENFOEIxQzM3RjMwMzI1ODdGRkM0NTdGNjEKLToxMDdCRDAwMEUzMkNDODJFQTA3MTNDOUM4RjhFOUQyRkQ0NDdFMEI5MUEKLToxMDdCRTAwMDZFMERGQ0U5MUQ3OEZFRjJGM0M2MEREMUIwREVBNzA0RTAKLToxMDdCRjAwMEQ2ODExNEE1RjE0RjRERkZCRUVBOEIyNkFBMUYzQjExN0IKLToxMDdDMDAwMDRDMzRBOEZGRTUxN0NEQkNGRDE0MjZBM0JGRUIxN0FBODMKLToxMDdDMTAwMERDNjk1MkU5Mjc2M0M3NzhGMjJGOUVERjZDMjZCQjY3QzkKLToxMDdDMjAwMEQ3QkM5NURCREI2MEJEQTNFN0RDRjVENDBCODgyRkYzNzUKLToxMDdDMzAwMEVFRkFERDBCNzJBRjlFNUYzQTJGQjkxM0YzRjc0N0FENDMKLToxMDdDNDAwMEI3MzNFNDBGREFCQzE5M0IzRUNCQTU3NTRCNDY4Njc4QkIKLToxMDdDNTAwMEZBRjRDRTlGMkZDM0YxN0VCMjJCRDJBMEMwRjg0RjZGQTMKLToxMDdDNjAwMDM3MTI3RjE5NzNFRjYzREIzN0IzQkVGRTk4NTI2N0E4RjQKLToxMDdDNzAwMDlERkY5MzhERUQ0RkVEQzVGNzM1Q0YzRjcxM0EyODRGRkUKLToxMDdDODAwMEU3RDhEQzdCNTJEMDZGN0E3NDdENTU1QjdFNDZGRkZDNzMKLToxMDdDOTAwMEIzRDRDQ0RDMThCRjczRkVGMkIzOUZCRDA1RjNGRkM2QUYKLToxMDdDQTAwMDNENjY2MkIwMUQzMDZBMjZGN0ZGMUM1RDVGRDM5NjBGRkMKLToxMDdDQjAwMDc2RUE1ODkxRTcyOTMwQTM2NzAzQzI2M0VDOEI4MzY1QUEKLToxMDdDQzAwMEQ0REY4MDE0OEM2RTgwQTU3Mzc2ODQ0MTgxRkRGREM2NUYKLToxMDdDRDAwMDY3REM0NjdDNjBGNkM2MEMzQ0NGRENBNzhCMEU3RThBNDgKLToxMDdDRTAwMEU3N0M1Q0M1Rjc3RUY0OTFBM0VBMzlGNTk0NEQzMkMxODcKLToxMDdDRjAwMERERjM5Mjk1REIzNzhBOUM0MkY2QjE0MzRFMjkwOUQyRDcKLToxMDdEMDAwMEU3OEVERUE1QzU5NzFDN0Y0MDNFNUU1MjE2NDU3MTY1MjUKLToxMDdEMTAwMDJERUUyMjNBRkZEMjgwN0M3RUU5QjRFQUM5MTJBRDNGNTMKLToxMDdEMjAwMDM0OEUzRjA0RTE5NzhENzE1RTFFQUZGNzc4OEM4Q0YyMzQKLToxMDdEMzAwMDgyNjA2QjQ4Mjc2QkM1QjE5NDZGRjJFMUFBMUY1MkJDRjkKLToxMDdENDAwMERFNTM2NzkxMzJFMjI5NkVCMDA3Q0IzNUMwNzcyQzkzQjIKLToxMDdENTAwMDI4OEVFQjQzQTFCRDc4MjZGNzIzOUM1QjU0RkY5ODU5RUUKLToxMDdENjAwMEVFMUZGRURFOEI5QzhGNDkzRDFGRkRGQkM1MzNCOTFFMDgKLToxMDdENzAwMDVBOEZFNzkyMTE3MjJFMDdERDkzQzI5QzRCQjQ5NUYwOTcKLToxMDdEODAwMDRCM0IxNzMxQkE4OUNFODU1OTZEOTk5OEY3OTFDODUxRjcKLToxMDdEOTAwMDBBRjdGMzM2Q0FBMUNFRTNEQzVGRjY5QkIyREJFQUQ2ODQKLToxMDdEQTAwMDQyRjlFQzg1NDEwQ0U5NDI4QkFCOTQyN0YxRkMwMzNBOTQKLToxMDdEQjAwMDEyRTA1QjI2QjU3RkEyQUE3NzIzMUY0M0JEQkI1QzhENzMKLToxMDdEQzAwMEJCNzQyRTYxMTQ3N0QxQzYzQjVGMzM0OEUyRTNERDQyREEKLToxMDdERDAwMDdBNzM3OTM1RDAzRkNBOTJBODVGOTE3RUQxMzA4MkU3MUQKLToxMDdERTAwMDQ3OTREQkJBOTc1MEJFQUE2MDcwNjBEQzNDNTFBN0Q3QkQKLToxMDdERjAwMDdCNTgzNUFEMzdGMTdEOTFGQ0Y5ODZBODRERDQzRjExMDQKLToxMDdFMDAwMEMwMjM2NjYxMkIzMzAxODFEQUEzNjAwN0EzMTVGMzQ5MTAKLToxMDdFMTAwMDg2RTAwQjM5NDhDRjUyRjM3NTEzNkI1RUU0RkE1MTFFQkUKLToxMDdFMjAwMEY0NEMwRTk5NEZGODk2RDY1RkZGQjE4ODdDQTBDNjIyMUQKLToxMDdFMzAwMDIzREZDM0RDMkNFNERCMDRCRjM0QzRBMzc2RUEyRkRERUMKLToxMDdFNDAwMEM0MjRCQ0M3QzExNDI2Qzc0RkUxN0UzMDlDNEZCRjdFRkYKLToxMDdFNTAwMDE4OEZFQjg1QTA5RkUxN0U4NTVBM0VGRkQ2MzlGQzFFMjgKLToxMDdFNjAwMDA4REJDRkU0NjBCQjg1MDVBRjY3NDQ0ODU5RjU5Mzg1Q0YKLToxMDdFNzAwMDk2NEQ0OUU2MTAzOUY1OUIwQkE1ODNBQTA3RjBEN0U4ODQKLToxMDdFODAwMEZCMUI2NEQ3QzA3RURGQUEyMEJCMkJCREI3QkQ5NjI3RTYKLToxMDdFOTAwMEE2QzE3OTQ4OERFNTg0MTBERDdGQkZERDJFRTVFOTk5MjcKLToxMDdFQTAwMDgwQ0YzNkU2Q0E3RDEzRTBFMTdFNUYyNDc5Njc4ODNBQTkKLToxMDdFQjAwMDRDRjAwODQ0NzBGOEY0RThCMzhCQjhCRTBCREE3OTFEQzcKLToxMDdFQzAwMEU1NUI4M0JDQzNGM0MzM0NFRDUxODBFRkNDMTM5QTI3MzEKLToxMDdFRDAwMEEwQ0RBQkM1OTczQTU1N0UxQzQ4MEIyQzcxODU4MUM3NDgKLToxMDdFRTAwMEMxOTkzQzdGQTE2QkZEOTcxNEVGMkU0N0ZEMTY3MDM5QTkKLToxMDdFRjAwMEIwRTFDRjIxRjczRjQ2MTZFNzFDOUM0OTdFQjdEMDNDNDYKLToxMDdGMDAwMDA0NEQyRjQ1Mzk0QkY4RUJFMTcyQjZEMzkzNEQ3Q0U3MjYKLToxMDdGMTAwMDNDQjNCNzkwRkVBRkU3Mzc0NjQ2NzkxRjZCQzU0ODQ3N0QKLToxMDdGMjAwMDMzRjlFREVFQTZCQzkxMUE4RjQ1QjJDMDczQUUyM0Q0REYKLToxMDdGMzAwMDFGMzM3RjVBQTgzQzI4NTZFMjc0RjIyMkQ0REZCNUQwMTIKLToxMDdGNDAwMDE1MUEyNzFBRDlCNjhFRjhENzc5RDQ5Qjg4REZGMUY1QTAKLToxMDdGNTAwMDE4RDVCQzMyMTNERTJGMTFEMTVFRjdEMEYzQjBDQTlGMTMKLToxMDdGNjAwMERGNTFGNUNDMDhFNEFGRjAzRTBBMTNDQjAxMUZFRDJDMzYKLToxMDdGNzAwMDQwRTU0MTg4RjIyMzMwQTU1REE2N0NDNzM4QTY1MDM5N0MKLToxMDdGODAwMDgxQjlBOUFDRTU0MTI2MzMxRjNEQjVGQzk2MTQxNkEwNzYKLToxMDdGOTAwMEYyNzBENDg3NDQyNDI5OTk5RTIzRDAwRTE5ODE3QTlFQTkKLToxMDdGQTAwMEEzMjdERTQzNzk5Mzc5NjkxNDJGMjg2NkNBMUZCMDVEMzEKLToxMDdGQjAwMDUxRjZFNzI0Rjc4QUFFNjc5NDRGMEE5QzY0Qjk4Mjc5MzgKLToxMDdGQzAwMDI1MEJCNTMyMkMxNENCMDU0QzQ1Q0U3QTVFNUZBODk1QjcKLToxMDdGRDAwMEJEQ0IxNUU4REY5OUMzREIxQjVGREJGOEE0Qzc0NkZDMEMKLToxMDdGRTAwMDRCQURCRjg3RDdGNzk0MUI5N0U3NjBEOTY0QTBCMkE0QzUKLToxMDdGRjAwMEI2MkZDRTU3NENCMzAwOUY5MzY3MzFDMjgzNUZFNzI5RkEKLToxMDgwMDAwMDk2RTBCMjNCNEY4OTA4MkVBRjI5NTBBMjY2MjVGNDk2MjAKLToxMDgwMTAwMDlGQ0Y1NUVDQzFFNUFFNUM2NTUwNzBGQkExMDU0QTBDRTUKLToxMDgwMjAwMDJGRjMzQ0Q3Rjc0RDRBMEFEQUJCRjBCMzVCOThDMkYxQTUKLToxMDgwMzAwMDEwN0Y1RTM1Qjk5MzcxMUNFNTE5ODFFMDY1MDFCRURERTUKLToxMDgwNDAwMDRDN0NEQkM1OTA0RTgxNkNBQzk4NDcwNDdDQzY3QzA3QTkKLToxMDgwNTAwMEQ0QjM4OTY2Q0FGNzMzNDREOTUyMDdGMjQ3RUFFOTJCMDkKLToxMDgwNjAwMDYwNjI3QkQxNEY1NzZDNzQ4RkM2NzVFOUY5OUVFMDc5RDkKLToxMDgwNzAwMEVENkY5OEM3MDNGNDkwOEI3QTdFNDA4RDg3MDQ2QUI5QzAKLToxMDgwODAwMDNGNDBBMzEzRURCRDdFQkU4QkUxM0Q1MzgyRkNCQ0U5QjYKLToxMDgwOTAwMEJERTNGNkI3N0UzRDFFMUY1MUY1QkRBM0FBQkVGN0JFRDgKLToxMDgwQTAwMEVBOTdFRUQ5NkZDMDE4RjM4OUI1OTdCRUZCRTc5RjQ2RjQKLToxMDgwQjAwMEY2NDkxMEZGRUNCQkRGNTM0QjRDNUM3RTQ4MjgyRjNBNEYKLToxMDgwQzAwMDIzRDhBMjcwRjcyQUZCNUI1RjU0REU0Q0Q3MkNDQUE3REIKLToxMDgwRDAwMDE4MjY1MTlDODE2OTdDOUZGMzlCNEVGQzE1RjhFMEI4RjMKLToxMDgwRTAwMDQxOUFGREVBQjAyMjFDMzI1OEQyRUM0Qzk4QjdENUM5NUYKLToxMDgwRjAwMDQ4N0ZBRENGM0Y1ODgyRkNFNzdDMTk0ODMwNThEN0E5NUMKLToxMDgxMDAwMERCNEYyM0M1MzE2MTBGQjcyNzVBNTIxOEFERDc5RTI2RDIKLToxMDgxMTAwMDQ1QTBCRUQ0QTBGMjREMEI4QjI5MUM4OUVCMUY2NjI0MTEKLToxMDgxMjAwMDc5QUI1Rjc3NDNCNDRGQzBCOEUyMTA3RjA0Rjc2RkM0RjgKLToxMDgxMzAwMDMzNUYwNDhDMzNDNEU5NzA1MkRFOEE0Nzk0OUM1ODJFMTYKLToxMDgxNDAwMDYzRjMzMkExQkNBQzREOTQ5RDMwQ0VBMUI2NTI1NjA5MUEKLToxMDgxNTAwMEUzNTY0RTAzM0U0NzE5RTkzQzlGMjI1NkM1RTM3MTE2OEMKLToxMDgxNjAwMDQ2RjkxNkVEMDkzNjhBNTc3QjM3OEUzRUIwMDJGOTY2MUUKLToxMDgxNzAwMEIyQzgzMkEwRkRGODg2ODk0RUY0N0JENkRCNjI2MzI5NTMKLToxMDgxODAwMEU2QTRBRUE3REVFNjc4MURFRjYxNzgyNDAzQkY0NzIyQTAKLToxMDgxOTAwMDI5NTZDQzQzREY3NkJCRDE4OUZDM0NFNUI5NDlEMTYyOTUKLToxMDgxQTAwMDEwRkM0Rjc5Q0Y0NjYwN0VGQjEzOTI4MUVBOUZBOENERTkKLToxMDgxQjAwMEI1REU2OEMzN0I4NDdFODVGMjBDQTQ5MzhBMERFNkRENzAKLToxMDgxQzAwMDAyNkQxMjYxQkNGQkFCNEVCNjhDNjJGREUzNDNCNEQzQ0YKLToxMDgxRDAwMDFDODJBNzUxMEVCM0NFMEYxQUVBQjczNEU5RjQ4MzA3MTUKLToxMDgxRTAwMDY2QTlGMUE0Mjk2QzBBOUVGMzk1NEY1RDMwQTE5RUJCNTAKLToxMDgxRjAwMEQ0MjY5MzFGM0RCNzQ5QTBGQzk0QzAwMTQ3MkE5RUQzQzMKLToxMDgyMDAwMEE5RkI0NjkzREZEQ0RCMjRBQTdFNkIwN0Y5QUQwMzI5Q0IKLToxMDgyMTAwMDJDMTVFRkQ3NTRCNDA4QTQxNzhCREVCRkQ0NjFCRkUxOEYKLToxMDgyMjAwMDk5NzIzMjhFMzM3QzUyNzc3MkIwQkZFQzg5QkI3RTE4NjQKLToxMDgyMzAwMDgxN0NENDVCNjY1MEZEREM4Q0M2OTE2NUM1OUEwNkZCREIKLToxMDgyNDAwMEZGRDgyQkYwRkMwOTkzMjRFMDNENjZGQkMzNjIwNEFFMkIKLToxMDgyNTAwMEFCQ0JDNEZEMTRDREMwNEZGMTdFNkU3MzRFQzk4MDc0OUMKLToxMDgyNjAwMDY4RkExQUQ2MTk2NEI3MzRDNEE3NDdFMkJDQkRGOEFCQTQKLToxMDgyNzAwMDkwN0ZGRDc0NEIzNkM1NDdCNjM3RTU1MjNFODg3RTlDRUQKLToxMDgyODAwMDdCRDdCMzBFQjQ0RjFBRDY1QkU5RDlBNzNFRDU5NUVBOTIKLToxMDgyOTAwMDgwRkUxRkI3RTYzNDgyOTA2MjFGMUY1ODk1ODRGNzgzRDMKLToxMDgyQTAwMDU2QjQ1ODU4NDQxODNDM0VERDNBOTVFNjVCODFGNzk4NDEKLToxMDgyQjAwMDcxREU5NjYyMzNGMkZENTk2RDM5NjY4NERCQkRFQjk1NTQKLToxMDgyQzAwMEU3ODJFNzY5MkU3NkJGODI3QzJGQUFFNTM5QzIxMzFCQUQKLToxMDgyRDAwMEYzN0IxMDlFQkZCRTQ2NDk0NUZERTI3NDA2MEI5QjI3MEIKLToxMDgyRTAwMEY5RUUyQ0FFNjdCQzc1OEQ4QkVFOTM3QzlDMTJCRURERDcKLToxMDgyRjAwMEIxNTk1Q0RGOUY4REM0MzIxOUYzRDZEODNCMkIwMUNFMjgKLToxMDgzMDAwMDE1NDA0Rjc1RjBFQTU0NTM3NjM0RTJBRDg5QUQyNjI2MTgKLToxMDgzMTAwMEY1OUJCMjUyMEZEQTczRTc1MDZGMDc3RURFNzhENzc1QTAKLToxMDgzMjAwMDlCMkJBMTVEQzNEREEzREU0NUY2N0NBNTk5RUJDREVDQ0YKLToxMDgzMzAwMDAzOTFFODAyRjRDMjBBQTRDRkZGNUE2MDk1RUE4M0Y4RDkKLToxMDgzNDAwMDJGRUE4RjRBNDg3RTFBOTcxQkE2MjZEMTZGMDY3RTZFQUIKLToxMDgzNTAwMERBRkZDOURGRDFERTQxQkM1NTgyRjA5ODdFQTZBODc2NEYKLToxMDgzNjAwMDgxOUFBRjkxMzQ4NUI0NzFGQTY5OTg3RDlEQ0ZDRjMwRjEKLToxMDgzNzAwMEVFQjJEQzhBRTdBOUQ3RDNGQkUwNDk5Rjc1MDQ4RDhGNjUKLToxMDgzODAwMDdBNkUzRTUzMjI4MkQ2MDEyQ0MxNEZGRTcyMzc5RkI3QzAKLToxMDgzOTAwMEE3OUQ1QTZGMDQwNkYzNkQ5MEZFQUVBRkQ3RjYzMTdBMDMKLToxMDgzQTAwMEIzOEU1RTlERENBRTAzRjgwRTE4QUYxQkUzMEJFRDk3QUEKLToxMDgzQjAwMEUxNjQ3NENFNjM0NUU1RTAyNzI4NjdEQjQ1Q0FBQjFFNjAKLToxMDgzQzAwMEQ3Q0VFM0ZGRTc4NzMxRjIxM0Y1Mzc5RUM2N0ZGMUM3QkIKLToxMDgzRDAwMDM4NTg4NTIzQzBCNTMxQkU4NENFQjNCRjdFNjZERjExNjkKLToxMDgzRTAwMDI1NkQ0MkFGN0QzODI2Mjk3NDVENUFCQjhDOUU3REREOUMKLToxMDgzRjAwMEM2MjJCOTNFRDg4MUY2OTlDNTA3N0M2RjAyM0U4RjI4MDgKLToxMDg0MDAwMDI4QkYzM0I3REQyRTBEQjQ2RjNEM0ZDMzFGMTlENkJCNTgKLToxMDg0MTAwMDQyM0QzMjE5NzAwREY5QzNDNzlCMDU1NTBGNjE0OTIzQzEKLToxMDg0MjAwMEE3RDBENTQ1OTIzRkQ4NUYwOUUyN0ZDMDU3NzhERTlFM0UKLToxMDg0MzAwMDRGMjBGODM0Qjc5RURBN0UyRkY5NjFFQzBFREU4QTlGNkEKLToxMDg0NDAwMEQ3MDRBNkM5NDE5RTA3QTRERDEzNjQxODlBMUFEQzFCNDEKLToxMDg0NTAwMDlGRDJFMEY4RTlFRTBEQ0YzRTA1QUZDRTNDQjNFNjBCODAKLToxMDg0NjAwMDdDNUExMjk2NDUyMzNDRUY4OTVGNzA2RDMyQjQ5QjYwNTUKLToxMDg0NzAwMEY2MjUyMTNGNURFOUIzRjRDMTNCQUI4NjJGNjk3ODNGMTgKLToxMDg0ODAwMDJGQjRERTkyMTRCNDdFRjhEN0JDRUZBOUNEQ0I1MDRFRkEKLToxMDg0OTAwMEVEQjMzQTMwMzUxQ0YxQ0IxMzAyOUY0MDdBMzFEMDUzMDMKLToxMDg0QTAwMEQ3NURGRjQxRjdGMzIzQTVCMzRCMjhCRkJERDY0MkY3RjUKLToxMDg0QjAwMEJBRjRGMDdENzI5NjQxQ0JBN0E0RkIxQTFBM0Q0NUI0REQKLToxMDg0QzAwMDhDNjZFODVGM0NBOURBNEQyNzM3ODE5RDBBRTVDNjVBREMKLToxMDg0RDAwMEIzOENERjM1RTg3MjE0MkI0OTYxQzYzM0Q3OUE0RkUwNkQKLToxMDg0RTAwMEI5QjI2MDNCMzFCRDc3OUZEQUY4NUQxRUVFODc2Qzg0RDAKLToxMDg0RjAwMEYxODUzMEZFQkU4QjhERjdBRDRCNTlFOTA0RkNCMjE2MDkKLToxMDg1MDAwMEJCNTZFMUYzRDRBNkU1QjRERjlBQkRCNTVENkY0MjlCREYKLToxMDg1MTAwMDg2QzFFRTlCOUQwOUI4RUUxMTUzMDQ3NDQ0MUE2NUJBRTYKLToxMDg1MjAwMEVGRTdGNUZFOENFNDQ5Q0IzNDc4MDdGNjdDNEI4NzMxRDYKLToxMDg1MzAwMDAyRjUwRjhGRDc0MEYxREI5NjhFRjhDODkxMjhBNzZDMTMKLToxMDg1NDAwMDg2QjA3MUQ2Mjc5QzFDNUVCREYyQzQxNTFEQUMwRjM1REMKLToxMDg1NTAwMEU3NzM3RDQ4RDg1Mzc2N0YzQUMwQ0I3QjlDRTcyOTZBODYKLToxMDg1NjAwMEZBODdBNEUyQ0QzODhCNDRGQzU5RjJGMjNDQjc1RTdEMjkKLToxMDg1NzAwMDg4RUJENUU3NTFBRjQ2N0Q2OTcyQTUxNDJDOUYxQUEyRUUKLToxMDg1ODAwMEY5NzczMDJBRjMxRDFFQkM4Nzk5Njc2MzI0M0Y4NkUzODEKLToxMDg1OTAwMDY1MDVGNDVCRDg5ODZGNTYxQTdFMjdDM0MxMzAzRjM3MDQKLToxMDg1QTAwMDE2RjQxRjE5MzAzQkIxOERFQjNCOTEzNjlCNDM0MTNDOTgKLToxMDg1QjAwMDU2Mzg1RDU5RTEzRjg0Njc2NEE2QzI3MDFFQTM0RUJGNjIKLToxMDg1QzAwMDMwRUJGNDA3NTE1NzdFRDQwOUZBQzQzOEQ2QTM0RkM4MEMKLToxMDg1RDAwMENDMTE4RDcwQjZERjM3NzAxRTg3RTZDRjA1QkQ4OUVFRjIKLToxMDg1RTAwMDk5NzkxOEMwMUZGMUQ0RUFBMUYzODkwNjQzODJFODU5QUEKLToxMDg1RjAwMDUxRTRGOEMxQkQ3QTNGREU2N0UzRkUxNTg5RTI0NTgyQUEKLToxMDg2MDAwMEQyNDg3RUZCQUREOURDQkY5MUNDNzhEQzZCODhDMkVENjMKLToxMDg2MTAwMEY5MDlEMzNDNTQwNkZCODFFMjUwRUM1NzJDMTJGOUYyRDUKLToxMDg2MjAwMDZFOTdGQjM5QzQ4RjM0NjAwMzY4RkZDNThFNjcwMjkxNzMKLToxMDg2MzAwMEZCNzdENENCNTlDREE1QzU5NTdFN0M5MEZCRkZCQzg2M0UKLToxMDg2NDAwMDQ4QzdGNjMwNzhGRkNFMUMyRTk3MjMwRkMxREU1MEJGRUYKLToxMDg2NTAwMEJEREU0QUY3NUIwQUM0Njc5QTA4OUYyNjE5QzhBRkVEQ0EKLToxMDg2NjAwMDY1NDcyNDhBRTdBQjdDMzZBNkQ4RjVBNjkzRTJCMkFFN0UKLToxMDg2NzAwMDM0ODQ3RjkyMTEyQzJBNTA3NkNEQUExRjM3RTU4RUY0RDAKLToxMDg2ODAwMDQ4MTRGNTFGMjZGRjlDRTBFMTAxRDg2NUMwQkY2RDM1OTkKLToxMDg2OTAwMEYxQjE5OUYwRkVGMTlBMEQwNDU3Mzk4MUZCQzlCNDdCMTEKLToxMDg2QTAwMEU3NzExMkJGREZERkVDM0FFQkMxRkJCRDFENzNGOEZERDQKLToxMDg2QjAwMDlGQzg2MkUzRUM3NDI4MEZBRjBEMDg0ODc3RjdEODk1OTAKLToxMDg2QzAwMDQ1QTg5NzM0QzkzRkEzRjM0OENCOTIwREU4MkYxQjZBMDYKLToxMDg2RDAwMDY0QUY1QjI2MzJGNjZDMENBRjQ3NDE4OUY1OEZEODA3NDMKLToxMDg2RTAwMDZGMEJDRTI3RDlBMUVFRkIxMTIxQkNCRUIyNzYwRUQ3RkYKLToxMDg2RjAwMDZCM0FGNzAxMjAwN0ExN0RDQzU0RkJGQkE5NEFCMkI3MjYKLToxMDg3MDAwMDdCQ0EwMDM3RThGRjgwODdEQkNGRERDRUE3MkEzRDIzNzkKLToxMDg3MTAwMEM5MkVFMkY1OUVERkYyRjYxODJGODVGQUEyMzdENjU0NUQKLToxMDg3MjAwMDdBQTBGREUzNjlFMUU3Q0QyQ0UyRjA3REZDOERFRUM3OTgKLToxMDg3MzAwMDMwOEVGNUQ3M0ExRUM3RUFGRjlDRkRDQzAwQkM2NThCOTYKLToxMDg3NDAwMDlEQTVCMjJCODFDRkFEMzIyRjBBRjcxRDk5NzU0NTlDOUYKLToxMDg3NTAwMDhGNzREQTNBMDg1RTBDRTQ3OUY0NTU3NDhGNUVBRkFGMkIKLToxMDg3NjAwMDVBOTE4RUNFNDlEQkVCQTZDQTlDOEY0QzlFNDI1N0ZCOUEKLToxMDg3NzAwMDM5RUVFOUM2QkRCOERFRUE0ODQyRkRCMzdFNTU3NzAzNUYKLToxMDg3ODAwMEYyOEZGQTAzQUIzRUM0N0JFOUU1NjU2NkQyNUJDQjhEMjUKLToxMDg3OTAwMEQ1QkY0NTNCQzg3ODk4RTdCRkUwMzcyNjEwMEY4NjAwNjUKLToxMDg3QTAwMDNGQzJGQkE2QjNBQUY4RjkyRDk1QjhCRjU2RDhGMzkxRUUKLToxMDg3QjAwMDJCMEZGREIxQzk0NkMyNEI0RDhGMUQ2NzUxM0NFODk3NDkKLToxMDg3QzAwMEREQTJFNkI3MzM3MTU4MURERUY3MzIwRTE1QzlFRjFCNzcKLToxMDg3RDAwMDU1MEI3QTJERUUyRjlGRTdFQjJBRjAxRkYyMjE0RENGOUMKLToxMDg3RTAwMEI1OEQzNzg2RTRGNTlBNzU3OUJENDY1RDFFRjBEOEMyMjEKLToxMDg3RjAwMDUwM0U2NDlGM0M2OTQwN0RFQTU3NjAwN0UzM0FGNzAzQzcKLToxMDg4MDAwMDFGQzJBNzFGRUM2MTdDMUUwNDdCMUQ5RjJGODNCRDhFQTIKLToxMDg4MTAwMDdFRjA1N0Q3NjdEMkYzRjVGNTBFN0FGRkU2RkE2OUY0RTIKLToxMDg4MjAwMDlDOTExQTMwMjEzRTkzM0Y5QUZDMzZDQzJGOTA1RjRGOUIKLToxMDg4MzAwMEMzQjM2RDIzNzNBMUVFRDkxQzVFQkY2OEY2QzhGRkYwMDkKLToxMDg4NDAwMDVDMERGNUYxNkE3QkNGMzc4NDg3M0Q2NTM2NzY0NUVFNjIKLToxMDg4NTAwMDc4RjI4MzUzRjlENUMyQ0MxNUU0Mjc1QUEwRTQxNzAyNjUKLToxMDg4NjAwMDlFMjQxODVDMTVGODlEMDc3NkE3ODVFMjE2RkFGREJDRDQKLToxMDg4NzAwMDU3QThFNTkxODRCN0UzMTk3RUMyMjBENDhGNTM1MjM4QUMKLToxMDg4ODAwMEI5N0YzRkNFMjMwMjVGQzdEQUI3RDZFQzQwRkExODU0NUYKLToxMDg4OTAwMDZDNzQyMTFFQTdBNjg3QzYwRjlFMkZFNDc0MjlDQ0U2MTAKLToxMDg4QTAwMENGRDQzN0REQzMwN0JBQUZBRkQxNDc3RkY1RjVGQjAwQjMKLToxMDg4QjAwMDA1MDZGNTVGRUZCNUIzNkJCMUJFM0UyNjNDNUQ5NUE4RUUKLToxMDg4QzAwMDc0RDVFRkY4MzY2RTRGQjJEOTQwNkY0M0IxQUNCNzBGRTUKLToxMDg4RDAwMDAzOTQ1RjcyQUUyNkNGNEZFNEY2QkRFOUFEM0IwNUU5RTgKLToxMDg4RTAwMEFEMkJDNjU3ODc3NjYyRDc4MTU1OUJGMTNCMjEyMkQyQUIKLToxMDg4RjAwMDFCOTIwNUQyMUJDNjNGMzQ3QUFCRTFFN0IxMTRFOTBERjgKLToxMDg5MDAwMDdFOUQ1NUZCOUUyQjBGRTkzMTg5RDM5N0IwNjdGRjFBRTcKLToxMDg5MTAwMENBQzdCODhCRTdEMTY4RjQxNkEzRTZDQjQ3NDkxRDY0RjQKLToxMDg5MjAwMDJGRDI4NzM5QjAxRkQwREUxNjAxRUZGMTdDRjIxMTI1NkUKLToxMDg5MzAwMDdGODg0NTBFNzczOEJBQkI0QzdBREJGQzNERTlFREQ3MzIKLToxMDg5NDAwMEQ3MDQyODdGQTIzMzRENDk0MjdEQzY2QkUyN0VBQkNCNzQKLToxMDg5NTAwMEE1QzNBQ0Q5NjZGRUZEOEMyQjdDQzkzOENFMTY3NTlDQTAKLToxMDg5NjAwMDU5QzM0RTkwRkZBRkM4RUExMDUxOUUzOTY1MEVENzgyQTkKLToxMDg5NzAwMDQ5RDlGNEJEQTE4RjBBNzlCRjZGRTYyQjFENDQ1RkQ3OUIKLToxMDg5ODAwMDdENEE3RURFMDQwM0E3REZGN0RFRDg0MTcyMjFBNUUxMzAKLToxMDg5OTAwMDY4RjEyQ0M0OTc3NTIyRTlEQkZBN0RDNUNENTNFMzY2RjcKLToxMDg5QTAwMDAyOUYxNzM0QUZFNEUwMzhFMjIxOTUyRUU1NzVDNzM4MTEKLToxMDg5QjAwMDlGOEY2MTUyMDZBQzI3QzkyMzk1MzgzMTJFNzRCNTgxM0IKLToxMDg5QzAwMEJFMjczMkE4Rjg2ODBDQ0E2NzZEM0MzOEI4MjRDQzM3OEIKLToxMDg5RDAwMDQxRDVENzNBQjEyRjNEQzI0Rjg3Njk3MDA4M0QxRjJFNTAKLToxMDg5RTAwMDFDQzAyRjdCMzFGRTUxQThEMjMxMUUzREY5NzFENTdCQzEKLToxMDg5RjAwMDkyOTdFQkI3RURENzhGNzg0NTc4QkZBNDRGOTVBRkY1MzkKLToxMDhBMDAwMDI2OUVGRjAxQUQyNUZDMkVDMENCMkVGNzk5NDJGMkZCMkUKLToxMDhBMTAwMEVBRjRCRkZEOTJERjhERkI1ODEzNEQ3RUU1MjQyM0Q3OEEKLToxMDhBMjAwMEY3OTI2NDlFQjczMjk0NzkwOENFNUFGQzRERDMxNzY1RkQKLToxMDhBMzAwMDg1RTcxN0RENTBFQ0ZFMEJDMjY5MUI5MzBGQTAzQ0IzMUEKLToxMDhBNDAwMDM5RDgyMjhBQUY4MTNDNDNCQ0Q4RUQ1MkNFRDJCQ0RGQUMKLToxMDhBNTAwMDUxMEZDQzJDNTZGRTdCMjA3QzJBQkU0RUY5MDZDN0VGNjgKLToxMDhBNjAwMEFGM0VBN0Y4QkYwRTdEOEJGNDVGQzZGREE1NEJDQkFBMkEKLToxMDhBNzAwMDI5Mzc2QjA4RDg0OUI4REU5OTZBN0U0NkZEMzA1RUFGNkIKLToxMDhBODAwMEY5NTdCRDA5NUFGQzU0OTk4N0Y5OTNEMTJBQkNDNjU5QTQKLToxMDhBOTAwMDVDQUMwMkZBNzdBMTFDQzZGQjdCODcwMzdFQkMxNzZDMUIKLToxMDhBQTAwMEMxN0I2NDEyRkE1MTE5RjU4RkE5MTE3QzMyRjYxNzNGNzgKLToxMDhBQjAwMDdCMDVFMzQ1QTYzQ0ZBOUMwODYzRDNCODNEQTBEREJGMjcKLToxMDhBQzAwMDkxRjIyRkNGREY5ODMyNUJGNTM3NEU2NDkzMTAzRUE5QjkKLToxMDhBRDAwMDA2RjlBMUU5RjAzRUZCRDE4MjYzNzgzQzkzMUY1QjExNUMKLToxMDhBRTAwMDg3RTI3MkVBQjY4NjUyRkNERUQ2QUE5RDFGNkY0MzdGRUMKLToxMDhBRjAwMEU4RjRERjVBMTg5RTA3RTg4RjdFNjNEODdDQUU3Rjk4MzMKLToxMDhCMDAwMDFDMjFCQTJBMjlGQUNGNEE4RjExRjk1MTc4M0NFRDJBNTMKLToxMDhCMTAwMDUyRjU0RkM0RDNGODEwM0NCRDdBNzY3ODNDMjVGREU3N0EKLToxMDhCMjAwMDdCRTBFOUNDRDlBMTc4NUFBNEMzRDM1OUIzMTNCRTE3QkIKLToxMDhCMzAwMDlFQ0VDNzc1RkYzN0M2QTk2MDlDQjMwQjk1RTJEOTAzREIKLToxMDhCNDAwMEUwNjVGNjQyNjVFMTQwRjU0MUYxMDFCMkZCNDZCMTY5RUQKLToxMDhCNTAwMEQ2RTBFRjFFNkFDRjU2OTQ5NzAzRTQyN0M0NkUzQzQ5RDMKLToxMDhCNjAwMEY5NzFGNTM1RTcyODRGQjlDQjc2RjI2REI0ODNGRUFCREEKLToxMDhCNzAwMEM2MjIwN0ZCQjM0MDdGMEZEMUQ3NUI0MEFFNzhDMDlFQzMKLToxMDhCODAwMEZDQTA4OEU3NDExRjVBNjdGMUNGNDBCREI2OTZERjQ3OEEKLToxMDhCOTAwMDI4QUZERDI2NjBCRUY3OTBBQTZBQzEwREZDMkQ1MTAxRjkKLToxMDhCQTAwMEQzMTFGQUM3Mjg4NjVFRkYwOUZDQkJEMjc0ODRGNEQ5QkUKLToxMDhCQjAwMDc2OTBDNzFFNjI1RkZDNUU5QTI2RkZDNzU5QUFERjQwMDcKLToxMDhCQzAwMDNCQjVGRUVGNDZDNzA2M0M2NzI2MUQ0MDdFNTQwOEY0QzEKLToxMDhCRDAwMDg0RjFDRDZCQkE0MUJFMDU4REY3QzZCRTY5RTQ1NzlCRTMKLToxMDhCRTAwMEYxMzVDOEJGMjAzRjRFMEU4QzE4NUNDRUIzMjY4N0Y0RkIKLToxMDhCRjAwMDJCOTBEMjQyRUE2NzI1OEQwOUE5RDdFOEJFMzM0NjhENkUKLToxMDhDMDAwMEFCNENERTkxOEZGODIzNTZGMDNDODU0MjM5MkJBNDdEODYKLToxMDhDMTAwMDdCNTkyRTdEMEZFMENBRTlGQ0ZFREQ5Q0NDRTkyMUUzMDcKLToxMDhDMjAwMEVCRjU4MkFCRTEzRkE0Nzc1MUE3MDdFOEY1MDRCRDVFMDEKLToxMDhDMzAwMEYwRTNEOUFBNUVBMERFNTdEOTY4MENFNDEyN0Y2MjNDNEIKLToxMDhDNDAwMEFGNkVGODg1NUYxMzFEQjRDQjFDQ0ZCRDY1NjcyOTFGQzAKLToxMDhDNTAwMEEzMUVFQzdGRjQzNzBEMERDQTJGNDVCQTk4NjAwRTkwMTUKLToxMDhDNjAwMDdGNkVDQjYyMkI5REM3OTY3RDRGRDE3NzIzMzRGRjE3NDQKLToxMDhDNzAwMEQwMEREMUQxODQ1Qzg5RjI1Q0M3REIxRkE0RkU2QzE1REEKLToxMDhDODAwMDk3QjM3QUJBMTQ2QTVGMjRGRDZGRUI3Q0Q4MUJEOEVCREMKLToxMDhDOTAwMEI5RjNEMkI4QkNERDFGMjAzRjA0QkJEM0NDNTA2RTdBRjEKLToxMDhDQTAwMDI1MDNFNThERkQ1OEYwNDcwODIzOTA3RTE1OTI0RjJDNDMKLToxMDhDQjAwMDg5NDk1RUNBOTc3QzhGN0Y0RjkxMzFDN0M2NjQzNEZENjYKLToxMDhDQzAwMDE1Q0E2QjA0QjRFRjdFNDNDREEzNDVCQzhENzAzMkM3OEIKLToxMDhDRDAwMDA2Mjg0NzhERTdGNDFEM0I4OTlGOEZDREMxQ0JEMkQ1QTgKLToxMDhDRTAwMEJDQUNEOURCMzE0OUFDMDVGMzYyODdFMjc4RDAzNkJFNDMKLToxMDhDRjAwMDg2NDlGNUU0RDdGMDUzRkQzMDI3M0I1MjRGRjNGM0ZFOUUKLToxMDhEMDAwMDg5OTVDQ0Q1MDQ2NUIxNUE1MUZEQ0Q2RTM1QkVERTREODkKLToxMDhEMTAwMDcxRUY3NEMxMTE4OUZFOEQxMUEyOEJFMkRFRDE0Q0EyREMKLToxMDhEMjAwMEI4RjgxMDU2NERDRjI4QzFDRjk5Qzc3N0U0MjM1NzAyMjIKLToxMDhEMzAwMDAwNTA1RUIwOUJDQ0Y0RkQ4Q0RDQTc2RDhDQkU2RkI0OTQKLToxMDhENDAwMENBQkM5REYyQjIwMjMyRjkxMUVGMzlDRUVGRTE2REIxM0EKLToxMDhENTAwMEZGOTBFMjA0NEQ2RkYzRkIwNEY3QTQ3ODNFQzQ3OEU2N0QKLToxMDhENjAwMDkwNUE4MUUxM0Q1NkIxOEFDNzExQzRENzQ1QzcyQ0E4OTYKLToxMDhENzAwMDE3NkI1QkU5M0I3MDg5NTUwNkYyNkI1RDY5QUUzRTQwNEYKLToxMDhEODAwMEU3NzBCNzg1QkUxRkQ3MDVGREQxQ0ZENTZFMzczMEEyQUUKLToxMDhEOTAwMDU3NjAxRTNERkU1NEY4RTlCQUM2NDU3MThCQUVCRjBGNTEKLToxMDhEQTAwMDIyNzlDNzc0N0VDRTdBMzdEN0JGRUJFM0NEMUNCRjZDNzgKLToxMDhEQjAwMDY3RkY4MDdDQkIzMTNFOTJFRUM3MkRCQUI2RkE2REU0RjgKLToxMDhEQzAwMDIzNUJERTEzMUQxQjU0RkYzM0ZBRkY4N0UzMkY5ODdGQ0QKLToxMDhERDAwMDYwNzZBNUExREU2OUFFMEFFRkE3MzQzM0Q3QkI5M0QxODUKLToxMDhERTAwMDVGN0FEN0NBQTQ4MUY0QTg3RUUzMjIzNjgzREYxQzdEOTQKLToxMDhERjAwMEU5NzE5MTg2NzIxRTA3RDFENkE5RURCM0QxQjY0NjU4NTYKLToxMDhFMDAwMDI2RTM2RkRGMzMyRTUyRDY0RjVDMjQ1MDJEMjBCRjFGMzgKLToxMDhFMTAwMDhFRjUxMzEwM0VEQzZGRkQ1REUzMjJDRkNDRTVGMkY2NUMKLToxMDhFMjAwMDcyRTMyMkRBQkVFN0FBQkYxNzAxNjJBQkY5MUQxNDE3N0QKLToxMDhFMzAwMEEwNzMzM0Y0QUUyRjA4OEUzQjcwN0RFNUY4OUJDQ0RGM0EKLToxMDhFNDAwMDYzOUM2MUJFNUE3RUZCOTlBMzlGQTE1RkZGRjBFRTgzRjYKLToxMDhFNTAwMENGRTA3M0M2ODUyN0NBRDYwMDVFMTQ0RkIzOTNCRkY3MjEKLToxMDhFNjAwMEREMUZDNTNDQ0M4NzBCOEQxRkNDNzU1ODQyRkNGN0Y4MzUKLToxMDhFNzAwMDgzRjg0OUVCMTBGOEJERkNFMEZBNjJEREJBNzI4REExMEYKLToxMDhFODAwMEYxODA3QzVCNjhGQjk5RjFBMUY1Q0U2MUExNjUzM0FCMDQKLToxMDhFOTAwMDI2M0NENUVGNzc0M0Q0REQ5NDI3RDc3ODFCNzNGMDBDQUQKLToxMDhFQTAwMEYxQTBGMzEwMkY1RTM2MEYzMzg3REQ5Nzg2NkZDQzkxREMKLToxMDhFQjAwMDQ2NzRERkZFM0VBNzdCRDc0QkI3QkZCMTk2RUM1ODAzOTUKLToxMDhFQzAwMEREOUYzRkI3QThFMTlFQjc2NEM0MEYzM0YzRDAzODRFOUYKLToxMDhFRDAwMDA1RjFFOEFCOUY4RTdGODc2MjNBOTJEQjczMjNCNDVGMjQKLToxMDhFRTAwMDk2QzdCRjE3RDUyNzlFQTBGQUYzODdENzFDRThDODBGRUYKLToxMDhFRjAwMDhFRjcwRTc2QUY5RTAzRkM3Q0I4RURBQzgwN0FDOEYwOUUKLToxMDhGMDAwMDlBOTdBOUZFQkFDNTkzMDdDNEEzOEM5QTQzMURGOTQxNDkKLToxMDhGMTAwMERGRjVDQjMwQkEwQ0U4QzdDOEE4Nzk5NURFRjdBN0Y3MUMKLToxMDhGMjAwMDE4NjQwRkNGREYyQjMzQ0I2NDZGQTk3OTZBMTkyQURFNUYKLToxMDhGMzAwMDY0OTQ3MTdGQUI5NENFRTVDRDE2MTM5NzZGMUVBODE2N0YKLToxMDhGNDAwMEFGODJGRkI1RTlGM0REMzg1RjNGM0Y4RERGRUI2MEMwRjcKLToxMDhGNTAwMDg1OTA1RjY5RTNFOUU1OTkyNjA3NkMwQUQ3MjMzM0NBNTAKLToxMDhGNjAwMDFFRTE3MjQ1Q0IxNzZDRDNFN0M1QjkxRjQ0RjgwODU1MEQKLToxMDhGNzAwMDhERDQ2RTZCOUVEQTZFM0ZENzRGRDk2QzI2QTE1Qzg2N0UKLToxMDhGODAwMDdEODZDRDEzN0Q3NDhFMUEyRkVBMjczRjhENjlGNkUzMTcKLToxMDhGOTAwMDgyRDczRkM0RkNCQ0NCQjYxRkZCMTk3NzQ2NkEyMEVDRDYKLToxMDhGQTAwMDdEREIzRDg1REM3RUVDOEMwOEE0MjAxRkVFMzQ4NUQ3NkMKLToxMDhGQjAwMERGMUIxN0NDRkNFOTlDMDFGNDU3Q0NBQjQ1OThGNjZCNTIKLToxMDhGQzAwMDJGN0NDN0JDREEwRkQ1Nzg5MTE2MkZENUYyNkI5OUQxQ0IKLToxMDhGRDAwMDM3MTFCRkYzOTk2OUZCRTAwNjhBODNGNjkzNTc3QjhGQkQKLToxMDhGRTAwMEREMTFDMDdCRUVERThBMDhDNzc2RjZEREZERUIyNzlDM0YKLToxMDhGRjAwMDlDOUZFRTk4QzNCOEZGNUUxNzVGRDBBRkZCODMzOTNERUYKLToxMDkwMDAwMDcxODVFMzczRTg1RTU4RjhCODQyQ0YzRTkzQzNGQkUzNDMKLToxMDkwMTAwMEFFOThBN0RERjc1N0VGMkIzOUI5REVBNzk4MTQxNjJFQjcKLToxMDkwMjAwMDBGNTRDQjc3RDdCRjA3N0JFOENDOUMyMEJGOUVCQjJFQ0QKLToxMDkwMzAwMDgzRkM3NkY1MjY4RUI3MUU5OTdGNEY1MEQzMUY2REE4RkYKLToxMDkwNDAwMDNGOTIxRUQ1NDJGNUQxNTU1QzlGRDRGNDJDNDk4RDZCQ0YKLToxMDkwNTAwMEU4RTkwOUU4RTNBRjM4OEY2MEUzNzRBQkU5ODkzREY0RjAKLToxMDkwNjAwMDcxMUREMDA3RDBFNTMwQzZFMzRBMDYzNTZGNzQ5ODk1NzgKLToxMDkwNzAwMEE3QTA3RjU3M0RBQUFGRkRGNEI1RkQzQkQ5NEY3NTNCODcKLToxMDkwODAwMDIzQzg3RUFBREFGRTA2RUE1NUVEMzVEQzRGRDg2OUFGNzMKLToxMDkwOTAwMDdFMDNCRjdGRTA3OTRGMjRCREE5QkZGRTlBMUQ5NTM4OUUKLToxMDkwQTAwMDJGRDQ4RUMyQjgyMkUyNjNBMkNEMjdDODU3QTAxRDE1QzcKLToxMDkwQjAwMDMwQjk2MTdERTU2ODQ3RDkzMDZGRDUzREFDMjhBMUFGQTcKLToxMDkwQzAwMDNERDU3NUY3OUYyOURGMTVFQ0NEOTRBMjdGMDQ3RkQwQTUKLToxMDkwRDAwMEY5OTcwRUFBNzkxMDA3NDY5RTI1QkY4OTU4QzNFRDNEMjIKLToxMDkwRTAwMEIxODZDNzQzOEQ2NTNDNkU2MTU0QjgxRkM1MENGMjA4NEMKLToxMDkwRjAwMDVEODE5QTFGNjU4QjIzRDQ4RkQyOTVDMkZEMjg4OUY5OTMKLToxMDkxMDAwMEQ1N0VENDAzNEREMzJDOTI0MkYyOTFGQjU1QjRCQ0Y2REMKLToxMDkxMTAwMDcxMTZERjFCNzgxRkEzM0VDQkM4MzAwRjFEMTQ1NUIyNEMKLToxMDkxMjAwMDAzMkQ2QTdDODM5NTcxNzlBNUY5NERGNDc5RDMzNjlEMjkKLToxMDkxMzAwMDlGNDRFRjQ3QzkyRjBBRjU5QjNDMkVDOEY3NEU4Nzc5MEQKLToxMDkxNDAwMDlFREY1Q0YwMTZBMkVEN0Y2RTVEMTE4NTdFOTMxNzdEMkMKLToxMDkxNTAwMDBENzM1NEJGQzlBM0I4OUU3RDFGNzJCRjQ5RDczRTZFMjEKLToxMDkxNjAwMDE3Qjk1MTgxQjkyQTFDRkVGNTg5NTM5MTFGNjREREUxQkQKLToxMDkxNzAwMEY1MTQyRkQzRkM1MDg5NTUyQTNDRDRCODBGQzIxN0UxRkYKLToxMDkxODAwMDI5M0EzOTNDNjM3NEYwRjQwRUQzRTI0MjJBM0MxMzM4OTYKLToxMDkxOTAwMDdDQ0I4QjVDRTQ3NzkyMTA5RTUyMkYzQzM1M0Y5NUY3NDkKLToxMDkxQTAwMDcwMDc3RDVGREJCMkNFMjI3QjA4OUU5RjkxQkQ2QTQyMzUKLToxMDkxQjAwMDc4MjJGQ0JGQTcxRkVBOTYyMkQ1MkU1NUUxMzlGMUQxQkUKLToxMDkxQzAwMEVDODdGMDNCQzE5MzFFMkIzRDg2Q0YyOURCNkU4QkJCMUEKLToxMDkxRDAwMDAxOUVEMzc2M0U1NDhBNEZGNjNBOEYxM0ZDNzUyRUU3RTQKLToxMDkxRTAwMDU3OThEOTFENEM4RjM3MTVDQTIxREY4M0Q3RTBBOUUxRTUKLToxMDkxRjAwMDYxQUZGRjhFOTEzRkI2NUNFMkZFRkM3MjE1MEYzMzEwM0IKLToxMDkyMDAwMDZFQzFGRTNDNDcyOERDQjZBOEY5OTJDNkZDNkEwRkRBQUMKLToxMDkyMTAwMEJCQzM3NTcwRDNGMEIwMUVFMTg2RkMyRUM2MkM3QkM4OTQKLToxMDkyMjAwMDdGNTcyQkEwM0RENDFGMUUwRTZGQkIzQzNDN0M1ODg3NDQKLToxMDkyMzAwMDg3M0ZEQjlDN0QyRkMyRUI4NUFEQTU2RkUxRjNFN0JFRDkKLToxMDkyNDAwMERCQTIxMDVFN0I3NzNDMzRBNzFGQjgyNTg3RjA3OTc0Q0EKLToxMDkyNTAwMDcyMjdGNDg1REI4OTYyRjcwRUU0MEYzMzFDM0UyM0YxOUQKLToxMDkyNjAwMDU5QzAzN0I0N0JCNzM3NERCNDg2QzY2NzM0RkVFOEI0MEYKLToxMDkyNzAwMDg2OTMxRjE3RjcyRkFEQTFCQ0MyRkFCMjM1QzQxRkJCMkUKLToxMDkyODAwMDdBRjg2M0I3MURGMzEwMkY5NTNGRTZDREU1RjdGQUNCREIKLToxMDkyOTAwMDZCQkU3QTY1MDZDMDM1QUZFNjA0RDE5RjExRTg4RkNFNkMKLToxMDkyQTAwMEFERjY4NDQxQ0RDNzYwMTEyMDJGMTJDQjk4MUZFM0M3QzQKLToxMDkyQjAwMDQzOThENTE3MjU1MDdFMDJGMTREMkZFNjM5RTMwNzRBMzIKLToxMDkyQzAwMEY1N0UwQUU5RDVCRjA5NDQxQzRDMzAyNDAxMUZDN0RDRDgKLToxMDkyRDAwMEE5MkI0OTBFQkU1OTM0QjkyRjlGNkQyRjMzOTBGRjY3Q0MKLToxMDkyRTAwMEJCRUExRjJDNUJFMDNBOENFREI0RjhENjZFOTdGMjc2QjEKLToxMDkyRjAwMEQxRjdGMzZCMUYyRjBBRjIxNzc2QzZCMDFFRkYxQTdFNDYKLToxMDkzMDAwMDFGM0NBRjY2OUI4MDc5Mjg0MzZBNkYyNUY5OTA1OEE2NjkKLToxMDkzMTAwMDMwOTQwRkI3Q0VFNjc0NjJDQzk3NjhCRjdERkQ2RERERUIKLToxMDkzMjAwMDc5NjgyNzc0RTI4REY2MkNDMjgzOEYxMTBGM0E2QjlFRjkKLToxMDkzMzAwMDI0M0NCODcyMTVGNzhGNzRENjlDOEIwQjhGMDczNTExQjAKLToxMDkzNDAwMERGQ0RDRkI4M0Q0NDRFN0E2QkY4Nzc0QzNBRURDQUVCOUYKLToxMDkzNTAwMDE5OTc4MTA3Q0I1NDNDRDBFNDI0Q0ExQkM0Mjc2MzU5MTYKLToxMDkzNjAwMEUwNTFGNDYzMEYwMTdDODg0ODQzNzlDOUY5QjEwOEYyRjAKLToxMDkzNzAwMDJBMEFGNjIzRjZFMzdGRDRFOEExMEJENjY2MTk4NEY3MTAKLToxMDkzODAwMDg0RjVGOTAwRDVCNEVFNzM2NUI5RkVBOTAzQUNFRjkyOEMKLToxMDkzOTAwMEYzMDBENEI4NjRCRDFBOTc1QzVBQzNGMzU3M0JENzdEMkEKLToxMDkzQTAwMDU1ODBFQjNENTcwNkY2MDFDMDY1N0I5OTgzRTFGOUNEMDkKLToxMDkzQjAwMDAyQzUyQTYwMEI5RUE3NEZERUVBQjBCOTA5QkQ3MTQ4MEQKLToxMDkzQzAwMDJEOUU3RkEyRDg5NThBRUY2NzAwNEUyNUM1NjI1RUFGQkQKLToxMDkzRDAwMDFBRUYxOUE2N0UwNzVBODdGRjgwRTdBM0U2OTI1RjRFMzEKLToxMDkzRTAwMDIyQjlBMUY5RDExOUVBOEQ3NkM0NkY2NTM0RDY0RjMwMTAKLToxMDkzRjAwMDU3Mjc0Qjg0REZFRUYxNTg2RURGNzcyN0U1MkZGNEZBMUQKLToxMDk0MDAwMDA3NzkzRURDRjdGNjZGNDU5QjI5QkY1MkYzNkY3OUVEODQKLToxMDk0MTAwMERDQkY1NUMxMDIwNTY4NUY1MzFDMDFGOTc2QUI4NUJFMDAKLToxMDk0MjAwMEQ3NTAyOUM4NjZGMkFGOTVCODk1QjlBNEY3QjgyODFGRTgKLToxMDk0MzAwMEQ2QkRDMDJBOTExRjZDRDVBRTY0RTQxN0U1OEQyMkM5NTQKLToxMDk0NDAwMEVCRkVFQzkyQkU3NDc2OTk3QzQ2QTVCQkVGQzA2N0FFOEUKLToxMDk0NTAwMDlGN0I2OTdDNjYzMUVFMkY4OENGREMzMEY3N0JGMDk5RkIKLToxMDk0NjAwMEY3OEI0MkY5MEJFQTlENzUzMDRGOUU0QTRGM0RGQjU2RjQKLToxMDk0NzAwMEUzRjgxOEJGOEFDODBBRDI0N0Q1RkRFQUU5QTg4RjVFOEIKLToxMDk0ODAwMEZBN0YxRjVEREQ4MzcwMEQ0MzU3MUJGMUZENjVEMDU1REQKLToxMDk0OTAwMEVCNDVFOEVBNDEzQ0NGMjBCQTZBRkYxN0E1QUJBNzJGRkUKLToxMDk0QTAwMDg1QUU5NEI5MkMzNDRGM0E4RTdGRTc3OTVDOUM4MUU3ODYKLToxMDk0QjAwMDU5RkUxRkNFOTMxRUEzREFEOUZBM0M2OUM2QUFBOTVDNEQKLToxMDk0QzAwMDA0Njc0M0U3QTM5NkU3NEQ2MjMyQzY5OTJDREI1RURFNjQKLToxMDk0RDAwMDM0NTZFNkUzMDVGQjNCOTlDRUNGQzk3NDdFNERCRDdFODUKLToxMDk0RTAwMDE3QzYwRjFBRTJGNzNDRkNENEVGMEU4Rjg1NUY5RjdFMDQKLToxMDk0RjAwMEY2QkY0OUFGN0Q3QkE2NDBGN0M5RTc4REZFNkEzRkVBMUMKLToxMDk1MDAwMEEwQzUxQjk3QTlGMzBDRUNGN0ZDNjdGQjM5RjEyN0Q4MzIKLToxMDk1MTAwMEFGQUFERjU3NjNENERERUFCRDgxQ0JGMzczMzJDN0FEQTkKLToxMDk1MjAwMEY0N0RGM0Y2NkFFNjQwQjg1RkNDRUZEOTVFQ0JGM0E2RTQKLToxMDk1MzAwMEI1QkM2NkQ3NEI5NTBGMkY5Q0M0RjNFOUQwRUZBOUY3QzQKLToxMDk1NDAwMDc3NkFGOUNBRjVCNjY1QTRFNzlGNTRBQ0RDMUZBQkYzQTQKLToxMDk1NTAwMDc3MkU4QjkzNkZBMTdCOEM3REZEOUQ5MUYzRkUwMUZFOTkKLToxMDk1NjAwMENFREJFN0M4REM0RkEzRjM3Qjk2Q0U1MkUyRTcwRDkwNEIKLToxMDk1NzAwMENGRDAxOUUzNjBDOEVGRjI2QzNFMDFFM0I1RUM0MjM2QTAKLToxMDk1ODAwMEY5NzU4NkQ4MDJGNDdEQURGMjlBMUNEMjAzNDcxNkJCNUEKLToxMDk1OTAwMEQzNzAxQzYzN0VGN0U3MkY0RUEyN0MwMzA3MEVBNUU3NkUKLToxMDk1QTAwMENCQTA2N0E2Q0ZBMzNDQjY3RjhFOUZFMDlGRTVFN0ZCRUQKLToxMDk1QjAwMDY4Q0VFNUREOUZGRjA4RTEzRDc5ODA3QkY0NzJFMEIxODQKLToxMDk1QzAwMDI4NzhGRjc4OUQ5REJFQUZGNUZDNkM1OUNEM0ZFODRFRTUKLToxMDk1RDAwMDY5ODFGQTc3RUYzQTczMTBGRDEzQkUzNjAzQzNGQjZENTIKLToxMDk1RTAwMDk3RUEzRjZBQjg4ODVFNkNENkQ5NDc1QjdBRjQ2MkRGNDcKLToxMDk1RjAwMDFCNTM4M0Y0RTI4NkY1Q0U3REE3QzM4Q0EzRTlDNUJCREMKLToxMDk2MDAwMDc0RkVBMzcyMUJENzhCQ0I2REREMjZCNDBGQ0FFM0JGRUMKLToxMDk2MTAwMDdFMDVGMzRFOEQ1NUFDMDNFNUUyMTBBNTlBRjRFMTQ0QzYKLToxMDk2MjAwMDg5NTEzRUYxRkY4RkNCQjM3RjY4NUNGRUZFNzlBMTcxNUIKLToxMDk2MzAwMEY5MDk2QTNFMEFGMjc4RkNGRTRGOTdFNjQ3OURDNkY1QTcKLToxMDk2NDAwMDg2OEQ0NjZFQUY3ODE1NzgxNzI2OEVBRThGQ0IwRkJGRkUKLToxMDk2NTAwMEIwODdFMkYyRUQ3QkFENzQ4RjZGQ0JCRTY2M0U1RTBFREYKLToxMDk2NjAwMDkzMzBDRjNDOTlBOUZBNUExMUY3OTdFQUY1OEZDNzRENzUKLToxMDk2NzAwMDhBMzU2RDEyRTJCQjgxRUUxM0UyM0Q0MUYyOEJFQ0I1MEYKLToxMDk2ODAwMDZFNDM3RkQzNzgzQkNGRTdDRTdENjdGMTRFQ0FFN0Q2RjYKLToxMDk2OTAwMEY0NDNEMDQzNDkyRjJFMEJEMDc3OTlDQTI1MDcyM0JFMTgKLToxMDk2QTAwMDEzM0ZDRDRGRjFGMTVBODFGMDZCRDkzQzRFNkY0QkYzMjQKLToxMDk2QjAwMDdEQTQxRjBFMjk5MzA0N0U0RkNDQzNFREY4NTQxRTc3NzIKLToxMDk2QzAwMDhFNDRGQzgyQTY2MjI2OEZGQjRBNDc0NDA3QzY5REVGNjQKLToxMDk2RDAwMEMzQTZEM0YxRkUyQUUzREZBQjk4NkVBMEJGNDNEMTJFMjEKLToxMDk2RTAwMDc0MjcyMTVGNkUxNTk0NjQ3QzgyQ0U0NEY3MUU5RjhEOTMKLToxMDk2RjAwMDUxMDZFM0RGOTNBQTRGMzFEMERGOTMzQTU0RDA5ODg0RDgKLToxMDk3MDAwMEVCNkJBQTZCNEQ0MkJERjAxNUQ1MkZERTVBRjAwOUU1ODMKLToxMDk3MTAwMDNGOThDNjgzM0U5ODQ2Q0ZCMDdGNzdGNEMxRjk4MkZBNkUKLToxMDk3MjAwMDc3MDQzQjkyRTg3QjA4QUNFNTQzQzJBQjRDMzNFMzdGNjQKLToxMDk3MzAwMEU3QzdFMTVGOEVGNDc0REE0NkZBQzIwMzgyOEZERjEzNjMKLToxMDk3NDAwMEIyNUJFOTNFNUVDQjE4NzM3MjI1QUNBN0Q5NkUyNjZENkQKLToxMDk3NTAwMEMyM0I2NkU2OTEzNDc4REY5QzIwNDU2MzFDQzA5Qjk2MzMKLToxMDk3NjAwMDJFQTFGRkM4MUJEM0Y4M0FGQTQxOUFEM0QyMTlFNkZCQ0YKLToxMDk3NzAwMDM3OTU0REExRjg3OUQzMDU2MDMwRDBCMzdFRUNBODc3NEEKLToxMDk3ODAwMDI3QzNGQjhENDI4MEJFMUJFNDk5NkU2MDk4NEZEODM2OEMKLToxMDk3OTAwMDY2NjY3MkYwQkQ0QzUxRDJDQjQ5MDdDOTA1NTEzNkQwMkYKLToxMDk3QTAwMDNEM0Y1MThENjc4QjdERTJEOUExRjFFOTQ5RUFCRTY1NjQKLToxMDk3QjAwMEQ2QjI4OEVFODFDNjlCMjVEQzZGRjk5ODkyMEZFOTlFQTAKLToxMDk3QzAwMDVCQkM5OUYyODJDQTREOEM3RkY3NjMwQ0EzNzNEMUMzNDMKLToxMDk3RDAwMEFGN0U3RDY4NUNDMTY4MEI1RERGNDYwQzRDNTMxRUY2QTYKLToxMDk3RTAwMDk2OTU4ODFGMEQwODUzQ0FFM0JFNzcyNUYyQTU4NjlFN0QKLToxMDk3RjAwMEZBNDY1RThFRTBFNUFGRTdENUFENDQzOTI4MzNGRUY3OTMKLToxMDk4MDAwMDQ5MUEzMjc5REU2NTc5NDIwOUYxRTE3MjUzMjBFQzc3MjkKLToxMDk4MTAwMDdFMkZCNjFFOTlGOTE0NzUzQ0Y2M0YzOURFQzYzMUU2NDcKLToxMDk4MjAwMDQ1QkVGMTE3MUZBRkY3NUM0MDdERkUwRUUzNkFFREY0MTUKLToxMDk4MzAwMEUzRUFGQkZENEZCNUVGNkY5Rjg5RjNCNUJDN0E0Njc5M0MKLToxMDk4NDAwMDEwQTQyMkFBRjdEOTUwNEYzNkFBRkNCMDNFNzc4QUNGOEYKLToxMDk4NTAwMDJGMjMzRkYwNzBCQTg4MzE4NENEQjNFRDlGM0U4MkM2OEUKLToxMDk4NjAwMEU3NDlCREM0NkY2OTdDRkNGNjRDNERBMTFGRjkyM0JFQ0UKLToxMDk4NzAwMDJGNDlFQUE1OUI5RUZDMEI3NTNDQTg3QTE1RTVDM0Q2M0IKLToxMDk4ODAwMEY5NDJDRkJBQTVDMUJERTNGRUE2MkNEQjhGNzYxQ0Q4NkEKLToxMDk4OTAwMDE5NzI5QzIzMENGREE5NzkxQUQ0M0U4REYyNkQyODNGRDQKLToxMDk4QTAwMDg2OEQ2NUM0NDdCNEY2NDY3NTVFN0RERUM2NkUxNTJGOUYKLToxMDk4QjAwMDJFMzc2RkUzMzRFRTYxMTJDOTFBQjIwN0JEQkY2REExMzYKLToxMDk4QzAwMEZDMjU4NjFGQTM0MkZGNUM5NjQ0RjdFMUVFRDVEQUQ5NkEKLToxMDk4RDAwMDE5RDk3MURBMzk0NEIwREUxRkI0RDM5MkI0ODJDQzQ2QzAKLToxMDk4RTAwMEUyM0RDMzhEQTMyN0QwREZBNzdDNzRGNzgzM0ZDMUZDODMKLToxMDk4RjAwMDhEQ0RDRjZDRjgyMzNFMjM0NzRFQjg3RkRBMjRCQzQ3OEEKLToxMDk5MDAwMDZGNzBBOEI5RDQ2NDNGNjlGOTM0QjY3RkRCRkMzNUVBREYKLToxMDk5MTAwMEE5RkE3Qzk1QzZGMTJCNUFFOEY4ODJDRjMxMURGRjJFQUIKLToxMDk5MjAwMEIyQTBBMDdGREY2MkIzNkRBN0VGRjk1ODA1QjIxRkM0RTQKLToxMDk5MzAwMDg3MTI2OUZENDk5NUExRTdERTJFMjgxRkUwNzdGRjNDREQKLToxMDk5NDAwMEY3MDlDNDQ3MjMxQ0ExRjkzNzdBN0JBM0E5RTc1QzQzMzUKLToxMDk5NTAwMEVEOTQwNzg0RjA3MUVGRDdFNjczMzkyM0VBRUU4OUI2MDgKLToxMDk5NjAwMDlBNjRGQThFNkRFQjQ2MTEyMzk5QUM3NTlEODVGOEQ5RjIKLToxMDk5NzAwMEVGRTcyRjU5ODlERjE5QkYwMzE5MUVENEI3NUY2M0E2MUMKLToxMDk5ODAwMEJGNkJENTZFOTdBRTVCODQ2NTU1OUU2OTcxRTYwN0FFNzkKLToxMDk5OTAwMDE4RTUwQkZFRkI0N0FGQTI5Qzg1Rjk1QUFFMzE5MzNDMEMKLToxMDk5QTAwMDYwQzY2RUNBNjNEN0RGMEZFRjYzNjdFOUYwRUU2Mjc4RDcKLToxMDk5QjAwMDc2QzNGQzU4MzVERkMwNDc3MkE1QzdCRTFGNkRFMEY3MDAKLToxMDk5QzAwMEEwNDcxQkZFMjVFRTQxQkJFNzg3QjdFRkJGRUYzRDY4MjEKLToxMDk5RDAwMDhBRUIyNUY0QTU1RjJERkY2RjQzNTRFQTYyREM3RkMzNTkKLToxMDk5RTAwMDJDMzM3RDJGRUU3MkVEREVENjc1MkI0OTVFNzg2RTY1RDkKLToxMDk5RjAwMDhFMEM0N0RGQkMzMEQ3NEIyMzA5N0ZDNDI2OTFGQzcxMDYKLToxMDlBMDAwMEJERjhDNUVEREE1RkNDMzNGNUZDOUQxNjZCMTA5RkQ0MjUKLToxMDlBMTAwMEYyODIxRTUyRUYxNTNGRTQ2QUE0RkMxOUFGOTNERjJCQ0MKLToxMDlBMjAwMDhFNjg1OTQ5RjY3MjJCRTg2MTk4NTdBNUQ5QzcyN0E3QzAKLToxMDlBMzAwMEE1NEYxMTI4RUY0N0YxRTA3NzNENEVFNkFBNzk0MTUyNTQKLToxMDlBNDAwMDY4N0UwQjUzRjNGQkI0Rjk1QUE3QTVEMzdDNUVCNEM3NjkKLToxMDlBNTAwMDA3QzAwM0EzNTNDRERGRDM4REQ3QzNBRkQxRUUwRUIyNzIKLToxMDlBNjAwMDk3QzFFRUZFREI3Q0Q4REZGRDM2MDczQUUzQTBGRTY1NEEKLToxMDlBNzAwMEFBNjc5MzYyMkZFOTFFNjgxN0ZFMEFFRDdFNTBBQUQwRUUKLToxMDlBODAwMDlGNDhGOURGMEE1NTFDQ0QwMDgwMDAwMDAwMDAwMDAwNEYKLToxMDlBOTAwMDFGOEIwODAwMDAwMDAwMDAwMDBCQUQzQjBENzA1NEQ1N0IKLToxMDlBQTAwMEI5REZGREQ5QkIxQkIyOUJEQzBEOUJCOEMxMTA2RjAyQTcKLToxMDlBQjAwMEQxMjAzRjVFMzA0OTEzQzU3MkYzMDMyNDRBRURDRDBGMjgKLToxMDlBQzAwMDA5QkUwMURFQTI2ODcxRUNENEFEQjVCRUQwM0FDREM1RjkKLToxMDlBRDAwMDZDNDg4ODA4NEJDNDA2NUYxRDhENTRGQkRBQjFENUQ0QTEKLToxMDlBRTAwMEQ3RDc4NzhFRUQ1QjkwRTdGODRGREFEQUFBMzMzRTFCQzMKLToxMDlBRjAwMEQxRjJGQTNBOUQzN0U5NkJCMUU5OEMyREVGRkJCRTczRDkKLToxMDlCMDAwMDJGRDk1RDM2ODA5NDM4RTNFMURDNzNDRTc3Q0VGOUZFNTEKLToxMDlCMTAwMDdGQ0VCNjU1RDUzQUY5MTE4MEUzNTAwODBBQjYxRjg1QjUKLToxMDlCMjAwMENDMzU2MTAwNzhERjY3MDZDQzI1MDBBN0U4NkYxNTQwQ0IKLToxMDlCMzAwMDdGRDIwNzI5RUM4MzZBMDI2MEJCMEUyNjM3NzVFMDdDNzIKLToxMDlCNDAwMDU4RTg4MzI3QjE1MTIyQ0JGOUZCRDY5MEFEQ0E0MTgwQUEKLToxMDlCNTAwMDEyQkIxMkEwNzg2NjdEMUJFQzU3RUZDMkYxQUI3QzYzQTEKLToxMDlCNjAwMDJENTAwMzkwRDgwQUJBODM0QkI2ODQ5MjJBRjU1NzAzMzYKLToxMDlCNzAwMDM4ODAxQkFGMzUxQTAzMTUwOEI3RjUwNURBMDg2MDU1QUMKLToxMDlCODAwMDc4MjQwMjMyQzBCMkU3MEY5NEM1Njg3RkM3RkE3OTc1QUUKLToxMDlCOTAwMDFERDA1NEZFNUJFQzlGQjA5QjcxN0RGRjFCOEE3OTFGMkIKLToxMDlCQTAwMDdGRDEwRkM3NzBCRDFBNTU2MDE4MjE0OENGQUM4QzRFQkQKLToxMDlCQjAwMEUyNzlENEUwODlGN0EwMDBFMEJBMjk4MDk2ODA1ODdCNEEKLToxMDlCQzAwMDhBRTA0RjA3QTBBNTdBQTZERjg4OTBEM0ZCQ0Q4MUQyOEIKLToxMDlCRDAwMDhDRjlBQkY1OEE4QzcxMDUyQzMzMjVFMUI5QTM4QjMyNTYKLToxMDlCRTAwMEU2ODU2QTZCNzQzQTZGOUJCMTNDRTNGQjBERDUwRDE5QUEKLToxMDlCRjAwMEVCQTE0NTNEM0U4OUZEOTVGOERGQTk0QTgyMjdGQTNDNTUKLToxMDlDMDAwMDVFMDExMDVDODJGREI0RjUyQUE0RjU3MUZDMUEzQjE0QzgKLToxMDlDMTAwMDM5QjExODNCOUY4MUNGOUM1Mjg4MkVFNjA2MjBCQTgwMkUKLToxMDlDMjAwMDZDM0U4OTc4Mjk3OTNFMzA5OThGRjgwM0NCMzIyMjI1MTIKLToxMDlDMzAwMDg4MEYxQTMyMDBCRTZDRTNFMjVBRUMwNzRGQzg4NEZGNkIKLToxMDlDNDAwMDQ3RjI3MUVGNTJDNEIzM0UyOTEzOUQ0MDFGOTdGODNCNzIKLToxMDlDNTAwMEMwRjgzMDIyM0JBQTVBM0MwRkEyQTAyNzcwREVBNUUwMzQKLToxMDlDNjAwMDQ4M0FGNjQzNTE0ODUyN0YzRTI0NzkzRUZFMjUxRjZDMDgKLToxMDlDNzAwMDQwQjYwODg4RjUwNTFENjBFRUM1RjFGQzI1OEUyNDYxMEYKLToxMDlDODAwMEJGQTgxNTRDMDVFMTA1Q0QwOTg5Q0VBOUUzN0EwNUY5RjAKLToxMDlDOTAwMEEwMTQ1MkRDMkY2Qjg1ODk3RTg2NkZERDQ3RUI0QjdCRjIKLToxMDlDQTAwMDQxMUYyODI1QjAwRThGOEY2RDA0ODdDRUYzMzg5OEUwQzIKLToxMDlDQjAwMDU3MDgxRjM2QzAwMjAwMERFMkRDNUUwNjQ2MTEyMjExNzUKLToxMDlDQzAwMEJFMERFNjBBRUE1N0MxMjQyMTE1QTkzQTI2NTFGRjEyMTIKLToxMDlDRDAwMDE4RDdBOTBGOTAwMjdCMjkzNjkzNkFGODQ0ODBBNzAwMTEKLToxMDlDRTAwMEYxQTlDN0FGRDkyREVENzRDMkEzMEI0RTFFQkZEMURBQjcKLToxMDlDRjAwMDY2MjM3Rjc3REY1NDVCMTgwQkNFQkU0RUVEN0Q3MUJDQzMKLToxMDlEMDAwMEU1RUE5OUZFQjc2RDgzRTU0MkVENURDQkYyQTJGNkJFQzIKLToxMDlEMTAwMEM0RTM0NzZERkIyQjM2RDI2MzE5QzIwRkFDRjhGNEY4REQKLToxMDlEMjAwMDVGQTYwOTdDMjYyNDMwMUQ5QzlGNzhFRUZBRTgxNjFDNUQKLToxMDlEMzAwMDc3OUUwQjk4NTU0MEY4NDU3QzEyNUZENDA3QTY1RTY5NjQKLToxMDlENDAwMDEwRUI4OTFFMTFBNDA3RTFCQjY4MDk0ODg0ODNGOTQ0MUMKLToxMDlENTAwMDA3RkNBRTIxMUQ3NjMxMUQ5MzBDQjczQzBFRTYwRTc3NDUKLToxMDlENjAwMDVGRUE5NzIyMUQ4ODJFNjNBMENGMjFCQzJBRjE0RjQ3QkUKLToxMDlENzAwMDA3RkU0MzM4OTcxQzBBM0MzRTJDMTE3NjkxMkUwQjJFODEKLToxMDlEODAwMDBBNURCRTc1MjE3NEM5QTYwN0RDM0IxN0EwRTE2Q0ZCMTgKLToxMDlEOTAwMDNBNENDNzZGNDlBOTNDNjkwMTkxMDVFOTgzRjc5MTkwNTUKLToxMDlEQTAwMDNFODRDRjI4MDg3QTY4MDAyNkUxMjkxN0ZFQTk5RjU3MkMKLToxMDlEQjAwMDAzQzY3RERDMTdGMzg5OUU0RUMzMENGRjE3MjJGRjhCNzEKLToxMDlEQzAwMEJFOTBBRjMwRDI0MUY0MDU5RDIyMjQyRkQ4OEZEQUUzMjQKLToxMDlERDAwMEJDQkU2ODJCRDgwRjk0MTIzRDJDNDY5RTBGNjJEQ0ZBNTUKLToxMDlERTAwMDYxNEFBMkI2NTIzMjk5NUUwQjE0NUJBNjdFQkU5NDEyRjMKLToxMDlERjAwMDQ4NDY0QTkyM0UyODAwOURFOTMzMEZFMkRDNDY3QzUzRjgKLToxMDlFMDAwMDg3NEY5MUJFMEVDQTYzNEUwNUI1Q0YzNkQyM0VGREVCRUQKLToxMDlFMTAwMDUwQzM5MENBMEY4RDM0MzI1RkRFMEU3QTE1RjI1REI5RjEKLToxMDlFMjAwMDY2QjFGRTJFQkY1MjM1MUQyMzFENUZGNzMxN0MzMEFDNkQKLToxMDlFMzAwMDAzNjQ2RkNBRTUxMDBDRDdDQ0VDOUJGMDk5RDEyNEQyMDcKLToxMDlFNDAwMEVCNThFOEM0OTExODdFOUY1M0FBODBERjlDQzFGMzcxNDAKLToxMDlFNTAwMDlGQjgxRkMxNTQyRTI1NzkxMEYyMTFBREM3QjM4NENGMUUKLToxMDlFNjAwMEQ0NkY1MTU1RjA2RDcwMUJFMjBGRjFCMTk5MDYxMDRGOTAKLToxMDlFNzAwMEQyRDBCRkYzRjc0NzlBODVCRUZCQUUxREZCODhGODg1QUQKLToxMDlFODAwMEY0MTNFM0NGMDI5REY0OTM2RTAyRUI0REQ5NzA3RTQzNDEKLToxMDlFOTAwMDc2RjFFNDkwREYyMDNFODVFNEE4MTVDMDdEQjZCOEZCREUKLToxMDlFQTAwMDZDMTlGMjdGMjAxNUE0REQzM0UxODc5NEE3OUYyQjY5RkQKLToxMDlFQjAwMEJENURDOEZDNkM0QTEwQTgzQkZGNzUxN0NBRkZEMDVCOUMKLToxMDlFQzAwMDRDQ0M3NjRFQkU2RDdDNjY2NUUxRTQ5MkQ5RTc2OTI0QTAKLToxMDlFRDAwMDFGNzNEM0Q3MDkzQTY5MTFFNEE3MjA4REJGQzRFM0U3MDQKLToxMDlFRTAwMDgyRTNFQjNEOUMyMTY3MUUxQzVGRDQ2NjM4QkVERUEzNzcKLToxMDlFRjAwMDQyREVDODZFMjEzRDZGNDNCQjM1OENGOEZFNDc0QkQ3MjEKLToxMDlGMDAwMDA0NUY0RUZEMjdEOUYzOUJFMzA1MjZEOTczNDYxMUNFOTYKLToxMDlGMTAwMEJCMjUyOThEMEQyMzNGREUwQTcxOERGODU0ODI4NTBFRjUKLToxMDlGMjAwMEQxNkZCMzIzOTlDMzM4QTU3MkQ3RDYwMkY2MTdBMDQ1Q0YKLToxMDlGMzAwMDI3RkM0OEE5NkI5NTUzOEIzRjA1MUU1RDNDNkQ0RUZEN0MKLToxMDlGNDAwMDhGQ0YwODExNUU0M0YwQTEzNzVFMzkzM0ZFQzc4RDBCMEEKLToxMDlGNTAwMDhFRDUxQUE0QjQ4M0Q1NDRERjdDOTdCRUE4ODk5Q0Q3M0MKLToxMDlGNjAwMEYwOUNCRTRGMEE2MTU4NDdFRUNGRkZDNjFCQUJGMDdDOUEKLToxMDlGNzAwMDAzQkY1MDRDQTU4MkU2Njk2MDIxQkMzOTIwRUM3ODNFRDUKLToxMDlGODAwMEM5RTkwMkUyOTdGMUQ0MURDNDZGQkQ4NTNBRERENzlCQzQKLToxMDlGOTAwMDA3RUUzQzA3NjIxNkREMzMxRkY1MDBDMTk1RjM3NzMzRkEKLToxMDlGQTAwMDdGRTYxNzY4ODZDMkNDOEYxQTI3RkQxRTAxRTRCQjEyMUMKLToxMDlGQjAwMDQ2MzVGRjE1NkJBOTE0Qzk1NzcxNTNDMERDOTEwOTVGNzEKLToxMDlGQzAwMDNBNDVFQjExMjY5NEI4Rjc5MENFREM3RjI5RjUwMzNDOTcKLToxMDlGRDAwMEQ0NzhDQUREQ0YwQUE0RUQ5N0Q1Rjc0NUQzRkEyMEM2QzkKLToxMDlGRTAwMDlERjRGOUE2MDZBOTM0QkM5RTk2MTc1N0NFQkM3MzA3RkMKLToxMDlGRjAwMDgzNUFBNkJDNjRBREYzRThCMUM0MjdGODYzNUUxOThDM0MKLToxMEEwMDAwMEVEQzBGMzBFMEQxRDZDMjQ3RDMzNUEwQzg2MUY4NzA2QTAKLToxMEEwMTAwMDM3N0Y0NzAyOUNERjQ0QkE5OEVDNEYwQjhDRjkyNURBNjYKLToxMEEwMjAwMEM3MThBRUM2QkVBRjJDQzhGQzczQzk2RkVERDQxRDA4RUYKLToxMEEwMzAwMEU3MEJGNTdFREQ0MDlDQ0NGQkJEQTUzN0UyRjg2RDY1RjYKLToxMEEwNDAwMDAxRDM0MkZBMjZEQ0Y5NEUwQkZBNTk2MkZCNUY5MTVGQUQKLToxMEEwNTAwMDdBQUI3QjVFQTYwNUNBRTFCREVEQzJDRjUyQzM1RDNCQzQKLToxMEEwNjAwMDVGQzNGOUZCRTYyOUEwOTA1RTUzMzY5QTY0OUY2RTU1NTQKLToxMEEwNzAwMDAxRTYxNjYxN0ZCRjhGRkQzRUY0RUZGODNFRkU5NjRDODEKLToxMEEwODAwMEJGRUZCNjQ3N0MxOTdENUY5NjlGRjhGNTc2RjQwMzg5OUMKLToxMEEwOTAwMDY4QUUxRjM4RDAwRUJDMkY5RDY3RUU4QUJGMUYzRTA0RUUKLToxMEEwQTAwMDIzQUMzRjk3QUExM0IyOUVDM0FFN0FGODk3OUUwOTMyQUIKLToxMEEwQjAwMEZFN0Y1MjhDNzhBNTc1NjA1Qjc3NjJERjhGNzgyNDdFOTcKLToxMEEwQzAwMDQ1NDU1RDUwOEI3OEIyRTg5RjA2RjlDOTNGQkE4QkU2RUIKLToxMEEwRDAwMEZCNEYyMkZGRDI3QzI1RDg3MjI3RDFFMTUyMTc0RjIwQTcKLToxMEEwRTAwMENFNjVFMTdGNzRFRTZDN0ZEODlGRTUwRjY3OUZEQkEzQTEKLToxMEEwRjAwMEMzNjMxRTdFRUFBMDhFRjA4M0ZFMzlGQjA3REVCREIyOEQKLToxMEExMDAwMEVGRjM0MjFGNkEwRUU0QTU5RkY2MDVCODRERjVFOURDQjIKLToxMEExMTAwMDFFRTk4QjcyN0JCNENGODAxNjc0QUM1RUVBQUJFNkY2QjgKLToxMEExMjAwMEU1M0U5M0JGQkZEQTU3Q0ZBRDg3OEZEOUY0NERBODU4MUUKLToxMEExMzAwMDY2N0Y2MURGQkRGMjE4MDk5M0JBNDQ3RkU1MEFFMkRCNkUKLToxMEExNDAwMEI3MTQ1NjFGM0ExODc5RUEwMkI2NDNBMEUyQkNDQjVBQkMKLToxMEExNTAwMEQ1MzE4QkVFRTJDNjNGOTdCODdDQjZEODNGNzVEODhGMjUKLToxMEExNjAwMEVCOTJBNTYwREU0NzBCRDE2RTZGQUQ5OTg5N0ZBRTlCRjgKLToxMEExNzAwMDkyNjdFNDA0MjhERTk5MzM2MzY3ODBFMjlEQjkxOUZEOTQKLToxMEExODAwMEU2QzBBNTE5RjM1N0VCMEIzMkM2M0RGQTNFRDYyOEU0REMKLToxMEExOTAwMDY2NkQ3NDcxQzZGQzdEMkQ0REE5MkY5MDVGREZFMEQ3RjEKLToxMEExQTAwMDE1OURFMjlGQUIzM0M2NkZBOEJFMzYwMzFFMjhFQjRDNEQKLToxMEExQjAwMEQyRDM0NTFCRDNFOEM2RjdDRkE0QUJCNkVERUM3MTkwNzQKLToxMEExQzAwMDQ3RTdGN0RBMzNFM0ExRDlFODlCQ0RCNzFFNUU4QjRFQTQKLToxMEExRDAwMEUzNTVDNDk1MDk4QTJCMERCQUY3MTI2OTBCODJEQTczMUQKLToxMEExRTAwMERBMkZCMUMwMEVDREVDQUJENjYzN0NCOUVDRTJDNzk3RTkKLToxMEExRjAwMDA1MTQ1RjU2RTQ4QTJGM0ZEMjg5N0ZDRjE5NUZCNjY2NzgKLToxMEEyMDAwMEM2OTcwNTU5NzgzQjU3N0NBOTc1NjRFQTk1RjNDNUU3NkQKLToxMEEyMTAwMEU2RjJGODFCQjUxNEVGQkRBRUIwMUZBOEI0QzZEOUZFNjgKLToxMEEyMjAwMENEOUQ1MENDQjUwOEI3RDhGNUM3NDIyNEYzMzg2RjczMkQKLToxMEEyMzAwMEFEQzZGRUU1M0U5ODhDOTJERERGMkIyMTU2OTFGRkU3RkYKLToxMEEyNDAwMDJFMzE0QjQ5REYzQzFEQjY0QTZFQTIzOEJGNEQzNjBGNEEKLToxMEEyNTAwMEUyOTIxNzFCQkYxOTI1QkY2M0Q3OEVDN0EzNjg5NDYwMEUKLToxMEEyNjAwMDUxODdDQ0ZCMjYxQjRGNkMyMkI5NTIwREY0RTMyNDZFQjAKLToxMEEyNzAwMEFEQjExQ0ZFODkzN0ZGQUIwMzNFQjYwMzdCMzc2OTYzODQKLToxMEEyODAwMDEyQ0VERjFCRDJCQjM3NTBERkREMDcxMUMyRjY3NkI0MkEKLToxMEEyOTAwMEY2RjIzMUYyRkZBRUVDMzAwNEJGODAxMzI1RkEzRkI4N0UKLToxMEEyQTAwMEE5QUU5NDhEOTQ4QUZEQTUzNERENjQzQjNFMUMzMkFEOEQKLToxMEEyQjAwMDVCODg3RjdFMTMwNDA3M0YzRDIwRTkwNTEyRDk4QjRENTMKLToxMEEyQzAwMEIyRkUyNERFNzNCNDc1QzVCQjVCQjFCRjJCQTg5OTI0NjUKLToxMEEyRDAwMEYwODk3MDVEMjlGMTk3QjIxOUREMUVFQzhGQjQ4RUJDNDgKLToxMEEyRTAwMDRDRUJENTJBOTlGQjg5NEQ5NzFGMjNGNzc5QjQ1ODZGMEEKLToxMEEyRjAwMEFCQTQzODZGNzUyNTYxMUE5NDQzOUZGNDUxNUUyMzExMDYKLToxMEEzMDAwMDNFMTFBNUY1RkRENzg4RjVCM0QxNDdEMUQzRUMzOTcwMEYKLToxMEEzMTAwMEZFODJDRkFCMkM5NDUzMUFDMjUxNUUzOEYxNTc4MkE3RkMKLToxMEEzMjAwMEE0REI3MUQ2RTM5OTdFQzU3MDU4QTMyMDAxRDZGRjdDQ0IKLToxMEEzMzAwMEUxRjcxQzk1NTRCOTY1MTExRDQ3NTFFNjA5NEY5QjM3NEMKLToxMEEzNDAwMDc1MTQ1MjNDQjVEOTM3NTk5Q0NCNUUwQ0EwN0U0RDVEM0YKLToxMEEzNTAwMDkxRTY2RjQ2MzJGRDg0NkNGOEZDNTc0N0Y4QzUzRjU5Q0IKLToxMEEzNjAwMDc0OEQxMjM3NzRDMUJGQzQ4RDZCQzY1Mjg0Mzc0OEI2MjIKLToxMEEzNzAwMDU2NTJEQzFCMTQ3Njc5MzYzQ0E4QzE0QzNDNzhGMDE5NTcKLToxMEEzODAwMDFFRkU0RkU5Q0RCM0YyRDJGMDgwRDc0QTkxQkY3MzQ3OUEKLToxMEEzOTAwMDg3QzRGNEZGMjJGMTQxQUQzODA2QzUxRERFQjlENDU2OUQKLToxMEEzQTAwMDk5RDc3OUZBMDFGOTc4QzMzOEYxODc4QkY3Mjg5QTBDOTUKLToxMEEzQjAwMDkyNDNFRjFDNUY3NUUxREQ3MzlBQUY3MDZBNDlEQTM5MzkKLToxMEEzQzAwMDU2NkEyRTNDOTNFM0UyQUIzNDIxNTdGMDJCQzU3Q0QyODYKLToxMEEzRDAwMEM4NDEyN0Q3N0ZFM0Y1MTUzM0UzQUE3QkZFMkIwRTY4MzAKLToxMEEzRTAwMDE5RkE3Nzg4RjZDNzdCQkNCREIxRjNBQ0YxRjJBMkIxMjQKLToxMEEzRjAwMENDNzVERkU5MDAzRUVGOTU4QTc1RTQwNEY5NTI1N0M4NDEKLToxMEE0MDAwMDYzNEYyMkE4QzU1N0M4MkNDRjI3RDFGRjIyQkIzNjFCQ0MKLToxMEE0MTAwMDNDOEZGRTJDNjIyNUNDNUQ0MDdFRDlDRTQ4MDdGM0Y5RjcKLToxMEE0MjAwMDZDRUJCNEIxMDlBQjYyMTlFRDBCRjE3MUU0QUY0NUQxM0UKLToxMEE0MzAwMENDNzM3OUYzQkU3M0ZBNUU1RjgxMzk3NDFFNzRDOEM5MzgKLToxMEE0NDAwMDFFRjlDNzUyMTZFOTY5M0ZDMjkxQjBBRDdFRkM2RUZEQTAKLToxMEE0NTAwMDZDRjdGNjQzMUE3Q0M0RTc0NzkyRDA1NzRFMThGOEJFMDMKLToxMEE0NjAwMDg5NzdDNzU4N0VFMEQwRDQ4NzI0REY4OTQ1MjVDNjMwNTgKLToxMEE0NzAwMENCMEI0NDE3RDY5MTNGMjJFRUU1Q0JBMkQzNzA5RTgwNDIKLToxMEE0ODAwMDMzQjI1Q0Y4QTkyMzZFREY1OTJBRTA0MkJBOUNFMkZBQTMKLToxMEE0OTAwMDNDMzdBRkYyNDJDNzAyQzZCQjQ2N0E4Njg4QUM1QUU1NjMKLToxMEE0QTAwMEM0MTc0MUY1ODc4RThFRkMzMDI3QjgwRkMyRDhGQTIzMjcKLToxMEE0QjAwMDVCMUM2QTU3OTUxQjdCRUFGMTVDMjM4QjY0QjY2MzIzQjQKLToxMEE0QzAwMEExRDhFMzAzQTQ4NzE2MDU3M0NBQzc2QkFFNUUxQzIyMkUKLToxMEE0RDAwMEJFRTVGODA5MkM5OUU0NEVGMjg0MDQ2MjMyRDI2Qjk0MDIKLToxMEE0RTAwMDM5MUZFMEZEOEVCMEM4NjdFOUM5RkE5QjExOEY2RkJCQjkKLToxMEE0RjAwMDdDODFGN0UxRjVEOUYwREYzRDEzRkUxM0M0QUYwOTE3RjYKLToxMEE1MDAwMDM4QzFEOTgyNzA3RUVEQ0EwNTkwNDEyOTcxRTMzRURDRTUKLToxMEE1MTAwMDJGNjAyNEVCQzk1Rjk4RUNEMEM1QjhCQURDQTRGQjhGRTAKLToxMEE1MjAwMDg0NzNFRjM3RTlFRTY3Qzk3MTg5RTY1REIyNTFBQzg3OTQKLToxMEE1MzAwMDgwNThCNzU3OUFEQTcwNUNEMDkzRTU4OUY2QTdGMTdDMUEKLToxMEE1NDAwMDMzNTMzRjY0QzNDREFCQ0VENDU3NUE1OUU2RkNGRjc1QTUKLToxMEE1NTAwMEY5MkYzQjFFN0E0MENBN0RDRUMyNEU3MURGNTVFNUMwNTEKLToxMEE1NjAwMEY2ODhGOEUyQkUxQzdDOTEyREVGMUFFNTNGMTFFRURGNzQKLToxMEE1NzAwMDg4MEVCQzlGRDAzQjQxNzVBMjI5QkY4NkVDM0I5OEZENUQKLToxMEE1ODAwMDhDRDhDMzdDREZGQkYyNkZFNDM4NzlFMDA2OTFFN0QwMkEKLToxMEE1OTAwMDU0QTFCN0NCMzYyMDE4QjRDN0Y2NEY1QTFDRUEyQjc3MTQKLToxMEE1QTAwMDgzRUUwRjlGODk4NzRGMUJFRjkxQkQ3MUQyRDY4NzNCRkEKLToxMEE1QjAwMDgxQ0ZBOUE0Qzc4MTc4OEZBNENGQjg5MUY2NERFRTUyNzAKLToxMEE1QzAwMDgwRkM4MEU0NzZGRjg2NUM3NkJCQjhDM0U3RTk1RDhFRUQKLToxMEE1RDAwMDZCNTU5NzJGQzBBQzAwMTlENzFGNzg0QkUxQkNDMDgxRDkKLToxMEE1RTAwMEZBOUQxQzE3Mjc2Q0NEOTAyQTI4NEZGMTA4NkNDN0YxRjMKLToxMEE1RjAwMDNGNUEzMkZCQURCRDg3RUVGREY1QUJCOEVDNzg0QjY1NEQKLToxMEE2MDAwMDlEMjRCMzFDQzFBRDM4RkYzOEM2QzVFNDM3OTNGQzY1NDMKLToxMEE2MTAwMEU0NjMxMEIxODFCQTk5RkQ5MjJEOTVCQzVGMDJGNzkzNjYKLToxMEE2MjAwMENFQTJFNzU0MUJFM0Q2NjU2N0MyM0I2RDhGQjNGMjIzMUUKLToxMEE2MzAwMDAzMjVCMURBNEVCQ0RGQkVBMEE4QjMyODVFN0VBNDJCRjIKLToxMEE2NDAwMDcyNUU3OTFEMDM5MkE5NUVEMjJCMUI4MUYxMTA2QTFCRTkKLToxMEE2NTAwMDgxRUQ5NDRGODg4QTM4RTM0OEFENUZGMEQ3NzZDOThEOTUKLToxMEE2NjAwMENGQTAwNTNDM0Q4NTdGRUIzNjFBMEZDRjI1RkJGMjhFNDAKLToxMEE2NzAwMDFGQUE3MEJDRTlBOUQ3NTVFQThGOTRDQTc1MTQzRjVGMjkKLToxMEE2ODAwMEE1NERERTdGMTU4REQ3Rjk1ODdGMzQyMjI1NTMxOUZDNEYKLToxMEE2OTAwMDkxRjJDQjUxM0U4RkU2QjY4QTY4NTMxMkI1Q0Q4MUZDNUMKLToxMEE2QTAwMDBDN0RCRDVBQ0Y4QzNGRjY0QzFGNTEwQTg5M0Y3NTMwNDcKLToxMEE2QjAwMDI1QzRGMzlFNDZEMzJBMjRERDYzNEVGNkQzRjczREFCODMKLToxMEE2QzAwMDBENzNEODIwN0YzODMzNEVEOUQzQTYwOTdENUEyMUVDOUIKLToxMEE2RDAwMENFQzg2MUUzNjFGMkFGMDY3QkYzRDhGRjdDQTA0QzE2RDUKLToxMEE2RTAwMEY3NUUwODYzQzQwRjZENDY2NjVDMzMzMjVFQjk2QjIxNUEKLToxMEE2RjAwMEM5NTlEMkM3RjlGMkVGOEY4QkY5NUI3NzJDMUZBM0I4M0EKLToxMEE3MDAwMDU0NzdGREQ1QURBNTRERUM4N0MyODA5ODc3NDNGNUUyMkYKLToxMEE3MTAwMEFDRkI0RkU4QzQxN0M5RUQzRTIwRkMwRjk2REQzQzQ0NkUKLToxMEE3MjAwMEY5RDAwRjEyQkVBQjQ5NUM1RUVEMzQzMkUyQzIyRDAzQUMKLToxMEE3MzAwMEI3NzI5RDY4NDA4MzlCRThGQzdCMzY2OUNDRkY3QjhBQkYKLToxMEE3NDAwMDNGMzg3MDBCRTlFOUUyMzk4Q0U3RDE0RDVBNjkyQzRENUQKLToxMEE3NTAwMDFFRkVENkU5NjczOTE4REQyNEZDOEI2MjE5NjJFMzM5RTUKLToxMEE3NjAwMEM2RkZENjI5RjREMEU3NkUwN0JFNEYwMURBNjUwMzNGNzYKLToxMEE3NzAwMDE5NkEzQ0U1Mjc3Qzk0MDFGQzMzNUQyN0ZBRDE0MzdDQzAKLToxMEE3ODAwMEZGNTYxOUFBRjA4ODIzOTE4REVDQkY2NUYzNTlCMEFCNDEKLToxMEE3OTAwMDhBRTE5REI2OEZGNTcyMDYxRTdEN0UzQkNFNzlFRTFCNUIKLToxMEE3QTAwMEMwMjA3REQ1RDI4QTdEOEFFRjM3NkE0MEZDRTY4RkRFRjUKLToxMEE3QjAwMENERjcyQ0MyN0UxRUY2MDNBRDQ5NDdDNTdFNjA2MUVDMjUKLToxMEE3QzAwMDZBRjI1QjVGRENERTMzNDQ3OTE2N0Y0NEQ2ODlERkZDQjYKLToxMEE3RDAwMDFCNkZCMzNCNjk3RThEMEZGMjcwN0MwMDBDMjk0QUU3M0EKLToxMEE3RTAwMDc0MjQyMDdENkQ0MEFDOTVGQ0Y1OTFBOEFDNTNERTY2RDkKLToxMEE3RjAwMDVENjJGRDM2REE3RjVENjQwRTEwOUQzN0I3QzlCQ0RGNDAKLToxMEE4MDAwMDQ5NEJFM0E0NTUzMTM5MUE5NEZGMkEwOUIyREQ3RERGQTMKLToxMEE4MTAwMDE3N0ZCODA3RTdCRjhGRjQ3MjYwRTY1RTg3M0EyQkY5QkYKLToxMEE4MjAwMDlFNzk0NjY2RkMxQzgwMjREQkUxOTVENkM0NDZEQTY3MzcKLToxMEE4MzAwMDY1QkQ0NjE1MEQzOEQyNzBFMjAwRjlFQkEzQjU3RUQzQTUKLToxMEE4NDAwMDhGRTcxQTZEOTAxOERGMUZEN0ZBQzZGMEE4RjA1MzZEODYKLToxMEE4NTAwMDQyQTE3RDdGRkEzMUYyNDY0NTJFRjkzREJCREM2NENGNDMKLToxMEE4NjAwMERGNTNERjExMjA3RUQ4MDkxMzVEODQxRjY3NUE2NkZCMTIKLToxMEE4NzAwMDk1M0RBRkExNEJEMDdGMjdFMjg1RjBFQ0UwNzlBQjI4ODYKLToxMEE4ODAwMDJFOUE0MkI5NDJFOEUxNjlGQkJCQjc2MEZCQTU0RTk1NDEKLToxMEE4OTAwMEU3N0RCNTU0NzZBODJFMzREOEE2QjE5QzBDODY2MjQzQzkKLToxMEE4QTAwMDE1RDQ0NzdFRTc3ODI4MTI2MzdFMUUyOThEQjAxQzdBNjYKLToxMEE4QjAwMEZCOEMzNDc0NTcxM0JGQkM1MTlCQzc3RUZCOTczQjRGMzcKLToxMEE4QzAwMERDRUUyQzQ0RkRBMUZDRkU1RjlGQTFGOEE5NEM2MzdBNEQKLToxMEE4RDAwMDBFRkFFQ0Q0QUJDNEQ3NkRDMjVGM0MzQUZGMUU5NkJCRjgKLToxMEE4RTAwMDgxOEQzNzAzRTEwRDlDRjgzQjU0QjcxQUE4Njk2MEY4RDUKLToxMEE4RjAwMDVFQkU2MTY0QkVDODI3MEQ0NEVFNzIyOEJGOTFBQTE3RTAKLToxMEE5MDAwMEY5MDVBQkY4MjBFN0YzQkNCQzUyQTNBQkM3MTZGQkUzRDkKLToxMEE5MTAwMEFGNTREMUJBREI1NTUxMTc1NkNBMTJBNDBGRkM5NDU3NDUKLToxMEE5MjAwMEEyNzU2QTY2QkVFQkJBQTlDQzM4Nzg1RTU2MUM5QzlEQUYKLToxMEE5MzAwMDY3ODJDMEM0QzI0RUI0QTdCRkVCQ0NDQzJCRDExNTU4OTQKLToxMEE5NDAwMDhFNkJGQzFDMkY4RUQ2OEIzODI4RTk4Qjk3RUE0QkNFNkEKLToxMEE5NTAwMDk0RTMzNzVEM0Y3OEEyMkY4MDFDMDBGMEYzM0U5REZCMEYKLToxMEE5NjAwMDA1RDYxRjc2Q0M0NTUwNkZGNTQ1RjlGQkU3NTczRTJFQ0YKLToxMEE5NzAwMEE1QUZEQjUzQjMzRTYwQjBERTk4OEMxMkRDNkM3RDkxRUEKLToxMEE5ODAwMENEMDdCRDlENzM5OEJFMThBNzAxRDE3N0NGMTQzMDdFMzcKLToxMEE5OTAwMDQzMEQyQjUyQzRBNzI3RkYwNDFDODc3RUI2NjUyMjA4RUYKLToxMEE5QTAwMDk1NjdBRTRGRDEzOUZEOTRGRjEyRTczQzRBRTdGNDUzNjcKLToxMEE5QjAwMEZFNEI5Q0VGRTUzRTgzREI1N0ZCQUFCOTVERDMwNTIyMzYKLToxMEE5QzAwMENGRUZFOTgzQ0I1MDFGMjBERTVBQ0E0NDlGRTQ5RkVDQUYKLToxMEE5RDAwMDcwNTFFNDY2OUJGOENCMUY1NTc1OTJFRjQwNTkzMjI1QjQKLToxMEE5RTAwMEE1RTk4M0QxNTBGQzVEQjJDQjgzQzU0MUU2QkZFQzczRDIKLToxMEE5RjAwMDVEREUyNUJCNzYyRjdFMTNDMUREODM3MDA5RUYyRjZFRTAKLToxMEFBMDAwMEZGRUY4NzE2RDAzRTZGMjlDQzU3NDUxQkJCQjdCMURFOTEKLToxMEFBMTAwMDQxQkQ5MEM3RkU4NkQwODdDOUUyMjBFNzFENDZCNzU3RTMKLToxMEFBMjAwMDQ5NTFFQzZGREUyMTFDREQ3M0NBM0RFRTMzODZFQjhFOUYKLToxMEFBMzAwMEEwQkVBNkZFMjBDQTM5REQ2N0IwRTE4MzNCNjg5RjhGQzgKLToxMEFBNDAwMEZGMzI4NzJBN0M0OEVGNUZCMURDQkY4MTAxQzhEQzhCMTUKLToxMEFBNTAwMDI4Rjc5RTlDQkRGRThCNDNERjIzMzkzM0MwRUUzOTI0OUIKLToxMEFBNjAwMEVFQ0Y3QTcwMzQzNDkxQTRGQjBGRkU1MjgxNUM3OEJCMzgKLToxMEFBNzAwMDUwQkE4Mjc1N0U3RUM4OTgzQTc1Rjg1NDI0NDdEREQwNjYKLToxMEFBODAwMDEyNzVDM0ZFRjExRjcxREY1OTA3NTA4NUZENDc3RDU2RDIKLToxMEFBOTAwMDgwRjhFMEQxMURGMjU5RUI4NjhGRUUzODdCREQ3MDZDQ0IKLToxMEFBQTAwMEJGMEM3RTdERTYxQzk3QzIyNEU3NTkyOTg0QTczQUUwQjMKLToxMEFBQjAwMDAwMEQ2MTdCNDM1N0VDOTYyRUY2MjM0NTVERDE2OEEwQ0YKLToxMEFBQzAwMDlDMDNGNUY1MzlFNDNGMUZCNUFEQUQzQzFFMjk2MkJCRDMKLToxMEFBRDAwMDFGNTVDNzUzNjREN0EzNTQyRjM3RThGRDgyQzM3NTRGNjIKLToxMEFBRTAwMENBQ0ZEMkZCODVFQ0ZCRjdGQjI2OUJGODdFMzg4NUVBQzQKLToxMEFBRjAwMDk1RDlGNTQ5MjlGODYzNTFERjVGMjBFQTkwNUU3RDcyQjAKLToxMEFCMDAwMDk5MzY3OUYwN0VDMkQzNEQwMUM2NDNGRjczRDdCQzQzNUIKLToxMEFCMTAwMEY1MkZBRjhFMUY3NUVCQzBGQTM2RDA3Nzg4N0JEQ0RCNjQKLToxMEFCMjAwMDQ1NzFEMDBCQTIxRTBBRDdFMDNEOTZEMzI2OTM5NUVEMzIKLToxMEFCMzAwMDRCQjlCRUI5ODNFRTcxQUVGMzlGNkZERDcwOURBQkRGOTUKLToxMEFCNDAwMDkwQjlDNzQ4OUU3RkVERTJEMzlCRjc0RDkyQzc1QUYyNkEKLToxMEFCNTAwMDEzNDVERTFBMEEzNEQ2RjM0RDRGMDU0MTIxN0YzOUE0M0YKLToxMEFCNjAwMDFEMjQzOUQ5MDI5M0FCNDk5RUZBQzNDMjZGNEJFQ0YzNTMKLToxMEFCNzAwMEIxREYzNkRBNjVGMDNFQzU5QUM1RUYxNzhBQkY5NjY3MzIKLToxMEFCODAwMEVFNDAzMDg5QzM3QTAxRTU5MUFFRTlCNDQ2QkJGODFDQ0EKLToxMEFCOTAwMEM5QUUwRTNBQzc5MEMyRkFFRUZEQUFENUZDOEVBOTRERjkKLToxMEFCQTAwMDJBNjQ3OTU0NzVBQjNDNUQ1RjFFRUFDQUZEMUU2OTU1ODcKLToxMEFCQjAwMEY5NTQwN0VGMUY5MjgxRTJBRDQ0OUVGOUIyNDFGOEZFQ0QKLToxMEFCQzAwMDg5Q0E3MERCNDBCQzU3ODJBREJBMzQ4NEY3RUMwRjFFRTMKLToxMEFCRDAwMDY3RkFBQ0FBRjIyRjI3RkQ3NEM4QjVBRjg5NTBFRUI4NUEKLToxMEFCRTAwMEVFNTkxNzFGRkZEMDFFRkIyMUQxRTE3QTk4NkEyNkZEOEUKLToxMEFCRjAwMDg2QTI2RDNBRkNBRTQ1QzQ2Qjg3NDg1RjhBNzhGNzVFRTMKLToxMEFDMDAwMEI5NkUyNkFGRjU5MjJGNzY4OEVFNkI3RDVGRjgxM0ZFNTYKLToxMEFDMTAwMEE4RjBFQjMxNTJFMzdDRDAwN0VERDY3MzA0NzcxREYxMzkKLToxMEFDMjAwMDc5MEQyQjJBNzg3Mjc5MEUzOTc3Q0Y3MTQ3OTdGNTFGRjYKLToxMEFDMzAwMDA0RUY5OEJCREYzMkRERTJCQUVCMzI5MENERkU0ODVBMkEKLToxMEFDNDAwMDVEREQzOEJGQkFCQUE0RkY1OEQ0RDNBRjE1N0MwQzJGNDIKLToxMEFDNTAwMDM4ODIwRjlCNDAyNzc5NDJGRTNCNDZFN0YzREU5NzJDNzQKLToxMEFDNjAwMDdCN0U1QjA1RDc1RDJFQjBCRTlEREY2MUJENERGMDRFOTYKLToxMEFDNzAwMEQ5RjZCQkQ0QkVCRkJEMDcxOERFNzlCRUQ3NTg1NTFFNjYKLToxMEFDODAwMDhGREE0OEE3QzEzQ0UxMzczRkRENjg2RUIwRDNGMjNGQjEKLToxMEFDOTAwMDczRDYwQjdCMzI2N0JEODhDNzE3MjMzQjREODg3NzZGMTAKLToxMEFDQTAwMDZDQzcyRjg3RkEwMEQxMkIxQkZFNDAxRjhDNTMxRDY4RTkKLToxMEFDQjAwMEI2RkRCNTVENzcwNTI4NEZEQzVGRDYxNEEwRjc2ODg5MkYKLToxMEFDQzAwMDYwNTMyMUY1MDdDQkFDMjhFRDNGRDBEN0ZBREM0NzU1RDAKLToxMEFDRDAwMEM0NDc4MkVGOURGOTIyMUY5MTQ0RkRFQ0E0RTU0OTRGNDIKLToxMEFDRTAwMDc1Mjk3Q0FFRTYzMjQ4NTEzRUREMUYxNDdFOTExRkUzOEMKLToxMEFDRjAwMDQ1NjMyOUY5Q0RGNTZDQ0ZGMUZCMzhBNTBFRkNFQjBEQzIKLToxMEFEMDAwMDExNkY1QjI2NTg0MTcyODM0MDIyN0NBMThFM0NCRDlFMTAKLToxMEFEMTAwMDRDNUU3MzU5MUNFODVDQjNDMTUxNUE3MDNEQzVBMzY1QzQKLToxMEFEMjAwMDNBRkIyMTU3QUVENzE5NkVEODkyNjdFMjc4Mzg3RjdDMEMKLToxMEFEMzAwMEVEM0IwN0JFOEFDRTgxMkY2RjlFMjc3N0Q5NzhBQTVDMUMKLToxMEFENDAwMEFGRjBGOTVFMENERkMzRjc4MjRGOUE1OUNFRkNBOEYwNDIKLToxMEFENTAwMEE4OUU1RkJENUVFODE5MjU2ODQxMkNDNEUxQkY0NEY4OTgKLToxMEFENjAwMDQ5RDAwMzlCMjUzM0Y4NDU1RjkxRjFBQkU4NzE1RUU3NkQKLToxMEFENzAwMDJGMzMyMUI2OTRGMEExNEI4NDhGRUNGQjJGN0JGRUJCQ0QKLToxMEFEODAwMDJEODRCNzU3QjYwOEJEQkE0QTc1RjU0NzFDRUY4MkZDNEIKLToxMEFEOTAwMEI5RDNENTZGRTBEQUE1QjYzQzYxNzdENkMxQ0Y4MjIyQjAKLToxMEFEQTAwMEFGMkRGODc0MTlCQUUzODFBMjMzRjVBQkQ3M0VFREU2QzcKLToxMEFEQjAwMDk1QjNCRkZGNkU3RDlFRjA4NzhDNzFENkVGRkRBRDAyMUYKLToxMEFEQzAwMDdFMjgyNEZDRDA4MzQzMkJEODdGNTg1MzVBMzUyNzVERTcKLToxMEFERDAwMDNGNUVFQzNBNjE3NjVERjA1Qzc1QzAxOUJFQjEwMjc0RkQKLToxMEFERTAwMENFM0ZFQTc3MzlFREM2RUNGQzcxM0ZGMThGOEZFNDI2NTgKLToxMEFERjAwMEMwRUQxOUUzRTU3NkQ0MjRCOTlBNkYzOTgwNzREQjE5NzQKLToxMEFFMDAwMDhFNDc4OTdGMDYwRTZGN0Y4N0VBMjRFQUVCOEE0OUZFMjgKLToxMEFFMTAwMEE2QUFEQTQwRjNENjE0Qzc1OTNFRDY5NjU5NDA3NUE1NkUKLToxMEFFMjAwMEZCRkJBQzFGQTZDMzFENkU4RjZENUI0RkVGODRGNDcxRUYKLToxMEFFMzAwMDhCRTAwNDIxRTU5MDNEQkE3RUFFMTVCNzczRDBFMTZFOEMKLToxMEFFNDAwMDU3N0Y3Q0QwNkU3RjY5M0RGMkUxMkFEMjlEMkIwMDdFMzgKLToxMEFFNTAwMDY5NUI3NzUyRkY3Q0Y1RDU5OUYyRDQxQTIwQkQ3RkUxNkEKLToxMEFFNjAwMEYyRDQxMUEwRkIwRDk2RDlGQzRFNkJGMDY3MEE3OTU4MEQKLToxMEFFNzAwMEE3RTcwREJBRjIzNDM4RkYxRTg4QTVDOUQ1RUVGNTU5RkIKLToxMEFFODAwMDdBMjdFMkVBOUQ4OEM1NzIzMUUyRUExOTU1Qjc1OTNFNDAKLToxMEFFOTAwMDdDMjQ0RjRCRDJGNDRDQzREMzMzMTZDQkEzMUFGMUU0MjkKLToxMEFFQTAwMEM5OTUzRjkyQTcyMEJEMEY5RTZBMjYzRjY1MDBDNDNCMEYKLToxMEFFQjAwMEM2NkNGOUZBN0U3QkVDNjFBMkMzNTVDNUZGRDc1OTYxMTgKLToxMEFFQzAwMENDQkNGRjM0MEMyMTRGODM2NTJFQkZDRjdGOTZGOUZGOUEKLToxMEFFRDAwMDI0RjIzRjNEMTZFRTBGNTY2NkYwQkJEN0FFOUM1NjIwQ0YKLToxMEFFRTAwMDg1QTRCODZFNUFFMkY2QjNEM0Y5RENBRTlBQ0VFM0Q2QjcKLToxMEFFRjAwMDlBOUVDQjZERTM3NDk4REJBNkU5NEJCOTZEOUUyRUU1NjcKLToxMEFGMDAwMEI2NjUxQUY5RkU2QUU0RkZFOTBBNkVENzRDMkZFNjc2QjkKLToxMEFGMTAwMEVERjQyMjZFNUJBN0FGRTY3OTZERDNDQkI5QkQ3RUZBQjcKLToxMEFGMjAwMDVBNkU2Rjk4NkUxMEZCNTA0REE4MjgyN0ZGNTMzOUVCQ0YKLToxMEFGMzAwMDIyRjBCRkU5NTA3RDc0RTBGMEVERUYxMDdFN0NCQUM2RTAKLToxMEFGNDAwMDc5OTQ0NEI4OEVFQjNEM0UzNUNFRkM3RkIwNENFOEY3QUIKLToxMEFGNTAwMEI1NDE0MTlGNkNGRUZGQTAzREY2MzJGMTZEMzZGRjgzOTcKLToxMEFGNjAwMDRGQkNEQjUyRTlERDU2MERGQjM5NkYzMjdGOUZFMUVGQkQKLToxMEFGNzAwMEJFRjQxN0NBODNBMkZGNzE4Q0U4NzdBMUY2RkZCNDVGMTUKLToxMEFGODAwMDU5OTJFOTU3MEUxNjY3RkE5NTAzRjMzREJGRDIzRjQ2MzMKLToxMEFGOTAwMDc1QjBBRDkyQzFFRkM0RjIzQjYyMUZGMkZFNjA2RkExQ0IKLToxMEFGQTAwMEYxNTg1NzQwMjc3RjJBMTE1RTEzMEQ2MjdGRjM0RTA1M0IKLToxMEFGQjAwMDI4REY4N0ZFQzU2Rjc4MUVFQTA3QjIxQkU3MkJBRkJGRkQKLToxMEFGQzAwMEI0ODUxQzc4RjM5N0MxNzEzOUZFMjlGQzkzRjdFOTlGOEEKLToxMEFGRDAwMDBENjdDQUZENkNFQjNDQjlCRjFDQUFGMzcyRDlEOTIyMkMKLToxMEFGRTAwMDVGQjM5MDdCNURDODdEQTJDQzFFQTI3QzRCMjI0QkVFNTIKLToxMEFGRjAwMDNEM0I4QTc4Qzg5MEZCRkM2RTU3RUU1RDM5MkU4QTg4RkYKLToxMEIwMDAwMDc3MUY0NTI0RjdDODU3RTE2RUMzQURGRjY0REE1MUQ1MDkKLToxMEIwMTAwMDlERUY2QjE1RjVBREU2ODhEMEFCNkFBQkQwMTdBQTlFNTUKLToxMEIwMjAwMDY5NDc5MTZGOEFCQjczRjgxMzhFMkFGQ0UzQjZBQTdGMzcKLToxMEIwMzAwMDNCNkRDRkM4QUUxNjQ1QzI1MjIxNkVBREZGNjlEMkExOUQKLToxMEIwNDAwMDNDRDY2MTc1MDFDQjc3QjYxQzI1RjQxNUNDRTc4N0Q1QzYKLToxMEIwNTAwMDY2QzgyNUZGRTcyRDQ3NjFDRjhFNTg2QzQ3QjJFNzc5NjgKLToxMEIwNjAwMEYyMzQ3MEI4OERGMUUyRDk5NUMzNzg2RjJCQ0Q5RUFDRDgKLToxMEIwNzAwMEQ1MDUxRUQwOUVBQ0U4Q0U2MTRGNTY5NTVCMzEzQkM3REYKLToxMEIwODAwMDM5OUJCQTg1NUZGQURBNzVCNkYwMTdEMTRGMjQzRjI1QTAKLToxMEIwOTAwMEUxQ0JFRDA3MzQ3NTBCRkZBN0E4RDVGRDdEODUwMUYxNDgKLToxMEIwQTAwMEI5QTgwNzVCNUI1M0NENTRDMzQwNzk2RUEyRkRBRkIzMjMKLToxMEIwQjAwMDI2RkI0OTA2RkI4MzIzMTEzQTNGQ0E2NzMzRDFFMTQyOUQKLToxMEIwQzAwMEU1QjNCQTVERjg4NUQwM0I5N0ZEMTZBRjNEMTdERjdCNDIKLToxMEIwRDAwMEZFOEVDN0ZGRDlGMzlFQUVCMDM2RTRDMkNCMEZCQTQ1QTEKLToxMEIwRTAwMDVDNzM3MEU4RDkwQ0ZFRDhBMzJFQjhERTM0NzJFQTU1MzIKLToxMEIwRjAwMENCQkMyODdBRjVGQ0ZDOEFDMzY4RTc1OEFGQ0VFRTU3ODQKLToxMEIxMDAwMDdDMjUxNzFGQ0NFNjU3N0NBRDVCQzQ5QkU4NTc2QzI3QUEKLToxMEIxMTAwMDNBQUQ1QTIyRkM4QTFGNzRDM0M1RjUxNzFBRUU2MjdDMzkKLToxMEIxMjAwMDVEQThCRjMwRDI3RDc2N0ZFMTQwQjdFNzJGQzQ1OTZGNkQKLToxMEIxMzAwMEY4NURCREYxNjlGRDg1MUNGRUMxQTNDQ0JGMzBBNTUwRjMKLToxMEIxNDAwMEZEMEY1MTZEOEE3Qzg4RDAyM0E4NjcwRUQyMzhDNkYxRDYKLToxMEIxNTAwMEVDMkYxQzBDMEE3RUIxNUMzRDczNDc5N0ZEMDREMTYzNTQKLToxMEIxNjAwMDRGQkRGMDE3MkU5NjFDQTBERkY3MzRDMTNENUY3OTM4MzQKLToxMEIxNzAwMERGNzk1NTRGQUMxQzlBMjQzRjA3NDI0OTdBMzdERDRGOUYKLToxMEIxODAwMEVGOTUyODdFN0MyRjI0REUxMUUwNTEyOEVGRkY0RkNBNzcKLToxMEIxOTAwMDk1MjZEOUI5RDFGQzZGM0M0NkYzN0IxRDE1RThEREUwNUYKLToxMEIxQTAwMEZFM0U5MTdGREVFREU2RkZGNkZCRTJGRjMyODk3MEVFQjgKLToxMEIxQjAwMERGRTFENzBGRTJGODlGRTcxNDM4MzJGMkQ0OUZGM0NBRTkKLToxMEIxQzAwMEM3RTg1REQwMzE1NzBGRjk2MTUzNjEyRUJFOUEzOTlGQTAKLToxMEIxRDAwMDc4OUY0QjRGNTc0RUYxRUYzQUNBNzRDRTkzQkJGODg5MjQKLToxMEIxRTAwMDY4MzYzODA4N0ZFNzdDOTlFQjIzM0JEQkJGNzg4MEU0NDcKLToxMEIxRjAwMEM3NjkxNzc5MkUyRUI0RTI3ODY0NUU1NEU0M0JEMDhEOTMKLToxMEIyMDAwMEE5NEZDQjhCMjhBMDlFQTA3Q0ZDMTBCRDUxNEZBQkJGOUIKLToxMEIyMTAwMDE2REIxODQ3QTdDNTE5MjFEM0NFRTgxQjEwMDMwN0Y3ODMKLToxMEIyMjAwMEQ5MUI5MTM5M0YzRkI4NTJDNDQ1ODNDMTc4NDBDRkExNjMKLToxMEIyMzAwMDVGNzZGNTY1QkU1M0NBNkU5NTQ1NEYyNEU5MkRGMTgzQkYKLToxMEIyNDAwMDUxRDVBNEY0RTg3MDc1NEQxQkU1MzExM0JBNzhCNEE0NTgKLToxMEIyNTAwMDg1NjUzQjU3MUQzQkRDMjNCOUY5Nzg5M0VEQjZGQUI5MDgKLToxMEIyNjAwMDhFQzI1Qzc2QzU2Qjg3RkE0NDlFRDZFQjA3MTY4RTVCNjIKLToxMEIyNzAwMEM0OUY1QTg1NjVGM0VGNzVDMjExQzk0OUNCMkZGRkRFMTQKLToxMEIyODAwMEQ1MTMzQjI1MzNCNTBBOTFCNjMzMjRFQzQ0QzA0ODVBNTQKLToxMEIyOTAwMDMyOUU3N0EwRjgzNkFFNDcwNjBDMDc0RUQwRjc4NTQ5QTgKLToxMEIyQTAwMEY4MTBEQjQ4ODkxNkNCNTk3N0VGMTFGMUNDNEU1RjhDNDMKLToxMEIyQjAwMEY3REI1OUFBNzI5RDcyNjc0NUVFQkNENzVGNURCREFDRTYKLToxMEIyQzAwMDg1OUI2Q0NFRkY4NzU1QUUyNzY3Q0Y5QjcyRjk0OUQzMUMKLToxMEIyRDAwMEFDQThDRUYxRjc2RDA2REQyQjMxMUYzODk3MzlENTczNDkKLToxMEIyRTAwMEU3NTMzQjgyQzQ5RjM2RTc0N0Y2QkI3OTEyNkRERTM2RTMKLToxMEIyRjAwMEM2RkJFRTcyNTVBNzNDREM2QTY1REQwRURBRTc0MTU0MDkKLToxMEIzMDAwMEJCRTQ5RjY0RjM4MTdGN0U0RDFFRDczRkQ3QzlGQzY2QTcKLToxMEIzMTAwMDMzOUIyRkU4RUREQjA0Rjk2OTZBOEFGRDI1MUZCQ0MzNjYKLToxMEIzMjAwMDc5OEJERDM1NDdCODZGQzA4NERCMTdGQ0UyRDU5QjIyRjMKLToxMEIzMzAwMDJFM0Y5RTYxMjc1QzdBMjU0OUFFNzJGMENGRkRFNTEzNjIKLToxMEIzNDAwMDZDQkYxRjY4OThEODQwNzU5QjYwMjQ2MEI2RTIzREY2REMKLToxMEIzNTAwMDJEQjczOUJGQkRCQjU2NjZCRjM1REZGRDNEQ0U4M0VCOTQKLToxMEIzNjAwMDhBQzI4NDk3RERCNTQ3NTgyRjY3OUZDNzc3RTQxNUY2RTMKLToxMEIzNzAwMDNCODI2QThBRjMxN0MxQjI4RjM4OUU3REM4M0RDN0RBMTcKLToxMEIzODAwMDdBMjE0RjA1QTZEMEMzMDU1RDcxRDA3MURGRTJCNzk0NzUKLToxMEIzOTAwMDMxMDNGQkQyQkM5NzFEMUZENTBGNkUxMjZGOEIzNTJENUQKLToxMEIzQTAwMEM1N0U0NjdFRkQxQTg5Q0VGNzY2QTkwMjEyQzE1MDVFOUYKLToxMEIzQjAwMEUwRjdCQTYwMEJGOUY2REU2NTk3NzQ2OTE5RjE3RDE4NEMKLToxMEIzQzAwMEQyRkExNUUyNzcwNEU5RUZBODQwRDk3OEQ2Rjc2NkJEM0UKLToxMEIzRDAwMEVGREQ3RUVDNjgxQUJDOUUxRUY3NURBRjVCNjczQkQ3NjYKLToxMEIzRTAwMEZBM0ZGNzZEM0I3NjE0OTVGRjgzMzU2Nzk3QUJCREFFOUIKLToxMEIzRjAwMERFREJEMzU3Q0Y3NEYyRjhDQkUzQjcwODVENzFDNUVDNTEKLToxMEI0MDAwMEVCRjc4N0M3NzNGQTI1QTMzRDgyQUZDRkE1OEYwQUZDNjAKLToxMEI0MTAwMEUzNkNFN0Y3NUUzNzlFOTE4N0ZDQkFBQjFGQkVERTIzNzUKLToxMEI0MjAwMEU0NDgyRjlGRTJCQ0U1NUVGNzlERDNERTNDRDhGMDZDOEMKLToxMEI0MzAwMDhFN0IzREQ2QTMwOTc5M0FDRENGOUUxRkYwQ0U4NUY5RkMKLToxMEI0NDAwMDAxRjNCQjQ0RkMxMDU5OTE0NzdFMDBFMkYzNjU3QUU3QjMKLToxMEI0NTAwMEY2QTc4ODY2NDA5QTNDMEY4NDMyRkQ1MENGMEZGODZERjYKLToxMEI0NjAwMDhGRjAwMzVFMkNGRTk4RUQ3ODYxMzBDNTc2M0M2ODY2RkYKLToxMEI0NzAwMEU2MDlCMkVEQjhFNjhCNzE1Q0E5OTU2QTlFOUVFMTdBMDkKLToxMEI0ODAwMDU3RjBFRDZGM0NFNTkwM0U0OEVERTJGQTUxM0VGMjZGMjkKLToxMEI0OTAwMDlFNDg4RDNCQjlFODA0NEIzMkRGREQ3Q0IxMDdGODNDQjgKLToxMEI0QTAwMDExMjMzRUQxNDhGNkE1NEJFNTdBQzg3RUY5QkQ0MzFGNkUKLToxMEI0QjAwMDEyQkE5MjcxQjA1REI4QzNDQ0I3QkIyN0Y4RkQ4RUNCODIKLToxMEI0QzAwMEY3RTdBMjI3RkQ3RDUyRTdGRTZFODVERTcxNUNGQjY2MjUKLToxMEI0RDAwMDdEQUVCOEMzNkJFOTdENTVFNjdCRjg0RjI3MTdDRjdCNzAKLToxMEI0RTAwMDcyOTEwNzc5NDIyRUQ2QzkwM0U0MEZBQzkzRjlERDBBQjUKLToxMEI0RjAwMDNERUY1NUVCREM5NDIzRDVGREU5NjQ3NDZGN0ExRjI0OEUKLToxMEI1MDAwMEI5RjVBNDA1MzNGMjAyOUYxN0VGNUU0RTZFMTNFRjY4OTQKLToxMEI1MTAwMEY4Nzc4NjBCRTg3N0ExOTNGQ0ZCQzFDQkU4OTVBQjMyQkIKLToxMEI1MjAwMEEzREY0RTQyOTk0Q0Y1NjJFNzg4MjQ5REY2OTMyRUE1NDEKLToxMEI1MzAwMDI3OEZBNjRDRUIxNjgyQ0Q2REY2QjkyRjg3Mzg3RkFGREIKLToxMEI1NDAwMDg2MjRCNzU3QzIzOEI3NEI2MDgyREI2NTMwQzVBRDA1N0UKLToxMEI1NTAwMDQyNkY5OTQ3NDVERDYzMDU5ODBBN0RBRjAxOUJEQjNBNTEKLToxMEI1NjAwMDg4NzM1QjBGNDk2RUJGNzlFRDk3RkU3MDMzMkVGOUFGOEMKLToxMEI1NzAwMDFFQjcyRTdGMUEyRjAyQUYzOUU0M0I0NThGRkVCREZCNkQKLToxMEI1ODAwMDdCNzg3RUIwQzc2MEI5M0IxN0JEMDdDMjQyREYzNjlCRjAKLToxMEI1OTAwMDEzRUNERjg3ODIzNkVCNjE1RjQ0RjBCNzA3QzczNzRCQTgKLToxMEI1QTAwMEJFRjhFRkY1QTNCMjdGNjdGMkZGMkIyMTM0QzZEMDNGODAKLToxMEI1QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxODAwMDAwMDAwNzMKLToxMEI1QzAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwM0IKLToxMEI1RDAwMDAwMDAwMDI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMzMKLToxMEI1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwM0IKLToxMEI1RjAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwM0IKLToxMEI2MDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKLToxMEI2MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOTAwMDAwMDAwRjEKLToxMEI2MjAwMDAwMDAwMDAwMDAwMDAwMzgwMDAwMDAwMDAwMDAwMDAwRTIKLToxMEI2MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDIKLToxMEI2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKLToxMEI2NTAwMDAwMDAwMDAwMDAwMDAwMEMwMDAwMDAwMDAwMDAwMDAwREUKLToxMEI2NjAwMDAwMDAwMDBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QzgKLToxMEI2NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxODAwMDAwMDAwQjIKLToxMEI2ODAwMDAwMDAwMDAwMDAwMDAwMUMwMDAwMDAwMDAwMDAwMDAwOUUKLToxMEI2OTAwMDAwMDAwMDFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzN0IKLToxMEI2QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQTAwMDAwMDAwNjAKLToxMEI2QjAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwODkKLToxMEI2QzAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNzcKLToxMEI2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwNUEKLToxMEI2RTAwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDAwMDAwMEEKLToxMEI2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNDcKLToxMEI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQjAwMDAwMDAwOEUKLToxMEI3MTAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMjEKLToxMEI3MjAwMDAwMDBDMDAwMDAxMDAwMDAwMDAwMDAwODAwMDBDMDA4NzkKLToxMEI3MzAwMDAwMTAwMDAwMDAwMDAwMDIwMDAwQzAwMDAwMTAwMDAwMjcKLToxMEI3NDAwMDAwMDAwMDEwMDAwMDlGQjAwMDAwMDAwMDAwMDAwMDA4OTIKLToxMEI3NTAwMDAwMDBDMDgwMDAxMDAwMDAwMDAwMDAwNDAwMDBDMDg4NEQKLToxMEI3NjAwMDAwMTAwMDAwMDAwMDAwMDIwMDAwQzA4MDAwMTAwMDAwNzcKLToxMEI3NzAwMDAwMDAwMDEwMDAwMDkxMjAwMDAwMDAwMDAwMDAwMDA4MDAKLToxMEI3ODAwMDAwMDA5MzQwMDAwMTAwMDQwMDAwMDAwMTAwMDA5MzQ4MDUKLToxMEI3OTAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwOTM1MDAwMDAwMDAwQzQKLToxMEI3QTAwMDAwMDAwMDA4MDAwMDkzNTQwMDAwMDAwMDAwMDAwMDAyQTgKLToxMEI3QjAwMDAwMDA5NDE4MDAwMDAwMDAwMDAwMDAwODAwMDA5MzU4RUEKLToxMEI3QzAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwOUFCMDAwNDAwMDAwREYKLToxMEI3RDAwMDAwMDAwMDQwMDAwMDkzOTgwMDA4MDAwMDAwMDAwMDA4RUUKLToxMEI3RTAwMDAwMDA5M0Q4MDAwODAwMDAwMDAwMDAwODAwMDA5NDIwMkEKLToxMEI3RjAwMDAwQzgwMDAwMDAwMDAwOTgwMDAwOTVCMDAwOTgwMDAwMEMKLToxMEI4MDAwMDAwMDAwMDI4MDAwMDk1RjAwMDk4MDAwMDAwMDAwMDI4Q0IKLToxMEI4MTAwMDAwMDBDNDgwMDU0MDAwMzAwMDAwMDU0MDAwMDA5RDIwNkQKLToxMEI4MjAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwOUQyMTAwMDgwMDAwNDkKLToxMEI4MzAwMDAwMDAwMDAxMDAwMDIwMDgwMDEwMDAwMDAwMDAwMDEwQkYKLToxMEI4NDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwODAwMDA5Q0Q4NUMKLToxMEI4NTAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwOUQxODAwMDAwMDAwMjkKLToxMEI4NjAwMDAwMDAwMDAxMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwRDYKLToxMEI4NzAwMDAwMDAwMDA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQkQKLToxMEI4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YyMDAwMDAwMDAwQzkKLToxMEI4OTAwMDAwMDAwMDIwMDAwMENGNDYwMDAwMDAwMDAwMDAwMDAxNzIKLToxMEI4QTAwMDAwMDA2MDAwMDAyMDAwMDAwMDAwMDAyMDAwMDA3MzAwODUKLToxMEI4QjAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwOUZBMDAwMDAwMDAwMzkKLToxMEI4QzAwMDAwMDAwMDAxMDAwMDlGQTgwMDAwMDAwMDAwMDAwMDAxMkYKLToxMEI4RDAwMDAwMDA5RjYwMDAwMDAwMDAwMDAwMDAxMDAwMDA5RjYzNTcKLToxMEI4RTAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwOUY2MTAwMDAwMDAwNTcKLToxMEI4RjAwMDAwMDAwMDAxMDAwMDlGNjYwMDAwMDAwMDAwMDAwMDAxNDEKLToxMEI5MDAwMDAwMDA5RjY3MDAwMDAwMDAwMDAwMDAwMDAwMDA5RjY4MkEKLToxMEI5MTAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwOUY2QzAwMDAwMDAwMTgKLToxMEI5MjAwMDAwMDAwMDA0MDAwMDAwNTIwMDAwMDAwMDAwMDAwMDAwQzEKLToxMEI5MzAwMDAwMDAwMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMDEKLToxMEI5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAwRjIKLToxMEI5NTAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwRTUKLToxMEI5NjAwMDAwMDYwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDA5RjcwQTIKLToxMEI5NzAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwOUY5MDAwMDAwMDAwOTcKLToxMEI5ODAwMDAwMDAwMDA4MDAwMDAwNTMwMDAwMDAwMDAwMDAwMDAwNUMKLToxMEI5OTAwMDAwMDA5Rjk4MDAwMDAwMDAwMDAwMDAwMjAwMDA5RjlDMzMKLToxMEI5QTAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwOUY5RDAwMDAwMDAwNUEKLToxMEI5QjAwMDAwMDAwMDAxMDAwMDAwMDkwMDAwMDAwMDAwMDAwMDAwN0QKLToxMEI5QzAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0MzIKLToxMEI5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwNjYKLToxMEI5RTAwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDAwMDAwMDcKLToxMEI5RjAwMDAwMDAwMDg5MDAwMDAwMDAwMDAwMDAwMDAwMDAxMkM4RTQKLToxMEJBMDAwMDAwODAwMDAwMDAwMDAwODAwMDAwMDAwMTAwMDAwMDAwMzUKLToxMEJBMTAwMDAwMDAwMDAwMDAwMEEwMDAwNzEwMDAwMDAwMDAwNzEwNTgKLToxMEJBMjAwMDAwMDAxQUM4MDAwMDAwMDAwMDAwMDAwODAwMDBBRUMwQkUKLToxMEJBMzAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwQUU0MDAwMDgwMDAwMDAKLToxMEJBNDAwMDAwMDAwMDA4MDAwMEFFODAwMDA4MDAwMDAwMDAwMDA4QjAKLToxMEJBNTAwMDAwMDAyMDA4MDAxMDAwMDAwMDAwMDAxMDAwMDAyMDAwN0UKLToxMEJBNjAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwQTAxMDA3MTAwMDQwQzcKLToxMEJBNzAwMDAwMDAwMDQwMDAwMDFCRjgwMDA4MDAwMDAwMDAwMDAxNkEKLToxMEJBODAwMDAwMDAxQkY5MDAwODAwMDAwMDAwMDAwMTAwMDAxQUQwQUYKLToxMEJBOTAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMUFEODAwMDAwMDAwQjMKLToxMEJBQTAwMDAwMDAwMDAyMDAwMDFBREEwMDAwMDAwMDAwMDAwMDAyOUUKLToxMEJBQjAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRjAwNTcKLToxMEJBQzAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMUI3ODAwMjgwMDAwOUIKLToxMEJBRDAwMDAwMDAwMDA0MDAwMEUwMDAwMDIwMDAwMDAwMDAwMDIwNDIKLToxMEJBRTAwMDAwMDBGMzAwMDAwODAwMDAwMDAwMDAwODAwMDAxQUYwNDkKLToxMEJBRjAwMDAwMDAwMDAwMDAwMDAxMDgwMDAwMUIzNzAwMDAwMDAwRUIKLToxMEJCMDAwMDAwMDAwMDAxMDAwMDFCMEYwMDAwMDAwMDAwMDAwMDAxMDkKLToxMEJCMTAwMDAwMDAxQjcwMDAwMDAwMDAwMDAwMDAwNDAwMDAxQjc0MDcKLToxMEJCMjAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDA1MDAwMDAwMDAwQzEKLToxMEJCMzAwMDAwMDAwMDAwMDAwMDAwMDMwMDAwMDAwMDAwMDAwMDAwMDIKLToxMEJCNDAwMDAwMDAwMDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RUEKLToxMEJCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAwMDAwMDAwREUKLToxMEJCNjAwMDAwMDAwMDAwMDAwMDFCQzgwMDAwMDAwMDAwMDAwMDAxRjEKLToxMEJCNzAwMDAwMDAxQkU4MDAwMDAwMDAwMDAwMDAwODAwMDAwMDUxNjkKLToxMEJCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUJEMDAwMDAwMDAwQ0EKLToxMEJCOTAwMDAwMDAwMDA0MDAwMDFCRDQwMDAwMDAwMDAwMDAwMDA0QUUKLToxMEJCQTAwMDAwMDAxQkQ4MDAwMDAwMDAwMDAwMDAwNDAwMDAxQkRDQTcKLToxMEJCQjAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwQjAwMDAwMTgwMDAwQjUKLToxMEJCQzAwMDAwMDAwMDE4MDAwMEMwMDAwMDQwMDAwMDAwMDAwMDQwMUQKLToxMEJCRDAwMDAwMDBDMDAwMDA0MDAwMDIwMDAwMDAwMTAwMDBDMDAxQTEKLToxMEJCRTAwMDAwNDAwMDAyMDAwMDAwMDAwMDAwRTIwMDAwMjAwMDAwMTEKLToxMEJCRjAwMDAwMDAwMDIwMDAwMEUyMDQwMDAyMDAwODAwMjAwMDAyMTMKLToxMEJDMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMjAwRDIKLToxMEJDMTAwMDAwMDgwMDIwMDAwMDAwMDQwMDAwRjQwMDAwMjgwMDAwREMKLToxMEJDMjAwMDAwMDAwMDI4MDAwMEY1NDAwMDEwMDAwMDAwMDAwMDEwOTcKLToxMEJDMzAwMDAwMDBGNUMwMDAyMDAwMDAwMDAwMDAyMDAwMDBGNUMwNUEKLToxMEJDNDAwMDAwMDIwMDIwMDAwMDAwMDIwMDAwRjMwMDAwMjAwMDAwQkQKLToxMEJDNTAwMDAwMDAwMDIwMDAwMDIwMDgwMDEwMDAwMDAwMDAwMDEwN0MKLToxMEJDNjAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAxMTA4OTMKLToxMEJDNzAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwMTE2ODAwMDgwMDAwMzMKLToxMEJDODAwMDAwMDAwMDA4MDAwMDExQTgwMDA4MDAwMDAwMDAwMDA4RTMKLToxMEJDOTAwMDAwMDAxMjQwMDAwODAwMDAwMDAwMDAwMTAwMDAxMjQxRjYKLToxMEJDQTAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwNDAwMDAwMjAwMDA0MjcKLToxMEJDQjAwMDAwMDAwMDEwMDAwMDU5MDAwMDMwMDAxODAwMDAwMDEwQzMKLToxMEJDQzAwMDAwMDA1OTA4MDAzMDAwMTgwMDAwMDAwMjAwMDA1NzAwNzIKLToxMEJDRDAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwNTcwMTAwMDgwMDAwRkIKLToxMEJDRTAwMDAwMDAwMDAxMDAwMDExRTgwMDAwMDAwMDAwMDAwMDAxNTkKLToxMEJDRjAwMDAwMDAxMUYwMDAwMDAwMDAwMDAwMDAwMTAwMDAxMUY4MzkKLToxMEJEMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMTI0NDAwMDgwMDAwQzUKLToxMEJEMTAwMDAwMDAwMDA0MDAwMDQwMDAwMDIwMDAwMDAwMDAwMDIwOUYKLToxMEJEMjAwMDAwMDA1MzAwMDAxMDAwMDAwMDAwMDAxMDAwMDAxNTM4NTMKLToxMEJEMzAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMzAwMDAwMDAwRkYKLToxMEJENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKLToxMEJENTAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0REUKLToxMEJENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUwODAwMDAwMDAwQjYKLToxMEJENzAwMDAwMDAwMDAxMDAwMDE1MjgwMDAwMDAwMDAwMDAwMDA4N0QKLToxMEJEODAwMDAwMDAwMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MzA4RDgKLToxMEJEOTAwMDAwODAwMDAwMDAwMDAwODAwMDAwMDAwMTAwMDAwMDAwQTIKLToxMEJEQTAwMDAwMDAwMDAwMDAwMDIwMDgwMDEwMDAwMDAwMDAwMDEwNEIKLToxMEJEQjAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwODAwMDA4NDEwQzcKLToxMEJEQzAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwODQ3MDAwMDgwMDAwNjcKLToxMEJERDAwMDAwMDAwMDA4MDAwNjAwMDAwNDYwMDAyODAwMDAwNDYwNjUKLToxMEJERTAwMDAwMDA4NTIwMDAwODAwMDAwMDAwMDAwMTAwMDA4NTIxRkYKLToxMEJERjAwMDAwMDgwMDAwMDAwMDAwMDE4MDAwMDAwMDAwMDAwMDAwQkEKLToxMEJFMDAwMDAwMDAwMDAwMDAwMDg0MDgwMDAwMDAwMDAwMDAwMDAxQTUKLToxMEJFMTAwMDAwMDA4NEY0MDAwODAwMDAwMDAwMDAwMjAwMDA4NEY2MjYKLToxMEJFMjAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwODUwNDAwMTAwMDAwNkYKLToxMEJFMzAwMDAwMDAwMDA0MDAwMDg3NjAwMDAwMDAwMDAwMDAwMDIwRjcKLToxMEJFNDAwMDAwMDA2MDAwMDAyMDAwMDAwMDAwMDAyMDAwMDA3MzAwREYKLToxMEJFNTAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwMDAwMzAwMDAwMDAwQ0YKLToxMEJFNjAwMDAwMDAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAwMDAwQ0QKLToxMEJFNzAwMDAwMDAwMDA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QjUKLToxMEJFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgwODAwMDAwMDAwMjIKLToxMEJFOTAwMDAwMDAwMDAxMDAwMDg4MjgwMDAwMDAwMDAwMDAwMDA4RTkKLToxMEJFQTAwMDAwMDAwMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDA4ODEwQUEKLToxMEJFQjAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwODgxNDAwMDAwMDAwRTIKLToxMEJFQzAwMDAwMDAwMDA0MDAwMDg4MTgwMDAwMDAwMDAwMDAwMDA0Q0EKLToxMEJFRDAwMDAwMDA4ODFDMDAwMDAwMDAwMDAwMDAwODAwMDAzMDAwODYKLToxMEJFRTAwMDAwNDAwMDAwMDAwMDAwMDgwMDAwMzAwODAwNDAwMDAwOTIKLToxMEJFRjAwMDAwMDAwMDI4MDAwMDMzOTAwMUMwMDAxMDAwMDAwMDA4N0UKLToxMEJGMDAwMDAwMDAzMjAwMDAyMDAwMDAwMDAwMDAyMDAwMDAzNzIwNjgKLToxMEJGMTAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMTAyMDA2MjAwMDM4OEIKLToxMEJGMjAwMDAwMDAwMDA4MDAwMEEwMDAwMDAwMDAwMDAwMDAyMDAwNDkKLToxMEJGMzAwMDAwMDAzRUE5MDAwMDAwMDAwMDAwMDAwMTAwMDAzRUM4MTMKLToxMEJGNDAwMDAwMDAwMDAwMDAwMDAwMDI4MDAwMDAwMDAwMDAwMDAwNkYKLToxMEJGNTAwMDAwMDAwMDAwMDAwMDYwMDAwMDIwMDAwMDAwMDAwMDA4NTkKLToxMEJGNjAwMDAwMDA0MDAwMDAwODAwMDAwMDAwMDAwMTAwMDA0MDAxNDcKLToxMEJGNzAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwNDA0MDAwMDgwMDA0MkMKLToxMEJGODAwMDAwMDAwMDAyMDAwMDQwNjAwMDA4MDAwNDAwMDAwMDA0RkYKLToxMEJGOTAwMDAwMDA0MDAwMDAwODAwMDAwMDAwMDAwNDAwMDA0MDA0MTEKLToxMEJGQTAwMDAwMDgwMDAwMDAwMDAwMDQwMDAwNDA0MDAwMDAwMDAwMDUKLToxMEJGQjAwMDAwMDAwMDA4MDAwMDQwNDgwMDAwMDAwMDAwMDAwMDA4RTkKLToxMEJGQzAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAxMDAwMDA1MDQwNTEKLToxMEJGRDAwMDAwMDEwMDA0MDAwMDAwMDEwMDAwNTAwMDAwMDAwMDAwMEIKLToxMEJGRTAwMDAwMDAwMDIwMDAwMDUwMDgwMDEwMDAwMDAwMDAwMDA0QzUKLToxMEJGRjAwMDAwMDA1MDBDMDAxMDAwMDAwMDAwMDAwMTAwMDA1MkM3QkIKLToxMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwNTJDNjAwMDAwMDAwMTcKLToxMEMwMTAwMDAwMDAwMDAxMDAwMDMwMDAwMDMwMDAxODAwMDAwMDA0QTMKLToxMEMwMjAwMDAwMDAzMDA0MDAzMDAwMTgwMDAwMDAwNDAwMDAzMDA4NTgKLToxMEMwMzAwMDAwMzAwMDE4MDAwMDAwMDIwMDAwMzAwQTAwMzAwMDE4MzQKLToxMEMwNDAwMDAwMDAwMDAyMDAwMDMwMEMwMDMwMDAxODAwMDAwMDAxNjkKLToxMEMwNTAwMDAwMDAzMDBEMDAzMDAwMTgwMDAwMDAwMTAwMDAzMDBFMUMKLToxMEMwNjAwMDAwMzAwMDE4MDAwMDAwMDEwMDAwMzAxMDAwMzAwMDE4RkYKLToxMEMwNzAwMDAwMDAwMDA0MDAwMDMwMTQwMDMwMDAxODAwMDAwMDA0MkMKLToxMEMwODAwMDAwMDA1MDAwMDEwMDAwODAwMDA4MDAwNDAwMDA1MDA0N0YKLToxMEMwOTAwMDAxMDAwMDgwMDAwODAwMDQwMDAwMDAwQTAwMDAwMDAwMDkKLToxMEMwQTAwMDAwMDAwMDAwMDAwMDUwNjgwMTAwMDA4MDAwMDAwMDAxNTYKLToxMEMwQjAwMDAwMDA1MDY5MDEwMDAwODAwMDAwMDAwMTAwMDA1MDZDODkKLToxMEMwQzAwMDAxMDAwMDgwMDAwMDAwMDIwMDAwNTA2RTAxMDAwMDgwQUUKLToxMEMwRDAwMDAwMDAwMDAyMDAwMDUwNzAwMTAwMDA4MDAwMDAwMDA0MTkKLToxMEMwRTAwMDAwMDA1MDc0MDEwMDAwODAwMDAwMDAwNDAwMDA1MDY2NTEKLToxMEMwRjAwMDAxMDAwMDgwMDAwMDAwMDIwMDAwNTA2NDAxMDAwMDgwODgKLToxMEMxMDAwMDAwMDAwMDAxMDAwMDUwNjAwMTAwMDA4MDAwMDAwMDAyRkIKLToxMEMxMTAwMDAwMDA1MDYyMDEwMDAwODAwMDAwMDAwMjAwMDA1MDUwNEEKLToxMEMxMjAwMDAxMDAwMDgwMDAwMDAwMDQwMDAwNTA1NDAxMDAwMDgwNjUKLToxMEMxMzAwMDAwMDAwMDA0MDAwMDUwNTgwMTAwMDA4MDAwMDAwMDA0Q0UKLToxMEMxNDAwMDAwMDA1MDVDMDEwMDAwODAwMDAwMDAwNDAwMDA1MDdDRjIKLToxMEMxNTAwMDAxMDAwMDgwMDAwMDAwMDEwMDAwNTA3RDAxMDAwMDgwMEYKLToxMEMxNjAwMDAwMDAwMDAxMDAwMDQwMTgwMDEwMDAwMDAwMDAwMDA0NjIKLToxMEMxNzAwMDAwMDA0MDkwMDAxMDAwMDAwMDAwMDAwNDAwMDA0MDk4MDMKLToxMEMxODAwMDAwMTAwMDAwMDAwMDAwMDQwMDAwNDExMDAwMDAwMDAwNEEKLToxMEMxOTAwMDAwMDAwMDAyMDAwMDQxMTIwMDAwMDAwMDAwMDAwMDAyNDgKLToxMEMxQTAwMDAwMDA0MTE0MDAwMDAwMDAwMDAwMDAwMjAwMDA0MTE2RTEKLToxMEMxQjAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwNjA0MDAwMDgwMDAwRDUKLToxMEMxQzAwMDAwMDAwMDAyMDAwMDYwNDIwMDA4MDAwMDAwMDAwMDAyQzEKLToxMEMxRDAwMDAwMDA2MDQ0MDAwODAwMDAwMDAwMDAwNDAwMDA2MDgwQ0YKLToxMEMxRTAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwNjBDMDAwNDAwMDA4RDcKLToxMEMxRjAwMDAwMDAwMDA4MDAwMDYwMDAwMDA4MDAwMDAwMDAwMDAyQ0QKLToxMEMyMDAwMDAwMDA2MDAyMDAwODAwMDAwMDAwMDAwMTAwMDA2MDA0NUYKLToxMEMyMTAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwNjM0MDAwMDgwMDAwNjkKLToxMEMyMjAwMDAwMDAwMDA4MDAwMDYzODAwMDA4MDAwMDAwMDAwMDA0MTcKLToxMEMyMzAwMDAwMDA2Mzg0MDAwODAwMDAwMDAwMDAwMTAwMDA2M0MwRUIKLToxMEMyNDAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwNjNDNDAwMDgwMDAwQjUKLToxMEMyNTAwMDAwMDAwMDAyMDAwMDY0MDAwMDA4MDAwMDAwMDAwMDA0NkMKLToxMEMyNjAwMDAwMDA3MDAwMDAxMDAwMDAwMDAwMDAwNDAwMDA3MDA0RDYKLToxMEMyNzAwMDAwMTAwMDAwMDAwMDAwMDQwMDAwNzAwODAwMTAwMDAwMjIKLToxMEMyODAwMDAwMDAwMDA0MDAwMDkwMDAwMDA4MDAwMDAwMDAwMDAyMTAKLToxMEMyOTAwMDAwMDA5MDAyMDAwODAwMDAwMDAwMDAwMTAwMDA5MDA0NkYKLToxMEMyQTAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwOTA0MDAwMDgwMDAwQUMKLToxMEMyQjAwMDAwMDAwMDAyMDAwMDkwNDQwMDA4MDAwMDAwMDAwMDAyOUUKLToxMEMyQzAwMDAwMDA5MDQ2MDAwODAwMDAwMDAwMDAwMjAwMDA5NjQ4QjAKLToxMEMyRDAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwOTA4MDAwMDgwMDAwMzYKLToxMEMyRTAwMDAwMDAwMDAyMDAwMDkwODQwMDA4MDAwMDAwMDAwMDAyMkUKLToxMEMyRjAwMDAwMDA5Njg4MDAwODAwMDAwMDAwMDAwODAwMDA4MDQwNTAKLToxMEMzMDAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwODA0MTAwMDgwMDAwNUIKLToxMEMzMTAwMDAwMDAwMDAxMDAwMDgwNDIwMDA4MDAwMDAwMDAwMDAxNTEKLToxMEMzMjAwMDAwMDA4MDQzMDAwODAwMDAwMDAwMDAwMTAwMDA4MDAwQzEKLToxMEMzMzAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwODAwMjAwMDgwMDAwNjkKLToxMEMzNDAwMDAwMDAwMDAxMDAwMDgwMDQwMDA4MDAwMDAwMDAwMDAyNUUKLToxMEMzNTAwMDAwMDA4MEMwMDAwODAwMDAwMDAwMDAwMjAwMDA4MEMyNTEKLToxMEMzNjAwMDAwMDgwMDAwMDAwMDAwMDIwMDAwODBDNDAwMDgwMDAwNzcKLToxMEMzNzAwMDAwMDAwMDAyMDAwMDgwODAwMDA4MDAwMDAwMDAwMDAxQjIKLToxMEMzODAwMDAwMDA4MDgxMDAwODAwMDAwMDAwMDAwMTAwMDA4MDgyQTEKLToxMEMzOTAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwODA4MzAwMDgwMDAwODkKLToxMEMzQTAwMDAwMDAwMDAxMDAwMDgwODQwMDA4MDAwMDAwMDAwMDAxN0YKLToxMEMzQjAwMDAwMDA4MDg1MDAwODAwMDAwMDAwMDAwMTAwMDA4MDg2NjkKLToxMEMzQzAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwNjAwMDAwMDgwMDAwRkMKLToxMEMzRDAwMDAwMDAwMDAyMDAwMDYwMDIwMDA4MDAwMDAwMDAwMDAxRjAKLToxMEMzRTAwMDAwMDA2MDA0MDAwODAwMDAwMDAwMDAwMjAwMDA2MDQyM0QKLToxMEMzRjAwMDAwQzAwMDE4MDAwMDAwMDIwMDAwNjA0MDAwQzAwMDE4RUIKLToxMEM0MDAwMDAwMDAwMDAyMDAwMDYwNEMwMEMwMDAxODAwMDAwMDA4OUUKLToxMEM0MTAwMDAwMDA2MDQ0MDBDMDAwMTgwMDAwMDAwODAwMDA2MDU3RTEKLToxMEM0MjAwMDAwQzAwMDE4MDAwMDAwMDEwMDAwNjA1NDAwQzAwMDE4QTcKLToxMEM0MzAwMDAwMDAwMDAyMDAwMDYwNTYwMEMwMDAxODAwMDAwMDAxNkIKLToxMEM0NDAwMDAwMDA2NjQwMDAwODAwMDAwMDAwMDAwODAwMDA2NjgwNTAKLToxMEM0NTAwMDAwMDgwMDAwMDAwMDAwMDgwMDAwNjZDMDAwMDgwMDAwOUUKLToxMEM0NjAwMDAwMDAwMDA4MDAwMERBNDIwMDE4MDAwMDAwMDAwMDAyOEUKLToxMEM0NzAwMDAwMDBERTQwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMDAwQkUKLToxMEM0ODAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwRDBDMDAwMDAwMDAwMTgKLToxMEM0OTAwMDAwMDAwMDA0MDAwMEQwQzQwMDAwMDAwMDAwMDAwMDA0MDAKLToxMEM0QTAwMDAwMDBEMEM4MDAwMDAwMDAwMDAwMDAwNDAwMDBEMENDNTQKLToxMEM0QjAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwRDBEMDAwMDAwMDAwRDgKLToxMEM0QzAwMDAwMDAwMDA0MDAwMEQwRDQwMDAwMDAwMDAwMDAwMDA0QzAKLToxMEM0RDAwMDAwMDBEMEQ4MDAwMDAwMDAwMDAwMDAwNDAwMDBEMEMwMjAKLToxMEM0RTAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwREIwMDAwMDAwMDAwNTEKLToxMEM0RjAwMDAwMDAwMDA0MDAwMERCMDAwMDAwMDAwMDAwMDAwMDY4RjUKLToxMEM1MDAwMDAwMDBCOTQ4MDAwMDAwMDAwMDAwMDAwMDAwMDBEMDAwNUEKLToxMEM1MTAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwQjBDMDAwMDAwMDAwQTcKLToxMEM1MjAwMDAwMDAwMDA0MDAwMEIwQzQwMDAwMDAwMDAwMDAwMDA0OEYKLToxMEM1MzAwMDAwMDBCMEM4MDAwMDAwMDAwMDAwMDAwNDAwMDBCMEMwMEYKLToxMEM1NDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwRDZCMDAwMDAwMDAwNTUKLToxMEM1NTAwMDAwMDAwMDA0MDAwMEQ2QjQwMDAwMDAwMDAwMDAwMDA0NDkKLToxMEM1NjAwMDAwMDBENkI4MDAwMDAwMDAwMDAwMDAwNDAwMDBENkJDQTcKLToxMEM1NzAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwRDZCMDAwMDAwMDAwMzEKLToxMEM1ODAwMDAwMDAwMDEwMDAwMEQzNDgwMDAwMDAwMDAwMDAwMDA4NzgKLToxMEM1OTAwMDAwMDBEMzU4MDAwMDAwMDAwMDAwMDA4MDAwMDAwMDEwRTAKLToxMEM1QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDM1ODAwMDAwMDAwNjAKLToxMEM1QjAwMDAwMDAwMDA4MDAwMDAwMDAwNjAyMDUwMDAwMDAwMDAwNjYKLTowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9ibngyeC9ibngyeC1lMi02LjIuOS4wLmZ3LmloZXggYi9maXJtd2FyZS9ibngyeC9ibngyeC1lMi02LjIuOS4wLmZ3LmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQwNWU3MQotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL2JueDJ4L2JueDJ4LWUyLTYuMi45LjAuZncuaWhleApAQCAtMCwwICsxLDE1NDczIEBACis6MTAwMDAwMDAwMDAwNTMxMDAwMDAwMDY4MDAwMDA3MEMwMDAwNTM4MDNGCis6MTAwMDEwMDAwMDAwMzE4MDAwMDA1QTkwMDAwMDAwQjAwMDAwOEMxOEYxCis6MTAwMDIwMDAwMDAwQzEzNDAwMDA4Q0QwMDAwMDAwRDgwMDAxNEUwODUwCis6MTAwMDMwMDAwMDAwRjI2NDAwMDE0RUU4MDAwMDAwNzQwMDAyNDE1MDJDCis6MTAwMDQwMDAwMDAwNTI1MDAwMDI0MUM4MDAwMDAwQjQwMDAyOTQyMDk5Cis6MTAwMDUwMDAwMDAxMjFFQzAwMDI5NEQ4MDAwMDBGRkMwMDAzQjZDODk4Cis6MTAwMDYwMDAwMDAwMDAwNDAwMDNDNkM4MDIwNDAwNDgwMDAwMDAwRjlFCis6MTAwMDcwMDAwMjA0MDA1NDAwMDAwMDQ1MDIwNDAwNUMwMDAwMDAwNjc5Cis6MTAwMDgwMDAwMjA0MDA3MDAwMDAwMDA0MDIwNDAwNzgwMDAwMDAwMDc4Cis6MTAwMDkwMDAwMjA0MDA3QzEyMTcwMDAwMDIwNDAwODAyMjE3MDAwMEY2Cis6MTAwMEEwMDAwMjA0MDA4NDMyMTcwMDAwMDYwNDAwODgwMDAwMDAwNUU2Cis6MTAwMEIwMDAwMjA0MDA5QzEyMTUwMDAwMDIwNDAwQTAyMjE1MDAwMDlBCis6MTAwMEMwMDAwMjA0MDBBNDMyMTUwMDAwMDYwNDAwQTgwMDAwMDAwNDg5Cis6MTAwMEQwMDAwMjA0MDBCODAyMTAwMDAwMDIwNDAwQkMwMDEwMDAwMDdFCis6MTAwMEUwMDAwMjA0MDBDMDEwMTAwMDAwMDIwNDAwQzQyMDEwMDAwMDMwCis6MTAwMEYwMDAwMjA0MDBDODMwMTAwMDAwMDIwNDAwQ0M0MDEwMDAwMEQwCis6MTAwMTAwMDAwNjA0MDBEMDAwMDAwMDAzMDIwNDAwREMwMDEwMDAwMDIwCis6MTAwMTEwMDAwMjA0MDBFMDEyMTQwMDAwMDIwNDAwRTQyMjE0MDAwMEIzCis6MTAwMTIwMDAwMjA0MDBFODMyMTQwMDAwMDIwNDAwRUM0MjE0MDAwMDUzCis6MTAwMTMwMDAwNjA0MDBGMDAwMDAwMDAzMDEwNDAxMjQwMDAwMDAwMDk4Cis6MTAwMTQwMDAwMTA0MDEyODAwMDAwMDAwMDEwNDAxMkMwMDAwMDAwMDRGCis6MTAwMTUwMDAwMTA0MDEzMDAwMDAwMDAwMDIwNDAxRDAwMDAwODkwNjAzCis6MTAwMTYwMDAwMjA0MDI1ODAwMDAwMDM2MDIwNDAyNUMwMDAwMDAzNjVGCis6MTAwMTcwMDAwMjA0MDI2MDA4MTAwMDAwMDIwNDAyNjQwODEwMDAwMDdCCis6MTAwMTgwMDAwMjA0MDAwNDAwMDAwMEZGMDIwNDAwMDgwMDAwMDBGRjU5Cis6MTAwMTkwMDAwMjA0MDAwQzAwMDAwMEZGMDIwNDAwMTAwMDAwMDBGRjM5Cis6MTAwMUEwMDAwMjA0MDAxNDAwMDAwMDdGMDIwNDAwMTgwMDAwMDBGRjk5Cis6MTAwMUIwMDAwMjA0MDAxQzAwMDAwMEZGMDIwNDAwMjAwMDAwMDBGRkY5Cis6MTAwMUMwMDAwMjA0MDAyNDAwMDAwMDNFMDIwNDAwMjgwMDAwMDAwMDk5Cis6MTAwMUQwMDAwMjA0MDAyQzAwMDAwMDNGMDIwNDAwMzAwMDAwMDAzRjM5Cis6MTAwMUUwMDAwMjA0MDAzNDAwMDAwMDNGMDIwNDAwMzgwMDAwMDAzRjE5Cis6MTAwMUYwMDAwMjA0MDAzQzAwMDAwMDNGMDIwNDAwNDAwMDAwMDAzRkY5Cis6MTAwMjAwMDAwMjA0MDA0NDAwMDAwMDNGMDIwNDA0Q0MwMDAwMDAwMThFCis6MTAwMjEwMDAwMjA0MjAwODAwMDAwMjExMDIwNDIwMEMwMDAwMDIwMDY5Cis6MTAwMjIwMDAwMjA0MjAxMDAwMDAwMjA0MDIwNDIwMTQwMDAwMDIxOTNECis6MTAwMjMwMDAwMjA0MjAxQzAwMDBGRkZGMDIwNDIwMjAwMDAwRkZGRjNBCis6MTAwMjQwMDAwMjA0MjAyNDAwMDBGRkZGMDIwNDIwMjgwMDAwRkZGRjFBCis6MTAwMjUwMDAwMjA0MjAzODAwMDAwMDIwMDYwNDIwM0MwMDAwMDAwRkFCCis6MTAwMjYwMDAwMjA0MjA3ODAwMDAwMDIxMDYwNDIwN0MwMDAwMDAwRjFBCis6MTAwMjcwMDAwMjA0MjBCODAwMDAwMDAxMDYwNDIwQkMwMDAwMDAwRkFBCis6MTAwMjgwMDAwMjA0MjBGODAwMDAwMDAxMDYwNDIwRkMwMDAwMDAzRkVBCis6MTAwMjkwMDAwMjA0MjFGODAwMDAwMDAxMDYwNDIxRkMwMDAwMDAwRjA4Cis6MTAwMkEwMDAwMjA0MjIzODA3RkZGRkZGMDIwNDIyM0MwMDAwMDA3RjA3Cis6MTAwMkIwMDAwMjA0MjI0MDA3RkZGRkZGMDIwNDIyNDQwMDAwMDAzRjI3Cis6MTAwMkMwMDAwMTA0MjI0ODAwMDAwMDAwMDEwNDIyNEMwMDAwMDAwMDRDCis6MTAwMkQwMDAwMTA0MjI1MDAwMDAwMDAwMDEwNDIyNTQwMDAwMDAwMDJDCis6MTAwMkUwMDAwMTA0MjI1ODAwMDAwMDAwMDEwNDIyNUMwMDAwMDAwMDBDCis6MTAwMkYwMDAwMTA0MjI2MDAwMDAwMDAwMDEwNDIyNjQwMDAwMDAwMEVDCis6MTAwMzAwMDAwMTA0MjI2ODAwMDAwMDAwMDEwNDIyNkMwMDAwMDAwMENCCis6MTAwMzEwMDAwMTA0MjI3MDAwMDAwMDAwMDEwNDIyNzQwMDAwMDAwMEFCCis6MTAwMzIwMDAwMTA0MjI3ODAwMDAwMDAwMDEwNDIyN0MwMDAwMDAwMDhCCis6MTAwMzMwMDAwMjA0MjJDMDAwMDBGRkZGMDIwNDIyQzQwMDAwRkZGRkVECis6MTAwMzQwMDAwMjA0MjJDODAwMDBGRkZGMDIwNDIyQ0MwMDAwRkZGRkNECis6MTAwMzUwMDAwQzA0MjAwMDAwMDAwM0U4MEEwNDIwMDAwMDAwMDAwMTUzCis6MTAwMzYwMDAwQjA0MjAwMDAwMDAwMDAzMDYwNTQwMDAwMDAwMEQwMDAzCis6MTAwMzcwMDAwMjA1MDA0NDAwMDAwMDIwMDIwNTAwNDgwMDAwMDAzMjkxCis6MTAwMzgwMDAwMjA1MDA5MDAyMTUwMDIwMDIwNTAwOTQwMjE1MDAyMENECis6MTAwMzkwMDAwMjA1MDA5ODAwMDAwMDMwMDIwNTAwOUMwODEwMDAwMEQzCis6MTAwM0EwMDAwMjA1MDBBMDAwMDAwMDM2MDIwNTAwQTQwMDAwMDAzMDk1Cis6MTAwM0IwMDAwMjA1MDBBODAwMDAwMDMxMDIwNTAwQjAwMDAwMDAwNEEyCis6MTAwM0MwMDAwMjA1MDBCNDAwMDAwMDA1MDIwNTAwQzAwMDAwMDAwMEE2Cis6MTAwM0QwMDAwMjA1MDBDNDAwMDAwMDA0MDIwNTAwRDQwMDAwMDAwMTcyCis6MTAwM0UwMDAwMjA1MDExNDAwMDAwMDAxMDIwNTAxMUMwMDAwMDAwMUNCCis6MTAwM0YwMDAwMjA1MDEyMDAwMDAwMDAyMDIwNTAyMDQwMDAwMDAwMUM1Cis6MTAwNDAwMDAwMjA1MDIwQzAwMDAwMDQwMDIwNTAyMTAwMDAwMDA0MDNFCis6MTAwNDEwMDAwMjA1MDIxQzAwMDAwMDIwMDIwNTAyMjAwMDAwMDAxQzUyCis6MTAwNDIwMDAwMjA1MDIyNDAwMDAwMDIwMDYwNTAyNDAwMDAwMDAwQTI4Cis6MTAwNDMwMDAwNDA1MDI4MDAwMjAwMDAwMDIwNTAwNTAwMDAwMDAwN0IzCis6MTAwNDQwMDAwMjA1MDA1NDAwMDAwMDA3MDIwNTAwNTgwMDAwMDAwMEVCCis6MTAwNDUwMDAwMjA1MDA1QzAwMDAwMDA4MDIwNTAwNjAwMDAwMDAwMUM5Cis6MTAwNDYwMDAwNjA1MDA2NDAwMDAwMDAzMDIwNTAwRDgwMDAwMDAwNjM1Cis6MTAwNDcwMDAwMjA1MDAwNDAwMDAwMDAxMDIwNTAwMDgwMDAwMDAwMTYwCis6MTAwNDgwMDAwMjA1MDAwQzAwMDAwMDAxMDIwNTAwMTAwMDAwMDAwMTQwCis6MTAwNDkwMDAwMjA1MDAxNDAwMDAwMDAxMDIwNTAwMTgwMDAwMDAwMTIwCis6MTAwNEEwMDAwMjA1MDAxQzAwMDAwMDAxMDIwNTAwMjAwMDAwMDAwMTAwCis6MTAwNEIwMDAwMjA1MDAyNDAwMDAwMDAxMDIwNTAwMjgwMDAwMDAwMUUwCis6MTAwNEMwMDAwMjA1MDAyQzAwMDAwMDAxMDIwNTAwMzAwMDAwMDAwMUMwCis6MTAwNEQwMDAwMjA1MDAzNDAwMDAwMDAxMDIwNTAwMzgwMDAwMDAwMUEwCis6MTAwNEUwMDAwMjA1MDAzQzAwMDAwMDAxMDIwNTAwNDAwMDAwMDAwMTgwCis6MTAwNEYwMDAwMjA1MDBFMDAwMDAwMDBEMDIwNTAwRTgwMDAwMDAwMDE5Cis6MTAwNTAwMDAwMjA1MDBGMDAwMDAwMDAwMDIwNTAwRjgwMDAwMDAwMEY1Cis6MTAwNTEwMDAwMjA1MDBFNDAwMDAwMDJEMDIwNTAwRUMwMDAwMDAyMEIwCis6MTAwNTIwMDAwMjA1MDBGNDAwMDAwMDIwMDIwNTAwRkMwMDAwMDAyMDhECis6MTAwNTMwMDAwMjA1MDBFMDAwMDAwMDFEMDIwNTAwRTgwMDAwMDAxMEI4Cis6MTAwNTQwMDAwMjA1MDBGMDAwMDAwMDEwMDIwNTAwRjgwMDAwMDAxMDk1Cis6MTAwNTUwMDAwMjA1MDBFNDAwMDAwMDNEMDIwNTAwRUMwMDAwMDAzMDUwCis6MTAwNTYwMDAwMjA1MDBGNDAwMDAwMDMwMDIwNTAwRkMwMDAwMDAzMDJECis6MTAwNTcwMDAwMjA1MDBFMDAwMDAwMDREMDIwNTAwRTgwMDAwMDA0MDE4Cis6MTAwNTgwMDAwMjA1MDBGMDAwMDAwMDQwMDIwNTAwRjgwMDAwMDA0MEY1Cis6MTAwNTkwMDAwMjA1MDBFNDAwMDAwMDZEMDIwNTAwRUMwMDAwMDA2MEIwCis6MTAwNUEwMDAwMjA1MDBGNDAwMDAwMDYwMDIwNTAwRkMwMDAwMDA2MDhECis6MTAwNUIwMDAwMjA1MDBFMDAwMDAwMDVEMDIwNTAwRTgwMDAwMDA1MEI4Cis6MTAwNUMwMDAwMjA1MDBGMDAwMDAwMDUwMDIwNTAwRjgwMDAwMDA1MDk1Cis6MTAwNUQwMDAwMjA1MDBFNDAwMDAwMDdEMDIwNTAwRUMwMDAwMDA3MDUwCis6MTAwNUUwMDAwMjA1MDBGNDAwMDAwMDcwMDIwNTAwRkMwMDAwMDA3MDJECis6MTAwNUYwMDAwNDA2MTAwMDAyMDAwMDIwMDIwNjAwREMwMDAwMDAwMURBCis6MTAwNjAwMDAwNDA2MDIwMDAwMDMwMjIwMDIwNjAwREMwMDAwMDAwMEQ1Cis6MTAwNjEwMDAwNzE4MDQwMDAwQUQwMDAwMDgxODA3RDgwMDA1MDIyM0UxCis6MTAwNjIwMDAwNzFDMDAwMDI5OTIwMDAwMDcxQzgwMDAzMTJBMEE2NTdGCis6MTAwNjMwMDAwNzFEMDAwMDM0QTIxNkIwMDcxRDgwMDAyRTdBMjNEOUIyCis6MTAwNjQwMDAwNzFFMDAwMDAzNTAyRjc4MDgxRTA3RjAzRjAyMDIyNTA2Cis6MTAwNjUwMDAwMjE4MDBCQzAwMDAwMDMwMDExODAwMDAwMDAwMDAwMDdCCis6MTAwNjYwMDAwMTE4MDAwNDAwMDAwMDAwMDExODAwMDgwMDAwMDAwMDRDCis6MTAwNjcwMDAwMTE4MDAwQzAwMDAwMDAwMDExODAwMTAwMDAwMDAwMDJDCis6MTAwNjgwMDAwMTE4MDAxNDAwMDAwMDAwMDIxODAwMjAwMDAwMDAwMTAyCis6MTAwNjkwMDAwMjE4MDAyNDAwMDAwMDAyMDIxODAwMjgwMDAwMDAwM0Q1Cis6MTAwNkEwMDAwMjE4MDAyQzAwMDAwMDAwMDIxODAwMzAwMDAwMDAwNEI2Cis6MTAwNkIwMDAwMjE4MDAzNDAwMDAwMDAxMDIxODAwMzgwMDAwMDAwMDk5Cis6MTAwNkMwMDAwMjE4MDAzQzAwMDAwMDAxMDIxODAwNDAwMDAwMDAwNDc1Cis6MTAwNkQwMDAwMjE4MDA0NDAwMDAwMDAwMDIxODAwNDgwMDAwMDAwMTU5Cis6MTAwNkUwMDAwMjE4MDA0QzAwMDAwMDAzMDIxODAwNTAwMDAwMDAwMDM3Cis6MTAwNkYwMDAwMjE4MDA1NDAwMDAwMDAxMDIxODAwNTgwMDAwMDAwNDE1Cis6MTAwNzAwMDAwMjE4MDA1QzAwMDAwMDAwMDIxODAwNjAwMDAwMDAwMUY4Cis6MTAwNzEwMDAwMjE4MDA2NDAwMDAwMDAzMDIxODAwNjgwMDAwMDAwMEQ2Cis6MTAwNzIwMDAwMjE4MDA2QzAwMDAwMDAxMDIxODAwNzAwMDAwMDAwNEI0Cis6MTAwNzMwMDAwMjE4MDA3NDAwMDAwMDAwMDIxODAwNzgwMDAwMDAwNDk1Cis6MTAwNzQwMDAwMjE4MDA3QzAwMDAwMDAzMDYxODAwODAwMDAwMDAwMjcwCis6MTAwNzUwMDAwMjE4MDBBNDAwMDA3RkZGMDIxODAwQTgwMDAwMDNGRjk5Cis6MTAwNzYwMDAwMjE4MDIyNDAwMDAwMDAwMDIxODAyMzQwMDAwMDAwMEY5Cis6MTAwNzcwMDAwMjE4MDI0QzAwMDAwMDAwMDIxODAyRTQwMDAwMDBGRjEyCis6MTAwNzgwMDAwNjE4MTAwMDAwMDAwNDAwMDIxQjhCQzAwMDAwMDAwMUNFCis6MTAwNzkwMDAwMjFCODAwMDAwMDAwMDM0MDIxQjgwNDAwMDAwMDAxODkzCis6MTAwN0EwMDAwMjFCODA4MDAwMDAwMDBDMDIxQjgwQzAwMDAwMDAyMEEzCis6MTAwN0IwMDAwQzFCODMwMDAwMDg2NDcwMEExQjgzMDAwMDAwMDE1N0IzCis6MTAwN0MwMDAwQjFCODMwMDAwMDAwNTVGMEExQjgzNDAwMDAwMDAwMDM0Cis6MTAwN0QwMDAwQzFCODM0MDAwMDAwMjI2MEIxQjgzNDAwMDAwMDAwMTFECis6MTAwN0UwMDAwMjFCODM4MDAwMDg2NDcwMDIxQjgzQzAwMDAwMDIyNjg1Cis6MTAwN0YwMDAwMjFCMTQ4MDAwMDAwMDAxMEExQjE0ODAwMDAwMDAwMDhFCis6MTAwODAwMDAwMjFCOTQ0MDAwMDAwMDAxMDYxQjk0NDgwMDAwMDAwMkY3Cis6MTAwODEwMDAwNjFBMTAwMDAwMDAwMkIzMDQxQTFBQ0MwMDAxMDIyN0M1Cis6MTAwODIwMDAwNjFBMUFEMDAwMDAwMDA4MDYxQTIwMDgwMDAwMDBDOEE2Cis6MTAwODMwMDAwNjFBMjAwMDAwMDAwMDAyMDQxQTFCRjgwMDkwMDIyODhCCis6MTAwODQwMDAwNjFBMzcxODAwMDAwMDA0MDYxQTM3MTAwMDAwMDAwMkNDCis6MTAwODUwMDAwNjFBNTAwMDAwMDAwMDAyMDYxQTUwMDgwMDAwMDAwNEFBCis6MTAwODYwMDAwNjFBNTAxODAwMDAwMDA0MDYxQTUwMjgwMDAwMDAwNDYwCis6MTAwODcwMDAwNjFBNTAzODAwMDAwMDA0MDYxQTUwNDgwMDAwMDAwNDEwCis6MTAwODgwMDAwNjFBNTA1ODAwMDAwMDA0MDYxQTUwNjgwMDAwMDAwNEMwCis6MTAwODkwMDAwNjFBNTA3ODAwMDAwMDAyMDQxQTUyQzAwMDAyMDJCODgyCis6MTAwOEEwMDAwNjFBNDA1MDAwMDAwMDA2MDQxQTQwNjgwMDAyMDJCQTBFCis6MTAwOEIwMDAwNDFBNDA0MDAwMDQwMkJDMDQxQTgwMDAwMDAxMDJDMDc3Cis6MTAwOEMwMDAwNjFBODAwNDAwMDAwMDAzMDQxQTgwMTAwMDAxMDJDMTBGCis6MTAwOEQwMDAwNjFBODAxNDAwMDAwMDAzMDQxQTgwMjAwMDAxMDJDMkRFCis6MTAwOEUwMDAwNjFBODAyNDAwMDAwMDAzMDQxQTgwMzAwMDAxMDJDM0FECis6MTAwOEYwMDAwNjFBODAzNDAwMDAwMDAzMDQxQTgwNDAwMDAxMDJDNDdDCis6MTAwOTAwMDAwNjFBODA0NDAwMDAwMDAzMDQxQTgwNTAwMDAxMDJDNTRBCis6MTAwOTEwMDAwNjFBODA1NDAwMDAwMDAzMDQxQTgwNjAwMDAxMDJDNjE5Cis6MTAwOTIwMDAwNjFBODA2NDAwMDAwMDAzMDQxQTgwNzAwMDAxMDJDN0U4Cis6MTAwOTMwMDAwNjFBODA3NDAwMDAwMDAzMDQxQTgwODAwMDAxMDJDOEI3Cis6MTAwOTQwMDAwNjFBODA4NDAwMDAwMDAzMDQxQTgwOTAwMDAxMDJDOTg2Cis6MTAwOTUwMDAwNjFBODA5NDAwMDAwMDAzMDQxQTgwQTAwMDAxMDJDQTU1Cis6MTAwOTYwMDAwNjFBODBBNDAwMDAwMDAzMDQxQTgwQjAwMDAxMDJDQjI0Cis6MTAwOTcwMDAwNjFBODBCNDAwMDAwMDAzMDQxQTgwQzAwMDAxMDJDQ0YzCis6MTAwOTgwMDAwNjFBODBDNDAwMDAwMDAzMDQxQTgwRDAwMDAxMDJDREMyCis6MTAwOTkwMDAwNjFBODBENDAwMDAwMDAzMDQxQTgwRTAwMDAxMDJDRTkxCis6MTAwOUEwMDAwNjFBODBFNDAwMDAwMDAzMDQxQTgwRjAwMDAxMDJDRjYwCis6MTAwOUIwMDAwNjFBODBGNDAwMDAwMDAzMDQxQTgxMDAwMDAxMDJEMDJFCis6MTAwOUMwMDAwNjFBODEwNDAwMDAwMDAzMDQxQTgxMTAwMDAxMDJEMUZDCis6MTAwOUQwMDAwNjFBODExNDAwMDAwMDAzMDQxQTgxMjAwMDAxMDJEMkNCCis6MTAwOUUwMDAwNjFBODEyNDAwMDAwMDAzMDQxQTgxMzAwMDAxMDJEMzlBCis6MTAwOUYwMDAwNjFBODEzNDAwMDAwMDAzMDQxQTgxNDAwMDAxMDJENDY5Cis6MTAwQTAwMDAwNjFBODE0NDAwMDAwMDAzMDQxQTgxNTAwMDAxMDJENTM3Cis6MTAwQTEwMDAwNjFBODE1NDAwMDAwMDAzMDQxQTgxNjAwMDAxMDJENjA2Cis6MTAwQTIwMDAwNjFBODE2NDAwMDAwMDAzMDQxQTgxNzAwMDAxMDJEN0Q1Cis6MTAwQTMwMDAwNjFBODE3NDAwMDAwMDAzMDQxQTgxODAwMDAxMDJEOEE0Cis6MTAwQTQwMDAwNjFBODE4NDAwMDAwMDAzMDQxQTgxOTAwMDAxMDJEOTczCis6MTAwQTUwMDAwNjFBODE5NDAwMDAwMDAzMDQxQTgxQTAwMDAxMDJEQTQyCis6MTAwQTYwMDAwNjFBODFBNDAwMDAwMDAzMDQxQTgxQjAwMDAxMDJEQjExCis6MTAwQTcwMDAwNjFBODFCNDAwMDAwMDAzMDQxQTgxQzAwMDAxMDJEQ0UwCis6MTAwQTgwMDAwNjFBODFDNDAwMDAwMDAzMDQxQTgxRDAwMDAxMDJEREFGCis6MTAwQTkwMDAwNjFBODFENDAwMDAwMDAzMDQxQTgxRTAwMDAxMDJERTdFCis6MTAwQUEwMDAwNjFBODFFNDAwMDAwMDAzMDQxQTgxRjAwMDAxMDJERjRECis6MTAwQUIwMDAwNjFBODFGNDAwMDAwMDAzMDQxQTgyMDAwMDAxMDJFMDFCCis6MTAwQUMwMDAwNjFBODIwNDAwMDAwMDAzMDQxQTgyMTAwMDAxMDJFMUU5Cis6MTAwQUQwMDAwNjFBODIxNDAwMDAwMDAzMDQxQTgyMjAwMDAxMDJFMkI4Cis6MTAwQUUwMDAwNjFBODIyNDAwMDAwMDAzMDQxQTgyMzAwMDAxMDJFMzg3Cis6MTAwQUYwMDAwNjFBODIzNDAwMDAwMDAzMDQxQTgyNDAwMDAxMDJFNDU2Cis6MTAwQjAwMDAwNjFBODI0NDAwMDAwMDAzMDQxQTgyNTAwMDAxMDJFNTI0Cis6MTAwQjEwMDAwNjFBODI1NDAwMDAwMDAzMDQxQTgyNjAwMDAxMDJFNkYzCis6MTAwQjIwMDAwNjFBODI2NDAwMDAwMDAzMDQxQTgyNzAwMDAxMDJFN0MyCis6MTAwQjMwMDAwNjFBODI3NDAwMDAwMDAzMDQxQTgyODAwMDAxMDJFODkxCis6MTAwQjQwMDAwNjFBODI4NDAwMDAwMDAzMDQxQTgyOTAwMDAxMDJFOTYwCis6MTAwQjUwMDAwNjFBODI5NDAwMDAwMDAzMDQxQTgyQTAwMDAxMDJFQTJGCis6MTAwQjYwMDAwNjFBODJBNDAwMDAwMDAzMDQxQTgyQjAwMDAxMDJFQkZFCis6MTAwQjcwMDAwNjFBODJCNDAwMDAwMDAzMDQxQTgyQzAwMDAxMDJFQ0NECis6MTAwQjgwMDAwNjFBODJDNDAwMDAwMDAzMDQxQTgyRDAwMDAxMDJFRDlDCis6MTAwQjkwMDAwNjFBODJENDAwMDAwMDAzMDQxQTgyRTAwMDAxMDJFRTZCCis6MTAwQkEwMDAwNjFBODJFNDAwMDAwMDAzMDQxQTgyRjAwMDAxMDJFRjNBCis6MTAwQkIwMDAwNjFBODJGNDAwMDAwMDAzMDQxQTgzMDAwMDAxMDJGMDA4Cis6MTAwQkMwMDAwNjFBODMwNDAwMDAwMDAzMDQxQTgzMTAwMDAxMDJGMUQ2Cis6MTAwQkQwMDAwNjFBODMxNDAwMDAwMDAzMDQxQTgzMjAwMDAxMDJGMkE1Cis6MTAwQkUwMDAwNjFBODMyNDAwMDAwMDAzMDQxQTgzMzAwMDAxMDJGMzc0Cis6MTAwQkYwMDAwNjFBODMzNDAwMDAwMDAzMDQxQTgzNDAwMDAxMDJGNDQzCis6MTAwQzAwMDAwNjFBODM0NDAwMDAwMDAzMDQxQTgzNTAwMDAxMDJGNTExCis6MTAwQzEwMDAwNjFBODM1NDAwMDAwMDAzMDQxQTgzNjAwMDAxMDJGNkUwCis6MTAwQzIwMDAwNjFBODM2NDAwMDAwMDAzMDQxQTgzNzAwMDAxMDJGN0FGCis6MTAwQzMwMDAwNjFBODM3NDAwMDAwMDAzMDQxQTgzODAwMDAxMDJGODdFCis6MTAwQzQwMDAwNjFBODM4NDAwMDAwMDAzMDQxQTgzOTAwMDAxMDJGOTRECis6MTAwQzUwMDAwNjFBODM5NDAwMDAwMDAzMDQxQTgzQTAwMDAxMDJGQTFDCis6MTAwQzYwMDAwNjFBODNBNDAwMDAwMDAzMDQxQTgzQjAwMDAxMDJGQkVCCis6MTAwQzcwMDAwNjFBODNCNDAwMDAwMDAzMDQxQTgzQzAwMDAxMDJGQ0JBCis6MTAwQzgwMDAwNjFBODNDNDAwMDAwMDAzMDQxQTgzRDAwMDAxMDJGRDg5Cis6MTAwQzkwMDAwNjFBODNENDAwMDAwMDAzMDQxQTgzRTAwMDAxMDJGRTU4Cis6MTAwQ0EwMDAwNjFBODNFNDAwMDAwMDAzMDQxQTgzRjAwMDAxMDJGRjI3Cis6MTAwQ0IwMDAwNjFBODNGNDAwMDAwMDAzMDQxQTg0MDAwMDAxMDMwMEY0Cis6MTAwQ0MwMDAwNjFBODQwNDAwMDAwMDAzMDQxQTg0MTAwMDAxMDMwMUMyCis6MTAwQ0QwMDAwNjFBODQxNDAwMDAwMDAzMDQxQTg0MjAwMDAxMDMwMjkxCis6MTAwQ0UwMDAwNjFBODQyNDAwMDAwMDAzMDQxQTg0MzAwMDAxMDMwMzYwCis6MTAwQ0YwMDAwNjFBODQzNDAwMDAwMDAzMDQxQTg0NDAwMDAxMDMwNDJGCis6MTAwRDAwMDAwNjFBODQ0NDAwMDAwMDAzMDQxQTg0NTAwMDAxMDMwNUZECis6MTAwRDEwMDAwNjFBODQ1NDAwMDAwMDAzMDQxQTg0NjAwMDAxMDMwNkNDCis6MTAwRDIwMDAwNjFBODQ2NDAwMDAwMDAzMDQxQTg0NzAwMDAxMDMwNzlCCis6MTAwRDMwMDAwNjFBODQ3NDAwMDAwMDAzMDQxQTg0ODAwMDAxMDMwODZBCis6MTAwRDQwMDAwNjFBODQ4NDAwMDAwMDAzMDQxQTg0OTAwMDAxMDMwOTM5Cis6MTAwRDUwMDAwNjFBODQ5NDAwMDAwMDAzMDQxQTg0QTAwMDAxMDMwQTA4Cis6MTAwRDYwMDAwNjFBODRBNDAwMDAwMDAzMDQxQTg0QjAwMDAxMDMwQkQ3Cis6MTAwRDcwMDAwNjFBODRCNDAwMDAwMDAzMDQxQTg0QzAwMDAxMDMwQ0E2Cis6MTAwRDgwMDAwNjFBODRDNDAwMDAwMDAzMDQxQTg0RDAwMDAxMDMwRDc1Cis6MTAwRDkwMDAwNjFBODRENDAwMDAwMDAzMDQxQTg0RTAwMDAxMDMwRTQ0Cis6MTAwREEwMDAwNjFBODRFNDAwMDAwMDAzMDQxQTg0RjAwMDAxMDMwRjEzCis6MTAwREIwMDAwNjFBODRGNDAwMDAwMDAzMDQxQTg1MDAwMDAxMDMxMEUxCis6MTAwREMwMDAwNjFBODUwNDAwMDAwMDAzMDQxQTg1MTAwMDAxMDMxMUFGCis6MTAwREQwMDAwNjFBODUxNDAwMDAwMDAzMDQxQTg1MjAwMDAxMDMxMjdFCis6MTAwREUwMDAwNjFBODUyNDAwMDAwMDAzMDQxQTg1MzAwMDAxMDMxMzRECis6MTAwREYwMDAwNjFBODUzNDAwMDAwMDAzMDQxQTg1NDAwMDAxMDMxNDFDCis6MTAwRTAwMDAwNjFBODU0NDAwMDAwMDAzMDQxQTg1NTAwMDAxMDMxNUVBCis6MTAwRTEwMDAwNjFBODU1NDAwMDAwMDAzMDQxQTg1NjAwMDAxMDMxNkI5Cis6MTAwRTIwMDAwNjFBODU2NDAwMDAwMDAzMDQxQTg1NzAwMDAxMDMxNzg4Cis6MTAwRTMwMDAwNjFBODU3NDAwMDAwMDAzMDQxQTg1ODAwMDAxMDMxODU3Cis6MTAwRTQwMDAwNjFBODU4NDAwMDAwMDAzMDQxQTg1OTAwMDAxMDMxOTI2Cis6MTAwRTUwMDAwNjFBODU5NDAwMDAwMDAzMDQxQTg1QTAwMDAxMDMxQUY1Cis6MTAwRTYwMDAwNjFBODVBNDAwMDAwMDAzMDQxQTg1QjAwMDAxMDMxQkM0Cis6MTAwRTcwMDAwNjFBODVCNDAwMDAwMDAzMDQxQTg1QzAwMDAxMDMxQzkzCis6MTAwRTgwMDAwNjFBODVDNDAwMDAwMDAzMDQxQTg1RDAwMDAxMDMxRDYyCis6MTAwRTkwMDAwNjFBODVENDAwMDAwMDAzMDQxQTg1RTAwMDAxMDMxRTMxCis6MTAwRUEwMDAwNjFBODVFNDAwMDAwMDAzMDQxQTg1RjAwMDAxMDMxRjAwCis6MTAwRUIwMDAwNjFBODVGNDAwMDAwMDAzMDQxQTg2MDAwMDAxMDMyMENFCis6MTAwRUMwMDAwNjFBODYwNDAwMDAwMDAzMDQxQTg2MTAwMDAxMDMyMTlDCis6MTAwRUQwMDAwNjFBODYxNDAwMDAwMDAzMDQxQTg2MjAwMDAxMDMyMjZCCis6MTAwRUUwMDAwNjFBODYyNDAwMDAwMDAzMDQxQTg2MzAwMDAxMDMyMzNBCis6MTAwRUYwMDAwNjFBODYzNDAwMDAwMDAzMDQxQTg2NDAwMDAxMDMyNDA5Cis6MTAwRjAwMDAwNjFBODY0NDAwMDAwMDAzMDQxQTg2NTAwMDAxMDMyNUQ3Cis6MTAwRjEwMDAwNjFBODY1NDAwMDAwMDAzMDQxQTg2NjAwMDAxMDMyNkE2Cis6MTAwRjIwMDAwNjFBODY2NDAwMDAwMDAzMDQxQTg2NzAwMDAxMDMyNzc1Cis6MTAwRjMwMDAwNjFBODY3NDAwMDAwMDAzMDQxQTg2ODAwMDAxMDMyODQ0Cis6MTAwRjQwMDAwNjFBODY4NDAwMDAwMDAzMDQxQTg2OTAwMDAxMDMyOTEzCis6MTAwRjUwMDAwNjFBODY5NDAwMDAwMDAzMDQxQTg2QTAwMDAxMDMyQUUyCis6MTAwRjYwMDAwNjFBODZBNDAwMDAwMDAzMDQxQTg2QjAwMDAxMDMyQkIxCis6MTAwRjcwMDAwNjFBODZCNDAwMDAwMDAzMDQxQTg2QzAwMDAxMDMyQzgwCis6MTAwRjgwMDAwNjFBODZDNDAwMDAwMDAzMDQxQTg2RDAwMDAxMDMyRDRGCis6MTAwRjkwMDAwNjFBODZENDAwMDAwMDAzMDQxQTg2RTAwMDAxMDMyRTFFCis6MTAwRkEwMDAwNjFBODZFNDAwMDAwMDAzMDQxQTg2RjAwMDAxMDMyRkVECis6MTAwRkIwMDAwNjFBODZGNDAwMDAwMDAzMDQxQTg3MDAwMDAxMDMzMEJCCis6MTAwRkMwMDAwNjFBODcwNDAwMDAwMDAzMDQxQTg3MTAwMDAxMDMzMTg5Cis6MTAwRkQwMDAwNjFBODcxNDAwMDAwMDAzMDQxQTg3MjAwMDAxMDMzMjU4Cis6MTAwRkUwMDAwNjFBODcyNDAwMDAwMDAzMDQxQTg3MzAwMDAxMDMzMzI3Cis6MTAwRkYwMDAwNjFBODczNDAwMDAwMDAzMDQxQTg3NDAwMDAxMDMzNEY2Cis6MTAxMDAwMDAwNjFBODc0NDAwMDAwMDAzMDQxQTg3NTAwMDAxMDMzNUM0Cis6MTAxMDEwMDAwNjFBODc1NDAwMDAwMDAzMDQxQTg3NjAwMDAxMDMzNjkzCis6MTAxMDIwMDAwNjFBODc2NDAwMDAwMDAzMDQxQTg3NzAwMDAxMDMzNzYyCis6MTAxMDMwMDAwNjFBODc3NDAwMDAwMDAzMDQxQTg3ODAwMDAxMDMzODMxCis6MTAxMDQwMDAwNjFBODc4NDAwMDAwMDAzMDQxQTg3OTAwMDAxMDMzOTAwCis6MTAxMDUwMDAwNjFBODc5NDAwMDAwMDAzMDQxQTg3QTAwMDAxMDMzQUNGCis6MTAxMDYwMDAwNjFBODdBNDAwMDAwMDAzMDQxQTg3QjAwMDAxMDMzQjlFCis6MTAxMDcwMDAwNjFBODdCNDAwMDAwMDAzMDQxQTg3QzAwMDAxMDMzQzZECis6MTAxMDgwMDAwNjFBODdDNDAwMDAwMDAzMDQxQTg3RDAwMDAxMDMzRDNDCis6MTAxMDkwMDAwNjFBODdENDAwMDAwMDAzMDQxQTg3RTAwMDAxMDMzRTBCCis6MTAxMEEwMDAwNjFBODdFNDAwMDAwMDAzMDQxQTg3RjAwMDAxMDMzRkRBCis6MTAxMEIwMDAwNjFBODdGNDAwMDAwMDAzMDQxQTg4MDAwMDAxMDM0MEE4Cis6MTAxMEMwMDAwNjFBODgwNDAwMDAwMDAzMDQxQTg4MTAwMDAxMDM0MTc2Cis6MTAxMEQwMDAwNjFBODgxNDAwMDAwMDAzMDQxQTg4MjAwMDAxMDM0MjQ1Cis6MTAxMEUwMDAwNjFBODgyNDAwMDAwMDAzMDQxQTg4MzAwMDAxMDM0MzE0Cis6MTAxMEYwMDAwNjFBODgzNDAwMDAwMDAzMDQxQTg4NDAwMDAxMDM0NEUzCis6MTAxMTAwMDAwNjFBODg0NDAwMDAwMDAzMDQxQTg4NTAwMDAxMDM0NUIxCis6MTAxMTEwMDAwNjFBODg1NDAwMDAwMDAzMDQxQTg4NjAwMDAxMDM0NjgwCis6MTAxMTIwMDAwNjFBODg2NDAwMDAwMDAzMDQxQTg4NzAwMDAxMDM0NzRGCis6MTAxMTMwMDAwNjFBODg3NDAwMDAwMDAzMDQxQTg4ODAwMDAxMDM0ODFFCis6MTAxMTQwMDAwNjFBODg4NDAwMDAwMDAzMDQxQTg4OTAwMDAxMDM0OUVECis6MTAxMTUwMDAwNjFBODg5NDAwMDAwMDAzMDQxQTg4QTAwMDAxMDM0QUJDCis6MTAxMTYwMDAwNjFBODhBNDAwMDAwMDAzMDQxQTg4QjAwMDAxMDM0QjhCCis6MTAxMTcwMDAwNjFBODhCNDAwMDAwMDAzMDQxQTg4QzAwMDAxMDM0QzVBCis6MTAxMTgwMDAwNjFBODhDNDAwMDAwMDAzMDQxQTg4RDAwMDAxMDM0RDI5Cis6MTAxMTkwMDAwNjFBODhENDAwMDAwMDAzMDQxQTg4RTAwMDAxMDM0RUY4Cis6MTAxMUEwMDAwNjFBODhFNDAwMDAwMDAzMDQxQTg4RjAwMDAxMDM0RkM3Cis6MTAxMUIwMDAwNjFBODhGNDAwMDAwMDAzMDQxQTg5MDAwMDAxMDM1MDk1Cis6MTAxMUMwMDAwNjFBODkwNDAwMDAwMDAzMDQxQTg5MTAwMDAxMDM1MTYzCis6MTAxMUQwMDAwNjFBODkxNDAwMDAwMDAzMDQxQTg5MjAwMDAxMDM1MjMyCis6MTAxMUUwMDAwNjFBODkyNDAwMDAwMDAzMDQxQTg5MzAwMDAxMDM1MzAxCis6MTAxMUYwMDAwNjFBODkzNDAwMDAwMDAzMDQxQTg5NDAwMDAxMDM1NEQwCis6MTAxMjAwMDAwNjFBODk0NDAwMDAwMDAzMDQxQTg5NTAwMDAxMDM1NTlFCis6MTAxMjEwMDAwNjFBODk1NDAwMDAwMDAzMDQxQTg5NjAwMDAxMDM1NjZECis6MTAxMjIwMDAwNjFBODk2NDAwMDAwMDAzMDQxQTg5NzAwMDAxMDM1NzNDCis6MTAxMjMwMDAwNjFBODk3NDAwMDAwMDAzMDQxQTg5ODAwMDAxMDM1ODBCCis6MTAxMjQwMDAwNjFBODk4NDAwMDAwMDAzMDQxQTg5OTAwMDAxMDM1OURBCis6MTAxMjUwMDAwNjFBODk5NDAwMDAwMDAzMDQxQTg5QTAwMDAxMDM1QUE5Cis6MTAxMjYwMDAwNjFBODlBNDAwMDAwMDAzMDQxQTg5QjAwMDAxMDM1Qjc4Cis6MTAxMjcwMDAwNjFBODlCNDAwMDAwMDAzMDQxQTg5QzAwMDAxMDM1QzQ3Cis6MTAxMjgwMDAwNjFBODlDNDAwMDAwMDAzMDQxQTg5RDAwMDAxMDM1RDE2Cis6MTAxMjkwMDAwNjFBODlENDAwMDAwMDAzMDQxQTg5RTAwMDAxMDM1RUU1Cis6MTAxMkEwMDAwNjFBODlFNDAwMDAwMDAzMDQxQTg5RjAwMDAxMDM1RkI0Cis6MTAxMkIwMDAwNjFBODlGNDAwMDAwMDAzMDQxQThBMDAwMDAxMDM2MDgyCis6MTAxMkMwMDAwNjFBOEEwNDAwMDAwMDAzMDQxQThBMTAwMDAxMDM2MTUwCis6MTAxMkQwMDAwNjFBOEExNDAwMDAwMDAzMDQxQThBMjAwMDAxMDM2MjFGCis6MTAxMkUwMDAwNjFBOEEyNDAwMDAwMDAzMDQxQThBMzAwMDAxMDM2M0VFCis6MTAxMkYwMDAwNjFBOEEzNDAwMDAwMDAzMDQxQThBNDAwMDAxMDM2NEJECis6MTAxMzAwMDAwNjFBOEE0NDAwMDAwMDAzMDQxQThBNTAwMDAxMDM2NThCCis6MTAxMzEwMDAwNjFBOEE1NDAwMDAwMDAzMDQxQThBNjAwMDAxMDM2NjVBCis6MTAxMzIwMDAwNjFBOEE2NDAwMDAwMDAzMDQxQThBNzAwMDAxMDM2NzI5Cis6MTAxMzMwMDAwNjFBOEE3NDAwMDAwMDAzMDQxQThBODAwMDAxMDM2OEY4Cis6MTAxMzQwMDAwNjFBOEE4NDAwMDAwMDAzMDQxQThBOTAwMDAxMDM2OUM3Cis6MTAxMzUwMDAwNjFBOEE5NDAwMDAwMDAzMDQxQThBQTAwMDAxMDM2QTk2Cis6MTAxMzYwMDAwNjFBOEFBNDAwMDAwMDAzMDQxQThBQjAwMDAxMDM2QjY1Cis6MTAxMzcwMDAwNjFBOEFCNDAwMDAwMDAzMDQxQThBQzAwMDAxMDM2QzM0Cis6MTAxMzgwMDAwNjFBOEFDNDAwMDAwMDAzMDQxQThBRDAwMDAxMDM2RDAzCis6MTAxMzkwMDAwNjFBOEFENDAwMDAwMDAzMDQxQThBRTAwMDAxMDM2RUQyCis6MTAxM0EwMDAwNjFBOEFFNDAwMDAwMDAzMDQxQThBRjAwMDAxMDM2RkExCis6MTAxM0IwMDAwNjFBOEFGNDAwMDAwMDAzMDQxQThCMDAwMDAxMDM3MDZGCis6MTAxM0MwMDAwNjFBOEIwNDAwMDAwMDAzMDQxQThCMTAwMDAxMDM3MTNECis6MTAxM0QwMDAwNjFBOEIxNDAwMDAwMDAzMDQxQThCMjAwMDAxMDM3MjBDCis6MTAxM0UwMDAwNjFBOEIyNDAwMDAwMDAzMDQxQThCMzAwMDAxMDM3M0RCCis6MTAxM0YwMDAwNjFBOEIzNDAwMDAwMDAzMDQxQThCNDAwMDAxMDM3NEFBCis6MTAxNDAwMDAwNjFBOEI0NDAwMDAwMDAzMDQxQThCNTAwMDAxMDM3NTc4Cis6MTAxNDEwMDAwNjFBOEI1NDAwMDAwMDAzMDQxQThCNjAwMDAxMDM3NjQ3Cis6MTAxNDIwMDAwNjFBOEI2NDAwMDAwMDAzMDQxQThCNzAwMDAxMDM3NzE2Cis6MTAxNDMwMDAwNjFBOEI3NDAwMDAwMDAzMDQxQThCODAwMDAxMDM3OEU1Cis6MTAxNDQwMDAwNjFBOEI4NDAwMDAwMDAzMDQxQThCOTAwMDAxMDM3OUI0Cis6MTAxNDUwMDAwNjFBOEI5NDAwMDAwMDAzMDQxQThCQTAwMDAxMDM3QTgzCis6MTAxNDYwMDAwNjFBOEJBNDAwMDAwMDAzMDQxQThCQjAwMDAxMDM3QjUyCis6MTAxNDcwMDAwNjFBOEJCNDAwMDAwMDAzMDQxQThCQzAwMDAxMDM3QzIxCis6MTAxNDgwMDAwNjFBOEJDNDAwMDAwMDAzMDQxQThCRDAwMDAxMDM3REYwCis6MTAxNDkwMDAwNjFBOEJENDAwMDAwMDAzMDQxQThCRTAwMDAxMDM3RUJGCis6MTAxNEEwMDAwNjFBOEJFNDAwMDAwMDAzMDQxQThCRjAwMDAxMDM3RjhFCis6MTAxNEIwMDAwNjFBOEJGNDAwMDAwMDAzMDQxQThDMDAwMDAxMDM4MDVDCis6MTAxNEMwMDAwNjFBOEMwNDAwMDAwMDAzMDQxQThDMTAwMDAxMDM4MTJBCis6MTAxNEQwMDAwNjFBOEMxNDAwMDAwMDAzMDQxQThDMjAwMDAxMDM4MkY5Cis6MTAxNEUwMDAwNjFBOEMyNDAwMDAwMDAzMDQxQThDMzAwMDAxMDM4M0M4Cis6MTAxNEYwMDAwNjFBOEMzNDAwMDAwMDAzMDQxQThDNDAwMDAxMDM4NDk3Cis6MTAxNTAwMDAwNjFBOEM0NDAwMDAwMDAzMDQxQThDNTAwMDAxMDM4NTY1Cis6MTAxNTEwMDAwNjFBOEM1NDAwMDAwMDAzMDQxQThDNjAwMDAxMDM4NjM0Cis6MTAxNTIwMDAwNjFBOEM2NDAwMDAwMDAzMDQxQThDNzAwMDAxMDM4NzAzCis6MTAxNTMwMDAwNjFBOEM3NDAwMDAwMDAzMDQxQThDODAwMDAxMDM4OEQyCis6MTAxNTQwMDAwNjFBOEM4NDAwMDAwMDAzMDQxQThDOTAwMDAxMDM4OUExCis6MTAxNTUwMDAwNjFBOEM5NDAwMDAwMDAzMDQxQThDQTAwMDAxMDM4QTcwCis6MTAxNTYwMDAwNjFBOENBNDAwMDAwMDAzMDQxQThDQjAwMDAxMDM4QjNGCis6MTAxNTcwMDAwNjFBOENCNDAwMDAwMDAzMDQxQThDQzAwMDAxMDM4QzBFCis6MTAxNTgwMDAwNjFBOENDNDAwMDAwMDAzMDQxQThDRDAwMDAxMDM4RERECis6MTAxNTkwMDAwNjFBOENENDAwMDAwMDAzMDQxQThDRTAwMDAxMDM4RUFDCis6MTAxNUEwMDAwNjFBOENFNDAwMDAwMDAzMDQxQThDRjAwMDAxMDM4RjdCCis6MTAxNUIwMDAwNjFBOENGNDAwMDAwMDAzMDQxQThEMDAwMDAxMDM5MDQ5Cis6MTAxNUMwMDAwNjFBOEQwNDAwMDAwMDAzMDQxQThEMTAwMDAxMDM5MTE3Cis6MTAxNUQwMDAwNjFBOEQxNDAwMDAwMDAzMDQxQThEMjAwMDAxMDM5MkU2Cis6MTAxNUUwMDAwNjFBOEQyNDAwMDAwMDAzMDQxQThEMzAwMDAxMDM5M0I1Cis6MTAxNUYwMDAwNjFBOEQzNDAwMDAwMDAzMDQxQThENDAwMDAxMDM5NDg0Cis6MTAxNjAwMDAwNjFBOEQ0NDAwMDAwMDAzMDQxQThENTAwMDAxMDM5NTUyCis6MTAxNjEwMDAwNjFBOEQ1NDAwMDAwMDAzMDQxQThENjAwMDAxMDM5NjIxCis6MTAxNjIwMDAwNjFBOEQ2NDAwMDAwMDAzMDQxQThENzAwMDAxMDM5N0YwCis6MTAxNjMwMDAwNjFBOEQ3NDAwMDAwMDAzMDQxQThEODAwMDAxMDM5OEJGCis6MTAxNjQwMDAwNjFBOEQ4NDAwMDAwMDAzMDQxQThEOTAwMDAxMDM5OThFCis6MTAxNjUwMDAwNjFBOEQ5NDAwMDAwMDAzMDQxQThEQTAwMDAxMDM5QTVECis6MTAxNjYwMDAwNjFBOERBNDAwMDAwMDAzMDQxQThEQjAwMDAxMDM5QjJDCis6MTAxNjcwMDAwNjFBOERCNDAwMDAwMDAzMDQxQThEQzAwMDAxMDM5Q0ZCCis6MTAxNjgwMDAwNjFBOERDNDAwMDAwMDAzMDQxQThERDAwMDAxMDM5RENBCis6MTAxNjkwMDAwNjFBOERENDAwMDAwMDAzMDQxQThERTAwMDAxMDM5RTk5Cis6MTAxNkEwMDAwNjFBOERFNDAwMDAwMDAzMDQxQThERjAwMDAxMDM5RjY4Cis6MTAxNkIwMDAwNjFBOERGNDAwMDAwMDAzMDQxQThFMDAwMDAxMDNBMDM2Cis6MTAxNkMwMDAwNjFBOEUwNDAwMDAwMDAzMDQxQThFMTAwMDAxMDNBMTA0Cis6MTAxNkQwMDAwNjFBOEUxNDAwMDAwMDAzMDQxQThFMjAwMDAxMDNBMkQzCis6MTAxNkUwMDAwNjFBOEUyNDAwMDAwMDAzMDQxQThFMzAwMDAxMDNBM0EyCis6MTAxNkYwMDAwNjFBOEUzNDAwMDAwMDAzMDQxQThFNDAwMDAxMDNBNDcxCis6MTAxNzAwMDAwNjFBOEU0NDAwMDAwMDAzMDQxQThFNTAwMDAxMDNBNTNGCis6MTAxNzEwMDAwNjFBOEU1NDAwMDAwMDAzMDQxQThFNjAwMDAxMDNBNjBFCis6MTAxNzIwMDAwNjFBOEU2NDAwMDAwMDAzMDQxQThFNzAwMDAxMDNBN0RECis6MTAxNzMwMDAwNjFBOEU3NDAwMDAwMDAzMDQxQThFODAwMDAxMDNBOEFDCis6MTAxNzQwMDAwNjFBOEU4NDAwMDAwMDAzMDQxQThFOTAwMDAxMDNBOTdCCis6MTAxNzUwMDAwNjFBOEU5NDAwMDAwMDAzMDQxQThFQTAwMDAxMDNBQTRBCis6MTAxNzYwMDAwNjFBOEVBNDAwMDAwMDAzMDQxQThFQjAwMDAxMDNBQjE5Cis6MTAxNzcwMDAwNjFBOEVCNDAwMDAwMDAzMDQxQThFQzAwMDAxMDNBQ0U4Cis6MTAxNzgwMDAwNjFBOEVDNDAwMDAwMDAzMDQxQThFRDAwMDAxMDNBREI3Cis6MTAxNzkwMDAwNjFBOEVENDAwMDAwMDAzMDQxQThFRTAwMDAxMDNBRTg2Cis6MTAxN0EwMDAwNjFBOEVFNDAwMDAwMDAzMDQxQThFRjAwMDAxMDNBRjU1Cis6MTAxN0IwMDAwNjFBOEVGNDAwMDAwMDAzMDQxQThGMDAwMDAxMDNCMDIzCis6MTAxN0MwMDAwNjFBOEYwNDAwMDAwMDAzMDQxQThGMTAwMDAxMDNCMUYxCis6MTAxN0QwMDAwNjFBOEYxNDAwMDAwMDAzMDQxQThGMjAwMDAxMDNCMkMwCis6MTAxN0UwMDAwNjFBOEYyNDAwMDAwMDAzMDQxQThGMzAwMDAxMDNCMzhGCis6MTAxN0YwMDAwNjFBOEYzNDAwMDAwMDAzMDQxQThGNDAwMDAxMDNCNDVFCis6MTAxODAwMDAwNjFBOEY0NDAwMDAwMDAzMDQxQThGNTAwMDAxMDNCNTJDCis6MTAxODEwMDAwNjFBOEY1NDAwMDAwMDAzMDQxQThGNjAwMDAxMDNCNkZCCis6MTAxODIwMDAwNjFBOEY2NDAwMDAwMDAzMDQxQThGNzAwMDAxMDNCN0NBCis6MTAxODMwMDAwNjFBOEY3NDAwMDAwMDAzMDQxQThGODAwMDAxMDNCODk5Cis6MTAxODQwMDAwNjFBOEY4NDAwMDAwMDAzMDQxQThGOTAwMDAxMDNCOTY4Cis6MTAxODUwMDAwNjFBOEY5NDAwMDAwMDAzMDQxQThGQTAwMDAxMDNCQTM3Cis6MTAxODYwMDAwNjFBOEZBNDAwMDAwMDAzMDQxQThGQjAwMDAxMDNCQjA2Cis6MTAxODcwMDAwNjFBOEZCNDAwMDAwMDAzMDQxQThGQzAwMDAxMDNCQ0Q1Cis6MTAxODgwMDAwNjFBOEZDNDAwMDAwMDAzMDQxQThGRDAwMDAxMDNCREE0Cis6MTAxODkwMDAwNjFBOEZENDAwMDAwMDAzMDQxQThGRTAwMDAxMDNCRTczCis6MTAxOEEwMDAwNjFBOEZFNDAwMDAwMDA3MDQxQTYyQzAwMDIwMDNCRjdDCis6MTAxOEIwMDAwNjFBMUFGMDAwMDAwMDQyMDYxQUFGMDAwMDAwMDAwOEU1Cis6MTAxOEMwMDAwNjFBRTAwMDAwMDAwNTQwMDYxQUQwMDAwMDAwMDA3MjcxCis6MTAxOEQwMDAwNjFBRDI0ODAwMDAwMDEwMDYxQUQ2QjAwMDAwMDAyMEY4Cis6MTAxOEUwMDAwNjFBRDQ3MDAwMDAwMDkwMDYxQUQ0NjgwMDAwMDAwMkE2Cis6MTAxOEYwMDAwNjFBQTAwMDAwMDAwMUM0MDYxQTMwMDAwMDAwMDAxMDAzCis6MTAxOTAwMDAwNjFBMzA4MDAwMDAwMDEwMDYxQTMxMDAwMDAwMDAxMDk2Cis6MTAxOTEwMDAwNjFBMzE4MDAwMDAwMDEwMDYxQTMzMDAwMDAwMDAxMjgxCis6MTAxOTIwMDAwNjFBMzM5MDAwMDAwMDcwMDYxQUQ0NTgwMDAwMDAwMjE2Cis6MTAxOTMwMDAwNjFBRDM0ODAwMDAwMDAyMDYxQUQzNTgwMDAwMDAyMEZGCis6MTAxOTQwMDAwNjFBQTcxMDAwMDAwMUM0MDYxQTMwNDAwMDAwMDAxMDVCCis6MTAxOTUwMDAwNjFBMzBDMDAwMDAwMDEwMDYxQTMxNDAwMDAwMDAxMEM2Cis6MTAxOTYwMDAwNjFBMzFDMDAwMDAwMDEwMDYxQTMzNDgwMDAwMDAxMkE5Cis6MTAxOTcwMDAwNjFBMzU1MDAwMDAwMDcwMDYxQUQ0NjAwMDAwMDAwMkZDCis6MTAxOTgwMDAwNjFBRDM1MDAwMDAwMDAyMDYxQUQzRDgwMDAwMDAyMDI3Cis6MTAxOTkwMDAwMjFBQUUyMDAwMDAwMDAwMDYxQTUwMDAwMDAwMDAwMkVCCis6MTAxOUEwMDAwNjFBNTA4MDAwMDAwMDEyMDQxQTQwMDAwMDAyMDNERkYzCis6MTAxOUIwMDAwNDFBNjNDMDAwMDIwM0UxMDYxQTcwMDAwMDAwMDAwNDZDCis6MTAxOUMwMDAwNjFBMzIwMDAwMDAwMDA4MDIxQUFFMjQwMDAwMDAwMENGCis6MTAxOUQwMDAwNjFBNTAxMDAwMDAwMDAyMDYxQTUwQzgwMDAwMDAxMjNCCis6MTAxOUUwMDAwNDFBNDAwODAwMDIwM0UzMDQxQTYzQzgwMDAyMDNFNTc2Cis6MTAxOUYwMDAwNjFBNzAxMDAwMDAwMDA0MDYxQTMyMjAwMDAwMDAwOEM5Cis6MTAxQTAwMDAwMjFBQUUyODAwMDAwMDAwMDYxQTUwMjAwMDAwMDAwMjUyCis6MTAxQTEwMDAwNjFBNTExMDAwMDAwMDEyMDQxQTQwMTAwMDAyMDNFN0Q5Cis6MTAxQTIwMDAwNDFBNjNEMDAwMDIwM0U5MDYxQTcwMjAwMDAwMDAwNEMzCis6MTAxQTMwMDAwNjFBMzI0MDAwMDAwMDA4MDIxQUFFMkMwMDAwMDAwMDE2Cis6MTAxQTQwMDAwNjFBNTAzMDAwMDAwMDAyMDYxQTUxNTgwMDAwMDAxMjE5Cis6MTAxQTUwMDAwNDFBNDAxODAwMDIwM0VCMDQxQTYzRDgwMDAyMDNFREQ1Cis6MTAxQTYwMDAwNjFBNzAzMDAwMDAwMDA0MDYxQTMyNjAwMDAwMDAwOEY4Cis6MTAxQTcwMDAwMjFBQUUzMDAwMDAwMDAwMDYxQTUwNDAwMDAwMDAwMkJBCis6MTAxQTgwMDAwNjFBNTFBMDAwMDAwMDEyMDQxQTQwMjAwMDAyMDNFRkMxCis6MTAxQTkwMDAwNDFBNjNFMDAwMDIwM0YxMDYxQTcwNDAwMDAwMDAwNDFCCis6MTAxQUEwMDAwNjFBMzI4MDAwMDAwMDA4MDIxQUFFMzQwMDAwMDAwMDVFCis6MTAxQUIwMDAwNjFBNTA1MDAwMDAwMDAyMDYxQTUxRTgwMDAwMDAxMkY5Cis6MTAxQUMwMDAwNDFBNDAyODAwMDIwM0YzMDQxQTYzRTgwMDAyMDNGNTM1Cis6MTAxQUQwMDAwNjFBNzA1MDAwMDAwMDA0MDYxQTMyQTAwMDAwMDAwODI4Cis6MTAxQUUwMDAwMjFBQUUzODAwMDAwMDAwMDYxQTUwNjAwMDAwMDAwMjIyCis6MTAxQUYwMDAwNjFBNTIzMDAwMDAwMDEyMDQxQTQwMzAwMDAyMDNGN0E4Cis6MTAxQjAwMDAwNDFBNjNGMDAwMDIwM0Y5MDYxQTcwNjAwMDAwMDAwNDcyCis6MTAxQjEwMDAwNjFBMzJDMDAwMDAwMDA4MDIxQUFFM0MwMDAwMDAwMEE1Cis6MTAxQjIwMDAwNjFBNTA3MDAwMDAwMDAyMDYxQTUyNzgwMDAwMDAxMkQ3Cis6MTAxQjMwMDAwNDFBNDAzODAwMDIwM0ZCMDQxQTYzRjgwMDAyMDNGRDk0Cis6MTAxQjQwMDAwNjFBNzA3MDAwMDAwMDA0MDYxQTMyRTAwMDAwMDAwODU3Cis6MTAxQjUwMDAwMjAwQTJBNDAwMDAwMjA5MDIwMEEyNzAwMDAwMDAwMDFFCis6MTAxQjYwMDAwMjAwQTI3NDAwMDAwMDAwMDIwMEEyNzAwMDAwMDAwMDQ5Cis6MTAxQjcwMDAwMjAwQTI3NDAwMDAwMDAwMDIwMEEyNzAwMDAwMDAwMDM5Cis6MTAxQjgwMDAwMjAwQTI3NDAwMDAwMDAwMDIwMEEyNzAwMDAwMDAwMDI5Cis6MTAxQjkwMDAwMjAwQTI3NDAwMDAwMDAwMDIwMTAwQjQwMDAwMDAwMTc1Cis6MTAxQkEwMDAwMjAxMDBCODAwMDAwMDAxMDIwMTAwQ0MwMDAwMDAwMUE5Cis6MTAxQkIwMDAwMjAxMDBEMDAwMDAwMDAxMDIwMTAwREMwMDAwMDAwMTcxCis6MTAxQkMwMDAwMjAxMDEwMDAwMDAwMDAxMDIwMTAxMDQwMDAwMDAwMTA3Cis6MTAxQkQwMDAwMjAxMDA3QzAwMzAwMDAwMDIwMTAwODQwMDAwMDAyOEE3Cis6MTAxQkUwMDAwMjAxMDA4QzAwMDAwMDAwMDIwMTAxMzAwMDAwMDAwNDJFCis6MTAxQkYwMDAwMjAxMDI1QzAwMDAwMDAxMDIwMTAzMjgwMDAwMDAwMDU1Cis6MTAxQzAwMDAwMjAxNjA1ODAwMDBGRkZGMDIwMTYwNzAwMDAwMDAwNzQxCis6MTAxQzEwMDAwMjAxMDU1NDAwMDAwMDMwMDIwMTAwQzQwMDAwMDAwMTcwCis6MTAxQzIwMDAwMjAxMDBGODAwMDAwMDAxMDIwMTAwRjAwMDAwMDAwMUM0Cis6MTAxQzMwMDAwMjAxMDA4MDAwMzAwMDAwMDIwMTAwODgwMDAwMDAyODNFCis6MTAxQzQwMDAwMjAxMDA5MDAwMDAwMDAwMDIwMTAxMzQwMDAwMDAwNEM1Cis6MTAxQzUwMDAwMjAxMDJEQzAwMDAwMDAxMDIwMTAzMkMwMDAwMDAwMDcwCis6MTAxQzYwMDAwMjAxNjA1QzAwMDBGRkZGMDIwMTYwNzQwMDAwMDAwN0Q5Cis6MTAxQzcwMDAwMjAxMDU2NDAwMDAwMDMwMDIwMTAwQzgwMDAwMDAwMUZDCis6MTAxQzgwMDAwMjAxMDBGQzAwMDAwMDAxMDIwMTAwRjQwMDAwMDAwMTVDCis6MTAxQzkwMDAwMjBDMTAwMDAwMDAwMDI4MDIwQzIwMDgwMDAwMDIxMUI1Cis6MTAxQ0EwMDAwMjBDMjAwQzAwMDAwMjAwMDIwQzIwMTAwMDAwMDIwNEI0Cis6MTAxQ0IwMDAwMjBDMjAxQzAwMDBGRkZGMDIwQzIwMjAwMDAwRkZGRjkwCis6MTAxQ0MwMDAwMjBDMjAyNDAwMDBGRkZGMDIwQzIwMjgwMDAwRkZGRjcwCis6MTAxQ0QwMDAwMjBDMjAzODAwMDAwMDAwMDIwQzIwM0MwMDAwMDAzN0ZECis6MTAxQ0UwMDAwMjBDMjA0MDAwMDAwMDIxMDIwQzIwNDQwMDAwMDAyMEQzCis6MTAxQ0YwMDAwNjBDMjA0ODAwMDAwMDFEMDIwQzIwQkMwMDAwMDAwMTYyCis6MTAxRDAwMDAwNjBDMjBDMDAwMDAwMDNGMDIwQzIxQkMwMDAwMDAwMUI2Cis6MTAxRDEwMDAwMjBDMjFDMDAwMDAwMDAxMDIwQzIxQzQwMDAwMDAwMURGCis6MTAxRDIwMDAwNjBDMjFDODAwMDAwMDFDMDIwQzIyMzgwN0ZGRkZGRjMwCis6MTAxRDMwMDAwMjBDMjIzQzAwMDAwMDdGMDIwQzIyNDAwN0ZGRkZGRjQ0Cis6MTAxRDQwMDAwMjBDMjI0NDAwMDAwMDNGMDEwQzIyNDgwMDAwMDAwMDY5Cis6MTAxRDUwMDAwMTBDMjI0QzAwMDAwMDAwMDEwQzIyNTAwMDAwMDAwMDg5Cis6MTAxRDYwMDAwMTBDMjI1NDAwMDAwMDAwMDEwQzIyNTgwMDAwMDAwMDY5Cis6MTAxRDcwMDAwMTBDMjI1QzAwMDAwMDAwMDEwQzIyNjAwMDAwMDAwMDQ5Cis6MTAxRDgwMDAwMTBDMjI2NDAwMDAwMDAwMDEwQzIyNjgwMDAwMDAwMDI5Cis6MTAxRDkwMDAwMTBDMjI2QzAwMDAwMDAwMDEwQzIyNzAwMDAwMDAwMDA5Cis6MTAxREEwMDAwMTBDMjI3NDAwMDAwMDAwMDEwQzIyNzgwMDAwMDAwMEU5Cis6MTAxREIwMDAwMTBDMjI3QzAwMDAwMDAwMDIwQzIyRDgwMDAwRkZGRjcyCis6MTAxREMwMDAwMjBDMjJEQzAwMDBGRkZGMDIwQzIyRTAwMDAwRkZGRkZCCis6MTAxREQwMDAwMjBDMjJFNDAwMDBGRkZGMEMwQzIwMDAwMDAwMDNFOENFCis6MTAxREUwMDAwQTBDMjAwMDAwMDAwMDAxMEIwQzIwMDAwMDAwMDAwMzgyCis6MTAxREYwMDAwMjBDNDAwODAwMDAxMDExMDIwQzQwMEMwMDAwMTAwMDAyCis6MTAxRTAwMDAwMjBDNDAxMDAwMDAxMDA0MDIwQzQwMTQwMDAwMTAyMUNECis6MTAxRTEwMDAwMjBDNDAxQzAwMDBGRkZGMDIwQzQwMjAwMDAwRkZGRkVFCis6MTAxRTIwMDAwMjBDNDAyNDAwMDBGRkZGMDIwQzQwMjgwMDAwRkZGRkNFCis6MTAxRTMwMDAwMjBDNDAzODAwMDAwMDQ2MDIwQzQwM0MwMDAwMDAwQzQwCis6MTAxRTQwMDAwNjBDNDA0MDAwMDAwMDAyMDIwQzQwNDgwMDAwMDAxODUwCis6MTAxRTUwMDAwMjBDNDA0QzAwMDAwMEYwMDYwQzQwNTAwMDAwMDAxRjM3Cis6MTAxRTYwMDAwMjBDNDBDQzAwMDAwMDAxMDYwQzQwRDAwMDAwMDAzQUZCCis6MTAxRTcwMDAwMjBDNDFCODAwMDAwMDAxMDYwQzQxQkMwMDAwMDAwMzQ4Cis6MTAxRTgwMDAwMjBDNDFDODAwMDAwMDAxMDIwQzQxQ0MwMDAwMDAwMTFFCis6MTAxRTkwMDAwNjBDNDFEMDAwMDAwMDFBMDIwQzQyMzgwN0ZGRkZGRjc5Cis6MTAxRUEwMDAwMjBDNDIzQzAwMDAwMDdGMDIwQzQyNDAwN0ZGRkZGRjkzCis6MTAxRUIwMDAwMjBDNDI0NDAwMDAwMDNGMDEwQzQyNDgwMDAwMDAwMEI4Cis6MTAxRUMwMDAwMTBDNDI0QzAwMDAwMDAwMDEwQzQyNTAwMDAwMDAwMEQ4Cis6MTAxRUQwMDAwMTBDNDI1NDAwMDAwMDAwMDEwQzQyNTgwMDAwMDAwMEI4Cis6MTAxRUUwMDAwMTBDNDI1QzAwMDAwMDAwMDEwQzQyNjAwMDAwMDAwMDk4Cis6MTAxRUYwMDAwMTBDNDI2NDAwMDAwMDAwMDEwQzQyNjgwMDAwMDAwMDc4Cis6MTAxRjAwMDAwMTBDNDI2QzAwMDAwMDAwMDEwQzQyNzAwMDAwMDAwMDU3Cis6MTAxRjEwMDAwMTBDNDI3NDAwMDAwMDAwMDEwQzQyNzgwMDAwMDAwMDM3Cis6MTAxRjIwMDAwMTBDNDI3QzAwMDAwMDAwMDEwQzQyODAwMDAwMDAwMDE3Cis6MTAxRjMwMDAwMjBDNDJEODAwMDBGRkZGMDIwQzQyREMwMDAwRkZGRjUxCis6MTAxRjQwMDAwMjBDNDJFMDAwMDBGRkZGMDIwQzQyRTQwMDAwRkZGRjMxCis6MTAxRjUwMDAwQzBDNDAwMDAwMDAwM0U4MEEwQzQwMDAwMDAwMDAwMUU3Cis6MTAxRjYwMDAwQjBDNDAwMDAwMDAwMDAzMDYwRDQwMDAwMDAwMEEwMEJBCis6MTAxRjcwMDAwMjBEMDA0NDAwMDAwMDMyMDIwRDAwOEMwMjE1MDAyMDBBCis6MTAxRjgwMDAwMjBEMDA5MDAyMTUwMDIwMDIwRDAwOTQwODEwMDAwMEMwCis6MTAxRjkwMDAwMjBEMDA5ODAwMDAwMDM2MDIwRDAwQTAwMDAwMDAwMEI1Cis6MTAxRkEwMDAwMjBEMDBBNDAwMDAwMDA0MDIwRDAwQTgwMDAwMDAwNEJGCis6MTAxRkIwMDAwNjBEMDBBQzAwMDAwMDAyMDIwRDAwQjgwMDAwMDAwMjk3Cis6MTAxRkMwMDAwMjBEMDBDMDAwMDAwMDAxMDIwRDAwQzgwMDAwMDAwMjY4Cis6MTAxRkQwMDAwMjBEMDBDQzAwMDAwMDAyMDIwRDAxNUMwMDAwMDAwMUI3Cis6MTAxRkUwMDAwMjBEMDE2NDAwMDAwMDAxMDIwRDAxNjgwMDAwMDAwMjAyCis6MTAxRkYwMDAwMjBEMDIwNDAwMDAwMDAxMDIwRDAyMEMwMDAwMDAyMDhFCis6MTAyMDAwMDAwMjBEMDIxMDAwMDAwMDQwMDIwRDAyMTQwMDAwMDA0MDBBCis6MTAyMDEwMDAwMjBEMDIyMDAwMDAwMDAzMDIwRDAyMjQwMDAwMDAxODNGCis6MTAyMDIwMDAwNjBEMDI4MDAwMDAwMDEyMDQwRDAzMDAwMDE4MDNGRkRCCis6MTAyMDMwMDAwNjBEMDM2MDAwMDAwMDBDMDIwRDAwNEMwMDAwMDAwMUMyCis6MTAyMDQwMDAwMjBEMDA1MDAwMDAwMDAyMDIwRDAwNTQwMDAwMDAwMENDCis6MTAyMDUwMDAwMjBEMDA1ODAwMDAwMDA4MDYwRDAwNUMwMDAwMDAwNDlFCis6MTAyMDYwMDAwMjBEMDBDNDAwMDAwMDA0MDIwRDAwMDQwMDAwMDAwMTg1Cis6MTAyMDcwMDAwMjBEMDAwODAwMDAwMDAxMDIwRDAwMEMwMDAwMDAwMTJDCis6MTAyMDgwMDAwMjBEMDAxMDAwMDAwMDAxMDIwRDAwMTQwMDAwMDAwMTBDCis6MTAyMDkwMDAwMjBEMDAxODAwMDAwMDAxMDIwRDAwMUMwMDAwMDAwMUVDCis6MTAyMEEwMDAwMjBEMDAyMDAwMDAwMDAxMDIwRDAwMjQwMDAwMDAwMUNDCis6MTAyMEIwMDAwMjBEMDAyODAwMDAwMDAxMDIwRDAwMkMwMDAwMDAwMUFDCis6MTAyMEMwMDAwMjBEMDAzMDAwMDAwMDAxMDIwRDAwMzQwMDAwMDAwMThDCis6MTAyMEQwMDAwMjBEMDAzODAwMDAwMDAxMDIwRDAwM0MwMDAwMDAwMTZDCis6MTAyMEUwMDAwMjBEMDExNDAwMDAwMDA5MDIwRDAxMUMwMDAwMDAwQThECis6MTAyMEYwMDAwMjBEMDEyNDAwMDAwMDAwMDIwRDAxMkMwMDAwMDAwMDcwCis6MTAyMTAwMDAwMjBEMDEzNDAwMDAwMDAwMDIwRDAxM0MwMDAwMDAwQjM0Cis6MTAyMTEwMDAwMjBEMDE0NDAwMDAwMDAwMDIwRDAxMTgwMDAwMDAyOTFBCis6MTAyMTIwMDAwMjBEMDEyMDAwMDAwMDJBMDIwRDAxMjgwMDAwMDAyMEZECis6MTAyMTMwMDAwMjBEMDEzMDAwMDAwMDIwMDIwRDAxMzgwMDAwMDAyMEQ3Cis6MTAyMTQwMDAwMjBEMDE0MDAwMDAwMDJCMDIwRDAxNDgwMDAwMDAyMDlDCis6MTAyMTUwMDAwMjBEMDExNDAwMDAwMDE5MDIwRDAxMUMwMDAwMDAxQUZDCis6MTAyMTYwMDAwMjBEMDEyNDAwMDAwMDEwMDIwRDAxMkMwMDAwMDAxMERGCis6MTAyMTcwMDAwMjBEMDEzNDAwMDAwMDEwMDIwRDAxM0MwMDAwMDAxQkE0Cis6MTAyMTgwMDAwMjBEMDE0NDAwMDAwMDEwMDIwRDAxMTgwMDAwMDAzOThBCis6MTAyMTkwMDAwMjBEMDEyMDAwMDAwMDNBMDIwRDAxMjgwMDAwMDAzMDZECis6MTAyMUEwMDAwMjBEMDEzMDAwMDAwMDMwMDIwRDAxMzgwMDAwMDAzMDQ3Cis6MTAyMUIwMDAwMjBEMDE0MDAwMDAwMDNCMDIwRDAxNDgwMDAwMDAzMDBDCis6MTAyMUMwMDAwMjBEMDExNDAwMDAwMDQ5MDIwRDAxMUMwMDAwMDA0QTJDCis6MTAyMUQwMDAwMjBEMDEyNDAwMDAwMDQwMDIwRDAxMkMwMDAwMDA0MDBGCis6MTAyMUUwMDAwMjBEMDEzNDAwMDAwMDQwMDIwRDAxM0MwMDAwMDA0QkQ0Cis6MTAyMUYwMDAwMjBEMDE0NDAwMDAwMDQwMDIwRDAxMTgwMDAwMDA2OUJBCis6MTAyMjAwMDAwMjBEMDEyMDAwMDAwMDZBMDIwRDAxMjgwMDAwMDA2MDlDCis6MTAyMjEwMDAwMjBEMDEzMDAwMDAwMDYwMDIwRDAxMzgwMDAwMDA2MDc2Cis6MTAyMjIwMDAwMjBEMDE0MDAwMDAwMDZCMDIwRDAxNDgwMDAwMDA2MDNCCis6MTAyMjMwMDAwMjBEMDExNDAwMDAwMDU5MDIwRDAxMUMwMDAwMDA1QTlCCis6MTAyMjQwMDAwMjBEMDEyNDAwMDAwMDUwMDIwRDAxMkMwMDAwMDA1MDdFCis6MTAyMjUwMDAwMjBEMDEzNDAwMDAwMDUwMDIwRDAxM0MwMDAwMDA1QjQzCis6MTAyMjYwMDAwMjBEMDE0NDAwMDAwMDUwMDIwRDAxMTgwMDAwMDA3OTI5Cis6MTAyMjcwMDAwMjBEMDEyMDAwMDAwMDdBMDIwRDAxMjgwMDAwMDA3MDBDCis6MTAyMjgwMDAwMjBEMDEzMDAwMDAwMDcwMDIwRDAxMzgwMDAwMDA3MEU2Cis6MTAyMjkwMDAwMjBEMDE0MDAwMDAwMDdCMDIwRDAxNDgwMDAwMDA3MEFCCis6MTAyMkEwMDAwNjBFMjAwMDAwMDAwODAwMDIwRTAwNEMwMDAwMDAzMjY0Cis6MTAyMkIwMDAwMjBFMDA5NDAyMTUwMDIwMDIwRTAwOTgwMjE1MDAyMDY0Cis6MTAyMkMwMDAwMjBFMDA5QzAwMDAwMDMwMDIwRTAwQTAwODEwMDAwMDZBCis6MTAyMkQwMDAwMjBFMDBBNDAwMDAwMDM2MDIwRTAwQTgwMDAwMDAzMDJDCis6MTAyMkUwMDAwMjBFMDBBQzAwMDAwMDMxMDIwRTAwQjQwMDAwMDAwMzNBCis6MTAyMkYwMDAwMjBFMDBCODAwMDAwMDAwMDIwRTAwQzQwMDAwMDAwMDQyCis6MTAyMzAwMDAwMjBFMDBDQzAwMDAwMDA2MDIwRTAwRDgwMDAwMDAwMTAyCis6MTAyMzEwMDAwMjBFMDE0NDAwMDAwMDAxMDIwRTAxNEMwMDAwMDAwMTA5Cis6MTAyMzIwMDAwMjBFMDE1MDAwMDAwMDAyMDIwRTAyMDQwMDAwMDAwMTMzCis6MTAyMzMwMDAwMjBFMDIwQzAwMDAwMDQwMDIwRTAyMTAwMDAwMDA0MERECis6MTAyMzQwMDAwMjBFMDIxQzAwMDAwMDA0MDIwRTAyMjAwMDAwMDAyMDA5Cis6MTAyMzUwMDAwMjBFMDIyNDAwMDAwMDBFMDIwRTAyMjgwMDAwMDAxQkU0Cis6MTAyMzYwMDAwNjBFMDMwMDAwMDAwMDEyMDQwRTAyODAwMDFCMDQxNzdBCis6MTAyMzcwMDAwNjBFMDJFQzAwMDAwMDA1MDIwRTAwNTQwMDAwMDAwQ0U2Cis6MTAyMzgwMDAwMjBFMDA1ODAwMDAwMDBDMDIwRTAwNUMwMDAwMDAwMDZECis6MTAyMzkwMDAwMjBFMDA2MDAwMDAwMDEwMDIwRTAwNjQwMDAwMDAxMDM5Cis6MTAyM0EwMDAwNjBFMDA2ODAwMDAwMDAzMDIwRTAwREMwMDAwMDAwM0JGCis6MTAyM0IwMDAwMjBFMDAwNDAwMDAwMDAxMDIwRTAwMDgwMDAwMDAwMUVGCis6MTAyM0MwMDAwMjBFMDAwQzAwMDAwMDAxMDIwRTAwMTAwMDAwMDAwMUNGCis6MTAyM0QwMDAwMjBFMDAxNDAwMDAwMDAxMDIwRTAwMTgwMDAwMDAwMUFGCis6MTAyM0UwMDAwMjBFMDAxQzAwMDAwMDAxMDIwRTAwMjAwMDAwMDAwMThGCis6MTAyM0YwMDAwMjBFMDAyNDAwMDAwMDAxMDIwRTAwMjgwMDAwMDAwMTZGCis6MTAyNDAwMDAwMjBFMDAyQzAwMDAwMDAxMDIwRTAwMzAwMDAwMDAwMTRFCis6MTAyNDEwMDAwMjBFMDAzNDAwMDAwMDAxMDIwRTAwMzgwMDAwMDAwMTJFCis6MTAyNDIwMDAwMjBFMDAzQzAwMDAwMDAxMDIwRTAwNDAwMDAwMDAwMTBFCis6MTAyNDMwMDAwMjBFMDA0NDAwMDAwMDAxMDIwRTAxMTAwMDAwMDAwRjE3Cis6MTAyNDQwMDAwMjBFMDExODAwMDAwMDAwMDIwRTAxMjAwMDAwMDAwMDMyCis6MTAyNDUwMDAwMjBFMDEyODAwMDAwMDAwMDIwRTAxMTQwMDAwMDAyRkVGCis6MTAyNDYwMDAwMjBFMDExQzAwMDAwMDIwMDIwRTAxMjQwMDAwMDAyMENBCis6MTAyNDcwMDAwMjBFMDEyQzAwMDAwMDIwMDIwRTAxMTAwMDAwMDAxRkJGCis6MTAyNDgwMDAwMjBFMDExODAwMDAwMDEwMDIwRTAxMjAwMDAwMDAxMEQyCis6MTAyNDkwMDAwMjBFMDEyODAwMDAwMDEwMDIwRTAxMTQwMDAwMDAzRjhGCis6MTAyNEEwMDAwMjBFMDExQzAwMDAwMDMwMDIwRTAxMjQwMDAwMDAzMDZBCis6MTAyNEIwMDAwMjBFMDEyQzAwMDAwMDMwMDIwRTAxMTAwMDAwMDA0RjNGCis6MTAyNEMwMDAwMjBFMDExODAwMDAwMDQwMDIwRTAxMjAwMDAwMDA0MDMyCis6MTAyNEQwMDAwMjBFMDEyODAwMDAwMDQwMDIwRTAxMTQwMDAwMDA2RkVGCis6MTAyNEUwMDAwMjBFMDExQzAwMDAwMDYwMDIwRTAxMjQwMDAwMDA2MENBCis6MTAyNEYwMDAwMjBFMDEyQzAwMDAwMDYwMDIwRTAxMTAwMDAwMDA1RkJGCis6MTAyNTAwMDAwMjBFMDExODAwMDAwMDUwMDIwRTAxMjAwMDAwMDA1MEQxCis6MTAyNTEwMDAwMjBFMDEyODAwMDAwMDUwMDIwRTAxMTQwMDAwMDA3RjhFCis6MTAyNTIwMDAwMjBFMDExQzAwMDAwMDcwMDIwRTAxMjQwMDAwMDA3MDY5Cis6MTAyNTMwMDAwMjBFMDEyQzAwMDAwMDcwMDczMDA0MDAwMEQ2MDAwMERECis6MTAyNTQwMDAwODMwMDdEODAwMDUwNDMyMDczNDAwMDAzMjJCMDAwMEExCis6MTAyNTUwMDAwNzM0ODAwMDMxNEIwQzhCMDczNTAwMDAzOEM1MThERTdFCis6MTAyNTYwMDAwNzM1ODAwMDJGOTAyNzEwMDczNjAwMDAyNjhGMzJGNUEwCis6MTAyNTcwMDAwODM2NzE2MDMxRDQwNDM0MDIzMDAwQkMwMDAwMDAzMEYxCis6MTAyNTgwMDAwMTMwMDAwMDAwMDAwMDAwMDEzMDAwMDQwMDAwMDAwMEU1Cis6MTAyNTkwMDAwMTMwMDAwODAwMDAwMDAwMDEzMDAwMEMwMDAwMDAwMEM1Cis6MTAyNUEwMDAwMTMwMDAxMDAwMDAwMDAwMDEzMDAwMTQwMDAwMDAwMEE1Cis6MTAyNUIwMDAwMjMwMDAyMDAwMDAwMDAxMDIzMDAwMjQwMDAwMDAwMjcwCis6MTAyNUMwMDAwMjMwMDAyODAwMDAwMDAzMDIzMDAwMkMwMDAwMDAwMDUwCis6MTAyNUQwMDAwMjMwMDAzMDAwMDAwMDA0MDIzMDAwMzQwMDAwMDAwMTJFCis6MTAyNUUwMDAwMjMwMDAzODAwMDAwMDAwMDIzMDAwM0MwMDAwMDAwMTEyCis6MTAyNUYwMDAwMjMwMDA0MDAwMDAwMDA0MDIzMDAwNDQwMDAwMDAwMEVGCis6MTAyNjAwMDAwMjMwMDA0ODAwMDAwMDAxMDIzMDAwNEMwMDAwMDAwM0NFCis6MTAyNjEwMDAwMjMwMDA1MDAwMDAwMDAwMDIzMDAwNTQwMDAwMDAwMUIxCis6MTAyNjIwMDAwMjMwMDA1ODAwMDAwMDA0MDIzMDAwNUMwMDAwMDAwMDhFCis6MTAyNjMwMDAwMjMwMDA2MDAwMDAwMDAxMDIzMDAwNjQwMDAwMDAwMzZFCis6MTAyNjQwMDAwMjMwMDA2ODAwMDAwMDAwMDIzMDAwNkMwMDAwMDAwMTUxCis6MTAyNjUwMDAwMjMwMDA3MDAwMDAwMDA0MDIzMDAwNzQwMDAwMDAwMDJFCis6MTAyNjYwMDAwMjMwMDA3ODAwMDAwMDA0MDIzMDAwN0MwMDAwMDAwMzBCCis6MTAyNjcwMDAwNjMwMDA4MDAwMDAwMDAyMDIzMDAwQTQwMDAwN0ZGRjRFCis6MTAyNjgwMDAwMjMwMDBBODAwMDAwM0ZGMDIzMDAyMjQwMDAwMDAwMDE2Cis6MTAyNjkwMDAwMjMwMDIzNDAwMDAwMDAwMDIzMDAyNEMwMDAwMDAwMDUyCis6MTAyNkEwMDAwMjMwMDJFNDAwMDBGRkZGMDYzMDIwMDAwMDAwMDgwMEI2Cis6MTAyNkIwMDAwMjMzOEJDMDAwMDAwMDAxMDIzMzgwMDAwMDAwMDAxQUNBCis6MTAyNkMwMDAwMjMzODA0MDAwMDAwMDRFMDIzMzgwODAwMDAwMDAxMDgyCis6MTAyNkQwMDAwMjMzODBDMDAwMDAwMDIwMEMzMzgzMDAwMDA4NjQ3MEM3Cis6MTAyNkUwMDAwQTMzODMwMDAwMDAwMTU3MEIzMzgzMDAwMDAwMDU1RkFECis6MTAyNkYwMDAwQTMzODM0MDAwMDAwMDAwMEMzMzgzNDAwMDAwMDIyNkIwCis6MTAyNzAwMDAwQjMzODM0MDAwMDAwMDAxMDIzMzgzODAwMDA4NjQ3MEIzCis6MTAyNzEwMDAwMjMzODNDMDAwMDAwMjI2MDIzMzE0ODAwMDAwMDAwMTRGCis6MTAyNzIwMDAwQTMzMTQ4MDAwMDAwMDAwMDYzMjgwMDAwMDAwMDEwMjFECis6MTAyNzMwMDAwNjMyMjAwODAwMDAwMEM4MDYzMjIwMDAwMDAwMDAwMjE3Cis6MTAyNzQwMDAwNDMyODUyMDAwOEYwNDM2MDYzMjg3NUMwMDAwMDAwOUMxCis6MTAyNzUwMDAwNjMyM0VCMDAwMDAwMDA2MDYzMjNFRDAwMDAwMDAwMjA1Cis6MTAyNzYwMDAwNjMyM0U4MDAwMDAwMDBBMDQzMjNFQTgwMDAyMDRDNTgyCis6MTAyNzcwMDAwNjMyM0UwMDAwMDAwMDIwMDYzMjUwMDAwMDAwMDk0MEYyCis6MTAyNzgwMDAwNjMyNDAwMDAwMDAwMDA0MDQzMjk0QzAwMDAyMDRDNzc2Cis6MTAyNzkwMDAwNjMyNDExMDAwMDAwMDAyMDYzMkQwMDAwMDAwMDA3MDM2Cis6MTAyN0EwMDAwNjMyREIwMDAwMDAwMEQ0MDYzMkRFQTAwMDAwMDAwMjhBCis6MTAyN0IwMDAwNjMyRTAwMDAwMDAwODAwMDYzMzI0MDAwMDAwMDExODgzCis6MTAyN0MwMDAwNjMyMTAwMDAwMDAwMTg4MDYzMjUwMDAwMDAwMDAyMDkwCis6MTAyN0QwMDAwNjMyNTEwMDAwMDAwMDIwMDYzMjUyMDAwMDAwMDAyMEE2Cis6MTAyN0UwMDAwNjMyNTMwMDAwMDAwMDIwMDYzMjU0MDAwMDAwMDAyMDkyCis6MTAyN0YwMDAwNjMyNTUwMDAwMDAwMDIwMDYzMjU2MDAwMDAwMDAyMDdFCis6MTAyODAwMDAwNjMyNTcwMDAwMDAwMDIwMDYzMjU4MDAwMDAwMDAyMDY5Cis6MTAyODEwMDAwNjMyNTkwMDAwMDAwMDIwMDYzMjVBMDAwMDAwMDAyMDU1Cis6MTAyODIwMDAwNjMyNUIwMDAwMDAwMDIwMDYzMjVDMDAwMDAwMDAyMDQxCis6MTAyODMwMDAwNjMyNUQwMDAwMDAwMDIwMDYzMjVFMDAwMDAwMDAyMDJECis6MTAyODQwMDAwNjMyNUYwMDAwMDAwMDIwMDYzMjg0RjAwMDAwMDAwMjIzCis6MTAyODUwMDAwNDMyODUwMDAwMDIwNEM5MDYzMjg1MDgwMDAwMDAwMjI3Cis6MTAyODYwMDAwNjMyREU5MDAwMDAwMDAyMDYzMzI4NjAwMDAwMDExOEU2Cis6MTAyODcwMDAwNjMyMTYyMDAwMDAwMTg4MDYzMjUwODAwMDAwMDAyMDM5Cis6MTAyODgwMDAwNjMyNTE4MDAwMDAwMDIwMDYzMjUyODAwMDAwMDAyMEY1Cis6MTAyODkwMDAwNjMyNTM4MDAwMDAwMDIwMDYzMjU0ODAwMDAwMDAyMEUxCis6MTAyOEEwMDAwNjMyNTU4MDAwMDAwMDIwMDYzMjU2ODAwMDAwMDAyMENECis6MTAyOEIwMDAwNjMyNTc4MDAwMDAwMDIwMDYzMjU4ODAwMDAwMDAyMEI5Cis6MTAyOEMwMDAwNjMyNTk4MDAwMDAwMDIwMDYzMjVBODAwMDAwMDAyMEE1Cis6MTAyOEQwMDAwNjMyNUI4MDAwMDAwMDIwMDYzMjVDODAwMDAwMDAyMDkxCis6MTAyOEUwMDAwNjMyNUQ4MDAwMDAwMDIwMDYzMjVFODAwMDAwMDAyMDdECis6MTAyOEYwMDAwNjMyNUY4MDAwMDAwMDIwMDYzMjg0RjgwMDAwMDAwMkVCCis6MTAyOTAwMDAwNDMyODUxMDAwMDIwNENCMDYzMjg1MTgwMDAwMDAwMjU0Cis6MTAyOTEwMDAwNjMyREU5ODAwMDAwMDAyMDIzMjg0NTAwMDAwMDAwMEZGCis6MTAyOTIwMDAwNjMyNDAxMDAwMDAwMDAyMDIzMjg0NTQwMDAwMDAwMDExCis6MTAyOTMwMDAwNjMyNDAyMDAwMDAwMDAyMDIzMjg0NTgwMDAwMDAwMEVECis6MTAyOTQwMDAwNjMyNDAzMDAwMDAwMDAyMDIzMjg0NUMwMDAwMDAwMEM5Cis6MTAyOTUwMDAwNjMyNDA0MDAwMDAwMDAyMDIzMjg0NjAwMDAwMDAwMEE1Cis6MTAyOTYwMDAwNjMyNDA1MDAwMDAwMDAyMDIzMjg0NjQwMDAwMDAwMDgxCis6MTAyOTcwMDAwNjMyNDA2MDAwMDAwMDAyMDIzMjg0NjgwMDAwMDAwMDVECis6MTAyOTgwMDAwNjMyNDA3MDAwMDAwMDAyMDIzMjg0NkMwMDAwMDAwMDM5Cis6MTAyOTkwMDAwNjMyNDA4MDAwMDAwMDAyMDcyMDA0MDAwMDczMDAwMDlGCis6MTAyOUEwMDAwODIwMDc4MDAwMTAwNENEMDcyNDAwMDAyQUU0MDAwMDVFCis6MTAyOUIwMDAwNzI0ODAwMDI3NjcwQUJBMDgyNEQzNTA2M0ZDMDRDRjk5Cis6MTAyOUMwMDAwMjIwMDBCQzAwMDAwMDMwMDEyMDAwMDAwMDAwMDAwMEQ4Cis6MTAyOUQwMDAwMTIwMDAwNDAwMDAwMDAwMDEyMDAwMDgwMDAwMDAwMEE5Cis6MTAyOUUwMDAwMTIwMDAwQzAwMDAwMDAwMDEyMDAwMTAwMDAwMDAwMDg5Cis6MTAyOUYwMDAwMTIwMDAxNDAwMDAwMDAwMDIyMDAwMjAwMDAwMDAwMTVGCis6MTAyQTAwMDAwMjIwMDAyNDAwMDAwMDAyMDIyMDAwMjgwMDAwMDAwMzMxCis6MTAyQTEwMDAwMjIwMDAyQzAwMDAwMDAwMDIyMDAwMzAwMDAwMDAwNDEyCis6MTAyQTIwMDAwMjIwMDAzNDAwMDAwMDAxMDIyMDAwMzgwMDAwMDAwMEY1Cis6MTAyQTMwMDAwMjIwMDAzQzAwMDAwMDAxMDIyMDAwNDAwMDAwMDAwNEQxCis6MTAyQTQwMDAwMjIwMDA0NDAwMDAwMDAwMDIyMDAwNDgwMDAwMDAwMUI1Cis6MTAyQTUwMDAwMjIwMDA0QzAwMDAwMDAzMDIyMDAwNTAwMDAwMDAwMDkzCis6MTAyQTYwMDAwMjIwMDA1NDAwMDAwMDAxMDIyMDAwNTgwMDAwMDAwNDcxCis6MTAyQTcwMDAwMjIwMDA1QzAwMDAwMDAwMDIyMDAwNjAwMDAwMDAwMTU1Cis6MTAyQTgwMDAwMjIwMDA2NDAwMDAwMDAzMDIyMDAwNjgwMDAwMDAwMDMzCis6MTAyQTkwMDAwMjIwMDA2QzAwMDAwMDAxMDIyMDAwNzAwMDAwMDAwNDExCis6MTAyQUEwMDAwMjIwMDA3NDAwMDAwMDAwMDIyMDAwNzgwMDAwMDAwNEYyCis6MTAyQUIwMDAwMjIwMDA3QzAwMDAwMDAzMDYyMDAwODAwMDAwMDAwMkNECis6MTAyQUMwMDAwMjIwMDBBNDAwMDA3RkZGMDIyMDAwQTgwMDAwMDNGRkY2Cis6MTAyQUQwMDAwMjIwMDIyNDAwMDAwMDAwMDIyMDAyMzQwMDAwMDAwMDU2Cis6MTAyQUUwMDAwMjIwMDI0QzAwMDAwMDAwMDIyMDAyRTQwMDAwRkZGRjcwCis6MTAyQUYwMDAwNjIwMjAwMDAwMDAwODAwMDIyMzhCQzAwMDAwMDAwMTE3Cis6MTAyQjAwMDAwMjIzODAwMDAwMDAwMDEwMDIyMzgwNDAwMDAwMDAxMjE5Cis6MTAyQjEwMDAwMjIzODA4MDAwMDAwMDMwMDIyMzgwQzAwMDAwMDAwRUVECis6MTAyQjIwMDAwQzIzODMwMDAwMDg2NDcwMEEyMzgzMDAwMDAwMDE1NzBGCis6MTAyQjMwMDAwQjIzODMwMDAwMDAwNTVGMEEyMzgzNDAwMDAwMDAwMDkwCis6MTAyQjQwMDAwQzIzODM0MDAwMDAwMjI2MEIyMzgzNDAwMDAwMDAwMTc5Cis6MTAyQjUwMDAwMjIzODM4MDAwMDg2NDcwMDIyMzgzQzAwMDAwMDIyNkUxCis6MTAyQjYwMDAwMjIzMTQ4MDAwMDAwMDAxMEEyMzE0ODAwMDAwMDAwMEVBCis6MTAyQjcwMDAwNjIyMTAwMDAwMDAwMDQyMDYyMjIwMDgwMDAwMDBDOEMzCis6MTAyQjgwMDAwNjIyMjAwMDAwMDAwMDAyMDYyMkIwMDAwMDAwMDMzMEYwCis6MTAyQjkwMDAwNjIyRjQwMDAwMDAwMDUzMDQyMkY1NEMwMDAxMDREMTg5Cis6MTAyQkEwMDAwNjIyRjU1MDAwMDAwMDAzMDQyMkY1NUMwMDAxMDREMjY3Cis6MTAyQkIwMDAwNjIyRjU2MDAwMDAwMDAzMDQyMkY1NkMwMDAxMDREMzM2Cis6MTAyQkMwMDAwNjIyRjU3MDAwMDAwMDAzMDQyMkY1N0MwMDAxMDRENDA1Cis6MTAyQkQwMDAwNjIyRjU4MDAwMDAwMDAzMDQyMkY1OEMwMDAxMDRENUQ0Cis6MTAyQkUwMDAwNjIyRjU5MDAwMDAwMDAzMDQyMkY1OUMwMDAxMDRENkEzCis6MTAyQkYwMDAwNjIyRjVBMDAwMDAwMDAzMDQyMkY1QUMwMDAxMDRENzcyCis6MTAyQzAwMDAwNjIyRjVCMDAwMDAwMDAzMDQyMkY1QkMwMDAxMDREODQwCis6MTAyQzEwMDAwNjIyRjVDMDAwMDAwMDQ2MDYyMkUyMDAwMDAwMDQ0MDQzCis6MTAyQzIwMDAwNDIyMTI0MDAwOTAwNEQ5MDYyMjMwMDAwMDAwMDBDMEE3Cis6MTAyQzMwMDAwNjIyNjcwMDAwMDAwMTAwMDYyMjkwMDAwMDAwMDQwMDQ4Cis6MTAyQzQwMDAwNDIyNkIwODAwMjAwNTY5MDYyMjExRjAwMDAwMDAwNjJFCis6MTAyQzUwMDAwNDIyMTIwODAwMDYwNTg5MDYyMjEyMjAwMDAwMDAwMjQ0Cis6MTAyQzYwMDAwNjIyNDAwMDAwMDAwNUMwMDYyMkMwMDAwMDAwMDAwNjQ5Cis6MTAyQzcwMDAwNDIyQzAxODAwMDYwNThGMDYyMkMwMzAwMDAwMDAwQTlBCis6MTAyQzgwMDAwNDIyQzA1ODAwMDYwNTk1MDYyMkMwNzAwMDAwMDAwQTA0Cis6MTAyQzkwMDAwNDIyQzA5ODAwMDYwNTlCMDYyMkMwQjAwMDAwMDAwQTZFCis6MTAyQ0EwMDAwNDIyQzBEODAwMDYwNUExMDYyMkMwRjAwMDAwMDAwQUQ4Cis6MTAyQ0IwMDAwNDIyQzExODAwMDYwNUE3MDYyMkMxMzAwMDAwMDAwQTQwCis6MTAyQ0MwMDAwNDIyQzE1ODAwMDYwNUFEMDYyMkMxNzAwMDAwMDAwQUFBCis6MTAyQ0QwMDAwNDIyQzE5ODAwMDYwNUIzMDYyMkMxQjAwMDAwMDAwQTE0Cis6MTAyQ0UwMDAwNDIyQzFEODAwMDYwNUI5MDYyMkMxRjAwMDAwMDAwQTdFCis6MTAyQ0YwMDAwNDIyQzIxODAwMDYwNUJGMDYyMkMyMzAwMDAwMDAwQUU2Cis6MTAyRDAwMDAwNDIyQzI1ODAwMDYwNUM1MDYyMkMyNzAwMDAwMDAwQTRGCis6MTAyRDEwMDAwNDIyQzI5ODAwMDYwNUNCMDYyMkMyQjAwMDAwMDAwQUI5Cis6MTAyRDIwMDAwNDIyQzJEODAwMDYwNUQxMDYyMkMyRjAwMDAwMDAwQTIzCis6MTAyRDMwMDAwNDIyQzMxODAwMDYwNUQ3MDYyMkMzMzAwMDAwMDAwQThCCis6MTAyRDQwMDAwNDIyQzM1ODAwMDYwNUREMDYyMkMzNzAwMDAwMDAwQUY1Cis6MTAyRDUwMDAwNDIyQzM5ODAwMDYwNUUzMDYyMkMzQjAwMDAwMDAwQTVGCis6MTAyRDYwMDAwNDIyQzNEODAwMDYwNUU5MDYyMkMzRjAwMDAwMDAwQUM5Cis6MTAyRDcwMDAwNDIyQzQxODAwMDYwNUVGMDYyMkM0MzAwMDAwMDAwQTMxCis6MTAyRDgwMDAwNDIyQzQ1ODAwMDYwNUY1MDYyMkM0NzAwMDAwMDAwQTlCCis6MTAyRDkwMDAwNDIyQzQ5ODAwMDYwNUZCMDYyMkM0QjAwMDAwMDAwQTA1Cis6MTAyREEwMDAwNDIyQzREODAwMDYwNjAxMDYyMkM0RjAwMDAwMDAwQTZFCis6MTAyREIwMDAwNDIyQzUxODAwMDYwNjA3MDYyMkM1MzAwMDAwMDAwQUQ2Cis6MTAyREMwMDAwNDIyQzU1ODAwMDYwNjBEMDYyMkM1NzAwMDAwMDAwQTQwCis6MTAyREQwMDAwNDIyQzU5ODAwMDYwNjEzMDYyMkM1QjAwMDAwMDAwQUFBCis6MTAyREUwMDAwNDIyQzVEODAwMDYwNjE5MDYyMkM1RjAwMDAwMDAwQTE0Cis6MTAyREYwMDAwNDIyQzYxODAwMDYwNjFGMDYyMkM2MzAwMDAwMDAwQTdDCis6MTAyRTAwMDAwNDIyQzY1ODAwMDYwNjI1MDYyMkM2NzAwMDAwMDAwQUU1Cis6MTAyRTEwMDAwNDIyQzY5ODAwMDYwNjJCMDYyMkM2QjAwMDAwMDAwQTRGCis6MTAyRTIwMDAwNDIyQzZEODAwMDYwNjMxMDYyMkM2RjAwMDAwMDAwQUI5Cis6MTAyRTMwMDAwNDIyQzcxODAwMDYwNjM3MDYyMkM3MzAwMDAwMDAwQTIxCis6MTAyRTQwMDAwNDIyQzc1ODAwMDYwNjNEMDYyMkM3NzAwMDAwMDAwQThCCis6MTAyRTUwMDAwNDIyQzc5ODAwMDYwNjQzMDYyMkM3QjAwMDAwMDAwQUY1Cis6MTAyRTYwMDAwNDIyQzdEODAwMDYwNjQ5MDYyMkM3RjAwMDAwMDAwQTVGCis6MTAyRTcwMDAwNDIyQzgxODAwMDYwNjRGMDYyMkM4MzAwMDAwMDAwQUM3Cis6MTAyRTgwMDAwNDIyQzg1ODAwMDYwNjU1MDYyMkM4NzAwMDAwMDAwQTMxCis6MTAyRTkwMDAwNDIyQzg5ODAwMDYwNjVCMDYyMkM4QjAwMDAwMDAwQTlCCis6MTAyRUEwMDAwNDIyQzhEODAwMDYwNjYxMDYyMkM4RjAwMDAwMDAwQTA1Cis6MTAyRUIwMDAwNDIyQzkxODAwMDYwNjY3MDYyMkM5MzAwMDAwMDAwQTZECis6MTAyRUMwMDAwNDIyQzk1ODAwMDYwNjZEMDYyMkM5NzAwMDAwMDAwQUQ3Cis6MTAyRUQwMDAwNDIyQzk5ODAwMDYwNjczMDYyMkM5QjAwMDAwMDAwQTQxCis6MTAyRUUwMDAwNDIyQzlEODAwMDYwNjc5MDYyMkM5RjAwMDAwMDAwQUFCCis6MTAyRUYwMDAwNDIyQ0ExODAwMDYwNjdGMDYyMkNBMzAwMDAwMDAwQTEzCis6MTAyRjAwMDAwNDIyQ0E1ODAwMDYwNjg1MDYyMkNBNzAwMDAwMDAwQTdDCis6MTAyRjEwMDAwNDIyQ0E5ODAwMDYwNjhCMDYyMkNBQjAwMDAwMDAwQUU2Cis6MTAyRjIwMDAwNDIyQ0FEODAwMDYwNjkxMDYyMkNBRjAwMDAwMDAwQTUwCis6MTAyRjMwMDAwNDIyQ0IxODAwMDYwNjk3MDYyMkNCMzAwMDAwMDAwQUI4Cis6MTAyRjQwMDAwNDIyQ0I1ODAwMDYwNjlEMDYyMkNCNzAwMDAwMDAwQTIyCis6MTAyRjUwMDAwNDIyQ0I5ODAwMDYwNkEzMDYyMkNCQjAwMDAwMDAwQThDCis6MTAyRjYwMDAwNDIyQ0JEODAwMDYwNkE5MDYyMkNCRjAwMDAwMDAwQUY2Cis6MTAyRjcwMDAwNDIyQ0MxODAwMDYwNkFGMDYyMkNDMzAwMDAwMDAwQTVFCis6MTAyRjgwMDAwNDIyQ0M1ODAwMDYwNkI1MDYyMkNDNzAwMDAwMDAwQUM4Cis6MTAyRjkwMDAwNDIyQ0M5ODAwMDYwNkJCMDYyMkNDQjAwMDAwMDAwQTMyCis6MTAyRkEwMDAwNDIyQ0NEODAwMDYwNkMxMDYyMkNDRjAwMDAwMDAwQTlDCis6MTAyRkIwMDAwNDIyQ0QxODAwMDYwNkM3MDYyMkNEMzAwMDAwMDAwQTA0Cis6MTAyRkMwMDAwNDIyQ0Q1ODAwMDYwNkNEMDYyMkNENzAwMDAwMDAwQTZFCis6MTAyRkQwMDAwNDIyQ0Q5ODAwMDYwNkQzMDYyMkNEQjAwMDAwMDAwQUQ4Cis6MTAyRkUwMDAwNDIyQ0REODAwMDYwNkQ5MDYyMkNERjAwMDAwMDAwQTQyCis6MTAyRkYwMDAwNDIyQ0UxODAwMDYwNkRGMDYyMkNFMzAwMDAwMDAwQUFBCis6MTAzMDAwMDAwNDIyQ0U1ODAwMDYwNkU1MDYyMkNFNzAwMDAwMDAwQTEzCis6MTAzMDEwMDAwNDIyQ0U5ODAwMDYwNkVCMDYyMkNFQjAwMDAwMDAwQTdECis6MTAzMDIwMDAwNDIyQ0VEODAwMDYwNkYxMDYyMkNFRjAwMDAwMDAwQUU3Cis6MTAzMDMwMDAwNDIyQ0YxODAwMDYwNkY3MDYyMkNGMzAwMDAwMDAwQTRGCis6MTAzMDQwMDAwNDIyQ0Y1ODAwMDYwNkZEMDYyMkNGNzAwMDAwMDAwQUI5Cis6MTAzMDUwMDAwNDIyQ0Y5ODAwMDYwNzAzMDYyMkNGQjAwMDAwMDAwQTIyCis6MTAzMDYwMDAwNDIyQ0ZEODAwMDYwNzA5MDYyMkNGRjAwMDAwMDAwQThDCis6MTAzMDcwMDAwNDIyRDAxODAwMDYwNzBGMDYyMkQwMzAwMDAwMDAwQUY0Cis6MTAzMDgwMDAwNDIyRDA1ODAwMDYwNzE1MDYyMkQwNzAwMDAwMDAwQTVFCis6MTAzMDkwMDAwNDIyRDA5ODAwMDYwNzFCMDYyMkQwQjAwMDAwMDAwQUM4Cis6MTAzMEEwMDAwNDIyRDBEODAwMDYwNzIxMDYyMkQwRjAwMDAwMDAwQTMyCis6MTAzMEIwMDAwNDIyRDExODAwMDYwNzI3MDYyMkQxMzAwMDAwMDAwQTlBCis6MTAzMEMwMDAwNDIyRDE1ODAwMDYwNzJEMDYyMkQxNzAwMDAwMDAwQTA0Cis6MTAzMEQwMDAwNDIyRDE5ODAwMDYwNzMzMDYyMkQxQjAwMDAwMDAwQTZFCis6MTAzMEUwMDAwNDIyRDFEODAwMDYwNzM5MDYyMkQxRjAwMDAwMDAwQUQ4Cis6MTAzMEYwMDAwNDIyRDIxODAwMDYwNzNGMDYyMkQyMzAwMDAwMDAwQTQwCis6MTAzMTAwMDAwNDIyRDI1ODAwMDYwNzQ1MDYyMkQyNzAwMDAwMDAwQUE5Cis6MTAzMTEwMDAwNDIyRDI5ODAwMDYwNzRCMDYyMkQyQjAwMDAwMDAwQTEzCis6MTAzMTIwMDAwNDIyRDJEODAwMDYwNzUxMDYyMkQyRjAwMDAwMDAwQTdECis6MTAzMTMwMDAwNDIyRDMxODAwMDYwNzU3MDYyMkQzMzAwMDAwMDAwQUU1Cis6MTAzMTQwMDAwNDIyRDM1ODAwMDYwNzVEMDYyMkQzNzAwMDAwMDAwQTRGCis6MTAzMTUwMDAwNDIyRDM5ODAwMDYwNzYzMDYyMkQzQjAwMDAwMDAwQUI5Cis6MTAzMTYwMDAwNDIyRDNEODAwMDYwNzY5MDYyMkQzRjAwMDAwMDAwQTIzCis6MTAzMTcwMDAwNDIyRDQxODAwMDYwNzZGMDYyMkQ0MzAwMDAwMDAwQThCCis6MTAzMTgwMDAwNDIyRDQ1ODAwMDYwNzc1MDYyMkQ0NzAwMDAwMDAwQUY1Cis6MTAzMTkwMDAwNDIyRDQ5ODAwMDYwNzdCMDYyMkQ0QjAwMDAwMDAwQTVGCis6MTAzMUEwMDAwNDIyRDREODAwMDYwNzgxMDYyMkQ0RjAwMDAwMDAwQUM5Cis6MTAzMUIwMDAwNDIyRDUxODAwMDYwNzg3MDYyMkQ1MzAwMDAwMDAwQTMxCis6MTAzMUMwMDAwNDIyRDU1ODAwMDYwNzhEMDYyMkQ1NzAwMDAwMDAwQTlCCis6MTAzMUQwMDAwNDIyRDU5ODAwMDYwNzkzMDYyMkQ1QjAwMDAwMDAwQTA1Cis6MTAzMUUwMDAwNDIyRDVEODAwMDYwNzk5MDYyMkQ1RjAwMDAwMDAwQTZGCis6MTAzMUYwMDAwNDIyRDYxODAwMDYwNzlGMDYyMkQ2MzAwMDAwMDAwQUQ3Cis6MTAzMjAwMDAwNDIyRDY1ODAwMDYwN0E1MDYyMkQ2NzAwMDAwMDAwQTQwCis6MTAzMjEwMDAwNDIyRDY5ODAwMDYwN0FCMDYyMkQ2QjAwMDAwMDAwQUFBCis6MTAzMjIwMDAwNDIyRDZEODAwMDYwN0IxMDYyMkQ2RjAwMDAwMDAwQTE0Cis6MTAzMjMwMDAwNDIyRDcxODAwMDYwN0I3MDYyMkQ3MzAwMDAwMDAwQTdDCis6MTAzMjQwMDAwNDIyRDc1ODAwMDYwN0JEMDYyMkQ3NzAwMDAwMDAwQUU2Cis6MTAzMjUwMDAwNDIyRDc5ODAwMDYwN0MzMDYyMkQ3QjAwMDAwMDAwQTUwCis6MTAzMjYwMDAwNDIyRDdEODAwMDYwN0M5MDYyMkQ3RjAwMDAwMDAwQUJBCis6MTAzMjcwMDAwNDIyRDgxODAwMDYwN0NGMDYyMkQ4MzAwMDAwMDAwQTIyCis6MTAzMjgwMDAwNDIyRDg1ODAwMDYwN0Q1MDYyMkQ4NzAwMDAwMDAwQThDCis6MTAzMjkwMDAwNDIyRDg5ODAwMDYwN0RCMDYyMkQ4QjAwMDAwMDAwQUY2Cis6MTAzMkEwMDAwNDIyRDhEODAwMDYwN0UxMDYyMkQ4RjAwMDAwMDAwQTYwCis6MTAzMkIwMDAwNDIyRDkxODAwMDYwN0U3MDYyMkQ5MzAwMDAwMDAwQUM4Cis6MTAzMkMwMDAwNDIyRDk1ODAwMDYwN0VEMDYyMkQ5NzAwMDAwMDAwQTMyCis6MTAzMkQwMDAwNDIyRDk5ODAwMDYwN0YzMDYyMkQ5QjAwMDAwMDAwQTlDCis6MTAzMkUwMDAwNDIyRDlEODAwMDYwN0Y5MDYyMkQ5RjAwMDAwMDAwQTA2Cis6MTAzMkYwMDAwNDIyREExODAwMDYwN0ZGMDYyMkRBMzAwMDAwMDAwQTZFCis6MTAzMzAwMDAwNDIyREE1ODAwMDYwODA1MDYyMkRBNzAwMDAwMDAwQUQ2Cis6MTAzMzEwMDAwNDIyREE5ODAwMDYwODBCMDYyMkRBQjAwMDAwMDAwQTQwCis6MTAzMzIwMDAwNDIyREFEODAwMDYwODExMDYyMkRBRjAwMDAwMDAwQUFBCis6MTAzMzMwMDAwNDIyREIxODAwMDYwODE3MDYyMkRCMzAwMDAwMDAwQTEyCis6MTAzMzQwMDAwNDIyREI1ODAwMDYwODFEMDYyMkRCNzAwMDAwMDAwQTdDCis6MTAzMzUwMDAwNDIyREI5ODAwMDYwODIzMDYyMkRCQjAwMDAwMDAwQUU2Cis6MTAzMzYwMDAwNDIyREJEODAwMDYwODI5MDYyMkRCRjAwMDAwMDAwQTUwCis6MTAzMzcwMDAwNDIyREMxODAwMDYwODJGMDYyMkRDMzAwMDAwMDAwQUI4Cis6MTAzMzgwMDAwNDIyREM1ODAwMDYwODM1MDYyMkRDNzAwMDAwMDAwQTIyCis6MTAzMzkwMDAwNDIyREM5ODAwMDYwODNCMDYyMkRDQjAwMDAwMDAwQThDCis6MTAzM0EwMDAwNDIyRENEODAwMDYwODQxMDYyMkRDRjAwMDAwMDAwQUY2Cis6MTAzM0IwMDAwNDIyREQxODAwMDYwODQ3MDYyMkREMzAwMDAwMDAwQTVFCis6MTAzM0MwMDAwNDIyREQ1ODAwMDYwODREMDYyMkRENzAwMDAwMDAwQUM4Cis6MTAzM0QwMDAwNDIyREQ5ODAwMDYwODUzMDYyMkREQjAwMDAwMDAwQTMyCis6MTAzM0UwMDAwNDIyREREODAwMDYwODU5MDYyMkRERjAwMDAwMDAwQTlDCis6MTAzM0YwMDAwNDIyREUxODAwMDYwODVGMDYyMkRFMzAwMDAwMDAwQTA0Cis6MTAzNDAwMDAwNDIyREU1ODAwMDYwODY1MDYyMkRFNzAwMDAwMDAwQTZECis6MTAzNDEwMDAwNDIyREU5ODAwMDYwODZCMDYyMkRFQjAwMDAwMDAwQUQ3Cis6MTAzNDIwMDAwNDIyREVEODAwMDYwODcxMDYyMkRFRjAwMDAwMDAwQTQxCis6MTAzNDMwMDAwNDIyREYxODAwMDYwODc3MDYyMkRGMzAwMDAwMDAwQUE5Cis6MTAzNDQwMDAwNDIyREY1ODAwMDYwODdEMDYyMkRGNzAwMDAwMDAwQTEzCis6MTAzNDUwMDAwNDIyREY5ODAwMDYwODgzMDYyMkRGQjAwMDAwMDAwQTdECis6MTAzNDYwMDAwNDIyREZEODAwMDYwODg5MDYyMkRGRjAwMDAwMDAwQUU3Cis6MTAzNDcwMDAwNDIyRTAxODAwMDYwODhGMDYyMkUwMzAwMDAwMDAwQTRGCis6MTAzNDgwMDAwNDIyRTA1ODAwMDYwODk1MDYyMkUwNzAwMDAwMDAwQUI5Cis6MTAzNDkwMDAwNDIyRTA5ODAwMDYwODlCMDYyMkUwQjAwMDAwMDAwQTIzCis6MTAzNEEwMDAwNDIyRTBEODAwMDYwOEExMDYyMkUwRjAwMDAwMDAwQThECis6MTAzNEIwMDAwNDIyRTExODAwMDYwOEE3MDYyMkUxMzAwMDAwMDAwQUY1Cis6MTAzNEMwMDAwNDIyRTE1ODAwMDYwOEFEMDYyMkUxNzAwMDAwMDAwQTVGCis6MTAzNEQwMDAwNDIyRTE5ODAwMDYwOEIzMDYyMkUxQjAwMDAwMDAwQUM5Cis6MTAzNEUwMDAwNDIyRTFEODAwMDYwOEI5MDYyMkUxRjAwMDAwMDAwNDM5Cis6MTAzNEYwMDAwNjIyMTUzODAwMDAwMDAyMDYyMjExRTgwMDAwMDAwMjMyCis6MTAzNTAwMDAwNjIyRjMwMDAwMDAwMDA4MDIyMjExNDgwMDAwMDAwMDFCCis6MTAzNTEwMDAwNjIyNTkwMDAwMDAwMDA2MDYyMjMzMDAwMDAwMDAwMkM3Cis6MTAzNTIwMDAwNjIyNjA0MDAwMDAwMDMwMDYyMkYzMjAwMDAwMDAwODYwCis6MTAzNTMwMDAwMjIyMTE0QzAwMDAwMDAwMDYyMjU5MTgwMDAwMDAwNjZCCis6MTAzNTQwMDAwNjIyMzMwODAwMDAwMDAyMDYyMjYxMDAwMDAwMDAzMDVECis6MTAzNTUwMDAwNjIyRjM0MDAwMDAwMDA4MDIyMjExNTAwMDAwMDAwMDgzCis6MTAzNTYwMDAwNjIyNTkzMDAwMDAwMDA2MDYyMjMzMTAwMDAwMDAwMjM3Cis6MTAzNTcwMDAwNjIyNjFDMDAwMDAwMDMwMDYyMkYzNjAwMDAwMDAwODRGCis6MTAzNTgwMDAwMjIyMTE1NDAwMDAwMDAwMDYyMjU5NDgwMDAwMDAwNkUzCis6MTAzNTkwMDAwNjIyMzMxODAwMDAwMDAyMDYyMjYyODAwMDAwMDAzMDdDCis6MTAzNUEwMDAwNjIyRjM4MDAwMDAwMDA4MDIyMjExNTgwMDAwMDAwMEVCCis6MTAzNUIwMDAwNjIyNTk2MDAwMDAwMDA2MDYyMjMzMjAwMDAwMDAwMkE3Cis6MTAzNUMwMDAwNjIyNjM0MDAwMDAwMDMwMDYyMkYzQTAwMDAwMDAwODNECis6MTAzNUQwMDAwMjIyMTE1QzAwMDAwMDAwMDYyMjU5NzgwMDAwMDAwNjVCCis6MTAzNUUwMDAwNjIyMzMyODAwMDAwMDAyMDYyMjY0MDAwMDAwMDAzMDlBCis6MTAzNUYwMDAwNjIyRjNDMDAwMDAwMDA4MDIyMjExNjAwMDAwMDAwMDUzCis6MTAzNjAwMDAwNjIyNTk5MDAwMDAwMDA2MDYyMjMzMzAwMDAwMDAwMjE2Cis6MTAzNjEwMDAwNjIyNjRDMDAwMDAwMDMwMDYyMkYzRTAwMDAwMDAwODJCCis6MTAzNjIwMDAwMjIyMTE2NDAwMDAwMDAwMDYyMjU5QTgwMDAwMDAwNkQyCis6MTAzNjMwMDAwNjIyMzMzODAwMDAwMDAyMDYyMjY1ODAwMDAwMDAzMEI4Cis6MTAzNjQwMDAwMjE2MTAwMDAwMDAwMDI4MDIxNzAwMDgwMDAwMDAwMjA3Cis6MTAzNjUwMDAwMjE3MDAyQzAwMDAwMDAzMDIxNzAwM0MwMDAwMDAwNEM5Cis6MTAzNjYwMDAwMjE3MDA0NDAwMDAwMDAwMDIxNzAwNDgwMDAwMDAwMjlBCis6MTAzNjcwMDAwMjE3MDA0QzAwMDAwMDkwMDIxNzAwNTAwMDAwMDA5MDVDCis6MTAzNjgwMDAwMjE3MDA1NDAwODAwMDkwMDIxNzAwNTgwODEwMDAwMDM0Cis6MTAzNjkwMDAwMjE3MDA3MDAwMDAwMDA2MDIxNzAwNzgwMDAwMDlGRjAyCis6MTAzNkEwMDAwMjE3MDA3QzAwMDAwNzZDMDIxNzAxQzQwODEwMDAwMDFDCis6MTAzNkIwMDAwMjE3MDM0NDAwMDAwMDAxMDIxNzA0MDAwMDAwMDA4QTAyCis6MTAzNkMwMDAwMjE3MDQwNDAwMDAwMDgwMDIxNzA0MDgwMDAwMDA4MUIzCis6MTAzNkQwMDAwMjE3MDQwQzAwMDAwMDgwMDIxNzA0MTAwMDAwMDA4QThBCis6MTAzNkUwMDAwMjE3MDQxNDAwMDAwMDgwMDIxNzA0MTgwMDAwMDA4MTczCis6MTAzNkYwMDAwMjE3MDQxQzAwMDAwMDgwMDIxNzA0MzAwMDAwMDA4QTNBCis6MTAzNzAwMDAwMjE3MDQzNDAwMDAwMDgwMDIxNzA0MzgwMDAwMDA4MTEyCis6MTAzNzEwMDAwMjE3MDQzQzAwMDAwMDgwMDIxNzA0NDAwMDAwMDA4QUU5Cis6MTAzNzIwMDAwMjE3MDQ0NDAwMDAwMDgwMDIxNzA0NDgwMDAwMDA4MUQyCis6MTAzNzMwMDAwMjE3MDQ0QzAwMDAwMDgwMDIxNzA0ODAwMDAwMDA4QTc5Cis6MTAzNzQwMDAwMjE3MDQ4NDAwMDAwMDgwMDIxNzA0ODgwMDAwMDA4MTMyCis6MTAzNzUwMDAwMjE3MDQ4QzAwMDAwMDgwMDIxNzAwMzgwMDdDMTAwNDVGCis6MTAzNzYwMDAwMjE3MDAwNDAwMDAwMDBGMDIxNzAxRUMwMDAwMDAwMjI1Cis6MTAzNzcwMDAwMjE3MDFGNDAwMDAwMDAyMDIxNzAxRUMwMDAwMDAwMjMxCis6MTAzNzgwMDAwMjE3MDFGNDAwMDAwMDAyMDIxNzAxRUMwMDAwMDAwMjIxCis6MTAzNzkwMDAwMjE3MDFGNDAwMDAwMDAyMDIxNzAxRUMwMDAwMDAwMjExCis6MTAzN0EwMDAwMjE3MDFGNDAwMDAwMDAyMDIxNzAxRUMwMDAwMDAwMjAxCis6MTAzN0IwMDAwMjE3MDFGNDAwMDAwMDAyMDIxNzAxRUMwMDAwMDAwMkYxCis6MTAzN0MwMDAwMjE3MDFGNDAwMDAwMDAyMDIxNzAxRUMwMDAwMDAwMkUxCis6MTAzN0QwMDAwMjE3MDFGNDAwMDAwMDAyMDIxNzAxRUMwMDAwMDAwMkQxCis6MTAzN0UwMDAwMjE3MDFGNDAwMDAwMDAyMDYxNjQwMjQwMDAwMDAwMjQ3Cis6MTAzN0YwMDAwMjE2NDA3MDAwMDAwMDFDMDIxNjQyMDgwMDAwMDAwMTgyCis6MTAzODAwMDAwMjE2NDIxMDAwMDAwMDAxMDIxNjQyMjAwMDAwMDAwMUQyCis6MTAzODEwMDAwMjE2NDIyODAwMDAwMDAxMDIxNjQyMzAwMDAwMDAwMTlBCis6MTAzODIwMDAwMjE2NDIzODAwMDAwMDAxMDIxNjQyNjAwMDAwMDAwMjQ5Cis6MTAzODMwMDAwQzE2NDAxQzAwMDNEMDkwMEExNjQwMUMwMDAwMDA5QzhGCis6MTAzODQwMDAwQjE2NDAxQzAwMDAwMjcxMDIxNjQwMzAwMDAwMDAyOEQ4Cis6MTAzODUwMDAwMjE2NDAzNDAwMDAwMDJDMDIxNjQwMzgwMDAwMDAzMEYwCis6MTAzODYwMDAwMjE2NDA0NDAwMDAwMDIwMDIxNjQwMDAwMDAwMDAwMTQzCis6MTAzODcwMDAwMjE2NDBEODAwMDAwMDAxMDIxNjQwMDgwMDAwMDAwMUI2Cis6MTAzODgwMDAwMjE2NDAwQzAwMDAwMDAxMDIxNjQwMTAwMDAwMDAwMTZBCis6MTAzODkwMDAwMjE2NDI0MDAwMDAwMDAwMDIxNjQyNDgwMDAwMDAwMEVDCis6MTAzOEEwMDAwNjE2NDI3MDAwMDAwMDAyMDIxNjQyNTAwMDAwMDAwMDlFCis6MTAzOEIwMDAwMjE2NDI1ODAwMDAwMDAwMDYxNjQyODAwMDAwMDAwMjc2Cis6MTAzOEMwMDAwMjE2NjAwODAwMDAxMjE0MDIxNjYwMEMwMDAwMTIwMEJDCis6MTAzOEQwMDAwMjE2NjAxMDAwMDAxMjA0MDIxNjYwMUMwMDAwRkZGRkI4Cis6MTAzOEUwMDAwMjE2NjAyMDAwMDBGRkZGMDIxNjYwMjQwMDAwRkZGRkE4Cis6MTAzOEYwMDAwMjE2NjAyODAwMDBGRkZGMDIxNjYwMzgwMDAwMDAyMDVBCis6MTAzOTAwMDAwMjE2NjAzQzAwMDAwMDEwMDYxNjYwNDAwMDAwMDAwMjM1Cis6MTAzOTEwMDAwMjE2NjA0ODAwMDAwMDIzMDIxNjYwNEMwMDAwMDAyNERDCis6MTAzOTIwMDAwMjE2NjA1MDAwMDAwMDI1MDIxNjYwNTQwMDAwMDAyNkI4Cis6MTAzOTMwMDAwMjE2NjA1ODAwMDAwMDI3MDIxNjYwNUMwMDAwMDAxMUFCCis6MTAzOTQwMDAwMjE2NjA2MDAwMDAwMDAwMDIxNjYwNjQwMDAwMDAyQjk4Cis6MTAzOTUwMDAwMjE2NjA2ODAwMDAwMDJDMDIxNjYwNkMwMDAwMDAyRDRBCis6MTAzOTYwMDAwMjE2NjA3MDAwMDAwMEVDMDIxNjYwNzQwMDAwMDAwMDk3Cis6MTAzOTcwMDAwMjE2NjA3ODAwMDAwMDI5MDIxNjYwN0MwMDAwMDAyQTEwCis6MTAzOTgwMDAwMjE2NjA4MDAwMDAwMDJGMDYxNjYwODQwMDAwMDAwRDAzCis6MTAzOTkwMDAwMjE2NjBCODAwMDAwMDAxMDYxNjYwQkMwMDAwMDAwOEI2Cis6MTAzOUEwMDAwMjE2NjBEQzAwMDAwMDAxMDYxNjYwRTAwMDAwMDAwNDYyCis6MTAzOUIwMDAwMjE2NjBGMDAwMDAwMDAxMDYxNjYwRjQwMDAwMDAwMzJCCis6MTAzOUMwMDAwMjE2NjEwMDAwMDAwMDAxMDYxNjYxMDQwMDAwMDAyRENGCis6MTAzOUQwMDAwMjE2NjFCODAwMDAwMDAxMDYxNjYxQkMwMDAwMDAwODc0Cis6MTAzOUUwMDAwMjE2NjFEQzAwMDAwMDAxMDYxNjYxRTAwMDAwMDAwNDIwCis6MTAzOUYwMDAwMjE2NjFGMDAwMDAwMDAxMDYxNjYxRjQwMDAwMDAwM0U5Cis6MTAzQTAwMDAwMjE2NjIwMDAwMDAwMDAxMDYxNjYyMDQwMDAwMDAwREFDCis6MTAzQTEwMDAwMjE2NjIzODA3RkZGRkZGMDIxNjYyM0MwMDAwMDA3RkJCCis6MTAzQTIwMDAwMjE2NjI0MDA3RkZGRkZGMDIxNjYyNDQwMDAwMDAzRkRCCis6MTAzQTMwMDAwMTE2NjI0ODAwMDAwMDAwMDExNjYyNEMwMDAwMDAwMDAwCis6MTAzQTQwMDAwMTE2NjI1MDAwMDAwMDAwMDExNjYyNTQwMDAwMDAwMEUwCis6MTAzQTUwMDAwMTE2NjI1ODAwMDAwMDAwMDExNjYyNUMwMDAwMDAwMEMwCis6MTAzQTYwMDAwMTE2NjI2MDAwMDAwMDAwMDExNjYyNjQwMDAwMDAwMEEwCis6MTAzQTcwMDAwMTE2NjI2ODAwMDAwMDAwMDExNjYyNkMwMDAwMDAwMDgwCis6MTAzQTgwMDAwMTE2NjI3MDAwMDAwMDAwMDExNjYyNzQwMDAwMDAwMDYwCis6MTAzQTkwMDAwMTE2NjI3ODAwMDAwMDAwMDExNjYyN0MwMDAwMDAwMDQwCis6MTAzQUEwMDAwMTE2NjJENDAwMDAwMDAwMDIxNjYyRDgwMDAwRkZGRjc5Cis6MTAzQUIwMDAwMjE2NjJEQzAwMDBGRkZGMDIxNjYyRTAwMDAwRkZGRjVBCis6MTAzQUMwMDAwMjE2NjJFNDAwMDBGRkZGMEMxNjYwMDAwMDAwMDNFODJECis6MTAzQUQwMDAwQTE2NjAwMDAwMDAwMDAxMEIxNjYwMDAwMDAwMDAwM0UxCis6MTAzQUUwMDAwMjE2ODA0MDAwMDAwMDA2MDIxNjgwNDQwMDAwMDAwNTE3Cis6MTAzQUYwMDAwMjE2ODA0ODAwMDAwMDBBMDIxNjgwNEMwMDAwMDAwNUYzCis6MTAzQjAwMDAwMjE2ODA1NDAwMDAwMDAyMDIxNjgwQ0MwMDAwMDAwNDVGCis6MTAzQjEwMDAwMjE2ODBEMDAwMDAwMDA0MDIxNjgwRDQwMDAwMDAwNEM5Cis6MTAzQjIwMDAwMjE2ODBEODAwMDAwMDA0MDIxNjgwREMwMDAwMDAwNEE5Cis6MTAzQjMwMDAwMjE2ODBFMDAwMDAwMDA0MDIxNjgwRTQwMDAwMDAwNDg5Cis6MTAzQjQwMDAwMjE2ODBFODAwMDAwMDA0MDIxNjg4MDQwMDAwMDAwNjQ3Cis6MTAzQjUwMDAwMjE2ODAzMDAwMDAwMDdDMDIxNjgwMzQwMDAwMDAzRDE4Cis6MTAzQjYwMDAwMjE2ODAzODAwMDAwMDNGMDIxNjgwM0MwMDAwMDA5Q0Q2Cis6MTAzQjcwMDAwMjE2RTZFODAwMDA2MDAwMDIxNkU2RUMwMDAwNjAwMEI1Cis6MTAzQjgwMDAwMjE2RTZGMDAwMDA2MDAwMDIxNkU2RjQwMDAwNjAwMDk1Cis6MTAzQjkwMDAwMjE2ODIzNDAwMDAyNUU0MDIxNjgyMzgwMDAwODAwMEZDCis6MTAzQkEwMDAwMjE2ODA5NDAwMDAyNUUzMDIxNjgxRjQwMDAwMEMwODQwCis6MTAzQkIwMDAwMjE2ODFGODAwMDAwMDQwMDIxNjgxRkMwMDAwMDEwMDlFCis6MTAzQkMwMDAwMjE2ODIwMDAwMDAwMDIwMDIxNjgyMDQwMDAwMDAxNzg2Cis6MTAzQkQwMDAwMjE2ODIwODAwMDAwMDgwMDIxNjgyMEMwMDAwMDIwMDFCCis6MTAzQkUwMDAwMjE2ODIxMDAwMDAwMDAwMDIxNjgyM0MwMDAwMDAxMzQyCis6MTAzQkYwMDAwMjE2ODIyMDAwOEYwMDhGMDIxNjgyMUMwMDhGMDA4RjE5Cis6MTAzQzAwMDAwMjE2ODBGMDAwMDAwMDA3MDIxNjgyMTgwMUZGMDFGRjczCis6MTAzQzEwMDAwMjE2ODIxNDAxRkYwMUZGMDYxNjgwRjQwMDAwMDAwMjY0Cis6MTAzQzIwMDAwMjE2ODExQzAwMDAwMDA1MDIxNjgxMjAwMDAwMDAwNTFDCis6MTAzQzMwMDAwMjE2ODEyNDAwMDAwMDA1MDIxNjgxMjgwMDAwMDAwOEY5Cis6MTAzQzQwMDAwMjE2ODEyQzAwMDAwMDA2MDIxNjgxMzAwMDAwMDAwN0Q5Cis6MTAzQzUwMDAwNjE2ODEzNDAwMDAwMDA0MDIxNjgwRkMwMDAwMDAwMEZCCis6MTAzQzYwMDAwNjE2ODE0NDAwMDAwMDAyMDIxNjgxNEMwMDAwMDAwNDg4Cis6MTAzQzcwMDAwMjE2ODE1MDAwMDAwMDAxMDIxNjgxNTQwMDAwMDAwMjZCCis6MTAzQzgwMDAwMjE2ODE1ODAwMDAwMDA1MDIxNjgxNUMwMDAwMDAwNTQ0Cis6MTAzQzkwMDAwMjE2ODE2MDAwMDAwMDA1MDIxNjgxNjQwMDAwMDAwNTI0Cis6MTAzQ0EwMDAwMjE2ODE2ODAwMDAwMDA4MDIxNjgxMDAwMDAwMDAwMDcyCis6MTAzQ0IwMDAwMjE2ODE2QzAwMDAwMDA2MDIxNjgxNzAwMDAwMDAwN0U5Cis6MTAzQ0MwMDAwNjE2ODE3NDAwMDAwMDA2MDIxNjgxOEMwMDAwMDAwNEI0Cis6MTAzQ0QwMDAwMjE2ODE5MDAwMDAwMDAxMDIxNjgxMDQwMDAwMDAwMDFECis6MTAzQ0UwMDAwMjE2ODE5NDAwMDAwMDAyMDIxNjgxOTgwMDAwMDAwNTZGCis6MTAzQ0YwMDAwMjE2ODE5QzAwMDAwMDA1MDIxNjgxQTAwMDAwMDAwNTRDCis6MTAzRDAwMDAwMjE2ODFBNDAwMDAwMDA1MDIxNjgxQTgwMDAwMDAwODI4Cis6MTAzRDEwMDAwMjE2ODFBQzAwMDAwMDA2MDIxNjgxQjAwMDAwMDAwNzA4Cis6MTAzRDIwMDAwNjE2ODFCNDAwMDAwMDAyMDIxNjgxMDgwMDAwMDAwMDlGCis6MTAzRDMwMDAwNjE2ODFCQzAwMDAwMDA0MDIxNjgxQ0MwMDAwMDAwNEJECis6MTAzRDQwMDAwMjE2ODFEMDAwMDAwMDAxMDIxNjgxRDQwMDAwMDAwMjlBCis6MTAzRDUwMDAwMjE2ODFEODAwMDAwMDA1MDIxNjgxREMwMDAwMDAwNTczCis6MTAzRDYwMDAwMjE2ODFFMDAwMDAwMDA1MDIxNjgxMEMwMDAwMDAwNDJDCis6MTAzRDcwMDAwMjE2ODFFNDAwMDAwMDA1MDIxNjgxRTgwMDAwMDAwODM4Cis6MTAzRDgwMDAwMjE2ODFFQzAwMDAwMDA2MDIxNjgxRjAwMDAwMDAwNzE4Cis6MTAzRDkwMDAwMjE2ODExMDAwMDAwMDAxMDIxNjgxMTQwMDAwMDAwMkNBCis6MTAzREEwMDAwMjE2ODExODAwMDAwMDA1MDIxNjgwOUMwMDAwMDA0Q0RECis6MTAzREIwMDAwMjE2ODBBMDAwMDAwMDRDMDYxNjgwQzQwMDAwMDAwMjFECis6MTAzREMwMDAwMjE2ODBBNDAwMDAwMDAwMDIxNjgwQTgwMDAwMDAwMDc3Cis6MTAzREQwMDAwMjE2ODBBQzAwMDAwMDRDMDYxNjgwQjAwMDAwMDAwNTAyCis6MTAzREUwMDAwMjE2RTZGODAwMDAwMjA0MDIxNjgyNDAwMDNGMDAzRjdGCis6MTAzREYwMDAwMjE2ODI0NDAwM0YwMDNGMDYxNjgyOTAwMDAwMDAwNDM1Cis6MTAzRTAwMDAwMjE2ODI0ODAwODAwMDgwMDIxNjgyNEMwMDgwMDA4MEVBCis6MTAzRTEwMDAwMjE2ODI1MDAxMDAwMTAwMDIxNjgyNTQwMTAwMDEwMEM2Cis6MTAzRTIwMDAwNjE2ODI1ODAwMDAwMDAyMDIxNjgyNjAwMDQwMDA0MDIwCis6MTAzRTMwMDAwMjE2ODI2NDAwNDAwMDQwMDIxNjgyNjgxRTAwMUUwMEM2Cis6MTAzRTQwMDAwMjE2ODI2QzFFMDAxRTAwMDIxNjgyNzA0MDAwNDAwMEE2Cis6MTAzRTUwMDAwMjE2ODI3NDQwMDA0MDAwMDIxNjgyNzg4MDAwODAwMEMyCis6MTAzRTYwMDAwMjE2ODI3QzgwMDA4MDAwMDIxNjgyODAyMDAwMjAwMEUyCis6MTAzRTcwMDAwMjE2ODI4NDIwMDAyMDAwMDYxNjgyODgwMDAwMDAwMkJDCis6MTAzRTgwMDAwMjE2ODA5MDAwMDAwMDRCMDIxNjgwNjAwMDAwMDE0MDg2Cis6MTAzRTkwMDAwMjE2ODA2NDAwMDAwMTQwMDYxNjgwODgwMDAwMDAwMkJGCis6MTAzRUEwMDAwMjE2ODA2ODAwMDAwMDAwMDIxNjgwNkMwMDAwMDAwMDBFCis6MTAzRUIwMDAwMjE2ODA3MDAwMDAwMEMwMDYxNjgwNzQwMDAwMDAwNTI1Cis6MTAzRUMwMDAwMjE2ODgwQzAxMDEwMTAxMDIxNjg4MTAwMTAxMjAwNDZDCis6MTAzRUQwMDAwMjE2ODgxNDIwMDgxMDAxMDIxNjg4MTgwMTAxMDEyMDFBCis6MTAzRUUwMDAwMjE2ODgxQzAxMDEwMTAxMDIxNjg4MjAwMTAxMjAwNDJDCis6MTAzRUYwMDAwMjE2ODgyNDIwMDgxMDAxMDIxNjg4MjgwMTAxMDEyMERBCis6MTAzRjAwMDAwMjE2ODgyQzIwMDgxMDAxMDIxNjg4MzAwMTAxMDEyMEI5Cis6MTAzRjEwMDAwMjE2ODgzNDAxMDEwMTAxMDIxNjg4MzgwMTAxMjAwNENCCis6MTAzRjIwMDAwMjE2ODgzQzIwMDgxMDAxMDIxNjg4NDAwMTAxMDEyMDc5Cis6MTAzRjMwMDAwMjE2ODg0NDAxMDEwMTAxMDIxNjg4NDgwMTAxMjAwNDhCCis6MTAzRjQwMDAwMjE2RTZCQzAwMDAwMDAwMDIxNkU2QzAwMDAwMDAwMkY3Cis6MTAzRjUwMDAwMjE2RTZDNDAwMDAwMDA0MDIxNkU2QzgwMDAwMDAwNkNGCis6MTAzRjYwMDAwMjE2RTc5NDAwMDAwMDAxMDIxNjgwRUMwMDAwMDBGRjNBCis6MTAzRjcwMDAwMjE0MDAwMDAwMDAwMDAxMDIxNUMwMjQwMDAwMDAwMDJGCis6MTAzRjgwMDAwMjE1QzBFQzAwMDAwMDAxMDIxNUMwRjAwMDAwMDAwMUE1Cis6MTAzRjkwMDAwNjE1QzEwMDAwMDAwMDAyMDIxNDAwMDQwMDAwMDAwMTI4Cis6MTAzRkEwMDAwMjE0MDAwODAwMDAwMDAxMDIxNDAwMEMwMDAwMDAwMUNGCis6MTAzRkIwMDAwMjE0MDAzMDAwMDAwMDAxMDIxNDAwMzQwMDAwMDAwMTZGCis6MTAzRkMwMDAwMjE0MDA0MDAwMDAwMDAxMDIxNDAwNDQwMDAwRkZGRjQyCis6MTAzRkQwMDAwNjE0MDAwNDAwMDAwMDAzMDIxNDAwMDAwMDAwMDAwMEFBCis6MTAzRkUwMDAwNjAyODAwMDAwMDAyMDAwMDIwMjAwNTgwMDAwMDAzMjlCCis6MTAzRkYwMDAwMjAyMDBBMDAzMTUwMDIwMDIwMjAwQTQwMzE1MDAyMDA1Cis6MTA0MDAwMDAwMjAyMDBBODAxMDAwMDMwMDIwMjAwQUMwODEwMDAwMDBCCis6MTA0MDEwMDAwMjAyMDBCMDAwMDAwMDM2MDIwMjAwQjQwMDAwMDAzMENFCis6MTA0MDIwMDAwMjAyMDBCODAwMDAwMDMxMDIwMjAwQkMwMDAwMDAwMkUxCis6MTA0MDMwMDAwMjAyMDBDMDAwMDAwMDA1MDIwMjAwQzQwMDAwMDAwMkVECis6MTA0MDQwMDAwMjAyMDBDODAwMDAwMDAyMDIwMjAwRDAwMDAwMDAwN0M3Cis6MTA0MDUwMDAwMjAyMDBEQzAwMDAwMDAwMDIwMjAwRTAwMDAwMDAwNTk3Cis6MTA0MDYwMDAwMjAyMDBFNDAwMDAwMDAzMDIwMjAwRjAwMDAwMDAwMTcwCis6MTA0MDcwMDAwMjAyMDBGQzAwMDAwMDA2MDIwMjAxMjAwMDAwMDAwMDE1Cis6MTA0MDgwMDAwMjAyMDEzNDAwMDAwMDAyMDIwMjAxQjAwMDAwMDAwMTNGCis6MTA0MDkwMDAwMjAyMDIwQzAwMDAwMDAxMDIwMjAyMTQwMDAwMDAwMUYyCis6MTA0MEEwMDAwMjAyMDIxODAwMDAwMDAyMDIwMjA0MDQwMDAwMDAwMUUzCis6MTA0MEIwMDAwMjAyMDQwQzAwMDAwMDQwMDIwMjA0MTAwMDAwMDA0MDU0Cis6MTA0MEMwMDAwMjAyMDQxQzAwMDAwMDA0MDIwMjA0MjAwMDAwMDAyMDgwCis6MTA0MEQwMDAwMjAyMDQyNDAwMDAwMDAyMDIwMjA0MjgwMDAwMDAyMDYyCis6MTA0MEUwMDAwNjAyMDUwMDAwMDAwMDEyMDQwMjA0ODAwMDIwMDhCRjQwCis6MTA0MEYwMDAwMjAyMDA2MDAwMDAwMDBGMDIwMjAwNjQwMDAwMDAwN0RFCis6MTA0MTAwMDAwMjAyMDA2ODAwMDAwMDAwMDIwMjAwNkMwMDAwMDAwRUM1Cis6MTA0MTEwMDAwMjAyMDA3MDAwMDAwMDBFMDYwMjAwNzQwMDAwMDAwMzlFCis6MTA0MTIwMDAwMjAyMDBGNDAwMDAwMDA0MDIwMjAwMDQwMDAwMDAwMThBCis6MTA0MTMwMDAwMjAyMDAwODAwMDAwMDAxMDIwMjAwMEMwMDAwMDAwMTYxCis6MTA0MTQwMDAwMjAyMDAxMDAwMDAwMDAxMDIwMjAwMTQwMDAwMDAwMTQxCis6MTA0MTUwMDAwMjAyMDAxODAwMDAwMDAxMDIwMjAwMUMwMDAwMDAwMTIxCis6MTA0MTYwMDAwMjAyMDAyMDAwMDAwMDAxMDIwMjAwMjQwMDAwMDAwMTAxCis6MTA0MTcwMDAwMjAyMDAyODAwMDAwMDAxMDIwMjAwMkMwMDAwMDAwMUUxCis6MTA0MTgwMDAwMjAyMDAzMDAwMDAwMDAxMDIwMjAwMzQwMDAwMDAwMUMxCis6MTA0MTkwMDAwMjAyMDAzODAwMDAwMDAxMDIwMjAwM0MwMDAwMDAwMUExCis6MTA0MUEwMDAwMjAyMDA0MDAwMDAwMDAxMDIwMjAwNDQwMDAwMDAwMTgxCis6MTA0MUIwMDAwMjAyMDA0ODAwMDAwMDAxMDIwMjAwNEMwMDAwMDAwMTYxCis6MTA0MUMwMDAwMjAyMDA1MDAwMDAwMDAxMDIwMjAxMDgwMDAwMDBDOEM1Cis6MTA0MUQwMDAwMjAyMDExODAwMDAwMDAyMDIwMjAxQzQwMDAwMDAwMEY3Cis6MTA0MUUwMDAwMjAyMDFDQzAwMDAwMDAwMDIwMjAxRDQwMDAwMDAwMjIzCis6MTA0MUYwMDAwMjAyMDFEQzAwMDAwMDAyMDIwMjAxRTQwMDAwMDBGRkY0Cis6MTA0MjAwMDAwMjAyMDFFQzAwMDAwMEZGMDIwMjAxMDAwMDAwMDAwMEI5Cis6MTA0MjEwMDAwMjAyMDEwQzAwMDAwMEM4MDIwMjAxMUMwMDAwMDAwMkEyCis6MTA0MjIwMDAwMjAyMDFDODAwMDAwMDAwMDIwMjAxRDAwMDAwMDAwMEVDCis6MTA0MjMwMDAwMjAyMDFEODAwMDAwMDAyMDIwMjAxRTAwMDAwMDAwMkI4Cis6MTA0MjQwMDAwMjAyMDFFODAwMDAwMEZGMDIwMjAxRjAwMDAwMDBGRjhFCis6MTA0MjUwMDAwMjAyMDEwNDAwMDAwMDIwMDIwMjAxMDgwMDAwMDBDODYwCis6MTA0MjYwMDAwMjAyMDExODAwMDAwMDAyMDIwMjAxQzQwMDAwMDAwMDY2Cis6MTA0MjcwMDAwMjAyMDFDQzAwMDAwMDAwMDIwMjAxRDQwMDAwMDAwMjkyCis6MTA0MjgwMDAwMjAyMDFEQzAwMDAwMDAyMDIwMjAxRTQwMDAwMDBGRjYzCis6MTA0MjkwMDAwMjAyMDFFQzAwMDAwMEZGMDIwMjAxMDAwMDAwMDAxMDE5Cis6MTA0MkEwMDAwMjAyMDEwQzAwMDAwMEM4MDIwMjAxMUMwMDAwMDAwMjEyCis6MTA0MkIwMDAwMjAyMDFDODAwMDAwMDAwMDIwMjAxRDAwMDAwMDAwMDVDCis6MTA0MkMwMDAwMjAyMDFEODAwMDAwMDAyMDIwMjAxRTAwMDAwMDAwMjI4Cis6MTA0MkQwMDAwMjAyMDFFODAwMDAwMEZGMDIwMjAxRjAwMDAwMDBGRkZFCis6MTA0MkUwMDAwMjAyMDEwNDAwMDAwMDMwMDIwMjAxMDgwMDAwMDBDOEMwCis6MTA0MkYwMDAwMjAyMDExODAwMDAwMDAyMDIwMjAxQzQwMDAwMDAwMEQ2Cis6MTA0MzAwMDAwMjAyMDFDQzAwMDAwMDAwMDIwMjAxRDQwMDAwMDAwMjAxCis6MTA0MzEwMDAwMjAyMDFEQzAwMDAwMDAyMDIwMjAxRTQwMDAwMDBGRkQyCis6MTA0MzIwMDAwMjAyMDFFQzAwMDAwMEZGMDIwMjAxMDAwMDAwMDA0MDU4Cis6MTA0MzMwMDAwMjAyMDEwQzAwMDAwMEM4MDIwMjAxMUMwMDAwMDAwMjgxCis6MTA0MzQwMDAwMjAyMDFDODAwMDAwMDAwMDIwMjAxRDAwMDAwMDAwMENCCis6MTA0MzUwMDAwMjAyMDFEODAwMDAwMDAyMDIwMjAxRTAwMDAwMDAwMjk3Cis6MTA0MzYwMDAwMjAyMDFFODAwMDAwMEZGMDIwMjAxRjAwMDAwMDBGRjZECis6MTA0MzcwMDAwMjAyMDEwNDAwMDAwMDYwMDIwMjAxMDgwMDAwMDBDOEZGCis6MTA0MzgwMDAwMjAyMDExODAwMDAwMDAyMDIwMjAxQzQwMDAwMDAwMDQ1Cis6MTA0MzkwMDAwMjAyMDFDQzAwMDAwMDAwMDIwMjAxRDQwMDAwMDAwMjcxCis6MTA0M0EwMDAwMjAyMDFEQzAwMDAwMDAyMDIwMjAxRTQwMDAwMDBGRjQyCis6MTA0M0IwMDAwMjAyMDFFQzAwMDAwMEZGMDIwMjAxMDAwMDAwMDA1MEI4Cis6MTA0M0MwMDAwMjAyMDEwQzAwMDAwMEM4MDIwMjAxMUMwMDAwMDAwMkYxCis6MTA0M0QwMDAwMjAyMDFDODAwMDAwMDAwMDIwMjAxRDAwMDAwMDAwMDNCCis6MTA0M0UwMDAwMjAyMDFEODAwMDAwMDAyMDIwMjAxRTAwMDAwMDAwMjA3Cis6MTA0M0YwMDAwMjAyMDFFODAwMDAwMEZGMDIwMjAxRjAwMDAwMDBGRkRECis6MTA0NDAwMDAwMjAyMDEwNDAwMDAwMDcwMDcyODA0MDAwMEIzMDAwMDRECis6MTA0NDEwMDAwODI4MDdCODAwMDkwOERGMDcyQzAwMDAyOENCMDAwMDk3Cis6MTA0NDIwMDAwNzJDODAwMDM2NUQwQTMzMDcyRDAwMDAzNDcwMTdDQjRGCis6MTA0NDMwMDAwNzJEODAwMDNBOTQyNEU4MDcyRTAwMDAzNkM3MzM4RUZCCis6MTA0NDQwMDAwNzJFODAwMDFDRTk0MTQwMDgyRUM1RDAyNzQ2MDhFMTEwCis6MTA0NDUwMDAwMjI4MDBCQzAwMDAwMDMwMDEyODAwMDAwMDAwMDAwMDFECis6MTA0NDYwMDAwMTI4MDAwNDAwMDAwMDAwMDEyODAwMDgwMDAwMDAwMEVFCis6MTA0NDcwMDAwMTI4MDAwQzAwMDAwMDAwMDEyODAwMTAwMDAwMDAwMENFCis6MTA0NDgwMDAwMTI4MDAxNDAwMDAwMDAwMDIyODAwMjAwMDAwMDAwMUE0Cis6MTA0NDkwMDAwMjI4MDAyNDAwMDAwMDAyMDIyODAwMjgwMDAwMDAwMzc3Cis6MTA0NEEwMDAwMjI4MDAyQzAwMDAwMDAwMDIyODAwMzAwMDAwMDAwNDU4Cis6MTA0NEIwMDAwMjI4MDAzNDAwMDAwMDAxMDIyODAwMzgwMDAwMDAwMDNCCis6MTA0NEMwMDAwMjI4MDAzQzAwMDAwMDAxMDIyODAwNDAwMDAwMDAwNDE3Cis6MTA0NEQwMDAwMjI4MDA0NDAwMDAwMDAwMDIyODAwNDgwMDAwMDAwMUZCCis6MTA0NEUwMDAwMjI4MDA0QzAwMDAwMDAzMDIyODAwNTAwMDAwMDAwMEQ5Cis6MTA0NEYwMDAwMjI4MDA1NDAwMDAwMDAxMDIyODAwNTgwMDAwMDAwNEI3Cis6MTA0NTAwMDAwMjI4MDA1QzAwMDAwMDAwMDIyODAwNjAwMDAwMDAwMTlBCis6MTA0NTEwMDAwMjI4MDA2NDAwMDAwMDAzMDIyODAwNjgwMDAwMDAwMDc4Cis6MTA0NTIwMDAwMjI4MDA2QzAwMDAwMDAxMDIyODAwNzAwMDAwMDAwNDU2Cis6MTA0NTMwMDAwMjI4MDA3NDAwMDAwMDAwMDIyODAwNzgwMDAwMDAwNDM3Cis6MTA0NTQwMDAwMjI4MDA3QzAwMDAwMDAzMDYyODAwODAwMDAwMDAwMjEyCis6MTA0NTUwMDAwMjI4MDBBNDAwMDA3RkZGMDIyODAwQTgwMDAwMDNGRjNCCis6MTA0NTYwMDAwMjI4MDIyNDAwMDAwMDAwMDIyODAyMzQwMDAwMDAwMDlCCis6MTA0NTcwMDAwMjI4MDI0QzAwMDAwMDAwMDIyODAyRTQwMDAwRkZGRkI1Cis6MTA0NTgwMDAwNjI4MjAwMDAwMDAwODAwMDIyQjhCQzAwMDAwMDAwMTVDCis6MTA0NTkwMDAwMjJCODAwMDAwMDAwMDAwMDIyQjgwNDAwMDAwMDAxODY5Cis6MTA0NUEwMDAwMjJCODA4MDAwMDAwMDBDMDIyQjgwQzAwMDAwMDA2NkZGCis6MTA0NUIwMDAwQzJCODMwMDAwMDg2NDcwMEEyQjgzMDAwMDAwMDE1NzU1Cis6MTA0NUMwMDAwQjJCODMwMDAwMDAwNTVGMEEyQjgzNDAwMDAwMDAwMEQ2Cis6MTA0NUQwMDAwQzJCODM0MDAwMDAwMjI2MEIyQjgzNDAwMDAwMDAwMUJGCis6MTA0NUUwMDAwMjJCODM4MDAwMDg2NDcwMDIyQjgzQzAwMDAwMDIyNjI3Cis6MTA0NUYwMDAwMjJCMTQ4MDAwMDAwMDAxMEEyQjE0ODAwMDAwMDAwMDMwCis6MTA0NjAwMDAwMjJCOTQ0MDAwMDAwMDAxMDYyQjk0NDgwMDAwMDAwMjk5Cis6MTA0NjEwMDAwNjJBOUE3MDAwMDAwMDA0MDQyQTlBODAwMDA0MDhFMzI1Cis6MTA0NjIwMDAwNjJBOUE5MDAwMDAwMDAyMDQyQTlBOTgwMDAyMDhFN0RECis6MTA0NjMwMDAwNjJBOTAwMDAwMDAwMDQ4MDYyQTIwMDgwMDAwMDBDODUyCis6MTA0NjQwMDAwNjJBMjAwMDAwMDAwMDAyMDYyQTkxMjgwMDAwMDA4NkE5Cis6MTA0NjUwMDAwNjJBQzAwMDAwMDAwMTIwMDYyQTkzNDgwMDAwMDAwMzNCCis6MTA0NjYwMDAwNDJBOTM1NDAwMDEwOEU5MDYyQTlGQjAwMDAwMDAwMkMyCis6MTA0NjcwMDAwNDJBOTQxODAwMDIwOEVBMDQyQTlDRDAwMDAxMDhFQ0RECis6MTA0NjgwMDAwNjJBOUNENDAwMDAwMDExMDQyQTlEMjAwMDhGMDhFRDBBCis6MTA0NjkwMDAwNjJBOUY1QzAwMDAwMDA1MDQyQTMwMDAwMDAyMDk3QzA1Cis6MTA0NkEwMDAwNjJBMzAwODAwMDAwMTAwMDYyQTQwNDAwMDAwMDAxMEUxCis6MTA0NkIwMDAwNDJBNDAwMDAwMTAwOTdFMDQyQTg0MDgwMDAyMDk4RUEyCis6MTA0NkMwMDAwNDJBQ0Y0MDAwMDQwOTkwMDQyQUNGNjAwMDAyMDk5NDE0Cis6MTA0NkQwMDAwNjJBOUZBMDAwMDAwMDA0MDYyQTYwMDAwMDAwMDU0MDkyCis6MTA0NkUwMDAwNjJBOUQxODAwMDAwMDAyMDYyQUIwMDAwMDAwMDA1MEIzCis6MTA0NkYwMDAwNjJBQkI3MDAwMDAwMDcwMDYyQUJCNjgwMDAwMDAwMjlBCis6MTA0NzAwMDAwNjJBQjk0ODAwMDAwMDA0MDYyQUQwMDAwMDAwMDgwMDZDCis6MTA0NzEwMDAwNjJBQzQ4MDAwMDAwMTUwMDYyQTk0MjAwMDAwMDAzMkJFCis6MTA0NzIwMDAwNjJBNTAyMDAwMDAwMDAyMDYyQTUwMzAwMDAwMDAwMjM1Cis6MTA0NzMwMDAwNjJBNTAwMDAwMDAwMDAyMDYyQTUwMTAwMDAwMDAwMjY1Cis6MTA0NzQwMDAwMjJBNTIwODAwMDAwMDAxMDQyQTlBQTAwMDAyMDk5NkQ5Cis6MTA0NzUwMDAwNjJBOTVCMDAwMDAwMDIyMDQyQTk2MzgwMDAxMDk5ODI0Cis6MTA0NzYwMDAwNjJBOTYzQzAwMDAwMDAzMDYyQTk2RTAwMDAwMDAyMjdDCis6MTA0NzcwMDAwNDJBOTc2ODAwMDEwOTk5MDYyQTk3NkMwMDAwMDAwMzMzCis6MTA0NzgwMDAwNjJBOTgxMDAwMDAwMDIyMDQyQTk4OTgwMDAxMDk5QTJECis6MTA0NzkwMDAwNjJBOTg5QzAwMDAwMDAzMDYyQTk5NDAwMDAwMDAyMjg3Cis6MTA0N0EwMDAwNDJBOTlDODAwMDEwOTlCMDYyQTk5Q0MwMDAwMDAwMzNECis6MTA0N0IwMDAwNjJBQkI1ODAwMDAwMDAyMDYyQUM5QzAwMDAwMDE1MEFBCis6MTA0N0MwMDAwNjJBOTRFODAwMDAwMDMyMDYyQTUwMjgwMDAwMDAwMjYxCis6MTA0N0QwMDAwNjJBNTAzODAwMDAwMDAyMDYyQTUwMDgwMDAwMDAwMjk1Cis6MTA0N0UwMDAwNjJBNTAxODAwMDAwMDAyMDIyQTUyMEMwMDAwMDAwMUE0Cis6MTA0N0YwMDAwNDJBOUFBODAwMDIwOTlDMDYyQTk2NDgwMDAwMDAyMjcyCis6MTA0ODAwMDAwNDJBOTZEMDAwMDEwOTlFMDYyQTk2RDQwMDAwMDAwM0NGCis6MTA0ODEwMDAwNjJBOTc3ODAwMDAwMDIyMDQyQTk4MDAwMDAxMDk5RkM4Cis6MTA0ODIwMDAwNjJBOTgwNDAwMDAwMDAzMDYyQTk4QTgwMDAwMDAyMjI3Cis6MTA0ODMwMDAwNDJBOTkzMDAwMDEwOUEwMDYyQTk5MzQwMDAwMDAwM0Q3Cis6MTA0ODQwMDAwNjJBOTlEODAwMDAwMDIyMDQyQTlBNjAwMDAxMDlBMUQyCis6MTA0ODUwMDAwNjJBOUE2NDAwMDAwMDAzMDYyQUJCNjAwMDAwMDAwMkRBCis6MTA0ODYwMDAwMjJBQ0YwMDAwMDAwMDAwMDQyQTlBQjAwMDEwMDlBMjFBCis6MTA0ODcwMDAwNjJBNTA0ODAwMDAwMDBFMDIyQUNGMDQwMDAwMDAwMDYzCis6MTA0ODgwMDAwNDJBOUFGMDAwMTAwOUIyMDYyQTUwODAwMDAwMDAwRTk3Cis6MTA0ODkwMDAwMjJBQ0YwODAwMDAwMDAwMDQyQTlCMzAwMDEwMDlDMjQxCis6MTA0OEEwMDAwNjJBNTBCODAwMDAwMDBFMDIyQUNGMEMwMDAwMDAwMEJCCis6MTA0OEIwMDAwNDJBOUI3MDAwMTAwOUQyMDYyQTUwRjAwMDAwMDAwRTU2Cis6MTA0OEMwMDAwMjJBQ0YxMDAwMDAwMDAwMDQyQTlCQjAwMDEwMDlFMjY5Cis6MTA0OEQwMDAwNjJBNTEyODAwMDAwMDBFMDIyQUNGMTQwMDAwMDAwMDEyCis6MTA0OEUwMDAwNDJBOUJGMDAwMTAwOUYyMDYyQTUxNjAwMDAwMDAwRTE1Cis6MTA0OEYwMDAwMjJBQ0YxODAwMDAwMDAwMDQyQTlDMzAwMDEwMEEwMjhGCis6MTA0OTAwMDAwNjJBNTE5ODAwMDAwMDBFMDIyQUNGMUMwMDAwMDAwMDY5Cis6MTA0OTEwMDAwNDJBOUM3MDAwMTAwQTEyMDYyQTUxRDAwMDAwMDAwRUQyCis6MTA0OTIwMDAwMjEwMTAwODAwMDAwMDAxMDIxMDEwNTAwMDAwMDAwMUU5Cis6MTA0OTMwMDAwMjEwMTAwMDAwMDNEMDAwMDIxMDEwMDQwMDAwMDAzRDFGCis6MTA0OTQwMDAwOTEwMTgwMDAyMDAwQTIyMDkxMDExMDAwMDEwMEMyMkEwCis6MTA0OTUwMDAwNjEwMTE0MDAwMDAwMDA4MDkxMDExNjAwMDEwMEMzMjEwCis6MTA0OTYwMDAwNjEwMTFBMDAwMDAwMDE4MDYxMDI0MDAwMDAwMDBFMDRFCis6MTA0OTcwMDAwMjEwMjAxQzAwMDAwMDAwMDIxMDIwMjAwMDAwMDAwMTk2Cis6MTA0OTgwMDAwMjEwMjBDMDAwMDAwMDAyMDIxMDIwMDQwMDAwMDAwMUZDCis6MTA0OTkwMDAwMjEwMjAwODAwMDAwMDAxMDIxMDMwRDgwMDAwMDAwMUMxCis6MTA0OUEwMDAwOTEwM0MwMDAwMDUwQzQyMDkxMDM4MDAwMDA1MEM0N0I2Cis6MTA0OUIwMDAwOTEwMzkyMDAwMDUwQzRDMDkxMDNCMDAwMDA1MEM1MTcyCis6MTA0OUMwMDAwMjEwNDBENDAwMDAwMDMwMDIxMDQwRDgwMDAwMDAzMDM3Cis6MTA0OUQwMDAwNjEwNEMwMDAwMDAwMTAwMDIxMDQwMjgwMDAwMDAxMEVBCis6MTA0OUUwMDAwMjEwNDA0NDAwMDAzRkZGMDIxMDQwNTgwMDI4MDAwMDIxCis6MTA0OUYwMDAwMjEwNDA4NDAwODQ5MjRBMDIxMDQwNTgwMDAwMDAwMEQ3Cis6MTA0QTAwMDAwMjEwNDEzODAwMDAwMDAxMDIxMDQxMzgwMDAwMDAwMThFCis6MTA0QTEwMDAwMjEwNDEzODAwMDAwMDAxMDIxMDQxMzgwMDAwMDAwMTdFCis6MTA0QTIwMDAwMjEwNDEzODAwMDAwMDAxMDIxMDQxMzgwMDAwMDAwMTZFCis6MTA0QTMwMDAwMjEwNDEzODAwMDAwMDAxMDIxMDQxMzgwMDAwMDAwMTVFCis6MTA0QTQwMDAwMjEyMDQ5MDAxRjY4MDQwMDIxMjA1MTQwMDAwM0MxMDhFCis6MTA0QTUwMDAwMjEyMDQ5NEZGRkZGRkZGMDIxMjA0OThGRkZGRkZGRjAyCis6MTA0QTYwMDAwMjEyMDQ5Q0ZGRkZGRkZGMDIxMjA0QTBGRkZGRkZGRkUyCis6MTA0QTcwMDAwMjEyMDRBNEZGRkZGRkZGMDIxMjA0QThGRkZGRkZGRkMyCis6MTA0QTgwMDAwMjEyMDRBQ0ZGRkZGRkZGMDIxMjA0QjBGRkZGRkZGRkEyCis6MTA0QTkwMDAwMjEyMDRCOEZGRkZGRkZGMDIxMjA0QkNGRkZGRkZGRjdBCis6MTA0QUEwMDAwMjEyMDRDMEZGRkZGRkZGMDIxMjA0QzRGRkZGRkZGRjVBCis6MTA0QUIwMDAwMjEyMDRDOEZGRkZGRkZGMDIxMjA0Q0NGRkZGRkZGRjNBCis6MTA0QUMwMDAwMjEyMDREMEZGRkZGRkZGMDIxMjA0RDhGRkZGRkZGRjE2Cis6MTA0QUQwMDAwMjEyMDREQ0ZGRkZGRkZGMDIxMjA0RTBGRkZGRkZGRkYyCis6MTA0QUUwMDAwMjEyMDRFNEZGRkZGRkZGMDIxMjA0RThGRkZGRkZGRkQyCis6MTA0QUYwMDAwMjEyMDRFQ0ZGRkZGRkZGMDIxMjA0RjBGRkZGRkZGRkIyCis6MTA0QjAwMDAwMjEyMDRGNEZGRkZGRkZGMDIxMjA0RjhGRkZGRkZGRjkxCis6MTA0QjEwMDAwMjEyMDRGQ0ZGRkZGRkZGMDIxMjA1MDBGRkZGRkZGRjcwCis6MTA0QjIwMDAwMjEyMDUwNEZGRkZGRkZGMDIxMjA1MDhGRkZGRkZGRjRGCis6MTA0QjMwMDAwMjEyMDUwQ0ZGRkZGRkZGMDIxMjA1MTBGRkZGRkZGRjJGCis6MTA0QjQwMDAwMjEyMDRENEY4MDBDMDAwMDIxMjA0QjRGMDAwNTAwMEI1Cis6MTA0QjUwMDAwMjEyMDM5MDAwMDAwMDA4MDIxMjAzOUMwMDAwMDAwOEVCCis6MTA0QjYwMDAwMjEyMDNBMDAwMDAwMDA4MDIxMjAzQTQwMDAwMDAwMkM5Cis6MTA0QjcwMDAwMjEyMDNCQzAwMDAwMDA0MDIxMjAzQzAwMDAwMDAwNTgyCis6MTA0QjgwMDAwMjEyMDNDNDAwMDAwMDA0MDIxMjAzRDAwMDAwMDAwMDVGCis6MTA0QjkwMDAwMjEyMDM2QzAwMDAwMDAxMDIxMjAxQkMwMDAwMDA0MDgwCis6MTA0QkEwMDAwMjEyMDFDMDAwMDAxODA4MDIxMjAxQzQwMDAwMDgwMzJDCis6MTA0QkIwMDAwMjEyMDFDODAwMDAwODAzMDIxMjAxQ0MwMDAwMDA0MEVDCis6MTA0QkMwMDAwMjEyMDFEMDAwMDAwMDAzMDIxMjAxRDQwMDAwMDgwMzA5Cis6MTA0QkQwMDAwMjEyMDFEODAwMDAwODAzMDIxMjAxREMwMDAwMDgwM0UxCis6MTA0QkUwMDAwMjEyMDFFMDAwMDEwMDAzMDIxMjAxRTQwMDAwMDgwM0M4Cis6MTA0QkYwMDAwMjEyMDFFODAwMDAwODAzMDIxMjAxRUMwMDAwMDAwM0E5Cis6MTA0QzAwMDAwMjEyMDFGMDAwMDAwMDAzMDIxMjAxRjQwMDAwMDAwMzkwCis6MTA0QzEwMDAwMjEyMDFGODAwMDAwMDAzMDIxMjAxRkMwMDAwMDAwMzcwCis6MTA0QzIwMDAwMjEyMDIwMDAwMDAwMDAzMDIxMjAyMDQwMDAwMDAwMzRFCis6MTA0QzMwMDAwMjEyMDIwODAwMDAwMDAzMDIxMjAyMEMwMDAwMDAwMzJFCis6MTA0QzQwMDAwMjEyMDIxMDAwMDAwMDAzMDIxMjAyMTQwMDAwMDAwMzBFCis6MTA0QzUwMDAwMjEyMDIxODAwMDAwMDAzMDIxMjAyMUMwMDAwMDAwM0VFCis6MTA0QzYwMDAwMjEyMDIyMDAwMDAwMDAzMDIxMjAyMjQwMDAwMDAwM0NFCis6MTA0QzcwMDAwMjEyMDIyODAwMDAyNDAzMDIxMjAyMkMwMDAwMDAyRjVFCis6MTA0QzgwMDAwMjEyMDIzMDAwMDAwMDA5MDIxMjAyMzQwMDAwMDAxOTcyCis6MTA0QzkwMDAwMjEyMDIzODAwMDAwMTg0MDIxMjAyM0MwMDAwMDE4MzZCCis6MTA0Q0EwMDAwMjEyMDI0MDAwMDAwMzA2MDIxMjAyNDQwMDAwMDAxOTMyCis6MTA0Q0IwMDAwMjEyMDI0ODAwMDAwMDA2MDIxMjAyNEMwMDAwMDMwNjI1Cis6MTA0Q0MwMDAwMjEyMDI1MDAwMDAwMzA2MDIxMjAyNTQwMDAwMDMwNjAyCis6MTA0Q0QwMDAwMjEyMDI1ODAwMDAwQzg2MDIxMjAyNUMwMDAwMDMwNjU5Cis6MTA0Q0UwMDAwMjEyMDI2MDAwMDAwMzA2MDIxMjAyNjQwMDAwMDAwNkM1Cis6MTA0Q0YwMDAwMjEyMDI2ODAwMDAwMDA2MDIxMjAyNkMwMDAwMDAwNkE4Cis6MTA0RDAwMDAwMjEyMDI3MDAwMDAwMDA2MDIxMjAyNzQwMDAwMDAwNjg3Cis6MTA0RDEwMDAwMjEyMDI3ODAwMDAwMDA2MDIxMjAyN0MwMDAwMDAwNjY3Cis6MTA0RDIwMDAwMjEyMDI4MDAwMDAwMDA2MDIxMjAyODQwMDAwMDAwNjQ3Cis6MTA0RDMwMDAwMjEyMDI4ODAwMDAwMDA2MDIxMjAyOEMwMDAwMDAwNjI3Cis6MTA0RDQwMDAwMjEyMDI5MDAwMDAwMDA2MDIxMjAyOTQwMDAwMDAwNjA3Cis6MTA0RDUwMDAwMjEyMDI5ODAwMDAwMDA2MDIxMjAyOUMwMDAwMDAwNkU3Cis6MTA0RDYwMDAwMjEyMDJBMDAwMDAwMzA2MDIxMjAyQTQwMDAwMDAxM0I3Cis6MTA0RDcwMDAwMjEyMDJBODAwMDAwMDA2MDIxMjAyQjAwMDAwMTAwNDk1Cis6MTA0RDgwMDAwMjEyMDJCNDAwMDAxMDA0MDIxMjAzMjQwMDEwNjQ0MDU2Cis6MTA0RDkwMDAwMjEyMDMyODAwMTA2NDQwMDIxMjA1QjQwMDAwMDAwMTUyCis6MTA0REEwMDAwMjEyMDVGODAwMDAwMDQwMDIxMjA1RkMwMDAwMDAxOTg0Cis6MTA0REIwMDAwMjEyMDYwMDAwMDAwMDAxMDIxMjA2NkMwMDAwMDAwMTUxCis6MTA0REMwMDAwMjEyMDFCMDAwMDAwMDAxMDIxMjA3RDgwMDAwMDAwMzI3Cis6MTA0REQwMDAwMjEyMDdEODAwMDAwMDAzMDIxMjA3RDgwMDAwMDAwM0U3Cis6MTA0REUwMDAwMjEyMDdEODAwMDAwMDAzMDIxMjA3RDgwMDAwMDAwM0Q3Cis6MTA0REYwMDAwMjEyMDdEODAwMDAwMDAzMDIxMjA3RDgwMDAwMDAwM0M3Cis6MTA0RTAwMDAwMjEyMDdEODAwMDAwMDAzMDYwMEEwMDAwMDAwMDAwQ0ZBCis6MTA0RTEwMDAwMjAwQTA1MDAwMDAwMDAwMDIwMEEwNTQwMDAwMDAwMEFBCis6MTA0RTIwMDAwMjAwQTBFQzU1NTQwMDAwMDIwMEEwRjA1NTU1NTU1NTY1Cis6MTA0RTMwMDAwMjAwQTBGNDAwMDA1NTU1MDIwMEEwRjhGMDAwMDAwMEE4Cis6MTA0RTQwMDAwMjAwQTBGQzU1NTQwMDAwMDIwMEExMDA1NTU1NTU1NTI0Cis6MTA0RTUwMDAwMjAwQTEwNDAwMDA1NTU1MDIwMEExMDhGMDAwMDAwMDY2Cis6MTA0RTYwMDAwMjAwQTE5QzAwMDAwMDAwMDIwMEExQTAwMDAxMDAwMEJGCis6MTA0RTcwMDAwMjAwQTFBNDAwMDA1MDE0MDIwMEExQTgwMDAwMDAwMDNDCis6MTA0RTgwMDAwMjAwQTZBODAwMDAwMDAwMDIwMEE2QUMwMDAwMDAwMDdFCis6MTA0RTkwMDAwMjAwQTZEMDAwMDAwMDAwMDIwMEE0NUMwMDAwMEMwMDhDCis6MTA0RUEwMDAwMjAwQTYxQzAwMDAwMDAzMDIwMEEwNzBGRkY1NUZGRkQ3Cis6MTA0RUIwMDAwMjAwQTA3NDAwMDBGRkZGMDIwMEEwNzhGMDAwMDNFMEYxCis6MTA0RUMwMDAwMjAwQTA3QzAwMDAwMDAwMDIwMEEwODAwMDAwQTAwMDAyCis6MTA0RUQwMDAwNjAwQTA4NDAwMDAwMDA1MDIwMEEwOTgwRkUwMDAwMDdBCis6MTA0RUUwMDAwNjAwQTA5QzAwMDAwMDA3MDIwMEEwQjgwMDAwMDQwMDFCCis6MTA0RUYwMDAwNjAwQTBCQzAwMDAwMDAzMDIwMEEwQzgwMDAwMTAwMEQzCis6MTA0RjAwMDAwNjAwQTBDQzAwMDAwMDAzMDIwMEEwRDgwMDAwNDAwMDcyCis6MTA0RjEwMDAwNjAwQTBEQzAwMDAwMDAzMDIwMEEwRTgwMDAxMDAwMDgxCis6MTA0RjIwMDAwNjAwQTIyQzAwMDAwMDA0MDIwMEE2ODgwMDAwMDBGQzdECis6MTA0RjMwMDAwNjAwQTY4QzAwMDAwMDA3MDIwMEE2RjQwMDAwMDAwMDk2Cis6MTA0RjQwMDAwMjAwQTEwQ0ZGNUMwMDAwMDIwMEExMTBGRkY1NUZGRjUyCis6MTA0RjUwMDAwMjAwQTExNDAwMDBGRkZGMDIwMEExMThGMDAwMDNFMDBFCis6MTA0RjYwMDAwMjAwQTExQzAwMDAwMDAwMDIwMEExMjAwMDAwQTAwMDFGCis6MTA0RjcwMDAwNjAwQTEyNDAwMDAwMDA1MDIwMEExMzgwRkUwMDAwMDk3Cis6MTA0RjgwMDAwNjAwQTEzQzAwMDAwMDA3MDIwMEExNTgwMDAwMDgwMDM0Cis6MTA0RjkwMDAwNjAwQTE1QzAwMDAwMDAzMDIwMEExNjgwMDAwMjAwMEUwCis6MTA0RkEwMDAwNjAwQTE2QzAwMDAwMDAzMDIwMEExNzgwMDAwODAwMDUwCis6MTA0RkIwMDAwNjAwQTE3QzAwMDAwMDAzMDIwMEExODgwMDAyMDAwMDlFCis6MTA0RkMwMDAwNjAwQTIzQzAwMDAwMDA0MDIwMEE2QjAwMDAwMDBGQ0E1Cis6MTA0RkQwMDAwNjAwQTZCNDAwMDAwMDA3MDIwMEE2RjgwMDAwMDAwMENBCis6MTA0RkUwMDAwMjAwQTAzMDAwMDAwMDAwMDIwMEEwMzQwMDAwMDAwMDE5Cis6MTA0RkYwMDAwMjAwQTAzODAwMDAwMDAwMDIwMEEwM0MwMDAwMDAwMEY5Cis6MTA1MDAwMDAwMjAwQTA0MDAwMDAwMDAwMDIwMEEwNDQwMDAwMDAwMEQ4Cis6MTA1MDEwMDAwMjAwQTA0ODAwMDAwMDAwMDIwMEEwNEMwMDAwMDAwMEI4Cis6MTA1MDIwMDAwMjAwOTBDNDAwMDBFMDAwMDIwMDkwQ0MwMDAwRjMwMEY5Cis6MTA1MDMwMDAwMjAwOTBENDAwMDAwMDAzMDIwMDkxQTAwMDAwMDAwMUQzCis6MTA1MDQwMDAwNjAwOTE3MDAwMDAwMDAzMDIwMDkwRUMwMDAwNjAwMDc4Cis6MTA1MDUwMDAwMjAwOTBGNDAwMDA3MzAwMDIwMDkwRkMwMDAwMDAwM0M2Cis6MTA1MDYwMDAwMjAwOTFBODAwMDAwMDAxMDYwMDkxODgwMDAwMDAwM0UyCis6MTA1MDcwMDAwMjAwOTEwMDAwMDA0MDAwMDIwMDkxMDgwMDAwNTMwMDZGCis6MTA1MDgwMDAwMjAwOTExMDAwMDAwMDA0MDIwMDkxQUMwMDAwMDAwMTM5Cis6MTA1MDkwMDAwNjAwOTE5NDAwMDAwMDAyMDIwMDkxOUMwMDAwMDAwMUIzCis6MTA1MEEwMDAwMjAwOTBEODAwMDA2MDAwMDIwMDkwRTAwMDAwNzMwMDUxCis6MTA1MEIwMDAwMjAwOTBFODAwMDAwMDAzMDIwMDkxQTQwMDAwMDAwMTNCCis6MTA1MEMwMDAwMjAwOTE3QzAwMDAwMDAxMDIwMDkxODAwMDAwMDAwMUJDCis6MTA1MEQwMDAwMjAwOTE4NDAwMDAwMDAwMDIwMDkxMjgwMDAwMDMwMEZCCis6MTA1MEUwMDAwMjAwOTE2QzAwMDNGMDA4MDIwMDkxMkMwMDAwMDMwMDA0Cis6MTA1MEYwMDAwMjAwOTEzMDAwMDAwMzAwMDIwMDkxMzQwMDAwMDMwMDIwCis6MTA1MTAwMDAwMjAwOTEzODAwMDAwMzAwMDIwMDkxM0MwMDAwMDMwMEZGCis6MTA1MTEwMDAwMjAwOTE0MDAwMDAwMzAwMDIwMDk0MkMwMDAwMDAwMUY2Cis6MTA1MTIwMDAwMjAwOTQzMDAwMDAwMDAxMDIwMDk0MzQwMDAwMDAwMUVECis6MTA1MTMwMDAwMjAwOTQyQzAwMDAwMDAxMDIwMDk0MzAwMDAwMDAwMUU1Cis6MTA1MTQwMDAwMjAwOTQzNDAwMDAwMDAxMDIwMDk0MkMwMDAwMDAwMUQxCis6MTA1MTUwMDAwMjAwOTQzMDAwMDAwMDAxMDIwMDk0MzQwMDAwMDAwMUJECis6MTA1MTYwMDAwMjAwOTQyQzAwMDAwMDAxMDIwMDk0MzAwMDAwMDAwMUI1Cis6MTA1MTcwMDAwMjAwOTQzNDAwMDAwMDAxMDIwMDk0MkMwMDAwMDAwMUExCis6MTA1MTgwMDAwMjAwOTQzMDAwMDAwMDAxMDIwMDk0MzQwMDAwMDAwMThECis6MTA1MTkwMDAwMjAwOTQyQzAwMDAwMDAxMDIwMDk0MzAwMDAwMDAwMTg1Cis6MTA1MUEwMDAwMjAwOTQzNDAwMDAwMDAxMDIwMDk0MkMwMDAwMDAwMTcxCis6MTA1MUIwMDAwMjAwOTQzMDAwMDAwMDAxMDIwMDk0MzQwMDAwMDAwMTVECis6MTA1MUMwMDAwMjAwOTQyQzAwMDAwMDAxMDIwMDk0MzAwMDAwMDAwMTU1Cis6MTA1MUQwMDAwMjAwOTQzNDAwMDAwMDAxMDIxMzAwNzgwMDAwMDAzMDQ3Cis6MTA1MUUwMDAwMjEzMDAzQzAwMDA2MUE4MDYxMzAxMDgwMDAwMDAwMzQwCis6MTA1MUYwMDAwMjEzMDEwNDAwMDAwMDAwMDIxMzAxMzQwMDAwMDAwMDRCCis6MTA1MjAwMDAwNjEzMDEwODAwMDAwMDAzMDIxMzAxMDQwMDAwMDAwMDVGCis6MTA1MjEwMDAwMjEzMDEzNDAwMDAwMDAwMDYxMzAxMDgwMDAwMDAwMzFGCis6MTA1MjIwMDAwMjEzMDEwNDAwMDAwMDAwMDIxMzAxMzQwMDAwMDAwMDFBCis6MTA1MjMwMDAwNjEzMDEwODAwMDAwMDAzMDIxMzAxMDQwMDAwMDAwMDJGCis6MTA1MjQwMDAwMjEzMDEzNDAwMDAwMDAwMDYxMzAxMDgwMDAwMDAwM0VGCis6MTA1MjUwMDAwMjEzMDEwNDAwMDAwMDAwMDIxMzAxMzQwMDAwMDAwMEVBCis6MTA1MjYwMDAwNjEzMDEwODAwMDAwMDAzMDIxMzAxMDQwMDAwMDAwMEZGCis6MTA1MjcwMDAwMjEzMDEzNDAwMDAwMDAwMDYxMzAxMDgwMDAwMDAwM0JGCis6MTA1MjgwMDAwMjEzMDEwNDAwMDAwMDAwMDIxMzAxMzQwMDAwMDAwMEJBCis6MTA1MjkwMDAwNjEzMDEwODAwMDAwMDAzMDIxMzAxMDQwMDAwMDAwMENGCis6MTA1MkEwMDAwMjEzMDEzNDAwMDAwMDAwMDIxMTAwQjgwMDAwMDAwMUU4Cis6MTA1MkIwMDAwMjE2RTZFODAwMDAyMDAwMDIxNkU2RUMwMDAwMjAwMERFCis6MTA1MkMwMDAwMjE2RTZGMDAwMDA2NTU1MDIxNkU2RjQwMDAwNjU1NThBCis6MTA1MkQwMDAwMjE2ODE1MDAwMDAwMDAwMDIxNjgxNzQwMDAwMDAwMUQ3Cis6MTA1MkUwMDAwMjE2ODE3ODAwMDAwMDAxMDIxNjgxN0MwMDAwMDAwMTk2Cis6MTA1MkYwMDAwMjE2ODE4MDAwMDAwMDAxMDIxNjgxODQwMDAwMDAwMTc2Cis6MTA1MzAwMDAwMjE2ODE4ODAwMDAwMDAxMDIxNjgxQjQwMDAwMDAwMTJECis6MTA1MzEwMDAwMjE2ODFCODAwMDAwMDAxMDIxNjgxQkMwMDAwMDAwMUU1Cis6MTA1MzIwMDAwMjE2ODFDMDAwMDAwMDAxMDIxNjgxQzQwMDAwMDAwMUM1Cis6MTA1MzMwMDAwMjE2ODFDODAwMDAwMDAxMDIxNjgxMTAwMDAwMDAwMDYyCis6MTA1MzQwMDAwMjE2ODI0MDAwQkYwMEJGMDYxNjgyNDQwMDAwMDAwMjIxCis6MTA1MzUwMDAwMjE2ODI0QzAwQkYwMEJGMDIxNkU2QzQwMDAwMDAwMTI2Cis6MTA1MzYwMDAwMjE2RTZDODAwMDAwMDAzMDIxNkU3OTQwMDAwMDAwMEUxCis6MTA1MzcwMDAwNDJBQ0Y0MDAwMEEwQzU2MDAwMDAwMDAwMDAwMDAwMDg0Cis6MTA1MzgwMDAwMDAwMDAzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTA1MzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTA1M0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0MDAzNTk0Cis6MTA1M0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECis6MTA1M0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MTA1M0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNTAwNjAwMDAwMDAwMDM4Cis6MTA1M0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTA1M0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTA1NDAwMDAwMDAwMDAwMDAwNjAwMDkxMDAwMDAwMDAwMDAwMDAwMEFCCis6MTA1NDEwMDAwMDkxMDA5NTAwOTUwMDk5MDA5OTAwOUQwMDlEMDBBMUM0Cis6MTA1NDIwMDAwMEExMDBBNTAwQTUwMEE5MDBBOTAwQUQwMEFEMDBCMTM0Cis6MTA1NDMwMDAwMEIxMDBCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Cis6MTA1NDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCis6MTA1NDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1MDMxMTgzCis6MTA1NDYwMDAwMzExMDMxQjAzMUIwMzI1MDMyNTAzMkMwMzJDMDMzMzA4Cis6MTA1NDcwMDAwMzMzMDMzQTAzM0EwMzQxMDM0MTAzNDgwMzQ4MDM0RjBDCis6MTA1NDgwMDAwMzRGMDM1NjAzNTYwMzVEMDAwMDAwMDAwMDAwMDAwMEI4Cis6MTA1NDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCis6MTA1NEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCis6MTA1NEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCis6MTA1NEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCis6MTA1NEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCis6MTA1NEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTA1NEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCis6MTA1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlCCis6MTA1NTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCis6MTA1NTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTA1NTMwMDAwMDAwMDAwMDAwMDAwMDAwMDM1RDAzNUUwMDAwMDAwMEFBCis6MTA1NTQwMDAwMDAwMDAwMDAzNUUwMzVGMDM1RjAzNjAwMzYwMDM2MTBDCis6MTA1NTUwMDAwMzYxMDM2MjAzNjIwMzYzMDM2MzAzNjQwMzY0MDM2NTFCCis6MTA1NTYwMDAwMzY1MDM2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTA1NTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJCCis6MTA1NTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCCis6MTA1NTkwMDAwMzY2MDM2RDAzNkQwMzc5MDM3OTAzODUwMDAwMDAwMDQyCis6MTA1NUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCis6MTA1NUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVCCis6MTA1NUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERCCis6MTA1NUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCis6MTA1NUUwMDAwMDAwMDAwMDAwMDAwMDAwMDM4NTAzODYwMDAwMDAwMEFBCis6MTA1NUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCis6MTA1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCis6MTA1NjEwMDAwMDAwMDAwMDAzODYwM0IxMDAwMDAwMDAwMDAwMDAwMDRECis6MTA1NjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCis6MTA1NjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTA1NjQwMDAwM0IxMDNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCis6MTA1NjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCis6MTA1NjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UwMDQwRjQ0Cis6MTA1NjcwMDAwMDAwMDAwMDAwMDAwMDAwMDQwRjA0MTYwNDE2MDQxREMyCis6MTA1NjgwMDAwNDFEMDQyNDA0MjQwNDJCMDQyQjA0MzIwNDMyMDQzOUEyCis6MTA1NjkwMDAwNDM5MDQ0MDA0NDAwNDQ3MDQ0NzA0N0EwMDAwMDAwMDMxCis6MTA1NkEwMDAwMDAwMDAwMDA0N0EwNDdFMDQ3RTA0ODIwNDgyMDQ4NkUyCis6MTA1NkIwMDAwNDg2MDQ4QTA0OEEwNDhFMDQ4RTA0OTIwNDkyMDQ5NjVBCis6MTA1NkMwMDAwNDk2MDQ5QTA0OUEwNEVBMDRFQTA1MDAwNTAwMDUxNjAzCis6MTA1NkQwMDAwNTE2MDUxODA1MTgwNTFBMDUxQTA1MUMwNTFDMDUxRUQyCis6MTA1NkUwMDAwNTFFMDUyMDA1MjAwNTIyMDUyMjA1MjQwNTI0MDUyNjgyCis6MTA1NkYwMDAwNTI2MDY5MzAwMDAwMDAwMDAwMDAwMDAwNjkzMDY5OEFGCis6MTA1NzAwMDAwNjk4MDY5RDA2OUQwNkEyMDZBMjA2QTcwNkE3MDZBQzU5Cis6MTA1NzEwMDAwNkFDMDZCMTA2QjEwNkI2MDZCNjA2QkIwNkJCMDZCQ0FECis6MTA1NzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTA1NzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTA1NzQwMDAwMDAwMDAwMDAwMDAwMDAwMDZCQzA2RTAwMDAwMDAwMEIxCis6MTA1NzUwMDAwMDAwMDAwMDA2RTAwNkUyMDZFMjA2RTQwNkU0MDZFNkQzCis6MTA1NzYwMDAwNkU2MDZFODA2RTgwNkVBMDZFQTA2RUMwNkVDMDZFRUI5Cis6MTA1NzcwMDAwNkVFMDZGMDA2RjAwNzA1MDcwNTA3MDgwNzA4MDcwQjAxCis6MTA1NzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTA1NzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTA1N0EwMDAwNzBCMDc0RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCis6MTA1N0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTA1N0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzRGMDdFMTlCCis6MTA1N0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTA1N0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTA1N0YwMDAwMDAwMDAwMDAwMDAwMDAwMDdFMTA3RUYwMDAwMDAwMENCCis6MTA1ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Cis6MTA1ODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTA1ODIwMDAwMDAwMDAwMDA3RUYwODJDMDAwMDAwMDAwMDAwMDAwMDRFCis6MTA1ODMwMDAwODJDMDgzNTA4MzUwODNFMDgzRTA4NDcwODQ3MDg1MDM4Cis6MTA1ODQwMDAwODUwMDg1OTA4NTkwODYyMDg2MjA4NkIwODZCMDg3NDA4Cis6MTA1ODUwMDAwODc0MDhENTA4RDUwOEVBMDhFQTA4RkYwOEZGMDkwMjE1Cis6MTA1ODYwMDAwOTAyMDkwNTA5MDUwOTA4MDkwODA5MEIwOTBCMDkwRUIwCis6MTA1ODcwMDAwOTBFMDkxMTA5MTEwOTE0MDkxNDA5MTcwOTE3MDkyMDNBCis6MTA1ODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Cis6MTA1ODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Cis6MTA1OEEwMDAwMDAwMDAwMDAwMDAwMDAwMDkyMDA5MjYwMDAwMDAwMEEwCis6MTA1OEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Cis6MTA1OEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Cis6MTA1OEQwMDAwMDAwMDAwMDA5MjYwOTJCMDAwMDAwMDAwMDAwMDAwMDY1Cis6MTA1OEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Cis6MTA1OEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Cis6MTA1OTAwMDAwOTJCMDkzMzAwMDAwMDAwMDAwMDAwMDAwOTMzMDkzNEFFCis6MTA1OTEwMDAwOTM0MDkzNTA5MzUwOTM2MDkzNjA5MzcwOTM3MDkzODhGCis6MTA1OTIwMDAwOTM4MDkzOTA5MzkwOTNBMDkzQTA5M0IwMDAwMDAwMEU4Cis6MTA1OTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Cis6MTA1OTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTA1OTUwMDAwMDAwMDAwMDAwMDAwMDAwMDkzQjA5QUMwMDAwMDAwMDRFCis6MTA1OTYwMDAwMDAwMDAwMDA5QUMwOUFEMDlBRDA5QUUwOUFFMDlBRkYwCis6MTA1OTcwMDAwOUFGMDlCMDA5QjAwOUIxMDlCMTA5QjIwOUIyMDlCMzU3Cis6MTA1OTgwMDAwOUIzMDlCNDA5QjQwOUM4MDlDODA5REIwOURCMDlFRjdGCis6MTA1OTkwMDAwOUVGMDlGMDA5RjAwOUYxMDlGMTA5RjIwOUYyMDlGMzM3Cis6MTA1OUEwMDAwOUYzMDlGNDA5RjQwOUY1MDlGNTA5RjYwOUY2MDlGNzA3Cis6MTA1OUIwMDAwOUY3MEExNjAwMDAwMDAwMDAwMDAwMDAwQTE2MEExOTg0Cis6MTA1OUMwMDAwQTE5MEExQzBBMUMwQTFGMEExRjBBMjIwQTIyMEEyNThGCis6MTA1OUQwMDAwQTI1MEEyODBBMjgwQTJCMEEyQjBBMkUwQTJFMEEzMDIwCis6MTA1OUUwMDAwMDAwMDAwMDAwMDAwMDAwMEEzMDBBMzMwQTMzMEEzNkMzCis6MTA1OUYwMDAwQTM2MEEzOTBBMzkwQTNDMEEzQzBBM0YwQTNGMEE0Mjc3Cis6MTA1QTAwMDAwQTQyMEE0NTBBNDUwQTQ4MEE0ODBBNDkwMDAwMDAwMEI1Cis6MTA1QTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Cis6MTA1QTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Cis6MTA1QTMwMDAwMDAwMDAwMDBBNDkwQTYxMDAwMDAwMDAwMDAwMDAwMEE4Cis6MTA1QTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Cis6MTA1QTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Cis6MTA1QTYwMDAwQTYxMEE2MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTA1QTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTA1QTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTA1QTkwMDAwMDAxMDAwMDAwMDIwNzAwMDAwMzBFMDAwMDA0MTUwMEQyCis6MTA1QUEwMDAwMDA1MUMwMDAwMDYyMzAwMDAwNzJBMDAwMDA4MzEwMDQyCis6MTA1QUIwMDAwMDA5MzgwMDAwMEEzRjAwMDAwQjQ2MDAwMDBDNEQwMEIyCis6MTA1QUMwMDAwMDBENTQwMDAwMEU1QjAwMDAwRjYyMDAwMDEwNjkwMDIyCis6MTA1QUQwMDAwMDExNzAwMDAwMTI3NzAwMDAxMzdFMDAwMDE0ODUwMDkyCis6MTA1QUUwMDAwMDE1OEMwMDAwMTY5MzAwMDAxNzlBMDAwMDE4QTEwMDAyCis6MTA1QUYwMDAwMDE5QTgwMDAwMUFBRjAwMDAxQkI2MDAwMDFDQkQwMDcyCis6MTA1QjAwMDAwMDFEQzQwMDAwMUVDQjAwMDAxRkQyMDAwMDAwRDkwMDAxCis6MTA1QjEwMDAwMDAwMjAwMDAwMDA0MDAwMDAwMDYwMDAwMDAwODAwMDQ1Cis6MTA1QjIwMDAwMDAwQTAwMDAwMDBDMDAwMDAwMEUwMDAwMDAxMDAwMDM0Cis6MTA1QjMwMDAwMDAxMjAwMDAwMDE0MDAwMDAwMTYwMDAwMDAxODAwMDIxCis6MTA1QjQwMDAwMDAxQTAwMDAwMDFDMDAwMDAwMUUwMDAwMDAyMDAwMDEwCis6MTA1QjUwMDAwMDAyMjAwMDAwMDI0MDAwMDAwMjYwMDAwMDAyODAwMEZECis6MTA1QjYwMDAwMDAyQTAwMDAwMDJDMDAwMDAwMkUwMDAwMDAzMDAwMEVDCis6MTA1QjcwMDAwMDAzMjAwMDAwMDM0MDAwMDAwMzYwMDAwMDAzODAwMEQ5Cis6MTA1QjgwMDAwMDAzQTAwMDAwMDNDMDAwMDAwM0UwMDAwMDA0MDAwMEM4Cis6MTA1QjkwMDAwMDA0MjAwMDAwMDQ0MDAwMDAwNDYwMDAwMDA0ODAwMEI1Cis6MTA1QkEwMDAwMDA0QTAwMDAwMDRDMDAwMDAwNEUwMDAwMDA1MDAwMEE0Cis6MTA1QkIwMDAwMDA1MjAwMDAwMDU0MDAwMDAwNTYwMDAwMDA1ODAwMDkxCis6MTA1QkMwMDAwMDA1QTAwMDAwMDVDMDAwMDAwNUUwMDAwMDA2MDAwMDgwCis6MTA1QkQwMDAwMDA2MjAwMDAwMDY0MDAwMDAwNjYwMDAwMDA2ODAwMDZECis6MTA1QkUwMDAwMDA2QTAwMDAwMDZDMDAwMDAwNkUwMDAwMDA3MDAwMDVDCis6MTA1QkYwMDAwMDA3MjAwMDAwMDc0MDAwMDAwNzYwMDAwMDA3ODAwMDQ5Cis6MTA1QzAwMDAwMDA3QTAwMDAwMDdDMDAwMDAwN0UwMDAwMDA4MDAwMDM3Cis6MTA1QzEwMDAwMDA4MjAwMDAwMDg0MDAwMDAwODYwMDAwMDA4ODAwMDI0Cis6MTA1QzIwMDAwMDA4QTAwMDAwMDhDMDAwMDAwOEUwMDAwMDA5MDAwMDEzCis6MTA1QzMwMDAwMDA5MjAwMDAwMDk0MDAwMDAwOTYwMDAwMDA5ODAwMDAwCis6MTA1QzQwMDAwMDA5QTAwMDAwMDlDMDAwMDAwOUUwMDAwMDBBMDAwMEVGCis6MTA1QzUwMDAwMDBBMjAwMDAwMEE0MDAwMDAwQTYwMDAwMDBBODAwMERDCis6MTA1QzYwMDAwMDBBQTAwMDAwMEFDMDAwMDAwQUUwMDAwMDBCMDAwMENCCis6MTA1QzcwMDAwMDBCMjAwMDAwMEI0MDAwMDAwQjYwMDAwMDBCODAwMEI4Cis6MTA1QzgwMDAwMDBCQTAwMDAwMEJDMDAwMDAwQkUwMDAwMDBDMDAwMEE3Cis6MTA1QzkwMDAwMDBDMjAwMDAwMEM0MDAwMDAwQzYwMDAwMDBDODAwMDk0Cis6MTA1Q0EwMDAwMDBDQTAwMDAwMENDMDAwMDAwQ0UwMDAwMDBEMDAwMDgzCis6MTA1Q0IwMDAwMDBEMjAwMDAwMEQ0MDAwMDAwRDYwMDAwMDBEODAwMDcwCis6MTA1Q0MwMDAwMDBEQTAwMDAwMERDMDAwMDAwREUwMDAwMDBFMDAwMDVGCis6MTA1Q0QwMDAwMDBFMjAwMDAwMEU0MDAwMDAwRTYwMDAwMDBFODAwMDRDCis6MTA1Q0UwMDAwMDBFQTAwMDAwMEVDMDAwMDAwRUUwMDAwMDBGMDAwMDNCCis6MTA1Q0YwMDAwMDBGMjAwMDAwMEY0MDAwMDAwRjYwMDAwMDBGODAwMDI4Cis6MTA1RDAwMDAwMDBGQTAwMDAwMEZDMDAwMDAwRkUwMDAwMDEwMDAwMDE2Cis6MTA1RDEwMDAwMDEwMjAwMDAwMTA0MDAwMDAxMDYwMDAwMDEwODAwMDAzCis6MTA1RDIwMDAwMDEwQTAwMDAwMTBDMDAwMDAxMEUwMDAwMDExMDAwMEYyCis6MTA1RDMwMDAwMDExMjAwMDAwMTE0MDAwMDAxMTYwMDAwMDExODAwMERGCis6MTA1RDQwMDAwMDExQTAwMDAwMTFDMDAwMDAxMUUwMDAwMDEyMDAwMENFCis6MTA1RDUwMDAwMDEyMjAwMDAwMTI0MDAwMDAxMjYwMDAwMDEyODAwMEJCCis6MTA1RDYwMDAwMDEyQTAwMDAwMTJDMDAwMDAxMkUwMDAwMDEzMDAwMEFBCis6MTA1RDcwMDAwMDEzMjAwMDAwMTM0MDAwMDAxMzYwMDAwMDEzODAwMDk3Cis6MTA1RDgwMDAwMDEzQTAwMDAwMTNDMDAwMDAxM0UwMDAwMDE0MDAwMDg2Cis6MTA1RDkwMDAwMDE0MjAwMDAwMTQ0MDAwMDAxNDYwMDAwMDE0ODAwMDczCis6MTA1REEwMDAwMDE0QTAwMDAwMTRDMDAwMDAxNEUwMDAwMDE1MDAwMDYyCis6MTA1REIwMDAwMDE1MjAwMDAwMTU0MDAwMDAxNTYwMDAwMDE1ODAwMDRGCis6MTA1REMwMDAwMDE1QTAwMDAwMTVDMDAwMDAxNUUwMDAwMDE2MDAwMDNFCis6MTA1REQwMDAwMDE2MjAwMDAwMTY0MDAwMDAxNjYwMDAwMDE2ODAwMDJCCis6MTA1REUwMDAwMDE2QTAwMDAwMTZDMDAwMDAxNkUwMDAwMDE3MDAwMDFBCis6MTA1REYwMDAwMDE3MjAwMDAwMTc0MDAwMDAxNzYwMDAwMDE3ODAwMDA3Cis6MTA1RTAwMDAwMDE3QTAwMDAwMTdDMDAwMDAxN0UwMDAwMDE4MDAwMEY1Cis6MTA1RTEwMDAwMDE4MjAwMDAwMTg0MDAwMDAxODYwMDAwMDE4ODAwMEUyCis6MTA1RTIwMDAwMDE4QTAwMDAwMThDMDAwMDAxOEUwMDAwMDE5MDAwMEQxCis6MTA1RTMwMDAwMDE5MjAwMDAwMTk0MDAwMDAxOTYwMDAwMDE5ODAwMEJFCis6MTA1RTQwMDAwMDE5QTAwMDAwMTlDMDAwMDAxOUUwMDAwMDFBMDAwMEFECis6MTA1RTUwMDAwMDFBMjAwMDAwMUE0MDAwMDAxQTYwMDAwMDFBODAwMDlBCis6MTA1RTYwMDAwMDFBQTAwMDAwMUFDMDAwMDAxQUUwMDAwMDFCMDAwMDg5Cis6MTA1RTcwMDAwMDFCMjAwMDAwMUI0MDAwMDAxQjYwMDAwMDFCODAwMDc2Cis6MTA1RTgwMDAwMDFCQTAwMDAwMUJDMDAwMDAxQkUwMDAwMDFDMDAwMDY1Cis6MTA1RTkwMDAwMDFDMjAwMDAwMUM0MDAwMDAxQzYwMDAwMDFDODAwMDUyCis6MTA1RUEwMDAwMDFDQTAwMDAwMUNDMDAwMDAxQ0UwMDAwMDFEMDAwMDQxCis6MTA1RUIwMDAwMDFEMjAwMDAwMUQ0MDAwMDAxRDYwMDAwMDFEODAwMDJFCis6MTA1RUMwMDAwMDFEQTAwMDAwMURDMDAwMDAxREUwMDAwMDFFMDAwMDFECis6MTA1RUQwMDAwMDFFMjAwMDAwMUU0MDAwMDAxRTYwMDAwMDFFODAwMDBBCis6MTA1RUUwMDAwMDFFQTAwMDAwMUVDMDAwMDAxRUUwMDAwMDFGMDAwMEY5Cis6MTA1RUYwMDAwMDFGMjAwMDAwMUY0MDAwMDAxRjYwMDAwMDFGODAwMEU2Cis6MTA1RjAwMDAwMDFGQTAwMDAwMUZDMDAwMDAxRkUwMDAwMDIwMDAwMEQ0Cis6MTA1RjEwMDAwMDIwMjAwMDAwMjA0MDAwMDAyMDYwMDAwMDIwODAwMEMxCis6MTA1RjIwMDAwMDIwQTAwMDAwMjBDMDAwMDAyMEUwMDAwMDIxMDAwMEIwCis6MTA1RjMwMDAwMDIxMjAwMDAwMjE0MDAwMDAyMTYwMDAwMDIxODAwMDlECis6MTA1RjQwMDAwMDIxQTAwMDAwMjFDMDAwMDAyMUUwMDAwMDIyMDAwMDhDCis6MTA1RjUwMDAwMDIyMjAwMDAwMjI0MDAwMDAyMjYwMDAwMDIyODAwMDc5Cis6MTA1RjYwMDAwMDIyQTAwMDAwMjJDMDAwMDAyMkUwMDAwMDIzMDAwMDY4Cis6MTA1RjcwMDAwMDIzMjAwMDAwMjM0MDAwMDAyMzYwMDAwMDIzODAwMDU1Cis6MTA1RjgwMDAwMDIzQTAwMDAwMjNDMDAwMDAyM0UwMDAwMDI0MDAwMDQ0Cis6MTA1RjkwMDAwMDI0MjAwMDAwMjQ0MDAwMDAyNDYwMDAwMDI0ODAwMDMxCis6MTA1RkEwMDAwMDI0QTAwMDAwMjRDMDAwMDAyNEUwMDAwMDI1MDAwMDIwCis6MTA1RkIwMDAwMDI1MjAwMDAwMjU0MDAwMDAyNTYwMDAwMDI1ODAwMDBECis6MTA1RkMwMDAwMDI1QTAwMDAwMjVDMDAwMDAyNUUwMDAwMDI2MDAwMEZDCis6MTA1RkQwMDAwMDI2MjAwMDAwMjY0MDAwMDAyNjYwMDAwMDI2ODAwMEU5Cis6MTA1RkUwMDAwMDI2QTAwMDAwMjZDMDAwMDAyNkUwMDAwMDI3MDAwMEQ4Cis6MTA1RkYwMDAwMDI3MjAwMDAwMjc0MDAwMDAyNzYwMDAwMDI3ODAwMEM1Cis6MTA2MDAwMDAwMDI3QTAwMDAwMjdDMDAwMDAyN0UwMDAwMDI4MDAwMEIzCis6MTA2MDEwMDAwMDI4MjAwMDAwMjg0MDAwMDAyODYwMDAwMDI4ODAwMEEwCis6MTA2MDIwMDAwMDI4QTAwMDAwMjhDMDAwMDAyOEUwMDAwMDI5MDAwMDhGCis6MTA2MDMwMDAwMDI5MjAwMDAwMjk0MDAwMDAyOTYwMDAwMDI5ODAwMDdDCis6MTA2MDQwMDAwMDI5QTAwMDAwMjlDMDAwMDAyOUUwMDAwMDJBMDAwMDZCCis6MTA2MDUwMDAwMDJBMjAwMDAwMkE0MDAwMDAyQTYwMDAwMDJBODAwMDU4Cis6MTA2MDYwMDAwMDJBQTAwMDAwMkFDMDAwMDAyQUUwMDAwMDJCMDAwMDQ3Cis6MTA2MDcwMDAwMDJCMjAwMDAwMkI0MDAwMDAyQjYwMDAwMDJCODAwMDM0Cis6MTA2MDgwMDAwMDJCQTAwMDAwMkJDMDAwMDAyQkUwMDAwMDJDMDAwMDIzCis6MTA2MDkwMDAwMDJDMjAwMDAwMkM0MDAwMDAyQzYwMDAwMDJDODAwMDEwCis6MTA2MEEwMDAwMDJDQTAwMDAwMkNDMDAwMDAyQ0UwMDAwMDJEMDAwMEZGCis6MTA2MEIwMDAwMDJEMjAwMDAwMkQ0MDAwMDAyRDYwMDAwMDJEODAwMEVDCis6MTA2MEMwMDAwMDJEQTAwMDAwMkRDMDAwMDAyREUwMDAwMDJFMDAwMERCCis6MTA2MEQwMDAwMDJFMjAwMDAwMkU0MDAwMDAyRTYwMDAwMDJFODAwMEM4Cis6MTA2MEUwMDAwMDJFQTAwMDAwMkVDMDAwMDAyRUUwMDAwMDJGMDAwMEI3Cis6MTA2MEYwMDAwMDJGMjAwMDAwMkY0MDAwMDAyRjYwMDAwMDJGODAwMEE0Cis6MTA2MTAwMDAwMDJGQTAwMDAwMkZDMDAwMDAyRkUwMDAwMDMwMDAwMDkyCis6MTA2MTEwMDAwMDMwMjAwMDAwMzA0MDAwMDAzMDYwMDAwMDMwODAwMDdGCis6MTA2MTIwMDAwMDMwQTAwMDAwMzBDMDAwMDAzMEUwMDAwMDMxMDAwMDZFCis6MTA2MTMwMDAwMDMxMjAwMDAwMzE0MDAwMDAzMTYwMDAwMDMxODAwMDVCCis6MTA2MTQwMDAwMDMxQTAwMDAwMzFDMDAwMDAzMUUwMDAwMDMyMDAwMDRBCis6MTA2MTUwMDAwMDMyMjAwMDAwMzI0MDAwMDAzMjYwMDAwMDMyODAwMDM3Cis6MTA2MTYwMDAwMDMyQTAwMDAwMzJDMDAwMDAzMkUwMDAwMDMzMDAwMDI2Cis6MTA2MTcwMDAwMDMzMjAwMDAwMzM0MDAwMDAzMzYwMDAwMDMzODAwMDEzCis6MTA2MTgwMDAwMDMzQTAwMDAwMzNDMDAwMDAzM0UwMDAwMDM0MDAwMDAyCis6MTA2MTkwMDAwMDM0MjAwMDAwMzQ0MDAwMDAzNDYwMDAwMDM0ODAwMEVGCis6MTA2MUEwMDAwMDM0QTAwMDAwMzRDMDAwMDAzNEUwMDAwMDM1MDAwMERFCis6MTA2MUIwMDAwMDM1MjAwMDAwMzU0MDAwMDAzNTYwMDAwMDM1ODAwMENCCis6MTA2MUMwMDAwMDM1QTAwMDAwMzVDMDAwMDAzNUUwMDAwMDM2MDAwMEJBCis6MTA2MUQwMDAwMDM2MjAwMDAwMzY0MDAwMDAzNjYwMDAwMDM2ODAwMEE3Cis6MTA2MUUwMDAwMDM2QTAwMDAwMzZDMDAwMDAzNkUwMDAwMDM3MDAwMDk2Cis6MTA2MUYwMDAwMDM3MjAwMDAwMzc0MDAwMDAzNzYwMDAwMDM3ODAwMDgzCis6MTA2MjAwMDAwMDM3QTAwMDAwMzdDMDAwMDAzN0UwMDAwMDM4MDAwMDcxCis6MTA2MjEwMDAwMDM4MjAwMDAwMzg0MDAwMDAzODYwMDAwMDM4ODAwMDVFCis6MTA2MjIwMDAwMDM4QTAwMDAwMzhDMDAwMDAzOEUwMDAwMDM5MDAwMDRECis6MTA2MjMwMDAwMDM5MjAwMDAwMzk0MDAwMDAzOTYwMDAwMDM5ODAwMDNBCis6MTA2MjQwMDAwMDM5QTAwMDAwMzlDMDAwMDAzOUUwMDAwMDNBMDAwMDI5Cis6MTA2MjUwMDAwMDNBMjAwMDAwM0E0MDAwMDAzQTYwMDAwMDNBODAwMDE2Cis6MTA2MjYwMDAwMDNBQTAwMDAwM0FDMDAwMDAzQUUwMDAwMDNCMDAwMDA1Cis6MTA2MjcwMDAwMDNCMjAwMDAwM0I0MDAwMDAzQjYwMDAwMDNCODAwMEYyCis6MTA2MjgwMDAwMDNCQTAwMDAwM0JDMDAwMDAzQkUwMDAwMDNDMDAwMEUxCis6MTA2MjkwMDAwMDNDMjAwMDAwM0M0MDAwMDAzQzYwMDAwMDNDODAwMENFCis6MTA2MkEwMDAwMDNDQTAwMDAwM0NDMDAwMDAzQ0UwMDAwMDNEMDAwMEJECis6MTA2MkIwMDAwMDNEMjAwMDAwM0Q0MDAwMDAzRDYwMDAwMDNEODAwMEFBCis6MTA2MkMwMDAwMDNEQTAwMDAwM0RDMDAwMDAzREUwMDAwMDNFMDAwMDk5Cis6MTA2MkQwMDAwMDNFMjAwMDAwM0U0MDAwMDAzRTYwMDAwMDNFODAwMDg2Cis6MTA2MkUwMDAwMDNFQTAwMDAwM0VDMDAwMDAzRUUwMDAwMDNGMDAwMDc1Cis6MTA2MkYwMDAwMDNGMjAwMDAwM0Y0MDAwMDAzRjYwMDAwMDNGODAwMDYyCis6MTA2MzAwMDAwMDNGQTAwMDAwM0ZDMDAwMDAzRkUwMDAwMDNGRTAwMTcwCis6MTA2MzEwMDAwMDAwMDAwMDAwMDAwMUZGMDAwMDAyMDAwMDAwN0ZGODA0Cis6MTA2MzIwMDAwMDAwN0ZGODAwMDAwQTkwMDAwMDM1MDAwMDAwMDAwMTI2Cis6MTA2MzMwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDVGCis6MTA2MzQwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDRGCis6MTA2MzUwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDNGCis6MTA2MzYwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDJGCis6MTA2MzcwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDFGCis6MTA2MzgwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDBGCis6MTA2MzkwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEZGCis6MTA2M0EwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEVGCis6MTA2M0IwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMERGCis6MTA2M0MwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMENGCis6MTA2M0QwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEJGCis6MTA2M0UwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEFGCis6MTA2M0YwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDlGCis6MTA2NDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDhFCis6MTA2NDEwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDdFCis6MTA2NDIwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDZFCis6MTA2NDMwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDVFCis6MTA2NDQwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDRFCis6MTA2NDUwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDNFCis6MTA2NDYwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDJFCis6MTA2NDcwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDFFCis6MTA2NDgwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDBFCis6MTA2NDkwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEZFCis6MTA2NEEwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEVFCis6MTA2NEIwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMERFCis6MTA2NEMwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMENFCis6MTA2NEQwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEJFCis6MTA2NEUwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEFFCis6MTA2NEYwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDlFCis6MTA2NTAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDhECis6MTA2NTEwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDdECis6MTA2NTIwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDZECis6MTA2NTMwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDVECis6MTA2NTQwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDRECis6MTA2NTUwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDNECis6MTA2NTYwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDJECis6MTA2NTcwMDAwMDAwMDAwMDE0MEFGRjAwMDAwMDAwMDEwMDAwMDAwMEZECis6MTA2NTgwMDAwMDIwMTAwMTAwMDAwMDAwMDEwMDkwMDAwMDAwMDEwMDQ4Cis6MTA2NTkwMDAwMDAwOTAwMjAwMDA5MDA0MDAwMDkwMDYwMDAwOTAwOEE3Cis6MTA2NUEwMDAwMDAwOTAwQTAwMDA5MDBDMDAwMDkwMEUwMDAwOTAxMDc3Cis6MTA2NUIwMDAwMDAwOTAxMjAwMDA5MDE0MDAwMDkwMTYwMDAwOTAxODQ3Cis6MTA2NUMwMDAwMDAwOTAxQTAwMDA5MDFDMDAwMDkwMUUwMDAwOTAyMDE3Cis6MTA2NUQwMDAwMDAwOTAyMjAwMDA5MDI0MDAwMDkwMjYwMDAwOTAyOEU3Cis6MTA2NUUwMDAwMDAwOTAyQTAwMDA5MDJDMDAwMDkwMkUwMDAwOTAzMEI3Cis6MTA2NUYwMDAwMDAwOTAzMjAwMDA5MDM0MDAwMDkwMzYwMDAwOTAzODg3Cis6MTA2NjAwMDAwMDAwOTAzQTAwMDA5MDNDMDAwMDkwM0UwMDAwOTA0MDU2Cis6MTA2NjEwMDAwMDAwOTA0MjAwMDA5MDQ0MDAwMDkwNDYwMDAwOTA0ODI2Cis6MTA2NjIwMDAwMDAwOTA0QTAwMDA5MDRDMDAwMDkwNEUwMDAwOTA1MEY2Cis6MTA2NjMwMDAwMDAwOTA1MjAwMDA5MDU0MDAwMDkwNTYwMDAwOTA1OEM2Cis6MTA2NjQwMDAwMDAwOTA1QTAwMDA5MDVDMDAwMDkwNUUwMDAwOTA2MDk2Cis6MTA2NjUwMDAwMDAwOTA2MjAwMDA5MDY0MDAwMDkwNjYwMDAwOTA2ODY2Cis6MTA2NjYwMDAwMDAwOTA2QTAwMDA5MDZDMDAwMDkwNkUwMDAwOTA3MDM2Cis6MTA2NjcwMDAwMDAwOTA3MjAwMDA5MDc0MDAwMDkwNzYwMDAwOTA3ODA2Cis6MTA2NjgwMDAwMDAwOTA3QTAwMDA5MDdDMDAwMDkwN0UwMDAwOTA4MEQ2Cis6MTA2NjkwMDAwMDAwOTA4MjAwMDA5MDg0MDAwMDkwODYwMDAwOTA4OEE2Cis6MTA2NkEwMDAwMDAwOTA4QTAwMDA5MDhDMDAwMDkwOEUwMDAwOTA5MDc2Cis6MTA2NkIwMDAwMDAwOTA5MjAwMDA5MDk0MDAwMDkwOTYwMDAwOTA5ODQ2Cis6MTA2NkMwMDAwMDAwOTA5QTAwMDA5MDlDMDAwMDkwOUUwMDAwOTBBMDE2Cis6MTA2NkQwMDAwMDAwOTBBMjAwMDA5MEE0MDAwMDkwQTYwMDAwOTBBOEU2Cis6MTA2NkUwMDAwMDAwOTBBQTAwMDA5MEFDMDAwMDkwQUUwMDAwOTBCMEI2Cis6MTA2NkYwMDAwMDAwOTBCMjAwMDA5MEI0MDAwMDkwQjYwMDAwOTBCODg2Cis6MTA2NzAwMDAwMDAwOTBCQTAwMDA5MEJDMDAwMDkwQkUwMDAwOTBDMDU1Cis6MTA2NzEwMDAwMDAwOTBDMjAwMDA5MEM0MDAwMDkwQzYwMDAwOTBDODI1Cis6MTA2NzIwMDAwMDAwOTBDQTAwMDA5MENDMDAwMDkwQ0UwMDAwOTBEMEY1Cis6MTA2NzMwMDAwMDAwOTBEMjAwMDA5MEQ0MDAwMDkwRDYwMDAwOTBEOEM1Cis6MTA2NzQwMDAwMDAwOTBEQTAwMDA5MERDMDAwMDkwREUwMDAwOTBFMDk1Cis6MTA2NzUwMDAwMDAwOTBFMjAwMDA5MEU0MDAwMDkwRTYwMDAwOTBFODY1Cis6MTA2NzYwMDAwMDAwOTBFQTAwMDA5MEVDMDAwMDkwRUUwMDAwOTBGMDM1Cis6MTA2NzcwMDAwMDAwOTBGMjAwMDA5MEY0MDAwMDkwRjYwMDAwOTBGODA1Cis6MTA2NzgwMDAwMDAwOTBGQTAwMDA5MEZDMDAwMDkwRkUwMDAwOTEwMEQ0Cis6MTA2NzkwMDAwMDAwOTEwMjAwMDA5MTA0MDAwMDkxMDYwMDAwOTEwOEExCis6MTA2N0EwMDAwMDAwOTEwQTAwMDA5MTBDMDAwMDkxMEUwMDAwOTExMDcxCis6MTA2N0IwMDAwMDAwOTExMjAwMDA5MTE0MDAwMDkxMTYwMDAwOTExODQxCis6MTA2N0MwMDAwMDAwOTExQTAwMDA5MTFDMDAwMDkxMUUwMDAwOTEyMDExCis6MTA2N0QwMDAwMDAwOTEyMjAwMDA5MTI0MDAwMDkxMjYwMDAwOTEyOEUxCis6MTA2N0UwMDAwMDAwOTEyQTAwMDA5MTJDMDAwMDkxMkUwMDAwOTEzMEIxCis6MTA2N0YwMDAwMDAwOTEzMjAwMDA5MTM0MDAwMDkxMzYwMDAwOTEzODgxCis6MTA2ODAwMDAwMDAwOTEzQTAwMDA5MTNDMDAwMDkxM0UwMDAwOTE0MDUwCis6MTA2ODEwMDAwMDAwOTE0MjAwMDA5MTQ0MDAwMDkxNDYwMDAwOTE0ODIwCis6MTA2ODIwMDAwMDAwOTE0QTAwMDA5MTRDMDAwMDkxNEUwMDAwOTE1MEYwCis6MTA2ODMwMDAwMDAwOTE1MjAwMDA5MTU0MDAwMDkxNTYwMDAwOTE1OEMwCis6MTA2ODQwMDAwMDAwOTE1QTAwMDA5MTVDMDAwMDkxNUUwMDAwOTE2MDkwCis6MTA2ODUwMDAwMDAwOTE2MjAwMDA5MTY0MDAwMDkxNjYwMDAwOTE2ODYwCis6MTA2ODYwMDAwMDAwOTE2QTAwMDA5MTZDMDAwMDkxNkUwMDAwOTE3MDMwCis6MTA2ODcwMDAwMDAwOTE3MjAwMDA5MTc0MDAwMDkxNzYwMDAwOTE3ODAwCis6MTA2ODgwMDAwMDAwOTE3QTAwMDA5MTdDMDAwMDkxN0UwMDAwOTE4MEQwCis6MTA2ODkwMDAwMDAwOTE4MjAwMDA5MTg0MDAwMDkxODYwMDAwOTE4OEEwCis6MTA2OEEwMDAwMDAwOTE4QTAwMDA5MThDMDAwMDkxOEUwMDAwOTE5MDcwCis6MTA2OEIwMDAwMDAwOTE5MjAwMDA5MTk0MDAwMDkxOTYwMDAwOTE5ODQwCis6MTA2OEMwMDAwMDAwOTE5QTAwMDA5MTlDMDAwMDkxOUUwMDAwOTFBMDEwCis6MTA2OEQwMDAwMDAwOTFBMjAwMDA5MUE0MDAwMDkxQTYwMDAwOTFBOEUwCis6MTA2OEUwMDAwMDAwOTFBQTAwMDA5MUFDMDAwMDkxQUUwMDAwOTFCMEIwCis6MTA2OEYwMDAwMDAwOTFCMjAwMDA5MUI0MDAwMDkxQjYwMDAwOTFCODgwCis6MTA2OTAwMDAwMDAwOTFCQTAwMDA5MUJDMDAwMDkxQkUwMDAwOTFDMDRGCis6MTA2OTEwMDAwMDAwOTFDMjAwMDA5MUM0MDAwMDkxQzYwMDAwOTFDODFGCis6MTA2OTIwMDAwMDAwOTFDQTAwMDA5MUNDMDAwMDkxQ0UwMDAwOTFEMEVGCis6MTA2OTMwMDAwMDAwOTFEMjAwMDA5MUQ0MDAwMDkxRDYwMDAwOTFEOEJGCis6MTA2OTQwMDAwMDAwOTFEQTAwMDA5MURDMDAwMDkxREUwMDAwOTFFMDhGCis6MTA2OTUwMDAwMDAwOTFFMjAwMDA5MUU0MDAwMDkxRTYwMDAwOTFFODVGCis6MTA2OTYwMDAwMDAwOTFFQTAwMDA5MUVDMDAwMDkxRUUwMDAwOTFGMDJGCis6MTA2OTcwMDAwMDAwOTFGMjAwMDA5MUY0MDAwMDkxRjYwMDAwOTFGOEZGCis6MTA2OTgwMDAwMDAwOTFGQTAwMDA5MUZDMDAwMDkxRkVGRkZGRkZGRjY0Cis6MTA2OTkwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjA3Cis6MTA2OUEwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY3Cis6MTA2OUIwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkU3Cis6MTA2OUMwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkQ3Cis6MTA2OUQwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkM3Cis6MTA2OUUwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkI3Cis6MTA2OUYwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkE3Cis6MTA2QTAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMDAwMDAwMzhGCis6MTA2QTEwMDAwMEJFQkMyMDAwMDAwMDAwMDAwMDAwMDUwMDAwMDAwM0Q0Cis6MTA2QTIwMDAwMEJFQkMyMDAwMDAwMDAwMDAwMDAwMDUwMDAwMDAwM0M0Cis6MTA2QTMwMDAwMEJFQkMyMDAwMDAwMDAwMDAwMDAwMDUwMDAwMDAwM0I0Cis6MTA2QTQwMDAwMEJFQkMyMDAwMDAwMDAwMDAwMDAwMDUwMDAwMDAwM0E0Cis6MTA2QTUwMDAwMEJFQkMyMDAwMDAwMDAwMDAwMDAwMDUwMDAwMDAwMzk0Cis6MTA2QTYwMDAwMEJFQkMyMDAwMDAwMDAwMDAwMDAwMDUwMDAwMDAwMzg0Cis6MTA2QTcwMDAwMEJFQkMyMDAwMDAwMDAwMDAwMDAwMDUwMDAwMDAwMzc0Cis6MTA2QTgwMDAwMEJFQkMyMDAwMDAwMDAwMDAwMDAwMDUwMDAwMjAwMDQ3Cis6MTA2QTkwMDAwMDAwNDBDMDAwMDA2MTgwMDAwMDgyNDAwMDAwQTMwMEIwCis6MTA2QUEwMDAwMDAwQzNDMDAwMDBFNDgwMDAwMTA1NDAwMDAxMjYwMDkyCis6MTA2QUIwMDAwMDAxNDZDMDAwMDE2NzgwMDAwMTg4NDAwMDAxQTkwMDc0Cis6MTA2QUMwMDAwMDAxQzlDMDAwMDFFQTgwMDAwMjBCNDAwMDAyMkMwMDU2Cis6MTA2QUQwMDAwMDAyNENDMDAwMDI2RDgwMDAwMjhFNDAwMDAyQUYwMDM4Cis6MTA2QUUwMDAwMDAyQ0ZDMDAwMDJGMDgwMDAwMDExNDAwMDAwODAwMEQyCis6MTA2QUYwMDAwMDAxMDM4MDAwMDE4NzAwMDAwMjBBODAwMDAyOEUwMDZFCis6MTA2QjAwMDAwMDAzMTE4MDAwMDM5NTAwMDAwNDE4ODAwMDA0OUMwMDFECis6MTA2QjEwMDAwMDA1MUY4MDAwMDVBMzAwMDAwNjI2ODAwMDA2QUEwMENECis6MTA2QjIwMDAwMDA3MkQ4MDAwMDdCMTAwMDAwODM0ODAwMDA4QjgwMDdECis6MTA2QjMwMDAwMDA5M0I4MDAwMDlCRjAwMDAwQTQyODAwMDBBQzYwMDJECis6MTA2QjQwMDAwMDBCNDk4MDAwMEJDRDAwMDAwQzUwODAwMDBDRDQwMERECis6MTA2QjUwMDAwMDBENTc4MDAwMDA1QjAwMDAwMDdGRjgwMDAwN0ZGODA4Cis6MTA2QjYwMDAwMDAwMDIyQTAwMDAzNTAwMDAwMEZGMDAwMDAwMDAwMEM1Cis6MTA2QjcwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDE3Cis6MTA2QjgwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDA3Cis6MTA2QjkwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEY3Cis6MTA2QkEwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEU3Cis6MTA2QkIwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEQ3Cis6MTA2QkMwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEM3Cis6MTA2QkQwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEI3Cis6MTA2QkUwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEE3Cis6MTA2QkYwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDk3Cis6MTA2QzAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDg2Cis6MTA2QzEwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDc2Cis6MTA2QzIwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDY2Cis6MTA2QzMwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDU2Cis6MTA2QzQwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDQ2Cis6MTA2QzUwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDM2Cis6MTA2QzYwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDI2Cis6MTA2QzcwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDE2Cis6MTA2QzgwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDA2Cis6MTA2QzkwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEY2Cis6MTA2Q0EwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEU2Cis6MTA2Q0IwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEQ2Cis6MTA2Q0MwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEM2Cis6MTA2Q0QwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEI2Cis6MTA2Q0UwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEE2Cis6MTA2Q0YwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDk2Cis6MTA2RDAwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDg1Cis6MTA2RDEwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDc1Cis6MTA2RDIwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDY1Cis6MTA2RDMwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDU1Cis6MTA2RDQwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDQ1Cis6MTA2RDUwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDM1Cis6MTA2RDYwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDI1Cis6MTA2RDcwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDE1Cis6MTA2RDgwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMDA1Cis6MTA2RDkwMDAwMDAwRkYwMDAwMDAwMDAwMDAwMEZGMDAwMDAwMDAwMEY1Cis6MTA2REEwMDAwMDAwRkYwMDAwMDAxOTAwMDAwMDAwMDAwMDAwMDAwMENCCis6MTA2REIwMDBGRkZGRkZGRjAwMDAwMDAwMDM5Mzg3MDAwMDAwMDAwMEJBCis6MTA2REMwMDAwMzkzODcwMDAwMDA3RkY4MDAwMDdGRjgwMDAwMEJBMzBBCis6MTA2REQwMDAwMDAwMTUwMDAwMDAwMEZGMDAwMDAwRkYwMDAwMDBGRkExCis6MTA2REUwMDAwMDAwMDBGRjAwMDAwMEZGMDAwMDAwRkYwMDAwMDBGRkE3Cis6MTA2REYwMDAwMDAwMDBGRjAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDk2Cis6MTA2RTAwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDg0Cis6MTA2RTEwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDc0Cis6MTA2RTIwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDY0Cis6MTA2RTMwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDU0Cis6MTA2RTQwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDQ0Cis6MTA2RTUwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDM0Cis6MTA2RTYwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDI0Cis6MTA2RTcwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDE0Cis6MTA2RTgwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDA0Cis6MTA2RTkwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMEY0Cis6MTA2RUEwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMEU0Cis6MTA2RUIwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMEQ0Cis6MTA2RUMwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMEM0Cis6MTA2RUQwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMEI0Cis6MTA2RUUwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMEE0Cis6MTA2RUYwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDk0Cis6MTA2RjAwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDgzCis6MTA2RjEwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDczCis6MTA2RjIwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDYzCis6MTA2RjMwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDUzCis6MTA2RjQwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDQzCis6MTA2RjUwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDMzCis6MTA2RjYwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDIzCis6MTA2RjcwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDEzCis6MTA2RjgwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAzCis6MTA2RjkwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMEYzCis6MTA2RkEwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMEUzCis6MTA2RkIwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMEQzCis6MTA2RkMwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMEMzCis6MTA2RkQwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMEIzCis6MTA2RkUwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMEEzCis6MTA2RkYwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDkzCis6MTA3MDAwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDgyCis6MTA3MDEwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDcyCis6MTA3MDIwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDYyCis6MTA3MDMwMDAwMDAwMDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjVDCis6MTA3MDQwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjUwCis6MTA3MDUwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjQwCis6MTA3MDYwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjMwCis6MTA3MDcwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjIwCis6MTA3MDgwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjEwCis6MTA3MDkwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwCis6MTA3MEEwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwCis6MTA3MEIwMDBGRkZGRkZGRjAwMDAwMDAwMDAwMDI4QUQwMDAwMjkxOEJFCis6MTA3MEMwMDAwMDAwMjkxOTAwMDAwMDA1MDAwMDAwMDcwMDAwRkYwMDczCis6MTA3MEQwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjlBCis6MTA3MEUwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDk3Cis6MTA3MEYwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDg3Cis6MTA3MTAwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjY5Cis6MTA3MTEwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDY2Cis6MTA3MTIwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDU2Cis6MTA3MTMwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjM5Cis6MTA3MTQwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDM2Cis6MTA3MTUwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDI2Cis6MTA3MTYwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjA5Cis6MTA3MTcwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDA2Cis6MTA3MTgwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMEY2Cis6MTA3MTkwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkQ5Cis6MTA3MUEwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEQ2Cis6MTA3MUIwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMEM2Cis6MTA3MUMwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkE5Cis6MTA3MUQwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEE2Cis6MTA3MUUwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDk2Cis6MTA3MUYwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjc5Cis6MTA3MjAwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDc1Cis6MTA3MjEwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDY1Cis6MTA3MjIwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjQ4Cis6MTA3MjMwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDQ1Cis6MTA3MjQwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDM1Cis6MTA3MjUwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjE4Cis6MTA3MjYwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDE1Cis6MTA3MjcwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDA1Cis6MTA3MjgwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkU4Cis6MTA3MjkwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEU1Cis6MTA3MkEwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMEQ1Cis6MTA3MkIwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkI4Cis6MTA3MkMwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEI1Cis6MTA3MkQwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMEE1Cis6MTA3MkUwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjg4Cis6MTA3MkYwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDg1Cis6MTA3MzAwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDc0Cis6MTA3MzEwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjU3Cis6MTA3MzIwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDU0Cis6MTA3MzMwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDQ0Cis6MTA3MzQwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjI3Cis6MTA3MzUwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDI0Cis6MTA3MzYwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDE0Cis6MTA3MzcwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkY3Cis6MTA3MzgwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEY0Cis6MTA3MzkwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMEU0Cis6MTA3M0EwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkM3Cis6MTA3M0IwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEM0Cis6MTA3M0MwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMEI0Cis6MTA3M0QwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjk3Cis6MTA3M0UwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDk0Cis6MTA3M0YwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDg0Cis6MTA3NDAwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjY2Cis6MTA3NDEwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDYzCis6MTA3NDIwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDUzCis6MTA3NDMwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjM2Cis6MTA3NDQwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDMzCis6MTA3NDUwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDIzCis6MTA3NDYwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjA2Cis6MTA3NDcwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDAzCis6MTA3NDgwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMEYzCis6MTA3NDkwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkQ2Cis6MTA3NEEwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEQzCis6MTA3NEIwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMEMzCis6MTA3NEMwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkE2Cis6MTA3NEQwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEEzCis6MTA3NEUwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDkzCis6MTA3NEYwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjc2Cis6MTA3NTAwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDcyCis6MTA3NTEwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDYyCis6MTA3NTIwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjQ1Cis6MTA3NTMwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDQyCis6MTA3NTQwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDMyCis6MTA3NTUwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjE1Cis6MTA3NTYwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDEyCis6MTA3NTcwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDAyCis6MTA3NTgwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkU1Cis6MTA3NTkwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEUyCis6MTA3NUEwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMEQyCis6MTA3NUIwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkI1Cis6MTA3NUMwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEIyCis6MTA3NUQwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMEEyCis6MTA3NUUwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjg1Cis6MTA3NUYwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDgyCis6MTA3NjAwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDcxCis6MTA3NjEwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjU0Cis6MTA3NjIwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDUxCis6MTA3NjMwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDQxCis6MTA3NjQwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjI0Cis6MTA3NjUwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDIxCis6MTA3NjYwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDExCis6MTA3NjcwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkY0Cis6MTA3NjgwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEYxCis6MTA3NjkwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMEUxCis6MTA3NkEwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkM0Cis6MTA3NkIwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEMxCis6MTA3NkMwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMEIxCis6MTA3NkQwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjk0Cis6MTA3NkUwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDkxCis6MTA3NkYwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDgxCis6MTA3NzAwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjYzCis6MTA3NzEwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDYwCis6MTA3NzIwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDUwCis6MTA3NzMwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjMzCis6MTA3NzQwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDMwCis6MTA3NzUwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDIwCis6MTA3NzYwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjAzCis6MTA3NzcwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDAwCis6MTA3NzgwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMEYwCis6MTA3NzkwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkQzCis6MTA3N0EwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEQwCis6MTA3N0IwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMEMwCis6MTA3N0MwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkEzCis6MTA3N0QwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEEwCis6MTA3N0UwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDkwCis6MTA3N0YwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjczCis6MTA3ODAwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDZGCis6MTA3ODEwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDVGCis6MTA3ODIwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjQyCis6MTA3ODMwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDNGCis6MTA3ODQwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDJGCis6MTA3ODUwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjEyCis6MTA3ODYwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDBGCis6MTA3ODcwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMEZGCis6MTA3ODgwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkUyCis6MTA3ODkwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMERGCis6MTA3OEEwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMENGCis6MTA3OEIwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkIyCis6MTA3OEMwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEFGCis6MTA3OEQwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDlGCis6MTA3OEUwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjgyCis6MTA3OEYwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDdGCis6MTA3OTAwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDZFCis6MTA3OTEwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjUxCis6MTA3OTIwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDRFCis6MTA3OTMwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDNFCis6MTA3OTQwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjIxCis6MTA3OTUwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDFFCis6MTA3OTYwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDBFCis6MTA3OTcwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkYxCis6MTA3OTgwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEVFCis6MTA3OTkwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMERFCis6MTA3OUEwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkMxCis6MTA3OUIwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEJFCis6MTA3OUMwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMEFFCis6MTA3OUQwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjkxCis6MTA3OUUwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDhFCis6MTA3OUYwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDdFCis6MTA3QTAwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjYwCis6MTA3QTEwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDVECis6MTA3QTIwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDRECis6MTA3QTMwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjMwCis6MTA3QTQwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDJECis6MTA3QTUwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDFECis6MTA3QTYwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjAwCis6MTA3QTcwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEZECis6MTA3QTgwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMEVECis6MTA3QTkwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkQwCis6MTA3QUEwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMENECis6MTA3QUIwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMEJECis6MTA3QUMwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkEwCis6MTA3QUQwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDlECis6MTA3QUUwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDhECis6MTA3QUYwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjcwCis6MTA3QjAwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDZDCis6MTA3QjEwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDVDCis6MTA3QjIwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjNGCis6MTA3QjMwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDNDCis6MTA3QjQwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDJDCis6MTA3QjUwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjBGCis6MTA3QjYwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDBDCis6MTA3QjcwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMEZDCis6MTA3QjgwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkRGCis6MTA3QjkwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMERDCis6MTA3QkEwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMENDCis6MTA3QkIwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkFGCis6MTA3QkMwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEFDCis6MTA3QkQwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDlDCis6MTA3QkUwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjdGCis6MTA3QkYwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDdDCis6MTA3QzAwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDZCCis6MTA3QzEwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjRFCis6MTA3QzIwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDRCCis6MTA3QzMwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDNCCis6MTA3QzQwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjFFCis6MTA3QzUwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDFCCis6MTA3QzYwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDBCCis6MTA3QzcwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkVFCis6MTA3QzgwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEVCCis6MTA3QzkwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMERCCis6MTA3Q0EwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkJFCis6MTA3Q0IwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEJCCis6MTA3Q0MwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMEFCCis6MTA3Q0QwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjhFCis6MTA3Q0UwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDhCCis6MTA3Q0YwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDdCCis6MTA3RDAwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjVECis6MTA3RDEwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDVBCis6MTA3RDIwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDRBCis6MTA3RDMwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRjJECis6MTA3RDQwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMDJBCis6MTA3RDUwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwRkYwMDFBCis6MTA3RDYwMDAwRkZGRkZGRjAwMDBGRjAwMEZGRkZGRkYwMDAwMDBGRkZECis6MTA3RDcwMDAwMDAwRkYwMDAwMDBGRjAwMEZGRkZGRkYwMDAwRkYwMEZBCis6MTA3RDgwMDAwRkZGRkZGRjAwMDAwMEZGMDAwMEZGMDAwMDAwMTAwMEQ5Cis6MTA3RDkwMDAwMDAwMjA4MDAwMDAzMTAwMDAwMDQxODAwMDAwNTIwMEZGCis6MTA3REEwMDAwMDAwNjI4MDAwMDA3MzAwMDAwMDgzODAwMDAwOTQwMEU3Cis6MTA3REIwMDAwMDAwQTQ4MDAwMDBCNTAwMDAwMEM1ODAwMDAwRDYwMENGCis6MTA3REMwMDAwMDAwRTY4MDAwMDBGNzAwMDAwMTA3ODAwMDAxMTgwMEI1Cis6MTA3REQwMDAwMDAxMjg4MDAwMDEzOTAwMDAwMTQ5ODAwMDAxNUEwMDlCCis6MTA3REUwMDAwMDAxNkE4MDAwMDE3QjAwMDAwMThCODAwMDAxOUMwMDgzCis6MTA3REYwMDAwMDAxQUM4MDAwMDFCRDAwMDAwMUNEODAwMDAxREUwMDZCCis6MTA3RTAwMDAwMDAxRUU4MDAwMDFGRjAwMDAwMDBGODAwMDAwN0ZGOEZECis6MTA3RTEwMDAwMDAwN0ZGODAwMDAwNUY2MDAwMDM1MDAxMDAwMDAwMEFCCis6MTA3RTIwMDAwMDAwMjhBRDAwMDAyOTE4MDAwMDI5MTkwMDAwMDAwNUY1Cis6MTA3RTMwMDAwMDAwMDAwNjAwMDEwMDAxMDAwOTAyMDZDQ0NDQ0NDOUZDCis6MTA3RTQwMDA3MDU4MTAzQzAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDIwCis6MTA3RTUwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDI0Cis6MTA3RTYwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDE0Cis6MTA3RTcwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDA0Cis6MTA3RTgwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMEY0Cis6MTA3RTkwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMEU0Cis6MTA3RUEwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMEQ0Cis6MTA3RUIwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMEM0Cis6MTA3RUMwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMEI0Cis6MTA3RUQwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMEE0Cis6MTA3RUUwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDk0Cis6MTA3RUYwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDg0Cis6MTA3RjAwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDczCis6MTA3RjEwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDYzCis6MTA3RjIwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDUzCis6MTA3RjMwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDQzCis6MTA3RjQwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDMzCis6MTA3RjUwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDIzCis6MTA3RjYwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDEzCis6MTA3RjcwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAzCis6MTA3RjgwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMEYzCis6MTA3RjkwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMEUzCis6MTA3RkEwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMEQzCis6MTA3RkIwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMEMzCis6MTA3RkMwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMEIzCis6MTA3RkQwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMEEzCis6MTA3RkUwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDkzCis6MTA3RkYwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDgzCis6MTA4MDAwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDcyCis6MTA4MDEwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDYyCis6MTA4MDIwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDUyCis6MTA4MDMwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDQyCis6MTA4MDQwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDMyCis6MTA4MDUwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDIyCis6MTA4MDYwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDEyCis6MTA4MDcwMDAwMDAwMDAwMDAwMDBGRjAwMDAwMDAwMDAwMDAwRkYwMDAyCis6MTA4MDgwMDAwMDAwMDAwMDAwMDAwMDAxQ0NDQzAyMDFDQ0NDQ0NDQzI0Cis6MTA4MDkwMDBDQ0NDMDIwMUNDQ0NDQ0NDQ0NDQzAyMDFDQ0NDQ0NDQzRBCis6MTA4MEEwMDBDQ0NDMDIwMUNDQ0NDQ0NDQ0NDQzAyMDFDQ0NDQ0NDQzNBCis6MTA4MEIwMDBDQ0NDMDIwMUNDQ0NDQ0NDQ0NDQzAyMDFDQ0NDQ0NDQzJBCis6MTA4MEMwMDBDQ0NDMDIwMUNDQ0NDQ0NDMDAwMDAwMDBGRkZGRkZGRkU5Cis6MTA4MEQwMDAwMzAzMDMwMzEzNDIwMjAyNTA1MDUwMjA3MDYwODA1MDhCCis6MTA4MEUwMDAwMjAwMDIwMDA2MDQwNjA0MDAwRTAwMDAwMTE2MDBENjdECis6MTA4MEYwMDAwMDI2MjVBMDAwMjYyNUEwMDAyNjI1QTAwMDI2MjVBMEQ0Cis6MTA4MTAwMDAwMDcyMDAwMDAxMjMwMEYzMDAyNjI1QTAwMDI2MjVBMDEwCis6MTA4MTEwMDAwMDI2MjVBMDAwMjYyNUEwMDAwMEZGRkYwMDAwMDAwMDhCCis6MTA4MTIwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDUzCis6MTA4MTMwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDQzCis6MTA4MTQwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDMzCis6MTA4MTUwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDIzCis6MTA4MTYwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDEzCis6MTA4MTcwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAzCis6MTA4MTgwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEYzCis6MTA4MTkwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEUzCis6MTA4MUEwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEQzCis6MTA4MUIwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEMzCis6MTA4MUMwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEIzCis6MTA4MUQwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEEzCis6MTA4MUUwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDkzCis6MTA4MUYwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDgzCis6MTA4MjAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDcyCis6MTA4MjEwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDYyCis6MTA4MjIwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDUyCis6MTA4MjMwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDQyCis6MTA4MjQwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDMyCis6MTA4MjUwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDIyCis6MTA4MjYwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDEyCis6MTA4MjcwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAyCis6MTA4MjgwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEYyCis6MTA4MjkwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEUyCis6MTA4MkEwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEQyCis6MTA4MkIwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEMyCis6MTA4MkMwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEIyCis6MTA4MkQwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEEyCis6MTA4MkUwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDkyCis6MTA4MkYwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDgyCis6MTA4MzAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDcxCis6MTA4MzEwMDAwMDAwRkZGRjAwMDAwMDAwRkZGRkZGRjMzMThGRkZGRkIxCis6MTA4MzIwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzkxCis6MTA4MzMwMDAwMDAwQ0YzQ0NEQ0RDRENERkZGRkZGRjEzMEVGRkZGRkYzCis6MTA4MzQwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzcxCis6MTA4MzUwMDAwMDAxQ0YzQ0NEQ0RDRENERkZGRkZGRjYzMDVGRkZGRjVECis6MTA4MzYwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzUxCis6MTA4MzcwMDAwMDAyQ0YzQ0NEQ0RDRENERkZGRkY0MDYxQ0JGRkZGRkVCCis6MTA4MzgwMDAwQzMwQzMwNUMzMEMzMEMzQ0YzMDAwMTRGM0NGM0NGMzIzCis6MTA4MzkwMDAwMDA0Q0YzQ0NEQ0RDRENERkZGRkZGRjIzMDRGRkZGRjJFCis6MTA4M0EwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzExCis6MTA4M0IwMDAwMDA4Q0YzQ0NEQ0RDRENERkZGRkZGRkEzMDJGRkZGRjIyCis6MTA4M0MwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGM0YxCis6MTA4M0QwMDAwMDEwQ0YzQ0NEQ0RDRENERkZGRkZGRjczMUVGRkZGRjNDCis6MTA4M0UwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGM0QxCis6MTA4M0YwMDAwMDIwQ0YzQ0NEQ0RDRENERkZGRkZGRjUzMDJGRkZGRkNGCis6MTA4NDAwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGM0IwCis6MTA4NDEwMDAwMDQwQ0YzQ0NEQ0RDRENERkZGRkZGRjMzMThGRkZGRjJGCis6MTA4NDIwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzkwCis6MTA4NDMwMDAwMDAwQ0YzQ0NEQ0RDRENERkZGRkZGRjEzMTBGRkZGRkQxCis6MTA4NDQwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzcwCis6MTA4NDUwMDAwMDAxQ0YzQ0NEQ0RDRENERkZGRkZGRjYzMDVGRkZGRjVDCis6MTA4NDYwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzUwCis6MTA4NDcwMDAwMDAyQ0YzQ0NEQ0RDRENERkZGRkY0MDYxQ0JGRkZGRkVBCis6MTA4NDgwMDAwQzMwQzMwNUMzMEMzMEMzQ0YzMDAwMTRGM0NGM0NGMzIyCis6MTA4NDkwMDAwMDA0Q0YzQ0NEQ0RDRENERkZGRkZGRjIzMDRGRkZGRjJECis6MTA4NEEwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzEwCis6MTA4NEIwMDAwMDA4Q0YzQ0NEQ0RDRENERkZGRkZGRkEzMDJGRkZGRjIxCis6MTA4NEMwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGM0YwCis6MTA4NEQwMDAwMDEwQ0YzQ0NEQ0RDRENERkZGRkZGRjczMEVGRkZGRjNDCis6MTA4NEUwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGM0QwCis6MTA4NEYwMDAwMDIwQ0YzQ0NEQ0RDRENERkZGRkZGRjUzMDRGRkZGRkFFCis6MTA4NTAwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGM0FGCis6MTA4NTEwMDAwMDQwQ0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRkUzCis6MTA4NTIwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGM0MzCis6MTA4NTMwMDAwMDAwQ0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRjAzCis6MTA4NTQwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGM0EzCis6MTA4NTUwMDAwMDAxQ0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRkUyCis6MTA4NTYwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzgzCis6MTA4NTcwMDAwMDAyQ0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRkMxCis6MTA4NTgwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzYzCis6MTA4NTkwMDAwMDA0Q0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRjlGCis6MTA4NUEwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzQzCis6MTA4NUIwMDAwMDA4Q0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRjdCCis6MTA4NUMwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzIzCis6MTA4NUQwMDAwMDEwQ0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRjUzCis6MTA4NUUwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAzCis6MTA4NUYwMDAwMDIwQ0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRjIzCis6MTA4NjAwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGM0UyCis6MTA4NjEwMDAwMDQwQ0YzQ0NEQ0RDRENERkZGRkZGRjMzMjBGRkZGRkFDCis6MTA4NjIwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzhFCis6MTA4NjMwMDAwMDAwQ0YzQ0NEQ0RDRENERkZGRkZGRjEzMTBGRkZGRkNGCis6MTA4NjQwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzZFCis6MTA4NjUwMDAwMDAxQ0YzQ0NEQ0RDRENERkZGRkZGRjYzMDVGRkZGRjVBCis6MTA4NjYwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzRFCis6MTA4NjcwMDAwMDAyQ0YzQ0NEQ0RDRENERkZGRkY0MDYxQ0JGRkZGRkU4Cis6MTA4NjgwMDAwQzMwQzMwNUMzMEMzMEMzQ0YzMDAwMTRGM0NGM0NGMzIwCis6MTA4NjkwMDAwMDA0Q0YzQ0NEQ0RDRENERkZGRkZGRjIzMDRGRkZGRjJCCis6MTA4NkEwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzBFCis6MTA4NkIwMDAwMDA4Q0YzQ0NEQ0RDRENERkZGRkZGOEEwNDJGRkZGRkJCCis6MTA4NkMwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0MwMDBGM0NGM0NGMzIxCis6MTA4NkQwMDAwMDEwQ0YzQ0NEQ0RDRENERkZGRkZGOTcwNUNGRkZGRkU1Cis6MTA4NkUwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0MwMDBGM0NGM0NGMzAxCis6MTA4NkYwMDAwMDIwQ0YzQ0NEQ0RDRENERkZGRkZGRjUzMTBGRkZGRkVCCis6MTA4NzAwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGM0FECis6MTA4NzEwMDAwMDQwQ0YzQ0NEQ0RDRENERkZGRkZGRjMzMjBGRkZGRkFCCis6MTA4NzIwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzhECis6MTA4NzMwMDAwMDAwQ0YzQ0NEQ0RDRENERkZGRkZGRjEzMDJGRkZGRkFGCis6MTA4NzQwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzZECis6MTA4NzUwMDAwMDAxQ0YzQ0NEQ0RDRENERkZGRkZGRjYzMDVGRkZGRjU5Cis6MTA4NzYwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzRECis6MTA4NzcwMDAwMDAyQ0YzQ0NEQ0RDRENERkZGRkZGMDYxQ0JGRkZGRkRDCis6MTA4NzgwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0MwMTRGM0NGM0NGMzRDCis6MTA4NzkwMDAwMDA0Q0YzQ0NEQ0RDRENERkZGRkZGRjIzMDRGRkZGRjJBCis6MTA4N0EwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGMzBECis6MTA4N0IwMDAwMDA4Q0YzQ0NEQ0RDRENERkZGRkZGRkEzMDJGRkZGRjFFCis6MTA4N0MwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGM0VECis6MTA4N0QwMDAwMDEwQ0YzQ0NEQ0RDRENERkZGRkZGRjczMUNGRkZGRjU4Cis6MTA4N0UwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzMDBGM0NGM0NGM0NECis6MTA4N0YwMDAwMDIwQ0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRjIxCis6MTA4ODAwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGM0UwCis6MTA4ODEwMDAwMDQwQ0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRkUwCis6MTA4ODIwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGM0MwCis6MTA4ODMwMDAwMDAwQ0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRjAwCis6MTA4ODQwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGM0EwCis6MTA4ODUwMDAwMDAxQ0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRkRGCis6MTA4ODYwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzgwCis6MTA4ODcwMDAwMDAyQ0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRkJFCis6MTA4ODgwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzYwCis6MTA4ODkwMDAwMDA0Q0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRjlDCis6MTA4OEEwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzQwCis6MTA4OEIwMDAwMDA4Q0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRjc4Cis6MTA4OEMwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzIwCis6MTA4OEQwMDAwMDEwQ0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRjUwCis6MTA4OEUwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzAwCis6MTA4OEYwMDAwMDIwQ0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRjIwCis6MTA4OTAwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGM0RGCis6MTA4OTEwMDAwMDQwQ0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRkRGCis6MTA4OTIwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGM0JGCis6MTA4OTMwMDAwMDAwQ0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRkZGCis6MTA4OTQwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzlGCis6MTA4OTUwMDAwMDAxQ0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRkRFCis6MTA4OTYwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzdGCis6MTA4OTcwMDAwMDAyQ0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRkJECis6MTA4OTgwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzVGCis6MTA4OTkwMDAwMDA0Q0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRjlCCis6MTA4OUEwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzNGCis6MTA4OUIwMDAwMDA4Q0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRjc3Cis6MTA4OUMwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzFGCis6MTA4OUQwMDAwMDEwQ0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRjRGCis6MTA4OUUwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGM0ZGCis6MTA4OUYwMDAwMDIwQ0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRjFGCis6MTA4QTAwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGM0RFCis6MTA4QTEwMDAwMDQwQ0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRkRFCis6MTA4QTIwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGM0JFCis6MTA4QTMwMDAwMDAwQ0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRkZFCis6MTA4QTQwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzlFCis6MTA4QTUwMDAwMDAxQ0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRkRECis6MTA4QTYwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzdFCis6MTA4QTcwMDAwMDAyQ0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRkJDCis6MTA4QTgwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzVFCis6MTA4QTkwMDAwMDA0Q0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRjlBCis6MTA4QUEwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzNFCis6MTA4QUIwMDAwMDA4Q0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRjc2Cis6MTA4QUMwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGMzFFCis6MTA4QUQwMDAwMDEwQ0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRjRFCis6MTA4QUUwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGM0ZFCis6MTA4QUYwMDAwMDIwQ0YzQ0NEQ0RDRENERkZGRkZGRkYzMENGRkZGRjFFCis6MTA4QjAwMDAwQzMwQzMwQ0MzMEMzMEMzQ0YzQ0YzQ0NGM0NGM0NGM0RECis6MTA4QjEwMDAwMDQwQ0YzQ0NEQ0RDRENEMDAwQzAwMDAwMDA3MDBDMDAzCis6MTA4QjIwMDAwMDAyODEzMDAwMEI4MTU4MDAwMjAyMTAwMDAxMDIzMDY3Cis6MTA4QjMwMDAwMDBGMDI0MDAwMDEwMzMwMDAwQzAwMDAwMDA4MDBDMERDCis6MTA4QjQwMDAwMDAyODE0MDAwMEI4MTY4MDAwMjAyMjAwMDAxMDI0MDA3Cis6MTA4QjUwMDAwMDA3MDI1MDAwMDIwMkMwMDAxMDAwMDAwMDA4MDEwMERGCis6MTA4QjYwMDAwMDAyODE4MDAwMEI4MUE4MDAwMjAyNjAwMDAxODI4MDY3Cis6MTA4QjcwMDAwMDBFODI5ODAwMDgwMzgwMDAxMDAwMDAwMDAxMDEwMDMwCis6MTA4QjgwMDAwMDAyODExMDAwMDkwMTM4MDAwMjAxQzgwMDAxMDFFODVCCis6MTA4QjkwMDAwMDBFMDFGODAwMDAwMkQ4Q0NDQ0NDQ0NDQ0NDQ0NDQzk0Cis6MTA4QkEwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDMDAwMDIwMDBDQ0NDQ0NDQzE1Cis6MTA4QkIwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0MwMDAwMjAwMDA1Cis6MTA4QkMwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0U1Cis6MTA4QkQwMDAwNDAwMjAwMENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0UxCis6MTA4QkUwMDBDQ0NDQ0NDQzQxMDAyMDAwMDMwMzAzMDMwMzQyMDIwMjlGCis6MTA4QkYwMDA1MDUwNTAyMDcwNjA4MDUwMTMxMzEzMTMxMzQyMTIxMjAwCis6MTA4QzAwMDA1MDUwNTAyMDcwNjA4MDUwMDMwMTAyMDAwMDAwMDAwMEFFCis6MTA4QzEwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMEEyCis6MTA4QzIwMDAwMDBCRkI1MUNGQzBGMDAzOEEwRjA5MzIzMDY4OEEyMDU1Cis6MTA4QzMwMDBGOEM0RTA1Qzc2MDY4Njc1MUMwQzBDNUJCODQ5RDMwNzVCCis6MTA4QzQwMDBDMzJDMEMwQzBDREE0Q0U0RTkwNUUxRkJCQzBDMENBRkJBCis6MTA4QzUwMDA4MDk4ODUwRjU1OUM4NzEzNDJGRjAxNUFDMEM3Q0FDMDMwCis6MTA4QzYwMDBBMEMxODY1REZGM0EzNTA0M0I0MDg1ODFBMTFDODhEOUFGCis6MTA4QzcwMDA5NDE4MThDQzU0MTFFMkQyRUEwQzBDMzM4MEZDMDRBOEVFCis6MTA4QzgwMDBEODFEMjAxREFCNDZCRTlCNDdGMUUwQzEzNzhENTFGOTgxCis6MTA4QzkwMDA1QjBEQTE2OTAxMkE3RTBCNEQ3RTFCNTRCRTRBMDc0MjIzCis6MTA4Q0EwMDBERjM2QzY2RTZFQjUwRTcxRjY5RkI1NDZFNUFGQjRDNjNCCis6MTA4Q0IwMDBBRkZFQUUzRDJBRkYyMDlBRkFBRDUwM0UwMEM1RDU1QjBGCis6MTA4Q0MwMDBBN0Q4MDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCis6MTA4Q0QwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkVEN0Q3RjdDMTRENTg5Cis6MTA4Q0UwMDBCNUY4OTk5REQ5RDlEOUNERUU2NjA4MDk2QzIwRTAyNDU0Cis6MTA4Q0YwMDA4NjFBRkI4MkRGRTU3N0E4NDE4NzgwMzRCNjNDREY4QTlECis6MTA4RDAwMDA1QUQzRDZGNkJCNTA2QzU1MTQ1NkJGM0VFMUY1NjkzM0M1Cis6MTA4RDEwMDBGOTQxMTIyMjYyMDQ5RkRBRDYxRjJCNTU0QkZCNkM4OTU2Cis6MTA4RDIwMDA5NDJBQUQzRkRFMDI0QUYxRjVDNzQzQUFENUQ3QTIyRjU4Cis6MTA4RDMwMDBGRTgwQUE0NTVGQzREMkQ4N0U1MURFM0RFN0RFQzlDRUIzCis6MTA4RDQwMDA0Qzc2OTMwREQwMUY3RkJDRjA4MUUxQ0VEQzFGRTc5RUY3Cis6MTA4RDUwMDA3M0VFMzlFNzlFNzNFRThERUEwQkMyQzdDRTA1Mzg4RUVGCis6MTA4RDYwMDAzRkVDRDkxMzAyODA1OUQ5QTc3MUY1QkNBRUJFOTkwMDZBCis6MTA4RDcwMDA0NzIxRDJEMzVEMEFEMEE2ODAwOUFDNkMxRDg4QTQxRjAwCis6MTA4RDgwMDA5NDAwN0Y2QTE0NTY1RTJEN0YzQ0RFNUQwOTcwNjdEMUNBCis6MTA4RDkwMDBEN0VFQzNGQTZCMkMwNTAyRUNEOUREMEM5MDM5ODM3RDNDCis6MTA4REEwMDAwRjQ1Mzc0MzMxNDAxMUE0QjZFMjc3RjY5Mzc4OTBGNTNBCis6MTA4REIwMDAzNzEwOUM5Qzg2Njg3NkZDMzJGMEQxQjgwMDE1RkFBMTc5Cis6MTA4REMwMDAyMkFBMDdDNzY1RjZDRjgxRTQ3QzE4MDcyMDgzRkRCMzhDCis6MTA4REQwMDAwNjdBNTkzRkNBRjM3MjFBQzc5NUU1QzVGQThCNTVEOTc5Cis6MTA4REUwMDA3RUJDNEY1OTU3MjFBMzg5RkVGMDFGRjlCMkUyNjQzOEM3Cis6MTA4REYwMDA3RkZEMzUwNzJBQjczRTVEOTNBRDdGMDY0NDRBMEZGREUwCis6MTA4RTAwMDAxREZCOEYwMjBBQzEyM0FGMDdDNEMzRDEzMEE0RTVDQTNBCis6MTA4RTEwMDBGQ0ZEMEMzNDFCNUI5RkY2MjMxRUJGNTA5Qzk4OUFCRjMxCis6MTA4RTIwMDA5RThEQTdBRTY2OEQ5RTFEQ0QzQTY0MDIwMDBDNjRCMzg0Cis6MTA4RTMwMDBCNzk2M0RDMzYwNkVBRTFEREE2RTAxNDg4NDJGQ0RCMDhCCis6MTA4RTQwMDAwODlFRjZCMDJGNUQ1NDg5NTAyNzAxMTg3RUZEODgxRkJCCis6MTA4RTUwMDAwOURGMkZEMUNDMUNFREVEMjc5NDMyRkNEOEYzNjU3OEQ3Cis6MTA4RTYwMDAwQzAyRUYwRkQ4RkMxRTY0RkQwNTcxRkMxQ0Y4QkEwODVCCis6MTA4RTcwMDBDNzJGNjNERkFCODc4RTZGQ0QzQ0YxRjE0MzY3MDJFQzA4Cis6MTA4RTgwMDAwQjIzQkU0RDg0MDE3QzdBMEFFMjgyREU5Rjk0ODZFOTQwCis6MTA4RTkwMDA0N0QwNTkzMTc4M0YyM0UxQkRBOEM2OTcxRDk3RkQwREY2Cis6MTA4RUEwMDAxQTIxMTc5RjA0NjIyNTZFQkVGMUYyMjVFMkE5MENFOTkyCis6MTA4RUIwMDA2NTQ4QUY0RkM5RjZBQjIyREQ3MkUwRUI0QTgxQUZGRUU5Cis6MTA4RUMwMDBGOTg5QTYwNEMzQzdEQTY2QjA1RTczQjQ5MzYzNjBBNjdCCis6MTA4RUQwMDA3M0UwNjlCNTY4Njc4RkE3OTRCMjdBMzlGQTA3NjgxMUE5Cis6MTA4RUUwMDBFQkM3NzJENTJGMTRCRTlCNEUxMEJFOUJGRjQyRjBERDI4Cis6MTA4RUYwMDAyNkY4OUQ0OTI4N0FGNkNGNEYxMjlDREVGRTcyQUQyRkUwCis6MTA4RjAwMDBCNjg4MDdDQjIxMjU2REY5OTBCRjRCMjFGRTIwN0JGODU5Cis6MTA4RjEwMDAzNUJFQ0VFQ0VGREYwNzNGRjVCMzAzMjUwRTFCQTc0REEzCis6MTA4RjIwMDBDMEQ3M0Y5RkNCQkZCNUQzRDRGNDY2ODlFNDkxMEJDRUI1Cis6MTA4RjMwMDA4NzUxN0VCMTc2OTIyNEYwQTFGNTAyRjI1RkQxMDcwQTQzCis6MTA4RjQwMDBDMDU4ODRDRjg0NDQwNDYwNUQ3NTgzMzY5Q0ZDMDE1RDA5Cis6MTA4RjUwMDBGOTUzOUZDRDc3NTU0M0Y5RUVFMzZDMTg4NDJCMTRDRTZCCis6MTA4RjYwMDA4REE3RUYwRkNBRDFDQkFDRDc1ODNGNUE5MEJEM0YxRDRDCis6MTA4RjcwMDBGQjJEOEQ1NUNDMDY5QzFERkRGOEM1Nzc5MDdDRjI3MUJDCis6MTA4RjgwMDA1Q0I3Qzc1OEJERDk0MkNFQ0FENDNGQzkxMUE4MDA5MjE4Cis6MTA4RjkwMDBGN0IyQTg0RkUzQjBGQTAxMzYyRDczM0E3QkUyRkIxQTIxCis6MTA4RkEwMDAzMThFMzRCNDVGNkZCQjAxMjhFMUY4MTFGMEQ4NzI1REU3Cis6MTA4RkIwMDA4NjI3QTg5RjQxNzg5NDA0RTFDQkZCREVDRkRFRUJFMTZFCis6MTA4RkMwMDA5MzdGN0ZCMjY1QkY5MTY3QkMxRTg5Rjg2OUE0RjZBRjM1Cis6MTA4RkQwMDAwODdFMTlDMjlGNzlFOEJBNUZBQzMzMDU3QTREMzgzREY3Cis6MTA4RkUwMDBDQjQ3MzY3RjlEMjgxRjlEMzQ5RkIwRTE0OTVGRTRFMTY4Cis6MTA4RkYwMDAxMzBCNTJCNDZFNTgzNUFCN0JEQUU4RjkyNTA3OUY2NDQyCis6MTA5MDAwMDA5Q0Y1MTc0QjYzRjgzQzk0MzhGMTBCODM0NzIxQkVENTkwCis6MTA5MDEwMDAzOTNDNjVEMzRCQTkzRjA5RDdGODE5RDg4MzI4MjMxRUJCCis6MTA5MDIwMDBEODdDOTdEOUVEMjE0RUVCMzU4NDc2OEVBMzNEOUIxQ0UxCis6MTA5MDMwMDBDMTJCQzk5MjkwRkJCQ0RFMEQ2MjlEQ0Y2QkE4RTBGMDA2Cis6MTA5MDQwMDA4M0U4REYwMzJGRUI0RjczRjYyNzQzODU4N0NGMzlEQ0E3Cis6MTA5MDUwMDAxQjI0MkVERjU4RkQwQ0UxRDMzQkJFMjIxMUJDMzIyNDcxCis6MTA5MDYwMDAyQzFGNkJCNzU5OENFRjk1NUZGNjczQkJFODZGQkQwNDhGCis6MTA5MDcwMDA0REJENjFCRTlFOTYzOEY0NjE4MzI0RTQ4NEM2RDc5OUMxCis6MTA5MDgwMDA1NzNFRjk5MUFGNjY5QzM4NUYxNTJBRDcxNzRCQjlGNTUzCis6MTA5MDkwMDAwRUIzOEE2MjE3NDZGMkVCOUQ2MjlGQUQwRjMyMzE0MUVCCis6MTA5MEEwMDBCNzUxRDFGRDc0QTlDNDQ1Rjc0MkUxNUQ3NjgyRjA0RTE3Cis6MTA5MEIwMDAxQzBBNkY0MTdDNzZBNkU0MUI5NTlFQkNFMTA0RTEwQjgzCis6MTA5MEMwMDA3QUUwM0I1NTdDM0Q0M0YwNTlBMUYwREJFQjYwQjRGMDE2Cis6MTA5MEQwMDBDQjQzRjE1QkQwM0E5QTNCNEFGODM2OUYyMDdFQ0I3QzVCCis6MTA5MEUwMDBCNjlEMjRFMENCQjM2RUU3MDk3QTVCQzBGOTQzNjE3NkE1Cis6MTA5MEYwMDAzOEVFNzMwQTg1RUZEMTkxRTEwM0Y4MDRGQjZCQkQ2QThBCis6MTA5MTAwMDA5OTBBRDk2QjAwMTMwMDlFNkU3OUQ1QjI5NDJDN0MyNkY3Cis6MTA5MTEwMDA3MEI5M0VEQUYxRjc4QzRDM0YzMUZFNUI5NjU5OUQxRERDCis6MTA5MTIwMDBGRkY5OTZCNzVDRTMyQjhDN0Y5MEQ5MEExREY3ODU0MjM3Cis6MTA5MTMwMDBFNzBERUZCOUU2RkRCQUY0OUU2QkRDMTNDNUZCQzE4MjA3Cis6MTA5MTQwMDBDN0ZGQTM2QkRFRUY0QjdGNzRDRjNCQ0NFNjdEN0FFMUFDCis6MTA5MTUwMDBFM0ZFRkUwNEY5QjE1MkFDOTcwNjQ5NzdFOTgxN0NGNjRCCis6MTA5MTYwMDBGQjBDNDFEN0JCRURGQTM2QkM3OUVBOUYyOUUwNkEyRkE4Cis6MTA5MTcwMDBCMEZFNDREMUZGRTcwQUFDREYyQkZBRUZDNUZBNjUyMzU2Cis6MTA5MTgwMDBENzNGNURENDRGMTU1ODVGRjJGMTc1OTg0RjdGQ0U5NzVBCis6MTA5MTkwMDA2Q0ZDODE2QkZGRDFBNjcxM0Y4OEQ5QTY0MEYwOUNBMUUxCis6MTA5MUEwMDA3RTEzQUIyMUY1RUQzRTQ2N0JBQjM1QTBCNzk1OTJERjQ0Cis6MTA5MUIwMDA4NEZDMjI2QjAwMTJFODM3RjkyNjI0RUI3Q0FDMUY2Mzk5Cis6MTA5MUMwMDBDNzRERjc2MUJEMjM4QUE2NzdFQkMwMTcyNEZCMUUzQzcxCis6MTA5MUQwMDAxMEQ5REM1RDk5MUQ2RkI1OUM2QzkyOTA5N0RBQTJGQTVDCis6MTA5MUUwMDA4M0U0NUY0OTM1NDlFQzU5NjY4NTc1RjREQjBDNTQyNUY5Cis6MTA5MUYwMDA1QTk2OTZFMjNDMENERDYyRkRGQ0ZBOEE4Qjc2NjI3OTI3Cis6MTA5MjAwMDA5MzI2RTkzMjJCRkZDQjM5NzM2RkZCMEM2QjM1RjBFMTAyCis6MTA5MjEwMDBDRTk3NEVDMzdBRDNDNjU1QjU5MkJDMzQyNUM0NEY2OTk4Cis6MTA5MjIwMDA1QzM1RTUyODdCNUU3QzcxNTYxRkUwM0Y4QjFENjU2NkQzCis6MTA5MjMwMDAwNzdDQjZFOTEyMkVGRkM1RjdDRjI3RERFNTRCMUEyRkM1Cis6MTA5MjQwMDA3MUI1QkYzNEUxRkU5RTlEMEZGMDdEQzdCOURDRkYzMEU0Cis6MTA5MjUwMDA1MDk1RkEyRjBFRDdDNzJBMkRFRTVGQTBGOUVBNTY1NDgzCis6MTA5MjYwMDBFRjY2RjM1Q0ZGRTFCNTU0NUVERjUyQUJCN0IyRjJFN0Y1Cis6MTA5MjcwMDBBRUY0QjcyQzY1Q0ZCMDA0QkFDQzk2NTI3MTVDQTVGOUE4Cis6MTA5MjgwMDAwMjlCQUY1QUM3NzY4RkU3M0NEQjM1REJDOEJGRkYyQUFFCis6MTA5MjkwMDAzNjNERjM4QzVGOUM4NTkzQ0RCM0U5RUFEQzcwQUJGQTg1Cis6MTA5MkEwMDBGQjEzREU2MEY2RDJDMENFQTA4OUYwODRGN0NBRTlBMDM1Cis6MTA5MkIwMDA0NDc0REQzOTA5RTk2MjE1MjczOTdENDBBQTY2Q0YyMzU4Cis6MTA5MkMwMDA4RDNBQTA3RkE0QTEzMTY5QzhBQ0JDMzFBNkM1MDMwNjA0Cis6MTA5MkQwMDBEQUM5MTkwREYxMUU0MTFBQ0M2NUVGRTNCRTIwREE2MzNECis6MTA5MkUwMDBBQUZFMDdFQTVGMTdERjdCRTI1NUUzRDEzRkYyRTNFNjMwCis6MTA5MkYwMDAzNTEzMTVCNkRFNzczNDVCRjQ3Q0I0Qjk4QjlFREI5QkZCCis6MTA5MzAwMDA3QjI2MkFDQzg4REZEMjdDMTczREVERjlBMTI0MzFFQ0Y1Cis6MTA5MzEwMDBGOUM5QjhBRjM2NUI5MURGMDZGQ0NDMzQ0MjNDQ0VGN0RFCis6MTA5MzIwMDBEMUZFNzYwM0NBMTEzRkNBRTE3NDVCMTRERkQ3QzFCNDIyCis6MTA5MzMwMDA2RTQwQjlDNEU1Q0JDNkY4QjZEREY4N0U2MzNENEM0MzVDCis6MTA5MzQwMDA5MjZEMzQzN0I3NDVEOTNDQUUyQjg3RTlEOEY3Q0U5NzI1Cis6MTA5MzUwMDAxRkUzREYyQjYwN0E4MDk1NzczNTM2OTA1Q0VEODlGQkQzCis6MTA5MzYwMDBEMjgxNEE4MkZGN0NFNEU3OUU0NjFGMzA5MzA3OEFFQjU2Cis6MTA5MzcwMDAxODVDMEVCQzA2NjJFRUYyQUU0NjI2QjA2NjEyM0VEMjE1Cis6MTA5MzgwMDAwMTI5M0I3Rjg1MkQzM0M0Qzc0NkIzMkFFOERDNTdDRjdDCis6MTA5MzkwMDBEQUU3NkU3RjY2REE1RERFODhFRDg3RjE0QkNERUQ3MzNGCis6MTA5M0EwMDBENzlGRjM5MkJCQ0MyNERCMkI4MzdDQzBGMUY4QUYzRTdDCis6MTA5M0IwMDAyNjBGNzZCRjNDREU2N0UxQkM0RDNFNEZGNkU0RkVDMkIxCis6MTA5M0MwMDA5ODJGOERDNkU3MTY4MTNGMUJCRjAzMTEyRTVGMzYzNkRGCis6MTA5M0QwMDA3MzNGNjAzRTc4MzY3RUVBQUFEODcwN0UwM0I1QjEyMzJCCis6MTA5M0UwMDA4MUZFNTRCNUIxMjcwMTY3RTEzMzJEOUVCRDA5QTc5RkNBCis6MTA5M0YwMDBENTdFQkU4OEM2OEZDMzVGRDIxMURCNThCMkI0MzYwQkEwCis6MTA5NDAwMDA4RkI3RkU3ODU5MjU3OTM3NTBDNkJGNzdDNDVFRDM5NzlBCis6MTA5NDEwMDBENjNBRkI5M0JDREZCNUNCQzNDRUVGRENBRjMyNTA2RTk4Cis6MTA5NDIwMDA3RjNGQTIyRDBERTc2ODNGODk3RENGNDE5N0E1MzJGRjkxCis6MTA5NDMwMDBGRUY0Q0I4MTg2M0I5MDFGMDU3RTc3QkZGQzEzQUQxQUVGCis6MTA5NDQwMDBGMUZEQkMwQ0M4NjcxQkY3MzU5MEJDNDUzRTQzNzlCMUI0Cis6MTA5NDUwMDA4QkYxNDU1RjJERDI3RkZEMkJDRTc1NUI1Q0U3MkUzMzA0Cis6MTA5NDYwMDBCRUUyRkNDNUZBQzVBMTdFODZGNDYwMURGRUJCRjBDQjUyCis6MTA5NDcwMDBFRTE1N0VEOTNEQ0QzMTdBM0VERDZDRDA3MzU3NzMwRDNDCis6MTA5NDgwMDA3RENGMzRDN0E5RkM1NDczMUQ5NTlGNjgzNkE5RkNFM0IyCis6MTA5NDkwMDBFNjQ2MkFFRjY4NEU1MEY5RDFFNjI2N0E2RTZGNEVEMjM0Cis6MTA5NEEwMDA3MzRCRjMxNUY0NjRGQzRCRkNCQ0ExMzkyNUZDQzA2Qjc5Cis6MTA5NEIwMDA1Q0ZDRjBGN0YxODA4QkZGM0U1REUzMkU5RjZGOUM5MThCCis6MTA5NEMwMDA1REQ3RUNFRjI3NjNFRUYyNzlGQTI3NURFNTA1OUFCQkVECis6MTA5NEQwMDAzQzFGQkVFMkVBRUZEQzBGQkVFQzJBQ0ZFQkVGNzBENTBCCis6MTA5NEUwMDAzRkZCNEQ3Nzc5NkVERjQzOUVGNUUyMkVDRkRBQjdDN0FCCis6MTA5NEYwMDBCMzFFRERFNUUyQkE0M0FFRkUwMjMxNzdGOTdFMTQzMkU3Cis6MTA5NTAwMDA1QzRFMTE3Rjc0QzQ1QTRCNzJGMkNGRTBGNzhEQTEyRkRECis6MTA5NTEwMDBCOUJFQ0JENDdFNjRGRTU5RDY1NTg5RkM5M0Y2QzUyREQxCis6MTA5NTIwMDA5NDNCMjZFNzI3NUJFRTc4RjlDNEE2REI0OEZDNjVDM0NECis6MTA5NTMwMDBGMTk3RTZBQkZGRTVBN0UxRjlBOTYwN0VBODU3NzJGMkMzCis6MTA5NTQwMDA4Mzk3RUU1RUZFMTgyMjY3MDRCRkZDMkYxRkZDNkRGMEIwCis6MTA5NTUwMDAwMUNDNjRDNDJFQ0ZBRjU3NzNEODc3NjQ5RjA2MTI0MEY2Cis6MTA5NTYwMDBGNjlEMUZFRDM0NDc3Qjc1NzIyQTY5RTZEMDlGNTdGOTQ3Cis6MTA5NTcwMDBFNjZGOTU1OTNGODE1MkU4QzA3ODY4NDBDOUUzRTc5NUE2Cis6MTA5NTgwMDBGOTNFMjVBMEYxRUZDMTZBOTNFQ0IyNjIzMEE2Q0I2MzNECis6MTA5NTkwMDAwMEFFNzk2QzVFRjkzMkY2RkVFNzQyMUY3NjVDMDg5NjAzCis6MTA5NUEwMDBDNEZBMUIzNzQxNERFMjNFQTZCOERBQkRERjdCNDZFNjgyCis6MTA5NUIwMDBGQjE4RkJCOUU5ODc5MTI2RkMwRUE1MzM0Nzk4Mzc4RjM2Cis6MTA5NUMwMDBEN0M4MTM2NzM3RkRDNjYwQ0YwQjY2NkY1OUNCREU4NkYxCis6MTA5NUQwMDBBQTkzMTlGMjAxOTU5NjkyN0Q5QTBDMTlENEFGNTk5N0Q2Cis6MTA5NUUwMDBCNjdDQTUxODQ3ODMzOERBODk3MkQ4ODQyNDFCNjdBRTA1Cis6MTA5NUYwMDBDRkZDMDVDRTlCRDk0N0ZGMjFDRkNBREEzRDlCQzRGM0YwCis6MTA5NjAwMDA0NzYyMUQ1RUU0MzM3RjI5RUEzRDNGNUMzRDdCREMxMTEwCis6MTA5NjEwMDBFOTA1NDk0QkUyRkVBOUY4ODMwQzQ0N0Y2OURDNjUzRjBDCis6MTA5NjIwMDBEOUYzNTM5NDg0OTlDODYxNkZGQzRFRTA0QkQyRTM0RDVCCis6MTA5NjMwMDBEQzBGQTIwMkNBODc3Q0Y1MEZDQUI2RkZDOTcyRUQwNzFDCis6MTA5NjQwMDA4QkExM0YyMzIzMUMzMTFFNkY4MjYzMTcxOTE3NEUxREY4Cis6MTA5NjUwMDAwQTg3QUEyNDkyMzgwRUM2QUIzN0IzNzFEQUM3N0NDNjI0Cis6MTA5NjYwMDA0ODNBQzZGOTQ4RTY3RTJBMjk2NjEyM0NBQUNFRTE1MTVDCis6MTA5NjcwMDA5NUI4OTlDOEMxNDcwMzAyMUVCQjFGM0I2RTI2QzVGQUE5Cis6MTA5NjgwMDBBMTJGOUM4NTZGNkQzMEQxODRGQjI1NkI4QzRBNzg2QTQ1Cis6MTA5NjkwMDA4RkI4RURBRjE5MEFFRkE3NUEzQ0RCRkRCOUVENDM4MDU3Cis6MTA5NkEwMDA1NkJFMUYxRTU3QTc2MUZGNkQ3NTBEMUFEQUQ3OEMxREE4Cis6MTA5NkIwMDA2OEJGRDIxRTVFNTIzQzlDQkRCRDVFRDhCRkREMjgwRjg4Cis6MTA5NkMwMDAwMzE4MEZENzg1QkM4QUQxQjMzREJDQUQxMUQ3QzFEMTJBCis6MTA5NkQwMDA1QTg2ODdDQUZDRkQ0NEUyRUVCODZFNTE0REM4MTNDN0U2Cis6MTA5NkUwMDA0RDEzOUM0MUEzQzQxM0VGOURFMDZBRTcxRkE3RjhFQzVDCis6MTA5NkYwMDBCODM2NDgyM0MzREYyMUUwQjdFQjc1MkEyOTREQ0Y4OTVGCis6MTA5NzAwMDAyNzNFQkU1RDBFQzREQ0YwRkVGOUYwQzdEQjE3Rjk3QjI3Cis6MTA5NzEwMDBGNTVDNzA5RDJBQkNFNThCQzNEQTRGNzVBQzlBNEE3MzMxCis6MTA5NzIwMDA3RjRBQ0NCOTBFM0UyQkY4NEIxREFCQTU0ODNFNjlGOURDCis6MTA5NzMwMDBCRTg3NzhGQjcwODJGQzVCNUEzODYxNDA1NTM2MUVBQkExCis6MTA5NzQwMDBFMTdBNzBFMEU5NUFEMUVFRDc4QTRGQUNDQjU0MENGREU4Cis6MTA5NzUwMDA1QzkyOTE2QTQyN0VEMjJBRDgzQTkyODZCNkIzOUY0OUU5Cis6MTA5NzYwMDBEMUJFRjNDM0ZGRjcxMkFEOTMzMjhERDY4OTY0QjA3NUM1Cis6MTA5NzcwMDA5NDYzMUM0OTMxQUY1NkQ4RjMxREQ5QkM0NkMxRjhDQzBGCis6MTA5NzgwMDA0NzcyMzJENzdBNTkyMUUwRDExNjI3MENBRDhBNDI3ODM4Cis6MTA5NzkwMDAzQ0RGQzMwM0M3M0E4NUVCODM0MzM2RkM1NjhBRkM1NjRECis6MTA5N0EwMDA4NUMyQkZBNjQwRjhFRDcxMThGQ0VEMDJGRUI1QzNDMTNECis6MTA5N0IwMDBERjI2RTAyOTAxQTM4NTdDOTkwNjk3QjMwMDE3MUFDRTBFCis6MTA5N0MwMDBCQzhCMzdDNEY4MjU0MjRFMzE0QzExRERFQ0VGRkYyNTQwCis6MTA5N0QwMDBGQTI5NzQzRTFCMDU5QzIzQ0RFNzhEMkMzREVFQzU3OUZGCis6MTA5N0UwMDBCMEY5REM4N0YzQ0EzNzlGN0IwNDFDNkYyODVDQ0Y2ODE1Cis6MTA5N0YwMDA4OTg0MTFBQjIyNTU5RjkzQUY5RTEwNzBGNDJCMjI4RTVCCis6MTA5ODAwMDA2NjVEM0IyQUJFRkFENzAyRTdGMTQ0OTYyRThGMDlCQTZECis6MTA5ODEwMDBFQzE4NkUxRThGOEE3OUY0QzgzMEY3MERGNDMzOUUyRTQzCis6MTA5ODIwMDBGNDBFMkM3MUQxRTVBOEMwNEY0RkMwQTZDQjc1MkVCQTRGCis6MTA5ODMwMDBGQzRFQ0NBQkQwRjkzQzUzMjA5RjFEQ0REMkU1MzkzMTQ1Cis6MTA5ODQwMDA5RkZEQzNDREM3NTFGRjQ1NTFGRjI1NTE5RkZDRTc0NzAxCis6MTA5ODUwMDA5NTJCNUFBRDVBRkM5RTM4QTBDQ0NBOEVDN0VBQkRFQ0Y3Cis6MTA5ODYwMDBBQzc3NkRGQjJDQkJERUFCQzgwRjUyMjNENzgzQUNERUNECis6MTA5ODcwMDA2QkNFN0E2MDVERDA4QUY2REI1QThDODk3RTAyRTA4MUZECis6MTA5ODgwMDBGNkFGMzY4ODc2NkY1MkJCQzU4M0ZEQkYyNUQ2MDdCNUM4Cis6MTA5ODkwMDA1QkQ3M0VCRkQ1MEE1M0JENzdGMDdEQ0I4MjhGRUM3QTg0Cis6MTA5OEEwMDBFRkJBRTE1RDYxQzM3MTg0RTA0RDBDQzJGMUJFQjNERTdECis6MTA5OEIwMDAxM0NBRTdBOUJGMjE3OTQ3QjE5MjgyRUMxRjdGNjk5MjUxCis6MTA5OEMwMDBGMkY3NEEyMEQyODNGRUM1MEUyNTQ1RkU2NDBDMzZBMDcxCis6MTA5OEQwMDAxRjcyNzUyMDRFQTkyQTIzRjlBM0NCMkVFNkVENzQ0NUZECis6MTA5OEUwMDAyMzdGNkEwMDUyNzAxNzdCQkZBMTU0QTFGOEM4NjIyNTdDCis6MTA5OEYwMDAxOUYxQTMxRDIxMjUyRDBBQUU4MjdFNTkwQkY2M0ZENjA0Cis6MTA5OTAwMDBBMEZDMkYxQjlFREI4QUJFRDg0NUZEMzA3OEIwREYzQjI0Cis6MTA5OTEwMDA4QkEyM0I5MUFGMzY0RTUyMERFNEFCOUQ5MzZFMjBCRkIwCis6MTA5OTIwMDBGOTZEMkQzQzdGRjBCNkYzNTVEQTY3NkQ3QTM5NDJGQTVFCis6MTA5OTMwMDA3N0FEMTJGRjJDRDZCNzRDRDU0MDNGRkFFQUQwNDcyRjZGCis6MTA5OTQwMDAyRDY3RTVCRTk2NjI1RDNBODdFNjQxNzA1QjNFNDhCNDlFCis6MTA5OTUwMDBDRDc0RTQyMzMyQjgwMzcxQ0FBNzIzM0ZEQzZEOEQzQzdDCis6MTA5OTYwMDBBRUMzN0VDQUIxRkRFQTA1NDZCQ0RCNDBGMUM1RTQxOEQyCis6MTA5OTcwMDBGQkRFNTlBNzkyRkQ3QTVCNDVENTdDMUM2RjUzOUQ0NjUzCis6MTA5OTgwMDBGNkM2QTZDNTU1MkRFNEM3QUIwQjkxQkZCMjI0NkM0OEYzCis6MTA5OTkwMDBFODY3OEZDRTUxOTkwMUNFQ0FBNTQ2MEJEQTlCOTFEOUMzCis6MTA5OUEwMDAyMTQwQkY1MzQ5MDUxRjJGNzIwNjkwMUZDQTBGM0Q4OUUyCis6MTA5OUIwMDA2QUY2OEM3NkE5OTAxOThCRkQyREM5N0MwOUVEOTlCQUIwCis6MTA5OUMwMDAwMEY5RTFEOUM0RjZENzhFQTM5NDM3RkUyM0ZGMEMxMDFCCis6MTA5OUQwMDAxRUZGNDQxOTEwRUYzNjdEQTMzRDgzRUQ4N0NENjM4Q0M4Cis6MTA5OUUwMDBBNjBCQUM5NzI5QUM1RUE0NEI4MUNDOEMwMkVBRjUxNDkzCis6MTA5OUYwMDA1ODJGNUQ2MEJEMENBRjE3ODAwQjg3Q0RFNzgzMzhDRjQ0Cis6MTA5QTAwMDAyM0Q0RDgxRjlFQzdFOEM4MkJBQ0U0RjZCQkQzNkVGMUI1Cis6MTA5QTEwMDA3QkJFOEYzNjJGRjQyQUJGQzgwQjlEMDM3Mzc4NUVFODk4Cis6MTA5QTIwMDBGMEVERUQ3Q0QwOTFFNjBCRTBDQkMyMjk4RjVDN0Y2RDMxCis6MTA5QTMwMDBGM0YwN0U2M0ZGQjgxQjYyOTg3RkQ5NTlGNjU1RjFCQ0VECis6MTA5QTQwMDA5MTNGQ0JDNUZCRjIzNTMxOTQ3NzlERTVFMjdCRjk4REYzCis6MTA5QTUwMDA0REI5RjZBRjc3RkFCOTFDQUU4MUM0QjA3NDI4MTFGMEQ1Cis6MTA5QTYwMDAxRjYyQjA2MzdFNEY4REMyRUE0N0YyRDc1NzRCN0RDMzZBCis6MTA5QTcwMDBFNjU5NkE4QUQ1NDBFQjc2QjE4RkQ2NkQwMDg1MDFBRTg2Cis6MTA5QTgwMDA5QjBBQkU4RUZEOTA0QTU0RjM3ODU1QjREQ0IxN0VGQzNGCis6MTA5QTkwMDBGNTdCNjhGREZDQTI1QzA2QTk4RUU4MTM0NzNDN0FGOUM5Cis6MTA5QUEwMDBDNENCMTcwMTcwOTQyQjRGOUU0RkI2RkU5OUY4QzRERkJDCis6MTA5QUIwMDAyNTE3QjQ3RUZDM0QwNUQ2NEIxNzU4MkY1MzU4M0RCNTlFCis6MTA5QUMwMDA0QjJBNDhBRUE4M0QwNUQ2NEIxNzU4MkZDM0VCQUQ5RDhBCis6MTA5QUQwMDBBQjcyN0QwRTdGNjhDNTc4QkZGRjEzOUFBQkJDRjYxM0RGCis6MTA5QUUwMDAyMUY3RjdCM0MzQUU3MkM3MkM3NzdCNzVCNkJCN0RDN0MyCis6MTA5QUYwMDA2Qzc3N0I3NTBFNkYxRkVDODAwNTE4Q0YyRjc0OUQxQzQzCis6MTA5QjAwMDAzQ0MxNzU1MkEzMEQ1RjNGNTIzN0MyQkFEMkY0MjBCNkEyCis6MTA5QjEwMDAyRjUxMENDODk0OTJCRTRBMEJCRDk1MzMxRTdFOUFDQTMzCis6MTA5QjIwMDBENzdGOTU5RkM3Q0Y2RjUzRjQyMEVFMjNGRkQ2RTcyOTQ5Cis6MTA5QjMwMDBBOTNDOUZDMDlFRUY0OEYwREFGMkY3QjdCMkIwQjdGMjk3Cis6MTA5QjQwMDBFNDdENDM4QzlGN0ZGMDQzMjg4RTc2OEVCMTUwNkI3OEY2Cis6MTA5QjUwMDA4NUUxRDFGRjJDQ0Y3QkY3RjZGQjhBOUE5Q0E2M0FGNkRCCis6MTA5QjYwMDBDNUNDM0U4M0E0QzMwRjczN0U5OUMyRjM2RDE4MUREMDdDCis6MTA5QjcwMDAxRTUyMjFEMTU4QzlGQTZCQUJGMDkxM0RBMjg0NDdEMDU3Cis6MTA5QjgwMDAxQjE1MEVCOTk1MjMyRjJGRUI5NzAyMTNDRjUzRDAyNzE4Cis6MTA5QjkwMDAwMzYwRkU5QjdDREM1MDFDMDhFRTA4RjREMTY2QkExODBBCis6MTA5QkEwMDA1M0U1NEUwNzE4MDM4NkM0OTNCRUUyMTJDRjEzQUNENzE5Cis6MTA5QkIwMDA1MTlFOTUwNjRGNzVCRjk3NTFCRjkyNzkxQjFDMkYxQTY2Cis6MTA5QkMwMDA0NUJGNEExRkU1Q0I5Q0YyN0U0NzgwMzcwODc3NTNCRkRECis6MTA5QkQwMDA2Qzk3NTQ3QTdDNkNCNjVGN0YyQzQ1MkYzMTRGNTY3NjRDCis6MTA5QkUwMDBFNENCRTFCOTA4Q0EzN0YxQzUzMzk0REYzMDIxNEFGQjMxCis6MTA5QkYwMDBCMkI1QTVEN0I5RjJDMUZGNTlBRDcyRjk4NzU0QkRFMzJCCis6MTA5QzAwMDA1QTA5RTNCQTE1NTc5QjdEQzNGMDc5MzMxMzU3RTRGNzJDCis6MTA5QzEwMDBBQzU4NkVGNkQ1RTRBRjM3OThBNzhGRjk5RTM5RDY0MTg4Cis6MTA5QzIwMDA4NzlBNENBM0ZENkU0RDBFRjNGREJDOTIyMjdGNjNBNzc1Cis6MTA5QzMwMDA1NDMyMURGMzJERUM3QTRBMDU5M0I0MENBRUM4NENEM0M0Cis6MTA5QzQwMDBDMkZENUVFNzU4NUYxQ0VENTQwNUQ2RUY5M0NFNjJFRDgyCis6MTA5QzUwMDBFNEM1NzFBN0ZGRDJGQjU0MkE5NEI3OURGM0I5NUQ2NUEzCis6MTA5QzYwMDA3QTEyRTExNDdBQjI2RDA0N0UxRkQxRUU1MUUzQzk1QzIxCis6MTA5QzcwMDA3RUQxNkZBQjdDNUZFQjBGRTVGRURFMTc2QTc4NDA5RDBGCis6MTA5QzgwMDAzNTE0NkY4RjIxN0U3MTdGM0IwNkJBQTRGRkMzRDk4NzNECis6MTA5QzkwMDBGMkE1MkFGNkJDODQ3ODU4NUJCNjI4MzZEQzdDRDkwNjU3Cis6MTA5Q0EwMDBFQUYwMjA1RDE4ODk3RjE2MzIxRjQxNzkzMDBDMUMzRjg1Cis6MTA5Q0IwMDBDQzA1MDc4NDBCRjM3RkVCMEJFM0M0ODc4M0Y2NTIyOUIzCis6MTA5Q0MwMDA4OEZEOTgxOTk1MThERjg3MDQ1N0RFMzI3MzczMDZDRjI1Cis6MTA5Q0QwMDA0M0Y4OTc4NjREQTQ5RjZDNkUwMUY0NTdEQjc2OTM2QzI2Cis6MTA5Q0UwMDA4NjVFRjUxMTNERUJCOUZENTRDM0VEMjE5M0ZEQzE3OUJECis6MTA5Q0YwMDA0NEVCODdCN0FCNjU0RkY5MzlENTZEMEZCNTM1RUYwMDNDCis6MTA5RDAwMDA2NzlFOUJGNzVDODVGRDRDODcxQTVFQ0M4RDhGQzJGNkYzCis6MTA5RDEwMDBDM0I3MzM3RUMxM0NGQjhEQ0QxQTIyMDU3QTlBNzUyQUQyCis6MTA5RDIwMDA2RjY4OEU1MTc5N0RCMzQxQ0ZGNkU2MUE3QURFOEM0RDlECis6MTA5RDMwMDBFN0UyRjlBNzU0NTcyNUMzNUI1N0VDODFEOEU1QUNDQUQ1Cis6MTA5RDQwMDBFRDI4M0IyODhGRUZERTA1NjgyRjc3MEY5NkQ5MzY5MEU4Cis6MTA5RDUwMDBDMUREM0QwOTc4NUU5RjdBRUIwMkRDRTc3NzA3NDFGOEM5Cis6MTA5RDYwMDAxNURBMTZBMDVEOUQyRERGRDEzNjFGQ0JDMkNGMTBFQUNDCis6MTA5RDcwMDBCQzZGMDFFRUY3NkYxN0Y5MEZBMDk4REEyNTBFQkQ3N0NCCis6MTA5RDgwMDA1QUMwNEZGQzQ3N0I1NzZBNkZCNTYxN0Y0MTQ1OTRFMUVDCis6MTA5RDkwMDA5MTA1RUUzMjk4MDg0RjUwRTNFNTA1ODE2REQ0M0Y4OTc3Cis6MTA5REEwMDAwMDM2REVBNzAzM0ZFMEUzNEQxMUY5NkRCNTRCNDZDMDI5Cis6MTA5REIwMDAyM0Y3RUY1QkFBQzFGRDVEQjUyNTE0M0Y1MkUzNzE3NDMzCis6MTA5REMwMDBCRkMyRUQ2MzA0REMwNUY2MDM0QTkyRUIzQjcxOEUyRkI0Cis6MTA5REQwMDBGRkJBMTk0MUFGMDkzODQ2QTIzRjQzMDdGOUQxRURGMzY1Cis6MTA5REUwMDA2OUNBMEJCOUY1RjRBOTFFRjc3NkZGRThGMEEyRDZGNTFCCis6MTA5REYwMDA1Qjc4ODZFRDA5MzUzOTI3QzBEQTQ3Q0NERTRDMjUyQjU4Cis6MTA5RTAwMDA0NzE3NjcyQzVBQkUwNThFM0IzNjYwRTczOTI2NjlGRDM5Cis6MTA5RTEwMDBEQjc4NTY3NDZFNzdBQ0YwRDBEMTVGQ0FFMzc1NDE3MUQwCis6MTA5RTIwMDBGRUE0NTA3ODkzQUExODQ3RjQwMzBGMzc5NDBGNjdBRjM2Cis6MTA5RTMwMDA5NTI1N0M2ODg0MERDQThCQjE4RDIxRTE5Q0UxRTUzMUNCCis6MTA5RTQwMDA2Njg5QUI1QzVDMzdDMTU1M0YxMkFGNzI3REY3RUIxRjgzCis6MTA5RTUwMDA3NzdEM0Y1MTNBNURFMjk5QzdBNzg0REQ2ODk3Q0ZGNURBCis6MTA5RTYwMDBDRUIzQzA3RTBGMTYyNzU2MDU3MEREMzQ0MDREOEFFMTEzCis6MTA5RTcwMDBGNUNFMkYzQzQ0RjgwRjBEQUVEMzg1RUQ2NjA1RTU4Mzk2Cis6MTA5RTgwMDA4Qjc1M0Q4Rjk3NzVGQjdCNURCQjU5Q0ZDQTg2RkQ3RDdBCis6MTA5RTkwMDAwNjJGOUJGNkY3MzhBRjZGRDlERkE3RjJFRjI4Rjc1OUY3Cis6MTA5RUEwMDBGOTZCOUQ2N0I0NUJGODFENUFDOTZGMEIxNTI5NThFMjExCis6MTA5RUIwMDBBMENGRDhGMTBEQUQwOERGRjhDQkQyMzE4QkJERUZGRUNFCis6MTA5RUMwMDA1MEU2RjIwMDdBNjJDRTdBNzc2QURDMEZGRENDOTQzQkUyCis6MTA5RUQwMDA2MkU4QUY1Qzc3RTY0MzMxMjA3OTI3RTU4QzA3RkUzQ0VBCis6MTA5RUUwMDBDMEYzQzVDQTQyODk5RTAwQUQ3N0IzQkY5OEYxRTFBMTI2Cis6MTA5RUYwMDA4NzY0ODNFQjIxRTUzNUQ0ODczRThCRTdFM0FCMTBERjQ2Cis6MTA5RjAwMDA2N0EyNUQ1NEMzRkRENTIxRjE5REU4NTg5OUFEM0Y0ODQ2Cis6MTA5RjEwMDA1NzRGRjlFRjM0QUVENzdGODc0OTFCMENDRUVGMTU5QjE3Cis6MTA5RjIwMDBGN0QwQjg5MDk2MUFEOTdBQUZCMEEwMUZDRjFGODFCMEUyCis6MTA5RjMwMDBGQjI2RjJBNjUwOUE0ODkzOUY2RjEyQzNBN0NDQkU0RjQwCis6MTA5RjQwMDBCRUI4QkZDNUNGNzA2RDVDQTZGQjcwODk1NDJEOEZGQjZBCis6MTA5RjUwMDA0OEMwMEREQTkxNjNBNUUzRUNGOTNEQTQxN0NBRTM5QjcxCis6MTA5RjYwMDA1MjgwRkE3QkVEOTkwRjM1MjE1RTAyOTk3RjAyODNFMUUxCis6MTA5RjcwMDBFRDFGMjdBNUMwNDBGRjZGODBDMzE1QjhBQzA3NDgzRTUyCis6MTA5RjgwMDA1N0Y3MTA5RUJERjg1QTM3ODhGN0I0MEJFRjNGMDk3MEFBCis6MTA5RjkwMDA3RjdFMkNDOURCMERENjUzNThCREE5NDNFQjc1MDc3QkRCCis6MTA5RkEwMDBFNkFCNjhCRjRERTE3OEY0OEVGMzVFNDAxMkU3NzZEREY0Cis6MTA5RkIwMDA3MEQ4RkQ3QUVCREYxMjEwNzE2RDJENERGMThENjdDRUVCCis6MTA5RkMwMDBCQzIxODY3RUVEQ0UyOThDRkVCNUY5RTk3RjRCODBFNzdBCis6MTA5RkQwMDA1QjE5Qzc2RTIyQjlEQjNENjkyM0M1MzNENzU1NkYyNkEwCis6MTA5RkUwMDA3QkYyMjhCMzIzRjBGQzc0Nzc2NUVFRjY5RENEM0MzRjAxCis6MTA5RkYwMDBFNjVDQjhCQkIxOEFEMUE3RjM3OTk5RkNCNERFN0FERjBECis6MTBBMDAwMDAwOTU0QjlFMjhENUE4NTdCM0ZDOEY4QUYwRkU1RTg0ODlGCis6MTBBMDEwMDBGQzI3NDcxRUUwRUI3Mjk0N0M4NzY2MjEzRkNGNTBENjI5Cis6MTBBMDIwMDA4RUY2ODA1Rjk0RUYwRTFDNkYxM0ZBOUZFNDdGRjlGMkI3Cis6MTBBMDMwMDAxRTcwRTY0QkJFMkZGODIyMTNFMDcyMjY1OEMxRjlBMzFBCis6MTBBMDQwMDBEQjZGNDk0RUZBQzVEOEZCRjk4RTc2RjlFODk2OEYxRjdCCis6MTBBMDUwMDAxRTE3RUJFMTdEMjVERTQ0Q0E1RjQ5RTlCOUU0QjMxMjdFCis6MTBBMDYwMDBGQkY0MkYxNzNBQ0U3QkI1MkI2OTRENDdGODZCMzY0QTc4Cis6MTBBMDcwMDA0RUJCRjYxQjY2MzJBNDM5RjYyN0ExRDgwNUJGNUM4ODEzCis6MTBBMDgwMDBGQjFGMjU5RTczOUZGRTI5RDM4QzZBNkNGQzlCOUI2MUYyCis6MTBBMDkwMDA0NjM1OUU0QjUwQUMwMEQ2QkI1OUM5MzREMkJFQTJEQTZECis6MTBBMEEwMDA0N0ZFRjI3NTE1RDdFREM1M0MyQkFCRDYxN0M3NkE2REM5Cis6MTBBMEIwMDAxNUJCMUFBQjBDRTQ5NzZEOTQ2N0ZBQTZCRTI0ODZGRDE3Cis6MTBBMEMwMDAwNDYyRUE4Q0VBQjE5NERGOURDMDc5ODc2QjU5QkYwRUI4Cis6MTBBMEQwMDA3QURCRTNERTJERjhGNjVCQkEzOTU5RTNGMkUwMzRFREQyCis6MTBBMEUwMDAyRjIwMEZERTg3Nzg4QzFCNTkwQ0NGMzlGNjU3NDNGMUEwCis6MTBBMEYwMDBDQ0YzMDQzQTJCODZFMDc5OEVFNkUwRUIwMEUyNzkwNkI5Cis6MTBBMTAwMDBDOUZCOUNGRTBCODZFN0IzNUQ3ODA2ODZFN0E5NTkzQzQwCis6MTBBMTEwMDA3NzU3NzAzQzc3RDY2Q0VFQUE3MkUyQjk2NkQ3REU0QTAyCis6MTBBMTIwMDAwM0M3RTc3ODdFNDhFM0U3NzM0Mzg4NjcwNzlDNUUzQzk0Cis6MTBBMTMwMDA4NzI1NUJGRjdDQUMxREY5RDZDQkY3MENFRjdGOEZGMDRBCis6MTBBMTQwMDBEOEVGM0YwQUZDODJFQ0UxQjFFMzEzMTc2QUU0M0Y0OTIwCis6MTBBMTUwMDBEMUZFRTk0RTI5QUY1RUJBNDQyQjQwMkY3NThBNzU3NDQzCis6MTBBMTYwMDBBN0MwM0ZFQkZGMEJENDdGQTlFOERGRDZCNzQyMUZGRUE1Cis6MTBBMTcwMDA4M0Y2NkYwQjUwMUZCMjdBQ0JBODlFOUVBMjdERjA2MDMzCis6MTBBMTgwMDAzRDBCODZENUEzQUNERDk1QzQ0NzYxNEZGRjI2OEM0QUI1Cis6MTBBMTkwMDAxRkIzN0VBRUEzN0UzNENGRjgwNjlDOTQ5RTY3RkRERThGCis6MTBBMUEwMDA0NEZEMkE5RTdFNEZCMTNEQzFDNkU5MjZGQzgxMDcwRkMyCis6MTBBMUIwMDA3RjY2M0IyNjk2RjRGMDgzRDJFMzkyN0IzNjNGOTQyRjYyCis6MTBBMUMwMDA3N0Q3Q0JBRkQ3N0FCODVFMUI2QUQ3MTBERkZFQkM3M0U4Cis6MTBBMUQwMDBDRjZFREMyN0JEQTk5QkRGNDZCQzhFNzYxREQ4NzY2MDhFCis6MTBBMUUwMDA1OTI4Qjk0REUzNzYyMDlEODNCMEJFNTE5NDZFNjM2REJFCis6MTBBMUYwMDA5NUUzM0Q1MTFFN0Y3N0VCQTNGMUI2M0Q1NENERjU0MDdECis6MTBBMjAwMDA3MDk0N0E2OTlGQjBENzNBQzYzMDE5NTVDQzlFRkU0NEY3Cis6MTBBMjEwMDA1MzJFM0ZDMzMzOUE5REI3RTZCNjlCN0Y4MzczMjQzRjhCCis6MTBBMjIwMDA1MTgyRkM2QkVEQjFDRkVDRTg2M0I0MzMxQjdCMjA5NzFDCis6MTBBMjMwMDA5QzRGODY5MjNGQzdGOUE5QkE2NTkyN0ExNUZFOTE3QzI4Cis6MTBBMjQwMDBGRDk2MjZBQzlEN0I2NzkyRENFREM3QkM0NjEwNzIxODZDCis6MTBBMjUwMDA0RDZCRjRDNzQ1MTlERTBFNjlFNEMyODhBMzdGQURFQ0VGCis6MTBBMjYwMDA2MjZCM0VDQUIxMEFDNjJGNTg3RjVDRDMzRTI5OTkyQjM4Cis6MTBBMjcwMDAzRTZFRUY3RjEwODgxQ0ZCOTc3MTlGOUI5REE0N0NCODVFCis6MTBBMjgwMDBDNTMzNDdEOERGQjREOEY2RUI2RjcxNUU4N0Q0OUUwQjI5Cis6MTBBMjkwMDBBNjM4RjA2RUQzRTkwRTI5NzFFMTc5Mjg0RkU3NzEzQUJCCis6MTBBMkEwMDAxNThGOTI0RTAzODI0RUIwOThFN0ExOUU3QkVDNUM4RDk5Cis6MTBBMkIwMDBGQzhCMTE1RjAyRkRGMDQxN0Y4RjVFRTJFMEEzNzEzRUY3Cis6MTBBMkMwMDA0OEY2OEUwMkZFN0FFOERGN0QxQ0Y3N0Y2MTFGRUQ3NzhFCis6MTBBMkQwMDBCQkMzQ0JCRTgzRjdFRjU4QkExQTlGNjI2NEM3RUQ2NjYzCis6MTBBMkUwMDBGQUJFQzRBMTdGQkNGRUFBQzE3REY0RTJDMkYyNjVBNzlBCis6MTBBMkYwMDA1ODczMjhERTlGQkQzRkM4OUQ3RkMwMThBQjA2RjM4NjBDCis6MTBBMzAwMDA1NkNCREM3RjdFNjdEMUQ3MjgwRjYxOEQxNUQwMDNBNTkyCis6MTBBMzEwMDBBNEM3QzhGRTVCMjdGMkQ5M0E0NTNFREI1QTkxQ0ZFNjg3Cis6MTBBMzIwMDBCNzU2NkZDNUZBOUIwMDEyRTg5NzZDOTk5N0EyNzg3RjkxCis6MTBBMzMwMDA1NEQxRjRENjM4QzI5MTlBODM3QTIyNUE2QUFGQ0YxRjg5Cis6MTBBMzQwMDAyRkM0RjUzOTU4QjZCRUQxREVDMEU2MUI4REQ5RTU4REQ4Cis6MTBBMzUwMDA2NEJGQjVCNzcwNzlGM0Q5RTAwQjBCQUQ3QTY0QzUzRTM1Cis6MTBBMzYwMDBBMkM3QTZCQTI1QzUzMDhDM0YzMjVDRUJDRTlGMEI1NUY5Cis6MTBBMzcwMDA4NzVDNjVBREEyQzQ1NTU2NEIyNzBDMUJCN0Y4MTlGQTdDCis6MTBBMzgwMDA4OTY2RTE3Q0ZBMjA4RTcwRTZDOTE3OUUxMkU0NzZCNkUzCis6MTBBMzkwMDAyQzRGRUJDRjYwQkVDMUQ5NkE3Q0IzODFFN0E4REQ3OUQxCis6MTBBM0EwMDA5Q0VENDE2RTBGM0U4QTBFMjE4QUUzMEFCRUE4RTM3MTNFCis6MTBBM0IwMDBENUEyQjk1NUJEMTgwNzgyMzE5QzJGMzA0RkQwQzkwRjk3Cis6MTBBM0MwMDBGOUY4RTJBRjhEMUY1RkQxRTExOEU2NUREQ0QyMUEwNTI2Cis6MTBBM0QwMDBDQzczQjk2NUVFQUZFMjE5MDNFNTZBNUYwQ0YzMzNEQUNCCis6MTBBM0UwMDA5ODI0Njk2NURGMzdDQ0ZEOTU5MUNCOUY3QzQwNEIyRTNGCis6MTBBM0YwMDAwRjIyRkVDMjA5QjJCRjIyMzM5M0Y0RkM2QkNGNkIyNDUxCis6MTBBNDAwMDA3QURFMTlFNDdBNkU4QUEwQTc4MkY0OUM5OUE1RTdCQTRECis6MTBBNDEwMDAzQTQ2Q0Y5OUQ5NzVCRTRFRTlEMTBBQTFFN0Y5Mzg3RUZGCis6MTBBNDIwMDAxOUNBQTFGRkE2N0REQkNENzVCRTQ2OTQ0MzA2RjQ1MjQyCis6MTBBNDMwMDBGRUVEODY1QTlGMEZGQkZGNkJFMUM1ODYyQjNDOTdDOTRCCis6MTBBNDQwMDA0N0EyNTMyNjgxN0E2MTQzNUNGMUExMUNGOTlCRTNDM0M3Cis6MTBBNDUwMDA4RkZBRTg3RDAxN0NGOEMzNUM3Q0I4NUNEMDQzMkVEQUNGCis6MTBBNDYwMDBENzk0MkJFRjZFNEE1MDcyRTE2NTNERDI4QkUzQTU5MUY0Cis6MTBBNDcwMDBFM0M1Rjc1N0MxQ0JBMEJFRDA5MjJCOTE2RkFFODhBOTkwCis6MTBBNDgwMDBCNEVGNTY0QUJBM0EyODVFQzRGNDFFQzYxQjU2QzhBNjk0Cis6MTBBNDkwMDA4MUYxMjZGODk2OUZERkM3ODQ3QURCQTE1RkZFMTgwQzU2Cis6MTBBNEEwMDA3MkZCNDQ1RUJGODhFMjE4NkM2QUI4MkY2M0U1OEYwREJCCis6MTBBNEIwMDAxQjBGNERGQkZCOURGNzk0NzhGMzMyNUUwQkJBRTMxMDU0Cis6MTBBNEMwMDA0NzJBOTYxNDIzQkRGMkY1Rjc3NkYzNUUxRENGRDVEQTUxCis6MTBBNEQwMDBGOTE5REVFRjJCNjQ0OEU1M0FCNzI4ODUzNDYxNjdGNjUxCis6MTBBNEUwMDBBQTg0ODcxQjk5QUU5RDg2RjhGOEQ4NDIzQzlGRDk1OTFCCis6MTBBNEYwMDBEMTNBOEVFQzE4NzFBRTYxQzU5NjY3NzVDNTAxRTcwQTUxCis6MTBBNTAwMDA4NUE5QkZFOTQzRTc2M0UzNzcwNUFBQzkxMjQ3RkJGNENFCis6MTBBNTEwMDA1RTU3N0I2RkJCQzFGRTQ0N0I2NkI3Rjk0MzBDM0U1MzZECis6MTBBNTIwMDA0OUVEQzU3OEIzN0Q3RTQzREQzMjNGNDM2QTMzMEZEQ0FFCis6MTBBNTMwMDA4QzhFMjcwNTc3QTFFNzM4OEUzQ0QwRDY4MUZCNkRCNDkxCis6MTBBNTQwMDBCRjNFQzFGOEU0Qjc4RkM4RjE1NkY2RjU4QUJCQ0Y1OEM1Cis6MTBBNTUwMDA4OEU3NUEwRjAxRTcxNzlCM0U2RjNERDAzNjJFMTc1RkY1Cis6MTBBNTYwMDBFNEEzQ0Y3OUExMjA4N0U3MTRGM0Q3NTkyMTBGN0ZGNTEyCis6MTBBNTcwMDA1RTU0OUM4MTUzQ0Y1RjhCRjNGMTk3QzBDRkUxNUU4RTI5Cis6MTBBNTgwMDAwRkI4NkI2QzRFM0FFNTlCQ0YyMDlERUM3NjgyQ0ZCQzJBCis6MTBBNTkwMDBFREYzQjU2MzdDOTVFMDdDOTU4OTlFNUQwODVGMDk3ODU1Cis6MTBBNUEwMDA2REZBOUQyQ0JDMjNGMTU1NjA4RDZDRTA3OUFFNEEyNTg3Cis6MTBBNUIwMDA0MTcyQjNCM0Y0M0E0QkRDRUI0OEY5OUU3MkNGQjQ4Q0UyCis6MTBBNUMwMDBCOEQ3NEFFNEI1NDMwNkVEODk0MEE5NDk3Njc0NDhEQzFBCis6MTBBNUQwMDBDRkEzNTVCQkU1QTYxMjczOUY5Qjg4MzUyNTMyNzZCRjY2Cis6MTBBNUUwMDBFOEJGMENBQzUxNjlEQ0MxRjg3MTE4MzJDMTI4OTY3OTBBCis6MTBBNUYwMDA5QzE0QzUxRkVFMkIwMkYwNERGMjdCQjI3NjM5RkQ5RTA2Cis6MTBBNjAwMDBGNjUzMTFGOTZBOThDQjRCRjdCMkMxRTc0N0M4NkY3MTlGCis6MTBBNjEwMDA4RjEzQkI3OEY4RkMxQTZGN0QwODJCQzYyMTA3REVGMzc5Cis6MTBBNjIwMDBCNzUzRTA5MDYzOUZCMzQxREMyQjZBRTNERkRDQjI5NDY1Cis6MTBBNjMwMDBGMkNBODNFMDhCRDNGRTIwRDY2MUUxQkVBRjQzQUNFNzI0Cis6MTBBNjQwMDA0RTdDQ0VDNTczQkNEMzc1REFBRjU1RjA3ODhCMjU3REMzCis6MTBBNjUwMDA5OUZDMENGNkI5MzM3QjNDRkJCQzk5NUQ2RjI0RkFBRkQ3Cis6MTBBNjYwMDBDNkY1OTQ2MzdERUYwQTcxN0QzQUYwQjVENDdGRTMzRTgxCis6MTBBNjcwMDBDNEZBMTMxODc4MEZDNUUzQ0QxRjUwOUNGQTlDQ0M1QjJECis6MTBBNjgwMDAzMkZBRjc5RjA5OERBMzdFQ0VFOUVGOTMxNzM4RDZFNTBFCis6MTBBNjkwMDAzOUUyMUMwNzQwQUY5Q0VCOUM5N0RGMEFFQzQyN0U3OEM2Cis6MTBBNkEwMDBFQTMwREY4RjNENzVGODA4RDlFMTRGRkRERTk3NDZCRUYxCis6MTBBNkIwMDA3QkVBODNFMUYzMUUxRTE3RkIyMkJCREVFM0JGRTdGNjU2Cis6MTBBNkMwMDBEOUUzNEE2RjUxMkVGQjJFM0I3RTlBRUYwNzBGQkJGOTYxCis6MTBBNkQwMDAxNTk0NUUxOUY5NjVFMEE2N0QzMkZBMDcxRTZGRDZBNEJGCis6MTBBNkUwMDBENzk5RkM5OTI3RTY3OUNFRTEzRTE5Rjc0RDIzQ0Q2QjNBCis6MTBBNkYwMDBBQjg3QkVGNjNDQjdENjczN0I3NDZCRkQ5MTEwRkFGRjQ3Cis6MTBBNzAwMDBCNzNFQzFFNzdCQjQ5RTlGOEZDRDA3RUZBRTY2OUVERjVECis6MTBBNzEwMDBCMUY1ODlEQ0Y4Njg5OEM3RjdDNzBEN0VBMzM0QTc1RDRCCis6MTBBNzIwMDBFQjM5NjdCNTQwOTNEREU3QkI0RTMxN0NCQkVCQjlERDYwCis6MTBBNzMwMDBCNTVCODk4NzRGMDQ5RUJDRUJCQkFFQTcxMUREMDg1MTBBCis6MTBBNzQwMDA0ODM2Q0U5NzA4QkRGQjVEN0U5MjAzNUY2RkY5MzJFNjE3Cis6MTBBNzUwMDA2QjJDMEQ5QjEyRUU2NUExMkZGMzI0OUI1Nzg5QTkyNTI1Cis6MTBBNzYwMDBGMERFOThFMkZBMUU2OTMyRTY3N0M0NzgxRUY5MzdBRjU4Cis6MTBBNzcwMDA3RTJERjMzMjJCREZEQzU0NDQ2NTVEMzc5RTVCODRGODFECis6MTBBNzgwMDAyOEQ1Qzk5RjcyMzM3QTVDNDg0MDdGNzMyREU2MjdEMDY1Cis6MTBBNzkwMDA3QTY0RTVDMENEM0RFN0ExM0Y0QjAxMkUyRjk4QzU2QkY0Cis6MTBBN0EwMDAyOEUzRTg1RTNGNzJEMkU0OTMxQkVDNDczQTFFQzhCNjNBCis6MTBBN0IwMDBDQjNCNEY0RkRFNkQwMDk2MEMyRkM3OTZGM0ZBMTZGQjdFCis6MTBBN0MwMDA4MzcyQThDNDkzNjdBMjJGNzRFN0E1NDQzREZENEY0NTRCCis6MTBBN0QwMDA1QkI1QUM4MEJDRjI5MzFDNjcwQzZDRDMwQ0RDNjdENzA4Cis6MTBBN0UwMDBGQUY0MzRENjA3NjMwQ0U2MEQ4NjFCOTk4MUM0RTgzOTY4Cis6MTBBN0YwMDA0NjA3MDlDREU1OTFGMEJFMEVBMDkxRkJCRjMzRTAzQ0NBCis6MTBBODAwMDBBN0QzNTBDNEU1RDU4NEFCNkU5NzcwOUY3MTM0Q0VCODkyCis6MTBBODEwMDA2MjFBOTZERkNDOTk3RkQ1MkVFNEM3NjA1OURGNDVGMkU2Cis6MTBBODIwMDBCNDAzN0FGNzUyNUMyMEU5MjMzQkZDRTZEQUQ2MzFDRTVBCis6MTBBODMwMDBGNjRCOEIyNERCMUYyOEU4MEY4NjMyM0I0QjdGMzYzRkRECis6MTBBODQwMDAzMzc4RDY1RjhFRkVCMUU1NkVCQzhGOTYyRUQ3MTQ3MTJECis6MTBBODUwMDA3OTM1MTJGRDRGNzYxQzlCNkU0M0Q3NDc4QkEwREIwM0U3Cis6MTBBODYwMDAxNDE3RURBRTE5NUVFRTBGQTVEQjM2RDI3N0UxREFEQzE4Cis6MTBBODcwMDBGOUJBRDcxNTQ5MkU3OTZDM0YzNTQ4NDE5Q0YxODkyQzlFCis6MTBBODgwMDBFRTY3OTZDN0NGNkVCQTdGMThGOTIzM0JFRjY3ODY2Q0U5Cis6MTBBODkwMDAzRkUzOEMxRTEzRTM1NkUzQTFDN0M0NzNERjhDQTdFMzI5Cis6MTBBOEEwMDAxOTQwRkUzNjAxRUQyNDY2MUUxMTFGQzk5RUZEREM0NkNGCis6MTBBOEIwMDBDMTQ3NDE3ODlFREFCMzU1NjBFOUE0NTc1MkEwM0JGMkY0Cis6MTBBOEMwMDA1NENFOTNDMzcxRjQ1RkFDRDNDMzc0MkYxMkNBNEY5RTlFCis6MTBBOEQwMDBCRkMzRjNGQzhCMzk0ODBDQkZGRDgwRjIyRDU0MkU4MzhGCis6MTBBOEUwMDA4NTdFQkY3QTAxQUZDNEY4MEVGM0ZCMEZCQzc1MDBGNzhECis6MTBBOEYwMDAyQkUxOTk2RTNBMjkwNzhBMjhBRjJERTQzRDI3NzJFMEIzCis6MTBBOTAwMDA5QTZCNjg3RkUzQTFFMzY4RjNGRUJGNUYyNEVDRkYyMjRDCis6MTBBOTEwMDAwODkzREQyNERBRTdDQkRGQjNFRDdFMUJCRkM2QjEwOEI5Cis6MTBBOTIwMDBFNUVENzQxQzkwMDgxRjY1OTMxM0Y3RTNGRTBDN0UyNTdDCis6MTBBOTMwMDAwM0NGQ0IwNDEzRjNGNjU2RkY3NDE2N0QxRjFBNTc0ODQ2Cis6MTBBOTQwMDA1NDIyNURERTNBNTBBNEI3NTYxNjkyMkY5OTQ4QjZCMEZECis6MTBBOTUwMDBGQUM2ODE0MEJDRDUyMEQ1RTJEMzkwOEU3RDEyRDE1MTZDCis6MTBBOTYwMDAxQUE3NTFCRUQ2RUE3RkY3REYxRjE4MjY1RkNCOEUzRkFFCis6MTBBOTcwMDAwRTk2MTU4QkUyOUI1REM2NzRDRDI5NEZDQTQyQzk1RjA2Cis6MTBBOTgwMDAxNjM5RTNGNjIyQUVFQkY1QUYwN0MzRURCMTY3NjBGNDFECis6MTBBOTkwMDBGMThGRDJGMTIwRTJGMjlGNUY4NEY2NEIxN0FFMDE5RTU5Cis6MTBBOUEwMDAxNzQ3Nzk3QTVERTVCQ0ZDNDZEMTk0NDUxOERGRTk4QTAyCis6MTBBOUIwMDBGMDcyNzFGOEM4NzkyRDI0NjcxM0U0RkY1QkMzMTgwRTk5Cis6MTBBOUMwMDBGMTA4N0JGREUyMUU0OTYzRkM4NUMzQzgwQkVGRkNENzkxCis6MTBBOUQwMDAyQkZCMjg0RkZFOUVGMEZFRjNDRjQwRkFDNDdERTQ4RkEwCis6MTBBOUUwMDBCQkU3RkE2REFFRkI5M0RFRDQxQkRFMkZBMkY1QUFCNzUwCis6MTBBOUYwMDA2MzdDN0E2MkQyQ0VENzc0Qzc0NTI2QTBENjYwRjM5QjFCCis6MTBBQTAwMDBDNDA4RTM2Nzc4MzhFRDYyNjg0NUI2QTlCQ0FDQjcxQ0VBCis6MTBBQTEwMDBGN0M5NkI0QkI3OERFMUU3RkQxN0VBODdDODZFOTcyOTM5Cis6MTBBQTIwMDAzRTlEMEY1RUFGOUQ5RTZGQkU3NkJDREREQkZFQUUwODI5Cis6MTBBQTMwMDBCRjQ3RDUxQjE3RjNGQTgzMUU0NEZDOTY1MUZFMkM2MENBCis6MTBBQTQwMDBGRTZDQTdCRjJGNjczQ0VBOEQyMkVFRDc2Q0FGNTg5NEZGCis6MTBBQTUwMDBCODFDRTdBNTk4NzMwRjMyN0NEQzVCMUFBNTdEOTBGRkNDCis6MTBBQTYwMDBBMkRBNEI3RDBFN0JDM0NFNjc1M0M0N0VDRTVGOUEyMkEzCis6MTBBQTcwMDBCOUE4Njg2NkQ3MTkxODJGN0E1RUM2MTUwNTE1M0QzQjJCCis6MTBBQTgwMDAyNUI0RTdFREZCMjAxMEFEMTc0RkU1RjNDNTc5MDU4MDQwCis6MTBBQTkwMDBEQkM1Nzg1RUUxQjg2M0RFMTA3M0Y4QzE1MDlFODhGREI3Cis6MTBBQUEwMDBEQjI5QTBGN0I0RjBBQ0ExRjQ5RERGQzVGM0QwNjM1NzY4Cis6MTBBQUIwMDBGMEYzNEQxMzk1RENGNDFFN0Y5OUVFRTNGMUFGNTM0QkE5Cis6MTBBQUMwMDBFNzdDRURGM0M1M0RFRjhBQThCNDdFQTZFOEFCRjdFMkRDCis6MTBBQUQwMDAzRDc3MUQ1NjcxMTJFMzMxMDNGRTU0MTdDQUFCMERGRkNCCis6MTBBQUUwMDBFODgzQ0QzNEZGRDFFOTM3NDU0RkQwM0Q3QTE1Mjk3RDM0Cis6MTBBQUYwMDAzQTJFRUY3Q0VERUU0OEVEMEExMjlFMkQ5RUNGRTBGRDQyCis6MTBBQjAwMDA3RTc5OThFQjlCOUU5NEVGMzZGQzZFM0U5RERBRTlDNzBBCis6MTBBQjEwMDA3RDY3OENFRkFCRUQ3RDc4MzI5NEJDM0NFQ0IwQ0Y3NUFCCis6MTBBQjIwMDBEMzIyM0U5QTkyQkM5NEU0QzA0MDU5NjFGNzJGMENFMkM0Cis6MTBBQjMwMDAyQjRGMUVGMzFEMTFBRTk3QTcxOEFCNzlCRjkzODZGNzY1Cis6MTBBQjQwMDBDQkRBNzhGOUEwNEIxNkJGMTcyMTEzNDQzOEZDOEM5MTRGCis6MTBBQjUwMDAxM0I4MkU2RUU0NzJFMkVFMzVCQkU4QkQ3MjYzREY3Q0EzCis6MTBBQjYwMDBGRUJEQkYwNUY1RUExRDNFQjgyMjk3REZBODJEQzJFMzYyCis6MTBBQjcwMDA0MTkzQ0RDQzNBRDQxQjkzNTMzRTQwRkJGNEY2ODg0MTJECis6MTBBQjgwMDBFRkM3NUZDNkYxRDQzNTA5RTIzOEVDNjlEODFGRkJDRkI3Cis6MTBBQjkwMDA5RTRBOTVGNEQyRDg1MkEwRkI5MkM2QUUwMUQyREI2Mzk2Cis6MTBBQkEwMDA2QjIwNkRCMDcyRDdDRUI5M0JEMUJFNTVBQjIxOEVBRTA2Cis6MTBBQkIwMDBFQkREOTUzNzU4NjgwRjZDQUEwMDEzRjVCOEZGNDZCNjYxCis6MTBBQkMwMDBDMDU4N0RENUYwQTUzMTUwQkMyOUI1OENFRTY5NTlDQjY0Cis6MTBBQkQwMDBENjI1NTI2M0FERDE0MEY2QzNEMTE4MkYwNzJBRjgzOUQ0Cis6MTBBQkUwMDA5OEFFMzMxNTgyQzNCRTdGOUNFQzRFQTYxRkZDQjVGRDBDCis6MTBBQkYwMDAyNjVFRkQ2NUMwMTVENDhGN0YyRUE3QUI3MTU3M0Q5RDk2Cis6MTBBQzAwMDA1M0VCMUFGMzEwREQ0QjYzNUQwMzNDREU2OUM3QTUxNUZBCis6MTBBQzEwMDBDNjVGNkM5Q0Y2MkJGNDlDRkU5NTIzQTFFNEI3OURGQ0NCCis6MTBBQzIwMDBDMEY4OTFFNDRDMTdFNjEzRTRDMDY3Njc5OEUzRjMwRUFECis6MTBBQzMwMDAyMUU3MDZGQ0YwMjk4QTk3QjRGOEU4M0UxNzZGRkQ2NTE2Cis6MTBBQzQwMDAwMkZGNzc1QjRCRkVFMTBDMjNBQjZGRUNFRjA3OEIwQzQ1Cis6MTBBQzUwMDA5NzdGQTNFMjAzOTVFNkIzNDhCRTExNzRBNDNCQjM5Mzc4Cis6MTBBQzYwMDBFOEZFMTdCQzE4RjQ3NDVBOTYxNzk0M0JDRUIzREMxQjVECis6MTBBQzcwMDBFRjg1Qzk4ODY3REIyRUFBRTVGNjhDN0RFRTkxRTEyMTkwCis6MTBBQzgwMDA3MzBGRkJBRUQ3MDVFODdFRDFGMTREQjlFRDIzQjU0MDhBCis6MTBBQzkwMDBGQkE4QUJDOEZDNjkxOEYzMEQ0NDNFRkZENzk3MkYyMUUyCis6MTBBQ0EwMDA3RDlGRUZERURBQkIyMzVDQ0VERjI1NTk5NTFENDg5RkUzCis6MTBBQ0IwMDA0OUZDRkUxOTZGQkQ4M0MyNUU2NEY2MjBGMUNEMjY4QjgwCis6MTBBQ0MwMDBERkJCQjU4OTZEN0QxRTQ1QkVCQTlFREZGM0M3REVGM0RGCis6MTBBQ0QwMDA3MzBFMDZEMDc5RjFEODBEQ0JCNDVDRUJENTFCNTdDRUYzCis6MTBBQ0UwMDBCN0VFODI2QTVGMzI1N0JDQTU1NkQwQUQyNEFFQ0ZGNzFGCis6MTBBQ0YwMDBGMUU5ODNFOUIwNDc4QjZBODFFRUZGRDIxOTdERDBGNjg2Cis6MTBBRDAwMDBBRDgwNUU0QUJBREZEODU4NTI4OTcxQTE1QjZGNTQwRDhECis6MTBBRDEwMDA3QzdGNUY2NUFGQjUxMEU3MkQ0MUVGODM5ODIzQTNGNEU3Cis6MTBBRDIwMDA5QTc4MUVCRDIyM0VDRUU4NzY5Q0Y3MkVBRTc4OTRDRTYxCis6MTBBRDMwMDBDM0RGRkU1NDAwMDI3NTc4M0ZBOUU3RjdEOTM4RTkyMzRECis6MTBBRDQwMDA2N0U5NkNFQkFCN0NGMzJCRjQ3OTBCQzM5N0YzRjc4MERCCis6MTBBRDUwMDAzMDg4MzMzODhGMjIwQjBDQkExRkQ5RTgyNTNCRjRBODcyCis6MTBBRDYwMDAxNTQ0REQwQTQ2N0QyRkQ3MkJFRDIxNzgzMDhFRjdDQ0E4Cis6MTBBRDcwMDBGMkYyQTZGMDU0QzBGQjY3MzVBNTk3RUM3NTREQUZBMjczCis6MTBBRDgwMDA3MjUxNzVBMjlCRUNGMzY5REJGNTVDRkFFMTUzOTE0QUQxCis6MTBBRDkwMDA5N0RGMjRFNDg5NTM2OUM5MUI5QUI4OUY1Njg1MjkzOURFCis6MTBBREEwMDBENkQ5QzEyMjg1REJEM0FDMjlDNTczQURFMUU1RURDOUE4Cis6MTBBREIwMDBGMkM3OUI0MkRGRThEOTdEMzJGMTA3QzkyRTQ2OEY3MDdBCis6MTBBREMwMDBDNUEyQjc2NEM3N0Q5QzYxRUZGOTYyMkYzRDNERTU5MzU1Cis6MTBBREQwMDBBNUU3M0FBNEE3MjNCRUEwRDUyNzM1QTQ5RkMxRUMyNDlDCis6MTBBREUwMDBCMkZCRUIwMTlDRjdBNjZGRDIyQzdFMEY4MzYxRjgyQzhGCis6MTBBREYwMDAwNzdFQ0I4NUREQTc3Q0EwRDA3OURCQkI5Njc2RDBGRTI1Cis6MTBBRTAwMDA2MzJDRUIwM0YzN0FEOTMzRTdCREQzMDc4Qjc4NUU3OEY1Cis6MTBBRTEwMDA1NzUxNjI0OTg0RjI3MjgxRUUxOTVFMjdFNEM2NzlGMkQ1Cis6MTBBRTIwMDBDRjgyOTg4NzE1MDRBNkU3OTA4RjE2RkJFMEMxMUM3NEFCCis6MTBBRTMwMDAyRDhGNzAzQ0E3NDNFNkU3MjJCM0YyQ0ZGNzcxMjlGN0Q1Cis6MTBBRTQwMDA3REEyNzZGQjgzQzIwRjUwQjgxQ0U2RjM5RDYyMEVEMDQ0Cis6MTBBRTUwMDA3OUQyODE5QjBBRDNERjAzNkM2RUZCRDAyRTU3RTI1QzY0Cis6MTBBRTYwMDA0RkY3MTlEMDNFOTNFRTdGNEFBM0RFREQxNDVCNDI3OEE0Cis6MTBBRTcwMDBCRjBGRjUyOURBNTZCNTVDNEZGQTUzREM0RjBDODY0NDA4Cis6MTBBRTgwMDBGN0NBODZDNEJEMUJGN0E1OEUzQzhCNzZDRkQxMUEwNUI5Cis6MTBBRTkwMDAzRDNFMTBBQzQ4NUFBODVGOEJBQkZCMkMwOUY1NkM2OUEyCis6MTBBRUEwMDA5QUUyQzc0QzhGNTk4ODY3RTNBRTQ1MDRCNzVGRTk2REY2Cis6MTBBRUIwMDA0MTdEOTk1NjIwODRGQTdDMDA4RDQ5NjZDNzNEMTI3RUZCCis6MTBBRUMwMDBBNDAzRjM1REZDQjU2OTUwNjREQ0Q3MDMzOEVGRjczN0IyCis6MTBBRUQwMDA2MDJGRDk1OTdFQTY4N0M5NkU1MkZBNUE1MDJFQjVENzFGCis6MTBBRUUwMDBFQjE0RDczOUVEQzYzRTcwRUVFRkQ4QjhCN0UyQjgxMzIxCis6MTBBRUYwMDA0QUQ5Nzg0NjU2N0Y3QUVEOEQ3Qzc2MDZEM0IzMjIyRkQ5Cis6MTBBRjAwMDA2NzQxMDdFRURGNjgyOUIxRjJDM0UxRUQxRDY4NkY3RThFCis6MTBBRjEwMDA0QjM3QkY0RUZDOTM2NzlGQzFGOEUyOUU0OEQ5RThGOUQyCis6MTBBRjIwMDBFMkI5QjA5QjJGMDZGRDI3QzJFRkJBQUM0RTA4N0EzMENCCis6MTBBRjMwMDAyRUZEMEQ4M0ZCQ0FCRDdFQzBGOTlGN0JFQ0JFM0RGN0E1Cis6MTBBRjQwMDAzMDdDQzhBODRGQzk3MkU5RDlGMzI0RkJCRTFDRkRCMDAwCis6MTBBRjUwMDBBQzdDRTU4MUE5MkFDQUJENUY0RDkwRjFFQzMwRjI1OTc1Cis6MTBBRjYwMDAxNEY5RTcxREYwOTE3RkU4MUREODFGOURFMTgwNjc2NzA4Cis6MTBBRjcwMDA4NEFGMTNFOEYyQkZENkU3RjAzRjVFREVDM0NCQjZGQzhBCis6MTBBRjgwMDBGQkNBNURFRUYyOTc2MUM5MzhCNEJGQkU3Q0JCMUZEMjZECis6MTBBRjkwMDAxMkZFREUyOUY3QkVGOTkxMDhDRjM3RkYwQUE0M0ExMDU2Cis6MTBBRkEwMDBDRjZCQzVGOUE0NkIxRTlCQUFBMkZENzRFNTBDQkQxMjY0Cis6MTBBRkIwMDBFMzlGMzYxQ0NGMEEzREZEMzZFMzYzQzMyMTBGQUYwQTgyCis6MTBBRkMwMDBBNzU1Q0M5NzdBN0RGQjhDQ0Y5QzBERDg0RkJBNjMwMkU2Cis6MTBBRkQwMDBGQTBGQzc0MDRFM0RGRUE1MkUzNzlDMjNDREMzMEJCN0JECis6MTBBRkUwMDA3RERFMjgxRjFDQ0ExNjI5QTcxRkVDQzU4OERCMEY3NjNCCis6MTBBRkYwMDBCMkY3QjMxRjQ1RkI3ODU2RjZGN0Q3RDk3OTY2MjdEQjRBCis6MTBCMDAwMDBFRjlGRjJGNDdCOEQ4NjE3NTEwM0FDNTI3QTFBQTVBQUYyCis6MTBCMDEwMDA2Q0RDMkJFOEI3Q0M4OTY4RkZFRDk4OUZDMURDNzU0N0U1Cis6MTBCMDIwMDBCREFFMDJFQjM1RkE4NkE5MzdEMjdDNTY4N0VFOERBMkVCCis6MTBCMDMwMDBCRkE4NEY4MjQ0QUVGQjc3Q0E0MkM5MzFEMTU5NDNFRjEyCis6MTBCMDQwMDBFMTAxRjFGQjgyMEVCRDYyREY2M0RGQkYwOEZEN0MwMTIxCis6MTBCMDUwMDA2MEZCN0I3QTJBQzQwN0U0RkY5MUQwNUVFREM5OTg5NTI2Cis6MTBCMDYwMDAxODNGNTY1Q0ZDNTE4NEYxMTQ2NkY3QUUxMkY2NjU1MTM4Cis6MTBCMDcwMDA4REZCQkJENzFGNzQ3QTk0QUZFQjdBRTgyM0ZCM0ZBQTEyCis6MTBCMDgwMDA4NTMzMzI5RTZCQUQ3M0U3M0ZERDU5RjQ0NTkyQkIyQkEwCis6MTBCMDkwMDBGN0Y5QzlDRTVDMDlDNkFERjUzMzY5MUQ5MjFGRUNGQTBDCis6MTBCMEEwMDA3NUE3NTM5Q0Y4RkEzMjIzNkVBMTVDODNCODQ5NkQzREI1Cis6MTBCMEIwMDA3Q0I3RUEwMzA5RDIwRTNGQzEyQUE1NUZDNUY1QjY4QTVGCis6MTBCMEMwMDBFOTBGRTdGQkVCNjJCMkYxNDY4RURGREY2NDNGRkRBMEU0Cis6MTBCMEQwMDAxOUUxMUFDNDgzOEY5RkE3RDU1OUQ5MzFDRjIzM0Q1Mjg3Cis6MTBCMEUwMDAyMzhGQ0IxOUM1MTcwRkIzN0ZCRjJFQTZEMjM4Q0JENjZGCis6MTBCMEYwMDA0RDI5RTZGRTIxQjdEQzdDNTdFOEE5OUYzQ0ZDMkQ5NTQ1Cis6MTBCMTAwMDBFRUEzRkFFRUFCMTcyMDFFNTYzQzJFODNDNkM2N0RGNzgzCis6MTBCMTEwMDBFMTA4NjQ0ODdGQTU1NUQ0NUY1NzZEOTc3M0VBNzdDQ0YzCis6MTBCMTIwMDA3NEEyQkM5NEFEREM3Rjc5RDVCNjQwN0EzMTZCN0ZENTAzCis6MTBCMTMwMDBBM0FGOUYwNTBDQkU3NzVCRkJGNzRDQzQ3NUYwNURFRUNCCis6MTBCMTQwMDA1NzA0QUJFRkFDOEJEOEZCQUIxNEY4QkZCOUVDQTlDRjZECis6MTBCMTUwMDA0N0I5QkQ3REY4NDc0NTREQjhCRUE1MkQzQkJGNDhGRDVECis6MTBCMTYwMDBGNjVFRUEwRjM4RTI3MzRCQTJGQzdDMkNBQkM3RkRBMDY1Cis6MTBCMTcwMDBERjkxRDI1MzcyQzRFRjZDQkZGQkUxRUY0ODFDQkUxREUwCis6MTBCMTgwMDBGRTc0MTBFMURCNzJCRjlBNjQ3MEFDREFGMjFFQzk5M0YwCis6MTBCMTkwMDAwNTVCQkYxNzQ1M0NBQ0RBRTE4RUQzQUREOEZBNjEwNzQ5Cis6MTBCMUEwMDBFNkExQUM5MEExN0YzMUYyQjM3QzhDQ0E0NzREQUQ1Rjc0Cis6MTBCMUIwMDAyNkI5Q0ZDRjU3QUYyNDkyQjA3QTNGRjhFREEyREZCMEQ3Cis6MTBCMUMwMDBFRjZGQzc2NDA4MzJEMUZCRjZCRTgzRUFFMzU4NEU4NkMwCis6MTBCMUQwMDA1M0I4QzM1REI1QzMyREY3NTY2RDc5OURGMjIyNzQxRjI4Cis6MTBCMUUwMDBGNDU3OUM4REY5MDE2RUJFRjZENjY3RUI0NzQ1RkI2OUI3Cis6MTBCMUYwMDA1NUVGQkFGN0QwQUU1Q0I1RkQ5RDVGQTNGQzU4RTU5MTY1Cis6MTBCMjAwMDA5RjZGRTM3RkNBODdGQUE5REJBMjlFRkI2OUI2MTQ5NkZCCis6MTBCMjEwMDAzRkIxRTI3QjQ3RUZCNUQ4Qjg4N0I3RkRFRTVFQ0NCMzYwCis6MTBCMjIwMDBCRkZBQTNGN0VGRkQ2N0I0MTc5RTBBRUEyOEZGNTc3RDIwCis6MTBCMjMwMDBGNzg1MjgzOEY4RjExRUIxRkVERTlEMDQ1NjM5QUJGN0NDCis6MTBCMjQwMDBFRTdGMDZEMjc4QTBGNUREMjc3RjNCMTlDRkM5QkRGQjg1Cis6MTBCMjUwMDBDODFGQzcxOUFDRkVGNTRGOUU0N0Y3RjI1RkZGQzMwNTQ1Cis6MTBCMjYwMDBFMzg3QjNBQjkwNUZEMzAxMjc1QzY5QTJBQkIxNDNFMjQ0Cis6MTBCMjcwMDBDNkNCMTNFMkU5QTFDN0UxNDcwNjU0QjQ3N0ZGMjA0MUVBCis6MTBCMjgwMDAzRkVBQjk5NUJEMUZBQUI4M0ZEOTYzNDIzRkUyNjdGN0NECis6MTBCMjkwMDBGNkQ3Rjc3Qzk1OTVERjYxRjQwOUU0QTAwRjlCRkY0NDk2Cis6MTBCMkEwMDAxRkU5NkYyNjI2RDk3M0U1RjZENzE3MjFCQ0FCQTA5RkZGCis6MTBCMkIwMDBGNEU5MTA3QTNFQ0ZFODM5MzM0QjRGRUZGN0EzNzA0Q0U3Cis6MTBCMkMwMDBDNTdEQzFBQTg3MTlGRENFNDIzQTMyRkE5RDM1OTQ3RURBCis6MTBCMkQwMDBFRkUwN0ZFNjBFQTVERkUzNTFGN0JEMDk0N0UxRUFGQkFBCis6MTBCMkUwMDBDQTcxNjNCQTdENkNDRTNDODg2QzlDNjFGODdCNTA2Q0YzCis6MTBCMkYwMDA3OTMwMTI3RUFGOTAzODVDNUQ1MUYzQTcyOEVGMEY2RjY1Cis6MTBCMzAwMDAyQjFBQTRFRjYyQTRFRkY3OEU0RTQ2RTNFRDREN0ZGRkJDCis6MTBCMzEwMDAxNzExMEZGRDRGMDY3NEZDRkQxMjU3M0RGOTIyQURCMzE2Cis6MTBCMzIwMDA3NzdGRjg5QzZBNTA1QzA3QTJEMjZDNTY4NkMxOUZGRDVECis6MTBCMzMwMDBDMENBMkJCOTBGMUNBRTc5RTBGRjJGRkEzNTZCN0YwRDE5Cis6MTBCMzQwMDBFQjAyRjc5OThDNkU1NERFQzNENjFERDEyMTdENjFBMzJCCis6MTBCMzUwMDA4MTdBMzM1RDQ2RjM1RTk5RTZFQjYxNjU3QUU3QzU3OEZECis6MTBCMzYwMDAxRjg1MTdFRkZFNjJGQjNFRDAyQzNERjFCRTgzOTVEQkJGCis6MTBCMzcwMDA1RjVEODQ3Qzk3OEY5RUY2RkM3NTlDRkYxQ0Y2RkQwMTNCCis6MTBCMzgwMDBGNzdBRjVENjVGQzlENjI3RTkyOTJGN0REMzNCN0Y4MTkwCis6MTBCMzkwMDBDRjc3RUYwRjI4NzgzRUUzNUQ3MUFGQUU5N0VFNTlGQ0EzCis6MTBCM0EwMDA4QjczRjNBMzhDNDMxREY3RjBDNzYwMUM0QUUwMjkzRjYxCis6MTBCM0IwMDA3RkYwNzUzRUQyRkM0NjhCQkY3N0EyODY4QjhGNkMzQ0FDCis6MTBCM0MwMDAxRTNFOTY1QkZFNEYyQ0U2NzI2MzI1RjQzNEEyRTlFQzM4Cis6MTBCM0QwMDBCNTU3MTQ0ODVBMTMyQkIzRjAxRTQ2RkI4MkMxN0JGOEI1Cis6MTBCM0UwMDBCQjMyRjk4NTNBN0E3NzkzMUNGN0NBOEI5NTkwRkJGN0I1Cis6MTBCM0YwMDA2RkQ1MTY3MzdCNzFFNThFOUQ2N0ExNUMzQkJDRUI0N0Y3Cis6MTBCNDAwMDBDNDlGMkIxRjdFNTVDNTdEQzc5RTJEM0Y1MEZCNkFCMzQxCis6MTBCNDEwMDBFQjAxRjU0M0RBODFFRkMzREZERjc5MTY5NzA3QjlGRDVBCis6MTBCNDIwMDA1RTczQzU3QzU2M0RFMUVFN0ZENUMzRUZCOUZBNUY2MTJGCis6MTBCNDMwMDBGNTkyQkQzMEQyMzg2RjJCRTZBNTM4REZCN0Y3RjlFOUMyCis6MTBCNDQwMDAxRUMyQjc3QkU1QzY1Qzc2RjBFNDYyQkZDQjBFRUU3ODM5Cis6MTBCNDUwMDA2RUQxNkZGMDNDRUNDQ0ZEMjFCQTdGNzE3QkFCMzlGRTM1Cis6MTBCNDYwMDAxNkI0REZGNkZCNDU3Q0QxRkMxRERBQTVEQjlGMEI5MTAyCis6MTBCNDcwMDA5RjY3RkJGRUNGNTAzRTkwRERERjYzMUU3Q0NFNzlERTAyCis6MTBCNDgwMDA1QTEwNjFGRENERTk0QkNDOTQ4REExNzJBM0VFMDBEQjg3Cis6MTBCNDkwMDBFRjM5RjhFMEZBRTcxQUM3QTNEQ0M3RkRCMTgxQkY1RjU3Cis6MTBCNEEwMDA0RTg5RDMzOTJDMzlCQTg4RjJDQzY1RERBNzA3NzNFQTA3Cis6MTBCNEIwMDA2RkRFOUYzRkNDRjc5MzdFQzY5OENFRkJEQ0NGM0RGNjg4Cis6MTBCNEMwMDAxRkI0N0ZFRjg4RkI3MkUyRTEzRTgxN0ZGQkY3M0ZEOTNCCis6MTBCNEQwMDBFRkQ3NEI5QzZGQUM2Nzc5M0MyNERGRkFEQUQ4MUM4QjMyCis6MTBCNEUwMDA1NzMzNTRERURBNUMxN0M3QjhDRkI1QzVGQ0JFOUVCMTgyCis6MTBCNEYwMDA2RjE4MTI5RTJEOTlEQjY3NENDN0Y5MTc0MzJGRTA3OTFGCis6MTBCNTAwMDBGRkRCOUJGNUI4MzMzRTU0NzZEODZDQzE3QTY3QkYwOTMwCis6MTBCNTEwMDA3MUFDODdFM0UyN0U2REI0RTM1QUM1RkNEQ0YzOTA3MTU1Cis6MTBCNTIwMDA2QjdCMDkyRjg1OENBQjlEQzBCOEI3OUU4MjcxQzMyN0ZBCis6MTBCNTMwMDA4MDY3ODBDRDA1OERFQkNEQjNGMjhFQUY0RUUzNzk2MzlFCis6MTBCNTQwMDBERUYxOTJCNjNFMTBGMTA1NUE3QUMzRjhEQkZDQTI5RkY5Cis6MTBCNTUwMDBBNUM1ODZFQkY3OTU4MTkyQTE3QkFCQjM3OTE3NjlBOTU1Cis6MTBCNTYwMDA3MzI2QzZFRjA2Q0YxQjI3MzRDNzc5NjNGNjlEQ0UxQjIzCis6MTBCNTcwMDBCNzk5M0MwRjk2QjVBMzc1RDAyNUZDMTMxOENGNUNFNkEwCis6MTBCNTgwMDA4MEY3MDUyMTlGMDIxNUE5MThEQTVGOUQ3OUUyMTFBRkI2Cis6MTBCNTkwMDAwODNFRUY4QzM0NjgzODk5OURGQUY0RTJCRTYxRjQ4Njc3Cis6MTBCNUEwMDBCMkU2OUIzMzlDRTc5MjE1M0QyM0I5RTJDOEU2RUI3NDAzCis6MTBCNUIwMDA3RjU2QkVGNkRFRjhBMjBEN0ZFN0NFN0Y4MkFBQTk5ODVECis6MTBCNUMwMDAzNzlCODBENjFDNzA2RTE3RUIwN0VCNTU2MkJENTgxMjg3Cis6MTBCNUQwMDA1QTFDRjVENDE4OUZBNzVERUUxNDdFQTE1NzZFN0RBNTY5Cis6MTBCNUUwMDA5M0UyRjY3OUYwQjQ0M0QwRjMwNTc0Q0M5N0QxRjY0RERECis6MTBCNUYwMDBDM0Y4NkY1N0M0NDc3MkIyMkI5OEZCMUVGQkZGMkNGNkEzCis6MTBCNjAwMDBCOUU0QTQ4QUU3MUZDOTBGQkI4RkY2OERDNkIxOTc0RDY5Cis6MTBCNjEwMDBCQzFGRTlENjVBOTVGQzYwOTFGQUZENTQzRTZBRkFDOEZGCis6MTBCNjIwMDBGQUNGODcxRkZCM0U4M0MxNzIxRUZGNTNCRENFRTlCQjFECis6MTBCNjMwMDBEQkRDNDZGOUIxRDc0RDU1OERFMUYyMkQ0MjZCQTZDNTQ1Cis6MTBCNjQwMDAzMTZGNDI1QjczNzYxQ0NGNkI4NzZBRjhFRjYxRDgzMDNECis6MTBCNjUwMDAwRkUyNjEwNkRGODYzQ0ZDRjEzRjU4NTIzQ0FCMDA4MEI0Cis6MTBCNjYwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRUQ3REIzCis6MTBCNjcwMDAwQjVDNTRENzlERjBCOTMzNzdFRTNDODEzQjMwQzBGMDgyCis6MTBCNjgwMDBCRTgzMTBEMTYyM0EyOEEyMzYzRTJFMEYwRDNFNjI0NjhFCis6MTBCNjkwMDBDNEE4MDlENkQxM0M0QTIyMThCNDM2QTExQjFCMkUwMkRECis6MTBCNkEwMDA4MkY4QzIyNjZCQ0RBRTRENDdBMjJENkREMzE2NTNEQTZDCis6MTBCNkIwMDAzNThGRjYxQjRDNzRFRDYzNUI2MjZDRTJGNkQzMDYxM0I4Cis6MTBCNkMwMDAzN0FCNTlEMzY1QjdDREQ2RUQ5NzM2REZGOUZGQ0ZCRDkwCis6MTBCNkQwMDBDQ0JEQzMwQzY4REFGNEI3RkI3RDRCN0VDOUM5QjlFN0IyCis6MTBCNkUwMDBGNTNGRkZGMzdGOUZDNzdDNEFFNDA4OTk0OUM4RUUyREQ4Cis6MTBCNkYwMDA4NDBDMTUxMzQyRjhCMDhEQjgwOEQ5NTc2MkIyNDMzQTlBCis6MTBCNzAwMDAyODRGNEYxQUE2RTk4N0YwQjc2MDZDNkE2REZFREIxOTA3Cis6MTBCNzEwMDA1NTMzMjJGOUNFQkM0NDJFNDhGQkQ5OTlGNzM4MTlBNkU3Cis6MTBCNzIwMDBBOUY1ODMxNjEyQTBFREFEM0M5MUZCNjlFQTk2Qzk2MEJDCis6MTBCNzMwMDA5Mjg3RTZFNTVCN0M1NjFGNEQ1RDI0QzM1NDRBREI5NTNBCis6MTBCNzQwMDBERkMyRURGMDhERUQ3RjMwRTcxMUVGNUJCNDVEQkE0Q0Y5Cis6MTBCNzUwMDAzMjIwRUQyQzE3MzI0QzNBNzg3QUJFRDA0NDAyNzQ5Q0Q5Cis6MTBCNzYwMDA4RTcyNjEyREMwNjkwRDdGOUU0ODA5OTFGMjI3NDUxM0E1Cis6MTBCNzcwMDAyMUE5RjQ3QjVEOEYyQ0MzRkMwOEM5MDgyNEMwM0M0OTc3Cis6MTBCNzgwMDA0NjhEQUU1RTBGNDdENkY0MTc4RjFERkYxMEUwODdCNkNCCis6MTBCNzkwMDBERkFEOTZFRjlCRjNDRUExN0IyOUZDQTIyQzk1OTg2OTk3Cis6MTBCN0EwMDAzN0ZCMDZBRjkyRkM2OTM0MUZCRTJBNzMzMDJGMEY5OTA2Cis6MTBCN0IwMDA2RTI3NjNGQjgxN0EzRTVBMkZEMTFCMjQxQjAwQ0VFQ0VGCis6MTBCN0MwMDA2MTEyQTRFMzI3MTYwRDEzOThCRjQzMjI5MjQ5QzI3RTRCCis6MTBCN0QwMDAxMEZFQTREOTIzNDRBMUY1OTJFNjBFN0I5NTY5QkE3RUFBCis6MTBCN0UwMDBGRTYwOEUwOUE3MTlFNjQ5RDdEMUQxNUNFQTJGNDgyMTFFCis6MTBCN0YwMDBDNEQ2M0NERjVGNDBENzI1ODExRjIyMjJFRDI3NDE2MjVFCis6MTBCODAwMDBGODhGNkVGN0NGNDkwQzNGMUE1RTdBQ0E2RjQ5MEFDNkE1Cis6MTBCODEwMDBFODdGNzQ3RDVCQ0VBNEYxMTY1REJFQkM2NzBERTBERkYyCis6MTBCODIwMDBFMjA5MkEzMEZGQzREOTBDMkY1QTc5QTIzNDRDNjQzQTY5Cis6MTBCODMwMDA2RTIyNjFGMzI0QTU0NDNFNDY5Mzg0NTI4NUMwMzg3NDM5Cis6MTBCODQwMDA0ODU5M0Y5RjA3NTQ3QTdDNDA5RDBGRkNDOTY5NTg4RjI3Cis6MTBCODUwMDAxMEZBMjk0MTVFNzRENTdDMkJFNDc5RjI1NjExMkJGRjQ2Cis6MTBCODYwMDBEMDQ3NzA0MURGQjJBOTc5RjNEODdDQkNGOTRDOTRFRTkzCis6MTBCODcwMDA2QTIxRTQyREREN0M2REQ5NzRGRTVBQkZGNERGMUUwQjA2Cis6MTBCODgwMDBDOTAwRkM3RTU0QkMwOURFNjFBNDA3RURGQjM2NzVGRUUxCis6MTBCODkwMDAxNkNGMzBFMjY3MENGRThBMTlGRTlDQzUwQzdGQ0UyOEJECis6MTBCOEEwMDBGQ0VENTVEQkVGRkQyRjg2QkY1MTNDNzFBNjM1NDA4NzdGCis6MTBCOEIwMDBEMTc4RDRFQTU3OENDMkFEMjA1REQyNzY4NDdDMEFGMjZFCis6MTBCOEMwMDA4MTZBRTBERjFFM0JDQjFGMTJFRkFDMDZGRTAwQkU5QTgyCis6MTBCOEQwMDA4MDVGMDhDOUE0NEQ3QUI4MkUyOENGMTU0NUVDREY3QUQxCis6MTBCOEUwMDAxRjk1MDdGQTdDNTA5MzBGNkM1Qzk3Q0Y1RjREMjgzREY2Cis6MTBCOEYwMDAxMzlGODkxQ0EzMjhFRDlBQUI3ODYxQkRCQTkxNTMyMjlFCis6MTBCOTAwMDBGREZGQTMzODA5RUI3NzRBODI4OUZCMjQ0RENGMkM0Q0VECis6MTBCOTEwMDAwN0I5RDk2NkVCQjFDMTdDQkIyQzNERDg0RjVCOEU0OUQyCis6MTBCOTIwMDBFQzhEMjFERjRFQUJGMzM1MzczQjY3MUM5RDExMUY4RjJDCis6MTBCOTMwMDA2NjgxMDQ2M0YxRkREQkFBN0M2QjFCN0NFQThDOTlEMkU3Cis6MTBCOTQwMDAwNzJGMDk5MjlEQzIwQjRDRkZCNkI2QkVGOUI0M0RFOTc0Cis6MTBCOTUwMDAxRkYyRjk2MDlDNDQxQ0M3QTVDMkU1MkEzNDkxNTZERjRBCis6MTBCOTYwMDBDNDcwMUU1N0U5OEE2RkI2OEYwQjI3MEY3MEM2OTAzM0NECis6MTBCOTcwMDAxQTlDRUQwMEE3MjczRTlDQ0U5QzBBQTQ1M0JFRDk4NUY1Cis6MTBCOTgwMDBFMzBDOEExMjVCMEY0QjkzNkQyMzlEOUZBQjM1NDk2QTg1Cis6MTBCOTkwMDBBNUU5MkVCRUE5QUIwRUQyMjEwQjUxNjgxNTBCOTFDRjk0Cis6MTBCOUEwMDA1NDUwQjhGOTY5RDMwOUExRkQ3NDVDOUE2NTlCMDRCNDNECis6MTBCOUIwMDBERkRDNDMwMjNBMzkxRjc0MDQyRjg5QjQzRjVFMEM5MkQ2Cis6MTBCOUMwMDAyMDg1OTM3NzI5MzI4MEYxQUM0QTA3REFCQTkxQTI2NEQ0Cis6MTBCOUQwMDA0MkU2RDBGMTgyRkMwQzkwQTdDRUEwODBBOUQ2OEY0NjdCCis6MTBCOUUwMDAyNzRFOEI0Q0M0NjJFOEM3MjQ4NzQwREY0MTY3NzMyMjJGCis6MTBCOUYwMDBGNUU2QkIxOURFREFFNjg2MDM1NEY2OTFFRTEyOUVFQzBDCis6MTBCQTAwMDBBMDlGREE4QjI4QkQyNEQxQkM0NUVFQUFBM0Y4RTg3RTFFCis6MTBCQTEwMDBENTQyN0E3NTdDQTA4RDlCRUI2NkZBQzc0RTZBOTNDMkJECis6MTBCQTIwMDBEMEI3RjlCMDM3Mzg4RTNFQjYwM0RFNjhCQkU2MEJCRTQyCis6MTBCQTMwMDBFRkJDQTJFMTE1RkUxNTEzM0NFRjM4OTE3NjMzODA5RkUxCis6MTBCQTQwMDBERjI3QzVBQjREQTZGOEZERkNBRTQ1RkFDRTJCM0E3OTAzCis6MTBCQTUwMDBENTRDOThGRTIwNDQ0QTVGMzEyRDdFQkJERDJENjQ0NkQ3Cis6MTBCQTYwMDA0MTYxMjRCRjg3MEYyMTNFQkI1REJENURGOTc0OUU4QTk1Cis6MTBCQTcwMDBERkU0MkZBNEVCNDVCMjRCMEQ3ODhBNEUwOTY5NjU3MjVECis6MTBCQTgwMDA3MENDQkFBRTk2QzJCNDdENzc5MTg5QjcwMkJEMTY5MERDCis6MTBCQTkwMDA5MDE5RjA5MkVENDFCRUQ0RDYzNUU4NjA3NDYzRjEzMDcwCis6MTBCQUEwMDAzOTY5NzZDOTk4REEwMDhGMjBFRkNDN0JCQ0UzQzk2QjhCCis6MTBCQUIwMDAxQkYwNDkwQzNDMTZCOTI5MUUzRkYxREYwRjhGMUUzN0QyCis6MTBCQUMwMDBDMUQ0OTk1MDkzMDRGODIzMkZFRjIyRDIzNDAwQzNDODc1Cis6MTBCQUQwMDA3RjVBM0I4RERFQTNFNzVGRkRERjdDRkUxQTlEQzRBRjdFCis6MTBCQUUwMDBBRjY4RjYxMDNGNDhBQjY2MDU0OUE4OUJDMzdDQzA5NjdCCis6MTBCQUYwMDA4NjREMjlFODU0QTVEOEMyQURBMDlBNzJFQUZBMzM0RTExCis6MTBCQjAwMDAxMUQwQ0ZFREUyM0IzNjE0NURGRTBGNTNDNkVCOUYyN0ZECis6MTBCQjEwMDBFRjY4RjgzNDQ3QzZEM0UzQzcwNDdBRTc4QzI1NzQ4QzAyCis6MTBCQjIwMDA4QkUwMjk0MUZDQjQ3NzkwREMwODlFOUE2QzIwOEYzQTE4Cis6MTBCQjMwMDA1RDVCQ0ZGODRBMjM3OEVBQ0M3RTRFRENBMEEzRjcyQkRFCis6MTBCQjQwMDA2Mjg1RTJBNkY4RDgwOTc2NkQwQzc5NzJBRkJCQTIxREFBCis6MTBCQjUwMDBDQTA1NTM2Qzc5N0U0ODk1NkI1NDgwRjMwQkU5MzgwQjFBCis6MTBCQjYwMDA0NjhDNzg5QUE3RTI2OTdFRkEzQjhGQzEzNEE5OTRFNEE3Cis6MTBCQjcwMDAwOTE1QzgxNTAxN0YxNUUwQUQ2QTREMDBDODgyMDg1OTQ2Cis6MTBCQjgwMDAxRjdDMjI4OEY0NTAyNTAyNUUzODY1QjJFOTQzRTc4REI4Cis6MTBCQjkwMDBFMzJGMUVCRTVDMUMwOUM0ODJGQjE5QjFFNjg4MUJGNEFFCis6MTBCQkEwMDA0OTMxQzU5QkNFRkVBMDg0MjFBMjdDRDRENkM1RTU5OTlGCis6MTBCQkIwMDA4MEFFRDhCQUJEN0MzMUREQTREMEFBOUQ1RTUzMDhGQzBFCis6MTBCQkMwMDAxOTBCNjlFQTAyQkM5MzczNjYwMjc2NUE1QTM4MDNDQkEyCis6MTBCQkQwMDBBRERFRkMxMEU4QkJCNEIwOURDOEU4Mjc4ODIxM0JBREMyCis6MTBCQkUwMDA3RjcwRUQ1RDdFRDQ0M0Q3NkYyMzYxNEEzNzI4Q0I0MDA5Cis6MTBCQkYwMDA4RTY1Q0I2MUIwQTc3OTUxMkEzNzRCMzBDRUEzMzZGMDkyCis6MTBCQzAwMDA2RjNBQkQzNTQ5ODREOURCMjQ5NjFFRDhFMjBFRkUwMDdBCis6MTBCQzEwMDBENjhEQkYzRTFGRkIzM0Q5OThEQ0JCRDFGOTdDNjk2NTVCCis6MTBCQzIwMDAyMjAxM0JDMDdFODEwQjgxMkUzQkIwNzI3RUQ3NzAyOUYyCis6MTBCQzMwMDBDOENEODQxRTJCNEREQjc4MjUwQzdBNENCOTYwOTcwMDVCCis6MTBCQzQwMDBERjVCMEI5NURCNEQzNDJERkY5NUJEODhBN0RGQkIzODNGCis6MTBCQzUwMDA4NzFGRjBEMDU1NDg5NzlDRjZGM0JCQTc5QzIxNDJGMzcxCis6MTBCQzYwMDAzQjU3MkUxRjQ5ODI3RThFOUEyNTI4N0ZGMkMzQTY0RjBFCis6MTBCQzcwMDA4MjNENjVGQjYwM0ZGQTg3MzZENTNGMjQ3Q0QzMkM1ODQ0Cis6MTBCQzgwMDAzRkZCNDc5NDEzQkJGOTFFQTRGRjVEMDVEMzZEN0FGOTAyCis6MTBCQzkwMDA5RUVBMDgwRTAzNUVCNEJDREQ0QkU1REIwQ0E0QTdCNzNGCis6MTBCQ0EwMDA4NjI5M0Q5OTE0OEU3QzQ4RTlEM0U2REFFNjNEMjVDMTI0Cis6MTBCQ0IwMDA3Q0U5Nzc4RDNFN0M5MTdBMTFCRTM1RTYzRDE0RDc2MEU0Cis6MTBCQ0MwMDA2NzEyNzI2NDMxRDg5MTlEMjA2RkQwNkUyNTBBMDdFQjAwCis6MTBCQ0QwMDA5NkMxQ0FERjNGQjA2MjMxRDhBMTlENzZBRDdDRTU2MkU2Cis6MTBCQ0UwMDA1OTlGNTdGRTcwMDZGM0FBRERFQjRGRjZFQzgyRkE5RUUxCis6MTBCQ0YwMDAyQ0QyQzRGMDEzMjBBQjc0RjY0QzQxMzI4RkVCRDZFNzU0Cis6MTBCRDAwMDA5NjdGRUZENkQ5Q0QxQTVENzYxNTMwQkE3Q0Y5NjI2Nzg5Cis6MTBCRDEwMDAzNUM4Q0Q0RTRBOTc1NjA5RTg3MDk3QzE0RkQ2NTI4RDE3Cis6MTBCRDIwMDAwRTNCMEIxODlEQzVDM0JCRTU3QTA5MDlFQkVDNDA4QkI0Cis6MTBCRDMwMDBBNzA3RTlEMUU2MDlBMDFEMUQ1RDdGNDUwQUIzNjMzNDVECis6MTBCRDQwMDBGQUI3NzkwOUYyODM0RDBBM0U3NTNGRjI4N0NCMEZFQ0MzCis6MTBCRDUwMDA2NzJENjgyMjFDQTUxMzhCQzhGQ0UxODlFNjExMEYzRUY0Cis6MTBCRDYwMDA4REZFM0IwQkYyMTVBMEQ3Rjc0NUUyMjdFM0Q0Qjc1Qzc1Cis6MTBCRDcwMDAyRkM1Rjk2QzcxQ0I5MzkyNzU3OEY0RTQ1MUJDQzc5OEQ4Cis6MTBCRDgwMDBDRjU3OTJEOTdDM0EwMjc1ODFGQjY5QkY3MkJEQTQyMDVFCis6MTBCRDkwMDBERjc4ODlCRjFCRjQxMjI1N0ZCMDNCQTlCREY5QzlFNDQ4Cis6MTBCREEwMDA1NDNEOUU5ODNEQTJGNUFGNzA0RDgzMTZFMDczMEY2RDI0Cis6MTBCREIwMDA0N0JGQjY5Mzk3MTQ1ODdBOEIyNzY0RTBFRjJGQTYwNEY5Cis6MTBCREMwMDA2N0VCRkJFMTQ1RTYxRjJFMzRCQjRDRTQyM0UwNjczRjA1Cis6MTBCREQwMDBGNUNCQzI5M0E5OUZEODIyNjJCQUE3QzU4QjY5NTc4QkFFCis6MTBCREUwMDA4NDY5Nzc4QjRDQzI1NkVBRkU5MEVCRTdFRjA1M0JEQkFDCis6MTBCREYwMDBFNTQwRjgyNkEyOEI4RTE2M0ZCNjZGNkY5OUNERkFFMTFCCis6MTBCRTAwMDAzNDNBOUZCQTBCRThDMjYxRDJGOEM0QkYwQkU4M0NDOTEwCis6MTBCRTEwMDBBQzk1OTc2MUJFODc2M0U1OEYyNDJGNThBQzE0RTM3QzAzCis6MTBCRTIwMDA1MEVFNzU0RDMwQUUzOTU0ODZFQjc3RjNGREFCRjI1QkQ3Cis6MTBCRTMwMDBDNURGRkU3OThGNTRFNzAzRkRCRDYxMjZGQTM4QzYxOEM5Cis6MTBCRTQwMDA3QTA5QjNGMTZFQjRGRkFFNkMxM0NBRDNGREYzNzY5RURDCis6MTBCRTUwMDBGMUQxQkNFNTc1REFGRjc4RjREOEMzRkE4RkRCOUYwNjIxCis6MTBCRTYwMDBFRkUwMkU4NEQ3NEFEN0RCNEVGQkIzOEE0Q0RFQzdFMzI0Cis6MTBCRTcwMDA4N0U4RjlEMjk0MjA3Rjc4MDhDQUU5RkQ4MzZCQzlDQkEzCis6MTBCRTgwMDBDMDlGNzQ1OEJCMDg3QzFBOTAyMURFMjVCNDUzMUNGQjVDCis6MTBCRTkwMDA0MURGMDZDMkNGODBCRUI1NzFFNDE4Q0QwQjJBREY1MDVBCis6MTBCRUEwMDBCNUFGQkM0Q0ZCMTE2NDFCRTlBNkVEMDZFN0RENDVBMDcwCis6MTBCRUIwMDA1REU3MkIzNjBBMTNBNUQzOTQ3Q0I0MTdFQzg1QjVBNEEzCis6MTBCRUMwMDA4REQ2REI1OTZEMjc2NkZBM0Q2OUZFMUEwMkZERURGQzQxCis6MTBCRUQwMDA5OTFERkJGNzlEOTk4MkZDQkE0QjY0N0MzNEExMUNGMjNFCis6MTBCRUUwMDA5QTQ4NThBRkM3NkQ4RTQ4M0UxRkU0RTU3RDI0MzAwRDVCCis6MTBCRUYwMDBGOUZBNjkzRDVGNTMzREQ5MEJGQzI0OTAyQTg1NzBBMDY3Cis6MTBCRjAwMDA4NzFGRjAzMzNCNDQ1MUU1NjlFMDU4MzJEQTgxMDE2QzE4Cis6MTBCRjEwMDAxRkIxMEI5Qjg4MDhGQzdBQ0UxQ0VBMDZCRkM0REM4MEVDCis6MTBCRjIwMDA0NkRGMjJGMzYxREIzMEYyQjVCQzNDQTM4QzEwMTcwMzczCis6MTBCRjMwMDA4MUVDRjI4NzQ5MkVFMDI1QzM0QzZEMzEyMDRCODE4NDgyCis6MTBCRjQwMDBBOURFRThBMUZGMDA3Q0ZDODVBQjE3QzhBRDg0QTRBRkQ3Cis6MTBCRjUwMDAxMTBDRjNFMDJGMzgyRjk5NkUwNUY4NTg3RDREMEZGMTM1Cis6MTBCRjYwMDAxNzFBMUJBMTNFNEY3NEY1RDE5RkE5NEIxQUNGMkY4Q0U2Cis6MTBCRjcwMDBCNkUzMDc5MzU1N0ZEMDQ5NzI0MEVGQjVCNzlDMjA2RjY5Cis6MTBCRjgwMDA1QjIyRkRGMDUxNzEyNTJERDVFQ0Y5ODc1MzU4REM2MjA5Cis6MTBCRjkwMDA5NDlFMjQ0NkRGMkY1MDNGMURFOEIxRTMxNzY2RDIxQjY1Cis6MTBCRkEwMDA4M0JFQUYyN0ZCMENGNjZFNDZEMDE0OTkxRkZERjc5NUE0Cis6MTBCRkIwMDA4QkQ2OEE4MzA2RkExQzdGRkRCM0VBOERFRDczOUExQzNCCis6MTBCRkMwMDAwNjNDRTYzNTI3MUJGMjNFMjVEMzUwN0Y1MjU3QkVBMUQzCis6MTBCRkQwMDBCQ0IwNjdBQUExN0NGMkExRTk4NkZDOTREMEE3MENGNUJECis6MTBCRkUwMDAzRkQxNTc2MUM4NEZFQjVGNjJBOEZGQzkxMzM1ODY3QzBDCis6MTBCRkYwMDA0OUY4NkU0M0ZEMTk2NzM2MUFDQTY3MEUzRDY0Mjg5RkRCCis6MTBDMDAwMDA3NTdFQUIyMTNGNjdGOEFGMENGNUJENDFGMUU0MDlFMDY3Cis6MTBDMDEwMDA0RjRBOEY2NjhBQUY1RDE5Q0EyMUQwOUZDMzZERDQ4RUY3Cis6MTBDMDIwMDA5QkNGRUM2M0QwQjcyNDlCQThGNjMxNTU0QzY5NDA1N0ExCis6MTBDMDMwMDBFQ0FGMURGNDAwQzhGOTNEOEY4NUJGODA3QUQyRTQwN0NDCis6MTBDMDQwMDBGRUU1MEIxNkM5MUJBMTVEQkI2ODIyNUU5RDFDOTExNjA3Cis6MTBDMDUwMDAxMUY4NUVCMUM3OERERkU1RDI1NkU0MEY4MUFBMEQ3QkUyCis6MTBDMDYwMDAyMkU4NkRFMzdBMTBGMzc2RDIwRkYwQkRDMUUwRTM0NTJDCis6MTBDMDcwMDAyNUE2N0MxMkIyOERGNDZGMjVGNzI0MDVDNkIxRkIyQ0UyCis6MTBDMDgwMDA5MkIxRkVDREQyQkYyRjQ1QTVGRjFDNEFGRkU2ODlEQjRBCis6MTBDMDkwMDA2Qjc0RkY5MDQ5OUU5Q0MyRkNDM0FBNzMxRTgzREY4MzBFCis6MTBDMEEwMDA3ODFERjU3QjZDQTQxREQ4QTlCQzZFMjRFQjE0QUJBRTM3Cis6MTBDMEIwMDBGQTM3NTZEMzg3OUZCODcxRkYyNjlBQkY2ODRBNzE0RUU4Cis6MTBDMEMwMDBEN0M5Q0JFNEI1NjZERjhGRDU4NzMzMENGNjU5NzREQTYwCis6MTBDMEQwMDA5NkY4MTBDQTNCMkExN0NCNTMwQzcyMzE1MDA1RjMxMzU0Cis6MTBDMEUwMDA3ODE5RTVBMkY2RERENzM3MTVFNTcyOTdDOEVDOTQ0RUJFCis6MTBDMEYwMDA4OUYyRTUzOEY4OEE5NkNCNUY0RTk2OThCRjE4NDczRThFCis6MTBDMTAwMDAwQjU0Q0U4MkMyRERCOUYyRDM1RDgwMzc3OTFCNDFCREJECis6MTBDMTEwMDA0NDc1MTBDQUQ5RThGRUE5NUQ3NTM3QzJFOTY1RjRBNDczCis6MTBDMTIwMDBGOTQzOUFCRjY1QTNGMjAzRkMyQjlCNDQxMDVGNTY4QTI4Cis6MTBDMTMwMDAyRjI3REE0NzhGQTI3RDQ5RTcyMTgxN0Q2NEY1NTBGQkU3Cis6MTBDMTQwMDAxM0Y0M0RCNTNGOTlCREY5RTdCNTJGRjM2MURFN0FGQkY2Cis6MTBDMTUwMDA0RkQ1OTcyMTg3REM5NDkyMUFCRkZGMTdFM0VDNDc5REQ4Cis6MTBDMTYwMDA0OUQ2RkNFRUZGOUVGNDI3QTcxOEYxQTFEMUExNDY2NzlFCis6MTBDMTcwMDA1NjIwM0EzQURFRkIxMjVCNzdEQTIyOTFEM0Y2MkYyNDZGCis6MTBDMTgwMDBGODRGMTBFOUU1RDRFQ0IzNEEyNUFDNUJEMDI1NUJBOUE4Cis6MTBDMTkwMDA1RUREMzdCQjA2REIwOTkzNzgwMjcyMjY2MTc4QzMzMjE1Cis6MTBDMUEwMDBEMDkzQTQ5NEM5MDk4NUZFMDNGNEU2MjgzNkNBMEQ1QjMyCis6MTBDMUIwMDA5NDFFMTU0MDFGMjc4RUQ1QkI5QTdDRDBGQ0YzODlFNEQyCis6MTBDMUMwMDBDQkI3NTJENDM4RDkyQzMyNEIyRjVGRTJGOUUxOUE3Q0FECis6MTBDMUQwMDBEMUYwQjBFMDgzMTYxMUVEOEUwRjY4Qjk2NjRGRDA3RUI2Cis6MTBDMUUwMDAyQzM5N0MwMEUyQ0M4MjlGQzg0NzYyRjBERkNCQUE1RThDCis6MTBDMUYwMDBFRTNCNjk5NzgxMkU1RDZCMDRGNEIzMzJGREUxNzJDOEFBCis6MTBDMjAwMDA2NzM2MTEzRkUwNjdGNjcwOTgwNDY5RkYzRkY0QjBGNUI4Cis6MTBDMjEwMDBDOEY0ODczOEIwQ0YzMzJGODczODgwRjNBMDg1QzU4NTIxCis6MTBDMjIwMDAzMkI3ODUzODdERENFODlBRUFDN0ZERUVFMkEzN0U1ODk2Cis6MTBDMjMwMDBGNzhBM0MxN0YyRTk2NzE3MTNBNDhGMjFFRkM2OUU3MkE1Cis6MTBDMjQwMDBEODU3OTg0QkZDQzAzRjJFMEY0RjMyMjE3RkRFMUE0MjQ5Cis6MTBDMjUwMDA3OUUyMUY1MUE4QUY0MzkyRTk0NDYxNERBRkI0OTBFOTMwCis6MTBDMjYwMDBGNzUxRkZGREREMTYxQkE2RDc1QTQ0NEMyQkYzOEEwNzY2Cis6MTBDMjcwMDAxN0QwN0E1QjdEMEU4QzE3NzRFNDNCNzA5Q0NFNUMwMTBBCis6MTBDMjgwMDBDN0Y5OEY5Qzg3RjJDMDJFRjg3NThCMTdFQjc3M0RERUQwCis6MTBDMjkwMDA1NDA0RjE4NENFOTNGRjg5NzFDRDA4M0Q1M0FDNzkwMUVDCis6MTBDMkEwMDA5RTMwRUVGNzEwQkVDOTBCRkJCRTQ5RjIwQ0RDMjdFRDQ5Cis6MTBDMkIwMDBCNDA0RkY3MTAzQzQxM0Q3MEFGRTYzMzFGODM3RTlFNTBDCis6MTBDMkMwMDAxRkExOUYwQ0Y4MDEzQ0I0REIxOTVFQUNDRTI2QkYxQjRFCis6MTBDMkQwMDBFMkZEOTNDOEZBMTVCMUY4NTRDNTEzQTUzMEIzNDBFOThGCis6MTBDMkUwMDAzNzg5OTEwNjExRTY4NkRBMTI0MUFGRkE0OTNGMDU5QjdDCis6MTBDMkYwMDA1ODNBNDIxQ0VDODc5MDA3NDUwOUUyNDVEOUI2RDAyMDUwCis6MTBDMzAwMDA5NDY3RDc4QkZFMzZBQzRGNzA1RjQxNUIyNzhCOUQwNEUzCis6MTBDMzEwMDA4RUJCQTA1RTk4REI0MkJGQkZFODExRDlGQTBEODU3MEQ1Cis6MTBDMzIwMDBERkZEMzcxNzZFMUZDQzIxRjFGOTdCNEY0QkY1RDkyQTcyCis6MTBDMzMwMDA1RDNDRDY0NTYyRUYwQkZGQ0I2RDE1MTYwRkVERjc3NjIyCis6MTBDMzQwMDA4MDZEMjZBQ0Y3QUM3MUY1RTM4REY2N0JCQjg3NTNFM0NDCis6MTBDMzUwMDAxMzkzRDNDMTVFNkVFNjYzREI5OTY2OTFBRDBGQzQ3RjI0Cis6MTBDMzYwMDBDMDhGREU1QTI4QTVCQjVERkE3RTE4M0VDQzI3OUZDNzNBCis6MTBDMzcwMDBGNTcxMTZCM0Y5Qjc3REVGOERDRDhGNTEzQUY5NzdEQUI0Cis6MTBDMzgwMDAxMEUyNTVBRjVDRkMwQ0ZBOEZFRjI1NEJGQkMxRUY1MjZFCis6MTBDMzkwMDA3RTZDMjZCMENFRUY3RDdGRDY2OTU4OTQzMUYzNkUzOTJFCis6MTBDM0EwMDA5M0NDRUJFMjQ5RUY3REZCRDUzMjBCRURGRkJERTc1RUIxCis6MTBDM0IwMDAyREUzNTEwODg1MTAxRjVBNzlFMzg3QUY5NTQxRkM0QTU4Cis6MTBDM0MwMDA2OEZFNERFNjY1MEFBRjUyNDE4QTlBMjA0RjBENjhFNjM1Cis6MTBDM0QwMDA4NzZFNTkxQTFFMDc2RjA3RDMxRUQ4MDJGMUMyNTA5QkYxCis6MTBDM0UwMDA0QkU0QThCREY2MjVFNzFGMDVBMEM3NjY4MDlGQTYwRkYyCis6MTBDM0YwMDBEQjQ2NzY3Mjc0ODlCOUY0Nzc5NzU0RDFGRUI2NzI4QUE3Cis6MTBDNDAwMDBFMkUyMDA2RjhBMTVGQzBBNzJDMUVBMDdCQUQ5NUFDODdCCis6MTBDNDEwMDBGNEU1RDYwN0M1OTAwMjcyMkNEQ0M0QzhEREY2NUFFNkY2Cis6MTBDNDIwMDA2NTJBODdFRDNGMERDMTE5MDBEMkNFMDUyQTEzMjA3RTYzCis6MTBDNDMwMDAzNzhEMjBCRERGNzZBRDI5MEZGNjk1REQ0NEM4MDczQTZDCis6MTBDNDQwMDBCNDk4Q0NEOENGQzg0NTY3QTgxN0U1NkZEMzJDOTA0M0Q0Cis6MTBDNDUwMDBBRDE3MUY5RDBDRUJGNTdCNTVCRTY4NzFCNzM0NTNEM0Y4Cis6MTBDNDYwMDA4MTNBMUZDNERERkMxODc3REJDREY3NjM5QzNFREU3QzkwCis6MTBDNDcwMDA5RDVFQjZBRkMwNTcxMjM1REVGNURCRUU3MDc2ODQxRURBCis6MTBDNDgwMDAzNEZFOEE2RUI3Qjc4NUY4NjFCQzk3NUE2Qzk4QkVEMEY3Cis6MTBDNDkwMDAyMjYyN0FBMkM1OEJFOUY3NUIyNDRDMDc1QThBMzBFREY5Cis6MTBDNEEwMDA2QkYxRkIwQjJDMDBFNzZDNEMzQjJDNjQ3RDQwNDc2NzI5Cis6MTBDNEIwMDA1RkYwQjBGREM4N0I5MkNBQkYwMDc0RkUyNEVERjczMjc2Cis6MTBDNEMwMDA2REY3NDVEQUZFMzJBRDNGQUYzNjZDODZCOENDQkMxMUE1Cis6MTBDNEQwMDAyQTJGMjUyOEVGQzJFRkZCNjk3RjUwNkY2Q0I5QUQwNDlFCis6MTBDNEUwMDBDQTRCQUJGQkMzODBDN0QyNjJGQTlENDA3RjdENTg3RkE5Cis6MTBDNEYwMDA3RkNCMDkzRjJCMUZBQUI0NTBGQzk2RkU5Njk1M0JFN0Q1Cis6MTBDNTAwMDBEMjdFNjhERUE5RjY0M0M3MkY2MUY1Njc2MzdGNzQ1QzRFCis6MTBDNTEwMDBDQ0M3RThCNzg0QzE3M0EyMjQxNjNDRDFGNUE5OTU2RkE2Cis6MTBDNTIwMDAyNjU0OEY4OEYwQkZFMEVGNTkyNDBFRjc1MTM4MTIzRUExCis6MTBDNTMwMDAwNkYyRjg4MkI1MUNGNEU3OUUxMjkyNkZBMkZBQ0Q5MjMxCis6MTBDNTQwMDA1QUMwNDFGRUE5NjYyMjlBNEJBOENBQ0JBOEQ5NTU0RTFCCis6MTBDNTUwMDBBMDlEOENERjk1NTU3Q0U4OTgwRkY1MTNGNkFCRTlBNzA1Cis6MTBDNTYwMDBFNEVBMzBFQTlEMjQzRkM5MzdCQjY5Q0FEMzgxQTc1M0E3Cis6MTBDNTcwMDA1NERGNDcyMkU3MEQ1MDNFQjEzQ0FFMDc2RDI3NTY5MzdFCis6MTBDNTgwMDBDODc5MDMzMjcxN0RBQTVGQTJDQTYzRDNEQjQ3NEQyMTBDCis6MTBDNTkwMDAzRUE2M0ZGNzcxNzAxRUIxODM1RjRCN0RGRDdFOTI0QkNGCis6MTBDNUEwMDBGM0FBN0RGNjQ1QjVERUZFNzk2NTQ5MUIyMUJGRjg4MTBBCis6MTBDNUIwMDBBNzIwMEVGRTFCRTJFNTYwM0Y3RUI0N0Q5NDNENzdCODc4Cis6MTBDNUMwMDBFNTRDNUE1NUExQUExNDQwREU2RjEzOEZFOEVEREM2Q0UwCis6MTBDNUQwMDA4NUQyQUI4RTBGN0E5QUY4RUE1RThDMkYwNDMzNkE3NDk4Cis6MTBDNUUwMDBGQUFEQzMxMkNDQTBDQzRCQUUzRkYxOEY4QjQxM0U4MDU1Cis6MTBDNUYwMDBCRTA2MzkzRDc3ODRFOUY3NTFCREZFNUIyNjFGMzU3QkNBCis6MTBDNjAwMDA0MjUwRDc2QjlGQkNCMTJEMDFGN0QzQTgzRTkyQzBBRTZDCis6MTBDNjEwMDAwODkyMEFEQTNFQjE3Q0VCQ0JGMDlEOTQxOEJGMjcwODU0Cis6MTBDNjIwMDA4QzhGMzJCRDIxMEVGMjk5OUVDMDRGM0NCMERGOTA3Q0MyCis6MTBDNjMwMDA0ODdFODZDRUY3QjcwMzU2MDlFOEFGRUZFNERBN0E4ODhBCis6MTBDNjQwMDAxQjNFNEMxMjI1M0JFRDI3RjNBNTRCMDJDMEQxNjExQUNFCis6MTBDNjUwMDAxNjgwMDg0NzNDQ0Q0Qjc4NkEwNzc1MDg5QTlDQTQ4NkRCCis6MTBDNjYwMDAwRjVERkY4RTM0NTUyRTkwREY3NzU3RDFGQTA3NERDMUZECis6MTBDNjcwMDBBQjU0NTc4RUQ2M0ZFODA4NkU4MTNDRkQ5MzZENTRBRkE2Cis6MTBDNjgwMDBFRjFEOERBMzZGRUI5NjI5NERFQzU1RTNFNjIzOUVDRjZFCis6MTBDNjkwMDA3NjJCRDk5MEE3RjVERDJDREY0RURCRUY3NTBGNzk0REFBCis6MTBDNkEwMDAzNDlGQzg2REU5M0U5MzAzNzlBREZFOTY2RTg1QjZCRkEzCis6MTBDNkIwMDBFQTYxRTcwMDg4MkJFODAzQjkzNzlBMTc2OTNFNDE5NzhBCis6MTBDNkMwMDBFNzU5OUVEODU4REE3N0YyM0YwNUQwNDMxRDY5MjNBNzcyCis6MTBDNkQwMDBCMzAwOUYzRkU0RkE0MUJFMzZCRUZDRjU0MUM4NkZBRUUxCis6MTBDNkUwMDAyNzEyQzRFNzMyNEYxQ0MxNzVGOEFBQjk3QzA0RjBENkYyCis6MTBDNkYwMDBENzcyNDY0NDQzMURGRUI0NzVBMTc2RUExNDJGQzE3ODYzCis6MTBDNzAwMDBCMjEwRTI0MkY5NjBCRjE1Rjc5OEQwN0VEQjRFNDlCMDE3Cis6MTBDNzEwMDAwNEYwREQ5NTA2RUI1QzkxQzZGQzgxMjkyMURBOEY4RTUxCis6MTBDNzIwMDA3RkE2NTBCRUIzNEUwNzc1NjUxOTE5RDZGQjVCQzQ2RjYzCis6MTBDNzMwMDAwMjc4MTFFNUYwMUZFNTdGMkYwMUZERDQzNzVCNzE0Q0M2Cis6MTBDNzQwMDBBNUUzNkREQUMwRkI1QjI1RDAzRkExNTYwMUQ2RkYwNEZGCis6MTBDNzUwMDA4NzdBQzI3NzI2NjNDNzM3NjhGRTVBN0Y0QTJGRjgxQjRECis6MTBDNzYwMDA5NjFEOEMzRTM3RjlGQUQzQTZEM0I0QzNDRUU4NjI5M0I0Cis6MTBDNzcwMDA1QkNEQkI4REY5NzZENTlFRjRCQTE1NzczMkZEQkVGOTQ3Cis6MTBDNzgwMDBDNDgxNUMzMDAwQUYxRTlCODU3RUU0NjYwRDFFNzIwMDg2Cis6MTBDNzkwMDBFMUI5M0EzODI3RTkzNjNBREZDNjlGQjJCODY2RTM0MEQ2Cis6MTBDN0EwMDBDOTEyOTg3RkUzMUUxMzAxM0Y2RUYzMDBBNTI3MUQ3RjdBCis6MTBDN0IwMDBFQ0EzN0MyODRGQTZGMzkwN0JBNkYyOTQzRTAyMDcwQkQ1Cis6MTBDN0MwMDA5NkRBRTlGQTdFM0Q1RjE2MDE1RkY1NjlCN0VFQjY1MTdDCis6MTBDN0QwMDBFN0U4RUI4MjM4MDVFOEExM0VBRDc0MzdEMEQzQTYzOTNGCis6MTBDN0UwMDA2RjIxM0QyNkE1OTZGRUE0OUFFMkVCRThEREQ1NEI0MEVECis6MTBDN0YwMDBBQ0E1OTkxODVGNTI4MjQzMzk2Nzc2NkY0M0ZDRkY2QjkzCis6MTBDODAwMDAzOTE5QjFCQTExOURCOENGOTkwN0ZGNDdFMTlCMkNDQURFCis6MTBDODEwMDAxNTUwNUY1QzQ2NUQyMkEwNTMyMTcwMTJFQzEwQTVDMjNBCis6MTBDODIwMDA4NjcxRDIwQTcxMTk5NkU3QUUyMUE2NkUwQUNGMTEyOTM4Cis6MTBDODMwMDAzOUI5OTUzNkI1MTdDODI2QjA1M0YyMDMwRThDN0Y5QUQ2Cis6MTBDODQwMDAxM0FBNzY4MDNGN0FFQzFDQ0I0N0Q2RTkxMkUyQzU1MTk5Cis6MTBDODUwMDAxNEVBQjdEMTdFNkU3MUYxMjJGODIyNjk2NkQ5MDZFQjJGCis6MTBDODYwMDA0Njc5NzlFODU4MjlGMDBCQjMwMzk0MkYxNjYzQkNFNzk3Cis6MTBDODcwMDA2MDIyQTk3RjhFQjYzQjZBREFEOEZEMjM1QUVGNjhCMkYwCis6MTBDODgwMDA4NzgwNUREOUMxNzFFQjZCRjA3QkM1RDRBRDc0M0Q4RUYzCis6MTBDODkwMDBBQUVCNjc3NkZCNDU1OEFGQTM2RTYzN0UyRkI3RjE0MUQ1Cis6MTBDOEEwMDBDMERCMjNBOTJGMkU4MUY5QTU1OUU1OUUxNDBBREZFN0U1Cis6MTBDOEIwMDA1MjVGRUNGNjY2MjA5RUYzNkRCNEZDNzM3RkZENDJCN0M5Cis6MTBDOEMwMDA4REUyRkQ2OEFCOUMyOUVBRjI5M0ZGNDBBNTM2Q0VFM0VBCis6MTBDOEQwMDAwNUU0NTNERUZEQzU4NzgwOEY2OUY5OEY2RDU0RkY3RUI3Cis6MTBDOEUwMDAzRDU5QjMwNzU4Nzk0MUJFQzZEN0Q0QUY5RDRERTE2OEQ1Cis6MTBDOEYwMDAxRENEMkJCNjIyRDhGNzhBRDRBRkEyN0NGRUQ1QTdDRDBBCis6MTBDOTAwMDA0NEVCMUZFQzA5Qzc5QzdFOUJDMzhDRjMyMDBFQjA2N0UxCis6MTBDOTEwMDBBNkYxNjhDRjM4REM2QzVEMUQ1M0YyRDE0RTNBNkE2N0UwCis6MTBDOTIwMDBGODFBQzkzMTYxRjkyMkYzQjMyMkM0MDdBQzUzNzgxMzYyCis6MTBDOTMwMDA5RUU1MjE0RDAxRDBDRjdDMzY0RjU4QkNGN0IwM0M0NTI5Cis6MTBDOTQwMDA4MkIwMjlEQjFGRTQ3QTU2QTA3RjY4MkZEMkVEMDcxMjUwCis6MTBDOTUwMDBGMDYzOERGQjg3N0M1NEJFRDAzQTlDNjFBMjdBRDg3Mzc5Cis6MTBDOTYwMDA2MTA1OTc0QkZCRkI2Q0FBRUEyRjdBNDgwNkM0NjMxRjRDCis6MTBDOTcwMDA0RDY1NzJFNkQxODA3MkJCNDUwMjFBMUI2NkU3NTY0OUM3Cis6MTBDOTgwMDA2MDNBQTRFOUVCMEFEMkM3M0JCRjMyRjY1QzQwMThFRDJGCis6MTBDOTkwMDBCMjNEMkU5MzhBQjc0OUJCQzMwNUQ0NUU3NjNEMjc4MjRDCis6MTBDOUEwMDAxQ0ExNkE3RUM3NjFEMDZGMUUxRUU5QTYxMEY4OUZFNjIzCis6MTBDOUIwMDBCN0I5NTkxQ0RFRDdCN0U0NEJCM0MxM0U3Q0I1RDAwNDQwCis6MTBDOUMwMDBGQ0NGOEI3RTExQ0VEOTk1Mjc5NDI2ODFEREM2OEZEMkUwCis6MTBDOUQwMDBFOUVCNEJDMjQwMzc4MzczRUUwNDNGNTAwMEZFQTU5RjQ2Cis6MTBDOUUwMDAwRkRCRDlGOUQwOTEwQ0QyMEY3MTYxREUyQjEzRkQzRTE0Cis6MTBDOUYwMDBBMUM2QkYzQjVCNkM5ODUyN0ZGRTVERDAxRjVGRUIyMkYwCis6MTBDQTAwMDBCODRGMjA3ODAzOTg5N0RBMDkwNzdDRjFGMkE3RUVDNkIxCis6MTBDQTEwMDA3MTlGRTEwMzQ5RUI0MERFOUU2Mzc2M0Q5MDBCQzYzOTgyCis6MTBDQTIwMDBDMjRGNzAxMEU3NzhERjE2NDg4Mjc5RUY3NzFCRURCRkIxCis6MTBDQTMwMDBCMjM0NjZDNzc2QTYzMkY5RDlEOUMyRTJBMEMyRjU0RkEwCis6MTBDQTQwMDA2MDVDQTdDM0EyQzkyM0Q3RDJGMDVDQjBFNzgzNzg4RTFECis6MTBDQTUwMDBENjFBREMyNjgzQkNCMjExNDUxMTc1NzE3MjVCQjYzMUYyCis6MTBDQTYwMDBERTI1NUNCRjk1QzU4NzUyRDkzOEQxRTcwRDVDOUNENkQxCis6MTBDQTcwMDA3RkMxRUVGMUZDMDMyRDhEM0U5RkQwNEMwMjI4OEZDODY0Cis6MTBDQTgwMDAxMDNCRjdCMDZENTc2NTdBQjJBRTlGNkQ5QzlDMkU4RUIxCis6MTBDQTkwMDA0MzFGMEY1RjM3OTM5MEVFOUNDQUMzRkM4ODAwRjM3OTY1Cis6MTBDQUEwMDBGOEJBODBERjg5NzczOEIxMTVGNjY1MjhDMTc1QzMzQUMxCis6MTBDQUIwMDAzRUZGNURENDRCMEVEMjEzODYwMzczNTY4ODUzRThDRUU3Cis6MTBDQUMwMDA4NTEyMkYzRjMyNEFGRkY5MTFGRUMwN0Q3NTJFMDY3Rjc5Cis6MTBDQUQwMDA0OEM2N0NGNDdFRkFBM0UwM0JEMzdGNzczODdGMkRDMDM1Cis6MTBDQUUwMDAzQ0RGQUIyNDIzNjA4NzEyMzJCQzA4RjhCN0IxRDI4MTk3Cis6MTBDQUYwMDA3MUVBODc0OThGQ0QwNjA2MkVERjIzRUFFM0M1OEQwMzUxCis6MTBDQjAwMDA5NzEyMzc5NEUyM0U5NjA0NzZGMEMzMkY5NTFCRTI1NEI5Cis6MTBDQjEwMDBEQUY5MzAyREJGRjlDNDA2OEMxRjNFN0NGNDlBMzBCNThCCis6MTBDQjIwMDAxNEMxMThCMjUwN0ZBQ0QxRDY3M0M2OUExRkE5NkZCNzgzCis6MTBDQjMwMDAwNDk1MkNBMEZGOTc1QUU1MkNGQUU5NUIwMDI3OUNBQkUzCis6MTBDQjQwMDA2QTlFMzQwQkZDQkZERjhBRjUxOTgwMjcyN0FGRUE4Rjc2Cis6MTBDQjUwMDAzNTM2RDQxRkVENzZFQUFGMDE5RDVFOUM4Q0ZBOTQxNkIzCis6MTBDQjYwMDBGM0EwOUZCNUYxNTc3ODE4MUQ4RUE4RkU3QzAyMzUzM0NGCis6MTBDQjcwMDAwMUJGMUQ4RUMwMTU2NkI0MTM5OUE3RjY0RTQ3QjI0Njg1Cis6MTBDQjgwMDAzN0NERERBMEZGMEUwQTExQjkwODkzM0RFODYwRjlFNDQ2Cis6MTBDQjkwMDBCNEU2RUU3NkE2ODdCMUZFQzg5M0ZDNkVCMDg3M0FFQzk5Cis6MTBDQkEwMDA2QURFNDMzMDdGNTBFODQxM0Y0MUY5QkU1NTAyMzgwRkZECis6MTBDQkIwMDAzQTAyN0VGMDA3OTUxRDUzMjREMDI3NTVFOTJFOUM4NzE1Cis6MTBDQkMwMDBFNUVGQUNCRDIwMEYzMzNEQzFBQjYwQjcxMDBGQjM4RkE1Cis6MTBDQkQwMDBERTRCQkQ5MDRCNUMzMUZCMTlFMTZFQTQxRkFGQjExRjYyCis6MTBDQkUwMDBGQjVDMzZGRTdCOUMzOUIwQTMzNDUyOEZCNjBGRTNCOUExCis6MTBDQkYwMDA4MDdCNkMxOEZGRDFFQTFGQjYxOEVENjQyRDlEOTJDNjlDCis6MTBDQzAwMDBFMjBDMjA0RjgwQUZCNUVGNDJGMDNFRTQ1RjJCNjk0MjZCCis6MTBDQzEwMDBGRUI1N0E4REZCNDUxQTNGMEJEN0E3MThFMjk3REY0QTdFCis6MTBDQzIwMDBGNUUxRkE2ODcyNDBCODVFOENFNTlEMkE5REVFODQ3RDQwCis6MTBDQzMwMDBGNDcxQzc0OThFMzNDRTBDOTQxM0YxQzcyOTUzRTUwODFDCis6MTBDQzQwMDA1MUUzNDkzQzlFMzNEM0Y4MjRCRUJDMzBDNjcxQTNFNTAyCis6MTBDQzUwMDA5Rjk2NkFGMkVGODg0QUM3RkY2MDBGMkU0Q0EzRkZGRjMyCis6MTBDQzYwMDA1MEE4N0Y5MTAzNUIwNzZGODVGNUY5QTM2QUY3MTZGNTY2Cis6MTBDQzcwMDAxRDM4MDlFNDc3NDU5NDVCNTM1M0UxM0M5NTdDMUNEMjA1Cis6MTBDQzgwMDA5QkU1OUJGQTM0MzZERTU4MzlDNkUyMEZEQjFFOTQ1MDIyCis6MTBDQzkwMDAzRjNGQzNGQjFERkUxODcwRDc1Rjc3MUFFNDU3N0VBQThCCis6MTBDQ0EwMDA4NEZERDVGMzBBQ0FCMUZBRUI4OTU4RkVEMUZCQjc5M0RDCis6MTBDQ0IwMDBEMDhDRjFGQTc3NjFGOTY4RkZGREFDRkY5NzNGRjVFMzlGCis6MTBDQ0MwMDA4M0IzQTFGRkUzMTY5MzU1RTdDRjZEM0JCRTMwMURFMjYyCis6MTBDQ0QwMDA5NURCRUM1NDJFMUJGOTU2MDZCRUU1N0Q2NEQ0MEYwMjlECis6MTBDQ0UwMDAzRURGQUZGOTQ1Q0FBMkRENTU3M0MxNkVENUYxRjk2Q0NGCis6MTBDQ0YwMDBCMEJGMjJFRDc5QkFDRUZCMUQ1QUZCM0I3NzgzM0QzNEEyCis6MTBDRDAwMDBBNkJFMzNBQTdFQkVENkZGNkFFQzNGMUExRTREOEU0MEU5Cis6MTBDRDEwMDAxRUVDMkRGRTBGNTYwRDNFOTQ0MzA3NEM1MUZEOERDQTVGCis6MTBDRDIwMDBBNTIwRjZCNzY5MEVCMzMzOTJGRUJBRkUyNzBBMEZGNEI4Cis6MTBDRDMwMDAxNzJBQ0YwMjNCRUI0MTIyQzEzOUU3NjhCQzI3QTk3NDBGCis6MTBDRDQwMDA1ODdGN0Q5MjYxNUQyM0Y4QkVDNUYwRkQ5RjVCQkMyNERBCis6MTBDRDUwMDBBNEUzQjdDRjA0QjcyRDAyN0U0QkQyRDY4OTI4M0JCMUNFCis6MTBDRDYwMDBEREUxMkMxMkQyRjFEREZGQzBGMTUxRTFCODJEMEUxQzM2Cis6MTBDRDcwMDBGM0ZGQzI3MEY4MEM3QzE5ODFBM0MwRjBGREEzQzI2MTVGCis6MTBDRDgwMDBCNjVEQ0ZCQ0FDQ0I1QjQ0OTJBNUNGOTc4NDZENTk5NzcxCis6MTBDRDkwMDA3NTc2Q0I4QzMzQTIyMTNGNzNDODZCQTgzRkVCQkM2NDg0Cis6MTBDREEwMDAyODlGMzM1QzY0MjhCRkVEOEFERjkwOUYzNzMyREI1MEM5Cis6MTBDREIwMDA3RkMxNzVEOTkwMkYyNzhCMERGNTJCNkQyQjBDRjk4NTI1Cis6MTBDREMwMDBFMjVBNDNGRDY5NkE5Q0ZDNzZFRjA2NDNCREM1RDI4M0Y3Cis6MTBDREQwMDA4NjdBNDI3M0NBNzdDMDdFNTlGMEMxMDIxQkY4MTczQkFFCis6MTBDREUwMDA1REE2RUExMEM1Q0Y0RTNFNjg0QjhFMjExRkNCRDQ3RTg4Cis6MTBDREYwMDA0N0Y1OUQzNzBEREIyRjE0OUJEQTQxMUUyRUE0QUU3MDM0Cis6MTBDRTAwMDAxQkI1RDdEMkVCMDJFREEwRjdBQjQ1MjI5QUQxNkYwRTNFCis6MTBDRTEwMDBCMUY4QzkwNzJCQUJFMEZCOUQ4Qjg5RDhFRDhFRTQ2RjkxCis6MTBDRTIwMDBGRjJCNDIyMDZGQ0Q5NkYxNUM5QkJERDg4NEU3MDY3NjQwCis6MTBDRTMwMDAxN0Q3OENCQkZGQjA0RkI1REZGNzQ0RTlGQjUxRkEzMTkwCis6MTBDRTQwMDBCM0YzOTNEMURGOEJEMzE5NUQxRDU4QjA4RkMwM0U4MUYyCis6MTBDRTUwMDBDRDE1QzI3QjNFODM1Mzc2N0EyMUZGQTUwNURGRjY4MjhFCis6MTBDRTYwMDA5RkQxMzVFNTExMkZEMDRGNjdDRTU3MERFN0YyMUMwNTQ2Cis6MTBDRTcwMDA2QzdGMjZCQURGQkY1NUZCMkRCOEZFQTgwREY0RTdFRTk4Cis6MTBDRTgwMDA2Qzg2Q0ZFODdBREFGOUY0REQzNjE2MzdGRkI4RTZCOTAyCis6MTBDRTkwMDBGODYzOUFFN0U1NzQ2NjY3RURCNjg1MzBGRURGNURGNDBBCis6MTBDRUEwMDBGMUMwN0ZBRjNBQ0U4MTA1OEYxMzA2RUZFMzc4MEVCOTVDCis6MTBDRUIwMDAyQjQ3OTBGNDdBNTY0QkUxREUyOENDQTdEM0I3RDMwQjlGCis6MTBDRUMwMDA3QUI3Q0JGNzg4QzFGRUI3QzI3QzYyOEM2M0YzMzIzQzgxCis6MTBDRUQwMDBFRDE2M0ZERUY5M0NGRTI3Q0Y2NzY3Q0M3RDc3NUI5Qzg0Cis6MTBDRUUwMDA3OTE1NkJGM0YyQUFGNzI4M0VBNjc5M0RGNTE3OUU1NzAwCis6MTBDRUYwMDA1ODFEMkYzNTlERDlBN0JCMjVDNjQ3NDlFNkMwQ0ZGMzlFCis6MTBDRjAwMDA3REYxRjkyRjY5QjZGMTlDNTI4MkRGRTgwN0U0MTcwNDNFCis6MTBDRjEwMDBDNjNEN0Y3NDVFQzU0RjNDN0U1RDYzNTE1MjAxOEVENzI2Cis6MTBDRjIwMDA1QkQ4MzlEQjczODA0NzlBOUUwRjRFQUE4MEZCMEFBRjBECis6MTBDRjMwMDBDMzc5MkQwRURBRUY0ODE4NkYxREQ2MDZDRDA2MzgyN0I3Cis6MTBDRjQwMDA5MjBGMjVFOUY5ODg4RkQ1NkI4Q0VENTYwNTlDQzZGM0I5Cis6MTBDRjUwMDA1MkVBMzkwMzhBQTdGRDEwNUZENkYwMzY2NjlERkY0QzcyCis6MTBDRjYwMDA3ODhBNDc2RjM3OEFBN0VFQTI5QkMzRDM0NEY0OUQ5QTcxCis6MTBDRjcwMDAyRTIxQkQ0Qzg0Mjc4RDhFRTJGNUYzRkYyQTFEMkRCRTk4Cis6MTBDRjgwMDA3MUZDMjBGRDdDRENGOEY5QUY0NjNGRjdBNjRCMzdDNEI3Cis6MTBDRjkwMDA2N0ZGQkZFMkU3RjExQkM0Q0ZFODc5NkI4MUQ0QzczQUUyCis6MTBDRkEwMDAwN0QyRTkxNTkwMEUyNzczNEQ2NzE3ODM5RkJERDg4QzY0Cis6MTBDRkIwMDBGMUIzRDcwRTE3MzQ5MjdDN0QzREE2MDc1RTVCMzZBOTkwCis6MTBDRkMwMDAxMUNGOEY1NTNCRjFBQ0Q2NTk1M0VDN0U1RjUzRjFGMTQ1Cis6MTBDRkQwMDA5MEQ3QUQ5RUE3RjNBNzgyREQ3QkI2N0FFNUI4RjMyMkEyCis6MTBDRkUwMDBDQkNDQzZGMzhCQzQxMTk5OUY5OUY2NEJBNDBBOEM5RkE2Cis6MTBDRkYwMDA1MUJDMUUxQjY3RERCNTc1OEIzN0RFOERBRURCRDlFQTA0Cis6MTBEMDAwMDBCNjlCNUEzNzZEM0M4QUE3OThFREVFRjZFNkRGMTBERjQ3Cis6MTBEMDEwMDBDMzA5NzY4NjM3NzYxRUEwRUY3MTY2QjdGNzAxQkU2OTQxCis6MTBEMDIwMDBCRkJGODRBMjBDQjBGRjA5QzZGRDU2QUY0OTNGMDJGMDU2Cis6MTBEMDMwMDBCRUU2NjVGMUYwMDE0MTZBQzQ3NzQxNTYyRURCMERFNzhCCis6MTBEMDQwMDA1MUNFQUQ3MjczMTBEMkQwRTAzOEE2QUU2NzU5NUQ2Qzg4Cis6MTBEMDUwMDBCQkYzMzlCNTNDRDI5RTIzOTNBNUIxRjU4RUE4NzZDRjBDCis6MTBEMDYwMDBBQTNBMEVFRDA3QzJDQjM5RkE3NzNGRkUyMUFBM0NCQUE1Cis6MTBEMDcwMDBGRDRCREU0NDJDM0YxN0U3M0NFNkI3RDRGNkFCNkJDNzVECis6MTBEMDgwMDA2RjRGRUE1M0YwREMxRjIxNTI4RUZFM0VGQTI4NURBOTU1Cis6MTBEMDkwMDA3Q0IwQzIxQkZDQkU5N0Q2N0Y5RDBCN0VGOTczMTA0RkYwCis6MTBEMEEwMDA5REUyQzJGMzNEODQyNzNFRDhGNzFGRUQ4Nzk3RjFCQzgwCis6MTBEMEIwMDBDNkU1NDY4NkY3RTg3RTc1RkQ4NUJEQTlGMUZCOEI4NzQxCis6MTBEMEMwMDA1RjZENUVEQTc4QTUyNDgwN0UxREE5MjZFMjdFMzZCRURECis6MTBEMEQwMDAxOUNFMzlEQzU5NDk5QTcwN0M1RTQyNzg1MkRFQTRGRTQyCis6MTBEMEUwMDA5QzJGNDIxRjE3NENEMjNBQkM0OEEzRjYzM0YwRkJDQTIwCis6MTBEMEYwMDBBNUQwQ0ZDMDU5OTNCOEMzMTcxRkVFNzhGMkUwOUY1NDY0Cis6MTBEMTAwMDBGQUYxOTg4MzNCRTA1QzAxNTlDRkM1M0NCN0Y3MkJBRkYwCis6MTBEMTEwMDAxREVCRURGNzhFRUVEN0UzMzhCNzNDMTlCNDQ4QjRERjFBCis6MTBEMTIwMDBCQkQ0NzM2Nzg0MDQ3MzU2RThDNkRGQUZDRTNCQkE5REE5Cis6MTBEMTMwMDBDN0NDRjZDN0M5MUI2NkM0NUY1RkVGNDMzOUIxRjhFN0Q4Cis6MTBEMTQwMDAzNUQ1NUVERUVGMkQzMkY4QzdCNTgxMkQxNkIwNkI2QjhECis6MTBEMTUwMDA5N0FEQjA0ODJFMjg5NzE4RERBOTcwRjQwOUMxOUMxMjJDCis6MTBEMTYwMDA1NzA0NEY3MUU1OEY4QTlGODFGMzQxM0NCN0IxQkU5OTU3Cis6MTBEMTcwMDBDMzczQzdDNURCMTlGREFEREYzRTY4NkFBNEU5MTE5NTJECis6MTBEMTgwMDAwRjU3QzAzRTkzQUUzRjc3MDY5QjVGNUZBRjIzMTdFMDFDCis6MTBEMTkwMDBFRkQzOUZCRkEwNzA3Q0ZBMTBDMUI4OUQyREUzRTkzRDhECis6MTBEMUEwMDAxMEI3MUJFNjg4MUFFNzMzMkQ4N0ZEODY2MTc1NUZBQ0UzCis6MTBEMUIwMDA5MDk2QjcwMkJDNTVBOUM4RTdFQkI3QUY0MDNGRkY5NkMyCis6MTBEMUMwMDA2QUU2RTcwRjA4MDRDRjAxQkQzOTJGMjEwNEVGMUQxMEQ3Cis6MTBEMUQwMDA5QjNDRjgyOENEQkZGNTg3MjREMkVEOEZEMEM3MTM0MkYyCis6MTBEMUUwMDA3ODFBRDA0NzZBNUJFMDczQjFFMkQzNTIwNkUzRjNERjBCCis6MTBEMUYwMDBCQUQ4M0U1RTNDQkM5QzU1RTVBOTU2QUY4Njk3MkNCMThCCis6MTBEMjAwMDBFQUFGQUMzNkNBMzUwREZFMTQ2QkY4M0QxMjIzOUUzRUQ0Cis6MTBEMjEwMDA0QThGQTFGMUY1REQyRjU0MzlGRDVBOTRCRjU0N0IzRTVFCis6MTBEMjIwMDBCNkRGMzIzNzQzM0RBNzFCQUFEODg0RkE0QUIxNEE3ODAxCis6MTBEMjMwMDBCNjU4ODVDN0EzQUM0NjdDN0VCODk0ODg5MEJGRDMyQUU1Cis6MTBEMjQwMDAzRDBERjBERDU1NkI4RTkyQzMyMUVDNjdGRDMyQTc2MTc5Cis6MTBEMjUwMDA1RTRGRjRGRTc4MUFEQzRCQ0EyRjYwRjJGN0ZEMjIxN0ZFCis6MTBEMjYwMDA5RTEzN0Y4MDM0MDk3MEZFQUI4RTI4RjM5MTJGODk2NDYyCis6MTBEMjcwMDAwMUZBM0VBN0UyNEY4M0VGMUM5MTEzNjY4MkJDNjgzNjI5Cis6MTBEMjgwMDBDN0U0QUZCQjU0M0EzQTE3QTg1Qzg1RTdERkRCQ0Q3ODNCCis6MTBEMjkwMDAxRUUxNTI2RENBNzI4ODdGMkIwMThCMUY4RTM3NUQ2QTJCCis6MTBEMkEwMDA1Rjk5NzBCRjZFNUQzNUJEQTdEOTM1RTc4Mzk1RTNFQTE5Cis6MTBEMkIwMDBBRjU1MDFFMzdBRjUwOTNEQjhGRkE3NTQ5MEE2NjM5NEYyCis6MTBEMkMwMDBDRTI2N0ZGOUYyREU1OTM0N0YzNjY0MkE2MUU3RENEODU2Cis6MTBEMkQwMDA3Q0NGODZCMkI0NzNGMTg0NEZBM0VCQUUxNjVEMzUwREVGCis6MTBEMkUwMDA2MzdERTU2RkQ4QkNENkQ1ODUxNkMyOTZEODNEODc3QUMyCis6MTBEMkYwMDBGNkNEQTJGOTg2MENCN0JBRUYzODdGMUVGMEVCQUY5QUU1Cis6MTBEMzAwMDBDN0I3MDdBMkU5RTk5NjI3MUQ4NjdDRDk3OTIyRTA3Qjc5Cis6MTBEMzEwMDAxNERCNjJFQjg3RjdCMjlDNkM1Rjg3RjdFN0MyM0FBQzJECis6MTBEMzIwMDBEQjFFQkI5RTNCREI4NUY1QUVGRUQxNUMxRkNCRUYzRTJCCis6MTBEMzMwMDA5MEM1RDY2MzdEM0QxNzUzOUUxRkM4NEE2MEU1MERCMTY5Cis6MTBEMzQwMDBGQjVGOTVFOTU0RTU5RDk4MEJFQkIyM0UwRUJDMkIzMjhBCis6MTBEMzUwMDAxMzExOEVCNzNCNTZBRjgzRkRGQjJCNTFGNjU1NDUyNjc3Cis6MTBEMzYwMDA4MzQzQ0E2NEU3MkJBRkY2QkVEMDkxMDZGNEIwOTMxM0EzCis6MTBEMzcwMDBFMTFDRDk1QjZFRkYxNEEwQkYwREVEOTdEMENGNEY1N0M2Cis6MTBEMzgwMDBFQjNCRDIwMzRGNjZEMEY0RUVGM0NGOUQ4MkZBMDM3NUU4Cis6MTBEMzkwMDBDNENGNDlGMUY1QzBFMTBDNEQwRjY4RjdBMjM1N0REODM3Cis6MTBEM0EwMDA2MzA3N0QwNEZGMEJGQkFCMTQwNDI1MjkxOUQ2NUQ3OUI3Cis6MTBEM0IwMDAwOENGQzVGNDNBNDQ3NjBGQ0EzRjUzNkY1NzdGNDNBNTUxCis6MTBEM0MwMDBFN0FCNDc2RjZFQkRFRkE5MzdEQTQ1NjdDMUZFRjM0NDlGCis6MTBEM0QwMDBFQ0JGQUI4MkI0Qjc5NDhFN0I5NUQyNUIyQjlEMEZGOURCCis6MTBEM0UwMDBFMDg5NUJGNUZBNDZFMzg3NzhFM0RFQTgxRDc4RjVFODg3Cis6MTBEM0YwMDBDREQ5ODExM0NERjM2NzE5QkUxQkIyMDNERkFGN0U2MkI3Cis6MTBENDAwMDA1RkE5MDRGM0VDQjkzNTk2QkNENUU0RjIyRjU1QjkxOEYxCis6MTBENDEwMDA0RDJGNUFGQTRCNTVDRTVGMDk4RDBGRDc2NzBFMTlFMTg0Cis6MTBENDIwMDA1OUQ3NjQ4NDQ3RTM4RjJCQTEzNjA3QkNBQjQ1NDc5RjkwCis6MTBENDMwMDAwNkVCQUNEOUE1QTQ2QUU2MERCRDE3MTIwRkNFNUZBQjAzCis6MTBENDQwMDA3NEYyQUI2NjMzOEY3MkVGMjg4N0YxRTk1RjM1M0Y5MTU1Cis6MTBENDUwMDAxODJCNkUxNTNERkZBQjI2NEEwRjQwMUY0RkYzMjg3RjU4Cis6MTBENDYwMDAwQUVCMzc5QzRDOTMyMkY0Rjg3RjU0M0NGQ0E5NzRBODM3Cis6MTBENDcwMDBDOTU3NEQ5RjQ0QjdGRkFGNEE3NzlBM0U5Qjg4RUUzQzExCis6MTBENDgwMDA3MUUyOEYwNzMyNkM4OEJGMERCQzI4QzBGRUQxODEwQ0MxCis6MTBENDkwMDA4OUU1ODlCOEM4MEJGNkVCNkM3NkVFOUQ0QUE4NUM3OEY2Cis6MTBENEEwMDA1N0UyNkFBRjAzRUY4MzI5RERENjUwMjE1REM3MkJCRDVDCis6MTBENEIwMDBCNzRERDFBRkUzRUM0Q0I2MUVFQjFCREMzQjYxQ0JGQUI2Cis6MTBENEMwMDA4QUM5QkYzODFERDZBRjg2QkRFRjcxRUU3Q0YyQTI3NDVCCis6MTBENEQwMDBEQUZFODkyMTEzQkM5MDQ1RDY2RERCNjA4NkY5Q0RDQzkwCis6MTBENEUwMDA2NDdBNjRGREY2NTdEMUVFQkI1OUJBNUVERjY0RDRFN0M3Cis6MTBENEYwMDA1RkNFMTA1NTNEQzFFQ0YwM0JBOTVEMDBFNzA4RTNFMUNDCis6MTBENTAwMDBBMTMwOTNFMUUxOUVGQUUzMjg0RkVGRERDRUExM0NCRENGCis6MTBENTEwMDAyNTkzRTFFMzVFM0U4NDcyOTlCNDMzRkI5OUQ4MjgzRUFCCis6MTBENTIwMDBBODVDQkEwNDkzMDA3Q0ZDMzVDN0NFNzdGMzAxNDFGRkI5Cis6MTBENTMwMDBGRUM2RkQ3QjU2MkYwNDNCMzA5QTNGQkVBN0UyRTkyQjg3Cis6MTBENTQwMDA5OUVBM0I4NEU5QzEzQjMzRDEzRjBDNzBEMERGNUI5RjRDCis6MTBENTUwMDA2N0YwQUVERkJFMDVDRjI3NUZDQzUwRUQ2Qjk1M0YyRjU4Cis6MTBENTYwMDBDMjNBQ0Q4Q0NDMkY0NTlEREYwNUM3QzgzNkQwMTc5NDY1Cis6MTBENTcwMDA2RjRDNzhCRUU0NzUzM0MyNzVGNUFCREY2QzgyN0FFMjJFCis6MTBENTgwMDA1NDE3REVGNzQyM0I5NkU2RkI5NjI3ODQ1QTc1RjEzQTJDCis6MTBENTkwMDBDREFFQzlGNzMzN0VBOEU1NjU4MzVERDg5MEU5MzNEODcxCis6MTBENUEwMDBFOUQxRjZDNkZGRTgwMzk2RjZBODc4RkE0QkU5ODNDM0ZCCis6MTBENUIwMDBBQTVERjBBN0VBODM0NzU0RkU4RkQ2MEJBMzdDQkM5M0U5Cis6MTBENUMwMDBGMUYxQTVGM0ZGQkUxMEYyRDE3Q0ZDQURDQzhGQTY5Nzk0Cis6MTBENUQwMDBBMkY5Rjc0QUVGREQ0OEQ3Q0ExMjIyMTYxQUZDQTM5QzFCCis6MTBENUUwMDAxMEY4QzFBM0Y0MUZGMTkzMzgzOERGRjY0NEVGNEZBNkNCCis6MTBENUYwMDA0MTlDRUJEMkRFRDVFQjYyOERGRjQ0MTZCM0IzMzYyNkU5Cis6MTBENjAwMDA0QTI2N0MxRkYyNzU0NjY3RDE3MjIyQkFERDI4NUZDNEI0Cis6MTBENjEwMDA4OTJGRDZENkNDNDFGRkYwNUNDRDZEQjk3MEVGMkREQUY1Cis6MTBENjIwMDAzRjE4NTM5RjkzNTM1NzgxN0ZEQ0FBRkFDN0ZCQUNGNTkxCis6MTBENjMwMDBCRDMxRTBGNTY2MzE3Q0U2MTc4QzlDMDI3Q0JGREZDMDEzCis6MTBENjQwMDBFMTdENjJGOEQzREJFOTc3OUZGN0ZGNjA1ODFBMEJFRkIzCis6MTBENjUwMDA2ODVFRjM0RkI2QjNGMUEyQzc3OTU3NURCNzUxRkY0NDg3Cis6MTBENjYwMDBBMUZFMDlDNUYzNzBBRDM5MTFDRUIxNkFGRUM5QjBGMkExCis6MTBENjcwMDBFN0Y1NEZERTI0MjNGRjMwMEJENkY5Njg2Q0I4MUNFQUJGCis6MTBENjgwMDBGQ0FGMDhDMTdENzMyODFDNTc5Nzk4RkQwQUYwOEI4OTYxCis6MTBENjkwMDBCNkQzRjkyNUQxRURGRUE4Q0VFN0NERUQzNzI5OEZDRTUzCis6MTBENkEwMDAxQkUzQzlGMUY4NkQxNEFFM0Y5MURGRkE4NDkxMUNFMEUxCis6MTBENkIwMDBGQjM3OEY3QzcwRjE1MTk4Q0YxMTA3QkUzRjE2RERDRjNECis6MTBENkMwMDBEN0IyQ0NBQTdGRTA0MDNFRDBGNEVGODBEMEIzRjkwNUNBCis6MTBENkQwMDBEQUVFQ0QzQjMyRkQzQjg4OEUyRjA4RTUwQkZBRkRDMjFBCis6MTBENkUwMDAxRjI5NUZGODUxQkUyMTFGRjdGNTNBRUI2M0Y5Mjk4MzMzCis6MTBENkYwMDBBQTNGMTQxREI3MTE3QkJGRDEwNDdFQjE0Q0ZDMTY3RDJGCis6MTBENzAwMDBEQ0U5MEQ3NUREN0ZBMUNBQTVBMjJDQTYzRkVGQUE1REJECis6MTBENzEwMDAyMTQwQkNFOEZFRDE3ODExNDFFNzQyOUM5QTdEMDRGQzhGCis6MTBENzIwMDBDQkQ3RDQ3QjAyQ0FDNjg0OThGMURFOTkyQTVFMjc4QUI5Cis6MTBENzMwMDAxRkFDQTkzM0ZBRjU3N0Q1MUFFNUM3M0JBMUZDNTEzRERCCis6MTBENzQwMDA1MjM4Q0U3RTk0NDZCRkYxQzZCQjUxRkREMTE3QkFCOTRGCis6MTBENzUwMDBGRDgwODlFNkY3RDlBQzFCRDMxRkFCNDhEMzNDOEM3MzUzCis6MTBENzYwMDBEMEY1ODFCNDk2MzQ0RDdCODFDMkYzQ0VBMTk1MDk2MDhBCis6MTBENzcwMDA0N0ZEODI5MDZBQjRFMzNGRjhFQzM0QkQ1RDEyNTRGMThBCis6MTBENzgwMDBGQzdFRUQ2N0VGMDA3Mjc5NDM2ODlBMTY0QkZGNDRDNzQxCis6MTBENzkwMDA2OTdFMTE4QTdEMkVFMzJFNTVBRUJFQTFEREE3QjgyQjgyCis6MTBEN0EwMDA3NjNDN0Y4QjNBRUUxQjc1RTNGMzRENzREQ0E2NzY5OURECis6MTBEN0IwMDA3MURFNEExNkIzODdERUE4NkI3MzA0OTk1RkNEQzZGRDkwCis6MTBEN0MwMDAxQjM2MkVFODJEQkQ1REFBNjRGRDc5RjRFMzMwQzRFRjZECis6MTBEN0QwMDA2MTlDRUQ4NDQwM0NBNTRGNTBBNkVBQ0Y1REE1NjQzMzIzCis6MTBEN0UwMDAzQ0U0MTc4REJGMEZBNUVEQTc2OEY1QTJFREFDOUY2N0QwCis6MTBEN0YwMDA0QTg2N0JCM0I1Q0I4QzcwQjU2OUY2MkQxMTMxMEU3MkFDCis6MTBEODAwMDAxNUY0QTUyN0EyMkZFRkI0RkExRjA0M0EyMDJFMDlDQjU2Cis6MTBEODEwMDA0RkE4NzhCRkJCRkVERjJDMzA3RjJBM0YzQkYwMUVEQkRBCis6MTBEODIwMDA1OTkzMDhGMkIzRUM3Q0M4QTJDN0NCODUxQkY0QUIyRThFCis6MTBEODMwMDBBOEY2QzI0NDcyMzRCRjY4MDRFNURCRkIyMTE3REU4RjEzCis6MTBEODQwMDA3OEYzMEJCRkIzQzRFQUI3RjY3QTk2RTExQ0YxRkE0MDVECis6MTBEODUwMDBFQ0I4OEE5ODI1OEM4QjY3MzFDQjg4QkZGNUQ3NzNGMUVDCis6MTBEODYwMDA1QzcwM0NGQkZGMTBDOEFGOTk2MDhGMUVFOUQwREJGRkY2Cis6MTBEODcwMDA0RjY1NDlBQUZEQUZDQTMzOUVEOUZERjFFMkFGNDMyQUY1Cis6MTBEODgwMDA5RDREMTQ3RkQ1RjRCMzU2MkY3QUZEQjUzNDVBNUYwRUYzCis6MTBEODkwMDBBQkZDMUM1REVGNTJENjhERDFEREE4MUQxMzg3RUVFMkU3Cis6MTBEOEEwMDA4REFCRjkxRjVBREMzN0JGOThCNjhGQjEyRjMzNjYxQzhBCis6MTBEOEIwMDBCNTVFRjQzODZGNDZBRENGMTgzRjIyNEVEQzJFMjk5QjYzCis6MTBEOEMwMDBFMTM3MTgyNzZFOTc5NENERTI3NjY3MDlEMzhCNEFDODYzCis6MTBEOEQwMDA4OTdBRUNDQUQxN0JGNzgxQjlGN0MwRTJDRjlEMDZGNTEyCis6MTBEOEUwMDBENkE4QzY2QkVBRUE1RjNEMDU3RUFBRTY1NzQ0RUNGMThFCis6MTBEOEYwMDA2MDFCRUM5MzVERERDMUExQkQxMTNENEVCNDVEREUwODQyCis6MTBEOTAwMDBFRjE1ODIyMDU1RTMwNzQ1NjYxOUUzRDRFNDMxNzZCRTZFCis6MTBEOTEwMDBERkQzQkMxQUVENEIyRDNFREQyNzA0NzYyNEQwRUZCN0M0Cis6MTBEOTIwMDA2Q0ZGQjc2REEwNUYzNTNGRkUyRDhCRkY0MTE2Njc2NjFDCis6MTBEOTMwMDBGNkVFODU1RTE3REU3M0REM0FFQUZGRjkzMURFMzhDQUFFCis6MTBEOTQwMDBGRjZBRkM3MUEyRjUxODk1Mzc3MUQ2NjMyMjc5MTMyRkZGCis6MTBEOTUwMDAyRUEyQTVBM0ZCMkM4MjU0RjgwQTlDNEJFNTEyRkRCRDE4Cis6MTBEOTYwMDAzNEFEMTEwODBGNzhBODU5Q0VBMTlGNTkyM0M4NEIzMTY3Cis6MTBEOTcwMDBERUZDQUFDOTA0NzlERjcyREY2RTM4MDdCRkIyREEyMjkzCis6MTBEOTgwMDBEQkE1QzhGRTRCRTk2QjBEODVBRjgwN0Y0MTI3MEM3RTgwCis6MTBEOTkwMDBFQ0MwMkZBNTdGODJGQkMxQUYyRkI2NEJCMDNGNzI3Njk0Cis6MTBEOUEwMDA5RTM0RThBMUY5QjM3NzcwMjJEODNENTU4QkVGMzc0RkZECis6MTBEOUIwMDA4M0YxNTY3MUY4MEU4REIzOTlBOEU3QjU2RjVENUU1OTg2Cis6MTBEOUMwMDA0MEM4MzcwMDQ0RERCRDhGMUE2RDlGNDY1OUJCMEZFRTJFCis6MTBEOUQwMDBDRDRFNEQxRDMwQjkyODRBQkY3Qjc4RUQzRTFCODVBQjNGCis6MTBEOUUwMDBBMzM1RTA4NUZCNzhGNzY1OTdFQzgzRkI3ODY5NjlGMkVFCis6MTBEOUYwMDBEMDAyNkE0NzFEQ0M5RUIxMUNGMjAzN0ZBM0Y1NTdCQTMzCis6MTBEQTAwMDAwRkVFREZCRDY4MEFGQTM4NUFGRTgzRUM2NUNCNzlEODkxCis6MTBEQTEwMDA4Rjk4QTQ4REJGMUVDQkVGNUFGMkUwQjE2REI0RkZCNzYzCis6MTBEQTIwMDAwRjZGNTkwRTY3RDdDQkVBQjRGMTFGNTk1RUM5NTNGQThECis6MTBEQTMwMDA5RkFCRTUxRjRCODRCQ0M3NDkyMkZCNENCMzA5QjE0NEUzCis6MTBEQTQwMDBFRUY3RTE3OUY3ODFEMUZCN0MyRENCRTFGQ0Y4RUJFNTNBCis6MTBEQTUwMDA0RDk1NzA4RkIzRUNDQjFERkI4QUE3MTAzMjZCNTlCOTczCis6MTBEQTYwMDAyOEQzRkNEQzlDMkYyRjc3QzJGRTMxQTFGNDQ4RjM3MjNGCis6MTBEQTcwMDBDRTU3MTA3RThGRDlBNEY2MUZEQTI3NjcwMzNDQ0E1NDBECis6MTBEQTgwMDAyOEU3OTQ2N0Y2NTVCQkUxM0VDMkYwNjkyMENCODc5QjNGCis6MTBEQTkwMDA3QjZDNjk4NjdCMDk4QTBDQTY4OTcwQTIzQzlDODVFMDE4Cis6MTBEQUEwMDBBOEZCREFEOUUxNjlFQ0JFOUQ5QTJGNjI3MThBRDFCQ0RDCis6MTBEQUIwMDA5N0U1MDc3NkM0QkU3RkYyNjEwRTkzNUYwMzhFRDhFNUNCCis6MTBEQUMwMDAzRDJBREY2QkZCQUY0OUU3ODlGQzZDMENGRUZGM0NDNEQxCis6MTBEQUQwMDBGRDY3NDZGOEU5MTRDNDQzM0NGOEU0NUM1MzJCRUNDM0ZGCis6MTBEQUUwMDBEQTE4OUNGMUY2NzFGN0E5RTMxNEI0MjZFMTNCNDVDQkIzCis6MTBEQUYwMDA5QTlDRjhBRUNFMjQzRjkzMzc5NDhCRjg5NTIwRkZDREI3Cis6MTBEQjAwMDAyNjg0MzNENUNDRTE3QjI2NjkwRTEyM0M0RUQzRDQxNDQ3Cis6MTBEQjEwMDBGNkJFQzkzMjhBNkE3ODc3NjRFMUE0QzA1MTNDREY5QkMzCis6MTBEQjIwMDA5RTUxRDIwNkU3RUI1QTdGQ0U4MzFEQTZCNTFGMEJBN0U5Cis6MTBEQjMwMDBCODA1RTA0QzM1RDc5NDZDMjlENkUxQUY5OEMxNEREN0U0Cis6MTBEQjQwMDA1RDZEMjc3RjEzREU3QjE5MTg5QTlBMEY3Njc1NjVCNjdGCis6MTBEQjUwMDA2NDg4Q0I5NDBERDU1OEUwNUNFQUU1MUM1NTRFNDhBQzgyCis6MTBEQjYwMDA3RDZBMjU5MzJCMjM1QkQ0RjcyQTZDRkUxMjQzNUM1RkZFCis6MTBEQjcwMDA5RDdGNjVFN0IyMkY0MUJEODYyMTBCODE3Mzg4REI4RUM3Cis6MTBEQjgwMDA5N0UzM0JGREYxRjhCRjAxQ0VCQkVCRjQ3NjAzMUZDNjc0Cis6MTBEQjkwMDA3M0U2MEQ3MERFN0QwNkY0Rjc1MzAxQ0UzNzQyM0ZFMEE5Cis6MTBEQkEwMDAxRkMwQkQwRUIwOUI1MkRCNjJBRkI3MTY1NzZFQjhFRTBBCis6MTBEQkIwMDAyNkNBMENGRDc3ODZBRjQ4RkYxRTJDOUY2ODVFOTFGRTNCCis6MTBEQkMwMDA4Q0Y3RjhDNkY2QTdERUU3RDNGMENFQUI3ODE3NjJDM0MyCis6MTBEQkQwMDBGOUFBNDY5NzE0REYyNjFEM0RBRDUyRTk4QjRBM0Y3Q0RBCis6MTBEQkUwMDBEN0Y3QzJGMkUyNUVGRDdCMDU4NEVDNjBFNzNBNzhCQUQzCis6MTBEQkYwMDA4RTYwNEYwRTM5RjA3REUwMzI5RUM5QzdCMkExNjQ1MUVDCis6MTBEQzAwMDBFMUM2RDI4NUI2QUUwM0M5NERGODNFRDFDODBBMkVFNkFDCis6MTBEQzEwMDBFRjBGOUNEN0UwNTJFREE3RjRCQUEwNzk4MzBFM0U4REFBCis6MTBEQzIwMDBGRTIzRkQwRjdENDFFMzhGNzVDOEI3N0IxOTdDNjA2RkM0Cis6MTBEQzMwMDBDMDNDRkNFMTY5RkE3MzIwMUFGQ0I3NTNEOTgxRTc0OTZCCis6MTBEQzQwMDBEQjU0RkNERkUxMEFGNTcyMTFCQzhEQzU3RkQ2MDRFQjE1Cis6MTBEQzUwMDA5OThCRTU2NTQzMjcwNTk4Njc0MzFDM0VGRDY1MEUzQkEwCis6MTBEQzYwMDAyNzkyN0UzRTlDMDhFNzAzOTY2NjMzRkQzNUQwM0ZDMzdFCis6MTBEQzcwMDA3RTFCRjBDNTMyMTNFMTI0MzY2RkIwMzNDQjM0Rjk0QTQyCis6MTBEQzgwMDBERUZCNTkwNTk1QUZFOUEzNzkyQTVGMjU1ODg3NTE3OUJECis6MTBEQzkwMDAxQkI2RDkyMkY1N0Y5QUYzREVGMjc2QUEzRjNDNTY3NjgwCis6MTBEQ0EwMDAxRjhDREE4RjM2QTJCQjg3NjhDRDYxRjFEQkQ5QzFEODcyCis6MTBEQ0IwMDBGQkQ2QzMzOTA5MDZCOUY1NTQ3MzI1Nzk5QkNFNkY2NTM4Cis6MTBEQ0MwMDAzNkQzRTdCMzg3MTU3QzI3NDlFM0VCNjhCOTU0OThDMzhCCis6MTBEQ0QwMDBENkQxOTdDM0VDRjE4RjVGMkU3MTEzQzhBNTE1QUE1QzNFCis6MTBEQ0UwMDA2MkU1QzQxMzY4ODBGMjM0OTM3QTJGNDE2NEVCQkVGMThECis6MTBEQ0YwMDA0NzMzMEEyMTBFQjdENTZCOTZFMDlFQzM0QUNFOUZGM0Y5Cis6MTBERDAwMDAyRDNBNEVBRDRERUE0ODkwMjJGNDUxNEI2QzkyMEJGMEY3Cis6MTBERDEwMDA0RDQ3ODA3QkFGMzVDQkVDOTg4NzNGQjAzQkZFQkQ4NzRFCis6MTBERDIwMDA2M0Y0NDdBNEE0REE3MUVDNUEwRDlFQUQ1RTAxQzdEQjIzCis6MTBERDMwMDBCOEFCMzAyOUE4ODc5MzBGM0M4QkYxM0RBNzBBQTcyRERDCis6MTBERDQwMDA0QTVGRjFDNjdDNUE1QUI4RDE2NEQ2OTVCQjk4RkVFQUIwCis6MTBERDUwMDBGNkNBRTUzOTYwNUZBQUU3OUJBMkVEQTI3QkIyMzk4M0UwCis6MTBERDYwMDAxQ0Q2RUNBMkRGNzkxOTlGNTBGRTQ1RkYzMTlERkE4RjNBCis6MTBERDcwMDAwNEVFN0JGNDA3RjAzQzE4M0M2MDU0ODhGNzc1RDlGQjNGCis6MTBERDgwMDBDNjZGMUQyNzczQzE0RkQyRkFCOTJCQTdEOEQwNkZERDRDCis6MTBERDkwMDA2QUJBNDg5RkE0Q0M2OUFCOTQyRkVCRTREOTE5RjU3REZFCis6MTBEREEwMDA3QTRBMEYzMzgxNUY1N0U3MTA2MzNCNzMyMDFCRUU5NTcwCis6MTBEREIwMDA5Mzc0QUIxRkU0Q0QyOTIxNzAxOEQ3NTcyNDZFNThERjE4Cis6MTBEREMwMDA4NUU2MkQ4NzkxMkVDQ0M0REQ4NkU3QTQ4RTYwRkJFQTI0Cis6MTBEREQwMDBCQTkxNTJCNDUzM0YzMDg3NDFFRkZDM0MzNzAzRTMzOUVCCis6MTBEREUwMDBBOTRFNDZCN0E3RUM0REQ4OEUyNzUyMzJDQTExNTVFRTMwCis6MTBEREYwMDBGRDNDNzcwQUJFN0ZBMUM5Q0ZDODdEMTZBRDFGNTY3RUY4Cis6MTBERTAwMDA4QTVCOTEwREVGQzQ5RTRBOUQ1Q0QyQzYxOUVEMURCMDkwCis6MTBERTEwMDA3RjIyRjZEMkYzRkI2RUE3RkMzOEFCQkEzRjRDNjFBNjZCCis6MTBERTIwMDA1MkU1QTVFNThGRDJGQTVCNzI5OEZFM0JFNTBCMENDMDdDCis6MTBERTMwMDBCOEE3REM0NDA0Rjg2NzBGMDc5Rjg1RkM2MkFGMTNERkM3Cis6MTBERTQwMDA3MUQzRDYyM0NEQzQ3RTFGMjY0REZERkQxNUUwMTM0OEFBCis6MTBERTUwMDBDNTVDQzY2Rjg3NzNEOTNBQkVBM0U2RDMxMjYzRkY5RTMzCis6MTBERTYwMDBDQzdGQThGNTdBRTBGRTFGQURENzVEMUVGQkRFRTgxRTc1Cis6MTBERTcwMDA5NThGMUI2RDNERDU3MDk1NUU3N0NGMTNFRjJERjM4NDk1Cis6MTBERTgwMDBEQTU1QjRDQURFMUNENjBGRDU2Nzg4QUZDQUNFM0FGQ0M1Cis6MTBERTkwMDAzREIxRjc4NzU2RTFCQkFFQTNCRkYzMDFFRjU0RDE3NTk3Cis6MTBERUEwMDAwRjkzOTVGQjAxRUZDMjJGQ0M3ODdFQjNDM0MyRTg1MjJCCis6MTBERUIwMDA3MDA3NDVCODg3OTRFMjhDRURFRjdFNTc4NTI3QzVDQzc3Cis6MTBERUMwMDBERUVCRDZFRTJGNThENEZCRkNDNzU0N0IyQ0QxNUI4QkZBCis6MTBERUQwMDA3MjFEREU1ODkzN0NGMDJFREIwOERFQ0ZENUQ2MzFGQUVBCis6MTBERUUwMDAzQ0FFNDVCREM3N0ZGM0Y2NDM0OTFDRkJBMUQ0NjAzRjYwCis6MTBERUYwMDA2OEUzNDZEQjExMTdFMTNENkU1REJDN0I5REY3REM0MkJDCis6MTBERjAwMDBBMkFCRkY2OTMyREMwMUZEN0Q3QTVCOTYyMTJFMTFDRjM5Cis6MTBERjEwMDBGRUY4OTEyQTZGQzE1RTUwNjJDMjI1MThCRTVGQTQ3RUQyCis6MTBERjIwMDBBMEEyMUZGRjBBMUIzRjMyQUU5MzI4QkE3MUY3RTZDOEMyCis6MTBERjMwMDAzRkNFQzFGOENENUMxMURGQjFCMDEzM0MwRjVCQTZCRTg0Cis6MTBERjQwMDA1RjQ3RjUxM0JFNTc0OEY1NTIzNUM4NkZDRDJGMDJCRTU3Cis6MTBERjUwMDAxNzkzODBBRkNCQ0ZFNkE0RUFGNEE0REEyRTVBMUVEREU1Cis6MTBERjYwMDBBMURBMDE3N0E4RkEyNkU5QkM2NjM3M0EyNDhFOEJFODU1Cis6MTBERjcwMDA5REIxN0E4QjUzRURFODY4RjkxOEFEMTc4Qzc2MzVBNTBECis6MTBERjgwMDA1QjQ1NkYwNzhDRTExNzE1QUYzNzRGMUY5M0UyRDBDNzgyCis6MTBERjkwMDAyRDdGMTFGQkIyNkM2RUQwM0MwREU0NjYzNTQ3NjAxRkRGCis6MTBERkEwMDA2NDU2OTU1MURGM0I3Mjk5REZFMUM4NzUxQUNFRTFENjEwCis6MTBERkIwMDBENDE5RUIyNTQyM0RFMEFCNUNFNzBERjkyOTdBN0RDNDJECis6MTBERkMwMDA5OTQxRUVCMUZFMzZBQkY0RTA3QkY3QUMwMEVGMzcyRUIzCis6MTBERkQwMDBDOTY1RjY1MDQ5OUU5QzlBNEJEMzIzN0ZBOEVDODNERkZBCis6MTBERkUwMDBBMTE4NjlFNTQ5QUYwN0RBQzk3REMzMUU5ODk3NEQwNEFBCis6MTBERkYwMDAzRkI1N0M2RDU1RDExMTVBNkVGOUE5MDVERjlEMjQyN0Q3Cis6MTBFMDAwMDA2MkZCRjdBRTY2NEVCRThGRjI3M0JFMkFFNzFBM0M2QzE3Cis6MTBFMDEwMDA1RTBEOUVCMDUwNDBFMUM4NkM2MEYwNjRGNzBGNzJCQ0JBCis6MTBFMDIwMDA0RUVFNjVEN0IzN0FDNUI5MTY4M0ZFRjE0MzlFQzI3NzJCCis6MTBFMDMwMDA2QkFFMTZCRjBDQjVDMkVGQTE2NEQ3Q0IzQ0U4QkJDQzJFCis6MTBFMDQwMDA3RThFQThFRjZFRTI3QkE5OTk3RUQ2QkZDQjFGRTJFRTUzCis6MTBFMDUwMDAyRDhFQ0NCQkNCQjRBMjE4RjQ0NTU3OUFEMzBGRkFFMjVECis6MTBFMDYwMDA3Mzc5QzEzMjk4NzdDMzg1NzAxOEQwMzZFQkMyMTAwRjIwCis6MTBFMDcwMDA3NkRGRkUzQzc5MTY3Q0Q3RTYyNzk5QzU0Q0Q4MUY3NzBBCis6MTBFMDgwMDA1RTYwRjBGNTQ0RDEzRjIxQkJENTc1RTk2NUYwQjkwMjdBCis6MTBFMDkwMDAyNTAwNEY1QUEyODRFRjEwRDFCRjdDRDBBQjY5QzlBQTJBCis6MTBFMEEwMDBERTQ4MjM0MTc4MkY4OEQ4NjgzREIwODMxQ0I0OUVGRTlCCis6MTBFMEIwMDBERTI2MDk5NEMyM0U0MTI4NzVEQTc0RDA3MzBCMURGRTJBCis6MTBFMEMwMDA5MzM2RDBBRkQzN0REM0UxNURBMTE3MEVDNzhFQTdENzBFCis6MTBFMEQwMDBBQTdBODdDMjdGQTcxRUZFNzhGQzMxRkFERUJBNUFDRjMxCis6MTBFMEUwMDAxMkM3OEZENkU4REU1OTFEREI1RUE1OUEwMENCQ0JEN0QxCis6MTBFMEYwMDA3QUVFODZGOTM0QjQwQkY4MUI1RDFBREVGN0U3MDUzNkM1Cis6MTBFMTAwMDBFNkE2QzIzQTFERTE4MDVGMzNGQkNCOTFBRTMyMTU5RThECis6MTBFMTEwMDA4MDVERDFFRUM4MERDMTNCQjJFREM5OUY0QTA3RkNDNzc3Cis6MTBFMTIwMDA4M0JCQTFEOTJDREZBN0U3RTc3NjAxRDdFMzQ4RDRGOTcxCis6MTBFMTMwMDAzNUNEQ0Y3ODJDOTdFOUEzRDM3OTgxQUQzMEZFRTYxM0E2Cis6MTBFMTQwMDAwN0YwOUNFMDgzNDcyRjA5RTNCREVCNzNBMzc4RTNFQTc0Cis6MTBFMTUwMDA5OUZGRDJCMDg2QkQ5NzUxQkU5NjQ3M0FEQ0Q0MkVFMEU3Cis6MTBFMTYwMDBCQkVBMERDRjFFMEZFMzdFRjE3NjgyRkJBMDBERkRDNzRCCis6MTBFMTcwMDA0RkMzM0JBRDU5MERGMjRDRkRFRjEyNjQzNUIwNzdFMzYwCis6MTBFMTgwMDBEMjEyNDY3RjFGNTQwMEJEOUREOUJGQTIwMUU5NUEyNDc3Cis6MTBFMTkwMDAyMjQxM0EwQUEyREQ5NTZENjNGNkE4ODZERkQzNDIzOEE0Cis6MTBFMUEwMDAxN0UyNjdBNzREQzRERjQ2Q0JBRjU5OTQyMjg5RTZBRjhCCis6MTBFMUIwMDBGOTFDN0U3ODdGRTFFRjhGQkYyMTNEMDY3ODg2QjgxODg1Cis6MTBFMUMwMDBCQzdCOTAxN0ZDMTJFMEEzQkI5NTlEMjdFRjVFNDhFRDRBCis6MTBFMUQwMDAxRTVBNkZBMTkzNkM4NUZDQzIzNjE3MDFGRUI4NTEzQ0U0Cis6MTBFMUUwMDBDQzhBQTI4QjU5REIxOTlGRkMyODM3NTFFNTU3ODJFRjY3Cis6MTBFMUYwMDAyOTFEQ0Y0RDUwRURBODYwMUREQUFGNzQxRTlENzMxMDIwCis6MTBFMjAwMDAyRTlDODc5ODJCN0YxNUU5NTY0Q0M2NzEzMzFCQzI5Q0Y4Cis6MTBFMjEwMDBGRUZFODk5NjQ2RTg0QTdFMzYzN0Y1NjZFMEVDQzc3RDE1Cis6MTBFMjIwMDBDNjREQUE5QzI5NUY3Qjk0N0I1QjQ3MDcyRkU2OUE5MTlBCis6MTBFMjMwMDA2RTMyOUYzREMyODE3RjQ4Q0I1QjE3N0FCMDNFQzYwN0U2Cis6MTBFMjQwMDAzMzlGNjU3RUQzMjY1QTdFQkY0MUFFNkNDMEY5NzQzOUM4Cis6MTBFMjUwMDA5OEZENDhFNUNBNDk4MEVCOTQ2OTBCQkVFRjc3NkEzQUFFCis6MTBFMjYwMDBDMTc3NjZFRkI4MTAzRThERTI1OTg1Rjc5NEMwRDY5MzFBCis6MTBFMjcwMDBBNzc4NjhBNUY5OUZFNTRBMzhGRTY5MjE3ODFGQUNGQkFECis6MTBFMjgwMDBFOTRDNzZCRkJCQ0JCNDAzREYzQkQ1RjgzRTlBNEY3RjVBCis6MTBFMjkwMDA5NkNCRkNDOUNDMzU0NzM5ODgyNzc4OUNDQzlFRDRFMEY2Cis6MTBFMkEwMDBEM0VBOTVFNDU1OUMwNUZDQ0VBQTFFNDIzQzM0QUVFMTZGCis6MTBFMkIwMDBEOTdEMEQxNTlFODU0MkEwMDBGQ0I0NjFCNUJGOTNBQjFFCis6MTBFMkMwMDBCRjZEM0U0NEUxNkIyQ0U2OTA5RTlGRkNCQjU3OTEyRUE4Cis6MTBFMkQwMDAxQjdCMzhGNkJCNDEzREFGMEFBQjc0RkVENUMxRUZCRDI5Cis6MTBFMkUwMDA4QTdBNjVFOTAwOEIxRjM0MEUxQ0U3RUY3NTgxQkUzOTExCis6MTBFMkYwMDA4OUY0RDk0OEU5Q0Y1RTBBRUJDNkVDRDg2Qjk2NzAyRTRDCis6MTBFMzAwMDBFOENCNjhGQTc0NTYzM0I5MDgzMUQ3NDJGNjBFMUNFRUUyCis6MTBFMzEwMDBGRjg2RDZEQUQwRUVEN0U0QUZBOEMyMDlFRjA4ODI3QzM4Cis6MTBFMzIwMDBGRDhEQ0FFRjVBRkYxMTdGRDVFRTA3RkFGNkJEM0JGRDEyCis6MTBFMzMwMDAyNEJDRUJENkU4RTdGQzcwMUVGOTNGNDZGNTA5OTNEN0ZECis6MTBFMzQwMDA1MjIyRkM3NjYwQTRGRjY4RkNFNUU2MzFGOTFBNDM4RjlGCis6MTBFMzUwMDA3QzE4NEI4RjY4N0FENkY3NzQwNUJFOTdBQ0FEMUZBRkFCCis6MTBFMzYwMDBFMjdENTRCRkU3QjFGQjU3ODk3OUJDMEE4RkVDODUzODUxCis6MTBFMzcwMDBCNjQ0RjlCOUJCMTRERUY1MEIxNDRCODA5RjU0QTcxRkFDCis6MTBFMzgwMDBFMjNCN0ZFRjdFNUREQUEwQzNENzY5ODFGMjNCQ0Q5RjkwCis6MTBFMzkwMDBDRTc3MjAzQzk0MkY5MkYyNzRFQkQ3NTBDQzdFNjdFQTc0Cis6MTBFM0EwMDBDOUVGQUU0MEJDMzZDMERBNTFCQzM2MDRFRkJCMEZGMTRBCis6MTBFM0IwMDBFQzI1RTIzMTkwMkY0MTI2QkYxQUQ2RENDNURFMDVENzA5Cis6MTBFM0MwMDBGNERGNzMxQ0UyQkY0MTcxRTEzQkQ3NEJGQjU3MjA3RDZCCis6MTBFM0QwMDAxMjhGREQ1RkM4QTE1Q0MzNzVENkY4NENDQ0Q1RjYxRDk1Cis6MTBFM0UwMDBEOEJCNDNENEFGNkY4NTc4ODlFNkQ3MjdENjA1OTQwNDg4Cis6MTBFM0YwMDA2OTJDOUZBNkE4N0VGRDRDRDVBRkI3Q0NCNkZENTlGREM0Cis6MTBFNDAwMDBGQTREQ0QzRjQxRkZFNzIxRUY4RjMwRDVGODg0RkE4REVCCis6MTBFNDEwMDAwNjdFQkEyRDhGRDkyRDkyOUE1NkU0MzFCRURDNTREQTlECis6MTBFNDIwMDA4RkY0QkZFOTcyMTNGMjhGQUI5QUM5MTFENzA1QTNGQzIxCis6MTBFNDMwMDBEM0UyNjBENDgzNjM3NEU4RUM1RjA0RkIxMTBCQkZDMkNBCis6MTBFNDQwMDA4OTIwMDdFMkMxRkQxOUFFRTk2NzcwNUU4NTFDNjdFN0E4Cis6MTBFNDUwMDAyODE2N0NGMEYzNDRGRDNCQTQzNTc5OENCRUFGRjU5OUNBCis6MTBFNDYwMDA0OTE4RjBDRDM3MDlFM0Q5QkZGMUZBQ0IwOTU3Q0RGOUY3Cis6MTBFNDcwMDAyN0JBN0VGRkQyOTc4NEU3ODJBRTNEQkJGMkYzOTA1Nzc2Cis6MTBFNDgwMDA4RTI2RTEzOTkyOUM3MDJERDJDNTM1Q0YxQzNGRDA4MUFDCis6MTBFNDkwMDBBNzhERTFFOTVBN0YyNUQyQ0ZCQkU5OTIwOURFMDk2QjRFCis6MTBFNEEwMDBFRDdGNjIzRUZDNUU3NEJEMEFEN0JCREYzNTM3MDMxRUNECis6MTBFNEIwMDA3NjdDRUQzQkYzRTE1REM5NEQyMTJFMDVFRTlCNURFQkQ2Cis6MTBFNEMwMDBGQkNBMUY0MUVGRDUxRjdEMThDRjdEQjU3REYzN0ZBMTFFCis6MTBFNEQwMDBERDZEMEExRDYxREZGQjkyNDRBODc3RjU5OTAzRjMwMTE2Cis6MTBFNEUwMDBCRjZERkQ2RDU4RkVFRTMzNDczMDdGRjI2QkRGMzExRjlECis6MTBFNEYwMDAyQThERDBGMUJCREYzREYyQzNERjQzM0U5MDg4Rjc3MjM3Cis6MTBFNTAwMDAxQTgyNEYzRTBFNzk1MjlCQzhFRTVEMDU1RjExRjRCRjMzCis6MTBFNTEwMDBERjc1RjBGODIwRjJBMTQ2MTc0QkZCMzlGNUREMzAwMTJECis6MTBFNTIwMDBDRjc5NjhGNEZCNTY0NTcxMTlGMDFEQTU1MEJGNzkzRUFGCis6MTBFNTMwMDBDRDc3MjdENEM3OEEyM0VFNTFFN0RCMDBCNDA4RTNBRURBCis6MTBFNTQwMDBFMTQyQzAwNzVEODJEMjg3RjI1Q0VDQ0YwNTc5RUUyQzA4Cis6MTBFNTUwMDAwRTBCRjAyRUU5RUFCQUUzRjNEOUNGMTBCNjYyRjk0QTBFCis6MTBFNTYwMDAxQjNCMkYzNjhERjIwQkJDMUY0NTdCM0JGQTIxQzRGN0JBCis6MTBFNTcwMDBCQTFFNUMwN0ZEMUQzNjEzRDE5QzExODE3N0IzMjBBMTEzCis6MTBFNTgwMDA3RkI0Qjk4NkYzNTMwRTIzMUNEOTc2MkExNUY2Qzc5QUExCis6MTBFNTkwMDA4OTdBQUU4QkQ1RUJBMkVFQTUyRDE5RjUxMEIxRDNCNEM3Cis6MTBFNUEwMDA2QzVCRUMzOEU4OTM3OTJFOTUzRTE5QkY2NjBFQUNDOENCCis6MTBFNUIwMDAwNkY5NDEzQzU2N0ZBMTJGRDI1RkNFRjlBNjZFNzhERUQ4Cis6MTBFNUMwMDAzRkIzN0U2ODExQ0M2MzQ5RDE4NjE5MzAwRjBGQzRGQjZECis6MTBFNUQwMDA0MEJGMjgyRUVDQkYxMUUyOTM5NDlGQkVBQUNBQzczNDU1Cis6MTBFNUUwMDAzMTgwRUY4Q0Q4RTQ0MDJBRkMyNjlCNjQwREUwMzk2RTI0Cis6MTBFNUYwMDA2OTdEQzBEMjBBNzI4NjFGQzk1RDg1OEFGMDk4NjFGRjY1Cis6MTBFNjAwMDBGMEEwMjU5ODMxMTNGQUVCNTJGNUQzNTEwNjNGNkQ4RkU4Cis6MTBFNjEwMDBGRDQ5OTVCMjA3REFEM0ZFQjEzRjVCOURDQ0UzNkZCRUY3Cis6MTBFNjIwMDBEOUQ4M0FGQ0VCMEY2RTNGNjY4Qzk3ODdDNkY0NUZFQTQ5Cis6MTBFNjMwMDAwMkZEQTJBQ0MxNzU5MzA0OUNFRkJCNTAxNUYxQUREQzlCCis6MTBFNjQwMDBBQThGNjM0N0M3N0I0MDlFQzE3RUVGRTlCQ0YyQzFCQzg1Cis6MTBFNjUwMDBENDQ4QUFDNTgxQTJGMUNDNEJCNDlDRjY1MzIxQzk5OEU5Cis6MTBFNjYwMDA5MkJFMUJCQjc3QTZDOUVEQ0Q3QjU0QkRGQkUyMjU5NEMyCis6MTBFNjcwMDAzQjlCODMzQ0QzQkJDMUNCQTg3N0ZGQTU0NTI2NkY1M0ZCCis6MTBFNjgwMDBDM0YyRTBGMzk3OTBCRUVGM0RDMUY0RUVFNjEzMjUwMjJFCis6MTBFNjkwMDBEMEIzRjYxRUYyRTY4QTZCQTg3RjE1MzM0MUJBREUyQ0EyCis6MTBFNkEwMDBGNDlGRjY0MkZGRERDNDREMkQ3QkIyNzlGRUYwMkQyMEE0Cis6MTBFNkIwMDBGRjdFRkRCQzdEMERCNDNGNjUzMjIxQkQ5REVBRkRDNEVBCis6MTBFNkMwMDA5MTM2NEUwRjFGRjMwM0I4RkExMEYyRTM2NkQ1MkUyOEU5Cis6MTBFNkQwMDA1RjdCREYwMUYwQzcxQUVCRDlFRjExNkMxRTUwRjk4QjhECis6MTBFNkUwMDBGQTYzODBERkNEMjc1RTQ1RkFEMUVDNUVERkQzMzU0ODkzCis6MTBFNkYwMDA2RjZFNEE2RkY4QkIwOTU1NDMwODFGRkRGMzE3RDJENDVDCis6MTBFNzAwMDA1REM1REVDNTVENTI1NDUyMDZGNDc2NzJGNTBGNzc4MjEwCis6MTBFNzEwMDBERURFNUM0NTQ0RThGRjYwOEVGQzNDQkVGRkZCM0M4N0QwCis6MTBFNzIwMDBFRjUxMUVCNEY0NTRDMDNEQzk4MzBCMjUxMUY4NjM3MzM3Cis6MTBFNzMwMDBCMDc2NTQzRkUxRjlFQTYwRUQwMEYyOEY2NzlEMUZFQzdGCis6MTBFNzQwMDA4N0VFRDYyMERBRDVERDE5NEVCNDBCMEUzRURGOEFGQUZECis6MTBFNzUwMDA3M0IzRTRGMEMzRUY5OTJDM0RDMTZEQzVGNjhBOEIzMERECis6MTBFNzYwMDBGODM5QjRGMzk3ODY2RUMzNzM1QjFBM0U5NjU2MERFNzdECis6MTBFNzcwMDAzMjc5QzFFMEZFQjU2NUU4RDMzMEVGNUY3RkNGMEE2RjM1Cis6MTBFNzgwMDA3RThGRDJERkZGMDVENjQwQUU1NjAwODAwMDAwMDAwMDJECis6MTBFNzkwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkREN0QwQjc4NTRENUI2Cis6MTBFN0EwMDBCNUYwM0E3M0NFM0MxMjI2OTM5MzI3RTFFOUM5MDMwOEVBCis6MTBFN0IwMDA5ODg0MTMwOEVGODcyNzA0MTAyQkI1ODNGMkIyMjIwRTNBCis6MTBFN0MwMDBDODIzNDI0ODQ2QzQ4QUQ3N0UzNzgzMDMzMTUyNkY2RkNECis6MTBFN0QwMDBBQzJGRUFBNTc2QTA2QUQxMkIxMDZEQUM1MTAzMERBODIxCis6MTBFN0UwMDAxNEFCQjVEMTUyOEExNkJEQTMyMjJGOTE4Q0UwODNERUUzCis6MTBFN0YwMDBEMkYyQUZCNUY2MzlDOUNDNjQwMjYyRURGRkY5RkZFOTk4Cis6MTBFODAwMDA1NzM3RkJFQ0Y3REFFQkJERDdERTkzMzZEOUJGRjE4RTg1Cis6MTBFODEwMDAzMjgwMkJENTYxQkFBQzAzQTQyQjZEQkUzQjMyMDFEMjQyCis6MTBFODIwMDAwMEY0MzU5ODZGQjA3QjlEM0E5NjQ3RkU0MzBBNkRDRTUzCis6MTBFODMwMDBDNUVGRDNDMDA4MTUwMUU0REYyMzE5MjEzNzQwOEEyNjJDCis6MTBFODQwMDAwMTY0NTE2QTMzNTMwN0MwMDhDMEJGMDY5MUFBODExMjAwCis6MTBFODUwMDA2RjMxQzAyN0I1MDY3QzM4MDBGODRGQ0IwNjU4Q0VGRjg1Cis6MTBFODYwMDAwMDU4QjFBOEQ1QTE2MTdGNTU0Rjg5RkUzMjlENDZFOTc4Cis6MTBFODcwMDAyRDk4OUVBM0JGQ0IzMDVGMDEzNzc4QjEzQzRCOTY2RThECis6MTBFODgwMDA5OEMxQTk4RDUzQUJEQzRBODc5OUYzQzg3RDY0RTFCRDdCCis6MTBFODkwMDA1MzcwRkVERkE5MDQzRDA5ODdFODVEODhERjMxMEY3RUY0Cis6MTBFOEEwMDAwODBEQzBGOUY3QUVGNEY2RDVBODNDNzNBOTJFNjMzRTY3Cis6MTBFOEIwMDAyQjAzQkU0RkU1OTEzNTBFRDgyQzc1RUQ3NzI0QUQ2QjRCCis6MTBFOEMwMDAwNEQ1RjM5NjQ5NTgyRkFCNjc4QTFFQTRBMUU0NzI1QjY2Cis6MTBFOEQwMDAxMkI1MkI5NUY0Q0QxQUU1QUY3RTE0MDg0RTU5QkQ3NEQwCis6MTBFOEUwMDBFQTA3MjA2NEMyQzE1QjY2QzM3QTQ3QjM1M0Y0RjVGNDA4Cis6MTBFOEYwMDAzREY0MDdFNTZBODRDNzI0NERCNUNBNEJBOTlERTYwMURFCis6MTBFOTAwMDA1ODVGREFEOTZFNEFCRTk3RkI5QkQyMzM0OTBGRTIzQzdGCis6MTBFOTEwMDBBNzM3MDQ0QTIwNEZDMEMxRUJFRTg0NDM2ODRERjJEQ0I4Cis6MTBFOTIwMDA1MDE0M0NDNjEzMUNCMDdENjgzMENDNkQyQzIyRjg3QjkzCis6MTBFOTMwMDBBQkE4OUY2QzlCOUVCMTFFMzcxNURDODE5MjZCNTI2ODExCis6MTBFOTQwMDA5QzIwQzM2QjAwQ0QwM0QzMjlCODNFM0ZGNTlCRUY1RDAwCis6MTBFOTUwMDBDNUYwQzg0QUQxMTNDMTYzQ0YyNTAyMUVCQkU3NkM5MzMzCis6MTBFOTYwMDAzNzYwQkRFQTIyMjlFNEM0RjlEREZGRTI4QzUyNUE2NzIwCis6MTBFOTcwMDBGNTRDQjcwRTk4QUZGNjI5MEI2OTVDMDhCOEUwMzFDQ0JFCis6MTBFOTgwMDA4MzZGRDFCRDUzMzA1RjVERTlENUQ3NkJCQ0VFNDU1NDg1Cis6MTBFOTkwMDBERTM3MzM0OTVGOEZFNTBGM0UyRjE5OTRBRjBFQjg0MzMyCis6MTBFOUEwMDA0OTk4QkZCMjU5RTA0Mzc1RjNEM0NBOEQ5OEY2MjBCQzlECis6MTBFOUIwMDA3MzUzQkI0MEM5OENFMkNFRjkwMEFDRTFGOTU0NEYzQTM1Cis6MTBFOUMwMDBEMUZGNjU2QzFGOTA0MTk3Mjc2MkRFMTExRUE4RTNGQTA0Cis6MTBFOUQwMDBBQjI3ODYwNzEyQkM0RTNFOUYzNDk3REFCRjYyQjMwNTYxCis6MTBFOUUwMDA2ODlDNTczNjVGQkEyOTI4NzVFREU3QTRERERCNDRFQjU4Cis6MTBFOUYwMDAzRjg5RUIwRjYwRjk2RjlGRkY3Mzg4RTg2MTJERDI4MzI5Cis6MTBFQTAwMDA5QzgzN0JCNDQ2MkJBN0YyRjU1MzQwQTU3REIxRjY2QkYyCis6MTBFQTEwMDA4RjIzNTA0ODc4QjUyNzJGOTlGMTgzRTZFOTQ1MzgxRkIxCis6MTBFQTIwMDBBNzdGRjYwMkI4RjUxMjZGOEQ4NjcwQUVCNkI1RDYyOUZGCis6MTBFQTMwMDBENDZFNEIwNkMwMThDQ0JGNzBGNzQwOUZCQjJCOUNCMTY3Cis6MTBFQTQwMDAzREVGOEI0QjAxQzY1RjU3QTg0NzI4MTg4NTU3MkUxN0Y3Cis6MTBFQTUwMDBEMkRBMzA0RTAzNkU0QzdCQUMxNkYwODlFRkU3NEVDRDI4Cis6MTBFQTYwMDBDREZEQUM3MDg1RjdFMENFNDFDREVBMDY1NzM2RTI5MTk4Cis6MTBFQTcwMDAyRjU5RTNFRjQ5RjY4MEQxMDdFN0UzNjgyRTZGRUQ4MzY2Cis6MTBFQTgwMDBFNUQ5RTlGODFGREFCN0NEM0Q0MkI0NkZEOUQ5RTA3QkJCCis6MTBFQTkwMDAyNjQxQkZBQjRDM0NCM0Y2QTUyMTFEMTgyRkIzM0RBMkI4Cis6MTBFQUEwMDBGRUNGNERCQUY5ODk0OTk3NUJDQzM0OEEyRTYyRjFERUVDCis6MTBFQUIwMDBFRENCMjUzRTkxOUQwQ0JFQzYwNEUzNTlFRDcxN0U1QzA1Cis6MTBFQUMwMDA2RUNEMEI1Q0Q4NEYyNkI1RDM2QzhDREY3MTc0MTdDQTMyCis6MTBFQUQwMDAyQTFFNDY3NDM3MjU1OURGRUQyMjdBMUE5NjNCMkMwOEY4Cis6MTBFQUUwMDA5REUzMjAyNDcyNjdBNDc0QzUwMzVBMDdEMTBGQUQ4QjMwCis6MTBFQUYwMDBFOEFDQkI3QTBEQkIwNDdGOEFDN0NCNjc0QzNBQTkyMjJFCis6MTBFQjAwMDA1Q0M3Nzk2RjkzOTAxRTEzRUVCM0U4QTdERTk2NkI3QjFDCis6MTBFQjEwMDAxMEU3RkJBM0ZEMzJGM0Q5Rjg3QTU2QkFBQjE2QTA3NTBECis6MTBFQjIwMDAxMDQwREVDNjZCNTNCREM1REREN0RCNjZENkZCNzFBRENECis6MTBFQjMwMDA4QjUzQjdBRUFENTFCMEZGQTEyRDVBQTkwQzM0OUUzNjAwCis6MTBFQjQwMDA4OUM2MEJFMDc4QjRDRjI5MTNFMTUzMTlFMUUzMTlERDRECis6MTBFQjUwMDA1MDc4NjcyRUUxNzlFMzVDNUFENzUwMjU2QzJCMjVCRTlGCis6MTBFQjYwMDBFQkI1NDE2QkExRTBERkU3RjBGRjNERTcyNjQzQUJBQjQwCis6MTBFQjcwMDAzM0RGQ0I5NzFFOTNFRjUzRDkzQkE2N0UzRjdGNUU0QzhFCis6MTBFQjgwMDBGOTI1QUI4N0M0OTRFNzA2ODZDNUU0RjNFQkM3QzZENDgyCis6MTBFQjkwMDAxRkQwMzAyOTI2M0Y2OEMzNzc2MkVBMEYwRTVEMUQ5M0IwCis6MTBFQkEwMDBCRjc0Q0JGNzYzRUExNzM3MkU4QzI5OUZGNDhGRkNEREY3Cis6MTBFQkIwMDAzRjI1M0NBN0Y1MjdFMDczNTYxQUQxNzI3OUZGODYzNkI4Cis6MTBFQkMwMDBDN0FFM0Y3NTc0RUNGQTE1ODgwMEQxRkJBNEU0QkZFQTI4Cis6MTBFQkQwMDA4OUU4RDk0QTUzNDFGOTJDNkNCNTIzM0VFMEQyNkMwRjM5Cis6MTBFQkUwMDBFMjNDQ0FGRjJDODdENjI3OTg4Nzg1Q0Y1NjdFOTIyMjkzCis6MTBFQkYwMDBDNzhDNkJGMTg5MEJFMTU3OUVFRkZDRjhGMjYzQzIxN0VCCis6MTBFQzAwMDBFNzc5RTZGRDBGMzkyMTVEQUFCOTgyMEYyOEUwRTVGNTI1Cis6MTBFQzEwMDBBNzRFOUM3QkRFRjVEQkUzRDcwRjFBRTNCRDg3RDY5RkJCCis6MTBFQzIwMDAwMEVGRTNENzlGM0EzQTc2MUZBQ0Y1RTdGOTA2Mzc4NzRFCis6MTBFQzMwMDBCMTlGQ0ZFNzRBMkM1RkY2NTFEMTk4QUVGREJEMUJCNzBGCis6MTBFQzQwMDBDRUQ5QUI1MjU5OUYwMUVGMzUwOUVCNzdDRUUzNEU5RUZCCis6MTBFQzUwMDBDN0Y1NEVGMDI3ODJDMzc0MTMwRTk1Qjk4MkRFMkY0NDk4Cis6MTBFQzYwMDA5RkVGOUJGM0Y4MUZBMjRGNENERDZCNzM5OTFFNjE5RkMyCis6MTBFQzcwMDAxQzFBODA1RDJEQUM5Nzc2RjU0NEJDNDhGN0I5NTkyRjI2Cis6MTBFQzgwMDA1QkE4QjQ0MjY5OTQ5Q0JGREZBNEVGMDc0REZBREU1MDQ1Cis6MTBFQzkwMDBBQjcyM0YwRkQ3RTY3MEJBQjE1NkUzRUY4RkQ0MTY3MjVFCis6MTBFQ0EwMDAxQUFBRDVGOUZCRTZEQUQxOUMzRThBRkExOEE1OEZEN0M1Cis6MTBFQ0IwMDA0RUUzNzQ0QkFEOTdFQjNENTkzQjk3RDNBNzZBN0RGQzcwCis6MTBFQ0MwMDBERERBOUZFQkNERkQwMTZGMDZDQkIzRjhGNUNDNUY5NTk4Cis6MTBFQ0QwMDAxODJGNDEyRUUyRjZGMzkxQ0VFNEYzRjBCNTJFRURFNUQ4Cis6MTBFQ0UwMDA3OUE5RTdDM0EzRDUwNzczQjdCRjFDODUwN0Q3RTVBNkU2Cis6MTBFQ0YwMDA2NDFFRUU4MUZGMTgwNUEzQ0VDOTE3NkVGRjY1QURCNjgxCis6MTBFRDAwMDBGRDY1RkI4NUU5QzJDMjE3MzhGQkUxODA0NEY1QUVBNzdCCis6MTBFRDEwMDAzMUM3MjJCRkM5REREQzEwNzA3NzBGOUY0RTNDOEFDMzFDCis6MTBFRDIwMDA1NzJGRTIyQjdFMkQyMUQ5REU4QkNBQzNCREEzQzdGOTk1Cis6MTBFRDMwMDA5M0I5Q0Y1NjdFRTY0QzgxQUZGMUZEREU2RkUyREYyQzVBCis6MTBFRDQwMDBDMjRGMkM5RjFENDdBRkE3NzM4NUZDM0M5RDJCRjRGNDRECis6MTBFRDUwMDBGRERERjA4QjdCNzI2REE2RkMxNEZCM0U2QjlGRTA0QkUwCis6MTBFRDYwMDA3N0Y2OTgzRkMxOTc2MDVDMjk0RjhCQTFDRkQ5MzM2MzY5Cis6MTBFRDcwMDBGNzcxQkY1REYwQjdGRDdGOTI0MzZCMTJFQ0ZGODVEQTUwCis6MTBFRDgwMDA1QkVCODk2RkY3Mjc3M0JEOUZGRTdGNDY2RkZCQUY0RDJGCis6MTBFRDkwMDA2MTdEN0VCRkRERDcyRjJCNkE3RkY2NUZEQjYzNkVBMkJFCis6MTBFREEwMDA3REZGREY1Q0JCRDhBRjQyMTU0OEJFNDMzQTE4QTQwN0NECis6MTBFREIwMDBFMTkyMDIwRUQyRTVBMDQwM0Q0Qzc0ODJDNjEwRDE0NUNFCis6MTBFREMwMDBGNzc4QTlDMDYxOEI5RTY0ODI2NzEyRUJFMzlGQ0Y0Q0ZBCis6MTBFREQwMDBFMUZEMDc5RjZBNDA1NEZGQTBBOEFDOTc2RUZCMkVFQUE2Cis6MTBFREUwMDAwQTM0OUU4MkUzQTExRTBBQkFBRDczRkZGMkU4QkZDOURFCis6MTBFREYwMDA5REZDNUFFRTlFREUyRTg0MDcxNjFGOTk0RDdDRTQzQzQ2Cis6MTBFRTAwMDBGMkJBNkJCQjhCRTMyMzg3ODg4RjVDRkFDREYzMTE4QjRGCis6MTBFRTEwMDA4RUUxRUM4RDAzQkMyOTVEQ0I2NzExMUZFOTBERjBEM0FBCis6MTBFRTIwMDBEQ0I3OTk4RjdDNkQzODU5NzQ2QkVBMTNGMUZDQTREQjY1Cis6MTBFRTMwMDA3NkNEOTkxNzkwN0YyNjNGNTdGQ0Y1NjFDNDhCREJFNEI0Cis6MTBFRTQwMDA5NDg2RjVEOEU0MkVDNUZGNzNDQTA3MDIwQTNDODZBOTRBCis6MTBFRTUwMDA3M0Y1RTlERTg3ODY3M0I3ODUwQUQ3MUJDMkY2OUQ1MzIzCis6MTBFRTYwMDBGMUZGMzJDQ0Y2QTA1M0E1N0EwRkY1RjhGN0VEOTQ1RkQ5Cis6MTBFRTcwMDA4RDFDRDM4OUU5OTc0OUZENDM4MEI2NDA2OTlFRTAzRkU4Cis6MTBFRTgwMDBCMkVCNENFRjQzNTFGM0IzQUJEMDI3M0E1RkRBRUFFQTg3Cis6MTBFRTkwMDA3MzI4NkFERjg2RUY1NTYzRjIyM0RBNzI2MkVBOEYzQUVCCis6MTBFRUEwMDBBMEM1OTQ4RjA5MTdDNjk0OEYzQkFBQzdFNDI3NDQ0NjkwCis6MTBFRUIwMDBDN0Q0QkZFQzhDMTE5MzJGODcyQjYyRUE1N0I4NjZDNDc2Cis6MTBFRUMwMDBFNEE3QThEN0M2RDRCRjNDNjc0MTRDRjkxNURBNERCMUM5Cis6MTBFRUQwMDBGRDE1Nzg4N0U3RTFCQTE3M0FEQ0Y1NTIyQURBNjlCOTA1Cis6MTBFRUUwMDA0NjE5RTU5MzkzQUJGRDBCQzg0RTVBRTM1MTYxMjJENTA5Cis6MTBFRUYwMDAwRTg1MDg2RTc1MEU5N0JBMUVGOUQ0MDc5MkQxMUYxMEIxCis6MTBFRjAwMDA0RkVGQjNBMUQ1OUQ4RkY1RTUzMDUwN0FEMEE2OTc1MjNCCis6MTBFRjEwMDA5QTY3NkNGMTExOUQ2RTJGNENENjY4MUY5MjA3MDJCNDUwCis6MTBFRjIwMDA5MTlDNTJGNDI0NDA3RUUyRTgxMUY5NUQwMUVEQ0I2RjMzCis6MTBFRjMwMDA2Q0YwMTgyNkRCNTU1NEY0QTk3RTczNjY4OEVDREZBQ0MwCis6MTBFRjQwMDA2NERGMTUzNDhGRjVCNjA2Q0YxQURBNjcxQjc4MUZDQjRFCis6MTBFRjUwMDA2NEJDRkFDOTY4Q0MxRjdFNDFCMTExOUU2RDZGQjFEREYyCis6MTBFRjYwMDAzMzE2RjM5RjYxRjczMjk2MzdCNTlERjhDOTk1OTgxRjEwCis6MTBFRjcwMDBEQTY2RDdBOUY2NTA5MEQ5NEU1Q0FFQzAzRDRBN0FGNzEyCis6MTBFRjgwMDA3OEY2RjEwRjg0M0QxNUZGRkQ2Nzc5ODJERjY3NTUwODNDCis6MTBFRjkwMDAzQjMzQkVGQzhFM0MyMURGM0U3NjI0MkU1RjZFQjZBRjQ3Cis6MTBFRkEwMDBCODZCRkE0M0M0RDdFQzZENzYyMEJGQzVBQTJDQTMyNzUzCis6MTBFRkIwMDA5QzRGNUYzRDkzMEZBMUUxNTE3OUM1MEJBQTlCQkUwRkZBCis6MTBFRkMwMDBFNEVGMTU3N0NEODNCMDVCRjQ0MzdFQUM1NTQ5NDY0RkYzCis6MTBFRkQwMDBGMjNCN0MzQzI5RjEzQzZFMzFFNzYxM0ZEM0EzOUI3RTQxCis6MTBFRkUwMDAzREZDRkRFM0JDRjNBRkQzN0UyNjA5NDIxOTg5REFCQkIxCis6MTBFRkYwMDBGOTdCNTYzMDcxRkI3QkNDRjEzRjRFNEY1QzVFREZEMTJECis6MTBGMDAwMDA3RjJGMDg2NDQ0QjcxMzdDQTc3MzlDQkU1QzZFM0Y5MzRDCis6MTBGMDEwMDAwNjgxODRFQkM4RTRFRjkwNjNFNDEwREVFQzQyM0EyNzBCCis6MTBGMDIwMDA3RTUxOUU5NkVEMDAyNEYxRjkxMDc5QzU0MEY4Q0YyMDZECis6MTBGMDMwMDA5MzAwRjExNDVDN0EyOUYxMjk1MEVDOTFCMDQ1MTcyODFFCis6MTBGMDQwMDAzRjE2ODBGMjAxRDkwQjM2NDRDNjczMzhCNTFCNTZEQjI4Cis6MTBGMDUwMDAzRjA4NDdEMUQxMEMyMzM2MEY1NDNGNEFERTdDNDI3RDE2Cis6MTBGMDYwMDBFMzdBOTI4NzE0QTYxMkJFOUYwMjJENTU0RDgwNUY1NkZCCis6MTBGMDcwMDAzQUNGMjU3Qjk1QThGNTFDRUM0NjRGNkEzM0UxNzhCMDcyCis6MTBGMDgwMDA1NzYyMzgzRTZGRjJCMTkxRjMyMEExQkVENjk2RTcxMUQ4Cis6MTBGMDkwMDA3NjU5QTFERUYzN0M3MjgzRTBFQkNCODhFRTM3N0UxRkRFCis6MTBGMEEwMDAzMkI5RkNBQkMyMTlGMTgyRTU3QUU0QkJFRTEwRkIyOTYwCis6MTBGMEIwMDBCRjcxNzg1QkY4REQyNzA2MkYzRUM5OEY5Rjc3N0YyRUMzCis6MTBGMEMwMDAyRkU4RUI3RDJCOEZFNThBMzY5MEU0NjI5MzQ5QkY0REE0Cis6MTBGMEQwMDA4QUQxNjM5ODlCRjgxODU0MjY4MjdGOUY3QzUzNEY4RDZBCis6MTBGMEUwMDA1Qjc3MTMxODM5MEJDOEFGQTFEODc1RTI2N0M5MzJGODNFCis6MTBGMEYwMDA5RjRFMDBGRkY4NzVBNzlBRjNDNkY2NzM1QkE5M0Q3ODlCCis6MTBGMTAwMDA3NEMxRTdDMEVCQ0E0NjNEOUZGRTg1NEIyODBGQkM2OTIyCis6MTBGMTEwMDBBN0ZFRTdGOTNERkE3QTU0ODEzRUNGMTNGQUY0MDIwOENDCis6MTBGMTIwMDBEQjg5MEY3NzgxOUYzQkQzNEU3RURCNzgzODdBNDE5QjFBCis6MTBGMTMwMDAyRkU1NUYxODlFRTkwNUM2RTcwNDFGOUI0QkNEREU4QUNECis6MTBGMTQwMDBFQjlDMUZGMDAwRjk2OTZFOTgwNzlFNjI5QzhGRUZCQkU1Cis6MTBGMTUwMDBFOTZGMTg1ODc3RTE1NTQzNEFENjUyN0FFOUY4M0E5OTU3Cis6MTBGMTYwMDA1QjRGNjZCRDRGMEFGNDkxQ0Y1REZBRDVGNUJFM0E4RjdECis6MTBGMTcwMDBBRjkwRThFMzkwQTQyRDYxMzg0ODA4MDc5MjM3QkQ4RjFGCis6MTBGMTgwMDAwRjVDMTAwNUM3MTVGRENBN0Y5RjlGNDVFNzAzNjA2NEFDCis6MTBGMTkwMDA5MEJGNzg4NzkzRkQ1NkIwMDE1ODBGQUREOTM5NzgxM0Q5Cis6MTBGMUEwMDBDOTg1MkZGMjdEQUY1MUJENTE5MzRERkZBRDExMTk3ODM3Cis6MTBGMUIwMDA3NUNBQzVDMzBCRkZFQzQ0MjcxNzgyOTc2Q0QyRkI0MTdECis6MTBGMUMwMDA0RjYyQkMxOTk3MkZGNkVCQUJEMjRCNjZCRTgwNDMwNDVGCis6MTBGMUQwMDBFMUIwQjlFQzlCQTcxNzg0NUYwQ0ZGNzgyRDVGRjA1RjVGCis6MTBGMUUwMDAyQkI1RTAzNjZBNUFBQzdGRjczNTczMURBRkU1N0IzODM3Cis6MTBGMUYwMDBGRDIyREZDQjcwNkVFRkY3RTlFMTI0OTJGRjBFNUM3RjFBCis6MTBGMjAwMDAwMkJDRjc3NjQzMzdEREFEQkYzQjdBRjlBNkY4RjJDMTExCis6MTBGMjEwMDBFNEM0RjM1Q0ZDMkQ5OUU3MUIzNDRGRTJGMzI1ODlFNzQ2Cis6MTBGMjIwMDBGOTZGMTc4OTRGQjgzRjRCNUNGOURGRkMzQ0JGQzgzNzFCCis6MTBGMjMwMDBERUM4QTc3OUE2Mjc5RUU3NEYyRjEyOUVDOEVDOTZCNDhBCis6MTBGMjQwMDA2MkJERDlDODA3QTlERTM3M0Q1RjA4MkM5ODQyNzJFODM1Cis6MTBGMjUwMDAxQTlGRjBGRjE3MjNDNzI1M0U4NDUzNzlGNERDNzBEMjQwCis6MTBGMjYwMDA2RkY1NzUxQjg4RUZBQ0Y0RTgwMTk1RjlDODFCRjk4MkJFCis6MTBGMjcwMDAwRjgyODFGMzk5Mzk0RDYyN0Y1MkZCODg0Rjk3Mjg4NDIyCis6MTBGMjgwMDBFRkQ5RDA5QTQ2RkM2QUE3OTNGREQ5RjFFQjBGOTlFQjIxCis6MTBGMjkwMDA0NzNBNzk5Q0UwMDREMzIzMDM4OTlGMUMxQzk4OTg0RjFDCis6MTBGMkEwMDAzQzFFNUZCRjNFQzJGMjY5N0Q3OTYyRkQ3NDlCNDlBRjJGCis6MTBGMkIwMDAyQjVDMEREM0IyNkREMUU3MkJCODQwOTlCODZDQzBFODg4Cis6MTBGMkMwMDA0M0YyQjY0QzVENEJGQ0M0ODE3Mjg5RTBFQUU4MzNBNDlBCis6MTBGMkQwMDAyN0VEMDdFNkJEMTJGOTgxNzM1RTNGMjA3OTE4REUyNzFFCis6MTBGMkUwMDAzQUUwOTdENzM5Q0VGMURBQkQ2QTgxQkQ3QjdFQkU1QzRDCis6MTBGMkYwMDA3RTY2QTQzRkMxN0FCNjZBQkU1REY5NTE3NkUzRjIyRDBGCis6MTBGMzAwMDBBRkFBMDVEMUZFNzEwOERCODAwNTQ3QzRFNkU1RjM0MUVECis6MTBGMzEwMDBEMzZGRDAxMzJFQ0E2RjUwOUMyOUU4NjU0NTNGMkZDQjgxCis6MTBGMzIwMDAwNzkyMUI2NDNGRDdCRDMwQTY5NDM2MTdGNTBGMjBGQjFDCis6MTBGMzMwMDAyMDkyOTJDQ0YyMjJEODdCNkNBMTE2MDVDRjBGRjMyRDMwCis6MTBGMzQwMDBGRDUzRUU0NkFGNzRDNDdDN0ZCN0Q2ODUyNjY1NjdGRTU1Cis6MTBGMzUwMDBGQUEzRkJBNjkwM0UzRjFGQzJFQkE4RkVGQzU1M0RFODdBCis6MTBGMzYwMDAwOEIyNjM5RDFERkQ5RDkxNjJGNERCQ0VGRTE1RkU1RTJECis6MTBGMzcwMDBFRTcyQjdDQTQzMzE3NUZGMkVFMTdFNkNENThDQTMwNEMzCis6MTBGMzgwMDBDRkI1RkQ4QzYzQjRDRTc4RjgwNUVFMUE5RkM2N0UwNDI3Cis6MTBGMzkwMDA4MkRGNjU1REY3QkRCQjdERkVBQjY2OUNBNkZFNUVFOEM5Cis6MTBGM0EwMDBBNzVBN0UxRDlEQ0ZFMzkyQURGMzYxNDUzREVDRUE4NDAzCis6MTBGM0IwMDBGNzU3REQ5NzY0RDNCRjg4RkFDNDM5OUFCNzAxNTU3RUYxCis6MTBGM0MwMDA5QUNGM0M4QkJFRTNGNDFDMjgxNEZFODAzQTRGREJCQTg0Cis6MTBGM0QwMDA1RDUxNzQ3ODgzMkQ5MjI1RTQ3Njc4MUQzOTk5RkU2NzA2Cis6MTBGM0UwMDA0NzEyRjM4RkY2MURCRkVERTdFM0YzMzQ0QkVGRTgyMTRGCis6MTBGM0YwMDA5RkVCRjFENUU3NjdGOTE3RUNDOTg5RjU2OUVCMUM2MzU5Cis6MTBGNDAwMDBCN0JEQTg4MEY1MTIzQUU3MUQ4RDc5NDk1QjQ0RjZBQThECis6MTBGNDEwMDBBMjgyMUVDNEY1OTU1RjhFRDg4NEZENEQ5MkZCQjY4NDAyCis6MTBGNDIwMDA3MTFEOUZDM0Q5RTQwOTk4RkUyNzg4RjVBRjdBRjNBMzJECis6MTBGNDMwMDA3NEYyNjM0RTUyRUNDN0EzRjk1M0JDMUY2ODQwNDFBQzUxCis6MTBGNDQwMDAzRkY5MTRDQzRCNkQyNUI4OEM0RjY3Qjg2QzZGOTk5NDBECis6MTBGNDUwMDA0QUZEOTQzQzNGQjkyN0E1QkI2QUVCNTVDNURFRTkwRkQxCis6MTBGNDYwMDA4QTlGN0Y3OTM3NzZFOUIwMDJBMTc3QkU5RTZDMEMyQjFDCis6MTBGNDcwMDBDMEI0QkM5QkY1OEYzMkVCODU5MzhENTEwNTU5OURGRDMyCis6MTBGNDgwMDA1MUZENDRGMTEwNkQ4MzJDM0ZBRTgwRUIzNTgxMDVBQzBFCis6MTBGNDkwMDA2RkQ5NUNDODU3ODk3RkEyRkUyQUFCRTQyNzJDQjAzMzEyCis6MTBGNEEwMDBCRDFCQTBBOUQ5RUMzNzE0RkI4RjdDNURDMUZDMDQzM0Q0Cis6MTBGNEIwMDAyRkQ1QkYxREE0NzYxQjZGRjFGMDM5MzhGODM0MjBGOTMxCis6MTBGNEMwMDA4MDgwRTE3MzgxM0FDOUNGN0UwNzE3QzU3RDYwQkE1RTNGCis6MTBGNEQwMDBEMjM3OTAyRTI2REIyMjE5ODIyRTQyMjJBRTAxN0MwQUUwCis6MTBGNEUwMDBFNTdGMkI4NTgzMTQyN0IwRDZGNUVGM0YyNzNGQjgxMTcyCis6MTBGNEYwMDA1NDIwNjkyMkU2MTU2MDNGNjNFMDYwMEE5RkNCRjFDQzlGCis6MTBGNTAwMDA3MDFFNEU2QjVFNjYzRUM1Q0NCN0NGOUEzQTZEMDBBNkI0Cis6MTBGNTEwMDBCNzI1M0ZFMjIxM0MwRDRCQzg0N0IxOUYyRjkzRkZCRDVDCis6MTBGNTIwMDA5NUU5QzY5RkFDREI3QjkzN0ZFOTNEQ0U0QjJCOTM3NTcyCis6MTBGNTMwMDAyOTg3RkM0RjlFNDJEMjUzNTc0M0IyRUVDNDcxMEM3N0Q5Cis6MTBGNTQwMDA3MTgwQzY3NTY4QzBGRUY4NjQ2OEU0NzVCOEREOUYwNDE0Cis6MTBGNTUwMDAwODI4MkFBODEyREI0RkM5QkU2NTA1NkNBRjAwOUY5MzJGCis6MTBGNTYwMDAxRjdFMkY2NTMzQUQzRjQ5M0RENTdBMDc3RUNBMDA4M0E0Cis6MTBGNTcwMDBFQjY1QzRDOUM3MkNGNzJBODlFMzM3QkM0QTlDNUNGNDA1Cis6MTBGNTgwMDA0OTA0RkY5RTczRTNCRkM3Q0E0QjE3MUM1NDg5OUY0OEE5Cis6MTBGNTkwMDBBRERFOUM3M0M4OUZEQTA4NkU2NTlENzA2QjUzODQ1RDA5Cis6MTBGNUEwMDA2N0MxMkQzMEM5RkY0QjgyNkJFMDRFQTcxQUNDRUNERTUxCis6MTBGNUIwMDBERjg2MDAxQTQ1RkE3ODlCQkE2NDJCRDU0N0MzMDk2Q0RECis6MTBGNUMwMDBENDVGOEU1ODVGQTBEMjI5RjY0MUYxNkRBNUY2RUZEODMxCis6MTBGNUQwMDA3MzU0QjI3QjJDM0M3QjY4QTBDOUFGQkJGMTc3M0M1MDI1Cis6MTBGNUUwMDAyMEY0QTNFQUY0QzNENTI0RTcwMDA3QjVGNTA3Mzg5OTVBCis6MTBGNUYwMDA3Mjc0MjRGMTBEOTQ5N0Y1MjQyRjkzRUMwNkMzREI5MkRCCis6MTBGNjAwMDA5QjJCOUFENjAwRDE1NTc1RjMwMjIwQkVGMjhFRTQxQkQ3Cis6MTBGNjEwMDBGMDMyREIyM0MwNzZEOTlDNjk4MTU3NkMxQUY5QjI2NjQ3Cis6MTBGNjIwMDBBRTczNjNGQTQ5NDExRUUzRDdGRTU3QTZCRUMyNkM0OENCCis6MTBGNjMwMDA3NjE3NTNCQkQyQ0JCQzUzQjI3MERDNjAzMUU4Nzc2MjMzCis6MTBGNjQwMDBCRDYwOTI2RkVCQjNCNEFFMzc2NUZEMzE4REUyMjEyQTE4Cis6MTBGNjUwMDBFMEMzRTEyNjMyRTFGNzREQjMzM0Q4NkY5QTU5MTFBOUNGCis6MTBGNjYwMDBBMzc4ODFDOEREQTA1MjdDNEYxN0ZBMzg4QkVCMUIwOUI5Cis6MTBGNjcwMDBGMDBCMUUwQkZCNTlBNEI2MTJGRUY0NDI3QzkzRDRDRUMxCis6MTBGNjgwMDBGMjQ3QTkzQzVGRTQyRkMzN0M4REQ4NTJDODZGMjlGRjk1Cis6MTBGNjkwMDBERTA4ODI0NzlCMEMxNDE2NTVEMzIyRDk2OEZDRkM5OUNFCis6MTBGNkEwMDBDMzU5QUYyOUEwRjJDQ0U4RjJCNEU1NEY2MUJFNjBFRUQ5Cis6MTBGNkIwMDAwNDlEQzg0OUIzRjk3RTc2MkI5NUJGMDFCQzBFMzBGOTg1Cis6MTBGNkMwMDBGN0E4MzhGQTFERDc0OTM3NUM1RURBOTFGNzU3RDA3QzM2Cis6MTBGNkQwMDA1RkI5MTlEODhFQUQzMUU1NkQwQ0JERDE2MkIxQ0MxOEQyCis6MTBGNkUwMDA0OUY4RDdEMTBGNTAzRjE1NjY3RTlDQTI3MjNGN0RGRDMxCis6MTBGNkYwMDA2MEYyMDVFRkM2MDdGODlDQzBBNjkzN0ZCMjRFNkE2MDIxCis6MTBGNzAwMDBGODQwQzBDRkZBMUVDNUNEMTBCREY0OUZCNzZCQjc5REIyCis6MTBGNzEwMDAwNkNCMTQ3NEE3RUYxNTc0NTcwNjVFOTlFMDM1NTJCREY5Cis6MTBGNzIwMDAzQjQ4RTNDRjk5OTdDQjdDNjZDQzUxNjBCODMwRTU2MTFDCis6MTBGNzMwMDA3RTQyOUFDNEZCOTQzRjIwOUZGMTY1QkM0QkFGOTcxMTZBCis6MTBGNzQwMDA4RjY0QjkzNDNGMDlDNzlCM0I0RkUyRjM4OTU5NzM1RDFFCis6MTBGNzUwMDAyMTA5RkYzOTBCRTk4M0UzQTExNDVGRUU2Q0M0RjczOThCCis6MTBGNzYwMDAzRTQ5OUNGQjYyN0U1RTk0M0YxRUI1NjEzRTM3OUJFRDM5Cis6MTBGNzcwMDAwNEZGRDMwOUYwMzk3RjgwQzA3N0FCN0RDRDVBNDc4QzI5Cis6MTBGNzgwMDA3RkU3OTIwMTZFRTFFNzE4MzBGNTkzMDJFNkJGMjJBRTAzCis6MTBGNzkwMDAyNTJCRDkxQjExN0NBMzgxRjlENDYxMUJFQURGQTRGRkJGCis6MTBGN0EwMDA4MkMxRkFGNjM1MjZCRDVCRkM2Mjk2NzEwQkRCQzFCM0Y0Cis6MTBGN0IwMDBCQ0IxN0FGNDNCQjQyNzQ0MDdENzRBQUNFN0NFOTk3Qjc3Cis6MTBGN0MwMDA3RTNERkI1QzgxNjRDNkRERjQ1NTU5OUU5OURGMzVEMEUyCis6MTBGN0QwMDBEODlFQkU5QUY0OUMxMkZDMzgwREY1OTAyOEZEN0VERTcyCis6MTBGN0UwMDA2RDY3RDNCODdFQ0ZDNzU3OUNCQjA0NTFBMTUyRjA5NzI5Cis6MTBGN0YwMDAxQTg0MjdGMUNCRjI2QjE1QTY5N0VBQjUwRThFRkZBQUY1Cis6MTBGODAwMDA2OTVFNjNDRjI2N0NGRTIxRTgwMjVGREZBRkVCODNGMzA2Cis6MTBGODEwMDBFQzUzNjU4QzkwQjUyOEJGNEQ1NTQ4MjJCQUNFMjY5RTM0Cis6MTBGODIwMDBDM0YwOEYzOEM4MkYzN0RCQTE1N0QxQkE2NkE3ODMxQTI4Cis6MTBGODMwMDA0ODQzQkNCQ0Y2OEE4REQ0RkY1QTE3QTgzMkNBREJERTE3Cis6MTBGODQwMDAyRDZGODYwOEFGOTA5NUVCODQ5Mzg4MzkxQ0Q3RDY1N0Q3Cis6MTBGODUwMDBFREMxRTcwQkY1QjY2MTFDQjc1NUVGNDlEMUEzRTNBNEExCis6MTBGODYwMDBENkFGRTlDNDNCOEFEN0QyOUMzMDRDMzVGNzM3OTE5RDRGCis6MTBGODcwMDAzNDY0ODBFMDU3MEY0QUMwRjIyMjcwQUQ4QkUxOUM5NTUyCis6MTBGODgwMDAyRkUyOTVCMjUyNzU0NzMwOERGODhENjZENUUzMzhCQkJGCis6MTBGODkwMDAwN0VEQkU1RUMzMzEwREExNUEyOUY2NDdCNDhCQTdGQjE1Cis6MTBGOEEwMDBBQzBDQjM5RjFFOUExNDQ0NjI5Q0Q5NTI1QTY2MjNCODdBCis6MTBGOEIwMDBCOTUzNzQ4QTRGQjRGQUFENDgzNkVDQzRCNzJBODY0OEI3Cis6MTBGOEMwMDAyMzgyMENDRjREQ0EyMkQyNEY5MzYyRjlCRUREMkVGNkIxCis6MTBGOEQwMDAwNURFMTU3QzNGNUUwRUEyMUM2MEJFNEY3RUZCNjAxOUVDCis6MTBGOEUwMDBDQkFGOEEwMTU5MkMwRkI4OUZENThBNEI3NUVBRDA0NTBBCis6MTBGOEYwMDA5RTY1N0EyMTg1RkM1Q0MzMTA2NEE0QUZCN0U1Nzg2Nzg4Cis6MTBGOTAwMDA1MEZDNUVFMDc1ODVGRDZBNjU3M0Y1RUIxNjQ3RURFQjFGCis6MTBGOTEwMDBFNjBFMzkxMDk5Q0ZGMTUwM0ZENEZCNTAzQ0Q0REFGMkM3Cis6MTBGOTIwMDBDRTNDQzUzRDU2NDI4MzgzRjBCRDMyNEUzRTJFNzNCRjYyCis6MTBGOTMwMDBDQzdBRTRCMjQ3RUQ5REY4MEIxNDI3QUFFNzEzRkZBODkxCis6MTBGOTQwMDA3QUFBOEIzRjg4Rjk1NDI3M0Y4QkIzMkY0MTdEODlENjA0Cis6MTBGOTUwMDAzMzAyRjkzMUYxMjFBMzIwNDU2NkZGMzJDQzEzNzIxNDMyCis6MTBGOTYwMDAxRTk3QzgyRjI2N0I1NkQ3OTNEQzZCOTc1MjFBRTRCMkFBCis6MTBGOTcwMDA0RTNFMzlDMkRDQUZCQjE0RUY0QjE0MUYxQjQwN0RFOTc4Cis6MTBGOTgwMDAzMTE1QkFDQTAxRjBCM0ZFMzIxMUU1MjZFOUQxNTJDQkU2Cis6MTBGOTkwMDAxQzk5QzZEREI4MTRGQkE2RjM3QzI1NUM0MUY5REI5NjA3Cis6MTBGOUEwMDA4QTczNTIwOERDQ0NFNzYwRTMwMjRFOTVFOEZGQ0JFNEIzCis6MTBGOUIwMDBGRTZCQ0Q3MUZENzY2NEQ2QzdENDFGNzI3RjgwRkI0MjhCCis6MTBGOUMwMDA3QThCNDRGQzEwQ0I3QjRGQzNBNjQ4MDdFMzVBOEU3MDVBCis6MTBGOUQwMDA3RjFCMzMwNDVEQzRFQjMxMkZEQkRDMjE5QjhERjg2RTg0Cis6MTBGOUUwMDA4MEU1NEUxMjg0NzIwODdFNDY4MUUwQjM2NTA3MDQ5RjZECis6MTBGOUYwMDA3RDJFODAxQUI0NENBQUFDRkY5QUU5QjlBQzA3NzJGOTEzCis6MTBGQTAwMDBEODA4NzBGQ0NDMEVGMDU1OUJGQUNFNUQwMzQ2NTBCNDdFCis6MTBGQTEwMDBBODVGRjA3MTUzNUZCMEY0QjgyOTcxRkI3OEI5RkI3RTMxCis6MTBGQTIwMDA4NUY4RDZFNTM5NURGNjRCQTZGRUE3ODFDNEZBRTIxNTQ2Cis6MTBGQTMwMDBEQUY5Rjk5NjYxRjEyNTg4RTU0QkI5NzA5NkY3MEZFRTgyCis6MTBGQTQwMDBERTczMkJGOTA5ODI3MTdBNTBGMDIyRjVBMDVFQjlCRUZGCis6MTBGQTUwMDA1RkQwRkFFMkY1QTFFRUUyMjk5RjFBNzA3MUYxOTRBODQ1Cis6MTBGQTYwMDA0MUNDMjdGOTM1RDZCMkIzRTJGMEE3N0FDRkYxRjlGNzU2Cis6MTBGQTcwMDA0MDI3REU3NUUwNzM2MEQzNzVCNDBFOTRFNzJBRDk3RDE0Cis6MTBGQTgwMDBEMjZGMUU2MkJBNUU4QkY1RTRGMTA0Q0Q4M0MxRkZDMjcyCis6MTBGQTkwMDA3Q0FCMERGQzE0QUYwMDNFRjUzNEUxQTkyNTc3OTExMzQyCis6MTBGQUEwMDAzMTlFRDQyRDE2NzgzNzRBMTFGOUJFQThDODEyNUUwNkM5Cis6MTBGQUIwMDA0N0M3RUJFQkJFNUNGMjQ3MUI2NUM1MUMxRjZCQzlFMzc4Cis6MTBGQUMwMDBFMTM2ODNGMTY0MDRFODE5NTRDRkMyOTM5MTYxNTE4RUY5Cis6MTBGQUQwMDBGOEYxMUFGMTkzNzFEMzEwNUZGMjI4Q0U3NjU0MUZEMjQ5Cis6MTBGQUUwMDBCQkNBNDE2M0ZDMjg4RjkzNkIxNUVFOTkwQUQxNzk4NUM3Cis6MTBGQUYwMDAyQjdFRkYwRDNFNzc5QzZDRTJDNzE0RjVFQkUxQzcyNTJBCis6MTBGQjAwMDA4NDFGOTZEQzQyM0RGOUFFMzhGQkUyQUUzOEZCRTIyQkI3Cis6MTBGQjEwMDBFMEM3OTE4QkMxOEZDODQ1RTI0N0JCRkQ4N0VGMDVDQTlGCis6MTBGQjIwMDBEODlFRjVDQkZEQkJFMjg3RDQ3MkRCOTI3Qjg4REU4MzY3Cis6MTBGQjMwMDAyOTQwRkJGRTc0OTI1QUUxQzY3OUQ2NTQ4QUI4RjNFMUEzCis6MTBGQjQwMDBCRjJGMDg1MjNFN0I0NTJFRUI4NTRGQTdFOTJGNzFCOTk5Cis6MTBGQjUwMDA1Rjk0OTdCNTE5NzIwQUU2RjM1NzYxMzlFNjlGQ0VGNUJGCis6MTBGQjYwMDA1NjUwQkU2NjM1OTY2M0ZEMTFGQjdDNDFDQTE3RkM1MEFBCis6MTBGQjcwMDA5NDk3REVFOTdGMjk4NUU0N0M0MEI0N0ZFMTU4OURFQ0QxCis6MTBGQjgwMDBDMUYyNTA5REQ5QkVCQ0ExODJGMjM1RjVBMkZEQzgwM0Q5Cis6MTBGQjkwMDBBMTIwRTUwN0RGMjNDNkI3RjRDRUNCNENGRUY5QjQ3NDQxCis6MTBGQkEwMDBFQUE1REJBOTNGRTQ5RjlCOTE3RjhFM0I2MTk0NkVDM0U2Cis6MTBGQkIwMDBGQzIyRDU2NjIzQkM1RDFDMDlEODA5MUYwRURCQUE0NkIyCis6MTBGQkMwMDAxMkZFQzA0MjVGMEVFMTk5OTNFQzU2Qjk5MzdGRDlDOEZCCis6MTBGQkQwMDBBOTgzRUQyNjJBNzZENkZCNUU5NUZDMEFENTlCNDYyNEEyCis6MTBGQkUwMDA0MTcyNzZCNEVFMjJGRTRFRjFDODlCNTFERTE0OTlGMkJBCis6MTBGQkYwMDBDODhBREZBNTdCMDQzM0EyRjZBQjY4QTA5MEYzNTZCRDlDCis6MTBGQzAwMDBFQzc0ODExN0YwQjBDMDBCMkJCRUI4RjUyMTkwQzhERkEzCis6MTBGQzEwMDA0MjZCNjMzRjQ0OTc3ODYzM0ZDQkVGNTBCRkUyNjE4NDEwCis6MTBGQzIwMDBCNzk3NTM5QzMxOTY1RjNFNTZDNDE5OTc5RTNCM0QzNTFFCis6MTBGQzMwMDA5MTVEMzQ3Q0EwQjBFNzhGOUFGNzIyQUNFRjk1QTE1QzgwCis6MTBGQzQwMDAxQkQxQ0ZEMzg0M0NCRDA5OUVEQTFGNDk1RjdBOUFDNjg3Cis6MTBGQzUwMDAxQUNCMjAwREMwNjhEQTQ3OTEyRjdGQkNFRjdERjU3RDcwCis6MTBGQzYwMDAwMTk2REFGQzBBRTExMUY0OTc3NDlBRkY1NTZERkVDOTBBCis6MTBGQzcwMDBCQzlFMkE4MEVGRjU0QUIwMEU1M0RFMkYwOTNBMzY4QjMwCis6MTBGQzgwMDAzODExQzE3RjY2OTlGQjc2NEM5REY3Q0FFRDZDM0Y3QkJFCis6MTBGQzkwMDA3NDNCOEUzMzY5RkMwMEE2RkI5OTczMjU4QkVFQkYzMzUyCis6MTBGQ0EwMDA5MEY0NjAzQUMxNjA3RkI2OEZFM0RENkY4MjkwODMwNjg3Cis6MTBGQ0IwMDBCOTI5OEVFRTk3QkIzRjdCOEZFNEQyRjIyREIxNzRCRDk0Cis6MTBGQ0MwMDAwMjVBMURDMkRGMUM3OUU0NkRFQ0JGNzI0MzhBNEFGMjBFCis6MTBGQ0QwMDA2NzQ1NjM2Q0JEQ0EwREJGM0YyMDk1NzRFNTAzOTUxNjVCCis6MTBGQ0UwMDAxRjA4QzVGMjAxNTQzODA0MUY3ODY4MDg5RjdGQURDQzA3Cis6MTBGQ0YwMDA5MUI1NDMxOUU0RkZGMEIzQkM0RjAyMjFFRkVGNTJGNDhBCis6MTBGRDAwMDAzMEQzNUY4QjUzRDg1MUE2N0U3RTlCMkNGNEYzMjQ3MEE2Cis6MTBGRDEwMDA2OUVFNDJFMkMzMzYzMzVFNTVFNEFERjEyMTJFQ0VFNTA1Cis6MTBGRDIwMDA1NEMzQ0RDQzZGQUM3ODE4MDQyMENCRkI1MzgxQ0JENTFBCis6MTBGRDMwMDA2ODNGNUIwNzlGOEZBM0Y3RDI5NjlFQUQ3NERGQzBGMjNBCis6MTBGRDQwMDBCM0EwN0VDMEY2MTUyQzQyNEUzNzhFRjkxMEVGOUJCNDRGCis6MTBGRDUwMDAwQ0ZGM0Y4NkQ2RTVFMDc1M0RENEEzM0ZGM0Y3RDU0OEM5Cis6MTBGRDYwMDAxMENFNTJCMjhCOTVFMjU2RUE3Mzg4QTAyNzE3RDExMUI0Cis6MTBGRDcwMDBGMUY3NjlCMUY2NTYxMjA4M0Q3RTc4OUJGMEUzOENFODA2Cis6MTBGRDgwMDA5NEZCNzVCNEJGNEVEMDVENDJFRTM3MDBEMTU3QjdGNjQ1Cis6MTBGRDkwMDA4QTdCNTU0MjdCODUyNTE0RjYzRjdCOUFFMEVCMTdCMkIwCis6MTBGREEwMDA1N0JBQjM0NzNBRjYzMzA5RjUzNjRDNjdGQTkyQjZEM0U5Cis6MTBGREIwMDBCQTJGM0I5QjlBOTIyODlFNkE2NkI5RUMyNUJCNkNBNjJCCis6MTBGREMwMDBEREM4NEE0RkEwRTczRjYwRUFEOTFERjU3RDZFRUU0RkQyCis6MTBGREQwMDBGMTY1NkNBN0Y4MjVFQ0I3OTVGODdGREJFQjhFODQ3MUE1Cis6MTBGREUwMDBDOThBRDlCRjYyMzdENDQ0RkQ1RjQ1NEVBOTI4N0ZCQjdECis6MTBGREYwMDBFMkNCRTY3RUJGMDE3REU1NzlEQTk3Nzg3OUU0RDgxRDFDCis6MTBGRTAwMDA3NzRFMDk4MTgxRDE3MTA1NEYwRjEyRkM2RTQyODFGMTRECis6MTBGRTEwMDA5QjgxNzQ0RTk0RDQ5RkY5OUQ1NjhBRjY1NDFGQ0U3M0RECis6MTBGRTIwMDA3RjA3NkZCRTlDRTMyNDNFMDNFMzgyNzExMjZCQTNGQzQ5Cis6MTBGRTMwMDBFNzA3RDMxMjlGOEJCQzYxRjJENzE0OEE3REMzRjQ3Njk3Cis6MTBGRTQwMDBDREY4MDM4RDdGRDQyMUNFNUQ4RTI2OUJBOTQ3OUM1Qjg4Cis6MTBGRTUwMDBCREQzNTE1RkYwQzc4OEM1Mjc2REEyRkM2ODdBRUM3OUU1Cis6MTBGRTYwMDA4RDU1RUY5NEQ5RUU1MEFEQ0JCQjM2Q0FGRkFBM0RFNDE5Cis6MTBGRTcwMDBGNDkzOUNDRUNBMzdFRjcxQUMwMkI2OUZEQjlGNEZEQjg5Cis6MTBGRTgwMDAxNEJEQUY2NzA3OTZBNzBDQTJGOEEyN0NDM0QxOEJFMDg0Cis6MTBGRTkwMDBGOEJDOTA3RkQ1NEFEODQxRkJGQkYwMjVCRUEzMzRFRkQ4Cis6MTBGRUEwMDA2QTBEOEM2N0E4MUYyREVDQjhBNjk4RUMwNjExMUZEMjFFCis6MTBGRUIwMDA2RTE3NzY2MDdCOTI0OEFENzk5RDFEMzgyMzY1MTA5RDQ1Cis6MTBGRUMwMDBDQkRFMUM2NkJFRDg5MTlGMTE2NkJFNzc3NkEwOTdDNzIxCis6MTBGRUQwMDA2RDlGNjU5NTlCRjlGRjEwNzkwRDU0OURFNjVCRUUzMkExCis6MTBGRUUwMDBFRDg3NDI3NTJERkI1RDUxRUYyM0JGNERGQ0Y5MDFDMDNECis6MTBGRUYwMDA3OEExMUY5QkYxOUU0NkRGQkZGMzM5NUU3NzdFN0U5QjI0Cis6MTBGRjAwMDBBQkVEOTVGRkMyRUZGMzREN0ZCMEFGRjlEMzU3RUVEMDE1Cis6MTBGRjEwMDAxODdGMEVEM0I4MEI0MjQ5QzA3MURGRkZBNDVGQkZCRDhECis6MTBGRjIwMDA1RjFCQUY2NzdENzlBNEZGQzM2NTFDMkZDMDdFQjUxNTJECis6MTBGRjMwMDAyREJGNjVCRUJFQzJBMkZCQTY1OEJBRUY2NUMyRjE0Mjk0Cis6MTBGRjQwMDBFNzZBRjFFNzJEREYwMDlEMEQxQzk0NDBFRkZCMzVDOUZBCis6MTBGRjUwMDA2QkM0QUYyOUYyNzRFNjZCQTc5QTI0RjY4NzY4RDA1NjczCis6MTBGRjYwMDA0NzcwNUUyOTg5N0Q1OUY5RUE4RDE1MEVDQTJGMDY5NUNECis6MTBGRjcwMDBGOTdDNTMzQzNGRjMwNTQ5NEY1ODVFMEYyQ0VGNEEyMTYzCis6MTBGRjgwMDAzRjk1RTA1REIzNTcyNjFGMDJERkI3RDFBMkY4MjRERDBECis6MTBGRjkwMDBCN0QxQTJFQzYyQkE2RjEzOURBN0ZCMzZEMUY1RTlCRUNCCis6MTBGRkEwMDA0RDc0MzlEREI3ODkyRUE3RkIzNkQxNzlCQTZGMTM1RDUxCis6MTBGRkIwMDA5RkVFREI0NEU3RTlCRTRENzQ3REJBNkYxMzlEQTdGQjRFCis6MTBGRkMwMDAzNkQxRjU4RjgwRkZDMUYxMTJDMTc1RTIwNjgyNkJEMzg1Cis6MTBGRkQwMDAxQUE3NEE3MEM1RUQ3QUFCMjg5QkM1MTlFMzFGRERDQjg0Cis6MTBGRkUwMDA4OUVFNjdCOTY3QUE2MzA1QzI2MTRGOEUwQ0QyNjhCQTAxCis6MTBGRkYwMDA3N0IzMkNBNkRGRTU3MjE1RkIwOTUwRUQ2MDM5RTJDNzM3Cis6MDIwMDAwMDIxMDAwRUMKKzoxMDAwMDAwMEZGMzEzQ0U1MjJCNjkzM0Y2Rjk2MjAwM0YxNzVFOTg2RjgKKzoxMDAwMTAwMDM4RkRBMUU1REUzQUQyQjc2RjBBQzU3RTVGMEU1MTdFOEMKKzoxMDAwMjAwMEY3RENBRUU3NDA0QjA2OTlGMUMwQkRBMTM3RTFGMzE0MTAKKzoxMDAwMzAwMEQ5QUREMzNFOUZEQTI3RUI0RTMwNUQwMEI0Q0Y1Qjg1NjAKKzoxMDAwNDAwMDNGQjIxNDA2M0QzNDlFRjdEMTBFMjE4RDhFNDc0NEY5MDAKKzoxMDAwNTAwMEE5OEQ3MjI4OTBEQjc5M0U3NDZBRUZBRjBFRkJCMERFOUIKKzoxMDAwNjAwMEQyNUVCMjRBNzRFN0NDODlEREVGMjQyRDc2QkY3QjE0RDMKKzoxMDAwNzAwMEM2RUU3NzhBMUVCQkRGQTlBMzYzRjczQjFFQ0U2OTQ2OTcKKzoxMDAwODAwMEVDRkU4MzNDOURFMUJDQkMwRjlBNzczODdFQzZCNDU4MjkKKzoxMDAwOTAwMDdDQjBFMDNCMUFGRjI3RjA1NTYzRjgyRTQxRjgzRTJDNjgKKzoxMDAwQTAwMEQxQjlEQTNEN0JGQTY4NURFMTVDREQ3Q0FGODNGNEQ3RTIKKzoxMDAwQjAwMDhCODVGMzdENzE3MEZFMUNDNjU3QjgxOUI4MzBEMzM1RTcKKzoxMDAwQzAwMEIyNTM1RjJBREJFQkU3MjA4MTYzNkFERjBBRjM1RUFGOUUKKzoxMDAwRDAwMDM4REYzMUUxOEFGQTBCREIwQjUxRTc1MEY1QjJDQ0ZBOEQKKzoxMDAwRTAwMENDMjZBMjY3MjMzMzg1Rjk4MEJFQTEwN0VGRDczMDk3Q0UKKzoxMDAwRjAwMEU4NkYzMUY4OTgzRjJEOEVEMzZCOTZCQUVGNzc5MDVFMEMKKzoxMDAxMDAwMDEzQkY0RTlBMERGOTVEMkE1Qjg0NUUxM0JGREUyRUZFOEYKKzoxMDAxMTAwMEE4NDJCNUI1OEZFMERCOEQwRkVCQjRDQzE2OEI0RkZCNEYKKzoxMDAxMjAwMEM4OEY5MTA5NkQwRUQyNjNCQUUzODMzMzcyOEM1RjkzRUIKKzoxMDAxMzAwMERDNDAyRTA2MDQwRjYxMEFGMDVGNDI3REIyQTZBMzU4OTAKKzoxMDAxNDAwMEY4RTc5RDdFRTFFNzg3NDAxQUNGNjMxNDg4Nzk3MEEzQjIKKzoxMDAxNTAwMDI4N0ZGRjI4MjVDNDdFMDczNDI5RDhCRjY0RDk2M0YxREUKKzoxMDAxNjAwMEYwODRCRUQyREFCN0IwNUZGOTI1MzBFMUE4Q0I5MkFEMEEKKzoxMDAxNzAwMEQzN0Y4RjU2QTA0MUZBRjVDOENGODRGRTM0REFENTE4NjQKKzoxMDAxODAwMDU0QjRBRUY2RjkyN0Y5RTYzOUI3NjJDNjdGNUVFMDFDRDMKKzoxMDAxOTAwMDkyRTY0RjdFOEU2QkNDRjhCQjA5MkRBMzVFQTE3Q0M3ODcKKzoxMDAxQTAwMEI5RTRDRTU3RkJEMDdFOERERkY5RkIwQzRBREY5MkI0NjkKKzoxMDAxQjAwMEM3RUVDMEYxQUY5NjA0NUVDNERCOTVDMTFERTMzNERBMkYKKzoxMDAxQzAwMEZGQ0IyNDJGRkIyQkE2ODJCRkFGQjA0NzQyM0NBRjg5QTkKKzoxMDAxRDAwMDJFMUZFQkI1MzY5NzYxRTdGMzI4RDM3RjA5MTA5RTRBQUYKKzoxMDAxRTAwMDdBRkEzMkREQzFGMzU4QUI3RTMwOTVGQzMxQ0JDMUY0RTUKKzoxMDAxRjAwMEM3MzRDN0VFNUYxNzdCMjhDRTBFQUFDMkZEQTc3RUUzRTkKKzoxMDAyMDAwMEVEOUUwNDc4MTQxNzBGMTAyQkVGMTcxNDVBRjdDQTQ1RjgKKzoxMDAyMTAwMEJDOEEwNkUyRkU3N0E1RTk0N0FBNzQ2REY0ODg3MzM4QjQKKzoxMDAyMjAwMDk0NzM3REExOEJEREE0MTBFMEM3RjA3OTg1QkQ5MEVEQkUKKzoxMDAyMzAwMDYyQjQwN0Y4QkM1RjczMjQ4QUQ3MDMzNTkzQ0ZENTZGQjgKKzoxMDAyNDAwMDc0Q0Y2NEJFN0M2MzdEMTdCRjBFRTNGNUUyODYwQkFDMTIKKzoxMDAyNTAwMENCRDQxM0M2RDMzNzlDRkZFMTQxOUE5MEZCQzlEM0Y3QTcKKzoxMDAyNjAwMDFBNTQ1Q0Q2RDYzRjVBOUZBRDcxODhGQkI5RTBDRjg4NEYKKzoxMDAyNzAwMEI5QjczMEI4NTA5QzdCOTc5OTdBNTNBNUNCODQ1MzYxMUEKKzoxMDAyODAwMEEwOEVGNEUzMEVCREE5OEJCREY4RjVFRUM5NThGMTJFOTIKKzoxMDAyOTAwMDA4QUZBMjQyQzZFMzA2Q0Y5QUNDQ0VGMzFENkIxRDlGREEKKzoxMDAyQTAwMDhDNjg3QkJDMTVFMTI1QTc0Qzc2MTE3RjVDRDFDRjM3REMKKzoxMDAyQjAwMDhDRUFGNzNCMTAzRTRDNzQwMzZFOERGNUY1OTNDREM3NzkKKzoxMDAyQzAwMEY2Q0I3OTlERUI0MjNDN0I3MDFDQURBMzU5NTZDNUJENjYKKzoxMDAyRDAwMEY5NDBERDM4RUNCN0JENTRFMDVERjdGNkFGODAyN0NFQ0UKKzoxMDAyRTAwMEVCQjJDMkFDQUVGM0IyRTJFQ0E3Qzg0NUE5RTEyOEJEQkYKKzoxMDAyRjAwMDNEQzM4NDVGRkIxMEVGMTQ2QTU3RjZDN0JFMUU5QUFGNkEKKzoxMDAzMDAwMDNEQUY3MTRGNkZEMjhCNkYxNTdBMzFFRTJCRkI0MTY0OEQKKzoxMDAzMTAwMDNCNDhBNDk3NEU5MUNGREU0MkY5NTMzOUEwOTJGRDk5MDQKKzoxMDAzMjAwMEQ5MjMyMDdCNDhDRjVCMDBFQzI3MDJEREFGMTNBQUM4OUUKKzoxMDAzMzAwMEZEOEFEODRFQ0VCRTE1RUQyN0VDRjdERDU1MzdBNkQxOTgKKzoxMDAzNDAwMEZERkVFQzk0NDU2OUY5NkU4QTZGQzJBOTBFQzBCQzY0Q0IKKzoxMDAzNTAwMEYzOEFGQkQ5Q0ZCQ0Y3NkY2NTU0M0U4RkZERDJENzNCRjQKKzoxMDAzNjAwMEM1Mzk3M0VFMEZGRUI2OUNFOTAwQjQ3NEU3MTgxQUNGRDYKKzoxMDAzNzAwMEM3RUYwQjQ0RDI2NDlFNUZGOUI1OUYwRDI3RkRBQUY3MjYKKzoxMDAzODAwMDU5RjczMEQyQ0Y3QUQxMzkyRjgyNzRBODQ5MUY5NzU1QTcKKzoxMDAzOTAwMDQ0ODZGQkREOUQ3MENBQ0M0RjZDQkY2NDlCRjAzODk4REYKKzoxMDAzQTAwMDdDNzIzNjlEODc1OEY3MzAxRUVBRjEwNjlGODc5RjM0OEUKKzoxMDAzQjAwMENGNEZGMjhDNjlBOTg0RTcwNzA3NUFFNzVBQUQ1OUU0OTEKKzoxMDAzQzAwMEIyQUE0RTMyNTJFN0QwM0NERjk0Rjk3RUM1NjdBQTkxQkIKKzoxMDAzRDAwMDlBODZFNTI3QzFDQkZBNjNBMENEQ0VFNzQ0QUJFRUFFNUIKKzoxMDAzRTAwMEU4OTlFRUVFM0U2RTdGNERBMUIwNkZBQUUyRTJBMkFBQkUKKzoxMDAzRjAwMDk0NTYwNzlENjc1NUZEOTM3MTUxNEQ2ODcxMjczQTBGQ0IKKzoxMDA0MDAwMEIzRDY1RjlEQTY4MDMyMTQ1MzA5QkNFN0FCRjdFMjNGMzkKKzoxMDA0MTAwMEU0ODQ3MERDNjI5Njc3Nzc3RkUzRTdFNkZBQUNGQjE5NTkKKzoxMDA0MjAwMEQ1NzQzRjAzM0ZBRDdBQkVCQzI3OUNDNzBFQUQzRTMzQUIKKzoxMDA0MzAwMDJFRTYxRTA0RDk2QkI0QkVFQTMzMTNGOTdCQzU1RDI3RTMKKzoxMDA0NDAwMDFDODRERkQ0MEYzRDg1NjBERENGRTgwRUNFRDk4NUMyOTgKKzoxMDA0NTAwMERFQThBNjdCMEQxOUQxREYwNTFENzdGNjlGQzlFNTRGRjQKKzoxMDA0NjAwMDlBNzA3QjcyQUY2RERBRTYwNEYzN0NCRDUwRDhERDQzNDEKKzoxMDA0NzAwMEIyMTRGNjE3NUNEQTBBQzZBNjA0RTM1QUY1QUNGNzBEMTcKKzoxMDA0ODAwMEJBOUI1N0QzQTRGMDdDOUEzN0M1MDUyNzFBNkZBNzA5RTIKKzoxMDA0OTAwMDQ3NkJCRTRERTlFMTI1NUU3MUNFM0E5MERFMkZFOEM4OEMKKzoxMDA0QTAwMEFCOTFGRTU3NDdGMUQzQjNBNjdGQTBFOTNCRTFGRUZDMzkKKzoxMDA0QjAwMDVFQzYxNUMyOEVFRDZFOUZFN0Y0RjNBNTEzN0YxOEE5RjMKKzoxMDA0QzAwMEI0REVGQTRBMjY5QjVENDA3RUI0OUVGMzVBNkQyNDI3MjMKKzoxMDA0RDAwMDNCRjg0RjM3RkJERDA5NjczOUU2MUU0QzU3MzgzQkI4MTAKKzoxMDA0RTAwMEJDRTNGRTE5MTgxRTI5OUJFNDEwQjAzRUYwRDAxRjRCNTAKKzoxMDA0RjAwMDFDMEUxQ0ZGOTgwRDIyQzQ3N0E2Qzg3REE3QkU0MDc5QUMKKzoxMDA1MDAwMEI0MUY4ODJFOEZCMUVDQzA3NDgzQ0NGNzk5OEUzRDlBQkUKKzoxMDA1MTAwMEVGMjBCQjZDNDkzOTQ0NjRFNDVCQzdERUVBNUY0NzcxOTYKKzoxMDA1MjAwMDk3REEwMkQ0MjRDN0ExQkFCMzM2RjZGQ0IxMTI4QzNERDcKKzoxMDA1MzAwMDI5RDhFRUM2MDNERUQ0NTZDQzJGQkEyNzU2OEUxRDdCQTMKKzoxMDA1NDAwMEVCQzcwRUIyMDdBNDg1NkUzRkM1MTVFMTNDQTdCRTgwODAKKzoxMDA1NTAwMEY5QzVDRDBFQkU5RkI1RTRGRUY4RkU2MkY1RTA2QzUzMjIKKzoxMDA1NjAwMERFQzZFQkMzOUYxNzlBRkFGMDQ4MTg0OTcyRTY4NURBOUYKKzoxMDA1NzAwMDY2RjE3RThFNzkxRjExRjUzRjIzMTE5RTU4N0E3MDI4RkYKKzoxMDA1ODAwMDc5RDJERjk5RUY0M0EzNEM3QzY5OUM5MkI4RkU5MjIyMEEKKzoxMDA1OTAwMEIxMEYyQjFGM0JFREYwNjhEREQzRDk3MUU0MjcwNTM4OEYKKzoxMDA1QTAwMEZFODk1QTk1RDNBQ0MxODY2QjMwRjYzRjYwQjAyRjY1OUIKKzoxMDA1QjAwMDMwQjY5N0I1NDhGRjRGRDhDRjI5Q0U0MTExREYzODVGMEQKKzoxMDA1QzAwMDQzRjdENDQ4REVDRTE1N0E4MjUzQkVCOTkyRjVEMTNFQjgKKzoxMDA1RDAwMEEwMDY1OTdGRjFGQkQ5OUY2RTQzRkQyNDhERTIzNzZFNTMKKzoxMDA1RTAwMDkxM0RFQzZGMTBFRjA3OERGOTY4NTExQUFEMzdGM0JGRUQKKzoxMDA1RjAwMEU3M0M0RDcwQTUzQjBFNDBFRkIwOTQxQkE1QzRERkQ3ODAKKzoxMDA2MDAwMENGNzBGMzc5RkYyNjVCODBGQkExNDBBREJCMTA5RUExQUMKKzoxMDA2MTAwMDI3QzdFQzI2Rjc3OTQxRTNCRDkzQzhFRTUzNUI3NkI1NjcKKzoxMDA2MjAwMDkyQkQ1MjZGRkI3NDBGQzUyNUQ0NEYwNDNEQzhEMDBFNDgKKzoxMDA2MzAwMEYxMzgzNTJEMzM5RUE2RjZGRDY3QkE3NUJBNUZCQTNFMUUKKzoxMDA2NDAwMEQ3Mjg1NUEzRkFENzIwRjIxRUU5OTkyN0FCNkNFQzM3Q0YKKzoxMDA2NTAwMDNERDVGQzBCM0VBRjQyRkIyRTQyQ0FGN0E5QUEzQ0Y2QTEKKzoxMDA2NjAwMDlCNTk3MTNGN0NGNjk3QzA2Rjc4MDJFNTFCNDREREU3MkMKKzoxMDA2NzAwMDVFRDFCNEM5NDZGQUY4QTVCNDUxNTE3MTU1RDZCQ0FBOTkKKzoxMDA2ODAwMEVFNkNDREJFOEVFNEVFMTMwQUNCRDFDQ0RGNUNDMUYxQjMKKzoxMDA2OTAwMDAzQjk4QTI2MTEzQ0FGOTM1NEExOEY5QTdBRjJCNTYwQzAKKzoxMDA2QTAwMEZEMzVCQzQyRkFFOTQyRDI5MzExMEYzRjk0NDIxQ0FGOTAKKzoxMDA2QjAwMDY5ODM5NjY3QTlGRERDMUNBMTBGODJENjM4ODJGQ0Q3MUUKKzoxMDA2QzAwMEUxMkFGMzdEQTJFNUY2MzREMjZGQUM3MzgyRUVGMEExOUQKKzoxMDA2RDAwMDNCM0YwRkY2QjRFNDFEMUNGN0E0MDRFQzZGQUFCMTQ1MzAKKzoxMDA2RTAwMEZBRDNGQzhFREIxM0NCRDc3OTgzNEQzRTMwRDAxRjYyMUIKKzoxMDA2RjAwMDc5OUUwRUVBNjMzNEFGMDI1RjJFRDE2NUI1NEQ1QkM5QkEKKzoxMDA3MDAwMDdFQUY3RDVFOEUwRjY5OTdENEY0OTg3NzVFRDQ4NjVGNTYKKzoxMDA3MTAwMDkzREU1RDYzNTM4NTdENzNDMDI4QTVGMzk4RjYxOTQ1NzQKKzoxMDA3MjAwMEZDRUVDQjQ5N0JCODNGRjMxMUU0N0IxNDk3NzVFQjEzRDgKKzoxMDA3MzAwMDREMzMxNTg0NUI3NTZGRDRCQjMwQkZGOTg5NUQzMzE1QkMKKzoxMDA3NDAwMDdBODcyNzJGQkNDNDg2Rjk1NzA3RkY0NTk0MEYwOTFGRTYKKzoxMDA3NTAwMEE2RkMxRjlGRjg0ODk0MEYwQjJGQTFGRDM5RjlDNDY5MUYKKzoxMDA3NjAwMDkxMjcwMzBDMTFFQzZGNEZGQ0VGQ0MwMEFFRUJCOEU5MTYKKzoxMDA3NzAwMEZGMDQzRDNDOUZFNjU5RkRDMjIwNUJCNDdGRjFDODYwOTkKKzoxMDA3ODAwMEMxMzc4RjI3ODk3QUM3NzNFMTg2QUI0OUZGMjgwQ0YzRkQKKzoxMDA3OTAwMDdEMThBQkRFNkI4M0NERkIwNDI2RkVERkY0NjI1MjJCQUIKKzoxMDA3QTAwMEM1MDk1QkVEMjAyNzcxRkY0MUIzREQ0REU2N0I1OTQ4NUMKKzoxMDA3QjAwMDdGQkZBMjdBMkZFNzY4RTlCQ0NGNDc5MTQ3MTE1QzlFQzMKKzoxMDA3QzAwMDFGQ0NFNzNEMzcwRDRFRTdGQTA0OUZGNEEyQUVFMzJEQjAKKzoxMDA3RDAwMDIzMzk0RjcyQzAxRTdCRkZBREMxREMyRjI4MTJGRDU3OUQKKzoxMDA3RTAwMEY3NTZEMzY4M0ZCMkQzODU5RDgxMUI5Mjc2MTdCRjYzQkUKKzoxMDA3RjAwMEIwQzlENEFCQzRGRTY0Q0E2QTY5NTA2NUI5MzM5Q0VDMTUKKzoxMDA4MDAwMEU2OTdDRkY2MkQ2NUJCQjlBMjlCRkI5RTgzODUxQ0JCRUIKKzoxMDA4MTAwMDI5MjhDNjg5RjREMkQ0Q0Q3Q0VGMUMwQzhBNDc3OUI5M0IKKzoxMDA4MjAwMDM5Njk3M0Y0N0IyOTI3NERGODFFMTk5QzI2RTBEN0IxNEUKKzoxMDA4MzAwMDBGM0QyNTFFMjc2OEMyQTUyRkMyQkJCODEzN0ZBQ0Y2OUIKKzoxMDA4NDAwMDE3NUFGN0Y2N0ZEMUJBQkJFQzUzOTk5ODlGQjUxRTgwMjMKKzoxMDA4NTAwMDdCMDUxQzcwN0U2OUE4RTcxRjVGNjNCNjFCNkRDRDQzRTcKKzoxMDA4NjAwMDYzN0FCOEU5QzVEQjM3MDhGRUE3QTVCM0REMEUzRjExRjMKKzoxMDA4NzAwMDcwNzA1OUUzMTZGMUY5RTQwQTUzMEY5NjAzNkYzOEM4MDQKKzoxMDA4ODAwMERFNTg1MURGQzZFRkFGQUQ2ODE0RUY2RDc1RDI5REIxODQKKzoxMDA4OTAwMDJBOUFDRTMyRjNDNTNBMzM2NTIzMzNDOEY0ODhFQjYzMjIKKzoxMDA4QTAwMDdBMzRDQzc4ODM1OEZDRTk4MDc3M0MxRDc3RTk0RjRCNEMKKzoxMDA4QjAwMDhGRUQ0RkUzRkVCQURCODdCMDg5MTdERkQ4M0UwNDEzMTQKKzoxMDA4QzAwMEMzQjM4M0JGQzRDMUFGODMxRTczQ0Q3NjQ1ODg2NzY1NEMKKzoxMDA4RDAwMDVERTlGMThGREREMTcxRUVENzFDQ0ZCQzc3QjJFMjc2NDYKKzoxMDA4RTAwMDMzNUU1NThCQzVFMzE1NERCOUI2ODU0NTlERjVFRjZFNjUKKzoxMDA4RjAwMEJDRDcxQjFENEZFQjZBNUExMDIwRjk1N0QzNTJDRTcxNEIKKzoxMDA5MDAwMEI1MkI5RURCRkFFQjAwQjY1RkI2RkQwMTBGMDU1MzFGNUEKKzoxMDA5MTAwMDUzMUFCMjQ5MkZBRTdBNkM5REM3QTA3MzE2MjVFMDIxRjkKKzoxMDA5MjAwMEJFNzkyQzI0NEY0Qjc0N0Y3NUQ0MTAyOTQ2MUZBQkE2N0IKKzoxMDA5MzAwMDdGNjJGRkM3OUZGQzVCRERCRkUxRkNCRjkwNTBCRjQyMDEKKzoxMDA5NDAwMDc4NTczN0ZEQjU4RUVDQjczRDg2MkI0MjcyRkJBODEyNjcKKzoxMDA5NTAwMDlFNEE3MkY0QTYwNTZFM0ZCRDJGNThEMzFDQUI0RjJEOTcKKzoxMDA5NjAwMEZCRTUwM0Q5MUEwNzc3MDdGQUQ4NTg5RjZBRUQ0M0VEREMKKzoxMDA5NzAwMEFBMUZCNUVCNjRCRjU3RUY5Mzc1MUMwNjZBMjA1MjQ3NTgKKzoxMDA5ODAwMEYzOEI2RjVGRDNGOEExODNFMEFBQTIzRUQ4Nzc1Q0Q3NDAKKzoxMDA5OTAwMDcyRTQyNDhDRjczNTREM0ZGQTU0RjY1MDdBRUMxRDI4NUEKKzoxMDA5QTAwMEExRkVBMkZDMTEwOEY3Q0E2RUY0QjJDMjIxQjFGNzAyOEYKKzoxMDA5QjAwMDJDRjg0MDI4OEJGNTlCRTAxMzBGOTVCQzhGRjMzQUYxOTAKKzoxMDA5QzAwMEU4NkIxRUE5Mjg1QTVFREUyOUNFQTkxQTZGRkNGOTBCMjYKKzoxMDA5RDAwMDVBRjc3MkY1MjRFOTA3Q0VBRTdBODBENjJDMDkyNUJCRUEKKzoxMDA5RTAwMDQ1QTQ1NUY2NTYwRkY5MDVBQTM2RDlGNTAwN0VBRURBQkMKKzoxMDA5RjAwMEZBOEJDN0U5NUMwNURFNzZFQTc0RjQ1OEI1RjVCNDgzODIKKzoxMDBBMDAwMERFM0ZBQjkyOEM4OEM0N0ExNjc4QTQ5MTlERkJCNDdDQUYKKzoxMDBBMTAwMEVCNDdDMjVGRDU0Qjg2RTlCODRGQ0I3RUY1QjlBODZGREYKKzoxMDBBMjAwMDQwMjQwOUVCMkY3RkZBN0RGNjZGNTVGOURDN0U1NzgyNjMKKzoxMDBBMzAwMDdEQUE2OERDRTUwOEJCMTNFQzUzRTNGQjUzNDkwRjBBQkUKKzoxMDBBNDAwMDNFRjEyNUVGQzNCMTlEMTJGNENDRUREQUJFNzJEMzQ3NkYKKzoxMDBBNTAwMDBFQTI5QjEzQjgyMTE5NjkwMjVFNjQ5RkQ2MzRDQTBCOUIKKzoxMDBBNjAwMDFDQTk4OUY2QURGNTJBRDJGRkIwOUNGRDIwMTdEQTNGMEMKKzoxMDBBNzAwMEQ3MTAxMDc0RjFEQ0Q2NkQ2NDBGNTRCRUUzRDRBN0QzNDUKKzoxMDBBODAwMEI4REI2RUYxMDBFRUZGMTFDNTJGRjBGRDY3RUJCMjBEODQKKzoxMDBBOTAwMDFDQjdEMjFFQzg1NjM5MTVERjJCMUZCOTk1RjE3MEU5NjYKKzoxMDBBQTAwMDlCQjc2NkIzNUUwNzQ2MkZEQjY4NUU2RjJGNUFFN0UyOUYKKzoxMDBBQjAwMDhEQjM3ODlENEJDMEM3Nzg1OEY5MzNFMUNGRjg1QzgxOEUKKzoxMDBBQzAwMDY5ODlFRTFCNkYxRjIyRTQ4NzEzNkUyRTIxRkFGODFDMzIKKzoxMDBBRDAwMDdCMjIzRkNDMTEwNzg4NzhERUI3QzQzQjY0NEVCODNBMUUKKzoxMDBBRTAwMDM1RkE5REI5M0I4NzA4MzkxMDgwRDA3QkY0RkU2NDBENDAKKzoxMDBBRjAwMERBQzVDNDE3RTQzNzNGOUY0QUZEQUNDQTU1RkM0RTk1OTIKKzoxMDBCMDAwMEQ3MUYzMEUxMjU5RDEzRjExQzlBNjJDNTlERTZFMTdFNTkKKzoxMDBCMTAwMEJEMzlBNTI3RDlDMTRFMzhFNUI4QkU4Q0RGNjlEMEM4MkMKKzoxMDBCMjAwMEZGMUJENThFRTE3NjY0QjMzMzU5NDIzQkZGNDg3NkUyMzIKKzoxMDBCMzAwMDdCODRFRjk5RUJDMEJGQjcyMDBBOUY2QUI2MUM2MTdDMkIKKzoxMDBCNDAwMDAyQjRCQjUyNzM0NEZFNjFBMjQzQjQ4QjUyMTE2RTlGMzgKKzoxMDBCNTAwMEVERkJEMEQxOUJGQzFEOTkzNjE4NDBGMzZERkI4OEYzNUIKKzoxMDBCNjAwMEEwNjc2OTU0REZFQUJGQTZEOTE5RjMyRTQ5Q0RBMzFGQTgKKzoxMDBCNzAwMEM1RDFCMzMzRUVCRDEzM0ZDM0IzMDY1MjM1RDIzNzhGNjEKKzoxMDBCODAwMDM4MjI1MzVGQTQ3MTcwNUM4QUQ3NUM3MkJGMzNFNkJEQjQKKzoxMDBCOTAwMEIwNEU3QzcxNzQ3RUNGRURBNDRGQ0JCRTVBNkFEMjdGMkIKKzoxMDBCQTAwMEZDRkFFM0Y5QzE5MzcxRkMwMDM2NjY3REE1Rjc5RkFBQjQKKzoxMDBCQjAwMEVDQTFDNzA5M0U1NTQ4QUYwMUE2NTc0MTdGQThBMzQ3RkUKKzoxMDBCQzAwMDA2MjAzRDdDRkNENDRCRkJCRjRGN0VCQTQ2N0JFNjc0Q0YKKzoxMDBCRDAwMDFFMkQ5NkNGNTYzRTgzRjQ0QkZFMzQ4NDc3OTI0RTdDODYKKzoxMDBCRTAwMEY2NEIwN0U5QkQzOTE1NjgwN0UzQkMzRjc2RUI3NDI5N0UKKzoxMDBCRjAwMEFEMkJEREUyRjc4NDc0RUIwNjNFRDdGQUJGQzU1Rjk3RjUKKzoxMDBDMDAwMDc2QzM1RkY3QzVDMUYzNzMyODRBQTUzQjBDQzc5RjVDNDkKKzoxMDBDMTAwMDdFMDlGQjE1RTJFMDZCRDlCQkYxN0NCMzdBODhDNjcwMjQKKzoxMDBDMjAwMDhFRTc5QkY4QjcxRkEyRTBCOEVDQkYzRjYxQkNGREEyMDYKKzoxMDBDMzAwMDk3MzgwN0FCN0VGNEFGMkNCRjEwQUMxMTI3RTI2RDc1NkYKKzoxMDBDNDAwMEU4NTNDRUFGMjNGOUM1Rjk1RDMzRTlCQ0JBRUJCQTYzMUIKKzoxMDBDNTAwMEUxMTk1RkJFQzFFNDQ3MURGN0RDRUU4NDAwQzVERDQ1NDgKKzoxMDBDNjAwMDc2QzhGQzBFNDMzQkNFQTU4RUY0RjNBNzcyRjk5QzcwQjgKKzoxMDBDNzAwMDlEQTlFRkI3QUIxMTBGRTlFN0VCRDJBQzNDREM0MEVGM0QKKzoxMDBDODAwMEMxQjQwNzRBRDQwMEI1NEYzMkUzMEZCQzExNEY1QTk0OTgKKzoxMDBDOTAwMDlFRjQ3RThCRUMyMUJEMkUxQzgyNjk4OURGMDUwQ0YyNEYKKzoxMDBDQTAwMDNDQzJEMDVERjkxQTcxNUY0QjNFQkIyRDZDREFGNTRFM0MKKzoxMDBDQjAwMDFDMkZCQ0U2Q0I2RDc0NkU3RTQ4NzFGMUI5RTVBMjM1OTAKKzoxMDBDQzAwMDczM0M3Q0ZGQUYyNUZGM0YwOTJGMTZCRjhBNzAyNDdBNDMKKzoxMDBDRDAwMDBBMTg4RTVFMDhFNzFCMDUwOEQwRkMwOEYwNzlCMDlDNjYKKzoxMDBDRTAwMDUyQjZFNzQ1QUNCNzA0MDE0Q0U3MjRGMUZFOTQ2NUUwNDkKKzoxMDBDRjAwMDRENkRDREVERUEzNzQxMzlFODIwRjlCRjE0RTUxMUZCMjAKKzoxMDBEMDAwMEJEMzdDNjk2MkY2QkY5OThGMTZDNTkxQzlFRjkwOENGMjgKKzoxMDBEMTAwMDdBNzVDNUIzREM0QjRERkY0QTI5OTQ5QUU3QkE2Q0NGN0MKKzoxMDBEMjAwMEI3RUY5NUY5M0NGRjk0MEI1OERGQTA3MzVFREMzMTM4QzgKKzoxMDBEMzAwMEQ1MjJGM0ZFOUM3QTRBMEE3MUJDNjEyMDRCQkNERjhBNDMKKzoxMDBENDAwMEY4NEU3QTk2ODU4N0YxRjY3RDdDN0FFMkQ5Nzc0N0QyOUMKKzoxMDBENTAwMDNEQjFBQTVGRkZBNUU0QkYzMDNERjFFQkI3MDdCRTQ4NDgKKzoxMDBENjAwMEY5RTdGRURDRkYyRkQwQjU3RUM1Q0VCRkIyMUREM0JFRTYKKzoxMDBENzAwMEQzQzlGRUQwRjY5REJGRUQ0RjcyQjlGRDA1QTc0RUY4NjEKKzoxMDBEODAwMERCN0VBNzUzQzQzNUVDNENFMTc3Q0NEQUZCMDlCRjVEQzEKKzoxMDBEOTAwMDcwQzc5NzI1NjE5NjVCNkI3OTFGQTc1RkVBRTBGRDNFMDAKKzoxMDBEQTAwMEQ1RjIzNzk2MjNBNzVBOUMxQUFEQTM2NjY3MEZGNjhGMjQKKzoxMDBEQjAwMEQ1QkM5MDE0MjJGRjQwRkI4RTJGNDc0NkJGNzdGNUNGNUUKKzoxMDBEQzAwMEFFQTdEQUJDNEZEMzlFMDI3MzI5NkVBNjNENERDNDU5MUYKKzoxMDBERDAwMEQ2QkMzOEU2MTc2QkM4MUU2OURBRTUyMEZGN0ZDNTZGMDEKKzoxMDBERTAwMEZFNUU0MjdDQTlGRDk5NUQwRUUyNUI2ODk3M0UwMjg4M0IKKzoxMDBERjAwMDFGNzMyRUZERTkwM0Y2NUU3NDVGMENEOERFM0U3REU5QkQKKzoxMDBFMDAwMDNCQjNFODdEQUNBRTcwMTE3MDY4NDczOEQwQkExMDJFOTUKKzoxMDBFMTAwMDk1QTQ5Nzc1MDc4RkVBNkYyRDNDM0U2NTdCQTJBQTY1NjYKKzoxMDBFMjAwMDE0RDM1MTI3NUMyNDQzN0M0RjA5QjkyNDVBRkZGMzFFODUKKzoxMDBFMzAwMEYyMUJCNUU3QTFGQ0Q3NjlERDVGOTY5MEZFNzRBMTc1NDIKKzoxMDBFNDAwMEZGQzdBNUUyN0RFRUZGRTdENzZEODM4QjVBRjc1M0RGMkYKKzoxMDBFNTAwMERBNzUwQkZDMUY3NkE5MjZERUE3OEFBMzgzQUU3OEZFN0YKKzoxMDBFNjAwMERDMEYzOEJGMkQ0NUU3Rjk3RTQ1RkE3RkZENUJCQkZFMDEKKzoxMDBFNzAwMEFGQkNFRjI1RTRCN0JERDg3REZGRjg1QkJCRUUwQkVENTMKKzoxMDBFODAwMEZCQUJFNkJFQTdBODc0QkZBRTdEQzdERkZCRjM3QUJGOUUKKzoxMDBFOTAwMEUyQkE5MzhCQkVBREZDRURGQ0VCRUVEMDhGNjRBRjhCNzIKKzoxMDBFQTAwMDlFRDhCQTA3NUFEQjM0NENENzc1QTNBNzhDMkFCMkZDNUMKKzoxMDBFQjAwMDEwQzIxRTkxNEQ3RDYzMUQwQzMzMzY5MTVEODU3QTA2RkYKKzoxMDBFQzAwMEQ5MDFFQjMyNDVCRTFFRjUwNzk5RUYwRjcyQjAwQUQ0NzcKKzoxMDBFRDAwMEY3RDVDNUJCQjY4QTFGNTRDQ0RCRkY3QzIzQzdCM0FDQTgKKzoxMDBFRTAwMENCRkUwRUU0OTVEMTc5ODVGMDYzMDREN0U4QkU1REQ4REEKKzoxMDBFRjAwMDNFOTg2NkQzODIzQTNENTdCNUQyQjcwOUNCRDVERUIyMUMKKzoxMDBGMDAwMDRBRjZDRDNBRUQ2QTU3RjQzQjE2OEFEQjExNjNBN0I4NkYKKzoxMDBGMTAwMEUzRUM4REU0MDI0NzhDNUQ5MjA0QkI1NUYyQzMyN0U5RjQKKzoxMDBGMjAwMDBBQzdGRjM5MjFBQTNERDZDRjJBMTJFRkY0Mjc0MzI4NUEKKzoxMDBGMzAwMEEwQkEyRjFFNEU4QkJFM0U5QzVDN0NBRjUyMzVFMTA0QTYKKzoxMDBGNDAwMDg2NDFFQjc2NkEwQUVCNjEwQUEwRkQyOEQ2MjFFQzRFQjkKKzoxMDBGNTAwMDg0QTMxNjA1NDczMEVENTBDNTA0QjlBMjBENjMzOEEyMkQKKzoxMDBGNjAwMDAxQTE0RDFBNEQ3MEY1MzMxQzgzQkQ2NDk1RTFEQUQ5QUEKKzoxMDBGNzAwMDFGQUYzQjdFMUZENjY5OTMyMENGRDRDNzI1RkQ5Qjg3MkIKKzoxMDBGODAwMEYzRDgyMjExMUYxMDBGNjcyQkNERjc5NUFGMjFGRDc3RjYKKzoxMDBGOTAwMEQ1MUE3MUNFRjVDQ0VGQkVDM0Y5MjYzQkVBQzM3NENGQTgKKzoxMDBGQTAwMDMwRDVCN0EyODhGQzhFNUU0MzIyM0E1RDM1NDNCQzJGMTQKKzoxMDBGQjAwMDU4NDZGN0MwMzJDOUQ0MTc3MUI4OTlBRUJFQTBCMEJGQjkKKzoxMDBGQzAwMDEyRUQwQ0Y2NTdBQTQwRjY5RjNDMDkxQUQ5MUZFODU1QjYKKzoxMDBGRDAwMEUyRTI3QTU1OEU3QjBBREUyQ0UyOUVBMDEwMzRGMTRFQkUKKzoxMDBGRTAwMDRCNkNGQzRGNjAxMjE0NTI1Q0MzMTRCOUFBODFFNjc1QjUKKzoxMDBGRjAwMDBBNTIxQTI4RUVEMjYxNkZFRENGRkVFMTdFMDA4RjkxOEEKKzoxMDEwMDAwMEJGQTVGQzhCOEQ1NDlFOEI3QTNERDA3RDMyQTVGNTNEREUKKzoxMDEwMTAwMDhBNkZCODRENEUwNThFQUI4QUUwQTcyOEI4NUQ3NkM2QkMKKzoxMDEwMjAwMDA1NEExNDlDQ0IyMTJEMjY3RkEyREZFMTI2QjIxM0YyQzQKKzoxMDEwMzAwMDAyNEU5NTgyQzcyQTVDQkQ2MkRBOUZFODc1ODZDNzBCQUYKKzoxMDEwNDAwMDNBNUQyQUQ5NDc1M0Q0REM5OEY2QjI2N0VGN0I2NEQ3NzAKKzoxMDEwNTAwMEJDOTE2RTYzQkJFMEYyOUNDMTMxRURBRkZBRTBDNEM2NTcKKzoxMDEwNjAwMDA1MjZDRUQyM0FCRUY3QUVCOEE3OEFGNkQ2MjNBRjYzMkUKKzoxMDEwNzAwMEJCMzdFRjA3MjBCRkYxMTU1QTY5NENCQjY2RDNCRjEyQ0YKKzoxMDEwODAwMDk5NjJFN0Y3NjZBRTJDMUMxMzMzNkU3Mzc4MzdDM0E1RUQKKzoxMDEwOTAwMDJBMEIyNDNBMEZBRUIyMjE0OTYwQkRFRkVBRTUzMUY1RTMKKzoxMDEwQTAwMEJFMzdGQThBOTg3RTY3MTgzMzYyRjI1NUFCQkYwMDI1QzcKKzoxMDEwQjAwMDAzNjBEQ0VBQjM0MEVGMDc5NkI2MzZDNkI0MUZCRUI3OEUKKzoxMDEwQzAwMDM5QTZCRUU3NzUzNDg1MzAyREREQTcwNTI5MUQ3NTUwN0QKKzoxMDEwRDAwMERDMjMxRDhFRkI0MUU3MUJDREUxODUzQUM1RUIxNEQzMjQKKzoxMDEwRTAwMDA1RDAzMjNBMTZGMDU2NTAxOEYyQzhBM0ZFOTcyOEJEMjQKKzoxMDEwRjAwMDUwRkMzMjk4RUZCMjI2OUJFN0FGRUI2REExQzYwNUI5NjUKKzoxMDExMDAwMDE0RkZEM0YwRTM1RDEyQzc0M0VFMjYzQzFEMUQ2OUE4MTIKKzoxMDExMTAwMDQ4QzVFQTYzQ0YzNEJFNDQ2OTUzREJGODdBN0FDN0IzNzMKKzoxMDExMjAwMDBBQTA4REU1QUZEQkM2RTcwMjUzRTQ5NjEyODlFRDlGNzYKKzoxMDExMzAwMDFFQzM5RDUxRTcyRUREQkREN0Y5QTNEMkYyN0Q0NTQ4RjAKKzoxMDExNDAwMDQ3NkI3MzhDODY1REM0RjcyN0JEM0I1RkNFRUI1QTBGQjAKKzoxMDExNTAwMDU0MjUxMjhERTczRjJBRjUxRUE2Mzg0RDJCNEUyQUI5OEQKKzoxMDExNjAwMDQyMTZCRjQ3NzFCOTg4OTNBOUIzRTk0OTI2RjM2MkZERDYKKzoxMDExNzAwMDQwOUQ2QUU3MzhGRTY1QzU4MkJGOEQ2Q0RCRENFODJFREEKKzoxMDExODAwMDIzQkJEM0E1RDFCRTI2NjdDNERFRjNCRTcxQjRCOEI3MDYKKzoxMDExOTAwMEY3NDU5MTc5QkVBMkE4NTlENzkzMUZCQzM4NDVCNDI3MEIKKzoxMDExQTAwMDFGMUY4RDM3RERDNkZBOTRFNzgwQkVDNzhFRjlGQjBBOTQKKzoxMDExQjAwMEY3QTlDNENFOUFBNjdGMTBFMEY3NEQwRkI0NEQ5MDM0MzYKKzoxMDExQzAwMDgwOUVGNzk0REFDODBFODdCRDc2RkU3RDk5QTZDMkM5QzcKKzoxMDExRDAwMEE3MEJBODdDRkE1QjFDQzNCODZCQzIyRjBCNDlCRUFEMzIKKzoxMDExRTAwMDFDM0NFNEJDRUY4QzdBQ0U0OEEwNDVDNTQxMkMyQkQ2RTQKKzoxMDExRjAwMDc4M0UxRTI1Q0NFRjEyNzlDRTI4NUNFRTk5QTdEQkZBNUIKKzoxMDEyMDAwMDQ3OERCNzcyODJEMEZGNTYwRTRFREU0QTc4RUIzOTYwQkEKKzoxMDEyMTAwMDg4QjhBODQyQjczNjgwRTkyMzlDQzM3QzQyMDlFNzVDQzIKKzoxMDEyMjAwMDlGMjJFMkFCQjRGM0JDRjM3RjdDQ0I4ODM0OTI2MzE5OEEKKzoxMDEyMzAwMEU1N0ExQUY5NDEzM0I2Q0ExREY3Q0U2ODNEM0ZBNkZGREQKKzoxMDEyNDAwMEQwQzEzQUFDREYzRjE5RTdCNTg1NjJENzQ0NzkyQkYyQkMKKzoxMDEyNTAwMDI0NThFRkIwQ0E5MTI1NjEzRTQzQjJDQUQ3Q0Y5RTVDRjUKKzoxMDEyNjAwMEM0RUYzMUM2RDQxRjlBRDc1MURGNzBFNTc0RjZBRjE1QkQKKzoxMDEyNzAwMEFGREZCRkI2ODhFMDM3Q0E0NjcxMjVFQjdGNjdFNzc3RjcKKzoxMDEyODAwMDA2NzA5REFDNEZBQzQ0N0EwNkU5N0NGMEVDNzEwMTc4QjUKKzoxMDEyOTAwMDdBQjhGQzkwQTRDNUJEOUZEQjVBNENGOTgyQkVCRTQxMTIKKzoxMDEyQTAwMEM1NThGRjkyQjNBOUZDMEVDMDY3RjU0OTJDRkYyRTM5MzMKKzoxMDEyQjAwMEZCM0Q3RUFGQjNDOTYxRjRCRjlERkQzNzQ5MUM2RjM2NUUKKzoxMDEyQzAwMEUzRTY4RjM3QUMyNkJBQkVFQTc4MjFDNTI4NThFRjU3MzcKKzoxMDEyRDAwMEQ2QTg1RjMwM0ZCMEUyRUMzQUUxODdGODhCNzhGRjYzNDUKKzoxMDEyRTAwMDVCNjc5RUY4ODNBNzEzOUUwNkJEQ0ZCNTNFMEFCRUY0OEEKKzoxMDEyRjAwMDlCMkYzMzRDNzhGQThBMzdDRTVFOEJGRDZCOEJBNkU1M0QKKzoxMDEzMDAwMDEwNUQ5RTA2MzdDN0Y1OUQ1NjFGOUY0REYzM0RCREM1MjkKKzoxMDEzMTAwMENFNDFCNDREMjZCRjBDMTQ5QUVGMTE2NDg2NzNFODVFN0IKKzoxMDEzMjAwMDdFRjE5QjM2OEU0NzNBODhGODYwMjAzRUU0QjdCRTk5M0UKKzoxMDEzMzAwMDVFNENFRDMyOTU3NDhBNkYzODNERkVDRkZDNkVDMkU5OEIKKzoxMDEzNDAwMDFGMDIwNzE3MkYwQjNCMTg1RTREOTk4QjJBQ0ExOUZGRjYKKzoxMDEzNTAwMEI1NzRGMjNGNThGMDZEMzRGQjc5QjhENEI4QjI5OEZENEIKKzoxMDEzNjAwMDVDRTY3RDExNjNFQzQ1QkQzRkI5NkJDMjk3N0MyRUIwNDYKKzoxMDEzNzAwMDM2MTdGNUZDMzQwQTM5M0U1MzQ3RUY0QkFFQ0NCNUIzQzQKKzoxMDEzODAwMDVDNUE5OUY2QzVENDRDQzJGNzcyNTc4NERFODFBODU5Q0QKKzoxMDEzOTAwMEZEMTlDMzE3QkJDOThEQkUwN0E2OUM5MTQxOEI4QURGN0YKKzoxMDEzQTAwMEQyODY4QUZENTcxNDgzRjc1RjM5RTNFMEYyQUFENUE3MDYKKzoxMDEzQjAwMDk5NkY1QkVENEY5OEU3QUJGNDJFMjNERDE3QUFGQTg3MDAKKzoxMDEzQzAwMENDRjc0NjkxMUZENjRCQzMyOERERUQ1ODE5QzU0RkEwNjkKKzoxMDEzRDAwMEYxRDMwRTNFM0YxNEY3RUFCRUU5NkYyNTkzOUY3Mjg2NjQKKzoxMDEzRTAwMEE0Q0VBMkY5QjU2QzNCMzM5QkUyMDU2NjI0QTlCMzI4RDEKKzoxMDEzRjAwMERFQTA2RURCRkJCMzI5QkU2MDQ2M0Y3NTE2QzUxN0RDNjkKKzoxMDE0MDAwMDU3M0M3OTBFOTdGNzUyMUZCMEExRkM3QUI5NjRCRUM4NTkKKzoxMDE0MTAwMEU3QUE3RkEyRkM1MzVCRUY5OEMzRjU1M0M0QkVERkI2QzcKKzoxMDE0MjAwMDc1Q0U5QzAwRjM2MzM3RDNDMUE5RkExRTIxRTc3OUU4OTIKKzoxMDE0MzAwMDYwRTlFQTE3MjFGQTNEREIyRUU1RTZFRjQ5QzE1Q0MxMjAKKzoxMDE0NDAwMEY3M0VCOUJCMEZCRkRCMDkwNTZEMUMyRkI2QkU1OEY4QzAKKzoxMDE0NTAwMEZCM0JDRjU3NDFBNUYzRDVDQzdDMzBDOERGOUNGOTVDNzIKKzoxMDE0NjAwMDkyRjg1REEyNDM2REZEMDk3RTQ3MzZERUYyMDNGMkE3RDYKKzoxMDE0NzAwMEFFOTA4MERGRDFBRjAyNkQyNEQxRDU0MjVCRjgzRDRBRkEKKzoxMDE0ODAwMDVGMUNFRUJCQjc5OEY1QTkzNjhFNzc1REJBN0EyN0NGODkKKzoxMDE0OTAwMEVGNTNERDhDNUI1NjIzNDVERUFGRjU0RTA0RjY5RkYwMkYKKzoxMDE0QTAwMDlEODhEODM4RTMwRjZDREE0MEVBNTczMUUxQjI1MDZFQ0MKKzoxMDE0QjAwMDlCRUYxMEYzN0E5NEU2QjUyMjdEMTdDNzM5MkI2QTVCNTAKKzoxMDE0QzAwMEI2NEZFODUxODU2QzNGRTUyNEYzN0JEMTc1QkRERjI5MkMKKzoxMDE0RDAwMDQ5RjQzQjA4OERCNTI4RUY5MUU0OUVBOTZERTY3NEY1QkIKKzoxMDE0RTAwMDUwNjA3Q0VCQTk4NDFEM0FGNjUzN0Q0MEM4OUQ5MTZERjgKKzoxMDE0RjAwMDFGMzhBMkUzMTk3NzlCRjA0RDM1N0ZFRjJBM0UxRTc3MDgKKzoxMDE1MDAwMDM3QzlBNUE4Qjg4MzE1QkQ1QkZCOTI3RTY4RUQ2QkU3NzQKKzoxMDE1MTAwMEJFQjRGNjM1RjcwNTY4QkU5OTE5MkYzRDQ1RUY5RDUwQ0QKKzoxMDE1MjAwMDlDRUIwRkU5M0NFM0I5QTQ1NkYyNUI3NzhGMjdENjNFREMKKzoxMDE1MzAwMDg4NzkzNzI1MEJCRTExNzkzNjg5RjVBNkY4NzUxQzM0RTQKKzoxMDE1NDAwMEU3NkRBRDI3NjJDQURGRUVENjExMzFFNUVCQkY2QTFENEMKKzoxMDE1NTAwMDExOTNCRkM3QUZDN0EyNkZFQkJCNDVERjVEREI4QkY5NTQKKzoxMDE1NjAwMDVGM0NERTg5N0I2RDE3QzIzQjhCRkY1NDgzQUY1MERDNDEKKzoxMDE1NzAwMDk3MTZGQ0M2ODJCNzM1NEYwQjZFNEREREM0RTMyQUFCMjAKKzoxMDE1ODAwMDlGOEY1OThGRDIzNjg5OEMxRTQ4MkQxMUVGNUYyOThEODAKKzoxMDE1OTAwMDU3MDBFRDg3QjJCQTg1RUI3NUI3MUUzOUU1MzMzRUM3MDQKKzoxMDE1QTAwMDU5QTY4MTlGRjRERUY4NzU1NTQxMjNCN0VCQkFBRTA4MTIKKzoxMDE1QjAwMEYzRTMxNTlBRTBDNzVERTNGODIzQ0M5RkFCRDEzRTIzNUMKKzoxMDE1QzAwMDdEREM1QTc3MDc5RkM2RjUxMzdENEY0MDg2QzM3QzkzMTkKKzoxMDE1RDAwMEVFMTI0QTY0NUZGODYyRjRFMzcyQkEzMTExN0Q2RUU1OEYKKzoxMDE1RTAwMEJBMzkyNjNGNDVCRDNEQTZGRUU1Mzk2QjYyQ0FBRkQwOEMKKzoxMDE1RjAwMEVFOEUyOUJGQjJGMERFOThGQzc3RjU5RkM2RTlGNzlCMjcKKzoxMDE2MDAwMEUyRjRGQjI3NjJDQUM3ODdEQjU4RkY3RUEzNzYxQUM3QkUKKzoxMDE2MTAwMEE3NEYzQzFBNjEzREJDQjU1NkU1RkNFRURBMUM0RTVGQTcKKzoxMDE2MjAwMEFFRDU5OEZFRjdENDE2NzJCQUI3NTZFN0VGQkZBQjFEMkEKKzoxMDE2MzAwMENERTlFQkI1MDZBNzZEQjU1RTRFRTNGOTQ2NTk1QkI4NEIKKzoxMDE2NDAwMDhDRkNGQkEzMzM1M0Y5M0M2QUUzNTBERkY1MjUxNDA3MDgKKzoxMDE2NTAwMEI5MkY1MjQ0RjgzN0Y2NDBFMzRCMjQwQUYyNDM5RkJFQjkKKzoxMDE2NjAwMDQ3RjU0RUFCMEU4RTQ3NUNCQjZCQ0MxRjZFQzE3Q0M2ODQKKzoxMDE2NzAwMEVCMzIyNDY5RTdEMzhCNjQzMEEyRjBDNzMzM0QwQzc0OUUKKzoxMDE2ODAwMEZFRUQwMUYxM0U1NjdDRkQ4NTI1NDI0RjlFMEI2MUYxM0EKKzoxMDE2OTAwMDlFQzA2QTNFMDE4N0I5MkVGNTE1MjM5M0M1NDY4NEVDOUEKKzoxMDE2QTAwMEY2QjlFMDY3M0RENEI2NUFCQzUzMzMxNzc0MjgyMzdCOTAKKzoxMDE2QjAwMEQ2MDdGRTdCMzgxRTI5RjY3RDAxQUYzMTYzRERBRkIwNjIKKzoxMDE2QzAwMDdDMzZERDNCQzVGNkRGNzczN0YyQkRGMjY3RjZBNjRGMTUKKzoxMDE2RDAwMDJFQzVFRkQ3N0EyNUZFOUQ4RjAzM0JFRkJBRDVDNUY2MTEKKzoxMDE2RTAwMEFGNzVGRkY0MUREQkM1RTgxMzBCNEIwNDdEQjU0QjdBREEKKzoxMDE2RjAwMDFCQ0QzNzkwMjZERTJGOEE2RjM3Q0E1Q0U3NTVDMTA4QUQKKzoxMDE3MDAwMEVCMUYxMUQ0M0YyOERFQ0NBMkNCMTlFQTIxNzNGRDlBM0UKKzoxMDE3MTAwMDJENzUwQ0QxQzcxQUJFREY1MEQ1QTZFOTQxODRGNzk4QzQKKzoxMDE3MjAwMDQzODIyRTQ2MjA1REQwQkU4RDNEMkFFODYwMjREMjAxNDIKKzoxMDE3MzAwMENCNDFEMzNFQjRFODAwRURBOTk3QThGREE5ODNBMDNCMTcKKzoxMDE3NDAwMEIxN0REREM0MUZDOTY0N0Y4REY5MkMxNEE0RjRCMkIzM0MKKzoxMDE3NTAwMDkxNURFN0IwN0M1QzlCRjhEREE0MEJEOTkzOTY1RURBRDMKKzoxMDE3NjAwMDUyM0I5N0YxNjg2N0FEOEZEM0Q2REE0QTEzM0ZGRDlDQTEKKzoxMDE3NzAwMDdGQjk3NjM1RTdGN0Q0MDYzOERENUI1QjZGRTI2NzAzNDgKKzoxMDE3ODAwMDk3QkY1RUJCODFGMzZGRDQ4NjRDM0NEREMyREYzNTkyRTAKKzoxMDE3OTAwMDY3MDg5RkJCNEI0QzM5RUQyQTM3RUQwQTkxN0E4RDM1OUUKKzoxMDE3QTAwMDc2QkVFNzhGOUY4ODlGQ0NBNUI5MTI3RTU0NEEyMUUyNkUKKzoxMDE3QjAwMERGNzVFOTAxM0JFNUVCOTI2OTBGNjhENjAxQUU3RjlEQ0QKKzoxMDE3QzAwMDFCNUE0OTBFNTRFNUJDMjhGNEIwMzgzQzI5Q0ZCQzg2REUKKzoxMDE3RDAwMEYxNjRBNjE5Qzc3QTIwQkRFRTU2MDdFMkMzODlDNkZCOUQKKzoxMDE3RTAwMEVDQjFFRjhENUUxQzVFMkM3M0FGRTU3QjdERjE3Q0YxN0YKKzoxMDE3RjAwMDI2N0E4RjQyRUVDQTBGMDE3NEJEQUM0Q0RDRUZBMjM4RTIKKzoxMDE4MDAwMEJEQUZDQUVGNTU1QjlCNzk1RjRDREM3RkE5RUVFQkU2ODEKKzoxMDE4MTAwMDM4REI3RjlEOUM1MTREMzkwMzBCQTg3RTg3RkQ5RDdDNTUKKzoxMDE4MjAwMDcwM0VCRDhGRDcwNTJFNzFGNkY3RTE0MTYyN0YyREZCMkIKKzoxMDE4MzAwMDFCRjU0Q0Y2NEJCNTg3NjRCNkJGMkE3MzFCM0M2QzdGMTcKKzoxMDE4NDAwMDhGOEU3ODY4M0Y2RkRBMjEwM0VCOEI4QTM4RUY1RDRBMjEKKzoxMDE4NTAwMDFENjkxNEQ3RDNCQTdGMUNDQjk5NTU3Qjg4MkYyRDMzQTQKKzoxMDE4NjAwMENGN0JFM0NGNkRBQkU5QkM1NzRBMDRFRjMwQzdENTJGMzAKKzoxMDE4NzAwMDM3Q0Y3QkUzRDc1RDNERkUwODlGRjc1NjVGRTA1RUU5MUIKKzoxMDE4ODAwMDdCMjVCMUJGRTcxMzdGN0ZCNzNCN0NBMTc4ODJFOEY3NjgKKzoxMDE4OTAwMDVDNEY5RUFENjUzQkVEQzhCNjNCMUUwQUY0RkREN0VEMkYKKzoxMDE4QTAwMERGQURBNURFQ0Y0QTQ0MUMzNURGOUJCM0Y2QjNDRUZDREIKKzoxMDE4QjAwMDVEQ0VCQTQ5MkVCRUM3RDAzRTQyRTVGNzZGREEyNUYxQkMKKzoxMDE4QzAwMEZFNEVGQjVGNDE1RkEzRDFGQjNBRUFDQjI0MTcyRUQzMzgKKzoxMDE4RDAwMDFEQ0M1NzQ3ODdDNTdCMDFFM0U5NUU2MjgyRjcwMjI2OEMKKzoxMDE4RTAwMDFDMEEwNTUzQThEREMxMDBGQkEzQzZFQ0YzMDVFOURFMjUKKzoxMDE4RjAwMEVEQThENzBEOTlDOEFCRjQ2NUFGNEM3ODYwQzkyNzRCRkMKKzoxMDE5MDAwMDVFNzVEMjk1Nzk2RjhFNjIzMkYyQkYzQUZENjk4QjQ2NzEKKzoxMDE5MTAwMEU3OTA3RUQ3NjFCN0JBQTdGMjNCNDVBNzVCODFBMzQ5QTEKKzoxMDE5MjAwMDJEQkZEOEYwODM4NjRDRjcxMjQ2MUNGMjA1NDlERUQ2NEYKKzoxMDE5MzAwMDk5NzZFNkE4MTMwMTM5MTVCRjRGRjhDQ0NGNzZEMDE4QTkKKzoxMDE5NDAwMEI0NTNFNTUyNzE4RkRBODg4MkFGRTVEN0IyRjg5Q0M1RkYKKzoxMDE5NTAwMEQ3QUM3QjdCQUFDM0I3ODVGQ0NGRjA0MjEyQkZGRjEyODYKKzoxMDE5NjAwMDNGRUY0MTQzNkRENjdCRDY4Mzg2MTJERjMzRUZFOTREREYKKzoxMDE5NzAwMDkxQ0ZFRTNBNDc3NjQxOUI4ODE3QjhFNDZDRkJFMzY0NUQKKzoxMDE5ODAwMEY3QUM3QUI2MDdERjUzQkI5MDdENTBBMzlFNEVBODlGNUQKKzoxMDE5OTAwMDVBNjk4RDREOUNBMzBDQUJEMDg2OTNCRDQ5N0EyQkQ5NDcKKzoxMDE5QTAwMEExOTY1RDFBNUZCRkFDNzREMkQ4QTE1OTM0QUZGMTZENjYKKzoxMDE5QjAwMDA2RTFCNzZBM0IyRjdFRDdBQ0ZFRjRCQzc2QTEzNTdFM0MKKzoxMDE5QzAwMENEOEUxMUVBQzIyOEJGRDVFQUExOTIxOUM3RjJGNURFODEKKzoxMDE5RDAwMEExOUUxMDk5MUIyM0M3QkVFRDdBMUZEMjYxMTlFMTE3OTIKKzoxMDE5RTAwMEQ5ODYyNEE3QkU0RjNCODBFQkI4MEU1QTU5NUZCOURFQUIKKzoxMDE5RjAwMEZDMUQ4QjFCMDAxQ0QxRjc2NDZGMDQ4M0Y5QzM5Rjc0MUIKKzoxMDFBMDAwMDVGMERFMUNENjI4OENDQTc3QzhEMTRBOTdBMTE0MUY4RDUKKzoxMDFBMTAwMEM5QzQ3MTZBQUVENjU1NUU1RkFDN0M0RTM2RUZDMUM2QTYKKzoxMDFBMjAwMEMzRkQ0RTEzNkYyREZFREZFREZFQzRGMUZGRjY1Mjk1QTAKKzoxMDFBMzAwMEVGNDFCNzNGM0JDRTQ2RTczOEVEQkY5N0Y5RkQ1NEFDRDkKKzoxMDFBNDAwMEM4N0MyNTM4NENEQzNCMUQzRUNGN0M4NzA0RjlDQTAwOUUKKzoxMDFBNTAwMEJEMkI1RjM5M0Q3RUNFNjRGNjFGRDFDMTA2QzU5RjJBREUKKzoxMDFBNjAwMDdBRTFGNTUxRjdDRDgyRTZFRkJBNkNDMTk0RTIyNTUzRTUKKzoxMDFBNzAwMEU3ODU5NUU4RjNCMzlGOUFGMzJGQkY3NjMyOTAzRDc0RDQKKzoxMDFBODAwMDk1MkFFQ0NFMjkyRUM4NEMyMjVFNzhGNjc0RDEyQzY0QUYKKzoxMDFBOTAwMDEwNTc5MTNFM0I5Q0RGNjE3Rjk4RTBEQ0YxMEUwOEYxMkUKKzoxMDFBQTAwMEEzNEI3MERGREUxN0U3N0M3MDkzQzRGRUQyRTYyNjkxNkQKKzoxMDFBQjAwMDJGNUU5Q0M2RUJGQUFBRkI4ODNERjcyOEMxRjUyRjZFNzYKKzoxMDFBQzAwMDUyODYxMTdEMEY0RDhGRTQxMTVEMTY4Rjc5M0I1REMyRkIKKzoxMDFBRDAwMDc5OTU5OEY3QjE3MERBRjUxMEY1RkI1NkVGOUFFQkY4QjcKKzoxMDFBRTAwMDdDQThCMThERTYzNzM0QkQ2REZEN0RBNDVGM0U2QjAzRjAKKzoxMDFBRjAwMEYyMUIxRTE5NzNGQjEyODg5MkNCOUVEMjQ5QkZBMjdBQTkKKzoxMDFCMDAwMERCMjVGMzlEQkExREUyRjcwQ0IwNDU3NkI0N0ZFQjRGQjEKKzoxMDFCMTAwMDdBQzVGMzU0QUZENUY0MzNDMEFBRTdGOTFFRkYwQzU1Q0MKKzoxMDFCMjAwMEVDMDE0Q0NFMzI3RjRGMzJEMjNGRDFFRjBCNTlFNzU5MDcKKzoxMDFCMzAwMDQzMDk5NkMyRkZDOEVGOEE2RDM3RkQ5MzZGMEVGRDYwQjMKKzoxMDFCNDAwMDBFRjkxN0ExMzU5MjQ3RjMzODkyMjRFRTUxN0I0QTdENjYKKzoxMDFCNTAwMEJGMjMzRTMzOTRGQ0JDQjQ4RTlGMDlGRkMwOTEzNDNGMzkKKzoxMDFCNjAwMERGMjM3OTFCRjkzMzlEMUZGRkE1RDZDNUU5QkI2ODFGOEQKKzoxMDFCNzAwMDUxRkEzRjY4MUY1MUZBM0VEQTQ3OTQ3RTg4RjYxMUE1NjQKKzoxMDFCODAwMDhCQ0Y2MEE3Qjg3RjMzNzRFMzZERTZBRkREQUNBMzdCOEEKKzoxMDFCOTAwMEZFMTIzMEY1RkJDNEJGRDNGNDk2MDlGRjkyQTY0Mzc3M0IKKzoxMDFCQTAwMEY2MjAzQzY4OTYzOTNFQkFGODU5ODVGNUQzOTMyREEzQjMKKzoxMDFCQjAwMDYyN0U5NzE0RTlGNTMwQURBRkE0Rjk4RjNGQTE3QkQ2RDMKKzoxMDFCQzAwMDI1NEQ4QTJBNjk3NDJGRkI3NDM2QzcxRkM2Q0Q4RkUwNTYKKzoxMDFCRDAwMDQwRTcwRDkxMUQwRUYxN0I0QUU2N0NCN0E3QjVBREE3OTYKKzoxMDFCRTAwMEY2REI5RkNEQTMxOUQyMzk4RUMwQzMxRENFODRCRjM3N0IKKzoxMDFCRjAwMDZDQzVEQjNEMzE1NEU4NUZERjczNDZDQUEyQ0YxRkUzRkIKKzoxMDFDMDAwMEUzRDNEODBGM0M4NkYwQjlFMDBGMzQ0RTYwQUYwQzAzM0QKKzoxMDFDMTAwMDE4MkY2M0ZEMUJGRDc0NzEwRkMxNEE4Qjc3MzgzODRFNDYKKzoxMDFDMjAwMDc5RkI4RUZENTc1Rjg5RkRGRDFGOEZCNjFCMzEwMDgwNEMKKzoxMDFDMzAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJDRDdEOUQKKzoxMDFDNDAwMDBCNzg1NEQ1QjVGMDlBMzlGMzRBMzI5MzRDQzIwMDA5NTcKKzoxMDFDNTAwMDEyMzgwOUFGMDAwMTg2NjQxMjEyMTJFMDI0MDQ4QThBNDUKKzoxMDFDNjAwMDc0ODJENDgyQTI4RUI0NjI1NDFFMjNEMjlBREVEMjNGRjIKKzoxMDFDNzAwMDI3MjQ0MDEyODMwNjA1Q0E1NTg0MDFDMUM3RkRGQ0FFNjYKKzoxMDFDODAwMEQxMDIxNzVCRjQ0RTUwQTlGNkI3MzQyMkUyQTM1NEM3MzEKKzoxMDFDOTAwMDQ3NTUyQzRBOEE2MkVCQUQyREZGNUE2QjlGOTM5OTMzQkYKKzoxMDFDQTAwMDRDMDIyMkZDOTdGMEU5Q0UzRTdCOUZGRDU4RUZDNzNFRTkKKzoxMDFDQjAwMDNCQjMyNjVFNUUyNEM5MDBBN0U5NjcwQTgwQ0JEQjE3MjkKKzoxMDFDQzAwMEEwMDg2MDRDRTlENzBGRENFRkMxRjI1OTlCREIwNDAwQTAKKzoxMDFDRDAwMEYzNjBEQjM0MzdGNkJCQ0VEMUYxQTIxQkVCRDdCQkRGMTEKKzoxMDFDRTAwMDlCOTY4RUY1MUIzMzREMDdBOEJDNDlDRTk5OUU4MTI1NDYKKzoxMDFDRjAwMDQwODhERkZGNTE1RUM1ODEwQ0FDQ0RGNDU2REIwMjRFNEYKKzoxMDFEMDAwMDgwMEE5MDAwRjI4MDdGNEVFMzdGNTMxRDI5MDA4RTY4ODkKKzoxMDFEMTAwMDdEOUFCQjhGQTFGRUJEQ0NDQjBDRkQyRjk3ODcxOERBMjcKKzoxMDFEMjAwMEFGQ0MxQjZENjhEN0U3OURFOTJEMzRGNDFCOTdEMTk1OTcKKzoxMDFEMzAwMDFCNzREMjNFQkVCQUE3MUNGNzAzMjYwODBGQTM3REVEODUKKzoxMDFENDAwMEZFRjJFRERCQjE5QzM1NzE5RThGRjY3RjBDREFBRTE5OTkKKzoxMDFENTAwMDhEMUJGREE0QTQ3OUUzRkRGNEIyNDVCMTY1RjUwM0I4OEMKKzoxMDFENjAwMDg1N0VDN0Y2RTMxMDNFNTI4NkVEOTI2QkY5ODEzQkYxMUEKKzoxMDFENzAwMEJEREIzMjI1OTBCQzAwMzU5QkFERUY0NzYyRDZCMTA0ODgKKzoxMDFEODAwMEZDNjk2MUVDNzdEQjBFRTM3MzgwODgyREVDMDNCODNERDIKKzoxMDFEOTAwMEUwMENCNjIwMDAxNzNEODFFRDBFNDMzQjhGQkI3OEFGQzIKKzoxMDFEQTAwMENENERFRDRCQzAxMjZEQ0YwMUE4M0Q5QUYzRTQwQjMxNDAKKzoxMDFEQjAwMEUzOERDQkU4QkNFRjdFMUM2RkRDOUUzOUVFMDY1Q0RGNkEKKzoxMDFEQzAwMDkzQTU1RjBGOTA3MTlGRTU1RTk3RTcyMzA0MEQ0QzgwMEMKKzoxMDFERDAwMDA5QTcxMUU0MjAzOUNEODBGRDRFQkQyNDg1MjQ1Q0Q3QjAKKzoxMDFERTAwMDM0RTk5QkQ0NDgzRTNFQUY0MjNDNjdFMTdCMjZGOTBGODUKKzoxMDFERjAwMDY1RDhBRUJFMkNDMTRFMUNFNzZGNzVGMjkzMkY1ODY5QTMKKzoxMDFFMDAwMDdDQjhEMTlGMUZBNTBCODA5NTBDNUZCRDdDQUIwRTdGNkUKKzoxMDFFMTAwMDFEMDFGMEM3M0EwNzk3N0ZBQTczNzNGOTZFNUQyNjk3ODUKKzoxMDFFMjAwMEVGRDVDOTVDN0U1MDk3QzdFNUFDNDMxMDY4QzdGMUZFOUIKKzoxMDFFMzAwMEZDRjdGMTAwN0Q2ODFDMTVBMDZGQjQxQzY3RjM5QTA3Q0UKKzoxMDFFNDAwMEUwM0FCQTdFMkY4NUI2RTM3RUJGMjg5RjkwMDZCNENFRDcKKzoxMDFFNTAwMDZGNzBGRTYyMEQwRjQ4MDJENTQ0OENBNUY4REY4RkI3NzYKKzoxMDFFNjAwMEJEOThFNUUzRTdBQTBCQTc1QUYyNzcwOTE0MUM3N0I5RTYKKzoxMDFFNzAwMEQ3MjRDNjVERDRGMTYyOTYyN0RBMEVDQkRGMzNGNDg3MjAKKzoxMDFFODAwMDE1QTYwMzg2N0E2MzhFQjFERTVBNzEyMEY2N0QxRDBFOEIKKzoxMDFFOTAwMEYxRTUyRDlCRUZCMDA1NUM1OEFFMzcyOTIxRTc5OUVEQjAKKzoxMDFFQTAwMEZBN0FBNkVENEY1MjRDMzg5RTY1OUYzRDY0QzdGRDJERDIKKzoxMDFFQjAwMDcxMkJBMDYwN0YwQjgwRDI5RTdGRTY3QjAwRjUwQ0U3NDQKKzoxMDFFQzAwMDc5MTIwNERCMTM4QzVCNDdFMzEyQkRFRjRGMDJFOTNDNTAKKzoxMDFFRDAwMEM2N0QwQjY5ODNENkEzRkU5NzNEQjQxM0RGN0IyQjRERTQKKzoxMDFFRTAwMDAxN0ZDQzNDMkREQUY4OUZBNUI3RkRFMjJCRUNGN0Q5QUEKKzoxMDFFRjAwMDMzNDA0RkIwMEU3MzY5M0Q2Mzc3N0Q2QzM2NjMzOTJFODYKKzoxMDFGMDAwMDU5RDBDOTU4NzdDNDlDODFFNTg5OUE3RjZDM0NFMjYxQkQKKzoxMDFGMTAwMDMyRjU5QjI2NjM3QjZFRDcxMTA3QTJGQ0JFRjZBQjM2NkIKKzoxMDFGMjAwMDM5MTA2RjZGOUJDRDAwMDM0MDIwQkUwNEZCRTMxODU0QjMKKzoxMDFGMzAwMDdGRDA3QkQ1REM0NkZDRkRDQUZENDk2MUYzNzlFQ0U3MzcKKzoxMDFGNDAwMDQxRTQ0NUE2QTM0QUMxRUYzNzEwREQ4ODc5MTQ0MDUxMUEKKzoxMDFGNTAwMEIzNzQxNUU4RjMyQTI0MUY2OEZGNTQ3RkFERERGRkU2NTQKKzoxMDFGNjAwMDdBQTIzM0U4REE0OEYyRTEzODQwQjg4NUQ3QUZBNEM2QTAKKzoxMDFGNzAwMEYyRkZEMjY3N0ZDMkZDQjkyODBCRjk5RTA0RTA2NkMxNkMKKzoxMDFGODAwMEJGMEVGQzc3M0E5N0Y4MzUzNEREODlFQkJEMzU4Q0ZDMTQKKzoxMDFGOTAwMDBGMTc5RkZGOUZGMTNBQTM3QzNFMjIyMTlGMUZCQTEyODkKKzoxMDFGQTAwMEVCNEI5RjkxQkM3NjZDM0VCOTZGOThFMDI3OERFRjc1MzcKKzoxMDFGQjAwMDNFRDdFMUI4NzQ5M0M0N0NBOUQ3M0ZERjI3Q0QwODI1NkQKKzoxMDFGQzAwMDgwRjczNjhEMkU4NjI4NURCMzY5QkU2NUNGNUFBMDA1OTEKKzoxMDFGRDAwMEQ3Qjc2Q0QyODhGRUIxRTNDN0JGQjdCNDQ5MDIzOTY2NDAKKzoxMDFGRTAwMEZDMjc5RkIzRDcxMEJGQzhEMEQ1QUYxQUY5NjdEQ0IzQjEKKzoxMDFGRjAwMEE3MzIyQUYyNDU1OUNGRjg2OEQzRTQ0REQ3MjBGRjE4MEQKKzoxMDIwMDAwMDk0RDcyNkZGOUY3RThFRjMwMUUyNzEyN0MyQTczMjczMTkKKzoxMDIwMTAwMDZFMzZDRDNGREIwOTRBQ0I3ODA2Q0IxQzA3Q0E4OUFCQUQKKzoxMDIwMjAwMDA1ODhFMEVBOTJFQkIyMDFFMUI5MTlEMTI1MjFERENEQjUKKzoxMDIwMzAwMDUxQUE1RkJGMEVGMUY4MDM3M0UwMkE5MkYzQzdCQzQzQzUKKzoxMDIwNDAwMDc4RkM2QjVDQ0JBRDYwNjY3MkNEMzZFMTc4NzNFN0Q4MTcKKzoxMDIwNTAwMDBCNjkzRkIzMUEwNDVEQkY5RURFNzU5QzlFQkYzRTI5OEYKKzoxMDIwNjAwMEM1RDQ4MEVGQkQ2RTgyNDZDODg4RUVFMzc1QUIzRjlCNUEKKzoxMDIwNzAwMEU4MEQzN0VFRkUwOEYxNjM1MjQ2NDlBNzUzN0E5NjE3RUEKKzoxMDIwODAwMDQ0QzkxRkU5Nzg5NEEyRjI2RjlBRTQ1NDY5OUU5MzZFNTIKKzoxMDIwOTAwMDMzRDNCRDI1QUJENTQ2RUJCQTE1NDIwNzE0OUM3Nzg5REYKKzoxMDIwQTAwMDM3NkMyM0Y5NzczQkI4MkQ1NDYyRDFENTREMUY0NDdGNEYKKzoxMDIwQjAwMEU1RkZFODM4OERFRjJGRTk5NDQyMjZFQ0RGNUVENzBFN0UKKzoxMDIwQzAwMDE2QzRFRkQzNzU3QkI5MUNGQ0NERTBDNkNCMTAxRUNCN0MKKzoxMDIwRDAwMEM3REJCQzJEQTRCNzM0RkEzMkFCMjYzODlENDA1RjlERDgKKzoxMDIwRTAwMDQ5OUY5NjY4M0JBRUJCQzJFMTBDNEJBOUY0RDg3QTNDNDEKKzoxMDIwRjAwMDc2MUQ4REQ5NEFDQTc4REM4RkJBQTYzQzlERTk5MzY4RDMKKzoxMDIxMDAwMDYxNzA3NDlGRTM2QzAwNEU5MkYzM0I1MzU4Q0UxRjdCN0IKKzoxMDIxMTAwMEFFRDg0Qzc4M0FGNjNCNkJDODQ0RjUyRDIzREVCOEQzRTUKKzoxMDIxMjAwMEM3NzUyMDc5NzMyQ0MzNkJCNjUxN0I0NjZFNDhDNUY2RDQKKzoxMDIxMzAwMDVCQ0NBMDkyNUM4NkVENDI2RTNEM0ZFOUFFNzc0ODhFNjcKKzoxMDIxNDAwMDJEREZFOTMyRDk0RDgyOEU2NTM0MDFBNDQ3RDdCRUYzMjUKKzoxMDIxNTAwMEVGMzhDRUFEQzhBQzc2NkY1NDZGMkM5QUYyRThDNjI3MzQKKzoxMDIxNjAwMDkwMEUxNjk5REJFRTI5Qzc2N0E3MjAzQ0Q2OERGMEZDQjAKKzoxMDIxNzAwMDhCQTk3RDM4RTlFRDhGMUZCMjg3Q0RGNERFQzMyM0I3N0QKKzoxMDIxODAwMDRCMzhGRUNCQTk4MTkxQjQxRkM4NTRGQUU3RTBGMzlBMEIKKzoxMDIxOTAwMDQzN0RBMTA1REY5RkZBRTgzRjBGOTJERUJDRjVDOUJFODMKKzoxMDIxQTAwMENDNUYzQURENEYyMzNFQzRGNTlDNDAzRUE0RjU5Q0RDNTkKKzoxMDIxQjAwMDM3ODRGOTJFOEE3RjAxODdDNTI4MEZDODI0NkFERUIxQ0IKKzoxMDIxQzAwMENFNEZGODBDMjRDQkZDREMwMkFBNzIxOUUxN0JFRjRENTgKKzoxMDIxRDAwMDQwNzY1MzgxNjQ1Mjg4Q0VCQjlBMTE1RUE2MzNFOTQ5OUEKKzoxMDIxRTAwMDE5NkZFNkY3MTY5OTUxQkYxMjFEMDZFNDQyODJDNzA5MUUKKzoxMDIxRjAwMDkzNUNBMEYxMDVEMDdBREU3RjZFRTRGNjE2N0M3RkFFQUMKKzoxMDIyMDAwMEQ2M0Y0QTc3NDc5N0ZDODZFODZFQjNERDZCQzcyNTFDM0YKKzoxMDIyMTAwMDRGMzJFQTdEQkQ5QzM5M0U5REY5RTUxNkM3OTc2MDI5OEUKKzoxMDIyMjAwMDhDM0U1RjUyRkJCNUIxOUUwRjBBQzk4RDgyMDZCOUYwOTQKKzoxMDIyMzAwMDBFMkNFRkQ0RTA3RUM1NDhGRkY3QzdFM0ZCQjdCNUFGODAKKzoxMDIyNDAwMERCRjM4QTRDRjM2RUZFRTlEQjM0RUY0QjRFOUUxNzVFRjgKKzoxMDIyNTAwMDExRjAzQjYxMTJGQUE1NUJCRjNBRkVDQUUzQTNFNEUxQzkKKzoxMDIyNjAwMEY1RUFDRjNGN0VFODhEQjEwMTFDRkZFM0REQTM4NzAzRDQKKzoxMDIyNzAwMEQyREQwMkE5RjNBMzA3MTE1RjlGQkIzQURGRjkzOTk2QkMKKzoxMDIyODAwMDRGQkY3NEE4MUZDMTJGN0VCRDhCNkFCRjAwNEI4QzFDMzMKKzoxMDIyOTAwMDNBNkUzMkYxN0UxN0QxM0VGMEY5NkYwQUZEMzczM0JFNDgKKzoxMDIyQTAwMDJEQTgyNzEwNkUwQjVBQzY2QzI3NzkzMDREQ0E0RjIzQzQKKzoxMDIyQjAwMEJCRTlDNDMxRTNGQUUyRDdBOThGQUZBRjRGMUY1RkVGOUQKKzoxMDIyQzAwMEI3OENFMDhGNzA5ODM4Q0UyREY0QUJBREYzNzNDMkVGQkUKKzoxMDIyRDAwMDY3N0I0NjlCOTAxNUEzQ0YzMzNBQzdBNkU3NDdGMUU0NDcKKzoxMDIyRTAwMDU3RUFBREQ0RUYxQTEyRjU4ODhBQjkwRTgxRDdCOTM1RkQKKzoxMDIyRjAwMEE2NTA0MzBFRjdFM0Y2RUJGMDM5RTFCREMyRDNDMEY1Q0IKKzoxMDIzMDAwMDM5NEVENDY3RDg3RjUxRTY2Rjc4NUQyNEU4MUNBOEQ3OTIKKzoxMDIzMTAwMDdFMDBGQTRGRjVBQTVGNjFCRjM3OTdBNUIyNUM5ODdCNDQKKzoxMDIzMjAwMDRCOUI5NUVDREM2RTc5QTZCRTZEM0UzREZBREJDQjMzNjQKKzoxMDIzMzAwMDg0OUVFQ0VFMDdDQ0MzQTQzRjAxMzc2N0MxRkEyNEFERkQKKzoxMDIzNDAwMDZFMkFGOTYzQzNBRjQ4M0VERjk5RUE5NUQwNjQ4NDFBRDgKKzoxMDIzNTAwMDE5QzJDNEQ3MjcyMTQ0RjA1RTZEMEFCMkJERTcyMDNEMDMKKzoxMDIzNjAwMDgwNjU4QkM5OUI2OUMxNTIzMjc3RjUwMTlFMjdDNDcwODUKKzoxMDIzNzAwMDlBMDYwMTBCRDU3RjZCOEEzNDAwQkVCN0NBNTM5OTQ5QzAKKzoxMDIzODAwMEY0RkYyNjM4RkQ2NDE3RkQyMDdERjUxODkyQTM5NUVFMjUKKzoxMDIzOTAwMDk5NzNFOUY5NkMzNUQ1REQ4MkZCNkRCNENBNzdFNzkzQTMKKzoxMDIzQTAwMEZERjMwM0M5NEI3NkFGMEUxNzVEN0ZDQ0I1NzhBRDA0NTYKKzoxMDIzQjAwMERGN0U0MUQ5QUIyMkZEMTZCRUEyMzg0QzBDN0Y4NzRBODYKKzoxMDIzQzAwMEUzQkU2MTA5RjZBNTc1QkRFNTVDM0ZDNjY0MjYzQjJERkQKKzoxMDIzRDAwMEU0MUE4MzlCN0RGQkQwN0YxNEZEMUVERkZGMjMyODkzMkYKKzoxMDIzRTAwMEM4MUU5OEYzNUIwN0NCRjE5QjQwNjY3RUZGMTEyODJDM0IKKzoxMDIzRjAwMEM3NkY4NjAwRDc2RjgxODhGNTRCN0NFRkRERDJGRkQ5QTAKKzoxMDI0MDAwMEI5MUZBMkZCN0E3N0UyNTdCQkM5QUU5RjJCQjVGN0NEQjgKKzoxMDI0MTAwMEMxNzZCNTEyRjI0OENGRkNEQUYxN0ZCNjQ2NzAxRDRBOUMKKzoxMDI0MjAwMDgzMDU5MkQwQkVGQTM1RDEyOUQ5RUY0NzVEQTE5REQ4NTkKKzoxMDI0MzAwMEVGQUVFNDJEQTkxRDU4OEY5ODg0RkRBNTU2MDY5RkE0RTQKKzoxMDI0NDAwMEZFQUExOUZDMEQ1OEY2NEQwRTNDNEY3Q0Y4Q0IxNDMxMEEKKzoxMDI0NTAwMDRFQURDNUUxMjZGOTQ4MDYxNjhERjNEMTNCMkVBNjc3ODEKKzoxMDI0NjAwMEQyQkIzNzYxQkQwQ0IxNDVGMDNBRDE1N0QwOUJGQTU3N0EKKzoxMDI0NzAwMDYwQjk3QkMyRUFFRDU0NjhEQzUzQjI3NzI3QkQzQUQ1MjgKKzoxMDI0ODAwMENDRUZDMzY5OTlENzUxMTZBNzVGN0NBM0NERkMzRUZDNjYKKzoxMDI0OTAwMDQzRTZGNzI3NzU1OTBDRkFDNTM3Q0UxQzdDMUFGNzM3NzcKKzoxMDI0QTAwMEU1RUY5NjVFRjVDRUNEMDU4MjdGN0M3RENDQzE0NEY2MEUKKzoxMDI0QjAwMEUwRkY2OEZDODUxMDkyNjgzRDBEN0I0REExMTYyNjQyMTkKKzoxMDI0QzAwMDYxMUY5NEU5RjQwODkxRDU0NDZGRTUwMDQxQTI3QkQ4REYKKzoxMDI0RDAwMDhCN0E0QzlGMjc5N0Y3RkZCOUVBMjMzQUM0NzZCNjA3NjEKKzoxMDI0RTAwMERCOUYyNzM5NjkwRjBBM0VDMUZBNTREQThGMjMwODVFNTEKKzoxMDI0RjAwMEIyRDc1MDIxODMwNUVCNDlGOEEyOTBCQjZFMjAzQkI2QzIKKzoxMDI1MDAwMEE1MDJEQUE5M0UwOTIyMTJFMTdCMEE0MTdBMDhGOUMzNDEKKzoxMDI1MTAwMDMyRDNFRDU0NTBCOEFFRDNGMUY3NDBFNUYyNzIwODcxMDIKKzoxMDI1MjAwMDc5MjU4NDg1QkUwN0I5RjEyOTlDRkZBQTRGNDBFQzY3NDUKKzoxMDI1MzAwMDU0OThFOTFEMUQxOUY3NDc2ODZGQzBFNUI3OThDOUVFQjMKKzoxMDI1NDAwMEYwRkQzMEIxQkYzMEE4NDA4NzBCMjJDNDczRUU3MDk5MDQKKzoxMDI1NTAwMDBFODE0QzMxQkY4MDg3OUQ5RUZCQTJGMDcwQzRDMTIzQzkKKzoxMDI1NjAwMDg5RTBFMThEQzIwM0U3MTBGMDM4MDNCRTAyM0U5MzE0MDgKKzoxMDI1NzAwMDg0MEZDQUE3QzlEMDI1RDEzQzhBNjZERjU0ODI5N0NCODUKKzoxMDI1ODAwMDJBRjA3M0Q5MEI1QzVFQThGNzlDMDk5NzkyNDhDMDEyOTkKKzoxMDI1OTAwMEM4NEYwMDlGQTk4OUU5NjY4NDA2OUYzRjE2MDBDQjJGOEMKKzoxMDI1QTAwMDVERkU1QzVCMjBGMzczNUQwRTIxN0Y2NjkyM0QxQTJGMEEKKzoxMDI1QjAwMDlGRjRFN0JFOTRDQTJGNjRBNDg3QUE4MkFDNzkxNkQ0OEMKKzoxMDI1QzAwMDY3QkVDMkNBM0I4NzYwRkRFQUE3RjM0NEJEQUNGMjU3QzEKKzoxMDI1RDAwMEI5NThGRjQxQzEyODUxMUY1NzU5Njg0NTc4RDU5QjQ2QzYKKzoxMDI1RTAwMENGQUJDMkZBOTA4MDY5MjNGMUU1RjI3QUI0QUI3MTVGQTgKKzoxMDI1RjAwMDgxQTQ3QjgyNDRDN0E2MEM3MDlCQjAzRDUwNUZFNDJENDQKKzoxMDI2MDAwMEMwN0EwMEU5MTIxMDZFNzYyOUE3OUVFMDZDRkYzOTc4MzcKKzoxMDI2MTAwMDFCNzAxNTE5Njk4MUM5MDVCOERFRkNGOTlEQUIwNTNFMzMKKzoxMDI2MjAwMDJCRkJDRkM1RkVDNzNCQUQ2Q0I3QUNCMTA1ODM4NDI3OTAKKzoxMDI2MzAwMDY0Nzc3NzdENjk3NDdGQzc5RkZFNzkwRDNEN0Y3QTAwNEYKKzoxMDI2NDAwMEI4NDlCRjgwNDcyRUY0QkJDRTVDOEZEOTAxNUM1RjhDNEMKKzoxMDI2NTAwMDcyODNFMjFGMzhERjRDOUEyRjgwRUE0OUE2NzUzRDI1MjgKKzoxMDI2NjAwMDg1MDhGRUNCRUJBN0IxM0Y3MDI0Q0ZGRkZEODJCRTMxQzIKKzoxMDI2NzAwMEUzRTMzRUE0RjEzNEFGRDA3M0UwQzkyOTI0Qjg5NThDQ0MKKzoxMDI2ODAwMEY0NUY0QkZENEVCODUwQkVBNjUxQkJDMDQzNEY2NTYzQ0YKKzoxMDI2OTAwMDgxMzI5N0U2OEQ3RjZFNEVGOUU2ODYyNTM4Q0Y1MkE0QkIKKzoxMDI2QTAwMDExOTJEMzhCMEIwMjM3RDJCODRCQ0Q5MTQxODVGODZDODgKKzoxMDI2QjAwMDY1Q0EzQjM2QTYwQjA1RTk5M0U0MDNGMTJCRURCNzA2OUIKKzoxMDI2QzAwMEU5OTFFODdBQkZFMDU3RTQwMDc3QjdGRDhBRjhGNUY4QkEKKzoxMDI2RDAwMEJCNkU1OEU4MTMyMjRFQzJGRjE1Q0YwRDNFOEY2NjM1RjQKKzoxMDI2RTAwMDhEN0YzQkFENjNBOUQ0QjU5MEU4RjJGM0Y0RDc2QzdGNEUKKzoxMDI2RjAwMDY2QkUxQzI4RTg0RTkzNUI0QjlGRkI5QUY5RTc1OTMzNjMKKzoxMDI3MDAwMDA0MjVDRDNGODYxOEJFNUJGQTVDOTI4NUZDQzNBNTlGNkQKKzoxMDI3MTAwMDQyMjgwNURGMkZEQkY3NzgwM0Y5M0JBNUU4RkY5MzlGRkQKKzoxMDI3MjAwMEJDNzhENzUzQ0M2RkZCNDg1RjIyRTg5NkZFRjdCM0NGNTcKKzoxMDI3MzAwMDNGNDg3QzdBNjUxMkM3QTEyNkJENzY3NDA4RDk0MTUzRkIKKzoxMDI3NDAwMDhFNDYxQTEwNkQ3MEUyRDkzNzJFMTNGNEFGRkIyNTdGMzkKKzoxMDI3NTAwMDMzOUQ4RjFFOUYyNkFEQjg4N0YwQkQwQ0YxNkZDN0Y5NzIKKzoxMDI3NjAwMDk2OTk4MkEyNkU3NUI4NTU5NjdCQzI0RkFFRDFGNkYxOUUKKzoxMDI3NzAwMDE5NzQ2RTlDQ0Y3MjQ1M0Q1MDRBRkJDOTk0ODBFNTYzNDUKKzoxMDI3ODAwMDQ4RjgxMzMyRkUyM0ZFQkZGRDY4NjgzNUFEMTNBNDZGMTEKKzoxMDI3OTAwMDZDMjQ2RjRFQTE1RjRDRkJCQUZEQjE3OEJGQTNFQjQwMzgKKzoxMDI3QTAwMDI5RjlEREU0MTdFMzNFMTdCNzFCREI5N0M2RUE4NzA0NzgKKzoxMDI3QjAwMDdFRjI5NjAyMkQxRTk2MEREOUI0QUY1RkEzM0ZGNEMxRjEKKzoxMDI3QzAwMDMwOUE3NzdFMUFEOTg3MTMyOUFFOTA0MDVFRUFGRTcxNUYKKzoxMDI3RDAwMDI4QjlGMjkxMDJCNjk3REIyNUUyODczMjRCRTJGRTBCNzUKKzoxMDI3RTAwMEYzODU1RkFDREJGRkNCMUU5MkQ4OEY1QkY2NTA5RjUxMTkKKzoxMDI3RjAwMEVDMjc2QkZDMEE2MTJGRjNFRjkzQTQ1Nzg4Q0UwMjJGQ0UKKzoxMDI4MDAwMDAzRDFDMTJEREE5RTYwNzMxRkE2Qjk1QjlCNENFQ0M3NDgKKzoxMDI4MTAwMEQ4QTUzQkJDQTRGN0M3M0REMkZGQjY3RjYzQkE0OTc1QzQKKzoxMDI4MjAwMDQzMjZENTI3Q0M3RENDQzNGNjU1OTA4NDM1RkE1NTZDMUMKKzoxMDI4MzAwMDY3M0U5OURFOTU0QkYzM0Y5OTJFODM4QUYzMzUyNDc1RDUKKzoxMDI4NDAwMEU1OTI5QzU1OUY3NTc4NDlFRkM2QUZGQkVEMDJFMTBGMEQKKzoxMDI4NTAwMDBDMDk4RkRGMTRGMTA4M0MxMzlGRTdCQzU0QkE4OUYwRDAKKzoxMDI4NjAwMDdDMTJGOTlDRjBCN0NDMzVCQzNGMzhDOTZFOTg5QzE5RTYKKzoxMDI4NzAwMEMxQjI0MUIzRDM3MzFFMUI5NTM2MUJFMUUyQTNGNUM2NkIKKzoxMDI4ODAwMEQ4RDUxREFGNUU5MzQyRjZGMjZFOEIzRkM1OERGRDRFREYKKzoxMDI4OTAwMDFFQ0UzNUY4NDFGMTY1NTExODkxNTNEODRCRkIxQjMzQ0YKKzoxMDI4QTAwMDg3MDQxMkMwNUQyRjdEOUIyQzBDMkY5RDZFN0Y1REE3MzIKKzoxMDI4QjAwMEMwMDc1NkMyNDdCOUQ4ODc2QTc3REI3RDQ0N0ZBMUE5OTQKKzoxMDI4QzAwMEU0NEYyRUJCMTlEQzJERDg3QkQ5Q0IwRjM3MzhBOERFQ0YKKzoxMDI4RDAwMDBDNENDRDI3RTk3RkQ0RkYxMzczODhFQ0YxNUZBNjhDRjUKKzoxMDI4RTAwMEJEQjcxQ0VCQkI4RTU5ODQ5RkEyMkE4N0YyNjNFQzU4QkMKKzoxMDI4RjAwMDdCQTYxOTY0MDNCRDc2NEE4QjQ5MUUxM0REMjNCRDI2RDIKKzoxMDI5MDAwMEM5QzkyMEM3RDA2MzRBNUU4NkExRUVGMjBFMzBCQzlGRDMKKzoxMDI5MTAwMDU2OTI2QjY4NEY1NzQ2MTlEQThCQTEzNjEyQzBGNTE0RTAKKzoxMDI5MjAwMDY1NEFFRTEwQUVCOENGOEMwMjQzQkIxREU5M0E0Q0VCQzIKKzoxMDI5MzAwMEZDNTJEODUxMjVGODRGRThEQjIwREI0MzY1MTE4MDA3QjYKKzoxMDI5NDAwMDkwMEUyNjFFMzdEQTU5MjU5MTM2RjYzNzkzMEU1QjBDMUEKKzoxMDI5NTAwMDcxMDBGQjU5RTI1MEM5ODUxQTdGMEQ4NDgxQzQ1RjQ4MUMKKzoxMDI5NjAwMEZGNUU5MjYzMjcwRjhCQjg5M0FDQzE3MzU5QjZEMENGN0IKKzoxMDI5NzAwMENCNUU5NkQ4MEU1Qzc2Q0NDQzdBRTIyNDc4QkJGMTQzNjEKKzoxMDI5ODAwMEYyNTFFN0JCNzhCOEY3RjUxQkUxREM3RkFFMTFBRTU5MjkKKzoxMDI5OTAwMDAxMjM1QzJGQUIzMUMyMzUzQjY4ODRFQkUwNUEyMzVDRUEKKzoxMDI5QTAwMDczNTQyMzFDODczNDREMzRGNDFGRDY1NjY5QTg4RkQ4MkUKKzoxMDI5QjAwMDc0ODVBMUZGQzhEMDZDNDM3REY0NjNENzFBRkE4RjY5ODAKKzoxMDI5QzAwMDVGNjA2ODFGQjdGNzM2NDM3QjNDNUQ4RDBGMkYzM0I0RDQKKzoxMDI5RDAwMERCNTM4RjMwNUQxRDQwQkEzMkExM0UyODdDRTlERkUyMzcKKzoxMDI5RTAwMEU4QzJDMjcwMkYxQUU4RjQ4NjYyRjBBRkUyM0ZDMjdGRkQKKzoxMDI5RjAwMDk5OTY5Nzk4MDA2QTAzRjFFMzg1QzJGRjE1ODRGRjk0QzYKKzoxMDJBMDAwMDI4RkU3NUI5REExMzlGRUFGODFENDJGQTlBRTU2NTc5NEUKKzoxMDJBMTAwMDg0RjA3RUIyMjQ4NUU5RTVFMDRCMjcwRjJCNDBGODRGODgKKzoxMDJBMjAwMDg1MDJEQ0VGQUMyOTIyOEUyMkM5QzEyNkEyOTM0RTcwMEEKKzoxMDJBMzAwMEI1OTFGREI5QzYxMjY0RkY0NTQ1QjM3MDI3MjlFNTM4NDUKKzoxMDJBNDAwMDdGRjNGQjI1RTg2RkM2QUNCMzVBNDkwMjRCQ0M3RUM3NzcKKzoxMDJBNTAwMDg3REIwREY1QzI5N0Y2MUFGQTE3NzU4NjBERjVGMTg3MjMKKzoxMDJBNjAwMDQxMjI3RDU1RjBBNkY3NzkyQThCM0U1NDM4RkM1NUZDNUYKKzoxMDJBNzAwMDQ5RjA3OTJBNEJCRjBDREU0NUZBMzdERUNGQkQ1QUFEOUYKKzoxMDJBODAwMDk3RDJDOEFGRkY3QkZCRjM2OEQ2QTA3RjM2NDgyNUJGM0YKKzoxMDJBOTAwMDM3NzI0N0FBRDczNDAwRTE5MUZDNEUwM0Y5REY4MDc2MDQKKzoxMDJBQTAwMEI0MTU5NTExQjgwRkIyM0U5OEVGMTBFRkZGMkQ2OUYyRjMKKzoxMDJBQjAwMDJBRUE2RjQyRkY5Q0YwOEU3MEM5MjM3QkFGMTY5MkJENEQKKzoxMDJBQzAwMDA0MTdCMjVCQzgwRjgzMkI4NDNEQkZEQUE0QjIzRDlBRDIKKzoxMDJBRDAwMDg0RjYyOEQ5MjMwRDE1N0VCNjk3QTc0MzcwMjAzREJGRjUKKzoxMDJBRTAwMDA2OTQ1NUM0Nzc5MjE5RUQ1NzdDRkUzRjIzMDI4RDg1REQKKzoxMDJBRjAwMDQ1NjJCMTQ0M0Y3NzdEMjFCM0ZGM0Q4NUZDNjkwNkE2NjEKKzoxMDJCMDAwMDAyQTRGNzRFRDBFRkI0M0U3ODY5MUVDNUUzNEY5MDJFNzUKKzoxMDJCMTAwMEMzRjVCN0I1QkMzMDRGMjUzQkMzMDNFRTA4QUUzQjIwMzEKKzoxMDJCMjAwMDQwMDY5QjBCMDNGN0QwQjhFRjlCRENBQjBCRjFERDgzQ0EKKzoxMDJCMzAwMDEzRkYzMjg4RUM5MTc1ODVDMkVFQjM0QjA4MjlBNDgxNEUKKzoxMDJCNDAwMEZFRjMxNUEwRTc4REQ5Q0E3RDg1NDVEMTM4NEI0RkY0RUEKKzoxMDJCNTAwMEEzQzczM0Y1RjhFNkFFQkEzMDk3MTZCNzU3MjJCQThCNEIKKzoxMDJCNjAwMDhGM0I0NkNDRUVBQUYxQTRGRjk2OTlEOEVGRkMwQjJEMzMKKzoxMDJCNzAwMEFFOTRFNzQ5NjUzOUVGODA0RTdCM0EyRjk5RkRGRkVCMjQKKzoxMDJCODAwMDM1QkM5OTFEOURBQjdFOEVFRkREMTAxNEY2RDYwMjkzRjkKKzoxMDJCOTAwMDk3RkRGNURCMzM4RjczMUNDNTJFOTlDMDQ3RkU1MDVBNDUKKzoxMDJCQTAwMEZFNzYxMTdGRDFFMzI1OTc0OURGQzZDRTNBREI3RTZGRjMKKzoxMDJCQjAwMENGM0M2Njg4NTdDMTEzN0QxMkM2RDdBM0UzQUJBQ0ZGRTkKKzoxMDJCQzAwMDYyRjZCOTY1OTM0N0U4MzVGMkYzREY2RkNFQUU4NEQ0OTEKKzoxMDJCRDAwMDQ0RjM3Q0NFRjFBQkVCODNBRjFBRjhFMkM2REFCNzBDNjQKKzoxMDJCRTAwMDdDNzA5M0ZBOUVBMTNERTJFOUIyNTJCQzMyQjIyNzZCRUYKKzoxMDJCRjAwMDNBQzVENzNGREI2RDJGMjYzQzIwRkUwRjE2QzZDNEVCMkYKKzoxMDJDMDAwMDIyQ0RBM0FCNjBFQ0I5RUNGNzJGQkM4RUEzNzU5RDhDRTUKKzoxMDJDMTAwMDU3N0RCRkVGRDRCREM5RjU0ODVEODRDQkY4RkRFQUYxMUYKKzoxMDJDMjAwMDExQkQ0NDcxRDg0NEY2Q0M1RDEyQ0EwQkYyNzc0OTVFRUYKKzoxMDJDMzAwMDc4NjJFNDA1NDAxRUQ5RkY3NzQ5QTNCQzQ0RUZCNkZEOTYKKzoxMDJDNDAwMEMxNDdBOUJEQUJERUVFREVFRUUzRjgwOEM3NEQ2QTkxRTEKKzoxMDJDNTAwMDJFQzg2RTAwQTc3ODdGODFDREMxNzZFODFEM0VFMTJGOUEKKzoxMDJDNjAwMDFFQURGOEVBMDZCMjVGNzMyMEQ1OEIzMjEwN0ZDMjdGQUIKKzoxMDJDNzAwMEEyQjhDOTdDNTMxQUVCRkZENTU5MDdCOEZFNjEzMzg4NTcKKzoxMDJDODAwMEJDNTE0REY4MjFGMjU3OTdBNkE2MEFCQjU4QzFGRTU4NzEKKzoxMDJDOTAwMDNGOTE2MUU2RkFBMTExODFBRjk4MUZGM0MzOUNERjU4MDEKKzoxMDJDQTAwMERBNUZDNEYzQzAxMzE5NDQ3Q0Y4MzNEOUZGQjVFMDU3OTkKKzoxMDJDQjAwMDc3ODBEQTZCMzJEMERGNDZGQUZEQzRBQzhFMzUxMTZCMEIKKzoxMDJDQzAwMEVEMUE3MEFEMDVGMUZFNDlCMkZBMzk1OTM0NjM3Q0ZENTUKKzoxMDJDRDAwMEFFMjUzRkYzMTM5QkUwREY0OUJCNEVDRjUzMTEzRTFGQTAKKzoxMDJDRTAwMDlBMjRGNkNGRDU2NzRDMUNBRjAxNjdDNDU2OEQ3RUQ4QTkKKzoxMDJDRjAwMDAzODMwMzU2MUY4RURGNjY0NTdCRDIyOTlFQ0YxRTEzQUEKKzoxMDJEMDAwMDhEQ0I5RUIwNjI0OTcxRDAyNDUxM0E3REMyRUU3NUY5RTcKKzoxMDJEMTAwMDQ0OUU1MzJGNDcxMENDQjA5Q0U0RDNFNTdDRUI3MDhBRTMKKzoxMDJEMjAwMEJGOUREQzZDMDc5MjVCMzhCRjQyRkU5NkZBQUM4OEUzMkQKKzoxMDJEMzAwMEY3Q0JGMDJGMDI4MTE3RjcxQTVDQUY2Nzg4RkMwNUYxMUIKKzoxMDJENDAwMDlGNDc0MkJGMTZGNzIxRkI3MjBDRjE2NzcyNjA1M0IxQzcKKzoxMDJENTAwMEZERkQzREY2NkQ4NEJGRUVGNTFFMTZGMUIwQ0Y5QTQ3MkUKKzoxMDJENjAwMDczQkM1QkE3MTNEOUE3QzVCRDdGMEMyMERBMkZEQjQ2NDgKKzoxMDJENzAwMEVEOEI1RjdFRkYxRDhBQ0ZGREE2MzAzMEQ0ODdFRDBCMzMKKzoxMDJEODAwMENDNzIzMUM5QzlDNUE5MUQxQ0E3MkJGNkM5M0MyRkFFRjEKKzoxMDJEOTAwMDk3Rjc4QjcyQUIxMTdENzE1OEVDODg3MDVDRUY2Q0YxMUEKKzoxMDJEQTAwMEZCOUVGNkZGRDlDRDlEMUJGMzM5NUUyRDhGMjVCOUEyNzEKKzoxMDJEQjAwMENGOEJFQjI4QTY3NUU4RkJENEQ3MTExREE3NzdGRUQxRTIKKzoxMDJEQzAwMEUzRDA3QUZERTM4N0Q2MENEN0YyMDgzN0ZBMTNFOEU1QUIKKzoxMDJERDAwMEFCNzQzQUI2MjY4RUZCRDc2OEY4OENDNzRGQzE4ODYwQjMKKzoxMDJERTAwMDg4RTM3OTZFNzAzNzYwRkQ1QTBENEU5RkNEQzNGRDcwM0MKKzoxMDJERjAwMDNDNDQxOTRGRjg1RDNDREJFOTI1MzhFQkUzRjdDQjgwMjkKKzoxMDJFMDAwMEMwNTNCRENDNzNDNTQ4RkYxQ0EyQkZEQjgyMjI0RkEwQkMKKzoxMDJFMTAwMEI3MjNGRDg5Mzg2NzczMEFEM0VCRTJFN0RFN0FFN0U3ODkKKzoxMDJFMjAwMDM4Q0JBRDhGOEUyOTI0RkRBMUJGMUYwRjY3ODRFRjcwQjMKKzoxMDJFMzAwMDVBQ0YwMjQ5RTRDRjEwQkUzN0QxRjhGMUY5ODFGMzg1QkEKKzoxMDJFNDAwMEVCODlFQzRFRDYwQjI3QjZGRDJDNDRFQjNCOTEwNTZFN0YKKzoxMDJFNTAwMDEzRjJFM0UyN0RCRjdERDMzNDk2RThDNDE5OTZCMDg0QzMKKzoxMDJFNjAwMDVEQzZGODU3QkM5RTcyNDNFMDNBOTIyMzc2OTQyMzY0ODEKKzoxMDJFNzAwMERGRDhGNUY3MDY1QTBDRUY1NTY3MkE3N0Y5RDgxRjU1QjIKKzoxMDJFODAwMEVFMjY3OTY0NTc4NUJGMzYyNDUwQzFGNUU1NTZFMUFGOEIKKzoxMDJFOTAwMEVERUEzNENCQzRERkJCMkMxMDIyM0RCRUZDRDUwQzk1MzMKKzoxMDJFQTAwMEVDQzdFNTY4NzdCMEE3OTMxN0U0RjU0MjMyRkE0MUU5MzkKKzoxMDJFQjAwMDA5RUMwNjkzNTdFNjc4NUM1QTYwMERDMTRCRkFEMUQ0MDEKKzoxMDJFQzAwMDA3OUZDODg5RkFBM0JBQkUyQ0QyRjRCRDkyN0Y2MzAzRDAKKzoxMDJFRDAwMDhERUZEM0UyODE2ODY3NzJCQ0IzMTQwMjlBMURBMUM1NUQKKzoxMDJFRTAwMEUxOUEwRjcwMUM0Mjk3REIzNjk4RUJBMEY4Q0Y5QUJFQTAKKzoxMDJFRjAwMDBCMUNFNDFGQ0EzODJDQzdENzNDQjNEM0EwMTczQjcyQjYKKzoxMDJGMDAwMDU1MUQ0QURBMTFEMUJBQjUwNzNGNUUzRjFGQzA2QkVDQzEKKzoxMDJGMTAwMDQ3REIwNTEyRDZEMDdBRDU4MTQ4MjNGRURBM0FFQjc3MjMKKzoxMDJGMjAwMDVEMkY2MEQ5MzJFNjkxQzg0QTZBRkJFNkI0NDQ3NkE0QzQKKzoxMDJGMzAwMDQzQjMwM0I4RTg0N0VCMTRFRkQ5MDZBRUJFQzM4NEZBMzcKKzoxMDJGNDAwMDMzRDk2QjgxRjc2M0Y0QTAwMzM5RkZGRDNDNkQ1RUIyQUEKKzoxMDJGNTAwMDA3MzJCQkRCRkY0MDc4RUI2OTFGMTdBQjI0RjhCQzZGNkYKKzoxMDJGNjAwMEVEQTVEREU2QUQ0OTI0MEYxMkMyOEJDOEM0MzNGRDE4QjAKKzoxMDJGNzAwMEQxNjMzMkM0RUM5QkVEOUU5OEJBMTQwNzJGODlDQUVFMzgKKzoxMDJGODAwMDc2RTU3NDgyRkNFNTc3REREN0FBQkFGMEFCMUYxQUVDQzAKKzoxMDJGOTAwMDgxMTBBRkRGNkFGMTgzMTdFOUM5RTZDMTc2QzMzOTBDNDYKKzoxMDJGQTAwMDU1Q0I3RjIyMDExN0M3RUNFRjFDRjY0NTc2Qjk1NURCRjAKKzoxMDJGQjAwMDk3RjUyMkVGOEJDNkY1RjdCQkE0RDdBNzVFRTJFQjBCMjQKKzoxMDJGQzAwMDVGRTJGODg1RUE0QjFCN0U0QUY1QTUwRDNGRjUxMjVGREYKKzoxMDJGRDAwMDVGRjgxMkM3MkZDQ0JFQjREN0E3Q0NCRUI0RjFBQjVFOUUKKzoxMDJGRTAwMEUyRUIwQjVGRTJGODg1QUIyRjZERjgyOTU3NUZEQUYwNjMKKzoxMDJGRjAwMDUzMkZGMUY1ODUyRjZERkNBQTZDMDczQUNCODFDRkNEMEQKKzoxMDMwMDAwMEE2Mzc5QTQzNzRDRTQ2QUEwQTczREUzODU3MDU4RTQ3MTAKKzoxMDMwMTAwMEE3MzYwM0U3MkJCNjdCODUxRkE1QzdFOTQ3RDIxMDMyMzkKKzoxMDMwMjAwMEZBMkQ1Njc3MTZEOUQxREIxQkVGQUJGQzMxOEU3MzJBMDQKKzoxMDMwMzAwMDEzMTc0RkY5RkNFQzIzMEE4REIzNkQxQTcwRkVDMkQ5MzkKKzoxMDMwNDAwMEY4RDE1MThBN0ZFNTQwRDgxQkNFQTFCODlBMDRFMTE4ODcKKzoxMDMwNTAwMEJCRjRGQTYwMEE4NDYzRkM4OTZBQTU4RkExNUVENDM5NDcKKzoxMDMwNjAwMEMwRDBGRjk2NEQ0MzBDRUQzN0I3OEQzNkI0RkZBOEE5RkQKKzoxMDMwNzAwMEQwNTBCRjQ5MkQzM0Y0Qjc0MzRFNEIxRUU1NUQxQjJEOTkKKzoxMDMwODAwMDVFQ0E4MzU5Njg2RkE1NjdDMjBENzZEOEY4M0QwNUZGMDMKKzoxMDMwOTAwMDkxMUY5MzgzMTY3REY3QjhCODhGNzRENTY2MThENzE5MkEKKzoxMDMwQTAwMEQ3N0VCNjdDNDA3QzNFNjE0RUIxOTY0RkU4RkU3RTQxQjUKKzoxMDMwQjAwMEJDMEY2RTRGQzJCOEE3OUU0RkQwRjEzOURDOTJDNEY4NTYKKzoxMDMwQzAwMDVBQTc4QTdDRDM5QTY5QzI4RjlDMUE3MjlCMjg2RkE5Q0YKKzoxMDMwRDAwMEUzNkZCNDQ2NzJGQUJFQjdENTE5RkRDOUY0NDY3NzI1MzkKKzoxMDMwRTAwMEZCQTM0REMwRjlEQ0RDMkE3MzQ4QzlBMTM4QzFDMDRBMzIKKzoxMDMwRjAwMDA3RTIzOUI0NDNEMDQ3MDgwNDdEODQxQTgxRjM4NUExREYKKzoxMDMxMDAwMEFBREM5NUQ0N0UyQTA0N0MwQTQ2QTc4RkQxNTUwQjY3OEEKKzoxMDMxMTAwMDUyRENCNTNFQkI1RjE2QzUxOTcyQUEwNDNEMkNERDZCQUYKKzoxMDMxMjAwMEE0MDM0QUU3RDI1NkQzMEY0QkJDRkVGNEZBOEMwMkNBNzIKKzoxMDMxMzAwMEU3OUQ4MTk3MjcwNDlDRjVGM0U3RTk3MTcwQ0ZEQjYxODgKKzoxMDMxNDAwMEM0NEIzQ0RFQkUyRDVFRDYxNEM3N0Y1N0YyRURGMDYyNTUKKzoxMDMxNTAwMDlCMjE3N0E0NTE5QzU0MDU5OUUyMzIyRjY2MEYzNzMzOTcKKzoxMDMxNjAwMDFDOUFCQzhDOUYxOUQ4OERGODMwQTcwOTM4REYxMzRGRjMKKzoxMDMxNzAwMDhGQUQ3NTEwQUU4QUUxREYxQzZGNTgyMUZDNEM5M0YyQzUKKzoxMDMxODAwMDJCOTlDRkYwRERGRUMwQTc0NDE5NUZEQjlBNDRGRTE2RjEKKzoxMDMxOTAwMENCNjQxQTFGRjZDQTAzMjhBRTEwNTI2N0YzQkFCNzM3Q0EKKzoxMDMxQTAwMERCOTJFOTNDREY1N0Y1NjZBMEYzRjJEQjczRTQwMTk0QjAKKzoxMDMxQjAwMDE3REJGRThDNjk2RUVDRjkyMEE0MEFCQjM5OTNGNzYxMkEKKzoxMDMxQzAwMDM3OTc3MDY5MTFBNUEyOTU2MDExRUQ2MTg5RUE4MzU2NjAKKzoxMDMxRDAwMDk4RTNGMEE5NEFENDlFM0UyMzM5RUVCOTYyQTJGRTVCODEKKzoxMDMxRTAwMDhBNzMxOTNFNjk0QTg2MDE1RkQ2MTIyM0JGMjMxODBGREUKKzoxMDMxRjAwMEU1QTM3QzFDNENCRkNCNDQ1NzgyNEU0MkFGNEJBMTk1RkMKKzoxMDMyMDAwMDFDNUZFOTMyRDUxMERENjhFNzJERDI1N0NEMDZDQTQ3REQKKzoxMDMyMTAwMEQ1NjdGRjc0MkVDQkFGN0ExQkMzMUQ1NjA4QkFEMEYzMDcKKzoxMDMyMjAwMDgyRDYyNjQxODdGMUY0RTNGMjFBRTlDNzJBMEQzNDg5RTAKKzoxMDMyMzAwMEZDOTZFMDFGN0QxRERCMTQ2RERFMkMwOTU0OTY3QkI2RDkKKzoxMDMyNDAwMDAxQzQ2N0Q2QjhGMUVDMjQzQzQ5REU3ODA0NUYzQTYxRUEKKzoxMDMyNTAwMDM2RDA3QkNFMTIzQkU3QjE0MTNBQ0FGOEI3NEUwMEU4MTAKKzoxMDMyNjAwMDEzNzM0RTIxN0VCRDY3NURFNzc3QTRGMzBGQkYyMzlERTcKKzoxMDMyNzAwMEVCRjI2N0FENTc5MzNGNDVFMjVDRTQyOUE0NkI4QTFGRUMKKzoxMDMyODAwMDREQURFQTA0RkVGRTBBREMyNkEyNDdBNDgzNTk1OUM1QzcKKzoxMDMyOTAwMDdDRjQ4MTdGNzY5MTFDQjIxM0JDQUFEM0E4RERENUE5OUEKKzoxMDMyQTAwMDRDMjVGQTlEMkVCREEyQjg3MDlDQjU4NzA1OURBMzdFQzYKKzoxMDMyQjAwMDc5ODlFQUFEQ0QxNkEwNzMyNjI4Njc0QzNGQTI3OTRCRDkKKzoxMDMyQzAwMEVERUU5NTI0NzlBNDgxRTM2OUREODUzRTk0M0IxNDQ3QjYKKzoxMDMyRDAwMDdDQzUyODJGOEEzQThENzBDQjhEOTdFQjNEQzBCMTI3RTYKKzoxMDMyRTAwMDNEMTEwRjQ3RDcwNDBEOEVDNTA4QzcyMURGMUU4RTM2NEUKKzoxMDMyRjAwMEFGRDBDM0U5MjU0MkNFQkU5OEZENTM3RUQ1N0Q1ODlDMDQKKzoxMDMzMDAwMEFCNDk1NzgwRTFGQTg1MkFGNEYyNzRFOTc4OThFNENCNjYKKzoxMDMzMTAwMDNBMDVFNTBCQjZDRkQwREFERDI1NDI5RUU4NzBDRUQ1NzIKKzoxMDMzMjAwMEUwQUNDQjkzNzVGMzIxODNGOERFNERGMkM0NDk3MEZEMTgKKzoxMDMzMzAwMDg4RjU3NjVCOTE4MDMzNDA4NEYzOUZBOThBRTA5MzM1Q0EKKzoxMDMzNDAwMDU2RjA1MjlDQjZBREQ0RTlBNTc4NjFBRUEyQzFCNzQ5OUEKKzoxMDMzNTAwMDgzOTcwOTRDMDRERjc4QkE5NDIxQTY4RUVCNEI4REFCOTIKKzoxMDMzNjAwMDdGNUJGODk2NEVEMEY0NjQzRjI4M0UxRkY4QUU0QjQ5ODEKKzoxMDMzNzAwMDE1RkMzNjU0QzBDN0VBOENGMEI5RTZBNjFDOEI3NzI1M0QKKzoxMDMzODAwMEYyNzU0NzBFQzIxQkRCOUI1RTE3RjBGRUE1RDY3RkQ1RkMKKzoxMDMzOTAwMDE4RTA3QTUzREZENTk5MENBRjlDODU5OTQ0Q0Y0REQ2NzAKKzoxMDMzQTAwMDM2OTVGMjU4NEQzQUZENjlFN0MyNUM5QTlDOTg4NkZDQzYKKzoxMDMzQjAwMEJEMDBERjVGOERGMjg5RjI5MEE5MjUwMTA3OERENzk0QkEKKzoxMDMzQzAwMDZGMDE4OUY3QkZEOTlCNjhGRjBFOUZDRDIwMDcyRkFCRjgKKzoxMDMzRDAwMDMxQzIzNTI1MEU4RTQ5REY5MUZGN0YzQ0UxQkJGMUZGMDUKKzoxMDMzRTAwMDc2RkExNUZCQUQxOTA2RDBDOTc5Qzg5MDgzRTA2NDJCMzUKKzoxMDMzRjAwMDk5OTg0Qzc0RDREMkJBOURFQjMyODQ5QTcyNzFGRjBGQjMKKzoxMDM0MDAwMDNCODVGREQ1RDIzQUJCRDdGMzUxMjE0RDJFNkNBOTczMjQKKzoxMDM0MTAwMDcwNzk1RjlEOUJDQkI2QkE0QzJFRUZBOTkzRDk3RTY5OEMKKzoxMDM0MjAwMEFEQ0JFM0IyQTVDRUNCNjU1MzVEMDk5N0FCRUExNEVFMDUKKzoxMDM0MzAwMDI3QURDREE4NjAzOTVDMDUxQ0NGNUU5OUYyMzlFN0RGNzYKKzoxMDM0NDAwMEUzRTdDQjUxOEQ3QTZDNzA2REIyMDFFRTdENjYxOEY1QjUKKzoxMDM0NTAwMDU1QkE2MkQ0NTc3NDhFMjlCNkRERTUxRDY1Njg0RkM5MkIKKzoxMDM0NjAwMDJCMzBENDkzRTQ4OTg2RkU1MzI2MDQ3RTM5ODFFNDgwOTAKKzoxMDM0NzAwMEE3MzI0RTBGMjIzRjhFODk5RUIzNkI2OTE1REY0QkU5NTEKKzoxMDM0ODAwMEYwRDNGNTkzNTNFM0YzMzU1NkVGMDBDQTNCMzk1QjA1QjAKKzoxMDM0OTAwMDlGMzY2Qjc2NUUxM0MxMTFDQjY0MDVGOERDOENFREIwMDIKKzoxMDM0QTAwMEU0MEQwMUYxRkY2QUE2RjM4NzcxRUVGRTQ4OEIxREQ5OEEKKzoxMDM0QjAwMEQ3Mjg2NDI3QjRDOEMyOEVCNzgyMzhGNzZCQ0JGNDg3OUQKKzoxMDM0QzAwMDZCRjA3OTEyRUEyRkNBRUJEQUU2QTZCMDVDNzhEOEUzQTMKKzoxMDM0RDAwMEY0RDIzOURCOTZENjY1NkU1RThGNTc5Q0E3NzFFM0JGMzkKKzoxMDM0RTAwMDQ0Nzk4MEY4RjMzNThFQTFDNjczMzlENkIzOUM2RkZDNEUKKzoxMDM0RjAwMDc1NEZGNERBOTQ5MTUwOEU5QzIxNjdCQkYzMkZFRjZCREMKKzoxMDM1MDAwMDc0MjlGMjJGRjc3ODA0M0NFRDNEQzhBM0Q2Mzg3QkQ5NTcKKzoxMDM1MTAwMEE5RTU1RjYwQTAyRjYxRkZBODNEMjVGMjBCQUQ3MTcxOTkKKzoxMDM1MjAwMDdCRjRDMzEyRTY2RkRFOUEyMDcxRkYzRjRGOTA4NUJGOTgKKzoxMDM1MzAwMDY2MDkwM0M5NkI5NzE3REY4RkY1M0IxNEYxN0RFOEI5NzYKKzoxMDM1NDAwMENFOEYzRjNFNEY4QzdDMEEyNDA3RkUzQzAxOUYyQjRGQzEKKzoxMDM1NTAwMDA4M0IyNTQ5MTZERkExRDg0MDUxNTgzRTgxQzg4N0QwODUKKzoxMDM1NjAwMDU5MUZEMjM3QTk1QUJFQTc1QkNFOTA4ODg4QTEzQkU3RTYKKzoxMDM1NzAwMDE5RkVBRUM4OEJEMDY3MTY0NDNGOTZFOEZCMTdDNEJGNTAKKzoxMDM1ODAwMEZEQjY2NTIzRjlDM0MzN0E2OUE3RkM1MDAyQjlFMDJBRTYKKzoxMDM1OTAwMEQxQkYxRjgzMkU0RjMxODBFRUJBMjNGQzVDMjU4OUUxMTkKKzoxMDM1QTAwMDE3MjY3ODM1OUFENkNEQzhDNUU3QTk1RThCMTczMTAwQTYKKzoxMDM1QjAwMDE1MjVGMjVFM0E1RkIxNEE0OTY1RkRCRUFBNDQ2RTI3MDEKKzoxMDM1QzAwMEZFRjk0MjcxN0EwOTFGQURGOTU1QUNBQzkzODY3REM4RkUKKzoxMDM1RDAwMEEyQjdCMUM0QzY3NkJBOEU4NzI0NkQ1RTQ0NEY2Nzk1OTQKKzoxMDM1RTAwMDBFNjdFQ0VGQ0M5QjExQURFMzdGQ0Q2MzM2NzI1RUFGMUYKKzoxMDM1RjAwMEU1QUE0NzM4REZENzMyRUIzRjM4REZCNzNBNkI3QTFFQTAKKzoxMDM2MDAwMEM5QkRBNDkyRTlDN0Y4MjA5Nzg2MUY2NjBERDIyMzc5MTkKKzoxMDM2MTAwMEM2RkNERUU5RDNBMkNFNzBBMEY4ODQ5NjA3MDQ4RjMxRjEKKzoxMDM2MjAwMENGNjc5MUZEODZGOTJGMzQ5RTYwQTBEMDQzNjA1MUY4OUEKKzoxMDM2MzAwMDdCODMzM0U5NUJGMEI1REVBRjY3M0U1MEY1RUY0RTU3NjUKKzoxMDM2NDAwMEQyRjlFMDI2OEY5MEEzNERFMDdEMzM0MEY1NTcyNEFGQUIKKzoxMDM2NTAwMDJBRDNGMzgyMzdFOUJDRTlFQTgxMTZDNkNCRUFDQ0Q5OTIKKzoxMDM2NjAwMDREQzI4RTE3N0U1MzkzNjcyNUU3NkRFM0Y1MzY5REQ3RTAKKzoxMDM2NzAwMDhDOTVEQjc0NUUzMzU2QkUzN0M5QjM3QkQ1Q0I1OTAxMEQKKzoxMDM2ODAwMDczOUNERTM3QkU5RjFEMzRFQTFGRkRCREE0Q0MyQjVGQUIKKzoxMDM2OTAwMEFCOEEzOTJGRDU2Q0YxM0I0ODVFQUNGMkRDNjc4QUQ1M0EKKzoxMDM2QTAwMDczMEYyODgxMDUyNTMxRTc5M0FDOTlCM0Y4M0Q3QkI2QkMKKzoxMDM2QjAwMDJGRTFCQUFFNTA5NDg1NDRERkI4RkY1RUVEODFGNTlBRjQKKzoxMDM2QzAwMDVDRENBOEU5OTdCM0VENzM5M0Q2RkYwMUFERkY2NkQyM0EKKzoxMDM2RDAwMEVCMjNBMkY4MTkzRUY0RjI2NDk2Q0ZFQjQ0MUM4Mzc5RjUKKzoxMDM2RTAwMDIwNjY1RUE1MjRCMDgyRDYxNUM1QUIzOTBBMTdBNEQzQ0YKKzoxMDM2RjAwMEUxRjk1N0IwREREMUIwNkU3NjMyRTE2OUU3RkFERUQ3OTUKKzoxMDM3MDAwMEEzRTdENUY1N0U3QTFFMzUzRUJGNkVGMzk4MERGMERGNDgKKzoxMDM3MTAwMEEzQzk4NTE3NUMwQjJCMUY0MEQwRUM2QzEzRjRENEIwRkQKKzoxMDM3MjAwMDRFRTg5MUUxNEY4ODdEOUM0OTg3QzZGNUVFNkNFQkRENTQKKzoxMDM3MzAwMDBFOEFFRjRGOTFDNTZFM0FFMTdBNDY1QzdENDA1Q0ZGQTAKKzoxMDM3NDAwMERDQjhGNjUxNzFFRDA1NzFGNTg5NzFGRDJCRTNFQTU3OEYKKzoxMDM3NTAwMEM0RjU5RjFENTdCRjM2QUVGRjgyQjhGNkRCRTJEQTk3OUQKKzoxMDM3NjAwMEM1RDVGRkNEODg0RkRGQjU2OTg5RTAxODhGM0ZCRERGMzQKKzoxMDM3NzAwMEI5RTJFRjVENUZDNTdFQTJBM0UxMzA4M0U5NDVBN0I3NUIKKzoxMDM3ODAwMDczQzU0M0Q0REVGNTMzOUREOTRBNDZCMTdDREY4MUY2NUIKKzoxMDM3OTAwMDE1RDk0MzNCREIyQURERTI3QzQ3NjBFNTZFOEQzRTQ4NzAKKzoxMDM3QTAwMDNGNTgzNjg4NzlEMENFNEFFNkY4OUNEMzYzOTAyMzY3OTkKKzoxMDM3QjAwMEMzQjcwOTMyOENFREIxNzY2OEVFODVDN0Y3RDlFOTMzMjYKKzoxMDM3QzAwMEE0RDkxN0JEQUY1QkU3RTMyOTEzRkMyNzQ5MEU0MTQ4OTUKKzoxMDM3RDAwMEY4OTlCQTVEQkI0RDE1RkNCMzRENUQ1MEI5OUVFNDZERDMKKzoxMDM3RTAwMDkzNTlDNDlGQjVGQjUwRTg2RTFEMTEyNzBGNjg0QTM4RTYKKzoxMDM3RjAwMEMyRjE4NDI2Q0Q0RjY4RDNFNEM5NUE0RDlFRENBREY5QTEKKzoxMDM4MDAwMDA5NDk0MzgzOUIyOEVFOUI3Qzk4OEZFNzQwQjNBRkUwNDgKKzoxMDM4MTAwMEFGMEIxMDNGRjc5NzE2NkZBM0VGQzdFRTFFNTNGMkY4RUEKKzoxMDM4MjAwMEMzNTg3N0ZENUQ4MjcwMjFEQUU5NjM1QjE0QjI1OURBMUYKKzoxMDM4MzAwMDk0OEMyNDNBNEY5NDYyNzJCNDkzOUZCOEFBQjBDRDNGNEYKKzoxMDM4NDAwMDE0RkJBREREN0ZBQ0ZENzlDNEIzOUM2OUYzQTJDRTA3NTgKKzoxMDM4NTAwMEQ5RDI2NTIyN0E4MzdDMkY3Rjk3ODZFQjU0QzlDNkIyNzIKKzoxMDM4NjAwMDk2NzdENTI1M0E3N0JBRjYwQUI3ODk4Q0IwRjQxOUIyQUIKKzoxMDM4NzAwMDk5Q0UxMUY3OTkxMEU4NUI4QUYwMThEQzA0NjYwNUVCMjUKKzoxMDM4ODAwMDE5NkE5OENGRTI1QzUzMkEwQkZGRUExOTY0MjhERTZGQUQKKzoxMDM4OTAwMDU3MTZDMUVCQUI2NkRCN0VBQUY2OEMwRjkwQjQzOEREMTEKKzoxMDM4QTAwMDc5OTVGQTM4Njk4MjM0RTg4N0UzOEVCMjQ1QUJBQjhGRkQKKzoxMDM4QjAwMDZDQTZGM0QwNEU0OUQ0QTczQ0YzRjhGQzk1RjlEMUZBQTUKKzoxMDM4QzAwMDk4NjcxRTFGQjgxMkRCNUIwQjA3OTk0ODlFQTY3QjUyQjgKKzoxMDM4RDAwMDEzREUxMzczNzVBOTkwOUZEQjlCMTcwRTRFRTQ4RkU5REYKKzoxMDM4RTAwMEE1M0MxMzM4MzAyMUU3NkIyNUQxRDQwNDJDODc2QUE1NzkKKzoxMDM4RjAwMEFDM0RDRjE0RjUyQjM1QjhDOUI1NUFCQjQ3OTQxNzdBRjAKKzoxMDM5MDAwMDlFRjhGMUU3OTRCQTc1M0I3QjgwOUY4RDZDQzg3N0Y2ODMKKzoxMDM5MTAwMDMzRDg4QjU3OTdGNjYyMkZBMjc5Q0NGMURBQUQ1Njc5NkUKKzoxMDM5MjAwMDAwOUQyM0RDREE2QzAzQkFGRjYxNkIzNjg4RUY5MDU3OTkKKzoxMDM5MzAwMEQ5RjhEQzI4NThEQzAzQUU3MTQ1RDcxRDVBRDU2RjFFNjcKKzoxMDM5NDAwMEQxNERDODA0ODYzODZFQTYwNjVGRkI0NDkzNzY4RUYyOEUKKzoxMDM5NTAwMDlCMzA3REM3Qjc1NUNCRjM2Qzg1ODhEQjlEMUY4QkU3MEMKKzoxMDM5NjAwMDVGQ0QyN0JDRUE3OERFNTdGQUFGQ0Q0NDlGMUREOTBCNTcKKzoxMDM5NzAwMDJCMzdFMjdCRUIxQUNEMUMzNzU5RDc5OENCNzQ0RUUzMkIKKzoxMDM5ODAwMDkwN0Q3NDZBQzUyMTMzRDlBREY5RDA2RTI2M0I3RjE0ODIKKzoxMDM5OTAwMDdENzkzRDg0QUU0MDBBNzBEOUFFQzlFN0ZGRDRGQ0Y4MEEKKzoxMDM5QTAwMDYxQTBGMEYzNDFEMEM1QzBGOUI0MzhGMDEzODJDQjEwNTgKKzoxMDM5QjAwMDEyNkQxMkYxOEZEQkU0QzA3OTk2RUM0QkFGNDhBNEI3REYKKzoxMDM5QzAwMEVCNEFGNUVGN0FBMUM2NTJBQ0Y5MTczMkMzQjc4RUY4QkQKKzoxMDM5RDAwMDI4MUVCRTc0NDI5RkUzOEU4QUJGOUVEQTlEN0I1RjBERDgKKzoxMDM5RTAwMDVGODZENURENkYxOEU5OTNGMDM2M0I0NkNGNkNENEUwQTcKKzoxMDM5RjAwMEU3RjZGQTE1QzJFMUI1QzU4MTE2N0E3RkM5QTZCRjFFRTIKKzoxMDNBMDAwMDIwNzM1NDU2NTUzM0JERkYxNEUxMUQ5RjJGMEMwN0E3OUIKKzoxMDNBMTAwMEQzMzA2M0JDRTE0QUVBM0ZCQTc2REI3RThBQTdFNTA1OEMKKzoxMDNBMjAwMEVGQThFQzhGRUIxQkFFNTQ1NzdBODg4Njk0QzBGRDM0MTgKKzoxMDNBMzAwMENFRDBDRTQ4ODUwQkVCQ0U0REFGODZCMzc4M0Q2Mzc5QzMKKzoxMDNBNDAwMEJDNUM3RDNENDgwRkQ1NEM0NzZFMTFDN0Q3RjA0QkY4OTUKKzoxMDNBNTAwMEE3NzNDQjBCMzcwQkY4NjA3QjE2RUZDRkUyQ0U4QTVERjYKKzoxMDNBNjAwMEZGQjY2OUZERjhCQjg1NzhCQTY4RDVFMEY3NTgxNDhFQzMKKzoxMDNBNzAwMDYwMzVGQTM1OEYyNTgyQTM0RUE3M0EzQzZFNzhBMjZCNEIKKzoxMDNBODAwMDE1RTUzQUU3ODczQTVGMjQzOUU4REZFNDlFQzZGMkIwRUQKKzoxMDNBOTAwMDM4RjAyNEJERUY2QkYzMzc3MDFFNzA1NzI3NUQ0N0Q0QTUKKzoxMDNBQTAwMDBEMUZBN0QyNDlEN0JCNjAzRkU1NjlDMkZCRDYxNUVGMTIKKzoxMDNBQjAwMDU3NzJCQzc4MkY4OEI4NTg5QzNFRDQ0QkFCMTI5RjY3ODYKKzoxMDNBQzAwMDEwRjdFNThDREI2QkI0OTM5MTVFOTU4RDlFNTg3QTM1M0IKKzoxMDNBRDAwMDczQkUzM0E0RTk5MzUwMTNEMjJGQ0RCNzQyRDA2RjQ4QjEKKzoxMDNBRTAwMDVERTY0RTQ0Njc4RjY4N0E2NTg3NDZCN0ZBRjNBMTNENzUKKzoxMDNBRjAwMDlDQkIzQzU0REFFRDI3NjY0QTQ2NzgxRUVBOERFRkQzMkMKKzoxMDNCMDAwMEMwQ0JGQzgwN0M3MDg0RkE2NTEwMUY2MDdERjAwQTM3QTIKKzoxMDNCMTAwMEQzQTdDRTA3NEJGNkZFRjUwMERENjdFM0Y0QzkwNUIxODgKKzoxMDNCMjAwMEY3RDc0NTM0M0MyMjdEQkU0M0VGMkZEOUQ0NzU4MDdDMzYKKzoxMDNCMzAwMEM1QzEyQjA0N0Q3RTRDNzc4NzE1NDVFOTBDRkRDN0Y3ODEKKzoxMDNCNDAwMEE4OUY0RTNGRjFGQjc4NTcxQjRGMkVGNjdGNEM3ODVDQjkKKzoxMDNCNTAwMEI4MjlDOEUzMjFGRjFDMkJFNTcxM0FDMzQ5Q0M3MjRBNEUKKzoxMDNCNjAwMDI1RUQ2NzZCMUJCODY5M0ZGNjVGMTQ3NDkwNUMzODU1QTAKKzoxMDNCNzAwMDZCNjJCOERFOTgxRjVFNjVDNkYyRkFBMTYwQTVFQjg2OUYKKzoxMDNCODAwMEFBMzM5MTZDNzIyOThGNkJDQ0ZGMEQ2QjMzRTIwRkU5NzYKKzoxMDNCOTAwMEU3NkYzNDRGOTEyNzYwMTNDMUVCQTA4REU1NjkwRjc0NzcKKzoxMDNCQTAwMDExRDU3QkFBMEVGRjE1NzE3MkQ3M0NCMTE3N0EzRUQ3OUIKKzoxMDNCQjAwMDcxRDcxNjJCOEU4OTQ1REY2MjFERTdEODRGOEYzNzlENTEKKzoxMDNCQzAwMDE5M0YxREM1RkU0MzRCRDM2Q0ZEOUNGMDBDQkE4RjY3QUIKKzoxMDNCRDAwMDNCQzU0RjExQUVBQjlBN0FCNzU3MkY1OEZDQjRGOUE0MzYKKzoxMDNCRTAwMDg4OUZBRTAwOEUwM0FENEMxOTZCNEE0NDM3OTc0MEZDNUEKKzoxMDNCRjAwMDc0Q0FDNDQ0RjFEM0M4N0IwNjNCNzM1NTkzOTAwQjNBMDcKKzoxMDNDMDAwMEZDODY1NzhENEMxNjc5Mjk0OEE1N0M4OTFFMUZEM0Y3NTEKKzoxMDNDMTAwMDc1Qjc2NjRGMzY2OTcwNkIyMUI4MzEzQzA1RENEQTA4NDAKKzoxMDNDMjAwMDZFMEM0RjFENkUzMzg0M0Y0MjVGODg1M0JDRDY2MzE2QzMKKzoxMDNDMzAwMDc5QjE5MTBCMzY1MUJFRTA1NEE2Qzg5M0Q3NjdEQjQ0RTcKKzoxMDNDNDAwMDdCOEVDODJGOUM0MTFGOTkzMUY2MzRGMkMxOUE2NjcxNjAKKzoxMDNDNTAwMDlGMDhCRUNGNzlCNTE3QjMwRjM4ODY1MDlFMzNEM0NDQUIKKzoxMDNDNjAwMDcxREFFRDlFRkI2QUI2NzMzRDk5RjlDRjBBNkE1QjFFNjUKKzoxMDNDNzAwMENFM0JGQ0MzQjlFQTAyN0E1RTYyRTc3M0YyN0EzRUE3RjIKKzoxMDNDODAwMEE1QUZDOEU3QjhGMkI0N0M0RURDN0M3NkI4QTlCMjhEOUIKKzoxMDNDOTAwMEU2Q0IxMzdFNEI4Rjc0RUNEM0YyMTE1QTFFMjgyM0RGMzAKKzoxMDNDQTAwMDk4QUY3MEM0RTUyQkUyRjM5NTZCOUExN0VDREYyRUUyMjgKKzoxMDNDQjAwMDJCMkM5Rjg3RkY3ODI0RkI2M0YxRjNCODY3MUFGREI3QkQKKzoxMDNDQzAwMDM1MjM3NTNGRUExMTQ3QTJFRjE4NTJBQjhDRjREOEEyMDYKKzoxMDNDRDAwMEUxQkJBMUFGQzg0NzlDNkQ3QzI4NEYzNkY4NTUyRDc5QzQKKzoxMDNDRTAwMEU3MTY0N0QwRkI5MTFGRUE0RUQwM0ZERTBGM0QxRkZGODYKKzoxMDNDRjAwMEQ2Q0RFMzFCRUYwNzRDRTBERjZFOTlDOEYxMTQ0MURGMkUKKzoxMDNEMDAwMDZCOUFDNUZFQkJFMzY5OUE1RkE1OUYzRkQyQzdCMTZBQjQKKzoxMDNEMTAwMDdFMUNENzczQTI3MjRBQ0Y4NzBENzVEQjk4NUU4NzZBQzcKKzoxMDNEMjAwMEY3NDUzNUZDN0I0QTY4NjUwRUU1RDc2Njc1NTEzRTcyRUUKKzoxMDNEMzAwMEU4MEU4OUYzRUU0MzlEN0VDRTQzNzQ2Qzk4Q0VGOUYxODQKKzoxMDNENDAwMEJFQzk4MUE3MjdDNkM0OUY3NkI4N0U5QUM5RjkwMjJEM0QKKzoxMDNENTAwMERFQ0ZGN0U2QTBERTUzRDcxNTc2MkE2NEVGOEUwNEJFRDkKKzoxMDNENjAwMDY3MjczOTJFMUYxMDdGM0Y0RTdDN0Q0RTk5RDBDMzk5MTcKKzoxMDNENzAwMEQ3NDFDMjdCNEYzRTlGMjhEQUNGRjRERkFGNjAzOEExMzYKKzoxMDNEODAwMEJGOUIyQ0U0QURBMkQ3RkZCRkU0QTk3NkI2MURFMkVGM0UKKzoxMDNEOTAwMDdENEVGOTQwOTNCM0ZGMDk5N0EyOUMzRDUxMTIzODlFODYKKzoxMDNEQTAwMDUwQ0U1QUJBNThDRTg2MjcyODlGOTE5RTVDNEUxNzdEREEKKzoxMDNEQjAwMDEwMUU2RTRDN0MzRjhGNUM3NkE5RTJFMTY5ODE4NzdDQTYKKzoxMDNEQzAwMDFEMEZGNzVDOTJGOTQyQzQ0Mzc2NTkyMjNDQTA1RjQ1MkYKKzoxMDNERDAwMEYwNkFGMzI5ODNBODVEMjk1MTA2NTNEOThEOEYxRjI2RDgKKzoxMDNERTAwMEU2OEI1OTY1QzJFRUJCNThGODU4QTdFMUUzNUVDMjA3RkYKKzoxMDNERjAwMEM3Njk2NDJENEU5M0M3Q0Y5QjM1N0NBQzM5MDMxRkVGNDkKKzoxMDNFMDAwMDBCN0M5NEU4Rjg3OEVFQkNGMDkxNTE5NTYxNjg3Nzk3NTcKKzoxMDNFMTAwMDFCRjE5MUVBQ0IzNUQ0OURGOTQ2N0MyNDBGMkQzMDhDRDMKKzoxMDNFMjAwMEI3QkM0QzE2RjcyNDBEOUM2OEU4NzcyNjNFOENGRUMwODQKKzoxMDNFMzAwMDlERjQ1RTJGRjZFOEMwNDA2NzA1N0Q0QjM0NjA2RTdCRDUKKzoxMDNFNDAwMDA3QzlFNjRDN0Y1QjA1OTVGQTNFMzdDN0Y5NzM3QUI5MjcKKzoxMDNFNTAwMDVDQzM1RkU2RDRDNEY4NURBMEYxNUJDNjQ0RTUyNjAzMEQKKzoxMDNFNjAwMDNEN0MyRjMxN0ZENjY4RkQ5Nzk3MjhCNzk0QzVGMkYzMzQKKzoxMDNFNzAwMDk1ODlGQjJGRDFGQURGMzY0MTU5MUNEQjFGN0ZENjRCQ0EKKzoxMDNFODAwMDMxRjY3ODRGRkIwRTI0MkJDQkNCNzhGRDIyNEZCNkEzMTcKKzoxMDNFOTAwMDNFOTVGMzY2M0I5MkU0NzZDQTU3QUJGNTRFQzNCRDc1Q0IKKzoxMDNFQTAwMDgzRTkzN0FDNjdGRUU4OUIwRTk1Q0VEOUQxM0Q0MTY4REEKKzoxMDNFQjAwMDU5NkRCQkEzNUZFRTFBNkNEQTk2MzE3QzI1QzFCMUE5QUUKKzoxMDNFQzAwMDZDODhCOEJGNzU5MUZGNkRDQUVGMjhFQTA5RUQxQ0QyNjYKKzoxMDNFRDAwMDdDQkVFRkM4MTRFRTYzQTI3QkIyQzA5RDcxNEVGOTIzODUKKzoxMDNFRTAwMDk0NjdFMjVFQjdDMTIwQkUyMzg2MjBFQjQxQzkwRkU5OEIKKzoxMDNFRjAwMEY0RERCMjA1RkMyMjVGNEVGREM1Rjc4NUJDRjkxNDA4NjAKKzoxMDNGMDAwMDczREQwNTExQUVBNzY5N0VERTAzNjUzOTNDNkUzQUM4RTQKKzoxMDNGMTAwMDI2MDEyNEFGODlFNEE4Q0VBNzBFNEY5MEU5REY1M0VCMkEKKzoxMDNGMjAwMDM2QUQyNDVGQ0UwMjUwNDY3RUEwNzMyMDdGQ0YwQjk1MjYKKzoxMDNGMzAwMEEwNTIzRUNCMDQwRUI2MzM0REVCMEY3Q0NENzkzQUZENEIKKzoxMDNGNDAwMEZCQzM5N0ZCODhFRjBGQ0Y3MTdGRTdEQUFGOTFFRUU1MDgKKzoxMDNGNTAwMEYzNDRFRkU1NkJENEVDMDFGRDVFM0VCNTMyQzhERjk3NkMKKzoxMDNGNjAwMEFCMkJFREVFMDZDRjk5REY5NzNGM0EzMUIwOEJGMEZERUEKKzoxMDNGNzAwMEI3QTQ0MTIxOTE2NDBFNEU5OEVEQkFBMEUzODcyRkYyQzkKKzoxMDNGODAwMEY4QUY1Q0U0RjFERkVDNkRGQ0JCRTlENzUyQ0FFQkY5QUEKKzoxMDNGOTAwMDhGMTIzRjM3Qjg4QUQ5RUVENENCNzhCQzVEQTEyODExRjcKKzoxMDNGQTAwMEVBMjczOTVFMUJGMDYxOUZBODNERTczQzZBNjI3RkE4NjMKKzoxMDNGQjAwMEMxMjRDRTlGQTlFRjk5RDhFRTgyN0M0MTA3NEUxOUYyMTkKKzoxMDNGQzAwMDcyQzY0NUM3NzE3QTgzODM0NURDNDlDNDVGRUFGRjc0RDIKKzoxMDNGRDAwMEQ3MDhCMkJGN0Y5OTMyMkI5Mjg2RTMxRDdDNTVEODdGREMKKzoxMDNGRTAwMDk2QTk5MUNENzRCRjczRkYzNDlCNzczQkYyREQzRERBMjgKKzoxMDNGRjAwMDdBRURBNTEzRUVCRDEzN0ZCRDc5OEE5MDE3MkU4QkY3NEUKKzoxMDQwMDAwMEYyMDIzRUI3MzQzMzQyRjZBM0FCRDgyMjUzQUVDMDE5MDYKKzoxMDQwMTAwMDk3RDc2Q0I1QjQyNTUzQkNCMjc1Qzc3RDE1QTNCMEZCNUIKKzoxMDQwMjAwMDYzNzUyRkI5MUIxMzdDRUZFOUQ0RjI5QTIzQTVDNDcyRjAKKzoxMDQwMzAwMEYwOUY5MzkyNDREQ0NCNjdCQzRGRDg1QUFFOUQyQjQ5N0UKKzoxMDQwNDAwMDg1NTRCMjIzMkRGRjUyRDIxMjlEMDdEMDRCN0RGRTIyMDQKKzoxMDQwNTAwMDRGQTQ4QUJFQkY4RUQwMjU2RTg4RTdBMjkyRUFBNDY0RTAKKzoxMDQwNjAwMDBGOUY4QkU4MjRGODU2N0FDMzBFQjI3RjFGNUYxMEJDRjcKKzoxMDQwNzAwMDM1RjZGQkQzRDYxMjcwOTExREVGOUIyMkNFQzM2RTUwNDYKKzoxMDQwODAwMDI0MTdEREFGRjE2MEM0QzJGNzhFM0ZCOEU4RTlFNjE0NEIKKzoxMDQwOTAwMEFDRUYzRDZBNzYxMzNDNUFGREVGMzk5M0IxRkUzODhFOTIKKzoxMDQwQTAwMDRCRjJFRUUwMEU3MUNFNTI5RDBGQTE2MTA4QkY1NkYyQTkKKzoxMDQwQjAwMDJBQjFCRTVCMTFFN0IyRDkyMTJCRDZBRUVBNDNGOEZGOTUKKzoxMDQwQzAwMDc1NzI1RjAxNkYwODU2RDNCRDlERUI1MjI2RjM3RDk2NDYKKzoxMDQwRDAwMEQ5NzM0NDNDNzhCQTc0QjQ4M0RFN0ZCMEM0Q0VGODFCODUKKzoxMDQwRTAwMEEyOUREMzMxQTlENTdDOUY2NURGRjlDNjczM0EwRjJFMDcKKzoxMDQwRjAwMEVGNTQwOUJGRUU1MkJCNUJFNUYzOTc0RUQ3NTg3Q0RGMTgKKzoxMDQxMDAwMEY1QTgxOTI0NTY3MTVEM0NGOTc0QzkyOUQ2RTUxNTdFQzgKKzoxMDQxMTAwMEVFRTM3MjU4QTVGQjhFRkJFMjdCRjU2RUJFMzVEMTcwRTcKKzoxMDQxMjAwMDFFNjhGNzI2RTE5RkE2OEQ3NzdBOTFEMjcxQkQ3MUU3NUYKKzoxMDQxMzAwMDg1RjQ3NUI1RTFCQUU4REU2M0Q3NTA4RTQ3NjRDQzMxQkIKKzoxMDQxNDAwMEFFMkYyRENFNkY3MEM2RDVBNzk2NzdERkUzMzM5Q0YwRTgKKzoxMDQxNTAwMEZEODVGRkE3ODVBRjcxQUI1NzRFRTQ3RkI2RDY0MTY3QUIKKzoxMDQxNjAwMDU1Q0NCOTA0NjcwRjcxQzA5QUM5ODJBRTZENTkyRjM4MEEKKzoxMDQxNzAwMEM4NEVGOUMyN0ZDNDQzMzg3OEU1OUYwNzNFQkM5N0NBNTIKKzoxMDQxODAwMDdGRkQ2RUQ3NTI4NENGRUZCRjdFNzNDNzkzQjRCRkRBODMKKzoxMDQxOTAwMEJCMEYxMUJERUFGRTE4OUZDMUM0RjVCQzU4NkQ2M0I4RDIKKzoxMDQxQTAwMEY5Njc2OEU3Mzk3RDFEMkY1ODdERENDRUY5QTVCNUZCOTEKKzoxMDQxQjAwMDkzQjg3RDY0Mzk4NDkyQjA3REE0NDVDOUJBOTlFOEFFQkMKKzoxMDQxQzAwMDUzRjJENkNCMzQ4ODM4OEZBOEUzN0ZFRDBEN0UxMzhDNjUKKzoxMDQxRDAwMDIxM0NGQTI1QkEwRjYzOUE3NkJFNzZDMzIyOTAwOUZGNzYKKzoxMDQxRTAwMEI2NDVFRDdDNUVEREI3NUM5QzU3RjcyOUQ1NDk3Q0RFOTIKKzoxMDQxRjAwMDc0OEU5OUNGODdENDU3NUY3M0Y5MzBBQ0VGQkE1Q0RDMUIKKzoxMDQyMDAwMDRGMzU2M0I5MzI4RkU3NTcwNEJEQTQ3NTE2OUI5NzEzREEKKzoxMDQyMTAwMDVENjY4OUZCOUFGNEYzQTY0NUQwQzVERjdGOENGNEI2QzIKKzoxMDQyMjAwMDc3RDg0OERFQ0M0NzAwRDNGQTVBMzU3QzY5NzE4MzIyQUYKKzoxMDQyMzAwMDVGQTc0QUY2QTRDQjZCQzQ2MzQ2MUNERUUyRjFCQTQyMjgKKzoxMDQyNDAwMEM3RTM0ODE4NDk3ODk0QTEyRDk5RjRFMTQzMDBFRDc0MkYKKzoxMDQyNTAwMEFGQzA4NkU1NEZDRkEzRjM2QzVGQTg2OTBDQUY5RUY4QTMKKzoxMDQyNjAwMEY5MURCNDU3OTUxMTc0MEY4QjgzQ0I0RUI0NTdBOURDNEQKKzoxMDQyNzAwMDg1RjYyQTk1QUU2MEM1NzVDQjcxREQ3QkRFMzhGOEQyNDgKKzoxMDQyODAwMDBGNzFCQTU5NEFGNTk1NzQ0NEFCNDhDQjdCODFCQTc0MjcKKzoxMDQyOTAwMDUwMjVBRUZGMDZFMjVFNTFERjQyODlDNDc3N0Q5MkExRDAKKzoxMDQyQTAwMEJFRDY2Mzg5RkUzRDAwRkNENTk1QTVGRjdEODBEMzVCMUUKKzoxMDQyQjAwMDk0QTEwODk2NEM4Qjk2OEYxMUY1NTlFNDg3QzRCNEVGRkUKKzoxMDQyQzAwMDlFNjlFQzVGQjYzRjY2RkM4MUI4REVDNTM2NkUwRkVEQzkKKzoxMDQyRDAwMDVCQkE0NUI1QzRCNDNGODdGNTcyODA1NzM1RkJGMUZBMzgKKzoxMDQyRTAwMDlENjZGRkY2MDRGMkVEREQ3MjYxNDc1QUZFMDUyQUM5QUMKKzoxMDQyRjAwMEI1MkZEMTRFMjNGRjVFMzIyQjJDREYyMUQ3MjIyN0JBRDgKKzoxMDQzMDAwMDU3MEYwMEU1NjFBQzVGMkUxQkU1RUJFNTFBNUY1OEZDMkIKKzoxMDQzMTAwMDE1QTBFNUM3RTAxQjNERkU4MDNGN0JGRTM4OEJFRjYzQjkKKzoxMDQzMjAwMDVBMzVDNEMyRjcwRkExM0VGMEY2OTZBRkIzNzgyQzlGNzIKKzoxMDQzMzAwMEM2REVEQkY1QUMyRUJGODdDMTMwOUFGRjRCMjhGRjQzQUEKKzoxMDQzNDAwMDA1RjM0MUNDQkQwREM0Rjc2RENGNUZCNjE0RTdGMTFEODkKKzoxMDQzNTAwMDRERTYzOEFBRTQ1QTlGQzJGNzMxRDUzNUIxM0M3RjQwQ0IKKzoxMDQzNjAwMDA5RkNCNjNDRTY3QzQ5NjNGQUMyNDI5MjJGRkEzOTk5QkQKKzoxMDQzNzAwMEU4QkQ0N0Q3OThCRkNEQkRGNzFERDUwNzgwRjRDMjk3REMKKzoxMDQzODAwMDQ4NUFGNjVFRThCMEIxNkVFRjExNUFDN0VBQkE3NjJFMTcKKzoxMDQzOTAwMDlENkU4NTg1OERERDEyRTRCOENGMTU0QUUwNEZCNDNFQTEKKzoxMDQzQTAwMDdCMjZCNkM3RjA4OUQ1OERFRjE5RkMwRUUzN0Q5Q0IyNTQKKzoxMDQzQjAwMDNCRTIyNEI4NkYyOEY5QzA0OUYzQjcxRTE2N0NCREUxNzMKKzoxMDQzQzAwMEYwRUMyNEUyQkI1NkVGQTEyNEUyOUIyRkU4RTJDN0VGMUEKKzoxMDQzRDAwMEMwMjczRUU1NTU5NjYxQkJERjQ4QkQ5RUU4Njc0RjQzNjkKKzoxMDQzRTAwMDFBREIxNTA3OTdERjdGMkRGMUNGOERCRkY4MDFDM0JCMTcKKzoxMDQzRjAwMDlCNkZFMEUxNDE5NUNFMThCRTgxODc5OUFFQkJGOTQ2MkYKKzoxMDQ0MDAwMEFCRjdDQzM3N0Y2N0JFREFERENEMzdBMkVFQ0IwNzQzMDMKKzoxMDQ0MTAwMEZERTA0QzYzRkY2RUJFQTBGMTkxMkYxRUFGQjA3M0JCRTkKKzoxMDQ0MjAwMDdERDJDMzVCRDQxOEJFM0E0OUY1NThCRUY5MDlGMjREQTYKKzoxMDQ0MzAwMDAyQjkzRjdEOTI0NkRGMTc5ODZGNTIyRTMyREYwQzlERjYKKzoxMDQ0NDAwMEE0QzlDRkVGQ0UzNzYzMjc1RDE0QkVEOTYzM0ExRkJFMzAKKzoxMDQ0NTAwMEI5RUM0Q0JFQTk5QUQ0RjdEQkYzNERBQjNCQ0NFN0U5MDIKKzoxMDQ0NjAwMDVBRTc5ODEzRkU3RDkwMEYzNDc5Mzk3NTdFQTBCMjhEOEUKKzoxMDQ0NzAwMEVDMUE0NURDREYzNzREOUE5OUU1RjMxMDlGNDk3NDg3QjQKKzoxMDQ0ODAwMDM0RUE0RkExQ0YwRjVFREZGRDdEMDZFQjY3RkRGRUY1NDEKKzoxMDQ0OTAwMEY1ODQ1MEIyOTMxNjBCQkFFOUFDMTM3MURGNjk1MkY5ODcKKzoxMDQ0QTAwMEI0QzVBNDc3RTkzQjAyNEEzNTUzRjY5NEVDMDJENEZCMzkKKzoxMDQ0QjAwMDMyRDk4NUQwNUVFMUMxNzkzNjU0OTlBMDREQTYyRDA3MzkKKzoxMDQ0QzAwMEFCODdGMUY4NjFCNkNGODY2ODcxN0ZBNzk0MkZCRTY3N0UKKzoxMDQ0RDAwMDlBMjlGRUVFODVGRTVENENCNTYyQkM1RkI2RkY1OUVDRDUKKzoxMDQ0RTAwMDI2NUM3NzBBRjkzMUVFMTJGMTc3NTAxNjREOEFEN0JGNjQKKzoxMDQ0RjAwMDY4ODdFMEZBM0EwN0RBOTg0RTM2Mjg1N0Y3MUEyNzNBQ0IKKzoxMDQ1MDAwMEUzNUNCNTJGOTgzMDJGRjlENjI0OTM3NkNGQkVGMjMzRTMKKzoxMDQ1MTAwMEEyQjNERDZGNkM0OUE2NzMxMjdCMjRFMEYzMzlGMzgzRjkKKzoxMDQ1MjAwMDRGQ0QyM0JFNzNBOTQyREVCNEFFRjgzM0E1MjM2MUQ3QzUKKzoxMDQ1MzAwMEI0MUYxQUY1MzQ3QzZBRDREM0YwQTk1MTRGNkJGNTFFMjEKKzoxMDQ1NDAwMEU1OEQ3QUMyQThBN0I1N0FCNzlFRDZFQUREN0E1QUFCQ0UKKzoxMDQ1NTAwMDQ3RTVDREE3MDYzREJENjFEMkE3MDY3OUYzMUVENUNGQUQKKzoxMDQ1NjAwMDQxNEYxRjlFNzQ3MUY0RjRBODhCMkM2RjlFQkU3MEYyQTUKKzoxMDQ1NzAwMDY2REZBNEJFMTc0M0RFMUMzOTJGNzk5MzdEQTZCQzM5QjQKKzoxMDQ1ODAwMDc0M0VGMkM2QjVCOTQzQTVGNENDQzIxRUY4QTA1NkMzMUEKKzoxMDQ1OTAwMEZCNUI2NUNBREIzNDNFOTQ5QzVCQkMyNjlFQkUzQUFBOUMKKzoxMDQ1QTAwMDE3QUVBNkJGMkJGM0E1NTdGODdGM0RCREVGQUFGREQ1RUIKKzoxMDQ1QjAwMDkxQzYxODNGREM2NUU5MTRERjIzRDRFRUUxRTdCNzZDNjAKKzoxMDQ1QzAwMDdFOTVFM0IxNjc1RDJGNUQxMDVBNzRBNjVFNDVCQkM4NEEKKzoxMDQ1RDAwMEMxRjRFQjM1NzMyRUZDN0NEN0QxM0E0N0YwREI5NUNGOTUKKzoxMDQ1RTAwMERFQzFGQzk0NUM2RTlDNEZCNzdGM0JBQTZENjY5RUFGQUMKKzoxMDQ1RjAwMDQ0QzhFOTlFRUNBMTlFRTZGREEwNUMxNkY3RkZDNUNEODAKKzoxMDQ2MDAwMDFGNEZCRjQ4OUZFOTkzOEI5ODFFMkQ3NDJGRjgxNzlENUQKKzoxMDQ2MTAwMEMwN0ZBN0VBQkY0RTZFRkNCRjhBN0M0OUU5QzUxMTkzRjMKKzoxMDQ2MjAwMENGODM0RUE3NkJGODRDQjA2RkVGQzVEREY3MDVFM0NGMzYKKzoxMDQ2MzAwMEU5OTNDRkMzOEUzRTRDRkJFRTlCNzBERkRGNjczODVFQTUKKzoxMDQ2NDAwMEI0N0Q1RjMwRkZFMUU2RjNDMUY3QkJFNURERkJFNkVGRUMKKzoxMDQ2NTAwMDUxMzJCNDdENkZGOEU3MzVFRjUxNUM2M0MzQkZBRTdENzcKKzoxMDQ2NjAwMDhBRTIxQUY3N0Q5REI3OERFMjFBRkFCRDcyNjkxMEZERDQKKzoxMDQ2NzAwMDkxRjVFRjhGMTAyRTJFQkZGODlFMjQ2MzRFQ0M3NzQ1MTgKKzoxMDQ2ODAwMEMwRkU3REY0QkIxM0IyMzc3Q0RERURGRjJCRjdDQTkxODIKKzoxMDQ2OTAwMDdERDJEQkJENzJBRDM2NjM1QzRGMkZBRjJBMTdGNjRBNzEKKzoxMDQ2QTAwMEFCNjkxREM3MjMzNkEwNUY1NThGNzhFQjk4MjNFMjExQzUKKzoxMDQ2QjAwMEFENjhBN0IwREM5OTUzRDBBQjdEQjRBQjRFRTFCODUzMzUKKzoxMDQ2QzAwMDZCOUQ5RkNCN0JFQjY2NzBCOUVCQjUyNTY1MjQ3NzdENDEKKzoxMDQ2RDAwMEFGMkQ2MkJERTdGM0ZBQUY3QjE4ODFFNEFFRjhEMDQ5QTUKKzoxMDQ2RTAwMENGRUZGNUU4RkU5MEIwNUZEMkM4N0VDMUZBQzM5M0Q3OTIKKzoxMDQ2RjAwMDZGOEQ4RDBCOENGQUVGRTE1QkQ0ODFEMTc4NTU1QjY2QzEKKzoxMDQ3MDAwMDhDREQyM0M3RkE1MUEwMTJCOTQ0RkQyOEFDMUJFQzlBRUEKKzoxMDQ3MTAwMDExRUM0N0VEMjZCQjA2RUJFRDkzNDcxOEVDMUE3RDlFOTYKKzoxMDQ3MjAwMEI1NjZBODIxQkI2NkVEMEVGMzhDNDQ3NkNEQUNGMkM0MjEKKzoxMDQ3MzAwMDdFMTRENjM5MEZFMjcwMzlGOEZCN0Y0OUZCRkI1RjUxREQKKzoxMDQ3NDAwMDdFRTlEREFFQzk5RDcyNzFFRDlBREY0RkJFMzBGMTg3MTMKKzoxMDQ3NTAwMDZFM0VENkVDOTkwNzE0RTUwRDREQUU3QzQ3RjlCMUQxMEMKKzoxMDQ3NjAwMDRDRjFFMzZGMkIzRjQ2OTJGQ0M4MzdDODhGQ0ZDRTQ3NDIKKzoxMDQ3NzAwMDdFQ0MyQTc3MUJFMkEyMDc2NUI1Q0Y1OEIyRDM3Nzk4RDMKKzoxMDQ3ODAwMEExNUVENkY0MkZENjNCRDFBRjMxMjE5QzdFNTIyMUIxMTAKKzoxMDQ3OTAwMDlGQjNDMTBCRkNGN0ZEQTY0QkYzNUYyNjdBRDhCREM4Q0IKKzoxMDQ3QTAwMENDREZCQjNGQTg4ODczMjIwRkNEMTFFN0E5MUU1RTVFNDgKKzoxMDQ3QjAwMDMwOUIzRTIzNUE5NzcyQzNERDQ5MTRENzJFMTdGNzA0NTYKKzoxMDQ3QzAwMDRDOTdDQTM5Q0VGREUwMEM2MUU3NjQzQkRCMkZBN0ZEQjcKKzoxMDQ3RDAwMDFGQUNCMDAwRDFENUQ5RTJEQzE0NkVFNzc4QjVFNjQ3NUUKKzoxMDQ3RTAwMDgxQjQ5OUZEMEVENzBGMkQ2RTNBQUYxQTFGQkY3Njk2ODIKKzoxMDQ3RjAwMDdDQ0NERkNEODNGNDBBN0ZERjdEQjZGOEY1Qjc4RDVCMjcKKzoxMDQ4MDAwMDBGOThGMjlERTNENkNDOEYzNUNGMERCRjQxNzU5RTQ5RjEKKzoxMDQ4MTAwMDlGNDcyNkNCRTI1QzYyMEY3QTJDOUU5RjNCQUFBN0E3RkMKKzoxMDQ4MjAwMDQ1N0EzOTE3RTUyNEZCMjlFNjFFNTlGRDdCRDY1OUU1NjMKKzoxMDQ4MzAwMDYyMUUyN0Q5NEY4NTUxQkFFOEE4MkVFRUY1NUVEQTk0QUMKKzoxMDQ4NDAwMERBNjc4RUM0RTY4NTUyMkNFRDNDNUU0QUVEM0U3RUJFQjQKKzoxMDQ4NTAwMDlFQ0UyRjkwQ0NCMjc4NTlBRTNFNUU4OUYyMzlDMTc4QTcKKzoxMDQ4NjAwMEZCRUE4Mjg3MDkyRUJGQUVBQjNENEM3MUVBNDk5NjRFRkEKKzoxMDQ4NzAwMDg5RkU5RUVCREUzQTk1RUI3QkVBOUFCOERDNTVEN0M2MEIKKzoxMDQ4ODAwMEZERDZENzZERTJGMkJFQkExMDNGQkZCN0VFMzFBRURGNTQKKzoxMDQ4OTAwMDVERDdDRUY1Qzc3M0M1M0MxMzJEMjExRTY3NTIxNzhFMDkKKzoxMDQ4QTAwMDFGQzMwRjY1OUZFMDNDMzE3ODJFOERBODg2RjYwOTZGRjcKKzoxMDQ4QjAwMDM2MTlEQThCM0FEQjBDRjVCRUZFNEQ4NkZFN0Q2Njg0M0EKKzoxMDQ4QzAwMDBDRUQ2Rjk1MDUwMjUzOEFFODVDQzM2Mzg2N0VDRUZDQ0YKKzoxMDQ4RDAwMDc2NDNGRDVDRkQ4NTBCREQ2RjY1NEFBQUU1MUZDOEFGMTkKKzoxMDQ4RTAwMDgzMDI0ODRGNDg2N0U5QjVCMkNBNzlGMzFBQzE5N0ZEMDgKKzoxMDQ4RjAwMDZCQkQ2MUFBNkY3MUQ5OThCRjc1QkFFNDMzQ0IyNkIxOEQKKzoxMDQ5MDAwMDdFNTNDQzNEQjUxRDJFNzE3RUIyQTFBRjg4QTczNEZDN0QKKzoxMDQ5MTAwMDRDRDRCNzY0ODlGMzkxQzNBQjQ0N0VBNDYxQTBCODk3MkIKKzoxMDQ5MjAwMDQ0Q0ZDMzZGNzE2OUY3OTNGOEM0M0QxQTgzRjIyM0ZDMzcKKzoxMDQ5MzAwMERERUQyMEVERUZDMTM5Q0I0NUZFQ0MwRDZFQ0VDRjM3OEUKKzoxMDQ5NDAwMEQ0ODFGNjdENjI4NEYzMUQxOTYwRjY4QUZCRDUxNTk5MzIKKzoxMDQ5NTAwMEZGOUU5MjA1NDJGNTM4NUY0M0JFNUJCRDg1RTQ0QzMwNTcKKzoxMDQ5NjAwMEQ1NkJGNkYyOUY5NjBEOTkyOThGNDhFMjg5OTMzMEVEMjkKKzoxMDQ5NzAwMDlBREVEMUYyRjI0OTFGMDA5RjNCRTg4NkNGRTdFMjdCNDcKKzoxMDQ5ODAwMDg0REEyRUJFQjdBOTdGNkQxN0U3RTNCNkZDNDJEQzYzN0QKKzoxMDQ5OTAwMDEzMEZENzhFNUY3Q0M1RjcyQTZERkREOTU3NTlDNEQ0NDQKKzoxMDQ5QTAwMDVCQkJDRkVENzQyNUM1N0U4RkI2QTUyNjk1RUY1QkQ4OTIKKzoxMDQ5QjAwMDVBOUJDQkU3MjhCNkQ2ODhFRjhENjUxMEZCRERCMkM4RDEKKzoxMDQ5QzAwMEM2RTczMEI2RDY5QUNEMjQyNzRGMkRCMjMwNUNGNEY1MjkKKzoxMDQ5RDAwMEM3Q0ZBQjdGQkZCOTRFM0JENzczQUY3NkFFNjdBRDc2NkYKKzoxMDQ5RTAwMENFRUE2RUVENUM0RkIzNzZDRTZBOEQ3NjNFNzYxNTlEM0YKKzoxMDQ5RjAwMEVCQjExMzNDQzVCOTlFQURCNTBCMTRFRDNDQUI3RTJGQUUKKzoxMDRBMDAwMDAzQzM1NzQyRjhGMjc3MkE1NkQ4NkIxQTA3RjQ4NzBDN0IKKzoxMDRBMTAwMDE5NkVGMURGQzc2NjU0MjVDNzlERTczMTlFQjc0QUY1ODkKKzoxMDRBMjAwMDBEMzBENDlERjlDNkYzNTZDOTQzNDcxOUNGQTkwRTM0QUEKKzoxMDRBMzAwMDlFRUZCMTc5OENFNzdBMkNDRTRBRTNGOUQwNThGQTQ0NEMKKzoxMDRBNDAwMDYwOUE1NjZDQUMyN0ZDNzdGRjdENDc3QUQ4OEZGRjdFNDMKKzoxMDRBNTAwMDVDMzdGRDg2RjQ3MzQwMTI5RDQzNDk2MzdBQ0RBQzEyRjYKKzoxMDRBNjAwMEY0OTlBMTdEMEZFMzg2NEUyRTUzOTE1RUE4NzQ1MjlFNTkKKzoxMDRBNzAwMDVEQTI3MzkwMkFEMzUxRjRGQjM3QTU1NzdBM0FERkJGNzIKKzoxMDRBODAwMDA3MjBBRDRDRkNGNzAwRjQ3MzA4N0ZEMUVDQThBNTUzQzgKKzoxMDRBOTAwMDk0NEZBNzE0NDVFN0JCN0Y4QTcyM0NCNkFFOTczREM5RDkKKzoxMDRBQTAwMDg1RkZBREYyRkYwMUMxOENFMzJCMDA4MDAwMDAwMDAwMDgKKzoxMDRBQjAwMDFGOEIwODAwMDAwMDAwMDAwMDBCQjU1NUNGNEIxQjQxQjkKKzoxMDRBQzAwMDE0RkVCMkJCRDE0NEEzNTkzNEI2ODY1QTQ4MUE1MjBEQ0IKKzoxMDRBRDAwMEE0QjA2RDM3QTIyNUQyRDU4NjkyODNDODE2M0M3OEU4NUIKKzoxMDRBRTAwMDIxODc5Q0ZBRTM1OEU4NkQ2MzVCOTA0QTI0QTk0MjJGMjIKKzoxMDRBRjAwMDUyQzhDMTFFMEE4MjFFRkMwMzYyMUI3QThFNjgwQjUyQ0EKKzoxMDRCMDAwMDI5QzE4QUU3NDA1QjdBMTFEMjM3OTNBQzg5OUJDNDdBN0EKKzoxMDRCMTAwMEU5NDBGMkYyNjZFNkZERjhCRUY3RTZFNTBENjg3OTgxNTgKKzoxMDRCMjAwMDkwQTJERDEzN0Q0MDI0NUEyQTM4NDgwNjU0NjhCOTMwRDMKKzoxMDRCMzAwMDMwNTMyNEU5QTJGREI1QUE5NDM1OTExNEMwQTkwOTVDQUIKKzoxMDRCNDAwMDlBQkExRTJGNDkxMkQ5QzkxNjNCRkRENENFQ0VFRjhEOEQKKzoxMDRCNTAwMDMxQkIwMTI2MjUyRUFGMUYzOTAwMEZCMDE1QjNFNTE2NjYKKzoxMDRCNjAwMEZEQzBDMjBFOURBQkMwRUYzMTVCMEU3RTk2REM0OUE1NDkKKzoxMDRCNzAwMDMyQ0E0RDAxOTE3RDY5QkRERTRCQzAyQ0ZCNDlGMTdBRjMKKzoxMDRCODAwMEM3M0QwMzA5RjI5RjMxODBGQzMwQkJGM0QwQ0Q3NDU3OTEKKzoxMDRCOTAwMDM0M0JFNUEzM0M0MjdCNDU0OEU0MkY1Mjg0REMwNzg2NDYKKzoxMDRCQTAwMEFGQUM4MUY2RTdBRkRFMTcyNThBRkI2MTA5Qjg0Q0ZCOTUKKzoxMDRCQjAwMDBCRjY1MkVDMTFERERCMUFFRjk0NUYyOENDQ0ZCNEZEN0QKKzoxMDRCQzAwMDI5OURDRjVDMTEyMTMyNURCNzFGOTYyODU1RDg2MEFCNjcKKzoxMDRCRDAwMDVDMjM3RUEyNTI1NUE3NTVBMUNGMDMzNEU4OTRGNzBDNkQKKzoxMDRCRTAwMEQzNDdFQUJBRkIyNDMwMjk1MzVFQ0YwRkZDMUI4NTkxRDMKKzoxMDRCRjAwMEJBNUQ4MDUyNjFGQkI3QjUxRUNGNzEzNzZEODQxMEFBQzQKKzoxMDRDMDAwMDg4NzUxQzE1QjZFRTM2Q0IzRjg2NkZBMzYwNjczODIxREEKKzoxMDRDMTAwMDMwQkVENDNEMjFFN0E3MzhCRDVGOTZCQjE4M0VCMUE4OTIKKzoxMDRDMjAwMDhCMjVCMjQ3OEM1MDhGMTNDRTNEREQ4RDczRkM3RDY3OTUKKzoxMDRDMzAwMEZDNzUwMjA3ODY4M0NCQTIyMTczQjk2NTBDNzI3OTZDNkYKKzoxMDRDNDAwMEY4QjgzQzMyNDZCODNDMzQxNDJFNEJDNjE4OTc0MDhBMEMKKzoxMDRDNTAwMEQ3QjNEMzA2MUUyRjYzQzQ3NzYzQzFGNkYxNjQ1QjU5RTMKKzoxMDRDNjAwMDY3NzVDNzg0ODRGN0FDQ0U0MzJBQjc2QkJBMTcyNTNGNjQKKzoxMDRDNzAwMDBEN0MxMTVEQkMxOTBBM0Q2RjI3OTlGREJCMjcwMjhGODIKKzoxMDRDODAwMEI5MUFEREY0RUFFMTY2RkJENTY3NTNFN0UyNEUxQjczMjAKKzoxMDRDOTAwMEJCQUZFQ0VEQ0Y1RDFENDg2Q0I2RjBGQkIyRDZDNzQwQTQKKzoxMDRDQTAwMDk2RTcxMTg4MEI1OEE0M0NCQzBFQzUyOUQzRkRGNEI2NzkKKzoxMDRDQjAwMDkzRjc3NTQ4NzFFNDlDMENERjlBMEIzRjRDMUNENDNGNzIKKzoxMDRDQzAwMENCNjk2QTE5ODI5Q0Q1MjQ5OTdBRUFENDZGOEY0MkY5MEMKKzoxMDRDRDAwMDM0RjQ1NTYwRkFFMzIwQUI2NzdBMjIzRkE4MTM4RUQ1RUYKKzoxMDRDRTAwMDlCOUZFNzg2QzkyRUI1MjMyMjg4RTZCQzVFNkIzNjlFNjUKKzoxMDRDRjAwMDk3ODkyQjIwMjk4MkRDMDI3RjNCNUM4RjZCRjYxOEYyQjAKKzoxMDREMDAwMEYwQjk2MEU1REY3QURGQUMzQkFEQjQzNDVBN0JBMkI0RDYKKzoxMDREMTAwMDEyNUQ4OThDNDY3NUQyRDY2RDlDMDdBNzBGRkM3RDc3RjYKKzoxMDREMjAwMDQwQ0IzM0JDMTdDODBGQjg0MzNDRTcyMzg5OTRBQjlFRjQKKzoxMDREMzAwMDRGQkIzQTk5Nzk3NEQ3RkFDRjlCMkMzQjEyODQ2RkY5MDkKKzoxMDRENDAwMDFGN0REODY3MkYzQTU4QkQ5NjkyNDIzQ0Q3MjI4RkY1RTcKKzoxMDRENTAwMERBOUM1QjUyNkYzOUQ5N0I0NEI4NzUxRUZENzE2QjlGMkQKKzoxMDRENjAwMDU2RjM1OTkxQzgzRjlCNEYyQUY5NkZDMUY3MzdDNjc3NjEKKzoxMDRENzAwMEI1OUZGNzQ1QUE2QjQ2MTM3Q0FDOUZGQjg5MUI4RDQyMDAKKzoxMDREODAwMEY1NDc5MDRCMTE2RkQ5QThBMEU0RTlGQzk3REFBMTcwMjAKKzoxMDREOTAwMEY3OTZGOUQwMTQ1RjZERThBMzZCQ0Q3MzY3NUI3MzU1MUQKKzoxMDREQTAwMEU3NEQxMDQxMzY2RjdFMEVDREJBRjMyREVBNkI0QTkzNzQKKzoxMDREQjAwMDQ3NzNFRTM0RjM1OEFFRTI0QzU2NzEyMkRDRkEzREQ3MUQKKzoxMDREQzAwMEVCMzU1RjFCRUE0ODg4NjdGQkU2RUI3OTdERDM4RTdGODYKKzoxMDRERDAwMDZCMUZBQzI0NzU3NzlFRkUxRkYwNjkxRkJFMUI4QzhGNjYKKzoxMDRERTAwMEIzRUZBRjFENkY1NjlFOEVGRjMzNEZENkYzQTIzOTU3RTgKKzoxMDRERjAwMDJFODhGM0EyRjc0Q0ZEMkZEQkE3OTBBNkYwMDcwMDAwNEEKKzoxMDRFMDAwMDAwMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwRjAKKzoxMDRFMTAwMDAwMEJGQjUxQ0ZDMEYwMDMwOTc3RjNBMEYyQkZBM0YxNjEKKzoxMDRFMjAwMEQ3RjNBM0YyQ0JCODUxRjk5RTY4RkMyNjM0RkRFN0QxNDUKKzoxMDRFMzAwMEU0NTkxODIwQjQyMzNCQUEzOEIxNTg5ODgzODE0MTBFMTUKKzoxMDRFNDAwMDg4MzUzOTUwQzVGM0ExRTZENjAwMkRFODA3RTIxNUFDNDgKKzoxMDRFNTAwMDg0Q0RGQTJDMDU3NDhGMUMwM0MzMjkyMEREMDBDNEQ3MzAKKzoxMDRFNjAwMDY1MTkxOEQ4ODE3QzIxNjkwNjA2NUYyMDRFMDBFMkNGQzMKKzoxMDRFNzAwMDMyMEMwQ0IzODBGNDNCMjBERTJBMEREMUM3MDcxNDNCNjMKKzoxMDRFODAwMDI3NDM5RUZCQkI4NUM4RDMzNzhBQTk4MzFGMjhBMUYyN0QKKzoxMDRFOTAwMDY3NjgzMzMwRENENjYxNjBEMEQ2ODNGMEFGMjBDOUJCMDEKKzoxMDRFQTAwMDAzQzU2NjZBNDNEODMxQUEwQzBDODc3NDE5MTg0RTI4QkEKKzoxMDRFQjAwMDYxMzczNzE2Mjg3RjE4MjgxRkFCODdERjdFNTcyMzU0QUEKKzoxMDRFQzAwMEZFMkU2QjU0RkU0RjQzNTRGRTEzNEY1NDdFOUYzNzJBRTEKKzoxMDRFRDAwMEJGRDEwNzQyMDMwMEJERTBEOThERDgwMzAwMDAwMDAwMTgKKzoxMDRFRTAwMDAwMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMTAKKzoxMDRFRjAwMDAwMEJDRDdEMEQ3QzE1RDU5NUY4OTk4RjM3NkZERTY3NEEKKzoxMDRGMDAwMDI2QzkwQjNDMjBDMDI0MDQ4OTFBRTgwMDAxODIyMjRFRTUKKzoxMDRGMTAwMDQyQjBDMTRERjE4MTU0Njk5N0VBOTNCNTM2MjJDODEzNjYKKzoxMDRGMjAwMEIxQTZBRTZEMjZERkUxQUI4REU4NTY1NkFEM0U1ODZEQUQKKzoxMDRGMzAwMEE5RDUxQTJENkQ2OTU3REIwNEQwQzUyRDg1NDhBOUI1QjMKKzoxMDRGNDAwMDJERkI2RjUwNTc1QjE2RDlFODE2NzU1RDVBRkVGNzlDMUUKKzoxMDRGNTAwMDNCOTNDQzNDNUUzRUVDQzdDRkM2RUQwRTc3RTY3RTlDMjUKKzoxMDRGNjAwMDdCRUUzOUU3OUVBRjdCOUYyMjA2NDBCRjFDRTAxQ0ZFMTQKKzoxMDRGNzAwMEIxRTc0NTIyMDBDQzE5N0M0NjJCQTA1NDJFMDdEODI0M0IKKzoxMDRGODAwMDA0OEQ3MDExN0JGRTQxNUFEOTE1NjZERkMwOEEyRjlGQjAKKzoxMDRGOTAwMDNFRDhFRTVBMTBBOEZFRjM0NTZERjEzRUY2QkQ2M0VBMjkKKzoxMDRGQTAwMDU3RTM1MEM2RUE0RjE0QThCRTUzQ0Y3OURFMDgxMjQwMkIKKzoxMDRGQjAwMDAxNDA0OUU3NkEzNUMxRkFEOTM0QUU0OUM1RkExREZBNEMKKzoxMDRGQzAwMEY2OTVDMEM2M0I1M0EyODA4NEUzMTU2NTZGREZENjAwMUIKKzoxMDRGRDAwMEQwM0QwREUwNzJEOEFBMTZDNzU4Rjk5ODY0NkM4NjZDNUIKKzoxMDRGRTAwMEUzMTREMTM4NEVEOTFGMTdBMUJCMTRFOEVGMUNGQkRGMjcKKzoxMDRGRjAwMEE2MkYyNjIxQzFDNjZEOURGQUQ1OTUwOEI3RDI3RDMzNUYKKzoxMDUwMDAwMEU4MTE4MDNCQzYyNTQxNjdFRjY3ODI0OEYzNTIyQTJDOUUKKzoxMDUwMTAwMDMwNTk1OUQ1QURCODM1RkRGQzcxM0ExMDJGNjVEODZCQjQKKzoxMDUwMjAwMDY3N0M3OTY0RjBGRDMyMDcyRjBDMUYxOTc4MDFCODA0RjIKKzoxMDUwMzAwMDQwODM1OUREMTY5NjAzNDBFRDMzRkIzNUVERjFCNUY4QUQKKzoxMDUwNDAwMEU4QzYzRjdGRkU3Q0ZDMTlBMDEzMUU0MEVEOEMyNzIyOTIKKzoxMDUwNTAwMDgzRjA2Q0YyRjU3NzRCMENERjU2MTExODhGQjEyQTM5QkIKKzoxMDUwNjAwMDZDOUM0QTU3M0Y5OUUzMERDQzUzRUVGNEFDRkY3NDg0MkIKKzoxMDUwNzAwMEIzODBFNjIxQzhBRUZFMzJFMTk5NkJENzlCQ0I2NjhFM0EKKzoxMDUwODAwMDRGNjc1RTM5MEJGODM4MjNGNTdGMjVBMkI4MDBFQjc3MjAKKzoxMDUwOTAwMEM2QUQ4ODhCMUU2NUNCODNGN0EwNUQ1RjMzQkRGNTg2RkIKKzoxMDUwQTAwMEMyNEYwOEYxMzMwN0YxNjNDNTkxMUUxRDNBOTZDMjdBQ0IKKzoxMDUwQjAwMDYzMEQ5QjRGODEwNUZENTIyRTkxOEQwOTYzMDBGMkYxMjYKKzoxMDUwQzAwMDVGQUM4OUFDRTk5NTQ4QUY2MzRDNTY5NzdEMUYxQkIzMjUKKzoxMDUwRDAwMDFBMjVGNjdFREM4MkI0MjBCMzY3MDQxRUQyREUwODAxRjYKKzoxMDUwRTAwMDQyNTM3MjhFMUE1OTlDRUVCQjY2NzdGNDMxQkEzRDAzNzcKKzoxMDUwRjAwMDkxQ0VDREVDRDkyQ0IzN0UxMTZGQzcyM0U5QzcxODQ4RTgKKzoxMDUxMDAwMDhEOTdBNTFFRTk2M0U1ODgyNTQzNTMzOThENEI3Qzc4M0YKKzoxMDUxMTAwMEE3NzQ5MUIxOTk5MUY0NjY5QkZFM0IxQTU0N0FCNjM1MDcKKzoxMDUxMjAwMDY4RDBFRDA3Njg2OTg4RDNGM0ZFRDA5N0JFODFGREQ3QkMKKzoxMDUxMzAwMDVCN0VDRENGOUU3MkQ3RUQ0RjYxQjkxOTIwODFFMzQ1REIKKzoxMDUxNDAwMDYyQkM3RjkwNTVFRDMxMERDQjYwMjJERTIzMjVGQ0Y5NEEKKzoxMDUxNTAwMDEyRTI4NUMxRjk1NTg2NDlDNENCMEY2RDNDRTlEMDREQUIKKzoxMDUxNjAwMEZDREE2QzJDQ0Y4MTJDRjg3NDlFQTE1MjJGOUYwNUY0OTEKKzoxMDUxNzAwMDIwNkIzOTU4RjZDN0YzM0M2NTlGMzZERTUzMUZBMDkwNkQKKzoxMDUxODAwMEYwNDY2NTI2MkFFQTA0MkU4RjIyNzIyRjE4MDgyN0MzQkMKKzoxMDUxOTAwMDU3NTZCOTYwQ0IxNTQ5OUFEOURGQ0RFNjE3OUVBNzE4QTcKKzoxMDUxQTAwMEJCNThEMzZEODI5N0JGQzYwOTlDM0VDQTA0OTU5RTMxRjkKKzoxMDUxQjAwMEU4REY3RjBFRjE2Mjg4RTlDRDZDQUNFMENDRTJBRUVFQzgKKzoxMDUxQzAwMDE4OEVBOTE4NTNEOTNBMDY3RDY5MkQyRjBCN0Y0MUI5NDYKKzoxMDUxRDAwMDdDQUFDRjgxQkJGOEEzQzc4RjI0RjVBNDEyNTlDNkZEQzIKKzoxMDUxRTAwMEJEQkQ3RTk3OUYzREEyMjJGRkFCMzNDNTQ0QkEwQ0UxMDMKKzoxMDUxRjAwMEI1MTI2Q0YyQjA1NTk3NDU5Q0Y3NDcwN0Y3RjBFQjc1ODEKKzoxMDUyMDAwMEMyRTZFNzM2NTBBOUJFOENFQjU1M0VCODVFMUQwNjVCODQKKzoxMDUyMTAwMDJGRTQ5RjcyQkU1RTFEQjJBNThFNjZCRDFFMDdGMEUwMzQKKzoxMDUyMjAwMDI1MzQ4MDk3MkU4RTk3QjI4RjE4MkZDREZCNTYyNkIyM0QKKzoxMDUyMzAwMENDQTNDRDVFNEYxOTBDQTM5NEYwQTBFODA4RTdENjQ2QTYKKzoxMDUyNDAwMDRFQjcxNkEzREI2Q0YyNzcyODNDNDgzOUM3RTNDOUIyRTYKKzoxMDUyNTAwMEYzRjE3RThEQzBDNzU5NjRGMzg5ODNBNzREODY1ODkzQjcKKzoxMDUyNjAwMDBFMjM5RTNBNkI1MDZFNkQyRDExNDU5NDRCMUYxNTlFNkIKKzoxMDUyNzAwMDFDQjgzNjBGQzA5NUU2NzA5NTdFQjQ3MDQ5QTFFRTk1QzYKKzoxMDUyODAwMEQ5RjhCMTJEODMxRkI3MjBEQzlDRUU2QTM4REQ4OTFGNjkKKzoxMDUyOTAwMDI5REQzOTcwMDU5MDFGRjgzQTI3RjgzQUNCN0YxM0VCRDgKKzoxMDUyQTAwMERDMzZCMENFNDlCRUNFRjE4RjY2OUQ5REZEMUM1NDYzQTkKKzoxMDUyQjAwMDI1QUU1QjlEQzZGODkwQzE3MThCNjQyOTM3RTBGRTFBNUMKKzoxMDUyQzAwMDEyRTAzMTgzRDEwMUMyM0Y4RUU5OTlFMUE2OTc3NTFEQTUKKzoxMDUyRDAwMEUwM0UyMUMwRjUwRDY5NTU0RUQyMDU2RjlEQ0M3NDk2MDgKKzoxMDUyRTAwMDU5Rjg3RUVCMDVDOTYxRTYwMTY5NUY3RjlGMDMyN0UzRkIKKzoxMDUyRjAwMERGRkFFMzhERUQwNzVDNzA3RTUxODhDNDA4Q0U3OTMwMEIKKzoxMDUzMDAwMDBGRTE3QzI3QkMzQ0E3MUI4NkVFRUY2NDgzREEyOEZCMDkKKzoxMDUzMTAwMDAwREU2QkIwREEwRkY4Q0VGRjdFOEIwNEE5NkNGQUU1RTUKKzoxMDUzMjAwMDgzQjY1QzAwQjU0QkExRjlERkNENzg3MDI2RTJFMTgyNEYKKzoxMDUzMzAwMDZBODhCMkY1MDgzNzhEQzE3OTQwOTg3RDlDQ0ZGQUQ5M0IKKzoxMDUzNDAwMDFENjg5NDVERjgxRDZBM0UwMzc4NzVEQTMxNzVDNzlGNTQKKzoxMDUzNTAwMDc3N0VGQkExREE3RDIwMjQxRjExMTg3RTVCNjM2MjM1MDYKKzoxMDUzNjAwMEMyQTU5NjQwMUFEN0MwQkY3QjU5Rjc3ODE4MUFERUQ2NjcKKzoxMDUzNzAwMEQ4NUYwNkRFMjFEN0NEQUVGNzRFQjhBOTBENThCQjY2NzMKKzoxMDUzODAwMDlGNzE1MDY3NzREMjUyMjAxQTREMzAwODg3NDMyRkNFMzgKKzoxMDUzOTAwMEJBMzg3ODFDRURCQUZDNjY4MEJFQjY1RTAxQTQ2NzgyOUUKKzoxMDUzQTAwMDJFQ0RGQ0YzRTlFQTIwRDJENUM1N0Y3REJBN0FFMzZGMzIKKzoxMDUzQjAwMDk3QUU0RTBBMDU3RkJCNzRBNUQ0NEJGQUVCQ0NDRTI4MzIKKzoxMDUzQzAwMDkyNEQyRTI3QjVENTE2QUQzRjhFQ0RFNDkyRDQzOUIzOEMKKzoxMDUzRDAwMDFCRTUyNUM0OTk3REM2ODcwMTkxOTUxNUNERTQ3QTJGRUIKKzoxMDUzRTAwMDE4ODBGQUFCNUFFMjk1OTNCRTQyQUY5QzhDQUYzNEJCQTcKKzoxMDUzRjAwMDlEN0UzN0VCMzhBRTQyRTNBMjc5ODRFM0NBNjFFODBFQzIKKzoxMDU0MDAwMDQ0QjFBQzUwM0Y0OENFRTdBNjMwM0NDMTgzMzVDNUJDNjMKKzoxMDU0MTAwMDlEODFFRDg2OUE4RjhDRUREODc4QTg3RTlDMkJDMjc2RTQKKzoxMDU0MjAwMDdGOUY5M0M4NjJGNzBFQ0VERjNCNEU3QzQ1MjIyNzExNEIKKzoxMDU0MzAwMDE5N0Q3RDA4Q0JGQTFCMkVCQzBGREQ0RTg2MzcxQ0JDQjgKKzoxMDU0NDAwMDMwRkEyRjQ1M0Y0OUMxMjBGRUNERERCNzkxRkYyMjAwNDQKKzoxMDU0NTAwMEEyNDE3NjVENjE5Qjg1NUZEQkYxRkZDREM3N0Q5RkYzNDgKKzoxMDU0NjAwMDc1N0JFMTJDMERGNTJENjBGQjBEQkVCNzg0Q0YwMzk2NDcKKzoxMDU0NzAwMDNGMTA3NEUyNUI2NzNDMjk5QzAwQTIxQkJCREU0OEVCM0IKKzoxMDU0ODAwMDdGMjdGMjUzMTZGRTVFMjU3MjdERTNCRDJGQTVGRTFCMUUKKzoxMDU0OTAwMEVENDE2QkIzQTAzRkM2RjA3QUI4RTE3RDc4OERGMUU1QzAKKzoxMDU0QTAwMEVBRUUwQjE1RjQ3QjVDMkY4RUExN0FBQjE3MTQyOThCRDcKKzoxMDU0QjAwMDVDRkRBQzA2NkUxNzAyRjRDOUNCMjJFRTcxMUJCOTFFNUYKKzoxMDU0QzAwMERBMjVFREMzNzlCRjVBMjFBNTcxRkY3QkI1RTI3RjQ4OEMKKzoxMDU0RDAwMDNGN0ZENTk0RDI4OEU0NTczQkFFQ0UxOTRFRUUxQzZFN0EKKzoxMDU0RTAwMEUwRjZBQzUzRUZCMDI5RDFGRTdFNThFRTBCNjdEM0UzNjQKKzoxMDU0RjAwMDA3Qzc0RkQzRjg1NzU1NDhERTdENUFFRTkzNzFGRERGNEQKKzoxMDU1MDAwMEZCMjJGODUwN0YzRURDQTAwQUFGNEQ2NUM2MkZDRTkzM0MKKzoxMDU1MTAwMEQxRDFFQThBMjIwNUZEMEUyM0NENkI4OUVEMDc3M0YwMDgKKzoxMDU1MjAwMEVCQ0NCMzI1MkNEMjNDNUJDMjU1RTRCNzZBRDFERTIxNkIKKzoxMDU1MzAwMEZCRjEwQzdCOEZGMjYwMjg3ODFEQkY1NThCQjYzQzJCOUUKKzoxMDU1NDAwMDNFOTQwOEQ3QjcxNDVGMzJCQkJENjlDRkQ3Mjk2N0ZBM0QKKzoxMDU1NTAwMEIzMUNGOERBQzJEQzJFNkEwQjczQjhEQTYyNjIxQUY5OEQKKzoxMDU1NjAwMEJGMkQ5RTdENUNFN0Q5NkNDM0U3RDQ2Qjg5NzFCREI0NTgKKzoxMDU1NzAwMDg1Qzk5M0QxQzAyMzg3QkRGMDMwQjQxRDQ1N0ZDOTQ0OTAKKzoxMDU1ODAwMDVCRDZFNEQ3RjYzNjdFMEVFREVDNjREODk0MEM3Q0QzNzMKKzoxMDU1OTAwMDJCNEM2MkU1MDk3MTA5MzY2QjZDREM5QUFBOEU2QUM2REYKKzoxMDU1QTAwMDAyNzlBQjEyMkYzMjMwNjAyQzc0NTZBMjFGNzBGMjE3QTIKKzoxMDU1QjAwMDM3RjY3QzhEQ0Q2QkMyN0NCRjg2RURGMjZBNTIzRENGNTMKKzoxMDU1QzAwMEIxNzZFMzk5OTg5MzU4QkJCMUM3RDdBRDQzMzlGQjRGMzgKKzoxMDU1RDAwMDY4MjdBMjIwQjY2RTZBNDQzRjU2MEIwRTcxMDlDMEMzRkQKKzoxMDU1RTAwMEUyQUE0QUY0QjNDOUMwRTUwMjkzN0FCQTNDMDZGRDMzOTUKKzoxMDU1RjAwMDQwQ0U5OUExRTQwM0ZCMTNDRUY5MDdEQjBEODVCNzg4RjQKKzoxMDU2MDAwMDJEQUY2OERFMjRBRjk2MEYyRkFGMzZGMkZFMkRGNjFGQkEKKzoxMDU2MTAwMENBOUIwOTgzRTM1MUZCNzE3NThBMDc4RjYzMzNCRTFGRjEKKzoxMDU2MjAwMEIwRTlEMjBGQ0JGRUFBRTM4Qzg3RTUwMUQ0NEYyMjJCNDEKKzoxMDU2MzAwMDQ0MkQ4REY1QTEyQjE3RkQ1MDYzRDZDQUQwOERERkNCM0QKKzoxMDU2NDAwMDNCMUI5OUY4MTgxMUVGNENFRUQ1NzBCRjcxNTI1OEU2MUMKKzoxMDU2NTAwMDgyRjc5NzIyRjczMzREQkFFQjk4MjBBMERGRDc2MDJBNjQKKzoxMDU2NjAwMEZENEMyQ0Q3Q0ZDQzQ2QTdEQjZERkExQzI4RDdBQzE2NDcKKzoxMDU2NzAwMDkyMzQ1RTYyQzk1NDk0NkJCNTIyRDlCREZGQjQ2MjU2QjAKKzoxMDU2ODAwMEFFQkJGREZCRjYzODgzRUIwRkJBM0MxN0NCN0NGREU1RDgKKzoxMDU2OTAwMDE1QTIxOTk4RjFBN0FGQkZGQzIxRDczRjdGQTNFMkQ5OEMKKzoxMDU2QTAwMDRGM0ZFQ0JBQzg2ODdCMTQ4Q0JDRkU3RkVFMzhDRUJBOTQKKzoxMDU2QjAwMDlEQ0YxRjVDM0U0RUJBQUIzQTgwRjJFRkJFQzRGMDcyOTMKKzoxMDU2QzAwMEU1RkM3NTVCNEVFQjM2NjYwNTk4RTkyQzcyMjUyMDA5RTIKKzoxMDU2RDAwMDlFN0RENTc5QUE5MDAyODNBREIzNzQ0QzIyRjkyNjhEQjQKKzoxMDU2RTAwMDlEQkI3MjI3MEMzREFFMTQ1MzMyRUMzN0JCM0ZDQkRDNzUKKzoxMDU2RjAwMDVGQzJENkZGMTNFMEZDRjVDQTI4ODc2QTUxMEVBMTVDOTEKKzoxMDU3MDAwMDJBRjdCREVFRjY4RjMwOEMwRjk2MTlFRURGRkFDMkZFNDcKKzoxMDU3MTAwMDAzMjg4RjJDMjY4RkQwN0Y5QUY5QkQxNkNCMkU3QUI4MEUKKzoxMDU3MjAwMDQyRTJGQkVGQkVFRkZFRTIwMjgxOEQ3M0M0RjBFQjdFM0UKKzoxMDU3MzAwMEY2RUE5MEQwRkIwNkY5N0QyQjI1REE4RjExM0U3NTJFMDcKKzoxMDU3NDAwMEI2MDc1MjRFOEU5ODkyNTlDREVBRjc5NjBCQjQ4RkZBNUYKKzoxMDU3NTAwMEUxQTVFQkZFOTFEQTg3MjhERUQxQkJFMEI1MkY1RkNBNjkKKzoxMDU3NjAwMERBN0ZFMjMyMUY3MjBFQzcwNEI2OEZCMzdGQTI1RTczNzgKKzoxMDU3NzAwMEI2RUZDQjk3QjJGQTg3MkVDQjFGNTZERkFBQzVGOUJBODAKKzoxMDU3ODAwMEU4RTRBQTY3QkRFNTU1NDg2RjA4RkY3RkJDNTlGQjIwRDgKKzoxMDU3OTAwMDFCRUYwOEU0MjRGQ0Y4QUNFMEYwMUQ0MUY4OTBFRUZCQjAKKzoxMDU3QTAwMDdFRjUwNkVBODU4NzREODFGQzUxNDcyQTdFMTY0MzdCQUMKKzoxMDU3QjAwMEJDRDIxNDQ4NUY1Q0JBNDA0OEZCQjNDQzczRTk4MkRCQ0YKKzoxMDU3QzAwMDI2NEY2MkZEMjU4QzkwMTY2MERGMEY1NUJFQkRGNTUyNDkKKzoxMDU3RDAwMDA2RUY1NTNGOTBCNkUxRjNGNDVFQTkyMDU5MzYzNEJDOEMKKzoxMDU3RTAwMENFRkJBQjRDRUZGQjAxQkQxODkyMTZFMjFEMzQxRTk3QTkKKzoxMDU3RjAwMEYwQzU4Q0I4OUI1RTA3RjQxODM5NjE2NkYzQjdBRDk1QjgKKzoxMDU4MDAwMEI4RkY1MUQwMENEMkVGRTRCMDAyMzg4RkExRUFERjM0RjgKKzoxMDU4MTAwMDA0RkRFNjQwN0ZCNzg0NzAzOEZBRjdEOUFCNzVCNzNDMjIKKzoxMDU4MjAwMDc0RTA1MEU0NDQxMkM3OTEzNDA1NzZBMTlFOTE3QjhEQkIKKzoxMDU4MzAwMEVFOUU3RjgzQzRFMzQyNDJEQzI0NzgxNDhEQzNBM0M4NjgKKzoxMDU4NDAwMDg2OTlDRERGNTQ2RkMzRTNGNDAzRDA2OUI3RUY4N0JFMDkKKzoxMDU4NTAwMEYwMjA3Q0FEODFDNDRBRjQ1QjU4QjlEQzdGRDgxMkYxRUEKKzoxMDU4NjAwMEZBMDNGN0Q4RkQzQ0U2RjRFNzgzQUM3MTE1ODAyNkVBMkQKKzoxMDU4NzAwMEJGNkE0Qzg1OEFGRDM3NTc3MDNENDkwNzgzRkNFMzJEOEQKKzoxMDU4ODAwMENDNkU4NDYxRjRCQUFEQjZCQ0Q4OENGMTBEM0ZDNjM5OEMKKzoxMDU4OTAwMDM0M0JDRTExRTdGQTUzRjgxOUYyOTM5RDI5MTNDOUFFQTAKKzoxMDU4QTAwMDE5QUE5Rjg4RTFENTQ3NDJBNTVFM0JDNkQxNUYwMjdBMUYKKzoxMDU4QjAwMDVFODYxRkM4RUJGN0YxOEQ5MTQ1NDdFRjQzN0ExRDA5Q0UKKzoxMDU4QzAwMEZFMDEzRENGQUVENzJFQTc1NDJEMkI5RUQyQzNFQTczMzcKKzoxMDU4RDAwMDdGM0RGQ0YxRjYyMTVGOTc5NjBEQUVCRjE0REUxQ0JBM0EKKzoxMDU4RTAwMENBRUM1RkM5NTc1MjY5OEFEQjI1RTIxRTdEQzA5NjkzRDgKKzoxMDU4RjAwMDRBQkU5QUMyN0QwMUQ0QTFCRTA3NzlGQjMwRkI4RUYxNkUKKzoxMDU5MDAwMDhDNzA0MjQ3N0Y4QTA0M0MyRUE0MjIxRkI4RjBGM0I2NjUKKzoxMDU5MTAwMERERUVEM0IyNjhFQkYzMjk4QTgzMEE3QThBRkM3NjZBRDEKKzoxMDU5MjAwMDIxRTMxRkUxRkM3NkNFQjNDRjZFREZGRTg3REI1RjIxODQKKzoxMDU5MzAwMEZFMjg1MDg5M0YwNDlERjE0Rjk2NzE5QTI0RjM5NEM0MzgKKzoxMDU5NDAwMDlFQjc0QUU2NUJGOEY0RkQ1MTRBNjZFMzkzRkZCMkU1ODEKKzoxMDU5NTAwMDhBNUE5QkQwRDU2MjhBMkI5MjNEOTIwOTQ3NDBFNkZEMzgKKzoxMDU5NjAwMERFRTRDMDZGQTUyODRFMzk1QUY4REYxRjI1RkNDRTM4N0IKKzoxMDU5NzAwMDBDN0U1OTJFMjBGODdERjgxQzBBN0VDOTg2MjcwRkY0NkMKKzoxMDU5ODAwMDQ2MTlFNTlBQ0VFNTJCQzAzMkREQUQ5N0RDMjg3Mzc5NTgKKzoxMDU5OTAwMDkxNjdDQjI3ODBEQkUyNkU3QkVCN0FCQjlGRDFDRTI3NzIKKzoxMDU5QTAwMDRGMUVERDdDOUM3MUQ5N0MyNkM5N0MzRDI2Q0JDM0FDQzcKKzoxMDU5QjAwMEM3NDQxQjhFMUI2NUJFREZBOUQ1MDkzRENFRDYyNTc3MTIKKzoxMDU5QzAwMDA4QkE1QTYwQzM5MTkyNDU1QkFGQjhFRDQzRDFENUM1RDMKKzoxMDU5RDAwMEEzOUNDNzgyQzE3NTk5NjdBRjRCQzU3MEYzOTg2QkNGMTUKKzoxMDU5RTAwMEEzNTM4MkY5QUZBMzVFM0NDNUYxRjcyQ0Y3QUNDQjFERjYKKzoxMDU5RjAwMDM2N0UzQUZEQ0VCQTZDRjBBQ0NCMkRGNkJDNDYzQjlGNjIKKzoxMDVBMDAwMEM1NzY3RjIzQ0RFNzhFQzE3NTU5NjZDRjY3Rjk3MEYzRjAKKzoxMDVBMTAwMDcxRDVCRkQ2QUVCRkQyQUU0Rjc2QzcxRDcyNjkxM0RBNEQKKzoxMDVBMjAwMDE5NEQ1MjYyOTU1QzMwMzgxRUFCRjcxOTc3QkRCNzlCQTQKKzoxMDVBMzAwMENGMzREQUY1NkVDMEY3NDIwRERGRkY1OEJERDVFRTdBRjAKKzoxMDVBNDAwMDYwNDU5QkQwM0ZEMDhBQjYwMkIzNjM0QTVBMkVBOUIyQjIKKzoxMDVBNTAwMERCRDU1MUJCREE4MUZFNkZCNkY5ODNEQTA1NUE4NDI2QUQKKzoxMDVBNjAwMDJCNENGNUQ2NjFCREM2NDU3Rjc0RUFEREVBODVGNzYyNDkKKzoxMDVBNzAwMDA3REUwRDA0NkZGNTAwMUNCN0JCRUIyRDkwMjc1MDdGQTAKKzoxMDVBODAwMEU3QzUxRDQ2RTkwRkYyQzU5MjFEMThFN0NGODM0ODI3RTkKKzoxMDVBOTAwMEU2NzlCNEM5QTk0NzMwMEZDMEIyNjQ3ODBDRjMwOUZDQTkKKzoxMDVBQTAwMDg2ODAzRUI2Njg0NUVBMUI1ODJGRDc2MkY2MzVBRTVCNTYKKzoxMDVBQjAwMDU1RUEyOTJDNUIyMjI0OUFDQjI5OUY4MEYyMDVFQTY1QkUKKzoxMDVBQzAwMDU1RjMxQjk4N0Y2MUMwMEU1NkQ2NjI3MjFBRURGMzU2REQKKzoxMDVBRDAwMDIxNjlFMUJFRjg1MzI5Rjk2NTk5RTRBQkI2QUExMUZCMzcKKzoxMDVBRTAwMENGRDdCOTlFMEU3REI0NkYzOTcwREQxM0JBOEVGMjFGMTkKKzoxMDVBRjAwMDcyMTk1Q0U4OEY2QUNEODBFQkZFRDBBNDFFREM2RkVGREMKKzoxMDVCMDAwMDJENTA0ODRGNjYwNjU2MjlDQTk3M0JBNUEwODFGREY1NDIKKzoxMDVCMTAwMDE0N0M5RUUwRERERUM4RjMxQkI2N0ZFMkYzMDRFRjdENkMKKzoxMDVCMjAwMDAyNTBEQ0Y2M0UxRkNGNkZCOEM3QTc2QTREMUFGNjE3QjIKKzoxMDVCMzAwMDFERjc1OUNBODdDOEQxRkNFNTM2MUMwOERGREYxNTEzRUQKKzoxMDVCNDAwMDdDRjlBMDU1REUyODkwRjhFQTQxRkJCNkI1NDIyMTdERUMKKzoxMDVCNTAwMDc5N0I2QzU2MjVGNTU3QTE5MjlFN0E1RjYyNTYyM0U5QjAKKzoxMDVCNjAwMDFEMTU0MUYyRDFFNzg3MERCMjVCQTNGMzE0QjBCMDFDNTEKKzoxMDVCNzAwMDMzMUE1MUNGOENDQzBENjIwRTBDRTQxNzAyMjYxNzQwNUQKKzoxMDVCODAwMDY0MUFBNEIxRUM4M0NFQ0UxMkY2OEM3NjMwQkIyNDlGN0YKKzoxMDVCOTAwMEVDMjZCODExRURERTBBODY3N0I0MjMyQ0YzMjhEQTI1M0IKKzoxMDVCQTAwMDYxQjBGRkE0NDMyNkNFREIzNzQxMDJGNDdCMzhFQjFCMDgKKzoxMDVCQjAwMEVEMUM2ODNGQUNERDE1NEQ4RkIyNUVGN0U4RUE0NTNBNjMKKzoxMDVCQzAwMDk4REQzRjdCMTRGNTNBNDc1OTJGM0RDQTdBRERCQ0RFOUMKKzoxMDVCRDAwMDg4RkUwRTgzREI3QjJBRkIwRkVEQjY0MEE2REQxQ0Y2QUMKKzoxMDVCRTAwMERBQzNCRThDRUY5OUYxQjhDQzY3NjYzQ0U0QTRFQzhEQzcKKzoxMDVCRjAwMDg3OENENERFODk4MzhDMzQ1Rjc0NEEwQ0MwMjk4RDVDMTkKKzoxMDVDMDAwMERGRDEzNzg3RkFBRThDQkYyNjZFQjJGNkFERTMzRTFEMEMKKzoxMDVDMTAwMDI3QjkzNjZFMTU3RjRFQjRERjRGNUM2OTk3M0Y2RDk3OUQKKzoxMDVDMjAwMDU3QUQzNEIzQzhGN0IxM0UyRTg3NEJEMTFGMzI5Q0RGM0UKKzoxMDVDMzAwMDAxQjhGRUY4MDY4M0ZEOUM4MEM5NEJDM0ZCNEYzMkY1Q0IKKzoxMDVDNDAwMERFNEM3OUE3Q0E1NjE1RjJFQkY2MDRGNzZCRkE5MTE5RjgKKzoxMDVDNTAwMDkxMEYwQjgxRkNCMDNFNDg3NTk2QTA5QzAwMzNCQTc4M0EKKzoxMDVDNjAwMENDMjBGRkY4Q0MxNzRDRTRFN0MzRTMyNDEwMkE2ODdENkUKKzoxMDVDNzAwMDBDRjJBNzY3RDA0OTI2NURGODMzRkMzOTdGMkU5RDdDNTYKKzoxMDVDODAwMENDRTc4REM3RkVBNUU4NDRFOTkwNDZDNTNGNEFFNzI4MjIKKzoxMDVDOTAwMEVCQTU0NzU5QUY3Qjc0RjVGQzFEQzJFOEVBNzU4RUIyREYKKzoxMDVDQTAwMDVFN0E5NEY1QkE3OUJEQjZGOTBBREZDRkUxN0I0RDY2MkQKKzoxMDVDQjAwMDA5ODNGQjEyRDU1MzZFQkIyNEU4RkQ3RTY5RDg1MzZFNzEKKzoxMDVDQzAwMDlGQTNEMEZFRUY5NEZENzM1NTRGQjk5REM5NzlDRkY3Q0YKKzoxMDVDRDAwMDc5NjEyQTZGNkFFREFFNjI1QkQ5QThGOUU0M0ZGRjQ0QUYKKzoxMDVDRTAwMDNFMjk1NTQ3RjA0QjU3ODgxOTc2NUIwNjVGQTk3QTAwMjUKKzoxMDVDRjAwMERCRTdDQjNBNjBGRTU0N0U4Q0VGNTNFQzY5QTZCM0UwNTEKKzoxMDVEMDAwMEY3MTE5QkZGNzdDOTNDN0Y3M0JCQUMwN0QwN0VGQzVCNzAKKzoxMDVEMTAwMDlGNjdBMzhGQzNFQkNDNzcyNDc4MURGOUZCQTY2NEVCQjgKKzoxMDVEMjAwMDVCNDNFNTdENTRGM0JDNEMxOTgyOTQ5NzU5NTI2RDU2RjAKKzoxMDVEMzAwMDk5NEMyRUM5MkZGMjM4NTg2NkJGRDcyOUM5QTc3RDJFOTYKKzoxMDVENDAwMDdCNThENjkyM0NCRTY3RjdCN0E0NDAyNkJENDQ2NjcyMjYKKzoxMDVENTAwMDBERjUxRTA1MTIzNTQ1MTQ0NzE0QzlERjI3ODc0N0Q4QUUKKzoxMDVENjAwMDM3MEE1RDcyQUI3ODE4QjhFRDNDNTZGQUE0MDM1NEZFQkUKKzoxMDVENzAwMDk2OEYxQjM0ODBFNDZCMDRGQUM4OThDRTQxQUQ2NzBBNTUKKzoxMDVEODAwMEVBNjlCQTAwRDRERTEwQjhGRjdDODE4NkZCNUUyQ0YwOTUKKzoxMDVEOTAwMDk3RUU3NzE1RjUyQjk4RjdDMEI5RDA4N0U4NTdFRTIzMjMKKzoxMDVEQTAwMDdGRTc1RkJDREYxMUUwMEQ2MDdFRUZDNTE0NDI4OEI5NkMKKzoxMDVEQjAwMEYzN0I3REYxMTRCRDg0QjNFN0NFNDk3MzgxMzdBMUJGNzYKKzoxMDVEQzAwMDI0QzVENzY1RDEyMDdGMjg4QzhGOTI1REQ2MUFEQkEwQTEKKzoxMDVERDAwMEJBRDdGNUZGN0NDNTFFQkY4OUEyQjVERDI2NDREOUIzNkQKKzoxMDVERTAwMDcwQUREOTM3MEM5RDlGQzM2MDBDRkE0NzBBNkYzNEZCMjYKKzoxMDVERjAwMDg2RDk0RjA3RTI5OTE4QUZDRkMyMDc2RDRBMzI4REZBQTQKKzoxMDVFMDAwMEJCMzUyOUNDRUQ3OTM5NDU3RUM2NzYyMTZGRDZFNjcyNTEKKzoxMDVFMTAwMDE3RkQxNjJBREQwODU3QTREQ0I0RDBERTZCQ0YxNzBEQjIKKzoxMDVFMjAwMEQ0NTM2NUQ4REEyQkNDNjBFREE0NUEyMzk5NDU4RjE4NEEKKzoxMDVFMzAwMDZDMkY5Rjc0Q0YyN0E2NzhGNUE5RTYxMUU4QkQ3NTA0RUQKKzoxMDVFNDAwMEJEQzdBNzE4Qzk2Q0ZFRDA2OTBBQjc2QjdEQzFFQ0RGNkUKKzoxMDVFNTAwMEVGMTJBQjRBOTQzOUU3RTM4REE5RjlEQ0JFQ0Q4NTBFOEMKKzoxMDVFNjAwMEUxNjM5QzdDMjhERkExRjA4NTU3MTAwRkFEMDU1N0M0NzYKKzoxMDVFNzAwMDg3OUIyRjY4REVCQ0NCOUI0NDczQTYzMjNDMUM3M0IyNUQKKzoxMDVFODAwMEMxMzFEQTdDMTBBRERBMjAzQTFDRDA5NzYyOUNBRTUxNTkKKzoxMDVFOTAwMDRGMTJDNjYwQkUwN0ZGREI1NkJFQUIxQkYzNDA3QzM3MUMKKzoxMDVFQTAwMEYwQjhBQzY0RUUwNkY0NTMzQjdBOTM2NDA2NEY4OEI0QzIKKzoxMDVFQjAwMDlFMEJCOEZFNTRDQUY1MjE5M0ZEODdGMzg4MkUxODVFMTkKKzoxMDVFQzAwMEFGOTYzMkNBQ0IxNEFGM0VENERDQjAxNzMwM0VFRkMwMzEKKzoxMDVFRDAwMEVGRjhGMTMyRTc3NTg5NTg3NTZENzY3QzhDQ0UxRUJFNzEKKzoxMDVFRTAwMDhGRDEwQjRDQzM3ODk0OEE0ODgxQ0UwNjhEQ0E1RjZFRTEKKzoxMDVFRjAwMDg4NTM3OTZCODM0RUNGOTY4NjUyN0E2RUMxQTZGMzkxMDIKKzoxMDVGMDAwMENGNTMxRDQ1MEM2RjFERjE0N0UzOUY2NTU1RUU0M0Q5RjcKKzoxMDVGMTAwMDQxRkJGRTc1OEI1MDRGREUzQzUwNjY2NjIwODM3QjMzMjEKKzoxMDVGMjAwMDA2QkM5OTFFNzFCQjcyRDUyMkI0REYzNzA3QzBGNjJCQjEKKzoxMDVGMzAwMDJDNUE2NDdBQ0FENzM0NTc2MkQ5RjYzMzZDNkVCQjlFM0EKKzoxMDVGNDAwMEVBREYzNzExRUM3MzEwQTZGQTQ5RDdCRUY3ODhFMjIzQ0YKKzoxMDVGNTAwMEZFQzZCRDg1QjczNzlCQjFCRjgwNkM5N0UxQjY0NURFMDUKKzoxMDVGNjAwMDMyOTgwODRGNDBFNUU1RkRDQTA2RUE5RjQ0MDAxQkVGNjIKKzoxMDVGNzAwMDI3Q0FFRDdDQkNBOURDOEYwRjY1Q0I0N0MwMjNGN0VCQUMKKzoxMDVGODAwMDgzQTI3M0Y5NTk5NjQ3RjkyQzhBNjFBMEZCMTVFRUNCRDEKKzoxMDVGOTAwMEI1RTExRTZEM0Y3MjkyRUY3N0M3QjJFRjk3ODM3QzMzMDYKKzoxMDVGQTAwMEMyQkU2NkMzMzFEMkZBMzM3NEQ4N0U4ODI0NTgzOEVFMjQKKzoxMDVGQjAwMENGNzkxQ0YxQUYzREVFN0RCRTBGODcxN0E1QTJERkMyRTIKKzoxMDVGQzAwMEYzMjMwQjk0RTRGNzkxREUyMzY2NTc3NzExMkI0NzZCOEQKKzoxMDVGRDAwMEJCMkQ2MkRGNTE4RTdCQUZBMkQ5RjM0RTEyRkYzQjc4MEYKKzoxMDVGRTAwMDc2RjQ4RUZGRjI3OUQ3RDExNzMzMjkwRjI5MTBFNkZDMEEKKzoxMDVGRjAwMDM3NUE3OEZCNTBCRjlBMzNEODBGM0M1MTM1NkUzODdERjUKKzoxMDYwMDAwMEFEMjAyMUEyMTIzNjIwMkZGMjZCODI2ODhDMEQ5NDczODIKKzoxMDYwMTAwMENEM0M0RjM5QTc2MkJDQTc3RUM0MjhGNjdDRjc2OTE3MzAKKzoxMDYwMjAwMDc5QkVGRkE5RUJGNEYzOEM3OUZDQkJBRDM3M0FFNTFGRTEKKzoxMDYwMzAwMDY3Q0U3Mzk0RkQzQUU1OUVCRTQ1NjIyOTVCODc5NzZCRjgKKzoxMDYwNDAwMDI1RDJFRjVFQUU3REVEQkVEOTU4NEU0ODE0QkYzREIzQUMKKzoxMDYwNTAwMEIyRDk4NzhDNzQwQ0NDQzgxQ0Y0ODcyNTI1REI5RjZFQzUKKzoxMDYwNjAwMDRFNDQ3Q0ZFMUNGRkM5QzY3QjA5RjczRDI2OUY4RUQ4OTcKKzoxMDYwNzAwMEU3N0Y5ODlDOTg4OEU3OUY4RTVDMzY2RjIyQUVFQjExODUKKzoxMDYwODAwMDFGRTc2RkIwM0E0OTNFRkRDQzA3MUU3OUYwMzM1QkZFNDcKKzoxMDYwOTAwMDE4RUQzQjlBRDEwRjc5NENFMDY1QTk3REM3MjI4QkUyQzAKKzoxMDYwQTAwMDgzNUJEQjNFQ0VGNDk2QUIzOTBBNjE3OUFEOTBENTFFQTkKKzoxMDYwQjAwMDg4RjgxNUMyQzcwNzQyMzJFMjY3RjMzNEFCRjVENjE4NDkKKzoxMDYwQzAwMEU2QkZFOTQwRkFBQTFGMTJBNDk3RDU4MzU1MjlBMkJFQkMKKzoxMDYwRDAwMEMzRTg4RkUyREM3MjdGNjEzNkJERTM2N0Y2N0VFRTg3NTAKKzoxMDYwRTAwMEFCNDlERjVGNUU5QkVCNDM2M0RFNUYzM0QzODc3RUQ0RDgKKzoxMDYwRjAwMEFCNkIyQTdENjBFQkNCOUEwQjNFMzEyMUQwRjlBOTE1MTEKKzoxMDYxMDAwMEI1RkU1RDg4RDcxNUIyRTlDQjE2RDdCQTNBRTFGN0VDMDAKKzoxMDYxMTAwMDUzMzMxOTBFMTFGRTYzRjZCOTA3ODBGRTQyNzdCQzY5NEUKKzoxMDYxMjAwMEE2OUZEQjNCRjE5MkUxRUQwNTA3NkVBN0JDQUM3NkU2REUKKzoxMDYxMzAwMEYzODgwNzg2NkQzQThGMDI2QTdGRTE3NTExNzdCRjIxNzgKKzoxMDYxNDAwMDI3MkUxQ0MxN0U1RjVFRjkwRjdDN0Y2Njc0ODE3RUM1NDEKKzoxMDYxNTAwMDE3NEY3Q0NFNDc3MUQ5MTVGOTFFRkU1QjVFMkQ3OUUwOTUKKzoxMDYxNjAwMDRGMkMwODc5Q0FEN0Q0NUU5RDMzQUNGRTkxRjQ2N0M4MzIKKzoxMDYxNzAwMDMzQ0IzRTg3Mjk5MjFDREU3QzVDMjBGOTkwMzNBOTNGMEIKKzoxMDYxODAwMDhENzk5QUYwQjIwNDVDRkY3M0ZDQUY5NzkwRkYzNTNBQkIKKzoxMDYxOTAwMEExNUY0NzdEMDE3RTEzRDIxRTczQzlDRjE2OUIyRTg3NDgKKzoxMDYxQTAwMDFBRkYzOTNGRDc2QkU1QkMxQThBNkZCRjc3NDJEMDcxQUYKKzoxMDYxQjAwMEJFNDI1RUZEMzQ5Q0FGQUM5ODREMzg2RTRCOTE5OEM2OTQKKzoxMDYxQzAwMEI4Rjc5REM1REI1NTVDRUY0RDI1MUY0RTBGRjRDNTc4MjQKKzoxMDYxRDAwMEJDNUZCN0I0NTlDOEZFNDNCNTRCOUJGQzFDNDFFNkZCMDIKKzoxMDYxRTAwMEI1N0UxRTZGNjlCNTk2NkIyNUI4OEMwN0I0NEE5QzdGNDcKKzoxMDYxRjAwMEEwMTBCMjlFMzM2NUY0QkZENjhGN0VGQjk4MDUzQ0JFREYKKzoxMDYyMDAwMDlFMjBCREJBNDQ1RDRENzlCOEYyRjhFMUUzQjU5OTc4QzYKKzoxMDYyMTAwMDkzRUQzODYwNjZCRDI3NkQ3QTJDQTlEODQ1RkRCRTc3MTEKKzoxMDYyMjAwMEUxRjBGRDNBNzg3OURGMTBBMUQ3RDYyN0IwQkUwQTZDMkQKKzoxMDYyMzAwMDNFMENGRjVCNEE3OTFFNkU0QkQ5MzM4NDY3QzlBQzI0OTAKKzoxMDYyNDAwMDdERDZBN0E1NENBQ0I3QTU2QzM1RDE2NTJCQUI5M0NGNEMKKzoxMDYyNTAwMDg2Q0VBREVFQTI3MzlBNUJGRUMwRTMxMzRGQjYxRjY4MDUKKzoxMDYyNjAwMDQ2RkQ2MTRCQ0ZDRDgwNzk5NUMxNzgxQTUwN0U2Qzk5RUYKKzoxMDYyNzAwMDdFOTM4QTc4RDhCMjEzQTAxN0U5NThFRTIyQTc1Q0M4OUIKKzoxMDYyODAwMEY2ODc4NzM0NDgzMzRCMEE0MjY1MjZBMDVDQzhEM0Y4QUEKKzoxMDYyOTAwMDk5Q0E3REYxMkFDMDc1REI1MjBFMDZCMjY2N0UzQUQ1RTgKKzoxMDYyQTAwMDg4QTE5RjJENzExRUZGMEU5NjlBMzU0NTA4RjczODkxRUIKKzoxMDYyQjAwMEM0ODAwRUM5MEUyQ0I3RDRDQTM0OEYzNjhERTMwM0VEREIKKzoxMDYyQzAwMEFFNzM0RTdFMTdFNkMxOTQ3MEJCQUIwNEZERkJBQzdGOTIKKzoxMDYyRDAwMEU1OEI3Q0RFRkE4RTEyRjIxMzZEQzk3REQ5NDQ3REQ3MzEKKzoxMDYyRTAwMEZBMDQxODUzODFFQkI1QTQyN0M4OEM4RUIwRkY3QTJEMjEKKzoxMDYyRjAwMEVCQkE2RjE1OTNERkYyQkJFMkY3QjJBNjBCNDhBNzk5OTIKKzoxMDYzMDAwMEY4NzlDRjA3NTdFMkJDNUI2NjhBQjAyQjhCQkVCMUQ3NUEKKzoxMDYzMTAwMENGRTM3NTY5NjNGOTU1QzU1OUM2NzlDRUFGN0JGMjA0RjEKKzoxMDYzMjAwMEY0RjcxNTgyN0JBOEZBODNGNTY0RjJFQkEzRTFCMTg0NUMKKzoxMDYzMzAwMENEQTNBMDg2RkI0QjIxRTMxQzZCMEM5MjY0REY4RTA1ODIKKzoxMDYzNDAwMEFCMTFGOUQxMzlCRjNBQTEzQUYxQ0IyNDdCNEE5MTE1NkYKKzoxMDYzNTAwMDk0NEYzN0Q0Nzk1NjI3Q0Y3Mzc1ODUyRDkwNDFCRkY2NkEKKzoxMDYzNjAwMEQ3NkNCRTM3MUZGNDAxRTJFREYyQjM4RkJDODBGOTUyNTcKKzoxMDYzNzAwMEJFMEFCRjQ2Rjk1NUQwRjkwMkU2NkZERUM4RDQzMTJDMEIKKzoxMDYzODAwMERGN0M3Q0JBODJGOTNGMkY4Rjk3MzAzNzA2RjkyNzhBNTYKKzoxMDYzOTAwMDc0RjgxNjg4OTQ3RkY2MTYxQzhEQ0U3NkQxRjkyOTdCNzkKKzoxMDYzQTAwMERGNDFDOThBNzJBNDM5OTdDRjRCMEVCN0Y1NEE1MTVDQzkKKzoxMDYzQjAwMDc3RDlFQTczRjJGNzQ4NjFFMjc5RUQxMDY2RUY1NUNBRDIKKzoxMDYzQzAwMDNFNkEyNEY5RDdDMUYzODU5Q0ZDQzhDRjc2N0FGMzg3NUYKKzoxMDYzRDAwMDNFQjdDMzVCQkUwOTk2OEY0MUJFQjk4OTI5NzQ2OUQ2QTEKKzoxMDYzRTAwMEVGQ0RFRUJDMkYzNkZFMzEzRkQ3MEYzRTA3QTkzNkRDOEUKKzoxMDYzRjAwMDdGREFFREZDOTg3NURGOUZBRTIwNURERjNDNUIyQkMyNDIKKzoxMDY0MDAwMDczMThDRTNDN0VFRkU3NzZFODQ5QzZBN0JBOEJGRkQ3NzQKKzoxMDY0MTAwMEM0RDI5NDlGOUMzOUJGQjdGNjJDRUE0RUIyRjI2QkJBNDUKKzoxMDY0MjAwMDlDRTI3NkI2Nzc5RUVEQkVERUE1OThFRjY1NkRGM0Q5NUEKKzoxMDY0MzAwMDdBODMzN0NGNzFDREVFNEExM0YzQzUxOEY2RjQ3QzZGMkIKKzoxMDY0NDAwMDdCODJGRjFGM0FCQ0YzMUQwOTFGOTlGMzc3RjRDMUExQUEKKzoxMDY0NTAwMEU2QTNFQzE2QjJFNkZCODU1NDZGQkU1NEIzQ0FFMzhERDcKKzoxMDY0NjAwMDY2QjMwQzgxODVFNzlGOEZCNkFBNTI3NEJFRDk2QUYyRDMKKzoxMDY0NzAwMDZCQ0QzMThBNEY1MkZDQUY5RTExMEVDNkY3Q0E1NTlEQTcKKzoxMDY0ODAwMEZBNzkyRjMwMjkwRDc0MEUyMTM1MEZGNUEzM0ZCN0RGQjAKKzoxMDY0OTAwMEY5MkFFN0MzQkY3NEJGMEI4NzgwNzc5RERBQTcyMDdGRjcKKzoxMDY0QTAwMEFFOTczQjZCODRFMkMxRjMwMTAxOUY2NTRFNjBGOEY2NDUKKzoxMDY0QjAwMEVGNURENjNEMDEzQ0Y1M0E0NjU5RUYyMDFFODExRTQ1NjEKKzoxMDY0QzAwMEJEMUE3MTk4RkU0RURCRkJENkJGM0RGMTJGMEFFRURGMDEKKzoxMDY0RDAwMDZGM0Q3RTYyMjlDQUI5NUJGRTU1MDI5NUQ1M0JGRDQ0RUUKKzoxMDY0RTAwMDA0QkE2OURGNDkyQjI4OTdEN0VDOTE2OEZENDFFRTlFRUQKKzoxMDY0RjAwMDdCQjUyN0RGQkU5OUU2N0ZDQjUzMTFEQTFGRDYzQ0UzOEQKKzoxMDY1MDAwMDRGRDdCMkY2NkJCRUY3REEwQzYwN0M3QkJBQTlGRjg1NzkKKzoxMDY1MTAwMDA5ODhCRkM3MDU5RUM3NjBGNUNEQjg5QUJENUYyM0MzODQKKzoxMDY1MjAwMEY1RDlGMjEwNkU1MDM5NUY5REZBNDE2ODI1RUVFRkMyNDEKKzoxMDY1MzAwMEVFOUVFQkE4REZBRTZCN0Q3RTk3RkM1REE5NzI3QjlBMjkKKzoxMDY1NDAwMEQ1MzNGMUJCRjU0RDIxM0Q1NUUwRjA2NUNCQ0IzQkY1QTcKKzoxMDY1NTAwMDRERUU0NzU5QjNENzk3QzYzQ0M1MzVCQjc3MkE0OTU2NDgKKzoxMDY1NjAwMDZGRkRFRUI3ODlCRTE3M0RGNTY0MTRGMUIwN0VBRkY3NEQKKzoxMDY1NzAwMDNDQzIyRDRGRkRBMUVEOTI3MjNBRUZENDVGOEJGMjRGRUEKKzoxMDY1ODAwMDNBNEJFNTMzQTZEQUNGRjNFMEI5M0ZFNjU2RTI1ODU2ODgKKzoxMDY1OTAwMEVGM0I2RjVFRjE2QkY2RkQ2NDVDODIwMDEzMjkyNzdCOTUKKzoxMDY1QTAwMEZGNTNGOTU3MkMyN0MzMjkyNkNBNThGRkJFNTdERDdDNTUKKzoxMDY1QjAwMEI4N0VGNzZCNzRFRTQ4MTM5OTAyN0IyOTlFODdDOEY4NjIKKzoxMDY1QzAwMDlFNTE5RkU5QjkwQUNBQzNGNTVEOUJERTQ2NzlCOTdFNDMKKzoxMDY1RDAwMENGNUJCRjQyQkE1QjBGRjJBQjZFN0UzRTg5RkYxODc3OEUKKzoxMDY1RTAwMDdFM0M2QjkzRUFGNUQzOUQ4MTQzNzNDOTAxQjAzQjNGNzkKKzoxMDY1RjAwMEFCQkRFOEM0QjMxQ0ZFQkVFNUM5MzMwRkEzMUU3MUVBRjAKKzoxMDY2MDAwMDk5RkY3QTE4RUY2NzU4RkJDN0ZGNzkxOEYzNUFFMTQ3RUIKKzoxMDY2MTAwMDAxMERFNUQ2RkFDNzdGMUUwNTE3RkUxRkI1RTVDM0U5RDQKKzoxMDY2MjAwMDZGN0VFM0VCMEYzMDNDOUNGRUE1OUZCMDc2RkFCOTM3NDYKKzoxMDY2MzAwMDI3RTEzRDFEQTc5RkZFREYzMUE4N0Y2QzdDNkVGMTU4REUKKzoxMDY2NDAwMEE0QjM4RERGNUQzNDc2Qjg3M0EwNDhCNzY5QkY3QjdEOTYKKzoxMDY2NTAwMEQzRkM3RTgzQkQwMjZFODIwMENGREFDRjhDNzU4MTQzN0UKKzoxMDY2NjAwMEZEMEFFQUJERUYwQUQwQkYzOTk3QkRFRkZBODM4MkZBN0YKKzoxMDY2NzAwMENCMEIyNkY0MjM5RUY2RUY3OUVEODVCQjU4RjkyREI2QUEKKzoxMDY2ODAwMDRFRkUyQ0VCQzRFNjNGNDFBNEZEOERCMTBGN0JERUJBN0MKKzoxMDY2OTAwMEU3RUFBQjJFMkJDN0E3Q0ZDMEVFRDc0MzNGRUQxQkU3RjIKKzoxMDY2QTAwMEFERUYzMUI2QkVFNTgzRUI5QkY5RkQwQzlDNTUxMEZGQjkKKzoxMDY2QjAwMEVCOUY2MEVCMzkwM0Q3OTVBREU3OENGM0Q3RjMyREZDNTcKKzoxMDY2QzAwMEM3RkNGM0Q3NzNCRkVBRjVDNzlEODFCNThGM0M4MDFGMjgKKzoxMDY2RDAwMEY3RTQ2N0I1NkY5REY1NUNGN0RENEYwRUFCOTczQkYyQzYKKzoxMDY2RTAwMDYxMjQzQ0QzRjk1RTA2RDc1NzU0RjM2NzJBRjJFRDMzQTEKKzoxMDY2RjAwMERGRkFGQTAzMzFCRUNFQjUwQzMxQTc5RjNDMzMwOTBGNDgKKzoxMDY3MDAwMDZCRkNENkQ3N0YxREUyQTFGRjM5QkY4NjdBRDQ5QUU3MEEKKzoxMDY3MTAwMDdFNDE3Qzc3RkFCQjJGRDFCOTFFRjYxNzE1RDg3RTc3NEMKKzoxMDY3MjAwMDFBMDZGRThFMDIyQkRGMkFGMEMyM0FCREZGOEE1RkIxNDUKKzoxMDY3MzAwMDdFRDdCMTJFMkM4M0Q2RUY4QTVGOTVFM0ZBQTlGREI0RkMKKzoxMDY3NDAwMDFFRTk2NTM1M0FDQURGNzQwMUNERkJENjM0RTc4RjVCQUQKKzoxMDY3NTAwMEQzM0QyQkQwOUY5RDg5Rjc0OEMwQzkyNzFDNUM1N0Y0QjcKKzoxMDY3NjAwMDk3REVCQUU3QzQxNTQ4N0Y0M0FEQTczMzdGMERFNzNGRjcKKzoxMDY3NzAwMDhGN0Q3RkQ0Q0JCRjQzRjJBQkJEQkVBNzc3QkVBN0EwQjIKKzoxMDY3ODAwMDdFRDVGREFGOEEyNjMyM0JGRkI0QUY1RjE5OEZGQkNEQkMKKzoxMDY3OTAwMEQzOTI4NkU3OEQzM0Q3N0QxMEZGNEQ1OUNGMUQ2NzNFQ0QKKzoxMDY3QTAwMDMzRTlDMzFGQzgxRUJGNzZGMDM0MTJCRjhGM0NCRjBGNDIKKzoxMDY3QjAwMDg3QkYzM0Y2M0U5Qzg5Qzc1MzY3QjNFRjA3NTMwMkRDQUMKKzoxMDY3QzAwMDlFQkIxNTNBNkI1MEM1Q0NEQ0NGN0M5MEIyMjYxNDBEMjUKKzoxMDY3RDAwMEMyREJENjI1OTE5QzNGQjU5QkZCNjkzMkU1QzVBRDQzMzUKKzoxMDY3RTAwMEQ4NjczMzlENzFGNkY2Q0M0MEI5NzY2QURGMEY2Q0JBODQKKzoxMDY3RjAwMEU0NzQ3RkVCMTMyNzE0Q0JERTFGRDIyRUZDQUUxRkMyMzYKKzoxMDY4MDAwMERGN0RBOUREREZGQTY3QjNGN0I3RkU4OUI3QjNGNjc3QTcKKzoxMDY4MTAwMDUyMzZBRjQ1Rjg0RkY2RkEyODJGRTk2NDk3OTRENUNFNTMKKzoxMDY4MjAwMDlEMUFGMDc5RjRBRUI2QzhEQzU3NzI1ODNCMjkxQUE0MDkKKzoxMDY4MzAwMEJDQUJFNjI2RjMxN0U4MjdCNThFRkE2QzNGODBGMTVCMTgKKzoxMDY4NDAwMENDQjc2QThFMDRFOTlDN0I3M0Y0MjZCQTJGQzlFOUFGRjIKKzoxMDY4NTAwMDI1MDM0RjcyM0M0MUY2OTMxQzRCOTRGMzE4NThEQTYzQUUKKzoxMDY4NjAwMEM3RjgxODQxQjhFMTA2RDkyQTQ0QkRGRjcwRDE5QjMyNjAKKzoxMDY4NzAwMEY2N0IwNEY1NDg5NzVEN0Y0NDg2RDZGQzcyM0MxNzIxNzEKKzoxMDY4ODAwMDE4OEQ5MEM1QkY5MUQxN0Y2MjgxMDRCQURCNEZEODNEOEUKKzoxMDY4OTAwMDRFRkMzRDZCRUYzRjI2QTUxMUI1RjU5MEVBQTY3MzAxQkUKKzoxMDY4QTAwMDg1RDBGNTU4OTZGRTFFNkFEMEM5N0UyRTRBNUM0RkZFRjIKKzoxMDY4QjAwMDFGN0YyQTY1QTJCRTU2Qjg1MTJCMTZGNUExQzc5RDk4MTkKKzoxMDY4QzAwMEYyQzZBRkM3MzNDQUZGM0Q4RTczRDA0N0ZBMjBFQzdFQzUKKzoxMDY4RDAwMEZDRjFDN0M3RjAyRDA1RjVGMjE3RjBDOUU0REZFNTc1NDcKKzoxMDY4RTAwMDdBMjE5NjFGQjJFN0NENzg4MENFMzE0RUI0MTIzMkNBRUIKKzoxMDY4RjAwMDM5MjFCNjRDNDZGRDYyNzEyQTIxQUY3NkFERTdFMjk4QTgKKzoxMDY5MDAwMDMwMUVGN0QzRjQxMEY3NDA3RDNGQzBGN0NGQzZDNjZCRkIKKzoxMDY5MTAwMDI4OEZGREMxMkY4QTQ0RDcwRjA2M0U1RTg4N0M3NjIwRTMKKzoxMDY5MjAwMDc3NUUxOEZENkIzREVCRTYxRTlBQzZFMDlDMTA5NjAwNjQKKzoxMDY5MzAwMDREQ0VGREUxRTFDRjZEM0U2Q0ZCMTc3NkQ5RjcwRjNERjMKKzoxMDY5NDAwMDZBRTc5NzdGRERDNkRCRUU4NjUyN0EzRURFNjBEMEY3REYKKzoxMDY5NTAwMDI3MUEyQUE4RENENTUwNDNDRjY3MUExMkY0M0U3QTU3N0IKKzoxMDY5NjAwMDMwODlGNEI5QTc2MTI1QkQ5RjAwNkYwQkI4RkVERjZCQkUKKzoxMDY5NzAwMDQ4NTJGOUQxNDAyRUMxM0ZGOTZFMTA5M0VDRkQ2MkM0MkMKKzoxMDY5ODAwMDQ3Nzg3MERFMEUzQzY5REJFRUZFN0VFMEM3MkRDODE3NEYKKzoxMDY5OTAwMDAzNzhDQ0MwRjdFNUQwMkJBOEU4QkY4QTA5M0FBRTdCRDQKKzoxMDY5QTAwMDdENDBFNzc5QUUxOUY4OURFNEVGMTczMDJFNTc3RjM3MTkKKzoxMDY5QjAwMENGODc3ODU4RjA5RTc3QjhERjk2RkZERkIxRjlGNEREMjYKKzoxMDY5QzAwMDY4RjJDOTAwN0JCRTUzQjNBMjk0RjQyMUQwQ0E5MDZFODIKKzoxMDY5RDAwMDFFMTYxMjQ3OEMyMkMyQjNFN0RDQzlGQUJDRTQ3NzAyNjgKKzoxMDY5RTAwMDJFRkZGMEE0MEU2RUQ3RUYwOEQ4RjI2RDIzODg0ODZGMDMKKzoxMDY5RjAwMDEzNTNBMDIzQkQzOUYzREU1N0E5MTdBMjVDREMyNzA4ODcKKzoxMDZBMDAwMEI0REU0ODZGQTUyRTdBMUJBMERGODA5RDk3MUNDRkJFRjkKKzoxMDZBMTAwMDhGMEZEMjJGRTdGRkY4MjVBNUY3NTQyMzVFMzY4OEU0QzEKKzoxMDZBMjAwMDA3NjlDNjRGQUU3NjFGRDg3NEM0RUMxNkQxNDI3QUFFNTEKKzoxMDZBMzAwMDEzQzk5RjNCRjlGODA5NjExMjgzNEZEN0JFMTVDMDdCN0MKKzoxMDZBNDAwMEJCRTI5M0MwRjYzNzc1MDU5MEJFMUVBQ0UzRkVDNUFGNDIKKzoxMDZBNTAwMDFERTdFNzk4Q0U2QzJDNUUzNjhERDU1RkNBRjA4M0MxRkEKKzoxMDZBNjAwMEE4QkMyNTI1MUVCRkE1NzM3RUUxNkI2QTIyNDcxQkM2MDUKKzoxMDZBNzAwMEJGOTU5OUY3NzZGRkU0MkZCRDlGQzNDNjk5NzAzQ0E0REMKKzoxMDZBODAwMEUzNzk5ODdCMjZGRkE4NDc2MUU1RjE3RDAyRjk5M0M2N0IKKzoxMDZBOTAwMDg3NTNEMzcwM0QyQkZGREYzN0M3RjVCOUQ2RTE4MTc1M0EKKzoxMDZBQTAwMEE5QzlBODM3QjY0REZFQjY4MDdDMzBGRUVDOEYwNURDNTgKKzoxMDZBQjAwMDQ3NEFCNEU0OUJCODNFMTM2NEZCOUNCMDlDOUE4Nzc2MkIKKzoxMDZBQzAwMEMxRjU3OTg5REZFMUZCNDQ2MUZBNTM0ODRGNjc2QTM2QzMKKzoxMDZBRDAwMEZFMUJGNkVGQzQyMUVCRUJGNURDNjkyRUY5OTA3OTlFRjUKKzoxMDZBRTAwMEUyQTFENEYwRkU0QzY3RkUwRkUxRkM4N0E5RTdDQ0RGMDIKKzoxMDZBRjAwMDU5QkYzMzM1QjFCNTI4MTczM0YxOTlEOTZGREU5MjE1RTcKKzoxMDZCMDAwMEMzOEVGRjkwN0Q4RjE4OUJCRjNGRTg5MjZCODVBOTNFOTcKKzoxMDZCMTAwMDE5REIzOUVEODc4QUJCNjZDRTc3QzA0RjM0Q0EzODZEMzIKKzoxMDZCMjAwMDk3MEZGMjkxMkU5RUZFQkY0OURGMzkwMjQ4M0EwOTA5QkMKKzoxMDZCMzAwMEZENTNGQjAyQzk3MTA4Q0Y1QzQ4NTE5OTQ5NDdDQTY3QTgKKzoxMDZCNDAwMDM3NzIzOUZGM0UzMEU2RUJFMzg4RUZFNDc0MTFFNTdEMDAKKzoxMDZCNTAwMDhDNzJCQzU2NDgyNDJBNzE5RjMzNDQyM0RCM0UzMDNENUYKKzoxMDZCNjAwMEM4RTk3RTAxQTRDODNGMkE4NkVFMUUzRUNFNUZFODhEQUUKKzoxMDZCNzAwMEYzNkYwNTlBMDQ1OEREQUExREZGMDA1OTQzN0ZEODQxRTEKKzoxMDZCODAwMDk4ODU3RUM4RkMyMEU3Rjc0QTk5REI5N0IzMEZFQTNCNkMKKzoxMDZCOTAwMDI1RUVCNzkyOTY0NTVDRjhCM0ZENzYzRURFMzU4M0ZCNzUKKzoxMDZCQTAwMDZFRDA3NDNDRjczNUIzNDc3MEYxRUI3QkExRTRDMjIwQTMKKzoxMDZCQjAwMEFCQUZDNEI5M0ZEMjE3NEJEMjc5Q0JDNTUyNTgyNDdGNjMKKzoxMDZCQzAwMDZFMjc5N0ZGRjU5MDUwMkZFNDcxMTlDMDc5RUIxMDE3REQKKzoxMDZCRDAwMDcxQkY3RjY4MjMzRkRGQUU2QjIxODJGQkExOTg0RUU1M0EKKzoxMDZCRTAwMDdBNUI0RkY5QjE0RDQ3M0ZCMEU1RkVGNzZEN0FGOTJFNkMKKzoxMDZCRjAwMENBN0RBNDlCM0VGMzQwMEU4M0VCM0JCNkZDN0ZEQTk2NDYKKzoxMDZDMDAwMEZGNEZEOUYyN0ZDRUIxM0VGODY2MzlDOTYzMDNGMzlFRDgKKzoxMDZDMTAwMEJGQkMzRERFODREMzdDQjJDMUE0N0FCQjFBRUFFOEI5MUEKKzoxMDZDMjAwMDNGNzdBQ0I4OTdENTdCNzRBM0I4MEJGOUY5NTE2REVDRUQKKzoxMDZDMzAwMDk1NzhERjU1REExNDBEODEzNTdFQzhEQUJFMjhDQUUwQjIKKzoxMDZDNDAwMERGQTkwQTE0M0Y3QkI4MjE0NUVENzZBQTdBOTM4QUYxMzEKKzoxMDZDNTAwMDE0NjYyRDVCNDgwNkY1QkQxNEY2QThGQzZEQkY1NkMzM0YKKzoxMDZDNjAwMEVBN0RBRDMzRUY0QThDQzNERDVCMjM1MzNCODc4RkY0NjIKKzoxMDZDNzAwMDM5MUJCMDM5NDRGM0ZDNDE2NEFCQkM4MjZFNzUwQURBNEYKKzoxMDZDODAwMEU5MUI0NUVBRTcyQjgxQ0ZBODhCRDg3M0UyQzRBM0VBQkUKKzoxMDZDOTAwMEM3NzU1QzhDMTM2NjhBN0Q1RkM0OTA4Q0YzQThFOEVCQTMKKzoxMDZDQTAwMEIzQjA1Q0YyN0E5OEYyQjVFN0JFRDIwNzRGQjM3MjUxMzcKKzoxMDZDQjAwMDVEODRDQTEzMkQyRjVGNENERkQzNjc3NTMyMzgyNjlFNTMKKzoxMDZDQzAwMEUyREZBQkYzN0U2Nzc1QjFGQTM5MUJBMkQ0NUZENUVCNzcKKzoxMDZDRDAwMDdEMDJEMkIzQUZEQzdCRkU2QTg3RUY5N0ZCMjM2Q0ZDQUYKKzoxMDZDRTAwMEQ4QTE4NDgwNzhEQjI3Njg4QjMwMjVDNEZBMTQzRjdGRDUKKzoxMDZDRjAwMDMzRjYyMDU0RTFGQjc4NzQwOUFEQzNGNjYwMTFEMUNGQUYKKzoxMDZEMDAwMEQ3NUE4RUM2NkY0NjNDNkQ4Q0I1QTA5OUIzN0ZFMzA2MEIKKzoxMDZEMTAwMDNBOUZFMERGQjg5MUVCNDEyOUVFRkY5RTc4QzcwMUUxOTEKKzoxMDZEMjAwMDczMkVGOTUwRDgyMjY3RjVEQjZEMEZGQTc5OUM2NEUzNzYKKzoxMDZEMzAwMDhBQzQzNDBFREU4MTMwRUE3QjI1REM1RjU5RDQ1QUVERkIKKzoxMDZENDAwMEM5NkI3MkUyMjMxRjA4QzlFRDQxQjI5Qjc4OUM0NEQ2RkYKKzoxMDZENTAwMDUyRjRGRTMyMDk3NTQ1RjZGQTRFOTFFQjQ5ODlERTgwMTAKKzoxMDZENjAwMERCMEZBM0RGQzFFRjY3Q0I4NDYzNTc1MDI2Mzg1QUFDRTMKKzoxMDZENzAwMEVBM0E5NDE3REJFNjI4NzIwMEUxOTg2NkRGQ0Y2MkM3MzMKKzoxMDZEODAwMDIxMDdGNjMxMjFCOUNCMkRENzY0OERDMzM1OTFBMTMyQkUKKzoxMDZEOTAwMDg0NzA3N0Y3N0VBQThCRjVGMzdFQ0FEOUM3Q0MyMEU5MzkKKzoxMDZEQTAwMDQ5Rjc4OEM0MUY1QkNCRjkzOUMwRkRDNjNCREQ3OENGRkUKKzoxMDZEQjAwMDg1QzM0RkFEODY0OEZDQkI1RDE2RDIwMkVCNjc3Qjc5N0QKKzoxMDZEQzAwMDcxRUU4NTQ4M0YzMURDQkQ2OUJFMkFFMkI5NDRGNkYxNzcKKzoxMDZERDAwMDFDMEUzMEY3QTE1RkRDOEY3RTcxQjZERTI1Qzc0MzI3MUUKKzoxMDZERTAwMDQ0RjJGRjc5RjNCRjhCMkNFRkZBOEJGNURFNzM3NzEzNDgKKzoxMDZERjAwMDk5RDJFM0NFNTcwNjQ2MzQwMzc0NDZGQjZCRjVCRUZGQ0IKKzoxMDZFMDAwMDQwN0U1ODE5MjIzQTAzQ0I4QzU2OEVDMUY0NDVGQjRGNzUKKzoxMDZFMTAwMEFBQTVGM0NGMjUxOUU3MEMxRUIwRURGNzg3RUQ3Mzg0MTMKKzoxMDZFMjAwMDcwRjYzNjQwQjlGNTgwN0RGRUZBODFCNTYyNTA2Nzc4MUMKKzoxMDZFMzAwMDc5REUzQTRBRkJFNkM0RkFFRTRBMEFDQzY4N0U0RjdFMTcKKzoxMDZFNDAwMEI1RkY2RUFEMDlGN0Q3QTI5NDM3NEZBODMyMjMyRkE4MEMKKzoxMDZFNTAwMEU0Q0ZDQ0IzM0UxRUY0REFBOUZCNEUwNjBEQkMwRjJGRDcKKzoxMDZFNjAwMDdENEMzMjUwOUZGREYyNURCMzQ5RkU1OTZCQjhERTkyMDYKKzoxMDZFNzAwMEFFQ0I3QjAwQ0ZCQkU0MEI2MEUwN0JBNzVGQzc3RTdEMjIKKzoxMDZFODAwMDI3OTg0NzdDOTM5RUNGQkVFNzMwQjkxMkU5NUE1Mjg3QzQKKzoxMDZFOTAwMEVCMDUzOTVBNTMwQ0NGNDNERjA5REZDNkZFRUJGOEZBOTYKKzoxMDZFQTAwMDU3MTYwMkREQUY1MzE4MDMzQUU3Q0M5RTlCMkY0MEZFRTYKKzoxMDZFQjAwMERGMjg2MjRDMUNDRUExOUM0NzM5QUVGNkJFODhFRjczMkEKKzoxMDZFQzAwMEFGMTRFOUZFOUNBMjE2RUI0MjlDRTdCRTRCQzY4RjQ3NkYKKzoxMDZFRDAwMEZBRDgxQUU2RTc1RTlBODUxNDY4MDg2RjAxRTc4NzlEN0QKKzoxMDZFRTAwMDkxNkVDQTA3REQ1NjIzNDIxMzUyMTRDM0E1ODFGREFDMkYKKzoxMDZFRjAwMDBFRUVBMjNDMTY4NDc3MEVEMTFERTk1RDE4QTM0MDdFRUMKKzoxMDZGMDAwMEI0NkUwOEYyN0RFN0FDNzUyMUZBOTVBM0ExQkVBRUZEODMKKzoxMDZGMTAwMEFDOUY3MEJCNjJFQzYyRkRFQ0FDRjRERTUzMzczNUM0NjEKKzoxMDZGMjAwMEY3QkI0MDQ4NzBFMkZCODExMDdCOUE1QjgxRjIxNkQ5NzcKKzoxMDZGMzAwMDVDODhCRjE5NUY1OTQwRkI4MjQ2NzY5NTEzREY4RkVFNjAKKzoxMDZGNDAwMDVCMjIxNjRERTdDRjYyMTdGRkVFQjJFNTZDREFDRTVCM0YKKzoxMDZGNTAwMDc4RDhERTNGMUM3REUzMDFEQjZFRDg2QUVGMUI0NUU2ODcKKzoxMDZGNjAwMDU1NEQwQUQyNkQxRENDNDQzQzk1QUNFRDEyNTY2N0IzMUQKKzoxMDZGNzAwMEVGM0JCQzcyMzU5MzVGMjY2N0YyNEJDQTdCNEU3NTQyN0UKKzoxMDZGODAwMDVEQjFFNzdCQzRCOEM4RjM5RDQyMzFCOEVFNkNGRjQ2RjMKKzoxMDZGOTAwMDNDQjcwN0NBMjRENEZCNjY0M0MyNzRDQjk1QTFGNkZGNjUKKzoxMDZGQTAwMEZDQTAzOTIzRjQyMUY0OUY2ODI4OTE0MkZEMzM1M0ZGNUMKKzoxMDZGQjAwMEJFRDQ1RTk3RUIwMjg5RjlCODFFRDE0QjU2NTIxRUNGNTQKKzoxMDZGQzAwMEJBNDBFMjUyRUE1RjRFMEIyODRGMTc2MEJCNTg1Njc4MjIKKzoxMDZGRDAwMDI5Rjk2QjE0RjA1NjdGMTg3ODQxMzZFODNDRDc5RDkyMUEKKzoxMDZGRTAwMDczOUZBREY3M0MxNzY0REM1RjlCNzkzRkVEQzJGRkJCM0QKKzoxMDZGRjAwMDlCRUVBNzZEMTU5OEEyODdFNTFDRkI3RTVBM0ZCRjlGQUQKKzoxMDcwMDAwMEI2MzVDMkVEQUU1NjNCOEZFQTU2MUIwRkQ3ODdGODdEREIKKzoxMDcwMTAwMEFGNkI2RDNBNUQxOENBN0VGRjkxRTNGNzRBQTE2Q0MwNzEKKzoxMDcwMjAwMDdBNjNCM0RGM0I4NjFBMTVGNkI3NzA0MkY2RUZBOTEwMDQKKzoxMDcwMzAwMDhGM0IyRTlDM0NGQzM4MUI3MDFDRDZDRkRDQTBCOTJFOUQKKzoxMDcwNDAwMEU0RjJBRkNDMEU5OUVCRERFNURCNDM3NjdFOTE5QzIwM0MKKzoxMDcwNTAwMEJERDI5NEY5N0U1ODE0MzQzNzg2RTZCOEYwNkIzRkYzMEUKKzoxMDcwNjAwMDk2OTREMzc5QkUzM0Y2NzkzRUQ2NkU4NzQwNzg5NUI0NDAKKzoxMDcwNzAwMEQxRTBEREQxRkY1QjA1RkQxRTkyODMzRjY3N0E1Rjk2MEQKKzoxMDcwODAwMEY1NzgyRjE4QjVDNDlDQzE3ODk0QTMxRkVEMEU3MTdCQzEKKzoxMDcwOTAwMDkyRDFEQjI2M0U4RjM0RTU0MTg3NDFCRjA3RUY4MTk4Q0YKKzoxMDcwQTAwMDgwRjc3MEVCRTg1NzM4RkVGMEJGQTBCQ0JEQUNCNzA2NjgKKzoxMDcwQjAwMEY1QTc3NTNGOTRFODdFQkJGM0YwQjU5NkQxOUQyQjFGRTUKKzoxMDcwQzAwMEM1NzkzRkZFRkQwOTY0MDc0Rjk2OTJGNzg3NUNGNkYxOUMKKzoxMDcwRDAwMEY4QkE3RTA1RTkxREUxQUZFNkYwRjNGQzY5MjE3RDIxRjgKKzoxMDcwRTAwMEI3MDc4MEUyMzhBRDM3QzczREY5ODQ5OUY2NDgxRURFMTAKKzoxMDcwRjAwMDczNDA3MjQ1MjFCRDJFMTMyRUM3OUU3MENBOTlFNzExQTkKKzoxMDcxMDAwMDBFREI3NDg0N0ZGQTE4QkMyNzFDQjgzMjJCOUIxMkYyNUEKKzoxMDcxMTAwMEQ3MUM0OEQyNzMxRUU4RjQ2NDc2NEIxN0NFODNGMTlGRDgKKzoxMDcxMjAwMDhFNzAzNjg1MjY1RDhBRjNGODJCRTJFRDQ3QTEzOTdGMTQKKzoxMDcxMzAwMDdCNzg3M0U4QjgyODc5RjkwMDFENjdCQkZGRkFGRTUwMjkKKzoxMDcxNDAwMDk0RTQ2REZERjEwOEU5RkREMTdENUYyMEJBOTYxODVERUMKKzoxMDcxNTAwMDA3NjI4M0Y5MzJGNTYwRTdEMTg3QTEwQkY1REVBMjY0RkYKKzoxMDcxNjAwMDAzOUQwQjNEQzNFODE4RkI5NTM0N0U4RTU1MDYyRDgxOUIKKzoxMDcxNzAwMDcxMUIyOUM2RjlDMzI3OTc2QUEyODY3MTU5Q0I4Rjc5RUIKKzoxMDcxODAwMDA3NTYzMTE4Mjg2QkQxMUZFOTg2QjczQzlDN0NEMzhERkMKKzoxMDcxOTAwMEM3M0I4RkRGNDNGMkY2QkE0MEYyMjRBRUU3OUQyNTk2NTcKKzoxMDcxQTAwMDFGMzUzQjk3MUMzRUU1OTZDMzAyODQ3NUU0QkY4NTY3OTcKKzoxMDcxQjAwMEY5N0U1OTk5RDQ2NUE0ODc0NThDRDMxMUVGOEIyMTQ5NjkKKzoxMDcxQzAwMEU1OEY4MzQ1Q0YyNTkwQTZFN0RGRTE5NTQ2QTRDN0Q5OTMKKzoxMDcxRDAwMEU3MTZCQUFGMTVEREU3MTYwNkYyQjlDQjlEN0MwRTFFOTkKKzoxMDcxRTAwMEE3MkFCMEU5MTA2QzNCRjVGOTk1Q0IxQjE3QjNGMUQ5ODEKKzoxMDcxRjAwMEUyOUIxODhGRkFFQTRBOUVDRkUzOUYyN0QzRjlENTgyMDQKKzoxMDcyMDAwMEJFMUI2QTMxNEUwNDJCQjg1RUU2RTQ0MUU0RDU3QUY1NDQKKzoxMDcyMTAwMEI0RjNFRUI3M0FGRUJCRTNEODJFRjM5QzlDQTNBRjY1NjQKKzoxMDcyMjAwMEVFNUJDRTMzNTM1RkNCMEI2NzNGM0YzOUQ0QkU5MzE5MzAKKzoxMDcyMzAwMDU3QThDNzdGNzJGQkQ1QjZBQjEzMzlFRTdCRTMzMzlGRkMKKzoxMDcyNDAwMDg3MUJGQTVCMEVCOEYyQ0M4RkUwRkQ0NjU5RjcwMTFFQTIKKzoxMDcyNTAwMEVGOERFRUZCNURFRDhBNzJCQTVGQ0VDMDk0QzlERTg2MUIKKzoxMDcyNjAwMEVFODVBRjRGMURCNDgzMTMwQjcyOUY0NzdGNzRBMjNBMTQKKzoxMDcyNzAwMDc3OTZDNEYwQkUzNEZFNkVDQjgxN0M4MDY1NjZDRkMyNEIKKzoxMDcyODAwMEQ3NURGM0VDRDUxOEI0NTlGNDg0ODFGMTRDREYwN0VFRTcKKzoxMDcyOTAwMEZERjcyRDg1Q0I5NzU2N0JCQzg4MUQxRjZCMTcyRDNGQTcKKzoxMDcyQTAwMEYxQUJFRDdGRkI3RDIxQjdEMzFERkIzRURCN0M1QjA4QTMKKzoxMDcyQjAwMDVGN0Q2MUE0ODdBMUU2RkIwRjYxQkU5RjhFNTk2OUQwRjcKKzoxMDcyQzAwMDdERjlDREY2N0RGOUNEMTM5REZDMkQ0MzQzN0RGMkE2Q0UKKzoxMDcyRDAwMDcwMkVCRkFGMjA1QzQyRjFENUU2OUVGOUU0NEYyRTM4MDgKKzoxMDcyRTAwMEU0MjM3RkZBOTgxNTQ5QzE3MkVEOEJGNzM2NzBGRkVCRjYKKzoxMDcyRjAwMDU3OTg3RTg3RjkyMDVCOTg1RTg3RTU3RDk1NzM1NUI0MzYKKzoxMDczMDAwMDE3NkU4RkNDQTI3OEVERTYwNkMzOTMyRkUyM0NGMTNFRDgKKzoxMDczMTAwMEJBQTRDQkJGRDc5Q0E4RDIzMERFREI1MjNCNEI0NUJCRDcKKzoxMDczMjAwMDQzRkE0NDM5OTVFNTBCNjc3NTU2MzE3RUZFQ0NENjE5ODQKKzoxMDczMzAwMDU3MTQ2MDVDQTI4Q0RGNDc3NjNEMkIzNzk2MzAzQjNBODIKKzoxMDczNDAwMENDRjdEOUMzQzZFQjYxQzQ1MzU1NTg3N0U4ODdENkQxN0IKKzoxMDczNTAwMEI3MjI2OUZBNTAyRUM0QjUyQUNDOTU3MURFODM0RDVGRjEKKzoxMDczNjAwMEVDM0RFOUQ3NkYyOUM5OUJDMzZDRkU4N0VEN0JCMURBOTEKKzoxMDczNzAwMDk1NTRFOTg2MzIzQzE3Q0YwNDBFRkE4OTU1RUUyNzQ0MUUKKzoxMDczODAwMDNBNjg5OTNEMDhGNzA2MUJCRjk3RDhFMzMyODEyNDNFM0YKKzoxMDczOTAwMEVENUEzRjI1Q0VEN0FGNUQ4NEJBNkNFQjczNzc5OEVCOEYKKzoxMDczQTAwMDM3MkQ5QUE5MEQ0QjQ3OUFGQzgxRTdGRUQwRjIxOENGRjIKKzoxMDczQjAwMENGOEYzMTNBNzJGMUYzRjlGNENFRjlBOTNDOUM2ODA5MDgKKzoxMDczQzAwMDE3QTA1Qzg0RDIxNENEM0Y0Q0YyODdEQTQ5ODNGNzU4N0EKKzoxMDczRDAwMEM2QzM2NjA3RDYzQjlBNkJFQjJGODUzQzBGOUFCRERGODEKKzoxMDczRTAwMDkyNDNGMzRCOTE3Qzc3RjRDMTc2OTlFQjczQTNENTA3NjUKKzoxMDczRjAwMEYzOTY2QzI0N0RGMDFEQzY1QTY0OUY3RDYyMjNDOUVEMEYKKzoxMDc0MDAwMDhEM0U5NUVFRkZEQkI3NDBBNjc4NTY3NDBBNUNFRkI2NkEKKzoxMDc0MTAwMDVCQTQ4ODdERkY3Rjg0RkJFNUYxNzcxMkQyRDNCOERFRDEKKzoxMDc0MjAwMDgzRTczQ0EyMjFBMDczMkVGRDEzNzk3RTY5M0JFQ0FDNkYKKzoxMDc0MzAwMDk5NDJGMDRERDVEQ0ZCNTlFNTQ0RUU2N0Q4NTYxNUFDQzIKKzoxMDc0NDAwMDczRkIxQjE2RTZGMjc4RDk4QkI5OTVCRkMzRjk5Nzg1MDQKKzoxMDc0NTAwMEQzNTVDODlBMTc2QkQwODdGOTM0NTBDNUNGOEYwOTg1OUIKKzoxMDc0NjAwMEZDOUM4RDBGMEM5NUYzNkJCNTg2Rjc4NjBBOTBBNEYzMDAKKzoxMDc0NzAwMDY3NDNBRTFGNzhFRjE3N0Q1QzRFMzcwNTExNkYzMUVFMTUKKzoxMDc0ODAwMEQ3ODlFQzEwMjg2OTRGRUEzMkJCRjFFQzRFN0JFRUYyNjMKKzoxMDc0OTAwMDFGMjIzRDMyQjk2NzIwN0ZGN0NDMEQ5MkJERjc2RThGNkEKKzoxMDc0QTAwMDQyRjZFN0JCMzdDM0FGRDE5RkY0QUUyRjA3MkNCNjU0REIKKzoxMDc0QjAwMDNGMTJDNTVGM0ZDNUU2REJDRjk4NzUxN0U2N0Y2OUZDRDUKKzoxMDc0QzAwMEZCQ0NBRDAyRjk5QjdFRjQ0MTcwMDJEMkJCMTEwNTExRDkKKzoxMDc0RDAwMDdGQ0Y2MjI5RDMyNzc4OTIyMDg0MzAzRTFCNUQwNERENjQKKzoxMDc0RTAwMDk3NjNGQjlFMzBFMUNGMTdGRkM5QzJENzY3RDNGRTEzNjYKKzoxMDc0RjAwMDEyMkJGMEJDOTZGODIwQ0VGRjk5MzhFNDYxRkJEOUZGM0YKKzoxMDc1MDAwMDVCMjVBMUZGQ0FEMTg3QkVBQTI1OEYyMkRFRTY4MTU1NjEKKzoxMDc1MTAwMEQ3QzNEQTZGNTMzODdGNkRDQjUzRDIxOEE3OUM1NTIwNTEKKzoxMDc1MjAwMDkyMUUwMkJFNTA3QTJBRkJCRUY0RTBFQkQ1OThERkI5N0EKKzoxMDc1MzAwMEI0NjIyNkQ2QzRGMTY5QkQ0QkI0RTQ3MTlDNzdCNUI2OEMKKzoxMDc1NDAwMEFDM0E5N0Q1MkYzRkE2OTNGQ0JEMjI3RURCMDEyQ0NGMTIKKzoxMDc1NTAwMDNEQ0VDQjNFM0ZEN0UzNTE4RjcxOUYwRjU4RkFGRTI0QUIKKzoxMDc1NjAwMDlBRDc5QjYxQUVDRkI2QzRDRDVFNTMxODk2QUYzMkVFQkMKKzoxMDc1NzAwMEU1RjU5RTJGNzBFODgwNkRFQjNBRTZBNUQzQkY3NUEyQzYKKzoxMDc1ODAwMDhCQTQ0RjFDRjQzRjQxODU2MTlGM0Y3MUU4QzExNDNFQkQKKzoxMDc1OTAwMDBDM0RFQzA5RjM3REExMURGM0NENjI4M0Y5NjZFREI2RDgKKzoxMDc1QTAwMEZFMzZEQTdDQjM0QzdFQ0E1QjIyRDMzQUJDQzNGNDJERTAKKzoxMDc1QjAwMEJDQ0ZFMzdDM0VCOThERUVGRkNDRTQyNzA3Q0VDREU1MTIKKzoxMDc1QzAwMDc5MzE5NEMzMEVERjY4RjNFRTI2QjlFQ0JGNDFBMUZCMUQKKzoxMDc1RDAwMDRDMUQzRTcyRjhFN0QyOUMwMTNFQkEwRkU1QzU4QUIwNTkKKzoxMDc1RTAwMEJFOThBNzY4OThFMEU2OTNBQjQ3RTBBQkE1RDA3RjIwQjQKKzoxMDc1RjAwMEM2Q0E0QjY1QjA3Mjk4MDgzQTNDRkZCNzI1OTM1QzdDQ0QKKzoxMDc2MDAwMDkyODlDRkE1MEIwNDc4RDUyMzA3NzlEOTg1NkY2REUwRDIKKzoxMDc2MTAwMDFFRTAyQzc2RjI1MEVCNzI1NEU2RTcxRTFDM0VDNURGRUUKKzoxMDc2MjAwMDYzQzFGMzYzMURBMjAxQjgxRkI1RTdBRTM2MjI2Q0RENUUKKzoxMDc2MzAwMEU0REFEQ0I1QzgwRjVCODQ0NDBBRjkyMTMyRUY1NEU4ODAKKzoxMDc2NDAwMDI2ODZGNzc3QzczMDJEMTJGRDg3RkFFQUE3ODhERjVGMTUKKzoxMDc2NTAwMDA5OTE1REI2NkRFRTFBOEE0QkJEN0I3MzcyMzJFRTJGQzcKKzoxMDc2NjAwMDlCMThERTVGQTVGRDNDM0Q1NkE0NUNEQkJFQjEzQzZGQzQKKzoxMDc2NzAwMDQyOEZGMzY3MzJDRURGODNGRDNENkQ5NzREQkI1RTFGQkEKKzoxMDc2ODAwMEQ1NjNFQkVCOTE5QjNGOEQ3MjNFRjg2OTk0RUY1MzlCNzIKKzoxMDc2OTAwMDk0NEUxNUU5QTFCRjQ4RDVCMkU1MkJBNzIyQkNGRUU1NjMKKzoxMDc2QTAwMDdFMjhDN0ZCMThEOTY4OTQxRkQwQUE0QTM1M0JDOTU5MTAKKzoxMDc2QjAwMEMyRTVDNEU1NTM0QTc3QjlDRjU3MzlFREVFNkRFODIyRkMKKzoxMDc2QzAwMEJENjY1M0MzNUU3QUU2RDdBNjAxRjNFODgyQTU5NjhFMUYKKzoxMDc2RDAwMEZBODdGQUM3NDUwMkVFQzc3MDExOEZDQkUzRkI0Njk3RDYKKzoxMDc2RTAwMDVFRjc2OTVCQkVBQjc4NUYxMDFCNEY2REIyNzRGN0ZENDAKKzoxMDc2RjAwMEI0QUEyODY0QkQ0N0U4NDg5NEZCODlENTI2QTBFRkVBRTAKKzoxMDc3MDAwMEJFN0ZBNkZDODVGQzEyNDNGODJDOTY5QjNBRTlGNzY1RjAKKzoxMDc3MTAwMDAyRERGQzdEQUNDNDE0NkU3NEY1MUJBQkVERjJFQ0EzODIKKzoxMDc3MjAwMEFBRDgyNzkzREQ1NDBGOUE4NTQ2QTBEQzU3OERGRUI5NjEKKzoxMDc3MzAwMDhFRTVDMTRFQ0M2QkNFQTQzN0ZDN0JENTQ1MzdFQTFGMTYKKzoxMDc3NDAwMEFGMjZGRDA5OEU3MkZEQjVCQTU4MjUzQTZGQUQ1Nzc2NTIKKzoxMDc3NTAwMEEyRkZFRkY3QjEyQUNBNjdFRjg4MDg5RUZDMDJFNzg5MEIKKzoxMDc3NjAwMEYxNzdBNjExOTIzRkNERjJGMzM4QkMzNThEQzdFMUIxNjgKKzoxMDc3NzAwMDhDNzE3ODdDNjIxQzFFOUYxODg3QzdFRjE4ODdDN0YyMzAKKzoxMDc3ODAwMEI3MUI0QzJBNjMzQzFFQ0IxODhGQzczMkM2RTFCMThDQTUKKzoxMDc3OTAwMEYxNzc3Q0VFNkRBOEEzRTcwRjFCNTJGNEZERDk4NjdBMzIKKzoxMDc3QTAwMDJBNUY2RUNCNTcyOEU1QkYwN0Q2RjEwNUM1QzRGQ0E5RjMKKzoxMDc3QjAwMDZFN0I3REY2OUJDQkVCN0U4NkZFNDI4ODFBQjhBRjA3QzgKKzoxMDc3QzAwMDBFMzVCREYyRUY3Njk5RUVDOThFMTdFN0EzRkYxMjYyNzAKKzoxMDc3RDAwMDIyNjBEQ0ExMkRCRTlERTlBMjgzRjMwQkM4Rjc4MjRFODcKKzoxMDc3RTAwMDcxNzdBQjBFRjMxRUJGQjFBREY3MEE5OUU5MUYyNUYxMTIKKzoxMDc3RjAwMERCQUFGMjU4RjlDOTZEMkZCNzYxOUVFOTA1N0FFM0NBOTEKKzoxMDc4MDAwMDlEQUVCMjFFOTlCNUU2Njk2REIwM0NCOTZDQTcxQzY0MUIKKzoxMDc4MTAwMERGOUY4OUZDQjIwREU1NDUyMEM2RjVDMzY3QjdGRDlBMjkKKzoxMDc4MjAwMEY0QzNFRTYyQTYwMEExQkMyQjUyRDI0OEVGMzdFMjNBNzUKKzoxMDc4MzAwMDREQzU3OUYwN0NFRUJGODNFNjM4RTZGOTRERDY5NTU5MTMKKzoxMDc4NDAwMEM4QTdBQzdFMzdFNzhGNTFENkM3NjBDRDlDRjNEQjBENjAKKzoxMDc4NTAwMDU3NEYyQzFGNTUzRDNBQTczQjY0M0RGNjVEMThBNjlGMzgKKzoxMDc4NjAwMDU2NjhENjdBMTlFQzVCN0M3QzFGQjYwQUI4OUZCOEMzMDEKKzoxMDc4NzAwMEM3RTU0MzQ3ODAzRkE3RTQzOEY5MEQ1NUNERDEwMkNDODkKKzoxMDc4ODAwMEZCRTE3Q0RDMTFFMEY3MTNGNDRGMTdFOTc3N0JBMDVFOTYKKzoxMDc4OTAwMEY4N0JFQ0U3RjNFMzQxQzNGQ0M4NTlEMzhCRjNEMTRFM0IKKzoxMDc4QTAwMEY4ODU0RDBGNTMyNzQ3RjhGRUZFOEYyQUVERUYxRjlGRjcKKzoxMDc4QjAwMEZDNjQ0QjFFMkI0RkZEMTdDM0MwRkQ3QTBCMTg0MTk0N0YKKzoxMDc4QzAwMDI3RDY1NjJFNEZCRTU1M0UyNTZGMTlBQjdFRjE5Q0VGNDUKKzoxMDc4RDAwMEU2QTE3RTNDQ0Y5NjRGNjlEQjhFNjk2Q0JENjkzMkRBREEKKzoxMDc4RTAwMDExRUZCRUM0RTVFMzFCQjY3Q0Q5RTlFQjRERDE3QUNFRUUKKzoxMDc4RjAwMDA5RDM3OTBCODA0RUQyNUYxQUUzMzJFNTg5ODlFM0Y4MjgKKzoxMDc5MDAwMDUzRjE2OTlGQTZGQjMzNUIxNUJBQUY0OUY5QzMzQzk1QTgKKzoxMDc5MTAwMEZDQUVFRkZCRURGQjhBN0I0OUFGNTEwMjQ5MkQ5N0JERDEKKzoxMDc5MjAwMEVGQjQ0NEYyNTMzNDZCQzEzNERFOUJCNTI1M0M4QjdFRkYKKzoxMDc5MzAwMEJGQzEyQTkzMjk2RUI2QTU4Q0M3N0Y0MjkxNkJFODVFQzIKKzoxMDc5NDAwMEFDQUZGNDA0QTg3RTZCNThBNTdDRTE3NEQ5OUU4MzU1MzYKKzoxMDc5NTAwMDMxN0M4QTFBRUEwNzY5NzMzOURENjM2OTY5QTI0Njc5NUQKKzoxMDc5NjAwMEM3RUM1RkY0N0Q2RDhDRkM0MTc0RkUxOEJGQUZFNUYxOTAKKzoxMDc5NzAwMDBBREZEODQzNTQ2RUZFQTQ0NkZEODM5RERGNEYyQTlBNEEKKzoxMDc5ODAwMDg4QkYyNzkxRThGMURFNEJEQkZGOTM4RkExQkY2NDBEMjkKKzoxMDc5OTAwMDNGQkYzMjQzNUJERUYzMUNGQkRFNjJBQTg5NjJDNjBGODcKKzoxMDc5QTAwMEFEREEzQkZCNDI1ODVFMDUxNDRGMEQ0RDdGQkQyOTg0NzcKKzoxMDc5QjAwMEY1NkZENDBDOUVBRkM1Q0Y0QjgwN0QwRjcyNEJEOThBMkIKKzoxMDc5QzAwMDlFRkZDMEZFNTc4NjYwQUE4MUY1QUI1NUU0NTc2ODgxREIKKzoxMDc5RDAwMDE3RjBERUFBNDI4Mjg4QkRDRjlEMjVBMERFRDY1QTRCODUKKzoxMDc5RTAwMEQ3NzMzMkY4QkNFNzBDNUFGMkFFNTQ5MTZFQTRBNTc5NjUKKzoxMDc5RjAwMDM0NEUyQjk4MkFENkI3NkE2NURBM0YwQkMzNkEzN0ZBM0EKKzoxMDdBMDAwMDE3MEE2REZGODQyMzBGRjI1M0FFRjMwNkVDN0ZFM0Q3MjIKKzoxMDdBMTAwMENBOUVGMzA4NjM2RkY0OTYwQjMyRUVFMTJEQjdFOTI3QTcKKzoxMDdBMjAwMDEzNkY5OUYzQ0M4RjNEOTM4QkYwRTRBRkE1OTMxM0U3REQKKzoxMDdBMzAwMEMxN0Y2RjZDRDYzMjlDRDczODZEOUZCMEIzOUM0QzFGMDIKKzoxMDdBNDAwMDREQzc3QkM4MjFENUU4Q0VEN0Y4NzNFMTlENTFENkQyN0EKKzoxMDdBNTAwMDhCRjQzMDQzOTc0MTY3NzhGOTE4RjQzNzYxRkY1QjZDMUEKKzoxMDdBNjAwMEZBRUYyOEYyRUVFM0JGQjBFRDFGQzZBNzZCQTM3MzMwQTkKKzoxMDdBNzAwMEVFMjE4MkU1RUExRkUzMjI5NjBCOUUyOTFENzk5RUYyRjQKKzoxMDdBODAwMEQ0Q0VGMTlFRkFEMzc2MTQ3QkJFNUY5OEJFQzhGM0ZEQzgKKzoxMDdBOTAwMEUyRERCMzNDRTVFOTVEOTc3OEVBN0Y2QzZGOTVBNzNDNDIKKzoxMDdBQTAwMEIzRkI0QTRGRkREOTA3OTc3QkNBNzM3QTNGRURBOTNGRDUKKzoxMDdBQjAwMEVGOTVENTlFRUZGM0ZCRDY3OEJFNUZGQURCMEQ5RUYyMTUKKzoxMDdBQzAwMDY1RkQ3Nzc5RUEzQkZBN0ZFNkJFNzk1Mzk0Q0JBMzBGNDUKKzoxMDdBRDAwMEFCRjdFM0VGMDNCOUNGMUQ2N0RBMTVFN0REQUZGM0M3MDcKKzoxMDdBRTAwMDY2MURFMzg0MTBFNUY3RTlDQUI4QkZCM0YyODYyRjcwQ0MKKzoxMDdBRjAwMEZCNEM1RDY4RTgyODZGNTY0NUI5N0M1RDlGNjdERThFNUMKKzoxMDdCMDAwMEYyQjUzMkFBRDIzRTIxODc3OTNEMzk3QzA1RTkyMzkzMkIKKzoxMDdCMTAwMDc2MzAzOTM1OUJFQ0I2ODFFRjE4QUZFRTY4QjAxNjk2MkIKKzoxMDdCMjAwMEI4RkM1QTAxQUQxMzMwNEZBQzMyNUE0M0Y3MEEzQUVENjQKKzoxMDdCMzAwMDY1Q0QwNENDOUY1QjE1RDVCOTFFQzRBQzVFQkEyRjQwOTEKKzoxMDdCNDAwMDY3RUQ1REYzNjI3NjIyNUQzMUQxQ0ZFQzQ4RDRGRjA3NUIKKzoxMDdCNTAwMEVDNDQzOTg3RTJDM0NDNEUyNDNCRDIwODcyQkIxMUNFMzEKKzoxMDdCNjAwMDRBRjREREY4OEE0MEY3RjgzMzNCOTBFQ0M4NjdDMkNDQTIKKzoxMDdCNzAwMDhFOUM4OTc2NUJERjE2OTQ0M0ZEM0Y5NTI5REVDOEZFMTcKKzoxMDdCODAwMEM4NEUyQzY3NzZFMkU2NUNCN0JGQkNBRjA4OUY2OUQwRjEKKzoxMDdCOTAwMEM2RTNCMzQ3RTkxNkM3MTY5MURERjhDRjQ4Q0Y5RkQ5QTIKKzoxMDdCQTAwMEY4NTIxREY2M0JCRDlDREZCRkQ3MzFBNjM2OEVGQTc0NjYKKzoxMDdCQjAwMDQ3NTExN0YxNDk3RjkxQ0NGNzIxMzk1MUVBRjYwMzFFNUQKKzoxMDdCQzAwMEIwRjdBQjkwRkEyREIyNTdEOTNBOTA1Qzc2RDY2MThCNkMKKzoxMDdCRDAwMEQwOTdDNjdCMEVBRDJGMDRDOTJGM0VFOTM3RkVBM0M4NTAKKzoxMDdCRTAwMDZGNkFCMTNBMDFGMzA0OERGRDhBODlFM0RENkJFM0I5NzUKKzoxMDdCRjAwMDU4OUI1OTg1M0YwNzU5MTI1RkI2MEY5RjE3RTg0QzFGRDYKKzoxMDdDMDAwMDYxQ0ZEMkQyN0JGNkUxRjM3QjUxMzI3QUUxMjJFM0U5MTQKKzoxMDdDMTAwMDJBOTQzMUVBNDJFRURGOTY2NzI4RTkyNjAxRkREMjBDNkMKKzoxMDdDMjAwMDhFMkNGNjg5RjM5NEEyM0JGOEJENDAyNUYyMUI0ODdGQzkKKzoxMDdDMzAwMDY4MUQ5QzYzNTNBOENDNTMyOUJFMUM0MEJBMTBFODQ5NjgKKzoxMDdDNDAwMEY0MTQ5MDQzQjRCRjA0RjBCMDJBOTYyQjg0MzQ4NkM0NTUKKzoxMDdDNTAwMDUwN0ZDNUJDRDFDQUJDMUQ0NDA3OEU1RThCRkE2RTkyQTQKKzoxMDdDNjAwMERCRDEwNzkwREU2MkI1REVGNTBGQTlERjI2M0NCNUQ4ODMKKzoxMDdDNzAwMEU3QTIzQjcyRjU0MzU1NkNEQzhFODJFMjNDRjRFREEyNDgKKzoxMDdDODAwMERGNjU5OTRCRkUxQ0I0RjdERDQ3NzM0NDQ3NEYyMEY5N0QKKzoxMDdDOTAwMEIzMDA3MzE5MEEwNkY1MjJDNjBGM0JDNDI5MDg2RjgyODgKKzoxMDdDQTAwMEUyRjA4MTQzMTJEOUZEODFCQjNCRTk3NzU4MDM5QUE1RTUKKzoxMDdDQjAwMDAzRTlGRjk2OEVGRDU2MTdBRjI0M0ZFMUZGQzQ2NjkxOUUKKzoxMDdDQzAwMDFFMUNBOEZGNTE1NkJDMDVGQTI0MzA2NzBGOERDRkU4NjMKKzoxMDdDRDAwMDA1MEY5MDNFMDA2MzgyM0FFRUIzRjVCMUEwQjkzMzhCNDUKKzoxMDdDRTAwMDdENTAxN0IxRUQ5RjQ5OEVERjMzNDFFNzYyNUJEMTJGQTUKKzoxMDdDRjAwMDE3QzZBRDREMTUzMTlGRTdGNjlGMTY3OEVDOUFEQjBCNTIKKzoxMDdEMDAwMEI4MUY3M0E4RjEwM0NDMUU0REJBRTBEQkM0RkE0NTM5QTUKKzoxMDdEMTAwMERFN0E3NjU5MEREREJCOEFEQjRDMzk5RTFCMkREQjQ5QTMKKzoxMDdEMjAwMEZFRkNCM0NEM0FFNjdERDVEOTc4NEQ2MTMyMEZDM0RGODUKKzoxMDdEMzAwMDI0MDUxNkVENDQ3OTkyQzdGNDIzODZEMjRBREJGRkUyOEMKKzoxMDdENDAwMEY4NjkyNkU2RjBGOEJGNjE4MUM0RkQ3NzNFNjdERjEyNkYKKzoxMDdENTAwMENGRTE3RDM1M0FFOENBNUNGQjJBMDA1MjgxRjlCRUM2MDQKKzoxMDdENjAwMEZFQUYwN0NGMEY0RUU5NzBFRDczODBGQjgxQjczQzZEMUUKKzoxMDdENzAwMDg3Qjc3QzYxREE1QjY2NUFGNENCQTgwN0FDMDBFMEZFRkIKKzoxMDdEODAwMDhGRERERUVGNjEzMDdEMTg2RjE5RUZEQ0IzOUZFMEU3MjgKKzoxMDdEOTAwMDA5NTUwNjAxRDI3NzU5NTdCQUU3NkI2QzdFMDlFNzNFNjEKKzoxMDdEQTAwMENDOEM3QkY1QTdFRjQ5OTNGRTcyOTVGREJCMUY5OUY3MkQKKzoxMDdEQjAwMEJEOEZDN0RGMDE5OTQxRjNGMkVDQTNCMzdDMTJGOTI1MjMKKzoxMDdEQzAwMEQwOUY2NEI4RkM0OTI1OUFFRUIxQUIxQ0JGNTBBNjVDQUQKKzoxMDdERDAwMDBGMUVCRjA3RDgxN0IyRUI5MzdFQkMzNzU1MkI0M0ZGNUUKKzoxMDdERTAwMDQzNUJFMTk3N0U3M0EyN0NEMDBGRDMyNkE3REUzQzQxOTQKKzoxMDdERjAwMDdFNEVBNjdGQzVCODlGMDRGREQ3QjdGRkY0OEVGRjNFMjkKKzoxMDdFMDAwMEUxRjI2N0JFMUI0RENFNDZCRkM3RkQ5Mzc5N0JFNzVFQUYKKzoxMDdFMTAwMDU1RTdEQ0RGM0IzNUYyRjM4MkNFRTE0OEJBRTBCOEIzOTgKKzoxMDdFMjAwMEQ0RkEzODU3NTdEMkUzRDA4RkU0Rjg2MTFDN0ZDM0Y1RkEKKzoxMDdFMzAwMDc5MjZFOUU3NUI4Q0EzQTlGREFDREZBQTVGRkEwMUZCMTkKKzoxMDdFNDAwMDU5MkMxRDNBRDg4MEYyNkVBMjRDNzkyNURBQkNCNThGMzgKKzoxMDdFNTAwMDA0RDFFRjg5REY1OUI5QUE0ODFGNEJGQ0YxQTI4RkZDNkUKKzoxMDdFNjAwMDBFRUQzNkRGM0JFNzU3MURCRjREMjI4N0YzNDdBRDZENjMKKzoxMDdFNzAwMDBGQjA5OTA2RUQ3MzFCNDFENDkzMkZERUNERDZEMEIzNEUKKzoxMDdFODAwMDFGNzJCRkExRTMxRjlDREVFNUZEN0UxMTFFMDUyN0ZGQ0IKKzoxMDdFOTAwMEU4NEVDQTgzMzJFNkYzM0NBODMxMkJEM0ZCNzA5RDNGRkEKKzoxMDdFQTAwMDY2QUYzM0M2QjcyQUU3MEVDNjU5QzdBRTRBRUY0MzNEQTEKKzoxMDdFQjAwMDc0ODY5RENGNTRGNkUyRjNGNDkzQkYyMDE1NEE0ODVGRDEKKzoxMDdFQzAwMDE3NjExRTEzNkI2NzFDOTAzREU3NDZDNjgwNDBGOTQwNjIKKzoxMDdFRDAwMDYzOEU0OTQ2OUFGNTMzRTM1OUVGRjczMjcwOTU4QjEwNkMKKzoxMDdFRTAwMDNFNkYzOTMzN0VDNUQ0QURCNzZGMTBGMEY3NTM1MzAyRjAKKzoxMDdFRjAwMENBQjNBREFCOTg4REMwQ0FFQjcyRUMzQ0E0MEJFMDAyRTgKKzoxMDdGMDAwMEE0REJDNTUyRDhDMEZCRjUzNkZDNUNBMjNDNjRGRjg5RkIKKzoxMDdGMTAwMDY5QkZDMDM4MkFCQ0M0RjMyRUI1MjkzQzJFQUJGRDQ0NDIKKzoxMDdGMjAwMDMyOTgwNDA0MkQwNDMzNjc4NjA3RTM1RDVGM0Q2N0UwMDQKKzoxMDdGMzAwMDVERkIwMzdFQjRDN0Q5QkFFMzNFRjQwNEIzRkI0QjdDQ0MKKzoxMDdGNDAwMDY4Qzc2QjU0RUU2Mjc2M0Y5NjlGNjE3NjNGM0VGNzMwOEUKKzoxMDdGNTAwMEJCMUZERjdGOEZEOUZENThERUNCRUM3RTdDRkU5MEQ5MzYKKzoxMDdGNjAwMEZERjhGRTU5NjZGNzYzRjlDNURDQ0EyRDM5NzMzMEJFREEKKzoxMDdGNzAwMDU1NEFGNDE0OUNCOTg3RjIxRURCNTU5Rjg2RjQ5MzI5NjkKKzoxMDdGODAwMENGMkEyQjZGNTc1NzMwRkM2RTBFMkZBNjc4NEJENTYyMzkKKzoxMDdGOTAwMDlFNzdCRjI1NjczMUQ5RDMwM0ZFQkMwQzdGRThBMDdGNTUKKzoxMDdGQTAwMEFGNEY3MEZDN0I3ODA0M0E2RURCQjMwMzdFRDJBNDQxMDIKKzoxMDdGQjAwMEY3MUI4Q0RDOEZFOUY0NDM3RUQ2RjNGQUIxRkRBRDZGOEQKKzoxMDdGQzAwMDdERTE1NzVGNkY2NjlGRDZDREQ5REUxMTJDQzY3MzNGMUEKKzoxMDdGRDAwMDI5RkVERENFM0ZDQ0ZDRERBRDc1N0IxQTI5MUY1MDE5ODMKKzoxMDdGRTAwMDc3MkM4NUVCQkFBNzNDNENGQTA2RkUyRTEzQ0FFRDRDNTMKKzoxMDdGRjAwMDNCRDFCMTBGMzNGNTcxRTc5OUI5MUY2NkU2Q0I0NDZDRkQKKzoxMDgwMDAwMEJENjRBNEZDOEQ2REJFMTRDNUI3QUQ0NjI2NUY3MEJGQzAKKzoxMDgwMTAwMDY4NDgyRjdDREQ3N0JFN0Y3N0IyOTY5NzcxNEU5OUU3REYKKzoxMDgwMjAwMDY3RjkwRkYyQkNCRDBFNDg2QUVFRjkzQkU3MjNDOEU2REMKKzoxMDgwMzAwMDJCRTY3RTQ2Qjc3RjM3NTg5MkE2RkIxQjgyNjE5M0Y0RUUKKzoxMDgwNDAwMDQ1ODFFOTkxQTQ1NzZBNDk4QTE3QjYwREYxRkJEQUE3NzEKKzoxMDgwNTAwMDZDMzlEMTM4RUUxQURBRUZEQjVFRjQ5MUJFNTU2REU3N0MKKzoxMDgwNjAwMEM5MzU4RjUzQTlEQzNDNkU2RTlDRjIyQjIzNzNENUJFQjEKKzoxMDgwNzAwMDJDRkQ2Qzg4MTQwRkJCQkY0QTZDRkZENzg3RDlGRjI1MzYKKzoxMDgwODAwMDNGM0YxN0Q2QkM2RkJFOEFFN0E3M0FDMkFCN0JEMTZFMjMKKzoxMDgwOTAwMEVGODhDNzI4NEVEMDMzNkVBRUU3N0U3MjI5NUU0MUY3NzcKKzoxMDgwQTAwMDU5NDg2MUFFNjc0QjcxOTVGNDZDMTlFNzVGMzY1OERGM0MKKzoxMDgwQjAwMEE5NzczMDg3RDMwRjYzNzNGMjYzMDZDMjlENTRDRjJGMjUKKzoxMDgwQzAwMDI3NENGNEI3Rjg2MzNDMEZEOUFGRjFCODYyQjA0NDA0NjEKKzoxMDgwRDAwMDM1Q0I3OThEMUVEQjJGREU1MTk2RDREMEFGRDMxMTk3REYKKzoxMDgwRTAwMEU5REM0Nzg3M0U2QkE4QjgyQ0JGRUY0MkYzRkEwNzlCNDkKKzoxMDgwRjAwMDZEQkY0MzczOUQ0MjdBNjFBMjNFNTdBQkNFQTc3MzBCMEYKKzoxMDgxMDAwMDY3OTBDRjNCQzI0RDJBQzY2OUZGM0Y4MjkwOUM0RjAwQ0IKKzoxMDgxMTAwMDgwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJDRDdERDgKKzoxMDgxMjAwMDBCN0MxNEQ1QjlGODk5OUREOTU3NzYzNzk5NjQzN0M5MUUKKzoxMDgxMzAwMEU2QzkwNDAyMDYwREI4ODE4NDg3QzYzODA5OTFBMjIyRDcKKzoxMDgxNDAwMDJFMDIzNUI0QjQyQzA0MTRFNDE1RDFCNkFCRDVCMjIxNEIKKzoxMDgxNTAwMDA5OEYyMDI1NTgxRjI4MkRERDUwQjAyRkJEOEQ5NkRFQUMKKzoxMDgxNjAwMDUyQUJGRDZGMDRCOUE4QThBOTdBMTVGREExNDZCNDNFOEIKKzoxMDgxNzAwMEVFQ0Y2QTA0QkRDNTQ3RkZGQ0JGRUYzQjMzQzlDRTY0RjkKKzoxMDgxODAwMDM2MDRCNUY3N0ZCMTY1MzgzM0U3RjE5REVGN0NFRkYzNDcKKzoxMDgxOTAwMDlEQjM4RUJDQ0E2MENDQzc1OENCM0ZDNTg2MkUyRjNDNDIKKzoxMDgxQTAwMDhCMThFQjgxMjc5MzQyMTlBQzlDMzE4RjJDMzA5NkNERTQKKzoxMDgxQjAwMEQ4NjlGQzczMzE3Q0VGNzZBQkFDMTI5RUNCMUM3MTc3MjcKKzoxMDgxQzAwMDA5NjNFMTY4NDU0RUZENDRDNjE2NjY4NTk5MENGNTFDQTkKKzoxMDgxRDAwMEJFQzU3MjBDREFEQjE5NTNCMTNGQkQ5REZFMEM2MjdGNDgKKzoxMDgxRTAwMDU1OEM4OUYyNkY2QkRFRjIwRkZFQUUzRkM1RjQxRDJDOEQKKzoxMDgxRjAwMDgyNzA5NDRBNkZGN0JBMThCMzI5NEMzODZEODMzMkYzMDIKKzoxMDgyMDAwMENBNkY5RkM3RThDRjY5MTFGRkVFMDk4NjdEQTlGQkYxMTAKKzoxMDgyMTAwMEI5RkVBREU2QUQ4OTgzREJBRDJBRUY3NTg4MEE2MzlCQjUKKzoxMDgyMjAwMEY3NzQ4NDE5OTQzRjEzMTQ4MkNCQ0U2MjZBMDFDQzZCMkQKKzoxMDgyMzAwMEY1RkVFQjU5MDRFNkJGNTVFQTcxQzkwMEM3RDYyRjg0OTUKKzoxMDgyNDAwMDg1RTFGMkMxRkQyRkQzRjAwMzA4OEIyMTlDRjBDNzc2QTYKKzoxMDgyNTAwMEZBN0NGODVCNjE4QTYzMTI2MzA1Rjg2NjI0M0VGOTc3NUQKKzoxMDgyNjAwMDE4QTVGQjM0RjQ1RjkxODA3Mjk5MDYwRkZDN0ZFMjYxRTAKKzoxMDgyNzAwMDYzQjlBQUM3NTg5RTdDRDQ1ODY2MkM2NDBGOEY2M0VDRjAKKzoxMDgyODAwMDg1NzVEMEU5Mzk4Q0NEMzlGNkRFMzE5NkNFRDhEQzU4RkIKKzoxMDgyOTAwMEU4RjE0NzAzOENFNUFCQUU3MDVDNjY2QzFFMEIzREZFRUYKKzoxMDgyQTAwMDJBOTQwQjFBM0MyQzExODJDMTZENkMxOUFFMEI0Q0YzNDUKKzoxMDgyQjAwMEE1NTI4MEFGODExMUFDQUM2MDU5MUE2M0FFODFGRUJGOEMKKzoxMDgyQzAwMDJCNjcxMjNFMUE3QTE3Q0Q2NEUzMTlGQkYxQ0QyRDhDODIKKzoxMDgyRDAwMDQxM0ZCMTNBMjFCRTE3RTA5RjVEQkY2N0Y2Mjg3OERFQzcKKzoxMDgyRTAwMDVCNjkyQkJBMEYxQjQ1RUM2RkUxRkM1Q0QwRDk2OTk4MzgKKzoxMDgyRjAwMDZGQTZFREZBMTEyM0ExN0U3ODlBNDc2ODgxN0EzRkJFNzYKKzoxMDgzMDAwMEUwRENDREE1NTBFRTk5M0UzQTg0NzgwNzdDQkRENTNGQTAKKzoxMDgzMTAwMDFGQzBGRkJDMzA2RkFGOEZGRjZDRTU4OUI5QTNFMEI5MTgKKzoxMDgzMjAwMEIzRjJBMUQ5Rjg5QzkzNUMxRkZBOUIzNUE1QjNEOTAxOTAKKzoxMDgzMzAwMEZENURCOTUyOTk4MEZEODVFQjhERUQwQkFBOEQ2NTgwQjEKKzoxMDgzNDAwMDlDRDYwOUU3RUJDRjFBMENFRjk5RTAzMThGQUZGNzc3QTYKKzoxMDgzNTAwMEVGM0E4NUYwQ0ZCRTAwN0EwMDdDODZGMTEzQjQwRjRCNjQKKzoxMDgzNjAwMDdENTIwOEYwOUM1RjJEQTg3MUEwOUIwMjU1NTAzQjJEQkIKKzoxMDgzNzAwMEY4NjE5QjQ2M0Y2NkZDOEJCMTBDODY3QzU2Mzc0RjhDNzAKKzoxMDgzODAwMEI3NDM5NTdDOTc5REYwOUYzRjUzODgyQjMwN0VGRUIyN0MKKzoxMDgzOTAwMEJFQzQ2OTI4N0ZEMzY1OEY4QkYwM0QyQkIzNEJDMEVGRjQKKzoxMDgzQTAwMEY3QUU2NEFDQTM4NEMwNEJBRjRENUFERjdCNUQ2REY2NzYKKzoxMDgzQjAwMDYyRjgzRTJGNEY2NDM2QTAwMzU2M0Q4QUM2MjMzODQ2RTYKKzoxMDgzQzAwMDEyM0U4RTczN0NCODA4MUYwNTJCNDM4RkZGMENDNkJGNkYKKzoxMDgzRDAwMDdBOEE1MzE2QTFGRUQ1MERGQ0JCMEVERjU2MDlFODBDQjgKKzoxMDgzRTAwMEJFNkYwNTNBOEIxMTlENDlDNzkzRjEzM0U3RDhBQTU1NjMKKzoxMDgzRjAwMDQ4OEY3MzRDRUZDN0NBOENFOEVBRUY1MzhGOEUyOTA2N0IKKzoxMDg0MDAwMEI4NTYwOTFEMzMzQzAwOEFEQkRFQzQxODJFMzQ2MDEwRDgKKzoxMDg0MTAwMEU5NUFFNzQ3MUQ0RkFCRjYzNTEzM0YyNkYxOTlGRDM0NzYKKzoxMDg0MjAwMEYyMzNGRTNCODc1MDQzN0NGNjk4RUJGNzMyQ0E4REJGQTAKKzoxMDg0MzAwMDY0RjZFRTY0NDBDMkJGOTA1OUFDQkU5QUIxRkY5M0Q2QzkKKzoxMDg0NDAwMDc3OUUwMEU1REY3NDM0NkNEQTc0MTE3Qzc3RjdGRDk2NjMKKzoxMDg0NTAwMDU1MzBFNkRDRjg5RDE5MzM4QTA2Q0E2OUVEQ0I2N0NDNDYKKzoxMDg0NjAwMEI4MDhGQkUzRTNDMDE0NjI3Q0JERkJDNzI1RkFFODkzQzAKKzoxMDg0NzAwMDM5N0M1QjU0QjY1RDg0QjI2NDkzQjc4NzRBMDZEQTY1OEIKKzoxMDg0ODAwMDYxM0I2MTg4NzY2MUI2NURCMjY4RTdENURCMDE5RTM2RjcKKzoxMDg0OTAwMEMwRkFBNTY5RjM0QUQzQkVEQjM0Nzg5MkM3OTcxMDZGNTAKKzoxMDg0QTAwMEIyRTIxNTYwM0RBNEU5OTI4Q0Y0RjI1NUUxQzgzOUQzRUIKKzoxMDg0QjAwMEJDMjM2Q0JCN0RENEUwNzYwMDc2QjMwRUJGQ0QxQUZFMzQKKzoxMDg0QzAwMDM4N0U0RjFFREYzRTA0RkM1RjM3M0VDRUQ0OUY0M0ZCMTkKKzoxMDg0RDAwMDdFRDZGMDQxRjVGNTM5QTlFNzhCNzBEOTUxNUYyOThBMkQKKzoxMDg0RTAwMEQ3OTZENENGQjZFRTRGOUYzQTFGODg1NzlBQ0Y0MjZFOTkKKzoxMDg0RjAwMEU4NDNCMkFCNzIwOEU4QkM1Q0JFQzM4NTlENEI5OUY1RkUKKzoxMDg1MDAwMDcyMDRGODYxMzM5NDU1NzhCRkI5QUJDM0E1QzBGQkYyRDAKKzoxMDg1MTAwMEQyREIzNzIxRDE5NzI3RDIxOENBODM3MTRDQ0VCQzFGMkEKKzoxMDg1MjAwMEZBMUQyNzRCMkM4MUFCNzZEMTQxOUIwN0NBRUMwQTE2NkEKKzoxMDg1MzAwMDFBMERGRDY2NzRBNzkxM0NDOTJDQjlFMDE3MDI4QzlCRkIKKzoxMDg1NDAwMDk5RTk1MkIxQkQyNzczRDIyRjE4RDEwNzUzQTQyNDdDQzcKKzoxMDg1NTAwMDc4NkE1RkE4RjMyMDVDQjM1OTA4NTk1MTEyRTJBQzE2NEYKKzoxMDg1NjAwMDk5NkMyQzYzN0JBMTlDNzlDOTFFNTYwRkU1MDk3RkY3OTYKKzoxMDg1NzAwMDI5MjJGMkI0QzRGNTVEM0JCNjQ3M0RERENBMEVBMTdFQUIKKzoxMDg1ODAwMEM5RDNFNENGMjY4N0JDOURGNEM3NzUxMjQzRkRFMTE5MUEKKzoxMDg1OTAwMDc3ODc4MEYwREMwQjVEODlDMDk3RTVFNTU5QjNFQkExRTcKKzoxMDg1QTAwMDVDN0VDNDE2NTIxNDlDNEY4NzUwOENGMzA5OEFBNEI3ODIKKzoxMDg1QjAwMDc0N0NFQTcyNjRDMjQ3MDlDRUY0NjM1OTdDMkZDMERGMzEKKzoxMDg1QzAwMDZBOEYyNzUwNUVDNUE2NUUyREVGMDU3OEYyOTcyNEM5MDUKKzoxMDg1RDAwMDZCRkNBQjBGNzA4MEYwM0U3REQ1REVGNjEyQTQ2RkU5MjgKKzoxMDg1RTAwMEFERTRGRTMyM0U4QTI3NTA5RUIxREE4NjMwQjYwRkNDMUIKKzoxMDg1RjAwMDk0MENGMjNGNEQ5MzY3NjkyNjNERDA5QTY1MjczQUQxOTYKKzoxMDg2MDAwMEY1MDE1MzI1NDU4Njc5MEJEQUJDRDk4RkMyQTQwRjlDOUUKKzoxMDg2MTAwMDJDRTQ3MjkwQkRCMjgwRUMxMDgxRjUwQUE3M0QzMDdGNEEKKzoxMDg2MjAwMEFDODg3MDE3RjE3OTBDNkEzRjg5Qjc2N0MxOTAwQkVEODAKKzoxMDg2MzAwMDFDNjc1QTUzMTNENjg3OEY1OUNEODA1Q0UxQkEzNDE1MjUKKzoxMDg2NDAwMEY1QjNFMDYwQUVCQzA5MzA2RjFCOEI3NDAxOUQzNDBCMzkKKzoxMDg2NTAwMDRDQzJGMkMwNzgwOTg2RTMzOTVEOUU1NkI0QkIxRTczRTYKKzoxMDg2NjAwMEI1RDgxMDdGMkQ4NzQxN0ZDMDNDMzZEQTE5QjdGRkU0QkIKKzoxMDg2NzAwMDkwMkIwQkRBNDczNUZCNkQ2REM1Qzg1QzJDNjdFNEU4QzEKKzoxMDg2ODAwMDc2NjE1ODQ2QkE1QzlCNUQ5QThCRjY2MUJBQkZGN0RCQTAKKzoxMDg2OTAwMDI4Njc2NzZFRkZFMzBDMTdDQUQ1M0FBODczMDFFODlERjcKKzoxMDg2QTAwMENDODczNkM1NDBFRTNBNEYxNTMwMjVDOUNFNzM0QTREQkEKKzoxMDg2QjAwMDBDRUQyOUU3QTk2MkMzRkJDNDNBOThEMTM5MDM2NUQ1MEIKKzoxMDg2QzAwMDZCQUJDNzcxRDY2NDJBODRENzVBMjZCNzYyQkI1QTQwQUYKKzoxMDg2RDAwMDg2OTJCNDJFQ0U1Mzc5NEM5OTY4RDU3RkExRTE3RDAyNjQKKzoxMDg2RTAwMEVDMjRDNTM5OUNGRTNENEMyOTRCRUU3RjU0OEFGRUM3RDUKKzoxMDg2RjAwMDk4RkE5NzJERkIxRkU4RDc2RkU4Qjc0RDYyNjQ0N0M3MUMKKzoxMDg3MDAwMDAyNUU1QTc3QjM1REIwMzFCM0VFQzY0Q0I0NDc5REFDNTAKKzoxMDg3MTAwMEE5Q0JDMkVFREM5MDY5MjNCQURCMTg2Q0VBNTFBMTdEQ0IKKzoxMDg3MjAwMDFEMDNDNjA3M0FCOUY4OEJFMzIyMjM3QjA2NTYwQUU4RjUKKzoxMDg3MzAwMDg1MTU0QTdERkQ3NDNDMTJFQjcxRkFCNUM1MDQ4NjcyNEQKKzoxMDg3NDAwMEU5NjJDOTZFRTA5MzFBNjYyQzlCRURBMjczNjFBRDExQ0MKKzoxMDg3NTAwMDVGMzY1RjY1MEZEMkNGREFFQzM0QzU2OTAxQkZGRUVDM0UKKzoxMDg3NjAwMDU5Qzc2QTRBNDdDMzdDRDNDMkNCMThGMEYxQ0ZCNzFGQjEKKzoxMDg3NzAwMDc2QjUwNUExOUNDRUU5RTQ4MUVEQUZDRTg4QzFGQzdBNDcKKzoxMDg3ODAwMDA0NEU3RjZEMDExQkUxMjU1Qzk3REIyOTI2RjUxQjc2RTYKKzoxMDg3OTAwMEIwRDEyODE3QzM0OERGNUUwRTBGOEVERjkzNURCOEJCRTQKKzoxMDg3QTAwMERENjI3QzEwQkIwNkZCNjFCNjJBRDQ5NDI2Q0RBQjQ3QjQKKzoxMDg3QjAwMEIzODNGQkM3OUI1NkQwODk3Q0QwM0Y5RTkzNTVEMTc4MUQKKzoxMDg3QzAwMDIyRTAzRjc5QkM5QzJGMzdERTVGNzE3RUU1MDNFM0NENkQKKzoxMDg3RDAwMDlFNkU5Q0RGNkM4NzRDRjM5QkFERjFBRjNFREU1RjcxMEMKKzoxMDg3RTAwMDdFMjU1RjYyM0M5QzVGRjI3OERGMzBDRTZGQjY1M0E2ODkKKzoxMDg3RjAwMEY5Q0QxNjM5N0RGNThGOTdGM0U1QzZFQjU5NTc0Njc2RDcKKzoxMDg4MDAwMEYwNDYwN0M4MjdBMDkzQjQ4QTdEQUU1MTMwRUU0Njk3NTQKKzoxMDg4MTAwMDVEMTY5NDgxNzZCNUI1MzdCOEU2QTJFRUY1NEU5QjlFMEYKKzoxMDg4MjAwMDBERTNENDVEMDI5NUYzQjE5NzY5RDM2QjRCMTlEQjJFNDEKKzoxMDg4MzAwMDcwQkFFOENCRkNBRjRERTg0NzlFOUNCOUI2OENGNDg5ODIKKzoxMDg4NDAwMDY2NUY1Rjg5NTU0MTFGNUYyOTcxNzg2NzE1N0FFM0NEQUYKKzoxMDg4NTAwMDQ5NzhCQzE3RTQ4ODBBNzBGQzE0Rjg1RDA1N0VEQzA1RDUKKzoxMDg4NjAwMDdDODlFNUY4QkEyMDNENzc4M0JEOEVDRjNEMDAyRjdFMTEKKzoxMDg4NzAwMEJGNkY1RDg4Q0FCRjVBMzc4NTlFN0EzRjY1NTNCOEREQTIKKzoxMDg4ODAwMDNFQjZEQURBNkUzRjJGOEJEQkVEREJGM0U0Rjk0QjUwQ0IKKzoxMDg4OTAwMEFGRDVBNjg1NTAyRkIyMjkxNzMyMzVEOUFFNjY0RDhGODgKKzoxMDg4QTAwMEI5RTFGQkQ2NkZCMjBBRDQ4RDYzNzY3MEI4MDNGNTM5OUYKKzoxMDg4QjAwMDY0QjdBNzU1MUNFQzU5MDdFNThEOTI1RDQxQkRCQzUxQ0QKKzoxMDg4QzAwMDYxMzNBQ0ZDRTYzMUE4Njc2MDNDQTc5M0I3NjcxNzcyQzkKKzoxMDg4RDAwMDNGMkMxMEVFM0Q4ODdBNkYwRURBRTk4MEQ3RUNCOUJERjcKKzoxMDg4RTAwMDA3RDFGRkJCMEFFQzcyRDJDQkVDOEQ4M0FGQzJGNzE3NzYKKzoxMDg4RjAwMEMwRkY2QkM3QjJFODY1MzI5NDY3Q0RDOUE2RjFFMTRGRkUKKzoxMDg5MDAwMDdBNkQwRURBRUZGQ0NGNEY2NjlFMjBCRjIyRUNFNjdBM0UKKzoxMDg5MTAwMDIxQzA2NjNGREU4REYwODYxQzRBOUNGQTYzNzc4NjkxMDMKKzoxMDg5MjAwMDBGNTRCQkQyNEVBMjIwNkM0NzNEOUQ4RDdBMUFCRUQ3MDQKKzoxMDg5MzAwMEJFRTE2NDM2ODRFRjEyMDdDOUI1Qjk3MzhEN0VDMzc2ODQKKzoxMDg5NDAwMDc3NDI0NkZCNjc3QjQ1ODAzNTQzRkY1N0NEMzQ3RTc3QzIKKzoxMDg5NTAwMDNBMzlCRjg1NEQ3RUMzMkM1MzE5QUMyREFFNzdDNTA1NzIKKzoxMDg5NjAwMDE5NjhFRjZGQzQ1NzUzMDdFMzJEN0FBQzc5RTNDMTI0M0MKKzoxMDg5NzAwMDNBNTVCMjdDODFCNzNEQjgxMDZDMENDQUIzNEY1OEY5NjgKKzoxMDg5ODAwMEI2N0FGQzU4OTg0NUM2OEFCOUZEM0ZENkM1MzYxRTA0NEUKKzoxMDg5OTAwMEQ0QkY4MDcyMEZFNUFEODNDQjhEQzFGQ0MxRTFBOUQxRkQKKzoxMDg5QTAwMEU0RTNCREVCN0E2QURFMUEzRDAwNUZCRTE0MTc1MDBGOTgKKzoxMDg5QjAwMDE0MkM4M0Y3NDlGMzk1MDI3MTAxRkQxRDI2REU1RjgxQkEKKzoxMDg5QzAwMEZFOEQ3OTFFRjcwQUY3RTczMThCRjFGNDY3M0U5M0RFRUYKKzoxMDg5RDAwMDQ2QkNFMDUyQTIzQzM3Q0ZCNzY2RDA3Q0FCOUYyRDY1M0EKKzoxMDg5RTAwMDU2RkNBNDZDNDc3QjZFRDY2MTMxRDRBQzBDRTA0MzlGM0YKKzoxMDg5RjAwMEZGRkYzNDVGQkRBQkUxOUJBOTAxOTYwMDdBNzkxNkU4RDEKKzoxMDhBMDAwMEJEOURGQjMxMENFRDU0OUQ1RUExMDJEOTRGNTc1RTA5MEYKKzoxMDhBMTAwMERGOTEyRTU0QjUwOEYxRjlFQ0M4QkUzREQ3NjAzQjkwMEMKKzoxMDhBMjAwMDFEMkRFOEVGRUE3NjUwRTI2NTFCREE0MTVGQjZERjJCRDkKKzoxMDhBMzAwMEFGNzM5MEJEQzU1OEJERkM3NkQ5NDA3RkE5RDYwN0ZCNjIKKzoxMDhBNDAwMDdEM0I0OTdGRjZEQjg5Rjg2NzkyMjZGQTEwQzZFNjUwMkYKKzoxMDhBNTAwMDkwRUM4MTlCQzAzRTQ2N0YzRjVBRkY5RTk0Q0VCRjFGNDUKKzoxMDhBNjAwMDRGQjI1M0YxQ0ZGMUE0RkU1QUJBN0YyRDI4MDA1N0U3MzkKKzoxMDhBNzAwMEJBQUU5QUI3RUMwM0UzOTYyQzkzNkQ2RDY4Q0YzNUM3MDkKKzoxMDhBODAwMDA1OEE0MzI0QTAxRUQ4MDMyMzk3MjlCNjU2QzBGRjEyOTcKKzoxMDhBOTAwMEVDMDdFOUQzMjRENzQ3QjY0MjNGQzk3NjRBRjU1Q0Y5REIKKzoxMDhBQTAwMDdFQTA4N0Q2RjJCQThFMTAzQzM3RUZFMEYxMzJCRDdFNjEKKzoxMDhBQjAwMDdGREMyQzEwMjNGRkRDQ0U5QTk4MDA3MDNBREMzRkZBNjIKKzoxMDhBQzAwMDc5MkZDQzQ3NkQ5MTk4QkIwNkNBNzY2RUVGQjA1NzdENzMKKzoxMDhBRDAwMDI0MTc0NDZGRDMyRkYxN0IzMDA2NzIwQkU3NUREN0Y0NzgKKzoxMDhBRTAwMDNCMkNDNzZDMkNEQzAyQ0ZCQjNEQkM3RDU0NzJDOTRFMDUKKzoxMDhBRjAwMDU4QkY3NkI5NzUwNjRFM0YyNzJGNzI2RjE2OENENzk2RTIKKzoxMDhCMDAwMDkzNDY3MkQwRjE5QTZGMzdDQTI5NDdFNjg0NjU2OEY3QjEKKzoxMDhCMTAwMDJDODhGRTMwOENGMTQ4RDlDRjE2ODYyREU4NkI4MTY2MDMKKzoxMDhCMjAwMDNGRUNENUU4RUM5ODNENTE5NDA5NzA0RkNGQUJEQjlCRkYKKzoxMDhCMzAwMDU1NjU1MTNGRkEyM0VBQUY0NkI0QjZDMzFFRDVGQUQ5RkMKKzoxMDhCNDAwMDY5QjM5NjBCRkY5RUM1RTM5RDU3QUY3QUU4QkRGQjYwMDYKKzoxMDhCNTAwMDNFOUU1MjZGMDhDOTZERjNGOTZDOUY2MDFCNUNCRjNCNzIKKzoxMDhCNjAwMDNCRjI4N0FDQTQ3OEFCQkI1NDk2MjgwRUNBQkFBNkEyMzcKKzoxMDhCNzAwMDNEQjdGOUYzOUY3NkZEMEU1MDlFRjVCOTk3RTQ2Qzk2REMKKzoxMDhCODAwMEU4OEIwQjI1ODZGNjhGMjZDRjQzNkZGRjk3NEY1RjBDNDAKKzoxMDhCOTAwMEUyRkFGQ0M1Q0Q0OEJGQjJEOEQzOTdBQTE4RDdENENCMzgKKzoxMDhCQTAwMEYwNDZDMDcyQTY1RUZFRURBNUU4NkYwRTk0QUZCOUI0QjQKKzoxMDhCQjAwMDE2Q0I0OEJCNDA5NDM1RkVFODY2RDRDRjVCMDVBNjExQzIKKzoxMDhCQzAwMEYxNERCQ0JFOURENzJGRDRCRUQ3NUNGNkZFMkZCNkExMEIKKzoxMDhCRDAwMDNFOThFNDIwM0Y3NEFCNjYwN0U5RjBBOTdFOTFGMEEzQ0MKKzoxMDhCRTAwMEZBODdDNkUzNkIxQTlFNURDM0M3RTM2QjU2NzgzODkwNkQKKzoxMDhCRjAwMEE3QkU4RUY4NzVCMzJFMDFFOUQ4RkRCOUVCNDY2QzdGQTAKKzoxMDhDMDAwMENGM0ExNjVFMDJCMEVGNTRGNkZEN0E5QjQyRURERkI2MjYKKzoxMDhDMTAwMDVBODdGM0YzRDQ3N0IyMDg4RUUzQkZEODA2NzBGODc0OUUKKzoxMDhDMjAwMDM4MjZCMzFCNTNDMEYxRTE1MEVCRjlBNzFDMkVFN0JFNjkKKzoxMDhDMzAwMDE1RTBDRjJDQ0RERTc0Mzg3QTgyQjNFMTI5NTdERTc1OEEKKzoxMDhDNDAwMDgzMENGMjY2NDM0OTU3ODM1NUZDRjkzMzNGRjcwMzMyRUYKKzoxMDhDNTAwMDUzQzREQjAzN0U0RTdGRERCOUUxRDMwODQ3QUJGQzkwMDQKKzoxMDhDNjAwMDBCQzc0RjEzNTgxOEVCNkY5OUQyQ0I4NEE0N0U0MzAxRTYKKzoxMDhDNzAwMDhFNjc4MERCRTk4Nzc2Njk1Mzk5OEE3NEU2NjNCRTM4MkMKKzoxMDhDODAwMDAzM0FGMzU1NzJGOEI3MDQ1RjYwMEFCNEYzOTVDMUQzQTEKKzoxMDhDOTAwMDhCRUY3Qjg5RkZEMUU1RTBGNDAwODIwRUNBMEU4RDNFOUEKKzoxMDhDQTAwMDAyRkVBRDk3QTI5RDlGMjVFQUY0NTdENDhFRjRFMkIwNjAKKzoxMDhDQjAwMDY5RjU2MzQ1OTc2MUI5MzM4Qjk3MjdERDUxRDQxRTJCMzYKKzoxMDhDQzAwMDA0M0RFMzgwMzYyODE3RjIxRDY0RUY5OEU3NTcxOEUwNUIKKzoxMDhDRDAwMEYzREI5NkFERTZGQkIzMkRGMEU5RUNBNTc1REEzQUNFMDEKKzoxMDhDRTAwMDExOEFDMUJBRDZEODdBMUExQUYxREI2NTVFQjJEN0UwMUEKKzoxMDhDRjAwMDdENDMzQzY5RkU5NzZCRjhCQURDQ0ZFREFEQUQ5RkJBMTIKKzoxMDhEMDAwMDFBRTIxNkVCOTE4QTRFMjc2QUVEQ0Y4MjRFMjdGQTJEOTIKKzoxMDhEMTAwMEU4MDNFOEI0MTJGMTlGNDRBNzFGMzM2QjNBQkREMDZGNEMKKzoxMDhEMjAwMDQxRTc0MEE3RDVGOERFOEMwRjczNTk2NEVBOEU0NTAwMDEKKzoxMDhEMzAwMEEwRjREOUY0NUY2RDQzNkQ3NTc5RjU4RURGQzFCM0U2QUMKKzoxMDhENDAwMDczQUZFNDg3M0FFMjE4NDY3NkEyQ0RDNUU1RkI4MERDMzYKKzoxMDhENTAwMDhGNUM4NjcwNEI3MjEzQkQxN0JENjFEQUFGNzkyRTJCMTUKKzoxMDhENjAwMDQ1QkY5MzI3RUQ0MEI5MzU4QzdFRTcyMURDRTY3RTRCOEQKKzoxMDhENzAwMEZEOENENkEzRTYzMjZGMjQ2RTgxRjc3RkZBMjU2RTFGMzUKKzoxMDhEODAwMDA3NzhCRDU0RkMzMjJFNjBBM0VGMjlGOTQ1QTdGRkRDMUMKKzoxMDhEOTAwMEYwNTI4NEUzNENGQzUyM0ZDMDJGQUI4NkM3MkZGQjg4QjgKKzoxMDhEQTAwMDVGM0NFNTlDNUYzQzI5RjgwNTIzRDEyODlGMzc5NEYwNzAKKzoxMDhEQjAwMEYyOEZGQ0I5QzQwRkZERkNDM0NBRTg3QjNGRkZCMEIyMjEKKzoxMDhEQzAwMENCQjBBQ0YzQ0Y2NTgxMzJBQTZGNkU5RjhFRjNCNkMwODUKKzoxMDhERDAwMDRCOUI1RjlGNDdCODE1RDc1NTNENEY2RTE1QzlERUU4RDEKKzoxMDhERTAwMDY1MjhBNzNBNTk1RkI3MTNGOUIwNUEwOEVEODVCN0IzQUMKKzoxMDhERjAwMDYyM0RGNTJFMDVCRkY3QjBEOTYwN0Y2Q0Q1RTg3RTE3RDAKKzoxMDhFMDAwMEMyODNGRUQwMjQyRDlFMjVGNUIwQUI3QzgzRjlEODU3QzQKKzoxMDhFMTAwMDk5Mjg4QjI0RTE3RkE0ODZDNzZGMDdDMjc3RTBGODlENkQKKzoxMDhFMjAwMEFDNzcyQ0RBQTVBOUQ2RTkxRTZEQkM5QjgyRUEzRDU2MkIKKzoxMDhFMzAwMDdDN0YyNkJERjMyOEVBOUQ2QzdDRjI3RUIyM0U3NzM1QkUKKzoxMDhFNDAwMEExMUMzMEYzNzlDREVBODdERkJCNkY4ODdFMUVENkYwOTgKKzoxMDhFNTAwMEY2RDBEOUYzRkQ0MzI5RjhGRUY3MjZCRUFGMTQ0NjVBRTMKKzoxMDhFNjAwMEYyRkRDMzI5RjhGRUNGNTY3Q0ZGMTVGOEZDM0ZBQ0Y4QTUKKzoxMDhFNzAwMEJDRDMzRjNDM0NCQjAzNUNCRkJCQjVGNUZEQjI3ODdFQzkKKzoxMDhFODAwMDQ3QzNFRkVCRkVCM0I2MDM1RUI3QzIxM0UwQjk3Nzk4MDIKKzoxMDhFOTAwMDc4N0VDNzZBOUQwMENGRUZGQTY5QkQ2RDMxREMxNzQwNUYKKzoxMDhFQTAwMDdFNDdGRjdERDNFNDU4MUZFRTg3NUFDMEQxOTdEQzhGRjEKKzoxMDhFQjAwMDRCRTFGRDgwNjlGRkIxMDA3NDVFRjNEOUE2NTBDNDgyMTYKKzoxMDhFQzAwMDJGQTFERDNGOTJFMUQ3REJEREUzOTdCNUI4QjM3MjNENkIKKzoxMDhFRDAwMERBRDUzQjJGRjdGMkZEODQ2Q0Y1NzMyQjdFRjgwQUVCQTUKKzoxMDhFRTAwMEVGMEM1OEM4RTMxQTFCOTc0M0RGRjZCRjQ1NzZERTU3RjEKKzoxMDhFRjAwMEU4REY2RkQ1RkYzMzFBN0Q5RDQ5RkY4RjQ5RDJGRkQ4MzgKKzoxMDhGMDAwMDhGNTlERTc1MzIxRTRGRDk5NjFEMjkwOTEwQkU3QTJGNTIKKzoxMDhGMTAwMDQ1RjlCNEVCRTYyQzAxRkRCQTQyMzUyMUEwRkQ5RkFGMjcKKzoxMDhGMjAwMDhENzdCQjVGMjFGQUQyREJFRDkyMTI4Mjg0RjU5QjY0RDAKKzoxMDhGMzAwMDIxMjYxOEZBM0I2RkE4RkVDQzcwMDA3Q0UzMDMyNERGRTcKKzoxMDhGNDAwMEQ0RjNGMTc5OEZBNkNGQ0VENjFFQkEzMEE4NEUwRTcwQ0MKKzoxMDhGNTAwMDM5M0QxNUM3NTdDRjMxQ0E2OTdEMUVCNjcwMTdFQjQ1MkQKKzoxMDhGNjAwMEZEMDJFRTc3REM4MkFFRjIzNTdEMDlGREQ0NTEzRjlBRTkKKzoxMDhGNzAwMEJDQkYyMDIwNkJGRTI5RUZFRjZDRjUwREMwNzczOUY2RjIKKzoxMDhGODAwMDA3RkQ1RTYxMDU5RjE5MkY2NzgyRjM5NjAxMzhBRjBFQ0EKKzoxMDhGOTAwMDU4RTgyNTczN0ZCQTdGQURBRjEzRTlEM0E0QjhDRTEyREEKKzoxMDhGQTAwMDhENUU4MEFGMUExMTNFNTc5QjJEQzYwMjAzRkNBQkVCQzIKKzoxMDhGQjAwMDZCOTA0QzY5RDhGRjRFMDc4RkEzRUU1Qzc5N0IyREU2NTIKKzoxMDhGQzAwMDFCNzRERTIyNTcyMDRBRjI5NzcxM0RBN0FDMkNBNkI4M0QKKzoxMDhGRDAwMEVBNkFBRDVGMzNGQ0ZERUQxRDVENjMyNzk2RDNCODZCODgKKzoxMDhGRTAwMDcxREM4QkFCNTkwMkU1NDYwNkRBMDkxNDdGOTAyNThDQkIKKzoxMDhGRjAwMDJGNjQzOTNCODIxODk3REQyQzc0MzQyQzQ2M0Q3QUE5QjYKKzoxMDkwMDAwMDk3RjQyRDBCQ0VCNThDNEZFOTRGM0RGRUE0Q0Y5QjA1QjkKKzoxMDkwMTAwMDJCQ0Y1MEJGOTlFQUNCOUU4RTI2QjQ5Mzg2NURERkQ5QzUKKzoxMDkwMjAwMDYxNjk1N0ZENDRCM0FCNjA3RTNGMUUxMkFGQzEwMEM1RkUKKzoxMDkwMzAwMEI3NzRGQzBFMUU4N0FGNUY2REI4NDk0MDdDQTc5NUMzMUYKKzoxMDkwNDAwMDkwQzA5MjY5RTEwRURBNkNCNTk1QzY1OTJGREE0RjY1N0EKKzoxMDkwNTAwMDQwMkZENERGMEI5NjcxQkY4MUZFMzZFODcwNzUyMkZEN0MKKzoxMDkwNjAwMDdDNTVCOEY0N0FBOUM3RTNGNTcwRkY4Q0UyMUQ1RTJFM0IKKzoxMDkwNzAwMEI3RTgwMzk0NEYxQ0Y2NUJFRTFGRThDRjhERUI2NDU1MDkKKzoxMDkwODAwMDAyRkQ3MzQyNTYzMjMwNUVCODUxRDM4M0UwOTkwNUFGOEEKKzoxMDkwOTAwMEYyRkRFQkVCMERDQzIzQ0VFMzlEQTZGQTUxQzZFOTlFODMKKzoxMDkwQTAwMDA1NUQ2NERGNjExODNFOTk2RThFNkE3NEIwMkQyN0ZDRjEKKzoxMDkwQjAwMDc0ODBFNDQ4Mjg4NDc0MERFNTY3NDk1RUJBQTBFQ0EzODcKKzoxMDkwQzAwMEYyNUZBOTJDRjc5NzlGQTdGQTQxNUU5RkM5RjJCMEYwMTMKKzoxMDkwRDAwMDBDRUQ1RUExNzY1MjdGM0ZDN0E4RUNFRDFGRjczNTFBNjUKKzoxMDkwRTAwMDI3RDA1RkVFQTVFRjg1QkNGRTcwQzc0OTVBNTczRUZGRkIKKzoxMDkwRjAwMDFFOTFFNkZGQjFBNDY2RTBGRUU4MzdBMzhEMTQyNzlBMUYKKzoxMDkxMDAwMDFGNUQ0RUNGNERFQkU0NUE4Q0M3M0RCM0FFQUZCNTE1RTYKKzoxMDkxMTAwMDlFREY5Q0RGMjhBM0REM0Y3RkU5NEY2OEZGNUVFRkZGMDYKKzoxMDkxMjAwMDRBRjQyQjkwREYxNTY5MDZEOTQ1MjVCNkYwMUVFRjAwRUQKKzoxMDkxMzAwMEJGMERDMEQxQUFFOUZCREU3QUE0MjM5N0NBRkFEQTJCQzUKKzoxMDkxNDAwMEEwRkQ5NDhGNUE1QjBENzk0RTFEOTQzRkUzNTZBNENGM0EKKzoxMDkxNTAwMDkyRTNFQUJBMUNGQ0JCNDMzRDFEMzgzQjNBMzZDRDk3M0YKKzoxMDkxNjAwMEIxODMzMEZFQzdERUQyNzg4Q0U4QkE0RUI2RTIxNzdEMDYKKzoxMDkxNzAwMERFQTlGQUQ3RTc5RDRBQ0VFOEY4RDNERjZGMkU5RDIwMEYKKzoxMDkxODAwMEYzRkM5RkI4MDEyRkVFRDFGNTk0RUY3M0E1QTBDMUU5RDAKKzoxMDkxOTAwMDczNjlGQ0M2RUJDRDgyNzExRTJBMjdGQTUwOTA3RTY3NTgKKzoxMDkxQTAwMDY5N0U5QzU5MkZFOEUzRkVERDExMTk5MzhERURFMENEMkEKKzoxMDkxQjAwMDJEMTMyQ0YwM0I0Q0JDMUQ1REI3MkM1QzZGNDc3OURDNEMKKzoxMDkxQzAwMEU1QTZGRDdCMjY1MzlDNUZBRkQ3OTA2MkZFNzVEOTVDMDgKKzoxMDkxRDAwMDhGMzBBNzRBRjNEOTcyNkI0NjFDRUQ4RTJEOEJGRTIwODMKKzoxMDkxRTAwMDYzNzBDNTMzRUVFMzJBQ0NEN0Y0MDg3RDlGMkM0NkY5OTMKKzoxMDkxRjAwMDcyQUI4RkYyMzExQTE2N0Q1MkQ1OUNENEZGQzIwMzdGMTkKKzoxMDkyMDAwMDcyNjFCQ0I3NjFEQ0ZBNkM4Q0JCMkM2NEQyQzdDOUY5NDMKKzoxMDkyMTAwMDBFRTY3MTFCQTJBQjg5NkU2M0NENDI4Mzk1QkY3NTJDQTAKKzoxMDkyMjAwMDg3RjNGNTQyNEM5MTExQTlCRkUzQzlGQkM4OEI5NDA5QTAKKzoxMDkyMzAwMDBFOEM0RjJDOEExOUY3NzM0MDQzM0E5MDNFMUEzNzk5OTcKKzoxMDkyNDAwMERGMjdFREU3ODhEODNGQTM3OUM3NzAzMzBGRjU1RTlCMjIKKzoxMDkyNTAwMDhERTg2RDI3RTAwREZEQzA2MjUwOTdGODNDOTY5M0E1MTAKKzoxMDkyNjAwMEYxNDEwRkUxRjM1RjBEQ0ZCMTFDNkUwRjM5NUQyQ0U2QkMKKzoxMDkyNzAwMEM5MUFBMDlCREM0ODA3NDNGREU0QUIxNDY4N0YzM0UwQzgKKzoxMDkyODAwMEQzRjMyM0JBNDg0RkRERTFENUNCQTBCNzAwRkZFMTcyOUQKKzoxMDkyOTAwMENEQ0UyOUU1REY2RDU4NDZGRkM3RDM3M0QwMDY3Q0RDMDEKKzoxMDkyQTAwMDlFRkRGODY1QzFCMUQwNUY3OTI0Njg5M0E5RkNBNDQ0MDAKKzoxMDkyQjAwMEY2MjEyRjMzRjZGODkzMDdDOTlFOTVDRjE1NDJDMEZGQ0MKKzoxMDkyQzAwMDUyRjc5Mzg3OEJDODlGRDdFQ0IxRUUyN0M5MUVFQjJGQkYKKzoxMDkyRDAwMEIzMDQ4M0Y5NzRBNkY1OTc1NTU3MTBDQTIzRkJDQjMxMTUKKzoxMDkyRTAwMDJDRUZEMkVDRjhGNkVDRUUyNzVCQzkzRTA5Qjc2NTI3MDgKKzoxMDkyRjAwMEU5RUY1QUM2RTNDQjVGQjc3RUVDMEMyRUU5QzA3Q0EyNDcKKzoxMDkzMDAwMDU4QTk4REZDQkQzNDEzM0YzRTk4RURBMDdBNjM3MjIzQkIKKzoxMDkzMTAwMDc3NjdDMzczRDYyRDdEMTJDNjFCMUM3OTJGMDQ1MDBFQTAKKzoxMDkzMjAwMDhDMjgzREExOEUwNEZBMUY1MUNERDM2NDU4MTkxRkI3NjQKKzoxMDkzMzAwMEIzNzQyREQ5MEQ5RERBQkFDMEZGRDZBM0RFMUI1ODlGOUEKKzoxMDkzNDAwMDFFRDNGQUYwRjUwODU3RjZEMEZBRjhDQTdCNjhCRDZDNjAKKzoxMDkzNTAwMDU4QTZCODFGREY4RkJGQTI5MkRCMUJCMjkzRUYyQkZDODYKKzoxMDkzNjAwMDI2OUJDNzVERkY5NDJENkE0RkVFOTc2Njk0REU0RUYxMDMKKzoxMDkzNzAwMDFERjcwQzFCRDVDRkQwOUU2NjM5RkVBNzZDQzlBMDU3MzAKKzoxMDkzODAwMDBFRTQ0NUZFOTA5RDY0QjdDMkZCNzA1OTI1Q0FCNzQwRjQKKzoxMDkzOTAwMDE2RUVCM0Q2OTY0QTM3MjIzREZGNUNGMzRGNjE5REVFNDEKKzoxMDkzQTAwMEEwNzUyQTA5QTQ0NUY4QkEzRDYyQjk2RTY1QzM1QkI3REEKKzoxMDkzQjAwMDE3RDc0NTQ4NUVBNTVBQjc2RkNFMTdDMzU2NzFCNzY3MjIKKzoxMDkzQzAwMDM1M0M3Q0QwRjBCN0JCOTAyRDU3QjlGQTFDQjgwRkIzMjEKKzoxMDkzRDAwMEI5NzRCQjIxQUZEQUI1NkY3NjAyNzNBMUY1QkNFQUY1QkIKKzoxMDkzRTAwMDlFRjQ2QTk0REJFNjcxNUZGQ0UyM0YwMjg4REY5OTlGOUUKKzoxMDkzRjAwMDNBMkRFNUUzN0Y2QkYyRjE4NTc1MERENDBFMTY1ODkxODkKKzoxMDk0MDAwMDcyNDgwRTMwOUVGN0QyOUYyNzI2OUM3NkQyRjQ1RUM0MTcKKzoxMDk0MTAwMDNDQjRFRjEyRUIzMzM2MzdGQzA2RUQ1NzJGMEU4QTBDQjcKKzoxMDk0MjAwMEY3QzcxNzMyNjM1RTE5OEJFQTc5QzEzQzBGRjY0NTA5MUQKKzoxMDk0MzAwMDVDNTM0MEUxOEIzMTIxMDQ5ODYyOEJBNEQ5QkE1QzMxMzIKKzoxMDk0NDAwMEU0ODdDRDlCM0JGQjEwRUVDMzM3NkFGQkYwMjA1RjBDM0IKKzoxMDk0NTAwMERGOTc5QUYyQzZBRTZFNTgxNEFFRDdCRTlGQTRCRkUzOTQKKzoxMDk0NjAwMDM0QUZCOTBBQjcxQkU3N0FCREE0NUZFNzg1RTc4N0VCOUUKKzoxMDk0NzAwMDkzRjZFMzVFRkFBNzY4OTk4NzVFOTdBM0UzMjUxQ0FFOEYKKzoxMDk0ODAwMDFGM0QxODJGOEJDMzgyNDM1NkNFOEMxRjMzM0U2QTI1NTcKKzoxMDk0OTAwMDhFQUY0NTFBQkVDQ0Y4MzFFM0ExNzFFRTZDNUE3RkYzNjIKKzoxMDk0QTAwMEZDNUY3NDg1MDkzRjJGMDI3RTMwNUZEODhDMEZDNjIyODcKKzoxMDk0QjAwMDU3MjBEREJFMzQ1RjY0NjgxRjRGMTc2N0RBMzE0RkEwNTUKKzoxMDk0QzAwMDcxQjZDMDMwQkY2ODI5MEJBNUYzRkM2MDc1RDYyNTQ5N0QKKzoxMDk0RDAwMEYwOUFGMTY4QzY1N0UzQTMyQzk0ODA3RTFCRUZGNEQxNzkKKzoxMDk0RTAwMEZBM0RBN0UxNDc0QzdDNDhGMzBBQzNCQ0RBRjlCQzhFQ0QKKzoxMDk0RjAwMEYzRkM1NTk5RTY3NTk1NUFGMTc4MDBCRTQ3NUE0MURBNjIKKzoxMDk1MDAwMDJBNTY3QTg0Q0Y2NzMxQ0NBNzVEMUVBQzRGM0U2MUQ1MTkKKzoxMDk1MTAwMDRENDgyNzRCNEQ3OTBCNjZGOENDRjBDRjQ0MzkzODc1NjAKKzoxMDk1MjAwMEYwM0VGRUU0MUM1RjgwQ0UyRjhDNjcyMTZEMUYzRjgzRDEKKzoxMDk1MzAwMDhFMzU4NEIyODdDQzVCMThFMDczNEU1RjBCQTNCM0ZCMTAKKzoxMDk1NDAwMEM3QzM3RTA1MTZFOTJGQ0I4MERGOTk0RkY4QjdDRTgzQ0UKKzoxMDk1NTAwMDdGQUYwRDhBMEFFNjA5Q0U5RTNGQUEwREU3MUY2NkUxOUUKKzoxMDk1NjAwMDhDNDQwOURBRkI3RDc2OTQyMzU3MzEzMDYzQTFEREM1NDUKKzoxMDk1NzAwMDMwNDlENEI3RTE3QTM3OTVGNTdFNEY3NDdDNjQyNzNENDYKKzoxMDk1ODAwMDFFNjE0RDdCNjlGRjVEQzk5ODNCMkVCNTdDNTkxQjc0RUMKKzoxMDk1OTAwMEQwNzg2NjNCNjU2NkM1RTgwQzk0MTc2NjdDRTg3OEZBNzcKKzoxMDk1QTAwMDU2OEU5NkRGMzA5RThEM0YxQkJDRjRBMEVDNDU3RjE2OTcKKzoxMDk1QjAwMEUzNjhCMDhFN0RDQjE5REI1RDMxQjA3RkNDMEE1NTZFOTAKKzoxMDk1QzAwMDRGRTYzMERBRkY1RjlEOTNBOUQ5MUQ0RDE0Nzc1OEEwNUYKKzoxMDk1RDAwMEU5ODU2Mzc2RDZGMEEwOTdFRjIzNEY0ODkyOEYwQkYzN0YKKzoxMDk1RTAwMDZBNTdFNzI0QzVGQkY0N0Q2NDJGRUIyNUZDN0REN0U1QTYKKzoxMDk1RjAwMDREODhFMzg5RUVERUVGQTcwRjkyNUY3QUJFNjY4NEYyQjQKKzoxMDk2MDAwMDM1QzU4Qzk1MEFDNUM1M0NFOUUzNTkwNkQ4QzU4Q0NGNEMKKzoxMDk2MTAwMDFCRkM5ODlCNzIzMEFFRTcyOThFQTMxMTMwRjM4OTVGNTMKKzoxMDk2MjAwMDZDOUFBNzBDQUNEQkU2MjU3QjNCMTA1Q0Y3RDJERkM3NUUKKzoxMDk2MzAwMEE4NzM4NUU3NzM3OEI0NzVBQkQ1RDZBRERGOEUyRTgzNkUKKzoxMDk2NDAwMEY3NDlGODNERDFBMUQ5NjE2NTVBMUMxRkZGNDBGOTQ0ODMKKzoxMDk2NTAwMEE5MUExRkNBN0ZENUQ3RDE1RDA2RkU4NzIxOEZCMDgzOTcKKzoxMDk2NjAwMEYwQTdBRjI3MzgxMTdEQzg5NzkxQTA0NDM5QzMzNkU2REIKKzoxMDk2NzAwMDIyRkYzODcyMTNDRkM3NThDODk0NUQ5ODFGQjQzMDZBNjAKKzoxMDk2ODAwMDNGOTFEQzRGMjQ0RjIyMzgyMjlCREQ1QURDMjQ0NEZEREQKKzoxMDk2OTAwMDJDQ0VFM0ZEQjAzMkVFRTdGNUQzN0QwQ0RBMjdFNTNGQzMKKzoxMDk2QTAwMERBNUM2MDRBNjJGQjRDMTY0MkZGMDlGQUNCNDE3RENGN0YKKzoxMDk2QjAwMDM2MjU4RDMzNzJGMEI4QTlGQTMzQjcxM0I1RkQ1QkQxRjcKKzoxMDk2QzAwMDE5MEE4NTkyRTRGNDZGNzJCODlFM0MxMUFDRUNCMjhEMkQKKzoxMDk2RDAwMDRDOERCRkM1MkVCRjJBMjVFNUM1MUVDRjczMzU1OEM1OTUKKzoxMDk2RTAwMEM1RjRGRTc0RkRERDZGMjdDNjk2M0Y5NTZDMjc3QTM3NkIKKzoxMDk2RjAwMDM0M0U3NUY4QTIyNDNCMzFENkY4MTRDNTE1RjVGMjU5NUQKKzoxMDk3MDAwMERBODlDRkRGRDVGODU0MkJDQ0VGMUZBRjdFODNGMkM3QjkKKzoxMDk3MTAwMDRGMzQ4MUMwMDQzQ0ZBQTNEM0Q4OUI3RTk0MEYzMkU5MjYKKzoxMDk3MjAwMEFGRTIwNkYwQTgzMEY5NUI1MkM2MjJCREJCQTMwNUFBODIKKzoxMDk3MzAwMDk0OTQyRjdCMkM0NzIxQjhGREE1MkFFRDk3NDFEMzJFNzkKKzoxMDk3NDAwMDc0QzVGRDUyNDg0MEJDRERBRUM1Q0Q4MDcwQzdDRUY2QjUKKzoxMDk3NTAwMDI1QjdFMzdFODgzRTlFRDMyNTEzMUMwRTdEM0MxNjZBRkEKKzoxMDk3NjAwMEE2RkNGQTk5OENGNDg4OUUwN0EyRjNCNURFQ0ZCQjM5MkMKKzoxMDk3NzAwMEM2NzhERDMwRjhGOUREOUNBQUMxRkMyQzhBNERBRkRGM0MKKzoxMDk3ODAwMDhBNzJFMjI5OTFGQ0IwRUYwNDZGQTJGN0U2NzhDMDg5RjMKKzoxMDk3OTAwMDFDNkUxRjhFMTAyMzI3NTAyRUY0MzQzQ0ZGOUQxRjQwNUIKKzoxMDk3QTAwMEJCMzVGQjlDMjE1NEMzQUJCRUZGREU4RkFCMTRDNDEzOEYKKzoxMDk3QjAwMDVGRkZGOTRCMUJFRkFDQzI3OThEOTY2NERBREYyOEUyQ0MKKzoxMDk3QzAwMDcxMTg0N0IzNDBGRUFCQkJDNDExREUwN0NGQjcwM0I1N0EKKzoxMDk3RDAwMDIzNzI5M0UwN0EzQjUwNEZFNTkxMzMzODVDMjdBMENGNUEKKzoxMDk3RTAwMDc2MDVEQjZENkYyMDdGRDFDN0Y3QkQ0RjI4MEE5REVGNEYKKzoxMDk3RjAwMDEzM0Q4Q0VDMDlEMUM5OUY5OUI5REMyRUNEQ0NFNTc4MEQKKzoxMDk4MDAwMDc2NkI0RkQ3Mjk4MTE2MDlFOUJBMDlGNzJEQTQxOEU1MTcKKzoxMDk4MTAwMDQxQkI0RTQ5RjRERTIxMDg5NkY2OUFERTlGRUIxNDA4MTAKKzoxMDk4MjAwMDY3QzQ5N0M3RENERTQxRUY3MTNFRDg1RUY0MzM4MzdEQjkKKzoxMDk4MzAwMDkzOEZFREFCRjBDOUU5REQ3NUNBQzNFMUYwOUJGQjQ5M0QKKzoxMDk4NDAwMEU3RUYzNUZFMzNDMzcxNjNDRUI0NjJDNENCREIwMTc1ODEKKzoxMDk4NTAwMDQ0MkU4RjZGNzMzOUVDN0RGMkE4MzA3RTM4RjI5OEU3OTIKKzoxMDk4NjAwMEVCNUY5MTI3QjkyOEFFNzdBQjEwMUYwREYyQTlCREVDQzUKKzoxMDk4NzAwMDQ0MUJDOUFEMTI1NzEzOUU5MzRBQjI5RjA0N0VFRTg2RDUKKzoxMDk4ODAwMDlGQUIxOEIwNEZGQjJFOTk1Mzg5RDE2QkE2REMxQjFBRTYKKzoxMDk4OTAwMDZDNkZCRDVFRjlDOUJDMzk1OEQwQ0U0RjdDNTc5N0JEQUYKKzoxMDk4QTAwMDMxMjg4MzNERjc5QTU2NUNBNDhDREM4MEExRkUyQkFCNUIKKzoxMDk4QjAwMEI5N0RENjg4RjY1OTg4RTQ5NkMxRUUzMkRCNjc1RUQwNzIKKzoxMDk4QzAwMEY3NzM4MDJFOTYwNjI1MTlFOUMyNkNBN0I1NTdDRTIzRUIKKzoxMDk4RDAwMEJCQTYxREVDMUFDQ0Q3MUU2Q0E3NzE3OTczNUJENEM2REUKKzoxMDk4RTAwMDU0QThGNzRDQjU0ODdFQzYzMzY1QkQ0RjVDOENGQTYyMTAKKzoxMDk4RjAwMDhBNUQyMTdENTFENjc3REIxQ0ZBM0U5MUM2RjE2QUZFNjYKKzoxMDk5MDAwMDFERDRFN0U3MUQ0MjlFRjg2ODc4Rjc2Q0Y1OUJERUM2MkMKKzoxMDk5MTAwMEE0RjU3RTY2Q0E5QjYzRDEyRkQ4OTUyMkJGNDI4RkQzMTAKKzoxMDk5MjAwMDFDQkM5OUU3N0ZCRDdFODcxMDc3MjJERTZFMTE2REQ4NTMKKzoxMDk5MzAwMEVGQzIwQTFGRTVBRDVFMjI3QTY5OUNDNkFENjJEQzQ5QzIKKzoxMDk5NDAwMDM4NTREMzJGQzkxOUIwMUI5OTU4OURGMzNDRTI2MTlCNDEKKzoxMDk5NTAwMDlERTFGOUMxQTIxQjdCMEQ3NkVFQzJBOEQxOUU4QjM0OEUKKzoxMDk5NjAwMDgxRkRBMzlDQkQxRDY4QjZGRkNDNzZDQ0RBNUNDREFFODQKKzoxMDk5NzAwMDlCQzAyNkEwRkRGMkNDQkFGREVDQ0REMTAzNzZDQ0FDRDkKKzoxMDk5ODAwMDE0RkJERkJBMUQ3MzgxQURFRUU2NUMxRTE3QTRGRDgzRTgKKzoxMDk5OTAwMDU5OTJGNUZFRkU1NTlBN0ZDQTQyREMxRkJDNDQ3QzlGNUIKKzoxMDk5QTAwMEQ2RUI0NDQ4NTIxMDdGREU5QjlFQTQ3MzFEREU3RjhBNTcKKzoxMDk5QjAwMDYxQUJGMUI2RTc3MjdGN0M5NzgzOTFCQ0REMzVDMTQzMjMKKzoxMDk5QzAwMDc5RDdERDM3OUY5QkRCNEJFQkE1REM1RDhERUJGRkE0RUYKKzoxMDk5RDAwMDlERTQ2MDJBRkRFNjhFOEFBQzE0MjZFNjhCMEFGNEQ0NTgKKzoxMDk5RTAwMEQ3NzM0NEQ0Q0Q5MkY1QzM4ODE0NzkwQUJCNzNCOURDMUMKKzoxMDk5RjAwMENFQkU4NUQ5RDBDRkNFOEMzMUQ1Q0EyRkQ1RUI4MTNGMDUKKzoxMDlBMDAwMDNBMUQ2M0Q0NTAzRjkxMDlGMEFEMkVCNTUxREM1RkY3OUMKKzoxMDlBMTAwMDRCREQ3NjdFREVEN0ZFQzhGNTMxRjQ0RjQ3MDA3QzA4N0IKKzoxMDlBMjAwMDg3MDJGMEExMUMyRTg5N0FBODNDMzJFQUE3RTdBODY4MzEKKzoxMDlBMzAwMDI2M0Q0QkEzMDVGNDdENzQ3NDE0M0RDNzQ0NEJFOEZERUIKKzoxMDlBNDAwMDM5RDFGM0E4NUMxNjlENDhDRkIxRDEwQTdBOUUxQkJEQ0YKKzoxMDlBNTAwMDkwOUVFNzgxREVDMjdBRTVEMTVBN0E4RThCNUU0RUVGMTgKKzoxMDlBNjAwMEM3NDdFN0QwRjNGQ0U4NkM3QTg2QTJERkE2RUYxNUQxRjIKKzoxMDlBNzAwMDQ2N0E0RTg4MkVBMkY3MTNBMzJCQTg1QzE5QkQ4MUNBODMKKzoxMDlBODAwMDU1RDFFQkU5MzkyOUZBNDM3QTRFOEVCNkQwNzM0QUI0RjAKKzoxMDlBOTAwMDk5RUE0RDhENkVBMUYyMDVEMTlGRDBGM0MyRTg3NjdBOTYKKzoxMDlBQTAwMDU2NDc3N0QyNzc5RDlGM0Q5QTNERkQ3NDcwOEY0Q0Y5NTQKKzoxMDlBQjAwMEY2MkM1MThFRjIzMTE1MUZCRUExRTk4NTZGRTRBQTRGMzUKKzoxMDlBQzAwMEEwM0NENUVCMUREMUNFMUQ5OEVCQkQ5QTNCNzRERUNERUQKKzoxMDlBRDAwMEQxNUM0RTlGMUY4NDhFREY4NUM3NjlGNTc1REIxQzFDMkEKKzoxMDlBRTAwMDNBOEVDMENBMDM2N0Q4QjdFMkYzM0I5Q0NCREJFRjkyNTgKKzoxMDlBRjAwMDNBQzhERUQ4RDVDNDI4MUZDQzU3RDkyMzUwM0U0MzUwOEUKKzoxMDlCMDAwMDlBNjE0NTQ3OTk0MTdFQkU2QjRDNkVFNDVEOUNBNzM3RDgKKzoxMDlCMTAwMEVGQUQ4M0I4MUY3NTY1QUMyNzMwMERFOTI1MTQ0ODlCNjAKKzoxMDlCMjAwMDA2RkQ4RDY4QjU5MTdCQUQzMDU5QzBCMjUyQ0ZFNDA0Q0IKKzoxMDlCMzAwMDFCODhFNzgwN0Q2NUQwNkJFRUEwNEQ4QkZGRjRDQzlDM0QKKzoxMDlCNDAwMDg4RjA5QzVCM0E4MUVDNTc2RDNGRjlDOENEMjMxOUZBMzgKKzoxMDlCNTAwMDFEQkIxQzA5NDE0Mjc5Qjk5NkIxNjQzQjdDRDc4NkM1Q0YKKzoxMDlCNjAwMEY3MjU5RkQzNzAwNzFEOUM4RjM2QjFDNzMwNEU1NkQyNTQKKzoxMDlCNzAwMEExRDRFMTc5QzI1MTNCRDRDNzMwQzU3Mzc0M0M1Mjk3MkMKKzoxMDlCODAwMDA2RTU3MzdFMTU3QjBDOUY2M0JCRTI3NTFFNzg5RUI3NUUKKzoxMDlCOTAwMDNGRjExOEJBNEZFMzEyQkQ3NTVFMjg5RjdGOTgxREMwMzQKKzoxMDlCQTAwMEYwNTM0NThGMzJDRDA3RTU4OTQ3RDUwM0I4NEQ1MkQ1REYKKzoxMDlCQjAwMDFCOTk5NkFFMjAzQ0YxOTY3NDgwNjdENzZCNjA2ODQxMjQKKzoxMDlCQzAwMDc5Q0FGQjFEMjJCODI1MDNFQjBGNzZEQjgzNDlFQkUyNTQKKzoxMDlCRDAwMDJFRUQ1MTQ1Rjg2N0UxOEQ3MjA1Q0FEOTVENTJBRjNCNTQKKzoxMDlCRTAwMEIzN0NGMEZBNzRFMkJDNzE5RUEwNTdGNjZBRkJFODcyOEYKKzoxMDlCRjAwMEQyN0E1NDA1MDUzRDFFOTgxN0FDMUE4ODA3NzZCNjNFRjIKKzoxMDlDMDAwMDQ3RjFDMENFMzRCOTE2NDM1RDdEOTczMDc5Qjc4Mjc0ODEKKzoxMDlDMTAwMENDRkQ4NEI0QjY5MUE0OUY3NEJBMDNGQzFBRUM0OUI3ODYKKzoxMDlDMjAwMEQ2RUZBRTdFN0JEMzFBQkY1NUZGQ0JGMDdCNTBBM0U3QjgKKzoxMDlDMzAwMDU0Rjg3RDFBRTc5MTc3NjYzRTlFMUVFNDc2MTVGMDcxMjIKKzoxMDlDNDAwMDVEMzAzQjc1QkQxNTQxMkU0RkNENzhERTI1QzlFNzEyM0QKKzoxMDlDNTAwMEJFQkNDQzE2QUIxODU4Qjc2QjM0RkEzRTEzNUUyM0ZGNkMKKzoxMDlDNjAwMENCRjA3QTUxNzA2OEJDQjI0QTNGOEYzMzZCRjk2OUE5NjcKKzoxMDlDNzAwMEU0Q0Q5MTE0RTc0NEJFQTdFMTMxNDlDRUYxNzhBOTBDQjcKKzoxMDlDODAwMDcyNkU1NDZBMzk1NzhCNzA2NTBGMjFCRjUyRTQzQkFDM0EKKzoxMDlDOTAwMEQ3RThCQjNCM0IxQzBCNjY5RjM5QUU3RjlCNERBRUM1RTcKKzoxMDlDQTAwMDdDOTdEODc4NDY3RTAyRDg5N0FEOThCRjMzMjJBNjRDRDEKKzoxMDlDQjAwMEEwNkQyQzE0Q0E4OEM3MDlFNzkxOUY1RTAyRjY4NjM0MEUKKzoxMDlDQzAwMDgxNjFBQTYzMDI5RjU3NTQ2NkRBMTY5NzYzNUU4M0M2NjIKKzoxMDlDRDAwMDZGRjJBMjYwMzJCRkU5RkE3RTgwMUY3NUJBQzhFQUE0QUIKKzoxMDlDRTAwMDczMTY0MEFGOTg0RkQ4QURFMTY5QTAxRjFFOEZEODcwOTIKKzoxMDlDRjAwMDUzN0U2NzdCOTIxQ0VDMEMxNTUwNTlBRjlGOEE3RTVGOTgKKzoxMDlEMDAwMEQ3RTlCN0Y1MzlEQUVGQkZBMkRBM0FERkU0Q0Y0MTUxNEMKKzoxMDlEMTAwMENCM0JFQTUzOTFDRTYzMzU0Q0E2RjNDRUFEQzc0OTNFNUIKKzoxMDlEMjAwMDY1ODI3QzEyNEE3ODc4MDhDNzJGOENBNkREODc3MURBQTUKKzoxMDlEMzAwMDg3ODMzOTlBM0YyRUE3N0REM0Y3RkY4RjlFQjc4MUFGRDgKKzoxMDlENDAwMDRFN0U2NkI1REM4REU3MkE0NjgwMUU1MjUwNEU1NjAzODUKKzoxMDlENTAwMEVDOTVBOEU3MUNCNEVFMEFFM0VCQTg1NEIzNzg0MjIwRDQKKzoxMDlENjAwMEJDMjVEMDZGOEVEOUY4Rjk4QzIzOEUyRTk1RjQ4RTIzRDYKKzoxMDlENzAwMDUzQzZGQzkzRUVFQ0M4MTNDMTIxRjg0MkY2MjgxNUI4N0YKKzoxMDlEODAwMEE4QUYwNDU3Q0RGNEU2NjE1RThFOUM4NkU1OTdBMDdDNzMKKzoxMDlEOTAwMERCMTRDQzEzRUE2NTVBRjkzNkVGRDQyRjFGN0Y3ODY1QjAKKzoxMDlEQTAwMEM3OEEyM0I4NEY3NTYxNTAzRDhBRjAwMDVEQkY4Mjc0NDkKKzoxMDlEQjAwMEFEOUUyMzRCMTQxRjFFRTZGRTkzQ0U5RjAzRkMyNDU3M0IKKzoxMDlEQzAwMEU4RkNCNEE4OUNFNEUxNUJDMUE0RkRBQzU0RjZDRDJFNDQKKzoxMDlERDAwMDREN0U3RTEyMUNEQUJFRDFFOUZFQUNFRDFCMERERTM3RTYKKzoxMDlERTAwMDM1Qjk5NDhBRkY2NzNFRjFGQzhFM0Q2QzIwRkVFN0NCQ0YKKzoxMDlERjAwMDdGQjE0NzUyRDBERTlFQzZERTlDODg3MUFGMUU0RUY3MDMKKzoxMDlFMDAwMDhDQzdGOTU0OENGRjAxMURCODJCNURBNkI4QUQzMDQzNEIKKzoxMDlFMTAwMDhCQkIwQzE5QUZENUUzQzk3QUJDNEY4RkVCQTU2Qjc0MjQKKzoxMDlFMjAwMDg1MTcwNkEwMUU0RjlGMjI0QjhCQTlCRjVFNzYxNUU2QjUKKzoxMDlFMzAwMDM3RTVEOTBDN0M4RDcyMEJGN0U3NUQ2RDU5RDJDOEYyMEUKKzoxMDlFNDAwMDgxN0UxOTZCMjIzOUQ1RDlDMEU0RjY0Q0JFRkY5QTAxNDgKKzoxMDlFNTAwMEYyQTU2MzNEMjMzRjJGRjY4QzQ4RkQ5RjU0NkRFRjYxQzMKKzoxMDlFNjAwMENFRjdDOTRBNDAyMENBMDU5NTI5NzI4RTc2MEU4MTg4QTAKKzoxMDlFNzAwMDVDMjY3QTc1MzJENjg1RkUzNkZCNTFDOEU1QzAzOEY3QzgKKzoxMDlFODAwMDY3MDI1MzAxRUUyMzlGODlGNDk0MzBDMjBEOERBRTA4MTIKKzoxMDlFOTAwMDU1ODRCMDcxNkQ0Njc1MDhGNzAzQzUzN0ExMEM3MEQ2QUYKKzoxMDlFQTAwMDY3NTQ2NzYwRjlDODkxODkyMTY2MTFCRkJCM0FCMkM4OEYKKzoxMDlFQjAwMDEwNUYzMkUzQTlCRkRFNzdEQTI4NUY2MUU3MTlGNjNGNkEKKzoxMDlFQzAwMDJGQ0E3M0U4NzZFN0U0M0NEQ0ZGNUNEMkQ3RUE1MDA2QTEKKzoxMDlFRDAwMEY2M0ZGNTdEQkRCQ0QyODcyRUM1N0I3NkYyNTY3MkZCNzAKKzoxMDlFRTAwMDMzOUZDNTlCOTNFREE2QTRGREM1REFCQzJBREM0RkVGREEKKzoxMDlFRjAwMERGNUZFQzE5OTNCQ0JGQjgyNkZGMTYzQ0JBN0Y0RkZGNUIKKzoxMDlGMDAwMEZFNjJBNDEyRUJBQkZFQUUwQUE0NEYzRDFGRjY4ODgzOUYKKzoxMDlGMTAwMEVGMDNCMDg5NEYwNTE0MEJGQTU4NTBGMTc4MzZEMUEzRUUKKzoxMDlGMjAwMEU2NEYwQ0ZBQUVDNUNEQ0M3RUYwOUMzQzYzMUNGRjY0QzIKKzoxMDlGMzAwMDY4NEU0NjAyM0ZBNjg4RTNFQkYxM0NERDBGQzY3ODlERjQKKzoxMDlGNDAwMDZDQzk3NzQ2RkNFQkUzMkYxMEI4MUZDQkVDMDJDOTNCODIKKzoxMDlGNTAwMDVENkY4MjNDNTk4QUY4ODY2NjE0OEY1NjlEMDJFNTZCQzgKKzoxMDlGNjAwMDlEMEMzNTJBRTQxN0E1OTAyRkZERkIwNjJDMzFEQTZBRUIKKzoxMDlGNzAwMDlGNzU4MTk2Nzc2MjdFRkZBMzNDQUU5NzE2RDg3OTlDMzkKKzoxMDlGODAwMDUyQjg3RTY5MDRDNzVEOTBFNzEyOUM0OTc2RDI4QTNDM0MKKzoxMDlGOTAwMEFFQzdGNUZEMTc0N0ZFQTkyQUM0QjNDMzExNTFBQ0U2RkQKKzoxMDlGQTAwMDZEREU0NzU5ODFCNjYwMTVDNzUzQzg0MkVGQTVDMkQzQ0QKKzoxMDlGQjAwMDUxN0IwN0VEQ0IxRDVEMkFEMjc5REQ5MzkxQzk3NEVGRkEKKzoxMDlGQzAwMDQzMkFCOUYwMEFEMkNGNjhDNkU2RTU3MzNEMzRCMDhFQjUKKzoxMDlGRDAwMEQ2NzhEM0YzNjRDQ0ZCNTVGRERGMTdCOUU5RkM4RDM5OTYKKzoxMDlGRTAwMDVGRTYyMTBENkY0RjY5NzhGOTU3RTdDQjNDQTVFMUVGQUMKKzoxMDlGRjAwMDY5MkQzRUEzQzdCM0FFNDgyMUVGMkZCMEQ1M0Q5MEM3MjIKKzoxMEEwMDAwMEUzOEM0M0M2NjVDRUQzRjM3RDM0RkNCMDAzNjNFOTVFRDUKKzoxMEEwMTAwMDhFMkQzREY2Qjg1QjQwNzg2Q0I0N0ZEOUYwOUY2MjA4MTYKKzoxMEEwMjAwMEVEMkZCRDlERDcyNDJGRjRGQzFEQkRFQzM5MjVCMDc4NTQKKzoxMEEwMzAwMEQyM0U4MjQ3RUFBMjM4QTlFNzk0NDRFRkNERkM3NzVCOTEKKzoxMEEwNDAwMDVFRkZGRTIyRjE5RkJFMkVBOUQ2NTk1RjE3RjNGQkZCRTAKKzoxMEEwNTAwMEI0NzUzOUJBRTg0RjQxM0NFRkIyQzVDRDJDRjM4OTU4RkQKKzoxMEEwNjAwMEJFMzFGRTZFQ0UwMzQ4QjVDRkZEOUFENkZGQzlDOEQ0MjcKKzoxMEEwNzAwMDVDOTRDQjBEOEVEOEU4RTFGMEJEOEU5RjE3QkZGOEEzOUUKKzoxMEEwODAwMDBCRjk2Q0NCMjlFNzBDQUJGNTc4NDlEMzRGQTA0RjM3RDAKKzoxMEEwOTAwMDI1RUY4M0ZBRTYzRkRGOEFCRDdBMjRFMzNFQThBRTRGODAKKzoxMEEwQTAwMEY1N0Q1MDRGQTU3OTFGQ0Q3QTFGNzQwQkIzOTY4RkE5RkMKKzoxMEEwQjAwMEY2NDEwN0VEN0Y2QUZBRjZCM0JDMTRGQjlGRTU0MzlGQjgKKzoxMEEwQzAwMDY3M0Y5MEM3ODY5NUY3NzFCNTgzOUY5NzM1QkZFRkQxRUUKKzoxMEEwRDAwMEY4RUU2NDY0NzNEMTVEQzA1NzM3MkM3MjUyOTY1MjYyQTkKKzoxMEEwRTAwMDkxOTNGOEIwNzE5MTlCRTJCMjhEMTUzQ0RFREI3OEE3QkQKKzoxMEEwRjAwMEEwRURENzE5RTNCMDRGODNCQzU4MDlFMzNGQUJFOTlEMEUKKzoxMEExMDAwMDM3NTk3ODEyREFBM0IzMkEwNUMzM0U3OUI4REE2RDI4MzUKKzoxMEExMTAwMENGNUZGQTkzQTdGMURFODQ2N0E2RDgxNThBM0Y0MzVGMjUKKzoxMEExMjAwMDMxQjQwQkFBNzk5RTIyNTNGQTZFQzMzOEI3MUU3RkQ2N0MKKzoxMEExMzAwMEQ3RkY5OUVBMzdFOTFFQjQxOEQ4RjlBMzQzMTg3RjE2NTgKKzoxMEExNDAwMDg5QkY5RTc5NjEyMkJGOTc0RTE4RDgwRjU3QzA0RUQ4NEQKKzoxMEExNTAwMDcyQzEyOENBRjc3OEI5RkM1QjE0RTdERDgyNzE3MTk4ODcKKzoxMEExNjAwMEU5OTYyRkZFMzg4M0U4MDg5NDcyMENGOTc1N0M1NjFDMkEKKzoxMEExNzAwMEU1NjNFM0I4MDkzOTQ4OTcwN0M2N0ZFNkMzQjhFOEVCNUIKKzoxMEExODAwMEI3OUNDQ0M2NzVFQTVERDc0NDc5MDdFNjc1MzdDNzk5QTEKKzoxMEExOTAwMENERjFFNUIzOEQyNzU3RTcxQkU5RTE2OTUzM0M1OTk3QUEKKzoxMEExQTAwMDU3NjZGOTkxMTQ0RkFFQ0YxRjQ2M0M1OTk3NUJCQTlDNDYKKzoxMEExQjAwMEQwRTVEN0NCRTVFREFGRUU4NjdGQkUxQzcxMTI0Q0FGN0MKKzoxMEExQzAwMDY4RjNFRUU3NEI4RDJFNUZENkY5RjAwQjI3RDkyMzA3MDYKKzoxMEExRDAwMEM2M0Y0Q0Y5NTY3QUJERDZCQzRDQTJBRjZGOTVDN0VEQzEKKzoxMEExRTAwMEI0M0Y4Qjc5MEE2NTAzRUIzMjNGQjJCQ0JGOENERDdFOTYKKzoxMEExRjAwMDdCRDlGNTA2RkFFODk3NTM2Nzk0NjM0M0NCMjk1NzNFMUEKKzoxMEEyMDAwMEI3QzM1MkU1NkJGNkE0RDQzRkEzQzk0RUY1RkNENTFFRTcKKzoxMEEyMTAwMDc3OTU3Qzc5M0RENEIwRTgwRjBBQjY4M0U3MEU2QTNGQTQKKzoxMEEyMjAwMERFMTE4OTVCRTgyNzMzM0M5RTUzMjI4QjRGNEM3RUFGNzcKKzoxMEEyMzAwMEYwRjdGRDdBQzA0MURGNjM3NUNBRkFGNTAxNkU0RkI3REEKKzoxMEEyNDAwMDEwN0ZDNjlDQjhFRTUyQjZEQThBNzQ5MDk3QURCNkU1MjgKKzoxMEEyNTAwMDQzQkJERjA2RDQwREY5NDlGMkI0QzVDRUY3MjM0NTFCNDUKKzoxMEEyNjAwMDhCM0M2ODgxOTdDN0YyMzVCQ0IwNzAxMEZCNkJBQjM1ODcKKzoxMEEyNzAwMDlFRTdEMjlGQkZDOTk3QjRGMzE4OTM4MjY4NUZCN0JDQkIKKzoxMEEyODAwMDUxMTE0NEZFMzlFODlCNDRGNjc2QUE3NURCQTZGMzEzMTgKKzoxMEEyOTAwMENBQUZEMTAzRkVDNDU2NkRCRDgxNDU1NURDQzc2REIzNTEKKzoxMEEyQTAwMDg3ODNDOUYxQzZBREY5OUNBRUQyQTczRUQ0ODM3NjczM0QKKzoxMEEyQjAwMDhCNkNBMzNDQzExNjk5RTc1RkI3N0FBNTE5N0JCNDc2N0UKKzoxMEEyQzAwMDAxNDMzQjQ5M0Y0NzQ1Rjc2NTQ4NUU2MzdFRjU2MzY4NTgKKzoxMEEyRDAwMEVGNTRBNTlFRTc2M0Y5REMzRkI0QjNDNDFERDVDMjgwM0IKKzoxMEEyRTAwMDVFQjExRkFGNzVEMUZEMEY0Qzk1Nzk3RTUzQzg5MDRGNkQKKzoxMEEyRjAwMDZERDdGNDRCOUQyOTVGNDM5NEJGOUNERjU2OUMxREU5QUQKKzoxMEEzMDAwMEM2RjUzNEZCNkQ4NzAyRUE2M0Y4M0UyQUM1OUM0ODFGRjgKKzoxMEEzMTAwMDUxOTczNURGMUZENkQ2QjU0NTlCQUZGOTVFNTVEMTc0NDEKKzoxMEEzMjAwMEVGODM2OEJBRjcyMTU2RDdGNENCNUVBNEI3RjU0RUI5RTAKKzoxMEEzMzAwMDI1NDBGNzNDRDBCRDBGNTFCQzcyMDk5RUZGNzBGMzdDRTUKKzoxMEEzNDAwMDE2RjBGRjI2RjNGMzA2QTE1RTk0QUYyQ0U4QTI3ODU0MzIKKzoxMEEzNTAwMDQ3QTFBQTE2NDI1OUY0RDk3NkFGODdGRTVBRDQzQTE1QzYKKzoxMEEzNjAwMDhGQUU3NDc4NkQ5REI4Q0Y5NzkzMTc3OTBERTczMUNEODcKKzoxMEEzNzAwMDI3OTFERUU5QjgyQzhERjQxMDdDNzc3MzM5QzI2NDYxQzMKKzoxMEEzODAwMDEyRjk4Mzc0NjkwQUZBRTA3OEJFQ0MxRTc0NTAzQ0FCQjMKKzoxMEEzOTAwMDI1QzI3QTlEQTNGOEY5N0ZBNEY3NUE5NjM4NTI1RDgyQjgKKzoxMEEzQTAwMEY2QjZBQjEyRjE3NDI0MzQzMTIzNjIyMTI3RjRBNzc5NzUKKzoxMEEzQjAwMEZGRkZENUVGQkQ1NDRDRjlBQTYyRTRBMzdDREFGNzZGMzYKKzoxMEEzQzAwMERDOEFGQkZBNkJGNjhCMjFEQzQ3RjhDRUY3NUYxRUMzMDUKKzoxMEEzRDAwMENGMUIxOUY3OTlFRkY2RDRGNEEyM0U4QjdBMUQ1NEFGMzgKKzoxMEEzRTAwMERCMzdBOTAzRjFENDIyRjgzQUQwREY2RDc5RTNGQTlGODUKKzoxMEEzRjAwMDIzMUU1QjlBNzk5Q0RCOENFNzgzQkVFRkQzRkQxQTI3ODMKKzoxMEE0MDAwMDYxMzlCMUJFRjk3RTBERDY3MTNENUYyN0E3OEJGNjJENjAKKzoxMEE0MTAwMDYxQkVGNjgyMkFCRThFMTQxRjNDRTZBMzdCQTA0RTFFQjAKKzoxMEE0MjAwMDM5RTA0NUY4QkVDMkJDNjVFQzM3RjVCQzBCNjVEMjU3QzgKKzoxMEE0MzAwMDFBRkQzMDI5QkMwOUU3RjUwM0QxRDdEMTFFQzA3QkQyNjQKKzoxMEE0NDAwMDYwQkQxMUVFNDdFQ0U0RUZERkVENDlBNzc1OEQwMjdDQUUKKzoxMEE0NTAwMEI4QUVBMkFGNUU0NTk3RUNDM0ZEMjJBRDczNTQ2QUEyQkQKKzoxMEE0NjAwMDc5QjE5OEM0RjZFMkZCNDczRUY5RjE4NTQ4MDc2QTE2RDAKKzoxMEE0NzAwMEVENkE4OTQ1NEQ4NDk3MEYwMTJGRUIyREYwMDJGNDMzREYKKzoxMEE0ODAwMEE2MDBGREU1NDc2RUEwN0UzQTFDMkUxOTJEOUIxNkRGMTcKKzoxMEE0OTAwMDI0M0FBRjNDRENGQjQ1MkEwQTg0N0U3RjRCQkI1RkE0OTkKKzoxMEE0QTAwMDAyRkIxRDU0NUZGM0IzRDBERkM2RUZCNTMyRkIzOENFRUQKKzoxMEE0QjAwMDA2RjA5RTJBN0Y0NTJEMzBEQUNGQzNDODVGNTEwQjJDQTIKKzoxMEE0QzAwMEZDQkJBRkIwQUU5NzE3MEM0OUNGQzY3NTZENzFGRERGMDEKKzoxMEE0RDAwMEU5Njg2N0E5NjI3QUM4NUQwQzY1NUMyN0M0M0ZBRTEzNjIKKzoxMEE0RTAwMEFFOTcxNkI3MjExNUE0MjAxREM4ODkwMkE0ODMxQkQyREMKKzoxMEE0RjAwMDQzNDg5RjY3OTIxQjEyRTNFQjZFOTc4MDlFQzFBRTczMzkKKzoxMEE1MDAwMENBOTFBMzc0NzY1MThCRjdFOEYyQzRDQzY3MkQyRUEzQzEKKzoxMEE1MTAwMEJDNkFEMUVGRTUzQjM2M0M3OTA1RjRCMjAyRjE2MDk2QjYKKzoxMEE1MjAwMDVCQzNBNTkzRUYwRkE2OTNFRjBGNDUyNzY5NzlFMTI4NDkKKzoxMEE1MzAwMDdFNDczQzE1NENBMDc4QzVDRDU4M0U3MjQ0RENFNzE4RTgKKzoxMEE1NDAwMDg5RTNGMUI4NTk1RjFFOTM3NzI3RTU2NUU5RjA2Q0M2OUEKKzoxMEE1NTAwMENENkVEMkNCM0M2RjRBNkE2MDBDRjNFMEZDNjUyMTQxQzIKKzoxMEE1NjAwMDJFMUYxNjFENkRGRTlBRTlFODhFQTFFNDgzOTdGNUQwQTMKKzoxMEE1NzAwMDc5OEQ1NTdBN0VDRUJFQTFGMzczQkVBQUZFODFGNUJDNUQKKzoxMEE1ODAwMDBGRTE2OUYxN0Q5RkU4NzM4M0REMjVGMzdCRDRDRTZFMDcKKzoxMEE1OTAwMDVEMUYyQzEwQ0NGNzBCM0Q5ODhDQjdDMUVCMUFEOTg3RjcKKzoxMEE1QTAwMEVCQTgxNjRDQTI3QjhDRDg5NDQ1NjQzNzc1NjdBQkM3NzMKKzoxMEE1QjAwMDMwNUY4QzQ5MjE4MzVDMUNDNDNGOUFEQ0ZFQzEzOTBBQTAKKzoxMEE1QzAwMEU1QUJGRUE1NTk5MzczQ0Q0RTE5RURGMUM3MDMzN0ZDRUEKKzoxMEE1RDAwMDBFRUJERkNFOTQzMEM2NDM2QjZDNkIwOTRGMUZDMkZDOTEKKzoxMEE1RTAwMDc2ODc0OEFFOTZFMUJFNEY5NEE1ODUzNDNERkExRjA4QTQKKzoxMEE1RjAwMENGMENBNTU5Qzg4MkY3ODEwNThBOERBRTIxNTVCNjMzOTcKKzoxMEE2MDAwMDVCRjlGMEYxRjBEQzYwM0MzQzM3MTQxRTQwMEVGRUE3MTUKKzoxMEE2MTAwMDQ2Q0YzNzIyM0RFQkU3RUQ1M0M5QzEzN0I0RkVDRjQyRjkKKzoxMEE2MjAwMDBFQkU5MUNDNUY1RjAzRkRCRTNGQjQ3RUZCREFFNUNEOEQKKzoxMEE2MzAwMEE3Mzg5RTU5REU3ODM1N0VGRTZFODg4NTMwNUUzRURDMUEKKzoxMEE2NDAwMDdDMzZCMDM3MTVFNEFGREE3NDE3RDE0RkNCODMwMkU1MEYKKzoxMEE2NTAwMDRCODExRDFFQTFCMkNGNDVDMkU2QTBDRkMxRjM3RkY3NEIKKzoxMEE2NjAwMEYxRUY2MjFEQzdCMzE5NEY0MjIxM0Y5RkI1QUFFQkZBMjQKKzoxMEE2NzAwMEIwNjRDODkzOEFGMUYzOUFFQTA5Qjk1NEM0RkNGRTZBM0IKKzoxMEE2ODAwMEEyNjdCRjY2Q0ZFODc5RkRFOTlBRkNFRkQ3RjMzMzZEOTcKKzoxMEE2OTAwMDM0OUVCRjg4Q0I3NzNGRDgzQjY4MTczMUE5OTdBMTFGNUQKKzoxMEE2QTAwMEZGODMwMjlFQkYwRkZDNDBGNDBEQTM4NDkxMUYzMkE2Q0UKKzoxMEE2QjAwMDQ4QTYzQzJEQ0UyRkQ5MTJCNzc3MzIwMzRDMjA1RDgzQUMKKzoxMEE2QzAwMDc5NjJGMEZFMTNCMDI3RjA3RTgyNENENUQ4RUUwNzY5OTAKKzoxMEE2RDAwMERGMTU1MDZGRjUyRUYyMzYwOTc0MEUzRURDRkQzMzI4N0YKKzoxMEE2RTAwMDY3NjFCRTE3RjA4RDdGODZCMTdFMzY0QjJBNUJGOEU3MzcKKzoxMEE2RjAwMEIxM0E1Njg2Nzk4QjE1ODU1QUJDQ0RDMTgyQTQxRjM1RDcKKzoxMEE3MDAwMDNGNURCRjJGNTAzQzczREVEN0Q0QzI2MUY4RTkxNzE3MDUKKzoxMEE3MTAwMEVBNzlDMjQ2N0REQ0U1NjY5NkYxQjUyMzg1NUMxRkQ1RjYKKzoxMEE3MjAwMEY3RDZENkExNURCREQ2QzdDOEFFNUE4QkJBMTNDQjk5QTIKKzoxMEE3MzAwMDBFQkFENzI2RDQ1REU5QjJCQUFGMjI1M0I1MTlFRUU3MDcKKzoxMEE3NDAwMEY1Q0Y0ODMzREM3QjlCMURDRTMyOTQ3MzFCRjIwREY1QTUKKzoxMEE3NTAwMEYzMjIyMzBEREYwQjk2OUQ2QkY4NUVENDM0QzE1MDFFOUYKKzoxMEE3NjAwMDExQkRDMDUwQkYwNDEwOUM1QzFFQjVFOTMyNDNGREQxNDEKKzoxMEE3NzAwMDFENTcxOUNBRTdFQ0Y4OTZBMUZFRDhGODYyQzNGN0YzQTMKKzoxMEE3ODAwMDdFNzU5REUxRkJCOEFFQjU4NkYyRjlGQjZGMzZENDZGRUUKKzoxMEE3OTAwMDYxRDZGNzc3NzY2ODc4MDU3RTI3MzlENkVDQUQ2QkEwNjEKKzoxMEE3QTAwMERGRDE5MDFEODYzOEZGNzU1QUJERUVDQzQ5NjUxODBGNzQKKzoxMEE3QjAwMDY5Mzk1RTUxNDZGRTcwRkEwNTQzRkFDMzY2Qjk5ODRBOTQKKzoxMEE3QzAwMDFFOUJERjZGMkVFNEYyRjM4M0M3REU5RUI0MTJFOTFDRkEKKzoxMEE3RDAwMDg1M0NDOEE1MEZCQ0FGNkNDMDM5NkQyRUU3NzkwOUZBNkUKKzoxMEE3RTAwMEVGNjI5OEVGRTVFRkRGQTc5NDU0OUFDRjgyMkMwN0IzN0UKKzoxMEE3RjAwMDNBMUY3MDVEQTE2MkI5QkZEMDJBODQ1Q0I4NTc5NDBBMzEKKzoxMEE4MDAwMDZGNDc4Njg5QjdFRERBM0NCRTJBREU4RTA5QzYzODEwNUUKKzoxMEE4MTAwMEVBOTMwNzJERTA3QTQyRTMyQkQwNTdCRjQ1M0UwNDdERjMKKzoxMEE4MjAwMDU1OTk0NjFFMDZCRkM3RTE2Q0Y1ODkwRTA3RTg5MzdGNzAKKzoxMEE4MzAwMDJGQ0MxRTlDMUZGRTQxQzNGM0Q3RENBRDYwRkQ2Qjc4QUYKKzoxMEE4NDAwMDdENUJBODBDRDcyNUQ1QkVEMjEzODVFNjdEQTVBQTY1NkMKKzoxMEE4NTAwMDI4RTcxNkY4RDI4NEU0RkI5QUY3NkJGNUY0Nzg3NjRCODgKKzoxMEE4NjAwMEZBNjdCNEFGRDRFMjA4OTUwRDY3NUY2OTdGMjFFM0Y3MUIKKzoxMEE4NzAwMEUwRTJGQTY2MjdBREFCNUQwRENBOTZGRTlERDk4RTYxMEEKKzoxMEE4ODAwMDRGRTAzRDE4MzFBRjQ0NzlDMzY2RkYyRUFBQzk2REREOTQKKzoxMEE4OTAwMDlGOTMwRUQ2OTJCRkRGRTIxRDQ5NzkxRjJERUE1QUQyNEYKKzoxMEE4QTAwMDk3MUQyOUZDNUNEMDk3QkRCODNFRDM3QzM3MUFGQ0I5MDQKKzoxMEE4QjAwMDgxNzg4MDRBRTM0MTVCQjI5QjVBOTJGQzdGNkNBN0RFQjEKKzoxMEE4QzAwMENERUZENUZFMUFGQ0UwOEYwQUNGQzJGRjU3MThGNzgzRjEKKzoxMEE4RDAwMDRGMzI4RUE3OTNBQThERUM4NDkzNjAyN0EwRkM2RDkzRDIKKzoxMEE4RTAwMDE4RUQ3QkM3MkEwNUM1Q0EyRkVFNThBRkQ5ODdFQjM5QkIKKzoxMEE4RjAwMERFQ0NGQkRENjYzQkUzOEFEMEY1ODRCNzM2QTAyNzU3NzQKKzoxMEE5MDAwMDI1Q0U5RkRCQkY2RDc2N0VGRkE2RUMwRjA3NTFERkY2RUQKKzoxMEE5MTAwMDY1M0JEODZFODBGNjYwMzY4RkNGRTk3OEY5QjJGMjI4QzEKKzoxMEE5MjAwMEE3Njg5MEZGOTM1MzM0ODRGRjczODk1OERFODVGN0I2ODgKKzoxMEE5MzAwMDlFMzhDNUUzMjIwQTFFNDUwQ0UwM0RFNDdDRkRENjNFNzAKKzoxMEE5NDAwMDMxMjdCNjA2RjU1NDg5RDQ4NEY5RUIyMjUzMzIxMDJGRkYKKzoxMEE5NTAwMDZCMEU4QjJDMkVBMDFDMzNFNkU3REI1OUQzNUQxODhGRDIKKzoxMEE5NjAwMDYzMDFGRTNFQzY1Q0NENjgyNzY1NEMzMUVBQjE0Q0Q1MkIKKzoxMEE5NzAwMEE4QzdGQzMzQjI0QzdBQ0RBOEM3NzIxQjhDN0EyQzJGOTcKKzoxMEE5ODAwMDYyRDQ2MzA1Q0IyNjk4RjQ5QTUxOEY4RDg4RDY5OUY0QkEKKzoxMEE5OTAwMDlBNTE4RjhEREE3NDk1NDlBRjE5RjVEODM5M0I4QzdBNzUKKzoxMEE5QTAwMDZDNkNEQ0E4QzdDRUZCRDU1QTkzNUUzM0VBQjFGM0Y3RTMKKzoxMEE5QjAwMEFGMzc3Q0FGNDhCNDFCQkU0RjNDN0NCQkExNUNENTczQUEKKzoxMEE5QzAwMEFGQTFGRUU0QTNCQjBEREZBN0Y2RkVDNkYwMUQxMEZEOTAKKzoxMEE5RDAwMDFDOUU2N0MwN0I2ODcxMTEyRjdDRjcyMUUzNzdBNjNBMzQKKzoxMEE5RTAwMDMwMUY3RjA1OUVDRjg0NzVCQ0E4RUY2MTQzN0ZBQzgzODkKKzoxMEE5RjAwMDlGNUI4OEMxN0ZCODVFRUZCMDA4REQwMzAwNzJFQzUwNEEKKzoxMEFBMDAwMDAxQjQ1QjFEMTc0MjA5ODZGQUU5QzFCNzcxREY2Njc5QTcKKzoxMEFBMTAwMDUwMjQzRjZFMEQwNjVCOTExRUVFRjdDNTkxMUVBRUREMTQKKzoxMEFBMjAwMDYxM0NGRkIwM0M2RTJDQzc4MDdFMTQ4QzJCMDBGRDIwNTcKKzoxMEFBMzAwMDdEQUQzMEZENkUwNEQ4ODM0NDZGMkIxNEE5MDlFRDRBMTcKKzoxMEFBNDAwMDMzN0RCREEzRDM1NzRDN0QwRUNGNzNFOEYzRDVFNzY3QjUKKzoxMEFBNTAwMEQ3Q0Y5RjZBRjRBNzZBRjRDN0M0NDcwOEVFMTUwNTIyNEEKKzoxMEFBNjAwMEZERkU4RTNFNUYxNUZFRTNERkRGNzdFMDNDM0VEOTJGMzMKKzoxMEFBNzAwMDMwM0ZDMDcxMEQ4QjFEMkFCMDk4Q0ZFQUZEREIxREM4OTkKKzoxMEFBODAwMDlGRTY3OTk5RTc2MUI2NTNEQjhBOENGQjQ4OTc4OERFQUQKKzoxMEFBOTAwMDEwRjFERDBCMjJFOTIzOUEwMkYyRDkwM0ZDQkNERURBQzUKKzoxMEFBQTAwMDI3NDQzQTE3ODM3Qzg4RkU4MjE4NkIyMEJDQUMwMUJDMUIKKzoxMEFBQjAwMEUwQkRFMUJBREQ3QTQyNkI3N0UyQTcyMjlENkYzRTEzREIKKzoxMEFBQzAwMDNGMkExQTNFOUM0MTIzM0ZCQTk1MzQxMzNEMTlGMUVCQkUKKzoxMEFBRDAwMDI5MzNGMkU3OEFENzJFNzVBMEZDM0EwNEY4MTZBNjMwN0YKKzoxMEFBRTAwMEU2MEIxOUY5NzU4NUI4OTJGNkY5NzQzQzJCRjAxRjhFQjgKKzoxMEFBRjAwMDJCODFBOThCRjM1RTBERjM0RTI4ODNGMUJCRUM5MUVEMTYKKzoxMEFCMDAwMDFCMEEyQ0U4RTY0Q0Y4N0RCMEM4QjhERkFFRUZDRkQ1MTUKKzoxMEFCMTAwMDAyNzYxQzE2NzlBNTNBRkVCQUIzRDUzRkEyN0M0Q0U1NjUKKzoxMEFCMjAwMDBGMUYyODNBNkI3RkY4NDBEMUQ3RUIwRjNGNTMzNEE0NjcKKzoxMEFCMzAwMDNGREMzNzBCRkQyOTI3NEIwRkI1NUJDNEZEMjQyNjI3Q0YKKzoxMEFCNDAwMDMwNUU2QjZGRTI3MUJGODFGOERERDcxRUU3NzkwQkUxRjQKKzoxMEFCNTAwMDk0NjRBRTI3REQ5MjFFRTcwOTFEOERBMDdEOTI3MTZFNzMKKzoxMEFCNjAwMDA4RjNBMjg2MUJFN0Y4NzBCMDFFRkI3MDI4M0QwNkY2QkUKKzoxMEFCNzAwMEM1MzEzQzRGQTg2NkU0RDdEQjkwOTlBNDUwMTlEREVGQUUKKzoxMEFCODAwMDhDMjBGMDNDQTRGRjQ2RjgwNkU1RUI5NjY2NjlGOUM3MTEKKzoxMEFCOTAwMENBOTBGOUM3NTc2OEZCQkIxNzA2RDU3RjIyMUNEMERGQzgKKzoxMEFCQTAwMDY5RUNBRkZGM0VCNkNBNkNFQTI3RkQwQ0ZEQzRFQUI4RkIKKzoxMEFCQjAwMEJEMTZCM0Y5M0E1QUI4QkQ0NkZCNEM1RjQzMUNDMzVGQTAKKzoxMEFCQzAwMDhDNzEyRDJGQzc3RjhCODNDNzZEQ0YzNkNFNTY1QzNDRTMKKzoxMEFCRDAwMDI4QkU1NDVDM0M0NDdDRTkxRkFGRTZGMjczQUIyMUIwNjUKKzoxMEFCRTAwMDBFMkE1MkQzQjc3RTBFNTMyRjZGQ0UzNEZBQ0IxQjI2Q0MKKzoxMEFCRjAwMDcwQjhDRTJERTZFQjFFRDFDRUUzRDY2ODY1M0RFRjEyRTAKKzoxMEFDMDAwMEYzMTZERDEzQTAzQzkzOUY1M0QyQ0ZCNUVBRkRENDE0QzUKKzoxMEFDMTAwMEZCQThGRUE3QzFCQTFBQzRDNzg2MTI3RUZGQ0U4NjRDMTcKKzoxMEFDMjAwMEUzM0QzQzI3OEE2QTZCNzA1RTUzQjRGRTZCOEExOTNGMjIKKzoxMEFDMzAwMDM3MzE1MjNCQjc2OThBMTc3Q0FFRDVGRkJDQTg4RTlFRDAKKzoxMEFDNDAwMDc4OEUxNkZEMTI4NzI4NUFFMjczNUFCMTREQkJFRjg2RjMKKzoxMEFDNTAwMEQxNzNCQTdFN0VFRTRFN0VCRUNFN0NFRjAyRjBDOThCMDMKKzoxMEFDNjAwMEY4RkI1MDZGREU2NjI3N0YwRkY0MTE5RDlGNUI1QUMwODMKKzoxMEFDNzAwMENGMjE5QUVGNTM4ODk0Qzk4NzUwQkM3RUMyQ0EyREVGNkEKKzoxMEFDODAwMEU1MTk5NEU3NzBFQzI2Q0FCRjdCNjYyQTkzODVCQzMzMkUKKzoxMEFDOTAwMEU3M0Q3Q0JCQjg1RjVGODVCRUU0MzlCQUM2RTI2MUU0REMKKzoxMEFDQTAwMDZCMkREMUNFRDFGNUE2NzEzREQ2OTdFNzhBRUZCNkYwRTAKKzoxMEFDQjAwMDc3NkZENUU4RjIzNkNEQUZDNUZENjlEQzI3QzdGQkJEQTAKKzoxMEFDQzAwMEFERjZDQjZGMkRFNkZCQzNDMzNENTc3REJCMjMxMjQxRDEKKzoxMEFDRDAwMEJFMzU5RkFCNEU3NTlFQkFEN0QxREI5NjhCRjA4RTY1OTUKKzoxMEFDRTAwMDIxQjRERjczMTdDOEREQjk1MDJGQUQ1RUExRjM4RjFCMDAKKzoxMEFDRjAwMDRBNThGQTE0RkM1RTYxMEJFMUI5OEVDQ0I5RjIwNjNCRkUKKzoxMEFEMDAwMDk0MzM0QjU5OTYwMEU1REVEODFDMUFGRkI2MDYyNjhCMDUKKzoxMEFEMTAwMDAwRDc3REM1RkMzRTg0ODVCNzdDNDRFMzY1NTdDM0Q0MkEKKzoxMEFEMjAwMDE0M0E3NzNFMURGREIzNTgwM0EzN0IwQkNERjNCQzVCRjgKKzoxMEFEMzAwMEEzNUY1NzFCQkYyNzI3QTNENDNBMEZGRkVFNjJEREJGRTcKKzoxMEFENDAwMDBFREY4NUY0NUI1QkNBRjZGMUYzQjNGQzlDMDI1RTRCNEQKKzoxMEFENTAwMDRGRjk5QkExMzREQTE3QkMxMkQ2OERFRjlGRjdEMEZBQ0EKKzoxMEFENjAwMEREMTQ5Q0Y2NTM2Q0E3RjM5QjQzQ0I1MzMwOUYyN0JGNTYKKzoxMEFENzAwMEFGRjhFQ0NFOTNBNzJEQjA4NjM3QTFBREY3MzVEOUUxNkEKKzoxMEFEODAwMEZCOTE4RUQyQ0EzQUY4RUY5NzdFNzFGQUI0Mzg0OUZCM0MKKzoxMEFEOTAwMDY5NDcwNURCNDcyMkE4RkZEQ0EwRkYwNDdDMkEzMjlEMUYKKzoxMEFEQTAwMEEzNjUyRTgxQ0VDM0JBOTQyNkEyMkJGNzk0OTAxRjdGNjEKKzoxMEFEQjAwMDE3OEQyREIxMzFCQ0M3NjU5QUQ2NUU2RDYwMDJGRTlFQkYKKzoxMEFEQzAwMDA0RTUwMjkyOUMzNkZEQkU4NDFBNkE2RDg2RjY5N0UwMTEKKzoxMEFERDAwMEJFNTkwOEYzQkU0M0NCQjBCRjdBNkY5QThDRjE0RDc3NjIKKzoxMEFERTAwMDY5NTMyREFFRDdFMzBCNzkxRkI3QTczODJGQTE5RkIzQjcKKzoxMEFERjAwMDFGQjg3RjZBQ0RCMzg2N0IwNTFDQ0I5RjM1REMyQkMwOEIKKzoxMEFFMDAwMDk2M0ZGQjU1RUUxNTc4QUQ3OEY5QjNGRjEzRjcwQUU4RDYKKzoxMEFFMTAwMEYyMERENDkwMURFREZBQTMyMkJGNDdFRkMzNDdBRkI2QTIKKzoxMEFFMjAwMEUzM0E2Q0E4NjU1RDg4RjdEODY3ODA2N0Q3MDA5RUVEMjgKKzoxMEFFMzAwMDc1RTFDNzc3QTI1REIyMzYzREM0N0Y0RjI0RjYxRDg0MEQKKzoxMEFFNDAwMEYzMzUwRjkzQjFCRDlFNkYyOEIwMzJEMkQ3NzMxQjA0NzgKKzoxMEFFNTAwMEIyMUY5OEQ0QjcxQUNCRjMxRkYxQzhFODNGN0NGOEU4Q0IKKzoxMEFFNjAwMDRCNDUzMUEwQ0Y1NzZGM0RFOUMzRkNENEQ3QTUzRTFGNUEKKzoxMEFFNzAwMEMyRjVFRTJEQ0ZGQkYwRkVBRTU3NkYxMTI5MEY4NUNFMzgKKzoxMEFFODAwMDdEMjdFNTg5MDkyMzM4N0QyRDFBMTEzRTg1RjRCNTcwOUIKKzoxMEFFOTAwMEREM0YyNzI1REI2NzJDOUE0REZBN0U3OTFDMjA0RUI2QzQKKzoxMEFFQTAwMDdCN0ZFNTMxRkNBRUU4QUEyRUJGQTFBQ0VCRjk1NTRFOTUKKzoxMEFFQjAwMEVCNzNGMzUzNDc3MDNFNUM3RTdGQTdBMzQwQzFGMTIzNDEKKzoxMEFFQzAwMDY5MjNBMEZFQkJEQTM5QTA3N0Y3RjlDODhFRDdFMTU5MUMKKzoxMEFFRDAwMDdDN0Y4NTAzRURFMUQ3MUY3MUIyMDRDNTA1N0JFQ0NDMDcKKzoxMEFFRTAwMENCRjUwN0U2NUQ0NEY4RDA4M0UwM0NGNDk3MDIwN0YyMjcKKzoxMEFFRjAwMEQ5NTI4MUY1Mzk4OUI5RDkyMUM0RjdERjM0RkZDRjNDNjQKKzoxMEFGMDAwMDhGQTVBRkNBMEU1Q0RGQTVCNUFDMEZDRjlEMkRCRTUxOEUKKzoxMEFGMTAwMEQ4RjAwM0E4QkYzOEUyMjVCRkRGM0M0RkIzQkVCOTE2NTcKKzoxMEFGMjAwMEVGQjMxMUFDRUU4MTZCM0FGNDY3RTg2NzA5RjQ4M0Y2OEUKKzoxMEFGMzAwMEU3RDIwRUUzRjcxMzg3NkYzOEI0MTNDNkREQjdERjQxRUUKKzoxMEFGNDAwMEY2RTJCNTY3ODhGNzhGMUZBMUU5QTU0OTZDRjJFOTUxRDAKKzoxMEFGNTAwMEE0RkYzMkM2MjlBOUVEMEU1RDFGQkRCQjhFNTE5MkNBNUEKKzoxMEFGNjAwMDdGRTFFRkZCQzJGM0ZENzUzMjNENEYxNTJCQjQxRTJCNzUKKzoxMEFGNzAwMEY2NzcxRkEyREYxNjk2N0EyNkExQkM5QkY5NDRBM0U3QjkKKzoxMEFGODAwMDVCNkMyMEFGNjg1MjY3Q0I4MTlENTQ1NUNGNTc0RDUwQjUKKzoxMEFGOTAwMDdDNkY4QTc2RkZDQkI1REFGOThGQUFBM0U2N0NENUVFNzMKKzoxMEFGQTAwMEM3RkY4Qzc2MUJDQ0ZGNkNFRUVENTkzMENDN0I3QjRFMTMKKzoxMEFGQjAwMDFDOUVFNjQxM0E5OTNENDJGMzdGMjYwMzVFQzRBRjhFNjQKKzoxMEFGQzAwMDk3NTRFRDU2QTVGOEREMTY5RDlGNEU2OTdBNjZDOTlFODkKKzoxMEFGRDAwMEQ5MUJGMjYxRkM5NjQ3REYyOUM2Rjg3MThDNzFGQUFFNzUKKzoxMEFGRTAwMEZBMjlGRkZEOUYyQTZGMEVEMTlCMEJFOTMzMEY5Qjk4MjcKKzoxMEFGRjAwMEVFNzk4OEIxMTc1OTEyN0Q1RkZCODg4N0U4MjQwOEY2M0YKKzoxMEIwMDAwMDkwNzMwQUJFRTFGNDVBODVGNzc2MjI3REJGQzBEQkJCQTAKKzoxMEIwMTAwMDM0RkYzNkYyQzhBREJDRkU5RjFEQjIzMzQ4N0MxOUI0NzQKKzoxMEIwMjAwMEQxMzMxMUI0NERCMUI4NjdDQjdDQkY1ODg3QjFGQzgxMjcKKzoxMEIwMzAwMEJEQjcxOEU1Q0FCNTI2M0ZGNDAzQzEzQTNGQUQ3MUM0QTgKKzoxMEIwNDAwMDQ4QzJDNzEyNDU5RDhFNzkwMDRCNTk3ODAzOEZERkYyQjUKKzoxMEIwNTAwMDdCN0JERTk1M0EwRUZEMTBGOTdEOEZDMDYyODBBNzU1OEYKKzoxMEIwNjAwMDdGN0NFMERGNTE4RTVERjdCQjNCRDM1MThFQkQyNzc1RjIKKzoxMEIwNzAwMEU0RTA3ODJCRjdCNkE1QTMxRTc4NTc4QUE1NjNGQkY3MDMKKzoxMEIwODAwMEUyNUM5RTBERDI5NzIzMDQ0RDBFQUJFOTAyQzhFNEQ1RDUKKzoxMEIwOTAwMDQ0NkFGMEZGMjU3RDFCNkU4NjcxRkUxQkYwOEM3Q0JGMjEKKzoxMEIwQTAwMDdBREZBNzU0M0VBNEJBRkE1ODEwRkJFRDlEOEU3MDJDOUYKKzoxMEIwQjAwMDVGRTQ2RDZBMEVBMTdGNjlFNENGRUI3RTc5Njc4RTQyMTMKKzoxMEIwQzAwMDc5MUVCMTAyMEQ3RjA1RDg2RUY1MUUzQkU1RjlBMjFGNzIKKzoxMEIwRDAwMDhGQzNBQzYxN0QzNDNGNzNGQjM1NUQ2RjNBNTA1RUNCRkYKKzoxMEIwRTAwMDM2RDY1Nzc4RTFFMEVGNjAyMTM5OTBERkQ2RUNEQkYyMUQKKzoxMEIwRjAwMDkxOTg4RUNGRjc1RUMxREY4MzVBNjNCMjRGOTc2OUYyQTIKKzoxMEIxMDAwMERCNENGRjVEMjZCQTA3RkM1MDdDMjEwNjcwRjE5RjYzODMKKzoxMEIxMTAwMEUyNzJCQ0U1RDc3NzhGN0YwM0UwN0I3RkNGNTNFOUY4RkUKKzoxMEIxMjAwMDdCMTMzQUZERUJGNzNDOUZFODZBNUNFODE4RTIxRUExNEUKKzoxMEIxMzAwMDBGMzQzRUU5RDcwRjlBN0U1MkY2MDM2MEI5NTA3Qzg0RjMKKzoxMEIxNDAwMDNGNTdEQTEzRTkxN0MyN0M1Nzc2REE0MzQ4RjMyQjFGQ0YKKzoxMEIxNTAwMDEwNTUyRkRBNTUyRjNCQzkxRTU5RjlDMDQ5QTJEQjk1NkUKKzoxMEIxNjAwMDgyREEyNzkwOUU2M0U5MjhDN0Y1RjU1QUYxQzBERkE2NzkKKzoxMEIxNzAwMEEzOUM1RTkxMjdCMjk5QzA4QUQ3RkRGRTEzNUUxRkU4OUIKKzoxMEIxODAwMERDMERGNTU3M0NGOEM2RjQxRjYyMTlFNDg5Q0I2MkJEQUIKKzoxMEIxOTAwMEE2NzU3NTNCN0FCRDE2RUJENUY1QzY3NDhDQ0ZCN0ZDOUEKKzoxMEIxQTAwMEZBMUZCNDFFRUZGRDQ1NjBCOTI1ODNEQjJGRUJGQzFCQjYKKzoxMEIxQjAwMEM1QzFERTg3ODVGMTY3NzI3Q0ExQkU1OUQzMjUyRTcyODkKKzoxMEIxQzAwMDY0NThBRDVGNjJENkMzOTVGNDlERjJDMkNGQjQ4RTFEQjQKKzoxMEIxRDAwMDIzMThENzhGN0Y3Q0UwREYxRTA2Mzg5NkJERTIwQ0NEQUEKKzoxMEIxRTAwMEM0NzFGRkVEODY3NDA2NzRGMDhFRDRDNEU5RkU2NzZERjkKKzoxMEIxRjAwMDM5QThCRjk3RDk2MzM5MzIzREY5RkI2NUJCQkU0N0Y0MjcKKzoxMEIyMDAwMDc4RUQ1RkJGOTdBM0VEMzdFNEQ5NDgxRUM0RjI3MDlFNzYKKzoxMEIyMTAwMDRCN0YzQThGRTY3OTBEOEIxMDNEMkVGQjE5QkY2N0YxRkUKKzoxMEIyMjAwMDEzRjBCM0FERkM4NEE5MEFFNzFCMjdCQjdFRkNDRDAxNUMKKzoxMEIyMzAwMDk0OUI3ODY3MEJDMEUxNjBGQ0JFQUVFNzc4RkVCQjkzRTEKKzoxMEIyNDAwMDVEOTU5MTZDRTc3QTE0NkVDRkM1NThGQzM1QjQzQkQ3NDkKKzoxMEIyNTAwMDgwNUE0NkI5RjZGRjAwMzUwM0IzMUUwMDgwMDAwMDAwOTcKKzoxMEIyNjAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRTVCRDBCN0M1NEM1REYKKzoxMEIyNzAwMEY1MzgzRTc3RUZCRTQyNUU0QjVFODQ1N0I4NzkxMjI0QjQKKzoxMEIyODAwMEM0ODUyNDkwNDBENDg1NDAwQzBBQjg0MDQ0OTQ4ODRCMkYKKzoxMEIyOTAwMEMwMTAyMDIxMDFBRDYwQTVDRDg2MDAwMkM1MzYyODU1MUQKKzoxMEIyQTAwMDE0QjQwQjgyNDU0NTFCMzEwODZBQzA4RDI4ODZFQTE3MDUKKzoxMEIyQjAwMDQzOEQxNjVCQTE4QjIwMDgwNDU4MTBFQUZBMkRDQUVGQzMKKzoxMEIyQzAwMDlDMzNGNzY2RUZERDI0M0M1QUJGOUY0RkZGOUY3RkZBMDgKKzoxMEIyRDAwMEE5QzNCOTMzNzdFRUNDNzlDRjk5OTlCM0UyODE0QkY5MTEKKzoxMEIyRTAwMEJGOEM2MkVDRTE3ODdEQTVDOUMyNTgwNUQzM0IzRDY2QjEKKzoxMEIyRjAwMDg2N0ZDMjE1ODE0QTQ5M0YxODlGQzM1RjAyNjM3OTA3NjEKKzoxMEIzMDAwMDQ2NzVGM0E0MzE2NjYyMTc4Q0Y3NjczMjc2MTFFQTlGQUYKKzoxMEIzMTAwMEIzNkFERTYzNTdFMjE5M0JCMUQxRDQ0NUI4MTlDQTE4RjQKKzoxMEIzMjAwMDU2NUEwN0VEQUZFMERGNkRGRUIyNTQ4MkNFQTNBOUY5MDUKKzoxMEIzMzAwMDVGMThGNDNGOTdCRTA0RkQ2QzM5OTFCRjBFRkE2NUIxRkEKKzoxMEIzNDAwMDIyMEI4RkU1RjA3MzMwM0U0QjcxNDg2NTc4MzY3Q0FGNDkKKzoxMEIzNTAwMEU1QThCMTA3RDQzQkEzNzQyQzE5QzdEQkZDMERDMUNDMDUKKzoxMEIzNjAwMDFBMkQ2MTdCQTVGRjhBOUQyNkU2NTZDNjAzRkZBRkQ4M0UKKzoxMEIzNzAwMEY0OEQ5MTYxM0YzQUU2RUQzNUFDN0QzRDYzOTVFOTg4MEEKKzoxMEIzODAwMDg3MEExNjJFQUQ4NEYyODREMTlCRkYyRTdFMDdCRUJCQUEKKzoxMEIzOTAwMDE5QkU1M0IyMDZEQUE3QUFGQUFCM0ZGOTM3OTY4RUVEN0IKKzoxMEIzQTAwMDhERkVFN0YxRjhERkM1OEM2NTQxMjExNjg1M0I0MjE4MUIKKzoxMEIzQjAwMDlCODkzOENDNjkzRkZGODU1RjU1M0ZGRTgxQUFCRjBDNTIKKzoxMEIzQzAwMDI5MzRFQTc4MzBGQzYzMDgxQjcyNDVGNEJGQ0ZENjAzRkEKKzoxMEIzRDAwMDkyQkFCNzdGRkZGQjJBRTdFMzFGMThGMDZEMjdFMUIxQjAKKzoxMEIzRTAwMENDRTA3QTA5RjE1NEY2QTVDOUVBMDQzQzk2QkQ3NkM5QzkKKzoxMEIzRjAwMEE4OEI0MjJBMzI2RjcyNTdDNjRFNkZEREYzQzU3RDMwN0YKKzoxMEI0MDAwMDlGRDM3NTg2QTgzMUY0NTU1Qjk4MTBFM0M3N0JFOUI2RTYKKzoxMEI0MTAwMDZGRjJENzQxN0IwM0UwM0QwOEU4MzlCN0ZFN0JBMzBFMEUKKzoxMEI0MjAwMERBQzdFNjMxQUYwOUM2N0YzQUNBQ0VEODAwQzQ5QkUxN0QKKzoxMEI0MzAwMDZCOEYwQTZGNzlGMERDMTM0MkUzRThBOThCQzVEMkREOEMKKzoxMEI0NDAwMDkzNDEzOTM3OEE1OURERjBGRURDMTZEMTJBMjFCRTk4QTYKKzoxMEI0NTAwMDc3OTkyNUE0RkRGQjE1NzU0NzAzRThBMkFENjdDQzZCNzIKKzoxMEI0NjAwMEI0RTM3N0VCN0Y3MzVFMEM1M0UzNURGRkI1NDc4NTc3RkQKKzoxMEI0NzAwMDA1Q0Y4MTc4OUQ4QTc4RURFRkM3RUIyNTk2MTYwRTlGNTQKKzoxMEI0ODAwMDYxQTc1RTk5RDNDNzkxRDYxRUJGMEE1RUNGNTYzMTY0QkQKKzoxMEI0OTAwMDcyRkZGMzNFMTJFMTU5REEwOTFGRUEwNjc1MEQ3MkM5MEYKKzoxMEI0QTAwMEQ4MTc0Qzg1QzdEOUFGOUUyMUZFRkQ2Nzc3OTE4OUMwMUIKKzoxMEI0QjAwMDM3NzMzN0ZEQjAwQ0Y5MEFEMEVBMzUwMUZGQ0U3NTlEMjAKKzoxMEI0QzAwMDI3NzhBOUNERUM2NTA0MzcxNjBBRTkxRENENUI4QkNGMzMKKzoxMEI0RDAwMEMwRkE3ODQ0NkFCNDlGRkU4NkM1Q0MxOTBBRkQ3QTc3MTMKKzoxMEI0RTAwMDg5QUU4RDMwQjQ3MzkyMzcyQzAyRTZCNzM0ODgzRDYwNTQKKzoxMEI0RjAwMDg3RjI5QzQ1ODZCQjJBMzA3QjYwMUE4Q0YzOUMzM0REMzcKKzoxMEI1MDAwMEUyQzRGNzgyRDhFNDNBQTBDRjM5QkIzN0FDNkI4ODdGNkUKKzoxMEI1MTAwMERFNDcxQUM0MzAwOURBN0I1Q0FDQTAyRUE0M0QxRjMyOTIKKzoxMEI1MjAwMDU2NDNERkY3QjBDRUVBQUI0OTFFNDY4OTk3NUZGN0MwQjYKKzoxMEI1MzAwMEY3MkUzOEY1Q0MwNERGRjM1NDdGRkZCQTA3Q0E2MzdBREQKKzoxMEI1NDAwMEIzMDVGMTM0QTNGQTlFMzBBNjgzRUYzNzI0REUzNTE5MTQKKzoxMEI1NTAwMERBM0RCODBGRjA0N0QzQjMxOUJCMDM3RUE3RjNBOUIzMDUKKzoxMEI1NjAwMDZGOTlGM0U5NUM5ODlGMTg5QUI5Rjc1RDc4QkYwNDEwNUEKKzoxMEI1NzAwMDJCMDJCRkNFNThBNUM1Q0Y2QzY2MEY3N0M3QTNEQzFBQzgKKzoxMEI1ODAwMEZDN0M0MkZGNzUxOURERjBERTRDNDc0OEU1NEFGODZFNTkKKzoxMEI1OTAwMEU5N0E2REZERUM4NkQzQzQ1RkIzMDNGOENCODFGQ0Q1QUIKKzoxMEI1QTAwMEJEM0Q3RkJEQTJDOEVENDAzNjEwRjk2Qjk0MThBMjQzOTMKKzoxMEI1QjAwMDdFM0VENzI0QkE0Q0YwQ0U4NTI1MDZCNjBDRTAwQjVCNTgKKzoxMEI1QzAwMDA1MTc4MzdFMkUzNDQwMjM4NDc3NzI5ODM5QTM4OTZGQzAKKzoxMEI1RDAwMDE1M0U1N0YwRDY4QUZDRDdCNzNEM0VEQkVBQjcxRjFBQjcKKzoxMEI1RTAwMEZDMTgzNDI5N0JFQkVGRTlFQkEwNkM3REVCQ0I5NDc3NzcKKzoxMEI1RjAwMDExREVGMUQ3QjhCRkIzRjZFREYzNzZGRjMwOTVDNkI1REYKKzoxMEI2MDAwMERCQzQ3MDVDRTc3NjdGMTRGNzE4QzJFRjk4QUNDOEI3NUMKKzoxMEI2MTAwMEU3MTY5QjZDMENGNURERUU1MDU3MzJENkY3MDY3RTAwMzAKKzoxMEI2MjAwMEJBRDdFQ0ZBM0UxREY1M0Q2MzRCODg4RTlGNEI0NjJBRjgKKzoxMEI2MzAwMDJGMzRGQ0VCQjA4MEYzNjgzMDQ5Mzg4RjhBREQ4MDA0MEEKKzoxMEI2NDAwMDc4QkZFMjlEMjAxN0MzRjc3NzdEM0ZEODExRjJGM0NEODUKKzoxMEI2NTAwMDY3QUU5MTM5ODgzRjQzRDlFNDZEQzhCRjVEOTkwREU3NjYKKzoxMEI2NjAwMDUzRjE2RUNFOEJENUYwRkRGMkZBNDZFMzc0QThDRjdCOTIKKzoxMEI2NzAwMEVGQzc3NEQ0NDdFN0I2MzUxQTUxNUY5RDM1Nzg1RTYwRTEKKzoxMEI2ODAwMDU2RTRERkZCNkIwRDgwRTdCM0ExRDA1OTBGQzYxRUREN0EKKzoxMEI2OTAwMEYwQkNERDE5RDIxMTVFMzgxRUNFMDExRTcwNUU4MDk3OUYKKzoxMEI2QTAwMDUyNTc1QUU3RjhGOEZFQkYxNjFGRTdBN0UyRjdDQjFBODIKKzoxMEI2QjAwMDg2MzAzMTVFOEQxN0MxQzY5Rjg3QkFDQzAyQ0Q5RjNGQzEKKzoxMEI2QzAwMERGRkQ3RDNBMEJCOUY2N0NBM0UzOEQyNEVGRkY3Rjk5NzQKKzoxMEI2RDAwMDZGNDZGQzdGMkI3RDM5QkZCRjJCNDkzNEJFNDBCRTZGMDgKKzoxMEI2RTAwMENGRDczQjFFMjFGOEY1NTAyQjhERjczQUU1N0RFMjdGNTEKKzoxMEI2RjAwMEVERkNGRjZGRTgzREVGQkY3NkJFRDdBMkY3M0U5OURFQzcKKzoxMEI3MDAwMEExMTYxM0VBQUQ1RDNGQzZCMTFCOTg3N0VERkY0N0U3ODEKKzoxMEI3MTAwMERERTZGRkU4QUNFNjRDMThERkRGOThFQkVFRTEwMjc5RkUKKzoxMEI3MjAwMDI1MURGQTIzQkJFMkI1RUI4RTcxQjI1RjUxQzNCRTFFN0QKKzoxMEI3MzAwMDM5MERCRUVCMDQ3RjAyRkRGRDlBOTBBRkY1MkQwMDM3NjkKKzoxMEI3NDAwMDgzOUY4MEZFMDU0M0U3MDRGMEQwNUMzOEQwQjUxMkVENEUKKzoxMEI3NTAwMEI2QkU5MjU5MDAzNjdDMzE5REUwQzlDNTNGRTgzM0ExQTEKKzoxMEI3NjAwMEZERERFMEU3NjFGQkZERDU5RTE5RDU1MEJGQkZBQjRFQjcKKzoxMEI3NzAwMEFBMDFGODJFREJDNEU0N0E4MDJEM0Q0NDBCQUU2MzZBNDcKKzoxMEI3ODAwMDZDMTk2NjQ5MzVCRUJCQjJCNUVCOTFGQjAyRDYxNUY3MTUKKzoxMEI3OTAwMDRDRDZENjRGNjIxQkEzRjVEMERGQTQ1MjAzNzNDMTk0REQKKzoxMEI3QTAwMEVFMEU2OEJGMkVERTQyRjhCQTg3NTUyRUI1ODREQzM4MUYKKzoxMEI3QjAwMDlFNEVDQjc4QUE2MTgzOUEyNEM0OEI0REI0NkU2NkVERkQKKzoxMEI3QzAwMEYxQzYxMDZGODg5N0Q4MENCNkQyOEE1RkYxRTg1QjAwOUIKKzoxMEI3RDAwMDM2QzlGRTE1RkM5MTNDREUxRDY1N0UwOUYxNjQ2MkYzRkQKKzoxMEI3RTAwMEQ5MjNEMERGMjU0OTVGODlFRDREMENENjhEN0NEQ0I0QTMKKzoxMEI3RjAwMERFMENDNDFCOTNENzlGMjY5OTA0NzdEOTFFNjI4ODY3RjUKKzoxMEI4MDAwMDdDREUyNzU2RjMzRUNEM0IxMENGMzc4RUQ3QzVDOTRGRDAKKzoxMEI4MTAwMDIzNUUwQjQzQUQyRUU0MEJEQjhCRDE3QUY4NUUwREUwOUIKKzoxMEI4MjAwMDU5MTBGQ0Y4NTRGMDE0ODg3N0Y0Mzk2OUZEMjdFMzVCNkMKKzoxMEI4MzAwMDI5RDM5ODc3MkFGQTlENjEyQ0NDQkExMkZBMEYzM0Y3RTQKKzoxMEI4NDAwMDYyN0EzRTBGQUZBOTNCMTYxNjg2RUIzNTcxMDRBQjVCRUYKKzoxMEI4NTAwMDA5RUIzNTk2QUQ2RjZEOUI1NzAyRDVCQjFGODNGNzZBMTkKKzoxMEI4NjAwMEU2QzFGQjg4RDc1RTRDQjIxM0ZGMTc1OTcwN0QyMzMwQjkKKzoxMEI4NzAwMDA3QkIxMkVDRjczRjNGQ0QwNkZGMzM5RTRBRTJEQjRGOUEKKzoxMEI4ODAwMDM3NzE3RkYzNTJFRTlCQ0IwNjgyMjgzMTk4QjM3MzMwMjkKKzoxMEI4OTAwMEZBQjlGMjlGRDM1Mzg0RUY4OTRDNjdDNUY1MkZCM0Q5MUEKKzoxMEI4QTAwMDI0Q0I2MEVDOTdEMUJBMjYzQzVCQTc1OUZGNzZCNTc1REYKKzoxMEI4QjAwMEQxRTAyREIyMjA0MjAzNDdEQjdCNjhEQTc3OUI5Q0EwNjYKKzoxMEI4QzAwMEE5RUZFRUI4NDk1M0RGQjM3NDkwMDZFRTVEMzk1NEQzNTcKKzoxMEI4RDAwMEJFQ0ZDMjExMUEzOERFNzk4N0E2N0RFMkYyMDkxQTM4ODYKKzoxMEI4RTAwMEI5RjYzRTRERkJCRTZCOEIzNUY1RkQ1Q0IzMzVGNUZEMTIKKzoxMEI4RjAwMEI3Q0NEN0MwMDNFQTdFQTk2OTdGRjNDRUM1OUFGQTgxOTcKKzoxMEI5MDAwMEVFOTU5QUZBOENBNjI3MzU3MDU2RjM3MzlBRjY0MzBFODUKKzoxMEI5MTAwMDZFRDRENEU3Nzg1RUQxRDQwRkZCNzY5QjA2QkVDNUZCMTAKKzoxMEI5MjAwMDhFQTZGRDZEQkVGNzM1RjA3MEY2QjFBNjdEOUVGOTMzOUIKKzoxMEI5MzAwMDBEM0NDQUYyNzc0REZCREI2MzhGMDZDNDNCMkNDRTg3RjAKKzoxMEI5NDAwMDMyNTE4RDAxM0Y4MTlDOEQ5NjRFNkJEQTgzQzc1Qzg0QUEKKzoxMEI5NTAwMDdDNjM5MEY5RTFDRUQ0RUYzNEY1NjNBREZGRDJGNDY3QTgKKzoxMEI5NjAwMDY0OTU0MDA0NjRBQjVBMkFCQkIwM0EyQTQzNTgzMzk1RDUKKzoxMEI5NzAwMEJGMUVFMEIwMjdBMDVDQkNFMDVDODY0Q0I1M0ZFN0ZCOTcKKzoxMEI5ODAwMDM4QjQyMzlGRTYzRUU0NDRCRUJCMTRDQjJDRTI0MDE4RkYKKzoxMEI5OTAwMDBGRjNFQTkxQUY3NUMxOTc3QjM5NTQ3MUEzMzA5RkM4RkIKKzoxMEI5QTAwMERDMTlDMDg3M0U4MTRBOEIyRjk4QjkyMzgxMEY3RDQxRDYKKzoxMEI5QjAwMDU0NDZGODIyRTk3OUE0QUYyQjk1NTFCRTlFRjQzQ0RBQTcKKzoxMEI5QzAwMEQ3OURDQTE4NUYyMjk1REQ3Q0YxNTRDNkZBRkE1M0Q5ODcKKzoxMEI5RDAwMERERDc4RkNBMUVCRTBDN0FBRkE3NkYyMDk1QkQ3Q0MzODIKKzoxMEI5RTAwMEU4Nzk2RjVGMEU5NTcxQkUzQzdBREVDNzM3OUM0QUM5MTUKKzoxMEI5RjAwMDc3Mjc5NUYxQkVEMTU0MjZGODI2NTJCQjQ0REY3ODJBMkEKKzoxMEJBMDAwMDkzN0M1M0U4NzlCMkVGNUUyQTUzN0NEM0E5RUNFQjlCOEQKKzoxMEJBMTAwMDQ2NjVBQTZGMEU5NUZEN0NCM0E4QkNDOUY3MTBCREQ3Q0IKKzoxMEJBMjAwMERGMzc4RkNBMzRERjYzRjQ3QzgwRUY1MTJBRDM3RDM1NTIKKzoxMEJBMzAwMDU0REVFQ0FCQTZEMkVBRkIwREI1MUJFODVCNDFFNTIwN0EKKzoxMEJBNDAwMERGNTNGNDNDQzNCNzlBQ0E0Q0RGM0E3QTlFRTU3Qjk2NDMKKzoxMEJBNTAwMENBQzFCRTE3QTkxQ0UyREI0MDY1QjZFRjU1MkE3MzdDNEMKKzoxMEJBNjAwMDJGNTMzOUQ0RjcyNkJEMzdDQ0Y3MDY5NUI5QkU3N0U5MDEKKzoxMEJBNzAwMEY5MkRCRUI3QTlCQ0Q1Qjc4NzlFREZFNjZCQTREMkU2ODkKKzoxMEJBODAwMEZCOTg5RTBGRjdFREEzNzI4NEVGMzM3QTlFRTczQjQwNUQKKzoxMEJBOTAwMEU1NDhERkRGRTlGOTI4REY5NzU0RTZGQjhFNTI3OUJCRjIKKzoxMEJBQTAwMEVGMDg5NTA1QkVEMzU0OEVGNjlEQTRGMjBFREY3N0Y0MTEKKzoxMEJBQjAwMERFOURCRUYzNTQ4RUYxRkQ4QjlFOEZGNUZENDA2NTVCRTAKKzoxMEJBQzAwMDNDMjFENzEwQTAxN0RCRjQ5RkVFMEFDNjc5NDIyMjNBMzgKKzoxMEJBRDAwMDhDQjdCNUJEMkZFQkUzRDVDMTJGMzA4QzdCOENBQjE0NkQKKzoxMEJBRTAwMDY4OURGRTRDRjBEOTBGNDg0RkU2OTgyNDg0OTc2MkQzQTYKKzoxMEJBRjAwMEVFRkMzQjk2MThDNkVFQzc3RjQ4OEMzNUU2OTg2OEZEOEQKKzoxMEJCMDAwMEJFRkY1N0ZDQkQ2NUMzOEY3RUY1MTBEQUM3NzkyNjg2NjgKKzoxMEJCMTAwMEY2MzE1MEZGMkFERkZEMzQ3QjRGMzRGQTYxQ0IwNjc5RDIKKzoxMEJCMjAwMENBMzBGRUYyNDRCQ0E3MDhDQjg2MDQ4MUVDQzU5QjcyRTgKKzoxMEJCMzAwMEY5NEU4MjhFQ0EzNTAzQjhGRDJFOUE5NzFDNEU3MUFBMTMKKzoxMEJCNDAwMEE4RUI5QkQ3RkZBMkREOEZGNkI3N0YyMTg5RjdDMzQyMTEKKzoxMEJCNTAwMEJDNzE2NDJGQUVCMzlGRUI2REI3RDRGQ0VCM0Y2MDVDNjAKKzoxMEJCNjAwMEM3NTZBMzY3NDFCNzAyQUNFN0Y2REVGOTU1QTg2QjMzQjkKKzoxMEJCNzAwMDRDQzkzOUEyRjI4RjE4RTc3MTJFMzY1OTZBQTIxMENGM0MKKzoxMEJCODAwMEJGRkUxM0I2NUZDODk4REQwNEU1MUYxMjFDOUYyNTQwNTkKKzoxMEJCOTAwMDNGREYwN0M1QjlDMDM4QzI1RkU1OTAwOUExM0Y2QkZGMjEKKzoxMEJCQTAwMEZGRjgzRkVFRkYzNEVBQjVDRUZBRkY4N0NDNDc2MzEyQzkKKzoxMEJCQjAwMEVERTc3MDFDNEM2RjRCNDczQThDNThEQzVEOEM4MkY3N0MKKzoxMEJCQzAwMEE3QUQxMjJDQzg0N0QzOTcwQ0NDNDdGRTE4QzQ2QzE0RjEKKzoxMEJCRDAwMDI3QkQzRjkyM0Q2MEVGQzAyRkVCOTZBODkzRkQwQkM5QTgKKzoxMEJCRTAwMDc4MEY4Q0U3MENCODFDRTg0RjE0NEI4Q0Y4QjJCODQxQjYKKzoxMEJCRjAwMDcwMzkyOTBFNkQwQjFCMEJGNkJCNTRFNkRCRTJFNUQ1NjUKKzoxMEJDMDAwMEM2MDVEMEFFQkMzQjhGOTczMTE3OEY5Nzk5RTE3RjI4M0YKKzoxMEJDMTAwMDQ3NzM2QTM3RUNBNTcwQTM3ODk5RTI2Mzk3RDBFRjA1NzQKKzoxMEJDMjAwMEQ2OTlCM0E1N0QzQzc2MDFDNjk5NzcxQTJENjgzN0NBOTcKKzoxMEJDMzAwMEVCMDJFMkI5MDE3MUIzQzA3ODk5MjU1MThFQzc1QTk5QzgKKzoxMEJDNDAwMDk1QzdCOTQzNEFGRThBREY2MzYxOTIxODc1NkRCQzI4QjcKKzoxMEJDNTAwMEYxNTk4OTQ5REQxMDhGQTNDNEI0NzA1Q0M3NUM2ODRBOTAKKzoxMEJDNjAwMDBFNjc1ODRBNTIzNzZDRTcwMDVBMzQ0MzI5RTgxRDQzOUYKKzoxMEJDNzAwMEYwMzlFMEQzODk3NEY1NTYwN0JCMzZDMkI4OEU4MDNERTMKKzoxMEJDODAwMDkxMzI3MDQwOEUyMTQ2OEM0N0ZFQUQzNzVCMjkxMEQ1MkUKKzoxMEJDOTAwMEM4MEZBQkQ4MjQ5MjVGRUY1OUZDQUY2NTE4Qzc5RTE1NEIKKzoxMEJDQTAwMEFGQTc3NUMwMzQ4Q0I5RTNGOERFRUVFQTcyMEFENDJGODAKKzoxMEJDQjAwMEUxRERGQjlBNDA3MTU3Mjc5QjFGOEI3MUREQzA3RDE0MUUKKzoxMEJDQzAwMEZCRDJFODcxRDk0OEE3RTU1RDA3OTk5MDU2NEVEQjE3N0UKKzoxMEJDRDAwMDQ5MzEyQUZBMkNBOTIxQkMxNkM3NDY3MkZBRUMzNDkwRDUKKzoxMEJDRTAwMDVGMEJGNEE5NDZGQUNDNzIxOThFQTlGMTdDODk1RDM2RjYKKzoxMEJDRjAwMEUyN0U0Q0YxRjJGMzQ0QUZEOTdFN0E2OURBOTVENzM2MTkKKzoxMEJEMDAwMDEyNUQ4MTRFOUFFNzE1OTUyNzk0MzhGQUIxQUJEMTJCODUKKzoxMEJEMTAwMDNGODA1RTE4M0ZCRjA3MkIxNzQ1OTI3RTI4NUFFQzRFOTYKKzoxMEJEMjAwMEFFNTRGMTY5RTBCRTQ0RDI4Q0ExRTE3NjkwODc4MjFFQzgKKzoxMEJEMzAwMDlDMUU0QzZGOEQ0MTdBN0VCNzJBOEJFODE1NDhBNzgyRUUKKzoxMEJENDAwMDlGQTYxMzNERDhERjQyRDk2NjE4Q0ZGRDg5RUM4MTA5NDMKKzoxMEJENTAwMEYwRkMwMTM5RkU3QTdGQ0RFODAyOEM5NzRGNERFNEVCODEKKzoxMEJENjAwMDkzNEY2MUZENjk4M0Y1RTc4MTJBMzNCMzgxNkFGRUFDQTUKKzoxMEJENzAwMENBNDJGMEU3NTVCMTA0RkZCNTRBQTJGMkNCQUE1NDJBNTEKKzoxMEJEODAwMDhGMTk1OTY5OUQ0QUJFODAwMThDMzhCRTE5Mjg1N0QxMzgKKzoxMEJEOTAwMDU4MkFFQkMzODc2MzMxRUU1RUYwRDM2NzU5M0E1MkE5NTQKKzoxMEJEQTAwMDZGOEUxRkQ1MUJENzE3ODAwNDE1N0UyNjE3MDY5MzJGN0QKKzoxMEJEQjAwMEFEQzAxRTgzMjUzRjE2RjVDNzBBQzFCQTE5RTk2QTFGMkYKKzoxMEJEQzAwMEE2NjlDRjUyMzNGQzMwREEyRjNERTcyN0UwOEI4REM4RDAKKzoxMEJERDAwMDdGRjc4RTg5RDRCNDlGQjRCQ0E3MDY1RTk0MjhEMUY4QUYKKzoxMEJERTAwMEM2MTcyNDZBOUVERjU3RDQ1RjAzNEZGM0MxN0ExRTNFMDUKKzoxMEJERjAwMDk1MjQxNUU4OUNEMEZGQzU0RjBDQzRDRjE3MkI4Nzc0MzIKKzoxMEJFMDAwMDVCQzA2MUUyQkI0MEZDMUYzMzNBMjk4RUUwREM2OEIyQzQKKzoxMEJFMTAwMEEyRkVGQjM2ODhGM0Y3Qjc5RjhCQUUxQTVBRjczQTI5ODIKKzoxMEJFMjAwMEVFNzJDOTZDOTE3MDlERjJDODc0NjcxQ0Q2M0YxMjBDRkIKKzoxMEJFMzAwMDJFRjk0MEM0OTdDODMwN0VDMDVFMzE5MUZFOUNCRTU2M0MKKzoxMEJFNDAwMDYwNEU5NDExMkZBM0Y1RjJDMzJGOUI2ODlFMzNENjhBQzAKKzoxMEJFNTAwMENDOTE0MTdDMTI4N0VEMUY4RTk2QThCRkZCMTNBNTNBQUIKKzoxMEJFNjAwMEU0NjdFRjY2OTM3NTIzRDQ0RUY3QzhFRjBCODM2ODFGMjIKKzoxMEJFNzAwMEE0N0NGRTVGMEZFQjUxMUU1MjlBRDM3MUFENTUxNEVGQTcKKzoxMEJFODAwMDhFNDYzREQ4QkFDOTQwRkI1RUU1RTI4NjkyMTAyMEQxQ0QKKzoxMEJFOTAwMDlDMjdERTBDQ0I5MTQ4RkMwOEJGQTcwRTQ0NkZDMEY5NkQKKzoxMEJFQTAwMEZCRTdFQkEyQjhDODM3N0RFQzFCMTM0MTlGOUUyQTcxQkMKKzoxMEJFQjAwMEE1RDMzQTc5MTE4RkM3QjdDNzBCMjMzREU1RDQ4NTQ5ODAKKzoxMEJFQzAwMDlCNzFCRUQzMUQ0MzJDNjk2QTdCQzhGN0ZEQTYxQkFDRDIKKzoxMEJFRDAwMDMxRDYzNEU0RkVDQ0VFQTgwNzhFQUQzMjE0NjBEQzA1MUEKKzoxMEJFRTAwMEY0RkUzOEM0RDNCMURBNDhERDRBNUE1NDZEMjNGRTJBMzEKKzoxMEJFRjAwMEQ2NEI0NkY1Nzc4QjU3ODkzNjZBMEZGQTdEM0NEQUVCREQKKzoxMEJGMDAwMEQ1QTI4MzBENDFCODk2RkE3NzJFMTcxQ0I4RUY5NEM0Q0EKKzoxMEJGMTAwMEIyQkIyMURGM0UzNDZGNDgzNzlDQzdENDRFRjYxOUNGRjEKKzoxMEJGMjAwMDgyQ0MzODU0RkI1OEIzNzc4OTc2MTc3RTJGRDNBMzJGNTIKKzoxMEJGMzAwMDFDQTAxRTNGOEYwMzI1Mzk5NkY3OUE4Rjc0N0EyM0M4NjkKKzoxMEJGNDAwMEJBNTI0MkJEOUExODhFRUJENDkzMkQ2MDM3RTAxQkIzRTIKKzoxMEJGNTAwMDZBMUFEMzI1NjBCREIyODc3NjEwMUQ0QUM3RDVBNUI4MjkKKzoxMEJGNjAwMEUxRjkwMUIzRTMxM0M0RTNCN0RERUI5RTFFODY3MUEyRDIKKzoxMEJGNzAwMDg2MTdFMzlDNjgwNzE3RjJGREI1RDlBRkNDRUFBM0Y2QTQKKzoxMEJGODAwMEU3REJGQjEzMkM1Njk3OEQ4NTNCNDYwMEJDMzgyNDk2ODcKKzoxMEJGOTAwMDhGRjg5REMyRUFFNEY4ODU4QkM2MjdBMUQyMDU3QzU4QUMKKzoxMEJGQTAwMENBRjhGRURCNzQ5RDc1RUE2Nzk5ODhGRTUwMEJEMjQ1OEUKKzoxMEJGQjAwMEU5RUZBODgxQzdCOUZFMjFDQkIzNjI4NzdCMjQ3MTNGMkIKKzoxMEJGQzAwMDZCQkE4RUNCMUREQjJEMTA5RjAyQzFCRTQ4NTJEOUNCNjAKKzoxMEJGRDAwMDBBQjY4QUVDNjU2QzRGOTFFMUJFREREOUM0MDg1OTJGRDEKKzoxMEJGRTAwMDcwRkIzNzA3RUQxRkVFMEI1QjA0OTI4RkIyMkQyNjk3ODcKKzoxMEJGRjAwMDBCRjgyQjM1ODlDQkU3NkNFMzZCNEYwRkMyRTZGMTk1NUQKKzoxMEMwMDAwMDQ2RkNDRUFDN0E4MTNEMDc0RDRGMTk1QzI1Q0RCODJGNEIKKzoxMEMwMTAwMDY1RDlCMDI0ODJERTMzNTg1REM4QTdCMjdFMzc4MzQyMkIKKzoxMEMwMjAwMDQwQkQzMDEzRkYwOUY1RTU2QjA0OTc5QkY4QzU0RTc2Q0MKKzoxMEMwMzAwMDY4MDZDNjRENzBGRDhGN0E1RUE1NDdEQUU5RjcwMEJENDgKKzoxMEMwNDAwMEZFMjAwQkQ4RDdBRkQ1REExNzdCNzBBODE5QzczOTdCN0MKKzoxMEMwNTAwMDBERjc2QkZERTMxMUQ5MTVDMDU1ODlDM0I1NzcxQzhENUMKKzoxMEMwNjAwMDU3QTBCODQ4RTBGNzY3RTJGODcwQkMzMDNFQjdGNUM2QjUKKzoxMEMwNzAwMEM3NTM2MkU1NzI1QTU2MkJCODVDMUQ4QzRGQzE2Qjc4NjIKKzoxMEMwODAwMDJFOTNEMDNFQ0ZEOTI0Qjg5MDFGNDc0NUNEMjNGQ0NFNjgKKzoxMEMwOTAwMDA2RkM0NjIyNUU5REY2QjA3QjAwMkUwMTQ2NzI1MTdDNjYKKzoxMEMwQTAwMDg1RTNCRjYyM0RDNzNGRDBGOTJGNkFCQkZCNEQ5NEQ3RjQKKzoxMEMwQjAwMDg4NzhGRDA2RUNBNzEzRjcwMzJCQkYyN0JBRUYwNUZBMjQKKzoxMEMwQzAwMEEyRkNDRTdBQzM2NUM0OERDOEQzQUMzNjJDMDRGOTdFRUQKKzoxMEMwRDAwMEVEODFCREI4MkNGODY2Q0Q5QjMxQjg3RTJEOEE3MDI3RDYKKzoxMEMwRTAwMEVCNDA2RjQ1QjJFODI3MEI2RUYxRjM1RkEwQkQ2RTY3QzIKKzoxMEMwRjAwMDk3MDNGMEUzNjQ3NkIyNDNFREYwNjQ1RUQ1OENGQkRFMkIKKzoxMEMxMDAwMEVERTgyN0M3QzUxRUM0N0YwMTdFMUVEQzI0REE4MkQyN0IKKzoxMEMxMTAwMDM1RURFNEYzMDg0RUMyNUJBOUQzNEI3RTQyMjlDQ0IzODQKKzoxMEMxMjAwMEM2ODI0RjlERjk4ODk3MDdBRDhDRjRFRThEOEUzNzcwREYKKzoxMEMxMzAwMDlDNEMyQzIyRkVDNEI4MUVGQTIxRkZFRTc4MDNGRDhGMjIKKzoxMEMxNDAwMDQ5NDk1N0Y3M0YwMkY1NDhBMEZGRjE5NUMxQTY1QjhDMUUKKzoxMEMxNTAwMDdFREYwMUJFMkY3RTUxRUZFRThERjI3QjMxMkFDMTBBQzgKKzoxMEMxNjAwMDJERkM3QTM0N0E1MDM3RDRGMzhBMUUyRDkxRUQ5NkQyNzUKKzoxMEMxNzAwMEVGODM2OEFGMDAzRUJFRjZDRDMwQTRCQjQyRkY5OTY4QTYKKzoxMEMxODAwMDI3RDJGQzc2RTI5MUU5RDAzRjdDRUY5MTFENDFENEZGQUMKKzoxMEMxOTAwMDk5QjE2MEE3QTBDRkEyRTczRjBBNjMyQUZERjc3ODFGRjUKKzoxMEMxQTAwMEM3RkMyNEQ0Mjc4QTVEMTMzN0M0NTk4MEJGMTQ3RDc5MTYKKzoxMEMxQjAwMEFENzU1N0E3RjMwQTA5OTg1N0E4NzY1RUM1MzhBRjBDMzYKKzoxMEMxQzAwMDdGN0ZEM0U1Nzk3REJEOUNDRkU3RTgyQTNFQkYxOUVEOUYKKzoxMEMxRDAwMEU2QzVFREZFMjMyRjlBQUM0RUYyMEJEQ0QxMjg4N0RGQUIKKzoxMEMxRTAwMEJFMjFCMjFBQTIyRkY3MUIyRTk5ODE5RjA2NjJGQzY2MTAKKzoxMEMxRjAwMDE1RDlGNTkzRDE0Q0MyQjg0RUE3RjY3QkI1ODlGQzgyMTAKKzoxMEMyMDAwMDU5REJGOTdFRUIyOTYxNzgzN0RBRjhGRkMwMURGNjI4OTMKKzoxMEMyMTAwMENBRjUzNjkxQTExREYyOEZBN0NENkUzRjlCQTRCNkRCNjgKKzoxMEMyMjAwMEQ3ODkzNzhDQjNBMjNEOUIwQkE4NDNCRTlGREJEMDhEMzMKKzoxMEMyMzAwMEUxMzk5NzU1QzM1OTlENDhGQkYwMUVEMjYzQzA0MjE0QTMKKzoxMEMyNDAwMDlGMDYzRjVDMTM2RjMwMzFBQkQ5OEM3NEVBMjRGRUZBNDEKKzoxMEMyNTAwMENGRTRGMzUzRTcxMzNFQkMyOTg4N0ZFNUZCMTU1RERDOTMKKzoxMEMyNjAwMDg2NkVFOEQ3QkMyMTkwNUY1M0ZFRjBGMEIwRTEwQ0JGQzIKKzoxMEMyNzAwMEMzRTM2NjNCOTJCODlEN0EwN0Y1MUNDQzRCQjA1NTUyOTAKKzoxMEMyODAwMDVDMEM3QzFBQ0JFRjcwNUNFQjc5N0M5OEJEQ0ZFQTEwMkMKKzoxMEMyOTAwMEJGMDg1M0ZDNThDN0U3MjE0ODE2NTYzNDg4QzdFNUNENzgKKzoxMEMyQTAwMDY4RDc0Mjc0NjRENzAyRjE3MDQyRkU0RUI5QTgyM0ZGRUEKKzoxMEMyQjAwMEI3Q0NDOEZERTA3MzAyM0ZGRkYxOTE2QzFGM0Y0QUUyMkIKKzoxMEMyQzAwMEVCQ0M0RjkyNzgzQ0UxMUNGQTgxRDBFRkI5NUI0Q0FFREQKKzoxMEMyRDAwMDZBMDFERDU2M0RBRDkzRjVCOTI2MTdGQTMzN0E3Mzg4QjYKKzoxMEMyRTAwMDVCNEM0N0Y0RUFDRkI2QzkzM0UwNkIyQTZCMzYyMDNEOEUKKzoxMEMyRjAwMEM3NjVDRkRCODJGMzM5REM4MzU5QzRBRTU0NkRDNzdEOEIKKzoxMEMzMDAwMDg0MjlBNDE5MThEQjZGRjhFQTQzOEM0NzNBQTFBRDA4RDkKKzoxMEMzMTAwMDZCODUyOUQ5Mjc3QTYzRkJGNTA4QzNGQzBGMDdENTdEMDgKKzoxMEMzMjAwMDg4NzE5NkMzRjE3QTg2RkIwMkNFNUQyNkIyRkY4NjExMzQKKzoxMEMzMzAwMDlFREUxNEE3RUNDMjU4Q0Q0MDhDQzdFQzU5OEE3Q0I0NjEKKzoxMEMzNDAwMDM3MzYzMkQ1MDJFRDFGRDA3N0IxOEE1Q0ZGOEMzQzhGMzcKKzoxMEMzNTAwMEUzMkQxNUY4RkVDRDEyNEYxNkQyRTc2NkI2QzQ3MkRDOTcKKzoxMEMzNjAwMDRDNUIwQkY1NTcyMkFGQzYzRjdBNzY1Q0UxMDMxODUzNUUKKzoxMEMzNzAwMEQ5MDhGOEM3NTBDNjE5MkI5QkYwQTk4MTAxQUYwNDVGRkIKKzoxMEMzODAwMERFRjRDODg0MzVCOUI4NjkyMjBENDAzQTk3MjU3OEY1QUUKKzoxMEMzOTAwMEI4OUZFMjE1OTg3NzIzRTBFMUVFNkNBRkRFODZGNEIyNDkKKzoxMEMzQTAwMEIxQkFCQjgwN0ZEREZCOTg4MERGNDExMUMwRUZERUUzRDcKKzoxMEMzQjAwMDRFMTg4NTc4NjBBOTEyMEI4N0ZBQkJGNDEyQzFCRDBBMkEKKzoxMEMzQzAwMDU4ODQyOEVGMUI2MDFDRUJFMDMwODFFOEEwMzM0QjA2NUIKKzoxMEMzRDAwMDlDQjdCRDQwMTg4NEZCQTI2NThCQUY2RjlDNjFDOUQ1MkIKKzoxMEMzRTAwMDM0Q0UzMjlEOEVBRjY3MUZFNUVCRDkyOUNFMjNBM0M4OEIKKzoxMEMzRjAwMDRGQ0E2NTAyRjI2MTQ1NDQ5RDgxRDZEMTIwMkYzOEZFOTcKKzoxMEM0MDAwMDgxRDA4RDFBN0Y1M0Y0MUUzRUJFNTIxODVGMEVDQTQ1NkUKKzoxMEM0MTAwMDEyRjFGMTdEOTUwMkY5OTMxNUM2OEVFMzFBM0Q5Mjk1QkUKKzoxMEM0MjAwMDc1OTc0NUMyRjY3M0UwNUZDOEQ3NzMxQTc2MjRFM0Y3QjEKKzoxMEM0MzAwMDU2MDk5QzBGRTYyODdDQjY1NTJCOTdCOUM5RUNBQTdDMDcKKzoxMEM0NDAwMDlEOTNDQ0Y5M0EyNzk5RjM3NTcyREJGN0VBQzhFRUNFRTMKKzoxMEM0NTAwMDY5RjhFODIwQUUyQjNCRUJCRkRDQzREQzg0OTc1RDI2OUIKKzoxMEM0NjAwMDhBMUYwODNBNkYxMkQxMDUxMTA5NzQ5ODgyRkUyNEI4MDgKKzoxMEM0NzAwMDg4NDM5MjIzQjg5RjJFRjM2NzA5RkExRjg5NThGMkI4QjAKKzoxMEM0ODAwMDg4MEU5NDI3REFDM0QyREExNzhEODhCNEMwRjM0N0UwNTgKKzoxMEM0OTAwMEY4RDAzOUEwRDk5QjAyOUZBQkUyMkFBMjQ2RUY1MERDMkMKKzoxMEM0QTAwMDUzMzA3QTY3RTA3ODg0NUI4M0FDQTg4RkE3MThFQjY4NzkKKzoxMEM0QjAwMDVEMUVEOENFNTBDQkZEMkNDMzcyRUU2N0QxQkUxQUMwMjQKKzoxMEM0QzAwMEE2NTVEQ0NGOUNEMkNCM0I4MDkxOUVCM0U0MEJGMUFDNjQKKzoxMEM0RDAwMENEMkYyRUUxOUY4NkU3NjUxQUJGRDg4NDcxMDQ4QzdCMkYKKzoxMEM0RTAwMEFERTVGRUEwNUVGNjVGOEI1NzY5RkQ4NTI5NEI1NEZFRDYKKzoxMEM0RjAwMDIyNzVFQjJEQzdGMTFBMTYwNTUzRENDNTg0RkU4NENBREMKKzoxMEM1MDAwMDBGRjg4NzZFQkMxM0Y1QjAzMzQxNEZFNzJGMEQyQ0QwRDkKKzoxMEM1MTAwMDlGQjAzMzFFQ0ZFNENGRjVCMjlGMzgzQUQ5QTBEOTdGNzAKKzoxMEM1MjAwMDczOEU2MEE5ODg4NzIyRDQ0Mzg5QTg2QUVDQ0IzMTlFOTgKKzoxMEM1MzAwMDc3ODE4NUQ2NjJEQzZDOTRCODg4RTI3RjQ1RDVGQzVDNTcKKzoxMEM1NDAwMDVBNjBGQ0VGNDJFNTg3Q0Y2MzdCQUNDN0U3MEJCQUZDRDAKKzoxMEM1NTAwMDE0ODdGQjlCQjAyQ0I1MEJCNzgyQkZEMUU1RjAyNTA3NDQKKzoxMEM1NjAwMENBMDcyODJBQzM1MDhDMDNFRUZGMDY2MTQxMTdDRTg0MDgKKzoxMEM1NzAwMDZDRkNCRUZCNzlFQ0RGNjkzNDVCNTA2RjNEMTMxQzQ2RUQKKzoxMEM1ODAwMEZEMkM1QzI4NTA3Qzc4ODk4NUNCREJBMUFGNDIzN0EyOUIKKzoxMEM1OTAwMDlFNTJFMkJEQ0I4NjY3QUNDNTczNEIzNTlCMUIyNzk4N0IKKzoxMEM1QTAwMDdCQTM3QTYwNzQ2RTg5MzlGN0ZFQzUwNkYzMjlCQzBDNEIKKzoxMEM1QjAwMDcyNDNGMDQ3MTM2Q0UxQzBFNzFGN0FBNzlBMDE0RkNGOEYKKzoxMEM1QzAwMDI2Mzc0REQwODM5QzlDRkJCREY3MDU4NDVGNEQzRUMwNTQKKzoxMEM1RDAwMEUxMjdCQzcxNDEwODZGRkU5Q0MzRDU0QTdGOUY0RkMwQzUKKzoxMEM1RTAwMEZFQ0UzRENCRTFFNTUwRUY4NEVGMTdBMTdFQzM3OTBGN0UKKzoxMEM1RjAwMDE1NjhEREZGOEFFQzdGMkJGMTlFMjJEREZCQkMxQ0MxQTAKKzoxMEM2MDAwMERDNjgzRkFGRDVBRTNFRDlGRTBBRkEzQjYyRThCMTUwRDYKKzoxMEM2MTAwMEY0MkZERUVFNkI3QjA1RURGNzhFNDRGQjUzQzk0OEFGN0MKKzoxMEM2MjAwMDE2NTc0QzM0QzZCMTc0QUMxOUU5MDI3NkNDRDZEMUJFREIKKzoxMEM2MzAwMEY0MkI0OTNDNEVGMzU2OEE5RERFNTdGMDA1RkRBQ0ZGQzYKKzoxMEM2NDAwMDc3RkExOTk5QzJDN0E1RUE2N0YzQkZEMzRGNzhERjc2QTcKKzoxMEM2NTAwMEUzNzkzRDM5RkFDNkZCOTkxN0QwOEZFMkI3ODEwMzJDRjUKKzoxMEM2NjAwMEExOUVGMkE2REFGNkUxRjhFNkZDREEzNkEyMUVGNUNGRDQKKzoxMEM2NzAwMDdFOTFGOEY0QkJDQTFEMjk2OEY3QkZEQjZBOEE0NEZCQzgKKzoxMEM2ODAwMDM3RTdGNUI3RTM0QTMwOEUyMEZCNDVBNzFCQkYzNDRBOTYKKzoxMEM2OTAwMEYwRkU1QzlGQzg2Q0EwQTcyQjdDMDI5NTczRUIxQjhERjIKKzoxMEM2QTAwMEY5Njk3OEFFQjZEMTk4QTcxQTU3OTkzQzRFRTA3NEZENTcKKzoxMEM2QjAwMDA0OTUxRkIzM0Y1OTI3RUJDREQ1NTRDRTc5RkRBNDFFNjkKKzoxMEM2QzAwMEU5Mzk0NzU3NzcxQ0NGMUZCM0ExM0NFRTE1MzhCRjFEODIKKzoxMEM2RDAwMEIyREUzRDhDRTcwRDNBODgwM0I0QzhGQUI5Nzc3RkRCNDgKKzoxMEM2RTAwMDY3ODhCN0I3NTA5RjAzMENFNkNBRDExMUJFN0FBNUYwOTAKKzoxMEM2RjAwMDcxMTQ3NUUxN0EzRUFCQzU1QUYyMTlBREZCRDI3NTIyQzEKKzoxMEM3MDAwMDk0ODMwRjU2MUE4QkUxRjlDMUM0MTE4NzEwNUZFREUzRDIKKzoxMEM3MTAwMDkwNUUxRTg3NkNFMDcxQzhBMjg4RTY4N0MxOThCMTZFRjIKKzoxMEM3MjAwMDJGNUQ3Q0QyMENFQkI4M0I5RjkxRTUwMzQ1MEZGNDRCOUEKKzoxMEM3MzAwMDgxNDk5MTk3RTA4OTIzNzM3OTlDMEJFMUZGNEQzNjNDNDkKKzoxMEM3NDAwMDg1RTcwODlCQkEzNEZGRTIzM0I0MEYyQjQyRDk0NjkwRjkKKzoxMEM3NTAwMEIzRkI4Nzg0QzY2RDgzNzE0Qzc3ODYwQjYwM0JEOTcwQzEKKzoxMEM3NjAwMDUzNjhDQTM0NjhENzlBMzBCQzVCMEFFOTI3NDZGRTYxMzEKKzoxMEM3NzAwMDZCODJGRDAyQ0VENzEzMUZBQzAzNjc4NDM5OEMzQzlFQkQKKzoxMEM3ODAwMEU1RjhCMzQ4RjEyQzQ3N0FCMEMzRDUwMUJFQkMzMjNFQzAKKzoxMEM3OTAwMEJCQTVGMEZEOUQyNjFEOEM3MzEwOEU4MzlGRUY4NUJGN0EKKzoxMEM3QTAwMEI4NkQxODZGNUFEQzQ3NDBCRTUzQkUzRjI2NzE3ODhDNzcKKzoxMEM3QjAwMEZBRkI2MzEyRUQ2MjRBQjRCQTdEMzhDM0Y2RDczQjBFN0EKKzoxMEM3QzAwMDk2QzJDNzExOTNDMkU5NjVDRjA1RkU1MkU5RkQwOTIzNjAKKzoxMEM3RDAwMDgzMzU3MEUxOTg0ODY2NTNBRkVGMEE3QjZBRTBDOTQ1M0MKKzoxMEM3RTAwMDg5OUFGNkY3Q0RFOEFGQTkxRjZCNkFDRUFDQkMwMTdGODIKKzoxMEM3RjAwMDVGMEM0QjBEQTdGNTdGMTY1Rjg3MUM2QUI4RjRDNTE0NTQKKzoxMEM4MDAwMEY0NjMzNzg5NTYwMUU2MzU2QkQ3RTYyRjg2NTFFRjEyNzAKKzoxMEM4MTAwMEM1Qjk0RTM1ODk2NDhGQzBCRDM1QUFGNzRGQ0VCMDY2MTUKKzoxMEM4MjAwMDNBNzdBQ0VGQkE4NEVDREY5QzU4N0VCRTdCOTY0QkJCNkMKKzoxMEM4MzAwMEZGQTFDNEU1M0JEQTM3NDE3QjU2ODZFNzYyM0FEQTM3MzcKKzoxMEM4NDAwMEYxQzdFM0FGQkE3RjkyOUQyMkFGODcwN0IxNDE3QzNEMkMKKzoxMEM4NTAwMERDQkExNzY2Q0FGMjc2MzYxMkJENkFGNjg5NTY2NEQ1MTYKKzoxMEM4NjAwMDlBREUwMjEzNjA5Q0I3RDc5QjVDNDEzMEVFMzM2RjFGOUEKKzoxMEM4NzAwMDMxNEFBQUZEOTMwQTVGMzUwNjJERTBCRDIzNDYzQzRGQTEKKzoxMEM4ODAwMDc1MzA1OTIyRkFDRDZEMzg2RjY0QzAxN0I3MzdDQzIzOTUKKzoxMEM4OTAwMEI5NkU2RTc0NDQ0NUEzRkQwMjdGNzU3QjI2RjI1NzVEMjkKKzoxMEM4QTAwMDI2REFCRjI2OURDNThFRkI2MTczOTY4RkE2Mzg3M0I4QjYKKzoxMEM4QjAwMDZGMEE5NTY1QjVBM0E5REY3MkRGNDQ4MkU3RkE4MjA5QTIKKzoxMEM4QzAwMEZFNTQ2Q0FFM0Y4MEZEM0MxMzZFNDE3QjVFQUU3NzZFRDYKKzoxMEM4RDAwMDQ1QkE5NDRCQzExOUI4NUYzNUI3RkVDMEM1NUZBMjFERkMKKzoxMEM4RTAwMEI1RjA3QjFENjNDNUJGNjQ2MkZERDgzRTE2NUQ0RDU3MzQKKzoxMEM4RjAwMDFDNkYxMEY1RDMzQ0UyRUY5OTY4OTcwQTcwNUQwMENGOEEKKzoxMEM5MDAwMENCQjZFNTM4NTBFRTg3RDc4NDVBNTBFRTQ1M0M0RkQ2MkIKKzoxMEM5MTAwMDAxOUZDRTQ4RTFGRTlFQzFDM0M3M0JDQTM3OUVGQTUzNzIKKzoxMEM5MjAwMEVBNjdBNzI0NTBCRDAyMUJBMjM3RTk1MTdGMjhGMzMwRTQKKzoxMEM5MzAwMDgwQzFDN0YyMEU1RjdGMkEyQkVBQzdFQkYxNUNGQzlGMzgKKzoxMEM5NDAwMDUzNUY4QzQyM0M0MUZCMTAyQzkzNDYwRTIzM0RGMzVEMUMKKzoxMEM5NTAwMEU1OTA3MEQ2ODFERTUyNEE5M0FDODdBN0EwMUU4NkZFNzIKKzoxMEM5NjAwMEVFNERCNTU1QTExQzhFNUJFNEQxOUI1MThGODY5ODJENjEKKzoxMEM5NzAwMEI4RkYzMTJFN0JBMDU0QTI5QThGRjhGRUJEQjg5MjAwNkEKKzoxMEM5ODAwMDVGQzU2QjQwQkIzRDA1NEFCNURFN0VBMDEzRkJCMjM0RUMKKzoxMEM5OTAwMDQ1RDFEQkQ1NDQ2N0M1MEVCMTJENEYzMjVDODc0REU1REYKKzoxMEM5QTAwMDY3QjVEQUU0NkFCRTJDRDdDQUZCQ0QwMkY3MDc5Q0RCNzkKKzoxMEM5QjAwMDc5NUM3RjdFQUE2MzJERUE5MUU2RTE2Q0YyMzZEMkE3MUMKKzoxMEM5QzAwMENENzFFMzQzN0ZCRUYxODdFOTlCODlDRTYxMTY0OTg3MkMKKzoxMEM5RDAwMEZCMEE0QUZERjM2REYzRTBGMjdEQUQ3OUFDOTREQjdGQTkKKzoxMEM5RTAwMDJBQjI4NUM4MTc5RkRFNzY1QkIzMERGQTZEN0MyQzIzQzcKKzoxMEM5RjAwMDQzNTREOUE5RDc1M0Y4Rjk0NzY2RjE1RTI2N0RCMTNCNzgKKzoxMENBMDAwMDU4NDIzRDMwMTZGNzFFMzJGRDdFM0Y5RTg3QzRCODQ2MjEKKzoxMENBMTAwMEM1NkVEMzQ2M0MwRjU2MTEwNkVCN0NGOEZFRjhGRThFMzEKKzoxMENBMjAwMEQ3OTE3RThERUZFNTVDQzQ3QjM0MzY1Qzk4ODE5Q0RCQ0UKKzoxMENBMzAwMDFBODY1Q0M0NzNGNjM2MzM2ODFCMkJGQTQxQjYzRjkxRjUKKzoxMENBNDAwMEJFRUQ2NEJDRDdEMjY3NDkyM0U3NDRBMTNGRjExRDBDN0EKKzoxMENBNTAwMDA5RUQyREQ4RkRDQzE2MEVEQjExNUY4RUU1NUNGRTFDQkEKKzoxMENBNjAwMEIyMUM0RTkzRjlCNzU4OTZDMzY5N0EyRTg3MEZBQzA5NUEKKzoxMENBNzAwMEI3NjBCQ0IzNzg5MTMwMDBDRkNCMzEyOUQ0OEEyQUMwQkIKKzoxMENBODAwMDgwN0M5OTgxRkNDOUY5QjJDQ0Q3NTU5NkU3NzhCOTFGNUIKKzoxMENBOTAwMENFRkY4MUYyMzlENzE3NDlFRDE0MzlGRDUzQUFFMzEwQkYKKzoxMENBQTAwMEI3MkJDRDk5MEI2MTVDNzc4MDVDQTNERTczMkNFRTlFNzcKKzoxMENBQjAwMDg5NzJFMkU3MTNBMzA1RjkwOUY4MjRCNjQ0QzUwNzM1REUKKzoxMENBQzAwMDhEM0ZFODkxNEYwQ0I5MDJGMTg5MDlDQTNDMTUxRkQ5NzUKKzoxMENBRDAwMERCRkMxMzRCN0UwQ0ZBNTU0QkUyNzUyQjk5QkZGRUVCM0EKKzoxMENBRTAwMDE0NjU5RkZDRkFGOEZENTNCOTdENzEwOEY4MTExNEZGMjUKKzoxMENBRjAwMDA5NjMxODVGQkIxMDI1NTE5Qzc0RkUwQTE4MjRBMDYwQkUKKzoxMENCMDAwMEJFQzE5RDhDNzE5OEY5RjM4MjI4MEU1NkQyNTJCOTJDNzEKKzoxMENCMTAwMDU0NkE0RkFGN0I3REU5QjRCRjNDRDE5NzQ0RTVDMTQ0MzMKKzoxMENCMjAwMDg3MTdFNTY1OUE2RjkyOENDN0Y0RUJEQTlGQ0JCMkYxNjkKKzoxMENCMzAwMEI4OUJDMTY1QjI2RTg4QzdCODlCNDNBNEZEQjhERUNDNzQKKzoxMENCNDAwMEYyMTREOTI5NjUzRjhFQzdERDMwOUU4N0YxQkRDMEZENDcKKzoxMENCNTAwMDM1OENDM0UxN0FEQTE0QTVEM0VDMTNCNjhCQzcwREQ3QTUKKzoxMENCNjAwMEVFQTc5NTM1RkU2NUIwMEVFQTRGQzVEQjI4MkVGNzRERDIKKzoxMENCNzAwMDFGNDc1MDVGOThDN0VDMDlBRUQ3MERFQTdEMzYxOThGNzUKKzoxMENCODAwMDc1N0E3NzMyREFEMUJBNEE4RTlGQkE1NTYyMDFFRDM3OUIKKzoxMENCOTAwMDMxMTYzQzVFNzU1RUY3NUE3QzNDREI5NzQ4Rjg1MUVDRTkKKzoxMENCQTAwMDhCQTJCNzc3NTREMUExQ0YzNkZEN0QyREJCNTMyRUYzODkKKzoxMENCQjAwMDdCMzlGMkJCQjVCRDlENTFGODM1OTA5RjE1RkQ2Qzg4NTIKKzoxMENCQzAwMDZFMjEzRDc0MDdCQzgyRkU4M0EyQUYwQkYyODZFNUEyMDQKKzoxMENCRDAwMDlEMUZGNjcyNjJGRDNCMzBGRkQ4NTQ0NzBFRTJFNUI2NkEKKzoxMENCRTAwMDU3N0I2N0FFMDNGODBFQkQ0QjZGMDlCOTFFN0RGODgzMDYKKzoxMENCRjAwMDgxRjRFMUEyRjE4Q0Y0MjE5NDZBN0Q2OEU4QzQwRkJGNEUKKzoxMENDMDAwMEI1RUY4REYxNzc5QURDMUVGQzU4RUUxRjgyQkU1NkY3MDkKKzoxMENDMTAwMDM3M0Y3NUM0RjhCRUQwNzQ1MjVGNkUyNzdGQUU3MTc3MTAKKzoxMENDMjAwMEE2QzcyN0Y1QkQzMTNEOUUyNzhGRkY1QTdBN0M1NjVGRjgKKzoxMENDMzAwMEFFQzcwM0Y1MzY2ODYzRDJEQkU3NzZGNUEzMzhEOTYxNzIKKzoxMENDNDAwMDA2N0ExRUVENTk0M0IwQjQzOTVFNzVDRUJENEJCODRCNzQKKzoxMENDNTAwMEFERDc3QkY3OUYzRTBCRTk3QTFEN0E3RDM2QjZGQjc3MjEKKzoxMENDNjAwMEY1N0FGRUY4MzdDOEFGODIzRkZCNURCN0MyRkFFMzM3MEIKKzoxMENDNzAwMEIwQkU0M0Y4NTM1OERGQzVCNzk3ODc0MDM5MDhFNDdCMDcKKzoxMENDODAwMDU4OEZENDFGODBGMTM1M0RERDg3RTIwRTIwMDdDNEY3QjEKKzoxMENDOTAwMEU1QzBGNzI4MDc4QUJDQ0NBRDFGMTg4RUZCMDZFQzEzNDUKKzoxMENDQTAwMDkxQTFGRTBGOTQ4MzgyQkM1N0Y1MThBNzQyM0Q4RUY4RTAKKzoxMENDQjAwMERBMDMzMjhGN0EyNkQwNEVGQ0Q4RDdGMTJDRjI4RjIyQUQKKzoxMENDQzAwMDBGOEExQzVDOUI4RkRFMzZFMEJBRDQ1MDc2OUVFQjc5REYKKzoxMENDRDAwMDI4RDU3QUJFMzM3RkU2ODUxQkU0RkY1NUQ3QzkzRjZGNjEKKzoxMENDRTAwMEZDRkNGQ0YzQzY3NUYyQ0ZCNkZGODQ3RjkyNDZCRTRCQzgKKzoxMENDRjAwMEZDODNGQTEzRDc2Rjc3N0U2QzBENUZDMEY5ODdDRTI1NjIKKzoxMENEMDAwMDAyM0Y2NDYyRENCOTY5NzA2RjJCQzY2OUVFQkNDMkZEN0MKKzoxMENEMTAwMDdBRDBFOUU0RDcwN0ZBRDU1MzY0RkRGNzgwMUMyNzM4QTkKKzoxMENEMjAwMDk4NkFGRkJDMkY5NzU3RjJEQjg3MjcwNjBGNDQ3Qjc1NjUKKzoxMENEMzAwMEJERkVERTk0QTg0QTY2ODNFNzBGNDBBOUQ2MTMyNkE0NTkKKzoxMENENDAwMDVCMDdGRUZBREY2RTkwQkU0REQ3NDlERkQzN0RGRjYzRjAKKzoxMENENTAwMDNGRUY1MkRGRUJGMEYzOTI2Q0U2ODk4OENGRUZEQzdBOUQKKzoxMENENjAwMDg2NzhCQUQ2N0FDMEIwOTZFM0I5Q0Q1Rjc3RUIxNUJCQkIKKzoxMENENzAwMDE5ODk3NjEzRjhFMzlGRkYwOTdGOENDREFCQkI2ODA2NUEKKzoxMENEODAwMEJBNDY2RDMxMTZFQUExRkQyNDNDNkI0MUYxMENEMzFBNzEKKzoxMENEOTAwMDVCMTJFQTFCQTZFQzBCNTBCQ0UzNTM1MTg2OURFNjk2NTIKKzoxMENEQTAwMDkxMzA4RTNCOUY2MkZFN0QwM0E4MUY5NTFCREUxNjFGRjAKKzoxMENEQjAwMDExOThCRjdERTQxNjQzQ0IyQThBM0ZGMEYzMkFDQ0UxRDkKKzoxMENEQzAwMEQxRjM3RDMyMTlDRTA0Mzg1NDA1NjcwN0MwRUI3OUZCRTcKKzoxMENERDAwMDMwQkQ4N0YxNzMxRkYyNzM1OUZGOENCM0YwN0QwMUZGRjMKKzoxMENERTAwMDdFOUUzN0JGMkJGQTdGRjU4MjA1RjcxN0VFQ0IzRDY3QTYKKzoxMENERjAwMEM0NzhDRUQ4M0NDRkRFOUVEMDJFNjU0Qjc4NjE0ODNGQkMKKzoxMENFMDAwMDc4NUUyRkQwNzgwN0E3NzY1QkUzNENBMjIzNUIzNjNDOTUKKzoxMENFMTAwMDZGNTg5NkNERjc0RDRDNzU4REY5QjYwRUY4NzA3MEFBMTcKKzoxMENFMjAwMEQ2NEVFMTlGM0U4NkUyNjNGNDY3QUExMzk4MzE5M0Y3RUEKKzoxMENFMzAwMDkzMTA3RjdERUYyM0ZERThGRDA0N0FERjZEOEFCQUZFNTMKKzoxMENFNDAwMEY3RUZDOTY1MzY1NzA3N0MzNDUyNjk4NzcxNjFBNTdGNTIKKzoxMENFNTAwMEEwQzlDNDNBQzFENjUxREM2NjRDMkE5Nzk3NjY5REFFRUMKKzoxMENFNjAwMDlDMDE5RTBBNTNGQkFGQzFCOEQ3MjhDNkY5NjI1MkVBQUIKKzoxMENFNzAwMDREODU0RTFFNDc2MkI2ODBGOTVFNkRCQzQzM0I5OEFGNTAKKzoxMENFODAwMEE0N0RERjdEMzU3Q0Q5NTIxNUI5NTdERTk3RTk1RkFBQkQKKzoxMENFOTAwMEU1OTM3MEJERkQ4M0VGNjAxQ0UxNTE4MjA1RkRENEI5QkYKKzoxMENFQTAwMEY2QTA1NTJDMUNFOTJFRjMzNUNCMkFCNEU1QzJGQzgyNDIKKzoxMENFQjAwMDk4MjY4RUQ3QzZENzZDNzBFMUM4MzRGOURFM0VENTY3QTgKKzoxMENFQzAwMEFGNDFGQURCNzU2REVEMzk5RjM3MDg2REVGQTdFQTE5QjEKKzoxMENFRDAwMDdFODJERUFGNEMxREIyMDZFMzdFNDAwRkFBMjczOEU5MDIKKzoxMENFRTAwMDJBN0M1RTE3MDBFNzA2QzgwNUUzMzBDOTI1RUE2NUMwNUQKKzoxMENFRjAwMDRGNzIwN0ZCQjc0RkM4RjgzRDIzRjBGMzREQ0QyM0I4NzEKKzoxMENGMDAwMDNGRDc5Q0MwQ0JBREE5REM3RjVCMjNFMzcxQkREQ0JFMEEKKzoxMENGMTAwMEI5OEIwQTBGQkRGQzc0ODYzRjM3QUUwNzU0RjMyNjNDMkQKKzoxMENGMjAwMEREMUJBNUNDN0I1MkUxMTg5ODU3NzMwNDFCMjAwMDlGOTIKKzoxMENGMzAwMEJDOTQzQTYxQ0Q5MkRFRkVGN0I3QTQ0RTIyM0VGMUY3RTMKKzoxMENGNDAwMDU3RDg4Mjc2RkM1RTE5NEY1QjUzRUY2RUMxN0EzQzcyMDQKKzoxMENGNTAwMDgyRjI1NjlFQ0RGNzVGNERGNTA3M0E5NEI3MDVFREY5OEQKKzoxMENGNjAwMEM3ODlGOTE1Q0E4OTkxRjAzREMxNjZDOEU0RkQyNDc0RUEKKzoxMENGNzAwMDgwOUY1RkI1N0ZERjE2RjAzRTMzNDREREM4RkIzMjdEMTYKKzoxMENGODAwMEM2MDREMEFGMjA4MDdFMjMwM0UwMjIyREVDRjc4M0ExREUKKzoxMENGOTAwMDY3RjA5RjhBNzdBRTVFMUE4M0YxQjMyRDAyRERCMTAyOEUKKzoxMENGQTAwMEZENkMxNEUwNzlFMzk2MDcwQTQzNzAzRDJBNEE4NjlFOTkKKzoxMENGQjAwMEQwRjZDMzJERDM1QUNDQTBCRkM2QTNGRTIyN0Q1QzRDQjUKKzoxMENGQzAwMEZBN0EyMkNBMzlDMUQzMEI2RDM3MjNERjU0MkU4RDg1RUYKKzoxMENGRDAwMEY2MUY2Rjk5QjEwNkVGQkRERUI3NjRCNTAxOTFGRUU5QUEKKzoxMENGRTAwMDk2OTIzNTdBRThGN0RFQ0MzRkVEQzVGRUY0RDVBNTJENTcKKzoxMENGRjAwMDYzODRBQkYwNjk2REMwM0NENjA3QzBDRTgwRjY2QkFFRTMKKzoxMEQwMDAwMEExQ0Y5NzA0QkNCRjI4QTA3RTU1MDBCQzM2MDA1RUFFMDEKKzoxMEQwMTAwMDdEN0ZEQTBDQkU3RjM5MERFODg3ODhCQjk2QkM3QzkzOTgKKzoxMEQwMjAwMERBRTYxN0I0RDkyRjAxRUREOUM3NUE3RUJGQjM4NkMzNEMKKzoxMEQwMzAwMDY3NTMxRjI5NUMxRUEyODJCNzJDMjg1NEYzQUY0MUI2NTgKKzoxMEQwNDAwMDE3NTNBMkVDQjY4RUY4Rjc1MDY3RkM5MzFBNjhENzlDN0EKKzoxMEQwNTAwMDlBNzM4OTg3MTlEM0Q4REYzREEyMTY2RTE0OTVGMTJFRTUKKzoxMEQwNjAwMDZENzkzODREQjUxRkM4OTYxNEUyM0U1MUU3RkIxNThCMUMKKzoxMEQwNzAwMDBCNzFCRkUyQ0VERjI5RjU4QjBCNkRBQUY5MjlFREYzMTkKKzoxMEQwODAwMDdGQkMyMkUyRjdGNDJGNTcxNzZFQTJGRDNGNzlGRjJFRTcKKzoxMEQwOTAwMDgyOTdCNzVEQkUxMjg2NzRDOUM3RjNBMzU4REZDNTlEREEKKzoxMEQwQTAwMDNDNUY2REU3NTk1RDBBQ0VBRkYxMzE3RURGRDA1OTAzQTkKKzoxMEQwQjAwMEY0MDAzOTJGNjY1NkRBRkY2RTBDMEY1RkY4MTJCNERGRkEKKzoxMEQwQzAwMEYzOThCODEwRUREN0UxODU5MTc0REVBOEIwMUZGN0M3Q0IKKzoxMEQwRDAwMEY2ODRGNzg5NzkxMEUwQzZFMDA3OEMxODU3NkQ3QzdDRTAKKzoxMEQwRTAwMDE0OTVFRjhCQjY2NTVFNDA3RUZDQ0JCNTY0QzcxQjgzQTEKKzoxMEQwRjAwMEMzMDkyRkJERkJBRDJBQzQyRDU5QTk5RjQ0Nzg3NDQ0QTAKKzoxMEQxMDAwMDU4NjI3NkEyMUZCQUQyQzA3MEZGODkzMUVCMEJDNDI3RDgKKzoxMEQxMTAwMDRGOThDODRGOUQ1NkREOUZGNjdCOEE3RjNGM0VCRjNCQjEKKzoxMEQxMjAwMEI0MkI1RTZBQTBGODNGRkNEMTdEMENDN0NBNTE0NkFDNTcKKzoxMEQxMzAwMDlGQjE0NDJFOURCNzUzRjlERTRGNkY3RTlDNEVGQjNBNTQKKzoxMEQxNDAwMDIyOUREQkQ5RUQ4QjM4MEU5MkNDQkU3NjBFQTBGQjBBNjkKKzoxMEQxNTAwMDQ3RTVGQzJBNkZGNzczQTRGNTgzNzk3Q0REOUE0NEY5REYKKzoxMEQxNjAwMDUyOTg0NTBBOUI4MDdFREI0REI2MDFGREEyRkRFRERFQTcKKzoxMEQxNzAwMEZCNDlBNEZEQUE3NzVCOEI2MzkwNkU0M0ZBNzE3RUQ5NUQKKzoxMEQxODAwMEVEMkI4RTI5NTZEOUY1OTIzMzdBQzJGMzdCNDZFOTYxQUQKKzoxMEQxOTAwMEQ0MUJFRjc1RTkyRDM4NDk2RUVCMjIzMUNFM0E0M0Y2QjgKKzoxMEQxQTAwMDlCODE0RjE2QkVEOTAxMUYyNkY1MTNBOURGNjNBNjg1MDMKKzoxMEQxQjAwMDc4MTY5NjM1RkUyNjNBMTdDN0E1QkM5N0Q1RTJBOEMxQzIKKzoxMEQxQzAwMDdDMzE4NjVFRDIyMEI1N0Y3QzZCRjI4ODNDOUM4NzlGNDkKKzoxMEQxRDAwMEJGRkU0OEZBOUNGQzYzODBDN0JERkNFMjFBMjdEQUJDOUMKKzoxMEQxRTAwMDNERTBEN0UzMzhBMjZDRjk1OEFGOUNDNzYzQjE3NTI5MEQKKzoxMEQxRjAwMEVBQjg4MkRGMEY1RDJDQ0IzRjZGNzcwODBGMDdDM0Y3Q0MKKzoxMEQyMDAwMDBGNkQwREEyNzM1Rjg3OUM3RjBGNTVGQkM3OEE3Q0NDODcKKzoxMEQyMTAwMDBDRkJENUUxNjY1QTE3ODc0QjQyMUNGMDhEQkVFQUY4MkQKKzoxMEQyMjAwMEEzRjA1RUM5RjMwNkQyOUIyNUNGNDcyRkYyNjIzREQwMTMKKzoxMEQyMzAwMDEzQjcwQzAzQkZCQkE1MUYzRjBGRDBCOTdDRDQwN0M4RTEKKzoxMEQyNDAwMDQ3RkQ1NUU1QTNGNEU1MzcwQjM3ODU3NDI0MUY1NTMxQTkKKzoxMEQyNTAwMEM4NDdGOUNGMUJFODdDNzU1MTk3Q0E0OTE4NDcyQ0QyQUIKKzoxMEQyNjAwMEREQ0M2QTYwN0MyMzlFRkY0NTBDRUVCM0NDN0NERTQ0QjMKKzoxMEQyNzAwMDc0RjU4NDg2MUVFN0YzRUExMzhGRjM2QUIzM0ZGREI4QjMKKzoxMEQyODAwMEJFRjI1NEU3OTBCRDEwNzVFMDlEODFGRTE2OTcxOTY4QjcKKzoxMEQyOTAwMDNEMjJDNjE4NDlFRjg5NjE1NjVFREY4NUM1MkYwNkJCNjIKKzoxMEQyQTAwMEJDMzQzNDVCNDJGQTZFNDY3OUM4QTI3QTA5RjkyQzJGNTUKKzoxMEQyQjAwMDdDRjIxRDc4QUVFNUYwQzI0NERBMDczQjk5QzlGN0MxQUMKKzoxMEQyQzAwMDY2M0RGQTYyMThGQTlGODcxRUU2RTdCQjY3NjNCRTFEREMKKzoxMEQyRDAwMDVDRTdGRTlCRkI1RTE1NzJCRTlERkZBQjdEQUY2N0ZBMDAKKzoxMEQyRTAwMDA1RUU3QkYxNzNBMDdCMTY2NjY0NzJCQzMwQzk4NDc4NEUKKzoxMEQyRjAwMDhBMUI0ODc4QjlERENDQTQyMEMwOEIxOEMxNTI1MEZGREUKKzoxMEQzMDAwMDI4RkI1RUUyMkZCOTdFMTI3NTAyQUREMzhGNTUzOTI5MDUKKzoxMEQzMTAwMDdGNDE1RTk4OTkzRkZGMjVCRkI3MjczRTNEOUVEMTNFOTYKKzoxMEQzMjAwMDU4NTQyNUVEODM0NUM4Nzg5RDI2MzAzQkNBQ0ZEMTIwN0YKKzoxMEQzMzAwMDZCRENCQzM0RTRCRjIwQTJFN0NDMTc2NjdERjE2QzI2MjEKKzoxMEQzNDAwMEQyNkQ2Qzk0MjY5RTgwRkMxN0VEN0ZGRjQ0RjUyRDM0NDIKKzoxMEQzNTAwMEJFMTMwMkIzQTBCRENGRkI0M0RGOTE0ODlGNDZEMUYxN0UKKzoxMEQzNjAwMEY0QkRBNDM3ODM2OUZGOUM1OTNDNEYwQzAxNzg2NjM1QTYKKzoxMEQzNzAwMEFDQjMxOUYyNERGN0I4ODQzNDdGM0YzMzE3M0Y5NjgyMzAKKzoxMEQzODAwMEY0Q0VGQjQzOTAxQkNGREZDQzU4MTJCNDE2Q0Y2MTk0ODAKKzoxMEQzOTAwMDM1RjA3QkRFRDM1NjdDNDdFNzcxNTlCQ0JFMTJFMzlDNjcKKzoxMEQzQTAwMDVGMkYwOUUyRTdENEVCODcxMEZGNENEM0YxNzMyRTJDRUIKKzoxMEQzQjAwMENFNDhGMUE1QjIxMDE5RUU5NTREQjBFQUZFOTIxMUU5RjIKKzoxMEQzQzAwMEExRENCRkY5MThGNTBBN0NGRkI0ODIwRkY0MUI1MUVGMDIKKzoxMEQzRDAwMDJBRTdFODU5QTU4NEYyNUZBNDEzM0EzQ0U3RjU1NTNGRTQKKzoxMEQzRTAwMEVFOUY0RThCQjNEMjc5RDFGMkRGOUFBQzhCRTMzOTlEQUQKKzoxMEQzRjAwMDQ1NTU5RUI5NzI5RDM3N0YyREY2QUI2M0QyNzYwQkFFNDUKKzoxMEQ0MDAwMDFGOUE0QjcwQkRDREVBRkI1MjFFODIwQTNERDMxQjIzRUYKKzoxMEQ0MTAwMEUwQjlDNEY1OTkzMjlFMEE2OUZDRURDNDRGN0E3NjUwQTIKKzoxMEQ0MjAwMDFGODE3ODZDRkVBMjE5Rjk2MzcxQTg4NDcxOTFGMkFFMjQKKzoxMEQ0MzAwMDU2MDdGNTFCNkFCNjcwM0IyMTdGMTdDNzlFODg3Q0UwQjQKKzoxMEQ0NDAwMDMzNDYyMDFGN0MyMUU4NEMzQ0ZGODA0RDA3RjVFNzE4NTAKKzoxMEQ0NTAwMEFGNkZGQkNFOTIxNTY5MzQ2RkIzNDUzN0EyM0JGMkRENTcKKzoxMEQ0NjAwMEY5RkNCNUYwREVFRDRDNEFFODhFRjdDNDU2NDQ0RTlBMEUKKzoxMEQ0NzAwMDhDRjVBRjg5QTQ5NzQwOTg3RTlCOERGRURFNkI2MjA2OEIKKzoxMEQ0ODAwMEFFNTNBN0FERDg0M0YzOUJGM0M2NDBCQzQxQzBBNkJEODUKKzoxMEQ0OTAwMEZFMTlEOUE3MzkzMjdGNzlFNDczNkJDNTAwQkYwMUE1QTYKKzoxMEQ0QTAwMEZFMjY2RTI3MUMyMkFCQUMyMzU4RDBFQzU3MkFGNUU1OUMKKzoxMEQ0QjAwMDJCMEM0NDhGRjJBNTI2QTI3Mzc5RjU1RkE5REZGMkQwNzkKKzoxMEQ0QzAwMEU2MThBNDQ3Rjk3NjAzRTVFRjA4QkQ0OUEyRjZDNUQ1RUQKKzoxMEQ0RDAwMEJENzMwRkMyQjg4QjBERTExNjAxMUU5NTM5QzcxQTExMjUKKzoxMEQ0RTAwMDJFQUIxNTA4NTZCRTU3QkVFMkYzMTg1RDFBRUYwRjRCNzAKKzoxMEQ0RjAwMDkzOEVFRkIzRkFGQjhEOEU0MzdCNzY3QTZCNjREQzM0Q0MKKzoxMEQ1MDAwMDE1REQ0RjJGRDkxMTg2RkJDRTQ3ODNEQ0M5NzhDRUQ3RTYKKzoxMEQ1MTAwMDNCMkZDODhBRTcwQTk1NzhEQUU5MjVDOUZDM0U5MEE1MzEKKzoxMEQ1MjAwMDM5MTRGN0FCNjczQzlDMTg4MTc2RUVCMEM1NkRDNEZBMzAKKzoxMEQ1MzAwMEMzNzVGMTc4NjQ4RUQ5MkM5NjVDODQ2REZBOUIwOTNFOTQKKzoxMEQ1NDAwMDJEOUYyM0ExM0ZDQzFGMjg3MEJFMjlEQkJBQzc5ODAwQUUKKzoxMEQ1NTAwMERGMUIyNEUzRTdDQzZCNDdGNzBFNDU3QzAwMUY1OTUwRDcKKzoxMEQ1NjAwMEZGQzQzNUE3QTAxRDJFRDczNUE3RjQ0NEZBQkMyMjkwREUKKzoxMEQ1NzAwMEJGMDBFQjUzMUJFNjFGOTk4QjdDMzUwOEY0QTFDQzU3RjkKKzoxMEQ1ODAwMDczRUI3NzJDNDBGOTJDN0ZFQjY0M0VFMkY1Q0M1ODY2QzgKKzoxMEQ1OTAwMEM0Rjg1OEI5M0M3RjU4M0Y3RUEwODdGNkU1REIzNkU0RjcKKzoxMEQ1QTAwMDMzRkVGRTA3Qzg3NzhBQkQwNzc4ODkwMUUwMjYyMzg3MDYKKzoxMEQ1QjAwMDMzNkVFMkZDRDM2NEY0NTBERUJCQTY0OThDRDFGRTk5RjUKKzoxMEQ1QzAwMDlFOERDNDc2NDA3OTdFMEY0MDE0RTVGQjY5OTVCMTEzQkEKKzoxMEQ1RDAwMDc4REUzREE3RkFGQ0RDNUNBQzRGRjNENzc3QzYzNzg1MjUKKzoxMEQ1RTAwMDMyNUYxNDU3OUJDODJFMTVDQTc4RjFBQ0Q4MUU4NjdDQzIKKzoxMEQ1RjAwMDcxRTZCNTNEN0I4N0EyNUM2QzEzMkM0QzJEMEY4QTFDMDkKKzoxMEQ2MDAwMEM2Nzk3OTNERTBFRjQ5QzRERkI2RjNGOTk4ODc2Mjc2RDEKKzoxMEQ2MTAwMDZCQTg4NDM0NTRGMEE0Qzg5QjgyOTcwQUM2RjFBMEUwOUEKKzoxMEQ2MjAwMEE1NDIyRkUzNDlBRUJGNUJDNjQzMTlGMzUyN0ZBQzc1RTkKKzoxMEQ2MzAwMDgwQjQxOUZCN0ZFQjA3REE2RjNCMzM4RDA5RkM5QzMwMUMKKzoxMEQ2NDAwMENGOEJBNkNDQ0YxMUExRERERjVGMjZDRjZGRkE0RERDRUIKKzoxMEQ2NTAwMDZFOTY1OUI4NUQyQzhCNjI1MkY1NDBFMjMzOUI1MUM5RUUKKzoxMEQ2NjAwMDJGMDk0RENFQkM3MTQ0MzNGRUU3NjUzOTY4QTMzN0NFMzAKKzoxMEQ2NzAwMDAzQzZFOUQxRjE3QjgyODFGQUVCNTExOTdGNDdBQUE3NTIKKzoxMEQ2ODAwMEI4NTFBRkNDNzY0MjNGOTkyODBGOTZBOUI4Q0ZDOTVFNjIKKzoxMEQ2OTAwMDE3NjVGRDBEMzJBOUZBNkVERUFCNDc4ODBGNDE3NzQ5NTkKKzoxMEQ2QTAwMDExQjA2NjMxNkM4MTcxQTBGRkQ1REE5QkUyODU3OUREMUUKKzoxMEQ2QjAwMDNDMzRFRkNENjMyQzRDMDdGQUU0ODhFMDA5REQ4OUY2QjEKKzoxMEQ2QzAwMEUwNTE5MUY0OTQzMjRFOUJGMzYzQTI4N0FEOEVDQjI3NDkKKzoxMEQ2RDAwMEYyMEJDNjA3MTUzOTBEMUNFRjMyNzlCQzI2OURENTgzOTgKKzoxMEQ2RTAwMEU3ODJEOTYyODFFRUFGODk4QkNGODQxRUU0RjY4RTIyNjkKKzoxMEQ2RjAwMDg5RkVGRTZGRjkwMEY3MjM2RDE3QzMyNDgxNkFBQzdBQTcKKzoxMEQ3MDAwMDZDMzdGNzYyNTgwMkRBRUYyMzcyRENFMUM4RDIxRDYxOTAKKzoxMEQ3MTAwMEM1MkEzQUFDRUJFQzNCQ0I4NjQ4NDhGRkJDOTA4MzhGRTQKKzoxMEQ3MjAwMEExMUMzRDc1OTMyMEYzQkY3NUU0NDJENDA3OTdDMjI0MzIKKzoxMEQ3MzAwMDNDMkZENTE0RTE0QzQzM0ZBQTQ5Qzc5NkIzMDhDRTg3ODYKKzoxMEQ3NDAwMEZBMTgzRkZFNDA1RTA4N0Y1MDJGM0Q2NUYxQ0JBNTMyQjEKKzoxMEQ3NTAwMDZFQTA5QjFCRTkwNkVENkQ1QzhFQUNCNDhGMzEzNzhBRjEKKzoxMEQ3NjAwMEVGOEI1RTVCOUUzMjNDQTQ5RkFBMDU2OTYzQTZCRjlEQkEKKzoxMEQ3NzAwMDcyMkZFRjcxNzlERTI0MjMzMTdFN0I4MEZDODlGNkNFMTcKKzoxMEQ3ODAwMDI0RTczMTBBQ0M4MzdBN0JBRkFFNzE4OEJGOEExMEIzQUQKKzoxMEQ3OTAwMDBFOTc3MDgxRjU4MUIwN0YzRDU1QTk0NzNGOUYyRDg5MzgKKzoxMEQ3QTAwMEREQUJCRTk3NzYzNEM4NDlGN0NGQkNERDQ1QjYxMUU4OEUKKzoxMEQ3QjAwMDUxM0RFRjIzN0U5RUI3ODFERkRCNTJFQzM0RkNBRDZBMzYKKzoxMEQ3QzAwMEUzM0Y3OEFGMzRGMzdDM0VFQUQ3M0ZFNjk4RTg1RTUzMTgKKzoxMEQ3RDAwMDRDN0Y3RURFRTUxNEFCMzMwRTQ3RkJGRjZENzM3RTk4MDYKKzoxMEQ3RTAwMEU0NUY5RkRDNzJEMTJEODY5M0JGMTBBRjU5MUY5NEI1QjMKKzoxMEQ3RjAwMDdFNDBGMjVDQ0U5QUU5M0VGNkI0MTU5RjhEMUQ4MkY0MTAKKzoxMEQ4MDAwMDdFRDk0MEU3MDc2NkQ0QzY5MzlEM0JCOTY5N0EwNkNFQjgKKzoxMEQ4MTAwMDc3REFEMjY0ODI2NzZEN0U5MEMzMkI3OEZFQzM2OTRCNDIKKzoxMEQ4MjAwMEIzNUU0MkZGRUI2ODkwMkQxRkY5RDlCQjVBQjBFMEZBMDYKKzoxMEQ4MzAwMDZBRDhFNkFDNDVGNzQxRkRCMEQwM0U1RDcxREM4NzM2NzUKKzoxMEQ4NDAwMDFEMUQ4Qjc0M0ZCNDUwMjRGRDY0REJGNEQ0MjRBQ0I3QUQKKzoxMEQ4NTAwMEVEMTRGMUM2MThBQzY3MkM4QjMwQUYyOUQzODc1QkQwQTEKKzoxMEQ4NjAwMDJGNTBDRTE3RDYxOEI4QkUzRDJGRUI4NzkzNkQyNUU3MDYKKzoxMEQ4NzAwMEQzQkM5QTlBMTRGNDk3QkMxQkMwMUVFMUJFQjdEMTVCMEYKKzoxMEQ4ODAwMDQyRTdCQjA1OEI3NTIzRjBDQkI3ODI5MzYwNjZCMTI0NkEKKzoxMEQ4OTAwMDU0RTdFMDdEOTZGNTk0MUZFNzVDQjJDOTgyN0VGMkZEMDUKKzoxMEQ4QTAwMDI2NjY0NUJGRjZGRUY3N0EwRkMyQTU4MjRENUU1NzhERkMKKzoxMEQ4QjAwMDhERTRERjU1RjBBNTdDREYyQkYzM0QxMzU3OTVEMEJFRUIKKzoxMEQ4QzAwMDQzQTQ5NDgwRkFBRDQ5M0UzNzdFNTQxRUVGQzkyNTJGRkMKKzoxMEQ4RDAwMDRGNDJCRkUwRTQ5NkU0MDhBNkMyRkI0OTM5NEZEMzJDN0YKKzoxMEQ4RTAwMEQwODNEQjNBNThFRkZENzg5MzEyNzc3MEQxNzc0QUU1MTEKKzoxMEQ4RjAwMDc4RTAzRTQzNkQyRkNDRkIxOTc4QkZFQkM0ODYyMDMzMTQKKzoxMEQ5MDAwMEU2RTcwREJDRTc3NUMyQzBFRDQ3QkJGQjVFM0JCNTcwRkIKKzoxMEQ5MTAwMDYwOUVEQkMwRjEyODY1QkJGQkZGRkQ0MzNBRjRFMzE1RDUKKzoxMEQ5MjAwMDM5MEI3Q0JGREQ3REYyQTRFQjNCNUY4NTc5QzlGMEJFOEUKKzoxMEQ5MzAwMDc3RDM0RDhDQzYzOTMyRjhDNzM3NTE1Rjk3RDQ5QTJDQkMKKzoxMEQ5NDAwMDc4RkZGRTU4OTA0NEVCMjE2NzE2OTMzNkEzOUQzMTRCMjgKKzoxMEQ5NTAwMEUxQjg5RTNGQjYyRjgzQ0VGRjk1N0NDNTQ4QUU0QUVBMUMKKzoxMEQ5NjAwMDQ1MTdBNjJBRkU2MDc1REZERkU1MDJGQzYwQkRDMThBQUYKKzoxMEQ5NzAwMEVGOUY1Q0IzN0ExMjE3MzM2RDlFODU2Q0M2RTU3MzI2RjQKKzoxMEQ5ODAwMEFDOTNEQzE2RkZCQTI4NzBCRDM0N0JFRDFCNzQ4RkYwQUUKKzoxMEQ5OTAwMEU3NUEyRjI5NzFBNDQwN0NERkRBNUZDRTRGREFDOUZENDgKKzoxMEQ5QTAwMEI5Rjc4MDZEQjIwN0I1Qzc3NzZCOTU4M0Q2NDU2N0FCN0UKKzoxMEQ5QjAwMDRBQTlDQ0E5REI5MEQ3NTNDMkZCMTQ0NzdFM0IwQ0U1QTgKKzoxMEQ5QzAwMDI2MzQ5Q0UyMjFBRDU1OTVCNDg5Nzc3NjY3QzY2NUJDNEYKKzoxMEQ5RDAwMDFGRkE2RTQ4QjgwNUY1QzVEOUFBODVGMkU1MDI5OTRGMzgKKzoxMEQ5RTAwMDY0QkVCQ0E1QkU1MUVDQzlBODdEQzMzMDY4QkYzQjI0NTIKKzoxMEQ5RjAwMDlDRUVCQTI0RDlCMkMzRDFDRTJCNzQwREJDREZBQ0NDMTMKKzoxMERBMDAwMEVGRDRBMzlDQUVDQTc4NEY2RDk5MUU4NjdFNjdFM0JBQTkKKzoxMERBMTAwMEM4ODY5QzI4M0M5RTFCNkU0MTdGN0JBNjdDRkVFNUY4NTkKKzoxMERBMjAwMDVBQUU2RkJFMzU4N0JGMzQwNkNGQ0ZBQzlGMTg4M0VCOUQKKzoxMERBMzAwMEJBMDcwRDVFQTMxNUZBQjVFRTFBMUY4NjcxQkM2RkY0MTYKKzoxMERBNDAwMDlFMzBCQzZGRkMwREI0NzdBMzlERDBCQjQ0RDQ3MzQzMTAKKzoxMERBNTAwMDBCMThFREUzMEQ3NUVCOTkxNDRGNUJFNkM0MTczOUFENjgKKzoxMERBNjAwMDdBMTdEMkY1QjRGQkUyOUUyQkM4NDdBRDNBOEE3NzAxMEMKKzoxMERBNzAwMDY2RjY1QzgxRjZENkQwM0UxNDI3N0NGMDZEQkVERTY0N0YKKzoxMERBODAwMDNGNzZFMUY1MDFGNzE2OUZFOUNGRkQ5NjEzRUJERjFDMUEKKzoxMERBOTAwMDQ3RUJGMzREMDYwQjhFRjNFQ0E2Q0Y2M0YwMUNDRTZDNzgKKzoxMERBQTAwMEM2Q0ZENzdGQkI0NUEwNzlDQzA2N0UwQzhBNDdGREMwODgKKzoxMERBQjAwMEUzQTBCMzQxRUY5Qjg1RjY3Qzk4QjdBNTlBRjg3MDM2NDIKKzoxMERBQzAwMEYwMjFFNkY1OUU2REUzRjk5ODY3NjMzRTY2ODlCNUNCNzQKKzoxMERBRDAwMEZGRDE1NUU2QkIzOUMwNzc3ODdGRjdFN0NFRkJGMTNCNDYKKzoxMERBRTAwMDg1MEYwM0U0NUVBMUJCODIxNzg1RkU3RTNFNjQ5QUZDMkYKKzoxMERBRjAwMDgyMTE3NTAzODdGNzY0N0U3REEwRENFRjYwN0FDRjJBMDAKKzoxMERCMDAwMEJDQTdCMTQwMENBREM1N0M1NUZCRjU5NTdGQTBCQzJERTUKKzoxMERCMTAwMDRFM0REQjRDRjY5Q0E1NjJCRUJDMDVFMjRENTY4QzA3MjMKKzoxMERCMjAwMEQ2MTgyQkRCRjJCQTYwN0Q2MDVFMTczMTg0QkYzRjFFRDIKKzoxMERCMzAwMEYzMTNDMzdDQkJBNkM1RDNGNzI2NThBQ0EzMTBERDg2NzAKKzoxMERCNDAwMDI4MEZDNTA1QzQzQzlEOERFRUU1RDU5ODY4REQxQ0E4NjEKKzoxMERCNTAwMDg3RUE2NEZBREU5NUM2RjVEMEZGRjRFN0U3QjU5NTdCNzIKKzoxMERCNjAwMDdGNEEwOTlBQjEzN0YyRkJGOEUwODg0QjEyMzREOUQ1RDUKKzoxMERCNzAwMEZGRDBEREI4NEYzQjdFNThDNDJGMTJFMUZCN0I1RjNERTkKKzoxMERCODAwMENBRTE4Qzg4RUQwOTAwMzdGNUZGRkE2RUJDQzczMUZFOUIKKzoxMERCOTAwMEU2ODgyQzAzRkEwMUQ1QzdFRTFFMDlGMEYxRkVCNjc3MzAKKzoxMERCQTAwMEZCQUJCRUEzRjQwQkNGNzdFM0YzN0ZDNDM5REVFRjRGQkIKKzoxMERCQjAwMENGQkQyNTQ4RUY3MzQyMThDRkY3OTZFNEE1MzhBOEYyRjkKKzoxMERCQzAwMERFMDE4MTFEN0U1N0YwQzMxRTAzOEJDM0JDMDZGRjgzOUQKKzoxMERCRDAwMEJBM0JCQUYzQjI3QjlBRUQ2M0ZFN0RFRDczQTREMDc3QzYKKzoxMERCRTAwMEI4Q0U5NEY3N0Y3NDY2Qzk4OEZFOUZERDZBQjRGMkZDRjQKKzoxMERCRjAwMDhBQ0M2RTA2QkZFQTJFOTk3RjhCQ0Q5NzQ3OTJGREFERkEKKzoxMERDMDAwMDY0NTYxMzI2MzA1OUFFQkQ4RkQ1Q0Y3RjZGNkZGRDhEMTMKKzoxMERDMTAwMERDREI2MzRFOUU4N0FGNDZDRUMzRDdEOTNENEFBMUUxMzgKKzoxMERDMjAwMEEzMUZEMEJGMENCQzNGOTVGMTQ5RjM1QkM4MjdFMzgwMkQKKzoxMERDMzAwMEFGRDA1RTY0MzY3M0Y4MkU5OTRGQ0E3NzhDQTU3Q0NGMkYKKzoxMERDNDAwMEYzMEYxODVDRTgyN0NDOTJGREIxMjQ0NzE3MjY0MUJCOUYKKzoxMERDNTAwMDRCMjBCRkE4MTc1QUM3Qjk1MzUwN0Y5Q0E4NjJCNTQ5M0IKKzoxMERDNjAwMEEwQjAwQUNDOEU0QkZEMDE0RjRERjExRjUxNUVCNDEzOTUKKzoxMERDNzAwMEVCNkJDMkQwRUYzOTAzRUI4OTMxRDA0NTk5RUNERkIzQzAKKzoxMERDODAwMENCQTJGQjM2RjQ4M0UzRkI2RDVDQTlFMkI3OUY2NDNFNTUKKzoxMERDOTAwMDZCOEQ3N0M3RTFGQUM2MTk2RkUyRjkxQTJGRUZBMTNDMzUKKzoxMERDQTAwMENGMDUwOUEzQjMzMDhFQjRCRjZBMjczQjlBRUM3RkFGOTAKKzoxMERDQjAwMEIzRkIyODQzNzUyMzBDNjlBQTdEQzk3MUZBOEVDRjY5MUQKKzoxMERDQzAwMDlDNTFGMjY5NkVFMkY2REJBNEFGQTUzQzVBNDBDQUNBODkKKzoxMERDRDAwMDZBODJFRDE0NTc4QTQ1MUVDNUY4QjBGNDEwQzFDQjY2QjAKKzoxMERDRTAwMDMxMEJERDYzRjVFRkQzRDE3RDUwODVGRTM2RUI5NTkxOTkKKzoxMERDRjAwMEQ4NkUxQ0QwMUZGNThEQ0VFQ0Q1MjM2QzJGRTBFNzUzRUEKKzoxMEREMDAwMEZBMDFFMTUwOUYyOEY0MUYyNTJFRkEyREQyNjFCRTdDMjYKKzoxMEREMTAwMDhGNkJCRTUwQzk2MTgzOTlDRUI5MDZFQTQ3OEM2QjE2RUEKKzoxMEREMjAwMDkxREU3NEVFQ0Q0MTdGMENGNDI0RTU1NTkwRjVBMjA0MEMKKzoxMEREMzAwMEZGQTNCQzQ4RDkxQjhDRDRFQ0RBNzk5MUY2RTZGQzA3M0EKKzoxMERENDAwMEZBMzEyMzREOUI0NzVDQTE5M0UyNUY3NTQ2Mjc0NTRGMEYKKzoxMERENTAwMDAyQkQ4NkE1NDU1RjNGQkQ5NDNDNjVGMzlGRTdGMUNFQ0MKKzoxMERENjAwMEY5Q0Y0RjhGMUQ0NDc4MDM4OTQzN0YyOEVENEY0NEM0N0EKKzoxMERENzAwMDk5RjIxQ0Q4RkE0OEUyNjNDMzA4QkI4NEZBNzZFQ0NFNjkKKzoxMEREODAwMDlFNEM4MjQ3QjM3NjBBNzRCRTc1Q0NDRTQ4ODJDMzdDNjMKKzoxMEREOTAwMERENzk1RTI1RDlERThGRkQ2M0I3MTExODlGM0NGOUQyN0UKKzoxMEREQTAwMERGMUZDNkJDRjc2MzdFQzMyODdFQUMwQjBFQTE3QzEzQkQKKzoxMEREQjAwMEUyMDgzOThGODMxOEYyMjFERTYzQkQyMEYxREZBMUIwQzQKKzoxMEREQzAwMEIzNzZGOTAzNzQ0NEZGMjY3RTRFMTY1Njc5NEU0RTI3REQKKzoxMERERDAwMDdFRUY2RkZFM0U2RUU3RTcwRkU3RkI4MjE3RjAwRDY4MDAKKzoxMERERTAwMDdGQTE1MEE0M0M0RENGMDRBNzkzRkY1NjczQjc4MUVFOUIKKzoxMERERjAwMDQ3MzBBN0VEMkZCOEFFOUEyQ0YzODMyOTE2MTY5NjJBMzIKKzoxMERFMDAwMDdBMDU0OTIwQUYyQUZBM0MxRUY0REIwRjFERDBCRjA3NkMKKzoxMERFMTAwMEQ2NUQ0MjBGQzY4MjUzMjMzNEY1N0E2N0QwMzc5ODNGRDgKKzoxMERFMjAwMEQ2MTAyQjVBNUMzMEZFNTA2QjBGNEQ3Rjc2QjFDQzgwRjQKKzoxMERFMzAwMEYxMTRFNkUwN0VCNEMyNUY0QzZDRDVEM0JERjk1QzlFQjQKKzoxMERFNDAwMEJGRTJFRUM5REE3QjkyODZEQ0YzMjNDOURFRTQ2QUZEMjkKKzoxMERFNTAwMDZGRkIzNUYyMzZGRDRBRTFBNzdFQUM5RjlDOTc5RUVDQTYKKzoxMERFNjAwMEZGODUxNjdFM0Y0NDYyRjZCNThBQkNBMEZFMDdFRkU2NEEKKzoxMERFNzAwMDE5QzRDRkE0MjYwMzczNDk4NEJGRDdCMEZFODJEMzY0RUMKKzoxMERFODAwMEMxNzg0MDlCMUY5RTA0RUY0NUExOTEzNDEzOUY2MzVFQjAKKzoxMERFOTAwMDUwRjUzQzMxMkZBODFBMkY5ODE3NTQwRDYzNUU1MDc1MUEKKzoxMERFQTAwMDdCQ0MwQkFBQUVDN0JDQTBFQTdBQ0MwQkFBODYzMTJGREEKKzoxMERFQjAwMEE4QkEzREU2MDU1NUMzOTgxNzU0REQxRUYzODJBQTYxNDIKKzoxMERFQzAwMENDMEJBQTZFOEY3OTQxRDVGNTk4MTc1NDVEOEY3OTQxQTcKKzoxMERFRDAwMEQ1MzBFNjA1NTVCN0M3QkNBMEVBN0FDQzBCQUFBRUM3QzkKKzoxMERFRTAwMEJDQTA2QTE4RjM4MkFBREI2MzVFNTA3NTNERTYwNTU1NTcKKzoxMERFRjAwMEQ3NjM1RTUwMzU4Qzc5NDFENUVEMzEyRkE4MUFDNkJDNTkKKzoxMERGMDAwMEEwRUFGNjk4MTc1NDBENjM1RTUwNzU3QkNDMEJBQUFFNTEKKzoxMERGMTAwMEM3M0NBMEVBN0FDQ0ZCQTk4NjMxRUZBN0JBN0QzMzVCNzgKKzoxMERGMjAwMDkyOEM3NjZDNzdCQ0UzN0ZEMjY4REZFOTVCRTJFNzgzQjMKKzoxMERGMzAwMEY3MDMzRkEzMUMzNjREQjQ1MEZFQzIxQjVDMjc3RTlFRTgKKzoxMERGNDAwMDI2RUZGN0M4RkM3Qjg5ODU0Q0M1NzNFODlEQkRBRkYwMTMKKzoxMERGNTAwMEU3RUJCMkJGMDFGNjYwMzlGMTJGMEJBRDQ1N0ZFRTcxRjMKKzoxMERGNjAwMEJEOERFRTQzMzlFQkY4RkQ0NEE2RTc3RUMwMDI1MUY2QzUKKzoxMERGNzAwMDdGRTRCQzEwMEI0NDg5RkMwMENDMURBQzU3OERBN0FCRDMKKzoxMERGODAwMENEQ0NGNDJBM0M0NDE2NTgzNDcwQjQzRDU2RDNCRURCOTUKKzoxMERGOTAwMDY0NDk1M0RGREQ5MUFBQTlFRjU5NkFENUMwQkQyQkIzRkYKKzoxMERGQTAwMDM1RURGQjJDQjQ2OUUwNzg2NzgxQTY3REUyNzJCQjA2OTMKKzoxMERGQjAwMDRFQUU5REFDNjlERjc3QUQ0MzUzREZDRjU1QUFBOUVGRDUKKzoxMERGQzAwMEJGQTU1MjAzMEZBODVCQTg2OTdGRjM0RUE3QTY3RUEwNEEKKzoxMERGRDAwMDdCQjlBNjNFQTNBOTU2MDM2NzM1QUZENUI0MUY3MkQwNEYKKzoxMERGRTAwMEE1QTlDRkYxNkNEMUQ0MEZGQkI2NEUwM0RGRTJEREE5QkEKKzoxMERGRjAwMDY5N0Y5QkNGQUQ4MTg3QjM3RDlBRjY3OUU2MDMxQTc4NjYKKzoxMEUwMDAwMDk0RTU0QjRERkJEQjYzOEY2OEVBNDc0QjI3MzVGNTY1OUQKKzoxMEUwMTAwMEE3Qjk3RkNGNkE2MDdEODA3MUNBMTA5RTVGNjNBRTlCOTcKKzoxMEUwMjAwMEQ1QTE3RjcxNjdFQTc5NEQ3QjQzMTRBQzE3ODA3RkNBMTUKKzoxMEUwMzAwMDQxMUZBMkRGRjc3RDk3MzhDQUM3Q0MyQUMzQUM3OEVGNUYKKzoxMEUwNDAwMERCMzlBMkYyMEZFQTdCREU2M0FEM0Y2OEJFRkY0QzcwQTYKKzoxMEUwNTAwMDk4M0I4OEQ2MTc2NkIyQjcyMzA2MjQ5MDdENkNDQjI3RjEKKzoxMEUwNjAwMEEyREM2NzY3NUUxNjFCNDUyMTIxMkZGQTQ3MDJGRUMyMUMKKzoxMEUwNzAwMDEyQzA2MTM2OUUxNzFBRkMyMEYyOUYyQ0UwMTdBMUJGMzgKKzoxMEUwODAwMEQ5QjYyRUQyQzVDN0EzNUQwRUY2RkJDNUJEQUVBOEYyQUMKKzoxMEUwOTAwMEJDNUNDQjJGQTY2RjY3NTE5RURFNTEwMzMwMUU1RUY3MkUKKzoxMEUwQTAwMDQ2M0VBRUIzNjYzMUU3MzJEQzRGNTRGMjJDRUUwRkQyNkYKKzoxMEUwQjAwMEM2Qjc5NDcyQjQxOUYwQUJGQURFQkVBMERBNUU4M0FFRDYKKzoxMEUwQzAwMDIyRUZBM0NEQURENEJFQUQ1RjM5RkUyNUMwNjRFN0FCNzIKKzoxMEUwRDAwMEZBRkYyREFDRkZGNDIwRDdCNTU1MjA3RkUwMEYzRDU5NTYKKzoxMEUwRTAwMDY1MjE3ODRENTUyQ0MxNEY1NzQ5NTRBRUFENEFBNUYyMjQKKzoxMEUwRjAwMEI5MkEyQkQ1QUZBRkNBMjZGODg1MkExQkMxQUVBQTAyMTIKKzoxMEUxMDAwMDJBMzc1NkQ5RTlGOUE2QUFDOTA0QkY1NEU1QTA3MjRCMkIKKzoxMEUxMTAwMDU1Mjk5NUFGNTQ1NTUyRkRENkFBODUwNEJGNUVFNUE0OTYKKzoxMEUxMjAwMEIyQUU2QTM5M0RERjU2NTU0QjcwN0RENTVBODJERkFBQjMKKzoxMEUxMzAwMDcyNTFCOUIzNkEwQjk1RUY1NEQ1NTE3RDAzRjg2RjA4NEUKKzoxMEUxNDAwMEVGQUU3MjEzRUNBRTZBMjJGOEZEQUE2NjgyM0ZBODNBREYKKzoxMEUxNTAwMDQ4RjBERTJBMEY5NTRENTVERjUyRjlFNzJBMkZENTdGN0IKKzoxMEUxNjAwMDUyRTUyM0I4NTVERTg3NTgzNDQwRDBEQ0M3NTM2MDNEQjQKKzoxMEUxNzAwMDNCQzZGRDNEQ0M1QjgxNzkxOEIyMEQ2N0FGOTYxRjM3NkEKKzoxMEUxODAwMDkwMEVBN0U0RkUwRDIzQzA1REMyMzg3MjhGOTQ4RDM1Q0EKKzoxMEUxOTAwMEFBNzVDNUYyMDFEQzVGQUNENkYxRkMyREQ1M0Q5OEE1ODIKKzoxMEUxQTAwMDg2RkM3NjFCRTNFN0I0QjhERjNFMTNGRjI1QzFEM0E4OTYKKzoxMEUxQjAwMEFBQkRCOERFMjhBOUU0NzlDQUIzOTAxRjUzODkxRjNGQ0UKKzoxMEUxQzAwMEI5QTE3NTlBQkMyRUQ4OTE2ODdGNjYwMEFFNDM0MjVDQjcKKzoxMEUxRDAwMDVGQzQ2N0ZBRUZEMTFGNEM3NDNDODc3QzdBQTFGMkMxMEYKKzoxMEUxRTAwMEJERDg3QUE2QzU5QTgyMUYxOTZCNzI0NzYzRkUyRkVGQkUKKzoxMEUxRjAwMDNFRDFCQTUxRUFGQzdCMTVGMkZEODc0RUVCNzc5RkVDREUKKzoxMEUyMDAwMDg1RjZBQUUwMjc5MUUyRkFGQjBEQTE5MzcxOUY3RkFCRkYKKzoxMEUyMTAwMDhDOEZBRDAzNzQ5QUIyMjhDOUZFMkE4RUU3NDQ3MkU1NEEKKzoxMEUyMjAwMDRCMEYwOUZFRkJGQjc3RTExMjFGRTQ3QjNDOTMyODBGQTkKKzoxMEUyMzAwMENFNDQ2NkZCMTA1REYwQkJDMTExNDRGODFFRTZBNEIyRUIKKzoxMEUyNDAwMDM1QzE1MThGRUZERjBCMEIxMDg0MUQ0MzRENzExRENENzgKKzoxMEUyNTAwMDI3NzAzQ0JCRTVGMUVDOTZDN0ExOTQwQjkyRUNCQjEwODgKKzoxMEUyNjAwMDZGQzc5MjZEOUFGMTZDOTVGMzMzOEM2M0RFMTc3MDVDMTcKKzoxMEUyNzAwMEZGREM3NUZFQjg5MEU4Qzc3NzVCM0M4NTU1NTI5RThDRjUKKzoxMEUyODAwMDIyQzZFMzI5OEY2MzVFOEMyODdGNUUwQzY1RkQ1MEI0NDcKKzoxMEUyOTAwMDhGRkZDRTExRkRBMUZENUMxMDRGRUJEQkMwQkMxOUNCOTUKKzoxMEUyQTAwMDg2RUZFMTc5MzA2MDNEODZGNzdGOEJFNkZEODJGNDJGQzMKKzoxMEUyQjAwMEZFMUUxNERFREI1REQwRTUzMEU1OTlGMUNDMDI1RUVEQUIKKzoxMEUyQzAwMDQ5NzkzNTc4REUxQjA3MjBCMDI3RTVENUEwN0FFMTI2MEQKKzoxMEUyRDAwMEY4N0Y3NzFDOTczOTU1NEZFM0VCNDJGOTRFOUUwOURFRTQKKzoxMEUyRTAwMDRGNzk2OTMwQTY2MEVBOEE3OThGNzlCQzY2QkZGRDNDQjgKKzoxMEUyRjAwMEY3QkJBM0JDNzQzRjc1NDdBMkUzRUIwMTNDNEVGRTc0MzEKKzoxMEUzMDAwMDA2QzY4OTkwOUZGMDNCMTYxNzlENUYwMzdFMzIwQTgwRjgKKzoxMEUzMTAwMEEyOTk1MUMwNEYxREY4MUIwQURGQ0M5NUVGRTEyOENGMjEKKzoxMEUzMjAwMDgxMUY1QjExREY2N0RGMUU5MjhBN0M1M0IxM0I0NzQyM0UKKzoxMEUzMzAwMDdDRDdFOEY4N0QzQUU3OUZFNTdENDFGOUY3MTBDNEYwMTYKKzoxMEUzNDAwMEI0MEQ3NEVGMDA5RDcxQTQ2RjRFMjhERDNCNjgxNEQ5QTUKKzoxMEUzNTAwMEMyMzczQUQwQUZBMUU5NUNERUY3QzdGMjdDOTIzNTAxNTMKKzoxMEUzNjAwMEZCOTNDNjc0NEU3NzYzM0FFNzg3QjFFRkVGQTMzQzY0NDMKKzoxMEUzNzAwMDczOUI3OEJDOUE2NTdBRDJFQzFEOUNDQkFBNThGODlCMEIKKzoxMEUzODAwMEE3OTM1NEYzQThEODc5ODQ5RkU3NjI5RTM0RjUzOUFFRjkKKzoxMEUzOTAwMDY0RjlGQjBBRkY4OUM2NTBDNzg2MTBGNUY4NzhGQzAxQkUKKzoxMEUzQTAwMEU0MjAyNDNEOEJFNEUwMzhERUVCMUU2NzkyQzJFRjExREYKKzoxMEUzQjAwMEU4RjdDMUNFNjI3RTE5QzcxRjJDNzQxRTUwMzkxNzM4N0EKKzoxMEUzQzAwMDgzRDlBOTlDMDk5NjEzRjlERUVFNUM0REY3RTc2N0IzOTQKKzoxMEUzRDAwMDNBN0EzRTM3N0I3QTFDQzIxNUNDM0IzMjE2RDc0N0NCRjQKKzoxMEUzRTAwMEFCM0ZDNDcwRDBDNERBRDVBM0JBQzNCQzI2QjhBNjdERUYKKzoxMEUzRjAwMDg4RTVGODREQzI3MUE3NDQ3MkQ0M0IxREY3Qjc4NUNBQjIKKzoxMEU0MDAwMEE1M0RFMDdCRjc2RDFEQkUxNEUzRDZFMzQ0NEUwN0Y2NTEKKzoxMEU0MTAwMDMxQTc0MzExRjBCMzE4RDE3RTdFMjAzNzQ5RTk1QzZFRjUKKzoxMEU0MjAwMDY4RkM4QURDMTQyRDY2MzYzQzdGQTBEQzBGNjk5M0EzNjAKKzoxMEU0MzAwMEVDMzlGRkU4ODk3QjM4RTA0RjIyQkY1NkVDMzY0NUQwRjcKKzoxMEU0NDAwMEZBMTRGM0NDQTBCRTkyRTU2N0E5OUVGQjk3NEU0QzZERTMKKzoxMEU0NTAwMDRBRkE5M0ZCMUIwNjlCOUNDRjhCNzE3RjY0OEU5M0FGMTQKKzoxMEU0NjAwMEM3NEUxOUI4QkM5RDNBMTRFQTQyRkU1RUQwRTVGNTM4QjUKKzoxMEU0NzAwMDkyMEY4MzIyMUYzRjREQTVGMzNEMENGQzhGNUJEQkZCMEUKKzoxMEU0ODAwMDFGNkQ3OTY2N0EzMUYyMzc1ODlDMjM3NjUwQTJERjlFNTEKKzoxMEU0OTAwMDlGRDJCOTA2ODdGMUJDRkNBMzEwNUY3QjYzRjlGQTc5QzAKKzoxMEU0QTAwMDBFRTZBMUMxRkFBRTc2MDlFM0E1QTdBMkNENzQ1RjI4NTYKKzoxMEU0QjAwMDMwQ0YxOTYzNTY5QTlGNDE5RTFGOEM2QzMyRkFEMzI2MzcKKzoxMEU0QzAwMDM5QUU1NjEzMzBERkVGODNFMjY4QkVEMjcwNTZDN0QwNDQKKzoxMEU0RDAwMEIxRDA1QjlDRDM1MUVFMUZFMjc2NjI0MTk3NUYzQkYwNzcKKzoxMEU0RTAwMEZCOUUyMDY2MTE4NkQxN0MyODFFRUJENDMxN0IwRDhGREMKKzoxMEU0RjAwMENGRDJGQzE2RUFDRDE2M0M5N0IzNkM5QUU4MTFDODRFMDEKKzoxMEU1MDAwMEMwMzgzMTlFMTc2NUI2RjJCQ0FBNEFGRUVEQzBGMURBRkEKKzoxMEU1MTAwMEI0RTMzM0M3MzE5QzlGNEQ2NERFQTA2MTdDQkMzODNFQzAKKzoxMEU1MjAwMDI3RDA4M0U4MDNGMDM0RDVGOEEwNUYxN0U1RkYwOTk2RkMKKzoxMEU1MzAwMDJDRTg4NzM1RkRGODEwOEYyRjU3NzNGRjExQzZCRjg1NjQKKzoxMEU1NDAwMEU4RDMxREM2REZGM0RBRTMzNzIwOEJDMkY4MTdBNEM3ODAKKzoxMEU1NTAwMDEzREZENUUwMEVBMjg4NzZCNjJCRTlERjA5NDFGNjQ3MzYKKzoxMEU1NjAwMDkwMEY5MzFDMkI3QkNEQzdCODQ2OEVDOThBRjEzQjc2QTIKKzoxMEU1NzAwMEI5QTYxN0VBQTkxMDI2NTE1RUFENzEzNjlFNTcwQkJBOUYKKzoxMEU1ODAwMDVCODJGQzMwMUVGM0Q2NTlDODBGNjg1NUU3NjE2MzAxMDIKKzoxMEU1OTAwMEYxMzUyMDBCQzU1NzI3NjA3QzhEREYyNUZBMDBFM0IzRUEKKzoxMEU1QTAwMDEzRTVGM0NERkREODU3MEFGRTI4QkUyNkUyRjgyODVFMTMKKzoxMEU1QjAwMEVEQTA3MTlBOTBCMjUwMDY2MTlDODdFOEUwQTI3OTA0QzAKKzoxMEU1QzAwMDMzQjcxQ0NGNkUyNkZGNjBCNUNDODc0MzBGMzJCMjEzMzIKKzoxMEU1RDAwMDQzNDNCODlERDg3RDg0QjlGMERDNTdFMzBGOTNGMjQyRjIKKzoxMEU1RTAwMEExN0VGNzc5M0RFOTI5QzAxM0U1MDM3Q0U3NzM2RTU3RjcKKzoxMEU1RjAwMDc2OUYzQ0RFMTNGNzAzQUE3RkQ4REIxM0ZEQzRERDA2NEMKKzoxMEU2MDAwMDg3NTg4MUVGRTc5ODJDOEJBREZFQjg0NkMzQzExMDFFMkEKKzoxMEU2MTAwMEQ3OTFFMzdDQjdDOEYzNkM2MENEMzUxNTUwOUZERDVEQjUKKzoxMEU2MjAwMDY0MTgwN0NDNkE3MTA3QTMzQzYzOEVEQThFRjYxQjczRkQKKzoxMEU2MzAwMDJGMUEzNUJGNkI2MUIwNjhFMTZDQTY4MkUzRjFFODUxMzcKKzoxMEU2NDAwMEMwRUY3RkRFRTAzQTc3NUJCQUY2RjcyOURCN0VGN0IzRkYKKzoxMEU2NTAwMDM1RUFCQTdFRjczMzUzOUVDN0FBNzRGQkJCRTk2NEQ3ODkKKzoxMEU2NjAwMDI2ODgzMkRFMDVDNDE3RTg4MTQ2QzRGNzczRTU0NkZBMEEKKzoxMEU2NzAwMDVEODNDNjcyNjM3NzhGNkE3Q0I1QjNGRTQ5Rjg3REVGMjAKKzoxMEU2ODAwMEM3N0Y5MkREN0EyRjRCQzk4RjUzMTc4NENGOERDRTUwMjEKKzoxMEU2OTAwMDhBQkIzRDc3NTk0NzcxQjc3NUE1NUZEM0ZBQTQzNjlCRkUKKzoxMEU2QTAwMEQxRUY4OEQ1NUUyRTI2M0ZFMDUyMDFDMzREMjQ1NjdEMjIKKzoxMEU2QjAwMEVCRkY5NjIyRkNCQjVCQ0NGNEJEQzBGMUVGMDI3RkRFMkEKKzoxMEU2QzAwMDBEODQ3QTE3RkM3OTc3NUZDNkRFMDY3RjFFNjFCQ0NGQUEKKzoxMEU2RDAwMDhBRTU3NkYwRTdCMTc0ODEzRjhGRTUwQkUwQ0Y2MzNCQ0QKKzoxMEU2RTAwMEY0RTdCMTdDMEVGQzc5MkNENzgyM0Y4RkU1RDNFMENGRTUKKzoxMEU2RjAwMDYzQkIzNUUwQ0Y2M0Y5MjRGOEYzRjgxQ0M2OTU0N0UzMTQKKzoxMEU3MDAwMDNBQzhFOERFRkVFMkUwQjAxNUU4Njc0OENFNTBGMjM3REUKKzoxMEU3MTAwMDNFQjUwREVBRTI1MUQ5RDk1QjJGRUEzNDc0Q0U2REQ1RkUKKzoxMEU3MjAwMEZFQkVDREQwNjMxMTlBREYzRkM5RkVBQTg3QTY3RTcwRDgKKzoxMEU3MzAwMDRCODJBNjNFREVBOUZEN0Q5QjNFMEJBRkZFRkIzNjNEMjgKKzoxMEU3NDAwMDRCNDcwNEZDM0VDRTFEMDFCRjlGQTNGRDdEOUI2OEZCOTQKKzoxMEU3NTAwMDdEMDFCRkJGQTNGRDdEOUJERkM5RjkzMjE1M0FBNjQ4RjUKKzoxMEU3NjAwMEFGMDUyMTVGQUMyQjlEMTBDRTNBRjAyRjk0RjI0OTk5NjIKKzoxMEU3NzAwMDFFMEFGQ0Q0QTNFMkU0OEVFMkM4NTEzNzczN0JGRkZFOEQKKzoxMEU3ODAwMDIxRDNCRTREODBDRkY3NThCODFERTNFRUVGRDk3NEE0NjYKKzoxMEU3OTAwMDk3OUU1QjFCNDI3MTU4OTM2N0U4NDlFNDlGRjc2QzRDNjYKKzoxMEU3QTAwMDQyRkU3OUVFRjI4ODJFMzg5RUUxNDA0NjdDREVCMzk0M0MKKzoxMEU3QjAwMERCQTczRTM3NEJDNENGM0Q0QkJEMjJERTE3QkRFREIyQ0MKKzoxMEU3QzAwMEQ3OEFGQ0Y4NTQxOEZGOUQyREU4RDdCNTE4RkE3QjdGM0YKKzoxMEU3RDAwMEVDRTA3RTE4Qzc3OTJFMDRGODE5RTVDREVEMEQ0RTAyNTgKKzoxMEU3RTAwMDM4RkM4QThFQTE3RTA0NUI0OTc5RkU5RENGODZDOEU3RkUKKzoxMEU3RjAwMDUxQUZEMDdEQjg3MEQ0RTlBMDk3REUyQkU1REY0RkYxQTMKKzoxMEU4MDAwMDVDMEU1NkZCNDNCRkZCRTk1QTc4NjFDNDU3OURENkRGQzcKKzoxMEU4MTAwMDMxM0IwMUM3RUJDNzNCQTg0NjI4NTM1ODI5RkIyREUyRTMKKzoxMEU4MjAwMEEzOENDQjRGNkRBOThFRTRFOTEyQzgxM0UyMDc2NjREQTUKKzoxMEU4MzAwMDc0NjFDRDVBNzk3RjEyRTU0MzREODdCMjg0MTUzOENGODQKKzoxMEU4NDAwMEU3RDZFODY5Qjc2Qzk0Qjg3NURGQ0RGMENBQkExNjkxMEYKKzoxMEU4NTAwMEI2RDkyNThCMzdCODIzRkY0RTE5RjczQTFCOUY1Rjg0MzMKKzoxMEU4NjAwMDk1RTlEMENFNDUwMDNFNURCNDlGNkRBRDU2RkY5RUQ1NzcKKzoxMEU4NzAwMEIzQjI3Q0ZFNUU5NkNGNjc2NDdFQzBGNTM2QzJBM0M0OTkKKzoxMEU4ODAwMEY1QTM1MzcwMUNEOTVDNUYwMzNEMDVCQzhGNzU2OTA2MDkKKzoxMEU4OTAwMEEzREYxMUZEN0Q2MTQyOTc4RUYyN0NBRjkxQzdGMTgyQkIKKzoxMEU4QTAwMDNDQUZGNUQ4MkZDOTMzOTdGQjUxNjJEMTcwRUM2NzlEMEYKKzoxMEU4QjAwMDlEOTExRTVGNjdGQkJBMUFFMzc2OTcwQTc5QkY3RDE2QjIKKzoxMEU4QzAwMDc5MDRDNDZGQUY0QUFGODBGREY3N0VEODREQTU0QjFFQ0IKKzoxMEU4RDAwMDY3OEZEMjY2QUE1N0ZBOTNBQzJFQ0VFRjY1NUZCMzI2NDgKKzoxMEU4RTAwMDk4MkYxRUIyMTVDOTVFQjQ1MjdFRDQ3NTdBM0Q0MzNCNTMKKzoxMEU4RjAwMDhDRkEwQ0UxNEI2NjNEOUU5MTYwM0Q2NjFENjM3ODlGRUUKKzoxMEU5MDAwMEI5MzY0NDRGRkIxNEVCRTY5RTIyNzhCNTg1QzM2MUNFNDEKKzoxMEU5MTAwMENBMzQzQzdGRjFCNjNDOUYzMEE3OTM2MDU3QzA3QzUyMEQKKzoxMEU5MjAwMEE0MDdDMkQ1QkZFNzFBNThFRTkwRjFCQzVEQzZDN0RCOUQKKzoxMEU5MzAwMDA2ODdFRTAyOEM2M0M4NUY0NUZBRkQ4RUNFREU1M0VDOEYKKzoxMEU5NDAwMDZDRjY1N0JBMDBGREQzNDUyM0ZGRjgxQjdCQjI1REY4ODgKKzoxMEU5NTAwMEY1Q0RCODdFNzZEQUM5MkUyOEVCQjZFRDYzQjg3RDVEQ0QKKzoxMEU5NjAwMDFEM0NGNTYzNUNGNzE3Q0E3Q0Y0NENGMEI4MEZCMUZFQTAKKzoxMEU5NzAwMEIzRDFGQzc3NzAxQTQ3REZERTVCQUQyNzc3Q0FFM0RFRTEKKzoxMEU5ODAwMDIxRTMzREM3NjkzQkY0MzBCNDFGNkYzN0UxQzhDMDhDNDkKKzoxMEU5OTAwMEQ5N0FGRjAyRkFCMzhGMTFBRDZFQTA1QjRCOTYyMjBGQUUKKzoxMEU5QTAwMEY2NjA5NEJCRjdDNzRDNjcwN0IxRkYwMkJFRUZCNEJEN0EKKzoxMEU5QjAwMDYwMjIzRDk3OThGRENFMDFGMERFNUY5QUY1RTRDRkMwNkUKKzoxMEU5QzAwMEYzQUJDQUUzN0UxOUZGOUZDOEUzRjhCMzhDRkYyNjk5MjcKKzoxMEU5RDAwMDRGRjdBMjFERTk4QjcxOTY1NDJBREY5N0VEODg1QkI2M0QKKzoxMEU5RTAwMDIzQkI2NTNCRDIyMERCOTFCN0QxOEVGNEM1Nzk0REE2MTAKKzoxMEU5RjAwMDcyQkI2QzQ3MzI0NzNGNDU3RUQyMjVDQzhCMkJBMDFEODYKKzoxMEVBMDAwMDk5Q0I5NkMxMzhGMzYxRkM2MjA3RjZFREFFNkMzMUUwNEMKKzoxMEVBMTAwMDc3QjI4MjM1NzRCQTMzMzU1MjAzOEY5NjdBMDZGQzRFM0MKKzoxMEVBMjAwMDU3NjJDMEVGNzhGNUQ3RDRFNzk5MzMwMjdFMDc2Qzk4MjgKKzoxMEVBMzAwMEE2RkQ2REJFMTEwMUJGMjNBNkI1MjM0MzhGNEREMEZBQUQKKzoxMEVBNDAwMDMzNUZEREE3QTkxRkRDNTJBQ0E5NzdFMjNGNjBCRTU5NTYKKzoxMEVBNTAwMEM3MThDRjJGMUI5Q0ZCMDRGMjRCRDY3MUJERjJGQkNDMjkKKzoxMEVBNjAwMEI0OEZBNkY4NUI4MUZFNEYxNjZCREJDN0QzRDEzRTlFRjkKKzoxMEVBNzAwMDkzNDk3OEFFOTNCNjk2MTMzNEY1RTQzRkI1MThFQzNENjAKKzoxMEVBODAwMEYxRkM2MUY1NzhFMDNCM0M4N0Q4NTIzMjg2RDEzRTNDQzAKKzoxMEVBOTAwMEYwMkZDODUzOTZGREM0NTc5NDZGNTQyQ0NBMjAzRkU5RjkKKzoxMEVBQTAwMEEyNUVCMzlGOTYxM0IwMkY2NjFGQTlERDM3Q0JCQUM2RkYKKzoxMEVBQjAwMEJFRDlCMTlCM0JGOTFERjZENjg4RUJGMkM3NDA5RTQ0MDgKKzoxMEVBQzAwMDFDRjczM0MxNTNGNzIwREVERUZFOTJEQkE5QzYyRjFGRjEKKzoxMEVBRDAwMEU5ODlDRjNGQzBBNkQwQ0Y4RTZGMUUyMUJGNkI0NzlCNjkKKzoxMEVBRTAwMDdDMzg4MkQ1RkVENjc2MEZCNzE3NkZCNTI0RUNDNDc1ODcKKzoxMEVBRjAwMDQ2NjZCNDQwN0EzMEYzQzhGQzI5QzQ4RjJEM0FGQTdEQkIKKzoxMEVCMDAwMENFOTQ4MjhBNjBDNENCRjY4MzhCODNCNUY3QTc1NEZBODAKKzoxMEVCMTAwMDgxMDhBNUQyMEYyMkIyMzJGRkJEQkVGRjA3RTlEMTBGOTcKKzoxMEVCMjAwMDM0MDA4MDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwN0YKKzoxMEVCMzAwMDAwMEJFRDdEMEI3QzE0RDVCOUY4OTk5RDdEMjVCQjgxMkIKKzoxMEVCNDAwMDBEMDlCMDgxMDQyNjA5NjBBQTNDMzZFRjRENDhDMjI0NjUKKzoxMEVCNTAwMDA0OEMxQUM4NDI3ODA0QzEzMDQ5NzhBNDhBOUFBQUI1QUMKKzoxMEVCNjAwMEQ4NjIzMzIxMTA2MkE0MTIxRjU1QjA4QTJCQUREQUY2OTkKKzoxMEVCNzAwMEY2QjY1NDI1QTBBMjJDQ0ZBQTUwNTgzMDY4NDRENDA1MkMKKzoxMEVCODAwMDE0QURBNUY3QTI4NEQ2RjZDRkZGRTczRERGNzdDRTI0RkMKKzoxMEVCOTAwMDNCQzMyNjQwREI3QjVCN0I2RkY4RTlFNENDMzk3M0U2NTMKKzoxMEVCQTAwMDlDRUZGRDNBMTM0MjA4Rjk0QUE0RkY4QjFGNEUwMjY5RkQKKzoxMEVCQjAwMDA0N0ZCRTRBODFGRkE3RjRCNkExOUY1QzREMDJGNkYwMjgKKzoxMEVCQzAwMDc2ODZBMTlENkYxODVGNjI2ODVGNkYxODNGRDNEMEJFRDUKKzoxMEVCRDAwMEQxMzBCRTU2RDdCRjJEMzQ3M0EwRTJBNEJGQzNDRkE0OUIKKzoxMEVCRTAwMDhCQUY1QjFBMDkwOTVDRDUzQjJFREJFQzEzM0Q2MzJGMjEKKzoxMEVCRjAwMDFFOTdEMzY5RUE5RDk3RkVCN0YzRkQyNUE2RjNGMTg0MkUKKzoxMEVDMDAwMDc0NzQ4QTdFNUIzMkJEMUU1RjQyRDQyQzNBNEZBN0M5MTIKKzoxMEVDMTAwMDRGMDRCQzlBMDhFRERGRDZDNURBMzZBMjNBQzZEM0ZFNTkKKzoxMEVDMjAwMDJEOUQ2NjRGOUI0NEM4MEVGRURFMzFCRTg1MDM3RDMxQUYKKzoxMEVDMzAwMDg0NEMzMjlGOERGODVFRjk4MkE5Nzc3RjA0RTY5QjM5NzgKKzoxMEVDNDAwMDkwNDQxOEE3NUQ3N0YxNzkwMzhENzZCQzZFNkY3NDkxNEYKKzoxMEVDNTAwMDgwQURCNzVGOENDOUVFRjREMTc1NzQ4NDRDMUU3QTlCN0QKKzoxMEVDNjAwMEFFQkYyNDhFRDA3REVGNzYyRTc2QzBCQzc0QkQ4NDBDRjIKKzoxMEVDNzAwMDIzRTREQUNEMjNBQTlBNDYxMTIyRDE3NTlCRTgzRUI2NDkKKzoxMEVDODAwMDg0NENBNDhERUUzM0VCMjg3QjdGOTY0NThFNzM0NTgwQjQKKzoxMEVDOTAwMDJCMjEyNjNERkMyRjlBOEZGRTAwOUM5Q0EyQkY4REMyOEIKKzoxMEVDQTAwMDY1RDdGQjczRTJDNkQzRjk1RkVBMTQwOUFDQzdBQUQ0RUYKKzoxMEVDQjAwMDNCN0NFMzY4QkI4QkFENEI5Qjc3QjI1REQ0QzFBMTk4MjUKKzoxMEVDQzAwMDM4NzRGODI4M0MzQjQ4RDdDRTNBNDFENzQ5OUZCNzRBRDkKKzoxMEVDRDAwMDE1NzEwMERGNEJBRDkzOTA2ODAzMUQwRDMyQjQ4N0U5QzkKKzoxMEVDRTAwMEM2OEY5MTI4REVDNkY1OEQ4Nzk3MzgxRUI2MDAxRUU4QzAKKzoxMEVDRjAwMEM2NUU4QUYyNTRGOTIyQzA2QkNCMDdENjdBN0ZEOEZENjQKKzoxMEVEMDAwMDY2MEYwNTRBMzY1QzRENzhDRDNBNjFGMjA0Mjg3Q0NFMTgKKzoxMEVEMTAwMDc3OUEzQzAwQkMzQzU3QkJEODEwNjE5RUZDOEZGNEY0NDIKKzoxMEVEMjAwMDk5RDMxOUFEODMxNzExMTdGNENCMDdDQjhGMzdBREQ5MTIKKzoxMEVEMzAwMDEzMzZGRUZCOUU5OEY4RDNEN0QwNUY3MjQ5MkVFRUZGQjQKKzoxMEVENDAwMDEyQ0ZGRkE5NTE1REIzQzc0MkU5OTg5MkVDNjYzQThFQTMKKzoxMEVENTAwMEI4MkEwOTQ5RTg3QjNDMjEyQjcxN0YxQTFDODkyQjhFMkMKKzoxMEVENjAwMDZFRUU3MkYwRDQ4RUNGNUQ4NEFGM0U5RUVGOUQ0NzI1NTAKKzoxMEVENzAwMDY0MzA4NTI3MDUyRjhDNUIzQkRFRjdCODg3QjY0OTY4ODIKKzoxMEVEODAwMDg2MDhFRjdGRDA3MTlCMThBMkVCN0VDQzcxREI2RUEwNjIKKzoxMEVEOTAwMENGMDM3RkI2NEFDMEQ3M0JGRkRDOTEwOEY3RjdBNzZGRDgKKzoxMEVEQTAwMDREMDRCQURGNEZERjFEODRGRDk5MjlENjY4REJBQURFNEEKKzoxMEVEQjAwMEU0MDBGQTdBQjNGMzA4RjI4RjQ0ODIzNzRDQzg4MkI2ODMKKzoxMEVEQzAwMEM5RDM0Njg3QkQ5QTU2Mzk5MEY0MDNCN0Q3Mzk5REVDMUQKKzoxMEVERDAwMEUzRkNCQTg3RjNFQkFFNDYzN0U3NjMwOUFGQUYzNUE2N0UKKzoxMEVERTAwMEUxRkRFRDhEMUU2Q0JGRENFOEM1RjZCNjQ2MTlEQjFERjYKKzoxMEVERjAwMDhENjU3ODNERENFOEMzRkI4NzFBQUJCMEZEREI0Njg1NEIKKzoxMEVFMDAwMEQxNjFEQTlEQTUyMDhGQ0UyNzUyMDBEMDdEQUQ3NDRDMDQKKzoxMEVFMTAwMDM3NDdDMkU3NzU5MjlFQ0ZBRTc1RUJGOTZDMEE4NTczRTIKKzoxMEVFMjAwMDc4N0JCMjdEQjg4MTJGNTM3NUZEOTNCRUJDNUFENzVGRjYKKzoxMEVFMzAwMDc4MzY0M0Q3OUVGODY5QkU2RTdDNUVBODQ0RDdDRUVEODcKKzoxMEVFNDAwMEJBNUUzNzdFNjY2OUE1QUVERjU3MzA1RkJGM0VEMTg5QjcKKzoxMEVFNTAwMEYyNjU4NzRCNDBCOTNDM0RBQjRFRDdCRjAzN0UwMTM5Q0QKKzoxMEVFNjAwMDZDMTdGQzZBMzJDMEE1QjI1Rjc5MUEwMEZDRDgwMDhFMUMKKzoxMEVFNzAwMDhDOEY3RkMzRjFCMzE3RjA2MzAzQkMzMEY4QkYwQUYwODcKKzoxMEVFODAwMEE3RUQ1NzAwREVGNDlBRERBREVDMUUyODgxMUNBOEM3NjMKKzoxMEVFOTAwMEI2MzU2REEwRDM0M0UxRkZBQTUzNDRGOUJGQjVCMTAxMjQKKzoxMEVFQTAwMDlGREI3RkJFQjY1QkM0RjUzQTI0QzBDQjBFQkU5RUZEOTEKKzoxMEVFQjAwMDE2QTU1QjhDODdCNjIwQUQxNDJFNUU1Nzc2OTc5RURGMjUKKzoxMEVFQzAwMEM3OTQyRDQ0QjlCOUEzRjNBNDAzRThFREI1MkYyRjRGOTAKKzoxMEVFRDAwMEVGNjlFMzdFNDMyQTI3MDM3RDE0NzU1MjVEOTU3QzY5QjMKKzoxMEVFRTAwMEZEQTdFOUFENEJDREFGOEQwM0JEMUE0OTVGMThFN0JENTYKKzoxMEVFRjAwMEZFNEI0NTI0NzQxRkFGNzZBOTBGQzc0MDNCRjA0RDUxMjAKKzoxMEVGMDAwMEEyRUQ5QzJFNjUzMkUwNkQ0RjlBRTAxMjA1MUMzNzU5MzgKKzoxMEVGMTAwMDg2NzU1RjM4NzIwM0RDN0YyRDY0MzZDMUJBMEY1QzE4Q0EKKzoxMEVGMjAwMDQ0NjAxRjNCQThERUI1RDE3MTZGOTJENEI1MTMyOEJDRTUKKzoxMEVGMzAwMDAzNUQ1RkVDMDdCRTU0OUQxNkNGNjg3MkYxM0E1MkQzNjEKKzoxMEVGNDAwMDQ1OTQyQjVCQzZEQTRDQzIwNEQwNzc2NjEyMTgwQjdDNTIKKzoxMEVGNTAwMEFFMjAzQzNCQkU0QzcxQzI3NTRCOUFDOEVGMDc5MURGQTcKKzoxMEVGNjAwMEM3QTdCQkYwQjk1NzJGNjRDNDQzREI0NDgyMjgwRjAyMDQKKzoxMEVGNzAwMEREQTYzMjdGODRGRDhFODdGNzUwQjk5MzdERTE0Mzg3MEMKKzoxMEVGODAwMDhCOEVERkQ3NURFQjAwRjlGMjVBMTc5QjNGN0I0NUM4QUMKKzoxMEVGOTAwMDAxNzBEQUZGRTUyNjI3RENERjkxOTY4OUYzRUUxQ0I3RDYKKzoxMEVGQTAwMDE0RUQ4QjFEREQyNkE0RUIxRDYzRDczODMzQjI3MDlGQTMKKzoxMEVGQjAwMDFFODBERDhFRUVEQUI1RTk0MEQ3NUQ2NjZDNEI0NDIxRUMKKzoxMEVGQzAwMDQxQTBCNzM0QTY2N0I3NzRENzkyMjNCNEZGQkM0N0Y0MDcKKzoxMEVGRDAwMDAzOUQ2NTkzRjY3RDAzRTBGRTkwMzU1NjkyQzJFMDZGODcKKzoxMEVGRTAwMDFFNDJDOEFERUM2MTMyRDlBNTk3MDMyNTVEN0E3RDYyREEKKzoxMEVGRjAwMDBEMkQ5ODM1MDNFQzA4QTA2N0RBOUU2NjhFRDNGNUVGRTkKKzoxMEYwMDAwMDdGNzc2NUZDNENDMDBCODUzN0RDN0JBREZCOEVGREUzNjkKKzoxMEYwMTAwMDQwRkVGODU5RkIwRkM3N0Y2MjFENDhBRjRERTNENjBDODkKKzoxMEYwMjAwMEJGMERDNjZENzE3ODZDMTJGNDI4RTQwQkRBQ0VFRDM2QTQKKzoxMEYwMzAwMEZCQzFERUM4NzZFQUQ3QjFGRjFCOTUwOEY3MkRERENDMDIKKzoxMEYwNDAwMEJFM0E5RkM2RjZCM0MzNTM0NzFFQTBDRkJEQ0FFREFGQUQKKzoxMEYwNTAwMEM5Mjc0Njk1QzNGQjBFNTBGQjA5RUM4QTU3M0MyRkM0QzkKKzoxMEYwNjAwMDY1ODIzQ0YzOEEzQTdBQTNGMDQxN0EzOURGNDk3MDFFMEYKKzoxMEYwNzAwMEZBMzM2MDFBODU0MzAxMUI0MkY5RDBENzdDM0JFRERGQTAKKzoxMEYwODAwMDlGNjc3M0FEQTRBOERFNzE2MUQ3RUUzQjY4M0IzNzQxNDMKKzoxMEYwOTAwMDI0MjJEREM5MzdGREZBRjVFNUZERDRBMTZCREZGQUE5MUQKKzoxMEYwQTAwMERFMkVCMTExODFFQjczMjdDQTgxQkVGODY3RTI1OUFCM0UKKzoxMEYwQjAwMEVFQjk2OTY2OUI2RURFNUMxMkQ2OEZGOEI0RjZGNjI3NjEKKzoxMEYwQzAwMDVGREEzRUQ5Q0FFNTlBNjY5RjZDQjUyOEYzN0Q0MEQ3RDIKKzoxMEYwRDAwMEMxNTk5N0QwQTMyQkI5RkU2RDQwNzlCMThEMTA0RjVCMEMKKzoxMEYwRTAwMDNBOTVFQkRGMTA2NUUwQzNGM0M3RUQwOEM3RENDNzY2RjAKKzoxMEYwRjAwMDRDMjRBOEFGOTU4OUMwMEY0ODhDNjFGNjgwRjdGODI1OUQKKzoxMEYxMDAwMEVDMTU5NzRBRTI3M0Y4QUIwODVDQ0RBNzQzNzQ3QzJCRUYKKzoxMEYxMTAwMDU1RjM1RjgxMEVFN0ZBREMzODZGNUY3QUZGNDFDNzAwNzUKKzoxMEYxMjAwMDk0RkIwNUE1NEMyRjNDRTYzODg4N0FCRUUzN0RBQUU3MjAKKzoxMEYxMzAwMDA1RjY4RTEwQzVGQjZDRjgwNUY0RkVGQjU2MUNGRkNBRTUKKzoxMEYxNDAwMDc1MDJDQTExQ0Q2RUE4MjRCMjg1QUEzODMyREREQjZERjYKKzoxMEYxNTAwMEZFMDFDNTlGQ0Y1RTNERUU1NjdBN0RFNUREOEVFMUMwQjYKKzoxMEYxNjAwMEJGQUY4MDdEODBGMkExQzFDMUVDODMxODM1OEUyRTcxQjYKKzoxMEYxNzAwMDdCOTcwREY5NzBFQjU5MTNCMTgzREZCMEREODY3NDRBQ0MKKzoxMEYxODAwMEY5RjRGRTcxRjQzRERCODNDQzVFRTgzOENCRURCREVERTgKKzoxMEYxOTAwMDBFRTQ5MzlEN0Y2MEVCRTg1OEUxNjA3RUM2MTlBQjBDRUUKKzoxMEYxQTAwMEY2RjhENjE1MzEwOEU3MzE1MjRDQzAwQ0YzMkQ2N0YzNTEKKzoxMEYxQjAwMDc3NzFCQ0JFQ0RGMUJBOUZFQkFCMzdCOEJFRkEwREQ4QjQKKzoxMEYxQzAwMDEzQThCRjk4M0RCMTFCRUMwOTdBRERDOUVEODkxREEwREMKKzoxMEYxRDAwMENGRThGNUM1QjNDRkJGMDc3Qzc5N0U3QjE0REE5RDYzOUEKKzoxMEYxRTAwMDQ4REE2NjU4RDc3NkE3MTVENzY5ODRGMzNDNDVDRjA3MjgKKzoxMEYxRjAwMDczQUJGNDc2NDNGOTU4QkRERDcwRkRBOEUxQkE3NjU5REEKKzoxMEYyMDAwMDYyQUFFRUY5QTlGMUQ3RThGQTRCOUQ5OTdBNzk2NDlFNDIKKzoxMEYyMTAwMEE4NkJDQjE3RjQ3NjQzODVGNzA2M0QzREM5NjE3NjAzQUQKKzoxMEYyMjAwMENBM0JCRERGMzgzQkRDNkY0QzA2M0MzMTNGNjc2QkQ3RDgKKzoxMEYyMzAwMDFEODhDN0FEQzc1MzA2MkE2MTc2QzIzNjBFRTdBREM3MzMKKzoxMEYyNDAwMDk5RkVEQzE2RkEyMjQ2ODk2MDQ3N0NDQUM3N0RDNkYxNjIKKzoxMEYyNTAwMDcxODZFM0UzM0Y0NkM4QkY0QjFGMENGQ0YyMDU5M0JGMkEKKzoxMEYyNjAwMDdERDBCMUY2QkNGNkRDQTdGRTUzMDNDMkY1RkE0ODUxRDcKKzoxMEYyNzAwMDQyMjZEMURBN0ZFODc4NkYwQ0Y0NUYyRTVGNTAzQTZENEEKKzoxMEYyODAwMDBENTEzQzdGNDc4QzY5NkZBMzhGQUMzMTM3M0MwNTZEQzYKKzoxMEYyOTAwMDU1MzU5MzY3QjIxMDFDNjk2NkVDQkZEQTAzRjJCODM5RDIKKzoxMEYyQTAwMEE2RTEzOUU4REZEMjY0NzM2RDhBMDczRUZBRkVBRkEwQUIKKzoxMEYyQjAwMEJEOUNCMjgyOEQ1RUZGMTQzNUMyNEYyOEFCMzkzMjRDRjMKKzoxMEYyQzAwMDM4RkZCMzE2REY3MDBGRTg0REMxMzdGRjU2M0E1RURERTkKKzoxMEYyRDAwMDYwRjUzQzIzNURCQzlFRDgwQzQxNjNGNjZEQTA4NzQ0NkQKKzoxMEYyRTAwMENFRjc3RjExOTREODBDN0E1RkZFODU4MDcyM0E0QTIyNUQKKzoxMEYyRjAwMEE4MTc2Q0M0MTcwMEZFMjFGNUYyN0NFMDBGNjJBMkZDOTcKKzoxMEYzMDAwMDQzQUY4RDk5Q0E1MDE4NEY2NDIyQjlFODNDQzhEQUY0NkIKKzoxMEYzMTAwMDdENDI3MERGOUYwNUJBMkUwQjY5NTA2MTFFNUIzRDk1RTMKKzoxMEYzMjAwMDMwOTQ5RjFGNEQ1NzQ2RTA3OEYzNEM5Q0ZGQzU2OTg0OEQKKzoxMEYzMzAwMDgwM0NBM0RCQzE3NkQ2RERDNEQ1MTY0QjI4NkIyQkE2NEIKKzoxMEYzNDAwMDJGNjg3QjNFRjVGN0UxRkQyNkM3MzJENDUzRUZGRENFQTMKKzoxMEYzNTAwMEU0MTcyM0Q4NEIzRDcwNUU2NjM5MTMwQThCOEYxOEU5OEEKKzoxMEYzNjAwMEE3ODNEM0M1QjY2NDFGQ0E1RkUzRjNCOTAwMTcwQUM3MDIKKzoxMEYzNzAwMEFEMUY0RTE3ODFCRUIyRUMwMzY0QjAyQkU4MDZDNTE5NzEKKzoxMEYzODAwMDU0QkU2RjNCNzlCREEzMjZDMjczRDc2N0Q1RTQ2NjBDMjQKKzoxMEYzOTAwMEVFNkQ2NzA1Mzc4QjM1NEVGNEU3NDVEOEQ3MTZGQTNCNDcKKzoxMEYzQTAwMEVDRUJFNTRFNTMwMEYwN0JERTY5NDU3OUQyRDczRUYyQjcKKzoxMEYzQjAwMDQyRkEzODQ0MkVEODAzNjFGQzQ2QzgwMjE3Rjg4QjAyODMKKzoxMEYzQzAwMDY5MTdCRUJBMjY5Q0JFRTRGQkMzRTlFQkM1OEJFOTBCMEIKKzoxMEYzRDAwMEUxRkM5REI3RDIxMEFFQ0QwMkEzMkY5NUQyMTdGNEFCQUUKKzoxMEYzRTAwMDI1MEQ0ODVGQUE4OUY4OUFCMzkwREVGMEY5RTU2NkJCNkYKKzoxMEYzRjAwMENCNDYyNUU0QjI4QzE0N0M0RjQ3NENGOTdCMDEwOURGRTYKKzoxMEY0MDAwMDk3M0ExM0ZEQjk2QUVFQ0Y1NUEzOUM3RkUzMjg5M0YzOTcKKzoxMEY0MTAwMEM2N0RFRDNDM0E2Nzc4MDhFQzg5RDE3Mzg3MDM5Rjc3MDYKKzoxMEY0MjAwMDgwMDIxODA2OEJDQTlCMjdFQkRBMjQ4MDc2RTAxNDAyNTAKKzoxMEY0MzAwMDIxMkI4MEMwM0NCMDNGM0JBRUQzREE1RUQ2MkU2NkUzRDQKKzoxMEY0NDAwMDZGNzlGRUQxMEQyQUI0NkZFMkZERUE2Q0Q2QUZCNTQ5RjMKKzoxMEY0NTAwMEZFQkM2MjY4NUI0Q0Q4M0UwOUUzRTlGQjFFRjNDOENCRjcKKzoxMEY0NjAwMDAwNkY4RkE2Q0JCNzAyNURFNjgwRDE0MkFGOUY0RDkwNzMKKzoxMEY0NzAwMDZGODdGNkIyMEM4MkZCRkRERTA0Rjk1QjMwNEU2QjZGREEKKzoxMEY0ODAwMDFCMkZERjE5REVERUQyRTNBN0I2NzMzRkY1NTZCNDRCNzAKKzoxMEY0OTAwMERGRTg5QTg5RjZBQzQ0N0MzNzgwREU3OTIzQzhFMjUxRjQKKzoxMEY0QTAwMDVCNDZGNUVGMDcxREU0RjZGQzAxRUVBN0JFMDlGMkU4QTYKKzoxMEY0QjAwMDJBRDAyN0NDNEZERENCRkRENERENUNBRkVDRTQ3RUVBNzcKKzoxMEY0QzAwMDBFQUU1NzVFRTU3RUQyMkJEQzRGN0EwOUZDRDRBQkMwODIKKzoxMEY0RDAwMDBFQTlFMjcxMTJFNkE3NjY4RDlFNUM4QTc2ODQ0QkYzRDQKKzoxMEY0RTAwMDUzNDc0NEY0NTMyQkJDN0E3RDMzQ0RBM0Q3MzczN0E0OEQKKzoxMEY0RjAwMEM1MTlGNDhCNUVERjRDOEREN0VCOUI1MkU3MzUwNkZEQ0IKKzoxMEY1MDAwMDkyQTkxQjJGNUZEMEZCQTk0NUREMjVCQUYxMDU2N0Y0NTEKKzoxMEY1MTAwMDdFNkFGRTQ3MzM3NUUzOTc2NTQ4ODg0N0VGRjExQjc1QjAKKzoxMEY1MjAwMEUzNzIzQTZCNzVFMzdBRjFFNjQzM0M1OUQ1Mjc5RDYwNjcKKzoxMEY1MzAwMEM3NkQxOTU1QzdGMUM2RUMwNTBENkYxRDk3QzBEQjZGODAKKzoxMEY1NDAwMDM4REVGNjcyQkNFREU2NzhEQkM5RjFCNjgzREIwM0FGREIKKzoxMEY1NTAwMDcyQkNCREMyRUQ4MTk3MzhERUI2NzJCQzZERTFGMTg1M0IKKzoxMEY1NjAwMDgzMUM2RjA3MzhERURFRTRGRTZFRDZFOERERTg5RjlEODMKKzoxMEY1NzAwMDNGNEIzOERFMzY4QTkxRjA1Njk2MjgxQUYwRTAzMEUwOUMKKzoxMEY1ODAwMDQxOEZCNzEyRjM3MDAzMUU1MjBDNzhCODVBRDcyRTM4MzkKKzoxMEY1OTAwMDkzNjFDMDQzQkVBRUVEM0Q1RTYyODBGRkY1MDZCQkExNDgKKzoxMEY1QTAwMDUyRDdBRkUxNkQ5QTY3QkU4MUJFRUE3NEUzMkU5QkRGNEUKKzoxMEY1QjAwMDlDQ0NDRUZCNkJGOTZEMUZCN0UzRjY3MEJDRUQwMkJDQzMKKzoxMEY1QzAwMDYxOUNDOEMzRTMxMTVFMUVGNzY1NzZEQ0NCMUM2RkRCNjQKKzoxMEY1RDAwMDc4NUNBODAzRjAwNkY2MURDNzVCRjNBODczNjhDNzlGQTUKKzoxMEY1RTAwMEJGQTBFMUVENjA0NEJDNUQyOUJGNURFQkQ2Qzc4NUE2MzkKKzoxMEY1RjAwMEI4RjQ3MUExQzk3NjNEQkYxNTEzQkQ3RDM3RTk0QjNEMDgKKzoxMEY2MDAwMEJGMTU5RUQ1REI3NzEzM0ZENUYzNUI1RTY4QTZBRTREODUKKzoxMEY2MTAwMEVEODA4NENDNkNEMDUzMzdFQTlFQ0IwRUQ2RUFDNjUxMkYKKzoxMEY2MjAwMDNGODlGOTJEMUVBRUY3RkQ5NUE4OEY1QUE2MzFGRDQ4RUEKKzoxMEY2MzAwMEY5MTBFREVGNjdCRjRERUQ4MEY0NUU3OEJDNjhGMDlGODgKKzoxMEY2NDAwMDVFRUM0MzdGNUY5M0M5RjQ3N0M3N0JENTA4RDc2Q0QwNTYKKzoxMEY2NTAwMERGOTFGMjBCN0M1QzRFQTYwQkFGMzYzMzUxQTMzMzcwQjcKKzoxMEY2NjAwMDk5N0I4NkQxRjU5ODQ3MzFCQkM3MUNCMzE2ODIwQ0YwNDUKKzoxMEY2NzAwMDEzMzRFNUY0REE0OUEyRDM0NzYwN0U2QTJGRTU2NDg2NDUKKzoxMEY2ODAwMEU5N0RCM0FCODE4MEREMjBEQTFFNUEwMEZCMjJBMkM5REUKKzoxMEY2OTAwMDgzN0FENzYwMUY5MTdBOTc3QzA3RENCRjYzODBBNzhENDAKKzoxMEY2QTAwMEMyRTI5NkNDNTg1Qzg3OUI2Q0I2ODA5REQxOTgyOTRGNUUKKzoxMEY2QjAwMDAyNzg4QTkzMTkzQ0I2MjQ1MURGOURDMjYzNEIxNDZCQzgKKzoxMEY2QzAwMEFCMTQ1RUNGRDBCNjM4NzAwMUMyQUY4M0MyNEI0Qzg3NEIKKzoxMEY2RDAwMEY5RTNDOURENzQ1RDU1OTk1NjA2ODc3OTg0RTk1M0Y1RDgKKzoxMEY2RTAwMDM5QTY1RjdCRjQyMTM1MTg2OEZCRDk2OEQ2QkVGMTg1NTEKKzoxMEY2RjAwMDlGQ0U1MzEzN0JGNTZGNURFNjRCQTg0RkM3Mzg4N0Q1NzgKKzoxMEY3MDAwMDkxRjE3NERFRjVFQTIwQjAzM0M3RDJGNTgxN0MzNDM5NEIKKzoxMEY3MTAwMEI2Mjc0NUIyQkZGQkIyQzM1NjhGOTdFN0MxN0VCRUM3QkYKKzoxMEY3MjAwMEY1RUIxODBBMTE3MzQ2REZDRjNGMUJFREJCMDVGMDlCQ0QKKzoxMEY3MzAwMDA1RjAwODhCN0JDRENDNjQ3NjZCMTVDQzMzMThFRDRCODQKKzoxMEY3NDAwMDM5RENCRTI0QzE0QTZDQjdBNDMzRkFGQUYxREE5OTQ4MUQKKzoxMEY3NTAwMDZGNEUwQTJGMzExNkQ2Q0ZFMDM3RkYyRTQ2NUY1N0JBQ0QKKzoxMEY3NjAwMDBGNkRGREZERDA4OTJGREM5RTBFQTM5M0VGNDVBMjEzRjQKKzoxMEY3NzAwMDUyRUU3MUEzQkZERTk3M0RBN0IyRjUzNjczRkI1MUIzQ0UKKzoxMEY3ODAwMDkzNkQ4OTlBRERFQ0M3RjU1ODI4N0JFNDBGQzIyQjk5NUQKKzoxMEY3OTAwMDQyRTEzQUM4NDUzMDVFNTNFRDMyRjlGRDE0NjQ1MTYwRTAKKzoxMEY3QTAwMEYwODNEQzI5MTU4ODJCMTk2Njk3MDlDMzYzQjkxNDJFRDkKKzoxMEY3QjAwMDdGOENGMTQxRUZGMTY4ODM3QzFGNjREMEMzQzM3NEVEOEIKKzoxMEY3QzAwMEEyRUUxNDgzOUY3ODc1QkY3QUJFRDQzOUQxQTA5RjI2NEMKKzoxMEY3RDAwMEVCQzY5NzI1REU2MEYwNjMyQjBEN0VBRTVFNEY5ODg5RjkKKzoxMEY3RTAwMDU5RTVGODMyNjFEQzQyMTUyNDczMEVEQzI3ODg5RkIwOUUKKzoxMEY3RjAwMDdFRjQzQjdCRTBGQzg0NUM4NUZDQ0FGRDFBMjNCRjM2QUIKKzoxMEY4MDAwMDY2NEEwODY3QzFDNUZDMUE4RDFGQjRFNzM1Rjg1OUREOTMKKzoxMEY4MTAwMDBDQUZFQjcyMzRGREU0NDFCRDYzMEI3QzkzNDA1Qzk1MEYKKzoxMEY4MjAwMERBRDBGMkU2MzA3QURCRDQ2ODdGQUY3NDM0MjEzRjY5RjYKKzoxMEY4MzAwMDI0RUY5NTUyRTRGOTFCNUQ3OERERDhFOEM2RUIxMzhEMTMKKzoxMEY4NDAwMDEyNUUxRjZGNENDMzcxRUIxQjNERDg3RUI0RDE4QkQ3QkEKKzoxMEY4NTAwMDQ3MUE2NUJDRkY1MDYzMTlCNkRCMUI3REQ4NUVEQjU4QzkKKzoxMEY4NjAwMDg1RDdCNjQ2MDVFRjhGMzIyQkFBOURFRTZCNTQyQkYxNTAKKzoxMEY4NzAwMEE4NzQyQkEzREJFOUZCQzJFMDk2REE0QUQ3MTEwNkY3OUUKKzoxMEY4ODAwMDY0RDVBNTZCOEY1Q0VFRDY4RDRGNkE5MDc0RkRDM0VCOEIKKzoxMEY4OTAwMEQzNzRGRDA5OEE0N0Q3MUU1QUU1RDU4RDFGRUM5Mzc1QTEKKzoxMEY4QTAwMEVEQjhCMjMyRERGODU4RDlBNzZCQzc3OEFBNzRFMzFENUEKKzoxMEY4QjAwMDY5OEFBRTdGNTc1MUZFQzA1MDNGN0NGQzUwNjMyMEM4MjAKKzoxMEY4QzAwMEUwMTIwQzMyMzhCRDFFNjRGMEU5QzJFQkU3NUNGRTBFQkMKKzoxMEY4RDAwMDMyMDc1MTVFMENDQTcyNTFEMkExRjhCMkIzRkM1QTlDRTUKKzoxMEY4RTAwMEQ5MjNDNDg2Q0QxRjU3NDZFNzRCMEI1RjJGOUQ0RkU3QUIKKzoxMEY4RjAwMDlGRjk5MTVFNjIzQzQxREQ3RDQ3NUE5N0VFQjkyOUEyOUUKKzoxMEY5MDAwMEIzMDRGMjExODcwQjQ0OEM3QjFEMkU4ODhCMDFGQkU1MjEKKzoxMEY5MTAwMDdFOEI2QjVBMTZBNUM3NDM0NzQ1Q0YyNjc4MEUxRTg4QTcKKzoxMEY5MjAwMDIwMkY0RjcwQkRFODE4NkY0N0I5NTBCMTRBRDgyNDIyMzQKKzoxMEY5MzAwMEQxQjJFNzZCM0I1MzIzQzYzRDBGREQ0QkFBNjA1RjhFMTAKKzoxMEY5NDAwMDVEMkY0OTQwMTcxNTA1MzU3MTUxNjFGRTVBNDVFMENGQ0QKKzoxMEY5NTAwMEE1NkVCOEJGMkEzRDI3OEFDRTU2RDE5QTZDQUQxQkRCNjcKKzoxMEY5NjAwMEJCMkY2RDVDRUQyQUJEN0REOTRCRjc3RTNCRUM2MzhDRTQKKzoxMEY5NzAwMDdBQUYxREU0NUI1QkUyMjY2Q0I3QTVGNTlGMjdGOThDOTcKKzoxMEY5ODAwMERCNjE5RjcyM0JFQzM0OEZDMzdDQzRFREIwOTNEQ0VGNDIKKzoxMEY5OTAwMDA5NzEzQkVDMDM2RTg3MURFN0Y2RjMzMTZFODc3NTcxRDUKKzoxMEY5QTAwMEJGRTc2RDZFM0Y3NzcyRkJGOTA4QjdDM0RBRDI5RTlGNEYKKzoxMEY5QjAwMDhBRjJGMDE3MDIxMTIzRjhBOURBRjU5NjlGRUFFREIwNjIKKzoxMEY5QzAwMDZGRkFGNTc2RDhEMkY1N0EzQjZDNzFCQkRFMEVBQjZCNzUKKzoxMEY5RDAwMEQ1REI2MTM1QUFERTBFNUJCODVDNkY4N0RERDRBMDk3RkUKKzoxMEY5RTAwMDg3RjNFQjI3RUJEQUYzMTQ3RDlDNkQ2RTk1REU3RUQ2MDQKKzoxMEY5RjAwMEYwMzNEQkE3OTc4Qjk1NjU3QUZCQjlBRkZEQkUxMkI4RTQKKzoxMEZBMDAwMDBFRjMzRjgwQzQ1MzYxN0FBRjI3OUYwQjdBODVEMjQ1QUUKKzoxMEZBMTAwMEQ2MDVBQTU3MzAwRUVFNkI4NkZDQzkzNjE4NDJGNTZGMzQKKzoxMEZBMjAwMEExMjlGODE2RTQ3REM4REIyMjgxQjhEM0FFRjMzOUU1MEQKKzoxMEZBMzAwMDE1MTFFODJGNDdENUQzQ0Q4MkUzRkFGOEM2OEQ3N0U5QzMKKzoxMEZBNDAwMEUxM0E2Mzk5REUyRkIxOTZFOUUxMkEyN0VBRkQ5MjRBNkQKKzoxMEZBNTAwMEEzOUVGMUU5RTFBQTEyODUwMDVEMUFGNThEQzlCMTRDQUEKKzoxMEZBNjAwMDAyRjk3REE1N0FDNzRBQTg1RTYxNkQ5RERFQjFDMjlEOEYKKzoxMEZBNzAwMDE0NUQzRkVBOUQxRjY0QjE3QTgzMUNCQTBFMzAxNjlBNUEKKzoxMEZBODAwMEEyNzIwRjc4MjhEQzc2QkQ2QkM2M0ExMUJBQzAyM0EzRTgKKzoxMEZBOTAwMEE4RkUyOTgyREYyOUZDNUVCNTI4NkEwM0U0RDk3ODVFRDYKKzoxMEZBQTAwMDg0ODg2Nzc2REY0RUM3NUI4N0IzQkMwOEY5RDJGQzExNDgKKzoxMEZBQjAwMENDQUZEMDdGODBBRjFDNDJEQjYxN0EyRTNCQzhGQUMzNEIKKzoxMEZBQzAwMEQ2QUJFQkY3MDNDRTA2RjdCNzFFRjlDOEE4OUNGRkM5NjMKKzoxMEZBRDAwMEY1QzRDNDlGMDZBMTM3ODE0Q0MwN0E4M0QwQTBDQjhBREQKKzoxMEZBRTAwMEFGMUFFRjY3MDU5ODFEOTQ5NUM4RUMyMDZGRDI0QzkxMjIKKzoxMEZBRjAwMEU3OUYwODg0M0NCQzI2NjJDNzc4RTYwOEUyN0YwNkUyRkUKKzoxMEZCMDAwMDlDRDEwNzFDRDM2OUIzMTlBNjRDMDAzRjQ5Q0ZGRkIzNjIKKzoxMEZCMTAwMENBRkJDRkNGMUJGREIwRUJBNDU0ODNERjc2OERDMUFGMDIKKzoxMEZCMjAwMEQzRjNCRjhEMThFQzk3MTA5MUMwOUU0NDFDOTg3NEZEQzAKKzoxMEZCMzAwMDA4QTc3NzM4MUQzNTlENjg5OTBGRkI3QTI5ODlFNzU3MDMKKzoxMEZCNDAwMDM4RkQ0Q0U0RjgyMjY0RjNFRTFBREFFRjc1OEIwNEZDMEUKKzoxMEZCNTAwMDBEMUI1MUUzMjY0MDdENTFCMDQxODZCQzQzQUVEN0U2MzQKKzoxMEZCNjAwMDQyQkM4OTJCM0M2ODk3OUU2MUY4RjFEMjdGODAzRjJGODEKKzoxMEZCNzAwMDA5QzMxN0UwRUZCODFFN0YzNjQzRkZFRjM5M0Q1REJDODgKKzoxMEZCODAwMDJFNDY0N0ZGQjg3NTE5RThDQTM5RThCMkVBNTg4Q0Y3MkIKKzoxMEZCOTAwMDhCODNCMjE4NDNEN0I3RDcyNTYwMUU3NTZGQjAyMTU4MzUKKzoxMEZCQTAwMDRDREJFN0RDQUM2RTY4NERFMjRDMzNBRTk3QzgwM0E2ODUKKzoxMEZCQjAwMDUwM0M0Q0U1RkJGNUYyQkM1NjQ3MjM0MUJCRTNDNTQ2NDAKKzoxMEZCQzAwMDNCNUUwOTY5MTA0MTFFQjVCOEVGODgwM0ZERDgzMTQyOEMKKzoxMEZCRDAwMDE5MEVGNTY5MUQ4MzYzNTc0MTdFN0U4QjI1MzYzMTUyQTAKKzoxMEZCRTAwMDVEQ0I0RTRCMkVFQUQzOEU5RDA5NjY4OTNFNUY2Qzc2QzcKKzoxMEZCRjAwMDk5RTFCOUUyQzQ1QTExRkNCRDZCQkIwOERBMDVDNTg5QUQKKzoxMEZDMDAwMDA0RjM1OTJGMzYwNjBFQjNGNzI5NTg4NzQzRjczMTE5RjUKKzoxMEZDMTAwMEVDRDM1MjU3Q0RFNDk4Nzg4OENGNTJEQjQ2MDIzQjM3N0QKKzoxMEZDMjAwMDE2RkRENzNEODM2RDg4Mzc5QjZCNjlFOUI3RThGRTBFRkIKKzoxMEZDMzAwMDI2ODg0NEYwNTJGQzc4ODgyNzAwN0EyMEQxRTlGMUMzNjUKKzoxMEZDNDAwMDc0NkVDQjQ5ODA3MzNERkQwNzc4RDFGNDAyRTVGMzkzRTAKKzoxMEZDNTAwMEUxRjhDODI1NjE2RENDMkJFOERCMjNCM0Y1Rjg5MTg4N0EKKzoxMEZDNjAwMDgyNzUxNjJENURBQ0JFOEM4NDIyRTc1OTNFRTQ3NjgzMDYKKzoxMEZDNzAwMDE2REYzRkNFRUQ4NjYzM0NFRTc2OThEQjBEMkQ4NkY4RTEKKzoxMEZDODAwMENENUJEQzZFRDhDM0VEODY3RERDNkU3ODlEREIwRDZGQzEKKzoxMEZDOTAwMDcyQkJFMTAwQjcxQjdBRkMwNUEyMzY0MTVFNzExRUIxNTIKKzoxMEZDQTAwMDg3QzA1RjM4NThDM0UwRUM1RTI1RjhDQjIwMUZBRUI0QTgKKzoxMEZDQjAwMEZCNEFFODdEREIyQTBCQ0FDRjkxODk2QTEzQzRDNzZENjIKKzoxMEZDQzAwMDU1RUExNEQ4ODc3QjQxN0IxMzVDOUI4QURBMTJFMEZFRUQKKzoxMEZDRDAwMDNDRTVGNDcxRjBCMzgxNUVBNkU1NzA3RUE3Nzg1ODY3QzUKKzoxMEZDRTAwMDY1NzA1RUJGMzhDNkIzMTJFODU5NTk1MjhFRTMxMjE5RDcKKzoxMEZDRjAwMERDRUNGNDFGQzAzQjYxOTEyQTAwMURCODE1OEIwRURFQjEKKzoxMEZEMDAwMDM1MDZGOENFODM3Njk4RkM4ODA2N0FBNEYwOUM5RUNEQzIKKzoxMEZEMTAwMEVCQ0YzMjQ5MjY4M0JCMUEwNTcwOEZBQUUxNzA0RjhCNTcKKzoxMEZEMjAwMDhGQzgyN0VCMzlEQzM1QjhFQzJDQkFEOUE0RDJBMTZGMzcKKzoxMEZEMzAwMDI1QjJCQTg5QjcwQTZFMzYxREE0RUJFRjk0NDVDQ0JGNDUKKzoxMEZENDAwMDc2MjZGMjNBNDFGRTVFRTM3Q0VGNzA3Qjc2NUQ0OUZGRkEKKzoxMEZENTAwMEYxQkE0MzdDNUM0RkJCOTU0OEI2ODE2MUYzOTREQzZGOEMKKzoxMEZENjAwMDkxRThGMzU1ODFGQjkyODAyRkQ2MEREMEYyQzQxRUI0REEKKzoxMEZENzAwMEFGQTc4ODA1QkY0REE2RUIwQ0YyM0E0ODRENUVDRTIxRTkKKzoxMEZEODAwMDFDMzY4NkY3QkRDNUY3RDlENzdBREUyQUI5QzEyMkQxOEMKKzoxMEZEOTAwMDc5NjcwNUVFMjFGMDNFOUJCOUMxMUQ1RTVGREFDOUQ3RDgKKzoxMEZEQTAwMEI3NjZDNjlEMDRGODMyMzhFMjZDM0RGQUYxM0U5QjA0MUEKKzoxMEZEQjAwMDc2RjdDODQ0Q0Y2QUEwMDM3N0EyNjJGOTM2QkQzRjlEQUIKKzoxMEZEQzAwMENBNDNDOTA1Q0I2QURGMTkwRkUzRTgzMzhGMTNBMDk3NDUKKzoxMEZERDAwMEFCMzcwMzNEQkM5NTY0NDdCOUQzRDc3QTJFRDIyMzdFODcKKzoxMEZERTAwMDgyRjY0ODVGN0E4NENBMUZCNDg3NkNFNTlGMUMwN0JGMDAKKzoxMEZERjAwMEI2OTIzNDc4MDJGNEI5NjA5NjY3MzBGMDMxQTlCMkEwQjcKKzoxMEZFMDAwMDdFNEVBM0ZGQzJGMzZBREFCNUQyQTBCRjFENUU0QkJGMjAKKzoxMEZFMTAwMDcyNzhFNDg1QzY1NkYwM0JERTAyRkVDMTNDMjg4OTgxM0IKKzoxMEZFMjAwMEZBOUM2MEY5OUQ3NjgwNEY0NTUyQ0EyRUMwMEYyOUI2QzQKKzoxMEZFMzAwMDg3NDY1MzM4QUMyOTU4N0QxM0MwNkI0REY5NTI5NzAwNTMKKzoxMEZFNDAwMDc0NTU5ODhBRkRDMTYyRkI2OUE4QzhFOTJBNUU5MzI0QUIKKzoxMEZFNTAwMDg1QzE3QkNEN0RBNDQ4MDE3ODI3RERFRDVFNDJGNzk1MTUKKzoxMEZFNjAwMDkyRjhDNzQ2ODVGMjREOTc4NUY5M0RFRjk0RkMzRTMxRjcKKzoxMEZFNzAwMDM5NkM3QzQ2NzZGMUJGNjc0MzVDQzdDREU4N0M4QzU1MTYKKzoxMEZFODAwMDQ5ODk1NDFGQUNEMTc5NTM1MTM0QzY2NTRFRDZCMDdBRTYKKzoxMEZFOTAwMDA1N0E3RkY1NzJGQUE4NDJGNTU1OUJBNzk3OEYxNzczREQKKzoxMEZFQTAwMDdBOEExQURENUQwRkUzOTVGQjZDMTJGQTY3RTI4Mjk2OUYKKzoxMEZFQjAwMEU1QjQ1RDA1RjYxMkQ4NEY4RjU4OTAyRjM1N0U0RTZBMDcKKzoxMEZFQzAwMEQwQ0I0REM1QzBCNzU1MDZCRUQ2RjhFOTM3OUFGQ0VDODUKKzoxMEZFRDAwMEU1RTMxOEMwNkI1NDBERTMyNzZEN0ZDNjdEQ0RGQjkyMjMKKzoxMEZFRTAwMERBMzk3MTg0MThGREJCNzcxN0E1NDYzMzNEMTY2NkRGRjYKKzoxMEZFRjAwMDRFNDBEOTI0NTlFOUZFNjY3MTdBOUFDNUU5ODk5MkU0OUYKKzoxMEZGMDAwMDRFNThDRkExN0I1MkE3MDFCRUQ0MjZFQTA3QzBEQTU2Q0QKKzoxMEZGMTAwMDU4N0FFRERGMTREODI3MTlFMEE1RkI5RkI1NUM0QzA3OTQKKzoxMEZGMjAwMEZGOTREQzY1RTlBNUM3MTREREZCQjA1RTYwNEU3ODFCNkQKKzoxMEZGMzAwMEU4NTU5NURGMDEzQjAyQzI5OUYwRDIzRjlEMzhCQ0I3MkUKKzoxMEZGNDAwMDk5QkVBRjczNTgxQzY5RjJFMDdDMUYzMUY5MjhFMTdDM0YKKzoxMEZGNTAwMDg3MEFDNDAxNUVFOEZGRUVFODc0NDhFMTkzNzA3QUE1NzEKKzoxMEZGNjAwMEYzODc1NEQ2NUY3RDRGNkEwNjlBOUJCQ0ZERTE4QUMxMzgKKzoxMEZGNzAwMDUwNDE0NjdDRTU5NkRFRjFGMEJGNTIzM0UyN0ZGNjBBNEYKKzoxMEZGODAwMDYxMTNDNEZGQzY4ODlGOUZERDREQzdDRkFBQjQ3OTlBN0QKKzoxMEZGOTAwMEU5RkNCMzFGQUNCNTgwREQ1RkE5MkE3QkVCRThCODRBNkEKKzoxMEZGQTAwMDRBMTc3RTE3RUU0M0M3Mjc0N0NDQzQwMkYzMUM5MTA1QkUKKzoxMEZGQjAwMEQyNEVEQkIzNjZFOUY5QTY3QTg1QkU2REI0NDc4RUM2MkMKKzoxMEZGQzAwMDI4MjM0Q0Y0Rjk0RjA0MUJEOTQ0QUYzQjM3MkNERDA4RjAKKzoxMEZGRDAwMEYzN0RGQ0EwMERFQjBBMDlCQzJCMDdGNDAwRTFGMTQ5MEQKKzoxMEZGRTAwMDc5RTMzREI0QkY3NkJEOEQ0MDVFNjQxRUI3RjdFMzcyMjIKKzoxMEZGRjAwMDkyNzE1RTkzNjMwMTNFNUZEMzE2ODM3RUYxRTkwRDQzRjgKKzowMjAwMDAwMjIwMDBEQworOjEwMDAwMDAwQzcwM0ZFNUIwNzM1REMwNkY1RDQxRkM3MkFENTgwRDdBQQorOjEwMDAxMDAwREEzNUQ3OTgyMDNFRDIxQUREM0UwNUM2N0Y2MjIyQUU4MQorOjEwMDAyMDAwNERFOUI0MkQzRDY0ODFGNTc0NTFGQjAwRTJBRERBM0EzRgorOjEwMDAzMDAwNkI1QUMzRjAwRkZCQ0E2MTcxRENFOTI2QTI2QzhFNjBCQgorOjEwMDA0MDAwRDczQzlBMjM3MDNENEI1NDVCRDhGQTM3RTQ0ODc4N0YwRAorOjEwMDA1MDAwN0FDQUEwOTY4N0UxM0QxNEZCMkUwRjg3MEJFQzdCMEEzMgorOjEwMDA2MDAwOEI4QkI2MjY3QUFBMDdEM0Y2NDcwMjcxQUQ4Qzg3QUI4NQorOjEwMDA3MDAwRkMwMUYwQTdGQTAzMUI3OTA2RDE0RjcwQkM3NUY4QjBFQworOjEwMDA4MDAwQTdEQkMyRkNGRjRDRkVERTUzQjFBQ0ZGQTQzQkRBMEY5MgorOjEwMDA5MDAwRkIzQzI5QjFCNkVBNzZGQTkxOUVDRDRBREE5QzE4QjZCNQorOjEwMDBBMDAwMUY2MTA4OUM4MjYwRUIzQjFBMjM1OTUzMTAxRjQ0N0E0RQorOjEwMDBCMDAwOUVBRUFCRjY5MUM3MTBCRjVCMjg3QzgwM0ZCQjVDNTIwNQorOjEwMDBDMDAwQ0I0RUJBOEVEMzU0NTlBQkQwRUY3RTdDMEFDMEYzQ0U2MAorOjEwMDBEMDAwMEM0QUE4MDkxN0MzQTkzMTY3MTBBRUU3RjRGQUU2MTg2RAorOjEwMDBFMDAwQUMzMzcxMTFDNTNBQTQxNzFFMzVFRDVCQkYyMzhDNDdBNQorOjEwMDBGMDAwM0RBRjMyRjlDMUY4NEYyMDYxRjI5REUyNzc3QURFMEYxMQorOjEwMDEwMDAwMkRCNUIwREYyOEQyMEU3ODMxRUQ1OTY1ODc3NUNFQUJBRAorOjEwMDExMDAwQjE2MDdFQ0M0OTdDNjUyMDRGNkIxRTExQjA0RDdGRDZGRgorOjEwMDEyMDAwODJCRUE4RTVGQ0Q1MkEwRERBMDc3NDdDMTJFQzcxRjRDNgorOjEwMDEzMDAwRjc5RUQ4MEJGNTAxMzU1QzdFNTUyREQyRDNFOTYyQjcxOQorOjEwMDE0MDAwNTlDNzJGMzM5NkVCRjk4N0VFNTNEN0RFOThDM0VBM0FCNworOjEwMDE1MDAwQkJCQzFGQzc4MzdFNkVBNURCMDZCODdDRDIyMkY4MzdGNgorOjEwMDE2MDAwQTE3Q0Y1OEQwOEFGQUYxQjkzNjNEMkUyRjA5MjI1MEMxMgorOjEwMDE3MDAwRkVCNTk0RkU2QTQxNkZEODQ5N0IwOUQ4MzU3OUEzQTdBQgorOjEwMDE4MDAwMDJCRDVCOEY0NkUzM0E4REYwRkQ2Nzg3QzNBOTI0QTlDMgorOjEwMDE5MDAwN0EzMDVEQ0YyOTRBQzc1MEZGNzM3MjQzMzNEQTJGRjBBQworOjEwMDFBMDAwMjNFQUY4REFENTAyRjRCRDg0QUVGMjcxMTdEMkE3NzU0RQorOjEwMDFCMDAwQzZCODVFN0FEMUUwNTNCMzNFNzkxRjhDNzNGRjY3OEM2QgorOjEwMDFDMDAwNDQ5RDI3NTJFM0NFNUYwQUY2NjQwRjFEMTlFMDAzN0JCRQorOjEwMDFEMDAwMzY2QkVGNDlFREE1MzNFQzhGNDA2NzY1NzQyQ0MzOEIwQworOjEwMDFFMDAwOEFGQzUyNTNEQTkzRDcxQkQxNUZGRDMyRTIzQjlGRTI4OAorOjEwMDFGMDAwQjUyMzdEM0VFNEExMzQzOUI3QUVFODREQTQ4MzczMkUxOAorOjEwMDIwMDAwRTIxNzk5NUZGQjM2QzhGRDE4QkUzNjk1Qzg4MUJBNzhFQgorOjEwMDIxMDAwNTAyNjU0RUZCQUYwMUVGQUNCNzE3Q0JGQjFDQjg1NjM4OAorOjEwMDIyMDAwQTU5OTg0MEM1QTJFMUUyQkE1Mzc2MzRCODMwMUQwMTMzRQorOjEwMDIzMDAwMzYzN0Q3QkJEQjczN0YzNTY2MDg5QzZFMjAxOEE3MTk0RAorOjEwMDI0MDAwMTA1REVFMDlFMDZFNUMwOTc4NEVDMUUyNEEwMEZCRTcwMgorOjEwMDI1MDAwNDE0MUE4ODJCOEZEMDBBMkI3QUJFMjBDRjAyMDU5RTZGQworOjEwMDI2MDAwOEZDMkVERjI2ODJFRUY5NzRFNDkxNUQwREYyOUQzRkJGMAorOjEwMDI3MDAwQTc2NjgzNURGNEFCMUM5M0U2NUZFMDU1ODI1RjI5MUNBMworOjEwMDI4MDAwNUJBOEZGMDY3MjZBNTBBMEJEMURFOEIzOUFEQUFEN0U4NgorOjEwMDI5MDAwRENCRjA3RjMzQUQ2NTI4MTNDMkVGNEM2QUZGRTUxRjFEMworOjEwMDJBMDAwOEI4QkUyNjAzQzdFRDE1NzFDNEM4QjA3NTRCMjVCRDRFNQorOjEwMDJCMDAwREY1MURDOTBGN0FCNzQ1MzNGNjcwMEQ4NTkzN0JCRDE5RgorOjEwMDJDMDAwNkY3MjlGNDZCQkQ0Q0FFREQyQThEMThCNUMyQzdGQzY3RgorOjEwMDJEMDAwRjg0NzhCMDcxOEU5Q0ExODU3MzJGMjlGRDEyRUZEQ0Y4NQorOjEwMDJFMDAwMUM2RTNGNUQ0REFFQkU5MkY4ODAxNkM3NUY5M0M2RkM5NAorOjEwMDJGMDAwOUUzNTY5QjUyQkExN0VFRDNDRjc3QjVDQUEwOUYxMzhGMAorOjEwMDMwMDAwNjc5NjgwNzhENEVDQjUzOURFQjNCMzgwRkZCNEZBODM1NgorOjEwMDMxMDAwNEJGOTNENkQwNjNGMjREQUZCQjQyQzQ3RDA5RjhFNUMzMQorOjEwMDMyMDAwNDY0NzhFMDJENjNGQzc0RUNDRjZCMEZDODEzMzk3RTlFNAorOjEwMDMzMDAwREYzOTU0MEZEQUU5MTZBN0YzNzM0NDE1NDQ5RjlGMUE2NworOjEwMDM0MDAwOUFDQkU0QUM3NkE1M0ZDMThDMUM1REJERTBEMERDQjA5RgorOjEwMDM1MDAwN0NBODhERTc0M0VEQkM1RUIwMzhCRDdCRjc1NzcwNUY3RQorOjEwMDM2MDAwNjY3NUMwMzZCOUU2Qzk2RjUzMzg0NENGOEFGMTk4OTBBNAorOjEwMDM3MDAwN0U5NTY3N0UwODdFRjIyQzA3Q0FEQkY4MzQwOUVCNUVCNworOjEwMDM4MDAwQUIxMkVEMUVBNDdENTU3RTFCRkMzMkI0MzMyNUQ4OTJGMgorOjEwMDM5MDAwOENGMjc2MkVFNURGODBBQjFGN0ZDN0RFN0ZEQ0NDQTkzOQorOjEwMDNBMDAwRjkzQjA1OENBRTdBRTI0QjNFMjZCRjRERjQxRkQwRDMwRAorOjEwMDNCMDAwRUMyQTNEQkRDQzU1RkFBNzlGREM1Q0ZEMzlBRTMxQTFERQorOjEwMDNDMDAwMEIzQkJGNDJCQTYwRkNCQjZFMDRDQjQ3OUYyRkE3NjNCOQorOjEwMDNEMDAwMjA3RkRCODczREFFRjlCNzRFMEJGNThCMjg1RTgyRjJBRQorOjEwMDNFMDAwNkVBNEY3NjAxQUIxODRFM0RCNTcyMEVBRUExQjgyNzkzNgorOjEwMDNGMDAwMjREQTQ1RkQ5RUEwODUyNDNENDhDNzBEOTBFNzVFRUZCOQorOjEwMDQwMDAwMDJERkI3RDgxNjUzODM3QUMzQUZCM0VGMEZEMTc5NEY1QQorOjEwMDQxMDAwMzhGQjVFODc5MUNFRUYxQkJEMDRFM0ZGMEY1QzQ3NDFDNQorOjEwMDQyMDAwNDZENzdGMUYyNDlDQjE1RTZGQ0I3Q0YwREIxRTgwMzZFRAorOjEwMDQzMDAwRDZERkZERkJGQzYyNjg0NzY5RUQ2RDNGOTJDM0VBMERCNAorOjEwMDQ0MDAwRUVDOTBERkM0ODJEQTA3RThEOURFQTVCM0E5RjQzMjJBQworOjEwMDQ1MDAwOThBNzIyNjQzM0NBNjcxMUUyODEyMDlGQzc4NkMxMTcxQgorOjEwMDQ2MDAwRkQwNjNEQkM4RDc2QkM1OEMwRTIyOEEyODFFRjhERUYyMQorOjEwMDQ3MDAwQkQzRDk3RjMzOUM3NTM1RkZCMzYzRTQ3N0ZBQUFFRDZFMworOjEwMDQ4MDAwRDNGRjc3NzJGQkE5OTczNTNFRUY4NEZBODk5ODJCQUY5QgorOjEwMDQ5MDAwM0JBMDgyMTRGM0QzMjIzMTc5QzA1RjI2MjUwNERGMjdFNQorOjEwMDRBMDAwQjgxODVEODE4NDAxM0Q2ODY5MThFMDQxQjhEMTc2MTRCRgorOjEwMDRCMDAwRTgwNUJGNDM4QkFCRTJBMkEzMDBGRjIyRTQxMzAzQTgyRAorOjEwMDRDMDAwQ0ZFOTUyNDI0MjJBOENEN0VBMEYxNEYyOTVFM0YyRTVDMworOjEwMDREMDAwMUU5NUM3Mzg4RjU0QzZGMkNCRUZDQTI0MDRFRjFCRjMyNgorOjEwMDRFMDAwRjg3QTVGMEVGOEVCNDdBOTlFOTU0MDhGREZBQzQyQkNDRgorOjEwMDRGMDAwQUM3QjA1QzFGQzgwQzNBNTYwOUJCRTJBRDRFQzgyQjg0RQorOjEwMDUwMDAwMTU2QjU3NTMxODgxNUVCNkI5RjVGNUFGM0I4QjFFMkZBRgorOjEwMDUxMDAwQjZEMkZFOTY1MjE2NkYzREQ0MTg3ODc3MTVBNUI1OTZDQgorOjEwMDUyMDAwODI3Qzk0OTdBQjYwNjBEODdBODNCQkEyQUMxMDg3NTE3MQorOjEwMDUzMDAwRDQ2RkQ5QzE2RUZFNzA4NTY4ODU2QjcwNjU4RDBBOUIxRQorOjEwMDU0MDAwN0UzNzQxREQyQzQ4MTA3NzUwMDhGOEY5RDYxNUNENTM4OQorOjEwMDU1MDAwODBBRkRFQjVBODlFNDE0RUNDQUI2MjlFQjg3NUE1N0E0MQorOjEwMDU2MDAwMkJGODNEQjI1NDVFOTY0Q0Y5Njg1M0FCMTlDRjE5OURFOAorOjEwMDU3MDAwMjhGOTdEQTIxNEM2ODc5RkU3MzJCRkUxRTBDRUE4MDcyNQorOjEwMDU4MDAwMDAwRTZCMDQ3QjI4MEFBRTE2NjVEMzdERjFGMDNFQUJGRQorOjEwMDU5MDAwQTc4OTJFRjFEREE2ODc5M0UwM0Q2QjE2QUZGMUVDODJDMworOjEwMDVBMDAwRkUyNjFCOUM0MDI1NkIzNkQ4QUI2MERFMzU0OTRCREMwNAorOjEwMDVCMDAwNEJDMkU2QjUwRkI3MzZDMEZERTBCMDE2QUM2QjUxQ0EwMgorOjEwMDVDMDAwM0NENkE4NThEOEQ3RTczMTkwOUY2RDVEOTExOTA3QjRGNAorOjEwMDVEMDAwRDg5MjYwMUQ1MTA3RTM5NkZDRTlCN0I5ODA3N0M5ODRDQQorOjEwMDVFMDAwNzk1QkFCQkJERDAyRkIxRUU5NTY1NEM4OEY5QjcyOTQ0RQorOjEwMDVGMDAwMDM0MEFGRjM5NjlGOTg4Mjc1NzNBNUIxQUJFMTNBRjJEMQorOjEwMDYwMDAwQzJFREFEMDBGRjc3NzkzQzI2OTQ1MDhCRjlEQTk2NDUyMAorOjEwMDYxMDAwNzU3NjU4NkY0NTQyQ0FDQUYwNzg0QzRCQzE2MkZCMThEOAorOjEwMDYyMDAwRkE1QzhBREI1NEIzNzRDMEM1RjREMTAyRjE5NzA5QjAwNworOjEwMDYzMDAwMkVCQTlGNzEzMEVFOEY4RDBBMUQxNzRBQjI1NjQ1M0E3OQorOjEwMDY0MDAwQTdGNTA5RDc0N0Y2RTZBNTI5MTAxNzY5RDk2MDg3RjRGOQorOjEwMDY1MDAwMEM2OTExOTRGNTkwMUY1MDkzOUQxMUVCRDgzM0JDMEM4RAorOjEwMDY2MDAwRUVENThBNkI4QTU1NDJGQzIwQkY3REJFRjVEODhGRDQ2QgorOjEwMDY3MDAwNTE2MDU3MzJGQ0Q5Q0RDNDZFMDlEMzdGMTlEOUM1NjdGMworOjEwMDY4MDAwNzJDM0ZDRTg4QkRFOUJEMDgyRkFBMDQ1NjBGQzlCRTE0NAorOjEwMDY5MDAwRkRFMjQ3NTAyRkZDN0NCNkFGMUJFMEI3QTY1NTU5MEZDMworOjEwMDZBMDAwRjAyMkFBOUQwQzI4RUE5QjRGNDJGNzkxMTE4NENBRTNERAorOjEwMDZCMDAwOTYyNjVCNTVBNDNBQjREMDIyNzEzQUYwMDlFNUEwMTMwRQorOjEwMDZDMDAwMDM0Njg0QzlFNTk1NzUyOTEwMUYwOTM1NUQ4NURDREQ3NAorOjEwMDZEMDAwMzM3RTgzRkQwM0MwNDM2ODQzNUEyQ0U4QzM1MDUyNkRGOAorOjEwMDZFMDAwNEEwQUQwMkRBNzRCRTNGQzVCQjgxREYwNjJBNjJGREFCNworOjEwMDZGMDAwMEI3NkU1NTg5NkY3OUM5MUVCNzM2MjlCQjRCQkMxQ0UyOQorOjEwMDcwMDAwRkQxQUQwNkQyQUFDRjcxRjQ4QjdBOEU3M0VEOUZBMUZFQgorOjEwMDcxMDAwNDg1N0M0NzU3OUY5NDgxRjA5OTkzMTlGNUFGNDE3OENDNQorOjEwMDcyMDAwRjdCNjhERDNDRTNGQjFGOEEwNjZGNzQ2OERGRTY4MTVCQgorOjEwMDczMDAwRjhBREJFM0MyRERGNTVCMDE3RkNGNUU5NUEzRUI1OUMyRgorOjEwMDc0MDAwQzUwNzVERjQ1RkE0RjhBMENGMTAxRjlDNkU2ODZCRjYyMAorOjEwMDc1MDAwRTYwRDVFQkQ3RDlCMjhCNUZCNEE0MEVFMUUxMDNERTBEOAorOjEwMDc2MDAwNEYyNDExQTY1NzY2OTQwQjdFQjBCMzlCOEFBMkVEQjhCNgorOjEwMDc3MDAwRUUzQzFFRTdFNEZFRDczQ0JFRUU2MzhENzYwMkY5MjQyNAorOjEwMDc4MDAwOTNBMzYwMzVBQzdGN0EzRTVCQkZBMzNFM0QzQjIwODFBNworOjEwMDc5MDAwN0M2NzcxNkU1MjZGOTMzMDZFMDJDODRGMjAzRDdFOUExNworOjEwMDdBMDAwMEYyNkExRkI5OTU3QkYxNEVERkQ1RUY4MzVCMUY4MTA4NworOjEwMDdCMDAwRDFGQjEzM0U2MkYwMUYxNjMxN0I0Q0YzQjdFNjFCRUMwNgorOjEwMDdDMDAwMDNBM0JENkY4QzUzRjdFNjA1MzZEQjgxOUVCQUM3NjY3RgorOjEwMDdEMDAwMUM0QTkxQjA1QjBENjhGOTAwM0E2RUExQjc3Mzc1Mjg5OQorOjEwMDdFMDAwNENGRTc0NzJGRDcwQTQ1MTNFQjY4QUVFN0ZCNUVGQzcyMQorOjEwMDdGMDAwNzZBMEQzMzZCM0RGMEVGQUE0QURFQ0NFMThBMEJGQjYwOAorOjEwMDgwMDAwMDU2MjE5RjA3REIwQjEwQ0M3MUQ2Q0Y0RTE3NTk1OTdDOAorOjEwMDgxMDAwQzlCQjYwQjZCQ0MyMUIxNjc3QUUyQzJCM0VCNjJBQkMzOQorOjEwMDgyMDAwRUU0MUJFRUVEOEFBQjBGNTU3Nzg2N0U4REExQTlENTVDMgorOjEwMDgzMDAwODhBNDYxNzMwNEY5RjJCQzk3RDlFRDY2QUFGN0IxQ0UyQQorOjEwMDg0MDAwNTBGQzg1QTdCRkZBMUJFQUFGNzY4N0MzRUY0MUFGREU0NgorOjEwMDg1MDAwOUVCRDdGNkNDOUMwRkVFQzE2NkQ3RjFBNUNCNDdENkJDQgorOjEwMDg2MDAwRkQ3REFERjM3QjdGRTMzQTlGRjVFQUVEQjk0QkFERDM2OAorOjEwMDg3MDAwQjgzRTZEREQ3RDhEQUYwMDYxMzUwQ0Q2NTlCQTAwRUEwQQorOjEwMDg4MDAwNjI4M0Q5NEEwN0M4QTNDQTUyNjEzNUU0NEI4RkYwNzgxNgorOjEwMDg5MDAwRTI5MTgyMTgzQ0U3QkUzNzhERjk3QkQxRjU4QzZGQTJDRgorOjEwMDhBMDAwNEI2NzYwREVFRjRBRjE3QkEzOTdEOTk1QjMwQTA0QkY4QgorOjEwMDhCMDAwNEM3RjlEQ0FDRkRCMUY0QjYzRjlEQ0E2QTI5RkZGMTZCRQorOjEwMDhDMDAwRjJEMEVGMTQ1QTU4QkM5N0M4RDNBNzg1RTVCMUQ2NTlEMgorOjEwMDhEMDAwRkQwMUM4MjcxREVCQTlEMzU4QjZGQTZFREE4RUQ2RTQwRgorOjEwMDhFMDAwNEE5NTNFRUYzMDZCOTYzRTdGNTg2MUM4MzM0NDFCRTQxNworOjEwMDhGMDAwQ0E1MThEM0U3MjI4REM1MzdCRTFERTk3M0ZEMTE3N0RENAorOjEwMDkwMDAwMTBGM0Q5MkNEMDQzNDZGOERDNjY4MDhGRDE3RkE5RDg2QworOjEwMDkxMDAwNkVFMDg3Q0JGNDYzMzZCNTY2RUQ4NUJDOUE0QUVEQzlDNworOjEwMDkyMDAwRDE4MDNGRThBMkNGNDVDQkJGQzYzNEM4ODAzQzQ2OEZCQworOjEwMDkzMDAwNjM0MjY3RDY4MjVFRUNBNDJBMDBGNENCQkE5OTc3QUUwNAorOjEwMDk0MDAwODdGNjc5QUFGNzAxMkY3REJENDdGM0RGOUVDRjk2QkZDQgorOjEwMDk1MDAwRjQ0NkE4MUZFODkxMjM2MDFGNEM4MEJDNjA2NEZCQTA5NAorOjEwMDk2MDAwNzNEMUU0NjkxMUVEODM5OTc1MjlEOUIwQUUxOTdBRkI3OQorOjEwMDk3MDAwQTA3MzQzRDk5Mzk5NzAxRkVDMDNGQUQzOTk1N0E3QjM4NworOjEwMDk4MDAwMEY0ODU5RTYyNUUwQzNFNDZFRDRFOEFDODg3NTdBQjMyNQorOjEwMDk5MDAwQjM5NUMxNzk2MUZCNzFBNDM1OTBGMDdBQzZFRTFDNzlFQworOjEwMDlBMDAwMDhGNENGRTA3MTA0RUQ3REQ0RkVEQTYzODk1MEJGQTg2RQorOjEwMDlCMDAwQkQyRkQ3Q0JFQUYwNDk1OTFDRDMwRkZDN0EyOTNDNkFFQQorOjEwMDlDMDAwNzVENEY3NUI2NEZDREU4QjE2RjdEMkM2NjVFNzMxRkJBNgorOjEwMDlEMDAwQjAzNTQ1QUU4NzdFRTJDQ0I4QzRCQzRENUE5QzIzMkRDMQorOjEwMDlFMDAwN0QwOEFGMUI5NjQ4OEYzRkY0MTc0MUMyRkUwOEZFMUVEQworOjEwMDlGMDAwODFCQzY0NzRFMkQ5M0QyRTNBRTQzM0FGOTI5Rjk3MERFNworOjEwMEEwMDAwRTcyOEZDMkFFNDQzNkNFNTAyREE0QkI2NDQ4Mjc2Q0Q1MworOjEwMEExMDAwRTVGQTU3OTczQkFFMTU4QTAzQzBERkFBNjVGMUYyRTIwQgorOjEwMEEyMDAwNzQzM0I2QTMxNTcxMTNDODg1NDkxNzA2MEEyMDM3N0M5RAorOjEwMEEzMDAwOEFGODM0QUMzNzVBRkVGQ0QzMUY4M0JFQTY3QTFGRTI3NQorOjEwMEE0MDAwMzAzRUQyODBFN0FDOUQxNjFGQzYyN0RBQ0FFOUNDRTk1MgorOjEwMEE1MDAwMTA4NzU5Njk0OUMxNzg3QUYyQUY2M0RDRjAzNjdGMkI5MQorOjEwMEE2MDAwQzRDQjZEMUU3NjFFQUFDQUFCQUU4NkVGNjY1NDE0OEUzQQorOjEwMEE3MDAwMTYwOEVEOUZFRTYzRjE5QjM5MTBCRjgxNzk2NzlEREQwQworOjEwMEE4MDAwMDlGMTlGRDk1RTI2QkZDMDZGMDNCRDM5QjdFRTNCRTNDNgorOjEwMEE5MDAwMUU5NUZFOUFCODhEQkYzNTJFMEJFMzQ5MTJDNjBCMEM3RQorOjEwMEFBMDAwRjEyMTVCQzE1NDhDMEY2OTc1MkFCRTAyMTFDRjc3OTM3NworOjEwMEFCMDAwNDQyNzdFODdDMjE4REYzMUM2NzM4Q0YxMUU2MzdDRTc0MgorOjEwMEFDMDAwRUUzQzU2MjdBQ0Q5NTNERkNFRDNEQjUzMkJFMDBDQzIyMAorOjEwMEFEMDAwNjBCMDk3QThBOEE0N0NERDY2MjE0OUVEOTQzRTBGMTU2RgorOjEwMEFFMDAwN0Y0MkVFQTJFQjcwRkVEMDA0MzVFMDc0OUMyMUNFNzhGQworOjEwMEFGMDAwOTk3MjJCNDhFNUNBMjlEOEM4RUUzNzJDRTBERjJFOTAzMgorOjEwMEIwMDAwNkIzMEJFNjdBNEZCQzdCOEZDQkEyRkNGQTlBQkVCMDgwQworOjEwMEIxMDAwMzYyRUU3Q0Y0N0E5ODBFNzA1QTNBQ0ZFQThFNERFNzkyRgorOjEwMEIyMDAwMkU5NzNGOUVDQTkxMUZDRTYzN0VDNTBGODFDRTg5NDcwNworOjEwMEIzMDAwQzFGMzA0MzM3MjVEM0FCQTI1MEQ4M0M5QTlCMEY4OERBQgorOjEwMEI0MDAwRjFCRERBN0FCNEY5QUY3NDFEMEY3MTc4NUYyRTlGQUNFNgorOjEwMEI1MDAwMkJDQUI3NUJFOUZCQ0Y1MTFDOEJBODJGQTk0MTFEMTZFRgorOjEwMEI2MDAwOUZENkUyRTdEQTczRDU5MDM3QzgwNDNCNTJDMEZDODFDOAorOjEwMEI3MDAwNzYzRjJDOEU2RDA2QkE4RDRFNTRFNDQ4REY5QjdBM0I0RgorOjEwMEI4MDAwQUYyNzZFOEE3OTRDRUQzRDQ0NTA1MDJFRDRGMTdDOERDOAorOjEwMEI5MDAwMzY5Rjk5Qjg5QjkwMEY4MEI2QjU3NTg5MTFFMkU2QzQ2RgorOjEwMEJBMDAwNjNCNzUxOTJBOTVEMkIxMjg4RkYzODg5REMwRUYxNjc3QgorOjEwMEJCMDAwNkJBQjA1REI0NEFEREEwNzc2RkEyMkNFMTdENjgyQTlGNQorOjEwMEJDMDAwRkIyMEFFQTZGMTg1MzE2RjYzMTUxM0E3QzJCNDc1RUQ5NgorOjEwMEJEMDAwRkFGQzk1MzEzRjY1QjRBN0I1RjhCQTk5QkUwNEQ2NzU0RAorOjEwMEJFMDAwMEVGMEMxRjZFQjE3MkY2RkJGNEZFMzdFQkVBNkZCRDUwRAorOjEwMEJGMDAwRThBQTNDRjMxNjM3RDQ5RkI0NDQyOUVCNkJFOEJBRDQ4NworOjEwMEMwMDAwMjdFRDE4QUY3MEMwREEwMDI2MDFGQTBGRTRFNDkzREU5NgorOjEwMEMxMDAwMUZFMzc5RjY3Q0Y2NUQ5QTE2ODFENUEzRUM0OUY4NjM1QgorOjEwMEMyMDAwN0NGOEY5MDU1MzNFQTM5QjlGRTU0OTM4OEVFQUNGMDAzNworOjEwMEMzMDAwOUM5NzIyNjNFMzkxMkZCNEZBOTM0MzA5Q0MwRUFDMjgxRQorOjEwMEM0MDAwNUMxQ0I4OTNCNkZGOERENzRCNUU1M0Y4OEM5NkVGMUZBNAorOjEwMEM1MDAwNTA5QzQzQjBGNDAzRTBCMkNFQ0FFQUQyMEU3REMzOENGRQorOjEwMEM2MDAwRjU2NDQ0M0NCMEVCQ0VGOERFQkFERDZCMzZFQkZEQ0E4MgorOjEwMEM3MDAwMUJEMkY0RjZBMEQxRkVCMzFBREE0M0YzOEQ3NTY0OEE2MQorOjEwMEM4MDAwMURFQkM4MTI3ODFEMTk1RkJGOTE0RjdFREFDOEYyMUFBQQorOjEwMEM5MDAwM0ZFNzc1RkZCRkUwRTcyRjdGQzlFQkY3MzZGM0YzOTcyOAorOjEwMENBMDAwQ0ZGMzczQjMxQURDRUZCNzI4MTg4RjNFNzExREI1RTk4NworOjEwMENCMDAwNjI3QkUzODBFQjhBQkVFQkM2RjNGQkY5Q0NDRjlBMjJEMgorOjEwMENDMDAwM0E3NzgxOUVFQTNENjdEMUZGNzdDMjJBQ0JGNDc5QjNBOAorOjEwMENEMDAwRDkzRTdEREU2QzZFOTUzRTZGRjZGRjMyRTVFQ0ZDNkMyNgorOjEwMENFMDAwMzg4NzUxQkYxMkJFNTMzMDYzOTU4OEY5Q0E3NTJERTcxNgorOjEwMENGMDAwNTBDRjlFMkY0MDZCRkJBMkY3MUNFNkU3MzBCNDczMUM2RAorOjEwMEQwMDAwREFGRDZCRjNEOUY3OTExQ0JCMTIyQzUwOEYzRjYzNTU2MgorOjEwMEQxMDAwRUM1NDg4OUYxMzU3QzY2NUQ5NkYxNTEwNzM4N0ZDQ0ZBNQorOjEwMEQyMDAwNEE5NzA1QkUwNzMxMjM5MDgwRjFEMDlBRDYyQjlCRTdENgorOjEwMEQzMDAwQkVEMTQzMzA0RUREMTNFNzU3QzdERTA0RjJGOUIwMTZEQgorOjEwMEQ0MDAwRTcyN0Q3REMwNDcxRkVDMzNDQ0U1RkYzRjJCODI3QzFCRQorOjEwMEQ1MDAwM0ZGQTU5OUUzQzE3RTBEMTk0Mjc1N0MxQjU4NkFGODcxQgorOjEwMEQ2MDAwQjY2RkNDMUZEQ0RCQTYzRkFGQzdFQUJGM0Y1MTkzREZCNgorOjEwMEQ3MDAwNEYzQzVEOUMyQzM0NDRBQTE3QjkzOUJGMjdDRUI1MTQxQgorOjEwMEQ4MDAwRTYyN0Y2OUUzOEQ3Mzc2MTNFNjI2RkM3NzM3NkY3RTY3RgorOjEwMEQ5MDAwMzNGOUQ0N0M4Q0Q0QzMzQ0NEMkY5M0ZBRTcyM0Q4REQzMAorOjEwMERBMDAwNzdFNTBCREE3Q0RGQzJFN0REOUE3RUYzRERDOUU2RDdCMworOjEwMERCMDAwQ0YyN0RBNjI0NzgwREY3RjgyRDc5NzE5RTdCQjM3REYxQgorOjEwMERDMDAwOEFFM0U4N0NERkMzRjkxMjdCRDY3NzZGRjhGQTdBQ0YzMworOjEwMEREMDAwQ0ZCODYyODA2OTFERDU4QUE5OEJEMjEzNjkxMUIxRUU5MworOjEwMERFMDAwQzREMUUxOUEwNjc1NDk2NDZBMkFENkIxMUMyRUFERkNCRAorOjEwMERGMDAwQTczODRGNzNCOEY0ODU3RkM5RjMzNERCRjI5MzJGRUIzOAorOjEwMEUwMDAwM0M4RDYzMjY1MTIyQzUzNTAyOUMyRTc3MTU2NDBFMEM0RAorOjEwMEUxMDAwRjU4MzI3RUJGMkZENDFCMDMzN0FEQTY2ODU0MERFQ0YwOQorOjEwMEUyMDAwQkFGQzIwREVCRjNGQ0E1NTFERDFCRUUwRjJBREE1NzRBRAorOjEwMEUzMDAwOTEwRjUyNDI2QjkyQTY4QUUxRjZDQkQ5MkNFNUNERkNGQworOjEwMEU0MDAwMDhFNzEzQ0Y4REVBREUwREFBNjk2NkE5NjAxNkUyRDEyNAorOjEwMEU1MDAwREVGNjA4NTQ3RTY2QUQ5ODIxQkEyNTQyQkMwRDBGNEVEMQorOjEwMEU2MDAwMUU0QUZCNjcyNTUyRkYyRTZDREZGOUY1QkZERTRERDkxOAorOjEwMEU3MDAwOTUxNDk0MUU2RThFQTdFMzc2RTQyODZGMDNGRDE2QjlEMQorOjEwMEU4MDAwQTUzREQwOUVFNTRCQzdCQUY3RkI2MzA5REE3OTI3NDY0MworOjEwMEU5MDAwNUJGRDlCOTIyRjVFRjdFRjdBRTVGMjRBRjMxNUM4RTUwQQorOjEwMEVBMDAwOTY0NjdERkU3QjRERDI5ODk1QjBGRTMxMjUyNDA0MTJFNgorOjEwMEVCMDAwMzZDNTdEQjYxOEYyN0YxOUQ5Q0FFRjYwNUQyOTZFMjI1QQorOjEwMEVDMDAwREJDNkUzN0Q5OTg0RTU2RjhDRjMwRTk4QzhGMDM0MjY3OQorOjEwMEVEMDAwOTRGODAzODgyNzFGRDJGQ0ZEQTIyQkY2RjdGRjE4MEUwQgorOjEwMEVFMDAwNkZFM0Y1ODRFNkVGQUY4RUVDRUY5RjU4MTQxNzM5MUZEMAorOjEwMEVGMDAwRDA1MjU3MEJGOTgwMTNBQkY1RkVGRTg5MERFRTZBMzgyMAorOjEwMEYwMDAwRTc3NzgyRkJGQjI3QTY1MDdGN0Y2Q0RGRjkwMDZEOUZBMAorOjEwMEYxMDAwNTQwRTM5MjdFQUYyMDFEQzZFRTc3MUVERDlEOUYyQzAzRgorOjEwMEYyMDAwODlEOUU4Q0ZCQkUwREE5ODI5QzdFMjc4RDU3NTEzOUU1NgorOjEwMEYzMDAwNDcyNjkxQ0ZDOTkyMjc1QzMyRjgzOURBQjlGNjVDQUYwRgorOjEwMEY0MDAwMzIwQzlFRDdDRUNCOEUwMUQxMzYwOEYyQTJBRURCMjI3OAorOjEwMEY1MDAwRDFGMzY4QkVCRUJGM0U0RkRBOTNDNzM0RTEzOUVBQ0I2NgorOjEwMEY2MDAwOENEMzVGRUUzOEM5QkI5OUQ1RTM5ODU5OUQ2MTU0NDI0MworOjEwMEY3MDAwODkxQkYyNTNFN0M3REE1MUJGQjdDMkZGQzJGNDZBNkFFRQorOjEwMEY4MDAwQkUzMjcxRTJFMEYwNzkwQ0RGNTc5NTJFRUZCRDVBOUQyRAorOjEwMEY5MDAwM0VFODJCRDAyRjlEODQ5NDgxQkM3OTIwQjYwMUUzMUVCRQorOjEwMEZBMDAwRDc3MUI4MTlBRkU1MTMzOTVFODkyQjFFRTA5OTlBRUYxNgorOjEwMEZCMDAwQkIwMUYwNDE1RURDMkNFMTc3NjBGOUZEQkVFQUZCOEQwMAorOjEwMEZDMDAwRUI3OEQ2RUE3QjFGQ0ZENzk3ODgxMkFCQ0IyM0M4MTcxNQorOjEwMEZEMDAwNTdBNUI5NTA0RjZCRjZEN0QyODk0QzZFREE0ODY4OTQ1MgorOjEwMEZFMDAwOTVFRUIzNTlERUVEQ0NBNEUzM0U3Q0MyOUMwRThGM0Q2MgorOjEwMEZGMDAwMTc0MzJDQjA2RTVGMUE5NTczNzQxRjI1NkU2NTY0N0Y1RQorOjEwMTAwMDAwRjIxMUJFNDg2NEYyQzIzNTIwOThEQzc4OEQ2MzU3NTVFMgorOjEwMTAxMDAwODBGQjE3RjFFMzEzREQ4M0MxMUU3RkVFNDk5NjlGQkE3MworOjEwMTAyMDAwRUFDOTQ1RjZEQUIwRjk5Rjk4QzhFNTY2MjI1QjdGQjU1NAorOjEwMTAzMDAwMkNGOEE1NjQ1OENGNTlDQzQzQ0Q5MDRDMUU5OTQwREU3NgorOjEwMTA0MDAwRjhGQ0QxQjkxMDI3QTRGNkRCNjg2QzlGQzM3NjUwMzI0OAorOjEwMTA1MDAwNjU0MjVFRkI0M0Y3MTc0NzYxRkM1NUY3MkUxRTgyRjQ4RAorOjEwMTA2MDAwQ0ZFMUIxNzA0NUU2QjM2OEU3RTcyOERGMDVGQzA3MEI4MQorOjEwMTA3MDAwQ0VDNUE0OEU0NTNCN0UzREQwRkY0MjgxRjgyMkQ5MDlFMgorOjEwMTA4MDAwMEY3MUJDNUQyRjM3REMwODc0NzZCRDZDMjM3MDZFMkQzQworOjEwMTA5MDAwNTg2QzQzQjgzRjU3Mjg0OEUwQjc1NjAwQ0Q0MzNDRTc2QgorOjEwMTBBMDAwMDkzM0M2OUIyOTNDOTY0MUZGMDE4RjAzQkYxQjVEMjI3QworOjEwMTBCMDAwRkZEQTBDRUQzRjhFMTNDOEQwN0VGNEYxMTVDM0I1RTAxNgorOjEwMTBDMDAwREM2MEUwQzcwRjgxRkUyMkFDN0YyOTVGQkZDNjRGMTRGMgorOjEwMTBEMDAwRUUyNUI4MkU5OUQ1OEJGNDQ1NTdERDc5RjI5MzQwOTdEQworOjEwMTBFMDAwQUQyOTRBM0Q3RTE3RDEzNUYzQjJCRThCNThGMTUzM0YzRgorOjEwMTBGMDAwRDZFRUQ5N0VEMjMwOEM0NEE4RkYzQUM0RjlDNDc4RkYyQQorOjEwMTEwMDAwOTcxMzk5N0Q3NzBCRTc4RkFCOUVFQzNFNzAxREYwRjU0MgorOjEwMTExMDAwMEE4QjBCRjBGQUIzM0NERjY2NTg0RjhGREZGNTc3OTZGQQorOjEwMTEyMDAwMjM1M0M0MDU4OEJGNjAzOTVEM0I3RUM3ODFDNDQwN0JDMworOjEwMTEzMDAwRkEyODMzRTI0RjJERTFERkY5Qjg5QkI4OUE2M0YxMjkyMQorOjEwMTE0MDAwNkNEQjU3MDhDODY3MEU2NzdCMTUxOENERTZCQzg2QTMxNQorOjEwMTE1MDAwQjNFMUI5NjIxMUNGRjU4NzlENzNFOUI3OEUyQ0M0Q0Y4NworOjEwMTE2MDAwOUZCNUMwRjkzMzZBQ0IwNzU3ODlEQTc3Qjc4ODQwNjVFRQorOjEwMTE3MDAwNUJCMEQ0Q0NFREZCQ0Y5RTk0RTlBRkNGRjJGQUNDOTMyOQorOjEwMTE4MDAwQUY1QTM2NDIxRENCNTExMzZCQkZGREFBNjVDNDRBRkE1NAorOjEwMTE5MDAwOUVEMDA4QjY4RUI2MDcwNTRGOTMwNEQ3QTdENzQzRkU1NworOjEwMTFBMDAwQjI2RUI5RTAyOUEzRURFQUMwM0Q1RDEwRTI1QUYyODhDMworOjEwMTFCMDAwOEQ4MEFCRjBGMTBGOTc0RTg1RkQ5QzczMTNGQ0JFRUM1OAorOjEwMTFDMDAwREMwNEM2Mzc0QTkwRjg0REM5QkRGRUVEMDc0OUM0QUZFRgorOjEwMTFEMDAwRTU0QkUxMUM5RDk3RUI5OTg3RTAxQzFCNURGN0I1RUE5OQorOjEwMTFFMDAwQjdENEVGNDBERTk0RkFCRDEwNTcxQkU0NjFGOUNDRThBOAorOjEwMTFGMDAwQTBEOUUzMjdFMEVGQjJGQUM4OTYxRjA4RTQyMTk4NDc4OAorOjEwMTIwMDAwNUNEQjBDRkVCOThERDdFQjQ2Q0IzNUU4M0YwRUEyRjQ4NAorOjEwMTIxMDAwMjk4MTA2MEQ5OTc1RTdEOEVBODg4MkY0MUI1NzQ2Mzk2QgorOjEwMTIyMDAwMjMxREFFN0FGRjM4RUIxMkU3RDlFNkRFMzQzODE2RjgyNAorOjEwMTIzMDAwRTUyRjEzRjVFNzMyRkE4QUFGNkI1N0Y4REUwREUwQTcxQQorOjEwMTI0MDAwODNFNzU3Qjc1MUJCMURGNkZCMzJCNURCRTFCQTlEREEzOAorOjEwMTI1MDAwRUQ3MDFGQkU1MzBENTczOENGMDZENzVERDQ2RTg3MkI2OAorOjEwMTI2MDAwOUM2NzgzMkI5QzY3ODMyQjlDNjc4M0U3RTAzQzFCNUMxQworOjEwMTI3MDAwRTEzQzFCOUUzRjJDNTQwMzAzMDEzRUM1RDEwNEYyNDNDNQorOjEwMTI4MDAwMkQxNjQ2Njc2QTkyMTVGRDhENDAyMUMxRkM3RDMwQzkzRgorOjEwMTI5MDAwQkE2OTI1QzRFQjA0ODYyNzM1OTZGNTA3NjM5NDlCQjE5QworOjEwMTJBMDAwOUQzQzk2RTU3N0NEOUUxMTcwOEU3MDk1MzA1NjAyRkI3MQorOjEwMTJCMDAwQTlENUFBNjBGREYyODk5NTY2MDJGNUNCQTE2OUMyRkJBQQorOjEwMTJDMDAwOTA3NzIxODJDOTIzNTJGQjY2Qzc1N0I3MjFGQzE3Q0IwMQorOjEwMTJEMDAwQzQwNDc1RTkyQkUxQkJBMTIwOEYzRjI1OUI1ODdDMkVEMAorOjEwMTJFMDAwMjhDMkY3RTU5QTYzMDhBN0M3M0FCRjRDNjVGNjY5NDE3QgorOjEwMTJGMDAwNkIxRjUyQzA5RjlEMDQzMTAxQTRERjAzMEFGNDJGNUVDRgorOjEwMTMwMDAwMkVGMDc2RDAyRjhGODJCQTA2REVBRjFFN0EwQUZDRDc3NworOjEwMTMxMDAwNTU4Njc2QTc0OTdCM0VFNTI5OThFRjY4Q0ZGQjQ2NTQ3MgorOjEwMTMyMDAwQ0I0MEVGMjk1QTdGRTI0MjY4OUY4QUQyOUVGRjdDMjEwMAorOjEwMTMzMDAwOUVFN0QyRDZBMzdFOEFGMzg1OTJCNEYxQTlENUQwMUZCOQorOjEwMTM0MDAwRUFBOTkzNUI4MkVCMEQwRDY2RTNGRjZENTdFN0QzRTBFRgorOjEwMTM1MDAwMkZGRkJERTc2QjU2NTQ4Q0UzQUJCMzA4NzkyNkY2NjJEQQorOjEwMTM2MDAwRkFGQTc4OTJBODhGODdDQTgyMkUxRUFBQzVERjREOEUwMAorOjEwMTM3MDAwMDU0M0YxRkNEOTAzMzY5NDhCQTc5MjA4RkEyMTdEQzU2OQorOjEwMTM4MDAwNDVDM0UyRjUxODE3RkRENTI0QUQ5RUQ5MTBGRjI0MEFGOAorOjEwMTM5MDAwODE3OUFCMjAxRUU4QzFCNzJBRTFFN0QzODhEMDQwQTAwRAorOjEwMTNBMDAwNEVERDc3MjY0NjAyM0JEMjlBMTgxNkJGRTMzMkEwQkYyNQorOjEwMTNCMDAwNzg2MTczMDM4QjBGMDYxNTBCNTE5MzdCRUJGQUFEMDUyOAorOjEwMTNDMDAwQkNBRTlGQzcwQkI1M0EwNjZCQzFBM0JBQkM4MTMxNUVGOAorOjEwMTNEMDAwNDhDNDY1OTg4RkY2MkREMkM3MDMyQjk0MkI4QjE3MkVGQworOjEwMTNFMDAwMjAwMUNCNTBBMDdGNTlGMDgwRkZCRUMwQTU3QzMwMDQwNworOjEwMTNGMDAwRURGREFCRDlGNzE5QTVENzMxNkVBQTlEMUI4MzNCRjA0NAorOjEwMTQwMDAwRERBOTJBQkVFN0I2NUI0RkJDM0Y4NDhFRjNBRjhDOTI1QQorOjEwMTQxMDAwRTAzMEZFRkM2NUM1Rjg3QzFFREQyMUM0Qjc2QTBBRjEyOAorOjEwMTQyMDAwRjAyREM5RkVENEYzQkEwNEYyRDQ2REYyMzAzM0NENzc4NworOjEwMTQzMDAwNkYwMkQ4MEI4QjYyMzE2RjcyRDM1REU5MUZDMDNDOEI5QQorOjEwMTQ0MDAwNTUwNzNFNDdFRDRBNEVFRjJGNkQwNDdBMTIyMTcwMTk3MQorOjEwMTQ1MDAwRDZDRTFBQTFEMTVCRDU0NkUwQUY0OTcxNUEzQkU2MjlGOQorOjEwMTQ2MDAwRTA4NzYyQUJGNkJDMTdEQkYzMTQ4REZGQUU3OTBBRjRBQworOjEwMTQ3MDAwQzdEMTEyOERCRTBGNTRDM0YzQjM1MzdCRTY0M0ZBOUUxQworOjEwMTQ4MDAwRTREMERBRDMxNzQyN0Y2QkNGN0M0QjM2QzI3Q0VGQzBGRgorOjEwMTQ5MDAwOTc4REIwM0RGNTI5RTBFN0UyMTk1QzVGQTkxRjZEODRFNworOjEwMTRBMDAwRjk1QjE2NjhGMzRGRjBDMzc3MUVFNzlCQjRFN0EzRkMyNAorOjEwMTRCMDAwQjA3RTg1Njg2RDJBQ0Y2OEZCM0RDRUZGQzcwQTVFQTg2NworOjEwMTRDMDAwMDY3RUI5QjFBN0ZGMDVEQ0VGMDJERTNFNUU1MEY3MTRFMQorOjEwMTREMDAwRjRGRkNCRUZFRjdGRjg3REM2RjY0RDI0Mzg2NTY4NTZGNAorOjEwMTRFMDAwMkY1RjE4RTVENTZGOEI5ODFDRjFENkZGMUFDODk1MkM4NQorOjEwMTRGMDAwNjg3ODFBQkZFRjA2RjEwMDk2Q0Y0QTk4RTUwMzc5NjE0NAorOjEwMTUwMDAwMTczRDk0MzM4OENGRURDMjM4QTc3MTlFOUIwQjU5NUM3MQorOjEwMTUxMDAwRkQ0QzgxM0UyRkQ2NjJDODhCRjk3ODdFQUFBRjc5OEVCQQorOjEwMTUyMDAwMTRCMTc5NUE0QjIyRkJCMTE5RDkyNTdGMkE4MEZBMDFDRgorOjEwMTUzMDAwNzI1Njg0Rjk1QzE0NjBGMDdEQjI5NjRDRTVGRkMzN0Q3MQorOjEwMTU0MDAwQ0FCQUY4REQ0RDJBQjIzQzcwOUZGQUM1MkFEODk5RDNBMQorOjEwMTU1MDAwMjkzODIxMEZEQjU0RjQzOEM2RTk0Mzc5MTZEREY3NDAwQQorOjEwMTU2MDAwQjQzQ0U3M0FBQjhDRjJGMTYzNUVENzMxQkY0NDlFNzI3NAorOjEwMTU3MDAwMEZGMEZGMzA5MTZDQzIzQTBGMjdFNjFCQ0NDM0FENEY4MgorOjEwMTU4MDAwQTM1Q0U3Nzk0RkVEN0IxQ0QzMkY3MTJFQzI3ODJFQTU3QgorOjEwMTU5MDAwOUJDM0ZGNUM0MTlCMDVFNEIzNEFENDI5QTU1OTI4QUZGRQorOjEwMTVBMDAwODM1MDZGNkM3MkFDQzUzQ0IwQURDODgyNzkwNDJERkYxRQorOjEwMTVCMDAwQUNGMEVGN0Y2Qjc5REY0OTE3MDYzMkZEOUVBNkM1NzU0QgorOjEwMTVDMDAwRkJDRkZGMkFDQjc3RkFEMDNFNjgxNzg5NDlCODM4MUY3RQorOjEwMTVEMDAwQkNEOEE3MjY0MTNEQ0JGNEQyMTgzQzJGNTA1NUZCMDY3MgorOjEwMTVFMDAwQ0U3Rjc4MDRDMUVGMDQ0N0NGNkFDMEYzNDE2NjZBMUYxQgorOjEwMTVGMDAwQ0EwMDE3OUUyRkQ2RUE2MzQ2NUVCODFEQ0Y4REQ2NjkwNgorOjEwMTYwMDAwRjVFNjYyRjk0MUIwNTM2RDhGNTEzRjBCRDk5N0MxNDU1MworOjEwMTYxMDAwQ0IxN0NGMzBDOEZCQzUwNTk1QTg2NzA5QjVFMzQ3QzcwOQorOjEwMTYyMDAwQzI3QkZBM0ZGN0ZDRjBBNDU4QTQ5QjhGREE1OTNEN0ZBOAorOjEwMTYzMDAwNjEyMUNGOTdGMDNDRjBGRDE2MTZFNzZCNEREMUQzRDU2NQorOjEwMTY0MDAwQ0YyNzMxN0Y2NUZEMjQ0Njc3QkI4QTdFNUU4NUY2MzNFMgorOjEwMTY1MDAwMzE3OTIwMkY0NjlFNjBERjg1ODMxODBCOUVCNzMyN0UzRQorOjEwMTY2MDAwOEYzOTZEMEVEQTc1NEY4Q0E0NUJBNEI2QjY3OUY5N0IxMQorOjEwMTY3MDAwMTg1NzE0RDZCM0U3M0UxRDRGMUFDMDZGMzE5QjU5OUJDNAorOjEwMTY4MDAwNUU1NEM4RkZFNzdBOTU5OTg1NTA5N0I1RkMwMzFDREYzNworOjEwMTY5MDAwQUNCMjdBRUZCRUUyMzdENTg1OUFCRTY3RjE5QkY5RUUyMAorOjEwMTZBMDAwN0Q1RDcwQUVFQzZGOEVFMzE4Q0VCREZBMjQ1NjVGRDIyRQorOjEwMTZCMDAwNTYyMDY5Rjk0NkZDMkUyMTI1NUMwQkQ4OEJBOUY5QkU3MgorOjEwMTZDMDAwRkE0MjhDNkY2RDk2NjAxRDlBQkNEOTU3NzQxQkNBMjc1RAorOjEwMTZEMDAwMjI0N0NFNEI2QjdDREY2MkM4NEJGQkRDRUNGOTIzQUZCRgorOjEwMTZFMDAwREQ1MzBEN0YxN0EyQUYzQ0M0QjNDNTNENzk4M0U1Rjg0OAorOjEwMTZGMDAwRkU3ODJENkYyMERGMDNFRDVFM0Q0QTM3RTRENUU5RDE1QQorOjEwMTcwMDAwODVGNUZGMEJGNDY4OEZEREFFNzZBMTFERkI3NTVCM0ZBMQorOjEwMTcxMDAwQTVBQjE3MTBBRjY1MkM3RUY2NzU1QkJGM0M1MTdFMTNGMQorOjEwMTcyMDAwRjhGOUJGRkIzREU5MTM3RDVEMDBBN0ZCMDRCOUNBQzkwOQorOjEwMTczMDAwOTI3QjFFNDE5RkU3RkJBMEIwOUYzQ0RGQTVFMjBGRkYxRAorOjEwMTc0MDAwMTc2RkU4M0ZERTYwMkZEMkU3RTFGRjU5RTIwRDBFMzg1OAorOjEwMTc1MDAwNDMzNTE4RjkyOEIxMDhGOEE4ODBGMUQxQkZCQURDQTM0NQorOjEwMTc2MDAwRkJDRDJGODI3Q0JBQjBEOTFGOURGQUY3RjdGNzUzRjM2MAorOjEwMTc3MDAwOTVCMjIyRDQ4MzhBNjkxN0E1OUZGQjhBRURDQzlFMDk3NgorOjEwMTc4MDAwMzBGOEY2QzYzM0U4RkFCREJBNzhDNjUzRjVGRjBERjE2NgorOjEwMTc5MDAwMENCQURGMkFDNDZGMjk3RkZGRDcxRjdGNzcyMDdDNjVCMworOjEwMTdBMDAwNjY0RkZDMEJEMkU3MDNCOEJGQ0Q2QzdGRkY4MEY3NkZBRAorOjEwMTdCMDAwNDQ3QUY5MDVBMzk3NUVGODMwM0IyOTBDM0UwQkVCRkYwQQorOjEwMTdDMDAwMzFGMDc5MUVFMUIzOERBREVGNkI4MENGRDcxMTlFMUU0NgorOjEwMTdEMDAwQjZERTRCRjlENzI3MEEwNDREMkUxRkMyN0Q2NjMxM0E3QgorOjEwMTdFMDAwMzhDNUVENkJFQTc3NEYxRTJBRjVGQURENEZFNUM4NkY3NQorOjEwMTdGMDAwMTUzMTNCRjc2ODkxQUVGRTUzN0UxQkVFRjdFMzE3MUZFMgorOjEwMTgwMDAwODNGRTA4N0U3MTA4RUU3RkRERkNFMkQ4NDI5NjQ3RUM0RAorOjEwMTgxMDAwQ0RCQkY4RDk3NzZGNDlENUY1REZBMEVGRjk4MEMyMUJCMgorOjEwMTgyMDAwRTI2RDZEQ0I0NUI0MkZDRTI3MTJGQzFFODA2NjZGODQwRgorOjEwMTgzMDAwNjI1OUZEREVDNUU3QzE0QTA5OUM0N0I0RTVCMUVGOENBQQorOjEwMTg0MDAwNjhERjA3MzA4QjBCMDYwNkE0OEJFMTdBNzA4MDYyODUxNworOjEwMTg1MDAwM0FBRjI1NzI3QTBCOUM2RjlEQkNGNjczM0M3NzY1OTUwOQorOjEwMTg2MDAwNkRGODc3MzU0N0JBM0Q5NkJCQzA4RkE2N0VFRUI1MTBCMgorOjEwMTg3MDAwNEZBRDc3RTEzOTNBRUQ1Qzk5NzZGRTYzNDk2MERFM0UyMworOjEwMTg4MDAwMzg2N0RCNDZFOTIxODFCRUE3QTJENDcyMzI3Q0ZGNDZDRAorOjEwMTg5MDAwN0JDMzZDNjgxQkZGQUU2OUMyMjQ3RERFODNDMjFGRUQ3MworOjEwMThBMDAwOUZGM0VCNTk3RDVDOUI5OUVDODJGQThGM0E1NUY0MzdBNAorOjEwMThCMDAwRDFGNjMzNkIwNUZDMUVFNzIyMEEyN0YwRjcyN0I3Mjc3RQorOjEwMThDMDAwNjMzREI5MzU5MTdERUY0Q0ZCQkJBNzk0MEVEQUYzQzBCNQorOjEwMThEMDAwRkUzQjJBMTJGQzNCNzZGQzNDOTlGNjlERUZBODY5NjcxQgorOjEwMThFMDAwRjE3QjVCQTdFOEZFRTFGQjNEREE3NzI2NjY3MDNBRDEzMworOjEwMThGMDAwRTAxOUQ1MTQ4NzcwMzk0RkUxNDIwMDJFRkNCQ0NERjRCRAorOjEwMTkwMDAwRTUyQzFGRENCMjYwNzExMEM4QkJCQUUwRjM1NTkxRUE1OAorOjEwMTkxMDAwNTJFNkI4RjVERjRCMzdDNjMzOENERjFCMzcxM0RGNDA5OQorOjEwMTkyMDAwMzg1NzU3NTE1MEFDODJCRDZBRTNGNTlBRDE0NEM2RUY5RgorOjEwMTkzMDAwNUE5QzVBRkI2M0Y2NUQ4QjUyOEJFRTNCMjJDNkY3NDZGMAorOjEwMTk0MDAwMUJFOEQ0NjY4ODNCMThFOUQ0ODg5NzcyMDM1RTlFMzEwMQorOjEwMTk1MDAwQjNFRjBDQjY3NDhBMUU5NURFNkU3OTY0NTEyQjlDQ0I2NgorOjEwMTk2MDAwNTcxRjMxQjFCQTc5MjJFMzc3OUY1QUE4QzU4QkU3Q0ZDOQorOjEwMTk3MDAwRTk2MjIxNUUzRjk3QzM1M0MzMEIyMTBEMTZFMEI3MDUwMworOjEwMTk4MDAwREEzOTc0NTNDMzZBMzg0RjNBOEY5RjQzQkY5MTZDQzY5QworOjEwMTk5MDAwNzMwNjM3ODEwNTQxREZCQjEwNDJFNDIyN0M1NzQ2QjIxMworOjEwMTlBMDAwMzJFN0MwNDU2MDFENzU1NUVDM0IxOTI2RDgwM0U0MDlBNAorOjEwMTlCMDAwMUUzMTIxQkZCNkI4NzdFMURGRkQwQTBDQjNDNDlFNEVERAorOjEwMTlDMDAwNjNGRTQ0MjQ3QkI2MjdBRTQwMjE3MTNBMkM4RUZGN0YwNAorOjEwMTlEMDAwRjFBQkJGMkQ3RTM1QjE3MDEwQUI5Qjg4MEFCOEYyOTI4NworOjEwMTlFMDAwRDlGNzI2QTA5RTY5NjJBMUM0Q0UyNzU4OTQxMTc4REU0QgorOjEwMTlGMDAwNjFDMzI3MkFEMDgxNzZERTgxRkVBQzE4QTJGRjZFQzJCOQorOjEwMUEwMDAwQzY0OUZERjg3RjI1ODU4NEQ1NDcyNzg3OTI0MEFFN0Q1RQorOjEwMUExMDAwRDA0NzVERTVFMUUyOUVCQUNBRTcyNjYxRkU5RERBQkZFNgorOjEwMUEyMDAwNTkyMEY3OThGRDNCMjNEN0Y3QjM0OTY4MTdCMzczQ0UxNgorOjEwMUEzMDAwNUExQ0U5MzNBRkYyNEIxODVGMDg3RjNGMjcwQkNGRTcwMworOjEwMUE0MDAwRjhFMUZDNEU4NTUzRDgyQjQ4QkRFRjI3QzYzQUY2RkY4OAorOjEwMUE1MDAwQTU3OUFCN0JCOERGMTY4QzIyRjgxREE0NjAzMkE5N0E3OQorOjEwMUE2MDAwM0UwMjNFOUUyOTYxNzY0NDMwM0QzMkJFQjQ3RTZBNjdCNgorOjEwMUE3MDAwMUM5RkM0RkRBMTAxOEMyOENFNThGNUYxODE5MzgwOUY1NQorOjEwMUE4MDAwM0VGRjBFMURDN0UzRTgyOUYyNDc4ODc3REU3RTM4NTcxMAorOjEwMUE5MDAwMjEzMkQ0RjcyQUJFRjcwMUFGQTc1NTUxMDJCRDQyMDI0OQorOjEwMUFBMDAwMEE3RUNGNkZGQUY3NDU1N0E0QkZBN0Y4Q0Y3RUZEMkY2OAorOjEwMUFCMDAwRTg3RkFFODQwMDgwMDAwMDAwMDAwMDAwMUY4QjA4MDA1QgorOjEwMUFDMDAwMDAwMDAwMDAwMDBCRUQ3RDBENzg1NEQ1QjVFODNFNzNBNQorOjEwMUFEMDAwQ0VGQzI0OTk4NDA5MDYxQzI0RTg0OTAwMUI2REMwRTE1MgorOjEwMUFFMDAwMjc5MDAwODEzMzkzODQyNDkwQzBGMEE3NDEyMjFFMDhFMAorOjEwMUFGMDAwRDBEQzVFQjQ0MTExNjM0QjlCMDM4MTEwMjIyMkJFOEI2QworOjEwMUIwMDAwQUZCQ0ZFRTgyNDE4NUFFRkIzN0RENENCNjc0NUQ0OEUyMgorOjEwMUIxMDAwMDEyRDVBRDRFMDg1MUEyQkE1NDExMEIxQ0Y3RThGNUVERQorOjEwMUIyMDAwRTVCNUNGRTdGQjdDNkJBRDdERjZDQzM5OTMwOTIwQzZEQworOjEwMUIzMDAwNUVGQUREM0I3RTdFODc3REY2REZEQTZCQUZGRkJERjZCQQorOjEwMUI0MDAwNDkyRDhCM0FBRkNENjI4QzY5NTJBMDEzMUVCNTNFRkQ3NAorOjEwMUI1MDAwRTQ1MDJDQjM5QjU5RTc0NDc4QTg4NzIzRjIyNEM2NTY1NworOjEwMUI2MDAwQjJEODRGNzU0MEI5ODZGRUM1NThEQjVEQTc3RTNGMTRERAorOjEwMUI3MDAwREE0NTM2QTZBODZDM0E2MzRCNTYwN0E5N0YxMUYzMzJCMworOjEwMUI4MDAwMTk5RTZERDM3MjE4MUJDMjU4QzFCOUMwNjExNUNBQkE2QgorOjEwMUI5MDAwREYxMTkwNjg5OEYwNzc4NzQxQkZGMDhBNENCNTBEQzY4OQorOjEwMUJBMDAwNTk1NjBDQUYwQTE4M0JFOTg0RTcxNEY4REY5OEI2NEM5NQorOjEwMUJCMDAwQ0I4N0ZFNThCRThFM0E2ODBDQ0E0QjA2NUJDQUQ5RDA5QQorOjEwMUJDMDAwRjQxODZGNUZBOEZEMzU2MjhDODJGMTk5RDlERjZDRkY0NAorOjEwMUJEMDAwQUVDNERCOUYwRjY2NDcwQzJGNjNCNzlCRjU1MEQ2QjFBMQorOjEwMUJFMDAwMkNGQTMzOTY5RTEzNTRBMDdGQkQyNENBRUQ5QTYyOURCMQorOjEwMUJGMDAwRUZEQTc2NkQxQTYzNjc5Q0Y2RjE2QkNERjE2NjY5QUUyQworOjEwMUMwMDAwNzYxQzJGMUM5QkRGRDVBRTQxRjk3NDAyRkM3NzMwNUU0OQorOjEwMUMxMDAwQkU1NTczNTBGQjk1QjFGNjBFNUFFRjU5NDk5NEM3RUE3OQorOjEwMUMyMDAwNTgzRUVFMTJGREYzOTc2OUIwREVFRDM5QkMzRTFDMUE0QQorOjEwMUMzMDAwMUIzMUIyQUYzRTc4QkVFQUYxQkYzMDNDRDM1NEEyQUIwOQorOjEwMUM0MDAwQzJGQTVGOTQ1QzBCRkZBQzZENjg5Nzc1MkZEMjU5RjhBMAorOjEwMUM1MDAwRjcwQ0U4RDE3ODQ0NTIzQkExNEYyMURCMkIzMzk5QzBEQworOjEwMUM2MDAwNzZDOTQwOTc1MzM0ODlCNUMxNUNFQjQyMTJGNTBGN0JCRQorOjEwMUM3MDAwMUQ3QzFFQTMyOEEyMDE5RDJEOTkyRUU4NzQ1OTA0RTcwRQorOjEwMUM4MDAwRUQ4RkVFRkVGNEQyOUFDNzBDRUIzQThEMzU0QjZENzBBQQorOjEwMUM5MDAwMUI2MzZENzAyRkVBODJGNjUwNUU3MkY3M0ZGODExQ0UyQgorOjEwMUNBMDAwMjVCOTYyN0QyNTExQTRCRjk2NENEMUVGQzM4QkNFN0JBNQorOjEwMUNCMDAwRUFBNTZBQTJGNzI1QjE3OUU2NTNGQjI1QTk2MkJDREI0OAorOjEwMUNDMDAwQTkxQ0M3RTc5RDc2N0MxQTM3MkVDM0Y5MDQ1Q0ExRDAwNgorOjEwMUNEMDAwOUQ4NENGQjAyRkIyMTlGOTNERUM2NzAxMDNGMDc5N0JGOQorOjEwMUNFMDAwRkQwNjU5Q0ZCN0YwOTE1MUE1MTIxRkY5NjNFNTg4OUQwNAorOjEwMUNGMDAwOEYwQTg4OEYwNjFBQUU5MTUzQzIzRkQ0NDBDRUIwQkMzMworOjEwMUQwMDAwQkQ2QTc4Q0M1N0IxNkU5MDkzQjg2RTQzQTI3NTBCM0EwQQorOjEwMUQxMDAwQUFGNTU5RThERDAzRUI1NjQ1MzlCMEFDREUzQjEwRjNDQworOjEwMUQyMDAwNzY5N0QxQkMxRjAxQkU1OTlDOUY5ODkxOUJDMDNGOTc0RAorOjEwMUQzMDAwMzc1RUIzNzdCOTBCRTE1RUE1NDk1QTA0REE3RjhFQkZFRgorOjEwMUQ0MDAwMTlGMUU3RTk2OTlDREUwMTlGMkY2QkYwNjQ4NTgwQ0Y3NAorOjEwMUQ1MDAwNzQ3Q0NGNDg4RUVGOUIxMDdFOTVGMEFDRUE4RTJFODA3RgorOjEwMUQ2MDAwQ0JBNTc5NTgxQkUwNjBERUU0RjA2RkE4M0REQkUxNDdDRQorOjEwMUQ3MDAwRkMwMzAwRDRCRUU1Mjg1MzkwQ0Y4MEI3MDI4RUE5NTA1MworOjEwMUQ4MDAwNzZCMjlBQkQ0OUU2RkQ2OUM4NDFGMzM2MzM1NkIxMTdCQworOjEwMUQ5MDAwRTA5QkI4RDFCNzJBRUM4REQ3RTc5NjcxQjg1NDdDQzJENgorOjEwMURBMDAwQjhDN0QzN0JFRjE4MDJGM0Y3MzJFNkRCMDhFMzM3MUI0MworOjEwMURCMDAwQzBCQ0YwN0NCRjVFOEE0OEIwRTZGN0IzQzM3MzhBQTBBQworOjEwMURDMDAwREM5REUzMDg2Qzg0RTlCQjFGNzA4RjU4MEJFRDdCNzJDMAorOjEwMUREMDAwQkMwMTg0QUUyNzczNDdCQTBGQzY3RjNGMjA5QkY4QkE3OQorOjEwMURFMDAwRTczREU0RUJFM0U5MzE3RTMyNTBCRjc0OUJGODNEQTc1OQorOjEwMURGMDAwODUzQTkwOEZERjUxNzlGOTY3QTU2QkRGNDNGRTYyNzlGMQorOjEwMUUwMDAwQ0NDNzg2MDIxRUIwMDdGMEFBMjM2RDlBQzcwREYzQkE5RAorOjEwMUUxMDAwNjY4MjM4QzFCRTNFQTZCQkEwREU4REY1QjBDNDc5OEYwOAorOjEwMUUyMDAwRUU3RTc0MDE4RTYxRDRCQzMyQ0FBMjQ3NUQ0QzMxN0ExOQorOjEwMUUzMDAwM0QzNEFGRjIzOTU3OTBDQzM5MjkzRUFFNkI2N0YzQ0JDNgorOjEwMUU0MDAwQ0RBODhGRkQzMjBCMjE2RkY5Nzk3QjNGRUJEREYwQjkyNworOjEwMUU1MDAwMDNDNzg3NzIxRTQzMTI3Q0U5NzM1OEJGNjQ5NkYxRjc3QgorOjEwMUU2MDAwMzkyQ0QxQ0JDMjE1MzkwODU3MUUwQkEwQkU5REE3M0JGQworOjEwMUU3MDAwQ0ZDNEVBRjk2MzlCMzJDOTg0MTNFMTkxRDc1NzE0QzFFNworOjEwMUU4MDAwMzNCNURFREU2RTc2MUU5NDNERjFGMkFDOUQ3NTIxQzQ1NQorOjEwMUU5MDAwRkIyQzBEQkE4RDYzRUNDOENFQkE2ODFEQzA3OUE0RDBGNgorOjEwMUVBMDAwRUQ5MzAwRDNBRTZDQzVENjdFMzZEQkJCMDlGMTBFNzY2MgorOjEwMUVCMDAwQzUyMTE5RjBCMkQ0OUNBRkQ5MzdFRkY3MENGQUFEQ0FFRgorOjEwMUVDMDAwODMxMkFDRkZGODc3ODJFOTA1NTlDODZGNzJDMDYxQjYxQQorOjEwMUVEMDAwNzEwODdDMzA2QUU3NzQ3MDM5MUQ5MEEwN0RGMzczNjJERAorOjEwMUVFMDAwREZCNDBFRTQwMzM5NERCMjk1ODMyRTUxM0ZBOTAzRjlCNworOjEwMUVGMDAwRTI3ODRDQUU4RTU5OEVFNTQ1MjMwNURGMENFRDQwM0Q3MgorOjEwMUYwMDAwMzkyMzREOTQwNzJENDdCRUVENTU5Q0E2M0NCQkJFMDMxRgorOjEwMUYxMDAwRTU1OUFCMThDRkQ4NDU3Q0ZEMzYxM0Y1NjkxRDQ4NDcwOAorOjEwMUYyMDAwRTE5OEZDOUJEQjhFRTU1QjdEMjYzQ0M2MEY0OTFFMzZBNworOjEwMUYzMDAwNkI1QzlGNEM3REU5RDU1RUUzMEFEQTAzN0YxNjA1OTE2MQorOjEwMUY0MDAwMEZDMzVDREUyNUQ2NEYzOTE2NjlDRTMwRURCQUQxNkFBMworOjEwMUY1MDAwNUY3RURCMTY5NDg5OEZDMkRBOUY2NURDQkZEMjA2QzAzNAorOjEwMUY2MDAwMTlFQzVGNDk4RDc0QUMwMEU5NTM2MTIzOTBFRjVCOUFFMworOjEwMUY3MDAwODBGNzQ3NDNGOTYwOEE0QjRENDdCOUVFOUJBOTI1RTFBRAorOjEwMUY4MDAwREY1NzgzMEUxQUFGMkFFOENEM0FGQjc1NjgzRjgxNERDMworOjEwMUY5MDAwNDBCQTZCNjk2QTE0RkQwRERDNUY3RDk0MkI5MjkyRDM3RAorOjEwMUZBMDAwRkYzOEE3NEFCODFDRTg5NjdDMEJCOTdFOTYxOUVBRTc3OQorOjEwMUZCMDAwRTAyMzIzQkQ0NTJDREVFRUM1MTIyRTBGNUEyNjY4OEI3QQorOjEwMUZDMDAwODNGMDlDMDNFMjk3QzExRTZFOThGRTgzNzAwOEU2Mzk4OQorOjEwMUZEMDAwNTNFNDBDQjg4OUNGQjRCNzkwQ0ZFNjlCMzRGNEIwNEI0MAorOjEwMUZFMDAwNjMwRkEwREMyODcyRkIzNkEyRUM5NkYzOUQ4RDUwNTY1MQorOjEwMUZGMDAwODYwM0JGNjJCOTgyRDNCNzBFRkY3RDlFOEJFMzJBNzE0MQorOjEwMjAwMDAwRkEwNzM4RTYzNURBRjk0MTYxMTZGQTg2RkFENUMxNzQ2RAorOjEwMjAxMDAwQkVGRTlCRDlDREI4RkUwNzlEQkVBNTI4Qzc1QTczN0RDRAorOjEwMjAyMDAwNzc1QkU1RDlGRTEyMkVDNzlFMzZEN0RCMzVGRDlGNkI1OQorOjEwMjAzMDAwMTAzRjFGMzM0NzAwRTVDNzlFRDQzMEM5QjM1MzE5OENGNgorOjEwMjA0MDAwNzVBMENFRDc5OEVBMUI4QTdDQ0RENzIxRTVERENBQjAzMgorOjEwMjA1MDAwRkQ4RjZFODAyNTBDMDMzODFBREZFRDJFOUQwMEVGNzc4MworOjEwMjA2MDAwRjE3RUU3QzZCMjA2ODZFRjE1NUU4Njg3NjE4Q0MzNzY4MQorOjEwMjA3MDAwMjdBOURERDY2MDJFQ0RDRjFFMEI3ODNDNDhGQkQwMUNBNworOjEwMjA4MDAwRjdEQkNCRjYzQUYxRTk0ODdCN0U4NDlFNjQ3RkM0OTMwQworOjEwMjA5MDAwQUQ3NjdFMTRDMzAzRjIxMjY4NDI1Q0I3QzQ3NEM3RTcxRQorOjEwMjBBMDAwQjg3RTUzRkUwMzlENkUyNzNBQURFMTdBNjRDQUI5RjM1OAorOjEwMjBCMDAwMzY3QTJCMERBQUQ0MkU5MUVFQTBERkEzRDQ2RkExRTgxRgorOjEwMjBDMDAwQzc5Q0JBQzU1RURGMTY4QzQ0MzYyOEE0OEY3RTQ4RURDNworOjEwMjBEMDAwQkNBMDhGQjI2Q0ZBRThDN0Y0M0U0MTFGNERBQUQ0MUVEMworOjEwMjBFMDAwMEYxNkM0Q0JEMDdGMzc5NUZCRjZFRjBDMjZEMTY3RDAwNworOjEwMjBGMDAwRkVBNzM0QUU0NzI3N0NDRDlCQUMzRDg5RTU4OUQ3MEI0NQorOjEwMjEwMDAwNzkwMjBEMEI0MTdFNUMyM0NBRTk3N0Q2NEZCM0NBOUY5MworOjEwMjExMDAwQzJDNzUxREUyQ0Q2MjVCM0ZFRUI4RjIzN0YxRjBGMDlEQworOjEwMjEyMDAwNzk3MzY0MjlDQTkzOTgzQzYyMzU4RkRCRTQxMTlCNzMwMQorOjEwMjEzMDAwMjdENkM3RTQwRjVCRjUxODhFMTc5MzNGNkNFNkUzMjhBQworOjEwMjE0MDAwM0Y4MkYzODQ1RTNCRjMxODhFREY1MjJCQzZCRjI1MTIwRAorOjEwMjE1MDAwNDRCQkM0MjFGQUE3NDQ5MDBGNzUyNkNBNzYzQkYyNzc5OAorOjEwMjE2MDAwRDNGRTY1QTlENTZGNjJFQzVGMUVEMzJDN0VDNjg5Njk0QworOjEwMjE3MDAwNzU4RjkzMUUzNDg2QjBEMzgyMEY3MkZCRjJCQjkwMDMyRgorOjEwMjE4MDAwODI3RTg0N0Q3OEVBRTA5M0JBMDFFRDU2NTQ2ODZGNTlGNworOjEwMjE5MDAwRjcyNTY2NjdGNjcyQkIyNzZFNUY5RUU3RjZGN0MwREIzMgorOjEwMjFBMDAwOEZBNzY5RkU3QzRFNkY1RkMxRjhGRkNCM0FCRUIwQTcyOAorOjEwMjFCMDAwRTBGREJGNTlERjVGNkRGRTFDQzBFNzBBMjFCRDRGRTRBMworOjEwMjFDMDAwRjA1RDQxRkY4QzEwQUUyRkMwRjVENERGMDBERTZDOUFCRAorOjEwMjFEMDAwQ0ZGNDAzQUU0MjdDMDY0MjQzQUU2QUY4NEEwOUJFMkFGNworOjEwMjFFMDAwQkVERjJGNkEzMTNBMkQ0RjRFMDc5NzRERkY3MzY5NUY1RgorOjEwMjFGMDAwNEFGOUJBMkRFM0NFQTdGNzU1ODIyRkQ0QTRGRTNBQjRGQworOjEwMjIwMDAwQkJDRERFMkVENkZGNzY4MkNCMUNGNzIyRkRFRkI0QjcxNgorOjEwMjIxMDAwOEJGNTVGNkVBNUNGMDFFMEYzRDVENkZERkQwQUU0NDg0RQorOjEwMjIyMDAwMjM4RDNGOEE4RkJGMzI4RUM3RUY1OERGRkY2N0RDRUMwQworOjEwMjIzMDAwOTI3NERFNEVGQkRFQzBFOUU5MzJFQ0VEOUY2MEZCQUQ0RgorOjEwMjI0MDAwRDI1RTNEODNFMjQ0ODZDMEZCM0YyM0RFRTE3REFGMEJERgorOjEwMjI1MDAwREVCRjY1RUVDNzkzNDVFMTlGRTE3QjJDRkFDNzVCRkNDRgorOjEwMjI2MDAwMTM2MzA5QUQyRkVFOUZDMDQwRjk1NjdEQUZCNzVCRjUwNAorOjEwMjI3MDAwRkRBMTUwNUQzQkMyMkI5N0YwRjZGQkJCREU1Qzg2RUIwRAorOjEwMjI4MDAwNEYyQzgzNUQ3MjgwRDY5MzA1NzZDOTE4QjI0QjlFQzdEQQorOjEwMjI5MDAwRjJBNUM2MDVGOEJCQThERkIzOUM2RTkyRDRCRjQyNzQwQQorOjEwMjJBMDAwRjUxNEFGNkY3NTcxM0JGNkVEREE4RkM5OEVEM0Q2QThGMgorOjEwMjJCMDAwMEVCNEUzODQ1RTNGMUFFMjdFMDBEODIzMTUxMTZGNUZFRgorOjEwMjJDMDAwQkJGMTY4NDgxMjc4M0I0QUUzRUVFNUY4M0YxNjk2RDMzNworOjEwMjJEMDAwRDFERThDRDkyREVDNTVGMjgzRTI3NkQ1NURFREI4OEY0OQorOjEwMjJFMDAwNzFCQkFBODFDQUQzQ0Q3RDNFMTNCQTc3OTkwOUVGMDk5NAorOjEwMjJGMDAwOEUwNzczM0Q5NzZFRkYxRUMxRTFFN0VEOTNENDlGQTU1NgorOjEwMjMwMDAwRjFCMjM5OUNDQzdCRjgwQ0ZBQUQ0NEFGRkMzN0NBMDE3MgorOjEwMjMxMDAwRTU1NTY2MjFFODVDNTQ5QzA1NzY0QkQ3NEU0OTQ1MzIxRAorOjEwMjMyMDAwNTlCOTRCRUNGM0ZBNzY5QkRGNjhGMkUxNjI5MzhFOTUzNAorOjEwMjMzMDAwOTJFNjY1MTg1RjU4RkM4OUUwRkY0MzdDRkQzMTNGQjVBQworOjEwMjM0MDAwOTlFMDdGQzc4QzRGM0M4Q0VEMzk3QzlGMTJGQzJBODcyQgorOjEwMjM1MDAwRUYyQjE4REY1NTQyNzYxOUM3NEYwRDMzOUM2ODk3ODlDQworOjEwMjM2MDAwRjM4MkM0RkRDRDI4NzE4OEZENEQyRjIxM0I5OUMzNTVDMworOjEwMjM3MDAwQTM0QjY0QkY4NzU3OUM3MjIyQkQyRjNEQzZCNDY0RjQ0MworOjEwMjM4MDAwMzFBNEM0MjVFMjRGNDNBOEJGRDdGNDZGMDMzQzJFOTQ3OQorOjEwMjM5MDAwRDg3RTc4NDkyQzVFMzU5Q0UwRjRGMUY5MzYxNDg1NDdGNworOjEwMjNBMDAwNjBGRjY5RkFEMTkyQTE3QzZCM0M2ODhGODY0QkE1NDg4RgorOjEwMjNCMDAwNUIwRUZBMzdERUIyNTIyOENGNzNCMDVFRjJGQjE4REI0OQorOjEwMjNDMDAwOEM3MTVGRjdGMzBBNkIwQjUwNkI1NUIxQzQ3NTgwNEI4MgorOjEwMjNEMDAwN0Y4QjdFRTQyMjczOUZFN0IxNTg3Q0M1ODFGMTFBNEI1NQorOjEwMjNFMDAwRkM4NkZDNDA3N0M5RkQ3OTNCNTU4QUJCNTBEQ0M2RTVDRAorOjEwMjNGMDAwOTdDOUFGMDgzRUI0ODJFMjIzQTk4NTZFOUYxQkU3OTE3RgorOjEwMjQwMDAwQjNDOUNGNzVGREQwOEMxNzJERTRGRUE1MDNGRTQzM0I2OQorOjEwMjQxMDAwM0FCNTkxOTFGRjM2Njc5QjE0NTFBMURFQUREOUUzMkZGOAorOjEwMjQyMDAwNzVFQkNGMzc5MzdGQjc4MkY5MzRGMDEzOTU0MjdCQkRCQworOjEwMjQzMDAwMkJDMTdGNkQ5OUEwODcxMDRGNjc3N0Q1MzkxMDFGQzFDOQorOjEwMjQ0MDAwNEFFRTg3OURERDM1RDI4QkZDOTdFODQ3OUY0NTNGOUE0MgorOjEwMjQ1MDAwQTQ1NDFGM0ZEQTc4MDBFMzZCMTYzRjdBRUQwMEZBRDFGRgorOjEwMjQ2MDAwOEI0QUMwOEY0NjU5NjRGQUQxMjM4QkMyQjcxMTNEMjhERAorOjEwMjQ3MDAwMUFDOUI3QUVFOTUzRTY5M0JGQkM0RDY2NkU2ODdGN0E2MgorOjEwMjQ4MDAwRTdDNDM3MEFBMTZDNkM1MzAyMTg2RTc4REZBOTJEQzUxQQorOjEwMjQ5MDAwN0EwM0ZDNjlGOTdBREEyNjg2RjFBREI5MjZGQ0E3OEJCNgorOjEwMjRBMDAwQ0U5NzIyRkNEQUJERDcwNzkwREU0RjNGRTQyNjNDOUY1MworOjEwMjRCMDAwNUU5OTE5NDk4M0YxMzJCNkZENjU1MzBBRjQ3RjI1MzJERQorOjEwMjRDMDAwMUM4MzZDMzFGRjNBRDEwRjY3MkM2MjIwREQ5QzY2MjNBMAorOjEwMjREMDAwNTgxQkVFODNFMjYzMzhBRUQyOTAxMTMwMDI3MTdGN0JERAorOjEwMjRFMDAwNkU5RUNGQzBGMUY0NDgxQUMzN0Q4RkJFQ0FBNEIzNzlFMworOjEwMjRGMDAwOEM4RTFDOTA4RUU3MzFENTg5ODUwNTRDNzMyMkZFMTc5MgorOjEwMjUwMDAwMzE5RENBQjcwMUJGNDkyMzcxQkUzQzgzRTgwMEY4MEU3NAorOjEwMjUxMDAwRTM3NzREMTNGNEVGMTBCREZGODhEMzA3REJBRUI0RTNEMAorOjEwMjUyMDAwNzlDNTY5RTM5MTc0RTRCMzNEQTlGNjc4ODM3OEI2OThFOAorOjEwMjUzMDAwRkNFOTQxM0Y3RkNDODBGQUY5MEY1QUU1QzQ2NUM4OTVBNAorOjEwMjU0MDAwNDdGODdFNzI3RTc1OTUzMDFBMDdGNDY0M0RGMjc5QjdDQworOjEwMjU1MDAwMTkwN0RFOUVDOUUzMjc3QkNDMzg0OUUyMTMxODNFMEJFRQorOjEwMjU2MDAwRkI3RjUxM0QwMUZBQjI5REUwOERGQkYxMUQwOENGNjU2NworOjEwMjU3MDAwRThDQjlGMTJEQ0ZCRjgzQTc3MjFEQzVDRkVGQ0Y3MTIxQgorOjEwMjU4MDAwNkUwN0E4MTkxNDRGMDE1MTNDODlFRjJGRkUzRTk1RjRCOAorOjEwMjU5MDAwNUZFMDdDREE1MzEyRUQ1NzhBQ0E0ODBFQjk1OTM4Q0EzRgorOjEwMjVBMDAwODk4OUUzMTE3RUVCODdEQUZCM0Q3QkIxN0U2QjgyN0MxMAorOjEwMjVCMDAwRkUzRjE2RUEyRkUwRkNDNUU3ODE0MkExOURCQjhBQzcxQQorOjEwMjVDMDAwQzFFNzdBQTU5NzI1MzVERUVFMzhDNkExOTJFQ0Y3NzlGQQorOjEwMjVEMDAwNTM4RTQyQjNBODAzRUM5NTg3MzM2MDBGRjI3MTdGMDJFQworOjEwMjVFMDAwODM1MDVFQkZEREE0OUQ0NDFCRUU3ODUzMDUzRDdCOTQ3NAorOjEwMjVGMDAwMDY5MjFGM0RCQkU0QzgwNkU4RkE0NjEzRUIyRTFEREQyQworOjEwMjYwMDAwNzdEQzlBREFFMEM5MzMxNjc5MzRCN0VDMDkwRjA4NDU1QworOjEwMjYxMDAwRDY5Q0Q3NzE1OEMyNzhCREU2NTZEREQwQkYzQjNEQkNENQorOjEwMjYyMDAwMURFM0Y1QzY1MTk5NzUwMkJDQjcyRUFDM0M3OUM2MjJBNAorOjEwMjYzMDAwMUYxMkM3ODVGOTk4MDEyQ0ZCNjE4OTRDNzAxRjBDQkFEOQorOjEwMjY0MDAwQTMzMzMwOEU2MDQ4MTE5NDA3MkI4QzUzNEU4QzU3MkUzOQorOjEwMjY1MDAwNkQ1Q0M2NzREODI3NTdFMTI5MDVFREMyOUFBMDhGREFDMAorOjEwMjY2MDAwQ0YyRDk0OTk2MTgxRUJGMTQ5REE3Qjg4NjdBMDhCMzM5OAorOjEwMjY3MDAwQjRCRjgxOTgxREY1M0U5NjgzNEUyREMzOTcxRjhGNDM5RgorOjEwMjY4MDAwOEE3MzgxMTc0QjlFMjJGQkI4M0I5M0QxRkM2MTNGOEIzMQorOjEwMjY5MDAwNkM4MEY5NEJCNDY1QUU1RTNDNjdGMTg3Mjk2RTdBQjIwNworOjEwMjZBMDAwNDRBNTc5NTdFRTZDMjc3ODUyQTdGRDk5RTAwMURCMzlGNAorOjEwMjZCMDAwRUExOERDMTdERjgyMEY4RTlBNzg2RjMxRjFERTFGOUVFOQorOjEwMjZDMDAwOTU1MjFFQ0YxM0U1Qjk2NTRBM0FFMkY5MkQ0NUE1NzMzNworOjEwMjZEMDAwOEVGRUY4N0I3RUE5N0Q3RkRDRkUwQTVCQjk1OUJCRDdGNQorOjEwMjZFMDAwODFGNDc0NzZBNzFDQzE3RDgyRTdFQkI4NkY5RkMwQkVGMgorOjEwMjZGMDAwQjE5Q0Y4MzhEREU5QUNDNkFBOUZDNUZFQ0MyOUI1RUY4MAorOjEwMjcwMDAwQ0ZEMjZEN0M3Rjk2NkUwQjEyNUU5Njk2NTZCQTg2RjE4RQorOjEwMjcxMDAwNzNCNUJENDBEQjRDMkY1Q0M2MTAyRjJFRUQ5NDgyNzIzQQorOjEwMjcyMDAwQUNCRkZEMDI3RTFCNTY4QUZDNkJEQThGNTcxMDNGQ0Y4MQorOjEwMjczMDAwMjlCNUQ4QjU1Rjc1N0MxRkU2QkJBNTM0ODk5REZEQjc2QgorOjEwMjc0MDAwM0E1RjEwRjQ3NDBDRTU2QTdFNUNBRURFNTZDQUU1Njg0QQorOjEwMjc1MDAwRTI1M0M4NTU4QjNENDk3MTREMEIxQ0NCRUJBRjAwMEVCRQorOjEwMjc2MDAwQzEyN0M4QTcyODM3NEE3NjQ4Q0VERTdDREM3RkUwRDc3MQorOjEwMjc3MDAwMzE2ODlGN0RCODE5RjM1MTU2RjkxOUQxNDM1NkE5NEFDQQorOjEwMjc4MDAwNzRFRDlBMzZDRjg1RjI3OEU1QUUzRjJCQThBRjAwOUY2NworOjEwMjc5MDAwOEI0QjJENzJCOEE0OTQwOTNENTQ0QkVGRUIzOTVERkM4MworOjEwMjdBMDAwN0I5RkVCMDAzQzc3RDNCRUQ3NzIzOEFGQjY3M0E3NzU2QgorOjEwMjdCMDAwRDVFMThEQTU3NDBFMDQ3MkM5OEJGMTc4OUZEMDQzMjNBNworOjEwMjdDMDAwNzhEQ0ZCOEI5RDZGQkVCRkYzNUU4Njc2RTBCQzNGQTVEOQorOjEwMjdEMDAwQUI2ODA3REU1RUQ0QTlFNUE4NDlDRjM3NTVDOTc2QkVGOAorOjEwMjdFMDAwNTkxNzYyRTQ1NzMwMTYxQUM2MkU3OUJFOTk3ODdFREFFOAorOjEwMjdGMDAwRjdCQ0QzNzhCOTM5MkI2RTc3Mjc5RTc3MjY5RTZCQjJCQworOjEwMjgwMDAwN0VDRTNGRkI5RTc3MUVBQzJBMDIzODY3MDU2NDlGQUFFNgorOjEwMjgxMDAwQzZDRjMzNUREM0NFOUU2MDYzRkI5RTc3MEUzMkY1MkUxRQorOjEwMjgyMDAwNDNFRDZENTk2RkNGMDg3NTZGMTRGM0EzODY3OTAyMURDMAorOjEwMjgzMDAwQkMzOTkzMjdDNUYxMDg3QUMwRTM4Njc5MzY5NTAxRkM0NworOjEwMjg0MDAwNjgyRkU3NzQzQ0JBODBEOUYwRTgyMjNDN0M0MTNDRDI0NgorOjEwMjg1MDAwRjkzNkUyNjVBNzE0RDk4OEZEOTUwNjAzRTVGOTRBRTYzRAorOjEwMjg2MDAwNTM3RjEwODhFRjY3NkNCQ0JDNzUxQUNBRTdFRkQ0Nzk0OAorOjEwMjg3MDAwOTkwM0Y4N0Y3M0Q2M0Q2QzE5QjQ0RjNEOTJDMjY0NjhEQQorOjEwMjg4MDAwN0Y0NEJEODdGNkZCQzg0N0U5MkE5RUY3QkFGRDk2N0RDRgorOjEwMjg5MDAwMzA3MUE5MDhGOEU0QkU3RUQyREY2MDFGM0RDODcyN0RBQQorOjEwMjhBMDAwRjY1MUVEMjg0NTNEN0JCOUZCRjc2NDUxRjgwM0U0NjMyRAorOjEwMjhCMDAwMEZFODZCNjU3Q0ZDN0RDRjA4OEVDRkRFOUI1OEE0NDM3MAorOjEwMjhDMDAwRUFCQjhGODA2RjhERkNDRTNDRDZCRTkxRUExQjE4QzY0QQorOjEwMjhEMDAwMDczNjQ5OENFMzNCODEyRTFDNjlFQjBEM0NENzc2MkRFNgorOjEwMjhFMDAwRjc5MjFGRDVEQ0QwNDBGODNFMEFGODM2N0M5Q0JGRjA0QQorOjEwMjhGMDAwOUNFQTIyRkMyNUU4ODI0OTQzMkY5RjJFMTJGN0ZEQzg0RgorOjEwMjkwMDAwQ0UzQUQ2Nzg3NUVGNkIzRkZDQjlCQjE0RUQ5RUNCRERBQworOjEwMjkxMDAwRDc3OTUzQjU5Q0IyMDJFQjNFNkIyM0NCODY1OEY5RDZFMAorOjEwMjkyMDAwRTA3RTA5MzhDMEU0NEYyRTY0QUMzM0IzQUYxRDk1NkYyMQorOjEwMjkzMDAwRTZBNUMwNzg1RkM3RjFDNjk0MzEzMzBFQTg4REMxRjIwOQorOjEwMjk0MDAwODIxQjU4NDNCMkJDOTc2QkNCQjkzRjU2MEIyNjIyQzVBRQorOjEwMjk1MDAwNTU4QzU0Q0FCQkFDRjVFREY4M0RFNTYxMUEzN0E5RDZFNAorOjEwMjk2MDAwM0NDQzNBQkUwNDc2RkNFMUY2MUVBQzlGMEI4Qjc1NjQ0MgorOjEwMjk3MDAwRDEyQkNBQ0IxNEY4MDk5NUU1RDBCODQ1QUI0RkJEQUUwNQorOjEwMjk4MDAwNTI3NTgwQzY3NzgxRjA0NzNGQjUxNjVGNTIzRTA5OEI3RQorOjEwMjk5MDAwNzQ5MjFDRDBEOTdDOTBGNzc3QUM5NTI4OUZCM0M2NDgyOQorOjEwMjlBMDAwNjNFOEQ3QzZGMzJBRjYyNkU0NTVGMEYyREM2Q0IzREUxMgorOjEwMjlCMDAwNzhCMUMzN0U4RUY5REE3MkRCMzlBNkQxOUJBMERGRkUzNworOjEwMjlDMDAwNDhGQUNGNjY1RjU4RjREOTA3MkY3RkIyREM1MEFDRTdFNgorOjEwMjlEMDAwOTg5RkQyRjgyNzZCQzU3Q0MxRERDMTdDRUIzOUE2NkIxMworOjEwMjlFMDAwMzdDMjIzRTJENEYwREI2RDNEQTcwNEM4QTkyQ0UyQzhBRQorOjEwMjlGMDAwQTkzM0I1M0E4Qzg3RUQ5QkEwQUZDMEZEOTE0QkE0MDZERgorOjEwMkEwMDAwQjQ4RjQwQzE2ODEyQzU2QjdDMURFODRGODNGREJGMTJCNworOjEwMkExMDAwRUJGRkRFRDcwOTc2NDg1Mzk5RTVGQ0UzRUYwREZFRDNEMworOjEwMkEyMDAwMjJCRTZGMUM1RjhFRjA1REVERjAwMkJFN0Y0NkY4QUVGOQorOjEwMkEzMDAwRTBGOEZFM0I4MEY3NjA1OTUyRkZFNEFBODFFRjZEODIxNworOjEwMkE0MDAwMkY3NjBFRjFFRjBFQ0Y4NzY1OTZGMzhCQUY3QTNFNkQ0MgorOjEwMkE1MDAwQUFGNkJGNzFGRDVGQzEzQTFDMzM3MTFENjZGRUMxNjVFOAorOjEwMkE2MDAwQjRGNzUwN0JGM0JDMzRCMUJFNjlBNkU5M0Y5OEU3QzQyNAorOjEwMkE3MDAwRUZDNENFRjFBRUFEQzNGMTdBRTNFNzdBNzRFRTE1M0Y2MQorOjEwMkE4MDAwNDdDQzFCODlFNzg4NzFGOEYzNjg3RTcxOEUxODlFNzlCMAorOjEwMkE5MDAwNzMxREU1NDVGNzczOEUzOTFGRUI0NzU5RkJERkI0MUJGOAorOjEwMkFBMDAwRjlBQzJENjEzRTk3NTlCRjZBRTY0NDgyMzdCRURFMDkxNAorOjEwMkFCMDAwMzQ1Rjc3NDJGQjFBNzM3RDZCNjc0RURENkQ1OEYwMDExMgorOjEwMkFDMDAwOURBODdENEMyRTMxQUQwRUU3OEI5RjNCNEVBRkIzOUU0NAorOjEwMkFEMDAwREY3RTZGQTZCNjVCOUNGRkNGNDQzQTM2Q0Y2OUZGQTM3QgorOjEwMkFFMDAwRTM2M0MxNEMxRURGMTFFN0U1ODIwRTQ3NEVEMTE2MjI4QgorOjEwMkFGMDAwOUVBRTM2Nzg2MUZGRUFBREY0RkYzNzk4NkZERDRDMEI4MAorOjEwMkIwMDAwM0Y3REQxRkUzMTdFMzRGNUJFQzg5RjAwRkMxQTg4REZDMAorOjEwMkIxMDAwQTY3MjM1NjlCRTg0RjAxM0MzQkQyQzgyN0VDQjU0MTZEOQorOjEwMkIyMDAwOTFGMTVDMjIxQ0QwMTlDNjQxNjM3QzZENTQxMjVGQkJDRAorOjEwMkIzMDAwNjJGNzIzRTZFRDQ2RjkxN0JGMUZEMUI2MUJFRDhCQjg0MAorOjEwMkI0MDAwRkVGRTU1OUQzRENGNjE2RTlERjU3Q0JFRkQ5NTVGODk3NgorOjEwMkI1MDAwNzUzRjZBRTU5MzgxMUVGRjdCRTU3NkJDQzRDQTI2N0U3RAorOjEwMkI2MDAwOTZEQ0ZEREY0NkQ4RUY1RjJDQTY3OURFODlEREJGQThCNQorOjEwMkI3MDAwREI2REJGQzdEMEIwREI5RURGRjE1RDNCNUNBQ0Q1MEUzQgorOjEwMkI4MDAwMTc2QkIxRUQ1NzQ2NzlFQjZFMDNDQTJFMzNFRkNEQjUxNworOjEwMkI5MDAwNDJFQUU3N0VDNTcyOTIwQkUyNUMxN0NBMzZCOTQwRTU5RAorOjEwMkJBMDAwRUM4MTg3RUJCNzgyOEU0QzNFOERDMUQ5MjczRkVGOUJERQorOjEwMkJCMDAwQkJFREY5NzkwMzMzQkY0NTJFQkM4REZDMzBGMDc4RTdDRgorOjEwMkJDMDAwRjczQjA0REVGQkJCREZCMTU4MTVFNUM2QkFGQUZDMkZCNAorOjEwMkJEMDAwM0YyRkU2RkY1OUU1Qzk5NzVGMDdCRjJGRTI0QUJDMkY5OQorOjEwMkJFMDAwQzIzNkQ2RDlFNUNGNjVDM0U3MkE0RjJBN0YyRUFGRkY3RAorOjEwMkJGMDAwQTBGMjdFRTU4RjBGQzc2REY2M0FFODNFOEFFRTY3NDk5MAorOjEwMkMwMDAwRUZBMzM0OTVGMzczQTkxODdGOUFGNzUxMTYzQzlDREMxNworOjEwMkMxMDAwOUZGRUFFRTk0RjhCNzg3N0QwNzU3RTg1RjVCQzZCNzRERgorOjEwMkMyMDAwMzk4RjZGRTc5NkM3RjI1MDcyNjk3RDhEMUNCRTAwQ0E1RQorOjEwMkMzMDAwNDMzQ0VGNjEwQUQzODBBNzE2MkUxODkxOERGMDM1RkYyMworOjEwMkM0MDAwOEU4RkM3RkNFMDI3QTdDN0M3QUIzNkU3MTNGM0JDMzRBQQorOjEwMkM1MDAwMkZCREM2OUFENzMwRDY5QzI3MTA5RjJGNDBGM0FERTdFMworOjEwMkM2MDAwRUI5MDA3QURBNjdCNUUzMUJGREFGODMxRTFCNUM1MjkzRgorOjEwMkM3MDAwRkNFQzRFRTJFRjc4RENCODgzRTRDRTIyQjdBMEZGMjc2RAorOjEwMkM4MDAwNzc1QkZEODlEQjdFRkQxNEM5MzcwQzVGRTAzOTVFQkNFNAorOjEwMkM5MDAwNUY3QkRERTVGNDJCMkIzN0Y1RjEyNjczQkY4Q0Q4N0VGNworOjEwMkNBMDAwQ0Q0NEI4MkZENURGRTI0NzQ3QTVBQ0I4MUZCRDZGODIzMgorOjEwMkNCMDAwMzYwN0ZCODMzRjNEQjdCQ0UwRDJFMzAwOUUxNjExOUU3MgorOjEwMkNDMDAwRDZEQUZEMTE0QkZERTI3MjVCNUVEMkY5RDUxN0NCNEIyNAorOjEwMkNEMDAwNUE2MUVFN0I3Rjc5NDkyQkNBNjM3OTI0MkJDQTJERTc5MQorOjEwMkNFMDAwNEFDMTc5MjVFOTA1MTgyNzE5RTY0ODdBOEZFMjFFNzM0QgorOjEwMkNGMDAwNUZFM0Y5NURCRkE0RjVCNDA4QkUzM0NCREIzMzc5RkRFOAorOjEwMkQwMDAwQjc3RUZENkM5REM5NTc2QkNBMkRFNzE3RTJCQzg1RTUwMAorOjEwMkQxMDAwMUY4RTYyOUNDNzkyNUZBNDM5QUM3MTlGOTI1MzRFQTRFMAorOjEwMkQyMDAwODdBNURCQTRBNEY5MzM3REY4QTVENTFDN0Y1QjZDMUZCOAorOjEwMkQzMDAwOUJDQTc5N0M1RkM3QjhFMzYyMzFFRTM3MzZEMEI4MzVDRAorOjEwMkQ0MDAwMkJGOEI4ODk3Q0IzRDVDNERGRDYzODlFQjYxMjlFQjRCMgorOjEwMkQ1MDAwNThCRUNEODM1OEM2OTQwMUY3RjhGOEY4RTI3RTRGRDBGQworOjEwMkQ2MDAwMTk3RTAxQ0Y3NTVBMEM0OTQ1RjlBQTM3MkVBMzczNDUzMAorOjEwMkQ3MDAwNTYwMTNDMDlGQjE0MUM5NkJCMEQ0NTg3OTg2RjVDMDVGQQorOjEwMkQ4MDAwOUYwRkZFNTk4QUVERkNDMDQyQzYzMEIwNkIyQjk2RDEyNgorOjEwMkQ5MDAwQjlGMzI0OERFN0FENENBRURBMjAwRjUxMjlBRkU1NDdFQQorOjEwMkRBMDAwQjhBRUEyODVFRENEQjhCQ0RCNkE3RjIxMjdDQjY3RTk0MQorOjEwMkRCMDAwOEVFNUIzQjBCNzQ2MEQwNUZFMzZFMUMzN0IyMTZCNjFFRQorOjEwMkRDMDAwOUU3NzYyRjkyQzU1NjVFQkFDRjkyQ0UxMkY5N0NGMjI1OQorOjEwMkREMDAwRTI3RjRCNDI4MDU3Q0JCRThEMzRENzM5QjI4MkUzMzU4OAorOjEwMkRFMDAwN0UwRUNDRThGQ0Y2NDY1NjMzRUIyNjhDMkZFM0JEMkQ0OQorOjEwMkRGMDAwNzhERDZEREU3M0JCOTBDRDIyNzhGRUJGNjE3QTJBQzU4NworOjEwMkUwMDAwRjE3QTMzMTk5REFCQzI4NjY0NTQ0RkMyM0MxMkZFNEIxQgorOjEwMkUxMDAwMTk1RDRBNzE1QzM3QUMwQkQ3ODFFN0IyRDFBRkMxRjAxNQorOjEwMkUyMDAwNzJFREEwNjgxMjdBN0UyMzQzNjcwMTJGQzZGRDhEQ0QxNworOjEwMkUzMDAwMENDRkQ1RjQ0N0U4N0NFRTg2MTU3RkFFQzc3OTk3RUFDQworOjEwMkU0MDAwNkUxNTQ5NjA3MUJEQUY4Q0YyQjg1NjA3OUNFQjMwMEUyMQorOjEwMkU1MDAwRTk5Nzk5ODZGMUVDMkFFNzdCRkM5Q0M2NDM3ODlBNUI1QworOjEwMkU2MDAwQ0FDQjAyMkY2RUE2QkM2N0M1OEI5MjUwNkUzQ0IxNjE3NworOjEwMkU3MDAwQ0IyMTRCN0I1NzM0MjUxRENGMDVERjJFNEZCN0REMkJFNAorOjEwMkU4MDAwNjJCMjk3RThFMDgyREYxMUMxNzNBODZFODU3NTI5MDBGMAorOjEwMkU5MDAwNDc5RDJFRDNGOTdCRTdCNjM1QUZFM0ZEQjFBNTdFMjU3RgorOjEwMkVBMDAwRTA4MDc1OTYzNDRBOTRGRkI1RDhDN0YxRjQ5NzI2NjM0RAorOjEwMkVCMDAwQ0IyMUIwNjE1Mzg2RTVEMjM5Q0MwNTlGODdBMkYxMkQ5NQorOjEwMkVDMDAwQjU5RDE0QjcwNzdBRTk1NjMwQUZFNzAxOTlFMUI5Qjc3NAorOjEwMkVEMDAwQzg3RjlBNjdEMjhCQzA2M0NBQjI4RjA5MkYxN0YwM0NBNAorOjEwMkVFMDAwMUNGMTUyOTg0OTc5NTA3MzAwMUZBQThGQ0VGOTM3MjFFRgorOjEwMkVGMDAwOUU1MjU5NDNGNDFBOThGNzU2QkY4MzQ1MkQ3MTY4NTg2RQorOjEwMkYwMDAwQkYyRDhGMENDNkE2QkMzMzg1REVEOEVBMDkzRkE5MEZCQQorOjEwMkYxMDAwOTRGMDdDMzRCOTJBOEFGQjdBQTE5MEVGMkI5NDAzNDg3MQorOjEwMkYyMDAwRUZBQzk0RDNBOUMwN0Y2QTAyOURCQTEzRjJDMzEyRTkzMQorOjEwMkYzMDAwQjQwRkZFMkJFQzc4RUY1NDU4MjA4QUY0NzY0QzI2RkIyNQorOjEwMkY0MDAwQTI3N0E3OTI0MTc5NTczQjFEOTQ3N0M1NTg4NEVFMzFGQgorOjEwMkY1MDAwNzVCMkMxODEzNjk0OUI1MTg5Q0UwOTZFMzNGMTI2RjA0QQorOjEwMkY2MDAwQ0U1OEMzRTZFNTE4RTc2RUM4MDg2MEZDOUYzOTFBMzZFQworOjEwMkY3MDAwNjM3RUQ0RTI0ODFBRTVERkREQ0VGNjUyMUVENDFERThBQQorOjEwMkY4MDAwMjFDM0JDNzczMjlGMEJDQkNCNTk4MDlFMTJDQkE3RkJDMgorOjEwMkY5MDAwMjVCN0VBMTJGMTg1Q0VBMkQ1MzcwMUZFQTJENzM5MzM4MworOjEwMkZBMDAwQUQ3OTU1RkRFNjM1QzFDQUNGNUFDRTIzNDY1NTk4RjJDNAorOjEwMkZCMDAwRDJBM0ZCNzk5RUE3NkVERUZCRDEyODNGMjhCM0FDRDQwOQorOjEwMkZDMDAwQTMyNzkxQjdBNTQ1RkFENzJCMEEyQzc5MThCRTA2NDYzOAorOjEwMkZEMDAwRTdEMzQ1RTEzMTE1NDNFMkZEOUY5QUEwOERDNUYyRTRBOAorOjEwMkZFMDAwNDJFRDE2NkNCRjA3RUQzQ0QwMDc4QjBFOEY3RDAyRjVDRQorOjEwMkZGMDAwNTlDQjA0NkQzQ0Q2MjdDQUFCRDNGREU3REY0NTFCODExNworOjEwMzAwMDAwRUU3QTUwNUU1MTFFNjEzRUYxRTE0MEU1REY5NTU1RjRFOAorOjEwMzAxMDAwQzlCRjJCQTdGNTk4Rjk3NzI3OURGQzVFMTlFNTIyNEZDQworOjEwMzAyMDAwNjU3REVGQTczNURFNDZGNUUyN0U1QUUyQkQzNEY2MjMzNAorOjEwMzAzMDAwNUU4NjA1MTk2REUzRjBGRTZFMDNBRDVCRTAzRDExM0Y2QQorOjEwMzA0MDAwQ0NCQzk3QjZDNEZGNEE4RjM0NzYwMEYyRDY3QzYwRENFNQorOjEwMzA1MDAwMERCQjE4N0QxOEZDRkU3MkY1OUE5RTJDQ0EyMzU0MjhDRAorOjEwMzA2MDAwOEZCMDI1ODdERjVGREU4NDREMzAxMTY4MTRCNzA3MDcwNgorOjEwMzA3MDAwNTU3MjM5QkUyNUIzQzExRjgwRkEyRDRFOUUwRkMzRjI4MworOjEwMzA4MDAwNzRCNjYwNEM3Q0RDNDE5NUIyMzgxNzZBNDAzQTAwQkI5QworOjEwMzA5MDAwOEZFQzI1NjFBRjhBNzZGNzk5N0FBMUIxNDIxMkY3Q0UwQgorOjEwMzBBMDAwRUVDN0Y2OTZGQ0VFNDZEQTBGNkYzNEUyMTBFNzc2RkNEOAorOjEwMzBCMDAwNDdFNzQwQzI3RTM4M0VCQzgxRjI2OURDNUE3MjdCQTE5MAorOjEwMzBDMDAwQjkyMkE2Q0Y5QjY5RkM5RDQyOUY2QjlCNzBGQzE5RDdEMAorOjEwMzBEMDAwRjgxNjIyOUZCOTRBNjRENjgxN0E2Q0VFNUQyNDc3OUZGOAorOjEwMzBFMDAwQzFCQzUxQjA2OTI2RUIxQjRBODZDMjdFM0Y1MjYxOUUyRAorOjEwMzBGMDAwMzdENTY3MjJCQTU4QjdDNkYzNDlBM0M1MEQ3RUQ0NzczMgorOjEwMzEwMDAwNUI4NjI1QkZGNzdEQjI4MkRCQ0YxM0FGM0YyRkUzQjhERAorOjEwMzExMDAwNUI5NjgxQTczMjBFRjE2NzUwMUU5QkIxMDg2NDA5OTQzQgorOjEwMzEyMDAwQzFERDNGODRFNzMyMUVCNDAzOEE1MDJGRjJGNkJFN0EyNworOjEwMzEzMDAwNjgwM0ZCRDg2NUUyMkI3ODIzRDAwRkRBQ0ZBM0VERjkzMworOjEwMzE0MDAwNDhFMjI5REEyNUU2NUI4MTI4NEZDNzc1MjdFNkI5ODk2OQorOjEwMzE1MDAwN0NBQjFFQzU0ODBGMjQ4MTdGNkVEOTVBMEZFNTZCNjU4NQorOjEwMzE2MDAwMkZGN0EwOUU2Q0QxNEE2OEJDQzRCQ0I3MkREOTZDMDRBMworOjEwMzE3MDAwQzI5NTk4RDcyNkYyQTY0NEJFOTQxOEY3QjkwQTRFMjdFRQorOjEwMzE4MDAwMjI2RkNBRURFNzdBMEI5RTk0MjcxM0FENTBDREZCQkI5RgorOjEwMzE5MDAwRjZGQzM2OTE1RjgzRUQyOUJGMjY5QkYxRkMxQTdGMDM3NQorOjEwMzFBMDAwQzM3RTZFMjg2M0ZCQjA5OTdGOTY5ODU3MDU3MkU4MjAxRQorOjEwMzFCMDAwRDE0MTFGRkI4ODkxOUREMTUyNjRFNjBEMzA2REYzMzJGMQorOjEwMzFDMDAwQjQ4RkYwRkMzNjkwQzRCRTAyODE4MDdBRDAwNUZBMDkzMworOjEwMzFEMDAwRUIxNTc5NzUwNUE2RjI3QzU5M0JBQUI0MjhEQzgzRjA3RgorOjEwMzFFMDAwQjlGQzMxMzlGQjNCODIzNzJFNjdERjM1RTVFQzA5QUJBMworOjEwMzFGMDAwOUM3NUJGQkFGNTA5QjRCQkI3NDg5QzBFQjcwMERFOUZGQgorOjEwMzIwMDAwNEU0MjFGMUY5OEZDQjYyNTMzMzlGRDdDNkVEMjZCQ0IyNgorOjEwMzIxMDAwODRGMDg3MzhCRTk2QzVFRjc3N0M1MTNCQjMyNTZFNjc0NworOjEwMzIyMDAwNzIzQzBFOTA5RDA5RjhGOENDMkFBNzAxMUZGRjJGMTlCOAorOjEwMzIzMDAwMUVFMEI3MDlFNTg2MjVDRkQ0NTk1OUQwN0Y5RTY5NjIzMworOjEwMzI0MDAwRkYyQkJEMjc3QzBEQzgwREU0M0ZGMDA3N0Q5NUU0MEZGMworOjEwMzI1MDAwNzIzQTE2RjIzODdFREZGNkNBRTRGNTMxMDdDODUxODBCQgorOjEwMzI2MDAwMDc2RDAyNkJGQkRDNEEyRUU3QzY0REQ1NzMyQjQ5MkY0OQorOjEwMzI3MDAwRjNGQkJFNUI4M0ZDQkUyRjhCNkFBNEY3OEZBN0VCMzVGNQorOjEwMzI4MDAwQzhBNzJDNkZGQzI1RTZEQjYwRTZEM0VBRjU2MTkyRjM3NAorOjEwMzI5MDAwRjMyRkQxN0VBMzM5QkZCOURFQkNDMUE0M0ZCNjRBREE1MQorOjEwMzJBMDAwQUU1NDM5NUVCRUQ0RkFBRUFCRDQyNjIzRkNDRDdBOThBOAorOjEwMzJCMDAwQkU5N0IwMjVDRkExMUFCMEI0N0Y5QUFDMTdFM0ZCMkQwRgorOjEwMzJDMDAwNzkxQjY5RkZEQTgwRTAyNDkwOUI3MzFDRTcxRkNBOTU4NQorOjEwMzJEMDAwMjgxRkY4NTk2OTEwM0MzREUwQjEyNUExRUI1OTk1OUM5OAorOjEwMzJFMDAwRUVDMThBQTU3QTc2NDJGMzVCRTMxQzZCNERGRDE2Q0ZFNworOjEwMzJGMDAwMDc3OEZBMDlFQjNEQTYxNTk1RkI1NjE4MTYzRDg2RjFBMQorOjEwMzMwMDAwOTJBNzkzRDBDNUMyNEFDRTNGQjI3QjhENEQ0RjI2QjYxMQorOjEwMzMxMDAwQkJCNUQyNDVFRDU2NTY5QUYxMDg1M0VGMkQ3MjczM0Y2NworOjEwMzMyMDAwOEExRDAxRjgyQzdBNzVEQ0Q0RDBFREI0QUYwNjMzMjRCNQorOjEwMzMzMDAwOEIzRTE0RkE4RjZBMkNFRkREN0U3RUZGODQxREIzOEZFNworOjEwMzM0MDAwMjNENjc5OUY0OUE3NjI1RUEwRDc1NUM4MUZBMDc3QkYzMworOjEwMzM1MDAwODFGMzg4RkE0NTMyRTNGMThFNkUzQkJFMDA5RUQ1OUMyOAorOjEwMzM2MDAwQ0VEODhBNTg3RTk2MDUxRUNEQzFDNzhEQzFEMTYzODc0MAorOjEwMzM3MDAwRTMzRTczM0ZDNjRERDVFRUMzNzE0MDFGQUZDMzY3NkJDRAorOjEwMzM4MDAwMDhFODJEMDk1RUM3MTc4NEJFOERGNTBBMzM1QTczNzM5QQorOjEwMzM5MDAwMkU2QUFGNkVDMDc2QTI2Q0IxNTc5QjJCRURGNkVBMjY3MworOjEwMzNBMDAwNUMyRkM4RDFDREY4N0U0RjZBRjI3OTc3OThGODFBQjBDMQorOjEwMzNCMDAwRUYwNjVDMjY5RjNGODhGRjRDQzIyRjZEQkRGQkQyQzYzNworOjEwMzNDMDAwMDI4QkI5RERDNkJEQzQ5N0Y5RTMyRkMxNTc5QzhGRUZCRgorOjEwMzNEMDAwQkNCRTgxRjREQjBCQTZGREYxODI5MzI5OTg1NzAzQkM5OAorOjEwMzNFMDAwMTU0ODk2RUY3M0I0NTJEODFCOTFFMTg4OTdFN0ZBQjE2QworOjEwMzNGMDAwMzc2MkVERkFDOUFCRkYxQURCOTE3NjI1NzY0N0RCQjQ2RAorOjEwMzQwMDAwRTM2OTY0Nzc3Q0QyOTE4NkZBRkRCOTMzQTFBNDc2QzdDQgorOjEwMzQxMDAwMEJEOTNCODYyN0IzM0JGNkY3NjM3N0JDNkFEQUE3MDc3RAorOjEwMzQyMDAwREY3NzkxMUQ1MTdDOEVEQjFEQzVFNzc2Qzg2ODNGQkNGOAorOjEwMzQzMDAwNTlBOUQyN0E4QUNFNzRDQjNBQzA1RDhDNzYwNzhDQjMwOAorOjEwMzQ0MDAwREZCNDNCQjAzREQ5MUQ5RkVDOTAxMUFFQTI3M0RERDQyQgorOjEwMzQ1MDAwQUYxOENBNjg3NzE0RjU2Mzc3MDAxNDMyRTJFMUQ5RTI1NQorOjEwMzQ2MDAwQjY3RkM1RkQ0QjVDRUZCQzg5N0E4Rjk1NkUwQjdCQkIzRAorOjEwMzQ3MDAwMjlCRTIzRkFCNUU1NkQ0Q0QzNjlCRkVERjQ1MzVBQTRDOAorOjEwMzQ4MDAwREFGMkUyMEI3QjM5QkQyN0I2RUI4RkNFQ0FFNEFBRDZCRgorOjEwMzQ5MDAwNUU1OEQ3NTY5NkJFODNGMjMxOTU4NkM3QjE2QzE4MEEyRQorOjEwMzRBMDAwRkYzRTFFN0U1RjAzOUVGN0NGMDUxODMyQjE1REMzNEYwRQorOjEwMzRCMDAwN0E1MUFGMTg2RTFGN0VEN0UwMkZBOTRCQjk5RkIzOTZGNAorOjEwMzRDMDAwRjk5QzUzRTM3Mjg4OTYwRUEwMTkyMTczM0M5N0M3RDdENQorOjEwMzREMDAwMEM3NkQyRjdEMzMyMDg4RjhEM0UxMUNGRDk1MTkxMEI5NAorOjEwMzRFMDAwRkRFRkZGREEyOEJBRjcxMzdBMDQwNjgyRjJENDYzMzJDQQorOjEwMzRGMDAwRDU4QkY4Q0ZFQkMzMThFNUU3MDNGRkNFQTk4NkYxMjdGQworOjEwMzUwMDAwOUJFMzgzOUVEM0VFODVGNjhCNEMzQjZDQTZFQ0E1RjYzNQorOjEwMzUxMDAwMEZFNkYxRjY1MzhERjNGNTU4MkVFQTc1QTk3OEJGOENCNgorOjEwMzUyMDAwQzlFQkU1QkIzMTZFOEJGNjA4QjQ3RkYwRjk3MDk5MDdGMworOjEwMzUzMDAwRUE1MzhGMDMyNDM4REUwOTE3QzUyRjQ0N0NBMUUwRDg1NQorOjEwMzU0MDAwNUVDMjY3REExOTk3MkRBRTkxMEExMjJGNkFCMTVCNUNFMQorOjEwMzU1MDAwMDk2NTI2RDcwRTRBMjY5RkM0MzMzMTBFNzFFRDJDRDM1MAorOjEwMzU2MDAwMUYxRENCNkVGOTFDRUNBQzBCNkM3RDJCQUVEMTNEM0EyNAorOjEwMzU3MDAwNzQ3MDM3RUJEQjVGQzQxOUNFNEZENDQ2Q0M4MjdEMUMxMAorOjEwMzU4MDAwRTVENEM5NkZEOTVGMDFCODg2N0REQUJGNzNFN0VDQjFDNgorOjEwMzU5MDAwODhGNzFEMEFDNTc1NEY3RTNCOERGNkU5QzAyMzRBM0I2RgorOjEwMzVBMDAwQzY5MzRFMDI5RkYyRjhBREIxMTJFOUY1NDAzQTEzRTcyNworOjEwMzVCMDAwNDA1MThDQ0IxRDg4REQ2N0NFNUVBOTU5Q0FFMzVFMkJENgorOjEwMzVDMDAwN0MxRkY1RTA4MTIxQTJGRDhGNzlCRDI4MUJGRkI0MTI3RAorOjEwMzVEMDAwRjMzNjBFMENFM0U1MjVBRjNERDM2OTEwMURGNzJBRTQ2MQorOjEwMzVFMDAwNTczNzlFRjYyNjkzOUY5MzY2REJFOTc4NEVFMTFBNEU5NQorOjEwMzVGMDAwQzc5N0U4MDdGMjdFQzZBQzI0RkQ1MkFBQjk3Rjc1QTAzMgorOjEwMzYwMDAwMTY0MDFBODc3OEQyNEI2NzAxNUZFRkVGQjlBNzc1MENBOAorOjEwMzYxMDAwNEMzNTcxREFCN0JCNDk4RTVFRDNCQjM2OTlEQzVGMzA2RgorOjEwMzYyMDAwOEJEQjUzRDFFMjA4Rjk1QkUwQzM3MzdGOTcyOTg3MzBDNgorOjEwMzYzMDAwN0Y3NTBFNTNDN0EzNUZGRkYwRjRFNzdFMzMxNkU2Nzk3QworOjEwMzY0MDAwQTM2OEY0NzgzOTA5NUZERjNEMkI5N0M2ODlDMzc3NTRBNworOjEwMzY1MDAwNUU4RTcyRTlBM0Y3MTYyNjkzMDNERkFGRDQxN0RCRDc4QworOjEwMzY2MDAwQzNDRjQ3OUI3NzI4ODRGRjA3NjZGRkRGMjczMEVGMjExMgorOjEwMzY3MDAwNUFCQzgzRTI3N0ZCRkZFNDYwRThBRkVDMUZDM0VEN0U0QQorOjEwMzY4MDAwQkNBMTg3REZBNTFDMDBGODc2NEU0RTQyNzcwMERGNURCNworOjEwMzY5MDAwQjMwQUZBQzIzNzc5MzZFM0Y5QTExM0I1NkY2MTdEMjIxNworOjEwMzZBMDAwQkMyQUM2QjkwMTVFMzBBRjAyMjg0NzUyM0VGQzJGREQ2RQorOjEwMzZCMDAwMThDRkRDREZFQkEwQTBDQTg1MzMxRDMyOTI2MDVCNEZEMAorOjEwMzZDMDAwNkUyOTlBQUIzM0FBNEVDOTQ4NTJDNUJFNDczNkUzRDFEQworOjEwMzZEMDAwQUZCRTVFQjZGMURGRTQ5RTU0NUJGOThFODY2QjZDRTU5RgorOjEwMzZFMDAwMjVGNUMzRTNGQ0M4RjAxRUQwNDg1QkQ5RURCRkQ5NTYyMQorOjEwMzZGMDAwMEVCMjA5QjZGMkMyQUFBOUI2RjFDQTdDMjVCNjcyQjk1MQorOjEwMzcwMDAwN0ZCNkFEN0RBNUJBQzA1NjlFOURCN0M0RDZCRTNBNTAxMQorOjEwMzcxMDAwNjdBQjBGRTc4RjUzRjAwQTFGRDBFNUY3NzFCRkQzOEU2OQorOjEwMzcyMDAwNjlDNEU3NUI3QUVFRjEyMTVENDQ4QkMzRTQ0RjFGNEYyMAorOjEwMzczMDAwRUZDRUM2NzhGNUVCRkQ3QzU3RUVENDJDQUVDRkVFQkNDOQorOjEwMzc0MDAwMUU0QzIzOTQ5M0EwQ0YzNzY2QzZEQjA3NzM3QjZERjFDNQorOjEwMzc1MDAwRjhDM0IzQjg3RDdBNzA1NjYyM0NCRUJGN0I3MDVDM0ZFNQorOjEwMzc2MDAwNUZFRUZEQjc0NDNEM0NGN0E2N0I0ODJFQjUyRDk0MjM3NAorOjEwMzc3MDAwNzg5RkFBMzlFRjJEMkZERTFCN0I3RDIxOEYyM0I0NjUyNworOjEwMzc4MDAwQzMzQUJEOTQ4RjQxRkM3NTcwRDE2RDIzRjA1QzJEMzUyQgorOjEwMzc5MDAwNEZCRjA2RTVCRkQwREYyNTc5MTE3NjFBRUE1MzdEMTFCOAorOjEwMzdBMDAwMzYxMkVGOTc0MUI5Q0VCQzY3NTY5MkNGREZERjY4QkVDNQorOjEwMzdCMDAwNUY4NTRGRDBEQjMzMkRGODRBRDRDNzQxQ0ZCODk3QzFDRQorOjEwMzdDMDAwNUQ2MEQzRkZFQUEzRUZGNzJEQ0NFN0YxOUVEMjRGMjI0NQorOjEwMzdEMDAwQTU3ODlGN0FCNkY2RDIyMTdFNkQ5QUNCOUYzNzhBRkY2NQorOjEwMzdFMDAwOThENThGREU3RUQzQ0VBRjQ3ODkxRkY2OUY5OTdGNTE0NAorOjEwMzdGMDAwRjlGRjg3MjYxRTVGN0ZBNkM5QzNBMkIwQkUxMzREM0U0OAorOjEwMzgwMDAwN0FGRUFFQzk0RkVGOEYzNkE5RjQ2QzY5Q0FBMzY3QjRDQworOjEwMzgxMDAwMjk0MEY1RkZEQTU0NDhDRjQzNEQxQTNENUY2OUFBQTAwRAorOjEwMzgyMDAwRTdFMUE2MzBCNTdCQURBOTg2OUU0NzlBNzQ3QUZGRjE5MQorOjEwMzgzMDAwMkNDRTk3NTcwQjNDNUE5RTg4Mjc4NDBGM0EyNEMyRUIxNAorOjEwMzg0MDAwNDI0Q0Q1OUQ3MjRFOTNBREYyMURGMEZBNjkzMkJDNUVDQQorOjEwMzg1MDAwQTkxRTg5MTZFRjFEMUVFNjdBMkEyOTFGMEQ5RDJERUU0MQorOjEwMzg2MDAwODU3MTNCNzk4RTRFMzIzRjA2OUYwQkUzNzM1OUYxRjgxOQorOjEwMzg3MDAwOUMxQjREOUFDMTA0RTdBMEQ5MDUwMzA3RTcwMTMzN0VERAorOjEwMzg4MDAwNzMyMDkzRDUzQ0NERkRCQTREMTJFOTFCREYzODJFQ0YwNgorOjEwMzg5MDAwN0YxMDBFOTEzQzFGMzIyRUI5M0NDRkU5MjNDRjk3OTE3OAorOjEwMzhBMDAwREU2Mjg3MzE2RThBNjk0NTI4OENEN0UxRkNDOUUzMjE0NQorOjEwMzhCMDAwQzZBMDlDOEJFMjgxQ0UyQjA1MUUyQ0ZCMTVCODEyM0NCQQorOjEwMzhDMDAwMjRBRUJGQjQ0ODlCOENFM0UwM0QxNEU3RTBCRTdBRTQ0RAorOjEwMzhEMDAwQzZERUNGMzQ4QzQ5M0Q5QkNGRTE3REY4QkRGOTgzRDA2NgorOjEwMzhFMDAwNUU3MTYzMzA4QUVDMTU3MEYwMEE3MUJGOTk2OThGQjQwQworOjEwMzhGMDAwNzdENjY3RjcxREU3MEZDNTdCNDlBRjNGMThCMzczOUVCNworOjEwMzkwMDAwMjAzQjI2QjExREZDMEUxMTFFNTA2RjU5RjA5MDQ0MEU0NQorOjEwMzkxMDAwODQ5M0FEQkY0QzdFQkU3NzIzRjQzRkQwQ0IyODVFQTYwOAorOjEwMzkyMDAwQTI0RDBERjAzRkE3RjBFRjM0MUMzOEU3MjAzQzVGRjBDQworOjEwMzkzMDAwNDgyNDFGREQwRkRDRUJDMUQ4RjZCM0RGRTVFRDhDNkE2MAorOjEwMzk0MDAwODlFRTJGQTQ3NUVENTdEMTRFMERGNkVBRDdFMEY3QzZGNAorOjEwMzk1MDAwMEFBMzk1NEVGQzNFNjg2OERBQjg0MDhBODUwRTQyOEExMgorOjEwMzk2MDAwNUQ0RkEyQTUxQUQzM0IxNDBDMUI5QzUwQkUyRURFNUVFRAorOjEwMzk3MDAwQzZGRENGOEQ5NzczRThERUY1M0ZDRTA2M0E5RDdGQkUzQworOjEwMzk4MDAwODFBOUY5NjY3QzM1Mzk5RTU2NEI5Njc4OUJDMjAyQUQ2QgorOjEwMzk5MDAwOTM3M0M4RUUzQzc0MUQ5RURCOEM2NjExOTlFOENBMjBCNworOjEwMzlBMDAwRkY1QkMwMkI3QkMzNzQyRjRGRjhFOTlGNEFEQUZEQjM0RQorOjEwMzlCMDAwOTNEODBGQUM1RUEzNzMzN0U2NzBEMEI5NUJEMzA0QkQ2OAorOjEwMzlDMDAwNjkzNjlEQ0YyNzlDQ0JGODVFRjkzRjEyRThCNDU2MDdDNQorOjEwMzlEMDAwOEJBMjdENjE2NEI4MDg3Rjg5RkIzNUI5QjA3MjEzQUVFNAorOjEwMzlFMDAwQ0JGRkE1RkRGQTFEOTJGNTNCMDEzN0FBMzNDODlGQkE1QworOjEwMzlGMDAwMDBGRTE0REU0MzY5NTZGOEZEMjhFMzQ0N0FBNDkzODA2MAorOjEwM0EwMDAwNjQ3OTY4QjdERDJGREYxQ0MwRkRGRjdFREFGN0M4M0ZBMQorOjEwM0ExMDAwNkEwNDdGMEJGREFGNkRBNjFDQkUzRjM1QTM4MzgxODI3OAorOjEwM0EyMDAwREFFNjZDRjgxRjU4REYyMkIxNzAwN0ZBNUIyOUQ3NDczNgorOjEwM0EzMDAwNTg0NjFDQUVDRUQ5NUM5RkJCRDkxRDgzOTBDRkJDQkU2RgorOjEwM0E0MDAwOTkyN0NGNEM0OEU2RUY3MUZGQzQxOURCRjc2QzFGRjlEQgorOjEwM0E1MDAwMUI2NkQ5RUJEMkZEOThGN0Q4MzI2RUY1MkVCQzhGNjU3OAorOjEwM0E2MDAwMENGMUYwRjM0RTI1QUNDRTAzRkMzQzY0REVBQjY1M0VCRQorOjEwM0E3MDAwODM2NTU5RUVFRkNCNEMzOThCRjFEOTU2MzA2NkYwN0MyQgorOjEwM0E4MDAwRjc5NzA5RjAzOEFGMTAxRTE3NEExOEY0NDdCMzVDMTFDNgorOjEwM0E5MDAwQ0NBRjUxNTExRTAxNUNBRDdFMDdGMUNEMjY5NUYzRkRGMworOjEwM0FBMDAwMjZBRkU2RjEyNUQ5QjcyRDg4NDc3N0ZGRkIyOUU3NkNDQworOjEwM0FCMDAwRjI2MTFDN0I4N0Q3NDE3Q0Q5QUEyQTVCNzNBMERDRUEyMAorOjEwM0FDMDAwNTVGOEY3NUE1NTQ3NDVCMjdDQUQ4RjY2NzNCQjA5OUFENgorOjEwM0FEMDAwQTQ1MDdFNTM3MDNFRDkzMUZEQ0REMzY2RUVBNzI4QTcwMgorOjEwM0FFMDAwRTZFQjFBRjE4RjFBMDhFMzdBOUFCRDU5MTJDNjM3NDVFOAorOjEwM0FGMDAwRkRBRkNERjE0NTlDNzhBQjY5MTdBNUU2RUQ4RDYyQkNCNQorOjEwM0IwMDAwQTY2NUQ4QUEwOTg4MkUwRkQ4Mzk2N0UxQkQyNzdGMkY2RgorOjEwM0IxMDAwRDk0NTJENDMzQzM1QzlDRUJGQ0VDRkU2NzFCNkFEQ0UyQgorOjEwM0IyMDAwNDAwNUUyNzM2QkJBODMxOTgwQkZBRDM5QzlGNTYwOEY2OAorOjEwM0IzMDAwQjk3RkNERUFGODMwRDEyREUwNjNCNEQ0QjdERDZGNEM1NgorOjEwM0I0MDAwN0RCOUQ5QjlDMzhGRjdEMEI2OEVCRTk1RjJCQ0I2OEUwQgorOjEwM0I1MDAwRTA3MkI3RjFDODg5Q0UwREY5QzgwRkRGNjJGRjg2RkNBRAorOjEwM0I2MDAwOTBBNUQwQkVBOTJDRTA0MUZERDVFMjUzN0NFOEVGNEZGMworOjEwM0I3MDAwQ0M1QUU3MDk1QUU0OTdBMEZGRUQ2ODg3QzBEMzM5NkNBNworOjEwM0I4MDAwN0UwREQyRTM4NUMyRDQwMDIyQkQ0QzNFNDJERjA5NjlERQorOjEwM0I5MDAwMDk4MDNDQ0RDMTNDQTQwNjlGRjVGRTNGRDhEMzcyMTVFOQorOjEwM0JBMDAwQzA5NTFFNzBEOEVDRUQ0MTg1NzY3RjQxNjVCQTg3RThGNworOjEwM0JCMDAwNzMxOEE3QTNGRUY2MkYxMTFFMkY0QTlDRjExNzY5OUZCOQorOjEwM0JDMDAwQTlENzI0RkIyRUM5QjgyQThFNTc0MTM3Q0U0QkQwQ0Q2QQorOjEwM0JEMDAwQTVFMEI3RTlCQkVDQjhCRUNCQTkxQUIxMEFDRjJGMUUzRQorOjEwM0JFMDAwNjJCQzdFRTQ5MUYzOURFOEFGMjc5NkJGMkM3RjM2MkIxNQorOjEwM0JGMDAwM0I0ODFFMzc4RjcyMTEzRDI1RjZERjlBQzNFMUY5NjAwRAorOjEwM0MwMDAwRjY0NzM0MUY4NjE1NzBERjMyM0QzQzhFQjRCRDcwNzBCMAorOjEwM0MxMDAwNEEzMjc5M0I2QkEyNUU1NDY1QjE4QjMyNEJGNzkyMUVGMAorOjEwM0MyMDAwMUQ1Q0M1MDg3RjVFMzVFQzFCMDVFMzc4OEZDOTQwQTM5QQorOjEwM0MzMDAwODA2RkM3Njc3RjNEQTU1RTM5MUU5NTFEMEQyQ0NDQzdEMworOjEwM0M0MDAwMjMzOTgzQkZDRjQwQkU2NTk4RkE2NENCMEQ2RjMwQ0M2QgorOjEwM0M1MDAwOUZEOTNFNTIwOUM4OTQ4NzcwMjQ3MDMxM0JEQTVCNjg2MworOjEwM0M2MDAwOEYxMzdERDEzODUwNEQ5NTk5OEY5MkMyNTI3ODFFNTA0NgorOjEwM0M3MDAwNTU0OEExRkMxQjA3RDc5RjFBRkMzRkQ0QkNDMjJFOTkwNAorOjEwM0M4MDAwRkIzRkQ0M0M1QTUyRjExNThGN0Y2NUQ1MzI1QTRGMkNFOQorOjEwM0M5MDAwMUYwNUJGMjc4M0UzRTg4Q0VDMENCQzEwOEJFREFFNUJGQgorOjEwM0NBMDAwQ0RFREE4NkNENjJCRTFGOURFMEQ5ODk1MjMyM0JENzNERAorOjEwM0NCMDAwRjk3OTgxNjUzQjI4MUYwN0E2QzE3QzEyQzk3MDkwQkVBNworOjEwM0NDMDAwRkJBRjM3OUM5NDgyRjA3NjdCRDFBQTcxQjgzRjg5RUIyOQorOjEwM0NEMDAwNTg1MzY1QzZCMzYyRUJCODM4MUUwNDlDMDM0REE3NDIyNworOjEwM0NFMDAwMkYzNzdCQjg5RUQ1NDAyMUE3QTAxMTlDMTBENzJDOTNDRAorOjEwM0NGMDAwRDc1MzVDQjNDNTcwRkI1MDBGMzcyQkEwNzdCM0E4NzdCMQorOjEwM0QwMDAwOThFMkEwMDk3MUNEQkZBNEYwQjhBN0I0OEVGOUE0MjI5RgorOjEwM0QxMDAwOEE2QkU2RTEzRTM1QjJENDAwQzYxRDA3MjlCQTA3RUIyRgorOjEwM0QyMDAwRDM0NjI5OENEMzU1QzM2NDNDM0Y4OUZCREJBQTk3RTc3NAorOjEwM0QzMDAwQkYzNTUyOUVFMEFGNTBBRjQxQkJBRUNGMkUyRThGRjZCNworOjEwM0Q0MDAwNUQ0MkFGQjUxRDFCRTVBNUI4QjlBNzJFMERGREVDNjcwQgorOjEwM0Q1MDAwRkNCOTQ3RDA2RkI5RTBFMUY5NUJBMjVENTdDMkY3NENGRgorOjEwM0Q2MDAwNUE0QzM5RDc1MzY1QzZDNzUzRkUyMjYzRkYxOTdFNTU5NworOjEwM0Q3MDAwQzEzQ0I5OTA2NzFDQzlGNzY2MjlGOTM5NDBBRjI5REYwMgorOjEwM0Q4MDAwNkU1NERGRTQ3NEI2NUE3Qzg3NkMzNUM5RkY3N0QzNEQyNworOjEwM0Q5MDAwRkFBREQ3OTc1MEJDRDhCNEUzOThBNkE5QkU0OTcxRkIzOQorOjEwM0RBMDAwNERFODRCQkZFMjMzRUVDMjcxQ0NGQ0E5M0VFQkVDRkExRQorOjEwM0RCMDAwMDc4NkRGNTc2MTdFNEJEQzM1MTdFNzFGMTRDQjlCQzNBQgorOjEwM0RDMDAwRjkxM0VEQjZGRUYwRDk2NkZBQkRDREZFMTBFNTVENUNFNworOjEwM0REMDAwNDA5OTk1RTQ1QzQ0M0NDMUZFRUM0NjM5NTVEMDZEOTc2MgorOjEwM0RFMDAwMkY2OTc5NzZGOUQyRUE2OEEwM0MyRUUzNjZFNkMzM0NGNworOjEwM0RGMDAwMEY1NjE1RjA1QkVENUZCMDQzOEY1NzExMzNEQkVEQzkwNAorOjEwM0UwMDAwRkJBQUI5QkNFQkNBNTQxNThDQkY5NDc4ODIwQ0NGMUJBQgorOjEwM0UxMDAwOTQ2QzlERTE3RUI4RkM4MThCRUVDN0NGQUJCOERFNkZCMgorOjEwM0UyMDAwQzk1QjFFNDY3RkU1RTFFOURGMjRCQzRDQUNFMDc5QTUyNworOjEwM0UzMDAwQTIxREU4Q0IwRkFBMkM3RThCQzgzQkI4RUNFRjIzRjk3MAorOjEwM0U0MDAwMUM5NDhGNzhCOUYxQTFCNjY5MkJGOUY3OTFGQ0NCRTlGNQorOjEwM0U1MDAwRkI0OENGNzhGOEY3OTFCQUQyRjUzNEI0QkZCRUU4Rjc5MworOjEwM0U2MDAwOTFFRUFFRTZGNDFBRjI3Q0UzRTA4QzVDMEI5RTdBNzQ4MQorOjEwM0U3MDAwQ0EwNzcxRjlDRkQzQjlDQzBDMzM3RjI0MzEwRUU0NzY2NQorOjEwM0U4MDAwMzdEMDM5NUFCNEI4NjE4OTM1MEUyQ0YwRjc3MzkzQUUzOAorOjEwM0U5MDAwRkY1MEFDNTM5RTRGN0Y3RkRGNDFCNDQzOENFMUJBRENDRgorOjEwM0VBMDAwNjY5QzczNEJGMUI3MDlGRkYzMkIzMjI5Q0VBNDk4NzFBRQorOjEwM0VCMDAwMjZENzc5OURGMjdBM0IyN0VBRDc1NjVCRjQ5RDNCREIwOAorOjEwM0VDMDAwMjA3RDk3RjYzREM2RUZBRjdGQ0FFRkFGQTc2RDY0MjFBNworOjEwM0VEMDAwQkNBRjFFRkE2QzNDOUQzRjg1QTIyOUM0NjdEMzNGMDk0NQorOjEwM0VFMDAwRDBGN0E3Q0JFNEE3NUE3M0ExQkVFQjk4NDJERjg1RUZDQQorOjEwM0VGMDAwOUE5RTlBODU3QUVERTM2M0RDQkU0REVCQkFFOUM4MkQ1NAorOjEwM0YwMDAwNTAyRTNFNTY4N0JFM0VDODFEODA2NTcwREY3NTRDRkY0MworOjEwM0YxMDAwQzRGMUE1RkNDNzAyRjQxRjJERTcyMDYyREM1RjM2MUQ0QgorOjEwM0YyMDAwMjZGQUQ4RDdENDREQ0ZGRDRENTE3QUI2MzVGNUQwQjM1QQorOjEwM0YzMDAwNTBEMTRBNzAzRDg1REQ3NDI2QzlBNjlDODE3QTBCMUM0MAorOjEwM0Y0MDAwODUyN0EwQkY4NTFFODY0Q0Q0QjU2QUUyQkY2RTVCQkJEOQorOjEwM0Y1MDAwQjRCQzFFNUIzQkYwNUY0QkFCMEIzMDhGODdFM0QzODU2QworOjEwM0Y2MDAwREYwRDgzRjFFN0Y2QjBDRDkyRkExRjRBNUVBREFBMUVDRgorOjEwM0Y3MDAwMTg3OUY1OEZENTA1MTc5MzU3RkM5QzM0RDQ2MzdFMjdBOQorOjEwM0Y4MDAwMkM4MTFGMURENTJBRjkwRDMxQkUzNENGNEI4NTlFNkU3NQorOjEwM0Y5MDAwQzU3RjgyM0U2RENFRjgyNjk3NkZCMTdDMEM3RUZGNTBCOAorOjEwM0ZBMDAwN0M2NzdFRTNFQjFGRURBMUJDRDI3N0NDN0E4M0ZENDQyNgorOjEwM0ZCMDAwQjNENDMzRjZDOTJBQkMwRkYyMTIzQUFGNjA4NzlFN0JBNgorOjEwM0ZDMDAwQkQ2QjE1REU5QkJFQjUyNjUzRDEwMEJFMTIzQzU4Q0Q0RAorOjEwM0ZEMDAwOENERjdGMTE3OThBODk3OEZCOUZENTlDQUY4RkU3RkFCOAorOjEwM0ZFMDAwMjhCRURFOTJDQkZGNUU0MTYyQkIzN0FCQjlCQzQwOUFDNAorOjEwM0ZGMDAwQjBGRTFEOEZENDdFRUVGREJDMkFDNjM1RjFENkVBRTJCNgorOjEwNDAwMDAwRjkwN0ZERERFRjc4QUNGQUUyRjczQkZFNjBENjVGRUEzOAorOjEwNDAxMDAwM0VDNzJGQ0Q3OTVGQzQ3OTBCMjgyRjcyMEZEMjg1Rjg1OAorOjEwNDAyMDAwM0IxQjUxRjM3REVDRUY2QkY4NTlEMjcxN0U2RUNBREQwQworOjEwNDAzMDAwMUJFN0Y4Q0NGREQ0MTRGMzNCRDQ3Qjg5M0VDQ0JGODc3RgorOjEwNDA0MDAwMjBFQUE3OUM4QkQ1RUZBM0Y5NjI3RkY3NDBBN0Y4OEZGMgorOjEwNDA1MDAwQjg1RkY3RjNFQURGRUVEOTYwRjk5RTU3NEJFQzNCODk4NgorOjEwNDA2MDAwM0M2RkU5NTMxM0ZFQzRBN0I4NUYxMkZCMUUxNDdCNkJCMQorOjEwNDA3MDAwOEY2NkY5MUVENDRGQUFERjM5NkI3RUFGRUExMEMxNjc5NQorOjEwNDA4MDAwREVBQjc5MzQ4RTg3NUZEM0ZCODRFRjAzNzRCREZFREEzOQorOjEwNDA5MDAwMUVGMzNFQ0U2RkE4QkUyMUYxQkI1QkVGRURCMURFRUZBQworOjEwNDBBMDAwNzlCNEZBRDQyQUIzRkQ1MTVBQTdGOTlEQUUyNDc0NjFBQworOjEwNDBCMDAwRDJFRDk5M0Q3ODlGRjAzMkM2N0I5N0M2MzNCRkIzQjUzQQorOjEwNDBDMDAwRDlFNEEzRkVFODE5REE5RkEyRjZCMUVGMEZENzc5NTAzMQorOjEwNDBEMDAwQUZDNEVGRjFCRkJCQzdGNkZEQUNGRUYxRjU0NzVBQjc3MQorOjEwNDBFMDAwMkVFNjY1NjY3RTEzRTcxNzkxMUYyNkU4QzIzQjg3RUYzMQorOjEwNDBGMDAwQzc3NjkzMUZGMEZFMUZGNTVGMzE2MDc4Rjg4Q0Q2OTU3OAorOjEwNDEwMDAwNzBBRkU4NTJFQkQ4MzcyMTJDQ0Y0MTM4RkNCMUZDNjJCQworOjEwNDExMDAwODVDQTVGMTIxRTcxMUYyQzkxM0Y4NkNGOTE0NDVFRjNCQQorOjEwNDEyMDAwNjA5QTI3M0JGNjFEQ0U2QjA2NjI1RTE4NzcwNDhEMTNFRQorOjEwNDEzMDAwRkZCRUU3RjU3MzkyQ0I5RjJGMzQyRTUzMkYyRjZGNDQ4MgorOjEwNDE0MDAwOTRGRjNGMTlBOTk5QkE2MDcxMDAwMDAwMDAwMDAwMDBCNworOjEwNDE1MDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJGMzE3NjA2MEY4NTE4RgorOjEwNDE2MDAwOEZDMDlDNjg3QzVBRTNCRjRDMEMwQ0ZBQ0MwQzBDOTdBQgorOjEwNDE3MDAwRDgxODE4OUMzOTE5MTg4NEY4QzgzM0U3MjI5QUJFN0JERQorOjEwNDE4MDAwNDBCMzY2RjAzMDMwMkM2MzY1NjBEODA5QzQ3QTVDRDhERgorOjEwNDE5MDAwRjVEOTA4MjJEODQ3ODE3RTVGMDFDNDE3RTkxQzA2QTMyMAorOjEwNDFBMDAwNzhGMEUwMUExMTA2ODY0OUEyMDhCRTlFMThBQTdDQURENgorOjEwNDFCMDAwMDg4MkFEMjM0NTk5NUQ0RTQwRkQwMDg4NTBCRUNCODBGRQorOjEwNDFDMDAwMDMwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAzQQorOjEwNDFEMDAwMDAwQkQ1N0QwRjdDNTRDNUI1RjBEQ0REQkI3N0ZGMjcyOAorOjEwNDFFMDAwMzdDOTAyOUIxMEUyNERGODYzRDA0MDM3MTAzMDU4RDRFNQorOjEwNDFGMDAwNEQwNDFBOTBEN0FFNjlBQkIxQTU3NkExNEExNTExNTZGOAorOjEwNDIwMDAwNkI5NTY3RDVEQ0ZDREY4NDEwMDJBMjAyNDU1OTU0MTA3RgorOjEwNDIxMDAwQURCNkE5QTJCNTlGRTVCRDBENTA4QTdEN0U5RkU4NTMzRQorOjEwNDIyMDAwQUI1NkZCNjJBNUI0NUFBNUYxNTk0QUZBN0QwODZGQ0U4OAorOjEwNDIzMDAwOTlCOUQ5N0I2RkVFNkU5NjJBNkRCRkY4NkI4N0I5RjM4QgorOjEwNDI0MDAwRUZDQ0Y5Mzc2N0NFOUM5OTk1NkM2RTUyNzYwRTIxQTcwQworOjEwNDI1MDAwRTFFRjEyNDIxRUYyMTI0MkM2QTREMkNBRUY3REY5ODZFNQorOjEwNDI2MDAwMjdBQUU4QkZCRENFRDA0RTlBNTRGRTYyNkU3MUI0MjIyQQorOjEwNDI3MDAwNTU3RjE2MTFCMDVFRUQyRjk2RkM5MUQwN0FGRjRFRUM3MworOjEwNDI4MDAwOEE5MzdFREFFNzFGRjQ4NjY4NUUxNUVDMDREQTM5NDkxMgorOjEwNDI5MDAwNERDMUJGMDQ2OEY5OTAyREQ0NDVGM0M5OTMzNjFGQTFEMQorOjEwNDJBMDAwRkQ0QzI3NzZFODg0Mjg0NEY2NDVBNkQxRUZFMjk3NzNDMworOjEwNDJCMDAwODlBRTdGNzM3QUYxNjY5MTI0MEIwOEQ5N0YyNzExMjM4OQorOjEwNDJDMDAwQjQ1RTlCRkY4MjI1MDMzRTQyNUU2QzRDRkVFNUM4NjRGMworOjEwNDJEMDAwNDJDMkM5QTlBMjQyRkIzOUQwNzgwOEYzRkZENjc4RjhDOAorOjEwNDJFMDAwMkY0NzFDODQ0NDQ5MUU4RTUzM0JGNzIzNzEyOTZEQjcxOQorOjEwNDJGMDAwREY0MTFBRkE2OEJCREFCMEUwNThBQTFCMkZDQUU3QjM0RAorOjEwNDMwMDAwREZDRENCRTUxQUQxQjJEQzRGQ0JFOUY3REFDMEU1OTZDOQorOjEwNDMxMDAwRTU1MTNBMjNBQzk3QzdGQjE5MUFCMDQzM0Q4NTBDN0E5NworOjEwNDMyMDAwNzE5RTI3RUIyREU3Mzk4RUI3RDNGMjU1MDM2Q0JFRkI5OAorOjEwNDMzMDAwREUzRTcxMTlEMDIxNDk3MjIzNEU0ODRGOTZCRDA1RjhEMworOjEwNDM0MDAwRUU3NzA5MEEyOUE1RjgxRDU4ODRGODREMDI3RTY5MTdGMQorOjEwNDM1MDAwMjdERTYxRjhERUZGODkyREQ0NDRGMTVERUI5MjdEMjFFQgorOjEwNDM2MDAwOUEyNzIyQTUwNzJEQUZGNTkxMzBDMjI1RDI5NEMyNzFBQworOjEwNDM3MDAwMTk4N0ZCMkE5RUQ2NDM4QTc0NTE5MDJFRkQyRTRBMTcyOAorOjEwNDM4MDAwREZFOEYwNUVCMjU5NDI3OEI1NzlGNkMzM0NCMzY4QTc2RQorOjEwNDM5MDAwRDE5NTdFRjU0NUZDQjQxREIxRTY4MzkxRjhBMUUzQ0QzRQorOjEwNDNBMDAwM0M3MzM4MzVCQzQ2RTZGNkZGRTU4ODhCRTBERjY5RkFGQQorOjEwNDNCMDAwQkZGOUYyRjM3RjM5NTI5RUNBNUYzMjc0RDg5MEE3MUNCRQorOjEwNDNDMDAwNEQ1Q0IzMjlCQ0YwNEYwNTUyRjFDRjAzNUE3OTI5MkIyQworOjEwNDNEMDAwODc3MUUyOERDQTlGMjc1MUZFRUI2RDI0N0Y5RTQ0RjlDMQorOjEwNDNFMDAwQUZBN0QxODVGOUVFNDYxOUYzNUQ4RDQxQ0NDNzQ1REEwQgorOjEwNDNGMDAwODREMjMxREU0RDEyMkE2RDlGMTdBNkY1NzVFM0U1NTY3RQorOjEwNDQwMDAwRDM3NjNBRjhGQzIxRDk5MEY3OTYwNzBERjVERDhBNjI0QworOjEwNDQxMDAwMjg4RjJCMzdEQjEyOTRFRTlEMTVCNjg0NUQwMDM4QThFQgorOjEwNDQyMDAwOEM5QzBCNzBCODMwQTVFMEJFMTZBNEYzOTlDNDlBOTA4QQorOjEwNDQzMDAwNzUwRUU1NTc2NTAwQ0Y0Qjc2RDI0Q0YzMzk0QUQ4QjZBNgorOjEwNDQ0MDAwOENFNjRCODI3NjkyMDhEMUYxNzMwNjA5QTFGREM1RUY4NworOjEwNDQ1MDAwMjQ2NDIzRURBRkJCNzJCNjZEMTlDRDc3Q0Q3MUNBNzZFQQorOjEwNDQ2MDAwOTk5MDA0RUQzRkVFQTRGRDlDNEEyQTJERDBDRjM0MjkyQgorOjEwNDQ3MDAwMDRGRDkwNUVGMUI3ODAyNzE3RkRFRjc0MTkyMTEzMTUyNQorOjEwNDQ4MDAwRTkxRDVCMEUyMUE1MkFGREFFOUY5RjUzMEQ4MjVDRTdCRgorOjEwNDQ5MDAwNTYxQkJGNEY1NDk2REY0ODY4RkQ4OTQ0RjdCRDM0NDUyRAorOjEwNDRBMDAwNEY2RDVDMkQ2RjFFQ0YzQ0NFMzk2QjRDRkQ5QkZBMkRCMgorOjEwNDRCMDAwNTEwNjZBRTQ4QTU0QkZFNzkwQzEyNkQ5RjdDRkRDNkY3MgorOjEwNDRDMDAwQjg1NjAwM0E4NTg4OTJBODNDN0I3MEZCRDY3QzlDNzdENgorOjEwNDREMDAwNjQ2NjBBQ0ZERDBFQTYwN0NERjIzNjQwNkNBODNGODg5MQorOjEwNDRFMDAwMzg4Njg0Mjk1QzhBNjI0Qjc0RDE3RUJBNEE2REM4M0Y5MworOjEwNDRGMDAwNEExQjQ5ODBERTVBMzdFMTcwMENGMjVEQTU5MkQyNEMxRQorOjEwNDUwMDAwRjNBNUU1MDcxQjg0RTk4NEFDOUQyMDIzREY3NUVENzVEOQorOjEwNDUxMDAwOTJFNjEwODMyMzQwRjlCNDQ0RTNEMzUzMDMzNTY1QzBENgorOjEwNDUyMDAwODcwMjA5NkRBNEU1QTVDQUQxMjZBODJGQkZFNjUxMUNCNAorOjEwNDUzMDAwRDUyM0U3NDdENkIwRjk2MzlFQ0U3RjEwRkUzMTZCNjQ3QQorOjEwNDU0MDAwQkZCRjlDMjU4NTIzQzBCNzJBNDkzODI5M0M5RDkzOUEzMworOjEwNDU1MDAwRUI1NDNBQ0UwM0FBNDg0MDdFQkFFRUVDN0IxREYwMUMyOQorOjEwNDU2MDAwOUZDQ0UwMzVDRkJCNDQ5MTk2MDI1RjEzRkRGODc0QkMzRAorOjEwNDU3MDAwOTI0OTU3REMwMEYzMzJDM0ExRTk4QkVGMzdDQTI4OEY4OQorOjEwNDU4MDAwNUIxQUNCMzE3REEwNTFFRTAzM0RCMUU1MTNCQjI1N0UxNworOjEwNDU5MDAwMkYxMzk4N0VERUVBODhEODAwM0U3NThFMkRCMTEzRjU3NAorOjEwNDVBMDAwNEY3NEVCRjUzNDdGRkY3N0M3Q0U4MDc1RTBFNjM5MzY4MAorOjEwNDVCMDAwRDQyRjdGRUU2NkY4QkU1RkU4QkQ4QTYwN0Q0OUMxRkEwMAorOjEwNDVDMDAwMjZGOTdGNDAwQzM3N0Y4QkQ2QkYzRjU4NDA1NDJBQ0YwNworOjEwNDVEMDAwMjU4RUMzMEJDRjg1RkVENjk0NTVBQUI0QkZGQjZGRDlFOQorOjEwNDVFMDAwRjgwRUI0MkY5OTMzNDVCMUQzRjYxM0FCOEZCRTQ1MTdGMAorOjEwNDVGMDAwNzFCMkU1RDQ0MDMwRTI4MzNDOTNFQjkyMzU2M0ZCMjYwNQorOjEwNDYwMDAwNTEzRTE5QUZGNERFMDRFMzk3NTQ0QjRBQTIzNEM1OTdFOAorOjEwNDYxMDAwQzUyNDg0RTM5Q0QzRTAyNTQ5Nzk3NEZFMkM1RTk5OTlFNgorOjEwNDYyMDAwM0ZDRjlFMUVGOEZCQzg1NTExQzg1NTQxMEFFRUFERENDMAorOjEwNDYzMDAwM0UzMUQzN0RCMTYwNDM3RTE5OTZBQjZBMjY1NzRGNUVGQgorOjEwNDY0MDAwQzhFOEFDQzlENTk2MDlCREVGRTVEMjdDQ0YzNzE4OUYzNQorOjEwNDY1MDAwOUFGOUJDQjRGQTY4MEREMEI1OUJDQTRGN0U5MDkwNDJDRgorOjEwNDY2MDAwQTdGMkIxNDBGMzNENEJCOTFDNTYxRjE1OTZEM0Y2N0YwOAorOjEwNDY3MDAwN0FENUEzMTA5MEE3MjVENkZBM0ExRDNGQTc1MkUzQjhFMgorOjEwNDY4MDAwMEZEQzYyQUI4REQwN0FCRkJDNzZDQTFGOUQzMERFMTJDNAorOjEwNDY5MDAwNDkwMTM5RUIxMUNCNzE3Q0U1QkI5MkEyRUFFODU5QjIzMgorOjEwNDZBMDAwODRDQTEzRTVBRjkyNUJCOEZDOThFNDZBQjRGMUUzOEQ3OQorOjEwNDZCMDAwMDlGMjJFOTVBMzBEOEQ0MTEyQTY3NDVCREZBOEEwN0M5NAorOjEwNDZDMDAwQURFMzcyMDZCNjI4MjlBNDc5MkU2N0E0N0MwNkU2RDM0QQorOjEwNDZEMDAwRDk5Rjg0MzRBMURDQjk5NDI0ODk1MkZBNkNBMDdEOTNDQgorOjEwNDZFMDAwMjJGODlFMEM4N0U3MTI5MjBGQkFFQTQyMDQyNzY5QTNDOAorOjEwNDZGMDAwNkJGQkZBRTE3MjEyQTY0QzRGN0EwNDlFNTdGRkE4ODYxNAorOjEwNDcwMDAwRTk3ODcyODhFNTlGNkJGQUEzREE0Mjg1NzA4MzlCRTVBRQorOjEwNDcxMDAwRjcwQUU1MzVFQTVDN0RGQjgzRDhCRjU2OUZFNjkzQjU4MworOjEwNDcyMDAwOTM3NEZENDFGRjE1N0E3ODZDMzU1MDVGRUJFRjhEQTZFMQorOjEwNDczMDAwQTIxQTk1OEVCRjlFRTdBNUU2M0M5NjNGQ0JGRDc3MEI3MAorOjEwNDc0MDAwN0Q0MUNBRjQ2NEFEQTk5RjZFODFFMzQ5RkQ4RjcwRDhBNQorOjEwNDc1MDAwOTcxQUU3M0VFMUJEQjA2QTI4RkY0MzE4RjBBNDk1RkYyMQorOjEwNDc2MDAwQTBFOTNGNTQ5NUQ2RkY4ODQ0QjYwODk0MEUzM0U2NDUzOQorOjEwNDc3MDAwOEIwOEE1QkJCNzJFNDlDMDk0REE2MEMyNzc2QTdFMkYzQQorOjEwNDc4MDAwRTFGQzdDMTUyQ0ZGNjBEMzI3NjFDMEI3NTZGRThDRTA5RQorOjEwNDc5MDAwNkYwMjdDMDNERkY4QzYxMjEyNDQyMTIxNjRGM0NGQkIwMQorOjEwNDdBMDAwQUY3RjAxRkU1RDlFNEZDODFDM0E4RUQyNEIxNERBODc1NAorOjEwNDdCMDAwNkQ1MjRDODA3RDQ3NzA4OTc4RDQyMDBGOUNFRjI4N0MwNworOjEwNDdDMDAwNEYwODM0OUQzMTM3RkEzNTU4MEEyREUwNTNGNUYwNjkxQQorOjEwNDdEMDAwRTM4RjA2QUYwNjQ3N0FGRTY0RTM5QkY5QTg3NjQxRjVCRQorOjEwNDdFMDAwOEI3M0E5N0M3OTBGM0I0MjRFMDVFNjIxMEJBMEM3RjNFMgorOjEwNDdGMDAwMDEyOEFBRDdGMjRFRUQ0NzNBMTFCMTJGMDg3NkI0Qjk4NQorOjEwNDgwMDAwREZGQzc5NDUyNEExOUJFNzY3NERDRjJEOTA2Nzc4N0IyRQorOjEwNDgxMDAwNDU0RjU3OUE3RjREOEZDNzI3QTBERUFDOTE3Q0E3Q0QxRgorOjEwNDgyMDAwQ0YwREYzMjM2MDA3RDNGOTU1RTlFN0Y3NTQwM0NDMkZGNQorOjEwNDgzMDAwMURERUNDRjM1QkVGRUU2RDg4NThFOERGOEI2RDdDQkYzRgorOjEwNDg0MDAwN0I3MUY1OTdBMDdGM0ExRTAxRkRFNTU2MDY1MUZGQ0EyMAorOjEwNDg1MDAwMzAxRURENkFFNjlFREFERjAwNUJEQjc0RTNDOTczRTlENAorOjEwNDg2MDAwNzhFNTY3MEY5RkEzRjFCMThGRUEyRjg1RDZCMzg1MzIyNAorOjEwNDg3MDAwRjNCMTU5OUVCNTc5N0I2MURFMDJGMDExREIwRjk4RTc0OQorOjEwNDg4MDAwNEQwOEU1MjNGRkZGQkZGM0ZFNTg2NEY0QkM4NUY2QUY4NworOjEwNDg5MDAwQjI3OTMxRjlGODA3Q0RFQkUzMTcwQTUwNUUwMTFFM0IwMAorOjEwNDhBMDAwRTNFN0EwMTU3RkJEMkIyODg2N0RBRTk5QUZEM0NERUI3NgorOjEwNDhCMDAwMUZDNUE3MjNFNzk1MTlDRjY3NUIwRjY1QUI1RjlCNUZBQworOjEwNDhDMDAwRjMyMDFFN0JBRTYxRkI4NDlFNDNGM0QxRUZEMEYzQzI5NQorOjEwNDhEMDAwQTVFMzAwOEU5Q0Y4RjkyNDRDRURERjI5RDAzRkVEQUYyNQorOjEwNDhFMDAwNDdCMzJGMzY1NzhERDIzRkIzMkZFRTZCMjQ3REFEOTM1OAorOjEwNDhGMDAwMDk3OTNBNjcwMEY3QzMxNDRFNkNCRjk1REE5RjA5QUE4RAorOjEwNDkwMDAwRTBBQTVFQkFDNUJEOTQ4RUI3RjVCQThENkVGMDJCRjVGMAorOjEwNDkxMDAwNzA3QkIxRUFBNTg3MzcyQ0EwRjgxQzc3NkQ3RUE1OUQyQQorOjEwNDkyMDAwQjI0MjhGNUJGQkJFRTdGOTI5RjRGQkU2NkJGODc3RUU0QQorOjEwNDkzMDAwQkZBMkRGNUY4MkZBNDE1RTNGMUQ1Qzg1RDI0MDM0ODJCOAorOjEwNDk0MDAwRjI0MkUxRDJFMTVGMkI3RkNBQzZFQ0QyMjdDMUNFM0E1OAorOjEwNDk1MDAwMTdGNjMzQ0NDRTJBRjRGNDJFMDVGQUU2NkM5NTk0MDdCQworOjEwNDk2MDAwODU5MUZERkU2RkFFNEZFRjAzM0I4RENFNzdDQkI1RUQ1RQorOjEwNDk3MDAwNDU2MDU3RUREQjMxN0JCRjBGRTBCQTg2QTAzRTNGMzc4NQorOjEwNDk4MDAwQjFBQkRGQTFDMEY4QUEwMDc4N0VEMjQxMzQzQjBCRDc4RgorOjEwNDk5MDAwRjlBMjZCMzRCQUQ2MEI5NzRFQzI3NkRDQ0U2MkY5RUYzMQorOjEwNDlBMDAwMEZBRkFCNUY0N0JCQTUzOENBRjJDRjM0N0ZCN0E2NDU4MAorOjEwNDlCMDAwRDQ5NUFCREZBRTA5MTdBN0NBNUY2Q0JFQjEwNkQ2REREMgorOjEwNDlDMDAwMTlBRUU4OUI3MzI5RTk2NjUwQkRENzQyRTE5ODIxMkFDOAorOjEwNDlEMDAwRjYxOEYwQ0JFNjgwQTVCREI4RkI3OTU3NDM4MkUyNzdBNQorOjEwNDlFMDAwRjc4RTI5MTNBRkI1NTg0NzI4MTU5MUNFNUE3RUU2MjE4OAorOjEwNDlGMDAwQTM5QzNEMDlGODczMDIxRTk5REREQTRERDEwQkY1ODNCNgorOjEwNEEwMDAwNTFBNTA1RjAzOUYzMTAwOUMxN0UzNDlEQkU0QjQ3Qzc0RgorOjEwNEExMDAwRTAzNkEzQkU5QjIxMUFFNzc1QjZFNkYzMTE5MUQ5N0U2NQorOjEwNEEyMDAwOUJGNzRGRDdGNTk3NkQ2QzNFNzY5MEEzOTkyMjkzRkYzNQorOjEwNEEzMDAwNEYzQjlGMjRFMDg5RDkxMUJGQjFFQUZGRUYzNURGMTk2MQorOjEwNEE0MDAwM0UzQTRFRTBCMzFGMjc2ODFBMjc1REJGNjY3REE1RDZBNAorOjEwNEE1MDAwMTI0MTA0N0Y3QzExMDkwMTNDNzlGMzYyMDRGQ0Y4NzY3MQorOjEwNEE2MDAwREZFMUEwNEFFRDNENTExRUMwRDQxMTE4MENBQTU0RUY0RAorOjEwNEE3MDAwNEE0MUE1MTA1MjY3NzFBODEwQkVEM0ZEMTE5NzhGOEVDMQorOjEwNEE4MDAwMjZENEFCQzNGOUNFMjZEMEEzRUIyMThGRjJCNzE2Q0IzOQorOjEwNEE5MDAwMzcwRUU3RDc2MUZFRUUwOTRDM0VDRkIxREZEMzBGN0E3OAorOjEwNEFBMDAwQjgwQzk0MEQ4NTZCNURGRjFCMERFMDA3MjgzOEUwMEJGQgorOjEwNEFCMDAwODFBOTUxRTAwQjExRDBDMzVBNzk0RkZGN0I0MTE3RDgyMAorOjEwNEFDMDAwNzEwNzdDQzQ0REY5M0Q1RjBFMTM3REZCRjVGRDdGMEQzNQorOjEwNEFEMDAwQ0FCNERDQzdDQjdEODE4OEExN0M2M0ZGRDRDMjIwNDVFQQorOjEwNEFFMDAwOTE4Nzk3N0I4MjUxMkNCRkJCN0Y0RUExMDI3NkNDMDE3MAorOjEwNEFGMDAwOUYwQ0RGQkRDNTMxMUNGN0QyNUZBQ0I0QTEzRjc2QjFDRQorOjEwNEIwMDAwMkRFMUQ0RTlBQkY4RTIxOUE4REY5NzA4RDFBOTc2NEFEQworOjEwNEIxMDAwOEY5QTVGNzRCQkMwN0U4ODFGQTgxODA3REZEMUU2NDE1QgorOjEwNEIyMDAwN0Y5MkY4N0Y2MTNGMEFEOUQzNjgwN0Y5RTRBM0U3NzM1RQorOjEwNEIzMDAwN0FEOTUzRjRFODg2RjMwQUY0MDNCMzczOEEzODNGQTdBQgorOjEwNEI0MDAwNTA2QjkzNDkxODVGQ0Q2MTc0QTIxQzlERjIzRjYzRkJDQgorOjEwNEI1MDAwNDMyOTdGMzVFNjBGMUJGMjdFMzkxMTg2N0RCNDE4QTBGQworOjEwNEI2MDAwRkE4MUI2Rjc4NkQ1MzBEMDVEMkE2Njc5QkIyRjk0MDREQQorOjEwNEI3MDAwRkRCMUY5MUIyNDA0NjA4QjE0OUY1MDdGRkQxQzlBNTdENAorOjEwNEI4MDAwODBGRTExNkNERjM5OEJFNUE1NjA1NDg1N0NCQzkyRTUxNQorOjEwNEI5MDAwOURDNUIxMjRFNEQ3NEU2NUY5Q0QxQTlEQzlBMzQ2M0UwMworOjEwNEJBMDAwMjA3RjQyQkE3NzBFRTdERENENTAxRUQ3Rjg4Njc4OUI3RQorOjEwNEJCMDAwQTE3Q0VENDU0Q0NGMTY4OTM1RkIwMEZGOUJGQjNCMEJFMQorOjEwNEJDMDAwOTdEM0ZFNzM4MTFGNjhGRkI5NEI0MjQ4MkY4RDJFRjc5NAorOjEwNEJEMDAwMjkzNjVDNkYzNUJBRENBN0NDQzA3MzgyQ0E1QzhBMDlGRgorOjEwNEJFMDAwOUM5MDgyRjRBODNDRTc2NjlCMENFNzFERTdEQjEyM0IzOAorOjEwNEJGMDAwMDUzODlGRUE3NjBGRDA3QTlCQ0I2NzYwNzk4OTY4RTdBMgorOjEwNEMwMDAwRkUwMUU2MEZERkM5RkQwMTY1RDRCQTAwQkI2MzI3NUY3MworOjEwNEMxMDAwQUZGN0REMzMyNTE3REFFRERCRkFCRjkwREUxN0RCRjNGNAorOjEwNEMyMDAwQjBERERBNzI3NjdFRjMyQzVEQTdDMTRGRjc0Q0EzMEI5MworOjEwNEMzMDAwRDMxRkQxRkVBMjU0NUYzRkQxRThDMkY0MDc4RDMyQTY0NAorOjEwNEM0MDAwOEY1MjNEMEU2OTM3MkQ0RjgyREY4MTk2Mjc2OUJFNkZFNworOjEwNEM1MDAwQzA1NjA3RjI3RjRGMjMzNUNENjhGQkJCMUI1RDFGOEIxMgorOjEwNEM2MDAwOTNDMTVGMjE2MzdFN0Q2MzEwRjNERkI2RDVBRkIxMzNBRgorOjEwNEM3MDAwN0Y4QUI3ODJDRUVCRTk5NzI3QTE3RjJGRjQ4NjJEOTIwQQorOjEwNEM4MDAwODA3OUNCQTQ2MDcxNTVFQUJCODY5RjZGREI2QUVGMDQyNQorOjEwNEM5MDAwN0VGREUxODA4OEUzMTA3MUEwRUI3Q0VCN0FDRDUwNkY1NAorOjEwNENBMDAwRkExQjIyRUIyRjMwQjBGMUIyODA2NUJEMEVBOEY3RjhFOQorOjEwNENCMDAwMTEwNjM3NzEyNTNENjlGQUVCMDY3ODJCREVFNkYwMDUyMworOjEwNENDMDAwOTNGOTY5RkFEQjAwRjUxRTNCQzJFMUYzMjVCQUNFQjNENgorOjEwNENEMDAwQUU3NzJGOEM3QkRFREIxQ0JFRTJDNEM2NDVENkUzN0VGRQorOjEwNENFMDAwMUZGQTczRTUzMzdCRTU3M0UwQ0ZBOEMyNzU2MDg3QTAzOAorOjEwNENGMDAwOTNFNzRENEI1NUMxNDZFOUVDMkExODg4NDFCRDY5NTVFQgorOjEwNEQwMDAwMzFBMThDOEUxRkI4M0EyNkQ4QTYzMTNCQzM0NkYzNkUyQworOjEwNEQxMDAwRTg4N0E2RTc5N0QzNzI1QTZGMTM5NEZCNzVFNUQwOUU4OAorOjEwNEQyMDAwQTY1MzJCNTg3OUUwOUJDNkYyNjFCRERENDAzNDNCMzU3QworOjEwNEQzMDAwMDlDRUQ2RTA1NzhDRjkyOTM2QTYxRjlGQjNGRkI2MDZEOQorOjEwNEQ0MDAwRjg3RDhBQzRDQUZGMUJGMjYwNzcyRDM2RDVGN0IwRkMxOAorOjEwNEQ1MDAwNkZCNUZBMzlBQ0JENEQ2NDc5NTczRTlCNzdDRTU2NTc0NworOjEwNEQ2MDAwMDJFQ0FFMERGM0RCODNDQjdDQTlGOUU2MkQ4ODk3NDNFQgorOjEwNEQ3MDAwNUU5QkRGODYwNTVCODNDQjc0RjNDOUZCQzJCNkYyNjUyRAorOjEwNEQ4MDAwMTVFOUQ3MTVCNzYyMjM2MUREQkEzQkE1Qjc4Mjg0MEI1RAorOjEwNEQ5MDAwRkVGOUY1Q0I1Nzc1RUIwNkFDMkJFM0Y4QkEzMEFFOUFCQgorOjEwNERBMDAwQUQyQjE0NkYyQUIzNTcxOURFRDY1RjY0QzQ1QkVFQzUxMgorOjEwNERCMDAwNDZCQ0FEQkZEODg4QjdEQzRCMzJFM0VEOTc3Q0ZDNzRDMgorOjEwNERDMDAwRjhBM0UzODdGNUUzNkY1QzY4MUMzRjdGOTE3MUZDOEQ2RQorOjEwNEREMDAwOEI4Q0UzRTc1RkY2QTlDNzRGRUFGOUE2QjdDNjM4QkVFMgorOjEwNERFMDAwNUM2QjFDQkZCN0Q2MzhCRTdDRTlBNzFCNUZBMzRGNjdCRgorOjEwNERGMDAwRkYxNkUzQkE1RTE1MjE3QUZBQzVGQjNCODM4Njc1M0Q0MworOjEwNEUwMDAwQzRENjc1QUQ3QzZERkY0RjgzQjBCRUJCNjE3RDA3RkYxRgorOjEwNEUxMDAwNEMzOTVCREYyQkRGRkQyODA4N0VGQkY1MTcxRDBDQzIyQworOjEwNEUyMDAwM0U2MzNEQUQ3QkI4MjJCNTZFRUNCQkU4NTZEQjYzQjRBOAorOjEwNEUzMDAwREZFRjRDNjVFQjRDRkY0NUNGQjg0MEZGQUYyRDY3RUI4NAorOjEwNEU0MDAwNEM5QzlGRTc3NjM1MjY4RkFGNzRBNEU2RTU4RkJCNzE0NworOjEwNEU1MDAwQkZBN0U1ODdFRDI1RjJCQjFBRTBDMzc4Qjk4RERCNEIyMAorOjEwNEU2MDAwODVDRDYxNkE4QkJBQTY4QTg2N0M2NzA1MkJCRkJEQjVFNgorOjEwNEU3MDAwQjA1OTA1NUY4QUE4MTZDMjNBRTQyRDI3N0ZBRUIwRDg5NAorOjEwNEU4MDAwNkY2OUUzNkJGMEE0MUY5RkVEOEI1M0UzNEYzNDhEM0ZBRAorOjEwNEU5MDAwRDEzMEJFOTY3NzRGNjNFNUFBMzhBOTE2RTBEOUNDRjc5MgorOjEwNEVBMDAwQ0RCNzg4QkY0M0ZENzJGNkUwOUJENjFDOUVBNDg3OEZDQQorOjEwNEVCMDAwRTU1M0YwQjFCQzA2REY1REUyRjQ1QTc1RDJERjEzQkVGNAorOjEwNEVDMDAwMEI0Q0Y4QkJDMDg0QkYwQjBDRjg1QjIzNTY5RjExRkU0NAorOjEwNEVEMDAwQ0NGNUJBNERGQzc5MDMwOURGMjY4RTAxMzkyMjY4NkZDMworOjEwNEVFMDAwQzY0NDk5OUYwN0IxRkVBQTQ0MkU1RjMwM0VDNEVEMkMwNAorOjEwNEVGMDAwOTUxMjkzNEI1OTc5M0Q1REQ3OTY4ODdDMUZDNkVCRDdBOQorOjEwNEYwMDAwOTlGMjlBRkQwQUNCRDE2OUY0QzM1OERCQUYxMjYxN0FFQQorOjEwNEYxMDAwOUJEQTFEQTE5REE4RDc0MzI4NEZBOTdEMDdGMzYzODg3RAorOjEwNEYyMDAwNjIyNDFDQjFEMDA3Rjc4QUVDN0M1ODkwNDMwRDAwQTc4RgorOjEwNEYzMDAwRTg5M0QwOEY5QUFFN0VBRjI4NzBGQjVBMzU5Q0VGRTQ5MQorOjEwNEY0MDAwOTJDMUE0MURFMDA4MTI4QzRGMjIyN0JGQUM1QzNFNkRCRAorOjEwNEY1MDAwMjQxQzkyMTg4OUMyMzg3NjU5MjIwRkQyNzE1QUYzQUVBNgorOjEwNEY2MDAwNTBGNDcxNEM4RjZBRjAwNEMzMDg4RjI0MzM3ODI0MzFENQorOjEwNEY3MDAwMTRCNkYyMDMzRjI4MzJCRjg1RDYwRjg1OTBCNzFGMjRBMQorOjEwNEY4MDAwNjAyNzZBRjBCNUI5MjMwRDRCQzE5RUNGOTMxMDRGQUQ4QQorOjEwNEY5MDAwN0VFMzc5Rjk2RkY4QkM1RUU0Njk2QjlBNzMzRjAyRDFFNgorOjEwNEZBMDAwMTgxMEJGMzRCNjFBRUREMDk2RUE1QTE3RjBBNTQyNDI0RgorOjEwNEZCMDAwMkVGMEQ3QjdGQUFDRTM4OUI0RDQ2Qzc3QzZBOTVEMEFGMgorOjEwNEZDMDAwRjk3NjZBOTc0MkRBRUE3QkIyMEVENjlERTNDMEM3MTYzRAorOjEwNEZEMDAwRTdEQUMzN0EyRTY0MjM0OURERkVEMzVCRUUyMTQ5ODNGMQorOjEwNEZFMDAwRkYzNDgxNzBCQTk1N0NDMzc3NjdCMEM4RDBDRTMxNTY5NAorOjEwNEZGMDAwNDQ3QkJFRDU2NzRCNDBBOEQxNjhGMEI3NzNGOEI1N0E0QgorOjEwNTAwMDAwMUQ2MkNDMjU2N0IxNUY3NjA2OERGMDlFM0RGQ0IxRjY0MgorOjEwNTAxMDAwNUU0NzlGNkMwNUQ3Njc4NTM3OERBRkNDRkQ0QjA1NTIzQQorOjEwNTAyMDAwMENFRDYyMzExMkQ0RjNCRkREQzFGODU0MkE3MEM1OTg3QgorOjEwNTAzMDAwQkQ5RUFFRENDM0RBRkI2ODM5RDhDNUJFODgwMkU3MkY1NworOjEwNTA0MDAwNTRFNDMxNEVDQzA1NzJBMEMzQ0Y3OERFQUVENUMxQ0ZDQgorOjEwNTA1MDAwQTM0OTBDRkRCNTgyMTI2QjAwM0U3MjE1NEI3ODNFNjA4MQorOjEwNTA2MDAwNkVBN0E1MUVERUJFRTM5M0VGQkM4RUYyMzFDNjg1RjJCRAorOjEwNTA3MDAwMjEyODU0N0UyQ0M2Nzk1QzBDOEY3NUQwNzRCMzE4MUUxMQorOjEwNTA4MDAwMDdBOUUzOTQzRDZBMjUyNzYzMUM0QzhFNUQ5MTg4RTI1NQorOjEwNTA5MDAwNjJBMTI2OTZGMENGRTRGREY2NkFGMEFCMzEzQ0Y3Q0E4OAorOjEwNTBBMDAwMTZGRUIyMkNFMTlGOTk4MjdGQkE2MzE2QzJGRjM5NDg3RgorOjEwNTBCMDAwRDNDMTNGOERDMzUzNDA0MkZEQjA2RjA3MDY4NTdFMDlDMworOjEwNTBDMDAwQjk1Q0QxOUZDQkY1RjA3RTBCMzg3Qzg0REM4NDc0RDM0MworOjEwNTBEMDAwQ0EzQjM5MUVCMjlEQ0ZEQzJDRTdEMzkzOUE0RjFEOUY1QworOjEwNTBFMDAwQ0ZDMjRDRjNGOTAyOUY0RjhGODNBRDU3QUVCQTg4MTJFRgorOjEwNTBGMDAwQTQ3Qzk1OUY4NjJFQ0I3OUZGNUI4N0U5NzJEMzE5RjE0QgorOjEwNTEwMDAwRDU1N0IzOUNDN0YyRDQzQzk2NzJCRTVBOTY2OTFFNTFDRAorOjEwNTExMDAwMEU0RkFGOURDQzM5MDJGMTMzMTNGOTdBNDNFQTBENzQ4NworOjEwNTEyMDAwRDlBRUYxOTU5M0FEMUI4NERDNkNBMENCM0RCQzlGNkNEQworOjEwNTEzMDAwRTdCMzNBQ0JGOTZDNEZDREU3N0I5QzJFNzc2NDlBOEYxRgorOjEwNTE0MDAwQUU3RTEzQUZERkNDRTUwQUVEOTZFRDhFQkRDRDYwN0Y3MAorOjEwNTE1MDAwM0MyRTQ2REExREIzNTJFM0QxN0ExREZBN0FFM0RCQkE2QworOjEwNTE2MDAwQjQ3QTZCRTFCQkIwNzhCODVFMzcxRjlGREI0NTBGRTFDNworOjEwNTE3MDAwN0VBQzBENkMwQzZBREY3Q0IxRURDNTVBQjBDNzY5QkI2MworOjEwNTE4MDAwOEREODdGODRBRDlCQjRERERERkFGRTY3QjZERERCQ0M2OAorOjEwNTE5MDAwRUJERDA3RjU5QTJFM0RBNUY1QkY1OURGRkY3NjQ3NTJBNworOjEwNTFBMDAwODM2MzFCQzI1MTM3RENERkZERkE3QUNCMUQ3RENERUM2QQorOjEwNTFCMDAwOUNCMDU4M0VFQUQ1RDkzNUMxRUNDRTdEMUM4MTY4N0NDNworOjEwNTFDMDAwMDBGQzk1QzRERjBCNzY0N0JCMThEQjNFMDBGQzQwOEQyRQorOjEwNTFEMDAwQkM5REY0RkI2RENFQjAyMEQwRjU1MzBFQzcxRTgxN0E3NgorOjEwNTFFMDAwRjlBQTUzQjYwM0RENkE2MzNGODJCQzZBMjMxMTg4OEIzOAorOjEwNTFGMDAwQkNDRjdCRDc3NkM4QUYxMTVEQjIzMzA0RjY5NjgyNDczOQorOjEwNTIwMDAwNDMzRDAxMTFFMzc5REE4NEE4MEFFQkUyMDkzMUZBQUNGMworOjEwNTIxMDAwMDNFRDFFREEyNTFERTdCNjAyMjVEMTI1ODBGRjk2MDg4RAorOjEwNTIyMDAwQ0NFRTYwNzA2REYwNUUxRDA3Mzg5QzE0MkU4ODBGNkVGQQorOjEwNTIzMDAwMzNDMTQ1QzdDMzdENzlFNzE4MTY2RjQzNDQ1MjJFNDJFOAorOjEwNTI0MDAwN0Y3NjRGMDhGQUVCMUY3MzJCQzIxQjZGNzJDQUQwM0VEQQorOjEwNTI1MDAwM0VGOTU2ODQ5Nzk2NDUzMDNFQ0YxMTQzNzgzQjFDMkUzRAorOjEwNTI2MDAwMTlFMkYxRUVGM0FFREEwQ0YxNzY2QkQ0NUNBQzhGNzAzMAorOjEwNTI3MDAwQzBGQzI3OTYyMUZDNkUxMjRCMkUyRDA1RjVENTFCQjZEMgorOjEwNTI4MDAwMDEzQzhCMjU4QzRCOEUwNzM2RTJGRUI2NkIzMTVERTQxQworOjEwNTI5MDAwRThCODVERTUxQjU1Njg3NzdDQjEwN0UzRUJEQ0JFNUVFMworOjEwNTJBMDAwMDJGMTU2MDU5NzQ5MDRFMjgwREM4MTVFQjQzM0YzMTdCRQorOjEwNTJCMDAwNzk1OEJFOThFMDM4Rjk5RjY3RjFCMjBFMzIyMDk3RDE0NQorOjEwNTJDMDAwQjQyMENFRTI4RUJCQ0FFQkQ1QTU2MEM3NTRCMzc4NTRFOAorOjEwNTJEMDAwQTI4NjVGODZGOEI2M0NDMkZGRUNDNUZERDBCRjYzQkNCQQorOjEwNTJFMDAwOUREODQzMjlGQTE2RjQwRUI3Q0Y4RDVBQzhDQjcwQkQ5RQorOjEwNTJGMDAwNDQ5NkY1OTJEOUQ1Q0I4RjhCRDlENUVCQ0RCMjVFMjIyMgorOjEwNTMwMDAwQ0I3QTQ5NTZDRjQ5MkVDRkI1OEFGNzE4RTZGQjc5MTJFQQorOjEwNTMxMDAwREExRjVBN0M1QjBFQjVGQzg3RUQ5MzUyNjZCN0VCRUQ1NgorOjEwNTMyMDAwMTUwNzkxNTJGNjBBRjA5OTdENDk0NjM4RDZCQ0Q1MTQzNgorOjEwNTMzMDAwMzhBMEIzNkYwMjkyM0Y4MEZCOEQwQkM4MDUyODk3QTM1RQorOjEwNTM0MDAwQjQzRkQxQTgwNjBFMzg0NjlGMkY0ODU4NTJFNzI3MUY3MgorOjEwNTM1MDAwQURGRTVBQjBGNzlDRTlDQkJERDNBRjA4QTIzRTlCRjY5OQorOjEwNTM2MDAwMzU5RTJFNjE2OTI1RkQ1RTAxNjkwM0NGN0Y4REU3OTcyQworOjEwNTM3MDAwMzQ4NDJEQzZBQjkxOTgxRTJFMjc5MThDNzQ3MDczRjhDRgorOjEwNTM4MDAwOEZDMjk5M0Y2RDUyMkVEMkZBMTZFN0UzNUFFQUFCQjBCQworOjEwNTM5MDAwOTlFQzQ2QTNCRTczODk2QTJEOUU3Mzk0QjNGODQxMjc5NgorOjEwNTNBMDAwMDgyM0M4NEQ4OEEwN0U3MTkwQTQ1Qzg2RTc4QkUxOUNBMQorOjEwNTNCMDAwQTU2MzUzRjJFMzA4OEU0NUY5RjkzRjg1NzYyMjU0MjMxRAorOjEwNTNDMDAwN0Q0MjgwNDczMzlGOThGOUMyNjdFMjhCNEZDQjI3NTdDNgorOjEwNTNEMDAwOUQyNTNFRjFDNkVENTlDOThGQjczN0NCN0E4OTJDRUJBNQorOjEwNTNFMDAwMjVCM0FCRTc4QjBCRDlENUVCQ0RCMjVFMjJDQjdBNDk5NworOjEwNTNGMDAwNTY2RkVEQkY0OERDREY3QTU5MEJGODYxQkM1Rjc0MTk1QQorOjEwNTQwMDAwRjI2QkJGRTgzMTk2N0ZDOTY3Qzg3NzJGMzRCNkY3MkRBNgorOjEwNTQxMDAwMzJCNkVGNUU2NDZDRUZCQjhDQjU3RkFBRkRBQjk3ODJCMgorOjEwNTQyMDAwOUYyNzVCMzlGOUREREYyODI3RTVBRUNDRjVGMzE3OEYzMQorOjEwNTQzMDAwMjI1NzJFMTVGNzkzNkU1MTIxQzkwMEFDNUY3NDlEMTI0RgorOjEwNTQ0MDAwMzAwRDI3MkNFQ0JCRTdCOUZDQkZFMDYwN0U5Q0I4QTgxMAorOjEwNTQ1MDAwRTJCRUY2OUY3RDlFM0Y5MDk4REY0ODlCRUY2OEYwNkEyMgorOjEwNTQ2MDAwRkFGN0Y3NzY2RTZGOTlFREFGNjFCRkNFQzlEM0E3NjczNAorOjEwNTQ3MDAwODMxRTIxMTAyQzRENjQ4NTRFOERFQTFCMEZGMTg0MjA3NAorOjEwNTQ4MDAwNTRDNDUzOUVDMEYzNjk3M0ZGNUQ3MDVFQzdGQzJFQzFBOAorOjEwNTQ5MDAwN0ExRDFDQ0YzQjk5NUZFNUU3QTVFRDQxM0NBRjlEQkE3NgorOjEwNTRBMDAwMkIwOEZCRjRBRTA5ODJBNTlGRTU5NEM0Q0UwNUNCQTJFMAorOjEwNTRCMDAwNUVCNDMzM0ExNDE3RUFDM0FFMDlFQzFFNTM5NzIzODE0NgorOjEwNTRDMDAwRkVFM0FFNTI2MzdCMTdCNzFGNEU0OTZDQkNBRTNCNjMyNQorOjEwNTREMDAwMDRFQ0ZGQjZBOUJCMUE2MDVDNjdGMjVGODk0MkUxRkU4QgorOjEwNTRFMDAwRUU4NDE4QzY4RkI2M0JEOTNFQzAxOTU2MDlBQzBCMkVCOAorOjEwNTRGMDAwNDVDNUYzNzczMzNDNzEyRDZFODgyNDgyRjVCQTc5RDc5MAorOjEwNTUwMDAwM0IxOURGRkM5Q0NFMjc5Qjc5QkQyQjQ5NTg1RjBFMzM5RQorOjEwNTUxMDAwRkNBNUMzRDdERTMzQzREN0I1NEVENkFGMTI3NDIzQkVCNQorOjEwNTUyMDAwOEU1NzEzNUM0RjgwOTBGNkQ5MDQ4RkM2RDlERjIwRDFGNworOjEwNTUzMDAwRjM4Nzc5M0QwNjBBMzM3RTNCOEQ3OTQ1QkMyQTIzM0ZBQworOjEwNTU0MDAwOTlGRDMwQ0FCNkFGNjVFNEU3MEVCRTlFM0JDOUQ3QjE0MAorOjEwNTU1MDAwNUZBNzEyMEI4M0JFRjM1NjI0QzgzMkM0MkYwOTkzQjE0MAorOjEwNTU2MDAwOUNFRjE0RjhCRjU2RDU0NkU1OTc3MjQxNjgyQjY1NzVEOAorOjEwNTU3MDAwRUY5OENFNTBEMjIyN0U2OTk4RkUxNTkyNTE1RUNFNzA4MQorOjEwNTU4MDAwM0Q5QkU5QTRFQjk5MzdCNTlFMUQyN0RERTg4NEVEQjY3OAorOjEwNTU5MDAwOTFFQkFDRjBBRUFENjc0QUUwQUE4Q0YzRUU2QTY0N0VBNAorOjEwNTVBMDAwMkI0MkVFMjA3RDMwOUY1N0VDNDgxRjVCMzk1MTM3NTAxRQorOjEwNTVCMDAwN0EzOTJCNDQzQ0U3NzA0RTRBMTBBMEIzQUI5QzI0RERGMworOjEwNTVDMDAwMzlFOUU3RjUxQUU3M0IyNTk4NzlEQzFFOEVFRjZFNEUzOAorOjEwNTVEMDAwQTc3NEY1QkFGOUI5RTc2QjFEMEZCNUMwRkUyRDZGMUVBNAorOjEwNTVFMDAwOTM4MzYxQkUxNzEzMDZGRTFDOTI5ODVGQTNDQkFEMzQ2NAorOjEwNTVGMDAwNjEzQzRCMjlGMzhGOEM5ODM3ODdEMzJDNTdGMTM0RjdDNAorOjEwNTYwMDAwNjkzNEI5RkRBQkE0MzAzREU0NEFBMERGNDE5MzJGNDU5NgorOjEwNTYxMDAwRjk1N0Q0NzM1RDEzOUE1REMwRDQ3MUU1NDFGNDEzMUYzQgorOjEwNTYyMDAwMkY5NzA4REM4MzMxRUIwMzJERDVFQ0M4NEI0OEI3MEIyMworOjEwNTYzMDAwRUUyQkFEN0RDNTFFRUFCMjgwRDcwRDQ0RDBGOUY1Q0M3NgorOjEwNTY0MDAwRkE3QTM0N0Q3MkRGQTdENDI3M0ZEMUU0N0VBNDNFNDFBRAorOjEwNTY1MDAwRkE1Q0RCRDFCQTFGRThEM0U1NjZGRUVCRkMzQTk1MkM4OQorOjEwNTY2MDAwRDVDREI3OUI4RkJGQzRDOUQ3ODU2MjA2NDc5NzQzQUVEOAorOjEwNTY3MDAwRDFEMzI5OEY3RUFGRDFFQkNEMzRGNDQ5NDdGNzJCMjExRAorOjEwNTY4MDAwMTg3MDU2MEEwRUYzRkM3NjM5NTlCRDdDMThCRjYyNzQ0NworOjEwNTY5MDAwM0M4Q0E0MDNDMzQzOEJEMzlBMEYzRUFCRjkzNDNCQjM4QQorOjEwNTZBMDAwRTNFMzZEQkNERTM2OEU1NzZENUVBM0M5ODlENjdGMUZERQorOjEwNTZCMDAwQzc1N0RFM0M5M0RFMTc1NTAzRkRFRDFBREVFQTRDRjVDNQorOjEwNTZDMDAwNUNDNjdBMUE3RTQ0MjdCMzU3QjQ3NTYyQjRGRURGOTY3RgorOjEwNTZEMDAwMTg3Rjk4RkI0RjI3ODdCRjE5OTY0MzE1RkRCMkRBMzgxQworOjEwNTZFMDAwNEVGMjFDRkEwRjhFNTNCRERDNTU0OUY3QTNCRTQxOEMxOAorOjEwNTZGMDAwMkZBMDdCN0Q4QzZGODJGODJGQkRERTM1RUIyRjRERkYwOQorOjEwNTcwMDAwQTdEMzQ3RTY3RENCNjhGNUE1ODA5NEQxNEVEMkVDOUExRAorOjEwNTcxMDAwN0M3RTZGRDJDNUUzODEzNzBBRDZFNzNDNDM1QzhFQTgxNgorOjEwNTcyMDAwNjJDRjJBQUUwRkMyNDQwMDFGMjQ0MkY4RkRCRjcwN0YzMworOjEwNTczMDAwMTNDRDhGMEQ0OTRBMTdGODNGQzRGOUZEM0I2ODdFQ0M2NQorOjEwNTc0MDAwQ0Y5Q0E0MkIwNDJFOTc3OUZERkQ5NERGRDY4NjVEMTFBNgorOjEwNTc1MDAwMjgxRkU3MkExREJFQTdENTNCMUJGQzVBQ0NFRTIyRjYxQworOjEwNTc2MDAwM0I1RTg3N0JDMDYzQUYxNDA5RTBENTQ5RTY2MDlDRjZEOQorOjEwNTc3MDAwRjEzNTk0NzY5NTIzRTExOTJCMTIzMjNFOUZBNkRDM0YzQQorOjEwNTc4MDAwODBFNzg3QjBBNUZDOEExMTlGNjRCMTJFMEY3RTYwOTdEOQorOjEwNTc5MDAwNzFERENCNzZERTY2NzhEMkI1MUIxNTlFRDQzRUY0MDg1QgorOjEwNTdBMDAwOENFRjI0OTlEN0I1MzM5RERGQjA1RDlCRTVCQ0I0RkI4RQorOjEwNTdCMDAwNjhEQUY3RDIyMTNCNTFFMDdFRkI5MDgwRTkzOTQzNUUwNQorOjEwNTdDMDAwNEM0Qjg2REM5ODRFMTgyQTIwMEEyNTVBRjE1MDFFQTYwQQorOjEwNTdEMDAwRTM4N0M2RTNGN0EyQTE0MjRDMEI4NzI2NjIxQTFDMkE3NAorOjEwNTdFMDAwQzUzNDZGRTg3QzRDRTVBMUE5OTg2RUUwNzI5ODNCMzQxMworOjEwNTdGMDAwMTNGM0RBRkRCNzlDQTE0QUNDRkI4NzNFOEZBOTZGNjhGMworOjEwNTgwMDAwMEUyQkU3RTdBOTFCRUU4QzEyRjA1NzRCQjAwRTUxRjlBNworOjEwNTgxMDAwNjg5QkJGMUNENzI1RjNCQzM2QjhEODNBRENDRUVGMDk1RAorOjEwNTgyMDAwQjc5QkY0NzYxRjJGN0ZDQ0M1RTQ3RTAzOTcwQjIyQzY2RgorOjEwNTgzMDAwODhERTZGN0UzRkFGQjdBMTJDOEFGNjc3QkJCNjFFMTYwNworOjEwNTg0MDAwMkUzN0FDODdFNkZBRUQ2OUVFMjczRkEzOTU3Mzc4NDhDQgorOjEwNTg1MDAwNzlGRDI4RjQ2MUU3QUZDRTQwMTRFRjBEMTAxMjQ1QkQ3RAorOjEwNTg2MDAwNDRDNEE4NDFFRkI2NkJGMDY3Nzk4RjcwQzNGQzY3OTBCMgorOjEwNTg3MDAwOEZERDU0OTAyMUI0RDBGRDg1NkQwRDBGODNERTU5NzBGRQorOjEwNTg4MDAwRUI3NTA3QThEQzdERTg4Q0RFRTY4MjcxQkZCMDAyOTk3QgorOjEwNTg5MDAwRUVGQkFCNkUwRjgyREY3N0MzRkM3QkYxN0UxMzk4REZFQworOjEwNThBMDAwMTBEN0RDQjFFMDhFRDhDM0M4NzU1MUI0QjM2OUJCQkJBNworOjEwNThCMDAwNUNCQTczRDBDRUU1QjczN0VDQTJGRDI5QUQzNkEyRThDRAorOjEwNThDMDAwRjhCNUU0MEUwRjUxRjRGQUVCNjQ0MTIxQjQyRkJFMjU3NAorOjEwNThEMDAwREZGMEJENjg2NTkxQTE5RDc2NEYyMjc4NEQ5OUExOUUxQworOjEwNThFMDAwM0NFRjNDNDNCRDlDQjkzMzhDRURGODM5QjlBRkVBNDI4QgorOjEwNThGMDAwNDMzQkE3NEZDMzJCM0I0N0E0RjQzN0FDMUYxRDgyMzU1NgorOjEwNTkwMDAwMUQ2MzJFQTYyRkQzRjFDRDE1MkVCNkFFQTVGQUNGNEMyMgorOjEwNTkxMDAwQjc3NEZENjc3QjJGMjRDNTFGNjlFNzgxRTcxMEIxRjhENQorOjEwNTkyMDAwRTI3OTYwNEYzOUU1MjhERTUzMzlGM0ZBNjc3NzFFRDlGQgorOjEwNTkzMDAwRDYzM0VCQUIxQ0QwNTcwNUEwNEYwNDRDN0RBMEFGMEE2QgorOjEwNTk0MDAwNDA4RkI4MzFENUVBOURFOTdEREI3NUEwNkY3QzNBN0Q0QgorOjEwNTk1MDAwMzM4QkNBQkQwNTNGRjhEQzk5RjVDREY5QkM3Q0IyOUIxMQorOjEwNTk2MDAwRTk5Qjc1OUNBRkNDN0MxM0U0RjVENjgxQkVBOTE4NUQ4QworOjEwNTk3MDAwREYwNEREOTlGNTREMjUxRkVGMUZBRDZGM0E2N0RDMUI4NgorOjEwNTk4MDAwRkQxNkNEQjkyRkQ4RDZGMDEwNEQzQjJBNkZDNTNDRDVBQQorOjEwNTk5MDAwMTdBMjlCOTY3N0NDQkUyM0Y2OTA0RThGOTA5M0ZGQzlBQgorOjEwNTlBMDAwRjg5MkYzNDM2RUI1NTE3RjY4RkRGQjQzMjYzREEyQzlEMworOjEwNTlCMDAwQzNERjI4RDdBNzM4QkZBNkEzQ0Y5MTRGMjlEN0E3Q0UzQgorOjEwNTlDMDAwOTI1QzlGNzI3NUNEODNGM0M1NkNFNTdBNjRGREIzM0I0MQorOjEwNTlEMDAwOEY2Q0VCQTlCNTI0NzkwOUVDNEJBNjc4MTIyREUwQkZBQQorOjEwNTlFMDAwQjRGNTg2RDhCREJDMjhDNkVENzQzRUVGRTA3RTFFRTY1OQorOjEwNTlGMDAwRkY5QkUxMEEyRjAyRkU5OUUxOEEyQzc2RDNGNjM3OTdCNgorOjEwNUEwMDAwMkFFMzYwOURBNkY5MkZDMjc3NUQzRTYyQ0FENzlCRUE2MgorOjEwNUExMDAwN0ZDNTk0QkZDMjU0QkY0MTVGMUU1Nzk0NzE3MEJFMThCQQorOjEwNUEyMDAwM0ZFNEMwRjNDMUI4NjJBQkIzRTJBNzg1NkVDNjJGODc2RgorOjEwNUEzMDAwNUM5MTI4RjQ3NzZFRTJCQzcxNDAxNzlBNUY4NkZEQjlERAorOjEwNUE0MDAwNTk3RjM0N0Y4RDI5QkYxQ0M3NEZFNUFGMzM5NUFGMzBFOQorOjEwNUE1MDAwOTVBRjM0RTU1N0U5RUI3NzlFOUE3ODFGQkVCRkYxNEJCRgorOjEwNUE2MDAwMDdEOTY5RTE0RjdBOTVFQjg5OEVDOUI3NDc5Qjk5NUM1NQorOjEwNUE3MDAwREUwNkVEM0JBNkRDMTE1QjQ2OTAyRjA4QzA2REY3OTk2MgorOjEwNUE4MDAwRjY3Rjk0Q0ZGNEZDNzI4OEY3RjNGMzA5QjdFMkJFQTk2RQorOjEwNUE5MDAwODNFRTlGMzA4RTExRkM3ODE2RjhGOUI1OUJCRkMzQTUzNQorOjEwNUFBMDAwNUM4RkY3MUZFMjg1MzdBMzlGQTNBM0I4MTlFMzE0OEU3OQorOjEwNUFCMDAwMkIxMjlFQ0ZDNjRCQUREQjc3MzYzMjNGNTM0N0IxRjU0NQorOjEwNUFDMDAwMzlDMkFGMjEwODU3Njc4RjkwNDlDQ0ZGMDc2MjcwREE1RgorOjEwNUFEMDAwMDZFRjA5MzFGRERFNTZEQThFRkE1NTRBNUVDRkZDMUIyMQorOjEwNUFFMDAwODU1MUY0NkYzQ0M4RTkyN0Y5NjJFODU3NzAxNkM3MkM1NgorOjEwNUFGMDAwRjdGNTFEQzNGODMwRkEzNUY3NjlGOEUwRkI0ODFEM0VBRAorOjEwNUIwMDAwNTAwRTlCM0IzRjNDMDBFQjZCREM2RDJENjczRjc2MzNDQgorOjEwNUIxMDAwMzk3MzA0QjMxQjdGRTRGQ0Q5RkFCMDFEMkVCNTU4RUNFMQorOjEwNUIyMDAwNkJFMzBFMTYyN0FGNEU2MDdFMDA5MThFQTNGNzJCOTg4NQorOjEwNUIzMDAwQzcxQjlFQTc2OTlGRkQwMEM3NTNEQ0NERTJFQ0I1RkVGNQorOjEwNUI0MDAwQ0NGMDNDQzJFQjNERTI2NjdFMDU2RDVFQTJDQ0M2MTk5MAorOjEwNUI1MDAwQURGRkU3RTBCMjE2RjgwMTY0QjMxRkMyQThFN0VFRTBCQworOjEwNUI2MDAwRjUxRDAxNjNCRDc0RjhCOTczMTgzRjJDMUU0QkUzREZCQworOjEwNUI3MDAwRDFGODVEMUJFNzEwQzA4NUZCNTlFQjdEQjg3MkIyMUFGNgorOjEwNUI4MDAwRTMzNzhFMTM3RjZGMTdFQzlCNDVGOTc1ODhFM0I4OEQ2QgorOjEwNUI5MDAwNkU5M0MwQ0ZERjIyQUFFODVGNTAxNTIyRUZDNEYzNEYwNworOjEwNUJBMDAwNzZGRTcwOUJGREJDMTBFODNCMTc4RkFCMjAxMDU3MTFBMQorOjEwNUJCMDAwRDBDNTI1ODI5RkYzNUM4Q0IzNzgwNENBRDdBODRFMTk1MAorOjEwNUJDMDAwREUzNzE5NzI0RjY0NzFBQjI3RDc2MDNDNDUyN0REQTlEQQorOjEwNUJEMDAwQzNCODI3REMyNTA5NzhDRkNBOUVEQjhERjZCQ0RENUUxNQorOjEwNUJFMDAwMTlCMzhBMzMxNTNEOEM2RjJGMzlCOTFFRjU2Q0JCQzJDMgorOjEwNUJGMDAwRUVEREI0OEI1MTU3N0UwNUI4QUE1NTk0RDc0RTI1NzM2OAorOjEwNUMwMDAwRkNBMjM5MEVEMjIxOUJFMzBGOERGODlBRTY2MUY0OEQ0OAorOjEwNUMxMDAwRjNGNTM3RUUwRTM1RThFMzkzODIxRTM3OTYwRkI5OEQxNAorOjEwNUMyMDAwRjA3NTAwN0MzRTgwMkI4NkYxQTRGMTYyOUIwREYwNzYyRQorOjEwNUMzMDAwQjZFMEQzQzY5NTRBNkQxMUMwNEI4MDQ0MzE1RUM1MTVBMAorOjEwNUM0MDAwMTQ3MTVDOUI5N0UxMzdEREI4NDQxMTNGRDBCRjFGNzNERgorOjEwNUM1MDAwQjZGMDM5QkNGRTQ2MTkzRjg5QzQ4M0ZDQTRDQzczRDU4OQorOjEwNUM2MDAwRUU4NkZDRjNDQzJGNkYxRUU3ODgyNzdBODE0N0U3MTc3MworOjEwNUM3MDAwMTZFNTI4RkFCN0I0RkUxNjhFNjE3MURFNjIzMUMxRkJGQgorOjEwNUM4MDAwOEExMjg5RDQ5NUQyRjlCNzE0QjM3NzE2NDVERjI4NzFGMworOjEwNUM5MDAwMTFDNTY2N0Y0NUJBNzMzOTc2M0U4MjQ1NTQ0NDZCRkUyMgorOjEwNUNBMDAwQzBDNkY1RjA3ODAxM0YxOUMwNjBEMTVDNTBFOTEzMjFGRQorOjEwNUNCMDAwNUU0MDExRDgzQjEwMjE4MUM1OTVDRkM1MzhGMjgwRkJERAorOjEwNUNDMDAwQjNFRTc3MDlGNjJCODQzNzkwRDNERTMzRTg1NzFDNDBDOAorOjEwNUNEMDAwM0ZENzY3REVFRjI4RjBCQUM5MzZFQzE3NDI1MzRGMTdBQgorOjEwNUNFMDAwQTRGQTA1RkQ4QjRFQTU5M0E3NEZDM0I5OTk5RDY4N0Y3NAorOjEwNUNGMDAwQ0MwRTE3NkRFQzVFMTUyOUNBQzFCOEMzQjZDMENEMkU0NworOjEwNUQwMDAwM0Q1RDlCM0M2NTg2RjU1NTkyREI2RjEyNzJFMERFRTdFOAorOjEwNUQxMDAwQ0FGMDQwMDZCRTZDMDMzOTAyM0Y2MkYxMzVFMTgxRjIwMAorOjEwNUQyMDAwRjRGNTM0Mzg0NTNBN0QyQjdGNjhCQjE0NEQzNDgxQkQ4MgorOjEwNUQzMDAwNThFMjYzRjFBQTYyMENDRjQ3M0E4NEZDMTk1RDU1M0FFOAorOjEwNUQ0MDAwRkUyRDk2OTIwMDk3QkYyQUFDNDIzQzYzNDc4MTJEMDRGQQorOjEwNUQ1MDAwNzE1ODIyRTkzRThDRUYzQkQ5MTc4NzMyQzlBQjU4MkNEQQorOjEwNUQ2MDAwQkVBRjlGQ0Y1NjhGMzEwRUE0NjUxNDdFNkZFM0ZBM0ExMworOjEwNUQ3MDAwNURCOTQzMEE0NUFERjRGMDEzMUVCRThFNzlBQ0NCM0YzRQorOjEwNUQ4MDAwRjZENjNFRTZCMTU4NzdGNjcyM0RENTkxNDc1NUU5RTcyQworOjEwNUQ5MDAwMThGQjAwMUY4OEM1MDc1RjA3M0NCNDhENTk5MDU5M0YxOQorOjEwNURBMDAwQzk0NkZERjQ1RkRFRjA0RjYwOUMwQzcwM0M2NzA1MDc1MAorOjEwNURCMDAwODFDNzE0QjJCMEZCRTU3OTE4OEM5ODhBMDcwQTMwQkUwNworOjEwNURDMDAwODYzODIwNjEyQzlDRDJCMkJGNzU1NTBGMjZDMUVFNzY2NQorOjEwNUREMDAwMkNGNTg1ODE3RUY2RjA2RTAyRUJBODE2MTc2NDBGN0IxQQorOjEwNURFMDAwREVCMTIxM0RFN0IyRjhBMDcyRTY2NzBERDNGRjMwOEUzOQorOjEwNURGMDAwNkM2RUU2QjgzMUJCMjlGRjJCMzM5RDFCOUZDNUY3MjI4NAorOjEwNUUwMDAwMzRGOEI1Mzg3NUYzQkM5RUYyRDZCRUVEOTk2NTg1OEYzMgorOjEwNUUxMDAwRUNGNjQxOUIyOEJGMTBDQTJGMUJFOUZBNEU5MTQyN0EzQgorOjEwNUUyMDAwMUI2NUNDRjczNDA2MzFERkREQTg2MERBREE1ODhFRTk3RAorOjEwNUUzMDAwNUE2ODNBMDdFMjNGNjJGMTUyRDg4RjA0MUYwRTVFNEI1OAorOjEwNUU0MDAwQUI2QzAyOUE2MDVDQ0I4RUY5QjA4RkVDMUFDRTEzNTUxNgorOjEwNUU1MDAwODA3MzI1QjgxRjRGRUREMEJGN0EzNkNFRTdFNzZDM0M5NAorOjEwNUU2MDAwNkVCNjdEM0U5RUEzMERFN0I3QjQ4MTVERDhDNUUzNjhFRAorOjEwNUU3MDAwRTVCNTBGQ0U4N0ZERTNBNjA5REEzRTM5RUNGQUFBQ0VFNgorOjEwNUU4MDAwRkU5QUVDNzVCMDczQTY1MkFEN0Q0QjFCRjRFNzE2NzkwNAorOjEwNUU5MDAwOUVFQzk5NkZDQzkzMzBDMEUzNzZCMUZDNDJFRkQzMDgwRgorOjEwNUVBMDAwMEZBQTAwM0FERUU1REU2NzMwQkY2OTMyRjczQjU0RDQxMworOjEwNUVCMDAwOEY4MjQ3RTZDNzY4RjcyOENDMEVBQUM4NDczRjg1MTRFQgorOjEwNUVDMDAwMEFDMUY1MDJCMjI5OEZDMzlENjUzRkIwRkZDMUY1RUU0RgorOjEwNUVEMDAwMTVFQkY1MzIyNTM3QTNBQzZCMUM4RUQxRTg0RkQxODE4MQorOjEwNUVFMDAwRjYwNUU4NjExNUM2N0RENThFRjI3MEI2QzdEREU0MzhEQgorOjEwNUVGMDAwMzNCQzQ4RDU4MzJBNUNGRERBRTc4OTVFRTRBNUVERkQ3NQorOjEwNUYwMDAwRTFCRTY0MjlDREU3MkM0RUFBMjhCRTU5OEU1QkU4RTU5OAorOjEwNUYxMDAwRjdDOUU4N0M0MUZFMzUzQzZCNzZDNzRENDBDNzMxQTlENworOjEwNUYyMDAwRkUxQzgxMzBCRTIzRTFFNkVGMDk2NzBCRUY3MjhGNkMzOAorOjEwNUYzMDAwRTg4NzNDNUU1Qjk4RTlEQzY1NENDNDA2NDE0NkMzRkFFMQorOjEwNUY0MDAwQTJBMENFQzM4MzM1NTgzRTJGOUM2RkM4RTc1NjE3MTlDMQorOjEwNUY1MDAwRUFGQjQzNjU4NjcyODc3QzlFQTFGQzZGQTVEM0Q3M0Q4MworOjEwNUY2MDAwQjI4MUFGMjNBNjc5Q0QzNzk1NjdEQkFGN0I4RDVEODE5RAorOjEwNUY3MDAwRjcyMDRCNDVDRDFFREQ4OEY3OTI4RjAzOEU0MTNGRjYwQgorOjEwNUY4MDAwNTZFMjNENUQzMjQ5QkI4NzQwQzIxMEFGRTI1NkMyQzhGRgorOjEwNUY5MDAwOUYxRTEyQzI3NTVBMkEzNkRBQTk2MkMwNjhBNzA2MUI2QworOjEwNUZBMDAwRDRBNEQ2MkZDNDI1QjhENzQ4MzhFRUYwM0FFNTYzRjEyQgorOjEwNUZCMDAwMjBEQTM5MTlFRUQ3Mjc4MkFBRkJERUExNTJENkNFMzJEQgorOjEwNUZDMDAwOUU0MTRCNDU3RTVFODY3N0VGNEI0NzNGNEYzNThGMTNBMworOjEwNUZEMDAwRkM0QUU2MzgzNTczN0RFMjEzOTVBMzNBRjk0QkRGNEU2MAorOjEwNUZFMDAwMjQ0Nzc1RUY2QUVDMDBEQUNGNEFFMTNGQkM3QjI5RkExRgorOjEwNUZGMDAwM0Q5Qzg0REFEMTE0Q0YyREMxMkI0ODk0Q0VCMzFEQUE3OQorOjEwNjAwMDAwNTBGQUM1MjFBNTdDREUxRTlDMjE2MzFDQkVDMkU4NkEzNQorOjEwNjAxMDAwNzMzMTM5Rjk4RTU3MzFDNDczRDg3RDRDNEVCNDdBQTM5RAorOjEwNjAyMDAwRDFGRjM2M0I4OTU5QUQ2N0FGN0FEOTNFRjlDNDVEQjEyRQorOjEwNjAzMDAwM0ZDMUZFNTI3RDk5RTAzQkFFN0Q4RDQzRjhDRTY1NTU2NAorOjEwNjA0MDAwNzJBMTFERkMyNkFGN0JDN0UyN0NBQTBFODRFRDk3RUEwNQorOjEwNjA1MDAwRkFBOTIyRUNCRDZGRkE2N0Q3RkI1MzM1RkYzMDM5RTk1NworOjEwNjA2MDAwQzJCOEUwM0Q0OTE2MTdCQzI3RjlERkZCNEY0M0ZFOTA0RAorOjEwNjA3MDAwMERERjE1REQ3MzM4QjM3REQ1QzdFRDJCQUQ1RURGMjFBOAorOjEwNjA4MDAwQjY1RkVEMTM4OTM3M0Y5MzlEQzNFRkJGNTUyNjRENzEyMgorOjEwNjA5MDAwODcyMkIxMDNGRDRGRENBOUQ4QzFERUU5NkI3NDA5QjBEQQorOjEwNjBBMDAwRUVDRkUwRjNBQzRBODZFREIwOUU4RTM2QUY3RDI2RkE5OQorOjEwNjBCMDAwNkFGMzg0RkI4NzMwQ0Y1NjFGQkIwRkQ4MkFEM0Y5MjI0RgorOjEwNjBDMDAwNUZCM0Y3QjJEM0MxM0JCQ0VGOTdBREYxMjFGOUQ5QkJCOAorOjEwNjBEMDAwMTc5MjIzMkE1QkNEN0JCNDdCOEExQTdDRUQwMDlGMDA0QworOjEwNjBFMDAwMjk4M0FCM0RDMEU4RDAxRUNDNEM4NzE2MEU5RjU2QUYxRgorOjEwNjBGMDAwMzVDMEU4RDA0QUVEODM2Q0UwMTE3RDQ2NzhBODhEMjc0NQorOjEwNjEwMDAwODA1REU4MjM4OTNBN0NEMzRDMjUyRkMzM0UwODU1ODUxMgorOjEwNjExMDAwMDI3OEQ4OTdCQzFGRTA4NTdCMTc2MENGRTc1NTA5RDc3OQorOjEwNjEyMDAwQzJCRDhGMjhCMzBGRkQ1NUM5RTRERTAwOUEyNzExQjgxMAorOjEwNjEzMDAwOTc1MTMwRDA5RjdDOUI5NjFGNkNGMEUyNjM0RkYyQjU3NQorOjEwNjE0MDAwNDc5MkQwOEYyODBGQTJGQzc0QzE2MDY4MUY0RDZDMDc2NgorOjEwNjE1MDAwN0JBNzBERkU0OTU1RkFCOEVFRTAwMkIwM0Y0NEMyRjQwOQorOjEwNjE2MDAwMDI5NTM4NDUxQ0NCRUQxMzBCNzlENzlERUYwQkE3OURGRQorOjEwNjE3MDAwQTk3NkU5RjA2NkI2M0I5REE0M0VCM0JFRTJFN0ZEMkFGMAorOjEwNjE4MDAwRkQwRkY0OEQ2Q0JBMUY2MUI2NzNDRDcxRjAxNzgxM0VBRgorOjEwNjE5MDAwMUY5M0M1M0Q4QzRGMzk0RTJFNzlEMDA1RUYyMUQ4Q0JCQQorOjEwNjFBMDAwNkQzMkJDQzM0QzU1N0ExRURDRkZGMTg2NDUwMjcxOEQwMQorOjEwNjFCMDAwQjlCRTAxN0MzQTZCMzRCQzUzRkQ1N0M3RTI0NkZCODgzRAorOjEwNjFDMDAwRkUxRTY5QkQ4RkY5ODEwMkY1NTU4MkMwRUUxMTI4RjBERgorOjEwNjFEMDAwRUU2NkEwRkU1MEM4OEE0RjM1RkUxQ0NFRkI5RTQ0RkRFNQorOjEwNjFFMDAwRDg0NjEyNzE4ODNCNTFFQjZDQjhBRTc1OTU5N0U1RTlDRQorOjEwNjFGMDAwRjc0NzM3RjkwNEJFMEZENUU4NEYxNDcxNzY4QUZFNzQ1RAorOjEwNjIwMDAwN0U2MUY3RjRCRjFGRkRGMzE3MUJGMTdFQTY3NEI5RDNBRgorOjEwNjIxMDAwQzdGNEQyNjhGNEZGQjRFMzY4NzQxQjI5MUY0RDlDNkU2OQorOjEwNjIyMDAwOUI1MEZGNzU0RUNBNEVBRkE0RThGNjIwQ0FBQkI3OUM5MAorOjEwNjIzMDAwODQxMzE2RUQ5QTM5QkRDQ0Y3RjY1RDI0NDZFMEY3MjhCNQorOjEwNjI0MDAwRUNBRjMwN0JEQTNFNkU3NkMzMEU5MjgxMkUyM0UyQUM0OQorOjEwNjI1MDAwNTgzRjc2MUZGM0E3QUQxMzNDMjExODZBNUQxQUZGRjI3MQorOjEwNjI2MDAwMjRCRkMwRjVGRjAwOEJFNzlCNzMzMDA4RTdDN0REQjNBMQorOjEwNjI3MDAwOEUwNkUxOUNBM0U3MTNFQjczQzg4NTdFN0UyRTEyN0UwQgorOjEwNjI4MDAwMDNGNzAxM0RCMzk4NUYxMEZFNDBFRkRDQzZGRTQ5Q0EzQworOjEwNjI5MDAwRDRGNzM2QzMzQjY2RUJERUYyMUFFQ0ExRjZDNkNDRkVCMQorOjEwNjJBMDAwMDZBOUU4QkEyOEQ4MTkyN0RFMTExNDU4NkY4NEEyMzUzOAorOjEwNjJCMDAwRTcwMjVDRkQ3Mzk2RTNCQjIzRUQ1NUZCRjAxQ0E2M0JBOAorOjEwNjJDMDAwOTQ5OTJFNUE5QzZGQkIyOURFMzZEREI5RTEwOTJFQUZCOQorOjEwNjJEMDAwNjVFQTBENjg1RkY2MTRCRThDRTNBQ0FCQ0EzQzBFQkMzRAorOjEwNjJFMDAwOTc5NTI5OUVENzY1MjM1MUY0MTc5QkNFNzVERkU0RTM3QworOjEwNjJGMDAwQkRFOUUzRTcxMzhFQzg5NzI2OTZDMkVGNzJBOEU4MUZBMAorOjEwNjMwMDAwMUI1QjFFRTlCNzUxQkNENUZCQTNBRkY5Mjg1RDdCRTY0QgorOjEwNjMxMDAwREM1QTA4NzBDMDNCMzE3QUJBMDdBMDdGMEJGOEM2RkE4NgorOjEwNjMyMDAwNkQwNkJCRTk0NDU5RUNCRkVFQUM4MkRGQTc5ODgyRUY2MworOjEwNjMzMDAwRDY2QkY1QkFEM0M0QjE5RkE3RDE1OTcxRTNCRUE3MURERgorOjEwNjM0MDAwRTJGRTI5N0NERDg1RDlFMTVGQTNGMzI1RTQwNUQ3NDQ4RQorOjEwNjM1MDAwNjgwRjcxQkUxOUY4RDlCQ0RFOEY4Njc3MzMxRTdBMUNBMAorOjEwNjM2MDAwMDMxODA3RDUyMzU4Q0Y2N0ExOUZDOTVEQ0Y5RDQ5NzZGNAorOjEwNjM3MDAwQUUzNkU3Mjg5RUFCRjk5MjZGNjBGQ0M0Nzc2NzFEQzYwNgorOjEwNjM4MDAwNzNCNTEyM0ZBMzg3REYzNzgwNzFBNTM5RDVFQzNEQzBDNworOjEwNjM5MDAwNzQ3MkY0MDBBNzlGMjgxQkVCMTE3MUMwNzBFRUIzREQ3RgorOjEwNjNBMDAwQzdDRkNCMDI5OUZCRDNFMDI0QUUwMTc2REUzMzUyMkU2OQorOjEwNjNCMDAwNzFGREQ5RDlGREYwNDE3QzM3ODUyNEYxNUNBMUZENTVGMworOjEwNjNDMDAwM0JEQzREMURDNkMzMDhCOThBQjNERjg1RTk4MThEQzdBMworOjEwNjNEMDAwODUzMENFNURFREUwMjdFOUQxQ0VEOTJBRDlCRTQ5QUNEMgorOjEwNjNFMDAwNEFFMjM5OUJDQkFGMThFM0FGNDNEQUJCODhEOUNERDNCMAorOjEwNjNGMDAwMDc2QjExRjMwRjhCQjBBRTgyM0YxRUUwNkJBREJDMDI5QQorOjEwNjQwMDAwRkQ2OUU5RThGQTFENkY3NEE2N0Y4Q0RFQUZDRkY2NURGQgorOjEwNjQxMDAwRkY2QzdDNzhDMkE3MThFQzQzMzMzRjNBQzkzN0NFNjg4QgorOjEwNjQyMDAwNUY5N0NFQkY3QzgyQ0I2NzAwMkFFQUY2NDlERkY0NEI0OAorOjEwNjQzMDAwRDZGODdERkJDQUQxRjBGQjRENkJGQzVFRTUwMTc4NEZEMQorOjEwNjQ0MDAwREM2M0ZERkI0NDVBQkFDNUE0RUZCNjY4RjEyOEYwMjMxQgorOjEwNjQ1MDAwMjE4NUQ4NUZFOUU1MTZGM0Q2RDZENTEzN0VFREZEOUVFRQorOjEwNjQ2MDAwQTgwN0Q2OEQzMjc1QUUwN0M2REZENUJEQ0MwM0UzRUVFNworOjEwNjQ3MDAwREE5Qzk5OUVEQUY4REJGOUY5NjI4MkRGNzdEMUNBMTNFOAorOjEwNjQ4MDAwOUMyRjc3OThGNEZDMkI1Q0FFRUZFN0YyQjVDQjE1RjFCRgorOjEwNjQ5MDAwRTBFRjU1RUNCRjZBRDE1NDhBQkYzMkNBMTdFMDUyNTRCQworOjEwNjRBMDAwM0E0OTdFQTZGMTRCNTVEM0JFRTQwQ0VGQjVGNEY4NEQ1NgorOjEwNjRCMDAwRjFCRDU5REVEM0ZDQjQ3OEQ5MDFGQzczMjFFMEUxREZGMgorOjEwNjRDMDAwNTFFRUVEQzk1Qzk0QTdCMjk1OEM2RkNBQUUxOTRDQzI1RgorOjEwNjREMDAwQkU3NkUyMjY1QjQyQzEzODk2MjhFMkE1NzBBNUE4NjA4OAorOjEwNjRFMDAwNEMxQkJGRjc3QTJFNUZERjg5RkQwRTVCMDk5NEMzQkQ5RAorOjEwNjRGMDAwNzExOURDMkVGMkQ3MzAxRTY2OUJGMUY3M0Y3NkI5QzJEOAorOjEwNjUwMDAwQ0QxMkQ4QkY3MThDNzQyNDY1RERDNkRGQ0IxODRGNzRGMworOjEwNjUxMDAwQkY1NzQxQzcyRDdDRUIzREZDRkQ5NDQyRDNFRjgyN0NGRAorOjEwNjUyMDAwNUFCQ0VGRkQwN0UxM0QyMTEyOEY1RTFGMkIwMjg5NThGNworOjEwNjUzMDAwRTlGREZGRTQ3Q0E5MzQxRDYwRUYxOEM0N0NFNDVEREQ1NworOjEwNjU0MDAwMzkwN0E1NUYzRUQ4MDVEQkQ1OEQzNTgwNEYzNTRFNDJFNgorOjEwNjU1MDAwOTMyREY0RDg2RkZENUVFRDc3N0MwRUMwM0IwQjhFNjIwMQorOjEwNjU2MDAwNzZGRkFDNkRFOTE1MDM3QkE5Q0FEQTdFNDcyREIxM0FGNworOjEwNjU3MDAwNUZBMTdBRTFCNzdFNUM5Rjk4NUU0OEE4RjUyQzNENjlFMworOjEwNjU4MDAwNDczRTk5REM0RDEyRjAzQjI4RjMzNkM1RkExRDIwRUE1MAorOjEwNjU5MDAwMkJEOTNCRDQ4NTcxNTU5MDY4QkU4QzlBQUZCNDdCMzJCMQorOjEwNjVBMDAwRjEzQUMyRUEyRjIxODkzMEYyMTE3OTJEMzgzNkY1N0I4NAorOjEwNjVCMDAwMjcyNTAzMzdGNUMzQkVGODIwREQxN0MzRUZBODY4QkY1MgorOjEwNjVDMDAwNTdBMkYxQ0JGODk4OTEzRjI2Qzc4REY5NzEyNjdFMzFGRAorOjEwNjVEMDAwQjcyRjUzQzgyMjE4N0Y1MkI3OERDMEJFNkU0QzgzQUUwMgorOjEwNjVFMDAwM0VGNDQ3MDZERjdCODQ4RTNGRjkwMDNDQ0M0OEQzREU4NworOjEwNjVGMDAwQ0NGRDhCMjRFQUM4QTFGODdDRkEyRURGMkZDQkU5MDQ2RQorOjEwNjYwMDAwMUZFQUFFMkQwMEJDRUM3MjExNzZFRjIyRTJDMjc3MTdDMgorOjEwNjYxMDAwNDhDNEZBM0M2OTA0REY2QTc2N0Y5QUZBMjk3REM5RUFBMAorOjEwNjYyMDAwNjlFQjVFQzc1QjAyN0JFN0EyNDQ3RUE3MTRGQzlDQUZDQworOjEwNjYzMDAwQjFERkFENEJCRDVCNzEyMUJFNUIxMTI0MzE2NjNGOTI3MgorOjEwNjY0MDAwMDhBNkFEOUMzRkU1NEI4QjRCQzExRjFBN0ZEQjJCQzNDQworOjEwNjY1MDAwRkQyQ0I5QzBFODRGMTNGM0VCRjAzREIwNjFCQjNCOUY5RAorOjEwNjY2MDAwREFEREI0M0M5RTY3RDRBMzM1MzlDQzZFMERFNUIwN0I0MgorOjEwNjY3MDAwQTFCMjk3RjU0MzVDNkFBMTVFRUY2RkNBMTE4Q0U1M0U0QgorOjEwNjY4MDAwQjVGMENCQkFGMjVBREUzRUNFREYyREJGMjQ2NzUxMDdGQworOjEwNjY5MDAwRDgzM0YyNzg1QURGODIzRkU3RjE3MUI1NzIxMjA4MURFNAorOjEwNjZBMDAwODZGNzNGMzY3RkEzN0U5NjdFM0RERjk0QzNDRTc3RTRBOAorOjEwNjZCMDAwNzNGOEI4QzVENjcwQzU0QkQ5Qjg3N0YzNzEzN0U1MThGQworOjEwNjZDMDAwREY4RDIzMzI0QkI1RUZGN0ZBNkYxNThFNTA3QzlGNzAzQworOjEwNjZEMDAwOTA1QTg4NTc2OTE5NjM0QkMwQkI2OUI3OERENUUyQzIyMAorOjEwNjZFMDAwMzJFQjA5OEQwRUMzRjg5NjU5M0M1MkQxNzVGMjBDQkJCMgorOjEwNjZGMDAwODUxQzZCRTlENjNBRTZBNzMyN0ZCRjlBQ0ZBM0Y1QkFERAorOjEwNjcwMDAwREFERTQ5MTRBRUYwMDEyNjc3Q0UwMEIxM0MwN0EyRjJFMgorOjEwNjcxMDAwN0Q3NUNFMkM4Qjc1QkZCNTBFRjc3MTI3RjIzMkFGRkJBRQorOjEwNjcyMDAwRTY3REFFQzhGRDhCRTY3QTREOUM0RUNBMkI0MTdDOEEzNQorOjEwNjczMDAwQkIzNUM4RkM4OTVBRkYyNzBBOTk1RkQxRENBRUQzRDQ5OAorOjEwNjc0MDAwQkY5QkQ0ODcyMUNFMThDRTU3RTE1QzU1OUE0NDEyNDk5RAorOjEwNjc1MDAwREE4RjI3RDAyQjk3MkExMDFGNzA1ODg1RkQ5MTQyMjg3OQorOjEwNjc2MDAwMUVDMUNGMTYyMjY4RDdCNTA2RDk3RTU0MENGNkQ2RDhFRQorOjEwNjc3MDAwMjA5RTg0RDRDOTdBM0JBQzg4RkZBRUEyOTY3N0Y4QTI1QgorOjEwNjc4MDAwNEQzOTY4MEY4NTA1QzQ4QkM4Q0VGMzRGMzgxMjBCMDEwNQorOjEwNjc5MDAwOUYyREE1MzY2MkY1NEU3Rjc3MEVCMzczQjcyQUY1MkY3RQorOjEwNjdBMDAwOTY1QUQwNkY0MzhFNjJCMDlGOEI4Njk4RkQ5REFFN0VDOQorOjEwNjdCMDAwQUExRTgzNkY5ODFGODMyQURFM0YyMDBBRTNDNzdBN0ZEMQorOjEwNjdDMDAwRjg5RTFDQUJGMzVCNERBRjcwM0ZFNEIyNkFBRTcwODlDQworOjEwNjdEMDAwNzJFNUFGRTkzQ0FFM0ZFNEMwRDhGNDRCNEU2RTNGMDhFMworOjEwNjdFMDAwRkFENzRFRjU2RjE3RkU4RTVDRUY0MUYwNDM1RTAzRjc2QworOjEwNjdGMDAwOUY2OEZFRkFCN0E2NDkyNUI0RkNCNTIyM0I3Rjc0M0VEQworOjEwNjgwMDAwOTIwM0UzN0U0ODZDRTgyRkY5OTBCQzlDMzM1MzQ3QkY1QQorOjEwNjgxMDAwQTc3MjI0QjZERUM0MURBODQ3MzU3RkRDQjVCRDBFODM0NAorOjEwNjgyMDAwNUVGREY2NjY2MzdFMzlBOTFGMEI3RThBRTU5QjFDMjRGQworOjEwNjgzMDAwNDFGMTdCQkQ0OUVGM0U5NEMzQ0U4OUJFNEQ2MkVEQjBDMAorOjEwNjg0MDAwN0VCNkYxRjNCRjFCN0YzMjREMDJCOUI5N0VBNjVDNkFGQQorOjEwNjg1MDAwRDdEREJCN0EyRTg3RDk3N0VGNTMzRTUyNzQ3MkI2QzIxQQorOjEwNjg2MDAwOTc5MDYwMUZGN0VFOUU5OTU3N0M5RTQwM0Y4OUY2MjJENQorOjEwNjg3MDAwRjBBN0U1NTlDNzAxN0UyQjZFODQ3M0I0Nzk5OEUxRDZGMQorOjEwNjg4MDAwQ0VGM0QyQzEyMUVFMTYyQ0ZENDJDRkU3MDgwNjdGN0M2NQorOjEwNjg5MDAwOEI4QkJEODcxNDZFMTE4OUZCNjI4OEMzQTMwMjBCNzBCQQorOjEwNjhBMDAwQkZFNUM3RjdCQkQ1REExOEM2RDVBOUNENEVCOTI1ODA0NworOjEwNjhCMDAwNzE3NjE4NEZCNzg2MTIwQ0RFMUYzQUNBRjk0RjhCQUJCMAorOjEwNjhDMDAwQTMwNkM1MDVCMDRGQkJEMTM1MjA4MTVGNzlCNTE4QUJBNAorOjEwNjhEMDAwODM5RjRFRDNDRTY1OUM4RTY4NzgzQzg1REZGMTZDNERFRQorOjEwNjhFMDAwNzIzQzMxRDQ4QjY3NTlFRjkwNTA5NjU1QkQzQTVCODYxOAorOjEwNjhGMDAwRkU4RTcxM0RGOThCQzcxRjkyNjBGREY5RjBCMTc3QkUzNgorOjEwNjkwMDAwMDg3Mjc4QzM3Mzc2MDI1N0YzOEUzREVFMjc0OURDM0Y1OQorOjEwNjkxMDAwMjQyNDkwRjMxNTdCRUM5NkVGNDg1MDhDNjFGRjM3RkNGNAorOjEwNjkyMDAwQzg4RjdBNzFDNTkzQ0VDNDYyREE3RUM1MzNFRjRFMjcyNQorOjEwNjkzMDAwNTQ5RThFMzUwRjFFMUMwRkY4N0I0QzYwRTc4NUVBQzAxNQorOjEwNjk0MDAwNzQ1ODlGNTY4OEU0OUI1NkVGOEVCOTczOTlCQzdGRjBCQworOjEwNjk1MDAwNTM2RjAzRDA0RkQ4REQ3RjM1RjZEQjc3QTU0M0ZGMkU4RAorOjEwNjk2MDAwM0VDOTY1RUIwRkFEQzdFMjI2MUYxNTEyOTMyREY0ODdDNAorOjEwNjk3MDAwQjYxRkZBRTA1MTE2NTdCMkUyNTk0NzAyNDI4MjU3RUM2RAorOjEwNjk4MDAwREUyMTQ1MjkxQ0FCNzc3Rjg0RkM3MkU5OEY5RUM4MDEwQworOjEwNjk5MDAwM0NBQzdFRDY2RUIwMjM2RUY4RDEyN0VEMTc1MjNBREZBRAorOjEwNjlBMDAwNjAyNzgzOEI0MThFRUQyNzMxN0YzQ0VDMUFCNEEzNUNDQQorOjEwNjlCMDAwQjNGODk0NTVBODAyNjhCREE3N0VCRkUwRDdCNEZDRkQyQworOjEwNjlDMDAwQTA5RDQwODhFQkZCODc3RjI3M0QwN0Y5QTg4RjVBNkU3MworOjEwNjlEMDAwRDBCRjkxQUY1N0VGN0U1N0MyREYzMUIyOTFDMUUyQ0Y0NgorOjEwNjlFMDAwQzNGOTg3RDE0RTMyRDcyNzY0NTAwMjNEQjVCQUFGRjMxMQorOjEwNjlGMDAwMjMzQkU1QjdENTdCM0U3QzEzRjg2RUI1NDkzRURFODc3OQorOjEwNkEwMDAwN0YxNDhFQjRDRjJCNzM0REY2RjlFRTgyQUNFQ0EzMUI0MgorOjEwNkExMDAwOUUzOEZFMDBGODIzM0U3OEYyOEYwRkMwM0REQTk1QTcyRQorOjEwNkEyMDAwM0U3RUUwN0IxMDE3RjY2RjZFMTlFNDdCRjU2M0FGRTZGMAorOjEwNkEzMDAwMTA5REZFQkYyQzk3QUQ5QkM3MUU3RDY0RDc1NjNBRkZCNQorOjEwNkE0MDAwNjM2RjM4MTE1QkM3RjZGRUJFMDRGQzNGQzc3RUZDRDcwMAorOjEwNkE1MDAwQjFFMDBGQkE2NUVGN0NGQ0REOUE1QjlFQkU3NDVDQTY2QworOjEwNkE2MDAwNzUxMUY4MzVBMUZGN0Q0NTdFNkVBNDNDMkI4MDMxNDkyMAorOjEwNkE3MDAwQzhDRjc4NkFBMjA3RTkxRDk0NjA1REZCOEI0MDA2QkIxNgorOjEwNkE4MDAwRjJFOEY3QkU0RjI0QjBDRjBFODZDOTIwRTA2N0ZGOUUyNAorOjEwNkE5MDAwNzcwRkRFNEVGMzFGNTJGQTM4MkRFODQzRTczRkRFODZDQworOjEwNkFBMDAwRkE5OThBMEQ0RDU3RURGOUYyOTcyRUFBODJENDgxNzY4NAorOjEwNkFCMDAwRjg2QTMyODg3QTczMDQ1RDVGQTE3NEFENEFEMUQ1NUNGRgorOjEwNkFDMDAwN0U5QzlDOTRFMERDNjBGNUUzOTQ4RUQzODE5RTk0OEU1MgorOjEwNkFEMDAwRDM0N0QyRjE0M0Y4Qzc5QzkxNzQ1QzkxNkI4QzRCM0FDRAorOjEwNkFFMDAwNEU1NjZFREYwQTg1N0IwQTJDQ0Y3OUI1N0RENjhENEY0OQorOjEwNkFGMDAwN0YzNUEzRkRBNEU5ODVEMUYwN0M5REMwRTA5QTlEMUI2NAorOjEwNkIwMDAwQkUzRDE3RTRFQkM5MUZFQ0RBMUE2MDc0NUU0QzExNzNEQQorOjEwNkIxMDAwRUM4OUUzMjU4NEYyQzkxRjFDODM1NzAzMUUwNkY3M0E0QworOjEwNkIyMDAwNjU1OERGNTdFQ0ZEMTVDQURCQjFBNzVGOTIxNDhDNkY3NworOjEwNkIzMDAwMjEzOUMyNkM5QTI3QzM3RjJGMTM5QTVGMjVCMENDOEQ2MQorOjEwNkI0MDAwMEZGRkJGMDU2RkQyRjYzN0MyNDMxRTMyRDIwRkYzMDdENQorOjEwNkI1MDAwQTlGQzIxM0QxMjk3RDcyOUEwNzcxMzYzNzBERUFCMTJGMQorOjEwNkI2MDAwNEMyRTU2MjVGQUJGMDI3MTdENjZCQzNGOTU2QkQzRjQ1RgorOjEwNkI3MDAwRkYzMDVEMjE2RTZDRDU5RTc3MTYwMEZGQTVBM0E3MzY2QQorOjEwNkI4MDAwN0YxOUU2N0YwMTJEN0ZEODI4Qjc2OUU1OTREM0Y3RDgyMAorOjEwNkI5MDAwOEUxMzEyRDgwN0M5RTcyNEQ5NDZFREUxNjM4RTQxMDk2NworOjEwNkJBMDAwRDdDNzFGREJFNTlEQTE5MTc0NEZFMTlGQzcxRjlERTFGMgorOjEwNkJCMDAwM0VGQzg3NjYzOUU3RjgxOTREQ0U0NzlGRDc5OUUxNkRCRQorOjEwNkJDMDAwNUJBRUMyRjY1NzI2RkM3RDcwRDI1QUZGM0ZDRkY1QzZBQQorOjEwNkJEMDAwMkExMkFCMkI5QTM4NzJGRDEyNDk0NDFENUY5QTgyRjczNAorOjEwNkJFMDAwMDM4ODFGQTNGMDdFRjA5ODFERjc4N0VEN0RGQjUxOEY4MgorOjEwNkJGMDAwOUJGNUM1QUEzNDc2RjQ5QkI5Q0MxRTU4RjU2Q0ZGNzQ4RQorOjEwNkMwMDAwRDA2QjFGRUNGQjI5RjJFNUFBQzdERjkxQzA3RjczNzA0MAorOjEwNkMxMDAwRjc1M0QyNDA0NTRBMEU2MDdERDBGRjBFQ0UwNzNGRUNDMQorOjEwNkMyMDAwOUYwRUZBNkI3NTlBMzhDMERGRjNGOUFDRkU5OUIxRkY4RAorOjEwNkMzMDAwRDU4RjdGNjRFOEZGMDZCNTRGNDIzRkQ5MjhFM0JDMkZDQworOjEwNkM0MDAwODZBRjg0RjlCRTdGRDgwMTI3MThFNEZEM0U3QjlEOTU3MQorOjEwNkM1MDAwOURGMzAyNUYxRjM1M0NCNUZCNjdCRjlFMEJFNzVFRjlGNgorOjEwNkM2MDAwRUMxREM2RDZBNkYwQUZGMEY3N0I1RjcyRjBGRDZERjhCNQorOjEwNkM3MDAwNzVCMDY3NUFGMjI0QkM4RkQwRUFCRjAyRkRGNTVBN0Y4NworOjEwNkM4MDAwQkQyNjdDQ0EwMUI5MDZGNjAzRjJCQzQ4OTU3RTVGQTUxNQorOjEwNkM5MDAwQzE5RjE3QjYxOUUwQkZDNTVGMzc0RUYxQjFGRDk5NDJFQworOjEwNkNBMDAwRjcxRkZGMDNCNjRENDY2RTAwODAwMDAwMDAwMDAwMDA5NQorOjEwNkNCMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJENTdDMEI3QzU0RDUxNgorOjEwNkNDMDAwQjVGNzNBNzNDRTNDQzI0QzI2MjdBRkM5RDM3ODkyRjBDMQorOjEwNkNEMDAwOTQ4MDQzMTJERUI0MEUwNDkxMjI2QTUwNUFBOUY1QUI5NworOjEwNkNFMDAwMDNGMjg4MjFDOUE0RjhFMjVBQkZDQjg0NDRGNDAyOUY3RQorOjEwNkNGMDAwOEQ5NTE2NkE2OTNCNzBBMTUyMjE3NjkwQTBCMTBEREM4QQorOjEwNkQwMDAwMDEyQzA2MDU2RjEwNUY3OEIxOEQ1QTE1MkIyNDYzMTQ4MgorOjEwNkQxMDAwQjQ1NzVCRUY1QTZCOUZDM0NDOUM0Qzg0REVGQkZCQkUyRAorOjEwNkQyMDAwREZFRjBCQkY3NkJCQ0ZEOTY3OUZCNUQ3RkFBRkQ3REUwMgorOjEwNkQzMDAwRUIwQzI4REVEQ0VBNTQwMEQ5M0Q2QjM2NjQ2MUFCNUFCQgorOjEwNkQ0MDAwRDQxNDA5RTAyQkZBQkIyQUQ2MDI4NDAwQzYwMzU4NUQ4RQorOjEwNkQ1MDAwRDVFMDc3NjFBQjVBNDA3MzAwRkY3RDQ1RkZBNzc4NUJCNAorOjEwNkQ2MDAwN0JGMEY5N0JFNUQ0RDZCNTM0OEZCNUYxNTdENDg3MjZCRgorOjEwNkQ3MDAwMDVCNjU3RjJCMDkxNEEyNUREQkZDMkJCQjYxODYwQTM3NQorOjEwNkQ4MDAwRjM5RjFGQTdGQjJCODM3NkQ1OEU2RDczRUEzREJGQTVCRQorOjEwNkQ5MDAwRkUwNjA5QUE2NUVBRDNGMzM4M0U2ODc1QThEQjU1QkM0MAorOjEwNkRBMDAwOUUwRTBCQzI2NTMxN0FGMjU0MjQzMjFCQTAwQ0U5QTA2RQorOjEwNkRCMDAwMTZGRkZDMzAwMURGMkI0ODgyNjZBODAzMUMwMTI5NTkwRAorOjEwNkRDMDAwQTEyMEI1QzY3MzBGQUFGRTYyNzU3Q0FDMkZCQkJBQzFGOQorOjEwNkREMDAwOEZGMzVFMkRCQjJDQjRGRTA3NzMyRDIxN0IzMUI1MzdBRAorOjEwNkRFMDAwQTY0MUQ5NDAzRTE4RUQwM0FCQUEyMTMyNjJGMEZCQURCQgorOjEwNkRGMDAwRDk4RTg1NUI4MEU5MEU1QTY4MUQ5MjIzQjQ5RDA4RjFGNworOjEwNkUwMDAwODFBNjdBODA2OTAzMERGRjg3M0M3NEM0RDE4RDAzN0MxMQorOjEwNkUxMDAwQjQwRTQ1QkY2RkM1NjVEMTREM0IwNEI5NEQyMTM5NjBGNgorOjEwNkUyMDAwRUI4NDA4NDAyOUQyQUQ5NkIwNUM1MkExNDc5RjI0MEE1QQorOjEwNkUzMDAwRDU2MzAwNkU0Q0Y1N0Y5M0Q2OTkzQkI0NTFBMkVCMUVGRgorOjEwNkU0MDAwQThFNkI2MTJGQzEyRERCNzM4RUJGMkZDNUZCMzNFNTg5MQorOjEwNkU1MDAwQTA5Q0U5MTlBOUNCMTc1RkIxQzEyQUY4QUYyOEEwMENGMworOjEwNkU2MDAwMjkyNzNBMzZBQkVGOEZDNjc5RTg3RTI2OEQwQUIyMUMwOQorOjEwNkU3MDAwQzY1NTdENjc3NDBCQzE4MTg4OEZFM0YzMjMzMzY3NjQ0NAorOjEwNkU4MDAwMTI2RThDNzFDRDhFQTI5MzEyRjJEQjI3QTdBODI5NDUzMgorOjEwNkU5MDAwRDg1NzkwMzNDNEE3NTNBOUNDQTcxRjREQzM5OUYxRkU2RgorOjEwNkVBMDAwOEY0RkE1NkU5NTUxMUU4RjQ4MDI0RjQxQzIxM0UxMEFDNAorOjEwNkVCMDAwMUExRjI3N0NCODExM0Y2QkU5QjkxOThEQkY2NUJDNTgwMworOjEwNkVDMDAwQTBCQUI5NTJFN0E0ODdGODI3RkUxMDZGOENBNzk1OEE1RAorOjEwNkVEMDAwNDNCNTdCODlCNzNFNERBMTc5NkMxMDVBMkIxMUJEN0UwRAorOjEwNkVFMDAwRTZBNzAzNUFCOTFEMDI2MTZFNUREMENERUQ1REM0RTcyMgorOjEwNkVGMDAwNkM5MjgzOTdGQjY5RDBEMzNBMTQ5RjlCQTM1NkQ3QUE3MQorOjEwNkYwMDAwNzhGREM3QjMzMzI0NUE5RjBCNTQ5REJGODU3OUQ0MUY5NgorOjEwNkYxMDAwOTRCRjMzOTFCRjhFMTg3RkVEQzQ0RkU3NDA3RTNBNDA1NworOjEwNkYyMDAwNjUzRUE0N0JDMUJCNzYxQ0NGMEIxMTVDQzcyM0QzMjE2QworOjEwNkYzMDAwMjQzMzg4NTQ1MDExMkYzOUZBM0EzM0MxMjcxMTdEODRGNAorOjEwNkY0MDAwMUY1QTVGRjYwMkIxM0VGM0ZCNzJBMTk1QzdFNTQzOTg2NQorOjEwNkY1MDAwREI0MkU4RTYzNkMzQTE0QTBBRDM3MzRBOTdFRjNCRjAxNworOjEwNkY2MDAwOTUzMzQ2OEZEMURBMDlDMTM4RkZCOTQyOUNCRjk4QjkzMQorOjEwNkY3MDAwRUQ5NjNDQjQ3RUUzQUY5QTcxRjg4N0NBODNCRTJBMUNCMworOjEwNkY4MDAwQTdGODVEM0UzQjJFRTVGRjU0Q0UyMDEwODJGNTcyMDUzQQorOjEwNkY5MDAwNDhBRUFFOUU4NTczQzE4REMzQkQzNjg4OENBNEQ5ODM5RgorOjEwNkZBMDAwNEM1RkNBNDhEMTM3RUM4QjFEMDUxNTMxRThDN0U3QUNGQgorOjEwNkZCMDAwQTczRTNDNDVDRjU5MjE2RTFDRDEyMURGOUE0NjdDN0ZFQworOjEwNkZDMDAwOTgyRTRDMUVDOEY3OTVBNzlBQjI5RThCOUI3N0FCOUFDQQorOjEwNkZEMDAwOUE0NUVCODQ4OTMwRjEyQjM5RjYzQzRDQ0E0MDIzMzM3NworOjEwNkZFMDAwRjBGOUNGNTYwNUIzOUVCM0M2RjhEMEUyRjg2N0M2QTU1MAorOjEwNkZGMDAwMEYwMTlDRjI0REVDMTM4RUIzNjIzODQ2NUNCMjlEMEJEMAorOjEwNzAwMDAwQUVCNkFCQ0Q1OThDNDNDNkU5NEE2NDkwMUREQkNGNTI3NgorOjEwNzAxMDAwOEE0MkJDN0U2ODlDNzgyM0RBNjE4QkMzMjc0OTc4QkQ5RAorOjEwNzAyMDAwNEU3NTg3ODgzRkY1QUVGMDJDQjYxMzI2QkIzMTdEQkU3QQorOjEwNzAzMDAwMUFDOUM3NzE3RDhERTAyNUJFNkVEQzczQzM2OUUyNkIzMgorOjEwNzA0MDAwOUYwNzM0N0JCQUMwODU2RjAyRDkwOUMzOEU4MDI2QTNGRgorOjEwNzA1MDAwN0NENzQ4RTMxQzEyQjZGNUVEMUZCRkY0N0IxQzlGRDIxMgorOjEwNzA2MDAwMjk4MzhDRjdGQjcwQ0REREI0NkVDNTk3NEU0Mjc0QzI5OAorOjEwNzA3MDAwRkEwNEZENkU3NjA4RkQzMUQ2NjlENkQ3N0Y3NDlEMjg1NworOjEwNzA4MDAwNzk5RTlGRTUyMDkzRkQ1REZGMkZGNDdDM0ZBNEI2RDI0RgorOjEwNzA5MDAwRjg0RDBBQkU5QUU2RUZCMjg2QjYyMzFGNTYxQzkxMTkyOAorOjEwNzBBMDAwNkYyQkRBQTQxMDkwOUMxNTJEOERGQUY3QkUyODgzQzBBMworOjEwNzBCMDAwMUZGMEZEN0I3RjU1Q0E3ODk0NjFGNDhGQTZFMUYzODFDMAorOjEwNzBDMDAwQ0Q1NjJGNUE0QzQ4RjcyNUZBQUJDQ0Q5NDM0MDhCQzM0OQorOjEwNzBEMDAwMDEwNDdEMkZFNzIyQkYxNkVCRkNEQUU4N0M3ODBCRDFBOAorOjEwNzBFMDAwQjNBOTQ5RjhBN0VDRUE4Qzg0RjE5RkE1NUM2RjVCOEE5MQorOjEwNzBGMDAwRjM2Qjc5NDhENzE0QzI0REU3RjAzNUQ4NUY1RTIwQUIwQgorOjEwNzEwMDAwMzI5QTg4OUMwNUY5ODlGRUIxRDVGQTBFRTk5Rjg2RkY2RgorOjEwNzExMDAwMDhERjg2RkQ1QTRBRjY4QkVDOTA3QzNGRkJCRjczMjA1QworOjEwNzEyMDAwRkM5RjAyQzJGRjM1QTBCRDhBRTA3Q0NCMzY4OUU3OEQ4QgorOjEwNzEzMDAwRjk2QTNBMUY1OTUzODBFRDFEQTFDNEVCQ0I0MTg5RjU4MworOjEwNzE0MDAwRDlDRkJBNDc5MjFENTgwOTQzQkM3NjY5MjBGRTJERTk3NAorOjEwNzE1MDAwODg3RjAyODkwQjVDNDIwRTJFMkZEOTk3RkU1NzY0QUZCMQorOjEwNzE2MDAwNURCMDgyRjU5NUY4NEU3NjQ0RUUxOUIxNzExQUNFMTdERQorOjEwNzE3MDAwRThCMjQyNDgyMzc5ODlGQkZEOUJFNTUwQjAzOEE2MUY1MQorOjEwNzE4MDAwRkQ1RDdCOTgxRkNCRjI5MDFGODg0RjdCNkUyMkZGNTNEMworOjEwNzE5MDAwQjQ0NEZFM0I0NzY2N0NBRDNDNTJCRDI2N0VDQTczOTkyMworOjEwNzFBMDAwRkZDODZGQTBGOUQzMjY5NTI0M0VBRkYzN0IyNEZFMTNDRQorOjEwNzFCMDAwRkNGNjMxOUQ0QjNCMjQ3ODRDMjIzRUFGM0Y1Q0EwMEQ0QQorOjEwNzFDMDAwRTQ2QjQzQzcyMzM2RDJGRjhCRjFENUNDQzdEMUU5QkFFNAorOjEwNzFEMDAwMUREMUY5NzgwRTNBMEZFOEE4QUM3Njc4RDg5NEYwM0EzOQorOjEwNzFFMDAwMTRCNTc1M0FFMUI0MTBGNTk2NzA2MkQ2NkI4MzdGRDYwQworOjEwNzFGMDAwMkNENTY3QzM3MTk3RDEzODVDNUZCRTIzMkM5NEQxMEIxQgorOjEwNzIwMDAwQ0EwOUMyQ0IyMjYxNzc5QjU1MUZGQjIzQzNERTNBMkZFRAorOjEwNzIxMDAwRDhFRDc3RTEyQjZDQjNFNjU1M0U0NDM4QkE1MzRBNkQ0RQorOjEwNzIyMDAwOTUyQjA3RUFFREJBMzFGN0IwRkQyQTVDOERGNjk4RkQ5MworOjEwNzIzMDAwNkE2MjlDMTY1RUU1RjAyRTQ2N0E5RTVDMDVERUM1QzM0QQorOjEwNzI0MDAwMDA5RTVBQTU3MjZCOEVERjBDN0RERjhDRjE5QjVERjg4MgorOjEwNzI1MDAwNjc5RTU3NDFGQ0FFNTVDOUZFNzg1NUEyRjM2MTFCQjAzRAorOjEwNzI2MDAwOUVGNjk1NDE2ODJCQkUzRjFDRjlENEEzOTFCRDJFOEY4RAorOjEwNzI3MDAwNUU1RjhERjE0NTYwMDk1NDUzOUNGMUFGMTkyMkFFN0JERQorOjEwNzI4MDAwNDY2RjY3NjVEOEI4NUQ1QjZEMDExRkJFQTdCNzUzMEUyQgorOjEwNzI5MDAwNDk0ODVGQUZFQTNCNzIxNUQ5OUQ0RUFCQzZGMTk1MUFDRQorOjEwNzJBMDAwN0RFOTdCN0NCRjQyNUQ4QkZDQ0NCM0I0OEVBM0Y3RTI1RgorOjEwNzJCMDAwRjhEOTIxOUNCN0FGRjM1REY3RUQ3MTdFQjlCN0UzRDE5MworOjEwNzJDMDAwNTExNDA3RkRDQzAyMzVFMTI0RjFEMEYyNzQwQkM3MzEyMworOjEwNzJEMDAwQkQyM0RGRjFFMEIyQTFERTExQjUwMUUyRTlDMTlFQzYzNgorOjEwNzJFMDAwNkE4QUE3RUU3NDZBNEM5N0FEN0Q3QUE0ODBGMTMzOEZEOQorOjEwNzJGMDAwRTNFM0U3OTYwRTYxQkNFRDNEMDMyMUQyQkI1OUYyQUQ0RAorOjEwNzMwMDAwRDc4RUMxRkVFNDU3MTVBRjlEOTVDQTc3RkRDMjA5M0NFMworOjEwNzMxMDAwODRFNUJFRTFDQjhBNERDNEJGMDBGMjczMzU1RjZDM0Q5RQorOjEwNzMyMDAwNDFGMjdBRjZDRjBBOTBERTU1MzYzRUZEQUUxRkQ3Nzk5MAorOjEwNzMzMDAwMzgxN0QxMzAwOTYwODIyRjVDMTFDMTUxMzMzQkQzQTc3QworOjEwNzM0MDAwOTM3RTA3NEUwMUVCRUJGODZFMjUwMUI3MjBENzFEMkE3RgorOjEwNzM1MDAwMjBCQkYyODYwODBGMjdCRTYxQkEwRjQxOTlFMkZGQzkzMAorOjEwNzM2MDAwM0Q4OUQ3QTc1RTA0RUZGRjYyRDgwRDM3NzgwOEVGOEYwRAorOjEwNzM3MDAwQURFQTgwNzdDOTJGRUFGRTMzMUYxNzk4OEM5RjA2QkVBRgorOjEwNzM4MDAwRjczODY3M0M5MjJFRTI3Njk5NzBFQjU1OTI4RjdGMjcwMworOjEwNzM5MDAwNDNDNEY5MUJCRTk0MjVDMjY1NUYxNEJDQUI5MTVGN0RFRAorOjEwNzNBMDAwOEJGMzc5REQ3RDlGNTI0MDg2RUQ5N0YyRUM3MDkyNzhGOQorOjEwNzNCMDAwRUJEN0U5MzY5NkRGQ0Y2QzAyRjczRjVCRUEwQTM1RTE5RgorOjEwNzNDMDAwN0EwRTJFQURCREJDMDdERjc3RkU5RkZDOTdBQjVGMTczMworOjEwNzNEMDAwMDdBMzY5QjE0QzYyNzlBNTExREZFRjlDRDcyMkIxMUVEQQorOjEwNzNFMDAwNDI2QjFFRjFDRDNDREVEMDEzNDM2RjBDN0RDOTVCM0E3RQorOjEwNzNGMDAwQzQxRjRBRjI5RUUxQjQzRUE0NkZDNkQyOTE5MjhENzAzMgorOjEwNzQwMDAwQkI1RjAyOTI2M0VGNkFBNEVCNkJFMkM3MjBBQzJFMjA1NQorOjEwNzQxMDAwN0EwMjFEOUZEOEM4NUYzQjNBMjU1RjI4QzlGOEMzRTlBNworOjEwNzQyMDAwNkVFNjVGRUZFQTYwRDM1NEU0RDczRDhCRjA1OUQyMEJBMAorOjEwNzQzMDAwNUI2QjcxQjJGOTgzQjBBMTAwODM0MzY4NEJENzA0RUU1NAorOjEwNzQ0MDAwMUQ3MDFCRTkyNTI4QUQ3OUU0Qjc3QjNCQUFCRTQ1NzZDNAorOjEwNzQ1MDAwRkQzMUQ0NDM4QTFCN0U2NkY1MzJEREMxN0E4MEVEQzRFRQorOjEwNzQ2MDAwMTYwQTNDQjE1Rjc4M0Q2QzU5MUI5NzQ3NzZBNzRGM0Y5MgorOjEwNzQ3MDAwOTU4RUYzOUQ0QTU3NzlERTRDQkY1NzIyQkFCRDdGRkJFQworOjEwNzQ4MDAwQ0M0REYzRjc3RDZFNjdGOUU1OTMwRUM3QzU2RDlGQTZFQQorOjEwNzQ5MDAwMEJGRUFDQzlGMEJEQzY3OEE5Qzk2MjYzRUFGNUJCQkRGNQorOjEwNzRBMDAwOEIyQjAwQUVFQzQwN0VDN0UxMzIyNkI3MjBBRjNCQzM0QQorOjEwNzRCMDAwMUY2NDdBMzJCQTMxNzFFMkZDQ0JBNzUxQkMxQ0QwOEQ2QgorOjEwNzRDMDAwMzM0NDI0NTAyNkM0RUM3M0E1QTMzMDUyMjBGMjg3NzBCNQorOjEwNzREMDAwMEVGMjM3QTNFNkM3NkNBRjUzRDAwRTUzMjgwRUREODlFQQorOjEwNzRFMDAwNzkxMTVCNjQ3QzlFNzQ5RkVDNDJCMzJBRTJBQzk2NzQ4MworOjEwNzRGMDAwNjFFNzVBMUU1MTQyQ0RGOERFQ0Q0QTRGQ0EzMDZDOEIzRgorOjEwNzUwMDAwN0REQTBDNDUyMzdCNUZDNkYzRTZERTA1QUNERjE2NDc2QworOjEwNzUxMDAwNDgyMjNCRTQyQ0ZENDVGQTg1Qjg2QjJBQzBFRUJGQzk3MgorOjEwNzUyMDAwQ0M3RkIzOUM0NkVCN0FCMTI2QzNGRjA1RjE3NTZDNTc0RgorOjEwNzUzMDAwRjQyMDg1NkZERTE0QzgyNEI5Q0U5MjVEQkNFRUM5NjcxNQorOjEwNzU0MDAwODVGRDMxREIxQjM5RjJBQjlGOTFCREU5RDNGM0E3MjQ1NQorOjEwNzU1MDAwRjZFNjc2RjJBRjg2QkQwMUI5RUMxMEUxNjdFQThCN0EwOAorOjEwNzU2MDAwOUFBOURCMTlDQzNFOTgwRjEzOEZGQTlCNUQ0OUVDQ0I5RgorOjEwNzU3MDAwMjRBODRFNDMxNjVGRDRCRTk4RTU4OEMxRkU4NTdFMjFCRgorOjEwNzU4MDAwMzJBM0EyMEJGNTI4RUU3OUIzM0QyQUM4RDBGREFGNkUyOQorOjEwNzU5MDAwOEZDRUMxQjQ5Q0FCQjUxODVFQ0E1NzdBMEZEOUUzRjA1MQorOjEwNzVBMDAwNjFEOEExMTg1RTQyOEMzM0YzN0IyNDcwNUNFOEFCQTVGNAorOjEwNzVCMDAwNjQzRjhFQ0E2OTY0NzdBNkEzREM3MUZFMkU1RDRGRDI0QworOjEwNzVDMDAwM0YwRDdEOEJFNEJGQTFGMzlBMTRDMkY1NTM1RDU1MEVCOAorOjEwNzVEMDAwNTI5QjE1QjlCMkY2Njc4QzlGOTUwM0YzODNBMEMzODVDMAorOjEwNzVFMDAwRUM5REYxNUUyQjM4MzRENzQ4RTI4Nzg1RjkyMEFCRDg4MworOjEwNzVGMDAwOEY3QjdGN0ZBQjM0OUJFQzIyMEEyRDZERkU5OEMxRUQxMworOjEwNzYwMDAwQzE4QTVDMUJCRkU3QTlBRTkyMzRDMjkxMEIzMEJGNDU2MworOjEwNzYxMDAwRjk1NTc2NEExQzI3OTg3MTZEQzY3MTMzQkVDMEMyNzk4MAorOjEwNzYyMDAwNjMzNUM3MTNCMjE0RDZGNzFEMTJGM0QyRTJFMDY0RjY0NQorOjEwNzYzMDAwNTM3NzYxMUU0RTcxNkI3RjE3RkEyRDZDOUY0MjNGNEYzRgorOjEwNzY0MDAwNzE0QUIzNkIxNkFGREI1OEFGNDFERjVEQTkzMzcyQTA0RgorOjEwNzY1MDAwNkNFMEZBOEQzNkYwQjkwQ0ExQ0NCOEJFMTJCNTExOEUyMworOjEwNzY2MDAwMDM5RkRCMTJBRTFCRkMxQzhDMEYwNjNGQTcxMDNGQTUyRgorOjEwNzY3MDAwRkYzRTNGQTc2NjA4Qjk5QUY5RkEzRjVEN0ZFMThBNDk2NAorOjEwNzY4MDAwOTA2QzVGRTBGRjk3RjU0RjA1RkZFRjdCNDRCRUY1NUEyNgorOjEwNzY5MDAwQUUyNzY2NEYwQTU3Q0M5Njk3MjExRjI2NTAzQ0VFOEQ5OQorOjEwNzZBMDAwRDkwNzA3RkUyMzdDOERFRDY4NjU3QjMzMDlFRDBEQzU5OQorOjEwNzZCMDAwOTkwNTc1NjFCNjJGMTM3MzQ1QkU2NEI2MUI1Nzc2QzIyNAorOjEwNzZDMDAwNEQ2NDFGMjc0NzMwMkVCRDA0RkJGMTI5RkQ0NzFFRUZGNworOjEwNzZEMDAwRTNGQzMyMDNFOTFFRjdGQzgyRTVCQkYwRDI1ODBEMzIyMQorOjEwNzZFMDAwRTdFMjdCQzY3NjJCNUVGMjdCRDA5RDk5NzQ1RkMwRUM5RgorOjEwNzZGMDAwMzc4Q0I4RDQ4ODQ3Q0RFMzhDNzhENEYwMjcwRDNBMUY2NworOjEwNzcwMDAwRkUzREMzRkY2NDA2NUQ1N0Q1MjBFOTFCRUE1NUY4MzFGRAorOjEwNzcxMDAwMkZDMzVFQTM3OEExM0JCRDdBMzdERjFGMTkwRTcyMUVGRgorOjEwNzcyMDAwNTAwMjJBRURFQkEwQkU3MjFDNTZFOTcwNDVFNEIxMDM4RAorOjEwNzczMDAwRjVEMzY5RDJDMzMwRjI4NUY2MDk4MjJFNEI2ODk4MzRBRQorOjEwNzc0MDAwOTAwRTBDQjc4MzE0RjdFMTAzRkNGRUE1QkFCRjI4QzQ2MgorOjEwNzc1MDAwMzEyQ0I0MDZFMEY4QkY3MDJDRjhDOUVGMTY5NjYzOEI5NQorOjEwNzc2MDAwRUIzQ0E2QzcyMzJGOTk1QUE0RkI3OUUyQUI1NTgxQTAyNQorOjEwNzc3MDAwQkRGQzFGQTc5NzQ4MkMyODI3RkVGOEZFNDBFQjc3Q0NDRQorOjEwNzc4MDAwRjYzMUZEMDUyQTc4Mjk4RTJGNTBDMjkyMTdERjlGNTFCRQorOjEwNzc5MDAwQTc0OTE3MzY5MTBDM0Y4REYzMTVDQ0Q1RDg1RjE2MEM0MQorOjEwNzdBMDAwQzUzRThEQTc3ODI3ODk1QzdBMzJBQ0JDQ0U3QTQ3Q0ZBQworOjEwNzdCMDAwNjExQkYyMjEzMEI3NzFCNkRCMTI4QkQzRUQ1NkJGQUYzMAorOjEwNzdDMDAwODBGNjhGM0E0NEJDMEVCNERGMzc5RUVEOTI0NEVCNTEwNQorOjEwNzdEMDAwNjYwOEZFMDQ1NDkxNUZCOTQwNjVCQjU5QTlDQkIxRDI4QworOjEwNzdFMDAwMzE5N0Y3NzdDODI3REEyNzBGNUNCN0E0Rjk3ODcwRkVDRQorOjEwNzdGMDAwN0NEMDgyOTM2Mzc2RDVDODdGNzAxQUEwRjc5OEVENkEyMworOjEwNzgwMDAwREZCRUQ3MkYwQkEyM0VCRUY1QkYzRjQ5MDVCQ0ZGMjcwOQorOjEwNzgxMDAwMjU5QTRBRkMzODdERkY4OTU0MUZGMkUzQURGQjQ1RkVGMworOjEwNzgyMDAwRjI3RDUzN0NBNDY0MEFCOTJFQ0VBQ0ZFODJGODdBREJEQQorOjEwNzgzMDAwQUFCRjREODhCNzJGQjAzMjlCRjVFMjhFOTA0Q0M5RjBBRAorOjEwNzg0MDAwMDVGRDU5QkVDM0M5N0JDRjQ2QkYzRTlDOTlEMDM3RjRENgorOjEwNzg1MDAwQTBERTBFOERDOUUyRUE2OTk5MjIyRkJBNjNENzE2MUIwMgorOjEwNzg2MDAwRTVEMThCMzNGREE5OTlEODNGQURDNzdGQTdEQjUzNzkwRAorOjEwNzg3MDAwM0ZDMEEwNjdEMUFFNzEzNkUyRjc5RjNBRUQxMDYxMDNDOQorOjEwNzg4MDAwRDk2RDE1NzJGNjVEMkY0REEwQ0Q3QkYxNjdBNkYzRjA5MworOjEwNzg5MDAwRkUwMjFCRUQ5RjJGOTEyMDJBRjZCNUUwRjBDRkIxRkYzRAorOjEwNzhBMDAwNUVBRTBDNkJCRDAzRDdCMUU0MkRENTY2NDFGOTJDOTlDMgorOjEwNzhCMDAwMEVEMTIwRUFENUEyQkJBNDM1RjdFMkY4NDU3RTE3NDVFNAorOjEwNzhDMDAwNzAwM0Q2QjkzMDk4OThFNzJGRDNFMzk1REIxRkIyOUFBRgorOjEwNzhEMDAwRjJBNEM2QzNCNDVGQjYxOEU3QTE3Qzc2NDk2QkUyRkQ5QgorOjEwNzhFMDAwRkVBRTNCMEZGRjlDRkM0MDg3OERGREMwQjI4QkU0NEY4QQorOjEwNzhGMDAwRTMzMkY1Nzg2NTAyNENGQ0FBOTRFMjk1QjIxRjk1NjlEMworOjEwNzkwMDAwODNEQjI1MjM1RTM5QkQwQTA4M0NGMDk3NTUwRTZFQ0YwOAorOjEwNzkxMDAwQUM1MkI5RkQ0MkI3RDdDQjNCMEUxQzY2NUMyQkREMTNENgorOjEwNzkyMDAwQzhDRjNFRDVGNUFFRjMxNjJERTYzN0JFQjlFNTkzNDM4NQorOjEwNzkzMDAwM0ZDNzdFMDVBREIzOThFQzY1QzQ0QTc4QkM0QUY3MUJENworOjEwNzk0MDAwQ0JGNDM4QTRFMjczQjNERjM4RjA4N0RGNTM5RThERUJCRQorOjEwNzk1MDAwREZDRTE5RDdBNUM1MjNCNzgyRjI2OTNDMUYwQzNGNjI2MQorOjEwNzk2MDAwRTY0NzdGNTdBOTkzNzAzMjNGMzM3MTNGRjY3RkNBOTczRQorOjEwNzk3MDAwQzE5RUFCOTcxMUQ3NDlFQzg3QTE0RjVGNjQwODdDMkY1QworOjEwNzk4MDAwREUzNjZGNEQzRUJFQkY3OURGMDc0NTNEQzIyRUJEMDZEOAorOjEwNzk5MDAwOUUxODVFRDFEMDMzREU5NjAxNDRENzIyM0VGRDlERkY3NgorOjEwNzlBMDAwNzQ5OEY4NzQ5OEYwMzY4OUZBOTdGMUZEREMyQUM0MkZBMAorOjEwNzlCMDAwRUFFREIyQ0UwRkRGODRCMUFDNUZCOTk2NUM2QTIzQjk1MQorOjEwNzlDMDAwOTQ1RjlBNzE2OEM2OUYxOTZGQkRENjlFMjJCMjBGNjZFQQorOjEwNzlEMDAwOUNGNTRBODlFNzY0NDZCQjM0NTM5QzVGMkNENjdDQjM0NAorOjEwNzlFMDAwMjhERjQ1QjdCNjQ2RTVGNTA4RkI3NzVBNjkzREZDNDMwNQorOjEwNzlGMDAwRDJEQjZEMTJFNzg3RjVDRkI0M0Q0REY2QThGNkI3M0Y2MQorOjEwN0EwMDAwNzE5MzNERkE1MDY5RjVEMEZCRUFCNjNGRTBGNjkxNUQxRgorOjEwN0ExMDAwNTI4MjZFN0FGRUMzOTBCMDRCRTZGNzc1RUE3QzM0Q0VBNAorOjEwN0EyMDAwMDUyRUY4QTU4N0EyNkJFRTQzN0U5QzQ3N0QyNkZENkQ1MworOjEwN0EzMDAwNjhGRkVCOUFGQjI4Q0ZGMDM5QTI5NDc3OUU1NjdBNjZCRQorOjEwN0E0MDAwMTExRDc3MkM3NDM1MzY3OTI5QkY0RDVDNzdFREUzM0ZGNgorOjEwN0E1MDAwRjE2OEJDN0YxQzJDRDBGOUM3Rjk2QUMzMzZBQjM3ODJGQQorOjEwN0E2MDAwRjMzNkJDMjI3QkU5MzUwMTg4RjJGQUNDQ0YwN0MyRUZBRQorOjEwN0E3MDAwREFDODdFQUIxNjg4MTY0RTFENzgxRkM1NjgyM0JEMDk2RgorOjEwN0E4MDAwQjRBRkZCNTg3NjUzMkJFNDE1MjAzRUM3OUQzM0Q0RThBMgorOjEwN0E5MDAwNzZEODhDRTM1RDk5RkFCRTg4OEU1RkU0MEZFRkE3MDY3NworOjEwN0FBMDAwOTEyRURBM0Y4MjkwQjBDN0NEQkZEOTM4RjY2REE0RUZFMgorOjEwN0FCMDAwQ0NCNjE3REQ1MjU5RkNCOUMyNkE5NjQ3N0ZGOEY2NUYxQgorOjEwN0FDMDAwMzkyQzgzRTNCNzU3Qzc3QjJDNkUwOUYxNzM1QTg3MjQ4RgorOjEwN0FEMDAwMEU4MzNBNDU1QjY3OERCODI5NkZBQkRCNjJGNTA2RjEyMworOjEwN0FFMDAwNzI1RDlCMEMwRUYyNUYyN0VEMUMzN0Q0QjU3REMyRjg5QQorOjEwN0FGMDAwQUM5MzdDNTE2OTFDMkZDMzJEQzVDNTExQ0JEQkRFOUIxQworOjEwN0IwMDAwNDVGNjc2Nzk5RTBDNzM1MUE1NkFGNzlDMTNFMzdEMTBCOAorOjEwN0IxMDAwNERDMUYxQ0I3N0JGM0RFQjg3RDQ0N0JDM0I5MkM4QUI5RgorOjEwN0IyMDAwMkE3Q0MwMjZGNEM2MjRBRkYwREJCMzI4MUU2RUZFQ0QzRgorOjEwN0IzMDAwNjcyQzhGMEZGNzRCOTA1MzNDRjBGOTlBMkRFRkQ5Qzg3MworOjEwN0I0MDAwOUY5QzQxQzE2NEE2MEI3RTkxREYwODg0RTU4NUI2QjQ5NQorOjEwN0I1MDAwNjRGMjhCNUNGRkJCNEFCRUNGRkI3RjE3OTNFMzdBM0E5QworOjEwN0I2MDAwNkIxQkNGNzg3RkYyNzc0ODQ3Q0Q5Qjc2RUY1QzdBRUYzRgorOjEwN0I3MDAwOTM3N0JBMDE3MUYwODFEMjI4NzBGRjhCMDczQ0U0ODdCQworOjEwN0I4MDAwNkJBQzQxOEZDQUFEQjg1RUYzQ0JCQjE5OEZDQjhFREYyOAorOjEwN0I5MDAwRUQxMUY5OEQyRjRGRUMxNzA1RjM2ODlENEIzNjdGOUI0OAorOjEwN0JBMDAwRDdCOTE0RkM4Q0M3OUE1RkM4RDVCNDRGNzM0RTgxRDkyRQorOjEwN0JCMDAwQkI5M0U4NEQ2NTk2ODhCN0VDRjA4M0IxRjc4OUYzMDA4NQorOjEwN0JDMDAwQTBGQ0ZDMDM3RERGMzRGOEIyQ0M3MTlCMUQ2RTRDOUI5NgorOjEwN0JEMDAwMTdCN0ZGNjRDRjEyRjYyQTA4QTEzRkQyQjk2QTAwRERCOQorOjEwN0JFMDAwMkI5RjgzMUMzRjM3OEJFNkI5QUI1ODY5QTQ3MzIyNUM4QgorOjEwN0JGMDAwN0Y1MEU3OTdGNDE1RUYwQjgwQTZDNEM1NTk1NUM3QUY2MgorOjEwN0MwMDAwQ0VBMTdEMzEzQkY0REJGRTU3MjVDN0Q1MUFDNTNENzFBQQorOjEwN0MxMDAwQ0YzMURGM0VEODZBMUYyMjVEODlBRDI3RjlCRUU5RUQ3RAorOjEwN0MyMDAwNTk4NkZFQzNDQjEwODdBN0MwOEUwRjE4NEY4MEZFM0IyRQorOjEwN0MzMDAwMkQ1N0Y0MUYyMzdENUNFNDZBNEM0M0JFN0RGQUNBQkIxQQorOjEwN0M0MDAwMzYzQUQ3MEFFMjdBODYxMUJERERFRjcxMUZCQ0Q5MUEyOAorOjEwN0M1MDAwOEQzN0U2MEY3NEQ4NjNFNzgxQTREN0RCREUzM0U5NzU4RgorOjEwN0M2MDAwRTI3REY0REZDQ0NGMDBBNDY5OTRCNzdENjA4QkNFMjI5NworOjEwN0M3MDAwN0YxRUM0Rjc1MjdEQzFEMjBERjY4NEYzQzYxODVFNEM0OAorOjEwN0M4MDAwRTc4QkJBN0UxQUZCOUNDQjRDRjE5OEQxOUFFREMyOTU0QQorOjEwN0M5MDAwNTk4OTc2MDEzNjY3MjczRDVGMzRFNzIxNzVENkQwQUYyNQorOjEwN0NBMDAwODkzRjc1MjdFRDlDQkZENEI1MDlGREMzODAzQTNBMENENgorOjEwN0NCMDAwRjVFMUEzNUQ4NzVFQkIwNUQ3RjE1MUQ4OUEzNTk3REYxMworOjEwN0NDMDAwOTY2ODZGNkI5RTQyRkRDNUYxMzJGMjNCODVFREVENjcyNAorOjEwN0NEMDAwMUM0RjE5RkVFODIzMTc1RTFDOTM0NDZGRjE3QTUyQkRDNgorOjEwN0NFMDAwNzUwMURCQjNGRjU3NzY3NkQ5MjA3NkY2QkI1OTAzRTJGMAorOjEwN0NGMDAwODQzNDdDMERGQ0U1ODlFNTk3NTM3QzYxRTZBRjYxNUZEOAorOjEwN0QwMDAwQ0Q3NkYzOTM0QzJEQTlERDA0RERDRjFCN0NBQ0RENzk2MgorOjEwN0QxMDAwOTY3MTdCM0U0RjlDMzczNTZDRkIyQkZCMzE2NDZCRDRFQgorOjEwN0QyMDAwOEVCODZEMDg3RENDRkQwN0M4OEY3MUZGQzA3QzY5NkM3MworOjEwN0QzMDAwQjI3NTI3RjJEMzdDRkYzMjkyMkRFNzIzRDFFRjEzOUY0OAorOjEwN0Q0MDAwNjU4QkRCMkJGNkU3NTQzRUNGNkYyNkJGNDk3NjVBNTMzRgorOjEwN0Q1MDAwODFFNDA4MzMyMDRDNzE4N0Q0RjlGQzVGRTk3REU2QkNFRgorOjEwN0Q2MDAwMjIzODAzNDYzNkYyQjkyRUFDOEJBRkNGMDkyQjdBM0RDMQorOjEwN0Q3MDAwNDUzMDc5N0Q0RUIzMkQ3NjlFNEJGNzA3M0JDRjdENUYyNworOjEwN0Q4MDAwQjc1NzVFOTdDQUU1MDhENjJDNEQ0RTU2NTdFMkFEQjJBRQorOjEwN0Q5MDAwMjRDRDIzN0U5MjI1Q0U3NzRBQjNDNUJBOEY2NTA5Nzk2MworOjEwN0RBMDAwQjRDOEQ1RkE0NkEzQzg5NzY4MEY5NUVENUZCQTlCQ0ZDNAorOjEwN0RCMDAwODNBRDdBN0QwNkNFOUNDQkU3MDc0RUNCMjdDODEyRDg4MQorOjEwN0RDMDAwQkRBMTdBOEU0MkZCQzMxNTk2M0I0QkIxREZCNUUxRjYwMAorOjEwN0REMDAwMzkwQUUyQzczQkQ1QjJBNzA0RkIyRjZDNTgyQ0ZBNTdERgorOjEwN0RFMDAwNUEyQUFDMDhGREM3ODM0QkU2Q0NBNDdEMDNDQkRCM0YwRQorOjEwN0RGMDAwQTVGNTI5QUIxNUEwRkE5MUQyOTZGN0I4N0Y5NzU1OUNCNworOjEwN0UwMDAwNUYzNTNDQkJCNzg2REVERjIwQTEyMDkwRkYyREVFNzBGMgorOjEwN0UxMDAwMjNENzMxRTQ4MkJBOUEzNjhGQjUzRDdFQkFCRjI2MEY5QQorOjEwN0UyMDAwRjM3OTk0NDcyNENERkZEQjJDRjIyQjhFODg1QjJCQTFCQQorOjEwN0UzMDAwQkNEMkI3RjE3Qjc4NUY3OUQ5NEEzOTIxQUU1M0VDODM1NAorOjEwN0U0MDAwOEZERTMzMzU5N0VDRUVGRjg1RjdGRjVCNTZGNkUwRUZGQworOjEwN0U1MDAwM0ZGM0Q0QjUwQjY4RkM2ODE5NTQxOUU3MkI1N0I0MkFDMworOjEwN0U2MDAwRUFEQjMxQkZBNkJDQ0Q5MDQzQjkyMkY4NUVFNkIyNzEyMQorOjEwN0U3MDAwM0VENzkyRUVDQjI1M0MxRDIzOUM2NjVGN0FEQkFDRDdDOAorOjEwN0U4MDAwMEZDOTRFODEwMzM5Q0REMkI4MUJEQjU3NzRGOUJGQUE5NQorOjEwN0U5MDAwRjM4M0ZFNjg1RkEwNkY1RkNFNTZBRTVCODE2ODExQzk0OQorOjEwN0VBMDAwNTc5NkI3QjYxMTNGQTI0RDBBNkNBNUZERDc3RDhGQjc4NworOjEwN0VCMDAwMTEzRTVGQjczOTc4RkZFOEU2QjRGNUQ2MkI5MEU0NzI0RgorOjEwN0VDMDAwNDdEMTlEMDRGRTM3QTU1RDc3NTNCQjJGREJERjkzMjU5QworOjEwN0VEMDAwRTY4REQwQkNCNzdDNUYxNkYzQkExQTUzQzk3RjgyMEYwOAorOjEwN0VFMDAwRjU0QUVDRDM3MEZDMEU3RUQ0MkJBMkY5MjBFQUQ1MzhFQgorOjEwN0VGMDAwMzIwNTg5NzU0RTY2M0FFNEI0NUQ0Q0M3Q0Q3NjQxQzcwQworOjEwN0YwMDAwODI1MDQ5NzMwRkQyMzFDRTFFQkE4Q0YyMkI3QzdGOTRGMworOjEwN0YxMDAwRTQ3MDBCODY1Qjg0RTc2MDIxNzQ5MURDNUVCRkVEQ0E4MAorOjEwN0YyMDAwMkQ2MjdEODVBQ0FGQUNGRjdDRkU3RUU2NDk5QTJGODA0QQorOjEwN0YzMDAwRjNEMzM5NkE0MEVBRTFGRTFFQzVBMTA2NTU2MURGMTc5OQorOjEwN0Y0MDAwQzZFREJCM0QwQkFEMjdDQUM0RkU3RTMzRTUxRDUzRjUyMAorOjEwN0Y1MDAwQkNEOEQ4N0YzM0VBMEQyNjc2RjlBQjVDNjRCMEU1NEUyOQorOjEwN0Y2MDAwOTlFQ0NBMzk4Q0Q3Qzg4RTk5RjdERDI2OUJFQ0VGRDRGMworOjEwN0Y3MDAwOEU4RkQ4MkU1RkVDM0NEMDk5QUREQkUzN0NDOEE3NzUyMworOjEwN0Y4MDAwODRFOTNDOTAwMjVFREQ0RjdBRTkzQzMwODlGRUM3OUQ3MgorOjEwN0Y5MDAwMDc2NjY2MEIzOTdERUQ3OUUwOURCQUJERDFBODRFMEUxRQorOjEwN0ZBMDAwRDdEMThGMTM5M0RDRkE4RjJFODJGMjRBQUU0NzY4ODRDMgorOjEwN0ZCMDAwRjRDMUZENkFCQkM5RkUxQjM4MUZGMzhBN0EzQkQ5QjNGMworOjEwN0ZDMDAwMzFBRkMwNkRCNERFQUJGNUYzOTNGRUQzQzBGNTgwRTMwMworOjEwN0ZEMDAwN0ExQzVDMUY2OEVEQjI4NjQyNTI1QzNEQ0E0OTBCRDdFMQorOjEwN0ZFMDAwQTNGNDgzMzdDNEY1MkI0MUJCMUE2NDdCMzk5NkVCNEY1RQorOjEwN0ZGMDAwNUE0RUVBRTdCRDdBM0Q0Mzg1NjBEOTNGNUMwRjYxQUVEQQorOjEwODAwMDAwN0Y5OEUyOUUyNDJGQUNFNEYzMTk5MDI2MERBQzdGOTg2NAorOjEwODAxMDAwMjJERjJBOTM1RDgxQTM0MjlFMTdFQTIwRTQzMjk5RDY5QgorOjEwODAyMDAwNzUyRTAyNDAyOURBODQ1N0UyRTQ4REZGOUI5ODE1OTQ1RgorOjEwODAzMDAwQjlGQ0U5NTRFMkY1MjkyNjVDOThFNTdGNkRCNjFFREZCMAorOjEwODA0MDAwRThGMjFGQjQ4RUU0NDNCMUFGMzYwRUM2NzIxRDg5RDU3NworOjEwODA1MDAwNUM0N0YyODY4NTBCMzY2Mzc1MjQxNTIxRDJCNzA5NEQyRQorOjEwODA2MDAwNjJERkY4NjI3NTNDRTYzQTFENzMxRDRFOUUzRjkxNEZFQworOjEwODA3MDAwMDUzNTU3MjREQ0JGQUNCMTNDQTE3RkY5Q0EyOTA5RTMxRgorOjEwODA4MDAwOEJEMUExQzZGNzRCMUY5QTkzMzA3RTU4RUI4RDA5RkQxQgorOjEwODA5MDAwMTE5QjZFNDkxODNGMkFCNDI4RTFGRUU4MURCNTQ5RUI1MworOjEwODBBMDAwNUUwQzlDOEMwOUFGNDhCOEJGRDFGOUU0QkI4NEFGOTY5NQorOjEwODBCMDAwM0M1OUE1NzhGRUNBOEVGQjRDNzUzMUQzMTgxNzUzOENFQQorOjEwODBDMDAwN0Q3ODVERkU0NjVEMUQ5NTgxMTE5RkM3QTNGQzFGMkIyQQorOjEwODBEMDAwQTZCOEU5RkUyQTQ5MUI4ODAzNkYyNEM4N0VGQzFGQzU4OQorOjEwODBFMDAwQzE3QTkzMUQzMEY0RkY2MkZCMzczRkQ2RkQ4NDlDNTI2QQorOjEwODBGMDAwMjQ1MTlDRTNDM0I4MkE2NTJBRDUxMThCNzM3Qjc4NEIzNgorOjEwODEwMDAwRDRBQjdDOTZGMjc3OEU4QjM0QzlFRDg1NkZEMjVCNTVGQworOjEwODExMDAwODlFMkEwN0JBQjM0OEU4M0VFMUQ1Mjc0ODBGNjBGN0ExOQorOjEwODEyMDAwN0VFMEY2NEFGOTAzRUI0MkNENzVBMDE5MEVERjY0RTA1QworOjEwODEzMDAwQUQxMTUxMDdEOTgyODY5RUVDN0Y3MDg2ODNFMzhDODdEMAorOjEwODE0MDAwMkQ5NkRCQUFFM0U4N0YyMjVCRDg5RjI3QjI0NUJFRjVEOAorOjEwODE1MDAwNzM1Qjc4MzdEOTAxQzUwMTZBNTM5RTc4OUU4QTFGODA2OAorOjEwODE2MDAwMkE3QjUwMkVFRTRDMTBGNTYxRjBDNkRBOTk4NUU0M0Y3QgorOjEwODE3MDAwN0I0NjZBRTk1NDNGOEJGRDZGRTA2NTI1QzRGRUU0OTZCQgorOjEwODE4MDAwNjY4NUYzQkNENUNFMjdEOTlGOTQyQkMyOUY4QzkzODU0RgorOjEwODE5MDAwREY0MDNGRDI0MUY2RjE0REU5N0VBQjg4QjM4MjU2OTI4MworOjEwODFBMDAwNEY4MTAzODJFRTcyRjZBRjdDNEU5QzBFNTlEMjhBMzIxQQorOjEwODFCMDAwQUE0RkJERTBCN0I0QUYxMDRDODc2QUE3NUE4ODRGRkRFRAorOjEwODFDMDAwOEI2NTNFMEY3RTg5NDg0MjdBRkI2QjQ2NzE5RDczRkYzQgorOjEwODFEMDAwODVGQTNGMkQ4REYyRUJGRUM1OEY5RUJEQkIzMkE2OTc3MworOjEwODFFMDAwMjc2REM5RjNCQzhCRURCQkQ1NkM3OTM0OTVDRTUxNEU2MAorOjEwODFGMDAwOEU4NDg0RkE4QzM3QjM0NTdFRjg2NkI2MkNFQTBDNDIzRQorOjEwODIwMDAwRUY3OTg4NEQ3RDRCQkUxODRFNDQwN0E0RUUzNTJFMUNFOQorOjEwODIxMDAwRjJFMEE2MUY1NDkzNUM2Q0VERjM4MkI0QUY2OUVDRTMxQgorOjEwODIyMDAwNUZDODAzM0JBNzczRkRCNjkxMkZEREZDQkFEOEQ3QkI1RgorOjEwODIzMDAwRjk4QkM0N0RFQjhGQjJDNUI5QzA0N0Y0M0U2Q0NCQkJBNAorOjEwODI0MDAwRkNFMzQ5NkUzNzkwNDJGMEJFQjI3RjNDQzUwN0Q1MkFBOQorOjEwODI1MDAwNjhFNEY3MTdGODE3REU3RDE0RkJGM0Q2NEIxQ0VGRDM1OQorOjEwODI2MDAwN0QxQTdGMjNDQTkwRUU5RjAwRUZBQjdCOTFCRUNGQjMwOAorOjEwODI3MDAwMDUzREYzQTFEQTRBNzRCRUY2RkRGQTU0QzJEM0VCRTkyOAorOjEwODI4MDAwNjI3QzU0MDI2RDZCREM3QzM3RThGM0JERkVGREU1N0I2MAorOjEwODI5MDAwMjk0RkE3RjdEMUZCODkxRTdBRkYzQzE1NEFBOEZGMUE4MAorOjEwODJBMDAwRjhDRkJFNUEzQ0YwQkQzNzgxQ0ZBQUQ3N0I1OUM5NEYxMgorOjEwODJCMDAwOTY0MkE4RUQ2OUIyQUI0NzJDREVCNUMwNkQyNDkzRkRBNAorOjEwODJDMDAwOTI5REZENTI1RjUzRjRDOTdCOTBDRTNGRDVGRTc1QUZCMgorOjEwODJEMDAwODQ3Q0ZERTNDMkU4QUY5RkM2RUJERkREMjQ4Mzg2Qjg3NAorOjEwODJFMDAwRjgzOEMzMkY3QkUyRUFCNDRGMkVGRTI0OTVGODg5RjFDQgorOjEwODJGMDAwQ0FGNjlGOTJERUVEQjQ3QkE5QUVFM0NEREE5REMzRTM2RgorOjEwODMwMDAwRTNGQTU0Q0Y3NDA3M0QwNzkzMkVFRDNDQURFQTg5QzlEQgorOjEwODMxMDAwOENCRjE1REIwNUZFNTZGQzY2NDQwRUUxNkM0NUVBMDU5NAorOjEwODMyMDAwREM4OUZFRjY1MjNFMjc5RDIwNDFEMkZDNzgzRkUyNEQ4QgorOjEwODMzMDAwMUJDMTc1MzVBMDIxQ0VGNjdGMkVFQUNBRjcxQ0NEQTg0OQorOjEwODM0MDAwMjBGQTE0RjA1RjE2QkY5RTNEMkZERDMyOUFFQjc5REZFNQorOjEwODM1MDAwQzhCQTI0M0E0OTY3ODM2ODdGNkY2NjUzODlGMTgxQUU1MgorOjEwODM2MDAwMjcwQjNBMzMyQkY0Nzg3Mjk0ODdFMkI5REZGRkU2RUNGRgorOjEwODM3MDAwN0YxMDVGRjZFRERDRkU0M0Q2OTE0QkUzQzNDMDNBNUE2MworOjEwODM4MDAwNzUyN0RCMjcyMzBGQTNCQTU3Q0FEMzBFNTlEODRGNUVFMAorOjEwODM5MDAwMkRERkNGNzkxOEQ1Njk3MERFMzVBNDg4QzdBM0MxNTEwOAorOjEwODNBMDAwQURDMkJFODlFRjI0MzAwRTZFRjY3MkJEMjdFQkVCNEFFQworOjEwODNCMDAwNTVDNDJENDY5RTI0NUJCQ0I5OEFGOEM4RTBDNUE5M0NDQgorOjEwODNDMDAwN0YwOUQwRkU5ODlCMTIyQkMzNUU2MTFDRTE5NjJEQkFFQgorOjEwODNEMDAwQkQwMjlGMDNGM0QzRDFCQTNEOUJFNUYxNUVEQjIyQ0UxNAorOjEwODNFMDAwNkIxMkUyNEZFQzU3RUQ0QTEyNzc1NkUzM0Y4RTNCMzc2NAorOjEwODNGMDAwRkI5QjUzRDgyRjZEOTZDQjI4RUVGMDM5MjJFNEM3Q0RFNgorOjEwODQwMDAwNzFFNzU0NThDRkZCMDAwM0UyQ0ZFN0ZFNzI0OUYxRTc3MgorOjEwODQxMDAwRjczQ0ZGM0RCRkIzRDRBM0IxRkQwOThGMTQ3NjJFMUNFQQorOjEwODQyMDAwMTlDMjc5MEVGRTU1OTA3RTBEQTVCRDAwM0EwN0NEMTNGOQorOjEwODQzMDAwQUQ0REVBMURFOTQwRkRBQ0Y1OTRBRjdCNjgxQUMyNjUwRAorOjEwODQ0MDAwQThFMDBGRjU1MUE0NTBBQTdENzJFODJCOEEwM0JCMTU1MgorOjEwODQ1MDAwOTY1RkZGNzM1NzdDRUQ3NzI0OTVBODg3RTRFQzIzODcxQworOjEwODQ2MDAwQTc3MEJENzM1Rjk3RDA4RkI2MENFRERGQTc1MjlFODFDQQorOjEwODQ3MDAwNzFFNjU2MjQzMTQ1RTlCMUE1Mjc1OUNGRDM2NDdGNTEyMAorOjEwODQ4MDAwMUZDMjFFOTE0NzM5M0FDNEI5QTg0M0YzMDFEOTk3MTRDMgorOjEwODQ5MDAwNTUxRDQ3ODlCOTMxN0VCMTQ3RDhEREZBQzM2RjE2RDk2QQorOjEwODRBMDAwNTAzRTY3MkQ0N0RENzRCRTUyQjdGNzI5MzcyRTE3OUExNQorOjEwODRCMDAwMzNGRDBGOTBGRTJDM0ZGOUYyMDQ5NUVCRENCNjE0NTExRQorOjEwODRDMDAwRkUxRDhFQkMzQzgzRTNCM0Q5QzhEQTcxODNBRjI3QjBGRAorOjEwODREMDAwQTk4MjNFNDI4MDg2NEQ5OURDOEVBMjdEMTVCQzE0ODgwRgorOjEwODRFMDAwODg3NUY2NzYzNDY3MjREQjFGMDhGQ0RCNUIwNzY5QkQwMworOjEwODRGMDAwM0I4RkE1NzBEQ0IyMzNCQjlCRjUyMDM4MEY2MDNCRjI5RAorOjEwODUwMDAwRkI4OUNGNDdGMzdDMDgzMEE2RTM4QTZBNEQyMjdGRkZDMAorOjEwODUxMDAwMEI3RDNEM0JGNUZDQjJGNzczOTlDNzE5RjM4RUU5OThEMworOjEwODUyMDAwMkVBQjg4QUJCMjQ4RUI0MUFFRTNFQUI0NkIyNERGOTRFOAorOjEwODUzMDAwNkQyMEY4RDM5OUMyNzU2MTgxRkRENzg4QkMzMzVEOUNFRAorOjEwODU0MDAwNDdCNzBEODlGRTkxREUxM0RENjdEN0E4NEUzNTQ1NkQxRgorOjEwODU1MDAwODUwQzlDQkZDRDI2RkNFQzI4MDRGRTUzQUVEODc1RTNGOQorOjEwODU2MDAwN0QyOTlEMUJGOTIzMDhDNDA1RDdFM0E1MjhBREYwMEQ4RgorOjEwODU3MDAwNTczQ0ZGNTM5OURFRkQxRTExRUZCNDBEODk1ODVDRTRBMgorOjEwODU4MDAwMjczMDU3REFDQTc0QzVFODA0N0VBRjQxRTcyODhFOEJERQorOjEwODU5MDAwREI2Q0QxRjc2OUJGMURFOTUyMDkxN0EzNDBEMDA5OUREMworOjEwODVBMDAwMjMzNDhBNTc1MjU0NzFBRTlFQTI2QURFQTAzNDkwQUUzNAorOjEwODVCMDAwQzA1ODA4NjE3MDAwMEZBRjg2MEI3QUNFNzU4NDQzNjI5NQorOjEwODVDMDAwN0QwN0VBNDI1Qjg5MUVDNzA0MTdBRjlCMzkyREFFNEY2QQorOjEwODVEMDAwODY2QzUyRUNGOTEzOUU2NUVCNUEwQTY5NURDMjBGMkE0QworOjEwODVFMDAwNEE5OENGQzdERDBCNDBBNUYzRUYxNEM1Qzc3OTUyQ0EyRgorOjEwODVGMDAwN0NEMDlBNTA1RTRFODc4RkVGN0I3MDhFQTZDOURDOEY0MQorOjEwODYwMDAwMTBGRDJBRERBNzdEOUIzNEQ1MzkwN0U5NEVGQjMyOEQ1RAorOjEwODYxMDAwOUY2QkU4QjY3MkRENzlERERGNkY0QTJCQzNGNTlEQjE0NAorOjEwODYyMDAwMUNCQzY3MTdCNjFGMkQwQzBGQTc3M0RBMDk2OUZFQjdCQworOjEwODYzMDAwQzgxRTNGNzM2QUQxQkEzMTM4RkUyRjZENTZFRjVDQjI1NworOjEwODY0MDAwNEIzREMxMUZEM0I5N0RFRDEzNTY4REZDRTI4MzZGRjQxMgorOjEwODY1MDAwNDdCRTIyRjkzRTJCQjE1REVDQjM4QUZCRDhENzlBRjAyNgorOjEwODY2MDAwN0U0M0U3MDczNjNBRDdCQUE2RTM2RDFCRUQ3RkFGQ0M2MgorOjEwODY3MDAwRjFCRjRGN0EzMEE5QTNBOThBRjgzNjE5NUE5QjY5OUY4RQorOjEwODY4MDAwMTNFRDIxRDc0Qjg0NzM4NUJERTg3RjY1RjhENkE2MzhGNgorOjEwODY5MDAwM0VCQjcyRjQ3REVGQThGRjcyRDI5QjRFNUQzRkY3NTM1NQorOjEwODZBMDAwN0M4NEVENUUzRDRFREI3QkUwQkJBNTVBRENGOTY5MTBCNgorOjEwODZCMDAwMEVGMjdFRTA2QTc4OEVFQjNBOERFQjdEMjE2NTM2RTEzNQorOjEwODZDMDAwNjhGNDZCOEVEQjdDNzEzOEIzRTUwODdEQjdFOUVGRkJBRQorOjEwODZEMDAwNzk4RUZGNEJENkRCMDNFRkQ4RENCOEZFQzA5RkMzNDVENQorOjEwODZFMDAwRTRBRkMyMThDRjdENUQxRDY5QzBBNDJGMTdFQThFNEU3RQorOjEwODZGMDAwMDNEQjkxOURBRjc1NzBGQ0JERjMzRTM1OURGNDFFRTkyMworOjEwODcwMDAwODczNEVDRUZDNUY4ODJGNDY4NkZCMUQwQkJBNjU3Q0ZDMQorOjEwODcxMDAwOEZBNUZERTJGM0ZCOTY1RjRFRkNFQUY1NTgwRDdDQ0Y4QQorOjEwODcyMDAwMTg0MjdBQjQxQkQ4OEUxOTdBNTg0NjdBMjhEMUY3N0IyQQorOjEwODczMDAwNjJCRkE3OENGMDREN0E2N0VCOUVDMzdBQjdENzAyQTRDRAorOjEwODc0MDAwNzc4ODZGQzYzQkUyNUJBNTM4QTQ0QzQ1QkNGM0YzMjNBNgorOjEwODc1MDAwNTg4RkRCQkE1RkJFODJFQkQ5OTFCREMzQzY1MURGQzI3MQorOjEwODc2MDAwRjg2QThCQ0MwOTQ5Rjg3Q0E1MzU3MjkwOUVBRkM0RjdBNgorOjEwODc3MDAwMzc2OTMxQkRBQzk0MTJFQjdBMTY3QjQ0OURBQzYxMUYxNgorOjEwODc4MDAwN0ZBMEVCNjc3OEE0OTZFNkM1RjE0RTU5NEVDMDdGOUM1QQorOjEwODc5MDAwOUYxNDdEREQ4RkRFQkJGMTI3RUIzNkEwQkU5NEZBMkE1NQorOjEwODdBMDAwMkMxMzI4REUzOTI2QjMxRkQ4QUZDN0M5MkJGRTMwRTVGRQorOjEwODdCMDAwODY1REUyM0FGQkNGODg4RThCODM3QURDRkNEQ0FBNUM5OAorOjEwODdDMDAwRUU5MzVGRDA1MDJFRTNCMUY1NTU1MEJENzc2MzE1NkQzNAorOjEwODdEMDAwQzU0RDlBREQ3QTg4REEyOUQ1RTEyQTNBMkU5Q0I2QTBEMQorOjEwODdFMDAwRkI5MEY4QzZDRDM3OUFGMEQ2N0VGMDVCQTNCOTRFRkE2RgorOjEwODdGMDAwQTQxREU4M0JDRUY2RkY4Q0ZFRjEwOTVDRkYzREZCOTEyQQorOjEwODgwMDAwREY5MDM0MkU2MUJDQTFDNzY2RkMwRDg2OTMzRUE5RTdCQworOjEwODgxMDAwRkFBOTY4OTdBRkRCRjhFQjZCMTU3NEU4MEQwNDA0NUNGQworOjEwODgyMDAwRkY5QzhEREJENjA1RDEwNzlFQzhGMTVEOTc4M0Y4RkJEMQorOjEwODgzMDAwMjJENzdGNUQwRUYyQURFRkY4N0Y3QUM4OUZFQzdERTUyMQorOjEwODg0MDAwMUQzN0Y5RTE3NjlCNkYzNEUxQUFCRDA0RjM4ODI0NzhFMworOjEwODg1MDAwOUM5MjYzNjVGRjVBMzk0OEJENDk2MzhFQzhCNzg2MDc0NQorOjEwODg2MDAwNjExREUxQTVBMTVENTY0M0U0QTc3RERERDc5M0RGNzhDNworOjEwODg3MDAwMUY1OTQ5RkJEQTRCQTcwN0REOTQyRkQ1RUMzREM0NzU5MgorOjEwODg4MDAwRkE0NjNFQkQwNEY0M0ZGOUQ2NTlDNEZGNzNCOTIyM0ZGRQorOjEwODg5MDAwNUVCQUMxOUE5MERGOEU4MDg4OERDRTkxMDM3RTU3NjMzOQorOjEwODhBMDAwMDQ0NTUyNjM4QTNCRUVFOEQ4QzJERjhERDQ2RTRCN0MyMAorOjEwODhCMDAwQUU4RUUyMTQ4NDUwREQ0NUYyRTNDNjFDN0Q5RkE0MTQwNQorOjEwODhDMDAwNEEyOTRFNDFEQ0YwM0U0OUY0NTVEOUJCMTVCOEJFQUE0MQorOjEwODhEMDAwOEJFQUFCNzY1QTA0OUY5QzBFNjg0OUNCODhDNTJCMjM0NAorOjEwODhFMDAwRjI3QzRCQzhERTJEMzFGQzg3NUVBRjE0NkQ5M0Y4N0JCNAorOjEwODhGMDAwOEE1MTNCNDRCRTNDRTVCNEI2ODVCRjkzMEFGQUI4NEVGNAorOjEwODkwMDAwQUY4NjA4NDBCQUE3Mjg0MTVFRkY5NERDNTIwOEUyRkExRAorOjEwODkxMDAwMjdBMTc5MjY3RDU5REEyOTg1OTg5RkZBNzcyRjBBRkVCMworOjEwODkyMDAwMTNGQjQ1OUI2NUZFQ0U2RkIzMDQ5OUM1MzQ2Rjk0Rjk3NAorOjEwODkzMDAwNTNBQkVGMUYyRURGOTE3ODdFNTFCN0U5Rjg2MTBBOTVBRQorOjEwODk0MDAwRUFDM0E2RjMyMDlEM0ZFNkYzOURBN0U4M0Y5MjlDRUY4NAorOjEwODk1MDAwRkMyNDQ3OEZFNzhBQTAyOEUxQkJCQ0FFNEJGQjJFRUY3RgorOjEwODk2MDAwMjM4QTA3NUM3NEY4MDgwOTcxRjkxRTFENDcwREZBQkFDRAorOjEwODk3MDAwRUI0MkIyNTgzNzhBODJFQUEzNkZENzYxMTIwMDJGRjMxNQorOjEwODk4MDAwQTkxRTcxNDIzODgwRjU0MkRFNDYzRDYzMkQ1NERCQThCNgorOjEwODk5MDAwOEVBQ0JFQkRFOTMwOURCRjJERDVFMzVBMzM5RTkwQTE2QworOjEwODlBMDAwQ0NBRjY1N0FERDUwQ0RFNkM0RkJCNTNBNUY2QTREN0M0RAorOjEwODlCMDAwNjlGMDRCMjZGQTQ0REM3REE5RjRBMUU1RkEwRUUxQTBBQQorOjEwODlDMDAwNzY5Nzk1RUJCOUNGQzFBRDVDN0Y1NURGQkU4NUU5NTk5MAorOjEwODlEMDAwQUFDQjZGMjBCRDQxNUVDRjMyNUMwRkU5RDNBNUQyNkIyRAorOjEwODlFMDAwOTZERjMxMDNFNzU3QzAxNTA5RjI5QjlENzk0OUYyMkJCOQorOjEwODlGMDAwMDU3NTM5QURBRkJGNEJFNEI1RkQ1RDI1QkMyRjYxRTAxQQorOjEwOEEwMDAwQzVGQ0ZDMkMzRDhFQkU2NjkzODgzN0NGNzY1NDM5Mjk0MQorOjEwOEExMDAwMUVFODNCQUE3ODI1QzQ3REM1QjE0RkRERjRGRDRERjlCNAorOjEwOEEyMDAwM0UxOUU4OUNCNEFGQjM2MjVEMTBFREU1OUVBRUExMzc5MAorOjEwOEEzMDAwNjlFODA3Q0E4RjI5RUMzNzJBOEU5NTg3NTI4QUE5NUY4MQorOjEwOEE0MDAwRUUyQ0U1M0ExMzJEOTNGMjAwOUM4N0ZENzBERkQxQTE0NworOjEwOEE1MDAwMjdDQTM4NEU5RjU5NDkyOTZBRDNEMTcyMjdDNTBCN0I0MworOjEwOEE2MDAwNDBFQzZGNDhDNzJBMzM3QkUyRkNDQTdCMzk2MkJGNjFBNgorOjEwOEE3MDAwNERFRUJCMEY5MzlEQkE2NkI3OTVGNzgzQUZCMTQ2NUZENgorOjEwOEE4MDAwQTIzQzZDNEY5N0UyNkRDMjdFRERCMTQ1QUI1MzQ4REUzMAorOjEwOEE5MDAwQkY5MUJDMTQ3NjFGRUU1RTkxNDVFNzM1RjU5RDU2RDUyNgorOjEwOEFBMDAwQ0VGNERFN0Q5MEVFMDc3NzQ5REU2MTM4M0VCMEVGRUEyNgorOjEwOEFCMDAwRDE2REI0NEZCNEE1QzI0QkVDMzVERTU3OUVBRTNENEFFNgorOjEwOEFDMDAwRjVBRTkwRTdFNEJDRkQ5QUNCQUNFQzVGQ0ZFNDNCRkZBNgorOjEwOEFEMDAwNzUyRUFFQUJENkI3NjUxNkQ5RTEzM0JGREJDMzc1MTVCRQorOjEwOEFFMDAwN0Q2RDEyRTQ0QUI0OEY3Q0U4NDlBQUY3MzlGM0Y0NzEzQQorOjEwOEFGMDAwMUI5RDA3NTdCNTFGRTdCQThEQzFGQ0MxRDkxMEUyOEU4NworOjEwOEIwMDAwRjNGNjU2MUJFNTM3RjU1QjhDN0UwRjdGOEY1MkFEQzdCMgorOjEwOEIxMDAwNTEwRERCREVFNjdFMkRFNTAxODRDN0NENzI0OEMzRkYzMworOjEwOEIyMDAwM0NCNEVGMTkzRTFGNkVEODI1RUEzRTJFRENERjI2RjE1RAorOjEwOEIzMDAwN0QwM0VGOEI3NEJCQjUxQzM0QzZGQjcyMDNFRjdBN0RFQgorOjEwOEI0MDAwOTQ4MUY3NzMzMDk3RUJCNDk2RUY3QTg0RjFCRDQ0QzcwNAorOjEwOEI1MDAwQjdCOTZFMEEyREIwQUQyQzRCRTgyQkVEQjc5OUJGRkYxRQorOjEwOEI2MDAwQkI0M0M3RjcxRDE3QzFGN0E4NUMxRERGQTM2MDE0RTE2NQorOjEwOEI3MDAwRkJGQzc0NTE0Rjc3RkVGODEwMjdDRDdGRkUwOEVGQkU0NworOjEwOEI4MDAwN0UxRENFRDlFRjFFRDVFMzgyRkU4OEM1NjdCQjMyMzY4NworOjEwOEI5MDAwQUVCN0UzMTNGRTBFMzE3MEI0REY0Njc1MjdCMzNBM0YyQworOjEwOEJBMDAwNjY3OUNDRUQzQzMwOTNGODdEMURGOEVCODg3RkQ3NzU2NgorOjEwOEJCMDAwM0E1NThBODNFN0Y2MDg3QjM2QTdEM0NFRTcxM0Q3NDEyOQorOjEwOEJDMDAwQjg4NUU0RENCN0ZGRjE5NjBDQzJDREFGMDU2RTBDM0I2NworOjEwOEJEMDAwQjc0Q0U3RUJCNTY1M0Y5ODQ1Rjk3QkFERUUwRkZCQkJCNgorOjEwOEJFMDAwRUU5Q0M1NzY2NzFDMTQ1M0JDMzc0N0ZGQ0U3QjRFNThBRQorOjEwOEJGMDAwQjc0MzlCMTNGOTRFRTdENDI0Qjc4NjRFM0JENzlCNUMxMworOjEwOEMwMDAwMEIzRDM2RjI2N0Q3RUFGRUQzRUMyN0ZCRjI5QzJDRTc0QworOjEwOEMxMDAwMjBGQUFCNjEzOEJFNkU5N0E5OEU1MkU5NjE3QUZBM0JCMQorOjEwOEMyMDAwNkM3Q0RFRDU2MEYyQkZEMzcyQUQwOUY1MTc4M0UxRDM1QQorOjEwOEMzMDAwMkNBRkRCNzI3NTdGQTJDQjZCNkU1NEQ0MzFDQzc5NDVFRgorOjEwOEM0MDAwRjZEMkY5NDM1NzY0NzUxOUM1MEIwNkRGQ0NGMkVBRDJBOAorOjEwOEM1MDAwNEFEM0JFRUVGNzEyNUVEMkUzN0NBMzdGODNGRUZENUJCOAorOjEwOEM2MDAwNTg2RDc1QzVFN0VEQ0ZFNzVBRjQ3M0NFRDA0RjJCNzAzMgorOjEwOEM3MDAwOUQ3NzQ5RDA0RDM4QzRGQ0U2ODY3MjI5Njk3RUIzMzJBRgorOjEwOEM4MDAwMTdDNzNGNUY3OEZCRkE3MUYxRjk4RDZGQ0I3MDhBRjdFOAorOjEwOEM5MDAwMUU0NEJCNTI1MUM5RjUzQkREN0M1RUE4QjRDRUE1NzMyMgorOjEwOENBMDAwQjBDMDJFQUI5N0YyOUE0MDg3Q0NGMTQwNjA5NzNENjRGQworOjEwOENCMDAwQzE3OUFGMjExQzIxNURENTlERDJENTg0MjNDQzFCNUEwRgorOjEwOENDMDAwNzJEMTNFQ0RBMzJENjUxQzM3QUYwM0UzMTE3QzZFREU2MAorOjEwOENEMDAwQ0M4RjE5N0Y0Nzg2OEE3NUY3MkI1QTRFQjIzQ0MyQzg5MworOjEwOENFMDAwMUYxQTNFMTdGMUFBNzFCRDAxRUQwMDhENkZEMEJGNEI2OQorOjEwOENGMDAwNkIzRkY4RDdBMkUyNTQzQUI3RkRBQzY4MjFDNUE5QjlEOQorOjEwOEQwMDAwMjI3RjMxRTJENTI4QzZBQjI1N0FCQzQyNzUxNzRCODU0OAorOjEwOEQxMDAwRTg2MEU5NzNGN0Q5Qzg3RTFEQTYxRkI2QTBGQTQ5RDU0OQorOjEwOEQyMDAwQkY4NkYyNjFENTBGOEQzRkEyNDA0MzZBNjEzRDZBMjA0NAorOjEwOEQzMDAwOUQyMjFDRUU5NUM0RkVDREIzNTZBQTBEODFBNjk3ODc0MQorOjEwOEQ0MDAwNzA1RDYwRUY2QkUyMUNDQUFDRUZCRDhCQkFEOTVFOUM2NAorOjEwOEQ1MDAwNUZFODZBMjRCQzJEMkZEQkIyMDYyMzBDMThCREZGNzUxQgorOjEwOEQ2MDAwQjYzN0EzN0Y2NzUzMkQ2QTZDNUQ0REY0REQxREU3Njk0RgorOjEwOEQ3MDAwMkQwOUYxNzI2RjQ3QjM4REY3QTFFM0JGMUIyRTE5MThCMAorOjEwOEQ4MDAwMUZENTVGNjQxRkVCNzk5MzVENDFGQTM5REVFRDNCMjIxRAorOjEwOEQ5MDAwQUJCNDJGODQ3Q0ZDNjU3RTNDQkZGNDc4QThGRDYwMEFGMAorOjEwOERBMDAwRkJBRkJFRTNBRTEwQzVGRDdGRDFGMTc4NDZERjk3NkYxNAorOjEwOERCMDAwOUEyNDMzM0YyQzkzNDUzQjdBRkYzMzI1MjQ1RjkyODdENworOjEwOERDMDAwMUZFREZEQ0VGRENGNUNFMUUzN0RGNDkwQTgyM0RFOTFBNQorOjEwOEREMDAwNTg4NzVEMUY0RUFDQjMzNkY4MUFEMEY5OEE3NDBEQTdDOAorOjEwOERFMDAwRUY5NTBEQkFGNjJBM0Q2RTZGMTIzRDkyQTQ4MzJDMkY5QgorOjEwOERGMDAwOEI5NDk4RTcwNjlFOTVBQkUzRUI0ODcxM0RCNzkxREQwOAorOjEwOEUwMDAwM0I2OUU4OEIxMkY1OTAxRjdFMkI1NzYzREMzNDc1MEFBMworOjEwOEUxMDAwRjk1QUY2ODkxNkRGRkYxREIxNUY2M0U1RjcwRkI4M0YxQQorOjEwOEUyMDAwMjM1ODQ3RjdDRjE3M0JCOUJFMDEzRTBGQ0VBNUZFM0RGNQorOjEwOEUzMDAwMjVFMkY3MDNFRTc5Qjk3NjQ0RkMzRTFENDgyMjFGMEY2OAorOjEwOEU0MDAwNThBMzVDRUYxNzM4NkU2MUZBMDJDN0ZCM0Q0MzVENjRCRgorOjEwOEU1MDAwMTdCN0NDQTQzQURBNkI3NTdCNzFCOEM0NTk0MzM4MEY5NQorOjEwOEU2MDAwRDI3QjczNjJGMzJDQzkxNUU3MUI0MEVCQ0Q4RDdENUY4MAorOjEwOEU3MDAwNjlBQzc3MzVEQ0M4N0M1OEFERTNFQTNGRjRCQzFFRjMzRgorOjEwOEU4MDAwQThGM0I5NDlGMkE4QzFFMkRGMEI3NEVCRjFEM0Y5RTkxOQorOjEwOEU5MDAwREE4OUVGMjEwRUNBOEYyODQxQ0FEN0Y3QkM5MTEyMjI3NgorOjEwOEVBMDAwRkZERkI0NkZEOTlGMjgxRjBFQkM2OTA3OEE0M0VFRDkzNAorOjEwOEVCMDAwQkY2QzA0RDdFMUZCRkQ1NzkyM0QzOUJGRkY4RTJCQjk0NAorOjEwOEVDMDAwOEU1MTEyREY5NzA2ODlCRTVDOEFBNzVFRjU1MDlDNTRDRQorOjEwOEVEMDAwQkZFRjU1QUU3M0FDREYzQkZFNTE4QTlGMzA1RUJBOTY1MgorOjEwOEVFMDAwQUU2MzFDQzNGODJCM0Y1NkM5RjhEQjczQjQzMkIzOTQ5RQorOjEwOEVGMDAwMDgwN0FGOTNFNkFEM0ZBMjcwREQ2M0ZEOTFDQTE3RTdBNworOjEwOEYwMDAwNTI1QzczNkMwNkM3NEY0NkJDNTQ0MUY5MzhDNTRGNDc5NQorOjEwOEYxMDAwODYyNkM0NEZBOTc5ODI3RjdEMDc1Mjc4RkY0MzgyMTI0QgorOjEwOEYyMDAwODExRjE4OUE4MDlGQkFGNjNGNzA5QzUxODdGNjJFMUVCQgorOjEwOEYzMDAwNDdDNjczQzU3OTBBQ0YzMzJDNEZDNzRGNThGMjMxM0UxRAorOjEwOEY0MDAwNzY4QkI2QUU2MzBGQUY2RkI5MzVDQ0YyNkVEQTY1MTVCRQorOjEwOEY1MDAwRjdEQjQ0NkJENDQ5MDcyMTIzNDhGQzc4OTEyRUExMUNGMAorOjEwOEY2MDAwRTZEODQyODU5NDZGQkU1MDJDRjIwREIzM0M5RUM4MTNEOAorOjEwOEY3MDAwRTc4NTJGOUMxNERGMTlCRjMwREQzRjIyRDlGN0M2NDFBQQorOjEwOEY4MDAwOTgyMUYyNzA0OUU3NzdCQjc1NzZCMkVGNzk3N0U0ODk3QgorOjEwOEY5MDAwRkQwOTc3MjYyNDlDNEIxQUVEQTM3OTQyNUZFNkQ4QzRERAorOjEwOEZBMDAwM0U5NUY5QkUzRkNGRjAzRkIwOEVDRTYzNEVDQ0I1QUExMgorOjEwOEZCMDAwQzZFRkI3RTRBMUREQkQxRThDM0ZFRkFCRjNCM0U4OUM3OQorOjEwOEZDMDAwNEJFNEQ1MDAzRDMzQzkxRTdFOUJGNkY5MjlGRTlBMjQ1OQorOjEwOEZEMDAwRkNCQUIxQ0YzRjZGMzMzQzIwRjZGOTZGQjU5MjVEMzBFQworOjEwOEZFMDAwRUE0QkU2RjlDQ0YxNTdGNUQ1MzRDRjhERThERjY5OUUzMQorOjEwOEZGMDAwOUI2NjI3REVGRkY2NDVFMkFFMDU3OUJBMUYxRjBFQzM1QQorOjEwOTAwMDAwNDU1RUUxNzI5MjNGMzhENzY1NTU2NTVFNDc2ODY4QjI0NAorOjEwOTAxMDAwRUYwQjBERkI3Mzc4OTUzODNGRUE0MkJCNDg2REQzQTg0MAorOjEwOTAyMDAwRDc3OURGRUE4NTAzMjc5RjRDNjdCQjlBMDIyNUM4RTIwMAorOjEwOTAzMDAwQUJCRUZDOTMyN0Q5M0M0RDE3RjQ3NTdFMDJGRTBDNzkyQworOjEwOTA0MDAwOURBNTNDQTA2Q0EwQkNFRUNDQjNFOERGMjU5REIxRjFBMgorOjEwOTA1MDAwRjkyNjM0M0U2NDkxMDdGRjJFQTk2OUQ0NjcyREE0NEZFOQorOjEwOTA2MDAwNjdGNUVGNUU5MEJFMjI3QjlDREQzRjlCRjczMURGQkY1MworOjEwOTA3MDAwNjcwNjQ0ODM3OEZGQzAyODNCRkJCRkZBOTkxMjlGMUYwNQorOjEwOTA4MDAwRDQ0Nzg0M0ZBQzlGMkZGQ0UxRjBGNjc5MkM5N0VGQTBGQQorOjEwOTA5MDAwNUM3QzVFMzYxM0FGNTE1REFFMjFFRkFCQkVFQzlCNjlERAorOjEwOTBBMDAwRTQ5Mzc0OEVEMzQ0Mzg2NzNCOURDNTZEN0RGQkRCMkQwNworOjEwOTBCMDAwN0M1RTg5N0U5N0UyQzIxQjI2MjVDQTZEMDRGODFGQzgxNAorOjEwOTBDMDAwQzZGQjM3Q0Y5NkJDRTg0MTA2QzhGREU2NUJFN0IxRENERQorOjEwOTBEMDAwNkZEMkJGOEZCOTk4REM3RjlCRTdGRjY5MUVFOTdENzc3MAorOjEwOTBFMDAwRkY3N0M2MjA4QjVFMThGNTQxMTFGOUQ3ODY0MTcwQkQxOAorOjEwOTBGMDAwNTVFNzJGMEM4RDNFNERFNzY1REUwQkU3RTk3RjdGM0FBNAorOjEwOTEwMDAwRkUzQ0JEQzRFM0RGOTI0Nzc2RDVGMkE1RkIwQUEwRjk4OQorOjEwOTExMDAwN0E3RUI5NDIyMjM5MDFFQkM1NjA3QUI1NDM5RjdGNDcxOQorOjEwOTEyMDAwOUUyQURFOTMyNUNFODc0NkU5RkQxN0FDQTE0MkZFOUUxRQorOjEwOTEzMDAwQTJFQ0QyQ0UwMTlCOUU3RDdFMkNEOUI5REUwMzQ3QzYyMAorOjEwOTE0MDAwREFFMkU0N0E2NjA1REEwN0YyMzdGQjBFRjFGNzg3MzFFNworOjEwOTE1MDAwREM1OTc0REMyOURDNEFEMjhEQkExRjREQzRFMTE5QzIzNgorOjEwOTE2MDAwMjFEOUU3REQ4N0FFQTdGQ0YxNkNGQjRENTk5MjE2RTdEQworOjEwOTE3MDAwNjdGNzlFNzAwRjhCOUJGN0FDRkVCQjE4OThCNzBERkY3RgorOjEwOTE4MDAwNzY2QTNDOUQwRjMwOUQ2N0MzNjIzRUQ0RkZFMTM3OEQwOAorOjEwOTE5MDAwODlCRkRGNkM3QzY3Qzc3ODdFNzA2NDIzOUZEMzFCNzhBMAorOjEwOTFBMDAwNTY0MEUwRDlGODNEOEMwQkRGNTVEQTgwQkY3QjBDRUVFMgorOjEwOTFCMDAwQjc3MzdENDU5RjM1NUE5NDFFQTcyRjFGMUE3MjQ0OTg4NgorOjEwOTFDMDAwMTU2NjMxMkJCOURFNzUyMjZDQThFMjczMDI0Q0RFRDcyRQorOjEwOTFEMDAwNERBNkNGRUZDMkIyQTgwRjZERTRCQUM1Njk4REUwMjVFOAorOjEwOTFFMDAwREM0QUIwOTlGQjEzNjY4QkYzRjIyOUQwMkQxMzVEREZCNworOjEwOTFGMDAwODQyOEI3M0U1MDE1NkE2NzUwODUxOUI2OTMxQzYxOTk0QgorOjEwOTIwMDAwQzJBREI2RjY4MzRFQzI1N0M0QTNBNEJGRUYxMEE1QTc0NAorOjEwOTIxMDAwQzlFNDE3NUJCRjAyRUYxQjc4QzVDMTE4MDQyNUZENEVEQQorOjEwOTIyMDAwM0YyQjVGRDg3RkFGNTNFODYzRjRBQ0Y4REQ5MzZGNDAxQQorOjEwOTIzMDAwMEZEMzNGNTVFOTY2N0E1MzM1MkQ4M0NFNEI3NjNGQjczMgorOjEwOTI0MDAwNDJBNkZBOTdGREEwNDU0OUNGQkM5OThEQkNGRjE2OUQ1QgorOjEwOTI1MDAwMEVFMUFERTlCMUY1NEVBMkY1QUFCMUZFOTQwNTYwQTEwQgorOjEwOTI2MDAwRjU0QUIwNEJBQ0JGMTEzMkU4N0M2QzMyNDRGODNENTc0NAorOjEwOTI3MDAwMTFDMUI4REVFOUEwMjlENEI3RTUxN0VCN0MxNkY5NUI3QworOjEwOTI4MDAwOTU5RUJGNTkxQzQxQUVGQjQ5Q0QxN0I4NzYyQTIxMzlBRQorOjEwOTI5MDAwQUY5MkI3QjZDMzhGRDBGOTRDQTk1OEU3NDRCQ0NFRTcxQworOjEwOTJBMDAwMzg4RDgyRUUwQkZFM0E1RkQ4QkIyOTEwNjYzOTQzMEQyQworOjEwOTJCMDAwQTgyRkYyOEYyQkNDNTQ4OTVGNTJDNDYzQTFERjEzQkI1QworOjEwOTJDMDAwNTRCRUY2Nzk4MEU5NzdERjFFRURGRDYxNjVFQ0RDQ0JGRAorOjEwOTJEMDAwREI5OUMzRjVEMEVCMjU0QjU0MjZCQTFDODVBMjFFM0E2OAorOjEwOTJFMDAwMDI2MUZFMkUzMzkyRjg3QjY3QzVGOTM3NUU5RTRGN0U5MgorOjEwOTJGMDAwQ0YyRkJFQzMzNUQ3NzVFRTA4NkRFNUJBOUIwNTQxNjQyNworOjEwOTMwMDAwMEZDRDUzMDg3MERBMTNBQjAzQjA5Njg0RjhCRTk1Q0UzOAorOjEwOTMxMDAwRDk1NUFFMzNBREEwN0M3MTVGQjZGRkYyRkM2Q0FFMzdCMQorOjEwOTMyMDAwMURDNjkzMjlBMUYxRDVBOTMxQkMyMzY1RkNGQjNCNEU5OQorOjEwOTMzMDAwNDg2RDI1N0JENEFDRDdEMzA2NTVCNzVFQ0Y1NEM0RUI2QworOjEwOTM0MDAwRDBEMENFRjM4RjQ4MjhBMkFFRkJERTJBNTE3RjdBRUYzMQorOjEwOTM1MDAwOTBGRDVDRTdEQjIzODEyQTE1RDBGOUZGN0VBRTAzQTZFMgorOjEwOTM2MDAwMUY4NkIzMTY3Q0NERjk3Rjk2RkVCQjBGMjVGRTM3MjZGMAorOjEwOTM3MDAwOTZFQTQ2MUU5RjZCM0U5NUNBRjVBRkNBMEM5RjQ2NzU4RQorOjEwOTM4MDAwQkNFNjdBRjFEMjk2RjEwRkY1NzA1RTZBRDA2QkFBMTM0MworOjEwOTM5MDAwNTdCQzdDRkY1RUREQkUzNjNCQzRFRjAwNDlBQkVEQUE5NworOjEwOTNBMDAwMzQ4REJFN0Y1RkMxQkY2M0Q1NENBMTQxMjU3REY3QkUyMworOjEwOTNCMDAwODI5RkE3M0E2NjJBMDJFRDRERjNERjQ0RkMzMkZGMkU2RQorOjEwOTNDMDAwMTVDMkFCRkYwNTlBMzc2RDM4RUZGNzI1OTNDNzM0NDNDNQorOjEwOTNEMDAwMUU5NjgxNzU1MjI4ODc1QjQ5QkU0NkREQUQ1MTZGNEJBNQorOjEwOTNFMDAwODBBMDc1M0I3REUyNzdGMDU0QzQwOUZGRUUxRjQyQzlBRgorOjEwOTNGMDAwNEVCOEY0OTk3RkNGNDNENEZGQjZFOEZDNDdCQTc2NzBGNQorOjEwOTQwMDAwRERBNzQzN0NBNzZEN0NDRjZCRTY5QjgxREZGRjAyQjlCNAorOjEwOTQxMDAwRDc3RUEyNTA1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMgorOjEwOTQyMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEI5QjI1QzNDMEYwQTNBOQorOjEwOTQzMDAwMUU4MTQ1QTU1MUY5RThGODFDOUEzQzBCMDMwM0MzNEY2NAorOjEwOTQ0MDAwMjA1RUNDODM1RjFGMkUxQ0NCODI2MDdCODkzMzMwMTg1QgorOjEwOTQ1MDAwOEIzMjMwOTgwMEYxMkMyMDlFMERDNDNGODFEODUwOEM2NworOjEwOTQ2MDAwODFDMTA4ODg4QjgxRUMxMjIwRjYwNTYyNDdBMERBMkZCMworOjEwOTQ3MDAwMUMwQzBDMTM4NTE5MThFNjAwRjE3MjYxNTQ3MzVGMzBFRgorOjEwOTQ4MDAwNDI2ODI1MkUwNjA2NTMyMDY2NjRDNjZFM0ZBNzNBRDA3MgorOjEwOTQ5MDAwNUU1RDA0RkYyMzkwNkQ2RjQwOUU1RjQ2RjFEMEMzNTUyMworOjEwOTRBMDAwNEVBOEZDN0M2QjU0RkUyQzVCMDYwNjY2NjcwNEJGQzBBRQorOjEwOTRCMDAwOUEzNEYzRUQ4MTdBMUQ5QzcxQ0I3N0JBQTNGMjFCM0RGMAorOjEwOTRDMDAwNTFGOTdGREM1MEY5MzVFMTEwMUEwMDhENTc5NTI0QjgxOQorOjEwOTREMDAwMDMwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDBENworOjEwOTRFMDAwMDAwQkVEN0Q3RDlDMTRENTk1RThBOUFFRUFFQUVBQ0ZBNAorOjEwOTRGMDAwQTkxOTdBQTA0NzA2QTg2MTFBMTlFM0EwMDUwQzMwMjgxQgorOjEwOTUwMDAwNDhDREEwMzg0NjkzMzQ5ODkwRDFENUJDMTY4ODIxMDkwRgorOjEwOTUxMDAwQ0ZEN0YxRUQyQTFBQzlGNDdDQ0ZDMDgwMERCMjA2N0RGOQorOjEwOTUyMDAwNTE1QjBDODkyNjI2MjE4OTlCMzU1OUIzNjk4REM5MjM0NgorOjEwOTUzMDAwRDk2QzE2OEQ5QjQ3QjJCODZGMjQzQzM3OUY5Qjc5RUU1MAorOjEwOTU0MDAwNDNGQUJEOTBCMEY3OUM3QjZCQTZBQkE2QkYwMERERTRGMQorOjEwOTU1MDAwOEYzN0ZDQ0NDREE5QkExRkU3OUM3QkVFQjlFNzlDN0I4QgorOjEwOTU2MDAwRUFCNkVBRjE0MzdDMUVDMDU5RkM1QjAzRjBBNjE3MDA4MworOjEwOTU3MDAwOTY0RDk1RTk0RTMzMDc2REFDRkMxQzk4RkRFQ0QxQTVEQQorOjEwOTU4MDAwN0FBRTUzNjJFNUEyRDBCODQ3MzIwMDJFOEY2NjAwM0MxNworOjEwOTU5MDAwMDBGMUMzOEY4Mjg3RDUxQjY5NTQ2MTY3MTM4MERGRDhDMAorOjEwOTVBMDAwNTAwM0ExQTk3RURENjU3RjBGNDA2RTYxRTlGN0YyMEJFNAorOjEwOTVCMDAwQTMzMTIzQ0NGQTdCNkE3OUI3QzVGQTE5Rjk3MjdCQjc2NAorOjEwOTVDMDAwRDUzQUY1QkUwMTA3NjVGOENEMDc4NjREM0RDMEUwOUM1NAorOjEwOTVEMDAwMDdDMTEzMDUxODY2NjMyRjY0RkY2OUY3MjUyMUMxREFGNworOjEwOTVFMDAwQTlCOTUxMzAxNjYxQkQ1QUFBQUYzRDczRDQ3MzFCN0IyNAorOjEwOTVGMDAwM0VFQzg1RUVDM0FDRDQ5RTRERTc4MjBDRUZDQjlFRDMwMAorOjEwOTYwMDAwOTdDODhDMUVCRjYyNzk3RUM1NjA3RkNDOTM0RDIzMURBOQorOjEwOTYxMDAwQjE3REQ0RUYyOTQ2MTcwRUY1NzZEMUIzMTRFOTYxNzQwNAorOjEwOTYyMDAwQUNBQTkyOUU1NUE1RTg3OTJFOUQ0NjdBMkU3RkQ2NThGMworOjEwOTYzMDAwNUM0ODhGRDZDOEU5RDExQUZCNjg5RTRFQzUxODNENERDRgorOjEwOTY0MDAwMTc0MkNGM0Q0NENGQjBBMDY3RDg0NUNGQkIwNDNEMUJFOAorOjEwOTY1MDAwNkQ3QTFBODY4ODlFQTEzOThDMUVGNkM4Nzc1RjFBMTIxOQorOjEwOTY2MDAwQUNCRTg2RjQ4NEIxOUU5MzlFMjFBNEE3QjUwODNEREFEMgorOjEwOTY3MDAwMUY4NzlFMEYwOTc5NEIyMTNEQ0IyQUQzOTM0MjdBRUE2QgorOjEwOTY4MDAwQUJBMDI3OTQwMTlEM0RGNzgzNjQxRDZFOUQ4RTk3NUY2RgorOjEwOTY5MDAwRjA3MUQxMzM5OTU4OUFGNTNCRkE3Qjk5RTY5OUFEQzhBOAorOjEwOTZBMDAwRDg4NjQ1NTNGNUM2MDU1RURGNjkxQThBOERBMzdDMkRFMQorOjEwOTZCMDAwNzgzMDA2QUNCRkQxMzkxMkQ1NzdGN0ZCMTBBODU0N0ZBQworOjEwOTZDMDAwNjZBM0Q1OEJGREJGRTM0OTY3RkZBMzczMzhCRTc2RkQ2NAorOjEwOTZEMDAwREY4ODc5RkMwREM4RDQ2RTU2MjgzMThBRjBFODgyQUY1NQorOjEwOTZFMDAwNDExMkM3RjE2NjYyM0FCNjZCRTJFRDA2MTcyQ0VGMUUyNworOjEwOTZGMDAwMEYxNTZCQ0ZFOTE5REQ5MTI2NzlENjcyRjcxMEJGRkVGMQorOjEwOTcwMDAwNjI0RTA2MEMwNkZCOUY0QzAyRjI1RjhENzE3Q0VDRjZGQworOjEwOTcxMDAwMEMyRjgwMkI5MEVDQkIyQzhCRTMwNzcwMTE5QkE3RjRENAorOjEwOTcyMDAwNURCOTM0MUIyRjlFQjk0MzRCMzA3RThDMzZGNDY5NDhBQgorOjEwOTczMDAwRjc4OEIxQUYxQkY1RDZBOUI4MEE3MjEzRTI1NTlDMEY5MgorOjEwOTc0MDAwQjY1Q0FDODEzMTZEM0U5QkNGRkU1NzY0NzMyNzRDQUY0NgorOjEwOTc1MDAwOTc0NkUxQUE5RjgyOTU5MDA3NzIyRDQwN0Y2NzAxRTlBNQorOjEwOTc2MDAwNDlEMkZDMEYyRTc4OTBFODU2OTFBRTQ1NDg1NzBBMEMyNgorOjEwOTc3MDAwRjZGQzFCNDI3RTdDQ0ZBNDAxRTU0QTMzRDJCMUY0QTJCMQorOjEwOTc4MDAwRTlFMzhDMjBGRjVCQjFENzRDNkM0MzAxRkQzRkI1RTdBQgorOjEwOTc5MDAwOTdDREFCNkI3RTg5MkYwRjgxOTU0QjIzNUZGQ0NFNzlFNAorOjEwOTdBMDAwQjNDQkVGMDlCRTVGREU5ODI2RkU1NjFBN0YzQUZEN0NFQQorOjEwOTdCMDAwRkNCRjA2ODNGQTAxMkQxMzRCODRBN0YwMTlGNThFRjczMQorOjEwOTdDMDAwQTE1Q0IzMzU2OTFFNjI1NTJFNjNFMzc0MTRGMERCM0Q3MgorOjEwOTdEMDAwREUyNDlENEFDNjIxQzc1RjEzN0MxQUY1NEZCQzUwRDhDMgorOjEwOTdFMDAwOUYxQjlGNkY4OTdBREYwMjlENEE5QkFFQ0I5RUU1RTM2QworOjEwOTdGMDAwNTRFQUZGNDdDOEUyN0FBQ0VGNUE1NzRBREFDMUY3N0IxRQorOjEwOTgwMDAwNDVGRENCOUY3M0Q2MkJDNTlGOEY0RkYyMjcxRDQzNzkwNAorOjEwOTgxMDAwQjRENzIzRkU1OTMzMDE4NEM4RDA1RjY4MzlDMDI1RjgxNgorOjEwOTgyMDAwN0Y1ODkzREZERTM2N0UxNzJFQURFM0QxRTQyOTZDQkY3RgorOjEwOTgzMDAwMEQ5MkYzMDJDRDZDQkQ3ODkzOUZDNTcyOUQ2MkJENDlCOAorOjEwOTg0MDAwRkQ0MjQ4N0ZGRDUyMjE3NzMyRTkwMTNFMUVFQjFFNTg1MgorOjEwOTg1MDAwRkY2MUQxOUYyMjc1MDEzMDc5RjZCNTQzNzYyNzQzRUQzQworOjEwOTg2MDAwMUFGOTc4NEU2MkZDREMwNzYwQ0VEMjBCRjZGNTEzN0M1OQorOjEwOTg3MDAwNUY1RkE5NjdEN0UyN0U3RUE1QzIwODYxRTNENTgwRUU2RgorOjEwOTg4MDAwQzcxMkVCRTc1OEJEQzhCMjkwQzk0NjAyMUZGQzU5NEQzQworOjEwOTg5MDAwQTI4OERDRjhEQjIwRURBRjYxRTNCN0FCOEU3NUUxQjdGMgorOjEwOThBMDAwOTI4MDdBMjExQzgzOUMzRjAyQTA0QkUxMjhFMUJGMDJGOQorOjEwOThCMDAwNTY3MEZDMEQwOUZCQUI1MzhDNUU4NThEMjNDNzNERTZDRQorOjEwOThDMDAwNDFGNkI0NjYxNUFDREM1NDIwODc4NkM0RTVCNzM3RUVBNAorOjEwOThEMDAwRjEyMDVENDM0Q0ZGRkJEODkyOENDQzYxRUIxREQ3NDM0QworOjEwOThFMDAwOENEOTFCNDVFNDc2NTJCRkU3NjVDOENENjBGREU2MjVGRgorOjEwOThGMDAwQzgyRDY1NzAwODU2MjY1OUJCOEMwRjU2OUVBNDcxQzFBMQorOjEwOTkwMDAwM0M1ODQ0Q0UzNjRBN0M1RUE1RjhDNEQ5QjM2NDE3NDBBRgorOjEwOTkxMDAwRjY1QUIyMEIzMkI0OEVENTc4QzZDMjdENDBCMzIyQTZCOQorOjEwOTkyMDAwMEZBN0ZEQ0NGRDVDQUYyOTYwQTE5Q0Q0QzYzM0I5MUE0QQorOjEwOTkzMDAwN0M2RjVDREM4NEY4Q0U4QUE3RTBCNTU2NUU5RTI4QzBCQQorOjEwOTk0MDAwNTcwQkE1NjM2NDNGMzU1RDJDRjUxNUVDNjNDRjMzRjlGOAorOjEwOTk1MDAwMzk1MTIwNkYyMzNCQjgxRDMwRDgzNDI0RjRDQzg3NDlDQgorOjEwOTk2MDAwN0ZEQUVGM0YyMEY4QTQ4RTMzNjQ5MDJFNDNDRENFOTc1QworOjEwOTk3MDAwQTZDQkY1ODg1NDVDNEY2QzE2RjRFMkRGRDVDQjlERjI5NAorOjEwOTk4MDAwQUFDQzE0RjJDQTg2RjAyOTQwRjIzNUZDMTQ2NDExNUZBNworOjEwOTk5MDAwQzZDOTE3NkU2M0YwQTUyRjZBQjA5M0M5NTcyQjFDRjU4MworOjEwOTlBMDAwQTBGQzVDMDYxMzU0OUFBMENCNTgyRTAxOTNDQTM2NDhFQgorOjEwOTlCMDAwNTBGOURCMEUyNkY3QUNEQzY2MzE3OTlGNEZGMkZGM0VBMworOjEwOTlDMDAwODk4REZGOUIzOUM5ODUxMUY2REMxRjRGNUY4MUZCMEIyOQorOjEwOTlEMDAwOTNGRjhERjg5Q0M5ODk4NEYyNTQ2NzQxRDFGREIyNTYzQQorOjEwOTlFMDAwRTJFQjc1QUZBMkZCQjFERTVFMEI0ODNGRUU5N0ZBRDMxOAorOjEwOTlGMDAwQjg0RjhDMDgzQjY5QzQwRjhFNzVCQzQ3RDAzRDIyQ0E1NgorOjEwOUEwMDAwREE3ODEyQzY3MTdFRDlCQ0EwNUU3RkJFRTk3NjVBQzdFRAorOjEwOUExMDAwM0U4NUMzNDM2QzVFNDhFRTU2RjM3RENDOEQ4Nzg2RjM1RQorOjEwOUEyMDAwQjJFOEZDRTc2MUUzMUY3RjFFODZBNEZBQTJGMzMwOEM0NAorOjEwOUEzMDAwRjNCMDUxRTJGQTUzRkQzOTFGQkYwQzdEQjQ0RjZGRUUwNgorOjEwOUE0MDAwN0Q5Q0Y4QUY5RTNDQjdGQTM2RkRDQjVEN0E3Mzg1RDAyRQorOjEwOUE1MDAwNzM1N0MyQzQ1Qzg1RTk5MTNCN0MzOTU1OTEwOEVGNDc0NworOjEwOUE2MDAwMTBFRjM3N0Y3MkY0MDM0ODBGOEMyNzE3RTIzRUM1RjBFMgorOjEwOUE3MDAwN0U1NDIyM0Q5OTgyQTM2QzdDRTUxNTM5OEI3RThBMjcyMgorOjEwOUE4MDAwNzg4Mzk2MkNFM0E3ODBDRUY0OTkyNkY0RDk3Q0ZDREY2QQorOjEwOUE5MDAwNDZGREY1RTA3NEZEN0JGMUUxMEYxRDIzN0IwM0I0RTQ4QgorOjEwOUFBMDAwNEVENDRGQUI1MzFBQ0E0NTdGRTMwNjBERTU2OEI4OTExMworOjEwOUFCMDAwQzEyODM3MzE1NTkzMkU2NzY1MDhCQTUwRkU2Q0ZCNjM5OQorOjEwOUFDMDAwMjhCNjY5QTQyOThBNzY4RkI5MUNCQkI1Qzc1RjFCNEIyMgorOjEwOUFEMDAwODI0NENGOTMzMzdDNERDRUU3M0ZDM0Y1QUYyNzYzMzI0QgorOjEwOUFFMDAwQTM0RkNENUVBQjIxOUQ4M0ZBMDZBREQwRUY1MjQzQzlBMworOjEwOUFGMDAwOThDQUU0NzAxOEM3QzNGMUJEQTkyMzRENkRBODNGNjE5MgorOjEwOUIwMDAwNjkxRkVBNzMzRDA1NEI1MUJFNjM5RDg0RTdEQUM2ODQ0NQorOjEwOUIxMDAwODZFRjdEQjEyNUUwMzM5MEM1MDlCMkFCODZBMjRFN0ZCQQorOjEwOUIyMDAwNkVCOEYxNEVCODlERUFBN0UwRjVEMDc0RkJEQTE3NEE5QgorOjEwOUIzMDAwODE1QUIwNEZFMDM4NzJDMTNDRkI5NDU0MEVFOTkyNjNGNQorOjEwOUI0MDAwQzVGNUVFM0YwOUY5RjcxODA5REE2RjIwRjM0OTRCNjNDMQorOjEwOUI1MDAwNzJFRjE1MzJFMDhEQzE0RkE0Q0IwQUU2Mjk1QUIwRUY1RgorOjEwOUI2MDAwQjA3OTFBRjI5QkREQzVENjI1REI0MTlDRkQ5QTEyNjhCRgorOjEwOUI3MDAwQ0JBQkVGNzc2QUJGMTVGMzlFNTkzMTMyNEVGMzFFQ0U1MQorOjEwOUI4MDAwRTBCQ0Y3MzNCRDRGRkJFQUYxNzBGNjEwMjNBMTc3NzUwNworOjEwOUI5MDAwRUEzMTdDRUY0RDJCRDAxN0E1NkU1QTcwOUZCQjVCN0VEMAorOjEwOUJBMDAwODc4OUYyQjcwN0Y5QzYzNjhFQjExRThEQ0E5RDNEM0EzOAorOjEwOUJCMDAwOTUyMzNEMzEyQTNGMTlGQ0M0NjdDNzU5QkJFRDY5OUYwNgorOjEwOUJDMDAwRUU0MzM5QzhEQ0ZEMjVFQzhGNzlERDg5OUREODZGOTQ5MworOjEwOUJEMDAwRjU4RkZEMkE5QTdFNDg0Nzk4RUYzQkRFMzgyRjZGRjFDQworOjEwOUJFMDAwNzAzRUQ2NzgwMjg0NkY5Qjg3REJFMTA2NTgyNDJGMTlEQworOjEwOUJGMDAwQkRCQzlGNUVEM0VFQjQ3M0MzNjY2MDZBM0RCMEZGODJBNgorOjEwOUMwMDAwMkQ3NTBFRDg2RjVDRTRBOEVGNUUyRjJGNzlCOERFRjBDQgorOjEwOUMxMDAwMkEwOTMwNUJCMTJDQUVDN0NGNEEzMkQ1OTNFNUM1MTNDNAorOjEwOUMyMDAwNjg3RjI4QjM1NEIyMEIwNjI1QTdERTdFRDRDM0Y3QkJFQQorOjEwOUMzMDAwMjczQzFBRDExOTgzODk2RjlGNjVGQ0YwRUExRUIyN0IxRAorOjEwOUM0MDAwMjJCNUYzMEZFNzkwM0ZGNUFBQjk4MDE1MTFFRkI4NUU4MgorOjEwOUM1MDAwNTc2NDNDODgyQUJGMUUyRjU4RTc0RjQ5NTZEQ0YzMjcyQworOjEwOUM2MDAwQzBBNzY5RjRGNzc2M0FFNDdBOTc4N0VGNzc2N0M1N0EwMQorOjEwOUM3MDAwOTE3RDU2MzdFQTk5MTgxMzQzMjBGOTMwMUU0NzNFNzhGNAorOjEwOUM4MDAwODJBQkNDMTZDNjg3QzE1QUQ1NDA3RjY4QTBENzUzNzQyMworOjEwOUM5MDAwREY3MUYzNDFBRUI5MjU4NkZBRDFDREY3NkYwOTM5N0E3NAorOjEwOUNBMDAwNUFGMDdEQ0Q5OUY3OTA5RUQ4QUQ3QkJBQjIyMUU0REIxNgorOjEwOUNCMDAwRDEyRUQ0RjMwMzZEMUUwRkNBRjk5RjBDRkY1Qzc0NkM5OAorOjEwOUNDMDAwOUZFNERGMjQxREM0Qjc4MTI4Qjc5QkM3NzQyNjNGQjgyMworOjEwOUNEMDAwOUVBMzVDN0UwQ0M4NzVEMTdCOTNEMTI1NERBN0NCQ0RCRgorOjEwOUNFMDAwQkZCNzlCM0U5QkVGMzVCNTlFNDRCNjE1RjE5QjQ4MTAyMAorOjEwOUNGMDAwN0VBQjk0QTJGOEZENDdGMUREQzYyQjM0ODk1NzhFRTM4NQorOjEwOUQwMDAwNjVGRTY5RTBGNTk0OTQzQzg4RUI3QjhGOTBENzNEQ0E2MworOjEwOUQxMDAwQjg4NjdBMjE2RUNCNEQ5MEFGQTNFOTdBNDk3MkM4M0JFMQorOjEwOUQyMDAwRUJFN0YzRDhDRkZERDgwRkFCN0ZCRjMyRTFFOEM3QUU4QQorOjEwOUQzMDAwMTc0NjNFRjA3NTkxRTBFQjQyRjlBM0FFMEIxQkFGOURDOQorOjEwOUQ0MDAwMDI2RjAzQjI1Q0FFNUI4QUNCRjVEQjhEOTdCRDlGRjZFRAorOjEwOUQ1MDAwMDVBRjAyRDQzN0I1QTEwNEQ5REZCMzQyODkxQ0YyQUJGOQorOjEwOUQ2MDAwQkY1RTM1RDBGRTYxOEUxMkVERDdENEQ0MjhGMDkzRUFEMQorOjEwOUQ3MDAwMzdDNkIwRkU2MDc4MjNEOUU1ODNERTA0RDlFOTQ3RUEyNworOjEwOUQ4MDAwQkY2NkREQzZFOEVBM0Y1MzAzM0U5M0Y5MDNDMUFCOEVERAorOjEwOUQ5MDAwMThBODE3OEZDOEU0QUZGNTlGNjk5RTk1MkEzMkNGNDE2NgorOjEwOURBMDAwOEM4RjMxRkMwMzg4MUZEOUQ1RUFBNDExOEVGOEY2ODc3MQorOjEwOURCMDAwOThFMjYzRkRCQ0QxMEE1OUQ0QTdERTkwMTU0M0JCQkIyMgorOjEwOURDMDAwN0Y5MTY2RjY1MUFEMDQyMDdGRkI4MjFGNjg0RkI2NEUyRgorOjEwOUREMDAwNkYxRjBDMEQ3RDRDQkU2QzZBMUNGNjI3OUQ0NURCOTdGMgorOjEwOURFMDAwRURFMUU4QzcxMzdEOTJFMzdENTEzQzJBQzFERTI5NTg5RAorOjEwOURGMDAwQTdGRTE5NkM2OEQ4QjU2NDlENkQ5RUUyM0JBM0E1NDU4RQorOjEwOUUwMDAwQzE3RDEzMDIyNkNFN0YzQ0QxRDVGNzNCRTREM0Y3NjQ2NgorOjEwOUUxMDAwRDI4MzZFRkVGQ0I1OUMwQ0M4Q0JBNjYwNkYzNDQ5RjNCMAorOjEwOUUyMDAwNjZGNzc3NURCRDQyN0E1NDY5ODRBQzRGQzI1MTEzNURDOQorOjEwOUUzMDAwNjhERkY2Mzc3QTI4QkVBNjg0MzZENDk0QjVCQjFCQUI1MAorOjEwOUU0MDAwQjNCQjQxQzQzRDZDNzlFOEY4MzkxRjM3NjA3MkZEMUQyMgorOjEwOUU1MDAwODY3MUMwQjg0QTBERjBCODQ2MkQxODEyNTA3QjUzNEE4RgorOjEwOUU2MDAwNTBCMDY0MTVDNTUzQTJGRUI3QkFERjVCQTg1RkM5REE2QworOjEwOUU3MDAwMEI2NzgzRTdEMEFGQzJGQTZEN0UxQkZBQUQ4MEFGMUZEMAorOjEwOUU4MDAwM0U0NUZEMzJGNTEwM0QzQjYzQUE1RjZGMkM0NTBGRTE2NworOjEwOUU5MDAwQ0NEOUIzRjI3MkUwNERFODJGNDlGMkFENzg0QzVBOUYxRAorOjEwOUVBMDAwNzA1MUM0M0NDNDhBQzFFODlEMEU3RkVBQkRGMjdDNDc3NAorOjEwOUVCMDAwREM1NEQ1ODczRTI2NDU1OEQ5QjhDRDFBMkZEMDBGRUVBMQorOjEwOUVDMDAwRjlFREM2ODFEMEJGNkNEQzYyOEQ1N0ExMzdEMEVDMkU4NgorOjEwOUVEMDAwMTY5NzFBNTI5M0Q5NUVEQ0JGRTc4NjI4OEUwODRBOEEwNQorOjEwOUVFMDAwRTJDMkMzNTJERDEyQjQ5RkVEN0E0QUEzOUE0M0JDQzJDOAorOjEwOUVGMDAwNkQ1NjFBRjVDNUYwMEM4RjI5OUJEOEVGRDg1MUY0MDc5MQorOjEwOUYwMDAwNDBCRUMxNEM5Njg5MkYyOThEQ0EyRjBCRTlGOUNGNzIxQgorOjEwOUYxMDAwMzg0QTc4OEEzODU3N0YwNTc5MUZFQTI5N0YzRUExQUFGNworOjEwOUYyMDAwNjZCMjk4M0Y5Mzk2QjlGREEyMDY4QUJGQkY1QUVEREM5MAorOjEwOUYzMDAwMjEyRjlCQ0VCNzBDRjI4RTNEMUZBRTY1MkVGN0U1NUM1MAorOjEwOUY0MDAwN0M1MDBFOTRDNkVGMUU0MzNFMEMzNUFDOEI5NUEzMTc4OAorOjEwOUY1MDAwNzQ2NkU3MTRGODQ1QTY2QUVEOTRDQkUzQjFBNzE4MUUyMgorOjEwOUY2MDAwMTA2MkMyQjNCMkNDMzg2MjdFRjVBQjREMUVFRjQwQTU5NQorOjEwOUY3MDAwODhFNzcxQzIzRTYzNzg0N0E0OTk1QzRGRTNERkVFQjY5MQorOjEwOUY4MDAwODMzOThDQTM3OTZGMEI1OTM4N0ZCMkY1MjRDOEFDRkVBNgorOjEwOUY5MDAwMEYxQjY0OTBEQTExMEVCQ0U2QTFGOTVDNjU5MkJFNkFGMworOjEwOUZBMDAwRTFGRTlEQzVGRTIxMUQ5MTU1QUE2M0RGNDJGRDM5QjkzMQorOjEwOUZCMDAwNkYzNUExRkMzQkUxQ0ZDOUNFNzg2NjdGQ0ZCM0YwQjM1QworOjEwOUZDMDAwMDU1M0Y4QjM0NzU2QjE3OEIxQTI3NjFFMkVDRThGQkE5QworOjEwOUZEMDAwQUFGOEIxOUZDOTBCMzA3OUQ5QzdGQzQ2QzYxNEM4MzA1RQorOjEwOUZFMDAwQkYxMUUxM0RDQzZGMDRGMjI3MEQyQTA3N0E1QUE4REM5NQorOjEwOUZGMDAwODU0RDU3RTJGOTU5NkFBNEE5MDlFM0E1OUY4RTdEOTA4MgorOjEwQTAwMDAwNTVEOThGQkE4M0NFNTUwMjlEMTgzRkRGNjlDM0VDODlCRAorOjEwQTAxMDAwODRCMDM4NjdGOTQxRkZFRjNBMzAxRUIzRDNDRjYxODA4NworOjEwQTAyMDAwODkwRUNCMDFDQjdEMThFRkRGMTlFNkVEN0YyNjg3M0E0RAorOjEwQTAzMDAwRjEzQzYyQkYzODQ3MDJDNUQyREU1N0UwRkZFNzY1MkYyQgorOjEwQTA0MDAwRDE4MTM2MTA2RkZGOUI1RUVDQ0ZBRjA4MzgzRDg3RjBCMworOjEwQTA1MDAwOTk4NDE5MUYxMTFGQkZDNkUxQzY4MUI5RDQzRkE5MDA1OQorOjEwQTA2MDAwMzY1RTdDNjAxRTFGNkYwMUI3RUZBMTc1NDMwNTNFRjY5QgorOjEwQTA3MDAwOTFGQ0RGODQ4NzcwNDg3MzZCMUQxRTJBODM2QTlBODA2NworOjEwQTA4MDAwREJDREZFNUE4MTc3OTVGRDgwOTJFNEZCOUQ4ODJCOTU3MAorOjEwQTA5MDAwNUUzNzE1RjYzNTgxNDdBNUY5MDdGNDRCMzE3RUMxRjREQgorOjEwQTBBMDAwNzAxQUM3RkRDN0UyRkJGNDVCM0RFRTdFRUZCOUYxNDVFOAorOjEwQTBCMDAwNkQ5RjQ4MkI4Q0M1N0YyOTI3NzU4NUMxNjFFQjcwQUVEQworOjEwQTBDMDAwODlDMTkxMUI3MjY5NUFCRTU1OEVGQjZCNTkxN0YxRDAyRAorOjEwQTBEMDAwMjRBRDdGOUJDRjhBQ0VFRDhFQUI1REYzRTg4RDVBNzRCNQorOjEwQTBFMDAwMkVFOTBGRjFGNTU3MkRCRTJCNzE5QzgyN0VFMEU5Q0U1MworOjEwQTBGMDAwODY0NEI4NzRCQkZBODQ2N0NBREU2MkZGQ0RFODBBNENCNgorOjEwQTEwMDAwRDk2QkVDQkY1QUFCQ0UwMUQ3QjQ1RkU0QTgxRjM2RTdEQQorOjEwQTExMDAwM0JERTdCRjU3NzM4REU5RkVGM0M1REU2QTJBM0Q5RTYxOAorOjEwQTEyMDAwOUY4MDYzNkUzQUFCOTYzQkM1MTBGQjVDOUFEQjhGOTNDNgorOjEwQTEzMDAwQjBEODhGMkJDMTY3MTYzQTYxREVBRjBGNkVBRUUxRjY3NQorOjEwQTE0MDAwMERCNzYzRkUxMzg4M0E2RTNDQ0MwMkZEMkI2MzNEMEVDNworOjEwQTE1MDAwMUIxRTA5NkNGQjM2RDczMkJERkY3RUVEMTMxNDg3QjM4RgorOjEwQTE2MDAwRkExNUYwNUYzNTNENEU5N0VFNEM1MTlDMkREREU3RDM0RgorOjEwQTE3MDAwRkJBMzE0NzdBMzM4REI3NjY2QzhGQjU4QjlDRDlCREMwQworOjEwQTE4MDAwOEFGMjdCREEzRjM3MEIxMUVDMzdCNTAyRTNENkZEQUUyRQorOjEwQTE5MDAwNzg4MjVCOUVFMjlGQkFBOUU4Nzk5OTVEOEVGNEYwRjgyNworOjEwQTFBMDAwOUYwRDZCOERDNUYzMDBFRTU1Rjg3OUZENzdCREM5N0IyQQorOjEwQTFCMDAwMTEwRkQ0OEQ0MDcxNUFBMDc1RTAzNUY4RkVGODdDRDNBQworOjEwQTFDMDAwM0FGODA1RjlGRkZDN0M0Qzg1RjRCMTY2NDY0Rjg2RjlGOAorOjEwQTFEMDAwNkIzQjBEQTQ5QkFGOTM5MUE2NzU1QTlDM0RERjVCRUI0NworOjEwQTFFMDAwMTEzNkREMDREOTRGOTk4RTk5MERCODlFNkE5NDA5M0FCQgorOjEwQTFGMDAwQjdBQjg5MTdDN0U3N0VDNTIzRTZFREQ2QjJGNEI5RTc1QQorOjEwQTIwMDAwRTM1NjBDQjRCMjc2N0JFNzQ4MUVFMkZGMUM0RkY2MTAxMworOjEwQTIxMDAwQzZBMzFBM0RCNEFFNzc1QkVBRTM3OEQ0QkVCQkFERUUxRAorOjEwQTIyMDAwMjY4QUE3NUJBQTQ3MjYzQTcyNUFCMTc1MzgyOEVDQTY0NworOjEwQTIzMDAwN0UxMTNGREREM0M4RkRENkU3M0I1RUQ3RjBCQzY2OEYwRAorOjEwQTI0MDAwRDk0OUY5MDA0QUU2ODdENDdFNThGMDNCQjNGODA0QzVGMworOjEwQTI1MDAwQzk4NzRCOUNCRkY0MjlEQ0NGRUYwRjA3QkFCMzQ1REZBQQorOjEwQTI2MDAwNDdFODdEQTZBOUUzODU4NzkwMEVBNjdGMEY5MTdGMDYxQworOjEwQTI3MDAwMEQ1QjE4MURCQUE1MkY0MTdFRUY5RDYzNzk3RTgxNzIxQgorOjEwQTI4MDAwQjVEQTQzNzIxNkMxQjg5QzhDRTdBMjRFRkY3OUVGNkEyQgorOjEwQTI5MDAwMEY5REIzNjZGNDkwODlGNkZCMjlFQjBEQTA4RDQ4RDE5NAorOjEwQTJBMDAwMUJGMDdDQjFFNkY4OTUzQUVEOTVDQ0RFNjkyOEIwRjM2OQorOjEwQTJCMDAwNkI1NkE1NTZFMDdDRDk3NEY5NjA3REQxRjk5MEU2NkVCNQorOjEwQTJDMDAwNEYyMjNGRUY1RTAyMDZGQTYzQkVCOTVEQjk0NzU4QkY0MQorOjEwQTJEMDAwQTc1N0ZBNzQ1NDA1NTc4N0FGQ0U3RDEzRTU4OTZEMkJDOAorOjEwQTJFMDAwRTgyN0ZCQTI1NjBFRUQyNjdGNzcxMDBDRjYzRTEyM0JCOAorOjEwQTJGMDAwNEM3Njk0MTY5M0MxNDJCQkVBRkZDQTM0NUY0QzY3MTA5OAorOjEwQTMwMDAwNURDQUZFOTU0N0Q3QjBGNkVBNkFDRjJDQjJDQjVBRjlCMAorOjEwQTMxMDAwN0VBM0IzN0ZCOERGNjg3MUE3NUQyNTdCNzNENERGRkRCMworOjEwQTMyMDAwRTM4RkQzQjlCMkVBQjJBQjE0MjhBODhGNzZEN0VBMEQ3RgorOjEwQTMzMDAwRUY2OTJFQTIwRkVDNTIxRThGRDBCOTJFQzhCNzk0QjU3QworOjEwQTM0MDAwQjM0M0M3M0ZGQzBGMkYxNkYwRkQ4NEUyQjJEMzg1RkQ2NworOjEwQTM1MDAwNjZGNzUzQ0E3RTNCRERCM0Y1MUY1RTY0QjI5Q0Y0RjIzMAorOjEwQTM2MDAwMzhBOEEyNUFCRkM0NzU3OTQyOUMyRkVFNzVFNUREMjQ0QQorOjEwQTM3MDAwQkQ3Q0JEOUMxNkVCMTg2NzE2RkQ2REY0OEY5MTVGMDNENQorOjEwQTM4MDAwRDc2Q0U0N0UxNjk4MEUzRjg2QURGN0QzNEE4MTlGNkQ1OQorOjEwQTM5MDAwRUY3NzE5QUJCQzNGMzE5NUQ3MTJGMkM3Q0JFNEI1QUMyMAorOjEwQTNBMDAwNTc5MjhBQjc0QzVFOEJCRDVFNDc1NzVCMTA2M0YzM0I5OQorOjEwQTNCMDAwNTYwQkQ5M0U5Q0RGMzUxNjZDNDY3OTk1QzBFQ0QzNzlBNworOjEwQTNDMDAwRkQwOUZCMUNBNTA5RTVGMDFBRDg4MkVCRDc1MDRDM0NERgorOjEwQTNEMDAwODcxQzZDN0UzNzczMTQ0QkUzQUI0NDlERjI1MTY5MUVBRQorOjEwQTNFMDAwQjdCQkU2NzFCNkQ3Njk4NzdCMjE1MTkzNkJDMjM4NDZGQworOjEwQTNGMDAwRUMyNkM0NjM3NzU0MzU3MTNEN0EzREI3NkNERDY0NEMwRgorOjEwQTQwMDAwOUY0NzU4QzFGNTg2Mzc5QTgzNjJFM0RBRkNCQ0MzNkI3OQorOjEwQTQxMDAwMkRGNDYyOUM1RDM1OEYyNTUxRkUzQjU1RjI3QkRERjVCOQorOjEwQTQyMDAwNkZGNThBM0M5NjI2NTBEMDNFNEJFMzNBQzFGNURCNjU4QQorOjEwQTQzMDAwRjFCQzMxNDk0RjNENkMxMkZBMDlDN0I5NTZGQzREQ0FGRgorOjEwQTQ0MDAwNjdGQjk0MENBOTE5QUIwMDZFRjQzNjcxM0REM0IxOTE0MgorOjEwQTQ1MDAwREIzREQ3ODMyNEQ3NjJGRDI0RUQ1RjBEOTYyRUIxQkU4MAorOjEwQTQ2MDAwNjFENEI2Q0JGNERCNjJFQjBCRjRFNDhENDIzRUE3REVBNQorOjEwQTQ3MDAwMjc2M0VGNzNCQ0Y3NzIzQ0MzQzI2RUQ2MzdDN0Q2MkZDMworOjEwQTQ4MDAwMkFEMkJFQjZCODlFQkM1RUM4RjU4RDVFNjE0RkE0MzdCOQorOjEwQTQ5MDAwNTM1RUQwQTA3MTRCMDJGOTNDQjBDNjMyQjdBMEQ2NDI5MQorOjEwQTRBMDAwMTlDMTdDOTQxMDM4RUM2MzI2REYzNzIyM0ZFREY4OTExOAorOjEwQTRCMDAwQTIyN0E4QjRFRDgxNTJGM0VGQjYwM0JDMzE2N0RFNDlBMQorOjEwQTRDMDAwQjVFN0I2RjFGRDM3OTUxREM3QkQzRkRCRjk2REE4RjlCRQorOjEwQTREMDAwMEFGOUU0MTU3QzY4MTVFQjY1Q0E1RUNBODhGNTZFNTIwOAorOjEwQTRFMDAwM0U5MEFDNUE0OThDNEJDQTEyMzhFQ0FEQkQ0MjVFRTQ4QQorOjEwQTRGMDAwMDA3RkVGQzY4M0Y5Q0Y3N0UxM0E5NTIzMTZGOUQ3MTA5RAorOjEwQTUwMDAwNkFFMzc2OUI2MjFBRUI4QkUwNkY5RjczM0UyMUYyNzhEMQorOjEwQTUxMDAwRTM5OTc3RDNGRTM3NTZEQjQ5RkJERTgwNUU1RTdGRDg1QQorOjEwQTUyMDAwRkJFQTFBQjg0MUMzQjhERDYwNjlGRDMxNTZBODNGRDREMworOjEwQTUzMDAwQThDN0I5OEU4NTdGQ0ZFODM3OEFGMUQ5RTY1MzRDQzRENgorOjEwQTU0MDAwNEJGQkMzMUI2MzY1RTM4MkFFRjMxNTUzQjUxRTIyQkVGRQorOjEwQTU1MDAwOTRFNkRCMjNFN0MzQjczMTkxNTdCNzYzRjBFNTE3NDRCRgorOjEwQTU2MDAwMUU4MjUzNUYyRjJFQTlBRkJGRTBEMEE3NDI1RkJGOERFMQorOjEwQTU3MDAwRkM3RkVFQURFMDdGQjU3MTE4RkY3NkQ5MzgzOTgzQTkzRAorOjEwQTU4MDAwNzgyNTRERjQ4QzFBRkJEMjE0OEZDMUY1OEQ3NjQwQTYzOAorOjEwQTU5MDAwODNGMjE1MjAwRUE0MTdCMTIxRUEzQkJGNjExMURGMDIzRgorOjEwQTVBMDAwMjJDRUE0MzYzQUY3MTkzOTFBNzBDMEIxRUUzNDYwQkUyMworOjEwQTVCMDAwMUFGNjhCNzRGQkI3QUIzNEFFQ0Q2RjY2QjM1MDNFOTlEMQorOjEwQTVDMDAwNkQ1RkUyNzI0MjdGQTQ1NDdFOUE1RERBRjExQjNDQzY1NQorOjEwQTVEMDAwMzk0QkZCRDRDNzhGMjA3RjRGODU4MEY2ODdEMkY0M0I2MQorOjEwQTVFMDAwQzc4OUJEMzc1MTVFM0ZCOUVBNDM0ODMxNUUyRjcyMkVBRAorOjEwQTVGMDAwMzhCRDlEMDJBRjE3RThCNUZGRTNEMjI3RDY5M0I3NzVGNAorOjEwQTYwMDAwOTMxRTA1OEY4OUYxQ0JGRUQ4NDY0ODMyQkM4NzgwRUI3QworOjEwQTYxMDAwOTMxMTJDNTc2MjNFQzkxMjFERkRERkVGN0EwRERFREU2RAorOjEwQTYyMDAwRTBGRTlENDcxMzcxN0FBMzNBN0ZFRjZFQjYwRjE1QjMyNAorOjEwQTYzMDAwN0YyRTU2Qjk3RDdDRkExM0E5REY2MjVFNDI3QUE3NjQ0OQorOjEwQTY0MDAwRTBGRTc2QjIyNzRGRjZEM0E2REMyNTJBRTZBNTVEQTI2QQorOjEwQTY1MDAwQ0VBNDdBOUJGNjM3QTk2QjBCRDZFNzI2RTBFN0ZFMEM3MworOjEwQTY2MDAwMTFCNTUwOEZEQUVCNEZDREY4NUU0MDNBNEY2NDc4NUMwRAorOjEwQTY3MDAwRTM0NEU2REZFODVDRkZDNDAxMzk4QjRDM0QzMTcyNjM5MworOjEwQTY4MDAwRDlGNTczNTJFODZEQkJERUM5MDNCMjg1RkRBNTQ3QTRCOQorOjEwQTY5MDAwRUMwMkQ2RkVBNDYyNDU4QUU2MDE0MDk2OUYwNzBCRjhCRAorOjEwQTZBMDAwODMxOUQ5MjE5N0E3NzcyNDU1RDQzMzI3N0IzNEU5NjdCOQorOjEwQTZCMDAwNkM2RTZFNDczQTE5RkU5QjMyNEQyQUZBNjQ5NUU4OUEwMQorOjEwQTZDMDAwQTEzQUU3RDNBNjczMTBGMzE1OUFBNkYyNzcwNkEzNkYwMworOjEwQTZEMDAwMTBCREE3RDg3M0I5NEMzQzY5QTdEMDEzODNEMUUyRkE1NworOjEwQTZFMDAwMjQyMENFNUYwM0RFNkNGMUJDMDcxN0JEQzExNkU3QkFBQworOjEwQTZGMDAwQjRGMTFCMTZGOTE0QzMzQUM3NkIzOEU2QTE3OTE4NkU4QQorOjEwQTcwMDAwMkNBRkM3MDZDNDNDRDhGNTA2NjNGQ0JDNzU1MDQ5NjgzRAorOjEwQTcxMDAwRDVFMEUzRDU5REY4OTQxQTQ3NUI3NUI4MEJCN0Y5MUFFNQorOjEwQTcyMDAwNDg3Njc1MzYxMTdCNUZDNjM4MDI4NTBFMERGNDlGOUUwNAorOjEwQTczMDAwOTIzRUM0RDZDQjBGNkYwQjU5NTIwQzFGNEVFNEJFQzlDQworOjEwQTc0MDAwRTg5OEM1RkMxREI0NEY3NTJCMkJDRDZEQzNCQzRFMTlCRAorOjEwQTc1MDAwMzA2RUZDQzg5RkJGOTE3QjE1RkQ1MUU2RkYyMDVDNkJGRQorOjEwQTc2MDAwQTRENjVGNkI2MDFFNUM1MkMyNzVCNTFCOTUzRjc1RkUyQgorOjEwQTc3MDAwQUVGRThFNTZCMUZFMThGQ0QxQTFDRUI1MTg4NzU0MjA3RQorOjEwQTc4MDAwMjFFMjE5MUUwM0YzRjU2OEU5N0I0QUVCMDlENDlFNjdDMQorOjEwQTc5MDAwN0Q1M0VENEFEMkU5RjI4QjdDQjBBMUJDRkZCRDk1RDdDOQorOjEwQTdBMDAwNEZCMzdGQTg3NzY2QjlGQ0FDREE2RUE3REQ1REUzN0FCQworOjEwQTdCMDAwQkY1N0M4NkIyOUJGRjJBRDFBNjcyNkJDQUNFMUI5QUM3NAorOjEwQTdDMDAwRDZFNkQxQjM1ODFGNTJCNUI4REY0NjZFNTEwMEVERjg0QQorOjEwQTdEMDAwOTk4NkRFOEIyMUJFNEE3Q0RGMDUzQ0NGMERCRjg4MjhFMQorOjEwQTdFMDAwNUM3RjlGNTFCOTFEREI3OEU3QTcyNURDOUY0RUExOTdDMQorOjEwQTdGMDAwQkQxOEUxQkM1OTRDN0VERDc2REY4ODcxODJFMjg5NDM2OQorOjEwQTgwMDAwNzBCNEFCMTlFREY5MkQxRTNBNEZEQUREQjZBRkI2QjAyNAorOjEwQTgxMDAwRkQ3N0M0Mzg1M0YzMEY4NkIyOUM0RTY1Qzk5RjU3REI1MgorOjEwQTgyMDAwM0MxNkVFNUJFNzNCRkY2RTNGQjlEMkZDMzc2Qzc1REE0NgorOjEwQTgzMDAwQzVFNzNBMkYyRjIxRTJDQjJBQ0ZGRjg1OEU2M0NGREJFRQorOjEwQTg0MDAwRjRGNUMxRjU2NkUzOUQyRjUyMUM2N0NDMkNBRjZGQTZDMworOjEwQTg1MDAwQ0ZEQkNCMzQ2RjkxMzZCMDhBQzU3MTdFMkNGNjMxNzc2MQorOjEwQTg2MDAwNUU5RjA2MjkzMDMxM0ZGMTE1QkVGRkM4Q0RDQjYzMDc4RgorOjEwQTg3MDAwQ0JFODFGMzlFRUYyM0Y0NDNGRjkwRjAyMUNDNUZENTZFRAorOjEwQTg4MDAwMzEyQTdDMEY3Nzc4QkZDMkY2Q0RFMEY2MkJGNzJCNEI0MQorOjEwQTg5MDAwMzEzRkNCQTIzQ0FGRDExRThCOUU0RkNFQkZDRjIzRjAxQQorOjEwQThBMDAwOTVDMEIzNUNFODE1ODNDRTNGRjcyQjY0NkY3OEUwMkMzRQorOjEwQThCMDAwQzY0MTQwMDdDMzk2M0JDMDdBNURGQjE1OEFDNzE4MjI4NAorOjEwQThDMDAwOEY4MDU1OUQ4OUVEODBGNEQyNjI0Q0Y2QUNBNzczN0FFNworOjEwQThEMDAwRUEwNzNCRTI3MTk4NkUwRUIzODYzNDRGNUVDQjIyQkMyMgorOjEwQThFMDAwOTQ4Qzc2MjdFM0U3MkVCRjgwMEQwMUQ3MEE1ODE3NzBBNgorOjEwQThGMDAwOTM4MDYxMUZDMTQxOTVDMTE4OTdGNzY2NzQ4MjAzMDI2NgorOjEwQTkwMDAwNkUxMjcwOUQ4MDZCMDUzQzVGQzBEMjNFODI3N0E5QkMwMQorOjEwQTkxMDAwQkY5RDRBOTZGNzFGMTBCMDIxRTAzQTAxRUIwMjlFMkYyRgorOjEwQTkyMDAwNjAzOEM4QzdGNzcxMThGNzQzODI4MzAyNkUxMkYwMENDMworOjEwQTkzMDAwMDFENzBBQjg1OUMwRDI0MTgyNEJDRDVGMjA2RTExN0YzQQorOjEwQTk0MDAwQTdFNkJGOEJGMzBENDBGODlCMDkxN0RDM0Q1NUJGQzA1MAorOjEwQTk1MDAwMUYxREVDMzFBNEMyRjM0MzZGODlGOEQzMTIxRkQ3MzMwNAorOjEwQTk2MDAwMTMxRDA5Q0E1MzYyRkU0MkZBNDRFMUI5NjNBQ0I4QkM5NAorOjEwQTk3MDAwNUJBMkRERTRCOTc5OTRENTJCMUFCRkVFMkRCQTJFQUFDRAorOjEwQTk4MDAwQzU2RkRENzlFMkY3REVGRjIwRkM2RUY2RDlFQjlFRkJBQQorOjEwQTk5MDAwRTcxMzFEMjZFMUU5RUVDRkREMEVFRDJEMjgzOEE3MEZEOAorOjEwQTlBMDAwMjhEOTM0QzY2Qjk4OEQ0NEZFOEU1NzczRTZCM0RFRUQxRQorOjEwQTlCMDAwRTNFNzlDQkQzRTlFQ0ZEQTJGRjA5QkU4RTBFNzBGODNGNAorOjEwQTlDMDAwMEIwMkQ5ODNEMkY0MzhFMzVGRjg3ODNDRTFGQjM2OUU4MgorOjEwQTlEMDAwREE2MUYyN0I4Mjc5QjY2MkM5MEZFMjdFRDQ2OEJDQjNEOQorOjEwQTlFMDAwNDJGRUJBRjJGRjBBRkQ2NTc3MUNFNERGRjAxRDFCMjc2QgorOjEwQTlGMDAwMTAyQUNFQTdCQjI3RjVDRDJERTkxM0FDQUVFNjY3Q0Y2NQorOjEwQUEwMDAwRDE5RkQxQTNCMUM2QzJCQzY5RjExRTI0OEY0Q0ZBRTUxNworOjEwQUExMDAwMENBQjY3RTc4QkM4RDQzRjhGMTczN0YyNzhCMTJDRUFCRAorOjEwQUEyMDAwRDMzODRERkMzQjA2NkIwOUVFMzNFQzc5OEIxODQ3OUExMworOjEwQUEzMDAwREVBRkJCNURDRTU3QzdFNzRCRTA2M0U3QTdDOEYwMUNBRQorOjEwQUE0MDAwRjUzMzg5OEY5MjIwN0VCOTlGNjMxRUIyMUVCQUYwRTc1QworOjEwQUE1MDAwMTcwQTdCOEQxMkUzNjVGOEY5NEJBNUY2OUYxNUYyMzJDNAorOjEwQUE2MDAwNEQzRTRCQ0NFQjdGRjNEOTc2Q0E2MTBCRjM4MTZDMzk0OQorOjEwQUE3MDAwQjJFNUVCN0NFNUU4ODJFNTA0MzdBNEI2RDI3MjkyODZCMworOjEwQUE4MDAwMTRBRDFCMDU1RENFQzVFNzJFMkY0NUU0MjQ1NzU4QkZGNgorOjEwQUE5MDAwNUVBQjE1RTdGOTI2QzkwQkMzNDcyMUI5RDUzOTNFRjU5OQorOjEwQUFBMDAwNEJBMkQ0OUY4NDZCN0MyMUY2MjA2MEU0MDNBM0Y3NTI3MQorOjEwQUFCMDAwQUQ1NkYwODFDNzI5MDI3OENFNThEMDlFMTE0N0Y4NEE4QQorOjEwQUFDMDAwQjIyNEY0M0VBRkI3NDZFM0VCN0M3NTY3MjNDNzFGNDQ1RgorOjEwQUFEMDAwRkYyRTdDNTk3RjVBNjE3RjMyMzRCQUU0OUNFM0ZEN0VCRAorOjEwQUFFMDAwOERDRjJGQUI0RkRGRjk0RDFCNUY5MTA4NUYxOTEyNjlCNgorOjEwQUFGMDAwMEY2QkY3NTE1MURGQURCRkVDNzI4N0MwNkZENDAzNUJCMgorOjEwQUIwMDAwRjk3NzkyMDkyOEZDQUUzMkE4NzlDNDc3OEY3QzlEQjk3OQorOjEwQUIxMDAwRjU5MzE3RTU2QUU5RjlDQjU1QjU3QUJENUUyQkJFRUYyMworOjEwQUIyMDAwMzAzRERGODJGMUJFNTJGQkNFMzE2RDcyM0Y2ODExRjNEMgorOjEwQUIzMDAwNzY0RUYzRkU2QkQ0NDNDQkE2RTZCMzVBN0MyRjE1RTNENworOjEwQUI0MDAwOUUyQkJFMjdBN0UzNUI5NTlDQkQyMUY0NDRCNUY4QUREMQorOjEwQUI1MDAwMzk0RkZDNUU3NkUxRjc1NkM5RjUxOUIxMUY1NThCRkZFOQorOjEwQUI2MDAwRkJDRjUzMUU3RTMwOURCRjU1QUQyMzhGNzY2RUZDRkQwRgorOjEwQUI3MDAwRTg3OUUyRjdDRjZFRkM0QUFDNUI1NUUzRkM0QTAzOTdGOQorOjEwQUI4MDAwMEY0NTlDQkY1NDhCNUY0RjY1RkM0NEJFRDhCQTAxMkI2OAorOjEwQUI5MDAwNEVGNjFBRjlFM0JCQjU3NTAzNjk2NTBBM0YwQkI4NUU1QgorOjEwQUJBMDAwM0ZEN0YxRUZBRjdBRkM3NzBGNThDQUQ0Rjg4RjY4RUYzMAorOjEwQUJCMDAwNzY4Q0FGMjgyNjA5NUJCNUUzM0U1QUVEQjhFOUY3Mzk0NAorOjEwQUJDMDAwRTg3RTdBRTQ3RDhFNzFDRjk3RUY1RkFDN0FGQzVCMURGNworOjEwQUJEMDAwNzQzRjM3NzJBQjkzRUU5MDQ5RjlDNEQ1OEVGQkNERjMzOQorOjEwQUJFMDAwNUNFRkJGMTRGODA2MzVEREIxMEY5NEIyREZDRjA4QkJDMAorOjEwQUJGMDAwRjY4MzlBRUU5MEUzNTJGNURGMTBGNkNBQkJBQUFDN0Y1QgorOjEwQUMwMDAwNTJGNERGNkNFMzUzQTFGRTNEMDJGRjdCQUFBQ0ZGNkI2NQorOjEwQUMxMDAwODFDRkNBMkFGMUY5QkU1ODg3QTVGNkNGODBFMDdCMTAxNAorOjEwQUMyMDAwNzU2NDgxNUY3M0ExNzk0QjVCN0M0OUM5OEZFNzlDQ0ZDOQorOjEwQUMzMDAwRjREMDc3ODI2RjI4OUE4RUYxNEVFODAyQjJDN0ZEQzczMgorOjEwQUM0MDAwQzMwNzc5NUU0OTVBRjhGRkM5QjRDNEY1MzBDNUI3QkMyQgorOjEwQUM1MDAwNTFEMzcxMUU2N0ZCNUQ4QTkyQjA4QTlEQjdENUZBQjk1MAorOjEwQUM2MDAwRkU5Mzc0QjM5QkFGNzcxNTMwMEZBOTU0RkRBMEJGNzg0NgorOjEwQUM3MDAwRkNBNTA2MjYyOEZGMDQ2MkUyMUNFOUNDOEQ0NkQxNzNCMAorOjEwQUM4MDAwMDIyNTQxNzkyREIyQUVDMjQxMzZDRTQwRUQ0NkEzMzAwOQorOjEwQUM5MDAwNkYzOTZFRTMxM0IzMDgxRjU1RTdGOEE4OEE2OTE1Q0IxRgorOjEwQUNBMDAwNTM5RUUzRTdGMzZBRjc2M0ZCODc1MjZDMDJGODNEMEVBRAorOjEwQUNCMDAwMUNCRjQxN0ZBMjFCRjNDNEQzQjUyQUYxNjkyMEVDM0MzMQorOjEwQUNDMDAwMUZCRjQ5RjRGMzRFNDFERjgwQjc3QzlFNThFN0NDNzYzNgorOjEwQUNEMDAwQ0E1N0VBNkZFN0Y5NEEwNjk4OTRERjM5MTAyQTdGQUYxRQorOjEwQUNFMDAwQzE1ODBGOEZGRkVGMTRGOTRGMjNGOEZEMjg3RTRGOENDQQorOjEwQUNGMDAwREY4RjJFQzRGNjVGQTFFRkYwNEVCNTdBQ0FERThGMTM1OAorOjEwQUQwMDAwMzY5RDcxRjY2MDhCRjM3QjFFM0IyRUVGMzc5Q0RGRjU5MworOjEwQUQxMDAwRjg2MkNFRUY3QUJDMzMxNUNBRUIxQTA4RjFGMzgxNEExOAorOjEwQUQyMDAwRjhEQjc5RUY3NkJENjEyNUE1RTk0NUY5OTQ3NTlDMEJCMworOjEwQUQzMDAwRjg2MjRFN0NERjNFRkVGMUY2NDFFRjYxQkQxODVFNkZCQQorOjEwQUQ0MDAwMTVERjRBQzUxQjI2RTlBRDUxNTM1OUFFMzcxQ0Y5MTkxOQorOjEwQUQ1MDAwM0Q0MkJFN0MzNTVBMEFGNTMyRDNCQjI1REUwNzc4RkI2RgorOjEwQUQ2MDAwNTA4MkYyNDNCNDU4QzJBMDc4QjREODA3MzQ1QzBGMDVCRgorOjEwQUQ3MDAwN0NGQUE0QkQyRTAzMUUzQkRGOThGMjNBMjRDM0EyRjM1MworOjEwQUQ4MDAwNDcwREQ3OTEzNEJERERFNEJDREE3MkZGRkJCNTMxNUExMworOjEwQUQ5MDAwMjdGNTFBQUQxM0M5OThBMEVGQkFEQ0UzMkNGNDVCRkJERQorOjEwQURBMDAwRkM3ODNFRTZCNzFFQzBEMkZCMDczOTU5NkNCREVDRjUwNgorOjEwQURCMDAwNzMzREFBREQ5MDMwQjRGOUU0QUE5MkRERTNDNkUzNEIxQgorOjEwQURDMDAwNjJGRDg1NkNGQ0QzMTZFNTVGNTQ4QkZGQTM1NUUyNkZFMworOjEwQUREMDAwOEZDM0YwRkYxQ0VBNTk4NkZGRTdCMTJDODVGRjUzNDI3MQorOjEwQURFMDAwMUZENTgxRDE0QjdCQjZDMUY1MkNDMDdBQTMzMEJFMUVENgorOjEwQURGMDAwMDhGMDdFRUI4NDlFMDJFODcwRTRGNTc4MDU1REQ1RDIxQworOjEwQUUwMDAwRjNBQ0FERDcyQUQwNjM4RkNCRTg3OTUxQ0NDNzc3Q0FFMgorOjEwQUUxMDAwQ0RDN0I3MDUzRDgxMDBERkI3QjQwMzA5ODMyRDREQjgxOQorOjEwQUUyMDAwQjhDNEJDOUMxMDc4Q0MwQzg4Qjg1MkJBRTM5Q0U0RUE1NQorOjEwQUUzMDAwQTUyQUU5MzgzMTM1MkZBRjhBNzlGOUU3NzI3NDFDMTdFMgorOjEwQUU0MDAwNzI5NTkxNjFFNTQ5REM0RjlCRURGQzg1MEQ4RTc5OTlGQQorOjEwQUU1MDAwMkRGODkzRjFEOUYzRDJFOTk4OTdEQTczOUM5NzVGNTU1RgorOjEwQUU2MDAwNDlDRkVDQTk3OTM5MkRFNjI1NUY0RUNFMEFFQUZGNUU3RgorOjEwQUU3MDAwRDRGRjgzQTg0Rjc2RTJFQ0MwRUYwNkYwQkM2Q0ExM0Y5NAorOjEwQUU4MDAwRTEwOUQ0NEZFRDZGQUM5RTFDNTgzNjU1RUY5M0EzNDdBNAorOjEwQUU5MDAwRUM3QTNFQUFENzM1NTk0RjBCMTRGNDA3RTlENzA2RjBFMAorOjEwQUVBMDAwRkM3QjUwN0NGRkYxRkREMUYwMzVBMjVEODREQUREQzA4MgorOjEwQUVCMDAwRTk2MUVENkEwQUZCRkZEMkU4MkI3NkZGMzNCMDVFRUY2MworOjEwQUVDMDAwREEzRkQ4RjVBMjg1RjU2NjA3RkU2MEQ3OEJFMTczRTkxNgorOjEwQUVEMDAwQzA2NDdGMEQ4NTc4OUNGMEZGRUIwMENGRDc3MUU1N0JEOAorOjEwQUVFMDAwRTlENUU1M0I3OEEzNDlCQUNGQTEwRUMyMTk5OTk1NDM5QworOjEwQUVGMDAwMEFCRjVGMjFDRDhDRUE0Mzk4M0ZFQjRCRTZBMDBBQkIyQgorOjEwQUYwMDAwQ0JBM0YxNzYzRTY2NkZFMUY5RjEwQzFEOUVGNzFCRThDRAorOjEwQUYxMDAwODI5ODcwODBCRERGMTM1NUM4MUZCOEQzOUY2QzBCRDRDNworOjEwQUYyMDAwNzMzQzI5MEZFMDU1NkU4RkY1ODZEQTQ0MUM4NUUzQjUzNgorOjEwQUYzMDAwMzdGODgxMTFFQzRGNjc3ODYxRkY5RjBDNDY5RUM3RkE4NgorOjEwQUY0MDAwRkJFNkE4OTRDRkZCRkM5Q0JCQzg0RURDREJBQjAwQkU5MQorOjEwQUY1MDAwREY3QjlENEE3NkUyMDNBRjg2NjkxRjFFNTRDQzlCMjg5NworOjEwQUY2MDAwRkZDMTUyMERCNDFCRUYwRUZDRTExOEU2Mjk4RkY3RDY5NgorOjEwQUY3MDAwRThEMjU1NDQwRkUxOUZGNjQwQTI5RkZBRTc3NkU3NzZDNAorOjEwQUY4MDAwODYzRkU2MDNEM0Q2ODVGRDc2NzEzRjA2NDQ5RUYzREQwQQorOjEwQUY5MDAwNkIwRENBOUIzMTgwREZERjM0RENBRTUyOUVEMkRFQzY0MQorOjEwQUZBMDAwRjkxRDM4REUwM0VEMUFEOTFEMEZEQzMwQkY5N0YyQjk1OQorOjEwQUZCMDAwREIwMzk0RkI1NjE3MzIyNENDRUY4OUFDNTAwMTNGMDRERAorOjEwQUZDMDAwQTk4QjFBQkQ2ODc3ODY5NzA3RjBDRTJGQTg2QkU0RTNBQworOjEwQUZEMDAwODUxNzAyRERGM0U3ODU0QzIyQ0VDQUM4ODg0QUY3MzhDOAorOjEwQUZFMDAwM0Q3MEMzODZEQzY2QjQ2QkRBNzlGRTMyMjNFQ0U1Rjg5QgorOjEwQUZGMDAwNzI4MDkwNjAyNUM4M0YwMEM0QzczQjlCOUZFN0RCRjM4RQorOjEwQjAwMDAwMUNDOTRDQjYyRjdCOEUxOEM5NTY1OTJGNTc1REJERjAwMQorOjEwQjAxMDAwODg0MkY5QzkxNUVCNjVBQUFDOTdBREIyNUU4RUQ3QUI4NQorOjEwQjAyMDAwNzg3RTJGRjIyOTM1RjYwRkUzNzA3RTc3M0U3NkE4RkMwNgorOjEwQjAzMDAwNzc3MUU3OUFBRkJCMzdFMENDQkJBRUQ0REVDRUQzQURGMQorOjEwQjA0MDAwNDQyRjFFNjY0RUUyMjk1N0FFNkZFN0Q5OTU3QUVGOURFMQorOjEwQjA1MDAwNzk1NzBDQkY0QjFCQUVCRjU3OTRGN0YxQjI0MTNDNkYxMQorOjEwQjA2MDAwRDgxRUEzRkIyMjFCQzRGQjg2RkJFOEZFNDg3NzNGN0Y2QworOjEwQjA3MDAwMkJGNDcxMEIyNENBQ0U0MzlEQzBGRjc1ODYzQkM2QjMyQgorOjEwQjA4MDAwNUI5NDBBRjkwMEVFN0MzRjk3REVEMzk0NzQyN0FEREIyNgorOjEwQjA5MDAwMUI3ODdFRDFFNEY3OTM4REUyQkIxMTQ4MjVFMjE0Q0ZGMworOjEwQjBBMDAwQjIyMjhCNjc0RUFEMUZFRkFBRUZEMkZBQjFCRjlCNjRGRAorOjEwQjBCMDAwRjNDM0JGOTc3NEM5ODk1QjJFN0NBRUZDOTQwQjk1OTM0OAorOjEwQjBDMDAwMUZCRjRENzJFMjFEOTFBQjVBM0ZERTRDOTVGNUIyNTU1NAorOjEwQjBEMDAwRDZDQjU1NTc0RjFEOTFBQUQyMkI2QUE2Q0E3QUQ5MkEyOAorOjEwQjBFMDAwRUJFNTc4QkRDMTk1QUFEOEQ3NDcwNzMxQkVFNUJENDI4QgorOjEwQjBGMDAwNzNDMDgzNTcwNDlDRUZBRjBDMzlFMEExNjVDRUY2RUEyQworOjEwQjEwMDAwNzI2N0ZCQTFFNUNFRjZFQTBBREVERTBDRUVCRjI2MUQ3NQorOjEwQjExMDAwQUY3RTlERkNBRkYzNUMyNzJENUFGOUZBRTFGNjBBRUJGRQorOjEwQjEyMDAwNEFEM0ZERDhCRTRFMzEwMEVGMTc2MkZCNTU1NkVDNUI5QgorOjEwQjEzMDAwNDVFMzNGRUI4MjdDRkQ1RjE3RDAxREY3RDNGREE5RDMxQworOjEwQjE0MDAwRDkxMkU0RjhEQUY0NTZDMkQ3RDZCRkZGMjIwQkJCQUI1NAorOjEwQjE1MDAwNDRERTNEN0U1NjQwNzlEODMwREU4MEZEM0Q3RkNGQ0M0OQorOjEwQjE2MDAwMDZCNEU3RjZCRUI2ODJFRUVGRTg3Rjk3OUQzNzYzNTJFRQorOjEwQjE3MDAwM0VBNDcyRUM5NzY0QkZFQ0REQ0VFRjk3N0VCNEQ2RUNDNAorOjEwQjE4MDAwOEFBM0JEMTJGNjAwREFDQkNDOERBMjdCM0RGNkM2M0M3RAorOjEwQjE5MDAwNjQ4RkY0NUY1REZFRkU5MjRGRjVGMDNDQTE4N0QxRUYyNgorOjEwQjFBMDAwNjdGQUZGODBCODc3RUI0MTcxRUZENkZEM0QwNjk1QkI5RQorOjEwQjFCMDAwN0I1QUE4RENENTYzNTIzOURBRDNDRUYzMTk3QjJDRjE1NAorOjEwQjFDMDAwREQ1OTE3OTU1RkVBNDlEMEYzMkZGNDc0NTNGOUY5OUVDRQorOjEwQjFEMDAwMjQzRDdGQUE2NzJCOTU5RkVENDlEMUYzNDMzRERCQTkyMQorOjEwQjFFMDAwN0NBMjI3NERDRjFGRUYxOUExRjJCMTlFMEMzRDFGQkFEMworOjEwQjFGMDAwN0EwM0REOTM3MUVBM0UwRjdEMUQ1MjBBRkYzOTI5NjdGQworOjEwQjIwMDAwREM2MUY2NTY2N0RDQTEyMUU5OEMzN0NDRUE3NkM2MUJGNworOjEwQjIxMDAwRjQ1NUYzMURFRjIzNkRFRjcwQzBBMUQ2MjU4RUZBODE5MgorOjEwQjIyMDAwRjgxNTBFNTg2QkVDNzRDMDRBRTg5RDBFRDg3QzZFODNGRQorOjEwQjIzMDAwMDNCRUVDOTk5QjFENzBFQkQzOUIxQ0YwM0IzRUZEMTFCNAorOjEwQjI0MDAwMDdEQ0YyQTkzQjFERjBDNUZCRUY3NUUwMTcxRkVCNzNBMAorOjEwQjI1MDAwQzBFQjgzRjNGOTdERTAwMzNCMURDRjhERkJGNjM5RTBCNgorOjEwQjI2MDAwOEZDQ0I0MUUwQjYyM0MzNDEzRTFGNkVDNzE4OUY2QzE0RAorOjEwQjI3MDAwMTk3M0NEREJGMDNCMjlGOEIxNENGMjA0NTE5RTBGM0YxRQorOjEwQjI4MDAwNjM3RUVBNzJCQ0E3MEM5NEQ0OEExQkMzOTVFRjkxQjY3NworOjEwQjI5MDAwRTMzRDcyQTQzRDg5RjI3QUZBMzVDOTQwN0I1NzhBNkM0NgorOjEwQjJBMDAwNUY1OEU4Q0ZEOUU1RDY1MzI5Mzg4QzcxNDk5MTY3QTYwNAorOjEwQjJCMDAwNUYwNDk2QzVEQTA1OTgzRUExQzM0NTQ4RTU3NjUwRENBMworOjEwQjJDMDAwRDI0M0RGNTE2NUE0MjRFNTlCMzA5QkQ5RkMyQjFERjNCMQorOjEwQjJEMDAwRThEREZCNkY5MEVDRjI1MzUxOUVDRkRFRDFBOTM1MEQyNgorOjEwQjJFMDAwQjBGQUJCMTdBOTI2QTY3ODREQzNENzc1QkZEREFGODJDQworOjEwQjJGMDAwREMwRkRFQjU4M0M3MkJGNTE3RkM0RDFBNkIxRjMyOTM5RAorOjEwQjMwMDAwMzNEMDU1QjVEQjg1NzJERkEzRUY5NDQyODZCOTFDRkRCRgorOjEwQjMxMDAwOUE1MDNDMDM5QjQzNTg4RjdGRDdDN0VBN0YzNTU4MjAwQworOjEwQjMyMDAwQkZBMTY0Q0U1MjU5RkREODk2NjRCMzg3RDVERjJERkFGQworOjEwQjMzMDAwREZCREVDQzc3NDhGNjAzOEY3MTNCODk4RkM5RENGRDA5MQorOjEwQjM0MDAwRjhFMUI2QTM3MDdCMThGNUQzMzhBQzJCQjI4RTc3RkYzQgorOjEwQjM1MDAwQkVGOEY3NDhFMzQxOTlEQUVGRUVDRDgyQzlEQTA1NzIxQgorOjEwQjM2MDAwNUZBNzdCMzhFRDc5MDlCNjFFODUyNEY2QkI2QTgyQkVERAorOjEwQjM3MDAwQTFEREJENDNBMjdFNzY0QjJGQzU2MjgyQ0U1RTE3OURCNgorOjEwQjM4MDAwODgxN0QyNzUzQkVCMjdENDlEOTRENkI1RjJFN0NERTE3MworOjEwQjM5MDAwQTk3RUYxRkQ2NjdDN0Y0QjRBQzIzQ0Y3NkFGOEE3MjI4MgorOjEwQjNBMDAwOUY5MjhDN0ZCOERFQjY2NEE0QjJGQzMzNzIxNkYyNUI1NworOjEwQjNCMDAwOEI1N0UyREY4MzlDN0Y4QzZGQjdCNzRFRTdENzY0RkQ3NgorOjEwQjNDMDAwRjQ1MTU4REU1QUMwNkZEMTFFRjk3MjdCMTFCRTRFRjI5NQorOjEwQjNEMDAwODlCNTRGNTJGQjk3NjA2OTg4Qjc0MzNFODQxOUREOUI1RQorOjEwQjNFMDAwOEJCNTkzNUUxMkUzNjQ5REUzMzAzRURFNEVDRkQzMjJGNQorOjEwQjNGMDAwQkVDOEVGRjVCNEYzNDRFQ0ZBRjhEN0I1NUNFNDI5MzJGMworOjEwQjQwMDAwQkFCREUzQjU5QkYxRkJFQjhFRDYyNEREMDMzQzE4RjIwRAorOjEwQjQxMDAwRDBGRDQyODNBMUFGRTRFODlFN0UxREU4RkI1OTQ1QjExMworOjEwQjQyMDAwRkE3RTE0RTU3MUU4M0VBOUQ4M0E3NUZBMDlGODY1NEEzQQorOjEwQjQzMDAwRTFGNzY0MDMyMTNCMEZCRjgyQkQyNEVFMTU5NkM1QkQyNQorOjEwQjQ0MDAwQzJBQTkyRTg2QUUyRUJEOUVDODVBOUY4RUFGNEYxRjcyRQorOjEwQjQ1MDAwMTFERDcyQ0NCOUZGMEU2QzcxRUU3QjcxRkQ2NjhBNjNGMworOjEwQjQ2MDAwRjc0N0FCRkI2RUM4OTdFN0Y2QTUyQUYwRjFFNjgzRkMzOQorOjEwQjQ3MDAwQkVFM0JDOUZGMEI0RjIzM0E4NUM5M0FGQTVGMkFBRkM4NAorOjEwQjQ4MDAwNkM3QUJGM0FERjQwRjBBQTdDMzNDMTU3RTY5QkE4QkM3OAorOjEwQjQ5MDAwMjI3RjI5M0Q1Rjk5QkY4NEUwRjZGQzUyMkE1N0U0MTdDQQorOjEwQjRBMDAwRDNGM0U1RjkyQjA5NUU5NjVGNDk3MDVCN0UyRDk1NEJEMgorOjEwQjRCMDAwRjMxRDU0MkVDOTVGNEZFRjE3RTdBRjIzRDhDQ0RGNDhGOQorOjEwQjRDMDAwRTUyNUY5RjU1NEI2RTRGRjhDREUyRkNDREY0NEYwQzU1QQorOjEwQjREMDAwRjlDRDA0MkZDOERGNDY3MDNDRkY1MTgyOUJGMzFGQTZCNQorOjEwQjRFMDAwNzI3RUZFQkY1MkQ5OTRGRjE4QkQzN0YyMUYyNzc4NUVENworOjEwQjRGMDAwRkUxRTgyRTdFNkZCMDk5RTkzRUYyNUI4MzFCRjhCRTA4NQorOjEwQjUwMDAwRDlGOTUxMkEyRkNBM0Y0MDY1NDM3RTJGQkQ5Rjk1N0ZCMQorOjEwQjUxMDAwODhDQTk5RjkyN0U4Nzk2REZFNzEyQUY1RkNFN0M1N0Q5RgorOjEwQjUyMDAwRDE0RjUxMTlDOTdGOTVDQTcwRkVDQkY0M0U5NEZGMUJEMQorOjEwQjUzMDAwODI4M0Y5QUY1MzE5Qzg3RjlCNEEyREZGM0M5NTk1RTY0RQorOjEwQjU0MDAwQTlEMkY3NEY2QjYwODY0MzJFNTZFNzJGNzJDMDU3NEUzNQorOjEwQjU1MDAwMzhGN0VGOTUzRjc3RUVERjJCQzY5NzM4RTA2NUM3OUM0RAorOjEwQjU2MDAwRkJGN0QyQTM5RDhFRjc4QjhGQkNEMzAxNUY5MjczRUU1NgorOjEwQjU3MDAwREYwQkIzQ0VGRDdCQzE4MTREOEVGQUNEOTk4RjM4RTBDNAorOjEwQjU4MDAwQTYxMUU3RkUzRDJGRUREQ0JGRTc2Q0VGNzNEQTJGQTlDNAorOjEwQjU5MDAwOUQwRUI4NjFBQjczREY5RTA1MEZCQkYyQzkwRjNBRUE4RgorOjEwQjVBMDAwRDc1ODlGNzNENDBGQjc3RkM1NzVCRTkyRTVGQURGRkNGRAorOjEwQjVCMDAwODZEMzhFNjk3OUExRTgzOTRDN0NGRjc1RjREREZFQTk0QworOjEwQjVDMDAwNDY4RkI4Njc0OERDREIyQUVFNDc3M0NGNjc5REQwMDMxMAorOjEwQjVEMDAwMzNGMkRDN0Y4QThBNzU1NzhGRUJBRTIwRUY4OUQ5MTk1OQorOjEwQjVFMDAwQUZBMTdFQjBFRDhDMTlGMzhEMkZCRkM4RTBEMzczNTU5QQorOjEwQjVGMDAwQjM5N0MxQjY5RDYxRDdBRkY4QkIxNUFBMzk5RTY2NzhERgorOjEwQjYwMDAwN0E4RkZCRThERTM5MjlEMjZENjE1Q0VERUUxMzEyREQzNQorOjEwQjYxMDAwNkY1NzM3MUI0NDlFQzA3NTVEM0MzRTAxRjY3RDNBNzQwMgorOjEwQjYyMDAwQkZDRkYwMUNGQkZERTY2QjI5OEVEMUM0RTEyM0ExMUQyOQorOjEwQjYzMDAwRUIzMDhFM0FFQ0I1REY3RkZFNUE2QUVGRTdGMEZGMDg5OQorOjEwQjY0MDAwNkQxOUMyRjc3NTM1ODc2MzY4MUZFRDJBNzFCRUY5M0YyMgorOjEwQjY1MDAwNDMyQUYxQjMzNjY0RkQzMEI0NkNFQTlFRTlFM0QxRTRFOQorOjEwQjY2MDAwQ0IyMUY2N0M5Qjk2OUM4NzU3NzZFMzNERjc3ODhGRjM0QQorOjEwQjY3MDAwM0FDNUZBMTFENjVCQUY1OEFGODQ2ODVGNzBGQTBGRUYyNgorOjEwQjY4MDAwQzdEQ0Q3NjU3NDJGRTA0RkYwQkQxQzc5OTZGNkEzQkFERQorOjEwQjY5MDAwRUJFRkEzRkJBQTg2QzMwQzlGNTA2OTdDRkUzRTI0NEZCMAorOjEwQjZBMDAwRUUzNzYwRUYzN0YzMjk5RTRBRjZFMDUwMTNEMEJEMTkwQworOjEwQjZCMDAwQzNCNTg5MzRERUU3OTdGRThFMDY4NzRDQTQzQkMzOTM1RgorOjEwQjZDMDAwOTU0NDdFRTJGMDI1ODYyRDE3OEVGRDA5MjA5MUMzMzgyMgorOjEwQjZEMDAwN0UzMDE5MzJEMDVFMEJDMTUxQ0FCRjg4QzAwNDk1M0E4MgorOjEwQjZFMDAwRTg5MkUzQkU2RDlCRkUzOTlDN0VCQ0ZGM0Y0NEU3RjBEMQorOjEwQjZGMDAwRDZCM0UzMTQ2NzREODFCOEJGRkE0RDdDQ0VGODcyM0FFOQorOjEwQjcwMDAwQjRBQzM0NUZBRTkxRUYwMzlEOERGRjI4QjMyNzkxOEVDQgorOjEwQjcxMDAwNDc4MUUzM0I4NkZFQTk4NDc4QTZGNDY2RUFENzc5OEY1MQorOjEwQjcyMDAwODQ3MkZDRUIyNDM3NzZCQzQ3OTE1NzY5Q0Q0ODhGQjhCQgorOjEwQjczMDAwQzdBMThCRkQ0M0ZCQjAzRTUxM0VERUUzQkVCN0UxNUNFQgorOjEwQjc0MDAwRTMzREQxQjAzQkRFMTNBMkYzRTQ1M0FERTVCRjgzQjNEOQorOjEwQjc1MDAwRTMzRTYzQURFNUNGN0I5RjE1N0VERkQ3QzQ3OUVGMzM0MgorOjEwQjc2MDAwRTJCQ0Y3MkJDMkVGM0IyQ0ZDQkUyRkEyREZDNzlFM0ZGMworOjEwQjc3MDAwMkRGQ0JFQ0ZBMURGQzdFMDI3RDFFRjJCRjhCRUU0Qzk3NworOjEwQjc4MDAwMTJGN0JGMkNBQzk1ODQ5QzZEMjdGQjNFMjhFRTJCNjJGNAorOjEwQjc5MDAwMjM5MDNEMUYxMEY2RkM5OEQ5MzcxM0ZEOEU2MDJENjQ2MQorOjEwQjdBMDAwRDE0RkQ4N0FERDQxRkE3RTk2OTE2MkUyRkQwMDc3RkNCNgorOjEwQjdCMDAwRTJGNTk5RkY4NUMxRjExODM4RUU3NzBBQjRCQUVFNEI3RAorOjEwQjdDMDAwQTgzNDhFOTJCNUIwREYyMEYzMUIzMjY2NjlGRTlDNzNGRAorOjEwQjdEMDAwQkY1QTE2RkNFN0Q1MkZCRkU3QzdCRUI3OEQ3MTMyOERCNAorOjEwQjdFMDAwRjIxNzQ0QkE3NTk0QUJCRkExNzE0RTg5NzE0MEZFQzE4NgorOjEwQjdGMDAwMTFCQUNGRjA3MjA1Q0FDOUMxQjQ3MUNFNTFGRUI2ODQ3OAorOjEwQjgwMDAwNURCRjRGRTE5MjNGQzA4NDBENDZFRjNDRjFCREE2MTFGNAorOjEwQjgxMDAwNEEzN0VGNjFFRjlGQjg0Rjc1N0M5RkVEOTZDN0RFRDczMworOjEwQjgyMDAwN0MxNDg3MUQ1Q0NDRUZFNTc5QjE3RURENDVFODBGN0VBOQorOjEwQjgzMDAwN0FFRjlCNEQ4ODlGRkRERDUyQkZFOThDNUJDQ0JCMEYzRgorOjEwQjg0MDAwQTRDMjdDOTYwMzYyM0ZFOEQ3Q0JDQkI5N0RBRjc4RkYyQgorOjEwQjg1MDAwNThGOTdBMEY4QTdBNUYwQzVBN0Q2MUQyMkIxMzc0MUZDNAorOjEwQjg2MDAwNjRGQjg5QUU5QjExREZDNzc2Njg3NDVFRTM2RUY3QzUzMworOjEwQjg3MDAwNjA3MjY3NzhEOTc0M0MwQkRCQTNCQzk1NjlCRkFGNUM4MQorOjEwQjg4MDAwRkJFNTNGRURGQTI5OTQ2RkZGNzBCOEJFNzRGQkI2OTdFNQorOjEwQjg5MDAwQkIxRUFFODBGRkMxRTJFM0E3MUZDMzc2RjM2MjNDQ0VCRQorOjEwQjhBMDAwRDREQjMwNDRGM0JCNkIwN0Y3OUY1RjVDQjQ4RUVFOTkzQgorOjEwQjhCMDAwMURBOEU1RjM1NkE0REYyRjU0RTA0Qjc3MDVCQUZFQUE4NgorOjEwQjhDMDAwNTI3QkE5M0M1RERGMkNDNzE3QzZENzYzMTVGOEYyOURFNAorOjEwQjhEMDAwMEE3QzNENTAwMUZGQkYyRkMxRDc3OTg4RjczQ0ZDN0QyMgorOjEwQjhFMDAwMzhENkFFNzcwRUUzMkJGQTZGQzg1Nzk4QkUxRThBRjQ4RgorOjEwQjhGMDAwN0JBQzFDNUU1NUM4RUJGODA1Q0FFQkNGMkJGMEI1OTJCQworOjEwQjkwMDAwQkM0RTVDQTBCQ0U2NEJDOTJCRTI3RDAxRjIyQTQ3Q0FDMworOjEwQjkxMDAwRjNCNTkyQkMwNjIzMTcyNkFGMzNDQUI1QUY0MjVFNjdCNAorOjEwQjkyMDAwOTdDM0JGMEE3OTZEMkUzNkJFMEY4MjE2REFENUE3NUE5NQorOjEwQjkzMDAwRjkzOUQ5RDYwRTdFM0Y5OUI3ODVFRkMzQzFFMzlGMjU2QworOjEwQjk0MDAwN0I2OTgwRUQ1NzMzREE3MURGM0VGMUUwMUQ2RDUzRkIwQgorOjEwQjk1MDAwQjQ3QjFGNzJGN0U3REU0N0VGRjhERjlGQTE3RDM0MjQ0OQorOjEwQjk2MDAwRjY3RDFCMUZCRkUxRUVBN0ZDRkQxNkU3M0E2RTAwN0ZEOAorOjEwQjk3MDAwOTdBOUUwRjcyRTFBOTI2RkY1NzhDRTdEM0U2MEYyRjEyRQorOjEwQjk4MDAwODE4REJGOTZDRTE1OUZBNjczQzU5QUY2MEIxREI3N0MwOQorOjEwQjk5MDAwRkQ1OUREMTc2NjE3N0MyOEUyQjQwQjY2NkZGRkVBNjM3QQorOjEwQjlBMDAwNzQxRjg5RTg2N0I2NjJEMUVGRjgyOTcwMzVCRkZGNjQ2QworOjEwQjlCMDAwMUJDRjFGOTJCNzdGRjlCMTkzNEIwQkVFOTk4MkMzNTIwNQorOjEwQjlDMDAwNjFCRTkwQkNFREYwNjMyNzBCRjBDQTYzRkM4N0M3OUI5OAorOjEwQjlEMDAwMjk4RjMxQUU1RjExQTA3QkVCQzZDQTlGNjdGQzQwRUM5QworOjEwQjlFMDAwRTNERjE3RTcxOTQ3QzQ3OUM2Nzc4NTVERkJBMkIwNkIyMworOjEwQjlGMDAwNUYxMDc2NkQ0RUQ4QjU3RjJCRUNEQUU3ODQ1REZCMEREQQorOjEwQkEwMDAwNzE5RUYxQTAzODhGQzhGNDFDMjA3ODRGNEY1NkZDNEUyMQorOjEwQkExMDAwQzk5M0UyNzc0QTBFOEI3Q0M5NjdGOUI5NDU0RjhFREIzMworOjEwQkEyMDAwQzc4RjdGQUQxOUY5MzE0NTg3M0I4RUM1RTlCMEVGNDcyOAorOjEwQkEzMDAwNzdEM0YxMkVEMzc5REZDNkY1MkQ0MUM3QkM1RDY3MzhDQQorOjEwQkE0MDAwRTMyMkQ3QzY2NjNCRUE1RkEzMzczQkRFQUZENTJFNzU1MAorOjEwQkE1MDAwQkNFRjgwQTVDRTM4NEJGRTBBNjc5QzY1QzIxOTE3QjlBQQorOjEwQkE2MDAwRjJFN0NFNzM4RDk1RTNDRUI4Qzg4QTYzMzczQkUzMkNGQgorOjEwQkE3MDAwNDc5REU3MUE0QjhGMzhFMzIyOEI3Mzc3M0FFMENCOUZEMQorOjEwQkE4MDAwQkRENzUxN0ZEMTYxRTdCOUM2QTU0RjNBRTMyMkIzQkExQQorOjEwQkE5MDAwRjczOUUwNUFFQjYxRTc3N0Y1RURDRUI4NDhEODc0QzZEMAorOjEwQkFBMDAwNDU4MjJENUY3MUMwRUY2MUZCM0RFQTRGQkZFMThDOEI5QQorOjEwQkFCMDAwRjg2MkNFQjhDODRGNDNGQzFDRDBGNkIzNTlCQkJGOEI1RAorOjEwQkFDMDAwOTBCRjE5Q0E1REM5RTRGRDg5MjhCRkU3RkQwOTQ4NTI0NgorOjEwQkFEMDAwOUUyQ0MwOUY5M0RGQTA0Q0ZBMEQxNkFEN0I1OUU4MUQzQworOjEwQkFFMDAwQjVFMUU0OEZEMUFGNTE3NjczQkZFNzBFNjk0NTRFMkJCOAorOjEwQkFGMDAwRjQ3QkJDRkYyMjE1Q0E4N0FDQkJGRDg3MEFGRDdCNEREQQorOjEwQkIwMDAwRjI3Nzk0MEE3RUM5RjQ3RUI5QkU5QUJBRTdCQzJEOEQ0RAorOjEwQkIxMDAwRjk1NENBQTQ1RjcyQkRDQjJGRDk5NkExREZCMzlBNTE1NQorOjEwQkIyMDAwREUyRjk5MzZDRTM5RUE5RkQzOTExMjdFNDlDQzQzRkM2MQorOjEwQkIzMDAwMzMxNEVFOTdFQzMyODU1RjAyRkM3QjI5QkIzRjVCRkY0MQorOjEwQkI0MDAwQTgwREU1RjU4ODdENUY4QkJBODhGQjBENEFBOEY4NzlDQQorOjEwQkI1MDAwQjY3RERGQTRCQUI4N0M3RkI2NUZGMzc3MTE3MTRGNUMxNgorOjEwQkI2MDAwMEQ4OEI4RkVGRjk3OEZCNzUyM0VBRUFDMjkxMTM3NzlEQQorOjEwQkI3MDAwOUJFNUEzNTRCRDczOTUwRjA1NzUwNkU1ODM3QzcwMTg4RQorOjEwQkI4MDAwRjM0MTdDMkU1ODEzNzBDREZEREJENkUxRjc0RERCODEwMAorOjEwQkI5MDAwOUZFRkMwMkJGQ0RFRDU1MkZEREJGOTVERjE1NUI3OTY2QQorOjEwQkJBMDAwQ0Q4M0IwRTNBQzUyMkQzRkZGOENCN0RGNEFGOTkzQTdBQQorOjEwQkJCMDAwRDgxOEU1RUVENTc2RTc1QkM4RDExNEZFRTgxRTdFQ0YzNworOjEwQkJDMDAwNUVGNERDRTc5RkVBNzg1QzI4REVGRDgxQjJGNjhBRkI1MgorOjEwQkJEMDAwNzdDMUUyNTZGOTdCNzY0NzA1RkVERjdFNzUxNkQ5QTk1NworOjEwQkJFMDAwQkJCNjcxN0RBQzc0N0ZGMzc5OTRDNzRGQTMzQzlBMTRCNAorOjEwQkJGMDAwNTdEMTJFNDFCQUI2Mjk3NEFGNUFDODAwOEEwRkNFMEQ1QworOjEwQkMwMDAwNDFCNkI3MDlGOTZBQTZGMTNFMkZGNjQ3RTdDQjkzRjJBMgorOjEwQkMxMDAwQjlDRDc5QkZDOUVGNzRCRTlFRTM4OUYyN0NBREY4QkJBNAorOjEwQkMyMDAwMDYyQjBGNzdEMDc3NDIwNkE0RjQ1QTVBM0ZGMDdBOTQ0NQorOjEwQkMzMDAwRjAyMzM5MUQ2RTM3RjlFRkRGMzE3Qzc0N0Q3QTdCMzc2NQorOjEwQkM0MDAwNUVFRUY1QTk2Q0I5OEFFMjRBQjMyNTdCN0QwNjREQ0M0MAorOjEwQkM1MDAwRDczOTE1MEE5NUJERUY2RDVBQkZFN0I4MUVCRjMwNkRENQorOjEwQkM2MDAwM0RERUQwRjc4RjM4RUU5ODg4MjM2RDY3N0YwNUU3OUQxRQorOjEwQkM3MDAwRUVGRUVDRjU2OEMzREY3RUY1NkVGQUJFNjU3OEVDNEUzRAorOjEwQkM4MDAwN0U2RjcxQTNCODFGNkM4Q0VCQzc1Mjc4MUQxMjcyQjQxMworOjEwQkM5MDAwNUJEODg1ODdGNjc3RjYyMTdGMDdEOEJBMjlENDQ3MEI3QQorOjEwQkNBMDAwRkVGMkJEODEyNDNGNUZBQ0MzRjIzMzA3Rjg3N0RCMTdBOAorOjEwQkNCMDAwM0ZCNDQ1M0NERjQ0Q0YxNzQ0RjlGRDQ3MEI5ODNDNjE0NgorOjEwQkNDMDAwQ0MzQkJDRUMxNThEQkY3RjU5QTdGQUQxRjExMTdDN0YxRAorOjEwQkNEMDAwQjE3OEJGQTdCRENEQzJERkFBOENENENFRUZDNDUyMUVBRgorOjEwQkNFMDAwM0I0QTdBOTdDREI5QjVDMEMwNzExNUZBMUQ5REI5MjNFRAorOjEwQkNGMDAwRjAzOEQyMzE3NzJDQjFFMTNBRjQwRkQyQzA3RkFGMkRCQQorOjEwQkQwMDAwOUFEQzg5RjIxQUM5MDBGNTk3MDYwRTFCREI3NTlBQkZGQgorOjEwQkQxMDAwRjg1ODcyMUZENTZGRTVGNUQ5N0I4MkU3QTZGOEZCRTBFRQorOjEwQkQyMDAwMThDMzE3QzczM0Q5N0IwM0RGNzNGQzFCQjdFODE0QUYwNQorOjEwQkQzMDAwMEI4RDFENERBQzI1N0ZDNDZFQ0ZFMTg2NUI3ODdCNjU5NgorOjEwQkQ0MDAwOENEMTgzRUQ2Mzc2RkJGMTBDQkU5RjE1RTVFREQ1MzEwQgorOjEwQkQ1MDAwQkUzRkVFNjlERjQ0RjdFQUIxRjFFOURFMjlBRjc4RkVENAorOjEwQkQ2MDAwODRFMDdGQkNGQjVGMzM2QkEzNTM3OTE5Njk2NkZGQUUzOAorOjEwQkQ3MDAwMkZCMjlFRUQ3NTZGRkYwRTYwQkZGODBFNDlEMzY2M0Y4MAorOjEwQkQ4MDAwNzJCMkUwNUUwNkZCNzc0MzAzNjNDRUZERjk0QzBENUZCNAorOjEwQkQ5MDAwOTdGRjFERjVDQ0IyQ0FGN0IzRkQzQjU5NTBEM0YzMDA2MgorOjEwQkRBMDAwODAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkM1N0QxNAorOjEwQkRCMDAwMEI3ODU0RDVCNUYwM0U2N0NFQkMzMjkzRTRFNDNENzlDMAorOjEwQkRDMDAwNEQ0RTIwNDA5NDQwMDcwODE4MTBEQjQ5NTQ0NDQ1OERERgorOjEwQkREMDAwNjhEQkUwQjUzQTA0RTQxOTIwMjI5NkEwRDg5QzkwMDREMAorOjEwQkRFMDAwRjIwMjA2RUIyRjExMTEyNjI4MUEyQkU4NjA0MUIxNUFGNgorOjEwQkRGMDAwRUY4MEI5MTQ3QjZEOUI1QTJGQTJBMjhEQTA1MTE0Qjg2RAorOjEwQkUwMDAwMjkxNUM5REY1RkFGRkY1QTZCOUY0M0U2NEMyNjA5RUE0RAorOjEwQkUxMDAwRURCREY5M0VEOEQ5NjdCRkQ3N0JBRkJERjYwRTZCMTAyRAorOjEwQkUyMDAwNTlDOEM2RThFNzlCNjFGMDlGMUE2M0NDNTcyNUIyNTAwQQorOjEwQkUzMDAwN0U1OEJFMzJDMzk4OUYzQkNDNThGRkY2NEI4RDc5RDdDNgorOjEwQkU0MDAwNzg2MzNFNzk4QUExRkRGOTFCMThFQjc0NDI0NkYyRDg1QgorOjEwQkU1MDAwMThBNEQyRDFEQjZDQTU2MzE4QUI0RDVFNEVGOURFQkJFNgorOjEwQkU2MDAwRjQ3MjZGMENFNkYzRTQxODkxMjUzM0I2QUQ0MDBDMzQ1MAorOjEwQkU3MDAwRTUzMkY2NDRENUYyQzNDMzIwQkYzNjU5QTQzRUQ3QkE0MworOjEwQkU4MDAwNjZDNkZCQTBERTM3RjhGM0EzRkU2OTQzMzU2MzIxMkJCQQorOjEwQkU5MDAwNjNEQkFCRkQ5NDZFQUI2RUE1QjQzRTc5RjA3NjdCQjVGQgorOjEwQkVBMDAwNzZDRjU3REI1ODY4MTQ2M0MxNkE5OUYyQ0Y1NkJCMjgyNgorOjEwQkVCMDAwQkZBQjVBQTFGNDU3RDVGOUY0QkRCRERBNDNGOTI3QUJBRQorOjEwQkVDMDAwOEIyODdEQTJEQTRCREZEQkFBQTc1MzdFNkI3NTI5RTVCMQorOjEwQkVEMDAwQjc1NDk3NTFCRUI1REE0N0U5QzNENTBCMjhGNTU3NTc4NAorOjEwQkVFMDAwNTJCQUExQkE4QUVBQjU1NEFCOTQzNjU1MzdEMEY3QzBFNgorOjEwQkVGMDAwQjg2MDU5Njk0MUZGNzlENkNBMDA4NzE0MjhCRkRBOTMyMAorOjEwQkYwMDAwNTEwQUVCNzlGQzZBNTYxNjhDNUE0RkEwN0ExQjY1MDBEMQorOjEwQkYxMDAwREE0NEM2RENDQ0NGMUM4NUYwN0IyQjYzM0IxNUM2RUMyQQorOjEwQkYyMDAwOUQ3RUQ1MDk3MEJENzQxNzdDQzM3Q0M4QUYzQTIwOUYzNQorOjEwQkYzMDAwRkYwNENGNkZEMkM2QTk2MkNDQ0JCMDVEMTUwQkVDMDQ2OQorOjEwQkY0MDAwN0NEODE0M0Y5QjBERTM3OUIzNTU3NjczMkM2MzM3NjkyNgorOjEwQkY1MDAwRTNFMDc3ODRBRjlBQUIzMkM0RUYwOThCQjc1NDRFQzE5QworOjEwQkY2MDAwN0VGOEY4MzEzRTlGMDBDQjYzNjkyQjU4OEQwNUQyODQ1MworOjEwQkY3MDAwOEEyRTY2ODc3MUUyMUYwQTc5NkQ5MDBFNkJFODY0QkVBNworOjEwQkY4MDAwMDJDNEFGNTg2MjgyNzk5Q0YzOEIwMTEzNzRBRDRDNjU4NworOjEwQkY5MDAwQTIwOEUzMzdCQjM4M0Q0NEFFRDNEREJCOEQ4NTI2NDBEOAorOjEwQkZBMDAwQkRFNDJFM0I4RUJCQUU2QTY2M0M4QjAyMEYzRDFERERCMQorOjEwQkZCMDAwMkVGNkQxMjdGQ0JCMjQxMEM2MEZGMDZGOUQ3RkYwRjY0NAorOjEwQkZDMDAwNjk2NUM2RjYwOURFODhGNjA1RDAxRUUwMTAyODA2RkM3NQorOjEwQkZEMDAwNDVBMUI3RjgyMjYzRkI1ODRGNDQ3QkQ3RTBFM0M3RjQ5MQorOjEwQkZFMDAwREVDODQyNDkwM0QzRjMyOTRCNzkwREMyNURDRjhGRUNGNAorOjEwQkZGMDAwRkQyMUQ1N0ZENzI5MTMxRTEyQUY1RkVENDIzOEMzQ0Y4NQorOjEwQzAwMDAwNTUwODY3Mjk4QjA1OUEwNENDN0FEOTAyQzg5QkUxQjdGOQorOjEwQzAxMDAwMjY5OUU3NkQ5MDM3NDk5MEY3NDAzRDU1RjFCMkIxOThCOAorOjEwQzAyMDAwN0FCQzJDMEU1MzJGRTUwRjk5N0QxQkU1ODk5ODJGRTVERgorOjEwQzAzMDAwREY2NTFGRDE0MUUwMTJFODIyMDNFNThERDJFMENEODIxOQorOjEwQzA0MDAwRkM4RkUxRjcyOThDREQyQzhGOUVBRTQyRkVCQ0Q5MjdGOAorOjEwQzA1MDAwNTY0MUZGQ0REOTYyNjAwN0UwNzVBNTdCN0MwQ0FFRkIzNQorOjEwQzA2MDAwRjE5NkMxRjlCNDE2Rjk3NDU0NUZERUU0RjQzMjAxRkFDMgorOjEwQzA3MDAwQzlBQzkwQzc5QkQ4QzBFRDFFQUExMEE3MDdBMkY0QkJGRAorOjEwQzA4MDAwNUJBM0RGRkE4QTk5RjIwODVDNzUwN0NBMzBDNkFDNEUyQQorOjEwQzA5MDAwMTY5NURFNjBCREJCNzFCREU2NjRCRUNFOTQ1QjRCMjlEOAorOjEwQzBBMDAwQ0REQjM1RDk1NjBBRkM3MDNFNzY3MEZDMzU0NkNDREZDOAorOjEwQzBCMDAwMEU0MzA2QTNFMTUxOUI1N0RFMUIyRjkxQkMzQzNGODZFQworOjEwQzBDMDAwRDNENTQwRkQzNjZCRjJBQjM3MjBCMjRFQzRBRjU0NEFFNQorOjEwQzBEMDAwRjIzNUU1NTYxRkNCODNGNUFDNEIxNzAzNEU1OENGQkE1QworOjEwQzBFMDAwQUY2RjY5QzgwNTdFNTIzNzg5MjQwN0Y0Rjk0NzhFNkIxNAorOjEwQzBGMDAwMkFFODEyNEM1MEJFRUVDMDQyQTZDMEY4NjY1NzI5NTMzQgorOjEwQzEwMDAwMEIzMEFGQ0JFQjIwQzNGRTFEQ0U5MDE3NTM5MDk4MEM5NQorOjEwQzExMDAwRDdFRkE4RjJBOTk4QjdCODU0RTJFNzc1RTkxN0VBREJCOAorOjEwQzEyMDAwMTAyRUNEN0U5MUU0RkJEQTJDMzFDMDA0NEE5OTEzRTYzRgorOjEwQzEzMDAwNzM2RTM1QTM3QzRFRkE4MzhDMjRGRDU3MzA5RjQ5RDAxMworOjEwQzE0MDAwMEZGRTZFNDI3ODMzNTVDNDc1RTQzMjVBNDcxRTNCQ0MxRAorOjEwQzE1MDAwNENEMENFMzY4Njc5OUFBMDRBN0MxRTNCODBFREQ2QTU3RgorOjEwQzE2MDAwN0Y3OUMwOEFFQkJCOTc3OTQ2MjhEOEQ4NDdGMjA4MDg3MAorOjEwQzE3MDAwOTRBMTFDNTk1QjI5NTNGRENDRDZCMUM0MTdGQUJBN0ZFMAorOjEwQzE4MDAwNjJGMTdEMUFDRTM3MTYxNzk3NjdFQkJFMzY0NTk1QUYyRAorOjEwQzE5MDAwODczNUY5MTgzMzAwRkVFMjEzNzhGOTc5NzNGMDVBOTQ3MQorOjEwQzFBMDAwOUZDRDkwREYxMTg1OUVFQzVBQkQ0N0U1OTk3RkNBNTcxOAorOjEwQzFCMDAwRkFGODUzMkY3RkQ3QTkxMERGRUFGOUNDNUUwQkNEM0JGRAorOjEwQzFDMDAwRUZENjlGQzVFM0JBMDZBMjg3QjUxQTlERjlFM0I5RkM3RAorOjEwQzFEMDAwQ0Q5QjdBODUxN0UxN0UwRUU2OEFGQzFFNTk3RjUxQkMwNQorOjEwQzFFMDAwNDJGM0QwRjM5MkQzMjhBNzJFN0U3RTEyQzlFM0JDNTMyQworOjEwQzFGMDAwQUIzODNGNjQwRjRFQjdGQTNDQ0Y2NzFCRUQwNDMxNkY4RAorOjEwQzIwMDAwODE4QTdDNURBRjAwN0UxNUI0MTdENjMwOTFFQzAyRTZEMgorOjEwQzIxMDAwNjE1QzQ1QjEzOEM4M0ZCMTVBOTM1RkY5NURGNjRCMjA3OAorOjEwQzIyMDAwNkY3QkNCQzQxMEJGREJBQTRBNDQxNUUwOUU5MzJCMDU1RAorOjEwQzIzMDAwNEMwMEY3RjgyQ0JGOTc4MTNERTIyODYwMDJDRTFGRjAzQQorOjEwQzI0MDAwM0QzMjIxMDVFOTYwMTJDMTMzN0I3NTQ4MTBBMUQzMUUzMAorOjEwQzI1MDAwOTQ3RDI5QjRFQzNBRDcyNDNFMEVGRTA3N0MzRjI2MDE5QworOjEwQzI2MDAwRDZFOUREMjU3MEY5RTBFMkYyQzEwQ0QzQjE5MUZDQUM2NgorOjEwQzI3MDAwNjI0MTE4Q0ZGMTk2ODlCRTAzM0Y4NDFFODA3QzhDMkNDRQorOjEwQzI4MDAwN0E1MDlFQjY3OEQ2QTQyMjFGM0ExMjE4RTlCNTA1RDc3RgorOjEwQzI5MDAwRUUyMEI5MDVGMkQ2QjMwNTU2QjRGNDY0NzdFQTMyQzg5NQorOjEwQzJBMDAwRTdCOUY4N0E3NEY4QzQxNDU4MENGQTYxQzg3MUE0ODAxQworOjEwQzJCMDAwMTdGQjc1MDhDQ0UzRjcwQ0EyNDdCRTZEQkZCNjAwQjMwMQorOjEwQzJDMDAwN0ZBNzdFNDE5MUE0MTI5RjY4M0ZFREFBODBFM0UwQkE2OAorOjEwQzJEMDAwQTE1RjJCN0I5OUM2MzlBNzhEQzM0QzZGMUM0NjdFODkwNQorOjEwQzJFMDAwRjk4MUM0NEM1MUY4NjVDMDcxNENCNzBGQUEzN0FBOEVCQQorOjEwQzJGMDAwMkRGQzUzNDcxODNEREY5NTEwOUJEQzNEMUE3RUI5OEMxMQorOjEwQzMwMDAwNURGNjBEMkEwRTEzMTAzQ0NFMDNFQzRFMTNBRDlGQUQxRgorOjEwQzMxMDAwNDEzQ0U3QzhEQ0VFNTA5Q0VBRjAwRDUwRkVGODZBMEI5OQorOjEwQzMyMDAwQzkwRkJEREZGM0Q1MEJGRUQ0MDE0ODZDMjlFMDcyQkYwNQorOjEwQzMzMDAwRTY0MzZCMDlGNjUzM0Y0RTBDNThBMTVENDdDQUI0OENENworOjEwQzM0MDAwMkVGOEZFQzRBNjJGNzM3MTdFQkE3RDVBRUIzMUYyNDVFQQorOjEwQzM1MDAwQ0U2QTRFOTc3QUJFNTVFMzhCNUE3OTcwN0RCMjQxRUYyMworOjEwQzM2MDAwQUY2NUYwN0EwRjZCRjU5RTc1Nzg2QjkxOEU4MUQyMDU3MworOjEwQzM3MDAwRTRDRkEyRTNEMzZGQzNGOTZFN0ZDMEM2NEM1MUU0QzJEMQorOjEwQzM4MDAwQjMwRTVGNzNDMkM0RkVGMzBDNkY4RkY0MzY0OEZCNUZDRAorOjEwQzM5MDAwMEVENjdFRDJCQkQzREY2NTgzQjc3RjM0MjE2NUUwRjY0RQorOjEwQzNBMDAwODU2RjRFREYzMkM0RkMxRjhGM0VCRUJBMUREQkU1Qjg4MQorOjEwQzNCMDAwMkMwQ0YxNUI5M0JFOTZGMERCRkM4MEM1NjMwNTdFRUYzMQorOjEwQzNDMDAwMTgzM0NEODU3OEFCNEJFMDc4OEJEMkVGQjM4M0NEMEJCMAorOjEwQzNEMDAwRTA1MjM2QzRCQTVFMThBQUJEMzBGOEJBNUUxRDAyQUU4RAorOjEwQzNFMDAwNDc4NzgwQ0JBMUMxREEwMzVDNUI4Nzk4RkYxRkEzQ0Y4RgorOjEwQzNGMDAwNUZDREMxNzlFNzY0NTk0OENGRDQ2NDAzNUM1MThFMjM4MworOjEwQzQwMDAwNUM1OTdGN0U4OEQyRUYzQjQzQzA2NTI4N0FGREYwN0I4NAorOjEwQzQxMDAwRDJFQkM5QzFDNkJGMDg3QUZEREJGN0E0RDdGRjNCMTAzQQorOjEwQzQyMDAwQkRFMkJDQkYwN0JENEE4OURGOEY1RTlEODk4M0MzNzVBRQorOjEwQzQzMDAwMjg3QTREMUVBQ0ZENDVEMDZCRDY2MEYzQkYwODdBQ0Q4RgorOjEwQzQ0MDAwOEIzNkJFOTUzOUJDMkFEQTQ1MDU1QzlGMkYyODE2NDlFNAorOjEwQzQ1MDAwQkY5QkYzQjkxRTc2MUM3QkNBOEJFQkFBMDM3RDk1NTQ1OAorOjEwQzQ2MDAwODQ3QUZCRjhDMzRCMEJGQkY0NzRBNDFFOEFFQzJGNTJBNgorOjEwQzQ3MDAwOEYyRUZEREI5M0E0NDc5RDlBREVEN0U3NjM1NzIyRkJGRgorOjEwQzQ4MDAwRjk5NzQxRURCQjZGM0I2RThDOEI4NUVDNjNGQkRBQTdCNAorOjEwQzQ5MDAwRkJGRUJCQzczM0VBRjkxODBGMUY5RkMxRjg1NzE2QTE1RgorOjEwQzRBMDAwN0VEREU1NDFCQThDMkZGQUJFRTMwRTVFM0ZBREVDRkJCQworOjEwQzRCMDAwRDkwNTBCMTJDMTJFNzBGNEQ5MDU5OTU1QkZERUZFNTE3NgorOjEwQzRDMDAwNTI1RjNGOTk5Mjk3Qzk0MDM3MTJCQjhBRUMzNzU2QzFFOQorOjEwQzREMDAwM0MzQkIxQjg2QUNGRjY4RjI2RjREOTAzMDA3RjAxRkQ0QgorOjEwQzRFMDAwMjNGQTM4QTY4QUUwRjY4RkMyRTZENTNCOTc2OUZCQjRGQgorOjEwQzRGMDAwNEFEQTE3RTVDOTUzNjI5MDhFRDdCNTBDNkUyRkJGQTFFQgorOjEwQzUwMDAwRTlGMURGNkI3RUFBQzM5QTlGRUExMEZBQTkyMEVENDBGOQorOjEwQzUxMDAwM0YxNUE0MDdEMTRGMDVFNTIxRjQ1MzQxRkU1NUNENEZGQQorOjEwQzUyMDAwRjU4QUU2QTdGQThERTZBNzdBNThGMzkzRjlEMTRGNDYzNAorOjEwQzUzMDAwRkVBODgwRTY4RjZBRDdGQzUxNDE0QTFCQUFGNzUzQkE3RQorOjEwQzU0MDAwQjYzQTQ0RjVEQURCNUUxODhFRjBFODVCMDdCN0RCRjM0QQorOjEwQzU1MDAwNjREREJGQzdEN0MxNTgyOThCODZBRjFCM0MyNkMzRkVGRAorOjEwQzU2MDAwRTJGQTdDODcwMTZGRDcyQTQ5ODZGQzM1QUU0QzQzRkQ0MQorOjEwQzU3MDAwQUJFNUUxODZGMjJCNkRBMzBERTVDNTZDODIyMUZGQTMyRgorOjEwQzU4MDAwREUyOTg2RkE1N0Y0OTQxOEYyOTc3RjdBOURBMUZFRTQ4QgorOjEwQzU5MDAwQUU5OTg2RkM2NTQ3NkYzM0Q0OUZEODU5NkUyODlGNzAzQgorOjEwQzVBMDAwNzg5MUExN0M1QzY4QjkyMUZGODNGREY3MTlFQThGMDlCNgorOjEwQzVCMDAwQUUzMTk0OEY2RTZGMzI5NEE3OTUzRDE4RTE2N0RBNjJDMQorOjEwQzVDMDAwQTgxRjVGQjQyM0MyOEZGNDJCNDNCOTIzRkY3OTQzRkUyNgorOjEwQzVEMDAwMjZEMEY3MjhGRkVDQ0E2RjBDRURBQ0FFODM4NkZDQkYwQgorOjEwQzVFMDAwQzUzMURBRkZEODlENDFBRjM3OEEzREY5NTUzQ0RGQUYwMQorOjEwQzVGMDAwODJERDVFNENGNjMyQzhCMUE2NzFEOEJBRDI4RkZCRjE5QgorOjEwQzYwMDAwNENGODFERUQ2M0MwQUVDMDg2NDNFQTMxQ0ExRDUzODVBOAorOjEwQzYxMDAwQzUzOEZFMTBGQzhDMUUwMEFDRUY4NjFGRTRDN0FGRjREQgorOjEwQzYyMDAwRkQ2Q0JCNURGRDIxOEU5RkM3RTVCMDJBQUJFNDdGODgyMgorOjEwQzYzMDAwNkNBRkZCOEJGMkRBNjdDNTYzNzk5RDVDMjI0NzkzMDc4OQorOjEwQzY0MDAwMjcyQ0JFOTNFMUZBMjE3MkZGOUJFNzhENjU1RTFDQUYzQworOjEwQzY1MDAwNDJGNzk3NzE3OTY3RTI1NTU4RTZCMTZCMEUwQkU4RkYyOAorOjEwQzY2MDAwMkE3QjM1MDFEN0EzRkI3OUQ2Njk3QzVBQUZGOTkxQUQwNgorOjEwQzY3MDAwRUM3MkYyNjM5Q0QzRTQzRjMzNERGNTBDMjY5RjIyRTEyQworOjEwQzY4MDAwRjU2REU1OTk5ODE0QjlDRjk5MTFGQTE4QzdBRjkwMDJEMgorOjEwQzY5MDAwRDFGNEE0OUVFQTcyMkNFRkFEM0IwN0M1OEYwRTVGMUQ0RgorOjEwQzZBMDAwOEYyNjM5RTg0NUJENkE1MzJBNTlCOUIzM0Y5QzRDNTk4NgorOjEwQzZCMDAwNDAwRjcxRkZGQzc1RTcyNjE5RTVGODM5RjY0QUIxNzdBNgorOjEwQzZDMDAwRDg0NUFDQjdFQzBFNUE4NzhFQ0ZDODdBRkE3RUFCMDU0OAorOjEwQzZEMDAwRjE0QUYyOTFDQkRGNUEwREJGNjI5MTc3MERDMjM3MEU0RQorOjEwQzZFMDAwRjZEMUI4RkYxMzNEMjFENkY1MURGQ0MwOEVGQzQ0NDNBNgorOjEwQzZGMDAwNUU3MjY2MThFQTlCM0Q5NTJDODhGRTVCMTg4NzExM0Q5QgorOjEwQzcwMDAwRkExOEZBNzNGMTFGRkE0QjRDMzI4N0YzQzA3Qzc3Mzk3MQorOjEwQzcxMDAwRjkwOUNFNDVEODIxMDNGMTFGMEVGMUNERjBBMUY5RjVBRAorOjEwQzcyMDAwQkJGMjc3QzdEQzU0RUFGRkJFNzhBNkY5NUY1NDlFQUEzNQorOjEwQzczMDAwRUM0REE0OUZGMjIyOEQ4MDk4RjJEM0Y3NjBERTBCMEZCMAorOjEwQzc0MDAwOUI0OUNFRkNFOEFCRUQ4NzFFMDNCRTM0MTU1OUU1MjZBOAorOjEwQzc1MDAwRjIwQ0Y5MEZGRDE2Q0FFNzdBNkRBNTk4NUY3ODZDOEMxQworOjEwQzc2MDAwQzUwREU1NDczMjgwMDg1QzU4NUUxQTg3NzJFMDM0MTNDNQorOjEwQzc3MDAwQTdBM0RGRUUzNDdCMzM2RTQyOTg5Q0JCMjdDOTQyRjJGRAorOjEwQzc4MDAwODUzNTk4OEY3N0Q5NzA3ODk1Q0VCMUVFRjJGM0JDQkUyRgorOjEwQzc5MDAwQUVGOUFEQzZGQzNDMzYzMzU1ODI3MUU2M0Q2NDY2MDFBOAorOjEwQzdBMDAwMDBENjQyMjYxREVGRDJFMTAwNzQzMDI3ODlGQkRGRTc3NworOjEwQzdCMDAwQjNDQUI1MzI4QzVCNkZFNkU3MzY0QjVFMUM2MzQxM0MxNworOjEwQzdDMDAwMkM5QzIwRTc5QUM2RjVDREUzRkUyNDkxRUE3RjA2RjQ3RgorOjEwQzdEMDAwQTY1OEZCQkUyRjcyMDYyQzI4OTc0RkVDOURGMDkzQ0JFQQorOjEwQzdFMDAwMTlGNjEzNTg5QjgxRkVDRTA0QjA0Mzk0RkVGMDlERDNGRQorOjEwQzdGMDAwNjA5Q0U3NTBFQjg4OUMzN0JBNDEwNjlCODdENDJFNzgyMworOjEwQzgwMDAwQTNGOUQ1MUI5MzA0MDMxRTZCNkRCRkQ4REUwNUYzRjRBQgorOjEwQzgxMDAwRDY0QUNDRkU0M0M4NEJGQzVDNDkzRDE2MUJEODg5RjI3NgorOjEwQzgyMDAwQkJBNEYyQTkyRTgwODNCQUM2MkFENzQyQkFEOUYxOEIwQgorOjEwQzgzMDAwRTdCMDdFMTUyMDBDRkRCOUNGMjcyOTM0OEZGMzc2NzcyQQorOjEwQzg0MDAwMDBDRjE5NDBERjVDMzYzM0Y2RkJGN0ZCRTIzRkE5REY5MAorOjEwQzg1MDAwNTdCMERGOTRGRUZEMkVCMTc1NTlEMDlGQjg0Q0FBOUNGRAorOjEwQzg2MDAwMkU4OEU4NTdFNEY1QUM2NjlGMzcxM0ZEODlGQkM3ODUzMgorOjEwQzg3MDAwMzIxNTQzQkQ4NjhCQUM3NzU4MTg3NjUxRjVBNjhCODM1RAorOjEwQzg4MDAwRjQ3NzQ2OTM2RkJGREJGNUI4MDVFNUQ2RTk1RjdENzhCMQorOjEwQzg5MDAwMjNFRTg3MTZCRjZDNjIzNkE4Nzc2NjU3MkMwQjkxQkRDNgorOjEwQzhBMDAwMTdCMEEwRERCQTY4QUZDOTFCQTA3QzY4RDIyREIxRTE3QQorOjEwQzhCMDAwN0M1RDRCRkQyRjdFMkU5NkY2NTM4QjlFQjcwNjY2NDAxMQorOjEwQzhDMDAwRkI0NTJGOUMxOENCNDAxRTlDNTlEMzczMjgxM0UxRjdDRQorOjEwQzhEMDAwMkI4MUVDNjdBNjc2OERCRDA1QkUyRjkyRDg5REQxQ0U1QgorOjEwQzhFMDAwM0RGRjlBQzRFRDhFNTMyRjM5Q0E5MERFODRGNjAzNzc0QworOjEwQzhGMDAwNTBCRkMxOUY5QUFENjE3QUVDNDg5Mjk5RjAwOUY1Qzg5MgorOjEwQzkwMDAwREZBRDNFMkQwNDQ2MDg3QzdFMzc4RjA5OUY1RjBEQUY1QgorOjEwQzkxMDAwRjczNEY3RTcyRURBNkYwRUQ4NzE3RUVENkQxNjFGRDQ1RgorOjEwQzkyMDAwNUJENkZFMzdBMkVGMkI5RkRCMUQ4NzcwNThCNkRGNjgwMgorOjEwQzkzMDAwQUYyRTdFRUVFQkI1NTMwMENGOEI0REFDNjcwNkU5RjEyMQorOjEwQzk0MDAwQUYyODdGQ0U2QkVCMzE5MTFDRjJDNjA5MjBCNzk2OTJDRgorOjEwQzk1MDAwQzg4MjdBQkZGRTY0REE3QjUwRkU5OUNCQzRFQzIwMEExMQorOjEwQzk2MDAwM0VFQkZDRDhGMjMyRTY3RENFNEFGNDY4MkZEQjZGRTQ3MgorOjEwQzk3MDAwQzM2NUVEMjcyQzM4MkY1OTY0M0Q1OUMwRTgzRkZDMjI5MAorOjEwQzk4MDAwOEMyRjU5RkZGQUIwMEZCNkEwOUM1RDE2NkNGQzlCMDk2QQorOjEwQzk5MDAwRTg2REQ5REVEM0VGMjJERDJEOEJFMEU3Q0ZGMDk3RjQwMQorOjEwQzlBMDAwRkVGQUQyOUExQ0E5MkZERjk4ODRGRTcyRDYwRTlCOUZBNgorOjEwQzlCMDAwQzkwM0VCNEI5REJGMTdFRjNFQjc0RDg1RjE0RjNERkZEMAorOjEwQzlDMDAwRjkzNjE1NTA1RUYxNUY3RkRGNzYzRkVFOEY1RUI1Q0JCNworOjEwQzlEMDAwMjg5Nzk2RkRFQTNGRTI1ODE4RkM4NzI1NzNGOTcwRTYyMAorOjEwQzlFMDAwRTlBNzlFREMwMjcwMzhGMzhFOTVBMDc2RTZCNzlGQjg3MworOjEwQzlGMDAwMTU4MEZCOTkzREZGMzcxNUNGOUQ1NkZDRjZFQTM0QTQxMAorOjEwQ0EwMDAwQjMxNUZCQUU0QzFCNkM1Rjg0NzQxQkIwODZFMzM3NDBFMAorOjEwQ0ExMDAwRjg1NUY2QzMzODY5OTA3RDQ1NEIyM0YwNzI2QUNGNzk5QgorOjEwQ0EyMDAwMEI5RTBCN0QyOUIwMUU5NEJGNEI4MzVGNUJEMDNFM0JCQQorOjEwQ0EzMDAwRTQ2NTNEMDhBN0Q3RjY5RTM4NzQxRkU0NEYwMzlFQUMwQgorOjEwQ0E0MDAwNTFGMDA0RUJDRjE0NDlBRjg0MzI1MUJGMkNERDdCQ0JDNgorOjEwQ0E1MDAwNEQ1NzE0NjI2QUY2Mjg4ODI3RDY0M0YyQkUxRjdFREY0MAorOjEwQ0E2MDAwMDJGQzE2RjZFMTM3QjJGQzFDRkJDQTgyRjA1RkI2MEI4MworOjEwQ0E3MDAwRjAzOTE2RjEwQUY4MUNEQjFGOUZBN0YxOTdDOUZERjFFOQorOjEwQ0E4MDAwNTk5QzZDQjRGQkNFQjE4QUVENUJCMDcwNkYxMkUxN0Y0NAorOjEwQ0E5MDAwMjA3QzJFRDlGN0UzNDFFRDJDNUQzRTBDMDVFNzA1MDIyNQorOjEwQ0FBMDAwOUY1NzZDQjJGN0U2NjRFNERCRTcxREFBOEJFMzM5MzBFRAorOjEwQ0FCMDAwMDNDQUNFRUMzRUU3NjY0MDI3OUY5QTdCRUU0MDM4RjRFRgorOjEwQ0FDMDAwRkNENjJBRUY4MEVGOEI3RUZCMzZGMUREOTk3RDdGQjZCOQorOjEwQ0FEMDAwMjBGRUUxMjc0RTk4MDQ3OTc2RTFFNzREMDZGOUE1RENDMgorOjEwQ0FFMDAwMDY2NzRCNThDRkI0NzcwQjMxNjUzREFBODdGMDQ3RjlGRAorOjEwQ0FGMDAwNDNDMDg3ODQ4RkMwQ0REMzE1OTRCRjgxMTQ1QUY3RDIxOQorOjEwQ0IwMDAwMDBFNzhGQTU4MTAzQjcwQTYzRkJDM0JEMzk1OUQ0RjU4QworOjEwQ0IxMDAwRDYwNUJDMEE0NTg4Q0YwRkE3MjFGRDBEODQ0RjdERkRBQQorOjEwQ0IyMDAwMzJBRUZGMzIyODdGQzJDOEJGOTFGNTk3MDJCRkUyRkU0NgorOjEwQ0IzMDAwQTgxRjdFMDMwN0ZFODhFOTk5MzZBQjI0ODAyRDc0MDY3MgorOjEwQ0I0MDAwRUQwNDY3N0ZCQ0Y3QzE5RkVCRTc2RjZCMUZENzQ3RjAyMgorOjEwQ0I1MDAwQkJERTVFODdEMzUwRkMzRUQ0RkFCRTJERkNFRTQ5NTZCOAorOjEwQ0I2MDAwMEM3NEE0QzNGMUQ0NTdEMUY1NDExQkNBOEY4OTA4QzdFRgorOjEwQ0I3MDAwQ0FFOTE5QzNGQkVCMzMxMzJCNTUzMzg1QkVGOUFFMEQ1MAorOjEwQ0I4MDAwOUE0OENFOUY2QTA3QkI1Q0U4MkYyRjk2RTIzOTZFOTRENQorOjEwQ0I5MDAwNzE5RUQzRTRENEQyRkQwN0M2QTI1QzNCNzVGMDI1OEQwRgorOjEwQ0JBMDAwMkUzOUREMkZEREY1QTE0NUQ1RjQ0MzIwNUMzRTBGNzAxNQorOjEwQ0JCMDAwMkVGQzkyMzZFRjY1QUY0NEVGNkZEOUFFQkY0NUVERUY3NworOjEwQ0JDMDAwMzNDOUZCNTM5Q0ZGNjc5RDY2QTY0MjE3OUYwNTRENTFENQorOjEwQ0JEMDAwRTMxOTFFNEZFNkZBRUZDMkJBNjMyNzFEOERDNzdENDFFOAorOjEwQ0JFMDAwNUM4QzgyRUJBRTVERTM3RDFCQ0Y0NUQ1MzdDRDc0RkUwQgorOjEwQ0JGMDAwQ0YyNENGQTc1NjI4QUY4RDhENTFEMDhGNTcxQjM3OEY5RAorOjEwQ0MwMDAwMjk2MTdBQkMyRTAyNEU5MkFCOTRDRUVGQTRFNEQyNDJCQworOjEwQ0MxMDAwQkVBNzBCMThDRTdGQ0Q0MDEwRTFGMzA2QkQ5Qjg1N0FGMQorOjEwQ0MyMDAwRTk4MzcxOUY5ODcxOUQ3RjhEQjAyM0ZGMkFCMUI1NjkwQgorOjEwQ0MzMDAwRDBERjVGNTVDMTUzQTM0NERCMUYxOEZCRjdBRDM2MzE3RQorOjEwQ0M0MDAwMjVBQ0ZGQTVENjlFMEY3MDNFRUM1RkVEMENFRDMyRDMwOAorOjEwQ0M1MDAwQUI3NjAxRTVDOUIyNkQ2NkRBN0YyRDgzNkQxNUMyRUQ0NQorOjEwQ0M2MDAwOTNDN0VDMDExNUYyOUI3RjVEN0QwN0VBQTVGRkRDNjZBQgorOjEwQ0M3MDAwNjU3ODFFRjFEQUJFOTVEREFCNTAyRTNEMkEzMEY0QTM2NworOjEwQ0M4MDAwRkZFNzRCRDU1RkEyNUU1RUI4MTU1NjA3RjI2NEJFQTMwMAorOjEwQ0M5MDAwRTc0OTZDM0ZGRkI5NEM1NjBCRUQzRjE3ODI5MzcwMzM1OQorOjEwQ0NBMDAwREI5RDEyOUE4NEZCOTBFRURERTkxRTk1RkE3OTcxMjlERAorOjEwQ0NCMDAwRjY3QkU2MzkwN0Y1N0JFNjVGREZBNjcxQ0VGQzZCMkNEMQorOjEwQ0NDMDAwRTkzNTdERkU2MDZGMkJFMTdBMUNFQzZERTUwMjFGOTA2QgorOjEwQ0NEMDAwQkQxRDk2ODc3MTE2NjM5RUQ3MTdCRUQxNjQxRUNBQkY0RAorOjEwQ0NFMDAwQzU5ODAyREQyRkRFMUZFRjQ1RkY0QTU4M0RFQTY3OTlFMAorOjEwQ0NGMDAwQjVFN0U3MUVEQTdGQUIxOTIyRUQ5RDQyMTlDODhGOEI4RAorOjEwQ0QwMDAwREI4REUzN0ZBM0M5QkI2NTk2OUU3OUJDQkUzRjgzRjNGMQorOjEwQ0QxMDAwNkQyN0I1NzNBNjY4RjRBQTk1NDdCNkQ3RUJDN0E0MENFMAorOjEwQ0QyMDAwOEJFODg3Qjc1RjZBNjU5NUQxRjgyMDRERUI3NzcxRkI4QgorOjEwQ0QzMDAwRDdBMzhDRkQ3MUJBRUQzRjBFRkY3RUFGQzBFMzQwRDhBNAorOjEwQ0Q0MDAwMUUzQkM1QTM1NTU4NDIyMzEzODE2RjVGQjBCMDA1Qzg4MQorOjEwQ0Q1MDAwQkYxNTcxQTE5MTA5MzBERUNCOUFEQ0FDODg4MTNDN0M5NworOjEwQ0Q2MDAwQ0ZEMEU2ODFGNTMxQ0Y2QzVENjcxMEFGNEI1RUI0RDNBOQorOjEwQ0Q3MDAwNzlDQTkyMTdERUZFMTJGMTc5MEE2MTBDMTgzQjk1RDIzRQorOjEwQ0Q4MDAwRjlFNUZENDAwN0E3MUUzMzMxMTVFQ0I1MjVENjkwRkIxQworOjEwQ0Q5MDAwNTFENDUzN0JBQzZDMDdGMkY3QUJBRjkzREUzQUZEQkNEQQorOjEwQ0RBMDAwNTUxQ0VDOUM3QTQ5MTBBOEMxRDY3RjFENkEwOUNCQUZFRgorOjEwQ0RCMDAwNzQ2MjFDOEU1NzZDQzM3REMzNjE1M0EwMDZDNkFFOTJDRAorOjEwQ0RDMDAwQkM2QjlFQzNGNTFEMzZEMzNFRTNFQzVDOTY4RkZCQ0E2RAorOjEwQ0REMDAwQjMyQ0MzQTMxMkZFOTVCNzI1Mjg1RkY5N0JCMzEwMkRBMgorOjEwQ0RFMDAwM0VDOURDMEI0MjdEMDJGMDQxRUZGNTRDODE1NEVBMUQ1NworOjEwQ0RGMDAwNEVFOTRBNEJFNTI4OTRCQjI2MTkxNjU3NDA3RTAyQjJFRAorOjEwQ0UwMDAwREJDREM5MUUzNjFGRDI5NTg5Q0M4N0YwNjNDRUVCMkVDMQorOjEwQ0UxMDAwRjBENzlGMDBBNUNCMUY1MUQyQjBERDhGNTJDQzM0RUY5RAorOjEwQ0UyMDAwNDVBOURFRUI1MzQ4M0YzQTY1QjIyRjM0M0E1NUY3RjE0NgorOjEwQ0UzMDAwNzk5RTE3NjIzQzM1MTg5RkQzN0JERjlEMDhERkU1MUY4NQorOjEwQ0U0MDAwMEE0QTc4M0M0MzY0M0M2ODk1QTRCQ0FEMTREMjdBNDk0NAorOjEwQ0U1MDAwMUVFNUM5MzEwQ0UxN0E1NjNCNzczRjNCNTc4OTRGMDhCNQorOjEwQ0U2MDAwOTNDQkNERDUzMkM5OEZDNjZBMTdBNUVCQUFGMzk5NDJFOQorOjEwQ0U3MDAwRkUzNTBGRTU0RERBRkFBRDA1MkFDNTA3MjE0RkUzOEZFMAorOjEwQ0U4MDAwRDU1OUVBNDUzQjBGRTc4NDcxNDEyNkE3OEZFOEM4RUFFOAorOjEwQ0U5MDAwQUEyNERGOTRDREM5NjgxRjZCNzJBQTZDM0VBNDY2MjdEMgorOjEwQ0VBMDAwODc4RkM5NTk0QUYwQjE2ODc5QTk3NTA2QzExM0RBRDNEOQorOjEwQ0VCMDAwRjdBQjUzN0Q3NzIzM0M2QzU5OTcxQUU0OTIyNTc5QkNFNAorOjEwQ0VDMDAwMjFERjBGNUUzQUZFNzdGRjRGQzE4RDExOUMxQUFCNkRDQgorOjEwQ0VEMDAwOTRBRUFCMkUyMjc4RDU1NzdCMjlGRkJGMDBCN0Q2OTRFRQorOjEwQ0VFMDAwODkwOEI3Mjk0Q0IxODVDM0FEQzQ5MDFGMTA2RThGMDA1RgorOjEwQ0VGMDAwREYyNDg3RjMwREMwMTFGOTg2QzU3ODc2NDY1OTdGNjQyMworOjEwQ0YwMDAwOEFGMTEwMjhBODFGQUM2RUE1NTRGRjlFMzg4MERFM0UyMworOjEwQ0YxMDAwOUYyMjY4RjFCMEJFMUEzMzhFMjM3MzdGMEI0QjU2NTk5NAorOjEwQ0YyMDAwRDZBNDNFRkYyNjczQTk0Q0MxM0NGMjJBRTJFNTY4MEM2OAorOjEwQ0YzMDAwQzE2RUY5RkI3NkYyMUI5QjY0QTkzQjVDQUUyREJGNDEzMQorOjEwQ0Y0MDAwNDk0M0Y5NjVBQTdBOUM5RDA4OEI0NzMzQ0QyOEI1MkJCOAorOjEwQ0Y1MDAwMDQ1NzBGOUQ1M0Q2NkE3QUIzRkUwMkZFOEM3Q0QwNUNEOAorOjEwQ0Y2MDAwQUQ1MEJBNUVFMzg3OEQxQTNGNkM0MjNDNjMxQzg5ODdFMworOjEwQ0Y3MDAwOUY2QkI2NEM2N0E0MTdGRjBGRTRGOTNFM0VDNEMyRTNCMworOjEwQ0Y4MDAwNDYxMjNDQzE5MDE5RjA0RDMyNTJBMTM0NDRGMUJGNDdEMgorOjEwQ0Y5MDAwQUQ4MTExQjkxNDNGRTU0NUZBNDgzOEJBOEFGQ0M3OEMwRgorOjEwQ0ZBMDAwMDU1REU4NEY0QkQwRTBDNjVFMTk5NjMwMkI5Njk2NjcyQworOjEwQ0ZCMDAwRTY3QTg3OTk3OEVBMzdBMzNEMUUwOUQ3NUFDRjQxMUJGNQorOjEwQ0ZDMDAwRUVBRjA3OUE0RkYxMDcwQjA1MUNFRkZDMkM0MjEzNEJGOQorOjEwQ0ZEMDAwQkUzRDc4QjQxQ0NGNEY1QjFDQTQ1NzUzM0Q5NTM5RTgzOAorOjEwQ0ZFMDAwREY2M0M3QUM0NDlGNEU4RjRGOTgxRjg2QkZENDAxRUNDMAorOjEwQ0ZGMDAwQkE1NUE5RDc3RThDN0NEQjhEQjIwQ0U4RjBDMUQ2RTFBNgorOjEwRDAwMDAwNzY4NDczQjMzOUU4NDI3OUQ3OUNDMEY1ODc1MjA2NTBDRAorOjEwRDAxMDAwQjhBQ0FGREQ5RjM0MzkxODU3NjhFNDc3NURCRUNBNTNBQQorOjEwRDAyMDAwQzcxQkU4NTc5N0FCODk1NzE5RTk1Qzk3QUIyRkE1NzBEOQorOjEwRDAzMDAwN0I2RDUxNkFFOTc5OUM0RjUyRUY1NkUyQzM0OEJBQ0ZGMworOjEwRDA0MDAwOTNBNzk0Rjk5MjUxMEYzMDRGMTNEQTZCNjgzM0EyMURGNgorOjEwRDA1MDAwRjdBMTEwRTBGNENFRkQ1MzY3QkI3Mjc3QTA5RDAzQkIzMAorOjEwRDA2MDAwMDI5MjJCMkFGMjAzRTFBOUU3QjU2RjkyMzFERTk1Q0I0QworOjEwRDA3MDAwODczNUI2OTkzNjVDNkYwM0QwMTExQjg1RkU2Qzg1MDAzMQorOjEwRDA4MDAwQkMwMUU4ODdEMTc5QTA0N0UzOEYyMjRBNzVGQTc0QTdEQgorOjEwRDA5MDAwRTYxQUUyMDQ0RDc5ODc0NEM0NTczREQ4MTExNDRGMEM2OQorOjEwRDBBMDAwRkIzQjI3OEMyNzFEOTg2QzQzN0I0RjMyN0IwRUEzOUM0OAorOjEwRDBCMDAwRUE4OTE1ODNBODM3RUI5RDMzNkQ1RUY0REYyNDE0MTJFMworOjEwRDBDMDAwREVCRjhDMkRDRjE5MkM2RTA5RUMxNkYyREJDQTRFMEY4OQorOjEwRDBEMDAwM0I4RUUzMzA0NjdFNUI5MzNDOUVFMTNFNzFCN0IzMzNCQgorOjEwRDBFMDAwMDZGNzJEQjFBOUEyNjE1RThCNTI3REMzNTNDM0YyNjNEMworOjEwRDBGMDAwNzA3NDBENUZEOEVENkVBRDlGQzhGMTdFOTBBQUY5MkRDQQorOjEwRDEwMDAwQjM1NEU2MEQzQkI3QThEMkU5NUI1MUQ5NTU2MUZDQkREQworOjEwRDExMDAwNjZDNDM0ODY3MTE3OTE3QzNEQTBEQ0RBRjlGREU0NTZEMworOjEwRDEyMDAwNkQ0RTgwRjA2NThFOTQxN0M5MjBDNzlEOTRBQUEyOEM3RAorOjEwRDEzMDAwRjM1NjlBRkYyNTgxRThFQTRBODQwMzczRUVCODYwODdDNAorOjEwRDE0MDAwRkM2ODU4MTRGQTNBN0E2OTFBQzU2QjVFRDAzM0IwNkIzMgorOjEwRDE1MDAwMkUyMDNEQjNCOTg4REIyMzlBOUVFMUZBRTk2QzhCODNEQworOjEwRDE2MDAwRjREM0Q5Qjk5NTE0NDc3NUI2MjU0RDQxQkEzQkIwRTExMgorOjEwRDE3MDAwRjJCMTA4OEY3OUJEOEQ0QzgxRjlDREVGOUQ0Q0U5ODJEQworOjEwRDE4MDAwRDY1RjUyNUFERURBMDY0NENFNThDREZBRjkxQjY2NDExNAorOjEwRDE5MDAwQkIxMzhGOTgyODJFQTgzQjMwRTE0QzE1RTRCQjVCQUM0OQorOjEwRDFBMDAwMENFMzhFQkJCN0RFOTM4MzdFRjE2RTE4MDdFREFCRUUxQQorOjEwRDFCMDAwQUQyMzg4QkVCQTAxNkU5NDZGMzBENkM3Nzg2MTEzRTA5NAorOjEwRDFDMDAwQTU5QzMxM0Q2OEQzOEJGNUU3QkQ2RTZBOEI2NjI3OTVDQworOjEwRDFEMDAwNkZCNDdBQTM5REVGNUMyODZGOEQ2RUI3RDVFMkFGRTk4RgorOjEwRDFFMDAwRjg1RkU1Mjg4NDU3RjEwN0FCNzI3MEJEM0FGRkFGNEM4QQorOjEwRDFGMDAwMDQ3OTg0RjBGQUMwQ0FBMkY5RTNBRjRFQkRCQTIyNzUzMQorOjEwRDIwMDAwMjJBNkRFMTU5ODMyNjc2MjU0RkY1QTFGRkRGMzcxNEY1NAorOjEwRDIxMDAwODg2MERGMTI1RTdDNzEzNzFCRkNBQ0RDOEY3OTQyQjMxNworOjEwRDIyMDAwN0Y5OTZEODBGMjM4QURCRDFDQkQ3QzQ5Q0JFNzg3MUU3MAorOjEwRDIzMDAwNjA3ODdGQTFCMjE0ODk1RURGNEY5QjE4RUNBNzA1RENGNAorOjEwRDI0MDAwRkZERTRDRjFEMEZBN0NDMDRFMjUzQTY2ODAwRjk0MkY1OQorOjEwRDI1MDAwNzMzNTdGMEZDMEZEMjYwQjdDM0ZGMUJBNDk0MEZBRThEOQorOjEwRDI2MDAwQTMyNzVGMUNEQTJENDJGMzBENkI3NjQzRjlERjBGRjMzMgorOjEwRDI3MDAwRkREOUMyREU0RDI0RUY4NEU2MzE5QjI3QzNGNzdCNUVFOAorOjEwRDI4MDAwMzc5MzlDQUY2OUJBN0NFM0VEODBERjJGREUzMDUxN0VBRgorOjEwRDI5MDAwNDFBRjlERUE5RDdDQzBCM0Y5NzZBOEQ3RjMwNzMzRDk5NworOjEwRDJBMDAwRTE1RjFDQkU5QUUyMUU0RjlBOEQ3RTgyQTk2OTlDOEYxNworOjEwRDJCMDAwNUZEMkY4Nzk1RTZGMzNEOTFGN0FGOUJDODYzOTE2ODU0QgorOjEwRDJDMDAwRTg3NDAzN0Q5Rjg3ODczNjc4NUY4MTk1RkQ3QjcxMUVBQgorOjEwRDJEMDAwOUVFNzMwQkFBRkYwRDJDM0I3NUVCRjg2RjREQTc4QjI1OQorOjEwRDJFMDAwRjdFN0FGQjc3QUEyQzU0RkJGOTRBQTE4RTRDRkZDQUU1OAorOjEwRDJGMDAwMTZFQTk3ODE1RDk0OUNBQUY1MTcyNjQ3RTZGNzI2MTE1MgorOjEwRDMwMDAwMUYzMDU5NjUxODY3M0M0RjkzMjcxN0U2QjdENTZDOTBDNworOjEwRDMxMDAwMjcyN0VERDFGRDIwQUZBN0YyN0RENEJDREVDQjg5QkY5RQorOjEwRDMyMDAwRkFBRkVGODdGNDdEOUUzRTZFMTdFN0M3QkVGNTZDOUVBMQorOjEwRDMzMDAwMUM2RDNEN0RFQjk4NEFGNTRGMjY0NDFGQkY0NzFCQkYzMAorOjEwRDM0MDAwQkI3QTAxRjM4MjVDMkFCNzQyM0QyNzhFN0ZDRkRBQTJGNworOjEwRDM1MDAwNDI1QzQ3NDJBMjEwQjZBRUY5QUQ4Qjk5Mzc2QzVERjNEMworOjEwRDM2MDAwQjdDRUI2OTQ4N0Y1REI4Nzg3RTVGRjVFMkNGNUUxQTFBNAorOjEwRDM3MDAwMjc3NTA5RTE2MTU1NkFFOTMxRTQ5QkYyRTYyQkM2MjI4MworOjEwRDM4MDAwM0RDRTZGNkQyNDM4OUYzMDdCREMyODVGM0Y2OUJEMjcyMQorOjEwRDM5MDAwQ0UxNzc1OUU4QUMxOEYzMEJGNTVDMzBGRDhCQjg1NjEyQworOjEwRDNBMDAwRjhEMUYxMTJEOUJFRkJGREY5NUYzRTgwRjJFNzExNkVCNAorOjEwRDNCMDAwREMwQzA0QUY3RTc4Q0I4RDBFQjcxODhEM0VCQjQxREYwMQorOjEwRDNDMDAwRkEwODZFQ0EwQjQ3OTFBRUQ3M0IzQzQ4RDcwM0MzNkZGMAorOjEwRDNEMDAwMzRGMzBEMDZCRjAxRUM1N0IwNzc0QzY5Nzg1RjAxN0RERgorOjEwRDNFMDAwQjQ3ODBFRDlDQUU5NjAyOEI4RjU4REFCRDE0MTcxRjQ5MworOjEwRDNGMDAwRjUxNEE1RTk3NDUwQzU1NDYwRDhFMzk2QTFFOEUwN0UyMQorOjEwRDQwMDAwQTZEQTA2NTlDNzA1M0E3OEQ4NDAwNzQ1OUJENzEzMURCOQorOjEwRDQxMDAwN0M4QUY2Q0FBOEZFRjgzRjZFNTFFM0E2RTBCOTRGOTNBNgorOjEwRDQyMDAwODlDRTk1OEVDN0E4QTlCN0YxRkMzODk0QzdDN0UzRkM4RAorOjEwRDQzMDAwMzdFMjM5OEQ5RTVGQjg3MzQ0RENFQ0IwNzEzRjY5MDAxMAorOjEwRDQ0MDAwMzg0NDgxNUY1MURBMDBGNDkzQTdCMjgyNDlGRjNDRkE3NQorOjEwRDQ1MDAwMzk2MThFN0VCRkVGRUFENEUyQTk2OUE4M0ZGQ0QxRkQxNQorOjEwRDQ2MDAwQjU3QUFBQ0I2QjUzQkNGM0MyM0UxM0Y1RTc3MUU3QjBCNAorOjEwRDQ3MDAwMkYwMzUwREE5Q0VBOUI4RTc0NTE5N0YwRjMzQjUxMUVCOAorOjEwRDQ4MDAwMUMzRjJFOTBCRUFENzk3RkU1MjhENDZCOTE3NjAyRUNERgorOjEwRDQ5MDAwM0YxQkYwREM3M0E1MjlENjRGNzZBODU0Qjk5RENFNDEyOQorOjEwRDRBMDAwNTU4OUVEMkNDNDdENEFFNTk2OEY0NkEwREZCMDhBNTI5RgorOjEwRDRCMDAwQTZEOUExMkI0RDk3N0E5QUM4MkY1QkY5MTQ5RTkzMDI5NworOjEwRDRDMDAwOTFDODU4NUY2Mjk1NzQ2RTBBODJCMDE0RjM5QjFERkM3QworOjEwRDREMDAwRENCNTRBQjJDOUQ2QjBCODg0RTUxQUJGRDQ1Nzk3RkVCNgorOjEwRDRFMDAwRjIyM0Y0NDNEQjU0MjZBNzYyN0IyRTM3MjVDNkVEQUYyQgorOjEwRDRGMDAwN0ZFMDNDQzNGNEJEQzVFQzkzM0RCODBGMTU1ODI5RjI0RAorOjEwRDUwMDAwODU1OUYyRDFGRDI3QjMyQjc5OUMxQTg2ODdDQTM0N0VDMAorOjEwRDUxMDAwREU2RUVGRTg2OEM4ODVGNkY2QkJGRTIwQTMxRUI0QzIzNworOjEwRDUyMDAwMzhFODY3QjM2NTQ5NjdDM0ZERDVFNkU0MjBERDZGNjI3RgorOjEwRDUzMDAwNzk2MURGQzFBRTcyMTY0MERFRTAwNzgwRjkwRTYyMTczNgorOjEwRDU0MDAwQkUyQzc4NUM1RjIyM0RENjcwNzgxNDIxODgyMDdENjdFMAorOjEwRDU1MDAwRUVGMDM2OTRDQjQ1NTI5RDA5RTM4RTY2REQzNTgyRjJCRQorOjEwRDU2MDAwOUJFNzdDMzNCMjJCMEEzRENDN0E2NTVEMjdEQTMzQjM3NworOjEwRDU3MDAwNUU0OTlGODNFNzA3QjM5QzIzM0ZDNjE0QjYwQkI2MThEQQorOjEwRDU4MDAwNjhGRjlBQzA4MjREOTA1RTY1N0I5Q0UyMTk1RkQzRkM3OAorOjEwRDU5MDAwNjMxRDk4MEZEMzhCMUQxQUJEODE5RDMzN0QwRkE0QjNERQorOjEwRDVBMDAwNkM3RUYzREQwNTdERkVCNEM4NzEzNzZCN0NERjYxMEVFOAorOjEwRDVCMDAwQTY1QzhBNzQwMEUzRTAzQTdFRjY0QUUwQzdBMEZBRDk5NgorOjEwRDVDMDAwRURDMUMwMEQ2MzAwM0Y3N0IwMUUzM0MyRDFDNzY0M0FDRQorOjEwRDVEMDAwRjdEMEZEQkFFNUNDQTNFNTE5RUQ0RkRGQUIzMEVGNDA1NgorOjEwRDVFMDAwM0E4OUVDRUZGNjEwRUZFRjY3MUREMDFGQTQ3NzFDRUUyMQorOjEwRDVGMDAwRjkzNzU0Q0JCRUEwM0NDREMxQzJGQURCRUYzOUU0NjBCMQorOjEwRDYwMDAwRkRGQjhCODRCMzQ3QjI5OUQ0MzBCODAyOEFDNDcwQjg5QQorOjEwRDYxMDAwRjc4MzZGN0NEOTc1NkNFQ0MwN0NENjA3NkYzRThGNDg2MgorOjEwRDYyMDAwN0M3QzgxNDVDMEE3NkQ2OURFNUYyM0JGQTk2OURFQkQzMworOjEwRDYzMDAwQzhCRjE1QjYxRUI3MDQ3NDczMkNEOUI3MUZCRjJGMzVEQQorOjEwRDY0MDAwRjk3MjUyMDExRUE3QjM3REEzNTIxMDJFOUREMUNGNUY1OAorOjEwRDY1MDAwMjNGOTNCQUZFQ0Y0NjNDODM3NzdENDQ4MENGMUJDNzZDMAorOjEwRDY2MDAwREYyNzhGMjE1RjlFMzYwMzFGQzE3RUUwQjU1NTlGQzQyMworOjEwRDY3MDAwMjJERDJDMDEwNjBDOTcyNzFGNTQ4RDIwRkJFOUVDREVFMAorOjEwRDY4MDAwNTE4M0RFMUZGOTQwRjM5Nzc0NkE3Q0EyQUZGMzRFNjRCNgorOjEwRDY5MDAwNDAxOEVGQ0VCRDBFREFDRkRDNTk2NUJBQjBDRjQyN0E3MgorOjEwRDZBMDAwQkZCMzhBQzc4NzMwQTk3M0VDQUQwNkJCQjM2RUMwN0UyQgorOjEwRDZCMDAwNzAxRjExRDk0Rjc3QjU2RjNCRjFCREU0OUI4NDc2RjdBRQorOjEwRDZDMDAwODlFQTA1REI1MUJFNDRDRTczQTRDQjc3MjI4REY0REIwRgorOjEwRDZEMDAwNkM0M0JDRUREQzk2ODVEQkMzRjk1MEFGNUYzQjgwN0NDRgorOjEwRDZFMDAwRjU4Q0QyQ0UwMTZEN0MzQ0E2RkNBMEQ4Mzk4OUVFNkJCRQorOjEwRDZGMDAwRDI4RjNENjRGQjUwMDhBMzg3QTFDNjYzNzk1Nzc5MkY2OQorOjEwRDcwMDAwQzgwNURDN0ZGOTQ0RTY0Q0VEREY1RjY0M0RCRDdGNTcyMworOjEwRDcxMDAwRDU5NUVDQzQwNDVDOUZGN0ZGQTVBNTBDM0Q3RjhCOEJEMgorOjEwRDcyMDAwQ0ZERkFFQjVEM0JGREI3RDdFODY3NkExRkRBQjc4QjIxMQorOjEwRDczMDAwMTMzQ0EzQjhGRkUxMUY5QTVEQzA5Q0IwNUU2NDMwRkY0QworOjEwRDc0MDAwNjZFRkZGQzY3QTYxNjA4QTE3QjY2RkI1NDY4RDJCQ0E0MQorOjEwRDc1MDAwNzQ0OTFDMkZDMTQzQzVCNjI4RjNFQkQ3NUY0ODYyMTc0NQorOjEwRDc2MDAwNTNDRjMzOEFBRjFGREQ2NEU0RUYxQTE5NDNGQjlBRjJGQgorOjEwRDc3MDAwQUE1QURBNjczNzgyRkM0MDdEMTAzOTlGRTM0RDhGMkEyMQorOjEwRDc4MDAwQTgwN0VDMTZCRjgyN0VEMUM2OTFBOUI5NkJBMDFENDgyRgorOjEwRDc5MDAwMzVGMkZCRDg2M0ZDOEExNEZFNURGMzA3RDlEN0Y4MTU4MAorOjEwRDdBMDAwRENERjM2OEVDOEEwRUY3QTdGOEQwMjk3QjMzQTVGMzQwNAorOjEwRDdCMDAwQzJCRUVGNzlGMjhCNzk1QzMzMzFBRUY0QURDMEY0NTg3MAorOjEwRDdDMDAwNjhCNzYzMkQwQjk5REM4QzFENzQ2NzhDQzY3REFFQkY2QQorOjEwRDdEMDAwREU0MkU3N0I4REY5NjJGQTVDQzhDNzY1REJDODNGRDZERAorOjEwRDdFMDAwOTYxMDlBODVGNzZCNTU0MTIyRkRFQTRGNTBBRThENDU1NAorOjEwRDdGMDAwRkZFRTlBQjQ0RTk0N0YwN0VGQjZEMDdBOUIyN0YzRkJFNworOjEwRDgwMDAwNkFENjI5MUZGOUFGQzRGRTU3MzAwRkVBRDUxREJEQkYzOAorOjEwRDgxMDAwNkVDNTc3MDJENEEzQjA5RjQ1QkYyMTc2MEFGMjY4QzdEMAorOjEwRDgyMDAwRjRCMzc2RENDRkI5MzBBRTBFRjBCMUQ1MUNBNDc5NkQ2RgorOjEwRDgzMDAwQTlCMTUyQkY1QkRBMkM2NUQxRjBGNzc5QkE0NEVCMEE5MworOjEwRDg0MDAwMDg1RDE0MUY5Q0M0ODI3Njg0RUI4M0QzNjc2RUNFODNGRAorOjEwRDg1MDAwNzZCOTc5NENDNkZEN0M3M0MxNTk2REJGRTkzNUYxRjNEQQorOjEwRDg2MDAwMjhERDhGQzhFQ0RBNzk5NjREM0JBN0IyODVDNzE3M0UwNQorOjEwRDg3MDAwRUFERjRCRkU0M0M3OEMyMDRGQTc4QkU0N0Y4RTlDQzcwQgorOjEwRDg4MDAwMEExN0E3N0JDN0Q0Q0VFOUE4MjcxQzg1MjIxM0QwQkZDRgorOjEwRDg5MDAwOTlDNzA0NUM5NzNDN0QwNzVERDJDOENENjcwM0I0Mzc1OAorOjEwRDhBMDAwNTE3QkQ5MEJFRDBCNzk3QkY0MDlDOTE3RDlCRUMyQzVFMQorOjEwRDhCMDAwRTMwQ0Q3QTMxRjBBQ0EwMzY2OEY3MDJEQ0MyMzcwODM5NQorOjEwRDhDMDAwMkNBODRBNUZCRDdBMTdEN0FGREJBMUZGMTBDOUQxMDBFMgorOjEwRDhEMDAwQURDQjlEMUYwQzIxQkRCOTJCNDRDMkQzRkFBMkUzNzQ3QQorOjEwRDhFMDAwMkVGMDYwQTFFRTQ3RjVEMDNDQjZENjFDMzk4MEY2RDdCNQorOjEwRDhGMDAwRDY3QjE5RDk0OTVCNTE4NjQyQkJBRDM3QjAwMDNGNEY0QgorOjEwRDkwMDAwNjIxOTI4REZCNjJDQjQ1QzRGRTdGOTA1MDA3RjgxRDI5RAorOjEwRDkxMDAwQThGMzlFOUQ2RTIzN0NCQjU3M0YxOEMyRkJGQjMxMUVCNAorOjEwRDkyMDAwMjBENDVDNEFBM0Q2NkY0Q0U3NzBEQTYyMEVBNEEzN0ZDMgorOjEwRDkzMDAwNjQyMEJBMjg3MzcxQkZBQUJCNEFCM0FCOThERjg1Nzg1RAorOjEwRDk0MDAwRERBMEMxODdERDNBOUVGQjE3MjRBRjEyMUVDN0Q1QTcwNQorOjEwRDk1MDAwNEZCODFGMDNENjQ3NzFBRDQ5NzUxNkQyNDdFMjhDRDAzOAorOjEwRDk2MDAwMkM1QzU3NjJCRTg1NUQ5MzhCRkNDNUUxQTY4RTExNzk1OAorOjEwRDk3MDAwREMxOTBCQjQyMjdGQjY1RDkyNEFGMUE0RUJDNDgwMEI5NAorOjEwRDk4MDAwRkRDRDZBODk4NUNFOTMwRjE2ODlCM0YwNUQ4NDhENzVDMAorOjEwRDk5MDAwMTZGMjQzNDA5RUY4QzVFRjFERDY4NkZDRTY5ODVBNTIxMworOjEwRDlBMDAwQjZBMDEwREZCOUIwQzgwOERGREEwMkQ5OEU3NDVDRUIxQworOjEwRDlCMDAwMTU2NTAxRjIxQjRBRjVGQjExOENERTM3MTg2NzMyRDk2OQorOjEwRDlDMDAwRjNBMTdDN0JCQTg4M0U1QUI2NUQxMDg4REZFQkJEMjU5QgorOjEwRDlEMDAwRkVFMUYwQkQ1RTRFMTZDMkZEMDAyRkJCQjhERDdCNzdDOQorOjEwRDlFMDAwNEVFOUNCMkU0ODAzREUwN0ZEQzMxNThFNEI2OTEyRTNDQgorOjEwRDlGMDAwNTcyQ0UwMjc5Njg1MTY2MENDNEQ1QkZEOTM0NzcxQkQ5MworOjEwREEwMDAwRUJDN0Q5RThGRTZDRjYwQTdGMTlDRTM3RjYxMjhCODI4NworOjEwREExMDAwNzhEREQxOUIzNDlBRDY1NzY3NTE5MDlGMzcwOTgxNkIzNworOjEwREEyMDAwOTFFRkI3REU3RDQ4NDVCRkJBRkQ2MzI3QzYwRTMzNjc2OQorOjEwREEzMDAwRDdERkFBMzE3RUNDNTk2ODg5MzhDNzYyMjJDQTcxN0Q4NgorOjEwREE0MDAwNUNFNzVCMjFBMkE3MkVDMUY3OTc1OEYyRkYxNDM0RTVEQgorOjEwREE1MDAwMjc1MzNDRjMyNDg0RTc4NjI5RUZFNkNGOEI0MjE3RDA4NworOjEwREE2MDAwREU5OTNBMUVFRDY1MzEzNDY5MkNDQTI5QUVDNzk4MjQ3NworOjEwREE3MDAwQTc4N0UzNzc1Mzc2QzYzQkU4NjdEQTU2MENGM0M3RjExRQorOjEwREE4MDAwQUFCQTZGQTc3OTc5OEZEQzhGNzY5NUYzRDhDOUFGQTMzRgorOjEwREE5MDAwQ0ZGMzRERDIyM0IxQzcxQzIxNzEyQ0E2NEI2NjkwN0RDQworOjEwREFBMDAwMTY1RTBGRTRGRUM2MUNFRkM3MkVBMDlCREQzNTVDRUVCNAorOjEwREFCMDAwQjdEQ0M1RTgzRDBBRkNDOTBGODM2RjRCMDE0ODY5RkUxRQorOjEwREFDMDAwMDQ4RDQyRjUwQTY0RjJBM0FGMTM5NTYwMDhFMTM5RDZEQworOjEwREFEMDAwNDZGNDk0QzY3QzI0RDcyMkQ3RUIzOEQ2NzgzN0M2MURCNworOjEwREFFMDAwMzkzQ0M2NzlGNjZBRkM4RDNGNTIyQTlENTdBMDI1Q0E1QgorOjEwREFGMDAwMkNFOTczRUQyOEZGRjY4QzU3RDI3MUJGRkQ2MDQyNzQ5QworOjEwREIwMDAwM0RGRjVFM0E2RkJGNUI4ODZFOUY5RjRCQjc3MzdEMDk4OQorOjEwREIxMDAwQjIzMjM0ODk1MEM1MjhBRTBGRjI2MjJBOUREQjkwOTM1MQorOjEwREIyMDAwREIyQTcyQjlDMEFFNjNBNEY3RTJDNjc1RDkzRDYxRTNFMgorOjEwREIzMDAwRUQ0OUVGOUIyN0M2MUZDNDZCRUQ5OERDMTNBQTgxRjU1NgorOjEwREI0MDAwQjcwMUQ1RTI3REVFQjg2QzBFNDdBN0RBMDc0N0FDMkZEOAorOjEwREI1MDAwNkJFQjAyM0VBODE5NTU4ODQwOTRBOTNFMkJCNUQwQjk2RAorOjEwREI2MDAwMDg0ODQzRjUxQkIxMEYwRUIxNUFGRDJENDU5MjgwRUZDOQorOjEwREI3MDAwOTAwQzAzNjAwODUwM0Y2MUJBQzU3MDhFMjJENzFENTFDQQorOjEwREI4MDAwQjFGQzdFMTM1MzEyOEJGQUM2N0Y2QzFDMEJBQzgxRjE3NworOjEwREI5MDAwRTNCRDQ2NzhDN0FFNzg2MTI1REFFNTkxNzQ4MDMzQjg4NQorOjEwREJBMDAwRDAyRjg2OEFDRjM1QjY0QkJEQkQxRjFGMTAzQzY5OUU1NgorOjEwREJCMDAwMDA5QTk2QjdEODBFMEIwMEE1QTU1REQyRTM2MzQ5RkU4NworOjEwREJDMDAwNEUzNDc1QUFFODBGQzU4MEE0N0QzMEZGNEI5RjdFQ0JGNQorOjEwREJEMDAwQkIwQkYyMkQzRUNFNjdCMUY5MkZBQzQ0QkE0Q0M4RTA3NgorOjEwREJFMDAwNzg3QTA3N0RDQjAwRTc0Nzk5RkM3NzhDREI1MUFCNDQxMworOjEwREJGMDAwMDVGMUIxMkQzNDhDRjQ3ODIzOTM0QTExNEY4RDk1NDc1QworOjEwREMwMDAwNDQ5NEVCQ0Q3Qjk5NDcxMDkwRkVGRkNCMUEzRUJGREJDRgorOjEwREMxMDAwRDJGOTM5MEQ5MzE0OTI3RjkyOUJERjFCNkQyRTEwMUQ0QworOjEwREMyMDAwMjg1RjBGREVGRDAyRTlCREM3MEU4ODBDRjlCRkU0Nzc1RgorOjEwREMzMDAwQzcxRUMxRjc4MTVBREVCMTUyQkVFNUY1NEE5MjFCM0ZCRAorOjEwREM0MDAwODc3NjZBMTRGRkY5NTA3QTM5QjI3RURFOTIxRDAyOUUwMQorOjEwREM1MDAwNEZFNDJDMDhCRTNFMTJFNUIzNUZGMjVDODNGODU4RDA2NworOjEwREM2MDAwNDlFRjg3Mjg4NUZDOUNDRDM5MjM0NEVGODcyOEE4RDUyOAorOjEwREM3MDAwQzAyNjU1RkM1QURBQzJDQkQ5QUQ4OUI0OEYxQTYzRURGMAorOjEwREM4MDAwNkFCODBFRTZGN0U4RDMxMjQzN0Q2OUIyMDZEM0U3NDNEQworOjEwREM5MDAwQkZBNjE3OURBODA5RkFFRDhGMUU5RDExNEE0NzM5MUU5MAorOjEwRENBMDAwNTM0OTYxRDBGREU2NzcyMjlEQ0I1OUY3MENFNUY3MjM2OAorOjEwRENCMDAwQTFERjg0QTkxQzk2NzY3RkRBMDE5NDk3NjgzM0UzQkRDRgorOjEwRENDMDAwMEE4N0NBRjVEQzA2MjlFMEM1MzhFRjBEMkI3QzE2MUM0NworOjEwRENEMDAwOUY2OUZCOTdDNjI1RTU0RjIyOUM0RjZBN0E4RjU1MkU4OAorOjEwRENFMDAwQTA3NzRDREMxQUJGMzhBQTU4NzFCNDdENTZBQjJCODY4RQorOjEwRENGMDAwQzdCNzNDMjAxRTQwRkU3MDdCMTlFOTBGQjkyQTE4MUFERAorOjEwREQwMDAwQTVFOTY1OUNCOEJDRkFGOTQ2RDQyRkNFMEE5MUQ2QjFFNAorOjEwREQxMDAwNDFFQUFDQzE3NzI1MzZBQzYwNzI4REQyQkZCRkVGREE3NQorOjEwREQyMDAwQkUyQURENEFGMzZGNDUxQ0E3RjRBRDgzNUM3MjIwREY4OQorOjEwREQzMDAwREMwQkEyQUZFMzYxMUM3NzYyREYzQTYyRjQ3NUU0NzczMworOjEwREQ0MDAwNTE1RTlGQzc3NjZGRjBBMkU2QjE1OTVCQzdBNjc0OTk4MgorOjEwREQ1MDAwNTI0NzAxNjgxQTY3N0Y3OUJGQzZGMTAxQkQyQjEzMDBENgorOjEwREQ2MDAwNUJERDQ0RjdEMTgyRDc2MTVFNzk0RTY0RkNCRTk2OTE0QgorOjEwREQ3MDAwQkZGQkU1MzVCQThBRkNBRUIwQjA3MTcyOTFFRTM4OUU0OQorOjEwREQ4MDAwODFFRTM0RkIwOUY4Q0U4NjIyNDA1NEJFMjEzRjg2OUZBNworOjEwREQ5MDAwRDYxRjQ5OEZGRjc0QjkxODNFNkZFODNGQjY4MTA5MTQ0QQorOjEwRERBMDAwMTc1N0MxOTQ5MkY0RkU3MjkxNjk3MkQxQzZENDEwQ0EwOQorOjEwRERCMDAwQkZGRjY5QjkwODcyOTBFNDYyMEJBQzM0MDk3NjJBQjFFRQorOjEwRERDMDAwMUQ0RDc3QTMxRUQ3RTVFMTQ0QzRDOTE0NjQ1RkRCMEQ4NAorOjEwREREMDAwMjU0RURBMTc1MUZFQjI0N0ZFRDA4MkYxOTFFQjQ0RURBOQorOjEwRERFMDAwQkM0QjgzMEJCQUExMTAyRTVGQkIxNDgzM0U3RDE4N0YwMgorOjEwRERGMDAwODE3NUVDRTk0OEJDQkUwMEM2REI1QzM2NkMxQ0VFMkZCRQorOjEwREUwMDAwRUNGRTE3QzkzRTcwMTdGMEY4MTU3NzE1M0YzRjc3RTQyMQorOjEwREUxMDAwQ0Q3QjMyRkM1RTVDNjUzQUI3RDMyQjc1RkFBQkYyQkJCNworOjEwREUyMDAwNzA5QzBERDgyRkNBRTczQzBCRTlDQjQ3NTk5MEVCNDNDOAorOjEwREUzMDAwQ0QzRURERTZEMkZDMjQxQTVENDVGMjQ5QTQ3QzlBRjA4MQorOjEwREU0MDAwODdFNDEyOTRFRkU5ODI1NUM2RkQxQ0VBRTc4M0E5NDZGMAorOjEwREU1MDAwN0Q4REY0QTJFQkVCRDZDRTM1MDlFODBGQ0JENUZDRkREQQorOjEwREU2MDAwQjkzNjYzOUNDMzY1MTk1QzlFOTlEM0Y5M0NENjg5OTVGNAorOjEwREU3MDAwQjRERjU0NEI0NERBQzdFOUY0Nzc0MThGNDdDMDMxMTIxRAorOjEwREU4MDAwN0U0OEE4NkIyNzUxN0MwQ0U1RTM4QTdCMThGMkVGMzZCRAorOjEwREU5MDAwMjA1OTdDRTMyRDJFNUREMUUyQTY2NTgyNzNEQkNGQzREMQorOjEwREVBMDAwRjEyODJGRjc3NDk0REJEMUJGMkVCODZERDdFMkZFNzA0NgorOjEwREVCMDAwQTNDMDQyMjgzNzM3MTZCRjQ5NzEyNTRENTVEMDMzMkNBMgorOjEwREVDMDAwQ0E5OTJGQ0VCNjhDRUQ4RjY3RTA2M0RBQUYzQTU0NkIwOAorOjEwREVEMDAwMjdGQUI1ODJBMTFEMTRCN0QwMTQzODM0OEI3MTNCOTY0NAorOjEwREVFMDAwNjE1QzRBNTNGRTlBOEM0NTI4REZGMzRCMEIxMUJGNkRFMgorOjEwREVGMDAwRjUxNjhBOUI5MUYzNTk1NDNGQzJFN0I4OEYyMTNBRjkzRQorOjEwREYwMDAwNzY3QUNDQTFFRjJGMkJBMkVGMkI0QjMzRjhGRTM2MjhERAorOjEwREYxMDAwODFBODgyRjk2NEU1OEIxRUU0RkZBQzNBNEJENDc5NUNBRQorOjEwREYyMDAwQTlFMTI5MzM4M0RGMEY2QkFCM0Y5NDRFRUY2Njg5OTVGMAorOjEwREYzMDAwMDEzNjE4QkU2MEZBNkI1MkMzRjAzMTc5MDA3Q0I4NzRCOAorOjEwREY0MDAwN0M0ODNBM0UxMjY2MTMxRjc2NzU4QTVDREU5MjVFREI3MQorOjEwREY1MDAwQzBFNERCNTAzRkFBOTUxNkIyNjMxQkNEN0M1RkJFQTMyNQorOjEwREY2MDAwNDBFMzBCRDlENjg2QzRGNjZERTkzQTZFODk0OEY3NzA1RQorOjEwREY3MDAwQjI4QjQ0REEyNzNBMkE5RUE3QjhBNjQ3NTlDRkVCMjg5NgorOjEwREY4MDAwRUZENDAyN0U3RjNFQjJGRDFEMTlEQzdGMTU5NDE0QzFEMworOjEwREY5MDAwNDNGQjY5OEU0N0MwMkJDRDY3RUI4OEQ0QjY3MDNFNkRDRQorOjEwREZBMDAwRDVFQ0U4NTYxNzg3RTNENkZBODc4OTRGMkY3NjlFQkFDNQorOjEwREZCMDAwRENBRUQ1RUNFODg1NUU5RjA1RDU4MTJBOTQ0RTRCNDdCMworOjEwREZDMDAwRkRGOTA0N0Y4NzhBOTk5QzY0OTc3RjhBNERDMkZDQjJEMQorOjEwREZEMDAwQUJCMjdDOTUxOTYxRTc0M0IyQjc1MkM0N0E1N0UzQkI0MQorOjEwREZFMDAwNDJEMEZFOTMyMEJGMEZGQTQ5RjBEN0M1RjQwRTk3OEZBOQorOjEwREZGMDAwMTEzMzJGNjQ5RDAyMzEzOUM4RDA5RDkwNzc0OTQxMkE1MQorOjEwRTAwMDAwNzcyRDgwQjkyNEQwRUQ0OENBREI2Q0EwMTc2MTQyQTdGOAorOjEwRTAxMDAwQUJGOUZEOEI2RTdDNUY5MkRFOUZFNEVGNEI3RUFFQkQ3NQorOjEwRTAyMDAwMjczOUE2NzU1REM5QTMzODlFMjJGOTUwNjY3Qzg2RUYxNAorOjEwRTAzMDAwNEJFMkZERTdBMjc3MjkyRUZBMTRDOERBQTYwNDhDODdGMgorOjEwRTA0MDAwRTFGN0I3RTVGQjk4MkM0RUM2RkNGQTEyOEM3QkJFRTdENQorOjEwRTA1MDAwNTVBQjc2NEZCMjczMERERTdCNzk1Qzg0NzU0MzlCNjY1RQorOjEwRTA2MDAwMDlGNEZENzAyQzZBMTAyQUMzRTg3OEY3MTU5RDcxNzhDMQorOjEwRTA3MDAwQ0U3NzNBNzhDQkEwRkU2M0JDM0Y0OEYzQ0RFMDc4REFBOAorOjEwRTA4MDAwRTQ1ODRBRjdDQkU2Mzk0MzZFNkM3RjYwQ0Y1MzRGNkU0RQorOjEwRTA5MDAwODFGMTNFREY2N0EzRjc0QzM2M0I5NkJBQjFGQ0YzNDdGQworOjEwRTBBMDAwREU3NkEzQkUzOEJERUY2RDRCQjRGM0M5MjU1MjcwMUFBRQorOjEwRTBCMDAwREUyM0FCNTBFM0Q5MUE5ODdGNzE3MEI2ODVFMjRGNzZCNAorOjEwRTBDMDAwMURBMEZCNjk0QjY0OUYwNUZCQUY2OERENDNGOUFCNzY5MAorOjEwRTBEMDAwRkREOThERTVFRjY3NzAzRDcxM0FEREU3NDZCRjQ0NUVERgorOjEwRTBFMDAwQUIzNTI0ODJGRUQ5M0RDQ0JGMjhFQTM5N0I4NkE4Q0Q0QQorOjEwRTBGMDAwRkI1NUVBN0ZCM0UzRDU0Mzg4OTdEMzhGNThDOUVGNzZCMgorOjEwRTEwMDAwRTA5MURGNTFCRkE3RjZCRDQ4RjNGRDdDRjdEQjc3QTBCOAorOjEwRTExMDAwM0Q1REMxOTgwN0U1Rjk2OUJCRTZEN0IzNzVDNjg1RUZFNAorOjEwRTEyMDAwNkY1RkQ1RTBBMUU3NEZDNzZBRkJFMEFDMjFFQTY5RTc4MgorOjEwRTEzMDAwMzFDQzA5RjBBN0ZCMDM5RDcxNzhCRkYwNzNCM0NGODI5OAorOjEwRTE0MDAwRjA1ODhDRjA4MEI0MThFMDgwNzI3RjcxNTBBMDc5MkU2NgorOjEwRTE1MDAwNkU2REEzRkI1NjhCRjc3MkZGRTA2MjgwMTdDMUE1RjVDOQorOjEwRTE2MDAwMDBDREZGNTgwNjk3MUJBN0Y2RkRDNTRERUY1MkVDQjU0NQorOjEwRTE3MDAwRDJGRTU5NUZGNzYyQTdDRjhERjBEMUQ3MEI3MEUwRUJERAorOjEwRTE4MDAwREU3RDcxNzg5QUE3RTNBOUY1Q0YzNEFGOEFCRDdDNUVCNgorOjEwRTE5MDAwMTVCQkY4M0NFNkVEMDUzQzM5MTE0RkIzMDlGRkE3RjY3NgorOjEwRTFBMDAwMzEwNUVGQzE3NEVGNzlGQjMzQjQ2NzRFRUZCMzI5NjhFMworOjEwRTFCMDAwNTdFOEYzQ0EwMjcxMUIzNzFFRjk4OEVCNjNCNjU3MjA4NAorOjEwRTFDMDAwN0RDQ0E0NEUzQUNGNTkyMkNCMzJCRTRGNzBBMTNDNjBEOQorOjEwRTFEMDAwMDk3MDc5REE1OTkyMDlFNUNGM0MyNEQyRkI5NjRDMEVBRQorOjEwRTFFMDAwNUU4QUZFRDUzMzE5RkFGOTQ2QTcxQkZENjJCQkFGRjA3NAorOjEwRTFGMDAwMTM3RDlFOENENUUwMkQ3NUJBMzE3RTY2NzNBNkVGNENFQgorOjEwRTIwMDAwMzhCRjlGRkVGMEM1NEI3MUREMkI0RDk1QkZDQkM2NzE1RQorOjEwRTIxMDAwOUVFMkYxQTFFNzg3NTVGRUY1MDE5QUY3NzBDMzc5NjM5NQorOjEwRTIyMDAwNjQwQTcwOEJDM0YzRUY3QzkxRjlFODVFRjJERUQ3NjI4QgorOjEwRTIzMDAwQzJDRkExNEQ5OURDRUZCNkQ5RjEwMURENDczQzhERUY5RQorOjEwRTI0MDAwM0NEMjdDODIxNEE3MzVEMjVCRUVDNjczQkU5M0NDRTk3OAorOjEwRTI1MDAwQzM3M0Q5Q0Y5Rjc4OERFMjZEQkFEMzc1RkY1MzI3RDU5RAorOjEwRTI2MDAwM0JCNUY3QjU0NDRDQ0JCNTc4NzgxNkI4ODVFNDE4QzAwMworOjEwRTI3MDAwQjFDMTM2M0U5QTdDRDRFRTE3MDVGOEJEQjEzMzAyMDgyMQorOjEwRTI4MDAwNENENDEzOEZFOTcwQUVCNENDMzQ5Q0VCNzAzOTlBQjU5MgorOjEwRTI5MDAwMzVCNzgzRkMyRDgxRThGN0NEMjJFNTZGREU0MzkzRTlBNgorOjEwRTJBMDAwNUNGOTFDOEI3RUFFQ0NCNDM4Qjk5NUE2MTg4QUJGRDk2MAorOjEwRTJCMDAwRUNGODA1RERCRkFENTJBRDMyREU1RjM5QUVDOUM1OEZCQQorOjEwRTJDMDAwQjRGNzE2Q0VDN0M0QTkyMkQwQ0Q0Qjk5QkVFMTk5MTM5RAorOjEwRTJEMDAwRkJERkMzMkQ2RjVFRTI0NkY4OTZFM0I5MDc2RDZBNzYwMQorOjEwRTJFMDAwREM4MDcxODkxNDBGM0E4NUI0NkQ4OEUwNjdENkNCNUIwQQorOjEwRTJGMDAwNzk3OTAyQ0Y0RkM5RENCMzFFREZDMzQ0Rjg3MjNCRjUxNgorOjEwRTMwMDAwNDk1RTlFQ0JDQjdGQTI5NUNGQ0YyODFEOUY0OUZBODUzMgorOjEwRTMxMDAwRDEzQjQ1NjA5MTI1NzREQkI4MEE4RjA2OEYzRUI4NDgyMworOjEwRTMyMDAwQUM1QkI3QUJBMUYyQzI0Q0M2RTMzNjMyNEFBN0UyN0E4NQorOjEwRTMzMDAwQTA1OEUwN0NGRkZERkEwM0JDQUJCNkM0RkY4NjdFNkM0MAorOjEwRTM0MDAwRkY1REZEMDQ0OTJGODkzRTdDRTMwQUJFNzlCOEZFN0I2MAorOjEwRTM1MDAwQkM4NEM5NEQwOURGQkZGRkVGREE3RUE1QzkyQjlFNDRGRgorOjEwRTM2MDAwM0E4QzE3ODlFRTc1QkVFRTdFNjRENDM4RENGRjVCMUFGQQorOjEwRTM3MDAwRUUwRUExREFFQzhFMkRCMUE0QzNGNzczMEEzRjNGQjlCQworOjEwRTM4MDAwRUJBMTREODZGNzU1RjUzNEYyMUQ1QkZEMUNDRjMyREM1OQorOjEwRTM5MDAwNzgzRURCOTJDOUU1NTE0QjY2OUZGRjBEQ0ZFNTQ2RTIyMworOjEwRTNBMDAwMkYwQUNGQjdBNDUyMjgwQ0I3RDM1OUE1ODhGMTg3RjkwMworOjEwRTNCMDAwMUQzNjdBQzdGNzEyMDY4MjAyRTYzRjlBODU0NEQ0REZGQgorOjEwRTNDMDAwNjM1ODE3RTU3RjgwMjA4MEZDMzhBNjk4MzAzRjgxRjVBMAorOjEwRTNEMDAwQjhBNUUxNzhGRTFDNUE4Qjc2REFCMTY0NUYxM0QyRDkwNgorOjEwRTNFMDAwOTc4Rjc0N0UyMDQwRjlDRjMzN0NCRkU5ODJFRkVCMzMwNworOjEwRTNGMDAwRjkzRUM4MDk2NjIxRDJCMzhDMjlEMEExRTg5OEUxOEFGOAorOjEwRTQwMDAwMjZGNzJGQzA1Mzk2NEU4NTlGQjdERDJDNzkxRjIyM0FGMQorOjEwRTQxMDAwNjY1OTcyQjdBMzBGQ0VCQTNDNThBNEJEQkJBNEI3RkZEMAorOjEwRTQyMDAwRUNFOUE3ODZEMTdCNDM3REVGODUwRjdBMUY3ODVFRDUxNworOjEwRTQzMDAwQzI4NzlFOTgzMDQ4QjkyNjY3NzdENzA0NkUwQkQ3RjcwNgorOjEwRTQ0MDAwRUQxQTlDOUZDOUQ0RjU4MDVGRDcwNzY0QzdGREVBNjZDMworOjEwRTQ1MDAwNkUzRkVEQkVDMkJCRTY3MTk0QjdBRDI2REE0RjlGNkMzRQorOjEwRTQ2MDAwRkQwQkJERkI3OEFFOTQ5MTVEMzdEMEI4MjcyM0YwN0VDRAorOjEwRTQ3MDAwNzJFNzUzMTlGQ0JDMjM2MEQwRUYwQjlGN0NFOUQyRjAwQworOjEwRTQ4MDAwNzg0QjAwQjM5MjNDODlCRkMzNDE3ODNGRTQ1MUFEMjYzRAorOjEwRTQ5MDAwQTREMjUyRjJDNzU4NTgyNThGNTNDMUY5MEVDNzc3Qjg4NgorOjEwRTRBMDAwODI5NDNBNTkyN0E1NzFBQzg3NTI5OUM5RTQ5RjRFNjQ2QQorOjEwRTRCMDAwMUU0QTkzNTkyOUE1QTlBQzUyRTBGNjlEOUZEMjBDMTY4RAorOjEwRTRDMDAwQTQzNDBCRUQ1M0Y0RjdCMDFFNEExNUJDRjExOTE2QkY3NgorOjEwRTREMDAwMzEwQzRGNEM4N0UzN0JCQ0E1RkM3QjQ0N0M5MDg0Nzg1QgorOjEwRTRFMDAwOUMxMDQ1OUU0N0M0MDU0OUVENTUyNENGMzEyRTY4NDQwNAorOjEwRTRGMDAwNzJGRkY3MTQ3NEY5QkQzOUIzRTQzRDk0QTcyRjY1N0EyMAorOjEwRTUwMDAwOEY2MTdBRjhEOURGRjNGQjE1RUIwNUIyQUY0RkQ4NjcwRgorOjEwRTUxMDAwNTgxNDQwREQzMzg5NUU3QTA3NDQxNTU5RTk0RUQwRUYyRgorOjEwRTUyMDAwNzM3NUZGM0ZGRUU4NzFDMjA4Q0MxNkYzQTlGMEY4MUQyMQorOjEwRTUzMDAwNjY3M0U2RTM3OUYxMUNBREVBMUNFRDFDNjQ4RUU2MDcxOAorOjEwRTU0MDAwQzFGN0NERjgzRDNEMEZEREI3OUZBMzlEM0ZDQzg5RjBDRQorOjEwRTU1MDAwQkYzMEJGRDVFMDQ3NTFGMTE3NThDNzFDQkY0MEU3MDY5MQorOjEwRTU2MDAwNzM2MjY2QkNEQUM1MDZBNjkzQjBGRUU4REU1Rjc5ODQwNgorOjEwRTU3MDAwMUY2QTQ4N0Y1NjQ0N0U2RTY0N0I5QkMwNkNBOUY4OURFMQorOjEwRTU4MDAwRDNEMzMzM0Y1NEM4QUVEM0ZENTk0MDcwMEFCNTZCQjBGNgorOjEwRTU5MDAwN0U0ODdFMjFGRkQ1REU3MDM4MjU2NUYxN0RBQkREN0ZCRAorOjEwRTVBMDAwNEQ1Q0I0Nzc5N0Y0NzQyRUQ4NjdFNkM0RkVFRDYxNDdFRQorOjEwRTVCMDAwOTg4MDdDQUZDQjYxOURDRTczNzE2MzhCN0M5NDZGMDkyNworOjEwRTVDMDAwMEMxNjk3QUFCRjc3RERGNDgwOUZFMUJDRURBMTU1RjQ0RQorOjEwRTVEMDAwNEVGNUJERDkyQUY5NkE2RDA1MDFCQTFGMTA5MzFGNzA1NworOjEwRTVFMDAwQTk1MUU2RDc4NEVGM0EwMzdGMzVDNTFBQ0Y0RDk2NjcxOAorOjEwRTVGMDAwNzFGRTVGOUVDNUNGQjUwRjVEOTI1QTgyRTdEOUVCMTRDRAorOjEwRTYwMDAwOTFFRTBEQUY1M0Y4REYyRDU4OTczNUQ0M0JFNTM2QzM2NworOjEwRTYxMDAwM0RGOUI1NDlEQkU4MUQyMEZCNTdEQjE5REE5Mzc2Mjk3NAorOjEwRTYyMDAwRkFCRDk0REJCNEYxMzc2OUY1MzcyNzZEMjMzRjQ5QzM1MQorOjEwRTYzMDAwMDg3RUJFMUY1OUZGQzA4ODg3RTlEREM3QzY1Q0Q4RUZEQQorOjEwRTY0MDAwNjJGQTgwNEFGREQ3OEY3OEI4MENEQkRCNDI4RDg2RkJGRgorOjEwRTY1MDAwQkNCM0IzRjhCRURBQjY5N0QzQTMyOUNGMTIxODg2RjRBOQorOjEwRTY2MDAwMjBGOTI5QkU0MEFGRDczOEMwNzlEMjhENTk1QzJFMzZGQgorOjEwRTY3MDAwOTkwMzc0NEZBNjQ5QjM4Nzk2NjdDNTZENDA3QjY3NUQ2NAorOjEwRTY4MDAwRDY4RUEzQzhBRkU3RjIxODlEMzdEQTQzNEZEMzM5ODI0RAorOjEwRTY5MDAwMkRERkMyRUM4MkY2NzcwMjMwQkVBMzIwNDhGODQxNjczNgorOjEwRTZBMDAwNTNDODQwQjczMTdERUY2Qzk4RkFGNzVGRjc4RERGODU3RgorOjEwRTZCMDAwRUI2QkNDRjVEM0Y4NDNBREY3NEE4RDRFMUIzNUZEREE0NQorOjEwRTZDMDAwNjgzNzlFQTM1NTY4RjBCRTVFNUI5N0VEMTU0NkYyNjQxMQorOjEwRTZEMDAwMTBCODkwQkQ3N0UzRDYxMTM3QTI3RkNBQjY3RjQ4MzgwRAorOjEwRTZFMDAwMUFFQUU3QjJCMkY4NjhGQzEyMjlGRjlEMDU2MkM0M0I0MgorOjEwRTZGMDAwNEEwMkNERUJEQzVFNDE3QjZGOTFCRjYzRDE2NzA3MDRCQgorOjEwRTcwMDAwMkREOEVGQkY2RDJEM0Y3ODJEQ0M2NzkxQ0ZFOUM1Rjg5RgorOjEwRTcxMDAwQzlBN0I2RUVBMDdCRkE4QjVGMzQ1MzdDQzJDOEFFRDlEMgorOjEwRTcyMDAwNUMwRUI2RjI3NzEyRjVGNzhEMkU2OUI1MUFERTlCNUE5QworOjEwRTczMDAwQzJDMkRFNTE4NEYxMTYxRjNCNzk4Q0QxM0Q2M0UzNzc3MQorOjEwRTc0MDAwRkRERDgwNjZGQzEwMjU0RTJERjJERDgxODdCMjIyREZEMworOjEwRTc1MDAwMjNEM0RFMUQyODg4RUVBNzg5N0M3NzYwNTc1MDI0QkQxRgorOjEwRTc2MDAwQjExQ0UzNTg2OTFGQjBBRDA0RjczRDU1QzcwNEYyMUI1NworOjEwRTc3MDAwRjRFNzQzRTVCMTNDNzM1ODVFRjAxMDNEQUFCMTMxREVEOQorOjEwRTc4MDAwOUQ1MUY4RTlCRDZDNEUyRkJCRjE1MDhERUNGRUVBMERBQQorOjEwRTc5MDAwQTEyQzRDRUIxODlFMzdENUFFOTA2NDNDRDdBRTBEQzQ3RgorOjEwRTdBMDAwRDBGRDkyNUE1OTBDNjBEQzQ4NzY2Qzg5MERGRDhGMkM5NworOjEwRTdCMDAwNDE5NEYxMUVEQTM0RDM1NEJBRjc2NEI5NTc5QTQwRUY1MgorOjEwRTdDMDAwQjNFRTU4RDQ4OUY3RUE2QTVEMTI0MzNFQ0U0RUUwNzE0QgorOjEwRTdEMDAwMDQyQzVEQTRGNzY5RUFFNDM3MTNFNkUwM0VDRUM5RUYwNgorOjEwRTdFMDAwRTlFNUM4MkNBMDA4NjhENzc5MTk5RTJGQzM2NkE1MzIyMQorOjEwRTdGMDAwMDRBNjU3QjZFMDBERTE3QjU3NkNCMjU1REVDOURGOTkzMAorOjEwRTgwMDAwQjk3MURDMjRGMjAzRDNDRjgxQjY2OUExREZFMjM4NUVBRgorOjEwRTgxMDAwNUIyOUUyRkZBQTdCOTNDOTFFMENCODRDMENFMzAwM0ZCNgorOjEwRTgyMDAwQ0RFMkU3ODI5NkQ4OTJEMEZCMzhCRjU5MEVGMkVEMDZDMgorOjEwRTgzMDAwNTQzMTExRjFGMDdBREJEQTk5RDdDMDc3NzM0MEEyNzhCRQorOjEwRTg0MDAwODdGQ0FGNkI2RkJCMDZEQUY3QjQ1OUU4QkU4NTBFMjdCRAorOjEwRTg1MDAwQTU0RTMyQkNERkUwNUU2RENDNUIyMkRFQUI5MDU4NTgzQgorOjEwRTg2MDAwMzlFNERGQzE3OTkwNUQ1NUM2NDJFMTcxQkNDOTVFN0U3NQorOjEwRTg3MDAwRTgyRTNCODk0RUJBODEzRkU5RkM0M0NCQkY4Nzc5QTBBNAorOjEwRTg4MDAwRDc3NkIzOUZGMERFRkVCRTQwRkVENTgzNkRGMzcyNDhBRgorOjEwRTg5MDAwNUUzQTk2NkVDN0JGNjM1Mjc1OTQ5RjYzMEUyNDlGOUYyNgorOjEwRThBMDAwQ0U1MkY0NzcxMkVDREEzQjE1NzZGNDdCNDVEMjUzNUQwOQorOjEwRThCMDAwMzVGMzYwOUNBMTJERDAxMTMzMUFGMTdCRDhFQ0MxQjA5NworOjEwRThDMDAwRTY3QTREM0U0QTRFMkVDNzc1QkE4OTRDRUIyM0U4QUYyNworOjEwRThEMDAwREVFQ0M5Rjc0M0ZERkFBRjREREFCRUYxRjQ4RDQ4NUZDNworOjEwRThFMDAwOTJBQ0QwQkVEQTlDQzUzQzY4MEU5QjkzM0IzMzY0OThENworOjEwRThGMDAwQzdFODE3MkQxRUZDN0IwN0QzOUUyQjg4NDczOTNGRkFBQworOjEwRTkwMDAwQjU1OTI0REYxMDRFODgyRkE5Q0FFMjQxM0JEOTVBOTU0OAorOjEwRTkxMDAwRUM5MTI2NjAzRDI3RDFFNTU5QTc4NUVDMjFBOUNBRTFGNAorOjEwRTkyMDAwMjdGQkFCNkQ5MjRCMDk5MzdCNkJBQjY1OEY2NEM2QkZDNgorOjEwRTkzMDAwOEY2M0EzNzRFRDAwRjIzRTI3NDEyQzQ1QkZBQjQ1QjM3NgorOjEwRTk0MDAwOTdEM0I0NzVBNTY1M0IyODREQ0RFNkYyNzNCQkE0Q0UzNQorOjEwRTk1MDAwQTRGNzdCODE2RTMwRUVFNkMwNkE0RURGQ0JEMzZEQTRBOAorOjEwRTk2MDAwMzc5N0JGM0UzQzZEMzBGRkUwOTNENTJFNEYxRTAwNzZBQgorOjEwRTk3MDAwREJFQTcyRjJEQjE2QUZGQUE4MTFFOTZFNzlBQzRENDYwQworOjEwRTk4MDAwM0EzNEM1OEREQzNDMTVFOUZFRjc2NkJBRTc1OTFCM0IwNgorOjEwRTk5MDAwNDk5OTEzRDY5RjI5QUVDODg1RjAzMDg5NkEwNkQyNzM4QgorOjEwRTlBMDAwQzE2M0MxMUJBNUM5NDgyN0VBMTZCQ0NGNUY5OEREN0FCMQorOjEwRTlCMDAwQTMwNEYyQTUzRDU2Q0RDMEYzQjJBOUQ5NUI3OTNFNDU3QgorOjEwRTlDMDAwREQyMjIwOUY2NDA3NzgzRTVCQ0QxMDIxM0YyM0ZCMDlBOQorOjEwRTlEMDAwOUUxRkExNkVDMUZDQUREOUVEM0MzRjg2RUJBM0RCQjMxRQorOjEwRTlFMDAwNzdERDg4RkFBOEQ2RUMyOTQzRkZGNEIzMzBGRjgyMTExMworOjEwRTlGMDAwRjg3NzgzNzg3QTg3MDYxN0JERkM3OUZDNkVDNkJGMzMzQgorOjEwRUEwMDAwQzREM0M4RjIxN0I0NzZGQjA3MjhGRjhENTZGRUNBMDBBMAorOjEwRUExMDAwRkRCRkFBQjUwQjBERDBGRUEwRDZBRTYzODBGNjg3QjRCRAorOjEwRUEyMDAwNzY4NzA3MjhGRkJENTZGRUM2MDBGREZGNTE2QkQ3MzkxQworOjEwRUEzMDAwNDBGQjM3QjU3NjZGMEREMEZFODhENkVFRTgwMEU1RUZFNworOjEwRUE0MDAwNkFFNUM3MjJGQUZGNDBBQkRGQTU3RDc3QzczNkJDOEJFRQorOjEwRUE1MDAwRjY5QTFCRTQxNUNBOTNGQ0Q4MDZGMjc3NkRBQjJBMjQwQworOjEwRUE2MDAwRkFBRjlEQzhGNUJGNEVFRjZFRUQ1RUMwOTE2QzdFNkU0NQorOjEwRUE3MDAwNzMyNDlCREIwMTU1MUE5RDE3QUZDQURCMzgxNUU5RjBFQgorOjEwRUE4MDAwMEZGQzlFMjJFODhGQTM3ODBGNTc1RDI1OTI3RjZGRjlDOAorOjEwRUE5MDAwRUJGQzVEOTlFNUFCMjQzQURGQjhBMEY3QjRGNkZBRkNERAorOjEwRUFBMDAwMDNEQTNDRUJCNEI0MzI5QkJGOTc5MUFCQkEzQzMzQzJCMAorOjEwRUFCMDAwRjRBMzU5MzZFNjZEQzA0RjE4RkY1Rjk3Q0NGNTRDRkVCNgorOjEwRUFDMDAwQUE5MjA2M0MzN0E5MDUzRDgzRUJBQjc3NUE0MkU4RkY5MworOjEwRUFEMDAwQUE5NzI1MkFBRjRCMkVGMUUzNzlCRjJBNEJBNDg3RUFFOAorOjEwRUFFMDAwOTMxMzQzRjg0RTczNUQ1REExRTFCRENGM0E1OUEyRjc5MAorOjEwRUFGMDAwNjNBNDg0QUI2QzczOUMyODM3NjZDODI4M0ZFQjk4OUM1MgorOjEwRUIwMDAwNTg0Q0U3NkFCMDRGNDM3RDUyNTUyMkEzRENDOTRENDhBQgorOjEwRUIxMDAwNEU0NEI5M0MzNzg3QUZBQjIzQjZEQjhFRjcyOEE0MDc0QQorOjEwRUIyMDAwNDQ3QTJCNjBBNDJDMTFCRkU3RDU4OTAxMDVFNkQxMjFEOQorOjEwRUIzMDAwMkYyN0ZGRUJDRTE2RUQ0QzkxRjFGMzQ0NURDRUI3RkZERQorOjEwRUI0MDAwNjIxQUU5QjE1QUQwNjMwQUU5MzExNjNGMkVCNUVGRkVEOQorOjEwRUI1MDAwQTY3NDZDQjQwNUY1OTY5QzYxNjI2NjkwQ0JCRkNCNEVGMworOjEwRUI2MDAwQTQ3MTc3M0VDNEY1RDYwOEQwNUJGOENFREFGNjQyQzY3QgorOjEwRUI3MDAwREY3OTczRDlDOEFGNUIyRTMxNTc1Mjk4MUZGMzc3RDkxRAorOjEwRUI4MDAwREM4RTY3QTYxOTFFREM2NzhGQzBGNzEwQzNFMDNCREM4NAorOjEwRUI5MDAwNkZENDVCQjk0M0U4QUQ5QzJBOTA5NzYxRjVBRDJFRDk0RgorOjEwRUJBMDAwOTAwRjY2NkJFRjJBNzk5ODA3RUQ5QjY5Q0Y2RDI1N0RGNQorOjEwRUJCMDAwNzIxNkY1MDk0M0ZERjJDNzk4RDFBODVGNDA4RjU4NTlFNgorOjEwRUJDMDAwN0YzOUE4Q0I2M0RENkVEMUU1NzRBREE2Mzc2QTIzRjQzNworOjEwRUJEMDAwQzZEMDcyRjdFRkFGOEYyMkZBMTQwREVGRDAwQzI0N0Y1RQorOjEwRUJFMDAwQUIzMDRFMDBFOERGRUMxMzQ4QUYzMEM5NDdGN0ZCODc4NgorOjEwRUJGMDAwODI5QkQ5NUMyQUNCQ0VBMUUxNjc0RUY5MjIwMUU1QjQxNAorOjEwRUMwMDAwRDkyNzc5M0U4QTcyNEY2QTI4RjhFQUY1MkNCNkNDQzcyNAorOjEwRUMxMDAwNTBBRjdENzE2QzY1M0VGQUJERDY5QTNCNjdFRjQyQkE0NAorOjEwRUMyMDAwMTVFMkU5N0U4N0EyRjkxREI2NTVFRjY3Mjc0NjYwM0NERAorOjEwRUMzMDAwRkM3QjVCRUIyNkUwRkQ3MUFGNENGRTkyRjQxMjA1REIzMgorOjEwRUM0MDAwRDk2MTlGOUU0NDc2MUNERjZGMzJEOUU3NUY4NEY2RkM2MgorOjEwRUM1MDAwOEIxNjA1Q0YwNTBFM0ZBQkJEREY5MEVEMjQ3OERFQjNGQworOjEwRUM2MDAwNjcwNUI1MzMwQjk1MkU3RURFQ0YwOERFRUIzMjEyRjk0OQorOjEwRUM3MDAwREYwOTY5Qjc2OTc2RTM5OThEREUzQ0U4NTdFQzEyNTBGRAorOjEwRUM4MDAwRkZGQzQ3NEVEQjQ2MUJFQTBGNkQzRkMwNThEQjREQjgxQgorOjEwRUM5MDAwRkYwOTA2MkM1QTdEQkNFOENFRDgxRTUxRDBGRENGNUVCMAorOjEwRUNBMDAwQzkxNTZFODc1QTZFQkEyQTBCQ0Y0M0U1RDExMkY0OTc3NQorOjEwRUNCMDAwQjFDREJFRDE3QzA1OTY4QjdBN0IyRjVFMUU0MkYxQTUyRAorOjEwRUNDMDAwRTcyNUMwQzMzMzFENUFCOTlBQjZGMTJBOThDRjFFOEJENworOjEwRUNEMDAwM0UzRTE4RDQ0NTM4OUVBOEQxOTNCQzExRkJERjVEQTJGRgorOjEwRUNFMDAwQjdFRkQ5RTg5RDRBRjNCOURFMDQ3QkIwN0M3N0U2NDZGRQorOjEwRUNGMDAwNjc3QURGN0M4N0U3RTQ2RUFDODFCNTlGNTZCQUUyNzAzNQorOjEwRUQwMDAwMUJCN0E0RURBMzU0RDREQkVCQ0FGOEZENjE2NDAwRjQ5NworOjEwRUQxMDAwOEZFOEY3ODgyRkUwNkRFRkNEMkFCQTYyRkZGM0QwM0Y3RQorOjEwRUQyMDAwRTIwQUEwNjg5OUE5RUI5MDAzRTBCNjY0N0ZBNUNEMkMxOAorOjEwRUQzMDAwRTJGQjVEQTUyQUJFREZBNUI3NUJCMjc3MzZEOTM5Q0IzQQorOjEwRUQ0MDAwNUUxOTQ3Njk5NDc2ODdGMUZFQ0M3NzY4NjdCMzVDQzQzNworOjEwRUQ1MDAwNzhBNzQzNkYyRUREQTVFMEJEOTlDQTA2QTc4OUVBMzNERgorOjEwRUQ2MDAwRUVGRjhBQkUzRUJERkRFOTVENkZGRTA0QzczQkEzNzRBNgorOjEwRUQ3MDAwQTU1RTA3QjVENzg1MDAyRTUxREFFOUY1RjVGQkQ1NTMyOQorOjEwRUQ4MDAwNUNERUNCRENDMDdGRkY3MDczM0U2NDUyQTUwN0VCMDdFRgorOjEwRUQ5MDAwNkQ3RUJBQzc2NjM3RkI0QjUxOUYwMDJBMDMxOEE3QTBBOAorOjEwRURBMDAwQTc1M0RDNzlGQzVERUM4OEVGOTFGQzE1QjRCMUE0MTk5NAorOjEwRURCMDAwMjgyRjU3NDg3NEVFMUVCNEE5OEVCMTkwNkY4MTdENEFGQQorOjEwRURDMDAwMEQ0QzY5Q0RCODIzRTMzMTVFQTA2NTlGOTNFNDdBRURFNQorOjEwRUREMDAwOEEwRTU3MDFGMjk1QzdDMkQwRUU2REI5QTIzMzFEREY3RQorOjEwRURFMDAwQkZBRkJCRDc1MkY2MDREMjZGNjhCOUVCQUUzMDNCNkMwNQorOjEwRURGMDAwNzgwRThGQUJDRjRFRjA5NzIxM0ZEQTgxMUY1MTFGMzcyRQorOjEwRUUwMDAwOUE3RDM2N0MzNzQ1NEQxNzI5QUVEQTBFRTU2RjUwNzk3RAorOjEwRUUxMDAwQjY1NkVFOTk3RTBERURDQjQ0MTlFNzU1OUYzNzc3N0FCQworOjEwRUUyMDAwMDlFQTM1NTcyMkZGRkI4NDIzQUUyQTlCMEZFNTAxRDk1RgorOjEwRUUzMDAwMjIyMzc5REQ5RDUzRUU0MzM4M0QyMzc5MkE5MUZGOUVBRAorOjEwRUU0MDAwNzEzQTY1OENDNzAyNTk0OUZBNDAxQTkxNENGMTU5NTZFQQorOjEwRUU1MDAwRURCRTUzRjYzOEFFRTdGNTc5MzZCOUI5RkREMEU0QjY3NAorOjEwRUU2MDAwMTAxRTVBNjIzQjZGMkU4Njc2MzFGNzg5QjIwQUZEMzc0MworOjEwRUU3MDAwREVGQjcwMjlDNjI3M0U3NkVGOTEzRjYzN0M2QjUzQUE3OQorOjEwRUU4MDAwNDRFRjBDRUNBRTA5NzlCMTVFOEZDMDNBNzc4MDFEQjlDMgorOjEwRUU5MDAwQkU2QTY2MjdFRTQ3RDczMzQ1NDE3QjdEQjczMEQzOEZCNworOjEwRUVBMDAwRkFCOTI3NDU2MjNCQTA3RTRDOUUzMTVFRDU1OTYwOENGNQorOjEwRUVCMDAwOTdDQUFBMzBFNjM3RTZGOEVFQzc3NTRERjg0MzYxMzFEOAorOjEwRUVDMDAwOEU5MzIyMjgwQTNFMUQ1Q0Q4QzkyODNFM0YzNTJGNEYxRAorOjEwRUVEMDAwQzZCOEVFQjhDMjg4MzhEOEE5QzY3RTEyQUYzMjk2MjcxNworOjEwRUVFMDAwQ0Y4ODg4REJCQUQ1NThFRUJBREQ5OENGOTg2QkNDN0Y0NworOjEwRUVGMDAwQUVEM0EzOEI5RjNGRTg3RkU3RTFCMTdCOUY2NEE4QTdEOAorOjEwRUYwMDAwMUJCRjhBQTc3ODU2ODQyM0RBRUQzMTIzMjUwRjlFOEIwOQorOjEwRUYxMDAwNjQ1QjNBNjc2MTFDMUNCQjM0ODZFQ0E1ODNFRTE4QTZDMworOjEwRUYyMDAwNDBERUJBOTQ5MTNDQjUyNjA2MEZFMDdFRDUyQUNBQTVFQworOjEwRUYzMDAwMkE2OUE4RTA4MUY3QTFEQzAxRkI1NTk0QkY5MUYwQ0JEMQorOjEwRUY0MDAwQ0VFNkZFNDE2NzI1RkY3QjcxNDEyOTQ0NzY4NDdENTVERAorOjEwRUY1MDAwQkM1Q0UzQzFBRDYzODQxRkI2MjIyQ0NGRTNCRDFGNzczOQorOjEwRUY2MDAwRjNGMzM4QkE3NzRGNDc3Mjg0NTc1ODE5RTI2RDMyMEI3MgorOjEwRUY3MDAwRTAzQjk0RDlGNzdFQTQ4NjYwMUVFQjk1QkM0QUI0MzM3RgorOjEwRUY4MDAwRDY4OTVEMzQ4RTVBRUVGNEUxQkUzQjA1RTNCQzREMThFNAorOjEwRUY5MDAwRUZBRDUyMUE4OThGRTdERERDNEU1MkQ4NUMzRkUyRDFFQgorOjEwRUZBMDAwMzU1QkE0Rjg5MUZBNDMzMTc1NzhGODUyQUZCREQ3QTAxQworOjEwRUZCMDAwQzdCMUU5NzRGOUIyOUJGQkU3RjY3NDg4QTIxN0ZERTBDQworOjEwRUZDMDAwQjdFN0VENDA3Q0VCRjk1NjVGNzIxQkM1RjU4RkFCRUNGNAorOjEwRUZEMDAwNDJCQTY0Mzc3MDNCMTRGNDAwRERDQkQ2RTNDNEY0QjgxNgorOjEwRUZFMDAwQzJFRTFDMUVCRjc2M0E0N0JDODBCRjkwMUU0NzE0MTY2NworOjEwRUZGMDAwMDc0RTQ3NzcyNjNDQkFGMENCNzhERTkzM0RBRTU0NDZCOQorOjEwRjAwMDAwMzlGMzRCRkRGRTA1RTNGREUyRjM4NTc0NkUzMDQzRjQwNgorOjEwRjAxMDAwNUVBMkY5RDNEMUFFNEJEMkM2NEI0QTk2QkNGNEJFM0JFRQorOjEwRjAyMDAwQ0M0OTg0RkEwRjMxNUUzRjI5NkZFRjRBQkM3N0I1MDdCMAorOjEwRjAzMDAwMDkwN0Y5RTcyRTBFRTc0OEJBNERFRkYwOTc4RTQxNzhCMQorOjEwRjA0MDAwMDlBMDBGQjNGQUQzQjFFMDZFQTVGM0MwRkFGQjU4QTI0MgorOjEwRjA1MDAwNzU1QzdGQkE5RTY4RTJGNjRGQ0Y0Mjg1RTIyQzg3QTJBQworOjEwRjA2MDAwRjM5M0VFMDRFRUM3NEVEOTIyQTM3RDlCOTFGNzUwMEQ4QQorOjEwRjA3MDAwREQ4M0I5OEZDOUE4RUYzMjNBM0E2RjQ2QkY1NzI0M0ZCNAorOjEwRjA4MDAwMDQxQzcxRTM3OTlDRENCN0YzQzM5QjRDOUMzRjU4OUFGQQorOjEwRjA5MDAwNDQ3ODhCOEMyRjhEOEMyNzFEOUU5M0EwRjkyOTQwMEZDRgorOjEwRjBBMDAwQzRFMjdEMDBGOTRBOEMxM0VDNTlDNUU4OUQ4MDkyMTdBMworOjEwRjBCMDAwNUI2RUZCNzdFOEVGQ0IxMTE2MTlFNTc1Q0U1QkJFQTc0QgorOjEwRjBDMDAwMUMzMEFGMkY1RkYyRTVBMDlDREUyNjc1RDkxM0MyRkM4MQorOjEwRjBEMDAwOUU5MkM4RUY5RjQ1Q0FFQkUxMzlBMjQ2QUZBMDM3NUNDQworOjEwRjBFMDAwREYzRENENDZGQTA2RTIwQUU2QTU4RTk2ODEwODg3NkZENworOjEwRjBGMDAwREZGNDI3NUJDQUZGQTBEREEyREFGQ0Y4Rjc0NkREMURDRQorOjEwRjEwMDAwN0EzRThCRUNCMDlDQjc3OEJFNjg1QkQ2NDY1NTQyQjg2OQorOjEwRjExMDAwNTU5MEJGRTg2MEY2M0NGMjE3NDlFRjcyN0ZEMTE4OTMyMworOjEwRjEyMDAwMzc4MDc5RjY5RTlERTJFRURBRjdEREJFMDBFM0Q1RUFBMAorOjEwRjEzMDAwNTNBRjUzNTAzRjE3NkFGQjlGRjEzOTQyNTQ3ODQ5MTYzOQorOjEwRjE0MDAwQUYwRkY5MjZGMjdCODEwNjVGQzY0QTNGOUQwREY4MUI4MworOjEwRjE1MDAwRjNCODg1RTJFRUYyQzVGMjg2NUNFNDg3NDYxM0UxQjNDQworOjEwRjE2MDAwRENBNDJDNkQwRURCQTczNUE3MTY5N0U0NENBNDdEMDExQgorOjEwRjE3MDAwRjNDMTg2NDFFOTE1OTgwRkRGNjE0QTNFNUU4Q0Y0OUEyRgorOjEwRjE4MDAwMDM2Qzg2RjIyNTQ3RTUwNjY0NEU1NTBDRjM4NUQxQTkzQworOjEwRjE5MDAwRDIyQjUxRkRFNjU0NkY0OThFMjZGN0YwRENDN0FDQjE5NworOjEwRjFBMDAwRjQzMzg5QTU2QzM2RUE2NUY4ODY3QUQ3QkMyQjg2OUYzRQorOjEwRjFCMDAwRjcyNDFCRUY0NzlBNEMzQzVFRTQyNjZEREQ2NjNDRDc5NgorOjEwRjFDMDAwMTk4RkVGQkQ4OTIxRUJEOEZFRjU2RkQ1RUE0OTM2Njc3NworOjEwRjFEMDAwQzgxNDhGN0VCMjM3OEVEMkJEQ0I4ODczNjBEQ0RGNTIwRAorOjEwRjFFMDAwNUM0RTA1MjMzRjI4QzI4NUYyRjdDOEZDRERFRTJBMUVERgorOjEwRjFGMDAwMEY1MEJCOUEwOTc4MTY1MEFCREQ1MzUxRUZFMDdGOEY2QgorOjEwRjIwMDAwOTg3OUJEMEFCRUFGNDI1QjRDMDVGRjBCMTFGRkJBNkM4QgorOjEwRjIxMDAwMkMxMUVCQTdCMzRFOEE2MzY0MUQ0Q0UxRjExMkM2NzM0NworOjEwRjIyMDAwQTc2RDAzQkMwM0E1RkIwMUE0MkExM0VENTM0NkJGNjZEQgorOjEwRjIzMDAwRTc3RjE3QUE4QUQxM0JFMUY0NjYxM0VFN0Y1N0IzODBDQworOjEwRjI0MDAwMjRGNEY5RTE4RTY0MkJENDRFM0Y4RkRERkRGNTA3MTlEMAorOjEwRjI1MDAwMjg5N0YzQzUxREJFMzdDODZFODg5NTc3QTA3RThDMzE4MAorOjEwRjI2MDAwRjJBMTdFN0ZBRDU2QTM5MzZERDUzMkUxNUIyRjc3QUJENAorOjEwRjI3MDAwQzcyOURFM0U4N0Y1RDRFMDNFMkJBNzJBRDE4MEU3MEJENQorOjEwRjI4MDAwN0VEOURFNENFNjlCMTBERTZGODBCRkFCOUIyN0QxM0I2NworOjEwRjI5MDAwNUQ0QUFGOUJDQUI3NTUyQjQzRjQzRjZDODBGRUQzODlDMAorOjEwRjJBMDAwOUUwNkVFM0Y4QkNBQjc4N0JFNDhCODExNDBCMUFERTdBNgorOjEwRjJCMDAwQTM4NDUyQTVDRjZFOEQ4NEIzN0JCNTUxN0VGRjYwN0Y1MgorOjEwRjJDMDAwNjQzQzM5ODc4QkRERUM0REJFMTlFMDY2N0Y0MEY0QjRCOQorOjEwRjJEMDAwMzFGQzdCM0NDNjdBRDM3M0NGMjVGMEYzNzJCRDdFMjgxOAorOjEwRjJFMDAwRjkxNkFDMEZGQkRFMzYwNUZGQkU4RkIxN0U2OUYxQzdBNAorOjEwRjJGMDAwMDlGQ0RDNURBRkNGRTdGN0EzNUU2M0JENDhGQzQ0Q0VGRAorOjEwRjMwMDAwMTdFNjk1RjJFM0IwNzk1RDY5QjMxQUNBQ0I2NkY3OUI0RAorOjEwRjMxMDAwNTdDQTRGQzNFNjc1OERDQjU4REY1NzEzN0Q1RUQ3RTdDRAorOjEwRjMyMDAwNUIwNzlEOTc1RUVGQTZBMjhCQUIxN0I5OEU1QkE2NUJDMgorOjEwRjMzMDAwMDc4MDNCQUZGRkQzQjI4QkVCRjc1RjE2MEM1RUVGQ0VDRgorOjEwRjM0MDAwQUFDODcxNTQyRTI3MkNERTIzMjhFN0NBOTlCMjE2REZFQgorOjEwRjM1MDAwMDk2N0NFOThBODcxQzEyNTlBMUQ3MzE2RkQxNDE4MEY2MAorOjEwRjM2MDAwOTdFOTdEMUZFNTVBNEYzNjhGNEIzOUZDRUMyMjNGOUVDMworOjEwRjM3MDAwQzMyQ0RGNjc1MUYwQkMyMzVCRjM1QjgzRTA1OThDRkM0QgorOjEwRjM4MDAwQkJDNzI2Mjc2MDNDQTBDREFENjhGQkFCQ0U1QzhDRTc0RAorOjEwRjM5MDAwREJEMzdFRTQzNjkyN0JDQzY4Q0ZDMDdFQUQxOEY1MzVFQQorOjEwRjNBMDAwODgzMEJBOTdGMTI2QjY0QjA5OEZBM0YwOTJGRDU3MkZGQworOjEwRjNCMDAwN0FGRTQyRkJBQTlGRjA3RDk1MUVCRjFGNkU2N0IxNDk4MgorOjEwRjNDMDAwN0Q3Njk2MUVCRkJENDkxQkU3QkY3Mjg2RDE3Q0MwQ0UzRAorOjEwRjNEMDAwQTdCRjdCOUI5QTI3NTE3Q0YzMkY2RDlEOUJGMEZFRDE5RAorOjEwRjNFMDAwMkY5MzkzMTM3MDNGNzM1ODlCQjc2RTM3RUFGNzFBRDI3NworOjEwRjNGMDAwNjZFNzhEMzM0NTgxRDdGRjA3OTFCMTkyNUEwMDgwMDBBRgorOjEwRjQwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkREN0RFNQorOjEwRjQxMDAwMEI3QzU0RDU5OUY4Qjk3M0VGQkM5Mjk5Qzk5RDY0RjJFRAorOjEwRjQyMDAwRTIxMUVFRTRDNTA0NDI5ODYwODgwMUFENEMxMkEwQTgzOAorOjEwRjQzMDAwMkMzQkMxNDc0MTJEMEU4OTNDMjI3OTIxQThBMUIyRjU3MAorOjEwRjQ0MDAwODY0NDg0RjgyMDY4NDBBMEEwNDMxNDhBNTZFRDYwMTFEOQorOjEwRjQ1MDAwMDFDMTFEQTJBNjc2NEI2REVDRjY2MUE5NEI0NzYwMjk1MAorOjEwRjQ2MDAwMDJDMkE4QkI0ODdGN0YyRDdCQkVFRkRDOUI5OUI5OTk3OAorOjEwRjQ3MDAwNTE1MEI2RERERjlGRkVFQ0NEQjlFNzlFRDc3N0JFRjdFMgorOjEwRjQ4MDAwRjc5RDMzMTcyRkQyN0Y5MzA4NzkyODg5MkMwQzE0MTNGQQorOjEwRjQ5MDAwRkNDNzk1MTE2MkNGQ0ZFRkU5NzQxMjMyQkNENDJCOEUyQQorOjEwRjRBMDAwQTNFRkRGQzlEMTExMzI5RTkwODdFOTgzRDA3QUI5NTA5QQorOjEwRjRCMDAwRjA2RkUzRThERjIyMjEyQkNCRTlGN0QwMzA5NzkwMjdEQworOjEwRjRDMDAwQzU3RUJCNDBFQjlGNzQwOEEyQ0M0MTNCMDlEQkVEN0NDMQorOjEwRjREMDAwNEJBN0YzMzgwODc5RUE4RUZDMUVERTE5Mjk2RkYwMzk0NAorOjEwRjRFMDAwQjY0Mjc5Qjg4RUY4MDIxNkU4NDQ1QzQ0RThGQjlEMjZFMworOjEwRjRGMDAwRDFERTU5NEE4QjQyQkZCM0M2NEFDQjNCN0U3RjFCNjdFNgorOjEwRjUwMDAwMjM2NEM0MDg4MkZERDVCNTU2OTM2MzU3MTFCMkRCMTA0RQorOjEwRjUxMDAwN0VGMzIyQ0M2NzNERTdERjQ2RkI3OUFEQkI3NEFBNDBBMgorOjEwRjUyMDAwREJDRjNCNDk4ODk5N0U1QUI3RUNBNjI3OEZBNzExMzJDQgorOjEwRjUzMDAwRTFCODU4MDlFRkVCMzZEQkREM0M3RERGRDRERjMyMTU3NworOjEwRjU0MDAwQzYyMTJEQzQ1REUwMjYyNDkzQUZFNEFEQjQ5RkNDNDcyMworOjEwRjU1MDAwREU3M0I3RDMyOUFGRUI5NUY2ODQ2ODM5QkM5NTczRjdBMgorOjEwRjU2MDAwNDg1MEJGQjg3NDMxQzBDN0UyOTEyQzc0QkQ3MzYxQUExMgorOjEwRjU3MDAwRjhERTNFNTUwRkVENkUzMkI4M0I2ODNGNjdGNDY0MTYxNworOjEwRjU4MDAwQzBGMUEyMDI1N0Y1MzlGNzBFQTk4MkQwRjlDRjBEMkNBMAorOjEwRjU5MDAwOUI4QkUzOEExNDY0RDlCNDZDMTI3MTFFMjY0OTRDNkQ5RQorOjEwRjVBMDAwQTNFNUNDMjQ2MjMyOEYyM0E0N0M4NUQ4RjcwMDhDNUYzRQorOjEwRjVCMDAwNkYxNTdCMjg4QzZEMTU2MkRGOEY2MDVEMkQzOTIyRUYxMgorOjEwRjVDMDAwODZDMUZEMDgwN0I1RkY3OTFFQUY4MUQwNzE0N0VGMzBDNgorOjEwRjVEMDAwRDBDRUQ4M0U1RUE0RkY4RDA5QzQ5NkM3RUU4OTJEOTc4NAorOjEwRjVFMDAwMDY2M0NCNTdCRDEzNUI3RTU1NjJGMDlFNjgxQUJBRTU4MQorOjEwRjVGMDAwMzg4NTc3RUYwMTIzODFGOTJFM0E5REU0Mzc1Mjc4RUY3MQorOjEwRjYwMDAwRDMxMzAyRUI5NzVGMzIyMjNFNTQyRkIyNzgwMDNGNEU2NQorOjEwRjYxMDAwOUY0QURBNkFBNEU1ODM4NzkzRjBGQkJCN0Y2MjY2REZDQgorOjEwRjYyMDAwRUIwMjJGNDM1OTdFMzk5OUMwRjc4QkQyMDJFNUE5NzRCQQorOjEwRjYzMDAwREVBRjdGQzlERkU5MkQ2NkNCRDI0M0ZGMkYxNzZERUQxQgorOjEwRjY0MDAwODRGQUFCMDJFNTIyN0RCRjdCMTQyMUZENTAyRkY4NEJERAorOjEwRjY1MDAwNjA5REJCRkZDNjYzQkZFMUU3OERGRTFFREFFRkU5QkQyQgorOjEwRjY2MDAwM0Y3RTE5RTA3NUZBRjlBMUE5MUM5REYzMzVCQTlFQUI0RQorOjEwRjY3MDAwM0FBMUJFQ0QyQUY1RDBGNzEzNEZCRjk4RTc4QkRBOTdBMgorOjEwRjY4MDAwNDUzQjhDMzFFQjVDMkM3MUI4Q0U1NkMxQjNFMjU5RDhGNgorOjEwRjY5MDAwOUY0MzdBQzRBNzI1RjNGQzc1NDFEQTdFMDk5N0UzOTY2OAorOjEwRjZBMDAwQTExRjAzQzVEMzYyMjhCQjMzRUQxNDVGMjdEQTE4REUzMAorOjEwRjZCMDAwMkUzMUQzNzI5QzdENTc5RkI1MUI3OEUyQkIyQTUyM0VGOAorOjEwRjZDMDAwQkFGQUM3MzgxRkQ3QzlGNzExQUZGN0U5NjU1RDEyQzA5RAorOjEwRjZEMDAwNzEzNUU3REU0NkU3QkZDRjZDMkIyMTI5RjBDQ0YxMDM3MworOjEwRjZFMDAwREVDODEyMjVCQzc0NUNENzhGOUEwMDJGN0VDNUJCN0IwOQorOjEwRjZGMDAwNDhFMkYxNUM1OTdGREEzQ0Y5QUFBRkE4QTdFMzNBNEI5QworOjEwRjcwMDAwMDgzOUY3NTFEMjlEMUUzQThGOTExQjYyRjdCREM4MUY3MQorOjEwRjcxMDAwNUI1RUE1QzBBNzk2NDRCRDc3QzI3QzcyNTc2NjIxOURFQgorOjEwRjcyMDAwMTA5QzhGRUJFNDA3QjczOUU5N0M4NzE4NDkwQkMwNDU3QgorOjEwRjczMDAwM0JFRTVBNjUxRDJGQkM0MEZCNzE2MTM3RkM0NTlFRjVDMQorOjEwRjc0MDAwMjc2NUQwN0Q1MUU4RUE3NThFRDExMUZEQjc3NDI4QTVFMworOjEwRjc1MDAwQjc0NTFDRTMyRkVBRkI0NTlBNzlBOEZENEY5NDE4OUYwMworOjEwRjc2MDAwNzIxOERDNkI0MkI4RkY0NjExRjZGRkQ0ODNEMzlFM0M3RgorOjEwRjc3MDAwQUUxRjNDOUYxMzBGN0EzQzkzQTNERUNGREZCMEI4MkZCMAorOjEwRjc4MDAwOUJCNjZCRDg5OTNFOEU4RjgyNkZDM0YzNkY2NkRDNEU0QgorOjEwRjc5MDAwREY5RkQ5MjFCODgxMDUzNkNDREVGRUY4NDRGOEVFNzkzQQorOjEwRjdBMDAwM0UwMEYzODU3QTBGNURFRjk5QzBEQjM2Rjg2RUZFNjY5QQorOjEwRjdCMDAwRkIzODVFOEFCNDVGQjA2MThBNjdCMjJCMDJDRkNCQTVGQgorOjEwRjdDMDAwRDNENzJBMTg5RjVCMTREMEZCNEQ0MDE3ODFERjREMUQwNgorOjEwRjdEMDAwMEE3OEJBODE3MzE3RDA3MUNBMDUxRjBGNzQ2NzJERjNBOQorOjEwRjdFMDAwRThFNTA5ODQ0Q0ZBRTI1RkZCODZEMEZBRTYwM0UzQ0I1NgorOjEwRjdGMDAwM0I2OTdEQTdDRTdCRDMzRjAxREQzRENEQkJCNzAxNUQyRQorOjEwRjgwMDAwRkZGNjlFMEM1RkQ0RkVCQzAzRkI0QkY3QTVGM0Q2MDZCOAorOjEwRjgxMDAwRUM0N0E2Qjg1MTQwOTk3QUFGQUJCNjFBQ0ExMzhCMDkxOAorOjEwRjgyMDAwNjdBNEZDRDg3NjkyNzhGQzE2MTg4RkJDQUY0QjI1RTQwMQorOjEwRjgzMDAwRTRGRTg3NEEwNDFERjJBM0RCODE0RTRFMTM5QjFCRThCNgorOjEwRjg0MDAwNkU5RkI1RTVERjcxQkM5N0Y0MzhERUE0NjAwQTA3RkM1MworOjEwRjg1MDAwNzdERjczOUNCQjkzMDAzQzYyRTlFRkU0QzkxNUI2NEFCRAorOjEwRjg2MDAwNDZENzc3N0E1MTBFRTg4ODgzRjZCN0YwRDkzMUM4MDdDMgorOjEwRjg3MDAwRDRGN0RBRkRBQkY3QzdGNkEzQzU4QjhGOTQ3NTAxNkE5MQorOjEwRjg4MDAwNDZFMzk3RjZCQkI0RTlCMjAxRThCMUExOTVDQThCMjg2QgorOjEwRjg5MDAwQkE2OTM4REU2NTIwOTZDMUUzMTAzMjgwQkYwNEYwOTc2NAorOjEwRjhBMDAwRTIyNTkxNzBCRDY2RTQxQkY0MUY2N0EyNzg3QjBBRkUxNworOjEwRjhCMDAwQ0E2MzY1NDJDN0JGOUJDM0E1OTE0NUEzMDI4NUMwRTc0NAorOjEwRjhDMDAwMzg0MUFDRUFDODhFRjA1NzUyRTE0NzNFN0Y4NkZFRDlGOAorOjEwRjhEMDAwRTkwNkJFMTAzODAyRjQwRUIyNzQxQkM4MTczMTc4NzZGMAorOjEwRjhFMDAwMTNENENCMjMzQ0MwOEY4NjAwOTJEMjI3Rjk2OTMyRjIyMQorOjEwRjhGMDAwREYzMzUyNjgzQkI2N0Y3MThDNUJBNkFGQ0YwMUJENTgzQQorOjEwRjkwMDAwQjA5RDJEMzU4QTNGQjUwNURFQjQ4NTY4RjlGNENFQjRENworOjEwRjkxMDAwMkFERTA2NzhGQjRCMUJBQ0YzNTQyMEFEQ0E2MDRCQ0NGRgorOjEwRjkyMDAwMzdCNDdDOTNDRTBDRTFGQjIxRkM0OUYxNEU3NDdBOTIwMgorOjEwRjkzMDAwOUQwMEVGMEUyQTc0NDE5RUE1QjU5NEI2QzREOTM3QjU4MworOjEwRjk0MDAwOURDM0QwNTIyQTAxRkZGOEJFQzVEREMzRTA0NjNDQjREQQorOjEwRjk1MDAwRkNFOTNCNjkzREIwRUZEN0U4NzQyODE3RTY3MkFDN0Y0RAorOjEwRjk2MDAwQjU3RDkxMzMxMUJGOTY2NjA3MUQxMTdFRkQ4NDIyOEZGMAorOjEwRjk3MDAwNTU3RUZEODQ5NUMxRTM3MkY5QjVGNjM5QURCMzI4MDUxRQorOjEwRjk4MDAwRTBGNzI5OTE1MjQwM0VBNTlBRUE5RTAxM0Q0M0FEN0ZBMgorOjEwRjk5MDAwMjI4MTFFNTBFQTY0RkNFOTlEODM4NTI5MjE0QkE0RkQ0OAorOjEwRjlBMDAwOUZGM0JDNjUwMEI3QUNBQTdFMEY0RkU3OUY3NTAzNzE0QworOjEwRjlCMDAwQjdEMzY1MURFM0RERjc4OTE0N0ZFRTIyNTRCRUMzQjNEMAorOjEwRjlDMDAwQ0M2NzAwM0U0ODNBRDIxMUJFODRCOEE3QzJGRTJGOTgzOQorOjEwRjlEMDAwNEVGMUE1OTQ5NTQxMUVENzdCMERFRTRFQUEzN0Q0MDk2MgorOjEwRjlFMDAwMEMzRkVBNzY3MEZFNzYwQUIyQkIxRThERERCRkY5RERGNAorOjEwRjlGMDAwQzYwODFFQzNGRjZEOEVBQUE3RTNENDBCRkU5NTIwNjczMQorOjEwRkEwMDAwODc1MTREMjlBRDgyRTJFRjczQjFERjJGMjI0MTlDNTcyMAorOjEwRkExMDAwQzM4QjE3OERGMUYwRTJCRjE1QkNGODczOUU2NzA2QUM3RgorOjEwRkEyMDAwOEY5QjY5QzJGOTJDNzk4OTQzN0RDMDYxMDhBMEZFMTNDMAorOjEwRkEzMDAwNUU0Q0U1MDc5RDJGRjkyREMzOUJGRkU0QkRCOEVFRTZCNAorOjEwRkE0MDAwNjU3MzNENzdEMTdEMzhENzVBRTdCOThCNTYyMTZCODBFNgorOjEwRkE1MDAwRkQwRTMwN0Q2RkQxRTQ0MDFGRjI0MTIyQkU3MjdCMTY1NQorOjEwRkE2MDAwRjRFNzQ1Nzg1MDE4ODlEQjEwMUUwMjhFRjdERkJGNjU3QQorOjEwRkE3MDAwRjg3NDlCQTIzNzVFQTM5Qjg5RUIwQUQ3MTNCMTg3RjI3OAorOjEwRkE4MDAwQjk4OTJGMUVDNDMyRkRENzcyRkI0NDc4QjA3RUU2QjcyOQorOjEwRkE5MDAwMTAxMUUwQkE4MEM4MDY0MjY5RUQwMUE3MTNGN0FGOUVDNgorOjEwRkFBMDAwRjQxQjE4NURGQkRCMzM2OEJCMjZBQTZGMDI1RjhCQTNEOAorOjEwRkFCMDAwM0Y3QzNGMUExRjBGNkJGMEYxRjAxNUMzQzcwOTg4NEY0OQorOjEwRkFDMDAwOUYxMTM3RTJEMzZEMUE3QzNDOUMwMDFGREIwN0YwQjExRAorOjEwRkFEMDAwMUNGMTU5NkQ0RkY1NTA2MjRFMURGQzNERTA4QjI3NkFCRAorOjEwRkFFMDAwOUYxNzZFOEUyRDkzRTdBMkNBQjk4MDE3QjQxQzg1MkY3RAorOjEwRkFGMDAwNERCQjJFMUEzRDcxRjA2NEREODBCQ0Y3MTdENThDODlBMworOjEwRkIwMDAwRTYxMzZEMzhCRjIzMEExRUFEQkI2NTdFMzZGMEU5MzVCRQorOjEwRkIxMDAwNjA3MDBDNTEzQUE4MDBGOTQ2RkZDMjdEMjM0MTEzRURGNQorOjEwRkIyMDAwM0ZFOUFBODEzMkQ2OTdBRjYwNjVGRkQ2NUY3QjM3NUMyRAorOjEwRkIzMDAwNEJDODdBQkQyRjVCQTRGMEFBRTNCRDdEM0E5MDJGRjlBNAorOjEwRkI0MDAwQkVFNzlDNjA1N0U4M0MzOTAyRUVBQkE3RDAzQjA2MzZENworOjEwRkI1MDAwOTRFMUUzNTNFMzVBOEE1QUUyQzA0RjlERkY3QTJFMTA5NAorOjEwRkI2MDAwRDQwMTlGREVDQkY0Mzc2QjU5NTgxRjJENUZERjcwMzIwNQorOjEwRkI3MDAwMzk5NEQyMUI0MjdDMERCRkNBMTFCMDJCMzY3MjZCQjNDNQorOjEwRkI4MDAwMDFDRjM2NjY0QjVDM0I1RDUzRDlBRUI2NEFDNDVGQ0EwMworOjEwRkI5MDAwRUIwQjI4REUzNUVFRkFCMDZGMjgyRDk3NERFQjA3RjQwRQorOjEwRkJBMDAwQTNFQkY2MkU3RTFCRjhFNUY4MjQ2Njk3MjRCNzZDRDVGOAorOjEwRkJCMDAwRDFGRTMyRUY3NDhENkJBN0Y4RjZBNjUzQzI3MTkyQUVFOAorOjEwRkJDMDAwRUEzQTA4RkQ4NDE3NEI2MjBGRUQyNzZCODVFQ0JDQTc2MgorOjEwRkJEMDAwMThDNjZGNjk0M0JDQUYyMUY4M0VGRDdCQ0JEQkUwQkJCMQorOjEwRkJFMDAwNDc4NjkwNTQxRUJFMjM2RDFDN0NCNzMyOURDM0ZENThDMgorOjEwRkJGMDAwMzk5N0NDN0FBNTE4QTg0ODQ0QkQ3RUQ4MkM5MTZCOUIyOAorOjEwRkMwMDAwMDBFNTk2NEFBNDE3NDlCNEZGMzIxQkE5QUMyMzg1REE1NAorOjEwRkMxMDAwMkRFQjZDMDRGOTc1QkE4RUJGQjM4NjNFRDc4RDYzRTVDNAorOjEwRkMyMDAwRDRFNTlDQTcwNzg5NzcyRENFMkZEMzQ4QTY3MUE5RUNFMAorOjEwRkMzMDAwQkRCRjE4NTk4RTY3MjdENkZCNzFCRjMzQUI1QjRBNjFENgorOjEwRkM0MDAwMUU5OTc5RUNFOTMwRjg3NEY5NzRGQzQzRUZFOUZEMkI2NworOjEwRkM1MDAwRTgzQTBGMjlGOEIyNzQ2QjU1NjZCNDVDM0I3NEM2MjQ1RAorOjEwRkM2MDAwRThBOERFN0MyODRCQjUxNzgyMTZCMDE3OTY5NjU2NjcyMworOjEwRkM3MDAwMDJGM0M4Q0Q5Rjk2MDJGQkVBQzg4OUFEM0ZBN0Y3QTQ1RgorOjEwRkM4MDAwNUMwNUYyRkIzRDlFQzBGRUZEOTdDNTkzMDJGNDc5OERBNQorOjEwRkM5MDAwODFDRDVGQkJFRjlGMjlGQkQ5N0M4MTIzRkUyOEJBNkMwNQorOjEwRkNBMDAwOUU3NTFFRURCMEU2MEI0MkNDRkIzMzBGOUEwOEE4MTBGMAorOjEwRkNCMDAwMDM3QUM1QzJERUE5RjA1RDIzRTk1RjA5NzhEODE4NDg0OAorOjEwRkNDMDAwMjZGRTI4QkFCODI2MjlGRUI4MkEzRDM0NUZFMDg5MUNGMgorOjEwRkNEMDAwNzc1QzQzRUNGQjBCNjk0NDRFOEJGNzVENDZFQzdCQkFEQgorOjEwRkNFMDAwOEU5OEYyOUVDRjA3RDYwMUVGNDk0NUM4RTZBNTc2Rjg3MworOjEwRkNGMDAwNzREMDUzNjhGOTlDNUYyN0VCQzcwMjlCNjNGQ0VCQUNBNQorOjEwRkQwMDAwMThCMjAxRkZBMkZBNDgwQkVDQ0I1OTI5ODRGQUM2Mzk4NAorOjEwRkQxMDAwQ0E5QUEwMUVFNDc4MERFQ0FGMTBCNkNEQjQ0NkM2NTExOQorOjEwRkQyMDAwRUJBMTdERjQzRTlFOUQ2NTIwNDFEQzlGMzBDRTAzRTAzQgorOjEwRkQzMDAwMjc4RjI0NjREM0ZFNEYwQzEyRTg2OUZCMEYyMkZDNTQ3QQorOjEwRkQ0MDAwN0M4OTg2QTMxQ0M1NkYzMkRBRkI4MzNBNEE1NzI1QjlGMgorOjEwRkQ1MDAwMTk2QjhCOEJFODk2RjVBQTdDMjE2QkFEODdGMjgxMEMzMQorOjEwRkQ2MDAwNUUxN0MzMjc5MkNCMDZGODA2QjJBOTc1M0E1RUUxMzM1NworOjEwRkQ3MDAwRDk2QjI3NUYxQjVENjZERjQ3REEwRkE5ODFGQUIyNjI5NAorOjEwRkQ4MDAwRDZCRTIyNzdFODdCMkI0MEY2OTIyRTlDMUY1RDQ3MEU1NQorOjEwRkQ5MDAwQzA2RkEwNkNEMjk0MkRCNDNDMjZBQTJDNkFFQTFEOUE5RQorOjEwRkRBMDAwRkEyQzRENzkxOEZCRkU4QzM1OTgwM0ZFODFFQURDMTFBNAorOjEwRkRCMDAwMzUwMkE1RDMzM0Q5QzEzOTFDMkQzRkRBRUVBQzk5NENBRAorOjEwRkRDMDAwRTlCNEIxOENFOTE3NERGQjM5Mzc0NzIyRjA2QjcyMzMzOAorOjEwRkREMDAwQkRERUUyMEUxOUVBOEEwMTBFRkQ3REMwNTcxQUY2NzBFQgorOjEwRkRFMDAwMjI0N0U5QzExMkQ4MTlDNDMyQjQ5M0EyREEwNTM4NkM5QgorOjEwRkRGMDAwRDcxMEY4MTBEQjI1RUNERkE1NDMzQUVGNzQxRDY1REY2MworOjEwRkUwMDAwMDVGRTgyN0FDQ0MzMUQ4QkJEQzBEOEZBRjQ4QzZGNTEyRAorOjEwRkUxMDAwMjlFNzE5NEExQjM2RURBOTIxM0U0Qjg0QkY5RUNERjYzQQorOjEwRkUyMDAwQkM4OUZDRjUwMDI3MDI3RDBFRTAyOUY0NkI4OUQwODVBMgorOjEwRkUzMDAwRkFGRDlGQzZFQ0ZGMURBODQ5Qzk0QjNGNjkxM0U4RjdCRgorOjEwRkU0MDAwRkZEMUY4OTdGMUEwNzdGRjQ5OTEyM0VCMzk3RjExOEMwRgorOjEwRkU1MDAwQkI4OUY4OEE0MDhFN0ZCRkIxRTBBMDhFN0U3NzQ0MUZCOQorOjEwRkU2MDAwREEwMkJDQjczREY3NkE4NERGMTE2QjY4Mzg0N0Y1OTI1OAorOjEwRkU3MDAwODc3MkFCNkEwNDBBQkYyM0U5QTEyRDAwQ0ZGRkM4QUQ4QQorOjEwRkU4MDAwNjZFNUUxQTFFMTNBNUE1RURERDNDNENBMDVBMTJENTA3MQorOjEwRkU5MDAwN0VBNTY3MzYyQjhGMDkwREU3NjlGQjNDRjkzNjg0RkY5OQorOjEwRkVBMDAwMzYzMTNFNUQyRkNCNjVGQUFDM0FCRjg3Q0EzQzRCNzMwNworOjEwRkVCMDAwNDE4RjZFNjBGMjY3Q0VERDg3NjcwM0JGOURBMzIzMjI2QgorOjEwRkVDMDAwQTE3QzdBREI5OTYzMkY2REEzRjBEOEQ2OUE0QzdBMTg2RgorOjEwRkVEMDAwM0E3QTA1NkE2RjY0MzJENEE3NzJBMjBCRjk3QUQ4Qzk0QworOjEwRkVFMDAwRjQxQkNBRUQ0MkUwRDc0QjFFNkY5MjNBOUQ5MTdENTFCMworOjEwRkVGMDAwQzdDRjFDRDVCMjEzRkFDRjlDNTM4QzcyQzRFQ0Y0MUM0MAorOjEwRkYwMDAwODFGMUQ1RTdGNDUxRUM3OTI0NTc2NEZDOUJENzc5RjA2MworOjEwRkYxMDAwRkIwN0FDN0VGODdFOEQ5OUFEOEJEMjBGRUVCMzQ1RDk0MQorOjEwRkYyMDAwOTczNUNBQkFENkU0MzIzRDYzQkE3M0NBOTFEQ0YxQTAwMAorOjEwRkYzMDAwOUYyOEY2Q0VBQTQwRkEyODNBQUY2RThFMDRDMDZFQTQ2RgorOjEwRkY0MDAwN0E4QTZDMDYzRTVDOUY4NEY2NEMzN0NDMURFQUQ3NjZGNQorOjEwRkY1MDAwRkI2NTNBQ0VFRDFDRjEwMjdGNTFGOTQ5QjdERDkzOUQ2NworOjEwRkY2MDAwMUE2NTM3NzY5N0QyQjIyNUUyMjdFOEFFRjE2NDI3MzlEMQorOjEwRkY3MDAwRTA5OUExMDMxQjRBRTU0RkRENEVENjRFOTU0Rjk5RUQxMgorOjEwRkY4MDAwNkM5Q0NDMzU0NTNEQjA5RTY0ODFBMEJDOUIzN0FCQjAyQQorOjEwRkY5MDAwQTcwREY1ODM5OTM4NkZFMkYxNjQ3M0I0QkZFM0Y1Qjk0NworOjEwRkZBMDAwM0E4MEEzQkE1RkRCQ0IzQzJGRTBCQTc4RTZGNzUwRjc5NAorOjEwRkZCMDAwNEQ4NUVGOTE1Q0U2RjdBOEUzQTk3RTQxRjFFRUYxN0M3NworOjEwRkZDMDAwMUZGNjQ3RjU4RDEyMTRFQzhBQkU3MTA0OTA3NjdDMDRGRQorOjEwRkZEMDAwQ0U0NDA4OEQ4N0Y3RkYxRkMyQUIxRkYwRTlEQkMyQUIzMQorOjEwRkZFMDAwQjE5NUYyMTFERDI1RjAxMTA1OEVFQkI5QTAzRTkzRjEyQworOjEwRkZGMDAwMTFGNDRCQzA3QjkwNDdDRjNCN0RDNzczQTNFODYxQ0UyNAorOjAyMDAwMDAyMzAwMENDCis6MTAwMDAwMDAwMzhEQTg2N0FBRjM0QUJFRkZCNTY5REYyMzQwODdBNzFGCis6MTAwMDEwMDA5MEVFRTZGQzIwMTlGRDA4NUEzRDUwQjUwMzU1N0QzNTlDCis6MTAwMDIwMDA5MTFERjhBOTQyMEY2RUQ1RUZBRENDMjNCOTM4RjREMkFCCis6MTAwMDMwMDA2MzE0NUVBOUM0MkEwMjFGM0Q2MjA4OEQ3MUQzRjY0NzdFCis6MTAwMDQwMDA3NEJFNjc1RjgzNzkwRkUxNDVDQTQzMDZGNUY3NDIxRTI4Cis6MTAwMDUwMDA4RkUzOUI1NTNDMjE2MURCMjg0NzA0NEY1NjUzM0MzMUNECis6MTAwMDYwMDA0MUZCMUEwM0RBMjVERDc2RkZDNkY5ODAyN0I3MEM3MzRBCis6MTAwMDcwMDBDQjEyQ0E2MUE0NjdCOTM1MTlFQkFGRDExRDI1RTBDNzEyCis6MTAwMDgwMDAwRjRGMTA0NUQwMzMyOTVFNjE3REY3RUM0MkJGQ0NGQ0E5Cis6MTAwMDkwMDAzMUIyMTlGREQzNDlGRTFFQzBCQjUyMEEwMEU4NkZGNjBCCis6MTAwMEEwMDAyOEFDMDc3RjA4RkE5MTY2OUJEODc4ODNGMThBRjkyREVFCis6MTAwMEIwMDA0NjEyNTZFRjU0RjBCNjNFMTdGMTM2QTM5RDMwM0Y5MEVFCis6MTAwMEMwMDBFMDI5QTk4OUQyMTdCRTlGQzdGMDIyQjkyQ0Y0RUExRkY0Cis6MTAwMEQwMDA0MEZGN0NENEVDMkUyMENDNjQwNUZGMTJFOUNBQzRGRTlDCis6MTAwMEUwMDAyOEJFOENDODFCQ0ZFNDM4RjQ3QkQ3RTNENkFEOENFRkE5Cis6MTAwMEYwMDBCOUNCMDFDRTBGNUJCQkM4MzJGNDBGRUE3MUZFOUJDRENBCis6MTAwMTAwMDA0MUQ0QzM3NTI2QzkwRTdFRjgzOTNDNTk1RjA4RkRCNTQ4Cis6MTAwMTEwMDBFQjQ1QzAxMzJEQkMyQkYzMTJGOTFGNDJGNzQ2RkI4QkE2Cis6MTAwMTIwMDBFNzE4NjU2MzBFRDQzRjY4NDZCQjQwQjVGQkU2QTQzMEQ0Cis6MTAwMTMwMDBCQTUyRUQzRUQ1Q0ZBMTFENDdCNUZCRUVENEQ4NzMwMzFGCis6MTAwMTQwMDBGNTlEN0YyREE4QTVGREZENTlDMTMzNzdFRjg1ODJCOUI3Cis6MTAwMTUwMDAxNkI2NkVGMDNGRDVDMjVGNzREQ0RBRTVFNjBGQzFDRkFDCis6MTAwMTYwMDA1QzJCRUI4MzQ2MUJGMDkxMjk5RTUwOTQ5RDQ2MzZCMDQ0Cis6MTAwMTcwMDA3NUY4N0VBNUY3MDM5QzVBMDVCMjdFM0JFQzhGQ0NENjcyCis6MTAwMTgwMDA0RkVERDhGQUU4NzU2RDMyQjA3NUM5M0ZCMEM2QUM2QkFCCis6MTAwMTkwMDA5MzhEQzU5MUJFRkRCQTNFMUExRkJCQUU5M0UzOTU3NTE0Cis6MTAwMUEwMDAxMTUzMDY2REE3QzhCOTNCNUJBRDFGNzIyNUY0MDlFQjZGCis6MTAwMUIwMDBBMjRGQjI5Q0FFQ0IxNTU5RDdCMjNDQzY0RkU3Mjg3Q0I0Cis6MTAwMUMwMDA2QzkwRENDRDYzN0E3QzFDQkJGREZGQzY3QUJCOUVGMkQzCis6MTAwMUQwMDBDNDVCQUY3NjlEN0ZDRUYzRkMyMDJGMURFOTI2Mjg5NkM5Cis6MTAwMUUwMDA0NUYwREFCNzkxQUVBQjBDRjYzNUREREY4NkZCQ0FGMDMxCis6MTAwMUYwMDA5MzEwOUIxQkY4RDg5Mjc5NzQ1REYwNkNDQjQ0N0ZFMTJGCis6MTAwMjAwMDAxQ0EzQjQwN0ZDRTZFNDQ3MjlDQTNBMDlGMjgxMjUxQjdFCis6MTAwMjEwMDA4NzIzNUQ1MkJDNjU3NEZCMTRGM0JGMkMzMTdCRDE3RjA3Cis6MTAwMjIwMDBCMzY0QjFFODk2NDU1OEZGMkI2ODA3ODcyOTdGNDVCRDIxCis6MTAwMjMwMDBBNDM1OTZBRjdGM0QxQ0NDMzlCNUM1RDE3MDMwRTVDQzI3Cis6MTAwMjQwMDAyRDhFQjNFRkIyMTFGMTM5RDFCRUZGOTkwRkRGQ0JFNTlGCis6MTAwMjUwMDAyNUY2OTc5MEU1QjE3RTBBRjBFNzBFOTRGOUMxNjVBREY5Cis6MTAwMjYwMDBERjgzOTBCRjE5NjNCRjk3MTNFMDUxRThGQkQxNzg3NDI3Cis6MTAwMjcwMDA0NEFGRTBEMTMyMzNDQTFGMTU4RjhFNTgxNUJGOTAwNjk4Cis6MTAwMjgwMDA4RjA4RDVBMjgxOEVENTc1NkJFMTM4MDdFMDE4QzcyRjhFCis6MTAwMjkwMDA0NEYxQTkwMEUwNzg0NEIxQ0YyODNFMTUwMDFDNTUzQTNFCis6MTAwMkEwMDBCOEIzOTVGMTAzMkREQ0ZFOTQ5OEFGN0RCQjc1NjhGMDczCis6MTAwMkIwMDBGOERCQUU0M0FENEZCNDBFNTVCRkREQzAyRERFMDhGODAwCis6MTAwMkMwMDBCOTIxOUI4OEVEQTgwNzg3QzY4MDlERTQzMEY4OEI2MDM0Cis6MTAwMkQwMDA1RTlCMEM5NDdFOTFBRjMwM0ZFMTY3ODc2MkZEQ0VEQTgyCis6MTAwMkUwMDBGOTVDQjg2NDdFQzFGQTREQzQyNzEyRTFFNUU1RkFGOTdDCis6MTAwMkYwMDA2QTM1NzAzQkFBQzA2OTEwQkVFNzMzQjlBOUY1RjMzNTdBCis6MTAwMzAwMDBEQkMyNEY4M0RFRDQ5Q0M0RTRGN0Q5MDM1NkE0NzM5MkI2Cis6MTAwMzEwMDAxRjlBMDNGNkMyQjk3RDQ2MDJGMkEwODkwQjE1QzI3Nzc3Cis6MTAwMzIwMDA2NzM5Q0Y1Q0ZDQUUyRDU5MDIzOUFFRkE3MzhGRUQ2NjlBCis6MTAwMzMwMDBGRTVDOTk1MDdCOUQ5NjFCN0NDQzFGREQyQ0ZGNzIyNUFCCis6MTAwMzQwMDBDMEU1NjI5RUQwMDJGNjcyRjM5RTU4N0YyMEREMEYxQjNGCis6MTAwMzUwMDBFQ0NGNTkxREU5ODdFRjlCNzg3RjNEOThEOEVCMEQ0QzhBCis6MTAwMzYwMDA3RjU5QUYyMzAxODA2N0M0OEY3MEI0MTBFRDlBNkM5MUYwCis6MTAwMzcwMDA4MEZGQUE0OUY3NjFFMTNENTE3RTg3MjZBNUJFMjk4NzA2Cis6MTAwMzgwMDBGOUQzMjAzRjAxRTMyRTMwOTQ3MzMwNUM5QTFFM0RGRDdCCis6MTAwMzkwMDAyNUM0NTc5Qjc2NjlFOTNCOTZGRTFCMjI2NUVFMjIwNzMyCis6MTAwM0EwMDBGRDQ1RDUzQjIzRjQ4RkZFMDNDMDhCQzlDNDVGQzA4MURDCis6MTAwM0IwMDAxRjkwOTU5M0E3RjVGQjIxQ0ZBMTU5RjEzRkE3Rjc4NjkxCis6MTAwM0MwMDBBNjgyN0U2MzJEMEIxMEUwRkJDRDI3OTlERDM0NzFGRkYzCis6MTAwM0QwMDBENjM3QzEzRjY4OUZENjNGMUM1NEE4NjYyNTFFQTVCNUQ5Cis6MTAwM0UwMDBENzI2RUM1RkNCODMzRjRCQjVCN0EyRkM2NzQ1MzM2M0ExCis6MTAwM0YwMDBGQ0E3MkJCMDFERjhFMzYwQkMxMEJDODJCODgxQzBGNDMwCis6MTAwNDAwMDBGMkY1OEE1RTRFRjU3N0U0RjNGM0JBNDZBMkZFMEVGQUYxCis6MTAwNDEwMDAzNUU4NDlBQTNGMEZGNDI2RDA5Rjc3RTc1N0NEQzhBNzA0Cis6MTAwNDIwMDBFQjlDNUQ1MDc1N0RGRTc4MzYxRUZBMjlDMDQ5MzQyMTVCCis6MTAwNDMwMDAzMURFQUFGMDUxQkYwM0JGREU1N0M3ODUxNEZEOEZCMDcwCis6MTAwNDQwMDA3OEQwM0RCRjQ4RkY0QUJBNUM5NDlGMzA3RTdGN0JCNDMyCis6MTAwNDUwMDBGRjdEOUZDNkZGQkVFRkNBQzU4MzMyODFBRUVFRTFBNDI5Cis6MTAwNDYwMDA0Q0EwQUI4OTFBRjlCNjJGODExREIwMjQ3RjIwMUU5NEIxCis6MTAwNDcwMDAwOTc0QURCNjNGQzFGQjMwRkVBMUM2MURFQTIxQ0U4Mjk0Cis6MTAwNDgwMDA3MjI2ODg3MTg5QkI1Qjg4QkIxM0YzNDA3QzJCQTFEQzhGCis6MTAwNDkwMDBCODkwODg5RDE0REYxQjI2RkI1OEZDQTM4NTg4Mzc0RTM3Cis6MTAwNEEwMDA2MDcxNTYyOThBREUyMDhFMTk1RDI2M0I2ODM5NDYwRTFBCis6MTAwNEIwMDBGNjYzMUNBNDg5RjZCMEM5MEQ3RTlBRDhFRjlCODlCRjVDCis6MTAwNEMwMDA1QTAwM0NERTczRDExOEQzNEYzN0RCRDczQjE1RkNERTI3Cis6MTAwNEQwMDA2ODY2RjE4Mzg5Q0JCN0YyMjRDQThGOTMzMkNFRTM3QzZFCis6MTAwNEUwMDAwOEU4RjcxNzdBRjQ1RkZGQTc4MjhGMkEzQ0ZFOUM1NzMzCis6MTAwNEYwMDA3NTEzRTA1NTEyRjhENUUwQkI4NzhDQThDNzFDRDc5MUJGCis6MTAwNTAwMDA4NTgwREY2QkVDRTRDRTk5RjQ3OUY2NDFFMkM5RDcwMzNDCis6MTAwNTEwMDAxRThCMzlEMUZFNDRGNUQ5QjlDRkJDMTBFOEUyMTk4NTVDCis6MTAwNTIwMDBFRkE5RUYyQkEwNTFCQTEyMEY0MEZEM0YxOUYzNDcyODU2Cis6MTAwNTMwMDBGQjJGMDFCQTI5Q0Y1NUVEMEU1MjAyNzE4ODBGMTU3RTlGCis6MTAwNTQwMDBEQTc0QUJDNTA3RkQ4NTc0OENBRkJGOThDRkU0QzA4QjYwCis6MTAwNTUwMDBGOTA2REMzRkI1M0NFMDhGNTNFODgyOEU4M0ZEMjU1REQ0Cis6MTAwNTYwMDA0NTYyRTJENzNGNTNGMDU1RjU4NzEzMjU0RUI3QkUzRTlGCis6MTAwNTcwMDA4OUQ5MjkwM0Y0QTk0M0ZFOUI1Q0VDMzVGODkwRkY1NTFCCis6MTAwNTgwMDAyMUZGMEQ3RjY0OTEwMDJFRDM0RTM3RDRDMzNBM0U5RDk4Cis6MTAwNTkwMDA5NTQ0MjBERkU2MkUyNTRFRkE2RUJFMURGQjU1RTM4QkZCCis6MTAwNUEwMDBGRjQwQkE4ODg5OTM1RTJBNURGQzNFNDIxNzMxNzE1MjQyCis6MTAwNUIwMDAwQUQ3NjQ5MDBCRkI3NENDQUVERDQ3MTEwQkZEODIwMUIyCis6MTAwNUMwMDAyNUVFMkUxMDBGQzhBRDdEQkI0NkEyMUQzMzU3RjE1NzQ3Cis6MTAwNUQwMDA1M0JFODFGNjZCOThDQTM3QjZERkJFOERGM0UwQkI0MEUxCis6MTAwNUUwMDAwMUU2MjM3Q0E4RjczRkJGMURGNDk5MDNDQzRFNTNGN0Q3Cis6MTAwNUYwMDA2M0RGQkVBMTdFRTAzQjEzNEY3RjkxMDNGMERGNzdGMjE0Cis6MTAwNjAwMDA4NUExOTBFN0IxNEY4OUFCMzcxODgyODVFODRGMzEzMDJCCis6MTAwNjEwMDBGOURFNjAwQjE2MDJGQzVFNTdGMEE2MjE4OTk2RTlGQjE1Cis6MTAwNjIwMDBCQzc0NUYxOEYwNUFDRDhCODE3Njc2NUM4RjY0MDM3RjQzCis6MTAwNjMwMDBDRTMxQzU0RTNGNEFFRDc2OTgxN0E1OTY3RTg4RjdEMzAyCis6MTAwNjQwMDBGRENFODY3Mjc4NzUyNkQzQTdFOUJDMDAyRjhFMUQxOEMzCis6MTAwNjUwMDA4M0VCNUJBRjY3NzgyQ0VGRTVEMEZGNzM1NDFGM0VEMTdGCis6MTAwNjYwMDA0QUJGM0Y5QTdEMTU2OTEzNDEzRTVGRDhERTA3RkQzRkMzCis6MTAwNjcwMDBDRDEzQTMwODc5NDc5RjlGREY0M0JGM0YzNzg0MTdDMTNFCis6MTAwNjgwMDAyRjU5QTdGMzRFQ0QwNjdFQjE5QkY5NDNCNEZCMDBGMjgwCis6MTAwNjkwMDAzQTNBQUU3Qjk2ODQ3M0QwNkZCQTMwMzcwMEY4NzM3NkVGCis6MTAwNkEwMDA3RjExRTZEMzExODc0ODY0NUE2RURFQ0JFQzQ3NkQ3RTJFCis6MTAwNkIwMDBDNDcxN0QyQ0ZFNkJGQjg1NzU4MUZGQjIxOUZFMDY3RDMyCis6MTAwNkMwMDAyNEJBN0Q5Q0ZFQkVBRTdDNTYxRjJBNUM0NkUxMzE0NUI1Cis6MTAwNkQwMDBGMjQ5MDU1MTdFODBFNjM3QjI1MThFMUM3QkVDNzNEQzBCCis6MTAwNkUwMDA0RkQyQzVFMkU4QzdGNTlFMzkzMDNGRkJFNEEwQTEzNjAyCis6MTAwNkYwMDAwQTFGQUYyRTUwRkM1MDQ2QTY1RjUwRkU2Qjg4RTYzN0FGCis6MTAwNzAwMDA2QTdENzkxNTg5OUI5RjUyNUVDMEU4RENEQUNGRTRGNEZDCis6MTAwNzEwMDBFMDdBODZFN0Y3OTI2Nzc5RTAxNzU3NDMzMjBGRUQ2RjdCCis6MTAwNzIwMDA4NDkyNjc3MzJGRjlFQ0EwMTFGNEE5NDAyOUU2RjE4Q0FCCis6MTAwNzMwMDA1ODFFNDQzRTQwRTc4QkY4Nzk3QzYzMEFGMjQ3RjIyODYyCis6MTAwNzQwMDBDM0Q3RjkzRjMyMjJGRjk4NEZFNTA3RjM2N0IwQkM0MkE5Cis6MTAwNzUwMDBGMjI4Q0IxRjNBRjE5MDEzRjFCOTdDNDVCMDFDRTlDMUU2Cis6MTAwNzYwMDA0RURDQTA0N0JERDZGMUExQ0NEM0ZBQjkzQkI4NTJDOEY0Cis6MTAwNzcwMDA5QjlDREJFMTQ0M0JGMEVFNUQ0RURDREY4OTBBNUZBRjIyCis6MTAwNzgwMDAzMzdBMzA0RjkyM0NDM0UyOUM3NzNENTE4RkUzMzQyNjVECis6MTAwNzkwMDAxMzNCOEZGQUI1REYwMDdBQzRDMjFEMUNDNkMzMjcwNkZGCis6MTAwN0EwMDAxOEZGNkYxMDgyMDc0MTRGRDdFNkZEMTA3RjZDQkUwMTI2Cis6MTAwN0IwMDBDODIzMTJBNUM3ODNGQzIxMUFCQjJCNzZERkU1NEJEMkQ5Cis6MTAwN0MwMDAxN0I0NzI2NjcxNDE0MjdERTFFRkE0Qzc3RjMzN0Q2MTRBCis6MTAwN0QwMDA1OTgxQUFDN0M3RUEwQjYwRkYxNzMwM0M2NDcyNkQyN0M2Cis6MTAwN0UwMDBDN0Y4OUNBMjJGMzQ4MkJFMDBCQUIwMjJBNzU1MzlCRkU5Cis6MTAwN0YwMDA0MDkxRjMyNzc4QTY2N0NDMzdBRUM1RTc5QTAyOTZFNzEzCis6MTAwODAwMDA3MDM3MDkyOTc5MEU2MTAzRTg3Rjg5RjA3ODhEMzIyRkRFCis6MTAwODEwMDAxNThGQkIwMDhGQzc0N0YwQjhFMTY0QjBDRjg4N0UwNzYzCis6MTAwODIwMDBGNzZFQzhEMzY4NTg0RTgyNTY2QUI3Q0YxNzVBNTA5RTkzCis6MTAwODMwMDAwRDExODk4OEY5QUZENTNFOUM1N0U2MTI2QUFGNTFCQ0JECis6MTAwODQwMDA5QzBGQjFGQzcxOTdBRkM3MENEMjVCMzRGQThBM0E2RjM4Cis6MTAwODUwMDAxNUFGQjVGQUY1QzRFNTdFMUVFMjhCQkU5MTA0REZBQkExCis6MTAwODYwMDA0RjkxMDQ0QTYxQkUzNTI2NjZERkQ0OTgyQzQxMUVGQ0E4Cis6MTAwODcwMDAwRjkzRjU2N0EyRURDRjFBQzFGMzIyRTMzQkMzRUMyNzM4Cis6MTAwODgwMDA0NjIzNEIyM0QwRUY3NEE3RTczN0EzRDIyMzdBN0I3MjlBCis6MTAwODkwMDA1OTc4RTU2M0I0M0YzRDI5RDEwMTVGNTdDNzM3M0IyQkZBCis6MTAwOEEwMDAzRjI5ODYzOEFGRDA4RkY2MkJDOTYyRjkyQzQ3OEExOUI5Cis6MTAwOEIwMDA1QzkzRTkzRTZDQTU3MEQ1MEIzMkMyNEY2RjEyRUQ2REEzCis6MTAwOEMwMDA3NkQ4RkY3RThDRDM4NUQzMDlGQTZERDVGRERBNjIyNTAzCis6MTAwOEQwMDAzMkU0MTUxRjI5NjY3ODdGQTQ1OEM0Mjc2RDhGRjkwMDZDCis6MTAwOEUwMDA3QTE3NkQ0RkZCQUZEQTY3NDYzRTcyN0VBRkQ1MEZGQUNGCis6MTAwOEYwMDAwNDk1OTMyM0VDQjQzRUUzNEZENDBFQTRFNUIzRkJBQ0Q0Cis6MTAwOTAwMDBBODU3OUQ1NUU0OUI0M0Y1REY5Mzk1QjhGRkVGMkE3OEYwCis6MTAwOTEwMDAyMzkzQUFBMTYwRUYxMUVFODZBMTc0RUU0NEI1NDMxQUE5Cis6MTAwOTIwMDBFRDg5RTJEQTRBQkRCM0ZGNTY4NkJGNDZENDZGQ0VEQjBGCis6MTAwOTMwMDA0M0Y3NDE5OUNFMDc3M0UwRkExNEJDNkFERTU1NURGQUJECis6MTAwOTQwMDAwMEM4MUJBRkM1Q0RBMEVFMkIwNTdEQ0RDODJGQkRENUYyCis6MTAwOTUwMDA0NDgxM0Q5NTVGMUU1RTA2NzgzRkRDMjIxQTY5OTNDOThCCis6MTAwOTYwMDAyMzNFRjhGRDZDNUFGRTY4OTc5RTE4MDE3RkI2REQ5NDExCis6MTAwOTcwMDAxMjg0NjY4MjI3Q0IzQjY2RjA3Q0VBRkRGQUEzQTEyOEFECis6MTAwOTgwMDBCRUIzNjg0NzZDQjkzMTEwNUI2RTI2QzJEMTUwOTRCQ0JGCis6MTAwOTkwMDA2QUZEQTBGRUQ3NkY0NUUxREJCOTAyQUIwM0YwODA0OEVBCis6MTAwOUEwMDBDNDdEOTFEMkQzRjEwN0Y3OTA2MzIwQkJGOTNCNTI4MDBECis6MTAwOUIwMDA5RkRGNDVEOTU2M0M3QUZGRkNDMTg1QkY3RThCN0UyN0UxCis6MTAwOUMwMDAxOEFBM0UyRjQwRkQ1MjMyMDA3REQ1NTIzRDI3OUU5REY0Cis6MTAwOUQwMDBCRjRERTE2QjQ2NjNDQkM5QUQxNDNFQzZENzhERUUzNjM1Cis6MTAwOUUwMDBEQUFBQjdDMDQ3MEFEM0MxM0UwRUY3QzFCRTFBNDc5QzY4Cis6MTAwOUYwMDAyOTgxRjg0NkQ1ODgyRjMwQkZFNEZDQkYxMDM3QzBFOTA1Cis6MTAwQTAwMDBCQ0I5MTJGMUU5RkM0NkIzMDQ3RTgwRUUxQzBCRjNDQkJCCis6MTAwQTEwMDBCRkMxRjkzOTY2MTdDRTE4NEZFREU5ODUzODE1RTBCQjJGCis6MTAwQTIwMDBFMTk1MUI0MUFFNEMzMDhBMkI0NDVDQUU0OTg3RkI0REFGCis6MTAwQTMwMDBBRDYzRkFFQzM2QzgyQkMxQ0ZERTREMERGNDM2MzdEODk2Cis6MTAwQTQwMDBEMUZEMzYyMDg2QTk4NTEyQ0I5RkUwNUYzNDk4RTg5RkMwCis6MTAwQTUwMDBDRTBFNEY1MTFCRkQ2RTkxMzc4OTQwREVBQ0YwQTVFMDA0Cis6MTAwQTYwMDAwNTNDN0IxOEJBOEFCMjJCODcxNTMyM0VEMzY4MEExOTI3Cis6MTAwQTcwMDAyQUU5NzdDRDVGMkM5RDk2QUU4QkM0N0Q4QzdBOUY2N0RCCis6MTAwQTgwMDAyODlEQjc3RTRGNjk3MDI4N0RCNUEwQjUxQUVENjcyQUZECis6MTAwQTkwMDAxRjE4NUYzQ0MwRjhFMjgyNjU5NUY4OUU5QjM5MERENzIwCis6MTAwQUEwMDA3QjgyQUUxN0UwRjJFNjQ2MjNBRUY3QzQ3MDBCRkEzMzUyCis6MTAwQUIwMDA0RTZDRTFCMEJDNDAzNDYwREUyREQ1QTdEMjJBMURGMENCCis6MTAwQUMwMDA1RTJGMUFDOTYwNzgzNDZGNzg3OEU1NDY1QUZGNkUzNjIzCis6MTAwQUQwMDA0RjM4OEFGRjdGRDlGQzczOEM0RkZEODVCMEYxRTU1REZGCis6MTAwQUUwMDAzQ0VBNjk3RjExQzNFNTQxODBBN0Q0NjI4QkI2RDcxNzcyCis6MTAwQUYwMDA2Q0UxQkRDMDJGMTc2Q0I5RjdERDA5MDBCNzk5Qjc5NTQ4Cis6MTAwQjAwMDAwMTNDMjZEOTk3NjY0ODk2NDhCREFBOUYwQUE5MTVEQkRECis6MTAwQjEwMDA4MTJFMjc3RDU5REQzRjA5RjRDNDJEOTQ2RUU4QkMwNTc0Cis6MTAwQjIwMDAxREYxODFCREY0RDY5NkVGQTI3REIwQTAyNkM5MEVFQkQzCis6MTAwQjMwMDA5MzM2NkY5QjBBRjJGODJGMzU0Mzc0QjhBRTk3MzgyMjdDCis6MTAwQjQwMDAwMjNDRUNBRDE5RjA3RTAxMjc3OEUzRTFENUUxMDIxRTBECis6MTAwQjUwMDBGMUFBNzI4NEM1MERGMjcxQzFFRjc4QzQxNzRBNjdCNzY0Cis6MTAwQjYwMDA0MjVDQTk3MThCMUVFRDhGQjc2NjFFRkVGRDZDNDc4NDNCCis6MTAwQjcwMDBDRUI4OTkxQjY2NEM4NEVGN0ZBQ0M3RUYwN0Y0QkZDREFFCis6MTAwQjgwMDAxRjdGMDA3RTE3Rjg0NzM1MTE5MDQzMDgzRjJEREQxOTcwCis6MTAwQjkwMDA0NzJDMkY4NDc5NjlFOTZGQzE4QTk2NDI5NkVGNzE3OTYzCis6MTAwQkEwMDA3NDQ4MzYzMzNBRjQxNTcyQzhBN0JGMDExRDJFMkNCQzA5Cis6MTAwQkIwMDAwQzNBMjRDMzUyNjNGNDhFQzE3QzRGNDZCQzU1RTNFNTI2Cis6MTAwQkMwMDAyNjM3RjE2Q0IzNjA3RTk0ODdBM0ZDN0E2REExODBGNTIzCis6MTAwQkQwMDA2QjBCOTk5RDI5RkNGNTlFMURCRkEyNzA0QTJCRjRGRDVECis6MTAwQkUwMDBBMDEwRTQyQkYxOTQ4MjdDOTZDMjYyMTVCOEU2MkQ4QTlGCis6MTAwQkYwMDA5RTRCMzZCM0YzMTg2MDBGQzFGRUFGNEYyN0RCM0JBMzBDCis6MTAwQzAwMDBGQzVGOEY0MTdGRTlDODE3REFBMTlGQjM3RkZDQTIwRjc5Cis6MTAwQzEwMDBGNkFCMjlFNzRDMDlEODAxQ0QxN0ZFMEJGMzZDMkNGQjgyCis6MTAwQzIwMDA1OTdFOTZDNTFEQzZCQzM1QkRDMzhCRjhBOEYyRkQ2NkJFCis6MTAwQzMwMDAzNzkzNDNEQTc1NUQyOEQ0MzMzRUVEMDg2MzNGNjM1QzM4Cis6MTAwQzQwMDA4QzNFRDVGOEY0QTZENjI0OEMxMzZFNzJGOENEQ0M4RkRBCis6MTAwQzUwMDA0NUY1NTNEQUZGRjQzMjFFRjk4Q0E5QUM5RDgwMUMyM0I0Cis6MTAwQzYwMDAxNTNDQzZGNzI2N0RGMTZCMDJGMUQwNzdBRkFENzY4M0U4Cis6MTAwQzcwMDAxRTZDMjk3QjUzNDg4Mzc1NTZFODk1RkE5RkFFQ0FBNTJBCis6MTAwQzgwMDBGNUJGQkU3NjBBREE3M0Y3NjRGMTEyRTg1M0QzQ0JGMkZDCis6MTAwQzkwMDA2NDk0OUYxRTk2MjczRkU5OEIxNEE0QzMxOUY1MzM1MDIzCis6MTAwQ0EwMDAwRjU2RTdFQjI1MjZDOTQyRjE2NDI2MjVENkU4RjMwNDYyCis6MTAwQ0IwMDAzM0FFMzU0Qjk2MjhGQ0ZBQjQ4QjlCQzZFQzAwMjlFNTg1Cis6MTAwQ0MwMDBFNjMxQ0NFRjE2Mjg2NkYyM0MxQTBFRjc2NDE5NzBGQzc4Cis6MTAwQ0QwMDBEOTA1OTUyRjAxQkU0Q0JBOEVFREMzQTk5NzhDRkUxNTkwCis6MTAwQ0UwMDA3NERDNTNFNkY4RkFEREZFNDJFNjQ3QzgxNUFFNDdCRUFGCis6MTAwQ0YwMDBCNEY0MjUyM0U2NkI5Q0U2RTI3RjdGRjcyQTFFRjNDQzUzCis6MTAwRDAwMDBFQTU3NzFDNDRGQzczQkY1RkM2QjM5QzBENzNGREFGNkUxCis6MTAwRDEwMDA1QTRFNkRENDdDMTJCNUZGNjM2MTIyN0Y3NkYwQUU2OEM3Cis6MTAwRDIwMDBGRkMwNzQwMzhCMTM5MTcxQzYxODdGRkY3NDlCNzIxRUYyCis6MTAwRDMwMDBFNjEyRTM1RkZGOTQzMEVFRjM4QjYxMzBERjVGMERDNEFBCis6MTAwRDQwMDA3RERFMTkxNjFERkYxQTg4NjNCQTU5REM0NzFCQkZDQzFDCis6MTAwRDUwMDBBRkY4Mzc2NUJFRUNGQzQxQUJBMENDRDc2RDY0NzFBQzhECis6MTAwRDYwMDA3OTJDNEY2MkM5ODEzNEM0QkJFOTg2RjBFMzE4REY3QzdCCis6MTAwRDcwMDA4MzE3OTUzODk3Qzc4NEVEQjM1ODdEODI3NTExOEYyN0Y3Cis6MTAwRDgwMDBERjUxOEVGRTMxOUMwRkI3ODcwQjVBNkRERjYyN0Q4NDc5Cis6MTAwRDkwMDBDNUI1QjRFQkFCRERDRkM3OEREMzM2QkI1ODVFNDg3MjVCCis6MTAwREEwMDA3MTE4RURDMEEzRUYzQzBCOTkxODAzRjg2RURFRUZENDc5Cis6MTAwREIwMDA0NTlGNUIxOUQwNjcxNUZDQkUwOUYwOUJBRUNGQkM4QTdFCis6MTAwREMwMDA5NTEzRTE3NTIyN0VGNUE4MjJCNzU1RkMzRUJBMkEyRjZECis6MTAwREQwMDAwNUYwRUQyMTUzNTNBODhGQzJDRkMzQTcxMEYzMTA1QUNCCis6MTAwREUwMDA1NkYyNDFFNDBGQUNDODg3NzgwNTJFNDQ5MTgzNUIzRUYwCis6MTAwREYwMDBCMEEyN0RENkFFNkY3OTA2Q0VEOUM5NkQwMkQ5NDZERkQ1Cis6MTAwRTAwMDAzQjkyOUFGQzZEQjQyQ0U5QUQ5ODQ3Nzc3RkQyOENBREJDCis6MTAwRTEwMDA2MDg3ODZBODgyQ0JEMUYyRTc0OTQ3QjY4MjlFNDA0Q0Q0Cis6MTAwRTIwMDAyOTQ0NEZDNzkxQUI5NEY2MDY5M0Q4NEVGNThCQTc5MjAxCis6MTAwRTMwMDA2REM4NUY1QUVGMjIyOEJGMzM0OTkwRTMyODQwREMyMzc2Cis6MTAwRTQwMDA3Mzk5MUY3Q0QxNkUwRUYzRTcyOUM1ODNERUU3Q0U4QjQ1Cis6MTAwRTUwMDBBRjhGMTY4QzY0RkNGQjhGOTA1MDQ1RDdFQkFFOEVGRkE2Cis6MTAwRTYwMDA5RDdCQTRFQUY3MTM3Q0ExMjhCQkY0NjFDRTJEMjlGOTYwCis6MTAwRTcwMDBFNDA0RjI2NUY1QTQ3RjM2RjI2NUFBQzdGRjlBQ0E4MzM3Cis6MTAwRTgwMDBBMUZDMkJFOEZGM0VGNkEwRUY5OTc4RTc5MkQ0RTc1RDRFCis6MTAwRTkwMDBENUYxRkQwQTEzOTQ3MTVENUQ5QzVGNkY0M0ZBRDU2RENBCis6MTAwRUEwMDA4REExNUYyNUFFNkJDRDcwNTMwOTAzRjE3QzE2QjdDREQ0Cis6MTAwRUIwMDAyN0VBRjk5NDBEMTAxNzE5NTJDMUU2NjhGMzg0MDhFODdGCis6MTAwRUMwMDAxNzU5NURENzEzNUYxQUQwRDNDNDRDOTA2RjRCRTZDNTRBCis6MTAwRUQwMDBEQUI5NTlCNUFCQjJEMTBGNTk3QkRGMEM5MERGMUJGNEY3Cis6MTAwRUUwMDA5NjU1NUMwQTNDNjNGRDg3MUIzNEZFQzNBRkUzMEI1OTg4Cis6MTAwRUYwMDAwOUU5NjY0MjE2Rjg2MzM2NDRFMkMxODgzRkVENzM0NTVFCis6MTAwRjAwMDAzRkNGRTEyQTQ4NzQ5RTQzNDZCQkQ0RTcwMzNEQThEMkI1Cis6MTAwRjEwMDBFNEVFNzEwRkE2MUY1MkUxQ0U4Mjc1QkRBOEVFOUI0MjkyCis6MTAwRjIwMDBDRkNEMEE2QTcyRkIzOUI0NEIwN0YzNDMwNTlFOERDM0RDCis6MTAwRjMwMDAxMDlFRTZBRUZCRDE2RTRBMkU2NTdFRjdFNEZBNUExRjhDCis6MTAwRjQwMDBGMDlGNjRDQTdGQzA4RTMzMTg1QTM4RENGRjg5Q0M2RTlDCis6MTAwRjUwMDA1QkMyQjFGMjkyNEE1MTk0RTlGNzA2OUI5MjNGN0QwMzNFCis6MTAwRjYwMDBBREI3MDM5QzdDQkU2OEJGQzMzNUJBN0IyQUEzRjNCNDdDCis6MTAwRjcwMDA0NTQyREIwMzFGOUVDNUM2OUI2RTVBQ0VGMkM0N0Q1NDBDCis6MTAwRjgwMDA0N0NBOEVDMEIxNEE4MTYzN0U0NTEyM0I2NzcxQUYwOTgzCis6MTAwRjkwMDBGRDcxOUJDRDVEMzg1RjlEQzRFQ0VDREE0RTMzRjJCQjQ2Cis6MTAwRkEwMDBBMUJDMEJFMzUyQkQ3QTg2MUZCMkQ1ODRGNEVBRUU3RDc0Cis6MTAwRkIwMDAxRkYzMDU4NzVFOUQyNUYxQ0UyOEZDNTlDQUVBNTVCQzcyCis6MTAwRkMwMDAyMDlBM0MxMzgzNDFFQTAzN0YyMzlEODgxQkYyOTQ5NjY5Cis6MTAwRkQwMDA3MDUyNUYxNUFFNEIwQ0NCNkU1OEI3QzI5NzRCOTI5OEMwCis6MTAwRkUwMDAxQ0ExRTY2NjE2ODMyQjhCM0I2QUY2OEJFMjBEOEIwMzA2Cis6MTAwRkYwMDA4Q0IxMzAzRjE3RjE0OUE4Nzc2OUQ2M0IxODZGRjZCQTI0Cis6MTAxMDAwMDA4MERGRjYwRUUwQ0QxRTU3M0M3RUJCQzYyRUY1RjU0NEM0Cis6MTAxMDEwMDBFMzBCOTE1NjgyMUZGODExMUQwOTc3QzZDMzFGNzdBQ0U5Cis6MTAxMDIwMDA5REFGQ0Q5QkQ0REFGQjREQURENTVFQzVGRTkwNERCOERFCis6MTAxMDMwMDA5RjA2QjQzRjlBOTY1NTdBOTlGREUxNkEwMzdGNTlGMzZBCis6MTAxMDQwMDA3MjJBQTk2ODlCRUFGRDlDMDlGQTZCOUU2NTQzRkJCQjZCCis6MTAxMDUwMDA3OUNGNEVDQ0E3Njg5QTQ2REMzMDhENUFDNTlGQURBRThECis6MTAxMDYwMDBGM0E4OUVDNTQ5QTlDQzBBNDAzRTQ3QjczREY0MzQ5QzNECis6MTAxMDcwMDA4M0VEQUU1N0YzQkE1ODlFOTNCQzg3NTNGMkJBRDQzQzczCis6MTAxMDgwMDBDMEYwMTFGMEQ3NzY3MzEyRkE2RDA3Q0VEM0QyRkQ2Nzk4Cis6MTAxMDkwMDBGOTVDOTc5NzE3NjgyREY2M0FDMTEyRkY2OUMxN0ZGQzdBCis6MTAxMEEwMDAyNjI5RkQzMkYyQUFFNTgyNzU1RjlENTc5RDc0MkJENEU3Cis6MTAxMEIwMDA5QjYwMkY5NDdBNDAwM0FBMkZBQjY1OEY1OTgyN0NBRTM4Cis6MTAxMEMwMDA0OEJENDBFRDRFRDMxRThFQjU5N0Q3REMzMjQ1QzA3Mzc4Cis6MTAxMEQwMDA3MDRBRjlGMzI3RTFCQ0VCMUEzMzg5MTkyRjdBN0U4MjIzCis6MTAxMEUwMDBBNjdGMzAyRDJEOTJGQUZEMUY2NjRFQzlDNzNDNDg2NTdDCis6MTAxMEYwMDBGRTE1NEY3QTg2RDFGRUY0QjFGRDIxQ0EyOEVEQTFBMERDCis6MTAxMTAwMDA4RUY3QzJFODYzREQ4RjBFOEJFOEVENTQ4RkZGNkNFNDQxCis6MTAxMTEwMDBGODg4RkVGRUYwRTFFOTVENjNFOTU4QzlFMjY3NzhFRTIwCis6MTAxMTIwMDA1MEQ1QzM5QjFEMkNDRjVBOEJFNzdGNTNFNDE0QjU4NzUyCis6MTAxMTMwMDBBNzgyNkFGREYwQUNDNTVFRTg3NzIwMEY3MkZGNUMwRkY2Cis6MTAxMTQwMDBEOEMxNkExRTY0RjM3MjJGOUUzRkE0N0FCRkNFMDU3OTgwCis6MTAxMTUwMDBENTdGM0M3M0UyMjAwMTNCRjMxNEZBMDM5QTJGMDhDQ0FECis6MTAxMTYwMDA0RjRFRUQwNzhFRTI4QjY5RkY1QUM0MUZCMjQzRUYwNzYzCis6MTAxMTcwMDBENzRFQjc1RDI2ODA4RkREMDdCOEYxODA1Rjg0QjRFNDc5Cis6MTAxMTgwMDBEQzQyNjE3RjlCQ0I5Mzg0RkQyNUM4M0ZDODczMzEzRjEwCis6MTAxMTkwMDA3N0IzQUI2QTYzMjFDMEZBMzk4RTgwM0VERUU5RkExNDc4Cis6MTAxMUEwMDBFRDhBQTZCRDUzQzY0NzlGOTdBRERGQjM4RTlEQkJEQ0NFCis6MTAxMUIwMDBBMThGQkJFRTNDMTdDQjc3NkNEQUZCMkFDNjdCNEVGOUNFCis6MTAxMUMwMDAzOUE0Qjk4NTgyN0YzNUQ4OUIwQjE3RUFDMEIyMjI2NTU2Cis6MTAxMUQwMDBGRUI5OTgzNzRENjYxOTA4Q0NERkFDRDgyMUNEM0I2RUVGCis6MTAxMUUwMDA5MkUxRkM2RTMzRkQ4RjkyMDBEOUU0OUQ4RkZBRjZBNjUyCis6MTAxMUYwMDA1OTI2MEJFNDA5MzRCQjZBMTcyM0JGMTM5MzNDNjBDQTFBCis6MTAxMjAwMDA2OUU3Mzk5MDBGQjkyQzA5RjNBQTNBRjdFOEE3ODE5RDRECis6MTAxMjEwMDA1NDRFRTlFMjY3MTZFMEFCRUYzOUI3MDJGRjRDMUJDNzRCCis6MTAxMjIwMDBCNzhCOTA3NzFBNUZGRjJFMUFDNUU0NTAwN0U3OTVGRjNBCis6MTAxMjMwMDBCOTBDRTMzODI0M0FCRjdEQzQxRTY2N0Y0RDc0MTk2MjMxCis6MTAxMjQwMDBGRDkzMkU2NjE3NUUyQkY3NTcwM0FFQkQyMTg0OTJDMTI2Cis6MTAxMjUwMDAxRTZFMjY5RTRGQzBFRjQ1QkMxNjA5RTM1ODI0ODBGRTQzCis6MTAxMjYwMDA0MEM3ODMxMkRBNEQyNjQ3RTg5MUIxNTA3RkFEODA3NkIyCis6MTAxMjcwMDA5M0VBNDczOEJCMzcxM0Y1QjE5NzVEQkVFRkMyM0U5NjkwCis6MTAxMjgwMDBGM0ExMjdGRjE5RTBGNjg4QTBDNEMzMTg1RkM5QjlDOTQ0Cis6MTAxMjkwMDAzMjBFRUMyQkJEODNFOTMzNjZBQUNGQzBCOUExRUI1NjYxCis6MTAxMkEwMDAxRkZGNjUzNUYwNTY4NzE3RjUwODQyODUxQ0RDRUY1MEE3Cis6MTAxMkIwMDA2REUyNTgzQzQ4QTMzNzEzRDEzRDE5REE0RjU1RkNEMkEzCis6MTAxMkMwMDAwNTc0Qjc0RTk4MTAzNTNCMkVBNjgxM0ZDMzIxMDNCQzUxCis6MTAxMkQwMDBERkExMEI0OEEzRjU1Mzg4QTc4M0VEMEJEQkJGRjUwNjExCis6MTAxMkUwMDBBNkFGQUZENzk5NTA1RjU3RjVFMTY0NDczRkRBODk4REQ0Cis6MTAxMkYwMDAwMTBFQzc2OTc0QkQ4MkU3NDcxNjI5RTcxNDA2Q0UwQkI1Cis6MTAxMzAwMDAwODIxM0MzRjUxRUI0QTU2RTJCMDFEMEMzRjQ5M0ZGQUUxCis6MTAxMzEwMDBDM0M4OEI2QzFGQThFNjg5RTcyQTU0QjhBQkU3MENENDg2Cis6MTAxMzIwMDBGRTBDNEE3Q0I3NTFGMUU3NTI4MDMxN0E3NEE5RjFEREE1Cis6MTAxMzMwMDAxNUNBNTMzRDA3QzJDNjI1ODI1NDFFRUQ3NzVDNUY0MzM0Cis6MTAxMzQwMDA0ODNGQ0U0QkIyQzE3QzFGQzlGMERFRTdBMkRGMUZBNTJDCis6MTAxMzUwMDA3ODBDNzg3Njc0NTVCMjlGNzA4MDQ3RkQxRTg4RDNDODhDCis6MTAxMzYwMDBBNTJDRkVBMkM1QTc0NzVDOUM3MkNFMkMzQzE1RjNGMEMxCis6MTAxMzcwMDBGNjI2Mzg2N0I2MjdGNjlDMTlFNTBGOEJERkE2RTM5NEFGCis6MTAxMzgwMDA5NTFENzYwMzdFQUZCMTJCRURBRjI3NzhCRTQwN0JDRUE3Cis6MTAxMzkwMDBBQzRCRDk4N0ZGNzNFN0NDREM5Q0E3ODczRUI3QkFFQzkwCis6MTAxM0EwMDBCMUU3Q0NEQzZDQkZENDNDMTlFREY5QjJCM0Q5NDE4MUMzCis6MTAxM0IwMDA5RDA3MDkzREJEMERFNUE1MTFFREMyRDczRkVFRUIwMDQwCis6MTAxM0MwMDAzRkYzQjk1MjgzMUJDRUQ1NjREQ0Y2NEUwN0U2MkI3MTkyCis6MTAxM0QwMDA0MjBCQzQ0RkI1RkFDMEVGOUNENTNGMDFGQTU5NzdDQjA5Cis6MTAxM0UwMDA2RTM3RTY4RjZCRjQ4MTQ0N0UwMDhDRUQ0NkY5ODkwRUYyCis6MTAxM0YwMDBCOEFFQUMxRkMwRENGNUI5MERGMEVEMzQxNzdFMUNGMkIxCis6MTAxNDAwMDA5QUU1MDM3Q0RDQkNFNjBGNUM4OUUyNjI5RTU5RDFGQTY2Cis6MTAxNDEwMDA2OTg3OUFGRjY3NEY4QUM5ODdFRDQ4OTBGRjk3NDhFRjIxCis6MTAxNDIwMDAxNzEyRTZGRDVEOEZGQTVCQzc0MERFREYzNDU1N0Y4QjE4Cis6MTAxNDMwMDBDRDZCMTY5M0JFRDI1RTU2Qzc5RjE2NzJDNkU0MTE3QzYyCis6MTAxNDQwMDA3MkM5RUI1NEVDOTgwNEVCNEI2NEI3NUQ2RTVFODQxNjg2Cis6MTAxNDUwMDAwRTFEMDlFNEU4NUY1RDAzRjEzRjRENUU4NDQ3ODQzQzY3Cis6MTAxNDYwMDA4MjBFQzgyM0EwNEY4MTIzMzJGQUNGNzYwRUU0NDUwNEMyCis6MTAxNDcwMDBEMTVGRkNFQTQ4RjQ3QjE5MTNFNjQ1QjBGQzNFRTFDMEJECis6MTAxNDgwMDA0ODA5QkU3QjU4RUZGNTgwM0QyM0VGRDQyQjcyQzBGRjk3Cis6MTAxNDkwMDAzQ0Y4NEQzQTBFNjRBMzlGOERCODQyMjVDMDFGMDVGQjUyCis6MTAxNEEwMDBENDJDRDBBQjNBMTRGQzZDQjhGNEJDODhCNEEyMzg3OTE0Cis6MTAxNEIwMDAxMTVCRkRFMzFFQ0Y2NUY2NzM3RjMyRDVDQkI2MTIyNkU2Cis6MTAxNEMwMDBBN0U0RkRDQ0FGNDlFNzhEN0VCREYwNjNDMzUxNUZFNTc2Cis6MTAxNEQwMDA2NjlBNzAxREM3REUzMEY2MTg1MTBGNzc2MzlFNDM2RDE0Cis6MTAxNEUwMDAxNjJGODI3Q0U5QUUyOTNGMDFGMkVCMTg1NTVDODE4RTA0Cis6MTAxNEYwMDBFQkVFNUU4RUY2NkJBMkZEQTk1QjE1MUI3NzU2REY1RkU4Cis6MTAxNTAwMDBFQTNFOEQyQjYyRkI3NDE0RUM3QjE0QjQzMkZBOEIxNzE5Cis6MTAxNTEwMDBBRUUyMEU2MkZFQjYyNkVFNUQ1NjQ0MTQzOTExOUJDNzRDCis6MTAxNTIwMDA3MERFNUM4OUYxRDhGQjlFQThDMTM4RUM3Q0QyODJDRkZBCis6MTAxNTMwMDA4NUE0NEI4OUNCQjI3ODhCQjQ0QTQwMzkyMUVERTBGQ0NECis6MTAxNTQwMDA5MjkzOTE4OTBFNkQ3QjUxODdGN0Y1NTBGMUI2MDk0NDVFCis6MTAxNTUwMDBBMjRDQTlFNjZBRkE5QUQzNzFBMEE3NEExREI0OUM0OTg1Cis6MTAxNTYwMDBEN0I1NUE5MEIzRTg3NzVCREY0RjQ2RkZFQkMzMEU0OTIwCis6MTAxNTcwMDAzOTU3QzNFQzJGRjk1MTBFRjUzRkRBMkZEQUNGNzIwNzQ2Cis6MTAxNTgwMDBDNTFCREFDRkNENDUyQzJFRDA1MEM0RkNDOTE0NDVGQzY4Cis6MTAxNTkwMDAzODFGRTVEOUExRTQ3REE4RTNCNTExNUQxMDlFM0E4RTEwCis6MTAxNUEwMDAzRDFGMTY4NTY5RjFGNDNCQjVCRjBFN0Q4QjA5RTIyRDE5Cis6MTAxNUIwMDBFMUUxM0E4QzY3OUUzNzc4NjY2MTNDMzBCNTkwODBCRDNBCis6MTAxNUMwMDBEODYxNkQ1OTM1OERENTIzMEYzRDZGMEU3QkIxRkUzQjM0Cis6MTAxNUQwMDAwMjMzMTQ4ODk0MEFGM0JENDFEOTBGRURCRUNFRUI4QUQ1Cis6MTAxNUUwMDAyRDZCRjMxM0I0Rjc3RUQ0MTFERkM4RUNCQ0MxRjc2MEU4Cis6MTAxNUYwMDBEQzUwQzRFNEUxRjk0RUE3QjIyRjZFOEM5Nzc3RThBNUQyCis6MTAxNjAwMDBERjM4NDEzRUFFMTY1MDBFQjcwRDYzNzBEMzBENjdDRjc1Cis6MTAxNjEwMDA1Q0ZCRTQ1OTI4ODdFRDU0M0ZDNUY5QjJGOUU3N0VDNzcyCis6MTAxNjIwMDBDMTAxRkQ3NUQ4MTk3RTdEREI3OTZCRTdCQkI0QTgxMENECis6MTAxNjMwMDBGN0FEMDM4QzA2M0E1RUM3NkFDRUNGRTBDNUU2N0RBOTVBCis6MTAxNjQwMDBGRUVBMjc4QUFFQUM5QzNBQzZCOUI3MDcwMUNGMkNGRTlBCis6MTAxNjUwMDAxRjgxREZBRkFFQ0QyODAyM0YzQkNEMjlGNEJGOUE0N0IzCis6MTAxNjYwMDA3RUI2Njk2MTJBOTY4RkFFMkE0MDNGRDAwMEREOUU1QzJGCis6MTAxNjcwMDBCOTE4RUUzM0I5RDQ3QzhBRTcxNEJDNzg1N0UzODdBQjRBCis6MTAxNjgwMDBBREUwREU4MzdFQjQ3MDA3ODQxMjU0Rjk0MzlCNTZERkNECis6MTAxNjkwMDA1NDNDMTVGODYzOTM4RTQ4OTlBMDBGQUNEMkU0QjM2ODFDCis6MTAxNkEwMDBFODc5OEFFNDdCQTUwOEVDMEY0MzdGMUZFMzUzQTE0MjRFCis6MTAxNkIwMDAwMUY1NkZCMzFCRTBCNjRFNzc2Q0U3Q0YwMTVGNzY5QTBBCis6MTAxNkMwMDAzMTNGQjI2OTc5NzgzQkY4MkIzMzI1REY1RTY4Nzc2NjY2Cis6MTAxNkQwMDBEOUUxQTk5Qzg0RERBMTlFNzRFRUMwNDhCQzFGQTdCNkM5Cis6MTAxNkUwMDA0MzczOEZDN0EzQjE3OTM0NjQ1NTJBQ0JGQkU4OEU3RDUxCis6MTAxNkYwMDAwRkY3MzdDNEI0MUI5NDVGQzNGNEQ2RjUwNjVGMTFEODU3Cis6MTAxNzAwMDAxNzkzQUU2Mzc5ODkxRkQ3RUIwOEUwQzVDNzY2ODYzRjlDCis6MTAxNzEwMDBGMjYzNTY0NUNFQjgwQkEzRjVEQURGNkJGMUUzMzEzMzU0Cis6MTAxNzIwMDBFMjQ3OUQ3MkVFNERCQjFGOEQ4MDFGNzRERjFBMTRGQ0MzCis6MTAxNzMwMDBGOEY4RDVBQjBCMDEzRkNFRUNCQ0JBMTBGMDYzQkRCRUUwCis6MTAxNzQwMDBDQjAzRjRCNTNCREY3NzE4RTA3MTdDOEFCNzRGQzdGODVECis6MTAxNzUwMDA1MkUxRTVFMEVENDc1NzE4NkYyRjU1QkYzMjhENEExNDFGCis6MTAxNzYwMDA2RjkxRUU4ODhFQjdGNEVBOTk5RjRDMzZDNzlFMUJFQkJCCis6MTAxNzcwMDBCRDRDQkY2QTYyRkY1ODUxN0VBQzdGQ0M5NTFGNTdCRkVFCis6MTAxNzgwMDAzMjk5QkY1MkJGQkFGQzc1MTAzQzM3QThDNjYxN0FBRDFBCis6MTAxNzkwMDBFMUM3Qjc0N0MxNkI4OTk5RTVBMzJDMjkxMjQ1QjkxNDU0Cis6MTAxN0EwMDBENjU3OUI4N0U3MTBGRjY4NzJGNzcwNTc3NDlEMzE3RTlDCis6MTAxN0IwMDBDMDM3QkVDODVCRDkwNUYzRjAzMEJGRTUxQjgyRDQ3N0Q0Cis6MTAxN0MwMDAwRDFERjcwREMyRkM5NkRBNzVERkE4QzQ2MTU0QkI1QjMyCis6MTAxN0QwMDBCNTAzQjVFMzk3OEM2MjdBRTZBNDUxOUU1MkIwMEIyNjBFCis6MTAxN0UwMDA3RDcxMTFGRDA4MjdFMTFFMkMzQUFFQzlGRjMzQjRFNzI1Cis6MTAxN0YwMDBDODdFNEVDNDczOEMxMjhCODMzNkVEOURGNzJDRjg1RDNBCis6MTAxODAwMDBFQkZENEFGQzcyMTc4N0Y2N0FGRDczOUY2MEZERDkzREE4Cis6MTAxODEwMDA3NTU4NkZEOUNGMDUyMTBFREEzQzRDODc3MjVCQ0Q3RkFFCis6MTAxODIwMDA1MEZEM0ZDREZCNEJEMUVGQTNGQTdGRTgzQ0M2ODA1RDc2Cis6MTAxODMwMDA5OUVDMDgxQjkwNkY4MTdENDlEQjM1MDkyQ0JFREJFNEY4Cis6MTAxODQwMDAyMDZFMTk1OEVEOUU1OEJGODk5QTFGQjVDOTZCNDA3QTEyCis6MTAxODUwMDBERkI0OUZGMzgzM0Q5RTYxRjAzOTg3MjEzQzg3ODkyNzYwCis6MTAxODYwMDA5MjIzN0M2M0ZBMjhDRjRBQzg3MzUyRjNFRUUwRkU5RkJFCis6MTAxODcwMDA1MUUzRDEwRjlBODNFNzEwRjRFQTdEMkZCMUY3RjMyNEY3Cis6MTAxODgwMDBDMkU3MDUwOUU5ODZDQzg5QzZCNzkwMjYwRTExQkE2MjZGCis6MTAxODkwMDA3OUNDQjM1MURGRkU2RkUyNDU3RERCQTdDMUI3NTAwMkMzCis6MTAxOEEwMDBGOUQyM0M0QUNENjNCRTE1RjU3REI1RkRFMEZDN0UzRjI3Cis6MTAxOEIwMDBDQkVGMUZDOENGNjM3OUZDMEREMzA5RTlCNEIzMzJEQzk5Cis6MTAxOEMwMDBFQkQ0MDhGNzNBQjk5OUJDMEY2QUU0N0Q3NDE5RjJFMUQ4Cis6MTAxOEQwMDA4MjUxN0NCRTQxRThDNzczMDJFQTNENEU5MDFGMTdGRDVFCis6MTAxOEUwMDA3RDEzOUNEQkM5NjM3OTcyMzFGRDI4RkMzRjkzQkYwN0YwCis6MTAxOEYwMDBFMzU1NzFFMkM0Nzc0NERCNEI4NzU0QkJCMDU0M0QxN0NBCis6MTAxOTAwMDAxNjM2ODAzRjZBNDk5QjIzMEM3MThGNDM1NkU1QkNCQTVCCis6MTAxOTEwMDA5MkFGQkNDNDFDM0UwNkZFOUEyNUNGNjdFMjc5QTIwMUI1Cis6MTAxOTIwMDA3QkU0MjVBM0UyRUY2Nzc0REFDMEZFMjRDRDBCOEZBMjFGCis6MTAxOTMwMDA1RkEyMTlFRUE1RTAyMkZCMzYzREExMURGOThCN0M4ODQ0Cis6MTAxOTQwMDAxRjFEMUFCMDIzREZDOTg3RjM2M0FBNUM2ODcwMzNGRURBCis6MTAxOTUwMDBENkIwODc2M0U3MDgwM0IxRTdDODVFMUU3NTY1RTU4NDA2Cis6MTAxOTYwMDBGQTVEQTJGNjg3NDYyNUIyNEJCRjBFQ0UwQ0RGMEYyNURGCis6MTAxOTcwMDAzQTdGQTdGMDc1MTU4RTVBQkNCRjVDRjhBOUY1MDNGMDQ1Cis6MTAxOTgwMDBBMzdDMDhFNTgzMDY3RTVBQkY5RkVBQkYyMzFEMjJGQTg3Cis6MTAxOTkwMDBGN0E4MEUxNTgwRkM1M0Q1N0Y3N0E5RjJGQjQzMDU0RUJGCis6MTAxOUEwMDA3RjZGRjk0RDQ2MjdFMjQzREY2RTdGMTJGMUEzQ0JERDU3Cis6MTAxOUIwMDA5NzQxRjIxQkY2QTcyNEIxRkNDRUFGRjgzNzY1REVEQTBCCis6MTAxOUMwMDBCQzA5NjVERTlBQkM4OTQzRkFGMDBDNzYwRjBCODU4RjUzCis6MTAxOUQwMDA3MzcwREU0NDQyRkNGQjlBQkM4OTZGQjA0RTREREVDNDhFCis6MTAxOUUwMDA1N0FGNTM5QjM3RjFDQzgxQTc2QzEwNUE4NEYzOEJFMDJGCis6MTAxOUYwMDAyN0U5RERBNkM3N0M4MUE5QkNDNUMzRjJEOTc4OTZGRkNCCis6MTAxQTAwMDA0QTNDNzg1RjZGQjNDOThDRkUxMDZEQkUxRkU1NTQyQjQ2Cis6MTAxQTEwMDA1QjQwMUZBRUEwNzYwQTlDOTdEQUQyOEU3QTQ0NjMzNjdBCis6MTAxQTIwMDA4RkJFNTVDODZGMTRBNTM4RjlBNDQyNEQ0QTUwMUE5QzcwCis6MTAxQTMwMDBENzA2RTcwQkYwNUU4QkNCQ0M2QkJCNjZCNEQ1ODFGMkRGCis6MTAxQTQwMDA1NzIyQ0U2Rjk4NUY1QTNEMUFGRDBGNUY5REQ3RjY1QzA3Cis6MTAxQTUwMDAwMUMzRkYzNzJEOUZBNTQ1REZBNzVCNTUyQzEzODg1Mzg2Cis6MTAxQTYwMDAyNTNBMDc1MTMzOUExQkM4NUJDNkYzOEE4MjRDQTJFNTFDCis6MTAxQTcwMDA3MUEyNzZCMzQ3MzNGQkVDNEQ0M0Y4RkQwMEU4ODFCNDI3Cis6MTAxQTgwMDAxQjg4RDM2NjE5QThGNTVGMTZCOUFGRTEzNjk3RjdGNjRDCis6MTAxQTkwMDBEMUU5QTgzRkUxRkU5RURERkIwNzhDNEYzQzkzNEQ0NDBFCis6MTAxQUEwMDAzODk3RjA4QzVFQzY3RDk2RDMwOUUyQjU5QTdGQTE4RUY5Cis6MTAxQUIwMDA3MzRFODlBMzVEMkFGRjU5M0NGQUVGMkIxNzFFRkZCRjE3Cis6MTAxQUMwMDBDRTc3MDZFNTY5MzE3QUZDMDZGQzA2RTk2RjgwOUZFODZGCis6MTAxQUQwMDA1OUZDNEFCREFGRTU2QkU1REM5NUU2MzM5QUZDOTI0NEQwCis6MTAxQUUwMDBFQjZBMDY1QUE0RjhGM0NBNjhFRjhCOEM4RTNDRTgxN0IxCis6MTAxQUYwMDBCRDVDRjk5NzVDNDZGNTIxODBDNzJFQTMwNEE0NjY1MjBECis6MTAxQjAwMDBFRTY1MjE4RjY2QUI3RTVDNzY5RkU3OUFFMUE4MkY3RjFBCis6MTAxQjEwMDA2QzY2RjM1NUVGOUI1MUQ3RjNCNjE2M0ZCRkE1RERGREJECis6MTAxQjIwMDA3OEJFRjdFNzQwNUZDNzJCM0Q3ODBFRkM2MTJCRDNEQjE3Cis6MTAxQjMwMDBDMkNGQjMzQzdERURGRDI5OTQ2RUQ4N0QzMkNBQkRFMEE1Cis6MTAxQjQwMDBEQTdCMjBGRTM4RkExRjIzQkYyRjhDRkVERkQxQUZGRUQ5Cis6MTAxQjUwMDA1MUYyRkJGMkQ3MTE2QjdGMUZCMkIyM0NDODg4RkRGRDdBCis6MTAxQjYwMDBCRkI2QUVDQjkyRDc2QTVFNzQ3OTU1QkYxMjlGRTAwOEJDCis6MTAxQjcwMDBDNDI3RDQ3MTlBRkJEOUI5QTJBMUNBNzkxNkY1RkQ4REYzCis6MTAxQjgwMDA4QTVFNzg2N0IxNjcxODlDOUYyOTJCMEIzRTBERTc2QjI3Cis6MTAxQjkwMDA5QTg4MEQ3RkQ3QTAyOTcwRkY4RTVGMzlEOEY5NjYyQ0ZGCis6MTAxQkEwMDBCQjU4N0M5NTc4MkQ3ODVFM0ZBREQwNTc1ODhDRjQxQjkwCis6MTAxQkIwMDA1QTA5RjQzOUMyNDFDQTIxQ0VEMUU5OUE0OUVBMkM5ODhFCis6MTAxQkMwMDAzNzMxMEFFQTQ3MkMwRjNERkRBQjMyQ0MxQjZCMDE3QTUzCis6MTAxQkQwMDA1NUYzQTZDQjJGN0VCNjcyNUExOUNFMTdGREQ1MEU2M0RDCis6MTAxQkUwMDBFQ0JEMzMzNzE2MzM3QjUwN0Q0RTUzRTY0RkI3M0QxQjZDCis6MTAxQkYwMDBFNjczNjYyMTNCRUZEQkVDRjA4OEUwRjc1NkUzRjRDOUNGCis6MTAxQzAwMDA1MjNGRTYzOTM0RUQ2MjQ2NTEzOUQ4OEE1MEZGQzAzMDMwCis6MTAxQzEwMDBBNEFGQTY1RDk1QTUxMEJGMjUwMTczMjlERTA3RkUyNzk5Cis6MTAxQzIwMDA3NjBGRkY5OTY1NDNEMDNGRkFCMkNCNTcwOUYzQjY5NkNBCis6MTAxQzMwMDBGOUFGMDdCQjdGMDQxRDA3RTJCQzY3NzY1RTVGRUE4QkU2Cis6MTAxQzQwMDBDMzM3MzNGOTU0MTlFMkUwOTkzQzA5M0MyOTQ2RjgxNkE4Cis6MTAxQzUwMDBCNUY3NjdBMzdGN0I2NTE4RkQ2RUE1QzVFQzdEQjM4M0UzCis6MTAxQzYwMDBDOUY1RTZGRDM1NjQ5RTI1NTJCNjM4NjJDRjhCNEQxQTE0Cis6MTAxQzcwMDAzNUE1MTRFNjUxNUEyQzI4NzlBNDJDNkZENTQ5RDUzMEI2Cis6MTAxQzgwMDBGMDczNkFGMUM5QTlFNEFERDYyODc5RDk0NDM2NDVGMjkyCis6MTAxQzkwMDBCMTczQkYzRTZGNTU5RDlGNUE1NkYzNTY5MzJGMzBCRjc5Cis6MTAxQ0EwMDA0M0FFNjhDMDNDMTdFQjJBQzY1N0M5NzI4MjcxOEU2QjZGCis6MTAxQ0IwMDBDM0ZERDUyOTE0NEVGOUREQzE2QjAxNEUyOTAwNzZCQzU4Cis6MTAxQ0MwMDA2RjM5RjRDODU4RkFERTkxMjY1QzBCRkU5QkE3NUJDNzAwCis6MTAxQ0QwMDBGNTgyRkUyQkFDRUVGRjBFNkM4OUQ0MjU1NjgxNEIzNDc5Cis6MTAxQ0UwMDBBREQwREI4ODc4MjRCNEI4ODAyRjU1RkQ0RUNGQ0U1NUNCCis6MTAxQ0YwMDBBRDRFNDZCREIyM0JBNzAxQ0Y1NTlEM0Q2QzhDN0IyRkIxCis6MTAxRDAwMDA4NUZBOTRDOThBMkM4ODkzRTRBRUZBNzdDQzYzQjBFRTU2Cis6MTAxRDEwMDBFMkUyOUVCRjdCQjdEOEEyOUNCQjVBOTEwNTcxMTdFQjNDCis6MTAxRDIwMDBBQTdFQjk4MkY2OUZGQjE4NDcxNDMzM0E5QkNCMDI3RkY5Cis6MTAxRDMwMDBCNkEwMDNGOTVBQjc4N0REQ0Y1OEQ3NjVBRjMyQTFCQzNCCis6MTAxRDQwMDA2MUZFMjU3MkFEMDNFNTg4QjBGQTQ2MURGMDA5QTE4RDRDCis6MTAxRDUwMDA2QUIxNzQ5RDZGMTdCMzc4N0E0MUI3QTgwMzM5RjVBRkFDCis6MTAxRDYwMDA1RkYyNzFFMzVFNEYxNDQ3Q0VFNzAwQjgxQThERTFCRTEzCis6MTAxRDcwMDAyQzY3MjQyRjQ5M0Q5N0EzRkFBNzA2RTRDRkFFQjlFODE0Cis6MTAxRDgwMDA5RkJBRkMzQ0Y0RjBFRDk4RTdGODY1MDZDNjgzQTZEQjQ1Cis6MTAxRDkwMDA5ODNENDIwNTkxNzIzRjUxNkNGQjQxRjcxMzI5N0E4QkI0Cis6MTAxREEwMDA2QTE3NkJFOTQwOUJENzlENUYzMTA0RTk4MkYyRDFDMDhECis6MTAxREIwMDAyNjMxODZFRkM1Q0RFRjZFMTU5OERFNERENzYxNTgwMkZFCis6MTAxREMwMDBGM0E4Q0M3MjgzM0ZGMTUyRjNFOUI1RjZGNDgwOUVBM0Y5Cis6MTAxREQwMDBFODI1RUFCQ0JGNjlGRUI5NUFERjAwNzlFNzcxRkMxRjRDCis6MTAxREUwMDBBQTVFRDNBMTlFMzNGRjkyREQxRjM3NDJCMTI3OEU3NkM0Cis6MTAxREYwMDBGRUJGMTI3NjRGQTc5QUU3RTI2N0U3NTRGNDk0N0YyMjdBCis6MTAxRTAwMDBGRTg0QUU5MzAxMEY3NkQ5NzU0REM1MTgwRjZCQzI3RTU3Cis6MTAxRTEwMDA1NkIzREZGRjE4QjEyQTZGNDU0NTE5M0M0NUMyNTE3OENBCis6MTAxRTIwMDAxRkREQjc2ODA0QzY5QjI5NUQxNEM0QTE4QkM1QzVFQzMyCis6MTAxRTMwMDBGRTA2NjE3NTMyRTJCMUIwOTY2MEQ2QTY2MENGNDAzQzM2Cis6MTAxRTQwMDAxNkQ2MzE3QzVEQTREMEJEOUE2N0E3QzYyREVGMkNGNkJGCis6MTAxRTUwMDAxRDJCNEU4RkJBQTdBNTM1ODlEREQzQTJFNEFCNUI1QjAyCis6MTAxRTYwMDAwRkJGMDRGNzlGM0NBREM0QUQ3QkRGMTgzRDEzRTM4OTgyCis6MTAxRTcwMDBBQjA1MEVFQ0MzRjNGNkI5MjNDMDdGNzc1NkUxREY1NjBFCis6MTAxRTgwMDBBMTlGODg5NjY4N0FFREM1RjM4RUI5MDdEODM5MkQ0MUEwCis6MTAxRTkwMDBDOUFCMTU1NjNCQjYwMjdFOUE5RDNFM0NEN0Y5OUQ4RTQ2Cis6MTAxRUEwMDAyMDhGNzk1QkUyRjEyN0E3NDk2MDc3ODQwRDkwNjc3N0VGCis6MTAxRUIwMDBBQTREMDhBRkIwQTNGRTE0RTMyN0QzRkFCRDg4MTBDMDIzCis6MTAxRUMwMDAzQzIyREQ5ODJCQUI0N0E5REYyNTZBMkY4RDQ5QTgzRjFGCis6MTAxRUQwMDA3REFCRjMyMkU0NkJGQzUzREYxNkFGMTNGOUE3MkU3RjIzCis6MTAxRUUwMDAxRERBNzMyMkNDM0UyMTZGQjA3Q0FDMzhFQjhBRjE1RkY3Cis6MTAxRUYwMDA1RUYxNzVBOTdFNEI2RDdFREQyMDNBNjZGRTBGRDUxRTI0Cis6MTAxRjAwMDA1MkUzMjVDNDIzQzdFNEJGRjdFQUM1MjBFODNEOTA0RjVDCis6MTAxRjEwMDBGQ0FBMUJGNEVBMUY5QkEzRjNERkFFMUZBMzhCQkRCNzg0Cis6MTAxRjIwMDA5MkY4Q0Q3MDFGNDI5RDcyM0U5QTA4RUU1NTEwQjdCREQzCis6MTAxRjMwMDA5RkI3NzY4MTdERDcwRUU3MTI0MEJGMDRGODcyNTFFNzU0Cis6MTAxRjQwMDAzMzNFQjA2MjlFNDZBQkMwQ0U2RjEwOTk5REZGNTgzMkIzCis6MTAxRjUwMDBBRkU1QzdEMDdFNDk1QkE2MDhGMDk3QUI1QTdFOEFFNzBCCis6MTAxRjYwMDAzQjc0QzREQjRFOUY5RjJCQkY4N0EzQ0U0NzNEQUY5MEYyCis6MTAxRjcwMDA0ODdFMEUzQUFGRjAzNUU3MkRCMjEzOUNCNzU4QTBFMDdCCis6MTAxRjgwMDBCREVCMkU4MkU3MkRDODJBQ0Y1Njk4NTc3NzlCNDAyMDZECis6MTAxRjkwMDAzRTlEM0E4RDk1NDcwODI2RkM3RDI2MzNFNDdEQTdFMURBCis6MTAxRkEwMDBGOTU4Q0NDRjBFNTM3ODQyOUVCOTE5RjJCRUQzRTAzQzFCCis6MTAxRkIwMDAwQ0JCQTc5MzlCMzkwREYxMkY5NUMyMDdGNDgyNzYzRDk4Cis6MTAxRkMwMDBCQjk3NTNCRUM1ODJGODU0M0Q4REM1NUI1M0JEMDZFNDM3Cis6MTAxRkQwMDAzRkU3ODgxQkNGMDlDODcwN0Y5RjAzRjA2QzA1RTI2NzVECis6MTAxRkUwMDBEODlBODFGMUUyRDQ3Q0E2NDc5QUJEMDY5REM5ODk3OTI5Cis6MTAxRkYwMDBERDg4QUY2MTRFQ0RFQjY2N0NBRjdCQUU4NEY5RjYwMzM2Cis6MTAyMDAwMDBGNzc0Q0UyM0I4M0ZBQjBCQTY2NkMzRUY5MjBDQjlDOUU5Cis6MTAyMDEwMDBDMDQxN0M0OTk1MzM1NTBBN0U3NDZGNTVEQTM3QjJGNjY0Cis6MTAyMDIwMDA3MDhGMjdDQzhGMkM2MUVEMDdFRUYxRkMzRUFCNkYxNTY2Cis6MTAyMDMwMDA0Mjc4QUYxNEQ1NjE5NDdCMjQ1OUZEOTJEOTE5NDgzRjU5Cis6MTAyMDQwMDBCQzcyMkU5N0RDQTY5QzJCRTBEODNENjQ0QjY2MEY2MURBCis6MTAyMDUwMDBGNTM2QzYwN0M5REQ0OThBM0M1N0RBREY5QkVBNTdFMjA1Cis6MTAyMDYwMDAwNUVDN0M0MEJENEVCOUVGQTA4QjQ0Qzc5RjU1M0FEM0Q5Cis6MTAyMDcwMDBGRTNFNDc4NENFRDhGOTkyMjcyMkU3MDQ5MDlFREJBRjNDCis6MTAyMDgwMDAxNzMxMEY1MkJEODdCNENBNjI2MEU3Q0U0Q0IxNzQzNUM4Cis6MTAyMDkwMDA2OTRDMkFDM0ZCMEFCNzA5QzY1REVCRjRGQzY0NEM1Q0NGCis6MTAyMEEwMDAzRjhEN0Y2RTM0NUYxOUEyRjI5NUJCMEQxQUJCMkM5MzQ2Cis6MTAyMEIwMDBDMUQ1MTY3RTlBOUQ0RjMzNUU5NjVEOTYzODBFRkE3QzlBCis6MTAyMEMwMDA3NjZDMUM3NDQ3NzY3NDFDNTRERERGQUE4NTA2RTQyQkZECis6MTAyMEQwMDBERDc2RTkyREM4OTdEQTQ0NDEwQkY3M0E2QUQ3QkQ2OTM2Cis6MTAyMEUwMDBFMDdFNzZCRjE5RjQ1MkFEM0Q3ODI4NDE1RUQ0RTkzMUU3Cis6MTAyMEYwMDA0QzNGNzQyN0YwNDM5QzFFOTNDOENGOTUyMEFFNUM2QTdBCis6MTAyMTAwMDBGQzVGOEE4RjMzRkVEQjlCRTAzQ0UyMDBCQzU0QkRDOTIwCis6MTAyMTEwMDBBNDhEN0JDODk3RTVGN0U5MzVGRDEwRjlBMEE3NUQyMEYwCis6MTAyMTIwMDBFNkVCNjg1OTczN0U4RUYyNDFFNDhCRjIwQUEzRDhFRTk3Cis6MTAyMTMwMDAwMDNFRkE0M0U0OEJBREQ0NzIzNTQ2RjE0NTZBOEU1RUJCCis6MTAyMTQwMDAwREZDQjhGNzQxMTdGRURFRDU1QjBGQkFGMTc5Q0VDQ0E2Cis6MTAyMTUwMDAwNUY4QjFGMDBDQ0YwMThERTk5Mzk3MERERjgzRkJDRDJFCis6MTAyMTYwMDBDRjU5QzMzOTcwQkY3OTRBMjA3NTE2REM1NzdFMkUzRDkyCis6MTAyMTcwMDA3QzA0Q0FCNjlGREVDMUNBMDVFMUE3RTFCRUYzRkM5RjlECis6MTAyMTgwMDBGRUYyN0I1ODA2MUExQjQyOTc1QjEyRkM5RTVDMENGNzEyCis6MTAyMTkwMDBFRTg3NTZGNjgzN0U1RkE2Mzk3N0EwQjk3RjE5Q0VDNzQyCis6MTAyMUEwMDBDMjdBMzIyRDA2OEM1MzY3MkFFNzkyQzk2NEM1M0YwNDcwCis6MTAyMUIwMDA5OTY5NDA3N0Q5QTU5ODU3NjgyMUQyQUU3RUE4MUZDNkU1Cis6MTAyMUMwMDBFNDJFQUQ2RjgzRkI3RERCMEI5QzJDNkU0RTE4MUYyMDI1Cis6MTAyMUQwMDBDMzk0QkMxMzEyOTJDMTFGRDVFRUI0NjNGQjAxRkQ2RTE0Cis6MTAyMUUwMDA5NzUxQzk1QjYzRTNCRkY3MkFCQjM3NDkzRDZGNEQ4ODAxCis6MTAyMUYwMDAzODFDRUM0NjhCNDQ2MkNBRUE3REU2NDQxMDg3QzNGRDc2Cis6MTAyMjAwMDBDM0VENkFCQzVBMjkxRkM4RjQ4RDJBODlCMjVGREU5QkQwCis6MTAyMjEwMDA3MjdGMzFBQ0YzRTNERDBGRTQ4MzNFRjU1REU1NzdFMkY5Cis6MTAyMjIwMDBCNDc4RjVEN0IxNEM4RUFDNDhGRURCMUNFMEUzRUZGMzlECis6MTAyMjMwMDAzNjM3RjgwRjk2NjZGQUNBQTBCRjc5OEVCNkYxNzY4QTVECis6MTAyMjQwMDAzRjkzQzU0QUZDM0RBQTg5RjI2QzBFRjg4QUZENjYzNkJBCis6MTAyMjUwMDAzRkZCNjQyRjM3QUYzOEYyM0I1NUU5M0UwMUZERjRDNDM0Cis6MTAyMjYwMDBEN0NEODNCRTlEN0VEQzJCMDI3QzFBNENFMTFDODFGNjBGCis6MTAyMjcwMDBGMzgxQzMzNzA5RkEzRDNGRjdDM0ZCMzA4RjcwQzg3QjRBCis6MTAyMjgwMDA0N0UwNUVENEY3RjQ1REQ1MzZDMDI3QTc3MjBGMzYxMTRDCis6MTAyMjkwMDBGMDFDNTBERkQwMTEzRENBRUY2REIxRjM0MDA1OUMxMjI4Cis6MTAyMkEwMDA4NzBENEUwNkI5NzAwMzYxNzgwQjY1QThCRjUxQjk4N0Q5Cis6MTAyMkIwMDA2RUFBQzhFRThEOUQ1QUU2QzRERjRGOUM0MUMyMDJFMDczCis6MTAyMkMwMDBDM0Q0RjdCRDM2MDJGNDcxQjNBRjJDREUzRDFCRUE5M0U1Cis6MTAyMkQwMDA2NEU5QTU2OEZBQjk1RThBMkExM0M4Qjc4ODJERkY5MzA2Cis6MTAyMkUwMDAzQkI2RkNDRjE1NUY4RThDMkVENzA4OUUzQjYwRERBRkQyCis6MTAyMkYwMDA3MzRDRkVDODEzOThGQzExNDk2MDA1QzhDNzE3NUFDNDJGCis6MTAyMzAwMDA3MTE4NTc3NzcwMzI5NDQ3QkYzNjA0RjNBODQ4MTZDQjNDCis6MTAyMzEwMDBCRjE4NjVDQkY1MzMzOEU0NkQ4Njc1ODVBOTlDRUY3MUUwCis6MTAyMzIwMDBDMEVGQjBCMUZCQzUzMkRFMzc2Qzg1RkIyMDg4MjQ2RDcxCis6MTAyMzMwMDAwNjNBRENBRDc3NjE5RTY5ODZBNUY2Njc2REE4Q0Y1ODMxCis6MTAyMzQwMDA0OTAxRjIyOTY5MzNFMkI1RDUyNEMxRUY5NjFDQjRCMjM0Cis6MTAyMzUwMDBGQzg5RjZCNTNBOEMzNzcxMzY5M0NFNDNCRkUzN0IwNEU0Cis6MTAyMzYwMDAyNkZGQUQwQkFCQTE5RTJGQTcxQjQyNjU3NUFGOURGRDUwCis6MTAyMzcwMDBBRTVCRkI3OEEyNUY1MTBBRkJFNjdFMUZGNTIyQUIwOTNDCis6MTAyMzgwMDBDRjI3NENCNkI5RUU4MDdBREU2NkMwRkIyQjBFNUFDQjU3Cis6MTAyMzkwMDA3RENBNzgwNEZBN0ZDRUJBMTBEQjAzOEZENjUzRkFFREVDCis6MTAyM0EwMDAzNTMzRkYzQTRGRURFMzE1NkM3Q0ZDRkQ0NkZFMUVBMjczCis6MTAyM0IwMDA4QzZGMjIwNjI4RDcxMjNDNkZEMDZCMTdEOTdDRUZENUQzCis6MTAyM0MwMDA2MTNDMDRFQUFGQzNGOTk5QjA1RUJEQ0YzMjcyQkVCN0NCCis6MTAyM0QwMDA1MkMwREYyMUUwODgxMjFGNkJDM0YyNTMwQTFGNkNENzczCis6MTAyM0UwMDA4QjA3MDE0RkU1OEYwODgxRkQ5ODZDQkI4MDc0QzBFQkIzCis6MTAyM0YwMDA2QzZFQkMxRkM4NDNGMjFEMTk4NEY5MkNFOEY3N0M4NjZCCis6MTAyNDAwMDAxODg0RkM3QkZFMUUxQkRBQ0RBMEY5NDBGRDUwRjgxM0FBCis6MTAyNDEwMDBFOTVBRjA5MDcyQzUzNTgzRTM3OThFMDIxRThGRTA4ODA5Cis6MTAyNDIwMDAxN0Y2RTM1NDQ5MkVGMkEzNjc3NUVGNkRDMEZDMEE4QkQzCis6MTAyNDMwMDBEN0U4QTZFMzE4NkUyM0I4QkZFRUU0RjhFNzdBRjc5NjdDCis6MTAyNDQwMDAzMDNBMURCQzdGRTU1OTkwQzdDMUQ5MkEyNDc4QjY1QkM0Cis6MTAyNDUwMDAyQjI0MzhBN0Q0NkI3NzY3NzlBM0NBNzFGNkM1MEY3ODk4Cis6MTAyNDYwMDAxM0Q5MTc1MzUwNTcwMkZCRTE5NjQwQkZGOEZBRkU2OEE0Cis6MTAyNDcwMDBCRDA1RDYyM0UxQkNGODIxNkUwOUVDRDA3QzFCRUQ4N0FECis6MTAyNDgwMDBGMjdENzc1QUZDNzU5QzUyRDYxMTUwRUUyREQ0RDZGRkIyCis6MTAyNDkwMDBCRTQ0NzdBNUQ3QTlDMUJGNkZCOUNFOENEODc1NUVDMTMwCis6MTAyNEEwMDA3OTg2QjgyQjMwNEYzRTg3Q0VDRjEyOTkxRkZEMTNFRkEwCis6MTAyNEIwMDA1MUJCQzFBMjQzRkNCQTQxQkQxRkNBMTU3QjRFNDQ3QjMwCis6MTAyNEMwMDAyRTg0OTBFNTFCODFDRjdDNTdDOTc3QUQ0QUZFMTdGNDY3Cis6MTAyNEQwMDBFMzVGNEZGNTdDOTA2QjdEQzkzRkNDODc3Q0QzQTkyOTA2Cis6MTAyNEUwMDA2RDFEOEMzODVBQ0VDQzAzN0U2Q0UyOTBFRkRDNDg4MkI2Cis6MTAyNEYwMDAyQkUxRkRCOTRBREYzM0Y2M0NFNEZCN0YyQjE5MEZGN0U0Cis6MTAyNTAwMDBFOUZBNDZBNkQyRjJDN0ZBQUVGQ0M1NEVFNDhCMTc4MUIzCis6MTAyNTEwMDAyRjVBNDgxOEU5RUUwNkY4QkQ0NkEwQkJFOUZFMEUyODgyCis6MTAyNTIwMDBEMzMxNUFGMDlFMzA0QTg3NDBCNzJBMUQwRTlFM0ZBNUYwCis6MTAyNTMwMDA0QkZBRkREMDE2MUI5RURGREE0MjgyNzgwMDJGOEI3NDk3Cis6MTAyNTQwMDA3MUNDREZEMjgyNzI4QjQ4QzMyM0VCQTQ0NDNCRDVENDM5Cis6MTAyNTUwMDA4MkVCRjg3OTlCOENGMkUxQkJGNjI3MDUyOERGNUNFQTc5Cis6MTAyNTYwMDA3MzhDQTVGMzlBMzVGNjEzRkNCRDA3OTIzNTc3MjREODAyCis6MTAyNTcwMDA5RDc0QkVFOTYzRkY4MUYzMUQ3Q0FFRkVBQkYzQzhGRTI0Cis6MTAyNTgwMDA1RUY2RTg4NEIxQjFGNkE4MjNFOTZGOTgwNzI3NzEzNkEzCis6MTAyNTkwMDAzN0ExRkFFMzgwN0RBQTM3NjE1RTQyRTQxQzcyQjgwRTZGCis6MTAyNUEwMDBDRjNCNzMyOTVFOTA2N0VBMzk2NDJEREY5RDc0MURFMzhDCis6MTAyNUIwMDBCQjFGMkZCNkI5NTdFMDNEOTIzQkQwMkU2REJFRDlBMkJFCis6MTAyNUMwMDA5RTUzNDZGREFCNzlBMTRFMzlBN0NDQTE1QzY5MjIyNjZBCis6MTAyNUQwMDBCQzI3NjlFMEY3MkNFOTNGMkUyM0YyQkIzNEZCRTBCQ0JCCis6MTAyNUUwMDA3MkQ5NTc5RDU3OTZGMDNDQjRCQzlDQzVFOTA3RUNCQjJCCis6MTAyNUYwMDA0NjkxRDlBRkVBRUY5QkRDOUJBQkZFMEUwNUQzNTMxNjk5Cis6MTAyNjAwMDA5MzRCQjI2RkUzOUM2MzQ2QkQ5MUE0RTgxNEZCOTVFOTNDCis6MTAyNjEwMDAwQkREMTMyNDUxMjYxODVGNjU3QUY4NkMwM0Q2QUY0RjkzCis6MTAyNjIwMDBGMkUzRUYwNUQ1RjE1RDg4MjQwRDYzRURDQUZEMEY3RTYxCis6MTAyNjMwMDAzM0ZFQUU5OEMxNUQwODdDNDI4REIzRUVDRUY3MzU4Rjg4Cis6MTAyNjQwMDBBNUZCMzRBRkQ4OTNDM0QxQTVENDE5NThGQzk0RDJDMUZCCis6MTAyNjUwMDBFNjdFREE2QTFBNjk3OTBFN0U2RkVFN0FEMkYyNUI1REY3Cis6MTAyNjYwMDAxRUQyQzFCREYwRkRBQ0QxOUZCMERGQTE4QkQwQzE3RDJBCis6MTAyNjcwMDA0MDA3MjZDMkZDMDEzNzI4NzFBMkQ3M0ZERURFMDFGQkVFCis6MTAyNjgwMDA3RThFMjNFQzNDOUE0QjdCMUVDREZCQzNCMTJDOUVBNUNBCis6MTAyNjkwMDBGQzlFNTQyQ0RGODk5QUM3NzEzRDlCODc4M0U3NzExRThFCis6MTAyNkEwMDAyQkUzQ0Q2MzEwMUQxMjNGOEU0RkY3QjcwNUNGQ0I2QkQ5Cis6MTAyNkIwMDBGMDQ4M0IxRjZFRkZGRDc4OUU2RkYzRUQ0NEU0Mjc4MEVBCis6MTAyNkMwMDAxQ0VGMzcwMzNDODcwMTQ2RTRDMTNBN0RFQjYwOUREOTlFCis6MTAyNkQwMDA5MDYyMDk5MzU0RUNFQTQxRjNFNjJEQjhBRkI3Q0UxRUYxCis6MTAyNkUwMDBDOEQzOTk5MTVEMEU3MTIyMzZFRTUzQzk0REVCQzBFRjAwCis6MTAyNkYwMDBEMTdDQkIxRUY5N0JDREZFMzFBOEE3RjVDOTQ2MTE5MjRFCis6MTAyNzAwMDAyMEM5NjQ5NjVGRTNBNkZGODM3OUNEMjI5RTI5NzZEQUZECis6MTAyNzEwMDBDRjRENjIwRERFMEI3N0YzNzQ2RDVFOEVGQzUwMEI2RDRBCis6MTAyNzIwMDA3RjhCOTJFNzczRUJDREZBQTNEMUZBRTYzOUZEQTM3QTVBCis6MTAyNzMwMDA4MDgzNUM2NzY5RTEyNzQyN0Y0MkE0QkQ3MzMwNUMwNkY5Cis6MTAyNzQwMDBERDRCRDVDMUY4MTNBMTdBMEVGNERGNUUxMTQwRkU5NDgzCis6MTAyNzUwMDA4ODRGRUQxRDNCNzA5RkRDQzg2Rjk4RUY3MzcwMkNFMkMzCis6MTAyNzYwMDBFRDU3RTdGQjZDNTdFRUIxN0E0QjFGQzZGQjUxREY0RUJFCis6MTAyNzcwMDA1RkIwNzkzMTVERTdDODFGMTVFM0VGMUI0RkM5QTg3RjM0Cis6MTAyNzgwMDA2RTJEMkRGRjc4RDMyODJDQkY5RDcxRkJEMkY3QTBGRUI0Cis6MTAyNzkwMDBFOTQyMkM0RkQ2N0QzMjA3RThDMTU1M0VGQjA2Rjg1RDc1Cis6MTAyN0EwMDBFOEI3Q0NBQzlGQUMyNDVGNzcwREZEMkVBQjI0NzcxQzMzCis6MTAyN0IwMDA1QzYwMzNEOTEwQzZFRjZFMUNEQjc4MTVGODYzMjYyN0YyCis6MTAyN0MwMDBCMUYyQTFEMjNGOENDMzcyQUU1MjFFRjdGQTI4MjhCRkQ1Cis6MTAyN0QwMDBDNTdEMzIyNzFFNUYxQ0VERTI4MjQ1NTRERTRFNEU2NUZDCis6MTAyN0UwMDBERjRGMUZGN0ZDMTBCMEUzMjc1N0IxRjI2ODc3RTVFQTM3Cis6MTAyN0YwMDAzQ0E4RDc3RDNBMjc5RUJFNzQ1NkUxQUI5M0JFMzhENzJFCis6MTAyODAwMDA5MUU2ODBCMDMwRkJCREUyRDczQzFGRTJFRkNCNzhBOTY4Cis6MTAyODEwMDBCQzg1RkIwNkJDMTUyQzBFRTdGNTk0MEFGMDdCNjY1NUNCCis6MTAyODIwMDAxRTU2QUVCNkI0NjUwMzFGOUNFMTMzOTQ0MURDNTVCNDJCCis6MTAyODMwMDAzODNCNDREQTJFQTVBMjcyM0NFQzdCMzU1NUI3MjFDRTRECis6MTAyODQwMDA0OUU5RUI1M0E0QUZBQjNGQzlCMUExNUVBQUQyOTdBOEE3Cis6MTAyODUwMDA0NzdBNEY3Q0FGRTRFNzZDREY2MkU5ODFGNkY3MDVDQTlGCis6MTAyODYwMDBDRjZCNjJFNUU3MjA3QUQ1RTBFMUZGMDA4QjdGNDJDNUMwCis6MTAyODcwMDAwMDgwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDI2Cis6MTAyODgwMDAwMDBCRUQ3RDBCNzg1NDQ1RDI3NjlGMzk3M0NCN0Q0MjlBCis6MTAyODkwMDA0MjQ4MDg4NDA5Rjc0QkMwMTkxMjIwNUMxRDAyNjQ1OTk0Cis6MTAyOEEwMDAwNTBDMTcxNTE0RTEwNDEwMDJCOThERTBFRUEyRUI5QUE1Cis6MTAyOEIwMDAwOTAxNDQxNzc3RTM4QUNBMkFFODgwODBBMEM4MEUwQTczCis6MTAyOEMwMDBDODZBNjQ0NzY0MjM3RUJBMUFBRkVCRUQ2MzEzNDVFNTJCCis6MTAyOEQwMDA0RTBDQTJCODlGRkZGQUQ3NUI3RDBFOTkzMzg0MDVCRkRCCis6MTAyOEUwMDBDQkYzRUNGN0ZDM0YzRTNFOUQzQURERTc3NDc1NTU3NTQyCis6MTAyOEYwMDA1NTc1NzU3NUNGNTVDRTRFRTE1RkU2MDkyMUZDODkxRUYxCis6MTAyOTAwMDA0NzNFOTVCRDZEMjcxQTdCMEJGRUY3NDM1NzU5MkE2OTQxCis6MTAyOTEwMDA0Mjc0MTBGQUJGOTUyMTQ1NzQxM0EyOTMwODcwQjk1RUYyCis6MTAyOTIwMDBENDJBNDIxNTYyQjI1NThCRjcwQzEyQzI2RTY5NzBFMzVECis6MTAyOTMwMDA3OTE3QzVEM0Q3NDVDRjQ1QkVDNzU5RDQxRjJGNzY0QTdGCis6MTAyOTQwMDBGRUEyOUY0MDUzRjFDMzk1NDI5Q0I2N0Q5MjJENTI4NUM1Cis6MTAyOTUwMDAwOEQwMDM3NTM4M0RGNDg5RUVBOUQ0OEY4MkE2NkVEOUNDCis6MTAyOTYwMDA5NTk1RTA0Q0EzNUZBMUI4NUM2OUU4NTdENjJCNzU3RkJECis6MTAyOTcwMDBFNUY3RDczOUU4RkQwQ0VFQkY5M0E3M0RGMDkzRjhBQzJGCis6MTAyOTgwMDA1N0ZDNUNCQTg0RjZCOEEwRjE1NUE0MEJENzNENUVCQ0U5Cis6MTAyOTkwMDBEQ0I4MzI0Q0VGQTVEMzg4RUZGMTEwQjhENzNDREU5QTAzCis6MTAyOUEwMDA3Q0NGQTI2NEY1NDI3QzJEQ0VFNjU5NjFGQUNFMzQ5MUZCCis6MTAyOUIwMDBFODUxRTlGREY3OTYxNkI1RjcxMkIyRDcwOUJGMERFMzU2Cis6MTAyOUMwMDA3RDI4MkUzMTkwNENDRjJCRTcyNDA0MURGNDdDNjcwNzIzCis6MTAyOUQwMDA2RDAwRThBMTVBMDIyRjM2MTI3Q0IzRjBEOUQxNkVCMjQ1Cis6MTAyOUUwMDBENTc3MDU5RUM3MEJGOUJEMEFGQURFM0QyODlENDQ4RkI5Cis6MTAyOUYwMDAzQzg5ODcyM0EzMEQ3QTQ0RTExOTNERkU1NkJFMzQ2NDE5Cis6MTAyQTAwMDBBMENDMTA3RTg2RDM4NTY3OTVEQUM2Nzg4NEQ1N0Y3NzhCCis6MTAyQTEwMDAyM0JERkYwQjM1QTFGNjFFMkExRkIyRkEyQzFCQThGRkZGCis6MTAyQTIwMDBDMEVCQjZFMDY2ODVDNzIzODBDRkQyNEYxMjM2M0FCMkVDCis6MTAyQTMwMDBBOUI0MEE4Njg1QzdDMUY1NEI2RTI2RkNFOUJEMjU0QUI3Cis6MTAyQTQwMDA5NjI3NDBDRjZCMTJGQzhGRTE3QkNERDU1NkIxMzExNTY3Cis6MTAyQTUwMDBERkY3NkQwMEZDN0E3NTc3ODFGMTQ1OEYyN0JERjZBNzBBCis6MTAyQTYwMDA0MjRCQTE3QUM1RkYwNERBMDVBQTFEQUVDREQ0RUVEQjM4Cis6MTAyQTcwMDBEODdGQ0NEREM4NzQ0ODJBQjI2NTExMUMzMzY5NDMyMzYyCis6MTAyQTgwMDBDMThBRERFOTUyODg2OUU5NzNEMjU5NUVEN0RFNDI3QzlBCis6MTAyQTkwMDAyMEZFMDUwQTQyRERFNjAzRUY0NzU1NTFFMzhBQTQwMzExCis6MTAyQUEwMDA2MTkyREQyQTlGRUIzRDQ0QjRGNjkwNjM4MzFFMDEwNURECis6MTAyQUIwMDA3MjY5QjcyOEIzOEJFMjg5MjZGODc3NjU2QkI5REU2MzU0Cis6MTAyQUMwMDAxMTgyRjhENDNEQkZBMzBGRTM1RUUyMTUxRUM4MEZEMUZCCis6MTAyQUQwMDA0MTAxRERDNTVFNDVBNzAzQzkxM0VBMTU5NzNGRTBCQTdBCis6MTAyQUUwMDA5MDRGNEIxQkIzNkY0NUZEN0UwQkUxNEI2NTAxRjEyQjA2Cis6MTAyQUYwMDAwNUVGQzdBOUYyN0RDNUQzMjE5OUZBMkY0ODEyRkUxMDIwCis6MTAyQjAwMDA5NTRCNjJEQ0I3NDZEMjc1QjhDNTMyQkIyODQ3N0VDRjNECis6MTAyQjEwMDA0OUY0OUJBRENGMDYwM0NGMzk2QjU1QTFFNTBBMzFDNjA5Cis6MTAyQjIwMDAzOUY3QjFDM0I5QzA3NzU4ODdBMjg0ODhGQTdCRkFFNDMxCis6MTAyQjMwMDBDQ0ExRjc1RkI2ODlFOUY4QkU2NzdGRUY5Q0UyMUMxRTY3Cis6MTAyQjQwMDA4NzJGOTRDMzdDNUMxMTAyRkVBM0QzM0QwMTBGRjA2QjcxCis6MTAyQjUwMDA1RUUxMDE3RUFBNjhERUVDMDExRTAxNDcxNkYwODlDOTFDCis6MTAyQjYwMDBGNDA0MDRGMEFDMTVCN0U1NDVFMDFGNDNGODAzQkYzQkEwCis6MTAyQjcwMDBDNkY5MjJDNzZERTA3RDMxM0NBM0U5N0QzMTNDMjEzOUE2Cis6MTAyQjgwMDBDRUMxNTRBRkNCQ0QxQzY3NUM5MzMyMDBBNTFBNzY5MEIyCis6MTAyQjkwMDA4ODhBNTVENEFGMzM1MjVGNDVDOUI5MDgzMERGMjcyRTM0Cis6MTAyQkEwMDAxRDUzNzQ5OEU0MkRENTRFOEYyMEE3QjcyNTA0MzcxMkY2Cis6MTAyQkIwMDBGRTEzNkYxQkNEQ0Y5NTI5RTc1ODlFREJEMTdDNzQ1MDU3Cis6MTAyQkMwMDAzOTY2QkM1QjY5MjQzQ0RBRTVCRDY1MTVGRDIxQTc4NDQ3Cis6MTAyQkQwMDAxN0YwQjEzNjBFOUE0Q0Y0M0RENjU1N0IxMkZBQzZDMEFBCis6MTAyQkUwMDBGRjJGODM5RUYwNkE1NDdGQzgyMjRBNDIzOTE3OEU2RkE2Cis6MTAyQkYwMDBCNzJFNEYyRUQxNjg4N0RDNTUzOEUzQzNFQTgwMEJFNTRBCis6MTAyQzAwMDBFNTYyRjhCRkQ4QTFFODM5RTg4RDkzNEFDMzYwNTQ1NjBECis6MTAyQzEwMDBGNjc2RjE3MzIxQjQ2QzdDMkZEOTk1M0QzQTE5N0FFMjlFCis6MTAyQzIwMDA3QkVBNkYzMEY0MTRGREEzNzlEMEI3QkJGNjI3QkM3N0VECis6MTAyQzMwMDBCRDI4MUE2N0E1RjFCNjFCQUZEOTM0MUFENzM4MzU5RTBGCis6MTAyQzQwMDBFNzczQ0I3Njg1RjVENTU4NUY4QzA1NzRBOTNDNjgwQjg2Cis6MTAyQzUwMDAwNjA5NUVGQ0FBQ0E3NDVBQkM1RTBENjJEMkI2MDhDRkUxCis6MTAyQzYwMDA1QUNDQzM5NjgwQzMwNUI5N0MyODZFQzA2RjQ3NTBGOTEzCis6MTAyQzcwMDBEOTdBOUJDNzgxN0UwM0JFQjc3QjUzQkZGMzc0M0VGNTAxCis6MTAyQzgwMDA1QTZCMTE2RTgzMkZGNDdGOUY2MEFDNzBGNzZFODVGQkRCCis6MTAyQzkwMDA2RDZENjc4MkZCODczQTlBREE1RkIxQjdBQkE5REUxQjJECis6MTAyQ0EwMDBFRTZCQUFDRjNEMzhEMDA0MEY2QTE4NjY2QTNGRTQ4MzAyCis6MTAyQ0IwMDAwMjEzM0NCNEYxMkE1M0ZCRTE0N0E2OThFMDkxQ0QzN0NCCis6MTAyQ0MwMDA5OERBNUY3OTZFOEVBOUJFMzRCMUIwN0UyOThEQjczRTk5Cis6MTAyQ0QwMDA1RDE1MEFEOUM5RDFBMkQ0RDRCRTU0MkRCMzBCNjJCMUFCCis6MTAyQ0UwMDBBOEI1N0QwQTc5RjREMzdGQ0M0Rjc1QTYxNTc0M0VCQjg5Cis6MTAyQ0YwMDA1NzExMjlBNDhGMTZBQzk1RjVDNjdCMjU3NUY3QUQ4NEMxCis6MTAyRDAwMDA4RDVCMTgzNDNGMkYxNUQ2NTYxOEZBRjc5Mzg1NkYxRTMyCis6MTAyRDEwMDA4OEU4QUY1NzZBQjEyNTk5Q0FCRjdCMTI1MjIxMkY2MjRBCis6MTAyRDIwMDA4ODE4RjI4M0NBN0NGNTQwREZCNEJDQUI3QTFDNDIzNzBBCis6MTAyRDMwMDBBNTA0MkY3RTVBMDlERTQzN0NFQzI5N0EzQzA0QkUxMTlGCis6MTAyRDQwMDA5RjQ1RDAwREJFQ0FGQTk2NzU2QTMwNDBGRDdDNUI1NTMyCis6MTAyRDUwMDBGMkU2MDExQkMxMDc3M0Q3NDIyRjJGMjBCRDBDQkRFNTQyCis6MTAyRDYwMDA0ODM3RjMzM0M2NkRFNjY3NUM2RjMzM0YxMzNDNjY3RUNFCis6MTAyRDcwMDAyNkU1OUJGOTk5RUMzM0YzMzM2NUJDOTk5RkVEOEJDQzM5Cis6MTAyRDgwMDBGQ0VDMzBERENDQ0YwQ0NEQ0NDRkNDMTIzMzNGM0JGQkI5Cis6MTAyRDkwMDBDREZDRUNCMkQ0Q0NDRkVDQzAyMjUzN0RCNEZDNzY1QjNFCis6MTAyREEwMDBCNUQ4NTRGRjUwRENCRTJGMzRBMjQzNkE0N0Q1RTVBMDA2Cis6MTAyREIwMDBBOUQ3QTNGNjc2RDNGNzg0M0FDMUJFODJFODU1OUFBOTdCCis6MTAyREMwMDAwQUQ1RDUyQTA3MDFGQTRGQ0U2QjNGQ0ZBRkY5MjQwN0JBCis6MTAyREQwMDAwRjEzMUZDRThBRDVGNTk5RUUwQkU1QTE2MkVGN0Q3NjM0Cis6MTAyREUwMDBDQ0NGMUYyQjBGQzNCRDY2MzkyMEI5NEJEMkRBQjA2QkU1Cis6MTAyREYwMDA0NjY5RjA5OUZDOTFEMTVFRDIwRkQzQkNEQTU4MkZFOTI1Cis6MTAyRTAwMDA5M0U5QkRCRUNBQjI5MkRFMTA0NUM1QkQ2MDQ3MkVDNzZDCis6MTAyRTEwMDA0RkIxMEVGRTExN0VDQUE0MTBEQkUzOEJGQTI5RUVDRTcxCis6MTAyRTIwMDBBREZBOEY5REJGODAwNTdBRjlDMzc5MzY5NkRGNjU3MTVCCis6MTAyRTMwMDAwM0I2NDMyRTNGQTg5MTcyNzkwNjREODYwQTcxODMwODI2Cis6MTAyRTQwMDBCMTFGRjY2MUVDMjM5REQxNUYwMTExNUMxOThBQ0FEQUNBCis6MTAyRTUwMDA5QjgwRkY0Q0UwNEZGNkVDMjZEMTY4QzNDN0M5OEVEQUUxCis6MTAyRTYwMDA1MTE2MEIzNzk3NzM3NUZGRUM2NjExNUU4OUMxN0M5MjIyCis6MTAyRTcwMDBBQUNEMDc1RDJBNTRBRDRCMUFFOEQxQTkyMThCRkREODA0Cis6MTAyRTgwMDBENzUzODBGNDQ1RTk2QUU4RUI3N0YwMjdCNTdCQzQ1QjVDCis6MTAyRTkwMDA1NDgxRUY4QzcxQkE2RjdEQzAwRDNGODBFQzAzRjE0NTFBCis6MTAyRUEwMDA0QzQ4NjFCQzg1QjVBOEZGOTRGRTZEN0Q2NzE5REI4QjJFCis6MTAyRUIwMDAxNzE0NEQwM0JEMDMxOTRFMEZFQ0FENDgwRjNEQTNEMEMxCis6MTAyRUMwMDBGOEZBQjY3MzBGQkMyN0I5QjVGREFGQkM4NjdEMjFDNzM0Cis6MTAyRUQwMDA4NkRBM0ZCOTJCOTZFOUQ1QUZDMzg2NzYxOEQ3OEZFRDQyCis6MTAyRUUwMDBGNzZFQUY2RjM5RjAzNkRBNUY2QUJDNzZCQjY3RDFDRjY5Cis6MTAyRUYwMDBBOERGNjY0NUY4MzcxMjEyRUZFQTdDQzk3NDQ4M0YzMTAzCis6MTAyRjAwMDA1MzRERjRENDgwNkY3MUIzRUFEQjEzMUQ2RUVEQTBGRDU5Cis6MTAyRjEwMDAwRURGOUY3RUZENEY1NzAyNTZGNkE3QjgxNzEzN0VBNzA4Cis6MTAyRjIwMDA4QjFCMDcwMzVGQTJGRjgzQTgyRjczMTJGRDY5NjgyNzFECis6MTAyRjMwMDAzQjZCQkQ5MjIwMTQ0NTkyRkVGNDQ3RkZBMjM2RjE5N0Y5Cis6MTAyRjQwMDBGODFDRDBFOUZGNjIwN0VEMzFDOEY1N0U0QjQzOTYwN0M4Cis6MTAyRjUwMDA3Q0I0MzYwQzY2M0VCQUU0Qjg0RURBMjU1RDJFNDY4NzYwCis6MTAyRjYwMDA4MkI4Q0UzMzQxRkY3OTBFODc0NzI1N0ExNjI4RjJCQjA3Cis6MTAyRjcwMDA4NzkzNjZDRkFBMjRCQzZGQjYxNEE1ODU1NTEzREU0RjgwCis6MTAyRjgwMDBBM0JGQjJGOEUyMkUxOUMwREJBNkUzRUQ2Q0FGRDNERDMwCis6MTAyRjkwMDA5RDEzRTk5RjQ1RTM1RDgzRUZDMzFGRkUxNUY5OTdEOUE0Cis6MTAyRkEwMDA3ODFFREUwNkY4MzlFMUUyRjU4QkMzMjJFRDcyNzNCNUM3Cis6MTAyRkIwMDAxMkRDNDhGNTZGRUE3NDVFNkZBMzc2OTg5NzRFRDFBRTM3Cis6MTAyRkMwMDA5QUYwQkI2NkU0OEEwRDY4Rjc2QkNEQzk3ODZGMTY5RUUwCis6MTAyRkQwMDBCRTZCQjJDMTBGQzFGQTNFRjMyRTI1NTg5MzBEQkZDQTg2Cis6MTAyRkUwMDBDMzcyM0Y0RjE0NjVFREEyNzZBRjc5QjU3QUUwRkZCN0IzCis6MTAyRkYwMDBCODdGMENDQUI2RjAzNDFFRjQyRTdENjdDRkIyMEU5RTk5Cis6MTAzMDAwMDA3QjAwOERCODNDRjlFRjREOUEwM0ZENEY5OTI4RURDRTJBCis6MTAzMDEwMDBDRDNBRERBNjg5MjI5RUE3QzZCQTg5MjZGQ0M5MEE2QUNFCis6MTAzMDIwMDAzNzlERkVFMkY1OTg3MEY3MDc3RTMzMDA3QjVCRTdGNThFCis6MTAzMDMwMDA0Q0QxQzBFNTJDRTFFMkY1RDREQkQ1MUQ3RTc2MUJCNTg1Cis6MTAzMDQwMDA5OTYyNjlDRUIyQUI5OEE3MzQ2RkIzOTlGRUZGMEVCOUZGCis6MTAzMDUwMDBGOTY2REM1Qjg3MTREMEZEMEVEMjYzRTBGNzlBRjY5NzMxCis6MTAzMDYwMDAyNUM3OTMxNTQ5NEY5QUI3OUZFQkYzMzYwRjUzRUJGQ0U3Cis6MTAzMDcwMDBGQzE5REI1RUNBOUZENUQ1RTM5RkNEMUY1MjhDODkxOTAxCis6MTAzMDgwMDBFNEFGRkY0NEFBNDJGMUQwOTk0NDkxNEFFMzZDRThBQTI0Cis6MTAzMDkwMDAwNkIxOUUxQUE3REU2MURENDVFMzZDMjA3RkMyODE3MTE3Cis6MTAzMEEwMDBGQjhBM0I5RUE2RkFGMTY0NkZFRjkxRkEzNTIxNDBGMDVFCis6MTAzMEIwMDAyNDlGMkFFRTYxMzk2ODVDQkU5MDlFQkY5RTRGRjVENDc2Cis6MTAzMEMwMDBGRTk1NkE5MTkwNDdGMDJCNUU5QkE3ODZFNDcwREMzOUYxCis6MTAzMEQwMDBFRDQwMTI5NTkzNDhFRjg3QTlGNTU1RTlGNzhEODU3RjY3Cis6MTAzMEUwMDAzMEJFMTNEOTkxMDgzQjcxNTU3NzMzNEMxM0ExMTNGOEI3Cis6MTAzMEYwMDA3NEI1NEVFRjA5Mzk2NkJCMzMwOTc2Qzc2OERGODZEREU0Cis6MTAzMTAwMDAyMUZEQUE4MkJFNzEwMzc1RkJEMzU3RjQ4NUZENzlCOTAxCis6MTAzMTEwMDA2QUFGRjg4Q0VDOEI2MTg3QzYwOEI5REVCODk4MURCMjJGCis6MTAzMTIwMDBEQTBCNTIwNkIyM0ZFQkI2NjM3RUNDQzFGQTA0RjQ3NkZBCis6MTAzMTMwMDA2OTFEMjc0N0NDOTdEMjIxMEFGM0M5NEQ4NkM3NDJFM0MwCis6MTAzMTQwMDA3RkYzQTAxQTA0N0RBQ0JFRjA3MEQwNkZGMThCMEFDQjc4Cis6MTAzMTUwMDBFOUQ1MDNCNUFDODFDNDg3NTNCNkM2Rjk5MDlCODYxMUY3Cis6MTAzMTYwMDBCOTQ5ODJGQUZGQjQ4QTEwRTk0NUYzQjdDQTI5N0MzNDE5Cis6MTAzMTcwMDAxN0JFQTg3MjMxN0NBNDJBOURDQjYzNTU2RTJFNEY1NDg2Cis6MTAzMTgwMDBGNUU2RkE1MzU1MUU4NkNCMDcxNkY1MDI3RTczNTY3RDdCCis6MTAzMTkwMDA2NTg1OUZFRjE2N0VGNjhGOTZEMDdBMTdGQzVBOTJCMDBGCis6MTAzMUEwMDA1OEMyMzZBNzBCNEFGOEFFQ0VGNTk2Mzg4MkVGMEEyQUY3Cis6MTAzMUIwMDAxRUQ4QzU4NUJCODIyQkUzMDhBRkQyM0E5RjNEOUVFMDY3Cis6MTAzMUMwMDAyNTlEREI4RDg5NDdGQjA3MTQ5NkZBRjkwN0ZERjUxODU1Cis6MTAzMUQwMDBFRUE5NzczRkJENkVBMjY4MUQ2RkY5Mzk4NUQ3QzlFRjlCCis6MTAzMUUwMDAwRkYyMEQ0NkZGNUY1NkU1MzM1RTQ3QUI3QzhDOTdBRjIxCis6MTAzMUYwMDBBRUE5M0U4NUJFNzdCQzZBM0NDMzc3MEQyQzFBODE3MTlGCis6MTAzMjAwMDBGQkM0NTdFQzQ3NENEQ0RFNjQ4NTlGMzFDRUE3RjhDMDg5Cis6MTAzMjEwMDBFNzUxM0UxMTBDMTJCREQ2REFBNDVENTk0Qjc2MDU3QTAyCis6MTAzMjIwMDA2MDc0RkYyOUVCNkYxNUQwRkI1QTIxREVCRkI2REREQ0UxCis6MTAzMjMwMDA3MUYwNTcyN0U1MTdCM0ZGN0FGREY3ODJGRDU3NDNGRTdDCis6MTAzMjQwMDAyRjM1OEZEQ0EyRTE1NDI2RjU3NzMyMjBFOUQzQjJFQjlCCis6MTAzMjUwMDAxRDg2NUJBQzQ0MUYxQUYxQkU1REE1QTU4MkZDODM5NjVBCis6MTAzMjYwMDA3MzZGQ0JFN0Q0OEVGREQ0RERCMkRENjI5QjZDQjc3ODkzCis6MTAzMjcwMDBGN0FGREJGOTAwMkJBMjU5NDRBQ0I3OEUxMzFGODUyMzlGCis6MTAzMjgwMDAwMjdFRkExN0U5NUE4NDdDMUQ2RjE3RkFFNjIzRThDOTEzCis6MTAzMjkwMDA3RkI3NzgzNkIyOUM2QTlGM0QwRjNEQkFEQ0M1N0FFNkFGCis6MTAzMkEwMDA5NDJERjRDNUMzRDBCMzlEQzlBRTcyQkQzRjZFMEFDOTlCCis6MTAzMkIwMDA1OTg1NUQ2ODJDNzc0MkVCMDdGODc4QUNFMEY4MDBGQUE2Cis6MTAzMkMwMDA3M0Y3OTJDRjIxOEYzRDc3M0NENEY1OTdFRUQ2RkVCNkJCCis6MTAzMkQwMDAzQ0ZERkI5NkU3RERBODBGRjJGQ0RGQjY2MzdEQzc0NzM4Cis6MTAzMkUwMDAwODJBREJCOTIyMTY3ODdENzZFRjczOTkxODVGMkY1NTdGCis6MTAzMkYwMDBGODU1OUE2NzczN0ZGM0M3Q0MzRjUyRkY0RjkwNkU0MUVBCis6MTAzMzAwMDAxQ0UzMDU5QkU3RDQ1RUUwQjM5RUYwQTFFRjNDNzE2RjM4Cis6MTAzMzEwMDBGOTQwRThCNzc5QkY1QkQ4MTdFRjA3MDY1QTk4QUU0RjY4Cis6MTAzMzIwMDAzREI3OTNFRDNGQzk5ODY3MENFOUE5RkU2QjVFNUE5NkNECis6MTAzMzMwMDA0MUVEQUY1OEQ3NjRFOTQ4QTU3NzkzNTI4M0IyNzRGQjQ3Cis6MTAzMzQwMDBDRUI3QUJBOUJGNUM5N0M1MEY3Rjc0QzU0MDM3QkYzRkYxCis6MTAzMzUwMDAzMEI0NjFBMzAyQkRGRUZERTMxRDMxQ0Y3MkQ2N0M1NUIyCis6MTAzMzYwMDBEMDUxNUNEQzZGNzgyQUVCODM5NjYyMUU1NzJEOEY2QkYxCis6MTAzMzcwMDA3N0RERDQ3NzZFMTRGMDRCQzgyMzAxQkVDNTc2MEZEQjIyCis6MTAzMzgwMDAyOTFBQjYwREZDREVENTZEMDNERURGNjMwOUIwRkQwOTM5Cis6MTAzMzkwMDBDQzkxN0VDQkM5QTJDMEVGMzFGRTcyNkExRjIwQjhEQzhGCis6MTAzM0EwMDBEQkQwNzQxQkQ1OTcyNzc3MTU4ODNCMUMwOTJFOTk4MTk0Cis6MTAzM0IwMDA3QTlBREUyRUQwQTc2MkQ3MDM4NTFEMDkzRTM5NDI3ODVFCis6MTAzM0MwMDAxNEVBQkY2NEY3OTk0MkI2NkY5REM5RjdDNkY3NzZENTgwCis6MTAzM0QwMDBBNEREMDBGQjk2NTMzMDQ4QTVGQTIyMzVDNEZEODk0QTg2Cis6MTAzM0UwMDBEOTVGNjVERDRFQTdFMEY1QkM2OEE3OTIyMjRDQUUxQjA1Cis6MTAzM0YwMDBGRDcyNjYwNDdGMkM4REJGQzlCNkQyRjdEQTkzN0QwNEM3Cis6MTAzNDAwMDBCRTZCQjMwMzE5RkVGODU2N0JGQTlBQjc2ODBCRUIyMzMxCis6MTAzNDEwMDBEN0ZEQzVGOENFRTc4NDE3RkNBRENCQjU3Rjc2OEI3RkEzCis6MTAzNDIwMDAyMUUzOTMyRTVDODFBMUFEREZFRDZDMDkyRkM0Mzg0OEY4Cis6MTAzNDMwMDBEQTVEMDFGQUNFNjY1N0MzMEM2RTQ3RjA2RkI5NUY2RDY3Cis6MTAzNDQwMDAwRkU2NUZBNjRBNTQ0Rjk1RjZCQTA2RkRCQUE2NjY4MTA2Cis6MTAzNDUwMDA1Rjk3REJGRjQzNzFGRjYwQkZBQkQyOTJFODcxRTRCNUM5Cis6MTAzNDYwMDBGQTJERDM1MzZBNUU2QzI0N0U2REU4QTBFREM3Rjg4QzBDCis6MTAzNDcwMDBCOEE0QjA3QURDRDBFMzgxMEVCRTk3RjFCQ0NDNDk3NjFCCis6MTAzNDgwMDBENUMyRjZGNDE1QzA4NjFGN0NERTBGNzM1RTlFM0RERDRGCis6MTAzNDkwMDBEOUMxRjcxN0E2RTM2NUI2NzdFQjcxODZGMzdBRjVFQzM5Cis6MTAzNEEwMDA0MDkzNUVBRDQ5QjAwQjJGM0RBRjU5RTNFMEI4ODQzODhGCis6MTAzNEIwMDA2MDI5QUJBN0Y1Qzc0ODdDQzJEMkZBQkQyNTA5MDMzQkZBCis6MTAzNEMwMDA0MERGRDcwOEQxMjZCREY2RDE3Q0Q2ODhCNjYxQjIwM0RECis6MTAzNEQwMDAxQUNERUI1MUU3OUE1NThERTc3REMzQ0I0OTc5RDA5RjQzCis6MTAzNEUwMDBDMjk3RTA0NjFDQzAyMkI0MDg3QjE3RkQxREUyRDcwOTM1Cis6MTAzNEYwMDBGMDZCQjQ4ODEzNUE4NERERjQ4OTY0M0JFNkFEODg2RkMxCis6MTAzNTAwMDA3Nzk5RTMwRTNGNkVCNjI3RkIxRjhGMUNGNzg4OTYwRjQ3Cis6MTAzNTEwMDBFMkUwNTIxMTNEM0FBMEJDRDhCODVFRDRDN0Y1Mjc4QzgyCis6MTAzNTIwMDA4QkNBNzk0MzhBRkUwMUZDNDY3RUVEQjI2MjdDMjNBREY0Cis6MTAzNTMwMDA5M0IzQkM1RDE5NkY2QjJFRjUzQkVBNkI4QjE5RUZFRjA0Cis6MTAzNTQwMDA2MzRERjBFNUUyRkYzMzg1MTY2QTkwRTNBRkVDMUMxNzlDCis6MTAzNTUwMDBBQzgzRURBNzcxRDQyRENDMDk2MkJFRUZCMThCODAxMzgzCis6MTAzNTYwMDBFQjk4Mjk3NkY2NkJFQjEyMDIwOTdENTFBRkI4NDI4OEQxCis6MTAzNTcwMDAyN0JENjA2Qjk4MjFENzM5QzJCNUQ5MEJGOTdERTMxMTBFCis6MTAzNTgwMDBDOEZGMEQyRDc2MDVGMUE5OEUwRUYxMDVGQzI1QTEyNkFCCis6MTAzNTkwMDA4OUNEQTkxMURGNkZFRkUyQjg4NUVBQ0M1QzhGQjg2MjA0Cis6MTAzNUEwMDBERDUwRkRGOTBDM0IzRkFGQjEwOUI2N0I4MTE5QjE4QzAxCis6MTAzNUIwMDBENzlBNjRGRjZCRkRBOTdFNERCNThDNjc3RTIwODJBQkU4Cis6MTAzNUMwMDBCQUEyRkUwRTk1RURDMDcwQ0JDNkNEMEY2MjFEMzMzOTg5Cis6MTAzNUQwMDA5REVEQzY5QUU0NzA2NjI1REEyRkVDRUIwOTkwM0NFQzgxCis6MTAzNUUwMDBGOTg3Q0FGNjYwOERENzk3RDEyRTFFN0E1MEM2MDVEN0I3Cis6MTAzNUYwMDA0Q0Y2NjVDNEE2QTI0Q0IzNjBCQzFENDlDRkYzRjM2Qzc2Cis6MTAzNjAwMDA2QTQ3RTU0NzM2RDlFRTQzOUQ2RjQ0RTkwQ0U4REI4NzBFCis6MTAzNjEwMDBFN0Y1MTBEMDNGNTdFNzE2OENDQzY1RkY0N0M2M0JBRkE4Cis6MTAzNjIwMDA5NTJDMTAzMzZFN0U4MEUzQUQwRjZCNkE1MENEMDY1RDM2Cis6MTAzNjMwMDA3RTczNkY0RjgyNkY5OEEzQkExMDc3QkJCNjI0ODZFMzcwCis6MTAzNjQwMDBBMUQ3NkE3QTNDNzQ5QTM5MEU3Qjc1QUU2RjY0MkVGMUZECis6MTAzNjUwMDBCRjNDRDRBN0RCRTEwODM5OUU3MTczOEY5RjQzM0Y3QzQ5Cis6MTAzNjYwMDAyQTY0NUNGQUQ3NjlEQTM4QjQxMzdCQkREQzZFMkYzOTczCis6MTAzNjcwMDAyQjNGQzA0RTM4REQwM0Q4N0Y5RTY3QUMxQkMzNzM0MTIwCis6MTAzNjgwMDBERjdEQ0Q0RUY2NEIyRjI2MEY0Mjc4OUM3REU5RkIwRjU4Cis6MTAzNjkwMDA1QTQ0MDhGMkRDMDVGQzQ5NjFCOTBEQzA2RjBCODQ2MjI1Cis6MTAzNkEwMDA1ODBFQzY0RjcxNzI3Q0JEMjVERUMyRkIwQzhGMTFCRjU4Cis6MTAzNkIwMDA2MERGMDJCQkU1M0UwMzI5NEFFNkRGODNGQjNBQjM1REU4Cis6MTAzNkMwMDA5QUFERUJCMTlBRTlCMUZDNUVDRDRFNUJEMDAyM0UyQkQ4Cis6MTAzNkQwMDBDMTZENUJGMERFOEIzMTZDM0ZDQkY0Mzg2RkQ5RjNGREZECis6MTAzNkUwMDA1ODBFRjZEODdERDkyQkQwRUYzRTA3RjNCOTJDRDE5RERCCis6MTAzNkYwMDBDNEY1RkY5NjIyNTBGRjgyMUU3NzJFOEIwREY3NDQzQ0I3Cis6MTAzNzAwMDBCQjVCN0I2RDNFRTg0MTcyQzc3MUY5MzJCQjdDN0UyOEEyCis6MTAzNzEwMDA1OEMwRkIxQTgyRkM5NUI4NTEwNDBCMUZFRjRGMDRDODI4Cis6MTAzNzIwMDBBRkQ5RUM5MUZDMDM1RTVBNERFNzhEQzA1NzIzM0NDMEU2Cis6MTAzNzMwMDA2NzcxQkI4Qzk3MUZBMkI5OENGMTFERjI3NzY2QkM5NEEwCis6MTAzNzQwMDAyOUUzMzM2RUE2RkFDRjE2Qzc3MTFDRjU1MDUxRkQ1OTA3Cis6MTAzNzUwMDBGODAxODdEMjU1OUVGN0E0QTFFRTFENDJGNTY0NzMxQkI0Cis6MTAzNzYwMDBFRTIxQjg3MkUxQTc2RjBDQTFBNzE1MzUxRjY2RUQ3NUE0Cis6MTAzNzcwMDBCN0QyN0RFNkIyRjIwOTgyRTQ2MEU2QTIzQjI2ODlDNEI0Cis6MTAzNzgwMDA4QkNGRDc5OTY1MEVBQzExNUJFN0I3QjA2M0IxMjY2MUZCCis6MTAzNzkwMDBEMkVCNkI3MjdEMzU5MEMzNTBBRUI2MTJFM0FGQ0MyMTQ1Cis6MTAzN0EwMDBGRjk5RTRFODk0QkRFMTUxQzQ0OThFQkFCNUJCNTE3RjlECis6MTAzN0IwMDBGQThGNUY2RUMxNzM2MTZERUVDOUYyRTE2QzJDNDQ5Q0FGCis6MTAzN0MwMDBBNUNDMjJFMzQ0QTNGM0I0REZFNkIyOUQ0RDY0RkU1NURECis6MTAzN0QwMDA4NjFDQ0NCRkI4OUMwNkE5MTdFRkI4M0M3QjcwQUM2RUJBCis6MTAzN0UwMDBGMzFFODVGQTI5OERBREFCRTA1MjBEMEU4MEJEM0FBRUM5Cis6MTAzN0YwMDA4NDEzOTU2RTRDNUYwREYzRUE4NDJCOUMwOEZFNjgxNkNCCis6MTAzODAwMDBFOUJGOTU2RThEMUVBN0RDNEYyQ0M1MUZCQ0VFMENEOUYxCis6MTAzODEwMDA4NzEzNUU4QjQ4RjUzRUVDQzI3MzdCNkJGQkVDNTYzRTI4Cis6MTAzODIwMDBEMjc3OTg4RjIyRkU5MzU5QkY0NEZCNkQ3RDA2REU0MzBECis6MTAzODMwMDA3NDJGNERERUZCOUJFMUQ5MTdEMjJGMUEzNkM2NzMyMUE4Cis6MTAzODQwMDAzRUZBM0MyOTBBMjc2MjlFMUM1N0U0M0MzOTIxQTRGRTFCCis6MTAzODUwMDAwQTZDOEREMUQ3RkYxMjhGNTM3RkVDQzA3OEE0RTlGM0E3Cis6MTAzODYwMDBFODk0QTJCN0RCRTY5MEVENDhGNkUwQ0Y5NEZFNDFDQUJCCis6MTAzODcwMDBERDgzMzZDRjVBQjlBRjY2NjU3RDU5OUEyMkUxNTI0NzRBCis6MTAzODgwMDBCQTBCRkU1NjQ3MzU2MDg5ODU1QzU2MDk5RTJGODQxQjBFCis6MTAzODkwMDBDRkNCRTMzQjMyRjk3RDQzQUY4OTIyMjFBMEQ3NEE3N0QyCis6MTAzOEEwMDA2NDZDOTQ3RTlEQkUwRUM2MDBBOEZEQTJBNzY0N0Y4MEI2Cis6MTAzOEIwMDBBMUZGOEYzRDk5QTlGNzJGRTc1MzM0NUZBM0U5RjA3RTZECis6MTAzOEMwMDBBRThDNUJENTI0MENFRUYwQ0ZFMjk1QkREMzNGNUUwNzA2Cis6MTAzOEQwMDAxNUY0QTA0RENFRUI0MDgyQjQyM0U0QjdBNDRGRUU4Rjk1Cis6MTAzOEUwMDBGRDA2QkJFOUJCQTcxMkVDQjM3REYxRDg3NzMwM0YzN0JCCis6MTAzOEYwMDBCRUY3NjlBRTVDNDc3Njg5RTI3QjQ3QjVGOTI1Rjg0QkEwCis6MTAzOTAwMDBFMjcxQzE3QTIyMUE4RkEzNzg4RkYwN0RGMkM5RjM3QzFECis6MTAzOTEwMDA1NjI1REY0OTkwMENGOTcyMzNGRDg0MERGQ0Y5RDA2RTA5Cis6MTAzOTIwMDBGMEYxRDY0Q0QyRUJBNUEwNTVENzU2M0FFRUYxNkE5OUY0Cis6MTAzOTMwMDBCMDIzQTdGNDdEQTMzREM5MDRFN0MwREY5MkY2QzM4MDlFCis6MTAzOTQwMDAwRDdFNDRDQkU5QjIwRkU3Njc2MjlGMkEyRDRGQUUwRjgxCis6MTAzOTUwMDA2QTYyMTIwNzg4MjQ5NDU5NDFFODgxNkFBMjJCRUFDOTU1Cis6MTAzOTYwMDAwRUYyN0VEQ0IxQUFGMUY3MUZCNkI1OEVFNzhCMkE5RjY3Cis6MTAzOTcwMDA4RjRDRDA3OTc4RkU1QUFGMTNGMzczQzEzQUFGNzM0RUMwCis6MTAzOTgwMDAwNDNGNkFCNkU2MUU3NDEzREQ0RjZDQjU2MjI3NEJENDU0Cis6MTAzOTkwMDA1ODgzQkYxOTk2OEFFNzZBMjgyMEI4REUwOTdBOUY4ODdCCis6MTAzOUEwMDBERkZGMDZEQUNENUY5NzNDNTA4REQwNEYwQkQ2OEVGM0ZDCis6MTAzOUIwMDBDRDhCRTA0M0JGQUQ2NkJFRjQwRjk5RTEyQkY2OUE2MTYzCis6MTAzOUMwMDAzNzc4MzJFOEM3QkZFNzBEOUJFMURDODM2NkY4QjlGQ0M2Cis6MTAzOUQwMDA2NkY1MDdEOEE3Nzg0QkQwQTlBMDZDNTE3RjgwN0UwRkUxCis6MTAzOUUwMDBBQTQxQUMzM0JBREM1MTM0NzUyMkMxNDdENkNERjU4MDNCCis6MTAzOUYwMDBDRDBCREU1QjM2MThGQzNCQjlGQkFFM0RFNUY0REU5MTRBCis6MTAzQTAwMDA3NjE2MEZENjU3Qzc0NUU4RkQ4OUM0OEZGOTc1RjdEOUUzCis6MTAzQTEwMDBBRDZFOENENzJDRTc3QjJDQkFEQzNFMjlFMzdBMEI4Mzg2Cis6MTAzQTIwMDBFNkZBMEJGNTQzQjUxRTQ3MTJCRDIzRTUyQTlBRkZENEVCCis6MTAzQTMwMDBFRjc1M0U0MkFDNkNFOUQ0RkJFMUZGOTQ0QzIwODEyNzRBCis6MTAzQTQwMDBGQzg2ODZFRUIzOEJGOENCRTkyN0MwNzI2MzREMTRFMTk4Cis6MTAzQTUwMDA3NEMyQUZFOUFFMDQ4RUE3MEM1QjNBNDY3QzQ2REYyQkZFCis6MTAzQTYwMDBCN0JBMDY2M0JGN0Q4RTUzNzE2MTdGREI4ODkzMzdFREY0Cis6MTAzQTcwMDBDQ0E4ODAzRERERUNCMjc4OTA0Q0UxQ0FGN0Q3NjdFNjgwCis6MTAzQTgwMDA2MTNEMjE0MjJFMEZFMkY0NzdBRUM0M0FCRUM0OUZDODE2Cis6MTAzQTkwMDBGNDU5Mjg4MjFDNjc5RkIzRENEMUFBMUZFOUZGNzlBQkQ4Cis6MTAzQUEwMDBBM0YwNTkxMzUxNEZFMzI4NTk2NzZFQkY2OEQzMEY4RUE3Cis6MTAzQUIwMDA0OEQ4NTg5NzBFQUJEQkEwNjJCQzM3RUI3OEFCMDE5OUM2Cis6MTAzQUMwMDAzNzMwNEM4RjNGMUM0NjUzQjIzNzdGRUI1NjU0OUM4N0EwCis6MTAzQUQwMDBGNjZCNDZDQjdBQUI1M0I3QjMzRTVFRTc5NUM3REJEREZCCis6MTAzQUUwMDBBQ0NGQUM2RkFERTRGRDFBOUE4N0IwMEYwNzEzRTZGRkI5Cis6MTAzQUYwMDAxQ0ZBRUU4QzUzQjgxQzlDNDdBMjMxRkM0NThBNUMxNzFCCis6MTAzQjAwMDBGMjNFMDRCNTNGQjM0RTYxQkI1RTlFMjJFMUYyQzc5NTIzCis6MTAzQjEwMDAyMDYyQkFFNTA4QzIwMjdFNDJDNjVEQ0I3NDdBNDA0RThFCis6MTAzQjIwMDA3QzExRTMwMUJGMjI2MTUxNkJDNEJCQzNCQ0ZFQURGMDhECis6MTAzQjMwMDAwQjBGRkMwMDQxN0NGNDk5RjZCREMzRjYyM0IwQjMwMTMyCis6MTAzQjQwMDAyNUY0QjAxN0ZFOUVGOTNCOTU3QjdGNzA0NEMyRTdFM0Y2Cis6MTAzQjUwMDBDNUM0QkE2QUZFN0U5MEU5QThEQTg1MEY3QTVDQkQzM0U3Cis6MTAzQjYwMDA5NkZENzYzMjAwQjFCMEVGMzZEREJGMTZBQjgyRUQ2MTY3Cis6MTAzQjcwMDBBRkQ2QzA1RTUxQjk0MkY3QzMwM0Y3NDk3QkI1MjZEOTJBCis6MTAzQjgwMDBEN0QzODVGQUZCMzIzQ0EwQzMwRDhBQkVCRTg1NUY5RkFBCis6MTAzQjkwMDAwQ0ZGN0EzRkY3REJBQ0I4NUMxQjkzRDE1RTA0NjI1MjNBCis6MTAzQkEwMDBEOUJGOTZFQjg0N0ZBODZDRUY5QUM5N0ZDN0ZFRkMxQTM5Cis6MTAzQkIwMDA2RjI4MEM3Q0Q2M0M5MENERkVGQTBCODZEREJCMzc0NkQ5Cis6MTAzQkMwMDBGQUYzMTdGQURERUM1Rjg5RkJBNUZGRjg5MUUwQkVDNUJCCis6MTAzQkQwMDA5RUVFREE4NjNDOTJGM0I5NkExMTZGMkVDRDVCRTZDQjhFCis6MTAzQkUwMDBDMDc3RTc0REIxNUJDMDBGNTE3Mjc5RkIxQzlCRjUzQzcwCis6MTAzQkYwMDA5ODY2MUEyRkUyRUY4Nzk1QTI3QTRCODQxRkZDNEM5RUExCis6MTAzQzAwMDBCNDBGODMwQjdDNUJGNDc2MUVCNDlCNjc3OThCRTkzMDMxCis6MTAzQzEwMDBDRjIyNUM1OENGNkYzRUE3MEEyQkMxOUI2QjFEQzE2NTlECis6MTAzQzIwMDBGNENBQkNBRUJFOUU4QjczRjA5RThDMzcxREYyNEE3REVCCis6MTAzQzMwMDAxRjk3Mjc3QzQxRTg3RkZEQkIyRkU0NTk0Q0E1MTgyQjJCCis6MTAzQzQwMDBFMzJDODc2M0E0MUNDRTE0NDU4NTFDRUY3NzBCNTNGRTMxCis6MTAzQzUwMDA4NTUxQkU5MjI3RURERTNDN0I4MzE5OUY0RjVFNjZCRTg5Cis6MTAzQzYwMDA5MENENzMyRDgzN0M4Rjk1N0VDN0UxNUIxNEI2RTczNENFCis6MTAzQzcwMDA5RTlFMkU4MjA3RkYyRTg2RTM4NTg3NzU3QjY0RDA5N0Y0Cis6MTAzQzgwMDBFNDg3RjMyMjBDQkQ5NUFDQ0JDQjlBQkI4M0RCNjI4ODc3Cis6MTAzQzkwMDBERUY3RDk0ODZFQzAzNzkyMUJFNEY5MTBERkQ5MkY1Q0VDCis6MTAzQ0EwMDAzMzIzOERGOTdFODNDRTU3NzE2RjAyRjM2REI4QzUyMjMxCis6MTAzQ0IwMDBFOTdDNkYwNkQzOTlEQThCQkZFM0JENzE2RUU5Q0Y1RjA0Cis6MTAzQ0MwMDBFNjNBOENGOEZFMzdGMDNEN0EzRDY2RjA1QjU4ODM4MzI4Cis6MTAzQ0QwMDBGRUQ5N0U0Q0Y5NzM0RkVGMDk5MEZDMkZGQUMzMDM4OThDCis6MTAzQ0UwMDA4MkRBMURCNUQ2QTY3OUU4RkRCMkNEMkIxMjdENTQxRTIxCis6MTAzQ0YwMDBCMTA2MTI1REQ0RkZEMUEwM0EzRUQ4MDZCRDNCMEY1MkFCCis6MTAzRDAwMDBGNEY1OTAyRjExNzk3NDE1QkExRTNGRjZFNDdGQUNCQzIwCis6MTAzRDEwMDA5REYwRkM0NjExQ0REMDhGMTVCQkJFNUI3OTNCOERBRkJFCis6MTAzRDIwMDBERUU3NkM4NjNFM0Q2MjZEMkM4NERFNUQ1ODFDRUZBRjk1Cis6MTAzRDMwMDBGNjYwRkU5QUUzRjI4QjlFNzgyMENEQ0RGNDBFNjQ1QUE1Cis6MTAzRDQwMDBEMjc5RkU2N0UyQkQ4QTREMzYwRkQ2NzUxNUVGQUExRUYxCis6MTAzRDUwMDAzN0U2QkQ2ODVFMDlGQ0EyREZBRjBDN0Q2NjA3RkQ1RDNFCis6MTAzRDYwMDAxNkQxREM2OTc4MUJGNUEyOTFGNTdDRTVBRTVGN0ZBNUU1Cis6MTAzRDcwMDAyNkEyM0NGQTExRDYxNzk1NTFGQjAxMjVGQTdFNDlGNDhCCis6MTAzRDgwMDBCRTQwQzJBMDg0RDQyRjEwRjBENkY3QTM4OTNFOUM5N0UyCis6MTAzRDkwMDAxMDIwQkM3QUIwQjhDODM4NzJDREI2ODcwNjM0QzE2RjZGCis6MTAzREEwMDBEOEY0NUFBMjkyRDNCQTFGNjBFQ0EzQjQ4NEU2M0U4NjNDCis6MTAzREIwMDBCOEVBQzVFNkU1QTlBODM4QjBBMUM3REM3QjE1OTlCNDc3Cis6MTAzREMwMDA1ODI3Q0IzMjVCMzgxMUZFN0VEOTA2MUJFQjkxQjJBNzg4Cis6MTAzREQwMDAxRkRGRjIzMEU0RUQ0Mzg3QTc4NzFCRjAxOTNCRjQ0MTY2Cis6MTAzREUwMDA5OUUyNkI1NjU4QkY4QjQ0NjU3MDJCQkY0QTlGRkVCQzRGCis6MTAzREYwMDBGMDExRjhENzE5QUE5ODQwRkM1QUY0RUM1OUQ5REUyN0VCCis6MTAzRTAwMDA5QTYzQTg3REU5Q0VBNjQyQUMwRkNBQjQ3OEJGQjMwREMxCis6MTAzRTEwMDA3RThEMDlCRDY0NkY4QzZGODM1RkExQTY0MjhFNTM2RDRBCis6MTAzRTIwMDBGQjk2Rjk3MTc0OUYyMjNBNjQ1RkY4N0VDOTg2Q0ZFREU0Cis6MTAzRTMwMDA0MkFFMEY5QTUzOTIyNUJENjBFRjJBNDM2QUIxM0RFOTI1Cis6MTAzRTQwMDBDMkY2RjRGRDQ5Q0ZFNzcxQkQwQkVCOTU0QkYxRjEyNEMwCis6MTAzRTUwMDA2OEMxRjI5RTIwOTBDNzU4RjI5MTIzMzgwMUZDRERCMTcxCis6MTAzRTYwMDAyNDExRjk0RjVGNUFGRDUyRUVEN0FGNDg4MzlGNTc2MjM2Cis6MTAzRTcwMDAwQkE0QjlCODk0Q0Y0QjFFRkQxOUNCRTMwMkM1OUZFNjQ2Cis6MTAzRTgwMDBFMkJDMkREMkFGRjkzQ0RFMEM4Q0YzRTY3NUQ3RjIzOEVDCis6MTAzRTkwMDBFNzBCOERFNUIxNjRCRDVBMTRBNEYyQUM1NThDREZEOUEzCis6MTAzRUEwMDBDNkJDNzk2ODkwRDQ3NzBFNzFDQjAwQ0M5M0IzRjQyNTVGCis6MTAzRUIwMDBEOEYxMkZGNTc1N0RFMDZEQjk5RTc2ODgyOTQ5OTFGQjgzCis6MTAzRUMwMDA0MzI1ODNBNDVFMEM4OEUwMjFEODgxQ0EwNjFCQzcyOTNDCis6MTAzRUQwMDBENEI3Q0UxNkUyM0JCNzY2NUJGREM4REZBMEYxMDc3NDJFCis6MTAzRUUwMDA3QTI5M0ZDOEY1OEIxQjc5MEM5NUY4OEJFQ0U5OThCN0NDCis6MTAzRUYwMDBDNjc1NjhDQ0MxRjc1QkVDMzc1MUJGNUY2MzlERTgzMTk1Cis6MTAzRjAwMDBCREM3NzRGQjcyQTMyMzU2Qjk4MkNBQjRCNkYzQkVFQTI2Cis6MTAzRjEwMDBDRkNGN0ZGMUI2ODg5MEE3Q0FBRDVGQjIzQzg5NzQ1NTA4Cis6MTAzRjIwMDAyNEE1NEIxOEZCMTFBRTM5RjFGRTI0QTJEQkQ3RUY3RTlFCis6MTAzRjMwMDA2NjQ3RkMzQjkwNkExMTNEODA2RkMzRTcwQzBCNEY3QkRCCis6MTAzRjQwMDAzN0RBMUJERkFGRENFQjEwRTFDODc5QkJFOUYzQTg3OTA2Cis6MTAzRjUwMDA2REFFMTdDMkNGRjRBQzE0NDk2RUQ4RUYyRkVEQ0Q4NUZFCis6MTAzRjYwMDAyRkEwMUZFQTc3MzNGNTMzOUZGQ0FGQjBDOUJGNkEyRThECis6MTAzRjcwMDA3QzA0RkE2NEFGRERDNUYxMDdGMjNGQzMxMTcyNzM3RUIyCis6MTAzRjgwMDBCRjUzREZFNzVCQTBFQjgzNjgzQTQ0RUI4N0ZCQTJGNDA3Cis6MTAzRjkwMDA4M0YxQkU1OEQ3RjZGRTUyQUI1RTA4MzAzRENCNkMyMkEzCis6MTAzRkEwMDAwMDNGQTNFQzQzMDdEQjhGQjJBN0U1N0MxNEE0NEY3QjUzCis6MTAzRkIwMDBEMEZDMzhCRUZERTVGNzZGQzA3QTM2NjQ0QjlEQzBCREJFCis6MTAzRkMwMDA5QUY1NkZDOTMzOUZGM0I4RTYxMkZENjMzQ0QwQkZERkFCCis6MTAzRkQwMDBEQUIxRkU0RDFGMjM5QTFEODRGRkYxRDU1RTNCRTRGRTRFCis6MTAzRkUwMDA4Mjc5NENDRkRCOUNDN0FCMTVENjZGRkY1NUJENEJGNDI4Cis6MTAzRkYwMDBFNkZDQzA0QkNERDcwNTE3RDFCQjc1NTE3NDNEMkI3Mjc0Cis6MTA0MDAwMDA5MjkwNUUyRDVDQzU1RDc4RkYyMDhBQkUwNjVEQTNGNUFCCis6MTA0MDEwMDBFOEI0NDFFRTM2RjUyOEZEN0I1RjQ0RDA1MTg4NDY5NkUyCis6MTA0MDIwMDBFMzZGNDgyRjYyNUZBRDYyRDM3NzZDRDc4OEFDQ0RDOEExCis6MTA0MDMwMDAyN0FGMDg3RUM1RjAwQUQ4MzU4NjVGOUE4Njc4RTU4NTcxCis6MTA0MDQwMDBFMzM2RDMzM0JBRkU0RUM4MThGRDVGRjQ0NzFCRkIwNUI5Cis6MTA0MDUwMDA2NTc1MzI2RjkxREVFMzc1NDcyNUUyRjVEQ0JBQjYzRTUxCis6MTA0MDYwMDAzMzM1MTIwRTQ2QzFBMUE4RjZCRTI4QjgyOEFBQkQxNjNGCis6MTA0MDcwMDAwNUZCNERFRENCRjZCRUNDRUIyQ0MyREJENENFQjFGNEMwCis6MTA0MDgwMDA2QTVFODc1Q0U4NTcwNDc5MUM5NUJCQkVCMjA3MjAxRkE3Cis6MTA0MDkwMDA5RDlBRUREMDhCQjY2NTIyOTA0MEVGMzdCRkE4QjJERjc2Cis6MTA0MEEwMDA3QkRBREQ5QzA4M0Y2NTQ1OENGNEUzNEVCQjc0MzhEOTYwCis6MTA0MEIwMDA4MEM1RUM2MkMyRTM3NDYwODAwQjc5MDJDRDMxMzJERUUwCis6MTA0MEMwMDA3MkJBQTgzOTMxMzk2MkREREU1NEE3MjZCQUE5N0Q2M0Y4Cis6MTA0MEQwMDA1MDhDNkYzQkNGQTU4NkU3NTNBM0I4NThCREY0RTdDNjE1Cis6MTA0MEUwMDBBOURGRUY5MEY5OUY1NjgxRkNEOEM2RUE2Rjc3MjA5RTMyCis6MTA0MEYwMDA3NDk4RDY0RkYwNUZFNjU1NUY5Rjg4RkQ5N0QzNzVEREM2Cis6MTA0MTAwMDBBRTk5OEU3NUUwQUJBQTkwNjlENjNFM0JGMjIwRTY0QUE2Cis6MTA0MTEwMDA1NjhBMjMyMkYwRTAwODFBOUY5QTkwNTdGRjAyRDY1NzNBCis6MTA0MTIwMDAyNDI4RDhGRjlDQjczQUNBQkYxMTQ1NDk2MUFDQTdENzJDCis6MTA0MTMwMDA0NEU3MkIwNEVERjA2RjE2OTA5RDg1M0UyQTU5NjdBRTNCCis6MTA0MTQwMDA1RjU0Nzc5Q0U3Q0JBMkE4RjlBMkU5NzFFM0U4RjlEMjIyCis6MTA0MTUwMDA3NUIwOUVCN0UwMTU1RTNEN0Y5MkYzRjQ0RTFGNTQ1OTQzCis6MTA0MTYwMDBCRTVBOTZEQkM0Q0E1NDk5Mjc4QkZDOTI5NjNBOTk3RjIzCis6MTA0MTcwMDBEM0IyNTdDMjIyQTBFN0Y1RThGM0Q2QTBEQjA5Q0NBNzVCCis6MTA0MTgwMDA1RTE3Rjc1QjRFRUNGRUY3QzFCRjg0RkNFQ0Y5NzgwMERDCis6MTA0MTkwMDBGNjg5NEZFQ0Y5QjBFNzBCODA5RkZCNkJENkM3RTJDMjA0Cis6MTA0MUEwMDBGNjYzRjY3RDM3OEJGMURBRTcxMEMwRUJGNEJFNTdCMjU5Cis6MTA0MUIwMDBFMDZGOUM3RURFQzFGOTA1QTc5NzM5RDg1RjBGRUM0QjA1Cis6MTA0MUMwMDBFMEI4QzVFOUNFRDIxRkFFNzlGMURCMDE4RDZDOEY5N0Q3Cis6MTA0MUQwMDAzMzFGMjcwRUI2NEJCRkFBRUUzRkQ4M0VCNkQ0MzlEQzBDCis6MTA0MUUwMDAxODQ3RTVCRTM4OUU1Nzk1Q0ZDN0YwQkVEQUU5MTdCRjJFCis6MTA0MUYwMDAxRDFDMTk4RkZCQUY4RUM3RDg1NzNGOUQyMEE2M0YwM0NDCis6MTA0MjAwMDBGOUQ1RkRGRkNBMTc4NjNFNUU4REY1RjJBRTk3RUM3M0M5Cis6MTA0MjEwMDA5MTI3RjJBN0ZGMzMwMEZBRjVGNDMzMkZCMUZFM0Q2NTg1Cis6MTA0MjIwMDA2QjdDMTRCMUNERTk3QjMyMUVCMTBENDU1QzhGM0VENjVGCis6MTA0MjMwMDA1MTg4QUZGNkNDQjgxMUYzRTc0MkJBNDgzQTlDMjYzQTE3Cis6MTA0MjQwMDA2MDVDNDQ5NzEyRjhFNTE3QTM0N0U1QkYyQzNEQkU5QTgyCis6MTA0MjUwMDAyNUY1REMxMDgxN0Q5RjU2QkEyODNFRjkzQzgxRTM1NTU3Cis6MTA0MjYwMDAzNDdFRjk3Q0RGQjcwM0EwODcyRTM1REU3QkZGMUYxQjcyCis6MTA0MjcwMDBFRjUzMTg2RkZCN0ZDNUYxNEE3OUNGMURFQzY2RkNBMkE2Cis6MTA0MjgwMDBFNUZFNDJCOTdFRUVFNzBDRUY0OEYwMzBCRTk3MzlERjJECis6MTA0MjkwMDA1RkZCOTcxREZGRkYwQ0JGOEZGRUNCOEVGNzUyRkM3RTlFCis6MTA0MkEwMDA1NUU3Nzc4MjBCRkJBMEE3NUZGQzNGNTlFMjQ3OENEQjA5Cis6MTA0MkIwMDAzOUU0NUY3NTVFRkZGMzcxMUJGRTdDODFFQTM5RThBNTg2Cis6MTA0MkMwMDBGNkFGODlEMEJCOUU2Q0Y2NEFEQUY0NDcwNjBENTE4Q0U2Cis6MTA0MkQwMDBCODM4QUZBN0M2RTAyRjM3REEwRjVDOEU3MzRDMDFGMjA3Cis6MTA0MkUwMDAyN0IwOEVBOTg5MUY3OEUwMkQ4MjVGMjEzRjQxRTU3REFGCis6MTA0MkYwMDA1OTE5NEY3QTI1REQxQjk0RjE1REJGNDAzQ0FCRTBBRjBGCis6MTA0MzAwMDA3MzE5N0VEREZCOTMwM0M4MkIyOTU0NjUzQ0U2RTU2QUVGCis6MTA0MzEwMDBDRkE2MDYxQUM3Q0JDOTE2MzdDRTk1OERFRDM0RjdGMDY4Cis6MTA0MzIwMDA0RUFBNzc3NTU0NUQ1ODlGRDU3NENBNzVCQTIzRjAxQjkxCis6MTA0MzMwMDAxQjZGNUU2NzVEMURCNTRFRkFBOURCNUMzRjVFM0M5MzZCCis6MTA0MzQwMDA4QUZEQkFGMTM5MzY4MUYzMzY4NTY4MUZCMUFFNEMxOTUyCis6MTA0MzUwMDAyMkNGRjdGQzU0RDQyRTc3QzVGRjc4M0FDREQ1RTk0NDY3Cis6MTA0MzYwMDA3NEUxN0Q5QjQwMjc1NUNGNzMzM0QzNEQ4MDZFQTlBMDU4Cis6MTA0MzcwMDA0QjJFRkJFRjAxRTEzOUYwMTZDMTU2RERCRjEyRkFGRUZDCis6MTA0MzgwMDA2M0ExMzM2MTBCRDZEMTBFNTExMDBFMTI3Q0Q2NkRFNUIwCis6MTA0MzkwMDBGMzkzNTY0MUVCNjEzOTRFNUU0NzQ3RDM0REU4RUI2QUU0Cis6MTA0M0EwMDBBQkNFODJCMTlEQzY4NDQxNjczQ0VGOTI2RTdBOUZDN0M3Cis6MTA0M0IwMDAxRDRERTcxRjRGRDdGRDlEOTY4MEFFRTkwOTlFMjBFNDc1Cis6MTA0M0MwMDBBMkQzQjNBOTg4QjNENjEwOUQxNUE1OTU5RTA2OURBMjJDCis6MTA0M0QwMDBFOTlFOEZDREY1NDFBREY0RUU2NEY1NUEzMUNGNDZFQTUyCis6MTA0M0UwMDBGRUZDNTg2QkIyODQzQjM1QThGMjVDNUU5MERCOEZGOTIzCis6MTA0M0YwMDBEQTYzODUzRjMyM0EzRTk5RjM0Mzg1N0U2RTQyRDVGN0M0Cis6MTA0NDAwMDBDMzkxNjFDNzc4RDBGQTE0NzlCNjkzQUREQTkyMjE5QzQyCis6MTA0NDEwMDA1RkVGMTIwNTU4QjcxNjg4MTBFMkI3NEFERDJCREY2MTRGCis6MTA0NDIwMDA3RDg0RjMyMjQ1QkNBRjU5RkYwMUUwNUUzODJGODZGQzQ2Cis6MTA0NDMwMDA4RTc1RDYxM0E2RjM2RTUxRTcyNTI2RTVFRjFDMEQ3RThCCis6MTA0NDQwMDBDRDU5NEFDRjEwQzc3MkI5RUIzMTFGOEJFRjc3QjhDMTg2Cis6MTA0NDUwMDBCRjRFRDYwNkFFQTdCNTk2QUI3QTI4NzZBQjQzMENDNzRGCis6MTA0NDYwMDBDRTIzNEYzRjAzRUQ1RTE5Q0RFRDk3MDg5NzkyOEM3NEU0Cis6MTA0NDcwMDBCQjEwOUY3NzhDNzdDOTdDMzU1QUJDN0UwM0Q4QkUzQzc1Cis6MTA0NDgwMDBDMTVEMjNFMzI2MDJGMkQ0MUQ2NTU3N0M1RkI2NEYxRjQyCis6MTA0NDkwMDA0QkRGNDNCRTlCRDBEODVGOEVFRENFOTEyMEQxNTUyOTA2Cis6MTA0NEEwMDBFMkZERjcyRURENjQ1RTQ0RjMwQTA3QUY3NzhBRUZFQTk4Cis6MTA0NEIwMDBEQzEzN0E2OTQyODEzOTZFRkRDNTEwQjlBRjY5OTQ1MzM2Cis6MTA0NEMwMDBGM0RENzI5RkMyRTI0OUM3NzdFNjJDRUZDM0VCMkYzNUNECis6MTA0NEQwMDBCNkE4N0MzN0U4QjgyMzhFRTVCQzc4RTU0RDEzMDdEMTQ0Cis6MTA0NEUwMDBGNzhCNzdBNDc4ODBFNkIxNDkzQjA3Q0JGNjMzN0VGNkFECis6MTA0NEYwMDAxRTNERDdCNkM2RjBGMzlGRTc2QjhGMEY0MTlFODFFMjVBCis6MTA0NTAwMDA5RUI1OUIxRUNDQjlGNjY1N0IzQTc1QTE4NTI2OUY0NDY2Cis6MTA0NTEwMDBEQzcxNTI2MEU3MUJEOEU3OUMzNDRERTVGNjkzODRDQzAwCis6MTA0NTIwMDAyQjE1Q0JFMzc4REY3QzYyRTAyQjZCM0E3RDZGMjIyRDdECis6MTA0NTMwMDA2QTUwREYxNEUzQ0FCQTg1RjAyRkQ2RTNDRDdGRDBFNzA3Cis6MTA0NTQwMDBBMTFBMkJCNDY3RTI4MTU3RTc5RTVERTlGOTQ0MjFGMzk0Cis6MTA0NTUwMDA5QkEzRTdFRDcxQkQ3RDk3MzExRTc3MkFFOEEzQzRCODEwCis6MTA0NTYwMDA3MDFFRDY2ODhGRUZFMEJCNUZFOUY0Nzg1RTJGMEQ5ODgwCis6MTA0NTcwMDBFOENBNzFGMTc5QUIxQzREREQxMjUxREFDMkJEQThFQzZECis6MTA0NTgwMDAzM0FDNjAxRkU0NkQ0MjU3NTFCODE2REZCRDREMTUxQkFCCis6MTA0NTkwMDAxOURGRTY2MjhFQjMyN0Y0NzY4MzBGOUFEMENGNzdBRTE5Cis6MTA0NUEwMDBFOUMxRkIzOTREQTMwNUNCNEZEMzdERDkwNkJGMzkzRkI4Cis6MTA0NUIwMDBDOTU4Q0YzNThERjZENDIzN0ZBQjc5QjREM0IzRDE4MzJCCis6MTA0NUMwMDBGQzk2NTAxODcxOTQ0MzZCRTU3RTREOTc5QTcwNzdFODhFCis6MTA0NUQwMDBEOTY2QUZEQzA3Rjk3QzY5QUUxQjcyNzJGMzAzNTMxMzIzCis6MTA0NUUwMDBBMTNGRTdBRTUxQzMwRUM4RkI2QTczREU5MjcwNzkzODAzCis6MTA0NUYwMDAwRjdDNkVFRDY4M0JENkFGRjNFMjdENzY4Q0VCNENCRTY0Cis6MTA0NjAwMDBGNjExRjg2NTlDNzNFQzBCOUM3MDhFQTdCNkY4NzVBQzMwCis6MTA0NjEwMDBGQkQ0NDQ5QUNGOTg3RjU2NzcyMkQ2RDVEMTc5NEY5NTNGCis6MTA0NjIwMDA3QTdFOTMwMUZGM0E0REZCMENERjlCOTNFNERFMDFGOUE4Cis6MTA0NjMwMDBGODc0NjkzNzhFQUI3NkNCRDdDRjU3NUFDM0RENDE5RjFECis6MTA0NjQwMDA0NzY5MkU2MDdFM0UzODQ0Q0FERjg0NzZBRTlFRjEyQ0U4Cis6MTA0NjUwMDBCRjMxMDJFMzZBQjJCOTdBNDI5RTlCNTZDNDU4NDBBNzYyCis6MTA0NjYwMDAwOUNCQTQxQ0RGNkQ5NUYzMkJFODczNUIwMkY0RkVCMzVBCis6MTA0NjcwMDA3ODlGQkUzQkIzREE1QUI0ODFGQUU5RTQxNEQ2ODQ3NjYzCis6MTA0NjgwMDBCNENFMURBNjNEMEZGRTRDMEM1NDFGQzJGQTdBQUU2RTdFCis6MTA0NjkwMDBBRkU2QUU5NkU3QzFCQThDOTE3QzE1RDY4NkIxMjlGNDA3Cis6MTA0NkEwMDBGQ0M4RTZFQzgxQzg3MzM3RTQ2NkZFQjA4MkJGMEY4OUIwCis6MTA0NkIwMDBFMEZGODQwMjVGNjE3QkZBQ0UwNDhCQkIwNTdBNzhERTczCis6MTA0NkMwMDAzNEU1QTU2RTUyMEU3RTE4QzJFQkY5M0E5RUU3MkRBNDkyCis6MTA0NkQwMDAyNzFDQzkzODA3RDgyMDYxRTRBQjQyNkZENDNFRTQ3MzhECis6MTA0NkUwMDA0NkFDREJFRDYyMTdEN0RCRTdDOTdDRDQyRUY2NzAzNTFDCis6MTA0NkYwMDBFNzVGREQyMjVDQ0IwOERFNDI3RTg0RDUyNkM0RDYyQTY1Cis6MTA0NzAwMDAyNzk3NEY1NjkxQkVFQjIxQzRGNkFBNzQ4Njc3NTRCOTA5Cis6MTA0NzEwMDBCOTBDNTVGNUU2RTdDRjU0NzkxOERFNTU5NUNGRjA5RUU0Cis6MTA0NzIwMDAyQTFGQzM3QkFCQzY3M0Y5N0M1NTExM0Y4RkQ2M0Y3M0VECis6MTA0NzMwMDBFM0U3QjMzRTcxRjUyNDVFMEZCRDUwNkU2NkI5MDkyRkY1Cis6MTA0NzQwMDBFODFGQTc3MEREODVGMzQ3NDJFQUJCRTRERTUyRkYwOEFECis6MTA0NzUwMDA1RDFGNzVFRDIzRUYwM0U4OTYyRkY5NjE1QjM1REFDMjMzCis6MTA0NzYwMDBFNzM3QUQ4RDE5OTBCQjcxRUE4OUE3OUY0M0JDQTMyNDlECis6MTA0NzcwMDA5RUYzQjI1QTQ0MjNDRjkzMTY2MUUxNzNEOUQwM0YwRTEyCis6MTA0NzgwMDA5MkJCMkU3NzhFQ0Y4RUNDM0JCRkIxNDQxMUQ2MDhGOUE5Cis6MTA0NzkwMDBCQUM5MUYyM0FDMTFGNjY5RjZEMjY0MTMzQzczRTkzQjI2Cis6MTA0N0EwMDA3RkVFNDBERkJGQjFBQjk2OTc0Rjc4MUNCQUYzOEJGNTI1Cis6MTA0N0IwMDA3RkE1RTc4RkRENzlBQzg3M0NBN0ZCRkQ4NkM4Qjg0QkFBCis6MTA0N0MwMDA4QjY4OTZCMEQ1QzlGQkYxOEZERDlFOTE5NkEyREZEM0ExCis6MTA0N0QwMDAwMDdFMTlFN0E0QkJEODlCOEYzRTgxNzlCODQyRjUyQ0E3Cis6MTA0N0UwMDAyM0Y4MjNGMDg3RThGOTg5Q0U5RkUyMTVERDU2RkUwMjEzCis6MTA0N0YwMDBGM0RBRTdGNDI4RjQ5RDQzQjdGNzJCQ0NBN0Y2OEZFOTVCCis6MTA0ODAwMDBGQjUxMTc5Q0FCNEU5N0Y2RUI1M0Q4QUY2NDY5Q0YwQUI4Cis6MTA0ODEwMDBBMDQ3QzNEMjZFN0RGQUFCQjRDMDVEQThCRjI1RDE4M0RCCis6MTA0ODIwMDAxMzBEREFBQTBFODEwNTA0QUZGNkRBM0QyQUUyN0E3NTk1Cis6MTA0ODMwMDA4MkVGNUQyMDFBNEJCRjIyNjAzM0RCQjFDNjRFQzk4OEMwCis6MTA0ODQwMDA1QjFBRTc5RUUzRjI4MjRFM0U3NzQ1MUQ2MTNGNjY0RTVFCis6MTA0ODUwMDBFRkZEMjIwMzdBQTk1NjcxNjFCRjA2RTczNDlERURBMEYyCis6MTA0ODYwMDBERjE0REUxRjQ1MUVEMDM0QjI5NzM3RTVBQjNDM0Y3RkU3Cis6MTA0ODcwMDAzRkM0Q0FFNTU5RDg3M0EyNkI4Q0YwNzA3QzY2REU2QUJGCis6MTA0ODgwMDA2QTBGRkQ1OEVCQjVDRjhGRDBCRjczRjRFNzczN0I1QjM2Cis6MTA0ODkwMDBCODM0OUU5N0UxN0JEODNGNUNFNTlEMEVGOUU4ODhGQTM1Cis6MTA0OEEwMDAxQzk0MDNBNzAzQkY4RUYxODU1NjI1NjJGRjc3N0VCRTU5Cis6MTA0OEIwMDA1NUVGNUZGNjdCMTY5MzkyRTA3QjdBNzdCNURGOUNDMzZBCis6MTA0OEMwMDBFN0FERDg2RTE5RkRDQ0U5M0Q3MDY1NTdEOEVCRDVBMzlGCis6MTA0OEQwMDA0MTFENTE2M0YzQTRBNzUyQkJDQUYzREY3MTQ5N0ZDNEUyCis6MTA0OEUwMDAyOUYzQjNDQjJFNjIzNzhDMzhERDExRkMyOUNGM0RGMjkyCis6MTA0OEYwMDA3ODE3RUQ3ODZBMDdDRTNEMkNGQUQ4QzFGNjZCRDExNTQyCis6MTA0OTAwMDBEMjJFODk5Q0UwRTBBOTFDRDAzNEM3QzVDNzNFNzVCMjQxCis6MTA0OTEwMDBGRTJFQzJFNzI0Q0UyNTIxREVCRkVCMzMzQkYyNDM2OUY2Cis6MTA0OTIwMDBEQUY4OTMzMjAwQUI0REM4MzM4RDhFQ0YxRUQ4RjE3MUJCCis6MTA0OTMwMDA2MjlCNzFGMTVERUFFNUM1QzU5NUVGMTM2MTE3OENGMUQ2Cis6MTA0OTQwMDA4QzdCRjE2QzFBRkNBQzRBRTUxQ0VGMzM1NUJFQjgyMkU3Cis6MTA0OTUwMDBBREFERkNCMEU4QjhGOEY5RjhCOTU4RkQxNUNFRDc1N0E5Cis6MTA0OTYwMDBERTcxQTRDREY4Nzk3NDFDRjBGMUZDRThGRDg4RjgwMjQyCis6MTA0OTcwMDBFODg5QjMwN0Q1MjBGNkQzNUI4MjNEOTI0NDFCRkQxQjJCCis6MTA0OTgwMDBGMUYzQ0FCNUY0NTIwQUU2QTUzQjA5RkI2MUE3MkZFMjkxCis6MTA0OTkwMDA5NzFGQzk5N0Y2RkRBNDFFNkYzRkJENURFNUY1RDJFOUVGCis6MTA0OUEwMDBFRDA5NDFGOEE3MTVEQkVGQUZDNzNFNjVDNTI2ODVEREVDCis6MTA0OUIwMDBGMzcyRDFDMEY0MjIzQTBBNjdBNDFENDNCRTVCMEE5QzdECis6MTA0OUMwMDA2Qjc3MTJGNDk1ODE1RkU5NTMwOTdFQzhENUMyOTBFMkY2Cis6MTA0OUQwMDBEQjRDNzhCNDM4REQ0OUVEMjNGMDM4MDBCOTZBOEYzQzAwCis6MTA0OUUwMDBDMEQwNjBBNkFCOEVGN0YzQkExRTM0REEyREFDQkI5RkY1Cis6MTA0OUYwMDBFM0QyRDRFRTE0RkIzQjdGODgxMzlDMjcyODlBREYwMDc4Cis6MTA0QTAwMDA3RUM3RDdFNTdBQjBBRkI4MzBCNEIzODJGMzNCQjZDNzUwCis6MTA0QTEwMDBCOTEwODczOEE2RTczOTFCREY2OUQwRkI2QkM4OTdGRTUyCis6MTA0QTIwMDBDOTcxN0RGRkVFRjgwRTc5REUxQzc4NjIzRTFENTNDQzE1Cis6MTA0QTMwMDBGOTgyRUZFQkVGQkQ5RjJGRjdDRkVFQzA1RUUyQTBENjdECis6MTA0QTQwMDBGNjBCNDM0RDg5RERBOUZEOTc3QkRGRTFCMjUxNkZCRkM2Cis6MTA0QTUwMDAzMEJFNjEwMEVDRUU5N0JCRTI3ODNGRkVDQjVEOEYxNDc5Cis6MTA0QTYwMDAyMkNFN0MzMjM0M0ExNUYyNkY3Q0ZGNTRCRThEREI5RjMwCis6MTA0QTcwMDA1Q0E3OEUwN0JENDQ1MEU2RDk5NDgzQUVCOTkxNzhBNjYxCis6MTA0QTgwMDA2QzA4NjQ0N0NFMzM5OTZGNzQ3Q0Q3QjM4OTk2OUM1NjczCis6MTA0QTkwMDAzRTk2M0JGRDRFOUNGN0FDREM3NTRCMTFFNEI4REUyNjMwCis6MTA0QUEwMDBFOTY5REYzNTM5ODA2M0NDOTU3NTVFMDFGOUU1Nzk5NjYyCis6MTA0QUIwMDBDMUVENTc1OTIyREEzOTZDMUVGNjhCNkQ3QjhCN0Q2ODAwCis6MTA0QUMwMDA2RkM0QTExN0VGQjZGMTc5QzE1OTU3QjhBRkJGMTFGMzUxCis6MTA0QUQwMDBGMDM1MUJGMzYxNzExRkY3RjU5QzhGRDRBMDcyRkVGMkM1Cis6MTA0QUUwMDBFMjZDMTE4NkZGQjFFNEI2ODQwREQ4MEYzM0YwOUQ5NUNBCis6MTA0QUYwMDAyQkU3N0JEOTJBNDVGODY4NUM2NTQxNzkwRjQ3NDdFMjg3Cis6MTA0QjAwMDA3QjAwMzk0QUU5OEQ4MzkwM0ZEOTk0MURCQ0JCNjcyQTRECis6MTA0QjEwMDA5RkRGMERFM0ZFMTYyM0NGOTRFNjcxNEY5QzczRUMzMEJDCis6MTA0QjIwMDBCNDFEOEZGQkMxMTk4NTZDRUYwRUQ5NDUwMDdBMjFGMEI5Cis6MTA0QjMwMDA4Q0NDQzMyOUVCMkFGM0EzMUY4NkRDQTNCRjc2RTE5RUFFCis6MTA0QjQwMDAyOTM0REUxMzNBNUZDQkE2ODQ3QjIyMkZBM0VDOTkwQzg5Cis6MTA0QjUwMDBDRUNCMzg2MTk3RkJBNTc4OEVGREUyQjI4MUY0N0UzQzI2Cis6MTA0QjYwMDBERkNGQTExOUVGMjc0N0M4NTFEOTFDOEYxQkVERDQ3NjkxCis6MTA0QjcwMDAxRUI3MzcxRUY4QkE0RUIxREZCQTNCNDFDMDZGQjUzQzI1Cis6MTA0QjgwMDA5N0EwRTc1N0M1NzAxRUI5RjE1RUJGQTE1MkVFOEM3QkFFCis6MTA0QjkwMDAzRkM0MEQzMjFGRjM0MTlCQ0M1NzdENzA3MzA2REY3NzA2Cis6MTA0QkEwMDA2MUI0N0ZEMEE2Q0Q4MEZGODQ3MUMwNUY1RjY4QUZFRDM4Cis6MTA0QkIwMDA4OTdEMTcwM0RGODU4OUI1OENFNzA5NURDRTE3QzZENkQ5Cis6MTA0QkMwMDBDQUJDNzBGRDFDMzFEQTAzNkVEMkYzRDg5QkI3MzkzOEZBCis6MTA0QkQwMDA3RkU1NTg0NkMzMzdDMEY3RDhCNjNFQzg4MTAxQkRFNzY4Cis6MTA0QkUwMDBFRkU1N0FGMjFGODk5RjhCOUU3NDg0NTE3Rjc0OUI4Q0IyCis6MTA0QkYwMDA1QjFGQjUwNUJGODExRTNFQkEzRTg1Q0Y0NzFENkQxRkE5Cis6MTA0QzAwMDAxQ0NDRjkwMThBQ0IwMkZGRUNBOEEyQzMzNjE3RkI5NTk2Cis6MTA0QzEwMDA1REVDMDQ1M0ZCRDQ1ODYxNDFGRUNFRjgyOTZCNjcyMTRCCis6MTA0QzIwMDBCRkExNjU5MzAzRTIyOThFNkQ3OTI4OERENzM1QzI5RDhBCis6MTA0QzMwMDBDNDc5MzYwNzU1MDFCRTFEN0JGMjNGRkE0NEZBMkY0NjcwCis6MTA0QzQwMDBCOTY4OTMzOUVGQUUyOTVCOThFRUM5Qjk3QUE4OUM5N0Y5Cis6MTA0QzUwMDA1N0VCRjRCRDY2QThCNDUzRTU3MUExMDdCQkYyRjgyNDg1Cis6MTA0QzYwMDBCRDg5M0ZCQ0JFQTMxOTlBQzBGOTEzNEZGNzUwQTAzN0I2Cis6MTA0QzcwMDAxRTE2QzE5RjdGOUNDN0FCNkMzN0YyRTZDQjlFRDlGNjYwCis6MTA0QzgwMDAwNkY2NkI4RjU5NDQwM0ZDMEZFNUNFQUQzRkM3N0QxQjg1Cis6MTA0QzkwMDBBOUJGNDk2MjNCMjRDNDI2MUVERjUxOTczQ0E3NEExMzkzCis6MTA0Q0EwMDA5NkM3QkZCMDgzODQxNzREREREQTEzNzAzREQ5MUM4NURDCis6MTA0Q0IwMDBFNkQ3MjI4QkMyRkQyRkRBRDM5RkYzRUQ4ODFGMTZERUQ1Cis6MTA0Q0MwMDAyN0RCQTlFQUY4OTA0RjA5RkE2RDkxRjlDQTEzREEwNUMyCis6MTA0Q0QwMDBCN0MwREY2QjVFREY0REUwRkNGQTM4NzVERDAwRjBFRjRBCis6MTA0Q0UwMDBDQ0E2MzgwQkU0QTlGQ0FFRTE0OUMzNDFCNzM3NTUwMTY2Cis6MTA0Q0YwMDBGRkUzOENENUQzMjEzMjhFMTA0REFGRTgzQ0YwRTA1MDZECis6MTA0RDAwMDBBOTlGQ0E3MDBGMEVDREFCRDIzREVCRjlCRTkwNTJDODMxCis6MTA0RDEwMDAyNUU4RjJBNEMyRkJEOEE1MkI4NzNGQzQ3MkZBODY0REMyCis6MTA0RDIwMDBGNEEwN0U0Rjg0RUU0RjhDRTRDRjNENDNBNTVGNzBGRTMwCis6MTA0RDMwMDAzQjc2MEZCNzJGQTVGNkYyRkRENzEyMTlDRjJEMzZDRTQxCis6MTA0RDQwMDA2Qjg5RTZFQjY1QkZGRkE0N0E1OUVGOUYxRjdGODhGQzU0Cis6MTA0RDUwMDA4MjAxMTdEMkUxOEM2OEY4RjlDN0Y0RkRBRkI3QzdGMDRDCis6MTA0RDYwMDA3QTkwNTYwMDdDOEVFREI4MkQzNDFGRTMzRUZFNzQwQzE1Cis6MTA0RDcwMDBFQkFGRTNDOTUyNEY3QzQ5RkEzNEQwMEI3ODVDRkQ1QjUyCis6MTA0RDgwMDA5NkQzQjdBN0YyNzlCRjA1NDFGMzc3OEQ3RTdGM0I1NDY5Cis6MTA0RDkwMDBFQUYxRjIxNDRGMTJENjlERTU2RjRBN0Q0OEZDQkE4NkJGCis6MTA0REEwMDBERjdGRDNDNkVGNDc4RkEzNDI3RkVGRkMzQzdEM0E4RTc3Cis6MTA0REIwMDBFNUUyNzg0N0M5OEZFMzNCN0FCMTdENkE0QTc2MDk5Njg2Cis6MTA0REMwMDA5QjZEMzY1OTZGMEI2NUMxMEYzRUZFNzQyRjZGNERDNDNFCis6MTA0REQwMDA3NzhGMjc4N0IyNUMxMUNGOUI2Q0MxOTU0M0E0M0U2RDQyCis6MTA0REUwMDBDNkJBNTg4NDQ5RDUwRTQ2N0U5MTYwM0Q2RkJDNTdFQURECis6MTA0REYwMDA1Q0REMDAzRjA1RjlCRDgzMDc3MjE5NzZCNEJCMzA0RjA3Cis6MTA0RTAwMDA3NzQyM0JCOTlFRkM1MjlGNzc5Q0IzOUFBNkU3OTNCMzM3Cis6MTA0RTEwMDBERjEzQjI0MzhGNkJCQTdGNThCNjNEM0FDRjU3RDZENzIwCis6MTA0RTIwMDAxQkVGRDNCQzRCMzVGMjhBMkRDMDM3NjQ0RkU3Nzg4MzM0Cis6MTA0RTMwMDA3MDNGNDNGODk2MkVCRjY1MjFGMkM3NEJGREY3REQwOEEyCis6MTA0RTQwMDBGRkE5RDQyQUM2REIwOUFGMjY0NTY1M0M5QTYyQzRFQ0FCCis6MTA0RTUwMDAyOUYwMjMyM0ZCODlGMERGREU2QUVENDdFMERFQjYzMjdFCis6MTA0RTYwMDBGQzQxRjNFMEJEQTE2RTI5M0ZCMEE0RjRCREIyRTVDQTk4Cis6MTA0RTcwMDA2QTdDREZEMDJGMUMyODRDNkJBNTEzRjI1QTkxREZEMzJDCis6MTA0RTgwMDAzNDVBQUZCRkM4Qjg5QjZDQjIzRTdBREMwNjNFNDc4NzQ3Cis6MTA0RTkwMDBDQUJDQTBBNjZDRjc2RjQ3ODAyRjdGNTFGOTdDRDc5OUM5Cis6MTA0RUEwMDBFRjczOTNEQUI1RTFBN0I1REE3QjdCNkI5RTJERTFGRjVCCis6MTA0RUIwMDAwRDdDNkJGQUNFRjNCQUJFMkIyNUZDODA2N0NGNzVFNjZFCis6MTA0RUMwMDBCQ0YyREU5QkNDNzBERkVENjYzODY3OTcxOTFFNTA2NzI5Cis6MTA0RUQwMDA4NjNEMDdDQ0YwMjFCRDVGQUNCMzcxMEUxOUVCNkM5NDJECis6MTA0RUUwMDA1ODY3QkIxRDcyOUQwRDE4RUI2Qzk0NTg2N0UzMzlENjVCCis6MTA0RUYwMDBEOTgwQjFDRTA2OEM3NTM2NjA4M0RFNTg2RjAzQzY3QUQyCis6MTA0RjAwMDAxQkY1QkQ4NjQ5N0QyRTdDRTEzNEU0NkI1NjU4NjQ5RUNBCis6MTA0RjEwMDAyRkYxQzNDN0U3OTg2NkQ4NERFNzUyNEVCRjI4Q0ZBNUZCCis6MTA0RjIwMDA5MDNDNDg3REJGMzA5RUU3QzlDMzY4MzExNDc2NDlDRUI2Cis6MTA0RjMwMDBBN0Q0RTcxREMxNjVGNERFMzhCNzk2M0MwQzc2NjJFRDY4Cis6MTA0RjQwMDA1N0YzMjE3NzE1NUQxQjM5RUZCNTY5QzUyQjNERUZBN0U5Cis6MTA0RjUwMDA3NjhENEE4MjgwNUY1MUIxRjZBQjU5RjBBMzNBQjhCNTZECis6MTA0RjYwMDAwRUMzMDg5RkNBRDg4Njk1NDMzODZFMUY2NkZERDE1ODc4Cis6MTA0RjcwMDBFRDdFRjM0QUM5NDc4RUJGMTRBQkI4Rjk4MkVBNEJEQTJCCis6MTA0RjgwMDBCNTk5M0YxNDlENzcyRTU2OUJGM0NDMkY5NTc3MUUyRDA4Cis6MTA0RjkwMDAwNzg2MUZGODk4QUQzOUMzQzVFQkY0MTE4RjIyQ0VCQjNECis6MTA0RkEwMDA1ODQ5NzA2MTlERkU1OThDNTg4NkZCODAwMkFGQ0EzQ0ZGCis6MTA0RkIwMDBCNTk2ODMzNjk5MzdCMDVBRDkyODIyRkM5MzQxM0FCRDI5Cis6MTA0RkMwMDAwRDc4RUVCOTVDRjZDN0NGQzNBQjE1OEJCODQyODhFRTRGCis6MTA0RkQwMDA1QTczMTNENkQ3Njc0QTJDRUM3NzlGMjkyOTI4NkMwRjcwCis6MTA0RkUwMDBGRjhGRDY2NTk4MTNCODZGMkIxMjVGRENCNzE1MjkzRjdBCis6MTA0RkYwMDBCODZGQ0I3QzZFQTJBM0E5M0RFRURCMzI5RjlCRTg2QjIyCis6MTA1MDAwMDBBQTlGQkEzQUQ3NTQzRkFGNjhCOEE5QkVCQjkwRjgyRDUzCis6MTA1MDEwMDA1OTI4RjE5QjQ3RjZDMTk3MDI3ODE5RTcyRDJFMDFFRjI5Cis6MTA1MDIwMDBDODRGQzk1MjAyMkI1OTJGNkY1MEY4RENCODdCRTlBQTQwCis6MTA1MDMwMDA0MkQwRTUwNDg5MzNFMjA4ODZEQ0NDRDVFRDhCQjAwNjlFCis6MTA1MDQwMDBFQzkwQkJCM0E5QjJGRUE4RDJGMEM1NURGNERFNDk2RjA3Cis6MTA1MDUwMDBFRDE2NUM4NTcyRDJCMkVFQzExMTZFRTRENzZGQzg3MkU0Cis6MTA1MDYwMDBEMTNDQkM1NTA5QTU0MUY1MTQwQ0QyMzRDOEQ5NjE2QkFCCis6MTA1MDcwMDBFMzY0REU0RkRDRDlCRTVEMzVGQ0NFODM4M0RFQzg0N0ZBCis6MTA1MDgwMDA3RkRCNTVDRTlCMzBFNDI1Q0IyNkUzNzQxQjY4OUQwMTY2Cis6MTA1MDkwMDBGRjZBNDNBRENDRTdERDUwOUIxMkRCM0Q2MkZGQzUxOEQ0Cis6MTA1MEEwMDA2NzBCRjgyMDUwMkU0QjRCRTVCODkwNjhDMDM4Qzg2RjlFCis6MTA1MEIwMDA1RjA2QkZFRENDNDFFOUI3MUJFM0U5QkUzQ0RDNjkwOTAzCis6MTA1MEMwMDBENURGQkEzMzg2RTk3MzU4NUYzNzlDRThGM0QyMDAzN0VGCis6MTA1MEQwMDBDRTZGNTRFRENENTJFMTBGNThCNjZGQzEzQTIyMjE1NTMzCis6MTA1MEUwMDA1QjBBQjkyRkQ5RDBFM0FGQjhBRjZCRDE3QkFBQzA3OTM3Cis6MTA1MEYwMDA5QUNGRDc4QzQ5MUM0QURGMzlGNkI0Q0QzMzgxRTBCQjU3Cis6MTA1MTAwMDA2QTFGQjc2MzlEQkNDODFBQjQ3MzFFRTZCNjBENzZFNDc5Cis6MTA1MTEwMDAyNUZGNjRFQjA2N0UzRTdGNkIzMUU3NUQyRTEwN0U1RUUxCis6MTA1MTIwMDA0NzFFRDFDRjY1MTlFMzJFMjk1MEQ2Qjk0OEJFM0UxQTg1Cis6MTA1MTMwMDAyNkY1NjM0OUFDRENDRjIzNzlGRTMzQzY3NTY2QUJFMjU2Cis6MTA1MTQwMDA4NUZGMzhBRDY4QTdCRDk4OUVERkE3Qjc3MzRGOUYzRTE4Cis6MTA1MTUwMDAwRUYyRDcxMjkyRjc2REI0QkNBRUNBN0JDNEE2QTkzMkM4Cis6MTA1MTYwMDAyRkU2MjJGN0YzNEMzRDk3Q0RGMjNERUQ1QzNGNUU2N0I1Cis6MTA1MTcwMDA1RDFCRUUyM0Q3QjEzOTUyN0ZCNEQ0QTlCQzFGRDdGMjNGCis6MTA1MTgwMDBGQUNCQTk1M0YxQkQzQTFCRUZERTk1RDgxQkU0Rjk3RkFBCis6MTA1MTkwMDA4QkYwRTMxQzgxN0I3QTgzOTRBQjZDRTE4N0ZGQjdFNEVGCis6MTA1MUEwMDAyRkVGRDQ2M0RFMkRDOTc2QkEzMTFGOEE0NkE4MjZGOUJGCis6MTA1MUIwMDBBQzFDMUI2NzkyREZFOUEyOURFOTFDQ0Q3NTQ4MkE4OUNBCis6MTA1MUMwMDA4MEE3NERFODY2NkE3RkZEQjQ3RTUxRkE2MDYwNkIzRDUyCis6MTA1MUQwMDBFQjgzNjE1MUU3MDAwQjRDNzAzOTk1Nzc0MDNGODlBQjA5Cis6MTA1MUUwMDA0Q0VGOTU4QjI5QURFREIwMUVERTI0RkRENkYyNURDOUU2Cis6MTA1MUYwMDAxQkIxMkY1RTYyOTFFQkExRTk5QTdDNUVCMTU3M0UxNzFECis6MTA1MjAwMDAyMkY2RkNCOTc0OUNDNzQ3N0NDMDc0NkU1QkRGRTc0MzMxCis6MTA1MjEwMDBCRjFDMEZFQ0Q2QzA3MTlERTYwQ0QyOTc0NEQxRjJERUQ0Cis6MTA1MjIwMDA4RDc2QzREM0M4NUQ2RTQ2OUNCNDNDNDAzMEZBRjU4OTk3Cis6MTA1MjMwMDBFNjFBOUMxRkIxNEFGQUM2N0I1QzVEOTc2NUI0Q0E0NTA1Cis6MTA1MjQwMDBDNTJFNzNCRTU1QzVDMTc3Qjg5RDkxQ0YxODVENEY5RUQxCis6MTA1MjUwMDBFRkNBOEVDMDdCODJFMkU1NzM5M0RCOUJFQzg4MDc0RDNGCis6MTA1MjYwMDBEMzNBRjFCRDE0RDFGNzlGOTU4NTlBMThDRjZCRjdBNjY1Cis6MTA1MjcwMDBCOUIwNkY1QjExNzVFRjU5QTdFMTZFNjk5RkY0RjgzRjA0Cis6MTA1MjgwMDBFRTBEOTI3RTQyODM1REM2NkRFM0Y3NUI3OEZFQzk3QkNGCis6MTA1MjkwMDA3NkNFQ0I2NTg5NDVERTE3MTA0NTk3MDlERUY3QjhCRjk2Cis6MTA1MkEwMDA4RTE5MzIwRjBENzRCMTQ2RDAyNTVBOEU0MDI3NkIwNEVCCis6MTA1MkIwMDA5REU2MEI0OUE3RjlBNDREODIwNDc3ODQ5QzQ1RDJFNzZCCis6MTA1MkMwMDA0N0QyNkIwMUZFQTBGQTA1N0I5NTIwRjJERkEyRTkzM0ZECis6MTA1MkQwMDA1RjZCNjRGQUNERDdFMkZENDFENzg1RTNBOUI4RTM4M0RDCis6MTA1MkUwMDA3QUU4QTcxRDE5RjI5RUMyNjhGQTJEMTAwRDJCQjFFRUI3Cis6MTA1MkYwMDA1RDQwNzYyMzlDQ0M3MjYxNzdGMjNBNERGMUMwNkVCQjczCis6MTA1MzAwMDBGMzFCRUQzNkE5Q0YzOENFREJGMkZBM0IzQ0VGNUEzQzJCCis6MTA1MzEwMDAzNEFCMjExNzgyRUFBOTdEQkNDRkREQkNBQzhEM0NERjZDCis6MTA1MzIwMDAyOUU3NjRGQ0U0QkE3MzU2MkVBNzREMzBDRkJCNkJDRjkwCis6MTA1MzMwMDBBNUYxRjMxRjRCOTcwQUQwMTk3MjhFQjg1RTYyMUJGNzY2Cis6MTA1MzQwMDBFNjIxQ0U5Nzc4RTE3ODhERkQxMDQzMEZCN0ZBNzVFNjI4Cis6MTA1MzUwMDBCQ0U1OEJGOTdGRDE3MUMyREVDM0Y1MzhFMTIwMzFDOERECis6MTA1MzYwMDA5NEI3N0MxMUJGMjMzQTZGRDlCMEUzMkRGMUQyNEU4RUEyCis6MTA1MzcwMDA1MzczREVDNEQ5QzZFMjU3NTU1RUE3QkJBNzhGQjdGMEZCCis6MTA1MzgwMDBGOUYxNTdFNTdENzdEQThBQjM0RDkwNEYyREMxQzI3QTk2Cis6MTA1MzkwMDA3MDcxNDI1N0JFRDc0MkQzRTM3NjQ2M0Y1OUQ1Mjk2OTRCCis6MTA1M0EwMDA4OEZGMTVDN0I4MzgxRkJGQjg1QTJEODJGRDJBQTY3NkM4Cis6MTA1M0IwMDBFRTg4NzYyQjk3NzdDQjgyNURGOEY0RUU1RThGMDY2OEU5Cis6MTA1M0MwMDBCRTdDN0E1QjZBMUFFMkZFOUZBREIwQTU5MkU2M0NERjM2Cis6MTA1M0QwMDBFRUQzMTVFM0IyOTA5RkYxRDk3RDhFRTlDMTM2RTg1MzQzCis6MTA1M0UwMDAzNDVDREE4MUYyM0IzRjYwQkI3NUQyRjI3QUUyNzQ3QUM4Cis6MTA1M0YwMDBCRjZDQzVFRTQ0ODRFQTRBNTdCQzMzRDg0NTJFQzVFMTlDCis6MTA1NDAwMDAzQ0VEOUFFMUJDQkZCQTYxMEJERjA3RUREQUMwRjcwOUVBCis6MTA1NDEwMDA2ODQ4NEE2RThGN0Q4ODE1Q0NGNzQ1OEFEQ0FGQkU1NTRCCis6MTA1NDIwMDAwOTdGNzEyNUI1M0IxMTczNUZFMkY0NkNEQzZFMkEzODlECis6MTA1NDMwMDA0RkUzRUNBNjA0RkQzQzVBMzVFNzBEOUQ4ODI1N0Y4MDlGCis6MTA1NDQwMDBEQTFGODk5MUY0M0NCMjMzQzFDMzc3NjI3ODAyNTlCQzQ4Cis6MTA1NDUwMDA3RTZCMkZGNzc3NEEyRDc1RDcwMTlGNkI1MjM1NkRGODBDCis6MTA1NDYwMDAyMEUwMTFEQzkyQUU3MjNCM0VCN0FFNTVGNzQ4NkEyQjk2Cis6MTA1NDcwMDBGRTYxOTQ1Qjc0M0IwRDdGMUIyNUZDNkRFNENCQzBERkFDCis6MTA1NDgwMDAwNjBDN0YxQjI1RkM2RDNDQUY1QzZCRjZERjZFRDdGNzFGCis6MTA1NDkwMDBGQjhDNzg3MDk3OUE2NjJGRkNERDQwODFFOEVENjczQkM2Cis6MTA1NEEwMDAzQkExRTBGN0IwNUJBRjRBN0Y2MTg5RTI1OUQ1QzhGRTA2Cis6MTA1NEIwMDA1MjQyMkRENjlEMzU1NkU5NjcwNzNFOTFFN0EyMjA4MkRDCis6MTA1NEMwMDBEMDRGQkY1MEZCN0FCMDlGRkY1MERDOUQ4RkExRkQ1MkEzCis6MTA1NEQwMDBFQzBGRTVFMTFFNTNGMkJEMjJFNEY1Q0E3MzRFMTE3OURCCis6MTA1NEUwMDBFRTc2MzQzOTYxOTFGMDE4Njc4NkE5RkQzODU3QjZBOTcwCis6MTA1NEYwMDBGRTI3RTk3RDRDRjUzRjc1N0I0REYwRDVCRDg3OUFEQUU3Cis6MTA1NTAwMDA0RkY0OEMzNkMxRDdFNEZGRDRENDdFQjI2RkIyMDk5RTdCCis6MTA1NTEwMDAzQTdFODZBOUZEQjU0NUM1QTZGQUVCQTcyRjM0RDVDRkFGCis6MTA1NTIwMDBEMDZFMzFDMTM3OTZEQzY2NkE3RjkzQkZEQTU0MkY4NDIwCis6MTA1NTMwMDBGRjA5RDBDNzE3OTBGN0FBRDU2MUZERTRDMEZEMkY0RTMzCis6MTA1NTQwMDAyRUE5RkUwRkM4NjMxRTREMjJDREY3QUVGQ0U1Njc3Qzg5Cis6MTA1NTUwMDA4RkY1N0VFNDM1RDM4QzFCMzFDNkUyNkYyQjhFRkYwN0FGCis6MTA1NTYwMDA1REZFNjM0N0ZBQjYwREU3NzU2RTAzREY4Qjg5RDgyREI0Cis6MTA1NTcwMDBFNDZFMUZFQ0Q0QTBENkU3OURBQzQ2RENBQTIxNDNERTQ2Cis6MTA1NTgwMDA4NzZFNkU3RkIxNzYyM0UyRjY5RjcxOTNDOEY1QUMzQkQwCis6MTA1NTkwMDA3MzkzOTVGNEQ3ODgyMUZCNzNCQjIxRUY3OUM0RTA1OTRECis6MTA1NUEwMDA1NkQyMzcyMzg2RUY3RkI2MkJDMUZFQkEzQjY3NzFGRDFCCis6MTA1NUIwMDAxNUZCQ0ZBMEZFMUY3NUMzMjQzQzU1QjA2QjcyRkI4ODUyCis6MTA1NUMwMDBCRkREODRGQzk0MTE1Nzc2NURFRDkxNzE5MTM2Q0ZCN0I0Cis6MTA1NUQwMDAxQjI1RTg4NDczRTFBMDEzQ0EzMEM5M0RDQUZEMjRGNzM2Cis6MTA1NUUwMDAyODBGOTBEQ0NGMjNCRDU2NEY3MjhGRjIyMEFEMzNGMUUwCis6MTA1NUYwMDBGQ0RGNjg5RDg5RjI3NTVBNjdBMjdDODNENjk3MjgxQkM5Cis6MTA1NjAwMDA2ODdEODlGMkVEQUFFOTVDQkU1QkE1RjE3QkVGNTc5NTU5Cis6MTA1NjEwMDA3MEY5NDE5NTlGOUY3RjU0QjU5NENCNEZBQTAyRkNGQzMzCis6MTA1NjIwMDBDM0UxMzI4RTEwOEY3QjkzMTNGRUM5QkRDOTdFMTdERjk1Cis6MTA1NjMwMDA3RjUwQTNEQjJENTFBN0U3RDVFQ0E3RjUyQkU4RDk2ODYwCis6MTA1NjQwMDA0REZFQzJEOUJBQkY3OEYxRjVCRTU1N0MxMUUxQjc0RDE4Cis6MTA1NjUwMDBCNkZBM0U5N0ZDRURFNDYyQkRBRjNGMkZGNTZBQzdBMEY2Cis6MTA1NjYwMDA0RkRFQ0I5RURBMjM1Nzg1QkRGM0ZGMzk4OUVBREVCM0RGCis6MTA1NjcwMDBCNDdEOUZFNDNFNUQ1RTNFMUVFMTNCOERFRjhENzQxRTZBCis6MTA1NjgwMDBFMkZENzQ3NzA2NzlBQkMzMTk1NkMwN0Y2NUEwOEM1RkM1Cis6MTA1NjkwMDA4RUI0MzZENEEwQkVFNjNCRTFDNkJBRjlBNTg0Rjc3OTRDCis6MTA1NkEwMDAxRkJDODZEQzY1OUMzRjU2Q0VDOUY1Q0EyODdERkZCRTZGCis6MTA1NkIwMDBFNjNCQjk3RjNGMEFCODUzRkQ0ODk3QUNBRkI5OTkyQzg4Cis6MTA1NkMwMDA5RDE3RjUyMUZFRkUyODlDNzY5NkU3REI0Qzc5M0I2MzFGCis6MTA1NkQwMDBDRjM1OENFMUZBNzhCQjFCRjlBNkEzOUM2MUY5M0RBN0Y1Cis6MTA1NkUwMDA3MDIxQkVGQzUyQzIxRUQ5RkYzOEQ5RkZBNkVGQzJGQzAyCis6MTA1NkYwMDA3REFDM0U5MTk3M0REMkQ5OEFDRjMyQzZBRjQxREUzN0RECis6MTA1NzAwMDA5NzIzREJEN0U4RUQ0NzY5RDQ3RjMyRjBGMzRCRkM4QTZGCis6MTA1NzEwMDBBOUJEQzQ5RkY1REMyODdDMzMxOUFCNkQ1OTFGOUIyRUE2Cis6MTA1NzIwMDBDRjI3OEYzREE3RDc3QkU0NzgzQjU4MjU4QzMzMjVBODFFCis6MTA1NzMwMDBDRjRDRDE4NDhGRkFDQkNDMTQxRUM0REY0NkE1MzY2NDdGCis6MTA1NzQwMDA3MDdCM0Q5RjIxQzEyQUJGOTdFNDkxRjc3MTc1RkZCQjI0Cis6MTA1NzUwMDAyNkY3MDM4ODAwQzBERkM4NEIzMkU2NkRFNzc2RTEwQzIwCis6MTA1NzYwMDBGODc5OUQxN0RCRjk3Qjk5RUE0RTJGRjRGNUE3NUVBRDJBCis6MTA1NzcwMDBFRjA4QUFCNzNBMkQzQ0JFMUE5RjNDMkZGRkQ2OEJFRUZFCis6MTA1NzgwMDBDRUI4NUY3NEIyRUVBRkZGMTNGRTVGODFGNzQ3M0FGNzEyCis6MTA1NzkwMDA0OUZFRTM5MkI3Q0M1NjU4OTk0RkZGMEY2RDkzRkY5Mjk1Cis6MTA1N0EwMDA1RTI0MkYxODNGRjE5RkY5MDE3RUVBRkM1NzBDRkFFOEJFCis6MTA1N0IwMDBGQzNGQ0ZBRjY1OTFGNUJBN0M1Q0M4RkY5MEU0QjcyRTkzCis6MTA1N0MwMDA0RkEzOUMzMjZGMDJFREMxRkY5MTU2MjkwRjM1MzEzMjQ0Cis6MTA1N0QwMDBERkUzQTU4NEMyODc3MTRGMTZEMUE2MDhGMUY5OTE4NjNGCis6MTA1N0UwMDBCQ0Y4RTVGOUUxRkZBREZDQ0ZCM0NBN0JFNDFDNjU0RTI0Cis6MTA1N0YwMDBCRUE3RUU1MkYyMzBCQjU5MTRFMkRFQ0Q4RDAzQjU3RDZCCis6MTA1ODAwMDA5OEQ3QzVFN0RDRjU4MEU3OEFEMTg1NzBDRjhERkFBN0Y4Cis6MTA1ODEwMDAyRTUyQUY3RERENkMwMzZDM0M3RjFCRUQwNkI1RDY1Qjc1Cis6MTA1ODIwMDA5RDZGQzc0MUVGMTlERjMxREE3REE1N0ZBRkI1REQ0MDUwCis6MTA1ODMwMDBGRTlEOEQyNUUzNDJFQjYwQkZDNjU3NUIzOTZFNEQ5RUUyCis6MTA1ODQwMDAwOUMzMDdDOTlFQzk3QzRFNUZBMjM3MkQzMkZGRDM3M0FGCis6MTA1ODUwMDA2MDcxMUVFRTBCOTVFN0I3NDRCQ0Y0QUJEREY0MUZGNEFBCis6MTA1ODYwMDA2QUUxRjc0NUNCRDE5RjUwQjc1QkIxRUUzODhCN0M1QURDCis6MTA1ODcwMDBGQTRFNjFBQUQ5M0YxRjFGQjVCRjdFNTVDRTk3RUM4RjU4Cis6MTA1ODgwMDA1Rjc1ODk3QkFCN0YzNzQyRjdBN0IzNDVGNjdGRjJERUMyCis6MTA1ODkwMDBEMDg3NDdCMDdFQkVCQzdCNDM3QjhCM0E5NjgzQjFDNTM1Cis6MTA1OEEwMDAzMjlGOEJDNjZGMTk4OEI4OEQ0RkY4MDExNzBBQkYxNTQ0Cis6MTA1OEIwMDA3MjMwNUVENDVBRTVCQUQyNzdBMjIyOEY1N0VENEM5RjUwCis6MTA1OEMwMDBBQjQ1OTg5RjRGMjQ4MzAyNjM3MjBEODkwRkUwOTdFM0U1Cis6MTA1OEQwMDAyNkNEQzQ3REMwNjM3MkM3NzRDN0YzODhGQkYzRkUwMDk2Cis6MTA1OEUwMDBGQzJBNTRFRDZGQUU4OEZCRjNGNjhGOTVGMzZERjFCNTlFCis6MTA1OEYwMDAzMkRFQjRERkQ5QUQ0RDNGRjQ1NUIyQjdERDdCODAyRTNCCis6MTA1OTAwMDA4MkNCM0Y5MzNERUU0RUUzN0U4NUVDMzFFMEFCN0E1N0EwCis6MTA1OTEwMDAwQkJDNTdFODM2RTcxRDE5RUY1RkVEMUEyM0FDMjkxN0NBCis6MTA1OTIwMDBCNzc3NTcwRkY4NjMyN0QwRjlCNUU0NUU2M0MxQUZEN0Y3Cis6MTA1OTMwMDA5Mjg3OEM0NTNDRkVCNUU0MEUxNjU5M0FFQzVDRjY3RjM2Cis6MTA1OTQwMDBBRTdCNUJGODE5RjNBM0I1QkY0MkVFQ0ZCOEZGNzc2QzFGCis6MTA1OTUwMDA3Qjc5RkY2RjM0NURBRjEyMjExMzdEMjdFOEY0RkQxMUQxCis6MTA1OTYwMDA3NEZEMDg3QTM0OUFBRUZCRjQ3NUM1N0VFNzNCN0I4Q0Y4Cis6MTA1OTcwMDBCQzI5QzQ5M0JCMkY2RjYwRjg1NjlCOUMwN0U1Q0Y0REE1Cis6MTA1OTgwMDAyQzQwNUVGNEUyRjc2NDdFQzc1MUEwMDJCQkJCNzQzOEMyCis6MTA1OTkwMDBFMzNGNkFFOTUwNjFDREU1RkRBODAwRTg1REU2OTQ3NDU3Cis6MTA1OUEwMDAzQzE5Nzg2OTAwRUUyOUFGNEZEMThFODNBRjVGQUU1M0JCCis6MTA1OUIwMDBGOUJDRkRDOTY3NjIzODFFNzcyNEY4NkMyMkU4NjlDODEzCis6MTA1OUMwMDA3MTk5RUE1RUNEQkZBN0YxOUEyQUVGNTlGQUZFRTUyQzRDCis6MTA1OUQwMDBEQzJCN0EzMUI5MjY3OUZFN0FDNEEwMzZFNDM5OUVFNDBDCis6MTA1OUUwMDBCOUZGODVGMjJDMzZDOTdCMENDQTlDODU2REYyRDk1ODVCCis6MTA1OUYwMDA3N0JFMzBEMEM3RkFDMjI1QzJCNzQwRkUyQjg0NUMxRkU5Cis6MTA1QTAwMDA1NTM4NUY5N0Y3NTQxMjhDNzNBRkQxN0VENUUwNTg2QTQyCis6MTA1QTEwMDA0RkY1NzZBN0NDMTczNkY4OURFOTkwRjc1ODY2QzYwOTdBCis6MTA1QTIwMDAxN0UyMjA0MkNCRUQwQjdDRkI3NkY3QzU4REU0RkNDMjgwCis6MTA1QTMwMDA5Q0VEOTE3OTZCQTNDMkZENzhERjc5RkM0MTk1RjNERDk0Cis6MTA1QTQwMDA1Rjg5OTVGN0I4MzcxMjNGMTRGMjRGN0ZEMkNGMUZERjJGCis6MTA1QTUwMDA5NUY4OTgzQzQ0NEIxQjg5NzFBOURGQUJFOEY3RjUxRTFDCis6MTA1QTYwMDA4QTQ4RTFGODc5NkUzQ0FGQjM3RkU0N0EzRDZCQTRBRTJGCis6MTA1QTcwMDA1RjA2ODgwMUZGRjRGNzExREFDQjdCODQxN0JGOUExQjBFCis6MTA1QTgwMDAwNERFOEJBQkM5QUFBNUYyRUY1Q0YwM0Q3MTM1NTg5RkRGCis6MTA1QTkwMDA2N0I3RUE5RDUxQTIyN0ZGRkVDNTk4NTQxQkU3OTlGRkZGCis6MTA1QUEwMDA2RkZCN0Q4NDRDQTFGMUZDRkJDRkZFNEVDMjc4RjlFODgwCis6MTA1QUIwMDA4MkRGNDlDODRDNUM3NTQwNEI2REZEOUQ4Q0U4REY0OTI5Cis6MTA1QUMwMDBDOEQ0RUZBNzE2NkU2OTNGOENERjQ3Qjg1MkY4MzgyRjVECis6MTA1QUQwMDA3RjVDQkFEOUFFOEM3MThEM0VFMEUyRDIxQ0VGQzlCQ0JFCis6MTA1QUUwMDA0NDNFRDc0RDIzRjU3MzlEOTdFMjdCQjlEMEY5MkVDRjc1Cis6MTA1QUYwMDA3NTQyMEVGNERGM0IwOTQyM0U4RERGM0IzMUY4NkVGQzEwCis6MTA1QjAwMDBFRTQ5NEQ3QkY5QkIyN0ZGNkFCRjczMTJDRDlGRThERkRCCis6MTA1QjEwMDAzRDg5RTY0RkY0RUZBMDhDRDI2Mjk5NEU2M0NBRTI1OUY4Cis6MTA1QjIwMDBBRTBEM0U0REE3RkZEODFGQzBCOTVDRTVCRjlGNUZGNzI0Cis6MTA1QjMwMDA0N0NERDNCMzYyRjUyMERDNTM3QUJBNThFQUY1OEJEOTU2Cis6MTA1QjQwMDBGRjY5NUVERkVGQTE2RkI2RTk3QUJGQzYyOUUzMjFCRTI4Cis6MTA1QjUwMDAxQUFCODgxOTI1NzAzRjIxRTdDQkZFQTI0NkRFMDM1NTFDCis6MTA1QjYwMDA2Mzk1RjE4MDAwRjExNUY3RTI3RDFCRkIwRjc5OUYyMzEwCis6MTA1QjcwMDBGOTQ3QjY4RTg4Q0JGOEY5RkQ4MERERTlBQUYxNDRGQzNGCis6MTA1QjgwMDAwRUQ2NTI3OTFFRjg5MDQ1RkU5RUQ0RUMxQ0JGODJGREM1Cis6MTA1QjkwMDBDQjRFNURCNUE3QTBBRkQyNDVEMUNFRjkxQzk3RjcwRjdDCis6MTA1QkEwMDA4MTdFOUZGNTI3NDcxNkVBNjc3NTkxRjc0NzhBMUNGOUFBCis6MTA1QkIwMDBCQjQxMDZGRUIzMzI2NTVFRDZCMzIzNzUzREVFOTE3OUU3Cis6MTA1QkMwMDA1ODdCNDZDQUZEQzAwNDhGOEJDRjM1MTRFNzA4M0RCRjE0Cis6MTA1QkQwMDA1NTY0Q0RFQTBGMzlGRTg0RkRGODE2QjdGNEFCMUI2REEyCis6MTA1QkUwMDBGMjFFQ0JDMEFCMzI5RjY3OURGRjZERjZGQjM3OTM1RjE0Cis6MTA1QkYwMDBBQjRBRkY2NkVEQkQxQzY3NDgxNEQ4Qzc3RDJDQTYzOTlCCis6MTA1QzAwMDAxOUY4Rjc1QTJCNENGRTQyOUZBMEQzOTQ5N0RDNkZBQjQ4Cis6MTA1QzEwMDBDQjA0RjcwRkE1OUJEQTVGQjFENzZEQUFGNzg2N0I5QjA0Cis6MTA1QzIwMDBFQTczMEY3QTRDRjBBMDg2N0M1M0ZCMjExRkY4NENGMEVFCis6MTA1QzMwMDBEMEM2RjFBNkY2QzM4RjE0OTlFMDUzMjNCQjRBM0E0MTZDCis6MTA1QzQwMDAyNjY5M0NCMzk2Qjg4MkYyNUU3QzE5MjdFOTYyOTdGRTFBCis6MTA1QzUwMDA1NENENkQ3MjNENjFFNEFGNkJGQTNDODhDRTVGRUY2QzYyCis6MTA1QzYwMDA5NUY5RUI3NkJGQjQ2QjVBQkM1Q0RGQkFEQTA5OTdDQTE4Cis6MTA1QzcwMDBFNzYyMUExOEM2REQxMDlDMzcxRTMwRTc5OTc3NzJDQUEyCis6MTA1QzgwMDBGNTk1NjVBQzVDN0ZEOEY1M0NGM0Q4REVGMkRDOEI5MTAyCis6MTA1QzkwMDA1NzRFRUIwQTFGRThERDVEMzRDRUUwREYyRkQwRUYxMzY3Cis6MTA1Q0EwMDA4RDk2RTdCRjhGRDRFRjczOEFDMkJCOEI1RDlFQTdBQjg3Cis6MTA1Q0IwMDBCOUNEQ0VGQkU3NUFCQ0JENDk0OUJDMTA5RjZFN0E3RTc4Cis6MTA1Q0MwMDBFNDY2NjdEQkY3M0UzOTQ3NDkzOUJCMjFBRjQ4OENBMjEwCis6MTA1Q0QwMDA3NjhGOTJEOTYyRkZFQjgyRkUzQzhERDA3NzM1QkZCMkQyCis6MTA1Q0UwMDA3M0RFRjhBNUZBOUI3NTg1MUNDRjRDOEI2NUY2RTQxQzFBCis6MTA1Q0YwMDA1RTBGRjIzOTQwQTNERjc0RjQ0QkVERkFGODc0Mzk4RjdDCis6MTA1RDAwMDBFQTZGNTY1MjMzREZCQjI2OTJFQzZFQzhBRjE2QkY5MkQ1Cis6MTA1RDEwMDA2MTU3QUM0ODU2REJBMDdCRUJCOTBDOTlBNzdGRDNFQTVGCis6MTA1RDIwMDBEMEJEQkQwOENGOTlGNjVBOUJCQzcwMjA2ODgzM0M0QzBGCis6MTA1RDMwMDAyODIwM0ZEMjhCRjhFQjQzRUJFMzg5MUY4RkUyMDdFQzdGCis6MTA1RDQwMDBDOENGRThCMkFGRERFQzQwNzdGODk5Q0QyQzBGNDg0NENFCis6MTA1RDUwMDBDMTdFMjJGQzRGNzU2MDJCREU2QkFFOTQ3OURGQkU1MUE1Cis6MTA1RDYwMDBDMkI4RkY4MEYxNkFEMUUzMjMyRDIyNzRGRUZDNDRBMDY3Cis6MTA1RDcwMDAwRDc5RDNFMkVCRjkxQzgyNkJCMTk0QTdDRTExRTdBQzlECis6MTA1RDgwMDBCMEZFRkM5RjNBMkYyMUIwNDM0QUZERDg2QTg1M0NFNzFDCis6MTA1RDkwMDA3ODA5RkExOUU3NTREQ0I3RDg4QTM2QzZFM0JDODgxODA0Cis6MTA1REEwMDBBRjQ0RDBFMTg5MkJBNTVDMkUwNjFEREFDQjc2RDA0NzE3Cis6MTA1REIwMDAxNzZCNDc3RTVGMTJGNjE3NUE4NDNCQzk3NTg5QjhGQThDCis6MTA1REMwMDBGRkM0RjgzM0FEMzJDRTkwRTU5NEU3NDUzQTVCMzVENjYzCis6MTA1REQwMDAxN0Y2REVGQTNENzcxN0M4QkJBRTM3RjQzODU5MjdBQjU0Cis6MTA1REUwMDA5Q0Y3OUQzQzcyNUU1RkE4MTcwRUYwRjdFRDlBQkMzN0VBCis6MTA1REYwMDAyRDlBQkVGQzJGMjJBRTYyOUM1Rjg5MUQyQkY1ODhBMUQ3Cis6MTA1RTAwMDAxN0NFOUY0M0U5MjFEN0ExMzY1RDNGMDRCQjVCMzhFRjM2Cis6MTA1RTEwMDBFMEFFMDRGMzNDN0U3Qzk0QTQ2RkExM0U4RkM5Q0UyN0Y0Cis6MTA1RTIwMDA3QTA3OUJGNDg0QzBCRTVFQ0QwQTk1RjUwNEU5Qzk3QTcxCis6MTA1RTMwMDA4REYwMkNDNkJEMkNBRUQ2REY3QkJCRjkwMTY5Qzc0NjAxCis6MTA1RTQwMDBGOThBMUVDNEJFQzk5QzM1MzZCMTgxRjcxNUU0RkRCMDkwCis6MTA1RTUwMDAwQkY0Mzg3OTcxMjBFQTdFMTZERDFGM0ZCQjVBNzFFMUUxCis6MTA1RTYwMDA3NzIwRTZBRTMyRDcyRjg4RkZFMjEzQUMxRjZGOEVCRUNECis6MTA1RTcwMDBBN0M2RDhBRkJCNDQxQ0UwRkU1MUJBRkRGNzA4OEY5RTAxCis6MTA1RTgwMDA3RkJGMENGODlEMERDQTdCQUZDRjlGNTdEMkUzM0YyRDRDCis6MTA1RTkwMDBDMTY3MjU3Qzg3RTA3ODUxQjQ1RjYwQzA2RUVDOTM0NUE0Cis6MTA1RUEwMDBEQ0MzNDJGNDhERUQwREZCQkVEQ0RBNjY3RUEzNDFERjgwCis6MTA1RUIwMDBGMzc5MUVGQTNFMUQ5NUNCNTZGMDdBNDZFNjM3OTAzRUIyCis6MTA1RUMwMDBFMDdEQjkxMzU0MEYzRkYwNDRFMDBDQjczRkIxMkI4NjhGCis6MTA1RUQwMDBGMzRBNEU3QTFCMDY2MEZGRDZEOEE3RUJBRUM5N0RBQzVECis6MTA1RUUwMDA5NjVEMDkzMkJGMjFERTIyRTFBREYyMUVGQjQ1N0YwRjM4Cis6MTA1RUYwMDAwRUMwM0FCNjMxRjBBQ0U5OUM4M0Q2NjhERUU3OEIyRTUzCis6MTA1RjAwMDBCNUVBRERCQ0RFM0M5Q0E3RDU4RDQyN0VCREQ1RTNGNDcxCis6MTA1RjEwMDAxMDdDNzdGQzdFQkVBNzZCMDJBRDFGQTFENzkwOTdCMjE1Cis6MTA1RjIwMDAyMjU1RTJDRkZBMkI3MDQ2RDJDRjJGRTk3NzBEMzk3QTdFCis6MTA1RjMwMDA5QzlGMjc0ODdCMjI4RTI5Njg1NTRCNjU3MTc4MjhGN0VFCis6MTA1RjQwMDBGRjYzRjdDMUE2OUVGM0NBRkRERjczQzNGOTdENkRENTZDCis6MTA1RjUwMDA1MDg2N0IwNzlCNDc3RjQwRkQ1RUE3QzVCQjExNDdCQUI0Cis6MTA1RjYwMDBCNkU2MTdFMzYyRTlEMzhEQkY4RjVGQzE2NTY3RjNGOUNBCis6MTA1RjcwMDAwMUEzRkM1OEI3MjM4REI2QjZFQjI3RThGQTY3RTE5NTg1Cis6MTA1RjgwMDA4NkJFOTZGMkJFQjg1QUUxN0RCNUM1OTA3MUMwRjdDQTFCCis6MTA1RjkwMDBGQjM5MERGODRDQUQwRThGOTNGMDkyMTUxMjg2Njk4Mjg1Cis6MTA1RkEwMDAxRjNDNDdGRkREQjMyRDdBRkMwNUUzNDc4OUYxMjMyRTIzCis6MTA1RkIwMDBCMDVEOEZDRjYwRkMyODMxN0UzQzg3QkUwMjBDN0QwNTMyCis6MTA1RkMwMDAxOEZBMEEzMEY0MTU0QUU4MkIzQ0ZGM0M3OTBDRUY2QkM5Cis6MTA1RkQwMDA2M0RGNkU2Q0M0N0NDMkJFREREODg4Rjk4MTdEQkI0OEFFCis6MTA1RkUwMDAxOEZCNzY5MUVEQjE2RjE3NTk4RjdEQkJDODdBRUNEQjRBCis6MTA1RkYwMDA0NUMyRDhCNzhCNkM4RjdEQkI0ODU4RTRGRkI0MTU4NjdCCis6MTA2MDAwMDA1RUYzNEQzNkMxNTM2OTNEMzAzNjYyM0U2M0RGMkVGMjlBCis6MTA2MDEwMDBGQkQ4QjczMzdENEZCQkM1RjRGRThENjJBOUU5N0RFQzlCCis6MTA2MDIwMDBEQjQ1QjY5RkJENTQzMUVERUIwOUQxQ0M3NjdERUVEQTgwCis6MTA2MDMwMDAxNDk2QTNEN0JDNDUxOTU3QjZFN0RGQTlGQTk5QUQyQjNCCis6MTA2MDQwMDBFQjA3OEU2MzJDMkU4RkY1NDg3RUQ3OEU5N0ZDQjdDODUyCis6MTA2MDUwMDBGMzExNEEzM0ZGQkVDMDk5M0JFQzEyMUU2N0NFREYzNjA4Cis6MTA2MDYwMDA0QUVDN0I4REI1Qzk3RDJGOTREOEY3NDI4OTdEMkY5NDVBCis6MTA2MDcwMDBEOEY3MUFEQjQzRUU3QkExQzRCRTE3OUU2M0RGMEIyNTY2Cis6MTA2MDgwMDBGNkJENTA2MkRGMEIyNUY2QkQ1MDYyREYwQjI1RjZCRDc1Cis6MTA2MDkwMDBGMDFFRjZCRDUwNjJERjBCQ0ZCMUVGODUxMkZCNUU3OENDCis6MTA2MEEwMDA3RTg4RjA5ODE3QTFDN0UwQUY3NzM3QUQzMzQ5MEU0RDIyCis6MTA2MEIwMDBFQjRDOTcwOTg2QkYxRUQ5MUVGRTdBNjQzREZDRjVDOERECis6MTA2MEMwMDA3QUY4RUI5MTMwRkNGNUM4RjZGMEQ3MjNFMTFCNDZCOTFFCis6MTA2MEQwMDA3OTlFQzE2RjhGN0MwRjdFN0IyNERDQkYzNkYwNjdDNDU2Cis6MTA2MEUwMDBENjI2QUUzQjc1MDA2NTYzODJGMjI4Q0UxQkRFNzBFNUQ2Cis6MTA2MEYwMDBCNkQ5RDhCRjZDOEM1MUIyOTI0OUE3REJBQTc3Q0MxRTE3Cis6MTA2MTAwMDAwQjdCQUJFNzNGMEUxMENEMTZFODFGMEQ4QkM5M0MzRTU1Cis6MTA2MTEwMDA2N0M4NzlBNUZEQkZDQkUwRkFEQkY1RkIxMUY4MUZGMUVECis6MTA2MTIwMDBEREJCNEJGMEVGQ0UxOEZCRURDNkZCMUUzMkRCMjg4RDNFCis6MTA2MTMwMDBGNkFENzBEQkVEQTJGQjM3REE3MTZFNTUwNDFFMzhEMTc3Cis6MTA2MTQwMDA4Q0JDMTlFRjFERjEwM0IxMEVEOUEyRkY4RUYwOTY2NTNDCis6MTA2MTUwMDAzMjJGM0E1QUFFN0VBQkVCQTcyRDk2OURGQjcxMEVBNjYxCis6MTA2MTYwMDBCOTU4RjFFMERDNDdGNzVBOERDRjk5RjU5RjI5MkNBQTUxCis6MTA2MTcwMDBCNzc1M0NCRDFFNEJFNEJDREE1RjVDMjlFRDkxODFCRjc1Cis6MTA2MTgwMDAxMTFGMjU3REMxRTcwNzQ3MzQzNzhDNDlBMkY2NUE2MEI1Cis6MTA2MTkwMDAzNEZGMEVDRTA0QkJEMDdGMkZEODNGMENFQkM5N0UwMTVECis6MTA2MUEwMDBDNUI3MzE0MkNFQUJGNUVGNjkwMTg5QzcxMzhGNEQ5MjY4Cis6MTA2MUIwMDBFRkM1Q0FGNzlFNzgyQzkxRkI5RkI0NUNFMTNDQjMxMTBDCis6MTA2MUMwMDBEQjg1MEZFNzk0RUZEMUYxRUZCNzNEQUNBMkJGRTJFNTdECis6MTA2MUQwMDBCMjNGRTNCQkM1RUJCMkVDMzhDRjZERDBBQjU4MzQ4RUQ5Cis6MTA2MUUwMDBDNTdERDIyMjRGQzE5REIyQTJBNzU1NjNCRkI0QzM0Qzk3Cis6MTA2MUYwMDA5NzA1N0VEMEU1OUU4MzFBOTk5NzNDMEU3OTg4QTI0RTJBCis6MTA2MjAwMDBGMEJEQTExM0YzREUzMjhEOTdDOTM1MThCRjZCMkE3ODI0Cis6MTA2MjEwMDA2REE4MDU2RUIxQTBERjQ5NDQ4MDE0QzQ5MzA5QzY3ODA3Cis6MTA2MjIwMDAzNDRERjhCMzg5QkVENzREMkY2NjdBRjc5RTI5MTREMDI2Cis6MTA2MjMwMDBCQkNGQ0MwRDk2NTQ3QUFGOUZGNjkyMDVGRTVBRkZEQThCCis6MTA2MjQwMDA0NjJFOEQ3MTc4NDYyNEFCODAyN0Q4NUNFMzgwRkY4NDhFCis6MTA2MjUwMDA3MTBBRUI4RkU4M0MxRUY4MDcwQzJGQjdCMTNEMzdGQ0Y1Cis6MTA2MjYwMDA4N0M1MDlFN0YzN0NGRThBM0M5RjMzMDc2RDlDRTc3MzgzCis6MTA2MjcwMDA2NkY5NTlBRTJGREUxREMzNzkzRERBNUE4NUY1OUFFMUVDCis6MTA2MjgwMDAzNzE4NzkzQjY1QjdCQzM3MThGNDM5OTYxRERDOTJEQ0JBCis6MTA2MjkwMDA4REVERkMxRkFGNDQxRTRCRDc5RDg5MzgxQTc3NjJGOUVDCis6MTA2MkEwMDBFRUVCRTA1MjlFNTlCRTVCRkVGRUFDQkVCRjYzRkM4RUMxCis6MTA2MkIwMDBBOUM4RjE3MTNFOThFMTA3MEFCNUNFMUVCOThGNjNGQ0ZCCis6MTA2MkMwMDAxRTFBRTk0RjZFNzc2NkFGRERDNUJGNDdBN0ZGN0VBOUVGCis6MTA2MkQwMDAxMUY3MjlGRTRCNkUzREU4NUFCQzVFRkU5RUQ5OUM1NUQ3Cis6MTA2MkUwMDBGNzE1NEUyNzc4QkVDRjE5QzZFRkExNDdFNzYzMkQ4QzZGCis6MTA2MkYwMDBGMjAzMkZGNUZCQTVDMjY3RjZGRjJFRTZFRkZDRkZGMkQ3Cis6MTA2MzAwMDBCRkI3RkNCRjczQTU3MDM3MDA4MDAwMDAwMDAwMDAwMDFECis6MTA2MzEwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkVEN0QwQjU4NTU2NTM5Cis6MTA2MzIwMDBCQUYwQjdGNkRBMzc2MDZGNUMwODBBQThFMDAyNDU0REFDCis6MTA2MzMwMDBDOTM2MjI1RUJBMkVCOTI4MkFFMjA2QzRCNDQxREMyMDRFCis6MTA2MzQwMDAyNjc2QUMyMUIzOTExQUNBOEQ3QjQzNDhENkMwNDQ2OUU2Cis6MTA2MzUwMDA4RUQ1RDZENDMzNTM0REQxNjU0QTI3RUI2Q0I1OUEyRUUyCis6MTA2MzYwMDA5QTI2Mzk3NUE2ODJFRDI1QjUzQkU5RjFENDlDQzc5OUVCCis6MTA2MzcwMDBDRUZCQkVERjVBQjJENzc2ODM2NjMzRTczRkZGRkZGQzIyCis6MTA2MzgwMDA3QjlFNjZGMUFERUZGRTdFRUZGRDdEQkYyNTEzNkQwNkIyCis6MTA2MzkwMDAzNjlFQjEzMzdCNDU5Rjk4QzI1OEM1QkUzREE1MkM4RTE1Cis6MTA2M0EwMDBCMTUzMzUyNkM2QTA1QzU2MkYzMjJDQjM2Nzk5MkY0REJBCis6MTA2M0IwMDBDMDcyOEUyMTAyQ0E2NTdGNTAxQzgyQ0NEODc3QUJBQUVFCis6MTA2M0MwMDBGN0JGMDY0REY3QUY4MjM2MTZDNjhBQkYxRkNDNTgyNkQ4Cis6MTA2M0QwMDA2MzFEQUI2NDJBOTc3RTNGODZCMTU4QzYwQTAyMTFGNDRBCis6MTA2M0UwMDA3RUVFRjc4OUY0QkNGRUZCQ0JFODdEQjEwREZBQzFGQzczCis6MTA2M0YwMDA4MTFEQ0NCNzFBRTYzQkU1QjY1MEY5RDQ0RUU2QzNGOTk5Cis6MTA2NDAwMDBGMTE3Mzc4MUIxMTFGODA3MEM5OUMxQTQzQzM2OENCMTUyCis6MTA2NDEwMDBEMThBQjAwN0JBQjM1OURGNUY0NUUzQ0RGQjNFODNDNkVGCis6MTA2NDIwMDBCQjY2N0M0NUMzMDBFODBGQkQxRDY5RDA3RUQ2RjhGNzdBCis6MTA2NDMwMDA3MkZBQzE3QTVERUUyOTU5MjI5NDhCOERGRTM5Mzg3RTJECis6MTA2NDQwMDBCMUMzQzREQzI5RjhGRTU2NDMwMkQ0MTczMjU2MTNFQjBECis6MTA2NDUwMDA4MEY2NTBDNkZEQkE1Q0FDNDY4ODYxRUNDRTg5RDA2OTQ2Cis6MTA2NDYwMDAwMDk0NTlDREVCMDMxMDBFNUI5ODYzMkJCQzlBRTdBQUZFCis6MTA2NDcwMDBDOEM2NzY2M0NBOTgyMEMyRDRFNTUxQUNBNjFERjc2MjlGCis6MTA2NDgwMDAwQjY0MTU1RENFRDgwRkY4QkIwRURFRTMyMkFGQzRDNTlBCis6MTA2NDkwMDAyN0JBMTRBODJGRUYwNzdGMEVBMjZEMjlDQ0NBOTgzRDBBCis6MTA2NEEwMDA5REQ3NUZBOTI0QkFCQ0MzRTFFRjk2NzU4QTc1MjBDRTRCCis6MTA2NEIwMDBDNzdGNDNDREQwMEVFNjExRUYzNEZCNTYwM0ZDNUQzNkFCCis6MTA2NEMwMDBFQjYxNjEyQzU0QjhGMzk0QzAyOERFRTY4NzU0QzY4NjhECis6MTA2NEQwMDA0RDgyM0ZCMkUwNUMwQzg2ODU0RTk4NjdDMThBMEM3MzkyCis6MTA2NEUwMDA2NTdBQ0YzQUNDRDlEOUYzQTZDMDNFRjJGMEJDNjFCQ0Y0Cis6MTA2NEYwMDBFNTZCNEMzRTRCMEEzRUQzRTI5OUFEQTc1REU4NzMxMUM0Cis6MTA2NTAwMDBDMDU3OEVDNTc1MDc2RTE3MDAzRUYzMTRBNkU0QzI1QzMzCis6MTA2NTEwMDBGMzk5QjYyRkU2NjdCMDhFMUJENEIyRDdBRjA0OUE2QzRFCis6MTA2NTIwMDAwNDBGMkFDRkYxOEY3MEI5NjExRDM3NUIwMzUzMDE5M0JDCis6MTA2NTMwMDBEOENGRDM2QkYyMTMwRDhDQkQ2MUUyNzBCNTk4NUNDQUY1Cis6MTA2NTQwMDA2MDU4ODc2OTdCODY3RkIwOENGQjkwRTgzRDMzMDYxMkVDCis6MTA2NTUwMDA5RDc2RDhDN0RBRjZGQjQ2QzI3QkFGMjJGM0ZEOTk1Qjg2Cis6MTA2NTYwMDA0QzBDMDc2MjNFOTMxM0UwQkMyODlEMjkzRTg0QkI5MUVFCis6MTA2NTcwMDBFM0QxOTEzNTJGM0RERDJDRjRBQ0ZGODg4OUNENkIwRjM1Cis6MTA2NTgwMDBCM0JGM0FDNTQwRjM2QzAzQkM5NTQ3MzJGNkRCNTU1NkIyCis6MTA2NTkwMDA3QTNFQjE0QTYyMzJBMEUwNTNBQjEyQThGQzM0RTAzMTNCCis6MTA2NUEwMDAzRURCNTc4REEyRjdDRkFENzI1MEY5ODU1NTkzQThGQzBECis6MTA2NUIwMDBFMjJBODVDQURCNTdFNUQzRjM4RkFCOUNGNEJFNjBCNDA3Cis6MTA2NUMwMDBFQjE2MDVENkZCOTA0MTM5N0MwRkVDNkY5MEQ4QzIxMENBCis6MTA2NUQwMDA2RkYxRENBRDEzN0FDRTM3QTJFNUJCMEEzQzhGMkE5QjY0Cis6MTA2NUUwMDA1OUM2NzU1NzAxNjg1Q0IwOEY0QUM1RUFBODA3NTAwMEM0Cis6MTA2NUYwMDA2QzFCMTNBMDVDMkVCMkVFNjY0N0I4NzNFNzcwN0M2QzIwCis6MTA2NjAwMDBGRTdGMkQzNTQwQkJDN0VFOEEyNEJBRDVFMDU3NjYzRUUzCis6MTA2NjEwMDBGMEJBMzVBNTA3N0UxRkQ1RkVEQUM0MEM3NDZDNjkzMjVBCis6MTA2NjIwMDBDQzdCNDM0RDg0QTMzOTA1RjFDM0U5QzFGNTQ2QTUzQkI1Cis6MTA2NjMwMDBDQzJFODBEN0JDMjk4Q0M2QkQzMkQ1RDk4OEVGNkY1RUYxCis6MTA2NjQwMDBCQkVCRDEwRkYwRkM3NkE2OTg1RDcwOUUxNURCMzMxQTdDCis6MTA2NjUwMDAxMzY0RUNFN0JBNTc4MTc2MTUzNkM5OEM3ODc3OEIzNzk3Cis6MTA2NjYwMDBDNjJDRTNGOUM3MDMzRDIwNkVCM0VFRTQ2MjdCMEZEQzdBCis6MTA2NjcwMDBCNzI4MDI4RDdCN0QzNjFGRkYxQjNDMUY2QUQ3NjIyQTFECis6MTA2NjgwMDBEMkI1RTNFNzczM0UzRDFDOTg4MkYwRjIwMEZCNTgxRDQzCis6MTA2NjkwMDA4M0Y0RjBFMjE0M0M3N0U5NEVBMDkxQzlCMDFFRjYzRUI3Cis6MTA2NkEwMDBENTlCMTM5OEU0ODkzOTFGNUU4M0Q5MDEwMUVCMTMwMTRGCis6MTA2NkIwMDA5NkVFQzkzREYwNkIxRTU1NDk3Q0NFMDQzNDI4QzYwNEM1Cis6MTA2NkMwMDBDMzhGMTEzRDg1RTJDRkZCQjgwRjgwNEJFNTBBNjE3NUEyCis6MTA2NkQwMDAwM0NDNUZENTI2RkEwNDAxRTlBQkUwMERBMkFGNTY0MTI5Cis6MTA2NkUwMDAyNkZBN0E3MDk4Mzk5MUU4NEQ5MDkwN0YxNUY0OTdBNzIzCis6MTA2NkYwMDBDNjQzRkJFRUZCMDQ2OUIzOENGNDBBNzM4REVCMTlCNzQ4Cis6MTA2NzAwMDA2QUZENjRBMkI3MkExRjNDMzM3QkE3Q0I5RkI1RUU0OTM1Cis6MTA2NzEwMDBEQTIxRTMzMTJBNjY1QzY3OTVBNDk4RkIwN0QxRkJBMkQ2Cis6MTA2NzIwMDAxNjgxRTgyMkI0RkM5QTIyNzIzQTYyNkY5QTEwNkU2NTYyCis6MTA2NzMwMDBDMzY1QzE5MzgxRkJFMUY4QjE2MDQ1OEFCOUQyODZGNUEyCis6MTA2NzQwMDBDQzZGODA3NTE1QTRCMjM3QjA1RDc3MkJBQzM3ODVDRjkxCis6MTA2NzUwMDAzMzJFNjhEQzRBMUMzNzY4NUU2OEJGRDAwOUU1NzcxNUMwCis6MTA2NzYwMDAzQkMxQjU0MjkyQ0Q4OTI4NTcyNDg5RDY1N0I5NjI5NzQzCis6MTA2NzcwMDAwOUUxQjMwOEUwMkM2NDIwM0MxQzY2MUI4RUJGMTRDNkU0Cis6MTA2NzgwMDAwN0Y4REQyMEY5RjNCMEZFODY3NDk5RDVDMzM5NTQ3QTQxCis6MTA2NzkwMDAzM0NDQzg5RjVDNkJGOTNDQUVBNjE4RjNFNTUwQUUzMDI1Cis6MTA2N0EwMDA0QUU2MjQyODk3NDUzMjNBMzc1ODlGMEZGQjU3MDEzQzU5Cis6MTA2N0IwMDBGQURCNzA1Q0I2MTA2NTRCMjg1QzJBRDRGNTU2QjVDNDdDCis6MTA2N0MwMDA5ODE3RUJERUI3OUFFNDc0RTI2QjRBMzg3RTIxNEVFMTBCCis6MTA2N0QwMDA3ODVCRTkyRDRBNUU4N0U3RURCNjRCNDRCNzQ2QzVFQ0RBCis6MTA2N0UwMDBDMDc1QTlGMDlEREZCNkNFOTQxMkQ0RkY1QjE1OEZDNTlFCis6MTA2N0YwMDAyOTFDQ0YwQTUyRkQ2OTAyRUVGN0Q2MDgwN0FFNzdCRTE0Cis6MTA2ODAwMDBENDYyNDI3ODlFODNGMzgzMUMwRThCMjU3RjFBOEVCRjQxCis6MTA2ODEwMDBEOENBRTE3MDBFM0ZEQUY0RTdEQUIzM0UwRUVGQUFCNjVCCis6MTA2ODIwMDAwQUEyQkYxQjhEQ0VFNDc1RDBGRjQ2NThBNzFCOUVGMzZFCis6MTA2ODMwMDBEN0VGNEExM0YwMDlGNDJFMjA3RjkwNUNDOUNFMjA3QTVFCis6MTA2ODQwMDAzQkZFRTBGNUM5QjQ3RjU4M0ZDMkRCRUU5MEE3MjJERkU0Cis6MTA2ODUwMDAwMUJDMjFCOUFCRTE0Rjc5MjZBNzZCQURERkUwMjk0NjNBCis6MTA2ODYwMDA5QTc3RjA5NDRCQTNEN0FBQjVFRjUxRkQyMkEwNTc5NDg1Cis6MTA2ODcwMDBCNzY2RjY4MjgwRjU2NjYwODRFMUU4MzcwOTQ3ODZGNkY4Cis6MTA2ODgwMDAzNkMwMUY3NzYyMEZGRENFNjc4MUY5Qzg1RjE3QUQyRDQ3Cis6MTA2ODkwMDA2MkFFMjBGRTAzRjJCNkU2QjkzMEYwOUE4N0VCQ0QyMjY1Cis6MTA2OEEwMDBCOTQ1RTcwRDc0RjgxQUVCREY1MzlGQUQ5RTc3NTlBQUVGCis6MTA2OEIwMDA5RUZFNzEzQzFDRDdBMUQ1NjdGQkQzNkU0REVGNjlBRjJGCis6MTA2OEMwMDBDRDVCRDY5RkY3NDM3QTQwM0M3NEE4RjBDMUY2Q0JBOUM0Cis6MTA2OEQwMDAzRDJGODMzQzVFREQ4MEZDRTEzRUQxNjcxMUYwRjk3ODBECis6MTA2OEUwMDBDMzQwMkMzRjBCRDIxNkI2RjZDNUYyOTdERTlEMEJDRkY4Cis6MTA2OEYwMDBDRjFGREE1NDhFRkJEM0Q2QjExOEY0MURFNDEzMzdBQTk4Cis6MTA2OTAwMDBGMkI5Q0ExRjlFNUZGQzYyOTJFQkJBMjk1OTQxRjhGM0IzCis6MTA2OTEwMDBDMEVGNDcyMEZGRkVFMkU5NzdEMjEwQ0UxRkRCMzlCRjgwCis6MTA2OTIwMDBGQkQ5RUYxRjM3QjFENDlFRjU1NzM2QkQ2N0FBQjAwNTI2Cis6MTA2OTMwMDBDMzhCRjNCQkU2NTEwN0U5RkMxNjhERTJGRDE2NzlCRjY4Cis6MTA2OTQwMDAyNUY5QzU0MDdFQTVBNTlDN0ZGRTE1REU2Nzc5RkI1QTFCCis6MTA2OTUwMDAwN0I1NzdEOUZFQ0NDRjdGMTA5M0M0QzQwQjlGQjc3NjExCis6MTA2OTYwMDBCRUExRTdGRUE4QzlFOTRGNDA3RDM0QjU0NTQ3RkZBMTY4Cis6MTA2OTcwMDBGQkFGNTBENzVEMzU4NUYzQjcxQjU0M0NCRUExQkE5NTJDCis6MTA2OTgwMDBGQTU1MzY1NTNDOEU3QUVGN0M4RDdFQUJGNEVGQjVGMzNECis6MTA2OTkwMDAzOUI1RDY0NEU3NzM2QTZENUEyM0VBOEJBN0RBRjlGOTU5Cis6MTA2OUEwMDBGQzhCRDgzRTc2MjVCNEZCNjJEOUQ2NUIxMjUzNDkyRkI3Cis6MTA2OUIwMDA0OTQ2QkQwNENGMDdGNUQyMUI1NUZENzQwOTlDMEZFQTZCCis6MTA2OUMwMDBBNzYxQ0VFNzM2RDRDQkI0RjI5MkM3RjhGOTJDN0E3QTI1Cis6MTA2OUQwMDBERjI3N0Y5NDA5RkZGOEZFRUVCM0Y4OTBGRjU2QjYzRjJECis6MTA2OUUwMDA3QkU4NEE3ODNGQkZBOUQ1OTQwMkVEM0M1MzUyMDgzRTVDCis6MTA2OUYwMDBFN0Y4N0M0RDg2QzRBMjYxN0Y0RDlCNENDODA3M0NEQTBBCis6MTA2QTAwMDBCRTQzRjA1QzgzMkIzMzcyM0VGMzI4RThGMENEMzE1QzVCCis6MTA2QTEwMDAxRTA5RkQ3QkRBQ0Y2NzRBM0NGMjExRTYxRUMyQjZDNkZDCis6MTA2QTIwMDA5REJGRkVBNzU1M0EyQTQ4NzU5ODQ5QUUzNTQ0QjFDRDY5Cis6MTA2QTMwMDAxMkFFQTNFMjdFMzZCNjc3Rjk3NTM0ODJEMzA1NDg1RDhGCis6MTA2QTQwMDAwNUU5RjNFODE0NDczMkQyODVBNkJGODZCNkRGQUFEMjlECis6MTA2QTUwMDBEN0UwQThGNkY5QjhERUMxQjEyMERGMDFDNEJGODk1NDgwCis6MTA2QTYwMDBCMjUxRUZGOUNEOTU1NkM5RTNDMEZFMkUxOUVCMkQ1NjY0Cis6MTA2QTcwMDAyNkExN0NERjZDOTBDNzExN0U4MjdFN0Y0RjIyQzIzMkJFCis6MTA2QTgwMDA5MDg1N0M2RkY4QjJDMEI3QjgzRTQ0QTc4ODcxRkM2OUE2Cis6MTA2QTkwMDA4NzdEQkZBM0MyMEI1NUYxODFGQ0JEMUY5RjQ5QzY3NjAwCis6MTA2QUEwMDBFMjUzOTFCNTFDRkY0MkY1MENBRDVGQTg3RTExQUE1N0M5Cis6MTA2QUIwMDBGNEI2QkYzRDE3QjlCRkEzMjkyRTFGQzk4OTA4MjY2RDlCCis6MTA2QUMwMDA4RUExRkQyREM3RjJCOUZEOEQ2MjhBMDFGQTk3RkZGMjAyCis6MTA2QUQwMDBGMjREQTg0RjFFQUQ1Nzc2OUJBMUZFRTgxRDM2RUFGRjhBCis6MTA2QUUwMDA4RkRBNkZFODNFRTc1NzU1RThGNjc5OEU2RTVBNDRCMjcyCis6MTA2QUYwMDAzMzRFQjU2NDI2OTM1RDA3MzYwRjgzRkFBM0I3NDYxODY1Cis6MTA2QjAwMDAxMEZFNDc1M0I4QkUwMDE2QTAxREY1QzQ2REFBMUQ4OTFFCis6MTA2QjEwMDBGQTM4M0U1MTFGNjcyM0I5M0U4RUU1QTc1NUJCMTJGNUUzCis6MTA2QjIwMDA3MTdDN0Y1Q0M1QkZCMjQ4MjUxQUU1NzI3N0JENUREQTFFCis6MTA2QjMwMDA4Q0YwRjA3M0JBRTlBQzFENDY3MDAwM0Q4MUYzNjM1NUVCCis6MTA2QjQwMDAyRkU4OTQwMkY2RkU0MTdDMUFFNEM3N0QyOEVGNThFRDQ5Cis6MTA2QjUwMDAzMDg2RjY1RDY3Q0I1MUJCMjExREYxOTJBRjRGNkJCRjA1Cis6MTA2QjYwMDBDMkQ0QzJFRUMwNzYwRjBCQkVBRDMwNkVENDhBRjdGMjNGCis6MTA2QjcwMDBFMjUxNEVCN0E1NjQwOEQwNkY0MUVENjlFMjg3MEI2QzE2Cis6MTA2QjgwMDAwMzY1ODY3MkRDRTY2QTlDODhGNUVCNTNBNEQ1RDAyREFDCis6MTA2QjkwMDBBQTJEQTNCMzE2RkEyRkY2OEUyNEZCNzk4NTIwOTM3RUI3Cis6MTA2QkEwMDBDRkVBMDVCMjJCOTk2QTFGMkNDMUJGQTBCQ0M0RjZDNkEwCis6MTA2QkIwMDA3MDk1NUYxQTkwNUYyRUJBRkY4RUM2NDQyODFGMzZCMEJDCis6MTA2QkMwMDA2RTExNDA1MzYwMjg5QThBRTU4MjBEMzEwRTBGQ0E1QjIwCis6MTA2QkQwMDAwRkRGMEZEQjA4N0NENERBQzM0NzRGNEY3MkIyNkNBNENGCis6MTA2QkUwMDBGN0IzODA2RjMwRkU2ODU4MUJEQTUxMkI0Q0VEMEFBRUJDCis6MTA2QkYwMDA5RjgxREVCMTk1RTE3QTlEQTRDN0FGNTJGMUEyQjNFREJBCis6MTA2QzAwMDBCMDVENTZDRjA3RjVGM0UxQUVFRUMzRjdFMEI5REEwQ0FECis6MTA2QzEwMDA4RTY2MTlFNUJCQkM1RjQ2QjhCRjI1MzJENDY3ODczM0EzCis6MTA2QzIwMDA1RUJGRENDRUVCRTE0OUZBRjFGMjREQTI4RjkxN0U1Q0MyCis6MTA2QzMwMDAzNjMwODBGQUQ3N0E5MUY4RTJFMjREMjUwMzUxREY1OEQ5Cis6MTA2QzQwMDAwQzY1OTQ1RjFCNzAyQUMwQTdDNkI2MUNERUFFMzVFRjdDCis6MTA2QzUwMDAyMTM3RjBEMzY0ODEzOTkxMUYxRDMzMDY4QTEwMUUyNzE2Cis6MTA2QzYwMDAzN0M1RjdBRjQ3N0RFRjY2Q0YwODA2RjU1NTlCRUU0OTcwCis6MTA2QzcwMDBDNkU3Qzk0RDExRjM5MDhGRTc0QTQ1QjkzMUE4RkY2Q0JCCis6MTA2QzgwMDA4Q0M5NDBCQjVGQTNCM0Y0NkMyRTBGNkVCQTM5MjcxRUJDCis6MTA2QzkwMDBFNUREQjJCRkVGNzk1NDAyQjlCQTE4NzA1NDQyM0Y0OEVCCis6MTA2Q0EwMDA3Qjk0Q0YwRDREOTZBRERBOUUyQzAyNkFEOUUzNUMyMzFFCis6MTA2Q0IwMDAxMTZFRkY2MkQ4Mzk3NzMyQ0E2MUMxQjcyRDkxREFDQjM0Cis6MTA2Q0MwMDBGMTUyMUY3NkYzNzFCNDJCMDE0RjZGQkVGQjQzMUFFN0VECis6MTA2Q0QwMDAyQkMzREVDMkY5RDA3RkQ5Q0RDRjQ3RTMzOEZGRjI2MEI2Cis6MTA2Q0UwMDBDNzA0MDlERTFGMUJFRkNBQzRGMTNGMTczNjZEOTNEMEVFCis6MTA2Q0YwMDBBRTVEQkY2OTJDQ0E4RkYxQUE3RDU0RDBERjM5NzczRUQzCis6MTA2RDAwMDA4N0FGNjNCM0RDRkI3Q0Q1REIwNTgyQTc1NjVFRTBFQjg3Cis6MTA2RDEwMDA2NzY2QTg5N0ZBOTk1OUMyQTdDNDQ4MEYzRTI5QjI1QTg0Cis6MTA2RDIwMDA5NEVGOUE1RUEyQkQ5Rjk2Q0RGOUNGQzk3RTJEQzk3ODBBCis6MTA2RDMwMDBGRTRCQjdBRDRCNDZGOUYxOTk5RDk3NUQ1QkZFQjRGOEZDCis6MTA2RDQwMDA0RTU4ODdBQkNEMjAzMUMwM0I5NzkxOTFERUJCQzhDRDZCCis6MTA2RDUwMDBGNTY5NTYwRENDMjRCMTY3RkVBMkVDMjg4MkYzRDJGNTdBCis6MTA2RDYwMDA5OTNBQjk4NzhFMTk3Q0ZGOTk5MUU1RTMzQTg2N0FCQTA4Cis6MTA2RDcwMDAzMzUwN0ZGQUM4RTg1RjhDRTdGQTExRThBN0U4OTc0OTMzCis6MTA2RDgwMDBDRkU2RjhGNzUxOEIzODE1REZCQjU3MDgwQ0ZENEYxRkM2Cis6MTA2RDkwMDBCNTNDNkYxRkNFRkQyOEU0Qzc2MDJGOUI3QzVCQTFCRDc3Cis6MTA2REEwMDA3RDdDQkIxRkY5REVDRDJGQzQ4QzQzMzBFNjg5RTlGMTMxCis6MTA2REIwMDA4ODNGQ0I3Nzk4QTYwRUU2RkExNDVBRDM2Qzk5RDE2RjE4Cis6MTA2REMwMDAwRTc3NkUzN0E5N0FENEI5RjIwQkNGOUExMUVGOTczREFGCis6MTA2REQwMDBENTRBN0UwNTUwNTM3Q0E4REYyQzZCN0ZGNjhENDEzMDYxCis6MTA2REUwMDBERTJEREIyQjMyNzExRUFERkQyRDJGNzAzODQ0QjA4MEFGCis6MTA2REYwMDBCOTI0NDhBRkFFMThENUJGNzEzMEYwQzhFNUQ5RjlBRUE3Cis6MTA2RTAwMDAwNzUxMUZDMjczQkExMkQ0MjQ2NTUyNDVCRDExOUYxMjk3Cis6MTA2RTEwMDBFRDkzMTlCQjQ5MUYwN0ZEOEFFQ0VCOUJCRDdDQkM5QjI2Cis6MTA2RTIwMDA0NzFENkM0Q0E1N0QxNUM1QjJBMEYzQkYyRERCNDRFNzEzCis6MTA2RTMwMDBBNUY1ODc3RDUzM0Y4RkY1RUVDNzAyQjA1RUM1NjM2NDRECis6MTA2RTQwMDAxMUQ3NDJEOUM4M0VERTg2RjA2M0QxRDI1NkRDODc5MTk1Cis6MTA2RTUwMDAxRDdCMDM5RTJCQzU3RUFDMTk5RTFCNkI5NkZGMkJCNTJECis6MTA2RTYwMDBBRkI3NDgyMjNDM0QzN0Q3M0QxMzgwRjk2NDkxMzkxOUJCCis6MTA2RTcwMDBGNDc3NjdEN0QwNzg2RTMzOTczRkVCQTI5RTdFRjg0NkMzCis6MTA2RTgwMDAyOEQ3Q0VCMTM5MDBCREExMUM0REYwRDlGOTBCMDNGMUMzCis6MTA2RTkwMDBGOTQ0RDZCREM3MDBDRjc4MDY1NDA0MDAxQTkyRUE2QUI2Cis6MTA2RUEwMDAyMUJFQzMzODNGNUU3OTlCRUM0MzdFMEMxQzVDNDAzQ0FBCis6MTA2RUIwMDBGRkU2OTUxMzk5QjhFRTZCODcwNjRFMjM1RTk5RUFBNzE1Cis6MTA2RUMwMDA1N0U0MDJGREFGQ0Y1NkUxOTIxRUM4QzQ3NjAzNzZBQkZECis6MTA2RUQwMDA3Q0NENzg4MEU0QTMyOTQxRUU4RkZBOEExRkM3QzJGNUUyCis6MTA2RUUwMDBGREQ1NDA3OEIwNTNGMDNGOEVGMzZBNzBEQUE3RDJGQjNECis6MTA2RUYwMDA3MzE5QUU0REQ5RjA1NDA0RDNFRDdFNjgzRjVCODg3NkFDCis6MTA2RjAwMDBFMDdFMEZGNDE3RDNDNjBENDMzRkM0QzcyOTM4QUUxQjJDCis6MTA2RjEwMDBEMDU2MUNEQ0EzQzc2NkFCNEIzNzBGOUFCNDFFRTEzMkM4Cis6MTA2RjIwMDAwNTAwQ0FBRTA2NUIyNkJEM0YzMzQyRjk1RTY2RThCNjkxCis6MTA2RjMwMDBDMDNBQjJCQkZGQjJBOTFFQ0FEMkFGRkIzMTExNDQ5NTExCis6MTA2RjQwMDAyNzIyOTk2NUMzRjhDMjZFRDgyOEVDNjc3N0ZBRUU0NTE4Cis6MTA2RjUwMDBCOENFN0JCQkFEMENFMUM0QUM3QTNERDc2QzQ4RjRGRjM2Cis6MTA2RjYwMDAxMkYxQjkyNkRBQzExMjUwMEVCNTY3MjAzRjYyQjdEOEM4Cis6MTA2RjcwMDBDODNGQjNFMDZDMjBFREU3Mjg5N0ZFQkE5N0Y0RjQ5RjgyCis6MTA2RjgwMDBBNUJBNUU0NkI4MEUxMjk1QzMyRUE4QkY1N0YyMEZGQkU2Cis6MTA2RjkwMDAxNThFNUYxQkU1QThFNzcyODQwNUFGN0ZFNzFEN0Y4RDI3Cis6MTA2RkEwMDA4RTg1N0VERjc0OEYzMDNFMDNFREJFNTFBQzBFRjRFNzZDCis6MTA2RkIwMDA3NURFMzlFNkI1QUJBMDdDQjUyQTRGNDJEN0Y1NEQ4MkQ4Cis6MTA2RkMwMDA2QzQ0QkJFMzlCNkVBQjFGRjU5MDZGNkMwNkYyNzM2NDcxCis6MTA2RkQwMDBFRkRDRjMyMUZBMjFCM0FEMzZCRjE4OERGRDRDNUYwNjBGCis6MTA2RkUwMDBDQjFCNzYyMDI5RTZGODE4MTIzMUVDMDc4MEU3NDA1NUQ0Cis6MTA2RkYwMDAyRTVEREI0RjZGM0Y3NjY2NzMzQkE4NTNFNTNGNDZEOTY2Cis6MTA3MDAwMDA0MTcwM0VFNTM2QjI2NkM0NDMwNjY1OUNENzY4OTU5QUUyCis6MTA3MDEwMDA2MTdEQUZEQUI2MkQ0MEZGRDVBOUVGNTNGQkExREMzODc3Cis6MTA3MDIwMDBCNTczNTgzRjk2REUzQjVGRUM0MDdEMDJGNDg0ODg0QzlDCis6MTA3MDMwMDBFNTUzM0M3RjREQkU5NkFBNzA4OTY4QjlERTg0RjBGMEI2Cis6MTA3MDQwMDAwMDNDRDBCRjU2NkEzM0Y4MkRFODVGOURBMzg3MDNBQkExCis6MTA3MDUwMDBFRDJFNDdCQzYxODY2ODA3RDIwRDlFMkY5RUJGMkMxODZGCis6MTA3MDYwMDBCQUQ5NTVFNzlGRjc3NTY3MjVGRjJGQTFCQzAwQ0UxMzRFCis6MTA3MDcwMDBFMTVBN0VFQUY4RTVCRjYyNzQ2RURGRTIzQUUwMUMxQjdCCis6MTA3MDgwMDBBRTYwM0RFN0Y3QkZFREJDOThEMUQxODRFN0IwNTJCNDE0Cis6MTA3MDkwMDBCN0UwMzk3ODhDNUNERjczMDM2RTZEOERBMTZFREJGMDI5Cis6MTA3MEEwMDA1QzU2N0E4NkQzMzkwREY0MDA5RjQwM0IwNTk4REFFNkFBCis6MTA3MEIwMDAzOEU0MkIwN0E5RkQ1NkNEOUYzNkFBODZGODRDQjlDN0YwCis6MTA3MEMwMDAyMjIxRkNCRThCOENBNkZFMENDRUQ1MzQyODFDOUZFMTYxCis6MTA3MEQwMDA3Q0E1QjY4QTExNUY1OTk4NUUyM0UwQjkyN0UwMENCMDExCis6MTA3MEUwMDA5RjRFNDNDMDhFRkIwQzQ0ODAxNjA5Q0Y2QjcyNTI1NUU1Cis6MTA3MEYwMDBGRDFCMzg4MkVBNjdDNUZFOEZEQzYxREY4Q0ZDNDZCNDdECis6MTA3MTAwMDAwRTdFRTQxODg4MjJENkQ0MUQzRDFBRDZENTI2QjA3NjM4Cis6MTA3MTEwMDBEQTk3NDlFNTFGNEI2REE0Q0ZCNUM1Rjg4OEJGQjU5NTgzCis6MTA3MTIwMDAwRTcxRTA1RUJGNjE2QTdENzUyNEYxOTdBQjBDMDYyQTkzCis6MTA3MTMwMDA3N0NGMUY0OEY2NTg1QjBDQjA1NjFDNkZGRTY4RDIxQjA5Cis6MTA3MTQwMDA1RUZDM0I4Rjk3NzRBNzMxNUU5RkMxNDZBQ0M3RkFBMjI1Cis6MTA3MTUwMDA1MTM0REVDQjFBQkZCQUNGNEVFM0I1MTUyOTg5OTE1NDBECis6MTA3MTYwMDAzRkQwODBGRDVCNTM1QzEzNzM4OEFFNzkzQjUwM0NBOEU1Cis6MTA3MTcwMDBERDg2MEQ0QTIyOUVFNzg2NjIzM0I1N0I0ODcwQ0U1RjdFCis6MTA3MTgwMDA4Q0UzNUM2RTIzQkQzMTMwM0ZGMkU5NkRGQzM4RkRFOEU1Cis6MTA3MTkwMDA1RkVBQUNFNUZCRDZFODQwRjNBQjBGNzUxRjdFMThGOTRDCis6MTA3MUEwMDA4NzNCMUI0RTA0RUQ0M0VCRDcwQjEwQUYxNTMxREEwMUQzCis6MTA3MUIwMDAyODdDREUzOTdGNzcwRUNGNTkzNzAwOTdDNTQ1NzY5MjA4Cis6MTA3MUMwMDBCRDJFQTczMTA0MzY5QzlGQzRCMjExNEZGNjAwM0NBMURFCis6MTA3MUQwMDBCRERCMDRFNzFDQzdDRjc5NzUxQzlFNzNFMUE2RTA3Mzg1Cis6MTA3MUUwMDA4NkYxREMyQkUxQkRCMDNDREEyMTRDQTI3MzFFODVFM0I1Cis6MTA3MUYwMDBEN0IyNDgwN0RBRDdFN0NFRUY1NTVGMDYzRTQ1ODMyMzdGCis6MTA3MjAwMDBDMTAyQjBGODNDRDUzNTNGMjdBQjQ3OEUzQ0YyMDlFQ0M0Cis6MTA3MjEwMDAwRkUwNTI2RTA5NjRCNUEwN0U2RTYwRDVFRDYxRjhDMEQ2Cis6MTA3MjIwMDBBMjFDNkUxRjQ4QUNEQjg0RjI3NUExODZGRjc1MjFGOEE1Cis6MTA3MjMwMDAxRjE4MTI3MzNDNEFDNTdGRThGNzRBQkM3MzMxOUVDM0RFCis6MTA3MjQwMDA1NzQyQzcwNDdDQjlGNzZGRTJCQzcwRTNERjlDQzNGOTE3Cis6MTA3MjUwMDBENjgxMzhFNzMyNUNERjcwRTNFRTIxQjdBMUJFNzE4N0RCCis6MTA3MjYwMDA4NUY0NUY3Njc2Q0YxMDlDRjc3NzI5Q0U5RkUzNzgxMTZGCis6MTA3MjcwMDBDM0JCQzlCRkRFOTlEODZEQzJGRDc1Q0VGRjNDMDlGNTExCis6MTA3MjgwMDBBQzg1QjU3RjIyRkFCQ0Q4RjVBRDhFMUE2QjQyQjkxOTIwCis6MTA3MjkwMDA5MzlGNjEwQTQwRkZGOEZDOENEN0YxNUMwRUNFQjJDODE4Cis6MTA3MkEwMDA5NjMwN0U5MDVEQjMyNjI2QTEzRUQ0MzE3RDYyMTJGMkU3Cis6MTA3MkIwMDBDQjhFMjQ1ODMzQzk1Mzg3MURGOUE4NjlGQkU1NzY1QzRBCis6MTA3MkMwMDA2NzQ3N0UyNjk1NjUyNkFCRTU5MjNFRjlFQjE3QzA1RkQyCis6MTA3MkQwMDBGREEwMDg3QzA2RjYxQTNFNEY4MEJERTYwNzdFRkIyOTFFCis6MTA3MkUwMDBEODZCRjgzQzBBRjYxQUJFM0YwQ0Y2MUEzRUJCNTYzOTZDCis6MTA3MkYwMDBFODdENDdGRUIwRUQ4ODE3Njc1QUI4MUY2NTkxRDExMTM4Cis6MTA3MzAwMDA1NjJGNUJGNjk0QzhGQzFBN0Y4M0ZGNkVEQTEyQTUyQjBBCis6MTA3MzEwMDA1NzZGOENENTk1NkY2QzAzMENCMkY2OTRBQkQ2MEVEMzI5Cis6MTA3MzIwMDA5NTM1RkRCM0QyM0I0NkY3REU1NTk3QTkyQkZGM0YwM0JBCis6MTA3MzMwMDBERjI2MEU1RkY0OTdGRjZGODIyRkZFRDY4MkJDMkJDMTMzCis6MTA3MzQwMDAzRjAwQkZGNzY1NEQyMzNFREEyMUIwOUE1ODc4QzY0ODEyCis6MTA3MzUwMDA5Q0ZGMTk5RDAyRjlEREYwRDcwMjcyQkIxOEZGMDBCQTNECis6MTA3MzYwMDAzMURBRTQwNkFDRjc0MkZCNUY0MzVCQjQ3REQxRkU2MEVCCis6MTA3MzcwMDBDQzYxQUE4MEY3QTVGOTExMTJDQUYzQjlBQzg2RTg2QzAyCis6MTA3MzgwMDAxRTZCQTFFNzBEQUM5RDlFNjVFQzAwM0RDQjE5QTdDMzFDCis6MTA3MzkwMDA2RjJBMDIxM0YwRjk3MTlDRUI1M0E0RDM2NTU2RDc2MzlGCis6MTA3M0EwMDA3MTY4QjcyNUI5NDZDNjIyM0ZCMkY1MjdCQkI0Qjc3MzlCCis6MTA3M0IwMDA0MjBEOUJBOTdBQUU2RDgyQkEyRkY4Q0RDMUI1NDNCRkZECis6MTA3M0MwMDA4MzUxNjM2RkJGNURFRTk5NDcxQjFGRTYzQjhEN0NFM0U2Cis6MTA3M0QwMDAyQjEzOUY2NzVGRDZDNDI0RTQwRkNDMzk0MDY3NEZGNTY5Cis6MTA3M0UwMDAzNjVGQUIyQTI3MkJGMjM5OUNEMDY3OEJFNTYzQTUwMjY5Cis6MTA3M0YwMDBDNThCNzdCNTVBQ0NFODVGMzhCNkM2QTRFQUVCNzc5MzZECis6MTA3NDAwMDA5RDdCRjgxMEY3Q0IxQzZCOTg5NjhDRjg1N0RGM0EzMkJGCis6MTA3NDEwMDAxOUYxRkM5ODQ5NkVBODA1RjgxRjlCMENGQ0RCNDE3RTE2Cis6MTA3NDIwMDAxQzA3Q0E4NzIzRjk3NkVBMEY5MjIyM0EwM0NFNkQ5MUEwCis6MTA3NDMwMDBCQUJGMjNCMkMzN0MwN0I0MkY0RDE0OTlEQjgxRjFGNDlBCis6MTA3NDQwMDA5NDY4NUNCRkI2RUZEMDc1NTdBRUI1RThGMDYwRjYyNDJGCis6MTA3NDUwMDA3REI5OTQ5OTdCRjAyRDA1Q0ZEQkRDNTM4RjdBOTI1ODYwCis6MTA3NDYwMDBENkNGRDU4N0RENURGQkYxRDJGREFGMDVFMTZCNzJBRTA2Cis6MTA3NDcwMDAzRDBFRjUxQTM2OTE0REZDNDFFQ0U5REYxQjdDQjU3Q0U1Cis6MTA3NDgwMDAwNjBEQkUxQTVFN0Q5RkUzMUM5OTlCNDVBRjI5REU4NkUzCis6MTA3NDkwMDA3MTc0OTRDNzFEREIzOTFDNUJBM0FFQkRFRjJBODA0MzFBCis6MTA3NEEwMDBGMUZCMjJFMzcwMkU3NzdGODRGOEJDODNGQkY1NDNFNzgyCis6MTA3NEIwMDAwOTIwNUQ4RjQ0N0FFNTc0NURFMTdEOEZFQ0I3ODU3NUI5Cis6MTA3NEMwMDA0NTI2NUM1RkIxQUQzQjA5RkQ0RUJCRUUxQTk5ODRFN0UyCis6MTA3NEQwMDA3MjcwRDZDODI0RTQxQjdCQTY4RjdDNjQwNThDREI1NUI4Cis6MTA3NEUwMDAyMDNBMkM4MDRGQkIwQTRFREY4N0U1OEUzQTUxQzI3OTk1Cis6MTA3NEYwMDBCQkI2OUY1NkY5NEJGN0JFODlCMEJFQUZGMzREMjQ4NzlDCis6MTA3NTAwMDBCQUI2RkY3M0Y4NENGMTBFRTAzMzMwRkYxOTFGRTczM0MyCis6MTA3NTEwMDA0QjhDNEVENjA4RjMyRTAxQjhBMDFERkZDRkU2MzcxN0NGCis6MTA3NTIwMDBFMjMzMDc0RENFM0NDQ0RCRThBQTE3MUNFODdGQUI5RkNCCis6MTA3NTMwMDA2RTIxRkRFMTIwRDA4Nzg1RTM1M0MzMEFFNDkzOTNDMDE1Cis6MTA3NTQwMDBGRTk1MTBERjlDNTk2ODUzNzY2QzFGMzYwMEUxQzVEQzUwCis6MTA3NTUwMDBDQUMxNTExMzdBRjA3RDUxREQ5MjAyRjRBRkIzQjVBNkUyCis6MTA3NTYwMDAyM0E4NzdBMzMzMDRFNTczMzEzMzFFMDkwNEUxQTlFQkEzCis6MTA3NTcwMDAwNTUzNEY5OUYwREE3ODI0MTA4NEQ3QTE3ODdBMUJFMjZBCis6MTA3NTgwMDA2OTU0MEY5RTlFNjE2NzkzQ0RBOUJDRkVDMEMwMUVCRTBDCis6MTA3NTkwMDA4N0JGNjBGRTcyOEJFODZGQzQ3OEJGODZCN0ZGMzlGRDg2Cis6MTA3NUEwMDBCRDcyNTQxMjgwQUZEQzlEMEJGOEZCOEI3MTI5QUYwNEM4Cis6MTA3NUIwMDA4NDIwQkU3MjkxN0NBQzM1RUFFRjI0RjdENjQ1RkQ5RDYwCis6MTA3NUMwMDBFNERFQTFFOTVDRUVFRDlBN0VGREVFQkYyMERFREZDNUQ0Cis6MTA3NUQwMDBGMUJFQTM3NDIyRTE2NTg3MDlFNDE5QzBFQjYwNUQ2NjIyCis6MTA3NUUwMDAzNDk2OEZBRTJEMjEzQUQzRTgyNzc0OUUyRTE1RkZCNTIxCis6MTA3NUYwMDA3NjBCOERERDI2NDcxOEZDNzRENTg5QkFGMzRDN0I2MTc4Cis6MTA3NjAwMDA0MTNGRTdFNUJEQUY1RjFCNTc2QkE3OERCQjMwMjRBRTk1Cis6MTA3NjEwMDAxQjNBRUUxM0I5REMwRTREREI1MkQ2RTdGODYwMDBGNkVDCis6MTA3NjIwMDBGNEEzM0M5NEM4MUU3QzE1NTEwRkI4OUVCOTAxM0U1RDcxCis6MTA3NjMwMDBGOTFDM0U1RDA1RDcxMzNEMUVDQUQ3RThEMkM1MzAxRUUyCis6MTA3NjQwMDA3QjcwOEVFODQzRkRCNTJCRkYzNEQxRTkxOUEwNTMxQUE2Cis6MTA3NjUwMDBBMzk3Nzk0RkFBRjQ3OTVDQTVDRjYzMkE3RDZBRjVFMkY2Cis6MTA3NjYwMDBENjA3RTdERTgwRTNENjg5QzRBNzBGQ0VDOTFDODBGMzE2Cis6MTA3NjcwMDA3REI2MjU4REU2ODVGNTUwREVEMTVCQUYyREFDQUMxRjE4Cis6MTA3NjgwMDA0RUZDQzE4RUZDRUIxMEMwMDFFRDg0OTJEMjEyQjJBNzY5Cis6MTA3NjkwMDA0QjRDOEUwMUUxRjQ4NEQwN0Q4NzhFQjc2Qjk2ODVGMkRBCis6MTA3NkEwMDBDODYwM0NFMjc3QzU3Nzk1QjA0NkU0MEIwMDA3QzRDRkNECis6MTA3NkIwMDA0M0Q4MUVFQThCQjc3MjNGRjAxRTZDMUYxNzBDQTc5MUMwCis6MTA3NkMwMDBBNEFGMUNGQUFERTA0MEQxNjFEQUZFMzczQjlFQzM1MjU1Cis6MTA3NkQwMDA5RjlFNUYyQzU5MUZBNTNCQjdDNTJEQjFCQTcyRjE3NDlGCis6MTA3NkUwMDBCRThGNDM3NUMzMDY4NENCNkJCQUQwRjk2OUZEMkZGNjA0Cis6MTA3NkYwMDBGQzZGNTJGQkUzOUE3RjIwM0RBNUJGNkUzQzA0OTI3RTU3Cis6MTA3NzAwMDBCRUQ0OTBGQUQxMjFGNUUzNzRFNTBCRTFFMzYxMTUyRkM2Cis6MTA3NzEwMDAzNDM5NzIzODQyNUUxMDJFQkVENDU1NjhBOTBFQ0VEM0NECis6MTA3NzIwMDA4OENFRTM3NjRCNzQ5RTFBQjdGRjkxNzIzNTIyNEZDRjA1Cis6MTA3NzMwMDBBRjJFRDQ1RkUzNEY5RkU3MzhBNTNDOTRBM0ZFMTJDQTU3Cis6MTA3NzQwMDBERkJBNTg3RTE0MjQ4NzEzRjI3MEJEMDFDMThDRkQ1QjMzCis6MTA3NzUwMDA1NTM5NUJERENFRjE2RTVERDRGRDk0N0ZGMzk1QUFBNzFDCis6MTA3NzYwMDAwMzVFMTJCRkZGNUFFNUY3NUZGRjQxMkRGRjVFMjBCQ0FECis6MTA3NzcwMDBEQ0IzNjM2NTM0RUFFRDI3QjY4RjhDNDYzQkVDNDhCQjNGCis6MTA3NzgwMDAyNzFBRjlCRUNDRENEMTU3MDIzRTdFRTkwNEY5MDlEM0IxCis6MTA3NzkwMDA5RDZDRUY1QjdFN0VBNkYyOUQxMzc4MEUyNDM3MjUzQTEyCis6MTA3N0EwMDA4RkEzQUFGQzNDOENGMjkzRTRGRDI4N0ExRTQ0RjkwOUNECis6MTA3N0IwMDBGNTczOUU1NUY1RjRERjBBNDRGRjRCOEQyREUxRkREM0EzCis6MTA3N0MwMDA1QkY0RkNBQTdBNjM1NDg4OUNENENCQ0RBQUI1ODM3NUFDCis6MTA3N0QwMDBFNTRBRUYzMDVERDk1NUE3OTc5Qjc5NjIxOUYxRjUxMzBBCis6MTA3N0UwMDAzRTBFQzc5MkZDNEM1REZCMTNCMjFDMkQxMTdDMzgxQzY1Cis6MTA3N0YwMDBCRTM2QzlEMTg4Njc0NzdDQjFEMUMxRjRBMkYxREY4MzFECis6MTA3ODAwMDAyMTcwMzg4NjcwNDBGQ0Y0OTZGNDg5Mjc0N0Q1RkU1QURCCis6MTA3ODEwMDAxOUVDNDIxM0NFNUI2Mjc1QkMxRTg3N0U4NEI1ODIwMzcxCis6MTA3ODIwMDBFMzU0OThFRjM3MDlDRUYxQzA5QzhDQzc5QjgzRjQ4QzRFCis6MTA3ODMwMDBGN0YzNDRDMjk3QzNERTNERTU5ODc3NzUwNjBDMzBGNDQ0Cis6MTA3ODQwMDBGM0ZFQTk2RTRGMzJGQTU3MkI5RThBMjJCRDI5NzRERUIxCis6MTA3ODUwMDBBQTAyM0Q5RkY5QjJBMTI4RkIyM0U4NTdGMkJFRThCMzg0Cis6MTA3ODYwMDAyMjNDMEE2Mjg4N0ZDRDc5NTZGNDg5NTBFRUFBQ0I4OUYyCis6MTA3ODcwMDAwRURFQzcwOTk1MEUzNUI5QjNDNDU4MTNGNjFDQUIzN0U1Cis6MTA3ODgwMDBFQUNGQjFBNEEwOUVDNkU5Nzg1MDY4MTdGQUMxNzNEN0IxCis6MTA3ODkwMDA2NDkwQTRFN0Y3MkIzMUYyRkQyRjc5NEEyNEZGRUUxMjEyCis6MTA3OEEwMDBFRkI3RkIzMEFFQjgwNEY0NDA1NDEzRkVENEU0Mjk0NERGCis6MTA3OEIwMDBCQzNFRUMzNDE5ODg5RkI2QzcxNjIyN0NEQzczNDRDQUUwCis6MTA3OEMwMDA4M0REREIzNDhDRjBGQzQ4NTNDRTQwOUNBRjQ5ODVEMzNDCis6MTA3OEQwMDA4OUVEMTY4MzcwMDUzQzlEMjZFNjI3N0JENTRGRTdGOTk5Cis6MTA3OEUwMDBBNUI3ODRFNEM2MDk4NDBCRUE0MTQ2ODlFOEUyODEzQ0Y1Cis6MTA3OEYwMDBFRTk3M0YwQ0UzNjBCRDAxRTgwNEY1RTEyRTlGOThFRkExCis6MTA3OTAwMDAwQjQzMUYwRkE4RjMxQzNERkIyQkMyOUYzNzdDN0JBMkIwCis6MTA3OTEwMDA1MUFGMzhEQ0NFQzczRjVBMjc0NTYzN0NFQTFENkZBNkJFCis6MTA3OTIwMDA5REQ2NTcwMEUzQTJERUJCRTM3QTkyOTMyN0JDMUMxRkNGCis6MTA3OTMwMDA3MTlENjQxRjM2NzFGOUQxRTE1RDc0RkY2NDgwQzc1NzkyCis6MTA3OTQwMDA2QjQ1RDIzQkJGNkEyQTI5OUM4Q0U3QkRENjQ0RTU5Qzk3Cis6MTA3OTUwMDBBMjUyOEE2Rjc0RjhCODdDMzlFNDNCNUE4RUU3NzdDMjNBCis6MTA3OTYwMDAwQkE3MEZFNUZBMUQxM0Y3OEQ4RkMzNzMzNjExM0U1NDI1Cis6MTA3OTcwMDAzREE1M0Y5N0QyQjU3QUZBODI1Rjc0QzYwNENBQ0ZBNEY4Cis6MTA3OTgwMDBCODJDQTgxMzUzRDE0RUFBNEMwMEY5MDk5NDdCQjhBMDg3Cis6MTA3OTkwMDA4NEYyMkE4QkREN0E3OTY0NjE0NTI2QzQzQkQ0MkZCMTA5Cis6MTA3OUEwMDA1REU1MjMyNTU5N0VBNDNGQjc0MEYyNzJFMTBCM0NFRjIxCis6MTA3OUIwMDBEQUI0RTU2QTkyNzcxNTJEMTZEREJDQzU3NTdBRkJBODk5Cis6MTA3OUMwMDAzMkM0MUUwQUI1OTc3RUI0QkMzMEQ1OTQ4NzkzMTcxRDc4Cis6MTA3OUQwMDA5QTVDNjBEMjU0ODRGQjExMzBBQzlCMzNFMEZEMEIyMkU3Cis6MTA3OUUwMDBFNTIzOUZGMTQ2MTBGRkFDNTg3OEVBMUE1NTJGQkQxNkQzCis6MTA3OUYwMDBGMTgwMzlEQzZDOTI2NkE3MDdEMTU5QTU1NzBDRDFEMzE5Cis6MTA3QTAwMDBGNUYwMDVGREY5MzhFQUM3NERCMUFBMUM3NTk3OTBCRjhFCis6MTA3QTEwMDBFRUYzMUNFNTEwRjFGQjhCQjVCRjJGNUFCRjJENTdGNUM4Cis6MTA3QTIwMDBEQjcyRDI2RjNCNEEyRDk0QUY3OTEwOUIwNEY1REY1NTgyCis6MTA3QTMwMDA3QTNERjk3NTBFQ0RCQTlFRjREQzQzRTdGQzNBNEVENTlCCis6MTA3QTQwMDBBRjczMEQ5RERCQTEwMkMwNjc5MjFCMEVBRERDQTcxRUJDCis6MTA3QTUwMDBBMUYxOEI0RkQ1NzMzOEFBRjJDOUMzMkE5RkVDNTJFRDFFCis6MTA3QTYwMDBBRDQ2NTU1RTc4NTU3OTcxQTg0MEI1QjdFMjE4QzkwQjk3Cis6MTA3QTcwMDBBMzUxNjExN0MzNjc2RTZDOEIwQTkxMEZCMTIxNzZENDQ1Cis6MTA3QTgwMDBFMDkwRjNEMUNCOEI2NTQ1QUVDOEE5NDBGNzk2ODREMTgxCis6MTA3QTkwMDBCQUY3MjY2OTlDQUU5Q0I2NjUyN0Y5OEZDRkM4M0M5Rjg0Cis6MTA3QUEwMDBFODFFQzQwOThDOTc5NEYyRkMyQzY2NkQyN0ZGNzFBOTFGCis6MTA3QUIwMDA0M0E2RkFDMTE4Mjc4NEY2Njg1MjYxMUU4OTg2OUZEQUE4Cis6MTA3QUMwMDA3QjI5OEVCRkQ3Q0FGRDYxRDdGNUQ4MkVBNTlEQ0E5RTRBCis6MTA3QUQwMDA1MkM2MzAwRjY2QjgzNjBFODBBMzFFRjQ4NEMxRThDN0M0Cis6MTA3QUUwMDA4Njc5MTJDMDQwQzNGNjFBQkUwRjk5RDM0QUVEQjJBQkU1Cis6MTA3QUYwMDA5OTI0NDBCQkY0QTkyOUM0Q0YxMjk4NDJGQzY1RTAzMjE2Cis6MTA3QjAwMDBBNjYwQkUwQkYzM0Q0RkVEMUVCRjFCRjYwMTc4MUZGMEM0Cis6MTA3QjEwMDA1QzQ3NzY3OTg5MzU5QUM3QkI0MTNFRjY4RDY3RjUzQzVGCis6MTA3QjIwMDA3RTk5MUY0QjdBQ0IxMDIzNDdDRDVFRjE1NjZENzcyMTlFCis6MTA3QjMwMDBCQzBERDI4MzI2NEYyNUZBMzQ5MDNGQTIzNTZBQUMwOTlBCis6MTA3QjQwMDBGMUI0RDhFNjI0QkYwMUUwRjU4MkRCRDE1RkY5OEE5OTcwCis6MTA3QjUwMDBGQjA5NEFCOTdGRjJFMEY0ODk4RkEwQkQzQkY2MTkxQkZGCis6MTA3QjYwMDBGOTkyMEYyRTA2N0MyNkZFREVDREVEODRCQTEyMzdDQUJFCis6MTA3QjcwMDBCRDNGRTc3MzM5MzdFNjk5MkZFOTdFNDRENzc2RTZDMEYzCis6MTA3QjgwMDBGMjlFQkFFNzRGQkQ4REY0MzI0NzIwM0JBM0EzMkU4NzY4Cis6MTA3QjkwMDBGMzY1QzY5Qzk4QkZEOTkxOUZCMzlBQ0E5M0MwMzBDRTYzCis6MTA3QkEwMDA0MDdBNTA1NjFCNzExRDAwRDc2NkFBNUY3NDVGRDY3ODY1Cis6MTA3QkIwMDBCQTZGNDJGODlCQTBFNjE5NDk3OEFFODkzREU1Mzg0NTkxCis6MTA3QkMwMDAyREIzRUQ1NDRFMjhFMEY5ODE3RjU0RjU4Mzc2RjUzQ0QyCis6MTA3QkQwMDA3RkE3REE0MURCNTRCQTY5NTNFOUU2RDcyQUREQUMwOTVECis6MTA3QkUwMDBGNTg3NkVFNDc0MzNDMkU4QjgyRjBBQ0EyM0RDNzY5MkI0Cis6MTA3QkYwMDAzM0ZCMEI4RUQyQkE4MUZFMjU4Q0U3QTY0QzE3OUJDN0IwCis6MTA3QzAwMDAwM0RDQzY1ODAyQzRBNzRCNDBFQ0FEODZGRDRDMjlBODQ2Cis6MTA3QzEwMDBBN0ZDQzUxMjE3QTM3ODQ1RjE5QzdBNUE1RjAwNjM0QjA1Cis6MTA3QzIwMDA1N0ExREU1NDJGODg2QTNERjJDNzMxQjE3RTZBNUY2QzdFCis6MTA3QzMwMDA2NTEyRjYyRkM5N0Y3NjE3RTZFMTk2QkEwMDM0NTBDRTZBCis6MTA3QzQwMDA5RDUzMkYxMDdDMkE2MDNDNjhCRkFCRUUwMTFBRUY1MEE5Cis6MTA3QzUwMDAzNTVGQzc0MTNCRUZERjUxQzEyNDM3OTREMzU4RkVFRTY3Cis6MTA3QzYwMDAxNTdDOUQ0RThDODcxRUFBN0I3RTE3QzE3QjBFODdGN0U1Cis6MTA3QzcwMDA1NTI3MEQzQTdBQ0NGMDQ3RUFFODdBRjQ5NkZFQkFGQTNDCis6MTA3QzgwMDA5MUVCMDdFOUNBMDM5Q0E5QkFGNkIxRjk3QTdBOEYxQzdECis6MTA3QzkwMDAzRTRFNTdERjkxNUY2MjQwMzk3QjY2OEU5NkRGQzNGREIzCis6MTA3Q0EwMDA2MjlBNUQzN0U1MTk5QjAxRTEzMTc3OTZBOEY5NzEwRDZDCis6MTA3Q0IwMDA2QzIwNUE1RDhDRkNCRTREQUE5RUM4NUE4NjMxQ0NERjIyCis6MTA3Q0MwMDA3OEZDNEUwM0U1MDdBQzk5RTNCMTYyREVDMzk5NzYyM0Y1Cis6MTA3Q0QwMDA5RDE3OEM0QjdDRTREMDRFMjM4RDZCNERGMTBBRThDNzg5Cis6MTA3Q0UwMDBCQzE3RTAyQzA2RTk3RjREOUE3QzUzRkRFQUI4MUU2MzcxCis6MTA3Q0YwMDBEMDdBRkFDQjBDMzNDNkNFQjU2RjUzRjFFOTAxNzUxREJFCis6MTA3RDAwMDBDMEI3QTc5ODcwNUUyN0M3OTNEODAyNjYzMDQxRkYwMUJECis6MTA3RDEwMDA3M0I4OUMwRUE1Q0I3NkI1RkZFRkQ0RkVEQjU0N0NFQzlDCis6MTA3RDIwMDBDQTdGN0M3NTI0QzI2NTFFMjM3RDI0NEY1Q0I2M0EwMjRGCis6MTA3RDMwMDBENzUxQzA4ODFFREJGREJCMjM4M0Y1QzczRkY2MzZDRTg3Cis6MTA3RDQwMDA5Q0NDM0MxQUM3Q0RGOUU4RThEOTgyMjcwMkNGNzU2M0VECis6MTA3RDUwMDBFMEYzNzdFMUY5RjI1NzhEQUJBMzYxQkQ0RjA4QUMxRDlECis6MTA3RDYwMDAyOTRBRTM5RjlBRkU3REQ1RDc0RDU0M0Y3QTFDOTg2OEU3Cis6MTA3RDcwMDA1MEZGRjJEN0NEQkNGRDA0MjZBM0JGRUI4RkFBREM2OTcwCis6MTA3RDgwMDA1MkU5Mjc2RDRCM0FGOTE3Q0ZBQzM3OTNEREIzQUQ3MDlECis6MTA3RDkwMDBDOUU2MzY1OEVGQzg5OTc3M0RGMTAyRTI0QkUxNUQ3RkM1Cis6MTA3REEwMDA3OTQxRUVEMUYzNEIwQTEzM0IzMTdGN0ZDNDJBM0I0MzI5Cis6MTA3REIwMDBGRUEwQ0Q5QkI2RTVDQjZDNUFCNzY0NjQ4OEE3NEY2RTI2Cis6MTA3REMwMDA3REIxMTJDN0ZCRERCNjQ4ODMwMkUzM0ZCOUQ5NDhGQzU5Cis6MTA3REQwMDBFNUIyN0IxRkQ5QkM5RTlERUY4RjI5QzlEN0RCRjlCRkM4Cis6MTA3REUwMDA1QkIzRUU4OUVERjhCRUY2RjlDNzhFMDVFNUU5NzRDQzE0Cis6MTA3REYwMDBCQTI3MDlGREE2MDc1NzU1QjdFNUE2RjVDRTNGNEJDQ0U4Cis6MTA3RTAwMDBDQzg1RjFCQkZDOTdCRjdDRUUxRDk4RkYwM0Q3NjVFM0UzCis6MTA3RTEwMDA4MkVEODBDRkE3NzI3REU3RTBBQURBQjY1Q0IwNTM0NzY3Cis6MTA3RTIwMDA4QkVBRkQxNUEzN0IzNUMyNjNGNDRCMDM2NUQ0REY4MDc5Cis6MTA3RTMwMDAxNDhDMkU4MDY1RkU4QzA4ODMwMkZCRkJDMDY3REM0NDNCCis6MTA3RTQwMDA3QzYwQzY5QTM0M0NDRkVDMjcwQjc2OUZDNDczM0VBNDZCCis6MTA3RTUwMDBFMjdCMkZGQUM4NDFGNTlDQ0U5NTREMzJDMURERkQ4QUZCCis6MTA3RTYwMDA5NURCMzc4QTlDNDRGNkIxNDM0RTJBMEVEMkU3MEVERUVDCis6MTA3RTcwMDBBNUM1OTcxQzlGMjAxRjJGMkU4QkEyQjhCMjE2NzcxMTc1Cis6MTA3RTgwMDBGM0JGNkQ0MDNFQkY3MDUyNEQ5NjQ0RUJEN0M3RjEwNzJDCis6MTA3RTkwMDAyMUZDMzIzMUNFQ0JFM0Y1NkVCNzkxNTE1RTEwNkMwRDAzCis6MTA3RUEwMDBFOTY0QTUzODlBRjI0RDNFNUNGQTBCOEFEN0JCRUIyREZDCis6MTA3RUIwMDA1MjVBMUNDNTBEOUVDMTcyMkRGMDFEQ0I3ODhBRTNGQTczCis6MTA3RUMwMDA1MDY4Mjc0REUzN0U4NEQzRjMzQzhGOThFNURFRTFFRkU1Cis6MTA3RUQwMDBCREMwRjk5OEQ0RjMwOTdEOUYzNDhEOUY4QjA3Q0YyNUMyCis6MTA3RUUwMDA0RDc3MkVCQkYxOUVENDc5RTcxMjZEMjVGQ0QyQ0U0NTlECis6MTA3RUYwMDA4QzZFQTI3MzYxNTZEQjI4Q0NGQjg4RTcyODg1RkJEOTAyCis6MTA3RjAwMDA4NzcyQThGMzEwRjc5NzdENTA3NjVCRkQ0QTI4OUYzQTU5Cis6MTA3RjEwMDBEQjhGMjE1RDY4NzE5NUYyMDQ5RTdGNDA0NzAyN0NDQjI4Cis6MTA3RjIwMDBBNEY2OEY1N0Y1NkVFNDYzQTg3Nzk3QUI3MTk3Q0UwNUVCCis6MTA3RjMwMDA4Q0UyMkVEQTc4Njc2QUZCNDk3Q0JDNUI0ODZGMkVBRjE3Cis6MTA3RjQwMDAwMUZBNDc1OTEyRjUyQUU5MTcwREMzNzg3RTQ0QjlBREY1Cis6MTA3RjUwMDA3QjAxRTVBQjBBMDYwN0M2Q0RFMzQzRjQ3QTM3QUJBMTU0Cis6MTA3RjYwMDBGNUM2QkYyRjkyM0ZERjEwQjU5NkZBQzcwMzc4RjBGRTMzCis6MTA3RjcwMDAyMTY2RThCMjYwQkYxMjE4QUQ5ODRGNDI1NzBERTUyMDU4Cis6MTA3RjgwMDAzRDRCQ0RENzhEQUY3RDg5RUI0NzM5RDAzMzUxMzc5RkVFCis6MTA3RjkwMDBGMDAzQURERkYzQTk4ODdDQTBENjIyMjNERkMzREMyQzVECis6MTA3RkEwMDBFNERCMDRCRjE0QzRBMzc1RDQ1RkJBODk0OTc4OEY4MzE2Cis6MTA3RkIwMDAyOTRDQzY3QjlBODIzQTVGRThGQTYxM0NBRTE3ODI3RTEyCis6MTA3RkMwMDA4NkZCMTVFQUY4RkMxQjY3RjI3QjIwNkMyNzkzODNFRDk4Cis6MTA3RkQwMDAxNjE2QkM5RTYxQkFCMkVBMjdEMzk3NEQwOTY2OUQ5Q0RFCis6MTA3RkUwMDBGQUUwNkM0OUJGOUEzRUZDMzVBMUZEMERCMkIzNkZCRkZDCis6MTA3RkYwMDA2Rjc1OTBERDk1REFEMzVFQ0IxM0QzRTAzQ0E4RDY3MkQzCis6MTA4MDAwMDA1ODg4RUVCRERGQjIyMkU1RTdEMzgwNEU2RENDOTlGREY2Cis6MTA4MDEwMDAzNkMwQzNGNUJFNDhGMkNFMTBCNTk3RTAxMTg4RTBGMDQ3Cis6MTA4MDIwMDAzOUE3Q0ZDRUUzRkEyRTY4RTdGNTk0NkYwREYyMEVDRkE1Cis6MTA4MDMwMDAwRkYzQjQ0NzAwQkUzM0I3M0U0RjQwOUI1NzhCMkY3NUFECis6MTA4MDQwMDBBQUZDMzg5MDEyNThFMDBDMDM4RjQ2QTRERjJDRTRFNzFBCis6MTA4MDUwMDBERjUwQkNCQjFDRjU1QkMwRTVDMEVBMkY3NEY3M0Y0RTk4Cis6MTA4MDYwMDAxNjRENjlDNDc1ODdFNjIxNjg3QUE5NzZBRkI0RDNDRDc5Cis6MTA4MDcwMDBFNTZDQTczQjkzRjhDRTE5NjY2RjIxRkQzRjk0REYxODlFCis6MTA4MDgwMDAxOUU1N0RBQzE0MjMxRENERTRCN0JCOUJGMjQ2NkFERDM4Cis6MTA4MDkwMDAxNkM5MDJDRjU5MEVCRDNGNjZGNjI0QkQzQzI4NTI2Mjc4Cis6MTA4MEEwMDA0M0U0ODVERURGNTVFQUQ0Qzc4OTg2QjdERDQxRkNFQkMyCis6MTA4MEIwMDAwQ0VBNERDNEVGRjg3QThDNkE1RTk5MDlFRjk3ODg2OEVDCis6MTA4MEMwMDBBRkJCRTlCOTU3RTVDRkVGQUE3QTY2MDRGMjU3NzgxRjNDCis6MTA4MEQwMDA4NTg5RTU4MDhGNzYxNkEwNzIzRjQ0Rjk2MTk4RDIyRThCCis6MTA4MEUwMDA1M0JFNjMyQzUzQTgzQzgwQjlBOEFDRTU0MTI2MzIxRjhGCis6MTA4MEYwMDAzREI1RkM5NjI0MTZBMEYyNTBENDg3NDQyNDI5OTk5RUJECis6MTA4MTAwMDBDM0QwMEUxOTg2N0E5RUUzNUNCQzg3RjIyNjczNTIyODkwCis6MTA4MTEwMDA1RTUwQzQ5NDRGQjA1RDQxRTY1NzI0RjcwQUFFNjdFQTVCCis6MTA4MTIwMDAzRERDMTM4QjE0Mjg3Nzk2QjI5RTdCQjk5ODY3OTJDNzczCis6MTA4MTMwMDA1NEU0RkM3NDExREUzRkVFOUNBRTk1OEZGM0YyMTRERTM2Cis6MTA4MTQwMDBGRUNEM0Y3REYxMzhERUQzMDVGRUE1RDY3RkM2RUJDRjUxCis6MTA4MTUwMDA5NTRGMkU5QTgyNjU5MzgxQ0FFRjYzN0IyODBGQzg1MzhGCis6MTA4MTYwMDBERTlBMDZFN0ZGQzkzNDQ2NzhFNEM5NTVERTA5MkUwRkNBCis6MTA4MTcwMDBDRjU1RjYyMURFNjhFNTA5NTM5NUZEQzFFNTk1MzlDQTZECis6MTA4MTgwMDA3QkMxRTVDNzczOTQ4RUUwRkU1RDc5Q0EyMTVFQ0ZGM0IzCis6MTA4MTkwMDA5N0RFMzcyOTQ5NjhFRkMyRUZCN0MyMDQ4RTg3Rjg3QkI0Cis6MTA4MUEwMDBDM0U0RkEwNERCMjk0RjA5MDQyRjBCRjBFRDY2RTJEQjkwCis6MTA4MUIwMDA0RTg2NzQwQTY0NjNDNTNDMjJFMDMzRTZEQkExOUU4REUzCis6MTA4MUMwMDAzMzUzQkU5RjIxQ0E5NkRDOTczRjMyOTRCRTAyMjZCNjM3Cis6MTA4MUQwMDAxREZENzQ0NTQ2RDcxNzQ0MEYyMTdDNEY3MEZGRTlBRjUyCis6MTA4MUUwMDA5OEM3MDNGNDkwOEQ3QTdFNDA4RDg3MDRFQUI4M0Y0MEFCCis6MTA4MUYwMDBBMzEzRUQ3REU4N0MxN0MyN0JBNjA0Rjk3OTUzN0JDNkY3Cis6MTA4MjAwMDBFRDZERkRBMTc4N0M0MEQ1RjcwRUFBRkFERUZCQUE1RkUyCis6MTA4MjEwMDBGQURDN0UwM0M2OThFM0Q2MUVGQUVFOUQ3RjFBRDlGMUVBCis6MTA4MjIwMDAyMEZFNzlGRTdFOEYyRTMwNzFGOTIxQTFCQ0U4OEMwOEVBCis6MTA4MjMwMDA3RjBGQkJCN0Y1RURDRjk5MUE5NzRGRjk1RTQzMjQ4QUFDCis6MTA4MjQwMDAzMzMwOERFRjczN0VEMzg5N0YwMjFGMUNEMzRGQjM1RjEyCis6MTA4MjUwMDAxRDU2ODQ0MzFBNEI5ODMxMEFFNjZEQ0Q2N0E0QkY3QTQ4Cis6MTA4MjYwMDA3Mjc3MTdEM0Y3MERDQTQwODJDMUJBOEVBRTM4ODYxNDIyCis6MTA4MjcwMDBDNzg0NjdCODNERDE5MkM0NjhCREY2MTQyOTAyRjVBNTNDCis6MTA4MjgwMDAwNjk1NkY1QTU4Q0NGNEUxQjhGRTIxNDY5MkI3QTFFQjlGCis6MTA4MjkwMDA2RTg4RjYwOTE4NTcxQ0U0OEZFMEZFOEQzOEU2OEI4MDU3Cis6MTA4MkEwMDA3MTA2RTUzQkYyMjk2RkM1MkQ0QUY5NTgyRTYzODVBMzY3Cis6MTA4MkIwMDBBMDVDRDkyNkNBRjkzMENFOUVCNjEyNTYwNUUzNTY0REJCCis6MTA4MkMwMDAwMjNFNDcxOUU5M0M5RkEyQkY4QUM3NjMyQzhDRjIyRDVFCis6MTA4MkQwMDBENjBEQjA1MUJDREFCQjY2RTRBRUM1QzgzNzEzNDU5NkJGCis6MTA4MkUwMDAwNkVERDMxQkM2RTVBM0RGRDM2M0VCREY5RjYyNEVFQTQ3Cis6MTA4MkYwMDA3QTNDMzZDNzlCNzgwRkMzMkQxOUY4M0QxMjQ5QjE2MkZECis6MTA4MzAwMDAxRUZBQTYxNUM2N0NFNEU3NDlDRjhFOEYxNjgzRTA3RjYwCis6MTA4MzEwMDBENDdCMkEwMkYzREIxRjkzMEM1NEZGNTg1REI2RjU0NjVECis6MTA4MzIwMDAxQkRFMjNGNDJCOTQ2NzIwMUQ1MTZDMzBFRjA2NjgxMzdECis6MTA4MzMwMDAwRkUzREQ1RjdEQTQ2NTA0RUIxRDFGQTJGM0NEM0EzQzg2Cis6MTA4MzQwMDA4RDcyOTg0M0ZDQTA3QUJGQTUyOTQ0M0YyOEM5NTdGM0YyCis6MTA4MzUwMDAzNDI2QjAwOTc4Q0U1NzNDNzFENjg0N0FFRTQyOUI0Q0Q1Cis6MTA4MzYwMDA3RUY0RUMyNjgxRjI1MzAyQkIxQ0M5Nzg0RTQ3RUYxQjBBCis6MTA4MzcwMDA0OTdFNzM2RjkzQThGQUFEMURFNEI3MEUyNEIxNjRCQ0I3Cis6MTA4MzgwMDA1RjUzRDEyMjkwNUUyQzdBQkZBREM3N0U0MzQ3Qzk4OTI3Cis6MTA4MzkwMDAzOENFRDBGMUREODlDMUZFQjJDN0VFRkE0NTA0RjI1MTA0Cis6MTA4M0EwMDA2Rjk5NDFGNTczMzMxQTQ3OTYxNTZCMEFFQ0ZGNTNBRjdCCis6MTA4M0IwMDBDMEYzMjc0QzkyODBGNzk4RUQwRjhBMTFCOEFFMkUxM0I4Cis6MTA4M0MwMDBGNzUzMzQwMzNGQzVGQkI5Q0Q1MzhBRkJBNDQzRDNGNzFFCis6MTA4M0QwMDBCMENFMjBCQkE1MjEyRTM1MTJFN0VEQzE1Rjg1RkNFQkE5Cis6MTA4M0UwMDBDNzVBMzIyOTNFQjJCOTI5OUJGMjQxNDJDN0I5NzcxNTIzCis6MTA4M0YwMDA2QjQ3RkJBNDYxOTU5NTlFRTdENTI3M0I5MzFERDBGRjY2Cis6MTA4NDAwMDBEM0Q2Mjk4RDIwQTREOEE3QkI5NjI2RTBGREEwQzUyREU0Cis6MTA4NDEwMDAxNjE2MTEwNjhGOEZCNTRFQTRGOTE2RTMzRDY2OUNCNzZDCis6MTA4NDIwMDBBNUM4OEM3MjY0NUFEQjE0MzNDMkVEREU1NUNBQjNDMUUxCis6MTA4NDMwMDBGMzE0MTZCQkQ2MjA1RDQ2QjUzQzRCNzg2MjYzN0UzNzlECis6MTA4NDQwMDBDMkYzREZBRTUxOTI1MUJGMzg5NkM2QzJFNjQ5M0U5MEE0Cis6MTA4NDUwMDBDRkVEODQ3N0FFNzFEMjdEOTI0RjkzQzJCNzVCOTdDRjQ5Cis6MTA4NDYwMDBGMzM1QTNBN0NCRkNGRUI4OTFCREJCMDRFMDVDMDFGNERGCis6MTA4NDcwMDA1NDBGQUY4RTM2NjU0NjIzREU5QUQ4MzI2MjUyMUY5NDZGCis6MTA4NDgwMDA5NUI4RDE5RTNCOEQ3QTNCRjBGM0M2QkJFNkFFQUY4MjhBCis6MTA4NDkwMDA3NjBENzc4RkQ4OEZFQ0UzMEEzM0Q3OUJEOTlGNDVBMjBGCis6MTA4NEEwMDAwQkQwMEIyQjkwM0VGRjYzOEU1NUYyMDRGMTVGRDQxRjZGCis6MTA4NEIwMDAxNTVEN0UxQTk3MUJBNjI2RDE2RjA2N0U2RURBNzlGQ0IzCis6MTA4NEMwMDA2RjY4RUYyMERFMkE0MTc4NENCRjA5QUE1REEwRTY2QkY5Cis6MTA4NEQwMDAyNDRDMjA2RDlDN0UwRDMzRTZGQUZDMENFMzJFOEJBQzE1Cis6MTA4NEUwMDA3ODlFQTE3QUZBNzk3ODcyREUzQTgyQzY0NzNEMzc5NzRDCis6MTA4NEYwMDAyOTExNDFFQjAwOTZFMDI3N0ZCOThCQ0Y3QkFFOUQ1QUM3Cis6MTA4NTAwMDA2RjA0MDZGMzQzOTBGRTFFNUFBRkVENjNFNDdBM0RCRDVGCis6MTA4NTEwMDBCRTkzQ0ZGNTQyODA2RjlGRjFCQUNCN0NGQTdFOUZFNTg4Cis6MTA4NTIwMDAzMzNBQjdEMUEyQjJGQjM4Q0FEOTc1MjJFNTU1OEY1OTczCis6MTA4NTMwMDBDN0UzRkY2Nzg2MzBGMjEzRjUzNjlFQzY3RkYxNjcxQ0VFCis6MTA4NTQwMDBBOEMyMTFFMERBMTg1NzRDRTdEOTVCM0ZCM0VGODA5MjJECis6MTA4NTUwMDAzMkI2QzczRUJDMkM0MUJGMkVBRERENjdFN0Y2NzUxQkJBCis6MTA4NTYwMDA4QkU0RkE2MDNCREE2NzE2MUZGMEJEQjFGODNDQTBBMEJGCis6MTA4NTcwMDBGQzFFQjU2OTg1RDREN0JFNDNGOTE5RkU2NDU4RUY2Mjc1Cis6MTA4NTgwMDBGNUM4NjRDMDM1RTQwRjlGQUUxNzU0M0Q4NDI1MEM5Rjk5Cis6MTA4NTkwMDA0MDU3MTc0OUZFNjA3RjI1ODhGRjAxNUZFMTc5N0IzRUU4Cis6MTA4NUEwMDA4MUUwRDNEQzdBNzRGM0JERTQ4N0IxM0I3ODJCN0U1RTQ3Cis6MTA4NUIwMDA2Mzk5MjYwNzc5MUU5MDc2NEY5MDYxNjg2QTYwNEY3Q0I4Cis6MTA4NUMwMDA0QTgzRTNDOURGQUU3RUZBMDk3ODc1RTJBOUU1NUZFMzg1Cis6MTA4NUQwMDBEMzMyQTAzMjFBRTE3OTRGREM5QzZCMTNBMURENThCMzgyCis6MTA4NUUwMDAyRjAxRjlFOTEyOUZFNTNDQkNCMzZBRjg5MjgyRjdGM0Q4Cis6MTA4NUYwMDBGNEY1OTY4NEEwRjVDMzdGQ0QzQjlFNTg1Rjg5NzI2QURGCis6MTA4NjAwMDA4N0Q1ODFBOUUxODg1RjZFMUQ3QzAyQTlGODVEOUNBRUNCCis6MTA4NjEwMDBCQkZFOTVFRUU3NDc0QUE3MTY1MDdFN0I5RDg1RUU3NTFCCis6MTA4NjIwMDA4NUMyNzc4OUNBMDc5ODdBNUY0M0EzQTc4ODk2OTEwQzc5Cis6MTA4NjMwMDBGRDhCNDc1NEJCRTlDODVBQjA1M0ExREM1ODY3OTZGMThCCis6MTA4NjQwMDBCQjA2NUQ4RTIyMjUyMUNDNzhFNjNBMzNGRjZFNEVCMDE0Cis6MTA4NjUwMDA5RDk4REFCMzRGNkRGQzJFMzdGNzQzMzZDMkY4NDIxOEI3Cis6MTA4NjYwMDA3RkRGODVDNkRCNTNBNDhDOTkwRUY4QkZCN0M4NzlGOUI0Cis6MTA4NjcwMDBGNDJDQ0M2RjVBNDRGQkFEREQ1RUQ3RjUzNkI0Qjk3NzM4Cis6MTA4NjgwMDBBMDJCMDNFQjhGQUMxRDM2NDE0MDQ3QTQ1MUE2RkI3RUM3Cis6MTA4NjkwMDA1RUVGNzMyNDRGNUFGMDNCM0U2MENGQjdCNDFCMjM1MEJDCis6MTA4NkEwMDBGRjcwN0IwRDE0QkY2RDY5OEY4QjFDOEU3MkNBNjYwOEJDCis6MTA4NkIwMDAxQjY3NUQzNDlEQzNBQjQ3OUUzOEEzODNGNUExRTY1QzgxCis6MTA4NkMwMDBBRTBGMDlDRjk0REQ5RjBBRjBGMjFFRTI3OThBOUFGRTdFCis6MTA4NkQwMDAyMUE5NzgzM0M2MjIxMTdGOTZCQzNDQ0ZBRDQ3MUZFMjVCCis6MTA4NkUwMDA3QUY1MTlENEFCNTE1RkNBQUE5MjgyRTU1MzQzMzRGRjlECis6MTA4NkYwMDAwRTQ2NTVBRUMzOERGNzMwNzM2QzhDRTRDNzUwQkNBQ0RFCis6MTA4NzAwMDA4MDdFMEIxQkYzNEQ0QkMxRUY2NDM4MThFNkU3RjYwNzhDCis6MTA4NzEwMDBGRDQ3MDZDQzhFNkZFM0ZBNEVBNENERTY1MDEwOEYxNUMwCis6MTA4NzIwMDA0RTU3NTZGODFGQzIzMzcyOTRDMjcwMUU2Mzg4N0U2MTIyCis6MTA4NzMwMDAwRUQxMUZDNDkwRjI4MkU5N0E3RDQyNjY4RTY4ODRCM0JFCis6MTA4NzQwMDBGREJFQkVGMzM4MzQ3RjJFRTg0RDc0Q0ZDQ0NEMDBGRTk1Cis6MTA4NzUwMDA4OEE3NTYzNzlENEYzNDE4MTI0NENGOEEyMkM3MERFQzk0Cis6MTA4NzYwMDBEMUZCRjEzRTFCRjdBRjQ4MTQyRjEyOTQ0NkYyREI2RjlBCis6MTA4NzcwMDBDQ0U0RkU4RDQ0QzZFMzVFODMxNDZFQ0Y4RjlERTRBNkU5Cis6MTA4NzgwMDAzMkQ4MEYxNDg3NjJBRkIyNDhFNENCQ0I4QTVDQjcyM0YwCis6MTA4NzkwMDA3RUE0MDAxQjQwRkJBRjdGM0ExMzg4REMyRjUxMkY2NzZDCis6MTA4N0EwMDBCNTE3MTc1N0ZBQ0Q2RUVFRkZGMzFBMjIxRDlCQzNFMEUzCis6MTA4N0IwMDBGREFGMEJCODFGMkU3MjBGRUMwREY1REJFQkFENzRCRkU4Cis6MTA4N0MwMDAyNTRGN0NBQTg5RjA2OUJDODFGQ0RBNUU3NjQwNDI3RTQ2Cis6MTA4N0QwMDBGMkFCRTk1Q0RFMUYyQTcyREUzRjlERTJCMkNFMTQ4NDZBCis6MTA4N0UwMDA3RjgyMTEyQzJBNTA3NkNEQUExRjM3RTlGNkQ0NDhENEJGCis6MTA4N0YwMDA4QjNGNEM3QzkxRTBFMTA2RDhBNUMxN0Y5QjZBRTNGQUYwCis6MTA4ODAwMDA4RjgyRjc4RkQ2QUUyNkI4Q0EwM0I4OUY0Q0JCNzcxRUFGCis6MTA4ODEwMDAyQkYxRkJGRENEQ0U1MzZFQkNERkJCQTIyMDk1QUZBRkRECis6MTA4ODIwMDBDODM4MjMxNUNBNDNFQjAyMDJEMkREM0Q3NjY1MUVFQTQ1Cis6MTA4ODMwMDAyNTRERjI3Mzc0MUUyOTE5QjIwMUZENjU4MzhERUM0RDJGCis6MTA4ODQwMDBDQjM4QzY5RThFRTFGNURBRjdBMzFFQjIwRkRDMTQ5QzdFCis6MTA4ODUwMDA0RjUyQURFRUZCMjEyMUJDQkU3MjU1MDFERjY3RTcwRTIyCis6MTA4ODYwMDAwMDY0M0ZCNDhGOTk2QTdGREIxNjkzM0Q3RUFFMEM3MDM3Cis6MTA4ODcwMDA0M0I4QjhCOUZERkNDMjc0REI2MkY3NzBCMjhCNzhCRDQ3Cis6MTA4ODgwMDBGQjJBREUxRUUzQTU1MDJGQkRGRDdFMTVEQUUzOEZBNjgxCis6MTA4ODkwMDA4NDlGRjc0Qjc1REU0N0RGRUE3RTA0RTM1OEZGNTlDRjJDCis6MTA4OEEwMDBFMzU4QkQ5RkIzOUYxOTgwQjc2Q0IwQjM2NDc2MDVGMEYxCis6MTA4OEIwMDBCOUE1RTY3OUUxQkUyMzczQ0QyQ0NFNDczQTZERUQwNDIwCis6MTA4OEMwMDAyRjA2RjIzQ0ZBMkFCQTQ3MUZBQUFGNUE5MThFNEU0Qjk2Cis6MTA4OEQwMDA5QkVCMjdDQTlDOEY2NDREQTBBQkZEMUNGNzQyQzZCRDI1Cis6MTA4OEUwMDBCMERFRUE0ODQwRkREM0IzQjRCQjAxRjk4NzY3RDdEMjA1Cis6MTA4OEYwMDAwRkYxNUU3QTc5OTk5OUY0RDY3MjYzQ0RCRkEzMUQ2NEE2Cis6MTA4OTAwMDBEQ0NCRjM1RkYwMUIxMzg4MDc4MzgwMUZFMTdERDM2OTA1Cis6MTA4OTEwMDBENUZDRkMxNjRBREM1RjJCM0NGM0IxMzMwN0ZEQjE4OTczCis6MTA4OTIwMDA0NkMyNEI0RDhGMUQ2MzUxRENFODk3RERBMEU2QjczMzlGCis6MTA4OTMwMDA3MTQ4M0RERUY3MzIwRTE2QzlFRjFCNTUwNzdBMkRFRTUyCis6MTA4OTQwMDAyRjk3RTdFQjJBRjAzRkU0NDM5QTlFNkI0QjM3RUFGMjBFCis6MTA4OTUwMDA3QUNEMjE3OUJEQzY5MDNDRTBBRkE3QUI3OTcyMkExRkQyCis6MTA4OTYwMDBCMjY3OERFRjUzOUY3QTE1RUM2MDVDRTc0RUUwNDNGOEY5Cis6MTA4OTcwMDBGNDgzM0Q4Q0NGREQ2MEFGRTNGMzM1QjBEN0QxMEZGRThDCis6MTA4OTgwMDBDNkFBNTFGNDdDNzM5NTgzREVCRkJENkExMjNEQUY0QjFFCis6MTA4OTkwMDAwRTk4MTA5RkM5MUZDREJGMzNFNzE3QzhBRkE3RTE5OTQ1Cis6MTA4OUEwMDA5ODk2NkRDM0VGNzZGMEZBMjEzMzFCRkZENTdEMzVENDUxCis6MTA4OUIwMDBDN0E5RUREREFFQzVGNDlEM0FBRENDRDYyRUNFNEUyNzdGCis6MTA4OUMwMDAzRjM4OTU5QjY3MzQyRjQ2QkZDRkU2NTJDNTNBMDNGMDM4Cis6MTA4OUQwMDA2NDgwQzE1OTgxREY3OTYwNzc1QTI4NkUxMUJBOUYwNzg4Cis6MTA4OUUwMDA2NzY4NzIzQ0JDMURDRkYwMTMwNjdBM0ZDRUMwMTk3RDdDCis6MTA4OUYwMDBGODcxMUUxMkY4M0FBRURBRkJGRTE2QTQ4RjdFNDU0NkQ5Cis6MTA4QTAwMDAyN0UyNzE3MkFBM0U3RUIwNzIwNkQ3RjM1RTU3OUZDOTA1Cis6MTA4QTEwMDA2RkJCODZGNjc1NUY1RkEzOEZERUVBM0QzQjAwMDVGQTBDCis6MTA4QTIwMDBGNTVFRUZCNUIzNkJCMURFMTMxMzlFQUUwNkFBNzRENTM3Cis6MTA4QTMwMDBFQkY4MzY2RTRGQjIxOTQwNkY4M0IxMUM2QTFGMDYyOERGCis6MTA4QTQwMDBCRkU0NzQ2RDhFOUZDOEVEMjdEMzVCNzcxMkQyNUI1NzVFCis6MTA4QTUwMDA4Q0FGMUVFREM0QUU1RDRCRDdFMzc3NDI0NEE0MzcyNDAwCis6MTA4QTYwMDAwQkE0Mzc4QzdGNjhGNDU2Q0JDRjYzMjFEMjFCRkMzOTIzCis6MTA4QTcwMDBBREVFM0Q2NzBFRDI2MzAyQTcyRkUxOTk5RENCMjkxRjcyCis6MTA4QTgwMDBFMzJFOUU0N0EzRDE1QjhDOUEyRjFGMjVCNTkzQkQ0ODNCCis6MTA4QTkwMDAxRkU2QzA3RTQwN0IxQjA0QkNDNzczRkM2MzRBRkUxMDBDCis6MTA4QUEwMDAwQjFDQUU3MDc0RjcyM0U5QUQ2Q0M2NEZBM0I3N0ZCQjQ4Cis6MTA4QUIwMDAyNjQwRjkxMzlEMjk0QTAyRUEzMzVFRjVGQjgxM0Y5NjcxCis6MTA4QUMwMDAwRUNGQ0MzMDczQjk3MEI5MkYxMUM3RDlBMDhFMzM2RENBCis6MTA4QUQwMDBDODYxRjJGRjE1NTgxRDIyQ0FCMzdDOTlDMzM1NkY3QzVCCis6MTA4QUUwMDAyNjdENkZDOEE3RjZEQkVENTQ1NkNDODBFNzgwQjkyNzBBCis6MTA4QUYwMDBDOUNGM0JDMEMwRTlGN0MxQjdDRDhCMTFFRjkzMUEwRUI4Cis6MTA4QjAwMDAxNjRENDM3Q0I5NDMyNDdEM0I3NDVGMUYxNEFBNzEzMzE3Cis6MTA4QjEwMDA4MUNGMEI5QTU3NjI3MDFDRjExRTk1MkVFNTNCM0EzOEI3Cis6MTA4QjIwMDA5RjhGNjE1MjFBQUMyN0MxMkQxNUU3NjM1Q0U4NkEwMzc5Cis6MTA4QjMwMDA3RDRGQTQ1RkQxQzExODk0Q0ZEQTc4NzA3MDA5OTg2RjE3Cis6MTA4QjQwMDA4MkFBQUY3NURDRjlGNDA4QkY3NkQzNDAxRDNEQjdFMENCCis6MTA4QjUwMDAzRTdBQTNFNzBCRjEwRkZCMEM0MUUzMTM5NEVGRUI1MkNBCis6MTA4QjYwMDBFRjQ5RkU1OEJGNkRBRjdFQzRDQkMzRkIyNUFCNjY3MTJBCis6MTA4QjcwMDBCRUUxMzFGMUZDMEY2ODJERTE3NzAxOUE4QTVDNEZFMjhBCis6MTA4QjgwMDA3RUNFRDNGRjc2NEE3RTE3RUU2Mzc5MzRGOTk1MTM4QzQ3Cis6MTA4QjkwMDA1Q0RGQzM2RjI0RjJFRkU1QjgwOUNFNUFGQzRERDMxNzYyCis6MTA4QkEwMDA2NTg1RTcxNzI1MTdCQkZFODBFMzZFNjJGMjJFOTQ2NzlBCis6MTA4QkIwMDAzNjA3OUI0N0YxMzU5MDY3ODgxN0NCOEE5NDE3Njc1MDIzCis6MTA4QkMwMDBGQ0U1RDJGNEMwMkY4Qjk0NTc4OTVGRjc4MjRGMDNBRTM4Cis6MTA4QkQwMDA1Nzc2Rjc4NTZGNTM4QUZFNjNDRjBGNDhGRjY1REM1RkRBCis6MTA4QkUwMDBCQUIwQUM4NjcyQjMwNjgxOUQ4NEVCOURBQUU2Njc3ODI1Cis6MTA4QkYwMDA4NkYwN0FDREJGRUExREEwQzU0Rjk1NDJDQzlGOEM1NjFBCis6MTA4QzAwMDBFMTM1QzZFMjY0MTVEMEJGMEJFNTMwREVERkRCMUJGMERCCis6MTA4QzEwMDBFM0JENjAwQkRFMjM5M0QwOEZDQUE4N0Y0Q0FERTA5M0Y5Cis6MTA4QzIwMDBCMUJGRjhFNUVCMTgyRjMyRTVEMEU3NDQxODlCQzRFRDRGCis6MTA4QzMwMDAwMUVERkU4RDk0RkJFM0ZDOEQ4NzM1M0UzMThFOEQ0NzMzCis6MTA4QzQwMDBGODI0MUJFNDA3MjZDM0ZCQ0M4N0YzM0FGMDc4QjIxRTY2Cis6MTA4QzUwMDA1OTFDOEJFMjcyRTJBNjg2MTJGQ0RFRDZEMkFEOUY2RTY0Cis6MTA4QzYwMDA0MjdGRThFNDdGQjczMDNDMEZEMDFGRkRDNkIwRjk1QzBGCis6MTA4QzcwMDBGRjMwMzk0Mjc0MzU3MDU2M0NENzEzNTNDMkUzRTlFM0YxCis6MTA4QzgwMDBCMzU0RkQxM0YxMzQ0RTg3QTc2QzY2NzgzQzI1RkRFNzlECis6MTA4QzkwMDAyN0UwNjlFNDRDM0Q5RTE2ODRFMDY5MTRDRDdCRTk3OEI5Cis6MTA4Q0EwMDAxQTNCMTNGMEY0NTU5MDgzQjhBRjE3RTcyQTAzNjZGNjIyCis6MTA4Q0IwMDA4MTk3REY5NTJBODk3REQ1MDdDNTA3QzhFRTFCQzEyNjk4Cis6MTA4Q0MwMDA1OTgzQkY3QkE4M0Q1QjUxNUVGNjkxOUZEMDdGQ0QxMTRDCis6MTA4Q0QwMDBDQThGRjNENDlFQTYzQ0U1MkVEQjkxN0Q2ODA3RkQ0NzQ1Cis6MTA4Q0UwMDBBRDQ1MEVGNjY3ODFGRUFFRDNENzVCNDBBRUI4QzE5RUYwCis6MTA4Q0YwMDBEQzMwNEIyNDdFQjJFNzBFOEJGRjNBRDQ2QkVCRjg3RDcxCis6MTA4RDAwMDA4NEYyQkE0RDAyRTY3QjBGQUFBRTExNUNDMERGRTIxNTE5Cis6MTA4RDEwMDAzMDFEQTE3RjhDNjJFOEYxOUZDMDdGNTc5ODBFOTAzRTc2Cis6MTA4RDIwMDBCQjBFRTRCMTlCRDgxN0JGOTdBNkM5RkYzMTk2OUFCNzdGCis6MTA4RDMwMDBEMDRFRjVGQ0NERTg1ODhERTdDQ0E0NURDODhGQTYwM0Q2Cis6MTA4RDQwMDAzRDYxN0NGMzlBNkU5MDZGNDFFM0JEQjU2MzEyRjlENTM2Cis6MTA4RDUwMDBBRUZCMUVFNDVGOTAxRjY3MEE4QzE4NUNDRUIxMjZFQTVBCis6MTA4RDYwMDBGQUU1NDkyOUJBRkE2OTA5OTdFOUVBMzVCQUVGOEM1MTY3Cis6MTA4RDcwMDBFMzJBNTk1QjcyMTE3RkM0MEE5RUE3MzA1RENFRDBCNTNECis6MTA4RDgwMDA1RjU3OTY0RERGMDNCODYyMzJCRjdGMzc3M0Q0NjRERDFGCis6MTA4RDkwMDBGOEExN0FDMUQ1RjAzRkE0NzczMTQ0MEYwOEQ1MTM0MjJBCis6MTA4REEwMDBGNTgyODUzM0Y1Rjc0MEQ3MTgwM0Q5QzQ5RjE4Q0ZBQkE4Cis6MTA4REIwMDAxQjdBRjZERjg4MEVENkM5MUNDRkJENjVBNzI4MUZDMzU2Cis6MTA4REMwMDAwM0Y2M0ZGQTlCMDYwN0U1OTcyMjVEOEMzNTA3QzgzRkZGCis6MTA4REQwMDBCNzYxQkU5NUNFNjNDMzhFMjdFOEJCMTE5QUZGMEJFODNGCis6MTA4REUwMDA4NkU4Njg2Q0I2NDQ3OUFFRTlGNjVGNTM3RkI2OTRDQkZCCis6MTA4REYwMDBEOTUwQkExNEVBNUUyMkZENkZFMzZDRDgxQjdFNkY2RDBBCis6MTA4RTAwMDA3NjBBOTc3QjNCMDNFNDg3NjA3NzlBMTlDQTREQUY2NDczCis6MTA4RTEwMDBBMEJDQjFERjA4RkUwODYxMThEMkFGNDJGMjg5MjUzMDRDCis6MTA4RTIwMDBDOTRCRjk5MkVGRjFFRjI5MzJFNjU4OTM4OEE2QkY0Mjc5Cis6MTA4RTMwMDA3OThEODBGNkRENkZBOTc5QjQ4OEI3MTFGOUNDQjE3QTU0Cis6MTA4RTQwMDAzMjdFRUY5N0QzNzdGRkYxRkM3QzZDMEU1RTk2QUVFNjM4Cis6MTA4RTUwMDA2NUNEREU4RTQ5NjAyRDk4MTczQjE4Qzc4M0I2NzFCNTc2Cis6MTA4RTYwMDA0Q0YyOTA1RkMzNEZGNTQzRjJEOTAxMEZDRENGRkJDNzUyCis6MTA4RTcwMDA1NzMxNjcxMzk0QzUxQTQ1RjUzN0JCRDRGODdBMzdDNTBGCis6MTA4RTgwMDBCRDUzMDU0NzI0RkEzNzg2ODk0RThBN0I0NzMzODlFMkVBCis6MTA4RTkwMDBFMjgzNTgwRDNEQTMwNDNGNjcxRTk3Qzg0N0FFMDAwMDBDCis6MTA4RUEwMDBBMEJDNjAzNzk5RTlGQjE5RDk0RkRBMTg3RERGNjhBOUIyCis6MTA4RUIwMDA3OTMzRTU2NTA1NjRGMjIzREU3Mzg4REZDM0RCNjBGRjg5Cis6MTA4RUMwMDAwNUM1MDk5QUY2RjFGQjA0RjcyNEI5M0ZDNDc4RTZBMDdBCis6MTA4RUQwMDAzQTgxQkUxMzJFNTZGMzM4ODJGOEE2RTg5ODA2RjU2MjVBCis6MTA4RUUwMDA1RDJCN0QwNzJFQkVEQTQwN0VBRDJCQ0MzNUJCRTgxQzVBCis6MTA4RUYwMDBFRUI2RDBGN0UzQkFBMDNGRkFCOUQ2RDkwRDhDRTgxNTkzCis6MTA4RjAwMDA5OEM3Mzk3RjJBRkNCQUFFNzE1MkRDQTJFQjZGRkQ0OERDCis6MTA4RjEwMDBERUIxMTAzRkE3QzdDNUY1NkY0RjlDOTlFMzk3RURENDFECis6MTA4RjIwMDAyN0M4QjcxQkUzMjJFOTdFRENCQzZCNkJGNjIxMUZEOTk3Cis6MTA4RjMwMDBGMDlFRTg1OEFERkE5RkQxRkYzRjE0RkZDMEZDMDNCMzg5Cis6MTA4RjQwMDAzMzA1RjU0RTczNzU3ODNGQTU5OTM5Rjc2N0ExQkZGNERFCis6MTA4RjUwMDBBRTI1MDk3REU5NTFCREM2NDU2QzA2QkYzOUZBRTJFMzhECis6MTA4RjYwMDAyMjBERTUzQzBFQTJBRDUzREI2N0EzNkRCOTUwMjlFMzlBCis6MTA4RjcwMDA1RjNGMzEyRTUyRDY0QjVDMjQ1MDIzMjBCRjFGOEFGNTExCis6MTA4RjgwMDA2MzExM0VEQzZGN0RBOTcxOTE5QUMyNEI4QjhCNjhGQjlDCis6MTA4RjkwMDA5RUE1RkU1RDAwODhBREU2Nzc1MDVDODBDRUNERDBCMzU3Cis6MTA4RkEwMDBCRTIwMzg2RUMxRjU5NUUzNUYzMjdGOEY3MTg2RDk2QTM2Cis6MTA4RkIwMDA3OURGNTMwN0JGNDRCRkZFREVERkVFN0UwQTlGRDc5REY5Cis6MTA4RkMwMDA3REFDNkMzOUUwNDVEMTI0M0JGOTdCRjdGRjMyRTY0MUJCCis6MTA4RkQwMDAzRTlDM0U3RTMwQ0I2MUQxRjlFRkYxODdGODQ5RUIxMDMyCis6MTA4RkUwMDBGOEJERkNFMEZBQTI5MDc1NjUxQkY1RjE4MDVDOUJCRUI0Cis6MTA4RkYwMDBGREQ0Mzg3RDdERkUxMDdERDlDQzZBMDg0RjQzRjdCQjg4Cis6MTA5MDAwMDAzQUVBNkVDQTkzNkJCQzhEMzk3ODg2NzhEMDc5ODgxNzI2Cis6MTA5MDEwMDAyRTlCODc5OEMzRUU0QkMzMzdFNjQ4MjFCQTVGRjczRUQ1Cis6MTA5MDIwMDBBNzdCRTcyQjJCREU1QTQ5NzZBQzgxRUVDRjlGOUVEN0VDCis6MTA5MDMwMDA3MENGM0IzMkUyODc5OUI5Njk5QzdDMDVGMUU4QkJERkQwCis6MTA5MDQwMDBBN0JGNEIzMTFEQzlFNUJFMTFEQTU3RTZGMEVGNDU5RENDCis6MTA5MDUwMDAxNzRGNTBGREY5NDM2Qjc3QjVFNzA2QzU3QkVGMURFODY5Cis6MTA5MDYwMDA3MjE0MDBERTBDQjU5RDEyNTAwRjE5NUFGQjFBRDVDRkExCis6MTA5MDcwMDA5RDlGRDUyNzFFQTVENUVFNjlDRjBERkFBRTVGOUFEMTdCCis6MTA5MDgwMDA2OTQwM0Y0NjVBRUQxQkY0QkUzN0JEQzcyMEJCNzlGRTkxCis6MTA5MDkwMDA1RTk5NTkyNjdCNEJDRDUzNEI1M0YxMjZBRDhDRkI1QjMwCis6MTA5MEEwMDBBNTU0MkU2RjM2OThCODdDNzM0M0I1NzgxNUZDNUY1QjdBCis6MTA5MEIwMDA2OEJFMUJFN0VCNjcyNkYxN0IxRDBDQjgxMEYyMkI2RDI5Cis6MTA5MEMwMDBCQzUwNzlBNkM5MDE5QkMyRjVDOEI0QjI4N0I4NUNEMUJGCis6MTA5MEQwMDBGMjA1REI0MkYzRTI1QzczMTEzRTQyNzUyM0I1REI5ODg3Cis6MTA5MEUwMDBBM0I2REJDOUY1NTMzNjgzNDkyODk3NjE5RjYxRjM0NEUyCis6MTA5MEYwMDAxN0E4N0VEQURFRjJEMzk4NjYzRkNFNzlGMzQzQ0NDRjYxCis6MTA5MTAwMDBGQkQxRjY2MzJGRTM1RTk3MUMwODdCREZGNjM2RDU2RTQ2Cis6MTA5MTEwMDBFRDhDMDgyNDM5QjgxRjM4QUNGRTNFQTM3NEVBQUQwNUM3Cis6MTA5MTIwMDA3REU4QUY5ODU3OEIzMEVERDU1RUI4QzRCQ0RBOEQ2QTU4Cis6MTA5MTMwMDBCQzQ4OEI5NzZBRjlCNUNDRTgxQjg3REZGOTFDNjVGQjQ3Cis6MTA5MTQwMDBGMzBEMTQwN0VEMjVBRkY2MUVCQjIzODBGN0RDQkQxNTJDCis6MTA5MTUwMDAxMThFQ0RFQ0QyRkRFQjVCQTc3MzdFNUE1REMwRTgxOTkyCis6MTA5MTYwMDAxQTVGMDg1REY3ODYwMkRFRkU1MDkxRjNFMTgyM0VFMjZGCis6MTA5MTcwMDAwQTVBRkIwRjEzQzNGQkUzQkUyREU0RkIzRjc3NUYyOUM1Cis6MTA5MTgwMDA5RkVCN0Q4QTQ5NjFFMUYyNDBCNTdDRjdEMEY3NjAwRjMzCis6MTA5MTkwMDAzRDg5RUJEMENBQUVGQTM0RjJEQjc5NEMxQzZGREQzMjdDCis6MTA5MUEwMDBGRjlFQTBBNjNGREE1MDdGMjQzREFBODVFQUEzQUJCOTczCis6MTA5MUIwMDAzRUE5RTk1OTkyMUFENzA4QTUyN0EwOEYzRkUyM0M4MjIxCis6MTA5MUMwMDA4REQzQURBNjI3OUVBMzhGQjk0MDFGNDA5NzQzMTg4RjFDCis6MTA5MUQwMDAyQjE5RDRCQ0QxMjE1NjlFODI3RUE5N0FENEY5RjZEMzFDCis6MTA5MUUwMDBGN0Y2NEJCMjlGRUFCNzQ2OTBGRDU0QkRGOTJERDRBQkNDCis6MTA5MUYwMDBENkQ1NzIzRjYxQTdCREU2MkRGQ0ZFODFGQjNEOTFGNDAzCis6MTA5MjAwMDBBNkRFRkE2Qjc2RDQ0Nzg1N0EzQjBBRTM4QTg4OEZGMTJCCis6MTA5MjEwMDAzNjlGMjA1RjhFNzY1NEMwRTQ4MkY1OTVBMzFENjVDMzBBCis6MTA5MjIwMDBCQzU1NTcwMEUxMTY2QTRGNzVEREZEMDVFNUJCODJCREYzCis6MTA5MjMwMDA3OUI4MjBFQjFGQzAxRjQyRkM0QjhERDMzOTNFRUYxQThCCis6MTA5MjQwMDA3RThBRkMyNjYyMkRCN0Y3QzQ1QTFFMEYzNTk2RjFCOEY4Cis6MTA5MjUwMDA4NTUxRTE3RTE0MzNDODIzNzQwNTZBN0U5NDBEMEVCRERBCis6MTA5MjYwMDAxRkE1MkI4OUZCNTFFMjczNkJGQ0E4MDc5QTI2NTkyNDkyCis6MTA5MjcwMDA4NUU0MjNGN0FCNjg3OUVENjMyQ0JFQjdGMDNFODYyNzEzCis6MTA5MjgwMDBDM0M4MzAwRjFEMTQ1NUIyMDMyRDZBN0MwM0ZGNDEwQjc4Cis6MTA5MjkwMDA5NDU3OUFERjI0MzQ2RkRBMTZFMjI3MDlGNUEzNTg2NzRBCis6MTA5MkEwMDBFOUZEMjY4RjBBRjJCRDkzNjE5RUU3RDdFN0JEODM2ODhCCis6MTA5MkIwMDBGQjg3OEQ4QkEzRDA2RkYyOTJBRjYxQTZFQTM3NzkxODQ2Cis6MTA5MkMwMDBEN0IzRTM0M0VFMzdFOURBQzFFRDIyMTcyQTMwNTc4NUU5Cis6MTA5MkQwMDBDM0JGRjNFMjU0RTQwN0I5NjZERkUxMkFGNDgzNjg3RTkyCis6MTA5MkUwMDBBOEY4NkExNTFFNkFEQzA3RTE4QkYwMTRGMzM5M0M2M0I5Cis6MTA5MkYwMDA0MkUwRTkxREEyQzU4NTU0NzgwRUUwRjAyRDJGNzA5MjUyCis6MTA5MzAwMDBERjQ5NDI3ODRBM0RGMEQ0RkM1NERFQkRFREY0N0Q2RDdBCis6MTA5MzEwMDBDQjFEMTZEOTRERjBGQzkyRUM1NTEzQzIxM0UxRkYxMzhGCis6MTA5MzIwMDBGRDUwRTM0MkUwMzlFRUUxQ0MwN0YwM0JDMUUzMUYyOUY5Cis6MTA5MzMwMDBFOUMwRTc4NDREQjdDNURFMDBDRjQ5NUIxRjI4QzEyN0QwCis6MTA5MzQwMDA3QjkzQzcwOUZFNzMxNkU3NTc5OEQ5MUQ0QzhGNjM2NzQ3Cis6MTA5MzUwMDBDOEJBMzg4MzA2NEYwRDBGN0JGQzc3OENGQ0IxRTUxMjQxCis6MTA5MzYwMDBGN0U3OTdBQjc4OTg4NjcwMEJGNkU3MzlGNDcwREJBMEQ3Cis6MTA5MzcwMDBFNjRCMUE3MzZCREM2OEVGMEUwRDgxOUI4Njg3MUU4NEFCCis6MTA5MzgwMDAxQkYyQkIxOEIzRUMyNkZGNUQ5RDgwRjY1MDZGNzgzODVBCis6MTA5MzkwMDBCNEVEQzdFMUUxRkM1OUFBM0RBRkMyRURCOUY1OTlGN0NCCis6MTA5M0EwMDAyMkJDNUVEODU4RjIwRTNFNUZGNEREMTY4NUYwREFCRUMwCis6MTA5M0IwMDBFNTgxOTlCREMwMkQzMTk4Q0ZFRjk5MUUxRTZFNUI4QjU0Cis6MTA5M0MwMDA1REQ1QjNFMEZENzUwRTlGOTFGODJDRTAxQkRBQkQ5QkQ3Cis6MTA5M0QwMDA5QkM2NTlGNUYxMTk4RDNGRTY1QkMzQzk4RjBCRkI5NzBGCis6MTA5M0UwMDA5NjUzNUVBMUE3NkMzOUYxQzdBRTczRkNCMURCOEU3OUUxCis6MTA5M0YwMDA4ODE3Q0IxRjJEODVGQ0JFN0Q3OUVENzdBRjVGMDc3MDk5Cis6MTA5NDAwMDBDREE5M0Q0Q0Y0NjcwNEZBQTM3M0FCM0I2QzUwRjMzMTI4Cis6MTA5NDEwMDA1ODA0Qzg4QkY4MzJFNkM3RjhGMTIwNjZGNTQ1MDk5NDgwCis6MTA5NDIwMDA5RjQwN0NEMzhCNzlDRUY4ODFEMjUwM0Y4NUY0QzY1RkM0Cis6MTA5NDMwMDAwNTIyMEUyNjE4MTI4MDhGNjNFRUQ0MTUyNDA3RUY5RkE1Cis6MTA5NDQwMDAxNTg2Q0ZBRTJCMzM5MEZGNjdCM0VBMUY5NDRCOUQyRDRCCis6MTA5NDUwMDBEODRFOEI2RjJEMkI1MjVBNjdGRDM0N0ZFMUMzRDg1RkY2Cis6MTA5NDYwMDBGMzE3NzZDNkIwNzNGRTM1RkMzRTc4NEVFRDI2MDFGMzU5Cis6MTA5NDcwMDA1MDA2RDVERDRBRjIyMUJFNEM2MTI4MUZCMjY2Q0FGQ0Y3Cis6MTA5NDgwMDA3QkIzQjkxMkVERjc3QzdGNUI3NzBFREEwOTlENzhBMzg5Cis6MTA5NDkwMDAzRDgzRjBFMDc3Mzg0RjY3RURFMzg0MDc1NzJDRTVGRTE2Cis6MTA5NEEwMDA5MUNFREFEM0IxRTFGMUEwMzZFMkQyRkM4QzlCNzU3Mjk5Cis6MTA5NEIwMDBEMjVCQ0JCRjYzRDI2OTU3REU0Q0ZCMTE3ODMwNDJDNTFCCis6MTA5NEMwMDAwMzRENEVBMkJDNDE3QzMyOTYwNTFFNDYzRkY2MjBDMDlECis6MTA5NEQwMDA4Nzg4MTQ5NDk3OUMxRjhCQTBGRjQ0QzE3RUM0NUVGQ0I4Cis6MTA5NEUwMDA4RjFBM0Q3NEMxREEyQ0ZERjA5RTcwNjgzRTQwMERBREMwCis6MTA5NEYwMDBGQjc0NTlCNjdGNjIxRkVCQkJFODNDMDAzNTJFRTk1MTg3Cis6MTA5NTAwMDBFMzkyMEI2Qjc5RkU2QUU3MURERkU1RTE3QTRGOTc4MTA1Cis6MTA5NTEwMDA3RDAwNzBEOTVDRTY2MDc4N0VEMzQwQjEwQUQ4ODJFN0RFCis6MTA5NTIwMDAzOTJGNkYzNTgwNzRBQ0M1MjFCNTc4RkVENjYyRTcxMTRFCis6MTA5NTMwMDAzQ0Q3RUIwMEE3MTJGQTYzNUVBRjFBRUYxOUEyN0UwN0MxCis6MTA5NTQwMDAzQTA0RkYwMUNGM0ZDNzcxMzBERTgzNzI0MEYzQTMzMzhCCis6MTA5NTUwMDBENDFCRUQ4OERGQ0ExNzU4M0ZENjVDOTMyODExN0VCQjE5Cis6MTA5NTYwMDBCQTcxRkM3NTNCRUVBNEZDODUxRUZGMjBDRjg3RkJDOUJBCis6MTA5NTcwMDBGRUFENjgzM0U1NTc2QUZFMkRBRjlERkJCNzJBNTg4MEQ0Cis6MTA5NTgwMDBGRTlEM0M4QTIzMjBERjZFQjVEMEY3MUFBQTA0RDk4QzQxCis6MTA5NTkwMDBFRkY3MTdCQjhDODVBNEY3MzgyOTFGRDYzNUM3MkE5MTVBCis6MTA5NUEwMDAxRjZDRTlCNjQ0RTQxN0U1OEQyMkM5RUJERUVDOTJGM0JCCis6MTA5NUIwMDBFOUVDNDdGMjE5OTVFRTJFODFDRjBDMkVCQzM4M0U5Mzg0Cis6MTA5NUMwMDA1NEE4RTczM0M5ODUzRjIxN0VCNjdFOTY5RUJGQTBERUI0Cis6MTA5NUQwMDA1OTBGRjNFNEE4RjQ3NDZFREY2QTFDMUZFMzU3MTExOUU2Cis6MTA5NUUwMDA0MUZBQThCQURGNTAzQTNBNEYyRkZEQkY4RkFFNjYyMjNDCis6MTA5NUYwMDA5Q0MzRDBENUFDQzIxRjQ3NTdBNTg1MDNGQUE0QUJCOTBECis6MTA5NjAwMDA4NTdBQkFGQTE5OTZGRjE3RDJENUNGNjkxRjE3QTAyQjAyCis6MTA5NjEwMDA2MzIxRDNFNzQ5QzdGMkVGM0M4Rjg5MzVGMDNDQ0JGRjlDCis6MTA5NjIwMDBDMzc5RDI1RkNERTRGRThCRDAzQzY5QzY2QUE4NUMwMEVBCis6MTA5NjMwMDA2NzQzRTdBMzk2MEJDNzMzMTlFMzRDOTY0REFGQUQxREI3Cis6MTA5NjQwMDAyREYzRjE4MkZEOUQyQ0M0Q0ZDOTQyRkM5QUExRkE1RDk1Cis6MTA5NjUwMDAxODNGQThDRUVGQjlGNzg5QkZFQzFEMEQ3RjNFRjlGNDk2Cis6MTA5NjYwMDA3RjkxNUVCQjZGQUE0MEY3QzkwQjQ3N0VCNzEzNzVEMEQ5Cis6MTA5NjcwMDBBMjM1OTVFQTNDN0RGQjNERkZEOTdFNEVGQzA1RkI1NUFFCis6MTA5NjgwMDA0M0Y3RDUxODc1Qjc3QTZGRTBDN0Y5Mzk5OUUzNTZGQUY5Cis6MTA5NjkwMDBCRUY5QkExQUU2NDBCODVGQzhFRkI5QUU4RUU3NEQ2QkI3Cis6MTA5NkEwMDA3OUNEQ0U1N0FBMUUyQzFEQ0ZGM0U5RDBFRjE5RUFFRkUyCis6MTA5NkIwMDBENEYyOTUzREI2NEFEMkYzOEYyODU2RUU4RjBERjE3NzRFCis6MTA5NkMwMDA1NkM2Q0FCN0QwM0RDNkYzRkQ5REVGMTZGRTAzRkM5REZFCis6MTA5NkQwMDA5MzBBNjRGRTVEQzYxMEJGNjc3Q0JFRjI2MTYxMUY3RUE3Cis6MTA5NkUwMDBCM0NFMTgwNzQzN0U5NzYzRjMwOTE4QUY2NTY3MzNDOTk0Cis6MTA5NkYwMDBBRjMzQzgxNkEwRUY2Qjk1RDc0RTIxM0RGMDY0OTFFQkM4Cis6MTA5NzAwMDA1MzVDQTczMUI3RkJBQjk3QzY1M0JFODEwMzg3MEFFNTBECis6MTA5NzEwMDBDQkEwNjcxRTJGRkMyN0ZBMDlGRTU5N0UzRTVGMDFGNzlBCis6MTA5NzIwMDA3MzVERUNGRDc5MUZDMjNCQUI4RjdCRjQ3MkUwOTEyODM3Cis6MTA5NzMwMDA3OEZGNjhCRDlEQkVBRkI1NTJENUEzM0I0RERENDkyRDI5Cis6MTA5NzQwMDA1MEJGRkZBRTEzQkJEMTNGRTE2QjMzMzBCQ0RGNzZCMTBFCis6MTA5NzUwMDBGRUEzODYwQkU4QzVFNjEwRkI2OEMzMzlCREQ4RjdENjczCis6MTA5NzYwMDBDNDIwQkRCODYxNTVGRThFNjM2MUM2RDFGNEUyOUI2NjJDCis6MTA5NzcwMDBFQkY1RTI3MjFCRDc4QkNCNkRERDI2QjQwRkNBRTNCRUNGCis6MTA5NzgwMDA3RjFERjM0RThERDVBQzFERTVFMjIwQTU4NkY0RTE3ODcyCis6MTA5NzkwMDA4OTUxM0VGMUZGOEZDQkIzN0Y2ODVDQkU3OEI2M0UyRTE5Cis6MTA5N0EwMDAzRjU2Q0Q0NzQxMUU4RkRGRkZFOUQyRkNBODkzQjhERUJDCis6MTA5N0IwMDBCMEM2QzhFRDE1QUYwMkVGQzJDNEQxNDNFM0YyNDNDRjQ4Cis6MTA5N0MwMDAzRTQzNzFGOTc1REJBRDc0OEY2RkMzOEU2NjNFREUxNDU4Cis6MTA5N0QwMDAyNjYxOUU3OTIyNTNGNUI1MDJFRTJGMERENTNGMUUzNTM5Cis6MTA5N0UwMDAyOUQ2OTRGMTg4RUYwNkJBNEY4OEY3MDRDOTJGQjJERDY1Cis6MTA5N0YwMDBCQTA5RkQ0REU5NzY5RUNGNkRERUZGRjI1NkI3MzE0OENFCis6MTA5ODAwMDAzRjA0M0Q5NEY0RTJCMjAwN0Q5N0E5NUM3MjMwRTIzQkU0Cis6MTA5ODEwMDA3MTkzRkMxNDFGQUYxMzA4QkY0NkNDRTZGNEIzMzBEN0U2Cis6MTA5ODIwMDA0N0ZBRTFBMDMyNDlFMEY3QzREQ0RDOEU0RkU2NzFFNzhECis6MTA5ODMwMDA0OEM0MkY2ODJBOEVFMjcxNUZFOTgwRThDMEI4RjM3REUyCis6MTA5ODQwMDBEODc0MzJERTVGNjVGQzdCMTU5MzBERjRFRjUwQUMxM0RBCis6MTA5ODUwMDBCQTEzOTAyRkI3MEE0QTIyM0U0MTY3QTI3QjhGNEZDN0E3Cis6MTA5ODYwMDAyODAzRjFERjkzRjIyNDE5RThERjkzREE5M0Q3OTg4MDg1Cis6MTA5ODcwMDBFQjZCQUE2RjRENDBCRDcwQ0Q2QzFFNDc2OUNEM0I0RTYyCis6MTA5ODgwMDBGOTBGQTY3NEQwMDc1M0U4MTlGNkRGMUQ5REVCMTRENDI5Cis6MTA5ODkwMDBCQ0MwRjYwNEZBMUUwMjZCRjk5MEYwNkE5NDk5RjE3RjRECis6MTA5OEEwMDBFN0M3RTE1Rjg0RjQ3NENDNDZGQUMyQUYwNDFGQkYyNzU4Cis6MTA5OEIwMDA2NEI3RDI3REJDOTZDQkNDODk1NUIwOUU2NkJCOTlCNEJCCis6MTA5OEMwMDAwOUVGNjU1MzBGQTRDMEZCRTYwMTUyMzRDNjAxQkMyOTYxCis6MTA5OEQwMDBBOTEyRkE4RkJDMzE4RDZGQTIxRkE0MzkyNTk1NjFCRUU0Cis6MTA5OEUwMDA3RjUzRDkwNDhBOUYzNzlEMDUwNjAzM0QzREEzNDdFQzZFCis6MTA5OEYwMDBDRjgyRjc2Qjg0MDA3RDM3QzgzREQ5QzAzMDlGQjBFRDczCis6MTA5OTAwMDBCMkE5ODlDMUY3MzI0NTI5NTQ0RTNBNDgyRTg4QjI4MTBFCis6MTA5OTEwMDBFRUY5ODk2QTNDNUIzQzJGOUVBRDhGNEY3RjNGOUJFRkZBCis6MTA5OTIwMDA1QjY2MkRGM0U4MUU2ODlDNTlDMkZEOTY1RjU2RkMyMUNDCis6MTA5OTMwMDBERDczOEIzMzUzNUU1MEI5ODlGMUVGN0U1Q0M2RTg1QzEyCis6MTA5OTQwMDA0MkUxRTc1OUE1OEYyQjE4NkRGQUY1QURDMUMwMzRFNTlBCis6MTA5OTUwMDA2MTlGNUQ4MkY4RDE4MDMwQTUzQ0VFQUY5NjIwNUY2QUIyCis6MTA5OTYwMDAzODU3N0Y5MkQ3NDdGMEYyQ0VEOTQ3OTdBMDFDOTQxOTY5Cis6MTA5OTcwMDBGRkY3NDkxQTQ2RjFCQ0NCRjIwMUM1QzQ4N0NCNEQ4MTM0Cis6MTA5OTgwMDBCMERGRjlCREQwN0E2NEU2NTNENEYxRDhGRkU0Nzg2QjQ4Cis6MTA5OTkwMDAyRTMzQ0ZGM0E1NUY3OEJDOUU3MzAxRjVGOTEyQzZENUJGCis6MTA5OUEwMDBEQTg1OEUxQkRBRUY3RkFBN0Q2RkZCRkM2OEY2QjlGQkM4Cis6MTA5OUIwMDA3MTk0MDc0MTJBQTI3QTlGMERGNTY0QTNDQTBGM0REOTdECis6MTA5OUMwMDAxMzdDN0UxOUY5ODE5QkQzNDU4QzQxOTc2N0ZCREZBNkY5Cis6MTA5OUQwMDBGMkQ2QjgwMDgwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMEQ1Cis6MTA5OUUwMDAwMDBCQ0QzQjBENTQ1Q0Q1OTlERjlCRjdFNkNEMTA2NjlGCis6MTA5OUYwMDBFMDBEMENDOTEwMDkzRTA4MjgzMTA0NUYxMjg4QTA0OTA3Cis6MTA5QTAwMDA3OTA0NjI0MEE5NEVGODA5QjgyNUU5NDRBMzQ2REJCM0JFCis6MTA5QTEwMDA5REJBRDY5MjNERDkzMjA5NDMyMDk4OTAwOUE5MjU2RTY2Cis6MTA5QTIwMDA2RDhCQTlEOUI1QjU0N0E5REJFREFBNDdCQjkzOThGNUNFCis6MTA5QTMwMDBGODFGREE1QUFCN0IzQzE2NTM5QkRERjZCODNERjQyNzkyCis6MTA5QTQwMDA5NjlFRDMzNkZCN0RERjdEMEY2NjI2NDMyMDY5RjY5QzBDCis6MTA5QTUwMDA5RDFDNzJFN0JFNzdFRjc3RUZGREZFN0ZFRTlDM0I4N0E0Cis6MTA5QTYwMDA5RjVBODA3MzU2MkI2QjJBOTg2NUMwOUY3MzYwN0RENjcyCis6MTA5QTcwMDBFMDczNkFGOTNGRDBGRDBCMDExNEZBRTZDMDQ3REQ0REYzCis6MTA5QTgwMDBGMUEyNEFGMUJDMjU0MDQzNzBCRTFCNDAwMzg4OUY5MzVFCis6MTA5QTkwMDBGMEE5MDUwRjVGQkQ3NEFFMTgyMDE0QzQ4Nzc5MDJBQzFECis6MTA5QUEwMDBCNjcwMDZFRTRGQkI1NkM3RUZGNDAzOUM0NTM4QjlDNkY3Cis6MTA5QUIwMDAwQzFDREU0NzExMzA0MEIwQzc2M0ZGNUEzNUZDRUU5REU5Cis6MTA5QUMwMDBCNEVFMzU2MDFDRDM2N0M2MkJENkJBNTcxRjUxMjE2RTMyCis6MTA5QUQwMDBDRkM3QkZDRjVBRUJGRUI0QUIzNTNCRTQ5OTM5NkY2QUMxCis6MTA5QUUwMDBCQjZDMzQ3OURFODc3NDA2NUMyN0UyODNEMTYzRjgzRDcyCis6MTA5QUYwMDBGQTZFNENFMjREM0M4MzdGQjhERkU4NEE2RDc0MTA5RkVDCis6MTA5QjAwMDAzRjY4OEZGM0UyQjgyMjMxNUZDN0ZENjZDMENDNDc1OThBCis6MTA5QjEwMDBDODc4QjA1RTQyODkwM0U3RUZCQkJBRTI1MTlBRkZGMDIyCis6MTA5QjIwMDBFM0MzREZGQTM2M0UzRUYyOUQzREJGQTQ3NjQxNDlDNTEwCis6MTA5QjMwMDA1MDM1QzJDQjM0MUM4NjQwM0IwNDRBOTAwRTRFRkE4NjA4Cis6MTA5QjQwMDA3OEY0N0NFQUM4MTRBMjFGRkJDOTc4REE1QjdFNjc4Q0M0Cis6MTA5QjUwMDBDOTk3NDg0NzFDN0ZDNzdFQzlENDcwM0Q5N0M3NzM1NEM3Cis6MTA5QjYwMDBBNkZEQjkyNTkzRjYyQjFGNUVDNEZCMEY2QzRGQTZGQjE5Cis6MTA5QjcwMDA4ODY0QkUxREMwRjE5MTAzMTIxQ0MzN0U4NjkxQjAwRTk1Cis6MTA5QjgwMDBGRUE5MDVDOUUzOUIwOUJGNTVENDRCMTg4NzFCM0YyODg1Cis6MTA5QjkwMDA0MUU3NTgxQTdDM0YxODc0MzAzRDg4NkU5MTg0RkQxRjUwCis6MTA5QkEwMDA3MkVBQjcxMDVFMEZFRDkzMjE4MjIwMEZFRDc0MDEyQzQ1Cis6MTA5QkIwMDAwNkY4NDZGMERGRUZERTVEMDJGMDg1M0UyN0UzN0Q2NEM4Cis6MTA5QkMwMDA5RDNBMkFFMUZCMTFBRkI2Qjk5M0ZBNEIxQ0M2NTExRDYxCis6MTA5QkQwMDAwNDYzRTJCOTBFQUVCODhBQ0Y2NUFGMzc3OEFCQ0VFQjhGCis6MTA5QkUwMDBDNUQ2QTlGOUUwQTE3MTkzODFBMDk3RjlFODhEMkFFMjgxCis6MTA5QkYwMDBBM0I3NjVFNkEzRDRGREE3RjJERDVDN0M1NjE4Q0NCMTEzCis6MTA5QzAwMDBGMDMwMEFDMTE1Qzg5RUIyNzlFMjBDRUUwRkFFNzYzMDg0Cis6MTA5QzEwMDBGRjJDQkZEQUMxRkIzQjVCODAwM0E0RDlGOUIwQUYwN0NGCis6MTA5QzIwMDAxN0I4N0E4NjZGNTQ4QkVFN0JGRDJEQTcwOEZDNkNGMzdBCis6MTA5QzMwMDBENEQxNzFCM0E4ODJENjg1RjA1ODM5RjI3MzIwNzk3RkQ4Cis6MTA5QzQwMDBGNkI4OTI2OTc5RjgzQjU4NTBDOTcyMzcyNkUzNTk1REU2Cis6MTA5QzUwMDBBMzcxMTMyQUE4MUQzNzI1NkNDQjFFQkQ1RkJCOTBCQzFBCis6MTA5QzYwMDBCODIwMDE3RTExQzEwNTNFN0ZBQUZDM0EyMUM0NDhEQzIwCis6MTA5QzcwMDA5MzU5NzgxQjlEQkY2RkEzMEFCMjk0MDZERjczRjQwRjRDCis6MTA5QzgwMDBFREJDREIyNEZBNDczRTBGNDYyOUVBMDk2NzIwOTkyRkVECis6MTA5QzkwMDA4MzJGOTQzMEZGQzgwMzMyQjhBNDQ0RkU2QTM0ODk1RTJGCis6MTA5Q0EwMDA1RkJBRDUzOUFEN0ZEQ0I2MUUyM0JBMUI0NUUwQzA3RDU3Cis6MTA5Q0IwMDAxRDdFNEI2NkJFMzkxQ0RDRkIwQjk5RTRCQjUxRDUyNUUwCis6MTA5Q0MwMDBEQzdGNDZFQ0VFODdEQUYxRkRBMUQ3NjU2MzEwODc3NzdDCis6MTA5Q0QwMDAzRkIzRUI2N0FGNjI3QkJBQkE3ODhENTQ0QzQ0MzIyMzAyCis6MTA5Q0UwMDBEQjcxRkNFOUY1NkU2M0QwMTBGMjM3OEQ5NzYyNkU0QzM0Cis6MTA5Q0YwMDBGNzlBOTlGNTBFNTUxN0YzN0E1MTVDNEZCQTAwMUYyODYxCis6MTA5RDAwMDA4REVBMDc0NDg3NTQ3OEQzRkFCQUZCRjg1OEMzRUEwNEJCCis6MTA5RDEwMDBCOTVBMTg3QTIxODhFNzFCRjJFMDI2M0NGNEZFMjRCRkVBCis6MTA5RDIwMDA4NzRBRTRDQkZDRDlENzQxOEMzMjVFN0U0NjVGNzFEQzNBCis6MTA5RDMwMDA1RjVBQ0Q5MzA0QTdBOUI0MkE5MjQ5RTc4MjZDMjA3QzhDCis6MTA5RDQwMDA3Q0U4MzU2RUY0RTE5MEY3OUQ4NkRCMjg5Rjk5REYxQjU4Cis6MTA5RDUwMDA3MzQyQkM5Q0YwODBFQjYyREIwQzEzNUI1QTg4RUY0QkM4Cis6MTA5RDYwMDA5Q0FDM0Y2NEZGNEE3RUJFREQxQjU0MUNCOEFGRkYwQ0E5Cis6MTA5RDcwMDAxNkYzN0FGNkZDMjZGOEIyNzIxRkJFQkZENjM5REE0MDY3Cis6MTA5RDgwMDBGQzExREQwRTVBMDRBNzZDRjNDNjE0RUE2RkEwMERFMkI1Cis6MTA5RDkwMDBDMjFCRjUzQTc3MTFDMjZEN0M5RTE2MDJBOEY1MERGQjI5Cis6MTA5REEwMDBDOTBFNTUzQzc3QTQyMDQ0RUI0N0NDMUY5NTIxOUU3RERFCis6MTA5REIwMDAwMjU1QjBEQzM1MUVBQ0M3RjlCRDZGQzhDNjFFN0VBMjA5Cis6MTA5REMwMDAxRDBGRTE3QzI1MjAwM0QxNDk3QTZBNkQ2MDAyRjdBMzVCCis6MTA5REQwMDA3OENFQkMwNzU5MDBFQjI2MDExQTEyRjhBOTc2Q0EwREY1Cis6MTA5REUwMDAwRDA5N0FBRTBFMjEyN0Y2RUJEREY5NDlFMzM3Njg0NTE4Cis6MTA5REYwMDA0OUVGNjUzMDhEMzhEMjc3NjM2MDU5RDIzODZGNTVBNUY5Cis6MTA5RTAwMDA0NkZCNkREMjU3MjYzREJGQjlBQzI2NjkzRTM0MjhBNzI0Cis6MTA5RTEwMDAyN0IwQkYxNkZGMTFERDY1MTA3RDVCQUUzQ0U1RDg0RjY2Cis6MTA5RTIwMDA5OEFGNDA0MjFGREZGRjI1RThGNTlGQzlDNENFNzU3MDhCCis6MTA5RTMwMDAxREM5NEYzMzE4OUQyNDFGNjhCQzhENjM4ODk3ODVDRjNCCis6MTA5RTQwMDBCOTI3MzJDOTkwOTgyNkRCNzVDOUUyQ0ZBQTRENDU0Qzk3Cis6MTA5RTUwMDAxRkM5NzNDNjQxRjg3RjA0NjFDOEM4MTcxNURBODQ4MzI3Cis6MTA5RTYwMDBFODA0REE5OEM0Q0Y1MTZGMEMyMkIyMDM4QUM5RTNEMDU4Cis6MTA5RTcwMDBDMDY5NTExQzc3MDU2QTZGMERGQkRFMDBDNEE4QkYwNEUyCis6MTA5RTgwMDA2MjNDMUUzRkIxQzMzNUM4MTY2RTMxM0ZBQjA1OEM4M0IzCis6MTA5RTkwMDBGODNFQjMzQzIyNDlEOENGNjkwNDQzNDY3ODFFNjM1QzQwCis6MTA5RUEwMDBBMjdENkEzODVGNUU0OTJDMTlFNzdFNDEyMzhDRjczMjI4Cis6MTA5RUIwMDA3QzczMEZDRENGRUYwNkFEMkY5RkY5OTdERjhGNzY0MUUzCis6MTA5RUMwMDA4NEY2RjMyODE4RTA5MjA5MUZBODkwOTY5MjE2MDk3MzU5Cis6MTA5RUQwMDA3QjI1RTgzOUE0ODdCRTA5QzYyQUVBOTdDMjA0RUIyNTg4Cis6MTA5RUUwMDAzNEVGMTJGNTE3QzE5ODI2OTQ3RDlDRjUzNzRDMjhCRUE3Cis6MTA5RUYwMDAzMzZFQTFGRkQzQzlDRDhDRkMyODcwQzZBNjBCMEVCRTU1Cis6MTA5RjAwMDBGRjU2QjM3QzEzRUFDMUNEQjc1NTVERDBERjUwQkE1RkMxCis6MTA5RjEwMDA0QzkyREZCQjM3RTk4Qzc3QTU3QjIzQ0I4QkQyRkQxMjJDCis6MTA5RjIwMDBCRjFGRDgxNEJDNkUxMzNFMjc1NUUwNUU3NUYxRjhBRjI1Cis6MTA5RjMwMDA1MDA1M0VBMzEyMThFOENCNDBGNEQ5OUIwMkRCQzg1RjYyCis6MTA5RjQwMDA3OUQ2NkQ5NEIyQzgyMzNFODkyRkFBREQ5M0FGRDQ4ODA5Cis6MTA5RjUwMDBGOTQ0MEYzRkQyODNGMDlENTMwRTEyRTE2MDA5RDEwMTA1Cis6MTA5RjYwMDA5RkFCNDg4NzdENENDNzE4QzMyRDBDODNCMURCNUE5NzM0Cis6MTA5RjcwMDBGQUY5NDgwN0EyQ0IyODY4MEIwOEFGNzJGOEUyRThDMEVDCis6MTA5RjgwMDAxRjg0QjNFODE5MzdGQjQ3MEFEMTY1RTk2NUExQ0JBNzYwCis6MTA5RjkwMDAwOThGMTc0Qjk3NTQ3QUMwQUU1QzgwOUFCOUY1RTk1NzkwCis6MTA5RkEwMDBBNTc4ODZCNDk0Qzg4MkY0QzFGMzQ4NDgxRkMyNjcwMEZDCis6MTA5RkIwMDAwNDNERDBBRTFCODRBNzc0RjhBNzdFNDYyNUU4N0JCODg1Cis6MTA5RkMwMDAyRkM2MTMzRDIzMzUzM0ZDOUY4REZDMkZGQTQyQkU3Q0Y4Cis6MTA5RkQwMDA0ODA3RDExNzc0RjI5M0JDNjAzRjEwMUNFM0Y5MzlEQkRBCis6MTA5RkUwMDAyMTc4MjA5RkU4NjEzMkYyNkNCQkVDODI0OUY2NkI4QkUyCis6MTA5RkYwMDAyNTgzRTlCNTU0NDYwNzBERkI5OTUyREM3MjdFNDZEOTlDCis6MTBBMDAwMDBBRTY3ODFDNkY0NTkwQzYxNkVGRENFQzlFM0U3NDg1RkM3Cis6MTBBMDEwMDA3QjFDQTM5MTIyNkE5RkFFQTM3NTdBOUI1MUMzOTBDQTAxCis6MTBBMDIwMDBGNzBFRDczMTVGREUwMzVBMjlGMjVEQTE2QUIyRkUyRTI4Cis6MTBBMDMwMDBCQzQ2MzEyMjdBMjJCRUY2MDhCRjQ5Mzc4RjkwQkQyOTJGCis6MTBBMDQwMDA3NDc4NjFCMDcyNjZEREE4RDMwOEM0OTA1RUE3QkM2NzVGCis6MTBBMDUwMDA0RTg0RjBGOTgyN0NCNEVGQzYwQzlFNEYzQkM1RjkwOEU0Cis6MTBBMDYwMDBBNjdDMDVDOTgzOTA4RjQwMzVFRUM1NzdCRTdFMEIyODUwCis6MTBBMDcwMDA4MjZGM0QzQjEwN0Y4ODhGQURGNDAyRjEyNDBERkMxQkY1Cis6MTBBMDgwMDAzRjdGQTQ1RUU4QkJDRjZFMEEzRDRFRkM0MkZBODlGMUU5Cis6MTBBMDkwMDA2NzgyNDZGQTQ5MzM4MEY1QTY0MzhGQjA5RjcwNzZDMDM5Cis6MTBBMEEwMDBBNTEzOUY0MjZDQzQyNEJGNjI5QkI1Q0VCNjAxRDcwN0VGCis6MTBBMEIwMDA1MjU2QzIzOUEzQUUyNDNCRUVEMDgzRDlDQ0NGODYwNDBFCis6MTBBMEMwMDBFNDFGQ0M3N0RFQTVGMjNGNzRFN0NEQ0IwRkE4N0I2QTA3Cis6MTBBMEQwMDA2REY2NDRGOUVDRTM1NDkyOEZEQ0M0Nzk4MjRFQUEzRkNBCis6MTBBMEUwMDBDNDdFODc0QTcyOTIzQjM3MUM2NzhBRkY2MkMzNzEwNjNGCis6MTBBMEYwMDA4MjBDQzc2OUZCMkY2NEI3OTA5RTc3QTFERDFBNDQ3QzYwCis6MTBBMTAwMDA3RkRBNDQ4Nzg4Rjk3MkYyM0ZDODlFREYxRUNFNjJCRkI1Cis6MTBBMTEwMDA4QjUxODRFM0VFODg0OUEzODNDODhGNzc0MjU4MjUzRTRDCis6MTBBMTIwMDA5NUEwMjQ0MkY0REIxQTkxRDg3RjJCREVCNzNEOEJGRDNFCis6MTBBMTMwMDAwNTY4RDAwODNGNTJGQzA2RjlEQ0YyOEJDMEEzODVBNzY2Cis6MTBBMTQwMDBBREYxNUYzQTc1MkZFMUQ1MEIzRjRGODhCN0VDRjdCRjA0Cis6MTBBMTUwMDBFQjVBN0FBQTRBMjdBNUVEMjkyM0ZBNjY1QUY0NDVCNTlGCis6MTBBMTYwMDAxRDc5MERGN0U5RkM1MzM2MEM2QUU0MTc3RkU5OEQ1QTI3Cis6MTBBMTcwMDBEQzVGREY4RjY1ODNFMkIzNEMxMEYxRDUwMjEwNzYzQ0QzCis6MTBBMTgwMDA5M0U0NzQyOUYxQ0I1OEZDMzNDNDZGREREOTFBOURENzAxCis6MTBBMTkwMDAxRTA3RDZCODA4ODREODNGQ0U0NDNENDA3MDFEOTlGQkI5Cis6MTBBMUEwMDA5OTNGMzNCMzU0RERGNkI3MjFGMTFDNkU4OUZENjA4RjAyCis6MTBBMUIwMDBBNTcyRjNENDc4OUNFNDJCMEZGREQ4RERDOUYwMjUxMUVFCis6MTBBMUMwMDBDRjAzQzc0MzdDMEVFOUZDRjU1NzU4RkUzQUJFQUEzQkM1Cis6MTBBMUQwMDAzNzBGRkYzRUQ1N0Y4N0M0Nzg5MEM2NjNEQzE5NEZDMDI4Cis6MTBBMUUwMDBFQkI0QkM1ODcyNjZFRkRCRTM1MTkzRTUyNTY1OUU0REY5Cis6MTBBMUYwMDA4RjcyQTdFMDhGQzUxODdGRURDNkZEMEUwQzFDQUQyMzM2Cis6MTBBMjAwMDA3RDMzOTIwNzNBNDY5QUQwQkZGNTlGMjQ4QUIzRDY5M0ZFCis6MTBBMjEwMDAyRTI2RkJEMzAwQTMxNDQ3Nzg0MDFGMkNDM0JFQjNDMDI3Cis6MTBBMjIwMDBDM0ZDQjNFOEJGODNGMUNGMjA5Q0JCQUI1RDlBOEUzOEYzCis6MTBBMjMwMDA1OUZDOTFBOUQ1RTFGQkJCMEFEQzg2ODlGNDhENUFFMzcwCis6MTBBMjQwMDAyMzBERTg2Nzg5RTVERjI2QkZGNDRFNkJCRjRDMEI5NDA2Cis6MTBBMjUwMDA0M0IzQTU4OEY5NURGMUI1RUQ3RDhERTJERUM1MzJDODY5Cis6MTBBMjYwMDBBNEQ3RTQyRTgzRUNEMzlEMTgzMEU0QTJFQjBFNUY3NkU2Cis6MTBBMjcwMDBCMkRGODdGRTFEOUZDN0Q1OTBFQ0Y3RERGNTg4MzNBOUM3Cis6MTBBMjgwMDBFRjRDRjExMzZCNUI5MkZEQzBBNjE2RTA3NTY5M0ZCOTA4Cis6MTBBMjkwMDBBQkZFN0FGOEUwRjFCM0ZFNUNBMThDM0JCNDM0NzZENTJBCis6MTBBMkEwMDBDNkJGRjQ5NDg3RjFGRjQyMUVFMjk1RjMyNDQxRjM3Mzk1Cis6MTBBMkIwMDBEODc3MjExRTg5NUYxMTIzNTk1NTg4Mjc5M0JFRUFFNDc4Cis6MTBBMkMwMDAyNzdGRUYzRTFBRUYzQThCRkM0QkUzNjU0RkMzRTc4OERECis6MTBBMkQwMDAwRTU3NTg3ODAyQjEyRjEzRkZEMUJFNTNGRDYxNTc4QTM0Cis6MTBBMkUwMDAzRjlDQkE2RjlCMEU3N0Q4Rjg1OTAzNkIwODNGRTg5RkU1Cis6MTBBMkYwMDBCMzdGNjA5RjJCRjUzQ0NGNjM3Q0RFODBCQ0Y0ODMxRTc0Cis6MTBBMzAwMDAzN0I3RjExRThEREIxMzNEMDE2RTRGRjZFOEQwODA4RTFFCis6MTBBMzEwMDBENTRCM0Q2NURDQkVEQzYzRjBGMzU3N0JBQUI5QjVGMUU0Cis6MTBBMzIwMDAzMTlCQkVGMUU2MzlEODVGMzhCNENCQzE3OTAyQTU1QzY4Cis6MTBBMzMwMDA3QkU1NkFFMkRCQjc2NDU2MUYxQUU4MTlDQTUyQjY0M0Q2Cis6MTBBMzQwMDBBMEUwQjgyQjFCOTU1MTkzQ0U2MkM1M0Y4QjJDM0U1QjkyCis6MTBBMzUwMDBFRTlBM0NFRUMyNzlCMTdDMzBGNkQwNDRCNERCREIyQjE0Cis6MTBBMzYwMDA2N0UyOUY3NTkzOEUxOTM5MDE4QTc3MTYyNEU1MEJFQTA3Cis6MTBBMzcwMDAyMDM3QTk1RkVGQkUyMjY5RkMwNjZENjlEMjdCOUJCRUM4Cis6MTBBMzgwMDBERkE4MTM3MkIzMzFCMDNDNjlGQ0ExODZGNUYxQkJDOUZCCis6MTBBMzkwMDBBRkFGNzE2OTk0NkY2OEQyNTcyN0JEQkZCOUVDODYyNEZGCis6MTBBM0EwMDA3ODIwMzcxQkE0QTc3M0JBMTJFOEM2RTc0RkE2QUJCQTRBCis6MTBBM0IwMDBFM0MyNzE5MDRERTdEMTE0Mzk5ODhEQkVBOTdDNkJFMzRGCis6MTBBM0MwMDAzNTY3MUFBRjIyQUU4QzUyNUNBOUQzQjlDQkE1NkQwODA0Cis6MTBBM0QwMDA2QTY4REEyRjMxODFGMjRCRjZCQTRBMzVDNjk3MTU5NzdCCis6MTBBM0UwMDAzRkJFQ0NBMkY4QjIyODVEN0NGOTIxRTc2REU2OEMyRjQ4Cis6MTBBM0YwMDAxQjkzRTNDQkFDMTRCQ0NEMTU1RkJFN0E4OUY4REM1QTU1Cis6MTBBNDAwMDAyOEYyNkUzOUFGQ0JFQzA3Q0E4RDYxQjY3RkI5RTNCMkUzCis6MTBBNDEwMDBCMTkxNDI0RkNCMUZGMzkyQ0NFM0I4QUQ1NTJBRkI5N0Q1Cis6MTBBNDIwMDA4NzYwMjIwMDIyQUY5ODRGRjYzMEI3RENDODI3N0RGMzUzCis6MTBBNDMwMDBBNENGNUM3ODFCQzVGOTREMEVFMzI4NEU3OUIxRUUyQjA1Cis6MTBBNDQwMDAwMUYyM0JGNkVEN0UzNDgwNDYwOUZFQTdDNUMxRkEyRTI3Cis6MTBBNDUwMDA1Njc3NjYwQkM5OTVBMkEzMUYyNzcxNkI4RUE2RjE0Rjg1Cis6MTBBNDYwMDBFQ0YxNzZCRUYxRTAxNjkxNkYzQzY4RTUxQjBGNUFFQkZDCis6MTBBNDcwMDAyMDQyRDhERThFNTQ4OTdDRTNBRjVCNzQyQkZGMTdFMTVBCis6MTBBNDgwMDBGQ0UyRTEyRDZCQUM3QzIzRjY1N0QwNzA4M0VERjhBMDk1Cis6MTBBNDkwMDBENzMwRUYyMEZFRjk4NTA3MjJGOEU4ODBBNDY1NDk2NEVCCis6MTBBNEEwMDAyRkI2MzgzNENBMUY4RjM0QUU3QTk3RjI0OUZCM0NBQUQ0Cis6MTBBNEIwMDA0MTAyMUZGNUFEQzkyN0ZFOTJCN0EyREI4M0ZERTFDNkJECis6MTBBNEMwMDBFMTk3NjlCRTUyRUFFMDdFNzRDQjU1OUMxNzFDQzlEMzU0Cis6MTBBNEQwMDA5QThBMjlDRURCNTA0Qzk4MDZGOTk5M0ZGNTUwNUUyM0I1Cis6MTBBNEUwMDBFQTNCMTNBMEY5QkRENzhCRjlCM0QxMjczNUZGMkY5M0UyCis6MTBBNEYwMDAyNkE2RjhBREM0MTE1NzExOEVGQ0ZDOTkzRjEzQkNGMzhFCis6MTBBNTAwMDBGMkYzMjk3RUM1QTA0RkU1QkM2REZFOEZGNzdFMkI1MjdFCis6MTBBNTEwMDA0MkFBRENFNDdDRjMwOENBM0NFMTY5RUI5Njk2NkM4QUJCCis6MTBBNTIwMDBBN0I2M0EyN0YyRDJEOTBCM0JGRjM5RUQ2RkZBOTNGRDZDCis6MTBBNTMwMDA4NDU0RjhGQ0IxRjM2QjBFRDFENUVEQkMyRDdFQTJCN0RGCis6MTBBNTQwMDBEQzM4MUEyN0JDNDFBQ0IxOThFMjVFOEZCMENCQjNFMUU2Cis6MTBBNTUwMDA0MUYxNUNCODBFMjI3NzY3OTgxOTA5NzhCMEVCMUREN0U2Cis6MTBBNTYwMDBCNjhBM0NCOEQxQUFEQjc5QzZBNDdBODlEMkU4RTA3OTY4Cis6MTBBNTcwMDBCNjdFQjBGM0UzQTk3NTEyN0IxRjM1QUQyMjRGN0JGRDhDCis6MTBBNTgwMDAwQ0JDQTRCQTg5QkM1NkI1RTAxOTFDMTdBN0U2QjNFNzAyCis6MTBBNTkwMDBBQUEzQ0M5NUNGNkVCNkNFNzNCMTc1OTM3QjVCODFFN0UyCis6MTBBNUEwMDBGRDdGQ0Q3RkRGREJGQTdGOTNGRjNFQkY1RTM0Q0FGMkQzCis6MTBBNUIwMDAwM0NGNENGRTlDRTQzQkJBNkNBMTNFMjhFQTQzNDlGNTJDCis6MTBBNUMwMDA5Q0Q0M0FDRTYwODY4MDMzQkM1MkY4QTlDMzU2M0ZCMkMxCis6MTBBNUQwMDA0MkMwNERBREVGNjQ1ODc5OTU0OEVCNTIxMTg3ODEyMTA3Cis6MTBBNUUwMDA4OEFDOTg4NUM0MTcxRUU1QkIxMTBERjk2MTgxRTcxMDkxCis6MTBBNUYwMDBGOEIwNzVGOUI3NDVBOEFEMkRENDg3QUE3MTVGQzNDQjY0Cis6MTBBNjAwMDAxQzZDQzc4NkJEQTE0N0ZCNDgwRjJERjNBNDk1OEY4MzEzCis6MTBBNjEwMDBBRDQyMkYwRTEwREY3MkZDMDRBNjgzRTQ0RUIyODUwNDE3Cis6MTBBNjIwMDA0MjBFQTRENzA4NzMzRUMwRDE1NjlGQzg2NzY5QjFFQUVECis6MTBBNjMwMDBEQjExOEY1RjI1QkVDOEUzRjNGMEZDNTRGODVGM0IxRkNFCis6MTBBNjQwMDBGRTYzQzRBRjUxMEIzOEMxRDk4NjcwQkVEOTNBNUQ0NzlECis6MTBBNjUwMDA4Q0QwN0JCN0I1OUU1QjhGNTU5M0JGRjA1OEFCMjZGNDdCCis6MTBBNjYwMDBCMEIyRDJBMEYzMEZGQkQyQUZGNzk4QjU5RUU5MDg0QjdBCis6MTBBNjcwMDAzNDZFNTE5Nzk4MEY2RTMxRUZBMDM0RDk3OTVBRDA5MzM4Cis6MTBBNjgwMDBFNTg5RDZBN0Y3OTk0NkIyN0U0ODg1OUI1MTc2RTE3QTRGCis6MTBBNjkwMDBEOUQzRDNGQjRGOEU4NzBFNDhFOUY3Rjk2MzRCMEU2Qjg2Cis6MTBBNkEwMDAwQjgxRUQxMUYxQzU5RTM0N0M5MTJBRUYyQUU1M0YxMTEzCis6MTBBNkIwMDBFRTA5OEIwRUI2REVGMTI4RTNFQjMzMkJDOUJFODNEMTU2Cis6MTBBNkMwMDBDQjg4M0RDRUU3REQ5Mzc5MEJDN0M5N0QzNzhCM0M4N0JGCis6MTBBNkQwMDBBQTA4QkQ1REQwODk2MDZBQThCRUQyMTBFMUJBRTFGRENBCis6MTBBNkUwMDBBMEI5N0NFN0UzRTE2MkUzM0RCMjM3OTE4NEY5M0ZCMTgxCis6MTBBNkYwMDBGODIzQjUyRTE4QTNCQTIwRjlCMTU0MTdBNEZFNEU1NzZCCis6MTBBNzAwMDA2NzNBQkJGRDZFOEJEM0IyQkZFOUVCM0I0N0E4QkU4Mzc0Cis6MTBBNzEwMDBGMzhGNTQ1QkY1OURBMEE4RUZENDNERjUwOEVDQzRGNzhBCis6MTBBNzIwMDBCRjMzMURFQ0I3NEVENzc3MUE4QUQ3NDgwRTk2MjNBMEIxCis6MTBBNzMwMDBGQUY0N0NFQjNCQjE4Njc5RDY3NzgyMTc1RERGRjk2MzVCCis6MTBBNzQwMDAyQkUyRTc5MDQ3RDQ1OUE2RUIzQjZERkU3OUU1NzU3NDkzCis6MTBBNzUwMDA4OEM1QkI0OUFGNzQwMUUzQzFEQjM0MEMzQjI5OUYxMEIyCis6MTBBNzYwMDAxMDcxQzY4OTJBOTdFMEFGOUQ5MjE1OUY0MTAzRDg3QTUwCis6MTBBNzcwMDAwQTNGQ0Q1REZBQzNCOTY0NUZERTcxNDEyOUJFNUZGRjU4Cis6MTBBNzgwMDBDNEVCMEFGNTg3RjMxRDZCMjg3RUJFNTY5RDc4RjA1QTAwCis6MTBBNzkwMDA3QUJGQzZDOUZBQTMwRTI5MTk0RkUyOEZCOENCQzE0NUJCCis6MTBBN0EwMDBGMDg4NkFCNUIyNjhFMzEyQjVGNUVFQ0MyNDdEQkQ0MTAwCis6MTBBN0IwMDA0QjhFM0Y4NkE2NEVDOEQ5QzQ5RjFBMTgxMkUyNzlBOEJDCis6MTBBN0MwMDBDRTMwQjM0OUY3MTgxM0JERjQ3QzY4ODM2RTBDRUFFNDBECis6MTBBN0QwMDAwRjI3QzcyOTQzNERBQUQwQTc0NUMyRUUwQzFGRDcxRjhDCis6MTBBN0UwMDAyNkZGQUFCRjNCODNGRENGMDMwNTBFNzFFRTEyMTgyNThECis6MTBBN0YwMDA3RTY4RDI5M0UzOUFFMUIxRTI3RDI1MjQ2NzMxMjdFN0IxCis6MTBBODAwMDBDQkJGMzMyNkM2NkZERkJENzI5NEUyNTJDREYyNTdCNzhECis6MTBBODEwMDBFN0FGNjczRjE0RkFDNEI4OUJDQjk2QTc5QzdGNUMyMzM1Cis6MTBBODIwMDBCRTg4RUQ3NDAyRTFCRkJGRTBGNjAxQ0E4NzdFMTA3NUY1Cis6MTBBODMwMDBBRTI2NzExOTZBRDM5OTdGNkRCQTZERUJCQjkzRUI0NDY5Cis6MTBBODQwMDA3RDJBNzBERDc0Njg4QkNBRkMzRjk0RjdDMTkxM0I0ODQ4Cis6MTBBODUwMDA0RkU3MkQ2MDNDOEY2QzUxRjM0MzA5RjI3MEEyQ0RDNUQ4Cis6MTBBODYwMDBGNDFFRDkyMkZDOEIzQzA3ODRDNkQyQkMzRkQxMjZGNDBGCis6MTBBODcwMDBEMDI3RUYwMTNFNEYxNkRBNjUxRDFGRTk0QTM4RUUyMjU4Cis6MTBBODgwMDA3QzE0MDBGQzIzMUQyN0YwRTE0MzdDRkU0NjA3OTRFMjg0Cis6MTBBODkwMDAxNjg3RkQ1REVDQkZBNUYyRDk3ODVCNjk1MjVDRUJBQTI3Cis6MTBBOEEwMDA3NjI0RTFEMUU5MEE4NjM5Q0Y3RDMzRThBNEFGMUExQUJDCis6MTBBOEIwMDBCMTRGRjE3RDk3MEFDNDZGQUVDMEZEN0NDRTFDRUM2NzMyCis6MTBBOEMwMDA2MERGREQxODhCMjhEODc3OTc4NDU2OTNERkZBRTJDRUM1Cis6MTBBOEQwMDA4RTAxQ0FCM0I4RkMwRThERjhDREQ1NzU1N0IwOTVDNkFDCis6MTBBOEUwMDA1NzNBMjEwM0RGRjc4MTJFMDU2ODlGMTEwOTQ4NUZFQjc2Cis6MTBBOEYwMDAxMDZBMjQ3RjdEMzhFMEQwMjg2RkQzMUM2RERGNDFFQkQ4Cis6MTBBOTAwMDAzN0ZCMTcwMEQxNzk2QjkzODNENzNCNkJBQTlDQjRDQUYyCis6MTBBOTEwMDAyMzQ3ODNGMjVGMEIzRDZDNzdERjc3ODYxRkVFQzBGMTM0Cis6MTBBOTIwMDBFRjIzQkQyMjMwNzNBRTVENkRDNTRDQTcwQzNEMzk3RTYzCis6MTBBOTMwMDA3NjQzOENFREYwNUE3M0JDOEJENjU5NUJBRDUyNDUwMzEwCis6MTBBOTQwMDA0RUQ0OUMzOTQyRkVGQTQ4OTVDQjcwRTFCRTQ2NkEyNDRCCis6MTBBOTUwMDBDNkY3Qzc1NUNFNTFCQUU3RjAwMzc1NUNBNjc1N0ZGMDEwCis6MTBBOTYwMDAzMUYyNDY1MTNBRjlCREIwRENBNDhFMUZBQTZFNzExM0M0Cis6MTBBOTcwMDAzRkVDNDU4QTEwN0UyMjUzMEVCNjVGQTlFM0ZFNkNEMUYwCis6MTBBOTgwMDA3RjJGRTI4NUYwMUNDMUZEOTY1MjVDMzQ4OTcyODVEMDIwCis6MTBBOTkwMDA3RDUzQzFDN0VGQzA3NjU1OUJDMkUzQkU5MEVGODg1MDkwCis6MTBBOUEwMDA1REE4QkY0OTY1MzlFOUY3ODYwNkU4RkU0RjNGRjIzQkVGCis6MTBBOUIwMDBDNzQzRkUxMEYzRjM3MEJFOUZFNUQwNUU2N0I4NjY3M0MxCis6MTBBOUMwMDAxOUYxQ0IxQjU1MTlFQ0I3NTdCNTM1REU0QjdFRkI3QTI5Cis6MTBBOUQwMDBGOUEzN0Y3OThBRTJBNzAyOTVFOUQ5RUYwQ0M2NUYyNTMyCis6MTBBOUUwMDBCRTZFMTJGRUUyQzkyNTBGQjBEQ0Y1NzVERDBFODQzN0IwCis6MTBBOUYwMDA4ODg0REZBMUJBNTU1RjY1MERDM0I3RjMwREMzNEI0NDFGCis6MTBBQTAwMDAzRUE5Q0Y3RjVGODRGMjFCRjE2QTkxNUYzMEYzOEU3MkIzCis6MTBBQTEwMDAzRUNGQ0UyQkQ1NTk3QTZDQjkyQkZDNEEyOUNEQkI0N0ZBCis6MTBBQTIwMDAxMTc1NjFCOTIwNEFGQUMwNDU3OTI1OUFBNzI0RTdCQjc4Cis6MTBBQTMwMDBENjREMjZDN0MxOEI1M0UyRTBENDNDMTNCOEM3NEI1QTVFCis6MTBBQTQwMDBEMTlFM0VEOTg2RjFGMTcyOThDRTJCRDExMTU4OEUyQjIyCis6MTBBQTUwMDA1RDFDMkY4RTU0OEIzODI4RTYwQ0U3NkJFNUU3Q0JGMUI1Cis6MTBBQTYwMDA5Qjk2MUYzQ0RFRTM0NjBFMDBGODUxOEZDNkZEMkNGMzhCCis6MTBBQTcwMDAzN0JCNzMxMUQ0NUIzRDAxN0U3RUVCREE0N0E1QzQ3OTA5Cis6MTBBQTgwMDA0Mzk1RUQ2RTlERjVDNjQ0ODBFMEE2RUE4QjU0M0U1ODkyCis6MTBBQTkwMDBEQkI2QzBCMjBGMjYxMDdEODcyNjgxRjFFQkFENTkxNUNDCis6MTBBQUEwMDAyNzNFM0RGQjdCRTAzOEY0MTMwREUzMUUyODNFN0Y3RUZFCis6MTBBQUIwMDA5Q0Y2RTlBMkZDOTdEOEU3NDlEQUE3OEJGMjVGNjI3RkEwCis6MTBBQUMwMDAyRkY3RThEQ0JFREE1M0M2RUQ4Mjc2MTA3OTdFNUIxRjg1Cis6MTBBQUQwMDA1Qzg5RkEwMEYxRDY1MDIwRkEyNEZGNjQ4NzczRkNCNzMyCis6MTBBQUUwMDAwNzg5QkY1QzAxNDUyM0Y5NzYxN0M0RTI1MjgyM0UxOEZDCis6MTBBQUYwMDBGMTg2REYyNUJCREM5RkU3NjFGRTRCREREN0FGREExQ0JCCis6MTBBQjAwMDBENkI5QzJCNzExREMyMTg0NEI3ODdGNzFFNzdGM0RCNEExCis6MTBBQjEwMDA5NEQ2Nzk0QjY2QkVDQUU5REFCQzgzRjUwRUVBODUwQzk5Cis6MTBBQjIwMDBGNjM3ODQzRThDRTU3OTM4RUYzMEIyQjM1NEEyRkI1MDRGCis6MTBBQjMwMDA1Qjc3MEI0Nzc3NEVCOUM3NzU0NjcxREUwOUQ0RDdENDFBCis6MTBBQjQwMDBFRjQ3MzlBN0YzRjRENzdDRjAxOTVBRTdFMzNGMkVFMDNCCis6MTBBQjUwMDBGQjREMjM1QkRFNjZCOTdGMDMwMzkwRENDQjI4RjdCNkExCis6MTBBQjYwMDA5Q0M1REU1QUZDNkQxMTdGMDczQjlFMTFFNzY3M0QzODlGCis6MTBBQjcwMDBFMjFEOEZEMUY5RkI3RjIyNDMzQUJDNUQyQTVEQzE5QzY3Cis6MTBBQjgwMDA5RjFGMzJBQTRDMUUzRkU3NEY1MzM3MzQ0NUREQjA3NzQ1Cis6MTBBQjkwMDBFQzdCREM4RjM0MDM5NDYyRkZFQjRFRDM0RDdDRjBGNUZECis6MTBBQkEwMDBERDhFMEJENjBEQkZCRUZCQzI3NUMzRDEyRjNCQzBBNTNBCis6MTBBQkIwMDBDREVDRTMwQTk4RTAzQzJCODVGMDU0MDdFQ0EzNTdEODgyCis6MTBBQkMwMDA2NkI3ODdBRTZFNjczRjUyRDQxNUY1MUFDQTM5NTA1RjIzCis6MTBBQkQwMDA1QjQwRkVGM0MwMjZCMzhDREZGQjczRDhFRTA3OTRCMTY1Cis6MTBBQkUwMDAzOEQ5RjUwMEQ1Q0I3NUJBQkYxMEUxQkEyN0U1NjdFOUNBCis6MTBBQkYwMDBGRTQyRUFGOTdCOUQxM0VCRjk3QzM4ODRFQTk1QTlGNUNFCis6MTBBQzAwMDA0OUM5RjM3RDUxREY1RjJBRUE5MDc2N0RCMjQyOUQzOEQzCis6MTBBQzEwMDBGQTIwRTFFOTM2MzdFM0ExRjdEOUVCREZBMUZBOTc1RDM2Cis6MTBBQzIwMDBDNzBGNTg3NTYwNkQwNzY4QkJDNTM5Q0M3NkYyRkI5RkJFCis6MTBBQzMwMDAxN0Y1NTBCODFFQ0ZCMTkyMTY5OTI4REVCNDgyRUI5QjVGCis6MTBBQzQwMDAxQkU4MUM3M0VEN0ZCRTc1QzM2NjRCQkYyMTczRjMzRERDCis6MTBBQzUwMDBDODlGNTlGOEI0QzdGRDREQkI5MEM3NkI1NTkxQjc4NkQ3Cis6MTBBQzYwMDAyQzk1RjVGQ0ZBMjczQzIwOTNCRkVDNTU4RjkyOUM2Q0Y5Cis6MTBBQzcwMDA4Mzg5MEQyNDRGQkQzRUUxQjc0NTBGMzlEOTZGRkI1NDkxCis6MTBBQzgwMDBCQkNFNzRDRDUzNERCRUJGOTBGN0Y3MTlDNjZFMDQxM0ZCCis6MTBBQzkwMDAzREFFNjU1MTFFRTkyRkFERTZBN0RBNzkxRkIxQjYxNkI0Cis6MTBBQ0EwMDBEQUM3ODBDQ0ZBRUVGREQyMEQ3QzhGQTk0OUNBNjY3OTRECis6MTBBQ0IwMDA1NDM0QjMzMDUxNUZFRTZBNEY3RjFGQTlCNjcwQjI4NTJFCis6MTBBQ0MwMDBEN0Y3M0E4MEUyQUQ2ODg2RjFCMjRFRjg3RTQxNjFCOEJFCis6MTBBQ0QwMDA0RDIwRUUyQkMxNzY0RDFBQzA3M0Y2N0E0RTMzN0Q2QTQ1Cis6MTBBQ0UwMDA0QjVEMkI0OTNGRUQ2QTE3NzE1QkQ0OUIzRUFFN0JBMDU5Cis6MTBBQ0YwMDA1REM0OUY4NTJEQTEyRjEwMUQ2RTgyQzk3QUQyNkYyODQ5Cis6MTBBRDAwMDBEQTQ2ODRFRkI1ODg3ODZEMTdFOTRCMTFFRkVFNzJBQzM3Cis6MTBBRDEwMDA5OUM5NkJCREU0MENFREEyRjM5QURGMTFGRTg0MkIyMEUwCis6MTBBRDIwMDBGQzdBOENENDM4MUY3NEFDQzVGQzA3ODJEQjRDN0M1RThCCis6MTBBRDMwMDBDOThBMEE4RUFEM0M3RjFGNTE5QjJFRUQ2NjJGQzEzQjA5Cis6MTBBRDQwMDA2Q0U5RTcwQUNERTRCQTZCMDUzODhDNUU3RjQyNUQ1RDQ1Cis6MTBBRDUwMDA5RjVGNUQ1REQyQkUyRkVBRTkzNzA4M0U4NkU3MjM4MjFBCis6MTBBRDYwMDAwRkQ3ODM0NkYyODRGQzc3OThENkIzRUY5NzU0M0NCNzVECis6MTBBRDcwMDBBMzg4RUIyRTk3NThERjNFRDU2MjdFOTVFMEJEQjgyOUJCCis6MTBBRDgwMDBGODM1M0FGN0ZCM0IzQjgwRTFDREYzQkU0NjZENjEzOEM5Cis6MTBBRDkwMDAxMDQ0M0FGNTY3MDhCRkY5QzkzQUEzMzM5ODkwRkY3OTkwCis6MTBBREEwMDBEM0EyRDc5QjE2NUQ5NzIzM0I4RDhCN0I2RjZDQzdBRjcwCis6MTBBREIwMDA4MjZBMzdEMTJCMTU3RTVGMEY4QzUxMUQ2OEI2RjVENTkxCis6MTBBREMwMDA3REY3QjkyOTRGREM1QkIwREU0REY3RDFBMjlFRjVEOUY2Cis6MTBBREQwMDBENEVGMkYzMDAzQjQ3RTVGNEZFM0IzMUY5NjEyMUYwOUU5Cis6MTBBREUwMDBCRThGMkMxMUY5ODgxOEVBRTc0ODQyOUVGNEM1NzY5OTdGCis6MTBBREYwMDBGNzU1NUYwMDcxQ0FBN0JCM0NDMjJGNzI2MUJDQThBRkY4Cis6MTBBRTAwMDAyMEJGQjk5QUVEMzkzRTFGQTNENEMxNkI5NjNDQzlBNkE5Cis6MTBBRTEwMDAwMTI2REQxNzJDMDA4OUYwODUzQTcyN0EzRTk5QkNGQTNBCis6MTBBRTIwMDA4MjMwRDBCRTY2ODMyMzM3RTA3QzhBNDcwQjM0RjY0M0ZBCis6MTBBRTMwMDA3RUREQUUzMTNFN0RBNjYzMjY4RTg3RjlFM0VCRDAxQzI2Cis6MTBBRTQwMDBGOENBOTkwMzVGRDM3QzZEQzk1RDJBOUVDRTEwOUU4ODk3Cis6MTBBRTUwMDA0RjdDMEZGMEI5RTA0RkY1MkM2NzJFNTQ3ODU0Q0ZGRjlDCis6MTBBRTYwMDBDOEM2OEJDNzg0OTA5N0MzN0Y4OUYwMTNBNTBCMzZFNUJFCis6MTBBRTcwMDAzM0Y4NDU1RjkxRjEyQjZCNjE5RUU3MkEzMDIwQjQ4MjU1Cis6MTBBRTgwMDBGMEExNDk4NDhGRDRGMzU3M0NGNzc4MDNFMUVEOTU2RDM5Cis6MTBBRTkwMDA0MkFGRDYyQTk2RkUwOEUzNTk5MDNGNkZCMkQ2MDVDQjUzCis6MTBBRUEwMDAyRTM1NjUwOEJCRDMwQzNGRjQ4OEJDQjZFMEQzMEE3NERBCis6MTBBRUIwMDBDN0REMzlFN0VCNTdCQjdENzI5NjdCRDc0RjZFQ0UxMDVGCis6MTBBRUMwMDBGRTkwM0VDNkZBQkRCNzUxQzBGNzdBODUxRjdBNzQ2MDBFCis6MTBBRUQwMDAxNUZCMEYzN0U2OTcyRTQ4RDQ4Rjk3QkI0RTk4NUExNzFECis6MTBBRUUwMDA5Q0FCMEUzOEMzMzdBNjlCRjZGOTNCRURCRTA4NUQ5NUNCCis6MTBBRUYwMDA5QjhEM0YxRTI0RkU3MTkyRENCOEI5M0RFRjdENjEzMDIxCis6MTBBRjAwMDA2MDkwNUMyRDMxMjM4MDc0REJFQjBCMDc4ODdGRkE4RTE5Cis6MTBBRjEwMDBFRjdDODdFQTI0Q0FFQkIyNDFGRUE2QTIwNDgxQzZERDFCCis6MTBBRjIwMDA5ODE3NjZGOUQ4NTg2MDAyRDU5NTFFRUMzMUJGOUIwODdBCis6MTBBRjMwMDBGNzk2OTY1MEY5NjZBNDVCQTYzNjY2MTIxQzBGQzQyM0RBCis6MTBBRjQwMDA2NDhGNkVDQTM1QzNDMTM0NzRBOERFMkNGNEM3QjE5NkMxCis6MTBBRjUwMDBFMDJBOUE1NzRCQkE3MzE1QzBDMzlCQ0NENUQ0OUZBRjg4Cis6MTBBRjYwMDBCRTNBNUY5RTFBRERBNEY3MkY1RDlFNUFEQzc0QkVGRUNBCis6MTBBRjcwMDA4MjIwREZEM0VBRkZBMTRDMUVENkY0Qjg3RTRCOUVGQUE2Cis6MTBBRjgwMDA5NzNDMDBBMTA0QjkwQTZFNEVEMTNCN0U0QkVGRjg0REMxCis6MTBBRjkwMDA5NjhCQ0Q5Qjc1MkIwRjFDNjRGOTcwOTIzQzk1MjdFODFFCis6MTBBRkEwMDAxOUJGQUQ2NzRDOTY0N0M1NkZDQjkzMjU3RjI0NEYxRUM1Cis6MTBBRkIwMDBCQTFGM0M1OTRGN0U0QTFGODg3QjhDQTlGMjE1NkUwOTM3Cis6MTBBRkMwMDA2REQ5NEM3NjJDRUZCN0FENDVGQUNDRkQ0RjVEMTdGMjNECis6MTBBRkQwMDBENDVGNjBGMUZCOTJBNzk5RkZDRjIyRkZEMzY1RTE1RUJBCis6MTBBRkUwMDA0RjcxMTJCRkRCRUREQTI5MTlFMjQ4OEE3NTUzMTJCN0E3Cis6MTBBRkYwMDA5Rjk4Q0FFNEI2NzYyQTgzNUI3MzJBOTdEQkJBMjkxRjI3Cis6MTBCMDAwMDBCN0VCQTdBRUUwQjY3RTJBOUZEQjg2MjlFNEZCRDVDODY2Cis6MTBCMDEwMDBGRjUzNDVEQ0RFMzhCNTlDREI4RDUzQ0JCODZEOUM1QUI1Cis6MTBCMDIwMDBDREUzOUFBNjU2NzI3QkQzRDQwRERDREUzQzU1MjNENkY1Cis6MTBCMDMwMDBBMTlBNTA0RTVBRkVBNzcyRDY2NUUwN0YyMzQyRjVEMTAxCis6MTBCMDQwMDBCRUUzRjdCQzQzRjg3MTZBMkFFNzUxQTJCRTM1NUNFRjU0Cis6MTBCMDUwMDA3MTJBNjFFNkZGQTMwNTQyQkY2RkY0MDhGQUE0RjJGRjZDCis6MTBCMDYwMDBCMTk2RDBGRTc0RkMwRjRFNzE2RjRCQTE3QjVCOTVFQ0RCCis6MTBCMDcwMDBFNzBDMzM3RjlGRTdFRkJFRjQ0N0NBODNBMkZGNzE5OEM2Cis6MTBCMDgwMDBERjVGQTJGRDlGRjYyQjE3MjZGQjk1RkQ3OUM5N0U2NTM0Cis6MTBCMDkwMDBERjEyREJBRjc0OEQ1MjFENkNCQkE0RjMzREIxNTMyRDk5Cis6MTBCMEEwMDBBMTdGRTZGNTIxQjg4RERFODdEQURDMUFGOTUzNTFERjhFCis6MTBCMEIwMDA4RDAxMEZGNkI3RUU5NTgxRjI3REU4NUY3QzhCRjgwQzgxCis6MTBCMEMwMDA1MDNGOTBERDk4QUZCQzNFQkNDOUQyRUZENkY4MEEzOEVECis6MTBCMEQwMDBFRDA4NUY4NDdGRjIzRTdEQUQzOTVGRUU2NzlCNjdDQjA1Cis6MTBCMEUwMDBGRDU1NTA5NjkxQ0VDRUU2MzhFQjg1REM2QjQyRUVBMzUzCis6MTBCMEYwMDAwNUMxMDFDQUI3NDQ1M0U0REVCNkEzODg4NzI0QjkzRjJCCis6MTBCMTAwMDA2NUNCQkQyNUM3Mzk3RTcxRUYyMzg3RTQxRUY5RUEyNzk5Cis6MTBCMTEwMDA5QkM1NzlEMURGNEVCMkEzOEEzNURFRDkyOEVBNUJGNTJCCis6MTBCMTIwMDA3RUExNTc5NTQ2QTEyRjE0MkREOThFMjJERkJDNEI3NERBCis6MTBCMTMwMDA0OTk1Rjc4ODIyRkNFM0E2RDI3RjlEQjY2NzY0NTc3M0QyCis6MTBCMTQwMDBGQzNFMjkxQjk3RDY3RTNGMTFBMTNDRDY3MTY1MjlDQkM5Cis6MTBCMTUwMDA3N0FBMUM0NUI1NTVDQ0U3Qzc5NTdBNDgyN0ZGRjM5NkUzCis6MTBCMTYwMDAyMzlGNkQ0NzRDQjYyM0E5RTM2Qzc5RUEzQkRFQzQ3ODk0Cis6MTBCMTcwMDBCMUVEQ0E3MTNDQjc5OTYwNEYzNjZBMDIwRjY4NEYzRTE1Cis6MTBCMTgwMDAyNkZFNEE5NUE3REE0MjMzMTQ0Q0IzNEZCNTQzRjhBNUNGCis6MTBCMTkwMDBBRkFEMEIwQTdGMTFGRDQ0RjI1M0EyQ0VGNDdFODBEQUVDCis6MTBCMUEwMDAyMUZDOUY5QzQ2RUJGNzE1M0E4NDczNTEwRjM2MzZDNjQ3Cis6MTBCMUIwMDBFQkE5ODY4MUYyQUM3NjIwQkM3NUU2NDQyRkM5NjBBRjVFCis6MTBCMUMwMDA2N0Q4NEZGQjQ3Rjk3NDc1RkMxNUYyRjlEMTI2RTExN0UyCis6MTBCMUQwMDA0Mjc3MkVGQjJENzYzQjE3REZEQkZFOEVDREZGQTlFM0ZBCis6MTBCMUUwMDA5RTJDMzIzQkQzRTFFNUYzMTY1RThFMEUzQzlEQzQxRkQwCis6MTBCMUYwMDA0M0NBRDI5QjBDM0RBRDVFMzU4RENCQTI1N0U3RTc1N0Q2Cis6MTBCMjAwMDAxQzQ3M0JDNzdBNzU3NkJGRTJCQThFMzQ3QzMwOUI1RkIxCis6MTBCMjEwMDBGMTg5MEU5MUNGNDVCRjYyMURDREFCMkQxNzdFQzVFN0RECis6MTBCMjIwMDAzQkUwRjJGQTBCMzVGNzMxQkUyRUQ1NUZEODZDRjFERjdCCis6MTBCMjMwMDA2Q0ZFNDI1Nzg3QUQzN0MyQUMzNzVDOTZERUI4NTg3RjlDCis6MTBCMjQwMDAyMThEN0Y3MDNCRjMyRjRDQ0E1NEZGNDM1NDFCMjIxRkE4Cis6MTBCMjUwMDAyMkY0MDhFQTk5QkJFODNEQzZGMUVDMkYxQ0Y1MDg3RTA0Cis6MTBCMjYwMDAzMTJEM0Q3MzZEN0I3MDA3RTE3NUE4NUFGODBCOTc0QjM0Cis6MTBCMjcwMDAwRUQwRUZCQkFGMjM2RkZFRjIzMERGNzFBNThGQUQxRDk3Cis6MTBCMjgwMDA5ODIwM0YwN0JDMzFCQTM3REQ0QkY3OTUyODdFN0NDRjNECis6MTBCMjkwMDAyQkVFMTEwMDk0NTFERUZGOEJGMjM1MDZEOUI5OTFDQzFCCis6MTBCMkEwMDAyRjdEODNDNjc3NDcxNEEwN0I4MzQzM0QyMkZGRjdDNURDCis6MTBCMkIwMDAwNTU5NDcwMTc5NjdDODE5N0U2QUMyQ0ZCRjc3MEQxRTRECis6MTBCMkMwMDBDNUY2MEYxOTg1QTM5MDcwRUZGNkIwMjU2RjJFRDhDMjgyCis6MTBCMkQwMDBGNzc0QjNCNDVCOUVGRDMwMzdEREZFQzRGRDVDQkFCQUQzCis6MTBCMkUwMDA3MjhFN0ZENzUxQTBGMTNEMzIwQjNGNTk2QTEwMjI3RUZBCis6MTBCMkYwMDA5MjIzMDdENzQ3RDBEQjgzRUE4NEJDNDc1RjRENTcyN0FCCis6MTBCMzAwMDBDN0MxRjkyMkVGMjU4MzcyODZGMkVGMDNCNDk2MzgxNzhFCis6MTBCMzEwMDA5RkIzN0ZCMUZCNTEzQTk3MEUyMTg2NzdEMEVGRTBCQzA3Cis6MTBCMzIwMDA3QkZGNUExMUVGRjQ3QkMyNkUyRDhEREVEOEQ3OTM3QzU0Cis6MTBCMzMwMDBGRjI4QjU5NTk3M0QxNkEzM0JDMjg3MDM4QTQxNjlDRjg1Cis6MTBCMzQwMDBDMUIyQ0EyNkNBNEY0NjM1QUUwMDgzRUE3MzA0RDNENUNDCis6MTBCMzUwMDBBN0M3MkRGOUQ0QzE2MDdCQUM3Q0IyMjUzQjlEQkRCMEE1Cis6MTBCMzYwMDBEQjAxMEJGRjc2REY1RDMyNjYxMkRGQTk0NTY2OTA3RjU5Cis6MTBCMzcwMDA4N0UzRjM0QjkxODRCQ0YxMTMxNkZDQkQ5MjExQUY0NUVBCis6MTBCMzgwMDA2NEVERjUwQUZERUZENjYzMjZGRERFQjgyRkVGMkVBRTk1Cis6MTBCMzkwMDAzM0JBRjUwODlDQTFFNzI1MzFGODM5RTlBNzdDNzdFN0FFCis6MTBCM0EwMDA2ODlBN0RCQ0Q1MjFFMjk0QkRDRTEwQUZCNzM3NUZFMTdFCis6MTBCM0IwMDBGQUUzREVBMkY0RjlBQ0U3M0I0NDFFNDlGNUFEMEY3MkE3Cis6MTBCM0MwMDA1RURGQTc3MDlEMzg3NURDNTMxNjlGRjRBQjY2NDBFM0QzCis6MTBCM0QwMDBCOEZBODEzMjNBNTc3NDA5NzA4RTcyRUM5RDM3OUZEODUzCis6MTBCM0UwMDA4REZERkQzRDQxQ0U3QjBDNTFGRTAzODVCNUJGRjA1RTZBCis6MTBCM0YwMDBDNkZCRkU2QjFDMUE5RDYzODNGQzExREY0NzM4NUMwRDk2Cis6MTBCNDAwMDAwNkU5OEZFQzZBMUM5NzEwNDcxRTg2RDEwMUJBMEY3N0E4Cis6MTBCNDEwMDA3ODJENzBCRUQ0NkIwNDkzREVGNzIzMDM4RTkzRkZBNUMzCis6MTBCNDIwMDA0Q0IwM0U3MzQyMzdENzAxMEVGODU1QkVBNzMzNTQ3OTVFCis6MTBCNDMwMDA5QUZEMjMxREM2Mzk0RjMxNTQyOUU4NjVENzkzRkMxNjcwCis6MTBCNDQwMDAzRkZBRkQ3NzM1MjdDQUMxMDE4QjZFMEY1MkRFOUNFRkE0Cis6MTBCNDUwMDAzMThENDFBMkZGNzVBMDcwOUNFREYzODE3NUUzOUQ1NDgxCis6MTBCNDYwMDAxN0NDRjJCQjBEMEE0NUY2RDcwNDgxRTQ3NEE4Q0E5MTQzCis6MTBCNDcwMDBGNjdFRDQ1MEQ1NjlERTY3RUE3RTlDMjc3RUM5RkEyRjE2Cis6MTBCNDgwMDA0Qjk5RTBGQzQ0NTZEOTZGRDlBRTNDNjRFRDYzRTM1QTY2Cis6MTBCNDkwMDBFMENENjY1NzBCM0Q5QkREMTYwNkZBN0Q1OERFNUJGMjZDCis6MTBCNEEwMDBBODhFRkRERDg1QkY4QTM4NDkzRTZFMDM1OEE0RDM3RTQxCis6MTBCNEIwMDAyNzc4QkY4NzlCOUY4RUYzRkVBQ0ZCQkEyMDNGQ0ZGNzY4Cis6MTBCNEMwMDA3MTIxMjhFNEQ3QkU3N0JEQjA0RDREOEFERkIzNTJFRTZGCis6MTBCNEQwMDA0NTY1QTZGNDQxRUVCQUUwN0RCMkVFRjdFRTM5NzUzMjdECis6MTBCNEUwMDAwMURFQTJDRUU0RkJEOTczQ0RGRjQzQ0Y4RTUzMjc5MTZCCis6MTBCNEYwMDA1RjBFNTc1RTU4QkUwRTU5NzU4RDU4NEYzNUQzQzlFNjRECis6MTBCNTAwMDAzMzlCRUZCMkU4ODgzOUIzQ0YxRkYyOEQ3NUE2QjNDMzcyCis6MTBCNTEwMDAxRDlENDIwRTUyRjkzMTk1RkYzNEQ3MThEQkYxNDNFQkY0Cis6MTBCNTIwMDA5MkUxRENEMDI5RTRGODA2MEI0RTRFQTE5RTRGRUZFREUwCis6MTBCNTMwMDA3QjRDNzQ3RkVBRTkzNEVCN0VCQTUzRTVGMTMzN0M2REUyCis6MTBCNTQwMDBEQkY5NzcyRUNEQ0UyRjZCMTE3NkRFQkYyQTgzRUMzQzU0Cis6MTBCNTUwMDBFMkYzNjVCQUM3RjY3Qjk0MEY0ODkwRUIzRTZGQjI5RjVCCis6MTBCNTYwMDA2OURCRjlDNzNCNDU3Q0YwNjJERTU1MTJEOUU5MUNDRjk3Cis6MTBCNTcwMDAwNEZCQkY1OUQ1Qzk3OTgwNTQzQkFEM0E0MzFDMzdBQTY3Cis6MTBCNTgwMDBGOUFBQUQ2RkI4OUVGNTVBQzdGQjRGNDQxMENFRkVGODJFCis6MTBCNTkwMDAzRUFFMEY2NTIyRkY2NjQ4NENBNzQ4M0EzQTQxNzlGMjIxCis6MTBCNUEwMDBCRDlBRjI0RTEwQkY2M0QzODU1RUM4NUFBQjcwQkQ2M0JGCis6MTBCNUIwMDBDOEYxNUVGNTg3RDgyQUIxMzAwNDJEQjg4M0NDQjdGQjJCCis6MTBCNUMwMDBDN0Y5N0U4RUM1Rjc3M0QxOTMzRTdGNUE2M0ZEMkU4NUYyCis6MTBCNUQwMDBFQTg4RjU2RjU2QTc4QjJCRUM5NkVFNEYyNURGNzdCRkU5Cis6MTBCNUUwMDAzOEI5RjhGQjRFQUJCRTlDMDExOTQyMkU5QTFEN0Q2NDAyCis6MTBCNUYwMDBFRjlCMUQ3QzJGODVBRUVGMkE2QkFDRDIwMUQ1RjU2OTkwCis6MTBCNjAwMDA2N0Y4REU0RkY3N0YyNEFCNUVCNDc0NDY1RUUwNTY3MTk4Cis6MTBCNjEwMDBBRkU1RUMwRTcxNEY4NjdGNDdCODk0N0VGNzM5QzFCRjE2Cis6MTBCNjIwMDAwRkJDOTI2RUIxQ0FFQzA3QjNEQzlDODUwMjA3RDU4M0QwCis6MTBCNjMwMDAyMzI3MjQ2OURBMEZCQTgyQUUzNDFBMEU5QTU3MDI0MUQwCis6MTBCNjQwMDA2RTUzRjc3RDE1ODRGOTc5MTlDNEI4QkQwNkM2QjgyREI3Cis6MTBCNjUwMDA4NzcxNkUyQjYwOTI1QjkzMjZFMDdFOEQ5M0EyQUVCMUQ0Cis6MTBCNjYwMDAwQTBDOTk5RTU3NDI5MERCMzUxMEU2QjYxQTYyREM3RUQyCis6MTBCNjcwMDBBNUZFNkY3RjczM0I0RUY5REE3OTc4MTE3ODREMjNERkExCis6MTBCNjgwMDA3MTA0M0E3RDdFMUJDRkFEOUQzQUYzQzk1Q0Y0RUVGM0I1Cis6MTBCNjkwMDA0REIwMUY1RjVGM0RDRTdFQThENzEzNjRGRTc2RkEwNURFCis6MTBCNkEwMDA3RkRCNzA5Q0IzRTQ4MzZEM0Y0OTI1M0Y2OTc1MUFGRUNCCis6MTBCNkIwMDA5REMzNEY0QUZEMURDOUZGMDIyOUY3RDBCM0QwNDUwMEY1Cis6MTBCNkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgwMDAwMDAwMDYyCis6MTBCNkQwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDJBCis6MTBCNkUwMDAwMDAwMDAyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDIyCis6MTBCNkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDJBCis6MTBCNzAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDI5Cis6MTBCNzEwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCis6MTBCNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkwMDAwMDAwMEUwCis6MTBCNzMwMDAwMDAwMDAwMDAwMDAwMDM4MDAwMDAwMDAwMDAwMDAwMEQxCis6MTBCNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYxCis6MTBCNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTBCNzYwMDAwMDAwMDAwMDAwMDAwMDBDMDAwMDAwMDAwMDAwMDAwMENECis6MTBCNzcwMDAwMDAwMDAwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEI3Cis6MTBCNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgwMDAwMDAwMEExCis6MTBCNzkwMDAwMDAwMDAwMDAwMDAwMDFDMDAwMDAwMDAwMDAwMDAwMDhECis6MTBCN0EwMDAwMDAwMDAxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMzZBCis6MTBCN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0EwMDAwMDAwMDRGCis6MTBCN0MwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDc4Cis6MTBCN0QwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTY2Cis6MTBCN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDQ5Cis6MTBCN0YwMDAwMDAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTBCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzM1Cis6MTBCODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUIwMDAwMDAwMDdECis6MTBCODIwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDEwCis6MTBCODMwMDAwMDAwQzAwMDAwMTAwMDAwMDAwMDAwMDgwMDAwQzAwODY4Cis6MTBCODQwMDAwMDEwMDAwMDAwMDAwMDAyMDAwMEMwMDAwMDEwMDAwMDE2Cis6MTBCODUwMDAwMDAwMDAxMDAwMDA5RkIwMDAwMDAwMDAwMDAwMDAwODgxCis6MTBCODYwMDAwMDAwQzA4MDAwMTAwMDAwMDAwMDAwMDQwMDAwQzA4ODNDCis6MTBCODcwMDAwMDEwMDAwMDAwMDAwMDAyMDAwMEMwODAwMDEwMDAwMDY2Cis6MTBCODgwMDAwMDAwMDAxMDAwMDA5MTIwMDAwMDAwMDAwMDAwMDAwOEVGCis6MTBCODkwMDAwMDAwOTM0MDAwMDEwMDA0MDAwMDAwMDEwMDAwOTM0OEY0Cis6MTBCOEEwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDkzNTAwMDAwMDAwMEIzCis6MTBCOEIwMDAwMDAwMDAwODAwMDA5MzU0MDAwMDAwMDAwMDAwMDAwMjk3Cis6MTBCOEMwMDAwMDAwOTQxODAwMDAwMDAwMDAwMDAwMDgwMDAwOTM1OEQ5Cis6MTBCOEQwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDlBQjAwMDQwMDAwMENFCis6MTBCOEUwMDAwMDAwMDA0MDAwMDA5Mzk4MDAwODAwMDAwMDAwMDAwOERECis6MTBCOEYwMDAwMDAwOTNEODAwMDgwMDAwMDAwMDAwMDgwMDAwOTQyMDE5Cis6MTBCOTAwMDAwMEM4MDAwMDAwMDAwMDk4MDAwMDk1QjAwMDk4MDAwMEZBCis6MTBCOTEwMDAwMDAwMDAyODAwMDA5NUYwMDA5ODAwMDAwMDAwMDAyOEJBCis6MTBCOTIwMDAwMDAwQzQ4MDA1NDAwMDMwMDAwMDA1NDAwMDAwOUQyMDVDCis6MTBCOTMwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDlEMjEwMDA4MDAwMDM4Cis6MTBCOTQwMDAwMDAwMDAwMTAwMDAyMDA4MDAxMDAwMDAwMDAwMDAxMEFFCis6MTBCOTUwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwOUNEODRCCis6MTBCOTYwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDlEMTgwMDAwMDAwMDE4Cis6MTBCOTcwMDAwMDAwMDAwMTAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTBCOTgwMDAwMDAwMDAwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkFDCis6MTBCOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGMjAwMDAwMDAwMEI4Cis6MTBCOUEwMDAwMDAwMDAyMDAwMDBDRjQ2MDAwMDAwMDAwMDAwMDAwMTYxCis6MTBCOUIwMDAwMDAwNjAwMDAwMjAwMDAwMDAwMDAwMjAwMDAwNzMwMDc0Cis6MTBCOUMwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDlGQTAwMDAwMDAwMDI4Cis6MTBCOUQwMDAwMDAwMDAwMTAwMDA5RkE4MDAwMDAwMDAwMDAwMDAwMTFFCis6MTBCOUUwMDAwMDAwOUY2MDAwMDAwMDAwMDAwMDAwMTAwMDAwOUY2MzQ2Cis6MTBCOUYwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDlGNjEwMDAwMDAwMDQ2Cis6MTBCQTAwMDAwMDAwMDAwMTAwMDA5RjY2MDAwMDAwMDAwMDAwMDAwMTJGCis6MTBCQTEwMDAwMDAwOUY2NzAwMDAwMDAwMDAwMDAwMDAwMDAwOUY2ODE5Cis6MTBCQTIwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDlGNkMwMDAwMDAwMDA3Cis6MTBCQTMwMDAwMDAwMDAwNDAwMDAwMDUyMDAwMDAwMDAwMDAwMDAwMEIwCis6MTBCQTQwMDAwMDAwMDAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YwCis6MTBCQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwMDAwMDAwMEUxCis6MTBCQTYwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMEQ0Cis6MTBCQTcwMDAwMDA2MDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwOUY3MDkxCis6MTBCQTgwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDlGOTAwMDAwMDAwMDg2Cis6MTBCQTkwMDAwMDAwMDAwODAwMDAwMDUzMDAwMDAwMDAwMDAwMDAwMDRCCis6MTBCQUEwMDAwMDAwOUY5ODAwMDAwMDAwMDAwMDAwMDIwMDAwOUY5QzIyCis6MTBCQUIwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDlGOUQwMDAwMDAwMDQ5Cis6MTBCQUMwMDAwMDAwMDAwMTAwMDAwMDA5MDAwMDAwMDAwMDAwMDAwMDZDCis6MTBCQUQwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NDIxCis6MTBCQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDU1Cis6MTBCQUYwMDAwMDAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAwMDAwMEY2Cis6MTBCQjAwMDAwMDAwMDA4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMTJDOEQyCis6MTBCQjEwMDAwMDgwMDAwMDAwMDAwMDgwMDAwMDAwMDEwMDAwMDAwMDI0Cis6MTBCQjIwMDAwMDAwMDAwMDAwMDBBMDAwMDcxMDAwMDAwMDAwMDcxMDQ3Cis6MTBCQjMwMDAwMDAwMUFDODAwMDAwMDAwMDAwMDAwMDgwMDAwQUVDMEFECis6MTBCQjQwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMEFFNDAwMDA4MDAwMEVGCis6MTBCQjUwMDAwMDAwMDAwODAwMDBBRTgwMDAwODAwMDAwMDAwMDAwODlGCis6MTBCQjYwMDAwMDAwMjAwODAwMTAwMDAwMDAwMDAwMTAwMDAwMjAwMDZECis6MTBCQjcwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMEEwMTAwNzEwMDA0MEI2Cis6MTBCQjgwMDAwMDAwMDA0MDAwMDAxQkY4MDAwODAwMDAwMDAwMDAwMTU5Cis6MTBCQjkwMDAwMDAwMUJGOTAwMDgwMDAwMDAwMDAwMDEwMDAwMUFEMDlFCis6MTBCQkEwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDFBRDgwMDAwMDAwMEEyCis6MTBCQkIwMDAwMDAwMDAwMjAwMDAxQURBMDAwMDAwMDAwMDAwMDAwMjhECis6MTBCQkMwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYwMDQ2Cis6MTBCQkQwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDFCNzgwMDI4MDAwMDhBCis6MTBCQkUwMDAwMDAwMDAwNDAwMDBFMDAwMDAyMDAwMDAwMDAwMDAyMDMxCis6MTBCQkYwMDAwMDAwRjMwMDAwMDgwMDAwMDAwMDAwMDgwMDAwMUFGMDM4Cis6MTBCQzAwMDAwMDAwMDAwMDAwMDAwMTA4MDAwMDFCMzcwMDAwMDAwMEQ5Cis6MTBCQzEwMDAwMDAwMDAwMTAwMDAxQjBGMDAwMDAwMDAwMDAwMDAwMUY4Cis6MTBCQzIwMDAwMDAwMUI3MDAwMDAwMDAwMDAwMDAwMDQwMDAwMUI3NEY2Cis6MTBCQzMwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwNTAwMDAwMDAwMEIwCis6MTBCQzQwMDAwMDAwMDAwMDAwMDAwMDAzMDAwMDAwMDAwMDAwMDAwMEYxCis6MTBCQzUwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQ5Cis6MTBCQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwMDAwMDAwMENECis6MTBCQzcwMDAwMDAwMDAwMDAwMDAxQkM4MDAwMDAwMDAwMDAwMDAwMUUwCis6MTBCQzgwMDAwMDAwMUJFODAwMDAwMDAwMDAwMDAwMDgwMDAwMDA1MTU4Cis6MTBCQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCRDAwMDAwMDAwMEI5Cis6MTBCQ0EwMDAwMDAwMDAwNDAwMDAxQkQ0MDAwMDAwMDAwMDAwMDAwNDlECis6MTBCQ0IwMDAwMDAwMUJEODAwMDAwMDAwMDAwMDAwMDQwMDAwMUJEQzk2Cis6MTBCQ0MwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMEIwMDAwMDE4MDAwMEE0Cis6MTBCQ0QwMDAwMDAwMDAxODAwMDBDMDAwMDA0MDAwMDAwMDAwMDA0MDBDCis6MTBCQ0UwMDAwMDAwQzAwMDAwNDAwMDAyMDAwMDAwMDEwMDAwQzAwMTkwCis6MTBCQ0YwMDAwMDQwMDAwMjAwMDAwMDAwMDAwMEUyMDAwMDIwMDAwMDAwCis6MTBCRDAwMDAwMDAwMDAyMDAwMDBFMjA0MDAwMjAwMDgwMDIwMDAwMjAxCis6MTBCRDEwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIwMEMxCis6MTBCRDIwMDAwMDA4MDAyMDAwMDAwMDA0MDAwMEY0MDAwMDI4MDAwMENCCis6MTBCRDMwMDAwMDAwMDAyODAwMDBGNTQwMDAxMDAwMDAwMDAwMDAxMDg2Cis6MTBCRDQwMDAwMDAwRjVDMDAwMjAwMDAwMDAwMDAwMjAwMDAwRjVDMDQ5Cis6MTBCRDUwMDAwMDAyMDAyMDAwMDAwMDAyMDAwMEYzMDAwMDIwMDAwMEFDCis6MTBCRDYwMDAwMDAwMDAyMDAwMDAyMDA4MDAxMDAwMDAwMDAwMDAxMDZCCis6MTBCRDcwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMTEwODgyCis6MTBCRDgwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDExNjgwMDA4MDAwMDIyCis6MTBCRDkwMDAwMDAwMDAwODAwMDAxMUE4MDAwODAwMDAwMDAwMDAwOEQyCis6MTBCREEwMDAwMDAwMTI0MDAwMDgwMDAwMDAwMDAwMDEwMDAwMTI0MUU1Cis6MTBCREIwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDQwMDAwMDIwMDAwNDE2Cis6MTBCREMwMDAwMDAwMDAxMDAwMDA1OTAwMDAzMDAwMTgwMDAwMDAxMEIyCis6MTBCREQwMDAwMDAwNTkwODAwMzAwMDE4MDAwMDAwMDIwMDAwNTcwMDYxCis6MTBCREUwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDU3MDEwMDA4MDAwMEVBCis6MTBCREYwMDAwMDAwMDAwMTAwMDAxMUU4MDAwMDAwMDAwMDAwMDAwMTQ4Cis6MTBCRTAwMDAwMDAwMTFGMDAwMDAwMDAwMDAwMDAwMDEwMDAwMTFGODI3Cis6MTBCRTEwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDEyNDQwMDA4MDAwMEI0Cis6MTBCRTIwMDAwMDAwMDAwNDAwMDA0MDAwMDAyMDAwMDAwMDAwMDAyMDhFCis6MTBCRTMwMDAwMDAwNTMwMDAwMTAwMDAwMDAwMDAwMTAwMDAwMTUzODQyCis6MTBCRTQwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDMwMDAwMDAwMEVFCis6MTBCRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTBCRTYwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNENECis6MTBCRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1MDgwMDAwMDAwMEE1Cis6MTBCRTgwMDAwMDAwMDAwMTAwMDAxNTI4MDAwMDAwMDAwMDAwMDAwODZDCis6MTBCRTkwMDAwMDAwMDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwODMwOEM3Cis6MTBCRUEwMDAwMDgwMDAwMDAwMDAwMDgwMDAwMDAwMDEwMDAwMDAwMDkxCis6MTBCRUIwMDAwMDAwMDAwMDAwMDAyMDA4MDAxMDAwMDAwMDAwMDAxMDNBCis6MTBCRUMwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwODQxMEI2Cis6MTBCRUQwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDg0NzAwMDA4MDAwMDU2Cis6MTBCRUUwMDAwMDAwMDAwODAwMDYwMDAwMDQ2MDAwMjgwMDAwMDQ2MDU0Cis6MTBCRUYwMDAwMDAwODUyMDAwMDgwMDAwMDAwMDAwMDEwMDAwODUyMUVFCis6MTBCRjAwMDAwMDA4MDAwMDAwMDAwMDAxODAwMDAwMDAwMDAwMDAwMEE4Cis6MTBCRjEwMDAwMDAwMDAwMDAwMDA4NDA4MDAwMDAwMDAwMDAwMDAwMTk0Cis6MTBCRjIwMDAwMDAwODRGNDAwMDgwMDAwMDAwMDAwMDIwMDAwODRGNjE1Cis6MTBCRjMwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDg1MDQwMDEwMDAwMDVFCis6MTBCRjQwMDAwMDAwMDAwNDAwMDA4NzYwMDAwMDAwMDAwMDAwMDAyMEU2Cis6MTBCRjUwMDAwMDAwNjAwMDAwMjAwMDAwMDAwMDAwMjAwMDAwNzMwMENFCis6MTBCRjYwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDAwMDMwMDAwMDAwMEJFCis6MTBCRjcwMDAwMDAwMDAwMDAwMDAwMDA1MDAwMDAwMDAwMDAwMDAwMEJDCis6MTBCRjgwMDAwMDAwMDAwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0E0Cis6MTBCRjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4MDgwMDAwMDAwMDExCis6MTBCRkEwMDAwMDAwMDAwMTAwMDA4ODI4MDAwMDAwMDAwMDAwMDAwOEQ4Cis6MTBCRkIwMDAwMDAwMDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwODgxMDk5Cis6MTBCRkMwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDg4MTQwMDAwMDAwMEQxCis6MTBCRkQwMDAwMDAwMDAwNDAwMDA4ODE4MDAwMDAwMDAwMDAwMDAwNEI5Cis6MTBCRkUwMDAwMDAwODgxQzAwMDAwMDAwMDAwMDAwMDgwMDAwMzAwMDc1Cis6MTBCRkYwMDAwMDQwMDAwMDAwMDAwMDA4MDAwMDMwMDgwMDQwMDAwMDgxCis6MTBDMDAwMDAwMDAwMDAyODAwMDAzMzkwMDFDMDAwMTAwMDAwMDAwODZDCis6MTBDMDEwMDAwMDAwMzIwMDAwMjAwMDAwMDAwMDAwMjAwMDAwMzcyMDU3Cis6MTBDMDIwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDEwMjAwNjIwMDAzODdBCis6MTBDMDMwMDAwMDAwMDAwODAwMDBBMDAwMDAwMDAwMDAwMDAwMjAwMDM4Cis6MTBDMDQwMDAwMDAwM0VBOTAwMDAwMDAwMDAwMDAwMDEwMDAwM0VDODAyCis6MTBDMDUwMDAwMDAwMDAwMDAwMDAwMDAyODAwMDAwMDAwMDAwMDAwMDVFCis6MTBDMDYwMDAwMDAwMDAwMDAwMDA2MDAwMDAyMDAwMDAwMDAwMDAwODQ4Cis6MTBDMDcwMDAwMDAwNDAwMDAwMDgwMDAwMDAwMDAwMDEwMDAwNDAwMTM2Cis6MTBDMDgwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDQwNDAwMDA4MDAwNDFCCis6MTBDMDkwMDAwMDAwMDAwMjAwMDA0MDYwMDAwODAwMDQwMDAwMDAwNEVFCis6MTBDMEEwMDAwMDAwNDAwMDAwMDgwMDAwMDAwMDAwMDQwMDAwNDAwNDAwCis6MTBDMEIwMDAwMDA4MDAwMDAwMDAwMDA0MDAwMDQwNDAwMDAwMDAwMEY0Cis6MTBDMEMwMDAwMDAwMDAwODAwMDA0MDQ4MDAwMDAwMDAwMDAwMDAwOEQ4Cis6MTBDMEQwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwNTA0MDQwCis6MTBDMEUwMDAwMDAxMDAwNDAwMDAwMDAxMDAwMDUwMDAwMDAwMDAwMEZBCis6MTBDMEYwMDAwMDAwMDAyMDAwMDA1MDA4MDAxMDAwMDAwMDAwMDAwNEI0Cis6MTBDMTAwMDAwMDAwNTAwQzAwMTAwMDAwMDAwMDAwMDEwMDAwNTJDN0E5Cis6MTBDMTEwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDUyQzYwMDAwMDAwMDA2Cis6MTBDMTIwMDAwMDAwMDAwMTAwMDAzMDAwMDAzMDAwMTgwMDAwMDAwNDkyCis6MTBDMTMwMDAwMDAwMzAwNDAwMzAwMDE4MDAwMDAwMDQwMDAwMzAwODQ3Cis6MTBDMTQwMDAwMDMwMDAxODAwMDAwMDAyMDAwMDMwMEEwMDMwMDAxODIzCis6MTBDMTUwMDAwMDAwMDAwMjAwMDAzMDBDMDAzMDAwMTgwMDAwMDAwMTU4Cis6MTBDMTYwMDAwMDAwMzAwRDAwMzAwMDE4MDAwMDAwMDEwMDAwMzAwRTBCCis6MTBDMTcwMDAwMDMwMDAxODAwMDAwMDAxMDAwMDMwMTAwMDMwMDAxOEVFCis6MTBDMTgwMDAwMDAwMDAwNDAwMDAzMDE0MDAzMDAwMTgwMDAwMDAwNDFCCis6MTBDMTkwMDAwMDAwNTAwMDAxMDAwMDgwMDAwODAwMDQwMDAwNTAwNDZFCis6MTBDMUEwMDAwMTAwMDA4MDAwMDgwMDA0MDAwMDAwMEEwMDAwMDAwMEY4Cis6MTBDMUIwMDAwMDAwMDAwMDAwMDA1MDY4MDEwMDAwODAwMDAwMDAwMTQ1Cis6MTBDMUMwMDAwMDAwNTA2OTAxMDAwMDgwMDAwMDAwMDEwMDAwNTA2Qzc4Cis6MTBDMUQwMDAwMTAwMDA4MDAwMDAwMDAyMDAwMDUwNkUwMTAwMDA4MDlECis6MTBDMUUwMDAwMDAwMDAwMjAwMDA1MDcwMDEwMDAwODAwMDAwMDAwNDA4Cis6MTBDMUYwMDAwMDAwNTA3NDAxMDAwMDgwMDAwMDAwMDQwMDAwNTA2NjQwCis6MTBDMjAwMDAwMTAwMDA4MDAwMDAwMDAyMDAwMDUwNjQwMTAwMDA4MDc2Cis6MTBDMjEwMDAwMDAwMDAwMTAwMDA1MDYwMDEwMDAwODAwMDAwMDAwMkVBCis6MTBDMjIwMDAwMDAwNTA2MjAxMDAwMDgwMDAwMDAwMDIwMDAwNTA1MDM5Cis6MTBDMjMwMDAwMTAwMDA4MDAwMDAwMDA0MDAwMDUwNTQwMTAwMDA4MDU0Cis6MTBDMjQwMDAwMDAwMDAwNDAwMDA1MDU4MDEwMDAwODAwMDAwMDAwNEJECis6MTBDMjUwMDAwMDAwNTA1QzAxMDAwMDgwMDAwMDAwMDQwMDAwNTA3Q0UxCis6MTBDMjYwMDAwMTAwMDA4MDAwMDAwMDAxMDAwMDUwN0QwMTAwMDA4MEZFCis6MTBDMjcwMDAwMDAwMDAwMTAwMDA0MDE4MDAxMDAwMDAwMDAwMDAwNDUxCis6MTBDMjgwMDAwMDAwNDA5MDAwMTAwMDAwMDAwMDAwMDQwMDAwNDA5OEYyCis6MTBDMjkwMDAwMDEwMDAwMDAwMDAwMDA0MDAwMDQxMTAwMDAwMDAwMDM5Cis6MTBDMkEwMDAwMDAwMDAwMjAwMDA0MTEyMDAwMDAwMDAwMDAwMDAwMjM3Cis6MTBDMkIwMDAwMDAwNDExNDAwMDAwMDAwMDAwMDAwMDIwMDAwNDExNkQwCis6MTBDMkMwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDYwNDAwMDA4MDAwMEM0Cis6MTBDMkQwMDAwMDAwMDAwMjAwMDA2MDQyMDAwODAwMDAwMDAwMDAwMkIwCis6MTBDMkUwMDAwMDAwNjA0NDAwMDgwMDAwMDAwMDAwMDQwMDAwNjA4MEJFCis6MTBDMkYwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDYwQzAwMDQwMDAwOEM2Cis6MTBDMzAwMDAwMDAwMDAwODAwMDA2MDAwMDAwODAwMDAwMDAwMDAwMkJCCis6MTBDMzEwMDAwMDAwNjAwMjAwMDgwMDAwMDAwMDAwMDEwMDAwNjAwNDRFCis6MTBDMzIwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDYzNDAwMDA4MDAwMDU4Cis6MTBDMzMwMDAwMDAwMDAwODAwMDA2MzgwMDAwODAwMDAwMDAwMDAwNDA2Cis6MTBDMzQwMDAwMDAwNjM4NDAwMDgwMDAwMDAwMDAwMDEwMDAwNjNDMERBCis6MTBDMzUwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDYzQzQwMDA4MDAwMEE0Cis6MTBDMzYwMDAwMDAwMDAwMjAwMDA2NDAwMDAwODAwMDAwMDAwMDAwNDVCCis6MTBDMzcwMDAwMDAwNzAwMDAwMTAwMDAwMDAwMDAwMDQwMDAwNzAwNEM1Cis6MTBDMzgwMDAwMDEwMDAwMDAwMDAwMDA0MDAwMDcwMDgwMDEwMDAwMDExCis6MTBDMzkwMDAwMDAwMDAwNDAwMDA5MDAwMDAwODAwMDAwMDAwMDAwMkZGCis6MTBDM0EwMDAwMDAwOTAwMjAwMDgwMDAwMDAwMDAwMDEwMDAwOTAwNDVFCis6MTBDM0IwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDkwNDAwMDA4MDAwMDlCCis6MTBDM0MwMDAwMDAwMDAwMjAwMDA5MDQ0MDAwODAwMDAwMDAwMDAwMjhECis6MTBDM0QwMDAwMDAwOTA0NjAwMDgwMDAwMDAwMDAwMDIwMDAwOTY0ODlGCis6MTBDM0UwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDkwODAwMDA4MDAwMDI1Cis6MTBDM0YwMDAwMDAwMDAwMjAwMDA5MDg0MDAwODAwMDAwMDAwMDAwMjFECis6MTBDNDAwMDAwMDAwOTY4ODAwMDgwMDAwMDAwMDAwMDgwMDAwODA0MDNFCis6MTBDNDEwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDgwNDEwMDA4MDAwMDRBCis6MTBDNDIwMDAwMDAwMDAwMTAwMDA4MDQyMDAwODAwMDAwMDAwMDAwMTQwCis6MTBDNDMwMDAwMDAwODA0MzAwMDgwMDAwMDAwMDAwMDEwMDAwODAwMEIwCis6MTBDNDQwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDgwMDIwMDA4MDAwMDU4Cis6MTBDNDUwMDAwMDAwMDAwMTAwMDA4MDA0MDAwODAwMDAwMDAwMDAwMjRECis6MTBDNDYwMDAwMDAwODBDMDAwMDgwMDAwMDAwMDAwMDIwMDAwODBDMjQwCis6MTBDNDcwMDAwMDA4MDAwMDAwMDAwMDAyMDAwMDgwQzQwMDA4MDAwMDY2Cis6MTBDNDgwMDAwMDAwMDAwMjAwMDA4MDgwMDAwODAwMDAwMDAwMDAwMUExCis6MTBDNDkwMDAwMDAwODA4MTAwMDgwMDAwMDAwMDAwMDEwMDAwODA4MjkwCis6MTBDNEEwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDgwODMwMDA4MDAwMDc4Cis6MTBDNEIwMDAwMDAwMDAwMTAwMDA4MDg0MDAwODAwMDAwMDAwMDAwMTZFCis6MTBDNEMwMDAwMDAwODA4NTAwMDgwMDAwMDAwMDAwMDEwMDAwODA4NjU4Cis6MTBDNEQwMDAwMDA4MDAwMDAwMDAwMDAxMDAwMDYwMDAwMDA4MDAwMEVCCis6MTBDNEUwMDAwMDAwMDAwMjAwMDA2MDAyMDAwODAwMDAwMDAwMDAwMURGCis6MTBDNEYwMDAwMDAwNjAwNDAwMDgwMDAwMDAwMDAwMDIwMDAwNjA0MjJDCis6MTBDNTAwMDAwMEMwMDAxODAwMDAwMDAyMDAwMDYwNDAwMEMwMDAxOEQ5Cis6MTBDNTEwMDAwMDAwMDAwMjAwMDA2MDRDMDBDMDAwMTgwMDAwMDAwODhECis6MTBDNTIwMDAwMDAwNjA0NDAwQzAwMDE4MDAwMDAwMDgwMDAwNjA1N0QwCis6MTBDNTMwMDAwMEMwMDAxODAwMDAwMDAxMDAwMDYwNTQwMEMwMDAxODk2Cis6MTBDNTQwMDAwMDAwMDAwMjAwMDA2MDU2MDBDMDAwMTgwMDAwMDAwMTVBCis6MTBDNTUwMDAwMDAwNjY0MDAwMDgwMDAwMDAwMDAwMDgwMDAwNjY4MDNGCis6MTBDNTYwMDAwMDA4MDAwMDAwMDAwMDA4MDAwMDY2QzAwMDA4MDAwMDhECis6MTBDNTcwMDAwMDAwMDAwODAwMDBEQTQyMDAxODAwMDAwMDAwMDAwMjdECis6MTBDNTgwMDAwMDAwREU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAwMEFECis6MTBDNTkwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMEQwQzAwMDAwMDAwMDA3Cis6MTBDNUEwMDAwMDAwMDAwNDAwMDBEMEM0MDAwMDAwMDAwMDAwMDAwNEVGCis6MTBDNUIwMDAwMDAwRDBDODAwMDAwMDAwMDAwMDAwMDQwMDAwRDBDQzQzCis6MTBDNUMwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMEQwRDAwMDAwMDAwMEM3Cis6MTBDNUQwMDAwMDAwMDAwNDAwMDBEMEQ0MDAwMDAwMDAwMDAwMDAwNEFGCis6MTBDNUUwMDAwMDAwRDBEODAwMDAwMDAwMDAwMDAwMDQwMDAwRDBDMDBGCis6MTBDNUYwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMERCMDAwMDAwMDAwMDQwCis6MTBDNjAwMDAwMDAwMDAwNDAwMDBEQjAwMDAwMDAwMDAwMDAwMDA2OEUzCis6MTBDNjEwMDAwMDAwQjk0ODAwMDAwMDAwMDAwMDAwMDAwMDAwRDAwMDQ5Cis6MTBDNjIwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMEIwQzAwMDAwMDAwMDk2Cis6MTBDNjMwMDAwMDAwMDAwNDAwMDBCMEM0MDAwMDAwMDAwMDAwMDAwNDdFCis6MTBDNjQwMDAwMDAwQjBDODAwMDAwMDAwMDAwMDAwMDQwMDAwQjBDMEZFCis6MTBDNjUwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMEQ2QjAwMDAwMDAwMDQ0Cis6MTBDNjYwMDAwMDAwMDAwNDAwMDBENkI0MDAwMDAwMDAwMDAwMDAwNDM4Cis6MTBDNjcwMDAwMDAwRDZCODAwMDAwMDAwMDAwMDAwMDQwMDAwRDZCQzk2Cis6MTBDNjgwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMEQ2QjAwMDAwMDAwMDIwCis6MTBDNjkwMDAwMDAwMDAxMDAwMDBEMzQ4MDAwMDAwMDAwMDAwMDAwODY3Cis6MTBDNkEwMDAwMDAwRDM1ODAwMDAwMDAwMDAwMDAwODAwMDAwMDAxMENGCis6MTBDNkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzNTgwMDAwMDAwMDRGCis6MTBDNkMwMDAwMDAwMDAwODAwMDAwMDAwMDYwMjA5MDAwMDAwMDAwMDUxCis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZnMvYmxvY2tfZGV2LmMgYi9mcy9ibG9ja19kZXYuYwppbmRleCA1MTQ3YmRkLi4yNTdiMDBlIDEwMDY0NAotLS0gYS9mcy9ibG9ja19kZXYuYworKysgYi9mcy9ibG9ja19kZXYuYwpAQCAtMTEwMiw2ICsxMTAyLDcgQEAKIAkJCWlmICghYmRldi0+YmRfcGFydCkKIAkJCQlnb3RvIG91dF9jbGVhcjsKIAorCQkJcmV0ID0gMDsKIAkJCWlmIChkaXNrLT5mb3BzLT5vcGVuKSB7CiAJCQkJcmV0ID0gZGlzay0+Zm9wcy0+b3BlbihiZGV2LCBtb2RlKTsKIAkJCQlpZiAocmV0ID09IC1FUkVTVEFSVFNZUykgewpAQCAtMTExOCw5ICsxMTE5LDE4IEBACiAJCQkJCXB1dF9kaXNrKGRpc2spOwogCQkJCQlnb3RvIHJlc3RhcnQ7CiAJCQkJfQotCQkJCWlmIChyZXQpCi0JCQkJCWdvdG8gb3V0X2NsZWFyOwogCQkJfQorCQkJLyoKKwkJCSAqIElmIHRoZSBkZXZpY2UgaXMgaW52YWxpZGF0ZWQsIHJlc2NhbiBwYXJ0aXRpb24KKwkJCSAqIGlmIG9wZW4gc3VjY2VlZGVkIG9yIGZhaWxlZCB3aXRoIC1FTk9NRURJVU0uCisJCQkgKiBUaGUgbGF0dGVyIGlzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IGdob3N0CisJCQkgKiBwYXJ0aXRpb25zIG9uIGEgcmVtb3ZlZCBtZWRpdW0uCisJCQkgKi8KKwkJCWlmIChiZGV2LT5iZF9pbnZhbGlkYXRlZCAmJiAoIXJldCB8fCByZXQgPT0gLUVOT01FRElVTSkpCisJCQkJcmVzY2FuX3BhcnRpdGlvbnMoZGlzaywgYmRldik7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gb3V0X2NsZWFyOworCiAJCQlpZiAoIWJkZXYtPmJkX29wZW5lcnMpIHsKIAkJCQliZF9zZXRfc2l6ZShiZGV2LChsb2ZmX3QpZ2V0X2NhcGFjaXR5KGRpc2spPDw5KTsKIAkJCQliZGkgPSBibGtfZ2V0X2JhY2tpbmdfZGV2X2luZm8oYmRldik7CkBAIC0xMTI4LDggKzExMzgsNiBAQAogCQkJCQliZGkgPSAmZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvOwogCQkJCWJkZXZfaW5vZGVfc3dpdGNoX2JkaShiZGV2LT5iZF9pbm9kZSwgYmRpKTsKIAkJCX0KLQkJCWlmIChiZGV2LT5iZF9pbnZhbGlkYXRlZCkKLQkJCQlyZXNjYW5fcGFydGl0aW9ucyhkaXNrLCBiZGV2KTsKIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCBibG9ja19kZXZpY2UgKndob2xlOwogCQkJd2hvbGUgPSBiZGdldF9kaXNrKGRpc2ssIDApOwpAQCAtMTE1MywxMyArMTE2MSwxNCBAQAogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKGJkZXYtPmJkX2NvbnRhaW5zID09IGJkZXYpIHsKLQkJCWlmIChiZGV2LT5iZF9kaXNrLT5mb3BzLT5vcGVuKSB7CisJCQlyZXQgPSAwOworCQkJaWYgKGJkZXYtPmJkX2Rpc2stPmZvcHMtPm9wZW4pCiAJCQkJcmV0ID0gYmRldi0+YmRfZGlzay0+Zm9wcy0+b3BlbihiZGV2LCBtb2RlKTsKLQkJCQlpZiAocmV0KQotCQkJCQlnb3RvIG91dF91bmxvY2tfYmRldjsKLQkJCX0KLQkJCWlmIChiZGV2LT5iZF9pbnZhbGlkYXRlZCkKKwkJCS8qIHRoZSBzYW1lIGFzIGZpcnN0IG9wZW5lciBjYXNlLCByZWFkIGNvbW1lbnQgdGhlcmUgKi8KKwkJCWlmIChiZGV2LT5iZF9pbnZhbGlkYXRlZCAmJiAoIXJldCB8fCByZXQgPT0gLUVOT01FRElVTSkpCiAJCQkJcmVzY2FuX3BhcnRpdGlvbnMoYmRldi0+YmRfZGlzaywgYmRldik7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gb3V0X3VubG9ja19iZGV2OwogCQl9CiAJCS8qIG9ubHkgb25lIG9wZW5lciBob2xkcyByZWZzIHRvIHRoZSBtb2R1bGUgYW5kIGRpc2sgKi8KIAkJbW9kdWxlX3B1dChkaXNrLT5mb3BzLT5vd25lcik7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9hY2wuYyBiL2ZzL2J0cmZzL2FjbC5jCmluZGV4IDVkNTA1YWEuLjQ0ZWE1YjkgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2FjbC5jCisrKyBiL2ZzL2J0cmZzL2FjbC5jCkBAIC0xNzgsMTIgKzE3OCwxMyBAQAogCiAJaWYgKHZhbHVlKSB7CiAJCWFjbCA9IHBvc2l4X2FjbF9mcm9tX3hhdHRyKHZhbHVlLCBzaXplKTsKKwkJaWYgKElTX0VSUihhY2wpKQorCQkJcmV0dXJuIFBUUl9FUlIoYWNsKTsKKwogCQlpZiAoYWNsKSB7CiAJCQlyZXQgPSBwb3NpeF9hY2xfdmFsaWQoYWNsKTsKIAkJCWlmIChyZXQpCiAJCQkJZ290byBvdXQ7Ci0JCX0gZWxzZSBpZiAoSVNfRVJSKGFjbCkpIHsKLQkJCXJldHVybiBQVFJfRVJSKGFjbCk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2N0cmVlLmggYi9mcy9idHJmcy9jdHJlZS5oCmluZGV4IDJlNjFmZTEuLjhmNGI4MWQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2N0cmVlLmgKKysrIGIvZnMvYnRyZnMvY3RyZWUuaApAQCAtNzE4LDcgKzcxOCw3IEBACiAJdTY0IHRvdGFsX2J5dGVzOwkvKiB0b3RhbCBieXRlcyBpbiB0aGUgc3BhY2UsCiAJCQkJICAgdGhpcyBkb2Vzbid0IHRha2UgbWlycm9ycyBpbnRvIGFjY291bnQgKi8KIAl1NjQgYnl0ZXNfdXNlZDsJCS8qIHRvdGFsIGJ5dGVzIHVzZWQsCi0JCQkJICAgdGhpcyBkb2VzJ3QgdGFrZSBtaXJyb3JzIGludG8gYWNjb3VudCAqLworCQkJCSAgIHRoaXMgZG9lc24ndCB0YWtlIG1pcnJvcnMgaW50byBhY2NvdW50ICovCiAJdTY0IGJ5dGVzX3Bpbm5lZDsJLyogdG90YWwgYnl0ZXMgcGlubmVkLCB3aWxsIGJlIGZyZWVkIHdoZW4gdGhlCiAJCQkJICAgdHJhbnNhY3Rpb24gZmluaXNoZXMgKi8KIAl1NjQgYnl0ZXNfcmVzZXJ2ZWQ7CS8qIHRvdGFsIGJ5dGVzIHRoZSBhbGxvY2F0b3IgaGFzIHJlc2VydmVkIGZvcgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZGlzay1pby5jIGIvZnMvYnRyZnMvZGlzay1pby5jCmluZGV4IDY4Yzg0YzguLjIyOGNmMzYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2Rpc2staW8uYworKysgYi9mcy9idHJmcy9kaXNrLWlvLmMKQEAgLTI4MjQsNiArMjgyNCw3IEBACiAKIAlzcGluX2xvY2soJmRlbGF5ZWRfcmVmcy0+bG9jayk7CiAJaWYgKGRlbGF5ZWRfcmVmcy0+bnVtX2VudHJpZXMgPT0gMCkgeworCQlzcGluX3VubG9jaygmZGVsYXllZF9yZWZzLT5sb2NrKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiZGVsYXllZF9yZWZzIGhhcyBOTyBlbnRyeVxuIik7CiAJCXJldHVybiByZXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKaW5kZXggMzFmMzNiYS4uOWVlNmJkNSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYworKysgYi9mcy9idHJmcy9leHRlbnQtdHJlZS5jCkBAIC04MDU5LDYgKzgwNTksMTAgQEAKIAkJCQl1NjQgZ3JvdXBfc3RhcnQgPSBncm91cC0+a2V5Lm9iamVjdGlkOwogCQkJCW5ld19leHRlbnRzID0ga21hbGxvYyhzaXplb2YoKm5ld19leHRlbnRzKSwKIAkJCQkJCSAgICAgIEdGUF9OT0ZTKTsKKwkJCQlpZiAoIW5ld19leHRlbnRzKSB7CisJCQkJCXJldCA9IC1FTk9NRU07CisJCQkJCWdvdG8gb3V0OworCQkJCX0KIAkJCQlucl9leHRlbnRzID0gMTsKIAkJCQlyZXQgPSBnZXRfbmV3X2xvY2F0aW9ucyhyZWxvY19pbm9kZSwKIAkJCQkJCQlleHRlbnRfa2V5LApAQCAtODg1MiwyMyArODg1NiwzOCBAQAogaW50IGJ0cmZzX2luaXRfc3BhY2VfaW5mbyhzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbykKIHsKIAlzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqc3BhY2VfaW5mbzsKKwlzdHJ1Y3QgYnRyZnNfc3VwZXJfYmxvY2sgKmRpc2tfc3VwZXI7CisJdTY0IGZlYXR1cmVzOworCXU2NCBmbGFnczsKKwlpbnQgbWl4ZWQgPSAwOwogCWludCByZXQ7CiAKLQlyZXQgPSB1cGRhdGVfc3BhY2VfaW5mbyhmc19pbmZvLCBCVFJGU19CTE9DS19HUk9VUF9TWVNURU0sIDAsIDAsCi0JCQkJCQkJCSAmc3BhY2VfaW5mbyk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwlkaXNrX3N1cGVyID0gJmZzX2luZm8tPnN1cGVyX2NvcHk7CisJaWYgKCFidHJmc19zdXBlcl9yb290KGRpc2tfc3VwZXIpKQorCQlyZXR1cm4gMTsKIAotCXJldCA9IHVwZGF0ZV9zcGFjZV9pbmZvKGZzX2luZm8sIEJUUkZTX0JMT0NLX0dST1VQX01FVEFEQVRBLCAwLCAwLAotCQkJCQkJCQkgJnNwYWNlX2luZm8pOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJZmVhdHVyZXMgPSBidHJmc19zdXBlcl9pbmNvbXBhdF9mbGFncyhkaXNrX3N1cGVyKTsKKwlpZiAoZmVhdHVyZXMgJiBCVFJGU19GRUFUVVJFX0lOQ09NUEFUX01JWEVEX0dST1VQUykKKwkJbWl4ZWQgPSAxOwogCi0JcmV0ID0gdXBkYXRlX3NwYWNlX2luZm8oZnNfaW5mbywgQlRSRlNfQkxPQ0tfR1JPVVBfREFUQSwgMCwgMCwKLQkJCQkJCQkJICZzcGFjZV9pbmZvKTsKKwlmbGFncyA9IEJUUkZTX0JMT0NLX0dST1VQX1NZU1RFTTsKKwlyZXQgPSB1cGRhdGVfc3BhY2VfaW5mbyhmc19pbmZvLCBmbGFncywgMCwgMCwgJnNwYWNlX2luZm8pOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gb3V0OwogCisJaWYgKG1peGVkKSB7CisJCWZsYWdzID0gQlRSRlNfQkxPQ0tfR1JPVVBfTUVUQURBVEEgfCBCVFJGU19CTE9DS19HUk9VUF9EQVRBOworCQlyZXQgPSB1cGRhdGVfc3BhY2VfaW5mbyhmc19pbmZvLCBmbGFncywgMCwgMCwgJnNwYWNlX2luZm8pOworCX0gZWxzZSB7CisJCWZsYWdzID0gQlRSRlNfQkxPQ0tfR1JPVVBfTUVUQURBVEE7CisJCXJldCA9IHVwZGF0ZV9zcGFjZV9pbmZvKGZzX2luZm8sIGZsYWdzLCAwLCAwLCAmc3BhY2VfaW5mbyk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKworCQlmbGFncyA9IEJUUkZTX0JMT0NLX0dST1VQX0RBVEE7CisJCXJldCA9IHVwZGF0ZV9zcGFjZV9pbmZvKGZzX2luZm8sIGZsYWdzLCAwLCAwLCAmc3BhY2VfaW5mbyk7CisJfQorb3V0OgogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudF9pby5jIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKaW5kZXggMzE1MTM4Ni4uOTZmY2ZhNSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50X2lvLmMKKysrIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZXZlYy5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSAiZXh0ZW50X2lvLmgiCiAjaW5jbHVkZSAiZXh0ZW50X21hcC5oIgogI2luY2x1ZGUgImNvbXBhdC5oIgpAQCAtMjY4MSw3ICsyNjgyLDcgQEAKIAkJcHJlZmV0Y2h3KCZwYWdlLT5mbGFncyk7CiAJCWxpc3RfZGVsKCZwYWdlLT5scnUpOwogCQlpZiAoIWFkZF90b19wYWdlX2NhY2hlX2xydShwYWdlLCBtYXBwaW5nLAotCQkJCQlwYWdlLT5pbmRleCwgR0ZQX0tFUk5FTCkpIHsKKwkJCQkJcGFnZS0+aW5kZXgsIEdGUF9OT0ZTKSkgewogCQkJX19leHRlbnRfcmVhZF9mdWxsX3BhZ2UodHJlZSwgcGFnZSwgZ2V0X2V4dGVudCwKIAkJCQkJCSZiaW8sIDAsICZiaW9fZmxhZ3MpOwogCQl9CmRpZmYgLS1naXQgYS9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMgYi9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMKaW5kZXggMTFkMmU5Yy4uNjM3MzFhMSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jCisrKyBiL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYwpAQCAtMTc2OCwxMCArMTc2OCwxMyBAQAogCiAJd2hpbGUgKChub2RlID0gcmJfbGFzdCgmYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2Vfb2Zmc2V0KSkgIT0gTlVMTCkgewogCQlpbmZvID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UsIG9mZnNldF9pbmRleCk7Ci0JCXVubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBpbmZvKTsKLQkJaWYgKGluZm8tPmJpdG1hcCkKLQkJCWtmcmVlKGluZm8tPmJpdG1hcCk7Ci0JCWttZW1fY2FjaGVfZnJlZShidHJmc19mcmVlX3NwYWNlX2NhY2hlcCwgaW5mbyk7CisJCWlmICghaW5mby0+Yml0bWFwKSB7CisJCQl1bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgaW5mbyk7CisJCQlrbWVtX2NhY2hlX2ZyZWUoYnRyZnNfZnJlZV9zcGFjZV9jYWNoZXAsIGluZm8pOworCQl9IGVsc2UgeworCQkJZnJlZV9iaXRtYXAoYmxvY2tfZ3JvdXAsIGluZm8pOworCQl9CisKIAkJaWYgKG5lZWRfcmVzY2hlZCgpKSB7CiAJCQlzcGluX3VubG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CiAJCQljb25kX3Jlc2NoZWQoKTsKQEAgLTIzMDEsNyArMjMwNCw3IEBACiAJCQlzdGFydCA9IGVudHJ5LT5vZmZzZXQ7CiAJCQlieXRlcyA9IG1pbihlbnRyeS0+Ynl0ZXMsIGVuZCAtIHN0YXJ0KTsKIAkJCXVubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBlbnRyeSk7Ci0JCQlrZnJlZShlbnRyeSk7CisJCQlrbWVtX2NhY2hlX2ZyZWUoYnRyZnNfZnJlZV9zcGFjZV9jYWNoZXAsIGVudHJ5KTsKIAkJfQogCiAJCXNwaW5fdW5sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lub2RlLmMgYi9mcy9idHJmcy9pbm9kZS5jCmluZGV4IGZjZDY2YjYuLjdjZDhhYjAgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2lub2RlLmMKKysrIGIvZnMvYnRyZnMvaW5vZGUuYwpAQCAtOTU0LDYgKzk1NCw3IEBACiAJCQkgMSwgMCwgTlVMTCwgR0ZQX05PRlMpOwogCXdoaWxlIChzdGFydCA8IGVuZCkgewogCQlhc3luY19jb3cgPSBrbWFsbG9jKHNpemVvZigqYXN5bmNfY293KSwgR0ZQX05PRlMpOworCQlCVUdfT04oIWFzeW5jX2Nvdyk7CiAJCWFzeW5jX2Nvdy0+aW5vZGUgPSBpbm9kZTsKIAkJYXN5bmNfY293LT5yb290ID0gcm9vdDsKIAkJYXN5bmNfY293LT5sb2NrZWRfcGFnZSA9IGxvY2tlZF9wYWdlOwpAQCAtNDczMSw5ICs0NzMyLDEwIEBACiAJaW5vZGUgPSBidHJmc19uZXdfaW5vZGUodHJhbnMsIHJvb3QsIGRpciwgZGVudHJ5LT5kX25hbWUubmFtZSwKIAkJCQlkZW50cnktPmRfbmFtZS5sZW4sIGRpci0+aV9pbm8sIG9iamVjdGlkLAogCQkJCUJUUkZTX0koZGlyKS0+YmxvY2tfZ3JvdXAsIG1vZGUsICZpbmRleCk7Ci0JZXJyID0gUFRSX0VSUihpbm9kZSk7Ci0JaWYgKElTX0VSUihpbm9kZSkpCisJaWYgKElTX0VSUihpbm9kZSkpIHsKKwkJZXJyID0gUFRSX0VSUihpbm9kZSk7CiAJCWdvdG8gb3V0X3VubG9jazsKKwl9CiAKIAllcnIgPSBidHJmc19pbml0X2lub2RlX3NlY3VyaXR5KHRyYW5zLCBpbm9kZSwgZGlyLCAmZGVudHJ5LT5kX25hbWUpOwogCWlmIChlcnIpIHsKQEAgLTQ3OTIsOSArNDc5NCwxMCBAQAogCWlub2RlID0gYnRyZnNfbmV3X2lub2RlKHRyYW5zLCByb290LCBkaXIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCiAJCQkJZGVudHJ5LT5kX25hbWUubGVuLCBkaXItPmlfaW5vLCBvYmplY3RpZCwKIAkJCQlCVFJGU19JKGRpciktPmJsb2NrX2dyb3VwLCBtb2RlLCAmaW5kZXgpOwotCWVyciA9IFBUUl9FUlIoaW5vZGUpOwotCWlmIChJU19FUlIoaW5vZGUpKQorCWlmIChJU19FUlIoaW5vZGUpKSB7CisJCWVyciA9IFBUUl9FUlIoaW5vZGUpOwogCQlnb3RvIG91dF91bmxvY2s7CisJfQogCiAJZXJyID0gYnRyZnNfaW5pdF9pbm9kZV9zZWN1cml0eSh0cmFucywgaW5vZGUsIGRpciwgJmRlbnRyeS0+ZF9uYW1lKTsKIAlpZiAoZXJyKSB7CkBAIC00OTk5LDYgKzUwMDIsOCBAQAogCWlubGluZV9zaXplID0gYnRyZnNfZmlsZV9leHRlbnRfaW5saW5lX2l0ZW1fbGVuKGxlYWYsCiAJCQkJCWJ0cmZzX2l0ZW1fbnIobGVhZiwgcGF0aC0+c2xvdHNbMF0pKTsKIAl0bXAgPSBrbWFsbG9jKGlubGluZV9zaXplLCBHRlBfTk9GUyk7CisJaWYgKCF0bXApCisJCXJldHVybiAtRU5PTUVNOwogCXB0ciA9IGJ0cmZzX2ZpbGVfZXh0ZW50X2lubGluZV9zdGFydChpdGVtKTsKIAogCXJlYWRfZXh0ZW50X2J1ZmZlcihsZWFmLCB0bXAsIHB0ciwgaW5saW5lX3NpemUpOwpAQCAtNjAzNiw3ICs2MDQxLDcgQEAKIAlyZXQgPSBidHJmc19tYXBfYmxvY2sobWFwX3RyZWUsIFJFQUQsIHN0YXJ0X3NlY3RvciA8PCA5LAogCQkJICAgICAgJm1hcF9sZW5ndGgsIE5VTEwsIDApOwogCWlmIChyZXQpIHsKLQkJYmlvX3B1dChiaW8pOworCQliaW9fcHV0KG9yaWdfYmlvKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC03MjczLDkgKzcyNzgsMTAgQEAKIAkJCQlkZW50cnktPmRfbmFtZS5sZW4sIGRpci0+aV9pbm8sIG9iamVjdGlkLAogCQkJCUJUUkZTX0koZGlyKS0+YmxvY2tfZ3JvdXAsIFNfSUZMTkt8U19JUldYVUdPLAogCQkJCSZpbmRleCk7Ci0JZXJyID0gUFRSX0VSUihpbm9kZSk7Ci0JaWYgKElTX0VSUihpbm9kZSkpCisJaWYgKElTX0VSUihpbm9kZSkpIHsKKwkJZXJyID0gUFRSX0VSUihpbm9kZSk7CiAJCWdvdG8gb3V0X3VubG9jazsKKwl9CiAKIAllcnIgPSBidHJmc19pbml0X2lub2RlX3NlY3VyaXR5KHRyYW5zLCBpbm9kZSwgZGlyLCAmZGVudHJ5LT5kX25hbWUpOwogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lvY3RsLmMgYi9mcy9idHJmcy9pb2N0bC5jCmluZGV4IGZmYjQ4ZDZjLi4yNjE2ZjdlIDEwMDY0NAotLS0gYS9mcy9idHJmcy9pb2N0bC5jCisrKyBiL2ZzL2J0cmZzL2lvY3RsLmMKQEAgLTgxLDYgKzgxLDEzIEBACiAJCWlmbGFncyB8PSBGU19OT0FUSU1FX0ZMOwogCWlmIChmbGFncyAmIEJUUkZTX0lOT0RFX0RJUlNZTkMpCiAJCWlmbGFncyB8PSBGU19ESVJTWU5DX0ZMOworCWlmIChmbGFncyAmIEJUUkZTX0lOT0RFX05PREFUQUNPVykKKwkJaWZsYWdzIHw9IEZTX05PQ09XX0ZMOworCisJaWYgKChmbGFncyAmIEJUUkZTX0lOT0RFX0NPTVBSRVNTKSAmJiAhKGZsYWdzICYgQlRSRlNfSU5PREVfTk9DT01QUkVTUykpCisJCWlmbGFncyB8PSBGU19DT01QUl9GTDsKKwllbHNlIGlmIChmbGFncyAmIEJUUkZTX0lOT0RFX05PQ09NUFJFU1MpCisJCWlmbGFncyB8PSBGU19OT0NPTVBfRkw7CiAKIAlyZXR1cm4gaWZsYWdzOwogfQpAQCAtMTQ0LDE2ICsxNTEsMTMgQEAKIAlpZiAoZmxhZ3MgJiB+KEZTX0lNTVVUQUJMRV9GTCB8IEZTX0FQUEVORF9GTCB8IFwKIAkJICAgICAgRlNfTk9BVElNRV9GTCB8IEZTX05PRFVNUF9GTCB8IFwKIAkJICAgICAgRlNfU1lOQ19GTCB8IEZTX0RJUlNZTkNfRkwgfCBcCi0JCSAgICAgIEZTX05PQ09NUF9GTCB8IEZTX0NPTVBSX0ZMIHwgXAotCQkgICAgICBGU19OT0NPV19GTCB8IEZTX0NPV19GTCkpCisJCSAgICAgIEZTX05PQ09NUF9GTCB8IEZTX0NPTVBSX0ZMIHwKKwkJICAgICAgRlNfTk9DT1dfRkwpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlpZiAoKGZsYWdzICYgRlNfTk9DT01QX0ZMKSAmJiAoZmxhZ3MgJiBGU19DT01QUl9GTCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKChmbGFncyAmIEZTX05PQ09XX0ZMKSAmJiAoZmxhZ3MgJiBGU19DT1dfRkwpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCXJldHVybiAwOwogfQogCkBAIC0yMTgsNiArMjIyLDEwIEBACiAJCWlwLT5mbGFncyB8PSBCVFJGU19JTk9ERV9ESVJTWU5DOwogCWVsc2UKIAkJaXAtPmZsYWdzICY9IH5CVFJGU19JTk9ERV9ESVJTWU5DOworCWlmIChmbGFncyAmIEZTX05PQ09XX0ZMKQorCQlpcC0+ZmxhZ3MgfD0gQlRSRlNfSU5PREVfTk9EQVRBQ09XOworCWVsc2UKKwkJaXAtPmZsYWdzICY9IH5CVFJGU19JTk9ERV9OT0RBVEFDT1c7CiAKIAkvKgogCSAqIFRoZSBDT01QUkVTUyBmbGFnIGNhbiBvbmx5IGJlIGNoYW5nZWQgYnkgdXNlcnMsIHdoaWxlIHRoZSBOT0NPTVBSRVNTCkBAIC0yMzAsMTEgKzIzOCw5IEBACiAJfSBlbHNlIGlmIChmbGFncyAmIEZTX0NPTVBSX0ZMKSB7CiAJCWlwLT5mbGFncyB8PSBCVFJGU19JTk9ERV9DT01QUkVTUzsKIAkJaXAtPmZsYWdzICY9IH5CVFJGU19JTk9ERV9OT0NPTVBSRVNTOworCX0gZWxzZSB7CisJCWlwLT5mbGFncyAmPSB+KEJUUkZTX0lOT0RFX0NPTVBSRVNTIHwgQlRSRlNfSU5PREVfTk9DT01QUkVTUyk7CiAJfQotCWlmIChmbGFncyAmIEZTX05PQ09XX0ZMKQotCQlpcC0+ZmxhZ3MgfD0gQlRSRlNfSU5PREVfTk9EQVRBQ09XOwotCWVsc2UgaWYgKGZsYWdzICYgRlNfQ09XX0ZMKQotCQlpcC0+ZmxhZ3MgJj0gfkJUUkZTX0lOT0RFX05PREFUQUNPVzsKIAogCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKIAlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy90cmVlLWxvZy5jIGIvZnMvYnRyZnMvdHJlZS1sb2cuYwppbmRleCBjNTAyNzFhLi5mOTk3ZWMwIDEwMDY0NAotLS0gYS9mcy9idHJmcy90cmVlLWxvZy5jCisrKyBiL2ZzL2J0cmZzL3RyZWUtbG9nLmMKQEAgLTIyMDksOCArMjIwOSwxMCBAQAogCiAJbG9nID0gcm9vdC0+bG9nX3Jvb3Q7CiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKLQlpZiAoIXBhdGgpCi0JCXJldHVybiAtRU5PTUVNOworCWlmICghcGF0aCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dF91bmxvY2s7CisJfQogCiAJZGkgPSBidHJmc19sb29rdXBfZGlyX2l0ZW0odHJhbnMsIGxvZywgcGF0aCwgZGlyLT5pX2lubywKIAkJCQkgICBuYW1lLCBuYW1lX2xlbiwgLTEpOwpAQCAtMjI3MSw2ICsyMjczLDcgQEAKIAl9CiBmYWlsOgogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKK291dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZCVFJGU19JKGRpciktPmxvZ19tdXRleCk7CiAJaWYgKHJldCA9PSAtRU5PU1BDKSB7CiAJCXJvb3QtPmZzX2luZm8tPmxhc3RfdHJhbnNfbG9nX2Z1bGxfY29tbWl0ID0gdHJhbnMtPnRyYW5zaWQ7CmRpZmYgLS1naXQgYS9mcy9idHJmcy92b2x1bWVzLmMgYi9mcy9idHJmcy92b2x1bWVzLmMKaW5kZXggMzA5YTU3Yi4uYzczNjdhZSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdm9sdW1lcy5jCisrKyBiL2ZzL2J0cmZzL3ZvbHVtZXMuYwpAQCAtMTU1LDYgKzE1NSwxNSBAQAogCXVuc2lnbmVkIGxvbmcgbGltaXQ7CiAJdW5zaWduZWQgbG9uZyBsYXN0X3dhaXRlZCA9IDA7CiAJaW50IGZvcmNlX3JlZyA9IDA7CisJc3RydWN0IGJsa19wbHVnIHBsdWc7CisKKwkvKgorCSAqIHRoaXMgZnVuY3Rpb24gcnVucyBhbGwgdGhlIGJpb3Mgd2UndmUgY29sbGVjdGVkIGZvcgorCSAqIGEgcGFydGljdWxhciBkZXZpY2UuICBXZSBkb24ndCB3YW50IHRvIHdhbmRlciBvZmYgdG8KKwkgKiBhbm90aGVyIGRldmljZSB3aXRob3V0IGZpcnN0IHNlbmRpbmcgYWxsIG9mIHRoZXNlIGRvd24uCisJICogU28sIHNldHVwIGEgcGx1ZyBoZXJlIGFuZCBmaW5pc2ggaXQgb2ZmIGJlZm9yZSB3ZSByZXR1cm4KKwkgKi8KKwlibGtfc3RhcnRfcGx1ZygmcGx1Zyk7CiAKIAliZGkgPSBibGtfZ2V0X2JhY2tpbmdfZGV2X2luZm8oZGV2aWNlLT5iZGV2KTsKIAlmc19pbmZvID0gZGV2aWNlLT5kZXZfcm9vdC0+ZnNfaW5mbzsKQEAgLTI5NCw2ICszMDMsNyBAQAogCXNwaW5fdW5sb2NrKCZkZXZpY2UtPmlvX2xvY2spOwogCiBkb25lOgorCWJsa19maW5pc2hfcGx1ZygmcGx1Zyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvYWRkci5jIGIvZnMvY2VwaC9hZGRyLmMKaW5kZXggZTE1OWM1Mi4uMzhiOGFiNSAxMDA2NDQKLS0tIGEvZnMvY2VwaC9hZGRyLmMKKysrIGIvZnMvY2VwaC9hZGRyLmMKQEAgLTc3NSw2ICs3NzUsMTMgQEAKIAkJCQkJICAgIGNpLT5pX3RydW5jYXRlX3NlcSwKIAkJCQkJICAgIGNpLT5pX3RydW5jYXRlX3NpemUsCiAJCQkJCSAgICAmaW5vZGUtPmlfbXRpbWUsIHRydWUsIDEsIDApOworCisJCQkJaWYgKCFyZXEpIHsKKwkJCQkJcmMgPSAtRU5PTUVNOworCQkJCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCiAJCQkJbWF4X3BhZ2VzID0gcmVxLT5yX251bV9wYWdlczsKIAogCQkJCWFsbG9jX3BhZ2VfdmVjKGZzYywgcmVxKTsKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvY2Fwcy5jIGIvZnMvY2VwaC9jYXBzLmMKaW5kZXggNTMyM2MzMy4uMmE1NDA0YyAxMDA2NDQKLS0tIGEvZnMvY2VwaC9jYXBzLmMKKysrIGIvZnMvY2VwaC9jYXBzLmMKQEAgLTgxOSw3ICs4MTksNyBAQAogCQl1c2VkIHw9IENFUEhfQ0FQX0ZJTEVfQ0FDSEU7CiAJaWYgKGNpLT5pX3dyX3JlZikKIAkJdXNlZCB8PSBDRVBIX0NBUF9GSUxFX1dSOwotCWlmIChjaS0+aV93cmJ1ZmZlcl9yZWYpCisJaWYgKGNpLT5pX3diX3JlZiB8fCBjaS0+aV93cmJ1ZmZlcl9yZWYpCiAJCXVzZWQgfD0gQ0VQSF9DQVBfRklMRV9CVUZGRVI7CiAJcmV0dXJuIHVzZWQ7CiB9CkBAIC0xMzMxLDEwICsxMzMxLDExIEBACiB9CiAKIC8qCi0gKiBNYXJrIGNhcHMgZGlydHkuICBJZiBpbm9kZSBpcyBuZXdseSBkaXJ0eSwgYWRkIHRvIHRoZSBnbG9iYWwgZGlydHkKLSAqIGxpc3QuCisgKiBNYXJrIGNhcHMgZGlydHkuICBJZiBpbm9kZSBpcyBuZXdseSBkaXJ0eSwgcmV0dXJuIHRoZSBkaXJ0eSBmbGFncy4KKyAqIENhbGxlciBpcyB0aGVuIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIF9fbWFya19pbm9kZV9kaXJ0eSB3aXRoIHRoZQorICogcmV0dXJuZWQgZmxhZ3MgdmFsdWUuCiAgKi8KLXZvaWQgX19jZXBoX21hcmtfZGlydHlfY2FwcyhzdHJ1Y3QgY2VwaF9pbm9kZV9pbmZvICpjaSwgaW50IG1hc2spCitpbnQgX19jZXBoX21hcmtfZGlydHlfY2FwcyhzdHJ1Y3QgY2VwaF9pbm9kZV9pbmZvICpjaSwgaW50IG1hc2spCiB7CiAJc3RydWN0IGNlcGhfbWRzX2NsaWVudCAqbWRzYyA9CiAJCWNlcGhfc2JfdG9fY2xpZW50KGNpLT52ZnNfaW5vZGUuaV9zYiktPm1kc2M7CkBAIC0xMzU3LDcgKzEzNTgsNyBAQAogCQlsaXN0X2FkZCgmY2ktPmlfZGlydHlfaXRlbSwgJm1kc2MtPmNhcF9kaXJ0eSk7CiAJCXNwaW5fdW5sb2NrKCZtZHNjLT5jYXBfZGlydHlfbG9jayk7CiAJCWlmIChjaS0+aV9mbHVzaGluZ19jYXBzID09IDApIHsKLQkJCWlncmFiKGlub2RlKTsKKwkJCWlob2xkKGlub2RlKTsKIAkJCWRpcnR5IHw9IElfRElSVFlfU1lOQzsKIAkJfQogCX0KQEAgLTEzNjUsOSArMTM2Niw4IEBACiAJaWYgKCgod2FzIHwgY2ktPmlfZmx1c2hpbmdfY2FwcykgJiBDRVBIX0NBUF9GSUxFX0JVRkZFUikgJiYKIAkgICAgKG1hc2sgJiBDRVBIX0NBUF9GSUxFX0JVRkZFUikpCiAJCWRpcnR5IHw9IElfRElSVFlfREFUQVNZTkM7Ci0JaWYgKGRpcnR5KQotCQlfX21hcmtfaW5vZGVfZGlydHkoaW5vZGUsIGRpcnR5KTsKIAlfX2NhcF9kZWxheV9yZXF1ZXVlKG1kc2MsIGNpKTsKKwlyZXR1cm4gZGlydHk7CiB9CiAKIC8qCkBAIC0xOTkwLDExICsxOTkwLDExIEBACiAJaWYgKGdvdCAmIENFUEhfQ0FQX0ZJTEVfV1IpCiAJCWNpLT5pX3dyX3JlZisrOwogCWlmIChnb3QgJiBDRVBIX0NBUF9GSUxFX0JVRkZFUikgewotCQlpZiAoY2ktPmlfd3JidWZmZXJfcmVmID09IDApCi0JCQlpZ3JhYigmY2ktPnZmc19pbm9kZSk7Ci0JCWNpLT5pX3dyYnVmZmVyX3JlZisrOwotCQlkb3V0KCJfX3Rha2VfY2FwX3JlZnMgJXAgd3JidWZmZXIgJWQgLT4gJWQgKD8pXG4iLAotCQkgICAgICZjaS0+dmZzX2lub2RlLCBjaS0+aV93cmJ1ZmZlcl9yZWYtMSwgY2ktPmlfd3JidWZmZXJfcmVmKTsKKwkJaWYgKGNpLT5pX3diX3JlZiA9PSAwKQorCQkJaWhvbGQoJmNpLT52ZnNfaW5vZGUpOworCQljaS0+aV93Yl9yZWYrKzsKKwkJZG91dCgiX190YWtlX2NhcF9yZWZzICVwIHdiICVkIC0+ICVkICg/KVxuIiwKKwkJICAgICAmY2ktPnZmc19pbm9kZSwgY2ktPmlfd2JfcmVmLTEsIGNpLT5pX3diX3JlZik7CiAJfQogfQogCkBAIC0yMTY5LDEyICsyMTY5LDEyIEBACiAJCWlmICgtLWNpLT5pX3JkY2FjaGVfcmVmID09IDApCiAJCQlsYXN0Kys7CiAJaWYgKGhhZCAmIENFUEhfQ0FQX0ZJTEVfQlVGRkVSKSB7Ci0JCWlmICgtLWNpLT5pX3dyYnVmZmVyX3JlZiA9PSAwKSB7CisJCWlmICgtLWNpLT5pX3diX3JlZiA9PSAwKSB7CiAJCQlsYXN0Kys7CiAJCQlwdXQrKzsKIAkJfQotCQlkb3V0KCJwdXRfY2FwX3JlZnMgJXAgd3JidWZmZXIgJWQgLT4gJWQgKD8pXG4iLAotCQkgICAgIGlub2RlLCBjaS0+aV93cmJ1ZmZlcl9yZWYrMSwgY2ktPmlfd3JidWZmZXJfcmVmKTsKKwkJZG91dCgicHV0X2NhcF9yZWZzICVwIHdiICVkIC0+ICVkICg/KVxuIiwKKwkJICAgICBpbm9kZSwgY2ktPmlfd2JfcmVmKzEsIGNpLT5pX3diX3JlZik7CiAJfQogCWlmIChoYWQgJiBDRVBIX0NBUF9GSUxFX1dSKQogCQlpZiAoLS1jaS0+aV93cl9yZWYgPT0gMCkgewpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9maWxlLmMgYi9mcy9jZXBoL2ZpbGUuYwppbmRleCAxNTliNTEyLi4yMDMyNTJkIDEwMDY0NAotLS0gYS9mcy9jZXBoL2ZpbGUuYworKysgYi9mcy9jZXBoL2ZpbGUuYwpAQCAtNzM0LDkgKzczNCwxMiBAQAogCQl9CiAJfQogCWlmIChyZXQgPj0gMCkgeworCQlpbnQgZGlydHk7CiAJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JCV9fY2VwaF9tYXJrX2RpcnR5X2NhcHMoY2ksIENFUEhfQ0FQX0ZJTEVfV1IpOworCQlkaXJ0eSA9IF9fY2VwaF9tYXJrX2RpcnR5X2NhcHMoY2ksIENFUEhfQ0FQX0ZJTEVfV1IpOwogCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJCWlmIChkaXJ0eSkKKwkJCV9fbWFya19pbm9kZV9kaXJ0eShpbm9kZSwgZGlydHkpOwogCX0KIAogb3V0OgpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9pbm9kZS5jIGIvZnMvY2VwaC9pbm9kZS5jCmluZGV4IGI1NGM5N2QuLjcwYjZhNDggMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvaW5vZGUuYworKysgYi9mcy9jZXBoL2lub2RlLmMKQEAgLTM1NSw2ICszNTUsNyBAQAogCWNpLT5pX3JkX3JlZiA9IDA7CiAJY2ktPmlfcmRjYWNoZV9yZWYgPSAwOwogCWNpLT5pX3dyX3JlZiA9IDA7CisJY2ktPmlfd2JfcmVmID0gMDsKIAljaS0+aV93cmJ1ZmZlcl9yZWYgPSAwOwogCWNpLT5pX3dyYnVmZmVyX3JlZl9oZWFkID0gMDsKIAljaS0+aV9zaGFyZWRfZ2VuID0gMDsKQEAgLTE1NjcsNiArMTU2OCw3IEBACiAJaW50IHJlbGVhc2UgPSAwLCBkaXJ0aWVkID0gMDsKIAlpbnQgbWFzayA9IDA7CiAJaW50IGVyciA9IDA7CisJaW50IGlub2RlX2RpcnR5X2ZsYWdzID0gMDsKIAogCWlmIChjZXBoX3NuYXAoaW5vZGUpICE9IENFUEhfTk9TTkFQKQogCQlyZXR1cm4gLUVST0ZTOwpAQCAtMTcyNSwxMyArMTcyNywxNiBAQAogCQlkb3V0KCJzZXRhdHRyICVwIEFUVFJfRklMRSAuLi4gaHJtIVxuIiwgaW5vZGUpOwogCiAJaWYgKGRpcnRpZWQpIHsKLQkJX19jZXBoX21hcmtfZGlydHlfY2FwcyhjaSwgZGlydGllZCk7CisJCWlub2RlX2RpcnR5X2ZsYWdzID0gX19jZXBoX21hcmtfZGlydHlfY2FwcyhjaSwgZGlydGllZCk7CiAJCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCX0KIAogCXJlbGVhc2UgJj0gaXNzdWVkOwogCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAorCWlmIChpbm9kZV9kaXJ0eV9mbGFncykKKwkJX19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCBpbm9kZV9kaXJ0eV9mbGFncyk7CisKIAlpZiAobWFzaykgewogCQlyZXEtPnJfaW5vZGUgPSBpZ3JhYihpbm9kZSk7CiAJCXJlcS0+cl9pbm9kZV9kcm9wID0gcmVsZWFzZTsKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvbWRzX2NsaWVudC5jIGIvZnMvY2VwaC9tZHNfY2xpZW50LmMKaW5kZXggZjYwYjA3Yi4uZDBmYWU0YyAxMDA2NDQKLS0tIGEvZnMvY2VwaC9tZHNfY2xpZW50LmMKKysrIGIvZnMvY2VwaC9tZHNfY2xpZW50LmMKQEAgLTMzMDQsOCArMzMwNCw4IEBACiB7CiAJc3RydWN0IGNlcGhfbWRzX3Nlc3Npb24gKnMgPSBjb24tPnByaXZhdGU7CiAKKwlkb3V0KCJtZHNjIGNvbl9wdXQgJXAgKCVkKVxuIiwgcywgYXRvbWljX3JlYWQoJnMtPnNfcmVmKSAtIDEpOwogCWNlcGhfcHV0X21kc19zZXNzaW9uKHMpOwotCWRvdXQoIm1kc2MgY29uX3B1dCAlcCAoJWQpXG4iLCBzLCBhdG9taWNfcmVhZCgmcy0+c19yZWYpKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvc25hcC5jIGIvZnMvY2VwaC9zbmFwLmMKaW5kZXggZTg2ZWMxMS4uMjQwNjdkNiAxMDA2NDQKLS0tIGEvZnMvY2VwaC9zbmFwLmMKKysrIGIvZnMvY2VwaC9zbmFwLmMKQEAgLTIwNiw3ICsyMDYsNyBAQAogCQl1cF93cml0ZSgmbWRzYy0+c25hcF9yd3NlbSk7CiAJfSBlbHNlIHsKIAkJc3Bpbl9sb2NrKCZtZHNjLT5zbmFwX2VtcHR5X2xvY2spOwotCQlsaXN0X2FkZCgmbWRzYy0+c25hcF9lbXB0eSwgJnJlYWxtLT5lbXB0eV9pdGVtKTsKKwkJbGlzdF9hZGQoJnJlYWxtLT5lbXB0eV9pdGVtLCAmbWRzYy0+c25hcF9lbXB0eSk7CiAJCXNwaW5fdW5sb2NrKCZtZHNjLT5zbmFwX2VtcHR5X2xvY2spOwogCX0KIH0KZGlmZiAtLWdpdCBhL2ZzL2NlcGgvc3VwZXIuaCBiL2ZzL2NlcGgvc3VwZXIuaAppbmRleCA2MTlmZTcxLi5mNWNhYmVmIDEwMDY0NAotLS0gYS9mcy9jZXBoL3N1cGVyLmgKKysrIGIvZnMvY2VwaC9zdXBlci5oCkBAIC0yOTMsNyArMjkzLDcgQEAKIAogCS8qIGhlbGQgcmVmZXJlbmNlcyB0byBjYXBzICovCiAJaW50IGlfcGluX3JlZjsKLQlpbnQgaV9yZF9yZWYsIGlfcmRjYWNoZV9yZWYsIGlfd3JfcmVmOworCWludCBpX3JkX3JlZiwgaV9yZGNhY2hlX3JlZiwgaV93cl9yZWYsIGlfd2JfcmVmOwogCWludCBpX3dyYnVmZmVyX3JlZiwgaV93cmJ1ZmZlcl9yZWZfaGVhZDsKIAl1MzIgaV9zaGFyZWRfZ2VuOyAgICAgICAvKiBpbmNyZW1lbnQgZWFjaCB0aW1lIHdlIGdldCBGSUxFX1NIQVJFRCAqLwogCXUzMiBpX3JkY2FjaGVfZ2VuOyAgICAgIC8qIGluY3JlbWVudGVkIGVhY2ggdGltZSB3ZSBnZXQgRklMRV9DQUNIRS4gKi8KQEAgLTUwNiw3ICs1MDYsNyBAQAogewogCXJldHVybiBjaS0+aV9kaXJ0eV9jYXBzIHwgY2ktPmlfZmx1c2hpbmdfY2FwczsKIH0KLWV4dGVybiB2b2lkIF9fY2VwaF9tYXJrX2RpcnR5X2NhcHMoc3RydWN0IGNlcGhfaW5vZGVfaW5mbyAqY2ksIGludCBtYXNrKTsKK2V4dGVybiBpbnQgX19jZXBoX21hcmtfZGlydHlfY2FwcyhzdHJ1Y3QgY2VwaF9pbm9kZV9pbmZvICpjaSwgaW50IG1hc2spOwogCiBleHRlcm4gaW50IGNlcGhfY2Fwc19yZXZva2luZyhzdHJ1Y3QgY2VwaF9pbm9kZV9pbmZvICpjaSwgaW50IG1hc2spOwogZXh0ZXJuIGludCBfX2NlcGhfY2Fwc191c2VkKHN0cnVjdCBjZXBoX2lub2RlX2luZm8gKmNpKTsKZGlmZiAtLWdpdCBhL2ZzL2NlcGgveGF0dHIuYyBiL2ZzL2NlcGgveGF0dHIuYwppbmRleCA4YzllYmE2Li5mMmI2Mjg2IDEwMDY0NAotLS0gYS9mcy9jZXBoL3hhdHRyLmMKKysrIGIvZnMvY2VwaC94YXR0ci5jCkBAIC03MDMsNiArNzAzLDcgQEAKIAlzdHJ1Y3QgY2VwaF9pbm9kZV94YXR0ciAqeGF0dHIgPSBOVUxMOwogCWludCBpc3N1ZWQ7CiAJaW50IHJlcXVpcmVkX2Jsb2Jfc2l6ZTsKKwlpbnQgZGlydHk7CiAKIAlpZiAoY2VwaF9zbmFwKGlub2RlKSAhPSBDRVBIX05PU05BUCkKIAkJcmV0dXJuIC1FUk9GUzsKQEAgLTc2MywxMSArNzY0LDEyIEBACiAJZG91dCgic2V0eGF0dHIgJXAgaXNzdWVkICVzXG4iLCBpbm9kZSwgY2VwaF9jYXBfc3RyaW5nKGlzc3VlZCkpOwogCWVyciA9IF9fc2V0X3hhdHRyKGNpLCBuZXduYW1lLCBuYW1lX2xlbiwgbmV3dmFsLAogCQkJICB2YWxfbGVuLCAxLCAxLCAxLCAmeGF0dHIpOwotCV9fY2VwaF9tYXJrX2RpcnR5X2NhcHMoY2ksIENFUEhfQ0FQX1hBVFRSX0VYQ0wpOworCWRpcnR5ID0gX19jZXBoX21hcmtfZGlydHlfY2FwcyhjaSwgQ0VQSF9DQVBfWEFUVFJfRVhDTCk7CiAJY2ktPmlfeGF0dHJzLmRpcnR5ID0gdHJ1ZTsKIAlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Ci0KKwlpZiAoZGlydHkpCisJCV9fbWFya19pbm9kZV9kaXJ0eShpbm9kZSwgZGlydHkpOwogCXJldHVybiBlcnI7CiAKIGRvX3N5bmM6CkBAIC04MTAsNiArODEyLDcgQEAKIAlzdHJ1Y3QgY2VwaF92eGF0dHJfY2IgKnZ4YXR0cnMgPSBjZXBoX2lub2RlX3Z4YXR0cnMoaW5vZGUpOwogCWludCBpc3N1ZWQ7CiAJaW50IGVycjsKKwlpbnQgZGlydHk7CiAKIAlpZiAoY2VwaF9zbmFwKGlub2RlKSAhPSBDRVBIX05PU05BUCkKIAkJcmV0dXJuIC1FUk9GUzsKQEAgLTgzMywxMiArODM2LDEzIEBACiAJCWdvdG8gZG9fc3luYzsKIAogCWVyciA9IF9fcmVtb3ZlX3hhdHRyX2J5X25hbWUoY2VwaF9pbm9kZShpbm9kZSksIG5hbWUpOwotCV9fY2VwaF9tYXJrX2RpcnR5X2NhcHMoY2ksIENFUEhfQ0FQX1hBVFRSX0VYQ0wpOworCWRpcnR5ID0gX19jZXBoX21hcmtfZGlydHlfY2FwcyhjaSwgQ0VQSF9DQVBfWEFUVFJfRVhDTCk7CiAJY2ktPmlfeGF0dHJzLmRpcnR5ID0gdHJ1ZTsKIAlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAogCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQorCWlmIChkaXJ0eSkKKwkJX19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCBkaXJ0eSk7CiAJcmV0dXJuIGVycjsKIGRvX3N5bmM6CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9LY29uZmlnIGIvZnMvY2lmcy9LY29uZmlnCmluZGV4IDdjYjBmN2YuLjc1YzQ3Y2QgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvS2NvbmZpZworKysgYi9mcy9jaWZzL0tjb25maWcKQEAgLTcsNiArNyw3IEBACiAJc2VsZWN0IENSWVBUT19NRDUKIAlzZWxlY3QgQ1JZUFRPX0hNQUMKIAlzZWxlY3QgQ1JZUFRPX0FSQzQKKwlzZWxlY3QgQ1JZUFRPX0RFUwogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIGNsaWVudCBWRlMgbW9kdWxlIGZvciB0aGUgQ29tbW9uIEludGVybmV0IEZpbGUgU3lzdGVtCiAJICAoQ0lGUykgcHJvdG9jb2wgd2hpY2ggaXMgdGhlIHN1Y2Nlc3NvciB0byB0aGUgU2VydmVyIE1lc3NhZ2UgQmxvY2sKQEAgLTE1MiwxNiArMTUzLDI4IEBACiAJICAgIEFsbG93cyB0byBmZXRjaCBDSUZTL05URlMgQUNMIGZyb20gdGhlIHNlcnZlci4gIFRoZSBEQUNMIGJsb2IKIAkgICAgaXMgaGFuZGVkIG92ZXIgdG8gdGhlIGFwcGxpY2F0aW9uL2NhbGxlci4KIAotY29uZmlnIENJRlNfRVhQRVJJTUVOVEFMCi0JICBib29sICJDSUZTIEV4cGVyaW1lbnRhbCBGZWF0dXJlcyAoRVhQRVJJTUVOVEFMKSIKK2NvbmZpZyBDSUZTX1NNQjIKKwlib29sICJTTUIyIG5ldHdvcmsgZmlsZSBzeXN0ZW0gc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBJTkVUICYmIEJST0tFTgorCXNlbGVjdCBOTFMKKwlzZWxlY3QgS0VZUworCXNlbGVjdCBGU0NBQ0hFCisJc2VsZWN0IEROU19SRVNPTFZFUgorCisJaGVscAorCSAgVGhpcyBlbmFibGVzIGV4cGVyaW1lbnRhbCBzdXBwb3J0IGZvciB0aGUgU01CMiAoU2VydmVyIE1lc3NhZ2UgQmxvY2sKKwkgIHZlcnNpb24gMikgcHJvdG9jb2wuIFRoZSBTTUIyIHByb3RvY29sIGlzIHRoZSBzdWNjZXNzb3IgdG8gdGhlCisJICBwb3B1bGFyIENJRlMgYW5kIFNNQiBuZXR3b3JrIGZpbGUgc2hhcmluZyBwcm90b2NvbHMuIFNNQjIgaXMgdGhlCisJICBuYXRpdmUgZmlsZSBzaGFyaW5nIG1lY2hhbmlzbSBmb3IgcmVjZW50IHZlcnNpb25zIG9mIFdpbmRvd3MKKwkgIG9wZXJhdGluZyBzeXN0ZW1zIChzaW5jZSBWaXN0YSkuICBTTUIyIGVuYWJsZW1lbnQgd2lsbCBldmVudHVhbGx5CisJICBhbGxvdyB1c2VycyBiZXR0ZXIgcGVyZm9ybWFuY2UsIHNlY3VyaXR5IGFuZCBmZWF0dXJlcywgdGhhbiB3b3VsZCBiZQorCSAgcG9zc2libGUgd2l0aCBjaWZzLiBOb3RlIHRoYXQgc21iMiBtb3VudCBvcHRpb25zIGFsc28gYXJlIHNpbXBsZXIKKwkgIChjb21wYXJlZCB0byBjaWZzKSBkdWUgdG8gcHJvdG9jb2wgaW1wcm92ZW1lbnRzLgorCisJICBVbmxlc3MgeW91IGFyZSBhIGRldmVsb3BlciBvciB0ZXN0ZXIsIHNheSBOLgorCitjb25maWcgQ0lGU19ORlNEX0VYUE9SVAorCSAgYm9vbCAiQWxsb3cgbmZzZCB0byBleHBvcnQgQ0lGUyBmaWxlIHN5c3RlbSAoRVhQRVJJTUVOVEFMKSIKIAkgIGRlcGVuZHMgb24gQ0lGUyAmJiBFWFBFUklNRU5UQUwKIAkgIGhlbHAKLQkgICAgRW5hYmxlcyBjaWZzIGZlYXR1cmVzIHVuZGVyIHRlc3RpbmcuIFRoZXNlIGZlYXR1cmVzIGFyZQotCSAgICBleHBlcmltZW50YWwgYW5kIGN1cnJlbnRseSBpbmNsdWRlIERGUyBzdXBwb3J0IGFuZCBkaXJlY3RvcnkKLQkgICAgY2hhbmdlIG5vdGlmaWNhdGlvbiBpZSBmY250bChGX0ROT1RJRlkpLCBhcyB3ZWxsIGFzIHRoZSB1cGNhbGwKLQkgICAgbWVjaGFuaXNtIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgS2VyYmVyb3Mgc2Vzc2lvbiBuZWdvdGlhdGlvbgotCSAgICBhbmQgdWlkIHJlbWFwcGluZy4gIFNvbWUgb2YgdGhlc2UgZmVhdHVyZXMgYWxzbyBtYXkgZGVwZW5kIG9uCi0JICAgIHNldHRpbmcgYSB2YWx1ZSBvZiAxIHRvIHRoZSBwc2V1ZG8tZmlsZSAvcHJvYy9mcy9jaWZzL0V4cGVyaW1lbnRhbAotCSAgICAod2hpY2ggaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCkuIFNlZSB0aGUgZmlsZSBmcy9jaWZzL1JFQURNRQotCSAgICBmb3IgbW9yZSBkZXRhaWxzLiAgSWYgdW5zdXJlLCBzYXkgTi4KLQorCSAgIEFsbG93cyBORlMgc2VydmVyIHRvIGV4cG9ydCBhIENJRlMgbW91bnRlZCBzaGFyZSAobmZzZCBvdmVyIGNpZnMpCmRpZmYgLS1naXQgYS9mcy9jaWZzL01ha2VmaWxlIGIvZnMvY2lmcy9NYWtlZmlsZQppbmRleCBkODc1NTg0Li4wMDVkNTI0IDEwMDY0NAotLS0gYS9mcy9jaWZzL01ha2VmaWxlCisrKyBiL2ZzL2NpZnMvTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiBvYmotJChDT05GSUdfQ0lGUykgKz0gY2lmcy5vCiAKIGNpZnMteSA6PSBjaWZzZnMubyBjaWZzc21iLm8gY2lmc19kZWJ1Zy5vIGNvbm5lY3QubyBkaXIubyBmaWxlLm8gaW5vZGUubyBcCi0JICBsaW5rLm8gbWlzYy5vIG5ldG1pc2MubyBzbWJkZXMubyBzbWJlbmNyeXB0Lm8gdHJhbnNwb3J0Lm8gYXNuMS5vIFwKKwkgIGxpbmsubyBtaXNjLm8gbmV0bWlzYy5vIHNtYmVuY3J5cHQubyB0cmFuc3BvcnQubyBhc24xLm8gXAogCSAgY2lmc191bmljb2RlLm8gbnRlcnIubyB4YXR0ci5vIGNpZnNlbmNyeXB0Lm8gXAogCSAgcmVhZGRpci5vIGlvY3RsLm8gc2Vzcy5vIGV4cG9ydC5vCiAKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvUkVBRE1FIGIvZnMvY2lmcy9SRUFETUUKaW5kZXggNzRhYjE2NWYuLjRhM2NhMGUgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvUkVBRE1FCisrKyBiL2ZzL2NpZnMvUkVBRE1FCkBAIC03MDQsMTggKzcwNCw2IEBACiAKIAllY2hvIDEgPiAvcHJvYy9mcy9jaWZzL3RyYWNlU01CCiAKLVR3byBvdGhlciBleHBlcmltZW50YWwgZmVhdHVyZXMgYXJlIHVuZGVyIGRldmVsb3BtZW50LiBUbyB0ZXN0IHRoZXNlCi1yZXF1aXJlcyBlbmFibGluZyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwKLQotCWNpZnNhY2wgc3VwcG9ydCBuZWVkZWQgdG8gcmV0cmlldmUgYXBwcm94aW1hdGVkIG1vZGUgYml0cyBiYXNlZCBvbgotCQl0aGUgY29udGVudHMgb24gdGhlIENJRlMgQUNMLgotCi0JbGVhc2Ugc3VwcG9ydDogY2lmcyB3aWxsIGNoZWNrIHRoZSBvcGxvY2sgc3RhdGUgYmVmb3JlIGNhbGxpbmcgaW50bwotCXRoZSB2ZnMgdG8gc2VlIGlmIHdlIGNhbiBncmFudCBhIGxlYXNlIG9uIGEgZmlsZS4KLQotCUROT1RJRlkgZmNudGw6IG5lZWRlZCBmb3Igc3VwcG9ydCBvZiBkaXJlY3RvcnkgY2hhbmdlIAotCQkJICAgIG5vdGlmaWNhdGlvbiBhbmQgcGVyaGFwcyBsYXRlciBmb3IgZmlsZSBsZWFzZXMpCi0KIFBlciBzaGFyZSAocGVyIGNsaWVudCBtb3VudCkgc3RhdGlzdGljcyBhcmUgYXZhaWxhYmxlIGluIC9wcm9jL2ZzL2NpZnMvU3RhdHMKIGlmIHRoZSBrZXJuZWwgd2FzIGNvbmZpZ3VyZWQgd2l0aCBjaWZzIHN0YXRpc3RpY3MgZW5hYmxlZC4gIFRoZSBzdGF0aXN0aWNzCiByZXByZXNlbnQgdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsIChpZSBub24temVybyByZXR1cm4gY29kZSBmcm9tIHRoZSBzZXJ2ZXIpIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzX2RlYnVnLmMgYi9mcy9jaWZzL2NpZnNfZGVidWcuYwppbmRleCAzMGQwMWJjLi4xOGY0MjcyIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfZGVidWcuYworKysgYi9mcy9jaWZzL2NpZnNfZGVidWcuYwpAQCAtNjMsNyArNjMsNyBAQAogCWNFUlJPUigxLCAiQ21kOiAlZCBFcnI6IDB4JXggRmxhZ3M6IDB4JXggRmxnczI6IDB4JXggTWlkOiAlZCBQaWQ6ICVkIiwKIAkJICBzbWItPkNvbW1hbmQsIHNtYi0+U3RhdHVzLkNpZnNFcnJvciwKIAkJICBzbWItPkZsYWdzLCBzbWItPkZsYWdzMiwgc21iLT5NaWQsIHNtYi0+UGlkKTsKLQljRVJST1IoMSwgInNtYiBidWYgJXAgbGVuICVkIiwgc21iLCBzbWJDYWxjU2l6ZV9MRShzbWIpKTsKKwljRVJST1IoMSwgInNtYiBidWYgJXAgbGVuICVkIiwgc21iLCBzbWJDYWxjU2l6ZShzbWIpKTsKIH0KIAogCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNfZnNfc2IuaCBiL2ZzL2NpZnMvY2lmc19mc19zYi5oCmluZGV4IGFjNTFjZDIuLmE5ZDU2OTIgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc19mc19zYi5oCisrKyBiL2ZzL2NpZnMvY2lmc19mc19zYi5oCkBAIC01OCw5ICs1OCw3IEBACiAJdW5zaWduZWQgaW50IG1udF9jaWZzX2ZsYWdzOwogCWludAlwcmVwYXRobGVuOwogCWNoYXIgICAqcHJlcGF0aDsgLyogcmVsYXRpdmUgcGF0aCB1bmRlciB0aGUgc2hhcmUgdG8gbW91bnQgdG8gKi8KLSNpZmRlZiBDT05GSUdfQ0lGU19ERlNfVVBDQUxMCi0JY2hhciAgICptb3VudGRhdGE7IC8qIG1vdW50IG9wdGlvbnMgcmVjZWl2ZWQgYXQgbW91bnQgdGltZSAqLwotI2VuZGlmCisJY2hhciAgICptb3VudGRhdGE7IC8qIG9wdGlvbnMgcmVjZWl2ZWQgYXQgbW91bnQgdGltZSBvciB2aWEgREZTIHJlZnMgKi8KIAlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyBiZGk7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBwcnVuZV90bGlua3M7CiB9OwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzX3VuaWNvZGUuYyBiL2ZzL2NpZnMvY2lmc191bmljb2RlLmMKaW5kZXggMjNkNDNjZC4uMWIyZTE4MCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX3VuaWNvZGUuYworKysgYi9mcy9jaWZzL2NpZnNfdW5pY29kZS5jCkBAIC0yNzcsNiArMjc3LDcgQEAKIAogCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgc3JjbGVuOyBqKyspIHsKIAkJc3JjX2NoYXIgPSBzb3VyY2VbaV07CisJCWNoYXJsZW4gPSAxOwogCQlzd2l0Y2ggKHNyY19jaGFyKSB7CiAJCWNhc2UgMDoKIAkJCXB1dF91bmFsaWduZWQoMCwgJnRhcmdldFtqXSk7CkBAIC0zMTYsMTYgKzMxNywxMyBAQAogCQkJCWRzdF9jaGFyID0gY3B1X3RvX2xlMTYoMHgwMDNmKTsKIAkJCQljaGFybGVuID0gMTsKIAkJCX0KLQkJCS8qCi0JCQkgKiBjaGFyYWN0ZXIgbWF5IHRha2UgbW9yZSB0aGFuIG9uZSBieXRlIGluIHRoZSBzb3VyY2UKLQkJCSAqIHN0cmluZywgYnV0IHdpbGwgdGFrZSBleGFjdGx5IHR3byBieXRlcyBpbiB0aGUKLQkJCSAqIHRhcmdldCBzdHJpbmcKLQkJCSAqLwotCQkJaSArPSBjaGFybGVuOwotCQkJY29udGludWU7CiAJCX0KKwkJLyoKKwkJICogY2hhcmFjdGVyIG1heSB0YWtlIG1vcmUgdGhhbiBvbmUgYnl0ZSBpbiB0aGUgc291cmNlIHN0cmluZywKKwkJICogYnV0IHdpbGwgdGFrZSBleGFjdGx5IHR3byBieXRlcyBpbiB0aGUgdGFyZ2V0IHN0cmluZworCQkgKi8KKwkJaSArPSBjaGFybGVuOwogCQlwdXRfdW5hbGlnbmVkKGRzdF9jaGFyLCAmdGFyZ2V0W2pdKTsKLQkJaSsrOyAvKiBtb3ZlIHRvIG5leHQgY2hhciBpbiBzb3VyY2Ugc3RyaW5nICovCiAJfQogCiBjdG9VQ1Nfb3V0OgpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzX3VuaWNvZGUuaCBiL2ZzL2NpZnMvY2lmc191bmljb2RlLmgKaW5kZXggNjQ0ZGQ4ODIuLjZkMDJmZDUgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc191bmljb2RlLmgKKysrIGIvZnMvY2lmcy9jaWZzX3VuaWNvZGUuaApAQCAtODIsNiArODIsOSBAQAogY2hhciAqY2lmc19zdHJuZHVwX2Zyb21fdWNzKGNvbnN0IGNoYXIgKnNyYywgY29uc3QgaW50IG1heGxlbiwKIAkJCSAgICBjb25zdCBib29sIGlzX3VuaWNvZGUsCiAJCQkgICAgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqY29kZXBhZ2UpOworZXh0ZXJuIGludCBjaWZzQ29udmVydFRvVUNTKF9fbGUxNiAqdGFyZ2V0LCBjb25zdCBjaGFyICpzb3VyY2UsIGludCBtYXhsZW4sCisJCQljb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpjcCwgaW50IG1hcENoYXJzKTsKKwogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNhY2wuYyBiL2ZzL2NpZnMvY2lmc2FjbC5jCmluZGV4IGJlZWViZjEuLmYzYzZmYjkgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2FjbC5jCisrKyBiL2ZzL2NpZnMvY2lmc2FjbC5jCkBAIC0yMywyNCArMjMsMTYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tleWN0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2tleS10eXBlLmg+CisjaW5jbHVkZSA8a2V5cy91c2VyLXR5cGUuaD4KICNpbmNsdWRlICJjaWZzcGR1LmgiCiAjaW5jbHVkZSAiY2lmc2dsb2IuaCIKICNpbmNsdWRlICJjaWZzYWNsLmgiCiAjaW5jbHVkZSAiY2lmc3Byb3RvLmgiCiAjaW5jbHVkZSAiY2lmc19kZWJ1Zy5oIgogCi0KLXN0YXRpYyBzdHJ1Y3QgY2lmc193a3NpZCB3a3NpZGFycltOVU1fV0tfU0lEU10gPSB7Ci0Je3sxLCAwLCB7MCwgMCwgMCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwLCAwfSB9LCAibnVsbCB1c2VyIn0sCi0Je3sxLCAxLCB7MCwgMCwgMCwgMCwgMCwgMX0sIHswLCAwLCAwLCAwLCAwfSB9LCAibm9ib2R5In0sCi0Je3sxLCAxLCB7MCwgMCwgMCwgMCwgMCwgNX0sIHtfX2NvbnN0YW50X2NwdV90b19sZTMyKDExKSwgMCwgMCwgMCwgMH0gfSwgIm5ldC11c2VycyJ9LAotCXt7MSwgMSwgezAsIDAsIDAsIDAsIDAsIDV9LCB7X19jb25zdGFudF9jcHVfdG9fbGUzMigxOCksIDAsIDAsIDAsIDB9IH0sICJzeXMifSwKLQl7ezEsIDIsIHswLCAwLCAwLCAwLCAwLCA1fSwge19fY29uc3RhbnRfY3B1X3RvX2xlMzIoMzIpLCBfX2NvbnN0YW50X2NwdV90b19sZTMyKDU0NCksIDAsIDAsIDB9IH0sICJyb290In0sCi0Je3sxLCAyLCB7MCwgMCwgMCwgMCwgMCwgNX0sIHtfX2NvbnN0YW50X2NwdV90b19sZTMyKDMyKSwgX19jb25zdGFudF9jcHVfdG9fbGUzMig1NDUpLCAwLCAwLCAwfSB9LCAidXNlcnMifSwKLQl7ezEsIDIsIHswLCAwLCAwLCAwLCAwLCA1fSwge19fY29uc3RhbnRfY3B1X3RvX2xlMzIoMzIpLCBfX2NvbnN0YW50X2NwdV90b19sZTMyKDU0NiksIDAsIDAsIDB9IH0sICJndWVzdCJ9IH0KLTsKLQotCiAvKiBzZWN1cml0eSBpZCBmb3IgZXZlcnlvbmUvd29ybGQgc3lzdGVtIGdyb3VwICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNpZnNfc2lkIHNpZF9ldmVyeW9uZSA9IHsKIAkxLCAxLCB7MCwgMCwgMCwgMCwgMCwgMX0sIHswfSB9OwpAQCAtNTAsNTAgKzQyLDM4NSBAQAogLyogZ3JvdXAgdXNlcnMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2lmc19zaWQgc2lkX3VzZXIgPSB7MSwgMiAsIHswLCAwLCAwLCAwLCAwLCA1fSwge30gfTsKIAorY29uc3Qgc3RydWN0IGNyZWQgKnJvb3RfY3JlZDsKIAotaW50IG1hdGNoX3NpZChzdHJ1Y3QgY2lmc19zaWQgKmN0c2lkKQorc3RhdGljIHZvaWQKK3Nocmlua19pZG1hcF90cmVlKHN0cnVjdCByYl9yb290ICpyb290LCBpbnQgbnJfdG9fc2NhbiwgaW50ICpucl9yZW0sCisJCQlpbnQgKm5yX2RlbCkKIHsKLQlpbnQgaSwgajsKLQlpbnQgbnVtX3N1YmF1dGgsIG51bV9zYXQsIG51bV9zYXc7Ci0Jc3RydWN0IGNpZnNfc2lkICpjd3NpZDsKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqdG1wOworCXN0cnVjdCBjaWZzX3NpZF9pZCAqcHNpZGlkOwogCi0JaWYgKCFjdHNpZCkKLQkJcmV0dXJuIC0xOwotCi0JZm9yIChpID0gMDsgaSA8IE5VTV9XS19TSURTOyArK2kpIHsKLQkJY3dzaWQgPSAmKHdrc2lkYXJyW2ldLmNpZnNzaWQpOwotCi0JCS8qIGNvbXBhcmUgdGhlIHJldmlzaW9uICovCi0JCWlmIChjdHNpZC0+cmV2aXNpb24gIT0gY3dzaWQtPnJldmlzaW9uKQotCQkJY29udGludWU7Ci0KLQkJLyogY29tcGFyZSBhbGwgb2YgdGhlIHNpeCBhdXRoIHZhbHVlcyAqLwotCQlmb3IgKGogPSAwOyBqIDwgNjsgKytqKSB7Ci0JCQlpZiAoY3RzaWQtPmF1dGhvcml0eVtqXSAhPSBjd3NpZC0+YXV0aG9yaXR5W2pdKQotCQkJCWJyZWFrOworCW5vZGUgPSByYl9maXJzdChyb290KTsKKwl3aGlsZSAobm9kZSkgeworCQl0bXAgPSBub2RlOworCQlub2RlID0gcmJfbmV4dCh0bXApOworCQlwc2lkaWQgPSByYl9lbnRyeSh0bXAsIHN0cnVjdCBjaWZzX3NpZF9pZCwgcmJub2RlKTsKKwkJaWYgKG5yX3RvX3NjYW4gPT0gMCB8fCAqbnJfZGVsID09IG5yX3RvX3NjYW4pCisJCQkrKygqbnJfcmVtKTsKKwkJZWxzZSB7CisJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBwc2lkaWQtPnRpbWUgKyBTSURfTUFQX0VYUElSRSkKKwkJCQkJCSYmIHBzaWRpZC0+cmVmY291bnQgPT0gMCkgeworCQkJCXJiX2VyYXNlKHRtcCwgcm9vdCk7CisJCQkJKysoKm5yX2RlbCk7CisJCQl9IGVsc2UKKwkJCQkrKygqbnJfcmVtKTsKIAkJfQotCQlpZiAoaiA8IDYpCi0JCQljb250aW51ZTsgLyogYWxsIG9mIHRoZSBhdXRoIHZhbHVlcyBkaWQgbm90IG1hdGNoICovCisJfQorfQogCi0JCS8qIGNvbXBhcmUgYWxsIG9mIHRoZSBzdWJhdXRoIHZhbHVlcyBpZiBhbnkgKi8KLQkJbnVtX3NhdCA9IGN0c2lkLT5udW1fc3ViYXV0aDsKLQkJbnVtX3NhdyA9IGN3c2lkLT5udW1fc3ViYXV0aDsKLQkJbnVtX3N1YmF1dGggPSBudW1fc2F0IDwgbnVtX3NhdyA/IG51bV9zYXQgOiBudW1fc2F3OwotCQlpZiAobnVtX3N1YmF1dGgpIHsKLQkJCWZvciAoaiA9IDA7IGogPCBudW1fc3ViYXV0aDsgKytqKSB7Ci0JCQkJaWYgKGN0c2lkLT5zdWJfYXV0aFtqXSAhPSBjd3NpZC0+c3ViX2F1dGhbal0pCi0JCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKGogPCBudW1fc3ViYXV0aCkKLQkJCQljb250aW51ZTsgLyogYWxsIHN1Yl9hdXRoIHZhbHVlcyBkbyBub3QgbWF0Y2ggKi8KKy8qCisgKiBSdW4gaWRtYXAgY2FjaGUgc2hyaW5rZXIuCisgKi8KK3N0YXRpYyBpbnQKK2NpZnNfaWRtYXBfc2hyaW5rZXIoc3RydWN0IHNocmlua2VyICpzaHJpbmssIGludCBucl90b19zY2FuLCBnZnBfdCBnZnBfbWFzaykKK3sKKwlpbnQgbnJfZGVsID0gMDsKKwlpbnQgbnJfcmVtID0gMDsKKwlzdHJ1Y3QgcmJfcm9vdCAqcm9vdDsKKworCXJvb3QgPSAmdWlkdHJlZTsKKwlzcGluX2xvY2soJnNpZHVpZGxvY2spOworCXNocmlua19pZG1hcF90cmVlKHJvb3QsIG5yX3RvX3NjYW4sICZucl9yZW0sICZucl9kZWwpOworCXNwaW5fdW5sb2NrKCZzaWR1aWRsb2NrKTsKKworCXJvb3QgPSAmZ2lkdHJlZTsKKwlzcGluX2xvY2soJnNpZGdpZGxvY2spOworCXNocmlua19pZG1hcF90cmVlKHJvb3QsIG5yX3RvX3NjYW4sICZucl9yZW0sICZucl9kZWwpOworCXNwaW5fdW5sb2NrKCZzaWRnaWRsb2NrKTsKKworCXJldHVybiBucl9yZW07Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgY2lmc19zaHJpbmtlciA9IHsKKwkuc2hyaW5rID0gY2lmc19pZG1hcF9zaHJpbmtlciwKKwkuc2Vla3MgPSBERUZBVUxUX1NFRUtTLAorfTsKKworc3RhdGljIGludAorY2lmc19pZG1hcF9rZXlfaW5zdGFudGlhdGUoc3RydWN0IGtleSAqa2V5LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YWxlbikKK3sKKwljaGFyICpwYXlsb2FkOworCisJcGF5bG9hZCA9IGttYWxsb2MoZGF0YWxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwYXlsb2FkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbWNweShwYXlsb2FkLCBkYXRhLCBkYXRhbGVuKTsKKwlrZXktPnBheWxvYWQuZGF0YSA9IHBheWxvYWQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorY2lmc19pZG1hcF9rZXlfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpCit7CisJa2ZyZWUoa2V5LT5wYXlsb2FkLmRhdGEpOworfQorCitzdHJ1Y3Qga2V5X3R5cGUgY2lmc19pZG1hcF9rZXlfdHlwZSA9IHsKKwkubmFtZSAgICAgICAgPSAiY2lmcy5pZG1hcCIsCisJLmluc3RhbnRpYXRlID0gY2lmc19pZG1hcF9rZXlfaW5zdGFudGlhdGUsCisJLmRlc3Ryb3kgICAgID0gY2lmc19pZG1hcF9rZXlfZGVzdHJveSwKKwkuZGVzY3JpYmUgICAgPSB1c2VyX2Rlc2NyaWJlLAorCS5tYXRjaCAgICAgICA9IHVzZXJfbWF0Y2gsCit9OworCitzdGF0aWMgdm9pZAorc2lkX3RvX3N0cihzdHJ1Y3QgY2lmc19zaWQgKnNpZHB0ciwgY2hhciAqc2lkc3RyKQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgc2F2YWw7CisJY2hhciAqc3RycHRyOworCisJc3RycHRyID0gc2lkc3RyOworCisJc3ByaW50ZihzdHJwdHIsICIlcyIsICJTIik7CisJc3RycHRyID0gc2lkc3RyICsgc3RybGVuKHNpZHN0cik7CisKKwlzcHJpbnRmKHN0cnB0ciwgIi0lZCIsIHNpZHB0ci0+cmV2aXNpb24pOworCXN0cnB0ciA9IHNpZHN0ciArIHN0cmxlbihzaWRzdHIpOworCisJZm9yIChpID0gMDsgaSA8IDY7ICsraSkgeworCQlpZiAoc2lkcHRyLT5hdXRob3JpdHlbaV0pIHsKKwkJCXNwcmludGYoc3RycHRyLCAiLSVkIiwgc2lkcHRyLT5hdXRob3JpdHlbaV0pOworCQkJc3RycHRyID0gc2lkc3RyICsgc3RybGVuKHNpZHN0cik7CiAJCX0KLQotCQljRllJKDEsICJtYXRjaGluZyBzaWQ6ICVzXG4iLCB3a3NpZGFycltpXS5zaWRuYW1lKTsKLQkJcmV0dXJuIDA7IC8qIHNpZHMgY29tcGFyZS9tYXRjaCAqLwogCX0KIAotCWNGWUkoMSwgIk5vIG1hdGNoaW5nIHNpZCIpOwotCXJldHVybiAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgc2lkcHRyLT5udW1fc3ViYXV0aDsgKytpKSB7CisJCXNhdmFsID0gbGUzMl90b19jcHUoc2lkcHRyLT5zdWJfYXV0aFtpXSk7CisJCXNwcmludGYoc3RycHRyLCAiLSVsZCIsIHNhdmFsKTsKKwkJc3RycHRyID0gc2lkc3RyICsgc3RybGVuKHNpZHN0cik7CisJfQorfQorCitzdGF0aWMgdm9pZAoraWRfcmJfaW5zZXJ0KHN0cnVjdCByYl9yb290ICpyb290LCBzdHJ1Y3QgY2lmc19zaWQgKnNpZHB0ciwKKwkJc3RydWN0IGNpZnNfc2lkX2lkICoqcHNpZGlkLCBjaGFyICp0eXBlc3RyKQoreworCWludCByYzsKKwljaGFyICpzdHJwdHI7CisJc3RydWN0IHJiX25vZGUgKm5vZGUgPSByb290LT5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCByYl9ub2RlICoqbGlua3RvID0gJihyb290LT5yYl9ub2RlKTsKKwlzdHJ1Y3QgY2lmc19zaWRfaWQgKmxzaWRpZDsKKworCXdoaWxlIChub2RlKSB7CisJCWxzaWRpZCA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBjaWZzX3NpZF9pZCwgcmJub2RlKTsKKwkJcGFyZW50ID0gbm9kZTsKKwkJcmMgPSBjb21wYXJlX3NpZHMoc2lkcHRyLCAmKChsc2lkaWQpLT5zaWQpKTsKKwkJaWYgKHJjID4gMCkgeworCQkJbGlua3RvID0gJihub2RlLT5yYl9sZWZ0KTsKKwkJCW5vZGUgPSBub2RlLT5yYl9sZWZ0OworCQl9IGVsc2UgaWYgKHJjIDwgMCkgeworCQkJbGlua3RvID0gJihub2RlLT5yYl9yaWdodCk7CisJCQlub2RlID0gbm9kZS0+cmJfcmlnaHQ7CisJCX0KKwl9CisKKwltZW1jcHkoJigqcHNpZGlkKS0+c2lkLCBzaWRwdHIsIHNpemVvZihzdHJ1Y3QgY2lmc19zaWQpKTsKKwkoKnBzaWRpZCktPnRpbWUgPSBqaWZmaWVzIC0gKFNJRF9NQVBfUkVUUlkgKyAxKTsKKwkoKnBzaWRpZCktPnJlZmNvdW50ID0gMDsKKworCXNwcmludGYoKCpwc2lkaWQpLT5zaWRzdHIsICIlcyIsIHR5cGVzdHIpOworCXN0cnB0ciA9ICgqcHNpZGlkKS0+c2lkc3RyICsgc3RybGVuKCgqcHNpZGlkKS0+c2lkc3RyKTsKKwlzaWRfdG9fc3RyKCYoKnBzaWRpZCktPnNpZCwgc3RycHRyKTsKKworCWNsZWFyX2JpdChTSURfSURfUEVORElORywgJigqcHNpZGlkKS0+c3RhdGUpOworCWNsZWFyX2JpdChTSURfSURfTUFQUEVELCAmKCpwc2lkaWQpLT5zdGF0ZSk7CisKKwlyYl9saW5rX25vZGUoJigqcHNpZGlkKS0+cmJub2RlLCBwYXJlbnQsIGxpbmt0byk7CisJcmJfaW5zZXJ0X2NvbG9yKCYoKnBzaWRpZCktPnJibm9kZSwgcm9vdCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2lmc19zaWRfaWQgKgoraWRfcmJfc2VhcmNoKHN0cnVjdCByYl9yb290ICpyb290LCBzdHJ1Y3QgY2lmc19zaWQgKnNpZHB0cikKK3sKKwlpbnQgcmM7CisJc3RydWN0IHJiX25vZGUgKm5vZGUgPSByb290LT5yYl9ub2RlOworCXN0cnVjdCBjaWZzX3NpZF9pZCAqbHNpZGlkOworCisJd2hpbGUgKG5vZGUpIHsKKwkJbHNpZGlkID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGNpZnNfc2lkX2lkLCByYm5vZGUpOworCQlyYyA9IGNvbXBhcmVfc2lkcyhzaWRwdHIsICYoKGxzaWRpZCktPnNpZCkpOworCQlpZiAocmMgPiAwKSB7CisJCQlub2RlID0gbm9kZS0+cmJfbGVmdDsKKwkJfSBlbHNlIGlmIChyYyA8IDApIHsKKwkJCW5vZGUgPSBub2RlLT5yYl9yaWdodDsKKwkJfSBlbHNlIC8qIG5vZGUgZm91bmQgKi8KKwkJCXJldHVybiBsc2lkaWQ7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK3NpZGlkX3BlbmRpbmdfd2FpdCh2b2lkICp1bnVzZWQpCit7CisJc2NoZWR1bGUoKTsKKwlyZXR1cm4gc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgPyAtRVJFU1RBUlRTWVMgOiAwOworfQorCitzdGF0aWMgaW50CitzaWRfdG9faWQoc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiwgc3RydWN0IGNpZnNfc2lkICpwc2lkLAorCQlzdHJ1Y3QgY2lmc19mYXR0ciAqZmF0dHIsIHVpbnQgc2lkdHlwZSkKK3sKKwlpbnQgcmM7CisJdW5zaWduZWQgbG9uZyBjaWQ7CisJc3RydWN0IGtleSAqaWRrZXk7CisJY29uc3Qgc3RydWN0IGNyZWQgKnNhdmVkX2NyZWQ7CisJc3RydWN0IGNpZnNfc2lkX2lkICpwc2lkaWQsICpucHNpZGlkOworCXN0cnVjdCByYl9yb290ICpjaWR0cmVlOworCXNwaW5sb2NrX3QgKmNpZGxvY2s7CisKKwlpZiAoc2lkdHlwZSA9PSBTSURPV05FUikgeworCQljaWQgPSBjaWZzX3NiLT5tbnRfdWlkOyAvKiBkZWZhdWx0IHVpZCwgaW4gY2FzZSB1cGNhbGwgZmFpbHMgKi8KKwkJY2lkbG9jayA9ICZzaWR1aWRsb2NrOworCQljaWR0cmVlID0gJnVpZHRyZWU7CisJfSBlbHNlIGlmIChzaWR0eXBlID09IFNJREdST1VQKSB7CisJCWNpZCA9IGNpZnNfc2ItPm1udF9naWQ7IC8qIGRlZmF1bHQgZ2lkLCBpbiBjYXNlIHVwY2FsbCBmYWlscyAqLworCQljaWRsb2NrID0gJnNpZGdpZGxvY2s7CisJCWNpZHRyZWUgPSAmZ2lkdHJlZTsKKwl9IGVsc2UKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlzcGluX2xvY2soY2lkbG9jayk7CisJcHNpZGlkID0gaWRfcmJfc2VhcmNoKGNpZHRyZWUsIHBzaWQpOworCisJaWYgKCFwc2lkaWQpIHsgLyogbm9kZSBkb2VzIG5vdCBleGlzdCwgYWxsb2NhdGUgb25lICYgYXR0ZW1wdCBhZGRpbmcgKi8KKwkJc3Bpbl91bmxvY2soY2lkbG9jayk7CisJCW5wc2lkaWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2lmc19zaWRfaWQpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFucHNpZGlkKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJbnBzaWRpZC0+c2lkc3RyID0ga21hbGxvYyhTSURMRU4sIEdGUF9LRVJORUwpOworCQlpZiAoIW5wc2lkaWQtPnNpZHN0cikgeworCQkJa2ZyZWUobnBzaWRpZCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCXNwaW5fbG9jayhjaWRsb2NrKTsKKwkJcHNpZGlkID0gaWRfcmJfc2VhcmNoKGNpZHRyZWUsIHBzaWQpOworCQlpZiAocHNpZGlkKSB7IC8qIG5vZGUgaGFwcGVuZWQgdG8gZ2V0IGluc2VydGVkIG1lYW53aGlsZSAqLworCQkJKytwc2lkaWQtPnJlZmNvdW50OworCQkJc3Bpbl91bmxvY2soY2lkbG9jayk7CisJCQlrZnJlZShucHNpZGlkLT5zaWRzdHIpOworCQkJa2ZyZWUobnBzaWRpZCk7CisJCX0gZWxzZSB7CisJCQlwc2lkaWQgPSBucHNpZGlkOworCQkJaWRfcmJfaW5zZXJ0KGNpZHRyZWUsIHBzaWQsICZwc2lkaWQsCisJCQkJCXNpZHR5cGUgPT0gU0lET1dORVIgPyAib3M6IiA6ICJnczoiKTsKKwkJCSsrcHNpZGlkLT5yZWZjb3VudDsKKwkJCXNwaW5fdW5sb2NrKGNpZGxvY2spOworCQl9CisJfSBlbHNlIHsKKwkJKytwc2lkaWQtPnJlZmNvdW50OworCQlzcGluX3VubG9jayhjaWRsb2NrKTsKKwl9CisKKwkvKgorCSAqIElmIHdlIGFyZSBoZXJlLCBpdCBpcyBzYWZlIHRvIGFjY2VzcyBwc2lkaWQgYW5kIGl0cyBmaWVsZHMKKwkgKiBzaW5jZSBhIHJlZmVyZW5jZSB3YXMgdGFrZW4gZWFybGllciB3aGlsZSBob2xkaW5nIHRoZSBzcGlubG9jay4KKwkgKiBBIHJlZmVyZW5jZSBvbiB0aGUgbm9kZSBpcyBwdXQgd2l0aG91dCBob2xkaW5nIHRoZSBzcGlubG9jaworCSAqIGFuZCBpdCBpcyBPSyB0byBkbyBzbyBpbiB0aGlzIGNhc2UsIHNocmlua2VyIHdpbGwgbm90IGVyYXNlCisJICogdGhpcyBub2RlIHVudGlsIGFsbCByZWZlcmVuY2VzIGFyZSBwdXQgYW5kIHdlIGRvIG5vdCBhY2Nlc3MKKwkgKiBhbnkgZmllbGRzIG9mIHRoZSBub2RlIGFmdGVyIGEgcmVmZXJlbmNlIGlzIHB1dCAuCisJICovCisJaWYgKHRlc3RfYml0KFNJRF9JRF9NQVBQRUQsICZwc2lkaWQtPnN0YXRlKSkgeworCQljaWQgPSBwc2lkaWQtPmlkOworCQlwc2lkaWQtPnRpbWUgPSBqaWZmaWVzOyAvKiB1cGRhdGUgdHMgZm9yIGFjY2Vzc2luZyAqLworCQlnb3RvIHNpZF90b19pZF9vdXQ7CisJfQorCisJaWYgKHRpbWVfYWZ0ZXIocHNpZGlkLT50aW1lICsgU0lEX01BUF9SRVRSWSwgamlmZmllcykpCisJCWdvdG8gc2lkX3RvX2lkX291dDsKKworCWlmICghdGVzdF9hbmRfc2V0X2JpdChTSURfSURfUEVORElORywgJnBzaWRpZC0+c3RhdGUpKSB7CisJCXNhdmVkX2NyZWQgPSBvdmVycmlkZV9jcmVkcyhyb290X2NyZWQpOworCQlpZGtleSA9IHJlcXVlc3Rfa2V5KCZjaWZzX2lkbWFwX2tleV90eXBlLCBwc2lkaWQtPnNpZHN0ciwgIiIpOworCQlpZiAoSVNfRVJSKGlka2V5KSkKKwkJCWNGWUkoMSwgIiVzOiBDYW4ndCBtYXAgU0lEIHRvIGFuIGlkIiwgX19mdW5jX18pOworCQllbHNlIHsKKwkJCWNpZCA9ICoodW5zaWduZWQgbG9uZyAqKWlka2V5LT5wYXlsb2FkLnZhbHVlOworCQkJcHNpZGlkLT5pZCA9IGNpZDsKKwkJCXNldF9iaXQoU0lEX0lEX01BUFBFRCwgJnBzaWRpZC0+c3RhdGUpOworCQkJa2V5X3B1dChpZGtleSk7CisJCQlrZnJlZShwc2lkaWQtPnNpZHN0cik7CisJCX0KKwkJcmV2ZXJ0X2NyZWRzKHNhdmVkX2NyZWQpOworCQlwc2lkaWQtPnRpbWUgPSBqaWZmaWVzOyAvKiB1cGRhdGUgdHMgZm9yIGFjY2Vzc2luZyAqLworCQljbGVhcl9iaXQoU0lEX0lEX1BFTkRJTkcsICZwc2lkaWQtPnN0YXRlKTsKKwkJd2FrZV91cF9iaXQoJnBzaWRpZC0+c3RhdGUsIFNJRF9JRF9QRU5ESU5HKTsKKwl9IGVsc2UgeworCQlyYyA9IHdhaXRfb25fYml0KCZwc2lkaWQtPnN0YXRlLCBTSURfSURfUEVORElORywKKwkJCQlzaWRpZF9wZW5kaW5nX3dhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCWlmIChyYykgeworCQkJY0ZZSSgxLCAiJXM6IHNpZGlkX3BlbmRpbmdfd2FpdCBpbnRlcnJ1cHRlZCAlZCIsCisJCQkJCV9fZnVuY19fLCByYyk7CisJCQktLXBzaWRpZC0+cmVmY291bnQ7IC8qIGRlY3JlbWVudGVkIHdpdGhvdXQgc3BpbmxvY2sgKi8KKwkJCXJldHVybiByYzsKKwkJfQorCQlpZiAodGVzdF9iaXQoU0lEX0lEX01BUFBFRCwgJnBzaWRpZC0+c3RhdGUpKQorCQkJY2lkID0gcHNpZGlkLT5pZDsKKwl9CisKK3NpZF90b19pZF9vdXQ6CisJLS1wc2lkaWQtPnJlZmNvdW50OyAvKiBkZWNyZW1lbnRlZCB3aXRob3V0IHNwaW5sb2NrICovCisJaWYgKHNpZHR5cGUgPT0gU0lET1dORVIpCisJCWZhdHRyLT5jZl91aWQgPSBjaWQ7CisJZWxzZQorCQlmYXR0ci0+Y2ZfZ2lkID0gY2lkOworCisJcmV0dXJuIDA7Cit9CisKK2ludAoraW5pdF9jaWZzX2lkbWFwKHZvaWQpCit7CisJc3RydWN0IGNyZWQgKmNyZWQ7CisJc3RydWN0IGtleSAqa2V5cmluZzsKKwlpbnQgcmV0OworCisJY0ZZSSgxLCAiUmVnaXN0ZXJpbmcgdGhlICVzIGtleSB0eXBlXG4iLCBjaWZzX2lkbWFwX2tleV90eXBlLm5hbWUpOworCisJLyogY3JlYXRlIGFuIG92ZXJyaWRlIGNyZWRlbnRpYWwgc2V0IHdpdGggYSBzcGVjaWFsIHRocmVhZCBrZXlyaW5nIGluCisJICogd2hpY2ggcmVxdWVzdHMgYXJlIGNhY2hlZAorCSAqCisJICogdGhpcyBpcyB1c2VkIHRvIHByZXZlbnQgbWFsaWNpb3VzIHJlZGlyZWN0aW9ucyBmcm9tIGJlaW5nIGluc3RhbGxlZAorCSAqIHdpdGggYWRkX2tleSgpLgorCSAqLworCWNyZWQgPSBwcmVwYXJlX2tlcm5lbF9jcmVkKE5VTEwpOworCWlmICghY3JlZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlrZXlyaW5nID0ga2V5X2FsbG9jKCZrZXlfdHlwZV9rZXlyaW5nLCAiLmNpZnNfaWRtYXAiLCAwLCAwLCBjcmVkLAorCQkJICAgIChLRVlfUE9TX0FMTCAmIH5LRVlfUE9TX1NFVEFUVFIpIHwKKwkJCSAgICBLRVlfVVNSX1ZJRVcgfCBLRVlfVVNSX1JFQUQsCisJCQkgICAgS0VZX0FMTE9DX05PVF9JTl9RVU9UQSk7CisJaWYgKElTX0VSUihrZXlyaW5nKSkgeworCQlyZXQgPSBQVFJfRVJSKGtleXJpbmcpOworCQlnb3RvIGZhaWxlZF9wdXRfY3JlZDsKKwl9CisKKwlyZXQgPSBrZXlfaW5zdGFudGlhdGVfYW5kX2xpbmsoa2V5cmluZywgTlVMTCwgMCwgTlVMTCwgTlVMTCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkX3B1dF9rZXk7CisKKwlyZXQgPSByZWdpc3Rlcl9rZXlfdHlwZSgmY2lmc19pZG1hcF9rZXlfdHlwZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkX3B1dF9rZXk7CisKKwkvKiBpbnN0cnVjdCByZXF1ZXN0X2tleSgpIHRvIHVzZSB0aGlzIHNwZWNpYWwga2V5cmluZyBhcyBhIGNhY2hlIGZvcgorCSAqIHRoZSByZXN1bHRzIGl0IGxvb2tzIHVwICovCisJY3JlZC0+dGhyZWFkX2tleXJpbmcgPSBrZXlyaW5nOworCWNyZWQtPmppdF9rZXlyaW5nID0gS0VZX1JFUUtFWV9ERUZMX1RIUkVBRF9LRVlSSU5HOworCXJvb3RfY3JlZCA9IGNyZWQ7CisKKwlzcGluX2xvY2tfaW5pdCgmc2lkdWlkbG9jayk7CisJdWlkdHJlZSA9IFJCX1JPT1Q7CisJc3Bpbl9sb2NrX2luaXQoJnNpZGdpZGxvY2spOworCWdpZHRyZWUgPSBSQl9ST09UOworCisJcmVnaXN0ZXJfc2hyaW5rZXIoJmNpZnNfc2hyaW5rZXIpOworCisJY0ZZSSgxLCAiY2lmcyBpZG1hcCBrZXlyaW5nOiAlZFxuIiwga2V5X3NlcmlhbChrZXlyaW5nKSk7CisJcmV0dXJuIDA7CisKK2ZhaWxlZF9wdXRfa2V5OgorCWtleV9wdXQoa2V5cmluZyk7CitmYWlsZWRfcHV0X2NyZWQ6CisJcHV0X2NyZWQoY3JlZCk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZAorZXhpdF9jaWZzX2lkbWFwKHZvaWQpCit7CisJa2V5X3Jldm9rZShyb290X2NyZWQtPnRocmVhZF9rZXlyaW5nKTsKKwl1bnJlZ2lzdGVyX2tleV90eXBlKCZjaWZzX2lkbWFwX2tleV90eXBlKTsKKwlwdXRfY3JlZChyb290X2NyZWQpOworCXVucmVnaXN0ZXJfc2hyaW5rZXIoJmNpZnNfc2hyaW5rZXIpOworCWNGWUkoMSwgIlVucmVnaXN0ZXJlZCAlcyBrZXkgdHlwZVxuIiwgY2lmc19pZG1hcF9rZXlfdHlwZS5uYW1lKTsKK30KKwordm9pZAorY2lmc19kZXN0cm95X2lkbWFwdHJlZXModm9pZCkKK3sKKwlzdHJ1Y3QgcmJfcm9vdCAqcm9vdDsKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKworCXJvb3QgPSAmdWlkdHJlZTsKKwlzcGluX2xvY2soJnNpZHVpZGxvY2spOworCXdoaWxlICgobm9kZSA9IHJiX2ZpcnN0KHJvb3QpKSkKKwkJcmJfZXJhc2Uobm9kZSwgcm9vdCk7CisJc3Bpbl91bmxvY2soJnNpZHVpZGxvY2spOworCisJcm9vdCA9ICZnaWR0cmVlOworCXNwaW5fbG9jaygmc2lkZ2lkbG9jayk7CisJd2hpbGUgKChub2RlID0gcmJfZmlyc3Qocm9vdCkpKQorCQlyYl9lcmFzZShub2RlLCByb290KTsKKwlzcGluX3VubG9jaygmc2lkZ2lkbG9jayk7CiB9CiAKIC8qIGlmIHRoZSB0d28gU0lEcyAocm91Z2hseSBlcXVpdmFsZW50IHRvIGEgVVVJRCBmb3IgYSB1c2VyIG9yIGdyb3VwKSBhcmUKQEAgLTEwNCwxNiArNDMxLDI0IEBACiAJaW50IG51bV9zdWJhdXRoLCBudW1fc2F0LCBudW1fc2F3OwogCiAJaWYgKCghY3RzaWQpIHx8ICghY3dzaWQpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIDE7CiAKIAkvKiBjb21wYXJlIHRoZSByZXZpc2lvbiAqLwotCWlmIChjdHNpZC0+cmV2aXNpb24gIT0gY3dzaWQtPnJldmlzaW9uKQotCQlyZXR1cm4gMDsKKwlpZiAoY3RzaWQtPnJldmlzaW9uICE9IGN3c2lkLT5yZXZpc2lvbikgeworCQlpZiAoY3RzaWQtPnJldmlzaW9uID4gY3dzaWQtPnJldmlzaW9uKQorCQkJcmV0dXJuIDE7CisJCWVsc2UKKwkJCXJldHVybiAtMTsKKwl9CiAKIAkvKiBjb21wYXJlIGFsbCBvZiB0aGUgc2l4IGF1dGggdmFsdWVzICovCiAJZm9yIChpID0gMDsgaSA8IDY7ICsraSkgewotCQlpZiAoY3RzaWQtPmF1dGhvcml0eVtpXSAhPSBjd3NpZC0+YXV0aG9yaXR5W2ldKQotCQkJcmV0dXJuIDA7CisJCWlmIChjdHNpZC0+YXV0aG9yaXR5W2ldICE9IGN3c2lkLT5hdXRob3JpdHlbaV0pIHsKKwkJCWlmIChjdHNpZC0+YXV0aG9yaXR5W2ldID4gY3dzaWQtPmF1dGhvcml0eVtpXSkKKwkJCQlyZXR1cm4gMTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gLTE7CisJCX0KIAl9CiAKIAkvKiBjb21wYXJlIGFsbCBvZiB0aGUgc3ViYXV0aCB2YWx1ZXMgaWYgYW55ICovCkBAIC0xMjIsMTIgKzQ1NywxNiBAQAogCW51bV9zdWJhdXRoID0gbnVtX3NhdCA8IG51bV9zYXcgPyBudW1fc2F0IDogbnVtX3NhdzsKIAlpZiAobnVtX3N1YmF1dGgpIHsKIAkJZm9yIChpID0gMDsgaSA8IG51bV9zdWJhdXRoOyArK2kpIHsKLQkJCWlmIChjdHNpZC0+c3ViX2F1dGhbaV0gIT0gY3dzaWQtPnN1Yl9hdXRoW2ldKQotCQkJCXJldHVybiAwOworCQkJaWYgKGN0c2lkLT5zdWJfYXV0aFtpXSAhPSBjd3NpZC0+c3ViX2F1dGhbaV0pIHsKKwkJCQlpZiAoY3RzaWQtPnN1Yl9hdXRoW2ldID4gY3dzaWQtPnN1Yl9hdXRoW2ldKQorCQkJCQlyZXR1cm4gMTsKKwkJCQllbHNlCisJCQkJCXJldHVybiAtMTsKKwkJCX0KIAkJfQogCX0KIAotCXJldHVybiAxOyAvKiBzaWRzIGNvbXBhcmUvbWF0Y2ggKi8KKwlyZXR1cm4gMDsgLyogc2lkcyBjb21wYXJlL21hdGNoICovCiB9CiAKIApAQCAtMzgyLDIyICs3MjEsMjIgQEAKICNpZmRlZiBDT05GSUdfQ0lGU19ERUJVRzIKIAkJCWR1bXBfYWNlKHBwYWNlW2ldLCBlbmRfb2ZfYWNsKTsKICNlbmRpZgotCQkJaWYgKGNvbXBhcmVfc2lkcygmKHBwYWNlW2ldLT5zaWQpLCBwb3duZXJzaWQpKQorCQkJaWYgKGNvbXBhcmVfc2lkcygmKHBwYWNlW2ldLT5zaWQpLCBwb3duZXJzaWQpID09IDApCiAJCQkJYWNjZXNzX2ZsYWdzX3RvX21vZGUocHBhY2VbaV0tPmFjY2Vzc19yZXEsCiAJCQkJCQkgICAgIHBwYWNlW2ldLT50eXBlLAogCQkJCQkJICAgICAmZmF0dHItPmNmX21vZGUsCiAJCQkJCQkgICAgICZ1c2VyX21hc2spOwotCQkJaWYgKGNvbXBhcmVfc2lkcygmKHBwYWNlW2ldLT5zaWQpLCBwZ3Jwc2lkKSkKKwkJCWlmIChjb21wYXJlX3NpZHMoJihwcGFjZVtpXS0+c2lkKSwgcGdycHNpZCkgPT0gMCkKIAkJCQlhY2Nlc3NfZmxhZ3NfdG9fbW9kZShwcGFjZVtpXS0+YWNjZXNzX3JlcSwKIAkJCQkJCSAgICAgcHBhY2VbaV0tPnR5cGUsCiAJCQkJCQkgICAgICZmYXR0ci0+Y2ZfbW9kZSwKIAkJCQkJCSAgICAgJmdyb3VwX21hc2spOwotCQkJaWYgKGNvbXBhcmVfc2lkcygmKHBwYWNlW2ldLT5zaWQpLCAmc2lkX2V2ZXJ5b25lKSkKKwkJCWlmIChjb21wYXJlX3NpZHMoJihwcGFjZVtpXS0+c2lkKSwgJnNpZF9ldmVyeW9uZSkgPT0gMCkKIAkJCQlhY2Nlc3NfZmxhZ3NfdG9fbW9kZShwcGFjZVtpXS0+YWNjZXNzX3JlcSwKIAkJCQkJCSAgICAgcHBhY2VbaV0tPnR5cGUsCiAJCQkJCQkgICAgICZmYXR0ci0+Y2ZfbW9kZSwKIAkJCQkJCSAgICAgJm90aGVyX21hc2spOwotCQkJaWYgKGNvbXBhcmVfc2lkcygmKHBwYWNlW2ldLT5zaWQpLCAmc2lkX2F1dGh1c2VycykpCisJCQlpZiAoY29tcGFyZV9zaWRzKCYocHBhY2VbaV0tPnNpZCksICZzaWRfYXV0aHVzZXJzKSA9PSAwKQogCQkJCWFjY2Vzc19mbGFnc190b19tb2RlKHBwYWNlW2ldLT5hY2Nlc3NfcmVxLAogCQkJCQkJICAgICBwcGFjZVtpXS0+dHlwZSwKIAkJCQkJCSAgICAgJmZhdHRyLT5jZl9tb2RlLApAQCAtNDc1LDEwICs4MTQsMTAgQEAKIAogCiAvKiBDb252ZXJ0IENJRlMgQUNMIHRvIFBPU0lYIGZvcm0gKi8KLXN0YXRpYyBpbnQgcGFyc2Vfc2VjX2Rlc2Moc3RydWN0IGNpZnNfbnRzZCAqcG50c2QsIGludCBhY2xfbGVuLAotCQkJICBzdHJ1Y3QgY2lmc19mYXR0ciAqZmF0dHIpCitzdGF0aWMgaW50IHBhcnNlX3NlY19kZXNjKHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IsCisJCXN0cnVjdCBjaWZzX250c2QgKnBudHNkLCBpbnQgYWNsX2xlbiwgc3RydWN0IGNpZnNfZmF0dHIgKmZhdHRyKQogewotCWludCByYzsKKwlpbnQgcmMgPSAwOwogCXN0cnVjdCBjaWZzX3NpZCAqb3duZXJfc2lkX3B0ciwgKmdyb3VwX3NpZF9wdHI7CiAJc3RydWN0IGNpZnNfYWNsICpkYWNsX3B0cjsgLyogbm8gbmVlZCBmb3IgU0FDTCBwdHIgKi8KIAljaGFyICplbmRfb2ZfYWNsID0gKChjaGFyICopcG50c2QpICsgYWNsX2xlbjsKQEAgLTUwMCwxMiArODM5LDI2IEBACiAJCSBsZTMyX3RvX2NwdShwbnRzZC0+c2FjbG9mZnNldCksIGRhY2xvZmZzZXQpOwogLyoJY2lmc19kdW1wX21lbSgib3duZXJfc2lkOiAiLCBvd25lcl9zaWRfcHRyLCA2NCk7ICovCiAJcmMgPSBwYXJzZV9zaWQob3duZXJfc2lkX3B0ciwgZW5kX29mX2FjbCk7Ci0JaWYgKHJjKQorCWlmIChyYykgeworCQljRllJKDEsICIlczogRXJyb3IgJWQgcGFyc2luZyBPd25lciBTSUQiLCBfX2Z1bmNfXywgcmMpOwogCQlyZXR1cm4gcmM7CisJfQorCXJjID0gc2lkX3RvX2lkKGNpZnNfc2IsIG93bmVyX3NpZF9wdHIsIGZhdHRyLCBTSURPV05FUik7CisJaWYgKHJjKSB7CisJCWNGWUkoMSwgIiVzOiBFcnJvciAlZCBtYXBwaW5nIE93bmVyIFNJRCB0byB1aWQiLCBfX2Z1bmNfXywgcmMpOworCQlyZXR1cm4gcmM7CisJfQogCiAJcmMgPSBwYXJzZV9zaWQoZ3JvdXBfc2lkX3B0ciwgZW5kX29mX2FjbCk7Ci0JaWYgKHJjKQorCWlmIChyYykgeworCQljRllJKDEsICIlczogRXJyb3IgJWQgbWFwcGluZyBPd25lciBTSUQgdG8gZ2lkIiwgX19mdW5jX18sIHJjKTsKIAkJcmV0dXJuIHJjOworCX0KKwlyYyA9IHNpZF90b19pZChjaWZzX3NiLCBncm91cF9zaWRfcHRyLCBmYXR0ciwgU0lER1JPVVApOworCWlmIChyYykgeworCQljRllJKDEsICIlczogRXJyb3IgJWQgbWFwcGluZyBHcm91cCBTSUQgdG8gZ2lkIiwgX19mdW5jX18sIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KIAogCWlmIChkYWNsb2Zmc2V0KQogCQlwYXJzZV9kYWNsKGRhY2xfcHRyLCBlbmRfb2ZfYWNsLCBvd25lcl9zaWRfcHRyLApAQCAtNTIwLDcgKzg3Myw3IEBACiAJbWVtY3B5KCh2b2lkICopKCYoY2lmc2NyZWQtPmdzaWQpKSwgKHZvaWQgKilncm91cF9zaWRfcHRyLAogCQkJc2l6ZW9mKHN0cnVjdCBjaWZzX3NpZCkpOyAqLwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiAKQEAgLTY4OCw3ICsxMDQxLDcgQEAKIH0KIAogLyogU2V0IGFuIEFDTCBvbiB0aGUgc2VydmVyICovCi1zdGF0aWMgaW50IHNldF9jaWZzX2FjbChzdHJ1Y3QgY2lmc19udHNkICpwbm50c2QsIF9fdTMyIGFjbGxlbiwKK2ludCBzZXRfY2lmc19hY2woc3RydWN0IGNpZnNfbnRzZCAqcG5udHNkLCBfX3UzMiBhY2xsZW4sCiAJCQkJc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqcGF0aCkKIHsKIAlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19TQihpbm9kZS0+aV9zYik7CkBAIC03MjcsNyArMTA4MCw3IEBACiAJCXJjID0gUFRSX0VSUihwbnRzZCk7CiAJCWNFUlJPUigxLCAiJXM6IGVycm9yICVkIGdldHRpbmcgc2VjIGRlc2MiLCBfX2Z1bmNfXywgcmMpOwogCX0gZWxzZSB7Ci0JCXJjID0gcGFyc2Vfc2VjX2Rlc2MocG50c2QsIGFjbGxlbiwgZmF0dHIpOworCQlyYyA9IHBhcnNlX3NlY19kZXNjKGNpZnNfc2IsIHBudHNkLCBhY2xsZW4sIGZhdHRyKTsKIAkJa2ZyZWUocG50c2QpOwogCQlpZiAocmMpCiAJCQljRVJST1IoMSwgInBhcnNlIHNlYyBkZXNjIGZhaWxlZCByYyA9ICVkIiwgcmMpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzYWNsLmggYi9mcy9jaWZzL2NpZnNhY2wuaAppbmRleCBjNGFlN2QwLi41YzkwMmM3IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNhY2wuaAorKysgYi9mcy9jaWZzL2NpZnNhY2wuaApAQCAtMzksNiArMzksMTUgQEAKICNkZWZpbmUgQUNDRVNTX0FMTE9XRUQJMAogI2RlZmluZSBBQ0NFU1NfREVOSUVECTEKIAorI2RlZmluZSBTSURPV05FUiAxCisjZGVmaW5lIFNJREdST1VQIDIKKyNkZWZpbmUgU0lETEVOIDE1MCAvKiBTLSAxIHJldmlzaW9uLSA2IGF1dGhvcml0aWVzLSBtYXggNSBzdWIgYXV0aG9yaXRpZXMgKi8KKworI2RlZmluZSBTSURfSURfTUFQUEVEIDAKKyNkZWZpbmUgU0lEX0lEX1BFTkRJTkcgMQorI2RlZmluZSBTSURfTUFQX0VYUElSRSAoMzYwMCAqIEhaKSAvKiBtYXAgZW50cnkgZXhwaXJlcyBhZnRlciBvbmUgaG91ciAqLworI2RlZmluZSBTSURfTUFQX1JFVFJZICgzMDAgKiBIWikgICAvKiB3YWl0IDUgbWludXRlcyBmb3IgbmV4dCBhdHRlbXB0IHRvIG1hcCAqLworCiBzdHJ1Y3QgY2lmc19udHNkIHsKIAlfX2xlMTYgcmV2aXNpb247IC8qIHJldmlzaW9uIGxldmVsICovCiAJX19sZTE2IHR5cGU7CkBAIC03NCw3ICs4MywyMSBAQAogCWNoYXIgc2lkbmFtZVtTSUROQU1FTEVOR1RIXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKLWV4dGVybiBpbnQgbWF0Y2hfc2lkKHN0cnVjdCBjaWZzX3NpZCAqKTsKK3N0cnVjdCBjaWZzX3NpZF9pZCB7CisJdW5zaWduZWQgaW50IHJlZmNvdW50OyAvKiBpbmNyZW1lbnQgd2l0aCBzcGlubG9jaywgZGVjcmVtZW50IHdpdGhvdXQgKi8KKwl1bnNpZ25lZCBsb25nIGlkOworCXVuc2lnbmVkIGxvbmcgdGltZTsKKwl1bnNpZ25lZCBsb25nIHN0YXRlOworCWNoYXIgKnNpZHN0cjsKKwlzdHJ1Y3QgcmJfbm9kZSByYm5vZGU7CisJc3RydWN0IGNpZnNfc2lkIHNpZDsKK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCitleHRlcm4gc3RydWN0IGtleV90eXBlIGNpZnNfaWRtYXBfa2V5X3R5cGU7CitleHRlcm4gY29uc3Qgc3RydWN0IGNyZWQgKnJvb3RfY3JlZDsKKyNlbmRpZiAvKiBLRVJORUwgKi8KKwogZXh0ZXJuIGludCBjb21wYXJlX3NpZHMoY29uc3Qgc3RydWN0IGNpZnNfc2lkICosIGNvbnN0IHN0cnVjdCBjaWZzX3NpZCAqKTsKIAogI2VuZGlmIC8qIF9DSUZTQUNMX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYyBiL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYwppbmRleCBkMWEwMTZiLi40NWMzZjc4IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNlbmNyeXB0LmMKKysrIGIvZnMvY2lmcy9jaWZzZW5jcnlwdC5jCkBAIC02MCw3ICs2MCw3IEBACiAJCXNlcnZlci0+c2Vzc2lvbl9rZXkucmVzcG9uc2UsIHNlcnZlci0+c2Vzc2lvbl9rZXkubGVuKTsKIAogCWNyeXB0b19zaGFzaF91cGRhdGUoJnNlcnZlci0+c2VjbWVjaC5zZGVzY21kNS0+c2hhc2gsCi0JCWNpZnNfcGR1LT5Qcm90b2NvbCwgY2lmc19wZHUtPnNtYl9idWZfbGVuZ3RoKTsKKwkJY2lmc19wZHUtPlByb3RvY29sLCBiZTMyX3RvX2NwdShjaWZzX3BkdS0+c21iX2J1Zl9sZW5ndGgpKTsKIAogCXJjID0gY3J5cHRvX3NoYXNoX2ZpbmFsKCZzZXJ2ZXItPnNlY21lY2guc2Rlc2NtZDUtPnNoYXNoLCBzaWduYXR1cmUpOwogCkBAIC0yNjgsMTAgKzI2OCwxMSBAQAogfQogCiAjaWZkZWYgQ09ORklHX0NJRlNfV0VBS19QV19IQVNICi12b2lkIGNhbGNfbGFubWFuX2hhc2goY29uc3QgY2hhciAqcGFzc3dvcmQsIGNvbnN0IGNoYXIgKmNyeXB0a2V5LCBib29sIGVuY3J5cHQsCitpbnQgY2FsY19sYW5tYW5faGFzaChjb25zdCBjaGFyICpwYXNzd29yZCwgY29uc3QgY2hhciAqY3J5cHRrZXksIGJvb2wgZW5jcnlwdCwKIAkJCWNoYXIgKmxubV9zZXNzaW9uX2tleSkKIHsKIAlpbnQgaTsKKwlpbnQgcmM7CiAJY2hhciBwYXNzd29yZF93aXRoX3BhZFtDSUZTX0VOQ1BXRF9TSVpFXTsKIAogCW1lbXNldChwYXNzd29yZF93aXRoX3BhZCwgMCwgQ0lGU19FTkNQV0RfU0laRSk7CkBAIC0yODIsNyArMjgzLDcgQEAKIAkJbWVtc2V0KGxubV9zZXNzaW9uX2tleSwgMCwgQ0lGU19TRVNTX0tFWV9TSVpFKTsKIAkJbWVtY3B5KGxubV9zZXNzaW9uX2tleSwgcGFzc3dvcmRfd2l0aF9wYWQsCiAJCQlDSUZTX0VOQ1BXRF9TSVpFKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAl9CiAKIAkvKiBjYWxjdWxhdGUgb2xkIHN0eWxlIHNlc3Npb24ga2V5ICovCkBAIC0yOTksMTAgKzMwMCw5IEBACiAJZm9yIChpID0gMDsgaSA8IENJRlNfRU5DUFdEX1NJWkU7IGkrKykKIAkJcGFzc3dvcmRfd2l0aF9wYWRbaV0gPSB0b3VwcGVyKHBhc3N3b3JkX3dpdGhfcGFkW2ldKTsKIAotCVNNQmVuY3J5cHQocGFzc3dvcmRfd2l0aF9wYWQsIGNyeXB0a2V5LCBsbm1fc2Vzc2lvbl9rZXkpOworCXJjID0gU01CZW5jcnlwdChwYXNzd29yZF93aXRoX3BhZCwgY3J5cHRrZXksIGxubV9zZXNzaW9uX2tleSk7CiAKLQkvKiBjbGVhciBwYXNzd29yZCBiZWZvcmUgd2UgcmV0dXJuL2ZyZWUgbWVtb3J5ICovCi0JbWVtc2V0KHBhc3N3b3JkX3dpdGhfcGFkLCAwLCBDSUZTX0VOQ1BXRF9TSVpFKTsKKwlyZXR1cm4gcmM7CiB9CiAjZW5kaWYgLyogQ0lGU19XRUFLX1BXX0hBU0ggKi8KIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZnMuYyBiL2ZzL2NpZnMvY2lmc2ZzLmMKaW5kZXggNWM0MTJiMy4uNDkzYjc0YyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZnMuYworKysgYi9mcy9jaWZzL2NpZnNmcy5jCkBAIC0xMjgsMjkgKzEyOCwyMiBAQAogCX0KIAljaWZzX3NiLT5iZGkucmFfcGFnZXMgPSBkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm8ucmFfcGFnZXM7CiAKLSNpZmRlZiBDT05GSUdfQ0lGU19ERlNfVVBDQUxMCi0JLyogY29weSBtb3VudCBwYXJhbXMgdG8gc2IgZm9yIHVzZSBpbiBzdWJtb3VudHMgKi8KLQkvKiBCQjogc2hvdWxkIHdlIG1vdmUgdGhpcyBhZnRlciB0aGUgbW91bnQgc28gd2UKLQkgKiBkbyBub3QgaGF2ZSB0byBkbyB0aGUgY29weSBvbiBmYWlsZWQgbW91bnRzPwotCSAqIEJCOiBNYXkgYmUgaXQgaXMgYmV0dGVyIHRvIGRvIHNpbXBsZSBjb3B5IGJlZm9yZQotCSAqIGNvbXBsZXggb3BlcmF0aW9uIChtb3VudCksIGFuZCBpbiBjYXNlIG9mIGZhaWwKLQkgKiBqdXN0IGV4aXQgaW5zdGVhZCBvZiBkb2luZyBtb3VudCBhbmQgYXR0ZW1wdGluZwotCSAqIHVuZG8gaXQgaWYgdGhpcyBjb3B5IGZhaWxzPyovCisJLyoKKwkgKiBDb3B5IG1vdW50IHBhcmFtcyB0byBzYiBmb3IgdXNlIGluIHN1Ym1vdW50cy4gQmV0dGVyIHRvIGRvCisJICogdGhlIGNvcHkgaGVyZSBhbmQgZGVhbCB3aXRoIHRoZSBlcnJvciBiZWZvcmUgY2xlYW51cCBnZXRzCisJICogY29tcGxpY2F0ZWQgcG9zdC1tb3VudC4KKwkgKi8KIAlpZiAoZGF0YSkgewotCQlpbnQgbGVuID0gc3RybGVuKGRhdGEpOwotCQljaWZzX3NiLT5tb3VudGRhdGEgPSBremFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOworCQljaWZzX3NiLT5tb3VudGRhdGEgPSBrc3RybmR1cChkYXRhLCBQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwogCQlpZiAoY2lmc19zYi0+bW91bnRkYXRhID09IE5VTEwpIHsKIAkJCWJkaV9kZXN0cm95KCZjaWZzX3NiLT5iZGkpOwogCQkJa2ZyZWUoc2ItPnNfZnNfaW5mbyk7CiAJCQlzYi0+c19mc19pbmZvID0gTlVMTDsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0JCXN0cm5jcHkoY2lmc19zYi0+bW91bnRkYXRhLCBkYXRhLCBsZW4gKyAxKTsKLQkJY2lmc19zYi0+bW91bnRkYXRhW2xlbl0gPSAnXDAnOwogCX0KLSNlbmRpZgogCi0JcmMgPSBjaWZzX21vdW50KHNiLCBjaWZzX3NiLCBkYXRhLCBkZXZuYW1lKTsKKwlyYyA9IGNpZnNfbW91bnQoc2IsIGNpZnNfc2IsIGRldm5hbWUpOwogCiAJaWYgKHJjKSB7CiAJCWlmICghc2lsZW50KQpAQCAtMTYzLDcgKzE1Niw3IEBACiAJc2ItPnNfYmRpID0gJmNpZnNfc2ItPmJkaTsKIAlzYi0+c19ibG9ja3NpemUgPSBDSUZTX01BWF9NU0dTSVpFOwogCXNiLT5zX2Jsb2Nrc2l6ZV9iaXRzID0gMTQ7CS8qIGRlZmF1bHQgMioqMTQgPSBDSUZTX01BWF9NU0dTSVpFICovCi0JaW5vZGUgPSBjaWZzX3Jvb3RfaWdldChzYiwgUk9PVF9JKTsKKwlpbm9kZSA9IGNpZnNfcm9vdF9pZ2V0KHNiKTsKIAogCWlmIChJU19FUlIoaW5vZGUpKSB7CiAJCXJjID0gUFRSX0VSUihpbm9kZSk7CkBAIC0xODQsMTIgKzE3NywxMiBAQAogCWVsc2UKIAkJc2ItPnNfZF9vcCA9ICZjaWZzX2RlbnRyeV9vcHM7CiAKLSNpZmRlZiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwKKyNpZmRlZiBDSUZTX05GU0RfRVhQT1JUCiAJaWYgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9TRVJWRVJfSU5VTSkgewogCQljRllJKDEsICJleHBvcnQgb3BzIHN1cHBvcnRlZCIpOwogCQlzYi0+c19leHBvcnRfb3AgPSAmY2lmc19leHBvcnRfb3BzOwogCX0KLSNlbmRpZiAvKiBFWFBFUklNRU5UQUwgKi8KKyNlbmRpZiAvKiBDSUZTX05GU0RfRVhQT1JUICovCiAKIAlyZXR1cm4gMDsKIApAQCAtMjAyLDEyICsxOTUsMTAgQEAKIAogb3V0X21vdW50X2ZhaWxlZDoKIAlpZiAoY2lmc19zYikgewotI2lmZGVmIENPTkZJR19DSUZTX0RGU19VUENBTEwKIAkJaWYgKGNpZnNfc2ItPm1vdW50ZGF0YSkgewogCQkJa2ZyZWUoY2lmc19zYi0+bW91bnRkYXRhKTsKIAkJCWNpZnNfc2ItPm1vdW50ZGF0YSA9IE5VTEw7CiAJCX0KLSNlbmRpZgogCQl1bmxvYWRfbmxzKGNpZnNfc2ItPmxvY2FsX25scyk7CiAJCWJkaV9kZXN0cm95KCZjaWZzX3NiLT5iZGkpOwogCQlrZnJlZShjaWZzX3NiKTsKQEAgLTIzMSwxMiArMjIyLDEwIEBACiAJcmMgPSBjaWZzX3Vtb3VudChzYiwgY2lmc19zYik7CiAJaWYgKHJjKQogCQljRVJST1IoMSwgImNpZnNfdW1vdW50IGZhaWxlZCB3aXRoIHJldHVybiBjb2RlICVkIiwgcmMpOwotI2lmZGVmIENPTkZJR19DSUZTX0RGU19VUENBTEwKIAlpZiAoY2lmc19zYi0+bW91bnRkYXRhKSB7CiAJCWtmcmVlKGNpZnNfc2ItPm1vdW50ZGF0YSk7CiAJCWNpZnNfc2ItPm1vdW50ZGF0YSA9IE5VTEw7CiAJfQotI2VuZGlmCiAKIAl1bmxvYWRfbmxzKGNpZnNfc2ItPmxvY2FsX25scyk7CiAJYmRpX2Rlc3Ryb3koJmNpZnNfc2ItPmJkaSk7CkBAIC02MTgsMTYgKzYwNywzMSBAQAogewogCS8qIG9yaWdpbiA9PSBTRUVLX0VORCA9PiB3ZSBtdXN0IHJldmFsaWRhdGUgdGhlIGNhY2hlZCBmaWxlIGxlbmd0aCAqLwogCWlmIChvcmlnaW4gPT0gU0VFS19FTkQpIHsKLQkJaW50IHJldHZhbDsKKwkJaW50IHJjOworCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAotCQkvKiBzb21lIGFwcGxpY2F0aW9ucyBwb2xsIGZvciB0aGUgZmlsZSBsZW5ndGggaW4gdGhpcyBzdHJhbmdlCi0JCSAgIHdheSBzbyB3ZSBtdXN0IHNlZWsgdG8gZW5kIG9uIG5vbi1vcGxvY2tlZCBmaWxlcyBieQotCQkgICBzZXR0aW5nIHRoZSByZXZhbGlkYXRlIHRpbWUgdG8gemVybyAqLwotCQlDSUZTX0koZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPnRpbWUgPSAwOworCQkvKgorCQkgKiBXZSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBhbGwgZGlydHkgcGFnZXMgYXJlIHdyaXR0ZW4gYW5kIHRoZQorCQkgKiBzZXJ2ZXIgaGFzIHRoZSBuZXdlc3QgZmlsZSBsZW5ndGguCisJCSAqLworCQlpZiAoIUNJRlNfSShpbm9kZSktPmNsaWVudENhbkNhY2hlUmVhZCAmJiBpbm9kZS0+aV9tYXBwaW5nICYmCisJCSAgICBpbm9kZS0+aV9tYXBwaW5nLT5ucnBhZ2VzICE9IDApIHsKKwkJCXJjID0gZmlsZW1hcF9mZGF0YXdhaXQoaW5vZGUtPmlfbWFwcGluZyk7CisJCQlpZiAocmMpIHsKKwkJCQltYXBwaW5nX3NldF9lcnJvcihpbm9kZS0+aV9tYXBwaW5nLCByYyk7CisJCQkJcmV0dXJuIHJjOworCQkJfQorCQl9CisJCS8qCisJCSAqIFNvbWUgYXBwbGljYXRpb25zIHBvbGwgZm9yIHRoZSBmaWxlIGxlbmd0aCBpbiB0aGlzIHN0cmFuZ2UKKwkJICogd2F5IHNvIHdlIG11c3Qgc2VlayB0byBlbmQgb24gbm9uLW9wbG9ja2VkIGZpbGVzIGJ5CisJCSAqIHNldHRpbmcgdGhlIHJldmFsaWRhdGUgdGltZSB0byB6ZXJvLgorCQkgKi8KKwkJQ0lGU19JKGlub2RlKS0+dGltZSA9IDA7CiAKLQkJcmV0dmFsID0gY2lmc19yZXZhbGlkYXRlX2ZpbGUoZmlsZSk7Ci0JCWlmIChyZXR2YWwgPCAwKQotCQkJcmV0dXJuIChsb2ZmX3QpcmV0dmFsOworCQlyYyA9IGNpZnNfcmV2YWxpZGF0ZV9maWxlX2F0dHIoZmlsZSk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gKGxvZmZfdClyYzsKIAl9CiAJcmV0dXJuIGdlbmVyaWNfZmlsZV9sbHNlZWtfdW5sb2NrZWQoZmlsZSwgb2Zmc2V0LCBvcmlnaW4pOwogfQpAQCAtNzYwLDEwICs3NjQsMTEgQEAKIH07CiAKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2lmc19maWxlX2RpcmVjdF9vcHMgPSB7Ci0JLyogbm8gYWlvLCBubyByZWFkdiAtCi0JICAgQkIgcmVldmFsdWF0ZSB3aGV0aGVyIHRoZXkgY2FuIGJlIGRvbmUgd2l0aCBkaXJlY3Rpbywgbm8gY2FjaGUgKi8KLQkucmVhZCA9IGNpZnNfdXNlcl9yZWFkLAotCS53cml0ZSA9IGNpZnNfdXNlcl93cml0ZSwKKwkvKiBCQiByZWV2YWx1YXRlIHdoZXRoZXIgdGhleSBjYW4gYmUgZG9uZSB3aXRoIGRpcmVjdGlvLCBubyBjYWNoZSAqLworCS5yZWFkID0gZG9fc3luY19yZWFkLAorCS53cml0ZSA9IGRvX3N5bmNfd3JpdGUsCisJLmFpb19yZWFkID0gY2lmc191c2VyX3JlYWR2LAorCS5haW9fd3JpdGUgPSBjaWZzX3VzZXJfd3JpdGV2LAogCS5vcGVuID0gY2lmc19vcGVuLAogCS5yZWxlYXNlID0gY2lmc19jbG9zZSwKIAkubG9jayA9IGNpZnNfbG9jaywKQEAgLTgxNSwxMCArODIwLDExIEBACiB9OwogCiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNpZnNfZmlsZV9kaXJlY3Rfbm9icmxfb3BzID0gewotCS8qIG5vIG1tYXAsIG5vIGFpbywgbm8gcmVhZHYgLQotCSAgIEJCIHJlZXZhbHVhdGUgd2hldGhlciB0aGV5IGNhbiBiZSBkb25lIHdpdGggZGlyZWN0aW8sIG5vIGNhY2hlICovCi0JLnJlYWQgPSBjaWZzX3VzZXJfcmVhZCwKLQkud3JpdGUgPSBjaWZzX3VzZXJfd3JpdGUsCisJLyogQkIgcmVldmFsdWF0ZSB3aGV0aGVyIHRoZXkgY2FuIGJlIGRvbmUgd2l0aCBkaXJlY3Rpbywgbm8gY2FjaGUgKi8KKwkucmVhZCA9IGRvX3N5bmNfcmVhZCwKKwkud3JpdGUgPSBkb19zeW5jX3dyaXRlLAorCS5haW9fcmVhZCA9IGNpZnNfdXNlcl9yZWFkdiwKKwkuYWlvX3dyaXRlID0gY2lmc191c2VyX3dyaXRldiwKIAkub3BlbiA9IGNpZnNfb3BlbiwKIAkucmVsZWFzZSA9IGNpZnNfY2xvc2UsCiAJLmZzeW5jID0gY2lmc19mc3luYywKQEAgLTk4MSwxMCArOTg3LDEwIEBACiAJaW50IHJjID0gMDsKIAljaWZzX3Byb2NfaW5pdCgpOwogCUlOSVRfTElTVF9IRUFEKCZjaWZzX3RjcF9zZXNfbGlzdCk7Ci0jaWZkZWYgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMCisjaWZkZWYgQ09ORklHX0NJRlNfRE5PVElGWV9FWFBFUklNRU5UQUwgLyogdW51c2VkIHRlbXBvcmFyaWx5ICovCiAJSU5JVF9MSVNUX0hFQUQoJkdsb2JhbERub3RpZnlSZXFMaXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmR2xvYmFsRG5vdGlmeVJzcF9RKTsKLSNlbmRpZgorI2VuZGlmIC8qIHdhcyBuZWVkZWQgZm9yIGRub3RpZnksIGFuZCB3aWxsIGJlIG5lZWRlZCBmb3IgaW5vdGlmeSB3aGVuIFZGUyBmaXggKi8KIC8qCiAgKiAgSW5pdGlhbGl6ZSBHbG9iYWwgY291bnRlcnMKICAqLwpAQCAtMTAzMywyMiArMTAzOSwzMyBAQAogCWlmIChyYykKIAkJZ290byBvdXRfZGVzdHJveV9taWRzOwogCi0JcmMgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZjaWZzX2ZzX3R5cGUpOwotCWlmIChyYykKLQkJZ290byBvdXRfZGVzdHJveV9yZXF1ZXN0X2J1ZnM7CiAjaWZkZWYgQ09ORklHX0NJRlNfVVBDQUxMCiAJcmMgPSByZWdpc3Rlcl9rZXlfdHlwZSgmY2lmc19zcG5lZ29fa2V5X3R5cGUpOwogCWlmIChyYykKLQkJZ290byBvdXRfdW5yZWdpc3Rlcl9maWxlc3lzdGVtOwotI2VuZGlmCisJCWdvdG8gb3V0X2Rlc3Ryb3lfcmVxdWVzdF9idWZzOworI2VuZGlmIC8qIENPTkZJR19DSUZTX1VQQ0FMTCAqLworCisjaWZkZWYgQ09ORklHX0NJRlNfQUNMCisJcmMgPSBpbml0X2NpZnNfaWRtYXAoKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0X3JlZ2lzdGVyX2tleV90eXBlOworI2VuZGlmIC8qIENPTkZJR19DSUZTX0FDTCAqLworCisJcmMgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZjaWZzX2ZzX3R5cGUpOworCWlmIChyYykKKwkJZ290byBvdXRfaW5pdF9jaWZzX2lkbWFwOwogCiAJcmV0dXJuIDA7CiAKLSNpZmRlZiBDT05GSUdfQ0lGU19VUENBTEwKLW91dF91bnJlZ2lzdGVyX2ZpbGVzeXN0ZW06Ci0JdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZjaWZzX2ZzX3R5cGUpOworb3V0X2luaXRfY2lmc19pZG1hcDoKKyNpZmRlZiBDT05GSUdfQ0lGU19BQ0wKKwlleGl0X2NpZnNfaWRtYXAoKTsKK291dF9yZWdpc3Rlcl9rZXlfdHlwZToKICNlbmRpZgorI2lmZGVmIENPTkZJR19DSUZTX1VQQ0FMTAorCXVucmVnaXN0ZXJfa2V5X3R5cGUoJmNpZnNfc3BuZWdvX2tleV90eXBlKTsKIG91dF9kZXN0cm95X3JlcXVlc3RfYnVmczoKKyNlbmRpZgogCWNpZnNfZGVzdHJveV9yZXF1ZXN0X2J1ZnMoKTsKIG91dF9kZXN0cm95X21pZHM6CiAJY2lmc19kZXN0cm95X21pZHMoKTsKQEAgLTEwNzAsNiArMTA4NywxMCBAQAogI2lmZGVmIENPTkZJR19DSUZTX0RGU19VUENBTEwKIAljaWZzX2Rmc19yZWxlYXNlX2F1dG9tb3VudF90aW1lcigpOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0NJRlNfQUNMCisJY2lmc19kZXN0cm95X2lkbWFwdHJlZXMoKTsKKwlleGl0X2NpZnNfaWRtYXAoKTsKKyNlbmRpZgogI2lmZGVmIENPTkZJR19DSUZTX1VQQ0FMTAogCXVucmVnaXN0ZXJfa2V5X3R5cGUoJmNpZnNfc3BuZWdvX2tleV90eXBlKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZnMuaCBiL2ZzL2NpZnMvY2lmc2ZzLmgKaW5kZXggYTkzNzFiNi4uNjQzMTNmNyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZnMuaAorKysgYi9mcy9jaWZzL2NpZnNmcy5oCkBAIC00Nyw3ICs0Nyw3IEBACiAKIC8qIEZ1bmN0aW9ucyByZWxhdGVkIHRvIGlub2RlcyAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNpZnNfZGlyX2lub2RlX29wczsKLWV4dGVybiBzdHJ1Y3QgaW5vZGUgKmNpZnNfcm9vdF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiBzdHJ1Y3QgaW5vZGUgKmNpZnNfcm9vdF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIGV4dGVybiBpbnQgY2lmc19jcmVhdGUoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgaW50LAogCQkgICAgICAgc3RydWN0IG5hbWVpZGF0YSAqKTsKIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICpjaWZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLApAQCAtNTksOSArNTksMTEgQEAKIGV4dGVybiBpbnQgY2lmc19ybWRpcihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKIGV4dGVybiBpbnQgY2lmc19yZW5hbWUoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICosCiAJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICopOworZXh0ZXJuIGludCBjaWZzX3JldmFsaWRhdGVfZmlsZV9hdHRyKHN0cnVjdCBmaWxlICpmaWxwKTsKK2V4dGVybiBpbnQgY2lmc19yZXZhbGlkYXRlX2RlbnRyeV9hdHRyKHN0cnVjdCBkZW50cnkgKik7CiBleHRlcm4gaW50IGNpZnNfcmV2YWxpZGF0ZV9maWxlKHN0cnVjdCBmaWxlICpmaWxwKTsKIGV4dGVybiBpbnQgY2lmc19yZXZhbGlkYXRlX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICopOwotZXh0ZXJuIHZvaWQgY2lmc19pbnZhbGlkYXRlX21hcHBpbmcoc3RydWN0IGlub2RlICppbm9kZSk7CitleHRlcm4gaW50IGNpZnNfaW52YWxpZGF0ZV9tYXBwaW5nKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogZXh0ZXJuIGludCBjaWZzX2dldGF0dHIoc3RydWN0IHZmc21vdW50ICosIHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGtzdGF0ICopOwogZXh0ZXJuIGludCBjaWZzX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaWF0dHIgKik7CiAKQEAgLTgwLDEyICs4MiwxMiBAQAogZXh0ZXJuIGludCBjaWZzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwogZXh0ZXJuIGludCBjaWZzX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKIGV4dGVybiBpbnQgY2lmc19jbG9zZWRpcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci1leHRlcm4gc3NpemVfdCBjaWZzX3VzZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnJlYWRfZGF0YSwKLQkJCSAgICAgIHNpemVfdCByZWFkX3NpemUsIGxvZmZfdCAqcG9mZnNldCk7CitleHRlcm4gc3NpemVfdCBjaWZzX3VzZXJfcmVhZHYoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpOwogZXh0ZXJuIHNzaXplX3QgY2lmc19zdHJpY3RfcmVhZHYoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKIAkJCQkgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKTsKLWV4dGVybiBzc2l6ZV90IGNpZnNfdXNlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKndyaXRlX2RhdGEsCi0JCQkgICAgICAgc2l6ZV90IHdyaXRlX3NpemUsIGxvZmZfdCAqcG9mZnNldCk7CitleHRlcm4gc3NpemVfdCBjaWZzX3VzZXJfd3JpdGV2KHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCisJCQkJdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKTsKIGV4dGVybiBzc2l6ZV90IGNpZnNfc3RyaWN0X3dyaXRldihzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAogCQkJCSAgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKTsKIGV4dGVybiBpbnQgY2lmc19sb2NrKHN0cnVjdCBmaWxlICosIGludCwgc3RydWN0IGZpbGVfbG9jayAqKTsKQEAgLTEyMyw5ICsxMjUsOSBAQAogZXh0ZXJuIHNzaXplX3QJY2lmc19saXN0eGF0dHIoc3RydWN0IGRlbnRyeSAqLCBjaGFyICosIHNpemVfdCk7CiBleHRlcm4gbG9uZyBjaWZzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogCi0jaWZkZWYgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMCisjaWZkZWYgQ0lGU19ORlNEX0VYUE9SVAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBleHBvcnRfb3BlcmF0aW9ucyBjaWZzX2V4cG9ydF9vcHM7Ci0jZW5kaWYgLyogRVhQRVJJTUVOVEFMICovCisjZW5kaWYgLyogQ0lGU19ORlNEX0VYUE9SVCAqLwogCi0jZGVmaW5lIENJRlNfVkVSU0lPTiAgICIxLjcxIgorI2RlZmluZSBDSUZTX1ZFUlNJT04gICAiMS43MiIKICNlbmRpZgkJCQkvKiBfQ0lGU0ZTX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2dsb2IuaCBiL2ZzL2NpZnMvY2lmc2dsb2IuaAppbmRleCBhNWQxMTA2Li43NmI0NTE3IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNnbG9iLmgKKysrIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCkBAIC0yNzQsNyArMjc0LDggQEAKIAlpbnQgY2FwYWJpbGl0aWVzOwogCWNoYXIgc2VydmVyTmFtZVtTRVJWRVJfTkFNRV9MRU5fV0lUSF9OVUxMICogMl07CS8qIEJCIG1ha2UgYmlnZ2VyIGZvcgogCQkJCVRDUCBuYW1lcyAtIHdpbGwgaXB2NiBhbmQgc2N0cCBhZGRyZXNzZXMgZml0PyAqLwotCWNoYXIgKnVzZXJfbmFtZTsKKwljaGFyICp1c2VyX25hbWU7CS8qIG11c3Qgbm90IGJlIG51bGwgZXhjZXB0IGR1cmluZyBpbml0IG9mIHNlc3MKKwkJCQkgICBhbmQgYWZ0ZXIgbW91bnQgb3B0aW9uIHBhcnNpbmcgd2UgZmlsbCBpdCAqLwogCWNoYXIgKmRvbWFpbk5hbWU7CiAJY2hhciAqcGFzc3dvcmQ7CiAJc3RydWN0IHNlc3Npb25fa2V5IGF1dGhfa2V5OwpAQCAtNzgwLDEwICs3ODEsMTIgQEAKICAqLwogR0xPQkFMX0VYVEVSTiBzcGlubG9ja190CWNpZnNfZmlsZV9saXN0X2xvY2s7CiAKKyNpZmRlZiBDT05GSUdfQ0lGU19ETk9USUZZX0VYUEVSSU1FTlRBTCAvKiB1bnVzZWQgdGVtcG9yYXJpbHkgKi8KIC8qIE91dHN0YW5kaW5nIGRpciBub3RpZnkgcmVxdWVzdHMgKi8KIEdMT0JBTF9FWFRFUk4gc3RydWN0IGxpc3RfaGVhZCBHbG9iYWxEbm90aWZ5UmVxTGlzdDsKIC8qIERpck5vdGlmeSByZXNwb25zZSBxdWV1ZSAqLwogR0xPQkFMX0VYVEVSTiBzdHJ1Y3QgbGlzdF9oZWFkIEdsb2JhbERub3RpZnlSc3BfUTsKKyNlbmRpZiAvKiB3YXMgbmVlZGVkIGZvciBkbm90aWZ5LCBhbmQgd2lsbCBiZSBuZWVkZWQgZm9yIGlub3RpZnkgd2hlbiBWRlMgZml4ICovCiAKIC8qCiAgKiBHbG9iYWwgdHJhbnNhY3Rpb24gaWQgKFhJRCkgaW5mb3JtYXRpb24KQEAgLTgzMCw2ICs4MzMsMTEgQEAKIC8qIHJlY29ubmVjdCBhZnRlciB0aGlzIG1hbnkgZmFpbGVkIGVjaG8gYXR0ZW1wdHMgKi8KIEdMT0JBTF9FWFRFUk4gdW5zaWduZWQgc2hvcnQgZWNob19yZXRyaWVzOwogCitHTE9CQUxfRVhURVJOIHN0cnVjdCByYl9yb290IHVpZHRyZWU7CitHTE9CQUxfRVhURVJOIHN0cnVjdCByYl9yb290IGdpZHRyZWU7CitHTE9CQUxfRVhURVJOIHNwaW5sb2NrX3Qgc2lkdWlkbG9jazsKK0dMT0JBTF9FWFRFUk4gc3BpbmxvY2tfdCBzaWRnaWRsb2NrOworCiB2b2lkIGNpZnNfb3Bsb2NrX2JyZWFrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiB2b2lkIGNpZnNfb3Bsb2NrX2JyZWFrX2dldChzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpjZmlsZSk7CiB2b2lkIGNpZnNfb3Bsb2NrX2JyZWFrX3B1dChzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpjZmlsZSk7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNwZHUuaCBiL2ZzL2NpZnMvY2lmc3BkdS5oCmluZGV4IGI1YzhjYzUuLmRlM2FhMjggMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3BkdS5oCisrKyBiL2ZzL2NpZnMvY2lmc3BkdS5oCkBAIC0zOTcsOSArMzk3LDkgQEAKICNkZWZpbmUgR0VUVTMyKHZhcikgICgqKChfX3UzMiAqKXZhcikpCS8qIEJCIGNoZWNrIGZvciBlbmRpYW4gaXNzdWVzICovCiAKIHN0cnVjdCBzbWJfaGRyIHsKLQlfX3UzMiBzbWJfYnVmX2xlbmd0aDsJLyogYmlnIGVuZGlhbiBvbiB3aXJlICovLyogQkIgbGVuZ3RoIGlzIG9ubHkgdHdvCi0JCW9yIHRocmVlIGJ5dGVzIC0gd2l0aCBvbmUgb3IgdHdvIGJ5dGUgdHlwZSBwcmVjZWRpbmcgaXQgdGhhdCBhcmUKLQkJemVybyAtIHdlIGNvdWxkIG1hc2sgdGhlIHR5cGUgYnl0ZSBvZmYganVzdCBpbiBjYXNlIEJCICovCisJX19iZTMyIHNtYl9idWZfbGVuZ3RoOwkvKiBCQiBsZW5ndGggaXMgb25seSB0d28gKHJhcmVseSB0aHJlZSkgYnl0ZXMsCisJCXdpdGggb25lIG9yIHR3byBieXRlICJ0eXBlIiBwcmVjZWRpbmcgaXQgdGhhdCB3aWxsIGJlCisJCXplcm8gLSB3ZSBjb3VsZCBtYXNrIHRoZSB0eXBlIGJ5dGUgb2ZmICovCiAJX191OCBQcm90b2NvbFs0XTsKIAlfX3U4IENvbW1hbmQ7CiAJdW5pb24gewpAQCAtNDI4LDQzICs0MjgsMjggQEAKIAlfX3U4IFdvcmRDb3VudDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKLS8qIGdpdmVuIGEgcG9pbnRlciB0byBhbiBzbWJfaGRyIHJldHJpZXZlIGEgY2hhciBwb2ludGVyIHRvIHRoZSBieXRlIGNvdW50ICovCi0jZGVmaW5lIEJDQyhzbWJfdmFyKSAoKHVuc2lnbmVkIGNoYXIgKikoc21iX3ZhcikgKyBzaXplb2Yoc3RydWN0IHNtYl9oZHIpICsgXAotCQkJICgyICogKHNtYl92YXIpLT5Xb3JkQ291bnQpKQorLyogZ2l2ZW4gYSBwb2ludGVyIHRvIGFuIHNtYl9oZHIsIHJldHJpZXZlIGEgdm9pZCBwb2ludGVyIHRvIHRoZSBCeXRlQ291bnQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqCitCQ0Moc3RydWN0IHNtYl9oZHIgKnNtYikKK3sKKwlyZXR1cm4gKHZvaWQgKilzbWIgKyBzaXplb2YoKnNtYikgKyAyICogc21iLT5Xb3JkQ291bnQ7Cit9CiAKIC8qIGdpdmVuIGEgcG9pbnRlciB0byBhbiBzbWJfaGRyIHJldHJpZXZlIHRoZSBwb2ludGVyIHRvIHRoZSBieXRlIGFyZWEgKi8KICNkZWZpbmUgcEJ5dGVBcmVhKHNtYl92YXIpIChCQ0Moc21iX3ZhcikgKyAyKQogCi0vKiBnZXQgdGhlIGNvbnZlcnRlZCBCeXRlQ291bnQgZm9yIGEgU01CIHBhY2tldCBhbmQgcmV0dXJuIGl0ICovCi1zdGF0aWMgaW5saW5lIF9fdTE2Ci1nZXRfYmNjKHN0cnVjdCBzbWJfaGRyICpoZHIpCi17Ci0JX191MTYgKmJjX3B0ciA9IChfX3UxNiAqKUJDQyhoZHIpOwotCi0JcmV0dXJuIGdldF91bmFsaWduZWQoYmNfcHRyKTsKLX0KLQogLyogZ2V0IHRoZSB1bmNvbnZlcnRlZCBCeXRlQ291bnQgZm9yIGEgU01CIHBhY2tldCBhbmQgcmV0dXJuIGl0ICovCiBzdGF0aWMgaW5saW5lIF9fdTE2Ci1nZXRfYmNjX2xlKHN0cnVjdCBzbWJfaGRyICpoZHIpCitnZXRfYmNjKHN0cnVjdCBzbWJfaGRyICpoZHIpCiB7CiAJX19sZTE2ICpiY19wdHIgPSAoX19sZTE2ICopQkNDKGhkcik7CiAKIAlyZXR1cm4gZ2V0X3VuYWxpZ25lZF9sZTE2KGJjX3B0cik7CiB9CiAKLS8qIHNldCB0aGUgQnl0ZUNvdW50IGZvciBhIFNNQiBwYWNrZXQgaW4gaG9zdC1ieXRlIG9yZGVyICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLXB1dF9iY2MoX191MTYgY291bnQsIHN0cnVjdCBzbWJfaGRyICpoZHIpCi17Ci0JX191MTYgKmJjX3B0ciA9IChfX3UxNiAqKUJDQyhoZHIpOwotCi0JcHV0X3VuYWxpZ25lZChjb3VudCwgYmNfcHRyKTsKLX0KLQogLyogc2V0IHRoZSBCeXRlQ291bnQgZm9yIGEgU01CIHBhY2tldCBpbiBsaXR0bGUtZW5kaWFuICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLXB1dF9iY2NfbGUoX191MTYgY291bnQsIHN0cnVjdCBzbWJfaGRyICpoZHIpCitwdXRfYmNjKF9fdTE2IGNvdW50LCBzdHJ1Y3Qgc21iX2hkciAqaGRyKQogewogCV9fbGUxNiAqYmNfcHRyID0gKF9fbGUxNiAqKUJDQyhoZHIpOwogCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNwcm90by5oIGIvZnMvY2lmcy9jaWZzcHJvdG8uaAppbmRleCA4MDk2ZjI3Li42ZTY5ZTA2IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNwcm90by5oCisrKyBiL2ZzL2NpZnMvY2lmc3Byb3RvLmgKQEAgLTUzLDYgKzUzLDkgQEAKIAljRllJKDEsICJDSUZTIFZGUzogbGVhdmluZyAlcyAoeGlkID0gJWQpIHJjID0gJWQiLAlcCiAJICAgICBfX2Z1bmNfXywgY3Vycl94aWQsIChpbnQpcmMpOwkJCVwKIH0gd2hpbGUgKDApCitleHRlcm4gaW50IGluaXRfY2lmc19pZG1hcCh2b2lkKTsKK2V4dGVybiB2b2lkIGV4aXRfY2lmc19pZG1hcCh2b2lkKTsKK2V4dGVybiB2b2lkIGNpZnNfZGVzdHJveV9pZG1hcHRyZWVzKHZvaWQpOwogZXh0ZXJuIGNoYXIgKmJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoc3RydWN0IGRlbnRyeSAqKTsKIGV4dGVybiBjaGFyICpjaWZzX2J1aWxkX3BhdGhfdG9fcm9vdChzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiLAogCQkJCQlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uKTsKQEAgLTkwLDcgKzkzLDYgQEAKIGV4dGVybiBzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpmaW5kX3dyaXRhYmxlX2ZpbGUoc3RydWN0IGNpZnNJbm9kZUluZm8gKiwgYm9vbCk7CiBleHRlcm4gc3RydWN0IGNpZnNGaWxlSW5mbyAqZmluZF9yZWFkYWJsZV9maWxlKHN0cnVjdCBjaWZzSW5vZGVJbmZvICosIGJvb2wpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBzbWJDYWxjU2l6ZShzdHJ1Y3Qgc21iX2hkciAqcHRyKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgc21iQ2FsY1NpemVfTEUoc3RydWN0IHNtYl9oZHIgKnB0cik7CiBleHRlcm4gaW50IGRlY29kZV9uZWdUb2tlbkluaXQodW5zaWduZWQgY2hhciAqc2VjdXJpdHlfYmxvYiwgaW50IGxlbmd0aCwKIAkJCXN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcik7CiBleHRlcm4gaW50IGNpZnNfY29udmVydF9hZGRyZXNzKHN0cnVjdCBzb2NrYWRkciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIGludCBsZW4pOwpAQCAtMTQzLDggKzE0NSwxMCBAQAogZXh0ZXJuIGludCBtb2RlX3RvX2NpZnNfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKnBhdGgsIF9fdTY0KTsKIGV4dGVybiBzdHJ1Y3QgY2lmc19udHNkICpnZXRfY2lmc19hY2woc3RydWN0IGNpZnNfc2JfaW5mbyAqLCBzdHJ1Y3QgaW5vZGUgKiwKIAkJCQkJY29uc3QgY2hhciAqLCB1MzIgKik7CitleHRlcm4gaW50IHNldF9jaWZzX2FjbChzdHJ1Y3QgY2lmc19udHNkICosIF9fdTMyLCBzdHJ1Y3QgaW5vZGUgKiwKKwkJCQljb25zdCBjaGFyICopOwogCi1leHRlcm4gaW50IGNpZnNfbW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBjaWZzX3NiX2luZm8gKiwgY2hhciAqLAorZXh0ZXJuIGludCBjaWZzX21vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgY2lmc19zYl9pbmZvICosCiAJCQljb25zdCBjaGFyICopOwogZXh0ZXJuIGludCBjaWZzX3Vtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGNpZnNfc2JfaW5mbyAqKTsKIGV4dGVybiB2b2lkIGNpZnNfZGZzX3JlbGVhc2VfYXV0b21vdW50X3RpbWVyKHZvaWQpOwpAQCAtMzA0LDEyICszMDgsMTMgQEAKIAkJCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCiAJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzZWFyY2hOYW1lLCBjaGFyICoqc3ltaW5mbywKIAkJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSk7CisjaWZkZWYgQ09ORklHX0NJRlNfU1lNTElOS19FWFBFUklNRU5UQUwKIGV4dGVybiBpbnQgQ0lGU1NNQlF1ZXJ5UmVwYXJzZUxpbmtJbmZvKGNvbnN0IGludCB4aWQsCiAJCQlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2VhcmNoTmFtZSwKIAkJCWNoYXIgKnN5bWxpbmtpbmZvLCBjb25zdCBpbnQgYnVmbGVuLCBfX3UxNiBmaWQsCiAJCQljb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UpOwotCisjZW5kaWYgLyogdGVtcG9yYXJpbHkgdW51c2VkIHVudGlsIGNpZnNfc3ltbGluayBmaXhlZCAqLwogZXh0ZXJuIGludCBDSUZTU01CT3Blbihjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCQkJY29uc3QgY2hhciAqZmlsZU5hbWUsIGNvbnN0IGludCBkaXNwb3NpdGlvbiwKIAkJCWNvbnN0IGludCBhY2Nlc3NfZmxhZ3MsIGNvbnN0IGludCBvbW9kZSwKQEAgLTM0OCw4ICszNTMsNiBAQAogCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2VhcmNoTmFtZSwgX191NjQgKmlub2RlX251bWJlciwKIAkJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwKIAkJCWludCByZW1hcF9zcGVjaWFsX2NoYXJzKTsKLWV4dGVybiBpbnQgY2lmc0NvbnZlcnRUb1VDUyhfX2xlMTYgKnRhcmdldCwgY29uc3QgY2hhciAqc291cmNlLCBpbnQgbWF4bGVuLAotCQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqY3AsIGludCBtYXBDaGFycyk7CiAKIGV4dGVybiBpbnQgQ0lGU1NNQkxvY2soY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKIAkJCWNvbnN0IF9fdTE2IG5ldGZpZCwgY29uc3QgX191NjQgbGVuLApAQCAtMzgzLDkgKzM4NiwxNSBAQAogZXh0ZXJuIGludCBjYWxjX3NlY2tleShzdHJ1Y3QgY2lmc1Nlc0luZm8gKik7CiAKICNpZmRlZiBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0gKLWV4dGVybiB2b2lkIGNhbGNfbGFubWFuX2hhc2goY29uc3QgY2hhciAqcGFzc3dvcmQsIGNvbnN0IGNoYXIgKmNyeXB0a2V5LAorZXh0ZXJuIGludCBjYWxjX2xhbm1hbl9oYXNoKGNvbnN0IGNoYXIgKnBhc3N3b3JkLCBjb25zdCBjaGFyICpjcnlwdGtleSwKIAkJCQlib29sIGVuY3J5cHQsIGNoYXIgKmxubV9zZXNzaW9uX2tleSk7CiAjZW5kaWYgLyogQ0lGU19XRUFLX1BXX0hBU0ggKi8KKyNpZmRlZiBDT05GSUdfQ0lGU19ETk9USUZZX0VYUEVSSU1FTlRBTCAvKiB1bnVzZWQgdGVtcG9yYXJpbHkgKi8KK2V4dGVybiBpbnQgQ0lGU1NNQk5vdGlmeShjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAorCQkJY29uc3QgaW50IG5vdGlmeV9zdWJkaXJzLCBjb25zdCBfX3UxNiBuZXRmaWQsCisJCQlfX3UzMiBmaWx0ZXIsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbXVsdGlzaG90LAorCQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlKTsKKyNlbmRpZiAvKiB3YXMgbmVlZGVkIGZvciBkbm90aWZ5LCBhbmQgd2lsbCBiZSBuZWVkZWQgZm9yIGlub3RpZnkgd2hlbiBWRlMgZml4ICovCiBleHRlcm4gaW50IENJRlNTTUJDb3B5KGludCB4aWQsCiAJCQlzdHJ1Y3QgY2lmc1Rjb25JbmZvICpzb3VyY2VfdGNvbiwKIAkJCWNvbnN0IGNoYXIgKmZyb21OYW1lLApAQCAtMzkzLDEwICs0MDIsNiBAQAogCQkJY29uc3QgY2hhciAqdG9OYW1lLCBjb25zdCBpbnQgZmxhZ3MsCiAJCQljb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UsCiAJCQlpbnQgcmVtYXBfc3BlY2lhbF9jaGFycyk7Ci1leHRlcm4gaW50IENJRlNTTUJOb3RpZnkoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKLQkJCWNvbnN0IGludCBub3RpZnlfc3ViZGlycywgY29uc3QgX191MTYgbmV0ZmlkLAotCQkJX191MzIgZmlsdGVyLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG11bHRpc2hvdCwKLQkJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSk7CiBleHRlcm4gc3NpemVfdCBDSUZTU01CUUFsbEVBcyhjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2VhcmNoTmFtZSwKIAkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVhX25hbWUsIGNoYXIgKkVBRGF0YSwKQEAgLTQyNyw5ICs0MzIsNiBAQAogCQlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiLCBpbnQgeGlkKTsKIGV4dGVybiBpbnQgbWRmb3VyKHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLCBpbnQpOwogZXh0ZXJuIGludCBFX21kNGhhc2goY29uc3QgdW5zaWduZWQgY2hhciAqcGFzc3dkLCB1bnNpZ25lZCBjaGFyICpwMTYpOwotZXh0ZXJuIHZvaWQgU01CZW5jcnlwdCh1bnNpZ25lZCBjaGFyICpwYXNzd2QsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmM4LAotCQkJdW5zaWduZWQgY2hhciAqcDI0KTsKLWV4dGVybiB2b2lkIEVfUDE2KHVuc2lnbmVkIGNoYXIgKnAxNCwgdW5zaWduZWQgY2hhciAqcDE2KTsKLWV4dGVybiB2b2lkIEVfUDI0KHVuc2lnbmVkIGNoYXIgKnAyMSwgY29uc3QgdW5zaWduZWQgY2hhciAqYzgsCitleHRlcm4gaW50IFNNQmVuY3J5cHQodW5zaWduZWQgY2hhciAqcGFzc3dkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjOCwKIAkJCXVuc2lnbmVkIGNoYXIgKnAyNCk7CiAjZW5kaWYJCQkvKiBfQ0lGU1BST1RPX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3NtYi5jIGIvZnMvY2lmcy9jaWZzc21iLmMKaW5kZXggZGY5NTliYS4uODNkZjkzNyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzc21iLmMKKysrIGIvZnMvY2lmcy9jaWZzc21iLmMKQEAgLTMzOSwxMiArMzM5LDEzIEBACiAJICAgIGdldF91bmFsaWduZWRfbGUxNigmcFNNQi0+dDJfcnNwLkRhdGFPZmZzZXQpID4gMTAyNCkKIAkJZ290byB2dDJfZXJyOwogCi0JLyogY2hlY2sgdGhhdCBiY2MgaXMgYXQgbGVhc3QgYXMgYmlnIGFzIHBhcm1zICsgZGF0YSAqLwotCS8qIGNoZWNrIHRoYXQgYmNjIGlzIGxlc3MgdGhhbiBuZWdvdGlhdGVkIHNtYiBidWZmZXIgKi8KIAl0b3RhbF9zaXplID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZwU01CLT50Ml9yc3AuUGFyYW1ldGVyQ291bnQpOwogCWlmICh0b3RhbF9zaXplID49IDUxMikKIAkJZ290byB2dDJfZXJyOwogCisJLyogY2hlY2sgdGhhdCBiY2MgaXMgYXQgbGVhc3QgYXMgYmlnIGFzIHBhcm1zICsgZGF0YSwgYW5kIHRoYXQgaXQgaXMKKwkgKiBsZXNzIHRoYW4gbmVnb3RpYXRlZCBzbWIgYnVmZmVyCisJICovCiAJdG90YWxfc2l6ZSArPSBnZXRfdW5hbGlnbmVkX2xlMTYoJnBTTUItPnQyX3JzcC5EYXRhQ291bnQpOwogCWlmICh0b3RhbF9zaXplID4gZ2V0X2JjYygmcFNNQi0+aGRyKSB8fAogCSAgICB0b3RhbF9zaXplID49IENJRlNNYXhCdWZTaXplICsgTUFYX0NJRlNfSERSX1NJWkUpCkBAIC0zNTcsNiArMzU4LDEzIEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbmNfcmZjMTAwMV9sZW4odm9pZCAqcFNNQiwgaW50IGNvdW50KQoreworCXN0cnVjdCBzbWJfaGRyICpoZHIgPSAoc3RydWN0IHNtYl9oZHIgKilwU01COworCisJYmUzMl9hZGRfY3B1KCZoZHItPnNtYl9idWZfbGVuZ3RoLCBjb3VudCk7Cit9CisKIGludAogQ0lGU1NNQk5lZ290aWF0ZSh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Nlc0luZm8gKnNlcykKIHsKQEAgLTQwOSw3ICs0MTcsNyBAQAogCQljb3VudCArPSBzdHJsZW4ocHJvdG9jb2xzW2ldLm5hbWUpICsgMTsKIAkJLyogbnVsbCBhdCBlbmQgb2Ygc291cmNlIGFuZCB0YXJnZXQgYnVmZmVycyBhbnl3YXkgKi8KIAl9Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGNvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBjb3VudCk7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoY291bnQpOwogCiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCkBAIC01NDEsMTAgKzU0OSw2IEBACiAJCXNlcnZlci0+c2VjVHlwZSA9IFJhd05UTE1TU1A7CiAJZWxzZSBpZiAoc2VjRmxhZ3MgJiBDSUZTU0VDX01BWV9MQU5NQU4pCiAJCXNlcnZlci0+c2VjVHlwZSA9IExBTk1BTjsKLS8qICNpZmRlZiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwKLQllbHNlIGlmIChzZWNGbGFncyAmIENJRlNTRUNfTUFZX1BMTlRYVCkKLQkJc2VydmVyLT5zZWNUeXBlID0gPz8KLSNlbmRpZiAqLwogCWVsc2UgewogCQlyYyA9IC1FT1BOT1RTVVBQOwogCQljRVJST1IoMSwgIkludmFsaWQgc2VjdXJpdHkgdHlwZSIpOwpAQCAtNTc4LDcgKzU4Miw3IEBACiAKIAlpZiAoKHBTTUJyLT5oZHIuRmxhZ3MyICYgU01CRkxHMl9FWFRfU0VDKSAmJgogCQkoc2VydmVyLT5jYXBhYmlsaXRpZXMgJiBDQVBfRVhURU5ERURfU0VDVVJJVFkpKSB7Ci0JCWNvdW50ID0gcFNNQnItPkJ5dGVDb3VudDsKKwkJY291bnQgPSBnZXRfYmNjKCZwU01Cci0+aGRyKTsKIAkJaWYgKGNvdW50IDwgMTYpIHsKIAkJCXJjID0gLUVJTzsKIAkJCWdvdG8gbmVnX2Vycl9leGl0OwpAQCAtNzMyLDkgKzczNiw5IEBACiAJc21iLT5oZHIuVGlkID0gMHhmZmZmOwogCXNtYi0+aGRyLldvcmRDb3VudCA9IDE7CiAJcHV0X3VuYWxpZ25lZF9sZTE2KDEsICZzbWItPkVjaG9Db3VudCk7Ci0JcHV0X2JjY19sZSgxLCAmc21iLT5oZHIpOworCXB1dF9iY2MoMSwgJnNtYi0+aGRyKTsKIAlzbWItPkRhdGFbMF0gPSAnYSc7Ci0Jc21iLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gMzsKKwlpbmNfcmZjMTAwMV9sZW4oc21iLCAzKTsKIAogCXJjID0gY2lmc19jYWxsX2FzeW5jKHNlcnZlciwgKHN0cnVjdCBzbWJfaGRyICopc21iLAogCQkJCWNpZnNfZWNob19jYWxsYmFjaywgc2VydmVyKTsKQEAgLTg1Miw3ICs4NTYsNyBAQAogCXBTTUItPlRvdGFsUGFyYW1ldGVyQ291bnQgPSBwU01CLT5QYXJhbWV0ZXJDb3VudDsKIAlwU01CLT5JbmZvcm1hdGlvbkxldmVsID0gY3B1X3RvX2xlMTYoU01CX1BPU0lYX1VOTElOSyk7CiAJcFNNQi0+UmVzZXJ2ZWQ0ID0gMDsKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gYnl0ZV9jb3VudDsKKwlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgYnl0ZV9jb3VudCk7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoYnl0ZV9jb3VudCk7CiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCiAJCQkgKHN0cnVjdCBzbWJfaGRyICopIHBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQsIDApOwpAQCAtODk4LDcgKzkwMiw3IEBACiAJcFNNQi0+U2VhcmNoQXR0cmlidXRlcyA9CiAJICAgIGNwdV90b19sZTE2KEFUVFJfUkVBRE9OTFkgfCBBVFRSX0hJRERFTiB8IEFUVFJfU1lTVEVNKTsKIAlwU01CLT5CdWZmZXJGb3JtYXQgPSAweDA0OwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBuYW1lX2xlbiArIDE7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIG5hbWVfbGVuICsgMSk7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYobmFtZV9sZW4gKyAxKTsKIAlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKIAkJCSAoc3RydWN0IHNtYl9oZHIgKikgcFNNQnIsICZieXRlc19yZXR1cm5lZCwgMCk7CkBAIC05NDIsNyArOTQ2LDcgQEAKIAl9CiAKIAlwU01CLT5CdWZmZXJGb3JtYXQgPSAweDA0OwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBuYW1lX2xlbiArIDE7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIG5hbWVfbGVuICsgMSk7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYobmFtZV9sZW4gKyAxKTsKIAlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKIAkJCSAoc3RydWN0IHNtYl9oZHIgKikgcFNNQnIsICZieXRlc19yZXR1cm5lZCwgMCk7CkBAIC05ODUsNyArOTg5LDcgQEAKIAl9CiAKIAlwU01CLT5CdWZmZXJGb3JtYXQgPSAweDA0OwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBuYW1lX2xlbiArIDE7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIG5hbWVfbGVuICsgMSk7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYobmFtZV9sZW4gKyAxKTsKIAlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKIAkJCSAoc3RydWN0IHNtYl9oZHIgKikgcFNNQnIsICZieXRlc19yZXR1cm5lZCwgMCk7CkBAIC0xMDYzLDcgKzEwNjcsNyBAQAogCXBTTUItPlRvdGFsUGFyYW1ldGVyQ291bnQgPSBwU01CLT5QYXJhbWV0ZXJDb3VudDsKIAlwU01CLT5JbmZvcm1hdGlvbkxldmVsID0gY3B1X3RvX2xlMTYoU01CX1BPU0lYX09QRU4pOwogCXBTTUItPlJlc2VydmVkNCA9IDA7Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGJ5dGVfY291bnQ7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGJ5dGVfY291bnQpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGJ5dGVfY291bnQpOwogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLAogCQkJIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CciwgJmJ5dGVzX3JldHVybmVkLCAwKTsKQEAgLTEwNzUsNyArMTA3OSw3IEBACiAJY0ZZSSgxLCAiY29weWluZyBpbm9kZSBpbmZvIik7CiAJcmMgPSB2YWxpZGF0ZV90Migoc3RydWN0IHNtYl90Ml9yc3AgKilwU01Ccik7CiAKLQlpZiAocmMgfHwgKHBTTUJyLT5CeXRlQ291bnQgPCBzaXplb2YoT1BFTl9QU1hfUlNQKSkpIHsKKwlpZiAocmMgfHwgZ2V0X2JjYygmcFNNQnItPmhkcikgPCBzaXplb2YoT1BFTl9QU1hfUlNQKSkgewogCQlyYyA9IC1FSU87CS8qIGJhZCBzbWIgKi8KIAkJZ290byBwc3hfY3JlYXRlX2VycjsKIAl9CkBAIC0xMDk2LDcgKzExMDAsNyBAQAogCQlwUmV0RGF0YS0+VHlwZSA9IGNwdV90b19sZTMyKC0xKTsgLyogdW5rbm93biAqLwogCQljRllJKERCRzIsICJ1bmtub3duIHR5cGUiKTsKIAl9IGVsc2UgewotCQlpZiAocFNNQnItPkJ5dGVDb3VudCA8IHNpemVvZihPUEVOX1BTWF9SU1ApCisJCWlmIChnZXRfYmNjKCZwU01Cci0+aGRyKSA8IHNpemVvZihPUEVOX1BTWF9SU1ApCiAJCQkJCSsgc2l6ZW9mKEZJTEVfVU5JWF9CQVNJQ19JTkZPKSkgewogCQkJY0VSUk9SKDEsICJPcGVuIHJlc3BvbnNlIGRhdGEgdG9vIHNtYWxsIik7CiAJCQlwUmV0RGF0YS0+VHlwZSA9IGNwdV90b19sZTMyKC0xKTsKQEAgLTEyMjgsNyArMTIzMiw3IEBACiAJcFNNQi0+U2F0dHIgPSBjcHVfdG9fbGUxNihBVFRSX0hJRERFTiB8IEFUVFJfU1lTVEVNIHwgQVRUUl9ESVJFQ1RPUlkpOwogCXBTTUItPk9wZW5GdW5jdGlvbiA9IGNwdV90b19sZTE2KGNvbnZlcnRfZGlzcG9zaXRpb24ob3BlbkRpc3Bvc2l0aW9uKSk7CiAJY291bnQgKz0gbmFtZV9sZW47Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGNvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBjb3VudCk7CiAKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihjb3VudCk7CiAJLyogbG9uZ19vcCBzZXQgdG8gMSB0byBhbGxvdyBmb3Igb3Bsb2NrIGJyZWFrIHRpbWVvdXRzICovCkBAIC0xMzQxLDcgKzEzNDUsNyBAQAogCSAgICBTRUNVUklUWV9DT05URVhUX1RSQUNLSU5HIHwgU0VDVVJJVFlfRUZGRUNUSVZFX09OTFk7CiAKIAljb3VudCArPSBuYW1lX2xlbjsKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gY291bnQ7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGNvdW50KTsKIAogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGNvdW50KTsKIAkvKiBsb25nX29wIHNldCB0byAxIHRvIGFsbG93IGZvciBvcGxvY2sgYnJlYWsgdGltZW91dHMgKi8KQEAgLTE0MjYsNyArMTQzMCw3IEBACiAJfQogCiAJaW92WzBdLmlvdl9iYXNlID0gKGNoYXIgKilwU01COwotCWlvdlswXS5pb3ZfbGVuID0gcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICsgNDsKKwlpb3ZbMF0uaW92X2xlbiA9IGJlMzJfdG9fY3B1KHBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCkgKyA0OwogCXJjID0gU2VuZFJlY2VpdmUyKHhpZCwgdGNvbi0+c2VzLCBpb3YsIDEgLyogbnVtIGlvdmVjcyAqLywKIAkJCSAmcmVzcF9idWZfdHlwZSwgQ0lGU19MT0dfRVJST1IpOwogCWNpZnNfc3RhdHNfaW5jKCZ0Y29uLT5udW1fcmVhZHMpOwpAQCAtMTU2MCw3ICsxNTY0LDcgQEAKIAogCXBTTUItPkRhdGFMZW5ndGhMb3cgPSBjcHVfdG9fbGUxNihieXRlc19zZW50ICYgMHhGRkZGKTsKIAlwU01CLT5EYXRhTGVuZ3RoSGlnaCA9IGNwdV90b19sZTE2KGJ5dGVzX3NlbnQgPj4gMTYpOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBieXRlX2NvdW50KTsKIAogCWlmICh3Y3QgPT0gMTQpCiAJCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGJ5dGVfY291bnQpOwpAQCAtMTY0NCwxMSArMTY0OCwxMiBAQAogCiAJcFNNQi0+RGF0YUxlbmd0aExvdyA9IGNwdV90b19sZTE2KGNvdW50ICYgMHhGRkZGKTsKIAlwU01CLT5EYXRhTGVuZ3RoSGlnaCA9IGNwdV90b19sZTE2KGNvdW50ID4+IDE2KTsKLQlzbWJfaGRyX2xlbiA9IHBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArIDE7IC8qIGhkciArIDEgYnl0ZSBwYWQgKi8KKwkvKiBoZWFkZXIgKyAxIGJ5dGUgcGFkICovCisJc21iX2hkcl9sZW4gPSBiZTMyX3RvX2NwdShwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGgpICsgMTsKIAlpZiAod2N0ID09IDE0KQotCQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gY291bnQrMTsKKwkJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGNvdW50ICsgMSk7CiAJZWxzZSAvKiB3Y3QgPT0gMTIgKi8KLQkJcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGNvdW50KzU7IC8qIHNtYiBkYXRhIHN0YXJ0cyBsYXRlciAqLworCQlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgY291bnQgKyA1KTsgLyogc21iIGRhdGEgc3RhcnRzIGxhdGVyICovCiAJaWYgKHdjdCA9PSAxNCkKIAkJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoY291bnQgKyAxKTsKIAllbHNlIC8qIHdjdCA9PSAxMiAqLyAvKiBiaWdnZXIgcGFkLCBzbWFsbGVyIHNtYiBoZHIsIGtlZXAgb2Zmc2V0IG9rICovIHsKQEAgLTE3NDgsNyArMTc1Myw3IEBACiAJCS8qIG9wbG9jayBicmVhayAqLwogCQljb3VudCA9IDA7CiAJfQotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBjb3VudDsKKwlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgY291bnQpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGNvdW50KTsKIAogCWlmICh3YWl0RmxhZykgewpAQCAtMTgzOSwxNCArMTg0NCwxNCBAQAogCXBTTUItPkZpZCA9IHNtYl9maWxlX2lkOwogCXBTTUItPkluZm9ybWF0aW9uTGV2ZWwgPSBjcHVfdG9fbGUxNihTTUJfU0VUX1BPU0lYX0xPQ0spOwogCXBTTUItPlJlc2VydmVkNCA9IDA7Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGJ5dGVfY291bnQ7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGJ5dGVfY291bnQpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGJ5dGVfY291bnQpOwogCWlmICh3YWl0RmxhZykgewogCQlyYyA9IFNlbmRSZWNlaXZlQmxvY2tpbmdMb2NrKHhpZCwgdGNvbiwgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCiAJCQkoc3RydWN0IHNtYl9oZHIgKikgcFNNQnIsICZieXRlc19yZXR1cm5lZCk7CiAJfSBlbHNlIHsKIAkJaW92WzBdLmlvdl9iYXNlID0gKGNoYXIgKilwU01COwotCQlpb3ZbMF0uaW92X2xlbiA9IHBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArIDQ7CisJCWlvdlswXS5pb3ZfbGVuID0gYmUzMl90b19jcHUocFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoKSArIDQ7CiAJCXJjID0gU2VuZFJlY2VpdmUyKHhpZCwgdGNvbi0+c2VzLCBpb3YsIDEgLyogbnVtIGlvdmVjcyAqLywKIAkJCQkmcmVzcF9idWZfdHlwZSwgdGltZW91dCk7CiAJCXBTTUIgPSBOVUxMOyAvKiByZXF1ZXN0IGJ1ZiBhbHJlYWR5IGZyZWVkIGJ5IFNlbmRSZWNlaXZlMi4gRG8KQEAgLTE4NjIsNyArMTg2Nyw3IEBACiAJCV9fdTE2IGRhdGFfY291bnQ7CiAJCXJjID0gdmFsaWRhdGVfdDIoKHN0cnVjdCBzbWJfdDJfcnNwICopcFNNQnIpOwogCi0JCWlmIChyYyB8fCAocFNNQnItPkJ5dGVDb3VudCA8IHNpemVvZihzdHJ1Y3QgY2lmc19wb3NpeF9sb2NrKSkpIHsKKwkJaWYgKHJjIHx8IGdldF9iY2MoJnBTTUJyLT5oZHIpIDwgc2l6ZW9mKCpwYXJtX2RhdGEpKSB7CiAJCQlyYyA9IC1FSU87ICAgICAgLyogYmFkIHNtYiAqLwogCQkJZ290byBwbGtfZXJyX2V4aXQ7CiAJCX0KQEAgLTIwMTIsNyArMjAxNyw3IEBACiAJfQogCiAJY291bnQgPSAxIC8qIDFzdCBzaWduYXR1cmUgYnl0ZSAqLyAgKyBuYW1lX2xlbiArIG5hbWVfbGVuMjsKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gY291bnQ7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGNvdW50KTsKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihjb3VudCk7CiAKIAlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKQEAgLTIwOTIsNyArMjA5Nyw3IEBACiAJcFNNQi0+SW5mb3JtYXRpb25MZXZlbCA9CiAJCWNwdV90b19sZTE2KFNNQl9TRVRfRklMRV9SRU5BTUVfSU5GT1JNQVRJT04pOwogCXBTTUItPlJlc2VydmVkNCA9IDA7Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGJ5dGVfY291bnQ7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGJ5dGVfY291bnQpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGJ5dGVfY291bnQpOwogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCBwVGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKIAkJCSAoc3RydWN0IHNtYl9oZHIgKikgcFNNQnIsICZieXRlc19yZXR1cm5lZCwgMCk7CkBAIC0yMTU5LDcgKzIxNjQsNyBAQAogCX0KIAogCWNvdW50ID0gMSAvKiAxc3Qgc2lnbmF0dXJlIGJ5dGUgKi8gICsgbmFtZV9sZW4gKyBuYW1lX2xlbjI7Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGNvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBjb3VudCk7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoY291bnQpOwogCiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCkBAIC0yMjQ5LDcgKzIyNTQsNyBAQAogCXBTTUItPkRhdGFPZmZzZXQgPSBjcHVfdG9fbGUxNihvZmZzZXQpOwogCXBTTUItPkluZm9ybWF0aW9uTGV2ZWwgPSBjcHVfdG9fbGUxNihTTUJfU0VUX0ZJTEVfVU5JWF9MSU5LKTsKIAlwU01CLT5SZXNlcnZlZDQgPSAwOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBieXRlX2NvdW50KTsKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKIAlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKIAkJCSAoc3RydWN0IHNtYl9oZHIgKikgcFNNQnIsICZieXRlc19yZXR1cm5lZCwgMCk7CkBAIC0yMzM1LDcgKzIzNDAsNyBAQAogCXBTTUItPkRhdGFPZmZzZXQgPSBjcHVfdG9fbGUxNihvZmZzZXQpOwogCXBTTUItPkluZm9ybWF0aW9uTGV2ZWwgPSBjcHVfdG9fbGUxNihTTUJfU0VUX0ZJTEVfVU5JWF9ITElOSyk7CiAJcFNNQi0+UmVzZXJ2ZWQ0ID0gMDsKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gYnl0ZV9jb3VudDsKKwlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgYnl0ZV9jb3VudCk7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoYnl0ZV9jb3VudCk7CiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCiAJCQkgKHN0cnVjdCBzbWJfaGRyICopIHBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQsIDApOwpAQCAtMjQwNiw3ICsyNDExLDcgQEAKIAl9CiAKIAljb3VudCA9IDEgLyogc3RyaW5nIHR5cGUgYnl0ZSAqLyAgKyBuYW1lX2xlbiArIG5hbWVfbGVuMjsKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gY291bnQ7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGNvdW50KTsKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihjb3VudCk7CiAKIAlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKQEAgLTI0NzcsNyArMjQ4Miw3IEBACiAJcFNNQi0+UGFyYW1ldGVyQ291bnQgPSBwU01CLT5Ub3RhbFBhcmFtZXRlckNvdW50OwogCXBTTUItPkluZm9ybWF0aW9uTGV2ZWwgPSBjcHVfdG9fbGUxNihTTUJfUVVFUllfRklMRV9VTklYX0xJTkspOwogCXBTTUItPlJlc2VydmVkNCA9IDA7Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGJ5dGVfY291bnQ7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGJ5dGVfY291bnQpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGJ5dGVfY291bnQpOwogCiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCkBAIC0yNDg5LDcgKzI0OTQsNyBAQAogCiAJCXJjID0gdmFsaWRhdGVfdDIoKHN0cnVjdCBzbWJfdDJfcnNwICopcFNNQnIpOwogCQkvKiBCQiBhbHNvIGNoZWNrIGVub3VnaCB0b3RhbCBieXRlcyByZXR1cm5lZCAqLwotCQlpZiAocmMgfHwgKHBTTUJyLT5CeXRlQ291bnQgPCAyKSkKKwkJaWYgKHJjIHx8IGdldF9iY2MoJnBTTUJyLT5oZHIpIDwgMikKIAkJCXJjID0gLUVJTzsKIAkJZWxzZSB7CiAJCQlib29sIGlzX3VuaWNvZGU7CkBAIC0yNTE2LDcgKzI1MjEsMTcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLSNpZmRlZiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwKKyNpZmRlZiBDT05GSUdfQ0lGU19TWU1MSU5LX0VYUEVSSU1FTlRBTAorLyoKKyAqCVJlY2VudCBXaW5kb3dzIHZlcnNpb25zIG5vdyBjcmVhdGUgc3ltbGlua3MgbW9yZSBmcmVxdWVudGx5CisgKglhbmQgdGhleSB1c2UgdGhlICJyZXBhcnNlIHBvaW50IiBtZWNoYW5pc20gYmVsb3cuICBXZSBjYW4gb2YgY291cnNlCisgKglkbyBzeW1saW5rcyBuaWNlbHkgdG8gU2FtYmEgYW5kIG90aGVyIHNlcnZlcnMgd2hpY2ggc3VwcG9ydCB0aGUKKyAqCUNJRlMgVW5peCBFeHRlbnNpb25zIGFuZCB3ZSBjYW4gYWxzbyBkbyBTRlUgc3ltbGlua3MgYW5kICJjbGllbnQgb25seSIKKyAqCSJNRiIgc3ltbGlua3Mgb3B0aW9uYWxseSwgYnV0IGZvciByZWNlbnQgV2luZG93cyB3ZSByZWFsbHkgbmVlZCB0bworICoJcmVlbmFibGUgdGhlIGNvZGUgYmVsb3cgYW5kIGZpeCB0aGUgY2lmc19zeW1saW5rIGNhbGxlcnMgdG8gaGFuZGxlIHRoaXMuCisgKglJbiB0aGUgaW50ZXJpbSB0aGlzIGNvZGUgaGFzIGJlZW4gbW92ZWQgdG8gaXRzIG93biBjb25maWcgb3B0aW9uIHNvCisgKglpdCBpcyBub3QgY29tcGlsZWQgaW4gYnkgZGVmYXVsdCB1bnRpbCBjYWxsZXJzIGZpeGVkIHVwIGFuZCBtb3JlIHRlc3RlZC4KKyAqLwogaW50CiBDSUZTU01CUXVlcnlSZXBhcnNlTGlua0luZm8oY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKIAkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlYXJjaE5hbWUsCkBAIC0yNTYxLDE0ICsyNTc2LDE0IEBACiAJfSBlbHNlIHsJCS8qIGRlY29kZSByZXNwb25zZSAqLwogCQlfX3UzMiBkYXRhX29mZnNldCA9IGxlMzJfdG9fY3B1KHBTTUJyLT5EYXRhT2Zmc2V0KTsKIAkJX191MzIgZGF0YV9jb3VudCA9IGxlMzJfdG9fY3B1KHBTTUJyLT5EYXRhQ291bnQpOwotCQlpZiAoKHBTTUJyLT5CeXRlQ291bnQgPCAyKSB8fCAoZGF0YV9vZmZzZXQgPiA1MTIpKSB7Ci0JCS8qIEJCIGFsc28gY2hlY2sgZW5vdWdoIHRvdGFsIGJ5dGVzIHJldHVybmVkICovCisJCWlmIChnZXRfYmNjKCZwU01Cci0+aGRyKSA8IDIgfHwgZGF0YV9vZmZzZXQgPiA1MTIpIHsKKwkJCS8qIEJCIGFsc28gY2hlY2sgZW5vdWdoIHRvdGFsIGJ5dGVzIHJldHVybmVkICovCiAJCQlyYyA9IC1FSU87CS8qIGJhZCBzbWIgKi8KIAkJCWdvdG8gcXJlcGFyc2Vfb3V0OwogCQl9CiAJCWlmIChkYXRhX2NvdW50ICYmIChkYXRhX2NvdW50IDwgMjA0OCkpIHsKIAkJCWNoYXIgKmVuZF9vZl9zbWIgPSAyIC8qIHNpemVvZiBieXRlIGNvdW50ICovICsKLQkJCQlwU01Cci0+Qnl0ZUNvdW50ICsgKGNoYXIgKikmcFNNQnItPkJ5dGVDb3VudDsKKwkJCSAgICAgICBnZXRfYmNjKCZwU01Cci0+aGRyKSArIChjaGFyICopJnBTTUJyLT5CeXRlQ291bnQ7CiAKIAkJCXN0cnVjdCByZXBhcnNlX2RhdGEgKnJlcGFyc2VfYnVmID0KIAkJCQkJCShzdHJ1Y3QgcmVwYXJzZV9kYXRhICopCkBAIC0yNjE4LDcgKzI2MzMsNyBAQAogCiAJcmV0dXJuIHJjOwogfQotI2VuZGlmIC8qIENJRlNfRVhQRVJJTUVOVEFMICovCisjZW5kaWYgLyogQ0lGU19TWU1MSU5LX0VYUEVSSU1FTlRBTCAqLyAvKiBCQiB0ZW1wb3JhcmlseSB1bnVzZWQgKi8KIAogI2lmZGVmIENPTkZJR19DSUZTX1BPU0lYCiAKQEAgLTI4MTQsNyArMjgyOSw3IEBACiAJcFNNQi0+UGFyYW1ldGVyQ291bnQgPSBwU01CLT5Ub3RhbFBhcmFtZXRlckNvdW50OwogCXBTTUItPkluZm9ybWF0aW9uTGV2ZWwgPSBjcHVfdG9fbGUxNihTTUJfUVVFUllfUE9TSVhfQUNMKTsKIAlwU01CLT5SZXNlcnZlZDQgPSAwOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBieXRlX2NvdW50KTsKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKIAogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLApAQCAtMjgyNiw4ICsyODQxLDggQEAKIAkJLyogZGVjb2RlIHJlc3BvbnNlICovCiAKIAkJcmMgPSB2YWxpZGF0ZV90Migoc3RydWN0IHNtYl90Ml9yc3AgKilwU01Ccik7Ci0JCWlmIChyYyB8fCAocFNNQnItPkJ5dGVDb3VudCA8IDIpKQogCQkvKiBCQiBhbHNvIGNoZWNrIGVub3VnaCB0b3RhbCBieXRlcyByZXR1cm5lZCAqLworCQlpZiAocmMgfHwgZ2V0X2JjYygmcFNNQnItPmhkcikgPCAyKQogCQkJcmMgPSAtRUlPOyAgICAgIC8qIGJhZCBzbWIgKi8KIAkJZWxzZSB7CiAJCQlfX3UxNiBkYXRhX29mZnNldCA9IGxlMTZfdG9fY3B1KHBTTUJyLT50Mi5EYXRhT2Zmc2V0KTsKQEAgLTI5MDgsNyArMjkyMyw3IEBACiAJcFNNQi0+UGFyYW1ldGVyQ291bnQgPSBjcHVfdG9fbGUxNihwYXJhbXMpOwogCXBTTUItPlRvdGFsUGFyYW1ldGVyQ291bnQgPSBwU01CLT5QYXJhbWV0ZXJDb3VudDsKIAlwU01CLT5SZXNlcnZlZDQgPSAwOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBieXRlX2NvdW50KTsKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKIAlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKIAkJCSAoc3RydWN0IHNtYl9oZHIgKikgcFNNQnIsICZieXRlc19yZXR1cm5lZCwgMCk7CkBAIC0yOTY2LDcgKzI5ODEsNyBAQAogCXBTTUItPkluZm9ybWF0aW9uTGV2ZWwgPSBjcHVfdG9fbGUxNihTTUJfUVVFUllfQVRUUl9GTEFHUyk7CiAJcFNNQi0+UGFkID0gMDsKIAlwU01CLT5GaWQgPSBuZXRmaWQ7Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGJ5dGVfY291bnQ7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGJ5dGVfY291bnQpOwogCXBTTUItPnQyLkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGJ5dGVfY291bnQpOwogCiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCkBAIC0yOTc2LDggKzI5OTEsOCBAQAogCX0gZWxzZSB7CiAJCS8qIGRlY29kZSByZXNwb25zZSAqLwogCQlyYyA9IHZhbGlkYXRlX3QyKChzdHJ1Y3Qgc21iX3QyX3JzcCAqKXBTTUJyKTsKLQkJaWYgKHJjIHx8IChwU01Cci0+Qnl0ZUNvdW50IDwgMikpCiAJCS8qIEJCIGFsc28gY2hlY2sgZW5vdWdoIHRvdGFsIGJ5dGVzIHJldHVybmVkICovCisJCWlmIChyYyB8fCBnZXRfYmNjKCZwU01Cci0+aGRyKSA8IDIpCiAJCQkvKiBJZiByYyBzaG91bGQgd2UgY2hlY2sgZm9yIEVPUE5PU1VQUCBhbmQKIAkJCSAgIGRpc2FibGUgdGhlIHNydmlubyBmbGFnPyBvciBpbiBjYWxsZXI/ICovCiAJCQlyYyA9IC1FSU87ICAgICAgLyogYmFkIHNtYiAqLwpAQCAtMzA1Miw2ICszMDY3LDcgQEAKIAljaGFyICplbmRfb2Zfc21iOwogCV9fdTMyIGRhdGFfY291bnQsIGRhdGFfb2Zmc2V0LCBwYXJtX2NvdW50LCBwYXJtX29mZnNldDsKIAlzdHJ1Y3Qgc21iX2NvbV9udHJhbnNhY3RfcnNwICpwU01CcjsKKwl1MTYgYmNjOwogCiAJKnBkYXRhbGVuID0gMDsKIAkqcHBhcm1sZW4gPSAwOwpAQCAtMzA2MSw4ICszMDc3LDggQEAKIAogCXBTTUJyID0gKHN0cnVjdCBzbWJfY29tX250cmFuc2FjdF9yc3AgKilidWY7CiAKLQkvKiBCeXRlQ291bnQgd2FzIGNvbnZlcnRlZCBmcm9tIGxpdHRsZSBlbmRpYW4gaW4gU2VuZFJlY2VpdmUgKi8KLQllbmRfb2Zfc21iID0gMiAvKiBzaXplb2YgYnl0ZSBjb3VudCAqLyArIHBTTUJyLT5CeXRlQ291bnQgKworCWJjYyA9IGdldF9iY2MoJnBTTUJyLT5oZHIpOworCWVuZF9vZl9zbWIgPSAyIC8qIHNpemVvZiBieXRlIGNvdW50ICovICsgYmNjICsKIAkJCShjaGFyICopJnBTTUJyLT5CeXRlQ291bnQ7CiAKIAlkYXRhX29mZnNldCA9IGxlMzJfdG9fY3B1KHBTTUJyLT5EYXRhT2Zmc2V0KTsKQEAgLTMwODgsNyArMzEwNCw3IEBACiAJCQkqcHBkYXRhLCBkYXRhX2NvdW50LCAoZGF0YV9jb3VudCArICpwcGRhdGEpLAogCQkJZW5kX29mX3NtYiwgcFNNQnIpOwogCQlyZXR1cm4gLUVJTlZBTDsKLQl9IGVsc2UgaWYgKHBhcm1fY291bnQgKyBkYXRhX2NvdW50ID4gcFNNQnItPkJ5dGVDb3VudCkgeworCX0gZWxzZSBpZiAocGFybV9jb3VudCArIGRhdGFfY291bnQgPiBiY2MpIHsKIAkJY0ZZSSgxLCAicGFybSBjb3VudCBhbmQgZGF0YSBjb3VudCBsYXJnZXIgdGhhbiBTTUIiKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMzEyNCw5ICszMTQwLDkgQEAKIAlwU01CLT5BY2xGbGFncyA9IGNwdV90b19sZTMyKENJRlNfQUNMX09XTkVSIHwgQ0lGU19BQ0xfR1JPVVAgfAogCQkJCSAgICAgQ0lGU19BQ0xfREFDTCk7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoMTEpOyAvKiAzIGJ5dGVzIHBhZCArIDggYnl0ZXMgcGFybSAqLwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSAxMTsKKwlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgMTEpOwogCWlvdlswXS5pb3ZfYmFzZSA9IChjaGFyICopcFNNQjsKLQlpb3ZbMF0uaW92X2xlbiA9IHBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArIDQ7CisJaW92WzBdLmlvdl9sZW4gPSBiZTMyX3RvX2NwdShwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGgpICsgNDsKIAogCXJjID0gU2VuZFJlY2VpdmUyKHhpZCwgdGNvbi0+c2VzLCBpb3YsIDEgLyogbnVtIGlvdmVjICovLCAmYnVmX3R5cGUsCiAJCQkgMCk7CkBAIC0zMjM1LDEwICszMjUxLDkgQEAKIAkJbWVtY3B5KChjaGFyICopICZwU01Cci0+aGRyLlByb3RvY29sICsgZGF0YV9vZmZzZXQsCiAJCQkoY2hhciAqKSBwbnRzZCwKIAkJCWFjbGxlbik7Ci0JCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSAoYnl0ZV9jb3VudCArIGRhdGFfY291bnQpOwotCisJCWluY19yZmMxMDAxX2xlbihwU01CLCBieXRlX2NvdW50ICsgZGF0YV9jb3VudCk7CiAJfSBlbHNlCi0JCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OworCQlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgYnl0ZV9jb3VudCk7CiAKIAlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKIAkJKHN0cnVjdCBzbWJfaGRyICopIHBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQsIDApOwpAQCAtMzI4OSw3ICszMzA0LDcgQEAKIAl9CiAJcFNNQi0+QnVmZmVyRm9ybWF0ID0gMHgwNDsKIAluYW1lX2xlbisrOyAvKiBhY2NvdW50IGZvciBidWZmZXIgdHlwZSBieXRlICovCi0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IChfX3UxNikgbmFtZV9sZW47CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIChfX3UxNiluYW1lX2xlbik7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYobmFtZV9sZW4pOwogCiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCkBAIC0zMzY0LDcgKzMzNzksNyBAQAogCXBTTUItPkluZm9ybWF0aW9uTGV2ZWwgPSBjcHVfdG9fbGUxNihTTUJfUVVFUllfRklMRV9BTExfSU5GTyk7CiAJcFNNQi0+UGFkID0gMDsKIAlwU01CLT5GaWQgPSBuZXRmaWQ7Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGJ5dGVfY291bnQ7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGJ5dGVfY291bnQpOwogCiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCiAJCQkgKHN0cnVjdCBzbWJfaGRyICopIHBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQsIDApOwpAQCAtMzM3NSw3ICszMzkwLDcgQEAKIAogCQlpZiAocmMpIC8qIEJCIGFkZCBhdXRvIHJldHJ5IG9uIEVPUE5PVFNVUFA/ICovCiAJCQlyYyA9IC1FSU87Ci0JCWVsc2UgaWYgKHBTTUJyLT5CeXRlQ291bnQgPCA0MCkKKwkJZWxzZSBpZiAoZ2V0X2JjYygmcFNNQnItPmhkcikgPCA0MCkKIAkJCXJjID0gLUVJTzsJLyogYmFkIHNtYiAqLwogCQllbHNlIGlmIChwRmluZERhdGEpIHsKIAkJCV9fdTE2IGRhdGFfb2Zmc2V0ID0gbGUxNl90b19jcHUocFNNQnItPnQyLkRhdGFPZmZzZXQpOwpAQCAtMzQ1MSw3ICszNDY2LDcgQEAKIAllbHNlCiAJCXBTTUItPkluZm9ybWF0aW9uTGV2ZWwgPSBjcHVfdG9fbGUxNihTTUJfUVVFUllfRklMRV9BTExfSU5GTyk7CiAJcFNNQi0+UmVzZXJ2ZWQ0ID0gMDsKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gYnl0ZV9jb3VudDsKKwlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgYnl0ZV9jb3VudCk7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoYnl0ZV9jb3VudCk7CiAKIAlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKQEAgLTM0NjMsOSArMzQ3OCw5IEBACiAKIAkJaWYgKHJjKSAvKiBCQiBhZGQgYXV0byByZXRyeSBvbiBFT1BOT1RTVVBQPyAqLwogCQkJcmMgPSAtRUlPOwotCQllbHNlIGlmICghbGVnYWN5ICYmIChwU01Cci0+Qnl0ZUNvdW50IDwgNDApKQorCQllbHNlIGlmICghbGVnYWN5ICYmIGdldF9iY2MoJnBTTUJyLT5oZHIpIDwgNDApCiAJCQlyYyA9IC1FSU87CS8qIGJhZCBzbWIgKi8KLQkJZWxzZSBpZiAobGVnYWN5ICYmIChwU01Cci0+Qnl0ZUNvdW50IDwgMjQpKQorCQllbHNlIGlmIChsZWdhY3kgJiYgZ2V0X2JjYygmcFNNQnItPmhkcikgPCAyNCkKIAkJCXJjID0gLUVJTzsgIC8qIDI0IG9yIDI2IGV4cGVjdGVkIGJ1dCB3ZSBkbyBub3QgcmVhZAogCQkJCQlsYXN0IGZpZWxkICovCiAJCWVsc2UgaWYgKHBGaW5kRGF0YSkgewpAQCAtMzUzMiw3ICszNTQ3LDcgQEAKIAlwU01CLT5JbmZvcm1hdGlvbkxldmVsID0gY3B1X3RvX2xlMTYoU01CX1FVRVJZX0ZJTEVfVU5JWF9CQVNJQyk7CiAJcFNNQi0+UGFkID0gMDsKIAlwU01CLT5GaWQgPSBuZXRmaWQ7Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGJ5dGVfY291bnQ7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGJ5dGVfY291bnQpOwogCiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCiAJCQkgKHN0cnVjdCBzbWJfaGRyICopIHBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQsIDApOwpAQCAtMzU0MSw3ICszNTU2LDcgQEAKIAl9IGVsc2UgewkJLyogZGVjb2RlIHJlc3BvbnNlICovCiAJCXJjID0gdmFsaWRhdGVfdDIoKHN0cnVjdCBzbWJfdDJfcnNwICopcFNNQnIpOwogCi0JCWlmIChyYyB8fCAocFNNQnItPkJ5dGVDb3VudCA8IHNpemVvZihGSUxFX1VOSVhfQkFTSUNfSU5GTykpKSB7CisJCWlmIChyYyB8fCBnZXRfYmNjKCZwU01Cci0+aGRyKSA8IHNpemVvZihGSUxFX1VOSVhfQkFTSUNfSU5GTykpIHsKIAkJCWNFUlJPUigxLCAiTWFsZm9ybWVkIEZJTEVfVU5JWF9CQVNJQ19JTkZPIHJlc3BvbnNlLlxuIgogCQkJCSAgICJVbml4IEV4dGVuc2lvbnMgY2FuIGJlIGRpc2FibGVkIG9uIG1vdW50ICIKIAkJCQkgICAiYnkgc3BlY2lmeWluZyB0aGUgbm9zZnUgbW91bnQgb3B0aW9uLiIpOwpAQCAtMzYxNyw3ICszNjMyLDcgQEAKIAlwU01CLT5QYXJhbWV0ZXJDb3VudCA9IHBTTUItPlRvdGFsUGFyYW1ldGVyQ291bnQ7CiAJcFNNQi0+SW5mb3JtYXRpb25MZXZlbCA9IGNwdV90b19sZTE2KFNNQl9RVUVSWV9GSUxFX1VOSVhfQkFTSUMpOwogCXBTTUItPlJlc2VydmVkNCA9IDA7Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGJ5dGVfY291bnQ7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGJ5dGVfY291bnQpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGJ5dGVfY291bnQpOwogCiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCkBAIC0zNjI3LDcgKzM2NDIsNyBAQAogCX0gZWxzZSB7CQkvKiBkZWNvZGUgcmVzcG9uc2UgKi8KIAkJcmMgPSB2YWxpZGF0ZV90Migoc3RydWN0IHNtYl90Ml9yc3AgKilwU01Ccik7CiAKLQkJaWYgKHJjIHx8IChwU01Cci0+Qnl0ZUNvdW50IDwgc2l6ZW9mKEZJTEVfVU5JWF9CQVNJQ19JTkZPKSkpIHsKKwkJaWYgKHJjIHx8IGdldF9iY2MoJnBTTUJyLT5oZHIpIDwgc2l6ZW9mKEZJTEVfVU5JWF9CQVNJQ19JTkZPKSkgewogCQkJY0VSUk9SKDEsICJNYWxmb3JtZWQgRklMRV9VTklYX0JBU0lDX0lORk8gcmVzcG9uc2UuXG4iCiAJCQkJICAgIlVuaXggRXh0ZW5zaW9ucyBjYW4gYmUgZGlzYWJsZWQgb24gbW91bnQgIgogCQkJCSAgICJieSBzcGVjaWZ5aW5nIHRoZSBub3NmdSBtb3VudCBvcHRpb24uIik7CkBAIC0zNzMxLDcgKzM3NDYsNyBAQAogCiAJLyogQkIgd2hhdCBzaG91bGQgd2Ugc2V0IFN0b3JhZ2VUeXBlIHRvPyBEb2VzIGl0IG1hdHRlcj8gQkIgKi8KIAlwU01CLT5TZWFyY2hTdG9yYWdlVHlwZSA9IDA7Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGJ5dGVfY291bnQ7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGJ5dGVfY291bnQpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGJ5dGVfY291bnQpOwogCiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCkBAIC0zODYwLDcgKzM4NzUsNyBAQAogCWJ5dGVfY291bnQgPSBwYXJhbXMgKyAxIC8qIHBhZCAqLyA7CiAJcFNNQi0+VG90YWxQYXJhbWV0ZXJDb3VudCA9IGNwdV90b19sZTE2KHBhcmFtcyk7CiAJcFNNQi0+UGFyYW1ldGVyQ291bnQgPSBwU01CLT5Ub3RhbFBhcmFtZXRlckNvdW50OwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBieXRlX2NvdW50KTsKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKIAogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLApAQCAtNDAyMiw3ICs0MDM3LDcgQEAKIAlwU01CLT5QYXJhbWV0ZXJDb3VudCA9IHBTTUItPlRvdGFsUGFyYW1ldGVyQ291bnQ7CiAJcFNNQi0+SW5mb3JtYXRpb25MZXZlbCA9IGNwdV90b19sZTE2KFNNQl9RVUVSWV9GSUxFX0lOVEVSTkFMX0lORk8pOwogCXBTTUItPlJlc2VydmVkNCA9IDA7Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGJ5dGVfY291bnQ7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGJ5dGVfY291bnQpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGJ5dGVfY291bnQpOwogCiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCkBAIC00MDMyLDggKzQwNDcsOCBAQAogCX0gZWxzZSB7CiAJCS8qIGRlY29kZSByZXNwb25zZSAqLwogCQlyYyA9IHZhbGlkYXRlX3QyKChzdHJ1Y3Qgc21iX3QyX3JzcCAqKXBTTUJyKTsKLQkJaWYgKHJjIHx8IChwU01Cci0+Qnl0ZUNvdW50IDwgMikpCiAJCS8qIEJCIGFsc28gY2hlY2sgZW5vdWdoIHRvdGFsIGJ5dGVzIHJldHVybmVkICovCisJCWlmIChyYyB8fCBnZXRfYmNjKCZwU01Cci0+aGRyKSA8IDIpCiAJCQkvKiBJZiByYyBzaG91bGQgd2UgY2hlY2sgZm9yIEVPUE5PU1VQUCBhbmQKIAkJCWRpc2FibGUgdGhlIHNydmlubyBmbGFnPyBvciBpbiBjYWxsZXI/ICovCiAJCQlyYyA9IC1FSU87ICAgICAgLyogYmFkIHNtYiAqLwpAQCAtNDI0Niw3ICs0MjYxLDcgQEAKIAlwU01CLT5QYXJhbWV0ZXJDb3VudCA9IGNwdV90b19sZTE2KHBhcmFtcyk7CiAJcFNNQi0+VG90YWxQYXJhbWV0ZXJDb3VudCA9IHBTTUItPlBhcmFtZXRlckNvdW50OwogCXBTTUItPk1heFJlZmVycmFsTGV2ZWwgPSBjcHVfdG9fbGUxNigzKTsKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gYnl0ZV9jb3VudDsKKwlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgYnl0ZV9jb3VudCk7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoYnl0ZV9jb3VudCk7CiAKIAlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgc2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKQEAgLTQyNTgsMTMgKzQyNzMsMTMgQEAKIAlyYyA9IHZhbGlkYXRlX3QyKChzdHJ1Y3Qgc21iX3QyX3JzcCAqKXBTTUJyKTsKIAogCS8qIEJCIEFsc28gY2hlY2sgaWYgZW5vdWdoIHRvdGFsIGJ5dGVzIHJldHVybmVkPyAqLwotCWlmIChyYyB8fCAocFNNQnItPkJ5dGVDb3VudCA8IDE3KSkgeworCWlmIChyYyB8fCBnZXRfYmNjKCZwU01Cci0+aGRyKSA8IDE3KSB7CiAJCXJjID0gLUVJTzsgICAgICAvKiBiYWQgc21iICovCiAJCWdvdG8gR2V0REZTUmVmRXhpdDsKIAl9CiAKIAljRllJKDEsICJEZWNvZGluZyBHZXRERlNSZWZlciByZXNwb25zZSBCQ0M6ICVkICBPZmZzZXQgJWQiLAotCQkJCXBTTUJyLT5CeXRlQ291bnQsCisJCQkJZ2V0X2JjYygmcFNNQnItPmhkciksCiAJCQkJbGUxNl90b19jcHUocFNNQnItPnQyLkRhdGFPZmZzZXQpKTsKIAogCS8qIHBhcnNlIHJldHVybmVkIHJlc3VsdCBpbnRvIG1vcmUgdXNhYmxlIGZvcm0gKi8KQEAgLTQzMjAsNyArNDMzNSw3IEBACiAJcFNNQi0+UmVzZXJ2ZWQzID0gMDsKIAlwU01CLT5TdWJDb21tYW5kID0gY3B1X3RvX2xlMTYoVFJBTlMyX1FVRVJZX0ZTX0lORk9STUFUSU9OKTsKIAlwU01CLT5JbmZvcm1hdGlvbkxldmVsID0gY3B1X3RvX2xlMTYoU01CX0lORk9fQUxMT0NBVElPTik7Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGJ5dGVfY291bnQ7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGJ5dGVfY291bnQpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGJ5dGVfY291bnQpOwogCiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCkBAIC00MzMwLDEyICs0MzQ1LDEyIEBACiAJfSBlbHNlIHsgICAgICAgICAgICAgICAgLyogZGVjb2RlIHJlc3BvbnNlICovCiAJCXJjID0gdmFsaWRhdGVfdDIoKHN0cnVjdCBzbWJfdDJfcnNwICopcFNNQnIpOwogCi0JCWlmIChyYyB8fCAocFNNQnItPkJ5dGVDb3VudCA8IDE4KSkKKwkJaWYgKHJjIHx8IGdldF9iY2MoJnBTTUJyLT5oZHIpIDwgMTgpCiAJCQlyYyA9IC1FSU87ICAgICAgLyogYmFkIHNtYiAqLwogCQllbHNlIHsKIAkJCV9fdTE2IGRhdGFfb2Zmc2V0ID0gbGUxNl90b19jcHUocFNNQnItPnQyLkRhdGFPZmZzZXQpOwogCQkJY0ZZSSgxLCAicWZzaW5mIHJlc3AgQkNDOiAlZCAgT2Zmc2V0ICVkIiwKLQkJCQkgcFNNQnItPkJ5dGVDb3VudCwgZGF0YV9vZmZzZXQpOworCQkJCSBnZXRfYmNjKCZwU01Cci0+aGRyKSwgZGF0YV9vZmZzZXQpOwogCiAJCQlyZXNwb25zZV9kYXRhID0gKEZJTEVfU1lTVEVNX0FMTE9DX0lORk8gKikKIAkJCQkoKChjaGFyICopICZwU01Cci0+aGRyLlByb3RvY29sKSArIGRhdGFfb2Zmc2V0KTsKQEAgLTQzOTksNyArNDQxNCw3IEBACiAJcFNNQi0+UmVzZXJ2ZWQzID0gMDsKIAlwU01CLT5TdWJDb21tYW5kID0gY3B1X3RvX2xlMTYoVFJBTlMyX1FVRVJZX0ZTX0lORk9STUFUSU9OKTsKIAlwU01CLT5JbmZvcm1hdGlvbkxldmVsID0gY3B1X3RvX2xlMTYoU01CX1FVRVJZX0ZTX1NJWkVfSU5GTyk7Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGJ5dGVfY291bnQ7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGJ5dGVfY291bnQpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGJ5dGVfY291bnQpOwogCiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCkBAIC00NDA5LDcgKzQ0MjQsNyBAQAogCX0gZWxzZSB7CQkvKiBkZWNvZGUgcmVzcG9uc2UgKi8KIAkJcmMgPSB2YWxpZGF0ZV90Migoc3RydWN0IHNtYl90Ml9yc3AgKilwU01Ccik7CiAKLQkJaWYgKHJjIHx8IChwU01Cci0+Qnl0ZUNvdW50IDwgMjQpKQorCQlpZiAocmMgfHwgZ2V0X2JjYygmcFNNQnItPmhkcikgPCAyNCkKIAkJCXJjID0gLUVJTzsJLyogYmFkIHNtYiAqLwogCQllbHNlIHsKIAkJCV9fdTE2IGRhdGFfb2Zmc2V0ID0gbGUxNl90b19jcHUocFNNQnItPnQyLkRhdGFPZmZzZXQpOwpAQCAtNDQ3OSw3ICs0NDk0LDcgQEAKIAlwU01CLT5SZXNlcnZlZDMgPSAwOwogCXBTTUItPlN1YkNvbW1hbmQgPSBjcHVfdG9fbGUxNihUUkFOUzJfUVVFUllfRlNfSU5GT1JNQVRJT04pOwogCXBTTUItPkluZm9ybWF0aW9uTGV2ZWwgPSBjcHVfdG9fbGUxNihTTUJfUVVFUllfRlNfQVRUUklCVVRFX0lORk8pOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBieXRlX2NvdW50KTsKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKIAogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLApAQCAtNDQ4OSw3ICs0NTA0LDcgQEAKIAl9IGVsc2UgewkJLyogZGVjb2RlIHJlc3BvbnNlICovCiAJCXJjID0gdmFsaWRhdGVfdDIoKHN0cnVjdCBzbWJfdDJfcnNwICopcFNNQnIpOwogCi0JCWlmIChyYyB8fCAocFNNQnItPkJ5dGVDb3VudCA8IDEzKSkgeworCQlpZiAocmMgfHwgZ2V0X2JjYygmcFNNQnItPmhkcikgPCAxMykgewogCQkJLyogQkIgYWxzbyBjaGVjayBpZiBlbm91Z2ggYnl0ZXMgcmV0dXJuZWQgKi8KIAkJCXJjID0gLUVJTzsJLyogYmFkIHNtYiAqLwogCQl9IGVsc2UgewpAQCAtNDU1MCw3ICs0NTY1LDcgQEAKIAlwU01CLT5SZXNlcnZlZDMgPSAwOwogCXBTTUItPlN1YkNvbW1hbmQgPSBjcHVfdG9fbGUxNihUUkFOUzJfUVVFUllfRlNfSU5GT1JNQVRJT04pOwogCXBTTUItPkluZm9ybWF0aW9uTGV2ZWwgPSBjcHVfdG9fbGUxNihTTUJfUVVFUllfRlNfREVWSUNFX0lORk8pOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBieXRlX2NvdW50KTsKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKIAogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLApAQCAtNDU2MCw3ICs0NTc1LDggQEAKIAl9IGVsc2UgewkJLyogZGVjb2RlIHJlc3BvbnNlICovCiAJCXJjID0gdmFsaWRhdGVfdDIoKHN0cnVjdCBzbWJfdDJfcnNwICopcFNNQnIpOwogCi0JCWlmIChyYyB8fCAocFNNQnItPkJ5dGVDb3VudCA8IHNpemVvZihGSUxFX1NZU1RFTV9ERVZJQ0VfSU5GTykpKQorCQlpZiAocmMgfHwgZ2V0X2JjYygmcFNNQnItPmhkcikgPAorCQkJICBzaXplb2YoRklMRV9TWVNURU1fREVWSUNFX0lORk8pKQogCQkJcmMgPSAtRUlPOwkvKiBiYWQgc21iICovCiAJCWVsc2UgewogCQkJX191MTYgZGF0YV9vZmZzZXQgPSBsZTE2X3RvX2NwdShwU01Cci0+dDIuRGF0YU9mZnNldCk7CkBAIC00NjE5LDcgKzQ2MzUsNyBAQAogCXBTTUItPlJlc2VydmVkMyA9IDA7CiAJcFNNQi0+U3ViQ29tbWFuZCA9IGNwdV90b19sZTE2KFRSQU5TMl9RVUVSWV9GU19JTkZPUk1BVElPTik7CiAJcFNNQi0+SW5mb3JtYXRpb25MZXZlbCA9IGNwdV90b19sZTE2KFNNQl9RVUVSWV9DSUZTX1VOSVhfSU5GTyk7Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGJ5dGVfY291bnQ7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGJ5dGVfY291bnQpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGJ5dGVfY291bnQpOwogCiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCkBAIC00NjI5LDcgKzQ2NDUsNyBAQAogCX0gZWxzZSB7CQkvKiBkZWNvZGUgcmVzcG9uc2UgKi8KIAkJcmMgPSB2YWxpZGF0ZV90Migoc3RydWN0IHNtYl90Ml9yc3AgKilwU01Ccik7CiAKLQkJaWYgKHJjIHx8IChwU01Cci0+Qnl0ZUNvdW50IDwgMTMpKSB7CisJCWlmIChyYyB8fCBnZXRfYmNjKCZwU01Cci0+aGRyKSA8IDEzKSB7CiAJCQlyYyA9IC1FSU87CS8qIGJhZCBzbWIgKi8KIAkJfSBlbHNlIHsKIAkJCV9fdTE2IGRhdGFfb2Zmc2V0ID0gbGUxNl90b19jcHUocFNNQnItPnQyLkRhdGFPZmZzZXQpOwpAQCAtNDcwMiw3ICs0NzE4LDcgQEAKIAlwU01CLT5DbGllbnRVbml4TWlub3IgPSBjcHVfdG9fbGUxNihDSUZTX1VOSVhfTUlOT1JfVkVSU0lPTik7CiAJcFNNQi0+Q2xpZW50VW5peENhcCA9IGNwdV90b19sZTY0KGNhcCk7CiAKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gYnl0ZV9jb3VudDsKKwlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgYnl0ZV9jb3VudCk7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoYnl0ZV9jb3VudCk7CiAKIAlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKQEAgLTQ3NjQsNyArNDc4MCw3IEBACiAJcFNNQi0+UmVzZXJ2ZWQzID0gMDsKIAlwU01CLT5TdWJDb21tYW5kID0gY3B1X3RvX2xlMTYoVFJBTlMyX1FVRVJZX0ZTX0lORk9STUFUSU9OKTsKIAlwU01CLT5JbmZvcm1hdGlvbkxldmVsID0gY3B1X3RvX2xlMTYoU01CX1FVRVJZX1BPU0lYX0ZTX0lORk8pOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBieXRlX2NvdW50KTsKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKIAogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLApAQCAtNDc3NCw3ICs0NzkwLDcgQEAKIAl9IGVsc2UgewkJLyogZGVjb2RlIHJlc3BvbnNlICovCiAJCXJjID0gdmFsaWRhdGVfdDIoKHN0cnVjdCBzbWJfdDJfcnNwICopcFNNQnIpOwogCi0JCWlmIChyYyB8fCAocFNNQnItPkJ5dGVDb3VudCA8IDEzKSkgeworCQlpZiAocmMgfHwgZ2V0X2JjYygmcFNNQnItPmhkcikgPCAxMykgewogCQkJcmMgPSAtRUlPOwkvKiBiYWQgc21iICovCiAJCX0gZWxzZSB7CiAJCQlfX3UxNiBkYXRhX29mZnNldCA9IGxlMTZfdG9fY3B1KHBTTUJyLT50Mi5EYXRhT2Zmc2V0KTsKQEAgLTQ4OTAsNyArNDkwNiw3IEBACiAJcFNNQi0+UGFyYW1ldGVyQ291bnQgPSBjcHVfdG9fbGUxNihwYXJhbXMpOwogCXBTTUItPlRvdGFsUGFyYW1ldGVyQ291bnQgPSBwU01CLT5QYXJhbWV0ZXJDb3VudDsKIAlwU01CLT5SZXNlcnZlZDQgPSAwOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBieXRlX2NvdW50KTsKIAlwYXJtX2RhdGEtPkZpbGVTaXplID0gY3B1X3RvX2xlNjQoc2l6ZSk7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoYnl0ZV9jb3VudCk7CiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCkBAIC00OTY5LDcgKzQ5ODUsNyBAQAogCQkJCWNwdV90b19sZTE2KFNNQl9TRVRfRklMRV9FTkRfT0ZfRklMRV9JTkZPKTsKIAl9CiAJcFNNQi0+UmVzZXJ2ZWQ0ID0gMDsKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gYnl0ZV9jb3VudDsKKwlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgYnl0ZV9jb3VudCk7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoYnl0ZV9jb3VudCk7CiAJcmMgPSBTZW5kUmVjZWl2ZU5vUnNwKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwgMCk7CiAJaWYgKHJjKSB7CkBAIC01MDM3LDcgKzUwNTMsNyBAQAogCWVsc2UKIAkJcFNNQi0+SW5mb3JtYXRpb25MZXZlbCA9IGNwdV90b19sZTE2KFNNQl9TRVRfRklMRV9CQVNJQ19JTkZPKTsKIAlwU01CLT5SZXNlcnZlZDQgPSAwOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBieXRlX2NvdW50KTsKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKIAltZW1jcHkoZGF0YV9vZmZzZXQsIGRhdGEsIHNpemVvZihGSUxFX0JBU0lDX0lORk8pKTsKIAlyYyA9IFNlbmRSZWNlaXZlTm9Sc3AoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLCAwKTsKQEAgLTUwOTYsNyArNTExMiw3IEBACiAJcFNNQi0+RmlkID0gZmlkOwogCXBTTUItPkluZm9ybWF0aW9uTGV2ZWwgPSBjcHVfdG9fbGUxNihTTUJfU0VUX0ZJTEVfRElTUE9TSVRJT05fSU5GTyk7CiAJcFNNQi0+UmVzZXJ2ZWQ0ID0gMDsKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gYnl0ZV9jb3VudDsKKwlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgYnl0ZV9jb3VudCk7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoYnl0ZV9jb3VudCk7CiAJKmRhdGFfb2Zmc2V0ID0gZGVsZXRlX2ZpbGUgPyAxIDogMDsKIAlyYyA9IFNlbmRSZWNlaXZlTm9Sc3AoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLCAwKTsKQEAgLTUxNjksNyArNTE4NSw3IEBACiAJZWxzZQogCQlwU01CLT5JbmZvcm1hdGlvbkxldmVsID0gY3B1X3RvX2xlMTYoU01CX1NFVF9GSUxFX0JBU0lDX0lORk8pOwogCXBTTUItPlJlc2VydmVkNCA9IDA7Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGJ5dGVfY291bnQ7CisJaW5jX3JmYzEwMDFfbGVuKHBTTUIsIGJ5dGVfY291bnQpOwogCW1lbWNweShkYXRhX29mZnNldCwgZGF0YSwgc2l6ZW9mKEZJTEVfQkFTSUNfSU5GTykpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGJ5dGVfY291bnQpOwogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLApAQCAtNTIyMSw3ICs1MjM3LDcgQEAKIAl9CiAJcFNNQi0+YXR0ciA9IGNwdV90b19sZTE2KGRvc19hdHRycyk7CiAJcFNNQi0+QnVmZmVyRm9ybWF0ID0gMHgwNDsKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gbmFtZV9sZW4gKyAxOworCWluY19yZmMxMDAxX2xlbihwU01CLCBuYW1lX2xlbiArIDEpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KG5hbWVfbGVuICsgMSk7CiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCiAJCQkgKHN0cnVjdCBzbWJfaGRyICopIHBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQsIDApOwpAQCAtNTMyNiw3ICs1MzQyLDcgQEAKIAlwU01CLT5GaWQgPSBmaWQ7CiAJcFNNQi0+SW5mb3JtYXRpb25MZXZlbCA9IGNwdV90b19sZTE2KFNNQl9TRVRfRklMRV9VTklYX0JBU0lDKTsKIAlwU01CLT5SZXNlcnZlZDQgPSAwOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBieXRlX2NvdW50KTsKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKIAogCWNpZnNfZmlsbF91bml4X3NldF9pbmZvKGRhdGFfb2Zmc2V0LCBhcmdzKTsKQEAgLTU0MDIsNyArNTQxOCw3IEBACiAJcFNNQi0+VG90YWxEYXRhQ291bnQgPSBwU01CLT5EYXRhQ291bnQ7CiAJcFNNQi0+SW5mb3JtYXRpb25MZXZlbCA9IGNwdV90b19sZTE2KFNNQl9TRVRfRklMRV9VTklYX0JBU0lDKTsKIAlwU01CLT5SZXNlcnZlZDQgPSAwOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBieXRlX2NvdW50KTsKIAogCWNpZnNfZmlsbF91bml4X3NldF9pbmZvKGRhdGFfb2Zmc2V0LCBhcmdzKTsKIApAQCAtNTQxOCw3OSArNTQzNCw2IEBACiAJcmV0dXJuIHJjOwogfQogCi1pbnQgQ0lGU1NNQk5vdGlmeShjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAotCQkgIGNvbnN0IGludCBub3RpZnlfc3ViZGlycywgY29uc3QgX191MTYgbmV0ZmlkLAotCQkgIF9fdTMyIGZpbHRlciwgc3RydWN0IGZpbGUgKnBmaWxlLCBpbnQgbXVsdGlzaG90LAotCQkgIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBzbWJfY29tX3RyYW5zYWN0aW9uX2NoYW5nZV9ub3RpZnlfcmVxICpwU01CID0gTlVMTDsKLQlzdHJ1Y3Qgc21iX2NvbV9udHJhbnNhY3Rpb25fY2hhbmdlX25vdGlmeV9yc3AgKnBTTUJyID0gTlVMTDsKLQlzdHJ1Y3QgZGlyX25vdGlmeV9yZXEgKmRub3RpZnlfcmVxOwotCWludCBieXRlc19yZXR1cm5lZDsKLQotCWNGWUkoMSwgIkluIENJRlNTTUJOb3RpZnkgZm9yIGZpbGUgaGFuZGxlICVkIiwgKGludCluZXRmaWQpOwotCXJjID0gc21iX2luaXQoU01CX0NPTV9OVF9UUkFOU0FDVCwgMjMsIHRjb24sICh2b2lkICoqKSAmcFNNQiwKLQkJICAgICAgKHZvaWQgKiopICZwU01Ccik7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQlwU01CLT5Ub3RhbFBhcmFtZXRlckNvdW50ID0gMCA7Ci0JcFNNQi0+VG90YWxEYXRhQ291bnQgPSAwOwotCXBTTUItPk1heFBhcmFtZXRlckNvdW50ID0gY3B1X3RvX2xlMzIoMik7Ci0JLyogQkIgZmluZCBleGFjdCBkYXRhIGNvdW50IG1heCBmcm9tIHNlc3Mgc3RydWN0dXJlIEJCICovCi0JcFNNQi0+TWF4RGF0YUNvdW50ID0gMDsgLyogc2FtZSBpbiBsaXR0bGUgZW5kaWFuIG9yIGJlICovCi0vKiBCQiBWRVJJRlkgdmVyaWZ5IHdoaWNoIGlzIGNvcnJlY3QgZm9yIGFib3ZlIEJCICovCi0JcFNNQi0+TWF4RGF0YUNvdW50ID0gY3B1X3RvX2xlMzIoKHRjb24tPnNlcy0+c2VydmVyLT5tYXhCdWYgLQotCQkJCQkgICAgIE1BWF9DSUZTX0hEUl9TSVpFKSAmIDB4RkZGRkZGMDApOwotCi0JcFNNQi0+TWF4U2V0dXBDb3VudCA9IDQ7Ci0JcFNNQi0+UmVzZXJ2ZWQgPSAwOwotCXBTTUItPlBhcmFtZXRlck9mZnNldCA9IDA7Ci0JcFNNQi0+RGF0YUNvdW50ID0gMDsKLQlwU01CLT5EYXRhT2Zmc2V0ID0gMDsKLQlwU01CLT5TZXR1cENvdW50ID0gNDsgLyogc2luZ2xlIGJ5dGUgZG9lcyBub3QgbmVlZCBsZSBjb252ZXJzaW9uICovCi0JcFNNQi0+U3ViQ29tbWFuZCA9IGNwdV90b19sZTE2KE5UX1RSQU5TQUNUX05PVElGWV9DSEFOR0UpOwotCXBTTUItPlBhcmFtZXRlckNvdW50ID0gcFNNQi0+VG90YWxQYXJhbWV0ZXJDb3VudDsKLQlpZiAobm90aWZ5X3N1YmRpcnMpCi0JCXBTTUItPldhdGNoVHJlZSA9IDE7IC8qIG9uZSBieXRlIC0gbm8gbGUgY29udmVyc2lvbiBuZWVkZWQgKi8KLQlwU01CLT5SZXNlcnZlZDIgPSAwOwotCXBTTUItPkNvbXBsZXRpb25GaWx0ZXIgPSBjcHVfdG9fbGUzMihmaWx0ZXIpOwotCXBTTUItPkZpZCA9IG5ldGZpZDsgLyogZmlsZSBoYW5kbGUgYWx3YXlzIGxlICovCi0JcFNNQi0+Qnl0ZUNvdW50ID0gMDsKLQotCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLAotCQkJIChzdHJ1Y3Qgc21iX2hkciAqKXBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQsCi0JCQkgQ0lGU19BU1lOQ19PUCk7Ci0JaWYgKHJjKSB7Ci0JCWNGWUkoMSwgIkVycm9yIGluIE5vdGlmeSA9ICVkIiwgcmMpOwotCX0gZWxzZSB7Ci0JCS8qIEFkZCBmaWxlIHRvIG91dHN0YW5kaW5nIHJlcXVlc3RzICovCi0JCS8qIEJCIGNoYW5nZSB0byBrbWVtIGNhY2hlIGFsbG9jICovCi0JCWRub3RpZnlfcmVxID0ga21hbGxvYygKLQkJCQkJCXNpemVvZihzdHJ1Y3QgZGlyX25vdGlmeV9yZXEpLAotCQkJCQkJIEdGUF9LRVJORUwpOwotCQlpZiAoZG5vdGlmeV9yZXEpIHsKLQkJCWRub3RpZnlfcmVxLT5QaWQgPSBwU01CLT5oZHIuUGlkOwotCQkJZG5vdGlmeV9yZXEtPlBpZEhpZ2ggPSBwU01CLT5oZHIuUGlkSGlnaDsKLQkJCWRub3RpZnlfcmVxLT5NaWQgPSBwU01CLT5oZHIuTWlkOwotCQkJZG5vdGlmeV9yZXEtPlRpZCA9IHBTTUItPmhkci5UaWQ7Ci0JCQlkbm90aWZ5X3JlcS0+VWlkID0gcFNNQi0+aGRyLlVpZDsKLQkJCWRub3RpZnlfcmVxLT5uZXRmaWQgPSBuZXRmaWQ7Ci0JCQlkbm90aWZ5X3JlcS0+cGZpbGUgPSBwZmlsZTsKLQkJCWRub3RpZnlfcmVxLT5maWx0ZXIgPSBmaWx0ZXI7Ci0JCQlkbm90aWZ5X3JlcS0+bXVsdGlzaG90ID0gbXVsdGlzaG90OwotCQkJc3Bpbl9sb2NrKCZHbG9iYWxNaWRfTG9jayk7Ci0JCQlsaXN0X2FkZF90YWlsKCZkbm90aWZ5X3JlcS0+bGhlYWQsCi0JCQkJCSZHbG9iYWxEbm90aWZ5UmVxTGlzdCk7Ci0JCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOwotCQl9IGVsc2UKLQkJCXJjID0gLUVOT01FTTsKLQl9Ci0JY2lmc19idWZfcmVsZWFzZShwU01CKTsKLQlyZXR1cm4gcmM7Ci19Ci0KICNpZmRlZiBDT05GSUdfQ0lGU19YQVRUUgogLyoKICAqIERvIGEgcGF0aC1iYXNlZCBRVUVSWV9BTExfRUFTIGNhbGwgYW5kIHBhcnNlIHRoZSByZXN1bHQuIFRoaXMgaXMgYSBjb21tb24KQEAgLTU1NjAsNyArNTUwMyw3IEBACiAJcFNNQi0+UGFyYW1ldGVyQ291bnQgPSBwU01CLT5Ub3RhbFBhcmFtZXRlckNvdW50OwogCXBTTUItPkluZm9ybWF0aW9uTGV2ZWwgPSBjcHVfdG9fbGUxNihTTUJfSU5GT19RVUVSWV9BTExfRUFTKTsKIAlwU01CLT5SZXNlcnZlZDQgPSAwOwotCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBieXRlX2NvdW50OworCWluY19yZmMxMDAxX2xlbihwU01CLCBieXRlX2NvdW50KTsKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKIAogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLApAQCAtNTU3Niw3ICs1NTE5LDcgQEAKIAlvZiB0aGVzZSB0cmFuczIgcmVzcG9uc2VzICovCiAKIAlyYyA9IHZhbGlkYXRlX3QyKChzdHJ1Y3Qgc21iX3QyX3JzcCAqKXBTTUJyKTsKLQlpZiAocmMgfHwgKHBTTUJyLT5CeXRlQ291bnQgPCA0KSkgeworCWlmIChyYyB8fCBnZXRfYmNjKCZwU01Cci0+aGRyKSA8IDQpIHsKIAkJcmMgPSAtRUlPOwkvKiBiYWQgc21iICovCiAJCWdvdG8gUUFsbEVBc091dDsKIAl9CkBAIC01NzczLDcgKzU3MTYsNyBAQAogCXBTTUItPlBhcmFtZXRlckNvdW50ID0gY3B1X3RvX2xlMTYocGFyYW1zKTsKIAlwU01CLT5Ub3RhbFBhcmFtZXRlckNvdW50ID0gcFNNQi0+UGFyYW1ldGVyQ291bnQ7CiAJcFNNQi0+UmVzZXJ2ZWQ0ID0gMDsKLQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gYnl0ZV9jb3VudDsKKwlpbmNfcmZjMTAwMV9sZW4ocFNNQiwgYnl0ZV9jb3VudCk7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoYnl0ZV9jb3VudCk7CiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCiAJCQkgKHN0cnVjdCBzbWJfaGRyICopIHBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQsIDApOwpAQCAtNTc4Nyw1ICs1NzMwLDk5IEBACiAKIAlyZXR1cm4gcmM7CiB9Ci0KICNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NJRlNfRE5PVElGWV9FWFBFUklNRU5UQUwgLyogQkIgdW51c2VkIHRlbXBvcmFyaWx5ICovCisvKgorICoJWWVhcnMgYWdvIHRoZSBrZXJuZWwgYWRkZWQgYSAiZG5vdGlmeSIgZnVuY3Rpb24gZm9yIFNhbWJhIHNlcnZlciwKKyAqCXRvIGFsbG93IG5ldHdvcmsgY2xpZW50cyAoc3VjaCBhcyBXaW5kb3dzKSB0byBkaXNwbGF5IHVwZGF0ZWQKKyAqCWxpc3RzIG9mIGZpbGVzIGluIGRpcmVjdG9yeSBsaXN0aW5ncyBhdXRvbWF0aWNhbGx5IHdoZW4KKyAqCWZpbGVzIGFyZSBhZGRlZCBieSBvbmUgdXNlciB3aGVuIGFub3RoZXIgdXNlciBoYXMgdGhlCisgKglzYW1lIGRpcmVjdG9yeSBvcGVuIG9uIHRoZWlyIGRlc2t0b3AuICBUaGUgTGludXggY2lmcyBrZXJuZWwKKyAqCWNsaWVudCBob29rZWQgaW50byB0aGUga2VybmVsIHNpZGUgb2YgdGhpcyBpbnRlcmZhY2UgZm9yCisgKgl0aGUgc2FtZSByZWFzb24sIGJ1dCBpcm9uaWNhbGx5IHdoZW4gdGhlIFZGUyBtb3ZlZCBmcm9tCisgKgkiZG5vdGlmeSIgdG8gImlub3RpZnkiIGl0IGJlY2FtZSBoYXJkZXIgdG8gcGx1ZyBpbiBMaW51eAorICoJbmV0d29yayBmaWxlIHN5c3RlbSBjbGllbnRzICh0aGUgbW9zdCBvYnZpb3VzIHVzZSBjYXNlCisgKglmb3Igbm90aWZ5IGludGVyZmFjZXMgaXMgd2hlbiBtdWx0aXBsZSB1c2VycyBjYW4gdXBkYXRlCisgKgl0aGUgY29udGVudHMgb2YgdGhlIHNhbWUgZGlyZWN0b3J5IC0gZXhhY3RseSB3aGF0IG5ldHdvcmsKKyAqCWZpbGUgc3lzdGVtcyBjYW4gZG8pIGFsdGhvdWdoIHRoZSBzZXJ2ZXIgKFNhbWJhKSBjb3VsZAorICoJc3RpbGwgdXNlIGl0LiAgRm9yIHRoZSBzaG9ydCB0ZXJtIHdlIGxlYXZlIHRoZSB3b3JrZXIKKyAqCWZ1bmN0aW9uIGlmZGVmZmVkIG91dCAoYmVsb3cpIHVudGlsIGlub3RpZnkgaXMgZml4ZWQKKyAqCWluIHRoZSBWRlMgdG8gbWFrZSBpdCBlYXNpZXIgdG8gcGx1ZyBpbiBuZXR3b3JrIGZpbGUKKyAqCXN5c3RlbSBjbGllbnRzLiAgSWYgaW5vdGlmeSB0dXJucyBvdXQgdG8gYmUgcGVybWFuZW50bHkKKyAqCWluY29tcGF0aWJsZSBmb3IgbmV0d29yayBmcyBjbGllbnRzLCB3ZSBjb3VsZCBpbnN0ZWFkIHNpbXBseQorICoJZXhwb3NlIHRoaXMgY29uZmlnIGZsYWcgYnkgYWRkaW5nIGEgZnV0dXJlIGNpZnMgKGFuZCBzbWIyKSBub3RpZnkgaW9jdGwuCisgKi8KK2ludCBDSUZTU01CTm90aWZ5KGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCisJCSAgY29uc3QgaW50IG5vdGlmeV9zdWJkaXJzLCBjb25zdCBfX3UxNiBuZXRmaWQsCisJCSAgX191MzIgZmlsdGVyLCBzdHJ1Y3QgZmlsZSAqcGZpbGUsIGludCBtdWx0aXNob3QsCisJCSAgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlKQoreworCWludCByYyA9IDA7CisJc3RydWN0IHNtYl9jb21fdHJhbnNhY3Rpb25fY2hhbmdlX25vdGlmeV9yZXEgKnBTTUIgPSBOVUxMOworCXN0cnVjdCBzbWJfY29tX250cmFuc2FjdGlvbl9jaGFuZ2Vfbm90aWZ5X3JzcCAqcFNNQnIgPSBOVUxMOworCXN0cnVjdCBkaXJfbm90aWZ5X3JlcSAqZG5vdGlmeV9yZXE7CisJaW50IGJ5dGVzX3JldHVybmVkOworCisJY0ZZSSgxLCAiSW4gQ0lGU1NNQk5vdGlmeSBmb3IgZmlsZSBoYW5kbGUgJWQiLCAoaW50KW5ldGZpZCk7CisJcmMgPSBzbWJfaW5pdChTTUJfQ09NX05UX1RSQU5TQUNULCAyMywgdGNvbiwgKHZvaWQgKiopICZwU01CLAorCQkgICAgICAodm9pZCAqKikgJnBTTUJyKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXBTTUItPlRvdGFsUGFyYW1ldGVyQ291bnQgPSAwIDsKKwlwU01CLT5Ub3RhbERhdGFDb3VudCA9IDA7CisJcFNNQi0+TWF4UGFyYW1ldGVyQ291bnQgPSBjcHVfdG9fbGUzMigyKTsKKwkvKiBCQiBmaW5kIGV4YWN0IGRhdGEgY291bnQgbWF4IGZyb20gc2VzcyBzdHJ1Y3R1cmUgQkIgKi8KKwlwU01CLT5NYXhEYXRhQ291bnQgPSAwOyAvKiBzYW1lIGluIGxpdHRsZSBlbmRpYW4gb3IgYmUgKi8KKy8qIEJCIFZFUklGWSB2ZXJpZnkgd2hpY2ggaXMgY29ycmVjdCBmb3IgYWJvdmUgQkIgKi8KKwlwU01CLT5NYXhEYXRhQ291bnQgPSBjcHVfdG9fbGUzMigodGNvbi0+c2VzLT5zZXJ2ZXItPm1heEJ1ZiAtCisJCQkJCSAgICAgTUFYX0NJRlNfSERSX1NJWkUpICYgMHhGRkZGRkYwMCk7CisKKwlwU01CLT5NYXhTZXR1cENvdW50ID0gNDsKKwlwU01CLT5SZXNlcnZlZCA9IDA7CisJcFNNQi0+UGFyYW1ldGVyT2Zmc2V0ID0gMDsKKwlwU01CLT5EYXRhQ291bnQgPSAwOworCXBTTUItPkRhdGFPZmZzZXQgPSAwOworCXBTTUItPlNldHVwQ291bnQgPSA0OyAvKiBzaW5nbGUgYnl0ZSBkb2VzIG5vdCBuZWVkIGxlIGNvbnZlcnNpb24gKi8KKwlwU01CLT5TdWJDb21tYW5kID0gY3B1X3RvX2xlMTYoTlRfVFJBTlNBQ1RfTk9USUZZX0NIQU5HRSk7CisJcFNNQi0+UGFyYW1ldGVyQ291bnQgPSBwU01CLT5Ub3RhbFBhcmFtZXRlckNvdW50OworCWlmIChub3RpZnlfc3ViZGlycykKKwkJcFNNQi0+V2F0Y2hUcmVlID0gMTsgLyogb25lIGJ5dGUgLSBubyBsZSBjb252ZXJzaW9uIG5lZWRlZCAqLworCXBTTUItPlJlc2VydmVkMiA9IDA7CisJcFNNQi0+Q29tcGxldGlvbkZpbHRlciA9IGNwdV90b19sZTMyKGZpbHRlcik7CisJcFNNQi0+RmlkID0gbmV0ZmlkOyAvKiBmaWxlIGhhbmRsZSBhbHdheXMgbGUgKi8KKwlwU01CLT5CeXRlQ291bnQgPSAwOworCisJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCisJCQkgKHN0cnVjdCBzbWJfaGRyICopcFNNQnIsICZieXRlc19yZXR1cm5lZCwKKwkJCSBDSUZTX0FTWU5DX09QKTsKKwlpZiAocmMpIHsKKwkJY0ZZSSgxLCAiRXJyb3IgaW4gTm90aWZ5ID0gJWQiLCByYyk7CisJfSBlbHNlIHsKKwkJLyogQWRkIGZpbGUgdG8gb3V0c3RhbmRpbmcgcmVxdWVzdHMgKi8KKwkJLyogQkIgY2hhbmdlIHRvIGttZW0gY2FjaGUgYWxsb2MgKi8KKwkJZG5vdGlmeV9yZXEgPSBrbWFsbG9jKAorCQkJCQkJc2l6ZW9mKHN0cnVjdCBkaXJfbm90aWZ5X3JlcSksCisJCQkJCQkgR0ZQX0tFUk5FTCk7CisJCWlmIChkbm90aWZ5X3JlcSkgeworCQkJZG5vdGlmeV9yZXEtPlBpZCA9IHBTTUItPmhkci5QaWQ7CisJCQlkbm90aWZ5X3JlcS0+UGlkSGlnaCA9IHBTTUItPmhkci5QaWRIaWdoOworCQkJZG5vdGlmeV9yZXEtPk1pZCA9IHBTTUItPmhkci5NaWQ7CisJCQlkbm90aWZ5X3JlcS0+VGlkID0gcFNNQi0+aGRyLlRpZDsKKwkJCWRub3RpZnlfcmVxLT5VaWQgPSBwU01CLT5oZHIuVWlkOworCQkJZG5vdGlmeV9yZXEtPm5ldGZpZCA9IG5ldGZpZDsKKwkJCWRub3RpZnlfcmVxLT5wZmlsZSA9IHBmaWxlOworCQkJZG5vdGlmeV9yZXEtPmZpbHRlciA9IGZpbHRlcjsKKwkJCWRub3RpZnlfcmVxLT5tdWx0aXNob3QgPSBtdWx0aXNob3Q7CisJCQlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKwkJCWxpc3RfYWRkX3RhaWwoJmRub3RpZnlfcmVxLT5saGVhZCwKKwkJCQkJJkdsb2JhbERub3RpZnlSZXFMaXN0KTsKKwkJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisJCX0gZWxzZQorCQkJcmMgPSAtRU5PTUVNOworCX0KKwljaWZzX2J1Zl9yZWxlYXNlKHBTTUIpOworCXJldHVybiByYzsKK30KKyNlbmRpZiAvKiB3YXMgbmVlZGVkIGZvciBkbm90aWZ5LCBhbmQgd2lsbCBiZSBuZWVkZWQgZm9yIGlub3RpZnkgd2hlbiBWRlMgZml4ICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2Nvbm5lY3QuYyBiL2ZzL2NpZnMvY29ubmVjdC5jCmluZGV4IGRiOWQ1NWIuLmRhMjg0ZTMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY29ubmVjdC5jCisrKyBiL2ZzL2NpZnMvY29ubmVjdC5jCkBAIC0xMDIsNiArMTAyLDcgQEAKIAlib29sIGZzYzoxOwkvKiBlbmFibGUgZnNjYWNoZSAqLwogCWJvb2wgbWZzeW1saW5rczoxOyAvKiB1c2UgTWluc2hhbGwrRnJlbmNoIFN5bWxpbmtzICovCiAJYm9vbCBtdWx0aXVzZXI6MTsKKwlib29sIHVzZV9zbWIyOjE7IC8qIGZvcmNlIHNtYjIgdXNlIG9uIG1vdW50IGluc3RlYWQgb2YgY2lmcyAqLwogCXVuc2lnbmVkIGludCByc2l6ZTsKIAl1bnNpZ25lZCBpbnQgd3NpemU7CiAJYm9vbCBzb2Nrb3B0X3RjcF9ub2RlbGF5OjE7CkBAIC0yNzQsNyArMjc1LDggQEAKIAljaGFyICpkYXRhX2FyZWFfb2ZfdGFyZ2V0OwogCWNoYXIgKmRhdGFfYXJlYV9vZl9idWYyOwogCWludCByZW1haW5pbmc7Ci0JX191MTYgYnl0ZV9jb3VudCwgdG90YWxfZGF0YV9zaXplLCB0b3RhbF9pbl9idWYsIHRvdGFsX2luX2J1ZjI7CisJdW5zaWduZWQgaW50IGJ5dGVfY291bnQsIHRvdGFsX2luX2J1ZjsKKwlfX3UxNiB0b3RhbF9kYXRhX3NpemUsIHRvdGFsX2luX2J1ZjI7CiAKIAl0b3RhbF9kYXRhX3NpemUgPSBnZXRfdW5hbGlnbmVkX2xlMTYoJnBTTUJ0LT50Ml9yc3AuVG90YWxEYXRhQ291bnQpOwogCkBAIC0yODcsNyArMjg5LDcgQEAKIAlyZW1haW5pbmcgPSB0b3RhbF9kYXRhX3NpemUgLSB0b3RhbF9pbl9idWY7CiAKIAlpZiAocmVtYWluaW5nIDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAtRVBST1RPOwogCiAJaWYgKHJlbWFpbmluZyA9PSAwKSAvKiBub3RoaW5nIHRvIGRvLCBpZ25vcmUgKi8KIAkJcmV0dXJuIDA7CkBAIC0zMDgsMTkgKzMxMCwyOCBAQAogCWRhdGFfYXJlYV9vZl90YXJnZXQgKz0gdG90YWxfaW5fYnVmOwogCiAJLyogY29weSBzZWNvbmQgYnVmZmVyIGludG8gZW5kIG9mIGZpcnN0IGJ1ZmZlciAqLwotCW1lbWNweShkYXRhX2FyZWFfb2ZfdGFyZ2V0LCBkYXRhX2FyZWFfb2ZfYnVmMiwgdG90YWxfaW5fYnVmMik7CiAJdG90YWxfaW5fYnVmICs9IHRvdGFsX2luX2J1ZjI7CisJLyogaXMgdGhlIHJlc3VsdCB0b28gYmlnIGZvciB0aGUgZmllbGQ/ICovCisJaWYgKHRvdGFsX2luX2J1ZiA+IFVTSFJUX01BWCkKKwkJcmV0dXJuIC1FUFJPVE87CiAJcHV0X3VuYWxpZ25lZF9sZTE2KHRvdGFsX2luX2J1ZiwgJnBTTUJ0LT50Ml9yc3AuRGF0YUNvdW50KTsKLQlieXRlX2NvdW50ID0gZ2V0X2JjY19sZShwVGFyZ2V0U01CKTsKKworCS8qIGZpeCB1cCB0aGUgQkNDICovCisJYnl0ZV9jb3VudCA9IGdldF9iY2MocFRhcmdldFNNQik7CiAJYnl0ZV9jb3VudCArPSB0b3RhbF9pbl9idWYyOwotCXB1dF9iY2NfbGUoYnl0ZV9jb3VudCwgcFRhcmdldFNNQik7CisJLyogaXMgdGhlIHJlc3VsdCB0b28gYmlnIGZvciB0aGUgZmllbGQ/ICovCisJaWYgKGJ5dGVfY291bnQgPiBVU0hSVF9NQVgpCisJCXJldHVybiAtRVBST1RPOworCXB1dF9iY2MoYnl0ZV9jb3VudCwgcFRhcmdldFNNQik7CiAKLQlieXRlX2NvdW50ID0gcFRhcmdldFNNQi0+c21iX2J1Zl9sZW5ndGg7CisJYnl0ZV9jb3VudCA9IGJlMzJfdG9fY3B1KHBUYXJnZXRTTUItPnNtYl9idWZfbGVuZ3RoKTsKIAlieXRlX2NvdW50ICs9IHRvdGFsX2luX2J1ZjI7CisJLyogZG9uJ3QgYWxsb3cgYnVmZmVyIHRvIG92ZXJmbG93ICovCisJaWYgKGJ5dGVfY291bnQgPiBDSUZTTWF4QnVmU2l6ZSkKKwkJcmV0dXJuIC1FTk9CVUZTOworCXBUYXJnZXRTTUItPnNtYl9idWZfbGVuZ3RoID0gY3B1X3RvX2JlMzIoYnl0ZV9jb3VudCk7CiAKLQkvKiBCQiBhbHNvIGFkZCBjaGVjayB0aGF0IHdlIGFyZSBub3QgYmV5b25kIG1heGltdW0gYnVmZmVyIHNpemUgKi8KLQotCXBUYXJnZXRTTUItPnNtYl9idWZfbGVuZ3RoID0gYnl0ZV9jb3VudDsKKwltZW1jcHkoZGF0YV9hcmVhX29mX3RhcmdldCwgZGF0YV9hcmVhX29mX2J1ZjIsIHRvdGFsX2luX2J1ZjIpOwogCiAJaWYgKHJlbWFpbmluZyA9PSB0b3RhbF9pbl9idWYyKSB7CiAJCWNGWUkoMSwgImZvdW5kIHRoZSBsYXN0IHNlY29uZGFyeSByZXNwb25zZSIpOwpAQCAtNDg1LDggKzQ5Niw3IEBACiAJCS8qIE5vdGUgdGhhdCBGQyAxMDAxIGxlbmd0aCBpcyBiaWcgZW5kaWFuIG9uIHRoZSB3aXJlLAogCQlidXQgd2UgY29udmVydCBpdCBoZXJlIHNvIGl0IGlzIGFsd2F5cyBtYW5pcHVsYXRlZAogCQlhcyBob3N0IGJ5dGUgb3JkZXIgKi8KLQkJcGR1X2xlbmd0aCA9IGJlMzJfdG9fY3B1KChfX2ZvcmNlIF9fYmUzMilzbWJfYnVmZmVyLT5zbWJfYnVmX2xlbmd0aCk7Ci0JCXNtYl9idWZmZXItPnNtYl9idWZfbGVuZ3RoID0gcGR1X2xlbmd0aDsKKwkJcGR1X2xlbmd0aCA9IGJlMzJfdG9fY3B1KHNtYl9idWZmZXItPnNtYl9idWZfbGVuZ3RoKTsKIAogCQljRllJKDEsICJyZmMxMDAyIGxlbmd0aCAweCV4IiwgcGR1X2xlbmd0aCs0KTsKIApAQCAtNjA3LDU5ICs2MTcsNjMgQEAKIAkJbGlzdF9mb3JfZWFjaF9zYWZlKHRtcCwgdG1wMiwgJnNlcnZlci0+cGVuZGluZ19taWRfcSkgewogCQkJbWlkX2VudHJ5ID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBtaWRfcV9lbnRyeSwgcWhlYWQpOwogCi0JCQlpZiAoKG1pZF9lbnRyeS0+bWlkID09IHNtYl9idWZmZXItPk1pZCkgJiYKLQkJCSAgICAobWlkX2VudHJ5LT5taWRTdGF0ZSA9PSBNSURfUkVRVUVTVF9TVUJNSVRURUQpICYmCi0JCQkgICAgKG1pZF9lbnRyeS0+Y29tbWFuZCA9PSBzbWJfYnVmZmVyLT5Db21tYW5kKSkgewotCQkJCWlmIChsZW5ndGggPT0gMCAmJgotCQkJCSAgIGNoZWNrMm5kVDIoc21iX2J1ZmZlciwgc2VydmVyLT5tYXhCdWYpID4gMCkgewotCQkJCQkvKiBXZSBoYXZlIGEgbXVsdGlwYXJ0IHRyYW5zYWN0MiByZXNwICovCi0JCQkJCWlzTXVsdGlSc3AgPSB0cnVlOwotCQkJCQlpZiAobWlkX2VudHJ5LT5yZXNwX2J1ZikgewotCQkJCQkJLyogbWVyZ2UgcmVzcG9uc2UgLSBmaXggdXAgMXN0Ki8KLQkJCQkJCWlmIChjb2FsZXNjZV90MihzbWJfYnVmZmVyLAotCQkJCQkJCW1pZF9lbnRyeS0+cmVzcF9idWYpKSB7Ci0JCQkJCQkJbWlkX2VudHJ5LT5tdWx0aVJzcCA9Ci0JCQkJCQkJCSB0cnVlOwotCQkJCQkJCWJyZWFrOwotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQkvKiBhbGwgcGFydHMgcmVjZWl2ZWQgKi8KLQkJCQkJCQltaWRfZW50cnktPm11bHRpRW5kID0KLQkJCQkJCQkJIHRydWU7Ci0JCQkJCQkJZ290byBtdWx0aV90Ml9mbmQ7Ci0JCQkJCQl9CisJCQlpZiAobWlkX2VudHJ5LT5taWQgIT0gc21iX2J1ZmZlci0+TWlkIHx8CisJCQkgICAgbWlkX2VudHJ5LT5taWRTdGF0ZSAhPSBNSURfUkVRVUVTVF9TVUJNSVRURUQgfHwKKwkJCSAgICBtaWRfZW50cnktPmNvbW1hbmQgIT0gc21iX2J1ZmZlci0+Q29tbWFuZCkgeworCQkJCW1pZF9lbnRyeSA9IE5VTEw7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmIChsZW5ndGggPT0gMCAmJgorCQkJICAgIGNoZWNrMm5kVDIoc21iX2J1ZmZlciwgc2VydmVyLT5tYXhCdWYpID4gMCkgeworCQkJCS8qIFdlIGhhdmUgYSBtdWx0aXBhcnQgdHJhbnNhY3QyIHJlc3AgKi8KKwkJCQlpc011bHRpUnNwID0gdHJ1ZTsKKwkJCQlpZiAobWlkX2VudHJ5LT5yZXNwX2J1ZikgeworCQkJCQkvKiBtZXJnZSByZXNwb25zZSAtIGZpeCB1cCAxc3QqLworCQkJCQlsZW5ndGggPSBjb2FsZXNjZV90MihzbWJfYnVmZmVyLAorCQkJCQkJCW1pZF9lbnRyeS0+cmVzcF9idWYpOworCQkJCQlpZiAobGVuZ3RoID4gMCkgeworCQkJCQkJbGVuZ3RoID0gMDsKKwkJCQkJCW1pZF9lbnRyeS0+bXVsdGlSc3AgPSB0cnVlOworCQkJCQkJYnJlYWs7CiAJCQkJCX0gZWxzZSB7Ci0JCQkJCQlpZiAoIWlzTGFyZ2VCdWYpIHsKLQkJCQkJCQljRVJST1IoMSwgIjFzdCB0cmFuczIgcmVzcCBuZWVkcyBiaWdidWYiKTsKLQkJCQkJLyogQkIgbWF5YmUgd2UgY2FuIGZpeCB0aGlzIHVwLCAgc3dpdGNoCi0JCQkJCSAgIHRvIGFscmVhZHkgYWxsb2NhdGVkIGxhcmdlIGJ1ZmZlcj8gKi8KLQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJLyogSGF2ZSBmaXJzdCBidWZmZXIgKi8KLQkJCQkJCQltaWRfZW50cnktPnJlc3BfYnVmID0KLQkJCQkJCQkJIHNtYl9idWZmZXI7Ci0JCQkJCQkJbWlkX2VudHJ5LT5sYXJnZUJ1ZiA9Ci0JCQkJCQkJCSB0cnVlOwotCQkJCQkJCWJpZ2J1ZiA9IE5VTEw7Ci0JCQkJCQl9CisJCQkJCQkvKiBhbGwgcGFydHMgcmVjZWl2ZWQgb3IKKwkJCQkJCSAqIHBhY2tldCBpcyBtYWxmb3JtZWQKKwkJCQkJCSAqLworCQkJCQkJbWlkX2VudHJ5LT5tdWx0aUVuZCA9IHRydWU7CisJCQkJCQlnb3RvIG11bHRpX3QyX2ZuZDsKIAkJCQkJfQotCQkJCQlicmVhazsKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoIWlzTGFyZ2VCdWYpIHsKKwkJCQkJCS8qCisJCQkJCQkgKiBGSVhNRTogc3dpdGNoIHRvIGFscmVhZHkKKwkJCQkJCSAqICAgICAgICBhbGxvY2F0ZWQgbGFyZ2VidWY/CisJCQkJCQkgKi8KKwkJCQkJCWNFUlJPUigxLCAiMXN0IHRyYW5zMiByZXNwICIKKwkJCQkJCQkgICJuZWVkcyBiaWdidWYiKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCS8qIEhhdmUgZmlyc3QgYnVmZmVyICovCisJCQkJCQltaWRfZW50cnktPnJlc3BfYnVmID0KKwkJCQkJCQkgc21iX2J1ZmZlcjsKKwkJCQkJCW1pZF9lbnRyeS0+bGFyZ2VCdWYgPSB0cnVlOworCQkJCQkJYmlnYnVmID0gTlVMTDsKKwkJCQkJfQogCQkJCX0KLQkJCQltaWRfZW50cnktPnJlc3BfYnVmID0gc21iX2J1ZmZlcjsKLQkJCQltaWRfZW50cnktPmxhcmdlQnVmID0gaXNMYXJnZUJ1ZjsKLW11bHRpX3QyX2ZuZDoKLQkJCQlpZiAobGVuZ3RoID09IDApCi0JCQkJCW1pZF9lbnRyeS0+bWlkU3RhdGUgPQotCQkJCQkJCU1JRF9SRVNQT05TRV9SRUNFSVZFRDsKLQkJCQllbHNlCi0JCQkJCW1pZF9lbnRyeS0+bWlkU3RhdGUgPQotCQkJCQkJCU1JRF9SRVNQT05TRV9NQUxGT1JNRUQ7Ci0jaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMyCi0JCQkJbWlkX2VudHJ5LT53aGVuX3JlY2VpdmVkID0gamlmZmllczsKLSNlbmRpZgotCQkJCWxpc3RfZGVsX2luaXQoJm1pZF9lbnRyeS0+cWhlYWQpOwotCQkJCW1pZF9lbnRyeS0+Y2FsbGJhY2sobWlkX2VudHJ5KTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCW1pZF9lbnRyeSA9IE5VTEw7CisJCQltaWRfZW50cnktPnJlc3BfYnVmID0gc21iX2J1ZmZlcjsKKwkJCW1pZF9lbnRyeS0+bGFyZ2VCdWYgPSBpc0xhcmdlQnVmOworbXVsdGlfdDJfZm5kOgorCQkJaWYgKGxlbmd0aCA9PSAwKQorCQkJCW1pZF9lbnRyeS0+bWlkU3RhdGUgPSBNSURfUkVTUE9OU0VfUkVDRUlWRUQ7CisJCQllbHNlCisJCQkJbWlkX2VudHJ5LT5taWRTdGF0ZSA9IE1JRF9SRVNQT05TRV9NQUxGT1JNRUQ7CisjaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMyCisJCQltaWRfZW50cnktPndoZW5fcmVjZWl2ZWQgPSBqaWZmaWVzOworI2VuZGlmCisJCQlsaXN0X2RlbF9pbml0KCZtaWRfZW50cnktPnFoZWFkKTsKKwkJCW1pZF9lbnRyeS0+Y2FsbGJhY2sobWlkX2VudHJ5KTsKKwkJCWJyZWFrOwogCQl9CiAJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CiAKQEAgLTcyMSw3ICs3MzUsNyBAQAogCQlzb2NrX3JlbGVhc2UoY3NvY2tldCk7CiAJCXNlcnZlci0+c3NvY2tldCA9IE5VTEw7CiAJfQotCS8qIGJ1ZmZlciB1c3VhbGxseSBmcmVlZCBpbiBmcmVlX21pZCAtIG5lZWQgdG8gZnJlZSBpdCBoZXJlIG9uIGV4aXQgKi8KKwkvKiBidWZmZXIgdXN1YWxseSBmcmVlZCBpbiBmcmVlX21pZCAtIG5lZWQgdG8gZnJlZSBpdCBoZXJlIG9uIGV4aXQgKi8KIAljaWZzX2J1Zl9yZWxlYXNlKGJpZ2J1Zik7CiAJaWYgKHNtYWxsYnVmKSAvKiBubyBzZW5zZSBsb2dnaW5nIGEgZGVidWcgbWVzc2FnZSBpZiBOVUxMICovCiAJCWNpZnNfc21hbGxfYnVmX3JlbGVhc2Uoc21hbGxidWYpOwpAQCAtODA0LDExICs4MTgsMTEgQEAKIH0KIAogc3RhdGljIGludAotY2lmc19wYXJzZV9tb3VudF9vcHRpb25zKGNoYXIgKm9wdGlvbnMsIGNvbnN0IGNoYXIgKmRldm5hbWUsCitjaWZzX3BhcnNlX21vdW50X29wdGlvbnMoY29uc3QgY2hhciAqbW91bnRkYXRhLCBjb25zdCBjaGFyICpkZXZuYW1lLAogCQkJIHN0cnVjdCBzbWJfdm9sICp2b2wpCiB7Ci0JY2hhciAqdmFsdWU7Ci0JY2hhciAqZGF0YTsKKwljaGFyICp2YWx1ZSwgKmRhdGEsICplbmQ7CisJY2hhciAqbW91bnRkYXRhX2NvcHksICpvcHRpb25zOwogCXVuc2lnbmVkIGludCAgdGVtcF9sZW4sIGksIGo7CiAJY2hhciBzZXBhcmF0b3JbMl07CiAJc2hvcnQgaW50IG92ZXJyaWRlX3VpZCA9IC0xOwpAQCAtODQ4LDkgKzg2MiwxNSBAQAogCiAJdm9sLT5hY3RpbWVvID0gQ0lGU19ERUZfQUNUSU1FTzsKIAotCWlmICghb3B0aW9ucykKLQkJcmV0dXJuIDE7CisJaWYgKCFtb3VudGRhdGEpCisJCWdvdG8gY2lmc19wYXJzZV9tb3VudF9lcnI7CiAKKwltb3VudGRhdGFfY29weSA9IGtzdHJuZHVwKG1vdW50ZGF0YSwgUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1vdW50ZGF0YV9jb3B5KQorCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOworCisJb3B0aW9ucyA9IG1vdW50ZGF0YV9jb3B5OworCWVuZCA9IG9wdGlvbnMgKyBzdHJsZW4ob3B0aW9ucyk7CiAJaWYgKHN0cm5jbXAob3B0aW9ucywgInNlcD0iLCA0KSA9PSAwKSB7CiAJCWlmIChvcHRpb25zWzRdICE9IDApIHsKIAkJCXNlcGFyYXRvclswXSA9IG9wdGlvbnNbNF07CkBAIC04NzUsMTcgKzg5NSwyMiBAQAogCQkJaWYgKCF2YWx1ZSkgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCQkgICAgICAgIkNJRlM6IGludmFsaWQgb3IgbWlzc2luZyB1c2VybmFtZVxuIik7Ci0JCQkJcmV0dXJuIDE7CS8qIG5lZWRzX2FyZzsgKi8KKwkJCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOwogCQkJfSBlbHNlIGlmICghKnZhbHVlKSB7CiAJCQkJLyogbnVsbCB1c2VyLCBpZSBhbm9ueW1vdXMsIGF1dGhlbnRpY2F0aW9uICovCiAJCQkJdm9sLT5udWxsYXV0aCA9IDE7CiAJCQl9CiAJCQlpZiAoc3Rybmxlbih2YWx1ZSwgTUFYX1VTRVJOQU1FX1NJWkUpIDwKIAkJCQkJCU1BWF9VU0VSTkFNRV9TSVpFKSB7Ci0JCQkJdm9sLT51c2VybmFtZSA9IHZhbHVlOworCQkJCXZvbC0+dXNlcm5hbWUgPSBrc3RyZHVwKHZhbHVlLCBHRlBfS0VSTkVMKTsKKwkJCQlpZiAoIXZvbC0+dXNlcm5hbWUpIHsKKwkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ0lGUzogbm8gbWVtb3J5ICIKKwkJCQkJCQkgICAgImZvciB1c2VybmFtZVxuIik7CisJCQkJCWdvdG8gY2lmc19wYXJzZV9tb3VudF9lcnI7CisJCQkJfQogCQkJfSBlbHNlIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDSUZTOiB1c2VybmFtZSB0b28gbG9uZ1xuIik7Ci0JCQkJcmV0dXJuIDE7CisJCQkJZ290byBjaWZzX3BhcnNlX21vdW50X2VycjsKIAkJCX0KIAkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAicGFzcyIsIDQpID09IDApIHsKIAkJCWlmICghdmFsdWUpIHsKQEAgLTkxNiw2ICs5NDEsNyBAQAogCQkJdGhlIG9ubHkgaWxsZWdhbCBjaGFyYWN0ZXIgaW4gYSBwYXNzd29yZCBpcyBudWxsICovCiAKIAkJCWlmICgodmFsdWVbdGVtcF9sZW5dID09IDApICYmCisJCQkgICAgKHZhbHVlICsgdGVtcF9sZW4gPCBlbmQpICYmCiAJCQkgICAgKHZhbHVlW3RlbXBfbGVuKzFdID09IHNlcGFyYXRvclswXSkpIHsKIAkJCQkvKiByZWluc2VydCBjb21tYSAqLwogCQkJCXZhbHVlW3RlbXBfbGVuXSA9IHNlcGFyYXRvclswXTsKQEAgLTk0OCw3ICs5NzQsNyBAQAogCQkJCWlmICh2b2wtPnBhc3N3b3JkID09IE5VTEwpIHsKIAkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ0lGUzogbm8gbWVtb3J5ICIKIAkJCQkJCQkgICAgImZvciBwYXNzd29yZFxuIik7Ci0JCQkJCXJldHVybiAxOworCQkJCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOwogCQkJCX0KIAkJCQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IHRlbXBfbGVuOyBpKyssIGorKykgewogCQkJCQl2b2wtPnBhc3N3b3JkW2pdID0gdmFsdWVbaV07CkBAIC05NjQsNyArOTkwLDcgQEAKIAkJCQlpZiAodm9sLT5wYXNzd29yZCA9PSBOVUxMKSB7CiAJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNJRlM6IG5vIG1lbW9yeSAiCiAJCQkJCQkJICAgICJmb3IgcGFzc3dvcmRcbiIpOwotCQkJCQlyZXR1cm4gMTsKKwkJCQkJZ290byBjaWZzX3BhcnNlX21vdW50X2VycjsKIAkJCQl9CiAJCQkJc3RyY3B5KHZvbC0+cGFzc3dvcmQsIHZhbHVlKTsKIAkJCX0KQEAgLTk3NCwxMSArMTAwMCwxNiBAQAogCQkJCXZvbC0+VU5DaXAgPSBOVUxMOwogCQkJfSBlbHNlIGlmIChzdHJubGVuKHZhbHVlLCBJTkVUNl9BRERSU1RSTEVOKSA8CiAJCQkJCQkJSU5FVDZfQUREUlNUUkxFTikgewotCQkJCXZvbC0+VU5DaXAgPSB2YWx1ZTsKKwkJCQl2b2wtPlVOQ2lwID0ga3N0cmR1cCh2YWx1ZSwgR0ZQX0tFUk5FTCk7CisJCQkJaWYgKCF2b2wtPlVOQ2lwKSB7CisJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNJRlM6IG5vIG1lbW9yeSAiCisJCQkJCQkJICAgICJmb3IgVU5DIElQXG4iKTsKKwkJCQkJZ290byBjaWZzX3BhcnNlX21vdW50X2VycjsKKwkJCQl9CiAJCQl9IGVsc2UgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNJRlM6IGlwIGFkZHJlc3MgIgogCQkJCQkJICAgICJ0b28gbG9uZ1xuIik7Ci0JCQkJcmV0dXJuIDE7CisJCQkJZ290byBjaWZzX3BhcnNlX21vdW50X2VycjsKIAkJCX0KIAkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAic2VjIiwgMykgPT0gMCkgewogCQkJaWYgKCF2YWx1ZSB8fCAhKnZhbHVlKSB7CkBAIC05OTEsNyArMTAyMiw3IEBACiAJCQkJLyogdm9sLT5zZWNGbGcgfD0gQ0lGU1NFQ19NVVNUX1NFQUwgfAogCQkJCQlDSUZTU0VDX01BWV9LUkI1OyAqLwogCQkJCWNFUlJPUigxLCAiS3JiNSBjaWZzIHByaXZhY3kgbm90IHN1cHBvcnRlZCIpOwotCQkJCXJldHVybiAxOworCQkJCWdvdG8gY2lmc19wYXJzZV9tb3VudF9lcnI7CiAJCQl9IGVsc2UgaWYgKHN0cm5pY21wKHZhbHVlLCAia3JiNSIsIDQpID09IDApIHsKIAkJCQl2b2wtPnNlY0ZsZyB8PSBDSUZTU0VDX01BWV9LUkI1OwogCQkJfSBlbHNlIGlmIChzdHJuaWNtcCh2YWx1ZSwgIm50bG1zc3BpIiwgOCkgPT0gMCkgewpAQCAtMTAyMSw3ICsxMDUyLDIzIEBACiAJCQkJdm9sLT5udWxsYXV0aCA9IDE7CiAJCQl9IGVsc2UgewogCQkJCWNFUlJPUigxLCAiYmFkIHNlY3VyaXR5IG9wdGlvbjogJXMiLCB2YWx1ZSk7Ci0JCQkJcmV0dXJuIDE7CisJCQkJZ290byBjaWZzX3BhcnNlX21vdW50X2VycjsKKwkJCX0KKwkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAidmVycyIsIDMpID09IDApIHsKKwkJCWlmICghdmFsdWUgfHwgISp2YWx1ZSkgeworCQkJCWNFUlJPUigxLCAibm8gcHJvdG9jb2wgdmVyc2lvbiBzcGVjaWZpZWQiCisJCQkJCSAgIiBhZnRlciB2ZXJzPSBtb3VudCBvcHRpb24iKTsKKwkJCX0gZWxzZSBpZiAoKHN0cm5pY21wKHZhbHVlLCAiY2lmcyIsIDQpID09IDApIHx8CisJCQkJICAgKHN0cm5pY21wKHZhbHVlLCAiMSIsIDEpID09IDApKSB7CisJCQkJLyogdGhpcyBpcyB0aGUgZGVmYXVsdCAqLworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmICgoc3RybmljbXAodmFsdWUsICJzbWIyIiwgNCkgPT0gMCkgfHwKKwkJCQkgICAoc3RybmljbXAodmFsdWUsICIyIiwgMSkgPT0gMCkpIHsKKyNpZmRlZiBDT05GSUdfQ0lGU19TTUIyCisJCQkJdm9sLT51c2Vfc21iMiA9IHRydWU7CisjZWxzZQorCQkJCWNFUlJPUigxLCAic21iMiBzdXBwb3J0IG5vdCBlbmFibGVkIik7CisjZW5kaWYgLyogQ09ORklHX0NJRlNfU01CMiAqLwogCQkJfQogCQl9IGVsc2UgaWYgKChzdHJuaWNtcChkYXRhLCAidW5jIiwgMykgPT0gMCkKIAkJCSAgIHx8IChzdHJuaWNtcChkYXRhLCAidGFyZ2V0IiwgNikgPT0gMCkKQEAgLTEwMjksMTIgKzEwNzYsMTIgQEAKIAkJCWlmICghdmFsdWUgfHwgISp2YWx1ZSkgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNJRlM6IGludmFsaWQgcGF0aCB0byAiCiAJCQkJCQkgICAgIm5ldHdvcmsgcmVzb3VyY2VcbiIpOwotCQkJCXJldHVybiAxOwkvKiBuZWVkc19hcmc7ICovCisJCQkJZ290byBjaWZzX3BhcnNlX21vdW50X2VycjsKIAkJCX0KIAkJCWlmICgodGVtcF9sZW4gPSBzdHJubGVuKHZhbHVlLCAzMDApKSA8IDMwMCkgewogCQkJCXZvbC0+VU5DID0ga21hbGxvYyh0ZW1wX2xlbisxLCBHRlBfS0VSTkVMKTsKIAkJCQlpZiAodm9sLT5VTkMgPT0gTlVMTCkKLQkJCQkJcmV0dXJuIDE7CisJCQkJCWdvdG8gY2lmc19wYXJzZV9tb3VudF9lcnI7CiAJCQkJc3RyY3B5KHZvbC0+VU5DLCB2YWx1ZSk7CiAJCQkJaWYgKHN0cm5jbXAodm9sLT5VTkMsICIvLyIsIDIpID09IDApIHsKIAkJCQkJdm9sLT5VTkNbMF0gPSAnXFwnOwpAQCAtMTA0MywyNyArMTA5MCwzMiBAQAogCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkJCSAgICAgICAiQ0lGUzogVU5DIFBhdGggZG9lcyBub3QgYmVnaW4gIgogCQkJCQkgICAgICAgIndpdGggLy8gb3IgXFxcXCBcbiIpOwotCQkJCQlyZXR1cm4gMTsKKwkJCQkJZ290byBjaWZzX3BhcnNlX21vdW50X2VycjsKIAkJCQl9CiAJCQl9IGVsc2UgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNJRlM6IFVOQyBuYW1lIHRvbyBsb25nXG4iKTsKLQkJCQlyZXR1cm4gMTsKKwkJCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOwogCQkJfQogCQl9IGVsc2UgaWYgKChzdHJuaWNtcChkYXRhLCAiZG9tYWluIiwgMykgPT0gMCkKIAkJCSAgIHx8IChzdHJuaWNtcChkYXRhLCAid29ya2dyb3VwIiwgNSkgPT0gMCkpIHsKIAkJCWlmICghdmFsdWUgfHwgISp2YWx1ZSkgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNJRlM6IGludmFsaWQgZG9tYWluIG5hbWVcbiIpOwotCQkJCXJldHVybiAxOwkvKiBuZWVkc19hcmc7ICovCisJCQkJZ290byBjaWZzX3BhcnNlX21vdW50X2VycjsKIAkJCX0KIAkJCS8qIEJCIGFyZSB0aGVyZSBjYXNlcyBpbiB3aGljaCBhIGNvbW1hIGNhbiBiZSB2YWxpZCBpbgogCQkJYSBkb21haW4gbmFtZSBhbmQgbmVlZCBzcGVjaWFsIGhhbmRsaW5nPyAqLwogCQkJaWYgKHN0cm5sZW4odmFsdWUsIDI1NikgPCAyNTYpIHsKLQkJCQl2b2wtPmRvbWFpbm5hbWUgPSB2YWx1ZTsKKwkJCQl2b2wtPmRvbWFpbm5hbWUgPSBrc3RyZHVwKHZhbHVlLCBHRlBfS0VSTkVMKTsKKwkJCQlpZiAoIXZvbC0+ZG9tYWlubmFtZSkgeworCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDSUZTOiBubyBtZW1vcnkgIgorCQkJCQkJCSAgICAiZm9yIGRvbWFpbm5hbWVcbiIpOworCQkJCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOworCQkJCX0KIAkJCQljRllJKDEsICJEb21haW4gbmFtZSBzZXQiKTsKIAkJCX0gZWxzZSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ0lGUzogZG9tYWluIG5hbWUgdG9vICIKIAkJCQkJCSAgICAibG9uZ1xuIik7Ci0JCQkJcmV0dXJuIDE7CisJCQkJZ290byBjaWZzX3BhcnNlX21vdW50X2VycjsKIAkJCX0KIAkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAic3JjYWRkciIsIDcpID09IDApIHsKIAkJCXZvbC0+c3JjYWRkci5zc19mYW1pbHkgPSBBRl9VTlNQRUM7CkBAIC0xMDcxLDcgKzExMjMsNyBAQAogCQkJaWYgKCF2YWx1ZSB8fCAhKnZhbHVlKSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ0lGUzogc3JjYWRkciB2YWx1ZSIKIAkJCQkgICAgICAgIiBub3Qgc3BlY2lmaWVkLlxuIik7Ci0JCQkJcmV0dXJuIDE7CS8qIG5lZWRzX2FyZzsgKi8KKwkJCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOwogCQkJfQogCQkJaSA9IGNpZnNfY29udmVydF9hZGRyZXNzKChzdHJ1Y3Qgc29ja2FkZHIgKikmdm9sLT5zcmNhZGRyLAogCQkJCQkJIHZhbHVlLCBzdHJsZW4odmFsdWUpKTsKQEAgLTEwNzksMjAgKzExMzEsMjAgQEAKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDSUZTOiAgQ291bGQgbm90IHBhcnNlIgogCQkJCSAgICAgICAiIHNyY2FkZHI6ICVzXG4iLAogCQkJCSAgICAgICB2YWx1ZSk7Ci0JCQkJcmV0dXJuIDE7CisJCQkJZ290byBjaWZzX3BhcnNlX21vdW50X2VycjsKIAkJCX0KIAkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAicHJlZml4cGF0aCIsIDEwKSA9PSAwKSB7CiAJCQlpZiAoIXZhbHVlIHx8ICEqdmFsdWUpIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkJCSJDSUZTOiBpbnZhbGlkIHBhdGggcHJlZml4XG4iKTsKLQkJCQlyZXR1cm4gMTsgICAgICAgLyogbmVlZHNfYXJndW1lbnQgKi8KKwkJCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOwogCQkJfQogCQkJaWYgKCh0ZW1wX2xlbiA9IHN0cm5sZW4odmFsdWUsIDEwMjQpKSA8IDEwMjQpIHsKIAkJCQlpZiAodmFsdWVbMF0gIT0gJy8nKQogCQkJCQl0ZW1wX2xlbisrOyAgLyogbWlzc2luZyBsZWFkaW5nIHNsYXNoICovCiAJCQkJdm9sLT5wcmVwYXRoID0ga21hbGxvYyh0ZW1wX2xlbisxLCBHRlBfS0VSTkVMKTsKIAkJCQlpZiAodm9sLT5wcmVwYXRoID09IE5VTEwpCi0JCQkJCXJldHVybiAxOworCQkJCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOwogCQkJCWlmICh2YWx1ZVswXSAhPSAnLycpIHsKIAkJCQkJdm9sLT5wcmVwYXRoWzBdID0gJy8nOwogCQkJCQlzdHJjcHkodm9sLT5wcmVwYXRoKzEsIHZhbHVlKTsKQEAgLTExMDEsMjQgKzExNTMsMzMgQEAKIAkJCQljRllJKDEsICJwcmVmaXggcGF0aCAlcyIsIHZvbC0+cHJlcGF0aCk7CiAJCQl9IGVsc2UgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNJRlM6IHByZWZpeCB0b28gbG9uZ1xuIik7Ci0JCQkJcmV0dXJuIDE7CisJCQkJZ290byBjaWZzX3BhcnNlX21vdW50X2VycjsKIAkJCX0KIAkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAiaW9jaGFyc2V0IiwgOSkgPT0gMCkgewogCQkJaWYgKCF2YWx1ZSB8fCAhKnZhbHVlKSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ0lGUzogaW52YWxpZCBpb2NoYXJzZXQgIgogCQkJCQkJICAgICJzcGVjaWZpZWRcbiIpOwotCQkJCXJldHVybiAxOwkvKiBuZWVkc19hcmc7ICovCisJCQkJZ290byBjaWZzX3BhcnNlX21vdW50X2VycjsKIAkJCX0KIAkJCWlmIChzdHJubGVuKHZhbHVlLCA2NSkgPCA2NSkgewotCQkJCWlmIChzdHJuaWNtcCh2YWx1ZSwgImRlZmF1bHQiLCA3KSkKLQkJCQkJdm9sLT5pb2NoYXJzZXQgPSB2YWx1ZTsKKwkJCQlpZiAoc3RybmljbXAodmFsdWUsICJkZWZhdWx0IiwgNykpIHsKKwkJCQkJdm9sLT5pb2NoYXJzZXQgPSBrc3RyZHVwKHZhbHVlLAorCQkJCQkJCQkgR0ZQX0tFUk5FTCk7CisKKwkJCQkJaWYgKCF2b2wtPmlvY2hhcnNldCkgeworCQkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ0lGUzogbm8gIgorCQkJCQkJCQkgICAibWVtb3J5IGZvciIKKwkJCQkJCQkJICAgImNoYXJzZXRcbiIpOworCQkJCQkJZ290byBjaWZzX3BhcnNlX21vdW50X2VycjsKKwkJCQkJfQorCQkJCX0KIAkJCQkvKiBpZiBpb2NoYXJzZXQgbm90IHNldCB0aGVuIGxvYWRfbmxzX2RlZmF1bHQKIAkJCQkgICBpcyB1c2VkIGJ5IGNhbGxlciAqLwogCQkJCWNGWUkoMSwgImlvY2hhcnNldCBzZXQgdG8gJXMiLCB2YWx1ZSk7CiAJCQl9IGVsc2UgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNJRlM6IGlvY2hhcnNldCBuYW1lICIKIAkJCQkJCSAgICAidG9vIGxvbmcuXG4iKTsKLQkJCQlyZXR1cm4gMTsKKwkJCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOwogCQkJfQogCQl9IGVsc2UgaWYgKCFzdHJuaWNtcChkYXRhLCAidWlkIiwgMykgJiYgdmFsdWUgJiYgKnZhbHVlKSB7CiAJCQl2b2wtPmxpbnV4X3VpZCA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCAmdmFsdWUsIDApOwpAQCAtMTIzMSw3ICsxMjkyLDcgQEAKIAkJCQlpZiAodm9sLT5hY3RpbWVvID4gQ0lGU19NQVhfQUNUSU1FTykgewogCQkJCQljRVJST1IoMSwgIkNJRlM6IGF0dHJpYnV0ZSBjYWNoZSIKIAkJCQkJCQkidGltZW91dCB0b28gbGFyZ2UiKTsKLQkJCQkJcmV0dXJuIDE7CisJCQkJCWdvdG8gY2lmc19wYXJzZV9tb3VudF9lcnI7CiAJCQkJfQogCQkJfQogCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJjcmVkZW50aWFscyIsIDQpID09IDApIHsKQEAgLTEzNzUsNyArMTQzNiw3IEBACiAjaWZuZGVmIENPTkZJR19DSUZTX0ZTQ0FDSEUKIAkJCWNFUlJPUigxLCAiRlMtQ2FjaGUgc3VwcG9ydCBuZWVkcyBDT05GSUdfQ0lGU19GU0NBQ0hFIgogCQkJCSAgImtlcm5lbCBjb25maWcgb3B0aW9uIHNldCIpOwotCQkJcmV0dXJuIDE7CisJCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOwogI2VuZGlmCiAJCQl2b2wtPmZzYyA9IHRydWU7CiAJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgIm1mc3ltbGlua3MiLCAxMCkgPT0gMCkgewpAQCAtMTM5MCwxMiArMTQ1MSwxMiBAQAogCQlpZiAoZGV2bmFtZSA9PSBOVUxMKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDSUZTOiBNaXNzaW5nIFVOQyBuYW1lIGZvciBtb3VudCAiCiAJCQkJCQkidGFyZ2V0XG4iKTsKLQkJCXJldHVybiAxOworCQkJZ290byBjaWZzX3BhcnNlX21vdW50X2VycjsKIAkJfQogCQlpZiAoKHRlbXBfbGVuID0gc3RybmxlbihkZXZuYW1lLCAzMDApKSA8IDMwMCkgewogCQkJdm9sLT5VTkMgPSBrbWFsbG9jKHRlbXBfbGVuKzEsIEdGUF9LRVJORUwpOwogCQkJaWYgKHZvbC0+VU5DID09IE5VTEwpCi0JCQkJcmV0dXJuIDE7CisJCQkJZ290byBjaWZzX3BhcnNlX21vdW50X2VycjsKIAkJCXN0cmNweSh2b2wtPlVOQywgZGV2bmFtZSk7CiAJCQlpZiAoc3RybmNtcCh2b2wtPlVOQywgIi8vIiwgMikgPT0gMCkgewogCQkJCXZvbC0+VU5DWzBdID0gJ1xcJzsKQEAgLTE0MDMsMjEgKzE0NjQsMjEgQEAKIAkJCX0gZWxzZSBpZiAoc3RybmNtcCh2b2wtPlVOQywgIlxcXFwiLCAyKSAhPSAwKSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ0lGUzogVU5DIFBhdGggZG9lcyBub3QgIgogCQkJCQkJICAgICJiZWdpbiB3aXRoIC8vIG9yIFxcXFwgXG4iKTsKLQkJCQlyZXR1cm4gMTsKKwkJCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOwogCQkJfQogCQkJdmFsdWUgPSBzdHJwYnJrKHZvbC0+VU5DKzIsICIvXFwiKTsKIAkJCWlmICh2YWx1ZSkKIAkJCQkqdmFsdWUgPSAnXFwnOwogCQl9IGVsc2UgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ0lGUzogVU5DIG5hbWUgdG9vIGxvbmdcbiIpOwotCQkJcmV0dXJuIDE7CisJCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOwogCQl9CiAJfQogCiAJaWYgKHZvbC0+bXVsdGl1c2VyICYmICEodm9sLT5zZWNGbGcgJiBDSUZTU0VDX01BWV9LUkI1KSkgewogCQljRVJST1IoMSwgIk11bHRpdXNlciBtb3VudHMgY3VycmVudGx5IHJlcXVpcmUga3JiNSAiCiAJCQkgICJhdXRoZW50aWNhdGlvbiEiKTsKLQkJcmV0dXJuIDE7CisJCWdvdG8gY2lmc19wYXJzZV9tb3VudF9lcnI7CiAJfQogCiAJaWYgKHZvbC0+VU5DaXAgPT0gTlVMTCkKQEAgLTE0MzUsNyArMTQ5NiwxMiBAQAogCQlwcmludGsoS0VSTl9OT1RJQ0UgIkNJRlM6IGlnbm9yaW5nIGZvcmNlZ2lkIG1vdW50IG9wdGlvbiAiCiAJCQkJICAgInNwZWNpZmllZCB3aXRoIG5vIGdpZD0gb3B0aW9uLlxuIik7CiAKKwlrZnJlZShtb3VudGRhdGFfY29weSk7CiAJcmV0dXJuIDA7CisKK2NpZnNfcGFyc2VfbW91bnRfZXJyOgorCWtmcmVlKG1vdW50ZGF0YV9jb3B5KTsKKwlyZXR1cm4gMTsKIH0KIAogLyoqIFJldHVybnMgdHJ1ZSBpZiBzcmNhZGRyIGlzbid0IHNwZWNpZmllZCBhbmQgcmhzIGlzbid0CkBAIC0yMjY1LDcgKzIzMzEsNyBAQAogCQlzbWJfYnVmID0gKHN0cnVjdCBzbWJfaGRyICopc2VzX2luaXRfYnVmOwogCiAJCS8qIHNpemVvZiBSRkMxMDAyX1NFU1NJT05fUkVRVUVTVCB3aXRoIG5vIHNjb3BlICovCi0JCXNtYl9idWYtPnNtYl9idWZfbGVuZ3RoID0gMHg4MTAwMDA0NDsKKwkJc21iX2J1Zi0+c21iX2J1Zl9sZW5ndGggPSBjcHVfdG9fYmUzMigweDgxMDAwMDQ0KTsKIAkJcmMgPSBzbWJfc2VuZChzZXJ2ZXIsIHNtYl9idWYsIDB4NDQpOwogCQlrZnJlZShzZXNfaW5pdF9idWYpOwogCQkvKgpAQCAtMjY1OCw2ICsyNzI0LDExIEBACiAJCQkgICAgICAwIC8qIG5vdCBsZWdhY3kgKi8sIGNpZnNfc2ItPmxvY2FsX25scywKIAkJCSAgICAgIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYKIAkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CisKKwlpZiAocmMgPT0gLUVPUE5PVFNVUFAgfHwgcmMgPT0gLUVJTlZBTCkKKwkJcmMgPSBTTUJRdWVyeUluZm9ybWF0aW9uKHhpZCwgdGNvbiwgZnVsbF9wYXRoLCBwZmlsZV9pbmZvLAorCQkJCWNpZnNfc2ItPmxvY2FsX25scywgY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJgorCQkJCSAgQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogCWtmcmVlKHBmaWxlX2luZm8pOwogCXJldHVybiByYzsKIH0KQEAgLTI2NzEsOCArMjc0MiwxMiBAQAogCQlyZXR1cm47CiAKIAl2b2x1bWVfaW5mbyA9ICpwdm9sdW1lX2luZm87CisJa2ZyZWUodm9sdW1lX2luZm8tPnVzZXJuYW1lKTsKIAlremZyZWUodm9sdW1lX2luZm8tPnBhc3N3b3JkKTsKIAlrZnJlZSh2b2x1bWVfaW5mby0+VU5DKTsKKwlrZnJlZSh2b2x1bWVfaW5mby0+VU5DaXApOworCWtmcmVlKHZvbHVtZV9pbmZvLT5kb21haW5uYW1lKTsKKwlrZnJlZSh2b2x1bWVfaW5mby0+aW9jaGFyc2V0KTsKIAlrZnJlZSh2b2x1bWVfaW5mby0+cHJlcGF0aCk7CiAJa2ZyZWUodm9sdW1lX2luZm8pOwogCSpwdm9sdW1lX2luZm8gPSBOVUxMOwpAQCAtMjcwOSwxMSArMjc4NCw2NSBAQAogCWZ1bGxfcGF0aFt1bmNfbGVuICsgY2lmc19zYi0+cHJlcGF0aGxlbl0gPSAwOyAvKiBhZGQgdHJhaWxpbmcgbnVsbCAqLwogCXJldHVybiBmdWxsX3BhdGg7CiB9CisKKy8qCisgKiBQZXJmb3JtIGEgZGZzIHJlZmVycmFsIHF1ZXJ5IGZvciBhIHNoYXJlIGFuZCAob3B0aW9uYWxseSkgcHJlZml4CisgKgorICogSWYgYSByZWZlcnJhbCBpcyBmb3VuZCwgY2lmc19zYi0+bW91bnRkYXRhIHdpbGwgYmUgKHJlLSlhbGxvY2F0ZWQKKyAqIHRvIGEgc3RyaW5nIGNvbnRhaW5pbmcgdXBkYXRlZCBvcHRpb25zIGZvciB0aGUgc3VibW91bnQuICBPdGhlcndpc2UgaXQKKyAqIHdpbGwgYmUgbGVmdCB1bnRvdWNoZWQuCisgKgorICogUmV0dXJucyB0aGUgcmMgZnJvbSBnZXRfZGZzX3BhdGggdG8gdGhlIGNhbGxlciwgd2hpY2ggY2FuIGJlIHVzZWQgdG8KKyAqIGRldGVybWluZSB3aGV0aGVyIHRoZXJlIHdlcmUgcmVmZXJyYWxzLgorICovCitzdGF0aWMgaW50CitleHBhbmRfZGZzX3JlZmVycmFsKGludCB4aWQsIHN0cnVjdCBjaWZzU2VzSW5mbyAqcFNlc0luZm8sCisJCSAgICBzdHJ1Y3Qgc21iX3ZvbCAqdm9sdW1lX2luZm8sIHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IsCisJCSAgICBpbnQgY2hlY2tfcHJlZml4KQoreworCWludCByYzsKKwl1bnNpZ25lZCBpbnQgbnVtX3JlZmVycmFscyA9IDA7CisJc3RydWN0IGRmc19pbmZvM19wYXJhbSAqcmVmZXJyYWxzID0gTlVMTDsKKwljaGFyICpmdWxsX3BhdGggPSBOVUxMLCAqcmVmX3BhdGggPSBOVUxMLCAqbWRhdGEgPSBOVUxMOworCisJZnVsbF9wYXRoID0gYnVpbGRfdW5jX3BhdGhfdG9fcm9vdCh2b2x1bWVfaW5mbywgY2lmc19zYik7CisJaWYgKElTX0VSUihmdWxsX3BhdGgpKQorCQlyZXR1cm4gUFRSX0VSUihmdWxsX3BhdGgpOworCisJLyogRm9yIERGUyBwYXRocywgc2tpcCB0aGUgZmlyc3QgJ1wnIG9mIHRoZSBVTkMgKi8KKwlyZWZfcGF0aCA9IGNoZWNrX3ByZWZpeCA/IGZ1bGxfcGF0aCArIDEgOiB2b2x1bWVfaW5mby0+VU5DICsgMTsKKworCXJjID0gZ2V0X2Rmc19wYXRoKHhpZCwgcFNlc0luZm8gLCByZWZfcGF0aCwgY2lmc19zYi0+bG9jYWxfbmxzLAorCQkJICAmbnVtX3JlZmVycmFscywgJnJlZmVycmFscywKKwkJCSAgY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CisKKwlpZiAoIXJjICYmIG51bV9yZWZlcnJhbHMgPiAwKSB7CisJCWNoYXIgKmZha2VfZGV2bmFtZSA9IE5VTEw7CisKKwkJbWRhdGEgPSBjaWZzX2NvbXBvc2VfbW91bnRfb3B0aW9ucyhjaWZzX3NiLT5tb3VudGRhdGEsCisJCQkJCQkgICBmdWxsX3BhdGggKyAxLCByZWZlcnJhbHMsCisJCQkJCQkgICAmZmFrZV9kZXZuYW1lKTsKKworCQlmcmVlX2Rmc19pbmZvX2FycmF5KHJlZmVycmFscywgbnVtX3JlZmVycmFscyk7CisJCWtmcmVlKGZha2VfZGV2bmFtZSk7CisKKwkJaWYgKGNpZnNfc2ItPm1vdW50ZGF0YSAhPSBOVUxMKQorCQkJa2ZyZWUoY2lmc19zYi0+bW91bnRkYXRhKTsKKworCQlpZiAoSVNfRVJSKG1kYXRhKSkgeworCQkJcmMgPSBQVFJfRVJSKG1kYXRhKTsKKwkJCW1kYXRhID0gTlVMTDsKKwkJfQorCQljaWZzX3NiLT5tb3VudGRhdGEgPSBtZGF0YTsKKwl9CisJa2ZyZWUoZnVsbF9wYXRoKTsKKwlyZXR1cm4gcmM7Cit9CiAjZW5kaWYKIAogaW50CiBjaWZzX21vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IsCi0JCWNoYXIgKm1vdW50X2RhdGFfZ2xvYmFsLCBjb25zdCBjaGFyICpkZXZuYW1lKQorCQljb25zdCBjaGFyICpkZXZuYW1lKQogewogCWludCByYzsKIAlpbnQgeGlkOwpAQCAtMjcyMiwxMyArMjg1MSwyMCBAQAogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb247CiAJc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc3J2VGNwOwogCWNoYXIgICAqZnVsbF9wYXRoOwotCWNoYXIgKm1vdW50X2RhdGEgPSBtb3VudF9kYXRhX2dsb2JhbDsKIAlzdHJ1Y3QgdGNvbl9saW5rICp0bGluazsKICNpZmRlZiBDT05GSUdfQ0lGU19ERlNfVVBDQUxMCi0Jc3RydWN0IGRmc19pbmZvM19wYXJhbSAqcmVmZXJyYWxzID0gTlVMTDsKLQl1bnNpZ25lZCBpbnQgbnVtX3JlZmVycmFscyA9IDA7CiAJaW50IHJlZmVycmFsX3dhbGtzX2NvdW50ID0gMDsKIHRyeV9tb3VudF9hZ2FpbjoKKwkvKiBjbGVhbnVwIGFjdGl2aXRpZXMgaWYgd2UncmUgY2hhc2luZyBhIHJlZmVycmFsICovCisJaWYgKHJlZmVycmFsX3dhbGtzX2NvdW50KSB7CisJCWlmICh0Y29uKQorCQkJY2lmc19wdXRfdGNvbih0Y29uKTsKKwkJZWxzZSBpZiAocFNlc0luZm8pCisJCQljaWZzX3B1dF9zbWJfc2VzKHBTZXNJbmZvKTsKKworCQljbGVhbnVwX3ZvbHVtZV9pbmZvKCZ2b2x1bWVfaW5mbyk7CisJCUZyZWVYaWQoeGlkKTsKKwl9CiAjZW5kaWYKIAlyYyA9IDA7CiAJdGNvbiA9IE5VTEw7CkBAIC0yNzQ1LDcgKzI4ODEsOCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoY2lmc19wYXJzZV9tb3VudF9vcHRpb25zKG1vdW50X2RhdGEsIGRldm5hbWUsIHZvbHVtZV9pbmZvKSkgeworCWlmIChjaWZzX3BhcnNlX21vdW50X29wdGlvbnMoY2lmc19zYi0+bW91bnRkYXRhLCBkZXZuYW1lLAorCQkJCSAgICAgdm9sdW1lX2luZm8pKSB7CiAJCXJjID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjg0MSw2ICsyOTc4LDI0IEBACiAJCQkgICAgICAgKHRjb24tPnNlcy0+c2VydmVyLT5tYXhCdWYgLSBNQVhfQ0lGU19IRFJfU0laRSkpOwogCiByZW1vdGVfcGF0aF9jaGVjazoKKyNpZmRlZiBDT05GSUdfQ0lGU19ERlNfVVBDQUxMCisJLyoKKwkgKiBQZXJmb3JtIGFuIHVuY29uZGl0aW9uYWwgY2hlY2sgZm9yIHdoZXRoZXIgdGhlcmUgYXJlIERGUworCSAqIHJlZmVycmFscyBmb3IgdGhpcyBwYXRoIHdpdGhvdXQgcHJlZml4LCB0byBwcm92aWRlIHN1cHBvcnQKKwkgKiBmb3IgREZTIHJlZmVycmFscyBmcm9tIHcyazggc2VydmVycyB3aGljaCBkb24ndCBzZWVtIHRvIHJlc3BvbmQKKwkgKiB3aXRoIFBBVEhfTk9UX0NPVkVSRUQgdG8gcmVxdWVzdHMgdGhhdCBpbmNsdWRlIHRoZSBwcmVmaXguCisJICogQ2hhc2UgdGhlIHJlZmVycmFsIGlmIGZvdW5kLCBvdGhlcndpc2UgY29udGludWUgbm9ybWFsbHkuCisJICovCisJaWYgKHJlZmVycmFsX3dhbGtzX2NvdW50ID09IDApIHsKKwkJaW50IHJlZnJjID0gZXhwYW5kX2Rmc19yZWZlcnJhbCh4aWQsIHBTZXNJbmZvLCB2b2x1bWVfaW5mbywKKwkJCQkJCWNpZnNfc2IsIGZhbHNlKTsKKwkJaWYgKCFyZWZyYykgeworCQkJcmVmZXJyYWxfd2Fsa3NfY291bnQrKzsKKwkJCWdvdG8gdHJ5X21vdW50X2FnYWluOworCQl9CisJfQorI2VuZGlmCisKIAkvKiBjaGVjayBpZiBhIHdob2xlIHBhdGggKGluY2x1ZGluZyBwcmVwYXRoKSBpcyBub3QgcmVtb3RlICovCiAJaWYgKCFyYyAmJiB0Y29uKSB7CiAJCS8qIGJ1aWxkX3BhdGhfdG9fcm9vdCB3b3JrcyBvbmx5IHdoZW4gd2UgaGF2ZSBhIHZhbGlkIHRjb24gKi8KQEAgLTI4NzQsNDYgKzMwMjksMTUgQEAKIAkJaWYgKChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfUE9TSVhfUEFUSFMpID09IDApCiAJCQljb252ZXJ0X2RlbGltaXRlcihjaWZzX3NiLT5wcmVwYXRoLAogCQkJCQlDSUZTX0RJUl9TRVAoY2lmc19zYikpOwotCQlmdWxsX3BhdGggPSBidWlsZF91bmNfcGF0aF90b19yb290KHZvbHVtZV9pbmZvLCBjaWZzX3NiKTsKLQkJaWYgKElTX0VSUihmdWxsX3BhdGgpKSB7Ci0JCQlyYyA9IFBUUl9FUlIoZnVsbF9wYXRoKTsKLQkJCWdvdG8gbW91bnRfZmFpbF9jaGVjazsKLQkJfQogCi0JCWNGWUkoMSwgIkdldHRpbmcgcmVmZXJyYWwgZm9yOiAlcyIsIGZ1bGxfcGF0aCk7Ci0JCXJjID0gZ2V0X2Rmc19wYXRoKHhpZCwgcFNlc0luZm8gLCBmdWxsX3BhdGggKyAxLAotCQkJY2lmc19zYi0+bG9jYWxfbmxzLCAmbnVtX3JlZmVycmFscywgJnJlZmVycmFscywKLQkJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwotCQlpZiAoIXJjICYmIG51bV9yZWZlcnJhbHMgPiAwKSB7Ci0JCQljaGFyICpmYWtlX2Rldm5hbWUgPSBOVUxMOworCQlyYyA9IGV4cGFuZF9kZnNfcmVmZXJyYWwoeGlkLCBwU2VzSW5mbywgdm9sdW1lX2luZm8sIGNpZnNfc2IsCisJCQkJCSB0cnVlKTsKIAotCQkJaWYgKG1vdW50X2RhdGEgIT0gbW91bnRfZGF0YV9nbG9iYWwpCi0JCQkJa2ZyZWUobW91bnRfZGF0YSk7Ci0KLQkJCW1vdW50X2RhdGEgPSBjaWZzX2NvbXBvc2VfbW91bnRfb3B0aW9ucygKLQkJCQkJY2lmc19zYi0+bW91bnRkYXRhLCBmdWxsX3BhdGggKyAxLAotCQkJCQlyZWZlcnJhbHMsICZmYWtlX2Rldm5hbWUpOwotCi0JCQlmcmVlX2Rmc19pbmZvX2FycmF5KHJlZmVycmFscywgbnVtX3JlZmVycmFscyk7Ci0JCQlrZnJlZShmYWtlX2Rldm5hbWUpOwotCQkJa2ZyZWUoZnVsbF9wYXRoKTsKLQotCQkJaWYgKElTX0VSUihtb3VudF9kYXRhKSkgewotCQkJCXJjID0gUFRSX0VSUihtb3VudF9kYXRhKTsKLQkJCQltb3VudF9kYXRhID0gTlVMTDsKLQkJCQlnb3RvIG1vdW50X2ZhaWxfY2hlY2s7Ci0JCQl9Ci0KLQkJCWlmICh0Y29uKQotCQkJCWNpZnNfcHV0X3Rjb24odGNvbik7Ci0JCQllbHNlIGlmIChwU2VzSW5mbykKLQkJCQljaWZzX3B1dF9zbWJfc2VzKHBTZXNJbmZvKTsKLQotCQkJY2xlYW51cF92b2x1bWVfaW5mbygmdm9sdW1lX2luZm8pOworCQlpZiAoIXJjKSB7CiAJCQlyZWZlcnJhbF93YWxrc19jb3VudCsrOwotCQkJRnJlZVhpZCh4aWQpOwogCQkJZ290byB0cnlfbW91bnRfYWdhaW47CiAJCX0KKwkJZ290byBtb3VudF9mYWlsX2NoZWNrOwogI2Vsc2UgLyogTm8gREZTIHN1cHBvcnQsIHJldHVybiBlcnJvciBvbiBtb3VudCAqLwogCQlyYyA9IC1FT1BOT1RTVVBQOwogI2VuZGlmCkBAIC0yOTQ2LDggKzMwNzAsNiBAQAogbW91bnRfZmFpbF9jaGVjazoKIAkvKiBvbiBlcnJvciBmcmVlIHNlc2luZm8gYW5kIHRjb24gc3RydWN0IGlmIG5lZWRlZCAqLwogCWlmIChyYykgewotCQlpZiAobW91bnRfZGF0YSAhPSBtb3VudF9kYXRhX2dsb2JhbCkKLQkJCWtmcmVlKG1vdW50X2RhdGEpOwogCQkvKiBJZiBmaW5kX3VuYyBzdWNjZWVkZWQgdGhlbiByYyA9PSAwIHNvIHdlIGNhbiBub3QgZW5kICovCiAJCS8qIHVwIGFjY2lkZW50YWxseSBmcmVlaW5nIHNvbWVvbmUgZWxzZXMgdGNvbiBzdHJ1Y3QgKi8KIAkJaWYgKHRjb24pCkBAIC0zMDYzLDcgKzMxODUsOCBAQAogCWJjY19wdHIgKz0gc3RybGVuKCI/Pz8/PyIpOwogCWJjY19wdHIgKz0gMTsKIAljb3VudCA9IGJjY19wdHIgLSAmcFNNQi0+UGFzc3dvcmRbMF07Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGNvdW50OworCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCA9IGNwdV90b19iZTMyKGJlMzJfdG9fY3B1KAorCQkJCQlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGgpICsgY291bnQpOwogCXBTTUItPkJ5dGVDb3VudCA9IGNwdV90b19sZTE2KGNvdW50KTsKIAogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCBzZXMsIHNtYl9idWZmZXIsIHNtYl9idWZmZXJfcmVzcG9uc2UsICZsZW5ndGgsCkBAIC0zMjM4LDcgKzMzNjEsOSBAQAogCXN0cnVjdCBjaWZzU2VzSW5mbyAqc2VzOwogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24gPSBOVUxMOwogCXN0cnVjdCBzbWJfdm9sICp2b2xfaW5mbzsKLQljaGFyIHVzZXJuYW1lW01BWF9VU0VSTkFNRV9TSVpFICsgMV07CisJY2hhciB1c2VybmFtZVsyOF07IC8qIGJpZyBlbm91Z2ggZm9yICJrcmI1MHgiICsgaGV4IG9mIFVMT05HX01BWCA2KzE2ICovCisJCQkgICAvKiBXZSB1c2VkIHRvIGhhdmUgdGhpcyBhcyBNQVhfVVNFUk5BTUUgd2hpY2ggaXMgICAqLworCQkJICAgLyogd2F5IHRvbyBiaWcgbm93ICgyNTYgaW5zdGVhZCBvZiAzMikgKi8KIAogCXZvbF9pbmZvID0ga3phbGxvYyhzaXplb2YoKnZvbF9pbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHZvbF9pbmZvID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvZXhwb3J0LmMgYi9mcy9jaWZzL2V4cG9ydC5jCmluZGV4IDk5M2Y4MjAuLjU1ZDg3YWMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZXhwb3J0LmMKKysrIGIvZnMvY2lmcy9leHBvcnQuYwpAQCAtNDUsNyArNDUsNyBAQAogI2luY2x1ZGUgImNpZnNfZGVidWcuaCIKICNpbmNsdWRlICJjaWZzZnMuaCIKIAotI2lmZGVmIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTAorI2lmZGVmIENJRlNfTkZTRF9FWFBPUlQKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpjaWZzX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCS8qIEJCIG5lZWQgdG8gYWRkIGNvZGUgaGVyZSBldmVudHVhbGx5IHRvIGVuYWJsZSBleHBvcnQgdmlhIE5GU0QgKi8KQEAgLTYzLDUgKzYzLDUgQEAKIAkuZW5jb2RlX2ZzID0gICovCiB9OwogCi0jZW5kaWYgLyogRVhQRVJJTUVOVEFMICovCisjZW5kaWYgLyogQ0lGU19ORlNEX0VYUE9SVCAqLwogCmRpZmYgLS1naXQgYS9mcy9jaWZzL2ZpbGUuYyBiL2ZzL2NpZnMvZmlsZS5jCmluZGV4IGZhZjU5NTIuLmM2NzJhZmUgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZmlsZS5jCisrKyBiL2ZzL2NpZnMvZmlsZS5jCkBAIC04NTcsOTUgKzg1Nyw2IEBACiAJCWNpZnNpLT5zZXJ2ZXJfZW9mID0gZW5kX29mX3dyaXRlOwogfQogCi1zc2l6ZV90IGNpZnNfdXNlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKndyaXRlX2RhdGEsCi0Jc2l6ZV90IHdyaXRlX3NpemUsIGxvZmZfdCAqcG9mZnNldCkKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQlpbnQgcmMgPSAwOwotCXVuc2lnbmVkIGludCBieXRlc193cml0dGVuID0gMDsKLQl1bnNpZ25lZCBpbnQgdG90YWxfd3JpdHRlbjsKLQlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOwotCXN0cnVjdCBjaWZzVGNvbkluZm8gKnBUY29uOwotCWludCB4aWQ7Ci0Jc3RydWN0IGNpZnNGaWxlSW5mbyAqb3Blbl9maWxlOwotCXN0cnVjdCBjaWZzSW5vZGVJbmZvICpjaWZzaSA9IENJRlNfSShpbm9kZSk7Ci0KLQljaWZzX3NiID0gQ0lGU19TQihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3NiKTsKLQotCS8qIGNGWUkoMSwgIiB3cml0ZSAlZCBieXRlcyB0byBvZmZzZXQgJWxsZCBvZiAlcyIsIHdyaXRlX3NpemUsCi0JICAgKnBvZmZzZXQsIGZpbGUtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5uYW1lKTsgKi8KLQotCWlmIChmaWxlLT5wcml2YXRlX2RhdGEgPT0gTlVMTCkKLQkJcmV0dXJuIC1FQkFERjsKLQotCW9wZW5fZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlwVGNvbiA9IHRsaW5rX3Rjb24ob3Blbl9maWxlLT50bGluayk7Ci0KLQlyYyA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGZpbGUsIHBvZmZzZXQsICZ3cml0ZV9zaXplLCAwKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCXhpZCA9IEdldFhpZCgpOwotCi0JZm9yICh0b3RhbF93cml0dGVuID0gMDsgd3JpdGVfc2l6ZSA+IHRvdGFsX3dyaXR0ZW47Ci0JICAgICB0b3RhbF93cml0dGVuICs9IGJ5dGVzX3dyaXR0ZW4pIHsKLQkJcmMgPSAtRUFHQUlOOwotCQl3aGlsZSAocmMgPT0gLUVBR0FJTikgewotCQkJaWYgKGZpbGUtPnByaXZhdGVfZGF0YSA9PSBOVUxMKSB7Ci0JCQkJLyogZmlsZSBoYXMgYmVlbiBjbG9zZWQgb24gdXMgKi8KLQkJCQlGcmVlWGlkKHhpZCk7Ci0JCQkvKiBpZiB3ZSBoYXZlIGdvdHRlbiBoZXJlIHdlIGhhdmUgd3JpdHRlbiBzb21lIGRhdGEKLQkJCSAgIGFuZCBibG9ja2VkLCBhbmQgdGhlIGZpbGUgaGFzIGJlZW4gZnJlZWQgb24gdXMgd2hpbGUKLQkJCSAgIHdlIGJsb2NrZWQgc28gcmV0dXJuIHdoYXQgd2UgbWFuYWdlZCB0byB3cml0ZSAqLwotCQkJCXJldHVybiB0b3RhbF93cml0dGVuOwotCQkJfQotCQkJaWYgKG9wZW5fZmlsZS0+aW52YWxpZEhhbmRsZSkgewotCQkJCS8qIHdlIGNvdWxkIGRlYWRsb2NrIGlmIHdlIGNhbGxlZAotCQkJCSAgIGZpbGVtYXBfZmRhdGF3YWl0IGZyb20gaGVyZSBzbyB0ZWxsCi0JCQkJICAgcmVvcGVuX2ZpbGUgbm90IHRvIGZsdXNoIGRhdGEgdG8gc2VydmVyCi0JCQkJICAgbm93ICovCi0JCQkJcmMgPSBjaWZzX3Jlb3Blbl9maWxlKG9wZW5fZmlsZSwgZmFsc2UpOwotCQkJCWlmIChyYyAhPSAwKQotCQkJCQlicmVhazsKLQkJCX0KLQotCQkJcmMgPSBDSUZTU01CV3JpdGUoeGlkLCBwVGNvbiwKLQkJCQlvcGVuX2ZpbGUtPm5ldGZpZCwKLQkJCQltaW5fdChjb25zdCBpbnQsIGNpZnNfc2ItPndzaXplLAotCQkJCSAgICAgIHdyaXRlX3NpemUgLSB0b3RhbF93cml0dGVuKSwKLQkJCQkqcG9mZnNldCwgJmJ5dGVzX3dyaXR0ZW4sCi0JCQkJTlVMTCwgd3JpdGVfZGF0YSArIHRvdGFsX3dyaXR0ZW4sIDApOwotCQl9Ci0JCWlmIChyYyB8fCAoYnl0ZXNfd3JpdHRlbiA9PSAwKSkgewotCQkJaWYgKHRvdGFsX3dyaXR0ZW4pCi0JCQkJYnJlYWs7Ci0JCQllbHNlIHsKLQkJCQlGcmVlWGlkKHhpZCk7Ci0JCQkJcmV0dXJuIHJjOwotCQkJfQotCQl9IGVsc2UgewotCQkJY2lmc191cGRhdGVfZW9mKGNpZnNpLCAqcG9mZnNldCwgYnl0ZXNfd3JpdHRlbik7Ci0JCQkqcG9mZnNldCArPSBieXRlc193cml0dGVuOwotCQl9Ci0JfQotCi0JY2lmc19zdGF0c19ieXRlc193cml0dGVuKHBUY29uLCB0b3RhbF93cml0dGVuKTsKLQotLyogRG8gbm90IHVwZGF0ZSBsb2NhbCBtdGltZSAtIHNlcnZlciB3aWxsIHNldCBpdHMgYWN0dWFsIHZhbHVlIG9uIHdyaXRlCi0gKglpbm9kZS0+aV9jdGltZSA9IGlub2RlLT5pX210aW1lID0KLSAqIAkJY3VycmVudF9mc190aW1lKGlub2RlLT5pX3NiKTsqLwotCWlmICh0b3RhbF93cml0dGVuID4gMCkgewotCQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwotCQlpZiAoKnBvZmZzZXQgPiBpbm9kZS0+aV9zaXplKQotCQkJaV9zaXplX3dyaXRlKGlub2RlLCAqcG9mZnNldCk7Ci0JCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQl9Ci0JbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlub2RlKTsKLQotCUZyZWVYaWQoeGlkKTsKLQlyZXR1cm4gdG90YWxfd3JpdHRlbjsKLX0KLQogc3RhdGljIHNzaXplX3QgY2lmc193cml0ZShzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpvcGVuX2ZpbGUsCiAJCQkgIGNvbnN0IGNoYXIgKndyaXRlX2RhdGEsIHNpemVfdCB3cml0ZV9zaXplLAogCQkJICBsb2ZmX3QgKnBvZmZzZXQpCkBAIC0xNDIwLDkgKzEzMzEsMTAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgY2lmc193cml0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQorc3RhdGljIGludAorY2lmc193cml0ZXBhZ2VfbG9ja2VkKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKLQlpbnQgcmMgPSAtRUZBVUxUOworCWludCByYzsKIAlpbnQgeGlkOwogCiAJeGlkID0gR2V0WGlkKCk7CkBAIC0xNDQyLDE1ICsxMzU0LDI5IEBACiAJICogdG8gZmFpbCB0byB1cGRhdGUgd2l0aCB0aGUgc3RhdGUgb2YgdGhlIHBhZ2UgY29ycmVjdGx5LgogCSAqLwogCXNldF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKK3JldHJ5X3dyaXRlOgogCXJjID0gY2lmc19wYXJ0aWFscGFnZXdyaXRlKHBhZ2UsIDAsIFBBR0VfQ0FDSEVfU0laRSk7Ci0JU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOyAvKiBCQiBhZGQgY2hlY2sgZm9yIGVycm9yIGFuZCBDbGVhcnVwdG9kYXRlPyAqLwotCXVubG9ja19wYWdlKHBhZ2UpOworCWlmIChyYyA9PSAtRUFHQUlOICYmIHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfQUxMKQorCQlnb3RvIHJldHJ5X3dyaXRlOworCWVsc2UgaWYgKHJjID09IC1FQUdBSU4pCisJCXJlZGlydHlfcGFnZV9mb3Jfd3JpdGVwYWdlKHdiYywgcGFnZSk7CisJZWxzZSBpZiAocmMgIT0gMCkKKwkJU2V0UGFnZUVycm9yKHBhZ2UpOworCWVsc2UKKwkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCWVuZF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKIAlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAJRnJlZVhpZCh4aWQpOwogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGludCBjaWZzX3dyaXRlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCit7CisJaW50IHJjID0gY2lmc193cml0ZXBhZ2VfbG9ja2VkKHBhZ2UsIHdiYyk7CisJdW5sb2NrX3BhZ2UocGFnZSk7CisJcmV0dXJuIHJjOworfQorCiBzdGF0aWMgaW50IGNpZnNfd3JpdGVfZW5kKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgY29waWVkLAogCQkJc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKmZzZGF0YSkKQEAgLTE1MTksOCArMTQ0NSwxMyBAQAogCWNGWUkoMSwgIlN5bmMgZmlsZSAtIG5hbWU6ICVzIGRhdGFzeW5jOiAweCV4IiwKIAkJZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRhdGFzeW5jKTsKIAotCWlmICghQ0lGU19JKGlub2RlKS0+Y2xpZW50Q2FuQ2FjaGVSZWFkKQotCQljaWZzX2ludmFsaWRhdGVfbWFwcGluZyhpbm9kZSk7CisJaWYgKCFDSUZTX0koaW5vZGUpLT5jbGllbnRDYW5DYWNoZVJlYWQpIHsKKwkJcmMgPSBjaWZzX2ludmFsaWRhdGVfbWFwcGluZyhpbm9kZSk7CisJCWlmIChyYykgeworCQkJY0ZZSSgxLCAicmM6ICVkIGR1cmluZyBpbnZhbGlkYXRlIHBoYXNlIiwgcmMpOworCQkJcmMgPSAwOyAvKiBkb24ndCBjYXJlIGFib3V0IGl0IGluIGZzeW5jICovCisJCX0KKwl9CiAKIAl0Y29uID0gdGxpbmtfdGNvbihzbWJmaWxlLT50bGluayk7CiAJaWYgKCEoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX05PU1NZTkMpKQpAQCAtMTcyNiw3ICsxNjU3LDcgQEAKIAlyZXR1cm4gdG90YWxfd3JpdHRlbjsKIH0KIAotc3RhdGljIHNzaXplX3QgY2lmc191c2VyX3dyaXRldihzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorc3NpemVfdCBjaWZzX3VzZXJfd3JpdGV2KHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCiAJCQkJdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKQogewogCXNzaXplX3Qgd3JpdHRlbjsKQEAgLTE4NDksMTcgKzE3ODAsNyBAQAogCXJldHVybiB0b3RhbF9yZWFkOwogfQogCi1zc2l6ZV90IGNpZnNfdXNlcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqcmVhZF9kYXRhLAotCQkgICAgICAgc2l6ZV90IHJlYWRfc2l6ZSwgbG9mZl90ICpwb2Zmc2V0KQotewotCXN0cnVjdCBpb3ZlYyBpb3Y7Ci0JaW92Lmlvdl9iYXNlID0gcmVhZF9kYXRhOwotCWlvdi5pb3ZfbGVuID0gcmVhZF9zaXplOwotCi0JcmV0dXJuIGNpZnNfaW92ZWNfcmVhZChmaWxlLCAmaW92LCAxLCBwb2Zmc2V0KTsKLX0KLQotc3RhdGljIHNzaXplX3QgY2lmc191c2VyX3JlYWR2KHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCitzc2l6ZV90IGNpZnNfdXNlcl9yZWFkdihzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcykKIHsKIAlzc2l6ZV90IHJlYWQ7CkBAIC0xOTg3LDggKzE5MDgsMTEgQEAKIAogCXhpZCA9IEdldFhpZCgpOwogCi0JaWYgKCFDSUZTX0koaW5vZGUpLT5jbGllbnRDYW5DYWNoZVJlYWQpCi0JCWNpZnNfaW52YWxpZGF0ZV9tYXBwaW5nKGlub2RlKTsKKwlpZiAoIUNJRlNfSShpbm9kZSktPmNsaWVudENhbkNhY2hlUmVhZCkgeworCQlyYyA9IGNpZnNfaW52YWxpZGF0ZV9tYXBwaW5nKGlub2RlKTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIHJjOworCX0KIAogCXJjID0gZ2VuZXJpY19maWxlX21tYXAoZmlsZSwgdm1hKTsKIAlpZiAocmMgPT0gMCkKQEAgLTI0MTUsNiArMjMzOSwyNyBAQAogCQljaWZzX2ZzY2FjaGVfaW52YWxpZGF0ZV9wYWdlKHBhZ2UsICZjaWZzaS0+dmZzX2lub2RlKTsKIH0KIAorc3RhdGljIGludCBjaWZzX2xhdW5kZXJfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpbnQgcmMgPSAwOworCWxvZmZfdCByYW5nZV9zdGFydCA9IHBhZ2Vfb2Zmc2V0KHBhZ2UpOworCWxvZmZfdCByYW5nZV9lbmQgPSByYW5nZV9zdGFydCArIChsb2ZmX3QpKFBBR0VfQ0FDSEVfU0laRSAtIDEpOworCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7CisJCS5zeW5jX21vZGUgPSBXQl9TWU5DX0FMTCwKKwkJLm5yX3RvX3dyaXRlID0gMCwKKwkJLnJhbmdlX3N0YXJ0ID0gcmFuZ2Vfc3RhcnQsCisJCS5yYW5nZV9lbmQgPSByYW5nZV9lbmQsCisJfTsKKworCWNGWUkoMSwgIkxhdW5kZXIgcGFnZTogJXAiLCBwYWdlKTsKKworCWlmIChjbGVhcl9wYWdlX2RpcnR5X2Zvcl9pbyhwYWdlKSkKKwkJcmMgPSBjaWZzX3dyaXRlcGFnZV9sb2NrZWQocGFnZSwgJndiYyk7CisKKwljaWZzX2ZzY2FjaGVfaW52YWxpZGF0ZV9wYWdlKHBhZ2UsIHBhZ2UtPm1hcHBpbmctPmhvc3QpOworCXJldHVybiByYzsKK30KKwogdm9pZCBjaWZzX29wbG9ja19icmVhayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqY2ZpbGUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNpZnNGaWxlSW5mbywKQEAgLTI0ODYsNyArMjQzMSw3IEBACiAJLnNldF9wYWdlX2RpcnR5ID0gX19zZXRfcGFnZV9kaXJ0eV9ub2J1ZmZlcnMsCiAJLnJlbGVhc2VwYWdlID0gY2lmc19yZWxlYXNlX3BhZ2UsCiAJLmludmFsaWRhdGVwYWdlID0gY2lmc19pbnZhbGlkYXRlX3BhZ2UsCi0JLyogLmRpcmVjdF9JTyA9ICovCisJLmxhdW5kZXJfcGFnZSA9IGNpZnNfbGF1bmRlcl9wYWdlLAogfTsKIAogLyoKQEAgLTI1MDMsNSArMjQ0OCw1IEBACiAJLnNldF9wYWdlX2RpcnR5ID0gX19zZXRfcGFnZV9kaXJ0eV9ub2J1ZmZlcnMsCiAJLnJlbGVhc2VwYWdlID0gY2lmc19yZWxlYXNlX3BhZ2UsCiAJLmludmFsaWRhdGVwYWdlID0gY2lmc19pbnZhbGlkYXRlX3BhZ2UsCi0JLyogLmRpcmVjdF9JTyA9ICovCisJLmxhdW5kZXJfcGFnZSA9IGNpZnNfbGF1bmRlcl9wYWdlLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvaW5vZGUuYyBiL2ZzL2NpZnMvaW5vZGUuYwppbmRleCA4ODUyNDcwLi5kZTAyZWQ1IDEwMDY0NAotLS0gYS9mcy9jaWZzL2lub2RlLmMKKysrIGIvZnMvY2lmcy9pbm9kZS5jCkBAIC04NzgsNyArODc4LDcgQEAKIH0KIAogLyogZ2V0cyByb290IGlub2RlICovCi1zdHJ1Y3QgaW5vZGUgKmNpZnNfcm9vdF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKQorc3RydWN0IGlub2RlICpjaWZzX3Jvb3RfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCWludCB4aWQ7CiAJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfU0Ioc2IpOwpAQCAtMTY4Myw3MSArMTY4Myw3MCBAQAogLyoKICAqIFphcCB0aGUgY2FjaGUuIENhbGxlZCB3aGVuIGludmFsaWRfbWFwcGluZyBmbGFnIGlzIHNldC4KICAqLwotdm9pZAoraW50CiBjaWZzX2ludmFsaWRhdGVfbWFwcGluZyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWludCByYzsKKwlpbnQgcmMgPSAwOwogCXN0cnVjdCBjaWZzSW5vZGVJbmZvICpjaWZzX2kgPSBDSUZTX0koaW5vZGUpOwogCiAJY2lmc19pLT5pbnZhbGlkX21hcHBpbmcgPSBmYWxzZTsKIAotCS8qIHdyaXRlIGJhY2sgYW55IGNhY2hlZCBkYXRhICovCiAJaWYgKGlub2RlLT5pX21hcHBpbmcgJiYgaW5vZGUtPmlfbWFwcGluZy0+bnJwYWdlcyAhPSAwKSB7Ci0JCXJjID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChpbm9kZS0+aV9tYXBwaW5nKTsKLQkJbWFwcGluZ19zZXRfZXJyb3IoaW5vZGUtPmlfbWFwcGluZywgcmMpOworCQlyYyA9IGludmFsaWRhdGVfaW5vZGVfcGFnZXMyKGlub2RlLT5pX21hcHBpbmcpOworCQlpZiAocmMpIHsKKwkJCWNFUlJPUigxLCAiJXM6IGNvdWxkIG5vdCBpbnZhbGlkYXRlIGlub2RlICVwIiwgX19mdW5jX18sCisJCQkgICAgICAgaW5vZGUpOworCQkJY2lmc19pLT5pbnZhbGlkX21hcHBpbmcgPSB0cnVlOworCQl9CiAJfQotCWludmFsaWRhdGVfcmVtb3RlX2lub2RlKGlub2RlKTsKKwogCWNpZnNfZnNjYWNoZV9yZXNldF9pbm9kZV9jb29raWUoaW5vZGUpOworCXJldHVybiByYzsKIH0KIAotaW50IGNpZnNfcmV2YWxpZGF0ZV9maWxlKHN0cnVjdCBmaWxlICpmaWxwKQoraW50IGNpZnNfcmV2YWxpZGF0ZV9maWxlX2F0dHIoc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJaW50IHJjID0gMDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpjZmlsZSA9IChzdHJ1Y3QgY2lmc0ZpbGVJbmZvICopIGZpbHAtPnByaXZhdGVfZGF0YTsKIAogCWlmICghY2lmc19pbm9kZV9uZWVkc19yZXZhbChpbm9kZSkpCi0JCWdvdG8gY2hlY2tfaW52YWw7CisJCXJldHVybiByYzsKIAogCWlmICh0bGlua190Y29uKGNmaWxlLT50bGluayktPnVuaXhfZXh0KQogCQlyYyA9IGNpZnNfZ2V0X2ZpbGVfaW5mb191bml4KGZpbHApOwogCWVsc2UKIAkJcmMgPSBjaWZzX2dldF9maWxlX2luZm8oZmlscCk7CiAKLWNoZWNrX2ludmFsOgotCWlmIChDSUZTX0koaW5vZGUpLT5pbnZhbGlkX21hcHBpbmcpCi0JCWNpZnNfaW52YWxpZGF0ZV9tYXBwaW5nKGlub2RlKTsKLQogCXJldHVybiByYzsKIH0KIAotLyogcmV2YWxpZGF0ZSBhIGRlbnRyeSdzIGlub2RlIGF0dHJpYnV0ZXMgKi8KLWludCBjaWZzX3JldmFsaWRhdGVfZGVudHJ5KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK2ludCBjaWZzX3JldmFsaWRhdGVfZGVudHJ5X2F0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCWludCB4aWQ7CiAJaW50IHJjID0gMDsKLQljaGFyICpmdWxsX3BhdGggPSBOVUxMOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS0+ZF9zYjsKKwljaGFyICpmdWxsX3BhdGggPSBOVUxMOwogCiAJaWYgKGlub2RlID09IE5VTEwpCiAJCXJldHVybiAtRU5PRU5UOwogCi0JeGlkID0gR2V0WGlkKCk7Ci0KIAlpZiAoIWNpZnNfaW5vZGVfbmVlZHNfcmV2YWwoaW5vZGUpKQotCQlnb3RvIGNoZWNrX2ludmFsOworCQlyZXR1cm4gcmM7CisKKwl4aWQgPSBHZXRYaWQoKTsKIAogCS8qIGNhbiBub3Qgc2FmZWx5IGdyYWIgdGhlIHJlbmFtZSBzZW0gaGVyZSBpZiByZW5hbWUgY2FsbHMgcmV2YWxpZGF0ZQogCSAgIHNpbmNlIHRoYXQgd291bGQgZGVhZGxvY2sgKi8KIAlmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGRlbnRyeSk7CiAJaWYgKGZ1bGxfcGF0aCA9PSBOVUxMKSB7CiAJCXJjID0gLUVOT01FTTsKLQkJZ290byBjaGVja19pbnZhbDsKKwkJZ290byBvdXQ7CiAJfQogCi0JY0ZZSSgxLCAiUmV2YWxpZGF0ZTogJXMgaW5vZGUgMHglcCBjb3VudCAlZCBkZW50cnk6IDB4JXAgZF90aW1lICVsZCAiCi0JCSAiamlmZmllcyAlbGQiLCBmdWxsX3BhdGgsIGlub2RlLCBpbm9kZS0+aV9jb3VudC5jb3VudGVyLAorCWNGWUkoMSwgIlVwZGF0ZSBhdHRyaWJ1dGVzOiAlcyBpbm9kZSAweCVwIGNvdW50ICVkIGRlbnRyeTogMHglcCBkX3RpbWUgIgorCQkgIiVsZCBqaWZmaWVzICVsZCIsIGZ1bGxfcGF0aCwgaW5vZGUsIGlub2RlLT5pX2NvdW50LmNvdW50ZXIsCiAJCSBkZW50cnksIGRlbnRyeS0+ZF90aW1lLCBqaWZmaWVzKTsKIAogCWlmIChjaWZzX3NiX21hc3Rlcl90Y29uKENJRlNfU0Ioc2IpKS0+dW5peF9leHQpCkBAIC0xNzU2LDQxICsxNzU1LDgzIEBACiAJCXJjID0gY2lmc19nZXRfaW5vZGVfaW5mbygmaW5vZGUsIGZ1bGxfcGF0aCwgTlVMTCwgc2IsCiAJCQkJCSB4aWQsIE5VTEwpOwogCi1jaGVja19pbnZhbDoKLQlpZiAoQ0lGU19JKGlub2RlKS0+aW52YWxpZF9tYXBwaW5nKQotCQljaWZzX2ludmFsaWRhdGVfbWFwcGluZyhpbm9kZSk7Ci0KK291dDoKIAlrZnJlZShmdWxsX3BhdGgpOwogCUZyZWVYaWQoeGlkKTsKIAlyZXR1cm4gcmM7CiB9CiAKK2ludCBjaWZzX3JldmFsaWRhdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpbnQgcmM7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisKKwlyYyA9IGNpZnNfcmV2YWxpZGF0ZV9maWxlX2F0dHIoZmlscCk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlpZiAoQ0lGU19JKGlub2RlKS0+aW52YWxpZF9tYXBwaW5nKQorCQlyYyA9IGNpZnNfaW52YWxpZGF0ZV9tYXBwaW5nKGlub2RlKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qIHJldmFsaWRhdGUgYSBkZW50cnkncyBpbm9kZSBhdHRyaWJ1dGVzICovCitpbnQgY2lmc19yZXZhbGlkYXRlX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJaW50IHJjOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisKKwlyYyA9IGNpZnNfcmV2YWxpZGF0ZV9kZW50cnlfYXR0cihkZW50cnkpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJaWYgKENJRlNfSShpbm9kZSktPmludmFsaWRfbWFwcGluZykKKwkJcmMgPSBjaWZzX2ludmFsaWRhdGVfbWFwcGluZyhpbm9kZSk7CisJcmV0dXJuIHJjOworfQorCiBpbnQgY2lmc19nZXRhdHRyKHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCSBzdHJ1Y3Qga3N0YXQgKnN0YXQpCiB7CiAJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfU0IoZGVudHJ5LT5kX3NiKTsKIAlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uID0gY2lmc19zYl9tYXN0ZXJfdGNvbihjaWZzX3NiKTsKLQlpbnQgZXJyID0gY2lmc19yZXZhbGlkYXRlX2RlbnRyeShkZW50cnkpOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJaW50IHJjOwogCi0JaWYgKCFlcnIpIHsKLQkJZ2VuZXJpY19maWxsYXR0cihkZW50cnktPmRfaW5vZGUsIHN0YXQpOwotCQlzdGF0LT5ibGtzaXplID0gQ0lGU19NQVhfTVNHU0laRTsKLQkJc3RhdC0+aW5vID0gQ0lGU19JKGRlbnRyeS0+ZF9pbm9kZSktPnVuaXF1ZWlkOwotCi0JCS8qCi0JCSAqIElmIG9uIGEgbXVsdGl1c2VyIG1vdW50IHdpdGhvdXQgdW5peCBleHRlbnNpb25zLCBhbmQgdGhlCi0JCSAqIGFkbWluIGhhc24ndCBvdmVycmlkZGVuIHRoZW0sIHNldCB0aGUgb3duZXJzaGlwIHRvIHRoZQotCQkgKiBmc3VpZC9mc2dpZCBvZiB0aGUgY3VycmVudCBwcm9jZXNzLgotCQkgKi8KLQkJaWYgKChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfTVVMVElVU0VSKSAmJgotCQkgICAgIXRjb24tPnVuaXhfZXh0KSB7Ci0JCQlpZiAoIShjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfT1ZFUlJfVUlEKSkKLQkJCQlzdGF0LT51aWQgPSBjdXJyZW50X2ZzdWlkKCk7Ci0JCQlpZiAoIShjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfT1ZFUlJfR0lEKSkKLQkJCQlzdGF0LT5naWQgPSBjdXJyZW50X2ZzZ2lkKCk7CisJLyoKKwkgKiBXZSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBhbGwgZGlydHkgcGFnZXMgYXJlIHdyaXR0ZW4gYW5kIHRoZSBzZXJ2ZXIKKwkgKiBoYXMgYWN0dWFsIGN0aW1lLCBtdGltZSBhbmQgZmlsZSBsZW5ndGguCisJICovCisJaWYgKCFDSUZTX0koaW5vZGUpLT5jbGllbnRDYW5DYWNoZVJlYWQgJiYgaW5vZGUtPmlfbWFwcGluZyAmJgorCSAgICBpbm9kZS0+aV9tYXBwaW5nLT5ucnBhZ2VzICE9IDApIHsKKwkJcmMgPSBmaWxlbWFwX2ZkYXRhd2FpdChpbm9kZS0+aV9tYXBwaW5nKTsKKwkJaWYgKHJjKSB7CisJCQltYXBwaW5nX3NldF9lcnJvcihpbm9kZS0+aV9tYXBwaW5nLCByYyk7CisJCQlyZXR1cm4gcmM7CiAJCX0KIAl9Ci0JcmV0dXJuIGVycjsKKworCXJjID0gY2lmc19yZXZhbGlkYXRlX2RlbnRyeV9hdHRyKGRlbnRyeSk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlnZW5lcmljX2ZpbGxhdHRyKGlub2RlLCBzdGF0KTsKKwlzdGF0LT5ibGtzaXplID0gQ0lGU19NQVhfTVNHU0laRTsKKwlzdGF0LT5pbm8gPSBDSUZTX0koaW5vZGUpLT51bmlxdWVpZDsKKworCS8qCisJICogSWYgb24gYSBtdWx0aXVzZXIgbW91bnQgd2l0aG91dCB1bml4IGV4dGVuc2lvbnMsIGFuZCB0aGUgYWRtaW4gaGFzbid0CisJICogb3ZlcnJpZGRlbiB0aGVtLCBzZXQgdGhlIG93bmVyc2hpcCB0byB0aGUgZnN1aWQvZnNnaWQgb2YgdGhlIGN1cnJlbnQKKwkgKiBwcm9jZXNzLgorCSAqLworCWlmICgoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX01VTFRJVVNFUikgJiYKKwkgICAgIXRjb24tPnVuaXhfZXh0KSB7CisJCWlmICghKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9PVkVSUl9VSUQpKQorCQkJc3RhdC0+dWlkID0gY3VycmVudF9mc3VpZCgpOworCQlpZiAoIShjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfT1ZFUlJfR0lEKSkKKwkJCXN0YXQtPmdpZCA9IGN1cnJlbnRfZnNnaWQoKTsKKwl9CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IGNpZnNfdHJ1bmNhdGVfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IGZyb20pCmRpZmYgLS1naXQgYS9mcy9jaWZzL21pc2MuYyBiL2ZzL2NpZnMvbWlzYy5jCmluZGV4IDBjNjg0YWUuLjkwNzUzMWEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvbWlzYy5jCisrKyBiL2ZzL2NpZnMvbWlzYy5jCkBAIC0zMDQsMTIgKzMwNCwxMCBAQAogCiAJbWVtc2V0KHRlbXAsIDAsIDI1Nik7IC8qIGJpZ2dlciB0aGFuIE1BWF9DSUZTX0hEUl9TSVpFICovCiAKLQlidWZmZXItPnNtYl9idWZfbGVuZ3RoID0KKwlidWZmZXItPnNtYl9idWZfbGVuZ3RoID0gY3B1X3RvX2JlMzIoCiAJICAgICgyICogd29yZF9jb3VudCkgKyBzaXplb2Yoc3RydWN0IHNtYl9oZHIpIC0KIAkgICAgNCAvKiAgUkZDIDEwMDEgbGVuZ3RoIGZpZWxkIGRvZXMgbm90IGNvdW50ICovICArCi0JICAgIDIgLyogZm9yIGJjYyBmaWVsZCBpdHNlbGYgKi8gOwotCS8qIE5vdGUgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IG5ldHdvcmsgZmllbGQgdGhhdCBoYXMgdG8gYmUgY29udmVydGVkCi0JICAgdG8gYmlnIGVuZGlhbiBhbmQgaXQgaXMgZG9uZSBqdXN0IGJlZm9yZSB3ZSBzZW5kIGl0ICovCisJICAgIDIgLyogZm9yIGJjYyBmaWVsZCBpdHNlbGYgKi8pIDsKIAogCWJ1ZmZlci0+UHJvdG9jb2xbMF0gPSAweEZGOwogCWJ1ZmZlci0+UHJvdG9jb2xbMV0gPSAnUyc7CkBAIC00MjQsNyArNDIyLDcgQEAKIGludAogY2hlY2tTTUIoc3RydWN0IHNtYl9oZHIgKnNtYiwgX191MTYgbWlkLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQogewotCV9fdTMyIGxlbiA9IHNtYi0+c21iX2J1Zl9sZW5ndGg7CisJX191MzIgbGVuID0gYmUzMl90b19jcHUoc21iLT5zbWJfYnVmX2xlbmd0aCk7CiAJX191MzIgY2xjX2xlbjsgIC8qIGNhbGN1bGF0ZWQgbGVuZ3RoICovCiAJY0ZZSSgwLCAiY2hlY2tTTUIgTGVuZ3RoOiAweCV4LCBzbWJfYnVmX2xlbmd0aDogMHgleCIsIGxlbmd0aCwgbGVuKTsKIApAQCAtNDY0LDcgKzQ2Miw3IEBACiAKIAlpZiAoY2hlY2tfc21iX2hkcihzbWIsIG1pZCkpCiAJCXJldHVybiAxOwotCWNsY19sZW4gPSBzbWJDYWxjU2l6ZV9MRShzbWIpOworCWNsY19sZW4gPSBzbWJDYWxjU2l6ZShzbWIpOwogCiAJaWYgKDQgKyBsZW4gIT0gbGVuZ3RoKSB7CiAJCWNFUlJPUigxLCAiTGVuZ3RoIHJlYWQgZG9lcyBub3QgbWF0Y2ggUkZDMTAwMSBsZW5ndGggJWQiLApAQCAtNTIxLDcgKzUxOSw3IEBACiAJCQkoc3RydWN0IHNtYl9jb21fdHJhbnNhY3Rpb25fY2hhbmdlX25vdGlmeV9yc3AgKilidWY7CiAJCXN0cnVjdCBmaWxlX25vdGlmeV9pbmZvcm1hdGlvbiAqcG5vdGlmeTsKIAkJX191MzIgZGF0YV9vZmZzZXQgPSAwOwotCQlpZiAoZ2V0X2JjY19sZShidWYpID4gc2l6ZW9mKHN0cnVjdCBmaWxlX25vdGlmeV9pbmZvcm1hdGlvbikpIHsKKwkJaWYgKGdldF9iY2MoYnVmKSA+IHNpemVvZihzdHJ1Y3QgZmlsZV9ub3RpZnlfaW5mb3JtYXRpb24pKSB7CiAJCQlkYXRhX29mZnNldCA9IGxlMzJfdG9fY3B1KHBTTUJyLT5EYXRhT2Zmc2V0KTsKIAogCQkJcG5vdGlmeSA9IChzdHJ1Y3QgZmlsZV9ub3RpZnlfaW5mb3JtYXRpb24gKikKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvbmV0bWlzYy5jIGIvZnMvY2lmcy9uZXRtaXNjLmMKaW5kZXggNzlmNjQxZS4uNzliNzFjMiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9uZXRtaXNjLmMKKysrIGIvZnMvY2lmcy9uZXRtaXNjLmMKQEAgLTkxOSwxMyArOTE5LDYgQEAKIAkJMiAvKiBzaXplIG9mIHRoZSBiY2MgZmllbGQgKi8gKyBnZXRfYmNjKHB0cikpOwogfQogCi11bnNpZ25lZCBpbnQKLXNtYkNhbGNTaXplX0xFKHN0cnVjdCBzbWJfaGRyICpwdHIpCi17Ci0JcmV0dXJuIChzaXplb2Yoc3RydWN0IHNtYl9oZHIpICsgKDIgKiBwdHItPldvcmRDb3VudCkgKwotCQkyIC8qIHNpemUgb2YgdGhlIGJjYyBmaWVsZCAqLyArIGdldF9iY2NfbGUocHRyKSk7Ci19Ci0KIC8qIFRoZSBmb2xsb3dpbmcgYXJlIHRha2VuIGZyb20gZnMvbnRmcy91dGlsLmMgKi8KIAogI2RlZmluZSBOVEZTX1RJTUVfT0ZGU0VUICgodTY0KSgzNjkqMzY1ICsgODkpICogMjQgKiAzNjAwICogMTAwMDAwMDApCmRpZmYgLS1naXQgYS9mcy9jaWZzL3Nlc3MuYyBiL2ZzL2NpZnMvc2Vzcy5jCmluZGV4IGY2NzI4ZWIuLjdkZDQ2MjEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvc2Vzcy5jCisrKyBiL2ZzL2NpZnMvc2Vzcy5jCkBAIC0yNzYsNyArMjc2LDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLWRlY29kZV91bmljb2RlX3NzZXR1cChjaGFyICoqcGJjY19hcmVhLCBfX3UxNiBibGVmdCwgc3RydWN0IGNpZnNTZXNJbmZvICpzZXMsCitkZWNvZGVfdW5pY29kZV9zc2V0dXAoY2hhciAqKnBiY2NfYXJlYSwgaW50IGJsZWZ0LCBzdHJ1Y3QgY2lmc1Nlc0luZm8gKnNlcywKIAkJICAgICAgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NwKQogewogCWludCBsZW47CkBAIC0yODQsMTkgKzI4NCw2IEBACiAKIAljRllJKDEsICJibGVmdCAlZCIsIGJsZWZ0KTsKIAotCS8qCi0JICogV2luZG93cyBzZXJ2ZXJzIGRvIG5vdCBhbHdheXMgZG91YmxlIG51bGwgdGVybWluYXRlIHRoZWlyIGZpbmFsCi0JICogVW5pY29kZSBzdHJpbmcuIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW4gdW5ldmVuIG51bWJlciBvZiBieXRlcwotCSAqIGxlZnQuIElmIHNvLCB0aGVuIGFkZCBhbiBleHRyYSBOVUxMIHBhZCBieXRlIHRvIHRoZSBlbmQgb2YgdGhlCi0JICogcmVzcG9uc2UuCi0JICoKLQkgKiBTZWUgc2VjdGlvbiAyLjcuMiBpbiAiSW1wbGVtZW50aW5nIENJRlMiIGZvciBkZXRhaWxzCi0JICovCi0JaWYgKGJsZWZ0ICUgMikgewotCQlkYXRhW2JsZWZ0XSA9IDA7Ci0JCSsrYmxlZnQ7Ci0JfQotCiAJa2ZyZWUoc2VzLT5zZXJ2ZXJPUyk7CiAJc2VzLT5zZXJ2ZXJPUyA9IGNpZnNfc3RybmR1cF9mcm9tX3VjcyhkYXRhLCBibGVmdCwgdHJ1ZSwgbmxzX2NwKTsKIAljRllJKDEsICJzZXJ2ZXJPUz0lcyIsIHNlcy0+c2VydmVyT1MpOwpAQCAtNjM0LDcgKzYyMSw3IEBACiAJYW5kIHJlc3Qgb2YgYmNjIGFyZWEuIFRoaXMgYWxsb3dzIHVzIHRvIGF2b2lkCiAJYSBsYXJnZSBidWZmZXIgMTdLIGFsbG9jYXRpb24gKi8KIAlpb3ZbMF0uaW92X2Jhc2UgPSAoY2hhciAqKXBTTUI7Ci0JaW92WzBdLmlvdl9sZW4gPSBzbWJfYnVmLT5zbWJfYnVmX2xlbmd0aCArIDQ7CisJaW92WzBdLmlvdl9sZW4gPSBiZTMyX3RvX2NwdShzbWJfYnVmLT5zbWJfYnVmX2xlbmd0aCkgKyA0OwogCiAJLyogc2V0dGluZyB0aGlzIGhlcmUgYWxsb3dzIHRoZSBjb2RlIGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uCiAJICAgdG8gZnJlZSB0aGUgcmVxdWVzdCBidWZmZXIgaWYgdGhlcmUncyBhbiBlcnJvciAqLwpAQCAtNjY5LDcgKzY1Niw3IEBACiAJCSAqIHRvIHVzZSBjaGFsbGVuZ2UvcmVzcG9uc2UgbWV0aG9kIChpLmUuIFBhc3N3b3JkIGJpdCBpcyAxKS4KIAkJICovCiAKLQkJY2FsY19sYW5tYW5faGFzaChzZXMtPnBhc3N3b3JkLCBzZXMtPnNlcnZlci0+Y3J5cHRrZXksCisJCXJjID0gY2FsY19sYW5tYW5faGFzaChzZXMtPnBhc3N3b3JkLCBzZXMtPnNlcnZlci0+Y3J5cHRrZXksCiAJCQkJIHNlcy0+c2VydmVyLT5zZWNNb2RlICYgU0VDTU9ERV9QV19FTkNSWVBUID8KIAkJCQkJdHJ1ZSA6IGZhbHNlLCBsbm1fc2Vzc2lvbl9rZXkpOwogCkBAIC04NzIsOSArODU5LDEwIEBACiAJaW92WzJdLmlvdl9sZW4gPSAobG9uZykgYmNjX3B0ciAtIChsb25nKSBzdHJfYXJlYTsKIAogCWNvdW50ID0gaW92WzFdLmlvdl9sZW4gKyBpb3ZbMl0uaW92X2xlbjsKLQlzbWJfYnVmLT5zbWJfYnVmX2xlbmd0aCArPSBjb3VudDsKKwlzbWJfYnVmLT5zbWJfYnVmX2xlbmd0aCA9CisJCWNwdV90b19iZTMyKGJlMzJfdG9fY3B1KHNtYl9idWYtPnNtYl9idWZfbGVuZ3RoKSArIGNvdW50KTsKIAotCXB1dF9iY2NfbGUoY291bnQsIHNtYl9idWYpOworCXB1dF9iY2MoY291bnQsIHNtYl9idWYpOwogCiAJcmMgPSBTZW5kUmVjZWl2ZTIoeGlkLCBzZXMsIGlvdiwgMyAvKiBudW1faW92ZWNzICovLCAmcmVzcF9idWZfdHlwZSwKIAkJCSAgQ0lGU19MT0dfRVJST1IpOwpAQCAtOTI5LDcgKzkxNyw5IEBACiAJfQogCiAJLyogQkIgY2hlY2sgaWYgVW5pY29kZSBhbmQgZGVjb2RlIHN0cmluZ3MgKi8KLQlpZiAoc21iX2J1Zi0+RmxhZ3MyICYgU01CRkxHMl9VTklDT0RFKSB7CisJaWYgKGJ5dGVzX3JlbWFpbmluZyA9PSAwKSB7CisJCS8qIG5vIHN0cmluZyBhcmVhIHRvIGRlY29kZSwgZG8gbm90aGluZyAqLworCX0gZWxzZSBpZiAoc21iX2J1Zi0+RmxhZ3MyICYgU01CRkxHMl9VTklDT0RFKSB7CiAJCS8qIHVuaWNvZGUgc3RyaW5nIGFyZWEgbXVzdCBiZSB3b3JkLWFsaWduZWQgKi8KIAkJaWYgKCgodW5zaWduZWQgbG9uZykgYmNjX3B0ciAtICh1bnNpZ25lZCBsb25nKSBzbWJfYnVmKSAlIDIpIHsKIAkJCSsrYmNjX3B0cjsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvc21iZGVzLmMgYi9mcy9jaWZzL3NtYmRlcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDcyMTQ4Li4wMDAwMDAwCi0tLSBhL2ZzL2NpZnMvc21iZGVzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MTggKzAsMCBAQAotLyoKLSAgIFVuaXggU01CL05ldGJpb3MgaW1wbGVtZW50YXRpb24uCi0gICBWZXJzaW9uIDEuOS4KLQotICAgYSBwYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIERFUyBkZXNpZ25lZCBmb3IgdXNlIGluIHRoZQotICAgU01CIGF1dGhlbnRpY2F0aW9uIHByb3RvY29sCi0KLSAgIENvcHlyaWdodCAoQykgQW5kcmV3IFRyaWRnZWxsIDE5OTgKLSAgIE1vZGlmaWVkIGJ5IFN0ZXZlIEZyZW5jaCAoc2ZyZW5jaEB1cy5pYm0uY29tKSAyMDAyLDIwMDQKLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSovCi0KLS8qIE5PVEVTOgotCi0gICBUaGlzIGNvZGUgbWFrZXMgbm8gYXR0ZW1wdCB0byBiZSBmYXN0ISBJbiBmYWN0LCBpdCBpcyBhIHZlcnkKLSAgIHNsb3cgaW1wbGVtZW50YXRpb24KLQotICAgVGhpcyBjb2RlIGlzIE5PVCBhIGNvbXBsZXRlIERFUyBpbXBsZW1lbnRhdGlvbi4gSXQgaW1wbGVtZW50cyBvbmx5Ci0gICB0aGUgbWluaW11bSBuZWNlc3NhcnkgZm9yIFNNQiBhdXRoZW50aWNhdGlvbiwgYXMgdXNlZCBieSBhbGwgU01CCi0gICBwcm9kdWN0cyAoaW5jbHVkaW5nIGV2ZXJ5IGNvcHkgb2YgTWljcm9zb2Z0IFdpbmRvd3M5NSBldmVyIHNvbGQpCi0KLSAgIEluIHBhcnRpY3VsYXIsIGl0IGNhbiBvbmx5IGRvIGEgdW5jaGFpbmVkIGZvcndhcmQgREVTIHBhc3MuIFRoaXMKLSAgIG1lYW5zIGl0IGlzIG5vdCBwb3NzaWJsZSB0byB1c2UgdGhpcyBjb2RlIGZvciBlbmNyeXB0aW9uL2RlY3J5cHRpb24KLSAgIG9mIGRhdGEsIGluc3RlYWQgaXQgaXMgb25seSB1c2VmdWwgYXMgYSAiaGFzaCIgYWxnb3JpdGhtLgotCi0gICBUaGVyZSBpcyBubyBlbnRyeSBwb2ludCBpbnRvIHRoaXMgY29kZSB0aGF0IGFsbG93cyBub3JtYWwgREVTIG9wZXJhdGlvbi4KLQotICAgSSBiZWxpZXZlIHRoaXMgbWVhbnMgdGhhdCB0aGlzIGNvZGUgZG9lcyBub3QgY29tZSB1bmRlciBJVEFSCi0gICByZWd1bGF0aW9ucyBidXQgdGhpcyBpcyBOT1QgYSBsZWdhbCBvcGluaW9uLiBJZiB5b3UgYXJlIGNvbmNlcm5lZAotICAgYWJvdXQgdGhlIGFwcGxpY2FiaWxpdHkgb2YgSVRBUiByZWd1bGF0aW9ucyB0byB0aGlzIGNvZGUgdGhlbiB5b3UKLSAgIHNob3VsZCBjb25maXJtIGl0IGZvciB5b3Vyc2VsZiAoYW5kIG1heWJlIGxldCBtZSBrbm93IGlmIHlvdSBjb21lCi0gICB1cCB3aXRoIGEgZGlmZmVyZW50IGFuc3dlciB0byB0aGUgb25lIGFib3ZlKQotKi8KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jZGVmaW5lIHVjaGFyIHVuc2lnbmVkIGNoYXIKLQotc3RhdGljIHVjaGFyIHBlcm0xWzU2XSA9IHsgNTcsIDQ5LCA0MSwgMzMsIDI1LCAxNywgOSwKLQkxLCA1OCwgNTAsIDQyLCAzNCwgMjYsIDE4LAotCTEwLCAyLCA1OSwgNTEsIDQzLCAzNSwgMjcsCi0JMTksIDExLCAzLCA2MCwgNTIsIDQ0LCAzNiwKLQk2MywgNTUsIDQ3LCAzOSwgMzEsIDIzLCAxNSwKLQk3LCA2MiwgNTQsIDQ2LCAzOCwgMzAsIDIyLAotCTE0LCA2LCA2MSwgNTMsIDQ1LCAzNywgMjksCi0JMjEsIDEzLCA1LCAyOCwgMjAsIDEyLCA0Ci19OwotCi1zdGF0aWMgdWNoYXIgcGVybTJbNDhdID0geyAxNCwgMTcsIDExLCAyNCwgMSwgNSwKLQkzLCAyOCwgMTUsIDYsIDIxLCAxMCwKLQkyMywgMTksIDEyLCA0LCAyNiwgOCwKLQkxNiwgNywgMjcsIDIwLCAxMywgMiwKLQk0MSwgNTIsIDMxLCAzNywgNDcsIDU1LAotCTMwLCA0MCwgNTEsIDQ1LCAzMywgNDgsCi0JNDQsIDQ5LCAzOSwgNTYsIDM0LCA1MywKLQk0NiwgNDIsIDUwLCAzNiwgMjksIDMyCi19OwotCi1zdGF0aWMgdWNoYXIgcGVybTNbNjRdID0geyA1OCwgNTAsIDQyLCAzNCwgMjYsIDE4LCAxMCwgMiwKLQk2MCwgNTIsIDQ0LCAzNiwgMjgsIDIwLCAxMiwgNCwKLQk2MiwgNTQsIDQ2LCAzOCwgMzAsIDIyLCAxNCwgNiwKLQk2NCwgNTYsIDQ4LCA0MCwgMzIsIDI0LCAxNiwgOCwKLQk1NywgNDksIDQxLCAzMywgMjUsIDE3LCA5LCAxLAotCTU5LCA1MSwgNDMsIDM1LCAyNywgMTksIDExLCAzLAotCTYxLCA1MywgNDUsIDM3LCAyOSwgMjEsIDEzLCA1LAotCTYzLCA1NSwgNDcsIDM5LCAzMSwgMjMsIDE1LCA3Ci19OwotCi1zdGF0aWMgdWNoYXIgcGVybTRbNDhdID0geyAzMiwgMSwgMiwgMywgNCwgNSwKLQk0LCA1LCA2LCA3LCA4LCA5LAotCTgsIDksIDEwLCAxMSwgMTIsIDEzLAotCTEyLCAxMywgMTQsIDE1LCAxNiwgMTcsCi0JMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwKLQkyMCwgMjEsIDIyLCAyMywgMjQsIDI1LAotCTI0LCAyNSwgMjYsIDI3LCAyOCwgMjksCi0JMjgsIDI5LCAzMCwgMzEsIDMyLCAxCi19OwotCi1zdGF0aWMgdWNoYXIgcGVybTVbMzJdID0geyAxNiwgNywgMjAsIDIxLAotCTI5LCAxMiwgMjgsIDE3LAotCTEsIDE1LCAyMywgMjYsCi0JNSwgMTgsIDMxLCAxMCwKLQkyLCA4LCAyNCwgMTQsCi0JMzIsIDI3LCAzLCA5LAotCTE5LCAxMywgMzAsIDYsCi0JMjIsIDExLCA0LCAyNQotfTsKLQotc3RhdGljIHVjaGFyIHBlcm02WzY0XSA9IHsgNDAsIDgsIDQ4LCAxNiwgNTYsIDI0LCA2NCwgMzIsCi0JMzksIDcsIDQ3LCAxNSwgNTUsIDIzLCA2MywgMzEsCi0JMzgsIDYsIDQ2LCAxNCwgNTQsIDIyLCA2MiwgMzAsCi0JMzcsIDUsIDQ1LCAxMywgNTMsIDIxLCA2MSwgMjksCi0JMzYsIDQsIDQ0LCAxMiwgNTIsIDIwLCA2MCwgMjgsCi0JMzUsIDMsIDQzLCAxMSwgNTEsIDE5LCA1OSwgMjcsCi0JMzQsIDIsIDQyLCAxMCwgNTAsIDE4LCA1OCwgMjYsCi0JMzMsIDEsIDQxLCA5LCA0OSwgMTcsIDU3LCAyNQotfTsKLQotc3RhdGljIHVjaGFyIHNjWzE2XSA9IHsgMSwgMSwgMiwgMiwgMiwgMiwgMiwgMiwgMSwgMiwgMiwgMiwgMiwgMiwgMiwgMSB9OwotCi1zdGF0aWMgdWNoYXIgc2JveFs4XVs0XVsxNl0gPSB7Ci0Je3sxNCwgNCwgMTMsIDEsIDIsIDE1LCAxMSwgOCwgMywgMTAsIDYsIDEyLCA1LCA5LCAwLCA3fSwKLQkgezAsIDE1LCA3LCA0LCAxNCwgMiwgMTMsIDEsIDEwLCA2LCAxMiwgMTEsIDksIDUsIDMsIDh9LAotCSB7NCwgMSwgMTQsIDgsIDEzLCA2LCAyLCAxMSwgMTUsIDEyLCA5LCA3LCAzLCAxMCwgNSwgMH0sCi0JIHsxNSwgMTIsIDgsIDIsIDQsIDksIDEsIDcsIDUsIDExLCAzLCAxNCwgMTAsIDAsIDYsIDEzfSB9LAotCi0Je3sxNSwgMSwgOCwgMTQsIDYsIDExLCAzLCA0LCA5LCA3LCAyLCAxMywgMTIsIDAsIDUsIDEwfSwKLQkgezMsIDEzLCA0LCA3LCAxNSwgMiwgOCwgMTQsIDEyLCAwLCAxLCAxMCwgNiwgOSwgMTEsIDV9LAotCSB7MCwgMTQsIDcsIDExLCAxMCwgNCwgMTMsIDEsIDUsIDgsIDEyLCA2LCA5LCAzLCAyLCAxNX0sCi0JIHsxMywgOCwgMTAsIDEsIDMsIDE1LCA0LCAyLCAxMSwgNiwgNywgMTIsIDAsIDUsIDE0LCA5fSB9LAotCi0Je3sxMCwgMCwgOSwgMTQsIDYsIDMsIDE1LCA1LCAxLCAxMywgMTIsIDcsIDExLCA0LCAyLCA4fSwKLQkgezEzLCA3LCAwLCA5LCAzLCA0LCA2LCAxMCwgMiwgOCwgNSwgMTQsIDEyLCAxMSwgMTUsIDF9LAotCSB7MTMsIDYsIDQsIDksIDgsIDE1LCAzLCAwLCAxMSwgMSwgMiwgMTIsIDUsIDEwLCAxNCwgN30sCi0JIHsxLCAxMCwgMTMsIDAsIDYsIDksIDgsIDcsIDQsIDE1LCAxNCwgMywgMTEsIDUsIDIsIDEyfSB9LAotCi0Je3s3LCAxMywgMTQsIDMsIDAsIDYsIDksIDEwLCAxLCAyLCA4LCA1LCAxMSwgMTIsIDQsIDE1fSwKLQkgezEzLCA4LCAxMSwgNSwgNiwgMTUsIDAsIDMsIDQsIDcsIDIsIDEyLCAxLCAxMCwgMTQsIDl9LAotCSB7MTAsIDYsIDksIDAsIDEyLCAxMSwgNywgMTMsIDE1LCAxLCAzLCAxNCwgNSwgMiwgOCwgNH0sCi0JIHszLCAxNSwgMCwgNiwgMTAsIDEsIDEzLCA4LCA5LCA0LCA1LCAxMSwgMTIsIDcsIDIsIDE0fSB9LAotCi0Je3syLCAxMiwgNCwgMSwgNywgMTAsIDExLCA2LCA4LCA1LCAzLCAxNSwgMTMsIDAsIDE0LCA5fSwKLQkgezE0LCAxMSwgMiwgMTIsIDQsIDcsIDEzLCAxLCA1LCAwLCAxNSwgMTAsIDMsIDksIDgsIDZ9LAotCSB7NCwgMiwgMSwgMTEsIDEwLCAxMywgNywgOCwgMTUsIDksIDEyLCA1LCA2LCAzLCAwLCAxNH0sCi0JIHsxMSwgOCwgMTIsIDcsIDEsIDE0LCAyLCAxMywgNiwgMTUsIDAsIDksIDEwLCA0LCA1LCAzfSB9LAotCi0Je3sxMiwgMSwgMTAsIDE1LCA5LCAyLCA2LCA4LCAwLCAxMywgMywgNCwgMTQsIDcsIDUsIDExfSwKLQkgezEwLCAxNSwgNCwgMiwgNywgMTIsIDksIDUsIDYsIDEsIDEzLCAxNCwgMCwgMTEsIDMsIDh9LAotCSB7OSwgMTQsIDE1LCA1LCAyLCA4LCAxMiwgMywgNywgMCwgNCwgMTAsIDEsIDEzLCAxMSwgNn0sCi0JIHs0LCAzLCAyLCAxMiwgOSwgNSwgMTUsIDEwLCAxMSwgMTQsIDEsIDcsIDYsIDAsIDgsIDEzfSB9LAotCi0Je3s0LCAxMSwgMiwgMTQsIDE1LCAwLCA4LCAxMywgMywgMTIsIDksIDcsIDUsIDEwLCA2LCAxfSwKLQkgezEzLCAwLCAxMSwgNywgNCwgOSwgMSwgMTAsIDE0LCAzLCA1LCAxMiwgMiwgMTUsIDgsIDZ9LAotCSB7MSwgNCwgMTEsIDEzLCAxMiwgMywgNywgMTQsIDEwLCAxNSwgNiwgOCwgMCwgNSwgOSwgMn0sCi0JIHs2LCAxMSwgMTMsIDgsIDEsIDQsIDEwLCA3LCA5LCA1LCAwLCAxNSwgMTQsIDIsIDMsIDEyfSB9LAotCi0Je3sxMywgMiwgOCwgNCwgNiwgMTUsIDExLCAxLCAxMCwgOSwgMywgMTQsIDUsIDAsIDEyLCA3fSwKLQkgezEsIDE1LCAxMywgOCwgMTAsIDMsIDcsIDQsIDEyLCA1LCA2LCAxMSwgMCwgMTQsIDksIDJ9LAotCSB7NywgMTEsIDQsIDEsIDksIDEyLCAxNCwgMiwgMCwgNiwgMTAsIDEzLCAxNSwgMywgNSwgOH0sCi0JIHsyLCAxLCAxNCwgNywgNCwgMTAsIDgsIDEzLCAxNSwgMTIsIDksIDAsIDMsIDUsIDYsIDExfSB9Ci19OwotCi1zdGF0aWMgdm9pZAotcGVybXV0ZShjaGFyICpvdXQsIGNoYXIgKmluLCB1Y2hhciAqcCwgaW50IG4pCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IG47IGkrKykKLQkJb3V0W2ldID0gaW5bcFtpXSAtIDFdOwotfQotCi1zdGF0aWMgdm9pZAotbHNoaWZ0KGNoYXIgKmQsIGludCBjb3VudCwgaW50IG4pCi17Ci0JY2hhciBvdXRbNjRdOwotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCi0JCW91dFtpXSA9IGRbKGkgKyBjb3VudCkgJSBuXTsKLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQotCQlkW2ldID0gb3V0W2ldOwotfQotCi1zdGF0aWMgdm9pZAotY29uY2F0KGNoYXIgKm91dCwgY2hhciAqaW4xLCBjaGFyICppbjIsIGludCBsMSwgaW50IGwyKQotewotCXdoaWxlIChsMS0tKQotCQkqb3V0KysgPSAqaW4xKys7Ci0Jd2hpbGUgKGwyLS0pCi0JCSpvdXQrKyA9ICppbjIrKzsKLX0KLQotc3RhdGljIHZvaWQKLXhvcihjaGFyICpvdXQsIGNoYXIgKmluMSwgY2hhciAqaW4yLCBpbnQgbikKLXsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQotCQlvdXRbaV0gPSBpbjFbaV0gXiBpbjJbaV07Ci19Ci0KLXN0YXRpYyB2b2lkCi1kb2hhc2goY2hhciAqb3V0LCBjaGFyICppbiwgY2hhciAqa2V5LCBpbnQgZm9ydykKLXsKLQlpbnQgaSwgaiwgazsKLQljaGFyICpwazE7Ci0JY2hhciBjWzI4XTsKLQljaGFyIGRbMjhdOwotCWNoYXIgKmNkOwotCWNoYXIgKCpraSlbNDhdOwotCWNoYXIgKnBkMTsKLQljaGFyIGxbMzJdLCByWzMyXTsKLQljaGFyICpybDsKLQotCS8qIEhhdmUgdG8gcmVkdWNlIHN0YWNrIHVzYWdlICovCi0JcGsxID0ga21hbGxvYyg1Nis1Nis2NCs2NCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHBrMSA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlraSA9IGttYWxsb2MoMTYqNDgsIEdGUF9LRVJORUwpOwotCWlmIChraSA9PSBOVUxMKSB7Ci0JCWtmcmVlKHBrMSk7Ci0JCXJldHVybjsKLQl9Ci0KLQljZCA9IHBrMSArIDU2OwotCXBkMSA9IGNkICArIDU2OwotCXJsID0gcGQxICsgNjQ7Ci0KLQlwZXJtdXRlKHBrMSwga2V5LCBwZXJtMSwgNTYpOwotCi0JZm9yIChpID0gMDsgaSA8IDI4OyBpKyspCi0JCWNbaV0gPSBwazFbaV07Ci0JZm9yIChpID0gMDsgaSA8IDI4OyBpKyspCi0JCWRbaV0gPSBwazFbaSArIDI4XTsKLQotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCWxzaGlmdChjLCBzY1tpXSwgMjgpOwotCQlsc2hpZnQoZCwgc2NbaV0sIDI4KTsKLQotCQljb25jYXQoY2QsIGMsIGQsIDI4LCAyOCk7Ci0JCXBlcm11dGUoa2lbaV0sIGNkLCBwZXJtMiwgNDgpOwotCX0KLQotCXBlcm11dGUocGQxLCBpbiwgcGVybTMsIDY0KTsKLQotCWZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB7Ci0JCWxbal0gPSBwZDFbal07Ci0JCXJbal0gPSBwZDFbaiArIDMyXTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQljaGFyICplcjsgIC8qIGVyWzQ4XSAgKi8KLQkJY2hhciAqZXJrOyAvKiBlcmtbNDhdICovCi0JCWNoYXIgYls4XVs2XTsKLQkJY2hhciAqY2I7ICAvKiBjYlszMl0gICovCi0JCWNoYXIgKnBjYjsgLyogcGNiWzMyXSAqLwotCQljaGFyICpyMjsgIC8qIHIyWzMyXSAgKi8KLQotCQllciA9IGttYWxsb2MoNDgrNDgrMzIrMzIrMzIsIEdGUF9LRVJORUwpOwotCQlpZiAoZXIgPT0gTlVMTCkgewotCQkJa2ZyZWUocGsxKTsKLQkJCWtmcmVlKGtpKTsKLQkJCXJldHVybjsKLQkJfQotCQllcmsgPSBlcis0ODsKLQkJY2IgID0gZXJrKzQ4OwotCQlwY2IgPSBjYiszMjsKLQkJcjIgID0gcGNiKzMyOwotCi0JCXBlcm11dGUoZXIsIHIsIHBlcm00LCA0OCk7Ci0KLQkJeG9yKGVyaywgZXIsIGtpW2ZvcncgPyBpIDogMTUgLSBpXSwgNDgpOwotCi0JCWZvciAoaiA9IDA7IGogPCA4OyBqKyspCi0JCQlmb3IgKGsgPSAwOyBrIDwgNjsgaysrKQotCQkJCWJbal1ba10gPSBlcmtbaiAqIDYgKyBrXTsKLQotCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7Ci0JCQlpbnQgbSwgbjsKLQkJCW0gPSAoYltqXVswXSA8PCAxKSB8IGJbal1bNV07Ci0KLQkJCW4gPSAoYltqXVsxXSA8PCAzKSB8IChiW2pdWzJdIDw8IDIpIHwgKGJbal1bM10gPDwKLQkJCQkJCQkgICAgICAgMSkgfCBiW2pdWzRdOwotCi0JCQlmb3IgKGsgPSAwOyBrIDwgNDsgaysrKQotCQkJCWJbal1ba10gPQotCQkJCSAgICAoc2JveFtqXVttXVtuXSAmICgxIDw8ICgzIC0gaykpKSA/IDEgOiAwOwotCQl9Ci0KLQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykKLQkJCWZvciAoayA9IDA7IGsgPCA0OyBrKyspCi0JCQkJY2JbaiAqIDQgKyBrXSA9IGJbal1ba107Ci0JCXBlcm11dGUocGNiLCBjYiwgcGVybTUsIDMyKTsKLQotCQl4b3IocjIsIGwsIHBjYiwgMzIpOwotCi0JCWZvciAoaiA9IDA7IGogPCAzMjsgaisrKQotCQkJbFtqXSA9IHJbal07Ci0KLQkJZm9yIChqID0gMDsgaiA8IDMyOyBqKyspCi0JCQlyW2pdID0gcjJbal07Ci0KLQkJa2ZyZWUoZXIpOwotCX0KLQotCWNvbmNhdChybCwgciwgbCwgMzIsIDMyKTsKLQotCXBlcm11dGUob3V0LCBybCwgcGVybTYsIDY0KTsKLQlrZnJlZShwazEpOwotCWtmcmVlKGtpKTsKLX0KLQotc3RhdGljIHZvaWQKLXN0cl90b19rZXkodW5zaWduZWQgY2hhciAqc3RyLCB1bnNpZ25lZCBjaGFyICprZXkpCi17Ci0JaW50IGk7Ci0KLQlrZXlbMF0gPSBzdHJbMF0gPj4gMTsKLQlrZXlbMV0gPSAoKHN0clswXSAmIDB4MDEpIDw8IDYpIHwgKHN0clsxXSA+PiAyKTsKLQlrZXlbMl0gPSAoKHN0clsxXSAmIDB4MDMpIDw8IDUpIHwgKHN0clsyXSA+PiAzKTsKLQlrZXlbM10gPSAoKHN0clsyXSAmIDB4MDcpIDw8IDQpIHwgKHN0clszXSA+PiA0KTsKLQlrZXlbNF0gPSAoKHN0clszXSAmIDB4MEYpIDw8IDMpIHwgKHN0cls0XSA+PiA1KTsKLQlrZXlbNV0gPSAoKHN0cls0XSAmIDB4MUYpIDw8IDIpIHwgKHN0cls1XSA+PiA2KTsKLQlrZXlbNl0gPSAoKHN0cls1XSAmIDB4M0YpIDw8IDEpIHwgKHN0cls2XSA+PiA3KTsKLQlrZXlbN10gPSBzdHJbNl0gJiAweDdGOwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCWtleVtpXSA9IChrZXlbaV0gPDwgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zbWJoYXNoKHVuc2lnbmVkIGNoYXIgKm91dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKmtleSwKLQlpbnQgZm9ydykKLXsKLQlpbnQgaTsKLQljaGFyICpvdXRiOyAvKiBvdXRiWzY0XSAqLwotCWNoYXIgKmluYjsgIC8qIGluYls2NF0gICovCi0JY2hhciAqa2V5YjsgLyoga2V5Yls2NF0gKi8KLQl1bnNpZ25lZCBjaGFyIGtleTJbOF07Ci0KLQlvdXRiID0ga21hbGxvYyg2NCAqIDMsIEdGUF9LRVJORUwpOwotCWlmIChvdXRiID09IE5VTEwpCi0JCXJldHVybjsKLQotCWluYiAgPSBvdXRiICsgNjQ7Ci0Ja2V5YiA9IGluYiArICA2NDsKLQotCXN0cl90b19rZXkoa2V5LCBrZXkyKTsKLQotCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7Ci0JCWluYltpXSA9IChpbltpIC8gOF0gJiAoMSA8PCAoNyAtIChpICUgOCkpKSkgPyAxIDogMDsKLQkJa2V5YltpXSA9IChrZXkyW2kgLyA4XSAmICgxIDw8ICg3IC0gKGkgJSA4KSkpKSA/IDEgOiAwOwotCQlvdXRiW2ldID0gMDsKLQl9Ci0KLQlkb2hhc2gob3V0YiwgaW5iLCBrZXliLCBmb3J3KTsKLQotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCW91dFtpXSA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgewotCQlpZiAob3V0YltpXSkKLQkJCW91dFtpIC8gOF0gfD0gKDEgPDwgKDcgLSAoaSAlIDgpKSk7Ci0JfQotCWtmcmVlKG91dGIpOwotfQotCi12b2lkCi1FX1AxNih1bnNpZ25lZCBjaGFyICpwMTQsIHVuc2lnbmVkIGNoYXIgKnAxNikKLXsKLQl1bnNpZ25lZCBjaGFyIHNwOFs4XSA9Ci0JICAgIHsgMHg0YiwgMHg0NywgMHg1MywgMHgyMSwgMHg0MCwgMHgyMywgMHgyNCwgMHgyNSB9OwotCXNtYmhhc2gocDE2LCBzcDgsIHAxNCwgMSk7Ci0Jc21iaGFzaChwMTYgKyA4LCBzcDgsIHAxNCArIDcsIDEpOwotfQotCi12b2lkCi1FX1AyNCh1bnNpZ25lZCBjaGFyICpwMjEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmM4LCB1bnNpZ25lZCBjaGFyICpwMjQpCi17Ci0Jc21iaGFzaChwMjQsIGM4LCBwMjEsIDEpOwotCXNtYmhhc2gocDI0ICsgOCwgYzgsIHAyMSArIDcsIDEpOwotCXNtYmhhc2gocDI0ICsgMTYsIGM4LCBwMjEgKyAxNCwgMSk7Ci19Ci0KLSNpZiAwIC8qIGN1cnJlbnRseSB1bnVzZWQgKi8KLXN0YXRpYyB2b2lkCi1EX1AxNih1bnNpZ25lZCBjaGFyICpwMTQsIHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQpCi17Ci0Jc21iaGFzaChvdXQsIGluLCBwMTQsIDApOwotCXNtYmhhc2gob3V0ICsgOCwgaW4gKyA4LCBwMTQgKyA3LCAwKTsKLX0KLQotc3RhdGljIHZvaWQKLUVfb2xkX3B3X2hhc2godW5zaWduZWQgY2hhciAqcDE0LCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0KQotewotCXNtYmhhc2gob3V0LCBpbiwgcDE0LCAxKTsKLQlzbWJoYXNoKG91dCArIDgsIGluICsgOCwgcDE0ICsgNywgMSk7Ci19Ci0vKiB0aGVzZSByb3V0aW5lcyBhcmUgY3VycmVudGx5IHVubmVlZGVkLCBidXQgbWF5IGJlCi0JbmVlZGVkIGxhdGVyICovCi12b2lkCi1jcmVkX2hhc2gxKHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKmtleSkKLXsKLQl1bnNpZ25lZCBjaGFyIGJ1Zls4XTsKLQotCXNtYmhhc2goYnVmLCBpbiwga2V5LCAxKTsKLQlzbWJoYXNoKG91dCwgYnVmLCBrZXkgKyA5LCAxKTsKLX0KLQotdm9pZAotY3JlZF9oYXNoMih1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICprZXkpCi17Ci0JdW5zaWduZWQgY2hhciBidWZbOF07Ci0Jc3RhdGljIHVuc2lnbmVkIGNoYXIga2V5Mls4XTsKLQotCXNtYmhhc2goYnVmLCBpbiwga2V5LCAxKTsKLQlrZXkyWzBdID0ga2V5WzddOwotCXNtYmhhc2gob3V0LCBidWYsIGtleTIsIDEpOwotfQotCi12b2lkCi1jcmVkX2hhc2gzKHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGZvcncpCi17Ci0Jc3RhdGljIHVuc2lnbmVkIGNoYXIga2V5Mls4XTsKLQotCXNtYmhhc2gob3V0LCBpbiwga2V5LCBmb3J3KTsKLQlrZXkyWzBdID0ga2V5WzddOwotCXNtYmhhc2gob3V0ICsgOCwgaW4gKyA4LCBrZXkyLCBmb3J3KTsKLX0KLSNlbmRpZiAvKiB1bm5lZWRlZCByb3V0aW5lcyAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9zbWJlbmNyeXB0LmMgYi9mcy9jaWZzL3NtYmVuY3J5cHQuYwppbmRleCBiNTA0MWM4Li4xNTI1ZDVlIDEwMDY0NAotLS0gYS9mcy9jaWZzL3NtYmVuY3J5cHQuYworKysgYi9mcy9jaWZzL3NtYmVuY3J5cHQuYwpAQCAtNDcsNiArNDcsODggQEAKICNkZWZpbmUgU1NWQUxYKGJ1Zixwb3MsdmFsKSAoQ1ZBTChidWYscG9zKT0odmFsKSYweEZGLENWQUwoYnVmLHBvcysxKT0odmFsKT4+OCkKICNkZWZpbmUgU1NWQUwoYnVmLHBvcyx2YWwpIFNTVkFMWCgoYnVmKSwocG9zKSwoKF9fdTE2KSh2YWwpKSkKIAorc3RhdGljIHZvaWQKK3N0cl90b19rZXkodW5zaWduZWQgY2hhciAqc3RyLCB1bnNpZ25lZCBjaGFyICprZXkpCit7CisJaW50IGk7CisKKwlrZXlbMF0gPSBzdHJbMF0gPj4gMTsKKwlrZXlbMV0gPSAoKHN0clswXSAmIDB4MDEpIDw8IDYpIHwgKHN0clsxXSA+PiAyKTsKKwlrZXlbMl0gPSAoKHN0clsxXSAmIDB4MDMpIDw8IDUpIHwgKHN0clsyXSA+PiAzKTsKKwlrZXlbM10gPSAoKHN0clsyXSAmIDB4MDcpIDw8IDQpIHwgKHN0clszXSA+PiA0KTsKKwlrZXlbNF0gPSAoKHN0clszXSAmIDB4MEYpIDw8IDMpIHwgKHN0cls0XSA+PiA1KTsKKwlrZXlbNV0gPSAoKHN0cls0XSAmIDB4MUYpIDw8IDIpIHwgKHN0cls1XSA+PiA2KTsKKwlrZXlbNl0gPSAoKHN0cls1XSAmIDB4M0YpIDw8IDEpIHwgKHN0cls2XSA+PiA3KTsKKwlrZXlbN10gPSBzdHJbNl0gJiAweDdGOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCWtleVtpXSA9IChrZXlbaV0gPDwgMSk7Cit9CisKK3N0YXRpYyBpbnQKK3NtYmhhc2godW5zaWduZWQgY2hhciAqb3V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqa2V5KQoreworCWludCByYzsKKwl1bnNpZ25lZCBjaGFyIGtleTJbOF07CisJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbV9kZXM7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnaW4sIHNnb3V0OworCXN0cnVjdCBibGtjaXBoZXJfZGVzYyBkZXNjOworCisJc3RyX3RvX2tleShrZXksIGtleTIpOworCisJdGZtX2RlcyA9IGNyeXB0b19hbGxvY19ibGtjaXBoZXIoImVjYihkZXMpIiwgMCwgQ1JZUFRPX0FMR19BU1lOQyk7CisJaWYgKElTX0VSUih0Zm1fZGVzKSkgeworCQlyYyA9IFBUUl9FUlIodGZtX2Rlcyk7CisJCWNFUlJPUigxLCAiY291bGQgbm90IGFsbG9jYXRlIGRlcyBjcnlwdG8gQVBJXG4iKTsKKwkJZ290byBzbWJoYXNoX2VycjsKKwl9CisKKwlkZXNjLnRmbSA9IHRmbV9kZXM7CisKKwljcnlwdG9fYmxrY2lwaGVyX3NldGtleSh0Zm1fZGVzLCBrZXkyLCA4KTsKKworCXNnX2luaXRfb25lKCZzZ2luLCBpbiwgOCk7CisJc2dfaW5pdF9vbmUoJnNnb3V0LCBvdXQsIDgpOworCisJcmMgPSBjcnlwdG9fYmxrY2lwaGVyX2VuY3J5cHQoJmRlc2MsICZzZ291dCwgJnNnaW4sIDgpOworCWlmIChyYykgeworCQljRVJST1IoMSwgImNvdWxkIG5vdCBlbmNyeXB0IGNyeXB0IGtleSByYzogJWRcbiIsIHJjKTsKKwkJY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKHRmbV9kZXMpOworCQlnb3RvIHNtYmhhc2hfZXJyOworCX0KKworc21iaGFzaF9lcnI6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CitFX1AxNih1bnNpZ25lZCBjaGFyICpwMTQsIHVuc2lnbmVkIGNoYXIgKnAxNikKK3sKKwlpbnQgcmM7CisJdW5zaWduZWQgY2hhciBzcDhbOF0gPQorCSAgICB7IDB4NGIsIDB4NDcsIDB4NTMsIDB4MjEsIDB4NDAsIDB4MjMsIDB4MjQsIDB4MjUgfTsKKworCXJjID0gc21iaGFzaChwMTYsIHNwOCwgcDE0KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwlyYyA9IHNtYmhhc2gocDE2ICsgOCwgc3A4LCBwMTQgKyA3KTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQKK0VfUDI0KHVuc2lnbmVkIGNoYXIgKnAyMSwgY29uc3QgdW5zaWduZWQgY2hhciAqYzgsIHVuc2lnbmVkIGNoYXIgKnAyNCkKK3sKKwlpbnQgcmM7CisKKwlyYyA9IHNtYmhhc2gocDI0LCBjOCwgcDIxKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwlyYyA9IHNtYmhhc2gocDI0ICsgOCwgYzgsIHAyMSArIDcpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCXJjID0gc21iaGFzaChwMjQgKyAxNiwgYzgsIHAyMSArIDE0KTsKKwlyZXR1cm4gcmM7Cit9CisKIC8qIHByb2R1Y2UgYSBtZDQgbWVzc2FnZSBkaWdlc3QgZnJvbSBkYXRhIG9mIGxlbmd0aCBuIGJ5dGVzICovCiBpbnQKIG1kZm91cih1bnNpZ25lZCBjaGFyICptZDRfaGFzaCwgdW5zaWduZWQgY2hhciAqbGlua19zdHIsIGludCBsaW5rX2xlbikKQEAgLTg3LDQwICsxNjksMzAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLS8qIERvZXMgdGhlIGRlcyBlbmNyeXB0aW9uIGZyb20gdGhlIE5UIG9yIExNIE1ENCBoYXNoLiAqLwotc3RhdGljIHZvaWQKLVNNQk9XRmVuY3J5cHQodW5zaWduZWQgY2hhciBwYXNzd2RbMTZdLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjOCwKLQkgICAgICB1bnNpZ25lZCBjaGFyIHAyNFsyNF0pCi17Ci0JdW5zaWduZWQgY2hhciBwMjFbMjFdOwotCi0JbWVtc2V0KHAyMSwgJ1wwJywgMjEpOwotCi0JbWVtY3B5KHAyMSwgcGFzc3dkLCAxNik7Ci0JRV9QMjQocDIxLCBjOCwgcDI0KTsKLX0KLQogLyoKICAgIFRoaXMgaW1wbGVtZW50cyB0aGUgWC9PcGVuIFNNQiBwYXNzd29yZCBlbmNyeXB0aW9uCiAgICBJdCB0YWtlcyBhIHBhc3N3b3JkLCBhIDggYnl0ZSAiY3J5cHQga2V5IiBhbmQgcHV0cyAyNCBieXRlcyBvZgogICAgZW5jcnlwdGVkIHBhc3N3b3JkIGludG8gcDI0ICovCiAvKiBOb3RlIHRoYXQgcGFzc3dvcmQgbXVzdCBiZSB1cHBlcmNhc2VkIGFuZCBudWxsIHRlcm1pbmF0ZWQgKi8KLXZvaWQKK2ludAogU01CZW5jcnlwdCh1bnNpZ25lZCBjaGFyICpwYXNzd2QsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmM4LCB1bnNpZ25lZCBjaGFyICpwMjQpCiB7Ci0JdW5zaWduZWQgY2hhciBwMTRbMTVdLCBwMjFbMjFdOworCWludCByYzsKKwl1bnNpZ25lZCBjaGFyIHAxNFsxNF0sIHAxNlsxNl0sIHAyMVsyMV07CiAKLQltZW1zZXQocDIxLCAnXDAnLCAyMSk7CiAJbWVtc2V0KHAxNCwgJ1wwJywgMTQpOwotCXN0cm5jcHkoKGNoYXIgKikgcDE0LCAoY2hhciAqKSBwYXNzd2QsIDE0KTsKKwltZW1zZXQocDE2LCAnXDAnLCAxNik7CisJbWVtc2V0KHAyMSwgJ1wwJywgMjEpOwogCi0vKglzdHJ1cHBlcigoY2hhciAqKXAxNCk7ICovLyogQkIgYXQgbGVhc3QgdXBwZXJjYXNlIHRoZSBlYXN5IHJhbmdlICovCi0JRV9QMTYocDE0LCBwMjEpOworCW1lbWNweShwMTQsIHBhc3N3ZCwgMTQpOworCXJjID0gRV9QMTYocDE0LCBwMTYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOwogCi0JU01CT1dGZW5jcnlwdChwMjEsIGM4LCBwMjQpOworCW1lbWNweShwMjEsIHAxNiwgMTYpOworCXJjID0gRV9QMjQocDIxLCBjOCwgcDI0KTsKIAotCW1lbXNldChwMTQsIDAsIDE1KTsKLQltZW1zZXQocDIxLCAwLCAyMSk7CisJcmV0dXJuIHJjOwogfQogCiAvKiBSb3V0aW5lcyBmb3IgV2luZG93cyBOVCBNRDQgSGFzaCBmdW5jdGlvbnMuICovCkBAIC0yNzksMTYgKzM1MSwxOCBAQAogU01CTlRlbmNyeXB0KHVuc2lnbmVkIGNoYXIgKnBhc3N3ZCwgdW5zaWduZWQgY2hhciAqYzgsIHVuc2lnbmVkIGNoYXIgKnAyNCkKIHsKIAlpbnQgcmM7Ci0JdW5zaWduZWQgY2hhciBwMjFbMjFdOworCXVuc2lnbmVkIGNoYXIgcDE2WzE2XSwgcDIxWzIxXTsKIAorCW1lbXNldChwMTYsICdcMCcsIDE2KTsKIAltZW1zZXQocDIxLCAnXDAnLCAyMSk7CiAKLQlyYyA9IEVfbWQ0aGFzaChwYXNzd2QsIHAyMSk7CisJcmMgPSBFX21kNGhhc2gocGFzc3dkLCBwMTYpOwogCWlmIChyYykgewogCQljRllJKDEsICIlcyBDYW4ndCBnZW5lcmF0ZSBOVCBoYXNoLCBlcnJvcjogJWQiLCBfX2Z1bmNfXywgcmMpOwogCQlyZXR1cm4gcmM7CiAJfQotCVNNQk9XRmVuY3J5cHQocDIxLCBjOCwgcDI0KTsKKwltZW1jcHkocDIxLCBwMTYsIDE2KTsKKwlyYyA9IEVfUDI0KHAyMSwgYzgsIHAyNCk7CiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9mcy9jaWZzL3RyYW5zcG9ydC5jIGIvZnMvY2lmcy90cmFuc3BvcnQuYwppbmRleCA0NmQ4NzU2Li5mMjUxM2ZiIDEwMDY0NAotLS0gYS9mcy9jaWZzL3RyYW5zcG9ydC5jCisrKyBiL2ZzL2NpZnMvdHJhbnNwb3J0LmMKQEAgLTEyOSw3ICsxMjksNyBAQAogCXVuc2lnbmVkIGludCBsZW4gPSBpb3ZbMF0uaW92X2xlbjsKIAl1bnNpZ25lZCBpbnQgdG90YWxfbGVuOwogCWludCBmaXJzdF92ZWMgPSAwOwotCXVuc2lnbmVkIGludCBzbWJfYnVmX2xlbmd0aCA9IHNtYl9idWZmZXItPnNtYl9idWZfbGVuZ3RoOworCXVuc2lnbmVkIGludCBzbWJfYnVmX2xlbmd0aCA9IGJlMzJfdG9fY3B1KHNtYl9idWZmZXItPnNtYl9idWZfbGVuZ3RoKTsKIAlzdHJ1Y3Qgc29ja2V0ICpzc29ja2V0ID0gc2VydmVyLT5zc29ja2V0OwogCiAJaWYgKHNzb2NrZXQgPT0gTlVMTCkKQEAgLTE0NCwxNyArMTQ0LDEwIEBACiAJZWxzZQogCQlzbWJfbXNnLm1zZ19mbGFncyA9IE1TR19OT1NJR05BTDsKIAotCS8qIHNtYiBoZWFkZXIgaXMgY29udmVydGVkIGluIGhlYWRlcl9hc3NlbWJsZS4gYmNjIGFuZCByZXN0IG9mIFNNQiB3b3JkCi0JICAgYXJlYSwgYW5kIGJ5dGUgYXJlYSBpZiBuZWNlc3NhcnksIGlzIGNvbnZlcnRlZCB0byBsaXR0bGVlbmRpYW4gaW4KLQkgICBjaWZzc21iLmMgYW5kIFJGQzEwMDEgbGVuIGlzIGNvbnZlcnRlZCB0byBiaWdlbmRpYW4gaW4gc21iX3NlbmQKLQkgICBGbGFnczIgaXMgY29udmVydGVkIGluIFNlbmRSZWNlaXZlICovCi0KLQogCXRvdGFsX2xlbiA9IDA7CiAJZm9yIChpID0gMDsgaSA8IG5fdmVjOyBpKyspCiAJCXRvdGFsX2xlbiArPSBpb3ZbaV0uaW92X2xlbjsKIAotCXNtYl9idWZmZXItPnNtYl9idWZfbGVuZ3RoID0gY3B1X3RvX2JlMzIoc21iX2J1ZmZlci0+c21iX2J1Zl9sZW5ndGgpOwogCWNGWUkoMSwgIlNlbmRpbmcgc21iOiAgdG90YWxfbGVuICVkIiwgdG90YWxfbGVuKTsKIAlkdW1wX3NtYihzbWJfYnVmZmVyLCBsZW4pOwogCkBAIC0yNDMsNyArMjM2LDcgQEAKIAogCS8qIERvbid0IHdhbnQgdG8gbW9kaWZ5IHRoZSBidWZmZXIgYXMgYQogCSAgIHNpZGUgZWZmZWN0IG9mIHRoaXMgY2FsbC4gKi8KLQlzbWJfYnVmZmVyLT5zbWJfYnVmX2xlbmd0aCA9IHNtYl9idWZfbGVuZ3RoOworCXNtYl9idWZmZXItPnNtYl9idWZfbGVuZ3RoID0gY3B1X3RvX2JlMzIoc21iX2J1Zl9sZW5ndGgpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMzg3LDcgKzM4MCw3IEBACiAjaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMyCiAJYXRvbWljX2luYygmc2VydmVyLT5pblNlbmQpOwogI2VuZGlmCi0JcmMgPSBzbWJfc2VuZChzZXJ2ZXIsIGluX2J1ZiwgaW5fYnVmLT5zbWJfYnVmX2xlbmd0aCk7CisJcmMgPSBzbWJfc2VuZChzZXJ2ZXIsIGluX2J1ZiwgYmUzMl90b19jcHUoaW5fYnVmLT5zbWJfYnVmX2xlbmd0aCkpOwogI2lmZGVmIENPTkZJR19DSUZTX1NUQVRTMgogCWF0b21pY19kZWMoJnNlcnZlci0+aW5TZW5kKTsKIAltaWQtPndoZW5fc2VudCA9IGppZmZpZXM7CkBAIC00MjIsNyArNDE1LDcgQEAKIAlpbnQgcmVzcF9idWZfdHlwZTsKIAogCWlvdlswXS5pb3ZfYmFzZSA9IChjaGFyICopaW5fYnVmOwotCWlvdlswXS5pb3ZfbGVuID0gaW5fYnVmLT5zbWJfYnVmX2xlbmd0aCArIDQ7CisJaW92WzBdLmlvdl9sZW4gPSBiZTMyX3RvX2NwdShpbl9idWYtPnNtYl9idWZfbGVuZ3RoKSArIDQ7CiAJZmxhZ3MgfD0gQ0lGU19OT19SRVNQOwogCXJjID0gU2VuZFJlY2VpdmUyKHhpZCwgc2VzLCBpb3YsIDEsICZyZXNwX2J1Zl90eXBlLCBmbGFncyk7CiAJY0ZZSShEQkcyLCAiU2VuZFJjdk5vUnNwIGZsYWdzICVkIHJjICVkIiwgZmxhZ3MsIHJjKTsKQEAgLTQ4OCwxMCArNDgxLDEwIEBACiAJaW50IHJjID0gMDsKIAogCS8qIC00IGZvciBSRkMxMDAxIGxlbmd0aCBhbmQgKzIgZm9yIEJDQyBmaWVsZCAqLwotCWluX2J1Zi0+c21iX2J1Zl9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNtYl9oZHIpIC0gNCAgKyAyOworCWluX2J1Zi0+c21iX2J1Zl9sZW5ndGggPSBjcHVfdG9fYmUzMihzaXplb2Yoc3RydWN0IHNtYl9oZHIpIC0gNCAgKyAyKTsKIAlpbl9idWYtPkNvbW1hbmQgPSBTTUJfQ09NX05UX0NBTkNFTDsKIAlpbl9idWYtPldvcmRDb3VudCA9IDA7Ci0JcHV0X2JjY19sZSgwLCBpbl9idWYpOworCXB1dF9iY2MoMCwgaW5fYnVmKTsKIAogCW11dGV4X2xvY2soJnNlcnZlci0+c3J2X211dGV4KTsKIAlyYyA9IGNpZnNfc2lnbl9zbWIoaW5fYnVmLCBzZXJ2ZXIsICZtaWQtPnNlcXVlbmNlX251bWJlcik7CkBAIC00OTksNyArNDkyLDcgQEAKIAkJbXV0ZXhfdW5sb2NrKCZzZXJ2ZXItPnNydl9tdXRleCk7CiAJCXJldHVybiByYzsKIAl9Ci0JcmMgPSBzbWJfc2VuZChzZXJ2ZXIsIGluX2J1ZiwgaW5fYnVmLT5zbWJfYnVmX2xlbmd0aCk7CisJcmMgPSBzbWJfc2VuZChzZXJ2ZXIsIGluX2J1ZiwgYmUzMl90b19jcHUoaW5fYnVmLT5zbWJfYnVmX2xlbmd0aCkpOwogCW11dGV4X3VubG9jaygmc2VydmVyLT5zcnZfbXV0ZXgpOwogCiAJY0ZZSSgxLCAiaXNzdWVkIE5UX0NBTkNFTCBmb3IgbWlkICV1LCByYyA9ICVkIiwKQEAgLTYxMiw3ICs2MDUsNyBAQAogCQlyZXR1cm4gcmM7CiAJfQogCi0JcmVjZWl2ZV9sZW4gPSBtaWRRLT5yZXNwX2J1Zi0+c21iX2J1Zl9sZW5ndGg7CisJcmVjZWl2ZV9sZW4gPSBiZTMyX3RvX2NwdShtaWRRLT5yZXNwX2J1Zi0+c21iX2J1Zl9sZW5ndGgpOwogCiAJaWYgKHJlY2VpdmVfbGVuID4gQ0lGU01heEJ1ZlNpemUgKyBNQVhfQ0lGU19IRFJfU0laRSkgewogCQljRVJST1IoMSwgIkZyYW1lIHRvbyBsYXJnZSByZWNlaXZlZC4gIExlbmd0aDogJWQgIFhpZDogJWQiLApAQCAtNjUxLDExICs2NDQsNiBAQAogCQlyYyA9IG1hcF9zbWJfdG9fbGludXhfZXJyb3IobWlkUS0+cmVzcF9idWYsCiAJCQkJCSAgICBmbGFncyAmIENJRlNfTE9HX0VSUk9SKTsKIAotCQkvKiBjb252ZXJ0IEJ5dGVDb3VudCBpZiBuZWNlc3NhcnkgKi8KLQkJaWYgKHJlY2VpdmVfbGVuID49IHNpemVvZihzdHJ1Y3Qgc21iX2hkcikgLSA0Ci0JCSAgICAvKiBkbyBub3QgY291bnQgUkZDMTAwMSBoZWFkZXIgKi8gICsKLQkJICAgICgyICogbWlkUS0+cmVzcF9idWYtPldvcmRDb3VudCkgKyAyIC8qIGJjYyAqLyApCi0JCQlwdXRfYmNjKGdldF9iY2NfbGUobWlkUS0+cmVzcF9idWYpLCBtaWRRLT5yZXNwX2J1Zik7CiAJCWlmICgoZmxhZ3MgJiBDSUZTX05PX1JFU1ApID09IDApCiAJCQltaWRRLT5yZXNwX2J1ZiA9IE5VTEw7ICAvKiBtYXJrIGl0IHNvIGJ1ZiB3aWxsCiAJCQkJCQkgICBub3QgYmUgZnJlZWQgYnkKQEAgLTY5OCw5ICs2ODYsMTAgQEAKIAkgICB0byB0aGUgc2FtZSBzZXJ2ZXIuIFdlIG1heSBtYWtlIHRoaXMgY29uZmlndXJhYmxlIGxhdGVyIG9yCiAJICAgdXNlIHNlcy0+bWF4UmVxICovCiAKLQlpZiAoaW5fYnVmLT5zbWJfYnVmX2xlbmd0aCA+IENJRlNNYXhCdWZTaXplICsgTUFYX0NJRlNfSERSX1NJWkUgLSA0KSB7CisJaWYgKGJlMzJfdG9fY3B1KGluX2J1Zi0+c21iX2J1Zl9sZW5ndGgpID4gQ0lGU01heEJ1ZlNpemUgKworCQkJTUFYX0NJRlNfSERSX1NJWkUgLSA0KSB7CiAJCWNFUlJPUigxLCAiSWxsZWdhbCBsZW5ndGgsIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIGZyYW1lLCAlZCIsCi0JCQkgICBpbl9idWYtPnNtYl9idWZfbGVuZ3RoKTsKKwkJCSAgIGJlMzJfdG9fY3B1KGluX2J1Zi0+c21iX2J1Zl9sZW5ndGgpKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC03MzMsNyArNzIyLDcgQEAKICNpZmRlZiBDT05GSUdfQ0lGU19TVEFUUzIKIAlhdG9taWNfaW5jKCZzZXMtPnNlcnZlci0+aW5TZW5kKTsKICNlbmRpZgotCXJjID0gc21iX3NlbmQoc2VzLT5zZXJ2ZXIsIGluX2J1ZiwgaW5fYnVmLT5zbWJfYnVmX2xlbmd0aCk7CisJcmMgPSBzbWJfc2VuZChzZXMtPnNlcnZlciwgaW5fYnVmLCBiZTMyX3RvX2NwdShpbl9idWYtPnNtYl9idWZfbGVuZ3RoKSk7CiAjaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMyCiAJYXRvbWljX2RlYygmc2VzLT5zZXJ2ZXItPmluU2VuZCk7CiAJbWlkUS0+d2hlbl9zZW50ID0gamlmZmllczsKQEAgLTc2OCw3ICs3NTcsNyBAQAogCQlyZXR1cm4gcmM7CiAJfQogCi0JcmVjZWl2ZV9sZW4gPSBtaWRRLT5yZXNwX2J1Zi0+c21iX2J1Zl9sZW5ndGg7CisJcmVjZWl2ZV9sZW4gPSBiZTMyX3RvX2NwdShtaWRRLT5yZXNwX2J1Zi0+c21iX2J1Zl9sZW5ndGgpOwogCiAJaWYgKHJlY2VpdmVfbGVuID4gQ0lGU01heEJ1ZlNpemUgKyBNQVhfQ0lGU19IRFJfU0laRSkgewogCQljRVJST1IoMSwgIkZyYW1lIHRvbyBsYXJnZSByZWNlaXZlZC4gIExlbmd0aDogJWQgIFhpZDogJWQiLApAQCAtNzgxLDcgKzc3MCw3IEBACiAKIAlpZiAobWlkUS0+cmVzcF9idWYgJiYgb3V0X2J1ZgogCSAgICAmJiAobWlkUS0+bWlkU3RhdGUgPT0gTUlEX1JFU1BPTlNFX1JFQ0VJVkVEKSkgewotCQlvdXRfYnVmLT5zbWJfYnVmX2xlbmd0aCA9IHJlY2VpdmVfbGVuOworCQlvdXRfYnVmLT5zbWJfYnVmX2xlbmd0aCA9IGNwdV90b19iZTMyKHJlY2VpdmVfbGVuKTsKIAkJbWVtY3B5KChjaGFyICopb3V0X2J1ZiArIDQsCiAJCSAgICAgICAoY2hhciAqKW1pZFEtPnJlc3BfYnVmICsgNCwKIAkJICAgICAgIHJlY2VpdmVfbGVuKTsKQEAgLTgwMCwxNiArNzg5LDEwIEBACiAJCQl9CiAJCX0KIAotCQkqcGJ5dGVzX3JldHVybmVkID0gb3V0X2J1Zi0+c21iX2J1Zl9sZW5ndGg7CisJCSpwYnl0ZXNfcmV0dXJuZWQgPSBiZTMyX3RvX2NwdShvdXRfYnVmLT5zbWJfYnVmX2xlbmd0aCk7CiAKIAkJLyogQkIgc3BlY2lhbCBjYXNlIHJlY29ubmVjdCB0aWQgYW5kIHVpZCBoZXJlPyAqLwogCQlyYyA9IG1hcF9zbWJfdG9fbGludXhfZXJyb3Iob3V0X2J1ZiwgMCAvKiBubyBsb2cgKi8gKTsKLQotCQkvKiBjb252ZXJ0IEJ5dGVDb3VudCBpZiBuZWNlc3NhcnkgKi8KLQkJaWYgKHJlY2VpdmVfbGVuID49IHNpemVvZihzdHJ1Y3Qgc21iX2hkcikgLSA0Ci0JCSAgICAvKiBkbyBub3QgY291bnQgUkZDMTAwMSBoZWFkZXIgKi8gICsKLQkJICAgICgyICogb3V0X2J1Zi0+V29yZENvdW50KSArIDIgLyogYmNjICovICkKLQkJCXB1dF9iY2MoZ2V0X2JjY19sZShtaWRRLT5yZXNwX2J1ZiksIG1pZFEtPnJlc3BfYnVmKTsKIAl9IGVsc2UgewogCQlyYyA9IC1FSU87CiAJCWNFUlJPUigxLCAiQmFkIE1JRCBzdGF0ZT8iKTsKQEAgLTg3Nyw5ICs4NjAsMTAgQEAKIAkgICB0byB0aGUgc2FtZSBzZXJ2ZXIuIFdlIG1heSBtYWtlIHRoaXMgY29uZmlndXJhYmxlIGxhdGVyIG9yCiAJICAgdXNlIHNlcy0+bWF4UmVxICovCiAKLQlpZiAoaW5fYnVmLT5zbWJfYnVmX2xlbmd0aCA+IENJRlNNYXhCdWZTaXplICsgTUFYX0NJRlNfSERSX1NJWkUgLSA0KSB7CisJaWYgKGJlMzJfdG9fY3B1KGluX2J1Zi0+c21iX2J1Zl9sZW5ndGgpID4gQ0lGU01heEJ1ZlNpemUgKworCQkJTUFYX0NJRlNfSERSX1NJWkUgLSA0KSB7CiAJCWNFUlJPUigxLCAiSWxsZWdhbCBsZW5ndGgsIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIGZyYW1lLCAlZCIsCi0JCQkgICBpbl9idWYtPnNtYl9idWZfbGVuZ3RoKTsKKwkJCSAgIGJlMzJfdG9fY3B1KGluX2J1Zi0+c21iX2J1Zl9sZW5ndGgpKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC05MTAsNyArODk0LDcgQEAKICNpZmRlZiBDT05GSUdfQ0lGU19TVEFUUzIKIAlhdG9taWNfaW5jKCZzZXMtPnNlcnZlci0+aW5TZW5kKTsKICNlbmRpZgotCXJjID0gc21iX3NlbmQoc2VzLT5zZXJ2ZXIsIGluX2J1ZiwgaW5fYnVmLT5zbWJfYnVmX2xlbmd0aCk7CisJcmMgPSBzbWJfc2VuZChzZXMtPnNlcnZlciwgaW5fYnVmLCBiZTMyX3RvX2NwdShpbl9idWYtPnNtYl9idWZfbGVuZ3RoKSk7CiAjaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMyCiAJYXRvbWljX2RlYygmc2VzLT5zZXJ2ZXItPmluU2VuZCk7CiAJbWlkUS0+d2hlbl9zZW50ID0gamlmZmllczsKQEAgLTk3Nyw3ICs5NjEsNyBAQAogCWlmIChyYyAhPSAwKQogCQlyZXR1cm4gcmM7CiAKLQlyZWNlaXZlX2xlbiA9IG1pZFEtPnJlc3BfYnVmLT5zbWJfYnVmX2xlbmd0aDsKKwlyZWNlaXZlX2xlbiA9IGJlMzJfdG9fY3B1KG1pZFEtPnJlc3BfYnVmLT5zbWJfYnVmX2xlbmd0aCk7CiAJaWYgKHJlY2VpdmVfbGVuID4gQ0lGU01heEJ1ZlNpemUgKyBNQVhfQ0lGU19IRFJfU0laRSkgewogCQljRVJST1IoMSwgIkZyYW1lIHRvbyBsYXJnZSByZWNlaXZlZC4gIExlbmd0aDogJWQgIFhpZDogJWQiLAogCQkJcmVjZWl2ZV9sZW4sIHhpZCk7CkBAIC05OTMsNyArOTc3LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0Jb3V0X2J1Zi0+c21iX2J1Zl9sZW5ndGggPSByZWNlaXZlX2xlbjsKKwlvdXRfYnVmLT5zbWJfYnVmX2xlbmd0aCA9IGNwdV90b19iZTMyKHJlY2VpdmVfbGVuKTsKIAltZW1jcHkoKGNoYXIgKilvdXRfYnVmICsgNCwKIAkgICAgICAgKGNoYXIgKiltaWRRLT5yZXNwX2J1ZiArIDQsCiAJICAgICAgIHJlY2VpdmVfbGVuKTsKQEAgLTEwMTIsMTcgKzk5NiwxMSBAQAogCQl9CiAJfQogCi0JKnBieXRlc19yZXR1cm5lZCA9IG91dF9idWYtPnNtYl9idWZfbGVuZ3RoOworCSpwYnl0ZXNfcmV0dXJuZWQgPSBiZTMyX3RvX2NwdShvdXRfYnVmLT5zbWJfYnVmX2xlbmd0aCk7CiAKIAkvKiBCQiBzcGVjaWFsIGNhc2UgcmVjb25uZWN0IHRpZCBhbmQgdWlkIGhlcmU/ICovCiAJcmMgPSBtYXBfc21iX3RvX2xpbnV4X2Vycm9yKG91dF9idWYsIDAgLyogbm8gbG9nICovICk7CiAKLQkvKiBjb252ZXJ0IEJ5dGVDb3VudCBpZiBuZWNlc3NhcnkgKi8KLQlpZiAocmVjZWl2ZV9sZW4gPj0gc2l6ZW9mKHN0cnVjdCBzbWJfaGRyKSAtIDQKLQkgICAgLyogZG8gbm90IGNvdW50IFJGQzEwMDEgaGVhZGVyICovICArCi0JICAgICgyICogb3V0X2J1Zi0+V29yZENvdW50KSArIDIgLyogYmNjICovICkKLQkJcHV0X2JjYyhnZXRfYmNjX2xlKG91dF9idWYpLCBvdXRfYnVmKTsKLQogb3V0OgogCWRlbGV0ZV9taWQobWlkUSk7CiAJaWYgKHJzdGFydCAmJiByYyA9PSAtRUFDQ0VTKQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy94YXR0ci5jIGIvZnMvY2lmcy94YXR0ci5jCmluZGV4IGVhZTJhMTQuLjkxMjk5NWUgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMveGF0dHIuYworKysgYi9mcy9jaWZzL3hhdHRyLmMKQEAgLTExMiw2ICsxMTIsNyBAQAogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnBUY29uOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CiAJY2hhciAqZnVsbF9wYXRoOworCXN0cnVjdCBjaWZzX250c2QgKnBhY2w7CiAKIAlpZiAoZGlyZW50cnkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU87CkBAIC0xNjYsNiArMTY3LDI1IEBACiAJCXJjID0gQ0lGU1NNQlNldEVBKHhpZCwgcFRjb24sIGZ1bGxfcGF0aCwgZWFfbmFtZSwgZWFfdmFsdWUsCiAJCQkoX191MTYpdmFsdWVfc2l6ZSwgY2lmc19zYi0+bG9jYWxfbmxzLAogCQkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CisJfSBlbHNlIGlmIChzdHJuY21wKGVhX25hbWUsIENJRlNfWEFUVFJfQ0lGU19BQ0wsCisJCQlzdHJsZW4oQ0lGU19YQVRUUl9DSUZTX0FDTCkpID09IDApIHsKKwkJcGFjbCA9IGttYWxsb2ModmFsdWVfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcGFjbCkgeworCQkJY0ZZSSgxLCAiJXM6IENhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgQUNMIiwKKwkJCQkJX19mdW5jX18pOworCQkJcmMgPSAtRU5PTUVNOworCQl9IGVsc2UgeworI2lmZGVmIENPTkZJR19DSUZTX0FDTAorCQkJbWVtY3B5KHBhY2wsIGVhX3ZhbHVlLCB2YWx1ZV9zaXplKTsKKwkJCXJjID0gc2V0X2NpZnNfYWNsKHBhY2wsIHZhbHVlX3NpemUsCisJCQkJZGlyZW50cnktPmRfaW5vZGUsIGZ1bGxfcGF0aCk7CisJCQlpZiAocmMgPT0gMCkgLyogZm9yY2UgcmV2YWxpZGF0ZSBvZiB0aGUgaW5vZGUgKi8KKwkJCQlDSUZTX0koZGlyZW50cnktPmRfaW5vZGUpLT50aW1lID0gMDsKKwkJCWtmcmVlKHBhY2wpOworI2Vsc2UKKwkJCWNGWUkoMSwgIlNldCBDSUZTIEFDTCBub3Qgc3VwcG9ydGVkIHlldCIpOworI2VuZGlmIC8qIENPTkZJR19DSUZTX0FDTCAqLworCQl9CiAJfSBlbHNlIHsKIAkJaW50IHRlbXA7CiAJCXRlbXAgPSBzdHJuY21wKGVhX25hbWUsIFBPU0lYX0FDTF9YQVRUUl9BQ0NFU1MsCmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9kaXIuYyBiL2ZzL2NvbmZpZ2ZzL2Rpci5jCmluZGV4IDMzMTNkZDEuLjlhMzdhOWIgMTAwNjQ0Ci0tLSBhL2ZzL2NvbmZpZ2ZzL2Rpci5jCisrKyBiL2ZzL2NvbmZpZ2ZzL2Rpci5jCkBAIC01MywxMSArNTMsMTQgQEAKIHN0YXRpYyB2b2lkIGNvbmZpZ2ZzX2RfaXB1dChzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LAogCQkJICAgIHN0cnVjdCBpbm9kZSAqIGlub2RlKQogewotCXN0cnVjdCBjb25maWdmc19kaXJlbnQgKiBzZCA9IGRlbnRyeS0+ZF9mc2RhdGE7CisJc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2QgPSBkZW50cnktPmRfZnNkYXRhOwogCiAJaWYgKHNkKSB7CiAJCUJVR19PTihzZC0+c19kZW50cnkgIT0gZGVudHJ5KTsKKwkJLyogQ29vcmRpbmF0ZSB3aXRoIGNvbmZpZ2ZzX3JlYWRkaXIgKi8KKwkJc3Bpbl9sb2NrKCZjb25maWdmc19kaXJlbnRfbG9jayk7CiAJCXNkLT5zX2RlbnRyeSA9IE5VTEw7CisJCXNwaW5fdW5sb2NrKCZjb25maWdmc19kaXJlbnRfbG9jayk7CiAJCWNvbmZpZ2ZzX3B1dChzZCk7CiAJfQogCWlwdXQoaW5vZGUpOwpAQCAtNjg5LDcgKzY5Miw4IEBACiAJCQlzZCA9IGNoaWxkLT5kX2ZzZGF0YTsKIAkJCXNkLT5zX3R5cGUgfD0gQ09ORklHRlNfVVNFVF9ERUZBVUxUOwogCQl9IGVsc2UgewotCQkJZF9kZWxldGUoY2hpbGQpOworCQkJQlVHX09OKGNoaWxkLT5kX2lub2RlKTsKKwkJCWRfZHJvcChjaGlsZCk7CiAJCQlkcHV0KGNoaWxkKTsKIAkJfQogCX0KQEAgLTE1NDUsNyArMTU0OSw3IEBACiAJc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqIHBhcmVudF9zZCA9IGRlbnRyeS0+ZF9mc2RhdGE7CiAJc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqY3Vyc29yID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBsaXN0X2hlYWQgKnAsICpxID0gJmN1cnNvci0+c19zaWJsaW5nOwotCWlub190IGlubzsKKwlpbm9fdCBpbm8gPSAwOwogCWludCBpID0gZmlscC0+Zl9wb3M7CiAKIAlzd2l0Y2ggKGkpIHsKQEAgLTE1NzMsNiArMTU3Nyw3IEBACiAJCQkJc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqbmV4dDsKIAkJCQljb25zdCBjaGFyICogbmFtZTsKIAkJCQlpbnQgbGVuOworCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwogCiAJCQkJbmV4dCA9IGxpc3RfZW50cnkocCwgc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCwKIAkJCQkJCSAgIHNfc2libGluZyk7CkBAIC0xNTgxLDkgKzE1ODYsMjggQEAKIAogCQkJCW5hbWUgPSBjb25maWdmc19nZXRfbmFtZShuZXh0KTsKIAkJCQlsZW4gPSBzdHJsZW4obmFtZSk7Ci0JCQkJaWYgKG5leHQtPnNfZGVudHJ5KQotCQkJCQlpbm8gPSBuZXh0LT5zX2RlbnRyeS0+ZF9pbm9kZS0+aV9pbm87Ci0JCQkJZWxzZQorCisJCQkJLyoKKwkJCQkgKiBXZSdsbCBoYXZlIGEgZGVudHJ5IGFuZCBhbiBpbm9kZSBmb3IKKwkJCQkgKiBQSU5ORUQgaXRlbXMgYW5kIGZvciBvcGVuIGF0dHJpYnV0ZQorCQkJCSAqIGZpbGVzLiAgV2UgbG9jayBoZXJlIHRvIHByZXZlbnQgYSByYWNlCisJCQkJICogd2l0aCBjb25maWdmc19kX2lwdXQoKSBjbGVhcmluZworCQkJCSAqIHNfZGVudHJ5IGJlZm9yZSBjYWxsaW5nIGlwdXQoKS4KKwkJCQkgKgorCQkJCSAqIFdoeSBkbyB3ZSBnbyB0byB0aGUgdHJvdWJsZT8gIElmCisJCQkJICogc29tZW9uZSBoYXMgYW4gYXR0cmlidXRlIGZpbGUgb3BlbiwKKwkJCQkgKiB0aGUgaW5vZGUgbnVtYmVyIHNob3VsZCBtYXRjaCB1bnRpbAorCQkJCSAqIHRoZXkgY2xvc2UgaXQuICBCZXlvbmQgdGhhdCwgd2UgZG9uJ3QKKwkJCQkgKiBjYXJlLgorCQkJCSAqLworCQkJCXNwaW5fbG9jaygmY29uZmlnZnNfZGlyZW50X2xvY2spOworCQkJCWRlbnRyeSA9IG5leHQtPnNfZGVudHJ5OworCQkJCWlmIChkZW50cnkpCisJCQkJCWlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCQkJCWlmIChpbm9kZSkKKwkJCQkJaW5vID0gaW5vZGUtPmlfaW5vOworCQkJCXNwaW5fdW5sb2NrKCZjb25maWdmc19kaXJlbnRfbG9jayk7CisJCQkJaWYgKCFpbm9kZSkKIAkJCQkJaW5vID0gaXVuaXF1ZShjb25maWdmc19zYiwgMik7CiAKIAkJCQlpZiAoZmlsbGRpcihkaXJlbnQsIG5hbWUsIGxlbiwgZmlscC0+Zl9wb3MsIGlubywKQEAgLTE2ODMsNyArMTcwNyw4IEBACiAJCWVyciA9IGNvbmZpZ2ZzX2F0dGFjaF9ncm91cChzZC0+c19lbGVtZW50LCAmZ3JvdXAtPmNnX2l0ZW0sCiAJCQkJCSAgICBkZW50cnkpOwogCQlpZiAoZXJyKSB7Ci0JCQlkX2RlbGV0ZShkZW50cnkpOworCQkJQlVHX09OKGRlbnRyeS0+ZF9pbm9kZSk7CisJCQlkX2Ryb3AoZGVudHJ5KTsKIAkJCWRwdXQoZGVudHJ5KTsKIAkJfSBlbHNlIHsKIAkJCXNwaW5fbG9jaygmY29uZmlnZnNfZGlyZW50X2xvY2spOwpkaWZmIC0tZ2l0IGEvZnMvZGNhY2hlLmMgYi9mcy9kY2FjaGUuYwppbmRleCAxMjlhMzU3Li4xOGIyYTFmIDEwMDY0NAotLS0gYS9mcy9kY2FjaGUuYworKysgYi9mcy9kY2FjaGUuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRfc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9yY3VsaXN0X2JsLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiAvKgpAQCAtOTksMTIgKzEwMCw5IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGRfaGFzaF9tYXNrIF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgdW5zaWduZWQgaW50IGRfaGFzaF9zaGlmdCBfX3JlYWRfbW9zdGx5OwogCi1zdHJ1Y3QgZGNhY2hlX2hhc2hfYnVja2V0IHsKLQlzdHJ1Y3QgaGxpc3RfYmxfaGVhZCBoZWFkOwotfTsKLXN0YXRpYyBzdHJ1Y3QgZGNhY2hlX2hhc2hfYnVja2V0ICpkZW50cnlfaGFzaHRhYmxlIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgc3RydWN0IGhsaXN0X2JsX2hlYWQgKmRlbnRyeV9oYXNodGFibGUgX19yZWFkX21vc3RseTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgZGNhY2hlX2hhc2hfYnVja2V0ICpkX2hhc2goc3RydWN0IGRlbnRyeSAqcGFyZW50LAorc3RhdGljIGlubGluZSBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqZF9oYXNoKHN0cnVjdCBkZW50cnkgKnBhcmVudCwKIAkJCQkJdW5zaWduZWQgbG9uZyBoYXNoKQogewogCWhhc2ggKz0gKCh1bnNpZ25lZCBsb25nKSBwYXJlbnQgXiBHT0xERU5fUkFUSU9fUFJJTUUpIC8gTDFfQ0FDSEVfQllURVM7CkBAIC0xMTIsMTYgKzExMCw2IEBACiAJcmV0dXJuIGRlbnRyeV9oYXNodGFibGUgKyAoaGFzaCAmIERfSEFTSE1BU0spOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc3Bpbl9sb2NrX2J1Y2tldChzdHJ1Y3QgZGNhY2hlX2hhc2hfYnVja2V0ICpiKQotewotCWJpdF9zcGluX2xvY2soMCwgKHVuc2lnbmVkIGxvbmcgKikmYi0+aGVhZC5maXJzdCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzcGluX3VubG9ja19idWNrZXQoc3RydWN0IGRjYWNoZV9oYXNoX2J1Y2tldCAqYikKLXsKLQlfX2JpdF9zcGluX3VubG9jaygwLCAodW5zaWduZWQgbG9uZyAqKSZiLT5oZWFkLmZpcnN0KTsKLX0KLQogLyogU3RhdGlzdGljcyBnYXRoZXJpbmcuICovCiBzdHJ1Y3QgZGVudHJ5X3N0YXRfdCBkZW50cnlfc3RhdCA9IHsKIAkuYWdlX2xpbWl0ID0gNDUsCkBAIC0xNjcsOCArMTU1LDggQEAKIAlpZiAoZGVudHJ5LT5kX29wICYmIGRlbnRyeS0+ZF9vcC0+ZF9yZWxlYXNlKQogCQlkZW50cnktPmRfb3AtPmRfcmVsZWFzZShkZW50cnkpOwogCi0JLyogaWYgZGVudHJ5IHdhcyBuZXZlciBpbnNlcnRlZCBpbnRvIGhhc2gsIGltbWVkaWF0ZSBmcmVlIGlzIE9LICovCi0JaWYgKGhsaXN0X2JsX3VuaGFzaGVkKCZkZW50cnktPmRfaGFzaCkpCisJLyogaWYgZGVudHJ5IHdhcyBuZXZlciB2aXNpYmxlIHRvIFJDVSwgaW1tZWRpYXRlIGZyZWUgaXMgT0sgKi8KKwlpZiAoIShkZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfUkNVQUNDRVNTKSkKIAkJX19kX2ZyZWUoJmRlbnRyeS0+ZF91LmRfcmN1KTsKIAllbHNlCiAJCWNhbGxfcmN1KCZkZW50cnktPmRfdS5kX3JjdSwgX19kX2ZyZWUpOwpAQCAtMzMwLDI4ICszMTgsMTkgQEAKICAqLwogdm9pZCBfX2RfZHJvcChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7Ci0JaWYgKCEoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX1VOSEFTSEVEKSkgewotCQlpZiAodW5saWtlbHkoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX0RJU0NPTk5FQ1RFRCkpIHsKLQkJCWJpdF9zcGluX2xvY2soMCwKLQkJCQkodW5zaWduZWQgbG9uZyAqKSZkZW50cnktPmRfc2ItPnNfYW5vbi5maXJzdCk7Ci0JCQlkZW50cnktPmRfZmxhZ3MgfD0gRENBQ0hFX1VOSEFTSEVEOwotCQkJaGxpc3RfYmxfZGVsX2luaXQoJmRlbnRyeS0+ZF9oYXNoKTsKLQkJCV9fYml0X3NwaW5fdW5sb2NrKDAsCi0JCQkJKHVuc2lnbmVkIGxvbmcgKikmZGVudHJ5LT5kX3NiLT5zX2Fub24uZmlyc3QpOwotCQl9IGVsc2UgewotCQkJc3RydWN0IGRjYWNoZV9oYXNoX2J1Y2tldCAqYjsKKwlpZiAoIWRfdW5oYXNoZWQoZGVudHJ5KSkgeworCQlzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqYjsKKwkJaWYgKHVubGlrZWx5KGRlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9ESVNDT05ORUNURUQpKQorCQkJYiA9ICZkZW50cnktPmRfc2ItPnNfYW5vbjsKKwkJZWxzZQogCQkJYiA9IGRfaGFzaChkZW50cnktPmRfcGFyZW50LCBkZW50cnktPmRfbmFtZS5oYXNoKTsKLQkJCXNwaW5fbG9ja19idWNrZXQoYik7Ci0JCQkvKgotCQkJICogV2UgbWF5IG5vdCBhY3R1YWxseSBuZWVkIHRvIHB1dCBEQ0FDSEVfVU5IQVNIRUQKLQkJCSAqIG1hbmlwdWxhdGlvbnMgdW5kZXIgdGhlIGhhc2ggbG9jaywgYnV0IGZvbGxvdwotCQkJICogdGhlIHByaW5jaXBsZSBvZiBsZWFzdCBzdXJwcmlzZS4KLQkJCSAqLwotCQkJZGVudHJ5LT5kX2ZsYWdzIHw9IERDQUNIRV9VTkhBU0hFRDsKLQkJCWhsaXN0X2JsX2RlbF9yY3UoJmRlbnRyeS0+ZF9oYXNoKTsKLQkJCXNwaW5fdW5sb2NrX2J1Y2tldChiKTsKLQkJCWRlbnRyeV9yY3V3YWxrX2JhcnJpZXIoZGVudHJ5KTsKLQkJfQorCisJCWhsaXN0X2JsX2xvY2soYik7CisJCV9faGxpc3RfYmxfZGVsKCZkZW50cnktPmRfaGFzaCk7CisJCWRlbnRyeS0+ZF9oYXNoLnBwcmV2ID0gTlVMTDsKKwkJaGxpc3RfYmxfdW5sb2NrKGIpOworCisJCWRlbnRyeV9yY3V3YWxrX2JhcnJpZXIoZGVudHJ5KTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MKF9fZF9kcm9wKTsKQEAgLTEzMDQsNyArMTI4Myw3IEBACiAJZG5hbWVbbmFtZS0+bGVuXSA9IDA7CiAKIAlkZW50cnktPmRfY291bnQgPSAxOwotCWRlbnRyeS0+ZF9mbGFncyA9IERDQUNIRV9VTkhBU0hFRDsKKwlkZW50cnktPmRfZmxhZ3MgPSAwOwogCXNwaW5fbG9ja19pbml0KCZkZW50cnktPmRfbG9jayk7CiAJc2VxY291bnRfaW5pdCgmZGVudHJ5LT5kX3NlcSk7CiAJZGVudHJ5LT5kX2lub2RlID0gTlVMTDsKQEAgLTE2MDYsMTAgKzE1ODUsOSBAQAogCXRtcC0+ZF9pbm9kZSA9IGlub2RlOwogCXRtcC0+ZF9mbGFncyB8PSBEQ0FDSEVfRElTQ09OTkVDVEVEOwogCWxpc3RfYWRkKCZ0bXAtPmRfYWxpYXMsICZpbm9kZS0+aV9kZW50cnkpOwotCWJpdF9zcGluX2xvY2soMCwgKHVuc2lnbmVkIGxvbmcgKikmdG1wLT5kX3NiLT5zX2Fub24uZmlyc3QpOwotCXRtcC0+ZF9mbGFncyAmPSB+RENBQ0hFX1VOSEFTSEVEOworCWhsaXN0X2JsX2xvY2soJnRtcC0+ZF9zYi0+c19hbm9uKTsKIAlobGlzdF9ibF9hZGRfaGVhZCgmdG1wLT5kX2hhc2gsICZ0bXAtPmRfc2ItPnNfYW5vbik7Ci0JX19iaXRfc3Bpbl91bmxvY2soMCwgKHVuc2lnbmVkIGxvbmcgKikmdG1wLT5kX3NiLT5zX2Fub24uZmlyc3QpOworCWhsaXN0X2JsX3VubG9jaygmdG1wLT5kX3NiLT5zX2Fub24pOwogCXNwaW5fdW5sb2NrKCZ0bXAtPmRfbG9jayk7CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCXNlY3VyaXR5X2RfaW5zdGFudGlhdGUodG1wLCBpbm9kZSk7CkBAIC0xNzg5LDcgKzE3NjcsNyBAQAogCXVuc2lnbmVkIGludCBsZW4gPSBuYW1lLT5sZW47CiAJdW5zaWduZWQgaW50IGhhc2ggPSBuYW1lLT5oYXNoOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0ciA9IG5hbWUtPm5hbWU7Ci0Jc3RydWN0IGRjYWNoZV9oYXNoX2J1Y2tldCAqYiA9IGRfaGFzaChwYXJlbnQsIGhhc2gpOworCXN0cnVjdCBobGlzdF9ibF9oZWFkICpiID0gZF9oYXNoKHBhcmVudCwgaGFzaCk7CiAJc3RydWN0IGhsaXN0X2JsX25vZGUgKm5vZGU7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogCkBAIC0xODEzLDcgKzE3OTEsNyBAQAogCSAqCiAJICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcGF0aC1sb29rdXAudHh0IGZvciBtb3JlIGRldGFpbHMuCiAJICovCi0JaGxpc3RfYmxfZm9yX2VhY2hfZW50cnlfcmN1KGRlbnRyeSwgbm9kZSwgJmItPmhlYWQsIGRfaGFzaCkgeworCWhsaXN0X2JsX2Zvcl9lYWNoX2VudHJ5X3JjdShkZW50cnksIG5vZGUsIGIsIGRfaGFzaCkgewogCQlzdHJ1Y3QgaW5vZGUgKmk7CiAJCWNvbnN0IGNoYXIgKnRuYW1lOwogCQlpbnQgdGxlbjsKQEAgLTE5MDgsNyArMTg4Niw3IEBACiAJdW5zaWduZWQgaW50IGxlbiA9IG5hbWUtPmxlbjsKIAl1bnNpZ25lZCBpbnQgaGFzaCA9IG5hbWUtPmhhc2g7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqc3RyID0gbmFtZS0+bmFtZTsKLQlzdHJ1Y3QgZGNhY2hlX2hhc2hfYnVja2V0ICpiID0gZF9oYXNoKHBhcmVudCwgaGFzaCk7CisJc3RydWN0IGhsaXN0X2JsX2hlYWQgKmIgPSBkX2hhc2gocGFyZW50LCBoYXNoKTsKIAlzdHJ1Y3QgaGxpc3RfYmxfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgZGVudHJ5ICpmb3VuZCA9IE5VTEw7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwpAQCAtMTkzNSw3ICsxOTEzLDcgQEAKIAkgKi8KIAlyY3VfcmVhZF9sb2NrKCk7CiAJCi0JaGxpc3RfYmxfZm9yX2VhY2hfZW50cnlfcmN1KGRlbnRyeSwgbm9kZSwgJmItPmhlYWQsIGRfaGFzaCkgeworCWhsaXN0X2JsX2Zvcl9lYWNoX2VudHJ5X3JjdShkZW50cnksIG5vZGUsIGIsIGRfaGFzaCkgewogCQljb25zdCBjaGFyICp0bmFtZTsKIAkJaW50IHRsZW47CiAKQEAgLTIwODYsMTMgKzIwNjQsMTMgQEAKIH0KIEVYUE9SVF9TWU1CT0woZF9kZWxldGUpOwogCi1zdGF0aWMgdm9pZCBfX2RfcmVoYXNoKHN0cnVjdCBkZW50cnkgKiBlbnRyeSwgc3RydWN0IGRjYWNoZV9oYXNoX2J1Y2tldCAqYikKK3N0YXRpYyB2b2lkIF9fZF9yZWhhc2goc3RydWN0IGRlbnRyeSAqIGVudHJ5LCBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqYikKIHsKIAlCVUdfT04oIWRfdW5oYXNoZWQoZW50cnkpKTsKLQlzcGluX2xvY2tfYnVja2V0KGIpOwotIAllbnRyeS0+ZF9mbGFncyAmPSB+RENBQ0hFX1VOSEFTSEVEOwotCWhsaXN0X2JsX2FkZF9oZWFkX3JjdSgmZW50cnktPmRfaGFzaCwgJmItPmhlYWQpOwotCXNwaW5fdW5sb2NrX2J1Y2tldChiKTsKKwlobGlzdF9ibF9sb2NrKGIpOworCWVudHJ5LT5kX2ZsYWdzIHw9IERDQUNIRV9SQ1VBQ0NFU1M7CisJaGxpc3RfYmxfYWRkX2hlYWRfcmN1KCZlbnRyeS0+ZF9oYXNoLCBiKTsKKwlobGlzdF9ibF91bmxvY2soYik7CiB9CiAKIHN0YXRpYyB2b2lkIF9kX3JlaGFzaChzdHJ1Y3QgZGVudHJ5ICogZW50cnkpCkBAIC0zMDI1LDcgKzMwMDMsNyBAQAogCiAJZGVudHJ5X2hhc2h0YWJsZSA9CiAJCWFsbG9jX2xhcmdlX3N5c3RlbV9oYXNoKCJEZW50cnkgY2FjaGUiLAotCQkJCQlzaXplb2Yoc3RydWN0IGRjYWNoZV9oYXNoX2J1Y2tldCksCisJCQkJCXNpemVvZihzdHJ1Y3QgaGxpc3RfYmxfaGVhZCksCiAJCQkJCWRoYXNoX2VudHJpZXMsCiAJCQkJCTEzLAogCQkJCQlIQVNIX0VBUkxZLApAQCAtMzAzNCw3ICszMDEyLDcgQEAKIAkJCQkJMCk7CiAKIAlmb3IgKGxvb3AgPSAwOyBsb29wIDwgKDEgPDwgZF9oYXNoX3NoaWZ0KTsgbG9vcCsrKQotCQlJTklUX0hMSVNUX0JMX0hFQUQoJmRlbnRyeV9oYXNodGFibGVbbG9vcF0uaGVhZCk7CisJCUlOSVRfSExJU1RfQkxfSEVBRChkZW50cnlfaGFzaHRhYmxlICsgbG9vcCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBkY2FjaGVfaW5pdCh2b2lkKQpAQCAtMzA1Nyw3ICszMDM1LDcgQEAKIAogCWRlbnRyeV9oYXNodGFibGUgPQogCQlhbGxvY19sYXJnZV9zeXN0ZW1faGFzaCgiRGVudHJ5IGNhY2hlIiwKLQkJCQkJc2l6ZW9mKHN0cnVjdCBkY2FjaGVfaGFzaF9idWNrZXQpLAorCQkJCQlzaXplb2Yoc3RydWN0IGhsaXN0X2JsX2hlYWQpLAogCQkJCQlkaGFzaF9lbnRyaWVzLAogCQkJCQkxMywKIAkJCQkJMCwKQEAgLTMwNjYsNyArMzA0NCw3IEBACiAJCQkJCTApOwogCiAJZm9yIChsb29wID0gMDsgbG9vcCA8ICgxIDw8IGRfaGFzaF9zaGlmdCk7IGxvb3ArKykKLQkJSU5JVF9ITElTVF9CTF9IRUFEKCZkZW50cnlfaGFzaHRhYmxlW2xvb3BdLmhlYWQpOworCQlJTklUX0hMSVNUX0JMX0hFQUQoZGVudHJ5X2hhc2h0YWJsZSArIGxvb3ApOwogfQogCiAvKiBTTEFCIGNhY2hlIGZvciBfX2dldG5hbWUoKSBjb25zdW1lcnMgKi8KZGlmZiAtLWdpdCBhL2ZzL2RlYnVnZnMvZmlsZS5jIGIvZnMvZGVidWdmcy9maWxlLmMKaW5kZXggODlkMzk0ZC4uOTBmNzY1NyAxMDA2NDQKLS0tIGEvZnMvZGVidWdmcy9maWxlLmMKKysrIGIvZnMvZGVidWdmcy9maWxlLmMKQEAgLTQyOCwyNiArNDI4LDE3IEBACiAJCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJY2hhciBidWZbMzJdOwotCWludCBidWZfc2l6ZTsKKwlzaXplX3QgYnVmX3NpemU7CisJYm9vbCBidjsKIAl1MzIgKnZhbCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAogCWJ1Zl9zaXplID0gbWluKGNvdW50LCAoc2l6ZW9mKGJ1ZiktMSkpOwogCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBidWZfc2l6ZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0Jc3dpdGNoIChidWZbMF0pIHsKLQljYXNlICd5JzoKLQljYXNlICdZJzoKLQljYXNlICcxJzoKLQkJKnZhbCA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgJ24nOgotCWNhc2UgJ04nOgotCWNhc2UgJzAnOgotCQkqdmFsID0gMDsKLQkJYnJlYWs7Ci0JfQotCQorCWlmIChzdHJ0b2Jvb2woYnVmLCAmYnYpID09IDApCisJCSp2YWwgPSBidjsKKwogCXJldHVybiBjb3VudDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvY3J5cHRvLmMgYi9mcy9lY3J5cHRmcy9jcnlwdG8uYwppbmRleCBkMmE3MGE0Li5iOGQ1YzgwIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9jcnlwdG8uYworKysgYi9mcy9lY3J5cHRmcy9jcnlwdG8uYwpAQCAtMTQ1Miw2ICsxNDUyLDI1IEBACiAJY3J5cHRfc3RhdC0+bWV0YWRhdGFfc2l6ZSA9IEVDUllQVEZTX01JTklNVU1fSEVBREVSX0VYVEVOVF9TSVpFOwogfQogCit2b2lkIGVjcnlwdGZzX2lfc2l6ZV9pbml0KGNvbnN0IGNoYXIgKnBhZ2VfdmlydCwgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgZWNyeXB0ZnNfbW91bnRfY3J5cHRfc3RhdCAqbW91bnRfY3J5cHRfc3RhdDsKKwlzdHJ1Y3QgZWNyeXB0ZnNfY3J5cHRfc3RhdCAqY3J5cHRfc3RhdDsKKwl1NjQgZmlsZV9zaXplOworCisJY3J5cHRfc3RhdCA9ICZlY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGlub2RlKS0+Y3J5cHRfc3RhdDsKKwltb3VudF9jcnlwdF9zdGF0ID0KKwkJJmVjcnlwdGZzX3N1cGVyYmxvY2tfdG9fcHJpdmF0ZShpbm9kZS0+aV9zYiktPm1vdW50X2NyeXB0X3N0YXQ7CisJaWYgKG1vdW50X2NyeXB0X3N0YXQtPmZsYWdzICYgRUNSWVBURlNfRU5DUllQVEVEX1ZJRVdfRU5BQkxFRCkgeworCQlmaWxlX3NpemUgPSBpX3NpemVfcmVhZChlY3J5cHRmc19pbm9kZV90b19sb3dlcihpbm9kZSkpOworCQlpZiAoY3J5cHRfc3RhdC0+ZmxhZ3MgJiBFQ1JZUFRGU19NRVRBREFUQV9JTl9YQVRUUikKKwkJCWZpbGVfc2l6ZSArPSBjcnlwdF9zdGF0LT5tZXRhZGF0YV9zaXplOworCX0gZWxzZQorCQlmaWxlX3NpemUgPSBnZXRfdW5hbGlnbmVkX2JlNjQocGFnZV92aXJ0KTsKKwlpX3NpemVfd3JpdGUoaW5vZGUsIChsb2ZmX3QpZmlsZV9zaXplKTsKKwljcnlwdF9zdGF0LT5mbGFncyB8PSBFQ1JZUFRGU19JX1NJWkVfSU5JVElBTElaRUQ7Cit9CisKIC8qKgogICogZWNyeXB0ZnNfcmVhZF9oZWFkZXJzX3ZpcnQKICAqIEBwYWdlX3ZpcnQ6IFRoZSB2aXJ0dWFsIGFkZHJlc3MgaW50byB3aGljaCB0byByZWFkIHRoZSBoZWFkZXJzCkBAIC0xNDgyLDYgKzE1MDEsOCBAQAogCQlyYyA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KKwlpZiAoIShjcnlwdF9zdGF0LT5mbGFncyAmIEVDUllQVEZTX0lfU0laRV9JTklUSUFMSVpFRCkpCisJCWVjcnlwdGZzX2lfc2l6ZV9pbml0KHBhZ2VfdmlydCwgZWNyeXB0ZnNfZGVudHJ5LT5kX2lub2RlKTsKIAlvZmZzZXQgKz0gTUFHSUNfRUNSWVBURlNfTUFSS0VSX1NJWkVfQllURVM7CiAJcmMgPSBlY3J5cHRmc19wcm9jZXNzX2ZsYWdzKGNyeXB0X3N0YXQsIChwYWdlX3ZpcnQgKyBvZmZzZXQpLAogCQkJCSAgICAmYnl0ZXNfcmVhZCk7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaCBiL2ZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oCmluZGV4IGJkM2NhZmQuLmU3MDI4MjcgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oCisrKyBiL2ZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oCkBAIC0yNjksNiArMjY5LDcgQEAKICNkZWZpbmUgRUNSWVBURlNfRU5DRk5fVVNFX01PVU5UX0ZORUsgMHgwMDAwMDgwMAogI2RlZmluZSBFQ1JZUFRGU19FTkNGTl9VU0VfRkVLICAgICAgICAweDAwMDAxMDAwCiAjZGVmaW5lIEVDUllQVEZTX1VOTElOS19TSUdTICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgRUNSWVBURlNfSV9TSVpFX0lOSVRJQUxJWkVEICAgMHgwMDAwNDAwMAogCXUzMiBmbGFnczsKIAl1bnNpZ25lZCBpbnQgZmlsZV92ZXJzaW9uOwogCXNpemVfdCBpdl9ieXRlczsKQEAgLTI5NSw2ICsyOTYsOCBAQAogc3RydWN0IGVjcnlwdGZzX2lub2RlX2luZm8gewogCXN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7CiAJc3RydWN0IGlub2RlICp3aWlfaW5vZGU7CisJc3RydWN0IG11dGV4IGxvd2VyX2ZpbGVfbXV0ZXg7CisJYXRvbWljX3QgbG93ZXJfZmlsZV9jb3VudDsKIAlzdHJ1Y3QgZmlsZSAqbG93ZXJfZmlsZTsKIAlzdHJ1Y3QgZWNyeXB0ZnNfY3J5cHRfc3RhdCBjcnlwdF9zdGF0OwogfTsKQEAgLTYyNiw2ICs2MjksNyBAQAogaW50IGVjcnlwdGZzX2ludGVycG9zZShzdHJ1Y3QgZGVudHJ5ICpoaWRkZW5fZGVudHJ5LAogCQkgICAgICAgc3RydWN0IGRlbnRyeSAqdGhpc19kZW50cnksIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCSAgICAgICB1MzIgZmxhZ3MpOwordm9pZCBlY3J5cHRmc19pX3NpemVfaW5pdChjb25zdCBjaGFyICpwYWdlX3ZpcnQsIHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogaW50IGVjcnlwdGZzX2xvb2t1cF9hbmRfaW50ZXJwb3NlX2xvd2VyKHN0cnVjdCBkZW50cnkgKmVjcnlwdGZzX2RlbnRyeSwKIAkJCQkJc3RydWN0IGRlbnRyeSAqbG93ZXJfZGVudHJ5LAogCQkJCQlzdHJ1Y3QgaW5vZGUgKmVjcnlwdGZzX2Rpcl9pbm9kZSk7CkBAIC03NTcsNyArNzYxLDggQEAKIAkJCSAgICAgc3RydWN0IGRlbnRyeSAqbG93ZXJfZGVudHJ5LAogCQkJICAgICBzdHJ1Y3QgdmZzbW91bnQgKmxvd2VyX21udCwKIAkJCSAgICAgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpOwotaW50IGVjcnlwdGZzX2luaXRfcGVyc2lzdGVudF9maWxlKHN0cnVjdCBkZW50cnkgKmVjcnlwdGZzX2RlbnRyeSk7CitpbnQgZWNyeXB0ZnNfZ2V0X2xvd2VyX2ZpbGUoc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5KTsKK3ZvaWQgZWNyeXB0ZnNfcHV0X2xvd2VyX2ZpbGUoc3RydWN0IGlub2RlICppbm9kZSk7CiBpbnQKIGVjcnlwdGZzX3dyaXRlX3RhZ183MF9wYWNrZXQoY2hhciAqZGVzdCwgc2l6ZV90ICpyZW1haW5pbmdfYnl0ZXMsCiAJCQkgICAgIHNpemVfdCAqcGFja2V0X3NpemUsCmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9maWxlLmMgYi9mcy9lY3J5cHRmcy9maWxlLmMKaW5kZXggY2VkYzkxMy4uNTY2ZTU0NyAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvZmlsZS5jCisrKyBiL2ZzL2VjcnlwdGZzL2ZpbGUuYwpAQCAtMTkxLDEwICsxOTEsMTAgQEAKIAkJCQkgICAgICB8IEVDUllQVEZTX0VOQ1JZUFRFRCk7CiAJfQogCW11dGV4X3VubG9jaygmY3J5cHRfc3RhdC0+Y3NfbXV0ZXgpOwotCXJjID0gZWNyeXB0ZnNfaW5pdF9wZXJzaXN0ZW50X2ZpbGUoZWNyeXB0ZnNfZGVudHJ5KTsKKwlyYyA9IGVjcnlwdGZzX2dldF9sb3dlcl9maWxlKGVjcnlwdGZzX2RlbnRyeSk7CiAJaWYgKHJjKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIGF0dGVtcHRpbmcgdG8gaW5pdGlhbGl6ZSAiCi0JCQkidGhlIHBlcnNpc3RlbnQgZmlsZSBmb3IgdGhlIGRlbnRyeSB3aXRoIG5hbWUgIgorCQkJInRoZSBsb3dlciBmaWxlIGZvciB0aGUgZGVudHJ5IHdpdGggbmFtZSAiCiAJCQkiWyVzXTsgcmMgPSBbJWRdXG4iLCBfX2Z1bmNfXywKIAkJCWVjcnlwdGZzX2RlbnRyeS0+ZF9uYW1lLm5hbWUsIHJjKTsKIAkJZ290byBvdXRfZnJlZTsKQEAgLTIwMiw5ICsyMDIsOSBAQAogCWlmICgoZWNyeXB0ZnNfaW5vZGVfdG9fcHJpdmF0ZShpbm9kZSktPmxvd2VyX2ZpbGUtPmZfZmxhZ3MgJiBPX0FDQ01PREUpCiAJICAgID09IE9fUkRPTkxZICYmIChmaWxlLT5mX2ZsYWdzICYgT19BQ0NNT0RFKSAhPSBPX1JET05MWSkgewogCQlyYyA9IC1FUEVSTTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IExvd2VyIHBlcnNpc3RlbnQgZmlsZSBpcyBSTzsgZUNyeXB0ZnMgIgorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTG93ZXIgZmlsZSBpcyBSTzsgZUNyeXB0ZnMgIgogCQkgICAgICAgImZpbGUgbXVzdCBoZW5jZSBiZSBvcGVuZWQgUk9cbiIsIF9fZnVuY19fKTsKLQkJZ290byBvdXRfZnJlZTsKKwkJZ290byBvdXRfcHV0OwogCX0KIAllY3J5cHRmc19zZXRfZmlsZV9sb3dlcigKIAkJZmlsZSwgZWNyeXB0ZnNfaW5vZGVfdG9fcHJpdmF0ZShpbm9kZSktPmxvd2VyX2ZpbGUpOwpAQCAtMjMyLDEwICsyMzIsMTEgQEAKIAkJCQkgICAgICAgIlBsYWludGV4dCBwYXNzdGhyb3VnaCBtb2RlIGlzIG5vdCAiCiAJCQkJICAgICAgICJlbmFibGVkOyByZXR1cm5pbmcgLUVJT1xuIik7CiAJCQkJbXV0ZXhfdW5sb2NrKCZjcnlwdF9zdGF0LT5jc19tdXRleCk7Ci0JCQkJZ290byBvdXRfZnJlZTsKKwkJCQlnb3RvIG91dF9wdXQ7CiAJCQl9CiAJCQlyYyA9IDA7Ci0JCQljcnlwdF9zdGF0LT5mbGFncyAmPSB+KEVDUllQVEZTX0VOQ1JZUFRFRCk7CisJCQljcnlwdF9zdGF0LT5mbGFncyAmPSB+KEVDUllQVEZTX0lfU0laRV9JTklUSUFMSVpFRAorCQkJCQkgICAgICAgfCBFQ1JZUFRGU19FTkNSWVBURUQpOwogCQkJbXV0ZXhfdW5sb2NrKCZjcnlwdF9zdGF0LT5jc19tdXRleCk7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMjQ1LDYgKzI0Niw4IEBACiAJCQkiWzB4JS4xNmx4XSBzaXplOiBbMHglLjE2bGx4XVxuIiwgaW5vZGUsIGlub2RlLT5pX2lubywKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpaV9zaXplX3JlYWQoaW5vZGUpKTsKIAlnb3RvIG91dDsKK291dF9wdXQ6CisJZWNyeXB0ZnNfcHV0X2xvd2VyX2ZpbGUoaW5vZGUpOwogb3V0X2ZyZWU6CiAJa21lbV9jYWNoZV9mcmVlKGVjcnlwdGZzX2ZpbGVfaW5mb19jYWNoZSwKIAkJCWVjcnlwdGZzX2ZpbGVfdG9fcHJpdmF0ZShmaWxlKSk7CkBAIC0yNTQsMTcgKzI1NywxMyBAQAogCiBzdGF0aWMgaW50IGVjcnlwdGZzX2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxlLCBmbF9vd25lcl90IHRkKQogewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGZpbGUgKmxvd2VyX2ZpbGUgPSBOVUxMOwotCi0JbG93ZXJfZmlsZSA9IGVjcnlwdGZzX2ZpbGVfdG9fbG93ZXIoZmlsZSk7Ci0JaWYgKGxvd2VyX2ZpbGUtPmZfb3AgJiYgbG93ZXJfZmlsZS0+Zl9vcC0+Zmx1c2gpCi0JCXJjID0gbG93ZXJfZmlsZS0+Zl9vcC0+Zmx1c2gobG93ZXJfZmlsZSwgdGQpOwotCXJldHVybiByYzsKKwlyZXR1cm4gZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUKKwkgICAgICAgPyBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KGZpbGUtPmZfbWFwcGluZykgOiAwOwogfQogCiBzdGF0aWMgaW50IGVjcnlwdGZzX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CisJZWNyeXB0ZnNfcHV0X2xvd2VyX2ZpbGUoaW5vZGUpOwogCWttZW1fY2FjaGVfZnJlZShlY3J5cHRmc19maWxlX2luZm9fY2FjaGUsCiAJCQllY3J5cHRmc19maWxlX3RvX3ByaXZhdGUoZmlsZSkpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvaW5vZGUuYyBiL2ZzL2VjcnlwdGZzL2lub2RlLmMKaW5kZXggZjk5MDUxYi4uNGQ0Y2M2YSAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvaW5vZGUuYworKysgYi9mcy9lY3J5cHRmcy9pbm9kZS5jCkBAIC0xNjgsMTkgKzE2OCwxOCBAQAogCQkJCSJjb250ZXh0OyByYyA9IFslZF1cbiIsIHJjKTsKIAkJZ290byBvdXQ7CiAJfQotCXJjID0gZWNyeXB0ZnNfaW5pdF9wZXJzaXN0ZW50X2ZpbGUoZWNyeXB0ZnNfZGVudHJ5KTsKKwlyYyA9IGVjcnlwdGZzX2dldF9sb3dlcl9maWxlKGVjcnlwdGZzX2RlbnRyeSk7CiAJaWYgKHJjKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIGF0dGVtcHRpbmcgdG8gaW5pdGlhbGl6ZSAiCi0JCQkidGhlIHBlcnNpc3RlbnQgZmlsZSBmb3IgdGhlIGRlbnRyeSB3aXRoIG5hbWUgIgorCQkJInRoZSBsb3dlciBmaWxlIGZvciB0aGUgZGVudHJ5IHdpdGggbmFtZSAiCiAJCQkiWyVzXTsgcmMgPSBbJWRdXG4iLCBfX2Z1bmNfXywKIAkJCWVjcnlwdGZzX2RlbnRyeS0+ZF9uYW1lLm5hbWUsIHJjKTsKIAkJZ290byBvdXQ7CiAJfQogCXJjID0gZWNyeXB0ZnNfd3JpdGVfbWV0YWRhdGEoZWNyeXB0ZnNfZGVudHJ5KTsKLQlpZiAocmMpIHsKKwlpZiAocmMpCiAJCXByaW50ayhLRVJOX0VSUiAiRXJyb3Igd3JpdGluZyBoZWFkZXJzOyByYyA9IFslZF1cbiIsIHJjKTsKLQkJZ290byBvdXQ7Ci0JfQorCWVjcnlwdGZzX3B1dF9sb3dlcl9maWxlKGVjcnlwdGZzX2RlbnRyeS0+ZF9pbm9kZSk7CiBvdXQ6CiAJcmV0dXJuIHJjOwogfQpAQCAtMjI2LDExICsyMjUsOSBAQAogCXN0cnVjdCBkZW50cnkgKmxvd2VyX2Rpcl9kZW50cnk7CiAJc3RydWN0IHZmc21vdW50ICpsb3dlcl9tbnQ7CiAJc3RydWN0IGlub2RlICpsb3dlcl9pbm9kZTsKLQlzdHJ1Y3QgZWNyeXB0ZnNfbW91bnRfY3J5cHRfc3RhdCAqbW91bnRfY3J5cHRfc3RhdDsKIAlzdHJ1Y3QgZWNyeXB0ZnNfY3J5cHRfc3RhdCAqY3J5cHRfc3RhdDsKIAljaGFyICpwYWdlX3ZpcnQgPSBOVUxMOwotCXU2NCBmaWxlX3NpemU7Ci0JaW50IHJjID0gMDsKKwlpbnQgcHV0X2xvd2VyID0gMCwgcmMgPSAwOwogCiAJbG93ZXJfZGlyX2RlbnRyeSA9IGxvd2VyX2RlbnRyeS0+ZF9wYXJlbnQ7CiAJbG93ZXJfbW50ID0gbW50Z2V0KGVjcnlwdGZzX2RlbnRyeV90b19sb3dlcl9tbnQoCkBAIC0yNzcsMTQgKzI3NCwxNSBAQAogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KLQlyYyA9IGVjcnlwdGZzX2luaXRfcGVyc2lzdGVudF9maWxlKGVjcnlwdGZzX2RlbnRyeSk7CisJcmMgPSBlY3J5cHRmc19nZXRfbG93ZXJfZmlsZShlY3J5cHRmc19kZW50cnkpOwogCWlmIChyYykgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBhdHRlbXB0aW5nIHRvIGluaXRpYWxpemUgIgotCQkJInRoZSBwZXJzaXN0ZW50IGZpbGUgZm9yIHRoZSBkZW50cnkgd2l0aCBuYW1lICIKKwkJCSJ0aGUgbG93ZXIgZmlsZSBmb3IgdGhlIGRlbnRyeSB3aXRoIG5hbWUgIgogCQkJIlslc107IHJjID0gWyVkXVxuIiwgX19mdW5jX18sCiAJCQllY3J5cHRmc19kZW50cnktPmRfbmFtZS5uYW1lLCByYyk7CiAJCWdvdG8gb3V0X2ZyZWVfa21lbTsKIAl9CisJcHV0X2xvd2VyID0gMTsKIAljcnlwdF9zdGF0ID0gJmVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoCiAJCQkJCWVjcnlwdGZzX2RlbnRyeS0+ZF9pbm9kZSktPmNyeXB0X3N0YXQ7CiAJLyogVE9ETzogbG9jayBmb3IgY3J5cHRfc3RhdCBjb21wYXJpc29uICovCkBAIC0zMDIsMTggKzMwMCw3IEBACiAJCX0KIAkJY3J5cHRfc3RhdC0+ZmxhZ3MgfD0gRUNSWVBURlNfTUVUQURBVEFfSU5fWEFUVFI7CiAJfQotCW1vdW50X2NyeXB0X3N0YXQgPSAmZWNyeXB0ZnNfc3VwZXJibG9ja190b19wcml2YXRlKAotCQllY3J5cHRmc19kZW50cnktPmRfc2IpLT5tb3VudF9jcnlwdF9zdGF0OwotCWlmIChtb3VudF9jcnlwdF9zdGF0LT5mbGFncyAmIEVDUllQVEZTX0VOQ1JZUFRFRF9WSUVXX0VOQUJMRUQpIHsKLQkJaWYgKGNyeXB0X3N0YXQtPmZsYWdzICYgRUNSWVBURlNfTUVUQURBVEFfSU5fWEFUVFIpCi0JCQlmaWxlX3NpemUgPSAoY3J5cHRfc3RhdC0+bWV0YWRhdGFfc2l6ZQotCQkJCSAgICAgKyBpX3NpemVfcmVhZChsb3dlcl9kZW50cnktPmRfaW5vZGUpKTsKLQkJZWxzZQotCQkJZmlsZV9zaXplID0gaV9zaXplX3JlYWQobG93ZXJfZGVudHJ5LT5kX2lub2RlKTsKLQl9IGVsc2UgewotCQlmaWxlX3NpemUgPSBnZXRfdW5hbGlnbmVkX2JlNjQocGFnZV92aXJ0KTsKLQl9Ci0JaV9zaXplX3dyaXRlKGVjcnlwdGZzX2RlbnRyeS0+ZF9pbm9kZSwgKGxvZmZfdClmaWxlX3NpemUpOworCWVjcnlwdGZzX2lfc2l6ZV9pbml0KHBhZ2VfdmlydCwgZWNyeXB0ZnNfZGVudHJ5LT5kX2lub2RlKTsKIG91dF9mcmVlX2ttZW06CiAJa21lbV9jYWNoZV9mcmVlKGVjcnlwdGZzX2hlYWRlcl9jYWNoZV8yLCBwYWdlX3ZpcnQpOwogCWdvdG8gb3V0OwpAQCAtMzIyLDYgKzMwOSw4IEBACiAJbW50cHV0KGxvd2VyX21udCk7CiAJZF9kcm9wKGVjcnlwdGZzX2RlbnRyeSk7CiBvdXQ6CisJaWYgKHB1dF9sb3dlcikKKwkJZWNyeXB0ZnNfcHV0X2xvd2VyX2ZpbGUoZWNyeXB0ZnNfZGVudHJ5LT5kX2lub2RlKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTUzOCw4ICs1MjcsNiBAQAogCWRnZXQobG93ZXJfZGVudHJ5KTsKIAlyYyA9IHZmc19ybWRpcihsb3dlcl9kaXJfZGVudHJ5LT5kX2lub2RlLCBsb3dlcl9kZW50cnkpOwogCWRwdXQobG93ZXJfZGVudHJ5KTsKLQlpZiAoIXJjKQotCQlkX2RlbGV0ZShsb3dlcl9kZW50cnkpOwogCWZzc3RhY2tfY29weV9hdHRyX3RpbWVzKGRpciwgbG93ZXJfZGlyX2RlbnRyeS0+ZF9pbm9kZSk7CiAJZGlyLT5pX25saW5rID0gbG93ZXJfZGlyX2RlbnRyeS0+ZF9pbm9kZS0+aV9ubGluazsKIAl1bmxvY2tfZGlyKGxvd2VyX2Rpcl9kZW50cnkpOwpAQCAtNjEwLDggKzU5Nyw4IEBACiAJCWZzc3RhY2tfY29weV9hdHRyX2FsbChvbGRfZGlyLCBsb3dlcl9vbGRfZGlyX2RlbnRyeS0+ZF9pbm9kZSk7CiBvdXRfbG9jazoKIAl1bmxvY2tfcmVuYW1lKGxvd2VyX29sZF9kaXJfZGVudHJ5LCBsb3dlcl9uZXdfZGlyX2RlbnRyeSk7Ci0JZHB1dChsb3dlcl9uZXdfZGVudHJ5LT5kX3BhcmVudCk7Ci0JZHB1dChsb3dlcl9vbGRfZGVudHJ5LT5kX3BhcmVudCk7CisJZHB1dChsb3dlcl9uZXdfZGlyX2RlbnRyeSk7CisJZHB1dChsb3dlcl9vbGRfZGlyX2RlbnRyeSk7CiAJZHB1dChsb3dlcl9uZXdfZGVudHJ5KTsKIAlkcHV0KGxvd2VyX29sZF9kZW50cnkpOwogCXJldHVybiByYzsKQEAgLTc1OSw4ICs3NDYsMTEgQEAKIAogCWlmICh1bmxpa2VseSgoaWEtPmlhX3NpemUgPT0gaV9zaXplKSkpIHsKIAkJbG93ZXJfaWEtPmlhX3ZhbGlkICY9IH5BVFRSX1NJWkU7Ci0JCWdvdG8gb3V0OworCQlyZXR1cm4gMDsKIAl9CisJcmMgPSBlY3J5cHRmc19nZXRfbG93ZXJfZmlsZShkZW50cnkpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOwogCWNyeXB0X3N0YXQgPSAmZWNyeXB0ZnNfaW5vZGVfdG9fcHJpdmF0ZShkZW50cnktPmRfaW5vZGUpLT5jcnlwdF9zdGF0OwogCS8qIFN3aXRjaCBvbiBncm93aW5nIG9yIHNocmlua2luZyBmaWxlICovCiAJaWYgKGlhLT5pYV9zaXplID4gaV9zaXplKSB7CkBAIC04MzgsNiArODI4LDcgQEAKIAkJCWxvd2VyX2lhLT5pYV92YWxpZCAmPSB+QVRUUl9TSVpFOwogCX0KIG91dDoKKwllY3J5cHRmc19wdXRfbG93ZXJfZmlsZShpbm9kZSk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC05MTMsNyArOTA0LDEzIEBACiAKIAkJbW91bnRfY3J5cHRfc3RhdCA9ICZlY3J5cHRmc19zdXBlcmJsb2NrX3RvX3ByaXZhdGUoCiAJCQlkZW50cnktPmRfc2IpLT5tb3VudF9jcnlwdF9zdGF0OworCQlyYyA9IGVjcnlwdGZzX2dldF9sb3dlcl9maWxlKGRlbnRyeSk7CisJCWlmIChyYykgeworCQkJbXV0ZXhfdW5sb2NrKCZjcnlwdF9zdGF0LT5jc19tdXRleCk7CisJCQlnb3RvIG91dDsKKwkJfQogCQlyYyA9IGVjcnlwdGZzX3JlYWRfbWV0YWRhdGEoZGVudHJ5KTsKKwkJZWNyeXB0ZnNfcHV0X2xvd2VyX2ZpbGUoaW5vZGUpOwogCQlpZiAocmMpIHsKIAkJCWlmICghKG1vdW50X2NyeXB0X3N0YXQtPmZsYWdzCiAJCQkgICAgICAmIEVDUllQVEZTX1BMQUlOVEVYVF9QQVNTVEhST1VHSF9FTkFCTEVEKSkgewpAQCAtOTI3LDEwICs5MjQsMTcgQEAKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAkJCXJjID0gMDsKLQkJCWNyeXB0X3N0YXQtPmZsYWdzICY9IH4oRUNSWVBURlNfRU5DUllQVEVEKTsKKwkJCWNyeXB0X3N0YXQtPmZsYWdzICY9IH4oRUNSWVBURlNfSV9TSVpFX0lOSVRJQUxJWkVECisJCQkJCSAgICAgICB8IEVDUllQVEZTX0VOQ1JZUFRFRCk7CiAJCX0KIAl9CiAJbXV0ZXhfdW5sb2NrKCZjcnlwdF9zdGF0LT5jc19tdXRleCk7CisJaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKKwkJcmMgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KGlub2RlLT5pX21hcHBpbmcpOworCQlpZiAocmMpCisJCQlnb3RvIG91dDsKKwkJZnNzdGFja19jb3B5X2F0dHJfYWxsKGlub2RlLCBsb3dlcl9pbm9kZSk7CisJfQogCW1lbWNweSgmbG93ZXJfaWEsIGlhLCBzaXplb2YobG93ZXJfaWEpKTsKIAlpZiAoaWEtPmlhX3ZhbGlkICYgQVRUUl9GSUxFKQogCQlsb3dlcl9pYS5pYV9maWxlID0gZWNyeXB0ZnNfZmlsZV90b19sb3dlcihpYS0+aWFfZmlsZSk7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9rdGhyZWFkLmMgYi9mcy9lY3J5cHRmcy9rdGhyZWFkLmMKaW5kZXggMDg1MWFiNi4uNjlmOTk0YSAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMva3RocmVhZC5jCisrKyBiL2ZzL2VjcnlwdGZzL2t0aHJlYWQuYwpAQCAtNDQsNyArNDQsNyBAQAogICogQGlnbm9yZWQ6IGlnbm9yZWQKICAqCiAgKiBUaGUgZUNyeXB0ZnMga2VybmVsIHRocmVhZCB0aGF0IGhhcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgZ2V0dGluZwotICogdGhlIGxvd2VyIHBlcnNpc3RlbnQgZmlsZSB3aXRoIFJXIHBlcm1pc3Npb25zLgorICogdGhlIGxvd2VyIGZpbGUgd2l0aCBSVyBwZXJtaXNzaW9ucy4KICAqCiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzczsgbm9uLXplcm8gb3RoZXJ3aXNlCiAgKi8KQEAgLTE0MSw4ICsxNDEsOCBAQAogCWludCByYyA9IDA7CiAKIAkvKiBDb3JyZXNwb25kaW5nIGRwdXQoKSBhbmQgbW50cHV0KCkgYXJlIGRvbmUgd2hlbiB0aGUKLQkgKiBwZXJzaXN0ZW50IGZpbGUgaXMgZnB1dCgpIHdoZW4gdGhlIGVDcnlwdGZzIGlub2RlIGlzCi0JICogZGVzdHJveWVkLiAqLworCSAqIGxvd2VyIGZpbGUgaXMgZnB1dCgpIHdoZW4gYWxsIGVDcnlwdGZzIGZpbGVzIGZvciB0aGUgaW5vZGUgYXJlCisJICogcmVsZWFzZWQuICovCiAJZGdldChsb3dlcl9kZW50cnkpOwogCW1udGdldChsb3dlcl9tbnQpOwogCWZsYWdzIHw9IElTX1JET05MWShsb3dlcl9kZW50cnktPmRfaW5vZGUpID8gT19SRE9OTFkgOiBPX1JEV1I7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9tYWluLmMgYi9mcy9lY3J5cHRmcy9tYWluLmMKaW5kZXggZmRiMmViMC4uODliOTMzOCAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvbWFpbi5jCisrKyBiL2ZzL2VjcnlwdGZzL21haW4uYwpAQCAtOTYsNyArOTYsNyBAQAogfQogCiAvKioKLSAqIGVjcnlwdGZzX2luaXRfcGVyc2lzdGVudF9maWxlCisgKiBlY3J5cHRmc19pbml0X2xvd2VyX2ZpbGUKICAqIEBlY3J5cHRmc19kZW50cnk6IEZ1bGx5IGluaXRpYWxpemVkIGVDcnlwdGZzIGRlbnRyeSBvYmplY3QsIHdpdGgKICAqICAgICAgICAgICAgICAgICAgIHRoZSBsb3dlciBkZW50cnkgYW5kIHRoZSBsb3dlciBtb3VudCBzZXQKICAqCkBAIC0xMDQsNDIgKzEwNCw3MCBAQAogICogaW5vZGUuIEFsbCBJL08gb3BlcmF0aW9ucyB0byB0aGUgbG93ZXIgaW5vZGUgb2NjdXIgdGhyb3VnaCB0aGF0CiAgKiBmaWxlLiBXaGVuIHRoZSBmaXJzdCBlQ3J5cHRmcyBkZW50cnkgdGhhdCBpbnRlcnBvc2VzIHdpdGggdGhlIGZpcnN0CiAgKiBsb3dlciBkZW50cnkgZm9yIHRoYXQgaW5vZGUgaXMgY3JlYXRlZCwgdGhpcyBmdW5jdGlvbiBjcmVhdGVzIHRoZQotICogcGVyc2lzdGVudCBmaWxlIHN0cnVjdCBhbmQgYXNzb2NpYXRlcyBpdCB3aXRoIHRoZSBlQ3J5cHRmcwotICogaW5vZGUuIFdoZW4gdGhlIGVDcnlwdGZzIGlub2RlIGlzIGRlc3Ryb3llZCwgdGhlIGZpbGUgaXMgY2xvc2VkLgorICogbG93ZXIgZmlsZSBzdHJ1Y3QgYW5kIGFzc29jaWF0ZXMgaXQgd2l0aCB0aGUgZUNyeXB0ZnMKKyAqIGlub2RlLiBXaGVuIGFsbCBlQ3J5cHRmcyBmaWxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGlub2RlIGFyZSByZWxlYXNlZCwgdGhlCisgKiBmaWxlIGlzIGNsb3NlZC4KICAqCi0gKiBUaGUgcGVyc2lzdGVudCBmaWxlIHdpbGwgYmUgb3BlbmVkIHdpdGggcmVhZC93cml0ZSBwZXJtaXNzaW9ucywgaWYKKyAqIFRoZSBsb3dlciBmaWxlIHdpbGwgYmUgb3BlbmVkIHdpdGggcmVhZC93cml0ZSBwZXJtaXNzaW9ucywgaWYKICAqIHBvc3NpYmxlLiBPdGhlcndpc2UsIGl0IGlzIG9wZW5lZCByZWFkLW9ubHkuCiAgKgotICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgaWYgYSBsb3dlciBwZXJzaXN0ZW50IGZpbGUgaXMgYWxyZWFkeQorICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgaWYgYSBsb3dlciBmaWxlIGlzIGFscmVhZHkKICAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgZUNyeXB0ZnMgaW5vZGUuCiAgKgogICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3M7IG5vbi16ZXJvIG90aGVyd2lzZQogICovCi1pbnQgZWNyeXB0ZnNfaW5pdF9wZXJzaXN0ZW50X2ZpbGUoc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5KQorc3RhdGljIGludCBlY3J5cHRmc19pbml0X2xvd2VyX2ZpbGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJCSAgICBzdHJ1Y3QgZmlsZSAqKmxvd2VyX2ZpbGUpCiB7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKLQlzdHJ1Y3QgZWNyeXB0ZnNfaW5vZGVfaW5mbyAqaW5vZGVfaW5mbyA9Ci0JCWVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoZWNyeXB0ZnNfZGVudHJ5LT5kX2lub2RlKTsKLQlpbnQgcmMgPSAwOworCXN0cnVjdCBkZW50cnkgKmxvd2VyX2RlbnRyeSA9IGVjcnlwdGZzX2RlbnRyeV90b19sb3dlcihkZW50cnkpOworCXN0cnVjdCB2ZnNtb3VudCAqbG93ZXJfbW50ID0gZWNyeXB0ZnNfZGVudHJ5X3RvX2xvd2VyX21udChkZW50cnkpOworCWludCByYzsKIAotCWlmICghaW5vZGVfaW5mby0+bG93ZXJfZmlsZSkgewotCQlzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kZW50cnk7Ci0JCXN0cnVjdCB2ZnNtb3VudCAqbG93ZXJfbW50ID0KLQkJCWVjcnlwdGZzX2RlbnRyeV90b19sb3dlcl9tbnQoZWNyeXB0ZnNfZGVudHJ5KTsKLQotCQlsb3dlcl9kZW50cnkgPSBlY3J5cHRmc19kZW50cnlfdG9fbG93ZXIoZWNyeXB0ZnNfZGVudHJ5KTsKLQkJcmMgPSBlY3J5cHRmc19wcml2aWxlZ2VkX29wZW4oJmlub2RlX2luZm8tPmxvd2VyX2ZpbGUsCi0JCQkJCSAgICAgIGxvd2VyX2RlbnRyeSwgbG93ZXJfbW50LCBjcmVkKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIG9wZW5pbmcgbG93ZXIgcGVyc2lzdGVudCBmaWxlICIKLQkJCSAgICAgICAiZm9yIGxvd2VyX2RlbnRyeSBbMHglcF0gYW5kIGxvd2VyX21udCBbMHglcF07ICIKLQkJCSAgICAgICAicmMgPSBbJWRdXG4iLCBsb3dlcl9kZW50cnksIGxvd2VyX21udCwgcmMpOwotCQkJaW5vZGVfaW5mby0+bG93ZXJfZmlsZSA9IE5VTEw7Ci0JCX0KKwlyYyA9IGVjcnlwdGZzX3ByaXZpbGVnZWRfb3Blbihsb3dlcl9maWxlLCBsb3dlcl9kZW50cnksIGxvd2VyX21udCwKKwkJCQkgICAgICBjcmVkKTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBvcGVuaW5nIGxvd2VyIGZpbGUgIgorCQkgICAgICAgImZvciBsb3dlcl9kZW50cnkgWzB4JXBdIGFuZCBsb3dlcl9tbnQgWzB4JXBdOyAiCisJCSAgICAgICAicmMgPSBbJWRdXG4iLCBsb3dlcl9kZW50cnksIGxvd2VyX21udCwgcmMpOworCQkoKmxvd2VyX2ZpbGUpID0gTlVMTDsKIAl9CiAJcmV0dXJuIHJjOwogfQogCitpbnQgZWNyeXB0ZnNfZ2V0X2xvd2VyX2ZpbGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBlY3J5cHRmc19pbm9kZV9pbmZvICppbm9kZV9pbmZvID0KKwkJZWNyeXB0ZnNfaW5vZGVfdG9fcHJpdmF0ZShkZW50cnktPmRfaW5vZGUpOworCWludCBjb3VudCwgcmMgPSAwOworCisJbXV0ZXhfbG9jaygmaW5vZGVfaW5mby0+bG93ZXJfZmlsZV9tdXRleCk7CisJY291bnQgPSBhdG9taWNfaW5jX3JldHVybigmaW5vZGVfaW5mby0+bG93ZXJfZmlsZV9jb3VudCk7CisJaWYgKFdBUk5fT05fT05DRShjb3VudCA8IDEpKQorCQlyYyA9IC1FSU5WQUw7CisJZWxzZSBpZiAoY291bnQgPT0gMSkgeworCQlyYyA9IGVjcnlwdGZzX2luaXRfbG93ZXJfZmlsZShkZW50cnksCisJCQkJCSAgICAgICZpbm9kZV9pbmZvLT5sb3dlcl9maWxlKTsKKwkJaWYgKHJjKQorCQkJYXRvbWljX3NldCgmaW5vZGVfaW5mby0+bG93ZXJfZmlsZV9jb3VudCwgMCk7CisJfQorCW11dGV4X3VubG9jaygmaW5vZGVfaW5mby0+bG93ZXJfZmlsZV9tdXRleCk7CisJcmV0dXJuIHJjOworfQorCit2b2lkIGVjcnlwdGZzX3B1dF9sb3dlcl9maWxlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGVjcnlwdGZzX2lub2RlX2luZm8gKmlub2RlX2luZm87CisKKwlpbm9kZV9pbmZvID0gZWNyeXB0ZnNfaW5vZGVfdG9fcHJpdmF0ZShpbm9kZSk7CisJaWYgKGF0b21pY19kZWNfYW5kX211dGV4X2xvY2soJmlub2RlX2luZm8tPmxvd2VyX2ZpbGVfY291bnQsCisJCQkJICAgICAgJmlub2RlX2luZm8tPmxvd2VyX2ZpbGVfbXV0ZXgpKSB7CisJCWZwdXQoaW5vZGVfaW5mby0+bG93ZXJfZmlsZSk7CisJCWlub2RlX2luZm8tPmxvd2VyX2ZpbGUgPSBOVUxMOworCQltdXRleF91bmxvY2soJmlub2RlX2luZm8tPmxvd2VyX2ZpbGVfbXV0ZXgpOworCX0KK30KKwogc3RhdGljIHN0cnVjdCBpbm9kZSAqZWNyeXB0ZnNfZ2V0X2lub2RlKHN0cnVjdCBpbm9kZSAqbG93ZXJfaW5vZGUsCiAJCSAgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvc3VwZXIuYyBiL2ZzL2VjcnlwdGZzL3N1cGVyLmMKaW5kZXggYmFjYzg4Mi4uMjQ1YjUxNyAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvc3VwZXIuYworKysgYi9mcy9lY3J5cHRmcy9zdXBlci5jCkBAIC01NSw2ICs1NSw4IEBACiAJaWYgKHVubGlrZWx5KCFpbm9kZV9pbmZvKSkKIAkJZ290byBvdXQ7CiAJZWNyeXB0ZnNfaW5pdF9jcnlwdF9zdGF0KCZpbm9kZV9pbmZvLT5jcnlwdF9zdGF0KTsKKwltdXRleF9pbml0KCZpbm9kZV9pbmZvLT5sb3dlcl9maWxlX211dGV4KTsKKwlhdG9taWNfc2V0KCZpbm9kZV9pbmZvLT5sb3dlcl9maWxlX2NvdW50LCAwKTsKIAlpbm9kZV9pbmZvLT5sb3dlcl9maWxlID0gTlVMTDsKIAlpbm9kZSA9ICZpbm9kZV9pbmZvLT52ZnNfaW5vZGU7CiBvdXQ6CkBAIC03Nyw4ICs3OSw3IEBACiAgKgogICogVGhpcyBpcyB1c2VkIGR1cmluZyB0aGUgZmluYWwgZGVzdHJ1Y3Rpb24gb2YgdGhlIGlub2RlLiAgQWxsCiAgKiBhbGxvY2F0aW9uIG9mIG1lbW9yeSByZWxhdGVkIHRvIHRoZSBpbm9kZSwgaW5jbHVkaW5nIGFsbG9jYXRlZAotICogbWVtb3J5IGluIHRoZSBjcnlwdF9zdGF0IHN0cnVjdCwgd2lsbCBiZSByZWxlYXNlZCBoZXJlLiBUaGlzCi0gKiBmdW5jdGlvbiBhbHNvIGZwdXQoKSdzIHRoZSBwZXJzaXN0ZW50IGZpbGUgZm9yIHRoZSBsb3dlciBpbm9kZS4KKyAqIG1lbW9yeSBpbiB0aGUgY3J5cHRfc3RhdCBzdHJ1Y3QsIHdpbGwgYmUgcmVsZWFzZWQgaGVyZS4KICAqIFRoZXJlIHNob3VsZCBiZSBubyBjaGFuY2UgdGhhdCB0aGlzIGRlYWxsb2NhdGlvbiB3aWxsIGJlIG1pc3NlZC4KICAqLwogc3RhdGljIHZvaWQgZWNyeXB0ZnNfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQpAQCAtODYsMTYgKzg3LDcgQEAKIAlzdHJ1Y3QgZWNyeXB0ZnNfaW5vZGVfaW5mbyAqaW5vZGVfaW5mbzsKIAogCWlub2RlX2luZm8gPSBlY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGlub2RlKTsKLQlpZiAoaW5vZGVfaW5mby0+bG93ZXJfZmlsZSkgewotCQlzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kZW50cnkgPQotCQkJaW5vZGVfaW5mby0+bG93ZXJfZmlsZS0+Zl9kZW50cnk7Ci0KLQkJQlVHX09OKCFsb3dlcl9kZW50cnkpOwotCQlpZiAobG93ZXJfZGVudHJ5LT5kX2lub2RlKSB7Ci0JCQlmcHV0KGlub2RlX2luZm8tPmxvd2VyX2ZpbGUpOwotCQkJaW5vZGVfaW5mby0+bG93ZXJfZmlsZSA9IE5VTEw7Ci0JCX0KLQl9CisJQlVHX09OKGlub2RlX2luZm8tPmxvd2VyX2ZpbGUpOwogCWVjcnlwdGZzX2Rlc3Ryb3lfY3J5cHRfc3RhdCgmaW5vZGVfaW5mby0+Y3J5cHRfc3RhdCk7CiAJY2FsbF9yY3UoJmlub2RlLT5pX3JjdSwgZWNyeXB0ZnNfaV9jYWxsYmFjayk7CiB9CmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmMKaW5kZXggNWU2MmQyNi4uODMyOGJlYiAxMDA2NDQKLS0tIGEvZnMvZXhlYy5jCisrKyBiL2ZzL2V4ZWMuYwpAQCAtMTY1OSw2ICsxNjU5LDcgQEAKIAogCXQgPSBzdGFydDsKIAlkbyB7CisJCXRhc2tfY2xlYXJfZ3JvdXBfc3RvcF9wZW5kaW5nKHQpOwogCQlpZiAodCAhPSBjdXJyZW50ICYmIHQtPm1tKSB7CiAJCQlzaWdhZGRzZXQoJnQtPnBlbmRpbmcuc2lnbmFsLCBTSUdLSUxMKTsKIAkJCXNpZ25hbF93YWtlX3VwKHQsIDEpOwpkaWZmIC0tZ2l0IGEvZnMvZmlsZS5jIGIvZnMvZmlsZS5jCmluZGV4IDBiZTM0NDcuLjRjNjk5MmQgMTAwNjQ0Ci0tLSBhL2ZzL2ZpbGUuYworKysgYi9mcy9maWxlLmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTM5LDE0ICs0MCwxNyBAQAogICovCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGZkdGFibGVfZGVmZXIsIGZkdGFibGVfZGVmZXJfbGlzdCk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqYWxsb2NfZmRtZW0odW5zaWduZWQgaW50IHNpemUpCitzdGF0aWMgdm9pZCAqYWxsb2NfZmRtZW0odW5zaWduZWQgaW50IHNpemUpCiB7Ci0Jdm9pZCAqZGF0YTsKLQotCWRhdGEgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUx8X19HRlBfTk9XQVJOKTsKLQlpZiAoZGF0YSAhPSBOVUxMKQotCQlyZXR1cm4gZGF0YTsKLQorCS8qCisJICogVmVyeSBsYXJnZSBhbGxvY2F0aW9ucyBjYW4gc3RyZXNzIHBhZ2UgcmVjbGFpbSwgc28gZmFsbCBiYWNrIHRvCisJICogdm1hbGxvYygpIGlmIHRoZSBhbGxvY2F0aW9uIHNpemUgd2lsbCBiZSBjb25zaWRlcmVkICJsYXJnZSIgYnkgdGhlIFZNLgorCSAqLworCWlmIChzaXplIDw9IChQQUdFX1NJWkUgPDwgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpKSB7CisJCXZvaWQgKmRhdGEgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUx8X19HRlBfTk9XQVJOKTsKKwkJaWYgKGRhdGEgIT0gTlVMTCkKKwkJCXJldHVybiBkYXRhOworCX0KIAlyZXR1cm4gdm1hbGxvYyhzaXplKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZnVzZS9kaXIuYyBiL2ZzL2Z1c2UvZGlyLmMKaW5kZXggYzZiYTQ5Yi4uYjMyZWIyOSAxMDA2NDQKLS0tIGEvZnMvZnVzZS9kaXIuYworKysgYi9mcy9mdXNlL2Rpci5jCkBAIC0xNzQsNyArMTc0LDcgQEAKIAkJaWYgKCFpbm9kZSkKIAkJCXJldHVybiAwOwogCi0JCWlmIChuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKQorCQlpZiAobmQgJiYgKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpKQogCQkJcmV0dXJuIC1FQ0hJTEQ7CiAKIAkJZmMgPSBnZXRfZnVzZV9jb25uKGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvTWFrZWZpbGUgYi9mcy9nZnMyL01ha2VmaWxlCmluZGV4IGYzZDIzZWYuLjg2MTI4MjAgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvTWFrZWZpbGUKKysrIGIvZnMvZ2ZzMi9NYWtlZmlsZQpAQCAtMSw5ICsxLDkgQEAKIGNjZmxhZ3MteSA6PSAtSSQoc3JjKQogb2JqLSQoQ09ORklHX0dGUzJfRlMpICs9IGdmczIubwogZ2ZzMi15IDo9IGFjbC5vIGJtYXAubyBkaXIubyB4YXR0ci5vIGdsb2NrLm8gXAotCWdsb3BzLm8gaW5vZGUubyBsb2cubyBsb3BzLm8gbWFpbi5vIG1ldGFfaW8ubyBcCisJZ2xvcHMubyBsb2cubyBsb3BzLm8gbWFpbi5vIG1ldGFfaW8ubyBcCiAJYW9wcy5vIGRlbnRyeS5vIGV4cG9ydC5vIGZpbGUubyBcCi0Jb3BzX2ZzdHlwZS5vIG9wc19pbm9kZS5vIHF1b3RhLm8gXAorCW9wc19mc3R5cGUubyBpbm9kZS5vIHF1b3RhLm8gXAogCXJlY292ZXJ5Lm8gcmdycC5vIHN1cGVyLm8gc3lzLm8gdHJhbnMubyB1dGlsLm8KIAogZ2ZzMi0kKENPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNKSArPSBsb2NrX2RsbS5vCmRpZmYgLS1naXQgYS9mcy9nZnMyL2FvcHMuYyBiL2ZzL2dmczIvYW9wcy5jCmluZGV4IDBmNWM0ZjkuLjgwMmFjNWUgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvYW9wcy5jCisrKyBiL2ZzL2dmczIvYW9wcy5jCkBAIC0xMDc2LDggKzEwNzYsOCBAQAogCQliZCA9IGJoLT5iX3ByaXZhdGU7CiAJCWlmIChiZCAmJiBiZC0+YmRfYWlsKQogCQkJZ290byBjYW5ub3RfcmVsZWFzZTsKLQkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsICFidWZmZXJfcGlubmVkKGJoKSk7Ci0JCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCAhYnVmZmVyX2RpcnR5KGJoKSk7CisJCWlmIChidWZmZXJfcGlubmVkKGJoKSB8fCBidWZmZXJfZGlydHkoYmgpKQorCQkJZ290byBub3RfcG9zc2libGU7CiAJCWJoID0gYmgtPmJfdGhpc19wYWdlOwogCX0gd2hpbGUoYmggIT0gaGVhZCk7CiAJZ2ZzMl9sb2dfdW5sb2NrKHNkcCk7CkBAIC0xMTA3LDYgKzExMDcsMTAgQEAKIAl9IHdoaWxlIChiaCAhPSBoZWFkKTsKIAogCXJldHVybiB0cnlfdG9fZnJlZV9idWZmZXJzKHBhZ2UpOworCitub3RfcG9zc2libGU6IC8qIFNob3VsZCBuZXZlciBoYXBwZW4gKi8KKwlXQVJOX09OKGJ1ZmZlcl9kaXJ0eShiaCkpOworCVdBUk5fT04oYnVmZmVyX3Bpbm5lZChiaCkpOwogY2Fubm90X3JlbGVhc2U6CiAJZ2ZzMl9sb2dfdW5sb2NrKHNkcCk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2Rpci5jIGIvZnMvZ2ZzMi9kaXIuYwppbmRleCBmNzg5YzU3Li4wOTFlZTQ3IDEwMDY0NAotLS0gYS9mcy9nZnMyL2Rpci5jCisrKyBiL2ZzL2dmczIvZGlyLmMKQEAgLTgyLDEyICs4Miw5IEBACiBzdHJ1Y3QgcXN0ciBnZnMyX3Fkb3QgX19yZWFkX21vc3RseTsKIHN0cnVjdCBxc3RyIGdmczJfcWRvdGRvdCBfX3JlYWRfbW9zdGx5OwogCi10eXBlZGVmIGludCAoKmxlYWZfY2FsbF90KSAoc3RydWN0IGdmczJfaW5vZGUgKmRpcCwgdTMyIGluZGV4LCB1MzIgbGVuLAotCQkJICAgIHU2NCBsZWFmX25vLCB2b2lkICpkYXRhKTsKIHR5cGVkZWYgaW50ICgqZ2ZzMl9kc2Nhbl90KShjb25zdCBzdHJ1Y3QgZ2ZzMl9kaXJlbnQgKmRlbnQsCiAJCQkgICAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsIHZvaWQgKm9wYXF1ZSk7CiAKLQogaW50IGdmczJfZGlyX2dldF9uZXdfYnVmZmVyKHN0cnVjdCBnZnMyX2lub2RlICppcCwgdTY0IGJsb2NrLAogCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocCkKIHsKQEAgLTE2MDAsNyArMTU5Nyw3IEBACiAgKi8KIAogaW50IGdmczJfZGlyX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwKLQkJIGNvbnN0IHN0cnVjdCBnZnMyX2lub2RlICpuaXAsIHVuc2lnbmVkIHR5cGUpCisJCSBjb25zdCBzdHJ1Y3QgZ2ZzMl9pbm9kZSAqbmlwKQogewogCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKQEAgLTE2MTYsNyArMTYxMyw3IEBACiAJCQkJcmV0dXJuIFBUUl9FUlIoZGVudCk7CiAJCQlkZW50ID0gZ2ZzMl9pbml0X2RpcmVudChpbm9kZSwgZGVudCwgbmFtZSwgYmgpOwogCQkJZ2ZzMl9pbnVtX291dChuaXAsIGRlbnQpOwotCQkJZGVudC0+ZGVfdHlwZSA9IGNwdV90b19iZTE2KHR5cGUpOworCQkJZGVudC0+ZGVfdHlwZSA9IGNwdV90b19iZTE2KElGMkRUKG5pcC0+aV9pbm9kZS5pX21vZGUpKTsKIAkJCWlmIChpcC0+aV9kaXNrZmxhZ3MgJiBHRlMyX0RJRl9FWEhBU0gpIHsKIAkJCQlsZWFmID0gKHN0cnVjdCBnZnMyX2xlYWYgKiliaC0+Yl9kYXRhOwogCQkJCWJlMTZfYWRkX2NwdSgmbGVhZi0+bGZfZW50cmllcywgMSk7CkBAIC0xNjI4LDYgKzE2MjUsOCBAQAogCQkJZ2ZzMl90cmFuc19hZGRfYmgoaXAtPmlfZ2wsIGJoLCAxKTsKIAkJCWlwLT5pX2VudHJpZXMrKzsKIAkJCWlwLT5pX2lub2RlLmlfbXRpbWUgPSBpcC0+aV9pbm9kZS5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOworCQkJaWYgKFNfSVNESVIobmlwLT5pX2lub2RlLmlfbW9kZSkpCisJCQkJaW5jX25saW5rKCZpcC0+aV9pbm9kZSk7CiAJCQlnZnMyX2Rpbm9kZV9vdXQoaXAsIGJoLT5iX2RhdGEpOwogCQkJYnJlbHNlKGJoKTsKIAkJCWVycm9yID0gMDsKQEAgLTE2NzIsOCArMTY3MSw5IEBACiAgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZQogICovCiAKLWludCBnZnMyX2Rpcl9kZWwoc3RydWN0IGdmczJfaW5vZGUgKmRpcCwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUpCitpbnQgZ2ZzMl9kaXJfZGVsKHN0cnVjdCBnZnMyX2lub2RlICpkaXAsIGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKKwljb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSA9ICZkZW50cnktPmRfbmFtZTsKIAlzdHJ1Y3QgZ2ZzMl9kaXJlbnQgKmRlbnQsICpwcmV2ID0gTlVMTDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCWludCBlcnJvcjsKQEAgLTE3MTQsNiArMTcxNCw4IEBACiAJZ2ZzMl90cmFuc19hZGRfYmgoZGlwLT5pX2dsLCBiaCwgMSk7CiAJZGlwLT5pX2VudHJpZXMtLTsKIAlkaXAtPmlfaW5vZGUuaV9tdGltZSA9IGRpcC0+aV9pbm9kZS5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOworCWlmIChTX0lTRElSKGRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkKKwkJZHJvcF9ubGluaygmZGlwLT5pX2lub2RlKTsKIAlnZnMyX2Rpbm9kZV9vdXQoZGlwLCBiaC0+Yl9kYXRhKTsKIAlicmVsc2UoYmgpOwogCW1hcmtfaW5vZGVfZGlydHkoJmRpcC0+aV9pbm9kZSk7CkBAIC0xNzY4LDI1ICsxNzcwLDE1OSBAQAogfQogCiAvKioKLSAqIGZvcmVhY2hfbGVhZiAtIGNhbGwgYSBmdW5jdGlvbiBmb3IgZWFjaCBsZWFmIGluIGEgZGlyZWN0b3J5CisgKiBsZWFmX2RlYWxsb2MgLSBEZWFsbG9jYXRlIGEgZGlyZWN0b3J5IGxlYWYKICAqIEBkaXA6IHRoZSBkaXJlY3RvcnkKLSAqIEBsYzogdGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggZWFjaAotICogQGRhdGE6IHByaXZhdGUgZGF0YSB0byBwYXNzIHRvIGl0CisgKiBAaW5kZXg6IHRoZSBoYXNoIHRhYmxlIG9mZnNldCBpbiB0aGUgZGlyZWN0b3J5CisgKiBAbGVuOiB0aGUgbnVtYmVyIG9mIHBvaW50ZXJzIHRvIHRoaXMgbGVhZgorICogQGxlYWZfbm86IHRoZSBsZWFmIG51bWJlcgorICogQGxlYWZfYmg6IGJ1ZmZlcl9oZWFkIGZvciB0aGUgc3RhcnRpbmcgbGVhZgorICogbGFzdF9kZWFsbG9jOiAxIGlmIHRoaXMgaXMgdGhlIGZpbmFsIGRlYWxsb2MgZm9yIHRoZSBsZWFmLCBlbHNlIDAKICAqCiAgKiBSZXR1cm5zOiBlcnJubwogICovCiAKLXN0YXRpYyBpbnQgZm9yZWFjaF9sZWFmKHN0cnVjdCBnZnMyX2lub2RlICpkaXAsIGxlYWZfY2FsbF90IGxjLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBsZWFmX2RlYWxsb2Moc3RydWN0IGdmczJfaW5vZGUgKmRpcCwgdTMyIGluZGV4LCB1MzIgbGVuLAorCQkJdTY0IGxlYWZfbm8sIHN0cnVjdCBidWZmZXJfaGVhZCAqbGVhZl9iaCwKKwkJCWludCBsYXN0X2RlYWxsb2MpCit7CisJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKCZkaXAtPmlfaW5vZGUpOworCXN0cnVjdCBnZnMyX2xlYWYgKnRtcF9sZWFmOworCXN0cnVjdCBnZnMyX3JncnBfbGlzdCBybGlzdDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCAqZGliaDsKKwl1NjQgYmxrLCBuYmxrOworCXVuc2lnbmVkIGludCByZ19ibG9ja3MgPSAwLCBsX2Jsb2NrcyA9IDA7CisJY2hhciAqaHQ7CisJdW5zaWduZWQgaW50IHgsIHNpemUgPSBsZW4gKiBzaXplb2YodTY0KTsKKwlpbnQgZXJyb3I7CisKKwltZW1zZXQoJnJsaXN0LCAwLCBzaXplb2Yoc3RydWN0IGdmczJfcmdycF9saXN0KSk7CisKKwlodCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX05PRlMpOworCWlmICghaHQpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKCFnZnMyX2FsbG9jX2dldChkaXApKSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyb3IgPSBnZnMyX3F1b3RhX2hvbGQoZGlwLCBOT19RVU9UQV9DSEFOR0UsIE5PX1FVT1RBX0NIQU5HRSk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9wdXQ7CisKKwllcnJvciA9IGdmczJfcmluZGV4X2hvbGQoc2RwLCAmZGlwLT5pX2FsbG9jLT5hbF9yaV9naCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9xczsKKworCS8qICBDb3VudCB0aGUgbnVtYmVyIG9mIGxlYXZlcyAgKi8KKwliaCA9IGxlYWZfYmg7CisKKwlmb3IgKGJsayA9IGxlYWZfbm87IGJsazsgYmxrID0gbmJsaykgeworCQlpZiAoYmxrICE9IGxlYWZfbm8pIHsKKwkJCWVycm9yID0gZ2V0X2xlYWYoZGlwLCBibGssICZiaCk7CisJCQlpZiAoZXJyb3IpCisJCQkJZ290byBvdXRfcmxpc3Q7CisJCX0KKwkJdG1wX2xlYWYgPSAoc3RydWN0IGdmczJfbGVhZiAqKWJoLT5iX2RhdGE7CisJCW5ibGsgPSBiZTY0X3RvX2NwdSh0bXBfbGVhZi0+bGZfbmV4dCk7CisJCWlmIChibGsgIT0gbGVhZl9ubykKKwkJCWJyZWxzZShiaCk7CisKKwkJZ2ZzMl9ybGlzdF9hZGQoc2RwLCAmcmxpc3QsIGJsayk7CisJCWxfYmxvY2tzKys7CisJfQorCisJZ2ZzMl9ybGlzdF9hbGxvYygmcmxpc3QsIExNX1NUX0VYQ0xVU0lWRSk7CisKKwlmb3IgKHggPSAwOyB4IDwgcmxpc3QucmxfcmdycHM7IHgrKykgeworCQlzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqcmdkOworCQlyZ2QgPSBybGlzdC5ybF9naHNbeF0uZ2hfZ2wtPmdsX29iamVjdDsKKwkJcmdfYmxvY2tzICs9IHJnZC0+cmRfbGVuZ3RoOworCX0KKworCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9tKHJsaXN0LnJsX3JncnBzLCBybGlzdC5ybF9naHMpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfcmxpc3Q7CisKKwllcnJvciA9IGdmczJfdHJhbnNfYmVnaW4oc2RwLAorCQkJcmdfYmxvY2tzICsgKERJVl9ST1VORF9VUChzaXplLCBzZHAtPnNkX2pic2l6ZSkgKyAxKSArCisJCQlSRVNfRElOT0RFICsgUkVTX1NUQVRGUyArIFJFU19RVU9UQSwgbF9ibG9ja3MpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfcmdfZ3VubG9jazsKKworCWJoID0gbGVhZl9iaDsKKworCWZvciAoYmxrID0gbGVhZl9ubzsgYmxrOyBibGsgPSBuYmxrKSB7CisJCWlmIChibGsgIT0gbGVhZl9ubykgeworCQkJZXJyb3IgPSBnZXRfbGVhZihkaXAsIGJsaywgJmJoKTsKKwkJCWlmIChlcnJvcikKKwkJCQlnb3RvIG91dF9lbmRfdHJhbnM7CisJCX0KKwkJdG1wX2xlYWYgPSAoc3RydWN0IGdmczJfbGVhZiAqKWJoLT5iX2RhdGE7CisJCW5ibGsgPSBiZTY0X3RvX2NwdSh0bXBfbGVhZi0+bGZfbmV4dCk7CisJCWlmIChibGsgIT0gbGVhZl9ubykKKwkJCWJyZWxzZShiaCk7CisKKwkJZ2ZzMl9mcmVlX21ldGEoZGlwLCBibGssIDEpOworCQlnZnMyX2FkZF9pbm9kZV9ibG9ja3MoJmRpcC0+aV9pbm9kZSwgLTEpOworCX0KKworCWVycm9yID0gZ2ZzMl9kaXJfd3JpdGVfZGF0YShkaXAsIGh0LCBpbmRleCAqIHNpemVvZih1NjQpLCBzaXplKTsKKwlpZiAoZXJyb3IgIT0gc2l6ZSkgeworCQlpZiAoZXJyb3IgPj0gMCkKKwkJCWVycm9yID0gLUVJTzsKKwkJZ290byBvdXRfZW5kX3RyYW5zOworCX0KKworCWVycm9yID0gZ2ZzMl9tZXRhX2lub2RlX2J1ZmZlcihkaXAsICZkaWJoKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X2VuZF90cmFuczsKKworCWdmczJfdHJhbnNfYWRkX2JoKGRpcC0+aV9nbCwgZGliaCwgMSk7CisJLyogT24gdGhlIGxhc3QgZGVhbGxvYywgbWFrZSB0aGlzIGEgcmVndWxhciBmaWxlIGluIGNhc2Ugd2UgY3Jhc2guCisJICAgKFdlIGRvbid0IHdhbnQgdG8gZnJlZSB0aGVzZSBibG9ja3MgYSBzZWNvbmQgdGltZS4pICAqLworCWlmIChsYXN0X2RlYWxsb2MpCisJCWRpcC0+aV9pbm9kZS5pX21vZGUgPSBTX0lGUkVHOworCWdmczJfZGlub2RlX291dChkaXAsIGRpYmgtPmJfZGF0YSk7CisJYnJlbHNlKGRpYmgpOworCitvdXRfZW5kX3RyYW5zOgorCWdmczJfdHJhbnNfZW5kKHNkcCk7CitvdXRfcmdfZ3VubG9jazoKKwlnZnMyX2dsb2NrX2RxX20ocmxpc3QucmxfcmdycHMsIHJsaXN0LnJsX2docyk7CitvdXRfcmxpc3Q6CisJZ2ZzMl9ybGlzdF9mcmVlKCZybGlzdCk7CisJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmRpcC0+aV9hbGxvYy0+YWxfcmlfZ2gpOworb3V0X3FzOgorCWdmczJfcXVvdGFfdW5ob2xkKGRpcCk7CitvdXRfcHV0OgorCWdmczJfYWxsb2NfcHV0KGRpcCk7CitvdXQ6CisJa2ZyZWUoaHQpOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBnZnMyX2Rpcl9leGhhc2hfZGVhbGxvYyAtIGZyZWUgYWxsIHRoZSBsZWFmIGJsb2NrcyBpbiBhIGRpcmVjdG9yeQorICogQGRpcDogdGhlIGRpcmVjdG9yeQorICoKKyAqIERlYWxsb2MgYWxsIG9uLWRpc2sgZGlyZWN0b3J5IGxlYXZlcyB0byBGUkVFTUVUQSBzdGF0ZQorICogQ2hhbmdlIG9uLWRpc2sgaW5vZGUgdHlwZSB0byAicmVndWxhciBmaWxlIgorICoKKyAqIFJldHVybnM6IGVycm5vCisgKi8KKworaW50IGdmczJfZGlyX2V4aGFzaF9kZWFsbG9jKHN0cnVjdCBnZnMyX2lub2RlICpkaXApCiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKCZkaXAtPmlfaW5vZGUpOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJc3RydWN0IGdmczJfbGVhZiAqbGVhZjsKIAl1MzIgaHNpemUsIGxlbjsKIAl1MzIgaHRfb2Zmc2V0LCBscF9vZmZzZXQsIGh0X29mZnNldF9jdXIgPSAtMTsKLQl1MzIgaW5kZXggPSAwOworCXUzMiBpbmRleCA9IDAsIG5leHRfaW5kZXg7CiAJX19iZTY0ICpscDsKIAl1NjQgbGVhZl9ubzsKLQlpbnQgZXJyb3IgPSAwOworCWludCBlcnJvciA9IDAsIGxhc3Q7CiAKIAloc2l6ZSA9IDEgPDwgZGlwLT5pX2RlcHRoOwogCWlmIChoc2l6ZSAqIHNpemVvZih1NjQpICE9IGlfc2l6ZV9yZWFkKCZkaXAtPmlfaW5vZGUpKSB7CkBAIC0xODIxLDEzICsxOTU3LDE1IEBACiAJCQkJZ290byBvdXQ7CiAJCQlsZWFmID0gKHN0cnVjdCBnZnMyX2xlYWYgKiliaC0+Yl9kYXRhOwogCQkJbGVuID0gMSA8PCAoZGlwLT5pX2RlcHRoIC0gYmUxNl90b19jcHUobGVhZi0+bGZfZGVwdGgpKTsKLQkJCWJyZWxzZShiaCk7CiAKLQkJCWVycm9yID0gbGMoZGlwLCBpbmRleCwgbGVuLCBsZWFmX25vLCBkYXRhKTsKKwkJCW5leHRfaW5kZXggPSAoaW5kZXggJiB+KGxlbiAtIDEpKSArIGxlbjsKKwkJCWxhc3QgPSAoKG5leHRfaW5kZXggPj0gaHNpemUpID8gMSA6IDApOworCQkJZXJyb3IgPSBsZWFmX2RlYWxsb2MoZGlwLCBpbmRleCwgbGVuLCBsZWFmX25vLCBiaCwKKwkJCQkJICAgICBsYXN0KTsKKwkJCWJyZWxzZShiaCk7CiAJCQlpZiAoZXJyb3IpCiAJCQkJZ290byBvdXQ7Ci0KLQkJCWluZGV4ID0gKGluZGV4ICYgfihsZW4gLSAxKSkgKyBsZW47CisJCQlpbmRleCA9IG5leHRfaW5kZXg7CiAJCX0gZWxzZQogCQkJaW5kZXgrKzsKIAl9CkBAIC0xODQ0LDE2NSArMTk4Miw2IEBACiB9CiAKIC8qKgotICogbGVhZl9kZWFsbG9jIC0gRGVhbGxvY2F0ZSBhIGRpcmVjdG9yeSBsZWFmCi0gKiBAZGlwOiB0aGUgZGlyZWN0b3J5Ci0gKiBAaW5kZXg6IHRoZSBoYXNoIHRhYmxlIG9mZnNldCBpbiB0aGUgZGlyZWN0b3J5Ci0gKiBAbGVuOiB0aGUgbnVtYmVyIG9mIHBvaW50ZXJzIHRvIHRoaXMgbGVhZgotICogQGxlYWZfbm86IHRoZSBsZWFmIG51bWJlcgotICogQGRhdGE6IG5vdCB1c2VkCi0gKgotICogUmV0dXJuczogZXJybm8KLSAqLwotCi1zdGF0aWMgaW50IGxlYWZfZGVhbGxvYyhzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwLCB1MzIgaW5kZXgsIHUzMiBsZW4sCi0JCQl1NjQgbGVhZl9ubywgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoJmRpcC0+aV9pbm9kZSk7Ci0Jc3RydWN0IGdmczJfbGVhZiAqdG1wX2xlYWY7Ci0Jc3RydWN0IGdmczJfcmdycF9saXN0IHJsaXN0OwotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmgsICpkaWJoOwotCXU2NCBibGssIG5ibGs7Ci0JdW5zaWduZWQgaW50IHJnX2Jsb2NrcyA9IDAsIGxfYmxvY2tzID0gMDsKLQljaGFyICpodDsKLQl1bnNpZ25lZCBpbnQgeCwgc2l6ZSA9IGxlbiAqIHNpemVvZih1NjQpOwotCWludCBlcnJvcjsKLQotCW1lbXNldCgmcmxpc3QsIDAsIHNpemVvZihzdHJ1Y3QgZ2ZzMl9yZ3JwX2xpc3QpKTsKLQotCWh0ID0ga3phbGxvYyhzaXplLCBHRlBfTk9GUyk7Ci0JaWYgKCFodCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAoIWdmczJfYWxsb2NfZ2V0KGRpcCkpIHsKLQkJZXJyb3IgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQllcnJvciA9IGdmczJfcXVvdGFfaG9sZChkaXAsIE5PX1FVT1RBX0NIQU5HRSwgTk9fUVVPVEFfQ0hBTkdFKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X3B1dDsKLQotCWVycm9yID0gZ2ZzMl9yaW5kZXhfaG9sZChzZHAsICZkaXAtPmlfYWxsb2MtPmFsX3JpX2doKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X3FzOwotCi0JLyogIENvdW50IHRoZSBudW1iZXIgb2YgbGVhdmVzICAqLwotCi0JZm9yIChibGsgPSBsZWFmX25vOyBibGs7IGJsayA9IG5ibGspIHsKLQkJZXJyb3IgPSBnZXRfbGVhZihkaXAsIGJsaywgJmJoKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBvdXRfcmxpc3Q7Ci0JCXRtcF9sZWFmID0gKHN0cnVjdCBnZnMyX2xlYWYgKiliaC0+Yl9kYXRhOwotCQluYmxrID0gYmU2NF90b19jcHUodG1wX2xlYWYtPmxmX25leHQpOwotCQlicmVsc2UoYmgpOwotCi0JCWdmczJfcmxpc3RfYWRkKHNkcCwgJnJsaXN0LCBibGspOwotCQlsX2Jsb2NrcysrOwotCX0KLQotCWdmczJfcmxpc3RfYWxsb2MoJnJsaXN0LCBMTV9TVF9FWENMVVNJVkUpOwotCi0JZm9yICh4ID0gMDsgeCA8IHJsaXN0LnJsX3JncnBzOyB4KyspIHsKLQkJc3RydWN0IGdmczJfcmdycGQgKnJnZDsKLQkJcmdkID0gcmxpc3QucmxfZ2hzW3hdLmdoX2dsLT5nbF9vYmplY3Q7Ci0JCXJnX2Jsb2NrcyArPSByZ2QtPnJkX2xlbmd0aDsKLQl9Ci0KLQllcnJvciA9IGdmczJfZ2xvY2tfbnFfbShybGlzdC5ybF9yZ3Jwcywgcmxpc3QucmxfZ2hzKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X3JsaXN0OwotCi0JZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKHNkcCwKLQkJCXJnX2Jsb2NrcyArIChESVZfUk9VTkRfVVAoc2l6ZSwgc2RwLT5zZF9qYnNpemUpICsgMSkgKwotCQkJUkVTX0RJTk9ERSArIFJFU19TVEFURlMgKyBSRVNfUVVPVEEsIGxfYmxvY2tzKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X3JnX2d1bmxvY2s7Ci0KLQlmb3IgKGJsayA9IGxlYWZfbm87IGJsazsgYmxrID0gbmJsaykgewotCQllcnJvciA9IGdldF9sZWFmKGRpcCwgYmxrLCAmYmgpOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dF9lbmRfdHJhbnM7Ci0JCXRtcF9sZWFmID0gKHN0cnVjdCBnZnMyX2xlYWYgKiliaC0+Yl9kYXRhOwotCQluYmxrID0gYmU2NF90b19jcHUodG1wX2xlYWYtPmxmX25leHQpOwotCQlicmVsc2UoYmgpOwotCi0JCWdmczJfZnJlZV9tZXRhKGRpcCwgYmxrLCAxKTsKLQkJZ2ZzMl9hZGRfaW5vZGVfYmxvY2tzKCZkaXAtPmlfaW5vZGUsIC0xKTsKLQl9Ci0KLQllcnJvciA9IGdmczJfZGlyX3dyaXRlX2RhdGEoZGlwLCBodCwgaW5kZXggKiBzaXplb2YodTY0KSwgc2l6ZSk7Ci0JaWYgKGVycm9yICE9IHNpemUpIHsKLQkJaWYgKGVycm9yID49IDApCi0JCQllcnJvciA9IC1FSU87Ci0JCWdvdG8gb3V0X2VuZF90cmFuczsKLQl9Ci0KLQllcnJvciA9IGdmczJfbWV0YV9pbm9kZV9idWZmZXIoZGlwLCAmZGliaCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9lbmRfdHJhbnM7Ci0KLQlnZnMyX3RyYW5zX2FkZF9iaChkaXAtPmlfZ2wsIGRpYmgsIDEpOwotCWdmczJfZGlub2RlX291dChkaXAsIGRpYmgtPmJfZGF0YSk7Ci0JYnJlbHNlKGRpYmgpOwotCi1vdXRfZW5kX3RyYW5zOgotCWdmczJfdHJhbnNfZW5kKHNkcCk7Ci1vdXRfcmdfZ3VubG9jazoKLQlnZnMyX2dsb2NrX2RxX20ocmxpc3QucmxfcmdycHMsIHJsaXN0LnJsX2docyk7Ci1vdXRfcmxpc3Q6Ci0JZ2ZzMl9ybGlzdF9mcmVlKCZybGlzdCk7Ci0JZ2ZzMl9nbG9ja19kcV91bmluaXQoJmRpcC0+aV9hbGxvYy0+YWxfcmlfZ2gpOwotb3V0X3FzOgotCWdmczJfcXVvdGFfdW5ob2xkKGRpcCk7Ci1vdXRfcHV0OgotCWdmczJfYWxsb2NfcHV0KGRpcCk7Ci1vdXQ6Ci0Ja2ZyZWUoaHQpOwotCXJldHVybiBlcnJvcjsKLX0KLQotLyoqCi0gKiBnZnMyX2Rpcl9leGhhc2hfZGVhbGxvYyAtIGZyZWUgYWxsIHRoZSBsZWFmIGJsb2NrcyBpbiBhIGRpcmVjdG9yeQotICogQGRpcDogdGhlIGRpcmVjdG9yeQotICoKLSAqIERlYWxsb2MgYWxsIG9uLWRpc2sgZGlyZWN0b3J5IGxlYXZlcyB0byBGUkVFTUVUQSBzdGF0ZQotICogQ2hhbmdlIG9uLWRpc2sgaW5vZGUgdHlwZSB0byAicmVndWxhciBmaWxlIgotICoKLSAqIFJldHVybnM6IGVycm5vCi0gKi8KLQotaW50IGdmczJfZGlyX2V4aGFzaF9kZWFsbG9jKHN0cnVjdCBnZnMyX2lub2RlICpkaXApCi17Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKCZkaXAtPmlfaW5vZGUpOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0JaW50IGVycm9yOwotCi0JLyogRGVhbGxvYyBvbi1kaXNrIGxlYXZlcyB0byBGUkVFTUVUQSBzdGF0ZSAqLwotCWVycm9yID0gZm9yZWFjaF9sZWFmKGRpcCwgbGVhZl9kZWFsbG9jLCBOVUxMKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCS8qIE1ha2UgdGhpcyBhIHJlZ3VsYXIgZmlsZSBpbiBjYXNlIHdlIGNyYXNoLgotCSAgIChXZSBkb24ndCB3YW50IHRvIGZyZWUgdGhlc2UgYmxvY2tzIGEgc2Vjb25kIHRpbWUuKSAgKi8KLQotCWVycm9yID0gZ2ZzMl90cmFuc19iZWdpbihzZHAsIFJFU19ESU5PREUsIDApOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGRpcCwgJmJoKTsKLQlpZiAoIWVycm9yKSB7Ci0JCWdmczJfdHJhbnNfYWRkX2JoKGRpcC0+aV9nbCwgYmgsIDEpOwotCQkoKHN0cnVjdCBnZnMyX2Rpbm9kZSAqKWJoLT5iX2RhdGEpLT5kaV9tb2RlID0KLQkJCQkJCWNwdV90b19iZTMyKFNfSUZSRUcpOwotCQlicmVsc2UoYmgpOwotCX0KLQotCWdmczJfdHJhbnNfZW5kKHNkcCk7Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qKgogICogZ2ZzMl9kaXJhZGRfYWxsb2NfcmVxdWlyZWQgLSBmaW5kIGlmIGFkZGluZyBlbnRyeSB3aWxsIHJlcXVpcmUgYW4gYWxsb2NhdGlvbgogICogQGlwOiB0aGUgZmlsZSBiZWluZyB3cml0dGVuIHRvCiAgKiBAZmlsbmFtZTogdGhlIGZpbGVuYW1lIHRoYXQncyBnb2luZyB0byBiZSBhZGRlZApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9kaXIuaCBiL2ZzL2dmczIvZGlyLmgKaW5kZXggYTk4ZjY0NC4uZTY4NmFmMSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9kaXIuaAorKysgYi9mcy9nZnMyL2Rpci5oCkBAIC0yMiw4ICsyMiw4IEBACiBleHRlcm4gaW50IGdmczJfZGlyX2NoZWNrKHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqZmlsZW5hbWUsCiAJCQkgIGNvbnN0IHN0cnVjdCBnZnMyX2lub2RlICppcCk7CiBleHRlcm4gaW50IGdmczJfZGlyX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqZmlsZW5hbWUsCi0JCQljb25zdCBzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHVuc2lnbmVkIGludCB0eXBlKTsKLWV4dGVybiBpbnQgZ2ZzMl9kaXJfZGVsKHN0cnVjdCBnZnMyX2lub2RlICpkaXAsIGNvbnN0IHN0cnVjdCBxc3RyICpmaWxlbmFtZSk7CisJCQljb25zdCBzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXApOworZXh0ZXJuIGludCBnZnMyX2Rpcl9kZWwoc3RydWN0IGdmczJfaW5vZGUgKmRpcCwgY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIGV4dGVybiBpbnQgZ2ZzMl9kaXJfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgKm9mZnNldCwgdm9pZCAqb3BhcXVlLAogCQkJIGZpbGxkaXJfdCBmaWxsZGlyKTsKIGV4dGVybiBpbnQgZ2ZzMl9kaXJfbXZpbm8oc3RydWN0IGdmczJfaW5vZGUgKmRpcCwgY29uc3Qgc3RydWN0IHFzdHIgKmZpbGVuYW1lLApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9leHBvcnQuYyBiL2ZzL2dmczIvZXhwb3J0LmMKaW5kZXggYjVhNWU2MC4uZmU5OTQ1ZiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9leHBvcnQuYworKysgYi9mcy9nZnMyL2V4cG9ydC5jCkBAIC0xMzksNyArMTM5LDcgQEAKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IHNiLT5zX2ZzX2luZm87CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAotCWlub2RlID0gZ2ZzMl9pbG9va3VwKHNiLCBpbnVtLT5ub19hZGRyKTsKKwlpbm9kZSA9IGdmczJfaWxvb2t1cChzYiwgaW51bS0+bm9fYWRkciwgMCk7CiAJaWYgKGlub2RlKSB7CiAJCWlmIChHRlMyX0koaW5vZGUpLT5pX25vX2Zvcm1hbF9pbm8gIT0gaW51bS0+bm9fZm9ybWFsX2lubykgewogCQkJaXB1dChpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2ZpbGUuYyBiL2ZzL2dmczIvZmlsZS5jCmluZGV4IGU0ODMxMDguLmE5ZjVjYmUgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZmlsZS5jCisrKyBiL2ZzL2dmczIvZmlsZS5jCkBAIC01NDUsMTggKzU0NSwxMCBAQAogLyoqCiAgKiBnZnMyX2ZzeW5jIC0gc3luYyB0aGUgZGlydHkgZGF0YSBmb3IgYSBmaWxlIChhY3Jvc3MgdGhlIGNsdXN0ZXIpCiAgKiBAZmlsZTogdGhlIGZpbGUgdGhhdCBwb2ludHMgdG8gdGhlIGRlbnRyeSAod2UgaWdub3JlIHRoaXMpCi0gKiBAZGVudHJ5OiB0aGUgZGVudHJ5IHRoYXQgcG9pbnRzIHRvIHRoZSBpbm9kZSB0byBzeW5jCisgKiBAZGF0YXN5bmM6IHNldCBpZiB3ZSBjYW4gaWdub3JlIHRpbWVzdGFtcCBjaGFuZ2VzCiAgKgotICogVGhlIFZGUyB3aWxsIGZsdXNoICJub3JtYWwiIGRhdGEgZm9yIHVzLiBXZSBvbmx5IG5lZWQgdG8gd29ycnkKLSAqIGFib3V0IG1ldGFkYXRhIGhlcmUuIEZvciBqb3VybmFsZWQgZGF0YSwgd2UganVzdCBkbyBhIGxvZyBmbHVzaAotICogYXMgd2UgY2FuJ3QgYXZvaWQgaXQuIE90aGVyd2lzZSB3ZSBjYW4ganVzdCBiYWxlIG91dCBpZiBkYXRhc3luYwotICogaXMgc2V0LiBGb3Igc3R1ZmZlZCBpbm9kZXMgd2UgbXVzdCBmbHVzaCB0aGUgbG9nIGluIG9yZGVyIHRvCi0gKiBlbnN1cmUgdGhhdCBhbGwgZGF0YSBpcyBvbiBkaXNrLgotICoKLSAqIFRoZSBjYWxsIHRvIHdyaXRlX2lub2RlX25vdygpIGlzIHRoZXJlIHRvIHdyaXRlIGJhY2sgbWV0YWRhdGEgYW5kCi0gKiB0aGUgaW5vZGUgaXRzZWxmLiBJdCBkb2VzIGFsc28gdHJ5IGFuZCB3cml0ZSB0aGUgZGF0YSwgYnV0IHRoYXRzCi0gKiAoaG9wZWZ1bGx5KSBhIG5vLW9wIGR1ZSB0byB0aGUgVkZTIGhhdmluZyBhbHJlYWR5IGNhbGxlZCBmaWxlbWFwX2ZkYXRhd3JpdGUoKQotICogZm9yIHVzLgorICogVGhlIFZGUyB3aWxsIGZsdXNoIGRhdGEgZm9yIHVzLiBXZSBvbmx5IG5lZWQgdG8gd29ycnkKKyAqIGFib3V0IG1ldGFkYXRhIGhlcmUuCiAgKgogICogUmV0dXJuczogZXJybm8KICAqLwpAQCAtNTY1LDIyICs1NTcsMjAgQEAKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9tYXBwaW5nLT5ob3N0OwogCWludCBzeW5jX3N0YXRlID0gaW5vZGUtPmlfc3RhdGUgJiAoSV9ESVJUWV9TWU5DfElfRElSVFlfREFUQVNZTkMpOwotCWludCByZXQgPSAwOworCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CisJaW50IHJldDsKIAotCWlmIChnZnMyX2lzX2pkYXRhKEdGUzJfSShpbm9kZSkpKSB7Ci0JCWdmczJfbG9nX2ZsdXNoKEdGUzJfU0IoaW5vZGUpLCBHRlMyX0koaW5vZGUpLT5pX2dsKTsKLQkJcmV0dXJuIDA7CisJaWYgKGRhdGFzeW5jKQorCQlzeW5jX3N0YXRlICY9IH5JX0RJUlRZX1NZTkM7CisKKwlpZiAoc3luY19zdGF0ZSkgeworCQlyZXQgPSBzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCWdmczJfYWlsX2ZsdXNoKGlwLT5pX2dsKTsKIAl9CiAKLQlpZiAoc3luY19zdGF0ZSAhPSAwKSB7Ci0JCWlmICghZGF0YXN5bmMpCi0JCQlyZXQgPSB3cml0ZV9pbm9kZV9ub3coaW5vZGUsIDApOwotCi0JCWlmIChnZnMyX2lzX3N0dWZmZWQoR0ZTMl9JKGlub2RlKSkpCi0JCQlnZnMyX2xvZ19mbHVzaChHRlMyX1NCKGlub2RlKSwgR0ZTMl9JKGlub2RlKS0+aV9nbCk7Ci0JfQotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC04MjYsNiArODE2LDcgQEAKIAlsb2ZmX3QgYnl0ZXMsIG1heF9ieXRlczsKIAlzdHJ1Y3QgZ2ZzMl9hbGxvYyAqYWw7CiAJaW50IGVycm9yOworCWxvZmZfdCBic2l6ZV9tYXNrID0gfigobG9mZl90KXNkcC0+c2Rfc2Iuc2JfYnNpemUgLSAxKTsKIAlsb2ZmX3QgbmV4dCA9IChvZmZzZXQgKyBsZW4gLSAxKSA+PiBzZHAtPnNkX3NiLnNiX2JzaXplX3NoaWZ0OwogCW5leHQgPSAobmV4dCArIDEpIDw8IHNkcC0+c2Rfc2Iuc2JfYnNpemVfc2hpZnQ7CiAKQEAgLTgzMywxMyArODI0LDE1IEBACiAJaWYgKG1vZGUgJiB+RkFMTE9DX0ZMX0tFRVBfU0laRSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0Jb2Zmc2V0ID0gKG9mZnNldCA+PiBzZHAtPnNkX3NiLnNiX2JzaXplX3NoaWZ0KSA8PAotCQkgc2RwLT5zZF9zYi5zYl9ic2l6ZV9zaGlmdDsKKwlvZmZzZXQgJj0gYnNpemVfbWFzazsKIAogCWxlbiA9IG5leHQgLSBvZmZzZXQ7CiAJYnl0ZXMgPSBzZHAtPnNkX21heF9yZ19kYXRhICogc2RwLT5zZF9zYi5zYl9ic2l6ZSAvIDI7CiAJaWYgKCFieXRlcykKIAkJYnl0ZXMgPSBVSU5UX01BWDsKKwlieXRlcyAmPSBic2l6ZV9tYXNrOworCWlmIChieXRlcyA9PSAwKQorCQlieXRlcyA9IHNkcC0+c2Rfc2Iuc2JfYnNpemU7CiAKIAlnZnMyX2hvbGRlcl9pbml0KGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsICZpcC0+aV9naCk7CiAJZXJyb3IgPSBnZnMyX2dsb2NrX25xKCZpcC0+aV9naCk7CkBAIC04NzAsNiArODYzLDkgQEAKIAkJaWYgKGVycm9yKSB7CiAJCQlpZiAoZXJyb3IgPT0gLUVOT1NQQyAmJiBieXRlcyA+IHNkcC0+c2Rfc2Iuc2JfYnNpemUpIHsKIAkJCQlieXRlcyA+Pj0gMTsKKwkJCQlieXRlcyAmPSBic2l6ZV9tYXNrOworCQkJCWlmIChieXRlcyA9PSAwKQorCQkJCQlieXRlcyA9IHNkcC0+c2Rfc2Iuc2JfYnNpemU7CiAJCQkJZ290byByZXRyeTsKIAkJCX0KIAkJCWdvdG8gb3V0X3F1bmxvY2s7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb2NrLmMgYi9mcy9nZnMyL2dsb2NrLmMKaW5kZXggZjA3NjQzZS4uYTJhNmFiYiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9jay5jCisrKyBiL2ZzL2dmczIvZ2xvY2suYwpAQCAtOTMsMTQgKzkzLDEyIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzcGluX2xvY2tfYnVja2V0KHVuc2lnbmVkIGludCBoYXNoKQogewotCXN0cnVjdCBobGlzdF9ibF9oZWFkICpibCA9ICZnbF9oYXNoX3RhYmxlW2hhc2hdOwotCWJpdF9zcGluX2xvY2soMCwgKHVuc2lnbmVkIGxvbmcgKilibCk7CisJaGxpc3RfYmxfbG9jaygmZ2xfaGFzaF90YWJsZVtoYXNoXSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzcGluX3VubG9ja19idWNrZXQodW5zaWduZWQgaW50IGhhc2gpCiB7Ci0Jc3RydWN0IGhsaXN0X2JsX2hlYWQgKmJsID0gJmdsX2hhc2hfdGFibGVbaGFzaF07Ci0JX19iaXRfc3Bpbl91bmxvY2soMCwgKHVuc2lnbmVkIGxvbmcgKilibCk7CisJaGxpc3RfYmxfdW5sb2NrKCZnbF9oYXNoX3RhYmxlW2hhc2hdKTsKIH0KIAogc3RhdGljIHZvaWQgZ2ZzMl9nbG9ja19kZWFsbG9jKHN0cnVjdCByY3VfaGVhZCAqcmN1KQpAQCAtMTQ1LDE0ICsxNDMsOSBAQAogewogCWNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgKmdsb3BzID0gZ2wtPmdsX29wczsKIAotCS8qIGFzc2VydF9zcGluX2xvY2tlZCgmZ2wtPmdsX3NwaW4pOyAqLwotCiAJaWYgKGdsLT5nbF9zdGF0ZSA9PSBMTV9TVF9VTkxPQ0tFRCkKIAkJcmV0dXJuIDA7Ci0JaWYgKHRlc3RfYml0KEdMRl9MRkxVU0gsICZnbC0+Z2xfZmxhZ3MpKQotCQlyZXR1cm4gMDsKLQlpZiAoKGdsLT5nbF9uYW1lLmxuX3R5cGUgIT0gTE1fVFlQRV9JTk9ERSkgJiYKLQkgICAgIWxpc3RfZW1wdHkoJmdsLT5nbF9ob2xkZXJzKSkKKwlpZiAoIWxpc3RfZW1wdHkoJmdsLT5nbF9ob2xkZXJzKSkKIAkJcmV0dXJuIDA7CiAJaWYgKGdsb3BzLT5nb19kZW1vdGVfb2spCiAJCXJldHVybiBnbG9wcy0+Z29fZGVtb3RlX29rKGdsKTsKQEAgLTE2MCw2ICsxNTMsMzEgQEAKIH0KIAogCit2b2lkIGdmczJfZ2xvY2tfYWRkX3RvX2xydShzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCit7CisJc3Bpbl9sb2NrKCZscnVfbG9jayk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJmdsLT5nbF9scnUpKQorCQlsaXN0X2RlbF9pbml0KCZnbC0+Z2xfbHJ1KTsKKwllbHNlCisJCWF0b21pY19pbmMoJmxydV9jb3VudCk7CisKKwlsaXN0X2FkZF90YWlsKCZnbC0+Z2xfbHJ1LCAmbHJ1X2xpc3QpOworCXNldF9iaXQoR0xGX0xSVSwgJmdsLT5nbF9mbGFncyk7CisJc3Bpbl91bmxvY2soJmxydV9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgZ2ZzMl9nbG9ja19yZW1vdmVfZnJvbV9scnUoc3RydWN0IGdmczJfZ2xvY2sgKmdsKQoreworCXNwaW5fbG9jaygmbHJ1X2xvY2spOworCWlmICghbGlzdF9lbXB0eSgmZ2wtPmdsX2xydSkpIHsKKwkJbGlzdF9kZWxfaW5pdCgmZ2wtPmdsX2xydSk7CisJCWF0b21pY19kZWMoJmxydV9jb3VudCk7CisJCWNsZWFyX2JpdChHTEZfTFJVLCAmZ2wtPmdsX2ZsYWdzKTsKKwl9CisJc3Bpbl91bmxvY2soJmxydV9sb2NrKTsKK30KKwogLyoqCiAgKiBfX2dmczJfZ2xvY2tfc2NoZWR1bGVfZm9yX3JlY2xhaW0gLSBBZGQgYSBnbG9jayB0byB0aGUgcmVjbGFpbSBsaXN0CiAgKiBAZ2w6IHRoZSBnbG9jawpAQCAtMTcwLDI0ICsxODgsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2dmczJfZ2xvY2tfc2NoZWR1bGVfZm9yX3JlY2xhaW0oc3RydWN0IGdmczJfZ2xvY2sgKmdsKQogewotCWlmIChkZW1vdGVfb2soZ2wpKSB7Ci0JCXNwaW5fbG9jaygmbHJ1X2xvY2spOwotCi0JCWlmICghbGlzdF9lbXB0eSgmZ2wtPmdsX2xydSkpCi0JCQlsaXN0X2RlbF9pbml0KCZnbC0+Z2xfbHJ1KTsKLQkJZWxzZQotCQkJYXRvbWljX2luYygmbHJ1X2NvdW50KTsKLQotCQlsaXN0X2FkZF90YWlsKCZnbC0+Z2xfbHJ1LCAmbHJ1X2xpc3QpOwotCQlzcGluX3VubG9jaygmbHJ1X2xvY2spOwotCX0KLX0KLQotdm9pZCBnZnMyX2dsb2NrX3NjaGVkdWxlX2Zvcl9yZWNsYWltKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKLXsKLQlzcGluX2xvY2soJmdsLT5nbF9zcGluKTsKLQlfX2dmczJfZ2xvY2tfc2NoZWR1bGVfZm9yX3JlY2xhaW0oZ2wpOwotCXNwaW5fdW5sb2NrKCZnbC0+Z2xfc3Bpbik7CisJaWYgKGRlbW90ZV9vayhnbCkpCisJCWdmczJfZ2xvY2tfYWRkX3RvX2xydShnbCk7CiB9CiAKIC8qKgpAQCAtMjE5LDEyICsyMjEsNyBAQAogCQlzcGluX2xvY2tfYnVja2V0KGdsLT5nbF9oYXNoKTsKIAkJaGxpc3RfYmxfZGVsX3JjdSgmZ2wtPmdsX2xpc3QpOwogCQlzcGluX3VubG9ja19idWNrZXQoZ2wtPmdsX2hhc2gpOwotCQlzcGluX2xvY2soJmxydV9sb2NrKTsKLQkJaWYgKCFsaXN0X2VtcHR5KCZnbC0+Z2xfbHJ1KSkgewotCQkJbGlzdF9kZWxfaW5pdCgmZ2wtPmdsX2xydSk7Ci0JCQlhdG9taWNfZGVjKCZscnVfY291bnQpOwotCQl9Ci0JCXNwaW5fdW5sb2NrKCZscnVfbG9jayk7CisJCWdmczJfZ2xvY2tfcmVtb3ZlX2Zyb21fbHJ1KGdsKTsKIAkJR0xPQ0tfQlVHX09OKGdsLCAhbGlzdF9lbXB0eSgmZ2wtPmdsX2hvbGRlcnMpKTsKIAkJR0xPQ0tfQlVHX09OKGdsLCBtYXBwaW5nICYmIG1hcHBpbmctPm5ycGFnZXMpOwogCQl0cmFjZV9nZnMyX2dsb2NrX3B1dChnbCk7CkBAIC01NDQsMTEgKzU0MSw2IEBACiAJY2xlYXJfYml0KEdMRl9JTlZBTElEQVRFX0lOX1BST0dSRVNTLCAmZ2wtPmdsX2ZsYWdzKTsKIAogCWdmczJfZ2xvY2tfaG9sZChnbCk7Ci0JaWYgKHRhcmdldCAhPSBMTV9TVF9VTkxPQ0tFRCAmJiAoZ2wtPmdsX3N0YXRlID09IExNX1NUX1NIQVJFRCB8fAotCSAgICBnbC0+Z2xfc3RhdGUgPT0gTE1fU1RfREVGRVJSRUQpICYmCi0JICAgICEobGNrX2ZsYWdzICYgKExNX0ZMQUdfVFJZIHwgTE1fRkxBR19UUllfMUNCKSkpCi0JCWxja19mbGFncyB8PSBMTV9GTEFHX1RSWV8xQ0I7Ci0KIAlpZiAoc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fbG9jaykJewogCQkvKiBsb2NrX2RsbSAqLwogCQlyZXQgPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9sb2NrKGdsLCB0YXJnZXQsIGxja19mbGFncyk7CkBAIC02NTAsNyArNjQyLDcgQEAKIAkvKiBOb3RlOiBVbnNhZmUgdG8gZGVyZWZlcmVuY2UgaXAgYXMgd2UgZG9uJ3QgaG9sZCByaWdodCByZWZzL2xvY2tzICovCiAKIAlpZiAoaXApCi0JCWlub2RlID0gZ2ZzMl9pbG9va3VwKHNkcC0+c2RfdmZzLCBub19hZGRyKTsKKwkJaW5vZGUgPSBnZnMyX2lsb29rdXAoc2RwLT5zZF92ZnMsIG5vX2FkZHIsIDEpOwogCWVsc2UKIAkJaW5vZGUgPSBnZnMyX2xvb2t1cF9ieV9pbnVtKHNkcCwgbm9fYWRkciwgTlVMTCwgR0ZTMl9CTEtTVF9VTkxJTktFRCk7CiAJaWYgKGlub2RlICYmICFJU19FUlIoaW5vZGUpKSB7CkBAIC0xMDI3LDYgKzEwMTksOSBAQAogCWlmICh1bmxpa2VseSh0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCiAJCXJldHVybiAtRUlPOwogCisJaWYgKHRlc3RfYml0KEdMRl9MUlUsICZnbC0+Z2xfZmxhZ3MpKQorCQlnZnMyX2dsb2NrX3JlbW92ZV9mcm9tX2xydShnbCk7CisKIAlzcGluX2xvY2soJmdsLT5nbF9zcGluKTsKIAlhZGRfdG9fcXVldWUoZ2gpOwogCWlmICgoTE1fRkxBR19OT0VYUCAmIGdoLT5naF9mbGFncykgJiYKQEAgLTEwODQsNyArMTA3OSw4IEBACiAJCSAgICAhdGVzdF9iaXQoR0xGX0RFTU9URSwgJmdsLT5nbF9mbGFncykpCiAJCQlmYXN0X3BhdGggPSAxOwogCX0KLQlfX2dmczJfZ2xvY2tfc2NoZWR1bGVfZm9yX3JlY2xhaW0oZ2wpOworCWlmICghdGVzdF9iaXQoR0xGX0xGTFVTSCwgJmdsLT5nbF9mbGFncykpCisJCV9fZ2ZzMl9nbG9ja19zY2hlZHVsZV9mb3JfcmVjbGFpbShnbCk7CiAJdHJhY2VfZ2ZzMl9nbG9ja19xdWV1ZShnaCwgMCk7CiAJc3Bpbl91bmxvY2soJmdsLT5nbF9zcGluKTsKIAlpZiAobGlrZWx5KGZhc3RfcGF0aCkpCkBAIC0xMzY3LDYgKzEzNjMsNyBAQAogCXdoaWxlKG5yICYmICFsaXN0X2VtcHR5KCZscnVfbGlzdCkpIHsKIAkJZ2wgPSBsaXN0X2VudHJ5KGxydV9saXN0Lm5leHQsIHN0cnVjdCBnZnMyX2dsb2NrLCBnbF9scnUpOwogCQlsaXN0X2RlbF9pbml0KCZnbC0+Z2xfbHJ1KTsKKwkJY2xlYXJfYml0KEdMRl9MUlUsICZnbC0+Z2xfZmxhZ3MpOwogCQlhdG9taWNfZGVjKCZscnVfY291bnQpOwogCiAJCS8qIFRlc3QgZm9yIGJlaW5nIGRlbW90YWJsZSAqLwpAQCAtMTM4OSw2ICsxMzg2LDcgQEAKIAkJfQogCQlucl9za2lwcGVkKys7CiAJCWxpc3RfYWRkKCZnbC0+Z2xfbHJ1LCAmc2tpcHBlZCk7CisJCXNldF9iaXQoR0xGX0xSVSwgJmdsLT5nbF9mbGFncyk7CiAJfQogCWxpc3Rfc3BsaWNlKCZza2lwcGVkLCAmbHJ1X2xpc3QpOwogCWF0b21pY19hZGQobnJfc2tpcHBlZCwgJmxydV9jb3VudCk7CkBAIC0xNDYxLDEyICsxNDU5LDcgQEAKIAogc3RhdGljIHZvaWQgY2xlYXJfZ2xvY2soc3RydWN0IGdmczJfZ2xvY2sgKmdsKQogewotCXNwaW5fbG9jaygmbHJ1X2xvY2spOwotCWlmICghbGlzdF9lbXB0eSgmZ2wtPmdsX2xydSkpIHsKLQkJbGlzdF9kZWxfaW5pdCgmZ2wtPmdsX2xydSk7Ci0JCWF0b21pY19kZWMoJmxydV9jb3VudCk7Ci0JfQotCXNwaW5fdW5sb2NrKCZscnVfbG9jayk7CisJZ2ZzMl9nbG9ja19yZW1vdmVfZnJvbV9scnUoZ2wpOwogCiAJc3Bpbl9sb2NrKCZnbC0+Z2xfc3Bpbik7CiAJaWYgKGdsLT5nbF9zdGF0ZSAhPSBMTV9TVF9VTkxPQ0tFRCkKQEAgLTE2MDEsOSArMTU5NCwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqZ2ZsYWdzMnN0cihjaGFyICpidWYsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmdmbGFncykKK3N0YXRpYyBjb25zdCBjaGFyICpnZmxhZ3Myc3RyKGNoYXIgKmJ1ZiwgY29uc3Qgc3RydWN0IGdmczJfZ2xvY2sgKmdsKQogeworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmdmbGFncyA9ICZnbC0+Z2xfZmxhZ3M7CiAJY2hhciAqcCA9IGJ1ZjsKKwogCWlmICh0ZXN0X2JpdChHTEZfTE9DSywgZ2ZsYWdzKSkKIAkJKnArKyA9ICdsJzsKIAlpZiAodGVzdF9iaXQoR0xGX0RFTU9URSwgZ2ZsYWdzKSkKQEAgLTE2MjYsNiArMTYyMSwxMCBAQAogCQkqcCsrID0gJ0YnOwogCWlmICh0ZXN0X2JpdChHTEZfUVVFVUVELCBnZmxhZ3MpKQogCQkqcCsrID0gJ3EnOworCWlmICh0ZXN0X2JpdChHTEZfTFJVLCBnZmxhZ3MpKQorCQkqcCsrID0gJ0wnOworCWlmIChnbC0+Z2xfb2JqZWN0KQorCQkqcCsrID0gJ28nOwogCSpwID0gMDsKIAlyZXR1cm4gYnVmOwogfQpAQCAtMTY2MCwxNCArMTY1OSwxNSBAQAogCWR0aW1lICo9IDEwMDAwMDAvSFo7IC8qIGRlbW90ZSB0aW1lIGluIHVTZWMgKi8KIAlpZiAoIXRlc3RfYml0KEdMRl9ERU1PVEUsICZnbC0+Z2xfZmxhZ3MpKQogCQlkdGltZSA9IDA7Ci0JZ2ZzMl9wcmludF9kYmcoc2VxLCAiRzogIHM6JXMgbjoldS8lbGx4IGY6JXMgdDolcyBkOiVzLyVsbHUgYTolZCByOiVkXG4iLAorCWdmczJfcHJpbnRfZGJnKHNlcSwgIkc6ICBzOiVzIG46JXUvJWxseCBmOiVzIHQ6JXMgZDolcy8lbGx1IGE6JWQgdjolZCByOiVkXG4iLAogCQkgIHN0YXRlMnN0cihnbC0+Z2xfc3RhdGUpLAogCQkgIGdsLT5nbF9uYW1lLmxuX3R5cGUsCiAJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylnbC0+Z2xfbmFtZS5sbl9udW1iZXIsCi0JCSAgZ2ZsYWdzMnN0cihnZmxhZ3NfYnVmLCAmZ2wtPmdsX2ZsYWdzKSwKKwkJICBnZmxhZ3Myc3RyKGdmbGFnc19idWYsIGdsKSwKIAkJICBzdGF0ZTJzdHIoZ2wtPmdsX3RhcmdldCksCiAJCSAgc3RhdGUyc3RyKGdsLT5nbF9kZW1vdGVfc3RhdGUpLCBkdGltZSwKIAkJICBhdG9taWNfcmVhZCgmZ2wtPmdsX2FpbF9jb3VudCksCisJCSAgYXRvbWljX3JlYWQoJmdsLT5nbF9yZXZva2VzKSwKIAkJICBhdG9taWNfcmVhZCgmZ2wtPmdsX3JlZikpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShnaCwgJmdsLT5nbF9ob2xkZXJzLCBnaF9saXN0KSB7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb2NrLmggYi9mcy9nZnMyL2dsb2NrLmgKaW5kZXggYWVhMTYwNi4uNmIyZjc1NyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9jay5oCisrKyBiL2ZzL2dmczIvZ2xvY2suaApAQCAtMjI1LDExICsyMjUsMTAgQEAKIAogZXh0ZXJuIHZvaWQgZ2ZzMl9nbG9ja19jYihzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIHVuc2lnbmVkIGludCBzdGF0ZSk7CiBleHRlcm4gdm9pZCBnZnMyX2dsb2NrX2NvbXBsZXRlKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgaW50IHJldCk7Ci1leHRlcm4gdm9pZCBnZnMyX3JlY2xhaW1fZ2xvY2soc3RydWN0IGdmczJfc2JkICpzZHApOwogZXh0ZXJuIHZvaWQgZ2ZzMl9nbF9oYXNoX2NsZWFyKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKIGV4dGVybiB2b2lkIGdmczJfZ2xvY2tfZmluaXNoX3RydW5jYXRlKHN0cnVjdCBnZnMyX2lub2RlICppcCk7CiBleHRlcm4gdm9pZCBnZnMyX2dsb2NrX3RoYXcoc3RydWN0IGdmczJfc2JkICpzZHApOwotZXh0ZXJuIHZvaWQgZ2ZzMl9nbG9ja19zY2hlZHVsZV9mb3JfcmVjbGFpbShzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpOworZXh0ZXJuIHZvaWQgZ2ZzMl9nbG9ja19hZGRfdG9fbHJ1KHN0cnVjdCBnZnMyX2dsb2NrICpnbCk7CiBleHRlcm4gdm9pZCBnZnMyX2dsb2NrX2ZyZWUoc3RydWN0IGdmczJfZ2xvY2sgKmdsKTsKIAogZXh0ZXJuIGludCBfX2luaXQgZ2ZzMl9nbG9ja19pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9nbG9wcy5jIGIvZnMvZ2ZzMi9nbG9wcy5jCmluZGV4IDI1ZWViMmIuLjhlZjcwZjQgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZ2xvcHMuYworKysgYi9mcy9nZnMyL2dsb3BzLmMKQEAgLTI4LDMzICsyOCwxOCBAQAogI2luY2x1ZGUgInRyYW5zLmgiCiAKIC8qKgotICogYWlsX2VtcHR5X2dsIC0gcmVtb3ZlIGFsbCBidWZmZXJzIGZvciBhIGdpdmVuIGxvY2sgZnJvbSB0aGUgQUlMCisgKiBfX2dmczJfYWlsX2ZsdXNoIC0gcmVtb3ZlIGFsbCBidWZmZXJzIGZvciBhIGdpdmVuIGxvY2sgZnJvbSB0aGUgQUlMCiAgKiBAZ2w6IHRoZSBnbG9jawogICoKICAqIE5vbmUgb2YgdGhlIGJ1ZmZlcnMgc2hvdWxkIGJlIGRpcnR5LCBsb2NrZWQsIG9yIHBpbm5lZC4KICAqLwogCi1zdGF0aWMgdm9pZCBnZnMyX2FpbF9lbXB0eV9nbChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCitzdGF0aWMgdm9pZCBfX2dmczJfYWlsX2ZsdXNoKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IGdsLT5nbF9zYmQ7CiAJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZnbC0+Z2xfYWlsX2xpc3Q7CiAJc3RydWN0IGdmczJfYnVmZGF0YSAqYmQ7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQlzdHJ1Y3QgZ2ZzMl90cmFucyB0cjsKLQotCW1lbXNldCgmdHIsIDAsIHNpemVvZih0cikpOwotCXRyLnRyX3Jldm9rZXMgPSBhdG9taWNfcmVhZCgmZ2wtPmdsX2FpbF9jb3VudCk7Ci0KLQlpZiAoIXRyLnRyX3Jldm9rZXMpCi0JCXJldHVybjsKLQotCS8qIEEgc2hvcnRlbmVkLCBpbmxpbmUgdmVyc2lvbiBvZiBnZnMyX3RyYW5zX2JlZ2luKCkgKi8KLQl0ci50cl9yZXNlcnZlZCA9IDEgKyBnZnMyX3N0cnVjdDJibGsoc2RwLCB0ci50cl9yZXZva2VzLCBzaXplb2YodTY0KSk7Ci0JdHIudHJfaXAgPSAodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7Ci0JSU5JVF9MSVNUX0hFQUQoJnRyLnRyX2xpc3RfYnVmKTsKLQlnZnMyX2xvZ19yZXNlcnZlKHNkcCwgdHIudHJfcmVzZXJ2ZWQpOwotCUJVR19PTihjdXJyZW50LT5qb3VybmFsX2luZm8pOwotCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9ICZ0cjsKIAogCXNwaW5fbG9jaygmc2RwLT5zZF9haWxfbG9jayk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CkBAIC03Niw3ICs2MSw0NyBAQAogCX0KIAlnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsICFhdG9taWNfcmVhZCgmZ2wtPmdsX2FpbF9jb3VudCkpOwogCXNwaW5fdW5sb2NrKCZzZHAtPnNkX2FpbF9sb2NrKTsKK30KIAorCitzdGF0aWMgdm9pZCBnZnMyX2FpbF9lbXB0eV9nbChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCit7CisJc3RydWN0IGdmczJfc2JkICpzZHAgPSBnbC0+Z2xfc2JkOworCXN0cnVjdCBnZnMyX3RyYW5zIHRyOworCisJbWVtc2V0KCZ0ciwgMCwgc2l6ZW9mKHRyKSk7CisJdHIudHJfcmV2b2tlcyA9IGF0b21pY19yZWFkKCZnbC0+Z2xfYWlsX2NvdW50KTsKKworCWlmICghdHIudHJfcmV2b2tlcykKKwkJcmV0dXJuOworCisJLyogQSBzaG9ydGVuZWQsIGlubGluZSB2ZXJzaW9uIG9mIGdmczJfdHJhbnNfYmVnaW4oKSAqLworCXRyLnRyX3Jlc2VydmVkID0gMSArIGdmczJfc3RydWN0MmJsayhzZHAsIHRyLnRyX3Jldm9rZXMsIHNpemVvZih1NjQpKTsKKwl0ci50cl9pcCA9ICh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKTsKKwlJTklUX0xJU1RfSEVBRCgmdHIudHJfbGlzdF9idWYpOworCWdmczJfbG9nX3Jlc2VydmUoc2RwLCB0ci50cl9yZXNlcnZlZCk7CisJQlVHX09OKGN1cnJlbnQtPmpvdXJuYWxfaW5mbyk7CisJY3VycmVudC0+am91cm5hbF9pbmZvID0gJnRyOworCisJX19nZnMyX2FpbF9mbHVzaChnbCk7CisKKwlnZnMyX3RyYW5zX2VuZChzZHApOworCWdmczJfbG9nX2ZsdXNoKHNkcCwgTlVMTCk7Cit9CisKK3ZvaWQgZ2ZzMl9haWxfZmx1c2goc3RydWN0IGdmczJfZ2xvY2sgKmdsKQoreworCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gZ2wtPmdsX3NiZDsKKwl1bnNpZ25lZCBpbnQgcmV2b2tlcyA9IGF0b21pY19yZWFkKCZnbC0+Z2xfYWlsX2NvdW50KTsKKwlpbnQgcmV0OworCisJaWYgKCFyZXZva2VzKQorCQlyZXR1cm47CisKKwlyZXQgPSBnZnMyX3RyYW5zX2JlZ2luKHNkcCwgMCwgcmV2b2tlcyk7CisJaWYgKHJldCkKKwkJcmV0dXJuOworCV9fZ2ZzMl9haWxfZmx1c2goZ2wpOwogCWdmczJfdHJhbnNfZW5kKHNkcCk7CiAJZ2ZzMl9sb2dfZmx1c2goc2RwLCBOVUxMKTsKIH0KQEAgLTIyNyw2ICsyNTIsMTE5IEBACiB9CiAKIC8qKgorICogZ2ZzMl9zZXRfbmxpbmsgLSBTZXQgdGhlIGlub2RlJ3MgbGluayBjb3VudCBiYXNlZCBvbiBvbi1kaXNrIGluZm8KKyAqIEBpbm9kZTogVGhlIGlub2RlIGluIHF1ZXN0aW9uCisgKiBAbmxpbms6IFRoZSBsaW5rIGNvdW50CisgKgorICogSWYgdGhlIGxpbmsgY291bnQgaGFzIGhpdCB6ZXJvLCBpdCBtdXN0IG5ldmVyIGJlIHJhaXNlZCwgd2hhdGV2ZXIgdGhlCisgKiBvbi1kaXNrIGlub2RlIG1pZ2h0IHNheS4gV2hlbiBuZXcgc3RydWN0IGlub2RlcyBhcmUgY3JlYXRlZCB0aGUgbGluaworICogY291bnQgaXMgc2V0IHRvIDEsIHNvIHRoYXQgd2UgY2FuIHNhZmVseSB1c2UgdGhpcyB0ZXN0IGV2ZW4gd2hlbiByZWFkaW5nCisgKiBpbiBvbiBkaXNrIGluZm9ybWF0aW9uIGZvciB0aGUgZmlyc3QgdGltZS4KKyAqLworCitzdGF0aWMgdm9pZCBnZnMyX3NldF9ubGluayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbmxpbmspCit7CisJLyoKKwkgKiBXZSB3aWxsIG5lZWQgdG8gcmV2aWV3IHNldHRpbmcgdGhlIG5saW5rIGNvdW50IGhlcmUgaW4gdGhlCisJICogbGlnaHQgb2YgdGhlIGZvcnRoY29taW5nIHJvIGJpbmQgbW91bnQgd29yay4gVGhpcyBpcyBhIHJlbWluZGVyCisJICogdG8gZG8gdGhhdC4KKwkgKi8KKwlpZiAoKGlub2RlLT5pX25saW5rICE9IG5saW5rKSAmJiAoaW5vZGUtPmlfbmxpbmsgIT0gMCkpIHsKKwkJaWYgKG5saW5rID09IDApCisJCQljbGVhcl9ubGluayhpbm9kZSk7CisJCWVsc2UKKwkJCWlub2RlLT5pX25saW5rID0gbmxpbms7CisJfQorfQorCitzdGF0aWMgaW50IGdmczJfZGlub2RlX2luKHN0cnVjdCBnZnMyX2lub2RlICppcCwgY29uc3Qgdm9pZCAqYnVmKQoreworCWNvbnN0IHN0cnVjdCBnZnMyX2Rpbm9kZSAqc3RyID0gYnVmOworCXN0cnVjdCB0aW1lc3BlYyBhdGltZTsKKwl1MTYgaGVpZ2h0LCBkZXB0aDsKKworCWlmICh1bmxpa2VseShpcC0+aV9ub19hZGRyICE9IGJlNjRfdG9fY3B1KHN0ci0+ZGlfbnVtLm5vX2FkZHIpKSkKKwkJZ290byBjb3JydXB0OworCWlwLT5pX25vX2Zvcm1hbF9pbm8gPSBiZTY0X3RvX2NwdShzdHItPmRpX251bS5ub19mb3JtYWxfaW5vKTsKKwlpcC0+aV9pbm9kZS5pX21vZGUgPSBiZTMyX3RvX2NwdShzdHItPmRpX21vZGUpOworCWlwLT5pX2lub2RlLmlfcmRldiA9IDA7CisJc3dpdGNoIChpcC0+aV9pbm9kZS5pX21vZGUgJiBTX0lGTVQpIHsKKwljYXNlIFNfSUZCTEs6CisJY2FzZSBTX0lGQ0hSOgorCQlpcC0+aV9pbm9kZS5pX3JkZXYgPSBNS0RFVihiZTMyX3RvX2NwdShzdHItPmRpX21ham9yKSwKKwkJCQkJICAgYmUzMl90b19jcHUoc3RyLT5kaV9taW5vcikpOworCQlicmVhazsKKwl9OworCisJaXAtPmlfaW5vZGUuaV91aWQgPSBiZTMyX3RvX2NwdShzdHItPmRpX3VpZCk7CisJaXAtPmlfaW5vZGUuaV9naWQgPSBiZTMyX3RvX2NwdShzdHItPmRpX2dpZCk7CisJZ2ZzMl9zZXRfbmxpbmsoJmlwLT5pX2lub2RlLCBiZTMyX3RvX2NwdShzdHItPmRpX25saW5rKSk7CisJaV9zaXplX3dyaXRlKCZpcC0+aV9pbm9kZSwgYmU2NF90b19jcHUoc3RyLT5kaV9zaXplKSk7CisJZ2ZzMl9zZXRfaW5vZGVfYmxvY2tzKCZpcC0+aV9pbm9kZSwgYmU2NF90b19jcHUoc3RyLT5kaV9ibG9ja3MpKTsKKwlhdGltZS50dl9zZWMgPSBiZTY0X3RvX2NwdShzdHItPmRpX2F0aW1lKTsKKwlhdGltZS50dl9uc2VjID0gYmUzMl90b19jcHUoc3RyLT5kaV9hdGltZV9uc2VjKTsKKwlpZiAodGltZXNwZWNfY29tcGFyZSgmaXAtPmlfaW5vZGUuaV9hdGltZSwgJmF0aW1lKSA8IDApCisJCWlwLT5pX2lub2RlLmlfYXRpbWUgPSBhdGltZTsKKwlpcC0+aV9pbm9kZS5pX210aW1lLnR2X3NlYyA9IGJlNjRfdG9fY3B1KHN0ci0+ZGlfbXRpbWUpOworCWlwLT5pX2lub2RlLmlfbXRpbWUudHZfbnNlYyA9IGJlMzJfdG9fY3B1KHN0ci0+ZGlfbXRpbWVfbnNlYyk7CisJaXAtPmlfaW5vZGUuaV9jdGltZS50dl9zZWMgPSBiZTY0X3RvX2NwdShzdHItPmRpX2N0aW1lKTsKKwlpcC0+aV9pbm9kZS5pX2N0aW1lLnR2X25zZWMgPSBiZTMyX3RvX2NwdShzdHItPmRpX2N0aW1lX25zZWMpOworCisJaXAtPmlfZ29hbCA9IGJlNjRfdG9fY3B1KHN0ci0+ZGlfZ29hbF9tZXRhKTsKKwlpcC0+aV9nZW5lcmF0aW9uID0gYmU2NF90b19jcHUoc3RyLT5kaV9nZW5lcmF0aW9uKTsKKworCWlwLT5pX2Rpc2tmbGFncyA9IGJlMzJfdG9fY3B1KHN0ci0+ZGlfZmxhZ3MpOworCWdmczJfc2V0X2lub2RlX2ZsYWdzKCZpcC0+aV9pbm9kZSk7CisJaGVpZ2h0ID0gYmUxNl90b19jcHUoc3RyLT5kaV9oZWlnaHQpOworCWlmICh1bmxpa2VseShoZWlnaHQgPiBHRlMyX01BWF9NRVRBX0hFSUdIVCkpCisJCWdvdG8gY29ycnVwdDsKKwlpcC0+aV9oZWlnaHQgPSAodTgpaGVpZ2h0OworCisJZGVwdGggPSBiZTE2X3RvX2NwdShzdHItPmRpX2RlcHRoKTsKKwlpZiAodW5saWtlbHkoZGVwdGggPiBHRlMyX0RJUl9NQVhfREVQVEgpKQorCQlnb3RvIGNvcnJ1cHQ7CisJaXAtPmlfZGVwdGggPSAodTgpZGVwdGg7CisJaXAtPmlfZW50cmllcyA9IGJlMzJfdG9fY3B1KHN0ci0+ZGlfZW50cmllcyk7CisKKwlpcC0+aV9lYXR0ciA9IGJlNjRfdG9fY3B1KHN0ci0+ZGlfZWF0dHIpOworCWlmIChTX0lTUkVHKGlwLT5pX2lub2RlLmlfbW9kZSkpCisJCWdmczJfc2V0X2FvcHMoJmlwLT5pX2lub2RlKTsKKworCXJldHVybiAwOworY29ycnVwdDoKKwlnZnMyX2NvbnNpc3RfaW5vZGUoaXApOworCXJldHVybiAtRUlPOworfQorCisvKioKKyAqIGdmczJfaW5vZGVfcmVmcmVzaCAtIFJlZnJlc2ggdGhlIGluY29yZSBjb3B5IG9mIHRoZSBkaW5vZGUKKyAqIEBpcDogVGhlIEdGUzIgaW5vZGUKKyAqCisgKiBSZXR1cm5zOiBlcnJubworICovCisKK2ludCBnZnMyX2lub2RlX3JlZnJlc2goc3RydWN0IGdmczJfaW5vZGUgKmlwKQoreworCXN0cnVjdCBidWZmZXJfaGVhZCAqZGliaDsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGdmczJfbWV0YV9pbm9kZV9idWZmZXIoaXAsICZkaWJoKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWlmIChnZnMyX21ldGF0eXBlX2NoZWNrKEdGUzJfU0IoJmlwLT5pX2lub2RlKSwgZGliaCwgR0ZTMl9NRVRBVFlQRV9ESSkpIHsKKwkJYnJlbHNlKGRpYmgpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwllcnJvciA9IGdmczJfZGlub2RlX2luKGlwLCBkaWJoLT5iX2RhdGEpOworCWJyZWxzZShkaWJoKTsKKwljbGVhcl9iaXQoR0lGX0lOVkFMSUQsICZpcC0+aV9mbGFncyk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgogICogaW5vZGVfZ29fbG9jayAtIG9wZXJhdGlvbiBkb25lIGFmdGVyIGFuIGlub2RlIGxvY2sgaXMgbG9ja2VkIGJ5IGEgcHJvY2VzcwogICogQGdsOiB0aGUgZ2xvY2sKICAqIEBmbGFnczoKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZ2xvcHMuaCBiL2ZzL2dmczIvZ2xvcHMuaAppbmRleCBiM2FhMmUzLi42ZmNlNDA5IDEwMDY0NAotLS0gYS9mcy9nZnMyL2dsb3BzLmgKKysrIGIvZnMvZ2ZzMi9nbG9wcy5oCkBAIC0yMyw0ICsyMyw2IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyBnZnMyX2pvdXJuYWxfZ2xvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyAqZ2ZzMl9nbG9wc19saXN0W107CiAKK2V4dGVybiB2b2lkIGdmczJfYWlsX2ZsdXNoKHN0cnVjdCBnZnMyX2dsb2NrICpnbCk7CisKICNlbmRpZiAvKiBfX0dMT1BTX0RPVF9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5jb3JlLmggYi9mcy9nZnMyL2luY29yZS5oCmluZGV4IDg3MGE4OWQuLjBhMDY0ZTkgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvaW5jb3JlLmgKKysrIGIvZnMvZ2ZzMi9pbmNvcmUuaApAQCAtMjAsNyArMjAsNiBAQAogCiAjZGVmaW5lIERJT19XQUlUCTB4MDAwMDAwMTAKICNkZWZpbmUgRElPX01FVEFEQVRBCTB4MDAwMDAwMjAKLSNkZWZpbmUgRElPX0FMTAkJMHgwMDAwMDEwMAogCiBzdHJ1Y3QgZ2ZzMl9sb2dfb3BlcmF0aW9uczsKIHN0cnVjdCBnZnMyX2xvZ19lbGVtZW50OwpAQCAtMjAwLDYgKzE5OSw4IEBACiAJR0xGX0lOSVRJQUwJCQk9IDEwLAogCUdMRl9GUk9aRU4JCQk9IDExLAogCUdMRl9RVUVVRUQJCQk9IDEyLAorCUdMRl9MUlUJCQkJPSAxMywKKwlHTEZfT0JKRUNUCQkJPSAxNCwgLyogVXNlZCBvbmx5IGZvciB0cmFjaW5nICovCiB9OwogCiBzdHJ1Y3QgZ2ZzMl9nbG9jayB7CkBAIC0yMzQsNiArMjM1LDcgQEAKIAogCXN0cnVjdCBsaXN0X2hlYWQgZ2xfYWlsX2xpc3Q7CiAJYXRvbWljX3QgZ2xfYWlsX2NvdW50OworCWF0b21pY190IGdsX3Jldm9rZXM7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBnbF93b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBnbF9kZWxldGU7CiAJc3RydWN0IHJjdV9oZWFkIGdsX3JjdTsKQEAgLTM3NCw4ICszNzYsNiBAQAogCXVuc2lnbmVkIGludCBhaV9maXJzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGFpX2FpbDFfbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGFpX2FpbDJfbGlzdDsKLQotCXU2NCBhaV9zeW5jX2dlbjsKIH07CiAKIHN0cnVjdCBnZnMyX2pvdXJuYWxfZXh0ZW50IHsKQEAgLTQ4OCw3ICs0ODgsNiBAQAogCiAJY2hhciBzYl9sb2NrcHJvdG9bR0ZTMl9MT0NLTkFNRV9MRU5dOwogCWNoYXIgc2JfbG9ja3RhYmxlW0dGUzJfTE9DS05BTUVfTEVOXTsKLQl1OCBzYl91dWlkWzE2XTsKIH07CiAKIC8qCkBAIC02NTQsNyArNjUzLDYgQEAKIAlzcGlubG9ja190IHNkX2FpbF9sb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQgc2RfYWlsMV9saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgc2RfYWlsMl9saXN0OwotCXU2NCBzZF9haWxfc3luY19nZW47CiAKIAkvKiBSZXBsYXkgc3R1ZmYgKi8KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5jIGIvZnMvZ2ZzMi9pbm9kZS5jCmluZGV4IDkxMzRkY2IuLjAzZTBjNTIgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvaW5vZGUuYworKysgYi9mcy9nZnMyL2lub2RlLmMKQEAgLTEsMjMgKzEsMjUgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDggUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDExIFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCiAgKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwogICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgveGF0dHIuaD4KICNpbmNsdWRlIDxsaW51eC9wb3NpeF9hY2wuaD4KLSNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCkBAIC0yNiwxOSArMjgsMTQgQEAKICNpbmNsdWRlICJkaXIuaCIKICNpbmNsdWRlICJ4YXR0ci5oIgogI2luY2x1ZGUgImdsb2NrLmgiCi0jaW5jbHVkZSAiZ2xvcHMuaCIKICNpbmNsdWRlICJpbm9kZS5oIgotI2luY2x1ZGUgImxvZy5oIgogI2luY2x1ZGUgIm1ldGFfaW8uaCIKICNpbmNsdWRlICJxdW90YS5oIgogI2luY2x1ZGUgInJncnAuaCIKICNpbmNsdWRlICJ0cmFucy5oIgogI2luY2x1ZGUgInV0aWwuaCIKLQotc3RydWN0IGdmczJfaW51bV9yYW5nZV9ob3N0IHsKLQl1NjQgaXJfc3RhcnQ7Ci0JdTY0IGlyX2xlbmd0aDsKLX07CisjaW5jbHVkZSAic3VwZXIuaCIKKyNpbmNsdWRlICJnbG9wcy5oIgogCiBzdHJ1Y3QgZ2ZzMl9za2lwX2RhdGEgewogCXU2NCBub19hZGRyOwpAQCAtNzQsMTQgKzcxLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBpbm9kZSAqZ2ZzMl9pbG9va3VwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBub19hZGRyKQorc3RydWN0IGlub2RlICpnZnMyX2lsb29rdXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IG5vX2FkZHIsIGludCBub25fYmxvY2spCiB7CiAJdW5zaWduZWQgbG9uZyBoYXNoID0gKHVuc2lnbmVkIGxvbmcpbm9fYWRkcjsKIAlzdHJ1Y3QgZ2ZzMl9za2lwX2RhdGEgZGF0YTsKIAogCWRhdGEubm9fYWRkciA9IG5vX2FkZHI7CiAJZGF0YS5za2lwcGVkID0gMDsKLQlkYXRhLm5vbl9ibG9jayA9IDA7CisJZGF0YS5ub25fYmxvY2sgPSBub25fYmxvY2s7CiAJcmV0dXJuIGlsb29rdXA1KHNiLCBoYXNoLCBpZ2V0X3Rlc3QsICZkYXRhKTsKIH0KIApAQCAtMjQ4LDIwMyArMjQ1LDYgQEAKIAlnb3RvIGZhaWw7CiB9CiAKLXN0YXRpYyBpbnQgZ2ZzMl9kaW5vZGVfaW4oc3RydWN0IGdmczJfaW5vZGUgKmlwLCBjb25zdCB2b2lkICpidWYpCi17Ci0JY29uc3Qgc3RydWN0IGdmczJfZGlub2RlICpzdHIgPSBidWY7Ci0Jc3RydWN0IHRpbWVzcGVjIGF0aW1lOwotCXUxNiBoZWlnaHQsIGRlcHRoOwotCi0JaWYgKHVubGlrZWx5KGlwLT5pX25vX2FkZHIgIT0gYmU2NF90b19jcHUoc3RyLT5kaV9udW0ubm9fYWRkcikpKQotCQlnb3RvIGNvcnJ1cHQ7Ci0JaXAtPmlfbm9fZm9ybWFsX2lubyA9IGJlNjRfdG9fY3B1KHN0ci0+ZGlfbnVtLm5vX2Zvcm1hbF9pbm8pOwotCWlwLT5pX2lub2RlLmlfbW9kZSA9IGJlMzJfdG9fY3B1KHN0ci0+ZGlfbW9kZSk7Ci0JaXAtPmlfaW5vZGUuaV9yZGV2ID0gMDsKLQlzd2l0Y2ggKGlwLT5pX2lub2RlLmlfbW9kZSAmIFNfSUZNVCkgewotCWNhc2UgU19JRkJMSzoKLQljYXNlIFNfSUZDSFI6Ci0JCWlwLT5pX2lub2RlLmlfcmRldiA9IE1LREVWKGJlMzJfdG9fY3B1KHN0ci0+ZGlfbWFqb3IpLAotCQkJCQkgICBiZTMyX3RvX2NwdShzdHItPmRpX21pbm9yKSk7Ci0JCWJyZWFrOwotCX07Ci0KLQlpcC0+aV9pbm9kZS5pX3VpZCA9IGJlMzJfdG9fY3B1KHN0ci0+ZGlfdWlkKTsKLQlpcC0+aV9pbm9kZS5pX2dpZCA9IGJlMzJfdG9fY3B1KHN0ci0+ZGlfZ2lkKTsKLQkvKgotCSAqIFdlIHdpbGwgbmVlZCB0byByZXZpZXcgc2V0dGluZyB0aGUgbmxpbmsgY291bnQgaGVyZSBpbiB0aGUKLQkgKiBsaWdodCBvZiB0aGUgZm9ydGhjb21pbmcgcm8gYmluZCBtb3VudCB3b3JrLiBUaGlzIGlzIGEgcmVtaW5kZXIKLQkgKiB0byBkbyB0aGF0LgotCSAqLwotCWlwLT5pX2lub2RlLmlfbmxpbmsgPSBiZTMyX3RvX2NwdShzdHItPmRpX25saW5rKTsKLQlpX3NpemVfd3JpdGUoJmlwLT5pX2lub2RlLCBiZTY0X3RvX2NwdShzdHItPmRpX3NpemUpKTsKLQlnZnMyX3NldF9pbm9kZV9ibG9ja3MoJmlwLT5pX2lub2RlLCBiZTY0X3RvX2NwdShzdHItPmRpX2Jsb2NrcykpOwotCWF0aW1lLnR2X3NlYyA9IGJlNjRfdG9fY3B1KHN0ci0+ZGlfYXRpbWUpOwotCWF0aW1lLnR2X25zZWMgPSBiZTMyX3RvX2NwdShzdHItPmRpX2F0aW1lX25zZWMpOwotCWlmICh0aW1lc3BlY19jb21wYXJlKCZpcC0+aV9pbm9kZS5pX2F0aW1lLCAmYXRpbWUpIDwgMCkKLQkJaXAtPmlfaW5vZGUuaV9hdGltZSA9IGF0aW1lOwotCWlwLT5pX2lub2RlLmlfbXRpbWUudHZfc2VjID0gYmU2NF90b19jcHUoc3RyLT5kaV9tdGltZSk7Ci0JaXAtPmlfaW5vZGUuaV9tdGltZS50dl9uc2VjID0gYmUzMl90b19jcHUoc3RyLT5kaV9tdGltZV9uc2VjKTsKLQlpcC0+aV9pbm9kZS5pX2N0aW1lLnR2X3NlYyA9IGJlNjRfdG9fY3B1KHN0ci0+ZGlfY3RpbWUpOwotCWlwLT5pX2lub2RlLmlfY3RpbWUudHZfbnNlYyA9IGJlMzJfdG9fY3B1KHN0ci0+ZGlfY3RpbWVfbnNlYyk7Ci0KLQlpcC0+aV9nb2FsID0gYmU2NF90b19jcHUoc3RyLT5kaV9nb2FsX21ldGEpOwotCWlwLT5pX2dlbmVyYXRpb24gPSBiZTY0X3RvX2NwdShzdHItPmRpX2dlbmVyYXRpb24pOwotCi0JaXAtPmlfZGlza2ZsYWdzID0gYmUzMl90b19jcHUoc3RyLT5kaV9mbGFncyk7Ci0JZ2ZzMl9zZXRfaW5vZGVfZmxhZ3MoJmlwLT5pX2lub2RlKTsKLQloZWlnaHQgPSBiZTE2X3RvX2NwdShzdHItPmRpX2hlaWdodCk7Ci0JaWYgKHVubGlrZWx5KGhlaWdodCA+IEdGUzJfTUFYX01FVEFfSEVJR0hUKSkKLQkJZ290byBjb3JydXB0OwotCWlwLT5pX2hlaWdodCA9ICh1OCloZWlnaHQ7Ci0KLQlkZXB0aCA9IGJlMTZfdG9fY3B1KHN0ci0+ZGlfZGVwdGgpOwotCWlmICh1bmxpa2VseShkZXB0aCA+IEdGUzJfRElSX01BWF9ERVBUSCkpCi0JCWdvdG8gY29ycnVwdDsKLQlpcC0+aV9kZXB0aCA9ICh1OClkZXB0aDsKLQlpcC0+aV9lbnRyaWVzID0gYmUzMl90b19jcHUoc3RyLT5kaV9lbnRyaWVzKTsKLQotCWlwLT5pX2VhdHRyID0gYmU2NF90b19jcHUoc3RyLT5kaV9lYXR0cik7Ci0JaWYgKFNfSVNSRUcoaXAtPmlfaW5vZGUuaV9tb2RlKSkKLQkJZ2ZzMl9zZXRfYW9wcygmaXAtPmlfaW5vZGUpOwotCi0JcmV0dXJuIDA7Ci1jb3JydXB0OgotCWlmIChnZnMyX2NvbnNpc3RfaW5vZGUoaXApKQotCQlnZnMyX2Rpbm9kZV9wcmludChpcCk7Ci0JcmV0dXJuIC1FSU87Ci19Ci0KLS8qKgotICogZ2ZzMl9pbm9kZV9yZWZyZXNoIC0gUmVmcmVzaCB0aGUgaW5jb3JlIGNvcHkgb2YgdGhlIGRpbm9kZQotICogQGlwOiBUaGUgR0ZTMiBpbm9kZQotICoKLSAqIFJldHVybnM6IGVycm5vCi0gKi8KLQotaW50IGdmczJfaW5vZGVfcmVmcmVzaChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXApCi17Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpkaWJoOwotCWludCBlcnJvcjsKLQotCWVycm9yID0gZ2ZzMl9tZXRhX2lub2RlX2J1ZmZlcihpcCwgJmRpYmgpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JaWYgKGdmczJfbWV0YXR5cGVfY2hlY2soR0ZTMl9TQigmaXAtPmlfaW5vZGUpLCBkaWJoLCBHRlMyX01FVEFUWVBFX0RJKSkgewotCQlicmVsc2UoZGliaCk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWVycm9yID0gZ2ZzMl9kaW5vZGVfaW4oaXAsIGRpYmgtPmJfZGF0YSk7Ci0JYnJlbHNlKGRpYmgpOwotCWNsZWFyX2JpdChHSUZfSU5WQUxJRCwgJmlwLT5pX2ZsYWdzKTsKLQotCXJldHVybiBlcnJvcjsKLX0KLQotaW50IGdmczJfZGlub2RlX2RlYWxsb2Moc3RydWN0IGdmczJfaW5vZGUgKmlwKQotewotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQigmaXAtPmlfaW5vZGUpOwotCXN0cnVjdCBnZnMyX2FsbG9jICphbDsKLQlzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqcmdkOwotCWludCBlcnJvcjsKLQotCWlmIChnZnMyX2dldF9pbm9kZV9ibG9ja3MoJmlwLT5pX2lub2RlKSAhPSAxKSB7Ci0JCWlmIChnZnMyX2NvbnNpc3RfaW5vZGUoaXApKQotCQkJZ2ZzMl9kaW5vZGVfcHJpbnQoaXApOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlhbCA9IGdmczJfYWxsb2NfZ2V0KGlwKTsKLQlpZiAoIWFsKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWVycm9yID0gZ2ZzMl9xdW90YV9ob2xkKGlwLCBOT19RVU9UQV9DSEFOR0UsIE5PX1FVT1RBX0NIQU5HRSk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dDsKLQotCWVycm9yID0gZ2ZzMl9yaW5kZXhfaG9sZChzZHAsICZhbC0+YWxfcmlfZ2gpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfcXM7Ci0KLQlyZ2QgPSBnZnMyX2JsazJyZ3JwZChzZHAsIGlwLT5pX25vX2FkZHIpOwotCWlmICghcmdkKSB7Ci0JCWdmczJfY29uc2lzdF9pbm9kZShpcCk7Ci0JCWVycm9yID0gLUVJTzsKLQkJZ290byBvdXRfcmluZGV4X3JlbHNlOwotCX0KLQotCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KHJnZC0+cmRfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwKLQkJCQkgICAmYWwtPmFsX3JnZF9naCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9yaW5kZXhfcmVsc2U7Ci0KLQllcnJvciA9IGdmczJfdHJhbnNfYmVnaW4oc2RwLCBSRVNfUkdfQklUICsgUkVTX1NUQVRGUyArIFJFU19RVU9UQSwgMSk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9yZ19ndW5sb2NrOwotCi0Jc2V0X2JpdChHTEZfRElSVFksICZpcC0+aV9nbC0+Z2xfZmxhZ3MpOwotCXNldF9iaXQoR0xGX0xGTFVTSCwgJmlwLT5pX2dsLT5nbF9mbGFncyk7Ci0KLQlnZnMyX2ZyZWVfZGkocmdkLCBpcCk7Ci0KLQlnZnMyX3RyYW5zX2VuZChzZHApOwotCi1vdXRfcmdfZ3VubG9jazoKLQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmYWwtPmFsX3JnZF9naCk7Ci1vdXRfcmluZGV4X3JlbHNlOgotCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZhbC0+YWxfcmlfZ2gpOwotb3V0X3FzOgotCWdmczJfcXVvdGFfdW5ob2xkKGlwKTsKLW91dDoKLQlnZnMyX2FsbG9jX3B1dChpcCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi0vKioKLSAqIGdmczJfY2hhbmdlX25saW5rIC0gQ2hhbmdlIG5saW5rIGNvdW50IG9uIGlub2RlCi0gKiBAaXA6IFRoZSBHRlMyIGlub2RlCi0gKiBAZGlmZjogVGhlIGNoYW5nZSBpbiB0aGUgbmxpbmsgY291bnQgcmVxdWlyZWQKLSAqCi0gKiBSZXR1cm5zOiBlcnJubwotICovCi1pbnQgZ2ZzMl9jaGFuZ2Vfbmxpbmsoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBpbnQgZGlmZikKLXsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpYmg7Ci0JdTMyIG5saW5rOwotCWludCBlcnJvcjsKLQotCUJVR19PTihkaWZmICE9IDEgJiYgZGlmZiAhPSAtMSk7Ci0JbmxpbmsgPSBpcC0+aV9pbm9kZS5pX25saW5rICsgZGlmZjsKLQotCS8qIElmIHdlIGFyZSByZWR1Y2luZyB0aGUgbmxpbmsgY291bnQsIGJ1dCB0aGUgbmV3IHZhbHVlIGVuZHMgdXAgYmVpbmcKLQkgICBiaWdnZXIgdGhhbiB0aGUgb2xkIG9uZSwgd2UgbXVzdCBoYXZlIHVuZGVyZmxvd2VkLiAqLwotCWlmIChkaWZmIDwgMCAmJiBubGluayA+IGlwLT5pX2lub2RlLmlfbmxpbmspIHsKLQkJaWYgKGdmczJfY29uc2lzdF9pbm9kZShpcCkpCi0JCQlnZnMyX2Rpbm9kZV9wcmludChpcCk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWVycm9yID0gZ2ZzMl9tZXRhX2lub2RlX2J1ZmZlcihpcCwgJmRpYmgpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JaWYgKGRpZmYgPiAwKQotCQlpbmNfbmxpbmsoJmlwLT5pX2lub2RlKTsKLQllbHNlCi0JCWRyb3BfbmxpbmsoJmlwLT5pX2lub2RlKTsKLQotCWlwLT5pX2lub2RlLmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7Ci0KLQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgZGliaCwgMSk7Ci0JZ2ZzMl9kaW5vZGVfb3V0KGlwLCBkaWJoLT5iX2RhdGEpOwotCWJyZWxzZShkaWJoKTsKLQltYXJrX2lub2RlX2RpcnR5KCZpcC0+aV9pbm9kZSk7Ci0KLQlpZiAoaXAtPmlfaW5vZGUuaV9ubGluayA9PSAwKQotCQlnZnMyX3VubGlua19kaSgmaXAtPmlfaW5vZGUpOyAvKiBtYXJrIGlub2RlIHVubGlua2VkICovCi0KLQlyZXR1cm4gZXJyb3I7Ci19CiAKIHN0cnVjdCBpbm9kZSAqZ2ZzMl9sb29rdXBfc2ltcGxlKHN0cnVjdCBpbm9kZSAqZGlwLCBjb25zdCBjaGFyICpuYW1lKQogewpAQCAtNTQzLDcgKzM0Myw3IEBACiAKIAkvKiAgRG9uJ3QgY3JlYXRlIGVudHJpZXMgaW4gYW4gdW5saW5rZWQgZGlyZWN0b3J5ICAqLwogCWlmICghZGlwLT5pX2lub2RlLmlfbmxpbmspCi0JCXJldHVybiAtRVBFUk07CisJCXJldHVybiAtRU5PRU5UOwogCiAJZXJyb3IgPSBnZnMyX2Rpcl9jaGVjaygmZGlwLT5pX2lub2RlLCBuYW1lLCBOVUxMKTsKIAlzd2l0Y2ggKGVycm9yKSB7CkBAIC02MTMsMjEgKzQxMyw0NCBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIHZvaWQgZ2ZzMl9pbml0X2RpcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpYmgsCisJCQkgIGNvbnN0IHN0cnVjdCBnZnMyX2lub2RlICpwYXJlbnQpCit7CisJc3RydWN0IGdmczJfZGlub2RlICpkaSA9IChzdHJ1Y3QgZ2ZzMl9kaW5vZGUgKilkaWJoLT5iX2RhdGE7CisJc3RydWN0IGdmczJfZGlyZW50ICpkZW50ID0gKHN0cnVjdCBnZnMyX2RpcmVudCAqKShkaSsxKTsKKworCWdmczJfcXN0cjJkaXJlbnQoJmdmczJfcWRvdCwgR0ZTMl9ESVJFTlRfU0laRShnZnMyX3Fkb3QubGVuKSwgZGVudCk7CisJZGVudC0+ZGVfaW51bSA9IGRpLT5kaV9udW07IC8qIGFscmVhZHkgR0ZTMiBlbmRpYW4gKi8KKwlkZW50LT5kZV90eXBlID0gY3B1X3RvX2JlMTYoRFRfRElSKTsKKworCWRlbnQgPSAoc3RydWN0IGdmczJfZGlyZW50ICopKChjaGFyKilkZW50ICsgR0ZTMl9ESVJFTlRfU0laRSgxKSk7CisJZ2ZzMl9xc3RyMmRpcmVudCgmZ2ZzMl9xZG90ZG90LCBkaWJoLT5iX3NpemUgLSBHRlMyX0RJUkVOVF9TSVpFKDEpIC0gc2l6ZW9mKHN0cnVjdCBnZnMyX2Rpbm9kZSksIGRlbnQpOworCWdmczJfaW51bV9vdXQocGFyZW50LCBkZW50KTsKKwlkZW50LT5kZV90eXBlID0gY3B1X3RvX2JlMTYoRFRfRElSKTsKKwkKK30KKwogLyoqCiAgKiBpbml0X2Rpbm9kZSAtIEZpbGwgaW4gYSBuZXcgZGlub2RlIHN0cnVjdHVyZQotICogQGRpcDogdGhlIGRpcmVjdG9yeSB0aGlzIGlub2RlIGlzIGJlaW5nIGNyZWF0ZWQgaW4KKyAqIEBkaXA6IFRoZSBkaXJlY3RvcnkgdGhpcyBpbm9kZSBpcyBiZWluZyBjcmVhdGVkIGluCiAgKiBAZ2w6IFRoZSBnbG9jayBjb3ZlcmluZyB0aGUgbmV3IGlub2RlCi0gKiBAaW51bTogdGhlIGlub2RlIG51bWJlcgotICogQG1vZGU6IHRoZSBmaWxlIHBlcm1pc3Npb25zCi0gKiBAdWlkOgotICogQGdpZDoKKyAqIEBpbnVtOiBUaGUgaW5vZGUgbnVtYmVyCisgKiBAbW9kZTogVGhlIGZpbGUgcGVybWlzc2lvbnMKKyAqIEB1aWQ6IFRoZSB1aWQgb2YgdGhlIG5ldyBpbm9kZQorICogQGdpZDogVGhlIGdpZCBvZiB0aGUgbmV3IGlub2RlCisgKiBAZ2VuZXJhdGlvbjogVGhlIGdlbmVyYXRpb24gbnVtYmVyIG9mIHRoZSBuZXcgaW5vZGUKKyAqIEBkZXY6IFRoZSBkZXZpY2UgbnVtYmVyIChpZiBhIGRldmljZSBub2RlKQorICogQHN5bW5hbWU6IFRoZSBzeW1saW5rIGRlc3RpbmF0aW9uIChpZiBhIHN5bWxpbmspCisgKiBAc2l6ZTogVGhlIGlub2RlIHNpemUgKGlnbm9yZWQgZm9yIGRpcmVjdG9yaWVzKQorICogQGJocDogVGhlIGJ1ZmZlciBoZWFkIChyZXR1cm5lZCB0byBjYWxsZXIpCiAgKgogICovCiAKIHN0YXRpYyB2b2lkIGluaXRfZGlub2RlKHN0cnVjdCBnZnMyX2lub2RlICpkaXAsIHN0cnVjdCBnZnMyX2dsb2NrICpnbCwKIAkJCWNvbnN0IHN0cnVjdCBnZnMyX2ludW1faG9zdCAqaW51bSwgdW5zaWduZWQgaW50IG1vZGUsCiAJCQl1bnNpZ25lZCBpbnQgdWlkLCB1bnNpZ25lZCBpbnQgZ2lkLAotCQkJY29uc3QgdTY0ICpnZW5lcmF0aW9uLCBkZXZfdCBkZXYsIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocCkKKwkJCWNvbnN0IHU2NCAqZ2VuZXJhdGlvbiwgZGV2X3QgZGV2LCBjb25zdCBjaGFyICpzeW1uYW1lLAorCQkJdW5zaWduZWQgc2l6ZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhwKQogewogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQigmZGlwLT5pX2lub2RlKTsKIAlzdHJ1Y3QgZ2ZzMl9kaW5vZGUgKmRpOwpAQCAtNjQ2LDcgKzQ2OSw3IEBACiAJZGktPmRpX3VpZCA9IGNwdV90b19iZTMyKHVpZCk7CiAJZGktPmRpX2dpZCA9IGNwdV90b19iZTMyKGdpZCk7CiAJZGktPmRpX25saW5rID0gMDsKLQlkaS0+ZGlfc2l6ZSA9IDA7CisJZGktPmRpX3NpemUgPSBjcHVfdG9fYmU2NChzaXplKTsKIAlkaS0+ZGlfYmxvY2tzID0gY3B1X3RvX2JlNjQoMSk7CiAJZGktPmRpX2F0aW1lID0gZGktPmRpX210aW1lID0gZGktPmRpX2N0aW1lID0gY3B1X3RvX2JlNjQodHYudHZfc2VjKTsKIAlkaS0+ZGlfbWFqb3IgPSBjcHVfdG9fYmUzMihNQUpPUihkZXYpKTsKQEAgLTY1NCwxNiArNDc3LDYgQEAKIAlkaS0+ZGlfZ29hbF9tZXRhID0gZGktPmRpX2dvYWxfZGF0YSA9IGNwdV90b19iZTY0KGludW0tPm5vX2FkZHIpOwogCWRpLT5kaV9nZW5lcmF0aW9uID0gY3B1X3RvX2JlNjQoKmdlbmVyYXRpb24pOwogCWRpLT5kaV9mbGFncyA9IDA7Ci0KLQlpZiAoU19JU1JFRyhtb2RlKSkgewotCQlpZiAoKGRpcC0+aV9kaXNrZmxhZ3MgJiBHRlMyX0RJRl9JTkhFUklUX0pEQVRBKSB8fAotCQkgICAgZ2ZzMl90dW5lX2dldChzZHAsIGd0X25ld19maWxlc19qZGF0YSkpCi0JCQlkaS0+ZGlfZmxhZ3MgfD0gY3B1X3RvX2JlMzIoR0ZTMl9ESUZfSkRBVEEpOwotCX0gZWxzZSBpZiAoU19JU0RJUihtb2RlKSkgewotCQlkaS0+ZGlfZmxhZ3MgfD0gY3B1X3RvX2JlMzIoZGlwLT5pX2Rpc2tmbGFncyAmCi0JCQkJCSAgICBHRlMyX0RJRl9JTkhFUklUX0pEQVRBKTsKLQl9Ci0KIAlkaS0+X19wYWQxID0gMDsKIAlkaS0+ZGlfcGF5bG9hZF9mb3JtYXQgPSBjcHVfdG9fYmUzMihTX0lTRElSKG1vZGUpID8gR0ZTMl9GT1JNQVRfREUgOiAwKTsKIAlkaS0+ZGlfaGVpZ2h0ID0gMDsKQEAgLTY3Nyw3ICs0OTAsMjYgQEAKIAlkaS0+ZGlfbXRpbWVfbnNlYyA9IGNwdV90b19iZTMyKHR2LnR2X25zZWMpOwogCWRpLT5kaV9jdGltZV9uc2VjID0gY3B1X3RvX2JlMzIodHYudHZfbnNlYyk7CiAJbWVtc2V0KCZkaS0+ZGlfcmVzZXJ2ZWQsIDAsIHNpemVvZihkaS0+ZGlfcmVzZXJ2ZWQpKTsKLQkKKworCXN3aXRjaChtb2RlICYgU19JRk1UKSB7CQorCWNhc2UgU19JRlJFRzoKKwkJaWYgKChkaXAtPmlfZGlza2ZsYWdzICYgR0ZTMl9ESUZfSU5IRVJJVF9KREFUQSkgfHwKKwkJICAgIGdmczJfdHVuZV9nZXQoc2RwLCBndF9uZXdfZmlsZXNfamRhdGEpKQorCQkJZGktPmRpX2ZsYWdzIHw9IGNwdV90b19iZTMyKEdGUzJfRElGX0pEQVRBKTsKKwkJYnJlYWs7CisJY2FzZSBTX0lGRElSOgorCQlkaS0+ZGlfZmxhZ3MgfD0gY3B1X3RvX2JlMzIoZGlwLT5pX2Rpc2tmbGFncyAmCisJCQkJCSAgICBHRlMyX0RJRl9JTkhFUklUX0pEQVRBKTsKKwkJZGktPmRpX2ZsYWdzIHw9IGNwdV90b19iZTMyKEdGUzJfRElGX0pEQVRBKTsKKwkJZGktPmRpX3NpemUgPSBjcHVfdG9fYmU2NChzZHAtPnNkX3NiLnNiX2JzaXplIC0gc2l6ZW9mKHN0cnVjdCBnZnMyX2Rpbm9kZSkpOworCQlkaS0+ZGlfZW50cmllcyA9IGNwdV90b19iZTMyKDIpOworCQlnZnMyX2luaXRfZGlyKGRpYmgsIGRpcCk7CisJCWJyZWFrOworCWNhc2UgU19JRkxOSzoKKwkJbWVtY3B5KGRpYmgtPmJfZGF0YSArIHNpemVvZihzdHJ1Y3QgZ2ZzMl9kaW5vZGUpLCBzeW1uYW1lLCBzaXplKTsKKwkJYnJlYWs7CisJfQorCiAJc2V0X2J1ZmZlcl91cHRvZGF0ZShkaWJoKTsKIAogCSpiaHAgPSBkaWJoOwpAQCAtNjg1LDcgKzUxNyw4IEBACiAKIHN0YXRpYyBpbnQgbWFrZV9kaW5vZGUoc3RydWN0IGdmczJfaW5vZGUgKmRpcCwgc3RydWN0IGdmczJfZ2xvY2sgKmdsLAogCQkgICAgICAgdW5zaWduZWQgaW50IG1vZGUsIGNvbnN0IHN0cnVjdCBnZnMyX2ludW1faG9zdCAqaW51bSwKLQkJICAgICAgIGNvbnN0IHU2NCAqZ2VuZXJhdGlvbiwgZGV2X3QgZGV2LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHApCisJCSAgICAgICBjb25zdCB1NjQgKmdlbmVyYXRpb24sIGRldl90IGRldiwgY29uc3QgY2hhciAqc3ltbmFtZSwKKwkJICAgICAgIHVuc2lnbmVkIGludCBzaXplLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHApCiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKCZkaXAtPmlfaW5vZGUpOwogCXVuc2lnbmVkIGludCB1aWQsIGdpZDsKQEAgLTcwNyw3ICs1NDAsNyBAQAogCWlmIChlcnJvcikKIAkJZ290byBvdXRfcXVvdGE7CiAKLQlpbml0X2Rpbm9kZShkaXAsIGdsLCBpbnVtLCBtb2RlLCB1aWQsIGdpZCwgZ2VuZXJhdGlvbiwgZGV2LCBiaHApOworCWluaXRfZGlub2RlKGRpcCwgZ2wsIGludW0sIG1vZGUsIHVpZCwgZ2lkLCBnZW5lcmF0aW9uLCBkZXYsIHN5bW5hbWUsIHNpemUsIGJocCk7CiAJZ2ZzMl9xdW90YV9jaGFuZ2UoZGlwLCArMSwgdWlkLCBnaWQpOwogCWdmczJfdHJhbnNfZW5kKHNkcCk7CiAKQEAgLTc2MSwxNCArNTk0LDE2IEBACiAJCQlnb3RvIGZhaWxfcXVvdGFfbG9ja3M7CiAJfQogCi0JZXJyb3IgPSBnZnMyX2Rpcl9hZGQoJmRpcC0+aV9pbm9kZSwgbmFtZSwgaXAsIElGMkRUKGlwLT5pX2lub2RlLmlfbW9kZSkpOworCWVycm9yID0gZ2ZzMl9kaXJfYWRkKCZkaXAtPmlfaW5vZGUsIG5hbWUsIGlwKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZmFpbF9lbmRfdHJhbnM7CiAKIAllcnJvciA9IGdmczJfbWV0YV9pbm9kZV9idWZmZXIoaXAsICZkaWJoKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZmFpbF9lbmRfdHJhbnM7Ci0JaXAtPmlfaW5vZGUuaV9ubGluayA9IDE7CisJaW5jX25saW5rKCZpcC0+aV9pbm9kZSk7CisJaWYgKFNfSVNESVIoaXAtPmlfaW5vZGUuaV9tb2RlKSkKKwkJaW5jX25saW5rKCZpcC0+aV9pbm9kZSk7CiAJZ2ZzMl90cmFuc19hZGRfYmgoaXAtPmlfZ2wsIGRpYmgsIDEpOwogCWdmczJfZGlub2RlX291dChpcCwgZGliaC0+Yl9kYXRhKTsKIAlicmVsc2UoZGliaCk7CkBAIC04MTUsMjcgKzY1MCwyNSBAQAogfQogCiAvKioKLSAqIGdmczJfY3JlYXRlaSAtIENyZWF0ZSBhIG5ldyBpbm9kZQotICogQGdoczogQW4gYXJyYXkgb2YgdHdvIGhvbGRlcnMKLSAqIEBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgbmV3IGZpbGUKLSAqIEBtb2RlOiB0aGUgcGVybWlzc2lvbnMgb24gdGhlIG5ldyBpbm9kZQorICogZ2ZzMl9jcmVhdGVfaW5vZGUgLSBDcmVhdGUgYSBuZXcgaW5vZGUKKyAqIEBkaXI6IFRoZSBwYXJlbnQgZGlyZWN0b3J5CisgKiBAZGVudHJ5OiBUaGUgbmV3IGRlbnRyeQorICogQG1vZGU6IFRoZSBwZXJtaXNzaW9ucyBvbiB0aGUgbmV3IGlub2RlCisgKiBAZGV2OiBGb3IgZGV2aWNlIG5vZGVzLCB0aGlzIGlzIHRoZSBkZXZpY2UgbnVtYmVyCisgKiBAc3ltbmFtZTogRm9yIHN5bWxpbmtzLCB0aGlzIGlzIHRoZSBsaW5rIGRlc3RpbmF0aW9uCisgKiBAc2l6ZTogVGhlIGluaXRpYWwgc2l6ZSBvZiB0aGUgaW5vZGUgKGlnbm9yZWQgZm9yIGRpcmVjdG9yaWVzKQogICoKLSAqIEBnaHNbMF0gaXMgYW4gaW5pdGlhbGl6ZWQgaG9sZGVyIGZvciB0aGUgZGlyZWN0b3J5Ci0gKiBAZ2hzWzFdIGlzIHRoZSBob2xkZXIgZm9yIHRoZSBpbm9kZSBsb2NrCi0gKgotICogSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBub3QgTlVMTCwgdGhlIGdsb2NrcyBvbiBib3RoIHRoZSBkaXJlY3RvcnkgYW5kIHRoZSBuZXcKLSAqIGZpbGUgYXJlIGhlbGQuICBBIHRyYW5zYWN0aW9uIGhhcyBiZWVuIHN0YXJ0ZWQgYW5kIGFuIGlucGxhY2UgcmVzZXJ2YXRpb24KLSAqIGlzIGhlbGQsIGFzIHdlbGwuCi0gKgotICogUmV0dXJuczogQW4gaW5vZGUKKyAqIFJldHVybnM6IDAgb24gc3VjY2Vzcywgb3IgZXJyb3IgY29kZQogICovCiAKLXN0cnVjdCBpbm9kZSAqZ2ZzMl9jcmVhdGVpKHN0cnVjdCBnZnMyX2hvbGRlciAqZ2hzLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwKLQkJCSAgIHVuc2lnbmVkIGludCBtb2RlLCBkZXZfdCBkZXYpCitzdGF0aWMgaW50IGdmczJfY3JlYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkgICAgIHVuc2lnbmVkIGludCBtb2RlLCBkZXZfdCBkZXYsIGNvbnN0IGNoYXIgKnN5bW5hbWUsCisJCQkgICAgIHVuc2lnbmVkIGludCBzaXplKQogeworCWNvbnN0IHN0cnVjdCBxc3RyICpuYW1lID0gJmRlbnRyeS0+ZF9uYW1lOworCXN0cnVjdCBnZnMyX2hvbGRlciBnaHNbMl07CiAJc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7Ci0Jc3RydWN0IGdmczJfaW5vZGUgKmRpcCA9IGdocy0+Z2hfZ2wtPmdsX29iamVjdDsKLQlzdHJ1Y3QgaW5vZGUgKmRpciA9ICZkaXAtPmlfaW5vZGU7CisJc3RydWN0IGdmczJfaW5vZGUgKmRpcCA9IEdGUzJfSShkaXIpOwogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQigmZGlwLT5pX2lub2RlKTsKIAlzdHJ1Y3QgZ2ZzMl9pbnVtX2hvc3QgaW51bSA9IHsgLm5vX2FkZHIgPSAwLCAubm9fZm9ybWFsX2lubyA9IDAgfTsKIAlpbnQgZXJyb3I7CkBAIC04NDMsMTAgKzY3Niw5IEBACiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CiAKIAlpZiAoIW5hbWUtPmxlbiB8fCBuYW1lLT5sZW4gPiBHRlMyX0ZOQU1FU0laRSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOQU1FVE9PTE9ORyk7CisJCXJldHVybiAtRU5BTUVUT09MT05HOwogCi0JZ2ZzMl9ob2xkZXJfcmVpbml0KExNX1NUX0VYQ0xVU0lWRSwgMCwgZ2hzKTsKLQllcnJvciA9IGdmczJfZ2xvY2tfbnEoZ2hzKTsKKwllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChkaXAtPmlfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwgZ2hzKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZmFpbDsKIApAQCAtODY0LDcgKzY5Niw3IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIGZhaWxfZ3VubG9jazsKIAotCWVycm9yID0gbWFrZV9kaW5vZGUoZGlwLCBnaHNbMV0uZ2hfZ2wsIG1vZGUsICZpbnVtLCAmZ2VuZXJhdGlvbiwgZGV2LCAmYmgpOworCWVycm9yID0gbWFrZV9kaW5vZGUoZGlwLCBnaHNbMV0uZ2hfZ2wsIG1vZGUsICZpbnVtLCAmZ2VuZXJhdGlvbiwgZGV2LCBzeW1uYW1lLCBzaXplLCAmYmgpOwogCWlmIChlcnJvcikKIAkJZ290byBmYWlsX2d1bmxvY2syOwogCkBAIC04OTEsMTggKzcyMyw4NTIgQEAKIAogCWlmIChiaCkKIAkJYnJlbHNlKGJoKTsKLQlyZXR1cm4gaW5vZGU7CisKKwlnZnMyX3RyYW5zX2VuZChzZHApOworCWlmIChkaXAtPmlfYWxsb2MtPmFsX3JnZCkKKwkJZ2ZzMl9pbnBsYWNlX3JlbGVhc2UoZGlwKTsKKwlnZnMyX3F1b3RhX3VubG9jayhkaXApOworCWdmczJfYWxsb2NfcHV0KGRpcCk7CisJZ2ZzMl9nbG9ja19kcV91bmluaXRfbSgyLCBnaHMpOworCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CisJcmV0dXJuIDA7CiAKIGZhaWxfZ3VubG9jazI6CiAJZ2ZzMl9nbG9ja19kcV91bmluaXQoZ2hzICsgMSk7CiAJaWYgKGlub2RlICYmICFJU19FUlIoaW5vZGUpKQogCQlpcHV0KGlub2RlKTsKIGZhaWxfZ3VubG9jazoKLQlnZnMyX2dsb2NrX2RxKGdocyk7CisJZ2ZzMl9nbG9ja19kcV91bmluaXQoZ2hzKTsKIGZhaWw6CiAJaWYgKGJoKQogCQlicmVsc2UoYmgpOwotCXJldHVybiBFUlJfUFRSKGVycm9yKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogZ2ZzMl9jcmVhdGUgLSBDcmVhdGUgYSBmaWxlCisgKiBAZGlyOiBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIHRvIGNyZWF0ZSB0aGUgZmlsZQorICogQGRlbnRyeTogVGhlIGRlbnRyeSBvZiB0aGUgbmV3IGZpbGUKKyAqIEBtb2RlOiBUaGUgbW9kZSBvZiB0aGUgbmV3IGZpbGUKKyAqCisgKiBSZXR1cm5zOiBlcnJubworICovCisKK3N0YXRpYyBpbnQgZ2ZzMl9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJICAgICAgIGludCBtb2RlLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCWludCByZXQ7CisKKwlmb3IgKDs7KSB7CisJCXJldCA9IGdmczJfY3JlYXRlX2lub2RlKGRpciwgZGVudHJ5LCBTX0lGUkVHIHwgbW9kZSwgMCwgTlVMTCwgMCk7CisJCWlmIChyZXQgIT0gLUVFWElTVCB8fCAobmQgJiYgKG5kLT5mbGFncyAmIExPT0tVUF9FWENMKSkpCisJCQlyZXR1cm4gcmV0OworCisJCWlub2RlID0gZ2ZzMl9sb29rdXBpKGRpciwgJmRlbnRyeS0+ZF9uYW1lLCAwKTsKKwkJaWYgKGlub2RlKSB7CisJCQlpZiAoIUlTX0VSUihpbm9kZSkpCisJCQkJYnJlYWs7CisJCQlyZXR1cm4gUFRSX0VSUihpbm9kZSk7CisJCX0KKwl9CisKKwlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOworCXJldHVybiAwOworfQorCisvKioKKyAqIGdmczJfbG9va3VwIC0gTG9vayB1cCBhIGZpbGVuYW1lIGluIGEgZGlyZWN0b3J5IGFuZCByZXR1cm4gaXRzIGlub2RlCisgKiBAZGlyOiBUaGUgZGlyZWN0b3J5IGlub2RlCisgKiBAZGVudHJ5OiBUaGUgZGVudHJ5IG9mIHRoZSBuZXcgaW5vZGUKKyAqIEBuZDogcGFzc2VkIGZyb20gTGludXggVkZTLCBpZ25vcmVkIGJ5IHVzCisgKgorICogQ2FsbGVkIGJ5IHRoZSBWRlMgbGF5ZXIuIExvY2sgZGlyIGFuZCBjYWxsIGdmczJfbG9va3VwaSgpCisgKgorICogUmV0dXJuczogZXJybm8KKyAqLworCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqZ2ZzMl9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCQkgIHN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOworCisJaW5vZGUgPSBnZnMyX2xvb2t1cGkoZGlyLCAmZGVudHJ5LT5kX25hbWUsIDApOworCWlmIChpbm9kZSAmJiBJU19FUlIoaW5vZGUpKQorCQlyZXR1cm4gRVJSX0NBU1QoaW5vZGUpOworCisJaWYgKGlub2RlKSB7CisJCXN0cnVjdCBnZnMyX2dsb2NrICpnbCA9IEdGUzJfSShpbm9kZSktPmlfZ2w7CisJCXN0cnVjdCBnZnMyX2hvbGRlciBnaDsKKwkJaW50IGVycm9yOworCQllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChnbCwgTE1fU1RfU0hBUkVELCBMTV9GTEFHX0FOWSwgJmdoKTsKKwkJaWYgKGVycm9yKSB7CisJCQlpcHV0KGlub2RlKTsKKwkJCXJldHVybiBFUlJfUFRSKGVycm9yKTsKKwkJfQorCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmZ2gpOworCQlyZXR1cm4gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSk7CisJfQorCWRfYWRkKGRlbnRyeSwgaW5vZGUpOworCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogZ2ZzMl9saW5rIC0gTGluayB0byBhIGZpbGUKKyAqIEBvbGRfZGVudHJ5OiBUaGUgaW5vZGUgdG8gbGluaworICogQGRpcjogQWRkIGxpbmsgdG8gdGhpcyBkaXJlY3RvcnkKKyAqIEBkZW50cnk6IFRoZSBuYW1lIG9mIHRoZSBsaW5rCisgKgorICogTGluayB0aGUgaW5vZGUgaW4gIm9sZF9kZW50cnkiIGludG8gdGhlIGRpcmVjdG9yeSAiZGlyIiB3aXRoIHRoZQorICogbmFtZSBpbiAiZGVudHJ5Ii4KKyAqCisgKiBSZXR1cm5zOiBlcnJubworICovCisKK3N0YXRpYyBpbnQgZ2ZzMl9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAorCQkgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwID0gR0ZTMl9JKGRpcik7CisJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKGRpcik7CisJc3RydWN0IGlub2RlICppbm9kZSA9IG9sZF9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKKwlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZ2hzWzJdOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZGliaDsKKwlpbnQgYWxsb2NfcmVxdWlyZWQ7CisJaW50IGVycm9yOworCisJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCisJCXJldHVybiAtRVBFUk07CisKKwlnZnMyX2hvbGRlcl9pbml0KGRpcC0+aV9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCBnaHMpOworCWdmczJfaG9sZGVyX2luaXQoaXAtPmlfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwgZ2hzICsgMSk7CisKKwllcnJvciA9IGdmczJfZ2xvY2tfbnEoZ2hzKTsgLyogcGFyZW50ICovCisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9wYXJlbnQ7CisKKwllcnJvciA9IGdmczJfZ2xvY2tfbnEoZ2hzICsgMSk7IC8qIGNoaWxkICovCisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9jaGlsZDsKKworCWVycm9yID0gLUVOT0VOVDsKKwlpZiAoaW5vZGUtPmlfbmxpbmsgPT0gMCkKKwkJZ290byBvdXRfZ3VubG9jazsKKworCWVycm9yID0gZ2ZzMl9wZXJtaXNzaW9uKGRpciwgTUFZX1dSSVRFIHwgTUFZX0VYRUMsIDApOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfZ3VubG9jazsKKworCWVycm9yID0gZ2ZzMl9kaXJfY2hlY2soZGlyLCAmZGVudHJ5LT5kX25hbWUsIE5VTEwpOworCXN3aXRjaCAoZXJyb3IpIHsKKwljYXNlIC1FTk9FTlQ6CisJCWJyZWFrOworCWNhc2UgMDoKKwkJZXJyb3IgPSAtRUVYSVNUOworCWRlZmF1bHQ6CisJCWdvdG8gb3V0X2d1bmxvY2s7CisJfQorCisJZXJyb3IgPSAtRUlOVkFMOworCWlmICghZGlwLT5pX2lub2RlLmlfbmxpbmspCisJCWdvdG8gb3V0X2d1bmxvY2s7CisJZXJyb3IgPSAtRUZCSUc7CisJaWYgKGRpcC0+aV9lbnRyaWVzID09ICh1MzIpLTEpCisJCWdvdG8gb3V0X2d1bmxvY2s7CisJZXJyb3IgPSAtRVBFUk07CisJaWYgKElTX0lNTVVUQUJMRShpbm9kZSkgfHwgSVNfQVBQRU5EKGlub2RlKSkKKwkJZ290byBvdXRfZ3VubG9jazsKKwllcnJvciA9IC1FSU5WQUw7CisJaWYgKCFpcC0+aV9pbm9kZS5pX25saW5rKQorCQlnb3RvIG91dF9ndW5sb2NrOworCWVycm9yID0gLUVNTElOSzsKKwlpZiAoaXAtPmlfaW5vZGUuaV9ubGluayA9PSAodTMyKS0xKQorCQlnb3RvIG91dF9ndW5sb2NrOworCisJYWxsb2NfcmVxdWlyZWQgPSBlcnJvciA9IGdmczJfZGlyYWRkX2FsbG9jX3JlcXVpcmVkKGRpciwgJmRlbnRyeS0+ZF9uYW1lKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlnb3RvIG91dF9ndW5sb2NrOworCWVycm9yID0gMDsKKworCWlmIChhbGxvY19yZXF1aXJlZCkgeworCQlzdHJ1Y3QgZ2ZzMl9hbGxvYyAqYWwgPSBnZnMyX2FsbG9jX2dldChkaXApOworCQlpZiAoIWFsKSB7CisJCQllcnJvciA9IC1FTk9NRU07CisJCQlnb3RvIG91dF9ndW5sb2NrOworCQl9CisKKwkJZXJyb3IgPSBnZnMyX3F1b3RhX2xvY2tfY2hlY2soZGlwKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXRfYWxsb2M7CisKKwkJYWwtPmFsX3JlcXVlc3RlZCA9IHNkcC0+c2RfbWF4X2RpcnJlczsKKworCQllcnJvciA9IGdmczJfaW5wbGFjZV9yZXNlcnZlKGRpcCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gb3V0X2d1bmxvY2tfcTsKKworCQllcnJvciA9IGdmczJfdHJhbnNfYmVnaW4oc2RwLCBzZHAtPnNkX21heF9kaXJyZXMgKworCQkJCQkgZ2ZzMl9yZ19ibG9ja3MoYWwpICsKKwkJCQkJIDIgKiBSRVNfRElOT0RFICsgUkVTX1NUQVRGUyArCisJCQkJCSBSRVNfUVVPVEEsIDApOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIG91dF9pcHJlczsKKwl9IGVsc2UgeworCQllcnJvciA9IGdmczJfdHJhbnNfYmVnaW4oc2RwLCAyICogUkVTX0RJTk9ERSArIFJFU19MRUFGLCAwKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXRfaXByZXM7CisJfQorCisJZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGlwLCAmZGliaCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9lbmRfdHJhbnM7CisKKwllcnJvciA9IGdmczJfZGlyX2FkZChkaXIsICZkZW50cnktPmRfbmFtZSwgaXApOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfYnJlbHNlOworCisJZ2ZzMl90cmFuc19hZGRfYmgoaXAtPmlfZ2wsIGRpYmgsIDEpOworCWluY19ubGluaygmaXAtPmlfaW5vZGUpOworCWlwLT5pX2lub2RlLmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CisJZ2ZzMl9kaW5vZGVfb3V0KGlwLCBkaWJoLT5iX2RhdGEpOworCW1hcmtfaW5vZGVfZGlydHkoJmlwLT5pX2lub2RlKTsKKworb3V0X2JyZWxzZToKKwlicmVsc2UoZGliaCk7CitvdXRfZW5kX3RyYW5zOgorCWdmczJfdHJhbnNfZW5kKHNkcCk7CitvdXRfaXByZXM6CisJaWYgKGFsbG9jX3JlcXVpcmVkKQorCQlnZnMyX2lucGxhY2VfcmVsZWFzZShkaXApOworb3V0X2d1bmxvY2tfcToKKwlpZiAoYWxsb2NfcmVxdWlyZWQpCisJCWdmczJfcXVvdGFfdW5sb2NrKGRpcCk7CitvdXRfYWxsb2M6CisJaWYgKGFsbG9jX3JlcXVpcmVkKQorCQlnZnMyX2FsbG9jX3B1dChkaXApOworb3V0X2d1bmxvY2s6CisJZ2ZzMl9nbG9ja19kcShnaHMgKyAxKTsKK291dF9jaGlsZDoKKwlnZnMyX2dsb2NrX2RxKGdocyk7CitvdXRfcGFyZW50OgorCWdmczJfaG9sZGVyX3VuaW5pdChnaHMpOworCWdmczJfaG9sZGVyX3VuaW5pdChnaHMgKyAxKTsKKwlpZiAoIWVycm9yKSB7CisJCWlob2xkKGlub2RlKTsKKwkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKKwkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJfQorCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIGdmczJfdW5saW5rX29rIC0gY2hlY2sgdG8gc2VlIHRoYXQgYSBpbm9kZSBpcyBzdGlsbCBpbiBhIGRpcmVjdG9yeQorICogQGRpcDogdGhlIGRpcmVjdG9yeQorICogQG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBmaWxlCisgKiBAaXA6IHRoZSBpbm9kZQorICoKKyAqIEFzc3VtZXMgdGhhdCB0aGUgbG9jayBvbiAoYXQgbGVhc3QpIEBkaXAgaXMgaGVsZC4KKyAqCisgKiBSZXR1cm5zOiAwIGlmIHRoZSBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwIGlzIGNvcnJlY3QsIGVycm5vIGlmIGl0IGlzbid0CisgKi8KKworc3RhdGljIGludCBnZnMyX3VubGlua19vayhzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwKKwkJCSAgY29uc3Qgc3RydWN0IGdmczJfaW5vZGUgKmlwKQoreworCWludCBlcnJvcjsKKworCWlmIChJU19JTU1VVEFCTEUoJmlwLT5pX2lub2RlKSB8fCBJU19BUFBFTkQoJmlwLT5pX2lub2RlKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWlmICgoZGlwLT5pX2lub2RlLmlfbW9kZSAmIFNfSVNWVFgpICYmCisJICAgIGRpcC0+aV9pbm9kZS5pX3VpZCAhPSBjdXJyZW50X2ZzdWlkKCkgJiYKKwkgICAgaXAtPmlfaW5vZGUuaV91aWQgIT0gY3VycmVudF9mc3VpZCgpICYmICFjYXBhYmxlKENBUF9GT1dORVIpKQorCQlyZXR1cm4gLUVQRVJNOworCisJaWYgKElTX0FQUEVORCgmZGlwLT5pX2lub2RlKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWVycm9yID0gZ2ZzMl9wZXJtaXNzaW9uKCZkaXAtPmlfaW5vZGUsIE1BWV9XUklURSB8IE1BWV9FWEVDLCAwKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWVycm9yID0gZ2ZzMl9kaXJfY2hlY2soJmRpcC0+aV9pbm9kZSwgbmFtZSwgaXApOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZ2ZzMl91bmxpbmtfaW5vZGUgLSBSZW1vdmVzIGFuIGlub2RlIGZyb20gaXRzIHBhcmVudCBkaXIgYW5kIHVubGlua3MgaXQKKyAqIEBkaXA6IFRoZSBwYXJlbnQgZGlyZWN0b3J5CisgKiBAbmFtZTogVGhlIG5hbWUgb2YgdGhlIGVudHJ5IGluIHRoZSBwYXJlbnQgZGlyZWN0b3J5CisgKiBAYmg6IFRoZSBpbm9kZSBidWZmZXIgZm9yIHRoZSBpbm9kZSB0byBiZSByZW1vdmVkCisgKiBAaW5vZGU6IFRoZSBpbm9kZSB0byBiZSByZW1vdmVkCisgKgorICogQ2FsbGVkIHdpdGggYWxsIHRoZSBsb2NrcyBhbmQgaW4gYSB0cmFuc2FjdGlvbi4gVGhpcyB3aWxsIG9ubHkgYmUKKyAqIGNhbGxlZCBmb3IgYSBkaXJlY3RvcnkgYWZ0ZXIgaXQgaGFzIGJlZW4gY2hlY2tlZCB0byBlbnN1cmUgaXQgaXMgZW1wdHkuCisgKgorICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBvciBhbiBlcnJvcgorICovCisKK3N0YXRpYyBpbnQgZ2ZzMl91bmxpbmtfaW5vZGUoc3RydWN0IGdmczJfaW5vZGUgKmRpcCwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGdmczJfZGlyX2RlbChkaXAsIGRlbnRyeSk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlpcC0+aV9lbnRyaWVzID0gMDsKKwlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKKwlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKKwkJY2xlYXJfbmxpbmsoaW5vZGUpOworCWVsc2UKKwkJZHJvcF9ubGluayhpbm9kZSk7CisJZ2ZzMl90cmFuc19hZGRfYmgoaXAtPmlfZ2wsIGJoLCAxKTsKKwlnZnMyX2Rpbm9kZV9vdXQoaXAsIGJoLT5iX2RhdGEpOworCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCWlmIChpbm9kZS0+aV9ubGluayA9PSAwKQorCQlnZnMyX3VubGlua19kaShpbm9kZSk7CisJcmV0dXJuIDA7Cit9CisKKworLyoqCisgKiBnZnMyX3VubGluayAtIFVubGluayBhbiBpbm9kZSAodGhpcyBkb2VzIHJtZGlyIGFzIHdlbGwpCisgKiBAZGlyOiBUaGUgaW5vZGUgb2YgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBpbm9kZSB0byB1bmxpbmsKKyAqIEBkZW50cnk6IFRoZSBmaWxlIGl0c2VsZgorICoKKyAqIFRoaXMgcm91dGluZSB1c2VzIHRoZSB0eXBlIG9mIHRoZSBpbm9kZSBhcyBhIGZsYWcgdG8gZmlndXJlIG91dAorICogd2hldGhlciB0aGlzIGlzIGFuIHVubGluayBvciBhbiBybWRpci4KKyAqCisgKiBSZXR1cm5zOiBlcnJubworICovCisKK3N0YXRpYyBpbnQgZ2ZzMl91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwID0gR0ZTMl9JKGRpcik7CisJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKGRpcik7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CisJc3RydWN0IGdmczJfaG9sZGVyIGdoc1szXTsKKwlzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqcmdkOworCXN0cnVjdCBnZnMyX2hvbGRlciByaV9naDsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGdmczJfcmluZGV4X2hvbGQoc2RwLCAmcmlfZ2gpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJZ2ZzMl9ob2xkZXJfaW5pdChkaXAtPmlfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwgZ2hzKTsKKwlnZnMyX2hvbGRlcl9pbml0KGlwLT5pX2dsLCAgTE1fU1RfRVhDTFVTSVZFLCAwLCBnaHMgKyAxKTsKKworCXJnZCA9IGdmczJfYmxrMnJncnBkKHNkcCwgaXAtPmlfbm9fYWRkcik7CisJZ2ZzMl9ob2xkZXJfaW5pdChyZ2QtPnJkX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsIGdocyArIDIpOworCisKKwllcnJvciA9IGdmczJfZ2xvY2tfbnEoZ2hzKTsgLyogcGFyZW50ICovCisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9wYXJlbnQ7CisKKwllcnJvciA9IGdmczJfZ2xvY2tfbnEoZ2hzICsgMSk7IC8qIGNoaWxkICovCisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9jaGlsZDsKKworCWVycm9yID0gLUVOT0VOVDsKKwlpZiAoaW5vZGUtPmlfbmxpbmsgPT0gMCkKKwkJZ290byBvdXRfcmdycDsKKworCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKSB7CisJCWVycm9yID0gLUVOT1RFTVBUWTsKKwkJaWYgKGlwLT5pX2VudHJpZXMgPiAyIHx8IGlub2RlLT5pX25saW5rID4gMikKKwkJCWdvdG8gb3V0X3JncnA7CisJfQorCisJZXJyb3IgPSBnZnMyX2dsb2NrX25xKGdocyArIDIpOyAvKiByZ3JwICovCisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9yZ3JwOworCisJZXJyb3IgPSBnZnMyX3VubGlua19vayhkaXAsICZkZW50cnktPmRfbmFtZSwgaXApOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfZ3VubG9jazsKKworCWVycm9yID0gZ2ZzMl90cmFuc19iZWdpbihzZHAsIDIqUkVTX0RJTk9ERSArIDMqUkVTX0xFQUYgKyBSRVNfUkdfQklULCAwKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X2d1bmxvY2s7CisKKwllcnJvciA9IGdmczJfbWV0YV9pbm9kZV9idWZmZXIoaXAsICZiaCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9lbmRfdHJhbnM7CisKKwllcnJvciA9IGdmczJfdW5saW5rX2lub2RlKGRpcCwgZGVudHJ5LCBiaCk7CisJYnJlbHNlKGJoKTsKKworb3V0X2VuZF90cmFuczoKKwlnZnMyX3RyYW5zX2VuZChzZHApOworb3V0X2d1bmxvY2s6CisJZ2ZzMl9nbG9ja19kcShnaHMgKyAyKTsKK291dF9yZ3JwOgorCWdmczJfaG9sZGVyX3VuaW5pdChnaHMgKyAyKTsKKwlnZnMyX2dsb2NrX2RxKGdocyArIDEpOworb3V0X2NoaWxkOgorCWdmczJfaG9sZGVyX3VuaW5pdChnaHMgKyAxKTsKKwlnZnMyX2dsb2NrX2RxKGdocyk7CitvdXRfcGFyZW50OgorCWdmczJfaG9sZGVyX3VuaW5pdChnaHMpOworCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZyaV9naCk7CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIGdmczJfc3ltbGluayAtIENyZWF0ZSBhIHN5bWxpbmsKKyAqIEBkaXI6IFRoZSBkaXJlY3RvcnkgdG8gY3JlYXRlIHRoZSBzeW1saW5rIGluCisgKiBAZGVudHJ5OiBUaGUgZGVudHJ5IHRvIHB1dCB0aGUgc3ltbGluayBpbgorICogQHN5bW5hbWU6IFRoZSB0aGluZyB3aGljaCB0aGUgbGluayBwb2ludHMgdG8KKyAqCisgKiBSZXR1cm5zOiBlcnJubworICovCisKK3N0YXRpYyBpbnQgZ2ZzMl9zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQljb25zdCBjaGFyICpzeW1uYW1lKQoreworCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQihkaXIpOworCXVuc2lnbmVkIGludCBzaXplOworCisJc2l6ZSA9IHN0cmxlbihzeW1uYW1lKTsKKwlpZiAoc2l6ZSA+IHNkcC0+c2Rfc2Iuc2JfYnNpemUgLSBzaXplb2Yoc3RydWN0IGdmczJfZGlub2RlKSAtIDEpCisJCXJldHVybiAtRU5BTUVUT09MT05HOworCisJcmV0dXJuIGdmczJfY3JlYXRlX2lub2RlKGRpciwgZGVudHJ5LCBTX0lGTE5LIHwgU19JUldYVUdPLCAwLCBzeW1uYW1lLCBzaXplKTsKK30KKworLyoqCisgKiBnZnMyX21rZGlyIC0gTWFrZSBhIGRpcmVjdG9yeQorICogQGRpcjogVGhlIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlIG5ldyBvbmUKKyAqIEBkZW50cnk6IFRoZSBkZW50cnkgb2YgdGhlIG5ldyBkaXJlY3RvcnkKKyAqIEBtb2RlOiBUaGUgbW9kZSBvZiB0aGUgbmV3IGRpcmVjdG9yeQorICoKKyAqIFJldHVybnM6IGVycm5vCisgKi8KKworc3RhdGljIGludCBnZnMyX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlKQoreworCXJldHVybiBnZnMyX2NyZWF0ZV9pbm9kZShkaXIsIGRlbnRyeSwgU19JRkRJUiB8IG1vZGUsIDAsIE5VTEwsIDApOworfQorCisvKioKKyAqIGdmczJfbWtub2QgLSBNYWtlIGEgc3BlY2lhbCBmaWxlCisgKiBAZGlyOiBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBzcGVjaWFsIGZpbGUgd2lsbCByZXNpZGUKKyAqIEBkZW50cnk6IFRoZSBkZW50cnkgb2YgdGhlIHNwZWNpYWwgZmlsZQorICogQG1vZGU6IFRoZSBtb2RlIG9mIHRoZSBzcGVjaWFsIGZpbGUKKyAqIEBkZXY6IFRoZSBkZXZpY2Ugc3BlY2lmaWNhdGlvbiBvZiB0aGUgc3BlY2lhbCBmaWxlCisgKgorICovCisKK3N0YXRpYyBpbnQgZ2ZzMl9ta25vZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSwKKwkJICAgICAgZGV2X3QgZGV2KQoreworCXJldHVybiBnZnMyX2NyZWF0ZV9pbm9kZShkaXIsIGRlbnRyeSwgbW9kZSwgZGV2LCBOVUxMLCAwKTsKK30KKworLyoKKyAqIGdmczJfb2tfdG9fbW92ZSAtIGNoZWNrIGlmIGl0J3Mgb2sgdG8gbW92ZSBhIGRpcmVjdG9yeSB0byBhbm90aGVyIGRpcmVjdG9yeQorICogQHRoaXM6IG1vdmUgdGhpcworICogQHRvOiB0byBoZXJlCisgKgorICogRm9sbG93IEB0byBiYWNrIHRvIHRoZSByb290IGFuZCBtYWtlIHN1cmUgd2UgZG9uJ3QgZW5jb3VudGVyIEB0aGlzCisgKiBBc3N1bWVzIHdlIGFscmVhZHkgaG9sZCB0aGUgcmVuYW1lIGxvY2suCisgKgorICogUmV0dXJuczogZXJybm8KKyAqLworCitzdGF0aWMgaW50IGdmczJfb2tfdG9fbW92ZShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqdGhpcywgc3RydWN0IGdmczJfaW5vZGUgKnRvKQoreworCXN0cnVjdCBpbm9kZSAqZGlyID0gJnRvLT5pX2lub2RlOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItPmlfc2I7CisJc3RydWN0IGlub2RlICp0bXA7CisJaW50IGVycm9yID0gMDsKKworCWlncmFiKGRpcik7CisKKwlmb3IgKDs7KSB7CisJCWlmIChkaXIgPT0gJnRoaXMtPmlfaW5vZGUpIHsKKwkJCWVycm9yID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChkaXIgPT0gc2ItPnNfcm9vdC0+ZF9pbm9kZSkgeworCQkJZXJyb3IgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQl0bXAgPSBnZnMyX2xvb2t1cGkoZGlyLCAmZ2ZzMl9xZG90ZG90LCAxKTsKKwkJaWYgKElTX0VSUih0bXApKSB7CisJCQllcnJvciA9IFBUUl9FUlIodG1wKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaXB1dChkaXIpOworCQlkaXIgPSB0bXA7CisJfQorCisJaXB1dChkaXIpOworCisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIGdmczJfcmVuYW1lIC0gUmVuYW1lIGEgZmlsZQorICogQG9kaXI6IFBhcmVudCBkaXJlY3Rvcnkgb2Ygb2xkIGZpbGUgbmFtZQorICogQG9kZW50cnk6IFRoZSBvbGQgZGVudHJ5IG9mIHRoZSBmaWxlCisgKiBAbmRpcjogUGFyZW50IGRpcmVjdG9yeSBvZiBuZXcgZmlsZSBuYW1lCisgKiBAbmRlbnRyeTogVGhlIG5ldyBkZW50cnkgb2YgdGhlIGZpbGUKKyAqCisgKiBSZXR1cm5zOiBlcnJubworICovCisKK3N0YXRpYyBpbnQgZ2ZzMl9yZW5hbWUoc3RydWN0IGlub2RlICpvZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvZGVudHJ5LAorCQkgICAgICAgc3RydWN0IGlub2RlICpuZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZGVudHJ5KQoreworCXN0cnVjdCBnZnMyX2lub2RlICpvZGlwID0gR0ZTMl9JKG9kaXIpOworCXN0cnVjdCBnZnMyX2lub2RlICpuZGlwID0gR0ZTMl9JKG5kaXIpOworCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShvZGVudHJ5LT5kX2lub2RlKTsKKwlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqbmlwID0gTlVMTDsKKwlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0Iob2Rpcik7CisJc3RydWN0IGdmczJfaG9sZGVyIGdoc1s1XSwgcl9naCA9IHsgLmdoX2dsID0gTlVMTCwgfSwgcmlfZ2g7CisJc3RydWN0IGdmczJfcmdycGQgKm5yZ2Q7CisJdW5zaWduZWQgaW50IG51bV9naDsKKwlpbnQgZGlyX3JlbmFtZSA9IDA7CisJaW50IGFsbG9jX3JlcXVpcmVkID0gMDsKKwl1bnNpZ25lZCBpbnQgeDsKKwlpbnQgZXJyb3I7CisKKwlpZiAobmRlbnRyeS0+ZF9pbm9kZSkgeworCQluaXAgPSBHRlMyX0kobmRlbnRyeS0+ZF9pbm9kZSk7CisJCWlmIChpcCA9PSBuaXApCisJCQlyZXR1cm4gMDsKKwl9CisKKwllcnJvciA9IGdmczJfcmluZGV4X2hvbGQoc2RwLCAmcmlfZ2gpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJaWYgKG9kaXAgIT0gbmRpcCkgeworCQllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChzZHAtPnNkX3JlbmFtZV9nbCwgTE1fU1RfRVhDTFVTSVZFLAorCQkJCQkgICAwLCAmcl9naCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gb3V0OworCisJCWlmIChTX0lTRElSKGlwLT5pX2lub2RlLmlfbW9kZSkpIHsKKwkJCWRpcl9yZW5hbWUgPSAxOworCQkJLyogZG9uJ3QgbW92ZSBhIGRpcmN0b3J5IGludG8gaXQncyBzdWJkaXIgKi8KKwkJCWVycm9yID0gZ2ZzMl9va190b19tb3ZlKGlwLCBuZGlwKTsKKwkJCWlmIChlcnJvcikKKwkJCQlnb3RvIG91dF9ndW5sb2NrX3I7CisJCX0KKwl9CisKKwludW1fZ2ggPSAxOworCWdmczJfaG9sZGVyX2luaXQob2RpcC0+aV9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCBnaHMpOworCWlmIChvZGlwICE9IG5kaXApIHsKKwkJZ2ZzMl9ob2xkZXJfaW5pdChuZGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsIGdocyArIG51bV9naCk7CisJCW51bV9naCsrOworCX0KKwlnZnMyX2hvbGRlcl9pbml0KGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsIGdocyArIG51bV9naCk7CisJbnVtX2doKys7CisKKwlpZiAobmlwKSB7CisJCWdmczJfaG9sZGVyX2luaXQobmlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsIGdocyArIG51bV9naCk7CisJCW51bV9naCsrOworCQkvKiBncmFiIHRoZSByZXNvdXJjZSBsb2NrIGZvciB1bmxpbmsgZmxhZyB0d2lkZGxpbmcgCisJCSAqIHRoaXMgaXMgdGhlIGNhc2Ugb2YgdGhlIHRhcmdldCBmaWxlIGFscmVhZHkgZXhpc3RpbmcKKwkJICogc28gd2UgdW5saW5rIGJlZm9yZSBkb2luZyB0aGUgcmVuYW1lCisJCSAqLworCQlucmdkID0gZ2ZzMl9ibGsycmdycGQoc2RwLCBuaXAtPmlfbm9fYWRkcik7CisJCWlmIChucmdkKQorCQkJZ2ZzMl9ob2xkZXJfaW5pdChucmdkLT5yZF9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCBnaHMgKyBudW1fZ2grKyk7CisJfQorCisJZm9yICh4ID0gMDsgeCA8IG51bV9naDsgeCsrKSB7CisJCWVycm9yID0gZ2ZzMl9nbG9ja19ucShnaHMgKyB4KTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXRfZ3VubG9jazsKKwl9CisKKwllcnJvciA9IC1FTk9FTlQ7CisJaWYgKGlwLT5pX2lub2RlLmlfbmxpbmsgPT0gMCkKKwkJZ290byBvdXRfZ3VubG9jazsKKworCS8qIENoZWNrIG91dCB0aGUgb2xkIGRpcmVjdG9yeSAqLworCisJZXJyb3IgPSBnZnMyX3VubGlua19vayhvZGlwLCAmb2RlbnRyeS0+ZF9uYW1lLCBpcCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9ndW5sb2NrOworCisJLyogQ2hlY2sgb3V0IHRoZSBuZXcgZGlyZWN0b3J5ICovCisKKwlpZiAobmlwKSB7CisJCWVycm9yID0gZ2ZzMl91bmxpbmtfb2sobmRpcCwgJm5kZW50cnktPmRfbmFtZSwgbmlwKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXRfZ3VubG9jazsKKworCQlpZiAobmlwLT5pX2lub2RlLmlfbmxpbmsgPT0gMCkgeworCQkJZXJyb3IgPSAtRUFHQUlOOworCQkJZ290byBvdXRfZ3VubG9jazsKKwkJfQorCisJCWlmIChTX0lTRElSKG5pcC0+aV9pbm9kZS5pX21vZGUpKSB7CisJCQlpZiAobmlwLT5pX2VudHJpZXMgPCAyKSB7CisJCQkJZ2ZzMl9jb25zaXN0X2lub2RlKG5pcCk7CisJCQkJZXJyb3IgPSAtRUlPOworCQkJCWdvdG8gb3V0X2d1bmxvY2s7CisJCQl9CisJCQlpZiAobmlwLT5pX2VudHJpZXMgPiAyKSB7CisJCQkJZXJyb3IgPSAtRU5PVEVNUFRZOworCQkJCWdvdG8gb3V0X2d1bmxvY2s7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQllcnJvciA9IGdmczJfcGVybWlzc2lvbihuZGlyLCBNQVlfV1JJVEUgfCBNQVlfRVhFQywgMCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gb3V0X2d1bmxvY2s7CisKKwkJZXJyb3IgPSBnZnMyX2Rpcl9jaGVjayhuZGlyLCAmbmRlbnRyeS0+ZF9uYW1lLCBOVUxMKTsKKwkJc3dpdGNoIChlcnJvcikgeworCQljYXNlIC1FTk9FTlQ6CisJCQllcnJvciA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAwOgorCQkJZXJyb3IgPSAtRUVYSVNUOworCQlkZWZhdWx0OgorCQkJZ290byBvdXRfZ3VubG9jazsKKwkJfTsKKworCQlpZiAob2RpcCAhPSBuZGlwKSB7CisJCQlpZiAoIW5kaXAtPmlfaW5vZGUuaV9ubGluaykgeworCQkJCWVycm9yID0gLUVOT0VOVDsKKwkJCQlnb3RvIG91dF9ndW5sb2NrOworCQkJfQorCQkJaWYgKG5kaXAtPmlfZW50cmllcyA9PSAodTMyKS0xKSB7CisJCQkJZXJyb3IgPSAtRUZCSUc7CisJCQkJZ290byBvdXRfZ3VubG9jazsKKwkJCX0KKwkJCWlmIChTX0lTRElSKGlwLT5pX2lub2RlLmlfbW9kZSkgJiYKKwkJCSAgICBuZGlwLT5pX2lub2RlLmlfbmxpbmsgPT0gKHUzMiktMSkgeworCQkJCWVycm9yID0gLUVNTElOSzsKKwkJCQlnb3RvIG91dF9ndW5sb2NrOworCQkJfQorCQl9CisJfQorCisJLyogQ2hlY2sgb3V0IHRoZSBkaXIgdG8gYmUgcmVuYW1lZCAqLworCisJaWYgKGRpcl9yZW5hbWUpIHsKKwkJZXJyb3IgPSBnZnMyX3Blcm1pc3Npb24ob2RlbnRyeS0+ZF9pbm9kZSwgTUFZX1dSSVRFLCAwKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXRfZ3VubG9jazsKKwl9CisKKwlpZiAobmlwID09IE5VTEwpCisJCWFsbG9jX3JlcXVpcmVkID0gZ2ZzMl9kaXJhZGRfYWxsb2NfcmVxdWlyZWQobmRpciwgJm5kZW50cnktPmRfbmFtZSk7CisJZXJyb3IgPSBhbGxvY19yZXF1aXJlZDsKKwlpZiAoZXJyb3IgPCAwKQorCQlnb3RvIG91dF9ndW5sb2NrOworCWVycm9yID0gMDsKKworCWlmIChhbGxvY19yZXF1aXJlZCkgeworCQlzdHJ1Y3QgZ2ZzMl9hbGxvYyAqYWwgPSBnZnMyX2FsbG9jX2dldChuZGlwKTsKKwkJaWYgKCFhbCkgeworCQkJZXJyb3IgPSAtRU5PTUVNOworCQkJZ290byBvdXRfZ3VubG9jazsKKwkJfQorCisJCWVycm9yID0gZ2ZzMl9xdW90YV9sb2NrX2NoZWNrKG5kaXApOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIG91dF9hbGxvYzsKKworCQlhbC0+YWxfcmVxdWVzdGVkID0gc2RwLT5zZF9tYXhfZGlycmVzOworCisJCWVycm9yID0gZ2ZzMl9pbnBsYWNlX3Jlc2VydmVfcmkobmRpcCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gb3V0X2d1bmxvY2tfcTsKKworCQllcnJvciA9IGdmczJfdHJhbnNfYmVnaW4oc2RwLCBzZHAtPnNkX21heF9kaXJyZXMgKworCQkJCQkgZ2ZzMl9yZ19ibG9ja3MoYWwpICsKKwkJCQkJIDQgKiBSRVNfRElOT0RFICsgNCAqIFJFU19MRUFGICsKKwkJCQkJIFJFU19TVEFURlMgKyBSRVNfUVVPVEEgKyA0LCAwKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXRfaXByZXNlcnY7CisJfSBlbHNlIHsKKwkJZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKHNkcCwgNCAqIFJFU19ESU5PREUgKworCQkJCQkgNSAqIFJFU19MRUFGICsgNCwgMCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gb3V0X2d1bmxvY2s7CisJfQorCisJLyogUmVtb3ZlIHRoZSB0YXJnZXQgZmlsZSwgaWYgaXQgZXhpc3RzICovCisKKwlpZiAobmlwKSB7CisJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CisJCWVycm9yID0gZ2ZzMl9tZXRhX2lub2RlX2J1ZmZlcihuaXAsICZiaCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gb3V0X2VuZF90cmFuczsKKwkJZXJyb3IgPSBnZnMyX3VubGlua19pbm9kZShuZGlwLCBuZGVudHJ5LCBiaCk7CisJCWJyZWxzZShiaCk7CisJfQorCisJaWYgKGRpcl9yZW5hbWUpIHsKKwkJZXJyb3IgPSBnZnMyX2Rpcl9tdmlubyhpcCwgJmdmczJfcWRvdGRvdCwgbmRpcCwgRFRfRElSKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXRfZW5kX3RyYW5zOworCX0gZWxzZSB7CisJCXN0cnVjdCBidWZmZXJfaGVhZCAqZGliaDsKKwkJZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGlwLCAmZGliaCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gb3V0X2VuZF90cmFuczsKKwkJaXAtPmlfaW5vZGUuaV9jdGltZSA9IENVUlJFTlRfVElNRTsKKwkJZ2ZzMl90cmFuc19hZGRfYmgoaXAtPmlfZ2wsIGRpYmgsIDEpOworCQlnZnMyX2Rpbm9kZV9vdXQoaXAsIGRpYmgtPmJfZGF0YSk7CisJCWJyZWxzZShkaWJoKTsKKwl9CisKKwllcnJvciA9IGdmczJfZGlyX2RlbChvZGlwLCBvZGVudHJ5KTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X2VuZF90cmFuczsKKworCWVycm9yID0gZ2ZzMl9kaXJfYWRkKG5kaXIsICZuZGVudHJ5LT5kX25hbWUsIGlwKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X2VuZF90cmFuczsKKworb3V0X2VuZF90cmFuczoKKwlnZnMyX3RyYW5zX2VuZChzZHApOworb3V0X2lwcmVzZXJ2OgorCWlmIChhbGxvY19yZXF1aXJlZCkKKwkJZ2ZzMl9pbnBsYWNlX3JlbGVhc2UobmRpcCk7CitvdXRfZ3VubG9ja19xOgorCWlmIChhbGxvY19yZXF1aXJlZCkKKwkJZ2ZzMl9xdW90YV91bmxvY2sobmRpcCk7CitvdXRfYWxsb2M6CisJaWYgKGFsbG9jX3JlcXVpcmVkKQorCQlnZnMyX2FsbG9jX3B1dChuZGlwKTsKK291dF9ndW5sb2NrOgorCXdoaWxlICh4LS0pIHsKKwkJZ2ZzMl9nbG9ja19kcShnaHMgKyB4KTsKKwkJZ2ZzMl9ob2xkZXJfdW5pbml0KGdocyArIHgpOworCX0KK291dF9ndW5sb2NrX3I6CisJaWYgKHJfZ2guZ2hfZ2wpCisJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZyX2doKTsKK291dDoKKwlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmcmlfZ2gpOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBnZnMyX2ZvbGxvd19saW5rIC0gRm9sbG93IGEgc3ltYm9saWMgbGluaworICogQGRlbnRyeTogVGhlIGRlbnRyeSBvZiB0aGUgbGluaworICogQG5kOiBEYXRhIHRoYXQgd2UgcGFzcyB0byB2ZnNfZm9sbG93X2xpbmsoKQorICoKKyAqIFRoaXMgY2FuIGhhbmRsZSBzeW1saW5rcyBvZiBhbnkgc2l6ZS4KKyAqCisgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3Mgb3IgZXJyb3IgY29kZQorICovCisKK3N0YXRpYyB2b2lkICpnZnMyX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCit7CisJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGRlbnRyeS0+ZF9pbm9kZSk7CisJc3RydWN0IGdmczJfaG9sZGVyIGlfZ2g7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaWJoOworCXVuc2lnbmVkIGludCBzaXplOworCWNoYXIgKmJ1ZjsKKwlpbnQgZXJyb3I7CisKKwlnZnMyX2hvbGRlcl9pbml0KGlwLT5pX2dsLCBMTV9TVF9TSEFSRUQsIDAsICZpX2doKTsKKwllcnJvciA9IGdmczJfZ2xvY2tfbnEoJmlfZ2gpOworCWlmIChlcnJvcikgeworCQlnZnMyX2hvbGRlcl91bmluaXQoJmlfZ2gpOworCQluZF9zZXRfbGluayhuZCwgRVJSX1BUUihlcnJvcikpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlzaXplID0gKHVuc2lnbmVkIGludClpX3NpemVfcmVhZCgmaXAtPmlfaW5vZGUpOworCWlmIChzaXplID09IDApIHsKKwkJZ2ZzMl9jb25zaXN0X2lub2RlKGlwKTsKKwkJYnVmID0gRVJSX1BUUigtRUlPKTsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGlwLCAmZGliaCk7CisJaWYgKGVycm9yKSB7CisJCWJ1ZiA9IEVSUl9QVFIoZXJyb3IpOworCQlnb3RvIG91dDsKKwl9CisKKwlidWYgPSBremFsbG9jKHNpemUgKyAxLCBHRlBfTk9GUyk7CisJaWYgKCFidWYpCisJCWJ1ZiA9IEVSUl9QVFIoLUVOT01FTSk7CisJZWxzZQorCQltZW1jcHkoYnVmLCBkaWJoLT5iX2RhdGEgKyBzaXplb2Yoc3RydWN0IGdmczJfZGlub2RlKSwgc2l6ZSk7CisJYnJlbHNlKGRpYmgpOworb3V0OgorCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZpX2doKTsKKwluZF9zZXRfbGluayhuZCwgYnVmKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgZ2ZzMl9wdXRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kLCB2b2lkICpwKQoreworCWNoYXIgKnMgPSBuZF9nZXRfbGluayhuZCk7CisJaWYgKCFJU19FUlIocykpCisJCWtmcmVlKHMpOworfQorCisvKioKKyAqIGdmczJfcGVybWlzc2lvbiAtCisgKiBAaW5vZGU6IFRoZSBpbm9kZQorICogQG1hc2s6IFRoZSBtYXNrIHRvIGJlIHRlc3RlZAorICogQGZsYWdzOiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGFuIFJDVSBwYXRoIHdhbGsgb3Igbm90CisgKgorICogVGhpcyBtYXkgYmUgY2FsbGVkIGZyb20gdGhlIFZGUyBkaXJlY3RseSwgb3IgZnJvbSB3aXRoaW4gR0ZTMiB3aXRoIHRoZQorICogaW5vZGUgbG9ja2VkLCBzbyB3ZSBsb29rIHRvIHNlZSBpZiB0aGUgZ2xvY2sgaXMgYWxyZWFkeSBsb2NrZWQgYW5kIG9ubHkKKyAqIGxvY2sgdGhlIGdsb2NrIGlmIGl0cyBub3QgYWxyZWFkeSBiZWVuIGRvbmUuCisgKgorICogUmV0dXJuczogZXJybm8KKyAqLworCitpbnQgZ2ZzMl9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGdmczJfaW5vZGUgKmlwOworCXN0cnVjdCBnZnMyX2hvbGRlciBpX2doOworCWludCBlcnJvcjsKKwlpbnQgdW5sb2NrID0gMDsKKworCisJaXAgPSBHRlMyX0koaW5vZGUpOworCWlmIChnZnMyX2dsb2NrX2lzX2xvY2tlZF9ieV9tZShpcC0+aV9nbCkgPT0gTlVMTCkgeworCQlpZiAoZmxhZ3MgJiBJUEVSTV9GTEFHX1JDVSkKKwkJCXJldHVybiAtRUNISUxEOworCQllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChpcC0+aV9nbCwgTE1fU1RfU0hBUkVELCBMTV9GTEFHX0FOWSwgJmlfZ2gpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisJCXVubG9jayA9IDE7CisJfQorCisJaWYgKChtYXNrICYgTUFZX1dSSVRFKSAmJiBJU19JTU1VVEFCTEUoaW5vZGUpKQorCQllcnJvciA9IC1FQUNDRVM7CisJZWxzZQorCQllcnJvciA9IGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgbWFzaywgZmxhZ3MsIGdmczJfY2hlY2tfYWNsKTsKKwlpZiAodW5sb2NrKQorCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmaV9naCk7CisKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyBpbnQgX19nZnMyX3NldGF0dHJfc2ltcGxlKHN0cnVjdCBnZnMyX2lub2RlICppcCwgc3RydWN0IGlhdHRyICphdHRyKQpAQCAtOTI4LDggKzE1OTQsNiBAQAogICogQGlwOgogICogQGF0dHI6CiAgKgotICogQ2FsbGVkIHdpdGggYSByZWZlcmVuY2Ugb24gdGhlIHZub2RlLgotICoKICAqIFJldHVybnM6IGVycm5vCiAgKi8KIApAQCAtOTQ5LDYwICsxNjEzLDI4MCBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotdm9pZCBnZnMyX2Rpbm9kZV9vdXQoY29uc3Qgc3RydWN0IGdmczJfaW5vZGUgKmlwLCB2b2lkICpidWYpCitzdGF0aWMgaW50IHNldGF0dHJfY2hvd24oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlhdHRyICphdHRyKQogewotCXN0cnVjdCBnZnMyX2Rpbm9kZSAqc3RyID0gYnVmOworCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CisJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKGlub2RlKTsKKwl1MzIgb3VpZCwgb2dpZCwgbnVpZCwgbmdpZDsKKwlpbnQgZXJyb3I7CiAKLQlzdHItPmRpX2hlYWRlci5taF9tYWdpYyA9IGNwdV90b19iZTMyKEdGUzJfTUFHSUMpOwotCXN0ci0+ZGlfaGVhZGVyLm1oX3R5cGUgPSBjcHVfdG9fYmUzMihHRlMyX01FVEFUWVBFX0RJKTsKLQlzdHItPmRpX2hlYWRlci5taF9mb3JtYXQgPSBjcHVfdG9fYmUzMihHRlMyX0ZPUk1BVF9ESSk7Ci0Jc3RyLT5kaV9udW0ubm9fYWRkciA9IGNwdV90b19iZTY0KGlwLT5pX25vX2FkZHIpOwotCXN0ci0+ZGlfbnVtLm5vX2Zvcm1hbF9pbm8gPSBjcHVfdG9fYmU2NChpcC0+aV9ub19mb3JtYWxfaW5vKTsKLQlzdHItPmRpX21vZGUgPSBjcHVfdG9fYmUzMihpcC0+aV9pbm9kZS5pX21vZGUpOwotCXN0ci0+ZGlfdWlkID0gY3B1X3RvX2JlMzIoaXAtPmlfaW5vZGUuaV91aWQpOwotCXN0ci0+ZGlfZ2lkID0gY3B1X3RvX2JlMzIoaXAtPmlfaW5vZGUuaV9naWQpOwotCXN0ci0+ZGlfbmxpbmsgPSBjcHVfdG9fYmUzMihpcC0+aV9pbm9kZS5pX25saW5rKTsKLQlzdHItPmRpX3NpemUgPSBjcHVfdG9fYmU2NChpX3NpemVfcmVhZCgmaXAtPmlfaW5vZGUpKTsKLQlzdHItPmRpX2Jsb2NrcyA9IGNwdV90b19iZTY0KGdmczJfZ2V0X2lub2RlX2Jsb2NrcygmaXAtPmlfaW5vZGUpKTsKLQlzdHItPmRpX2F0aW1lID0gY3B1X3RvX2JlNjQoaXAtPmlfaW5vZGUuaV9hdGltZS50dl9zZWMpOwotCXN0ci0+ZGlfbXRpbWUgPSBjcHVfdG9fYmU2NChpcC0+aV9pbm9kZS5pX210aW1lLnR2X3NlYyk7Ci0Jc3RyLT5kaV9jdGltZSA9IGNwdV90b19iZTY0KGlwLT5pX2lub2RlLmlfY3RpbWUudHZfc2VjKTsKKwlvdWlkID0gaW5vZGUtPmlfdWlkOworCW9naWQgPSBpbm9kZS0+aV9naWQ7CisJbnVpZCA9IGF0dHItPmlhX3VpZDsKKwluZ2lkID0gYXR0ci0+aWFfZ2lkOwogCi0Jc3RyLT5kaV9nb2FsX21ldGEgPSBjcHVfdG9fYmU2NChpcC0+aV9nb2FsKTsKLQlzdHItPmRpX2dvYWxfZGF0YSA9IGNwdV90b19iZTY0KGlwLT5pX2dvYWwpOwotCXN0ci0+ZGlfZ2VuZXJhdGlvbiA9IGNwdV90b19iZTY0KGlwLT5pX2dlbmVyYXRpb24pOworCWlmICghKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9VSUQpIHx8IG91aWQgPT0gbnVpZCkKKwkJb3VpZCA9IG51aWQgPSBOT19RVU9UQV9DSEFOR0U7CisJaWYgKCEoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX0dJRCkgfHwgb2dpZCA9PSBuZ2lkKQorCQlvZ2lkID0gbmdpZCA9IE5PX1FVT1RBX0NIQU5HRTsKIAotCXN0ci0+ZGlfZmxhZ3MgPSBjcHVfdG9fYmUzMihpcC0+aV9kaXNrZmxhZ3MpOwotCXN0ci0+ZGlfaGVpZ2h0ID0gY3B1X3RvX2JlMTYoaXAtPmlfaGVpZ2h0KTsKLQlzdHItPmRpX3BheWxvYWRfZm9ybWF0ID0gY3B1X3RvX2JlMzIoU19JU0RJUihpcC0+aV9pbm9kZS5pX21vZGUpICYmCi0JCQkJCSAgICAgIShpcC0+aV9kaXNrZmxhZ3MgJiBHRlMyX0RJRl9FWEhBU0gpID8KLQkJCQkJICAgICBHRlMyX0ZPUk1BVF9ERSA6IDApOwotCXN0ci0+ZGlfZGVwdGggPSBjcHVfdG9fYmUxNihpcC0+aV9kZXB0aCk7Ci0Jc3RyLT5kaV9lbnRyaWVzID0gY3B1X3RvX2JlMzIoaXAtPmlfZW50cmllcyk7CisJaWYgKCFnZnMyX2FsbG9jX2dldChpcCkpCisJCXJldHVybiAtRU5PTUVNOwogCi0Jc3RyLT5kaV9lYXR0ciA9IGNwdV90b19iZTY0KGlwLT5pX2VhdHRyKTsKLQlzdHItPmRpX2F0aW1lX25zZWMgPSBjcHVfdG9fYmUzMihpcC0+aV9pbm9kZS5pX2F0aW1lLnR2X25zZWMpOwotCXN0ci0+ZGlfbXRpbWVfbnNlYyA9IGNwdV90b19iZTMyKGlwLT5pX2lub2RlLmlfbXRpbWUudHZfbnNlYyk7Ci0Jc3RyLT5kaV9jdGltZV9uc2VjID0gY3B1X3RvX2JlMzIoaXAtPmlfaW5vZGUuaV9jdGltZS50dl9uc2VjKTsKKwllcnJvciA9IGdmczJfcXVvdGFfbG9jayhpcCwgbnVpZCwgbmdpZCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9hbGxvYzsKKworCWlmIChvdWlkICE9IE5PX1FVT1RBX0NIQU5HRSB8fCBvZ2lkICE9IE5PX1FVT1RBX0NIQU5HRSkgeworCQllcnJvciA9IGdmczJfcXVvdGFfY2hlY2soaXAsIG51aWQsIG5naWQpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIG91dF9ndW5sb2NrX3E7CisJfQorCisJZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKHNkcCwgUkVTX0RJTk9ERSArIDIgKiBSRVNfUVVPVEEsIDApOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfZ3VubG9ja19xOworCisJZXJyb3IgPSBnZnMyX3NldGF0dHJfc2ltcGxlKGlwLCBhdHRyKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X2VuZF90cmFuczsKKworCWlmIChvdWlkICE9IE5PX1FVT1RBX0NIQU5HRSB8fCBvZ2lkICE9IE5PX1FVT1RBX0NIQU5HRSkgeworCQl1NjQgYmxvY2tzID0gZ2ZzMl9nZXRfaW5vZGVfYmxvY2tzKCZpcC0+aV9pbm9kZSk7CisJCWdmczJfcXVvdGFfY2hhbmdlKGlwLCAtYmxvY2tzLCBvdWlkLCBvZ2lkKTsKKwkJZ2ZzMl9xdW90YV9jaGFuZ2UoaXAsIGJsb2NrcywgbnVpZCwgbmdpZCk7CisJfQorCitvdXRfZW5kX3RyYW5zOgorCWdmczJfdHJhbnNfZW5kKHNkcCk7CitvdXRfZ3VubG9ja19xOgorCWdmczJfcXVvdGFfdW5sb2NrKGlwKTsKK291dF9hbGxvYzoKKwlnZnMyX2FsbG9jX3B1dChpcCk7CisJcmV0dXJuIGVycm9yOwogfQogCi12b2lkIGdmczJfZGlub2RlX3ByaW50KGNvbnN0IHN0cnVjdCBnZnMyX2lub2RlICppcCkKKy8qKgorICogZ2ZzMl9zZXRhdHRyIC0gQ2hhbmdlIGF0dHJpYnV0ZXMgb24gYW4gaW5vZGUKKyAqIEBkZW50cnk6IFRoZSBkZW50cnkgd2hpY2ggaXMgY2hhbmdpbmcKKyAqIEBhdHRyOiBUaGUgc3RydWN0dXJlIGRlc2NyaWJpbmcgdGhlIGNoYW5nZQorICoKKyAqIFRoZSBWRlMgbGF5ZXIgd2FudHMgdG8gY2hhbmdlIG9uZSBvciBtb3JlIG9mIGFuIGlub2RlcyBhdHRyaWJ1dGVzLiAgV3JpdGUKKyAqIHRoYXQgY2hhbmdlIG91dCB0byBkaXNrLgorICoKKyAqIFJldHVybnM6IGVycm5vCisgKi8KKworc3RhdGljIGludCBnZnMyX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiICBub19mb3JtYWxfaW5vID0gJWxsdVxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpcC0+aV9ub19mb3JtYWxfaW5vKTsKLQlwcmludGsoS0VSTl9JTkZPICIgIG5vX2FkZHIgPSAlbGx1XG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWlwLT5pX25vX2FkZHIpOwotCXByaW50ayhLRVJOX0lORk8gIiAgaV9zaXplID0gJWxsdVxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpX3NpemVfcmVhZCgmaXAtPmlfaW5vZGUpKTsKLQlwcmludGsoS0VSTl9JTkZPICIgIGJsb2NrcyA9ICVsbHVcbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZ2ZzMl9nZXRfaW5vZGVfYmxvY2tzKCZpcC0+aV9pbm9kZSkpOwotCXByaW50ayhLRVJOX0lORk8gIiAgaV9nb2FsID0gJWxsdVxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpcC0+aV9nb2FsKTsKLQlwcmludGsoS0VSTl9JTkZPICIgIGlfZGlza2ZsYWdzID0gMHglLjhYXG4iLCBpcC0+aV9kaXNrZmxhZ3MpOwotCXByaW50ayhLRVJOX0lORk8gIiAgaV9oZWlnaHQgPSAldVxuIiwgaXAtPmlfaGVpZ2h0KTsKLQlwcmludGsoS0VSTl9JTkZPICIgIGlfZGVwdGggPSAldVxuIiwgaXAtPmlfZGVwdGgpOwotCXByaW50ayhLRVJOX0lORk8gIiAgaV9lbnRyaWVzID0gJXVcbiIsIGlwLT5pX2VudHJpZXMpOwotCXByaW50ayhLRVJOX0lORk8gIiAgaV9lYXR0ciA9ICVsbHVcbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaXAtPmlfZWF0dHIpOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKKwlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgaV9naDsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChpcC0+aV9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCAmaV9naCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwllcnJvciA9IC1FUEVSTTsKKwlpZiAoSVNfSU1NVVRBQkxFKGlub2RlKSB8fCBJU19BUFBFTkQoaW5vZGUpKQorCQlnb3RvIG91dDsKKworCWVycm9yID0gaW5vZGVfY2hhbmdlX29rKGlub2RlLCBhdHRyKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0OworCisJaWYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKQorCQllcnJvciA9IGdmczJfc2V0YXR0cl9zaXplKGlub2RlLCBhdHRyLT5pYV9zaXplKTsKKwllbHNlIGlmIChhdHRyLT5pYV92YWxpZCAmIChBVFRSX1VJRCB8IEFUVFJfR0lEKSkKKwkJZXJyb3IgPSBzZXRhdHRyX2Nob3duKGlub2RlLCBhdHRyKTsKKwllbHNlIGlmICgoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX01PREUpICYmIElTX1BPU0lYQUNMKGlub2RlKSkKKwkJZXJyb3IgPSBnZnMyX2FjbF9jaG1vZChpcCwgYXR0cik7CisJZWxzZQorCQllcnJvciA9IGdmczJfc2V0YXR0cl9zaW1wbGUoaXAsIGF0dHIpOworCitvdXQ6CisJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmlfZ2gpOworCWlmICghZXJyb3IpCisJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCXJldHVybiBlcnJvcjsKIH0KIAorLyoqCisgKiBnZnMyX2dldGF0dHIgLSBSZWFkIG91dCBhbiBpbm9kZSdzIGF0dHJpYnV0ZXMKKyAqIEBtbnQ6IFRoZSB2ZnNtb3VudCB0aGUgaW5vZGUgaXMgYmVpbmcgYWNjZXNzZWQgZnJvbQorICogQGRlbnRyeTogVGhlIGRlbnRyeSB0byBzdGF0CisgKiBAc3RhdDogVGhlIGlub2RlJ3Mgc3RhdHMKKyAqCisgKiBUaGlzIG1heSBiZSBjYWxsZWQgZnJvbSB0aGUgVkZTIGRpcmVjdGx5LCBvciBmcm9tIHdpdGhpbiBHRlMyIHdpdGggdGhlCisgKiBpbm9kZSBsb2NrZWQsIHNvIHdlIGxvb2sgdG8gc2VlIGlmIHRoZSBnbG9jayBpcyBhbHJlYWR5IGxvY2tlZCBhbmQgb25seQorICogbG9jayB0aGUgZ2xvY2sgaWYgaXRzIG5vdCBhbHJlYWR5IGJlZW4gZG9uZS4gTm90ZSB0aGF0IGl0cyB0aGUgTkZTCisgKiByZWFkZGlycGx1cyBvcGVyYXRpb24gd2hpY2ggY2F1c2VzIHRoaXMgdG8gYmUgY2FsbGVkIChmcm9tIGZpbGxkaXIpCisgKiB3aXRoIHRoZSBnbG9jayBhbHJlYWR5IGhlbGQuCisgKgorICogUmV0dXJuczogZXJybm8KKyAqLworCitzdGF0aWMgaW50IGdmczJfZ2V0YXR0cihzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJc3RydWN0IGtzdGF0ICpzdGF0KQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKKwlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZ2g7CisJaW50IGVycm9yOworCWludCB1bmxvY2sgPSAwOworCisJaWYgKGdmczJfZ2xvY2tfaXNfbG9ja2VkX2J5X21lKGlwLT5pX2dsKSA9PSBOVUxMKSB7CisJCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KGlwLT5pX2dsLCBMTV9TVF9TSEFSRUQsIExNX0ZMQUdfQU5ZLCAmZ2gpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisJCXVubG9jayA9IDE7CisJfQorCisJZ2VuZXJpY19maWxsYXR0cihpbm9kZSwgc3RhdCk7CisJaWYgKHVubG9jaykKKwkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmdoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdmczJfc2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAorCQkJIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOworCXN0cnVjdCBnZnMyX2hvbGRlciBnaDsKKwlpbnQgcmV0OworCisJZ2ZzMl9ob2xkZXJfaW5pdChpcC0+aV9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCAmZ2gpOworCXJldCA9IGdmczJfZ2xvY2tfbnEoJmdoKTsKKwlpZiAocmV0ID09IDApIHsKKwkJcmV0ID0gZ2VuZXJpY19zZXR4YXR0cihkZW50cnksIG5hbWUsIGRhdGEsIHNpemUsIGZsYWdzKTsKKwkJZ2ZzMl9nbG9ja19kcSgmZ2gpOworCX0KKwlnZnMyX2hvbGRlcl91bmluaXQoJmdoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBnZnMyX2dldHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOworCXN0cnVjdCBnZnMyX2hvbGRlciBnaDsKKwlpbnQgcmV0OworCisJZ2ZzMl9ob2xkZXJfaW5pdChpcC0+aV9nbCwgTE1fU1RfU0hBUkVELCBMTV9GTEFHX0FOWSwgJmdoKTsKKwlyZXQgPSBnZnMyX2dsb2NrX25xKCZnaCk7CisJaWYgKHJldCA9PSAwKSB7CisJCXJldCA9IGdlbmVyaWNfZ2V0eGF0dHIoZGVudHJ5LCBuYW1lLCBkYXRhLCBzaXplKTsKKwkJZ2ZzMl9nbG9ja19kcSgmZ2gpOworCX0KKwlnZnMyX2hvbGRlcl91bmluaXQoJmdoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGdmczJfcmVtb3ZleGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKKwlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZ2g7CisJaW50IHJldDsKKworCWdmczJfaG9sZGVyX2luaXQoaXAtPmlfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwgJmdoKTsKKwlyZXQgPSBnZnMyX2dsb2NrX25xKCZnaCk7CisJaWYgKHJldCA9PSAwKSB7CisJCXJldCA9IGdlbmVyaWNfcmVtb3ZleGF0dHIoZGVudHJ5LCBuYW1lKTsKKwkJZ2ZzMl9nbG9ja19kcSgmZ2gpOworCX0KKwlnZnMyX2hvbGRlcl91bmluaXQoJmdoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGdmczJfZmllbWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWVtYXBfZXh0ZW50X2luZm8gKmZpZWluZm8sCisJCSAgICAgICB1NjQgc3RhcnQsIHU2NCBsZW4pCit7CisJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKKwlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZ2g7CisJaW50IHJldDsKKworCXJldCA9IGZpZW1hcF9jaGVja19mbGFncyhmaWVpbmZvLCBGSUVNQVBfRkxBR19TWU5DKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCisJcmV0ID0gZ2ZzMl9nbG9ja19ucV9pbml0KGlwLT5pX2dsLCBMTV9TVF9TSEFSRUQsIDAsICZnaCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlpZiAoZ2ZzMl9pc19zdHVmZmVkKGlwKSkgeworCQl1NjQgcGh5cyA9IGlwLT5pX25vX2FkZHIgPDwgaW5vZGUtPmlfYmxrYml0czsKKwkJdTY0IHNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CisJCXUzMiBmbGFncyA9IEZJRU1BUF9FWFRFTlRfTEFTVHxGSUVNQVBfRVhURU5UX05PVF9BTElHTkVEfAorCQkJICAgIEZJRU1BUF9FWFRFTlRfREFUQV9JTkxJTkU7CisJCXBoeXMgKz0gc2l6ZW9mKHN0cnVjdCBnZnMyX2Rpbm9kZSk7CisJCXBoeXMgKz0gc3RhcnQ7CisJCWlmIChzdGFydCArIGxlbiA+IHNpemUpCisJCQlsZW4gPSBzaXplIC0gc3RhcnQ7CisJCWlmIChzdGFydCA8IHNpemUpCisJCQlyZXQgPSBmaWVtYXBfZmlsbF9uZXh0X2V4dGVudChmaWVpbmZvLCBzdGFydCwgcGh5cywKKwkJCQkJCSAgICAgIGxlbiwgZmxhZ3MpOworCQlpZiAocmV0ID09IDEpCisJCQlyZXQgPSAwOworCX0gZWxzZSB7CisJCXJldCA9IF9fZ2VuZXJpY19ibG9ja19maWVtYXAoaW5vZGUsIGZpZWluZm8sIHN0YXJ0LCBsZW4sCisJCQkJCSAgICAgZ2ZzMl9ibG9ja19tYXApOworCX0KKworCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZnaCk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZ2ZzMl9maWxlX2lvcHMgPSB7CisJLnBlcm1pc3Npb24gPSBnZnMyX3Blcm1pc3Npb24sCisJLnNldGF0dHIgPSBnZnMyX3NldGF0dHIsCisJLmdldGF0dHIgPSBnZnMyX2dldGF0dHIsCisJLnNldHhhdHRyID0gZ2ZzMl9zZXR4YXR0ciwKKwkuZ2V0eGF0dHIgPSBnZnMyX2dldHhhdHRyLAorCS5saXN0eGF0dHIgPSBnZnMyX2xpc3R4YXR0ciwKKwkucmVtb3ZleGF0dHIgPSBnZnMyX3JlbW92ZXhhdHRyLAorCS5maWVtYXAgPSBnZnMyX2ZpZW1hcCwKK307CisKK2NvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGdmczJfZGlyX2lvcHMgPSB7CisJLmNyZWF0ZSA9IGdmczJfY3JlYXRlLAorCS5sb29rdXAgPSBnZnMyX2xvb2t1cCwKKwkubGluayA9IGdmczJfbGluaywKKwkudW5saW5rID0gZ2ZzMl91bmxpbmssCisJLnN5bWxpbmsgPSBnZnMyX3N5bWxpbmssCisJLm1rZGlyID0gZ2ZzMl9ta2RpciwKKwkucm1kaXIgPSBnZnMyX3VubGluaywKKwkubWtub2QgPSBnZnMyX21rbm9kLAorCS5yZW5hbWUgPSBnZnMyX3JlbmFtZSwKKwkucGVybWlzc2lvbiA9IGdmczJfcGVybWlzc2lvbiwKKwkuc2V0YXR0ciA9IGdmczJfc2V0YXR0ciwKKwkuZ2V0YXR0ciA9IGdmczJfZ2V0YXR0ciwKKwkuc2V0eGF0dHIgPSBnZnMyX3NldHhhdHRyLAorCS5nZXR4YXR0ciA9IGdmczJfZ2V0eGF0dHIsCisJLmxpc3R4YXR0ciA9IGdmczJfbGlzdHhhdHRyLAorCS5yZW1vdmV4YXR0ciA9IGdmczJfcmVtb3ZleGF0dHIsCisJLmZpZW1hcCA9IGdmczJfZmllbWFwLAorfTsKKworY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZ2ZzMl9zeW1saW5rX2lvcHMgPSB7CisJLnJlYWRsaW5rID0gZ2VuZXJpY19yZWFkbGluaywKKwkuZm9sbG93X2xpbmsgPSBnZnMyX2ZvbGxvd19saW5rLAorCS5wdXRfbGluayA9IGdmczJfcHV0X2xpbmssCisJLnBlcm1pc3Npb24gPSBnZnMyX3Blcm1pc3Npb24sCisJLnNldGF0dHIgPSBnZnMyX3NldGF0dHIsCisJLmdldGF0dHIgPSBnZnMyX2dldGF0dHIsCisJLnNldHhhdHRyID0gZ2ZzMl9zZXR4YXR0ciwKKwkuZ2V0eGF0dHIgPSBnZnMyX2dldHhhdHRyLAorCS5saXN0eGF0dHIgPSBnZnMyX2xpc3R4YXR0ciwKKwkucmVtb3ZleGF0dHIgPSBnZnMyX3JlbW92ZXhhdHRyLAorCS5maWVtYXAgPSBnZnMyX2ZpZW1hcCwKK307CisKZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5vZGUuaCBiL2ZzL2dmczIvaW5vZGUuaAppbmRleCAwOTljYTMwLi4zMTYwNjA3IDEwMDY0NAotLS0gYS9mcy9nZnMyL2lub2RlLmgKKysrIGIvZnMvZ2ZzMi9pbm9kZS5oCkBAIC0xMDIsMjIgKzEwMiwxNiBAQAogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqZ2ZzMl9sb29rdXBfYnlfaW51bShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdTY0IG5vX2FkZHIsCiAJCQkJCSB1NjQgKm5vX2Zvcm1hbF9pbm8sCiAJCQkJCSB1bnNpZ25lZCBpbnQgYmxrdHlwZSk7Ci1leHRlcm4gc3RydWN0IGlub2RlICpnZnMyX2lsb29rdXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IG5vX2FkZHIpOworZXh0ZXJuIHN0cnVjdCBpbm9kZSAqZ2ZzMl9pbG9va3VwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBub19hZGRyLCBpbnQgbm9uYmxvY2spOwogCiBleHRlcm4gaW50IGdmczJfaW5vZGVfcmVmcmVzaChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXApOwogCi1leHRlcm4gaW50IGdmczJfZGlub2RlX2RlYWxsb2Moc3RydWN0IGdmczJfaW5vZGUgKmlub2RlKTsKLWV4dGVybiBpbnQgZ2ZzMl9jaGFuZ2Vfbmxpbmsoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBpbnQgZGlmZik7CiBleHRlcm4gc3RydWN0IGlub2RlICpnZnMyX2xvb2t1cGkoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLAogCQkJCSAgaW50IGlzX3Jvb3QpOwotZXh0ZXJuIHN0cnVjdCBpbm9kZSAqZ2ZzMl9jcmVhdGVpKHN0cnVjdCBnZnMyX2hvbGRlciAqZ2hzLAotCQkJCSAgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCi0JCQkJICB1bnNpZ25lZCBpbnQgbW9kZSwgZGV2X3QgZGV2KTsKIGV4dGVybiBpbnQgZ2ZzMl9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwogZXh0ZXJuIGludCBnZnMyX3NldGF0dHJfc2ltcGxlKHN0cnVjdCBnZnMyX2lub2RlICppcCwgc3RydWN0IGlhdHRyICphdHRyKTsKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmdmczJfbG9va3VwX3NpbXBsZShzdHJ1Y3QgaW5vZGUgKmRpcCwgY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gdm9pZCBnZnMyX2Rpbm9kZV9vdXQoY29uc3Qgc3RydWN0IGdmczJfaW5vZGUgKmlwLCB2b2lkICpidWYpOwotZXh0ZXJuIHZvaWQgZ2ZzMl9kaW5vZGVfcHJpbnQoY29uc3Qgc3RydWN0IGdmczJfaW5vZGUgKmlwKTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGdmczJfZmlsZV9pb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGdmczJfZGlyX2lvcHM7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvZy5jIGIvZnMvZ2ZzMi9sb2cuYwppbmRleCA1YjEwMmMxLi5jZWMyNmMwIDEwMDY0NAotLS0gYS9mcy9nZnMyL2xvZy5jCisrKyBiL2ZzL2dmczIvbG9nLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgorI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpAQCAtODMsNTUgKzg0LDk3IEBACiAvKioKICAqIGdmczJfYWlsMV9zdGFydF9vbmUgLSBTdGFydCBJL08gb24gYSBwYXJ0IG9mIHRoZSBBSUwKICAqIEBzZHA6IHRoZSBmaWxlc3lzdGVtCi0gKiBAdHI6IHRoZSBwYXJ0IG9mIHRoZSBBSUwKKyAqIEB3YmM6IFRoZSB3cml0ZWJhY2sgY29udHJvbCBzdHJ1Y3R1cmUKKyAqIEBhaTogVGhlIGFpbCBzdHJ1Y3R1cmUKICAqCiAgKi8KIAotc3RhdGljIHZvaWQgZ2ZzMl9haWwxX3N0YXJ0X29uZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGdmczJfYWlsICphaSkKK3N0YXRpYyBpbnQgZ2ZzMl9haWwxX3N0YXJ0X29uZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwKKwkJCSAgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywKKwkJCSAgICAgICBzdHJ1Y3QgZ2ZzMl9haWwgKmFpKQogX19yZWxlYXNlcygmc2RwLT5zZF9haWxfbG9jaykKIF9fYWNxdWlyZXMoJnNkcC0+c2RfYWlsX2xvY2spCiB7CisJc3RydWN0IGdmczJfZ2xvY2sgKmdsID0gTlVMTDsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKIAlzdHJ1Y3QgZ2ZzMl9idWZkYXRhICpiZCwgKnM7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQlpbnQgcmV0cnk7CiAKLQlkbyB7Ci0JCXJldHJ5ID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShiZCwgcywgJmFpLT5haV9haWwxX2xpc3QsIGJkX2FpbF9zdF9saXN0KSB7CisJCWJoID0gYmQtPmJkX2JoOwogCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKGJkLCBzLCAmYWktPmFpX2FpbDFfbGlzdCwKLQkJCQkJCSBiZF9haWxfc3RfbGlzdCkgewotCQkJYmggPSBiZC0+YmRfYmg7CisJCWdmczJfYXNzZXJ0KHNkcCwgYmQtPmJkX2FpbCA9PSBhaSk7CiAKLQkJCWdmczJfYXNzZXJ0KHNkcCwgYmQtPmJkX2FpbCA9PSBhaSk7Ci0KLQkJCWlmICghYnVmZmVyX2J1c3koYmgpKSB7Ci0JCQkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKQotCQkJCQlnZnMyX2lvX2Vycm9yX2JoKHNkcCwgYmgpOwotCQkJCWxpc3RfbW92ZSgmYmQtPmJkX2FpbF9zdF9saXN0LCAmYWktPmFpX2FpbDJfbGlzdCk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCWlmICghYnVmZmVyX2RpcnR5KGJoKSkKLQkJCQljb250aW51ZTsKLQotCQkJbGlzdF9tb3ZlKCZiZC0+YmRfYWlsX3N0X2xpc3QsICZhaS0+YWlfYWlsMV9saXN0KTsKLQotCQkJZ2V0X2JoKGJoKTsKLQkJCXNwaW5fdW5sb2NrKCZzZHAtPnNkX2FpbF9sb2NrKTsKLQkJCWxvY2tfYnVmZmVyKGJoKTsKLQkJCWlmICh0ZXN0X2NsZWFyX2J1ZmZlcl9kaXJ0eShiaCkpIHsKLQkJCQliaC0+Yl9lbmRfaW8gPSBlbmRfYnVmZmVyX3dyaXRlX3N5bmM7Ci0JCQkJc3VibWl0X2JoKFdSSVRFX1NZTkMsIGJoKTsKLQkJCX0gZWxzZSB7Ci0JCQkJdW5sb2NrX2J1ZmZlcihiaCk7Ci0JCQkJYnJlbHNlKGJoKTsKLQkJCX0KLQkJCXNwaW5fbG9jaygmc2RwLT5zZF9haWxfbG9jayk7Ci0KLQkJCXJldHJ5ID0gMTsKLQkJCWJyZWFrOworCQlpZiAoIWJ1ZmZlcl9idXN5KGJoKSkgeworCQkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKQorCQkJCWdmczJfaW9fZXJyb3JfYmgoc2RwLCBiaCk7CisJCQlsaXN0X21vdmUoJmJkLT5iZF9haWxfc3RfbGlzdCwgJmFpLT5haV9haWwyX2xpc3QpOworCQkJY29udGludWU7CiAJCX0KLQl9IHdoaWxlIChyZXRyeSk7CisKKwkJaWYgKCFidWZmZXJfZGlydHkoYmgpKQorCQkJY29udGludWU7CisJCWlmIChnbCA9PSBiZC0+YmRfZ2wpCisJCQljb250aW51ZTsKKwkJZ2wgPSBiZC0+YmRfZ2w7CisJCWxpc3RfbW92ZSgmYmQtPmJkX2FpbF9zdF9saXN0LCAmYWktPmFpX2FpbDFfbGlzdCk7CisJCW1hcHBpbmcgPSBiaC0+Yl9wYWdlLT5tYXBwaW5nOworCQlpZiAoIW1hcHBpbmcpCisJCQljb250aW51ZTsKKwkJc3Bpbl91bmxvY2soJnNkcC0+c2RfYWlsX2xvY2spOworCQlnZW5lcmljX3dyaXRlcGFnZXMobWFwcGluZywgd2JjKTsKKwkJc3Bpbl9sb2NrKCZzZHAtPnNkX2FpbF9sb2NrKTsKKwkJaWYgKHdiYy0+bnJfdG9fd3JpdGUgPD0gMCkKKwkJCWJyZWFrOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqIGdmczJfYWlsMV9mbHVzaCAtIHN0YXJ0IHdyaXRlYmFjayBvZiBzb21lIGFpbDEgZW50cmllcyAKKyAqIEBzZHA6IFRoZSBzdXBlciBibG9jaworICogQHdiYzogVGhlIHdyaXRlYmFjayBjb250cm9sIHN0cnVjdHVyZQorICoKKyAqIFdyaXRlcyBiYWNrIHNvbWUgYWlsMSBlbnRyaWVzLCBhY2NvcmRpbmcgdG8gdGhlIGxpbWl0cyBpbiB0aGUKKyAqIHdyaXRlYmFjayBjb250cm9sIHN0cnVjdHVyZQorICovCisKK3ZvaWQgZ2ZzMl9haWwxX2ZsdXNoKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJnNkcC0+c2RfYWlsMV9saXN0OworCXN0cnVjdCBnZnMyX2FpbCAqYWk7CisKKwl0cmFjZV9nZnMyX2FpbF9mbHVzaChzZHAsIHdiYywgMSk7CisJc3Bpbl9sb2NrKCZzZHAtPnNkX2FpbF9sb2NrKTsKK3Jlc3RhcnQ6CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGFpLCBoZWFkLCBhaV9saXN0KSB7CisJCWlmICh3YmMtPm5yX3RvX3dyaXRlIDw9IDApCisJCQlicmVhazsKKwkJaWYgKGdmczJfYWlsMV9zdGFydF9vbmUoc2RwLCB3YmMsIGFpKSkKKwkJCWdvdG8gcmVzdGFydDsKKwl9CisJc3Bpbl91bmxvY2soJnNkcC0+c2RfYWlsX2xvY2spOworCXRyYWNlX2dmczJfYWlsX2ZsdXNoKHNkcCwgd2JjLCAwKTsKK30KKworLyoqCisgKiBnZnMyX2FpbDFfc3RhcnQgLSBzdGFydCB3cml0ZWJhY2sgb2YgYWxsIGFpbDEgZW50cmllcworICogQHNkcDogVGhlIHN1cGVyYmxvY2sKKyAqLworCitzdGF0aWMgdm9pZCBnZnMyX2FpbDFfc3RhcnQoc3RydWN0IGdmczJfc2JkICpzZHApCit7CisJc3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHsKKwkJLnN5bmNfbW9kZSA9IFdCX1NZTkNfTk9ORSwKKwkJLm5yX3RvX3dyaXRlID0gTE9OR19NQVgsCisJCS5yYW5nZV9zdGFydCA9IDAsCisJCS5yYW5nZV9lbmQgPSBMTE9OR19NQVgsCisJfTsKKworCXJldHVybiBnZnMyX2FpbDFfZmx1c2goc2RwLCAmd2JjKTsKIH0KIAogLyoqCkBAIC0xNDEsNyArMTg0LDcgQEAKICAqCiAgKi8KIAotc3RhdGljIGludCBnZnMyX2FpbDFfZW1wdHlfb25lKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl9haWwgKmFpLCBpbnQgZmxhZ3MpCitzdGF0aWMgdm9pZCBnZnMyX2FpbDFfZW1wdHlfb25lKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl9haWwgKmFpKQogewogCXN0cnVjdCBnZnMyX2J1ZmRhdGEgKmJkLCAqczsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwpAQCAtMTQ5LDcxICsxOTIsMzcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShiZCwgcywgJmFpLT5haV9haWwxX2xpc3QsCiAJCQkJCSBiZF9haWxfc3RfbGlzdCkgewogCQliaCA9IGJkLT5iZF9iaDsKLQogCQlnZnMyX2Fzc2VydChzZHAsIGJkLT5iZF9haWwgPT0gYWkpOwotCi0JCWlmIChidWZmZXJfYnVzeShiaCkpIHsKLQkJCWlmIChmbGFncyAmIERJT19BTEwpCi0JCQkJY29udGludWU7Ci0JCQllbHNlCi0JCQkJYnJlYWs7Ci0JCX0KLQorCQlpZiAoYnVmZmVyX2J1c3koYmgpKQorCQkJY29udGludWU7CiAJCWlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSkKIAkJCWdmczJfaW9fZXJyb3JfYmgoc2RwLCBiaCk7Ci0KIAkJbGlzdF9tb3ZlKCZiZC0+YmRfYWlsX3N0X2xpc3QsICZhaS0+YWlfYWlsMl9saXN0KTsKIAl9CiAKLQlyZXR1cm4gbGlzdF9lbXB0eSgmYWktPmFpX2FpbDFfbGlzdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGdmczJfYWlsMV9zdGFydChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOwotCXU2NCBzeW5jX2dlbjsKLQlzdHJ1Y3QgZ2ZzMl9haWwgKmFpOwotCWludCBkb25lID0gMDsKKy8qKgorICogZ2ZzMl9haWwxX2VtcHR5IC0gVHJ5IHRvIGVtcHR5IHRoZSBhaWwxIGxpc3RzCisgKiBAc2RwOiBUaGUgc3VwZXJibG9jaworICoKKyAqIFRyaWVzIHRvIGVtcHR5IHRoZSBhaWwxIGxpc3RzLCBzdGFydGluZyB3aXRoIHRoZSBvbGRlc3QgZmlyc3QKKyAqLwogCi0Jc3Bpbl9sb2NrKCZzZHAtPnNkX2FpbF9sb2NrKTsKLQloZWFkID0gJnNkcC0+c2RfYWlsMV9saXN0OwotCWlmIChsaXN0X2VtcHR5KGhlYWQpKSB7Ci0JCXNwaW5fdW5sb2NrKCZzZHAtPnNkX2FpbF9sb2NrKTsKLQkJcmV0dXJuOwotCX0KLQlzeW5jX2dlbiA9IHNkcC0+c2RfYWlsX3N5bmNfZ2VuKys7Ci0KLQl3aGlsZSghZG9uZSkgewotCQlkb25lID0gMTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGFpLCBoZWFkLCBhaV9saXN0KSB7Ci0JCQlpZiAoYWktPmFpX3N5bmNfZ2VuID49IHN5bmNfZ2VuKQotCQkJCWNvbnRpbnVlOwotCQkJYWktPmFpX3N5bmNfZ2VuID0gc3luY19nZW47Ci0JCQlnZnMyX2FpbDFfc3RhcnRfb25lKHNkcCwgYWkpOyAvKiBUaGlzIG1heSBkcm9wIGFpbCBsb2NrICovCi0JCQlkb25lID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfYWlsX2xvY2spOwotfQotCi1zdGF0aWMgaW50IGdmczJfYWlsMV9lbXB0eShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgaW50IGZsYWdzKQorc3RhdGljIGludCBnZnMyX2FpbDFfZW1wdHkoc3RydWN0IGdmczJfc2JkICpzZHApCiB7CiAJc3RydWN0IGdmczJfYWlsICphaSwgKnM7CiAJaW50IHJldDsKIAogCXNwaW5fbG9jaygmc2RwLT5zZF9haWxfbG9jayk7Ci0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShhaSwgcywgJnNkcC0+c2RfYWlsMV9saXN0LCBhaV9saXN0KSB7Ci0JCWlmIChnZnMyX2FpbDFfZW1wdHlfb25lKHNkcCwgYWksIGZsYWdzKSkKKwkJZ2ZzMl9haWwxX2VtcHR5X29uZShzZHAsIGFpKTsKKwkJaWYgKGxpc3RfZW1wdHkoJmFpLT5haV9haWwxX2xpc3QpKQogCQkJbGlzdF9tb3ZlKCZhaS0+YWlfbGlzdCwgJnNkcC0+c2RfYWlsMl9saXN0KTsKLQkJZWxzZSBpZiAoIShmbGFncyAmIERJT19BTEwpKQorCQllbHNlCiAJCQlicmVhazsKIAl9Ci0KIAlyZXQgPSBsaXN0X2VtcHR5KCZzZHAtPnNkX2FpbDFfbGlzdCk7Ci0KIAlzcGluX3VubG9jaygmc2RwLT5zZF9haWxfbG9jayk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtNTc0LDcgKzU4Myw3IEBACiAJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7CiAJY2xlYXJfYnVmZmVyX2RpcnR5KGJoKTsKIAotCWdmczJfYWlsMV9lbXB0eShzZHAsIDApOworCWdmczJfYWlsMV9lbXB0eShzZHApOwogCXRhaWwgPSBjdXJyZW50X3RhaWwoc2RwKTsKIAogCWxoID0gKHN0cnVjdCBnZnMyX2xvZ19oZWFkZXIgKiliaC0+Yl9kYXRhOwpAQCAtODY5LDcgKzg3OCw3IEBACiAJZ2ZzMl9sb2dfZmx1c2goc2RwLCBOVUxMKTsKIAlmb3IgKDs7KSB7CiAJCWdmczJfYWlsMV9zdGFydChzZHApOwotCQlpZiAoZ2ZzMl9haWwxX2VtcHR5KHNkcCwgRElPX0FMTCkpCisJCWlmIChnZnMyX2FpbDFfZW1wdHkoc2RwKSkKIAkJCWJyZWFrOwogCQltc2xlZXAoMTApOwogCX0KQEAgLTkwNSwxNyArOTE0LDE1IEBACiAKIAkJcHJlZmx1c2ggPSBhdG9taWNfcmVhZCgmc2RwLT5zZF9sb2dfcGlubmVkKTsKIAkJaWYgKGdmczJfanJubF9mbHVzaF9yZXFkKHNkcCkgfHwgdCA9PSAwKSB7Ci0JCQlnZnMyX2FpbDFfZW1wdHkoc2RwLCBESU9fQUxMKTsKKwkJCWdmczJfYWlsMV9lbXB0eShzZHApOwogCQkJZ2ZzMl9sb2dfZmx1c2goc2RwLCBOVUxMKTsKLQkJCWdmczJfYWlsMV9lbXB0eShzZHAsIERJT19BTEwpOwogCQl9CiAKIAkJaWYgKGdmczJfYWlsX2ZsdXNoX3JlcWQoc2RwKSkgewogCQkJZ2ZzMl9haWwxX3N0YXJ0KHNkcCk7CiAJCQlpb19zY2hlZHVsZSgpOwotCQkJZ2ZzMl9haWwxX2VtcHR5KHNkcCwgMCk7CisJCQlnZnMyX2FpbDFfZW1wdHkoc2RwKTsKIAkJCWdmczJfbG9nX2ZsdXNoKHNkcCwgTlVMTCk7Ci0JCQlnZnMyX2FpbDFfZW1wdHkoc2RwLCBESU9fQUxMKTsKIAkJfQogCiAJCXdha2VfdXAoJnNkcC0+c2RfbG9nX3dhaXRxKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9nLmggYi9mcy9nZnMyL2xvZy5oCmluZGV4IDBkMDA3ZjkuLmFiMDYyMTYgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvbG9nLmgKKysrIGIvZnMvZ2ZzMi9sb2cuaApAQCAtMTIsNiArMTIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSAiaW5jb3JlLmgiCiAKIC8qKgpAQCAtNTksNiArNjAsNyBAQAogZXh0ZXJuIHZvaWQgZ2ZzMl9sb2dfZmx1c2goc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBnZnMyX2dsb2NrICpnbCk7CiBleHRlcm4gdm9pZCBnZnMyX2xvZ19jb21taXQoc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBnZnMyX3RyYW5zICp0cmFucyk7CiBleHRlcm4gdm9pZCBnZnMyX3JlbW92ZV9mcm9tX2FpbChzdHJ1Y3QgZ2ZzMl9idWZkYXRhICpiZCk7CitleHRlcm4gdm9pZCBnZnMyX2FpbDFfZmx1c2goc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKIAogZXh0ZXJuIHZvaWQgZ2ZzMl9sb2dfc2h1dGRvd24oc3RydWN0IGdmczJfc2JkICpzZHApOwogZXh0ZXJuIHZvaWQgZ2ZzMl9tZXRhX3N5bmNmcyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2xvcHMuYyBiL2ZzL2dmczIvbG9wcy5jCmluZGV4IDUxZDI3ZjAuLjA1YmJiMTIgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvbG9wcy5jCisrKyBiL2ZzL2dmczIvbG9wcy5jCkBAIC00MCw3ICs0MCw3IEBACiB7CiAJc3RydWN0IGdmczJfYnVmZGF0YSAqYmQ7CiAKLQlnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsIHRlc3RfYml0KFNERl9KT1VSTkFMX0xJVkUsICZzZHAtPnNkX2ZsYWdzKSk7CisJQlVHX09OKCFjdXJyZW50LT5qb3VybmFsX2luZm8pOwogCiAJY2xlYXJfYnVmZmVyX2RpcnR5KGJoKTsKIAlpZiAodGVzdF9zZXRfYnVmZmVyX3Bpbm5lZChiaCkpCkBAIC02NSw2ICs2NSw3IEBACiAgKiBAc2RwOiB0aGUgZmlsZXN5c3RlbSB0aGUgYnVmZmVyIGJlbG9uZ3MgdG8KICAqIEBiaDogVGhlIGJ1ZmZlciB0byB1bnBpbgogICogQGFpOgorICogQGZsYWdzOiBUaGUgaW5vZGUgZGlydHkgZmxhZ3MKICAqCiAgKi8KIApAQCAtNzMsMTAgKzc0LDggQEAKIHsKIAlzdHJ1Y3QgZ2ZzMl9idWZkYXRhICpiZCA9IGJoLT5iX3ByaXZhdGU7CiAKLQlnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsIGJ1ZmZlcl91cHRvZGF0ZShiaCkpOwotCi0JaWYgKCFidWZmZXJfcGlubmVkKGJoKSkKLQkJZ2ZzMl9hc3NlcnRfd2l0aGRyYXcoc2RwLCAwKTsKKwlCVUdfT04oIWJ1ZmZlcl91cHRvZGF0ZShiaCkpOworCUJVR19PTighYnVmZmVyX3Bpbm5lZChiaCkpOwogCiAJbG9ja19idWZmZXIoYmgpOwogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKQEAgLTk1LDggKzk0LDcgQEAKIAlsaXN0X2FkZCgmYmQtPmJkX2FpbF9zdF9saXN0LCAmYWktPmFpX2FpbDFfbGlzdCk7CiAJc3Bpbl91bmxvY2soJnNkcC0+c2RfYWlsX2xvY2spOwogCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChHTEZfTEZMVVNILCAmYmQtPmJkX2dsLT5nbF9mbGFncykpCi0JCWdmczJfZ2xvY2tfc2NoZWR1bGVfZm9yX3JlY2xhaW0oYmQtPmJkX2dsKTsKKwljbGVhcl9iaXQoR0xGX0xGTFVTSCwgJmJkLT5iZF9nbC0+Z2xfZmxhZ3MpOwogCXRyYWNlX2dmczJfcGluKGJkLCAwKTsKIAl1bmxvY2tfYnVmZmVyKGJoKTsKIAlhdG9taWNfZGVjKCZzZHAtPnNkX2xvZ19waW5uZWQpOwpAQCAtMzIyLDEyICszMjAsMTYgQEAKIAogc3RhdGljIHZvaWQgcmV2b2tlX2xvX2FkZChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGdmczJfbG9nX2VsZW1lbnQgKmxlKQogeworCXN0cnVjdCBnZnMyX2J1ZmRhdGEgKmJkID0gY29udGFpbmVyX29mKGxlLCBzdHJ1Y3QgZ2ZzMl9idWZkYXRhLCBiZF9sZSk7CisJc3RydWN0IGdmczJfZ2xvY2sgKmdsID0gYmQtPmJkX2dsOwogCXN0cnVjdCBnZnMyX3RyYW5zICp0cjsKIAogCXRyID0gY3VycmVudC0+am91cm5hbF9pbmZvOwogCXRyLT50cl90b3VjaGVkID0gMTsKIAl0ci0+dHJfbnVtX3Jldm9rZSsrOwogCXNkcC0+c2RfbG9nX251bV9yZXZva2UrKzsKKwlhdG9taWNfaW5jKCZnbC0+Z2xfcmV2b2tlcyk7CisJc2V0X2JpdChHTEZfTEZMVVNILCAmZ2wtPmdsX2ZsYWdzKTsKIAlsaXN0X2FkZCgmbGUtPmxlX2xpc3QsICZzZHAtPnNkX2xvZ19sZV9yZXZva2UpOwogfQogCkBAIC0zNTAsOSArMzUyLDcgQEAKIAlsZC0+bGRfZGF0YTEgPSBjcHVfdG9fYmUzMihzZHAtPnNkX2xvZ19udW1fcmV2b2tlKTsKIAlvZmZzZXQgPSBzaXplb2Yoc3RydWN0IGdmczJfbG9nX2Rlc2NyaXB0b3IpOwogCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7Ci0JCWJkID0gbGlzdF9lbnRyeShoZWFkLT5uZXh0LCBzdHJ1Y3QgZ2ZzMl9idWZkYXRhLCBiZF9sZS5sZV9saXN0KTsKLQkJbGlzdF9kZWxfaW5pdCgmYmQtPmJkX2xlLmxlX2xpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoYmQsIGhlYWQsIGJkX2xlLmxlX2xpc3QpIHsKIAkJc2RwLT5zZF9sb2dfbnVtX3Jldm9rZS0tOwogCiAJCWlmIChvZmZzZXQgKyBzaXplb2YodTY0KSA+IHNkcC0+c2Rfc2Iuc2JfYnNpemUpIHsKQEAgLTM2Nyw4ICszNjcsNiBAQAogCQl9CiAKIAkJKihfX2JlNjQgKikoYmgtPmJfZGF0YSArIG9mZnNldCkgPSBjcHVfdG9fYmU2NChiZC0+YmRfYmxrbm8pOwotCQlrbWVtX2NhY2hlX2ZyZWUoZ2ZzMl9idWZkYXRhX2NhY2hlcCwgYmQpOwotCiAJCW9mZnNldCArPSBzaXplb2YodTY0KTsKIAl9CiAJZ2ZzMl9hc3NlcnRfd2l0aGRyYXcoc2RwLCAhc2RwLT5zZF9sb2dfbnVtX3Jldm9rZSk7CkBAIC0zNzYsNiArMzc0LDIyIEBACiAJc3VibWl0X2JoKFdSSVRFX1NZTkMsIGJoKTsKIH0KIAorc3RhdGljIHZvaWQgcmV2b2tlX2xvX2FmdGVyX2NvbW1pdChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGdmczJfYWlsICphaSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJnNkcC0+c2RfbG9nX2xlX3Jldm9rZTsKKwlzdHJ1Y3QgZ2ZzMl9idWZkYXRhICpiZDsKKwlzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2w7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKKwkJYmQgPSBsaXN0X2VudHJ5KGhlYWQtPm5leHQsIHN0cnVjdCBnZnMyX2J1ZmRhdGEsIGJkX2xlLmxlX2xpc3QpOworCQlsaXN0X2RlbF9pbml0KCZiZC0+YmRfbGUubGVfbGlzdCk7CisJCWdsID0gYmQtPmJkX2dsOworCQlhdG9taWNfZGVjKCZnbC0+Z2xfcmV2b2tlcyk7CisJCWNsZWFyX2JpdChHTEZfTEZMVVNILCAmZ2wtPmdsX2ZsYWdzKTsKKwkJa21lbV9jYWNoZV9mcmVlKGdmczJfYnVmZGF0YV9jYWNoZXAsIGJkKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIHJldm9rZV9sb19iZWZvcmVfc2NhbihzdHJ1Y3QgZ2ZzMl9qZGVzYyAqamQsCiAJCQkJICBzdHJ1Y3QgZ2ZzMl9sb2dfaGVhZGVyX2hvc3QgKmhlYWQsIGludCBwYXNzKQogewpAQCAtNzQ5LDYgKzc2Myw3IEBACiBjb25zdCBzdHJ1Y3QgZ2ZzMl9sb2dfb3BlcmF0aW9ucyBnZnMyX3Jldm9rZV9sb3BzID0gewogCS5sb19hZGQgPSByZXZva2VfbG9fYWRkLAogCS5sb19iZWZvcmVfY29tbWl0ID0gcmV2b2tlX2xvX2JlZm9yZV9jb21taXQsCisJLmxvX2FmdGVyX2NvbW1pdCA9IHJldm9rZV9sb19hZnRlcl9jb21taXQsCiAJLmxvX2JlZm9yZV9zY2FuID0gcmV2b2tlX2xvX2JlZm9yZV9zY2FuLAogCS5sb19zY2FuX2VsZW1lbnRzID0gcmV2b2tlX2xvX3NjYW5fZWxlbWVudHMsCiAJLmxvX2FmdGVyX3NjYW4gPSByZXZva2VfbG9fYWZ0ZXJfc2NhbiwKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbWFpbi5jIGIvZnMvZ2ZzMi9tYWluLmMKaW5kZXggODg4YTVmNS4uY2ZhMzI3ZCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9tYWluLmMKKysrIGIvZnMvZ2ZzMi9tYWluLmMKQEAgLTUzLDYgKzUzLDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmZ2wtPmdsX2xydSk7CiAJSU5JVF9MSVNUX0hFQUQoJmdsLT5nbF9haWxfbGlzdCk7CiAJYXRvbWljX3NldCgmZ2wtPmdsX2FpbF9jb3VudCwgMCk7CisJYXRvbWljX3NldCgmZ2wtPmdsX3Jldm9rZXMsIDApOwogfQogCiBzdGF0aWMgdm9pZCBnZnMyX2luaXRfZ2xfYXNwYWNlX29uY2Uodm9pZCAqZm9vKQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9tZXRhX2lvLmMgYi9mcy9nZnMyL21ldGFfaW8uYwppbmRleCA2NzUzNDliLi43NDcyMzhjIDEwMDY0NAotLS0gYS9mcy9nZnMyL21ldGFfaW8uYworKysgYi9mcy9nZnMyL21ldGFfaW8uYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgInJncnAuaCIKICNpbmNsdWRlICJ0cmFucy5oIgogI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJ0cmFjZV9nZnMyLmgiCiAKIHN0YXRpYyBpbnQgZ2ZzMl9hc3BhY2Vfd3JpdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKQEAgLTMxMCw2ICszMTEsNyBAQAogCXN0cnVjdCBnZnMyX2J1ZmRhdGEgKmJkID0gYmgtPmJfcHJpdmF0ZTsKIAogCWlmICh0ZXN0X2NsZWFyX2J1ZmZlcl9waW5uZWQoYmgpKSB7CisJCXRyYWNlX2dmczJfcGluKGJkLCAwKTsKIAkJYXRvbWljX2RlYygmc2RwLT5zZF9sb2dfcGlubmVkKTsKIAkJbGlzdF9kZWxfaW5pdCgmYmQtPmJkX2xlLmxlX2xpc3QpOwogCQlpZiAobWV0YSkgewpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9tZXRhX2lvLmggYi9mcy9nZnMyL21ldGFfaW8uaAppbmRleCA2YTFkOWJhLi4yMmM1MjY1IDEwMDY0NAotLS0gYS9mcy9nZnMyL21ldGFfaW8uaAorKysgYi9mcy9nZnMyL21ldGFfaW8uaApAQCAtNzcsOCArNzcsNiBAQAogCiAjZGVmaW5lIGJ1ZmZlcl9idXN5KGJoKSBcCiAoKGJoKS0+Yl9zdGF0ZSAmICgoMXVsIDw8IEJIX0RpcnR5KSB8ICgxdWwgPDwgQkhfTG9jaykgfCAoMXVsIDw8IEJIX1Bpbm5lZCkpKQotI2RlZmluZSBidWZmZXJfaW5faW8oYmgpIFwKLSgoYmgpLT5iX3N0YXRlICYgKCgxdWwgPDwgQkhfRGlydHkpIHwgKDF1bCA8PCBCSF9Mb2NrKSkpCiAKICNlbmRpZiAvKiBfX0RJT19ET1RfSF9fICovCiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2ZzdHlwZS5jIGIvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKaW5kZXggZDNjNjllYi4uOGFjOWFlMSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKKysrIGIvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKQEAgLTEyNiw4ICsxMjYsMTAgQEAKICAqIGNoYW5nZWQuCiAgKi8KIAotc3RhdGljIGludCBnZnMyX2NoZWNrX3NiKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl9zYl9ob3N0ICpzYiwgaW50IHNpbGVudCkKK3N0YXRpYyBpbnQgZ2ZzMl9jaGVja19zYihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgaW50IHNpbGVudCkKIHsKKwlzdHJ1Y3QgZ2ZzMl9zYl9ob3N0ICpzYiA9ICZzZHAtPnNkX3NiOworCiAJaWYgKHNiLT5zYl9tYWdpYyAhPSBHRlMyX01BR0lDIHx8CiAJICAgIHNiLT5zYl90eXBlICE9IEdGUzJfTUVUQVRZUEVfU0IpIHsKIAkJaWYgKCFzaWxlbnQpCkBAIC0xNTcsOCArMTU5LDEwIEBACiAJdW5sb2NrX3BhZ2UocGFnZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdmczJfc2JfaW4oc3RydWN0IGdmczJfc2JfaG9zdCAqc2IsIGNvbnN0IHZvaWQgKmJ1ZikKK3N0YXRpYyB2b2lkIGdmczJfc2JfaW4oc3RydWN0IGdmczJfc2JkICpzZHAsIGNvbnN0IHZvaWQgKmJ1ZikKIHsKKwlzdHJ1Y3QgZ2ZzMl9zYl9ob3N0ICpzYiA9ICZzZHAtPnNkX3NiOworCXN0cnVjdCBzdXBlcl9ibG9jayAqcyA9IHNkcC0+c2RfdmZzOwogCWNvbnN0IHN0cnVjdCBnZnMyX3NiICpzdHIgPSBidWY7CiAKIAlzYi0+c2JfbWFnaWMgPSBiZTMyX3RvX2NwdShzdHItPnNiX2hlYWRlci5taF9tYWdpYyk7CkBAIC0xNzUsNyArMTc5LDcgQEAKIAogCW1lbWNweShzYi0+c2JfbG9ja3Byb3RvLCBzdHItPnNiX2xvY2twcm90bywgR0ZTMl9MT0NLTkFNRV9MRU4pOwogCW1lbWNweShzYi0+c2JfbG9ja3RhYmxlLCBzdHItPnNiX2xvY2t0YWJsZSwgR0ZTMl9MT0NLTkFNRV9MRU4pOwotCW1lbWNweShzYi0+c2JfdXVpZCwgc3RyLT5zYl91dWlkLCAxNik7CisJbWVtY3B5KHMtPnNfdXVpZCwgc3RyLT5zYl91dWlkLCAxNik7CiB9CiAKIC8qKgpAQCAtMTk3LDcgKzIwMSw3IEBACiAgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3Mgb3IgZXJyb3IKICAqLwogCi1zdGF0aWMgaW50IGdmczJfcmVhZF9zdXBlcihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc2VjdG9yX3Qgc2VjdG9yKQorc3RhdGljIGludCBnZnMyX3JlYWRfc3VwZXIoc3RydWN0IGdmczJfc2JkICpzZHAsIHNlY3Rvcl90IHNlY3RvciwgaW50IHNpbGVudCkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gc2RwLT5zZF92ZnM7CiAJc3RydWN0IGdmczJfc2IgKnA7CkBAIC0yMjcsMTAgKzIzMSwxMCBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAJcCA9IGttYXAocGFnZSk7Ci0JZ2ZzMl9zYl9pbigmc2RwLT5zZF9zYiwgcCk7CisJZ2ZzMl9zYl9pbihzZHAsIHApOwogCWt1bm1hcChwYWdlKTsKIAlfX2ZyZWVfcGFnZShwYWdlKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ2ZzMl9jaGVja19zYihzZHAsIHNpbGVudCk7CiB9CiAKIC8qKgpAQCAtMjQ3LDE3ICsyNTEsMTMgQEAKIAl1bnNpZ25lZCBpbnQgeDsKIAlpbnQgZXJyb3I7CiAKLQllcnJvciA9IGdmczJfcmVhZF9zdXBlcihzZHAsIEdGUzJfU0JfQUREUiA+PiBzZHAtPnNkX2ZzYjJiYl9zaGlmdCk7CisJZXJyb3IgPSBnZnMyX3JlYWRfc3VwZXIoc2RwLCBHRlMyX1NCX0FERFIgPj4gc2RwLT5zZF9mc2IyYmJfc2hpZnQsIHNpbGVudCk7CiAJaWYgKGVycm9yKSB7CiAJCWlmICghc2lsZW50KQogCQkJZnNfZXJyKHNkcCwgImNhbid0IHJlYWQgc3VwZXJibG9ja1xuIik7CiAJCXJldHVybiBlcnJvcjsKIAl9CiAKLQllcnJvciA9IGdmczJfY2hlY2tfc2Ioc2RwLCAmc2RwLT5zZF9zYiwgc2lsZW50KTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQogCXNkcC0+c2RfZnNiMmJiX3NoaWZ0ID0gc2RwLT5zZF9zYi5zYl9ic2l6ZV9zaGlmdCAtCiAJCQkgICAgICAgR0ZTMl9CQVNJQ19CTE9DS19TSElGVDsKIAlzZHAtPnNkX2ZzYjJiYiA9IDEgPDwgc2RwLT5zZF9mc2IyYmJfc2hpZnQ7CkBAIC0zNDAsMTQgKzM0MCwxMCBAQAogCS8qICBUcnkgdG8gYXV0b2RldGVjdCAgKi8KIAogCWlmICghcHJvdG9bMF0gfHwgIXRhYmxlWzBdKSB7Ci0JCWVycm9yID0gZ2ZzMl9yZWFkX3N1cGVyKHNkcCwgR0ZTMl9TQl9BRERSID4+IHNkcC0+c2RfZnNiMmJiX3NoaWZ0KTsKKwkJZXJyb3IgPSBnZnMyX3JlYWRfc3VwZXIoc2RwLCBHRlMyX1NCX0FERFIgPj4gc2RwLT5zZF9mc2IyYmJfc2hpZnQsIHNpbGVudCk7CiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKIAotCQllcnJvciA9IGdmczJfY2hlY2tfc2Ioc2RwLCAmc2RwLT5zZF9zYiwgc2lsZW50KTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBvdXQ7Ci0KIAkJaWYgKCFwcm90b1swXSkKIAkJCXByb3RvID0gc2RwLT5zZF9zYi5zYl9sb2NrcHJvdG87CiAJCWlmICghdGFibGVbMF0pCkBAIC0zNjQsNyArMzYwLDYgQEAKIAl3aGlsZSAoKHRhYmxlID0gc3RyY2hyKHRhYmxlLCAnLycpKSkKIAkJKnRhYmxlID0gJ18nOwogCi1vdXQ6CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0xMTE5LDggKzExMTQsNyBAQAogCWlmIChzZHAtPnNkX2FyZ3MuYXJfc3RhdGZzX3F1YW50dW0pIHsKIAkJc2RwLT5zZF90dW5lLmd0X3N0YXRmc19zbG93ID0gMDsKIAkJc2RwLT5zZF90dW5lLmd0X3N0YXRmc19xdWFudHVtID0gc2RwLT5zZF9hcmdzLmFyX3N0YXRmc19xdWFudHVtOwotCX0KLQllbHNlIHsKKwl9IGVsc2UgewogCQlzZHAtPnNkX3R1bmUuZ3Rfc3RhdGZzX3Nsb3cgPSAxOwogCQlzZHAtPnNkX3R1bmUuZ3Rfc3RhdGZzX3F1YW50dW0gPSAzMDsKIAl9CmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19pbm9kZS5jIGIvZnMvZ2ZzMi9vcHNfaW5vZGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDllNDM2YS4uMDAwMDAwMAotLS0gYS9mcy9nZnMyL29wc19pbm9kZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTM0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCi0gKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgotI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+Ci0jaW5jbHVkZSA8bGludXgvcG9zaXhfYWNsLmg+Ci0jaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L2ZpZW1hcC5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLSNpbmNsdWRlICJnZnMyLmgiCi0jaW5jbHVkZSAiaW5jb3JlLmgiCi0jaW5jbHVkZSAiYWNsLmgiCi0jaW5jbHVkZSAiYm1hcC5oIgotI2luY2x1ZGUgImRpci5oIgotI2luY2x1ZGUgInhhdHRyLmgiCi0jaW5jbHVkZSAiZ2xvY2suaCIKLSNpbmNsdWRlICJpbm9kZS5oIgotI2luY2x1ZGUgIm1ldGFfaW8uaCIKLSNpbmNsdWRlICJxdW90YS5oIgotI2luY2x1ZGUgInJncnAuaCIKLSNpbmNsdWRlICJ0cmFucy5oIgotI2luY2x1ZGUgInV0aWwuaCIKLSNpbmNsdWRlICJzdXBlci5oIgotCi0vKioKLSAqIGdmczJfY3JlYXRlIC0gQ3JlYXRlIGEgZmlsZQotICogQGRpcjogVGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0byBjcmVhdGUgdGhlIGZpbGUKLSAqIEBkZW50cnk6IFRoZSBkZW50cnkgb2YgdGhlIG5ldyBmaWxlCi0gKiBAbW9kZTogVGhlIG1vZGUgb2YgdGhlIG5ldyBmaWxlCi0gKgotICogUmV0dXJuczogZXJybm8KLSAqLwotCi1zdGF0aWMgaW50IGdmczJfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCSAgICAgICBpbnQgbW9kZSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCi17Ci0Jc3RydWN0IGdmczJfaW5vZGUgKmRpcCA9IEdGUzJfSShkaXIpOwotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQihkaXIpOwotCXN0cnVjdCBnZnMyX2hvbGRlciBnaHNbMl07Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKLQotCWdmczJfaG9sZGVyX2luaXQoZGlwLT5pX2dsLCAwLCAwLCBnaHMpOwotCi0JZm9yICg7OykgewotCQlpbm9kZSA9IGdmczJfY3JlYXRlaShnaHMsICZkZW50cnktPmRfbmFtZSwgU19JRlJFRyB8IG1vZGUsIDApOwotCQlpZiAoIUlTX0VSUihpbm9kZSkpIHsKLQkJCWdmczJfdHJhbnNfZW5kKHNkcCk7Ci0JCQlpZiAoZGlwLT5pX2FsbG9jLT5hbF9yZ2QpCi0JCQkJZ2ZzMl9pbnBsYWNlX3JlbGVhc2UoZGlwKTsKLQkJCWdmczJfcXVvdGFfdW5sb2NrKGRpcCk7Ci0JCQlnZnMyX2FsbG9jX3B1dChkaXApOwotCQkJZ2ZzMl9nbG9ja19kcV91bmluaXRfbSgyLCBnaHMpOwotCQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci0JCQlicmVhazsKLQkJfSBlbHNlIGlmIChQVFJfRVJSKGlub2RlKSAhPSAtRUVYSVNUIHx8Ci0JCQkgICAobmQgJiYgbmQtPmZsYWdzICYgTE9PS1VQX0VYQ0wpKSB7Ci0JCQlnZnMyX2hvbGRlcl91bmluaXQoZ2hzKTsKLQkJCXJldHVybiBQVFJfRVJSKGlub2RlKTsKLQkJfQotCi0JCWlub2RlID0gZ2ZzMl9sb29rdXBpKGRpciwgJmRlbnRyeS0+ZF9uYW1lLCAwKTsKLQkJaWYgKGlub2RlKSB7Ci0JCQlpZiAoIUlTX0VSUihpbm9kZSkpIHsKLQkJCQlnZnMyX2hvbGRlcl91bmluaXQoZ2hzKTsKLQkJCQlicmVhazsKLQkJCX0gZWxzZSB7Ci0JCQkJZ2ZzMl9ob2xkZXJfdW5pbml0KGdocyk7Ci0JCQkJcmV0dXJuIFBUUl9FUlIoaW5vZGUpOwotCQkJfQotCQl9Ci0JfQotCi0JZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGdmczJfbG9va3VwIC0gTG9vayB1cCBhIGZpbGVuYW1lIGluIGEgZGlyZWN0b3J5IGFuZCByZXR1cm4gaXRzIGlub2RlCi0gKiBAZGlyOiBUaGUgZGlyZWN0b3J5IGlub2RlCi0gKiBAZGVudHJ5OiBUaGUgZGVudHJ5IG9mIHRoZSBuZXcgaW5vZGUKLSAqIEBuZDogcGFzc2VkIGZyb20gTGludXggVkZTLCBpZ25vcmVkIGJ5IHVzCi0gKgotICogQ2FsbGVkIGJ5IHRoZSBWRlMgbGF5ZXIuIExvY2sgZGlyIGFuZCBjYWxsIGdmczJfbG9va3VwaSgpCi0gKgotICogUmV0dXJuczogZXJybm8KLSAqLwotCi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZ2ZzMl9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQkgIHN0cnVjdCBuYW1laWRhdGEgKm5kKQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwotCi0JaW5vZGUgPSBnZnMyX2xvb2t1cGkoZGlyLCAmZGVudHJ5LT5kX25hbWUsIDApOwotCWlmIChpbm9kZSAmJiBJU19FUlIoaW5vZGUpKQotCQlyZXR1cm4gRVJSX0NBU1QoaW5vZGUpOwotCi0JaWYgKGlub2RlKSB7Ci0JCXN0cnVjdCBnZnMyX2dsb2NrICpnbCA9IEdGUzJfSShpbm9kZSktPmlfZ2w7Ci0JCXN0cnVjdCBnZnMyX2hvbGRlciBnaDsKLQkJaW50IGVycm9yOwotCQllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChnbCwgTE1fU1RfU0hBUkVELCBMTV9GTEFHX0FOWSwgJmdoKTsKLQkJaWYgKGVycm9yKSB7Ci0JCQlpcHV0KGlub2RlKTsKLQkJCXJldHVybiBFUlJfUFRSKGVycm9yKTsKLQkJfQotCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmZ2gpOwotCQlyZXR1cm4gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSk7Ci0JfQotCWRfYWRkKGRlbnRyeSwgaW5vZGUpOwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qKgotICogZ2ZzMl9saW5rIC0gTGluayB0byBhIGZpbGUKLSAqIEBvbGRfZGVudHJ5OiBUaGUgaW5vZGUgdG8gbGluawotICogQGRpcjogQWRkIGxpbmsgdG8gdGhpcyBkaXJlY3RvcnkKLSAqIEBkZW50cnk6IFRoZSBuYW1lIG9mIHRoZSBsaW5rCi0gKgotICogTGluayB0aGUgaW5vZGUgaW4gIm9sZF9kZW50cnkiIGludG8gdGhlIGRpcmVjdG9yeSAiZGlyIiB3aXRoIHRoZQotICogbmFtZSBpbiAiZGVudHJ5Ii4KLSAqCi0gKiBSZXR1cm5zOiBlcnJubwotICovCi0KLXN0YXRpYyBpbnQgZ2ZzMl9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLXsKLQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwID0gR0ZTMl9JKGRpcik7Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKGRpcik7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IG9sZF9kZW50cnktPmRfaW5vZGU7Ci0Jc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKLQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZ2hzWzJdOwotCWludCBhbGxvY19yZXF1aXJlZDsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCWdmczJfaG9sZGVyX2luaXQoZGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsIGdocyk7Ci0JZ2ZzMl9ob2xkZXJfaW5pdChpcC0+aV9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCBnaHMgKyAxKTsKLQotCWVycm9yID0gZ2ZzMl9nbG9ja19ucShnaHMpOyAvKiBwYXJlbnQgKi8KLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X3BhcmVudDsKLQotCWVycm9yID0gZ2ZzMl9nbG9ja19ucShnaHMgKyAxKTsgLyogY2hpbGQgKi8KLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2NoaWxkOwotCi0JZXJyb3IgPSBnZnMyX3Blcm1pc3Npb24oZGlyLCBNQVlfV1JJVEUgfCBNQVlfRVhFQywgMCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9ndW5sb2NrOwotCi0JZXJyb3IgPSBnZnMyX2Rpcl9jaGVjayhkaXIsICZkZW50cnktPmRfbmFtZSwgTlVMTCk7Ci0Jc3dpdGNoIChlcnJvcikgewotCWNhc2UgLUVOT0VOVDoKLQkJYnJlYWs7Ci0JY2FzZSAwOgotCQllcnJvciA9IC1FRVhJU1Q7Ci0JZGVmYXVsdDoKLQkJZ290byBvdXRfZ3VubG9jazsKLQl9Ci0KLQllcnJvciA9IC1FSU5WQUw7Ci0JaWYgKCFkaXAtPmlfaW5vZGUuaV9ubGluaykKLQkJZ290byBvdXRfZ3VubG9jazsKLQllcnJvciA9IC1FRkJJRzsKLQlpZiAoZGlwLT5pX2VudHJpZXMgPT0gKHUzMiktMSkKLQkJZ290byBvdXRfZ3VubG9jazsKLQllcnJvciA9IC1FUEVSTTsKLQlpZiAoSVNfSU1NVVRBQkxFKGlub2RlKSB8fCBJU19BUFBFTkQoaW5vZGUpKQotCQlnb3RvIG91dF9ndW5sb2NrOwotCWVycm9yID0gLUVJTlZBTDsKLQlpZiAoIWlwLT5pX2lub2RlLmlfbmxpbmspCi0JCWdvdG8gb3V0X2d1bmxvY2s7Ci0JZXJyb3IgPSAtRU1MSU5LOwotCWlmIChpcC0+aV9pbm9kZS5pX25saW5rID09ICh1MzIpLTEpCi0JCWdvdG8gb3V0X2d1bmxvY2s7Ci0KLQlhbGxvY19yZXF1aXJlZCA9IGVycm9yID0gZ2ZzMl9kaXJhZGRfYWxsb2NfcmVxdWlyZWQoZGlyLCAmZGVudHJ5LT5kX25hbWUpOwotCWlmIChlcnJvciA8IDApCi0JCWdvdG8gb3V0X2d1bmxvY2s7Ci0JZXJyb3IgPSAwOwotCi0JaWYgKGFsbG9jX3JlcXVpcmVkKSB7Ci0JCXN0cnVjdCBnZnMyX2FsbG9jICphbCA9IGdmczJfYWxsb2NfZ2V0KGRpcCk7Ci0JCWlmICghYWwpIHsKLQkJCWVycm9yID0gLUVOT01FTTsKLQkJCWdvdG8gb3V0X2d1bmxvY2s7Ci0JCX0KLQotCQllcnJvciA9IGdmczJfcXVvdGFfbG9ja19jaGVjayhkaXApOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dF9hbGxvYzsKLQotCQlhbC0+YWxfcmVxdWVzdGVkID0gc2RwLT5zZF9tYXhfZGlycmVzOwotCi0JCWVycm9yID0gZ2ZzMl9pbnBsYWNlX3Jlc2VydmUoZGlwKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBvdXRfZ3VubG9ja19xOwotCi0JCWVycm9yID0gZ2ZzMl90cmFuc19iZWdpbihzZHAsIHNkcC0+c2RfbWF4X2RpcnJlcyArCi0JCQkJCSBnZnMyX3JnX2Jsb2NrcyhhbCkgKwotCQkJCQkgMiAqIFJFU19ESU5PREUgKyBSRVNfU1RBVEZTICsKLQkJCQkJIFJFU19RVU9UQSwgMCk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0X2lwcmVzOwotCX0gZWxzZSB7Ci0JCWVycm9yID0gZ2ZzMl90cmFuc19iZWdpbihzZHAsIDIgKiBSRVNfRElOT0RFICsgUkVTX0xFQUYsIDApOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dF9pcHJlczsKLQl9Ci0KLQllcnJvciA9IGdmczJfZGlyX2FkZChkaXIsICZkZW50cnktPmRfbmFtZSwgaXAsIElGMkRUKGlub2RlLT5pX21vZGUpKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2VuZF90cmFuczsKLQotCWVycm9yID0gZ2ZzMl9jaGFuZ2VfbmxpbmsoaXAsICsxKTsKLQotb3V0X2VuZF90cmFuczoKLQlnZnMyX3RyYW5zX2VuZChzZHApOwotb3V0X2lwcmVzOgotCWlmIChhbGxvY19yZXF1aXJlZCkKLQkJZ2ZzMl9pbnBsYWNlX3JlbGVhc2UoZGlwKTsKLW91dF9ndW5sb2NrX3E6Ci0JaWYgKGFsbG9jX3JlcXVpcmVkKQotCQlnZnMyX3F1b3RhX3VubG9jayhkaXApOwotb3V0X2FsbG9jOgotCWlmIChhbGxvY19yZXF1aXJlZCkKLQkJZ2ZzMl9hbGxvY19wdXQoZGlwKTsKLW91dF9ndW5sb2NrOgotCWdmczJfZ2xvY2tfZHEoZ2hzICsgMSk7Ci1vdXRfY2hpbGQ6Ci0JZ2ZzMl9nbG9ja19kcShnaHMpOwotb3V0X3BhcmVudDoKLQlnZnMyX2hvbGRlcl91bmluaXQoZ2hzKTsKLQlnZnMyX2hvbGRlcl91bmluaXQoZ2hzICsgMSk7Ci0JaWYgKCFlcnJvcikgewotCQlpaG9sZChpbm9kZSk7Ci0JCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7Ci0JCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCX0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qCi0gKiBnZnMyX3VubGlua19vayAtIGNoZWNrIHRvIHNlZSB0aGF0IGEgaW5vZGUgaXMgc3RpbGwgaW4gYSBkaXJlY3RvcnkKLSAqIEBkaXA6IHRoZSBkaXJlY3RvcnkKLSAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgZmlsZQotICogQGlwOiB0aGUgaW5vZGUKLSAqCi0gKiBBc3N1bWVzIHRoYXQgdGhlIGxvY2sgb24gKGF0IGxlYXN0KSBAZGlwIGlzIGhlbGQuCi0gKgotICogUmV0dXJuczogMCBpZiB0aGUgcGFyZW50L2NoaWxkIHJlbGF0aW9uc2hpcCBpcyBjb3JyZWN0LCBlcnJubyBpZiBpdCBpc24ndAotICovCi0KLXN0YXRpYyBpbnQgZ2ZzMl91bmxpbmtfb2soc3RydWN0IGdmczJfaW5vZGUgKmRpcCwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCi0JCQkgIGNvbnN0IHN0cnVjdCBnZnMyX2lub2RlICppcCkKLXsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAoSVNfSU1NVVRBQkxFKCZpcC0+aV9pbm9kZSkgfHwgSVNfQVBQRU5EKCZpcC0+aV9pbm9kZSkpCi0JCXJldHVybiAtRVBFUk07Ci0KLQlpZiAoKGRpcC0+aV9pbm9kZS5pX21vZGUgJiBTX0lTVlRYKSAmJgotCSAgICBkaXAtPmlfaW5vZGUuaV91aWQgIT0gY3VycmVudF9mc3VpZCgpICYmCi0JICAgIGlwLT5pX2lub2RlLmlfdWlkICE9IGN1cnJlbnRfZnN1aWQoKSAmJiAhY2FwYWJsZShDQVBfRk9XTkVSKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCWlmIChJU19BUFBFTkQoJmRpcC0+aV9pbm9kZSkpCi0JCXJldHVybiAtRVBFUk07Ci0KLQllcnJvciA9IGdmczJfcGVybWlzc2lvbigmZGlwLT5pX2lub2RlLCBNQVlfV1JJVEUgfCBNQVlfRVhFQywgMCk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQllcnJvciA9IGdmczJfZGlyX2NoZWNrKCZkaXAtPmlfaW5vZGUsIG5hbWUsIGlwKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGdmczJfdW5saW5rIC0gVW5saW5rIGEgZmlsZQotICogQGRpcjogVGhlIGlub2RlIG9mIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgZmlsZSB0byB1bmxpbmsKLSAqIEBkZW50cnk6IFRoZSBmaWxlIGl0c2VsZgotICoKLSAqIFVubGluayBhIGZpbGUuICBDYWxsIGdmczJfdW5saW5raSgpCi0gKgotICogUmV0dXJuczogZXJybm8KLSAqLwotCi1zdGF0aWMgaW50IGdmczJfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCi17Ci0Jc3RydWN0IGdmczJfaW5vZGUgKmRpcCA9IEdGUzJfSShkaXIpOwotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQihkaXIpOwotCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShkZW50cnktPmRfaW5vZGUpOwotCXN0cnVjdCBnZnMyX2hvbGRlciBnaHNbM107Ci0Jc3RydWN0IGdmczJfcmdycGQgKnJnZDsKLQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgcmlfZ2g7Ci0JaW50IGVycm9yOwotCi0JZXJyb3IgPSBnZnMyX3JpbmRleF9ob2xkKHNkcCwgJnJpX2doKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCWdmczJfaG9sZGVyX2luaXQoZGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsIGdocyk7Ci0JZ2ZzMl9ob2xkZXJfaW5pdChpcC0+aV9nbCwgIExNX1NUX0VYQ0xVU0lWRSwgMCwgZ2hzICsgMSk7Ci0KLQlyZ2QgPSBnZnMyX2JsazJyZ3JwZChzZHAsIGlwLT5pX25vX2FkZHIpOwotCWdmczJfaG9sZGVyX2luaXQocmdkLT5yZF9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCBnaHMgKyAyKTsKLQotCi0JZXJyb3IgPSBnZnMyX2dsb2NrX25xKGdocyk7IC8qIHBhcmVudCAqLwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfcGFyZW50OwotCi0JZXJyb3IgPSBnZnMyX2dsb2NrX25xKGdocyArIDEpOyAvKiBjaGlsZCAqLwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfY2hpbGQ7Ci0KLQllcnJvciA9IGdmczJfZ2xvY2tfbnEoZ2hzICsgMik7IC8qIHJncnAgKi8KLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X3JncnA7Ci0KLQllcnJvciA9IGdmczJfdW5saW5rX29rKGRpcCwgJmRlbnRyeS0+ZF9uYW1lLCBpcCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9ndW5sb2NrOwotCi0JZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKHNkcCwgMipSRVNfRElOT0RFICsgUkVTX0xFQUYgKyBSRVNfUkdfQklULCAwKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2d1bmxvY2s7Ci0KLQllcnJvciA9IGdmczJfZGlyX2RlbChkaXAsICZkZW50cnktPmRfbmFtZSk7Ci0gICAgICAgIGlmIChlcnJvcikKLSAgICAgICAgICAgICAgICBnb3RvIG91dF9lbmRfdHJhbnM7Ci0KLQllcnJvciA9IGdmczJfY2hhbmdlX25saW5rKGlwLCAtMSk7Ci0KLW91dF9lbmRfdHJhbnM6Ci0JZ2ZzMl90cmFuc19lbmQoc2RwKTsKLW91dF9ndW5sb2NrOgotCWdmczJfZ2xvY2tfZHEoZ2hzICsgMik7Ci1vdXRfcmdycDoKLQlnZnMyX2hvbGRlcl91bmluaXQoZ2hzICsgMik7Ci0JZ2ZzMl9nbG9ja19kcShnaHMgKyAxKTsKLW91dF9jaGlsZDoKLQlnZnMyX2hvbGRlcl91bmluaXQoZ2hzICsgMSk7Ci0JZ2ZzMl9nbG9ja19kcShnaHMpOwotb3V0X3BhcmVudDoKLQlnZnMyX2hvbGRlcl91bmluaXQoZ2hzKTsKLQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmcmlfZ2gpOwotCXJldHVybiBlcnJvcjsKLX0KLQotLyoqCi0gKiBnZnMyX3N5bWxpbmsgLSBDcmVhdGUgYSBzeW1saW5rCi0gKiBAZGlyOiBUaGUgZGlyZWN0b3J5IHRvIGNyZWF0ZSB0aGUgc3ltbGluayBpbgotICogQGRlbnRyeTogVGhlIGRlbnRyeSB0byBwdXQgdGhlIHN5bWxpbmsgaW4KLSAqIEBzeW1uYW1lOiBUaGUgdGhpbmcgd2hpY2ggdGhlIGxpbmsgcG9pbnRzIHRvCi0gKgotICogUmV0dXJuczogZXJybm8KLSAqLwotCi1zdGF0aWMgaW50IGdmczJfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJY29uc3QgY2hhciAqc3ltbmFtZSkKLXsKLQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwID0gR0ZTMl9JKGRpciksICppcDsKLQlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoZGlyKTsKLQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZ2hzWzJdOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpkaWJoOwotCWludCBzaXplOwotCWludCBlcnJvcjsKLQotCS8qIE11c3QgYmUgc3R1ZmZlZCB3aXRoIGEgbnVsbCB0ZXJtaW5hdG9yIGZvciBnZnMyX2ZvbGxvd19saW5rKCkgKi8KLQlzaXplID0gc3RybGVuKHN5bW5hbWUpOwotCWlmIChzaXplID4gc2RwLT5zZF9zYi5zYl9ic2l6ZSAtIHNpemVvZihzdHJ1Y3QgZ2ZzMl9kaW5vZGUpIC0gMSkKLQkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7Ci0KLQlnZnMyX2hvbGRlcl9pbml0KGRpcC0+aV9nbCwgMCwgMCwgZ2hzKTsKLQotCWlub2RlID0gZ2ZzMl9jcmVhdGVpKGdocywgJmRlbnRyeS0+ZF9uYW1lLCBTX0lGTE5LIHwgU19JUldYVUdPLCAwKTsKLQlpZiAoSVNfRVJSKGlub2RlKSkgewotCQlnZnMyX2hvbGRlcl91bmluaXQoZ2hzKTsKLQkJcmV0dXJuIFBUUl9FUlIoaW5vZGUpOwotCX0KLQotCWlwID0gZ2hzWzFdLmdoX2dsLT5nbF9vYmplY3Q7Ci0KLQlpX3NpemVfd3JpdGUoaW5vZGUsIHNpemUpOwotCi0JZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGlwLCAmZGliaCk7Ci0KLQlpZiAoIWdmczJfYXNzZXJ0X3dpdGhkcmF3KHNkcCwgIWVycm9yKSkgewotCQlnZnMyX2Rpbm9kZV9vdXQoaXAsIGRpYmgtPmJfZGF0YSk7Ci0JCW1lbWNweShkaWJoLT5iX2RhdGEgKyBzaXplb2Yoc3RydWN0IGdmczJfZGlub2RlKSwgc3ltbmFtZSwKLQkJICAgICAgIHNpemUpOwotCQlicmVsc2UoZGliaCk7Ci0JfQotCi0JZ2ZzMl90cmFuc19lbmQoc2RwKTsKLQlpZiAoZGlwLT5pX2FsbG9jLT5hbF9yZ2QpCi0JCWdmczJfaW5wbGFjZV9yZWxlYXNlKGRpcCk7Ci0JZ2ZzMl9xdW90YV91bmxvY2soZGlwKTsKLQlnZnMyX2FsbG9jX3B1dChkaXApOwotCi0JZ2ZzMl9nbG9ja19kcV91bmluaXRfbSgyLCBnaHMpOwotCi0JZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKLQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGdmczJfbWtkaXIgLSBNYWtlIGEgZGlyZWN0b3J5Ci0gKiBAZGlyOiBUaGUgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGUgbmV3IG9uZQotICogQGRlbnRyeTogVGhlIGRlbnRyeSBvZiB0aGUgbmV3IGRpcmVjdG9yeQotICogQG1vZGU6IFRoZSBtb2RlIG9mIHRoZSBuZXcgZGlyZWN0b3J5Ci0gKgotICogUmV0dXJuczogZXJybm8KLSAqLwotCi1zdGF0aWMgaW50IGdmczJfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUpCi17Ci0Jc3RydWN0IGdmczJfaW5vZGUgKmRpcCA9IEdGUzJfSShkaXIpLCAqaXA7Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKGRpcik7Ci0Jc3RydWN0IGdmczJfaG9sZGVyIGdoc1syXTsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqZGliaDsKLQlpbnQgZXJyb3I7Ci0KLQlnZnMyX2hvbGRlcl9pbml0KGRpcC0+aV9nbCwgMCwgMCwgZ2hzKTsKLQotCWlub2RlID0gZ2ZzMl9jcmVhdGVpKGdocywgJmRlbnRyeS0+ZF9uYW1lLCBTX0lGRElSIHwgbW9kZSwgMCk7Ci0JaWYgKElTX0VSUihpbm9kZSkpIHsKLQkJZ2ZzMl9ob2xkZXJfdW5pbml0KGdocyk7Ci0JCXJldHVybiBQVFJfRVJSKGlub2RlKTsKLQl9Ci0KLQlpcCA9IGdoc1sxXS5naF9nbC0+Z2xfb2JqZWN0OwotCi0JaXAtPmlfaW5vZGUuaV9ubGluayA9IDI7Ci0JaV9zaXplX3dyaXRlKGlub2RlLCBzZHAtPnNkX3NiLnNiX2JzaXplIC0gc2l6ZW9mKHN0cnVjdCBnZnMyX2Rpbm9kZSkpOwotCWlwLT5pX2Rpc2tmbGFncyB8PSBHRlMyX0RJRl9KREFUQTsKLQlpcC0+aV9lbnRyaWVzID0gMjsKLQotCWVycm9yID0gZ2ZzMl9tZXRhX2lub2RlX2J1ZmZlcihpcCwgJmRpYmgpOwotCi0JaWYgKCFnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsICFlcnJvcikpIHsKLQkJc3RydWN0IGdmczJfZGlub2RlICpkaSA9IChzdHJ1Y3QgZ2ZzMl9kaW5vZGUgKilkaWJoLT5iX2RhdGE7Ci0JCXN0cnVjdCBnZnMyX2RpcmVudCAqZGVudCA9IChzdHJ1Y3QgZ2ZzMl9kaXJlbnQgKikoZGkrMSk7Ci0KLQkJZ2ZzMl90cmFuc19hZGRfYmgoaXAtPmlfZ2wsIGRpYmgsIDEpOwotCQlnZnMyX3FzdHIyZGlyZW50KCZnZnMyX3Fkb3QsIEdGUzJfRElSRU5UX1NJWkUoZ2ZzMl9xZG90LmxlbiksIGRlbnQpOwotCQlkZW50LT5kZV9pbnVtID0gZGktPmRpX251bTsgLyogYWxyZWFkeSBHRlMyIGVuZGlhbiAqLwotCQlkZW50LT5kZV90eXBlID0gY3B1X3RvX2JlMTYoRFRfRElSKTsKLQkJZGktPmRpX2VudHJpZXMgPSBjcHVfdG9fYmUzMigxKTsKLQotCQlkZW50ID0gKHN0cnVjdCBnZnMyX2RpcmVudCAqKSgoY2hhciopZGVudCArIEdGUzJfRElSRU5UX1NJWkUoMSkpOwotCQlnZnMyX3FzdHIyZGlyZW50KCZnZnMyX3Fkb3Rkb3QsIGRpYmgtPmJfc2l6ZSAtIEdGUzJfRElSRU5UX1NJWkUoMSkgLSBzaXplb2Yoc3RydWN0IGdmczJfZGlub2RlKSwgZGVudCk7Ci0KLQkJZ2ZzMl9pbnVtX291dChkaXAsIGRlbnQpOwotCQlkZW50LT5kZV90eXBlID0gY3B1X3RvX2JlMTYoRFRfRElSKTsKLQotCQlnZnMyX2Rpbm9kZV9vdXQoaXAsIGRpKTsKLQotCQlicmVsc2UoZGliaCk7Ci0JfQotCi0JZXJyb3IgPSBnZnMyX2NoYW5nZV9ubGluayhkaXAsICsxKTsKLQlnZnMyX2Fzc2VydF93aXRoZHJhdyhzZHAsICFlcnJvcik7IC8qIGRpcCBhbHJlYWR5IHBpbm5lZCAqLwotCi0JZ2ZzMl90cmFuc19lbmQoc2RwKTsKLQlpZiAoZGlwLT5pX2FsbG9jLT5hbF9yZ2QpCi0JCWdmczJfaW5wbGFjZV9yZWxlYXNlKGRpcCk7Ci0JZ2ZzMl9xdW90YV91bmxvY2soZGlwKTsKLQlnZnMyX2FsbG9jX3B1dChkaXApOwotCi0JZ2ZzMl9nbG9ja19kcV91bmluaXRfbSgyLCBnaHMpOwotCi0JZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKLQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGdmczJfcm1kaXJpIC0gUmVtb3ZlIGEgZGlyZWN0b3J5Ci0gKiBAZGlwOiBUaGUgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGUgZGlyZWN0b3J5IHRvIGJlIHJlbW92ZWQKLSAqIEBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRvIGJlIHJlbW92ZWQKLSAqIEBpcDogVGhlIEdGUzIgaW5vZGUgb2YgdGhlIGRpcmVjdG9yeSB0byBiZSByZW1vdmVkCi0gKgotICogQXNzdW1lcyBHbG9ja3Mgb24gZGlwIGFuZCBpcCBhcmUgaGVsZAotICoKLSAqIFJldHVybnM6IGVycm5vCi0gKi8KLQotc3RhdGljIGludCBnZnMyX3JtZGlyaShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwKLQkJICAgICAgIHN0cnVjdCBnZnMyX2lub2RlICppcCkKLXsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAoaXAtPmlfZW50cmllcyAhPSAyKSB7Ci0JCWlmIChnZnMyX2NvbnNpc3RfaW5vZGUoaXApKQotCQkJZ2ZzMl9kaW5vZGVfcHJpbnQoaXApOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQllcnJvciA9IGdmczJfZGlyX2RlbChkaXAsIG5hbWUpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JZXJyb3IgPSBnZnMyX2NoYW5nZV9ubGluayhkaXAsIC0xKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCWVycm9yID0gZ2ZzMl9kaXJfZGVsKGlwLCAmZ2ZzMl9xZG90KTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCWVycm9yID0gZ2ZzMl9kaXJfZGVsKGlwLCAmZ2ZzMl9xZG90ZG90KTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCS8qIEl0IGxvb2tzIG9kZCwgYnV0IGl0IHJlYWxseSBzaG91bGQgYmUgZG9uZSB0d2ljZSAqLwotCWVycm9yID0gZ2ZzMl9jaGFuZ2VfbmxpbmsoaXAsIC0xKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCWVycm9yID0gZ2ZzMl9jaGFuZ2VfbmxpbmsoaXAsIC0xKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCXJldHVybiBlcnJvcjsKLX0KLQotLyoqCi0gKiBnZnMyX3JtZGlyIC0gUmVtb3ZlIGEgZGlyZWN0b3J5Ci0gKiBAZGlyOiBUaGUgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGUgZGlyZWN0b3J5IHRvIGJlIHJlbW92ZWQKLSAqIEBkZW50cnk6IFRoZSBkZW50cnkgb2YgdGhlIGRpcmVjdG9yeSB0byByZW1vdmUKLSAqCi0gKiBSZW1vdmUgYSBkaXJlY3RvcnkuIENhbGwgZ2ZzMl9ybWRpcmkoKQotICoKLSAqIFJldHVybnM6IGVycm5vCi0gKi8KLQotc3RhdGljIGludCBnZnMyX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCi17Ci0Jc3RydWN0IGdmczJfaW5vZGUgKmRpcCA9IEdGUzJfSShkaXIpOwotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQihkaXIpOwotCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShkZW50cnktPmRfaW5vZGUpOwotCXN0cnVjdCBnZnMyX2hvbGRlciBnaHNbM107Ci0Jc3RydWN0IGdmczJfcmdycGQgKnJnZDsKLQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgcmlfZ2g7Ci0JaW50IGVycm9yOwotCi0JZXJyb3IgPSBnZnMyX3JpbmRleF9ob2xkKHNkcCwgJnJpX2doKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQlnZnMyX2hvbGRlcl9pbml0KGRpcC0+aV9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCBnaHMpOwotCWdmczJfaG9sZGVyX2luaXQoaXAtPmlfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwgZ2hzICsgMSk7Ci0KLQlyZ2QgPSBnZnMyX2JsazJyZ3JwZChzZHAsIGlwLT5pX25vX2FkZHIpOwotCWdmczJfaG9sZGVyX2luaXQocmdkLT5yZF9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCBnaHMgKyAyKTsKLQotCWVycm9yID0gZ2ZzMl9nbG9ja19ucShnaHMpOyAvKiBwYXJlbnQgKi8KLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X3BhcmVudDsKLQotCWVycm9yID0gZ2ZzMl9nbG9ja19ucShnaHMgKyAxKTsgLyogY2hpbGQgKi8KLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2NoaWxkOwotCi0JZXJyb3IgPSBnZnMyX2dsb2NrX25xKGdocyArIDIpOyAvKiByZ3JwICovCi0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9yZ3JwOwotCi0JZXJyb3IgPSBnZnMyX3VubGlua19vayhkaXAsICZkZW50cnktPmRfbmFtZSwgaXApOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfZ3VubG9jazsKLQotCWlmIChpcC0+aV9lbnRyaWVzIDwgMikgewotCQlpZiAoZ2ZzMl9jb25zaXN0X2lub2RlKGlwKSkKLQkJCWdmczJfZGlub2RlX3ByaW50KGlwKTsKLQkJZXJyb3IgPSAtRUlPOwotCQlnb3RvIG91dF9ndW5sb2NrOwotCX0KLQlpZiAoaXAtPmlfZW50cmllcyA+IDIpIHsKLQkJZXJyb3IgPSAtRU5PVEVNUFRZOwotCQlnb3RvIG91dF9ndW5sb2NrOwotCX0KLQotCWVycm9yID0gZ2ZzMl90cmFuc19iZWdpbihzZHAsIDIgKiBSRVNfRElOT0RFICsgMyAqIFJFU19MRUFGICsgUkVTX1JHX0JJVCwgMCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9ndW5sb2NrOwotCi0JZXJyb3IgPSBnZnMyX3JtZGlyaShkaXAsICZkZW50cnktPmRfbmFtZSwgaXApOwotCi0JZ2ZzMl90cmFuc19lbmQoc2RwKTsKLQotb3V0X2d1bmxvY2s6Ci0JZ2ZzMl9nbG9ja19kcShnaHMgKyAyKTsKLW91dF9yZ3JwOgotCWdmczJfaG9sZGVyX3VuaW5pdChnaHMgKyAyKTsKLQlnZnMyX2dsb2NrX2RxKGdocyArIDEpOwotb3V0X2NoaWxkOgotCWdmczJfaG9sZGVyX3VuaW5pdChnaHMgKyAxKTsKLQlnZnMyX2dsb2NrX2RxKGdocyk7Ci1vdXRfcGFyZW50OgotCWdmczJfaG9sZGVyX3VuaW5pdChnaHMpOwotCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZyaV9naCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi0vKioKLSAqIGdmczJfbWtub2QgLSBNYWtlIGEgc3BlY2lhbCBmaWxlCi0gKiBAZGlyOiBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBzcGVjaWFsIGZpbGUgd2lsbCByZXNpZGUKLSAqIEBkZW50cnk6IFRoZSBkZW50cnkgb2YgdGhlIHNwZWNpYWwgZmlsZQotICogQG1vZGU6IFRoZSBtb2RlIG9mIHRoZSBzcGVjaWFsIGZpbGUKLSAqIEByZGV2OiBUaGUgZGV2aWNlIHNwZWNpZmljYXRpb24gb2YgdGhlIHNwZWNpYWwgZmlsZQotICoKLSAqLwotCi1zdGF0aWMgaW50IGdmczJfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsCi0JCSAgICAgIGRldl90IGRldikKLXsKLQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwID0gR0ZTMl9JKGRpcik7Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKGRpcik7Ci0Jc3RydWN0IGdmczJfaG9sZGVyIGdoc1syXTsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCi0JZ2ZzMl9ob2xkZXJfaW5pdChkaXAtPmlfZ2wsIDAsIDAsIGdocyk7Ci0KLQlpbm9kZSA9IGdmczJfY3JlYXRlaShnaHMsICZkZW50cnktPmRfbmFtZSwgbW9kZSwgZGV2KTsKLQlpZiAoSVNfRVJSKGlub2RlKSkgewotCQlnZnMyX2hvbGRlcl91bmluaXQoZ2hzKTsKLQkJcmV0dXJuIFBUUl9FUlIoaW5vZGUpOwotCX0KLQotCWdmczJfdHJhbnNfZW5kKHNkcCk7Ci0JaWYgKGRpcC0+aV9hbGxvYy0+YWxfcmdkKQotCQlnZnMyX2lucGxhY2VfcmVsZWFzZShkaXApOwotCWdmczJfcXVvdGFfdW5sb2NrKGRpcCk7Ci0JZ2ZzMl9hbGxvY19wdXQoZGlwKTsKLQotCWdmczJfZ2xvY2tfZHFfdW5pbml0X20oMiwgZ2hzKTsKLQotCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7Ci0JbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIGdmczJfb2tfdG9fbW92ZSAtIGNoZWNrIGlmIGl0J3Mgb2sgdG8gbW92ZSBhIGRpcmVjdG9yeSB0byBhbm90aGVyIGRpcmVjdG9yeQotICogQHRoaXM6IG1vdmUgdGhpcwotICogQHRvOiB0byBoZXJlCi0gKgotICogRm9sbG93IEB0byBiYWNrIHRvIHRoZSByb290IGFuZCBtYWtlIHN1cmUgd2UgZG9uJ3QgZW5jb3VudGVyIEB0aGlzCi0gKiBBc3N1bWVzIHdlIGFscmVhZHkgaG9sZCB0aGUgcmVuYW1lIGxvY2suCi0gKgotICogUmV0dXJuczogZXJybm8KLSAqLwotCi1zdGF0aWMgaW50IGdmczJfb2tfdG9fbW92ZShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqdGhpcywgc3RydWN0IGdmczJfaW5vZGUgKnRvKQotewotCXN0cnVjdCBpbm9kZSAqZGlyID0gJnRvLT5pX2lub2RlOwotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItPmlfc2I7Ci0Jc3RydWN0IGlub2RlICp0bXA7Ci0JaW50IGVycm9yID0gMDsKLQotCWlncmFiKGRpcik7Ci0KLQlmb3IgKDs7KSB7Ci0JCWlmIChkaXIgPT0gJnRoaXMtPmlfaW5vZGUpIHsKLQkJCWVycm9yID0gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChkaXIgPT0gc2ItPnNfcm9vdC0+ZF9pbm9kZSkgewotCQkJZXJyb3IgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQotCQl0bXAgPSBnZnMyX2xvb2t1cGkoZGlyLCAmZ2ZzMl9xZG90ZG90LCAxKTsKLQkJaWYgKElTX0VSUih0bXApKSB7Ci0JCQllcnJvciA9IFBUUl9FUlIodG1wKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaXB1dChkaXIpOwotCQlkaXIgPSB0bXA7Ci0JfQotCi0JaXB1dChkaXIpOwotCi0JcmV0dXJuIGVycm9yOwotfQotCi0vKioKLSAqIGdmczJfcmVuYW1lIC0gUmVuYW1lIGEgZmlsZQotICogQG9kaXI6IFBhcmVudCBkaXJlY3Rvcnkgb2Ygb2xkIGZpbGUgbmFtZQotICogQG9kZW50cnk6IFRoZSBvbGQgZGVudHJ5IG9mIHRoZSBmaWxlCi0gKiBAbmRpcjogUGFyZW50IGRpcmVjdG9yeSBvZiBuZXcgZmlsZSBuYW1lCi0gKiBAbmRlbnRyeTogVGhlIG5ldyBkZW50cnkgb2YgdGhlIGZpbGUKLSAqCi0gKiBSZXR1cm5zOiBlcnJubwotICovCi0KLXN0YXRpYyBpbnQgZ2ZzMl9yZW5hbWUoc3RydWN0IGlub2RlICpvZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvZGVudHJ5LAotCQkgICAgICAgc3RydWN0IGlub2RlICpuZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZGVudHJ5KQotewotCXN0cnVjdCBnZnMyX2lub2RlICpvZGlwID0gR0ZTMl9JKG9kaXIpOwotCXN0cnVjdCBnZnMyX2lub2RlICpuZGlwID0gR0ZTMl9JKG5kaXIpOwotCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShvZGVudHJ5LT5kX2lub2RlKTsKLQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqbmlwID0gTlVMTDsKLQlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0Iob2Rpcik7Ci0Jc3RydWN0IGdmczJfaG9sZGVyIGdoc1s1XSwgcl9naCA9IHsgLmdoX2dsID0gTlVMTCwgfSwgcmlfZ2g7Ci0Jc3RydWN0IGdmczJfcmdycGQgKm5yZ2Q7Ci0JdW5zaWduZWQgaW50IG51bV9naDsKLQlpbnQgZGlyX3JlbmFtZSA9IDA7Ci0JaW50IGFsbG9jX3JlcXVpcmVkID0gMDsKLQl1bnNpZ25lZCBpbnQgeDsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAobmRlbnRyeS0+ZF9pbm9kZSkgewotCQluaXAgPSBHRlMyX0kobmRlbnRyeS0+ZF9pbm9kZSk7Ci0JCWlmIChpcCA9PSBuaXApCi0JCQlyZXR1cm4gMDsKLQl9Ci0KLQllcnJvciA9IGdmczJfcmluZGV4X2hvbGQoc2RwLCAmcmlfZ2gpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JaWYgKG9kaXAgIT0gbmRpcCkgewotCQllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChzZHAtPnNkX3JlbmFtZV9nbCwgTE1fU1RfRVhDTFVTSVZFLAotCQkJCQkgICAwLCAmcl9naCk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0OwotCi0JCWlmIChTX0lTRElSKGlwLT5pX2lub2RlLmlfbW9kZSkpIHsKLQkJCWRpcl9yZW5hbWUgPSAxOwotCQkJLyogZG9uJ3QgbW92ZSBhIGRpcmN0b3J5IGludG8gaXQncyBzdWJkaXIgKi8KLQkJCWVycm9yID0gZ2ZzMl9va190b19tb3ZlKGlwLCBuZGlwKTsKLQkJCWlmIChlcnJvcikKLQkJCQlnb3RvIG91dF9ndW5sb2NrX3I7Ci0JCX0KLQl9Ci0KLQludW1fZ2ggPSAxOwotCWdmczJfaG9sZGVyX2luaXQob2RpcC0+aV9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCBnaHMpOwotCWlmIChvZGlwICE9IG5kaXApIHsKLQkJZ2ZzMl9ob2xkZXJfaW5pdChuZGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsIGdocyArIG51bV9naCk7Ci0JCW51bV9naCsrOwotCX0KLQlnZnMyX2hvbGRlcl9pbml0KGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsIGdocyArIG51bV9naCk7Ci0JbnVtX2doKys7Ci0KLQlpZiAobmlwKSB7Ci0JCWdmczJfaG9sZGVyX2luaXQobmlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsIGdocyArIG51bV9naCk7Ci0JCW51bV9naCsrOwotCQkvKiBncmFiIHRoZSByZXNvdXJjZSBsb2NrIGZvciB1bmxpbmsgZmxhZyB0d2lkZGxpbmcgCi0JCSAqIHRoaXMgaXMgdGhlIGNhc2Ugb2YgdGhlIHRhcmdldCBmaWxlIGFscmVhZHkgZXhpc3RpbmcKLQkJICogc28gd2UgdW5saW5rIGJlZm9yZSBkb2luZyB0aGUgcmVuYW1lCi0JCSAqLwotCQlucmdkID0gZ2ZzMl9ibGsycmdycGQoc2RwLCBuaXAtPmlfbm9fYWRkcik7Ci0JCWlmIChucmdkKQotCQkJZ2ZzMl9ob2xkZXJfaW5pdChucmdkLT5yZF9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCBnaHMgKyBudW1fZ2grKyk7Ci0JfQotCi0JZm9yICh4ID0gMDsgeCA8IG51bV9naDsgeCsrKSB7Ci0JCWVycm9yID0gZ2ZzMl9nbG9ja19ucShnaHMgKyB4KTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBvdXRfZ3VubG9jazsKLQl9Ci0KLQkvKiBDaGVjayBvdXQgdGhlIG9sZCBkaXJlY3RvcnkgKi8KLQotCWVycm9yID0gZ2ZzMl91bmxpbmtfb2sob2RpcCwgJm9kZW50cnktPmRfbmFtZSwgaXApOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfZ3VubG9jazsKLQotCS8qIENoZWNrIG91dCB0aGUgbmV3IGRpcmVjdG9yeSAqLwotCi0JaWYgKG5pcCkgewotCQllcnJvciA9IGdmczJfdW5saW5rX29rKG5kaXAsICZuZGVudHJ5LT5kX25hbWUsIG5pcCk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0X2d1bmxvY2s7Ci0KLQkJaWYgKFNfSVNESVIobmlwLT5pX2lub2RlLmlfbW9kZSkpIHsKLQkJCWlmIChuaXAtPmlfZW50cmllcyA8IDIpIHsKLQkJCQlpZiAoZ2ZzMl9jb25zaXN0X2lub2RlKG5pcCkpCi0JCQkJCWdmczJfZGlub2RlX3ByaW50KG5pcCk7Ci0JCQkJZXJyb3IgPSAtRUlPOwotCQkJCWdvdG8gb3V0X2d1bmxvY2s7Ci0JCQl9Ci0JCQlpZiAobmlwLT5pX2VudHJpZXMgPiAyKSB7Ci0JCQkJZXJyb3IgPSAtRU5PVEVNUFRZOwotCQkJCWdvdG8gb3V0X2d1bmxvY2s7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQllcnJvciA9IGdmczJfcGVybWlzc2lvbihuZGlyLCBNQVlfV1JJVEUgfCBNQVlfRVhFQywgMCk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0X2d1bmxvY2s7Ci0KLQkJZXJyb3IgPSBnZnMyX2Rpcl9jaGVjayhuZGlyLCAmbmRlbnRyeS0+ZF9uYW1lLCBOVUxMKTsKLQkJc3dpdGNoIChlcnJvcikgewotCQljYXNlIC1FTk9FTlQ6Ci0JCQllcnJvciA9IDA7Ci0JCQlicmVhazsKLQkJY2FzZSAwOgotCQkJZXJyb3IgPSAtRUVYSVNUOwotCQlkZWZhdWx0OgotCQkJZ290byBvdXRfZ3VubG9jazsKLQkJfTsKLQotCQlpZiAob2RpcCAhPSBuZGlwKSB7Ci0JCQlpZiAoIW5kaXAtPmlfaW5vZGUuaV9ubGluaykgewotCQkJCWVycm9yID0gLUVJTlZBTDsKLQkJCQlnb3RvIG91dF9ndW5sb2NrOwotCQkJfQotCQkJaWYgKG5kaXAtPmlfZW50cmllcyA9PSAodTMyKS0xKSB7Ci0JCQkJZXJyb3IgPSAtRUZCSUc7Ci0JCQkJZ290byBvdXRfZ3VubG9jazsKLQkJCX0KLQkJCWlmIChTX0lTRElSKGlwLT5pX2lub2RlLmlfbW9kZSkgJiYKLQkJCSAgICBuZGlwLT5pX2lub2RlLmlfbmxpbmsgPT0gKHUzMiktMSkgewotCQkJCWVycm9yID0gLUVNTElOSzsKLQkJCQlnb3RvIG91dF9ndW5sb2NrOwotCQkJfQotCQl9Ci0JfQotCi0JLyogQ2hlY2sgb3V0IHRoZSBkaXIgdG8gYmUgcmVuYW1lZCAqLwotCi0JaWYgKGRpcl9yZW5hbWUpIHsKLQkJZXJyb3IgPSBnZnMyX3Blcm1pc3Npb24ob2RlbnRyeS0+ZF9pbm9kZSwgTUFZX1dSSVRFLCAwKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBvdXRfZ3VubG9jazsKLQl9Ci0KLQlpZiAobmlwID09IE5VTEwpCi0JCWFsbG9jX3JlcXVpcmVkID0gZ2ZzMl9kaXJhZGRfYWxsb2NfcmVxdWlyZWQobmRpciwgJm5kZW50cnktPmRfbmFtZSk7Ci0JZXJyb3IgPSBhbGxvY19yZXF1aXJlZDsKLQlpZiAoZXJyb3IgPCAwKQotCQlnb3RvIG91dF9ndW5sb2NrOwotCWVycm9yID0gMDsKLQotCWlmIChhbGxvY19yZXF1aXJlZCkgewotCQlzdHJ1Y3QgZ2ZzMl9hbGxvYyAqYWwgPSBnZnMyX2FsbG9jX2dldChuZGlwKTsKLQkJaWYgKCFhbCkgewotCQkJZXJyb3IgPSAtRU5PTUVNOwotCQkJZ290byBvdXRfZ3VubG9jazsKLQkJfQotCi0JCWVycm9yID0gZ2ZzMl9xdW90YV9sb2NrX2NoZWNrKG5kaXApOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dF9hbGxvYzsKLQotCQlhbC0+YWxfcmVxdWVzdGVkID0gc2RwLT5zZF9tYXhfZGlycmVzOwotCi0JCWVycm9yID0gZ2ZzMl9pbnBsYWNlX3Jlc2VydmVfcmkobmRpcCk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0X2d1bmxvY2tfcTsKLQotCQllcnJvciA9IGdmczJfdHJhbnNfYmVnaW4oc2RwLCBzZHAtPnNkX21heF9kaXJyZXMgKwotCQkJCQkgZ2ZzMl9yZ19ibG9ja3MoYWwpICsKLQkJCQkJIDQgKiBSRVNfRElOT0RFICsgNCAqIFJFU19MRUFGICsKLQkJCQkJIFJFU19TVEFURlMgKyBSRVNfUVVPVEEgKyA0LCAwKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBvdXRfaXByZXNlcnY7Ci0JfSBlbHNlIHsKLQkJZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKHNkcCwgNCAqIFJFU19ESU5PREUgKwotCQkJCQkgNSAqIFJFU19MRUFGICsgNCwgMCk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0X2d1bmxvY2s7Ci0JfQotCi0JLyogUmVtb3ZlIHRoZSB0YXJnZXQgZmlsZSwgaWYgaXQgZXhpc3RzICovCi0KLQlpZiAobmlwKSB7Ci0JCWlmIChTX0lTRElSKG5pcC0+aV9pbm9kZS5pX21vZGUpKQotCQkJZXJyb3IgPSBnZnMyX3JtZGlyaShuZGlwLCAmbmRlbnRyeS0+ZF9uYW1lLCBuaXApOwotCQllbHNlIHsKLQkJCWVycm9yID0gZ2ZzMl9kaXJfZGVsKG5kaXAsICZuZGVudHJ5LT5kX25hbWUpOwotCQkJaWYgKGVycm9yKQotCQkJCWdvdG8gb3V0X2VuZF90cmFuczsKLQkJCWVycm9yID0gZ2ZzMl9jaGFuZ2VfbmxpbmsobmlwLCAtMSk7Ci0JCX0KLQkJaWYgKGVycm9yKQotCQkJZ290byBvdXRfZW5kX3RyYW5zOwotCX0KLQotCWlmIChkaXJfcmVuYW1lKSB7Ci0JCWVycm9yID0gZ2ZzMl9jaGFuZ2VfbmxpbmsobmRpcCwgKzEpOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dF9lbmRfdHJhbnM7Ci0JCWVycm9yID0gZ2ZzMl9jaGFuZ2Vfbmxpbmsob2RpcCwgLTEpOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dF9lbmRfdHJhbnM7Ci0KLQkJZXJyb3IgPSBnZnMyX2Rpcl9tdmlubyhpcCwgJmdmczJfcWRvdGRvdCwgbmRpcCwgRFRfRElSKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBvdXRfZW5kX3RyYW5zOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCBidWZmZXJfaGVhZCAqZGliaDsKLQkJZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGlwLCAmZGliaCk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0X2VuZF90cmFuczsKLQkJaXAtPmlfaW5vZGUuaV9jdGltZSA9IENVUlJFTlRfVElNRTsKLQkJZ2ZzMl90cmFuc19hZGRfYmgoaXAtPmlfZ2wsIGRpYmgsIDEpOwotCQlnZnMyX2Rpbm9kZV9vdXQoaXAsIGRpYmgtPmJfZGF0YSk7Ci0JCWJyZWxzZShkaWJoKTsKLQl9Ci0KLQllcnJvciA9IGdmczJfZGlyX2RlbChvZGlwLCAmb2RlbnRyeS0+ZF9uYW1lKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2VuZF90cmFuczsKLQotCWVycm9yID0gZ2ZzMl9kaXJfYWRkKG5kaXIsICZuZGVudHJ5LT5kX25hbWUsIGlwLCBJRjJEVChpcC0+aV9pbm9kZS5pX21vZGUpKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2VuZF90cmFuczsKLQotb3V0X2VuZF90cmFuczoKLQlnZnMyX3RyYW5zX2VuZChzZHApOwotb3V0X2lwcmVzZXJ2OgotCWlmIChhbGxvY19yZXF1aXJlZCkKLQkJZ2ZzMl9pbnBsYWNlX3JlbGVhc2UobmRpcCk7Ci1vdXRfZ3VubG9ja19xOgotCWlmIChhbGxvY19yZXF1aXJlZCkKLQkJZ2ZzMl9xdW90YV91bmxvY2sobmRpcCk7Ci1vdXRfYWxsb2M6Ci0JaWYgKGFsbG9jX3JlcXVpcmVkKQotCQlnZnMyX2FsbG9jX3B1dChuZGlwKTsKLW91dF9ndW5sb2NrOgotCXdoaWxlICh4LS0pIHsKLQkJZ2ZzMl9nbG9ja19kcShnaHMgKyB4KTsKLQkJZ2ZzMl9ob2xkZXJfdW5pbml0KGdocyArIHgpOwotCX0KLW91dF9ndW5sb2NrX3I6Ci0JaWYgKHJfZ2guZ2hfZ2wpCi0JCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZyX2doKTsKLW91dDoKLQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmcmlfZ2gpOwotCXJldHVybiBlcnJvcjsKLX0KLQotLyoqCi0gKiBnZnMyX2ZvbGxvd19saW5rIC0gRm9sbG93IGEgc3ltYm9saWMgbGluawotICogQGRlbnRyeTogVGhlIGRlbnRyeSBvZiB0aGUgbGluawotICogQG5kOiBEYXRhIHRoYXQgd2UgcGFzcyB0byB2ZnNfZm9sbG93X2xpbmsoKQotICoKLSAqIFRoaXMgY2FuIGhhbmRsZSBzeW1saW5rcyBvZiBhbnkgc2l6ZS4KLSAqCi0gKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3Mgb3IgZXJyb3IgY29kZQotICovCi0KLXN0YXRpYyB2b2lkICpnZnMyX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCi17Ci0Jc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGRlbnRyeS0+ZF9pbm9kZSk7Ci0Jc3RydWN0IGdmczJfaG9sZGVyIGlfZ2g7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpkaWJoOwotCXVuc2lnbmVkIGludCB4LCBzaXplOwotCWNoYXIgKmJ1ZjsKLQlpbnQgZXJyb3I7Ci0KLQlnZnMyX2hvbGRlcl9pbml0KGlwLT5pX2dsLCBMTV9TVF9TSEFSRUQsIDAsICZpX2doKTsKLQllcnJvciA9IGdmczJfZ2xvY2tfbnEoJmlfZ2gpOwotCWlmIChlcnJvcikgewotCQlnZnMyX2hvbGRlcl91bmluaXQoJmlfZ2gpOwotCQluZF9zZXRfbGluayhuZCwgRVJSX1BUUihlcnJvcikpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlzaXplID0gKHVuc2lnbmVkIGludClpX3NpemVfcmVhZCgmaXAtPmlfaW5vZGUpOwotCWlmIChzaXplID09IDApIHsKLQkJZ2ZzMl9jb25zaXN0X2lub2RlKGlwKTsKLQkJYnVmID0gRVJSX1BUUigtRUlPKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGlwLCAmZGliaCk7Ci0JaWYgKGVycm9yKSB7Ci0JCWJ1ZiA9IEVSUl9QVFIoZXJyb3IpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQl4ID0gc2l6ZSArIDE7Ci0JYnVmID0ga21hbGxvYyh4LCBHRlBfTk9GUyk7Ci0JaWYgKCFidWYpCi0JCWJ1ZiA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JZWxzZQotCQltZW1jcHkoYnVmLCBkaWJoLT5iX2RhdGEgKyBzaXplb2Yoc3RydWN0IGdmczJfZGlub2RlKSwgeCk7Ci0JYnJlbHNlKGRpYmgpOwotb3V0OgotCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZpX2doKTsKLQluZF9zZXRfbGluayhuZCwgYnVmKTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgZ2ZzMl9wdXRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kLCB2b2lkICpwKQotewotCWNoYXIgKnMgPSBuZF9nZXRfbGluayhuZCk7Ci0JaWYgKCFJU19FUlIocykpCi0JCWtmcmVlKHMpOwotfQotCi0vKioKLSAqIGdmczJfcGVybWlzc2lvbiAtCi0gKiBAaW5vZGU6IFRoZSBpbm9kZQotICogQG1hc2s6IFRoZSBtYXNrIHRvIGJlIHRlc3RlZAotICogQGZsYWdzOiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGFuIFJDVSBwYXRoIHdhbGsgb3Igbm90Ci0gKgotICogVGhpcyBtYXkgYmUgY2FsbGVkIGZyb20gdGhlIFZGUyBkaXJlY3RseSwgb3IgZnJvbSB3aXRoaW4gR0ZTMiB3aXRoIHRoZQotICogaW5vZGUgbG9ja2VkLCBzbyB3ZSBsb29rIHRvIHNlZSBpZiB0aGUgZ2xvY2sgaXMgYWxyZWFkeSBsb2NrZWQgYW5kIG9ubHkKLSAqIGxvY2sgdGhlIGdsb2NrIGlmIGl0cyBub3QgYWxyZWFkeSBiZWVuIGRvbmUuCi0gKgotICogUmV0dXJuczogZXJybm8KLSAqLwotCi1pbnQgZ2ZzMl9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0Jc3RydWN0IGdmczJfaW5vZGUgKmlwOwotCXN0cnVjdCBnZnMyX2hvbGRlciBpX2doOwotCWludCBlcnJvcjsKLQlpbnQgdW5sb2NrID0gMDsKLQotCi0JaXAgPSBHRlMyX0koaW5vZGUpOwotCWlmIChnZnMyX2dsb2NrX2lzX2xvY2tlZF9ieV9tZShpcC0+aV9nbCkgPT0gTlVMTCkgewotCQlpZiAoZmxhZ3MgJiBJUEVSTV9GTEFHX1JDVSkKLQkJCXJldHVybiAtRUNISUxEOwotCQllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChpcC0+aV9nbCwgTE1fU1RfU0hBUkVELCBMTV9GTEFHX0FOWSwgJmlfZ2gpOwotCQlpZiAoZXJyb3IpCi0JCQlyZXR1cm4gZXJyb3I7Ci0JCXVubG9jayA9IDE7Ci0JfQotCi0JaWYgKChtYXNrICYgTUFZX1dSSVRFKSAmJiBJU19JTU1VVEFCTEUoaW5vZGUpKQotCQllcnJvciA9IC1FQUNDRVM7Ci0JZWxzZQotCQllcnJvciA9IGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgbWFzaywgZmxhZ3MsIGdmczJfY2hlY2tfYWNsKTsKLQlpZiAodW5sb2NrKQotCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmaV9naCk7Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXN0YXRpYyBpbnQgc2V0YXR0cl9jaG93bihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCi17Ci0Jc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKLQlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoaW5vZGUpOwotCXUzMiBvdWlkLCBvZ2lkLCBudWlkLCBuZ2lkOwotCWludCBlcnJvcjsKLQotCW91aWQgPSBpbm9kZS0+aV91aWQ7Ci0Jb2dpZCA9IGlub2RlLT5pX2dpZDsKLQludWlkID0gYXR0ci0+aWFfdWlkOwotCW5naWQgPSBhdHRyLT5pYV9naWQ7Ci0KLQlpZiAoIShhdHRyLT5pYV92YWxpZCAmIEFUVFJfVUlEKSB8fCBvdWlkID09IG51aWQpCi0JCW91aWQgPSBudWlkID0gTk9fUVVPVEFfQ0hBTkdFOwotCWlmICghKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9HSUQpIHx8IG9naWQgPT0gbmdpZCkKLQkJb2dpZCA9IG5naWQgPSBOT19RVU9UQV9DSEFOR0U7Ci0KLQlpZiAoIWdmczJfYWxsb2NfZ2V0KGlwKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQllcnJvciA9IGdmczJfcXVvdGFfbG9jayhpcCwgbnVpZCwgbmdpZCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9hbGxvYzsKLQotCWlmIChvdWlkICE9IE5PX1FVT1RBX0NIQU5HRSB8fCBvZ2lkICE9IE5PX1FVT1RBX0NIQU5HRSkgewotCQllcnJvciA9IGdmczJfcXVvdGFfY2hlY2soaXAsIG51aWQsIG5naWQpOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dF9ndW5sb2NrX3E7Ci0JfQotCi0JZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKHNkcCwgUkVTX0RJTk9ERSArIDIgKiBSRVNfUVVPVEEsIDApOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfZ3VubG9ja19xOwotCi0JZXJyb3IgPSBnZnMyX3NldGF0dHJfc2ltcGxlKGlwLCBhdHRyKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2VuZF90cmFuczsKLQotCWlmIChvdWlkICE9IE5PX1FVT1RBX0NIQU5HRSB8fCBvZ2lkICE9IE5PX1FVT1RBX0NIQU5HRSkgewotCQl1NjQgYmxvY2tzID0gZ2ZzMl9nZXRfaW5vZGVfYmxvY2tzKCZpcC0+aV9pbm9kZSk7Ci0JCWdmczJfcXVvdGFfY2hhbmdlKGlwLCAtYmxvY2tzLCBvdWlkLCBvZ2lkKTsKLQkJZ2ZzMl9xdW90YV9jaGFuZ2UoaXAsIGJsb2NrcywgbnVpZCwgbmdpZCk7Ci0JfQotCi1vdXRfZW5kX3RyYW5zOgotCWdmczJfdHJhbnNfZW5kKHNkcCk7Ci1vdXRfZ3VubG9ja19xOgotCWdmczJfcXVvdGFfdW5sb2NrKGlwKTsKLW91dF9hbGxvYzoKLQlnZnMyX2FsbG9jX3B1dChpcCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi0vKioKLSAqIGdmczJfc2V0YXR0ciAtIENoYW5nZSBhdHRyaWJ1dGVzIG9uIGFuIGlub2RlCi0gKiBAZGVudHJ5OiBUaGUgZGVudHJ5IHdoaWNoIGlzIGNoYW5naW5nCi0gKiBAYXR0cjogVGhlIHN0cnVjdHVyZSBkZXNjcmliaW5nIHRoZSBjaGFuZ2UKLSAqCi0gKiBUaGUgVkZTIGxheWVyIHdhbnRzIHRvIGNoYW5nZSBvbmUgb3IgbW9yZSBvZiBhbiBpbm9kZXMgYXR0cmlidXRlcy4gIFdyaXRlCi0gKiB0aGF0IGNoYW5nZSBvdXQgdG8gZGlzay4KLSAqCi0gKiBSZXR1cm5zOiBlcnJubwotICovCi0KLXN0YXRpYyBpbnQgZ2ZzMl9zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0Jc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKLQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgaV9naDsKLQlpbnQgZXJyb3I7Ci0KLQllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChpcC0+aV9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCAmaV9naCk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQllcnJvciA9IC1FUEVSTTsKLQlpZiAoSVNfSU1NVVRBQkxFKGlub2RlKSB8fCBJU19BUFBFTkQoaW5vZGUpKQotCQlnb3RvIG91dDsKLQotCWVycm9yID0gaW5vZGVfY2hhbmdlX29rKGlub2RlLCBhdHRyKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0OwotCi0JaWYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKQotCQllcnJvciA9IGdmczJfc2V0YXR0cl9zaXplKGlub2RlLCBhdHRyLT5pYV9zaXplKTsKLQllbHNlIGlmIChhdHRyLT5pYV92YWxpZCAmIChBVFRSX1VJRCB8IEFUVFJfR0lEKSkKLQkJZXJyb3IgPSBzZXRhdHRyX2Nob3duKGlub2RlLCBhdHRyKTsKLQllbHNlIGlmICgoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX01PREUpICYmIElTX1BPU0lYQUNMKGlub2RlKSkKLQkJZXJyb3IgPSBnZnMyX2FjbF9jaG1vZChpcCwgYXR0cik7Ci0JZWxzZQotCQllcnJvciA9IGdmczJfc2V0YXR0cl9zaW1wbGUoaXAsIGF0dHIpOwotCi1vdXQ6Ci0JZ2ZzMl9nbG9ja19kcV91bmluaXQoJmlfZ2gpOwotCWlmICghZXJyb3IpCi0JCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCXJldHVybiBlcnJvcjsKLX0KLQotLyoqCi0gKiBnZnMyX2dldGF0dHIgLSBSZWFkIG91dCBhbiBpbm9kZSdzIGF0dHJpYnV0ZXMKLSAqIEBtbnQ6IFRoZSB2ZnNtb3VudCB0aGUgaW5vZGUgaXMgYmVpbmcgYWNjZXNzZWQgZnJvbQotICogQGRlbnRyeTogVGhlIGRlbnRyeSB0byBzdGF0Ci0gKiBAc3RhdDogVGhlIGlub2RlJ3Mgc3RhdHMKLSAqCi0gKiBUaGlzIG1heSBiZSBjYWxsZWQgZnJvbSB0aGUgVkZTIGRpcmVjdGx5LCBvciBmcm9tIHdpdGhpbiBHRlMyIHdpdGggdGhlCi0gKiBpbm9kZSBsb2NrZWQsIHNvIHdlIGxvb2sgdG8gc2VlIGlmIHRoZSBnbG9jayBpcyBhbHJlYWR5IGxvY2tlZCBhbmQgb25seQotICogbG9jayB0aGUgZ2xvY2sgaWYgaXRzIG5vdCBhbHJlYWR5IGJlZW4gZG9uZS4gTm90ZSB0aGF0IGl0cyB0aGUgTkZTCi0gKiByZWFkZGlycGx1cyBvcGVyYXRpb24gd2hpY2ggY2F1c2VzIHRoaXMgdG8gYmUgY2FsbGVkIChmcm9tIGZpbGxkaXIpCi0gKiB3aXRoIHRoZSBnbG9jayBhbHJlYWR5IGhlbGQuCi0gKgotICogUmV0dXJuczogZXJybm8KLSAqLwotCi1zdGF0aWMgaW50IGdmczJfZ2V0YXR0cihzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJc3RydWN0IGtzdGF0ICpzdGF0KQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0Jc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKLQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZ2g7Ci0JaW50IGVycm9yOwotCWludCB1bmxvY2sgPSAwOwotCi0JaWYgKGdmczJfZ2xvY2tfaXNfbG9ja2VkX2J5X21lKGlwLT5pX2dsKSA9PSBOVUxMKSB7Ci0JCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KGlwLT5pX2dsLCBMTV9TVF9TSEFSRUQsIExNX0ZMQUdfQU5ZLCAmZ2gpOwotCQlpZiAoZXJyb3IpCi0JCQlyZXR1cm4gZXJyb3I7Ci0JCXVubG9jayA9IDE7Ci0JfQotCi0JZ2VuZXJpY19maWxsYXR0cihpbm9kZSwgc3RhdCk7Ci0JaWYgKHVubG9jaykKLQkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmdoKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGdmczJfc2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAotCQkJIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCi17Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOwotCXN0cnVjdCBnZnMyX2hvbGRlciBnaDsKLQlpbnQgcmV0OwotCi0JZ2ZzMl9ob2xkZXJfaW5pdChpcC0+aV9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCAmZ2gpOwotCXJldCA9IGdmczJfZ2xvY2tfbnEoJmdoKTsKLQlpZiAocmV0ID09IDApIHsKLQkJcmV0ID0gZ2VuZXJpY19zZXR4YXR0cihkZW50cnksIG5hbWUsIGRhdGEsIHNpemUsIGZsYWdzKTsKLQkJZ2ZzMl9nbG9ja19kcSgmZ2gpOwotCX0KLQlnZnMyX2hvbGRlcl91bmluaXQoJmdoKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3NpemVfdCBnZnMyX2dldHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKLQkJCSAgICAgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpCi17Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOwotCXN0cnVjdCBnZnMyX2hvbGRlciBnaDsKLQlpbnQgcmV0OwotCi0JZ2ZzMl9ob2xkZXJfaW5pdChpcC0+aV9nbCwgTE1fU1RfU0hBUkVELCBMTV9GTEFHX0FOWSwgJmdoKTsKLQlyZXQgPSBnZnMyX2dsb2NrX25xKCZnaCk7Ci0JaWYgKHJldCA9PSAwKSB7Ci0JCXJldCA9IGdlbmVyaWNfZ2V0eGF0dHIoZGVudHJ5LCBuYW1lLCBkYXRhLCBzaXplKTsKLQkJZ2ZzMl9nbG9ja19kcSgmZ2gpOwotCX0KLQlnZnMyX2hvbGRlcl91bmluaXQoJmdoKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGdmczJfcmVtb3ZleGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lKQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0Jc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKLQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZ2g7Ci0JaW50IHJldDsKLQotCWdmczJfaG9sZGVyX2luaXQoaXAtPmlfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwgJmdoKTsKLQlyZXQgPSBnZnMyX2dsb2NrX25xKCZnaCk7Ci0JaWYgKHJldCA9PSAwKSB7Ci0JCXJldCA9IGdlbmVyaWNfcmVtb3ZleGF0dHIoZGVudHJ5LCBuYW1lKTsKLQkJZ2ZzMl9nbG9ja19kcSgmZ2gpOwotCX0KLQlnZnMyX2hvbGRlcl91bmluaXQoJmdoKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGdmczJfZmllbWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWVtYXBfZXh0ZW50X2luZm8gKmZpZWluZm8sCi0JCSAgICAgICB1NjQgc3RhcnQsIHU2NCBsZW4pCi17Ci0Jc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKLQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZ2g7Ci0JaW50IHJldDsKLQotCXJldCA9IGZpZW1hcF9jaGVja19mbGFncyhmaWVpbmZvLCBGSUVNQVBfRkxBR19TWU5DKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCi0JcmV0ID0gZ2ZzMl9nbG9ja19ucV9pbml0KGlwLT5pX2dsLCBMTV9TVF9TSEFSRUQsIDAsICZnaCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQlpZiAoZ2ZzMl9pc19zdHVmZmVkKGlwKSkgewotCQl1NjQgcGh5cyA9IGlwLT5pX25vX2FkZHIgPDwgaW5vZGUtPmlfYmxrYml0czsKLQkJdTY0IHNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7Ci0JCXUzMiBmbGFncyA9IEZJRU1BUF9FWFRFTlRfTEFTVHxGSUVNQVBfRVhURU5UX05PVF9BTElHTkVEfAotCQkJICAgIEZJRU1BUF9FWFRFTlRfREFUQV9JTkxJTkU7Ci0JCXBoeXMgKz0gc2l6ZW9mKHN0cnVjdCBnZnMyX2Rpbm9kZSk7Ci0JCXBoeXMgKz0gc3RhcnQ7Ci0JCWlmIChzdGFydCArIGxlbiA+IHNpemUpCi0JCQlsZW4gPSBzaXplIC0gc3RhcnQ7Ci0JCWlmIChzdGFydCA8IHNpemUpCi0JCQlyZXQgPSBmaWVtYXBfZmlsbF9uZXh0X2V4dGVudChmaWVpbmZvLCBzdGFydCwgcGh5cywKLQkJCQkJCSAgICAgIGxlbiwgZmxhZ3MpOwotCQlpZiAocmV0ID09IDEpCi0JCQlyZXQgPSAwOwotCX0gZWxzZSB7Ci0JCXJldCA9IF9fZ2VuZXJpY19ibG9ja19maWVtYXAoaW5vZGUsIGZpZWluZm8sIHN0YXJ0LCBsZW4sCi0JCQkJCSAgICAgZ2ZzMl9ibG9ja19tYXApOwotCX0KLQotCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZnaCk7Ci1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZ2ZzMl9maWxlX2lvcHMgPSB7Ci0JLnBlcm1pc3Npb24gPSBnZnMyX3Blcm1pc3Npb24sCi0JLnNldGF0dHIgPSBnZnMyX3NldGF0dHIsCi0JLmdldGF0dHIgPSBnZnMyX2dldGF0dHIsCi0JLnNldHhhdHRyID0gZ2ZzMl9zZXR4YXR0ciwKLQkuZ2V0eGF0dHIgPSBnZnMyX2dldHhhdHRyLAotCS5saXN0eGF0dHIgPSBnZnMyX2xpc3R4YXR0ciwKLQkucmVtb3ZleGF0dHIgPSBnZnMyX3JlbW92ZXhhdHRyLAotCS5maWVtYXAgPSBnZnMyX2ZpZW1hcCwKLX07Ci0KLWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGdmczJfZGlyX2lvcHMgPSB7Ci0JLmNyZWF0ZSA9IGdmczJfY3JlYXRlLAotCS5sb29rdXAgPSBnZnMyX2xvb2t1cCwKLQkubGluayA9IGdmczJfbGluaywKLQkudW5saW5rID0gZ2ZzMl91bmxpbmssCi0JLnN5bWxpbmsgPSBnZnMyX3N5bWxpbmssCi0JLm1rZGlyID0gZ2ZzMl9ta2RpciwKLQkucm1kaXIgPSBnZnMyX3JtZGlyLAotCS5ta25vZCA9IGdmczJfbWtub2QsCi0JLnJlbmFtZSA9IGdmczJfcmVuYW1lLAotCS5wZXJtaXNzaW9uID0gZ2ZzMl9wZXJtaXNzaW9uLAotCS5zZXRhdHRyID0gZ2ZzMl9zZXRhdHRyLAotCS5nZXRhdHRyID0gZ2ZzMl9nZXRhdHRyLAotCS5zZXR4YXR0ciA9IGdmczJfc2V0eGF0dHIsCi0JLmdldHhhdHRyID0gZ2ZzMl9nZXR4YXR0ciwKLQkubGlzdHhhdHRyID0gZ2ZzMl9saXN0eGF0dHIsCi0JLnJlbW92ZXhhdHRyID0gZ2ZzMl9yZW1vdmV4YXR0ciwKLQkuZmllbWFwID0gZ2ZzMl9maWVtYXAsCi19OwotCi1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBnZnMyX3N5bWxpbmtfaW9wcyA9IHsKLQkucmVhZGxpbmsgPSBnZW5lcmljX3JlYWRsaW5rLAotCS5mb2xsb3dfbGluayA9IGdmczJfZm9sbG93X2xpbmssCi0JLnB1dF9saW5rID0gZ2ZzMl9wdXRfbGluaywKLQkucGVybWlzc2lvbiA9IGdmczJfcGVybWlzc2lvbiwKLQkuc2V0YXR0ciA9IGdmczJfc2V0YXR0ciwKLQkuZ2V0YXR0ciA9IGdmczJfZ2V0YXR0ciwKLQkuc2V0eGF0dHIgPSBnZnMyX3NldHhhdHRyLAotCS5nZXR4YXR0ciA9IGdmczJfZ2V0eGF0dHIsCi0JLmxpc3R4YXR0ciA9IGdmczJfbGlzdHhhdHRyLAotCS5yZW1vdmV4YXR0ciA9IGdmczJfcmVtb3ZleGF0dHIsCi0JLmZpZW1hcCA9IGdmczJfZmllbWFwLAotfTsKLQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9yZ3JwLmMgYi9mcy9nZnMyL3JncnAuYwppbmRleCA2ZmNhZTg0Li43MjczYWQzIDEwMDY0NAotLS0gYS9mcy9nZnMyL3JncnAuYworKysgYi9mcy9nZnMyL3JncnAuYwpAQCAtNzgsMTAgKzc4LDExIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBnZnMyX3NldGJpdChzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqcmdkLCB1bnNpZ25lZCBjaGFyICpidWYxLAogCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZjIsIHVuc2lnbmVkIGludCBvZmZzZXQsCi0JCQkgICAgICAgdW5zaWduZWQgaW50IGJ1ZmxlbiwgdTMyIGJsb2NrLAorCQkJICAgICAgIHN0cnVjdCBnZnMyX2JpdG1hcCAqYmksIHUzMiBibG9jaywKIAkJCSAgICAgICB1bnNpZ25lZCBjaGFyIG5ld19zdGF0ZSkKIHsKIAl1bnNpZ25lZCBjaGFyICpieXRlMSwgKmJ5dGUyLCAqZW5kLCBjdXJfc3RhdGU7CisJdW5zaWduZWQgaW50IGJ1ZmxlbiA9IGJpLT5iaV9sZW47CiAJY29uc3QgdW5zaWduZWQgaW50IGJpdCA9IChibG9jayAlIEdGUzJfTkJCWSkgKiBHRlMyX0JJVF9TSVpFOwogCiAJYnl0ZTEgPSBidWYxICsgb2Zmc2V0ICsgKGJsb2NrIC8gR0ZTMl9OQkJZKTsKQEAgLTkyLDYgKzkzLDE2IEBACiAJY3VyX3N0YXRlID0gKCpieXRlMSA+PiBiaXQpICYgR0ZTMl9CSVRfTUFTSzsKIAogCWlmICh1bmxpa2VseSghdmFsaWRfY2hhbmdlW25ld19zdGF0ZSAqIDQgKyBjdXJfc3RhdGVdKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJHRlMyOiBidWZfYmxrID0gMHglbGx4IG9sZF9zdGF0ZT0lZCwgIgorCQkgICAgICAgIm5ld19zdGF0ZT0lZFxuIiwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmxvY2ssIGN1cl9zdGF0ZSwgbmV3X3N0YXRlKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiR0ZTMjogcmdycD0weCVsbHggYmlfc3RhcnQ9MHglbHhcbiIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJnZC0+cmRfYWRkciwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nKWJpLT5iaV9zdGFydCk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkdGUzI6IGJpX29mZnNldD0weCVseCBiaV9sZW49MHglbHhcbiIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyliaS0+Ymlfb2Zmc2V0LAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpYmktPmJpX2xlbik7CisJCWR1bXBfc3RhY2soKTsKIAkJZ2ZzMl9jb25zaXN0X3JncnBkKHJnZCk7CiAJCXJldHVybjsKIAl9CkBAIC0zODEsNiArMzkyLDcgQEAKIAogCQlpZiAoZ2wpIHsKIAkJCWdsLT5nbF9vYmplY3QgPSBOVUxMOworCQkJZ2ZzMl9nbG9ja19hZGRfdG9fbHJ1KGdsKTsKIAkJCWdmczJfZ2xvY2tfcHV0KGdsKTsKIAkJfQogCkBAIC0xMzY1LDcgKzEzNzcsNyBAQAogCiAJZ2ZzMl90cmFuc19hZGRfYmgocmdkLT5yZF9nbCwgYmktPmJpX2JoLCAxKTsKIAlnZnMyX3NldGJpdChyZ2QsIGJpLT5iaV9iaC0+Yl9kYXRhLCBiaS0+YmlfY2xvbmUsIGJpLT5iaV9vZmZzZXQsCi0JCSAgICBiaS0+YmlfbGVuLCBibGssIG5ld19zdGF0ZSk7CisJCSAgICBiaSwgYmxrLCBuZXdfc3RhdGUpOwogCWdvYWwgPSBibGs7CiAJd2hpbGUgKCpuIDwgZWxlbikgewogCQlnb2FsKys7CkBAIC0xMzc1LDcgKzEzODcsNyBAQAogCQkgICAgR0ZTMl9CTEtTVF9GUkVFKQogCQkJYnJlYWs7CiAJCWdmczJfc2V0Yml0KHJnZCwgYmktPmJpX2JoLT5iX2RhdGEsIGJpLT5iaV9jbG9uZSwgYmktPmJpX29mZnNldCwKLQkJCSAgICBiaS0+YmlfbGVuLCBnb2FsLCBuZXdfc3RhdGUpOworCQkJICAgIGJpLCBnb2FsLCBuZXdfc3RhdGUpOwogCQkoKm4pKys7CiAJfQogb3V0OgpAQCAtMTQzMiw3ICsxNDQ0LDcgQEAKIAkJfQogCQlnZnMyX3RyYW5zX2FkZF9iaChyZ2QtPnJkX2dsLCBiaS0+YmlfYmgsIDEpOwogCQlnZnMyX3NldGJpdChyZ2QsIGJpLT5iaV9iaC0+Yl9kYXRhLCBOVUxMLCBiaS0+Ymlfb2Zmc2V0LAotCQkJICAgIGJpLT5iaV9sZW4sIGJ1Zl9ibGssIG5ld19zdGF0ZSk7CisJCQkgICAgYmksIGJ1Zl9ibGssIG5ld19zdGF0ZSk7CiAJfQogCiAJcmV0dXJuIHJnZDsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvc3VwZXIuYyBiL2ZzL2dmczIvc3VwZXIuYwppbmRleCBiOWYyOGU2Li5lZDU0MGU3IDEwMDY0NAotLS0gYS9mcy9nZnMyL3N1cGVyLmMKKysrIGIvZnMvZ2ZzMi9zdXBlci5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KKyNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpAQCAtNzAwLDExICs3MDEsNDcgQEAKIAltdXRleF91bmxvY2soJnNkcC0+c2RfZnJlZXplX2xvY2spOwogfQogCit2b2lkIGdmczJfZGlub2RlX291dChjb25zdCBzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHZvaWQgKmJ1ZikKK3sKKwlzdHJ1Y3QgZ2ZzMl9kaW5vZGUgKnN0ciA9IGJ1ZjsKKworCXN0ci0+ZGlfaGVhZGVyLm1oX21hZ2ljID0gY3B1X3RvX2JlMzIoR0ZTMl9NQUdJQyk7CisJc3RyLT5kaV9oZWFkZXIubWhfdHlwZSA9IGNwdV90b19iZTMyKEdGUzJfTUVUQVRZUEVfREkpOworCXN0ci0+ZGlfaGVhZGVyLm1oX2Zvcm1hdCA9IGNwdV90b19iZTMyKEdGUzJfRk9STUFUX0RJKTsKKwlzdHItPmRpX251bS5ub19hZGRyID0gY3B1X3RvX2JlNjQoaXAtPmlfbm9fYWRkcik7CisJc3RyLT5kaV9udW0ubm9fZm9ybWFsX2lubyA9IGNwdV90b19iZTY0KGlwLT5pX25vX2Zvcm1hbF9pbm8pOworCXN0ci0+ZGlfbW9kZSA9IGNwdV90b19iZTMyKGlwLT5pX2lub2RlLmlfbW9kZSk7CisJc3RyLT5kaV91aWQgPSBjcHVfdG9fYmUzMihpcC0+aV9pbm9kZS5pX3VpZCk7CisJc3RyLT5kaV9naWQgPSBjcHVfdG9fYmUzMihpcC0+aV9pbm9kZS5pX2dpZCk7CisJc3RyLT5kaV9ubGluayA9IGNwdV90b19iZTMyKGlwLT5pX2lub2RlLmlfbmxpbmspOworCXN0ci0+ZGlfc2l6ZSA9IGNwdV90b19iZTY0KGlfc2l6ZV9yZWFkKCZpcC0+aV9pbm9kZSkpOworCXN0ci0+ZGlfYmxvY2tzID0gY3B1X3RvX2JlNjQoZ2ZzMl9nZXRfaW5vZGVfYmxvY2tzKCZpcC0+aV9pbm9kZSkpOworCXN0ci0+ZGlfYXRpbWUgPSBjcHVfdG9fYmU2NChpcC0+aV9pbm9kZS5pX2F0aW1lLnR2X3NlYyk7CisJc3RyLT5kaV9tdGltZSA9IGNwdV90b19iZTY0KGlwLT5pX2lub2RlLmlfbXRpbWUudHZfc2VjKTsKKwlzdHItPmRpX2N0aW1lID0gY3B1X3RvX2JlNjQoaXAtPmlfaW5vZGUuaV9jdGltZS50dl9zZWMpOworCisJc3RyLT5kaV9nb2FsX21ldGEgPSBjcHVfdG9fYmU2NChpcC0+aV9nb2FsKTsKKwlzdHItPmRpX2dvYWxfZGF0YSA9IGNwdV90b19iZTY0KGlwLT5pX2dvYWwpOworCXN0ci0+ZGlfZ2VuZXJhdGlvbiA9IGNwdV90b19iZTY0KGlwLT5pX2dlbmVyYXRpb24pOworCisJc3RyLT5kaV9mbGFncyA9IGNwdV90b19iZTMyKGlwLT5pX2Rpc2tmbGFncyk7CisJc3RyLT5kaV9oZWlnaHQgPSBjcHVfdG9fYmUxNihpcC0+aV9oZWlnaHQpOworCXN0ci0+ZGlfcGF5bG9hZF9mb3JtYXQgPSBjcHVfdG9fYmUzMihTX0lTRElSKGlwLT5pX2lub2RlLmlfbW9kZSkgJiYKKwkJCQkJICAgICAhKGlwLT5pX2Rpc2tmbGFncyAmIEdGUzJfRElGX0VYSEFTSCkgPworCQkJCQkgICAgIEdGUzJfRk9STUFUX0RFIDogMCk7CisJc3RyLT5kaV9kZXB0aCA9IGNwdV90b19iZTE2KGlwLT5pX2RlcHRoKTsKKwlzdHItPmRpX2VudHJpZXMgPSBjcHVfdG9fYmUzMihpcC0+aV9lbnRyaWVzKTsKKworCXN0ci0+ZGlfZWF0dHIgPSBjcHVfdG9fYmU2NChpcC0+aV9lYXR0cik7CisJc3RyLT5kaV9hdGltZV9uc2VjID0gY3B1X3RvX2JlMzIoaXAtPmlfaW5vZGUuaV9hdGltZS50dl9uc2VjKTsKKwlzdHItPmRpX210aW1lX25zZWMgPSBjcHVfdG9fYmUzMihpcC0+aV9pbm9kZS5pX210aW1lLnR2X25zZWMpOworCXN0ci0+ZGlfY3RpbWVfbnNlYyA9IGNwdV90b19iZTMyKGlwLT5pX2lub2RlLmlfY3RpbWUudHZfbnNlYyk7Cit9CiAKIC8qKgogICogZ2ZzMl93cml0ZV9pbm9kZSAtIE1ha2Ugc3VyZSB0aGUgaW5vZGUgaXMgc3RhYmxlIG9uIHRoZSBkaXNrCiAgKiBAaW5vZGU6IFRoZSBpbm9kZQotICogQHN5bmM6IHN5bmNocm9ub3VzIHdyaXRlIGZsYWcKKyAqIEB3YmM6IFRoZSB3cml0ZWJhY2sgY29udHJvbCBzdHJ1Y3R1cmUKICAqCiAgKiBSZXR1cm5zOiBlcnJubwogICovCkBAIC03MTMsMTUgKzc1MCwxNyBAQAogewogCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKGlub2RlKTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWV0YW1hcHBpbmcgPSBnZnMyX2dsb2NrMmFzcGFjZShpcC0+aV9nbCk7CisJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSA9IG1ldGFtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvOwogCXN0cnVjdCBnZnMyX2hvbGRlciBnaDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCXN0cnVjdCB0aW1lc3BlYyBhdGltZTsKIAlzdHJ1Y3QgZ2ZzMl9kaW5vZGUgKmRpOwotCWludCByZXQgPSAwOworCWludCByZXQgPSAtRUFHQUlOOwogCi0JLyogQ2hlY2sgdGhpcyBpcyBhICJub3JtYWwiIGlub2RlLCBldGMgKi8KKwkvKiBTa2lwIHRpbWVzdGFtcCB1cGRhdGUsIGlmIHRoaXMgaXMgZnJvbSBhIG1lbWFsbG9jICovCiAJaWYgKGN1cnJlbnQtPmZsYWdzICYgUEZfTUVNQUxMT0MpCi0JCXJldHVybiAwOworCQlnb3RvIGRvX2ZsdXNoOwogCXJldCA9IGdmczJfZ2xvY2tfbnFfaW5pdChpcC0+aV9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCAmZ2gpOwogCWlmIChyZXQpCiAJCWdvdG8gZG9fZmx1c2g7CkBAIC03NDUsNiArNzg0LDEzIEBACiBkb19mbHVzaDoKIAlpZiAod2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpCiAJCWdmczJfbG9nX2ZsdXNoKEdGUzJfU0IoaW5vZGUpLCBpcC0+aV9nbCk7CisJZmlsZW1hcF9mZGF0YXdyaXRlKG1ldGFtYXBwaW5nKTsKKwlpZiAoYmRpLT5kaXJ0eV9leGNlZWRlZCkKKwkJZ2ZzMl9haWwxX2ZsdXNoKHNkcCwgd2JjKTsKKwlpZiAoIXJldCAmJiAod2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpKQorCQlyZXQgPSBmaWxlbWFwX2ZkYXRhd2FpdChtZXRhbWFwcGluZyk7CisJaWYgKHJldCkKKwkJbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlub2RlKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC04NzQsOCArOTIwLDkgQEAKIAogc3RhdGljIGludCBnZnMyX3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQpCiB7Ci0JaWYgKHdhaXQgJiYgc2ItPnNfZnNfaW5mbykKLQkJZ2ZzMl9sb2dfZmx1c2goc2ItPnNfZnNfaW5mbywgTlVMTCk7CisJc3RydWN0IGdmczJfc2JkICpzZHAgPSBzYi0+c19mc19pbmZvOworCWlmICh3YWl0ICYmIHNkcCkKKwkJZ2ZzMl9sb2dfZmx1c2goc2RwLCBOVUxMKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTMwOCw2ICsxMzU1LDc4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGdmczJfZmluYWxfcmVsZWFzZV9wYWdlcyhzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXApCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9ICZpcC0+aV9pbm9kZTsKKwlzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wgPSBpcC0+aV9nbDsKKworCXRydW5jYXRlX2lub2RlX3BhZ2VzKGdmczJfZ2xvY2syYXNwYWNlKGlwLT5pX2dsKSwgMCk7CisJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOworCisJaWYgKGF0b21pY19yZWFkKCZnbC0+Z2xfcmV2b2tlcykgPT0gMCkgeworCQljbGVhcl9iaXQoR0xGX0xGTFVTSCwgJmdsLT5nbF9mbGFncyk7CisJCWNsZWFyX2JpdChHTEZfRElSVFksICZnbC0+Z2xfZmxhZ3MpOworCX0KK30KKworc3RhdGljIGludCBnZnMyX2Rpbm9kZV9kZWFsbG9jKHN0cnVjdCBnZnMyX2lub2RlICppcCkKK3sKKwlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoJmlwLT5pX2lub2RlKTsKKwlzdHJ1Y3QgZ2ZzMl9hbGxvYyAqYWw7CisJc3RydWN0IGdmczJfcmdycGQgKnJnZDsKKwlpbnQgZXJyb3I7CisKKwlpZiAoZ2ZzMl9nZXRfaW5vZGVfYmxvY2tzKCZpcC0+aV9pbm9kZSkgIT0gMSkgeworCQlnZnMyX2NvbnNpc3RfaW5vZGUoaXApOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlhbCA9IGdmczJfYWxsb2NfZ2V0KGlwKTsKKwlpZiAoIWFsKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVycm9yID0gZ2ZzMl9xdW90YV9ob2xkKGlwLCBOT19RVU9UQV9DSEFOR0UsIE5PX1FVT1RBX0NIQU5HRSk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dDsKKworCWVycm9yID0gZ2ZzMl9yaW5kZXhfaG9sZChzZHAsICZhbC0+YWxfcmlfZ2gpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfcXM7CisKKwlyZ2QgPSBnZnMyX2JsazJyZ3JwZChzZHAsIGlwLT5pX25vX2FkZHIpOworCWlmICghcmdkKSB7CisJCWdmczJfY29uc2lzdF9pbm9kZShpcCk7CisJCWVycm9yID0gLUVJTzsKKwkJZ290byBvdXRfcmluZGV4X3JlbHNlOworCX0KKworCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KHJnZC0+cmRfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwKKwkJCQkgICAmYWwtPmFsX3JnZF9naCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9yaW5kZXhfcmVsc2U7CisKKwllcnJvciA9IGdmczJfdHJhbnNfYmVnaW4oc2RwLCBSRVNfUkdfQklUICsgUkVTX1NUQVRGUyArIFJFU19RVU9UQSwKKwkJCQkgc2RwLT5zZF9qZGVzYy0+amRfYmxvY2tzKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X3JnX2d1bmxvY2s7CisKKwlnZnMyX2ZyZWVfZGkocmdkLCBpcCk7CisKKwlnZnMyX2ZpbmFsX3JlbGVhc2VfcGFnZXMoaXApOworCisJZ2ZzMl90cmFuc19lbmQoc2RwKTsKKworb3V0X3JnX2d1bmxvY2s6CisJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmFsLT5hbF9yZ2RfZ2gpOworb3V0X3JpbmRleF9yZWxzZToKKwlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmYWwtPmFsX3JpX2doKTsKK291dF9xczoKKwlnZnMyX3F1b3RhX3VuaG9sZChpcCk7CitvdXQ6CisJZ2ZzMl9hbGxvY19wdXQoaXApOworCXJldHVybiBlcnJvcjsKK30KKwogLyoKICAqIFdlIGhhdmUgdG8gKGF0IHRoZSBtb21lbnQpIGhvbGQgdGhlIGlub2RlcyBtYWluIGxvY2sgdG8gY292ZXIKICAqIHRoZSBnYXAgYmV0d2VlbiB1bmxvY2tpbmcgdGhlIHNoYXJlZCBsb2NrIG9uIHRoZSBpb3BlbiBsb2NrIGFuZApAQCAtMTM3MSwxNSArMTQ5MCwxMyBAQAogCX0KIAogCWVycm9yID0gZ2ZzMl9kaW5vZGVfZGVhbGxvYyhpcCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF91bmxvY2s7CisJZ290byBvdXRfdW5sb2NrOwogCiBvdXRfdHJ1bmNhdGU6CiAJZXJyb3IgPSBnZnMyX3RyYW5zX2JlZ2luKHNkcCwgMCwgc2RwLT5zZF9qZGVzYy0+amRfYmxvY2tzKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X3VubG9jazsKLQkvKiBOZWVkcyB0byBiZSBkb25lIGJlZm9yZSBnbG9jayByZWxlYXNlICYgYWxzbyBpbiBhIHRyYW5zYWN0aW9uICovCi0JdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOworCWdmczJfZmluYWxfcmVsZWFzZV9wYWdlcyhpcCk7CiAJZ2ZzMl90cmFuc19lbmQoc2RwKTsKIAogb3V0X3VubG9jazoKQEAgLTEzOTQsNiArMTUxMSw3IEBACiAJZW5kX3dyaXRlYmFjayhpbm9kZSk7CiAKIAlpcC0+aV9nbC0+Z2xfb2JqZWN0ID0gTlVMTDsKKwlnZnMyX2dsb2NrX2FkZF90b19scnUoaXAtPmlfZ2wpOwogCWdmczJfZ2xvY2tfcHV0KGlwLT5pX2dsKTsKIAlpcC0+aV9nbCA9IE5VTEw7CiAJaWYgKGlwLT5pX2lvcGVuX2doLmdoX2dsKSB7CmRpZmYgLS1naXQgYS9mcy9nZnMyL3N5cy5jIGIvZnMvZ2ZzMi9zeXMuYwppbmRleCA3NDhjY2I1Li5lMjBlYWIzIDEwMDY0NAotLS0gYS9mcy9nZnMyL3N5cy5jCisrKyBiL2ZzL2dmczIvc3lzLmMKQEAgLTgxLDcgKzgxLDggQEAKIAogc3RhdGljIHNzaXplX3QgdXVpZF9zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCiB7Ci0JY29uc3QgdTggKnV1aWQgPSBzZHAtPnNkX3NiLnNiX3V1aWQ7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzID0gc2RwLT5zZF92ZnM7CisJY29uc3QgdTggKnV1aWQgPSBzLT5zX3V1aWQ7CiAJYnVmWzBdID0gJ1wwJzsKIAlpZiAoIWdmczJfdXVpZF92YWxpZCh1dWlkKSkKIAkJcmV0dXJuIDA7CkBAIC02MTYsNyArNjE3LDggQEAKIAkJICAgICAgIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudikKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZ2ZzMl9zYmQsIHNkX2tvYmopOwotCWNvbnN0IHU4ICp1dWlkID0gc2RwLT5zZF9zYi5zYl91dWlkOworCXN0cnVjdCBzdXBlcl9ibG9jayAqcyA9IHNkcC0+c2RfdmZzOworCWNvbnN0IHU4ICp1dWlkID0gcy0+c191dWlkOwogCiAJYWRkX3VldmVudF92YXIoZW52LCAiTE9DS1RBQkxFPSVzIiwgc2RwLT5zZF90YWJsZV9uYW1lKTsKIAlhZGRfdWV2ZW50X3ZhcihlbnYsICJMT0NLUFJPVE89JXMiLCBzZHAtPnNkX3Byb3RvX25hbWUpOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi90cmFjZV9nZnMyLmggYi9mcy9nZnMyL3RyYWNlX2dmczIuaAppbmRleCBjZWRiMGJiLi41ZDA3NjA5IDEwMDY0NAotLS0gYS9mcy9nZnMyL3RyYWNlX2dmczIuaAorKysgYi9mcy9nZnMyL3RyYWNlX2dmczIuaApAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZGxtY29uc3RhbnRzLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KKyNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KICNpbmNsdWRlICJpbmNvcmUuaCIKICNpbmNsdWRlICJnbG9jay5oIgogCkBAIC00MCw3ICs0MSw5IEBACiAJeygxVUwgPDwgR0xGX1JFUExZX1BFTkRJTkcpLAkJInIiIH0sCQlcCiAJeygxVUwgPDwgR0xGX0lOSVRJQUwpLAkJCSJJIiB9LAkJXAogCXsoMVVMIDw8IEdMRl9GUk9aRU4pLAkJCSJGIiB9LAkJXAotCXsoMVVMIDw8IEdMRl9RVUVVRUQpLAkJCSJxIiB9KQorCXsoMVVMIDw8IEdMRl9RVUVVRUQpLAkJCSJxIiB9LAkJXAorCXsoMVVMIDw8IEdMRl9MUlUpLAkJCSJMIiB9LAkJXAorCXsoMVVMIDw8IEdMRl9PQkpFQ1QpLAkJCSJvIiB9KQogCiAjaWZuZGVmIE5VTVBUWQogI2RlZmluZSBOVU1QVFkKQEAgLTk0LDcgKzk3LDcgQEAKIAkJX19lbnRyeS0+bmV3X3N0YXRlCT0gZ2xvY2tfdHJhY2Vfc3RhdGUobmV3X3N0YXRlKTsKIAkJX19lbnRyeS0+dGd0X3N0YXRlCT0gZ2xvY2tfdHJhY2Vfc3RhdGUoZ2wtPmdsX3RhcmdldCk7CiAJCV9fZW50cnktPmRtdF9zdGF0ZQk9IGdsb2NrX3RyYWNlX3N0YXRlKGdsLT5nbF9kZW1vdGVfc3RhdGUpOwotCQlfX2VudHJ5LT5mbGFncwkJPSBnbC0+Z2xfZmxhZ3M7CisJCV9fZW50cnktPmZsYWdzCQk9IGdsLT5nbF9mbGFncyB8IChnbC0+Z2xfb2JqZWN0ID8gKDFVTDw8R0xGX09CSkVDVCkgOiAwKTsKIAkpLAogCiAJVFBfcHJpbnRrKCIldSwldSBnbG9jayAlZDolbGxkIHN0YXRlICVzIHRvICVzIHRndDolcyBkbXQ6JXMgZmxhZ3M6JXMiLApAQCAtMTI3LDcgKzEzMCw3IEBACiAJCV9fZW50cnktPmdsdHlwZQkJPSBnbC0+Z2xfbmFtZS5sbl90eXBlOwogCQlfX2VudHJ5LT5nbG51bQkJPSBnbC0+Z2xfbmFtZS5sbl9udW1iZXI7CiAJCV9fZW50cnktPmN1cl9zdGF0ZQk9IGdsb2NrX3RyYWNlX3N0YXRlKGdsLT5nbF9zdGF0ZSk7Ci0JCV9fZW50cnktPmZsYWdzCQk9IGdsLT5nbF9mbGFnczsKKwkJX19lbnRyeS0+ZmxhZ3MJCT0gZ2wtPmdsX2ZsYWdzICB8IChnbC0+Z2xfb2JqZWN0ID8gKDFVTDw8R0xGX09CSkVDVCkgOiAwKTsKIAkpLAogCiAJVFBfcHJpbnRrKCIldSwldSBnbG9jayAlZDolbGxkIHN0YXRlICVzID0+ICVzIGZsYWdzOiVzIiwKQEAgLTE2MSw3ICsxNjQsNyBAQAogCQlfX2VudHJ5LT5nbG51bQkJPSBnbC0+Z2xfbmFtZS5sbl9udW1iZXI7CiAJCV9fZW50cnktPmN1cl9zdGF0ZQk9IGdsb2NrX3RyYWNlX3N0YXRlKGdsLT5nbF9zdGF0ZSk7CiAJCV9fZW50cnktPmRtdF9zdGF0ZQk9IGdsb2NrX3RyYWNlX3N0YXRlKGdsLT5nbF9kZW1vdGVfc3RhdGUpOwotCQlfX2VudHJ5LT5mbGFncwkJPSBnbC0+Z2xfZmxhZ3M7CisJCV9fZW50cnktPmZsYWdzCQk9IGdsLT5nbF9mbGFncyAgfCAoZ2wtPmdsX29iamVjdCA/ICgxVUw8PEdMRl9PQkpFQ1QpIDogMCk7CiAJKSwKIAogCVRQX3ByaW50aygiJXUsJXUgZ2xvY2sgJWQ6JWxsZCBkZW1vdGUgJXMgdG8gJXMgZmxhZ3M6JXMiLApAQCAtMzE4LDYgKzMyMSwzMyBAQAogCQkgIE1JTk9SKF9fZW50cnktPmRldiksIF9fZW50cnktPmJsb2NrcykKICk7CiAKKy8qIFdyaXRpbmcgYmFjayB0aGUgQUlMICovCitUUkFDRV9FVkVOVChnZnMyX2FpbF9mbHVzaCwKKworCVRQX1BST1RPKGNvbnN0IHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjb25zdCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywgaW50IHN0YXJ0KSwKKworCVRQX0FSR1Moc2RwLCB3YmMsIHN0YXJ0KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCWRldl90LAlkZXYJCQkpCisJCV9fZmllbGQoCWludCwgc3RhcnQJCQkpCisJCV9fZmllbGQoCWludCwgc3luY19tb2RlCQkJKQorCQlfX2ZpZWxkKAlsb25nLCBucl90b193cml0ZQkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2CQk9IHNkcC0+c2RfdmZzLT5zX2RldjsKKwkJX19lbnRyeS0+c3RhcnQJCT0gc3RhcnQ7CisJCV9fZW50cnktPnN5bmNfbW9kZQk9IHdiYy0+c3luY19tb2RlOworCQlfX2VudHJ5LT5ucl90b193cml0ZQk9IHdiYy0+bnJfdG9fd3JpdGU7CisJKSwKKworCVRQX3ByaW50aygiJXUsJXUgYWlsIGZsdXNoICVzICVzICVsZCIsIE1BSk9SKF9fZW50cnktPmRldiksCisJCSAgTUlOT1IoX19lbnRyeS0+ZGV2KSwgX19lbnRyeS0+c3RhcnQgPyAic3RhcnQiIDogImVuZCIsCisJCSAgX19lbnRyeS0+c3luY19tb2RlID09IFdCX1NZTkNfQUxMID8gImFsbCIgOiAibm9uZSIsCisJCSAgX19lbnRyeS0+bnJfdG9fd3JpdGUpCispOworCiAvKiBTZWN0aW9uIDMgLSBibWFwCiAgKgogICogT2JqZWN0aXZlczoKZGlmZiAtLWdpdCBhL2ZzL2hwZnMvS2NvbmZpZyBiL2ZzL2hwZnMvS2NvbmZpZwppbmRleCAwYzM5ZGMzLi41NmJkMTVjIDEwMDY0NAotLS0gYS9mcy9ocGZzL0tjb25maWcKKysrIGIvZnMvaHBmcy9LY29uZmlnCkBAIC0xLDcgKzEsNiBAQAogY29uZmlnIEhQRlNfRlMKIAl0cmlzdGF0ZSAiT1MvMiBIUEZTIGZpbGUgc3lzdGVtIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBCTE9DSwotCWRlcGVuZHMgb24gQlJPS0VOIHx8ICFQUkVFTVBUCiAJaGVscAogCSAgT1MvMiBpcyBJQk0ncyBvcGVyYXRpbmcgc3lzdGVtIGZvciBQQydzLCB0aGUgc2FtZSBhcyBXYXJwLCBhbmQgSFBGUwogCSAgaXMgdGhlIGZpbGUgc3lzdGVtIHVzZWQgZm9yIG9yZ2FuaXppbmcgZmlsZXMgb24gT1MvMiBoYXJkIGRpc2sKZGlmZiAtLWdpdCBhL2ZzL2hwZnMvYWxsb2MuYyBiL2ZzL2hwZnMvYWxsb2MuYwppbmRleCA1NTAzZTJjLi43YTVlYjJjIDEwMDY0NAotLS0gYS9mcy9ocGZzL2FsbG9jLmMKKysrIGIvZnMvaHBmcy9hbGxvYy5jCkBAIC04LDggKzgsNiBAQAogCiAjaW5jbHVkZSAiaHBmc19mbi5oIgogCi1zdGF0aWMgaW50IGhwZnNfYWxsb2NfaWZfcG9zc2libGVfbm9sb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc2Vjbm8gc2VjKTsKLQogLyoKICAqIENoZWNrIGlmIGEgc2VjdG9yIGlzIGFsbG9jYXRlZCBpbiBiaXRtYXAKICAqIFRoaXMgaXMgcmVhbGx5IHNsb3cuIFR1cm5lZCBvbiBvbmx5IGlmIGNoaz09MgpAQCAtMTgsOSArMTYsOSBAQAogc3RhdGljIGludCBjaGtfaWZfYWxsb2NhdGVkKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc2Vjbm8gc2VjLCBjaGFyICptc2cpCiB7CiAJc3RydWN0IHF1YWRfYnVmZmVyX2hlYWQgcWJoOwotCXVuc2lnbmVkICpibXA7CisJdTMyICpibXA7CiAJaWYgKCEoYm1wID0gaHBmc19tYXBfYml0bWFwKHMsIHNlYyA+PiAxNCwgJnFiaCwgImNoayIpKSkgZ290byBmYWlsOwotCWlmICgoYm1wWyhzZWMgJiAweDNmZmYpID4+IDVdID4+IChzZWMgJiAweDFmKSkgJiAxKSB7CisJaWYgKChjcHVfdG9fbGUzMihibXBbKHNlYyAmIDB4M2ZmZikgPj4gNV0pID4+IChzZWMgJiAweDFmKSkgJiAxKSB7CiAJCWhwZnNfZXJyb3IocywgInNlY3RvciAnJXMnIC0gJTA4eCBub3QgYWxsb2NhdGVkIGluIGJpdG1hcCIsIG1zZywgc2VjKTsKIAkJZ290byBmYWlsMTsKIAl9CkBAIC0yOCw3ICsyNiw3IEBACiAJaWYgKHNlYyA+PSBocGZzX3NiKHMpLT5zYl9kaXJiYW5kX3N0YXJ0ICYmIHNlYyA8IGhwZnNfc2IocyktPnNiX2RpcmJhbmRfc3RhcnQgKyBocGZzX3NiKHMpLT5zYl9kaXJiYW5kX3NpemUpIHsKIAkJdW5zaWduZWQgc3NlYyA9IChzZWMgLSBocGZzX3NiKHMpLT5zYl9kaXJiYW5kX3N0YXJ0KSAvIDQ7CiAJCWlmICghKGJtcCA9IGhwZnNfbWFwX2Rub2RlX2JpdG1hcChzLCAmcWJoKSkpIGdvdG8gZmFpbDsKLQkJaWYgKChibXBbc3NlYyA+PiA1XSA+PiAoc3NlYyAmIDB4MWYpKSAmIDEpIHsKKwkJaWYgKChsZTMyX3RvX2NwdShibXBbc3NlYyA+PiA1XSkgPj4gKHNzZWMgJiAweDFmKSkgJiAxKSB7CiAJCQlocGZzX2Vycm9yKHMsICJzZWN0b3IgJyVzJyAtICUwOHggbm90IGFsbG9jYXRlZCBpbiBkaXJlY3RvcnkgYml0bWFwIiwgbXNnLCBzZWMpOwogCQkJZ290byBmYWlsMTsKIAkJfQpAQCAtNzUsNyArNzMsNiBAQAogCQlocGZzX2Vycm9yKHMsICJCYWQgYWxsb2NhdGlvbiBzaXplOiAlZCIsIG4pOwogCQlyZXR1cm4gMDsKIAl9Ci0JbG9ja19zdXBlcihzKTsKIAlpZiAoYnMgIT0gfjB4M2ZmZikgewogCQlpZiAoIShibXAgPSBocGZzX21hcF9iaXRtYXAocywgbmVhciA+PiAxNCwgJnFiaCwgImFpYiIpKSkgZ290byB1bHM7CiAJfSBlbHNlIHsKQEAgLTg1LDEwICs4Miw2IEBACiAJCXJldCA9IGJzICsgbnI7CiAJCWdvdG8gcnQ7CiAJfQotCS8qaWYgKCF0c3RiaXRzKGJtcCwgbnIgKyBuLCBuICsgZm9yd2FyZCkpIHsKLQkJcmV0ID0gYnMgKyBuciArIG47Ci0JCWdvdG8gcnQ7Ci0JfSovCiAJcSA9IG5yICsgbjsgYiA9IDA7CiAJd2hpbGUgKChhID0gdHN0Yml0cyhibXAsIHEsIG4gKyBmb3J3YXJkKSkgIT0gMCkgewogCQlxICs9IGE7CkBAIC0xMDUsMTQgKzk4LDE0IEBACiAJCWdvdG8gcnQ7CiAJfQogCW5yID4+PSA1OwotCS8qZm9yIChpID0gbnIgKyAxOyBpICE9IG5yOyBpKyssIGkgJj0gMHgxZmYpIHsqLworCS8qZm9yIChpID0gbnIgKyAxOyBpICE9IG5yOyBpKyssIGkgJj0gMHgxZmYpICovCiAJaSA9IG5yOwogCWRvIHsKLQkJaWYgKCFibXBbaV0pIGdvdG8gY29udDsKLQkJaWYgKG4gKyBmb3J3YXJkID49IDB4M2YgJiYgYm1wW2ldICE9IC0xKSBnb3RvIGNvbnQ7CisJCWlmICghbGUzMl90b19jcHUoYm1wW2ldKSkgZ290byBjb250OworCQlpZiAobiArIGZvcndhcmQgPj0gMHgzZiAmJiBsZTMyX3RvX2NwdShibXBbaV0pICE9IDB4ZmZmZmZmZmYpIGdvdG8gY29udDsKIAkJcSA9IGk8PDU7CiAJCWlmIChpID4gMCkgewotCQkJdW5zaWduZWQgayA9IGJtcFtpLTFdOworCQkJdW5zaWduZWQgayA9IGxlMzJfdG9fY3B1KGJtcFtpLTFdKTsKIAkJCXdoaWxlIChrICYgMHg4MDAwMDAwMCkgewogCQkJCXEtLTsgayA8PD0gMTsKIAkJCX0KQEAgLTEzMiwxOCArMTI1LDE3IEBACiAJfSB3aGlsZSAoaSAhPSBucik7CiAJcnQ6CiAJaWYgKHJldCkgewotCQlpZiAoaHBmc19zYihzKS0+c2JfY2hrICYmICgocmV0ID4+IDE0KSAhPSAoYnMgPj4gMTQpIHx8IChibXBbKHJldCAmIDB4M2ZmZikgPj4gNV0gfCB+KCgoMSA8PCBuKSAtIDEpIDw8IChyZXQgJiAweDFmKSkpICE9IDB4ZmZmZmZmZmYpKSB7CisJCWlmIChocGZzX3NiKHMpLT5zYl9jaGsgJiYgKChyZXQgPj4gMTQpICE9IChicyA+PiAxNCkgfHwgKGxlMzJfdG9fY3B1KGJtcFsocmV0ICYgMHgzZmZmKSA+PiA1XSkgfCB+KCgoMSA8PCBuKSAtIDEpIDw8IChyZXQgJiAweDFmKSkpICE9IDB4ZmZmZmZmZmYpKSB7CiAJCQlocGZzX2Vycm9yKHMsICJBbGxvY2F0aW9uIGRvZXNuJ3Qgd29yayEgV2FudGVkICVkLCBhbGxvY2F0ZWQgYXQgJTA4eCIsIG4sIHJldCk7CiAJCQlyZXQgPSAwOwogCQkJZ290byBiOwogCQl9Ci0JCWJtcFsocmV0ICYgMHgzZmZmKSA+PiA1XSAmPSB+KCgoMSA8PCBuKSAtIDEpIDw8IChyZXQgJiAweDFmKSk7CisJCWJtcFsocmV0ICYgMHgzZmZmKSA+PiA1XSAmPSBjcHVfdG9fbGUzMih+KCgoMSA8PCBuKSAtIDEpIDw8IChyZXQgJiAweDFmKSkpOwogCQlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaCk7CiAJfQogCWI6CiAJaHBmc19icmVsc2U0KCZxYmgpOwogCXVsczoKLQl1bmxvY2tfc3VwZXIocyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTU1LDcgKzE0Nyw3IEBACiAgKgkJCQlzZWN0b3JzCiAgKi8KIAotc2Vjbm8gaHBmc19hbGxvY19zZWN0b3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzZWNubyBuZWFyLCB1bnNpZ25lZCBuLCBpbnQgZm9yd2FyZCwgaW50IGxvY2spCitzZWNubyBocGZzX2FsbG9jX3NlY3RvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHNlY25vIG5lYXIsIHVuc2lnbmVkIG4sIGludCBmb3J3YXJkKQogewogCXNlY25vIHNlYzsKIAlpbnQgaTsKQEAgLTE2Nyw3ICsxNTksNiBAQAogCQlmb3J3YXJkID0gLWZvcndhcmQ7CiAJCWZfcCA9IDE7CiAJfQotCWlmIChsb2NrKSBocGZzX2xvY2tfY3JlYXRpb24ocyk7CiAJbl9ibXBzID0gKHNiaS0+c2JfZnNfc2l6ZSArIDB4NDAwMCAtIDEpID4+IDE0OwogCWlmIChuZWFyICYmIG5lYXIgPCBzYmktPnNiX2ZzX3NpemUpIHsKIAkJaWYgKChzZWMgPSBhbGxvY19pbl9ibXAocywgbmVhciwgbiwgZl9wID8gZm9yd2FyZCA6IGZvcndhcmQvNCkpKSBnb3RvIHJldDsKQEAgLTIxNCwxOCArMjA1LDE3IEBACiAJcmV0OgogCWlmIChzZWMgJiYgZl9wKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBmb3J3YXJkOyBpKyspIHsKLQkJCWlmICghaHBmc19hbGxvY19pZl9wb3NzaWJsZV9ub2xvY2socywgc2VjICsgaSArIDEpKSB7CisJCQlpZiAoIWhwZnNfYWxsb2NfaWZfcG9zc2libGUocywgc2VjICsgaSArIDEpKSB7CiAJCQkJaHBmc19lcnJvcihzLCAiUHJlYWxsb2MgZG9lc24ndCB3b3JrISBXYW50ZWQgJWQsIGFsbG9jYXRlZCBhdCAlMDh4LCBjYW4ndCBhbGxvY2F0ZSAlZCIsIGZvcndhcmQsIHNlYywgaSk7CiAJCQkJc2VjID0gMDsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQogCX0KLQlpZiAobG9jaykgaHBmc191bmxvY2tfY3JlYXRpb24ocyk7CiAJcmV0dXJuIHNlYzsKIH0KIAotc3RhdGljIHNlY25vIGFsbG9jX2luX2RpcmJhbmQoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzZWNubyBuZWFyLCBpbnQgbG9jaykKK3N0YXRpYyBzZWNubyBhbGxvY19pbl9kaXJiYW5kKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc2Vjbm8gbmVhcikKIHsKIAl1bnNpZ25lZCBuciA9IG5lYXI7CiAJc2Vjbm8gc2VjOwpAQCAtMjM2LDQ5ICsyMjYsMzUgQEAKIAkJbnIgPSBzYmktPnNiX2RpcmJhbmRfc3RhcnQgKyBzYmktPnNiX2RpcmJhbmRfc2l6ZSAtIDQ7CiAJbnIgLT0gc2JpLT5zYl9kaXJiYW5kX3N0YXJ0OwogCW5yID4+PSAyOwotCWlmIChsb2NrKSBocGZzX2xvY2tfY3JlYXRpb24ocyk7CiAJc2VjID0gYWxsb2NfaW5fYm1wKHMsICh+MHgzZmZmKSB8IG5yLCAxLCAwKTsKLQlpZiAobG9jaykgaHBmc191bmxvY2tfY3JlYXRpb24ocyk7CiAJaWYgKCFzZWMpIHJldHVybiAwOwogCXJldHVybiAoKHNlYyAmIDB4M2ZmZikgPDwgMikgKyBzYmktPnNiX2RpcmJhbmRfc3RhcnQ7CiB9CiAKIC8qIEFsbG9jIHNlY3RvciBpZiBpdCdzIGZyZWUgKi8KIAotc3RhdGljIGludCBocGZzX2FsbG9jX2lmX3Bvc3NpYmxlX25vbG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHNlY25vIHNlYykKK2ludCBocGZzX2FsbG9jX2lmX3Bvc3NpYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc2Vjbm8gc2VjKQogewogCXN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkIHFiaDsKLQl1bnNpZ25lZCAqYm1wOwotCWxvY2tfc3VwZXIocyk7CisJdTMyICpibXA7CiAJaWYgKCEoYm1wID0gaHBmc19tYXBfYml0bWFwKHMsIHNlYyA+PiAxNCwgJnFiaCwgImFpcCIpKSkgZ290byBlbmQ7Ci0JaWYgKGJtcFsoc2VjICYgMHgzZmZmKSA+PiA1XSAmICgxIDw8IChzZWMgJiAweDFmKSkpIHsKLQkJYm1wWyhzZWMgJiAweDNmZmYpID4+IDVdICY9IH4oMSA8PCAoc2VjICYgMHgxZikpOworCWlmIChsZTMyX3RvX2NwdShibXBbKHNlYyAmIDB4M2ZmZikgPj4gNV0pICYgKDEgPDwgKHNlYyAmIDB4MWYpKSkgeworCQlibXBbKHNlYyAmIDB4M2ZmZikgPj4gNV0gJj0gY3B1X3RvX2xlMzIofigxIDw8IChzZWMgJiAweDFmKSkpOwogCQlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaCk7CiAJCWhwZnNfYnJlbHNlNCgmcWJoKTsKLQkJdW5sb2NrX3N1cGVyKHMpOwogCQlyZXR1cm4gMTsKIAl9CiAJaHBmc19icmVsc2U0KCZxYmgpOwogCWVuZDoKLQl1bmxvY2tfc3VwZXIocyk7CiAJcmV0dXJuIDA7CiB9CiAKLWludCBocGZzX2FsbG9jX2lmX3Bvc3NpYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc2Vjbm8gc2VjKQotewotCWludCByOwotCWhwZnNfbG9ja19jcmVhdGlvbihzKTsKLQlyID0gaHBmc19hbGxvY19pZl9wb3NzaWJsZV9ub2xvY2socywgc2VjKTsKLQlocGZzX3VubG9ja19jcmVhdGlvbihzKTsKLQlyZXR1cm4gcjsKLX0KLQogLyogRnJlZSBzZWN0b3JzIGluIGJpdG1hcHMgKi8KIAogdm9pZCBocGZzX2ZyZWVfc2VjdG9ycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHNlY25vIHNlYywgdW5zaWduZWQgbikKIHsKIAlzdHJ1Y3QgcXVhZF9idWZmZXJfaGVhZCBxYmg7Ci0JdW5zaWduZWQgKmJtcDsKKwl1MzIgKmJtcDsKIAlzdHJ1Y3QgaHBmc19zYl9pbmZvICpzYmkgPSBocGZzX3NiKHMpOwogCS8qcHJpbnRrKCIyIC0gIik7Ki8KIAlpZiAoIW4pIHJldHVybjsKQEAgLTI4NiwyNiArMjYyLDIyIEBACiAJCWhwZnNfZXJyb3IocywgIlRyeWluZyB0byBmcmVlIHJlc2VydmVkIHNlY3RvciAlMDh4Iiwgc2VjKTsKIAkJcmV0dXJuOwogCX0KLQlsb2NrX3N1cGVyKHMpOwogCXNiaS0+c2JfbWF4X2Z3ZF9hbGxvYyArPSBuID4gMHhmZmZmID8gMHhmZmZmIDogbjsKIAlpZiAoc2JpLT5zYl9tYXhfZndkX2FsbG9jID4gMHhmZmZmZmYpIHNiaS0+c2JfbWF4X2Z3ZF9hbGxvYyA9IDB4ZmZmZmZmOwogCW5ld19tYXA6CiAJaWYgKCEoYm1wID0gaHBmc19tYXBfYml0bWFwKHMsIHNlYyA+PiAxNCwgJnFiaCwgImZyZWUiKSkpIHsKLQkJdW5sb2NrX3N1cGVyKHMpOwogCQlyZXR1cm47CiAJfQkKIAluZXdfdHN0OgotCWlmICgoYm1wWyhzZWMgJiAweDNmZmYpID4+IDVdID4+IChzZWMgJiAweDFmKSAmIDEpKSB7CisJaWYgKChsZTMyX3RvX2NwdShibXBbKHNlYyAmIDB4M2ZmZikgPj4gNV0pID4+IChzZWMgJiAweDFmKSAmIDEpKSB7CiAJCWhwZnNfZXJyb3IocywgInNlY3RvciAlMDh4IG5vdCBhbGxvY2F0ZWQiLCBzZWMpOwogCQlocGZzX2JyZWxzZTQoJnFiaCk7Ci0JCXVubG9ja19zdXBlcihzKTsKIAkJcmV0dXJuOwogCX0KLQlibXBbKHNlYyAmIDB4M2ZmZikgPj4gNV0gfD0gMSA8PCAoc2VjICYgMHgxZik7CisJYm1wWyhzZWMgJiAweDNmZmYpID4+IDVdIHw9IGNwdV90b19sZTMyKDEgPDwgKHNlYyAmIDB4MWYpKTsKIAlpZiAoIS0tbikgewogCQlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaCk7CiAJCWhwZnNfYnJlbHNlNCgmcWJoKTsKLQkJdW5sb2NrX3N1cGVyKHMpOwogCQlyZXR1cm47CiAJfQkKIAlpZiAoISgrK3NlYyAmIDB4M2ZmZikpIHsKQEAgLTMyNywxMyArMjk5LDEzIEBACiAJaW50IG5fYm1wcyA9IChocGZzX3NiKHMpLT5zYl9mc19zaXplICsgMHg0MDAwIC0gMSkgPj4gMTQ7CiAJaW50IGIgPSBocGZzX3NiKHMpLT5zYl9jX2JpdG1hcCAmIDB4MGZmZmZmZmY7CiAJaW50IGksIGo7Ci0JdW5zaWduZWQgKmJtcDsKKwl1MzIgKmJtcDsKIAlzdHJ1Y3QgcXVhZF9idWZmZXJfaGVhZCBxYmg7CiAJaWYgKChibXAgPSBocGZzX21hcF9kbm9kZV9iaXRtYXAocywgJnFiaCkpKSB7CiAJCWZvciAoaiA9IDA7IGogPCA1MTI7IGorKykgewogCQkJdW5zaWduZWQgazsKLQkJCWlmICghYm1wW2pdKSBjb250aW51ZTsKLQkJCWZvciAoayA9IGJtcFtqXTsgazsgayA+Pj0gMSkgaWYgKGsgJiAxKSBpZiAoIS0tbikgeworCQkJaWYgKCFsZTMyX3RvX2NwdShibXBbal0pKSBjb250aW51ZTsKKwkJCWZvciAoayA9IGxlMzJfdG9fY3B1KGJtcFtqXSk7IGs7IGsgPj49IDEpIGlmIChrICYgMSkgaWYgKCEtLW4pIHsKIAkJCQlocGZzX2JyZWxzZTQoJnFiaCk7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CkBAIC0zNTIsMTAgKzMyNCwxMCBAQAogCWNoa19ibXA6CiAJaWYgKGJtcCkgewogCQlmb3IgKGogPSAwOyBqIDwgNTEyOyBqKyspIHsKLQkJCXVuc2lnbmVkIGs7Ci0JCQlpZiAoIWJtcFtqXSkgY29udGludWU7CisJCQl1MzIgazsKKwkJCWlmICghbGUzMl90b19jcHUoYm1wW2pdKSkgY29udGludWU7CiAJCQlmb3IgKGsgPSAweGY7IGs7IGsgPDw9IDQpCi0JCQkJaWYgKChibXBbal0gJiBrKSA9PSBrKSB7CisJCQkJaWYgKChsZTMyX3RvX2NwdShibXBbal0pICYgaykgPT0gaykgewogCQkJCQlpZiAoIS0tbikgewogCQkJCQkJaHBmc19icmVsc2U0KCZxYmgpOwogCQkJCQkJcmV0dXJuIDA7CkBAIC0zNzksNDQgKzM1MSw0MCBAQAogCQlocGZzX2ZyZWVfc2VjdG9ycyhzLCBkbm8sIDQpOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkIHFiaDsKLQkJdW5zaWduZWQgKmJtcDsKKwkJdTMyICpibXA7CiAJCXVuc2lnbmVkIHNzZWMgPSAoZG5vIC0gaHBmc19zYihzKS0+c2JfZGlyYmFuZF9zdGFydCkgLyA0OwotCQlsb2NrX3N1cGVyKHMpOwogCQlpZiAoIShibXAgPSBocGZzX21hcF9kbm9kZV9iaXRtYXAocywgJnFiaCkpKSB7Ci0JCQl1bmxvY2tfc3VwZXIocyk7CiAJCQlyZXR1cm47CiAJCX0KLQkJYm1wW3NzZWMgPj4gNV0gfD0gMSA8PCAoc3NlYyAmIDB4MWYpOworCQlibXBbc3NlYyA+PiA1XSB8PSBjcHVfdG9fbGUzMigxIDw8IChzc2VjICYgMHgxZikpOwogCQlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaCk7CiAJCWhwZnNfYnJlbHNlNCgmcWJoKTsKLQkJdW5sb2NrX3N1cGVyKHMpOwogCX0KIH0KIAogc3RydWN0IGRub2RlICpocGZzX2FsbG9jX2Rub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc2Vjbm8gbmVhciwKLQkJCSBkbm9kZV9zZWNubyAqZG5vLCBzdHJ1Y3QgcXVhZF9idWZmZXJfaGVhZCAqcWJoLAotCQkJIGludCBsb2NrKQorCQkJIGRub2RlX3NlY25vICpkbm8sIHN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkICpxYmgpCiB7CiAJc3RydWN0IGRub2RlICpkOwogCWlmIChocGZzX2NvdW50X29uZV9iaXRtYXAocywgaHBmc19zYihzKS0+c2JfZG1hcCkgPiBGUkVFX0ROT0RFU19BREQpIHsKLQkJaWYgKCEoKmRubyA9IGFsbG9jX2luX2RpcmJhbmQocywgbmVhciwgbG9jaykpKQotCQkJaWYgKCEoKmRubyA9IGhwZnNfYWxsb2Nfc2VjdG9yKHMsIG5lYXIsIDQsIDAsIGxvY2spKSkgcmV0dXJuIE5VTEw7CisJCWlmICghKCpkbm8gPSBhbGxvY19pbl9kaXJiYW5kKHMsIG5lYXIpKSkKKwkJCWlmICghKCpkbm8gPSBocGZzX2FsbG9jX3NlY3RvcihzLCBuZWFyLCA0LCAwKSkpIHJldHVybiBOVUxMOwogCX0gZWxzZSB7Ci0JCWlmICghKCpkbm8gPSBocGZzX2FsbG9jX3NlY3RvcihzLCBuZWFyLCA0LCAwLCBsb2NrKSkpCi0JCQlpZiAoISgqZG5vID0gYWxsb2NfaW5fZGlyYmFuZChzLCBuZWFyLCBsb2NrKSkpIHJldHVybiBOVUxMOworCQlpZiAoISgqZG5vID0gaHBmc19hbGxvY19zZWN0b3IocywgbmVhciwgNCwgMCkpKQorCQkJaWYgKCEoKmRubyA9IGFsbG9jX2luX2RpcmJhbmQocywgbmVhcikpKSByZXR1cm4gTlVMTDsKIAl9CiAJaWYgKCEoZCA9IGhwZnNfZ2V0XzRzZWN0b3JzKHMsICpkbm8sIHFiaCkpKSB7CiAJCWhwZnNfZnJlZV9kbm9kZShzLCAqZG5vKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCW1lbXNldChkLCAwLCAyMDQ4KTsKLQlkLT5tYWdpYyA9IEROT0RFX01BR0lDOwotCWQtPmZpcnN0X2ZyZWUgPSA1MjsKKwlkLT5tYWdpYyA9IGNwdV90b19sZTMyKEROT0RFX01BR0lDKTsKKwlkLT5maXJzdF9mcmVlID0gY3B1X3RvX2xlMzIoNTIpOwogCWQtPmRpcmVudFswXSA9IDMyOwogCWQtPmRpcmVudFsyXSA9IDg7CiAJZC0+ZGlyZW50WzMwXSA9IDE7CiAJZC0+ZGlyZW50WzMxXSA9IDI1NTsKLQlkLT5zZWxmID0gKmRubzsKKwlkLT5zZWxmID0gY3B1X3RvX2xlMzIoKmRubyk7CiAJcmV0dXJuIGQ7CiB9CiAKQEAgLTQyNCwxNiArMzkyLDE2IEBACiAJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoKQogewogCXN0cnVjdCBmbm9kZSAqZjsKLQlpZiAoISgqZm5vID0gaHBmc19hbGxvY19zZWN0b3IocywgbmVhciwgMSwgRk5PREVfQUxMT0NfRldELCAxKSkpIHJldHVybiBOVUxMOworCWlmICghKCpmbm8gPSBocGZzX2FsbG9jX3NlY3RvcihzLCBuZWFyLCAxLCBGTk9ERV9BTExPQ19GV0QpKSkgcmV0dXJuIE5VTEw7CiAJaWYgKCEoZiA9IGhwZnNfZ2V0X3NlY3RvcihzLCAqZm5vLCBiaCkpKSB7CiAJCWhwZnNfZnJlZV9zZWN0b3JzKHMsICpmbm8sIDEpOwogCQlyZXR1cm4gTlVMTDsKIAl9CQogCW1lbXNldChmLCAwLCA1MTIpOwotCWYtPm1hZ2ljID0gRk5PREVfTUFHSUM7Ci0JZi0+ZWFfb2ZmcyA9IDB4YzQ7CisJZi0+bWFnaWMgPSBjcHVfdG9fbGUzMihGTk9ERV9NQUdJQyk7CisJZi0+ZWFfb2ZmcyA9IGNwdV90b19sZTE2KDB4YzQpOwogCWYtPmJ0cmVlLm5fZnJlZV9ub2RlcyA9IDg7Ci0JZi0+YnRyZWUuZmlyc3RfZnJlZSA9IDg7CisJZi0+YnRyZWUuZmlyc3RfZnJlZSA9IGNwdV90b19sZTE2KDgpOwogCXJldHVybiBmOwogfQogCkBAIC00NDEsMTYgKzQwOSwxNiBAQAogCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCkKIHsKIAlzdHJ1Y3QgYW5vZGUgKmE7Ci0JaWYgKCEoKmFubyA9IGhwZnNfYWxsb2Nfc2VjdG9yKHMsIG5lYXIsIDEsIEFOT0RFX0FMTE9DX0ZXRCwgMSkpKSByZXR1cm4gTlVMTDsKKwlpZiAoISgqYW5vID0gaHBmc19hbGxvY19zZWN0b3IocywgbmVhciwgMSwgQU5PREVfQUxMT0NfRldEKSkpIHJldHVybiBOVUxMOwogCWlmICghKGEgPSBocGZzX2dldF9zZWN0b3IocywgKmFubywgYmgpKSkgewogCQlocGZzX2ZyZWVfc2VjdG9ycyhzLCAqYW5vLCAxKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCW1lbXNldChhLCAwLCA1MTIpOwotCWEtPm1hZ2ljID0gQU5PREVfTUFHSUM7Ci0JYS0+c2VsZiA9ICphbm87CisJYS0+bWFnaWMgPSBjcHVfdG9fbGUzMihBTk9ERV9NQUdJQyk7CisJYS0+c2VsZiA9IGNwdV90b19sZTMyKCphbm8pOwogCWEtPmJ0cmVlLm5fZnJlZV9ub2RlcyA9IDQwOwogCWEtPmJ0cmVlLm5fdXNlZF9ub2RlcyA9IDA7Ci0JYS0+YnRyZWUuZmlyc3RfZnJlZSA9IDg7CisJYS0+YnRyZWUuZmlyc3RfZnJlZSA9IGNwdV90b19sZTE2KDgpOwogCXJldHVybiBhOwogfQpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9hbm9kZS5jIGIvZnMvaHBmcy9hbm9kZS5jCmluZGV4IDZhMmYwNGIuLjA4YjUwM2UgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvYW5vZGUuYworKysgYi9mcy9ocGZzL2Fub2RlLmMKQEAgLTIyLDggKzIyLDggQEAKIAlpZiAoaHBmc19zYihzKS0+c2JfY2hrKSBpZiAoaHBmc19zdG9wX2N5Y2xlcyhzLCBhLCAmYzEsICZjMiwgImhwZnNfYnBsdXNfbG9va3VwIikpIHJldHVybiAtMTsKIAlpZiAoYnRyZWUtPmludGVybmFsKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBidHJlZS0+bl91c2VkX25vZGVzOyBpKyspCi0JCQlpZiAoYnRyZWUtPnUuaW50ZXJuYWxbaV0uZmlsZV9zZWNubyA+IHNlYykgewotCQkJCWEgPSBidHJlZS0+dS5pbnRlcm5hbFtpXS5kb3duOworCQkJaWYgKGxlMzJfdG9fY3B1KGJ0cmVlLT51LmludGVybmFsW2ldLmZpbGVfc2Vjbm8pID4gc2VjKSB7CisJCQkJYSA9IGxlMzJfdG9fY3B1KGJ0cmVlLT51LmludGVybmFsW2ldLmRvd24pOwogCQkJCWJyZWxzZShiaCk7CiAJCQkJaWYgKCEoYW5vZGUgPSBocGZzX21hcF9hbm9kZShzLCBhLCAmYmgpKSkgcmV0dXJuIC0xOwogCQkJCWJ0cmVlID0gJmFub2RlLT5idHJlZTsKQEAgLTM0LDE4ICszNCwxOCBAQAogCQlyZXR1cm4gLTE7CiAJfQogCWZvciAoaSA9IDA7IGkgPCBidHJlZS0+bl91c2VkX25vZGVzOyBpKyspCi0JCWlmIChidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vIDw9IHNlYyAmJgotCQkgICAgYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZmlsZV9zZWNubyArIGJ0cmVlLT51LmV4dGVybmFsW2ldLmxlbmd0aCA+IHNlYykgewotCQkJYSA9IGJ0cmVlLT51LmV4dGVybmFsW2ldLmRpc2tfc2Vjbm8gKyBzZWMgLSBidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vOworCQlpZiAobGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZmlsZV9zZWNubykgPD0gc2VjICYmCisJCSAgICBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vKSArIGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW2ldLmxlbmd0aCkgPiBzZWMpIHsKKwkJCWEgPSBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtpXS5kaXNrX3NlY25vKSArIHNlYyAtIGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW2ldLmZpbGVfc2Vjbm8pOwogCQkJaWYgKGhwZnNfc2IocyktPnNiX2NoaykgaWYgKGhwZnNfY2hrX3NlY3RvcnMocywgYSwgMSwgImRhdGEiKSkgewogCQkJCWJyZWxzZShiaCk7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQogCQkJaWYgKGlub2RlKSB7CiAJCQkJc3RydWN0IGhwZnNfaW5vZGVfaW5mbyAqaHBmc19pbm9kZSA9IGhwZnNfaShpbm9kZSk7Ci0JCQkJaHBmc19pbm9kZS0+aV9maWxlX3NlYyA9IGJ0cmVlLT51LmV4dGVybmFsW2ldLmZpbGVfc2Vjbm87Ci0JCQkJaHBmc19pbm9kZS0+aV9kaXNrX3NlYyA9IGJ0cmVlLT51LmV4dGVybmFsW2ldLmRpc2tfc2Vjbm87Ci0JCQkJaHBmc19pbm9kZS0+aV9uX3NlY3MgPSBidHJlZS0+dS5leHRlcm5hbFtpXS5sZW5ndGg7CisJCQkJaHBmc19pbm9kZS0+aV9maWxlX3NlYyA9IGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW2ldLmZpbGVfc2Vjbm8pOworCQkJCWhwZnNfaW5vZGUtPmlfZGlza19zZWMgPSBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtpXS5kaXNrX3NlY25vKTsKKwkJCQlocGZzX2lub2RlLT5pX25fc2VjcyA9IGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW2ldLmxlbmd0aCk7CiAJCQl9CiAJCQlicmVsc2UoYmgpOwogCQkJcmV0dXJuIGE7CkBAIC04Myw4ICs4Myw4IEBACiAJCXJldHVybiAtMTsKIAl9CiAJaWYgKGJ0cmVlLT5pbnRlcm5hbCkgewotCQlhID0gYnRyZWUtPnUuaW50ZXJuYWxbbl0uZG93bjsKLQkJYnRyZWUtPnUuaW50ZXJuYWxbbl0uZmlsZV9zZWNubyA9IC0xOworCQlhID0gbGUzMl90b19jcHUoYnRyZWUtPnUuaW50ZXJuYWxbbl0uZG93bik7CisJCWJ0cmVlLT51LmludGVybmFsW25dLmZpbGVfc2Vjbm8gPSBjcHVfdG9fbGUzMigtMSk7CiAJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJYnJlbHNlKGJoKTsKIAkJaWYgKGhwZnNfc2IocyktPnNiX2NoaykKQEAgLTk0LDE1ICs5NCwxNSBAQAogCQlnb3RvIGdvX2Rvd247CiAJfQogCWlmIChuID49IDApIHsKLQkJaWYgKGJ0cmVlLT51LmV4dGVybmFsW25dLmZpbGVfc2Vjbm8gKyBidHJlZS0+dS5leHRlcm5hbFtuXS5sZW5ndGggIT0gZnNlY25vKSB7CisJCWlmIChsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtuXS5maWxlX3NlY25vKSArIGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW25dLmxlbmd0aCkgIT0gZnNlY25vKSB7CiAJCQlocGZzX2Vycm9yKHMsICJhbGxvY2F0ZWQgc2l6ZSAlMDh4LCB0cnlpbmcgdG8gYWRkIHNlY3RvciAlMDh4LCAlY25vZGUgJTA4eCIsCi0JCQkJYnRyZWUtPnUuZXh0ZXJuYWxbbl0uZmlsZV9zZWNubyArIGJ0cmVlLT51LmV4dGVybmFsW25dLmxlbmd0aCwgZnNlY25vLAorCQkJCWxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW25dLmZpbGVfc2Vjbm8pICsgbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbbl0ubGVuZ3RoKSwgZnNlY25vLAogCQkJCWZub2Q/J2YnOidhJywgbm9kZSk7CiAJCQlicmVsc2UoYmgpOwogCQkJcmV0dXJuIC0xOwogCQl9Ci0JCWlmIChocGZzX2FsbG9jX2lmX3Bvc3NpYmxlKHMsIHNlID0gYnRyZWUtPnUuZXh0ZXJuYWxbbl0uZGlza19zZWNubyArIGJ0cmVlLT51LmV4dGVybmFsW25dLmxlbmd0aCkpIHsKLQkJCWJ0cmVlLT51LmV4dGVybmFsW25dLmxlbmd0aCsrOworCQlpZiAoaHBmc19hbGxvY19pZl9wb3NzaWJsZShzLCBzZSA9IGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW25dLmRpc2tfc2Vjbm8pICsgbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbbl0ubGVuZ3RoKSkpIHsKKwkJCWJ0cmVlLT51LmV4dGVybmFsW25dLmxlbmd0aCA9IGNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW25dLmxlbmd0aCkgKyAxKTsKIAkJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJCWJyZWxzZShiaCk7CiAJCQlyZXR1cm4gc2U7CkBAIC0xMTUsMjAgKzExNSwyMCBAQAogCQl9CiAJCXNlID0gIWZub2QgPyBub2RlIDogKG5vZGUgKyAxNjM4NCkgJiB+MTYzODM7CiAJfQkKLQlpZiAoIShzZSA9IGhwZnNfYWxsb2Nfc2VjdG9yKHMsIHNlLCAxLCBmc2Vjbm8qQUxMT0NfTT5BTExPQ19GV0RfTUFYID8gQUxMT0NfRldEX01BWCA6IGZzZWNubypBTExPQ19NPEFMTE9DX0ZXRF9NSU4gPyBBTExPQ19GV0RfTUlOIDogZnNlY25vKkFMTE9DX00sIDEpKSkgeworCWlmICghKHNlID0gaHBmc19hbGxvY19zZWN0b3Iocywgc2UsIDEsIGZzZWNubypBTExPQ19NPkFMTE9DX0ZXRF9NQVggPyBBTExPQ19GV0RfTUFYIDogZnNlY25vKkFMTE9DX008QUxMT0NfRldEX01JTiA/IEFMTE9DX0ZXRF9NSU4gOiBmc2Vjbm8qQUxMT0NfTSkpKSB7CiAJCWJyZWxzZShiaCk7CiAJCXJldHVybiAtMTsKIAl9Ci0JZnMgPSBuIDwgMCA/IDAgOiBidHJlZS0+dS5leHRlcm5hbFtuXS5maWxlX3NlY25vICsgYnRyZWUtPnUuZXh0ZXJuYWxbbl0ubGVuZ3RoOworCWZzID0gbiA8IDAgPyAwIDogbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbbl0uZmlsZV9zZWNubykgKyBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtuXS5sZW5ndGgpOwogCWlmICghYnRyZWUtPm5fZnJlZV9ub2RlcykgewotCQl1cCA9IGEgIT0gbm9kZSA/IGFub2RlLT51cCA6IC0xOworCQl1cCA9IGEgIT0gbm9kZSA/IGxlMzJfdG9fY3B1KGFub2RlLT51cCkgOiAtMTsKIAkJaWYgKCEoYW5vZGUgPSBocGZzX2FsbG9jX2Fub2RlKHMsIGEsICZuYSwgJmJoMSkpKSB7CiAJCQlicmVsc2UoYmgpOwogCQkJaHBmc19mcmVlX3NlY3RvcnMocywgc2UsIDEpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJCWlmIChhID09IG5vZGUgJiYgZm5vZCkgewotCQkJYW5vZGUtPnVwID0gbm9kZTsKKwkJCWFub2RlLT51cCA9IGNwdV90b19sZTMyKG5vZGUpOwogCQkJYW5vZGUtPmJ0cmVlLmZub2RlX3BhcmVudCA9IDE7CiAJCQlhbm9kZS0+YnRyZWUubl91c2VkX25vZGVzID0gYnRyZWUtPm5fdXNlZF9ub2RlczsKIAkJCWFub2RlLT5idHJlZS5maXJzdF9mcmVlID0gYnRyZWUtPmZpcnN0X2ZyZWU7CkBAIC0xMzcsOSArMTM3LDkgQEAKIAkJCWJ0cmVlLT5pbnRlcm5hbCA9IDE7CiAJCQlidHJlZS0+bl9mcmVlX25vZGVzID0gMTE7CiAJCQlidHJlZS0+bl91c2VkX25vZGVzID0gMTsKLQkJCWJ0cmVlLT5maXJzdF9mcmVlID0gKGNoYXIgKikmKGJ0cmVlLT51LmludGVybmFsWzFdKSAtIChjaGFyICopYnRyZWU7Ci0JCQlidHJlZS0+dS5pbnRlcm5hbFswXS5maWxlX3NlY25vID0gLTE7Ci0JCQlidHJlZS0+dS5pbnRlcm5hbFswXS5kb3duID0gbmE7CisJCQlidHJlZS0+Zmlyc3RfZnJlZSA9IGNwdV90b19sZTE2KChjaGFyICopJihidHJlZS0+dS5pbnRlcm5hbFsxXSkgLSAoY2hhciAqKWJ0cmVlKTsKKwkJCWJ0cmVlLT51LmludGVybmFsWzBdLmZpbGVfc2Vjbm8gPSBjcHVfdG9fbGUzMigtMSk7CisJCQlidHJlZS0+dS5pbnRlcm5hbFswXS5kb3duID0gY3B1X3RvX2xlMzIobmEpOwogCQkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQl9IGVsc2UgaWYgKCEocmFub2RlID0gaHBmc19hbGxvY19hbm9kZShzLCAvKmEqLzAsICZyYSwgJmJoMikpKSB7CiAJCQlicmVsc2UoYmgpOwpAQCAtMTUzLDE1ICsxNTMsMTUgQEAKIAkJYnRyZWUgPSAmYW5vZGUtPmJ0cmVlOwogCX0KIAlidHJlZS0+bl9mcmVlX25vZGVzLS07IG4gPSBidHJlZS0+bl91c2VkX25vZGVzKys7Ci0JYnRyZWUtPmZpcnN0X2ZyZWUgKz0gMTI7Ci0JYnRyZWUtPnUuZXh0ZXJuYWxbbl0uZGlza19zZWNubyA9IHNlOwotCWJ0cmVlLT51LmV4dGVybmFsW25dLmZpbGVfc2Vjbm8gPSBmczsKLQlidHJlZS0+dS5leHRlcm5hbFtuXS5sZW5ndGggPSAxOworCWJ0cmVlLT5maXJzdF9mcmVlID0gY3B1X3RvX2xlMTYobGUxNl90b19jcHUoYnRyZWUtPmZpcnN0X2ZyZWUpICsgMTIpOworCWJ0cmVlLT51LmV4dGVybmFsW25dLmRpc2tfc2Vjbm8gPSBjcHVfdG9fbGUzMihzZSk7CisJYnRyZWUtPnUuZXh0ZXJuYWxbbl0uZmlsZV9zZWNubyA9IGNwdV90b19sZTMyKGZzKTsKKwlidHJlZS0+dS5leHRlcm5hbFtuXS5sZW5ndGggPSBjcHVfdG9fbGUzMigxKTsKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJYnJlbHNlKGJoKTsKIAlpZiAoKGEgPT0gbm9kZSAmJiBmbm9kKSB8fCBuYSA9PSAtMSkgcmV0dXJuIHNlOwogCWMyID0gMDsKLQl3aGlsZSAodXAgIT0gLTEpIHsKKwl3aGlsZSAodXAgIT0gKGFub2RlX3NlY25vKS0xKSB7CiAJCXN0cnVjdCBhbm9kZSAqbmV3X2Fub2RlOwogCQlpZiAoaHBmc19zYihzKS0+c2JfY2hrKQogCQkJaWYgKGhwZnNfc3RvcF9jeWNsZXMocywgdXAsICZjMSwgJmMyLCAiaHBmc19hZGRfc2VjdG9yX3RvX2J0cmVlICMyIikpIHJldHVybiAtMTsKQEAgLTE3NCw0NyArMTc0LDQ3IEBACiAJCX0KIAkJaWYgKGJ0cmVlLT5uX2ZyZWVfbm9kZXMpIHsKIAkJCWJ0cmVlLT5uX2ZyZWVfbm9kZXMtLTsgbiA9IGJ0cmVlLT5uX3VzZWRfbm9kZXMrKzsKLQkJCWJ0cmVlLT5maXJzdF9mcmVlICs9IDg7Ci0JCQlidHJlZS0+dS5pbnRlcm5hbFtuXS5maWxlX3NlY25vID0gLTE7Ci0JCQlidHJlZS0+dS5pbnRlcm5hbFtuXS5kb3duID0gbmE7Ci0JCQlidHJlZS0+dS5pbnRlcm5hbFtuLTFdLmZpbGVfc2Vjbm8gPSBmczsKKwkJCWJ0cmVlLT5maXJzdF9mcmVlID0gY3B1X3RvX2xlMTYobGUxNl90b19jcHUoYnRyZWUtPmZpcnN0X2ZyZWUpICsgOCk7CisJCQlidHJlZS0+dS5pbnRlcm5hbFtuXS5maWxlX3NlY25vID0gY3B1X3RvX2xlMzIoLTEpOworCQkJYnRyZWUtPnUuaW50ZXJuYWxbbl0uZG93biA9IGNwdV90b19sZTMyKG5hKTsKKwkJCWJ0cmVlLT51LmludGVybmFsW24tMV0uZmlsZV9zZWNubyA9IGNwdV90b19sZTMyKGZzKTsKIAkJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJCWJyZWxzZShiaCk7CiAJCQlicmVsc2UoYmgyKTsKIAkJCWhwZnNfZnJlZV9zZWN0b3JzKHMsIHJhLCAxKTsKIAkJCWlmICgoYW5vZGUgPSBocGZzX21hcF9hbm9kZShzLCBuYSwgJmJoKSkpIHsKLQkJCQlhbm9kZS0+dXAgPSB1cDsKKwkJCQlhbm9kZS0+dXAgPSBjcHVfdG9fbGUzMih1cCk7CiAJCQkJYW5vZGUtPmJ0cmVlLmZub2RlX3BhcmVudCA9IHVwID09IG5vZGUgJiYgZm5vZDsKIAkJCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCQkJYnJlbHNlKGJoKTsKIAkJCX0KIAkJCXJldHVybiBzZTsKIAkJfQotCQl1cCA9IHVwICE9IG5vZGUgPyBhbm9kZS0+dXAgOiAtMTsKLQkJYnRyZWUtPnUuaW50ZXJuYWxbYnRyZWUtPm5fdXNlZF9ub2RlcyAtIDFdLmZpbGVfc2Vjbm8gPSAvKmZzKi8tMTsKKwkJdXAgPSB1cCAhPSBub2RlID8gbGUzMl90b19jcHUoYW5vZGUtPnVwKSA6IC0xOworCQlidHJlZS0+dS5pbnRlcm5hbFtidHJlZS0+bl91c2VkX25vZGVzIC0gMV0uZmlsZV9zZWNubyA9IGNwdV90b19sZTMyKC8qZnMqLy0xKTsKIAkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQlicmVsc2UoYmgpOwogCQlhID0gbmE7CiAJCWlmICgobmV3X2Fub2RlID0gaHBmc19hbGxvY19hbm9kZShzLCBhLCAmbmEsICZiaCkpKSB7CiAJCQlhbm9kZSA9IG5ld19hbm9kZTsKLQkJCS8qYW5vZGUtPnVwID0gdXAgIT0gLTEgPyB1cCA6IHJhOyovCisJCQkvKmFub2RlLT51cCA9IGNwdV90b19sZTMyKHVwICE9IC0xID8gdXAgOiByYSk7Ki8KIAkJCWFub2RlLT5idHJlZS5pbnRlcm5hbCA9IDE7CiAJCQlhbm9kZS0+YnRyZWUubl91c2VkX25vZGVzID0gMTsKIAkJCWFub2RlLT5idHJlZS5uX2ZyZWVfbm9kZXMgPSA1OTsKLQkJCWFub2RlLT5idHJlZS5maXJzdF9mcmVlID0gMTY7Ci0JCQlhbm9kZS0+YnRyZWUudS5pbnRlcm5hbFswXS5kb3duID0gYTsKLQkJCWFub2RlLT5idHJlZS51LmludGVybmFsWzBdLmZpbGVfc2Vjbm8gPSAtMTsKKwkJCWFub2RlLT5idHJlZS5maXJzdF9mcmVlID0gY3B1X3RvX2xlMTYoMTYpOworCQkJYW5vZGUtPmJ0cmVlLnUuaW50ZXJuYWxbMF0uZG93biA9IGNwdV90b19sZTMyKGEpOworCQkJYW5vZGUtPmJ0cmVlLnUuaW50ZXJuYWxbMF0uZmlsZV9zZWNubyA9IGNwdV90b19sZTMyKC0xKTsKIAkJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJCWJyZWxzZShiaCk7CiAJCQlpZiAoKGFub2RlID0gaHBmc19tYXBfYW5vZGUocywgYSwgJmJoKSkpIHsKLQkJCQlhbm9kZS0+dXAgPSBuYTsKKwkJCQlhbm9kZS0+dXAgPSBjcHVfdG9fbGUzMihuYSk7CiAJCQkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQkJCWJyZWxzZShiaCk7CiAJCQl9CiAJCX0gZWxzZSBuYSA9IGE7CiAJfQogCWlmICgoYW5vZGUgPSBocGZzX21hcF9hbm9kZShzLCBuYSwgJmJoKSkpIHsKLQkJYW5vZGUtPnVwID0gbm9kZTsKKwkJYW5vZGUtPnVwID0gY3B1X3RvX2xlMzIobm9kZSk7CiAJCWlmIChmbm9kKSBhbm9kZS0+YnRyZWUuZm5vZGVfcGFyZW50ID0gMTsKIAkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQlicmVsc2UoYmgpOwpAQCAtMjMyLDE0ICsyMzIsMTQgQEAKIAkJfQogCQlidHJlZSA9ICZmbm9kZS0+YnRyZWU7CiAJfQotCXJhbm9kZS0+dXAgPSBub2RlOwotCW1lbWNweSgmcmFub2RlLT5idHJlZSwgYnRyZWUsIGJ0cmVlLT5maXJzdF9mcmVlKTsKKwlyYW5vZGUtPnVwID0gY3B1X3RvX2xlMzIobm9kZSk7CisJbWVtY3B5KCZyYW5vZGUtPmJ0cmVlLCBidHJlZSwgbGUxNl90b19jcHUoYnRyZWUtPmZpcnN0X2ZyZWUpKTsKIAlpZiAoZm5vZCkgcmFub2RlLT5idHJlZS5mbm9kZV9wYXJlbnQgPSAxOwogCXJhbm9kZS0+YnRyZWUubl9mcmVlX25vZGVzID0gKHJhbm9kZS0+YnRyZWUuaW50ZXJuYWwgPyA2MCA6IDQwKSAtIHJhbm9kZS0+YnRyZWUubl91c2VkX25vZGVzOwogCWlmIChyYW5vZGUtPmJ0cmVlLmludGVybmFsKSBmb3IgKG4gPSAwOyBuIDwgcmFub2RlLT5idHJlZS5uX3VzZWRfbm9kZXM7IG4rKykgewogCQlzdHJ1Y3QgYW5vZGUgKnVub2RlOwotCQlpZiAoKHVub2RlID0gaHBmc19tYXBfYW5vZGUocywgcmFub2RlLT51LmludGVybmFsW25dLmRvd24sICZiaDEpKSkgewotCQkJdW5vZGUtPnVwID0gcmE7CisJCWlmICgodW5vZGUgPSBocGZzX21hcF9hbm9kZShzLCBsZTMyX3RvX2NwdShyYW5vZGUtPnUuaW50ZXJuYWxbbl0uZG93biksICZiaDEpKSkgeworCQkJdW5vZGUtPnVwID0gY3B1X3RvX2xlMzIocmEpOwogCQkJdW5vZGUtPmJ0cmVlLmZub2RlX3BhcmVudCA9IDA7CiAJCQltYXJrX2J1ZmZlcl9kaXJ0eShiaDEpOwogCQkJYnJlbHNlKGJoMSk7CkBAIC0yNDgsMTEgKzI0OCwxMSBAQAogCWJ0cmVlLT5pbnRlcm5hbCA9IDE7CiAJYnRyZWUtPm5fZnJlZV9ub2RlcyA9IGZub2QgPyAxMCA6IDU4OwogCWJ0cmVlLT5uX3VzZWRfbm9kZXMgPSAyOwotCWJ0cmVlLT5maXJzdF9mcmVlID0gKGNoYXIgKikmYnRyZWUtPnUuaW50ZXJuYWxbMl0gLSAoY2hhciAqKWJ0cmVlOwotCWJ0cmVlLT51LmludGVybmFsWzBdLmZpbGVfc2Vjbm8gPSBmczsKLQlidHJlZS0+dS5pbnRlcm5hbFswXS5kb3duID0gcmE7Ci0JYnRyZWUtPnUuaW50ZXJuYWxbMV0uZmlsZV9zZWNubyA9IC0xOwotCWJ0cmVlLT51LmludGVybmFsWzFdLmRvd24gPSBuYTsKKwlidHJlZS0+Zmlyc3RfZnJlZSA9IGNwdV90b19sZTE2KChjaGFyICopJmJ0cmVlLT51LmludGVybmFsWzJdIC0gKGNoYXIgKilidHJlZSk7CisJYnRyZWUtPnUuaW50ZXJuYWxbMF0uZmlsZV9zZWNubyA9IGNwdV90b19sZTMyKGZzKTsKKwlidHJlZS0+dS5pbnRlcm5hbFswXS5kb3duID0gY3B1X3RvX2xlMzIocmEpOworCWJ0cmVlLT51LmludGVybmFsWzFdLmZpbGVfc2Vjbm8gPSBjcHVfdG9fbGUzMigtMSk7CisJYnRyZWUtPnUuaW50ZXJuYWxbMV0uZG93biA9IGNwdV90b19sZTMyKG5hKTsKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJYnJlbHNlKGJoKTsKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaDIpOwpAQCAtMjc5LDcgKzI3OSw3IEBACiAJZ29fZG93bjoKIAlkMiA9IDA7CiAJd2hpbGUgKGJ0cmVlMS0+aW50ZXJuYWwpIHsKLQkJYW5vID0gYnRyZWUxLT51LmludGVybmFsW3Bvc10uZG93bjsKKwkJYW5vID0gbGUzMl90b19jcHUoYnRyZWUxLT51LmludGVybmFsW3Bvc10uZG93bik7CiAJCWlmIChsZXZlbCkgYnJlbHNlKGJoKTsKIAkJaWYgKGhwZnNfc2IocyktPnNiX2NoaykKIAkJCWlmIChocGZzX3N0b3BfY3ljbGVzKHMsIGFubywgJmQxLCAmZDIsICJocGZzX3JlbW92ZV9idHJlZSAjMSIpKQpAQCAtMjkwLDcgKzI5MCw3IEBACiAJCXBvcyA9IDA7CiAJfQogCWZvciAoaSA9IDA7IGkgPCBidHJlZTEtPm5fdXNlZF9ub2RlczsgaSsrKQotCQlocGZzX2ZyZWVfc2VjdG9ycyhzLCBidHJlZTEtPnUuZXh0ZXJuYWxbaV0uZGlza19zZWNubywgYnRyZWUxLT51LmV4dGVybmFsW2ldLmxlbmd0aCk7CisJCWhwZnNfZnJlZV9zZWN0b3JzKHMsIGxlMzJfdG9fY3B1KGJ0cmVlMS0+dS5leHRlcm5hbFtpXS5kaXNrX3NlY25vKSwgbGUzMl90b19jcHUoYnRyZWUxLT51LmV4dGVybmFsW2ldLmxlbmd0aCkpOwogCWdvX3VwOgogCWlmICghbGV2ZWwpIHJldHVybjsKIAlicmVsc2UoYmgpOwpAQCAtMjk4LDEzICsyOTgsMTMgQEAKIAkJaWYgKGhwZnNfc3RvcF9jeWNsZXMocywgYW5vLCAmYzEsICZjMiwgImhwZnNfcmVtb3ZlX2J0cmVlICMyIikpIHJldHVybjsKIAlocGZzX2ZyZWVfc2VjdG9ycyhzLCBhbm8sIDEpOwogCW9hbm8gPSBhbm87Ci0JYW5vID0gYW5vZGUtPnVwOworCWFubyA9IGxlMzJfdG9fY3B1KGFub2RlLT51cCk7CiAJaWYgKC0tbGV2ZWwpIHsKIAkJaWYgKCEoYW5vZGUgPSBocGZzX21hcF9hbm9kZShzLCBhbm8sICZiaCkpKSByZXR1cm47CiAJCWJ0cmVlMSA9ICZhbm9kZS0+YnRyZWU7CiAJfSBlbHNlIGJ0cmVlMSA9IGJ0cmVlOwogCWZvciAoaSA9IDA7IGkgPCBidHJlZTEtPm5fdXNlZF9ub2RlczsgaSsrKSB7Ci0JCWlmIChidHJlZTEtPnUuaW50ZXJuYWxbaV0uZG93biA9PSBvYW5vKSB7CisJCWlmIChsZTMyX3RvX2NwdShidHJlZTEtPnUuaW50ZXJuYWxbaV0uZG93bikgPT0gb2FubykgewogCQkJaWYgKChwb3MgPSBpICsgMSkgPCBidHJlZTEtPm5fdXNlZF9ub2RlcykKIAkJCQlnb3RvIGdvX2Rvd247CiAJCQllbHNlCkBAIC00MTEsNyArNDExLDcgQEAKIAkJaWYgKGZubykgewogCQkJYnRyZWUtPm5fZnJlZV9ub2RlcyA9IDg7CiAJCQlidHJlZS0+bl91c2VkX25vZGVzID0gMDsKLQkJCWJ0cmVlLT5maXJzdF9mcmVlID0gODsKKwkJCWJ0cmVlLT5maXJzdF9mcmVlID0gY3B1X3RvX2xlMTYoOCk7CiAJCQlidHJlZS0+aW50ZXJuYWwgPSAwOwogCQkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQl9IGVsc2UgaHBmc19mcmVlX3NlY3RvcnMocywgZiwgMSk7CkBAIC00MjEsMjIgKzQyMSwyMiBAQAogCXdoaWxlIChidHJlZS0+aW50ZXJuYWwpIHsKIAkJbm9kZXMgPSBidHJlZS0+bl91c2VkX25vZGVzICsgYnRyZWUtPm5fZnJlZV9ub2RlczsKIAkJZm9yIChpID0gMDsgaSA8IGJ0cmVlLT5uX3VzZWRfbm9kZXM7IGkrKykKLQkJCWlmIChidHJlZS0+dS5pbnRlcm5hbFtpXS5maWxlX3NlY25vID49IHNlY3MpIGdvdG8gZjsKKwkJCWlmIChsZTMyX3RvX2NwdShidHJlZS0+dS5pbnRlcm5hbFtpXS5maWxlX3NlY25vKSA+PSBzZWNzKSBnb3RvIGY7CiAJCWJyZWxzZShiaCk7CiAJCWhwZnNfZXJyb3IocywgImludGVybmFsIGJ0cmVlICUwOHggZG9lc24ndCBlbmQgd2l0aCAtMSIsIG5vZGUpOwogCQlyZXR1cm47CiAJCWY6CiAJCWZvciAoaiA9IGkgKyAxOyBqIDwgYnRyZWUtPm5fdXNlZF9ub2RlczsgaisrKQotCQkJaHBmc19lYV9yZW1vdmUocywgYnRyZWUtPnUuaW50ZXJuYWxbal0uZG93biwgMSwgMCk7CisJCQlocGZzX2VhX3JlbW92ZShzLCBsZTMyX3RvX2NwdShidHJlZS0+dS5pbnRlcm5hbFtqXS5kb3duKSwgMSwgMCk7CiAJCWJ0cmVlLT5uX3VzZWRfbm9kZXMgPSBpICsgMTsKIAkJYnRyZWUtPm5fZnJlZV9ub2RlcyA9IG5vZGVzIC0gYnRyZWUtPm5fdXNlZF9ub2RlczsKLQkJYnRyZWUtPmZpcnN0X2ZyZWUgPSA4ICsgOCAqIGJ0cmVlLT5uX3VzZWRfbm9kZXM7CisJCWJ0cmVlLT5maXJzdF9mcmVlID0gY3B1X3RvX2xlMTYoOCArIDggKiBidHJlZS0+bl91c2VkX25vZGVzKTsKIAkJbWFya19idWZmZXJfZGlydHkoYmgpOwotCQlpZiAoYnRyZWUtPnUuaW50ZXJuYWxbaV0uZmlsZV9zZWNubyA9PSBzZWNzKSB7CisJCWlmIChidHJlZS0+dS5pbnRlcm5hbFtpXS5maWxlX3NlY25vID09IGNwdV90b19sZTMyKHNlY3MpKSB7CiAJCQlicmVsc2UoYmgpOwogCQkJcmV0dXJuOwogCQl9Ci0JCW5vZGUgPSBidHJlZS0+dS5pbnRlcm5hbFtpXS5kb3duOworCQlub2RlID0gbGUzMl90b19jcHUoYnRyZWUtPnUuaW50ZXJuYWxbaV0uZG93bik7CiAJCWJyZWxzZShiaCk7CiAJCWlmIChocGZzX3NiKHMpLT5zYl9jaGspCiAJCQlpZiAoaHBmc19zdG9wX2N5Y2xlcyhzLCBub2RlLCAmYzEsICZjMiwgImhwZnNfdHJ1bmNhdGVfYnRyZWUiKSkKQEAgLTQ0NiwyNSArNDQ2LDI1IEBACiAJfQkKIAlub2RlcyA9IGJ0cmVlLT5uX3VzZWRfbm9kZXMgKyBidHJlZS0+bl9mcmVlX25vZGVzOwogCWZvciAoaSA9IDA7IGkgPCBidHJlZS0+bl91c2VkX25vZGVzOyBpKyspCi0JCWlmIChidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vICsgYnRyZWUtPnUuZXh0ZXJuYWxbaV0ubGVuZ3RoID49IHNlY3MpIGdvdG8gZmY7CisJCWlmIChsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vKSArIGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW2ldLmxlbmd0aCkgPj0gc2VjcykgZ290byBmZjsKIAlicmVsc2UoYmgpOwogCXJldHVybjsKIAlmZjoKLQlpZiAoc2VjcyA8PSBidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vKSB7CisJaWYgKHNlY3MgPD0gbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZmlsZV9zZWNubykpIHsKIAkJaHBmc19lcnJvcihzLCAidGhlcmUgaXMgYW4gYWxsb2NhdGlvbiBlcnJvciBpbiBmaWxlICUwOHgsIHNlY3RvciAlMDh4IiwgZiwgc2Vjcyk7CiAJCWlmIChpKSBpLS07CiAJfQotCWVsc2UgaWYgKGJ0cmVlLT51LmV4dGVybmFsW2ldLmZpbGVfc2Vjbm8gKyBidHJlZS0+dS5leHRlcm5hbFtpXS5sZW5ndGggPiBzZWNzKSB7Ci0JCWhwZnNfZnJlZV9zZWN0b3JzKHMsIGJ0cmVlLT51LmV4dGVybmFsW2ldLmRpc2tfc2Vjbm8gKyBzZWNzIC0KLQkJCWJ0cmVlLT51LmV4dGVybmFsW2ldLmZpbGVfc2Vjbm8sIGJ0cmVlLT51LmV4dGVybmFsW2ldLmxlbmd0aAotCQkJLSBzZWNzICsgYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZmlsZV9zZWNubyk7IC8qIEkgaG9wZSBnY2Mgb3B0aW1pemVzIHRoaXMgOi0pICovCi0JCWJ0cmVlLT51LmV4dGVybmFsW2ldLmxlbmd0aCA9IHNlY3MgLSBidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vOworCWVsc2UgaWYgKGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW2ldLmZpbGVfc2Vjbm8pICsgbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbaV0ubGVuZ3RoKSA+IHNlY3MpIHsKKwkJaHBmc19mcmVlX3NlY3RvcnMocywgbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZGlza19zZWNubykgKyBzZWNzIC0KKwkJCWxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW2ldLmZpbGVfc2Vjbm8pLCBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtpXS5sZW5ndGgpCisJCQktIHNlY3MgKyBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vKSk7IC8qIEkgaG9wZSBnY2Mgb3B0aW1pemVzIHRoaXMgOi0pICovCisJCWJ0cmVlLT51LmV4dGVybmFsW2ldLmxlbmd0aCA9IGNwdV90b19sZTMyKHNlY3MgLSBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vKSk7CiAJfQogCWZvciAoaiA9IGkgKyAxOyBqIDwgYnRyZWUtPm5fdXNlZF9ub2RlczsgaisrKQotCQlocGZzX2ZyZWVfc2VjdG9ycyhzLCBidHJlZS0+dS5leHRlcm5hbFtqXS5kaXNrX3NlY25vLCBidHJlZS0+dS5leHRlcm5hbFtqXS5sZW5ndGgpOworCQlocGZzX2ZyZWVfc2VjdG9ycyhzLCBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtqXS5kaXNrX3NlY25vKSwgbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbal0ubGVuZ3RoKSk7CiAJYnRyZWUtPm5fdXNlZF9ub2RlcyA9IGkgKyAxOwogCWJ0cmVlLT5uX2ZyZWVfbm9kZXMgPSBub2RlcyAtIGJ0cmVlLT5uX3VzZWRfbm9kZXM7Ci0JYnRyZWUtPmZpcnN0X2ZyZWUgPSA4ICsgMTIgKiBidHJlZS0+bl91c2VkX25vZGVzOworCWJ0cmVlLT5maXJzdF9mcmVlID0gY3B1X3RvX2xlMTYoOCArIDEyICogYnRyZWUtPm5fdXNlZF9ub2Rlcyk7CiAJbWFya19idWZmZXJfZGlydHkoYmgpOwogCWJyZWxzZShiaCk7CiB9CkBAIC00ODAsMTIgKzQ4MCwxMiBAQAogCXN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKmVhX2VuZDsKIAlpZiAoIShmbm9kZSA9IGhwZnNfbWFwX2Zub2RlKHMsIGZubywgJmJoKSkpIHJldHVybjsKIAlpZiAoIWZub2RlLT5kaXJmbGFnKSBocGZzX3JlbW92ZV9idHJlZShzLCAmZm5vZGUtPmJ0cmVlKTsKLQllbHNlIGhwZnNfcmVtb3ZlX2R0cmVlKHMsIGZub2RlLT51LmV4dGVybmFsWzBdLmRpc2tfc2Vjbm8pOworCWVsc2UgaHBmc19yZW1vdmVfZHRyZWUocywgbGUzMl90b19jcHUoZm5vZGUtPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubykpOwogCWVhX2VuZCA9IGZub2RlX2VuZF9lYShmbm9kZSk7CiAJZm9yIChlYSA9IGZub2RlX2VhKGZub2RlKTsgZWEgPCBlYV9lbmQ7IGVhID0gbmV4dF9lYShlYSkpCiAJCWlmIChlYS0+aW5kaXJlY3QpCiAJCQlocGZzX2VhX3JlbW92ZShzLCBlYV9zZWMoZWEpLCBlYS0+YW5vZGUsIGVhX2xlbihlYSkpOwotCWhwZnNfZWFfZXh0X3JlbW92ZShzLCBmbm9kZS0+ZWFfc2Vjbm8sIGZub2RlLT5lYV9hbm9kZSwgZm5vZGUtPmVhX3NpemVfbCk7CisJaHBmc19lYV9leHRfcmVtb3ZlKHMsIGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zZWNubyksIGZub2RlLT5lYV9hbm9kZSwgbGUzMl90b19jcHUoZm5vZGUtPmVhX3NpemVfbCkpOwogCWJyZWxzZShiaCk7CiAJaHBmc19mcmVlX3NlY3RvcnMocywgZm5vLCAxKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2hwZnMvYnVmZmVyLmMgYi9mcy9ocGZzL2J1ZmZlci5jCmluZGV4IDc5M2NiOWQuLjllY2RlMjcgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvYnVmZmVyLmMKKysrIGIvZnMvaHBmcy9idWZmZXIuYwpAQCAtOSwyMiArOSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgImhwZnNfZm4uaCIKIAotdm9pZCBocGZzX2xvY2tfY3JlYXRpb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzKQotewotI2lmZGVmIERFQlVHX0xPQ0tTCi0JcHJpbnRrKCJsb2NrIGNyZWF0aW9uXG4iKTsKLSNlbmRpZgotCW11dGV4X2xvY2soJmhwZnNfc2IocyktPmhwZnNfY3JlYXRpb25fZGUpOwotfQotCi12b2lkIGhwZnNfdW5sb2NrX2NyZWF0aW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqcykKLXsKLSNpZmRlZiBERUJVR19MT0NLUwotCXByaW50aygidW5sb2NrIGNyZWF0aW9uXG4iKTsKLSNlbmRpZgotCW11dGV4X3VubG9jaygmaHBmc19zYihzKS0+aHBmc19jcmVhdGlvbl9kZSk7Ci19Ci0KIC8qIE1hcCBhIHNlY3RvciBpbnRvIGEgYnVmZmVyIGFuZCByZXR1cm4gcG9pbnRlcnMgdG8gaXQgYW5kIHRvIHRoZSBidWZmZXIuICovCiAKIHZvaWQgKmhwZnNfbWFwX3NlY3RvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHVuc2lnbmVkIHNlY25vLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHAsCkBAIC0zMiw2ICsxNiw4IEBACiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAorCWhwZnNfbG9ja19hc3NlcnQocyk7CisKIAljb25kX3Jlc2NoZWQoKTsKIAogCSpiaHAgPSBiaCA9IHNiX2JyZWFkKHMsIHNlY25vKTsKQEAgLTUwLDYgKzM2LDggQEAKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCS8qcmV0dXJuIGhwZnNfbWFwX3NlY3RvcihzLCBzZWNubywgYmhwLCAwKTsqLwogCisJaHBmc19sb2NrX2Fzc2VydChzKTsKKwogCWNvbmRfcmVzY2hlZCgpOwogCiAJaWYgKCgqYmhwID0gYmggPSBzYl9nZXRibGsocywgc2Vjbm8pKSAhPSBOVUxMKSB7CkBAIC03MCw2ICs1OCw4IEBACiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAljaGFyICpkYXRhOwogCisJaHBmc19sb2NrX2Fzc2VydChzKTsKKwogCWNvbmRfcmVzY2hlZCgpOwogCiAJaWYgKHNlY25vICYgMykgewpAQCAtMTI1LDYgKzExNSw4IEBACiB7CiAJY29uZF9yZXNjaGVkKCk7CiAKKwlocGZzX2xvY2tfYXNzZXJ0KHMpOworCiAJaWYgKHNlY25vICYgMykgewogCQlwcmludGsoIkhQRlM6IGhwZnNfZ2V0XzRzZWN0b3JzOiB1bmFsaWduZWQgcmVhZFxuIik7CiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9kaXIuYyBiL2ZzL2hwZnMvZGlyLmMKaW5kZXggYjNkN2MwZC4uZjQ2YWUwMiAxMDA2NDQKLS0tIGEvZnMvaHBmcy9kaXIuYworKysgYi9mcy9ocGZzL2Rpci5jCkBAIC04OCw5ICs4OCw5IEBACiAJCQlocGZzX2Vycm9yKGlub2RlLT5pX3NiLCAibm90IGEgZGlyZWN0b3J5LCBmbm9kZSAlMDhseCIsCiAJCQkJCSh1bnNpZ25lZCBsb25nKWlub2RlLT5pX2lubyk7CiAJCX0KLQkJaWYgKGhwZnNfaW5vZGUtPmlfZG5vICE9IGZuby0+dS5leHRlcm5hbFswXS5kaXNrX3NlY25vKSB7CisJCWlmIChocGZzX2lub2RlLT5pX2RubyAhPSBsZTMyX3RvX2NwdShmbm8tPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubykpIHsKIAkJCWUgPSAxOwotCQkJaHBmc19lcnJvcihpbm9kZS0+aV9zYiwgImNvcnJ1cHRlZCBpbm9kZTogaV9kbm8gPT0gJTA4eCwgZm5vZGUgLT4gZG5vZGUgPT0gJTA4eCIsIGhwZnNfaW5vZGUtPmlfZG5vLCBmbm8tPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubyk7CisJCQlocGZzX2Vycm9yKGlub2RlLT5pX3NiLCAiY29ycnVwdGVkIGlub2RlOiBpX2RubyA9PSAlMDh4LCBmbm9kZSAtPiBkbm9kZSA9PSAlMDh4IiwgaHBmc19pbm9kZS0+aV9kbm8sIGxlMzJfdG9fY3B1KGZuby0+dS5leHRlcm5hbFswXS5kaXNrX3NlY25vKSk7CiAJCX0KIAkJYnJlbHNlKGJoKTsKIAkJaWYgKGUpIHsKQEAgLTE1Niw3ICsxNTYsNyBAQAogCQkJZ290byBhZ2FpbjsKIAkJfQogCQl0ZW1wbmFtZSA9IGhwZnNfdHJhbnNsYXRlX25hbWUoaW5vZGUtPmlfc2IsIGRlLT5uYW1lLCBkZS0+bmFtZWxlbiwgbGMsIGRlLT5ub3RfOHgzKTsKLQkJaWYgKGZpbGxkaXIoZGlyZW50LCB0ZW1wbmFtZSwgZGUtPm5hbWVsZW4sIG9sZF9wb3MsIGRlLT5mbm9kZSwgRFRfVU5LTk9XTikgPCAwKSB7CisJCWlmIChmaWxsZGlyKGRpcmVudCwgdGVtcG5hbWUsIGRlLT5uYW1lbGVuLCBvbGRfcG9zLCBsZTMyX3RvX2NwdShkZS0+Zm5vZGUpLCBEVF9VTktOT1dOKSA8IDApIHsKIAkJCWZpbHAtPmZfcG9zID0gb2xkX3BvczsKIAkJCWlmICh0ZW1wbmFtZSAhPSBkZS0+bmFtZSkga2ZyZWUodGVtcG5hbWUpOwogCQkJaHBmc19icmVsc2U0KCZxYmgpOwpAQCAtMjIxLDcgKzIyMSw3IEBACiAJICogR2V0IGlub2RlIG51bWJlciwgd2hhdCB3ZSdyZSBhZnRlci4KIAkgKi8KIAotCWlubyA9IGRlLT5mbm9kZTsKKwlpbm8gPSBsZTMyX3RvX2NwdShkZS0+Zm5vZGUpOwogCiAJLyoKIAkgKiBHbyBmaW5kIG9yIG1ha2UgYW4gaW5vZGUuCkBAIC0yMzYsNyArMjM2LDcgQEAKIAkJaHBmc19pbml0X2lub2RlKHJlc3VsdCk7CiAJCWlmIChkZS0+ZGlyZWN0b3J5KQogCQkJaHBmc19yZWFkX2lub2RlKHJlc3VsdCk7Ci0JCWVsc2UgaWYgKGRlLT5lYV9zaXplICYmIGhwZnNfc2IoZGlyLT5pX3NiKS0+c2JfZWFzKQorCQllbHNlIGlmIChsZTMyX3RvX2NwdShkZS0+ZWFfc2l6ZSkgJiYgaHBmc19zYihkaXItPmlfc2IpLT5zYl9lYXMpCiAJCQlocGZzX3JlYWRfaW5vZGUocmVzdWx0KTsKIAkJZWxzZSB7CiAJCQlyZXN1bHQtPmlfbW9kZSB8PSBTX0lGUkVHOwpAQCAtMjUwLDggKzI1MCw2IEBACiAJaHBmc19yZXN1bHQgPSBocGZzX2kocmVzdWx0KTsKIAlpZiAoIWRlLT5kaXJlY3RvcnkpIGhwZnNfcmVzdWx0LT5pX3BhcmVudF9kaXIgPSBkaXItPmlfaW5vOwogCi0JaHBmc19kZWNpZGVfY29udihyZXN1bHQsIG5hbWUsIGxlbik7Ci0KIAlpZiAoZGUtPmhhc19hY2wgfHwgZGUtPmhhc194dGRfcGVybSkgaWYgKCEoZGlyLT5pX3NiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgewogCQlocGZzX2Vycm9yKHJlc3VsdC0+aV9zYiwgIkFDTHMgb3IgWFBFUk0gZm91bmQuIFRoaXMgaXMgcHJvYmFibHkgSFBGUzM4Ni4gVGhpcyBkcml2ZXIgZG9lc24ndCBzdXBwb3J0IGl0IG5vdy4gU2VuZCBtZSBzb21lIGluZm8gb24gdGhlc2Ugc3RydWN0dXJlcyIpOwogCQlnb3RvIGJhaWwxOwpAQCAtMjYzLDE5ICsyNjEsMTkgQEAKIAkgKi8KIAogCWlmICghcmVzdWx0LT5pX2N0aW1lLnR2X3NlYykgewotCQlpZiAoIShyZXN1bHQtPmlfY3RpbWUudHZfc2VjID0gbG9jYWxfdG9fZ210KGRpci0+aV9zYiwgZGUtPmNyZWF0aW9uX2RhdGUpKSkKKwkJaWYgKCEocmVzdWx0LT5pX2N0aW1lLnR2X3NlYyA9IGxvY2FsX3RvX2dtdChkaXItPmlfc2IsIGxlMzJfdG9fY3B1KGRlLT5jcmVhdGlvbl9kYXRlKSkpKQogCQkJcmVzdWx0LT5pX2N0aW1lLnR2X3NlYyA9IDE7CiAJCXJlc3VsdC0+aV9jdGltZS50dl9uc2VjID0gMDsKLQkJcmVzdWx0LT5pX210aW1lLnR2X3NlYyA9IGxvY2FsX3RvX2dtdChkaXItPmlfc2IsIGRlLT53cml0ZV9kYXRlKTsKKwkJcmVzdWx0LT5pX210aW1lLnR2X3NlYyA9IGxvY2FsX3RvX2dtdChkaXItPmlfc2IsIGxlMzJfdG9fY3B1KGRlLT53cml0ZV9kYXRlKSk7CiAJCXJlc3VsdC0+aV9tdGltZS50dl9uc2VjID0gMDsKLQkJcmVzdWx0LT5pX2F0aW1lLnR2X3NlYyA9IGxvY2FsX3RvX2dtdChkaXItPmlfc2IsIGRlLT5yZWFkX2RhdGUpOworCQlyZXN1bHQtPmlfYXRpbWUudHZfc2VjID0gbG9jYWxfdG9fZ210KGRpci0+aV9zYiwgbGUzMl90b19jcHUoZGUtPnJlYWRfZGF0ZSkpOwogCQlyZXN1bHQtPmlfYXRpbWUudHZfbnNlYyA9IDA7Ci0JCWhwZnNfcmVzdWx0LT5pX2VhX3NpemUgPSBkZS0+ZWFfc2l6ZTsKKwkJaHBmc19yZXN1bHQtPmlfZWFfc2l6ZSA9IGxlMzJfdG9fY3B1KGRlLT5lYV9zaXplKTsKIAkJaWYgKCFocGZzX3Jlc3VsdC0+aV9lYV9tb2RlICYmIGRlLT5yZWFkX29ubHkpCiAJCQlyZXN1bHQtPmlfbW9kZSAmPSB+MDIyMjsKIAkJaWYgKCFkZS0+ZGlyZWN0b3J5KSB7CiAJCQlpZiAocmVzdWx0LT5pX3NpemUgPT0gLTEpIHsKLQkJCQlyZXN1bHQtPmlfc2l6ZSA9IGRlLT5maWxlX3NpemU7CisJCQkJcmVzdWx0LT5pX3NpemUgPSBsZTMyX3RvX2NwdShkZS0+ZmlsZV9zaXplKTsKIAkJCQlyZXN1bHQtPmlfZGF0YS5hX29wcyA9ICZocGZzX2FvcHM7CiAJCQkJaHBmc19pKHJlc3VsdCktPm1tdV9wcml2YXRlID0gcmVzdWx0LT5pX3NpemU7CiAJCQkvKgpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9kbm9kZS5jIGIvZnMvaHBmcy9kbm9kZS5jCmluZGV4IDliMmZmYWQuLjFlMGUyYWMgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvZG5vZGUuYworKysgYi9mcy9ocGZzL2Rub2RlLmMKQEAgLTE0LDExICsxNCwxMSBAQAogCXN0cnVjdCBocGZzX2RpcmVudCAqZGVfZW5kID0gZG5vZGVfZW5kX2RlKGQpOwogCWludCBpID0gMTsKIAlmb3IgKGRlID0gZG5vZGVfZmlyc3RfZGUoZCk7IGRlIDwgZGVfZW5kOyBkZSA9IGRlX25leHRfZGUoZGUpKSB7Ci0JCWlmIChkZSA9PSBmZGUpIHJldHVybiAoKGxvZmZfdCkgZC0+c2VsZiA8PCA0KSB8IChsb2ZmX3QpaTsKKwkJaWYgKGRlID09IGZkZSkgcmV0dXJuICgobG9mZl90KSBsZTMyX3RvX2NwdShkLT5zZWxmKSA8PCA0KSB8IChsb2ZmX3QpaTsKIAkJaSsrOwogCX0KIAlwcmludGsoIkhQRlM6IGdldF9wb3M6IG5vdF9mb3VuZFxuIik7Ci0JcmV0dXJuICgobG9mZl90KWQtPnNlbGYgPDwgNCkgfCAobG9mZl90KTE7CisJcmV0dXJuICgobG9mZl90KWxlMzJfdG9fY3B1KGQtPnNlbGYpIDw8IDQpIHwgKGxvZmZfdCkxOwogfQogCiB2b2lkIGhwZnNfYWRkX3BvcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgKnBvcykKQEAgLTEzMCwyOSArMTMwLDMwIEBACiB7CiAJc3RydWN0IGhwZnNfZGlyZW50ICpkZTsKIAlpZiAoIShkZSA9IGRub2RlX2xhc3RfZGUoZCkpKSB7Ci0JCWhwZnNfZXJyb3IocywgInNldF9sYXN0X3BvaW50ZXI6IGVtcHR5IGRub2RlICUwOHgiLCBkLT5zZWxmKTsKKwkJaHBmc19lcnJvcihzLCAic2V0X2xhc3RfcG9pbnRlcjogZW1wdHkgZG5vZGUgJTA4eCIsIGxlMzJfdG9fY3B1KGQtPnNlbGYpKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoaHBmc19zYihzKS0+c2JfY2hrKSB7CiAJCWlmIChkZS0+ZG93bikgewogCQkJaHBmc19lcnJvcihzLCAic2V0X2xhc3RfcG9pbnRlcjogZG5vZGUgJTA4eCBoYXMgYWxyZWFkeSBsYXN0IHBvaW50ZXIgJTA4eCIsCi0JCQkJZC0+c2VsZiwgZGVfZG93bl9wb2ludGVyKGRlKSk7CisJCQkJbGUzMl90b19jcHUoZC0+c2VsZiksIGRlX2Rvd25fcG9pbnRlcihkZSkpOwogCQkJcmV0dXJuOwogCQl9Ci0JCWlmIChkZS0+bGVuZ3RoICE9IDMyKSB7Ci0JCQlocGZzX2Vycm9yKHMsICJzZXRfbGFzdF9wb2ludGVyOiBiYWQgbGFzdCBkaXJlbnQgaW4gZG5vZGUgJTA4eCIsIGQtPnNlbGYpOworCQlpZiAobGUxNl90b19jcHUoZGUtPmxlbmd0aCkgIT0gMzIpIHsKKwkJCWhwZnNfZXJyb3IocywgInNldF9sYXN0X3BvaW50ZXI6IGJhZCBsYXN0IGRpcmVudCBpbiBkbm9kZSAlMDh4IiwgbGUzMl90b19jcHUoZC0+c2VsZikpOwogCQkJcmV0dXJuOwogCQl9CiAJfQogCWlmIChwdHIpIHsKLQkJaWYgKChkLT5maXJzdF9mcmVlICs9IDQpID4gMjA0OCkgewotCQkJaHBmc19lcnJvcihzLCJzZXRfbGFzdF9wb2ludGVyOiB0b28gbG9uZyBkbm9kZSAlMDh4IiwgZC0+c2VsZik7Ci0JCQlkLT5maXJzdF9mcmVlIC09IDQ7CisJCWQtPmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUzMihsZTMyX3RvX2NwdShkLT5maXJzdF9mcmVlKSArIDQpOworCQlpZiAobGUzMl90b19jcHUoZC0+Zmlyc3RfZnJlZSkgPiAyMDQ4KSB7CisJCQlocGZzX2Vycm9yKHMsICJzZXRfbGFzdF9wb2ludGVyOiB0b28gbG9uZyBkbm9kZSAlMDh4IiwgbGUzMl90b19jcHUoZC0+c2VsZikpOworCQkJZC0+Zmlyc3RfZnJlZSA9IGNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGQtPmZpcnN0X2ZyZWUpIC0gNCk7CiAJCQlyZXR1cm47CiAJCX0KLQkJZGUtPmxlbmd0aCA9IDM2OworCQlkZS0+bGVuZ3RoID0gY3B1X3RvX2xlMTYoMzYpOwogCQlkZS0+ZG93biA9IDE7Ci0JCSooZG5vZGVfc2Vjbm8gKikoKGNoYXIgKilkZSArIDMyKSA9IHB0cjsKKwkJKihkbm9kZV9zZWNubyAqKSgoY2hhciAqKWRlICsgMzIpID0gY3B1X3RvX2xlMzIocHRyKTsKIAl9CiB9CiAKQEAgLTE2OCw3ICsxNjksNyBAQAogCWZvciAoZGUgPSBkbm9kZV9maXJzdF9kZShkKTsgZGUgPCBkZV9lbmQ7IGRlID0gZGVfbmV4dF9kZShkZSkpIHsKIAkJaW50IGMgPSBocGZzX2NvbXBhcmVfbmFtZXMocywgbmFtZSwgbmFtZWxlbiwgZGUtPm5hbWUsIGRlLT5uYW1lbGVuLCBkZS0+bGFzdCk7CiAJCWlmICghYykgewotCQkJaHBmc19lcnJvcihzLCAibmFtZSAoJWMsJWQpIGFscmVhZHkgZXhpc3RzIGluIGRub2RlICUwOHgiLCAqbmFtZSwgbmFtZWxlbiwgZC0+c2VsZik7CisJCQlocGZzX2Vycm9yKHMsICJuYW1lICglYywlZCkgYWxyZWFkeSBleGlzdHMgaW4gZG5vZGUgJTA4eCIsICpuYW1lLCBuYW1lbGVuLCBsZTMyX3RvX2NwdShkLT5zZWxmKSk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCQlpZiAoYyA8IDApIGJyZWFrOwpAQCAtMTc2LDE1ICsxNzcsMTQgQEAKIAltZW1tb3ZlKChjaGFyICopZGUgKyBkX3NpemUsIGRlLCAoY2hhciAqKWRlX2VuZCAtIChjaGFyICopZGUpOwogCW1lbXNldChkZSwgMCwgZF9zaXplKTsKIAlpZiAoZG93bl9wdHIpIHsKLQkJKihpbnQgKikoKGNoYXIgKilkZSArIGRfc2l6ZSAtIDQpID0gZG93bl9wdHI7CisJCSooZG5vZGVfc2Vjbm8gKikoKGNoYXIgKilkZSArIGRfc2l6ZSAtIDQpID0gY3B1X3RvX2xlMzIoZG93bl9wdHIpOwogCQlkZS0+ZG93biA9IDE7CiAJfQotCWRlLT5sZW5ndGggPSBkX3NpemU7Ci0JaWYgKGRvd25fcHRyKSBkZS0+ZG93biA9IDE7CisJZGUtPmxlbmd0aCA9IGNwdV90b19sZTE2KGRfc2l6ZSk7CiAJZGUtPm5vdF84eDMgPSBocGZzX2lzX25hbWVfbG9uZyhuYW1lLCBuYW1lbGVuKTsKIAlkZS0+bmFtZWxlbiA9IG5hbWVsZW47CiAJbWVtY3B5KGRlLT5uYW1lLCBuYW1lLCBuYW1lbGVuKTsKLQlkLT5maXJzdF9mcmVlICs9IGRfc2l6ZTsKKwlkLT5maXJzdF9mcmVlID0gY3B1X3RvX2xlMzIobGUzMl90b19jcHUoZC0+Zmlyc3RfZnJlZSkgKyBkX3NpemUpOwogCXJldHVybiBkZTsKIH0KIApAQCAtMTk0LDI1ICsxOTQsMjUgQEAKIAkJCSAgIHN0cnVjdCBocGZzX2RpcmVudCAqZGUpCiB7CiAJaWYgKGRlLT5sYXN0KSB7Ci0JCWhwZnNfZXJyb3IocywgImF0dGVtcHQgdG8gZGVsZXRlIGxhc3QgZGlyZW50IGluIGRub2RlICUwOHgiLCBkLT5zZWxmKTsKKwkJaHBmc19lcnJvcihzLCAiYXR0ZW1wdCB0byBkZWxldGUgbGFzdCBkaXJlbnQgaW4gZG5vZGUgJTA4eCIsIGxlMzJfdG9fY3B1KGQtPnNlbGYpKTsKIAkJcmV0dXJuOwogCX0KLQlkLT5maXJzdF9mcmVlIC09IGRlLT5sZW5ndGg7Ci0JbWVtbW92ZShkZSwgZGVfbmV4dF9kZShkZSksIGQtPmZpcnN0X2ZyZWUgKyAoY2hhciAqKWQgLSAoY2hhciAqKWRlKTsKKwlkLT5maXJzdF9mcmVlID0gY3B1X3RvX2xlMzIobGUzMl90b19jcHUoZC0+Zmlyc3RfZnJlZSkgLSBsZTE2X3RvX2NwdShkZS0+bGVuZ3RoKSk7CisJbWVtbW92ZShkZSwgZGVfbmV4dF9kZShkZSksIGxlMzJfdG9fY3B1KGQtPmZpcnN0X2ZyZWUpICsgKGNoYXIgKilkIC0gKGNoYXIgKilkZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGZpeF91cF9wdHJzKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGRub2RlICpkKQogewogCXN0cnVjdCBocGZzX2RpcmVudCAqZGU7CiAJc3RydWN0IGhwZnNfZGlyZW50ICpkZV9lbmQgPSBkbm9kZV9lbmRfZGUoZCk7Ci0JZG5vZGVfc2Vjbm8gZG5vID0gZC0+c2VsZjsKKwlkbm9kZV9zZWNubyBkbm8gPSBsZTMyX3RvX2NwdShkLT5zZWxmKTsKIAlmb3IgKGRlID0gZG5vZGVfZmlyc3RfZGUoZCk7IGRlIDwgZGVfZW5kOyBkZSA9IGRlX25leHRfZGUoZGUpKQogCQlpZiAoZGUtPmRvd24pIHsKIAkJCXN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkIHFiaDsKIAkJCXN0cnVjdCBkbm9kZSAqZGQ7CiAJCQlpZiAoKGRkID0gaHBmc19tYXBfZG5vZGUocywgZGVfZG93bl9wb2ludGVyKGRlKSwgJnFiaCkpKSB7Ci0JCQkJaWYgKGRkLT51cCAhPSBkbm8gfHwgZGQtPnJvb3RfZG5vZGUpIHsKLQkJCQkJZGQtPnVwID0gZG5vOworCQkJCWlmIChsZTMyX3RvX2NwdShkZC0+dXApICE9IGRubyB8fCBkZC0+cm9vdF9kbm9kZSkgeworCQkJCQlkZC0+dXAgPSBjcHVfdG9fbGUzMihkbm8pOwogCQkJCQlkZC0+cm9vdF9kbm9kZSA9IDA7CiAJCQkJCWhwZnNfbWFya180YnVmZmVyc19kaXJ0eSgmcWJoKTsKIAkJCQl9CkBAIC0yNjIsNyArMjYyLDcgQEAKIAkJCWtmcmVlKG5uYW1lKTsKIAkJCXJldHVybiAxOwogCQl9Ci0JaWYgKGQtPmZpcnN0X2ZyZWUgKyBkZV9zaXplKG5hbWVsZW4sIGRvd25fcHRyKSA8PSAyMDQ4KSB7CisJaWYgKGxlMzJfdG9fY3B1KGQtPmZpcnN0X2ZyZWUpICsgZGVfc2l6ZShuYW1lbGVuLCBkb3duX3B0cikgPD0gMjA0OCkgewogCQlsb2ZmX3QgdDsKIAkJY29weV9kZShkZT1ocGZzX2FkZF9kZShpLT5pX3NiLCBkLCBuYW1lLCBuYW1lbGVuLCBkb3duX3B0ciksIG5ld19kZSk7CiAJCXQgPSBnZXRfcG9zKGQsIGRlKTsKQEAgLTI4NiwxMSArMjg2LDExIEBACiAJCWtmcmVlKG5uYW1lKTsKIAkJcmV0dXJuIDE7CiAJfQkKLQltZW1jcHkobmQsIGQsIGQtPmZpcnN0X2ZyZWUpOworCW1lbWNweShuZCwgZCwgbGUzMl90b19jcHUoZC0+Zmlyc3RfZnJlZSkpOwogCWNvcHlfZGUoZGUgPSBocGZzX2FkZF9kZShpLT5pX3NiLCBuZCwgbmFtZSwgbmFtZWxlbiwgZG93bl9wdHIpLCBuZXdfZGUpOwogCWZvcl9hbGxfcG9zcyhpLCBocGZzX3Bvc19pbnMsIGdldF9wb3MobmQsIGRlKSwgMSk7CiAJaCA9ICgoY2hhciAqKWRub2RlX2xhc3RfZGUobmQpIC0gKGNoYXIgKiluZCkgLyAyICsgMTA7Ci0JaWYgKCEoYWQgPSBocGZzX2FsbG9jX2Rub2RlKGktPmlfc2IsIGQtPnVwLCAmYWRubywgJnFiaDEsIDApKSkgeworCWlmICghKGFkID0gaHBmc19hbGxvY19kbm9kZShpLT5pX3NiLCBsZTMyX3RvX2NwdShkLT51cCksICZhZG5vLCAmcWJoMSkpKSB7CiAJCWhwZnNfZXJyb3IoaS0+aV9zYiwgInVuYWJsZSB0byBhbGxvYyBkbm9kZSAtIGRub2RlIHRyZWUgd2lsbCBiZSBjb3JydXB0ZWQiKTsKIAkJaHBmc19icmVsc2U0KCZxYmgpOwogCQlrZnJlZShuZCk7CkBAIC0zMTMsMjAgKzMxMywyMSBAQAogCWRvd25fcHRyID0gYWRubzsKIAlzZXRfbGFzdF9wb2ludGVyKGktPmlfc2IsIGFkLCBkZS0+ZG93biA/IGRlX2Rvd25fcG9pbnRlcihkZSkgOiAwKTsKIAlkZSA9IGRlX25leHRfZGUoZGUpOwotCW1lbW1vdmUoKGNoYXIgKiluZCArIDIwLCBkZSwgbmQtPmZpcnN0X2ZyZWUgKyAoY2hhciAqKW5kIC0gKGNoYXIgKilkZSk7Ci0JbmQtPmZpcnN0X2ZyZWUgLT0gKGNoYXIgKilkZSAtIChjaGFyICopbmQgLSAyMDsKLQltZW1jcHkoZCwgbmQsIG5kLT5maXJzdF9mcmVlKTsKKwltZW1tb3ZlKChjaGFyICopbmQgKyAyMCwgZGUsIGxlMzJfdG9fY3B1KG5kLT5maXJzdF9mcmVlKSArIChjaGFyICopbmQgLSAoY2hhciAqKWRlKTsKKwluZC0+Zmlyc3RfZnJlZSA9IGNwdV90b19sZTMyKGxlMzJfdG9fY3B1KG5kLT5maXJzdF9mcmVlKSAtICgoY2hhciAqKWRlIC0gKGNoYXIgKiluZCAtIDIwKSk7CisJbWVtY3B5KGQsIG5kLCBsZTMyX3RvX2NwdShuZC0+Zmlyc3RfZnJlZSkpOwogCWZvcl9hbGxfcG9zcyhpLCBocGZzX3Bvc19kZWwsIChsb2ZmX3QpZG5vIDw8IDQsIHBvcyk7CiAJZml4X3VwX3B0cnMoaS0+aV9zYiwgYWQpOwogCWlmICghZC0+cm9vdF9kbm9kZSkgewotCQlkbm8gPSBhZC0+dXAgPSBkLT51cDsKKwkJYWQtPnVwID0gZC0+dXA7CisJCWRubyA9IGxlMzJfdG9fY3B1KGFkLT51cCk7CiAJCWhwZnNfbWFya180YnVmZmVyc19kaXJ0eSgmcWJoKTsKIAkJaHBmc19icmVsc2U0KCZxYmgpOwogCQlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaDEpOwogCQlocGZzX2JyZWxzZTQoJnFiaDEpOwogCQlnb3RvIGdvX3VwOwogCX0KLQlpZiAoIShyZCA9IGhwZnNfYWxsb2NfZG5vZGUoaS0+aV9zYiwgZC0+dXAsICZyZG5vLCAmcWJoMiwgMCkpKSB7CisJaWYgKCEocmQgPSBocGZzX2FsbG9jX2Rub2RlKGktPmlfc2IsIGxlMzJfdG9fY3B1KGQtPnVwKSwgJnJkbm8sICZxYmgyKSkpIHsKIAkJaHBmc19lcnJvcihpLT5pX3NiLCAidW5hYmxlIHRvIGFsbG9jIGRub2RlIC0gZG5vZGUgdHJlZSB3aWxsIGJlIGNvcnJ1cHRlZCIpOwogCQlocGZzX2JyZWxzZTQoJnFiaCk7CiAJCWhwZnNfYnJlbHNlNCgmcWJoMSk7CkBAIC0zMzgsNyArMzM5LDcgQEAKIAlpLT5pX2Jsb2NrcyArPSA0OwogCXJkLT5yb290X2Rub2RlID0gMTsKIAlyZC0+dXAgPSBkLT51cDsKLQlpZiAoIShmbm9kZSA9IGhwZnNfbWFwX2Zub2RlKGktPmlfc2IsIGQtPnVwLCAmYmgpKSkgeworCWlmICghKGZub2RlID0gaHBmc19tYXBfZm5vZGUoaS0+aV9zYiwgbGUzMl90b19jcHUoZC0+dXApLCAmYmgpKSkgewogCQlocGZzX2ZyZWVfZG5vZGUoaS0+aV9zYiwgcmRubyk7CiAJCWhwZnNfYnJlbHNlNCgmcWJoKTsKIAkJaHBmc19icmVsc2U0KCZxYmgxKTsKQEAgLTM0NywxMCArMzQ4LDExIEBACiAJCWtmcmVlKG5uYW1lKTsKIAkJcmV0dXJuIDE7CiAJfQotCWZub2RlLT51LmV4dGVybmFsWzBdLmRpc2tfc2Vjbm8gPSByZG5vOworCWZub2RlLT51LmV4dGVybmFsWzBdLmRpc2tfc2Vjbm8gPSBjcHVfdG9fbGUzMihyZG5vKTsKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJYnJlbHNlKGJoKTsKLQlkLT51cCA9IGFkLT51cCA9IGhwZnNfaShpKS0+aV9kbm8gPSByZG5vOworCWhwZnNfaShpKS0+aV9kbm8gPSByZG5vOworCWQtPnVwID0gYWQtPnVwID0gY3B1X3RvX2xlMzIocmRubyk7CiAJZC0+cm9vdF9kbm9kZSA9IGFkLT5yb290X2Rub2RlID0gMDsKIAlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaCk7CiAJaHBmc19icmVsc2U0KCZxYmgpOwpAQCAtMzczLDcgKzM3NSw3IEBACiAKIGludCBocGZzX2FkZF9kaXJlbnQoc3RydWN0IGlub2RlICppLAogCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwgdW5zaWduZWQgbmFtZWxlbiwKLQkJICAgIHN0cnVjdCBocGZzX2RpcmVudCAqbmV3X2RlLCBpbnQgY2RlcHRoKQorCQkgICAgc3RydWN0IGhwZnNfZGlyZW50ICpuZXdfZGUpCiB7CiAJc3RydWN0IGhwZnNfaW5vZGVfaW5mbyAqaHBmc19pbm9kZSA9IGhwZnNfaShpKTsKIAlzdHJ1Y3QgZG5vZGUgKmQ7CkBAIC00MDMsNyArNDA1LDYgQEAKIAkJfQogCX0KIAlocGZzX2JyZWxzZTQoJnFiaCk7Ci0JaWYgKCFjZGVwdGgpIGhwZnNfbG9ja19jcmVhdGlvbihpLT5pX3NiKTsKIAlpZiAoaHBmc19jaGVja19mcmVlX2Rub2RlcyhpLT5pX3NiLCBGUkVFX0ROT0RFU19BREQpKSB7CiAJCWMgPSAxOwogCQlnb3RvIHJldDsKQEAgLTQxMSw3ICs0MTIsNiBAQAogCWktPmlfdmVyc2lvbisrOwogCWMgPSBocGZzX2FkZF90b19kbm9kZShpLCBkbm8sIG5hbWUsIG5hbWVsZW4sIG5ld19kZSwgMCk7CiAJcmV0OgotCWlmICghY2RlcHRoKSBocGZzX3VubG9ja19jcmVhdGlvbihpLT5pX3NiKTsKIAlyZXR1cm4gYzsKIH0KIApAQCAtNDM3LDkgKzQzNyw5IEBACiAJCQkJcmV0dXJuIDA7CiAJCWlmICghKGRub2RlID0gaHBmc19tYXBfZG5vZGUoaS0+aV9zYiwgZG5vLCAmcWJoKSkpIHJldHVybiAwOwogCQlpZiAoaHBmc19zYihpLT5pX3NiKS0+c2JfY2hrKSB7Ci0JCQlpZiAoZG5vZGUtPnVwICE9IGNoa191cCkgeworCQkJaWYgKGxlMzJfdG9fY3B1KGRub2RlLT51cCkgIT0gY2hrX3VwKSB7CiAJCQkJaHBmc19lcnJvcihpLT5pX3NiLCAibW92ZV90b190b3A6IHVwIHBvaW50ZXIgZnJvbSAlMDh4IHNob3VsZCBiZSAlMDh4LCBpcyAlMDh4IiwKLQkJCQkJZG5vLCBjaGtfdXAsIGRub2RlLT51cCk7CisJCQkJCWRubywgY2hrX3VwLCBsZTMyX3RvX2NwdShkbm9kZS0+dXApKTsKIAkJCQlocGZzX2JyZWxzZTQoJnFiaCk7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CkBAIC00NTUsNyArNDU1LDcgQEAKIAkJaHBmc19icmVsc2U0KCZxYmgpOwogCX0KIAl3aGlsZSAoIShkZSA9IGRub2RlX3ByZV9sYXN0X2RlKGRub2RlKSkpIHsKLQkJZG5vZGVfc2Vjbm8gdXAgPSBkbm9kZS0+dXA7CisJCWRub2RlX3NlY25vIHVwID0gbGUzMl90b19jcHUoZG5vZGUtPnVwKTsKIAkJaHBmc19icmVsc2U0KCZxYmgpOwogCQlocGZzX2ZyZWVfZG5vZGUoaS0+aV9zYiwgZG5vKTsKIAkJaS0+aV9zaXplIC09IDIwNDg7CkBAIC00NzQsOCArNDc0LDggQEAKIAkJCWhwZnNfYnJlbHNlNCgmcWJoKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCWRub2RlLT5maXJzdF9mcmVlIC09IDQ7Ci0JCWRlLT5sZW5ndGggLT0gNDsKKwkJZG5vZGUtPmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUzMihsZTMyX3RvX2NwdShkbm9kZS0+Zmlyc3RfZnJlZSkgLSA0KTsKKwkJZGUtPmxlbmd0aCA9IGNwdV90b19sZTE2KGxlMTZfdG9fY3B1KGRlLT5sZW5ndGgpIC0gNCk7CiAJCWRlLT5kb3duID0gMDsKIAkJaHBmc19tYXJrXzRidWZmZXJzX2RpcnR5KCZxYmgpOwogCQlkbm8gPSB1cDsKQEAgLTQ4MywxMiArNDgzLDEyIEBACiAJdCA9IGdldF9wb3MoZG5vZGUsIGRlKTsKIAlmb3JfYWxsX3Bvc3MoaSwgaHBmc19wb3Nfc3Vic3QsIHQsIDQpOwogCWZvcl9hbGxfcG9zcyhpLCBocGZzX3Bvc19zdWJzdCwgdCArIDEsIDUpOwotCWlmICghKG5kZSA9IGttYWxsb2MoZGUtPmxlbmd0aCwgR0ZQX05PRlMpKSkgeworCWlmICghKG5kZSA9IGttYWxsb2MobGUxNl90b19jcHUoZGUtPmxlbmd0aCksIEdGUF9OT0ZTKSkpIHsKIAkJaHBmc19lcnJvcihpLT5pX3NiLCAib3V0IG9mIG1lbW9yeSBmb3IgZGlyZW50IC0gZGlyZWN0b3J5IHdpbGwgYmUgY29ycnVwdGVkIik7CiAJCWhwZnNfYnJlbHNlNCgmcWJoKTsKIAkJcmV0dXJuIDA7CiAJfQotCW1lbWNweShuZGUsIGRlLCBkZS0+bGVuZ3RoKTsKKwltZW1jcHkobmRlLCBkZSwgbGUxNl90b19jcHUoZGUtPmxlbmd0aCkpOwogCWRkbm8gPSBkZS0+ZG93biA/IGRlX2Rvd25fcG9pbnRlcihkZSkgOiAwOwogCWhwZnNfZGVsZXRlX2RlKGktPmlfc2IsIGRub2RlLCBkZSk7CiAJc2V0X2xhc3RfcG9pbnRlcihpLT5pX3NiLCBkbm9kZSwgZGRubyk7CkBAIC01MTcsMTEgKzUxNywxMSBAQAogCXRyeV9pdF9hZ2FpbjoKIAlpZiAoaHBmc19zdG9wX2N5Y2xlcyhpLT5pX3NiLCBkbm8sICZjMSwgJmMyLCAiZGVsZXRlX2VtcHR5X2Rub2RlIikpIHJldHVybjsKIAlpZiAoIShkbm9kZSA9IGhwZnNfbWFwX2Rub2RlKGktPmlfc2IsIGRubywgJnFiaCkpKSByZXR1cm47Ci0JaWYgKGRub2RlLT5maXJzdF9mcmVlID4gNTYpIGdvdG8gZW5kOwotCWlmIChkbm9kZS0+Zmlyc3RfZnJlZSA9PSA1MiB8fCBkbm9kZS0+Zmlyc3RfZnJlZSA9PSA1NikgeworCWlmIChsZTMyX3RvX2NwdShkbm9kZS0+Zmlyc3RfZnJlZSkgPiA1NikgZ290byBlbmQ7CisJaWYgKGxlMzJfdG9fY3B1KGRub2RlLT5maXJzdF9mcmVlKSA9PSA1MiB8fCBsZTMyX3RvX2NwdShkbm9kZS0+Zmlyc3RfZnJlZSkgPT0gNTYpIHsKIAkJc3RydWN0IGhwZnNfZGlyZW50ICpkZV9lbmQ7CiAJCWludCByb290ID0gZG5vZGUtPnJvb3RfZG5vZGU7Ci0JCXVwID0gZG5vZGUtPnVwOworCQl1cCA9IGxlMzJfdG9fY3B1KGRub2RlLT51cCk7CiAJCWRlID0gZG5vZGVfZmlyc3RfZGUoZG5vZGUpOwogCQlkb3duID0gZGUtPmRvd24gPyBkZV9kb3duX3BvaW50ZXIoZGUpIDogMDsKIAkJaWYgKGhwZnNfc2IoaS0+aV9zYiktPnNiX2NoaykgaWYgKHJvb3QgJiYgIWRvd24pIHsKQEAgLTU0NSwxMyArNTQ1LDEzIEBACiAJCQkJcmV0dXJuOwogCQkJICAgIH0KIAkJCWlmICgoZDEgPSBocGZzX21hcF9kbm9kZShpLT5pX3NiLCBkb3duLCAmcWJoMSkpKSB7Ci0JCQkJZDEtPnVwID0gdXA7CisJCQkJZDEtPnVwID0gY3B1X3RvX2xlMzIodXApOwogCQkJCWQxLT5yb290X2Rub2RlID0gMTsKIAkJCQlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaDEpOwogCQkJCWhwZnNfYnJlbHNlNCgmcWJoMSk7CiAJCQl9CiAJCQlpZiAoKGZub2RlID0gaHBmc19tYXBfZm5vZGUoaS0+aV9zYiwgdXAsICZiaCkpKSB7Ci0JCQkJZm5vZGUtPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubyA9IGRvd247CisJCQkJZm5vZGUtPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubyA9IGNwdV90b19sZTMyKGRvd24pOwogCQkJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJCQlicmVsc2UoYmgpOwogCQkJfQpAQCAtNTcwLDIyICs1NzAsMjIgQEAKIAkJZm9yX2FsbF9wb3NzKGksIGhwZnNfcG9zX3N1YnN0LCAoKGxvZmZfdClkbm8gPDwgNCkgfCAxLCAoKGxvZmZfdCl1cCA8PCA0KSB8IHApOwogCQlpZiAoIWRvd24pIHsKIAkJCWRlLT5kb3duID0gMDsKLQkJCWRlLT5sZW5ndGggLT0gNDsKLQkJCWRub2RlLT5maXJzdF9mcmVlIC09IDQ7CisJCQlkZS0+bGVuZ3RoID0gY3B1X3RvX2xlMTYobGUxNl90b19jcHUoZGUtPmxlbmd0aCkgLSA0KTsKKwkJCWRub2RlLT5maXJzdF9mcmVlID0gY3B1X3RvX2xlMzIobGUzMl90b19jcHUoZG5vZGUtPmZpcnN0X2ZyZWUpIC0gNCk7CiAJCQltZW1tb3ZlKGRlX25leHRfZGUoZGUpLCAoY2hhciAqKWRlX25leHRfZGUoZGUpICsgNCwKLQkJCQkoY2hhciAqKWRub2RlICsgZG5vZGUtPmZpcnN0X2ZyZWUgLSAoY2hhciAqKWRlX25leHRfZGUoZGUpKTsKKwkJCQkoY2hhciAqKWRub2RlICsgbGUzMl90b19jcHUoZG5vZGUtPmZpcnN0X2ZyZWUpIC0gKGNoYXIgKilkZV9uZXh0X2RlKGRlKSk7CiAJCX0gZWxzZSB7CiAJCQlzdHJ1Y3QgZG5vZGUgKmQxOwogCQkJc3RydWN0IHF1YWRfYnVmZmVyX2hlYWQgcWJoMTsKLQkJCSooZG5vZGVfc2Vjbm8gKikgKCh2b2lkICopIGRlICsgZGUtPmxlbmd0aCAtIDQpID0gZG93bjsKKwkJCSooZG5vZGVfc2Vjbm8gKikgKCh2b2lkICopIGRlICsgbGUxNl90b19jcHUoZGUtPmxlbmd0aCkgLSA0KSA9IGRvd247CiAJCQlpZiAoKGQxID0gaHBmc19tYXBfZG5vZGUoaS0+aV9zYiwgZG93biwgJnFiaDEpKSkgewotCQkJCWQxLT51cCA9IHVwOworCQkJCWQxLT51cCA9IGNwdV90b19sZTMyKHVwKTsKIAkJCQlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaDEpOwogCQkJCWhwZnNfYnJlbHNlNCgmcWJoMSk7CiAJCQl9CiAJCX0KIAl9IGVsc2UgewotCQlocGZzX2Vycm9yKGktPmlfc2IsICJkZWxldGVfZW1wdHlfZG5vZGU6IGRub2RlICUwOHgsIGZpcnN0X2ZyZWUgPT0gJTAzeCIsIGRubywgZG5vZGUtPmZpcnN0X2ZyZWUpOworCQlocGZzX2Vycm9yKGktPmlfc2IsICJkZWxldGVfZW1wdHlfZG5vZGU6IGRub2RlICUwOHgsIGZpcnN0X2ZyZWUgPT0gJTAzeCIsIGRubywgbGUzMl90b19jcHUoZG5vZGUtPmZpcnN0X2ZyZWUpKTsKIAkJZ290byBlbmQ7CiAJfQogCkBAIC01OTYsMTggKzU5NiwxOCBAQAogCQlzdHJ1Y3QgcXVhZF9idWZmZXJfaGVhZCBxYmgxOwogCQlpZiAoIWRlX25leHQtPmRvd24pIGdvdG8gZW5kbTsKIAkJbmRvd24gPSBkZV9kb3duX3BvaW50ZXIoZGVfbmV4dCk7Ci0JCWlmICghKGRlX2NwID0ga21hbGxvYyhkZS0+bGVuZ3RoLCBHRlBfTk9GUykpKSB7CisJCWlmICghKGRlX2NwID0ga21hbGxvYyhsZTE2X3RvX2NwdShkZS0+bGVuZ3RoKSwgR0ZQX05PRlMpKSkgewogCQkJcHJpbnRrKCJIUEZTOiBvdXQgb2YgbWVtb3J5IGZvciBkdHJlZSBiYWxhbmNpbmdcbiIpOwogCQkJZ290byBlbmRtOwogCQl9Ci0JCW1lbWNweShkZV9jcCwgZGUsIGRlLT5sZW5ndGgpOworCQltZW1jcHkoZGVfY3AsIGRlLCBsZTE2X3RvX2NwdShkZS0+bGVuZ3RoKSk7CiAJCWhwZnNfZGVsZXRlX2RlKGktPmlfc2IsIGRub2RlLCBkZSk7CiAJCWhwZnNfbWFya180YnVmZmVyc19kaXJ0eSgmcWJoKTsKIAkJaHBmc19icmVsc2U0KCZxYmgpOwogCQlmb3JfYWxsX3Bvc3MoaSwgaHBmc19wb3Nfc3Vic3QsICgobG9mZl90KXVwIDw8IDQpIHwgcCwgNCk7CiAJCWZvcl9hbGxfcG9zcyhpLCBocGZzX3Bvc19kZWwsICgobG9mZl90KXVwIDw8IDQpIHwgcCwgMSk7CiAJCWlmIChkZV9jcC0+ZG93bikgaWYgKChkMSA9IGhwZnNfbWFwX2Rub2RlKGktPmlfc2IsIGRlX2Rvd25fcG9pbnRlcihkZV9jcCksICZxYmgxKSkpIHsKLQkJCWQxLT51cCA9IG5kb3duOworCQkJZDEtPnVwID0gY3B1X3RvX2xlMzIobmRvd24pOwogCQkJaHBmc19tYXJrXzRidWZmZXJzX2RpcnR5KCZxYmgxKTsKIAkJCWhwZnNfYnJlbHNlNCgmcWJoMSk7CiAJCX0KQEAgLTYzNSw3ICs2MzUsNyBAQAogCQkJc3RydWN0IGhwZnNfZGlyZW50ICpkZWwgPSBkbm9kZV9sYXN0X2RlKGQxKTsKIAkJCWRscCA9IGRlbC0+ZG93biA/IGRlX2Rvd25fcG9pbnRlcihkZWwpIDogMDsKIAkJCWlmICghZGxwICYmIGRvd24pIHsKLQkJCQlpZiAoZDEtPmZpcnN0X2ZyZWUgPiAyMDQ0KSB7CisJCQkJaWYgKGxlMzJfdG9fY3B1KGQxLT5maXJzdF9mcmVlKSA+IDIwNDQpIHsKIAkJCQkJaWYgKGhwZnNfc2IoaS0+aV9zYiktPnNiX2NoayA+PSAyKSB7CiAJCQkJCQlwcmludGsoIkhQRlM6IHdhcm5pbmc6IHVuYmFsYW5jZWQgZG5vZGUgdHJlZSwgc2VlIGhwZnMudHh0IDQgbW9yZSBpbmZvXG4iKTsKIAkJCQkJCXByaW50aygiSFBGUzogd2FybmluZzogdGVybWluYXRpbmcgYmFsYW5jaW5nIG9wZXJhdGlvblxuIik7CkBAIC02NDcsMzggKzY0NywzOCBAQAogCQkJCQlwcmludGsoIkhQRlM6IHdhcm5pbmc6IHVuYmFsYW5jZWQgZG5vZGUgdHJlZSwgc2VlIGhwZnMudHh0IDQgbW9yZSBpbmZvXG4iKTsKIAkJCQkJcHJpbnRrKCJIUEZTOiB3YXJuaW5nOiBnb2luJ29uXG4iKTsKIAkJCQl9Ci0JCQkJZGVsLT5sZW5ndGggKz0gNDsKKwkJCQlkZWwtPmxlbmd0aCA9IGNwdV90b19sZTE2KGxlMTZfdG9fY3B1KGRlbC0+bGVuZ3RoKSArIDQpOwogCQkJCWRlbC0+ZG93biA9IDE7Ci0JCQkJZDEtPmZpcnN0X2ZyZWUgKz0gNDsKKwkJCQlkMS0+Zmlyc3RfZnJlZSA9IGNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGQxLT5maXJzdF9mcmVlKSArIDQpOwogCQkJfQogCQkJaWYgKGRscCAmJiAhZG93bikgewotCQkJCWRlbC0+bGVuZ3RoIC09IDQ7CisJCQkJZGVsLT5sZW5ndGggPSBjcHVfdG9fbGUxNihsZTE2X3RvX2NwdShkZWwtPmxlbmd0aCkgLSA0KTsKIAkJCQlkZWwtPmRvd24gPSAwOwotCQkJCWQxLT5maXJzdF9mcmVlIC09IDQ7CisJCQkJZDEtPmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUzMihsZTMyX3RvX2NwdShkMS0+Zmlyc3RfZnJlZSkgLSA0KTsKIAkJCX0gZWxzZSBpZiAoZG93bikKLQkJCQkqKGRub2RlX3NlY25vICopICgodm9pZCAqKSBkZWwgKyBkZWwtPmxlbmd0aCAtIDQpID0gZG93bjsKKwkJCQkqKGRub2RlX3NlY25vICopICgodm9pZCAqKSBkZWwgKyBsZTE2X3RvX2NwdShkZWwtPmxlbmd0aCkgLSA0KSA9IGNwdV90b19sZTMyKGRvd24pOwogCQl9IGVsc2UgZ290byBlbmRtOwotCQlpZiAoIShkZV9jcCA9IGttYWxsb2MoZGVfcHJldi0+bGVuZ3RoLCBHRlBfTk9GUykpKSB7CisJCWlmICghKGRlX2NwID0ga21hbGxvYyhsZTE2X3RvX2NwdShkZV9wcmV2LT5sZW5ndGgpLCBHRlBfTk9GUykpKSB7CiAJCQlwcmludGsoIkhQRlM6IG91dCBvZiBtZW1vcnkgZm9yIGR0cmVlIGJhbGFuY2luZ1xuIik7CiAJCQlocGZzX2JyZWxzZTQoJnFiaDEpOwogCQkJZ290byBlbmRtOwogCQl9CiAJCWhwZnNfbWFya180YnVmZmVyc19kaXJ0eSgmcWJoMSk7CiAJCWhwZnNfYnJlbHNlNCgmcWJoMSk7Ci0JCW1lbWNweShkZV9jcCwgZGVfcHJldiwgZGVfcHJldi0+bGVuZ3RoKTsKKwkJbWVtY3B5KGRlX2NwLCBkZV9wcmV2LCBsZTE2X3RvX2NwdShkZV9wcmV2LT5sZW5ndGgpKTsKIAkJaHBmc19kZWxldGVfZGUoaS0+aV9zYiwgZG5vZGUsIGRlX3ByZXYpOwogCQlpZiAoIWRlX3ByZXYtPmRvd24pIHsKLQkJCWRlX3ByZXYtPmxlbmd0aCArPSA0OworCQkJZGVfcHJldi0+bGVuZ3RoID0gY3B1X3RvX2xlMTYobGUxNl90b19jcHUoZGVfcHJldi0+bGVuZ3RoKSArIDQpOwogCQkJZGVfcHJldi0+ZG93biA9IDE7Ci0JCQlkbm9kZS0+Zmlyc3RfZnJlZSArPSA0OworCQkJZG5vZGUtPmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUzMihsZTMyX3RvX2NwdShkbm9kZS0+Zmlyc3RfZnJlZSkgKyA0KTsKIAkJfQotCQkqKGRub2RlX3NlY25vICopICgodm9pZCAqKSBkZV9wcmV2ICsgZGVfcHJldi0+bGVuZ3RoIC0gNCkgPSBuZG93bjsKKwkJKihkbm9kZV9zZWNubyAqKSAoKHZvaWQgKikgZGVfcHJldiArIGxlMTZfdG9fY3B1KGRlX3ByZXYtPmxlbmd0aCkgLSA0KSA9IGNwdV90b19sZTMyKG5kb3duKTsKIAkJaHBmc19tYXJrXzRidWZmZXJzX2RpcnR5KCZxYmgpOwogCQlocGZzX2JyZWxzZTQoJnFiaCk7CiAJCWZvcl9hbGxfcG9zcyhpLCBocGZzX3Bvc19zdWJzdCwgKChsb2ZmX3QpdXAgPDwgNCkgfCAocCAtIDEpLCA0KTsKIAkJZm9yX2FsbF9wb3NzKGksIGhwZnNfcG9zX3N1YnN0LCAoKGxvZmZfdCl1cCA8PCA0KSB8IHAsICgobG9mZl90KXVwIDw8IDQpIHwgKHAgLSAxKSk7CiAJCWlmIChkb3duKSBpZiAoKGQxID0gaHBmc19tYXBfZG5vZGUoaS0+aV9zYiwgZGVfZG93bl9wb2ludGVyKGRlKSwgJnFiaDEpKSkgewotCQkJZDEtPnVwID0gbmRvd247CisJCQlkMS0+dXAgPSBjcHVfdG9fbGUzMihuZG93bik7CiAJCQlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaDEpOwogCQkJaHBmc19icmVsc2U0KCZxYmgxKTsKIAkJfQpAQCAtNzAxLDcgKzcwMSw2IEBACiB7CiAJc3RydWN0IGRub2RlICpkbm9kZSA9IHFiaC0+ZGF0YTsKIAlkbm9kZV9zZWNubyBkb3duID0gMDsKLQlpbnQgbG9jayA9IDA7CiAJbG9mZl90IHQ7CiAJaWYgKGRlLT5maXJzdCB8fCBkZS0+bGFzdCkgewogCQlocGZzX2Vycm9yKGktPmlfc2IsICJocGZzX3JlbW92ZV9kaXJlbnQ6IGF0dGVtcHQgdG8gZGVsZXRlIGZpcnN0IG9yIGxhc3QgZGlyZW50IGluIGRub2RlICUwOHgiLCBkbm8pOwpAQCAtNzEwLDExICs3MDksOCBAQAogCX0KIAlpZiAoZGUtPmRvd24pIGRvd24gPSBkZV9kb3duX3BvaW50ZXIoZGUpOwogCWlmIChkZXB0aCAmJiAoZGUtPmRvd24gfHwgKGRlID09IGRub2RlX2ZpcnN0X2RlKGRub2RlKSAmJiBkZV9uZXh0X2RlKGRlKS0+bGFzdCkpKSB7Ci0JCWxvY2sgPSAxOwotCQlocGZzX2xvY2tfY3JlYXRpb24oaS0+aV9zYik7CiAJCWlmIChocGZzX2NoZWNrX2ZyZWVfZG5vZGVzKGktPmlfc2IsIEZSRUVfRE5PREVTX0RFTCkpIHsKIAkJCWhwZnNfYnJlbHNlNChxYmgpOwotCQkJaHBmc191bmxvY2tfY3JlYXRpb24oaS0+aV9zYik7CiAJCQlyZXR1cm4gMjsKIAkJfQogCX0KQEAgLTcyNywxMSArNzIzLDkgQEAKIAkJZG5vZGVfc2Vjbm8gYSA9IG1vdmVfdG9fdG9wKGksIGRvd24sIGRubyk7CiAJCWZvcl9hbGxfcG9zcyhpLCBocGZzX3Bvc19zdWJzdCwgNSwgdCk7CiAJCWlmIChhKSBkZWxldGVfZW1wdHlfZG5vZGUoaSwgYSk7Ci0JCWlmIChsb2NrKSBocGZzX3VubG9ja19jcmVhdGlvbihpLT5pX3NiKTsKIAkJcmV0dXJuICFhOwogCX0KIAlkZWxldGVfZW1wdHlfZG5vZGUoaSwgZG5vKTsKLQlpZiAobG9jaykgaHBmc191bmxvY2tfY3JlYXRpb24oaS0+aV9zYik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc1MSw4ICs3NDUsOCBAQAogCXB0ciA9IDA7CiAJZ29fdXA6CiAJaWYgKCEoZG5vZGUgPSBocGZzX21hcF9kbm9kZShzLCBkbm8sICZxYmgpKSkgcmV0dXJuOwotCWlmIChocGZzX3NiKHMpLT5zYl9jaGspIGlmIChvZG5vICYmIG9kbm8gIT0gLTEgJiYgZG5vZGUtPnVwICE9IG9kbm8pCi0JCWhwZnNfZXJyb3IocywgImhwZnNfY291bnRfZG5vZGVzOiBiYWQgdXAgcG9pbnRlcjsgZG5vZGUgJTA4eCwgZG93biAlMDh4IHBvaW50cyB0byAlMDh4Iiwgb2RubywgZG5vLCBkbm9kZS0+dXApOworCWlmIChocGZzX3NiKHMpLT5zYl9jaGspIGlmIChvZG5vICYmIG9kbm8gIT0gLTEgJiYgbGUzMl90b19jcHUoZG5vZGUtPnVwKSAhPSBvZG5vKQorCQlocGZzX2Vycm9yKHMsICJocGZzX2NvdW50X2Rub2RlczogYmFkIHVwIHBvaW50ZXI7IGRub2RlICUwOHgsIGRvd24gJTA4eCBwb2ludHMgdG8gJTA4eCIsIG9kbm8sIGRubywgbGUzMl90b19jcHUoZG5vZGUtPnVwKSk7CiAJZGUgPSBkbm9kZV9maXJzdF9kZShkbm9kZSk7CiAJaWYgKHB0cikgd2hpbGUoMSkgewogCQlpZiAoZGUtPmRvd24pIGlmIChkZV9kb3duX3BvaW50ZXIoZGUpID09IHB0cikgZ290byBwcm9jZXNzX2RlOwpAQCAtNzc2LDcgKzc3MCw3IEBACiAJaWYgKCFkZS0+Zmlyc3QgJiYgIWRlLT5sYXN0ICYmIG5faXRlbXMpICgqbl9pdGVtcykrKzsKIAlpZiAoKGRlID0gZGVfbmV4dF9kZShkZSkpIDwgZG5vZGVfZW5kX2RlKGRub2RlKSkgZ290byBuZXh0X2RlOwogCXB0ciA9IGRubzsKLQlkbm8gPSBkbm9kZS0+dXA7CisJZG5vID0gbGUzMl90b19jcHUoZG5vZGUtPnVwKTsKIAlpZiAoZG5vZGUtPnJvb3RfZG5vZGUpIHsKIAkJaHBmc19icmVsc2U0KCZxYmgpOwogCQlyZXR1cm47CkBAIC04MjQsOCArODE4LDggQEAKIAkJCXJldHVybiBkOwogCWlmICghKGRlID0gbWFwX250aF9kaXJlbnQocywgZCwgMSwgJnFiaCwgTlVMTCkpKSByZXR1cm4gZG5vOwogCWlmIChocGZzX3NiKHMpLT5zYl9jaGspCi0JCWlmICh1cCAmJiAoKHN0cnVjdCBkbm9kZSAqKXFiaC5kYXRhKS0+dXAgIT0gdXApCi0JCQlocGZzX2Vycm9yKHMsICJocGZzX2RlX2FzX2Rvd25fYXNfcG9zc2libGU6IGJhZCB1cCBwb2ludGVyOyBkbm9kZSAlMDh4LCBkb3duICUwOHggcG9pbnRzIHRvICUwOHgiLCB1cCwgZCwgKChzdHJ1Y3QgZG5vZGUgKilxYmguZGF0YSktPnVwKTsKKwkJaWYgKHVwICYmIGxlMzJfdG9fY3B1KCgoc3RydWN0IGRub2RlICopcWJoLmRhdGEpLT51cCkgIT0gdXApCisJCQlocGZzX2Vycm9yKHMsICJocGZzX2RlX2FzX2Rvd25fYXNfcG9zc2libGU6IGJhZCB1cCBwb2ludGVyOyBkbm9kZSAlMDh4LCBkb3duICUwOHggcG9pbnRzIHRvICUwOHgiLCB1cCwgZCwgbGUzMl90b19jcHUoKChzdHJ1Y3QgZG5vZGUgKilxYmguZGF0YSktPnVwKSk7CiAJaWYgKCFkZS0+ZG93bikgewogCQlocGZzX2JyZWxzZTQoJnFiaCk7CiAJCXJldHVybiBkOwpAQCAtODc0LDcgKzg2OCw3IEBACiAJLyogR29pbmcgdXAgKi8KIAlpZiAoZG5vZGUtPnJvb3RfZG5vZGUpIGdvdG8gYmFpbDsKIAotCWlmICghKHVwX2Rub2RlID0gaHBmc19tYXBfZG5vZGUoaW5vZGUtPmlfc2IsIGRub2RlLT51cCwgJnFiaDApKSkKKwlpZiAoISh1cF9kbm9kZSA9IGhwZnNfbWFwX2Rub2RlKGlub2RlLT5pX3NiLCBsZTMyX3RvX2NwdShkbm9kZS0+dXApLCAmcWJoMCkpKQogCQlnb3RvIGJhaWw7CiAKIAllbmRfdXBfZGUgPSBkbm9kZV9lbmRfZGUodXBfZG5vZGUpOwpAQCAtODgyLDE2ICs4NzYsMTYgQEAKIAlmb3IgKHVwX2RlID0gZG5vZGVfZmlyc3RfZGUodXBfZG5vZGUpOyB1cF9kZSA8IGVuZF91cF9kZTsKIAkgICAgIHVwX2RlID0gZGVfbmV4dF9kZSh1cF9kZSkpIHsKIAkJaWYgKCEoKytjICYgMDc3KSkgaHBmc19lcnJvcihpbm9kZS0+aV9zYiwKLQkJCSJtYXBfcG9zX2RpcmVudDogcG9zIGNyb3NzZWQgZG5vZGUgYm91bmRhcnk7IGRub2RlID0gJTA4eCIsIGRub2RlLT51cCk7CisJCQkibWFwX3Bvc19kaXJlbnQ6IHBvcyBjcm9zc2VkIGRub2RlIGJvdW5kYXJ5OyBkbm9kZSA9ICUwOHgiLCBsZTMyX3RvX2NwdShkbm9kZS0+dXApKTsKIAkJaWYgKHVwX2RlLT5kb3duICYmIGRlX2Rvd25fcG9pbnRlcih1cF9kZSkgPT0gZG5vKSB7Ci0JCQkqcG9zcCA9ICgobG9mZl90KSBkbm9kZS0+dXAgPDwgNCkgKyBjOworCQkJKnBvc3AgPSAoKGxvZmZfdCkgbGUzMl90b19jcHUoZG5vZGUtPnVwKSA8PCA0KSArIGM7CiAJCQlocGZzX2JyZWxzZTQoJnFiaDApOwogCQkJcmV0dXJuIGRlOwogCQl9CiAJfQogCQogCWhwZnNfZXJyb3IoaW5vZGUtPmlfc2IsICJtYXBfcG9zX2RpcmVudDogcG9pbnRlciB0byBkbm9kZSAlMDh4IG5vdCBmb3VuZCBpbiBwYXJlbnQgZG5vZGUgJTA4eCIsCi0JCWRubywgZG5vZGUtPnVwKTsKKwkJZG5vLCBsZTMyX3RvX2NwdShkbm9kZS0+dXApKTsKIAlocGZzX2JyZWxzZTQoJnFiaDApOwogCQogCWJhaWw6CkBAIC0xMDE3LDE3ICsxMDExLDE3IEBACiAJCS8qbmFtZTJbMTVdID0gMHhmZjsqLwogCQluYW1lMWxlbiA9IDE1OyBuYW1lMmxlbiA9IDI1NjsKIAl9Ci0JaWYgKCEodXBmID0gaHBmc19tYXBfZm5vZGUocywgZi0+dXAsICZiaCkpKSB7CisJaWYgKCEodXBmID0gaHBmc19tYXBfZm5vZGUocywgbGUzMl90b19jcHUoZi0+dXApLCAmYmgpKSkgewogCQlrZnJlZShuYW1lMik7CiAJCXJldHVybiBOVUxMOwogCX0JCiAJaWYgKCF1cGYtPmRpcmZsYWcpIHsKIAkJYnJlbHNlKGJoKTsKLQkJaHBmc19lcnJvcihzLCAiZm5vZGUgJTA4eCBoYXMgbm9uLWRpcmVjdG9yeSBwYXJlbnQgJTA4eCIsIGZubywgZi0+dXApOworCQlocGZzX2Vycm9yKHMsICJmbm9kZSAlMDh4IGhhcyBub24tZGlyZWN0b3J5IHBhcmVudCAlMDh4IiwgZm5vLCBsZTMyX3RvX2NwdShmLT51cCkpOwogCQlrZnJlZShuYW1lMik7CiAJCXJldHVybiBOVUxMOwogCX0KLQlkbm8gPSB1cGYtPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubzsKKwlkbm8gPSBsZTMyX3RvX2NwdSh1cGYtPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubyk7CiAJYnJlbHNlKGJoKTsKIAlnb19kb3duOgogCWRvd25kID0gMDsKQEAgLTEwNDksNyArMTA0Myw3IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAluZXh0X2RlOgotCWlmIChkZS0+Zm5vZGUgPT0gZm5vKSB7CisJaWYgKGxlMzJfdG9fY3B1KGRlLT5mbm9kZSkgPT0gZm5vKSB7CiAJCWtmcmVlKG5hbWUyKTsKIAkJcmV0dXJuIGRlOwogCX0KQEAgLTEwNjUsNyArMTA1OSw3IEBACiAJCWdvdG8gZ29fZG93bjsKIAl9CiAJZjoKLQlpZiAoZGUtPmZub2RlID09IGZubykgeworCWlmIChsZTMyX3RvX2NwdShkZS0+Zm5vZGUpID09IGZubykgewogCQlrZnJlZShuYW1lMik7CiAJCXJldHVybiBkZTsKIAl9CkBAIC0xMDc0LDcgKzEwNjgsNyBAQAogCWlmICgoZGUgPSBkZV9uZXh0X2RlKGRlKSkgPCBkZV9lbmQpIGdvdG8gbmV4dF9kZTsKIAlpZiAoZC0+cm9vdF9kbm9kZSkgZ290byBub3RfZm91bmQ7CiAJZG93bmQgPSBkbm87Ci0JZG5vID0gZC0+dXA7CisJZG5vID0gbGUzMl90b19jcHUoZC0+dXApOwogCWhwZnNfYnJlbHNlNChxYmgpOwogCWlmIChocGZzX3NiKHMpLT5zYl9jaGspCiAJCWlmIChocGZzX3N0b3BfY3ljbGVzKHMsIGRvd25kLCAmZDEsICZkMiwgIm1hcF9mbm9kZV9kaXJlbnQgIzIiKSkgewpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9lYS5jIGIvZnMvaHBmcy9lYS5jCmluZGV4IDQ1ZTUzZDkuLmQ4Yjg0ZDEgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvZWEuYworKysgYi9mcy9ocGZzL2VhLmMKQEAgLTI0LDcgKzI0LDcgQEAKIAkJfQogCQlpZiAoaHBmc19lYV9yZWFkKHMsIGEsIGFubywgcG9zLCA0LCBleCkpIHJldHVybjsKIAkJaWYgKGVhLT5pbmRpcmVjdCkgewotCQkJaWYgKGVhLT52YWx1ZWxlbiAhPSA4KSB7CisJCQlpZiAoZWFfdmFsdWVsZW4oZWEpICE9IDgpIHsKIAkJCQlocGZzX2Vycm9yKHMsICJlYS0+aW5kaXJlY3Qgc2V0IHdoaWxlIGVhLT52YWx1ZWxlbiE9OCwgJXMgJTA4eCwgcG9zICUwOHgiLAogCQkJCQlhbm8gPyAiYW5vZGUiIDogInNlY3RvcnMiLCBhLCBwb3MpOwogCQkJCXJldHVybjsKQEAgLTMzLDcgKzMzLDcgQEAKIAkJCQlyZXR1cm47CiAJCQlocGZzX2VhX3JlbW92ZShzLCBlYV9zZWMoZWEpLCBlYS0+YW5vZGUsIGVhX2xlbihlYSkpOwogCQl9Ci0JCXBvcyArPSBlYS0+bmFtZWxlbiArIGVhLT52YWx1ZWxlbiArIDU7CisJCXBvcyArPSBlYS0+bmFtZWxlbiArIGVhX3ZhbHVlbGVuKGVhKSArIDU7CiAJfQogCWlmICghYW5vKSBocGZzX2ZyZWVfc2VjdG9ycyhzLCBhLCAobGVuKzUxMSkgPj4gOSk7CiAJZWxzZSB7CkBAIC03NiwyNCArNzYsMjQgQEAKIAl1bnNpZ25lZCBwb3M7CiAJaW50IGFubywgbGVuOwogCXNlY25vIGE7CisJY2hhciBleFs0ICsgMjU1ICsgMSArIDhdOwogCXN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKmVhOwogCXN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKmVhX2VuZCA9IGZub2RlX2VuZF9lYShmbm9kZSk7CiAJZm9yIChlYSA9IGZub2RlX2VhKGZub2RlKTsgZWEgPCBlYV9lbmQ7IGVhID0gbmV4dF9lYShlYSkpCiAJCWlmICghc3RyY21wKGVhLT5uYW1lLCBrZXkpKSB7CiAJCQlpZiAoZWEtPmluZGlyZWN0KQogCQkJCWdvdG8gaW5kaXJlY3Q7Ci0JCQlpZiAoZWEtPnZhbHVlbGVuID49IHNpemUpCisJCQlpZiAoZWFfdmFsdWVsZW4oZWEpID49IHNpemUpCiAJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQltZW1jcHkoYnVmLCBlYV9kYXRhKGVhKSwgZWEtPnZhbHVlbGVuKTsKLQkJCWJ1ZltlYS0+dmFsdWVsZW5dID0gMDsKKwkJCW1lbWNweShidWYsIGVhX2RhdGEoZWEpLCBlYV92YWx1ZWxlbihlYSkpOworCQkJYnVmW2VhX3ZhbHVlbGVuKGVhKV0gPSAwOwogCQkJcmV0dXJuIDA7CiAJCX0KLQlhID0gZm5vZGUtPmVhX3NlY25vOwotCWxlbiA9IGZub2RlLT5lYV9zaXplX2w7CisJYSA9IGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zZWNubyk7CisJbGVuID0gbGUzMl90b19jcHUoZm5vZGUtPmVhX3NpemVfbCk7CiAJYW5vID0gZm5vZGUtPmVhX2Fub2RlOwogCXBvcyA9IDA7CiAJd2hpbGUgKHBvcyA8IGxlbikgewotCQljaGFyIGV4WzQgKyAyNTUgKyAxICsgOF07CiAJCWVhID0gKHN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKilleDsKIAkJaWYgKHBvcyArIDQgPiBsZW4pIHsKIAkJCWhwZnNfZXJyb3IocywgIkVBcyBkb24ndCBlbmQgY29ycmVjdGx5LCAlcyAlMDh4LCBsZW4gJTA4eCIsCkBAIC0xMDYsMTQgKzEwNiwxNCBAQAogCQlpZiAoIXN0cmNtcChlYS0+bmFtZSwga2V5KSkgewogCQkJaWYgKGVhLT5pbmRpcmVjdCkKIAkJCQlnb3RvIGluZGlyZWN0OwotCQkJaWYgKGVhLT52YWx1ZWxlbiA+PSBzaXplKQorCQkJaWYgKGVhX3ZhbHVlbGVuKGVhKSA+PSBzaXplKQogCQkJCXJldHVybiAtRUlOVkFMOwotCQkJaWYgKGhwZnNfZWFfcmVhZChzLCBhLCBhbm8sIHBvcyArIDQgKyBlYS0+bmFtZWxlbiArIDEsIGVhLT52YWx1ZWxlbiwgYnVmKSkKKwkJCWlmIChocGZzX2VhX3JlYWQocywgYSwgYW5vLCBwb3MgKyA0ICsgZWEtPm5hbWVsZW4gKyAxLCBlYV92YWx1ZWxlbihlYSksIGJ1ZikpCiAJCQkJcmV0dXJuIC1FSU87Ci0JCQlidWZbZWEtPnZhbHVlbGVuXSA9IDA7CisJCQlidWZbZWFfdmFsdWVsZW4oZWEpXSA9IDA7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQlwb3MgKz0gZWEtPm5hbWVsZW4gKyBlYS0+dmFsdWVsZW4gKyA1OworCQlwb3MgKz0gZWEtPm5hbWVsZW4gKyBlYV92YWx1ZWxlbihlYSkgKyA1OwogCX0KIAlyZXR1cm4gLUVOT0VOVDsKIGluZGlyZWN0OgpAQCAtMTM4LDE2ICsxMzgsMTYgQEAKIAkJaWYgKCFzdHJjbXAoZWEtPm5hbWUsIGtleSkpIHsKIAkJCWlmIChlYS0+aW5kaXJlY3QpCiAJCQkJcmV0dXJuIGdldF9pbmRpcmVjdF9lYShzLCBlYS0+YW5vZGUsIGVhX3NlYyhlYSksICpzaXplID0gZWFfbGVuKGVhKSk7Ci0JCQlpZiAoIShyZXQgPSBrbWFsbG9jKCgqc2l6ZSA9IGVhLT52YWx1ZWxlbikgKyAxLCBHRlBfTk9GUykpKSB7CisJCQlpZiAoIShyZXQgPSBrbWFsbG9jKCgqc2l6ZSA9IGVhX3ZhbHVlbGVuKGVhKSkgKyAxLCBHRlBfTk9GUykpKSB7CiAJCQkJcHJpbnRrKCJIUEZTOiBvdXQgb2YgbWVtb3J5IGZvciBFQVxuIik7CiAJCQkJcmV0dXJuIE5VTEw7CiAJCQl9Ci0JCQltZW1jcHkocmV0LCBlYV9kYXRhKGVhKSwgZWEtPnZhbHVlbGVuKTsKLQkJCXJldFtlYS0+dmFsdWVsZW5dID0gMDsKKwkJCW1lbWNweShyZXQsIGVhX2RhdGEoZWEpLCBlYV92YWx1ZWxlbihlYSkpOworCQkJcmV0W2VhX3ZhbHVlbGVuKGVhKV0gPSAwOwogCQkJcmV0dXJuIHJldDsKIAkJfQotCWEgPSBmbm9kZS0+ZWFfc2Vjbm87Ci0JbGVuID0gZm5vZGUtPmVhX3NpemVfbDsKKwlhID0gbGUzMl90b19jcHUoZm5vZGUtPmVhX3NlY25vKTsKKwlsZW4gPSBsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9sKTsKIAlhbm8gPSBmbm9kZS0+ZWFfYW5vZGU7CiAJcG9zID0gMDsKIAl3aGlsZSAocG9zIDwgbGVuKSB7CkBAIC0xNjQsMTggKzE2NCwxOCBAQAogCQlpZiAoIXN0cmNtcChlYS0+bmFtZSwga2V5KSkgewogCQkJaWYgKGVhLT5pbmRpcmVjdCkKIAkJCQlyZXR1cm4gZ2V0X2luZGlyZWN0X2VhKHMsIGVhLT5hbm9kZSwgZWFfc2VjKGVhKSwgKnNpemUgPSBlYV9sZW4oZWEpKTsKLQkJCWlmICghKHJldCA9IGttYWxsb2MoKCpzaXplID0gZWEtPnZhbHVlbGVuKSArIDEsIEdGUF9OT0ZTKSkpIHsKKwkJCWlmICghKHJldCA9IGttYWxsb2MoKCpzaXplID0gZWFfdmFsdWVsZW4oZWEpKSArIDEsIEdGUF9OT0ZTKSkpIHsKIAkJCQlwcmludGsoIkhQRlM6IG91dCBvZiBtZW1vcnkgZm9yIEVBXG4iKTsKIAkJCQlyZXR1cm4gTlVMTDsKIAkJCX0KLQkJCWlmIChocGZzX2VhX3JlYWQocywgYSwgYW5vLCBwb3MgKyA0ICsgZWEtPm5hbWVsZW4gKyAxLCBlYS0+dmFsdWVsZW4sIHJldCkpIHsKKwkJCWlmIChocGZzX2VhX3JlYWQocywgYSwgYW5vLCBwb3MgKyA0ICsgZWEtPm5hbWVsZW4gKyAxLCBlYV92YWx1ZWxlbihlYSksIHJldCkpIHsKIAkJCQlrZnJlZShyZXQpOwogCQkJCXJldHVybiBOVUxMOwogCQkJfQotCQkJcmV0W2VhLT52YWx1ZWxlbl0gPSAwOworCQkJcmV0W2VhX3ZhbHVlbGVuKGVhKV0gPSAwOwogCQkJcmV0dXJuIHJldDsKIAkJfQotCQlwb3MgKz0gZWEtPm5hbWVsZW4gKyBlYS0+dmFsdWVsZW4gKyA1OworCQlwb3MgKz0gZWEtPm5hbWVsZW4gKyBlYV92YWx1ZWxlbihlYSkgKyA1OwogCX0KIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTIwMiwxMyArMjAyLDEzIEBACiAJCQlpZiAoZWEtPmluZGlyZWN0KSB7CiAJCQkJaWYgKGVhX2xlbihlYSkgPT0gc2l6ZSkKIAkJCQkJc2V0X2luZGlyZWN0X2VhKHMsIGVhLT5hbm9kZSwgZWFfc2VjKGVhKSwgZGF0YSwgc2l6ZSk7Ci0JCQl9IGVsc2UgaWYgKGVhLT52YWx1ZWxlbiA9PSBzaXplKSB7CisJCQl9IGVsc2UgaWYgKGVhX3ZhbHVlbGVuKGVhKSA9PSBzaXplKSB7CiAJCQkJbWVtY3B5KGVhX2RhdGEoZWEpLCBkYXRhLCBzaXplKTsKIAkJCX0KIAkJCXJldHVybjsKIAkJfQotCWEgPSBmbm9kZS0+ZWFfc2Vjbm87Ci0JbGVuID0gZm5vZGUtPmVhX3NpemVfbDsKKwlhID0gbGUzMl90b19jcHUoZm5vZGUtPmVhX3NlY25vKTsKKwlsZW4gPSBsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9sKTsKIAlhbm8gPSBmbm9kZS0+ZWFfYW5vZGU7CiAJcG9zID0gMDsKIAl3aGlsZSAocG9zIDwgbGVuKSB7CkBAIC0yMjgsNjggKzIyOCw3MCBAQAogCQkJCQlzZXRfaW5kaXJlY3RfZWEocywgZWEtPmFub2RlLCBlYV9zZWMoZWEpLCBkYXRhLCBzaXplKTsKIAkJCX0KIAkJCWVsc2UgewotCQkJCWlmIChlYS0+dmFsdWVsZW4gPT0gc2l6ZSkKKwkJCQlpZiAoZWFfdmFsdWVsZW4oZWEpID09IHNpemUpCiAJCQkJCWhwZnNfZWFfd3JpdGUocywgYSwgYW5vLCBwb3MgKyA0ICsgZWEtPm5hbWVsZW4gKyAxLCBzaXplLCBkYXRhKTsKIAkJCX0KIAkJCXJldHVybjsKIAkJfQotCQlwb3MgKz0gZWEtPm5hbWVsZW4gKyBlYS0+dmFsdWVsZW4gKyA1OworCQlwb3MgKz0gZWEtPm5hbWVsZW4gKyBlYV92YWx1ZWxlbihlYSkgKyA1OwogCX0KLQlpZiAoIWZub2RlLT5lYV9vZmZzKSB7Ci0JCS8qaWYgKGZub2RlLT5lYV9zaXplX3MpIHsKKwlpZiAoIWxlMTZfdG9fY3B1KGZub2RlLT5lYV9vZmZzKSkgeworCQkvKmlmIChsZTE2X3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9zKSkgewogCQkJaHBmc19lcnJvcihzLCAiZm5vZGUgJTA4eDogZWFfc2l6ZV9zID09ICUwM3gsIGVhX29mZnMgPT0gMCIsCi0JCQkJaW5vZGUtPmlfaW5vLCBmbm9kZS0+ZWFfc2l6ZV9zKTsKKwkJCQlpbm9kZS0+aV9pbm8sIGxlMTZfdG9fY3B1KGZub2RlLT5lYV9zaXplX3MpKTsKIAkJCXJldHVybjsKIAkJfSovCi0JCWZub2RlLT5lYV9vZmZzID0gMHhjNDsKKwkJZm5vZGUtPmVhX29mZnMgPSBjcHVfdG9fbGUxNigweGM0KTsKIAl9Ci0JaWYgKGZub2RlLT5lYV9vZmZzIDwgMHhjNCB8fCBmbm9kZS0+ZWFfb2ZmcyArIGZub2RlLT5hY2xfc2l6ZV9zICsgZm5vZGUtPmVhX3NpemVfcyA+IDB4MjAwKSB7CisJaWYgKGxlMTZfdG9fY3B1KGZub2RlLT5lYV9vZmZzKSA8IDB4YzQgfHwgbGUxNl90b19jcHUoZm5vZGUtPmVhX29mZnMpICsgbGUxNl90b19jcHUoZm5vZGUtPmFjbF9zaXplX3MpICsgbGUxNl90b19jcHUoZm5vZGUtPmVhX3NpemVfcykgPiAweDIwMCkgewogCQlocGZzX2Vycm9yKHMsICJmbm9kZSAlMDhseDogZWFfb2ZmcyA9PSAlMDN4LCBlYV9zaXplX3MgPT0gJTAzeCIsCiAJCQkodW5zaWduZWQgbG9uZylpbm9kZS0+aV9pbm8sCi0JCQlmbm9kZS0+ZWFfb2ZmcywgZm5vZGUtPmVhX3NpemVfcyk7CisJCQlsZTMyX3RvX2NwdShmbm9kZS0+ZWFfb2ZmcyksIGxlMTZfdG9fY3B1KGZub2RlLT5lYV9zaXplX3MpKTsKIAkJcmV0dXJuOwogCX0KLQlpZiAoKGZub2RlLT5lYV9zaXplX3MgfHwgIWZub2RlLT5lYV9zaXplX2wpICYmCi0JICAgICBmbm9kZS0+ZWFfb2ZmcyArIGZub2RlLT5hY2xfc2l6ZV9zICsgZm5vZGUtPmVhX3NpemVfcyArIHN0cmxlbihrZXkpICsgc2l6ZSArIDUgPD0gMHgyMDApIHsKKwlpZiAoKGxlMTZfdG9fY3B1KGZub2RlLT5lYV9zaXplX3MpIHx8ICFsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9sKSkgJiYKKwkgICAgIGxlMTZfdG9fY3B1KGZub2RlLT5lYV9vZmZzKSArIGxlMTZfdG9fY3B1KGZub2RlLT5hY2xfc2l6ZV9zKSArIGxlMTZfdG9fY3B1KGZub2RlLT5lYV9zaXplX3MpICsgc3RybGVuKGtleSkgKyBzaXplICsgNSA8PSAweDIwMCkgewogCQllYSA9IGZub2RlX2VuZF9lYShmbm9kZSk7CiAJCSooY2hhciAqKWVhID0gMDsKIAkJZWEtPm5hbWVsZW4gPSBzdHJsZW4oa2V5KTsKLQkJZWEtPnZhbHVlbGVuID0gc2l6ZTsKKwkJZWEtPnZhbHVlbGVuX2xvID0gc2l6ZTsKKwkJZWEtPnZhbHVlbGVuX2hpID0gc2l6ZSA+PiA4OwogCQlzdHJjcHkoZWEtPm5hbWUsIGtleSk7CiAJCW1lbWNweShlYV9kYXRhKGVhKSwgZGF0YSwgc2l6ZSk7Ci0JCWZub2RlLT5lYV9zaXplX3MgKz0gc3RybGVuKGtleSkgKyBzaXplICsgNTsKKwkJZm5vZGUtPmVhX3NpemVfcyA9IGNwdV90b19sZTE2KGxlMTZfdG9fY3B1KGZub2RlLT5lYV9zaXplX3MpICsgc3RybGVuKGtleSkgKyBzaXplICsgNSk7CiAJCWdvdG8gcmV0OwogCX0KIAkvKiBNb3N0IHRoZSBjb2RlIGhlcmUgaXMgOTkuOTk5MzQyMiUgdW51c2VkLiBJIGhvcGUgdGhlcmUgYXJlIG5vIGJ1Z3MuCiAJICAgQnV0IHdoYXQgLi4gSFBGUy5JRlMgaGFzIGFsc28gYnVncyBpbiBlYSBtYW5hZ2VtZW50LiAqLwotCWlmIChmbm9kZS0+ZWFfc2l6ZV9zICYmICFmbm9kZS0+ZWFfc2l6ZV9sKSB7CisJaWYgKGxlMTZfdG9fY3B1KGZub2RlLT5lYV9zaXplX3MpICYmICFsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9sKSkgewogCQlzZWNubyBuOwogCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCQljaGFyICpkYXRhOwotCQlpZiAoIShuID0gaHBmc19hbGxvY19zZWN0b3IocywgZm5vLCAxLCAwLCAxKSkpIHJldHVybjsKKwkJaWYgKCEobiA9IGhwZnNfYWxsb2Nfc2VjdG9yKHMsIGZubywgMSwgMCkpKSByZXR1cm47CiAJCWlmICghKGRhdGEgPSBocGZzX2dldF9zZWN0b3IocywgbiwgJmJoKSkpIHsKIAkJCWhwZnNfZnJlZV9zZWN0b3JzKHMsIG4sIDEpOwogCQkJcmV0dXJuOwogCQl9Ci0JCW1lbWNweShkYXRhLCBmbm9kZV9lYShmbm9kZSksIGZub2RlLT5lYV9zaXplX3MpOwotCQlmbm9kZS0+ZWFfc2l6ZV9sID0gZm5vZGUtPmVhX3NpemVfczsKLQkJZm5vZGUtPmVhX3NpemVfcyA9IDA7Ci0JCWZub2RlLT5lYV9zZWNubyA9IG47Ci0JCWZub2RlLT5lYV9hbm9kZSA9IDA7CisJCW1lbWNweShkYXRhLCBmbm9kZV9lYShmbm9kZSksIGxlMTZfdG9fY3B1KGZub2RlLT5lYV9zaXplX3MpKTsKKwkJZm5vZGUtPmVhX3NpemVfbCA9IGNwdV90b19sZTMyKGxlMTZfdG9fY3B1KGZub2RlLT5lYV9zaXplX3MpKTsKKwkJZm5vZGUtPmVhX3NpemVfcyA9IGNwdV90b19sZTE2KDApOworCQlmbm9kZS0+ZWFfc2Vjbm8gPSBjcHVfdG9fbGUzMihuKTsKKwkJZm5vZGUtPmVhX2Fub2RlID0gY3B1X3RvX2xlMzIoMCk7CiAJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJYnJlbHNlKGJoKTsKIAl9Ci0JcG9zID0gZm5vZGUtPmVhX3NpemVfbCArIDUgKyBzdHJsZW4oa2V5KSArIHNpemU7Ci0JbGVuID0gKGZub2RlLT5lYV9zaXplX2wgKyA1MTEpID4+IDk7CisJcG9zID0gbGUzMl90b19jcHUoZm5vZGUtPmVhX3NpemVfbCkgKyA1ICsgc3RybGVuKGtleSkgKyBzaXplOworCWxlbiA9IChsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9sKSArIDUxMSkgPj4gOTsKIAlpZiAocG9zID49IDMwMDAwKSBnb3RvIGJhaWw7CiAJd2hpbGUgKCgocG9zICsgNTExKSA+PiA5KSA+IGxlbikgewogCQlpZiAoIWxlbikgewotCQkJaWYgKCEoZm5vZGUtPmVhX3NlY25vID0gaHBmc19hbGxvY19zZWN0b3IocywgZm5vLCAxLCAwLCAxKSkpCi0JCQkJZ290byBiYWlsOworCQkJc2Vjbm8gcSA9IGhwZnNfYWxsb2Nfc2VjdG9yKHMsIGZubywgMSwgMCk7CisJCQlpZiAoIXEpIGdvdG8gYmFpbDsKKwkJCWZub2RlLT5lYV9zZWNubyA9IGNwdV90b19sZTMyKHEpOwogCQkJZm5vZGUtPmVhX2Fub2RlID0gMDsKIAkJCWxlbisrOwogCQl9IGVsc2UgaWYgKCFmbm9kZS0+ZWFfYW5vZGUpIHsKLQkJCWlmIChocGZzX2FsbG9jX2lmX3Bvc3NpYmxlKHMsIGZub2RlLT5lYV9zZWNubyArIGxlbikpIHsKKwkJCWlmIChocGZzX2FsbG9jX2lmX3Bvc3NpYmxlKHMsIGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zZWNubykgKyBsZW4pKSB7CiAJCQkJbGVuKys7CiAJCQl9IGVsc2UgewogCQkJCS8qIEFhcmdoLi4uIGRvbid0IGtub3cgaG93IHRvIGNyZWF0ZSBlYSBhbm9kZXMgOi0oICovCkBAIC0yOTgsMjYgKzMwMCwyNiBAQAogCQkJCWFub2RlX3NlY25vIGFfczsKIAkJCQlpZiAoIShhbm9kZSA9IGhwZnNfYWxsb2NfYW5vZGUocywgZm5vLCAmYV9zLCAmYmgpKSkKIAkJCQkJZ290byBiYWlsOwotCQkJCWFub2RlLT51cCA9IGZubzsKKwkJCQlhbm9kZS0+dXAgPSBjcHVfdG9fbGUzMihmbm8pOwogCQkJCWFub2RlLT5idHJlZS5mbm9kZV9wYXJlbnQgPSAxOwogCQkJCWFub2RlLT5idHJlZS5uX2ZyZWVfbm9kZXMtLTsKIAkJCQlhbm9kZS0+YnRyZWUubl91c2VkX25vZGVzKys7Ci0JCQkJYW5vZGUtPmJ0cmVlLmZpcnN0X2ZyZWUgKz0gMTI7Ci0JCQkJYW5vZGUtPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubyA9IGZub2RlLT5lYV9zZWNubzsKLQkJCQlhbm9kZS0+dS5leHRlcm5hbFswXS5maWxlX3NlY25vID0gMDsKLQkJCQlhbm9kZS0+dS5leHRlcm5hbFswXS5sZW5ndGggPSBsZW47CisJCQkJYW5vZGUtPmJ0cmVlLmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUxNihsZTE2X3RvX2NwdShhbm9kZS0+YnRyZWUuZmlyc3RfZnJlZSkgKyAxMik7CisJCQkJYW5vZGUtPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubyA9IGNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zZWNubykpOworCQkJCWFub2RlLT51LmV4dGVybmFsWzBdLmZpbGVfc2Vjbm8gPSBjcHVfdG9fbGUzMigwKTsKKwkJCQlhbm9kZS0+dS5leHRlcm5hbFswXS5sZW5ndGggPSBjcHVfdG9fbGUzMihsZW4pOwogCQkJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJCQlicmVsc2UoYmgpOwogCQkJCWZub2RlLT5lYV9hbm9kZSA9IDE7Ci0JCQkJZm5vZGUtPmVhX3NlY25vID0gYV9zOyovCisJCQkJZm5vZGUtPmVhX3NlY25vID0gY3B1X3RvX2xlMzIoYV9zKTsqLwogCQkJCXNlY25vIG5ld19zZWM7CiAJCQkJaW50IGk7Ci0JCQkJaWYgKCEobmV3X3NlYyA9IGhwZnNfYWxsb2Nfc2VjdG9yKHMsIGZubywgMSwgMSAtICgocG9zICsgNTExKSA+PiA5KSwgMSkpKQorCQkJCWlmICghKG5ld19zZWMgPSBocGZzX2FsbG9jX3NlY3RvcihzLCBmbm8sIDEsIDEgLSAoKHBvcyArIDUxMSkgPj4gOSkpKSkKIAkJCQkJZ290byBiYWlsOwogCQkJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogCQkJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoMSwgKmJoMjsKIAkJCQkJdm9pZCAqYjEsICpiMjsKLQkJCQkJaWYgKCEoYjEgPSBocGZzX21hcF9zZWN0b3IocywgZm5vZGUtPmVhX3NlY25vICsgaSwgJmJoMSwgbGVuIC0gaSAtIDEpKSkgeworCQkJCQlpZiAoIShiMSA9IGhwZnNfbWFwX3NlY3RvcihzLCBsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2Vjbm8pICsgaSwgJmJoMSwgbGVuIC0gaSAtIDEpKSkgewogCQkJCQkJaHBmc19mcmVlX3NlY3RvcnMocywgbmV3X3NlYywgKHBvcyArIDUxMSkgPj4gOSk7CiAJCQkJCQlnb3RvIGJhaWw7CiAJCQkJCX0KQEAgLTMzMSwxMyArMzMzLDEzIEBACiAJCQkJCW1hcmtfYnVmZmVyX2RpcnR5KGJoMik7CiAJCQkJCWJyZWxzZShiaDIpOwogCQkJCX0KLQkJCQlocGZzX2ZyZWVfc2VjdG9ycyhzLCBmbm9kZS0+ZWFfc2Vjbm8sIGxlbik7Ci0JCQkJZm5vZGUtPmVhX3NlY25vID0gbmV3X3NlYzsKKwkJCQlocGZzX2ZyZWVfc2VjdG9ycyhzLCBsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2Vjbm8pLCBsZW4pOworCQkJCWZub2RlLT5lYV9zZWNubyA9IGNwdV90b19sZTMyKG5ld19zZWMpOwogCQkJCWxlbiA9IChwb3MgKyA1MTEpID4+IDk7CiAJCQl9CiAJCX0KIAkJaWYgKGZub2RlLT5lYV9hbm9kZSkgewotCQkJaWYgKGhwZnNfYWRkX3NlY3Rvcl90b19idHJlZShzLCBmbm9kZS0+ZWFfc2Vjbm8sCisJCQlpZiAoaHBmc19hZGRfc2VjdG9yX3RvX2J0cmVlKHMsIGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zZWNubyksCiAJCQkJCQkgICAgIDAsIGxlbikgIT0gLTEpIHsKIAkJCQlsZW4rKzsKIAkJCX0gZWxzZSB7CkBAIC0zNDksMTcgKzM1MSwxNyBAQAogCWhbMV0gPSBzdHJsZW4oa2V5KTsKIAloWzJdID0gc2l6ZSAmIDB4ZmY7CiAJaFszXSA9IHNpemUgPj4gODsKLQlpZiAoaHBmc19lYV93cml0ZShzLCBmbm9kZS0+ZWFfc2Vjbm8sIGZub2RlLT5lYV9hbm9kZSwgZm5vZGUtPmVhX3NpemVfbCwgNCwgaCkpIGdvdG8gYmFpbDsKLQlpZiAoaHBmc19lYV93cml0ZShzLCBmbm9kZS0+ZWFfc2Vjbm8sIGZub2RlLT5lYV9hbm9kZSwgZm5vZGUtPmVhX3NpemVfbCArIDQsIGhbMV0gKyAxLCBrZXkpKSBnb3RvIGJhaWw7Ci0JaWYgKGhwZnNfZWFfd3JpdGUocywgZm5vZGUtPmVhX3NlY25vLCBmbm9kZS0+ZWFfYW5vZGUsIGZub2RlLT5lYV9zaXplX2wgKyA1ICsgaFsxXSwgc2l6ZSwgZGF0YSkpIGdvdG8gYmFpbDsKLQlmbm9kZS0+ZWFfc2l6ZV9sID0gcG9zOworCWlmIChocGZzX2VhX3dyaXRlKHMsIGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zZWNubyksIGZub2RlLT5lYV9hbm9kZSwgbGUzMl90b19jcHUoZm5vZGUtPmVhX3NpemVfbCksIDQsIGgpKSBnb3RvIGJhaWw7CisJaWYgKGhwZnNfZWFfd3JpdGUocywgbGUzMl90b19jcHUoZm5vZGUtPmVhX3NlY25vKSwgZm5vZGUtPmVhX2Fub2RlLCBsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9sKSArIDQsIGhbMV0gKyAxLCBrZXkpKSBnb3RvIGJhaWw7CisJaWYgKGhwZnNfZWFfd3JpdGUocywgbGUzMl90b19jcHUoZm5vZGUtPmVhX3NlY25vKSwgZm5vZGUtPmVhX2Fub2RlLCBsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9sKSArIDUgKyBoWzFdLCBzaXplLCBkYXRhKSkgZ290byBiYWlsOworCWZub2RlLT5lYV9zaXplX2wgPSBjcHVfdG9fbGUzMihwb3MpOwogCXJldDoKIAlocGZzX2koaW5vZGUpLT5pX2VhX3NpemUgKz0gNSArIHN0cmxlbihrZXkpICsgc2l6ZTsKIAlyZXR1cm47CiAJYmFpbDoKLQlpZiAoZm5vZGUtPmVhX3NlY25vKQotCQlpZiAoZm5vZGUtPmVhX2Fub2RlKSBocGZzX3RydW5jYXRlX2J0cmVlKHMsIGZub2RlLT5lYV9zZWNubywgMSwgKGZub2RlLT5lYV9zaXplX2wgKyA1MTEpID4+IDkpOwotCQllbHNlIGhwZnNfZnJlZV9zZWN0b3JzKHMsIGZub2RlLT5lYV9zZWNubyArICgoZm5vZGUtPmVhX3NpemVfbCArIDUxMSkgPj4gOSksIGxlbiAtICgoZm5vZGUtPmVhX3NpemVfbCArIDUxMSkgPj4gOSkpOwotCWVsc2UgZm5vZGUtPmVhX3NlY25vID0gZm5vZGUtPmVhX3NpemVfbCA9IDA7CisJaWYgKGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zZWNubykpCisJCWlmIChmbm9kZS0+ZWFfYW5vZGUpIGhwZnNfdHJ1bmNhdGVfYnRyZWUocywgbGUzMl90b19jcHUoZm5vZGUtPmVhX3NlY25vKSwgMSwgKGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zaXplX2wpICsgNTExKSA+PiA5KTsKKwkJZWxzZSBocGZzX2ZyZWVfc2VjdG9ycyhzLCBsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2Vjbm8pICsgKChsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9sKSArIDUxMSkgPj4gOSksIGxlbiAtICgobGUzMl90b19jcHUoZm5vZGUtPmVhX3NpemVfbCkgKyA1MTEpID4+IDkpKTsKKwllbHNlIGZub2RlLT5lYV9zZWNubyA9IGZub2RlLT5lYV9zaXplX2wgPSBjcHVfdG9fbGUzMigwKTsKIH0KIAkKZGlmZiAtLWdpdCBhL2ZzL2hwZnMvZmlsZS5jIGIvZnMvaHBmcy9maWxlLmMKaW5kZXggOWI5ZWI2OS4uODljNTAwZSAxMDA2NDQKLS0tIGEvZnMvaHBmcy9maWxlLmMKKysrIGIvZnMvaHBmcy9maWxlLmMKQEAgLTIwLDggKzIwLDggQEAKIAogaW50IGhwZnNfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGRhdGFzeW5jKQogewotCS8qcmV0dXJuIGZpbGVfZnN5bmMoZmlsZSwgZGF0YXN5bmMpOyovCi0JcmV0dXJuIDA7IC8qIERvbid0IGZzeW5jIDotKSAqLworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX21hcHBpbmctPmhvc3Q7CisJcmV0dXJuIHN5bmNfYmxvY2tkZXYoaW5vZGUtPmlfc2ItPnNfYmRldik7CiB9CiAKIC8qCkBAIC00OCwzOCArNDgsNDYgQEAKIHN0YXRpYyB2b2lkIGhwZnNfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppKQogewogCWlmIChJU19JTU1VVEFCTEUoaSkpIHJldHVybiAvKi1FUEVSTSovOwotCWhwZnNfbG9jayhpLT5pX3NiKTsKKwlocGZzX2xvY2tfYXNzZXJ0KGktPmlfc2IpOworCiAJaHBmc19pKGkpLT5pX25fc2VjcyA9IDA7CiAJaS0+aV9ibG9ja3MgPSAxICsgKChpLT5pX3NpemUgKyA1MTEpID4+IDkpOwogCWhwZnNfaShpKS0+bW11X3ByaXZhdGUgPSBpLT5pX3NpemU7CiAJaHBmc190cnVuY2F0ZV9idHJlZShpLT5pX3NiLCBpLT5pX2lubywgMSwgKChpLT5pX3NpemUgKyA1MTEpID4+IDkpKTsKIAlocGZzX3dyaXRlX2lub2RlKGkpOwogCWhwZnNfaShpKS0+aV9uX3NlY3MgPSAwOwotCWhwZnNfdW5sb2NrKGktPmlfc2IpOwogfQogCiBzdGF0aWMgaW50IGhwZnNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jaywgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpCiB7CisJaW50IHI7CiAJc2Vjbm8gczsKKwlocGZzX2xvY2soaW5vZGUtPmlfc2IpOwogCXMgPSBocGZzX2JtYXAoaW5vZGUsIGlibG9jayk7CiAJaWYgKHMpIHsKIAkJbWFwX2JoKGJoX3Jlc3VsdCwgaW5vZGUtPmlfc2IsIHMpOwotCQlyZXR1cm4gMDsKKwkJZ290byByZXRfMDsKIAl9Ci0JaWYgKCFjcmVhdGUpIHJldHVybiAwOworCWlmICghY3JlYXRlKSBnb3RvIHJldF8wOwogCWlmIChpYmxvY2s8PDkgIT0gaHBmc19pKGlub2RlKS0+bW11X3ByaXZhdGUpIHsKIAkJQlVHKCk7Ci0JCXJldHVybiAtRUlPOworCQlyID0gLUVJTzsKKwkJZ290byByZXRfcjsKIAl9CiAJaWYgKChzID0gaHBmc19hZGRfc2VjdG9yX3RvX2J0cmVlKGlub2RlLT5pX3NiLCBpbm9kZS0+aV9pbm8sIDEsIGlub2RlLT5pX2Jsb2NrcyAtIDEpKSA9PSAtMSkgewogCQlocGZzX3RydW5jYXRlX2J0cmVlKGlub2RlLT5pX3NiLCBpbm9kZS0+aV9pbm8sIDEsIGlub2RlLT5pX2Jsb2NrcyAtIDEpOwotCQlyZXR1cm4gLUVOT1NQQzsKKwkJciA9IC1FTk9TUEM7CisJCWdvdG8gcmV0X3I7CiAJfQogCWlub2RlLT5pX2Jsb2NrcysrOwogCWhwZnNfaShpbm9kZSktPm1tdV9wcml2YXRlICs9IDUxMjsKIAlzZXRfYnVmZmVyX25ldyhiaF9yZXN1bHQpOwogCW1hcF9iaChiaF9yZXN1bHQsIGlub2RlLT5pX3NiLCBzKTsKLQlyZXR1cm4gMDsKKwlyZXRfMDoKKwlyID0gMDsKKwlyZXRfcjoKKwlocGZzX3VubG9jayhpbm9kZS0+aV9zYik7CisJcmV0dXJuIHI7CiB9CiAKIHN0YXRpYyBpbnQgaHBmc193cml0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQpAQCAtMTMwLDggKzEzOCwxMSBAQAogCXNzaXplX3QgcmV0dmFsOwogCiAJcmV0dmFsID0gZG9fc3luY193cml0ZShmaWxlLCBidWYsIGNvdW50LCBwcG9zKTsKLQlpZiAocmV0dmFsID4gMCkKKwlpZiAocmV0dmFsID4gMCkgeworCQlocGZzX2xvY2soZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9zYik7CiAJCWhwZnNfaShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+aV9kaXJ0eSA9IDE7CisJCWhwZnNfdW5sb2NrKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfc2IpOworCX0KIAlyZXR1cm4gcmV0dmFsOwogfQogCmRpZmYgLS1naXQgYS9mcy9ocGZzL2hwZnMuaCBiL2ZzL2hwZnMvaHBmcy5oCmluZGV4IDBlODRjNzMuLjhiMDY1MGEgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvaHBmcy5oCisrKyBiL2ZzL2hwZnMvaHBmcy5oCkBAIC0xOSw5ICsxOSwxMyBAQAogICAgRm9yIGRlZmluaXRpdmUgaW5mb3JtYXRpb24gb24gSFBGUywgYXNrIHNvbWVib2R5IGVsc2UgLS0gdGhpcyBpcyBndWVzc3dvcmsuCiAgICBUaGVyZSBhcmUgY2VydGFpbiB0byBiZSBtYW55IG1pc3Rha2VzLiAqLwogCisjaWYgIWRlZmluZWQoX19MSVRUTEVfRU5ESUFOKSAmJiAhZGVmaW5lZChfX0JJR19FTkRJQU4pCisjZXJyb3IgdW5rbm93biBlbmRpYW4KKyNlbmRpZgorCiAvKiBOb3RhdGlvbiAqLwogCi10eXBlZGVmIHVuc2lnbmVkIHNlY25vOwkJCS8qIHNlY3RvciBudW1iZXIsIHBhcnRpdGlvbiByZWxhdGl2ZSAqLwordHlwZWRlZiB1MzIgc2Vjbm87CQkJLyogc2VjdG9yIG51bWJlciwgcGFydGl0aW9uIHJlbGF0aXZlICovCiAKIHR5cGVkZWYgc2Vjbm8gZG5vZGVfc2Vjbm87CQkvKiBzZWN0b3IgbnVtYmVyIG9mIGEgZG5vZGUgKi8KIHR5cGVkZWYgc2Vjbm8gZm5vZGVfc2Vjbm87CQkvKiBzZWN0b3IgbnVtYmVyIG9mIGFuIGZub2RlICovCkBAIC0zOCwyOCArNDIsMjggQEAKIAogc3RydWN0IGhwZnNfYm9vdF9ibG9jawogewotICB1bnNpZ25lZCBjaGFyIGptcFszXTsKLSAgdW5zaWduZWQgY2hhciBvZW1faWRbOF07Ci0gIHVuc2lnbmVkIGNoYXIgYnl0ZXNfcGVyX3NlY3RvclsyXTsJLyogNTEyICovCi0gIHVuc2lnbmVkIGNoYXIgc2VjdG9yc19wZXJfY2x1c3RlcjsKLSAgdW5zaWduZWQgY2hhciBuX3Jlc2VydmVkX3NlY3RvcnNbMl07Ci0gIHVuc2lnbmVkIGNoYXIgbl9mYXRzOwotICB1bnNpZ25lZCBjaGFyIG5fcm9vdGRpcl9lbnRyaWVzWzJdOwotICB1bnNpZ25lZCBjaGFyIG5fc2VjdG9yc19zWzJdOwotICB1bnNpZ25lZCBjaGFyIG1lZGlhX2J5dGU7Ci0gIHVuc2lnbmVkIHNob3J0IHNlY3RvcnNfcGVyX2ZhdDsKLSAgdW5zaWduZWQgc2hvcnQgc2VjdG9yc19wZXJfdHJhY2s7Ci0gIHVuc2lnbmVkIHNob3J0IGhlYWRzX3Blcl9jeWw7Ci0gIHVuc2lnbmVkIGludCBuX2hpZGRlbl9zZWN0b3JzOwotICB1bnNpZ25lZCBpbnQgbl9zZWN0b3JzX2w7CQkvKiBzaXplIG9mIHBhcnRpdGlvbiAqLwotICB1bnNpZ25lZCBjaGFyIGRyaXZlX251bWJlcjsKLSAgdW5zaWduZWQgY2hhciBtYno7Ci0gIHVuc2lnbmVkIGNoYXIgc2lnXzI4aDsJCS8qIDI4aCAqLwotICB1bnNpZ25lZCBjaGFyIHZvbF9zZXJub1s0XTsKLSAgdW5zaWduZWQgY2hhciB2b2xfbGFiZWxbMTFdOwotICB1bnNpZ25lZCBjaGFyIHNpZ19ocGZzWzhdOwkJLyogIkhQRlMgICAgIiAqLwotICB1bnNpZ25lZCBjaGFyIHBhZFs0NDhdOwotICB1bnNpZ25lZCBzaG9ydCBtYWdpYzsJCQkvKiBhYTU1ICovCisgIHU4IGptcFszXTsKKyAgdTggb2VtX2lkWzhdOworICB1OCBieXRlc19wZXJfc2VjdG9yWzJdOwkvKiA1MTIgKi8KKyAgdTggc2VjdG9yc19wZXJfY2x1c3RlcjsKKyAgdTggbl9yZXNlcnZlZF9zZWN0b3JzWzJdOworICB1OCBuX2ZhdHM7CisgIHU4IG5fcm9vdGRpcl9lbnRyaWVzWzJdOworICB1OCBuX3NlY3RvcnNfc1syXTsKKyAgdTggbWVkaWFfYnl0ZTsKKyAgdTE2IHNlY3RvcnNfcGVyX2ZhdDsKKyAgdTE2IHNlY3RvcnNfcGVyX3RyYWNrOworICB1MTYgaGVhZHNfcGVyX2N5bDsKKyAgdTMyIG5faGlkZGVuX3NlY3RvcnM7CisgIHUzMiBuX3NlY3RvcnNfbDsJCS8qIHNpemUgb2YgcGFydGl0aW9uICovCisgIHU4IGRyaXZlX251bWJlcjsKKyAgdTggbWJ6OworICB1OCBzaWdfMjhoOwkJCS8qIDI4aCAqLworICB1OCB2b2xfc2Vybm9bNF07CisgIHU4IHZvbF9sYWJlbFsxMV07CisgIHU4IHNpZ19ocGZzWzhdOwkJLyogIkhQRlMgICAgIiAqLworICB1OCBwYWRbNDQ4XTsKKyAgdTE2IG1hZ2ljOwkJCS8qIGFhNTUgKi8KIH07CiAKIApAQCAtNzEsMzEgKzc1LDI5IEBACiAKIHN0cnVjdCBocGZzX3N1cGVyX2Jsb2NrCiB7Ci0gIHVuc2lnbmVkIG1hZ2ljOwkJCS8qIGY5OTUgZTg0OSAqLwotICB1bnNpZ25lZCBtYWdpYzE7CQkJLyogZmE1MyBlOWM1LCBtb3JlIG1hZ2ljPyAqLwotICAvKnVuc2lnbmVkIGh1aDIwMjsqLwkJCS8qID8/IDIwMiA9IE4uIG9mIEIuIGluIDEuMDAzOTA2MjUgUy4qLwotICBjaGFyIHZlcnNpb247CQkJCS8qIHZlcnNpb24gb2YgYSBmaWxlc3lzdGVtICB1c3VhbGx5IDIgKi8KLSAgY2hhciBmdW5jdmVyc2lvbjsJCQkvKiBmdW5jdGlvbmFsIHZlcnNpb24gLSBvbGRlc3QgdmVyc2lvbgorICB1MzIgbWFnaWM7CQkJCS8qIGY5OTUgZTg0OSAqLworICB1MzIgbWFnaWMxOwkJCQkvKiBmYTUzIGU5YzUsIG1vcmUgbWFnaWM/ICovCisgIHU4IHZlcnNpb247CQkJCS8qIHZlcnNpb24gb2YgYSBmaWxlc3lzdGVtICB1c3VhbGx5IDIgKi8KKyAgdTggZnVuY3ZlcnNpb247CQkJLyogZnVuY3Rpb25hbCB2ZXJzaW9uIC0gb2xkZXN0IHZlcnNpb24KICAgCQkJCQkgICBvZiBmaWxlc3lzdGVtIHRoYXQgY2FuIHVuZGVyc3RhbmQKIAkJCQkJICAgdGhpcyBkaXNrICovCi0gIHVuc2lnbmVkIHNob3J0IGludCB6ZXJvOwkJLyogMCAqLworICB1MTYgemVybzsJCQkJLyogMCAqLwogICBmbm9kZV9zZWNubyByb290OwkJCS8qIGZub2RlIG9mIHJvb3QgZGlyZWN0b3J5ICovCiAgIHNlY25vIG5fc2VjdG9yczsJCQkvKiBzaXplIG9mIGZpbGVzeXN0ZW0gKi8KLSAgdW5zaWduZWQgbl9iYWRibG9ja3M7CQkJLyogbnVtYmVyIG9mIGJhZCBibG9ja3MgKi8KKyAgdTMyIG5fYmFkYmxvY2tzOwkJCS8qIG51bWJlciBvZiBiYWQgYmxvY2tzICovCiAgIHNlY25vIGJpdG1hcHM7CQkJLyogcG9pbnRlcnMgdG8gZnJlZSBzcGFjZSBiaXQgbWFwcyAqLwotICB1bnNpZ25lZCB6ZXJvMTsJCQkvKiAwICovCisgIHUzMiB6ZXJvMTsJCQkJLyogMCAqLwogICBzZWNubyBiYWRibG9ja3M7CQkJLyogYmFkIGJsb2NrIGxpc3QgKi8KLSAgdW5zaWduZWQgemVybzM7CQkJLyogMCAqLworICB1MzIgemVybzM7CQkJCS8qIDAgKi8KICAgdGltZTMyX3QgbGFzdF9jaGtkc2s7CQkJLyogZGF0ZSBsYXN0IGNoZWNrZWQsIDAgaWYgbmV2ZXIgKi8KLSAgLyp1bnNpZ25lZCB6ZXJvNDsqLwkJCS8qIDAgKi8KLSAgdGltZTMyX3QgbGFzdF9vcHRpbWl6ZTsJCQkvKiBkYXRlIGxhc3Qgb3B0aW1pemVkLCAwIGlmIG5ldmVyICovCisgIHRpbWUzMl90IGxhc3Rfb3B0aW1pemU7CQkvKiBkYXRlIGxhc3Qgb3B0aW1pemVkLCAwIGlmIG5ldmVyICovCiAgIHNlY25vIG5fZGlyX2JhbmQ7CQkJLyogbnVtYmVyIG9mIHNlY3RvcnMgaW4gZGlyIGJhbmQgKi8KICAgc2Vjbm8gZGlyX2JhbmRfc3RhcnQ7CQkJLyogZmlyc3Qgc2VjdG9yIGluIGRpciBiYW5kICovCiAgIHNlY25vIGRpcl9iYW5kX2VuZDsJCQkvKiBsYXN0IHNlY3RvciBpbiBkaXIgYmFuZCAqLwogICBzZWNubyBkaXJfYmFuZF9iaXRtYXA7CQkvKiBmcmVlIHNwYWNlIG1hcCwgMSBkbm9kZSBwZXIgYml0ICovCi0gIGNoYXIgdm9sdW1lX25hbWVbMzJdOwkJCS8qIG5vdCB1c2VkICovCisgIHU4IHZvbHVtZV9uYW1lWzMyXTsJCQkvKiBub3QgdXNlZCAqLwogICBzZWNubyB1c2VyX2lkX3RhYmxlOwkJCS8qIDggcHJlYWxsb2NhdGVkIHNlY3RvcnMgLSB1c2VyIGlkICovCi0gIHVuc2lnbmVkIHplcm82WzEwM107CQkJLyogMCAqLworICB1MzIgemVybzZbMTAzXTsJCQkvKiAwICovCiB9OwogCiAKQEAgLTEwNyw0NCArMTA5LDY1IEBACiAKIHN0cnVjdCBocGZzX3NwYXJlX2Jsb2NrCiB7Ci0gIHVuc2lnbmVkIG1hZ2ljOwkJCS8qIGY5OTEgMTg0OSAqLwotICB1bnNpZ25lZCBtYWdpYzE7CQkJLyogZmE1MiAyOWM1LCBtb3JlIG1hZ2ljPyAqLworICB1MzIgbWFnaWM7CQkJCS8qIGY5OTEgMTg0OSAqLworICB1MzIgbWFnaWMxOwkJCQkvKiBmYTUyIDI5YzUsIG1vcmUgbWFnaWM/ICovCiAKLSAgdW5zaWduZWQgZGlydHk6IDE7CQkJLyogMCBjbGVhbiwgMSAiaW1wcm9wZXJseSBzdG9wcGVkIiAqLwotICAvKnVuc2lnbmVkIGZsYWcxMjM0OiA0OyovCQkvKiB1bmtub3duIGZsYWdzICovCi0gIHVuc2lnbmVkIHNwYXJlZGlyX3VzZWQ6IDE7CQkvKiBzcGFyZSBkaXJibGtzIHVzZWQgKi8KLSAgdW5zaWduZWQgaG90Zml4ZXNfdXNlZDogMTsJCS8qIGhvdGZpeGVzIHVzZWQgKi8KLSAgdW5zaWduZWQgYmFkX3NlY3RvcjogMTsJCS8qIGJhZCBzZWN0b3IsIGNvcnJ1cHRlZCBkaXNrICg/Pz8pICovCi0gIHVuc2lnbmVkIGJhZF9iaXRtYXA6IDE7CQkvKiBiYWQgYml0bWFwICovCi0gIHVuc2lnbmVkIGZhc3Q6IDE7CQkJLyogcGFydGl0aW9uIHdhcyBmYXN0IGZvcm1hdHRlZCAqLwotICB1bnNpZ25lZCBvbGRfd3JvdGU6IDE7CQkvKiBvbGQgdmVyc2lvbiB3cm90ZSB0byBwYXJ0aW9uICovCi0gIHVuc2lnbmVkIG9sZF93cm90ZV8xOiAxOwkJLyogb2xkIHZlcnNpb24gd3JvdGUgdG8gcGFydGlvbiAoPykgKi8KLSAgdW5zaWduZWQgaW5zdGFsbF9kYXNkX2xpbWl0czogMTsJLyogSFBGUzM4NiBmbGFncyAqLwotICB1bnNpZ25lZCByZXN5bmNoX2Rhc2RfbGltaXRzOiAxOwotICB1bnNpZ25lZCBkYXNkX2xpbWl0c19vcGVyYXRpb25hbDogMTsKLSAgdW5zaWduZWQgbXVsdGltZWRpYV9hY3RpdmU6IDE7Ci0gIHVuc2lnbmVkIGRjZV9hY2xzX2FjdGl2ZTogMTsKLSAgdW5zaWduZWQgZGFzZF9saW1pdHNfZGlydHk6IDE7Ci0gIHVuc2lnbmVkIGZsYWc2NzogMjsKLSAgdW5zaWduZWQgY2hhciBtbV9jb250bGd1bHR5OwotICB1bnNpZ25lZCBjaGFyIHVudXNlZDsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KKyAgdTggZGlydHk6IDE7CQkJCS8qIDAgY2xlYW4sIDEgImltcHJvcGVybHkgc3RvcHBlZCIgKi8KKyAgdTggc3BhcmVkaXJfdXNlZDogMTsJCQkvKiBzcGFyZSBkaXJibGtzIHVzZWQgKi8KKyAgdTggaG90Zml4ZXNfdXNlZDogMTsJCQkvKiBob3RmaXhlcyB1c2VkICovCisgIHU4IGJhZF9zZWN0b3I6IDE7CQkJLyogYmFkIHNlY3RvciwgY29ycnVwdGVkIGRpc2sgKD8/PykgKi8KKyAgdTggYmFkX2JpdG1hcDogMTsJCQkvKiBiYWQgYml0bWFwICovCisgIHU4IGZhc3Q6IDE7CQkJCS8qIHBhcnRpdGlvbiB3YXMgZmFzdCBmb3JtYXR0ZWQgKi8KKyAgdTggb2xkX3dyb3RlOiAxOwkJCS8qIG9sZCB2ZXJzaW9uIHdyb3RlIHRvIHBhcnRpb24gKi8KKyAgdTggb2xkX3dyb3RlXzE6IDE7CQkJLyogb2xkIHZlcnNpb24gd3JvdGUgdG8gcGFydGlvbiAoPykgKi8KKyNlbHNlCisgIHU4IG9sZF93cm90ZV8xOiAxOwkJCS8qIG9sZCB2ZXJzaW9uIHdyb3RlIHRvIHBhcnRpb24gKD8pICovCisgIHU4IG9sZF93cm90ZTogMTsJCQkvKiBvbGQgdmVyc2lvbiB3cm90ZSB0byBwYXJ0aW9uICovCisgIHU4IGZhc3Q6IDE7CQkJCS8qIHBhcnRpdGlvbiB3YXMgZmFzdCBmb3JtYXR0ZWQgKi8KKyAgdTggYmFkX2JpdG1hcDogMTsJCQkvKiBiYWQgYml0bWFwICovCisgIHU4IGJhZF9zZWN0b3I6IDE7CQkJLyogYmFkIHNlY3RvciwgY29ycnVwdGVkIGRpc2sgKD8/PykgKi8KKyAgdTggaG90Zml4ZXNfdXNlZDogMTsJCQkvKiBob3RmaXhlcyB1c2VkICovCisgIHU4IHNwYXJlZGlyX3VzZWQ6IDE7CQkJLyogc3BhcmUgZGlyYmxrcyB1c2VkICovCisgIHU4IGRpcnR5OiAxOwkJCQkvKiAwIGNsZWFuLCAxICJpbXByb3Blcmx5IHN0b3BwZWQiICovCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTgorICB1OCBpbnN0YWxsX2Rhc2RfbGltaXRzOiAxOwkJLyogSFBGUzM4NiBmbGFncyAqLworICB1OCByZXN5bmNoX2Rhc2RfbGltaXRzOiAxOworICB1OCBkYXNkX2xpbWl0c19vcGVyYXRpb25hbDogMTsKKyAgdTggbXVsdGltZWRpYV9hY3RpdmU6IDE7CisgIHU4IGRjZV9hY2xzX2FjdGl2ZTogMTsKKyAgdTggZGFzZF9saW1pdHNfZGlydHk6IDE7CisgIHU4IGZsYWc2NzogMjsKKyNlbHNlCisgIHU4IGZsYWc2NzogMjsKKyAgdTggZGFzZF9saW1pdHNfZGlydHk6IDE7CisgIHU4IGRjZV9hY2xzX2FjdGl2ZTogMTsKKyAgdTggbXVsdGltZWRpYV9hY3RpdmU6IDE7CisgIHU4IGRhc2RfbGltaXRzX29wZXJhdGlvbmFsOiAxOworICB1OCByZXN5bmNoX2Rhc2RfbGltaXRzOiAxOworICB1OCBpbnN0YWxsX2Rhc2RfbGltaXRzOiAxOwkJLyogSFBGUzM4NiBmbGFncyAqLworI2VuZGlmCisKKyAgdTggbW1fY29udGxndWx0eTsKKyAgdTggdW51c2VkOwogCiAgIHNlY25vIGhvdGZpeF9tYXA7CQkJLyogaW5mbyBhYm91dCByZW1hcHBlZCBiYWQgc2VjdG9ycyAqLwotICB1bnNpZ25lZCBuX3NwYXJlc191c2VkOwkJLyogbnVtYmVyIG9mIGhvdGZpeGVzICovCi0gIHVuc2lnbmVkIG5fc3BhcmVzOwkJCS8qIG51bWJlciBvZiBzcGFyZXMgaW4gaG90Zml4IG1hcCAqLwotICB1bnNpZ25lZCBuX2Rub2RlX3NwYXJlc19mcmVlOwkJLyogc3BhcmUgZG5vZGVzIHVudXNlZCAqLwotICB1bnNpZ25lZCBuX2Rub2RlX3NwYXJlczsJCS8qIGxlbmd0aCBvZiBzcGFyZV9kbm9kZXNbXSBsaXN0LAorICB1MzIgbl9zcGFyZXNfdXNlZDsJCQkvKiBudW1iZXIgb2YgaG90Zml4ZXMgKi8KKyAgdTMyIG5fc3BhcmVzOwkJCQkvKiBudW1iZXIgb2Ygc3BhcmVzIGluIGhvdGZpeCBtYXAgKi8KKyAgdTMyIG5fZG5vZGVfc3BhcmVzX2ZyZWU7CQkvKiBzcGFyZSBkbm9kZXMgdW51c2VkICovCisgIHUzMiBuX2Rub2RlX3NwYXJlczsJCQkvKiBsZW5ndGggb2Ygc3BhcmVfZG5vZGVzW10gbGlzdCwKIAkJCQkJICAgZm9sbG93cyBpbiB0aGlzIGJsb2NrKi8KICAgc2Vjbm8gY29kZV9wYWdlX2RpcjsJCQkvKiBjb2RlIHBhZ2UgZGlyZWN0b3J5IGJsb2NrICovCi0gIHVuc2lnbmVkIG5fY29kZV9wYWdlczsJCS8qIG51bWJlciBvZiBjb2RlIHBhZ2VzICovCi0gIC8qdW5zaWduZWQgbGFyZ2VfbnVtYmVyc1syXTsqLwkvKiA/PyAqLwotICB1bnNpZ25lZCBzdXBlcl9jcmM7CQkJLyogb24gSFBGUzM4NiBhbmQgTEFOIFNlcnZlciB0aGlzIGlzCisgIHUzMiBuX2NvZGVfcGFnZXM7CQkJLyogbnVtYmVyIG9mIGNvZGUgcGFnZXMgKi8KKyAgdTMyIHN1cGVyX2NyYzsJCQkvKiBvbiBIUEZTMzg2IGFuZCBMQU4gU2VydmVyIHRoaXMgaXMKICAgCQkJCQkgICBjaGVja3N1bSBvZiBzdXBlcmJsb2NrLCBvbiBub3JtYWwKIAkJCQkJICAgT1MvMiB1bnVzZWQgKi8KLSAgdW5zaWduZWQgc3BhcmVfY3JjOwkJCS8qIG9uIEhQRlMzODYgY2hlY2tzdW0gb2Ygc3BhcmVibG9jayAqLwotICB1bnNpZ25lZCB6ZXJvMVsxNV07CQkJLyogdW51c2VkICovCisgIHUzMiBzcGFyZV9jcmM7CQkJLyogb24gSFBGUzM4NiBjaGVja3N1bSBvZiBzcGFyZWJsb2NrICovCisgIHUzMiB6ZXJvMVsxNV07CQkJLyogdW51c2VkICovCiAgIGRub2RlX3NlY25vIHNwYXJlX2Rub2Rlc1sxMDBdOwkvKiBlbWVyZ2VuY3kgZnJlZSBkbm9kZSBsaXN0ICovCi0gIHVuc2lnbmVkIHplcm8yWzFdOwkJCS8qIHJvb20gZm9yIG1vcmU/ICovCisgIHUzMiB6ZXJvMlsxXTsJCQkJLyogcm9vbSBmb3IgbW9yZT8gKi8KIH07CiAKIC8qIFRoZSBiYWQgYmxvY2sgbGlzdCBpcyA0IHNlY3RvcnMgbG9uZy4gIFRoZSBmaXJzdCB3b3JkIG11c3QgYmUgemVybywKQEAgLTE3OSwxOCArMjAyLDE4IEBACiAKIHN0cnVjdCBjb2RlX3BhZ2VfZGlyZWN0b3J5CiB7Ci0gIHVuc2lnbmVkIG1hZ2ljOwkJCS8qIDQ5NDUgMjFmNyAqLwotICB1bnNpZ25lZCBuX2NvZGVfcGFnZXM7CQkvKiBudW1iZXIgb2YgcG9pbnRlcnMgZm9sbG93aW5nICovCi0gIHVuc2lnbmVkIHplcm8xWzJdOworICB1MzIgbWFnaWM7CQkJCS8qIDQ5NDUgMjFmNyAqLworICB1MzIgbl9jb2RlX3BhZ2VzOwkJCS8qIG51bWJlciBvZiBwb2ludGVycyBmb2xsb3dpbmcgKi8KKyAgdTMyIHplcm8xWzJdOwogICBzdHJ1Y3QgewotICAgIHVuc2lnbmVkIHNob3J0IGl4OwkJCS8qIGluZGV4ICovCi0gICAgdW5zaWduZWQgc2hvcnQgY29kZV9wYWdlX251bWJlcjsJLyogY29kZSBwYWdlIG51bWJlciAqLwotICAgIHVuc2lnbmVkIGJvdW5kczsJCQkvKiBtYXRjaGVzIGNvcnJlc3BvbmRpbmcgd29yZAorICAgIHUxNiBpeDsJCQkJLyogaW5kZXggKi8KKyAgICB1MTYgY29kZV9wYWdlX251bWJlcjsJCS8qIGNvZGUgcGFnZSBudW1iZXIgKi8KKyAgICB1MzIgYm91bmRzOwkJCQkvKiBtYXRjaGVzIGNvcnJlc3BvbmRpbmcgd29yZAogCQkJCQkgICBpbiBkYXRhIGJsb2NrICovCiAgICAgc2Vjbm8gY29kZV9wYWdlX2RhdGE7CQkvKiBzZWN0b3IgbnVtYmVyIG9mIGEgY29kZV9wYWdlX2RhdGEKIAkJCQkJICAgY29udGFpbmluZyBjLnAuIGFycmF5ICovCi0gICAgdW5zaWduZWQgc2hvcnQgaW5kZXg7CQkvKiBpbmRleCBpbiBjLnAuIGFycmF5IGluIHRoYXQgc2VjdG9yKi8KLSAgICB1bnNpZ25lZCBzaG9ydCB1bmtub3duOwkJLyogc29tZSB1bmtub3duIHZhbHVlOyB1c3VhbGx5IDA7CisgICAgdTE2IGluZGV4OwkJCQkvKiBpbmRleCBpbiBjLnAuIGFycmF5IGluIHRoYXQgc2VjdG9yKi8KKyAgICB1MTYgdW5rbm93bjsJCQkvKiBzb21lIHVua25vd24gdmFsdWU7IHVzdWFsbHkgMDsKICAgICAJCQkJCSAgIDIgaW4gSmFwYW5lc2UgdmVyc2lvbiAqLwogICB9IGFycmF5WzMxXTsJCQkJLyogdW5rbm93biBsZW5ndGggKi8KIH07CkBAIC0yMDEsMjEgKzIyNCwyMSBAQAogCiBzdHJ1Y3QgY29kZV9wYWdlX2RhdGEKIHsKLSAgdW5zaWduZWQgbWFnaWM7CQkJLyogODk0NSAyMWY3ICovCi0gIHVuc2lnbmVkIG5fdXNlZDsJCQkvKiAjIGVsZW1lbnRzIHVzZWQgaW4gY19wX2RhdGFbXSAqLwotICB1bnNpZ25lZCBib3VuZHNbM107CQkJLyogbG9va3MgYSBiaXQgbGlrZQorICB1MzIgbWFnaWM7CQkJCS8qIDg5NDUgMjFmNyAqLworICB1MzIgbl91c2VkOwkJCQkvKiAjIGVsZW1lbnRzIHVzZWQgaW4gY19wX2RhdGFbXSAqLworICB1MzIgYm91bmRzWzNdOwkJCS8qIGxvb2tzIGEgYml0IGxpa2UKIAkJCQkJICAgICAoYmVnMSxlbmQxKSwgKGJlZzIsZW5kMikKIAkJCQkJICAgb25lIGJ5dGUgZWFjaCAqLwotICB1bnNpZ25lZCBzaG9ydCBvZmZzWzNdOwkJLyogb2Zmc2V0cyBmcm9tIHN0YXJ0IG9mIHNlY3RvcgorICB1MTYgb2Zmc1szXTsJCQkJLyogb2Zmc2V0cyBmcm9tIHN0YXJ0IG9mIHNlY3RvcgogCQkJCQkgICB0byBzdGFydCBvZiBjX3BfZGF0YVtpeF0gKi8KICAgc3RydWN0IHsKLSAgICB1bnNpZ25lZCBzaG9ydCBpeDsJCQkvKiBpbmRleCAqLwotICAgIHVuc2lnbmVkIHNob3J0IGNvZGVfcGFnZV9udW1iZXI7CS8qIGNvZGUgcGFnZSBudW1iZXIgKi8KLSAgICB1bnNpZ25lZCBzaG9ydCB1bmtub3duOwkJLyogdGhlIHNhbWUgYXMgaW4gY3AgZGlyZWN0b3J5ICovCi0gICAgdW5zaWduZWQgY2hhciBtYXBbMTI4XTsJCS8qIHVwY2FzZSB0YWJsZSBmb3IgY2hhcnMgODAuLmZmICovCi0gICAgdW5zaWduZWQgc2hvcnQgemVybzI7CisgICAgdTE2IGl4OwkJCQkvKiBpbmRleCAqLworICAgIHUxNiBjb2RlX3BhZ2VfbnVtYmVyOwkJLyogY29kZSBwYWdlIG51bWJlciAqLworICAgIHUxNiB1bmtub3duOwkJCS8qIHRoZSBzYW1lIGFzIGluIGNwIGRpcmVjdG9yeSAqLworICAgIHU4IG1hcFsxMjhdOwkJCS8qIHVwY2FzZSB0YWJsZSBmb3IgY2hhcnMgODAuLmZmICovCisgICAgdTE2IHplcm8yOwogICB9IGNvZGVfcGFnZVszXTsKLSAgdW5zaWduZWQgY2hhciBpbmNvZ25pdGFbNzhdOworICB1OCBpbmNvZ25pdGFbNzhdOwogfTsKIAogCkBAIC0yNTUsNTAgKzI3OCw4NCBAQAogI2RlZmluZSBETk9ERV9NQUdJQyAgIDB4NzdlNDBhYWUKIAogc3RydWN0IGRub2RlIHsKLSAgdW5zaWduZWQgbWFnaWM7CQkJLyogNzdlNCAwYWFlICovCi0gIHVuc2lnbmVkIGZpcnN0X2ZyZWU7CQkJLyogb2Zmc2V0IGZyb20gc3RhcnQgb2YgZG5vZGUgdG8KKyAgdTMyIG1hZ2ljOwkJCQkvKiA3N2U0IDBhYWUgKi8KKyAgdTMyIGZpcnN0X2ZyZWU7CQkJLyogb2Zmc2V0IGZyb20gc3RhcnQgb2YgZG5vZGUgdG8KIAkJCQkJICAgZmlyc3QgZnJlZSBkaXIgZW50cnkgKi8KLSAgdW5zaWduZWQgcm9vdF9kbm9kZToxOwkJLyogSXMgaXQgcm9vdCBkbm9kZT8gKi8KLSAgdW5zaWduZWQgaW5jcmVtZW50X21lOjMxOwkJLyogc29tZSBraW5kIG9mIGFjdGl2aXR5IGNvdW50ZXI/Ci0JCQkJCSAgIE5laXRoZXIgSFBGUy5JRlMgbm9yIENIS0RTSyBjYXJlcworI2lmZGVmIF9fTElUVExFX0VORElBTgorICB1OCByb290X2Rub2RlOiAxOwkJCS8qIElzIGl0IHJvb3QgZG5vZGU/ICovCisgIHU4IGluY3JlbWVudF9tZTogNzsJCQkvKiBzb21lIGtpbmQgb2YgYWN0aXZpdHkgY291bnRlcj8gKi8KKwkJCQkJLyogTmVpdGhlciBIUEZTLklGUyBub3IgQ0hLRFNLIGNhcmVzCiAJCQkJCSAgIGlmIHlvdSBjaGFuZ2UgdGhpcyB3b3JkICovCisjZWxzZQorICB1OCBpbmNyZW1lbnRfbWU6IDc7CQkJLyogc29tZSBraW5kIG9mIGFjdGl2aXR5IGNvdW50ZXI/ICovCisJCQkJCS8qIE5laXRoZXIgSFBGUy5JRlMgbm9yIENIS0RTSyBjYXJlcworCQkJCQkgICBpZiB5b3UgY2hhbmdlIHRoaXMgd29yZCAqLworICB1OCByb290X2Rub2RlOiAxOwkJCS8qIElzIGl0IHJvb3QgZG5vZGU/ICovCisjZW5kaWYKKyAgdTggaW5jcmVtZW50X21lMlszXTsKICAgc2Vjbm8gdXA7CQkJCS8qIChyb290IGRub2RlKSBkaXJlY3RvcnkncyBmbm9kZQogCQkJCQkgICAobm9ucm9vdCkgcGFyZW50IGRub2RlICovCiAgIGRub2RlX3NlY25vIHNlbGY7CQkJLyogcG9pbnRlciB0byB0aGlzIGRub2RlICovCi0gIHVuc2lnbmVkIGNoYXIgZGlyZW50WzIwMjhdOwkJLyogb25lIG9yIG1vcmUgZGlyZW50cyAqLworICB1OCBkaXJlbnRbMjAyOF07CQkJLyogb25lIG9yIG1vcmUgZGlyZW50cyAqLwogfTsKIAogc3RydWN0IGhwZnNfZGlyZW50IHsKLSAgdW5zaWduZWQgc2hvcnQgbGVuZ3RoOwkJLyogb2Zmc2V0IHRvIG5leHQgZGlyZW50ICovCi0gIHVuc2lnbmVkIGZpcnN0OiAxOwkJCS8qIHNldCBvbiBwaG9ueSBeQV5BICgiLiIpIGVudHJ5ICovCi0gIHVuc2lnbmVkIGhhc19hY2w6IDE7Ci0gIHVuc2lnbmVkIGRvd246IDE7CQkJLyogZG93biBwb2ludGVyIHByZXNlbnQgKGFmdGVyIG5hbWUpICovCi0gIHVuc2lnbmVkIGxhc3Q6IDE7CQkJLyogc2V0IG9uIHBob255IFwzNzcgZW50cnkgKi8KLSAgdW5zaWduZWQgaGFzX2VhOiAxOwkJCS8qIGVudHJ5IGhhcyBFQSAqLwotICB1bnNpZ25lZCBoYXNfeHRkX3Blcm06IDE7CQkvKiBoYXMgZXh0ZW5kZWQgcGVybSBsaXN0ICg/Pz8pICovCi0gIHVuc2lnbmVkIGhhc19leHBsaWNpdF9hY2w6IDE7Ci0gIHVuc2lnbmVkIGhhc19uZWVkZWE6IDE7CQkvKiA/PyBzb21lIEVBIGhhcyBORUVERUEgc2V0CisgIHUxNiBsZW5ndGg7CQkJCS8qIG9mZnNldCB0byBuZXh0IGRpcmVudCAqLworCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOCisgIHU4IGZpcnN0OiAxOwkJCQkvKiBzZXQgb24gcGhvbnkgXkFeQSAoIi4iKSBlbnRyeSAqLworICB1OCBoYXNfYWNsOiAxOworICB1OCBkb3duOiAxOwkJCQkvKiBkb3duIHBvaW50ZXIgcHJlc2VudCAoYWZ0ZXIgbmFtZSkgKi8KKyAgdTggbGFzdDogMTsJCQkJLyogc2V0IG9uIHBob255IFwzNzcgZW50cnkgKi8KKyAgdTggaGFzX2VhOiAxOwkJCQkvKiBlbnRyeSBoYXMgRUEgKi8KKyAgdTggaGFzX3h0ZF9wZXJtOiAxOwkJCS8qIGhhcyBleHRlbmRlZCBwZXJtIGxpc3QgKD8/PykgKi8KKyAgdTggaGFzX2V4cGxpY2l0X2FjbDogMTsKKyAgdTggaGFzX25lZWRlYTogMTsJCQkvKiA/PyBzb21lIEVBIGhhcyBORUVERUEgc2V0CiAJCQkJCSAgIEkgaGF2ZSBubyBpZGVhIHdoeSB0aGlzIGlzCiAJCQkJCSAgIGludGVyZXN0aW5nIGluIGEgZGlyIGVudHJ5ICovCi0gIHVuc2lnbmVkIHJlYWRfb25seTogMTsJCS8qIGRvcyBhdHRyaWIgKi8KLSAgdW5zaWduZWQgaGlkZGVuOiAxOwkJCS8qIGRvcyBhdHRyaWIgKi8KLSAgdW5zaWduZWQgc3lzdGVtOiAxOwkJCS8qIGRvcyBhdHRyaWIgKi8KLSAgdW5zaWduZWQgZmxhZzExOiAxOwkJCS8qIHdvdWxkIGJlIHZvbHVtZSBsYWJlbCBkb3MgYXR0cmliICovCi0gIHVuc2lnbmVkIGRpcmVjdG9yeTogMTsJCS8qIGRvcyBhdHRyaWIgKi8KLSAgdW5zaWduZWQgYXJjaGl2ZTogMTsJCQkvKiBkb3MgYXR0cmliICovCi0gIHVuc2lnbmVkIG5vdF84eDM6IDE7CQkJLyogbmFtZSBpcyBub3QgOC4zICovCi0gIHVuc2lnbmVkIGZsYWcxNTogMTsKKyNlbHNlCisgIHU4IGhhc19uZWVkZWE6IDE7CQkJLyogPz8gc29tZSBFQSBoYXMgTkVFREVBIHNldAorCQkJCQkgICBJIGhhdmUgbm8gaWRlYSB3aHkgdGhpcyBpcworCQkJCQkgICBpbnRlcmVzdGluZyBpbiBhIGRpciBlbnRyeSAqLworICB1OCBoYXNfZXhwbGljaXRfYWNsOiAxOworICB1OCBoYXNfeHRkX3Blcm06IDE7CQkJLyogaGFzIGV4dGVuZGVkIHBlcm0gbGlzdCAoPz8/KSAqLworICB1OCBoYXNfZWE6IDE7CQkJCS8qIGVudHJ5IGhhcyBFQSAqLworICB1OCBsYXN0OiAxOwkJCQkvKiBzZXQgb24gcGhvbnkgXDM3NyBlbnRyeSAqLworICB1OCBkb3duOiAxOwkJCQkvKiBkb3duIHBvaW50ZXIgcHJlc2VudCAoYWZ0ZXIgbmFtZSkgKi8KKyAgdTggaGFzX2FjbDogMTsKKyAgdTggZmlyc3Q6IDE7CQkJCS8qIHNldCBvbiBwaG9ueSBeQV5BICgiLiIpIGVudHJ5ICovCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTgorICB1OCByZWFkX29ubHk6IDE7CQkJLyogZG9zIGF0dHJpYiAqLworICB1OCBoaWRkZW46IDE7CQkJCS8qIGRvcyBhdHRyaWIgKi8KKyAgdTggc3lzdGVtOiAxOwkJCQkvKiBkb3MgYXR0cmliICovCisgIHU4IGZsYWcxMTogMTsJCQkJLyogd291bGQgYmUgdm9sdW1lIGxhYmVsIGRvcyBhdHRyaWIgKi8KKyAgdTggZGlyZWN0b3J5OiAxOwkJCS8qIGRvcyBhdHRyaWIgKi8KKyAgdTggYXJjaGl2ZTogMTsJCQkvKiBkb3MgYXR0cmliICovCisgIHU4IG5vdF84eDM6IDE7CQkJLyogbmFtZSBpcyBub3QgOC4zICovCisgIHU4IGZsYWcxNTogMTsKKyNlbHNlCisgIHU4IGZsYWcxNTogMTsKKyAgdTggbm90Xzh4MzogMTsJCQkvKiBuYW1lIGlzIG5vdCA4LjMgKi8KKyAgdTggYXJjaGl2ZTogMTsJCQkvKiBkb3MgYXR0cmliICovCisgIHU4IGRpcmVjdG9yeTogMTsJCQkvKiBkb3MgYXR0cmliICovCisgIHU4IGZsYWcxMTogMTsJCQkJLyogd291bGQgYmUgdm9sdW1lIGxhYmVsIGRvcyBhdHRyaWIgKi8KKyAgdTggc3lzdGVtOiAxOwkJCQkvKiBkb3MgYXR0cmliICovCisgIHU4IGhpZGRlbjogMTsJCQkJLyogZG9zIGF0dHJpYiAqLworICB1OCByZWFkX29ubHk6IDE7CQkJLyogZG9zIGF0dHJpYiAqLworI2VuZGlmCisKICAgZm5vZGVfc2Vjbm8gZm5vZGU7CQkJLyogZm5vZGUgZ2l2aW5nIGFsbG9jYXRpb24gaW5mbyAqLwogICB0aW1lMzJfdCB3cml0ZV9kYXRlOwkJCS8qIG10aW1lICovCi0gIHVuc2lnbmVkIGZpbGVfc2l6ZTsJCQkvKiBmaWxlIGxlbmd0aCwgYnl0ZXMgKi8KKyAgdTMyIGZpbGVfc2l6ZTsJCQkvKiBmaWxlIGxlbmd0aCwgYnl0ZXMgKi8KICAgdGltZTMyX3QgcmVhZF9kYXRlOwkJCS8qIGF0aW1lICovCiAgIHRpbWUzMl90IGNyZWF0aW9uX2RhdGU7CQkJLyogY3RpbWUgKi8KLSAgdW5zaWduZWQgZWFfc2l6ZTsJCQkvKiB0b3RhbCBFQSBsZW5ndGgsIGJ5dGVzICovCi0gIHVuc2lnbmVkIGNoYXIgbm9fb2ZfYWNscyA6IDM7CQkvKiBudW1iZXIgb2YgQUNMJ3MgKi8KLSAgdW5zaWduZWQgY2hhciByZXNlcnZlciA6IDU7Ci0gIHVuc2lnbmVkIGNoYXIgaXg7CQkJLyogY29kZSBwYWdlIGluZGV4IChvZiBmaWxlbmFtZSksIHNlZQorICB1MzIgZWFfc2l6ZTsJCQkJLyogdG90YWwgRUEgbGVuZ3RoLCBieXRlcyAqLworICB1OCBub19vZl9hY2xzOwkJCS8qIG51bWJlciBvZiBBQ0wncyAobG93IDMgYml0cykgKi8KKyAgdTggaXg7CQkJCS8qIGNvZGUgcGFnZSBpbmRleCAob2YgZmlsZW5hbWUpLCBzZWUKIAkJCQkJICAgc3RydWN0IGNvZGVfcGFnZV9kYXRhICovCi0gIHVuc2lnbmVkIGNoYXIgbmFtZWxlbiwgbmFtZVsxXTsJLyogZmlsZSBuYW1lICovCisgIHU4IG5hbWVsZW4sIG5hbWVbMV07CQkJLyogZmlsZSBuYW1lICovCiAgIC8qIGRub2RlX3NlY25vIGRvd247CSAgYnRyZWUgZG93biBwb2ludGVyLCBpZiBwcmVzZW50LAogICAgICAJCQkgIGZvbGxvd3MgbmFtZSBvbiBuZXh0IHdvcmQgYm91bmRhcnksIG9yIG1heWJlIGl0CiAJCQkgIHByZWNlZGVzIG5leHQgZGlyZW50LCB3aGljaCBpcyBvbiBhIHdvcmQgYm91bmRhcnkuICovCkBAIC0zMTgsMzggKzM3NSw1MCBAQAogCiBzdHJ1Y3QgYnBsdXNfbGVhZl9ub2RlCiB7Ci0gIHVuc2lnbmVkIGZpbGVfc2Vjbm87CQkJLyogZmlyc3QgZmlsZSBzZWN0b3IgaW4gZXh0ZW50ICovCi0gIHVuc2lnbmVkIGxlbmd0aDsJCQkvKiBsZW5ndGgsIHNlY3RvcnMgKi8KKyAgdTMyIGZpbGVfc2Vjbm87CQkJLyogZmlyc3QgZmlsZSBzZWN0b3IgaW4gZXh0ZW50ICovCisgIHUzMiBsZW5ndGg7CQkJCS8qIGxlbmd0aCwgc2VjdG9ycyAqLwogICBzZWNubyBkaXNrX3NlY25vOwkJCS8qIGZpcnN0IGNvcnJlc3BvbmRpbmcgZGlzayBzZWN0b3IgKi8KIH07CiAKIHN0cnVjdCBicGx1c19pbnRlcm5hbF9ub2RlCiB7Ci0gIHVuc2lnbmVkIGZpbGVfc2Vjbm87CQkJLyogc3VidHJlZSBtYXBzIHNlY3RvcnMgPCB0aGlzICAqLworICB1MzIgZmlsZV9zZWNubzsJCQkvKiBzdWJ0cmVlIG1hcHMgc2VjdG9ycyA8IHRoaXMgICovCiAgIGFub2RlX3NlY25vIGRvd247CQkJLyogcG9pbnRlciB0byBzdWJ0cmVlICovCiB9OwogCiBzdHJ1Y3QgYnBsdXNfaGVhZGVyCiB7Ci0gIHVuc2lnbmVkIGhiZmY6IDE7CS8qIGhpZ2ggYml0IG9mIGZpcnN0IGZyZWUgZW50cnkgb2Zmc2V0ICovCi0gIHVuc2lnbmVkIGZsYWcxOiAxOwotICB1bnNpZ25lZCBmbGFnMjogMTsKLSAgdW5zaWduZWQgZmxhZzM6IDE7Ci0gIHVuc2lnbmVkIGZsYWc0OiAxOwotICB1bnNpZ25lZCBmbm9kZV9wYXJlbnQ6IDE7CQkvKiA/IHdlJ3JlIHBvaW50ZWQgdG8gYnkgYW4gZm5vZGUsCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOCisgIHU4IGhiZmY6IDE7CQkJLyogaGlnaCBiaXQgb2YgZmlyc3QgZnJlZSBlbnRyeSBvZmZzZXQgKi8KKyAgdTggZmxhZzEyMzQ6IDQ7CisgIHU4IGZub2RlX3BhcmVudDogMTsJCQkvKiA/IHdlJ3JlIHBvaW50ZWQgdG8gYnkgYW4gZm5vZGUsCiAJCQkJCSAgIHRoZSBkYXRhIGJ0cmVlIG9yIHNvbWUgZWEgb3IgdGhlCiAJCQkJCSAgIG1haW4gZWEgYm9vdGFnZSBwb2ludGVyIGVhX3NlY25vICovCiAJCQkJCS8qIGFsc28gY2FuIGdldCBzZXQgaW4gZm5vZGVzLCB3aGljaAogCQkJCQkgICBtYXkgYmUgYSBjaGtkc2sgZ2xpdGNoIG9yIG1heSBtZWFuCiAJCQkJCSAgIHRoaXMgYml0IGlzIGlycmVsZXZhbnQgaW4gZm5vZGVzLAogCQkJCQkgICBvciB0aGlzIGludGVycHJldGF0aW9uIGlzIGFsbCB3ZXQgKi8KLSAgdW5zaWduZWQgYmluYXJ5X3NlYXJjaDogMTsJCS8qIHN1Z2dlc3QgYmluYXJ5IHNlYXJjaCAodW51c2VkKSAqLwotICB1bnNpZ25lZCBpbnRlcm5hbDogMTsJCQkvKiAxIC0+IChpbnRlcm5hbCkgdHJlZSBvZiBhbm9kZXMKKyAgdTggYmluYXJ5X3NlYXJjaDogMTsJCQkvKiBzdWdnZXN0IGJpbmFyeSBzZWFyY2ggKHVudXNlZCkgKi8KKyAgdTggaW50ZXJuYWw6IDE7CQkJLyogMSAtPiAoaW50ZXJuYWwpIHRyZWUgb2YgYW5vZGVzCiAJCQkJCSAgIDAgLT4gKGxlYWYpIGxpc3Qgb2YgZXh0ZW50cyAqLwotICB1bnNpZ25lZCBjaGFyIGZpbGxbM107Ci0gIHVuc2lnbmVkIGNoYXIgbl9mcmVlX25vZGVzOwkJLyogZnJlZSBub2RlcyBpbiBmb2xsb3dpbmcgYXJyYXkgKi8KLSAgdW5zaWduZWQgY2hhciBuX3VzZWRfbm9kZXM7CQkvKiB1c2VkIG5vZGVzIGluIGZvbGxvd2luZyBhcnJheSAqLwotICB1bnNpZ25lZCBzaG9ydCBmaXJzdF9mcmVlOwkJLyogb2Zmc2V0IGZyb20gc3RhcnQgb2YgaGVhZGVyIHRvCisjZWxzZQorICB1OCBpbnRlcm5hbDogMTsJCQkvKiAxIC0+IChpbnRlcm5hbCkgdHJlZSBvZiBhbm9kZXMKKwkJCQkJICAgMCAtPiAobGVhZikgbGlzdCBvZiBleHRlbnRzICovCisgIHU4IGJpbmFyeV9zZWFyY2g6IDE7CQkJLyogc3VnZ2VzdCBiaW5hcnkgc2VhcmNoICh1bnVzZWQpICovCisgIHU4IGZub2RlX3BhcmVudDogMTsJCQkvKiA/IHdlJ3JlIHBvaW50ZWQgdG8gYnkgYW4gZm5vZGUsCisJCQkJCSAgIHRoZSBkYXRhIGJ0cmVlIG9yIHNvbWUgZWEgb3IgdGhlCisJCQkJCSAgIG1haW4gZWEgYm9vdGFnZSBwb2ludGVyIGVhX3NlY25vICovCisJCQkJCS8qIGFsc28gY2FuIGdldCBzZXQgaW4gZm5vZGVzLCB3aGljaAorCQkJCQkgICBtYXkgYmUgYSBjaGtkc2sgZ2xpdGNoIG9yIG1heSBtZWFuCisJCQkJCSAgIHRoaXMgYml0IGlzIGlycmVsZXZhbnQgaW4gZm5vZGVzLAorCQkJCQkgICBvciB0aGlzIGludGVycHJldGF0aW9uIGlzIGFsbCB3ZXQgKi8KKyAgdTggZmxhZzEyMzQ6IDQ7CisgIHU4IGhiZmY6IDE7CQkJLyogaGlnaCBiaXQgb2YgZmlyc3QgZnJlZSBlbnRyeSBvZmZzZXQgKi8KKyNlbmRpZgorICB1OCBmaWxsWzNdOworICB1OCBuX2ZyZWVfbm9kZXM7CQkJLyogZnJlZSBub2RlcyBpbiBmb2xsb3dpbmcgYXJyYXkgKi8KKyAgdTggbl91c2VkX25vZGVzOwkJCS8qIHVzZWQgbm9kZXMgaW4gZm9sbG93aW5nIGFycmF5ICovCisgIHUxNiBmaXJzdF9mcmVlOwkJCS8qIG9mZnNldCBmcm9tIHN0YXJ0IG9mIGhlYWRlciB0bwogCQkJCQkgICBmaXJzdCBmcmVlIG5vZGUgaW4gYXJyYXkgKi8KICAgdW5pb24gewogICAgIHN0cnVjdCBicGx1c19pbnRlcm5hbF9ub2RlIGludGVybmFsWzBdOyAvKiAoaW50ZXJuYWwpIDItd29yZCBlbnRyaWVzIGdpdmluZwpAQCAtMzY5LDM3ICs0MzgsMzggQEAKIAogc3RydWN0IGZub2RlCiB7Ci0gIHVuc2lnbmVkIG1hZ2ljOwkJCS8qIGY3ZTQgMGFhZSAqLwotICB1bnNpZ25lZCB6ZXJvMVsyXTsJCQkvKiByZWFkIGhpc3RvcnkgKi8KLSAgdW5zaWduZWQgY2hhciBsZW4sIG5hbWVbMTVdOwkJLyogdHJ1ZSBsZW5ndGgsIHRydW5jYXRlZCBuYW1lICovCisgIHUzMiBtYWdpYzsJCQkJLyogZjdlNCAwYWFlICovCisgIHUzMiB6ZXJvMVsyXTsJCQkJLyogcmVhZCBoaXN0b3J5ICovCisgIHU4IGxlbiwgbmFtZVsxNV07CQkJLyogdHJ1ZSBsZW5ndGgsIHRydW5jYXRlZCBuYW1lICovCiAgIGZub2RlX3NlY25vIHVwOwkJCS8qIHBvaW50ZXIgdG8gZmlsZSdzIGRpcmVjdG9yeSBmbm9kZSAqLwotICAvKnVuc2lnbmVkIHplcm8yWzNdOyovCiAgIHNlY25vIGFjbF9zaXplX2w7CiAgIHNlY25vIGFjbF9zZWNubzsKLSAgdW5zaWduZWQgc2hvcnQgYWNsX3NpemVfczsKLSAgY2hhciBhY2xfYW5vZGU7Ci0gIGNoYXIgemVybzI7CQkJCS8qIGhpc3RvcnkgYml0IGNvdW50ICovCi0gIHVuc2lnbmVkIGVhX3NpemVfbDsJCQkvKiBsZW5ndGggb2YgZGlzay1yZXNpZGVudCBlYSdzICovCisgIHUxNiBhY2xfc2l6ZV9zOworICB1OCBhY2xfYW5vZGU7CisgIHU4IHplcm8yOwkJCQkvKiBoaXN0b3J5IGJpdCBjb3VudCAqLworICB1MzIgZWFfc2l6ZV9sOwkJCS8qIGxlbmd0aCBvZiBkaXNrLXJlc2lkZW50IGVhJ3MgKi8KICAgc2Vjbm8gZWFfc2Vjbm87CQkJLyogZmlyc3Qgc2VjdG9yIG9mIGRpc2stcmVzaWRlbnQgZWEncyovCi0gIHVuc2lnbmVkIHNob3J0IGVhX3NpemVfczsJCS8qIGxlbmd0aCBvZiBmbm9kZS1yZXNpZGVudCBlYSdzICovCisgIHUxNiBlYV9zaXplX3M7CQkJLyogbGVuZ3RoIG9mIGZub2RlLXJlc2lkZW50IGVhJ3MgKi8KIAotICB1bnNpZ25lZCBmbGFnMDogMTsKLSAgdW5zaWduZWQgZWFfYW5vZGU6IDE7CQkJLyogMSAtPiBlYV9zZWNubyBpcyBhbiBhbm9kZSAqLwotICB1bnNpZ25lZCBmbGFnMjogMTsKLSAgdW5zaWduZWQgZmxhZzM6IDE7Ci0gIHVuc2lnbmVkIGZsYWc0OiAxOwotICB1bnNpZ25lZCBmbGFnNTogMTsKLSAgdW5zaWduZWQgZmxhZzY6IDE7Ci0gIHVuc2lnbmVkIGZsYWc3OiAxOwotICB1bnNpZ25lZCBkaXJmbGFnOiAxOwkJCS8qIDEgLT4gZGlyZWN0b3J5LiAgZmlyc3QgJiBvbmx5IGV4dGVudAorI2lmZGVmIF9fTElUVExFX0VORElBTgorICB1OCBmbGFnMDogMTsKKyAgdTggZWFfYW5vZGU6IDE7CQkJLyogMSAtPiBlYV9zZWNubyBpcyBhbiBhbm9kZSAqLworICB1OCBmbGFnMjM0NTY3OiA2OworI2Vsc2UKKyAgdTggZmxhZzIzNDU2NzogNjsKKyAgdTggZWFfYW5vZGU6IDE7CQkJLyogMSAtPiBlYV9zZWNubyBpcyBhbiBhbm9kZSAqLworICB1OCBmbGFnMDogMTsKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOCisgIHU4IGRpcmZsYWc6IDE7CQkJLyogMSAtPiBkaXJlY3RvcnkuICBmaXJzdCAmIG9ubHkgZXh0ZW50CiAJCQkJCSAgIHBvaW50cyB0byBkbm9kZS4gKi8KLSAgdW5zaWduZWQgZmxhZzk6IDE7Ci0gIHVuc2lnbmVkIGZsYWcxMDogMTsKLSAgdW5zaWduZWQgZmxhZzExOiAxOwotICB1bnNpZ25lZCBmbGFnMTI6IDE7Ci0gIHVuc2lnbmVkIGZsYWcxMzogMTsKLSAgdW5zaWduZWQgZmxhZzE0OiAxOwotICB1bnNpZ25lZCBmbGFnMTU6IDE7CisgIHU4IGZsYWc5MDEyMzQ1OiA3OworI2Vsc2UKKyAgdTggZmxhZzkwMTIzNDU6IDc7CisgIHU4IGRpcmZsYWc6IDE7CQkJLyogMSAtPiBkaXJlY3RvcnkuICBmaXJzdCAmIG9ubHkgZXh0ZW50CisJCQkJCSAgIHBvaW50cyB0byBkbm9kZS4gKi8KKyNlbmRpZgogCiAgIHN0cnVjdCBicGx1c19oZWFkZXIgYnRyZWU7CQkvKiBiKyB0cmVlLCA4IGV4dGVudHMgb3IgMTIgc3VidHJlZXMgKi8KICAgdW5pb24gewpAQCAtNDA3LDE3ICs0NzcsMTYgQEAKICAgICBzdHJ1Y3QgYnBsdXNfaW50ZXJuYWxfbm9kZSBpbnRlcm5hbFsxMl07CiAgIH0gdTsKIAotICB1bnNpZ25lZCBmaWxlX3NpemU7CQkJLyogZmlsZSBsZW5ndGgsIGJ5dGVzICovCi0gIHVuc2lnbmVkIG5fbmVlZGVhOwkJCS8qIG51bWJlciBvZiBFQSdzIHdpdGggTkVFREVBIHNldCAqLwotICBjaGFyIHVzZXJfaWRbMTZdOwkJCS8qIHVudXNlZCAqLwotICB1bnNpZ25lZCBzaG9ydCBlYV9vZmZzOwkJLyogb2Zmc2V0IGZyb20gc3RhcnQgb2YgZm5vZGUKKyAgdTMyIGZpbGVfc2l6ZTsJCQkvKiBmaWxlIGxlbmd0aCwgYnl0ZXMgKi8KKyAgdTMyIG5fbmVlZGVhOwkJCQkvKiBudW1iZXIgb2YgRUEncyB3aXRoIE5FRURFQSBzZXQgKi8KKyAgdTggdXNlcl9pZFsxNl07CQkJLyogdW51c2VkICovCisgIHUxNiBlYV9vZmZzOwkJCQkvKiBvZmZzZXQgZnJvbSBzdGFydCBvZiBmbm9kZQogCQkJCQkgICB0byBmaXJzdCBmbm9kZS1yZXNpZGVudCBlYSAqLwotICBjaGFyIGRhc2RfbGltaXRfdHJlc2hob2xkOwotICBjaGFyIGRhc2RfbGltaXRfZGVsdGE7Ci0gIHVuc2lnbmVkIGRhc2RfbGltaXQ7Ci0gIHVuc2lnbmVkIGRhc2RfdXNhZ2U7Ci0gIC8qdW5zaWduZWQgemVybzVbMl07Ki8KLSAgdW5zaWduZWQgY2hhciBlYVszMTZdOwkJLyogemVybyBvciBtb3JlIEVBJ3MsIHBhY2tlZCB0b2dldGhlcgorICB1OCBkYXNkX2xpbWl0X3RyZXNoaG9sZDsKKyAgdTggZGFzZF9saW1pdF9kZWx0YTsKKyAgdTMyIGRhc2RfbGltaXQ7CisgIHUzMiBkYXNkX3VzYWdlOworICB1OCBlYVszMTZdOwkJCQkvKiB6ZXJvIG9yIG1vcmUgRUEncywgcGFja2VkIHRvZ2V0aGVyCiAJCQkJCSAgIHdpdGggbm8gYWxpZ25tZW50IHBhZGRpbmcuCiAJCQkJCSAgIChEbyBub3QgdXNlIHRoaXMgbmFtZSwgZ2V0IGhlcmUKIAkJCQkJICAgdmlhIGZub2RlICsgZWFfb2Zmcy4gSSB0aGluay4pICovCkBAIC00MzAsNyArNDk5LDcgQEAKIAogc3RydWN0IGFub2RlCiB7Ci0gIHVuc2lnbmVkIG1hZ2ljOwkJCS8qIDM3ZTQgMGFhZSAqLworICB1MzIgbWFnaWM7CQkJCS8qIDM3ZTQgMGFhZSAqLwogICBhbm9kZV9zZWNubyBzZWxmOwkJCS8qIHBvaW50ZXIgdG8gdGhpcyBhbm9kZSAqLwogICBzZWNubyB1cDsJCQkJLyogcGFyZW50IGFub2RlIG9yIGZub2RlICovCiAKQEAgLTQ0MCw3ICs1MDksNyBAQAogICAgIHN0cnVjdCBicGx1c19pbnRlcm5hbF9ub2RlIGludGVybmFsWzYwXTsKICAgfSB1OwogCi0gIHVuc2lnbmVkIGZpbGxbM107CQkJLyogdW51c2VkICovCisgIHUzMiBmaWxsWzNdOwkJCQkvKiB1bnVzZWQgKi8KIH07CiAKIApAQCAtNDYxLDI1ICs1MzAsMzEgQEAKIAogc3RydWN0IGV4dGVuZGVkX2F0dHJpYnV0ZQogewotICB1bnNpZ25lZCBpbmRpcmVjdDogMTsJCQkvKiAxIC0+IHZhbHVlIGdpdmVzIHNlY3RvciBudW1iZXIKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KKyAgdTggaW5kaXJlY3Q6IDE7CQkJLyogMSAtPiB2YWx1ZSBnaXZlcyBzZWN0b3IgbnVtYmVyCiAJCQkJCSAgIHdoZXJlIHJlYWwgdmFsdWUgc3RhcnRzICovCi0gIHVuc2lnbmVkIGFub2RlOiAxOwkJCS8qIDEgLT4gc2VjdG9yIGlzIGFuIGFub2RlCisgIHU4IGFub2RlOiAxOwkJCQkvKiAxIC0+IHNlY3RvciBpcyBhbiBhbm9kZQogCQkJCQkgICB0aGF0IHBvaW50cyB0byBmcmFnbWVudGVkIHZhbHVlICovCi0gIHVuc2lnbmVkIGZsYWcyOiAxOwotICB1bnNpZ25lZCBmbGFnMzogMTsKLSAgdW5zaWduZWQgZmxhZzQ6IDE7Ci0gIHVuc2lnbmVkIGZsYWc1OiAxOwotICB1bnNpZ25lZCBmbGFnNjogMTsKLSAgdW5zaWduZWQgbmVlZGVhOiAxOwkJCS8qIHJlcXVpcmVkIGVhICovCi0gIHVuc2lnbmVkIGNoYXIgbmFtZWxlbjsJCS8qIGxlbmd0aCBvZiBuYW1lLCBieXRlcyAqLwotICB1bnNpZ25lZCBzaG9ydCB2YWx1ZWxlbjsJCS8qIGxlbmd0aCBvZiB2YWx1ZSwgYnl0ZXMgKi8KLSAgdW5zaWduZWQgY2hhciBuYW1lWzBdOworICB1OCBmbGFnMjM0NTY6IDU7CisgIHU4IG5lZWRlYTogMTsJCQkJLyogcmVxdWlyZWQgZWEgKi8KKyNlbHNlCisgIHU4IG5lZWRlYTogMTsJCQkJLyogcmVxdWlyZWQgZWEgKi8KKyAgdTggZmxhZzIzNDU2OiA1OworICB1OCBhbm9kZTogMTsJCQkJLyogMSAtPiBzZWN0b3IgaXMgYW4gYW5vZGUKKwkJCQkJICAgdGhhdCBwb2ludHMgdG8gZnJhZ21lbnRlZCB2YWx1ZSAqLworICB1OCBpbmRpcmVjdDogMTsJCQkvKiAxIC0+IHZhbHVlIGdpdmVzIHNlY3RvciBudW1iZXIKKwkJCQkJICAgd2hlcmUgcmVhbCB2YWx1ZSBzdGFydHMgKi8KKyNlbmRpZgorICB1OCBuYW1lbGVuOwkJCQkvKiBsZW5ndGggb2YgbmFtZSwgYnl0ZXMgKi8KKyAgdTggdmFsdWVsZW5fbG87CQkJLyogbGVuZ3RoIG9mIHZhbHVlLCBieXRlcyAqLworICB1OCB2YWx1ZWxlbl9oaTsJCQkvKiBsZW5ndGggb2YgdmFsdWUsIGJ5dGVzICovCisgIHU4IG5hbWVbMF07CiAgIC8qCi0gICAgdW5zaWduZWQgY2hhciBuYW1lW25hbWVsZW5dOwlhc2NpaSBhdHRyaWIgbmFtZQotICAgIHVuc2lnbmVkIGNoYXIgbnVsOwkJCXRlcm1pbmF0aW5nICdcMCcsIG5vdCBjb3VudGVkCi0gICAgdW5zaWduZWQgY2hhciB2YWx1ZVt2YWx1ZWxlbl07CXZhbHVlLCBhcmJpdHJhcnkKKyAgICB1OCBuYW1lW25hbWVsZW5dOwkJCWFzY2lpIGF0dHJpYiBuYW1lCisgICAgdTggbnVsOwkJCQl0ZXJtaW5hdGluZyAnXDAnLCBub3QgY291bnRlZAorICAgIHU4IHZhbHVlW3ZhbHVlbGVuXTsJCQl2YWx1ZSwgYXJiaXRyYXJ5CiAgICAgICBpZiB0aGlzLmluZGlyZWN0LCB2YWx1ZWxlbiBpcyA4IGFuZCB0aGUgdmFsdWUgaXMKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoOwkJcmVhbCBsZW5ndGggb2YgdmFsdWUsIGJ5dGVzCisgICAgICAgIHUzMiBsZW5ndGg7CQkJcmVhbCBsZW5ndGggb2YgdmFsdWUsIGJ5dGVzCiAgICAgICAgIHNlY25vIHNlY25vOwkJCXNlY3RvciBhZGRyZXNzIHdoZXJlIGl0IHN0YXJ0cwogICAgICAgaWYgdGhpcy5hbm9kZSwgdGhlIGFib3ZlIHNlY3RvciBudW1iZXIgaXMgdGhlIHJvb3Qgb2YgYW4gYW5vZGUgdHJlZQogICAgICAgICB3aGljaCBwb2ludHMgdG8gdGhlIHZhbHVlLgpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9ocGZzX2ZuLmggYi9mcy9ocGZzL2hwZnNfZm4uaAppbmRleCBjMTVhZGJjLi5kZDU1MmY4IDEwMDY0NAotLS0gYS9mcy9ocGZzL2hwZnNfZm4uaAorKysgYi9mcy9ocGZzL2hwZnNfZm4uaApAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKICNpbmNsdWRlICJocGZzLmgiCiAKQEAgLTUxLDE4ICs1MiwxNiBAQAogCXVuc2lnbmVkIGlfZGlza19zZWM7CS8qIChmaWxlcykgbWluaW1hbGlzdCBjYWNoZSBvZiBhbGxvYyBpbmZvICovCiAJdW5zaWduZWQgaV9uX3NlY3M7CS8qIChmaWxlcykgbWluaW1hbGlzdCBjYWNoZSBvZiBhbGxvYyBpbmZvICovCiAJdW5zaWduZWQgaV9lYV9zaXplOwkvKiBzaXplIG9mIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKi8KLQl1bnNpZ25lZCBpX2NvbnYgOiAyOwkvKiAoZmlsZXMpIGNybGYtPm5ld2xpbmUgaGFja2VyeSAqLwogCXVuc2lnbmVkIGlfZWFfbW9kZSA6IDE7CS8qIGZpbGUncyBwZXJtaXNzaW9uIGlzIHN0b3JlZCBpbiBlYSAqLwogCXVuc2lnbmVkIGlfZWFfdWlkIDogMTsJLyogZmlsZSdzIHVpZCBpcyBzdG9yZWQgaW4gZWEgKi8KIAl1bnNpZ25lZCBpX2VhX2dpZCA6IDE7CS8qIGZpbGUncyBnaWQgaXMgc3RvcmVkIGluIGVhICovCiAJdW5zaWduZWQgaV9kaXJ0eSA6IDE7Ci0Jc3RydWN0IG11dGV4IGlfbXV0ZXg7Ci0Jc3RydWN0IG11dGV4IGlfcGFyZW50X211dGV4OwogCWxvZmZfdCAqKmlfcmRkaXJfb2ZmOwogCXN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7CiB9OwogCiBzdHJ1Y3QgaHBmc19zYl9pbmZvIHsKKwlzdHJ1Y3QgbXV0ZXggaHBmc19tdXRleDsJLyogZ2xvYmFsIGhwZnMgbG9jayAqLwogCWlub190IHNiX3Jvb3Q7CQkJLyogaW5vZGUgbnVtYmVyIG9mIHJvb3QgZGlyICovCiAJdW5zaWduZWQgc2JfZnNfc2l6ZTsJCS8qIGZpbGUgc3lzdGVtIHNpemUsIHNlY3RvcnMgKi8KIAl1bnNpZ25lZCBzYl9iaXRtYXBzOwkJLyogc2VjdG9yIG51bWJlciBvZiBiaXRtYXAgbGlzdCAqLwpAQCAtNzQsNyArNzMsNiBAQAogCXVpZF90IHNiX3VpZDsJCQkvKiB1aWQgZnJvbSBtb3VudCBvcHRpb25zICovCiAJZ2lkX3Qgc2JfZ2lkOwkJCS8qIGdpZCBmcm9tIG1vdW50IG9wdGlvbnMgKi8KIAl1bW9kZV90IHNiX21vZGU7CQkvKiBtb2RlIGZyb20gbW91bnQgb3B0aW9ucyAqLwotCXVuc2lnbmVkIHNiX2NvbnYgOiAyOwkJLyogY3JsZi0+bmV3bGluZSBoYWNrZXJ5ICovCiAJdW5zaWduZWQgc2JfZWFzIDogMjsJCS8qIGVhczogMC1pZ25vcmUsIDEtcm8sIDItcncgKi8KIAl1bnNpZ25lZCBzYl9lcnIgOiAyOwkJLyogb24gZXJyczogMC1jb250LCAxLXJvLCAyLXBhbmljICovCiAJdW5zaWduZWQgc2JfY2hrIDogMjsJCS8qIGNoZWNrczogMC1ubywgMS1ub3JtYWwsIDItc3RyaWN0ICovCkBAIC04NywyMCArODUsOSBAQAogCXVuc2lnbmVkICpzYl9ibXBfZGlyOwkJLyogbWFpbiBiaXRtYXAgZGlyZWN0b3J5ICovCiAJdW5zaWduZWQgc2JfY19iaXRtYXA7CQkvKiBjdXJyZW50IGJpdG1hcCAqLwogCXVuc2lnbmVkIHNiX21heF9md2RfYWxsb2M7CS8qIG1heCBmb3J3YWQgYWxsb2NhdGlvbiAqLwotCXN0cnVjdCBtdXRleCBocGZzX2NyZWF0aW9uX2RlOwkvKiB3aGVuIGNyZWF0aW5nIGRpcmVudHMsIG5vYm9keSBlbHNlCi0JCQkJCSAgIGNhbiBhbGxvYyBibG9ja3MgKi8KLQkvKnVuc2lnbmVkIHNiX21vdW50aW5nIDogMTsqLwogCWludCBzYl90aW1lc2hpZnQ7CiB9OwogCi0vKgotICogY29udj0gb3B0aW9ucwotICovCi0KLSNkZWZpbmUgQ09OVl9CSU5BUlkgMAkJCS8qIG5vIGNvbnZlcnNpb24gKi8KLSNkZWZpbmUgQ09OVl9URVhUIDEJCQkvKiBjcmxmLT5uZXdsaW5lICovCi0jZGVmaW5lIENPTlZfQVVUTyAyCQkJLyogZGVjaWRlIGJhc2VkIG9uIGZpbGUgY29udGVudHMgKi8KLQogLyogRm91ciA1MTItYnl0ZSBidWZmZXJzIGFuZCB0aGUgMmsgYmxvY2sgb2J0YWluZWQgYnkgY29uY2F0ZW5hdGluZyB0aGVtICovCiAKIHN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkIHsKQEAgLTExMyw3ICsxMDAsNyBAQAogc3RhdGljIGlubGluZSBkbm9kZV9zZWNubyBkZV9kb3duX3BvaW50ZXIgKHN0cnVjdCBocGZzX2RpcmVudCAqZGUpCiB7CiAgIENIS0NPTkQoZGUtPmRvd24sKCJIUEZTOiBkZV9kb3duX3BvaW50ZXI6ICFkZS0+ZG93blxuIikpOwotICByZXR1cm4gKihkbm9kZV9zZWNubyAqKSAoKHZvaWQgKikgZGUgKyBkZS0+bGVuZ3RoIC0gNCk7CisgIHJldHVybiBsZTMyX3RvX2NwdSgqKGRub2RlX3NlY25vICopICgodm9pZCAqKSBkZSArIGxlMTZfdG9fY3B1KGRlLT5sZW5ndGgpIC0gNCkpOwogfQogCiAvKiBUaGUgZmlyc3QgZGlyIGVudHJ5IGluIGEgZG5vZGUgKi8KQEAgLTEyNyw0MSArMTE0LDQ2IEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhwZnNfZGlyZW50ICpkbm9kZV9lbmRfZGUgKHN0cnVjdCBkbm9kZSAqZG5vZGUpCiB7Ci0gIENIS0NPTkQoZG5vZGUtPmZpcnN0X2ZyZWU+PTB4MTQgJiYgZG5vZGUtPmZpcnN0X2ZyZWU8PTB4YTAwLCgiSFBGUzogZG5vZGVfZW5kX2RlOiBkbm9kZS0+Zmlyc3RfZnJlZSA9ICVkXG4iLChpbnQpZG5vZGUtPmZpcnN0X2ZyZWUpKTsKLSAgcmV0dXJuICh2b2lkICopIGRub2RlICsgZG5vZGUtPmZpcnN0X2ZyZWU7CisgIENIS0NPTkQobGUzMl90b19jcHUoZG5vZGUtPmZpcnN0X2ZyZWUpPj0weDE0ICYmIGxlMzJfdG9fY3B1KGRub2RlLT5maXJzdF9mcmVlKTw9MHhhMDAsKCJIUEZTOiBkbm9kZV9lbmRfZGU6IGRub2RlLT5maXJzdF9mcmVlID0gJXhcbiIsKHVuc2lnbmVkKWxlMzJfdG9fY3B1KGRub2RlLT5maXJzdF9mcmVlKSkpOworICByZXR1cm4gKHZvaWQgKikgZG5vZGUgKyBsZTMyX3RvX2NwdShkbm9kZS0+Zmlyc3RfZnJlZSk7CiB9CiAKIC8qIFRoZSBkaXIgZW50cnkgYWZ0ZXIgZGlyIGVudHJ5IGRlICovCiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhwZnNfZGlyZW50ICpkZV9uZXh0X2RlIChzdHJ1Y3QgaHBmc19kaXJlbnQgKmRlKQogewotICBDSEtDT05EKGRlLT5sZW5ndGg+PTB4MjAgJiYgZGUtPmxlbmd0aDwweDgwMCwoIkhQRlM6IGRlX25leHRfZGU6IGRlLT5sZW5ndGggPSAlZFxuIiwoaW50KWRlLT5sZW5ndGgpKTsKLSAgcmV0dXJuICh2b2lkICopIGRlICsgZGUtPmxlbmd0aDsKKyAgQ0hLQ09ORChsZTE2X3RvX2NwdShkZS0+bGVuZ3RoKT49MHgyMCAmJiBsZTE2X3RvX2NwdShkZS0+bGVuZ3RoKTwweDgwMCwoIkhQRlM6IGRlX25leHRfZGU6IGRlLT5sZW5ndGggPSAleFxuIiwodW5zaWduZWQpbGUxNl90b19jcHUoZGUtPmxlbmd0aCkpKTsKKyAgcmV0dXJuICh2b2lkICopIGRlICsgbGUxNl90b19jcHUoZGUtPmxlbmd0aCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGV4dGVuZGVkX2F0dHJpYnV0ZSAqZm5vZGVfZWEoc3RydWN0IGZub2RlICpmbm9kZSkKIHsKLQlyZXR1cm4gKHN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKikoKGNoYXIgKilmbm9kZSArIGZub2RlLT5lYV9vZmZzICsgZm5vZGUtPmFjbF9zaXplX3MpOworCXJldHVybiAoc3RydWN0IGV4dGVuZGVkX2F0dHJpYnV0ZSAqKSgoY2hhciAqKWZub2RlICsgbGUxNl90b19jcHUoZm5vZGUtPmVhX29mZnMpICsgbGUxNl90b19jcHUoZm5vZGUtPmFjbF9zaXplX3MpKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZXh0ZW5kZWRfYXR0cmlidXRlICpmbm9kZV9lbmRfZWEoc3RydWN0IGZub2RlICpmbm9kZSkKIHsKLQlyZXR1cm4gKHN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKikoKGNoYXIgKilmbm9kZSArIGZub2RlLT5lYV9vZmZzICsgZm5vZGUtPmFjbF9zaXplX3MgKyBmbm9kZS0+ZWFfc2l6ZV9zKTsKKwlyZXR1cm4gKHN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKikoKGNoYXIgKilmbm9kZSArIGxlMTZfdG9fY3B1KGZub2RlLT5lYV9vZmZzKSArIGxlMTZfdG9fY3B1KGZub2RlLT5hY2xfc2l6ZV9zKSArIGxlMTZfdG9fY3B1KGZub2RlLT5lYV9zaXplX3MpKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGVhX3ZhbHVlbGVuKHN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKmVhKQoreworCXJldHVybiBlYS0+dmFsdWVsZW5fbG8gKyAyNTYgKiBlYS0+dmFsdWVsZW5faGk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGV4dGVuZGVkX2F0dHJpYnV0ZSAqbmV4dF9lYShzdHJ1Y3QgZXh0ZW5kZWRfYXR0cmlidXRlICplYSkKIHsKLQlyZXR1cm4gKHN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKikoKGNoYXIgKillYSArIDUgKyBlYS0+bmFtZWxlbiArIGVhLT52YWx1ZWxlbik7CisJcmV0dXJuIChzdHJ1Y3QgZXh0ZW5kZWRfYXR0cmlidXRlICopKChjaGFyICopZWEgKyA1ICsgZWEtPm5hbWVsZW4gKyBlYV92YWx1ZWxlbihlYSkpOwogfQogCiBzdGF0aWMgaW5saW5lIHNlY25vIGVhX3NlYyhzdHJ1Y3QgZXh0ZW5kZWRfYXR0cmlidXRlICplYSkKIHsKLQlyZXR1cm4gKihzZWNubyAqKSgoY2hhciAqKWVhICsgOSArIGVhLT5uYW1lbGVuKTsKKwlyZXR1cm4gbGUzMl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoc2Vjbm8gKikoKGNoYXIgKillYSArIDkgKyBlYS0+bmFtZWxlbikpKTsKIH0KIAogc3RhdGljIGlubGluZSBzZWNubyBlYV9sZW4oc3RydWN0IGV4dGVuZGVkX2F0dHJpYnV0ZSAqZWEpCiB7Ci0JcmV0dXJuICooc2Vjbm8gKikoKGNoYXIgKillYSArIDUgKyBlYS0+bmFtZWxlbik7CisJcmV0dXJuIGxlMzJfdG9fY3B1KGdldF91bmFsaWduZWQoKHNlY25vICopKChjaGFyICopZWEgKyA1ICsgZWEtPm5hbWVsZW4pKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgY2hhciAqZWFfZGF0YShzdHJ1Y3QgZXh0ZW5kZWRfYXR0cmlidXRlICplYSkKQEAgLTE4NiwxMyArMTc4LDEzIEBACiAJZHN0LT5ub3RfOHgzID0gbjsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCB0c3RiaXRzKHVuc2lnbmVkICpibXAsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIG4pCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHRzdGJpdHModTMyICpibXAsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIG4pCiB7CiAJaW50IGk7CiAJaWYgKChiID49IDB4NDAwMCkgfHwgKGIgKyBuIC0gMSA+PSAweDQwMDApKSByZXR1cm4gbjsKLQlpZiAoISgoYm1wWyhiICYgMHgzZmZmKSA+PiA1XSA+PiAoYiAmIDB4MWYpKSAmIDEpKSByZXR1cm4gMTsKKwlpZiAoISgobGUzMl90b19jcHUoYm1wWyhiICYgMHgzZmZmKSA+PiA1XSkgPj4gKGIgJiAweDFmKSkgJiAxKSkgcmV0dXJuIDE7CiAJZm9yIChpID0gMTsgaSA8IG47IGkrKykKLQkJaWYgKC8qYitpIDwgMHg0MDAwICYmKi8gISgoYm1wWygoYitpKSAmIDB4M2ZmZikgPj4gNV0gPj4gKChiK2kpICYgMHgxZikpICYgMSkpCisJCWlmICghKChsZTMyX3RvX2NwdShibXBbKChiK2kpICYgMHgzZmZmKSA+PiA1XSkgPj4gKChiK2kpICYgMHgxZikpICYgMSkpCiAJCQlyZXR1cm4gaSArIDE7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMDAsMTIgKzE5MiwxMiBAQAogLyogYWxsb2MuYyAqLwogCiBpbnQgaHBmc19jaGtfc2VjdG9ycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc2Vjbm8sIGludCwgY2hhciAqKTsKLXNlY25vIGhwZnNfYWxsb2Nfc2VjdG9yKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzZWNubywgdW5zaWduZWQsIGludCwgaW50KTsKK3NlY25vIGhwZnNfYWxsb2Nfc2VjdG9yKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzZWNubywgdW5zaWduZWQsIGludCk7CiBpbnQgaHBmc19hbGxvY19pZl9wb3NzaWJsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc2Vjbm8pOwogdm9pZCBocGZzX2ZyZWVfc2VjdG9ycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc2Vjbm8sIHVuc2lnbmVkKTsKIGludCBocGZzX2NoZWNrX2ZyZWVfZG5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQpOwogdm9pZCBocGZzX2ZyZWVfZG5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICosIHNlY25vKTsKLXN0cnVjdCBkbm9kZSAqaHBmc19hbGxvY19kbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc2Vjbm8sIGRub2RlX3NlY25vICosIHN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkICosIGludCk7CitzdHJ1Y3QgZG5vZGUgKmhwZnNfYWxsb2NfZG5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICosIHNlY25vLCBkbm9kZV9zZWNubyAqLCBzdHJ1Y3QgcXVhZF9idWZmZXJfaGVhZCAqKTsKIHN0cnVjdCBmbm9kZSAqaHBmc19hbGxvY19mbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc2Vjbm8sIGZub2RlX3NlY25vICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKik7CiBzdHJ1Y3QgYW5vZGUgKmhwZnNfYWxsb2NfYW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICosIHNlY25vLCBhbm9kZV9zZWNubyAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiopOwogCkBAIC0yMjIsOCArMjE0LDYgQEAKIAogLyogYnVmZmVyLmMgKi8KIAotdm9pZCBocGZzX2xvY2tfY3JlYXRpb24oc3RydWN0IHN1cGVyX2Jsb2NrICopOwotdm9pZCBocGZzX3VubG9ja19jcmVhdGlvbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiB2b2lkICpocGZzX21hcF9zZWN0b3Ioc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiosIGludCk7CiB2b2lkICpocGZzX2dldF9zZWN0b3Ioc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiopOwogdm9pZCAqaHBmc19tYXBfNHNlY3RvcnMoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkLCBzdHJ1Y3QgcXVhZF9idWZmZXJfaGVhZCAqLCBpbnQpOwpAQCAtMjQ3LDcgKzIzNyw3IEBACiBzdHJ1Y3QgaHBmc19kaXJlbnQgKmhwZnNfYWRkX2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZG5vZGUgKiwKIAkJCQljb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkLCBzZWNubyk7CiBpbnQgaHBmc19hZGRfZGlyZW50KHN0cnVjdCBpbm9kZSAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkLAotCQkgICAgc3RydWN0IGhwZnNfZGlyZW50ICosIGludCk7CisJCSAgICBzdHJ1Y3QgaHBmc19kaXJlbnQgKik7CiBpbnQgaHBmc19yZW1vdmVfZGlyZW50KHN0cnVjdCBpbm9kZSAqLCBkbm9kZV9zZWNubywgc3RydWN0IGhwZnNfZGlyZW50ICosIHN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkICosIGludCk7CiB2b2lkIGhwZnNfY291bnRfZG5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBkbm9kZV9zZWNubywgaW50ICosIGludCAqLCBpbnQgKik7CiBkbm9kZV9zZWNubyBocGZzX2RlX2FzX2Rvd25fYXNfcG9zc2libGUoc3RydWN0IHN1cGVyX2Jsb2NrICosIGRub2RlX3NlY25vIGRubyk7CkBAIC0zMDMsNyArMjkzLDYgQEAKIAkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQsIGludCk7CiBpbnQgaHBmc19pc19uYW1lX2xvbmcoY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCk7CiB2b2lkIGhwZnNfYWRqdXN0X2xlbmd0aChjb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkICopOwotdm9pZCBocGZzX2RlY2lkZV9jb252KHN0cnVjdCBpbm9kZSAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkKTsKIAogLyogbmFtZWkuYyAqLwogCkBAIC0zNDYsMjEgKzMzNSwyNiBAQAogLyoKICAqIExvY2tpbmc6CiAgKgotICogaHBmc19sb2NrKCkgaXMgYSBsZWZ0b3ZlciBmcm9tIHRoZSBiaWcga2VybmVsIGxvY2suCi0gKiBSaWdodCBub3csIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZW1wdHkgYW5kIG9ubHkgbGVmdAotICogZm9yIGRvY3VtZW50YXRpb24gcHVycG9zZXMuIFRoZSBmaWxlIHN5c3RlbSBubyBsb25nZXIKLSAqIHdvcmtzIG9uIFNNUCBzeXN0ZW1zLCBzbyB0aGUgbG9jayBpcyBub3QgbmVlZGVkCi0gKiBhbnkgbW9yZS4KKyAqIGhwZnNfbG9jaygpIGxvY2tzIHRoZSB3aG9sZSBmaWxlc3lzdGVtLiBJdCBtdXN0IGJlIHRha2VuCisgKiBvbiBhbnkgbWV0aG9kIGNhbGxlZCBieSB0aGUgVkZTLgogICoKLSAqIElmIHNvbWVvbmUgaXMgaW50ZXJlc3RlZCBpbiBtYWtpbmcgaXQgd29yayBhZ2FpbiwgdGhpcwotICogd291bGQgYmUgdGhlIHBsYWNlIHRvIHN0YXJ0IGJ5IGFkZGluZyBhIHBlci1zdXBlcmJsb2NrCi0gKiBtdXRleCBhbmQgZml4aW5nIGFsbCB0aGUgYnVncyBhbmQgcGVyZm9ybWFuY2UgaXNzdWVzCi0gKiBjYXVzZWQgYnkgdGhhdC4KKyAqIFdlIGRvbid0IGRvIGFueSBwZXItZmlsZSBsb2NraW5nIGFueW1vcmUsIGl0IGlzIGhhcmQgdG8KKyAqIHJldmlldyBhbmQgSFBGUyBpcyBub3QgcGVyZm9ybWFuY2Utc2Vuc2l0aXZlIGFueXdheS4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIGhwZnNfbG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpCiB7CisJc3RydWN0IGhwZnNfc2JfaW5mbyAqc2JpID0gaHBmc19zYihzKTsKKwltdXRleF9sb2NrKCZzYmktPmhwZnNfbXV0ZXgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaHBmc191bmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzKQogeworCXN0cnVjdCBocGZzX3NiX2luZm8gKnNiaSA9IGhwZnNfc2Iocyk7CisJbXV0ZXhfdW5sb2NrKCZzYmktPmhwZnNfbXV0ZXgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHBmc19sb2NrX2Fzc2VydChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpCit7CisJc3RydWN0IGhwZnNfc2JfaW5mbyAqc2JpID0gaHBmc19zYihzKTsKKwlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJnNiaS0+aHBmc19tdXRleCkpOwogfQpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9pbm9kZS5jIGIvZnMvaHBmcy9pbm9kZS5jCmluZGV4IDg3ZjFmNzguLjMzOGNkODMgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvaW5vZGUuYworKysgYi9mcy9ocGZzL2lub2RlLmMKQEAgLTE3LDcgKzE3LDYgQEAKIAlpLT5pX3VpZCA9IGhwZnNfc2Ioc2IpLT5zYl91aWQ7CiAJaS0+aV9naWQgPSBocGZzX3NiKHNiKS0+c2JfZ2lkOwogCWktPmlfbW9kZSA9IGhwZnNfc2Ioc2IpLT5zYl9tb2RlOwotCWhwZnNfaW5vZGUtPmlfY29udiA9IGhwZnNfc2Ioc2IpLT5zYl9jb252OwogCWktPmlfc2l6ZSA9IC0xOwogCWktPmlfYmxvY2tzID0gLTE7CiAJCkBAIC0xMTYsOCArMTE1LDggQEAKIAkJaS0+aV9tb2RlIHw9IFNfSUZESVI7CiAJCWktPmlfb3AgPSAmaHBmc19kaXJfaW9wczsKIAkJaS0+aV9mb3AgPSAmaHBmc19kaXJfb3BzOwotCQlocGZzX2lub2RlLT5pX3BhcmVudF9kaXIgPSBmbm9kZS0+dXA7Ci0JCWhwZnNfaW5vZGUtPmlfZG5vID0gZm5vZGUtPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubzsKKwkJaHBmc19pbm9kZS0+aV9wYXJlbnRfZGlyID0gbGUzMl90b19jcHUoZm5vZGUtPnVwKTsKKwkJaHBmc19pbm9kZS0+aV9kbm8gPSBsZTMyX3RvX2NwdShmbm9kZS0+dS5leHRlcm5hbFswXS5kaXNrX3NlY25vKTsKIAkJaWYgKGhwZnNfc2Ioc2IpLT5zYl9jaGsgPj0gMikgewogCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDA7CiAJCQlpZiAoaHBmc19tYXBfZm5vZGUoc2IsIGhwZnNfaW5vZGUtPmlfcGFyZW50X2RpciwgJmJoMCkpIGJyZWxzZShiaDApOwpAQCAtMTMzLDcgKzEzMiw3IEBACiAJCWktPmlfb3AgPSAmaHBmc19maWxlX2lvcHM7CiAJCWktPmlfZm9wID0gJmhwZnNfZmlsZV9vcHM7CiAJCWktPmlfbmxpbmsgPSAxOwotCQlpLT5pX3NpemUgPSBmbm9kZS0+ZmlsZV9zaXplOworCQlpLT5pX3NpemUgPSBsZTMyX3RvX2NwdShmbm9kZS0+ZmlsZV9zaXplKTsKIAkJaS0+aV9ibG9ja3MgPSAoKGktPmlfc2l6ZSArIDUxMSkgPj4gOSkgKyAxOwogCQlpLT5pX2RhdGEuYV9vcHMgPSAmaHBmc19hb3BzOwogCQlocGZzX2koaSktPm1tdV9wcml2YXRlID0gaS0+aV9zaXplOwpAQCAtMTQ0LDcgKzE0Myw3IEBACiBzdGF0aWMgdm9pZCBocGZzX3dyaXRlX2lub2RlX2VhKHN0cnVjdCBpbm9kZSAqaSwgc3RydWN0IGZub2RlICpmbm9kZSkKIHsKIAlzdHJ1Y3QgaHBmc19pbm9kZV9pbmZvICpocGZzX2lub2RlID0gaHBmc19pKGkpOwotCS8qaWYgKGZub2RlLT5hY2xfc2l6ZV9sIHx8IGZub2RlLT5hY2xfc2l6ZV9zKSB7CisJLyppZiAobGUzMl90b19jcHUoZm5vZGUtPmFjbF9zaXplX2wpIHx8IGxlMTZfdG9fY3B1KGZub2RlLT5hY2xfc2l6ZV9zKSkgewogCQkgICBTb21lIHVua25vd24gc3RydWN0dXJlcyBsaWtlIEFDTCBtYXkgYmUgaW4gZm5vZGUsCiAJCSAgIHdlJ2QgYmV0dGVyIG5vdCBvdmVyd3JpdGUgdGhlbQogCQlocGZzX2Vycm9yKGktPmlfc2IsICJmbm9kZSAlMDh4IGhhcyBzb21lIHVua25vd24gSFBGUzM4NiBzdHVjdHVyZXMiLCBpLT5pX2lubyk7CkBAIC0xODcsOSArMTg2LDcgQEAKIAkJa2ZyZWUoaHBmc19pbm9kZS0+aV9yZGRpcl9vZmYpOwogCQlocGZzX2lub2RlLT5pX3JkZGlyX29mZiA9IE5VTEw7CiAJfQotCW11dGV4X2xvY2soJmhwZnNfaW5vZGUtPmlfcGFyZW50X211dGV4KTsKIAlpZiAoIWktPmlfbmxpbmspIHsKLQkJbXV0ZXhfdW5sb2NrKCZocGZzX2lub2RlLT5pX3BhcmVudF9tdXRleCk7CiAJCXJldHVybjsKIAl9CiAJcGFyZW50ID0gaWdldF9sb2NrZWQoaS0+aV9zYiwgaHBmc19pbm9kZS0+aV9wYXJlbnRfZGlyKTsKQEAgLTIwMCwxNCArMTk3LDkgQEAKIAkJCWhwZnNfcmVhZF9pbm9kZShwYXJlbnQpOwogCQkJdW5sb2NrX25ld19pbm9kZShwYXJlbnQpOwogCQl9Ci0JCW11dGV4X2xvY2soJmhwZnNfaW5vZGUtPmlfbXV0ZXgpOwogCQlocGZzX3dyaXRlX2lub2RlX25vbG9jayhpKTsKLQkJbXV0ZXhfdW5sb2NrKCZocGZzX2lub2RlLT5pX211dGV4KTsKIAkJaXB1dChwYXJlbnQpOwotCX0gZWxzZSB7Ci0JCW1hcmtfaW5vZGVfZGlydHkoaSk7CiAJfQotCW11dGV4X3VubG9jaygmaHBmc19pbm9kZS0+aV9wYXJlbnRfbXV0ZXgpOwogfQogCiB2b2lkIGhwZnNfd3JpdGVfaW5vZGVfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaSkKQEAgLTIyNiwzMCArMjE4LDMwIEBACiAJCX0KIAl9IGVsc2UgZGUgPSBOVUxMOwogCWlmIChTX0lTUkVHKGktPmlfbW9kZSkpIHsKLQkJZm5vZGUtPmZpbGVfc2l6ZSA9IGktPmlfc2l6ZTsKLQkJaWYgKGRlKSBkZS0+ZmlsZV9zaXplID0gaS0+aV9zaXplOworCQlmbm9kZS0+ZmlsZV9zaXplID0gY3B1X3RvX2xlMzIoaS0+aV9zaXplKTsKKwkJaWYgKGRlKSBkZS0+ZmlsZV9zaXplID0gY3B1X3RvX2xlMzIoaS0+aV9zaXplKTsKIAl9IGVsc2UgaWYgKFNfSVNESVIoaS0+aV9tb2RlKSkgewotCQlmbm9kZS0+ZmlsZV9zaXplID0gMDsKLQkJaWYgKGRlKSBkZS0+ZmlsZV9zaXplID0gMDsKKwkJZm5vZGUtPmZpbGVfc2l6ZSA9IGNwdV90b19sZTMyKDApOworCQlpZiAoZGUpIGRlLT5maWxlX3NpemUgPSBjcHVfdG9fbGUzMigwKTsKIAl9CiAJaHBmc193cml0ZV9pbm9kZV9lYShpLCBmbm9kZSk7CiAJaWYgKGRlKSB7Ci0JCWRlLT53cml0ZV9kYXRlID0gZ210X3RvX2xvY2FsKGktPmlfc2IsIGktPmlfbXRpbWUudHZfc2VjKTsKLQkJZGUtPnJlYWRfZGF0ZSA9IGdtdF90b19sb2NhbChpLT5pX3NiLCBpLT5pX2F0aW1lLnR2X3NlYyk7Ci0JCWRlLT5jcmVhdGlvbl9kYXRlID0gZ210X3RvX2xvY2FsKGktPmlfc2IsIGktPmlfY3RpbWUudHZfc2VjKTsKKwkJZGUtPndyaXRlX2RhdGUgPSBjcHVfdG9fbGUzMihnbXRfdG9fbG9jYWwoaS0+aV9zYiwgaS0+aV9tdGltZS50dl9zZWMpKTsKKwkJZGUtPnJlYWRfZGF0ZSA9IGNwdV90b19sZTMyKGdtdF90b19sb2NhbChpLT5pX3NiLCBpLT5pX2F0aW1lLnR2X3NlYykpOworCQlkZS0+Y3JlYXRpb25fZGF0ZSA9IGNwdV90b19sZTMyKGdtdF90b19sb2NhbChpLT5pX3NiLCBpLT5pX2N0aW1lLnR2X3NlYykpOwogCQlkZS0+cmVhZF9vbmx5ID0gIShpLT5pX21vZGUgJiAwMjIyKTsKLQkJZGUtPmVhX3NpemUgPSBocGZzX2lub2RlLT5pX2VhX3NpemU7CisJCWRlLT5lYV9zaXplID0gY3B1X3RvX2xlMzIoaHBmc19pbm9kZS0+aV9lYV9zaXplKTsKIAkJaHBmc19tYXJrXzRidWZmZXJzX2RpcnR5KCZxYmgpOwogCQlocGZzX2JyZWxzZTQoJnFiaCk7CiAJfQogCWlmIChTX0lTRElSKGktPmlfbW9kZSkpIHsKIAkJaWYgKChkZSA9IG1hcF9kaXJlbnQoaSwgaHBmc19pbm9kZS0+aV9kbm8sICJcMDAxXDAwMSIsIDIsIE5VTEwsICZxYmgpKSkgewotCQkJZGUtPndyaXRlX2RhdGUgPSBnbXRfdG9fbG9jYWwoaS0+aV9zYiwgaS0+aV9tdGltZS50dl9zZWMpOwotCQkJZGUtPnJlYWRfZGF0ZSA9IGdtdF90b19sb2NhbChpLT5pX3NiLCBpLT5pX2F0aW1lLnR2X3NlYyk7Ci0JCQlkZS0+Y3JlYXRpb25fZGF0ZSA9IGdtdF90b19sb2NhbChpLT5pX3NiLCBpLT5pX2N0aW1lLnR2X3NlYyk7CisJCQlkZS0+d3JpdGVfZGF0ZSA9IGNwdV90b19sZTMyKGdtdF90b19sb2NhbChpLT5pX3NiLCBpLT5pX210aW1lLnR2X3NlYykpOworCQkJZGUtPnJlYWRfZGF0ZSA9IGNwdV90b19sZTMyKGdtdF90b19sb2NhbChpLT5pX3NiLCBpLT5pX2F0aW1lLnR2X3NlYykpOworCQkJZGUtPmNyZWF0aW9uX2RhdGUgPSBjcHVfdG9fbGUzMihnbXRfdG9fbG9jYWwoaS0+aV9zYiwgaS0+aV9jdGltZS50dl9zZWMpKTsKIAkJCWRlLT5yZWFkX29ubHkgPSAhKGktPmlfbW9kZSAmIDAyMjIpOwotCQkJZGUtPmVhX3NpemUgPSAvKmhwZnNfaW5vZGUtPmlfZWFfc2l6ZSovMDsKLQkJCWRlLT5maWxlX3NpemUgPSAwOworCQkJZGUtPmVhX3NpemUgPSBjcHVfdG9fbGUzMigvKmhwZnNfaW5vZGUtPmlfZWFfc2l6ZSovMCk7CisJCQlkZS0+ZmlsZV9zaXplID0gY3B1X3RvX2xlMzIoMCk7CiAJCQlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaCk7CiAJCQlocGZzX2JyZWxzZTQoJnFiaCk7CiAJCX0gZWxzZQpAQCAtMjY5LDYgKzI2MSwxMCBAQAogCWhwZnNfbG9jayhpbm9kZS0+aV9zYik7CiAJaWYgKGlub2RlLT5pX2lubyA9PSBocGZzX3NiKGlub2RlLT5pX3NiKS0+c2Jfcm9vdCkKIAkJZ290byBvdXRfdW5sb2NrOworCWlmICgoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1VJRCkgJiYgYXR0ci0+aWFfdWlkID49IDB4MTAwMDApCisJCWdvdG8gb3V0X3VubG9jazsKKwlpZiAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9HSUQpICYmIGF0dHItPmlhX2dpZCA+PSAweDEwMDAwKQorCQlnb3RvIG91dF91bmxvY2s7CiAJaWYgKChhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkgJiYgYXR0ci0+aWFfc2l6ZSA+IGlub2RlLT5pX3NpemUpCiAJCWdvdG8gb3V0X3VubG9jazsKIApAQCAtMjg0LDcgKzI4MCw2IEBACiAJfQogCiAJc2V0YXR0cl9jb3B5KGlub2RlLCBhdHRyKTsKLQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAogCWhwZnNfd3JpdGVfaW5vZGUoaW5vZGUpOwogCmRpZmYgLS1naXQgYS9mcy9ocGZzL21hcC5jIGIvZnMvaHBmcy9tYXAuYwppbmRleCA4NDBkMDMzLi5hNzkwODIxIDEwMDY0NAotLS0gYS9mcy9ocGZzL21hcC5jCisrKyBiL2ZzL2hwZnMvbWFwLmMKQEAgLTIxLDcgKzIxLDcgQEAKIAkJaHBmc19lcnJvcihzLCAiaHBmc19tYXBfYml0bWFwIGNhbGxlZCB3aXRoIGJhZCBwYXJhbWV0ZXI6ICUwOHggYXQgJXMiLCBibXBfYmxvY2ssIGlkKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCXNlYyA9IGhwZnNfc2IocyktPnNiX2JtcF9kaXJbYm1wX2Jsb2NrXTsKKwlzZWMgPSBsZTMyX3RvX2NwdShocGZzX3NiKHMpLT5zYl9ibXBfZGlyW2JtcF9ibG9ja10pOwogCWlmICghc2VjIHx8IHNlYyA+IGhwZnNfc2IocyktPnNiX2ZzX3NpemUtNCkgewogCQlocGZzX2Vycm9yKHMsICJpbnZhbGlkIGJpdG1hcCBibG9jayBwb2ludGVyICUwOHggLT4gJTA4eCBhdCAlcyIsIGJtcF9ibG9jaywgc2VjLCBpZCk7CiAJCXJldHVybiBOVUxMOwpAQCAtNDYsMTggKzQ2LDE4IEBACiAJc3RydWN0IGNvZGVfcGFnZV9kYXRhICpjcGQ7CiAJc3RydWN0IGNvZGVfcGFnZV9kaXJlY3RvcnkgKmNwID0gaHBmc19tYXBfc2VjdG9yKHMsIGNwcywgJmJoLCAwKTsKIAlpZiAoIWNwKSByZXR1cm4gTlVMTDsKLQlpZiAoY3AtPm1hZ2ljICE9IENQX0RJUl9NQUdJQykgewotCQlwcmludGsoIkhQRlM6IENvZGUgcGFnZSBkaXJlY3RvcnkgbWFnaWMgZG9lc24ndCBtYXRjaCAobWFnaWMgPSAlMDh4KVxuIiwgY3AtPm1hZ2ljKTsKKwlpZiAobGUzMl90b19jcHUoY3AtPm1hZ2ljKSAhPSBDUF9ESVJfTUFHSUMpIHsKKwkJcHJpbnRrKCJIUEZTOiBDb2RlIHBhZ2UgZGlyZWN0b3J5IG1hZ2ljIGRvZXNuJ3QgbWF0Y2ggKG1hZ2ljID0gJTA4eClcbiIsIGxlMzJfdG9fY3B1KGNwLT5tYWdpYykpOwogCQlicmVsc2UoYmgpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JaWYgKCFjcC0+bl9jb2RlX3BhZ2VzKSB7CisJaWYgKCFsZTMyX3RvX2NwdShjcC0+bl9jb2RlX3BhZ2VzKSkgewogCQlwcmludGsoIkhQRlM6IG5fY29kZV9wYWdlcyA9PSAwXG4iKTsKIAkJYnJlbHNlKGJoKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCWNwZHMgPSBjcC0+YXJyYXlbMF0uY29kZV9wYWdlX2RhdGE7Ci0JY3BpID0gY3AtPmFycmF5WzBdLmluZGV4OworCWNwZHMgPSBsZTMyX3RvX2NwdShjcC0+YXJyYXlbMF0uY29kZV9wYWdlX2RhdGEpOworCWNwaSA9IGxlMTZfdG9fY3B1KGNwLT5hcnJheVswXS5pbmRleCk7CiAJYnJlbHNlKGJoKTsKIAogCWlmIChjcGkgPj0gMykgewpAQCAtNjYsMTIgKzY2LDEyIEBACiAJfQogCQogCWlmICghKGNwZCA9IGhwZnNfbWFwX3NlY3RvcihzLCBjcGRzLCAmYmgsIDApKSkgcmV0dXJuIE5VTEw7Ci0JaWYgKCh1bnNpZ25lZCljcGQtPm9mZnNbY3BpXSA+IDB4MTc4KSB7CisJaWYgKGxlMTZfdG9fY3B1KGNwZC0+b2Zmc1tjcGldKSA+IDB4MTc4KSB7CiAJCXByaW50aygiSFBGUzogQ29kZSBwYWdlIGluZGV4IG91dCBvZiBzZWN0b3JcbiIpOwogCQlicmVsc2UoYmgpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JcHRyID0gKHVuc2lnbmVkIGNoYXIgKiljcGQgKyBjcGQtPm9mZnNbY3BpXSArIDY7CisJcHRyID0gKHVuc2lnbmVkIGNoYXIgKiljcGQgKyBsZTE2X3RvX2NwdShjcGQtPm9mZnNbY3BpXSkgKyA2OwogCWlmICghKGNwX3RhYmxlID0ga21hbGxvYygyNTYsIEdGUF9LRVJORUwpKSkgewogCQlwcmludGsoIkhQRlM6IG91dCBvZiBtZW1vcnkgZm9yIGNvZGUgcGFnZSB0YWJsZVxuIik7CiAJCWJyZWxzZShiaCk7CkBAIC0xMjUsNyArMTI1LDcgQEAKIAkJaWYgKGhwZnNfc2IocyktPnNiX2NoaykgewogCQkJc3RydWN0IGV4dGVuZGVkX2F0dHJpYnV0ZSAqZWE7CiAJCQlzdHJ1Y3QgZXh0ZW5kZWRfYXR0cmlidXRlICplYV9lbmQ7Ci0JCQlpZiAoZm5vZGUtPm1hZ2ljICE9IEZOT0RFX01BR0lDKSB7CisJCQlpZiAobGUzMl90b19jcHUoZm5vZGUtPm1hZ2ljKSAhPSBGTk9ERV9NQUdJQykgewogCQkJCWhwZnNfZXJyb3IocywgImJhZCBtYWdpYyBvbiBmbm9kZSAlMDhseCIsCiAJCQkJCSh1bnNpZ25lZCBsb25nKWlubyk7CiAJCQkJZ290byBiYWlsOwpAQCAtMTM4LDcgKzEzOCw3IEBACiAJCQkJCSAgICAodW5zaWduZWQgbG9uZylpbm8pOwogCQkJCQlnb3RvIGJhaWw7CiAJCQkJfQotCQkJCWlmIChmbm9kZS0+YnRyZWUuZmlyc3RfZnJlZSAhPQorCQkJCWlmIChsZTE2X3RvX2NwdShmbm9kZS0+YnRyZWUuZmlyc3RfZnJlZSkgIT0KIAkJCQkgICAgOCArIGZub2RlLT5idHJlZS5uX3VzZWRfbm9kZXMgKiAoZm5vZGUtPmJ0cmVlLmludGVybmFsID8gOCA6IDEyKSkgewogCQkJCQlocGZzX2Vycm9yKHMsCiAJCQkJCSAgICAiYmFkIGZpcnN0X2ZyZWUgcG9pbnRlciBpbiBmbm9kZSAlMDhseCIsCkBAIC0xNDYsMTIgKzE0NiwxMiBAQAogCQkJCQlnb3RvIGJhaWw7CiAJCQkJfQogCQkJfQotCQkJaWYgKGZub2RlLT5lYV9zaXplX3MgJiYgKChzaWduZWQgaW50KWZub2RlLT5lYV9vZmZzIDwgMHhjNCB8fAotCQkJICAgKHNpZ25lZCBpbnQpZm5vZGUtPmVhX29mZnMgKyBmbm9kZS0+YWNsX3NpemVfcyArIGZub2RlLT5lYV9zaXplX3MgPiAweDIwMCkpIHsKKwkJCWlmIChsZTE2X3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9zKSAmJiAobGUxNl90b19jcHUoZm5vZGUtPmVhX29mZnMpIDwgMHhjNCB8fAorCQkJICAgbGUxNl90b19jcHUoZm5vZGUtPmVhX29mZnMpICsgbGUxNl90b19jcHUoZm5vZGUtPmFjbF9zaXplX3MpICsgbGUxNl90b19jcHUoZm5vZGUtPmVhX3NpemVfcykgPiAweDIwMCkpIHsKIAkJCQlocGZzX2Vycm9yKHMsCiAJCQkJCSJiYWQgRUEgaW5mbyBpbiBmbm9kZSAlMDhseDogZWFfb2ZmcyA9PSAlMDR4IGVhX3NpemVfcyA9PSAlMDR4IiwKIAkJCQkJKHVuc2lnbmVkIGxvbmcpaW5vLAotCQkJCQlmbm9kZS0+ZWFfb2ZmcywgZm5vZGUtPmVhX3NpemVfcyk7CisJCQkJCWxlMTZfdG9fY3B1KGZub2RlLT5lYV9vZmZzKSwgbGUxNl90b19jcHUoZm5vZGUtPmVhX3NpemVfcykpOwogCQkJCWdvdG8gYmFpbDsKIAkJCX0KIAkJCWVhID0gZm5vZGVfZWEoZm5vZGUpOwpAQCAtMTc4LDE2ICsxNzgsMjAgQEAKIAlpZiAoaHBmc19zYihzKS0+c2JfY2hrKSBpZiAoaHBmc19jaGtfc2VjdG9ycyhzLCBhbm8sIDEsICJhbm9kZSIpKSByZXR1cm4gTlVMTDsKIAlpZiAoKGFub2RlID0gaHBmc19tYXBfc2VjdG9yKHMsIGFubywgYmhwLCBBTk9ERV9SRF9BSEVBRCkpKQogCQlpZiAoaHBmc19zYihzKS0+c2JfY2hrKSB7Ci0JCQlpZiAoYW5vZGUtPm1hZ2ljICE9IEFOT0RFX01BR0lDIHx8IGFub2RlLT5zZWxmICE9IGFubykgeworCQkJaWYgKGxlMzJfdG9fY3B1KGFub2RlLT5tYWdpYykgIT0gQU5PREVfTUFHSUMpIHsKIAkJCQlocGZzX2Vycm9yKHMsICJiYWQgbWFnaWMgb24gYW5vZGUgJTA4eCIsIGFubyk7CiAJCQkJZ290byBiYWlsOwogCQkJfQorCQkJaWYgKGxlMzJfdG9fY3B1KGFub2RlLT5zZWxmKSAhPSBhbm8pIHsKKwkJCQlocGZzX2Vycm9yKHMsICJzZWxmIHBvaW50ZXIgaW52YWxpZCBvbiBhbm9kZSAlMDh4IiwgYW5vKTsKKwkJCQlnb3RvIGJhaWw7CisJCQl9CiAJCQlpZiAoKHVuc2lnbmVkKWFub2RlLT5idHJlZS5uX3VzZWRfbm9kZXMgKyAodW5zaWduZWQpYW5vZGUtPmJ0cmVlLm5fZnJlZV9ub2RlcyAhPQogCQkJICAgIChhbm9kZS0+YnRyZWUuaW50ZXJuYWwgPyA2MCA6IDQwKSkgewogCQkJCWhwZnNfZXJyb3IocywgImJhZCBudW1iZXIgb2Ygbm9kZXMgaW4gYW5vZGUgJTA4eCIsIGFubyk7CiAJCQkJZ290byBiYWlsOwogCQkJfQotCQkJaWYgKGFub2RlLT5idHJlZS5maXJzdF9mcmVlICE9CisJCQlpZiAobGUxNl90b19jcHUoYW5vZGUtPmJ0cmVlLmZpcnN0X2ZyZWUpICE9CiAJCQkgICAgOCArIGFub2RlLT5idHJlZS5uX3VzZWRfbm9kZXMgKiAoYW5vZGUtPmJ0cmVlLmludGVybmFsID8gOCA6IDEyKSkgewogCQkJCWhwZnNfZXJyb3IocywgImJhZCBmaXJzdF9mcmVlIHBvaW50ZXIgaW4gYW5vZGUgJTA4eCIsIGFubyk7CiAJCQkJZ290byBiYWlsOwpAQCAtMjE5LDI2ICsyMjMsMjYgQEAKIAkJCXVuc2lnbmVkIHAsIHBwID0gMDsKIAkJCXVuc2lnbmVkIGNoYXIgKmQgPSAodW5zaWduZWQgY2hhciAqKWRub2RlOwogCQkJaW50IGIgPSAwOwotCQkJaWYgKGRub2RlLT5tYWdpYyAhPSBETk9ERV9NQUdJQykgeworCQkJaWYgKGxlMzJfdG9fY3B1KGRub2RlLT5tYWdpYykgIT0gRE5PREVfTUFHSUMpIHsKIAkJCQlocGZzX2Vycm9yKHMsICJiYWQgbWFnaWMgb24gZG5vZGUgJTA4eCIsIHNlY25vKTsKIAkJCQlnb3RvIGJhaWw7CiAJCQl9Ci0JCQlpZiAoZG5vZGUtPnNlbGYgIT0gc2Vjbm8pCi0JCQkJaHBmc19lcnJvcihzLCAiYmFkIHNlbGYgcG9pbnRlciBvbiBkbm9kZSAlMDh4IHNlbGYgPSAlMDh4Iiwgc2Vjbm8sIGRub2RlLT5zZWxmKTsKKwkJCWlmIChsZTMyX3RvX2NwdShkbm9kZS0+c2VsZikgIT0gc2Vjbm8pCisJCQkJaHBmc19lcnJvcihzLCAiYmFkIHNlbGYgcG9pbnRlciBvbiBkbm9kZSAlMDh4IHNlbGYgPSAlMDh4Iiwgc2Vjbm8sIGxlMzJfdG9fY3B1KGRub2RlLT5zZWxmKSk7CiAJCQkvKiBDaGVjayBkaXJlbnRzIC0gYmFkIGRpcmVudHMgd291bGQgY2F1c2UgaW5maW5pdGUKIAkJCSAgIGxvb3BzIG9yIHNob290aW5nIHRvIG1lbW9yeSAqLwotCQkJaWYgKGRub2RlLT5maXJzdF9mcmVlID4gMjA0OC8qIHx8IGRub2RlLT5maXJzdF9mcmVlIDwgODQqLykgewotCQkJCWhwZnNfZXJyb3IocywgImRub2RlICUwOHggaGFzIGZpcnN0X2ZyZWUgPT0gJTA4eCIsIHNlY25vLCBkbm9kZS0+Zmlyc3RfZnJlZSk7CisJCQlpZiAobGUzMl90b19jcHUoZG5vZGUtPmZpcnN0X2ZyZWUpID4gMjA0OCkgeworCQkJCWhwZnNfZXJyb3IocywgImRub2RlICUwOHggaGFzIGZpcnN0X2ZyZWUgPT0gJTA4eCIsIHNlY25vLCBsZTMyX3RvX2NwdShkbm9kZS0+Zmlyc3RfZnJlZSkpOwogCQkJCWdvdG8gYmFpbDsKIAkJCX0KLQkJCWZvciAocCA9IDIwOyBwIDwgZG5vZGUtPmZpcnN0X2ZyZWU7IHAgKz0gZFtwXSArIChkW3ArMV0gPDwgOCkpIHsKKwkJCWZvciAocCA9IDIwOyBwIDwgbGUzMl90b19jcHUoZG5vZGUtPmZpcnN0X2ZyZWUpOyBwICs9IGRbcF0gKyAoZFtwKzFdIDw8IDgpKSB7CiAJCQkJc3RydWN0IGhwZnNfZGlyZW50ICpkZSA9IChzdHJ1Y3QgaHBmc19kaXJlbnQgKikoKGNoYXIgKilkbm9kZSArIHApOwotCQkJCWlmIChkZS0+bGVuZ3RoID4gMjkyIHx8IChkZS0+bGVuZ3RoIDwgMzIpIHx8IChkZS0+bGVuZ3RoICYgMykgfHwgcCArIGRlLT5sZW5ndGggPiAyMDQ4KSB7CisJCQkJaWYgKGxlMTZfdG9fY3B1KGRlLT5sZW5ndGgpID4gMjkyIHx8IChsZTE2X3RvX2NwdShkZS0+bGVuZ3RoKSA8IDMyKSB8fCAobGUxNl90b19jcHUoZGUtPmxlbmd0aCkgJiAzKSB8fCBwICsgbGUxNl90b19jcHUoZGUtPmxlbmd0aCkgPiAyMDQ4KSB7CiAJCQkJCWhwZnNfZXJyb3IocywgImJhZCBkaXJlbnQgc2l6ZSBpbiBkbm9kZSAlMDh4LCBkaXJlbnQgJTAzeCwgbGFzdCAlMDN4Iiwgc2Vjbm8sIHAsIHBwKTsKIAkJCQkJZ290byBiYWlsOwogCQkJCX0KLQkJCQlpZiAoKCgzMSArIGRlLT5uYW1lbGVuICsgZGUtPmRvd24qNCArIDMpICYgfjMpICE9IGRlLT5sZW5ndGgpIHsKLQkJCQkJaWYgKCgoMzEgKyBkZS0+bmFtZWxlbiArIGRlLT5kb3duKjQgKyAzKSAmIH4zKSA8IGRlLT5sZW5ndGggJiYgcy0+c19mbGFncyAmIE1TX1JET05MWSkgZ290byBvazsKKwkJCQlpZiAoKCgzMSArIGRlLT5uYW1lbGVuICsgZGUtPmRvd24qNCArIDMpICYgfjMpICE9IGxlMTZfdG9fY3B1KGRlLT5sZW5ndGgpKSB7CisJCQkJCWlmICgoKDMxICsgZGUtPm5hbWVsZW4gKyBkZS0+ZG93bio0ICsgMykgJiB+MykgPCBsZTE2X3RvX2NwdShkZS0+bGVuZ3RoKSAmJiBzLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSBnb3RvIG9rOwogCQkJCQlocGZzX2Vycm9yKHMsICJuYW1lbGVuIGRvZXMgbm90IG1hdGNoIGRpcmVudCBzaXplIGluIGRub2RlICUwOHgsIGRpcmVudCAlMDN4LCBsYXN0ICUwM3giLCBzZWNubywgcCwgcHApOwogCQkJCQlnb3RvIGJhaWw7CiAJCQkJfQpAQCAtMjUxLDcgKzI1NSw3IEBACiAJCQkJcHAgPSBwOwogCQkJCQogCQkJfQotCQkJaWYgKHAgIT0gZG5vZGUtPmZpcnN0X2ZyZWUpIHsKKwkJCWlmIChwICE9IGxlMzJfdG9fY3B1KGRub2RlLT5maXJzdF9mcmVlKSkgewogCQkJCWhwZnNfZXJyb3IocywgInNpemUgb24gbGFzdCBkaXJlbnQgZG9lcyBub3QgbWF0Y2ggZmlyc3RfZnJlZTsgZG5vZGUgJTA4eCIsIHNlY25vKTsKIAkJCQlnb3RvIGJhaWw7CiAJCQl9CkBAIC0yNzcsNyArMjgxLDcgQEAKIAlpZiAoIWZub2RlKQogCQlyZXR1cm4gMDsKIAotCWRubyA9IGZub2RlLT51LmV4dGVybmFsWzBdLmRpc2tfc2Vjbm87CisJZG5vID0gbGUzMl90b19jcHUoZm5vZGUtPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubyk7CiAJYnJlbHNlKGJoKTsKIAlyZXR1cm4gZG5vOwogfQpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9uYW1lLmMgYi9mcy9ocGZzL25hbWUuYwppbmRleCBmMjQ3MzZkLi45YWNkZjMzIDEwMDY0NAotLS0gYS9mcy9ocGZzL25hbWUuYworKysgYi9mcy9ocGZzL25hbWUuYwpAQCAtOCwzOSArOCw2IEBACiAKICNpbmNsdWRlICJocGZzX2ZuLmgiCiAKLXN0YXRpYyBjb25zdCBjaGFyICp0ZXh0X3Bvc3RmaXhbXT17Ci0iLkFTTSIsICIuQkFTIiwgIi5CQVQiLCAiLkMiLCAiLkNDIiwgIi5DRkciLCAiLkNNRCIsICIuQ09OIiwgIi5DUFAiLCAiLkRFRiIsCi0iLkRPQyIsICIuRFBSIiwgIi5FUlgiLCAiLkgiLCAiLkhQUCIsICIuSFRNIiwgIi5IVE1MIiwgIi5KQVZBIiwgIi5MT0ciLCAiLlBBUyIsCi0iLlJDIiwgIi5URVgiLCAiLlRYVCIsICIuWSIsICIifTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKnRleHRfcHJlZml4W109ewotIkFVVE9FWEVDLiIsICJDSEFOR0VTIiwgIkNPUFlJTkciLCAiQ09ORklHLiIsICJDUkVESVRTIiwgIkZBUSIsICJGSUxFX0lELkRJWiIsCi0iTUFLRUZJTEUiLCAiUkVBRC5NRSIsICJSRUFETUUiLCAiVEVSTUNBUCIsICIifTsKLQotdm9pZCBocGZzX2RlY2lkZV9jb252KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxlbikKLXsKLQlzdHJ1Y3QgaHBmc19pbm9kZV9pbmZvICpocGZzX2lub2RlID0gaHBmc19pKGlub2RlKTsKLQlpbnQgaTsKLQlpZiAoaHBmc19pbm9kZS0+aV9jb252ICE9IENPTlZfQVVUTykgcmV0dXJuOwotCWZvciAoaSA9IDA7ICp0ZXh0X3Bvc3RmaXhbaV07IGkrKykgewotCQlpbnQgbCA9IHN0cmxlbih0ZXh0X3Bvc3RmaXhbaV0pOwotCQlpZiAobCA8PSBsZW4pCi0JCQlpZiAoIWhwZnNfY29tcGFyZV9uYW1lcyhpbm9kZS0+aV9zYiwgdGV4dF9wb3N0Zml4W2ldLCBsLCBuYW1lICsgbGVuIC0gbCwgbCwgMCkpCi0JCQkJZ290byB0ZXh0OwotCX0KLQlmb3IgKGkgPSAwOyAqdGV4dF9wcmVmaXhbaV07IGkrKykgewotCQlpbnQgbCA9IHN0cmxlbih0ZXh0X3ByZWZpeFtpXSk7Ci0JCWlmIChsIDw9IGxlbikKLQkJCWlmICghaHBmc19jb21wYXJlX25hbWVzKGlub2RlLT5pX3NiLCB0ZXh0X3ByZWZpeFtpXSwgbCwgbmFtZSwgbCwgMCkpCi0JCQkJZ290byB0ZXh0OwotCX0KLQlocGZzX2lub2RlLT5pX2NvbnYgPSBDT05WX0JJTkFSWTsKLQlyZXR1cm47Ci0JdGV4dDoKLQlocGZzX2lub2RlLT5pX2NvbnYgPSBDT05WX1RFWFQ7Ci0JcmV0dXJuOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBub3RfYWxsb3dlZF9jaGFyKHVuc2lnbmVkIGNoYXIgYykKIHsKIAlyZXR1cm4gYzwnICcgfHwgYz09JyInIHx8IGM9PScqJyB8fCBjPT0nLycgfHwgYz09JzonIHx8IGM9PSc8JyB8fApkaWZmIC0tZ2l0IGEvZnMvaHBmcy9uYW1laS5jIGIvZnMvaHBmcy9uYW1laS5jCmluZGV4IGQ1ZjhjOGEuLjFmMDU4MzkgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvbmFtZWkuYworKysgYi9mcy9ocGZzL25hbWVpLmMKQEAgLTI5LDcgKzI5LDcgQEAKIAlmbm9kZSA9IGhwZnNfYWxsb2NfZm5vZGUoZGlyLT5pX3NiLCBocGZzX2koZGlyKS0+aV9kbm8sICZmbm8sICZiaCk7CiAJaWYgKCFmbm9kZSkKIAkJZ290byBiYWlsOwotCWRub2RlID0gaHBmc19hbGxvY19kbm9kZShkaXItPmlfc2IsIGZubywgJmRubywgJnFiaDAsIDEpOworCWRub2RlID0gaHBmc19hbGxvY19kbm9kZShkaXItPmlfc2IsIGZubywgJmRubywgJnFiaDApOwogCWlmICghZG5vZGUpCiAJCWdvdG8gYmFpbDE7CiAJbWVtc2V0KCZkZWUsIDAsIHNpemVvZiBkZWUpOwpAQCAtMzcsOCArMzcsOCBAQAogCWlmICghKG1vZGUgJiAwMjIyKSkgZGVlLnJlYWRfb25seSA9IDE7CiAJLypkZWUuYXJjaGl2ZSA9IDA7Ki8KIAlkZWUuaGlkZGVuID0gbmFtZVswXSA9PSAnLic7Ci0JZGVlLmZub2RlID0gZm5vOwotCWRlZS5jcmVhdGlvbl9kYXRlID0gZGVlLndyaXRlX2RhdGUgPSBkZWUucmVhZF9kYXRlID0gZ210X3RvX2xvY2FsKGRpci0+aV9zYiwgZ2V0X3NlY29uZHMoKSk7CisJZGVlLmZub2RlID0gY3B1X3RvX2xlMzIoZm5vKTsKKwlkZWUuY3JlYXRpb25fZGF0ZSA9IGRlZS53cml0ZV9kYXRlID0gZGVlLnJlYWRfZGF0ZSA9IGNwdV90b19sZTMyKGdtdF90b19sb2NhbChkaXItPmlfc2IsIGdldF9zZWNvbmRzKCkpKTsKIAlyZXN1bHQgPSBuZXdfaW5vZGUoZGlyLT5pX3NiKTsKIAlpZiAoIXJlc3VsdCkKIAkJZ290byBiYWlsMjsKQEAgLTQ2LDcgKzQ2LDcgQEAKIAlyZXN1bHQtPmlfaW5vID0gZm5vOwogCWhwZnNfaShyZXN1bHQpLT5pX3BhcmVudF9kaXIgPSBkaXItPmlfaW5vOwogCWhwZnNfaShyZXN1bHQpLT5pX2RubyA9IGRubzsKLQlyZXN1bHQtPmlfY3RpbWUudHZfc2VjID0gcmVzdWx0LT5pX210aW1lLnR2X3NlYyA9IHJlc3VsdC0+aV9hdGltZS50dl9zZWMgPSBsb2NhbF90b19nbXQoZGlyLT5pX3NiLCBkZWUuY3JlYXRpb25fZGF0ZSk7CisJcmVzdWx0LT5pX2N0aW1lLnR2X3NlYyA9IHJlc3VsdC0+aV9tdGltZS50dl9zZWMgPSByZXN1bHQtPmlfYXRpbWUudHZfc2VjID0gbG9jYWxfdG9fZ210KGRpci0+aV9zYiwgbGUzMl90b19jcHUoZGVlLmNyZWF0aW9uX2RhdGUpKTsKIAlyZXN1bHQtPmlfY3RpbWUudHZfbnNlYyA9IDA7IAogCXJlc3VsdC0+aV9tdGltZS50dl9uc2VjID0gMDsgCiAJcmVzdWx0LT5pX2F0aW1lLnR2X25zZWMgPSAwOyAKQEAgLTYwLDggKzYwLDcgQEAKIAlpZiAoZGVlLnJlYWRfb25seSkKIAkJcmVzdWx0LT5pX21vZGUgJj0gfjAyMjI7CiAKLQltdXRleF9sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7Ci0JciA9IGhwZnNfYWRkX2RpcmVudChkaXIsIG5hbWUsIGxlbiwgJmRlZSwgMCk7CisJciA9IGhwZnNfYWRkX2RpcmVudChkaXIsIG5hbWUsIGxlbiwgJmRlZSk7CiAJaWYgKHIgPT0gMSkKIAkJZ290byBiYWlsMzsKIAlpZiAociA9PSAtMSkgewpAQCAtNzAsMjEgKzY5LDIxIEBACiAJfQogCWZub2RlLT5sZW4gPSBsZW47CiAJbWVtY3B5KGZub2RlLT5uYW1lLCBuYW1lLCBsZW4gPiAxNSA/IDE1IDogbGVuKTsKLQlmbm9kZS0+dXAgPSBkaXItPmlfaW5vOworCWZub2RlLT51cCA9IGNwdV90b19sZTMyKGRpci0+aV9pbm8pOwogCWZub2RlLT5kaXJmbGFnID0gMTsKIAlmbm9kZS0+YnRyZWUubl9mcmVlX25vZGVzID0gNzsKIAlmbm9kZS0+YnRyZWUubl91c2VkX25vZGVzID0gMTsKLQlmbm9kZS0+YnRyZWUuZmlyc3RfZnJlZSA9IDB4MTQ7Ci0JZm5vZGUtPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubyA9IGRubzsKLQlmbm9kZS0+dS5leHRlcm5hbFswXS5maWxlX3NlY25vID0gLTE7CisJZm5vZGUtPmJ0cmVlLmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUxNigweDE0KTsKKwlmbm9kZS0+dS5leHRlcm5hbFswXS5kaXNrX3NlY25vID0gY3B1X3RvX2xlMzIoZG5vKTsKKwlmbm9kZS0+dS5leHRlcm5hbFswXS5maWxlX3NlY25vID0gY3B1X3RvX2xlMzIoLTEpOwogCWRub2RlLT5yb290X2Rub2RlID0gMTsKLQlkbm9kZS0+dXAgPSBmbm87CisJZG5vZGUtPnVwID0gY3B1X3RvX2xlMzIoZm5vKTsKIAlkZSA9IGhwZnNfYWRkX2RlKGRpci0+aV9zYiwgZG5vZGUsICJcMDAxXDAwMSIsIDIsIDApOwotCWRlLT5jcmVhdGlvbl9kYXRlID0gZGUtPndyaXRlX2RhdGUgPSBkZS0+cmVhZF9kYXRlID0gZ210X3RvX2xvY2FsKGRpci0+aV9zYiwgZ2V0X3NlY29uZHMoKSk7CisJZGUtPmNyZWF0aW9uX2RhdGUgPSBkZS0+d3JpdGVfZGF0ZSA9IGRlLT5yZWFkX2RhdGUgPSBjcHVfdG9fbGUzMihnbXRfdG9fbG9jYWwoZGlyLT5pX3NiLCBnZXRfc2Vjb25kcygpKSk7CiAJaWYgKCEobW9kZSAmIDAyMjIpKSBkZS0+cmVhZF9vbmx5ID0gMTsKIAlkZS0+Zmlyc3QgPSBkZS0+ZGlyZWN0b3J5ID0gMTsKIAkvKmRlLT5oaWRkZW4gPSBkZS0+c3lzdGVtID0gMDsqLwotCWRlLT5mbm9kZSA9IGZubzsKKwlkZS0+Zm5vZGUgPSBjcHVfdG9fbGUzMihmbm8pOwogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAlicmVsc2UoYmgpOwogCWhwZnNfbWFya180YnVmZmVyc19kaXJ0eSgmcWJoMCk7CkBAIC0xMDEsMTEgKzEwMCw5IEBACiAJCWhwZnNfd3JpdGVfaW5vZGVfbm9sb2NrKHJlc3VsdCk7CiAJfQogCWRfaW5zdGFudGlhdGUoZGVudHJ5LCByZXN1bHQpOwotCW11dGV4X3VubG9jaygmaHBmc19pKGRpciktPmlfbXV0ZXgpOwogCWhwZnNfdW5sb2NrKGRpci0+aV9zYik7CiAJcmV0dXJuIDA7CiBiYWlsMzoKLQltdXRleF91bmxvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKIAlpcHV0KHJlc3VsdCk7CiBiYWlsMjoKIAlocGZzX2JyZWxzZTQoJnFiaDApOwpAQCAtMTQwLDggKzEzNyw4IEBACiAJaWYgKCEobW9kZSAmIDAyMjIpKSBkZWUucmVhZF9vbmx5ID0gMTsKIAlkZWUuYXJjaGl2ZSA9IDE7CiAJZGVlLmhpZGRlbiA9IG5hbWVbMF0gPT0gJy4nOwotCWRlZS5mbm9kZSA9IGZubzsKLQlkZWUuY3JlYXRpb25fZGF0ZSA9IGRlZS53cml0ZV9kYXRlID0gZGVlLnJlYWRfZGF0ZSA9IGdtdF90b19sb2NhbChkaXItPmlfc2IsIGdldF9zZWNvbmRzKCkpOworCWRlZS5mbm9kZSA9IGNwdV90b19sZTMyKGZubyk7CisJZGVlLmNyZWF0aW9uX2RhdGUgPSBkZWUud3JpdGVfZGF0ZSA9IGRlZS5yZWFkX2RhdGUgPSBjcHVfdG9fbGUzMihnbXRfdG9fbG9jYWwoZGlyLT5pX3NiLCBnZXRfc2Vjb25kcygpKSk7CiAKIAlyZXN1bHQgPSBuZXdfaW5vZGUoZGlyLT5pX3NiKTsKIAlpZiAoIXJlc3VsdCkKQEAgLTE1NCw5ICsxNTEsOCBAQAogCXJlc3VsdC0+aV9vcCA9ICZocGZzX2ZpbGVfaW9wczsKIAlyZXN1bHQtPmlfZm9wID0gJmhwZnNfZmlsZV9vcHM7CiAJcmVzdWx0LT5pX25saW5rID0gMTsKLQlocGZzX2RlY2lkZV9jb252KHJlc3VsdCwgbmFtZSwgbGVuKTsKIAlocGZzX2kocmVzdWx0KS0+aV9wYXJlbnRfZGlyID0gZGlyLT5pX2lubzsKLQlyZXN1bHQtPmlfY3RpbWUudHZfc2VjID0gcmVzdWx0LT5pX210aW1lLnR2X3NlYyA9IHJlc3VsdC0+aV9hdGltZS50dl9zZWMgPSBsb2NhbF90b19nbXQoZGlyLT5pX3NiLCBkZWUuY3JlYXRpb25fZGF0ZSk7CisJcmVzdWx0LT5pX2N0aW1lLnR2X3NlYyA9IHJlc3VsdC0+aV9tdGltZS50dl9zZWMgPSByZXN1bHQtPmlfYXRpbWUudHZfc2VjID0gbG9jYWxfdG9fZ210KGRpci0+aV9zYiwgbGUzMl90b19jcHUoZGVlLmNyZWF0aW9uX2RhdGUpKTsKIAlyZXN1bHQtPmlfY3RpbWUudHZfbnNlYyA9IDA7CiAJcmVzdWx0LT5pX210aW1lLnR2X25zZWMgPSAwOwogCXJlc3VsdC0+aV9hdGltZS50dl9uc2VjID0gMDsKQEAgLTE2OCw4ICsxNjQsNyBAQAogCXJlc3VsdC0+aV9kYXRhLmFfb3BzID0gJmhwZnNfYW9wczsKIAlocGZzX2kocmVzdWx0KS0+bW11X3ByaXZhdGUgPSAwOwogCi0JbXV0ZXhfbG9jaygmaHBmc19pKGRpciktPmlfbXV0ZXgpOwotCXIgPSBocGZzX2FkZF9kaXJlbnQoZGlyLCBuYW1lLCBsZW4sICZkZWUsIDApOworCXIgPSBocGZzX2FkZF9kaXJlbnQoZGlyLCBuYW1lLCBsZW4sICZkZWUpOwogCWlmIChyID09IDEpCiAJCWdvdG8gYmFpbDI7CiAJaWYgKHIgPT0gLTEpIHsKQEAgLTE3OCw3ICsxNzMsNyBAQAogCX0KIAlmbm9kZS0+bGVuID0gbGVuOwogCW1lbWNweShmbm9kZS0+bmFtZSwgbmFtZSwgbGVuID4gMTUgPyAxNSA6IGxlbik7Ci0JZm5vZGUtPnVwID0gZGlyLT5pX2lubzsKKwlmbm9kZS0+dXAgPSBjcHVfdG9fbGUzMihkaXItPmlfaW5vKTsKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJYnJlbHNlKGJoKTsKIApAQCAtMTkzLDEyICsxODgsMTAgQEAKIAkJaHBmc193cml0ZV9pbm9kZV9ub2xvY2socmVzdWx0KTsKIAl9CiAJZF9pbnN0YW50aWF0ZShkZW50cnksIHJlc3VsdCk7Ci0JbXV0ZXhfdW5sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7CiAJaHBmc191bmxvY2soZGlyLT5pX3NiKTsKIAlyZXR1cm4gMDsKIAogYmFpbDI6Ci0JbXV0ZXhfdW5sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7CiAJaXB1dChyZXN1bHQpOwogYmFpbDE6CiAJYnJlbHNlKGJoKTsKQEAgLTIzMiw4ICsyMjUsOCBAQAogCWlmICghKG1vZGUgJiAwMjIyKSkgZGVlLnJlYWRfb25seSA9IDE7CiAJZGVlLmFyY2hpdmUgPSAxOwogCWRlZS5oaWRkZW4gPSBuYW1lWzBdID09ICcuJzsKLQlkZWUuZm5vZGUgPSBmbm87Ci0JZGVlLmNyZWF0aW9uX2RhdGUgPSBkZWUud3JpdGVfZGF0ZSA9IGRlZS5yZWFkX2RhdGUgPSBnbXRfdG9fbG9jYWwoZGlyLT5pX3NiLCBnZXRfc2Vjb25kcygpKTsKKwlkZWUuZm5vZGUgPSBjcHVfdG9fbGUzMihmbm8pOworCWRlZS5jcmVhdGlvbl9kYXRlID0gZGVlLndyaXRlX2RhdGUgPSBkZWUucmVhZF9kYXRlID0gY3B1X3RvX2xlMzIoZ210X3RvX2xvY2FsKGRpci0+aV9zYiwgZ2V0X3NlY29uZHMoKSkpOwogCiAJcmVzdWx0ID0gbmV3X2lub2RlKGRpci0+aV9zYik7CiAJaWYgKCFyZXN1bHQpCkBAIC0yNDIsNyArMjM1LDcgQEAKIAlocGZzX2luaXRfaW5vZGUocmVzdWx0KTsKIAlyZXN1bHQtPmlfaW5vID0gZm5vOwogCWhwZnNfaShyZXN1bHQpLT5pX3BhcmVudF9kaXIgPSBkaXItPmlfaW5vOwotCXJlc3VsdC0+aV9jdGltZS50dl9zZWMgPSByZXN1bHQtPmlfbXRpbWUudHZfc2VjID0gcmVzdWx0LT5pX2F0aW1lLnR2X3NlYyA9IGxvY2FsX3RvX2dtdChkaXItPmlfc2IsIGRlZS5jcmVhdGlvbl9kYXRlKTsKKwlyZXN1bHQtPmlfY3RpbWUudHZfc2VjID0gcmVzdWx0LT5pX210aW1lLnR2X3NlYyA9IHJlc3VsdC0+aV9hdGltZS50dl9zZWMgPSBsb2NhbF90b19nbXQoZGlyLT5pX3NiLCBsZTMyX3RvX2NwdShkZWUuY3JlYXRpb25fZGF0ZSkpOwogCXJlc3VsdC0+aV9jdGltZS50dl9uc2VjID0gMDsKIAlyZXN1bHQtPmlfbXRpbWUudHZfbnNlYyA9IDA7CiAJcmVzdWx0LT5pX2F0aW1lLnR2X25zZWMgPSAwOwpAQCAtMjU0LDggKzI0Nyw3IEBACiAJcmVzdWx0LT5pX2Jsb2NrcyA9IDE7CiAJaW5pdF9zcGVjaWFsX2lub2RlKHJlc3VsdCwgbW9kZSwgcmRldik7CiAKLQltdXRleF9sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7Ci0JciA9IGhwZnNfYWRkX2RpcmVudChkaXIsIG5hbWUsIGxlbiwgJmRlZSwgMCk7CisJciA9IGhwZnNfYWRkX2RpcmVudChkaXIsIG5hbWUsIGxlbiwgJmRlZSk7CiAJaWYgKHIgPT0gMSkKIAkJZ290byBiYWlsMjsKIAlpZiAociA9PSAtMSkgewpAQCAtMjY0LDE5ICsyNTYsMTcgQEAKIAl9CiAJZm5vZGUtPmxlbiA9IGxlbjsKIAltZW1jcHkoZm5vZGUtPm5hbWUsIG5hbWUsIGxlbiA+IDE1ID8gMTUgOiBsZW4pOwotCWZub2RlLT51cCA9IGRpci0+aV9pbm87CisJZm5vZGUtPnVwID0gY3B1X3RvX2xlMzIoZGlyLT5pX2lubyk7CiAJbWFya19idWZmZXJfZGlydHkoYmgpOwogCiAJaW5zZXJ0X2lub2RlX2hhc2gocmVzdWx0KTsKIAogCWhwZnNfd3JpdGVfaW5vZGVfbm9sb2NrKHJlc3VsdCk7CiAJZF9pbnN0YW50aWF0ZShkZW50cnksIHJlc3VsdCk7Ci0JbXV0ZXhfdW5sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7CiAJYnJlbHNlKGJoKTsKIAlocGZzX3VubG9jayhkaXItPmlfc2IpOwogCXJldHVybiAwOwogYmFpbDI6Ci0JbXV0ZXhfdW5sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7CiAJaXB1dChyZXN1bHQpOwogYmFpbDE6CiAJYnJlbHNlKGJoKTsKQEAgLTMxMCw4ICszMDAsOCBAQAogCW1lbXNldCgmZGVlLCAwLCBzaXplb2YgZGVlKTsKIAlkZWUuYXJjaGl2ZSA9IDE7CiAJZGVlLmhpZGRlbiA9IG5hbWVbMF0gPT0gJy4nOwotCWRlZS5mbm9kZSA9IGZubzsKLQlkZWUuY3JlYXRpb25fZGF0ZSA9IGRlZS53cml0ZV9kYXRlID0gZGVlLnJlYWRfZGF0ZSA9IGdtdF90b19sb2NhbChkaXItPmlfc2IsIGdldF9zZWNvbmRzKCkpOworCWRlZS5mbm9kZSA9IGNwdV90b19sZTMyKGZubyk7CisJZGVlLmNyZWF0aW9uX2RhdGUgPSBkZWUud3JpdGVfZGF0ZSA9IGRlZS5yZWFkX2RhdGUgPSBjcHVfdG9fbGUzMihnbXRfdG9fbG9jYWwoZGlyLT5pX3NiLCBnZXRfc2Vjb25kcygpKSk7CiAKIAlyZXN1bHQgPSBuZXdfaW5vZGUoZGlyLT5pX3NiKTsKIAlpZiAoIXJlc3VsdCkKQEAgLTMxOSw3ICszMDksNyBAQAogCXJlc3VsdC0+aV9pbm8gPSBmbm87CiAJaHBmc19pbml0X2lub2RlKHJlc3VsdCk7CiAJaHBmc19pKHJlc3VsdCktPmlfcGFyZW50X2RpciA9IGRpci0+aV9pbm87Ci0JcmVzdWx0LT5pX2N0aW1lLnR2X3NlYyA9IHJlc3VsdC0+aV9tdGltZS50dl9zZWMgPSByZXN1bHQtPmlfYXRpbWUudHZfc2VjID0gbG9jYWxfdG9fZ210KGRpci0+aV9zYiwgZGVlLmNyZWF0aW9uX2RhdGUpOworCXJlc3VsdC0+aV9jdGltZS50dl9zZWMgPSByZXN1bHQtPmlfbXRpbWUudHZfc2VjID0gcmVzdWx0LT5pX2F0aW1lLnR2X3NlYyA9IGxvY2FsX3RvX2dtdChkaXItPmlfc2IsIGxlMzJfdG9fY3B1KGRlZS5jcmVhdGlvbl9kYXRlKSk7CiAJcmVzdWx0LT5pX2N0aW1lLnR2X25zZWMgPSAwOwogCXJlc3VsdC0+aV9tdGltZS50dl9uc2VjID0gMDsKIAlyZXN1bHQtPmlfYXRpbWUudHZfbnNlYyA9IDA7CkBAIC0zMzMsOCArMzIzLDcgQEAKIAlyZXN1bHQtPmlfb3AgPSAmcGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CiAJcmVzdWx0LT5pX2RhdGEuYV9vcHMgPSAmaHBmc19zeW1saW5rX2FvcHM7CiAKLQltdXRleF9sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7Ci0JciA9IGhwZnNfYWRkX2RpcmVudChkaXIsIG5hbWUsIGxlbiwgJmRlZSwgMCk7CisJciA9IGhwZnNfYWRkX2RpcmVudChkaXIsIG5hbWUsIGxlbiwgJmRlZSk7CiAJaWYgKHIgPT0gMSkKIAkJZ290byBiYWlsMjsKIAlpZiAociA9PSAtMSkgewpAQCAtMzQzLDcgKzMzMiw3IEBACiAJfQogCWZub2RlLT5sZW4gPSBsZW47CiAJbWVtY3B5KGZub2RlLT5uYW1lLCBuYW1lLCBsZW4gPiAxNSA/IDE1IDogbGVuKTsKLQlmbm9kZS0+dXAgPSBkaXItPmlfaW5vOworCWZub2RlLT51cCA9IGNwdV90b19sZTMyKGRpci0+aV9pbm8pOwogCWhwZnNfc2V0X2VhKHJlc3VsdCwgZm5vZGUsICJTWU1MSU5LIiwgc3ltbGluaywgc3RybGVuKHN5bWxpbmspKTsKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJYnJlbHNlKGJoKTsKQEAgLTM1MiwxMSArMzQxLDkgQEAKIAogCWhwZnNfd3JpdGVfaW5vZGVfbm9sb2NrKHJlc3VsdCk7CiAJZF9pbnN0YW50aWF0ZShkZW50cnksIHJlc3VsdCk7Ci0JbXV0ZXhfdW5sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7CiAJaHBmc191bmxvY2soZGlyLT5pX3NiKTsKIAlyZXR1cm4gMDsKIGJhaWwyOgotCW11dGV4X3VubG9jaygmaHBmc19pKGRpciktPmlfbXV0ZXgpOwogCWlwdXQocmVzdWx0KTsKIGJhaWwxOgogCWJyZWxzZShiaCk7CkBAIC0zNzQsNyArMzYxLDYgQEAKIAlzdHJ1Y3QgaHBmc19kaXJlbnQgKmRlOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJZG5vZGVfc2Vjbm8gZG5vOwotCWZub2RlX3NlY25vIGZubzsKIAlpbnQgcjsKIAlpbnQgcmVwID0gMDsKIAlpbnQgZXJyOwpAQCAtMzgyLDggKzM2OCw2IEBACiAJaHBmc19sb2NrKGRpci0+aV9zYik7CiAJaHBmc19hZGp1c3RfbGVuZ3RoKG5hbWUsICZsZW4pOwogYWdhaW46Ci0JbXV0ZXhfbG9jaygmaHBmc19pKGlub2RlKS0+aV9wYXJlbnRfbXV0ZXgpOwotCW11dGV4X2xvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKIAllcnIgPSAtRU5PRU5UOwogCWRlID0gbWFwX2RpcmVudChkaXIsIGhwZnNfaShkaXIpLT5pX2RubywgbmFtZSwgbGVuLCAmZG5vLCAmcWJoKTsKIAlpZiAoIWRlKQpAQCAtMzk3LDcgKzM4MSw2IEBACiAJaWYgKGRlLT5kaXJlY3RvcnkpCiAJCWdvdG8gb3V0MTsKIAotCWZubyA9IGRlLT5mbm9kZTsKIAlyID0gaHBmc19yZW1vdmVfZGlyZW50KGRpciwgZG5vLCBkZSwgJnFiaCwgMSk7CiAJc3dpdGNoIChyKSB7CiAJY2FzZSAxOgpAQCAtNDEwLDggKzM5Myw2IEBACiAJCWlmIChyZXArKykKIAkJCWJyZWFrOwogCi0JCW11dGV4X3VubG9jaygmaHBmc19pKGRpciktPmlfbXV0ZXgpOwotCQltdXRleF91bmxvY2soJmhwZnNfaShpbm9kZSktPmlfcGFyZW50X211dGV4KTsKIAkJZGVudHJ5X3VuaGFzaChkZW50cnkpOwogCQlpZiAoIWRfdW5oYXNoZWQoZGVudHJ5KSkgewogCQkJZHB1dChkZW50cnkpOwpAQCAtNDQ1LDggKzQyNiw2IEBACiBvdXQxOgogCWhwZnNfYnJlbHNlNCgmcWJoKTsKIG91dDoKLQltdXRleF91bmxvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKLQltdXRleF91bmxvY2soJmhwZnNfaShpbm9kZSktPmlfcGFyZW50X211dGV4KTsKIAlocGZzX3VubG9jayhkaXItPmlfc2IpOwogCXJldHVybiBlcnI7CiB9CkBAIC00NTksMTUgKzQzOCwxMiBAQAogCXN0cnVjdCBocGZzX2RpcmVudCAqZGU7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlkbm9kZV9zZWNubyBkbm87Ci0JZm5vZGVfc2Vjbm8gZm5vOwogCWludCBuX2l0ZW1zID0gMDsKIAlpbnQgZXJyOwogCWludCByOwogCiAJaHBmc19hZGp1c3RfbGVuZ3RoKG5hbWUsICZsZW4pOwogCWhwZnNfbG9jayhkaXItPmlfc2IpOwotCW11dGV4X2xvY2soJmhwZnNfaShpbm9kZSktPmlfcGFyZW50X211dGV4KTsKLQltdXRleF9sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7CiAJZXJyID0gLUVOT0VOVDsKIAlkZSA9IG1hcF9kaXJlbnQoZGlyLCBocGZzX2koZGlyKS0+aV9kbm8sIG5hbWUsIGxlbiwgJmRubywgJnFiaCk7CiAJaWYgKCFkZSkKQEAgLTQ4Niw3ICs0NjIsNiBAQAogCWlmIChuX2l0ZW1zKQogCQlnb3RvIG91dDE7CiAKLQlmbm8gPSBkZS0+Zm5vZGU7CiAJciA9IGhwZnNfcmVtb3ZlX2RpcmVudChkaXIsIGRubywgZGUsICZxYmgsIDEpOwogCXN3aXRjaCAocikgewogCWNhc2UgMToKQEAgLTUwNSw4ICs0ODAsNiBAQAogb3V0MToKIAlocGZzX2JyZWxzZTQoJnFiaCk7CiBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7Ci0JbXV0ZXhfdW5sb2NrKCZocGZzX2koaW5vZGUpLT5pX3BhcmVudF9tdXRleCk7CiAJaHBmc191bmxvY2soZGlyLT5pX3NiKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNTY4LDEyICs1NDEsNiBAQAogCiAJaHBmc19sb2NrKGktPmlfc2IpOwogCS8qIG9yZGVyIGRvZXNuJ3QgbWF0dGVyLCBkdWUgdG8gVkZTIGV4Y2x1c2lvbiAqLwotCW11dGV4X2xvY2soJmhwZnNfaShpKS0+aV9wYXJlbnRfbXV0ZXgpOwotCWlmIChuZXdfaW5vZGUpCi0JCW11dGV4X2xvY2soJmhwZnNfaShuZXdfaW5vZGUpLT5pX3BhcmVudF9tdXRleCk7Ci0JbXV0ZXhfbG9jaygmaHBmc19pKG9sZF9kaXIpLT5pX211dGV4KTsKLQlpZiAobmV3X2RpciAhPSBvbGRfZGlyKQotCQltdXRleF9sb2NrKCZocGZzX2kobmV3X2RpciktPmlfbXV0ZXgpOwogCQogCS8qIEVybT8gTW92aW5nIG92ZXIgdGhlIGVtcHR5IG5vbi1idXN5IGRpcmVjdG9yeSBpcyBwZXJmZWN0bHkgbGVnYWwgKi8KIAlpZiAobmV3X2lub2RlICYmIFNfSVNESVIobmV3X2lub2RlLT5pX21vZGUpKSB7CkBAIC02MTAsOSArNTc3LDcgQEAKIAogCWlmIChuZXdfZGlyID09IG9sZF9kaXIpIGhwZnNfYnJlbHNlNCgmcWJoKTsKIAotCWhwZnNfbG9ja19jcmVhdGlvbihpLT5pX3NiKTsKLQlpZiAoKHIgPSBocGZzX2FkZF9kaXJlbnQobmV3X2RpciwgbmV3X25hbWUsIG5ld19sZW4sICZkZSwgMSkpKSB7Ci0JCWhwZnNfdW5sb2NrX2NyZWF0aW9uKGktPmlfc2IpOworCWlmICgociA9IGhwZnNfYWRkX2RpcmVudChuZXdfZGlyLCBuZXdfbmFtZSwgbmV3X2xlbiwgJmRlKSkpIHsKIAkJaWYgKHIgPT0gLTEpIGhwZnNfZXJyb3IobmV3X2Rpci0+aV9zYiwgImhwZnNfcmVuYW1lOiBkaXJlbnQgYWxyZWFkeSBleGlzdHMhIik7CiAJCWVyciA9IHIgPT0gMSA/IC1FTk9TUEMgOiAtRUZTRVJST1I7CiAJCWlmIChuZXdfZGlyICE9IG9sZF9kaXIpIGhwZnNfYnJlbHNlNCgmcWJoKTsKQEAgLTYyMSwyMCArNTg2LDE3IEBACiAJCiAJaWYgKG5ld19kaXIgPT0gb2xkX2RpcikKIAkJaWYgKCEoZGVwID0gbWFwX2RpcmVudChvbGRfZGlyLCBocGZzX2kob2xkX2RpciktPmlfZG5vLCBvbGRfbmFtZSwgb2xkX2xlbiwgJmRubywgJnFiaCkpKSB7Ci0JCQlocGZzX3VubG9ja19jcmVhdGlvbihpLT5pX3NiKTsKIAkJCWhwZnNfZXJyb3IoaS0+aV9zYiwgImxvb2t1cCBzdWNjZWVkZWQgYnV0IG1hcCBkaXJlbnQgZmFpbGVkIGF0ICMyIik7CiAJCQllcnIgPSAtRU5PRU5UOwogCQkJZ290byBlbmQxOwogCQl9CiAKIAlpZiAoKHIgPSBocGZzX3JlbW92ZV9kaXJlbnQob2xkX2RpciwgZG5vLCBkZXAsICZxYmgsIDApKSkgewotCQlocGZzX3VubG9ja19jcmVhdGlvbihpLT5pX3NiKTsKIAkJaHBmc19lcnJvcihpLT5pX3NiLCAiaHBmc19yZW5hbWU6IGNvdWxkIG5vdCByZW1vdmUgZGlyZW50Iik7CiAJCWVyciA9IHIgPT0gMiA/IC1FTk9TUEMgOiAtRUZTRVJST1I7CiAJCWdvdG8gZW5kMTsKIAl9Ci0JaHBmc191bmxvY2tfY3JlYXRpb24oaS0+aV9zYik7Ci0JCisKIAllbmQ6CiAJaHBmc19pKGkpLT5pX3BhcmVudF9kaXIgPSBuZXdfZGlyLT5pX2lubzsKIAlpZiAoU19JU0RJUihpLT5pX21vZGUpKSB7CkBAIC02NDIsMjIgKzYwNCwxNCBAQAogCQlkcm9wX25saW5rKG9sZF9kaXIpOwogCX0KIAlpZiAoKGZub2RlID0gaHBmc19tYXBfZm5vZGUoaS0+aV9zYiwgaS0+aV9pbm8sICZiaCkpKSB7Ci0JCWZub2RlLT51cCA9IG5ld19kaXItPmlfaW5vOworCQlmbm9kZS0+dXAgPSBjcHVfdG9fbGUzMihuZXdfZGlyLT5pX2lubyk7CiAJCWZub2RlLT5sZW4gPSBuZXdfbGVuOwogCQltZW1jcHkoZm5vZGUtPm5hbWUsIG5ld19uYW1lLCBuZXdfbGVuPjE1PzE1Om5ld19sZW4pOwogCQlpZiAobmV3X2xlbiA8IDE1KSBtZW1zZXQoJmZub2RlLT5uYW1lW25ld19sZW5dLCAwLCAxNSAtIG5ld19sZW4pOwogCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCWJyZWxzZShiaCk7CiAJfQotCWhwZnNfaShpKS0+aV9jb252ID0gaHBmc19zYihpLT5pX3NiKS0+c2JfY29udjsKLQlocGZzX2RlY2lkZV9jb252KGksIG5ld19uYW1lLCBuZXdfbGVuKTsKIGVuZDE6Ci0JaWYgKG9sZF9kaXIgIT0gbmV3X2RpcikKLQkJbXV0ZXhfdW5sb2NrKCZocGZzX2kobmV3X2RpciktPmlfbXV0ZXgpOwotCW11dGV4X3VubG9jaygmaHBmc19pKG9sZF9kaXIpLT5pX211dGV4KTsKLQltdXRleF91bmxvY2soJmhwZnNfaShpKS0+aV9wYXJlbnRfbXV0ZXgpOwotCWlmIChuZXdfaW5vZGUpCi0JCW11dGV4X3VubG9jaygmaHBmc19pKG5ld19pbm9kZSktPmlfcGFyZW50X211dGV4KTsKIAlocGZzX3VubG9jayhpLT5pX3NiKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9zdXBlci5jIGIvZnMvaHBmcy9zdXBlci5jCmluZGV4IGM4OWI0MDguLjk4NTgwYTMgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvc3VwZXIuYworKysgYi9mcy9ocGZzL3N1cGVyLmMKQEAgLTE4LDE1ICsxOCwxNiBAQAogCiAvKiBNYXJrIHRoZSBmaWxlc3lzdGVtIGRpcnR5LCBzbyB0aGF0IGNoa2RzayBjaGVja3MgaXQgd2hlbiBvcy8yIGJvb3RlZCAqLwogCi1zdGF0aWMgdm9pZCBtYXJrX2RpcnR5KHN0cnVjdCBzdXBlcl9ibG9jayAqcykKK3N0YXRpYyB2b2lkIG1hcmtfZGlydHkoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBpbnQgcmVtb3VudCkKIHsKLQlpZiAoaHBmc19zYihzKS0+c2JfY2hrZHNrICYmICEocy0+c19mbGFncyAmIE1TX1JET05MWSkpIHsKKwlpZiAoaHBmc19zYihzKS0+c2JfY2hrZHNrICYmIChyZW1vdW50IHx8ICEocy0+c19mbGFncyAmIE1TX1JET05MWSkpKSB7CiAJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJCXN0cnVjdCBocGZzX3NwYXJlX2Jsb2NrICpzYjsKIAkJaWYgKChzYiA9IGhwZnNfbWFwX3NlY3RvcihzLCAxNywgJmJoLCAwKSkpIHsKIAkJCXNiLT5kaXJ0eSA9IDE7CiAJCQlzYi0+b2xkX3dyb3RlID0gMDsKIAkJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKKwkJCXN5bmNfZGlydHlfYnVmZmVyKGJoKTsKIAkJCWJyZWxzZShiaCk7CiAJCX0KIAl9CkBAIC00MCwxMCArNDEsMTIgQEAKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCXN0cnVjdCBocGZzX3NwYXJlX2Jsb2NrICpzYjsKIAlpZiAocy0+c19mbGFncyAmIE1TX1JET05MWSkgcmV0dXJuOworCXN5bmNfYmxvY2tkZXYocy0+c19iZGV2KTsKIAlpZiAoKHNiID0gaHBmc19tYXBfc2VjdG9yKHMsIDE3LCAmYmgsIDApKSkgewogCQlzYi0+ZGlydHkgPSBocGZzX3NiKHMpLT5zYl9jaGtkc2sgPiAxIC0gaHBmc19zYihzKS0+c2Jfd2FzX2Vycm9yOwogCQlzYi0+b2xkX3dyb3RlID0gaHBmc19zYihzKS0+c2JfY2hrZHNrID49IDIgJiYgIWhwZnNfc2IocyktPnNiX3dhc19lcnJvcjsKIAkJbWFya19idWZmZXJfZGlydHkoYmgpOworCQlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7CiAJCWJyZWxzZShiaCk7CiAJfQogfQpAQCAtNjMsMTMgKzY2LDEzIEBACiAJaWYgKCFocGZzX3NiKHMpLT5zYl93YXNfZXJyb3IpIHsKIAkJaWYgKGhwZnNfc2IocyktPnNiX2VyciA9PSAyKSB7CiAJCQlwcmludGsoIjsgY3Jhc2hpbmcgdGhlIHN5c3RlbSBiZWNhdXNlIHlvdSB3YW50ZWQgaXRcbiIpOwotCQkJbWFya19kaXJ0eShzKTsKKwkJCW1hcmtfZGlydHkocywgMCk7CiAJCQlwYW5pYygiSFBGUyBwYW5pYyIpOwogCQl9IGVsc2UgaWYgKGhwZnNfc2IocyktPnNiX2VyciA9PSAxKSB7CiAJCQlpZiAocy0+c19mbGFncyAmIE1TX1JET05MWSkgcHJpbnRrKCI7IGFscmVhZHkgbW91bnRlZCByZWFkLW9ubHlcbiIpOwogCQkJZWxzZSB7CiAJCQkJcHJpbnRrKCI7IHJlbW91bnRpbmcgcmVhZC1vbmx5XG4iKTsKLQkJCQltYXJrX2RpcnR5KHMpOworCQkJCW1hcmtfZGlydHkocywgMCk7CiAJCQkJcy0+c19mbGFncyB8PSBNU19SRE9OTFk7CiAJCQl9CiAJCX0gZWxzZSBpZiAocy0+c19mbGFncyAmIE1TX1JET05MWSkgcHJpbnRrKCI7IGdvaW5nIG9uIC0gYnV0IGFueXRoaW5nIHdvbid0IGJlIGRlc3Ryb3llZCBiZWNhdXNlIGl0J3MgcmVhZC1vbmx5XG4iKTsKQEAgLTEwMiw5ICsxMDUsMTIgQEAKIHsKIAlzdHJ1Y3QgaHBmc19zYl9pbmZvICpzYmkgPSBocGZzX3NiKHMpOwogCisJaHBmc19sb2NrKHMpOworCXVubWFya19kaXJ0eShzKTsKKwlocGZzX3VubG9jayhzKTsKKwogCWtmcmVlKHNiaS0+c2JfY3BfdGFibGUpOwogCWtmcmVlKHNiaS0+c2JfYm1wX2Rpcik7Ci0JdW5tYXJrX2RpcnR5KHMpOwogCXMtPnNfZnNfaW5mbyA9IE5VTEw7CiAJa2ZyZWUoc2JpKTsKIH0KQEAgLTEyOSw3ICsxMzUsNyBAQAogCW5fYmFuZHMgPSAoaHBmc19zYihzKS0+c2JfZnNfc2l6ZSArIDB4M2ZmZikgPj4gMTQ7CiAJY291bnQgPSAwOwogCWZvciAobiA9IDA7IG4gPCBuX2JhbmRzOyBuKyspCi0JCWNvdW50ICs9IGhwZnNfY291bnRfb25lX2JpdG1hcChzLCBocGZzX3NiKHMpLT5zYl9ibXBfZGlyW25dKTsKKwkJY291bnQgKz0gaHBmc19jb3VudF9vbmVfYml0bWFwKHMsIGxlMzJfdG9fY3B1KGhwZnNfc2IocyktPnNiX2JtcF9kaXJbbl0pKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTE4OCw4ICsxOTQsNiBAQAogewogCXN0cnVjdCBocGZzX2lub2RlX2luZm8gKmVpID0gKHN0cnVjdCBocGZzX2lub2RlX2luZm8gKikgZm9vOwogCi0JbXV0ZXhfaW5pdCgmZWktPmlfbXV0ZXgpOwotCW11dGV4X2luaXQoJmVpLT5pX3BhcmVudF9tdXRleCk7CiAJaW5vZGVfaW5pdF9vbmNlKCZlaS0+dmZzX2lub2RlKTsKIH0KIApAQCAtMjE4LDcgKzIyMiw2IEBACiAKIGVudW0gewogCU9wdF9oZWxwLCBPcHRfdWlkLCBPcHRfZ2lkLCBPcHRfdW1hc2ssIE9wdF9jYXNlX2xvd2VyLCBPcHRfY2FzZV9hc2lzLAotCU9wdF9jb252X2JpbmFyeSwgT3B0X2NvbnZfdGV4dCwgT3B0X2NvbnZfYXV0bywKIAlPcHRfY2hlY2tfbm9uZSwgT3B0X2NoZWNrX25vcm1hbCwgT3B0X2NoZWNrX3N0cmljdCwKIAlPcHRfZXJyX2NvbnQsIE9wdF9lcnJfcm8sIE9wdF9lcnJfcGFuaWMsCiAJT3B0X2Vhc19ubywgT3B0X2Vhc19ybywgT3B0X2Vhc19ydywKQEAgLTIzMyw5ICsyMzYsNiBAQAogCXtPcHRfdW1hc2ssICJ1bWFzaz0lbyJ9LAogCXtPcHRfY2FzZV9sb3dlciwgImNhc2U9bG93ZXIifSwKIAl7T3B0X2Nhc2VfYXNpcywgImNhc2U9YXNpcyJ9LAotCXtPcHRfY29udl9iaW5hcnksICJjb252PWJpbmFyeSJ9LAotCXtPcHRfY29udl90ZXh0LCAiY29udj10ZXh0In0sCi0Je09wdF9jb252X2F1dG8sICJjb252PWF1dG8ifSwKIAl7T3B0X2NoZWNrX25vbmUsICJjaGVjaz1ub25lIn0sCiAJe09wdF9jaGVja19ub3JtYWwsICJjaGVjaz1ub3JtYWwifSwKIAl7T3B0X2NoZWNrX3N0cmljdCwgImNoZWNrPXN0cmljdCJ9LApAQCAtMjUzLDcgKzI1Myw3IEBACiB9OwogCiBzdGF0aWMgaW50IHBhcnNlX29wdHMoY2hhciAqb3B0cywgdWlkX3QgKnVpZCwgZ2lkX3QgKmdpZCwgdW1vZGVfdCAqdW1hc2ssCi0JCSAgICAgIGludCAqbG93ZXJjYXNlLCBpbnQgKmNvbnYsIGludCAqZWFzLCBpbnQgKmNoaywgaW50ICplcnJzLAorCQkgICAgICBpbnQgKmxvd2VyY2FzZSwgaW50ICplYXMsIGludCAqY2hrLCBpbnQgKmVycnMsCiAJCSAgICAgIGludCAqY2hrZHNrLCBpbnQgKnRpbWVzaGlmdCkKIHsKIAljaGFyICpwOwpAQCAtMjk1LDE1ICsyOTUsNiBAQAogCQljYXNlIE9wdF9jYXNlX2FzaXM6CiAJCQkqbG93ZXJjYXNlID0gMDsKIAkJCWJyZWFrOwotCQljYXNlIE9wdF9jb252X2JpbmFyeToKLQkJCSpjb252ID0gQ09OVl9CSU5BUlk7Ci0JCQlicmVhazsKLQkJY2FzZSBPcHRfY29udl90ZXh0OgotCQkJKmNvbnYgPSBDT05WX1RFWFQ7Ci0JCQlicmVhazsKLQkJY2FzZSBPcHRfY29udl9hdXRvOgotCQkJKmNvbnYgPSBDT05WX0FVVE87Ci0JCQlicmVhazsKIAkJY2FzZSBPcHRfY2hlY2tfbm9uZToKIAkJCSpjaGsgPSAwOwogCQkJYnJlYWs7CkBAIC0zNzAsOSArMzYxLDYgQEAKICAgICAgIHVtYXNrPXh4eCAgICAgICAgIHNldCBtb2RlIG9mIGZpbGVzIHRoYXQgZG9uJ3QgaGF2ZSBtb2RlIHNwZWNpZmllZCBpbiBlYXNcblwKICAgICAgIGNhc2U9bG93ZXIgICAgICAgIGxvd2VyY2FzZSBhbGwgZmlsZXNcblwKICAgICAgIGNhc2U9YXNpcyAgICAgICAgIGRvIG5vdCBsb3dlcmNhc2UgZmlsZXMgKGRlZmF1bHQpXG5cCi0gICAgICBjb252PWJpbmFyeSAgICAgICBkbyBub3QgY29udmVydCBDUi9MRiAtPiBMRiAoZGVmYXVsdClcblwKLSAgICAgIGNvbnY9YXV0byAgICAgICAgIGNvbnZlcnQgb25seSBmaWxlcyB3aXRoIGtub3duIHRleHQgZXh0ZW5zaW9uc1xuXAotICAgICAgY29udj10ZXh0ICAgICAgICAgY29udmVydCBhbGwgZmlsZXNcblwKICAgICAgIGNoZWNrPW5vbmUgICAgICAgIG5vIGZzIGNoZWNrcyAtIGtlcm5lbCBtYXkgY3Jhc2ggb24gY29ycnVwdGVkIGZpbGVzeXN0ZW1cblwKICAgICAgIGNoZWNrPW5vcm1hbCAgICAgIGRvIHNvbWUgY2hlY2tzIC0gaXQgc2hvdWxkIG5vdCBjcmFzaCAoZGVmYXVsdClcblwKICAgICAgIGNoZWNrPXN0cmljdCAgICAgIGRvIGV4dHJhIHRpbWUtY29uc3VtaW5nIGNoZWNrcywgdXNlZCBmb3IgZGVidWdnaW5nXG5cCkBAIC0zOTQsNyArMzgyLDcgQEAKIAl1aWRfdCB1aWQ7CiAJZ2lkX3QgZ2lkOwogCXVtb2RlX3QgdW1hc2s7Ci0JaW50IGxvd2VyY2FzZSwgY29udiwgZWFzLCBjaGssIGVycnMsIGNoa2RzaywgdGltZXNoaWZ0OworCWludCBsb3dlcmNhc2UsIGVhcywgY2hrLCBlcnJzLCBjaGtkc2ssIHRpbWVzaGlmdDsKIAlpbnQgbzsKIAlzdHJ1Y3QgaHBmc19zYl9pbmZvICpzYmkgPSBocGZzX3NiKHMpOwogCWNoYXIgKm5ld19vcHRzID0ga3N0cmR1cChkYXRhLCBHRlBfS0VSTkVMKTsKQEAgLTQwNSwxMSArMzkzLDExIEBACiAJbG9ja19zdXBlcihzKTsKIAl1aWQgPSBzYmktPnNiX3VpZDsgZ2lkID0gc2JpLT5zYl9naWQ7CiAJdW1hc2sgPSAwNzc3ICYgfnNiaS0+c2JfbW9kZTsKLQlsb3dlcmNhc2UgPSBzYmktPnNiX2xvd2VyY2FzZTsgY29udiA9IHNiaS0+c2JfY29udjsKKwlsb3dlcmNhc2UgPSBzYmktPnNiX2xvd2VyY2FzZTsKIAllYXMgPSBzYmktPnNiX2VhczsgY2hrID0gc2JpLT5zYl9jaGs7IGNoa2RzayA9IHNiaS0+c2JfY2hrZHNrOwogCWVycnMgPSBzYmktPnNiX2VycjsgdGltZXNoaWZ0ID0gc2JpLT5zYl90aW1lc2hpZnQ7CiAKLQlpZiAoIShvID0gcGFyc2Vfb3B0cyhkYXRhLCAmdWlkLCAmZ2lkLCAmdW1hc2ssICZsb3dlcmNhc2UsICZjb252LAorCWlmICghKG8gPSBwYXJzZV9vcHRzKGRhdGEsICZ1aWQsICZnaWQsICZ1bWFzaywgJmxvd2VyY2FzZSwKIAkgICAgJmVhcywgJmNoaywgJmVycnMsICZjaGtkc2ssICZ0aW1lc2hpZnQpKSkgewogCQlwcmludGsoIkhQRlM6IGJhZCBtb3VudCBvcHRpb25zLlxuIik7CiAJCWdvdG8gb3V0X2VycjsKQEAgLTQyNywxMSArNDE1LDExIEBACiAKIAlzYmktPnNiX3VpZCA9IHVpZDsgc2JpLT5zYl9naWQgPSBnaWQ7CiAJc2JpLT5zYl9tb2RlID0gMDc3NyAmIH51bWFzazsKLQlzYmktPnNiX2xvd2VyY2FzZSA9IGxvd2VyY2FzZTsgc2JpLT5zYl9jb252ID0gY29udjsKKwlzYmktPnNiX2xvd2VyY2FzZSA9IGxvd2VyY2FzZTsKIAlzYmktPnNiX2VhcyA9IGVhczsgc2JpLT5zYl9jaGsgPSBjaGs7IHNiaS0+c2JfY2hrZHNrID0gY2hrZHNrOwogCXNiaS0+c2JfZXJyID0gZXJyczsgc2JpLT5zYl90aW1lc2hpZnQgPSB0aW1lc2hpZnQ7CiAKLQlpZiAoISgqZmxhZ3MgJiBNU19SRE9OTFkpKSBtYXJrX2RpcnR5KHMpOworCWlmICghKCpmbGFncyAmIE1TX1JET05MWSkpIG1hcmtfZGlydHkocywgMSk7CiAKIAlyZXBsYWNlX21vdW50X29wdGlvbnMocywgbmV3X29wdHMpOwogCkBAIC00NzEsNyArNDU5LDcgQEAKIAl1aWRfdCB1aWQ7CiAJZ2lkX3QgZ2lkOwogCXVtb2RlX3QgdW1hc2s7Ci0JaW50IGxvd2VyY2FzZSwgY29udiwgZWFzLCBjaGssIGVycnMsIGNoa2RzaywgdGltZXNoaWZ0OworCWludCBsb3dlcmNhc2UsIGVhcywgY2hrLCBlcnJzLCBjaGtkc2ssIHRpbWVzaGlmdDsKIAogCWRub2RlX3NlY25vIHJvb3RfZG5vOwogCXN0cnVjdCBocGZzX2RpcmVudCAqZGUgPSBOVUxMOwpAQCAtNDc5LDExICs0NjcsNiBAQAogCiAJaW50IG87CiAKLQlpZiAobnVtX3Bvc3NpYmxlX2NwdXMoKSA+IDEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJIUEZTIGlzIG5vdCBTTVAgc2FmZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCXNhdmVfbW91bnRfb3B0aW9ucyhzLCBvcHRpb25zKTsKIAogCXNiaSA9IGt6YWxsb2Moc2l6ZW9mKCpzYmkpLCBHRlBfS0VSTkVMKTsKQEAgLTQ5NSwyMCArNDc4LDIwIEBACiAJc2JpLT5zYl9ibXBfZGlyID0gTlVMTDsKIAlzYmktPnNiX2NwX3RhYmxlID0gTlVMTDsKIAotCW11dGV4X2luaXQoJnNiaS0+aHBmc19jcmVhdGlvbl9kZSk7CisJbXV0ZXhfaW5pdCgmc2JpLT5ocGZzX211dGV4KTsKKwlocGZzX2xvY2socyk7CiAKIAl1aWQgPSBjdXJyZW50X3VpZCgpOwogCWdpZCA9IGN1cnJlbnRfZ2lkKCk7CiAJdW1hc2sgPSBjdXJyZW50X3VtYXNrKCk7CiAJbG93ZXJjYXNlID0gMDsKLQljb252ID0gQ09OVl9CSU5BUlk7CiAJZWFzID0gMjsKIAljaGsgPSAxOwogCWVycnMgPSAxOwogCWNoa2RzayA9IDE7CiAJdGltZXNoaWZ0ID0gMDsKIAotCWlmICghKG8gPSBwYXJzZV9vcHRzKG9wdGlvbnMsICZ1aWQsICZnaWQsICZ1bWFzaywgJmxvd2VyY2FzZSwgJmNvbnYsCisJaWYgKCEobyA9IHBhcnNlX29wdHMob3B0aW9ucywgJnVpZCwgJmdpZCwgJnVtYXNrLCAmbG93ZXJjYXNlLAogCSAgICAmZWFzLCAmY2hrLCAmZXJycywgJmNoa2RzaywgJnRpbWVzaGlmdCkpKSB7CiAJCXByaW50aygiSFBGUzogYmFkIG1vdW50IG9wdGlvbnMuXG4iKTsKIAkJZ290byBiYWlsMDsKQEAgLTUyNiw5ICs1MDksOSBAQAogCWlmICghKHNwYXJlYmxvY2sgPSBocGZzX21hcF9zZWN0b3IocywgMTcsICZiaDIsIDApKSkgZ290byBiYWlsMzsKIAogCS8qIENoZWNrIG1hZ2ljcyAqLwotCWlmICgvKmJvb3RibG9jay0+bWFnaWMgIT0gQkJfTUFHSUMKLQkgICAgfHwqLyBzdXBlcmJsb2NrLT5tYWdpYyAhPSBTQl9NQUdJQwotCSAgICB8fCBzcGFyZWJsb2NrLT5tYWdpYyAhPSBTUF9NQUdJQykgeworCWlmICgvKmxlMTZfdG9fY3B1KGJvb3RibG9jay0+bWFnaWMpICE9IEJCX01BR0lDCisJICAgIHx8Ki8gbGUzMl90b19jcHUoc3VwZXJibG9jay0+bWFnaWMpICE9IFNCX01BR0lDCisJICAgIHx8IGxlMzJfdG9fY3B1KHNwYXJlYmxvY2stPm1hZ2ljKSAhPSBTUF9NQUdJQykgewogCQlpZiAoIXNpbGVudCkgcHJpbnRrKCJIUEZTOiBCYWQgbWFnaWMgLi4uIHByb2JhYmx5IG5vdCBIUEZTXG4iKTsKIAkJZ290byBiYWlsNDsKIAl9CkBAIC01NDksMTkgKzUzMiwxOCBAQAogCXMtPnNfb3AgPSAmaHBmc19zb3BzOwogCXMtPnNfZF9vcCA9ICZocGZzX2RlbnRyeV9vcGVyYXRpb25zOwogCi0Jc2JpLT5zYl9yb290ID0gc3VwZXJibG9jay0+cm9vdDsKLQlzYmktPnNiX2ZzX3NpemUgPSBzdXBlcmJsb2NrLT5uX3NlY3RvcnM7Ci0Jc2JpLT5zYl9iaXRtYXBzID0gc3VwZXJibG9jay0+Yml0bWFwczsKLQlzYmktPnNiX2RpcmJhbmRfc3RhcnQgPSBzdXBlcmJsb2NrLT5kaXJfYmFuZF9zdGFydDsKLQlzYmktPnNiX2RpcmJhbmRfc2l6ZSA9IHN1cGVyYmxvY2stPm5fZGlyX2JhbmQ7Ci0Jc2JpLT5zYl9kbWFwID0gc3VwZXJibG9jay0+ZGlyX2JhbmRfYml0bWFwOworCXNiaS0+c2Jfcm9vdCA9IGxlMzJfdG9fY3B1KHN1cGVyYmxvY2stPnJvb3QpOworCXNiaS0+c2JfZnNfc2l6ZSA9IGxlMzJfdG9fY3B1KHN1cGVyYmxvY2stPm5fc2VjdG9ycyk7CisJc2JpLT5zYl9iaXRtYXBzID0gbGUzMl90b19jcHUoc3VwZXJibG9jay0+Yml0bWFwcyk7CisJc2JpLT5zYl9kaXJiYW5kX3N0YXJ0ID0gbGUzMl90b19jcHUoc3VwZXJibG9jay0+ZGlyX2JhbmRfc3RhcnQpOworCXNiaS0+c2JfZGlyYmFuZF9zaXplID0gbGUzMl90b19jcHUoc3VwZXJibG9jay0+bl9kaXJfYmFuZCk7CisJc2JpLT5zYl9kbWFwID0gbGUzMl90b19jcHUoc3VwZXJibG9jay0+ZGlyX2JhbmRfYml0bWFwKTsKIAlzYmktPnNiX3VpZCA9IHVpZDsKIAlzYmktPnNiX2dpZCA9IGdpZDsKIAlzYmktPnNiX21vZGUgPSAwNzc3ICYgfnVtYXNrOwogCXNiaS0+c2Jfbl9mcmVlID0gLTE7CiAJc2JpLT5zYl9uX2ZyZWVfZG5vZGVzID0gLTE7CiAJc2JpLT5zYl9sb3dlcmNhc2UgPSBsb3dlcmNhc2U7Ci0Jc2JpLT5zYl9jb252ID0gY29udjsKIAlzYmktPnNiX2VhcyA9IGVhczsKIAlzYmktPnNiX2NoayA9IGNoazsKIAlzYmktPnNiX2Noa2RzayA9IGNoa2RzazsKQEAgLTU3Myw3ICs1NTUsNyBAQAogCXNiaS0+c2JfbWF4X2Z3ZF9hbGxvYyA9IDB4ZmZmZmZmOwogCQogCS8qIExvYWQgYml0bWFwIGRpcmVjdG9yeSAqLwotCWlmICghKHNiaS0+c2JfYm1wX2RpciA9IGhwZnNfbG9hZF9iaXRtYXBfZGlyZWN0b3J5KHMsIHN1cGVyYmxvY2stPmJpdG1hcHMpKSkKKwlpZiAoIShzYmktPnNiX2JtcF9kaXIgPSBocGZzX2xvYWRfYml0bWFwX2RpcmVjdG9yeShzLCBsZTMyX3RvX2NwdShzdXBlcmJsb2NrLT5iaXRtYXBzKSkpKQogCQlnb3RvIGJhaWw0OwogCQogCS8qIENoZWNrIGZvciBnZW5lcmFsIGZzIGVycm9ycyovCkBAIC01OTEsMjAgKzU3MywyMCBAQAogCQltYXJrX2J1ZmZlcl9kaXJ0eShiaDIpOwogCX0KIAotCWlmIChzcGFyZWJsb2NrLT5ob3RmaXhlc191c2VkIHx8IHNwYXJlYmxvY2stPm5fc3BhcmVzX3VzZWQpIHsKKwlpZiAobGUzMl90b19jcHUoc3BhcmVibG9jay0+aG90Zml4ZXNfdXNlZCkgfHwgbGUzMl90b19jcHUoc3BhcmVibG9jay0+bl9zcGFyZXNfdXNlZCkpIHsKIAkJaWYgKGVycnMgPj0gMikgewogCQkJcHJpbnRrKCJIUEZTOiBIb3RmaXhlcyBub3Qgc3VwcG9ydGVkIGhlcmUsIHRyeSBjaGtkc2tcbiIpOwotCQkJbWFya19kaXJ0eShzKTsKKwkJCW1hcmtfZGlydHkocywgMCk7CiAJCQlnb3RvIGJhaWw0OwogCQl9CiAJCWhwZnNfZXJyb3IocywgImhvdGZpeGVzIG5vdCBzdXBwb3J0ZWQgaGVyZSwgdHJ5IGNoa2RzayIpOwogCQlpZiAoZXJycyA9PSAwKSBwcmludGsoIkhQRlM6IFByb2NlZWRpbmcsIGJ1dCB5b3VyIGZpbGVzeXN0ZW0gd2lsbCBiZSBwcm9iYWJseSBjb3JydXB0ZWQgYnkgdGhpcyBkcml2ZXIuLi5cbiIpOwogCQllbHNlIHByaW50aygiSFBGUzogVGhpcyBkcml2ZXIgbWF5IHJlYWQgYmFkIGZpbGVzIG9yIGNyYXNoIHdoZW4gb3BlcmF0aW5nIG9uIGRpc2sgd2l0aCBob3RmaXhlcy5cbiIpOwogCX0KLQlpZiAoc3BhcmVibG9jay0+bl9kbm9kZV9zcGFyZXMgIT0gc3BhcmVibG9jay0+bl9kbm9kZV9zcGFyZXNfZnJlZSkgeworCWlmIChsZTMyX3RvX2NwdShzcGFyZWJsb2NrLT5uX2Rub2RlX3NwYXJlcykgIT0gbGUzMl90b19jcHUoc3BhcmVibG9jay0+bl9kbm9kZV9zcGFyZXNfZnJlZSkpIHsKIAkJaWYgKGVycnMgPj0gMikgewogCQkJcHJpbnRrKCJIUEZTOiBTcGFyZSBkbm9kZXMgdXNlZCwgdHJ5IGNoa2Rza1xuIik7Ci0JCQltYXJrX2RpcnR5KHMpOworCQkJbWFya19kaXJ0eShzLCAwKTsKIAkJCWdvdG8gYmFpbDQ7CiAJCX0KIAkJaHBmc19lcnJvcihzLCAid2FybmluZzogc3BhcmUgZG5vZGVzIHVzZWQsIHRyeSBjaGtkc2siKTsKQEAgLTYxMiwyNiArNTk0LDI2IEBACiAJfQogCWlmIChjaGspIHsKIAkJdW5zaWduZWQgYTsKLQkJaWYgKHN1cGVyYmxvY2stPmRpcl9iYW5kX2VuZCAtIHN1cGVyYmxvY2stPmRpcl9iYW5kX3N0YXJ0ICsgMSAhPSBzdXBlcmJsb2NrLT5uX2Rpcl9iYW5kIHx8Ci0JCSAgICBzdXBlcmJsb2NrLT5kaXJfYmFuZF9lbmQgPCBzdXBlcmJsb2NrLT5kaXJfYmFuZF9zdGFydCB8fCBzdXBlcmJsb2NrLT5uX2Rpcl9iYW5kID4gMHg0MDAwKSB7CisJCWlmIChsZTMyX3RvX2NwdShzdXBlcmJsb2NrLT5kaXJfYmFuZF9lbmQpIC0gbGUzMl90b19jcHUoc3VwZXJibG9jay0+ZGlyX2JhbmRfc3RhcnQpICsgMSAhPSBsZTMyX3RvX2NwdShzdXBlcmJsb2NrLT5uX2Rpcl9iYW5kKSB8fAorCQkgICAgbGUzMl90b19jcHUoc3VwZXJibG9jay0+ZGlyX2JhbmRfZW5kKSA8IGxlMzJfdG9fY3B1KHN1cGVyYmxvY2stPmRpcl9iYW5kX3N0YXJ0KSB8fCBsZTMyX3RvX2NwdShzdXBlcmJsb2NrLT5uX2Rpcl9iYW5kKSA+IDB4NDAwMCkgewogCQkJaHBmc19lcnJvcihzLCAiZGlyIGJhbmQgc2l6ZSBtaXNtYXRjaDogZGlyX2JhbmRfc3RhcnQ9PSUwOHgsIGRpcl9iYW5kX2VuZD09JTA4eCwgbl9kaXJfYmFuZD09JTA4eCIsCi0JCQkJc3VwZXJibG9jay0+ZGlyX2JhbmRfc3RhcnQsIHN1cGVyYmxvY2stPmRpcl9iYW5kX2VuZCwgc3VwZXJibG9jay0+bl9kaXJfYmFuZCk7CisJCQkJbGUzMl90b19jcHUoc3VwZXJibG9jay0+ZGlyX2JhbmRfc3RhcnQpLCBsZTMyX3RvX2NwdShzdXBlcmJsb2NrLT5kaXJfYmFuZF9lbmQpLCBsZTMyX3RvX2NwdShzdXBlcmJsb2NrLT5uX2Rpcl9iYW5kKSk7CiAJCQlnb3RvIGJhaWw0OwogCQl9CiAJCWEgPSBzYmktPnNiX2RpcmJhbmRfc2l6ZTsKIAkJc2JpLT5zYl9kaXJiYW5kX3NpemUgPSAwOwotCQlpZiAoaHBmc19jaGtfc2VjdG9ycyhzLCBzdXBlcmJsb2NrLT5kaXJfYmFuZF9zdGFydCwgc3VwZXJibG9jay0+bl9kaXJfYmFuZCwgImRpcl9iYW5kIikgfHwKLQkJICAgIGhwZnNfY2hrX3NlY3RvcnMocywgc3VwZXJibG9jay0+ZGlyX2JhbmRfYml0bWFwLCA0LCAiZGlyX2JhbmRfYml0bWFwIikgfHwKLQkJICAgIGhwZnNfY2hrX3NlY3RvcnMocywgc3VwZXJibG9jay0+Yml0bWFwcywgNCwgImJpdG1hcHMiKSkgewotCQkJbWFya19kaXJ0eShzKTsKKwkJaWYgKGhwZnNfY2hrX3NlY3RvcnMocywgbGUzMl90b19jcHUoc3VwZXJibG9jay0+ZGlyX2JhbmRfc3RhcnQpLCBsZTMyX3RvX2NwdShzdXBlcmJsb2NrLT5uX2Rpcl9iYW5kKSwgImRpcl9iYW5kIikgfHwKKwkJICAgIGhwZnNfY2hrX3NlY3RvcnMocywgbGUzMl90b19jcHUoc3VwZXJibG9jay0+ZGlyX2JhbmRfYml0bWFwKSwgNCwgImRpcl9iYW5kX2JpdG1hcCIpIHx8CisJCSAgICBocGZzX2Noa19zZWN0b3JzKHMsIGxlMzJfdG9fY3B1KHN1cGVyYmxvY2stPmJpdG1hcHMpLCA0LCAiYml0bWFwcyIpKSB7CisJCQltYXJrX2RpcnR5KHMsIDApOwogCQkJZ290byBiYWlsNDsKIAkJfQogCQlzYmktPnNiX2RpcmJhbmRfc2l6ZSA9IGE7CiAJfSBlbHNlIHByaW50aygiSFBGUzogWW91IHJlYWxseSBkb24ndCB3YW50IGFueSBjaGVja3M/IFlvdSBhcmUgY3JhenkuLi5cbiIpOwogCiAJLyogTG9hZCBjb2RlIHBhZ2UgdGFibGUgKi8KLQlpZiAoc3BhcmVibG9jay0+bl9jb2RlX3BhZ2VzKQotCQlpZiAoIShzYmktPnNiX2NwX3RhYmxlID0gaHBmc19sb2FkX2NvZGVfcGFnZShzLCBzcGFyZWJsb2NrLT5jb2RlX3BhZ2VfZGlyKSkpCisJaWYgKGxlMzJfdG9fY3B1KHNwYXJlYmxvY2stPm5fY29kZV9wYWdlcykpCisJCWlmICghKHNiaS0+c2JfY3BfdGFibGUgPSBocGZzX2xvYWRfY29kZV9wYWdlKHMsIGxlMzJfdG9fY3B1KHNwYXJlYmxvY2stPmNvZGVfcGFnZV9kaXIpKSkpCiAJCQlwcmludGsoIkhQRlM6IFdhcm5pbmc6IGNvZGUgcGFnZSBzdXBwb3J0IGlzIGRpc2FibGVkXG4iKTsKIAogCWJyZWxzZShiaDIpOwpAQCAtNjYwLDEzICs2NDIsMTMgQEAKIAlpZiAoIWRlKQogCQlocGZzX2Vycm9yKHMsICJ1bmFibGUgdG8gZmluZCByb290IGRpciIpOwogCWVsc2UgewotCQlyb290LT5pX2F0aW1lLnR2X3NlYyA9IGxvY2FsX3RvX2dtdChzLCBkZS0+cmVhZF9kYXRlKTsKKwkJcm9vdC0+aV9hdGltZS50dl9zZWMgPSBsb2NhbF90b19nbXQocywgbGUzMl90b19jcHUoZGUtPnJlYWRfZGF0ZSkpOwogCQlyb290LT5pX2F0aW1lLnR2X25zZWMgPSAwOwotCQlyb290LT5pX210aW1lLnR2X3NlYyA9IGxvY2FsX3RvX2dtdChzLCBkZS0+d3JpdGVfZGF0ZSk7CisJCXJvb3QtPmlfbXRpbWUudHZfc2VjID0gbG9jYWxfdG9fZ210KHMsIGxlMzJfdG9fY3B1KGRlLT53cml0ZV9kYXRlKSk7CiAJCXJvb3QtPmlfbXRpbWUudHZfbnNlYyA9IDA7Ci0JCXJvb3QtPmlfY3RpbWUudHZfc2VjID0gbG9jYWxfdG9fZ210KHMsIGRlLT5jcmVhdGlvbl9kYXRlKTsKKwkJcm9vdC0+aV9jdGltZS50dl9zZWMgPSBsb2NhbF90b19nbXQocywgbGUzMl90b19jcHUoZGUtPmNyZWF0aW9uX2RhdGUpKTsKIAkJcm9vdC0+aV9jdGltZS50dl9uc2VjID0gMDsKLQkJaHBmc19pKHJvb3QpLT5pX2VhX3NpemUgPSBkZS0+ZWFfc2l6ZTsKKwkJaHBmc19pKHJvb3QpLT5pX2VhX3NpemUgPSBsZTE2X3RvX2NwdShkZS0+ZWFfc2l6ZSk7CiAJCWhwZnNfaShyb290KS0+aV9wYXJlbnRfZGlyID0gcm9vdC0+aV9pbm87CiAJCWlmIChyb290LT5pX3NpemUgPT0gLTEpCiAJCQlyb290LT5pX3NpemUgPSAyMDQ4OwpAQCAtNjc0LDYgKzY1Niw3IEBACiAJCQlyb290LT5pX2Jsb2NrcyA9IDU7CiAJCWhwZnNfYnJlbHNlNCgmcWJoKTsKIAl9CisJaHBmc191bmxvY2socyk7CiAJcmV0dXJuIDA7CiAKIGJhaWw0OglicmVsc2UoYmgyKTsKQEAgLTY4MSw2ICs2NjQsNyBAQAogYmFpbDI6CWJyZWxzZShiaDApOwogYmFpbDE6CiBiYWlsMDoKKwlocGZzX3VubG9jayhzKTsKIAlrZnJlZShzYmktPnNiX2JtcF9kaXIpOwogCWtmcmVlKHNiaS0+c2JfY3BfdGFibGUpOwogCXMtPnNfZnNfaW5mbyA9IE5VTEw7CmRpZmYgLS1naXQgYS9mcy9pbm9kZS5jIGIvZnMvaW5vZGUuYwppbmRleCAzM2M5NjNkLi4wNWY0ZmE1IDEwMDY0NAotLS0gYS9mcy9pbm9kZS5jCisrKyBiL2ZzL2lub2RlLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L2FzeW5jLmg+CiAjaW5jbHVkZSA8bGludXgvcG9zaXhfYWNsLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlIDxsaW51eC9pbWEuaD4KICNpbmNsdWRlIDxsaW51eC9jcmVkLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKZGlmZiAtLWdpdCBhL2ZzL2xvZ2ZzL2Rldl9iZGV2LmMgYi9mcy9sb2dmcy9kZXZfYmRldi5jCmluZGV4IDFhZGM4ZDQuLmRmMGRlMjcgMTAwNjQ0Ci0tLSBhL2ZzL2xvZ2ZzL2Rldl9iZGV2LmMKKysrIGIvZnMvbG9nZnMvZGV2X2JkZXYuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2RlZmluZSBQQUdFX09GUyhvZnMpICgob2ZzKSAmIChQQUdFX1NJWkUtMSkpCiAKZGlmZiAtLWdpdCBhL2ZzL2xvZ2ZzL3N1cGVyLmMgYi9mcy9sb2dmcy9zdXBlci5jCmluZGV4IDMzNDM1ZTQuLmNlMDNhMTggMTAwNjQ0Ci0tLSBhL2ZzL2xvZ2ZzL3N1cGVyLmMKKysrIGIvZnMvbG9nZnMvc3VwZXIuYwpAQCAtNDgwLDEwICs0ODAsNiBAQAogCQkJIXJlYWRfb25seSkKIAkJcmV0dXJuIC1FSU87CiAKLQltdXRleF9pbml0KCZzdXBlci0+c19kaXJvcF9tdXRleCk7Ci0JbXV0ZXhfaW5pdCgmc3VwZXItPnNfb2JqZWN0X2FsaWFzX211dGV4KTsKLQlJTklUX0xJU1RfSEVBRCgmc3VwZXItPnNfZnJlZWluZ19saXN0KTsKLQogCXJldCA9IGxvZ2ZzX2luaXRfcncoc2IpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC02MDEsNiArNTk3LDEwIEBACiAJaWYgKCFzdXBlcikKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKKwltdXRleF9pbml0KCZzdXBlci0+c19kaXJvcF9tdXRleCk7CisJbXV0ZXhfaW5pdCgmc3VwZXItPnNfb2JqZWN0X2FsaWFzX211dGV4KTsKKwlJTklUX0xJU1RfSEVBRCgmc3VwZXItPnNfZnJlZWluZ19saXN0KTsKKwogCWlmICghZGV2bmFtZSkKIAkJZXJyID0gbG9nZnNfZ2V0X3NiX2JkZXYoc3VwZXIsIHR5cGUsIGRldm5hbWUpOwogCWVsc2UgaWYgKHN0cm5jbXAoZGV2bmFtZSwgIm10ZCIsIDMpKQpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggNTRmYzk5My4uNmZmODU4YyAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYworKysgYi9mcy9uYW1laS5jCkBAIC0xNzksNyArMTc5LDcgQEAKIHN0YXRpYyBpbnQgYWNsX3Blcm1pc3Npb25fY2hlY2soc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHVuc2lnbmVkIGludCBmbGFncywKIAkJaW50ICgqY2hlY2tfYWNsKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgaW50IGZsYWdzKSkKIHsKLQl1bW9kZV90CQkJbW9kZSA9IGlub2RlLT5pX21vZGU7CisJdW5zaWduZWQgaW50IG1vZGUgPSBpbm9kZS0+aV9tb2RlOwogCiAJbWFzayAmPSBNQVlfUkVBRCB8IE1BWV9XUklURSB8IE1BWV9FWEVDOwogCkBAIC0xMzc4LDEyICsxMzc4LDEyIEBACiB7CiAJaW50IHJlczsKIAotCUJVR19PTihuZC0+ZGVwdGggPj0gTUFYX05FU1RFRF9MSU5LUyk7CiAJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmxpbmtfY291bnQgPj0gTUFYX05FU1RFRF9MSU5LUykpIHsKIAkJcGF0aF9wdXRfY29uZGl0aW9uYWwocGF0aCwgbmQpOwogCQlwYXRoX3B1dCgmbmQtPnBhdGgpOwogCQlyZXR1cm4gLUVMT09QOwogCX0KKwlCVUdfT04obmQtPmRlcHRoID49IE1BWF9ORVNURURfTElOS1MpOwogCiAJbmQtPmRlcHRoKys7CiAJY3VycmVudC0+bGlua19jb3VudCsrOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25hbWVzcGFjZS5jIGIvZnMvbmZzL25hbWVzcGFjZS5jCmluZGV4IDg5ZmMxNjAuLjFmMDYzYmEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uYW1lc3BhY2UuYworKysgYi9mcy9uZnMvbmFtZXNwYWNlLmMKQEAgLTExOSw3ICsxMTksNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX05GU19WNAotc3RhdGljIHJwY19hdXRoZmxhdm9yX3QgbmZzX2ZpbmRfYmVzdF9zZWMoc3RydWN0IG5mczRfc2VjaW5mb19mbGF2b3JzICpmbGF2b3JzLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIHJwY19hdXRoZmxhdm9yX3QgbmZzX2ZpbmRfYmVzdF9zZWMoc3RydWN0IG5mczRfc2VjaW5mb19mbGF2b3JzICpmbGF2b3JzKQogewogCXN0cnVjdCBnc3NfYXBpX21lY2ggKm1lY2g7CiAJc3RydWN0IHhkcl9uZXRvYmogb2lkOwpAQCAtMTY2LDcgKzE2Niw3IEBACiAJCX0KIAkJZmxhdm9ycyA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKIAkJcmV0ID0gc2VjaW5mbyhwYXJlbnQtPmRfaW5vZGUsICZkZW50cnktPmRfbmFtZSwgZmxhdm9ycyk7Ci0JCSpmbGF2b3IgPSBuZnNfZmluZF9iZXN0X3NlYyhmbGF2b3JzLCBkZW50cnktPmRfaW5vZGUpOworCQkqZmxhdm9yID0gbmZzX2ZpbmRfYmVzdF9zZWMoZmxhdm9ycyk7CiAJCXB1dF9wYWdlKHBhZ2UpOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRfZnMuaCBiL2ZzL25mcy9uZnM0X2ZzLmgKaW5kZXggZTFjMjYxZC4uYzRhNjk4MyAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRfZnMuaAorKysgYi9mcy9uZnMvbmZzNF9mcy5oCkBAIC00Nyw2ICs0Nyw3IEBACiAJTkZTNENMTlRfTEFZT1VUUkVDQUxMLAogCU5GUzRDTE5UX1NFU1NJT05fUkVTRVQsCiAJTkZTNENMTlRfUkVDQUxMX1NMT1QsCisJTkZTNENMTlRfTEVBU0VfQ09ORklSTSwKIH07CiAKIGVudW0gbmZzNF9zZXNzaW9uX3N0YXRlIHsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0ZmlsZWxheW91dC5jIGIvZnMvbmZzL25mczRmaWxlbGF5b3V0LmMKaW5kZXggNmY4MTkyZi4uYmU3OWRjOSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRmaWxlbGF5b3V0LmMKKysrIGIvZnMvbmZzL25mczRmaWxlbGF5b3V0LmMKQEAgLTExNyw2ICsxMTcsOCBAQAogCWNhc2UgLUVLRVlFWFBJUkVEOgogCQlycGNfZGVsYXkodGFzaywgRklMRUxBWU9VVF9QT0xMX1JFVFJZX01BWCk7CiAJCWJyZWFrOworCWNhc2UgLU5GUzRFUlJfUkVUUllfVU5DQUNIRURfUkVQOgorCQlicmVhazsKIAlkZWZhdWx0OgogCQlkcHJpbnRrKCIlcyBEUyBlcnJvci4gUmV0cnkgdGhyb3VnaCBNRFMgJWRcbiIsIF9fZnVuY19fLAogCQkJdGFzay0+dGtfc3RhdHVzKTsKQEAgLTQxNiw3ICs0MTgsOCBAQAogZmlsZWxheW91dF9jaGVja19sYXlvdXQoc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbG8sCiAJCQlzdHJ1Y3QgbmZzNF9maWxlbGF5b3V0X3NlZ21lbnQgKmZsLAogCQkJc3RydWN0IG5mczRfbGF5b3V0Z2V0X3JlcyAqbGdyLAotCQkJc3RydWN0IG5mczRfZGV2aWNlaWQgKmlkKQorCQkJc3RydWN0IG5mczRfZGV2aWNlaWQgKmlkLAorCQkJZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCBuZnM0X2ZpbGVfbGF5b3V0X2RzYWRkciAqZHNhZGRyOwogCWludCBzdGF0dXMgPSAtRUlOVkFMOwpAQCAtNDM5LDcgKzQ0Miw3IEBACiAJLyogZmluZCBhbmQgcmVmZXJlbmNlIHRoZSBkZXZpY2VpZCAqLwogCWRzYWRkciA9IG5mczRfZmxfZmluZF9nZXRfZGV2aWNlaWQoaWQpOwogCWlmIChkc2FkZHIgPT0gTlVMTCkgewotCQlkc2FkZHIgPSBnZXRfZGV2aWNlX2luZm8obG8tPnBsaF9pbm9kZSwgaWQpOworCQlkc2FkZHIgPSBnZXRfZGV2aWNlX2luZm8obG8tPnBsaF9pbm9kZSwgaWQsIGdmcF9mbGFncyk7CiAJCWlmIChkc2FkZHIgPT0gTlVMTCkKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTUwMCw3ICs1MDMsOCBAQAogZmlsZWxheW91dF9kZWNvZGVfbGF5b3V0KHN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmZsbywKIAkJCSBzdHJ1Y3QgbmZzNF9maWxlbGF5b3V0X3NlZ21lbnQgKmZsLAogCQkJIHN0cnVjdCBuZnM0X2xheW91dGdldF9yZXMgKmxnciwKLQkJCSBzdHJ1Y3QgbmZzNF9kZXZpY2VpZCAqaWQpCisJCQkgc3RydWN0IG5mczRfZGV2aWNlaWQgKmlkLAorCQkJIGdmcF90IGdmcF9mbGFncykKIHsKIAlzdHJ1Y3QgeGRyX3N0cmVhbSBzdHJlYW07CiAJc3RydWN0IHhkcl9idWYgYnVmID0gewpAQCAtNTE2LDcgKzUyMCw3IEBACiAKIAlkcHJpbnRrKCIlczogc2V0X2xheW91dF9tYXAgQmVnaW5cbiIsIF9fZnVuY19fKTsKIAotCXNjcmF0Y2ggPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCXNjcmF0Y2ggPSBhbGxvY19wYWdlKGdmcF9mbGFncyk7CiAJaWYgKCFzY3JhdGNoKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNTU0LDEzICs1NTgsMTMgQEAKIAkJZ290byBvdXRfZXJyOwogCiAJZmwtPmZoX2FycmF5ID0ga3phbGxvYyhmbC0+bnVtX2ZoICogc2l6ZW9mKHN0cnVjdCBuZnNfZmggKiksCi0JCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJCQkgICAgICAgZ2ZwX2ZsYWdzKTsKIAlpZiAoIWZsLT5maF9hcnJheSkKIAkJZ290byBvdXRfZXJyOwogCiAJZm9yIChpID0gMDsgaSA8IGZsLT5udW1fZmg7IGkrKykgewogCQkvKiBEbyB3ZSB3YW50IHRvIHVzZSBhIG1lbXBvb2wgaGVyZT8gKi8KLQkJZmwtPmZoX2FycmF5W2ldID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG5mc19maCksIEdGUF9LRVJORUwpOworCQlmbC0+ZmhfYXJyYXlbaV0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbmZzX2ZoKSwgZ2ZwX2ZsYWdzKTsKIAkJaWYgKCFmbC0+ZmhfYXJyYXlbaV0pCiAJCQlnb3RvIG91dF9lcnJfZnJlZTsKIApAQCAtNjA1LDE5ICs2MDksMjAgQEAKIAogc3RhdGljIHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICoKIGZpbGVsYXlvdXRfYWxsb2NfbHNlZyhzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsYXlvdXRpZCwKLQkJICAgICAgc3RydWN0IG5mczRfbGF5b3V0Z2V0X3JlcyAqbGdyKQorCQkgICAgICBzdHJ1Y3QgbmZzNF9sYXlvdXRnZXRfcmVzICpsZ3IsCisJCSAgICAgIGdmcF90IGdmcF9mbGFncykKIHsKIAlzdHJ1Y3QgbmZzNF9maWxlbGF5b3V0X3NlZ21lbnQgKmZsOwogCWludCByYzsKIAlzdHJ1Y3QgbmZzNF9kZXZpY2VpZCBpZDsKIAogCWRwcmludGsoIi0tPiAlc1xuIiwgX19mdW5jX18pOwotCWZsID0ga3phbGxvYyhzaXplb2YoKmZsKSwgR0ZQX0tFUk5FTCk7CisJZmwgPSBremFsbG9jKHNpemVvZigqZmwpLCBnZnBfZmxhZ3MpOwogCWlmICghZmwpCiAJCXJldHVybiBOVUxMOwogCi0JcmMgPSBmaWxlbGF5b3V0X2RlY29kZV9sYXlvdXQobGF5b3V0aWQsIGZsLCBsZ3IsICZpZCk7Ci0JaWYgKHJjICE9IDAgfHwgZmlsZWxheW91dF9jaGVja19sYXlvdXQobGF5b3V0aWQsIGZsLCBsZ3IsICZpZCkpIHsKKwlyYyA9IGZpbGVsYXlvdXRfZGVjb2RlX2xheW91dChsYXlvdXRpZCwgZmwsIGxnciwgJmlkLCBnZnBfZmxhZ3MpOworCWlmIChyYyAhPSAwIHx8IGZpbGVsYXlvdXRfY2hlY2tfbGF5b3V0KGxheW91dGlkLCBmbCwgbGdyLCAmaWQsIGdmcF9mbGFncykpIHsKIAkJX2ZpbGVsYXlvdXRfZnJlZV9sc2VnKGZsKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtNjMzLDcgKzYzOCw3IEBACiAJCWludCBzaXplID0gKGZsLT5zdHJpcGVfdHlwZSA9PSBTVFJJUEVfU1BBUlNFKSA/CiAJCQlmbC0+ZHNhZGRyLT5kc19udW0gOiBmbC0+ZHNhZGRyLT5zdHJpcGVfY291bnQ7CiAKLQkJZmwtPmNvbW1pdF9idWNrZXRzID0ga2NhbGxvYyhzaXplLCBzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCksIEdGUF9LRVJORUwpOworCQlmbC0+Y29tbWl0X2J1Y2tldHMgPSBrY2FsbG9jKHNpemUsIHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSwgZ2ZwX2ZsYWdzKTsKIAkJaWYgKCFmbC0+Y29tbWl0X2J1Y2tldHMpIHsKIAkJCWZpbGVsYXlvdXRfZnJlZV9sc2VnKCZmbC0+Z2VuZXJpY19oZHIpOwogCQkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNGZpbGVsYXlvdXQuaCBiL2ZzL25mcy9uZnM0ZmlsZWxheW91dC5oCmluZGV4IDdjNDQ1NzkuLjJiNDYxZDcgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0ZmlsZWxheW91dC5oCisrKyBiL2ZzL25mcy9uZnM0ZmlsZWxheW91dC5oCkBAIC0xMDQsNiArMTA0LDYgQEAKIG5mczRfZmxfZmluZF9nZXRfZGV2aWNlaWQoc3RydWN0IG5mczRfZGV2aWNlaWQgKmRldl9pZCk7CiBleHRlcm4gdm9pZCBuZnM0X2ZsX3B1dF9kZXZpY2VpZChzdHJ1Y3QgbmZzNF9maWxlX2xheW91dF9kc2FkZHIgKmRzYWRkcik7CiBzdHJ1Y3QgbmZzNF9maWxlX2xheW91dF9kc2FkZHIgKgotZ2V0X2RldmljZV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZnM0X2RldmljZWlkICpkZXZfaWQpOworZ2V0X2RldmljZV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZnM0X2RldmljZWlkICpkZXZfaWQsIGdmcF90IGdmcF9mbGFncyk7CiAKICNlbmRpZiAvKiBGU19ORlNfTkZTNEZJTEVMQVlPVVRfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRmaWxlbGF5b3V0ZGV2LmMgYi9mcy9uZnMvbmZzNGZpbGVsYXlvdXRkZXYuYwppbmRleCBkZTUzNTBmLi5kYjA3YzdhIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNGZpbGVsYXlvdXRkZXYuYworKysgYi9mcy9uZnMvbmZzNGZpbGVsYXlvdXRkZXYuYwpAQCAtMjI1LDExICsyMjUsMTEgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBuZnM0X3BuZnNfZHMgKgotbmZzNF9wbmZzX2RzX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgaXBfYWRkciwgdTMyIHBvcnQpCituZnM0X3BuZnNfZHNfYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBpcF9hZGRyLCB1MzIgcG9ydCwgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCBuZnM0X3BuZnNfZHMgKnRtcF9kcywgKmRzOwogCi0JZHMgPSBremFsbG9jKHNpemVvZigqdG1wX2RzKSwgR0ZQX0tFUk5FTCk7CisJZHMgPSBremFsbG9jKHNpemVvZigqdG1wX2RzKSwgZ2ZwX2ZsYWdzKTsKIAlpZiAoIWRzKQogCQlnb3RvIG91dDsKIApAQCAtMjYxLDcgKzI2MSw3IEBACiAgKiBDdXJyZW50bHkgb25seSBzdXBwb3J0IGlwdjQsIGFuZCBvbmUgbXVsdGktcGF0aCBhZGRyZXNzLgogICovCiBzdGF0aWMgc3RydWN0IG5mczRfcG5mc19kcyAqCi1kZWNvZGVfYW5kX2FkZF9kcyhzdHJ1Y3QgeGRyX3N0cmVhbSAqc3RyZWFtcCwgc3RydWN0IGlub2RlICppbm9kZSkKK2RlY29kZV9hbmRfYWRkX2RzKHN0cnVjdCB4ZHJfc3RyZWFtICpzdHJlYW1wLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBnZnBfdCBnZnBfZmxhZ3MpCiB7CiAJc3RydWN0IG5mczRfcG5mc19kcyAqZHMgPSBOVUxMOwogCWNoYXIgKmJ1ZjsKQEAgLTMwMyw3ICszMDMsNyBAQAogCQkJcmxlbik7CiAJCWdvdG8gb3V0X2VycjsKIAl9Ci0JYnVmID0ga21hbGxvYyhybGVuICsgMSwgR0ZQX0tFUk5FTCk7CisJYnVmID0ga21hbGxvYyhybGVuICsgMSwgZ2ZwX2ZsYWdzKTsKIAlpZiAoIWJ1ZikgewogCQlkcHJpbnRrKCIlczogTm90IGVub3VnaCBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJZ290byBvdXRfZXJyOwpAQCAtMzMzLDcgKzMzMyw3IEBACiAJc3NjYW5mKHBzdHIsICItJWQtJWQiLCAmdG1wWzBdLCAmdG1wWzFdKTsKIAlwb3J0ID0gaHRvbnMoKHRtcFswXSA8PCA4KSB8ICh0bXBbMV0pKTsKIAotCWRzID0gbmZzNF9wbmZzX2RzX2FkZChpbm9kZSwgaXBfYWRkciwgcG9ydCk7CisJZHMgPSBuZnM0X3BuZnNfZHNfYWRkKGlub2RlLCBpcF9hZGRyLCBwb3J0LCBnZnBfZmxhZ3MpOwogCWRwcmludGsoIiVzOiBEZWNvZGVkIGFkZHJlc3MgYW5kIHBvcnQgJXNcbiIsIF9fZnVuY19fLCBidWYpOwogb3V0X2ZyZWU6CiAJa2ZyZWUoYnVmKTsKQEAgLTM0Myw3ICszNDMsNyBAQAogCiAvKiBEZWNvZGUgb3BhcXVlIGRldmljZSBkYXRhIGFuZCByZXR1cm4gdGhlIHJlc3VsdCAqLwogc3RhdGljIHN0cnVjdCBuZnM0X2ZpbGVfbGF5b3V0X2RzYWRkcioKLWRlY29kZV9kZXZpY2Uoc3RydWN0IGlub2RlICppbm8sIHN0cnVjdCBwbmZzX2RldmljZSAqcGRldikKK2RlY29kZV9kZXZpY2Uoc3RydWN0IGlub2RlICppbm8sIHN0cnVjdCBwbmZzX2RldmljZSAqcGRldiwgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCWludCBpOwogCXUzMiBjbnQsIG51bTsKQEAgLTM2Miw3ICszNjIsNyBAQAogCXN0cnVjdCBwYWdlICpzY3JhdGNoOwogCiAJLyogc2V0IHVwIHhkciBzdHJlYW0gKi8KLQlzY3JhdGNoID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKKwlzY3JhdGNoID0gYWxsb2NfcGFnZShnZnBfZmxhZ3MpOwogCWlmICghc2NyYXRjaCkKIAkJZ290byBvdXRfZXJyOwogCkBAIC0zODQsNyArMzg0LDcgQEAKIAl9CiAKIAkvKiByZWFkIHN0cmlwZSBpbmRpY2VzICovCi0Jc3RyaXBlX2luZGljZXMgPSBrY2FsbG9jKGNudCwgc2l6ZW9mKHU4KSwgR0ZQX0tFUk5FTCk7CisJc3RyaXBlX2luZGljZXMgPSBrY2FsbG9jKGNudCwgc2l6ZW9mKHU4KSwgZ2ZwX2ZsYWdzKTsKIAlpZiAoIXN0cmlwZV9pbmRpY2VzKQogCQlnb3RvIG91dF9lcnJfZnJlZV9zY3JhdGNoOwogCkBAIC00MjMsNyArNDIzLDcgQEAKIAogCWRzYWRkciA9IGt6YWxsb2Moc2l6ZW9mKCpkc2FkZHIpICsKIAkJCShzaXplb2Yoc3RydWN0IG5mczRfcG5mc19kcyAqKSAqIChudW0gLSAxKSksCi0JCQlHRlBfS0VSTkVMKTsKKwkJCWdmcF9mbGFncyk7CiAJaWYgKCFkc2FkZHIpCiAJCWdvdG8gb3V0X2Vycl9mcmVlX3N0cmlwZV9pbmRpY2VzOwogCkBAIC00NTIsNyArNDUyLDcgQEAKIAkJZm9yIChqID0gMDsgaiA8IG1wX2NvdW50OyBqKyspIHsKIAkJCWlmIChqID09IDApIHsKIAkJCQlkc2FkZHItPmRzX2xpc3RbaV0gPSBkZWNvZGVfYW5kX2FkZF9kcygmc3RyZWFtLAotCQkJCQlpbm8pOworCQkJCQlpbm8sIGdmcF9mbGFncyk7CiAJCQkJaWYgKGRzYWRkci0+ZHNfbGlzdFtpXSA9PSBOVUxMKQogCQkJCQlnb3RvIG91dF9lcnJfZnJlZV9kZXZpY2VpZDsKIAkJCX0gZWxzZSB7CkBAIC01MDMsMTIgKzUwMywxMiBAQAogICogYXZhaWxhYmxlIGRldmljZXMuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbmZzNF9maWxlX2xheW91dF9kc2FkZHIgKgotZGVjb2RlX2FuZF9hZGRfZGV2aWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwbmZzX2RldmljZSAqZGV2KQorZGVjb2RlX2FuZF9hZGRfZGV2aWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwbmZzX2RldmljZSAqZGV2LCBnZnBfdCBnZnBfZmxhZ3MpCiB7CiAJc3RydWN0IG5mczRfZmlsZV9sYXlvdXRfZHNhZGRyICpkLCAqbmV3OwogCWxvbmcgaGFzaDsKIAotCW5ldyA9IGRlY29kZV9kZXZpY2UoaW5vZGUsIGRldik7CisJbmV3ID0gZGVjb2RlX2RldmljZShpbm9kZSwgZGV2LCBnZnBfZmxhZ3MpOwogCWlmICghbmV3KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDb3VsZCBub3QgZGVjb2RlIG9yIGFkZCBkZXZpY2VcbiIsCiAJCQlfX2Z1bmNfXyk7CkBAIC01MzcsNyArNTM3LDcgQEAKICAqIG9mIGF2YWlsYWJsZSBkZXZpY2VzLCBhbmQgcmV0dXJuIGl0LgogICovCiBzdHJ1Y3QgbmZzNF9maWxlX2xheW91dF9kc2FkZHIgKgotZ2V0X2RldmljZV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZnM0X2RldmljZWlkICpkZXZfaWQpCitnZXRfZGV2aWNlX2luZm8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5mczRfZGV2aWNlaWQgKmRldl9pZCwgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCBwbmZzX2RldmljZSAqcGRldiA9IE5VTEw7CiAJdTMyIG1heF9yZXNwX3N6OwpAQCAtNTU2LDE3ICs1NTYsMTcgQEAKIAlkcHJpbnRrKCIlcyBpbm9kZSAlcCBtYXhfcmVzcF9zeiAldSBtYXhfcGFnZXMgJWRcbiIsCiAJCV9fZnVuY19fLCBpbm9kZSwgbWF4X3Jlc3Bfc3osIG1heF9wYWdlcyk7CiAKLQlwZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBuZnNfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJcGRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwbmZzX2RldmljZSksIGdmcF9mbGFncyk7CiAJaWYgKHBkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlwYWdlcyA9IGt6YWxsb2MobWF4X3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTsKKwlwYWdlcyA9IGt6YWxsb2MobWF4X3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBnZnBfZmxhZ3MpOwogCWlmIChwYWdlcyA9PSBOVUxMKSB7CiAJCWtmcmVlKHBkZXYpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJZm9yIChpID0gMDsgaSA8IG1heF9wYWdlczsgaSsrKSB7Ci0JCXBhZ2VzW2ldID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKKwkJcGFnZXNbaV0gPSBhbGxvY19wYWdlKGdmcF9mbGFncyk7CiAJCWlmICghcGFnZXNbaV0pCiAJCQlnb3RvIG91dF9mcmVlOwogCX0KQEAgLTU4Nyw3ICs1ODcsNyBAQAogCSAqIEZvdW5kIG5ldyBkZXZpY2UsIG5lZWQgdG8gZGVjb2RlIGl0IGFuZCB0aGVuIGFkZCBpdCB0byB0aGUKIAkgKiBsaXN0IG9mIGtub3duIGRldmljZXMgZm9yIHRoaXMgbW91bnRwb2ludC4KIAkgKi8KLQlkc2FkZHIgPSBkZWNvZGVfYW5kX2FkZF9kZXZpY2UoaW5vZGUsIHBkZXYpOworCWRzYWRkciA9IGRlY29kZV9hbmRfYWRkX2RldmljZShpbm9kZSwgcGRldiwgZ2ZwX2ZsYWdzKTsKIG91dF9mcmVlOgogCWZvciAoaSA9IDA7IGkgPCBtYXhfcGFnZXM7IGkrKykKIAkJX19mcmVlX3BhZ2UocGFnZXNbaV0pOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRwcm9jLmMgYi9mcy9uZnMvbmZzNHByb2MuYwppbmRleCA5YmY0MWVhLi5jZjFiMzM5IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHByb2MuYworKysgYi9mcy9uZnMvbmZzNHByb2MuYwpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25mczQuaD4KICNpbmNsdWRlIDxsaW51eC9uZnNfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9uZnNfcGFnZS5oPgorI2luY2x1ZGUgPGxpbnV4L25mc19tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTI5OSw2ICszMDAsNyBAQAogCQkJcmV0ID0gbmZzNF9kZWxheShzZXJ2ZXItPmNsaWVudCwgJmV4Y2VwdGlvbi0+dGltZW91dCk7CiAJCQlpZiAocmV0ICE9IDApCiAJCQkJYnJlYWs7CisJCWNhc2UgLU5GUzRFUlJfUkVUUllfVU5DQUNIRURfUkVQOgogCQljYXNlIC1ORlM0RVJSX09MRF9TVEFURUlEOgogCQkJZXhjZXB0aW9uLT5yZXRyeSA9IDE7CiAJCQlicmVhazsKQEAgLTQ0Myw4ICs0NDUsOCBAQAogCWlmIChyZXMtPnNyX3N0YXR1cyA9PSAxKQogCQlyZXMtPnNyX3N0YXR1cyA9IE5GU19PSzsKIAotCS8qIC1FUkVTVEFSVFNZUyBjYW4gcmVzdWx0IGluIHNraXBwaW5nIG5mczQxX3NlcXVlbmNlX3NldHVwICovCi0JaWYgKCFyZXMtPnNyX3Nsb3QpCisJLyogZG9uJ3QgaW5jcmVtZW50IHRoZSBzZXF1ZW5jZSBudW1iZXIgaWYgdGhlIHRhc2sgd2Fzbid0IHNlbnQgKi8KKwlpZiAoIVJQQ19XQVNfU0VOVCh0YXNrKSkKIAkJZ290byBvdXQ7CiAKIAkvKiBDaGVjayB0aGUgU0VRVUVOQ0Ugb3BlcmF0aW9uIHN0YXR1cyAqLwpAQCAtMjE4NSw5ICsyMTg3LDE0IEBACiAJc3RydWN0IG5mczRfZXhjZXB0aW9uIGV4Y2VwdGlvbiA9IHsgfTsKIAlpbnQgZXJyOwogCWRvIHsKLQkJZXJyID0gbmZzNF9oYW5kbGVfZXhjZXB0aW9uKHNlcnZlciwKLQkJCQlfbmZzNF9sb29rdXBfcm9vdChzZXJ2ZXIsIGZoYW5kbGUsIGluZm8pLAotCQkJCSZleGNlcHRpb24pOworCQllcnIgPSBfbmZzNF9sb29rdXBfcm9vdChzZXJ2ZXIsIGZoYW5kbGUsIGluZm8pOworCQlzd2l0Y2ggKGVycikgeworCQljYXNlIDA6CisJCWNhc2UgLU5GUzRFUlJfV1JPTkdTRUM6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVyciA9IG5mczRfaGFuZGxlX2V4Y2VwdGlvbihzZXJ2ZXIsIGVyciwgJmV4Y2VwdGlvbik7CisJCX0KIAl9IHdoaWxlIChleGNlcHRpb24ucmV0cnkpOwogCXJldHVybiBlcnI7CiB9CkBAIC0yMjA4LDI1ICsyMjE1LDQ3IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBuZnM0X2ZpbmRfcm9vdF9zZWMoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IG5mc19maCAqZmhhbmRsZSwKKwkJCSAgICAgIHN0cnVjdCBuZnNfZnNpbmZvICppbmZvKQoreworCWludCBpLCBsZW4sIHN0YXR1cyA9IDA7CisJcnBjX2F1dGhmbGF2b3JfdCBmbGF2X2FycmF5W05GU19NQVhfU0VDRkxBVk9SU107CisKKwlsZW4gPSBnc3NfbWVjaF9saXN0X3BzZXVkb2ZsYXZvcnMoJmZsYXZfYXJyYXlbMF0pOworCWZsYXZfYXJyYXlbbGVuXSA9IFJQQ19BVVRIX05VTEw7CisJbGVuICs9IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJc3RhdHVzID0gbmZzNF9sb29rdXBfcm9vdF9zZWMoc2VydmVyLCBmaGFuZGxlLCBpbmZvLCBmbGF2X2FycmF5W2ldKTsKKwkJaWYgKHN0YXR1cyA9PSAtTkZTNEVSUl9XUk9OR1NFQyB8fCBzdGF0dXMgPT0gLUVBQ0NFUykKKwkJCWNvbnRpbnVlOworCQlicmVhazsKKwl9CisJLyoKKwkgKiAtRUFDQ0VTUyBjb3VsZCBtZWFuIHRoYXQgdGhlIHVzZXIgZG9lc24ndCBoYXZlIGNvcnJlY3QgcGVybWlzc2lvbnMKKwkgKiB0byBhY2Nlc3MgdGhlIG1vdW50LiAgSXQgY291bGQgYWxzbyBtZWFuIHRoYXQgd2UgdHJpZWQgdG8gbW91bnQKKwkgKiB3aXRoIGEgZ3NzIGF1dGggZmxhdm9yLCBidXQgcnBjLmdzc2QgaXNuJ3QgcnVubmluZy4gIEVpdGhlciB3YXksCisJICogZXhpc3RpbmcgbW91bnQgcHJvZ3JhbXMgZG9uJ3QgaGFuZGxlIC1FQUNDRVMgdmVyeSB3ZWxsIHNvIGl0IHNob3VsZAorCSAqIGJlIG1hcHBlZCB0byAtRVBFUk0gaW5zdGVhZC4KKwkgKi8KKwlpZiAoc3RhdHVzID09IC1FQUNDRVMpCisJCXN0YXR1cyA9IC1FUEVSTTsKKwlyZXR1cm4gc3RhdHVzOworfQorCiAvKgogICogZ2V0IHRoZSBmaWxlIGhhbmRsZSBmb3IgdGhlICIvIiBkaXJlY3Rvcnkgb24gdGhlIHNlcnZlcgogICovCiBzdGF0aWMgaW50IG5mczRfcHJvY19nZXRfcm9vdChzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3QgbmZzX2ZoICpmaGFuZGxlLAogCQkJICAgICAgc3RydWN0IG5mc19mc2luZm8gKmluZm8pCiB7Ci0JaW50IGksIGxlbiwgc3RhdHVzID0gMDsKLQlycGNfYXV0aGZsYXZvcl90IGZsYXZfYXJyYXlbTkZTX01BWF9TRUNGTEFWT1JTICsgMl07Ci0KLQlmbGF2X2FycmF5WzBdID0gUlBDX0FVVEhfVU5JWDsKLQlsZW4gPSBnc3NfbWVjaF9saXN0X3BzZXVkb2ZsYXZvcnMoJmZsYXZfYXJyYXlbMV0pOwotCWZsYXZfYXJyYXlbMStsZW5dID0gUlBDX0FVVEhfTlVMTDsKLQlsZW4gKz0gMjsKLQotCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotCQlzdGF0dXMgPSBuZnM0X2xvb2t1cF9yb290X3NlYyhzZXJ2ZXIsIGZoYW5kbGUsIGluZm8sIGZsYXZfYXJyYXlbaV0pOwotCQlpZiAoc3RhdHVzICE9IC1FUEVSTSkKLQkJCWJyZWFrOwotCX0KKwlpbnQgc3RhdHVzID0gbmZzNF9sb29rdXBfcm9vdChzZXJ2ZXIsIGZoYW5kbGUsIGluZm8pOworCWlmICgoc3RhdHVzID09IC1ORlM0RVJSX1dST05HU0VDKSAmJiAhKHNlcnZlci0+ZmxhZ3MgJiBORlNfTU9VTlRfU0VDRkxBVk9VUikpCisJCS8qCisJCSAqIEEgc3RhdHVzIG9mIC1ORlM0RVJSX1dST05HU0VDIHdpbGwgYmUgbWFwcGVkIHRvIC1FUEVSTQorCQkgKiBieSBuZnM0X21hcF9lcnJvcnMoKSBhcyB0aGlzIGZ1bmN0aW9uIGV4aXRzLgorCQkgKi8KKwkJc3RhdHVzID0gbmZzNF9maW5kX3Jvb3Rfc2VjKHNlcnZlciwgZmhhbmRsZSwgaW5mbyk7CiAJaWYgKHN0YXR1cyA9PSAwKQogCQlzdGF0dXMgPSBuZnM0X3NlcnZlcl9jYXBhYmlsaXRpZXMoc2VydmVyLCBmaGFuZGxlKTsKIAlpZiAoc3RhdHVzID09IDApCkBAIC0zNjY3LDYgKzM2OTYsNyBAQAogCQkJcnBjX2RlbGF5KHRhc2ssIE5GUzRfUE9MTF9SRVRSWV9NQVgpOwogCQkJdGFzay0+dGtfc3RhdHVzID0gMDsKIAkJCXJldHVybiAtRUFHQUlOOworCQljYXNlIC1ORlM0RVJSX1JFVFJZX1VOQ0FDSEVEX1JFUDoKIAkJY2FzZSAtTkZTNEVSUl9PTERfU1RBVEVJRDoKIAkJCXRhc2stPnRrX3N0YXR1cyA9IDA7CiAJCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTM3MjMsMjEgKzM3NTMsMjAgQEAKIAkJCQlzaXplb2Yoc2V0Y2xpZW50aWQuc2NfdWFkZHIpLCAiJXMuJXUuJXUiLAogCQkJCWNscC0+Y2xfaXBhZGRyLCBwb3J0ID4+IDgsIHBvcnQgJiAyNTUpOwogCi0JCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoY2xwLT5jbF9ycGNjbGllbnQsICZtc2csIDApOworCQlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKGNscC0+Y2xfcnBjY2xpZW50LCAmbXNnLCBSUENfVEFTS19USU1FT1VUKTsKIAkJaWYgKHN0YXR1cyAhPSAtTkZTNEVSUl9DTElEX0lOVVNFKQogCQkJYnJlYWs7Ci0JCWlmIChzaWduYWxsZWQoKSkKKwkJaWYgKGxvb3AgIT0gMCkgeworCQkJKytjbHAtPmNsX2lkX3VuaXF1aWZpZXI7CiAJCQlicmVhazsKLQkJaWYgKGxvb3ArKyAmIDEpCi0JCQlzc2xlZXAoY2xwLT5jbF9sZWFzZV90aW1lIC8gSFogKyAxKTsKLQkJZWxzZQotCQkJaWYgKCsrY2xwLT5jbF9pZF91bmlxdWlmaWVyID09IDApCi0JCQkJYnJlYWs7CisJCX0KKwkJKytsb29wOworCQlzc2xlZXAoY2xwLT5jbF9sZWFzZV90aW1lIC8gSFogKyAxKTsKIAl9CiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGludCBfbmZzNF9wcm9jX3NldGNsaWVudGlkX2NvbmZpcm0oc3RydWN0IG5mc19jbGllbnQgKmNscCwKK2ludCBuZnM0X3Byb2Nfc2V0Y2xpZW50aWRfY29uZmlybShzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLAogCQlzdHJ1Y3QgbmZzNF9zZXRjbGllbnRpZF9yZXMgKmFyZywKIAkJc3RydWN0IHJwY19jcmVkICpjcmVkKQogewpAQCAtMzc1Miw3ICszNzgxLDcgQEAKIAlpbnQgc3RhdHVzOwogCiAJbm93ID0gamlmZmllczsKLQlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKGNscC0+Y2xfcnBjY2xpZW50LCAmbXNnLCAwKTsKKwlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKGNscC0+Y2xfcnBjY2xpZW50LCAmbXNnLCBSUENfVEFTS19USU1FT1VUKTsKIAlpZiAoc3RhdHVzID09IDApIHsKIAkJc3Bpbl9sb2NrKCZjbHAtPmNsX2xvY2spOwogCQljbHAtPmNsX2xlYXNlX3RpbWUgPSBmc2luZm8ubGVhc2VfdGltZSAqIEhaOwpAQCAtMzc2MiwyNiArMzc5MSw2IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotaW50IG5mczRfcHJvY19zZXRjbGllbnRpZF9jb25maXJtKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsCi0JCXN0cnVjdCBuZnM0X3NldGNsaWVudGlkX3JlcyAqYXJnLAotCQlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQpCi17Ci0JbG9uZyB0aW1lb3V0ID0gMDsKLQlpbnQgZXJyOwotCWRvIHsKLQkJZXJyID0gX25mczRfcHJvY19zZXRjbGllbnRpZF9jb25maXJtKGNscCwgYXJnLCBjcmVkKTsKLQkJc3dpdGNoIChlcnIpIHsKLQkJCWNhc2UgMDoKLQkJCQlyZXR1cm4gZXJyOwotCQkJY2FzZSAtTkZTNEVSUl9SRVNPVVJDRToKLQkJCQkvKiBUaGUgSUJNIGxhd3llcnMgbWlzcmVhZCBhbm90aGVyIGRvY3VtZW50ISAqLwotCQkJY2FzZSAtTkZTNEVSUl9ERUxBWToKLQkJCQllcnIgPSBuZnM0X2RlbGF5KGNscC0+Y2xfcnBjY2xpZW50LCAmdGltZW91dCk7Ci0JCX0KLQl9IHdoaWxlIChlcnIgPT0gMCk7Ci0JcmV0dXJuIGVycjsKLX0KLQogc3RydWN0IG5mczRfZGVsZWdyZXR1cm5kYXRhIHsKIAlzdHJ1Y3QgbmZzNF9kZWxlZ3JldHVybmFyZ3MgYXJnczsKIAlzdHJ1Y3QgbmZzNF9kZWxlZ3JldHVybnJlcyByZXM7CkBAIC00Nzg2LDcgKzQ3OTUsNyBAQAogCQkJCWluaXRfdXRzbmFtZSgpLT5kb21haW5uYW1lLAogCQkJCWNscC0+Y2xfcnBjY2xpZW50LT5jbF9hdXRoLT5hdV9mbGF2b3IpOwogCi0Jc3RhdHVzID0gcnBjX2NhbGxfc3luYyhjbHAtPmNsX3JwY2NsaWVudCwgJm1zZywgMCk7CisJc3RhdHVzID0gcnBjX2NhbGxfc3luYyhjbHAtPmNsX3JwY2NsaWVudCwgJm1zZywgUlBDX1RBU0tfVElNRU9VVCk7CiAJaWYgKCFzdGF0dXMpCiAJCXN0YXR1cyA9IG5mczRfY2hlY2tfY2xfZXhjaGFuZ2VfZmxhZ3MoY2xwLT5jbF9leGNoYW5nZV9mbGFncyk7CiAJZHByaW50aygiPC0tICVzIHN0YXR1cz0gJWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOwpAQCAtNDgzNyw2ICs0ODQ2LDggQEAKIAkJZHByaW50aygiJXMgUmV0cnk6IHRrX3N0YXR1cyAlZFxuIiwgX19mdW5jX18sIHRhc2stPnRrX3N0YXR1cyk7CiAJCXJwY19kZWxheSh0YXNrLCBORlM0X1BPTExfUkVUUllfTUlOKTsKIAkJdGFzay0+dGtfc3RhdHVzID0gMDsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSAtTkZTNEVSUl9SRVRSWV9VTkNBQ0hFRF9SRVA6CiAJCW5mc19yZXN0YXJ0X3JwYyh0YXNrLCBkYXRhLT5jbHApOwogCQlyZXR1cm47CiAJfQpAQCAtNDg2OSw3ICs0ODgwLDggQEAKIAkJLnJwY19jbGllbnQgPSBjbHAtPmNsX3JwY2NsaWVudCwKIAkJLnJwY19tZXNzYWdlID0gJm1zZywKIAkJLmNhbGxiYWNrX29wcyA9ICZuZnM0X2dldF9sZWFzZV90aW1lX29wcywKLQkJLmNhbGxiYWNrX2RhdGEgPSAmZGF0YQorCQkuY2FsbGJhY2tfZGF0YSA9ICZkYXRhLAorCQkuZmxhZ3MgPSBSUENfVEFTS19USU1FT1VULAogCX07CiAJaW50IHN0YXR1czsKIApAQCAtNTE3MSw3ICs1MTgzLDcgQEAKIAluZnM0X2luaXRfY2hhbm5lbF9hdHRycygmYXJncyk7CiAJYXJncy5mbGFncyA9IChTRVNTSU9ONF9QRVJTSVNUIHwgU0VTU0lPTjRfQkFDS19DSEFOKTsKIAotCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoc2Vzc2lvbi0+Y2xwLT5jbF9ycGNjbGllbnQsICZtc2csIDApOworCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoc2Vzc2lvbi0+Y2xwLT5jbF9ycGNjbGllbnQsICZtc2csIFJQQ19UQVNLX1RJTUVPVVQpOwogCiAJaWYgKCFzdGF0dXMpCiAJCS8qIFZlcmlmeSB0aGUgc2Vzc2lvbidzIG5lZ290aWF0ZWQgY2hhbm5lbF9hdHRycyB2YWx1ZXMgKi8KQEAgLTUxOTQsMjAgKzUyMDYsMTAgQEAKIAlpbnQgc3RhdHVzOwogCXVuc2lnbmVkICpwdHI7CiAJc3RydWN0IG5mczRfc2Vzc2lvbiAqc2Vzc2lvbiA9IGNscC0+Y2xfc2Vzc2lvbjsKLQlsb25nIHRpbWVvdXQgPSAwOwotCWludCBlcnI7CiAKIAlkcHJpbnRrKCItLT4gJXMgY2xwPSVwIHNlc3Npb249JXBcbiIsIF9fZnVuY19fLCBjbHAsIHNlc3Npb24pOwogCi0JZG8gewotCQlzdGF0dXMgPSBfbmZzNF9wcm9jX2NyZWF0ZV9zZXNzaW9uKGNscCk7Ci0JCWlmIChzdGF0dXMgPT0gLU5GUzRFUlJfREVMQVkpIHsKLQkJCWVyciA9IG5mczRfZGVsYXkoY2xwLT5jbF9ycGNjbGllbnQsICZ0aW1lb3V0KTsKLQkJCWlmIChlcnIpCi0JCQkJc3RhdHVzID0gZXJyOwotCQl9Ci0JfSB3aGlsZSAoc3RhdHVzID09IC1ORlM0RVJSX0RFTEFZKTsKLQorCXN0YXR1cyA9IF9uZnM0X3Byb2NfY3JlYXRlX3Nlc3Npb24oY2xwKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKIApAQCAtNTI0OCw3ICs1MjUwLDcgQEAKIAltc2cucnBjX2FyZ3AgPSBzZXNzaW9uOwogCW1zZy5ycGNfcmVzcCA9IE5VTEw7CiAJbXNnLnJwY19jcmVkID0gTlVMTDsKLQlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKHNlc3Npb24tPmNscC0+Y2xfcnBjY2xpZW50LCAmbXNnLCAwKTsKKwlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKHNlc3Npb24tPmNscC0+Y2xfcnBjY2xpZW50LCAmbXNnLCBSUENfVEFTS19USU1FT1VUKTsKIAogCWlmIChzdGF0dXMpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcKQEAgLTU0ODEsNiArNTQ4Myw4IEBACiAJCWJyZWFrOwogCWNhc2UgLU5GUzRFUlJfREVMQVk6CiAJCXJwY19kZWxheSh0YXNrLCBORlM0X1BPTExfUkVUUllfTUFYKTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSAtTkZTNEVSUl9SRVRSWV9VTkNBQ0hFRF9SRVA6CiAJCXJldHVybiAtRUFHQUlOOwogCWRlZmF1bHQ6CiAJCW5mczRfc2NoZWR1bGVfbGVhc2VfcmVjb3ZlcnkoY2xwKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0c3RhdGUuYyBiL2ZzL25mcy9uZnM0c3RhdGUuYwppbmRleCBhNjgwNGY3Li4wMzZmNWFkIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzL25mczRzdGF0ZS5jCkBAIC02NCwxMCArNjQsMTUgQEAKIAogaW50IG5mczRfaW5pdF9jbGllbnRpZChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCBzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQpCiB7Ci0Jc3RydWN0IG5mczRfc2V0Y2xpZW50aWRfcmVzIGNsaWQ7CisJc3RydWN0IG5mczRfc2V0Y2xpZW50aWRfcmVzIGNsaWQgPSB7CisJCS5jbGllbnRpZCA9IGNscC0+Y2xfY2xpZW50aWQsCisJCS5jb25maXJtID0gY2xwLT5jbF9jb25maXJtLAorCX07CiAJdW5zaWduZWQgc2hvcnQgcG9ydDsKIAlpbnQgc3RhdHVzOwogCisJaWYgKHRlc3RfYml0KE5GUzRDTE5UX0xFQVNFX0NPTkZJUk0sICZjbHAtPmNsX3N0YXRlKSkKKwkJZ290byBkb19jb25maXJtOwogCXBvcnQgPSBuZnNfY2FsbGJhY2tfdGNwcG9ydDsKIAlpZiAoY2xwLT5jbF9hZGRyLnNzX2ZhbWlseSA9PSBBRl9JTkVUNikKIAkJcG9ydCA9IG5mc19jYWxsYmFja190Y3Bwb3J0NjsKQEAgLTc1LDEwICs4MCwxNCBAQAogCXN0YXR1cyA9IG5mczRfcHJvY19zZXRjbGllbnRpZChjbHAsIE5GUzRfQ0FMTEJBQ0ssIHBvcnQsIGNyZWQsICZjbGlkKTsKIAlpZiAoc3RhdHVzICE9IDApCiAJCWdvdG8gb3V0OworCWNscC0+Y2xfY2xpZW50aWQgPSBjbGlkLmNsaWVudGlkOworCWNscC0+Y2xfY29uZmlybSA9IGNsaWQuY29uZmlybTsKKwlzZXRfYml0KE5GUzRDTE5UX0xFQVNFX0NPTkZJUk0sICZjbHAtPmNsX3N0YXRlKTsKK2RvX2NvbmZpcm06CiAJc3RhdHVzID0gbmZzNF9wcm9jX3NldGNsaWVudGlkX2NvbmZpcm0oY2xwLCAmY2xpZCwgY3JlZCk7CiAJaWYgKHN0YXR1cyAhPSAwKQogCQlnb3RvIG91dDsKLQljbHAtPmNsX2NsaWVudGlkID0gY2xpZC5jbGllbnRpZDsKKwljbGVhcl9iaXQoTkZTNENMTlRfTEVBU0VfQ09ORklSTSwgJmNscC0+Y2xfc3RhdGUpOwogCW5mczRfc2NoZWR1bGVfc3RhdGVfcmVuZXdhbChjbHApOwogb3V0OgogCXJldHVybiBzdGF0dXM7CkBAIC0yMzAsMTMgKzIzOSwxOCBAQAogewogCWludCBzdGF0dXM7CiAKKwlpZiAodGVzdF9iaXQoTkZTNENMTlRfTEVBU0VfQ09ORklSTSwgJmNscC0+Y2xfc3RhdGUpKQorCQlnb3RvIGRvX2NvbmZpcm07CiAJbmZzNF9iZWdpbl9kcmFpbl9zZXNzaW9uKGNscCk7CiAJc3RhdHVzID0gbmZzNF9wcm9jX2V4Y2hhbmdlX2lkKGNscCwgY3JlZCk7CiAJaWYgKHN0YXR1cyAhPSAwKQogCQlnb3RvIG91dDsKKwlzZXRfYml0KE5GUzRDTE5UX0xFQVNFX0NPTkZJUk0sICZjbHAtPmNsX3N0YXRlKTsKK2RvX2NvbmZpcm06CiAJc3RhdHVzID0gbmZzNF9wcm9jX2NyZWF0ZV9zZXNzaW9uKGNscCk7CiAJaWYgKHN0YXR1cyAhPSAwKQogCQlnb3RvIG91dDsKKwljbGVhcl9iaXQoTkZTNENMTlRfTEVBU0VfQ09ORklSTSwgJmNscC0+Y2xfc3RhdGUpOwogCW5mczQxX3NldHVwX3N0YXRlX3JlbmV3YWwoY2xwKTsKIAluZnNfbWFya19jbGllbnRfcmVhZHkoY2xwLCBORlNfQ1NfUkVBRFkpOwogb3V0OgpAQCAtMTU4NCwyMCArMTU5OCwyMyBAQAogICovCiBzdGF0aWMgdm9pZCBuZnM0X3NldF9sZWFzZV9leHBpcmVkKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIGludCBzdGF0dXMpCiB7Ci0JaWYgKG5mczRfaGFzX3Nlc3Npb24oY2xwKSkgewotCQlzd2l0Y2ggKHN0YXR1cykgewotCQljYXNlIC1ORlM0RVJSX0RFTEFZOgotCQljYXNlIC1ORlM0RVJSX0NMSURfSU5VU0U6Ci0JCWNhc2UgLUVBR0FJTjoKLQkJCWJyZWFrOworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSAtTkZTNEVSUl9DTElEX0lOVVNFOgorCWNhc2UgLU5GUzRFUlJfU1RBTEVfQ0xJRU5USUQ6CisJCWNsZWFyX2JpdChORlM0Q0xOVF9MRUFTRV9DT05GSVJNLCAmY2xwLT5jbF9zdGF0ZSk7CisJCWJyZWFrOworCWNhc2UgLU5GUzRFUlJfREVMQVk6CisJY2FzZSAtRVRJTUVET1VUOgorCWNhc2UgLUVBR0FJTjoKKwkJc3NsZWVwKDEpOworCQlicmVhazsKIAotCQljYXNlIC1FS0VZRVhQSVJFRDoKLQkJCW5mczRfd2Fybl9rZXlleHBpcmVkKGNscC0+Y2xfaG9zdG5hbWUpOwotCQljYXNlIC1ORlM0RVJSX05PVF9TQU1FOiAvKiBGaXhNZTogaW1wbGVtZW50IHJlY292ZXJ5Ci0JCQkJCSAqIGluIG5mczRfZXhjaGFuZ2VfaWQgKi8KLQkJZGVmYXVsdDoKLQkJCXJldHVybjsKLQkJfQorCWNhc2UgLUVLRVlFWFBJUkVEOgorCQluZnM0X3dhcm5fa2V5ZXhwaXJlZChjbHAtPmNsX2hvc3RuYW1lKTsKKwljYXNlIC1ORlM0RVJSX05PVF9TQU1FOiAvKiBGaXhNZTogaW1wbGVtZW50IHJlY292ZXJ5CisJCQkJICogaW4gbmZzNF9leGNoYW5nZV9pZCAqLworCWRlZmF1bHQ6CisJCXJldHVybjsKIAl9CiAJc2V0X2JpdChORlM0Q0xOVF9MRUFTRV9FWFBJUkVELCAmY2xwLT5jbF9zdGF0ZSk7CiB9CkBAIC0xNjA3LDcgKzE2MjQsNyBAQAogCWludCBzdGF0dXMgPSAwOwogCiAJLyogRW5zdXJlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gTkZTdjQgc3RhdGUgKi8KLQlmb3IoOzspIHsKKwlkbyB7CiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTkZTNENMTlRfTEVBU0VfRVhQSVJFRCwgJmNscC0+Y2xfc3RhdGUpKSB7CiAJCQkvKiBXZSdyZSBnb2luZyB0byBoYXZlIHRvIHJlLWVzdGFibGlzaCBhIGNsaWVudGlkICovCiAJCQlzdGF0dXMgPSBuZnM0X3JlY2xhaW1fbGVhc2UoY2xwKTsKQEAgLTE2OTEsNyArMTcwOCw3IEBACiAJCQlicmVhazsKIAkJaWYgKHRlc3RfYW5kX3NldF9iaXQoTkZTNENMTlRfTUFOQUdFUl9SVU5OSU5HLCAmY2xwLT5jbF9zdGF0ZSkgIT0gMCkKIAkJCWJyZWFrOwotCX0KKwl9IHdoaWxlIChhdG9taWNfcmVhZCgmY2xwLT5jbF9jb3VudCkgPiAxKTsKIAlyZXR1cm47CiBvdXRfZXJyb3I6CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiRXJyb3I6IHN0YXRlIG1hbmFnZXIgZmFpbGVkIG9uIE5GU3Y0IHNlcnZlciAlcyIKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0eGRyLmMgYi9mcy9uZnMvbmZzNHhkci5jCmluZGV4IGRkZGZiNTcuLmMzY2NkMmMgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0eGRyLmMKKysrIGIvZnMvbmZzL25mczR4ZHIuYwpAQCAtMTQ1MiwyNiArMTQ1MiwyNSBAQAogCiBzdGF0aWMgdm9pZCBlbmNvZGVfcmVhZGRpcihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBjb25zdCBzdHJ1Y3QgbmZzNF9yZWFkZGlyX2FyZyAqcmVhZGRpciwgc3RydWN0IHJwY19ycXN0ICpyZXEsIHN0cnVjdCBjb21wb3VuZF9oZHIgKmhkcikKIHsKLQl1aW50MzJfdCBhdHRyc1syXSA9IHswLCAwfTsKKwl1aW50MzJfdCBhdHRyc1syXSA9IHsKKwkJRkFUVFI0X1dPUkQwX1JEQVRUUl9FUlJPUiwKKwkJRkFUVFI0X1dPUkQxX01PVU5URURfT05fRklMRUlELAorCX07CiAJdWludDMyX3QgZGlyY291bnQgPSByZWFkZGlyLT5jb3VudCA+PiAxOwogCV9fYmUzMiAqcDsKIAogCWlmIChyZWFkZGlyLT5wbHVzKSB7CiAJCWF0dHJzWzBdIHw9IEZBVFRSNF9XT1JEMF9UWVBFfEZBVFRSNF9XT1JEMF9DSEFOR0V8RkFUVFI0X1dPUkQwX1NJWkV8Ci0JCQlGQVRUUjRfV09SRDBfRlNJRHxGQVRUUjRfV09SRDBfRklMRUhBTkRMRTsKKwkJCUZBVFRSNF9XT1JEMF9GU0lEfEZBVFRSNF9XT1JEMF9GSUxFSEFORExFfEZBVFRSNF9XT1JEMF9GSUxFSUQ7CiAJCWF0dHJzWzFdIHw9IEZBVFRSNF9XT1JEMV9NT0RFfEZBVFRSNF9XT1JEMV9OVU1MSU5LU3xGQVRUUjRfV09SRDFfT1dORVJ8CiAJCQlGQVRUUjRfV09SRDFfT1dORVJfR1JPVVB8RkFUVFI0X1dPUkQxX1JBV0RFVnwKIAkJCUZBVFRSNF9XT1JEMV9TUEFDRV9VU0VEfEZBVFRSNF9XT1JEMV9USU1FX0FDQ0VTU3wKIAkJCUZBVFRSNF9XT1JEMV9USU1FX01FVEFEQVRBfEZBVFRSNF9XT1JEMV9USU1FX01PRElGWTsKIAkJZGlyY291bnQgPj49IDE7CiAJfQotCWF0dHJzWzBdIHw9IEZBVFRSNF9XT1JEMF9SREFUVFJfRVJST1J8RkFUVFI0X1dPUkQwX0ZJTEVJRDsKLQlhdHRyc1sxXSB8PSBGQVRUUjRfV09SRDFfTU9VTlRFRF9PTl9GSUxFSUQ7Ci0JLyogU3dpdGNoIHRvIG1vdW50ZWRfb25fZmlsZWlkIGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgaXQgKi8KLQlpZiAocmVhZGRpci0+Yml0bWFza1sxXSAmIEZBVFRSNF9XT1JEMV9NT1VOVEVEX09OX0ZJTEVJRCkKLQkJYXR0cnNbMF0gJj0gfkZBVFRSNF9XT1JEMF9GSUxFSUQ7Ci0JZWxzZQotCQlhdHRyc1sxXSAmPSB+RkFUVFI0X1dPUkQxX01PVU5URURfT05fRklMRUlEOworCS8qIFVzZSBtb3VudGVkX29uX2ZpbGVpZCBvbmx5IGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgaXQgKi8KKwlpZiAoIShyZWFkZGlyLT5iaXRtYXNrWzFdICYgRkFUVFI0X1dPUkQxX01PVU5URURfT05fRklMRUlEKSkKKwkJYXR0cnNbMF0gfD0gRkFUVFI0X1dPUkQwX0ZJTEVJRDsKIAogCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgMTIrTkZTNF9WRVJJRklFUl9TSVpFKzIwKTsKIAkqcCsrID0gY3B1X3RvX2JlMzIoT1BfUkVBRERJUik7CkBAIC0zMTQwLDcgKzMxMzksNyBAQAogCQkJZ290byBvdXRfb3ZlcmZsb3c7CiAJCXhkcl9kZWNvZGVfaHlwZXIocCwgZmlsZWlkKTsKIAkJYml0bWFwWzFdICY9IH5GQVRUUjRfV09SRDFfTU9VTlRFRF9PTl9GSUxFSUQ7Ci0JCXJldCA9IE5GU19BVFRSX0ZBVFRSX0ZJTEVJRDsKKwkJcmV0ID0gTkZTX0FUVFJfRkFUVFJfTU9VTlRFRF9PTl9GSUxFSUQ7CiAJfQogCWRwcmludGsoIiVzOiBmaWxlaWQ9JUx1XG4iLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcgbG9uZykqZmlsZWlkKTsKIAlyZXR1cm4gcmV0OwpAQCAtNDAwMiw3ICs0MDAxLDYgQEAKIHsKIAlpbnQgc3RhdHVzOwogCXVtb2RlX3QgZm1vZGUgPSAwOwotCXVpbnQ2NF90IGZpbGVpZDsKIAl1aW50MzJfdCB0eXBlOwogCiAJc3RhdHVzID0gZGVjb2RlX2F0dHJfdHlwZSh4ZHIsIGJpdG1hcCwgJnR5cGUpOwpAQCAtNDEwMSwxMyArNDA5OSwxMCBAQAogCQlnb3RvIHhkcl9lcnJvcjsKIAlmYXR0ci0+dmFsaWQgfD0gc3RhdHVzOwogCi0Jc3RhdHVzID0gZGVjb2RlX2F0dHJfbW91bnRlZF9vbl9maWxlaWQoeGRyLCBiaXRtYXAsICZmaWxlaWQpOworCXN0YXR1cyA9IGRlY29kZV9hdHRyX21vdW50ZWRfb25fZmlsZWlkKHhkciwgYml0bWFwLCAmZmF0dHItPm1vdW50ZWRfb25fZmlsZWlkKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byB4ZHJfZXJyb3I7Ci0JaWYgKHN0YXR1cyAhPSAwICYmICEoZmF0dHItPnZhbGlkICYgc3RhdHVzKSkgewotCQlmYXR0ci0+ZmlsZWlkID0gZmlsZWlkOwotCQlmYXR0ci0+dmFsaWQgfD0gc3RhdHVzOwotCX0KKwlmYXR0ci0+dmFsaWQgfD0gc3RhdHVzOwogCiB4ZHJfZXJyb3I6CiAJZHByaW50aygiJXM6IHhkciByZXR1cm5lZCAlZFxuIiwgX19mdW5jX18sIC1zdGF0dXMpOwpAQCAtNDgzOCwxNyArNDgzMywyMSBAQAogCXN0cnVjdCBuZnM0X3NlY2luZm9fZmxhdm9yICpzZWNfZmxhdm9yOwogCWludCBzdGF0dXM7CiAJX19iZTMyICpwOwotCWludCBpOworCWludCBpLCBudW1fZmxhdm9yczsKIAogCXN0YXR1cyA9IGRlY29kZV9vcF9oZHIoeGRyLCBPUF9TRUNJTkZPKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIG91dDsKIAlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKIAlpZiAodW5saWtlbHkoIXApKQogCQlnb3RvIG91dF9vdmVyZmxvdzsKLQlyZXMtPmZsYXZvcnMtPm51bV9mbGF2b3JzID0gYmUzMl90b19jcHVwKHApOwogCi0JZm9yIChpID0gMDsgaSA8IHJlcy0+Zmxhdm9ycy0+bnVtX2ZsYXZvcnM7IGkrKykgeworCXJlcy0+Zmxhdm9ycy0+bnVtX2ZsYXZvcnMgPSAwOworCW51bV9mbGF2b3JzID0gYmUzMl90b19jcHVwKHApOworCisJZm9yIChpID0gMDsgaSA8IG51bV9mbGF2b3JzOyBpKyspIHsKIAkJc2VjX2ZsYXZvciA9ICZyZXMtPmZsYXZvcnMtPmZsYXZvcnNbaV07Ci0JCWlmICgoY2hhciAqKSZzZWNfZmxhdm9yWzFdIC0gKGNoYXIgKilyZXMgPiBQQUdFX1NJWkUpCisJCWlmICgoY2hhciAqKSZzZWNfZmxhdm9yWzFdIC0gKGNoYXIgKilyZXMtPmZsYXZvcnMgPiBQQUdFX1NJWkUpCiAJCQlicmVhazsKIAogCQlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKQEAgLTQ4NTcsMTMgKzQ4NTYsMTUgQEAKIAkJc2VjX2ZsYXZvci0+Zmxhdm9yID0gYmUzMl90b19jcHVwKHApOwogCiAJCWlmIChzZWNfZmxhdm9yLT5mbGF2b3IgPT0gUlBDX0FVVEhfR1NTKSB7Ci0JCQlpZiAoZGVjb2RlX3NlY2luZm9fZ3NzKHhkciwgc2VjX2ZsYXZvcikpCi0JCQkJYnJlYWs7CisJCQlzdGF0dXMgPSBkZWNvZGVfc2VjaW5mb19nc3MoeGRyLCBzZWNfZmxhdm9yKTsKKwkJCWlmIChzdGF0dXMpCisJCQkJZ290byBvdXQ7CiAJCX0KKwkJcmVzLT5mbGF2b3JzLT5udW1fZmxhdm9ycysrOwogCX0KIAotCXJldHVybiAwOwotCitvdXQ6CisJcmV0dXJuIHN0YXR1czsKIG91dF9vdmVyZmxvdzoKIAlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CiAJcmV0dXJuIC1FSU87CkBAIC02NDA4LDcgKzY0MDksOSBAQAogCWlmIChkZWNvZGVfZ2V0ZmF0dHJfYXR0cnMoeGRyLCBiaXRtYXAsIGVudHJ5LT5mYXR0ciwgZW50cnktPmZoLAogCQkJCQllbnRyeS0+c2VydmVyLCAxKSA8IDApCiAJCWdvdG8gb3V0X292ZXJmbG93OwotCWlmIChlbnRyeS0+ZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfRklMRUlEKQorCWlmIChlbnRyeS0+ZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfTU9VTlRFRF9PTl9GSUxFSUQpCisJCWVudHJ5LT5pbm8gPSBlbnRyeS0+ZmF0dHItPm1vdW50ZWRfb25fZmlsZWlkOworCWVsc2UgaWYgKGVudHJ5LT5mYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9GSUxFSUQpCiAJCWVudHJ5LT5pbm8gPSBlbnRyeS0+ZmF0dHItPmZpbGVpZDsKIAogCWVudHJ5LT5kX3R5cGUgPSBEVF9VTktOT1dOOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL3BuZnMuYyBiL2ZzL25mcy9wbmZzLmMKaW5kZXggZDlhYjk3Mi4uZjU3ZjUyOCAxMDA2NDQKLS0tIGEvZnMvbmZzL3BuZnMuYworKysgYi9mcy9uZnMvcG5mcy5jCkBAIC0zODMsNiArMzgzLDcgQEAKIAkJCQlwbGhfbGF5b3V0cyk7CiAJCWRwcmludGsoIiVzIGZyZWVpbmcgbGF5b3V0IGZvciBpbm9kZSAlbHVcbiIsIF9fZnVuY19fLAogCQkJbG8tPnBsaF9pbm9kZS0+aV9pbm8pOworCQlsaXN0X2RlbF9pbml0KCZsby0+cGxoX2xheW91dHMpOwogCQlwbmZzX2Rlc3Ryb3lfbGF5b3V0KE5GU19JKGxvLT5wbGhfaW5vZGUpKTsKIAl9CiB9CkBAIC00NjYsNyArNDY3LDggQEAKIHN0YXRpYyBzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqCiBzZW5kX2xheW91dGdldChzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbywKIAkgICBzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4LAotCSAgIHUzMiBpb21vZGUpCisJICAgdTMyIGlvbW9kZSwKKwkgICBnZnBfdCBnZnBfZmxhZ3MpCiB7CiAJc3RydWN0IGlub2RlICppbm8gPSBsby0+cGxoX2lub2RlOwogCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0VSVkVSKGlubyk7CkBAIC00NzksNyArNDgxLDcgQEAKIAlkcHJpbnRrKCItLT4gJXNcbiIsIF9fZnVuY19fKTsKIAogCUJVR19PTihjdHggPT0gTlVMTCk7Ci0JbGdwID0ga3phbGxvYyhzaXplb2YoKmxncCksIEdGUF9LRVJORUwpOworCWxncCA9IGt6YWxsb2Moc2l6ZW9mKCpsZ3ApLCBnZnBfZmxhZ3MpOwogCWlmIChsZ3AgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTQ4NywxMiArNDg5LDEyIEBACiAJbWF4X3Jlc3Bfc3ogPSBzZXJ2ZXItPm5mc19jbGllbnQtPmNsX3Nlc3Npb24tPmZjX2F0dHJzLm1heF9yZXNwX3N6OwogCW1heF9wYWdlcyA9IG1heF9yZXNwX3N6ID4+IFBBR0VfU0hJRlQ7CiAKLQlwYWdlcyA9IGt6YWxsb2MobWF4X3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTsKKwlwYWdlcyA9IGt6YWxsb2MobWF4X3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBnZnBfZmxhZ3MpOwogCWlmICghcGFnZXMpCiAJCWdvdG8gb3V0X2Vycl9mcmVlOwogCiAJZm9yIChpID0gMDsgaSA8IG1heF9wYWdlczsgaSsrKSB7Ci0JCXBhZ2VzW2ldID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKKwkJcGFnZXNbaV0gPSBhbGxvY19wYWdlKGdmcF9mbGFncyk7CiAJCWlmICghcGFnZXNbaV0pCiAJCQlnb3RvIG91dF9lcnJfZnJlZTsKIAl9CkBAIC01MDgsNiArNTEwLDcgQEAKIAlsZ3AtPmFyZ3MubGF5b3V0LnBhZ2VzID0gcGFnZXM7CiAJbGdwLT5hcmdzLmxheW91dC5wZ2xlbiA9IG1heF9wYWdlcyAqIFBBR0VfU0laRTsKIAlsZ3AtPmxzZWdwcCA9ICZsc2VnOworCWxncC0+Z2ZwX2ZsYWdzID0gZ2ZwX2ZsYWdzOwogCiAJLyogU3luY2hyb25vdXNseSByZXRyaWV2ZSBsYXlvdXQgaW5mb3JtYXRpb24gZnJvbSBzZXJ2ZXIgYW5kCiAJICogc3RvcmUgaW4gbHNlZy4KQEAgLTY2NSwxMSArNjY4LDExIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICoKLWFsbG9jX2luaXRfbGF5b3V0X2hkcihzdHJ1Y3QgaW5vZGUgKmlubykKK2FsbG9jX2luaXRfbGF5b3V0X2hkcihzdHJ1Y3QgaW5vZGUgKmlubywgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvOwogCi0JbG8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyKSwgR0ZQX0tFUk5FTCk7CisJbG8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyKSwgZ2ZwX2ZsYWdzKTsKIAlpZiAoIWxvKQogCQlyZXR1cm4gTlVMTDsKIAlhdG9taWNfc2V0KCZsby0+cGxoX3JlZmNvdW50LCAxKTsKQEAgLTY4MSw3ICs2ODQsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqCi1wbmZzX2ZpbmRfYWxsb2NfbGF5b3V0KHN0cnVjdCBpbm9kZSAqaW5vKQorcG5mc19maW5kX2FsbG9jX2xheW91dChzdHJ1Y3QgaW5vZGUgKmlubywgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm8pOwogCXN0cnVjdCBwbmZzX2xheW91dF9oZHIgKm5ldyA9IE5VTEw7CkBAIC02OTYsNyArNjk5LDcgQEAKIAkJCXJldHVybiBuZnNpLT5sYXlvdXQ7CiAJfQogCXNwaW5fdW5sb2NrKCZpbm8tPmlfbG9jayk7Ci0JbmV3ID0gYWxsb2NfaW5pdF9sYXlvdXRfaGRyKGlubyk7CisJbmV3ID0gYWxsb2NfaW5pdF9sYXlvdXRfaGRyKGlubywgZ2ZwX2ZsYWdzKTsKIAlzcGluX2xvY2soJmluby0+aV9sb2NrKTsKIAogCWlmIChsaWtlbHkobmZzaS0+bGF5b3V0ID09IE5VTEwpKQkvKiBXb24gdGhlIHJhY2U/ICovCkBAIC03NTYsNyArNzU5LDggQEAKIHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICoKIHBuZnNfdXBkYXRlX2xheW91dChzdHJ1Y3QgaW5vZGUgKmlubywKIAkJICAgc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCwKLQkJICAgZW51bSBwbmZzX2lvbW9kZSBpb21vZGUpCisJCSAgIGVudW0gcG5mc19pb21vZGUgaW9tb2RlLAorCQkgICBnZnBfdCBnZnBfZmxhZ3MpCiB7CiAJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlubyk7CiAJc3RydWN0IG5mc19jbGllbnQgKmNscCA9IE5GU19TRVJWRVIoaW5vKS0+bmZzX2NsaWVudDsKQEAgLTc2Nyw3ICs3NzEsNyBAQAogCWlmICghcG5mc19lbmFibGVkX3NiKE5GU19TRVJWRVIoaW5vKSkpCiAJCXJldHVybiBOVUxMOwogCXNwaW5fbG9jaygmaW5vLT5pX2xvY2spOwotCWxvID0gcG5mc19maW5kX2FsbG9jX2xheW91dChpbm8pOworCWxvID0gcG5mc19maW5kX2FsbG9jX2xheW91dChpbm8sIGdmcF9mbGFncyk7CiAJaWYgKGxvID09IE5VTEwpIHsKIAkJZHByaW50aygiJXMgRVJST1I6IGNhbid0IGdldCBwbmZzX2xheW91dF9oZHJcbiIsIF9fZnVuY19fKTsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtODA3LDcgKzgxMSw3IEBACiAJCXNwaW5fdW5sb2NrKCZjbHAtPmNsX2xvY2spOwogCX0KIAotCWxzZWcgPSBzZW5kX2xheW91dGdldChsbywgY3R4LCBpb21vZGUpOworCWxzZWcgPSBzZW5kX2xheW91dGdldChsbywgY3R4LCBpb21vZGUsIGdmcF9mbGFncyk7CiAJaWYgKCFsc2VnICYmIGZpcnN0KSB7CiAJCXNwaW5fbG9jaygmY2xwLT5jbF9sb2NrKTsKIAkJbGlzdF9kZWxfaW5pdCgmbG8tPnBsaF9sYXlvdXRzKTsKQEAgLTg0Niw3ICs4NTAsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAJLyogSW5qZWN0IGxheW91dCBibG9iIGludG8gSS9PIGRldmljZSBkcml2ZXIgKi8KLQlsc2VnID0gTkZTX1NFUlZFUihpbm8pLT5wbmZzX2N1cnJfbGQtPmFsbG9jX2xzZWcobG8sIHJlcyk7CisJbHNlZyA9IE5GU19TRVJWRVIoaW5vKS0+cG5mc19jdXJyX2xkLT5hbGxvY19sc2VnKGxvLCByZXMsIGxncC0+Z2ZwX2ZsYWdzKTsKIAlpZiAoIWxzZWcgfHwgSVNfRVJSKGxzZWcpKSB7CiAJCWlmICghbHNlZykKIAkJCXN0YXR1cyA9IC1FTk9NRU07CkBAIC04OTksNyArOTAzLDggQEAKIAkJLyogVGhpcyBpcyBmaXJzdCBjb2VsZXNjZSBjYWxsIGZvciBhIHNlcmllcyBvZiBuZnNfcGFnZXMgKi8KIAkJcGdpby0+cGdfbHNlZyA9IHBuZnNfdXBkYXRlX2xheW91dChwZ2lvLT5wZ19pbm9kZSwKIAkJCQkJCSAgIHByZXYtPndiX2NvbnRleHQsCi0JCQkJCQkgICBJT01PREVfUkVBRCk7CisJCQkJCQkgICBJT01PREVfUkVBRCwKKwkJCQkJCSAgIEdGUF9LRVJORUwpOwogCX0KIAlyZXR1cm4gTkZTX1NFUlZFUihwZ2lvLT5wZ19pbm9kZSktPnBuZnNfY3Vycl9sZC0+cGdfdGVzdChwZ2lvLCBwcmV2LCByZXEpOwogfQpAQCAtOTIxLDcgKzkyNiw4IEBACiAJCS8qIFRoaXMgaXMgZmlyc3QgY29lbGVzY2UgY2FsbCBmb3IgYSBzZXJpZXMgb2YgbmZzX3BhZ2VzICovCiAJCXBnaW8tPnBnX2xzZWcgPSBwbmZzX3VwZGF0ZV9sYXlvdXQocGdpby0+cGdfaW5vZGUsCiAJCQkJCQkgICBwcmV2LT53Yl9jb250ZXh0LAotCQkJCQkJICAgSU9NT0RFX1JXKTsKKwkJCQkJCSAgIElPTU9ERV9SVywKKwkJCQkJCSAgIEdGUF9OT0ZTKTsKIAl9CiAJcmV0dXJuIE5GU19TRVJWRVIocGdpby0+cGdfaW5vZGUpLT5wbmZzX2N1cnJfbGQtPnBnX3Rlc3QocGdpbywgcHJldiwgcmVxKTsKIH0KQEAgLTEwMDQsNiArMTAxMCw3IEBACiB7CiAJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKHdkYXRhLT5pbm9kZSk7CiAJbG9mZl90IGVuZF9wb3MgPSB3ZGF0YS0+YXJncy5vZmZzZXQgKyB3ZGF0YS0+cmVzLmNvdW50OworCWJvb2wgbWFya19hc19kaXJ0eSA9IGZhbHNlOwogCiAJc3Bpbl9sb2NrKCZuZnNpLT52ZnNfaW5vZGUuaV9sb2NrKTsKIAlpZiAoIXRlc3RfYW5kX3NldF9iaXQoTkZTX0lOT19MQVlPVVRDT01NSVQsICZuZnNpLT5mbGFncykpIHsKQEAgLTEwMTEsMTMgKzEwMTgsMTggQEAKIAkJZ2V0X2xzZWcod2RhdGEtPmxzZWcpOwogCQl3ZGF0YS0+bHNlZy0+cGxzX2xjX2NyZWQgPQogCQkJZ2V0X3JwY2NyZWQod2RhdGEtPmFyZ3MuY29udGV4dC0+c3RhdGUtPm93bmVyLT5zb19jcmVkKTsKLQkJbWFya19pbm9kZV9kaXJ0eV9zeW5jKHdkYXRhLT5pbm9kZSk7CisJCW1hcmtfYXNfZGlydHkgPSB0cnVlOwogCQlkcHJpbnRrKCIlczogU2V0IGxheW91dGNvbW1pdCBmb3IgaW5vZGUgJWx1ICIsCiAJCQlfX2Z1bmNfXywgd2RhdGEtPmlub2RlLT5pX2lubyk7CiAJfQogCWlmIChlbmRfcG9zID4gd2RhdGEtPmxzZWctPnBsc19lbmRfcG9zKQogCQl3ZGF0YS0+bHNlZy0+cGxzX2VuZF9wb3MgPSBlbmRfcG9zOwogCXNwaW5fdW5sb2NrKCZuZnNpLT52ZnNfaW5vZGUuaV9sb2NrKTsKKworCS8qIGlmIHBuZnNfbGF5b3V0Y29tbWl0X2lub2RlKCkgcnVucyBiZXR3ZWVuIGlub2RlIGxvY2tzLCB0aGUgbmV4dCBvbmUKKwkgKiB3aWxsIGJlIGEgbm9vcCBiZWNhdXNlIE5GU19JTk9fTEFZT1VUQ09NTUlUIHdpbGwgbm90IGJlIHNldCAqLworCWlmIChtYXJrX2FzX2RpcnR5KQorCQltYXJrX2lub2RlX2RpcnR5X3N5bmMod2RhdGEtPmlub2RlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBuZnNfc2V0X2xheW91dGNvbW1pdCk7CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9wbmZzLmggYi9mcy9uZnMvcG5mcy5oCmluZGV4IGJjNDgyNzIuLjBjMDE1YmEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9wbmZzLmgKKysrIGIvZnMvbmZzL3BuZnMuaApAQCAtNzAsNyArNzAsNyBAQAogCWNvbnN0IHUzMiBpZDsKIAljb25zdCBjaGFyICpuYW1lOwogCXN0cnVjdCBtb2R1bGUgKm93bmVyOwotCXN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICogKCphbGxvY19sc2VnKSAoc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbGF5b3V0aWQsIHN0cnVjdCBuZnM0X2xheW91dGdldF9yZXMgKmxncik7CisJc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKiAoKmFsbG9jX2xzZWcpIChzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsYXlvdXRpZCwgc3RydWN0IG5mczRfbGF5b3V0Z2V0X3JlcyAqbGdyLCBnZnBfdCBnZnBfZmxhZ3MpOwogCXZvaWQgKCpmcmVlX2xzZWcpIChzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZyk7CiAKIAkvKiB0ZXN0IGZvciBuZnMgcGFnZSBjYWNoZSBjb2FsZXNjaW5nICovCkBAIC0xMjYsNyArMTI2LDcgQEAKIHZvaWQgcHV0X2xzZWcoc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKmxzZWcpOwogc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKgogcG5mc191cGRhdGVfbGF5b3V0KHN0cnVjdCBpbm9kZSAqaW5vLCBzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4LAotCQkgICBlbnVtIHBuZnNfaW9tb2RlIGFjY2Vzc190eXBlKTsKKwkJICAgZW51bSBwbmZzX2lvbW9kZSBhY2Nlc3NfdHlwZSwgZ2ZwX3QgZ2ZwX2ZsYWdzKTsKIHZvaWQgc2V0X3BuZnNfbGF5b3V0ZHJpdmVyKHN0cnVjdCBuZnNfc2VydmVyICosIHUzMiBpZCk7CiB2b2lkIHVuc2V0X3BuZnNfbGF5b3V0ZHJpdmVyKHN0cnVjdCBuZnNfc2VydmVyICopOwogZW51bSBwbmZzX3RyeV9zdGF0dXMgcG5mc190cnlfdG9fd3JpdGVfZGF0YShzdHJ1Y3QgbmZzX3dyaXRlX2RhdGEgKiwKQEAgLTI0NSw3ICsyNDUsNyBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICoKIHBuZnNfdXBkYXRlX2xheW91dChzdHJ1Y3QgaW5vZGUgKmlubywgc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCwKLQkJICAgZW51bSBwbmZzX2lvbW9kZSBhY2Nlc3NfdHlwZSkKKwkJICAgZW51bSBwbmZzX2lvbW9kZSBhY2Nlc3NfdHlwZSwgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL3JlYWQuYyBiL2ZzL25mcy9yZWFkLmMKaW5kZXggN2NkZWQyYi4uMmJjZjBkYyAxMDA2NDQKLS0tIGEvZnMvbmZzL3JlYWQuYworKysgYi9mcy9uZnMvcmVhZC5jCkBAIC0yODgsNyArMjg4LDcgQEAKIAlhdG9taWNfc2V0KCZyZXEtPndiX2NvbXBsZXRlLCByZXF1ZXN0cyk7CiAKIAlCVUdfT04oZGVzYy0+cGdfbHNlZyAhPSBOVUxMKTsKLQlsc2VnID0gcG5mc191cGRhdGVfbGF5b3V0KGRlc2MtPnBnX2lub2RlLCByZXEtPndiX2NvbnRleHQsIElPTU9ERV9SRUFEKTsKKwlsc2VnID0gcG5mc191cGRhdGVfbGF5b3V0KGRlc2MtPnBnX2lub2RlLCByZXEtPndiX2NvbnRleHQsIElPTU9ERV9SRUFELCBHRlBfS0VSTkVMKTsKIAlDbGVhclBhZ2VFcnJvcihwYWdlKTsKIAlvZmZzZXQgPSAwOwogCW5ieXRlcyA9IGRlc2MtPnBnX2NvdW50OwpAQCAtMzUxLDcgKzM1MSw3IEBACiAJfQogCXJlcSA9IG5mc19saXN0X2VudHJ5KGRhdGEtPnBhZ2VzLm5leHQpOwogCWlmICgoIWxzZWcpICYmIGxpc3RfaXNfc2luZ3VsYXIoJmRhdGEtPnBhZ2VzKSkKLQkJbHNlZyA9IHBuZnNfdXBkYXRlX2xheW91dChkZXNjLT5wZ19pbm9kZSwgcmVxLT53Yl9jb250ZXh0LCBJT01PREVfUkVBRCk7CisJCWxzZWcgPSBwbmZzX3VwZGF0ZV9sYXlvdXQoZGVzYy0+cGdfaW5vZGUsIHJlcS0+d2JfY29udGV4dCwgSU9NT0RFX1JFQUQsIEdGUF9LRVJORUwpOwogCiAJcmV0ID0gbmZzX3JlYWRfcnBjc2V0dXAocmVxLCBkYXRhLCAmbmZzX3JlYWRfZnVsbF9vcHMsIGRlc2MtPnBnX2NvdW50LAogCQkJCTAsIGxzZWcpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL3N1cGVyLmMgYi9mcy9uZnMvc3VwZXIuYwppbmRleCAyYjhlOWE1Li5lMjg4ZjA2IDEwMDY0NAotLS0gYS9mcy9uZnMvc3VwZXIuYworKysgYi9mcy9uZnMvc3VwZXIuYwpAQCAtMTAwNCw2ICsxMDA0LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJbW50LT5mbGFncyB8PSBORlNfTU9VTlRfU0VDRkxBVk9VUjsKIAltbnQtPmF1dGhfZmxhdm9yX2xlbiA9IDE7CiAJcmV0dXJuIDE7CiB9CkBAIC0xOTc2LDYgKzE5NzcsMTUgQEAKIAlpZiAoZXJyb3IgPCAwKQogCQlnb3RvIG91dDsKIAorCS8qCisJICogbm9hYyBpcyBhIHNwZWNpYWwgY2FzZS4gSXQgaW1wbGllcyAtbyBzeW5jLCBidXQgdGhhdCdzIG5vdAorCSAqIG5lY2Vzc2FyaWx5IHJlZmxlY3RlZCBpbiB0aGUgbXRhYiBvcHRpb25zLiBkb19yZW1vdW50X3NiCisJICogd2lsbCBjbGVhciBNU19TWU5DSFJPTk9VUyBpZiAtbyBzeW5jIHdhc24ndCBzcGVjaWZpZWQgaW4gdGhlCisJICogcmVtb3VudCBvcHRpb25zLCBzbyB3ZSBoYXZlIHRvIGV4cGxpY2l0bHkgcmVzZXQgaXQuCisJICovCisJaWYgKGRhdGEtPmZsYWdzICYgTkZTX01PVU5UX05PQUMpCisJCSpmbGFncyB8PSBNU19TWU5DSFJPTk9VUzsKKwogCS8qIGNvbXBhcmUgbmV3IG1vdW50IG9wdGlvbnMgd2l0aCBvbGQgb25lcyAqLwogCWVycm9yID0gbmZzX2NvbXBhcmVfcmVtb3VudF9kYXRhKG5mc3MsIGRhdGEpOwogb3V0OgpAQCAtMjIzNSw4ICsyMjQ1LDcgQEAKIAlpZiAoIXMtPnNfcm9vdCkgewogCQkvKiBpbml0aWFsIHN1cGVyYmxvY2svcm9vdCBjcmVhdGlvbiAqLwogCQluZnNfZmlsbF9zdXBlcihzLCBkYXRhKTsKLQkJbmZzX2ZzY2FjaGVfZ2V0X3N1cGVyX2Nvb2tpZSgKLQkJCXMsIGRhdGEgPyBkYXRhLT5mc2NhY2hlX3VuaXEgOiBOVUxMLCBOVUxMKTsKKwkJbmZzX2ZzY2FjaGVfZ2V0X3N1cGVyX2Nvb2tpZShzLCBkYXRhLT5mc2NhY2hlX3VuaXEsIE5VTEwpOwogCX0KIAogCW1udHJvb3QgPSBuZnNfZ2V0X3Jvb3QocywgbW50ZmgsIGRldl9uYW1lKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy93cml0ZS5jIGIvZnMvbmZzL3dyaXRlLmMKaW5kZXggZTRjYmMxMS4uNDljNzE1YiAxMDA2NDQKLS0tIGEvZnMvbmZzL3dyaXRlLmMKKysrIGIvZnMvbmZzL3dyaXRlLmMKQEAgLTY4MCw3ICs2ODAsNiBAQAogCXJlcSA9IG5mc19zZXR1cF93cml0ZV9yZXF1ZXN0KGN0eCwgcGFnZSwgb2Zmc2V0LCBjb3VudCk7CiAJaWYgKElTX0VSUihyZXEpKQogCQlyZXR1cm4gUFRSX0VSUihyZXEpOwotCW5mc19tYXJrX3JlcXVlc3RfZGlydHkocmVxKTsKIAkvKiBVcGRhdGUgZmlsZSBsZW5ndGggKi8KIAluZnNfZ3Jvd19maWxlKHBhZ2UsIG9mZnNldCwgY291bnQpOwogCW5mc19tYXJrX3VwdG9kYXRlKHBhZ2UsIHJlcS0+d2JfcGdiYXNlLCByZXEtPndiX2J5dGVzKTsKQEAgLTk0MCw3ICs5MzksNyBAQAogCWF0b21pY19zZXQoJnJlcS0+d2JfY29tcGxldGUsIHJlcXVlc3RzKTsKIAogCUJVR19PTihkZXNjLT5wZ19sc2VnKTsKLQlsc2VnID0gcG5mc191cGRhdGVfbGF5b3V0KGRlc2MtPnBnX2lub2RlLCByZXEtPndiX2NvbnRleHQsIElPTU9ERV9SVyk7CisJbHNlZyA9IHBuZnNfdXBkYXRlX2xheW91dChkZXNjLT5wZ19pbm9kZSwgcmVxLT53Yl9jb250ZXh0LCBJT01PREVfUlcsIEdGUF9OT0ZTKTsKIAlDbGVhclBhZ2VFcnJvcihwYWdlKTsKIAlvZmZzZXQgPSAwOwogCW5ieXRlcyA9IGRlc2MtPnBnX2NvdW50OwpAQCAtMTAxNCw3ICsxMDEzLDcgQEAKIAl9CiAJcmVxID0gbmZzX2xpc3RfZW50cnkoZGF0YS0+cGFnZXMubmV4dCk7CiAJaWYgKCghbHNlZykgJiYgbGlzdF9pc19zaW5ndWxhcigmZGF0YS0+cGFnZXMpKQotCQlsc2VnID0gcG5mc191cGRhdGVfbGF5b3V0KGRlc2MtPnBnX2lub2RlLCByZXEtPndiX2NvbnRleHQsIElPTU9ERV9SVyk7CisJCWxzZWcgPSBwbmZzX3VwZGF0ZV9sYXlvdXQoZGVzYy0+cGdfaW5vZGUsIHJlcS0+d2JfY29udGV4dCwgSU9NT0RFX1JXLCBHRlBfTk9GUyk7CiAKIAlpZiAoKGRlc2MtPnBnX2lvZmxhZ3MgJiBGTFVTSF9DT05EX1NUQUJMRSkgJiYKIAkgICAgKGRlc2MtPnBnX21vcmVpbyB8fCBORlNfSShkZXNjLT5wZ19pbm9kZSktPm5jb21taXQpKQpAQCAtMTQxOCw4ICsxNDE3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay0+dGtfcGlkLCB0YXNrLT50a19zdGF0dXMpOwogCiAJLyogQ2FsbCB0aGUgTkZTIHZlcnNpb24tc3BlY2lmaWMgY29kZSAqLwotCWlmIChORlNfUFJPVE8oZGF0YS0+aW5vZGUpLT5jb21taXRfZG9uZSh0YXNrLCBkYXRhKSAhPSAwKQotCQlyZXR1cm47CisJTkZTX1BST1RPKGRhdGEtPmlub2RlKS0+Y29tbWl0X2RvbmUodGFzaywgZGF0YSk7CiB9CiAKIHZvaWQgbmZzX2NvbW1pdF9yZWxlYXNlX3BhZ2VzKHN0cnVjdCBuZnNfd3JpdGVfZGF0YSAqZGF0YSkKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHN0YXRlLmMgYi9mcy9uZnNkL25mczRzdGF0ZS5jCmluZGV4IGFhMzA5YWEuLjRjZjA0ZTEgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzZC9uZnM0c3RhdGUuYwpAQCAtMjU4LDYgKzI1OCw3IEBACiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmZwLT5maV9kZWxlZ2VlcykpIHsKIAkJdmZzX3NldGxlYXNlKGZwLT5maV9kZWxlZ19maWxlLCBGX1VOTENLLCAmZnAtPmZpX2xlYXNlKTsKIAkJZnAtPmZpX2xlYXNlID0gTlVMTDsKKwkJZnB1dChmcC0+ZmlfZGVsZWdfZmlsZSk7CiAJCWZwLT5maV9kZWxlZ19maWxlID0gTlVMTDsKIAl9CiB9CkBAIC00MDIsOCArNDAzLDggQEAKIAlpZiAoc3RwLT5zdF9hY2Nlc3NfYm1hcCkgewogCQlvZmxhZyA9IG5mczRfYWNjZXNzX2JtYXBfdG9fb21vZGUoc3RwKTsKIAkJbmZzNF9maWxlX3B1dF9hY2Nlc3Moc3RwLT5zdF9maWxlLCBvZmxhZyk7Ci0JCXB1dF9uZnM0X2ZpbGUoc3RwLT5zdF9maWxlKTsKIAl9CisJcHV0X25mczRfZmlsZShzdHAtPnN0X2ZpbGUpOwogCWttZW1fY2FjaGVfZnJlZShzdGF0ZWlkX3NsYWIsIHN0cCk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL25mc2QvdmZzLmMgYi9mcy9uZnNkL3Zmcy5jCmluZGV4IDJlMWNlYmQuLjEyOWYzYzkgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvdmZzLmMKKysrIGIvZnMvbmZzZC92ZnMuYwpAQCAtMTM2Myw3ICsxMzYzLDcgQEAKIAkJZ290byBvdXQ7CiAJaWYgKCEoaWFwLT5pYV92YWxpZCAmIEFUVFJfTU9ERSkpCiAJCWlhcC0+aWFfbW9kZSA9IDA7Ci0JZXJyID0gZmhfdmVyaWZ5KHJxc3RwLCBmaHAsIFNfSUZESVIsIE5GU0RfTUFZX0NSRUFURSk7CisJZXJyID0gZmhfdmVyaWZ5KHJxc3RwLCBmaHAsIFNfSUZESVIsIE5GU0RfTUFZX0VYRUMpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC0xMzg1LDYgKzEzODUsMTMgQEAKIAlpZiAoSVNfRVJSKGRjaGlsZCkpCiAJCWdvdG8gb3V0X25mc2VycjsKIAorCS8qIElmIGZpbGUgZG9lc24ndCBleGlzdCwgY2hlY2sgZm9yIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBvbmUgKi8KKwlpZiAoIWRjaGlsZC0+ZF9pbm9kZSkgeworCQllcnIgPSBmaF92ZXJpZnkocnFzdHAsIGZocCwgU19JRkRJUiwgTkZTRF9NQVlfQ1JFQVRFKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCX0KKwogCWVyciA9IGZoX2NvbXBvc2UocmVzZmhwLCBmaHAtPmZoX2V4cG9ydCwgZGNoaWxkLCBmaHApOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2FsbG9jLmMgYi9mcy9uaWxmczIvYWxsb2MuYwppbmRleCAwYTBhNjZkLi5mNzY4NDQ4IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvYWxsb2MuYworKysgYi9mcy9uaWxmczIvYWxsb2MuYwpAQCAtNjQ2LDcgKzY0Niw3IEBACiAJdW5zaWduZWQgbG9uZyBncm91cCwgZ3JvdXBfb2Zmc2V0OwogCWludCBpLCBqLCBuLCByZXQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbml0ZW1zOyBpICs9IG4pIHsKKwlmb3IgKGkgPSAwOyBpIDwgbml0ZW1zOyBpID0gaikgewogCQlncm91cCA9IG5pbGZzX3BhbGxvY19ncm91cChpbm9kZSwgZW50cnlfbnJzW2ldLCAmZ3JvdXBfb2Zmc2V0KTsKIAkJcmV0ID0gbmlsZnNfcGFsbG9jX2dldF9kZXNjX2Jsb2NrKGlub2RlLCBncm91cCwgMCwgJmRlc2NfYmgpOwogCQlpZiAocmV0IDwgMCkKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMgYi9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCmluZGV4IDY0MzcyMDIuLjlhM2U2YmIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKKysrIGIvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYwpAQCAtNTM5LDI1ICs1MzksNDEgQEAKIAogLyogV2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCBub2JvZHkgaXMgaGVhcnRiZWF0aW5nIG9uIHRvcCBvZiB1cyAtLQogICogdGhpcyB3aWxsIGhlbHAgZGV0ZWN0IGFuIGludmFsaWQgY29uZmlndXJhdGlvbi4gKi8KLXN0YXRpYyBpbnQgbzJoYl9jaGVja19sYXN0X3RpbWVzdGFtcChzdHJ1Y3QgbzJoYl9yZWdpb24gKnJlZykKK3N0YXRpYyB2b2lkIG8yaGJfY2hlY2tfbGFzdF90aW1lc3RhbXAoc3RydWN0IG8yaGJfcmVnaW9uICpyZWcpCiB7Ci0JaW50IG5vZGVfbnVtLCByZXQ7CiAJc3RydWN0IG8yaGJfZGlza19zbG90ICpzbG90OwogCXN0cnVjdCBvMmhiX2Rpc2tfaGVhcnRiZWF0X2Jsb2NrICpoYl9ibG9jazsKKwljaGFyICplcnJzdHI7CiAKLQlub2RlX251bSA9IG8ybm1fdGhpc19ub2RlKCk7Ci0KLQlyZXQgPSAxOwotCXNsb3QgPSAmcmVnLT5ocl9zbG90c1tub2RlX251bV07CisJc2xvdCA9ICZyZWctPmhyX3Nsb3RzW28ybm1fdGhpc19ub2RlKCldOwogCS8qIERvbid0IGNoZWNrIG9uIG91ciAxc3QgdGltZXN0YW1wICovCi0JaWYgKHNsb3QtPmRzX2xhc3RfdGltZSkgewotCQloYl9ibG9jayA9IHNsb3QtPmRzX3Jhd19ibG9jazsKKwlpZiAoIXNsb3QtPmRzX2xhc3RfdGltZSkKKwkJcmV0dXJuOwogCi0JCWlmIChsZTY0X3RvX2NwdShoYl9ibG9jay0+aGJfc2VxKSAhPSBzbG90LT5kc19sYXN0X3RpbWUpCi0JCQlyZXQgPSAwOwotCX0KKwloYl9ibG9jayA9IHNsb3QtPmRzX3Jhd19ibG9jazsKKwlpZiAobGU2NF90b19jcHUoaGJfYmxvY2stPmhiX3NlcSkgPT0gc2xvdC0+ZHNfbGFzdF90aW1lICYmCisJICAgIGxlNjRfdG9fY3B1KGhiX2Jsb2NrLT5oYl9nZW5lcmF0aW9uKSA9PSBzbG90LT5kc19sYXN0X2dlbmVyYXRpb24gJiYKKwkgICAgaGJfYmxvY2stPmhiX25vZGUgPT0gc2xvdC0+ZHNfbm9kZV9udW0pCisJCXJldHVybjsKIAotCXJldHVybiByZXQ7CisjZGVmaW5lIEVSUlNUUjEJCSJBbm90aGVyIG5vZGUgaXMgaGVhcnRiZWF0aW5nIG9uIGRldmljZSIKKyNkZWZpbmUgRVJSU1RSMgkJIkhlYXJ0YmVhdCBnZW5lcmF0aW9uIG1pc21hdGNoIG9uIGRldmljZSIKKyNkZWZpbmUgRVJSU1RSMwkJIkhlYXJ0YmVhdCBzZXF1ZW5jZSBtaXNtYXRjaCBvbiBkZXZpY2UiCisKKwlpZiAoaGJfYmxvY2stPmhiX25vZGUgIT0gc2xvdC0+ZHNfbm9kZV9udW0pCisJCWVycnN0ciA9IEVSUlNUUjE7CisJZWxzZSBpZiAobGU2NF90b19jcHUoaGJfYmxvY2stPmhiX2dlbmVyYXRpb24pICE9CisJCSBzbG90LT5kc19sYXN0X2dlbmVyYXRpb24pCisJCWVycnN0ciA9IEVSUlNUUjI7CisJZWxzZQorCQllcnJzdHIgPSBFUlJTVFIzOworCisJbWxvZyhNTF9FUlJPUiwgIiVzICglcyk6IGV4cGVjdGVkKCV1OjB4JWxseCwgMHglbGx4KSwgIgorCSAgICAgIm9uZGlzaygldToweCVsbHgsIDB4JWxseClcbiIsIGVycnN0ciwgcmVnLT5ocl9kZXZfbmFtZSwKKwkgICAgIHNsb3QtPmRzX25vZGVfbnVtLCAodW5zaWduZWQgbG9uZyBsb25nKXNsb3QtPmRzX2xhc3RfZ2VuZXJhdGlvbiwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2xvdC0+ZHNfbGFzdF90aW1lLCBoYl9ibG9jay0+aGJfbm9kZSwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUoaGJfYmxvY2stPmhiX2dlbmVyYXRpb24pLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdShoYl9ibG9jay0+aGJfc2VxKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBvMmhiX3ByZXBhcmVfYmxvY2soc3RydWN0IG8yaGJfcmVnaW9uICpyZWcsCkBAIC05ODMsOSArOTk5LDcgQEAKIAkvKiBXaXRoIGFuIHVwIHRvIGRhdGUgdmlldyBvZiB0aGUgc2xvdHMsIHdlIGNhbiBjaGVjayB0aGF0IG5vCiAJICogb3RoZXIgbm9kZSBoYXMgYmVlbiBpbXByb3Blcmx5IGNvbmZpZ3VyZWQgdG8gaGVhcnRiZWF0IGluCiAJICogb3VyIHNsb3QuICovCi0JaWYgKCFvMmhiX2NoZWNrX2xhc3RfdGltZXN0YW1wKHJlZykpCi0JCW1sb2coTUxfRVJST1IsICJEZXZpY2UgXCIlc1wiOiBhbm90aGVyIG5vZGUgaXMgaGVhcnRiZWF0aW5nICIKLQkJICAgICAiaW4gb3VyIHNsb3QhXG4iLCByZWctPmhyX2Rldl9uYW1lKTsKKwlvMmhiX2NoZWNrX2xhc3RfdGltZXN0YW1wKHJlZyk7CiAKIAkvKiBmaWxsIGluIHRoZSBwcm9wZXIgaW5mbyBmb3Igb3VyIG5leHQgaGVhcnRiZWF0ICovCiAJbzJoYl9wcmVwYXJlX2Jsb2NrKHJlZywgcmVnLT5ocl9nZW5lcmF0aW9uKTsKQEAgLTk5OSw4ICsxMDEzLDggQEAKIAl9CiAKIAlpID0gLTE7Ci0Jd2hpbGUoKGkgPSBmaW5kX25leHRfYml0KGNvbmZpZ3VyZWRfbm9kZXMsIE8yTk1fTUFYX05PREVTLCBpICsgMSkpIDwgTzJOTV9NQVhfTk9ERVMpIHsKLQorCXdoaWxlKChpID0gZmluZF9uZXh0X2JpdChjb25maWd1cmVkX25vZGVzLAorCQkJCSBPMk5NX01BWF9OT0RFUywgaSArIDEpKSA8IE8yTk1fTUFYX05PREVTKSB7CiAJCWNoYW5nZSB8PSBvMmhiX2NoZWNrX3Nsb3QocmVnLCAmcmVnLT5ocl9zbG90c1tpXSk7CiAJfQogCkBAIC0xNjkwLDYgKzE3MDQsNyBAQAogCXN0cnVjdCBmaWxlICpmaWxwID0gTlVMTDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDsKIAlzc2l6ZV90IHJldCA9IC1FSU5WQUw7CisJaW50IGxpdmVfdGhyZXNob2xkOwogCiAJaWYgKHJlZy0+aHJfYmRldikKIAkJZ290byBvdXQ7CkBAIC0xNzY2LDggKzE3ODEsMTggQEAKIAkgKiBBIG5vZGUgaXMgY29uc2lkZXJlZCBsaXZlIGFmdGVyIGl0IGhhcyBiZWF0IExJVkVfVEhSRVNIT0xECiAJICogdGltZXMuICBXZSdyZSBub3Qgc3RlYWR5IHVudGlsIHdlJ3ZlIGdpdmVuIHRoZW0gYSBjaGFuY2UKIAkgKiBfYWZ0ZXJfIG91ciBmaXJzdCByZWFkLgorCSAqIFRoZSBkZWZhdWx0IHRocmVzaG9sZCBpcyBiYXJlIG1pbmltdW0gc28gYXMgdG8gbGltaXQgdGhlIGRlbGF5CisJICogZHVyaW5nIG1vdW50cy4gRm9yIGdsb2JhbCBoZWFydGJlYXQsIHRoZSB0aHJlc2hvbGQgZG91YmxlZCBmb3IgdGhlCisJICogZmlyc3QgcmVnaW9uLgogCSAqLwotCWF0b21pY19zZXQoJnJlZy0+aHJfc3RlYWR5X2l0ZXJhdGlvbnMsIE8ySEJfTElWRV9USFJFU0hPTEQgKyAxKTsKKwlsaXZlX3RocmVzaG9sZCA9IE8ySEJfTElWRV9USFJFU0hPTEQ7CisJaWYgKG8yaGJfZ2xvYmFsX2hlYXJ0YmVhdF9hY3RpdmUoKSkgeworCQlzcGluX2xvY2soJm8yaGJfbGl2ZV9sb2NrKTsKKwkJaWYgKG8yaGJfcG9wX2NvdW50KCZvMmhiX3JlZ2lvbl9iaXRtYXAsIE8yTk1fTUFYX1JFR0lPTlMpID09IDEpCisJCQlsaXZlX3RocmVzaG9sZCA8PD0gMTsKKwkJc3Bpbl91bmxvY2soJm8yaGJfbGl2ZV9sb2NrKTsKKwl9CisJYXRvbWljX3NldCgmcmVnLT5ocl9zdGVhZHlfaXRlcmF0aW9ucywgbGl2ZV90aHJlc2hvbGQgKyAxKTsKIAogCWhiX3Rhc2sgPSBrdGhyZWFkX3J1bihvMmhiX3RocmVhZCwgcmVnLCAibzJoYi0lcyIsCiAJCQkgICAgICByZWctPmhyX2l0ZW0uY2lfbmFtZSk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kaXIuYyBiL2ZzL29jZnMyL2Rpci5jCmluZGV4IDlmZTViOGYuLjg1ODJlM2YgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2Rpci5jCisrKyBiL2ZzL29jZnMyL2Rpci5jCkBAIC0yODY4LDcgKzI4NjgsNyBAQAogCQlieXRlcyA9IGJsb2Nrc193YW50ZWQgPDwgc2ItPnNfYmxvY2tzaXplX2JpdHM7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItPmlfc2IpOwogCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koZGlyKTsKLQlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYzsKKwlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyA9IE5VTEw7CiAJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMgPSBOVUxMOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqZGlyZGF0YV9iaCA9IE5VTEw7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpkeF9yb290X2JoID0gTlVMTDsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1kb21haW4uYyBiL2ZzL29jZnMyL2RsbS9kbG1kb21haW4uYwppbmRleCA3NTQwYTQ5Li4zYjE3OWQ2IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtZG9tYWluLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbWRvbWFpbi5jCkBAIC0xNjE0LDcgKzE2MTQsOCBAQAogCXNwaW5fdW5sb2NrKCZkbG0tPnNwaW5sb2NrKTsKIAogCS8qIFN1cHBvcnQgZm9yIGdsb2JhbCBoZWFydGJlYXQgYW5kIG5vZGUgaW5mbyB3YXMgYWRkZWQgaW4gMS4xICovCi0JaWYgKGRsbV9wcm90b2NvbC5wdl9tYWpvciA+IDEgfHwgZGxtX3Byb3RvY29sLnB2X21pbm9yID4gMCkgeworCWlmIChkbG0tPmRsbV9sb2NraW5nX3Byb3RvLnB2X21ham9yID4gMSB8fAorCSAgICBkbG0tPmRsbV9sb2NraW5nX3Byb3RvLnB2X21pbm9yID4gMCkgewogCQlzdGF0dXMgPSBkbG1fc2VuZF9ub2RlaW5mbyhkbG0sIGN0eHQtPnllc19yZXNwX21hcCk7CiAJCWlmIChzdGF0dXMpIHsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1tYXN0ZXIuYyBiL2ZzL29jZnMyL2RsbS9kbG1tYXN0ZXIuYwppbmRleCBmZWRlNTdlLi44NGQxNjYzIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtbWFzdGVyLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbW1hc3Rlci5jCkBAIC0yNTc0LDYgKzI1NzQsOSBAQAogCQlyZXMtPnN0YXRlICY9IH5ETE1fTE9DS19SRVNfTUlHUkFUSU5HOwogCQl3YWtlID0gMTsKIAkJc3Bpbl91bmxvY2soJnJlcy0+c3BpbmxvY2spOworCQlpZiAoZGxtX2lzX2hvc3RfZG93bihyZXQpKQorCQkJZGxtX3dhaXRfZm9yX25vZGVfZGVhdGgoZGxtLCB0YXJnZXQsCisJCQkJCQlETE1fTk9ERV9ERUFUSF9XQUlUX01BWCk7CiAJCWdvdG8gbGVhdmU7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9maWxlLmMgYi9mcy9vY2ZzMi9maWxlLmMKaW5kZXggNDE1NjVhZS4uODk2NTlkNiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZmlsZS5jCisrKyBiL2ZzL29jZnMyL2ZpbGUuYwpAQCAtMTYwNyw2ICsxNjA3LDkgQEAKIAlyYW5nZSA9IGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKSArIG9jZnMyX3JlY19jbHVzdGVycyhlbCwgcmVjKTsKIAogCWlmIChsZTMyX3RvX2NwdShyZWMtPmVfY3BvcykgPj0gdHJ1bmNfc3RhcnQpIHsKKwkJLyoKKwkJICogcmVtb3ZlIGFuIGVudGlyZSBleHRlbnQgcmVjb3JkLgorCQkgKi8KIAkJKnRydW5jX2Nwb3MgPSBsZTMyX3RvX2NwdShyZWMtPmVfY3Bvcyk7CiAJCS8qCiAJCSAqIFNraXAgaG9sZXMgaWYgYW55LgpAQCAtMTYxNyw3ICsxNjIwLDE2IEBACiAJCSpibGtubyA9IGxlNjRfdG9fY3B1KHJlYy0+ZV9ibGtubyk7CiAJCSp0cnVuY19lbmQgPSBsZTMyX3RvX2NwdShyZWMtPmVfY3Bvcyk7CiAJfSBlbHNlIGlmIChyYW5nZSA+IHRydW5jX3N0YXJ0KSB7CisJCS8qCisJCSAqIHJlbW92ZSBhIHBhcnRpYWwgZXh0ZW50IHJlY29yZCwgd2hpY2ggbWVhbnMgd2UncmUKKwkJICogcmVtb3ZpbmcgdGhlIGxhc3QgZXh0ZW50IHJlY29yZC4KKwkJICovCiAJCSp0cnVuY19jcG9zID0gdHJ1bmNfc3RhcnQ7CisJCS8qCisJCSAqIHNraXAgaG9sZSBpZiBhbnkuCisJCSAqLworCQlpZiAocmFuZ2UgPCAqdHJ1bmNfZW5kKQorCQkJKnRydW5jX2VuZCA9IHJhbmdlOwogCQkqdHJ1bmNfbGVuID0gKnRydW5jX2VuZCAtIHRydW5jX3N0YXJ0OwogCQljb2ZmID0gdHJ1bmNfc3RhcnQgLSBsZTMyX3RvX2NwdShyZWMtPmVfY3Bvcyk7CiAJCSpibGtubyA9IGxlNjRfdG9fY3B1KHJlYy0+ZV9ibGtubykgKwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvam91cm5hbC5jIGIvZnMvb2NmczIvam91cm5hbC5jCmluZGV4IGIxNDFhNDQuLjI5NWQ1NjQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2pvdXJuYWwuYworKysgYi9mcy9vY2ZzMi9qb3VybmFsLmMKQEAgLTEyNjAsNiArMTI2MCw5IEBACiB7CiAJc3RydWN0IG9jZnMyX2pvdXJuYWwgKmpvdXJuYWwgPSBvc2ItPmpvdXJuYWw7CiAKKwlpZiAob2NmczJfaXNfaGFyZF9yZWFkb25seShvc2IpKQorCQlyZXR1cm47CisKIAkvKiBObyBuZWVkIHRvIHF1ZXVlIHVwIG91ciB0cnVuY2F0ZV9sb2cgYXMgcmVndWxhciBjbGVhbnVwIHdpbGwgY2F0Y2gKIAkgKiB0aGF0ICovCiAJb2NmczJfcXVldWVfcmVjb3ZlcnlfY29tcGxldGlvbihqb3VybmFsLCBvc2ItPnNsb3RfbnVtLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczJfZnMuaCBiL2ZzL29jZnMyL29jZnMyX2ZzLmgKaW5kZXggYjY4Zjg3YS4uOTM4Mzg3YSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvb2NmczJfZnMuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMl9mcy5oCkBAIC0xMDE5LDcgKzEwMTksNyBAQAogCV9fbGUxNgl4ZV9uYW1lX29mZnNldDsgIC8qIGJ5dGUgb2Zmc2V0IGZyb20gdGhlIDFzdCBlbnRyeSBpbiB0aGUKIAkJCQkgICAgbG9jYWwgeGF0dHIgc3RvcmFnZShpbm9kZSwgeGF0dHIgYmxvY2sgb3IKIAkJCQkgICAgeGF0dHIgYnVja2V0KS4gKi8KLQlfX3U4CXhlX25hbWVfbGVuOwkgLyogeGF0dHIgbmFtZSBsZW4sIGRvZXMndCBpbmNsdWRlIHByZWZpeC4gKi8KKwlfX3U4CXhlX25hbWVfbGVuOwkgLyogeGF0dHIgbmFtZSBsZW4sIGRvZXNuJ3QgaW5jbHVkZSBwcmVmaXguICovCiAJX191OAl4ZV90eXBlOyAgICAgICAgIC8qIHRoZSBsb3cgNyBiaXRzIGluZGljYXRlIHRoZSBuYW1lIHByZWZpeAogCQkJCSAgKiB0eXBlIGFuZCB0aGUgaGlnaGVzdCBiaXQgaW5kaWNhdGVzIHdoZXRoZXIKIAkJCQkgICogdGhlIEVBIGlzIHN0b3JlZCBpbiB0aGUgbG9jYWwgc3RvcmFnZS4gKi8KZGlmZiAtLWdpdCBhL2ZzL3BhcnRpdGlvbnMvZWZpLmMgYi9mcy9wYXJ0aXRpb25zL2VmaS5jCmluZGV4IGFjMGNjYjUuLjE5ZDY3NTAgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvZWZpLmMKKysrIGIvZnMvcGFydGl0aW9ucy9lZmkuYwpAQCAtMzQ4LDYgKzM0OCwxMiBAQAogCQlnb3RvIGZhaWw7CiAJfQogCisJLyogQ2hlY2sgdGhhdCBzaXplb2ZfcGFydGl0aW9uX2VudHJ5IGhhcyB0aGUgY29ycmVjdCB2YWx1ZSAqLworCWlmIChsZTMyX3RvX2NwdSgoKmdwdCktPnNpemVvZl9wYXJ0aXRpb25fZW50cnkpICE9IHNpemVvZihncHRfZW50cnkpKSB7CisJCXByX2RlYnVnKCJHVUlEIFBhcnRpdGl0aW9uIEVudHJ5IFNpemUgY2hlY2sgZmFpbGVkLlxuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKIAlpZiAoISgqcHRlcyA9IGFsbG9jX3JlYWRfZ3B0X2VudHJpZXMoc3RhdGUsICpncHQpKSkKIAkJZ290byBmYWlsOwogCmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2xkbS5jIGIvZnMvcGFydGl0aW9ucy9sZG0uYwppbmRleCBjZTRmNjI0Li5hMjlkNWNjIDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2xkbS5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvbGRtLmMKQEAgLTEzMzUsNiArMTMzNSwxMSBAQAogCiAJbGlzdF9hZGRfdGFpbCAoJmYtPmxpc3QsIGZyYWdzKTsKIGZvdW5kOgorCWlmIChyZWMgPj0gZi0+bnVtKSB7CisJCWxkbV9lcnJvcigiUkVDIHZhbHVlICglZCkgZXhjZWVkcyBOVU0gdmFsdWUgKCVkKSIsIHJlYywgZi0+bnVtKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwogCWlmIChmLT5tYXAgJiAoMSA8PCByZWMpKSB7CiAJCWxkbV9lcnJvciAoIkR1cGxpY2F0ZSBWQkxLLCBwYXJ0ICVkLiIsIHJlYyk7CiAJCWYtPm1hcCAmPSAweDdGOwkJCS8qIE1hcmsgdGhlIGdyb3VwIGFzIGJyb2tlbiAqLwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jCmluZGV4IDJlN2FkZGYuLjMxOGQ4NjUgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvdGFza19tbXUuYworKysgYi9mcy9wcm9jL3Rhc2tfbW11LmMKQEAgLTIxNCw3ICsyMTQsNyBAQAogCWludCBmbGFncyA9IHZtYS0+dm1fZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBpbm8gPSAwOwogCXVuc2lnbmVkIGxvbmcgbG9uZyBwZ29mZiA9IDA7Ci0JdW5zaWduZWQgbG9uZyBzdGFydDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CiAJZGV2X3QgZGV2ID0gMDsKIAlpbnQgbGVuOwogCkBAIC0yMjcsMTMgKzIyNywxNSBAQAogCiAJLyogV2UgZG9uJ3Qgc2hvdyB0aGUgc3RhY2sgZ3VhcmQgcGFnZSBpbiAvcHJvYy9tYXBzICovCiAJc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OwotCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fR1JPV1NET1dOKQotCQlpZiAoIXZtYV9zdGFja19jb250aW51ZSh2bWEtPnZtX3ByZXYsIHZtYS0+dm1fc3RhcnQpKQotCQkJc3RhcnQgKz0gUEFHRV9TSVpFOworCWlmIChzdGFja19ndWFyZF9wYWdlX3N0YXJ0KHZtYSwgc3RhcnQpKQorCQlzdGFydCArPSBQQUdFX1NJWkU7CisJZW5kID0gdm1hLT52bV9lbmQ7CisJaWYgKHN0YWNrX2d1YXJkX3BhZ2VfZW5kKHZtYSwgZW5kKSkKKwkJZW5kIC09IFBBR0VfU0laRTsKIAogCXNlcV9wcmludGYobSwgIiUwOGx4LSUwOGx4ICVjJWMlYyVjICUwOGxseCAlMDJ4OiUwMnggJWx1ICVuIiwKIAkJCXN0YXJ0LAotCQkJdm1hLT52bV9lbmQsCisJCQllbmQsCiAJCQlmbGFncyAmIFZNX1JFQUQgPyAncicgOiAnLScsCiAJCQlmbGFncyAmIFZNX1dSSVRFID8gJ3cnIDogJy0nLAogCQkJZmxhZ3MgJiBWTV9FWEVDID8gJ3gnIDogJy0nLApkaWZmIC0tZ2l0IGEvZnMvcHN0b3JlL3BsYXRmb3JtLmMgYi9mcy9wc3RvcmUvcGxhdGZvcm0uYwppbmRleCBmODM1YTI1Li5mMmMzZmYyIDEwMDY0NAotLS0gYS9mcy9wc3RvcmUvcGxhdGZvcm0uYworKysgYi9mcy9wc3RvcmUvcGxhdGZvcm0uYwpAQCAtMTUyLDIxICsxNTIsMjcgQEAKIHZvaWQgcHN0b3JlX2dldF9yZWNvcmRzKHZvaWQpCiB7CiAJc3RydWN0IHBzdG9yZV9pbmZvICpwc2kgPSBwc2luZm87Ci0Jc2l6ZV90CQkJc2l6ZTsKKwlzc2l6ZV90CQkJc2l6ZTsKIAl1NjQJCQlpZDsKIAllbnVtIHBzdG9yZV90eXBlX2lkCXR5cGU7CiAJc3RydWN0IHRpbWVzcGVjCQl0aW1lOwotCWludAkJCWZhaWxlZCA9IDA7CisJaW50CQkJZmFpbGVkID0gMCwgcmM7CiAKIAlpZiAoIXBzaSkKIAkJcmV0dXJuOwogCiAJbXV0ZXhfbG9jaygmcHNpbmZvLT5idWZfbXV0ZXgpOworCXJjID0gcHNpLT5vcGVuKHBzaSk7CisJaWYgKHJjKQorCQlnb3RvIG91dDsKKwogCXdoaWxlICgoc2l6ZSA9IHBzaS0+cmVhZCgmaWQsICZ0eXBlLCAmdGltZSkpID4gMCkgewotCQlpZiAocHN0b3JlX21rZmlsZSh0eXBlLCBwc2ktPm5hbWUsIGlkLCBwc2ktPmJ1Ziwgc2l6ZSwKKwkJaWYgKHBzdG9yZV9ta2ZpbGUodHlwZSwgcHNpLT5uYW1lLCBpZCwgcHNpLT5idWYsIChzaXplX3Qpc2l6ZSwKIAkJCQkgIHRpbWUsIHBzaS0+ZXJhc2UpKQogCQkJZmFpbGVkKys7CiAJfQorCXBzaS0+Y2xvc2UocHNpKTsKK291dDoKIAltdXRleF91bmxvY2soJnBzaW5mby0+YnVmX211dGV4KTsKIAogCWlmIChmYWlsZWQpCmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCA4YTA2ODgxLi5jMDRmN2UwIDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCisrKyBiL2ZzL3N1cGVyLmMKQEAgLTk0OCw4ICs5NDgsNyBAQAogCSAqIGZpbGVzeXN0ZW1zIHNob3VsZCBuZXZlciBzZXQgc19tYXhieXRlcyBsYXJnZXIgdGhhbiBNQVhfTEZTX0ZJTEVTSVpFCiAJICogYnV0IHNfbWF4Ynl0ZXMgd2FzIGFuIHVuc2lnbmVkIGxvbmcgbG9uZyBmb3IgbWFueSByZWxlYXNlcy4gVGhyb3cKIAkgKiB0aGlzIHdhcm5pbmcgZm9yIGEgbGl0dGxlIHdoaWxlIHRvIHRyeSBhbmQgY2F0Y2ggZmlsZXN5c3RlbXMgdGhhdAotCSAqIHZpb2xhdGUgdGhpcyBydWxlLiBUaGlzIHdhcm5pbmcgc2hvdWxkIGJlIGVpdGhlciByZW1vdmVkIG9yCi0JICogY29udmVydGVkIHRvIGEgQlVHKCkgaW4gMi42LjM0LgorCSAqIHZpb2xhdGUgdGhpcyBydWxlLgogCSAqLwogCVdBUk4oKHNiLT5zX21heGJ5dGVzIDwgMCksICIlcyBzZXQgc2ItPnNfbWF4Ynl0ZXMgdG8gIgogCQkibmVnYXRpdmUgdmFsdWUgKCVsbGQpXG4iLCB0eXBlLT5uYW1lLCBzYi0+c19tYXhieXRlcyk7CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9maWxlLmMgYi9mcy9zeXNmcy9maWxlLmMKaW5kZXggZGEzZmVmZS4uMWFkOGM5MyAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvZmlsZS5jCisrKyBiL2ZzL3N5c2ZzL2ZpbGUuYwpAQCAtMjQsMTMgKzI0LDYgQEAKIAogI2luY2x1ZGUgInN5c2ZzLmgiCiAKLS8qIHVzZWQgaW4gY3Jhc2ggZHVtcHMgdG8gaGVscCB3aXRoIGRlYnVnZ2luZyAqLwotc3RhdGljIGNoYXIgbGFzdF9zeXNmc19maWxlW1BBVEhfTUFYXTsKLXZvaWQgc3lzZnNfcHJpbnRrX2xhc3RfZmlsZSh2b2lkKQotewotCXByaW50ayhLRVJOX0VNRVJHICJsYXN0IHN5c2ZzIGZpbGU6ICVzXG4iLCBsYXN0X3N5c2ZzX2ZpbGUpOwotfQotCiAvKgogICogVGhlcmUncyBvbmUgc3lzZnNfYnVmZmVyIGZvciBlYWNoIG9wZW4gZmlsZSBhbmQgb25lCiAgKiBzeXNmc19vcGVuX2RpcmVudCBmb3IgZWFjaCBzeXNmc19kaXJlbnQgd2l0aCBvbmUgb3IgbW9yZSBvcGVuCkBAIC0zMzcsMTEgKzMzMCw2IEBACiAJc3RydWN0IHN5c2ZzX2J1ZmZlciAqYnVmZmVyOwogCWNvbnN0IHN0cnVjdCBzeXNmc19vcHMgKm9wczsKIAlpbnQgZXJyb3IgPSAtRUFDQ0VTOwotCWNoYXIgKnA7Ci0KLQlwID0gZF9wYXRoKCZmaWxlLT5mX3BhdGgsIGxhc3Rfc3lzZnNfZmlsZSwgc2l6ZW9mKGxhc3Rfc3lzZnNfZmlsZSkpOwotCWlmICghSVNfRVJSKHApKQotCQltZW1tb3ZlKGxhc3Rfc3lzZnNfZmlsZSwgcCwgc3RybGVuKHApICsgMSk7CiAKIAkvKiBuZWVkIGF0dHJfc2QgZm9yIGF0dHIgYW5kIG9wcywgaXRzIHBhcmVudCBmb3Iga29iaiAqLwogCWlmICghc3lzZnNfZ2V0X2FjdGl2ZShhdHRyX3NkKSkKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2dyb3VwLmMgYi9mcy9zeXNmcy9ncm91cC5jCmluZGV4IGM4NzY5ZGMyLi4xOTQ0MTRmIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9ncm91cC5jCisrKyBiL2ZzL3N5c2ZzL2dyb3VwLmMKQEAgLTEwMSw5ICsxMDEsOSBAQAogfQogCiAvKioKLSAqIHN5c2ZzX3VwZGF0ZV9ncm91cCAtIGdpdmVuIGEgZGlyZWN0b3J5IGtvYmplY3QsIGNyZWF0ZSBhbiBhdHRyaWJ1dGUgZ3JvdXAKLSAqIEBrb2JqOglUaGUga29iamVjdCB0byBjcmVhdGUgdGhlIGdyb3VwIG9uCi0gKiBAZ3JwOglUaGUgYXR0cmlidXRlIGdyb3VwIHRvIGNyZWF0ZQorICogc3lzZnNfdXBkYXRlX2dyb3VwIC0gZ2l2ZW4gYSBkaXJlY3Rvcnkga29iamVjdCwgdXBkYXRlIGFuIGF0dHJpYnV0ZSBncm91cAorICogQGtvYmo6CVRoZSBrb2JqZWN0IHRvIHVwZGF0ZSB0aGUgZ3JvdXAgb24KKyAqIEBncnA6CVRoZSBhdHRyaWJ1dGUgZ3JvdXAgdG8gdXBkYXRlCiAgKgogICogVGhpcyBmdW5jdGlvbiB1cGRhdGVzIGFuIGF0dHJpYnV0ZSBncm91cC4gIFVubGlrZQogICogc3lzZnNfY3JlYXRlX2dyb3VwKCksIGl0IHdpbGwgZXhwbGljaXRseSBub3Qgd2FybiBvciBlcnJvciBpZiBhbnkKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2xvZy5jIGIvZnMvdWJpZnMvbG9nLmMKaW5kZXggNGQwY2IxMi4uNDBmYTc4MCAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvbG9nLmMKKysrIGIvZnMvdWJpZnMvbG9nLmMKQEAgLTE3NSwyNiArMTc1LDYgQEAKIH0KIAogLyoqCi0gKiB1Ymlmc19jcmVhdGVfYnVkc19saXN0cyAtIGNyZWF0ZSBqb3VybmFsIGhlYWQgYnVkcyBsaXN0cyBmb3IgcmVtb3VudCBydy4KLSAqIEBjOiBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKLSAqLwotdm9pZCB1Ymlmc19jcmVhdGVfYnVkc19saXN0cyhzdHJ1Y3QgdWJpZnNfaW5mbyAqYykKLXsKLQlzdHJ1Y3QgcmJfbm9kZSAqcDsKLQotCXNwaW5fbG9jaygmYy0+YnVkc19sb2NrKTsKLQlwID0gcmJfZmlyc3QoJmMtPmJ1ZHMpOwotCXdoaWxlIChwKSB7Ci0JCXN0cnVjdCB1Ymlmc19idWQgKmJ1ZCA9IHJiX2VudHJ5KHAsIHN0cnVjdCB1Ymlmc19idWQsIHJiKTsKLQkJc3RydWN0IHViaWZzX2poZWFkICpqaGVhZCA9ICZjLT5qaGVhZHNbYnVkLT5qaGVhZF07Ci0KLQkJbGlzdF9hZGRfdGFpbCgmYnVkLT5saXN0LCAmamhlYWQtPmJ1ZHNfbGlzdCk7Ci0JCXAgPSByYl9uZXh0KHApOwotCX0KLQlzcGluX3VubG9jaygmYy0+YnVkc19sb2NrKTsKLX0KLQotLyoqCiAgKiB1Ymlmc19hZGRfYnVkX3RvX2xvZyAtIGFkZCBhIG5ldyBidWQgdG8gdGhlIGxvZy4KICAqIEBjOiBVQklGUyBmaWxlLXN5c3RlbSBkZXNjcmlwdGlvbiBvYmplY3QKICAqIEBqaGVhZDogam91cm5hbCBoZWFkIHRoZSBidWQgYmVsb25ncyB0bwpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvcmVjb3ZlcnkuYyBiL2ZzL3ViaWZzL3JlY292ZXJ5LmMKaW5kZXggOTM2ZjJjYi4uM2RiYWQ2ZiAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvcmVjb3ZlcnkuYworKysgYi9mcy91Ymlmcy9yZWNvdmVyeS5jCkBAIC0zMTcsNiArMzE3LDMyIEBACiAJCQlnb3RvIG91dF9mcmVlOwogCQl9CiAJCW1lbWNweShjLT5yY3ZyZF9tc3Rfbm9kZSwgYy0+bXN0X25vZGUsIFVCSUZTX01TVF9OT0RFX1NaKTsKKworCQkvKgorCQkgKiBXZSBoYWQgdG8gcmVjb3ZlciB0aGUgbWFzdGVyIG5vZGUsIHdoaWNoIG1lYW5zIHRoZXJlIHdhcyBhbgorCQkgKiB1bmNsZWFuIHJlYm9vdC4gSG93ZXZlciwgaXQgaXMgcG9zc2libGUgdGhhdCB0aGUgbWFzdGVyIG5vZGUKKwkJICogaXMgY2xlYW4gYXQgdGhpcyBwb2ludCwgaS5lLiwgJVVCSUZTX01TVF9ESVJUWSBpcyBub3Qgc2V0LgorCQkgKiBFLmcuLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGNoYWluIG9mIGV2ZW50czoKKwkJICoKKwkJICogMS4gVUJJRlMgd2FzIGNsZWFubHkgdW5tb3VudGVkLCBzbyB0aGUgbWFzdGVyIG5vZGUgaXMgY2xlYW4KKwkJICogMi4gVUJJRlMgaXMgYmVpbmcgbW91bnRlZCBSL1cgYW5kIHN0YXJ0cyBjaGFuZ2luZyB0aGUgbWFzdGVyCisJCSAqICAgIG5vZGUgaW4gdGhlIGZpcnN0ICglVUJJRlNfTVNUX0xOVU0pLiBBIHBvd2VyIGN1dCBoYXBwZW5zLAorCQkgKiAgICBzbyB0aGlzIExFQiBlbmRzIHVwIHdpdGggc29tZSBhbW91bnQgb2YgZ2FyYmFnZSBhdCB0aGUKKwkJICogICAgZW5kLgorCQkgKiAzLiBVQklGUyBpcyBiZWluZyBtb3VudGVkIFIvTy4gV2UgcmVhY2ggdGhpcyBwbGFjZSBhbmQKKwkJICogICAgcmVjb3ZlciB0aGUgbWFzdGVyIG5vZGUgZnJvbSB0aGUgc2Vjb25kIExFQgorCQkgKiAgICAoJVVCSUZTX01TVF9MTlVNICsgMSkuIEJ1dCB3ZSBjYW5ub3QgdXBkYXRlIHRoZSBtZWRpYQorCQkgKiAgICBiZWNhdXNlIHdlIGFyZSBiZWluZyBtb3VudGVkIFIvTy4gV2UgaGF2ZSB0byBkZWZlciB0aGUKKwkJICogICAgb3BlcmF0aW9uLgorCQkgKiA0LiBIb3dldmVyLCB0aGlzIG1hc3RlciBub2RlIChAYy0+bXN0X25vZGUpIGlzIG1hcmtlZCBhcworCQkgKiAgICBjbGVhbiAoc2luY2UgdGhlIHN0ZXAgMSkuIEFuZCBpZiB3ZSBqdXN0IHJldHVybiwgdGhlCisJCSAqICAgIG1vdW50IGNvZGUgd2lsbCBiZSBjb25mdXNlZCBhbmQgd29uJ3QgcmVjb3ZlciB0aGUgbWFzdGVyCisJCSAqICAgIG5vZGUgd2hlbiBpdCBpcyByZS1tb3VudGVyIFIvVyBsYXRlci4KKwkJICoKKwkJICogICAgVGh1cywgdG8gZm9yY2UgdGhlIHJlY292ZXJ5IGJ5IG1hcmtpbmcgdGhlIG1hc3RlciBub2RlIGFzCisJCSAqICAgIGRpcnR5LgorCQkgKi8KKwkJYy0+bXN0X25vZGUtPmZsYWdzIHw9IGNwdV90b19sZTMyKFVCSUZTX01TVF9ESVJUWSk7CiAJfSBlbHNlIHsKIAkJLyogV3JpdGUgdGhlIHJlY292ZXJlZCBtYXN0ZXIgbm9kZSAqLwogCQljLT5tYXhfc3FudW0gPSBsZTY0X3RvX2NwdShtc3QtPmNoLnNxbnVtKSAtIDE7CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9yZXBsYXkuYyBiL2ZzL3ViaWZzL3JlcGxheS5jCmluZGV4IGVlZDBmY2YuLmQzZDZkMzYgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3JlcGxheS5jCisrKyBiL2ZzL3ViaWZzL3JlcGxheS5jCkBAIC01OSw2ICs1OSw3IEBACiAgKiBAbmV3X3NpemU6IHRydW5jYXRpb24gbmV3IHNpemUKICAqIEBmcmVlOiBhbW91bnQgb2YgZnJlZSBzcGFjZSBpbiBhIGJ1ZAogICogQGRpcnR5OiBhbW91bnQgb2YgZGlydHkgc3BhY2UgaW4gYSBidWQgZnJvbSBwYWRkaW5nIGFuZCBkZWxldGlvbiBub2RlcworICogQGpoZWFkOiBqb3VybmFsIGhlYWQgbnVtYmVyIG9mIHRoZSBidWQKICAqCiAgKiBVQklGUyBqb3VybmFsIHJlcGxheSBtdXN0IGNvbXBhcmUgbm9kZSBzZXF1ZW5jZSBudW1iZXJzLCB3aGljaCBtZWFucyBpdCBtdXN0CiAgKiBidWlsZCBhIHRyZWUgb2Ygbm9kZSBpbmZvcm1hdGlvbiB0byBpbnNlcnQgaW50byB0aGUgVE5DLgpAQCAtODAsNiArODEsNyBAQAogCQlzdHJ1Y3QgewogCQkJaW50IGZyZWU7CiAJCQlpbnQgZGlydHk7CisJCQlpbnQgamhlYWQ7CiAJCX07CiAJfTsKIH07CkBAIC0xNTksNiArMTYxLDExIEBACiAJCWVyciA9IFBUUl9FUlIobHApOwogCQlnb3RvIG91dDsKIAl9CisKKwkvKiBNYWtlIHN1cmUgdGhlIGpvdXJuYWwgaGVhZCBwb2ludHMgdG8gdGhlIGxhdGVzdCBidWQgKi8KKwllcnIgPSB1Ymlmc193YnVmX3NlZWtfbm9sb2NrKCZjLT5qaGVhZHNbci0+amhlYWRdLndidWYsIHItPmxudW0sCisJCQkJICAgICBjLT5sZWJfc2l6ZSAtIHItPmZyZWUsIFVCSV9TSE9SVFRFUk0pOworCiBvdXQ6CiAJdWJpZnNfcmVsZWFzZV9scHJvcHMoYyk7CiAJcmV0dXJuIGVycjsKQEAgLTYyNywxMCArNjM0LDYgQEAKIAl1Ymlmc19hc3NlcnQoc2xlYi0+ZW5kcHQgLSBvZmZzID49IHVzZWQpOwogCXViaWZzX2Fzc2VydChzbGViLT5lbmRwdCAlIGMtPm1pbl9pb19zaXplID09IDApOwogCi0JaWYgKHNsZWItPmVuZHB0ICsgYy0+bWluX2lvX3NpemUgPD0gYy0+bGViX3NpemUgJiYgIWMtPnJvX21vdW50KQotCQllcnIgPSB1Ymlmc193YnVmX3NlZWtfbm9sb2NrKCZjLT5qaGVhZHNbamhlYWRdLndidWYsIGxudW0sCi0JCQkJCSAgICAgc2xlYi0+ZW5kcHQsIFVCSV9TSE9SVFRFUk0pOwotCiAJKmRpcnR5ID0gc2xlYi0+ZW5kcHQgLSBvZmZzIC0gdXNlZDsKIAkqZnJlZSA9IGMtPmxlYl9zaXplIC0gc2xlYi0+ZW5kcHQ7CiAKQEAgLTY1MywxMiArNjU2LDE0IEBACiAgKiBAc3FudW06IHNlcXVlbmNlIG51bWJlcgogICogQGZyZWU6IGFtb3VudCBvZiBmcmVlIHNwYWNlIGluIGJ1ZAogICogQGRpcnR5OiBhbW91bnQgb2YgZGlydHkgc3BhY2UgZnJvbSBwYWRkaW5nIGFuZCBkZWxldGlvbiBub2RlcworICogQGpoZWFkOiBqb3VybmFsIGhlYWQgbnVtYmVyIGZvciB0aGUgYnVkCiAgKgogICogVGhpcyBmdW5jdGlvbiBpbnNlcnRzIGEgcmVmZXJlbmNlIG5vZGUgdG8gdGhlIHJlcGxheSB0cmVlIGFuZCByZXR1cm5zIHplcm8KICAqIGluIGNhc2Ugb2Ygc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlLgogICovCiBzdGF0aWMgaW50IGluc2VydF9yZWZfbm9kZShzdHJ1Y3QgdWJpZnNfaW5mbyAqYywgaW50IGxudW0sIGludCBvZmZzLAotCQkJICAgdW5zaWduZWQgbG9uZyBsb25nIHNxbnVtLCBpbnQgZnJlZSwgaW50IGRpcnR5KQorCQkJICAgdW5zaWduZWQgbG9uZyBsb25nIHNxbnVtLCBpbnQgZnJlZSwgaW50IGRpcnR5LAorCQkJICAgaW50IGpoZWFkKQogewogCXN0cnVjdCByYl9ub2RlICoqcCA9ICZjLT5yZXBsYXlfdHJlZS5yYl9ub2RlLCAqcGFyZW50ID0gTlVMTDsKIAlzdHJ1Y3QgcmVwbGF5X2VudHJ5ICpyOwpAQCAtNjg4LDYgKzY5Myw3IEBACiAJci0+ZmxhZ3MgPSBSRVBMQVlfUkVGOwogCXItPmZyZWUgPSBmcmVlOwogCXItPmRpcnR5ID0gZGlydHk7CisJci0+amhlYWQgPSBqaGVhZDsKIAogCXJiX2xpbmtfbm9kZSgmci0+cmIsIHBhcmVudCwgcCk7CiAJcmJfaW5zZXJ0X2NvbG9yKCZyLT5yYiwgJmMtPnJlcGxheV90cmVlKTsKQEAgLTcxMiw3ICs3MTgsNyBAQAogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAkJZXJyID0gaW5zZXJ0X3JlZl9ub2RlKGMsIGItPmJ1ZC0+bG51bSwgYi0+YnVkLT5zdGFydCwgYi0+c3FudW0sCi0JCQkJICAgICAgZnJlZSwgZGlydHkpOworCQkJCSAgICAgIGZyZWUsIGRpcnR5LCBiLT5idWQtPmpoZWFkKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvc3VwZXIuYyBiL2ZzL3ViaWZzL3N1cGVyLmMKaW5kZXggYzc1ZjYxMy4uMDRhZDA3ZiAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvc3VwZXIuYworKysgYi9mcy91Ymlmcy9zdXBlci5jCkBAIC0xMjU3LDEyICsxMjU3LDEyIEBACiAJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCisJZXJyID0gYWxsb2Nfd2J1ZnMoYyk7CisJaWYgKGVycikKKwkJZ290byBvdXRfY2J1ZjsKKwogCXNwcmludGYoYy0+Ymd0X25hbWUsIEJHVF9OQU1FX1BBVFRFUk4sIGMtPnZpLnViaV9udW0sIGMtPnZpLnZvbF9pZCk7CiAJaWYgKCFjLT5yb19tb3VudCkgewotCQllcnIgPSBhbGxvY193YnVmcyhjKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0X2NidWY7Ci0KIAkJLyogQ3JlYXRlIGJhY2tncm91bmQgdGhyZWFkICovCiAJCWMtPmJndCA9IGt0aHJlYWRfY3JlYXRlKHViaWZzX2JnX3RocmVhZCwgYywgIiVzIiwgYy0+Ymd0X25hbWUpOwogCQlpZiAoSVNfRVJSKGMtPmJndCkpIHsKQEAgLTE2MzEsMTIgKzE2MzEsNiBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCi0JZXJyID0gYWxsb2Nfd2J1ZnMoYyk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQl1Ymlmc19jcmVhdGVfYnVkc19saXN0cyhjKTsKLQogCS8qIENyZWF0ZSBiYWNrZ3JvdW5kIHRocmVhZCAqLwogCWMtPmJndCA9IGt0aHJlYWRfY3JlYXRlKHViaWZzX2JnX3RocmVhZCwgYywgIiVzIiwgYy0+Ymd0X25hbWUpOwogCWlmIChJU19FUlIoYy0+Ymd0KSkgewpAQCAtMTY3MSwxNCArMTY2NSwyNSBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCisJZGJnX2dlbigicmUtbW91bnRlZCByZWFkLXdyaXRlIik7CisJYy0+cmVtb3VudGluZ19ydyA9IDA7CisKIAlpZiAoYy0+bmVlZF9yZWNvdmVyeSkgewogCQljLT5uZWVkX3JlY292ZXJ5ID0gMDsKIAkJdWJpZnNfbXNnKCJkZWZlcnJlZCByZWNvdmVyeSBjb21wbGV0ZWQiKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBEbyBub3QgcnVuIHRoZSBkZWJ1Z2dpbmcgc3BhY2UgY2hlY2sgaWYgdGhlIHdlcmUgZG9pbmcKKwkJICogcmVjb3ZlcnksIGJlY2F1c2Ugd2hlbiB3ZSBzYXZlZCB0aGUgaW5mb3JtYXRpb24gd2UgaGFkIHRoZQorCQkgKiBmaWxlLXN5c3RlbSBpbiBhIHN0YXRlIHdoZXJlIHRoZSBUTkMgYW5kIGxwcm9wcyBoYXMgYmVlbgorCQkgKiBtb2RpZmllZCBpbiBtZW1vcnksIGJ1dCBhbGwgdGhlIEkvTyBvcGVyYXRpb25zIChpbmNsdWRpbmcgYQorCQkgKiBjb21taXQpIHdlcmUgZGVmZXJyZWQuIFNvIHRoZSBmaWxlLXN5c3RlbSB3YXMgaW4KKwkJICogIm5vbi1jb21taXR0ZWQiIHN0YXRlLiBOb3cgdGhlIGZpbGUtc3lzdGVtIGlzIGluIGNvbW1pdHRlZAorCQkgKiBzdGF0ZSwgYW5kIG9mIGNvdXJzZSB0aGUgYW1vdW50IG9mIGZyZWUgc3BhY2Ugd2lsbCBjaGFuZ2UKKwkJICogYmVjYXVzZSwgZm9yIGV4YW1wbGUsIHRoZSBvbGQgaW5kZXggc2l6ZSB3YXMgaW1wcmVjaXNlLgorCQkgKi8KKwkJZXJyID0gZGJnX2NoZWNrX3NwYWNlX2luZm8oYyk7CiAJfQotCi0JZGJnX2dlbigicmUtbW91bnRlZCByZWFkLXdyaXRlIik7Ci0JYy0+cmVtb3VudGluZ19ydyA9IDA7Ci0JZXJyID0gZGJnX2NoZWNrX3NwYWNlX2luZm8oYyk7CiAJbXV0ZXhfdW5sb2NrKCZjLT51bW91bnRfbXV0ZXgpOwogCXJldHVybiBlcnI7CiAKQEAgLTE3MzMsNyArMTczOCw2IEBACiAJaWYgKGVycikKIAkJdWJpZnNfcm9fbW9kZShjLCBlcnIpOwogCi0JZnJlZV93YnVmcyhjKTsKIAl2ZnJlZShjLT5vcnBoX2J1Zik7CiAJYy0+b3JwaF9idWYgPSBOVUxMOwogCWtmcmVlKGMtPndyaXRlX3Jlc2VydmVfYnVmKTsKQEAgLTE3NjEsMTAgKzE3NjUsMTIgQEAKIAkgKiBvZiB0aGUgbWVkaWEuIEZvciBleGFtcGxlLCB0aGVyZSB3aWxsIGJlIGRpcnR5IGlub2RlcyBpZiB3ZSBmYWlsZWQKIAkgKiB0byB3cml0ZSB0aGVtIGJhY2sgYmVjYXVzZSBvZiBJL08gZXJyb3JzLgogCSAqLwotCXViaWZzX2Fzc2VydChhdG9taWNfbG9uZ19yZWFkKCZjLT5kaXJ0eV9wZ19jbnQpID09IDApOwotCXViaWZzX2Fzc2VydChjLT5idWRnX2lkeF9ncm93dGggPT0gMCk7Ci0JdWJpZnNfYXNzZXJ0KGMtPmJ1ZGdfZGRfZ3Jvd3RoID09IDApOwotCXViaWZzX2Fzc2VydChjLT5idWRnX2RhdGFfZ3Jvd3RoID09IDApOworCWlmICghYy0+cm9fZXJyb3IpIHsKKwkJdWJpZnNfYXNzZXJ0KGF0b21pY19sb25nX3JlYWQoJmMtPmRpcnR5X3BnX2NudCkgPT0gMCk7CisJCXViaWZzX2Fzc2VydChjLT5idWRnX2lkeF9ncm93dGggPT0gMCk7CisJCXViaWZzX2Fzc2VydChjLT5idWRnX2RkX2dyb3d0aCA9PSAwKTsKKwkJdWJpZnNfYXNzZXJ0KGMtPmJ1ZGdfZGF0YV9ncm93dGggPT0gMCk7CisJfQogCiAJLyoKIAkgKiBUaGUgJ2MtPnVtb3VudF9sb2NrJyBwcmV2ZW50cyByYWNlcyBiZXR3ZWVuIFVCSUZTIG1lbW9yeSBzaHJpbmtlcgpkaWZmIC0tZ2l0IGEvZnMveGF0dHIuYyBiL2ZzL3hhdHRyLmMKaW5kZXggYTE5YWNkYi4uZjFlZjk0OSAxMDA2NDQKLS0tIGEvZnMveGF0dHIuYworKysgYi9mcy94YXR0ci5jCkBAIC02NjYsNyArNjY2LDcgQEAKIAloYW5kbGVyID0geGF0dHJfcmVzb2x2ZV9uYW1lKGRlbnRyeS0+ZF9zYi0+c194YXR0ciwgJm5hbWUpOwogCWlmICghaGFuZGxlcikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCXJldHVybiBoYW5kbGVyLT5zZXQoZGVudHJ5LCBuYW1lLCB2YWx1ZSwgc2l6ZSwgMCwgaGFuZGxlci0+ZmxhZ3MpOworCXJldHVybiBoYW5kbGVyLT5zZXQoZGVudHJ5LCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MsIGhhbmRsZXItPmZsYWdzKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX21lc3NhZ2UuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX21lc3NhZ2UuYwppbmRleCAzY2E3OTU2Li45Zjc2Y2NlIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19tZXNzYWdlLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbWVzc2FnZS5jCkBAIC0zNCw4ICszNCwxMCBAQAogCWNvbnN0IHN0cnVjdCB4ZnNfbW91bnQJKm1wLAogCXN0cnVjdCB2YV9mb3JtYXQJKnZhZikKIHsKLQlpZiAobXAgJiYgbXAtPm1fZnNuYW1lKQorCWlmIChtcCAmJiBtcC0+bV9mc25hbWUpIHsKIAkJcHJpbnRrKCIlc1hGUyAoJXMpOiAlcFZcbiIsIGxldmVsLCBtcC0+bV9mc25hbWUsIHZhZik7CisJCXJldHVybjsKKwl9CiAJcHJpbnRrKCIlc1hGUzogJXBWXG4iLCBsZXZlbCwgdmFmKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jCmluZGV4IGU0ZjljMWIuLjNlODk4YTQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmMKQEAgLTkyNiw2ICs5MjYsNyBAQAogCQkJCQlYRlNfTE9PS1VQX0JBVENILAogCQkJCQlYRlNfSUNJX1JFQ0xBSU1fVEFHKTsKIAkJCWlmICghbnJfZm91bmQpIHsKKwkJCQlkb25lID0gMTsKIAkJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCQlicmVhazsKIAkJCX0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMgYi9mcy94ZnMveGZzX3RyYW5zX2FpbC5jCmluZGV4IGFjZGI5MmYuLjVmYzIzODAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMKKysrIGIvZnMveGZzL3hmc190cmFuc19haWwuYwpAQCAtMzQ2LDIwICszNDYsMjMgQEAKICAqLwogU1RBVElDIHZvaWQKIHhmc19haWxfd29ya2VyKAotCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJKndvcmspCiB7Ci0Jc3RydWN0IHhmc19haWwJKmFpbHAgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLAorCXN0cnVjdCB4ZnNfYWlsCQkqYWlscCA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksCiAJCQkJCXN0cnVjdCB4ZnNfYWlsLCB4YV93b3JrKTsKLQlsb25nCQl0b3V0OwotCXhmc19sc25fdAl0YXJnZXQgPSAgYWlscC0+eGFfdGFyZ2V0OwotCXhmc19sc25fdAlsc247Ci0JeGZzX2xvZ19pdGVtX3QJKmxpcDsKLQlpbnQJCWZsdXNoX2xvZywgY291bnQsIHN0dWNrOwotCXhmc19tb3VudF90CSptcCA9IGFpbHAtPnhhX21vdW50OworCXhmc19tb3VudF90CQkqbXAgPSBhaWxwLT54YV9tb3VudDsKIAlzdHJ1Y3QgeGZzX2FpbF9jdXJzb3IJKmN1ciA9ICZhaWxwLT54YV9jdXJzb3JzOwotCWludAkJcHVzaF94ZnNidWZkID0gMDsKKwl4ZnNfbG9nX2l0ZW1fdAkJKmxpcDsKKwl4ZnNfbHNuX3QJCWxzbjsKKwl4ZnNfbHNuX3QJCXRhcmdldDsKKwlsb25nCQkJdG91dCA9IDEwOworCWludAkJCWZsdXNoX2xvZyA9IDA7CisJaW50CQkJc3R1Y2sgPSAwOworCWludAkJCWNvdW50ID0gMDsKKwlpbnQJCQlwdXNoX3hmc2J1ZmQgPSAwOwogCiAJc3Bpbl9sb2NrKCZhaWxwLT54YV9sb2NrKTsKKwl0YXJnZXQgPSBhaWxwLT54YV90YXJnZXQ7CiAJeGZzX3RyYW5zX2FpbF9jdXJzb3JfaW5pdChhaWxwLCBjdXIpOwogCWxpcCA9IHhmc190cmFuc19haWxfY3Vyc29yX2ZpcnN0KGFpbHAsIGN1ciwgYWlscC0+eGFfbGFzdF9wdXNoZWRfbHNuKTsKIAlpZiAoIWxpcCB8fCBYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkgewpAQCAtMzY4LDggKzM3MSw3IEBACiAJCSAqLwogCQl4ZnNfdHJhbnNfYWlsX2N1cnNvcl9kb25lKGFpbHAsIGN1cik7CiAJCXNwaW5fdW5sb2NrKCZhaWxwLT54YV9sb2NrKTsKLQkJYWlscC0+eGFfbGFzdF9wdXNoZWRfbHNuID0gMDsKLQkJcmV0dXJuOworCQlnb3RvIG91dF9kb25lOwogCX0KIAogCVhGU19TVEFUU19JTkMoeHNfcHVzaF9haWwpOwpAQCAtMzg2LDggKzM4OCw3IEBACiAJICogbG90cyBvZiBjb250ZW50aW9uIG9uIHRoZSBBSUwgbGlzdHMuCiAJICovCiAJbHNuID0gbGlwLT5saV9sc247Ci0JZmx1c2hfbG9nID0gc3R1Y2sgPSBjb3VudCA9IDA7Ci0Jd2hpbGUgKChYRlNfTFNOX0NNUChsaXAtPmxpX2xzbiwgdGFyZ2V0KSA8IDApKSB7CisJd2hpbGUgKChYRlNfTFNOX0NNUChsaXAtPmxpX2xzbiwgdGFyZ2V0KSA8PSAwKSkgewogCQlpbnQJbG9ja19yZXN1bHQ7CiAJCS8qCiAJCSAqIElmIHdlIGNhbiBsb2NrIHRoZSBpdGVtIHdpdGhvdXQgc2xlZXBpbmcsIHVubG9jayB0aGUgQUlMCkBAIC00ODAsMjEgKzQ4MSwyNSBAQAogCX0KIAogCS8qIGFzc3VtZSB3ZSBoYXZlIG1vcmUgd29yayB0byBkbyBpbiBhIHNob3J0IHdoaWxlICovCi0JdG91dCA9IDEwOworb3V0X2RvbmU6CiAJaWYgKCFjb3VudCkgewogCQkvKiBXZSdyZSBwYXN0IG91ciB0YXJnZXQgb3IgZW1wdHksIHNvIGlkbGUgKi8KIAkJYWlscC0+eGFfbGFzdF9wdXNoZWRfbHNuID0gMDsKIAogCQkvKgotCQkgKiBDaGVjayBmb3IgYW4gdXBkYXRlZCBwdXNoIHRhcmdldCBiZWZvcmUgY2xlYXJpbmcgdGhlCi0JCSAqIFhGU19BSUxfUFVTSElOR19CSVQuIElmIHRoZSB0YXJnZXQgY2hhbmdlZCwgd2UndmUgZ290IG1vcmUKLQkJICogd29yayB0byBkby4gV2FpdCBhIGJpdCBsb25nZXIgYmVmb3JlIHN0YXJ0aW5nIHRoYXQgd29yay4KKwkJICogV2UgY2xlYXIgdGhlIFhGU19BSUxfUFVTSElOR19CSVQgZmlyc3QgYmVmb3JlIGNoZWNraW5nCisJCSAqIHdoZXRoZXIgdGhlIHRhcmdldCBoYXMgY2hhbmdlZC4gSWYgdGhlIHRhcmdldCBoYXMgY2hhbmdlZCwKKwkJICogdGhpcyBwdXNoZXMgdGhlIHJlcXVldWUgcmFjZSBkaXJlY3RseSBvbnRvIHRoZSByZXN1bHQgb2YgdGhlCisJCSAqIGF0b21pYyB0ZXN0L3NldCBiaXQsIHNvIHdlIGFyZSBndWFyYW50ZWVkIHRoYXQgZWl0aGVyIHRoZQorCQkgKiB0aGUgcHVzaGVyIHRoYXQgY2hhbmdlZCB0aGUgdGFyZ2V0IG9yIG91cnNlbHZlcyB3aWxsIHJlcXVldWUKKwkJICogdGhlIHdvcmsgKGJ1dCBub3QgYm90aCkuCiAJCSAqLworCQljbGVhcl9iaXQoWEZTX0FJTF9QVVNISU5HX0JJVCwgJmFpbHAtPnhhX2ZsYWdzKTsKIAkJc21wX3JtYigpOwotCQlpZiAoYWlscC0+eGFfdGFyZ2V0ID09IHRhcmdldCkgewotCQkJY2xlYXJfYml0KFhGU19BSUxfUFVTSElOR19CSVQsICZhaWxwLT54YV9mbGFncyk7CisJCWlmIChYRlNfTFNOX0NNUChhaWxwLT54YV90YXJnZXQsIHRhcmdldCkgPT0gMCB8fAorCQkgICAgdGVzdF9hbmRfc2V0X2JpdChYRlNfQUlMX1BVU0hJTkdfQklULCAmYWlscC0+eGFfZmxhZ3MpKQogCQkJcmV0dXJuOwotCQl9CisKIAkJdG91dCA9IDUwOwogCX0gZWxzZSBpZiAoWEZTX0xTTl9DTVAobHNuLCB0YXJnZXQpID49IDApIHsKIAkJLyoKQEAgLTU1Myw3ICs1NTgsNyBAQAogCSAqIHRoZSBYRlNfQUlMX1BVU0hJTkdfQklULgogCSAqLwogCXNtcF93bWIoKTsKLQlhaWxwLT54YV90YXJnZXQgPSB0aHJlc2hvbGRfbHNuOworCXhmc190cmFuc19haWxfY29weV9sc24oYWlscCwgJmFpbHAtPnhhX3RhcmdldCwgJnRocmVzaG9sZF9sc24pOwogCWlmICghdGVzdF9hbmRfc2V0X2JpdChYRlNfQUlMX1BVU0hJTkdfQklULCAmYWlscC0+eGFfZmxhZ3MpKQogCQlxdWV1ZV9kZWxheWVkX3dvcmsoeGZzX3N5bmNkX3dxLCAmYWlscC0+eGFfd29yaywgMCk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKaW5kZXggYmQyOTdhMi4uMDc3YzAwZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaApAQCAtMTcwLDYgKzE3MCwxMCBAQAogCVNUUlVDVF9BTElHTigpOwkJCQkJCQlcCiAJKihfX3RyYWNlcG9pbnRzKQkJCQkJCVwKIAkvKiBpbXBsZW1lbnQgZHluYW1pYyBwcmludGsgZGVidWcgKi8JCQkJXAorCS4gPSBBTElHTig4KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX2p1bXBfdGFibGUpID0gLjsgICAgICAgICAgICAgICAgICAgICAgIFwKKwkqKF9fanVtcF90YWJsZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX2p1bXBfdGFibGUpID0gLjsgICAgICAgICAgICAgICAgICAgICAgICBcCiAJLiA9IEFMSUdOKDgpOwkJCQkJCQlcCiAJVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX3ZlcmJvc2UpID0gLjsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkqKF9fdmVyYm9zZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMjI4LDggKzIzMiw2IEBACiAJCQkJCQkJCQlcCiAJQlVHX1RBQkxFCQkJCQkJCVwKIAkJCQkJCQkJCVwKLQlKVU1QX1RBQkxFCQkJCQkJCVwKLQkJCQkJCQkJCVwKIAkvKiBQQ0kgcXVpcmtzICovCQkJCQkJXAogCS5wY2lfZml4dXAgICAgICAgIDogQVQoQUREUigucGNpX2ZpeHVwKSAtIExPQURfT0ZGU0VUKSB7CVwKIAkJVk1MSU5VWF9TWU1CT0woX19zdGFydF9wY2lfZml4dXBzX2Vhcmx5KSA9IC47CQlcCkBAIC0yNzQsNzAgKzI3Niw3MCBAQAogCS8qIEtlcm5lbCBzeW1ib2wgdGFibGU6IE5vcm1hbCBzeW1ib2xzICovCQkJXAogCV9fa3N5bXRhYiAgICAgICAgIDogQVQoQUREUihfX2tzeW10YWIpIC0gTE9BRF9PRkZTRVQpIHsJCVwKIAkJVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX2tzeW10YWIpID0gLjsJCQlcCi0JCSooX19rc3ltdGFiKQkJCQkJCVwKKwkJKihTT1JUKF9fX2tzeW10YWIrKikpCQkJCQlcCiAJCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX2tzeW10YWIpID0gLjsJCQlcCiAJfQkJCQkJCQkJXAogCQkJCQkJCQkJXAogCS8qIEtlcm5lbCBzeW1ib2wgdGFibGU6IEdQTC1vbmx5IHN5bWJvbHMgKi8JCQlcCiAJX19rc3ltdGFiX2dwbCAgICAgOiBBVChBRERSKF9fa3N5bXRhYl9ncGwpIC0gTE9BRF9PRkZTRVQpIHsJXAogCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fa3N5bXRhYl9ncGwpID0gLjsJCVwKLQkJKihfX2tzeW10YWJfZ3BsKQkJCQkJXAorCQkqKFNPUlQoX19fa3N5bXRhYl9ncGwrKikpCQkJCVwKIAkJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fa3N5bXRhYl9ncGwpID0gLjsJCVwKIAl9CQkJCQkJCQlcCiAJCQkJCQkJCQlcCiAJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogTm9ybWFsIHVudXNlZCBzeW1ib2xzICovCQlcCiAJX19rc3ltdGFiX3VudXNlZCAgOiBBVChBRERSKF9fa3N5bXRhYl91bnVzZWQpIC0gTE9BRF9PRkZTRVQpIHsJXAogCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fa3N5bXRhYl91bnVzZWQpID0gLjsJCVwKLQkJKihfX2tzeW10YWJfdW51c2VkKQkJCQkJXAorCQkqKFNPUlQoX19fa3N5bXRhYl91bnVzZWQrKikpCQkJCVwKIAkJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fa3N5bXRhYl91bnVzZWQpID0gLjsJCVwKIAl9CQkJCQkJCQlcCiAJCQkJCQkJCQlcCiAJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogR1BMLW9ubHkgdW51c2VkIHN5bWJvbHMgKi8JCVwKIAlfX2tzeW10YWJfdW51c2VkX2dwbCA6IEFUKEFERFIoX19rc3ltdGFiX3VudXNlZF9ncGwpIC0gTE9BRF9PRkZTRVQpIHsgXAogCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fa3N5bXRhYl91bnVzZWRfZ3BsKSA9IC47CVwKLQkJKihfX2tzeW10YWJfdW51c2VkX2dwbCkJCQkJCVwKKwkJKihTT1JUKF9fX2tzeW10YWJfdW51c2VkX2dwbCsqKSkJCQlcCiAJCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX2tzeW10YWJfdW51c2VkX2dwbCkgPSAuOwlcCiAJfQkJCQkJCQkJXAogCQkJCQkJCQkJXAogCS8qIEtlcm5lbCBzeW1ib2wgdGFibGU6IEdQTC1mdXR1cmUtb25seSBzeW1ib2xzICovCQlcCiAJX19rc3ltdGFiX2dwbF9mdXR1cmUgOiBBVChBRERSKF9fa3N5bXRhYl9ncGxfZnV0dXJlKSAtIExPQURfT0ZGU0VUKSB7IFwKIAkJVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX2tzeW10YWJfZ3BsX2Z1dHVyZSkgPSAuOwlcCi0JCSooX19rc3ltdGFiX2dwbF9mdXR1cmUpCQkJCQlcCisJCSooU09SVChfX19rc3ltdGFiX2dwbF9mdXR1cmUrKikpCQkJXAogCQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX19rc3ltdGFiX2dwbF9mdXR1cmUpID0gLjsJXAogCX0JCQkJCQkJCVwKIAkJCQkJCQkJCVwKIAkvKiBLZXJuZWwgc3ltYm9sIHRhYmxlOiBOb3JtYWwgc3ltYm9scyAqLwkJCVwKIAlfX2tjcmN0YWIgICAgICAgICA6IEFUKEFERFIoX19rY3JjdGFiKSAtIExPQURfT0ZGU0VUKSB7CQlcCiAJCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX19rY3JjdGFiKSA9IC47CQkJXAotCQkqKF9fa2NyY3RhYikJCQkJCQlcCisJCSooU09SVChfX19rY3JjdGFiKyopKQkJCQkJXAogCQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX19rY3JjdGFiKSA9IC47CQkJXAogCX0JCQkJCQkJCVwKIAkJCQkJCQkJCVwKIAkvKiBLZXJuZWwgc3ltYm9sIHRhYmxlOiBHUEwtb25seSBzeW1ib2xzICovCQkJXAogCV9fa2NyY3RhYl9ncGwgICAgIDogQVQoQUREUihfX2tjcmN0YWJfZ3BsKSAtIExPQURfT0ZGU0VUKSB7CVwKIAkJVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX2tjcmN0YWJfZ3BsKSA9IC47CQlcCi0JCSooX19rY3JjdGFiX2dwbCkJCQkJCVwKKwkJKihTT1JUKF9fX2tjcmN0YWJfZ3BsKyopKQkJCQlcCiAJCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX2tjcmN0YWJfZ3BsKSA9IC47CQlcCiAJfQkJCQkJCQkJXAogCQkJCQkJCQkJXAogCS8qIEtlcm5lbCBzeW1ib2wgdGFibGU6IE5vcm1hbCB1bnVzZWQgc3ltYm9scyAqLwkJXAogCV9fa2NyY3RhYl91bnVzZWQgIDogQVQoQUREUihfX2tjcmN0YWJfdW51c2VkKSAtIExPQURfT0ZGU0VUKSB7CVwKIAkJVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX2tjcmN0YWJfdW51c2VkKSA9IC47CQlcCi0JCSooX19rY3JjdGFiX3VudXNlZCkJCQkJCVwKKwkJKihTT1JUKF9fX2tjcmN0YWJfdW51c2VkKyopKQkJCQlcCiAJCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX2tjcmN0YWJfdW51c2VkKSA9IC47CQlcCiAJfQkJCQkJCQkJXAogCQkJCQkJCQkJXAogCS8qIEtlcm5lbCBzeW1ib2wgdGFibGU6IEdQTC1vbmx5IHVudXNlZCBzeW1ib2xzICovCQlcCiAJX19rY3JjdGFiX3VudXNlZF9ncGwgOiBBVChBRERSKF9fa2NyY3RhYl91bnVzZWRfZ3BsKSAtIExPQURfT0ZGU0VUKSB7IFwKIAkJVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX2tjcmN0YWJfdW51c2VkX2dwbCkgPSAuOwlcCi0JCSooX19rY3JjdGFiX3VudXNlZF9ncGwpCQkJCQlcCisJCSooU09SVChfX19rY3JjdGFiX3VudXNlZF9ncGwrKikpCQkJXAogCQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX19rY3JjdGFiX3VudXNlZF9ncGwpID0gLjsJXAogCX0JCQkJCQkJCVwKIAkJCQkJCQkJCVwKIAkvKiBLZXJuZWwgc3ltYm9sIHRhYmxlOiBHUEwtZnV0dXJlLW9ubHkgc3ltYm9scyAqLwkJXAogCV9fa2NyY3RhYl9ncGxfZnV0dXJlIDogQVQoQUREUihfX2tjcmN0YWJfZ3BsX2Z1dHVyZSkgLSBMT0FEX09GRlNFVCkgeyBcCiAJCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX19rY3JjdGFiX2dwbF9mdXR1cmUpID0gLjsJXAotCQkqKF9fa2NyY3RhYl9ncGxfZnV0dXJlKQkJCQkJXAorCQkqKFNPUlQoX19fa2NyY3RhYl9ncGxfZnV0dXJlKyopKQkJCVwKIAkJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fa2NyY3RhYl9ncGxfZnV0dXJlKSA9IC47CVwKIAl9CQkJCQkJCQlcCiAJCQkJCQkJCQlcCkBAIC01ODksMTQgKzU5MSw2IEBACiAjZGVmaW5lIEJVR19UQUJMRQogI2VuZGlmCiAKLSNkZWZpbmUgSlVNUF9UQUJMRQkJCQkJCQlcCi0JLiA9IEFMSUdOKDgpOwkJCQkJCQlcCi0JX19qdW1wX3RhYmxlIDogQVQoQUREUihfX2p1bXBfdGFibGUpIC0gTE9BRF9PRkZTRVQpIHsJCVwKLQkJVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX2p1bXBfdGFibGUpID0gLjsJCVwKLQkJKihfX2p1bXBfdGFibGUpCQkJCQkJXAotCQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX19qdW1wX3RhYmxlKSA9IC47CQlcCi0JfQotCiAjaWZkZWYgQ09ORklHX1BNX1RSQUNFCiAjZGVmaW5lIFRSQUNFREFUQQkJCQkJCQlcCiAJLiA9IEFMSUdOKDQpOwkJCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3hvci5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy94b3IuaAppbmRleCBhYWFiODc1Li42MDI4ZmI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3hvci5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMveG9yLmgKQEAgLTEzLDcgKzEzLDcgQEAKICAqIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogc3RhdGljIHZvaWQKIHhvcl84cmVnc18yKHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnAxLCB1bnNpZ25lZCBsb25nICpwMikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaCBiL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaAppbmRleCBmMjJlN2ZlLi5jOTljM2QzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2ZiX2hlbHBlci5oCkBAIC0xMTgsNiArMTE4LDcgQEAKIAkJCSAgICB1bnNpZ25lZCB0cmFuc3AsCiAJCQkgICAgc3RydWN0IGZiX2luZm8gKmluZm8pOwogCitib29sIGRybV9mYl9oZWxwZXJfcmVzdG9yZV9mYmRldl9tb2RlKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIpOwogdm9pZCBkcm1fZmJfaGVscGVyX3Jlc3RvcmUodm9pZCk7CiB2b2lkIGRybV9mYl9oZWxwZXJfZmlsbF92YXIoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCiAJCQkgICAgdWludDMyX3QgZmJfd2lkdGgsIHVpbnQzMl90IGZiX2hlaWdodCk7CkBAIC0xMjYsNyArMTI3LDcgQEAKIAogaW50IGRybV9mYl9oZWxwZXJfc2V0Y21hcChzdHJ1Y3QgZmJfY21hcCAqY21hcCwgc3RydWN0IGZiX2luZm8gKmluZm8pOwogCi1ib29sIGRybV9mYl9oZWxwZXJfaG90cGx1Z19ldmVudChzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKTsKK2ludCBkcm1fZmJfaGVscGVyX2hvdHBsdWdfZXZlbnQoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcik7CiBib29sIGRybV9mYl9oZWxwZXJfaW5pdGlhbF9jb25maWcoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwgaW50IGJwcF9zZWwpOwogaW50IGRybV9mYl9oZWxwZXJfc2luZ2xlX2FkZF9hbGxfY29ubmVjdG9ycyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKTsKIGludCBkcm1fZmJfaGVscGVyX2RlYnVnX2VudGVyKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9tbS5oIGIvaW5jbHVkZS9kcm0vZHJtX21tLmgKaW5kZXggYzJmOTNhOC4uNTY0YjE0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX21tLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX21tLmgKQEAgLTg2LDcgKzg2LDcgQEAKIH0KICNkZWZpbmUgZHJtX21tX2Zvcl9lYWNoX25vZGUoZW50cnksIG1tKSBsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcCiAJCQkJCQkmKG1tKS0+aGVhZF9ub2RlLm5vZGVfbGlzdCwgXAotCQkJCQkJbm9kZV9saXN0KTsKKwkJCQkJCW5vZGVfbGlzdCkKICNkZWZpbmUgZHJtX21tX2Zvcl9lYWNoX3NjYW5uZWRfbm9kZV9yZXZlcnNlKGVudHJ5LCBuLCBtbSkgXAogCWZvciAoZW50cnkgPSAobW0pLT5wcmV2X3NjYW5uZWRfbm9kZSwgXAogCQluZXh0ID0gZW50cnkgPyBsaXN0X2VudHJ5KGVudHJ5LT5ub2RlX2xpc3QubmV4dCwgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oIGIvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCmluZGV4IDgxNmUzMGMuLmYwNGIyYTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKQEAgLTE1NSw2ICsxNTUsNyBAQAogCXsweDEwMDIsIDB4NjcxOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9DQVlNQU58UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2NzFjLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NBWU1BTnxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY3MWQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ0FZTUFOfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NjcxZiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9DQVlNQU58UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2NzIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0JBUlRTfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY3MjEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQkFSVFN8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NjcyMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9CQVJUU3xSQURFT05fTkVXX01FTU1BUH0sIFwKQEAgLTE2Nyw2ICsxNjgsNyBAQAogCXsweDEwMDIsIDB4NjcyOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9CQVJUU3xSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY3MzgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQkFSVFN8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2NzM5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0JBUlRTfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NjczZSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9CQVJUU3xSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY3NDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfVFVSS1N8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4Njc0MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9UVVJLU3xSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2NzQyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1RVUktTfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKQEAgLTE5OSw2ICsyMDEsNyBAQAogCXsweDEwMDIsIDB4Njg4RCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9DWVBSRVNTfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4Njg5OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9DWVBSRVNTfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4Njg5OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9DWVBSRVNTfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4Njg5YiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9DWVBSRVNTfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4Njg5YywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9IRU1MT0NLfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4Njg5ZCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9IRU1MT0NLfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4Njg5ZSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9DWVBSRVNTfFJBREVPTl9ORVdfTUVNTUFQfSwgXApAQCAtMjA5LDcgKzIxMiw5IEBACiAJezB4MTAwMiwgMHg2OGIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0pVTklQRVJ8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NjhiOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9KVU5JUEVSfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NjhiOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9KVU5JUEVSfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NjhiYSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9KVU5JUEVSfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NjhiZSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9KVU5JUEVSfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NjhiZiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9KVU5JUEVSfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NjhjMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SRURXT09EfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY4YzEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUkVEV09PRHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2OGM3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JFRFdPT0R8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oIGIvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oCmluZGV4IDNiY2UxYTQuLjc4N2Y3YjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaAorKysgYi9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmgKQEAgLTkwOSw2ICs5MDksOCBAQAogI2RlZmluZSBSQURFT05fSU5GT19XQU5UX0NNQVNLCQkweDA4IC8qIGdldCBhY2Nlc3MgdG8gQ01BU0sgb24gcjMwMCAqLwogI2RlZmluZSBSQURFT05fSU5GT19DTE9DS19DUllTVEFMX0ZSRVEJMHgwOSAvKiBjbG9jayBjcnlzdGFsIGZyZXF1ZW5jeSAqLwogI2RlZmluZSBSQURFT05fSU5GT19OVU1fQkFDS0VORFMJMHgwYSAvKiBEQi9iYWNrZW5kcyBmb3IgcjYwMCsgLSBuZWVkIGZvciBPUSAqLworI2RlZmluZSBSQURFT05fSU5GT19OVU1fVElMRV9QSVBFUwkweDBiIC8qIHRpbGUgcGlwZXMgZm9yIHI2MDArICovCisjZGVmaW5lIFJBREVPTl9JTkZPX0ZVU0lPTl9HQVJUX1dPUktJTkcJMHgwYyAvKiBmdXNpb24gd3JpdGVzIHRvIEdUVCB3ZXJlIGJyb2tlbiBiZWZvcmUgdGhpcyAqLwogCiBzdHJ1Y3QgZHJtX3JhZGVvbl9pbmZvIHsKIAl1aW50MzJfdAkJcmVxdWVzdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWxhcm10aW1lci5oIGIvaW5jbHVkZS9saW51eC9hbGFybXRpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVkNjA5NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYWxhcm10aW1lci5oCkBAIC0wLDAgKzEsNDAgQEAKKyNpZm5kZWYgX0xJTlVYX0FMQVJNVElNRVJfSAorI2RlZmluZSBfTElOVVhfQUxBUk1USU1FUl9ICisKKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVycXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKworZW51bSBhbGFybXRpbWVyX3R5cGUgeworCUFMQVJNX1JFQUxUSU1FLAorCUFMQVJNX0JPT1RUSU1FLAorCisJQUxBUk1fTlVNVFlQRSwKK307CisKKy8qKgorICogc3RydWN0IGFsYXJtIC0gQWxhcm0gdGltZXIgc3RydWN0dXJlCisgKiBAbm9kZToJdGltZXJxdWV1ZSBub2RlIGZvciBhZGRpbmcgdG8gdGhlIGV2ZW50IGxpc3QgdGhpcyB2YWx1ZQorICoJCWFsc28gaW5jbHVkZXMgdGhlIGV4cGlyYXRpb24gdGltZS4KKyAqIEBwZXJpb2Q6CVBlcmlvZCBmb3IgcmVjdXJpbmcgYWxhcm1zCisgKiBAZnVuY3Rpb246CUZ1bmN0aW9uIHBvaW50ZXIgdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgdGltZXIgZmlyZXMuCisgKiBAdHlwZToJQWxhcm0gdHlwZSAoQk9PVFRJTUUvUkVBTFRJTUUpCisgKiBAZW5hYmxlZDoJRmxhZyB0aGF0IHJlcHJlc2VudHMgaWYgdGhlIGFsYXJtIGlzIHNldCB0byBmaXJlIG9yIG5vdAorICogQGRhdGE6CUludGVybmFsIGRhdGEgdmFsdWUuCisgKi8KK3N0cnVjdCBhbGFybSB7CisJc3RydWN0IHRpbWVycXVldWVfbm9kZQlub2RlOworCWt0aW1lX3QJCQlwZXJpb2Q7CisJdm9pZAkJCSgqZnVuY3Rpb24pKHN0cnVjdCBhbGFybSAqKTsKKwllbnVtIGFsYXJtdGltZXJfdHlwZQl0eXBlOworCWJvb2wJCQllbmFibGVkOworCXZvaWQJCQkqZGF0YTsKK307CisKK3ZvaWQgYWxhcm1faW5pdChzdHJ1Y3QgYWxhcm0gKmFsYXJtLCBlbnVtIGFsYXJtdGltZXJfdHlwZSB0eXBlLAorCQl2b2lkICgqZnVuY3Rpb24pKHN0cnVjdCBhbGFybSAqKSk7Cit2b2lkIGFsYXJtX3N0YXJ0KHN0cnVjdCBhbGFybSAqYWxhcm0sIGt0aW1lX3Qgc3RhcnQsIGt0aW1lX3QgcGVyaW9kKTsKK3ZvaWQgYWxhcm1fY2FuY2VsKHN0cnVjdCBhbGFybSAqYWxhcm0pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXRoOWtfcGxhdGZvcm0uaCBiL2luY2x1ZGUvbGludXgvYXRoOWtfcGxhdGZvcm0uaAppbmRleCBiODQ3ZmM3Li42MGE3YzQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F0aDlrX3BsYXRmb3JtLmgKKysrIGIvaW5jbHVkZS9saW51eC9hdGg5a19wbGF0Zm9ybS5oCkBAIC0yMyw2ICsyMywxMyBAQAogCiBzdHJ1Y3QgYXRoOWtfcGxhdGZvcm1fZGF0YSB7CiAJdTE2IGVlcHJvbV9kYXRhW0FUSDlLX1BMQVRfRUVQX01BWF9XT1JEU107CisJdTggKm1hY2FkZHI7CisKKwlpbnQgbGVkX3BpbjsKKwl1MzIgZ3Bpb19tYXNrOworCXUzMiBncGlvX3ZhbDsKKworCWJvb2wgaXNfY2xrXzI1bWh6OwogfTsKIAogI2VuZGlmIC8qIF9MSU5VWF9BVEg5S19QTEFURk9STV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JjbWEvYmNtYS5oIGIvaW5jbHVkZS9saW51eC9iY21hL2JjbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODc2M2U0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9iY21hL2JjbWEuaApAQCAtMCwwICsxLDIyNCBAQAorI2lmbmRlZiBMSU5VWF9CQ01BX0hfCisjZGVmaW5lIExJTlVYX0JDTUFfSF8KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgorCisjaW5jbHVkZSA8bGludXgvYmNtYS9iY21hX2RyaXZlcl9jaGlwY29tbW9uLmg+CisjaW5jbHVkZSA8bGludXgvYmNtYS9iY21hX2RyaXZlcl9wY2kuaD4KKworI2luY2x1ZGUgImJjbWFfcmVncy5oIgorCitzdHJ1Y3QgYmNtYV9kZXZpY2U7CitzdHJ1Y3QgYmNtYV9idXM7CisKK2VudW0gYmNtYV9ob3N0dHlwZSB7CisJQkNNQV9IT1NUVFlQRV9OT05FLAorCUJDTUFfSE9TVFRZUEVfUENJLAorCUJDTUFfSE9TVFRZUEVfU0RJTywKK307CisKK3N0cnVjdCBiY21hX2NoaXBpbmZvIHsKKwl1MTYgaWQ7CisJdTggcmV2OworCXU4IHBrZzsKK307CisKK3N0cnVjdCBiY21hX2hvc3Rfb3BzIHsKKwl1OCAoKnJlYWQ4KShzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmUsIHUxNiBvZmZzZXQpOworCXUxNiAoKnJlYWQxNikoc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlLCB1MTYgb2Zmc2V0KTsKKwl1MzIgKCpyZWFkMzIpKHN0cnVjdCBiY21hX2RldmljZSAqY29yZSwgdTE2IG9mZnNldCk7CisJdm9pZCAoKndyaXRlOCkoc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlLCB1MTYgb2Zmc2V0LCB1OCB2YWx1ZSk7CisJdm9pZCAoKndyaXRlMTYpKHN0cnVjdCBiY21hX2RldmljZSAqY29yZSwgdTE2IG9mZnNldCwgdTE2IHZhbHVlKTsKKwl2b2lkICgqd3JpdGUzMikoc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlLCB1MTYgb2Zmc2V0LCB1MzIgdmFsdWUpOworCS8qIEFnZW50IG9wcyAqLworCXUzMiAoKmFyZWFkMzIpKHN0cnVjdCBiY21hX2RldmljZSAqY29yZSwgdTE2IG9mZnNldCk7CisJdm9pZCAoKmF3cml0ZTMyKShzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmUsIHUxNiBvZmZzZXQsIHUzMiB2YWx1ZSk7Cit9OworCisvKiBDb3JlIG1hbnVmYWN0dXJlcnMgKi8KKyNkZWZpbmUgQkNNQV9NQU5VRl9BUk0JCQkweDQzQgorI2RlZmluZSBCQ01BX01BTlVGX01JUFMJCQkweDRBNworI2RlZmluZSBCQ01BX01BTlVGX0JDTQkJCTB4NEJGCisKKy8qIENvcmUgY2xhc3MgdmFsdWVzLiAqLworI2RlZmluZSBCQ01BX0NMX1NJTQkJCTB4MAorI2RlZmluZSBCQ01BX0NMX0VST00JCQkweDEKKyNkZWZpbmUgQkNNQV9DTF9DT1JFU0lHSFQJCTB4OQorI2RlZmluZSBCQ01BX0NMX1ZFUklGCQkJMHhCCisjZGVmaW5lIEJDTUFfQ0xfT1BUSU1PCQkJMHhECisjZGVmaW5lIEJDTUFfQ0xfR0VOCQkJMHhFCisjZGVmaW5lIEJDTUFfQ0xfUFJJTUVDRUxMCQkweEYKKworLyogQ29yZS1JRCB2YWx1ZXMuICovCisjZGVmaW5lIEJDTUFfQ09SRV9PT0JfUk9VVEVSCQkweDM2NwkvKiBPdXQgb2YgYmFuZCAqLworI2RlZmluZSBCQ01BX0NPUkVfSU5WQUxJRAkJMHg3MDAKKyNkZWZpbmUgQkNNQV9DT1JFX0NISVBDT01NT04JCTB4ODAwCisjZGVmaW5lIEJDTUFfQ09SRV9JTElORTIwCQkweDgwMQorI2RlZmluZSBCQ01BX0NPUkVfU1JBTQkJCTB4ODAyCisjZGVmaW5lIEJDTUFfQ09SRV9TRFJBTQkJCTB4ODAzCisjZGVmaW5lIEJDTUFfQ09SRV9QQ0kJCQkweDgwNAorI2RlZmluZSBCQ01BX0NPUkVfTUlQUwkJCTB4ODA1CisjZGVmaW5lIEJDTUFfQ09SRV9FVEhFUk5FVAkJMHg4MDYKKyNkZWZpbmUgQkNNQV9DT1JFX1Y5MAkJCTB4ODA3CisjZGVmaW5lIEJDTUFfQ09SRV9VU0IxMV9IT1NUREVWCQkweDgwOAorI2RlZmluZSBCQ01BX0NPUkVfQURTTAkJCTB4ODA5CisjZGVmaW5lIEJDTUFfQ09SRV9JTElORTEwMAkJMHg4MEEKKyNkZWZpbmUgQkNNQV9DT1JFX0lQU0VDCQkJMHg4MEIKKyNkZWZpbmUgQkNNQV9DT1JFX1VUT1BJQQkJMHg4MEMKKyNkZWZpbmUgQkNNQV9DT1JFX1BDTUNJQQkJMHg4MEQKKyNkZWZpbmUgQkNNQV9DT1JFX0lOVEVSTkFMX01FTQkJMHg4MEUKKyNkZWZpbmUgQkNNQV9DT1JFX01FTUNfU0RSQU0JCTB4ODBGCisjZGVmaW5lIEJDTUFfQ09SRV9PRkRNCQkJMHg4MTAKKyNkZWZpbmUgQkNNQV9DT1JFX0VYVElGCQkJMHg4MTEKKyNkZWZpbmUgQkNNQV9DT1JFXzgwMjExCQkJMHg4MTIKKyNkZWZpbmUgQkNNQV9DT1JFX1BIWV9BCQkJMHg4MTMKKyNkZWZpbmUgQkNNQV9DT1JFX1BIWV9CCQkJMHg4MTQKKyNkZWZpbmUgQkNNQV9DT1JFX1BIWV9HCQkJMHg4MTUKKyNkZWZpbmUgQkNNQV9DT1JFX01JUFNfMzMwMgkJMHg4MTYKKyNkZWZpbmUgQkNNQV9DT1JFX1VTQjExX0hPU1QJCTB4ODE3CisjZGVmaW5lIEJDTUFfQ09SRV9VU0IxMV9ERVYJCTB4ODE4CisjZGVmaW5lIEJDTUFfQ09SRV9VU0IyMF9IT1NUCQkweDgxOQorI2RlZmluZSBCQ01BX0NPUkVfVVNCMjBfREVWCQkweDgxQQorI2RlZmluZSBCQ01BX0NPUkVfU0RJT19IT1NUCQkweDgxQgorI2RlZmluZSBCQ01BX0NPUkVfUk9CT1NXSVRDSAkJMHg4MUMKKyNkZWZpbmUgQkNNQV9DT1JFX1BBUkFfQVRBCQkweDgxRAorI2RlZmluZSBCQ01BX0NPUkVfU0FUQV9YT1JETUEJCTB4ODFFCisjZGVmaW5lIEJDTUFfQ09SRV9FVEhFUk5FVF9HQklUCQkweDgxRgorI2RlZmluZSBCQ01BX0NPUkVfUENJRQkJCTB4ODIwCisjZGVmaW5lIEJDTUFfQ09SRV9QSFlfTgkJCTB4ODIxCisjZGVmaW5lIEJDTUFfQ09SRV9TUkFNX0NUTAkJMHg4MjIKKyNkZWZpbmUgQkNNQV9DT1JFX01JTklfTUFDUEhZCQkweDgyMworI2RlZmluZSBCQ01BX0NPUkVfQVJNXzExNzYJCTB4ODI0CisjZGVmaW5lIEJDTUFfQ09SRV9BUk1fN1RETUkJCTB4ODI1CisjZGVmaW5lIEJDTUFfQ09SRV9QSFlfTFAJCTB4ODI2CisjZGVmaW5lIEJDTUFfQ09SRV9QTVUJCQkweDgyNworI2RlZmluZSBCQ01BX0NPUkVfUEhZX1NTTgkJMHg4MjgKKyNkZWZpbmUgQkNNQV9DT1JFX1NESU9fREVWCQkweDgyOQorI2RlZmluZSBCQ01BX0NPUkVfQVJNX0NNMwkJMHg4MkEKKyNkZWZpbmUgQkNNQV9DT1JFX1BIWV9IVAkJMHg4MkIKKyNkZWZpbmUgQkNNQV9DT1JFX01JUFNfNzRLCQkweDgyQworI2RlZmluZSBCQ01BX0NPUkVfTUFDX0dCSVQJCTB4ODJECisjZGVmaW5lIEJDTUFfQ09SRV9ERFIxMl9NRU1fQ1RMCQkweDgyRQorI2RlZmluZSBCQ01BX0NPUkVfUENJRV9SQwkJMHg4MkYJLyogUENJZSBSb290IENvbXBsZXggKi8KKyNkZWZpbmUgQkNNQV9DT1JFX09DUF9PQ1BfQlJJREdFCTB4ODMwCisjZGVmaW5lIEJDTUFfQ09SRV9TSEFSRURfQ09NTU9OCQkweDgzMQorI2RlZmluZSBCQ01BX0NPUkVfT0NQX0FIQl9CUklER0UJMHg4MzIKKyNkZWZpbmUgQkNNQV9DT1JFX1NQSV9IT1NUCQkweDgzMworI2RlZmluZSBCQ01BX0NPUkVfSTJTCQkJMHg4MzQKKyNkZWZpbmUgQkNNQV9DT1JFX1NEUl9ERFIxX01FTV9DVEwJMHg4MzUJLyogU0RSL0REUjEgbWVtb3J5IGNvbnRyb2xsZXIgY29yZSAqLworI2RlZmluZSBCQ01BX0NPUkVfU0hJTQkJCTB4ODM3CS8qIFNISU0gY29tcG9uZW50IGluIHVidXMvNjM2MiAqLworI2RlZmluZSBCQ01BX0NPUkVfREVGQVVMVAkJMHhGRkYKKworI2RlZmluZSBCQ01BX01BWF9OUl9DT1JFUwkJMTYKKworc3RydWN0IGJjbWFfZGV2aWNlIHsKKwlzdHJ1Y3QgYmNtYV9idXMgKmJ1czsKKwlzdHJ1Y3QgYmNtYV9kZXZpY2VfaWQgaWQ7CisKKwlzdHJ1Y3QgZGV2aWNlIGRldjsKKwlib29sIGRldl9yZWdpc3RlcmVkOworCisJdTggY29yZV9pbmRleDsKKworCXUzMiBhZGRyOworCXUzMiB3cmFwOworCisJdm9pZCAqZHJ2ZGF0YTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgKmJjbWFfZ2V0X2RydmRhdGEoc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlKQoreworCXJldHVybiBjb3JlLT5kcnZkYXRhOworfQorc3RhdGljIGlubGluZSB2b2lkIGJjbWFfc2V0X2RydmRhdGEoc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlLCB2b2lkICpkcnZkYXRhKQoreworCWNvcmUtPmRydmRhdGEgPSBkcnZkYXRhOworfQorCitzdHJ1Y3QgYmNtYV9kcml2ZXIgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3Qgc3RydWN0IGJjbWFfZGV2aWNlX2lkICppZF90YWJsZTsKKworCWludCAoKnByb2JlKShzdHJ1Y3QgYmNtYV9kZXZpY2UgKmRldik7CisJdm9pZCAoKnJlbW92ZSkoc3RydWN0IGJjbWFfZGV2aWNlICpkZXYpOworCWludCAoKnN1c3BlbmQpKHN0cnVjdCBiY21hX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOworCWludCAoKnJlc3VtZSkoc3RydWN0IGJjbWFfZGV2aWNlICpkZXYpOworCXZvaWQgKCpzaHV0ZG93bikoc3RydWN0IGJjbWFfZGV2aWNlICpkZXYpOworCisJc3RydWN0IGRldmljZV9kcml2ZXIgZHJ2OworfTsKK2V4dGVybgoraW50IF9fYmNtYV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGJjbWFfZHJpdmVyICpkcnYsIHN0cnVjdCBtb2R1bGUgKm93bmVyKTsKK3N0YXRpYyBpbmxpbmUgaW50IGJjbWFfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBiY21hX2RyaXZlciAqZHJ2KQoreworCXJldHVybiBfX2JjbWFfZHJpdmVyX3JlZ2lzdGVyKGRydiwgVEhJU19NT0RVTEUpOworfQorZXh0ZXJuIHZvaWQgYmNtYV9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgYmNtYV9kcml2ZXIgKmRydik7CisKK3N0cnVjdCBiY21hX2J1cyB7CisJLyogVGhlIE1NSU8gYXJlYS4gKi8KKwl2b2lkIF9faW9tZW0gKm1taW87CisKKwljb25zdCBzdHJ1Y3QgYmNtYV9ob3N0X29wcyAqb3BzOworCisJZW51bSBiY21hX2hvc3R0eXBlIGhvc3R0eXBlOworCXVuaW9uIHsKKwkJLyogUG9pbnRlciB0byB0aGUgUENJIGJ1cyAob25seSBmb3IgQkNNQV9IT1NUVFlQRV9QQ0kpICovCisJCXN0cnVjdCBwY2lfZGV2ICpob3N0X3BjaTsKKwkJLyogUG9pbnRlciB0byB0aGUgU0RJTyBkZXZpY2UgKG9ubHkgZm9yIEJDTUFfSE9TVFRZUEVfU0RJTykgKi8KKwkJc3RydWN0IHNkaW9fZnVuYyAqaG9zdF9zZGlvOworCX07CisKKwlzdHJ1Y3QgYmNtYV9jaGlwaW5mbyBjaGlwaW5mbzsKKworCXN0cnVjdCBiY21hX2RldmljZSAqbWFwcGVkX2NvcmU7CisJc3RydWN0IGxpc3RfaGVhZCBjb3JlczsKKwl1OCBucl9jb3JlczsKKworCXN0cnVjdCBiY21hX2Rydl9jYyBkcnZfY2M7CisJc3RydWN0IGJjbWFfZHJ2X3BjaSBkcnZfcGNpOworfTsKKworZXh0ZXJuIGlubGluZSB1MzIgYmNtYV9yZWFkOChzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmUsIHUxNiBvZmZzZXQpCit7CisJcmV0dXJuIGNvcmUtPmJ1cy0+b3BzLT5yZWFkOChjb3JlLCBvZmZzZXQpOworfQorZXh0ZXJuIGlubGluZSB1MzIgYmNtYV9yZWFkMTYoc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlLCB1MTYgb2Zmc2V0KQoreworCXJldHVybiBjb3JlLT5idXMtPm9wcy0+cmVhZDE2KGNvcmUsIG9mZnNldCk7Cit9CitleHRlcm4gaW5saW5lIHUzMiBiY21hX3JlYWQzMihzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmUsIHUxNiBvZmZzZXQpCit7CisJcmV0dXJuIGNvcmUtPmJ1cy0+b3BzLT5yZWFkMzIoY29yZSwgb2Zmc2V0KTsKK30KK2V4dGVybiBpbmxpbmUKK3ZvaWQgYmNtYV93cml0ZTgoc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlLCB1MTYgb2Zmc2V0LCB1MzIgdmFsdWUpCit7CisJY29yZS0+YnVzLT5vcHMtPndyaXRlOChjb3JlLCBvZmZzZXQsIHZhbHVlKTsKK30KK2V4dGVybiBpbmxpbmUKK3ZvaWQgYmNtYV93cml0ZTE2KHN0cnVjdCBiY21hX2RldmljZSAqY29yZSwgdTE2IG9mZnNldCwgdTMyIHZhbHVlKQoreworCWNvcmUtPmJ1cy0+b3BzLT53cml0ZTE2KGNvcmUsIG9mZnNldCwgdmFsdWUpOworfQorZXh0ZXJuIGlubGluZQordm9pZCBiY21hX3dyaXRlMzIoc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlLCB1MTYgb2Zmc2V0LCB1MzIgdmFsdWUpCit7CisJY29yZS0+YnVzLT5vcHMtPndyaXRlMzIoY29yZSwgb2Zmc2V0LCB2YWx1ZSk7Cit9CitleHRlcm4gaW5saW5lIHUzMiBiY21hX2FyZWFkMzIoc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlLCB1MTYgb2Zmc2V0KQoreworCXJldHVybiBjb3JlLT5idXMtPm9wcy0+YXJlYWQzMihjb3JlLCBvZmZzZXQpOworfQorZXh0ZXJuIGlubGluZQordm9pZCBiY21hX2F3cml0ZTMyKHN0cnVjdCBiY21hX2RldmljZSAqY29yZSwgdTE2IG9mZnNldCwgdTMyIHZhbHVlKQoreworCWNvcmUtPmJ1cy0+b3BzLT5hd3JpdGUzMihjb3JlLCBvZmZzZXQsIHZhbHVlKTsKK30KKworZXh0ZXJuIGJvb2wgYmNtYV9jb3JlX2lzX2VuYWJsZWQoc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlKTsKK2V4dGVybiBpbnQgYmNtYV9jb3JlX2VuYWJsZShzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmUsIHUzMiBmbGFncyk7CisKKyNlbmRpZiAvKiBMSU5VWF9CQ01BX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JjbWEvYmNtYV9kcml2ZXJfY2hpcGNvbW1vbi5oIGIvaW5jbHVkZS9saW51eC9iY21hL2JjbWFfZHJpdmVyX2NoaXBjb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODNjM2I2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9iY21hL2JjbWFfZHJpdmVyX2NoaXBjb21tb24uaApAQCAtMCwwICsxLDMwMiBAQAorI2lmbmRlZiBMSU5VWF9CQ01BX0RSSVZFUl9DQ19IXworI2RlZmluZSBMSU5VWF9CQ01BX0RSSVZFUl9DQ19IXworCisvKiogQ2hpcENvbW1vbiBjb3JlIHJlZ2lzdGVycy4gKiovCisjZGVmaW5lIEJDTUFfQ0NfSUQJCQkweDAwMDAKKyNkZWZpbmUgIEJDTUFfQ0NfSURfSUQJCQkweDAwMDBGRkZGCisjZGVmaW5lICBCQ01BX0NDX0lEX0lEX1NISUZUCQkwCisjZGVmaW5lICBCQ01BX0NDX0lEX1JFVgkJCTB4MDAwRjAwMDAKKyNkZWZpbmUgIEJDTUFfQ0NfSURfUkVWX1NISUZUCQkxNgorI2RlZmluZSAgQkNNQV9DQ19JRF9QS0cJCQkweDAwRjAwMDAwCisjZGVmaW5lICBCQ01BX0NDX0lEX1BLR19TSElGVAkJMjAKKyNkZWZpbmUgIEJDTUFfQ0NfSURfTlJDT1JFUwkJMHgwRjAwMDAwMAorI2RlZmluZSAgQkNNQV9DQ19JRF9OUkNPUkVTX1NISUZUCTI0CisjZGVmaW5lICBCQ01BX0NDX0lEX1RZUEUJCTB4RjAwMDAwMDAKKyNkZWZpbmUgIEJDTUFfQ0NfSURfVFlQRV9TSElGVAkJMjgKKyNkZWZpbmUgQkNNQV9DQ19DQVAJCQkweDAwMDQJCS8qIENhcGFiaWxpdGllcyAqLworI2RlZmluZSAgQkNNQV9DQ19DQVBfTlJVQVJUCQkweDAwMDAwMDAzCS8qICMgb2YgVUFSVHMgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfQ0FQX01JUFNFQgkJMHgwMDAwMDAwNAkvKiBNSVBTIGluIEJpZ0VuZGlhbiBNb2RlICovCisjZGVmaW5lICBCQ01BX0NDX0NBUF9VQVJUQ0xLCQkweDAwMDAwMDE4CS8qIFVBUlQgY2xvY2sgc2VsZWN0ICovCisjZGVmaW5lICAgQkNNQV9DQ19DQVBfVUFSVENMS19JTlQJMHgwMDAwMDAwOAkvKiBVQVJUcyBhcmUgZHJpdmVuIGJ5IGludGVybmFsIGRpdmlkZWQgY2xvY2sgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfQ0FQX1VBUlRHUElPCQkweDAwMDAwMDIwCS8qIFVBUlRzIG9uIEdQSU8gMTUtMTIgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfQ0FQX0VYVEJVUwkJMHgwMDAwMDBDMAkvKiBFeHRlcm5hbCBidXNlcyBwcmVzZW50ICovCisjZGVmaW5lICBCQ01BX0NDX0NBUF9GTEFTSFQJCTB4MDAwMDA3MDAJLyogRmxhc2ggVHlwZSAqLworI2RlZmluZSAgIEJDTUFfQ0NfRkxBU0hUX05PTkUJCTB4MDAwMDAwMDAJLyogTm8gZmxhc2ggKi8KKyNkZWZpbmUgICBCQ01BX0NDX0ZMQVNIVF9TVFNFUgkJMHgwMDAwMDEwMAkvKiBTVCBzZXJpYWwgZmxhc2ggKi8KKyNkZWZpbmUgICBCQ01BX0NDX0ZMQVNIVF9BVFNFUgkJMHgwMDAwMDIwMAkvKiBBdG1lbCBzZXJpYWwgZmxhc2ggKi8KKyNkZWZpbmUJICBCQ01BX0NDX0ZMQVNIVF9QQVJBCQkweDAwMDAwNzAwCS8qIFBhcmFsbGVsIGZsYXNoICovCisjZGVmaW5lICBCQ01BX0NDX0NBUF9QTExUCQkweDAwMDM4MDAwCS8qIFBMTCBUeXBlICovCisjZGVmaW5lICAgQkNNQV9QTExUWVBFX05PTkUJCTB4MDAwMDAwMDAKKyNkZWZpbmUgICBCQ01BX1BMTFRZUEVfMQkJMHgwMDAxMDAwMAkvKiA0OE1oeiBiYXNlLCAzIGRpdmlkZXJzICovCisjZGVmaW5lICAgQkNNQV9QTExUWVBFXzIJCTB4MDAwMjAwMDAJLyogNDhNaHosIDQgZGl2aWRlcnMgKi8KKyNkZWZpbmUgICBCQ01BX1BMTFRZUEVfMwkJMHgwMDAzMDAwMAkvKiAyNU1oeiwgMiBkaXZpZGVycyAqLworI2RlZmluZSAgIEJDTUFfUExMVFlQRV80CQkweDAwMDA4MDAwCS8qIDQ4TWh6LCA0IGRpdmlkZXJzICovCisjZGVmaW5lICAgQkNNQV9QTExUWVBFXzUJCTB4MDAwMTgwMDAJLyogMjVNaHosIDQgZGl2aWRlcnMgKi8KKyNkZWZpbmUgICBCQ01BX1BMTFRZUEVfNgkJMHgwMDAyODAwMAkvKiAxMDAvMjAwIG9yIDEyMC8yNDAgb25seSAqLworI2RlZmluZSAgIEJDTUFfUExMVFlQRV83CQkweDAwMDM4MDAwCS8qIDI1TWh6LCA0IGRpdmlkZXJzICovCisjZGVmaW5lICBCQ01BX0NDX0NBUF9QQ1RMCQkweDAwMDQwMDAwCS8qIFBvd2VyIENvbnRyb2wgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfQ0FQX09UUFMJCTB4MDAzODAwMDAJLyogT1RQIHNpemUgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfQ0FQX09UUFNfU0hJRlQJCTE5CisjZGVmaW5lICBCQ01BX0NDX0NBUF9PVFBTX0JBU0UJCTUKKyNkZWZpbmUgIEJDTUFfQ0NfQ0FQX0pUQUdNCQkweDAwNDAwMDAwCS8qIEpUQUcgbWFzdGVyIHByZXNlbnQgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfQ0FQX0JST00JCTB4MDA4MDAwMDAJLyogSW50ZXJuYWwgYm9vdCBST00gYWN0aXZlICovCisjZGVmaW5lICBCQ01BX0NDX0NBUF82NEJJVAkJMHgwODAwMDAwMAkvKiA2NC1iaXQgQmFja3BsYW5lICovCisjZGVmaW5lICBCQ01BX0NDX0NBUF9QTVUJCTB4MTAwMDAwMDAJLyogUE1VIGF2YWlsYWJsZSAocmV2ID49IDIwKSAqLworI2RlZmluZSAgQkNNQV9DQ19DQVBfRUNJCQkweDIwMDAwMDAwCS8qIEVDSSBhdmFpbGFibGUgKHJldiA+PSAyMCkgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfQ0FQX1NQUk9NCQkweDQwMDAwMDAwCS8qIFNQUk9NIHByZXNlbnQgKi8KKyNkZWZpbmUgQkNNQV9DQ19DT1JFQ1RMCQkJMHgwMDA4CisjZGVmaW5lICBCQ01BX0NDX0NPUkVDVExfVUFSVENMSzAJMHgwMDAwMDAwMQkvKiBEcml2ZSBVQVJUIHdpdGggaW50ZXJuYWwgY2xvY2sgKi8KKyNkZWZpbmUJIEJDTUFfQ0NfQ09SRUNUTF9TRQkJMHgwMDAwMDAwMgkvKiBzeW5jIGNsayBvdXQgZW5hYmxlIChjb3JlcmV2ID49IDMpICovCisjZGVmaW5lICBCQ01BX0NDX0NPUkVDVExfVUFSVENMS0VOCTB4MDAwMDAwMDgJLyogVUFSVCBjbG9jayBlbmFibGUgKHJldiA+PSAyMSkgKi8KKyNkZWZpbmUgQkNNQV9DQ19CSVNUCQkJMHgwMDBDCisjZGVmaW5lIEJDTUFfQ0NfT1RQUwkJCTB4MDAxMAkJLyogT1RQIHN0YXR1cyAqLworI2RlZmluZQkgQkNNQV9DQ19PVFBTX1BST0dGQUlMCQkweDgwMDAwMDAwCisjZGVmaW5lCSBCQ01BX0NDX09UUFNfUFJPVEVDVAkJMHgwMDAwMDAwNworI2RlZmluZQkgQkNNQV9DQ19PVFBTX0hXX1BST1RFQ1QJMHgwMDAwMDAwMQorI2RlZmluZQkgQkNNQV9DQ19PVFBTX1NXX1BST1RFQ1QJMHgwMDAwMDAwMgorI2RlZmluZQkgQkNNQV9DQ19PVFBTX0NJRF9QUk9URUNUCTB4MDAwMDAwMDQKKyNkZWZpbmUgQkNNQV9DQ19PVFBDCQkJMHgwMDE0CQkvKiBPVFAgY29udHJvbCAqLworI2RlZmluZQkgQkNNQV9DQ19PVFBDX1JFQ1dBSVQJCTB4RkYwMDAwMDAKKyNkZWZpbmUJIEJDTUFfQ0NfT1RQQ19QUk9HV0FJVAkJMHgwMEZGRkYwMAorI2RlZmluZQkgQkNNQV9DQ19PVFBDX1BSV19TSElGVAkJOAorI2RlZmluZQkgQkNNQV9DQ19PVFBDX01BWEZBSUwJCTB4MDAwMDAwMzgKKyNkZWZpbmUJIEJDTUFfQ0NfT1RQQ19WU0VMCQkweDAwMDAwMDA2CisjZGVmaW5lCSBCQ01BX0NDX09UUENfU0VMVkwJCTB4MDAwMDAwMDEKKyNkZWZpbmUgQkNNQV9DQ19PVFBQCQkJMHgwMDE4CQkvKiBPVFAgcHJvZyAqLworI2RlZmluZQkgQkNNQV9DQ19PVFBQX0NPTAkJMHgwMDAwMDBGRgorI2RlZmluZQkgQkNNQV9DQ19PVFBQX1JPVwkJMHgwMDAwRkYwMAorI2RlZmluZQkgQkNNQV9DQ19PVFBQX1JPV19TSElGVAkJOAorI2RlZmluZQkgQkNNQV9DQ19PVFBQX1JFQURFUlIJCTB4MTAwMDAwMDAKKyNkZWZpbmUJIEJDTUFfQ0NfT1RQUF9WQUxVRQkJMHgyMDAwMDAwMAorI2RlZmluZQkgQkNNQV9DQ19PVFBQX1JFQUQJCTB4NDAwMDAwMDAKKyNkZWZpbmUJIEJDTUFfQ0NfT1RQUF9TVEFSVAkJMHg4MDAwMDAwMAorI2RlZmluZQkgQkNNQV9DQ19PVFBQX0JVU1kJCTB4ODAwMDAwMDAKKyNkZWZpbmUgQkNNQV9DQ19JUlFTVEFUCQkJMHgwMDIwCisjZGVmaW5lIEJDTUFfQ0NfSVJRTUFTSwkJCTB4MDAyNAorI2RlZmluZQkgQkNNQV9DQ19JUlFfR1BJTwkJMHgwMDAwMDAwMQkvKiBncGlvIGludHIgKi8KKyNkZWZpbmUJIEJDTUFfQ0NfSVJRX0VYVAkJMHgwMDAwMDAwMgkvKiBybzogZXh0IGludHIgcGluIChjb3JlcmV2ID49IDMpICovCisjZGVmaW5lCSBCQ01BX0NDX0lSUV9XRFJFU0VUCQkweDgwMDAwMDAwCS8qIHdhdGNoZG9nIHJlc2V0IG9jY3VycmVkICovCisjZGVmaW5lIEJDTUFfQ0NfQ0hJUENUTAkJCTB4MDAyOAkJLyogUmV2ID49IDExIG9ubHkgKi8KKyNkZWZpbmUgQkNNQV9DQ19DSElQU1RBVAkJMHgwMDJDCQkvKiBSZXYgPj0gMTEgb25seSAqLworI2RlZmluZSBCQ01BX0NDX0pDTUQJCQkweDAwMzAJCS8qIFJldiA+PSAxMCBvbmx5ICovCisjZGVmaW5lICBCQ01BX0NDX0pDTURfU1RBUlQJCTB4ODAwMDAwMDAKKyNkZWZpbmUgIEJDTUFfQ0NfSkNNRF9CVVNZCQkweDgwMDAwMDAwCisjZGVmaW5lICBCQ01BX0NDX0pDTURfUEFVU0UJCTB4NDAwMDAwMDAKKyNkZWZpbmUgIEJDTUFfQ0NfSkNNRDBfQUNDX01BU0sJCTB4MDAwMEYwMDAKKyNkZWZpbmUgIEJDTUFfQ0NfSkNNRDBfQUNDX0lSRFIJCTB4MDAwMDAwMDAKKyNkZWZpbmUgIEJDTUFfQ0NfSkNNRDBfQUNDX0RSCQkweDAwMDAxMDAwCisjZGVmaW5lICBCQ01BX0NDX0pDTUQwX0FDQ19JUgkJMHgwMDAwMjAwMAorI2RlZmluZSAgQkNNQV9DQ19KQ01EMF9BQ0NfUkVTRVQJMHgwMDAwMzAwMAorI2RlZmluZSAgQkNNQV9DQ19KQ01EMF9BQ0NfSVJQRFIJMHgwMDAwNDAwMAorI2RlZmluZSAgQkNNQV9DQ19KQ01EMF9BQ0NfUERSCQkweDAwMDA1MDAwCisjZGVmaW5lICBCQ01BX0NDX0pDTUQwX0lSV19NQVNLCQkweDAwMDAwRjAwCisjZGVmaW5lICBCQ01BX0NDX0pDTURfQUNDX01BU0sJCTB4MDAwRjAwMDAJLyogQ2hhbmdlcyBmb3IgY29yZXJldiAxMSAqLworI2RlZmluZSAgQkNNQV9DQ19KQ01EX0FDQ19JUkRSCQkweDAwMDAwMDAwCisjZGVmaW5lICBCQ01BX0NDX0pDTURfQUNDX0RSCQkweDAwMDEwMDAwCisjZGVmaW5lICBCQ01BX0NDX0pDTURfQUNDX0lSCQkweDAwMDIwMDAwCisjZGVmaW5lICBCQ01BX0NDX0pDTURfQUNDX1JFU0VUCQkweDAwMDMwMDAwCisjZGVmaW5lICBCQ01BX0NDX0pDTURfQUNDX0lSUERSCQkweDAwMDQwMDAwCisjZGVmaW5lICBCQ01BX0NDX0pDTURfQUNDX1BEUgkJMHgwMDA1MDAwMAorI2RlZmluZSAgQkNNQV9DQ19KQ01EX0lSV19NQVNLCQkweDAwMDAxRjAwCisjZGVmaW5lICBCQ01BX0NDX0pDTURfSVJXX1NISUZUCQk4CisjZGVmaW5lICBCQ01BX0NDX0pDTURfRFJXX01BU0sJCTB4MDAwMDAwM0YKKyNkZWZpbmUgQkNNQV9DQ19KSVIJCQkweDAwMzQJCS8qIFJldiA+PSAxMCBvbmx5ICovCisjZGVmaW5lIEJDTUFfQ0NfSkRSCQkJMHgwMDM4CQkvKiBSZXYgPj0gMTAgb25seSAqLworI2RlZmluZSBCQ01BX0NDX0pDVEwJCQkweDAwM0MJCS8qIFJldiA+PSAxMCBvbmx5ICovCisjZGVmaW5lICBCQ01BX0NDX0pDVExfRk9SQ0VfQ0xLCQk0CQkvKiBGb3JjZSBjbG9jayAqLworI2RlZmluZSAgQkNNQV9DQ19KQ1RMX0VYVF9FTgkJMgkJLyogRW5hYmxlIGV4dGVybmFsIHRhcmdldHMgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfSkNUTF9FTgkJMQkJLyogRW5hYmxlIEp0YWcgbWFzdGVyICovCisjZGVmaW5lIEJDTUFfQ0NfRkxBU0hDVEwJCTB4MDA0MAorI2RlZmluZSAgQkNNQV9DQ19GTEFTSENUTF9TVEFSVAkJMHg4MDAwMDAwMAorI2RlZmluZSAgQkNNQV9DQ19GTEFTSENUTF9CVVNZCQlCQ01BX0NDX0ZMQVNIQ1RMX1NUQVJUCisjZGVmaW5lIEJDTUFfQ0NfRkxBU0hBRERSCQkweDAwNDQKKyNkZWZpbmUgQkNNQV9DQ19GTEFTSERBVEEJCTB4MDA0OAorI2RlZmluZSBCQ01BX0NDX0JDQVNUX0FERFIJCTB4MDA1MAorI2RlZmluZSBCQ01BX0NDX0JDQVNUX0RBVEEJCTB4MDA1NAorI2RlZmluZSBCQ01BX0NDX0dQSU9QVUxMVVAJCTB4MDA1OAkJLyogUmV2ID49IDIwIG9ubHkgKi8KKyNkZWZpbmUgQkNNQV9DQ19HUElPUFVMTERPV04JCTB4MDA1QwkJLyogUmV2ID49IDIwIG9ubHkgKi8KKyNkZWZpbmUgQkNNQV9DQ19HUElPSU4JCQkweDAwNjAKKyNkZWZpbmUgQkNNQV9DQ19HUElPT1VUCQkJMHgwMDY0CisjZGVmaW5lIEJDTUFfQ0NfR1BJT09VVEVOCQkweDAwNjgKKyNkZWZpbmUgQkNNQV9DQ19HUElPQ1RMCQkJMHgwMDZDCisjZGVmaW5lIEJDTUFfQ0NfR1BJT1BPTAkJCTB4MDA3MAorI2RlZmluZSBCQ01BX0NDX0dQSU9JUlEJCQkweDAwNzQKKyNkZWZpbmUgQkNNQV9DQ19XQVRDSERPRwkJMHgwMDgwCisjZGVmaW5lIEJDTUFfQ0NfR1BJT1RJTUVSCQkweDAwODgJCS8qIExFRCBwb3dlcnNhdmUgKGNvcmVyZXYgPj0gMTYpICovCisjZGVmaW5lICBCQ01BX0NDX0dQSU9USU1FUl9PRkZUSU1FCTB4MDAwMEZGRkYKKyNkZWZpbmUgIEJDTUFfQ0NfR1BJT1RJTUVSX09GRlRJTUVfU0hJRlQJMAorI2RlZmluZSAgQkNNQV9DQ19HUElPVElNRVJfT05USU1FCTB4RkZGRjAwMDAKKyNkZWZpbmUgIEJDTUFfQ0NfR1BJT1RJTUVSX09OVElNRV9TSElGVAkxNgorI2RlZmluZSBCQ01BX0NDX0dQSU9UT1VUTQkJMHgwMDhDCQkvKiBMRUQgcG93ZXJzYXZlIChjb3JlcmV2ID49IDE2KSAqLworI2RlZmluZSBCQ01BX0NDX0NMT0NLX04JCQkweDAwOTAKKyNkZWZpbmUgQkNNQV9DQ19DTE9DS19TQgkJMHgwMDk0CisjZGVmaW5lIEJDTUFfQ0NfQ0xPQ0tfUENJCQkweDAwOTgKKyNkZWZpbmUgQkNNQV9DQ19DTE9DS19NMgkJMHgwMDlDCisjZGVmaW5lIEJDTUFfQ0NfQ0xPQ0tfTUlQUwkJMHgwMEEwCisjZGVmaW5lIEJDTUFfQ0NfQ0xLRElWCQkJMHgwMEE0CQkvKiBSZXYgPj0gMyBvbmx5ICovCisjZGVmaW5lCSBCQ01BX0NDX0NMS0RJVl9TRkxBU0gJCTB4MEYwMDAwMDAKKyNkZWZpbmUJIEJDTUFfQ0NfQ0xLRElWX1NGTEFTSF9TSElGVAkyNAorI2RlZmluZQkgQkNNQV9DQ19DTEtESVZfT1RQCQkweDAwMEYwMDAwCisjZGVmaW5lCSBCQ01BX0NDX0NMS0RJVl9PVFBfU0hJRlQJMTYKKyNkZWZpbmUJIEJDTUFfQ0NfQ0xLRElWX0pUQUcJCTB4MDAwMDBGMDAKKyNkZWZpbmUJIEJDTUFfQ0NfQ0xLRElWX0pUQUdfU0hJRlQJOAorI2RlZmluZQkgQkNNQV9DQ19DTEtESVZfVUFSVAkJMHgwMDAwMDBGRgorI2RlZmluZSBCQ01BX0NDX0NBUF9FWFQJCQkweDAwQUMJCS8qIENhcGFiaWxpdGllcyAqLworI2RlZmluZSBCQ01BX0NDX1BMTE9OREVMQVkJCTB4MDBCMAkJLyogUmV2ID49IDQgb25seSAqLworI2RlZmluZSBCQ01BX0NDX0ZSRUZTRUxERUxBWQkJMHgwMEI0CQkvKiBSZXYgPj0gNCBvbmx5ICovCisjZGVmaW5lIEJDTUFfQ0NfU0xPV0NMS0NUTAkJMHgwMEI4CQkvKiA2IDw9IFJldiA8PSA5IG9ubHkgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfU0xPV0NMS0NUTF9TUkMJCTB4MDAwMDAwMDcJLyogc2xvdyBjbG9jayBzb3VyY2UgbWFzayAqLworI2RlZmluZQkgIEJDTUFfQ0NfU0xPV0NMS0NUTF9TUkNfTFBPCTB4MDAwMDAwMDAJLyogc291cmNlIG9mIHNsb3cgY2xvY2sgaXMgTFBPICovCisjZGVmaW5lICAgQkNNQV9DQ19TTE9XQ0xLQ1RMX1NSQ19YVEFMCTB4MDAwMDAwMDEJLyogc291cmNlIG9mIHNsb3cgY2xvY2sgaXMgY3J5c3RhbCAqLworI2RlZmluZQkgIEJDTUFfQ0NfU0xPRUNMS0NUTF9TUkNfUENJCTB4MDAwMDAwMDIJLyogc291cmNlIG9mIHNsb3cgY2xvY2sgaXMgUENJICovCisjZGVmaW5lICBCQ01BX0NDX1NMT1dDTEtDVExfTFBPRlJFUQkweDAwMDAwMjAwCS8qIExQT0ZyZXFTZWwsIDE6IDE2MEtoeiwgMDogMzJLSHogKi8KKyNkZWZpbmUgIEJDTUFfQ0NfU0xPV0NMS0NUTF9MUE9QRAkweDAwMDAwNDAwCS8qIExQT1Bvd2VyRG93biwgMTogTFBPIGlzIGRpc2FibGVkLCAwOiBMUE8gaXMgZW5hYmxlZCAqLworI2RlZmluZSAgQkNNQV9DQ19TTE9XQ0xLQ1RMX0ZTTE9XCTB4MDAwMDA4MDAJLyogRm9yY2VTbG93Q2xrLCAxOiBzYi9jb3JlcyBydW5uaW5nIG9uIHNsb3cgY2xvY2ssIDA6IHBvd2VyIGxvZ2ljIGNvbnRyb2wgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfU0xPV0NMS0NUTF9JUExMCTB4MDAwMDEwMDAJLyogSWdub3JlUGxsT2ZmUmVxLCAxLzA6IHBvd2VyIGxvZ2ljIGlnbm9yZXMvaG9ub3JzIFBMTCBjbG9jayBkaXNhYmxlIHJlcXVlc3RzIGZyb20gY29yZSAqLworI2RlZmluZSAgQkNNQV9DQ19TTE9XQ0xLQ1RMX0VOWFRBTAkweDAwMDAyMDAwCS8qIFh0YWxDb250cm9sRW4sIDEvMDogcG93ZXIgbG9naWMgZG9lcy9kb2Vzbid0IGRpc2FibGUgY3J5c3RhbCB3aGVuIGFwcHJvcHJpYXRlICovCisjZGVmaW5lICBCQ01BX0NDX1NMT1dDTEtDVExfWFRBTFBVCTB4MDAwMDQwMDAJLyogWHRhbFBVIChSTyksIDEvMDogY3J5c3RhbCBydW5uaW5nL2Rpc2FibGVkICovCisjZGVmaW5lICBCQ01BX0NDX1NMT1dDTEtDVExfQ0xLRElWCTB4RkZGRjAwMDAJLyogQ2xvY2tEaXZpZGVyIChTbG93Q2xrID0gMS8oNCtkaXZpc29yKSkgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfU0xPV0NMS0NUTF9DTEtESVZfU0hJRlQJMTYKKyNkZWZpbmUgQkNNQV9DQ19TWVNDTEtDVEwJCTB4MDBDMAkJLyogUmV2ID49IDMgb25seSAqLworI2RlZmluZQkgQkNNQV9DQ19TWVNDTEtDVExfSURMUEVOCTB4MDAwMDAwMDEJLyogSUxQZW46IEVuYWJsZSBJZGxlIExvdyBQb3dlciAqLworI2RlZmluZQkgQkNNQV9DQ19TWVNDTEtDVExfQUxQRU4JMHgwMDAwMDAwMgkvKiBBTFBlbjogRW5hYmxlIEFjdGl2ZSBMb3cgUG93ZXIgKi8KKyNkZWZpbmUJIEJDTUFfQ0NfU1lTQ0xLQ1RMX1BMTEVOCTB4MDAwMDAwMDQJLyogRm9yY2VQTExPbiAqLworI2RlZmluZQkgQkNNQV9DQ19TWVNDTEtDVExfRk9SQ0VBTFAJMHgwMDAwMDAwOAkvKiBGb3JjZSBBTFAgKG9yIEhUIGlmIEFMUGVuIGlzIG5vdCBzZXQgKi8KKyNkZWZpbmUJIEJDTUFfQ0NfU1lTQ0xLQ1RMX0ZPUkNFSFQJMHgwMDAwMDAxMAkvKiBGb3JjZSBIVCAqLworI2RlZmluZSAgQkNNQV9DQ19TWVNDTEtDVExfQ0xLRElWCTB4RkZGRjAwMDAJLyogQ2xrRGl2ICAoSUxQID0gMS8oNCtkaXZpc29yKSkgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfU1lTQ0xLQ1RMX0NMS0RJVl9TSElGVAkxNgorI2RlZmluZSBCQ01BX0NDX0NMS1NUU1RSCQkweDAwQzQJCS8qIFJldiA+PSAzIG9ubHkgKi8KKyNkZWZpbmUgQkNNQV9DQ19FUk9NCQkJMHgwMEZDCisjZGVmaW5lIEJDTUFfQ0NfUENNQ0lBX0NGRwkJMHgwMTAwCisjZGVmaW5lIEJDTUFfQ0NfUENNQ0lBX01FTVdBSVQJCTB4MDEwNAorI2RlZmluZSBCQ01BX0NDX1BDTUNJQV9BVFRSV0FJVAkJMHgwMTA4CisjZGVmaW5lIEJDTUFfQ0NfUENNQ0lBX0lPV0FJVAkJMHgwMTBDCisjZGVmaW5lIEJDTUFfQ0NfSURFX0NGRwkJCTB4MDExMAorI2RlZmluZSBCQ01BX0NDX0lERV9NRU1XQUlUCQkweDAxMTQKKyNkZWZpbmUgQkNNQV9DQ19JREVfQVRUUldBSVQJCTB4MDExOAorI2RlZmluZSBCQ01BX0NDX0lERV9JT1dBSVQJCTB4MDExQworI2RlZmluZSBCQ01BX0NDX1BST0dfQ0ZHCQkweDAxMjAKKyNkZWZpbmUgQkNNQV9DQ19QUk9HX1dBSVRDTlQJCTB4MDEyNAorI2RlZmluZSBCQ01BX0NDX0ZMQVNIX0NGRwkJMHgwMTI4CisjZGVmaW5lIEJDTUFfQ0NfRkxBU0hfV0FJVENOVAkJMHgwMTJDCisjZGVmaW5lIEJDTUFfQ0NfQ0xLQ1RMU1QJCTB4MDFFMCAvKiBDbG9jayBjb250cm9sIGFuZCBzdGF0dXMgKHJldiA+PSAyMCkgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfQ0xLQ1RMU1RfRk9SQ0VBTFAJMHgwMDAwMDAwMSAvKiBGb3JjZSBBTFAgcmVxdWVzdCAqLworI2RlZmluZSAgQkNNQV9DQ19DTEtDVExTVF9GT1JDRUhUCTB4MDAwMDAwMDIgLyogRm9yY2UgSFQgcmVxdWVzdCAqLworI2RlZmluZSAgQkNNQV9DQ19DTEtDVExTVF9GT1JDRUlMUAkweDAwMDAwMDA0IC8qIEZvcmNlIElMUCByZXF1ZXN0ICovCisjZGVmaW5lICBCQ01BX0NDX0NMS0NUTFNUX0hBVkVBTFBSRVEJMHgwMDAwMDAwOCAvKiBBTFAgYXZhaWxhYmxlIHJlcXVlc3QgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfQ0xLQ1RMU1RfSEFWRUhUUkVRCTB4MDAwMDAwMTAgLyogSFQgYXZhaWxhYmxlIHJlcXVlc3QgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfQ0xLQ1RMU1RfSFdDUk9GRgkweDAwMDAwMDIwIC8qIEZvcmNlIEhXIGNsb2NrIHJlcXVlc3Qgb2ZmICovCisjZGVmaW5lICBCQ01BX0NDX0NMS0NUTFNUX0hBVkVIVAkweDAwMDEwMDAwIC8qIEhUIGF2YWlsYWJsZSAqLworI2RlZmluZSAgQkNNQV9DQ19DTEtDVExTVF9IQVZFQUxQCTB4MDAwMjAwMDAgLyogQVBMIGF2YWlsYWJsZSAqLworI2RlZmluZSBCQ01BX0NDX0hXX1dPUktBUk9VTkQJCTB4MDFFNCAvKiBIYXJkd2FyZSB3b3JrYXJvdW5kIChyZXYgPj0gMjApICovCisjZGVmaW5lIEJDTUFfQ0NfVUFSVDBfREFUQQkJMHgwMzAwCisjZGVmaW5lIEJDTUFfQ0NfVUFSVDBfSU1SCQkweDAzMDQKKyNkZWZpbmUgQkNNQV9DQ19VQVJUMF9GQ1IJCTB4MDMwOAorI2RlZmluZSBCQ01BX0NDX1VBUlQwX0xDUgkJMHgwMzBDCisjZGVmaW5lIEJDTUFfQ0NfVUFSVDBfTUNSCQkweDAzMTAKKyNkZWZpbmUgQkNNQV9DQ19VQVJUMF9MU1IJCTB4MDMxNAorI2RlZmluZSBCQ01BX0NDX1VBUlQwX01TUgkJMHgwMzE4CisjZGVmaW5lIEJDTUFfQ0NfVUFSVDBfU0NSQVRDSAkJMHgwMzFDCisjZGVmaW5lIEJDTUFfQ0NfVUFSVDFfREFUQQkJMHgwNDAwCisjZGVmaW5lIEJDTUFfQ0NfVUFSVDFfSU1SCQkweDA0MDQKKyNkZWZpbmUgQkNNQV9DQ19VQVJUMV9GQ1IJCTB4MDQwOAorI2RlZmluZSBCQ01BX0NDX1VBUlQxX0xDUgkJMHgwNDBDCisjZGVmaW5lIEJDTUFfQ0NfVUFSVDFfTUNSCQkweDA0MTAKKyNkZWZpbmUgQkNNQV9DQ19VQVJUMV9MU1IJCTB4MDQxNAorI2RlZmluZSBCQ01BX0NDX1VBUlQxX01TUgkJMHgwNDE4CisjZGVmaW5lIEJDTUFfQ0NfVUFSVDFfU0NSQVRDSAkJMHgwNDFDCisvKiBQTVUgcmVnaXN0ZXJzIChyZXYgPj0gMjApICovCisjZGVmaW5lIEJDTUFfQ0NfUE1VX0NUTAkJCTB4MDYwMCAvKiBQTVUgY29udHJvbCAqLworI2RlZmluZSAgQkNNQV9DQ19QTVVfQ1RMX0lMUF9ESVYJMHhGRkZGMDAwMCAvKiBJTFAgZGl2IG1hc2sgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfUE1VX0NUTF9JTFBfRElWX1NISUZUCTE2CisjZGVmaW5lICBCQ01BX0NDX1BNVV9DVExfTk9JTFBPTlcJMHgwMDAwMDIwMCAvKiBObyBJTFAgb24gd2FpdCAqLworI2RlZmluZSAgQkNNQV9DQ19QTVVfQ1RMX0hUUkVRRU4JMHgwMDAwMDEwMCAvKiBIVCByZXEgZW5hYmxlICovCisjZGVmaW5lICBCQ01BX0NDX1BNVV9DVExfQUxQUkVRRU4JMHgwMDAwMDA4MCAvKiBBTFAgcmVxIGVuYWJsZSAqLworI2RlZmluZSAgQkNNQV9DQ19QTVVfQ1RMX1hUQUxGUkVRCTB4MDAwMDAwN0MgLyogQ3J5c3RhbCBmcmVxICovCisjZGVmaW5lICBCQ01BX0NDX1BNVV9DVExfWFRBTEZSRVFfU0hJRlQJMgorI2RlZmluZSAgQkNNQV9DQ19QTVVfQ1RMX0lMUERJVkVOCTB4MDAwMDAwMDIgLyogSUxQIGRpdiBlbmFibGUgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfUE1VX0NUTF9MUE9TRUwJCTB4MDAwMDAwMDEgLyogTFBPIHNlbCAqLworI2RlZmluZSBCQ01BX0NDX1BNVV9DQVAJCQkweDA2MDQgLyogUE1VIGNhcGFiaWxpdGllcyAqLworI2RlZmluZSAgQkNNQV9DQ19QTVVfQ0FQX1JFVklTSU9OCTB4MDAwMDAwRkYgLyogUmV2aXNpb24gbWFzayAqLworI2RlZmluZSBCQ01BX0NDX1BNVV9TVEFUCQkweDA2MDggLyogUE1VIHN0YXR1cyAqLworI2RlZmluZSAgQkNNQV9DQ19QTVVfU1RBVF9JTlRQRU5ECTB4MDAwMDAwNDAgLyogSW50ZXJydXB0IHBlbmRpbmcgKi8KKyNkZWZpbmUgIEJDTUFfQ0NfUE1VX1NUQVRfU0JDTEtTVAkweDAwMDAwMDMwIC8qIEJhY2twbGFuZSBjbG9jayBzdGF0dXM/ICovCisjZGVmaW5lICBCQ01BX0NDX1BNVV9TVEFUX0hBVkVBTFAJMHgwMDAwMDAwOCAvKiBBTFAgYXZhaWxhYmxlICovCisjZGVmaW5lICBCQ01BX0NDX1BNVV9TVEFUX0hBVkVIVAkweDAwMDAwMDA0IC8qIEhUIGF2YWlsYWJsZSAqLworI2RlZmluZSAgQkNNQV9DQ19QTVVfU1RBVF9SRVNJTklUCTB4MDAwMDAwMDMgLyogUmVzIGluaXQgKi8KKyNkZWZpbmUgQkNNQV9DQ19QTVVfUkVTX1NUQVQJCTB4MDYwQyAvKiBQTVUgcmVzIHN0YXR1cyAqLworI2RlZmluZSBCQ01BX0NDX1BNVV9SRVNfUEVORAkJMHgwNjEwIC8qIFBNVSByZXMgcGVuZGluZyAqLworI2RlZmluZSBCQ01BX0NDX1BNVV9USU1FUgkJMHgwNjE0IC8qIFBNVSB0aW1lciAqLworI2RlZmluZSBCQ01BX0NDX1BNVV9NSU5SRVNfTVNLCQkweDA2MTggLyogUE1VIG1pbiByZXMgbWFzayAqLworI2RlZmluZSBCQ01BX0NDX1BNVV9NQVhSRVNfTVNLCQkweDA2MUMgLyogUE1VIG1heCByZXMgbWFzayAqLworI2RlZmluZSBCQ01BX0NDX1BNVV9SRVNfVEFCU0VMCQkweDA2MjAgLyogUE1VIHJlcyB0YWJsZSBzZWwgKi8KKyNkZWZpbmUgQkNNQV9DQ19QTVVfUkVTX0RFUE1TSwkJMHgwNjI0IC8qIFBNVSByZXMgZGVwIG1hc2sgKi8KKyNkZWZpbmUgQkNNQV9DQ19QTVVfUkVTX1VQRE5UTQkJMHgwNjI4IC8qIFBNVSByZXMgdXBkb3duIHRpbWVyICovCisjZGVmaW5lIEJDTUFfQ0NfUE1VX1JFU19USU1FUgkJMHgwNjJDIC8qIFBNVSByZXMgdGltZXIgKi8KKyNkZWZpbmUgQkNNQV9DQ19QTVVfQ0xLU1RSRVRDSAkJMHgwNjMwIC8qIFBNVSBjbG9ja3N0cmV0Y2ggKi8KKyNkZWZpbmUgQkNNQV9DQ19QTVVfV0FUQ0hET0cJCTB4MDYzNCAvKiBQTVUgd2F0Y2hkb2cgKi8KKyNkZWZpbmUgQkNNQV9DQ19QTVVfUkVTX1JFUVRTCQkweDA2NDAgLyogUE1VIHJlcyByZXEgdGltZXIgc2VsICovCisjZGVmaW5lIEJDTUFfQ0NfUE1VX1JFU19SRVFUCQkweDA2NDQgLyogUE1VIHJlcyByZXEgdGltZXIgKi8KKyNkZWZpbmUgQkNNQV9DQ19QTVVfUkVTX1JFUU0JCTB4MDY0OCAvKiBQTVUgcmVzIHJlcSBtYXNrICovCisjZGVmaW5lIEJDTUFfQ0NfQ0hJUENUTF9BRERSCQkweDA2NTAKKyNkZWZpbmUgQkNNQV9DQ19DSElQQ1RMX0RBVEEJCTB4MDY1NAorI2RlZmluZSBCQ01BX0NDX1JFR0NUTF9BRERSCQkweDA2NTgKKyNkZWZpbmUgQkNNQV9DQ19SRUdDVExfREFUQQkJMHgwNjVDCisjZGVmaW5lIEJDTUFfQ0NfUExMQ1RMX0FERFIJCTB4MDY2MAorI2RlZmluZSBCQ01BX0NDX1BMTENUTF9EQVRBCQkweDA2NjQKKworLyogRGF0YSBmb3IgdGhlIFBNVSwgaWYgYXZhaWxhYmxlLgorICogQ2hlY2sgYXZhaWxhYmlsaXR5IHdpdGggKChzdHJ1Y3QgYmNtYV9jaGlwY29tbW9uKS0+Y2FwYWJpbGl0aWVzICYgQkNNQV9DQ19DQVBfUE1VKQorICovCitzdHJ1Y3QgYmNtYV9jaGlwY29tbW9uX3BtdSB7CisJdTggcmV2OwkJCS8qIFBNVSByZXZpc2lvbiAqLworCXUzMiBjcnlzdGFsZnJlcTsJLyogVGhlIGFjdGl2ZSBjcnlzdGFsIGZyZXF1ZW5jeSAoaW4ga0h6KSAqLworfTsKKworc3RydWN0IGJjbWFfZHJ2X2NjIHsKKwlzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmU7CisJdTMyIHN0YXR1czsKKwl1MzIgY2FwYWJpbGl0aWVzOworCXUzMiBjYXBhYmlsaXRpZXNfZXh0OworCS8qIEZhc3QgUG93ZXJ1cCBEZWxheSBjb25zdGFudCAqLworCXUxNiBmYXN0X3B3cnVwX2RlbGF5OworCXN0cnVjdCBiY21hX2NoaXBjb21tb25fcG11IHBtdTsKK307CisKKy8qIFJlZ2lzdGVyIGFjY2VzcyAqLworI2RlZmluZSBiY21hX2NjX3JlYWQzMihjYywgb2Zmc2V0KSBcCisJYmNtYV9yZWFkMzIoKGNjKS0+Y29yZSwgb2Zmc2V0KQorI2RlZmluZSBiY21hX2NjX3dyaXRlMzIoY2MsIG9mZnNldCwgdmFsKSBcCisJYmNtYV93cml0ZTMyKChjYyktPmNvcmUsIG9mZnNldCwgdmFsKQorCisjZGVmaW5lIGJjbWFfY2NfbWFzazMyKGNjLCBvZmZzZXQsIG1hc2spIFwKKwliY21hX2NjX3dyaXRlMzIoY2MsIG9mZnNldCwgYmNtYV9jY19yZWFkMzIoY2MsIG9mZnNldCkgJiAobWFzaykpCisjZGVmaW5lIGJjbWFfY2Nfc2V0MzIoY2MsIG9mZnNldCwgc2V0KSBcCisJYmNtYV9jY193cml0ZTMyKGNjLCBvZmZzZXQsIGJjbWFfY2NfcmVhZDMyKGNjLCBvZmZzZXQpIHwgKHNldCkpCisjZGVmaW5lIGJjbWFfY2NfbWFza3NldDMyKGNjLCBvZmZzZXQsIG1hc2ssIHNldCkgXAorCWJjbWFfY2Nfd3JpdGUzMihjYywgb2Zmc2V0LCAoYmNtYV9jY19yZWFkMzIoY2MsIG9mZnNldCkgJiAobWFzaykpIHwgKHNldCkpCisKK2V4dGVybiB2b2lkIGJjbWFfY29yZV9jaGlwY29tbW9uX2luaXQoc3RydWN0IGJjbWFfZHJ2X2NjICpjYyk7CisKK2V4dGVybiB2b2lkIGJjbWFfY2hpcGNvX3N1c3BlbmQoc3RydWN0IGJjbWFfZHJ2X2NjICpjYyk7CitleHRlcm4gdm9pZCBiY21hX2NoaXBjb19yZXN1bWUoc3RydWN0IGJjbWFfZHJ2X2NjICpjYyk7CisKK2V4dGVybiB2b2lkIGJjbWFfY2hpcGNvX3dhdGNoZG9nX3RpbWVyX3NldChzdHJ1Y3QgYmNtYV9kcnZfY2MgKmNjLAorCQkJCQkgIHUzMiB0aWNrcyk7CisKK3ZvaWQgYmNtYV9jaGlwY29faXJxX21hc2soc3RydWN0IGJjbWFfZHJ2X2NjICpjYywgdTMyIG1hc2ssIHUzMiB2YWx1ZSk7CisKK3UzMiBiY21hX2NoaXBjb19pcnFfc3RhdHVzKHN0cnVjdCBiY21hX2Rydl9jYyAqY2MsIHUzMiBtYXNrKTsKKworLyogQ2hpcGNvbW1vbiBHUElPIHBpbiBhY2Nlc3MuICovCit1MzIgYmNtYV9jaGlwY29fZ3Bpb19pbihzdHJ1Y3QgYmNtYV9kcnZfY2MgKmNjLCB1MzIgbWFzayk7Cit1MzIgYmNtYV9jaGlwY29fZ3Bpb19vdXQoc3RydWN0IGJjbWFfZHJ2X2NjICpjYywgdTMyIG1hc2ssIHUzMiB2YWx1ZSk7Cit1MzIgYmNtYV9jaGlwY29fZ3Bpb19vdXRlbihzdHJ1Y3QgYmNtYV9kcnZfY2MgKmNjLCB1MzIgbWFzaywgdTMyIHZhbHVlKTsKK3UzMiBiY21hX2NoaXBjb19ncGlvX2NvbnRyb2woc3RydWN0IGJjbWFfZHJ2X2NjICpjYywgdTMyIG1hc2ssIHUzMiB2YWx1ZSk7Cit1MzIgYmNtYV9jaGlwY29fZ3Bpb19pbnRtYXNrKHN0cnVjdCBiY21hX2Rydl9jYyAqY2MsIHUzMiBtYXNrLCB1MzIgdmFsdWUpOwordTMyIGJjbWFfY2hpcGNvX2dwaW9fcG9sYXJpdHkoc3RydWN0IGJjbWFfZHJ2X2NjICpjYywgdTMyIG1hc2ssIHUzMiB2YWx1ZSk7CisKKy8qIFBNVSBzdXBwb3J0ICovCitleHRlcm4gdm9pZCBiY21hX3BtdV9pbml0KHN0cnVjdCBiY21hX2Rydl9jYyAqY2MpOworCisjZW5kaWYgLyogTElOVVhfQkNNQV9EUklWRVJfQ0NfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmNtYS9iY21hX2RyaXZlcl9wY2kuaCBiL2luY2x1ZGUvbGludXgvYmNtYS9iY21hX2RyaXZlcl9wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2UxOTFjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9iY21hL2JjbWFfZHJpdmVyX3BjaS5oCkBAIC0wLDAgKzEsODkgQEAKKyNpZm5kZWYgTElOVVhfQkNNQV9EUklWRVJfUENJX0hfCisjZGVmaW5lIExJTlVYX0JDTUFfRFJJVkVSX1BDSV9IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IHBjaV9kZXY7CisKKy8qKiBQQ0kgY29yZSByZWdpc3RlcnMuICoqLworI2RlZmluZSBCQ01BX0NPUkVfUENJX0NUTAkJCTB4MDAwMAkvKiBQQ0kgQ29udHJvbCAqLworI2RlZmluZSAgQkNNQV9DT1JFX1BDSV9DVExfUlNUX09FCQkweDAwMDAwMDAxIC8qIFBDSV9SRVNFVCBPdXRwdXQgRW5hYmxlICovCisjZGVmaW5lICBCQ01BX0NPUkVfUENJX0NUTF9SU1QJCQkweDAwMDAwMDAyIC8qIFBDSV9SRVNFVCBkcml2ZW4gb3V0IHRvIHBpbiAqLworI2RlZmluZSAgQkNNQV9DT1JFX1BDSV9DVExfQ0xLX09FCQkweDAwMDAwMDA0IC8qIENsb2NrIGdhdGUgT3V0cHV0IEVuYWJsZSAqLworI2RlZmluZSAgQkNNQV9DT1JFX1BDSV9DVExfQ0xLCQkJMHgwMDAwMDAwOCAvKiBHYXRlIGZvciBjbG9jayBkcml2ZW4gb3V0IHRvIHBpbiAqLworI2RlZmluZSBCQ01BX0NPUkVfUENJX0FSQkNUTAkJCTB4MDAxMAkvKiBQQ0kgQXJiaXRlciBDb250cm9sICovCisjZGVmaW5lICBCQ01BX0NPUkVfUENJX0FSQkNUTF9JTlRFUk4JCTB4MDAwMDAwMDEgLyogVXNlIGludGVybmFsIGFyYml0ZXIgKi8KKyNkZWZpbmUgIEJDTUFfQ09SRV9QQ0lfQVJCQ1RMX0VYVEVSTgkJMHgwMDAwMDAwMiAvKiBVc2UgZXh0ZXJuYWwgYXJiaXRlciAqLworI2RlZmluZSAgQkNNQV9DT1JFX1BDSV9BUkJDVExfUEFSS0lECQkweDAwMDAwMDA2IC8qIE1hc2ssIHNlbGVjdHMgd2hpY2ggYWdlbnQgaXMgcGFya2VkIG9uIGFuIGlkbGUgYnVzICovCisjZGVmaW5lICAgQkNNQV9DT1JFX1BDSV9BUkJDVExfUEFSS0lEX0xBU1QJMHgwMDAwMDAwMCAvKiBMYXN0IHJlcXVlc3RvciAqLworI2RlZmluZSAgIEJDTUFfQ09SRV9QQ0lfQVJCQ1RMX1BBUktJRF80NzEwCTB4MDAwMDAwMDIgLyogNDcxMCAqLworI2RlZmluZSAgIEJDTUFfQ09SRV9QQ0lfQVJCQ1RMX1BBUktJRF9FWFQwCTB4MDAwMDAwMDQgLyogRXh0ZXJuYWwgcmVxdWVzdG9yIDAgKi8KKyNkZWZpbmUgICBCQ01BX0NPUkVfUENJX0FSQkNUTF9QQVJLSURfRVhUMQkweDAwMDAwMDA2IC8qIEV4dGVybmFsIHJlcXVlc3RvciAxICovCisjZGVmaW5lIEJDTUFfQ09SRV9QQ0lfSVNUQVQJCQkweDAwMjAJLyogSW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgQkNNQV9DT1JFX1BDSV9JU1RBVF9JTlRBCQkweDAwMDAwMDAxIC8qIFBDSSBJTlRBIyAqLworI2RlZmluZSAgQkNNQV9DT1JFX1BDSV9JU1RBVF9JTlRCCQkweDAwMDAwMDAyIC8qIFBDSSBJTlRCIyAqLworI2RlZmluZSAgQkNNQV9DT1JFX1BDSV9JU1RBVF9TRVJSCQkweDAwMDAwMDA0IC8qIFBDSSBTRVJSIyAod3JpdGUgdG8gY2xlYXIpICovCisjZGVmaW5lICBCQ01BX0NPUkVfUENJX0lTVEFUX1BFUlIJCTB4MDAwMDAwMDggLyogUENJIFBFUlIjICh3cml0ZSB0byBjbGVhcikgKi8KKyNkZWZpbmUgIEJDTUFfQ09SRV9QQ0lfSVNUQVRfUE1FCQkweDAwMDAwMDEwIC8qIFBDSSBQTUUjICovCisjZGVmaW5lIEJDTUFfQ09SRV9QQ0lfSU1BU0sJCQkweDAwMjQJLyogSW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgIEJDTUFfQ09SRV9QQ0lfSU1BU0tfSU5UQQkJMHgwMDAwMDAwMSAvKiBQQ0kgSU5UQSMgKi8KKyNkZWZpbmUgIEJDTUFfQ09SRV9QQ0lfSU1BU0tfSU5UQgkJMHgwMDAwMDAwMiAvKiBQQ0kgSU5UQiMgKi8KKyNkZWZpbmUgIEJDTUFfQ09SRV9QQ0lfSU1BU0tfU0VSUgkJMHgwMDAwMDAwNCAvKiBQQ0kgU0VSUiMgKi8KKyNkZWZpbmUgIEJDTUFfQ09SRV9QQ0lfSU1BU0tfUEVSUgkJMHgwMDAwMDAwOCAvKiBQQ0kgUEVSUiMgKi8KKyNkZWZpbmUgIEJDTUFfQ09SRV9QQ0lfSU1BU0tfUE1FCQkweDAwMDAwMDEwIC8qIFBDSSBQTUUjICovCisjZGVmaW5lIEJDTUFfQ09SRV9QQ0lfTUJPWAkJCTB4MDAyOAkvKiBCYWNrcGxhbmUgdG8gUENJIE1haWxib3ggKi8KKyNkZWZpbmUgIEJDTUFfQ09SRV9QQ0lfTUJPWF9GMF8wCQkweDAwMDAwMTAwIC8qIFBDSSBmdW5jdGlvbiAwLCBJTlQgMCAqLworI2RlZmluZSAgQkNNQV9DT1JFX1BDSV9NQk9YX0YwXzEJCTB4MDAwMDAyMDAgLyogUENJIGZ1bmN0aW9uIDAsIElOVCAxICovCisjZGVmaW5lICBCQ01BX0NPUkVfUENJX01CT1hfRjFfMAkJMHgwMDAwMDQwMCAvKiBQQ0kgZnVuY3Rpb24gMSwgSU5UIDAgKi8KKyNkZWZpbmUgIEJDTUFfQ09SRV9QQ0lfTUJPWF9GMV8xCQkweDAwMDAwODAwIC8qIFBDSSBmdW5jdGlvbiAxLCBJTlQgMSAqLworI2RlZmluZSAgQkNNQV9DT1JFX1BDSV9NQk9YX0YyXzAJCTB4MDAwMDEwMDAgLyogUENJIGZ1bmN0aW9uIDIsIElOVCAwICovCisjZGVmaW5lICBCQ01BX0NPUkVfUENJX01CT1hfRjJfMQkJMHgwMDAwMjAwMCAvKiBQQ0kgZnVuY3Rpb24gMiwgSU5UIDEgKi8KKyNkZWZpbmUgIEJDTUFfQ09SRV9QQ0lfTUJPWF9GM18wCQkweDAwMDA0MDAwIC8qIFBDSSBmdW5jdGlvbiAzLCBJTlQgMCAqLworI2RlZmluZSAgQkNNQV9DT1JFX1BDSV9NQk9YX0YzXzEJCTB4MDAwMDgwMDAgLyogUENJIGZ1bmN0aW9uIDMsIElOVCAxICovCisjZGVmaW5lIEJDTUFfQ09SRV9QQ0lfQkNBU1RfQUREUgkJMHgwMDUwCS8qIEJhY2twbGFuZSBCcm9hZGNhc3QgQWRkcmVzcyAqLworI2RlZmluZSAgQkNNQV9DT1JFX1BDSV9CQ0FTVF9BRERSX01BU0sJCTB4MDAwMDAwRkYKKyNkZWZpbmUgQkNNQV9DT1JFX1BDSV9CQ0FTVF9EQVRBCQkweDAwNTQJLyogQmFja3BsYW5lIEJyb2FkY2FzdCBEYXRhICovCisjZGVmaW5lIEJDTUFfQ09SRV9QQ0lfR1BJT19JTgkJCTB4MDA2MAkvKiByZXYgPj0gMiBvbmx5ICovCisjZGVmaW5lIEJDTUFfQ09SRV9QQ0lfR1BJT19PVVQJCQkweDAwNjQJLyogcmV2ID49IDIgb25seSAqLworI2RlZmluZSBCQ01BX0NPUkVfUENJX0dQSU9fRU5BQkxFCQkweDAwNjgJLyogcmV2ID49IDIgb25seSAqLworI2RlZmluZSBCQ01BX0NPUkVfUENJX0dQSU9fQ1RMCQkJMHgwMDZDCS8qIHJldiA+PSAyIG9ubHkgKi8KKyNkZWZpbmUgQkNNQV9DT1JFX1BDSV9TQlRPUENJMAkJCTB4MDEwMAkvKiBCYWNrcGxhbmUgdG8gUENJIHRyYW5zbGF0aW9uIDAgKHNidG9wY2kwKSAqLworI2RlZmluZSAgQkNNQV9DT1JFX1BDSV9TQlRPUENJMF9NQVNLCQkweEZDMDAwMDAwCisjZGVmaW5lIEJDTUFfQ09SRV9QQ0lfU0JUT1BDSTEJCQkweDAxMDQJLyogQmFja3BsYW5lIHRvIFBDSSB0cmFuc2xhdGlvbiAxIChzYnRvcGNpMSkgKi8KKyNkZWZpbmUgIEJDTUFfQ09SRV9QQ0lfU0JUT1BDSTFfTUFTSwkJMHhGQzAwMDAwMAorI2RlZmluZSBCQ01BX0NPUkVfUENJX1NCVE9QQ0kyCQkJMHgwMTA4CS8qIEJhY2twbGFuZSB0byBQQ0kgdHJhbnNsYXRpb24gMiAoc2J0b3BjaTIpICovCisjZGVmaW5lICBCQ01BX0NPUkVfUENJX1NCVE9QQ0kyX01BU0sJCTB4QzAwMDAwMDAKKyNkZWZpbmUgQkNNQV9DT1JFX1BDSV9QQ0lDRkcwCQkJMHgwNDAwCS8qIFBDSSBjb25maWcgc3BhY2UgMCAocmV2ID49IDgpICovCisjZGVmaW5lIEJDTUFfQ09SRV9QQ0lfUENJQ0ZHMQkJCTB4MDUwMAkvKiBQQ0kgY29uZmlnIHNwYWNlIDEgKHJldiA+PSA4KSAqLworI2RlZmluZSBCQ01BX0NPUkVfUENJX1BDSUNGRzIJCQkweDA2MDAJLyogUENJIGNvbmZpZyBzcGFjZSAyIChyZXYgPj0gOCkgKi8KKyNkZWZpbmUgQkNNQV9DT1JFX1BDSV9QQ0lDRkczCQkJMHgwNzAwCS8qIFBDSSBjb25maWcgc3BhY2UgMyAocmV2ID49IDgpICovCisjZGVmaW5lIEJDTUFfQ09SRV9QQ0lfU1BST00od29yZG9mZnNldCkJCSgweDA4MDAgKyAoKHdvcmRvZmZzZXQpICogMikpIC8qIFNQUk9NIHNoYWRvdyBhcmVhICg3MiBieXRlcykgKi8KKworLyogU0J0b1BDSXggKi8KKyNkZWZpbmUgQkNNQV9DT1JFX1BDSV9TQlRPUENJX01FTQkJMHgwMDAwMDAwMAorI2RlZmluZSBCQ01BX0NPUkVfUENJX1NCVE9QQ0lfSU8JCTB4MDAwMDAwMDEKKyNkZWZpbmUgQkNNQV9DT1JFX1BDSV9TQlRPUENJX0NGRzAJCTB4MDAwMDAwMDIKKyNkZWZpbmUgQkNNQV9DT1JFX1BDSV9TQlRPUENJX0NGRzEJCTB4MDAwMDAwMDMKKyNkZWZpbmUgQkNNQV9DT1JFX1BDSV9TQlRPUENJX1BSRUYJCTB4MDAwMDAwMDQgLyogUHJlZmV0Y2ggZW5hYmxlICovCisjZGVmaW5lIEJDTUFfQ09SRV9QQ0lfU0JUT1BDSV9CVVJTVAkJMHgwMDAwMDAwOCAvKiBCdXJzdCBlbmFibGUgKi8KKyNkZWZpbmUgQkNNQV9DT1JFX1BDSV9TQlRPUENJX01STQkJMHgwMDAwMDAyMCAvKiBNZW1vcnkgUmVhZCBNdWx0aXBsZSAqLworI2RlZmluZSBCQ01BX0NPUkVfUENJX1NCVE9QQ0lfUkMJCTB4MDAwMDAwMzAgLyogUmVhZCBDb21tYW5kIG1hc2sgKHJldiA+PSAxMSkgKi8KKyNkZWZpbmUgIEJDTUFfQ09SRV9QQ0lfU0JUT1BDSV9SQ19SRUFECQkweDAwMDAwMDAwIC8qIE1lbW9yeSByZWFkICovCisjZGVmaW5lICBCQ01BX0NPUkVfUENJX1NCVE9QQ0lfUkNfUkVBREwJCTB4MDAwMDAwMTAgLyogTWVtb3J5IHJlYWQgbGluZSAqLworI2RlZmluZSAgQkNNQV9DT1JFX1BDSV9TQlRPUENJX1JDX1JFQURNCQkweDAwMDAwMDIwIC8qIE1lbW9yeSByZWFkIG11bHRpcGxlICovCisKKy8qIFBDSWNvcmUgc3BlY2lmaWMgYm9hcmRmbGFncyAqLworI2RlZmluZSBCQ01BX0NPUkVfUENJX0JGTF9OT1BDSQkJCTB4MDAwMDA0MDAgLyogQm9hcmQgbGVhdmVzIFBDSSBmbG9hdGluZyAqLworCitzdHJ1Y3QgYmNtYV9kcnZfcGNpIHsKKwlzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmU7CisJdTggc2V0dXBfZG9uZToxOworfTsKKworLyogUmVnaXN0ZXIgYWNjZXNzICovCisjZGVmaW5lIHBjaWNvcmVfcmVhZDMyKHBjLCBvZmZzZXQpCQliY21hX3JlYWQzMigocGMpLT5jb3JlLCBvZmZzZXQpCisjZGVmaW5lIHBjaWNvcmVfd3JpdGUzMihwYywgb2Zmc2V0LCB2YWwpCWJjbWFfd3JpdGUzMigocGMpLT5jb3JlLCBvZmZzZXQsIHZhbCkKKworZXh0ZXJuIHZvaWQgYmNtYV9jb3JlX3BjaV9pbml0KHN0cnVjdCBiY21hX2Rydl9wY2kgKnBjKTsKKworI2VuZGlmIC8qIExJTlVYX0JDTUFfRFJJVkVSX1BDSV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iY21hL2JjbWFfcmVncy5oIGIvaW5jbHVkZS9saW51eC9iY21hL2JjbWFfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MmQ4OGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2JjbWEvYmNtYV9yZWdzLmgKQEAgLTAsMCArMSwzNCBAQAorI2lmbmRlZiBMSU5VWF9CQ01BX1JFR1NfSF8KKyNkZWZpbmUgTElOVVhfQkNNQV9SRUdTX0hfCisKKy8qIEFnZW50IHJlZ2lzdGVycyAoY29tbW9uIGZvciBldmVyeSBjb3JlKSAqLworI2RlZmluZSBCQ01BX0lPQ1RMCQkJMHgwNDA4CisjZGVmaW5lICBCQ01BX0lPQ1RMX0NMSwkJCTB4MDAwMQorI2RlZmluZSAgQkNNQV9JT0NUTF9GR0MJCQkweDAwMDIKKyNkZWZpbmUgIEJDTUFfSU9DVExfQ09SRV9CSVRTCQkweDNGRkMKKyNkZWZpbmUgIEJDTUFfSU9DVExfUE1FX0VOCQkweDQwMDAKKyNkZWZpbmUgIEJDTUFfSU9DVExfQklTVF9FTgkJMHg4MDAwCisjZGVmaW5lIEJDTUFfUkVTRVRfQ1RMCQkJMHgwODAwCisjZGVmaW5lICBCQ01BX1JFU0VUX0NUTF9SRVNFVAkJMHgwMDAxCisKKy8qIEJDTUEgUENJIGNvbmZpZyBzcGFjZSByZWdpc3RlcnMuICovCisjZGVmaW5lIEJDTUFfUENJX1BNQ1NSCQkJMHg0NAorI2RlZmluZSAgQkNNQV9QQ0lfUEUJCQkweDEwMAorI2RlZmluZSBCQ01BX1BDSV9CQVIwX1dJTgkJMHg4MAkvKiBCYWNrcGxhbmUgYWRkcmVzcyBzcGFjZSAwICovCisjZGVmaW5lIEJDTUFfUENJX0JBUjFfV0lOCQkweDg0CS8qIEJhY2twbGFuZSBhZGRyZXNzIHNwYWNlIDEgKi8KKyNkZWZpbmUgQkNNQV9QQ0lfU1BST01DVEwJCTB4ODgJLyogU1BST00gY29udHJvbCAqLworI2RlZmluZSAgQkNNQV9QQ0lfU1BST01DVExfV0UJCTB4MTAJLyogU1BST00gd3JpdGUgZW5hYmxlICovCisjZGVmaW5lIEJDTUFfUENJX0JBUjFfQ09OVFJPTAkJMHg4YwkvKiBBZGRyZXNzIHNwYWNlIDEgYnVyc3QgY29udHJvbCAqLworI2RlZmluZSBCQ01BX1BDSV9JUlFTCQkJMHg5MAkvKiBQQ0kgaW50ZXJydXB0cyAqLworI2RlZmluZSBCQ01BX1BDSV9JUlFNQVNLCQkweDk0CS8qIFBDSSBJUlEgY29udHJvbCBhbmQgbWFzayAocGNpcmV2ID49IDYgb25seSkgKi8KKyNkZWZpbmUgQkNNQV9QQ0lfQkFDS1BMQU5FX0lSUVMJCTB4OTgJLyogQmFja3BsYW5lIEludGVycnVwdHMgKi8KKyNkZWZpbmUgQkNNQV9QQ0lfQkFSMF9XSU4yCQkweEFDCisjZGVmaW5lIEJDTUFfUENJX0dQSU9fSU4JCTB4QjAJLyogR1BJTyBJbnB1dCAocGNpcmV2ID49IDMgb25seSkgKi8KKyNkZWZpbmUgQkNNQV9QQ0lfR1BJT19PVVQJCTB4QjQJLyogR1BJTyBPdXRwdXQgKHBjaXJldiA+PSAzIG9ubHkpICovCisjZGVmaW5lIEJDTUFfUENJX0dQSU9fT1VUX0VOQUJMRQkweEI4CS8qIEdQSU8gT3V0cHV0IEVuYWJsZS9EaXNhYmxlIChwY2lyZXYgPj0gMyBvbmx5KSAqLworI2RlZmluZSAgQkNNQV9QQ0lfR1BJT19TQ1MJCTB4MTAJLyogUENJIGNvbmZpZyBzcGFjZSBiaXQgNCBmb3IgNDMwNmMwIHNsb3cgY2xvY2sgc291cmNlICovCisjZGVmaW5lICBCQ01BX1BDSV9HUElPX0hXUkFECQkweDIwCS8qIFBDSSBjb25maWcgc3BhY2UgR1BJTyAxMyBmb3IgaHcgcmFkaW8gZGlzYWJsZSAqLworI2RlZmluZSAgQkNNQV9QQ0lfR1BJT19YVEFMCQkweDQwCS8qIFBDSSBjb25maWcgc3BhY2UgR1BJTyAxNCBmb3IgWHRhbCBwb3dlcnVwICovCisjZGVmaW5lICBCQ01BX1BDSV9HUElPX1BMTAkJMHg4MAkvKiBQQ0kgY29uZmlnIHNwYWNlIEdQSU8gMTUgZm9yIFBMTCBwb3dlcmRvd24gKi8KKworI2VuZGlmIC8qIExJTlVYX0JDTUFfUkVHU19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaXRfc3BpbmxvY2suaCBiL2luY2x1ZGUvbGludXgvYml0X3NwaW5sb2NrLmgKaW5kZXggZTYxMjU3NS4uYjQzMjZiZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaXRfc3BpbmxvY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L2JpdF9zcGlubG9jay5oCkBAIC0yMywxMSArMjMsMTEgQEAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKICNpZiBkZWZpbmVkKENPTkZJR19TTVApIHx8IGRlZmluZWQoQ09ORklHX0RFQlVHX1NQSU5MT0NLKQogCXdoaWxlICh1bmxpa2VseSh0ZXN0X2FuZF9zZXRfYml0X2xvY2soYml0bnVtLCBhZGRyKSkpIHsKLQkJd2hpbGUgKHRlc3RfYml0KGJpdG51bSwgYWRkcikpIHsKLQkJCXByZWVtcHRfZW5hYmxlKCk7CisJCXByZWVtcHRfZW5hYmxlKCk7CisJCWRvIHsKIAkJCWNwdV9yZWxheCgpOwotCQkJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JCX0KKwkJfSB3aGlsZSAodGVzdF9iaXQoYml0bnVtLCBhZGRyKSk7CisJCXByZWVtcHRfZGlzYWJsZSgpOwogCX0KICNlbmRpZgogCV9fYWNxdWlyZShiaXRsb2NrKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCmluZGV4IGNiYmZkOTguLjJhZDk1ZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaApAQCAtMzg4LDIwICszODgsMTkgQEAKICNkZWZpbmUJUVVFVUVfRkxBR19TWU5DRlVMTAkzCS8qIHJlYWQgcXVldWUgaGFzIGJlZW4gZmlsbGVkICovCiAjZGVmaW5lIFFVRVVFX0ZMQUdfQVNZTkNGVUxMCTQJLyogd3JpdGUgcXVldWUgaGFzIGJlZW4gZmlsbGVkICovCiAjZGVmaW5lIFFVRVVFX0ZMQUdfREVBRAkJNQkvKiBxdWV1ZSBiZWluZyB0b3JuIGRvd24gKi8KLSNkZWZpbmUgUVVFVUVfRkxBR19SRUVOVEVSCTYJLyogUmUtZW50cmFuY3kgYXZvaWRhbmNlICovCi0jZGVmaW5lIFFVRVVFX0ZMQUdfRUxWU1dJVENICTcJLyogZG9uJ3QgdXNlIGVsZXZhdG9yLCBqdXN0IGRvIEZJRk8gKi8KLSNkZWZpbmUgUVVFVUVfRkxBR19CSURJCQk4CS8qIHF1ZXVlIHN1cHBvcnRzIGJpZGkgcmVxdWVzdHMgKi8KLSNkZWZpbmUgUVVFVUVfRkxBR19OT01FUkdFUyAgICAgOQkvKiBkaXNhYmxlIG1lcmdlIGF0dGVtcHRzICovCi0jZGVmaW5lIFFVRVVFX0ZMQUdfU0FNRV9DT01QICAgMTAJLyogZm9yY2UgY29tcGxldGUgb24gc2FtZSBDUFUgKi8KLSNkZWZpbmUgUVVFVUVfRkxBR19GQUlMX0lPICAgICAxMQkvKiBmYWtlIHRpbWVvdXQgKi8KLSNkZWZpbmUgUVVFVUVfRkxBR19TVEFDS0FCTEUgICAxMgkvKiBzdXBwb3J0cyByZXF1ZXN0IHN0YWNraW5nICovCi0jZGVmaW5lIFFVRVVFX0ZMQUdfTk9OUk9UICAgICAgMTMJLyogbm9uLXJvdGF0aW9uYWwgZGV2aWNlIChTU0QpICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfRUxWU1dJVENICTYJLyogZG9uJ3QgdXNlIGVsZXZhdG9yLCBqdXN0IGRvIEZJRk8gKi8KKyNkZWZpbmUgUVVFVUVfRkxBR19CSURJCQk3CS8qIHF1ZXVlIHN1cHBvcnRzIGJpZGkgcmVxdWVzdHMgKi8KKyNkZWZpbmUgUVVFVUVfRkxBR19OT01FUkdFUyAgICAgOAkvKiBkaXNhYmxlIG1lcmdlIGF0dGVtcHRzICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfU0FNRV9DT01QCTkJLyogZm9yY2UgY29tcGxldGUgb24gc2FtZSBDUFUgKi8KKyNkZWZpbmUgUVVFVUVfRkxBR19GQUlMX0lPICAgICAxMAkvKiBmYWtlIHRpbWVvdXQgKi8KKyNkZWZpbmUgUVVFVUVfRkxBR19TVEFDS0FCTEUgICAxMQkvKiBzdXBwb3J0cyByZXF1ZXN0IHN0YWNraW5nICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfTk9OUk9UICAgICAgMTIJLyogbm9uLXJvdGF0aW9uYWwgZGV2aWNlIChTU0QpICovCiAjZGVmaW5lIFFVRVVFX0ZMQUdfVklSVCAgICAgICAgUVVFVUVfRkxBR19OT05ST1QgLyogcGFyYXZpcnQgZGV2aWNlICovCi0jZGVmaW5lIFFVRVVFX0ZMQUdfSU9fU1RBVCAgICAgMTUJLyogZG8gSU8gc3RhdHMgKi8KLSNkZWZpbmUgUVVFVUVfRkxBR19ESVNDQVJEICAgICAxNgkvKiBzdXBwb3J0cyBESVNDQVJEICovCi0jZGVmaW5lIFFVRVVFX0ZMQUdfTk9YTUVSR0VTICAgMTcJLyogTm8gZXh0ZW5kZWQgbWVyZ2VzICovCi0jZGVmaW5lIFFVRVVFX0ZMQUdfQUREX1JBTkRPTSAgMTgJLyogQ29udHJpYnV0ZXMgdG8gcmFuZG9tIHBvb2wgKi8KLSNkZWZpbmUgUVVFVUVfRkxBR19TRUNESVNDQVJEICAxOQkvKiBzdXBwb3J0cyBTRUNESVNDQVJEICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfSU9fU1RBVCAgICAgMTMJLyogZG8gSU8gc3RhdHMgKi8KKyNkZWZpbmUgUVVFVUVfRkxBR19ESVNDQVJEICAgICAxNAkvKiBzdXBwb3J0cyBESVNDQVJEICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfTk9YTUVSR0VTICAgMTUJLyogTm8gZXh0ZW5kZWQgbWVyZ2VzICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfQUREX1JBTkRPTSAgMTYJLyogQ29udHJpYnV0ZXMgdG8gcmFuZG9tIHBvb2wgKi8KKyNkZWZpbmUgUVVFVUVfRkxBR19TRUNESVNDQVJEICAxNwkvKiBzdXBwb3J0cyBTRUNESVNDQVJEICovCiAKICNkZWZpbmUgUVVFVUVfRkxBR19ERUZBVUxUCSgoMSA8PCBRVUVVRV9GTEFHX0lPX1NUQVQpIHwJCVwKIAkJCQkgKDEgPDwgUVVFVUVfRkxBR19TVEFDS0FCTEUpCXwJXApAQCAtNjk5LDYgKzY5OCw3IEBACiBleHRlcm4gdm9pZCBfX2Jsa19zdG9wX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKIGV4dGVybiB2b2lkIF9fYmxrX3J1bl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7CiBleHRlcm4gdm9pZCBibGtfcnVuX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICopOworZXh0ZXJuIHZvaWQgYmxrX3J1bl9xdWV1ZV9hc3luYyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7CiBleHRlcm4gaW50IGJsa19ycV9tYXBfdXNlcihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBzdHJ1Y3QgcmVxdWVzdCAqLAogCQkJICAgc3RydWN0IHJxX21hcF9kYXRhICosIHZvaWQgX191c2VyICosIHVuc2lnbmVkIGxvbmcsCiAJCQkgICBnZnBfdCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jvb3RtZW0uaCBiL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oCmluZGV4IGI4NjEzZTguLjAxZWNhMTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oCisrKyBiL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oCkBAIC0xMTEsNiArMTExLDggQEAKIAlfX2FsbG9jX2Jvb3RtZW1fbm9wYW5pYyh4LCBQQUdFX1NJWkUsIF9fcGEoTUFYX0RNQV9BRERSRVNTKSkKICNkZWZpbmUgYWxsb2NfYm9vdG1lbV9ub2RlKHBnZGF0LCB4KSBcCiAJX19hbGxvY19ib290bWVtX25vZGUocGdkYXQsIHgsIFNNUF9DQUNIRV9CWVRFUywgX19wYShNQVhfRE1BX0FERFJFU1MpKQorI2RlZmluZSBhbGxvY19ib290bWVtX25vZGVfbm9wYW5pYyhwZ2RhdCwgeCkgXAorCV9fYWxsb2NfYm9vdG1lbV9ub2RlX25vcGFuaWMocGdkYXQsIHgsIFNNUF9DQUNIRV9CWVRFUywgX19wYShNQVhfRE1BX0FERFJFU1MpKQogI2RlZmluZSBhbGxvY19ib290bWVtX3BhZ2VzX25vZGUocGdkYXQsIHgpIFwKIAlfX2FsbG9jX2Jvb3RtZW1fbm9kZShwZ2RhdCwgeCwgUEFHRV9TSVpFLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpCiAjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fcGFnZXNfbm9kZV9ub3BhbmljKHBnZGF0LCB4KSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JzZWFyY2guaCBiL2luY2x1ZGUvbGludXgvYnNlYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYjFhYTgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2JzZWFyY2guaApAQCAtMCwwICsxLDkgQEAKKyNpZm5kZWYgX0xJTlVYX0JTRUFSQ0hfSAorI2RlZmluZSBfTElOVVhfQlNFQVJDSF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCit2b2lkICpic2VhcmNoKGNvbnN0IHZvaWQgKmtleSwgY29uc3Qgdm9pZCAqYmFzZSwgc2l6ZV90IG51bSwgc2l6ZV90IHNpemUsCisJICAgICAgaW50ICgqY21wKShjb25zdCB2b2lkICprZXksIGNvbnN0IHZvaWQgKmVsdCkpOworCisjZW5kaWYgLyogX0xJTlVYX0JTRUFSQ0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jYW4vY29yZS5oIGIvaW5jbHVkZS9saW51eC9jYW4vY29yZS5oCmluZGV4IDZmNzBhNmQuLjVjZTZiNWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2FuL2NvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nhbi9jb3JlLmgKQEAgLTQ0LDggKzQ0LDggQEAKIAogLyogZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgdGhlIENBTiBuZXR3b3JrbGF5ZXIgY29yZSAoYWZfY2FuLmMpICovCiAKLWV4dGVybiBpbnQgIGNhbl9wcm90b19yZWdpc3RlcihzdHJ1Y3QgY2FuX3Byb3RvICpjcCk7Ci1leHRlcm4gdm9pZCBjYW5fcHJvdG9fdW5yZWdpc3RlcihzdHJ1Y3QgY2FuX3Byb3RvICpjcCk7CitleHRlcm4gaW50ICBjYW5fcHJvdG9fcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGNhbl9wcm90byAqY3ApOworZXh0ZXJuIHZvaWQgY2FuX3Byb3RvX3VucmVnaXN0ZXIoY29uc3Qgc3RydWN0IGNhbl9wcm90byAqY3ApOwogCiBleHRlcm4gaW50ICBjYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2FuaWRfdCBjYW5faWQsCiAJCQkgICAgY2FuaWRfdCBtYXNrLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmggYi9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaAppbmRleCAxNmVlOGI0Li40NTU0ZGIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaApAQCAtMzU1LDcgKzM1NSwxMiBAQAogCiAjZGVmaW5lIENBUF9TWVNMT0cgICAgICAgICAgIDM0CiAKLSNkZWZpbmUgQ0FQX0xBU1RfQ0FQICAgICAgICAgQ0FQX1NZU0xPRworLyogQWxsb3cgdHJpZ2dlcmluZyBzb21ldGhpbmcgdGhhdCB3aWxsIHdha2UgdGhlIHN5c3RlbSAqLworCisjZGVmaW5lIENBUF9XQUtFX0FMQVJNICAgICAgICAgICAgMzUKKworCisjZGVmaW5lIENBUF9MQVNUX0NBUCAgICAgICAgIENBUF9XQUtFX0FMQVJNCiAKICNkZWZpbmUgY2FwX3ZhbGlkKHgpICgoeCkgPj0gMCAmJiAoeCkgPD0gQ0FQX0xBU1RfQ0FQKQogCkBAIC01NDYsMTggKzU1MSw3IEBACiBleHRlcm4gYm9vbCBjYXBhYmxlKGludCBjYXApOwogZXh0ZXJuIGJvb2wgbnNfY2FwYWJsZShzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKm5zLCBpbnQgY2FwKTsKIGV4dGVybiBib29sIHRhc2tfbnNfY2FwYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjYXApOwotCi0vKioKLSAqIG5zb3duX2NhcGFibGUgLSBDaGVjayBzdXBlcmlvciBjYXBhYmlsaXR5IHRvIG9uZSdzIG93biB1c2VyX25zCi0gKiBAY2FwOiBUaGUgY2FwYWJpbGl0eSBpbiBxdWVzdGlvbgotICoKLSAqIFJldHVybiB0cnVlIGlmIHRoZSBjdXJyZW50IHRhc2sgaGFzIHRoZSBnaXZlbiBzdXBlcmlvciBjYXBhYmlsaXR5Ci0gKiB0YXJnZXRlZCBhdCBpdHMgb3duIHVzZXIgbmFtZXNwYWNlLgotICovCi1zdGF0aWMgaW5saW5lIGJvb2wgbnNvd25fY2FwYWJsZShpbnQgY2FwKQotewotCXJldHVybiBuc19jYXBhYmxlKGN1cnJlbnRfdXNlcl9ucygpLCBjYXApOwotfQorZXh0ZXJuIGJvb2wgbnNvd25fY2FwYWJsZShpbnQgY2FwKTsKIAogLyogYXVkaXQgc3lzdGVtIHdhbnRzIHRvIGdldCBjYXAgaW5mbyBmcm9tIGZpbGVzIGFzIHdlbGwgKi8KIGV4dGVybiBpbnQgZ2V0X3Zmc19jYXBzX2Zyb21fZGlzayhjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBjcHVfdmZzX2NhcF9kYXRhICpjcHVfY2Fwcyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nsb2NrY2hpcHMuaCBiL2luY2x1ZGUvbGludXgvY2xvY2tjaGlwcy5oCmluZGV4IGZjNTM0OTIuLmQ2NzMzZTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2xvY2tjaGlwcy5oCisrKyBiL2luY2x1ZGUvbGludXgvY2xvY2tjaGlwcy5oCkBAIC01Niw0NiArNTYsNTIgQEAKIAogLyoqCiAgKiBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIC0gY2xvY2sgZXZlbnQgZGV2aWNlIGRlc2NyaXB0b3IKLSAqIEBuYW1lOgkJcHRyIHRvIGNsb2NrIGV2ZW50IG5hbWUKLSAqIEBmZWF0dXJlczoJCWZlYXR1cmVzCisgKiBAZXZlbnRfaGFuZGxlcjoJQXNzaWduZWQgYnkgdGhlIGZyYW1ld29yayB0byBiZSBjYWxsZWQgYnkgdGhlIGxvdworICoJCQlsZXZlbCBoYW5kbGVyIG9mIHRoZSBldmVudCBzb3VyY2UKKyAqIEBzZXRfbmV4dF9ldmVudDoJc2V0IG5leHQgZXZlbnQgZnVuY3Rpb24KKyAqIEBuZXh0X2V2ZW50OgkJbG9jYWwgc3RvcmFnZSBmb3IgdGhlIG5leHQgZXZlbnQgaW4gb25lc2hvdCBtb2RlCiAgKiBAbWF4X2RlbHRhX25zOgltYXhpbXVtIGRlbHRhIHZhbHVlIGluIG5zCiAgKiBAbWluX2RlbHRhX25zOgltaW5pbXVtIGRlbHRhIHZhbHVlIGluIG5zCiAgKiBAbXVsdDoJCW5hbm9zZWNvbmQgdG8gY3ljbGVzIG11bHRpcGxpZXIKICAqIEBzaGlmdDoJCW5hbm9zZWNvbmRzIHRvIGN5Y2xlcyBkaXZpc29yIChwb3dlciBvZiB0d28pCisgKiBAbW9kZToJCW9wZXJhdGluZyBtb2RlIGFzc2lnbmVkIGJ5IHRoZSBtYW5hZ2VtZW50IGNvZGUKKyAqIEBmZWF0dXJlczoJCWZlYXR1cmVzCisgKiBAcmV0cmllczoJCW51bWJlciBvZiBmb3JjZWQgcHJvZ3JhbW1pbmcgcmV0cmllcworICogQHNldF9tb2RlOgkJc2V0IG1vZGUgZnVuY3Rpb24KKyAqIEBicm9hZGNhc3Q6CQlmdW5jdGlvbiB0byBicm9hZGNhc3QgZXZlbnRzCisgKiBAbWluX2RlbHRhX3RpY2tzOgltaW5pbXVtIGRlbHRhIHZhbHVlIGluIHRpY2tzIHN0b3JlZCBmb3IgcmVjb25maWd1cmF0aW9uCisgKiBAbWF4X2RlbHRhX3RpY2tzOgltYXhpbXVtIGRlbHRhIHZhbHVlIGluIHRpY2tzIHN0b3JlZCBmb3IgcmVjb25maWd1cmF0aW9uCisgKiBAbmFtZToJCXB0ciB0byBjbG9jayBldmVudCBuYW1lCiAgKiBAcmF0aW5nOgkJdmFyaWFibGUgdG8gcmF0ZSBjbG9jayBldmVudCBkZXZpY2VzCiAgKiBAaXJxOgkJSVJRIG51bWJlciAob25seSBmb3Igbm9uIENQVSBsb2NhbCBkZXZpY2VzKQogICogQGNwdW1hc2s6CQljcHVtYXNrIHRvIGluZGljYXRlIGZvciB3aGljaCBDUFVzIHRoaXMgZGV2aWNlIHdvcmtzCi0gKiBAc2V0X25leHRfZXZlbnQ6CXNldCBuZXh0IGV2ZW50IGZ1bmN0aW9uCi0gKiBAc2V0X21vZGU6CQlzZXQgbW9kZSBmdW5jdGlvbgotICogQGV2ZW50X2hhbmRsZXI6CUFzc2lnbmVkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gYmUgY2FsbGVkIGJ5IHRoZSBsb3cKLSAqCQkJbGV2ZWwgaGFuZGxlciBvZiB0aGUgZXZlbnQgc291cmNlCi0gKiBAYnJvYWRjYXN0OgkJZnVuY3Rpb24gdG8gYnJvYWRjYXN0IGV2ZW50cwogICogQGxpc3Q6CQlsaXN0IGhlYWQgZm9yIHRoZSBtYW5hZ2VtZW50IGNvZGUKLSAqIEBtb2RlOgkJb3BlcmF0aW5nIG1vZGUgYXNzaWduZWQgYnkgdGhlIG1hbmFnZW1lbnQgY29kZQotICogQG5leHRfZXZlbnQ6CQlsb2NhbCBzdG9yYWdlIGZvciB0aGUgbmV4dCBldmVudCBpbiBvbmVzaG90IG1vZGUKLSAqIEByZXRyaWVzOgkJbnVtYmVyIG9mIGZvcmNlZCBwcm9ncmFtbWluZyByZXRyaWVzCiAgKi8KIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgewotCWNvbnN0IGNoYXIJCSpuYW1lOwotCXVuc2lnbmVkIGludAkJZmVhdHVyZXM7CisJdm9pZAkJCSgqZXZlbnRfaGFuZGxlcikoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqKTsKKwlpbnQJCQkoKnNldF9uZXh0X2V2ZW50KSh1bnNpZ25lZCBsb25nIGV2dCwKKwkJCQkJCSAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqKTsKKwlrdGltZV90CQkJbmV4dF9ldmVudDsKIAl1NjQJCQltYXhfZGVsdGFfbnM7CiAJdTY0CQkJbWluX2RlbHRhX25zOwogCXUzMgkJCW11bHQ7CiAJdTMyCQkJc2hpZnQ7CisJZW51bSBjbG9ja19ldmVudF9tb2RlCW1vZGU7CisJdW5zaWduZWQgaW50CQlmZWF0dXJlczsKKwl1bnNpZ25lZCBsb25nCQlyZXRyaWVzOworCisJdm9pZAkJCSgqYnJvYWRjYXN0KShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayk7CisJdm9pZAkJCSgqc2V0X21vZGUpKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQkJCQkgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqKTsKKwl1bnNpZ25lZCBsb25nCQltaW5fZGVsdGFfdGlja3M7CisJdW5zaWduZWQgbG9uZwkJbWF4X2RlbHRhX3RpY2tzOworCisJY29uc3QgY2hhcgkJKm5hbWU7CiAJaW50CQkJcmF0aW5nOwogCWludAkJCWlycTsKIAljb25zdCBzdHJ1Y3QgY3B1bWFzawkqY3B1bWFzazsKLQlpbnQJCQkoKnNldF9uZXh0X2V2ZW50KSh1bnNpZ25lZCBsb25nIGV2dCwKLQkJCQkJCSAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqKTsKLQl2b2lkCQkJKCpzZXRfbW9kZSkoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCi0JCQkJCSAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICopOwotCXZvaWQJCQkoKmV2ZW50X2hhbmRsZXIpKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKik7Ci0Jdm9pZAkJCSgqYnJvYWRjYXN0KShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayk7CiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwotCWVudW0gY2xvY2tfZXZlbnRfbW9kZQltb2RlOwotCWt0aW1lX3QJCQluZXh0X2V2ZW50OwotCXVuc2lnbmVkIGxvbmcJCXJldHJpZXM7Ci19OworfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiAKIC8qCiAgKiBDYWxjdWxhdGUgYSBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgZm9yIHNjYWxlZCBtYXRoLCB3aGljaCBpcyB1c2VkIHRvIGNvbnZlcnQKQEAgLTEyMiw2ICsxMjgsMTIgQEAKIAkJCSAgICAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpOwogZXh0ZXJuIHZvaWQgY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldik7CiAKK2V4dGVybiB2b2lkIGNsb2NrZXZlbnRzX2NvbmZpZ19hbmRfcmVnaXN0ZXIoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2LAorCQkJCQkgICAgdTMyIGZyZXEsIHVuc2lnbmVkIGxvbmcgbWluX2RlbHRhLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBtYXhfZGVsdGEpOworCitleHRlcm4gaW50IGNsb2NrZXZlbnRzX3VwZGF0ZV9mcmVxKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlLCB1MzIgZnJlcSk7CisKIGV4dGVybiB2b2lkIGNsb2NrZXZlbnRzX2V4Y2hhbmdlX2RldmljZShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpvbGQsCiAJCQkJCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKm5ldyk7CiBleHRlcm4gdm9pZCBjbG9ja2V2ZW50c19zZXRfbW9kZShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmggYi9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmgKaW5kZXggYzM3YjIxYS4uYzkxOGZiZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaApAQCAtMTU5LDQyICsxNTksMzggQEAKICAqLwogc3RydWN0IGNsb2Nrc291cmNlIHsKIAkvKgotCSAqIEZpcnN0IHBhcnQgb2Ygc3RydWN0dXJlIGlzIHJlYWQgbW9zdGx5CisJICogSG90cGF0aCBkYXRhLCBmaXRzIGluIGEgc2luZ2xlIGNhY2hlIGxpbmUgd2hlbiB0aGUKKwkgKiBjbG9ja3NvdXJjZSBpdHNlbGYgaXMgY2FjaGVsaW5lIGFsaWduZWQuCiAJICovCi0JY2hhciAqbmFtZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JaW50IHJhdGluZzsKIAljeWNsZV90ICgqcmVhZCkoc3RydWN0IGNsb2Nrc291cmNlICpjcyk7Ci0JaW50ICgqZW5hYmxlKShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKTsKLQl2b2lkICgqZGlzYWJsZSkoc3RydWN0IGNsb2Nrc291cmNlICpjcyk7CisJY3ljbGVfdCBjeWNsZV9sYXN0OwogCWN5Y2xlX3QgbWFzazsKIAl1MzIgbXVsdDsKIAl1MzIgc2hpZnQ7CiAJdTY0IG1heF9pZGxlX25zOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JY3ljbGVfdCAoKnZyZWFkKSh2b2lkKTsKLQl2b2lkICgqc3VzcGVuZCkoc3RydWN0IGNsb2Nrc291cmNlICpjcyk7Ci0Jdm9pZCAoKnJlc3VtZSkoc3RydWN0IGNsb2Nrc291cmNlICpjcyk7CisKICNpZmRlZiBDT05GSUdfSUE2NAogCXZvaWQgKmZzeXNfbW1pbzsgICAgICAgIC8qIHVzZWQgYnkgZnN5c2NhbGwgYXNtIGNvZGUgKi8KICNkZWZpbmUgQ0xLU1JDX0ZTWVNfTU1JT19TRVQobW1pbywgYWRkcikgICAgICAoKG1taW8pID0gKGFkZHIpKQogI2Vsc2UKICNkZWZpbmUgQ0xLU1JDX0ZTWVNfTU1JT19TRVQobW1pbywgYWRkcikgICAgICBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKLQotCS8qCi0JICogU2Vjb25kIHBhcnQgaXMgd3JpdHRlbiBhdCBlYWNoIHRpbWVyIGludGVycnVwdAotCSAqIEtlZXAgaXQgaW4gYSBkaWZmZXJlbnQgY2FjaGUgbGluZSB0byBkaXJ0eSBubwotCSAqIG1vcmUgdGhhbiBvbmUgY2FjaGUgbGluZS4KLQkgKi8KLQljeWNsZV90IGN5Y2xlX2xhc3QgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKKwljb25zdCBjaGFyICpuYW1lOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlpbnQgcmF0aW5nOworCWN5Y2xlX3QgKCp2cmVhZCkodm9pZCk7CisJaW50ICgqZW5hYmxlKShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKTsKKwl2b2lkICgqZGlzYWJsZSkoc3RydWN0IGNsb2Nrc291cmNlICpjcyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl2b2lkICgqc3VzcGVuZCkoc3RydWN0IGNsb2Nrc291cmNlICpjcyk7CisJdm9pZCAoKnJlc3VtZSkoc3RydWN0IGNsb2Nrc291cmNlICpjcyk7CiAKICNpZmRlZiBDT05GSUdfQ0xPQ0tTT1VSQ0VfV0FUQ0hET0cKIAkvKiBXYXRjaGRvZyByZWxhdGVkIGRhdGEsIHVzZWQgYnkgdGhlIGZyYW1ld29yayAqLwogCXN0cnVjdCBsaXN0X2hlYWQgd2RfbGlzdDsKIAljeWNsZV90IHdkX2xhc3Q7CiAjZW5kaWYKLX07Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIAogLyoKICAqIENsb2NrIHNvdXJjZSBmbGFncyBiaXRzOjoKQEAgLTM0MSw0ICszMzcsNiBAQAogCiBleHRlcm4gdm9pZCB0aW1la2VlcGluZ19ub3RpZnkoc3RydWN0IGNsb2Nrc291cmNlICpjbG9jayk7CiAKK2V4dGVybiBpbnQgY2xvY2tzb3VyY2VfaTgyNTNfaW5pdCh2b2lkKTsKKwogI2VuZGlmIC8qIF9MSU5VWF9DTE9DS1NPVVJDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaCBiL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCmluZGV4IDkzNDNkZDMuLjExYmU0OGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCkBAIC0zLDcgKzMsNyBAQAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUnVzc2VsbCBLaW5nCiAgKiAgICAgICAgICAgIChDKSAyMDAyIC0gMjAwMyBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Ci0gKiAgICAgICAgICAgIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCkBAIC01Niw5ICs1Niw5IEBACiAjZGVmaW5lIENQVUZSRVFfUE9MSUNZX1BPV0VSU0FWRQkoMSkKICNkZWZpbmUgQ1BVRlJFUV9QT0xJQ1lfUEVSRk9STUFOQ0UJKDIpCiAKLS8qIEZyZXF1ZW5jeSB2YWx1ZXMgaGVyZSBhcmUgQ1BVIGtIeiBzbyB0aGF0IGhhcmR3YXJlIHdoaWNoIGRvZXNuJ3QgcnVuIAotICogd2l0aCBzb21lIGZyZXF1ZW5jaWVzIGNhbiBjb21wbGFpbiB3aXRob3V0IGhhdmluZyB0byBndWVzcyB3aGF0IHBlciAKLSAqIGNlbnQgLyBwZXIgbWlsbGUgbWVhbnMuIAorLyogRnJlcXVlbmN5IHZhbHVlcyBoZXJlIGFyZSBDUFUga0h6IHNvIHRoYXQgaGFyZHdhcmUgd2hpY2ggZG9lc24ndCBydW4KKyAqIHdpdGggc29tZSBmcmVxdWVuY2llcyBjYW4gY29tcGxhaW4gd2l0aG91dCBoYXZpbmcgdG8gZ3Vlc3Mgd2hhdCBwZXIKKyAqIGNlbnQgLyBwZXIgbWlsbGUgbWVhbnMuCiAgKiBNYXhpbXVtIHRyYW5zaXRpb24gbGF0ZW5jeSBpcyBpbiBuYW5vc2Vjb25kcyAtIGlmIGl0J3MgdW5rbm93biwKICAqIENQVUZSRVFfRVRFUk5BTCBzaGFsbCBiZSB1c2VkLgogICovCkBAIC03MiwxMyArNzIsMTUgQEAKIHN0cnVjdCBjcHVmcmVxX2NwdWluZm8gewogCXVuc2lnbmVkIGludAkJbWF4X2ZyZXE7CiAJdW5zaWduZWQgaW50CQltaW5fZnJlcTsKLQl1bnNpZ25lZCBpbnQJCXRyYW5zaXRpb25fbGF0ZW5jeTsgLyogaW4gMTBeKC05KSBzID0gbmFub3NlY29uZHMgKi8KKworCS8qIGluIDEwXigtOSkgcyA9IG5hbm9zZWNvbmRzICovCisJdW5zaWduZWQgaW50CQl0cmFuc2l0aW9uX2xhdGVuY3k7CiB9OwogCiBzdHJ1Y3QgY3B1ZnJlcV9yZWFsX3BvbGljeSB7CiAJdW5zaWduZWQgaW50CQltaW47ICAgIC8qIGluIGtIeiAqLwogCXVuc2lnbmVkIGludAkJbWF4OyAgICAvKiBpbiBrSHogKi8KLSAgICAgICAgdW5zaWduZWQgaW50CQlwb2xpY3k7IC8qIHNlZSBhYm92ZSAqLworCXVuc2lnbmVkIGludAkJcG9saWN5OyAvKiBzZWUgYWJvdmUgKi8KIAlzdHJ1Y3QgY3B1ZnJlcV9nb3Zlcm5vcgkqZ292ZXJub3I7IC8qIHNlZSBiZWxvdyAqLwogfTsKIApAQCAtOTQsNyArOTYsNyBAQAogCXVuc2lnbmVkIGludAkJbWF4OyAgICAvKiBpbiBrSHogKi8KIAl1bnNpZ25lZCBpbnQJCWN1cjsgICAgLyogaW4ga0h6LCBvbmx5IG5lZWRlZCBpZiBjcHVmcmVxCiAJCQkJCSAqIGdvdmVybm9ycyBhcmUgdXNlZCAqLwotICAgICAgICB1bnNpZ25lZCBpbnQJCXBvbGljeTsgLyogc2VlIGFib3ZlICovCisJdW5zaWduZWQgaW50CQlwb2xpY3k7IC8qIHNlZSBhYm92ZSAqLwogCXN0cnVjdCBjcHVmcmVxX2dvdmVybm9yCSpnb3Zlcm5vcjsgLyogc2VlIGJlbG93ICovCiAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJdXBkYXRlOyAvKiBpZiB1cGRhdGVfcG9saWN5KCkgbmVlZHMgdG8gYmUKQEAgLTE2NywxMSArMTY5LDExIEBACiAKIHN0cnVjdCBjcHVmcmVxX2dvdmVybm9yIHsKIAljaGFyCW5hbWVbQ1BVRlJFUV9OQU1FX0xFTl07Ci0JaW50IAkoKmdvdmVybm9yKQkoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCisJaW50CSgqZ292ZXJub3IpCShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKIAkJCQkgdW5zaWduZWQgaW50IGV2ZW50KTsKIAlzc2l6ZV90CSgqc2hvd19zZXRzcGVlZCkJKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAogCQkJCQkgY2hhciAqYnVmKTsKLQlpbnQgCSgqc3RvcmVfc2V0c3BlZWQpCShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKKwlpbnQJKCpzdG9yZV9zZXRzcGVlZCkJKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAogCQkJCQkgdW5zaWduZWQgaW50IGZyZXEpOwogCXVuc2lnbmVkIGludCBtYXhfdHJhbnNpdGlvbl9sYXRlbmN5OyAvKiBIVyBtdXN0IGJlIGFibGUgdG8gc3dpdGNoIHRvCiAJCQluZXh0IGZyZXEgZmFzdGVyIHRoYW4gdGhpcyB2YWx1ZSBpbiBuYW5vIHNlY3Mgb3Igd2UKQEAgLTE4MCw3ICsxODIsOCBAQAogCXN0cnVjdCBtb2R1bGUJCSpvd25lcjsKIH07CiAKLS8qIHBhc3MgYSB0YXJnZXQgdG8gdGhlIGNwdWZyZXEgZHJpdmVyIAorLyoKKyAqIFBhc3MgYSB0YXJnZXQgdG8gdGhlIGNwdWZyZXEgZHJpdmVyLgogICovCiBleHRlcm4gaW50IGNwdWZyZXFfZHJpdmVyX3RhcmdldChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKIAkJCQkgdW5zaWduZWQgaW50IHRhcmdldF9mcmVxLApAQCAtMjM3LDkgKzI0MCw5IEBACiAKIC8qIGZsYWdzICovCiAKLSNkZWZpbmUgQ1BVRlJFUV9TVElDS1kJCTB4MDEJLyogdGhlIGRyaXZlciBpc24ndCByZW1vdmVkIGV2ZW4gaWYgCisjZGVmaW5lIENQVUZSRVFfU1RJQ0tZCQkweDAxCS8qIHRoZSBkcml2ZXIgaXNuJ3QgcmVtb3ZlZCBldmVuIGlmCiAJCQkJCSAqIGFsbCAtPmluaXQoKSBjYWxscyBmYWlsZWQgKi8KLSNkZWZpbmUgQ1BVRlJFUV9DT05TVF9MT09QUyAJMHgwMgkvKiBsb29wc19wZXJfamlmZnkgb3Igb3RoZXIga2VybmVsCisjZGVmaW5lIENQVUZSRVFfQ09OU1RfTE9PUFMJMHgwMgkvKiBsb29wc19wZXJfamlmZnkgb3Igb3RoZXIga2VybmVsCiAJCQkJCSAqICJjb25zdGFudHMiIGFyZW4ndCBhZmZlY3RlZCBieQogCQkJCQkgKiBmcmVxdWVuY3kgdHJhbnNpdGlvbnMgKi8KICNkZWZpbmUgQ1BVRlJFUV9QTV9OT19XQVJOCTB4MDQJLyogZG9uJ3Qgd2FybiBvbiBzdXNwZW5kL3Jlc3VtZSBzcGVlZApAQCAtMjUyLDcgKzI1NSw3IEBACiB2b2lkIGNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oc3RydWN0IGNwdWZyZXFfZnJlcXMgKmZyZXFzLCB1bnNpZ25lZCBpbnQgc3RhdGUpOwogCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjcHVmcmVxX3ZlcmlmeV93aXRoaW5fbGltaXRzKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCB1bnNpZ25lZCBpbnQgbWluLCB1bnNpZ25lZCBpbnQgbWF4KSAKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcHVmcmVxX3ZlcmlmeV93aXRoaW5fbGltaXRzKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCB1bnNpZ25lZCBpbnQgbWluLCB1bnNpZ25lZCBpbnQgbWF4KQogewogCWlmIChwb2xpY3ktPm1pbiA8IG1pbikKIAkJcG9saWN5LT5taW4gPSBtaW47CkBAIC0zODYsMzQgKzM4OSwxNSBAQAogLyogdGhlIGZvbGxvd2luZyAzIGZ1bnRpb25zIGFyZSBmb3IgY3B1ZnJlcSBjb3JlIHVzZSBvbmx5ICovCiBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKmNwdWZyZXFfZnJlcXVlbmN5X2dldF90YWJsZSh1bnNpZ25lZCBpbnQgY3B1KTsKIHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqY3B1ZnJlcV9jcHVfZ2V0KHVuc2lnbmVkIGludCBjcHUpOwotdm9pZCAgIGNwdWZyZXFfY3B1X3B1dCAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpkYXRhKTsKK3ZvaWQgICBjcHVmcmVxX2NwdV9wdXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpkYXRhKTsKIAogLyogdGhlIGZvbGxvd2luZyBhcmUgcmVhbGx5IHJlYWxseSBvcHRpb25hbCAqLwogZXh0ZXJuIHN0cnVjdCBmcmVxX2F0dHIgY3B1ZnJlcV9mcmVxX2F0dHJfc2NhbGluZ19hdmFpbGFibGVfZnJlcXM7CiAKLXZvaWQgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfZ2V0X2F0dHIoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICp0YWJsZSwgCit2b2lkIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2dldF9hdHRyKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqdGFibGUsCiAJCQkJICAgICAgdW5zaWduZWQgaW50IGNwdSk7CiAKIHZvaWQgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfcHV0X2F0dHIodW5zaWduZWQgaW50IGNwdSk7CiAKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICBVTklGSUVEIERFQlVHIEhFTFBFUlMgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBDUFVGUkVRX0RFQlVHX0NPUkUJMQotI2RlZmluZSBDUFVGUkVRX0RFQlVHX0RSSVZFUgkyCi0jZGVmaW5lIENQVUZSRVFfREVCVUdfR09WRVJOT1IJNAotCi0jaWZkZWYgQ09ORklHX0NQVV9GUkVRX0RFQlVHCi0KLWV4dGVybiB2b2lkIGNwdWZyZXFfZGVidWdfcHJpbnRrKHVuc2lnbmVkIGludCB0eXBlLCBjb25zdCBjaGFyICpwcmVmaXgsIAotCQkJCSBjb25zdCBjaGFyICpmbXQsIC4uLik7Ci0KLSNlbHNlCi0KLSNkZWZpbmUgY3B1ZnJlcV9kZWJ1Z19wcmludGsobXNnLi4uKSBkbyB7IH0gd2hpbGUoMCkKLQotI2VuZGlmIC8qIENPTkZJR19DUFVfRlJFUV9ERUJVRyAqLwotCiAjZW5kaWYgLyogX0xJTlVYX0NQVUZSRVFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcmVkLmggYi9pbmNsdWRlL2xpbnV4L2NyZWQuaAppbmRleCA5YWVlYjBiLi5iZTE2YjYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NyZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NyZWQuaApAQCAtMTQ2LDYgKzE0Niw3IEBACiAJdm9pZAkJKnNlY3VyaXR5OwkvKiBzdWJqZWN0aXZlIExTTSBzZWN1cml0eSAqLwogI2VuZGlmCiAJc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyOwkvKiByZWFsIHVzZXIgSUQgc3Vic2NyaXB0aW9uICovCisJc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zOyAvKiBjYWNoZWQgdXNlci0+dXNlcl9ucyAqLwogCXN0cnVjdCBncm91cF9pbmZvICpncm91cF9pbmZvOwkvKiBzdXBwbGVtZW50YXJ5IGdyb3VwcyBmb3IgZXVpZC9mc2dpZCAqLwogCXN0cnVjdCByY3VfaGVhZAlyY3U7CQkvKiBSQ1UgZGVsZXRpb24gaG9vayAqLwogfTsKQEAgLTM1NCwxMCArMzU1LDE1IEBACiAjZGVmaW5lIGN1cnJlbnRfZnNnaWQoKSAJKGN1cnJlbnRfY3JlZF94eHgoZnNnaWQpKQogI2RlZmluZSBjdXJyZW50X2NhcCgpCQkoY3VycmVudF9jcmVkX3h4eChjYXBfZWZmZWN0aXZlKSkKICNkZWZpbmUgY3VycmVudF91c2VyKCkJCShjdXJyZW50X2NyZWRfeHh4KHVzZXIpKQotI2RlZmluZSBfY3VycmVudF91c2VyX25zKCkJKGN1cnJlbnRfY3JlZF94eHgodXNlciktPnVzZXJfbnMpCiAjZGVmaW5lIGN1cnJlbnRfc2VjdXJpdHkoKQkoY3VycmVudF9jcmVkX3h4eChzZWN1cml0eSkpCiAKLWV4dGVybiBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKmN1cnJlbnRfdXNlcl9ucyh2b2lkKTsKKyNpZmRlZiBDT05GSUdfVVNFUl9OUworI2RlZmluZSBjdXJyZW50X3VzZXJfbnMoKSAoY3VycmVudF9jcmVkX3h4eCh1c2VyX25zKSkKKyNlbHNlCitleHRlcm4gc3RydWN0IHVzZXJfbmFtZXNwYWNlIGluaXRfdXNlcl9uczsKKyNkZWZpbmUgY3VycmVudF91c2VyX25zKCkgKCZpbml0X3VzZXJfbnMpCisjZW5kaWYKKwogCiAjZGVmaW5lIGN1cnJlbnRfdWlkX2dpZChfdWlkLCBfZ2lkKQkJXAogZG8gewkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGNhY2hlLmggYi9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oCmluZGV4IGYyYWZlZDQuLjE5ZDkwYTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGNhY2hlLmgKKysrIGIvaW5jbHVkZS9saW51eC9kY2FjaGUuaApAQCAtMTk3LDcgKzE5Nyw3IEBACiAgICAgICAqIHR5cGljYWxseSB1c2luZyBkX3NwbGljZV9hbGlhcy4gKi8KIAogI2RlZmluZSBEQ0FDSEVfUkVGRVJFTkNFRAkweDAwMDggIC8qIFJlY2VudGx5IHVzZWQsIGRvbid0IGRpc2NhcmQuICovCi0jZGVmaW5lIERDQUNIRV9VTkhBU0hFRAkJMHgwMDEwCQorI2RlZmluZSBEQ0FDSEVfUkNVQUNDRVNTCTB4MDAxMAkvKiBFbnRyeSBoYXMgZXZlciBiZWVuIFJDVS12aXNpYmxlICovCiAjZGVmaW5lIERDQUNIRV9JTk9USUZZX1BBUkVOVF9XQVRDSEVEIDB4MDAyMAogICAgICAvKiBQYXJlbnQgaW5vZGUgaXMgd2F0Y2hlZCBieSBpbm90aWZ5ICovCiAKQEAgLTM4NCw3ICszODQsNyBAQAogIAogc3RhdGljIGlubGluZSBpbnQgZF91bmhhc2hlZChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7Ci0JcmV0dXJuIChkZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfVU5IQVNIRUQpOworCXJldHVybiBobGlzdF9ibF91bmhhc2hlZCgmZGVudHJ5LT5kX2hhc2gpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBkX3VubGlua2VkKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCmluZGV4IGFiOGRmYzAuLmM2NjExMWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaApAQCAtNDcsNiArNDcsMzggQEAKIAkJCQkJc3RydWN0IGJ1c19hdHRyaWJ1dGUgKik7CiBleHRlcm4gdm9pZCBidXNfcmVtb3ZlX2ZpbGUoc3RydWN0IGJ1c190eXBlICosIHN0cnVjdCBidXNfYXR0cmlidXRlICopOwogCisvKioKKyAqIHN0cnVjdCBidXNfdHlwZSAtIFRoZSBidXMgdHlwZSBvZiB0aGUgZGV2aWNlCisgKgorICogQG5hbWU6CVRoZSBuYW1lIG9mIHRoZSBidXMuCisgKiBAYnVzX2F0dHJzOglEZWZhdWx0IGF0dHJpYnV0ZXMgb2YgdGhlIGJ1cy4KKyAqIEBkZXZfYXR0cnM6CURlZmF1bHQgYXR0cmlidXRlcyBvZiB0aGUgZGV2aWNlcyBvbiB0aGUgYnVzLgorICogQGRydl9hdHRyczoJRGVmYXVsdCBhdHRyaWJ1dGVzIG9mIHRoZSBkZXZpY2UgZHJpdmVycyBvbiB0aGUgYnVzLgorICogQG1hdGNoOglDYWxsZWQsIHBlcmhhcHMgbXVsdGlwbGUgdGltZXMsIHdoZW5ldmVyIGEgbmV3IGRldmljZSBvciBkcml2ZXIKKyAqCQlpcyBhZGRlZCBmb3IgdGhpcyBidXMuIEl0IHNob3VsZCByZXR1cm4gYSBub256ZXJvIHZhbHVlIGlmIHRoZQorICoJCWdpdmVuIGRldmljZSBjYW4gYmUgaGFuZGxlZCBieSB0aGUgZ2l2ZW4gZHJpdmVyLgorICogQHVldmVudDoJQ2FsbGVkIHdoZW4gYSBkZXZpY2UgaXMgYWRkZWQsIHJlbW92ZWQsIG9yIGEgZmV3IG90aGVyIHRoaW5ncworICoJCXRoYXQgZ2VuZXJhdGUgdWV2ZW50cyB0byBhZGQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKyAqIEBwcm9iZToJQ2FsbGVkIHdoZW4gYSBuZXcgZGV2aWNlIG9yIGRyaXZlciBhZGQgdG8gdGhpcyBidXMsIGFuZCBjYWxsYmFjaworICoJCXRoZSBzcGVjaWZpYyBkcml2ZXIncyBwcm9iZSB0byBpbml0aWFsIHRoZSBtYXRjaGVkIGRldmljZS4KKyAqIEByZW1vdmU6CUNhbGxlZCB3aGVuIGEgZGV2aWNlIHJlbW92ZWQgZnJvbSB0aGlzIGJ1cy4KKyAqIEBzaHV0ZG93bjoJQ2FsbGVkIGF0IHNodXQtZG93biB0aW1lIHRvIHF1aWVzY2UgdGhlIGRldmljZS4KKyAqIEBzdXNwZW5kOglDYWxsZWQgd2hlbiBhIGRldmljZSBvbiB0aGlzIGJ1cyB3YW50cyB0byBnbyB0byBzbGVlcCBtb2RlLgorICogQHJlc3VtZToJQ2FsbGVkIHRvIGJyaW5nIGEgZGV2aWNlIG9uIHRoaXMgYnVzIG91dCBvZiBzbGVlcCBtb2RlLgorICogQHBtOgkJUG93ZXIgbWFuYWdlbWVudCBvcGVyYXRpb25zIG9mIHRoaXMgYnVzLCBjYWxsYmFjayB0aGUgc3BlY2lmaWMKKyAqCQlkZXZpY2UgZHJpdmVyJ3MgcG0tb3BzLgorICogQHA6CQlUaGUgcHJpdmF0ZSBkYXRhIG9mIHRoZSBkcml2ZXIgY29yZSwgb25seSB0aGUgZHJpdmVyIGNvcmUgY2FuCisgKgkJdG91Y2ggdGhpcy4KKyAqCisgKiBBIGJ1cyBpcyBhIGNoYW5uZWwgYmV0d2VlbiB0aGUgcHJvY2Vzc29yIGFuZCBvbmUgb3IgbW9yZSBkZXZpY2VzLiBGb3IgdGhlCisgKiBwdXJwb3NlcyBvZiB0aGUgZGV2aWNlIG1vZGVsLCBhbGwgZGV2aWNlcyBhcmUgY29ubmVjdGVkIHZpYSBhIGJ1cywgZXZlbiBpZgorICogaXQgaXMgYW4gaW50ZXJuYWwsIHZpcnR1YWwsICJwbGF0Zm9ybSIgYnVzLiBCdXNlcyBjYW4gcGx1ZyBpbnRvIGVhY2ggb3RoZXIuCisgKiBBIFVTQiBjb250cm9sbGVyIGlzIHVzdWFsbHkgYSBQQ0kgZGV2aWNlLCBmb3IgZXhhbXBsZS4gVGhlIGRldmljZSBtb2RlbAorICogcmVwcmVzZW50cyB0aGUgYWN0dWFsIGNvbm5lY3Rpb25zIGJldHdlZW4gYnVzZXMgYW5kIHRoZSBkZXZpY2VzIHRoZXkgY29udHJvbC4KKyAqIEEgYnVzIGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBidXNfdHlwZSBzdHJ1Y3R1cmUuIEl0IGNvbnRhaW5zIHRoZSBuYW1lLCB0aGUKKyAqIGRlZmF1bHQgYXR0cmlidXRlcywgdGhlIGJ1cycgbWV0aG9kcywgUE0gb3BlcmF0aW9ucywgYW5kIHRoZSBkcml2ZXIgY29yZSdzCisgKiBwcml2YXRlIGRhdGEuCisgKi8KIHN0cnVjdCBidXNfdHlwZSB7CiAJY29uc3QgY2hhcgkJKm5hbWU7CiAJc3RydWN0IGJ1c19hdHRyaWJ1dGUJKmJ1c19hdHRyczsKQEAgLTExOSw2ICsxNTEsMzcgQEAKIGV4dGVybiBzdHJ1Y3Qga3NldCAqYnVzX2dldF9rc2V0KHN0cnVjdCBidXNfdHlwZSAqYnVzKTsKIGV4dGVybiBzdHJ1Y3Qga2xpc3QgKmJ1c19nZXRfZGV2aWNlX2tsaXN0KHN0cnVjdCBidXNfdHlwZSAqYnVzKTsKIAorLyoqCisgKiBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAtIFRoZSBiYXNpYyBkZXZpY2UgZHJpdmVyIHN0cnVjdHVyZQorICogQG5hbWU6CU5hbWUgb2YgdGhlIGRldmljZSBkcml2ZXIuCisgKiBAYnVzOglUaGUgYnVzIHdoaWNoIHRoZSBkZXZpY2Ugb2YgdGhpcyBkcml2ZXIgYmVsb25ncyB0by4KKyAqIEBvd25lcjoJVGhlIG1vZHVsZSBvd25lci4KKyAqIEBtb2RfbmFtZToJVXNlZCBmb3IgYnVpbHQtaW4gbW9kdWxlcy4KKyAqIEBzdXBwcmVzc19iaW5kX2F0dHJzOiBEaXNhYmxlcyBiaW5kL3VuYmluZCB2aWEgc3lzZnMuCisgKiBAb2ZfbWF0Y2hfdGFibGU6IFRoZSBvcGVuIGZpcm13YXJlIHRhYmxlLgorICogQHByb2JlOglDYWxsZWQgdG8gcXVlcnkgdGhlIGV4aXN0ZW5jZSBvZiBhIHNwZWNpZmljIGRldmljZSwKKyAqCQl3aGV0aGVyIHRoaXMgZHJpdmVyIGNhbiB3b3JrIHdpdGggaXQsIGFuZCBiaW5kIHRoZSBkcml2ZXIKKyAqCQl0byBhIHNwZWNpZmljIGRldmljZS4KKyAqIEByZW1vdmU6CUNhbGxlZCB3aGVuIHRoZSBkZXZpY2UgaXMgcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0gdG8KKyAqCQl1bmJpbmQgYSBkZXZpY2UgZnJvbSB0aGlzIGRyaXZlci4KKyAqIEBzaHV0ZG93bjoJQ2FsbGVkIGF0IHNodXQtZG93biB0aW1lIHRvIHF1aWVzY2UgdGhlIGRldmljZS4KKyAqIEBzdXNwZW5kOglDYWxsZWQgdG8gcHV0IHRoZSBkZXZpY2UgdG8gc2xlZXAgbW9kZS4gVXN1YWxseSB0byBhCisgKgkJbG93IHBvd2VyIHN0YXRlLgorICogQHJlc3VtZToJQ2FsbGVkIHRvIGJyaW5nIGEgZGV2aWNlIGZyb20gc2xlZXAgbW9kZS4KKyAqIEBncm91cHM6CURlZmF1bHQgYXR0cmlidXRlcyB0aGF0IGdldCBjcmVhdGVkIGJ5IHRoZSBkcml2ZXIgY29yZQorICoJCWF1dG9tYXRpY2FsbHkuCisgKiBAcG06CQlQb3dlciBtYW5hZ2VtZW50IG9wZXJhdGlvbnMgb2YgdGhlIGRldmljZSB3aGljaCBtYXRjaGVkCisgKgkJdGhpcyBkcml2ZXIuCisgKiBAcDoJCURyaXZlciBjb3JlJ3MgcHJpdmF0ZSBkYXRhLCBubyBvbmUgb3RoZXIgdGhhbiB0aGUgZHJpdmVyCisgKgkJY29yZSBjYW4gdG91Y2ggdGhpcy4KKyAqCisgKiBUaGUgZGV2aWNlIGRyaXZlci1tb2RlbCB0cmFja3MgYWxsIG9mIHRoZSBkcml2ZXJzIGtub3duIHRvIHRoZSBzeXN0ZW0uCisgKiBUaGUgbWFpbiByZWFzb24gZm9yIHRoaXMgdHJhY2tpbmcgaXMgdG8gZW5hYmxlIHRoZSBkcml2ZXIgY29yZSB0byBtYXRjaAorICogdXAgZHJpdmVycyB3aXRoIG5ldyBkZXZpY2VzLiBPbmNlIGRyaXZlcnMgYXJlIGtub3duIG9iamVjdHMgd2l0aGluIHRoZQorICogc3lzdGVtLCBob3dldmVyLCBhIG51bWJlciBvZiBvdGhlciB0aGluZ3MgYmVjb21lIHBvc3NpYmxlLiBEZXZpY2UgZHJpdmVycworICogY2FuIGV4cG9ydCBpbmZvcm1hdGlvbiBhbmQgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgdGhhdCBhcmUgaW5kZXBlbmRlbnQKKyAqIG9mIGFueSBzcGVjaWZpYyBkZXZpY2UuCisgKi8KIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHsKIAljb25zdCBjaGFyCQkqbmFtZTsKIAlzdHJ1Y3QgYnVzX3R5cGUJCSpidXM7CkBAIC0xODUsOCArMjQ4LDM0IEBACiAJCQkJICBzdHJ1Y3QgZGV2aWNlICpzdGFydCwgdm9pZCAqZGF0YSwKIAkJCQkgIGludCAoKm1hdGNoKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpKTsKIAotLyoKLSAqIGRldmljZSBjbGFzc2VzCisvKioKKyAqIHN0cnVjdCBjbGFzcyAtIGRldmljZSBjbGFzc2VzCisgKiBAbmFtZToJTmFtZSBvZiB0aGUgY2xhc3MuCisgKiBAb3duZXI6CVRoZSBtb2R1bGUgb3duZXIuCisgKiBAY2xhc3NfYXR0cnM6IERlZmF1bHQgYXR0cmlidXRlcyBvZiB0aGlzIGNsYXNzLgorICogQGRldl9hdHRyczoJRGVmYXVsdCBhdHRyaWJ1dGVzIG9mIHRoZSBkZXZpY2VzIGJlbG9uZyB0byB0aGUgY2xhc3MuCisgKiBAZGV2X2Jpbl9hdHRyczogRGVmYXVsdCBiaW5hcnkgYXR0cmlidXRlcyBvZiB0aGUgZGV2aWNlcyBiZWxvbmcgdG8gdGhlIGNsYXNzLgorICogQGRldl9rb2JqOglUaGUga29iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhpcyBjbGFzcyBhbmQgbGlua3MgaXQgaW50byB0aGUgaGllcmFyY2h5LgorICogQGRldl91ZXZlbnQ6CUNhbGxlZCB3aGVuIGEgZGV2aWNlIGlzIGFkZGVkLCByZW1vdmVkIGZyb20gdGhpcyBjbGFzcywgb3IgYQorICoJCWZldyBvdGhlciB0aGluZ3MgdGhhdCBnZW5lcmF0ZSB1ZXZlbnRzIHRvIGFkZCB0aGUgZW52aXJvbm1lbnQKKyAqCQl2YXJpYWJsZXMuCisgKiBAZGV2bm9kZToJQ2FsbGJhY2sgdG8gcHJvdmlkZSB0aGUgZGV2dG1wZnMuCisgKiBAY2xhc3NfcmVsZWFzZTogQ2FsbGVkIHRvIHJlbGVhc2UgdGhpcyBjbGFzcy4KKyAqIEBkZXZfcmVsZWFzZTogQ2FsbGVkIHRvIHJlbGVhc2UgdGhlIGRldmljZS4KKyAqIEBzdXNwZW5kOglVc2VkIHRvIHB1dCB0aGUgZGV2aWNlIHRvIHNsZWVwIG1vZGUsIHVzdWFsbHkgdG8gYSBsb3cgcG93ZXIKKyAqCQlzdGF0ZS4KKyAqIEByZXN1bWU6CVVzZWQgdG8gYnJpbmcgdGhlIGRldmljZSBmcm9tIHRoZSBzbGVlcCBtb2RlLgorICogQG5zX3R5cGU6CUNhbGxiYWNrcyBzbyBzeXNmcyBjYW4gZGV0ZW1pbmUgbmFtZXNwYWNlcy4KKyAqIEBuYW1lc3BhY2U6CU5hbWVzcGFjZSBvZiB0aGUgZGV2aWNlIGJlbG9uZ3MgdG8gdGhpcyBjbGFzcy4KKyAqIEBwbToJCVRoZSBkZWZhdWx0IGRldmljZSBwb3dlciBtYW5hZ2VtZW50IG9wZXJhdGlvbnMgb2YgdGhpcyBjbGFzcy4KKyAqIEBwOgkJVGhlIHByaXZhdGUgZGF0YSBvZiB0aGUgZHJpdmVyIGNvcmUsIG5vIG9uZSBvdGhlciB0aGFuIHRoZQorICoJCWRyaXZlciBjb3JlIGNhbiB0b3VjaCB0aGlzLgorICoKKyAqIEEgY2xhc3MgaXMgYSBoaWdoZXItbGV2ZWwgdmlldyBvZiBhIGRldmljZSB0aGF0IGFic3RyYWN0cyBvdXQgbG93LWxldmVsCisgKiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBEcml2ZXJzIG1heSBzZWUgYSBTQ1NJIGRpc2sgb3IgYW4gQVRBIGRpc2ssIGJ1dCwKKyAqIGF0IHRoZSBjbGFzcyBsZXZlbCwgdGhleSBhcmUgYWxsIHNpbXBseSBkaXNrcy4gQ2xhc3NlcyBhbGxvdyB1c2VyIHNwYWNlCisgKiB0byB3b3JrIHdpdGggZGV2aWNlcyBiYXNlZCBvbiB3aGF0IHRoZXkgZG8sIHJhdGhlciB0aGFuIGhvdyB0aGV5IGFyZQorICogY29ubmVjdGVkIG9yIGhvdyB0aGV5IHdvcmsuCiAgKi8KIHN0cnVjdCBjbGFzcyB7CiAJY29uc3QgY2hhcgkJKm5hbWU7CkBAIC00MDEsNiArNDkwLDY1IEBACiAJdW5zaWduZWQgbG9uZyBzZWdtZW50X2JvdW5kYXJ5X21hc2s7CiB9OwogCisvKioKKyAqIHN0cnVjdCBkZXZpY2UgLSBUaGUgYmFzaWMgZGV2aWNlIHN0cnVjdHVyZQorICogQHBhcmVudDoJVGhlIGRldmljZSdzICJwYXJlbnQiIGRldmljZSwgdGhlIGRldmljZSB0byB3aGljaCBpdCBpcyBhdHRhY2hlZC4KKyAqIAkJSW4gbW9zdCBjYXNlcywgYSBwYXJlbnQgZGV2aWNlIGlzIHNvbWUgc29ydCBvZiBidXMgb3IgaG9zdAorICogCQljb250cm9sbGVyLiBJZiBwYXJlbnQgaXMgTlVMTCwgdGhlIGRldmljZSwgaXMgYSB0b3AtbGV2ZWwgZGV2aWNlLAorICogCQl3aGljaCBpcyBub3QgdXN1YWxseSB3aGF0IHlvdSB3YW50LgorICogQHA6CQlIb2xkcyB0aGUgcHJpdmF0ZSBkYXRhIG9mIHRoZSBkcml2ZXIgY29yZSBwb3J0aW9ucyBvZiB0aGUgZGV2aWNlLgorICogCQlTZWUgdGhlIGNvbW1lbnQgb2YgdGhlIHN0cnVjdCBkZXZpY2VfcHJpdmF0ZSBmb3IgZGV0YWlsLgorICogQGtvYmo6CUEgdG9wLWxldmVsLCBhYnN0cmFjdCBjbGFzcyBmcm9tIHdoaWNoIG90aGVyIGNsYXNzZXMgYXJlIGRlcml2ZWQuCisgKiBAaW5pdF9uYW1lOglJbml0aWFsIG5hbWUgb2YgdGhlIGRldmljZS4KKyAqIEB0eXBlOglUaGUgdHlwZSBvZiBkZXZpY2UuCisgKiAJCVRoaXMgaWRlbnRpZmllcyB0aGUgZGV2aWNlIHR5cGUgYW5kIGNhcnJpZXMgdHlwZS1zcGVjaWZpYworICogCQlpbmZvcm1hdGlvbi4KKyAqIEBtdXRleDoJTXV0ZXggdG8gc3luY2hyb25pemUgY2FsbHMgdG8gaXRzIGRyaXZlci4KKyAqIEBidXM6CVR5cGUgb2YgYnVzIGRldmljZSBpcyBvbi4KKyAqIEBkcml2ZXI6CVdoaWNoIGRyaXZlciBoYXMgYWxsb2NhdGVkIHRoaXMKKyAqIEBwbGF0Zm9ybV9kYXRhOiBQbGF0Zm9ybSBkYXRhIHNwZWNpZmljIHRvIHRoZSBkZXZpY2UuCisgKiAJCUV4YW1wbGU6IEZvciBkZXZpY2VzIG9uIGN1c3RvbSBib2FyZHMsIGFzIHR5cGljYWwgb2YgZW1iZWRkZWQKKyAqIAkJYW5kIFNPQyBiYXNlZCBoYXJkd2FyZSwgTGludXggb2Z0ZW4gdXNlcyBwbGF0Zm9ybV9kYXRhIHRvIHBvaW50CisgKiAJCXRvIGJvYXJkLXNwZWNpZmljIHN0cnVjdHVyZXMgZGVzY3JpYmluZyBkZXZpY2VzIGFuZCBob3cgdGhleQorICogCQlhcmUgd2lyZWQuICBUaGF0IGNhbiBpbmNsdWRlIHdoYXQgcG9ydHMgYXJlIGF2YWlsYWJsZSwgY2hpcAorICogCQl2YXJpYW50cywgd2hpY2ggR1BJTyBwaW5zIGFjdCBpbiB3aGF0IGFkZGl0aW9uYWwgcm9sZXMsIGFuZCBzbworICogCQlvbi4gIFRoaXMgc2hyaW5rcyB0aGUgIkJvYXJkIFN1cHBvcnQgUGFja2FnZXMiIChCU1BzKSBhbmQKKyAqIAkJbWluaW1pemVzIGJvYXJkLXNwZWNpZmljICNpZmRlZnMgaW4gZHJpdmVycy4KKyAqIEBwb3dlcjoJRm9yIGRldmljZSBwb3dlciBtYW5hZ2VtZW50LgorICogCQlTZWUgRG9jdW1lbnRhdGlvbi9wb3dlci9kZXZpY2VzLnR4dCBmb3IgZGV0YWlscy4KKyAqIEBwd3JfZG9tYWluOglQcm92aWRlIGNhbGxiYWNrcyB0aGF0IGFyZSBleGVjdXRlZCBkdXJpbmcgc3lzdGVtIHN1c3BlbmQsCisgKiAJCWhpYmVybmF0aW9uLCBzeXN0ZW0gcmVzdW1lIGFuZCBkdXJpbmcgcnVudGltZSBQTSB0cmFuc2l0aW9ucworICogCQlhbG9uZyB3aXRoIHN1YnN5c3RlbS1sZXZlbCBhbmQgZHJpdmVyLWxldmVsIGNhbGxiYWNrcy4KKyAqIEBudW1hX25vZGU6CU5VTUEgbm9kZSB0aGlzIGRldmljZSBpcyBjbG9zZSB0by4KKyAqIEBkbWFfbWFzazoJRG1hIG1hc2sgKGlmIGRtYSdibGUgZGV2aWNlKS4KKyAqIEBjb2hlcmVudF9kbWFfbWFzazogTGlrZSBkbWFfbWFzaywgYnV0IGZvciBhbGxvY19jb2hlcmVudCBtYXBwaW5nIGFzIG5vdCBhbGwKKyAqIAkJaGFyZHdhcmUgc3VwcG9ydHMgNjQtYml0IGFkZHJlc3NlcyBmb3IgY29uc2lzdGVudCBhbGxvY2F0aW9ucworICogCQlzdWNoIGRlc2NyaXB0b3JzLgorICogQGRtYV9wYXJtczoJQSBsb3cgbGV2ZWwgZHJpdmVyIG1heSBzZXQgdGhlc2UgdG8gdGVhY2ggSU9NTVUgY29kZSBhYm91dAorICogCQlzZWdtZW50IGxpbWl0YXRpb25zLgorICogQGRtYV9wb29sczoJRG1hIHBvb2xzIChpZiBkbWEnYmxlIGRldmljZSkuCisgKiBAZG1hX21lbToJSW50ZXJuYWwgZm9yIGNvaGVyZW50IG1lbSBvdmVycmlkZS4KKyAqIEBhcmNoZGF0YToJRm9yIGFyY2gtc3BlY2lmaWMgYWRkaXRpb25zLgorICogQG9mX25vZGU6CUFzc29jaWF0ZWQgZGV2aWNlIHRyZWUgbm9kZS4KKyAqIEBvZl9tYXRjaDoJTWF0Y2hpbmcgb2ZfZGV2aWNlX2lkIGZyb20gZHJpdmVyLgorICogQGRldnQ6CUZvciBjcmVhdGluZyB0aGUgc3lzZnMgImRldiIuCisgKiBAZGV2cmVzX2xvY2s6IFNwaW5sb2NrIHRvIHByb3RlY3QgdGhlIHJlc291cmNlIG9mIHRoZSBkZXZpY2UuCisgKiBAZGV2cmVzX2hlYWQ6IFRoZSByZXNvdXJjZXMgbGlzdCBvZiB0aGUgZGV2aWNlLgorICogQGtub2RlX2NsYXNzOiBUaGUgbm9kZSB1c2VkIHRvIGFkZCB0aGUgZGV2aWNlIHRvIHRoZSBjbGFzcyBsaXN0LgorICogQGNsYXNzOglUaGUgY2xhc3Mgb2YgdGhlIGRldmljZS4KKyAqIEBncm91cHM6CU9wdGlvbmFsIGF0dHJpYnV0ZSBncm91cHMuCisgKiBAcmVsZWFzZToJQ2FsbGJhY2sgdG8gZnJlZSB0aGUgZGV2aWNlIGFmdGVyIGFsbCByZWZlcmVuY2VzIGhhdmUKKyAqIAkJZ29uZSBhd2F5LiBUaGlzIHNob3VsZCBiZSBzZXQgYnkgdGhlIGFsbG9jYXRvciBvZiB0aGUKKyAqIAkJZGV2aWNlIChpLmUuIHRoZSBidXMgZHJpdmVyIHRoYXQgZGlzY292ZXJlZCB0aGUgZGV2aWNlKS4KKyAqCisgKiBBdCB0aGUgbG93ZXN0IGxldmVsLCBldmVyeSBkZXZpY2UgaW4gYSBMaW51eCBzeXN0ZW0gaXMgcmVwcmVzZW50ZWQgYnkgYW4KKyAqIGluc3RhbmNlIG9mIHN0cnVjdCBkZXZpY2UuIFRoZSBkZXZpY2Ugc3RydWN0dXJlIGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbgorICogdGhhdCB0aGUgZGV2aWNlIG1vZGVsIGNvcmUgbmVlZHMgdG8gbW9kZWwgdGhlIHN5c3RlbS4gTW9zdCBzdWJzeXN0ZW1zLAorICogaG93ZXZlciwgdHJhY2sgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGV2aWNlcyB0aGV5IGhvc3QuIEFzIGEKKyAqIHJlc3VsdCwgaXQgaXMgcmFyZSBmb3IgZGV2aWNlcyB0byBiZSByZXByZXNlbnRlZCBieSBiYXJlIGRldmljZSBzdHJ1Y3R1cmVzOworICogaW5zdGVhZCwgdGhhdCBzdHJ1Y3R1cmUsIGxpa2Uga29iamVjdCBzdHJ1Y3R1cmVzLCBpcyB1c3VhbGx5IGVtYmVkZGVkIHdpdGhpbgorICogYSBoaWdoZXItbGV2ZWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRldmljZS4KKyAqLwogc3RydWN0IGRldmljZSB7CiAJc3RydWN0IGRldmljZQkJKnBhcmVudDsKIApAQCAtNDA4LDcgKzU1Niw3IEBACiAKIAlzdHJ1Y3Qga29iamVjdCBrb2JqOwogCWNvbnN0IGNoYXIJCSppbml0X25hbWU7IC8qIGluaXRpYWwgbmFtZSBvZiB0aGUgZGV2aWNlICovCi0Jc3RydWN0IGRldmljZV90eXBlCSp0eXBlOworCWNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSAqdHlwZTsKIAogCXN0cnVjdCBtdXRleAkJbXV0ZXg7CS8qIG11dGV4IHRvIHN5bmNocm9uaXplIGNhbGxzIHRvCiAJCQkJCSAqIGl0cyBkcml2ZXIuCkBAIC00NDIsNyArNTkwLDYgQEAKIAlzdHJ1Y3QgZGV2X2FyY2hkYXRhCWFyY2hkYXRhOwogCiAJc3RydWN0IGRldmljZV9ub2RlCSpvZl9ub2RlOyAvKiBhc3NvY2lhdGVkIGRldmljZSB0cmVlIG5vZGUgKi8KLQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9tYXRjaDsgLyogbWF0Y2hpbmcgb2ZfZGV2aWNlX2lkIGZyb20gZHJpdmVyICovCiAKIAlkZXZfdAkJCWRldnQ7CS8qIGRldl90LCBjcmVhdGVzIHRoZSBzeXNmcyAiZGV2IiAqLwogCkBAIC01NTcsNyArNzA0LDcgQEAKIGV4dGVybiBjb25zdCBjaGFyICpkZXZpY2VfZ2V0X2Rldm5vZGUoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICAgIG1vZGVfdCAqbW9kZSwgY29uc3QgY2hhciAqKnRtcCk7CiBleHRlcm4gdm9pZCAqZGV2X2dldF9kcnZkYXRhKGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCBkZXZfc2V0X2RydmRhdGEoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKTsKK2V4dGVybiBpbnQgZGV2X3NldF9kcnZkYXRhKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSk7CiAKIC8qCiAgKiBSb290IGRldmljZSBvYmplY3RzIGZvciBncm91cGluZyB1bmRlciAvc3lzL2RldmljZXMKQEAgLTYxMSw3ICs3NTgsNyBAQAogZXh0ZXJuIGludCAoKnBsYXRmb3JtX25vdGlmeV9yZW1vdmUpKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKIAotLyoqCisvKgogICogZ2V0X2RldmljZSAtIGF0b21pY2FsbHkgaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgZm9yIHRoZSBkZXZpY2UuCiAgKgogICovCkBAIC02MzMsMTMgKzc4MCw2IEBACiAvKiBkcml2ZXJzL2Jhc2UvcG93ZXIvc2h1dGRvd24uYyAqLwogZXh0ZXJuIHZvaWQgZGV2aWNlX3NodXRkb3duKHZvaWQpOwogCi0jaWZuZGVmIENPTkZJR19BUkNIX05PX1NZU0RFVl9PUFMKLS8qIGRyaXZlcnMvYmFzZS9zeXMuYyAqLwotZXh0ZXJuIHZvaWQgc3lzZGV2X3NodXRkb3duKHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBzeXNkZXZfc2h1dGRvd24odm9pZCkgeyB9Ci0jZW5kaWYKLQogLyogZGVidWdnaW5nIGFuZCB0cm91Ymxlc2hvb3RpbmcvZGlhZ25vc3RpYyBoZWxwZXJzLiAqLwogZXh0ZXJuIGNvbnN0IGNoYXIgKmRldl9kcml2ZXJfc3RyaW5nKGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldik7CiAKQEAgLTc0MiwxMyArODgyLDE3IEBACiAjZW5kaWYKIAogLyoKLSAqIGRldl9XQVJOKCkgYWN0cyBsaWtlIGRldl9wcmludGsoKSwgYnV0IHdpdGggdGhlIGtleSBkaWZmZXJlbmNlCisgKiBkZXZfV0FSTiooKSBhY3RzIGxpa2UgZGV2X3ByaW50aygpLCBidXQgd2l0aCB0aGUga2V5IGRpZmZlcmVuY2UKICAqIG9mIHVzaW5nIGEgV0FSTi9XQVJOX09OIHRvIGdldCB0aGUgbWVzc2FnZSBvdXQsIGluY2x1ZGluZyB0aGUKICAqIGZpbGUvbGluZSBpbmZvcm1hdGlvbiBhbmQgYSBiYWNrdHJhY2UuCiAgKi8KICNkZWZpbmUgZGV2X1dBUk4oZGV2LCBmb3JtYXQsIGFyZy4uLikgXAogCVdBUk4oMSwgIkRldmljZTogJXNcbiIgZm9ybWF0LCBkZXZfZHJpdmVyX3N0cmluZyhkZXYpLCAjIyBhcmcpOwogCisjZGVmaW5lIGRldl9XQVJOX09OQ0UoZGV2LCBjb25kaXRpb24sIGZvcm1hdCwgYXJnLi4uKSBcCisJV0FSTl9PTkNFKGNvbmRpdGlvbiwgIkRldmljZSAlc1xuIiBmb3JtYXQsIFwKKwkJCWRldl9kcml2ZXJfc3RyaW5nKGRldiksICMjIGFyZykKKwogLyogQ3JlYXRlIGFsaWFzLCBzbyBJIGNhbiBiZSBhdXRvbG9hZGVkLiAqLwogI2RlZmluZSBNT0RVTEVfQUxJQVNfQ0hBUkRFVihtYWpvcixtaW5vcikgXAogCU1PRFVMRV9BTElBUygiY2hhci1tYWpvci0iIF9fc3RyaW5naWZ5KG1ham9yKSAiLSIgX19zdHJpbmdpZnkobWlub3IpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9keW5hbWljX2RlYnVnLmggYi9pbmNsdWRlL2xpbnV4L2R5bmFtaWNfZGVidWcuaAppbmRleCAwYzk2NTNmLi5lNzQ3ZWNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2R5bmFtaWNfZGVidWcuaAorKysgYi9pbmNsdWRlL2xpbnV4L2R5bmFtaWNfZGVidWcuaApAQCAtMSw4ICsxLDYgQEAKICNpZm5kZWYgX0RZTkFNSUNfREVCVUdfSAogI2RlZmluZSBfRFlOQU1JQ19ERUJVR19ICiAKLSNpbmNsdWRlIDxsaW51eC9qdW1wX2xhYmVsLmg+Ci0KIC8qIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQsIGFuZCBkeW5hbWljX3ByaW50a19lbmFibGVkMiBhcmUgYml0bWFza3MgaW4gd2hpY2gKICAqIGJpdCBuIGlzIHNldCB0byAxIGlmIGFueSBtb2RuYW1lIGhhc2hlcyBpbnRvIHRoZSBidWNrZXQgbiwgMCBvdGhlcndpc2UuIFRoZXkKICAqIHVzZSBpbmRlcGVuZGVudCBoYXNoIGZ1bmN0aW9ucywgdG8gcmVkdWNlIHRoZSBjaGFuY2Ugb2YgZmFsc2UgcG9zaXRpdmVzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaAppbmRleCBkYzgwZDgyLi5jNmE4NTBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaApAQCAtMjQsNyArMjQsMTAgQEAKIAlfX3UzMgljbWQ7CiAJX191MzIJc3VwcG9ydGVkOwkvKiBGZWF0dXJlcyB0aGlzIGludGVyZmFjZSBzdXBwb3J0cyAqLwogCV9fdTMyCWFkdmVydGlzaW5nOwkvKiBGZWF0dXJlcyB0aGlzIGludGVyZmFjZSBhZHZlcnRpc2VzICovCi0JX191MTYJc3BlZWQ7CQkvKiBUaGUgZm9yY2VkIHNwZWVkLCAxME1iLCAxMDBNYiwgZ2lnYWJpdCAqLworCV9fdTE2CXNwZWVkOwkgICAgICAgIC8qIFRoZSBmb3JjZWQgc3BlZWQgKGxvd2VyIGJpdHMpIGluCisJCQkJICogTWJwcy4gUGxlYXNlIHVzZQorCQkJCSAqIGV0aHRvb2xfY21kX3NwZWVkKCkvX3NldCgpIHRvCisJCQkJICogYWNjZXNzIGl0ICovCiAJX191OAlkdXBsZXg7CQkvKiBEdXBsZXgsIGhhbGYgb3IgZnVsbCAqLwogCV9fdTgJcG9ydDsJCS8qIFdoaWNoIGNvbm5lY3RvciBwb3J0ICovCiAJX191OAlwaHlfYWRkcmVzczsKQEAgLTMzLDcgKzM2LDEwIEBACiAJX191OAltZGlvX3N1cHBvcnQ7CiAJX191MzIJbWF4dHhwa3Q7CS8qIFR4IHBrdHMgYmVmb3JlIGdlbmVyYXRpbmcgdHggaW50ICovCiAJX191MzIJbWF4cnhwa3Q7CS8qIFJ4IHBrdHMgYmVmb3JlIGdlbmVyYXRpbmcgcnggaW50ICovCi0JX191MTYJc3BlZWRfaGk7CisJX191MTYJc3BlZWRfaGk7ICAgICAgIC8qIFRoZSBmb3JjZWQgc3BlZWQgKHVwcGVyCisJCQkJICogYml0cykgaW4gTWJwcy4gUGxlYXNlIHVzZQorCQkJCSAqIGV0aHRvb2xfY21kX3NwZWVkKCkvX3NldCgpIHRvCisJCQkJICogYWNjZXNzIGl0ICovCiAJX191OAlldGhfdHBfbWRpeDsKIAlfX3U4CXJlc2VydmVkMjsKIAlfX3UzMglscF9hZHZlcnRpc2luZzsJLyogRmVhdHVyZXMgdGhlIGxpbmsgcGFydG5lciBhZHZlcnRpc2VzICovCkBAIC00MSwxNCArNDcsMTQgQEAKIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBldGh0b29sX2NtZF9zcGVlZF9zZXQoc3RydWN0IGV0aHRvb2xfY21kICplcCwKLQkJCQkJCV9fdTMyIHNwZWVkKQorCQkJCQkgX191MzIgc3BlZWQpCiB7CiAKIAllcC0+c3BlZWQgPSAoX191MTYpc3BlZWQ7CiAJZXAtPnNwZWVkX2hpID0gKF9fdTE2KShzcGVlZCA+PiAxNik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX191MzIgZXRodG9vbF9jbWRfc3BlZWQoc3RydWN0IGV0aHRvb2xfY21kICplcCkKK3N0YXRpYyBpbmxpbmUgX191MzIgZXRodG9vbF9jbWRfc3BlZWQoY29uc3Qgc3RydWN0IGV0aHRvb2xfY21kICplcCkKIHsKIAlyZXR1cm4gKGVwLT5zcGVlZF9oaSA8PCAxNikgfCBlcC0+c3BlZWQ7CiB9CkBAIC0yMjksNiArMjM1LDM0IEBACiAJX191MzIJdHhfcGVuZGluZzsKIH07CiAKKy8qKgorICogc3RydWN0IGV0aHRvb2xfY2hhbm5lbHMgLSBjb25maWd1cmluZyBudW1iZXIgb2YgbmV0d29yayBjaGFubmVsCisgKiBAY21kOiBFVEhUT09MX3tHLFN9Q0hBTk5FTFMKKyAqIEBtYXhfcng6IFJlYWQgb25seS4gTWF4aW11bSBudW1iZXIgb2YgcmVjZWl2ZSBjaGFubmVsIHRoZSBkcml2ZXIgc3VwcG9ydC4KKyAqIEBtYXhfdHg6IFJlYWQgb25seS4gTWF4aW11bSBudW1iZXIgb2YgdHJhbnNtaXQgY2hhbm5lbCB0aGUgZHJpdmVyIHN1cHBvcnQuCisgKiBAbWF4X290aGVyOiBSZWFkIG9ubHkuIE1heGltdW0gbnVtYmVyIG9mIG90aGVyIGNoYW5uZWwgdGhlIGRyaXZlciBzdXBwb3J0LgorICogQG1heF9jb21iaW5lZDogUmVhZCBvbmx5LiBNYXhpbXVtIG51bWJlciBvZiBjb21iaW5lZCBjaGFubmVsIHRoZSBkcml2ZXIKKyAqCXN1cHBvcnQuIFNldCBvZiBxdWV1ZXMgUlgsIFRYIG9yIG90aGVyLgorICogQHJ4X2NvdW50OiBWYWxpZCB2YWx1ZXMgYXJlIGluIHRoZSByYW5nZSAxIHRvIHRoZSBtYXhfcnguCisgKiBAdHhfY291bnQ6IFZhbGlkIHZhbHVlcyBhcmUgaW4gdGhlIHJhbmdlIDEgdG8gdGhlIG1heF90eC4KKyAqIEBvdGhlcl9jb3VudDogVmFsaWQgdmFsdWVzIGFyZSBpbiB0aGUgcmFuZ2UgMSB0byB0aGUgbWF4X290aGVyLgorICogQGNvbWJpbmVkX2NvdW50OiBWYWxpZCB2YWx1ZXMgYXJlIGluIHRoZSByYW5nZSAxIHRvIHRoZSBtYXhfY29tYmluZWQuCisgKgorICogVGhpcyBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgUlgsIFRYIGFuZCBvdGhlciBjaGFubmVscy4KKyAqLworCitzdHJ1Y3QgZXRodG9vbF9jaGFubmVscyB7CisJX191MzIJY21kOworCV9fdTMyCW1heF9yeDsKKwlfX3UzMgltYXhfdHg7CisJX191MzIJbWF4X290aGVyOworCV9fdTMyCW1heF9jb21iaW5lZDsKKwlfX3UzMglyeF9jb3VudDsKKwlfX3UzMgl0eF9jb3VudDsKKwlfX3UzMglvdGhlcl9jb3VudDsKKwlfX3UzMgljb21iaW5lZF9jb3VudDsKK307CisKIC8qIGZvciBjb25maWd1cmluZyBsaW5rIGZsb3cgY29udHJvbCBwYXJhbWV0ZXJzICovCiBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtIHsKIAlfX3UzMgljbWQ7CS8qIEVUSFRPT0xfe0csU31QQVVTRVBBUkFNICovCkBAIC0zODAsMjcgKzQxNCw0MiBAQAogCV9fdTggICAgcHJvdG87CiB9OwogCit1bmlvbiBldGh0b29sX2Zsb3dfdW5pb24geworCXN0cnVjdCBldGh0b29sX3RjcGlwNF9zcGVjCQl0Y3BfaXA0X3NwZWM7CisJc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMJCXVkcF9pcDRfc3BlYzsKKwlzdHJ1Y3QgZXRodG9vbF90Y3BpcDRfc3BlYwkJc2N0cF9pcDRfc3BlYzsKKwlzdHJ1Y3QgZXRodG9vbF9haF9lc3BpcDRfc3BlYwkJYWhfaXA0X3NwZWM7CisJc3RydWN0IGV0aHRvb2xfYWhfZXNwaXA0X3NwZWMJCWVzcF9pcDRfc3BlYzsKKwlzdHJ1Y3QgZXRodG9vbF91c3JpcDRfc3BlYwkJdXNyX2lwNF9zcGVjOworCXN0cnVjdCBldGhoZHIJCQkJZXRoZXJfc3BlYzsKKwlfX3U4CQkJCQloZGF0YVs2MF07Cit9OworCitzdHJ1Y3QgZXRodG9vbF9mbG93X2V4dCB7CisJX19iZTE2CXZsYW5fZXR5cGU7CisJX19iZTE2CXZsYW5fdGNpOworCV9fYmUzMglkYXRhWzJdOworfTsKKwogLyoqCiAgKiBzdHJ1Y3QgZXRodG9vbF9yeF9mbG93X3NwZWMgLSBzcGVjaWZpY2F0aW9uIGZvciBSWCBmbG93IGZpbHRlcgogICogQGZsb3dfdHlwZTogVHlwZSBvZiBtYXRjaCB0byBwZXJmb3JtLCBlLmcuICVUQ1BfVjRfRkxPVwogICogQGhfdTogRmxvdyBmaWVsZHMgdG8gbWF0Y2ggKGRlcGVuZGVudCBvbiBAZmxvd190eXBlKQotICogQG1fdTogTWFza3MgZm9yIGZsb3cgZmllbGQgYml0cyB0byBiZSBpZ25vcmVkCisgKiBAaF9leHQ6IEFkZGl0aW9uYWwgZmllbGRzIHRvIG1hdGNoCisgKiBAbV91OiBNYXNrcyBmb3IgZmxvdyBmaWVsZCBiaXRzIHRvIGJlIG1hdGNoZWQKKyAqIEBtX2V4dDogTWFza3MgZm9yIGFkZGl0aW9uYWwgZmllbGQgYml0cyB0byBiZSBtYXRjaGVkCisgKglOb3RlLCBhbGwgYWRkaXRpb25hbCBmaWVsZHMgbXVzdCBiZSBpZ25vcmVkIHVubGVzcyBAZmxvd190eXBlCisgKglpbmNsdWRlcyB0aGUgJUZMT1dfRVhUIGZsYWcuCiAgKiBAcmluZ19jb29raWU6IFJYIHJpbmcvcXVldWUgaW5kZXggdG8gZGVsaXZlciB0bywgb3IgJVJYX0NMU19GTE9XX0RJU0MKICAqCWlmIHBhY2tldHMgc2hvdWxkIGJlIGRpc2NhcmRlZAogICogQGxvY2F0aW9uOiBJbmRleCBvZiBmaWx0ZXIgaW4gaGFyZHdhcmUgdGFibGUKICAqLwogc3RydWN0IGV0aHRvb2xfcnhfZmxvd19zcGVjIHsKIAlfX3UzMgkJZmxvd190eXBlOwotCXVuaW9uIHsKLQkJc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMJCXRjcF9pcDRfc3BlYzsKLQkJc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMJCXVkcF9pcDRfc3BlYzsKLQkJc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMJCXNjdHBfaXA0X3NwZWM7Ci0JCXN0cnVjdCBldGh0b29sX2FoX2VzcGlwNF9zcGVjCQlhaF9pcDRfc3BlYzsKLQkJc3RydWN0IGV0aHRvb2xfYWhfZXNwaXA0X3NwZWMJCWVzcF9pcDRfc3BlYzsKLQkJc3RydWN0IGV0aHRvb2xfdXNyaXA0X3NwZWMJCXVzcl9pcDRfc3BlYzsKLQkJc3RydWN0IGV0aGhkcgkJCQlldGhlcl9zcGVjOwotCQlfX3U4CQkJCQloZGF0YVs3Ml07Ci0JfSBoX3UsIG1fdTsKKwl1bmlvbiBldGh0b29sX2Zsb3dfdW5pb24gaF91OworCXN0cnVjdCBldGh0b29sX2Zsb3dfZXh0IGhfZXh0OworCXVuaW9uIGV0aHRvb2xfZmxvd191bmlvbiBtX3U7CisJc3RydWN0IGV0aHRvb2xfZmxvd19leHQgbV9leHQ7CiAJX191NjQJCXJpbmdfY29va2llOwogCV9fdTMyCQlsb2NhdGlvbjsKIH07CkBAIC00NTgsMTYgKzUwNywxMCBAQAogCiBzdHJ1Y3QgY29tcGF0X2V0aHRvb2xfcnhfZmxvd19zcGVjIHsKIAl1MzIJCWZsb3dfdHlwZTsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBldGh0b29sX3RjcGlwNF9zcGVjCQl0Y3BfaXA0X3NwZWM7Ci0JCXN0cnVjdCBldGh0b29sX3RjcGlwNF9zcGVjCQl1ZHBfaXA0X3NwZWM7Ci0JCXN0cnVjdCBldGh0b29sX3RjcGlwNF9zcGVjCQlzY3RwX2lwNF9zcGVjOwotCQlzdHJ1Y3QgZXRodG9vbF9haF9lc3BpcDRfc3BlYwkJYWhfaXA0X3NwZWM7Ci0JCXN0cnVjdCBldGh0b29sX2FoX2VzcGlwNF9zcGVjCQllc3BfaXA0X3NwZWM7Ci0JCXN0cnVjdCBldGh0b29sX3VzcmlwNF9zcGVjCQl1c3JfaXA0X3NwZWM7Ci0JCXN0cnVjdCBldGhoZHIJCQkJZXRoZXJfc3BlYzsKLQkJdTgJCQkJCWhkYXRhWzcyXTsKLQl9IGhfdSwgbV91OworCXVuaW9uIGV0aHRvb2xfZmxvd191bmlvbiBoX3U7CisJc3RydWN0IGV0aHRvb2xfZmxvd19leHQgaF9leHQ7CisJdW5pb24gZXRodG9vbF9mbG93X3VuaW9uIG1fdTsKKwlzdHJ1Y3QgZXRodG9vbF9mbG93X2V4dCBtX2V4dDsKIAljb21wYXRfdTY0CXJpbmdfY29va2llOwogCXUzMgkJbG9jYXRpb247CiB9OwpAQCAtNTU4LDYgKzYwMSwyNiBAQAogCWNoYXIJZGF0YVtFVEhUT09MX0ZMQVNIX01BWF9GSUxFTkFNRV07CiB9OwogCisvKioKKyAqIHN0cnVjdCBldGh0b29sX2R1bXAgLSB1c2VkIGZvciByZXRyaWV2aW5nLCBzZXR0aW5nIGRldmljZSBkdW1wCisgKiBAY21kOiBDb21tYW5kIG51bWJlciAtICVFVEhUT09MX0dFVF9EVU1QX0ZMQUcsICVFVEhUT09MX0dFVF9EVU1QX0RBVEEsIG9yCisgKiAJJUVUSFRPT0xfU0VUX0RVTVAKKyAqIEB2ZXJzaW9uOiBGVyB2ZXJzaW9uIG9mIHRoZSBkdW1wLCBmaWxsZWQgaW4gYnkgZHJpdmVyCisgKiBAZmxhZzogZHJpdmVyIGRlcGVuZGVudCBmbGFnIGZvciBkdW1wIHNldHRpbmcsIGZpbGxlZCBpbiBieSBkcml2ZXIgZHVyaW5nCisgKiAJICBnZXQgYW5kIGZpbGxlZCBpbiBieSBldGh0b29sIGZvciBzZXQgb3BlcmF0aW9uCisgKiBAbGVuOiBsZW5ndGggb2YgZHVtcCBkYXRhLCB1c2VkIGFzIHRoZSBsZW5ndGggb2YgdGhlIHVzZXIgYnVmZmVyIG9uIGVudHJ5IHRvCisgKiAJICVFVEhUT09MX0dFVF9EVU1QX0RBVEEgYW5kIHRoaXMgaXMgcmV0dXJuZWQgYXMgZHVtcCBsZW5ndGggYnkgZHJpdmVyCisgKiAJIGZvciAlRVRIVE9PTF9HRVRfRFVNUF9GTEFHIGNvbW1hbmQKKyAqIEBkYXRhOiBkYXRhIGNvbGxlY3RlZCBmb3IgZ2V0IGR1bXAgZGF0YSBvcGVyYXRpb24KKyAqLworc3RydWN0IGV0aHRvb2xfZHVtcCB7CisJX191MzIJY21kOworCV9fdTMyCXZlcnNpb247CisJX191MzIJZmxhZzsKKwlfX3UzMglsZW47CisJX191OAlkYXRhWzBdOworfTsKKwogLyogZm9yIHJldHVybmluZyBhbmQgY2hhbmdpbmcgZmVhdHVyZSBzZXRzICovCiAKIC8qKgpAQCAtNjYzLDYgKzcyNiwyMiBAQAogCXVuc2lnbmVkIGludAkJY291bnQ7CiB9OwogCisvKioKKyAqIGVudW0gZXRodG9vbF9waHlzX2lkX3N0YXRlIC0gaW5kaWNhdG9yIHN0YXRlIGZvciBwaHlzaWNhbCBpZGVudGlmaWNhdGlvbgorICogQEVUSFRPT0xfSURfSU5BQ1RJVkU6IFBoeXNpY2FsIElEIGluZGljYXRvciBzaG91bGQgYmUgZGVhY3RpdmF0ZWQKKyAqIEBFVEhUT09MX0lEX0FDVElWRTogUGh5c2ljYWwgSUQgaW5kaWNhdG9yIHNob3VsZCBiZSBhY3RpdmF0ZWQKKyAqIEBFVEhUT09MX0lEX09OOiBMRUQgc2hvdWxkIGJlIHR1cm5lZCBvbiAodXNlZCBpZmYgJUVUSFRPT0xfSURfQUNUSVZFCisgKglpcyBub3Qgc3VwcG9ydGVkKQorICogQEVUSFRPT0xfSURfT0ZGOiBMRUQgc2hvdWxkIGJlIHR1cm5lZCBvZmYgKHVzZWQgaWZmICVFVEhUT09MX0lEX0FDVElWRQorICoJaXMgbm90IHN1cHBvcnRlZCkKKyAqLworZW51bSBldGh0b29sX3BoeXNfaWRfc3RhdGUgeworCUVUSFRPT0xfSURfSU5BQ1RJVkUsCisJRVRIVE9PTF9JRF9BQ1RJVkUsCisJRVRIVE9PTF9JRF9PTiwKKwlFVEhUT09MX0lEX09GRgorfTsKKwogc3RydWN0IG5ldF9kZXZpY2U7CiAKIC8qIFNvbWUgZ2VuZXJpYyBtZXRob2RzIGRyaXZlcnMgbWF5IHVzZSBpbiB0aGVpciBldGh0b29sX29wcyAqLwpAQCAtNjgzLDYzICs3NjIsMTMxIEBACiBib29sIGV0aHRvb2xfaW52YWxpZF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSwgdTMyIHN1cHBvcnRlZCk7CiAKIC8qKgotICogJmV0aHRvb2xfb3BzIC0gQWx0ZXIgYW5kIHJlcG9ydCBuZXR3b3JrIGRldmljZSBzZXR0aW5ncwotICogZ2V0X3NldHRpbmdzOiBHZXQgZGV2aWNlLXNwZWNpZmljIHNldHRpbmdzCi0gKiBzZXRfc2V0dGluZ3M6IFNldCBkZXZpY2Utc3BlY2lmaWMgc2V0dGluZ3MKLSAqIGdldF9kcnZpbmZvOiBSZXBvcnQgZHJpdmVyIGluZm9ybWF0aW9uCi0gKiBnZXRfcmVnczogR2V0IGRldmljZSByZWdpc3RlcnMKLSAqIGdldF93b2w6IFJlcG9ydCB3aGV0aGVyIFdha2Utb24tTGFuIGlzIGVuYWJsZWQKLSAqIHNldF93b2w6IFR1cm4gV2FrZS1vbi1MYW4gb24gb3Igb2ZmCi0gKiBnZXRfbXNnbGV2ZWw6IFJlcG9ydCBkcml2ZXIgbWVzc2FnZSBsZXZlbAotICogc2V0X21zZ2xldmVsOiBTZXQgZHJpdmVyIG1lc3NhZ2UgbGV2ZWwKLSAqIG53YXlfcmVzZXQ6IFJlc3RhcnQgYXV0b25lZ290aWF0aW9uCi0gKiBnZXRfbGluazogR2V0IGxpbmsgc3RhdHVzCi0gKiBnZXRfZWVwcm9tOiBSZWFkIGRhdGEgZnJvbSB0aGUgZGV2aWNlIEVFUFJPTQotICogc2V0X2VlcHJvbTogV3JpdGUgZGF0YSB0byB0aGUgZGV2aWNlIEVFUFJPTQotICogZ2V0X2NvYWxlc2NlOiBHZXQgaW50ZXJydXB0IGNvYWxlc2NpbmcgcGFyYW1ldGVycwotICogc2V0X2NvYWxlc2NlOiBTZXQgaW50ZXJydXB0IGNvYWxlc2NpbmcgcGFyYW1ldGVycwotICogZ2V0X3JpbmdwYXJhbTogUmVwb3J0IHJpbmcgc2l6ZXMKLSAqIHNldF9yaW5ncGFyYW06IFNldCByaW5nIHNpemVzCi0gKiBnZXRfcGF1c2VwYXJhbTogUmVwb3J0IHBhdXNlIHBhcmFtZXRlcnMKLSAqIHNldF9wYXVzZXBhcmFtOiBTZXQgcGF1c2UgcGFyYW1ldGVycwotICogZ2V0X3J4X2NzdW06IFJlcG9ydCB3aGV0aGVyIHJlY2VpdmUgY2hlY2tzdW1zIGFyZSB0dXJuZWQgb24gb3Igb2ZmCi0gKiBzZXRfcnhfY3N1bTogVHVybiByZWNlaXZlIGNoZWNrc3VtIG9uIG9yIG9mZgotICogZ2V0X3R4X2NzdW06IFJlcG9ydCB3aGV0aGVyIHRyYW5zbWl0IGNoZWNrc3VtcyBhcmUgdHVybmVkIG9uIG9yIG9mZgotICogc2V0X3R4X2NzdW06IFR1cm4gdHJhbnNtaXQgY2hlY2tzdW1zIG9uIG9yIG9mZgotICogZ2V0X3NnOiBSZXBvcnQgd2hldGhlciBzY2F0dGVyLWdhdGhlciBpcyBlbmFibGVkCi0gKiBzZXRfc2c6IFR1cm4gc2NhdHRlci1nYXRoZXIgb24gb3Igb2ZmCi0gKiBnZXRfdHNvOiBSZXBvcnQgd2hldGhlciBUQ1Agc2VnbWVudGF0aW9uIG9mZmxvYWQgaXMgZW5hYmxlZAotICogc2V0X3RzbzogVHVybiBUQ1Agc2VnbWVudGF0aW9uIG9mZmxvYWQgb24gb3Igb2ZmCi0gKiBnZXRfdWZvOiBSZXBvcnQgd2hldGhlciBVRFAgZnJhZ21lbnRhdGlvbiBvZmZsb2FkIGlzIGVuYWJsZWQKLSAqIHNldF91Zm86IFR1cm4gVURQIGZyYWdtZW50YXRpb24gb2ZmbG9hZCBvbiBvciBvZmYKLSAqIHNlbGZfdGVzdDogUnVuIHNwZWNpZmllZCBzZWxmLXRlc3RzCi0gKiBnZXRfc3RyaW5nczogUmV0dXJuIGEgc2V0IG9mIHN0cmluZ3MgdGhhdCBkZXNjcmliZSB0aGUgcmVxdWVzdGVkIG9iamVjdHMKLSAqIHBoeXNfaWQ6IElkZW50aWZ5IHRoZSBkZXZpY2UKLSAqIGdldF9zdGF0czogUmV0dXJuIHN0YXRpc3RpY3MgYWJvdXQgdGhlIGRldmljZQotICogZ2V0X2ZsYWdzOiBnZXQgMzItYml0IGZsYWdzIGJpdG1hcAotICogc2V0X2ZsYWdzOiBzZXQgMzItYml0IGZsYWdzIGJpdG1hcAotICoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIGdldF9zZXR0aW5nczoKLSAqCUBnZXRfc2V0dGluZ3MgaXMgcGFzc2VkIGFuICZldGh0b29sX2NtZCB0byBmaWxsIGluLiAgSXQgcmV0dXJucwotICoJYW4gbmVnYXRpdmUgZXJybm8gb3IgemVyby4KLSAqCi0gKiBzZXRfc2V0dGluZ3M6Ci0gKglAc2V0X3NldHRpbmdzIGlzIHBhc3NlZCBhbiAmZXRodG9vbF9jbWQgYW5kIHNob3VsZCBhdHRlbXB0IHRvIHNldAotICoJYWxsIHRoZSBzZXR0aW5ncyB0aGlzIGRldmljZSBzdXBwb3J0cy4gIEl0IG1heSByZXR1cm4gYW4gZXJyb3IgdmFsdWUKLSAqCWlmIHNvbWV0aGluZyBnb2VzIHdyb25nIChvdGhlcndpc2UgMCkuCi0gKgotICogZ2V0X2VlcHJvbToKKyAqIHN0cnVjdCBldGh0b29sX29wcyAtIG9wdGlvbmFsIG5ldGRldiBvcGVyYXRpb25zCisgKiBAZ2V0X3NldHRpbmdzOiBHZXQgdmFyaW91cyBkZXZpY2Ugc2V0dGluZ3MgaW5jbHVkaW5nIEV0aGVybmV0IGxpbmsKKyAqCXNldHRpbmdzLiBUaGUgQGNtZCBwYXJhbWV0ZXIgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBiZWVuIGNsZWFyZWQKKyAqCWJlZm9yZSBnZXRfc2V0dGluZ3MgaXMgY2FsbGVkLiBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvcgorICoJemVyby4KKyAqIEBzZXRfc2V0dGluZ3M6IFNldCB2YXJpb3VzIGRldmljZSBzZXR0aW5ncyBpbmNsdWRpbmcgRXRoZXJuZXQgbGluaworICoJc2V0dGluZ3MuICBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvciB6ZXJvLgorICogQGdldF9kcnZpbmZvOiBSZXBvcnQgZHJpdmVyL2RldmljZSBpbmZvcm1hdGlvbi4gIFNob3VsZCBvbmx5IHNldCB0aGUKKyAqCUBkcml2ZXIsIEB2ZXJzaW9uLCBAZndfdmVyc2lvbiBhbmQgQGJ1c19pbmZvIGZpZWxkcy4gIElmIG5vdAorICoJaW1wbGVtZW50ZWQsIHRoZSBAZHJpdmVyIGFuZCBAYnVzX2luZm8gZmllbGRzIHdpbGwgYmUgZmlsbGVkIGluCisgKglhY2NvcmRpbmcgdG8gdGhlIG5ldGRldidzIHBhcmVudCBkZXZpY2UuCisgKiBAZ2V0X3JlZ3NfbGVuOiBHZXQgYnVmZmVyIGxlbmd0aCByZXF1aXJlZCBmb3IgQGdldF9yZWdzCisgKiBAZ2V0X3JlZ3M6IEdldCBkZXZpY2UgcmVnaXN0ZXJzCisgKiBAZ2V0X3dvbDogUmVwb3J0IHdoZXRoZXIgV2FrZS1vbi1MYW4gaXMgZW5hYmxlZAorICogQHNldF93b2w6IFR1cm4gV2FrZS1vbi1MYW4gb24gb3Igb2ZmLiAgUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKKyAqCW9yIHplcm8uCisgKiBAZ2V0X21zZ2xldmVsOiBSZXBvcnQgZHJpdmVyIG1lc3NhZ2UgbGV2ZWwuICBUaGlzIHNob3VsZCBiZSB0aGUgdmFsdWUKKyAqCW9mIHRoZSBAbXNnX2VuYWJsZSBmaWVsZCB1c2VkIGJ5IG5ldGlmIGxvZ2dpbmcgZnVuY3Rpb25zLgorICogQHNldF9tc2dsZXZlbDogU2V0IGRyaXZlciBtZXNzYWdlIGxldmVsCisgKiBAbndheV9yZXNldDogUmVzdGFydCBhdXRvbmVnb3RpYXRpb24uICBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZQorICoJb3IgemVyby4KKyAqIEBnZXRfbGluazogUmVwb3J0IHdoZXRoZXIgcGh5c2ljYWwgbGluayBpcyB1cC4gIFdpbGwgb25seSBiZSBjYWxsZWQgaWYKKyAqCXRoZSBuZXRkZXYgaXMgdXAuICBTaG91bGQgdXN1YWxseSBiZSBzZXQgdG8gZXRodG9vbF9vcF9nZXRfbGluaygpLAorICoJd2hpY2ggdXNlcyBuZXRpZl9jYXJyaWVyX29rKCkuCisgKiBAZ2V0X2VlcHJvbTogUmVhZCBkYXRhIGZyb20gdGhlIGRldmljZSBFRVBST00uCiAgKglTaG91bGQgZmlsbCBpbiB0aGUgbWFnaWMgZmllbGQuICBEb24ndCBuZWVkIHRvIGNoZWNrIGxlbiBmb3IgemVybwogICoJb3Igd3JhcGFyb3VuZC4gIEZpbGwgaW4gdGhlIGRhdGEgYXJndW1lbnQgd2l0aCB0aGUgZWVwcm9tIHZhbHVlcwogICoJZnJvbSBvZmZzZXQgdG8gb2Zmc2V0ICsgbGVuLiAgVXBkYXRlIGxlbiB0byB0aGUgYW1vdW50IHJlYWQuCiAgKglSZXR1cm5zIGFuIGVycm9yIG9yIHplcm8uCi0gKgotICogc2V0X2VlcHJvbToKKyAqIEBzZXRfZWVwcm9tOiBXcml0ZSBkYXRhIHRvIHRoZSBkZXZpY2UgRUVQUk9NLgogICoJU2hvdWxkIHZhbGlkYXRlIHRoZSBtYWdpYyBmaWVsZC4gIERvbid0IG5lZWQgdG8gY2hlY2sgbGVuIGZvciB6ZXJvCiAgKglvciB3cmFwYXJvdW5kLiAgVXBkYXRlIGxlbiB0byB0aGUgYW1vdW50IHdyaXR0ZW4uICBSZXR1cm5zIGFuIGVycm9yCiAgKglvciB6ZXJvLgorICogQGdldF9jb2FsZXNjZTogR2V0IGludGVycnVwdCBjb2FsZXNjaW5nIHBhcmFtZXRlcnMuICBSZXR1cm5zIGEgbmVnYXRpdmUKKyAqCWVycm9yIGNvZGUgb3IgemVyby4KKyAqIEBzZXRfY29hbGVzY2U6IFNldCBpbnRlcnJ1cHQgY29hbGVzY2luZyBwYXJhbWV0ZXJzLiAgUmV0dXJucyBhIG5lZ2F0aXZlCisgKgllcnJvciBjb2RlIG9yIHplcm8uCisgKiBAZ2V0X3JpbmdwYXJhbTogUmVwb3J0IHJpbmcgc2l6ZXMKKyAqIEBzZXRfcmluZ3BhcmFtOiBTZXQgcmluZyBzaXplcy4gIFJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9yIHplcm8uCisgKiBAZ2V0X3BhdXNlcGFyYW06IFJlcG9ydCBwYXVzZSBwYXJhbWV0ZXJzCisgKiBAc2V0X3BhdXNlcGFyYW06IFNldCBwYXVzZSBwYXJhbWV0ZXJzLiAgUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKKyAqCW9yIHplcm8uCisgKiBAZ2V0X3J4X2NzdW06IERlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIHRoZSBuZXRkZXYgZmVhdHVyZSAlTkVUSUZfRl9SWENTVU0uCisgKglSZXBvcnQgd2hldGhlciByZWNlaXZlIGNoZWNrc3VtcyBhcmUgdHVybmVkIG9uIG9yIG9mZi4KKyAqIEBzZXRfcnhfY3N1bTogRGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgZ2VuZXJpYyBuZXRkZXYgZmVhdHVyZXMuICBUdXJuCisgKglyZWNlaXZlIGNoZWNrc3VtIG9uIG9yIG9mZi4gIFJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9yIHplcm8uCisgKiBAZ2V0X3R4X2NzdW06IERlcHJlY2F0ZWQgYXMgcmVkdW5kYW50LiBSZXBvcnQgd2hldGhlciB0cmFuc21pdCBjaGVja3N1bXMKKyAqCWFyZSB0dXJuZWQgb24gb3Igb2ZmLgorICogQHNldF90eF9jc3VtOiBEZXByZWNhdGVkIGluIGZhdm91ciBvZiBnZW5lcmljIG5ldGRldiBmZWF0dXJlcy4gIFR1cm4KKyAqCXRyYW5zbWl0IGNoZWNrc3VtcyBvbiBvciBvZmYuICBSZXR1cm5zIGEgZWdhdGl2ZSBlcnJvciBjb2RlIG9yIHplcm8uCisgKiBAZ2V0X3NnOiBEZXByZWNhdGVkIGFzIHJlZHVuZGFudC4gIFJlcG9ydCB3aGV0aGVyIHNjYXR0ZXItZ2F0aGVyIGlzCisgKgllbmFibGVkLiAgCisgKiBAc2V0X3NnOiBEZXByZWNhdGVkIGluIGZhdm91ciBvZiBnZW5lcmljIG5ldGRldiBmZWF0dXJlcy4gIFR1cm4KKyAqCXNjYXR0ZXItZ2F0aGVyIG9uIG9yIG9mZi4gUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3IgemVyby4KKyAqIEBnZXRfdHNvOiBEZXByZWNhdGVkIGFzIHJlZHVuZGFudC4gIFJlcG9ydCB3aGV0aGVyIFRDUCBzZWdtZW50YXRpb24KKyAqCW9mZmxvYWQgaXMgZW5hYmxlZC4KKyAqIEBzZXRfdHNvOiBEZXByZWNhdGVkIGluIGZhdm91ciBvZiBnZW5lcmljIG5ldGRldiBmZWF0dXJlcy4gIFR1cm4gVENQCisgKglzZWdtZW50YXRpb24gb2ZmbG9hZCBvbiBvciBvZmYuICBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvciB6ZXJvLgorICogQHNlbGZfdGVzdDogUnVuIHNwZWNpZmllZCBzZWxmLXRlc3RzCisgKiBAZ2V0X3N0cmluZ3M6IFJldHVybiBhIHNldCBvZiBzdHJpbmdzIHRoYXQgZGVzY3JpYmUgdGhlIHJlcXVlc3RlZCBvYmplY3RzCisgKiBAc2V0X3BoeXNfaWQ6IElkZW50aWZ5IHRoZSBwaHlzaWNhbCBkZXZpY2VzLCBlLmcuIGJ5IGZsYXNoaW5nIGFuIExFRAorICoJYXR0YWNoZWQgdG8gaXQuICBUaGUgaW1wbGVtZW50YXRpb24gbWF5IHVwZGF0ZSB0aGUgaW5kaWNhdG9yCisgKglhc3luY2hyb25vdXNseSBvciBzeW5jaHJvbm91c2x5LCBidXQgaW4gZWl0aGVyIGNhc2UgaXQgbXVzdCByZXR1cm4KKyAqCXF1aWNrbHkuICBJdCBpcyBpbml0aWFsbHkgY2FsbGVkIHdpdGggdGhlIGFyZ3VtZW50ICVFVEhUT09MX0lEX0FDVElWRSwKKyAqCWFuZCBtdXN0IGVpdGhlciBhY3RpdmF0ZSBhc3luY2hyb25vdXMgdXBkYXRlcyBhbmQgcmV0dXJuIHplcm8sIHJldHVybgorICoJYSBuZWdhdGl2ZSBlcnJvciBvciByZXR1cm4gYSBwb3NpdGl2ZSBmcmVxdWVuY3kgZm9yIHN5bmNocm9ub3VzCisgKglpbmRpY2F0aW9uIChlLmcuIDEgZm9yIG9uZSBvbi9vZmYgY3ljbGUgcGVyIHNlY29uZCkuICBJZiBpdCByZXR1cm5zCisgKglhIGZyZXF1ZW5jeSB0aGVuIGl0IHdpbGwgYmUgY2FsbGVkIGFnYWluIGF0IGludGVydmFscyB3aXRoIHRoZQorICoJYXJndW1lbnQgJUVUSFRPT0xfSURfT04gb3IgJUVUSFRPT0xfSURfT0ZGIGFuZCBzaG91bGQgc2V0IHRoZSBzdGF0ZSBvZgorICoJdGhlIGluZGljYXRvciBhY2NvcmRpbmdseS4gIEZpbmFsbHksIGl0IGlzIGNhbGxlZCB3aXRoIHRoZSBhcmd1bWVudAorICoJJUVUSFRPT0xfSURfSU5BQ1RJVkUgYW5kIG11c3QgZGVhY3RpdmF0ZSB0aGUgaW5kaWNhdG9yLiAgUmV0dXJucyBhCisgKgluZWdhdGl2ZSBlcnJvciBjb2RlIG9yIHplcm8uCisgKiBAZ2V0X2V0aHRvb2xfc3RhdHM6IFJldHVybiBleHRlbmRlZCBzdGF0aXN0aWNzIGFib3V0IHRoZSBkZXZpY2UuCisgKglUaGlzIGlzIG9ubHkgdXNlZnVsIGlmIHRoZSBkZXZpY2UgbWFpbnRhaW5zIHN0YXRpc3RpY3Mgbm90CisgKglpbmNsdWRlZCBpbiAmc3RydWN0IHJ0bmxfbGlua19zdGF0czY0LgorICogQGJlZ2luOiBGdW5jdGlvbiB0byBiZSBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciBvcGVyYXRpb24uICBSZXR1cm5zIGEKKyAqCW5lZ2F0aXZlIGVycm9yIGNvZGUgb3IgemVyby4KKyAqIEBjb21wbGV0ZTogRnVuY3Rpb24gdG8gYmUgY2FsbGVkIGFmdGVyIGFueSBvdGhlciBvcGVyYXRpb24gZXhjZXB0CisgKglAYmVnaW4uICBXaWxsIGJlIGNhbGxlZCBldmVuIGlmIHRoZSBvdGhlciBvcGVyYXRpb24gZmFpbGVkLgorICogQGdldF91Zm86IERlcHJlY2F0ZWQgYXMgcmVkdW5kYW50LiAgUmVwb3J0IHdoZXRoZXIgVURQIGZyYWdtZW50YXRpb24KKyAqCW9mZmxvYWQgaXMgZW5hYmxlZC4KKyAqIEBzZXRfdWZvOiBEZXByZWNhdGVkIGluIGZhdm91ciBvZiBnZW5lcmljIG5ldGRldiBmZWF0dXJlcy4gIFR1cm4gVURQCisgKglmcmFnbWVudGF0aW9uIG9mZmxvYWQgb24gb3Igb2ZmLiAgUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3IgemVyby4KKyAqIEBnZXRfZmxhZ3M6IERlcHJlY2F0ZWQgYXMgcmVkdW5kYW50LiAgUmVwb3J0IGZlYXR1cmVzIGluY2x1ZGVkIGluCisgKgkmZW51bSBldGh0b29sX2ZsYWdzIHRoYXQgYXJlIGVuYWJsZWQuICAKKyAqIEBzZXRfZmxhZ3M6IERlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGdlbmVyaWMgbmV0ZGV2IGZlYXR1cmVzLiAgVHVybgorICoJZmVhdHVyZXMgaW5jbHVkZWQgaW4gJmVudW0gZXRodG9vbF9mbGFncyBvbiBvciBvZmYuICBSZXR1cm5zIGEKKyAqCW5lZ2F0aXZlIGVycm9yIGNvZGUgb3IgemVyby4KKyAqIEBnZXRfcHJpdl9mbGFnczogUmVwb3J0IGRyaXZlci1zcGVjaWZpYyBmZWF0dXJlIGZsYWdzLgorICogQHNldF9wcml2X2ZsYWdzOiBTZXQgZHJpdmVyLXNwZWNpZmljIGZlYXR1cmUgZmxhZ3MuICBSZXR1cm5zIGEgbmVnYXRpdmUKKyAqCWVycm9yIGNvZGUgb3IgemVyby4KKyAqIEBnZXRfc3NldF9jb3VudDogR2V0IG51bWJlciBvZiBzdHJpbmdzIHRoYXQgQGdldF9zdHJpbmdzIHdpbGwgd3JpdGUuCisgKiBAZ2V0X3J4bmZjOiBHZXQgUlggZmxvdyBjbGFzc2lmaWNhdGlvbiBydWxlcy4gIFJldHVybnMgYSBuZWdhdGl2ZQorICoJZXJyb3IgY29kZSBvciB6ZXJvLgorICogQHNldF9yeG5mYzogU2V0IFJYIGZsb3cgY2xhc3NpZmljYXRpb24gcnVsZXMuICBSZXR1cm5zIGEgbmVnYXRpdmUKKyAqCWVycm9yIGNvZGUgb3IgemVyby4KKyAqIEBmbGFzaF9kZXZpY2U6IFdyaXRlIGEgZmlybXdhcmUgaW1hZ2UgdG8gZGV2aWNlJ3MgZmxhc2ggbWVtb3J5LgorICoJUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3IgemVyby4KKyAqIEByZXNldDogUmVzZXQgKHBhcnQgb2YpIHRoZSBkZXZpY2UsIGFzIHNwZWNpZmllZCBieSBhIGJpdG1hc2sgb2YKKyAqCWZsYWdzIGZyb20gJmVudW0gZXRodG9vbF9yZXNldF9mbGFncy4gIFJldHVybnMgYSBuZWdhdGl2ZQorICoJZXJyb3IgY29kZSBvciB6ZXJvLgorICogQHNldF9yeF9udHVwbGU6IFNldCBhbiBSWCBuLXR1cGxlIHJ1bGUuICBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZQorICoJb3IgemVyby4KKyAqIEBnZXRfcnhfbnR1cGxlOiBEZXByZWNhdGVkLgorICogQGdldF9yeGZoX2luZGlyOiBHZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBSWCBmbG93IGhhc2ggaW5kaXJlY3Rpb24gdGFibGUuCisgKglSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvciB6ZXJvLgorICogQHNldF9yeGZoX2luZGlyOiBTZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBSWCBmbG93IGhhc2ggaW5kaXJlY3Rpb24gdGFibGUuCisgKglSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvciB6ZXJvLgorICogQGdldF9jaGFubmVsczogR2V0IG51bWJlciBvZiBjaGFubmVscy4KKyAqIEBzZXRfY2hhbm5lbHM6IFNldCBudW1iZXIgb2YgY2hhbm5lbHMuICBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvcgorICoJemVyby4KKyAqIEBnZXRfZHVtcF9mbGFnOiBHZXQgZHVtcCBmbGFnIGluZGljYXRpbmcgY3VycmVudCBkdW1wIGxlbmd0aCwgdmVyc2lvbiwKKyAqIAkJICAgYW5kIGZsYWcgb2YgdGhlIGRldmljZS4KKyAqIEBnZXRfZHVtcF9kYXRhOiBHZXQgZHVtcCBkYXRhLgorICogQHNldF9kdW1wOiBTZXQgZHVtcCBzcGVjaWZpYyBmbGFncyB0byB0aGUgZGV2aWNlLgorICoKKyAqIEFsbCBvcGVyYXRpb25zIGFyZSBvcHRpb25hbCAoaS5lLiB0aGUgZnVuY3Rpb24gcG9pbnRlciBtYXkgYmUgc2V0CisgKiB0byAlTlVMTCkgYW5kIGNhbGxlcnMgbXVzdCB0YWtlIHRoaXMgaW50byBhY2NvdW50LiAgQ2FsbGVycyBtdXN0CisgKiBob2xkIHRoZSBSVE5MLCBleGNlcHQgdGhhdCBmb3IgQGdldF9kcnZpbmZvIHRoZSBjYWxsZXIgbWF5IG9yIG1heQorICogbm90IGhvbGQgdGhlIFJUTkwuCisgKgorICogU2VlIHRoZSBzdHJ1Y3R1cmVzIHVzZWQgYnkgdGhlc2Ugb3BlcmF0aW9ucyBmb3IgZnVydGhlciBkb2N1bWVudGF0aW9uLgorICoKKyAqIFNlZSAmc3RydWN0IG5ldF9kZXZpY2UgYW5kICZzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZm9yIGRvY3VtZW50YXRpb24KKyAqIG9mIHRoZSBnZW5lcmljIG5ldGRldiBmZWF0dXJlcyBpbnRlcmZhY2UuCiAgKi8KIHN0cnVjdCBldGh0b29sX29wcyB7CiAJaW50CSgqZ2V0X3NldHRpbmdzKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9jbWQgKik7CkBAIC03NzgsNyArOTI1LDcgQEAKIAlpbnQJKCpzZXRfdHNvKShzdHJ1Y3QgbmV0X2RldmljZSAqLCB1MzIpOwogCXZvaWQJKCpzZWxmX3Rlc3QpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX3Rlc3QgKiwgdTY0ICopOwogCXZvaWQJKCpnZXRfc3RyaW5ncykoc3RydWN0IG5ldF9kZXZpY2UgKiwgdTMyIHN0cmluZ3NldCwgdTggKik7Ci0JaW50CSgqcGh5c19pZCkoc3RydWN0IG5ldF9kZXZpY2UgKiwgdTMyKTsKKwlpbnQJKCpzZXRfcGh5c19pZCkoc3RydWN0IG5ldF9kZXZpY2UgKiwgZW51bSBldGh0b29sX3BoeXNfaWRfc3RhdGUpOwogCXZvaWQJKCpnZXRfZXRodG9vbF9zdGF0cykoc3RydWN0IG5ldF9kZXZpY2UgKiwKIAkJCQkgICAgIHN0cnVjdCBldGh0b29sX3N0YXRzICosIHU2NCAqKTsKIAlpbnQJKCpiZWdpbikoc3RydWN0IG5ldF9kZXZpY2UgKik7CkBAIC04MDIsNiArOTQ5LDEzIEBACiAJCQkJICBzdHJ1Y3QgZXRodG9vbF9yeGZoX2luZGlyICopOwogCWludAkoKnNldF9yeGZoX2luZGlyKShzdHJ1Y3QgbmV0X2RldmljZSAqLAogCQkJCSAgY29uc3Qgc3RydWN0IGV0aHRvb2xfcnhmaF9pbmRpciAqKTsKKwl2b2lkCSgqZ2V0X2NoYW5uZWxzKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9jaGFubmVscyAqKTsKKwlpbnQJKCpzZXRfY2hhbm5lbHMpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX2NoYW5uZWxzICopOworCWludAkoKmdldF9kdW1wX2ZsYWcpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX2R1bXAgKik7CisJaW50CSgqZ2V0X2R1bXBfZGF0YSkoc3RydWN0IG5ldF9kZXZpY2UgKiwKKwkJCQkgc3RydWN0IGV0aHRvb2xfZHVtcCAqLCB2b2lkICopOworCWludAkoKnNldF9kdW1wKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9kdW1wICopOworCiB9OwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApAQCAtODcwLDYgKzEwMjQsMTEgQEAKIAogI2RlZmluZSBFVEhUT09MX0dGRUFUVVJFUwkweDAwMDAwMDNhIC8qIEdldCBkZXZpY2Ugb2ZmbG9hZCBzZXR0aW5ncyAqLwogI2RlZmluZSBFVEhUT09MX1NGRUFUVVJFUwkweDAwMDAwMDNiIC8qIENoYW5nZSBkZXZpY2Ugb2ZmbG9hZCBzZXR0aW5ncyAqLworI2RlZmluZSBFVEhUT09MX0dDSEFOTkVMUwkweDAwMDAwMDNjIC8qIEdldCBubyBvZiBjaGFubmVscyAqLworI2RlZmluZSBFVEhUT09MX1NDSEFOTkVMUwkweDAwMDAwMDNkIC8qIFNldCBubyBvZiBjaGFubmVscyAqLworI2RlZmluZSBFVEhUT09MX1NFVF9EVU1QCTB4MDAwMDAwM2UgLyogU2V0IGR1bXAgc2V0dGluZ3MgKi8KKyNkZWZpbmUgRVRIVE9PTF9HRVRfRFVNUF9GTEFHCTB4MDAwMDAwM2YgLyogR2V0IGR1bXAgc2V0dGluZ3MgKi8KKyNkZWZpbmUgRVRIVE9PTF9HRVRfRFVNUF9EQVRBCTB4MDAwMDAwNDAgLyogR2V0IGR1bXAgZGF0YSAqLwogCiAvKiBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgY29kZSAqLwogI2RlZmluZSBTUEFSQ19FVEhfR1NFVAkJRVRIVE9PTF9HU0VUCkBAIC04OTcsNiArMTA1Niw4IEBACiAjZGVmaW5lIFNVUFBPUlRFRF8xMDAwMGJhc2VLWDRfRnVsbAkoMSA8PCAxOCkKICNkZWZpbmUgU1VQUE9SVEVEXzEwMDAwYmFzZUtSX0Z1bGwJKDEgPDwgMTkpCiAjZGVmaW5lIFNVUFBPUlRFRF8xMDAwMGJhc2VSX0ZFQwkoMSA8PCAyMCkKKyNkZWZpbmUgU1VQUE9SVEVEXzIwMDAwYmFzZU1MRDJfRnVsbAkoMSA8PCAyMSkKKyNkZWZpbmUgU1VQUE9SVEVEXzIwMDAwYmFzZUtSMl9GdWxsCSgxIDw8IDIyKQogCiAvKiBJbmRpY2F0ZXMgd2hhdCBmZWF0dXJlcyBhcmUgYWR2ZXJ0aXNlZCBieSB0aGUgaW50ZXJmYWNlLiAqLwogI2RlZmluZSBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZgkJKDEgPDwgMCkKQEAgLTkyMCw2ICsxMDgxLDggQEAKICNkZWZpbmUgQURWRVJUSVNFRF8xMDAwMGJhc2VLWDRfRnVsbAkoMSA8PCAxOCkKICNkZWZpbmUgQURWRVJUSVNFRF8xMDAwMGJhc2VLUl9GdWxsCSgxIDw8IDE5KQogI2RlZmluZSBBRFZFUlRJU0VEXzEwMDAwYmFzZVJfRkVDCSgxIDw8IDIwKQorI2RlZmluZSBBRFZFUlRJU0VEXzIwMDAwYmFzZU1MRDJfRnVsbAkoMSA8PCAyMSkKKyNkZWZpbmUgQURWRVJUSVNFRF8yMDAwMGJhc2VLUjJfRnVsbAkoMSA8PCAyMikKIAogLyogVGhlIGZvbGxvd2luZyBhcmUgYWxsIGludm9sdmVkIGluIGZvcmNpbmcgYSBwYXJ0aWN1bGFyIGxpbmsKICAqIG1vZGUgZm9yIHRoZSBkZXZpY2UgZm9yIHNldHRpbmcgdGhpbmdzLiAgV2hlbiBnZXR0aW5nIHRoZQpAQCAtOTkyLDYgKzExNTUsOCBAQAogI2RlZmluZQlJUFY0X0ZMT1cJMHgxMAkvKiBoYXNoIG9ubHkgKi8KICNkZWZpbmUJSVBWNl9GTE9XCTB4MTEJLyogaGFzaCBvbmx5ICovCiAjZGVmaW5lCUVUSEVSX0ZMT1cJMHgxMgkvKiBzcGVjIG9ubHkgKGV0aGVyX3NwZWMpICovCisvKiBGbGFnIHRvIGVuYWJsZSBhZGRpdGlvbmFsIGZpZWxkcyBpbiBzdHJ1Y3QgZXRodG9vbF9yeF9mbG93X3NwZWMgKi8KKyNkZWZpbmUJRkxPV19FWFQJMHg4MDAwMDAwMAogCiAvKiBMMy1MNCBuZXR3b3JrIHRyYWZmaWMgZmxvdyBoYXNoIG9wdGlvbnMgKi8KICNkZWZpbmUJUlhIX0wyREEJKDEgPDwgMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmIuaCBiL2luY2x1ZGUvbGludXgvZmIuaAppbmRleCBkZjcyOGMxLi42YTgyNzQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZiLmgKKysrIGIvaW5jbHVkZS9saW51eC9mYi5oCkBAIC04MzIsNiArODMyLDcgQEAKICNkZWZpbmUgRkJJTkZPX0NBTl9GT1JDRV9PVVRQVVQgICAgIDB4MjAwMDAwCiAKIHN0cnVjdCBmYl9pbmZvIHsKKwlhdG9taWNfdCBjb3VudDsKIAlpbnQgbm9kZTsKIAlpbnQgZmxhZ3M7CiAJc3RydWN0IG11dGV4IGxvY2s7CQkvKiBMb2NrIGZvciBvcGVuL3JlbGVhc2UvaW9jdGwgZnVuY3MgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCmluZGV4IDQ1MjY2YjcuLjQ2MDliODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaApAQCAtMTM1LDYgKzEzNSw4IEBACiB7CiAJYXRvbWljX3QJCXJlZmNudDsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAJbGVuOwkvKiBOdW1iZXIgb2YgZmlsdGVyIGJsb2NrcyAqLworCXVuc2lnbmVkIGludAkJKCpicGZfZnVuYykoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgIGNvbnN0IHN0cnVjdCBzb2NrX2ZpbHRlciAqZmlsdGVyKTsKIAlzdHJ1Y3QgcmN1X2hlYWQJCXJjdTsKIAlzdHJ1Y3Qgc29ja19maWx0ZXIgICAgIAlpbnNuc1swXTsKIH07CkBAIC0xNTMsNiArMTU1LDgwIEBACiBleHRlcm4gaW50IHNrX2F0dGFjaF9maWx0ZXIoc3RydWN0IHNvY2tfZnByb2cgKmZwcm9nLCBzdHJ1Y3Qgc29jayAqc2spOwogZXh0ZXJuIGludCBza19kZXRhY2hfZmlsdGVyKHN0cnVjdCBzb2NrICpzayk7CiBleHRlcm4gaW50IHNrX2Noa19maWx0ZXIoc3RydWN0IHNvY2tfZmlsdGVyICpmaWx0ZXIsIGludCBmbGVuKTsKKworI2lmZGVmIENPTkZJR19CUEZfSklUCitleHRlcm4gdm9pZCBicGZfaml0X2NvbXBpbGUoc3RydWN0IHNrX2ZpbHRlciAqZnApOworZXh0ZXJuIHZvaWQgYnBmX2ppdF9mcmVlKHN0cnVjdCBza19maWx0ZXIgKmZwKTsKKyNkZWZpbmUgU0tfUlVOX0ZJTFRFUihGSUxURVIsIFNLQikgKCpGSUxURVItPmJwZl9mdW5jKShTS0IsIEZJTFRFUi0+aW5zbnMpCisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGJwZl9qaXRfY29tcGlsZShzdHJ1Y3Qgc2tfZmlsdGVyICpmcCkKK3sKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBicGZfaml0X2ZyZWUoc3RydWN0IHNrX2ZpbHRlciAqZnApCit7Cit9CisjZGVmaW5lIFNLX1JVTl9GSUxURVIoRklMVEVSLCBTS0IpIHNrX3J1bl9maWx0ZXIoU0tCLCBGSUxURVItPmluc25zKQorI2VuZGlmCisKK2VudW0geworCUJQRl9TX1JFVF9LID0gMSwKKwlCUEZfU19SRVRfQSwKKwlCUEZfU19BTFVfQUREX0ssCisJQlBGX1NfQUxVX0FERF9YLAorCUJQRl9TX0FMVV9TVUJfSywKKwlCUEZfU19BTFVfU1VCX1gsCisJQlBGX1NfQUxVX01VTF9LLAorCUJQRl9TX0FMVV9NVUxfWCwKKwlCUEZfU19BTFVfRElWX1gsCisJQlBGX1NfQUxVX0FORF9LLAorCUJQRl9TX0FMVV9BTkRfWCwKKwlCUEZfU19BTFVfT1JfSywKKwlCUEZfU19BTFVfT1JfWCwKKwlCUEZfU19BTFVfTFNIX0ssCisJQlBGX1NfQUxVX0xTSF9YLAorCUJQRl9TX0FMVV9SU0hfSywKKwlCUEZfU19BTFVfUlNIX1gsCisJQlBGX1NfQUxVX05FRywKKwlCUEZfU19MRF9XX0FCUywKKwlCUEZfU19MRF9IX0FCUywKKwlCUEZfU19MRF9CX0FCUywKKwlCUEZfU19MRF9XX0xFTiwKKwlCUEZfU19MRF9XX0lORCwKKwlCUEZfU19MRF9IX0lORCwKKwlCUEZfU19MRF9CX0lORCwKKwlCUEZfU19MRF9JTU0sCisJQlBGX1NfTERYX1dfTEVOLAorCUJQRl9TX0xEWF9CX01TSCwKKwlCUEZfU19MRFhfSU1NLAorCUJQRl9TX01JU0NfVEFYLAorCUJQRl9TX01JU0NfVFhBLAorCUJQRl9TX0FMVV9ESVZfSywKKwlCUEZfU19MRF9NRU0sCisJQlBGX1NfTERYX01FTSwKKwlCUEZfU19TVCwKKwlCUEZfU19TVFgsCisJQlBGX1NfSk1QX0pBLAorCUJQRl9TX0pNUF9KRVFfSywKKwlCUEZfU19KTVBfSkVRX1gsCisJQlBGX1NfSk1QX0pHRV9LLAorCUJQRl9TX0pNUF9KR0VfWCwKKwlCUEZfU19KTVBfSkdUX0ssCisJQlBGX1NfSk1QX0pHVF9YLAorCUJQRl9TX0pNUF9KU0VUX0ssCisJQlBGX1NfSk1QX0pTRVRfWCwKKwkvKiBBbmNpbGxhcnkgZGF0YSAqLworCUJQRl9TX0FOQ19QUk9UT0NPTCwKKwlCUEZfU19BTkNfUEtUVFlQRSwKKwlCUEZfU19BTkNfSUZJTkRFWCwKKwlCUEZfU19BTkNfTkxBVFRSLAorCUJQRl9TX0FOQ19OTEFUVFJfTkVTVCwKKwlCUEZfU19BTkNfTUFSSywKKwlCUEZfU19BTkNfUVVFVUUsCisJQlBGX1NfQU5DX0hBVFlQRSwKKwlCUEZfU19BTkNfUlhIQVNILAorCUJQRl9TX0FOQ19DUFUsCit9OworCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYgLyogX19MSU5VWF9GSUxURVJfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLmggYi9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLmgKaW5kZXggYzY0ZjM2OC4uNWU2ZjQyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9maXJld2lyZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZmlyZXdpcmUuaApAQCAtMTI1LDcgKzEyNSw2IEBACiAJc3RydWN0IGRlbGF5ZWRfd29yayBibV93b3JrOyAvKiBidXMgbWFuYWdlciBqb2IgKi8KIAlpbnQgYm1fcmV0cmllczsKIAlpbnQgYm1fZ2VuZXJhdGlvbjsKLQlfX2JlMzIgYm1fdHJhbnNhY3Rpb25fZGF0YVsyXTsKIAlpbnQgYm1fbm9kZV9pZDsKIAlib29sIGJtX2FiZGljYXRlOwogCkBAIC00NDEsMTIgKzQ0MCwxNSBAQAogCQkJIHN0cnVjdCBmd19pc29fcGFja2V0ICpwYWNrZXQsCiAJCQkgc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKIAkJCSB1bnNpZ25lZCBsb25nIHBheWxvYWQpOwordm9pZCBmd19pc29fY29udGV4dF9xdWV1ZV9mbHVzaChzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCk7CiBpbnQgZndfaXNvX2NvbnRleHRfc3RhcnQoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgsCiAJCQkgaW50IGN5Y2xlLCBpbnQgc3luYywgaW50IHRhZ3MpOwogaW50IGZ3X2lzb19jb250ZXh0X3N0b3Aoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgpOwogdm9pZCBmd19pc29fY29udGV4dF9kZXN0cm95KHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4KTsKIHZvaWQgZndfaXNvX3Jlc291cmNlX21hbmFnZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IGdlbmVyYXRpb24sCiAJCQkgICAgdTY0IGNoYW5uZWxzX21hc2ssIGludCAqY2hhbm5lbCwgaW50ICpiYW5kd2lkdGgsCi0JCQkgICAgYm9vbCBhbGxvY2F0ZSwgX19iZTMyIGJ1ZmZlclsyXSk7CisJCQkgICAgYm9vbCBhbGxvY2F0ZSk7CisKK2V4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZndfd29ya3F1ZXVlOwogCiAjZW5kaWYgLyogX0xJTlVYX0ZJUkVXSVJFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmxleF9hcnJheS5oIGIvaW5jbHVkZS9saW51eC9mbGV4X2FycmF5LmgKaW5kZXggNzBlNGVmYS4uZWJlYjJmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mbGV4X2FycmF5LmgKKysrIGIvaW5jbHVkZS9saW51eC9mbGV4X2FycmF5LmgKQEAgLTYxLDcgKzYxLDcgQEAKIHN0cnVjdCBmbGV4X2FycmF5ICpmbGV4X2FycmF5X2FsbG9jKGludCBlbGVtZW50X3NpemUsIHVuc2lnbmVkIGludCB0b3RhbCwKIAkJZ2ZwX3QgZmxhZ3MpOwogaW50IGZsZXhfYXJyYXlfcHJlYWxsb2Moc3RydWN0IGZsZXhfYXJyYXkgKmZhLCB1bnNpZ25lZCBpbnQgc3RhcnQsCi0JCXVuc2lnbmVkIGludCBlbmQsIGdmcF90IGZsYWdzKTsKKwkJdW5zaWduZWQgaW50IG5yX2VsZW1lbnRzLCBnZnBfdCBmbGFncyk7CiB2b2lkIGZsZXhfYXJyYXlfZnJlZShzdHJ1Y3QgZmxleF9hcnJheSAqZmEpOwogdm9pZCBmbGV4X2FycmF5X2ZyZWVfcGFydHMoc3RydWN0IGZsZXhfYXJyYXkgKmZhKTsKIGludCBmbGV4X2FycmF5X3B1dChzdHJ1Y3QgZmxleF9hcnJheSAqZmEsIHVuc2lnbmVkIGludCBlbGVtZW50X25yLCB2b2lkICpzcmMsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggZGJkODYwYS4uY2RmOTQ5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtMzU4LDcgKzM1OCw2IEBACiAjZGVmaW5lIEZTX0VYVEVOVF9GTAkJCTB4MDAwODAwMDAgLyogRXh0ZW50cyAqLwogI2RlZmluZSBGU19ESVJFQ1RJT19GTAkJCTB4MDAxMDAwMDAgLyogVXNlIGRpcmVjdCBpL28gKi8KICNkZWZpbmUgRlNfTk9DT1dfRkwJCQkweDAwODAwMDAwIC8qIERvIG5vdCBjb3cgZmlsZSAqLwotI2RlZmluZSBGU19DT1dfRkwJCQkweDAyMDAwMDAwIC8qIENvdyBmaWxlICovCiAjZGVmaW5lIEZTX1JFU0VSVkVEX0ZMCQkJMHg4MDAwMDAwMCAvKiByZXNlcnZlZCBmb3IgZXh0MiBsaWIgKi8KIAogI2RlZmluZSBGU19GTF9VU0VSX1ZJU0lCTEUJCTB4MDAwM0RGRkYgLyogVXNlciB2aXNpYmxlIGZsYWdzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9mdHJhY2UuaAppbmRleCBjYTI5ZTAzLi45ZDg4ZTFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZnRyYWNlLmgKQEAgLTI5LDkgKzI5LDIyIEBACiAKIHR5cGVkZWYgdm9pZCAoKmZ0cmFjZV9mdW5jX3QpKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwKTsKIAorc3RydWN0IGZ0cmFjZV9oYXNoOworCitlbnVtIHsKKwlGVFJBQ0VfT1BTX0ZMX0VOQUJMRUQJCT0gMSA8PCAwLAorCUZUUkFDRV9PUFNfRkxfR0xPQkFMCQk9IDEgPDwgMSwKKwlGVFJBQ0VfT1BTX0ZMX0RZTkFNSUMJCT0gMSA8PCAyLAorfTsKKwogc3RydWN0IGZ0cmFjZV9vcHMgewotCWZ0cmFjZV9mdW5jX3QJICBmdW5jOwotCXN0cnVjdCBmdHJhY2Vfb3BzICpuZXh0OworCWZ0cmFjZV9mdW5jX3QJCQlmdW5jOworCXN0cnVjdCBmdHJhY2Vfb3BzCQkqbmV4dDsKKwl1bnNpZ25lZCBsb25nCQkJZmxhZ3M7CisjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCisJc3RydWN0IGZ0cmFjZV9oYXNoCQkqbm90cmFjZV9oYXNoOworCXN0cnVjdCBmdHJhY2VfaGFzaAkJKmZpbHRlcl9oYXNoOworI2VuZGlmCiB9OwogCiBleHRlcm4gaW50IGZ1bmN0aW9uX3RyYWNlX3N0b3A7CkBAIC0xNDYsMTQgKzE1OSwxMyBAQAogZXh0ZXJuIGludCBmdHJhY2VfdGV4dF9yZXNlcnZlZCh2b2lkICpzdGFydCwgdm9pZCAqZW5kKTsKIAogZW51bSB7Ci0JRlRSQUNFX0ZMX0ZSRUUJCT0gKDEgPDwgMCksCi0JRlRSQUNFX0ZMX0ZBSUxFRAk9ICgxIDw8IDEpLAotCUZUUkFDRV9GTF9GSUxURVIJPSAoMSA8PCAyKSwKLQlGVFJBQ0VfRkxfRU5BQkxFRAk9ICgxIDw8IDMpLAotCUZUUkFDRV9GTF9OT1RSQUNFCT0gKDEgPDwgNCksCi0JRlRSQUNFX0ZMX0NPTlZFUlRFRAk9ICgxIDw8IDUpLAorCUZUUkFDRV9GTF9FTkFCTEVECT0gKDEgPDwgMzApLAorCUZUUkFDRV9GTF9GUkVFCQk9ICgxIDw8IDMxKSwKIH07CiAKKyNkZWZpbmUgRlRSQUNFX0ZMX01BU0sJCSgweDNVTCA8PCAzMCkKKyNkZWZpbmUgRlRSQUNFX1JFRl9NQVgJCSgoMSA8PCAzMCkgLSAxKQorCiBzdHJ1Y3QgZHluX2Z0cmFjZSB7CiAJdW5pb24gewogCQl1bnNpZ25lZCBsb25nCQlpcDsgLyogYWRkcmVzcyBvZiBtY291bnQgY2FsbC1zaXRlICovCkBAIC0xNjcsNyArMTc5LDEyIEBACiB9OwogCiBpbnQgZnRyYWNlX2ZvcmNlX3VwZGF0ZSh2b2lkKTsKLXZvaWQgZnRyYWNlX3NldF9maWx0ZXIodW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuLCBpbnQgcmVzZXQpOwordm9pZCBmdHJhY2Vfc2V0X2ZpbHRlcihzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCB1bnNpZ25lZCBjaGFyICpidWYsCisJCSAgICAgICBpbnQgbGVuLCBpbnQgcmVzZXQpOwordm9pZCBmdHJhY2Vfc2V0X25vdHJhY2Uoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgY2hhciAqYnVmLAorCQkJaW50IGxlbiwgaW50IHJlc2V0KTsKK3ZvaWQgZnRyYWNlX3NldF9nbG9iYWxfZmlsdGVyKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbiwgaW50IHJlc2V0KTsKK3ZvaWQgZnRyYWNlX3NldF9nbG9iYWxfbm90cmFjZSh1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4sIGludCByZXNldCk7CiAKIGludCByZWdpc3Rlcl9mdHJhY2VfY29tbWFuZChzdHJ1Y3QgZnRyYWNlX2Z1bmNfY29tbWFuZCAqY21kKTsKIGludCB1bnJlZ2lzdGVyX2Z0cmFjZV9jb21tYW5kKHN0cnVjdCBmdHJhY2VfZnVuY19jb21tYW5kICpjbWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdHJhY2VfZXZlbnQuaCBiL2luY2x1ZGUvbGludXgvZnRyYWNlX2V2ZW50LmgKaW5kZXggMjJiMzJhZi4uYjVhNTUwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mdHJhY2VfZXZlbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9ldmVudC5oCkBAIC0zNyw2ICszNyw3IEBACiAJdW5zaWduZWQgY2hhcgkJZmxhZ3M7CiAJdW5zaWduZWQgY2hhcgkJcHJlZW1wdF9jb3VudDsKIAlpbnQJCQlwaWQ7CisJaW50CQkJcGFkZGluZzsKIH07CiAKICNkZWZpbmUgRlRSQUNFX01BWF9FVkVOVAkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2ZwLmggYi9pbmNsdWRlL2xpbnV4L2dmcC5oCmluZGV4IGJmYjhmOTMuLjU2ZDhmYzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZnAuaApAQCAtMzUzLDYgKzM1Myw4IEBACiAKIHZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0KHNpemVfdCBzaXplLCBnZnBfdCBnZnBfbWFzayk7CiB2b2lkIGZyZWVfcGFnZXNfZXhhY3Qodm9pZCAqdmlydCwgc2l6ZV90IHNpemUpOworLyogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBhbGxvY19wYWdlc19leGFjdF9ub2RlICEhISAqLwordm9pZCAqYWxsb2NfcGFnZXNfZXhhY3RfbmlkKGludCBuaWQsIHNpemVfdCBzaXplLCBnZnBfdCBnZnBfbWFzayk7CiAKICNkZWZpbmUgX19nZXRfZnJlZV9wYWdlKGdmcF9tYXNrKSBcCiAJCV9fZ2V0X2ZyZWVfcGFnZXMoKGdmcF9tYXNrKSwgMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmgKaW5kZXggZGYyOWM4Zi4uODg0N2M4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9odWdlX21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmgKQEAgLTExNyw3ICsxMTcsNyBAQAogCQkJCQkgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQkJCSBsb25nIGFkanVzdF9uZXh0KQogewotCWlmICghdm1hLT5hbm9uX3ZtYSB8fCB2bWEtPnZtX29wcyB8fCB2bWEtPnZtX2ZpbGUpCisJaWYgKCF2bWEtPmFub25fdm1hIHx8IHZtYS0+dm1fb3BzKQogCQlyZXR1cm47CiAJX192bWFfYWRqdXN0X3RyYW5zX2h1Z2Uodm1hLCBzdGFydCwgZW5kLCBhZGp1c3RfbmV4dCk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oIGIvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaAppbmRleCAyZDFjNjExLi5iMmVlZTU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oCisrKyBiL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmgKQEAgLTg4NCw2ICs4ODQsMTUgQEAKICNkZWZpbmUgSUVFRTgwMjExX0hUX0NBUF80ME1IWl9JTlRPTEVSQU5UCTB4NDAwMAogI2RlZmluZSBJRUVFODAyMTFfSFRfQ0FQX0xTSUdfVFhPUF9QUk9UCQkweDgwMDAKIAorLyogODAyLjExbiBIVCBleHRlbmRlZCBjYXBhYmlsaXRpZXMgbWFza3MgKGZvciBleHRlbmRlZF9odF9jYXBfaW5mbykgKi8KKyNkZWZpbmUgSUVFRTgwMjExX0hUX0VYVF9DQVBfUENPCQkweDAwMDEKKyNkZWZpbmUgSUVFRTgwMjExX0hUX0VYVF9DQVBfUENPX1RJTUUJCTB4MDAwNgorI2RlZmluZQkJSUVFRTgwMjExX0hUX0VYVF9DQVBfUENPX1RJTUVfU0hJRlQJMQorI2RlZmluZSBJRUVFODAyMTFfSFRfRVhUX0NBUF9NQ1NfRkIJCTB4MDMwMAorI2RlZmluZQkJSUVFRTgwMjExX0hUX0VYVF9DQVBfTUNTX0ZCX1NISUZUCTgKKyNkZWZpbmUgSUVFRTgwMjExX0hUX0VYVF9DQVBfSFRDX1NVUAkJMHgwNDAwCisjZGVmaW5lIElFRUU4MDIxMV9IVF9FWFRfQ0FQX1JEX1JFU1BPTkRFUgkweDA4MDAKKwogLyogODAyLjExbiBIVCBjYXBhYmlsaXR5IEFNUERVIHNldHRpbmdzIChmb3IgYW1wZHVfcGFyYW1zX2luZm8pICovCiAjZGVmaW5lIElFRUU4MDIxMV9IVF9BTVBEVV9QQVJNX0ZBQ1RPUgkJMHgwMwogI2RlZmluZSBJRUVFODAyMTFfSFRfQU1QRFVfUEFSTV9ERU5TSVRZCQkweDFDCkBAIC05OTMsNiArMTAwMiwxMSBAQAogCiAjZGVmaW5lIFdMQU5fQ0FQQUJJTElUWV9FU1MJCSgxPDwwKQogI2RlZmluZSBXTEFOX0NBUEFCSUxJVFlfSUJTUwkJKDE8PDEpCisKKy8qIEEgbWVzaCBTVEEgc2V0cyB0aGUgRVNTIGFuZCBJQlNTIGNhcGFiaWxpdHkgYml0cyB0byB6ZXJvICovCisjZGVmaW5lIFdMQU5fQ0FQQUJJTElUWV9JU19NQlNTKGNhcCkJXAorCSghKChjYXApICYgKFdMQU5fQ0FQQUJJTElUWV9FU1MgfCBXTEFOX0NBUEFCSUxJVFlfSUJTUykpKQorCiAjZGVmaW5lIFdMQU5fQ0FQQUJJTElUWV9DRl9QT0xMQUJMRQkoMTw8MikKICNkZWZpbmUgV0xBTl9DQVBBQklMSVRZX0NGX1BPTExfUkVRVUVTVAkoMTw8MykKICNkZWZpbmUgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kJCSgxPDw0KQpAQCAtMTI1Miw5ICsxMjY2LDggQEAKIAlXTEFOX0NBVEVHT1JZX01VTFRJSE9QX0FDVElPTiA9IDE0LAogCVdMQU5fQ0FURUdPUllfU0VMRl9QUk9URUNURUQgPSAxNSwKIAlXTEFOX0NBVEVHT1JZX1dNTSA9IDE3LAotCS8qIFRPRE86IHJlbW92ZSBNRVNIX1BMSU5LIGFuZCBNRVNIX1BBVEhfU0VMIGFmdGVyICovCi0JLyogICAgICAgbWVzaCBpcyB1cGRhdGVkIHRvIGN1cnJlbnQgODAyLjExcyBkcmFmdCAgKi8KLQlXTEFOX0NBVEVHT1JZX01FU0hfUExJTksgPSAzMCwKKwkvKiBUT0RPOiByZW1vdmUgTUVTSF9QQVRIX1NFTCBhZnRlciBtZXNoIGlzIHVwZGF0ZWQKKwkgKiB0byBjdXJyZW50IDgwMi4xMXMgZHJhZnQgICovCiAJV0xBTl9DQVRFR09SWV9NRVNIX1BBVEhfU0VMID0gMzIsCiAJV0xBTl9DQVRFR09SWV9WRU5ET1JfU1BFQ0lGSUNfUFJPVEVDVEVEID0gMTI2LAogCVdMQU5fQ0FURUdPUllfVkVORE9SX1NQRUNJRklDID0gMTI3LApAQCAtMTUwNyw2ICsxNTIwLDcgQEAKIAkJY2F0ZWdvcnkgPSAoKHU4ICopIGhkcikgKyAyNDsKIAkJcmV0dXJuICpjYXRlZ29yeSAhPSBXTEFOX0NBVEVHT1JZX1BVQkxJQyAmJgogCQkJKmNhdGVnb3J5ICE9IFdMQU5fQ0FURUdPUllfSFQgJiYKKwkJCSpjYXRlZ29yeSAhPSBXTEFOX0NBVEVHT1JZX1NFTEZfUFJPVEVDVEVEICYmCiAJCQkqY2F0ZWdvcnkgIT0gV0xBTl9DQVRFR09SWV9WRU5ET1JfU1BFQ0lGSUM7CiAJfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmggYi9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmgKaW5kZXggYmU2OTA0My4uMGYxMzI1ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaApAQCAtMTM2LDYgKzEzNiw3IEBACiBleHRlcm4gc3RydWN0IGN0bF90YWJsZSBldGhlcl90YWJsZVtdOwogI2VuZGlmCiAKK2ludCBtYWNfcHRvbihjb25zdCBjaGFyICpzLCB1OCAqbWFjKTsKIGV4dGVybiBzc2l6ZV90IHN5c2ZzX2Zvcm1hdF9tYWMoY2hhciAqYnVmLCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgbGVuKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oCmluZGV4IDYzNWUxZmEuLjI5MGJkOGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oCkBAIC04Niw3ICs4Niw2IEBACiAJCQkJCSAgICAqIHRoZSB2bGFuIGlzIGF0dGFjaGVkIHRvLgogCQkJCQkgICAgKi8KIAl1bnNpZ25lZCBpbnQJCW5yX3ZsYW5zOwotCWludAkJCWtpbGxhbGw7CiAJc3RydWN0IGhsaXN0X25vZGUJaGxpc3Q7CS8qIGxpbmtlZCBsaXN0ICovCiAJc3RydWN0IG5ldF9kZXZpY2UgKip2bGFuX2RldmljZXNfYXJyYXlzW1ZMQU5fR1JPVVBfQVJSQVlfU1BMSVRfUEFSVFNdOwogCXN0cnVjdCByY3VfaGVhZAkJcmN1OwpAQCAtMTMyLDcgKzEzMSw4IEBACiAKIGV4dGVybiBpbnQgX192bGFuX2h3YWNjZWxfcngoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHZsYW5fZ3JvdXAgKmdycCwKIAkJCSAgICAgdTE2IHZsYW5fdGNpLCBpbnQgcG9sbGluZyk7Ci1leHRlcm4gYm9vbCB2bGFuX2h3YWNjZWxfZG9fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqKnNrYik7CitleHRlcm4gYm9vbCB2bGFuX2RvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipza2IpOworZXh0ZXJuIHN0cnVjdCBza19idWZmICp2bGFuX3VudGFnKHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGdyb19yZXN1bHRfdAogdmxhbl9ncm9fcmVjZWl2ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCB2bGFuX2dyb3VwICpncnAsCiAJCSB1bnNpZ25lZCBpbnQgdmxhbl90Y2ksIHN0cnVjdCBza19idWZmICpza2IpOwpAQCAtMTY2LDEzICsxNjYsMTggQEAKIAlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHZsYW5faHdhY2NlbF9kb19yZWNlaXZlKHN0cnVjdCBza19idWZmICoqc2tiKQorc3RhdGljIGlubGluZSBib29sIHZsYW5fZG9fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqKnNrYikKIHsKIAlpZiAoKCpza2IpLT52bGFuX3RjaSAmIFZMQU5fVklEX01BU0spCiAJCSgqc2tiKS0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOwogCXJldHVybiBmYWxzZTsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdmxhbl91bnRhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBza2I7Cit9CisKIHN0YXRpYyBpbmxpbmUgZ3JvX3Jlc3VsdF90CiB2bGFuX2dyb19yZWNlaXZlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IHZsYW5fZ3JvdXAgKmdycCwKIAkJIHVuc2lnbmVkIGludCB2bGFuX3RjaSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5pdC5oIGIvaW5jbHVkZS9saW51eC9pbml0LmgKaW5kZXggNTc3NjcxYy4uOTE0NmYzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbml0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbml0LmgKQEAgLTc5LDI5ICs3OSwyOSBAQAogI2RlZmluZSBfX2V4aXR1c2VkICBfX3VzZWQKICNlbmRpZgogCi0jZGVmaW5lIF9fZXhpdCAgICAgICAgICBfX3NlY3Rpb24oLmV4aXQudGV4dCkgX19leGl0dXNlZCBfX2NvbGQKKyNkZWZpbmUgX19leGl0ICAgICAgICAgIF9fc2VjdGlvbiguZXhpdC50ZXh0KSBfX2V4aXR1c2VkIF9fY29sZCBub3RyYWNlCiAKIC8qIFVzZWQgZm9yIEhPVFBMVUcgKi8KLSNkZWZpbmUgX19kZXZpbml0ICAgICAgICBfX3NlY3Rpb24oLmRldmluaXQudGV4dCkgX19jb2xkCisjZGVmaW5lIF9fZGV2aW5pdCAgICAgICAgX19zZWN0aW9uKC5kZXZpbml0LnRleHQpIF9fY29sZCBub3RyYWNlCiAjZGVmaW5lIF9fZGV2aW5pdGRhdGEgICAgX19zZWN0aW9uKC5kZXZpbml0LmRhdGEpCiAjZGVmaW5lIF9fZGV2aW5pdGNvbnN0ICAgX19zZWN0aW9uKC5kZXZpbml0LnJvZGF0YSkKLSNkZWZpbmUgX19kZXZleGl0ICAgICAgICBfX3NlY3Rpb24oLmRldmV4aXQudGV4dCkgX19leGl0dXNlZCBfX2NvbGQKKyNkZWZpbmUgX19kZXZleGl0ICAgICAgICBfX3NlY3Rpb24oLmRldmV4aXQudGV4dCkgX19leGl0dXNlZCBfX2NvbGQgbm90cmFjZQogI2RlZmluZSBfX2RldmV4aXRkYXRhICAgIF9fc2VjdGlvbiguZGV2ZXhpdC5kYXRhKQogI2RlZmluZSBfX2RldmV4aXRjb25zdCAgIF9fc2VjdGlvbiguZGV2ZXhpdC5yb2RhdGEpCiAKIC8qIFVzZWQgZm9yIEhPVFBMVUdfQ1BVICovCi0jZGVmaW5lIF9fY3B1aW5pdCAgICAgICAgX19zZWN0aW9uKC5jcHVpbml0LnRleHQpIF9fY29sZAorI2RlZmluZSBfX2NwdWluaXQgICAgICAgIF9fc2VjdGlvbiguY3B1aW5pdC50ZXh0KSBfX2NvbGQgbm90cmFjZQogI2RlZmluZSBfX2NwdWluaXRkYXRhICAgIF9fc2VjdGlvbiguY3B1aW5pdC5kYXRhKQogI2RlZmluZSBfX2NwdWluaXRjb25zdCAgIF9fc2VjdGlvbiguY3B1aW5pdC5yb2RhdGEpCi0jZGVmaW5lIF9fY3B1ZXhpdCAgICAgICAgX19zZWN0aW9uKC5jcHVleGl0LnRleHQpIF9fZXhpdHVzZWQgX19jb2xkCisjZGVmaW5lIF9fY3B1ZXhpdCAgICAgICAgX19zZWN0aW9uKC5jcHVleGl0LnRleHQpIF9fZXhpdHVzZWQgX19jb2xkIG5vdHJhY2UKICNkZWZpbmUgX19jcHVleGl0ZGF0YSAgICBfX3NlY3Rpb24oLmNwdWV4aXQuZGF0YSkKICNkZWZpbmUgX19jcHVleGl0Y29uc3QgICBfX3NlY3Rpb24oLmNwdWV4aXQucm9kYXRhKQogCiAvKiBVc2VkIGZvciBNRU1PUllfSE9UUExVRyAqLwotI2RlZmluZSBfX21lbWluaXQgICAgICAgIF9fc2VjdGlvbigubWVtaW5pdC50ZXh0KSBfX2NvbGQKKyNkZWZpbmUgX19tZW1pbml0ICAgICAgICBfX3NlY3Rpb24oLm1lbWluaXQudGV4dCkgX19jb2xkIG5vdHJhY2UKICNkZWZpbmUgX19tZW1pbml0ZGF0YSAgICBfX3NlY3Rpb24oLm1lbWluaXQuZGF0YSkKICNkZWZpbmUgX19tZW1pbml0Y29uc3QgICBfX3NlY3Rpb24oLm1lbWluaXQucm9kYXRhKQotI2RlZmluZSBfX21lbWV4aXQgICAgICAgIF9fc2VjdGlvbigubWVtZXhpdC50ZXh0KSBfX2V4aXR1c2VkIF9fY29sZAorI2RlZmluZSBfX21lbWV4aXQgICAgICAgIF9fc2VjdGlvbigubWVtZXhpdC50ZXh0KSBfX2V4aXR1c2VkIF9fY29sZCBub3RyYWNlCiAjZGVmaW5lIF9fbWVtZXhpdGRhdGEgICAgX19zZWN0aW9uKC5tZW1leGl0LmRhdGEpCiAjZGVmaW5lIF9fbWVtZXhpdGNvbnN0ICAgX19zZWN0aW9uKC5tZW1leGl0LnJvZGF0YSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaCBiL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKaW5kZXggY2FhMTUxZi4uNjg5NDk2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaAorKysgYi9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCkBAIC0xMzQsNyArMTM0LDYgQEAKIAkuc3RhY2sJCT0gJmluaXRfdGhyZWFkX2luZm8sCQkJCVwKIAkudXNhZ2UJCT0gQVRPTUlDX0lOSVQoMiksCQkJCVwKIAkuZmxhZ3MJCT0gUEZfS1RIUkVBRCwJCQkJCVwKLQkubG9ja19kZXB0aAk9IC0xLAkJCQkJCVwKIAkucHJpbwkJPSBNQVhfUFJJTy0yMCwJCQkJCVwKIAkuc3RhdGljX3ByaW8JPSBNQVhfUFJJTy0yMCwJCQkJCVwKIAkubm9ybWFsX3ByaW8JPSBNQVhfUFJJTy0yMCwJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmggYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCmluZGV4IGJlYTBhYzcuLjZjMTI5ODkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaApAQCAtNDE0LDcgKzQxNCw2IEBACiAJVEFTS0xFVF9TT0ZUSVJRLAogCVNDSEVEX1NPRlRJUlEsCiAJSFJUSU1FUl9TT0ZUSVJRLAotCVJDVV9TT0ZUSVJRLAkvKiBQcmVmZXJhYmxlIFJDVSBzaG91bGQgYWx3YXlzIGJlIHRoZSBsYXN0IHNvZnRpcnEgKi8KIAogCU5SX1NPRlRJUlFTCiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnEuaCBiL2luY2x1ZGUvbGludXgvaXJxLmgKaW5kZXggMDlhMzA4MC4uOGI0NTM4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcnEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lycS5oCkBAIC01MywxMiArNTMsMTMgQEAKICAqIEJpdHMgd2hpY2ggY2FuIGJlIG1vZGlmaWVkIHZpYSBpcnFfc2V0L2NsZWFyL21vZGlmeV9zdGF0dXNfZmxhZ3MoKQogICogSVJRX0xFVkVMCQkJLSBJbnRlcnJ1cHQgaXMgbGV2ZWwgdHlwZS4gV2lsbCBiZSBhbHNvCiAgKgkJCQkgIHVwZGF0ZWQgaW4gdGhlIGNvZGUgd2hlbiB0aGUgYWJvdmUgdHJpZ2dlcgotICoJCQkJICBiaXRzIGFyZSBtb2RpZmllZCB2aWEgc2V0X2lycV90eXBlKCkKKyAqCQkJCSAgYml0cyBhcmUgbW9kaWZpZWQgdmlhIGlycV9zZXRfaXJxX3R5cGUoKQogICogSVJRX1BFUl9DUFUJCQktIE1hcmsgYW4gaW50ZXJydXB0IFBFUl9DUFUuIFdpbGwgcHJvdGVjdAogICoJCQkJICBpdCBmcm9tIGFmZmluaXR5IHNldHRpbmcKICAqIElSUV9OT1BST0JFCQkJLSBJbnRlcnJ1cHQgY2Fubm90IGJlIHByb2JlZCBieSBhdXRvcHJvYmluZwogICogSVJRX05PUkVRVUVTVAkJLSBJbnRlcnJ1cHQgY2Fubm90IGJlIHJlcXVlc3RlZCB2aWEKICAqCQkJCSAgcmVxdWVzdF9pcnEoKQorICogSVJRX05PVEhSRUFECQkJLSBJbnRlcnJ1cHQgY2Fubm90IGJlIHRocmVhZGVkCiAgKiBJUlFfTk9BVVRPRU4JCQktIEludGVycnVwdCBpcyBub3QgYXV0b21hdGljYWxseSBlbmFibGVkIGluCiAgKgkJCQkgIHJlcXVlc3Qvc2V0dXBfaXJxKCkKICAqIElSUV9OT19CQUxBTkNJTkcJCS0gSW50ZXJydXB0IGNhbm5vdCBiZSBiYWxhbmNlZCAoYWZmaW5pdHkgc2V0KQpAQCAtODUsNiArODYsNyBAQAogCUlSUV9OT19CQUxBTkNJTkcJPSAoMSA8PCAxMyksCiAJSVJRX01PVkVfUENOVFhUCQk9ICgxIDw8IDE0KSwKIAlJUlFfTkVTVEVEX1RIUkVBRAk9ICgxIDw8IDE1KSwKKwlJUlFfTk9USFJFQUQJCT0gKDEgPDwgMTYpLAogfTsKIAogI2RlZmluZSBJUlFGX01PRElGWV9NQVNLCVwKQEAgLTI2MSwyMyArMjYzLDYgQEAKICAqIHN0cnVjdCBpcnFfY2hpcCAtIGhhcmR3YXJlIGludGVycnVwdCBjaGlwIGRlc2NyaXB0b3IKICAqCiAgKiBAbmFtZToJCW5hbWUgZm9yIC9wcm9jL2ludGVycnVwdHMKLSAqIEBzdGFydHVwOgkJZGVwcmVjYXRlZCwgcmVwbGFjZWQgYnkgaXJxX3N0YXJ0dXAKLSAqIEBzaHV0ZG93bjoJCWRlcHJlY2F0ZWQsIHJlcGxhY2VkIGJ5IGlycV9zaHV0ZG93bgotICogQGVuYWJsZToJCWRlcHJlY2F0ZWQsIHJlcGxhY2VkIGJ5IGlycV9lbmFibGUKLSAqIEBkaXNhYmxlOgkJZGVwcmVjYXRlZCwgcmVwbGFjZWQgYnkgaXJxX2Rpc2FibGUKLSAqIEBhY2s6CQlkZXByZWNhdGVkLCByZXBsYWNlZCBieSBpcnFfYWNrCi0gKiBAbWFzazoJCWRlcHJlY2F0ZWQsIHJlcGxhY2VkIGJ5IGlycV9tYXNrCi0gKiBAbWFza19hY2s6CQlkZXByZWNhdGVkLCByZXBsYWNlZCBieSBpcnFfbWFza19hY2sKLSAqIEB1bm1hc2s6CQlkZXByZWNhdGVkLCByZXBsYWNlZCBieSBpcnFfdW5tYXNrCi0gKiBAZW9pOgkJZGVwcmVjYXRlZCwgcmVwbGFjZWQgYnkgaXJxX2VvaQotICogQGVuZDoJCWRlcHJlY2F0ZWQsIHdpbGwgZ28gYXdheSB3aXRoIF9fZG9fSVJRKCkKLSAqIEBzZXRfYWZmaW5pdHk6CWRlcHJlY2F0ZWQsIHJlcGxhY2VkIGJ5IGlycV9zZXRfYWZmaW5pdHkKLSAqIEByZXRyaWdnZXI6CQlkZXByZWNhdGVkLCByZXBsYWNlZCBieSBpcnFfcmV0cmlnZ2VyCi0gKiBAc2V0X3R5cGU6CQlkZXByZWNhdGVkLCByZXBsYWNlZCBieSBpcnFfc2V0X3R5cGUKLSAqIEBzZXRfd2FrZToJCWRlcHJlY2F0ZWQsIHJlcGxhY2VkIGJ5IGlycV93YWtlCi0gKiBAYnVzX2xvY2s6CQlkZXByZWNhdGVkLCByZXBsYWNlZCBieSBpcnFfYnVzX2xvY2sKLSAqIEBidXNfc3luY191bmxvY2s6CWRlcHJlY2F0ZWQsIHJlcGxhY2VkIGJ5IGlycV9idXNfc3luY191bmxvY2sKLSAqCiAgKiBAaXJxX3N0YXJ0dXA6CXN0YXJ0IHVwIHRoZSBpbnRlcnJ1cHQgKGRlZmF1bHRzIHRvIC0+ZW5hYmxlIGlmIE5VTEwpCiAgKiBAaXJxX3NodXRkb3duOglzaHV0IGRvd24gdGhlIGludGVycnVwdCAoZGVmYXVsdHMgdG8gLT5kaXNhYmxlIGlmIE5VTEwpCiAgKiBAaXJxX2VuYWJsZToJCWVuYWJsZSB0aGUgaW50ZXJydXB0IChkZWZhdWx0cyB0byBjaGlwLT51bm1hc2sgaWYgTlVMTCkKQEAgLTI5NSw2ICsyODAsOSBAQAogICogQGlycV9idXNfc3luY191bmxvY2s6ZnVuY3Rpb24gdG8gc3luYyBhbmQgdW5sb2NrIHNsb3cgYnVzIChpMmMpIGNoaXBzCiAgKiBAaXJxX2NwdV9vbmxpbmU6CWNvbmZpZ3VyZSBhbiBpbnRlcnJ1cHQgc291cmNlIGZvciBhIHNlY29uZGFyeSBDUFUKICAqIEBpcnFfY3B1X29mZmxpbmU6CXVuLWNvbmZpZ3VyZSBhbiBpbnRlcnJ1cHQgc291cmNlIGZvciBhIHNlY29uZGFyeSBDUFUKKyAqIEBpcnFfc3VzcGVuZDoJZnVuY3Rpb24gY2FsbGVkIGZyb20gY29yZSBjb2RlIG9uIHN1c3BlbmQgb25jZSBwZXIgY2hpcAorICogQGlycV9yZXN1bWU6CQlmdW5jdGlvbiBjYWxsZWQgZnJvbSBjb3JlIGNvZGUgb24gcmVzdW1lIG9uY2UgcGVyIGNoaXAKKyAqIEBpcnFfcG1fc2h1dGRvd246CWZ1bmN0aW9uIGNhbGxlZCBmcm9tIGNvcmUgY29kZSBvbiBzaHV0ZG93biBvbmNlIHBlciBjaGlwCiAgKiBAaXJxX3ByaW50X2NoaXA6CW9wdGlvbmFsIHRvIHByaW50IHNwZWNpYWwgY2hpcCBpbmZvIGluIHNob3dfaW50ZXJydXB0cwogICogQGZsYWdzOgkJY2hpcCBzcGVjaWZpYyBmbGFncwogICoKQEAgLTMyNCw2ICszMTIsMTAgQEAKIAl2b2lkCQkoKmlycV9jcHVfb25saW5lKShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpOwogCXZvaWQJCSgqaXJxX2NwdV9vZmZsaW5lKShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpOwogCisJdm9pZAkJKCppcnFfc3VzcGVuZCkoc3RydWN0IGlycV9kYXRhICpkYXRhKTsKKwl2b2lkCQkoKmlycV9yZXN1bWUpKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSk7CisJdm9pZAkJKCppcnFfcG1fc2h1dGRvd24pKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSk7CisKIAl2b2lkCQkoKmlycV9wcmludF9jaGlwKShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsIHN0cnVjdCBzZXFfZmlsZSAqcCk7CiAKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwpAQCAtNDM5LDcgKzQzMSw3IEBACiAvKgogICogU2V0IGEgaGlnaGxldmVsIGNoYWluZWQgZmxvdyBoYW5kbGVyIGZvciBhIGdpdmVuIElSUS4KICAqIChhIGNoYWluZWQgaGFuZGxlciBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgYW5kIHNldCB0bwotICogIElSUV9OT1JFUVVFU1QgYW5kIElSUV9OT1BST0JFKQorICogIElSUV9OT1JFUVVFU1QsIElSUV9OT1BST0JFLCBhbmQgSVJRX05PVEhSRUFEKQogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKIGlycV9zZXRfY2hhaW5lZF9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIGlycV9mbG93X2hhbmRsZXJfdCBoYW5kbGUpCkBAIC00NjksNiArNDYxLDE2IEBACiAJaXJxX21vZGlmeV9zdGF0dXMoaXJxLCBJUlFfTk9QUk9CRSwgMCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfc2V0X25vdGhyZWFkKHVuc2lnbmVkIGludCBpcnEpCit7CisJaXJxX21vZGlmeV9zdGF0dXMoaXJxLCAwLCBJUlFfTk9USFJFQUQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX3NldF90aHJlYWQodW5zaWduZWQgaW50IGlycSkKK3sKKwlpcnFfbW9kaWZ5X3N0YXR1cyhpcnEsIElSUV9OT1RIUkVBRCwgMCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBpcnFfc2V0X25lc3RlZF90aHJlYWQodW5zaWduZWQgaW50IGlycSwgYm9vbCBuZXN0KQogewogCWlmIChuZXN0KQpAQCAtNTczLDYgKzU3NSwxNDUgQEAKIAlyZXR1cm4gaXJxX3Jlc2VydmVfaXJxcyhpcnEsIDEpOwogfQogCisjaWZuZGVmIGlycV9yZWdfd3JpdGVsCisjIGRlZmluZSBpcnFfcmVnX3dyaXRlbCh2YWwsIGFkZHIpCXdyaXRlbCh2YWwsIGFkZHIpCisjZW5kaWYKKyNpZm5kZWYgaXJxX3JlZ19yZWFkbAorIyBkZWZpbmUgaXJxX3JlZ19yZWFkbChhZGRyKQkJcmVhZGwoYWRkcikKKyNlbmRpZgorCisvKioKKyAqIHN0cnVjdCBpcnFfY2hpcF9yZWdzIC0gcmVnaXN0ZXIgb2Zmc2V0cyBmb3Igc3RydWN0IGlycV9nY2kKKyAqIEBlbmFibGU6CUVuYWJsZSByZWdpc3RlciBvZmZzZXQgdG8gcmVnX2Jhc2UKKyAqIEBkaXNhYmxlOglEaXNhYmxlIHJlZ2lzdGVyIG9mZnNldCB0byByZWdfYmFzZQorICogQG1hc2s6CU1hc2sgcmVnaXN0ZXIgb2Zmc2V0IHRvIHJlZ19iYXNlCisgKiBAYWNrOglBY2sgcmVnaXN0ZXIgb2Zmc2V0IHRvIHJlZ19iYXNlCisgKiBAZW9pOglFb2kgcmVnaXN0ZXIgb2Zmc2V0IHRvIHJlZ19iYXNlCisgKiBAdHlwZToJVHlwZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIG9mZnNldCB0byByZWdfYmFzZQorICogQHBvbGFyaXR5OglQb2xhcml0eSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIG9mZnNldCB0byByZWdfYmFzZQorICovCitzdHJ1Y3QgaXJxX2NoaXBfcmVncyB7CisJdW5zaWduZWQgbG9uZwkJZW5hYmxlOworCXVuc2lnbmVkIGxvbmcJCWRpc2FibGU7CisJdW5zaWduZWQgbG9uZwkJbWFzazsKKwl1bnNpZ25lZCBsb25nCQlhY2s7CisJdW5zaWduZWQgbG9uZwkJZW9pOworCXVuc2lnbmVkIGxvbmcJCXR5cGU7CisJdW5zaWduZWQgbG9uZwkJcG9sYXJpdHk7Cit9OworCisvKioKKyAqIHN0cnVjdCBpcnFfY2hpcF90eXBlIC0gR2VuZXJpYyBpbnRlcnJ1cHQgY2hpcCBpbnN0YW5jZSBmb3IgYSBmbG93IHR5cGUKKyAqIEBjaGlwOgkJVGhlIHJlYWwgaW50ZXJydXB0IGNoaXAgd2hpY2ggcHJvdmlkZXMgdGhlIGNhbGxiYWNrcworICogQHJlZ3M6CQlSZWdpc3RlciBvZmZzZXRzIGZvciB0aGlzIGNoaXAKKyAqIEBoYW5kbGVyOgkJRmxvdyBoYW5kbGVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNoaXAKKyAqIEB0eXBlOgkJQ2hpcCBjYW4gaGFuZGxlIHRoZXNlIGZsb3cgdHlwZXMKKyAqCisgKiBBIGlycV9nZW5lcmljX2NoaXAgY2FuIGhhdmUgc2V2ZXJhbCBpbnN0YW5jZXMgb2YgaXJxX2NoaXBfdHlwZSB3aGVuCisgKiBpdCByZXF1aXJlcyBkaWZmZXJlbnQgZnVuY3Rpb25zIGFuZCByZWdpc3RlciBvZmZzZXRzIGZvciBkaWZmZXJlbnQKKyAqIGZsb3cgdHlwZXMuCisgKi8KK3N0cnVjdCBpcnFfY2hpcF90eXBlIHsKKwlzdHJ1Y3QgaXJxX2NoaXAJCWNoaXA7CisJc3RydWN0IGlycV9jaGlwX3JlZ3MJcmVnczsKKwlpcnFfZmxvd19oYW5kbGVyX3QJaGFuZGxlcjsKKwl1MzIJCQl0eXBlOworfTsKKworLyoqCisgKiBzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAtIEdlbmVyaWMgaXJxIGNoaXAgZGF0YSBzdHJ1Y3R1cmUKKyAqIEBsb2NrOgkJTG9jayB0byBwcm90ZWN0IHJlZ2lzdGVyIGFuZCBjYWNoZSBkYXRhIGFjY2VzcworICogQHJlZ19iYXNlOgkJUmVnaXN0ZXIgYmFzZSBhZGRyZXNzICh2aXJ0dWFsKQorICogQGlycV9iYXNlOgkJSW50ZXJydXB0IGJhc2UgbnIgZm9yIHRoaXMgY2hpcAorICogQGlycV9jbnQ6CQlOdW1iZXIgb2YgaW50ZXJydXB0cyBoYW5kbGVkIGJ5IHRoaXMgY2hpcAorICogQG1hc2tfY2FjaGU6CQlDYWNoZWQgbWFzayByZWdpc3RlcgorICogQHR5cGVfY2FjaGU6CQlDYWNoZWQgdHlwZSByZWdpc3RlcgorICogQHBvbGFyaXR5X2NhY2hlOglDYWNoZWQgcG9sYXJpdHkgcmVnaXN0ZXIKKyAqIEB3YWtlX2VuYWJsZWQ6CUludGVycnVwdCBjYW4gd2FrZXVwIGZyb20gc3VzcGVuZAorICogQHdha2VfYWN0aXZlOglJbnRlcnJ1cHQgaXMgbWFya2VkIGFzIGFuIHdha2V1cCBmcm9tIHN1c3BlbmQgc291cmNlCisgKiBAbnVtX2N0OgkJTnVtYmVyIG9mIGF2YWlsYWJsZSBpcnFfY2hpcF90eXBlIGluc3RhbmNlcyAodXN1YWxseSAxKQorICogQHByaXZhdGU6CQlQcml2YXRlIGRhdGEgZm9yIG5vbiBnZW5lcmljIGNoaXAgY2FsbGJhY2tzCisgKiBAbGlzdDoJCUxpc3QgaGVhZCBmb3Iga2VlcGluZyB0cmFjayBvZiBpbnN0YW5jZXMKKyAqIEBjaGlwX3R5cGVzOgkJQXJyYXkgb2YgaW50ZXJydXB0IGlycV9jaGlwX3R5cGVzCisgKgorICogTm90ZSwgdGhhdCBpcnFfY2hpcF9nZW5lcmljIGNhbiBoYXZlIG11bHRpcGxlIGlycV9jaGlwX3R5cGUKKyAqIGltcGxlbWVudGF0aW9ucyB3aGljaCBjYW4gYmUgYXNzb2NpYXRlZCB0byBhIHBhcnRpY3VsYXIgaXJxIGxpbmUgb2YKKyAqIGFuIGlycV9jaGlwX2dlbmVyaWMgaW5zdGFuY2UuIFRoYXQgYWxsb3dzIHRvIHNoYXJlIGFuZCBwcm90ZWN0CisgKiBzdGF0ZSBpbiBhbiBpcnFfY2hpcF9nZW5lcmljIGluc3RhbmNlIHdoZW4gd2UgbmVlZCB0byBpbXBsZW1lbnQKKyAqIGRpZmZlcmVudCBmbG93IG1lY2hhbmlzbXMgKGxldmVsL2VkZ2UpIGZvciBpdC4KKyAqLworc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgeworCXJhd19zcGlubG9ja190CQlsb2NrOworCXZvaWQgX19pb21lbQkJKnJlZ19iYXNlOworCXVuc2lnbmVkIGludAkJaXJxX2Jhc2U7CisJdW5zaWduZWQgaW50CQlpcnFfY250OworCXUzMgkJCW1hc2tfY2FjaGU7CisJdTMyCQkJdHlwZV9jYWNoZTsKKwl1MzIJCQlwb2xhcml0eV9jYWNoZTsKKwl1MzIJCQl3YWtlX2VuYWJsZWQ7CisJdTMyCQkJd2FrZV9hY3RpdmU7CisJdW5zaWduZWQgaW50CQludW1fY3Q7CisJdm9pZAkJCSpwcml2YXRlOworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzdHJ1Y3QgaXJxX2NoaXBfdHlwZQljaGlwX3R5cGVzWzBdOworfTsKKworLyoqCisgKiBlbnVtIGlycV9nY19mbGFncyAtIEluaXRpYWxpemF0aW9uIGZsYWdzIGZvciBnZW5lcmljIGlycSBjaGlwcworICogQElSUV9HQ19JTklUX01BU0tfQ0FDSEU6CUluaXRpYWxpemUgdGhlIG1hc2tfY2FjaGUgYnkgcmVhZGluZyBtYXNrIHJlZworICogQElSUV9HQ19JTklUX05FU1RFRF9MT0NLOglTZXQgdGhlIGxvY2sgY2xhc3Mgb2YgdGhlIGlycXMgdG8gbmVzdGVkIGZvcgorICoJCQkJaXJxIGNoaXBzIHdoaWNoIG5lZWQgdG8gY2FsbCBpcnFfc2V0X3dha2UoKSBvbgorICoJCQkJdGhlIHBhcmVudCBpcnEuIFVzdWFsbHkgR1BJTyBpbXBsZW1lbnRhdGlvbnMKKyAqLworZW51bSBpcnFfZ2NfZmxhZ3MgeworCUlSUV9HQ19JTklUX01BU0tfQ0FDSEUJCT0gMSA8PCAwLAorCUlSUV9HQ19JTklUX05FU1RFRF9MT0NLCQk9IDEgPDwgMSwKK307CisKKy8qIEdlbmVyaWMgY2hpcCBjYWxsYmFjayBmdW5jdGlvbnMgKi8KK3ZvaWQgaXJxX2djX25vb3Aoc3RydWN0IGlycV9kYXRhICpkKTsKK3ZvaWQgaXJxX2djX21hc2tfZGlzYWJsZV9yZWcoc3RydWN0IGlycV9kYXRhICpkKTsKK3ZvaWQgaXJxX2djX21hc2tfc2V0X2JpdChzdHJ1Y3QgaXJxX2RhdGEgKmQpOwordm9pZCBpcnFfZ2NfbWFza19jbHJfYml0KHN0cnVjdCBpcnFfZGF0YSAqZCk7Cit2b2lkIGlycV9nY191bm1hc2tfZW5hYmxlX3JlZyhzdHJ1Y3QgaXJxX2RhdGEgKmQpOwordm9pZCBpcnFfZ2NfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCk7Cit2b2lkIGlycV9nY19tYXNrX2Rpc2FibGVfcmVnX2FuZF9hY2soc3RydWN0IGlycV9kYXRhICpkKTsKK3ZvaWQgaXJxX2djX2VvaShzdHJ1Y3QgaXJxX2RhdGEgKmQpOworaW50IGlycV9nY19zZXRfd2FrZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIGludCBvbik7CisKKy8qIFNldHVwIGZ1bmN0aW9ucyBmb3IgaXJxX2NoaXBfZ2VuZXJpYyAqLworc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKgoraXJxX2FsbG9jX2dlbmVyaWNfY2hpcChjb25zdCBjaGFyICpuYW1lLCBpbnQgbnJfY3QsIHVuc2lnbmVkIGludCBpcnFfYmFzZSwKKwkJICAgICAgIHZvaWQgX19pb21lbSAqcmVnX2Jhc2UsIGlycV9mbG93X2hhbmRsZXJfdCBoYW5kbGVyKTsKK3ZvaWQgaXJxX3NldHVwX2dlbmVyaWNfY2hpcChzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2MsIHUzMiBtc2ssCisJCQkgICAgZW51bSBpcnFfZ2NfZmxhZ3MgZmxhZ3MsIHVuc2lnbmVkIGludCBjbHIsCisJCQkgICAgdW5zaWduZWQgaW50IHNldCk7CitpbnQgaXJxX3NldHVwX2FsdF9jaGlwKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgaW50IHR5cGUpOwordm9pZCBpcnFfcmVtb3ZlX2dlbmVyaWNfY2hpcChzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2MsIHUzMiBtc2ssCisJCQkgICAgIHVuc2lnbmVkIGludCBjbHIsIHVuc2lnbmVkIGludCBzZXQpOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcnFfY2hpcF90eXBlICppcnFfZGF0YV9nZXRfY2hpcF90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGQtPmNoaXAsIHN0cnVjdCBpcnFfY2hpcF90eXBlLCBjaGlwKTsKK30KKworI2RlZmluZSBJUlFfTVNLKG4pICh1MzIpKChuKSA8IDMyID8gKCgxIDw8IChuKSkgLSAxKSA6IFVJTlRfTUFYKQorCisjaWZkZWYgQ09ORklHX1NNUAorc3RhdGljIGlubGluZSB2b2lkIGlycV9nY19sb2NrKHN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYykKK3sKKwlyYXdfc3Bpbl9sb2NrKCZnYy0+bG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfZ2NfdW5sb2NrKHN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYykKK3sKKwlyYXdfc3Bpbl91bmxvY2soJmdjLT5sb2NrKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2djX2xvY2soc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfZ2NfdW5sb2NrKHN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYykgeyB9CisjZW5kaWYKKwogI2VuZGlmIC8qIENPTkZJR19HRU5FUklDX0hBUkRJUlFTICovCiAKICNlbmRpZiAvKiAhQ09ORklHX1MzOTAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJxZGVzYy5oIGIvaW5jbHVkZS9saW51eC9pcnFkZXNjLmgKaW5kZXggYTA4MjkwNS4uMmQ5MjFiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcnFkZXNjLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcnFkZXNjLmgKQEAgLTE2LDE2ICsxNiwxOCBAQAogICogQGlycV9kYXRhOgkJcGVyIGlycSBhbmQgY2hpcCBkYXRhIHBhc3NlZCBkb3duIHRvIGNoaXAgZnVuY3Rpb25zCiAgKiBAdGltZXJfcmFuZF9zdGF0ZToJcG9pbnRlciB0byB0aW1lciByYW5kIHN0YXRlIHN0cnVjdAogICogQGtzdGF0X2lycXM6CQlpcnEgc3RhdHMgcGVyIGNwdQotICogQGhhbmRsZV9pcnE6CQloaWdobGV2ZWwgaXJxLWV2ZW50cyBoYW5kbGVyIFtpZiBOVUxMLCBfX2RvX0lSUSgpXQorICogQGhhbmRsZV9pcnE6CQloaWdobGV2ZWwgaXJxLWV2ZW50cyBoYW5kbGVyCisgKiBAcHJlZmxvd19oYW5kbGVyOgloYW5kbGVyIGNhbGxlZCBiZWZvcmUgdGhlIGZsb3cgaGFuZGxlciAoY3VycmVudGx5IHVzZWQgYnkgc3BhcmMpCiAgKiBAYWN0aW9uOgkJdGhlIGlycSBhY3Rpb24gY2hhaW4KICAqIEBzdGF0dXM6CQlzdGF0dXMgaW5mb3JtYXRpb24KICAqIEBjb3JlX2ludGVybmFsX3N0YXRlX19kb19ub3RfbWVzc193aXRoX2l0OiBjb3JlIGludGVybmFsIHN0YXR1cyBpbmZvcm1hdGlvbgogICogQGRlcHRoOgkJZGlzYWJsZS1kZXB0aCwgZm9yIG5lc3RlZCBpcnFfZGlzYWJsZSgpIGNhbGxzCi0gKiBAd2FrZV9kZXB0aDoJCWVuYWJsZSBkZXB0aCwgZm9yIG11bHRpcGxlIHNldF9pcnFfd2FrZSgpIGNhbGxlcnMKKyAqIEB3YWtlX2RlcHRoOgkJZW5hYmxlIGRlcHRoLCBmb3IgbXVsdGlwbGUgaXJxX3NldF9pcnFfd2FrZSgpIGNhbGxlcnMKICAqIEBpcnFfY291bnQ6CQlzdGF0cyBmaWVsZCB0byBkZXRlY3Qgc3RhbGxlZCBpcnFzCiAgKiBAbGFzdF91bmhhbmRsZWQ6CWFnaW5nIHRpbWVyIGZvciB1bmhhbmRsZWQgY291bnQKICAqIEBpcnFzX3VuaGFuZGxlZDoJc3RhdHMgZmllbGQgZm9yIHNwdXJpb3VzIHVuaGFuZGxlZCBpbnRlcnJ1cHRzCiAgKiBAbG9jazoJCWxvY2tpbmcgZm9yIFNNUAorICogQGFmZmluaXR5X2hpbnQ6CWhpbnQgdG8gdXNlciBzcGFjZSBmb3IgcHJlZmVycmVkIGlycSBhZmZpbml0eQogICogQGFmZmluaXR5X25vdGlmeToJY29udGV4dCBmb3Igbm90aWZpY2F0aW9uIG9mIGFmZmluaXR5IGNoYW5nZXMKICAqIEBwZW5kaW5nX21hc2s6CXBlbmRpbmcgcmViYWxhbmNlZCBpbnRlcnJ1cHRzCiAgKiBAdGhyZWFkc19vbmVzaG90OgliaXRmaWVsZCB0byBoYW5kbGUgc2hhcmVkIG9uZXNob3QgdGhyZWFkcwpAQCAtMTA5LDEwICsxMTEsNyBAQAogCWRlc2MtPmhhbmRsZV9pcnEoaXJxLCBkZXNjKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGdlbmVyaWNfaGFuZGxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWdlbmVyaWNfaGFuZGxlX2lycV9kZXNjKGlycSwgaXJxX3RvX2Rlc2MoaXJxKSk7Ci19CitpbnQgZ2VuZXJpY19oYW5kbGVfaXJxKHVuc2lnbmVkIGludCBpcnEpOwogCiAvKiBUZXN0IHRvIHNlZSBpZiBhIGRyaXZlciBoYXMgc3VjY2Vzc2Z1bGx5IHJlcXVlc3RlZCBhbiBpcnEgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGlycV9oYXNfYWN0aW9uKHVuc2lnbmVkIGludCBpcnEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2p1bXBfbGFiZWwuaCBiL2luY2x1ZGUvbGludXgvanVtcF9sYWJlbC5oCmluZGV4IDc4ODBmMTguLjgzZTc0NWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvanVtcF9sYWJlbC5oCisrKyBiL2luY2x1ZGUvbGludXgvanVtcF9sYWJlbC5oCkBAIC0xLDIwICsxLDQzIEBACiAjaWZuZGVmIF9MSU5VWF9KVU1QX0xBQkVMX0gKICNkZWZpbmUgX0xJTlVYX0pVTVBfTEFCRUxfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCiAjaWYgZGVmaW5lZChDQ19IQVZFX0FTTV9HT1RPKSAmJiBkZWZpbmVkKENPTkZJR19KVU1QX0xBQkVMKQorCitzdHJ1Y3QganVtcF9sYWJlbF9rZXkgeworCWF0b21pY190IGVuYWJsZWQ7CisJc3RydWN0IGp1bXBfZW50cnkgKmVudHJpZXM7CisjaWZkZWYgQ09ORklHX01PRFVMRVMKKwlzdHJ1Y3QganVtcF9sYWJlbF9tb2QgKm5leHQ7CisjZW5kaWYKK307CisKICMgaW5jbHVkZSA8YXNtL2p1bXBfbGFiZWwuaD4KICMgZGVmaW5lIEhBVkVfSlVNUF9MQUJFTAogI2VuZGlmCiAKIGVudW0ganVtcF9sYWJlbF90eXBlIHsKKwlKVU1QX0xBQkVMX0RJU0FCTEUgPSAwLAogCUpVTVBfTEFCRUxfRU5BQkxFLAotCUpVTVBfTEFCRUxfRElTQUJMRQogfTsKIAogc3RydWN0IG1vZHVsZTsKIAogI2lmZGVmIEhBVkVfSlVNUF9MQUJFTAogCisjaWZkZWYgQ09ORklHX01PRFVMRVMKKyNkZWZpbmUgSlVNUF9MQUJFTF9JTklUIHt7IDAgfSwgTlVMTCwgTlVMTH0KKyNlbHNlCisjZGVmaW5lIEpVTVBfTEFCRUxfSU5JVCB7eyAwIH0sIE5VTEx9CisjZW5kaWYKKworc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHN0YXRpY19icmFuY2goc3RydWN0IGp1bXBfbGFiZWxfa2V5ICprZXkpCit7CisJcmV0dXJuIGFyY2hfc3RhdGljX2JyYW5jaChrZXkpOworfQorCiBleHRlcm4gc3RydWN0IGp1bXBfZW50cnkgX19zdGFydF9fX2p1bXBfdGFibGVbXTsKIGV4dGVybiBzdHJ1Y3QganVtcF9lbnRyeSBfX3N0b3BfX19qdW1wX3RhYmxlW107CiAKQEAgLTIzLDM3ICs0NiwzNyBAQAogZXh0ZXJuIHZvaWQgYXJjaF9qdW1wX2xhYmVsX3RyYW5zZm9ybShzdHJ1Y3QganVtcF9lbnRyeSAqZW50cnksCiAJCQkJIGVudW0ganVtcF9sYWJlbF90eXBlIHR5cGUpOwogZXh0ZXJuIHZvaWQgYXJjaF9qdW1wX2xhYmVsX3RleHRfcG9rZV9lYXJseShqdW1wX2xhYmVsX3QgYWRkcik7Ci1leHRlcm4gdm9pZCBqdW1wX2xhYmVsX3VwZGF0ZSh1bnNpZ25lZCBsb25nIGtleSwgZW51bSBqdW1wX2xhYmVsX3R5cGUgdHlwZSk7Ci1leHRlcm4gdm9pZCBqdW1wX2xhYmVsX2FwcGx5X25vcHMoc3RydWN0IG1vZHVsZSAqbW9kKTsKIGV4dGVybiBpbnQganVtcF9sYWJlbF90ZXh0X3Jlc2VydmVkKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpOwotCi0jZGVmaW5lIGp1bXBfbGFiZWxfZW5hYmxlKGtleSkgXAotCWp1bXBfbGFiZWxfdXBkYXRlKCh1bnNpZ25lZCBsb25nKWtleSwgSlVNUF9MQUJFTF9FTkFCTEUpOwotCi0jZGVmaW5lIGp1bXBfbGFiZWxfZGlzYWJsZShrZXkpIFwKLQlqdW1wX2xhYmVsX3VwZGF0ZSgodW5zaWduZWQgbG9uZylrZXksIEpVTVBfTEFCRUxfRElTQUJMRSk7CitleHRlcm4gdm9pZCBqdW1wX2xhYmVsX2luYyhzdHJ1Y3QganVtcF9sYWJlbF9rZXkgKmtleSk7CitleHRlcm4gdm9pZCBqdW1wX2xhYmVsX2RlYyhzdHJ1Y3QganVtcF9sYWJlbF9rZXkgKmtleSk7CitleHRlcm4gYm9vbCBqdW1wX2xhYmVsX2VuYWJsZWQoc3RydWN0IGp1bXBfbGFiZWxfa2V5ICprZXkpOworZXh0ZXJuIHZvaWQganVtcF9sYWJlbF9hcHBseV9ub3BzKHN0cnVjdCBtb2R1bGUgKm1vZCk7CiAKICNlbHNlCiAKLSNkZWZpbmUgSlVNUF9MQUJFTChrZXksIGxhYmVsKQkJCVwKLWRvIHsJCQkJCQlcCi0JaWYgKHVubGlrZWx5KCprZXkpKQkJCVwKLQkJZ290byBsYWJlbDsJCQlcCi19IHdoaWxlICgwKQorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAotI2RlZmluZSBqdW1wX2xhYmVsX2VuYWJsZShjb25kX3ZhcikJXAotZG8gewkJCQkJXAotICAgICAgICooY29uZF92YXIpID0gMTsJCQlcCi19IHdoaWxlICgwKQorI2RlZmluZSBKVU1QX0xBQkVMX0lOSVQge0FUT01JQ19JTklUKDApfQogCi0jZGVmaW5lIGp1bXBfbGFiZWxfZGlzYWJsZShjb25kX3ZhcikJXAotZG8gewkJCQkJXAotICAgICAgICooY29uZF92YXIpID0gMDsJCQlcCi19IHdoaWxlICgwKQorc3RydWN0IGp1bXBfbGFiZWxfa2V5IHsKKwlhdG9taWNfdCBlbmFibGVkOworfTsKIAotc3RhdGljIGlubGluZSBpbnQganVtcF9sYWJlbF9hcHBseV9ub3BzKHN0cnVjdCBtb2R1bGUgKm1vZCkKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBzdGF0aWNfYnJhbmNoKHN0cnVjdCBqdW1wX2xhYmVsX2tleSAqa2V5KQogewotCXJldHVybiAwOworCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgma2V5LT5lbmFibGVkKSkpCisJCXJldHVybiB0cnVlOworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGp1bXBfbGFiZWxfaW5jKHN0cnVjdCBqdW1wX2xhYmVsX2tleSAqa2V5KQoreworCWF0b21pY19pbmMoJmtleS0+ZW5hYmxlZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBqdW1wX2xhYmVsX2RlYyhzdHJ1Y3QganVtcF9sYWJlbF9rZXkgKmtleSkKK3sKKwlhdG9taWNfZGVjKCZrZXktPmVuYWJsZWQpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBqdW1wX2xhYmVsX3RleHRfcmVzZXJ2ZWQodm9pZCAqc3RhcnQsIHZvaWQgKmVuZCkKQEAgLTY0LDE2ICs4NywxNiBAQAogc3RhdGljIGlubGluZSB2b2lkIGp1bXBfbGFiZWxfbG9jayh2b2lkKSB7fQogc3RhdGljIGlubGluZSB2b2lkIGp1bXBfbGFiZWxfdW5sb2NrKHZvaWQpIHt9CiAKLSNlbmRpZgorc3RhdGljIGlubGluZSBib29sIGp1bXBfbGFiZWxfZW5hYmxlZChzdHJ1Y3QganVtcF9sYWJlbF9rZXkgKmtleSkKK3sKKwlyZXR1cm4gISFhdG9taWNfcmVhZCgma2V5LT5lbmFibGVkKTsKK30KIAotI2RlZmluZSBDT05EX1NUTVQoa2V5LCBzdG10KQkJCQkJXAotZG8gewkJCQkJCQkJXAotCV9fbGFiZWxfXyBqbF9lbmFibGVkOwkJCQkJXAotCUpVTVBfTEFCRUwoa2V5LCBqbF9lbmFibGVkKTsJCQkJXAotCWlmICgwKSB7CQkJCQkJXAotamxfZW5hYmxlZDoJCQkJCQkJXAotCQlzdG10OwkJCQkJCVwKLQl9CQkJCQkJCVwKLX0gd2hpbGUgKDApCitzdGF0aWMgaW5saW5lIGludCBqdW1wX2xhYmVsX2FwcGx5X25vcHMoc3RydWN0IG1vZHVsZSAqbW9kKQoreworCXJldHVybiAwOworfQorCisjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2p1bXBfbGFiZWxfcmVmLmggYi9pbmNsdWRlL2xpbnV4L2p1bXBfbGFiZWxfcmVmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1ZDAxMmEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9qdW1wX2xhYmVsX3JlZi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotI2lmbmRlZiBfTElOVVhfSlVNUF9MQUJFTF9SRUZfSAotI2RlZmluZSBfTElOVVhfSlVNUF9MQUJFTF9SRUZfSAotCi0jaW5jbHVkZSA8bGludXgvanVtcF9sYWJlbC5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLQotI2lmZGVmIEhBVkVfSlVNUF9MQUJFTAotCi1zdGF0aWMgaW5saW5lIHZvaWQganVtcF9sYWJlbF9pbmMoYXRvbWljX3QgKmtleSkKLXsKLQlpZiAoYXRvbWljX2FkZF9yZXR1cm4oMSwga2V5KSA9PSAxKQotCQlqdW1wX2xhYmVsX2VuYWJsZShrZXkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQganVtcF9sYWJlbF9kZWMoYXRvbWljX3QgKmtleSkKLXsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdChrZXkpKQotCQlqdW1wX2xhYmVsX2Rpc2FibGUoa2V5KTsKLX0KLQotI2Vsc2UgLyogIUhBVkVfSlVNUF9MQUJFTCAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQganVtcF9sYWJlbF9pbmMoYXRvbWljX3QgKmtleSkKLXsKLQlhdG9taWNfaW5jKGtleSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBqdW1wX2xhYmVsX2RlYyhhdG9taWNfdCAqa2V5KQotewotCWF0b21pY19kZWMoa2V5KTsKLX0KLQotI3VuZGVmIEpVTVBfTEFCRUwKLSNkZWZpbmUgSlVNUF9MQUJFTChrZXksIGxhYmVsKQkJCQkJCVwKLWRvIHsJCQkJCQkJCQlcCi0JaWYgKHVubGlrZWx5KF9fYnVpbHRpbl9jaG9vc2VfZXhwcigJCQkJXAotCSAgICAgIF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AodHlwZW9mKGtleSksIGF0b21pY190ICopLAlcCi0JICAgICAgYXRvbWljX3JlYWQoKGF0b21pY190ICopKGtleSkpLCAqKGtleSkpKSkJCQlcCi0JCWdvdG8gbGFiZWw7CQkJCQkJXAotfSB3aGlsZSAoMCkKLQotI2VuZGlmIC8qIEhBVkVfSlVNUF9MQUJFTCAqLwotCi0jZW5kaWYgLyogX0xJTlVYX0pVTVBfTEFCRUxfUkVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IDAwY2VjNGQuLmYzN2JhNzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtMjgzLDYgKzI4Myw3IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIG1lbXBhcnNlKGNvbnN0IGNoYXIgKnB0ciwgY2hhciAqKnJldHB0cik7CiAKIGV4dGVybiBpbnQgY29yZV9rZXJuZWxfdGV4dCh1bnNpZ25lZCBsb25nIGFkZHIpOworZXh0ZXJuIGludCBjb3JlX2tlcm5lbF9kYXRhKHVuc2lnbmVkIGxvbmcgYWRkcik7CiBleHRlcm4gaW50IF9fa2VybmVsX3RleHRfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpOwogZXh0ZXJuIGludCBrZXJuZWxfdGV4dF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcik7CiBleHRlcm4gaW50IGZ1bmNfcHRyX2lzX2tlcm5lbF90ZXh0KHZvaWQgKnB0cik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ttb2QuaCBiL2luY2x1ZGUvbGludXgva21vZC5oCmluZGV4IDZlZmQ3YTcuLjMxMDIzMTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva21vZC5oCisrKyBiL2luY2x1ZGUvbGludXgva21vZC5oCkBAIC0xMTMsNSArMTEzLDYgQEAKIAogZXh0ZXJuIGludCB1c2VybW9kZWhlbHBlcl9kaXNhYmxlKHZvaWQpOwogZXh0ZXJuIHZvaWQgdXNlcm1vZGVoZWxwZXJfZW5hYmxlKHZvaWQpOworZXh0ZXJuIGJvb2wgdXNlcm1vZGVoZWxwZXJfaXNfZGlzYWJsZWQodm9pZCk7CiAKICNlbmRpZiAvKiBfX0xJTlVYX0tNT0RfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaAppbmRleCA3ZjY3NWFhLi41YTk5MjZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCisrKyBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKQEAgLTEzNyw4ICsxMzcsNiBAQAogCUFUQV9ERkxBR19BQ1BJX1BFTkRJTkcJPSAoMSA8PCA1KSwgLyogQUNQSSByZXN1bWUgYWN0aW9uIHBlbmRpbmcgKi8KIAlBVEFfREZMQUdfQUNQSV9GQUlMRUQJPSAoMSA8PCA2KSwgLyogQUNQSSBvbiBkZXZjZmcgaGFzIGZhaWxlZCAqLwogCUFUQV9ERkxBR19BTgkJPSAoMSA8PCA3KSwgLyogQU4gY29uZmlndXJlZCAqLwotCUFUQV9ERkxBR19ISVBNCQk9ICgxIDw8IDgpLCAvKiBkZXZpY2Ugc3VwcG9ydHMgSElQTSAqLwotCUFUQV9ERkxBR19ESVBNCQk9ICgxIDw8IDkpLCAvKiBkZXZpY2Ugc3VwcG9ydHMgRElQTSAqLwogCUFUQV9ERkxBR19ETUFESVIJPSAoMSA8PCAxMCksIC8qIGRldmljZSByZXF1aXJlcyBETUFESVIgKi8KIAlBVEFfREZMQUdfQ0ZHX01BU0sJPSAoMSA8PCAxMikgLSAxLAogCkBAIC0xOTgsNiArMTk2LDcgQEAKIAkJCQkJICAgICAgKiBtYW5hZ2VtZW50ICovCiAJQVRBX0ZMQUdfU1dfQUNUSVZJVFkJPSAoMSA8PCAyMiksIC8qIGRyaXZlciBzdXBwb3J0cyBzdyBhY3Rpdml0eQogCQkJCQkgICAgICAqIGxlZCAqLworCUFUQV9GTEFHX05PX0RJUE0JPSAoMSA8PCAyMyksIC8qIGhvc3Qgbm90IGhhcHB5IHdpdGggRElQTSAqLwogCiAJLyogYml0cyAyNDozMSBvZiBhcC0+ZmxhZ3MgYXJlIHJlc2VydmVkIGZvciBMTEQgc3BlY2lmaWMgZmxhZ3MgKi8KIApAQCAtMTE1Miw2ICsxMTUxLDcgQEAKIAkJICAgICAgYXRhX3Jlc2V0X2ZuX3Qgc29mdHJlc2V0LCBhdGFfcmVzZXRfZm5fdCBoYXJkcmVzZXQsCiAJCSAgICAgIGF0YV9wb3N0cmVzZXRfZm5fdCBwb3N0cmVzZXQpOwogZXh0ZXJuIHZvaWQgYXRhX3N0ZF9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApOworZXh0ZXJuIGludCBhdGFfbGlua19ucl9lbmFibGVkKHN0cnVjdCBhdGFfbGluayAqbGluayk7CiAKIC8qCiAgKiBCYXNlIG9wZXJhdGlvbnMgdG8gaW5oZXJpdCBmcm9tIGFuZCBpbml0aWFsaXplcnMgZm9yIHNodApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saXN0LmggYi9pbmNsdWRlL2xpbnV4L2xpc3QuaAppbmRleCAzYTU0MjY2Li5jYzZkMmFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xpc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xpc3QuaApAQCAtNCw3ICs0LDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3BvaXNvbi5oPgotI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CisjaW5jbHVkZSA8bGludXgvY29uc3QuaD4KIAogLyoKICAqIFNpbXBsZSBkb3VibHkgbGlua2VkIGxpc3QgaW1wbGVtZW50YXRpb24uCkBAIC0zNjcsMTggKzM2NywxNSBAQAogICogQGhlYWQ6CXRoZSBoZWFkIGZvciB5b3VyIGxpc3QuCiAgKi8KICNkZWZpbmUgbGlzdF9mb3JfZWFjaChwb3MsIGhlYWQpIFwKLQlmb3IgKHBvcyA9IChoZWFkKS0+bmV4dDsgcHJlZmV0Y2gocG9zLT5uZXh0KSwgcG9zICE9IChoZWFkKTsgXAotICAgICAgICAJcG9zID0gcG9zLT5uZXh0KQorCWZvciAocG9zID0gKGhlYWQpLT5uZXh0OyBwb3MgIT0gKGhlYWQpOyBwb3MgPSBwb3MtPm5leHQpCiAKIC8qKgogICogX19saXN0X2Zvcl9lYWNoCS0JaXRlcmF0ZSBvdmVyIGEgbGlzdAogICogQHBvczoJdGhlICZzdHJ1Y3QgbGlzdF9oZWFkIHRvIHVzZSBhcyBhIGxvb3AgY3Vyc29yLgogICogQGhlYWQ6CXRoZSBoZWFkIGZvciB5b3VyIGxpc3QuCiAgKgotICogVGhpcyB2YXJpYW50IGRpZmZlcnMgZnJvbSBsaXN0X2Zvcl9lYWNoKCkgaW4gdGhhdCBpdCdzIHRoZQotICogc2ltcGxlc3QgcG9zc2libGUgbGlzdCBpdGVyYXRpb24gY29kZSwgbm8gcHJlZmV0Y2hpbmcgaXMgZG9uZS4KLSAqIFVzZSB0aGlzIGZvciBjb2RlIHRoYXQga25vd3MgdGhlIGxpc3QgdG8gYmUgdmVyeSBzaG9ydCAoZW1wdHkKLSAqIG9yIDEgZW50cnkpIG1vc3Qgb2YgdGhlIHRpbWUuCisgKiBUaGlzIHZhcmlhbnQgZG9lc24ndCBkaWZmZXIgZnJvbSBsaXN0X2Zvcl9lYWNoKCkgYW55IG1vcmUuCisgKiBXZSBkb24ndCBkbyBwcmVmZXRjaGluZyBpbiBlaXRoZXIgY2FzZS4KICAqLwogI2RlZmluZSBfX2xpc3RfZm9yX2VhY2gocG9zLCBoZWFkKSBcCiAJZm9yIChwb3MgPSAoaGVhZCktPm5leHQ7IHBvcyAhPSAoaGVhZCk7IHBvcyA9IHBvcy0+bmV4dCkKQEAgLTM4OSw4ICszODYsNyBAQAogICogQGhlYWQ6CXRoZSBoZWFkIGZvciB5b3VyIGxpc3QuCiAgKi8KICNkZWZpbmUgbGlzdF9mb3JfZWFjaF9wcmV2KHBvcywgaGVhZCkgXAotCWZvciAocG9zID0gKGhlYWQpLT5wcmV2OyBwcmVmZXRjaChwb3MtPnByZXYpLCBwb3MgIT0gKGhlYWQpOyBcCi0gICAgICAgIAlwb3MgPSBwb3MtPnByZXYpCisJZm9yIChwb3MgPSAoaGVhZCktPnByZXY7IHBvcyAhPSAoaGVhZCk7IHBvcyA9IHBvcy0+cHJldikKIAogLyoqCiAgKiBsaXN0X2Zvcl9lYWNoX3NhZmUgLSBpdGVyYXRlIG92ZXIgYSBsaXN0IHNhZmUgYWdhaW5zdCByZW1vdmFsIG9mIGxpc3QgZW50cnkKQEAgLTQxMCw3ICs0MDYsNyBAQAogICovCiAjZGVmaW5lIGxpc3RfZm9yX2VhY2hfcHJldl9zYWZlKHBvcywgbiwgaGVhZCkgXAogCWZvciAocG9zID0gKGhlYWQpLT5wcmV2LCBuID0gcG9zLT5wcmV2OyBcCi0JICAgICBwcmVmZXRjaChwb3MtPnByZXYpLCBwb3MgIT0gKGhlYWQpOyBcCisJICAgICBwb3MgIT0gKGhlYWQpOyBcCiAJICAgICBwb3MgPSBuLCBuID0gcG9zLT5wcmV2KQogCiAvKioKQEAgLTQyMSw3ICs0MTcsNyBAQAogICovCiAjZGVmaW5lIGxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBoZWFkLCBtZW1iZXIpCQkJCVwKIAlmb3IgKHBvcyA9IGxpc3RfZW50cnkoKGhlYWQpLT5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlcik7CVwKLQkgICAgIHByZWZldGNoKHBvcy0+bWVtYmVyLm5leHQpLCAmcG9zLT5tZW1iZXIgIT0gKGhlYWQpOyAJXAorCSAgICAgJnBvcy0+bWVtYmVyICE9IChoZWFkKTsgCVwKIAkgICAgIHBvcyA9IGxpc3RfZW50cnkocG9zLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpKQogCiAvKioKQEAgLTQzMiw3ICs0MjgsNyBAQAogICovCiAjZGVmaW5lIGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShwb3MsIGhlYWQsIG1lbWJlcikJCQlcCiAJZm9yIChwb3MgPSBsaXN0X2VudHJ5KChoZWFkKS0+cHJldiwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpOwlcCi0JICAgICBwcmVmZXRjaChwb3MtPm1lbWJlci5wcmV2KSwgJnBvcy0+bWVtYmVyICE9IChoZWFkKTsgCVwKKwkgICAgICZwb3MtPm1lbWJlciAhPSAoaGVhZCk7IAlcCiAJICAgICBwb3MgPSBsaXN0X2VudHJ5KHBvcy0+bWVtYmVyLnByZXYsIHR5cGVvZigqcG9zKSwgbWVtYmVyKSkKIAogLyoqCkBAIC00NTcsNyArNDUzLDcgQEAKICAqLwogI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKHBvcywgaGVhZCwgbWVtYmVyKSAJCVwKIAlmb3IgKHBvcyA9IGxpc3RfZW50cnkocG9zLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpOwlcCi0JICAgICBwcmVmZXRjaChwb3MtPm1lbWJlci5uZXh0KSwgJnBvcy0+bWVtYmVyICE9IChoZWFkKTsJXAorCSAgICAgJnBvcy0+bWVtYmVyICE9IChoZWFkKTsJXAogCSAgICAgcG9zID0gbGlzdF9lbnRyeShwb3MtPm1lbWJlci5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlcikpCiAKIC8qKgpAQCAtNDcxLDcgKzQ2Nyw3IEBACiAgKi8KICNkZWZpbmUgbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKHBvcywgaGVhZCwgbWVtYmVyKQkJXAogCWZvciAocG9zID0gbGlzdF9lbnRyeShwb3MtPm1lbWJlci5wcmV2LCB0eXBlb2YoKnBvcyksIG1lbWJlcik7CVwKLQkgICAgIHByZWZldGNoKHBvcy0+bWVtYmVyLnByZXYpLCAmcG9zLT5tZW1iZXIgIT0gKGhlYWQpOwlcCisJICAgICAmcG9zLT5tZW1iZXIgIT0gKGhlYWQpOwlcCiAJICAgICBwb3MgPSBsaXN0X2VudHJ5KHBvcy0+bWVtYmVyLnByZXYsIHR5cGVvZigqcG9zKSwgbWVtYmVyKSkKIAogLyoqCkBAIC00ODMsNyArNDc5LDcgQEAKICAqIEl0ZXJhdGUgb3ZlciBsaXN0IG9mIGdpdmVuIHR5cGUsIGNvbnRpbnVpbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uLgogICovCiAjZGVmaW5lIGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbShwb3MsIGhlYWQsIG1lbWJlcikgCQkJXAotCWZvciAoOyBwcmVmZXRjaChwb3MtPm1lbWJlci5uZXh0KSwgJnBvcy0+bWVtYmVyICE9IChoZWFkKTsJXAorCWZvciAoOyAmcG9zLT5tZW1iZXIgIT0gKGhlYWQpOwlcCiAJICAgICBwb3MgPSBsaXN0X2VudHJ5KHBvcy0+bWVtYmVyLm5leHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKSkKIAogLyoqCkBAIC02NjQsOCArNjYwLDcgQEAKICNkZWZpbmUgaGxpc3RfZW50cnkocHRyLCB0eXBlLCBtZW1iZXIpIGNvbnRhaW5lcl9vZihwdHIsdHlwZSxtZW1iZXIpCiAKICNkZWZpbmUgaGxpc3RfZm9yX2VhY2gocG9zLCBoZWFkKSBcCi0JZm9yIChwb3MgPSAoaGVhZCktPmZpcnN0OyBwb3MgJiYgKHsgcHJlZmV0Y2gocG9zLT5uZXh0KTsgMTsgfSk7IFwKLQkgICAgIHBvcyA9IHBvcy0+bmV4dCkKKwlmb3IgKHBvcyA9IChoZWFkKS0+Zmlyc3Q7IHBvcyA7IHBvcyA9IHBvcy0+bmV4dCkKIAogI2RlZmluZSBobGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbiwgaGVhZCkgXAogCWZvciAocG9zID0gKGhlYWQpLT5maXJzdDsgcG9zICYmICh7IG4gPSBwb3MtPm5leHQ7IDE7IH0pOyBcCkBAIC02ODAsNyArNjc1LDcgQEAKICAqLwogI2RlZmluZSBobGlzdF9mb3JfZWFjaF9lbnRyeSh0cG9zLCBwb3MsIGhlYWQsIG1lbWJlcikJCQkgXAogCWZvciAocG9zID0gKGhlYWQpLT5maXJzdDsJCQkJCSBcCi0JICAgICBwb3MgJiYgKHsgcHJlZmV0Y2gocG9zLT5uZXh0KTsgMTt9KSAmJgkJCSBcCisJICAgICBwb3MgJiYJCQkJCQkJIFwKIAkJKHsgdHBvcyA9IGhsaXN0X2VudHJ5KHBvcywgdHlwZW9mKCp0cG9zKSwgbWVtYmVyKTsgMTt9KTsgXAogCSAgICAgcG9zID0gcG9zLT5uZXh0KQogCkBAIC02OTIsNyArNjg3LDcgQEAKICAqLwogI2RlZmluZSBobGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZSh0cG9zLCBwb3MsIG1lbWJlcikJCSBcCiAJZm9yIChwb3MgPSAocG9zKS0+bmV4dDsJCQkJCQkgXAotCSAgICAgcG9zICYmICh7IHByZWZldGNoKHBvcy0+bmV4dCk7IDE7fSkgJiYJCQkgXAorCSAgICAgcG9zICYmCQkJCQkJCSBcCiAJCSh7IHRwb3MgPSBobGlzdF9lbnRyeShwb3MsIHR5cGVvZigqdHBvcyksIG1lbWJlcik7IDE7fSk7IFwKIAkgICAgIHBvcyA9IHBvcy0+bmV4dCkKIApAQCAtNzAzLDcgKzY5OCw3IEBACiAgKiBAbWVtYmVyOgl0aGUgbmFtZSBvZiB0aGUgaGxpc3Rfbm9kZSB3aXRoaW4gdGhlIHN0cnVjdC4KICAqLwogI2RlZmluZSBobGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tKHRwb3MsIHBvcywgbWVtYmVyKQkJCSBcCi0JZm9yICg7IHBvcyAmJiAoeyBwcmVmZXRjaChwb3MtPm5leHQpOyAxO30pICYmCQkJIFwKKwlmb3IgKDsgcG9zICYmCQkJCQkJCSBcCiAJCSh7IHRwb3MgPSBobGlzdF9lbnRyeShwb3MsIHR5cGVvZigqdHBvcyksIG1lbWJlcik7IDE7fSk7IFwKIAkgICAgIHBvcyA9IHBvcy0+bmV4dCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saXN0X2JsLmggYi9pbmNsdWRlL2xpbnV4L2xpc3RfYmwuaAppbmRleCA1YmFkMTdkLi4zMWY5ZDc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xpc3RfYmwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xpc3RfYmwuaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX0xJTlVYX0xJU1RfQkxfSAogCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdF9zcGlubG9jay5oPgogCiAvKgogICogU3BlY2lhbCB2ZXJzaW9uIG9mIGxpc3RzLCB3aGVyZSBoZWFkIG9mIHRoZSBsaXN0IGhhcyBhIGxvY2sgaW4gdGhlIGxvd2VzdApAQCAtMTE0LDYgKzExNSwxNiBAQAogCX0KIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGhsaXN0X2JsX2xvY2soc3RydWN0IGhsaXN0X2JsX2hlYWQgKmIpCit7CisJYml0X3NwaW5fbG9jaygwLCAodW5zaWduZWQgbG9uZyAqKWIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaGxpc3RfYmxfdW5sb2NrKHN0cnVjdCBobGlzdF9ibF9oZWFkICpiKQoreworCV9fYml0X3NwaW5fdW5sb2NrKDAsICh1bnNpZ25lZCBsb25nICopYik7Cit9CisKIC8qKgogICogaGxpc3RfYmxfZm9yX2VhY2hfZW50cnkJLSBpdGVyYXRlIG92ZXIgbGlzdCBvZiBnaXZlbiB0eXBlCiAgKiBAdHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODMxeC9wZGF0YS5oIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L3BkYXRhLmgKaW5kZXggYWZlNGRiNC4uNjMyZDE1NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L3BkYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L3BkYXRhLmgKQEAgLTgxLDcgKzgxLDkgQEAKIAlpbnQgcnB1OyAgICAgICAgICAgICAgIC8qKiBQZW4gZG93biBzZW5zaXRpdml0eSByZXNpc3RvciBkaXZpZGVyICovCiAJaW50IHByZXNzdXJlOyAgICAgICAgICAvKiogUmVwb3J0IHByZXNzdXJlIChib29sZWFuKSAqLwogCXVuc2lnbmVkIGludCBkYXRhX2lycTsgLyoqIFRvdWNoIGRhdGEgcmVhZHkgSVJRICovCisJaW50IGRhdGFfaXJxZjsgICAgICAgICAvKiogSVJRIGZsYWdzIGZvciBkYXRhIHJlYWR5IElSUSAqLwogCXVuc2lnbmVkIGludCBwZF9pcnE7ICAgLyoqIFRvdWNoIHBlbmRvd24gZGV0ZWN0IElSUSAqLworCWludCBwZF9pcnFmOyAgICAgICAgICAgLyoqIElSUSBmbGFncyBmb3IgcGVuIGRvd24gSVJRICovCiB9OwogCiBlbnVtIHdtODMxeF93YXRjaGRvZ19hY3Rpb24gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IDY5MmRiYWUuLjY1MDdkZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTEzNyw3ICsxMzcsOCBAQAogI2RlZmluZSBWTV9SYW5kb21SZWFkSGludCh2KQkJKCh2KS0+dm1fZmxhZ3MgJiBWTV9SQU5EX1JFQUQpCiAKIC8qCi0gKiBzcGVjaWFsIHZtYXMgdGhhdCBhcmUgbm9uLW1lcmdhYmxlLCBub24tbWxvY2soKWFibGUKKyAqIFNwZWNpYWwgdm1hcyB0aGF0IGFyZSBub24tbWVyZ2FibGUsIG5vbi1tbG9jaygpYWJsZS4KKyAqIE5vdGU6IG1tL2h1Z2VfbWVtb3J5LmMgVk1fTk9fVEhQIGRlcGVuZHMgb24gdGhpcyBkZWZpbml0aW9uLgogICovCiAjZGVmaW5lIFZNX1NQRUNJQUwgKFZNX0lPIHwgVk1fRE9OVEVYUEFORCB8IFZNX1JFU0VSVkVEIHwgVk1fUEZOTUFQKQogCkBAIC0xMDEwLDExICsxMDExLDMzIEBACiBpbnQgY2xlYXJfcGFnZV9kaXJ0eV9mb3JfaW8oc3RydWN0IHBhZ2UgKnBhZ2UpOwogCiAvKiBJcyB0aGUgdm1hIGEgY29udGludWF0aW9uIG9mIHRoZSBzdGFjayB2bWEgYWJvdmUgaXQ/ICovCi1zdGF0aWMgaW5saW5lIGludCB2bWFfc3RhY2tfY29udGludWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3N0YXRpYyBpbmxpbmUgaW50IHZtYV9ncm93c2Rvd24oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlyZXR1cm4gdm1hICYmICh2bWEtPnZtX2VuZCA9PSBhZGRyKSAmJiAodm1hLT52bV9mbGFncyAmIFZNX0dST1dTRE9XTik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHN0YWNrX2d1YXJkX3BhZ2Vfc3RhcnQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiAodm1hLT52bV9mbGFncyAmIFZNX0dST1dTRE9XTikgJiYKKwkJKHZtYS0+dm1fc3RhcnQgPT0gYWRkcikgJiYKKwkJIXZtYV9ncm93c2Rvd24odm1hLT52bV9wcmV2LCBhZGRyKTsKK30KKworLyogSXMgdGhlIHZtYSBhIGNvbnRpbnVhdGlvbiBvZiB0aGUgc3RhY2sgdm1hIGJlbG93IGl0PyAqLworc3RhdGljIGlubGluZSBpbnQgdm1hX2dyb3dzdXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gdm1hICYmICh2bWEtPnZtX3N0YXJ0ID09IGFkZHIpICYmICh2bWEtPnZtX2ZsYWdzICYgVk1fR1JPV1NVUCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN0YWNrX2d1YXJkX3BhZ2VfZW5kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuICh2bWEtPnZtX2ZsYWdzICYgVk1fR1JPV1NVUCkgJiYKKwkJKHZtYS0+dm1fZW5kID09IGFkZHIpICYmCisJCSF2bWFfZ3Jvd3N1cCh2bWEtPnZtX25leHQsIGFkZHIpOworfQorCiBleHRlcm4gdW5zaWduZWQgbG9uZyBtb3ZlX3BhZ2VfdGFibGVzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQl1bnNpZ25lZCBsb25nIG9sZF9hZGRyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5ld192bWEsCiAJCXVuc2lnbmVkIGxvbmcgbmV3X2FkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmggYi9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oCmluZGV4IDQ4YzAwN2QuLmFlMjhlOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tb2RfZGV2aWNldGFibGUuaApAQCAtMzgyLDYgKzM4MiwyMyBAQAogI2RlZmluZSBTU0JfQU5ZX0lECQkweEZGRkYKICNkZWZpbmUgU1NCX0FOWV9SRVYJCTB4RkYKIAorLyogQnJvYWRjb20ncyBzcGVjaWZpYyBBTUJBIGNvcmUsIHNlZSBkcml2ZXJzL2JjbWEvICovCitzdHJ1Y3QgYmNtYV9kZXZpY2VfaWQgeworCV9fdTE2CW1hbnVmOworCV9fdTE2CWlkOworCV9fdTgJcmV2OworCV9fdTgJY2xhc3M7Cit9OworI2RlZmluZSBCQ01BX0NPUkUoX21hbnVmLCBfaWQsIF9yZXYsIF9jbGFzcykgIFwKKwl7IC5tYW51ZiA9IF9tYW51ZiwgLmlkID0gX2lkLCAucmV2ID0gX3JldiwgLmNsYXNzID0gX2NsYXNzLCB9CisjZGVmaW5lIEJDTUFfQ09SRVRBQkxFX0VORCAgXAorCXsgMCwgfSwKKworI2RlZmluZSBCQ01BX0FOWV9NQU5VRgkJMHhGRkZGCisjZGVmaW5lIEJDTUFfQU5ZX0lECQkweEZGRkYKKyNkZWZpbmUgQkNNQV9BTllfUkVWCQkweEZGCisjZGVmaW5lIEJDTUFfQU5ZX0NMQVNTCQkweEZGCisKIHN0cnVjdCB2aXJ0aW9fZGV2aWNlX2lkIHsKIAlfX3UzMiBkZXZpY2U7CiAJX191MzIgdmVuZG9yOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaCBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKaW5kZXggNWRlNDIwNC4uZDljYTJkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCkBAIC02NCw2ICs2NCw5IEBACiAJY29uc3QgY2hhciAqdmVyc2lvbjsKIH0gX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKHNpemVvZih2b2lkICopKSkpOwogCitleHRlcm4gc3NpemVfdCBfX21vZHZlcl92ZXJzaW9uX3Nob3coc3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUgKiwKKwkJCQkgICAgIHN0cnVjdCBtb2R1bGUgKiwgY2hhciAqKTsKKwogc3RydWN0IG1vZHVsZV9rb2JqZWN0CiB7CiAJc3RydWN0IGtvYmplY3Qga29iajsKQEAgLTE3MiwxMiArMTc1LDcgQEAKICNkZWZpbmUgTU9EVUxFX1ZFUlNJT04oX3ZlcnNpb24pIE1PRFVMRV9JTkZPKHZlcnNpb24sIF92ZXJzaW9uKQogI2Vsc2UKICNkZWZpbmUgTU9EVUxFX1ZFUlNJT04oX3ZlcnNpb24pCQkJCQlcCi0JZXh0ZXJuIHNzaXplX3QgX19tb2R2ZXJfdmVyc2lvbl9zaG93KHN0cnVjdCBtb2R1bGVfYXR0cmlidXRlICosCVwKLQkJCQkJICAgICBzdHJ1Y3QgbW9kdWxlICosIGNoYXIgKik7CVwKLQlzdGF0aWMgc3RydWN0IG1vZHVsZV92ZXJzaW9uX2F0dHJpYnV0ZSBfX21vZHZlcl92ZXJzaW9uX2F0dHIJXAotCV9fdXNlZAkJCQkJCQkJXAotICAgIF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXyAoIl9fbW9kdmVyIiksYWxpZ25lZChzaXplb2Yodm9pZCAqKSkpKSBcCi0JPSB7CQkJCQkJCQlcCisJc3RhdGljIHN0cnVjdCBtb2R1bGVfdmVyc2lvbl9hdHRyaWJ1dGUgX19fbW9kdmVyX2F0dHIgPSB7CVwKIAkJLm1hdHRyCT0gewkJCQkJCVwKIAkJCS5hdHRyCT0gewkJCQkJXAogCQkJCS5uYW1lCT0gInZlcnNpb24iLAkJCVwKQEAgLTE4Nyw3ICsxODUsMTAgQEAKIAkJfSwJCQkJCQkJXAogCQkubW9kdWxlX25hbWUJPSBLQlVJTERfTU9ETkFNRSwJCQlcCiAJCS52ZXJzaW9uCT0gX3ZlcnNpb24sCQkJCVwKLQl9CisJfTsJCQkJCQkJCVwKKwlzdGF0aWMgY29uc3Qgc3RydWN0IG1vZHVsZV92ZXJzaW9uX2F0dHJpYnV0ZQkJCVwKKwlfX3VzZWQgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiX19tb2R2ZXIiKSkpCQlcCisJKiBfX21vZHVsZXBhcmFtX2NvbnN0IF9fbW9kdmVyX2F0dHIgPSAmX19fbW9kdmVyX2F0dHIKICNlbmRpZgogCiAvKiBPcHRpb25hbCBmaXJtd2FyZSBmaWxlIChvciBmaWxlcykgbmVlZGVkIGJ5IHRoZSBtb2R1bGUKQEAgLTIyMyw3ICsyMjQsNyBAQAogCWV4dGVybiB2b2lkICpfX2NyY18jI3N5bSBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7CQlcCiAJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgX19rY3JjdGFiXyMjc3ltCQlcCiAJX191c2VkCQkJCQkJCVwKLQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX2tjcmN0YWIiIHNlYyksIHVudXNlZCkpCVwKKwlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX19rY3JjdGFiIiBzZWMgIisiICNzeW0pLCB1bnVzZWQpKQlcCiAJPSAodW5zaWduZWQgbG9uZykgJl9fY3JjXyMjc3ltOwogI2Vsc2UKICNkZWZpbmUgX19DUkNfU1lNQk9MKHN5bSwgc2VjKQpAQCAtMjM4LDcgKzIzOSw3IEBACiAJPSBNT0RVTEVfU1lNQk9MX1BSRUZJWCAjc3ltOyAgICAgICAgICAgICAgICAgICAgCVwKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgX19rc3ltdGFiXyMjc3ltCVwKIAlfX3VzZWQJCQkJCQkJXAotCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fa3N5bXRhYiIgc2VjKSwgdW51c2VkKSkJXAorCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fX2tzeW10YWIiIHNlYyAiKyIgI3N5bSksIHVudXNlZCkpCVwKIAk9IHsgKHVuc2lnbmVkIGxvbmcpJnN5bSwgX19rc3RydGFiXyMjc3ltIH0KIAogI2RlZmluZSBFWFBPUlRfU1lNQk9MKHN5bSkJCQkJCVwKQEAgLTM2NywzNCArMzY4LDM1IEBACiAJc3RydWN0IG1vZHVsZV9ub3Rlc19hdHRycyAqbm90ZXNfYXR0cnM7CiAjZW5kaWYKIAorCS8qIFRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIChtYXkgYmUgbWFuZ2xlZCkuICBQZW9wbGUgbGlrZQorCSAgIGtlZXBpbmcgcG9pbnRlcnMgdG8gdGhpcyBzdHVmZiAqLworCWNoYXIgKmFyZ3M7CisKICNpZmRlZiBDT05GSUdfU01QCiAJLyogUGVyLWNwdSBkYXRhLiAqLwogCXZvaWQgX19wZXJjcHUgKnBlcmNwdTsKIAl1bnNpZ25lZCBpbnQgcGVyY3B1X3NpemU7CiAjZW5kaWYKIAotCS8qIFRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIChtYXkgYmUgbWFuZ2xlZCkuICBQZW9wbGUgbGlrZQotCSAgIGtlZXBpbmcgcG9pbnRlcnMgdG8gdGhpcyBzdHVmZiAqLwotCWNoYXIgKmFyZ3M7CiAjaWZkZWYgQ09ORklHX1RSQUNFUE9JTlRTCi0Jc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqdHJhY2Vwb2ludHNfcHRyczsKIAl1bnNpZ25lZCBpbnQgbnVtX3RyYWNlcG9pbnRzOworCXN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKnRyYWNlcG9pbnRzX3B0cnM7CiAjZW5kaWYKICNpZmRlZiBIQVZFX0pVTVBfTEFCRUwKIAlzdHJ1Y3QganVtcF9lbnRyeSAqanVtcF9lbnRyaWVzOwogCXVuc2lnbmVkIGludCBudW1fanVtcF9lbnRyaWVzOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1RSQUNJTkcKLQljb25zdCBjaGFyICoqdHJhY2VfYnByaW50a19mbXRfc3RhcnQ7CiAJdW5zaWduZWQgaW50IG51bV90cmFjZV9icHJpbnRrX2ZtdDsKKwljb25zdCBjaGFyICoqdHJhY2VfYnByaW50a19mbXRfc3RhcnQ7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfRVZFTlRfVFJBQ0lORwogCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqKnRyYWNlX2V2ZW50czsKIAl1bnNpZ25lZCBpbnQgbnVtX3RyYWNlX2V2ZW50czsKICNlbmRpZgogI2lmZGVmIENPTkZJR19GVFJBQ0VfTUNPVU5UX1JFQ09SRAotCXVuc2lnbmVkIGxvbmcgKmZ0cmFjZV9jYWxsc2l0ZXM7CiAJdW5zaWduZWQgaW50IG51bV9mdHJhY2VfY2FsbHNpdGVzOworCXVuc2lnbmVkIGxvbmcgKmZ0cmFjZV9jYWxsc2l0ZXM7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19NT0RVTEVfVU5MT0FECkBAIC00NzUsOCArNDc3LDkgQEAKIAkJCQkJYm9vbCB3YXJuKTsKIAogLyogV2FsayB0aGUgZXhwb3J0ZWQgc3ltYm9sIHRhYmxlICovCi1ib29sIGVhY2hfc3ltYm9sKGJvb2wgKCpmbikoY29uc3Qgc3RydWN0IHN5bXNlYXJjaCAqYXJyLCBzdHJ1Y3QgbW9kdWxlICpvd25lciwKLQkJCSAgICB1bnNpZ25lZCBpbnQgc3ltbnVtLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7Citib29sIGVhY2hfc3ltYm9sX3NlY3Rpb24oYm9vbCAoKmZuKShjb25zdCBzdHJ1Y3Qgc3ltc2VhcmNoICphcnIsCisJCQkJICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyLAorCQkJCSAgICB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7CiAKIC8qIFJldHVybnMgMCBhbmQgZmlsbHMgaW4gdmFsdWUsIGRlZmluZWQgYW5kIG5hbWVidWYsIG9yIC1FUkFOR0UgaWYKICAgIHN5bW51bSBvdXQgb2YgcmFuZ2UuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmgKaW5kZXggMDdiNDE5NS4uZGRhYWU5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kdWxlcGFyYW0uaApAQCAtNjcsOSArNjcsOSBAQAogc3RydWN0IGtwYXJhbV9hcnJheQogewogCXVuc2lnbmVkIGludCBtYXg7CisJdW5zaWduZWQgaW50IGVsZW1zaXplOwogCXVuc2lnbmVkIGludCAqbnVtOwogCWNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzICpvcHM7Ci0JdW5zaWduZWQgaW50IGVsZW1zaXplOwogCXZvaWQgKmVsZW07CiB9OwogCkBAIC0zNzEsOCArMzcxLDkgQEAKICAqLwogI2RlZmluZSBtb2R1bGVfcGFyYW1fYXJyYXlfbmFtZWQobmFtZSwgYXJyYXksIHR5cGUsIG51bXAsIHBlcm0pCQlcCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBrcGFyYW1fYXJyYXkgX19wYXJhbV9hcnJfIyNuYW1lCQlcCi0JPSB7IEFSUkFZX1NJWkUoYXJyYXkpLCBudW1wLCAmcGFyYW1fb3BzXyMjdHlwZSwJCQlcCi0JICAgIHNpemVvZihhcnJheVswXSksIGFycmF5IH07CQkJCQlcCisJPSB7IC5tYXggPSBBUlJBWV9TSVpFKGFycmF5KSwgLm51bSA9IG51bXAsICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgLm9wcyA9ICZwYXJhbV9vcHNfIyN0eXBlLAkJCQkJXAorCSAgICAuZWxlbXNpemUgPSBzaXplb2YoYXJyYXlbMF0pLCAuZWxlbSA9IGFycmF5IH07CQlcCiAJX19tb2R1bGVfcGFyYW1fY2FsbChNT0RVTEVfUEFSQU1fUFJFRklYLCBuYW1lLAkJCVwKIAkJCSAgICAmcGFyYW1fYXJyYXlfb3BzLAkJCQlcCiAJCQkgICAgLmFyciA9ICZfX3BhcmFtX2Fycl8jI25hbWUsCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tcm91dGUuaCBiL2luY2x1ZGUvbGludXgvbXJvdXRlLmgKaW5kZXggYjIxZDU2Ny4uNDZjYWFmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tcm91dGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21yb3V0ZS5oCkBAIC0yNDQsNiArMjQ0LDcgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiBzdHJ1Y3QgcnRtc2c7CiBleHRlcm4gaW50IGlwbXJfZ2V0X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCiAJCQkgIHN0cnVjdCBydG1zZyAqcnRtLCBpbnQgbm93YWl0KTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldC5oIGIvaW5jbHVkZS9saW51eC9uZXQuaAppbmRleCA5NGRlODNjLi4xZGE1NWU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0LmgKQEAgLTQyLDYgKzQyLDcgQEAKICNkZWZpbmUgU1lTX1JFQ1ZNU0cJMTcJCS8qIHN5c19yZWN2bXNnKDIpCQkqLwogI2RlZmluZSBTWVNfQUNDRVBUNAkxOAkJLyogc3lzX2FjY2VwdDQoMikJCSovCiAjZGVmaW5lIFNZU19SRUNWTU1TRwkxOQkJLyogc3lzX3JlY3ZtbXNnKDIpCQkqLworI2RlZmluZSBTWVNfU0VORE1NU0cJMjAJCS8qIHN5c19zZW5kbW1zZygyKQkJKi8KIAogdHlwZWRlZiBlbnVtIHsKIAlTU19GUkVFID0gMCwJCQkvKiBub3QgYWxsb2NhdGVkCQkqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggMDI0OWZlNy4uY2EzMzNlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC0xMDIwLDkgKzEwMjAsNiBAQAogCSAqCXBhcnQgb2YgdGhlIHVzdWFsIHNldCBzcGVjaWZpZWQgaW4gU3BhY2UuYy4KIAkgKi8KIAotCXVuc2lnbmVkIGNoYXIJCWlmX3BvcnQ7CS8qIFNlbGVjdGFibGUgQVVJLCBUUCwuLiovCi0JdW5zaWduZWQgY2hhcgkJZG1hOwkJLyogRE1BIGNoYW5uZWwJCSovCi0KIAl1bnNpZ25lZCBsb25nCQlzdGF0ZTsKIAogCXN0cnVjdCBsaXN0X2hlYWQJZGV2X2xpc3Q7CkBAIC0xMDM1LDcgKzEwMzIsNyBAQAogCXUzMgkJCWh3X2ZlYXR1cmVzOwogCS8qIHVzZXItcmVxdWVzdGVkIGZlYXR1cmVzICovCiAJdTMyCQkJd2FudGVkX2ZlYXR1cmVzOwotCS8qIFZMQU4gZmVhdHVyZSBtYXNrICovCisJLyogbWFzayBvZiBmZWF0dXJlcyBpbmhlcml0YWJsZSBieSBWTEFOIGRldmljZXMgKi8KIAl1MzIJCQl2bGFuX2ZlYXR1cmVzOwogCiAJLyogTmV0IGRldmljZSBmZWF0dXJlIGJpdHM7IGlmIHlvdSBjaGFuZ2Ugc29tZXRoaW5nLApAQCAtMTA2Niw2ICsxMDYzLDggQEAKICNkZWZpbmUgTkVUSUZfRl9OVFVQTEUJCSgxIDw8IDI3KSAvKiBOLXR1cGxlIGZpbHRlcnMgc3VwcG9ydGVkICovCiAjZGVmaW5lIE5FVElGX0ZfUlhIQVNICQkoMSA8PCAyOCkgLyogUmVjZWl2ZSBoYXNoaW5nIG9mZmxvYWQgKi8KICNkZWZpbmUgTkVUSUZfRl9SWENTVU0JCSgxIDw8IDI5KSAvKiBSZWNlaXZlIGNoZWNrc3VtbWluZyBvZmZsb2FkICovCisjZGVmaW5lIE5FVElGX0ZfTk9DQUNIRV9DT1BZCSgxIDw8IDMwKSAvKiBVc2Ugbm8tY2FjaGUgY29weWZyb211c2VyICovCisjZGVmaW5lIE5FVElGX0ZfTE9PUEJBQ0sJKDEgPDwgMzEpIC8qIEVuYWJsZSBsb29wYmFjayAqLwogCiAJLyogU2VnbWVudGF0aW9uIG9mZmxvYWQgZmVhdHVyZXMgKi8KICNkZWZpbmUgTkVUSUZfRl9HU09fU0hJRlQJMTYKQEAgLTEwNzksOSArMTA3OCw5IEBACiAKIAkvKiBGZWF0dXJlcyB2YWxpZCBmb3IgZXRodG9vbCB0byBjaGFuZ2UgKi8KIAkvKiA9IGFsbCBkZWZpbmVkIG1pbnVzIGRyaXZlci9kZXZpY2UtY2xhc3MtcmVsYXRlZCAqLwotI2RlZmluZSBORVRJRl9GX05FVkVSX0NIQU5HRQkoTkVUSUZfRl9ISUdIRE1BIHwgTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQgfCBcCisjZGVmaW5lIE5FVElGX0ZfTkVWRVJfQ0hBTkdFCShORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRCB8IFwKIAkJCQkgIE5FVElGX0ZfTExUWCB8IE5FVElGX0ZfTkVUTlNfTE9DQUwpCi0jZGVmaW5lIE5FVElGX0ZfRVRIVE9PTF9CSVRTCSgweDNmM2ZmZmZmICYgfk5FVElGX0ZfTkVWRVJfQ0hBTkdFKQorI2RlZmluZSBORVRJRl9GX0VUSFRPT0xfQklUUwkoMHhmZjNmZmZmZiAmIH5ORVRJRl9GX05FVkVSX0NIQU5HRSkKIAogCS8qIExpc3Qgb2YgZmVhdHVyZXMgd2l0aCBzb2Z0d2FyZSBmYWxsYmFja3MuICovCiAjZGVmaW5lIE5FVElGX0ZfR1NPX1NPRlRXQVJFCShORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPX0VDTiB8IFwKQEAgLTEwOTUsOSArMTA5NCwxNCBAQAogCiAjZGVmaW5lIE5FVElGX0ZfQUxMX1RTTyAJKE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082IHwgTkVUSUZfRl9UU09fRUNOKQogCisjZGVmaW5lIE5FVElGX0ZfQUxMX0ZDT0UJKE5FVElGX0ZfRkNPRV9DUkMgfCBORVRJRl9GX0ZDT0VfTVRVIHwgXAorCQkJCSBORVRJRl9GX0ZTTykKKwogI2RlZmluZSBORVRJRl9GX0FMTF9UWF9PRkZMT0FEUwkoTkVUSUZfRl9BTExfQ1NVTSB8IE5FVElGX0ZfU0cgfCBcCiAJCQkJIE5FVElGX0ZfRlJBR0xJU1QgfCBORVRJRl9GX0FMTF9UU08gfCBcCi0JCQkJIE5FVElGX0ZfU0NUUF9DU1VNIHwgTkVUSUZfRl9GQ09FX0NSQykKKwkJCQkgTkVUSUZfRl9ISUdIRE1BIHwgXAorCQkJCSBORVRJRl9GX1NDVFBfQ1NVTSB8IFwKKwkJCQkgTkVUSUZfRl9BTExfRkNPRSkKIAogCS8qCiAJICogSWYgb25lIGRldmljZSBzdXBwb3J0cyBvbmUgb2YgdGhlc2UgZmVhdHVyZXMsIHRoZW4gZW5hYmxlIHRoZW0KQEAgLTExMDUsNyArMTEwOSwxMiBAQAogCSAqLwogI2RlZmluZSBORVRJRl9GX09ORV9GT1JfQUxMCShORVRJRl9GX0dTT19TT0ZUV0FSRSB8IE5FVElGX0ZfR1NPX1JPQlVTVCB8IFwKIAkJCQkgTkVUSUZfRl9TRyB8IE5FVElGX0ZfSElHSERNQSB8CQlcCi0JCQkJIE5FVElGX0ZfRlJBR0xJU1QpCisJCQkJIE5FVElGX0ZfRlJBR0xJU1QgfCBORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRCkKKwkvKgorCSAqIElmIG9uZSBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IG9uZSBvZiB0aGVzZSBmZWF0dXJlcywgdGhlbiBkaXNhYmxlIGl0CisJICogZm9yIGFsbCBpbiBuZXRkZXZfaW5jcmVtZW50X2ZlYXR1cmVzLgorCSAqLworI2RlZmluZSBORVRJRl9GX0FMTF9GT1JfQUxMCShORVRJRl9GX05PQ0FDSEVfQ09QWSB8IE5FVElGX0ZfRlNPKQogCiAJLyogY2hhbmdlYWJsZSBmZWF0dXJlcyB3aXRoIG5vIHNwZWNpYWwgaGFyZHdhcmUgcmVxdWlyZW1lbnRzICovCiAjZGVmaW5lIE5FVElGX0ZfU09GVF9GRUFUVVJFUwkoTkVUSUZfRl9HU08gfCBORVRJRl9GX0dSTykKQEAgLTExMzQsMTMgKzExNDMsMTYgQEAKIAljb25zdCBzdHJ1Y3QgaGVhZGVyX29wcyAqaGVhZGVyX29wczsKIAogCXVuc2lnbmVkIGludAkJZmxhZ3M7CS8qIGludGVyZmFjZSBmbGFncyAoYSBsYSBCU0QpCSovCisJdW5zaWduZWQgaW50CQlwcml2X2ZsYWdzOyAvKiBMaWtlICdmbGFncycgYnV0IGludmlzaWJsZSB0byB1c2Vyc3BhY2UuICovCiAJdW5zaWduZWQgc2hvcnQJCWdmbGFnczsKLSAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgcHJpdl9mbGFnczsgLyogTGlrZSAnZmxhZ3MnIGJ1dCBpbnZpc2libGUgdG8gdXNlcnNwYWNlLiAqLwogCXVuc2lnbmVkIHNob3J0CQlwYWRkZWQ7CS8qIEhvdyBtdWNoIHBhZGRpbmcgYWRkZWQgYnkgYWxsb2NfbmV0ZGV2KCkgKi8KIAogCXVuc2lnbmVkIGNoYXIJCW9wZXJzdGF0ZTsgLyogUkZDMjg2MyBvcGVyc3RhdGUgKi8KIAl1bnNpZ25lZCBjaGFyCQlsaW5rX21vZGU7IC8qIG1hcHBpbmcgcG9saWN5IHRvIG9wZXJzdGF0ZSAqLwogCisJdW5zaWduZWQgY2hhcgkJaWZfcG9ydDsJLyogU2VsZWN0YWJsZSBBVUksIFRQLC4uKi8KKwl1bnNpZ25lZCBjaGFyCQlkbWE7CQkvKiBETUEgY2hhbm5lbAkJKi8KKwogCXVuc2lnbmVkIGludAkJbXR1OwkvKiBpbnRlcmZhY2UgTVRVIHZhbHVlCQkqLwogCXVuc2lnbmVkIHNob3J0CQl0eXBlOwkvKiBpbnRlcmZhY2UgaGFyZHdhcmUgdHlwZQkqLwogCXVuc2lnbmVkIHNob3J0CQloYXJkX2hlYWRlcl9sZW47CS8qIGhhcmR3YXJlIGhkciBsZW5ndGgJKi8KQEAgLTEyODEsNyArMTI5Myw5IEBACiAJICAgICAgIE5FVFJFR19VTlJFR0lTVEVSRUQsCS8qIGNvbXBsZXRlZCB1bnJlZ2lzdGVyIHRvZG8gKi8KIAkgICAgICAgTkVUUkVHX1JFTEVBU0VELAkJLyogY2FsbGVkIGZyZWVfbmV0ZGV2ICovCiAJICAgICAgIE5FVFJFR19EVU1NWSwJCS8qIGR1bW15IGRldmljZSBmb3IgTkFQSSBwb2xsICovCi0JfSByZWdfc3RhdGU6MTY7CisJfSByZWdfc3RhdGU6ODsKKworCWJvb2wgZGlzbWFudGxlOyAvKiBkZXZpY2UgaXMgZ29pbmcgZG8gYmUgZnJlZWQgKi8KIAogCWVudW0gewogCQlSVE5MX0xJTktfSU5JVElBTElaRUQsCkBAIC0yNTEzLDYgKzI1MjcsNyBAQAogZXh0ZXJuIGludAkJbmV0ZGV2X21heF9iYWNrbG9nOwogZXh0ZXJuIGludAkJbmV0ZGV2X3RzdGFtcF9wcmVxdWV1ZTsKIGV4dGVybiBpbnQJCXdlaWdodF9wOworZXh0ZXJuIGludAkJYnBmX2ppdF9lbmFibGU7CiBleHRlcm4gaW50CQluZXRkZXZfc2V0X21hc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyKTsKIGV4dGVybiBpbnQgbmV0ZGV2X3NldF9ib25kX21hc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKm1hc3Rlcik7CkBAIC0yNTUwLDcgKzI1NjUsOSBAQAogfQogdTMyIG5ldGRldl9pbmNyZW1lbnRfZmVhdHVyZXModTMyIGFsbCwgdTMyIG9uZSwgdTMyIG1hc2spOwogdTMyIG5ldGRldl9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZlYXR1cmVzKTsKK2ludCBfX25ldGRldl91cGRhdGVfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiB2b2lkIG5ldGRldl91cGRhdGVfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit2b2lkIG5ldGRldl9jaGFuZ2VfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIHZvaWQgbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKnJvb3RkZXYsCiAJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMjU4OCwxMyArMjYwNSw4IEBACiAKIGV4dGVybiBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgX19uZXRfaW5pdGRhdGEgbG9vcGJhY2tfbmV0X29wczsKIAotc3RhdGljIGlubGluZSBpbnQgZGV2X2V0aHRvb2xfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCSAgIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQotewotCWlmICghZGV2LT5ldGh0b29sX29wcyB8fCAhZGV2LT5ldGh0b29sX29wcy0+Z2V0X3NldHRpbmdzKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JcmV0dXJuIGRldi0+ZXRodG9vbF9vcHMtPmdldF9zZXR0aW5ncyhkZXYsIGNtZCk7Ci19CitpbnQgZGV2X2V0aHRvb2xfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKTsKIAogc3RhdGljIGlubGluZSB1MzIgZGV2X2V0aHRvb2xfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9nZXRwb3J0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXRfZ2V0cG9ydC5oCmluZGV4IDVhZWJkMTcuLjkwZDA5MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9nZXRwb3J0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2dldHBvcnQuaApAQCAtMjIsNyArMjIsOSBAQAogewogCXN3aXRjaCAocHJvdG8pIHsKIAljYXNlIElQUFJPVE9fVENQOgorCWNhc2UgSVBQUk9UT19TQ1RQOgogCWNhc2UgSVBQUk9UT19VRFA6CisJY2FzZSBJUFBST1RPX1VEUExJVEU6CiAJCXJldHVybiB0cnVlOwogCX0KIAlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaAppbmRleCAzNzIxOTUyLi4zMmNkZGY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgKQEAgLTQ1Niw3MiArNDU2LDYwIEBACiBleHRlcm4gc3RydWN0IHh0X3RhYmxlX2luZm8gKnh0X2FsbG9jX3RhYmxlX2luZm8odW5zaWduZWQgaW50IHNpemUpOwogZXh0ZXJuIHZvaWQgeHRfZnJlZV90YWJsZV9pbmZvKHN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvKTsKIAotLyoKLSAqIFBlci1DUFUgc3BpbmxvY2sgYXNzb2NpYXRlZCB3aXRoIHBlci1jcHUgdGFibGUgZW50cmllcywgYW5kCi0gKiB3aXRoIGEgY291bnRlciBmb3IgdGhlICJyZWFkaW5nIiBzaWRlIHRoYXQgYWxsb3dzIGEgcmVjdXJzaXZlCi0gKiByZWFkZXIgdG8gYXZvaWQgdGFraW5nIHRoZSBsb2NrIGFuZCBkZWFkbG9ja2luZy4KLSAqCi0gKiAicmVhZGluZyIgaXMgdXNlZCBieSBpcC9hcnAvaXA2IHRhYmxlcyBydWxlIHByb2Nlc3Npbmcgd2hpY2ggcnVucyBwZXItY3B1LgotICogSXQgbmVlZHMgdG8gZW5zdXJlIHRoYXQgdGhlIHJ1bGVzIGFyZSBub3QgYmVpbmcgY2hhbmdlZCB3aGlsZSB0aGUgcGFja2V0Ci0gKiBpcyBiZWluZyBwcm9jZXNzZWQuIEluIHNvbWUgY2FzZXMsIHRoZSByZWFkIGxvY2sgd2lsbCBiZSBhY3F1aXJlZAotICogdHdpY2Ugb24gdGhlIHNhbWUgQ1BVOyB0aGlzIGlzIG9rYXkgYmVjYXVzZSBvZiB0aGUgY291bnQuCi0gKgotICogIndyaXRpbmciIGlzIHVzZWQgd2hlbiByZWFkaW5nIGNvdW50ZXJzLgotICogIER1cmluZyByZXBsYWNlIGFueSByZWFkZXJzIHRoYXQgYXJlIHVzaW5nIHRoZSBvbGQgdGFibGVzIGhhdmUgdG8gY29tcGxldGUKLSAqICBiZWZvcmUgZnJlZWluZyB0aGUgb2xkIHRhYmxlLiBUaGlzIGlzIGhhbmRsZWQgYnkgdGhlIHdyaXRlIGxvY2tpbmcKLSAqICBuZWNlc3NhcnkgZm9yIHJlYWRpbmcgdGhlIGNvdW50ZXJzLgorLyoqCisgKiB4dF9yZWNzZXEgLSByZWN1cnNpdmUgc2VxY291bnQgZm9yIG5ldGZpbHRlciB1c2UKKyAqIAorICogUGFja2V0IHByb2Nlc3NpbmcgY2hhbmdlcyB0aGUgc2VxY291bnQgb25seSBpZiBubyByZWN1cnNpb24gaGFwcGVuZWQKKyAqIGdldF9jb3VudGVycygpIGNhbiB1c2UgcmVhZF9zZXFjb3VudF9iZWdpbigpL3JlYWRfc2VxY291bnRfcmV0cnkoKSwKKyAqIGJlY2F1c2Ugd2UgdXNlIHRoZSBub3JtYWwgc2VxY291bnQgY29udmVudGlvbiA6CisgKiBMb3cgb3JkZXIgYml0IHNldCB0byAxIGlmIGEgd3JpdGVyIGlzIGFjdGl2ZS4KICAqLwotc3RydWN0IHh0X2luZm9fbG9jayB7Ci0Jc2VxbG9ja190IGxvY2s7Ci0JdW5zaWduZWQgY2hhciByZWFkZXJzOwotfTsKLURFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgeHRfaW5mb19sb2NrLCB4dF9pbmZvX2xvY2tzKTsKK0RFQ0xBUkVfUEVSX0NQVShzZXFjb3VudF90LCB4dF9yZWNzZXEpOwogCi0vKgotICogTm90ZTogd2UgbmVlZCB0byBlbnN1cmUgdGhhdCBwcmVlbXB0aW9uIGlzIGRpc2FibGVkIGJlZm9yZSBhY3F1aXJpbmcKLSAqIHRoZSBwZXItY3B1LXZhcmlhYmxlLCBzbyB3ZSBkbyBpdCBhcyBhIHR3byBzdGVwIHByb2Nlc3MgcmF0aGVyIHRoYW4KLSAqIHVzaW5nICJzcGluX2xvY2tfYmgoKSIuCisvKioKKyAqIHh0X3dyaXRlX3JlY3NlcV9iZWdpbiAtIHN0YXJ0IG9mIGEgd3JpdGUgc2VjdGlvbgogICoKLSAqIFdlIF9hbHNvXyBuZWVkIHRvIGRpc2FibGUgYm90dG9tIGhhbGYgcHJvY2Vzc2luZyBiZWZvcmUgdXBkYXRpbmcgb3VyCi0gKiBuZXN0aW5nIGNvdW50LCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgb25seSBraW5kIG9mIHJlLWVudHJhbmN5IGlzIHRoaXMKLSAqIGNvZGUgYmVpbmcgY2FsbGVkIGJ5IGl0c2VsZjogc2luY2UgdGhlIGNvdW50K2xvY2sgaXMgbm90IGFuIGF0b21pYwotICogb3BlcmF0aW9uLCB3ZSBjYW4gYWxsb3cgbm8gcmFjZXMuCi0gKgotICogX09ubHlfIHRoYXQgc3BlY2lhbCBjb21iaW5hdGlvbiBvZiBiZWluZyBwZXItY3B1IGFuZCBuZXZlciBnZXR0aW5nCi0gKiByZS1lbnRlcmVkIGFzeW5jaHJvbm91c2x5IG1lYW5zIHRoYXQgdGhlIGNvdW50IGlzIHNhZmUuCisgKiBCZWdpbiBwYWNrZXQgcHJvY2Vzc2luZyA6IGFsbCByZWFkZXJzIG11c3Qgd2FpdCB0aGUgZW5kCisgKiAxKSBNdXN0IGJlIGNhbGxlZCB3aXRoIHByZWVtcHRpb24gZGlzYWJsZWQKKyAqIDIpIHNvZnRpcnFzIG11c3QgYmUgZGlzYWJsZWQgdG9vIChvciB3ZSBzaG91bGQgdXNlIGlycXNhZmVfY3B1X2FkZCgpKQorICogUmV0dXJucyA6CisgKiAgMSBpZiBubyByZWN1cnNpb24gb24gdGhpcyBjcHUKKyAqICAwIGlmIHJlY3Vyc2lvbiBkZXRlY3RlZAogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgeHRfaW5mb19yZGxvY2tfYmgodm9pZCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHh0X3dyaXRlX3JlY3NlcV9iZWdpbih2b2lkKQogewotCXN0cnVjdCB4dF9pbmZvX2xvY2sgKmxvY2s7CisJdW5zaWduZWQgaW50IGFkZGVuZDsKIAotCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlsb2NrID0gJl9fZ2V0X2NwdV92YXIoeHRfaW5mb19sb2Nrcyk7Ci0JaWYgKGxpa2VseSghbG9jay0+cmVhZGVycysrKSkKLQkJd3JpdGVfc2VxbG9jaygmbG9jay0+bG9jayk7CisJLyoKKwkgKiBMb3cgb3JkZXIgYml0IG9mIHNlcXVlbmNlIGlzIHNldCBpZiB3ZSBhbHJlYWR5CisJICogY2FsbGVkIHh0X3dyaXRlX3JlY3NlcV9iZWdpbigpLgorCSAqLworCWFkZGVuZCA9IChfX3RoaXNfY3B1X3JlYWQoeHRfcmVjc2VxLnNlcXVlbmNlKSArIDEpICYgMTsKKworCS8qCisJICogVGhpcyBpcyBraW5kIG9mIGEgd3JpdGVfc2VxY291bnRfYmVnaW4oKSwgYnV0IGFkZGVuZCBpcyAwIG9yIDEKKwkgKiBXZSBkb250IGNoZWNrIGFkZGVuZCB2YWx1ZSB0byBhdm9pZCBhIHRlc3QgYW5kIGNvbmRpdGlvbmFsIGp1bXAsCisJICogc2luY2UgYWRkZW5kIGlzIG1vc3QgbGlrZWx5IDEKKwkgKi8KKwlfX3RoaXNfY3B1X2FkZCh4dF9yZWNzZXEuc2VxdWVuY2UsIGFkZGVuZCk7CisJc21wX3dtYigpOworCisJcmV0dXJuIGFkZGVuZDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHh0X2luZm9fcmR1bmxvY2tfYmgodm9pZCkKLXsKLQlzdHJ1Y3QgeHRfaW5mb19sb2NrICpsb2NrID0gJl9fZ2V0X2NwdV92YXIoeHRfaW5mb19sb2Nrcyk7Ci0KLQlpZiAobGlrZWx5KCEtLWxvY2stPnJlYWRlcnMpKQotCQl3cml0ZV9zZXF1bmxvY2soJmxvY2stPmxvY2spOwotCWxvY2FsX2JoX2VuYWJsZSgpOwotfQotCi0vKgotICogVGhlICJ3cml0ZXIiIHNpZGUgbmVlZHMgdG8gZ2V0IGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIGxvY2ssCi0gKiByZWdhcmRsZXNzIG9mIHJlYWRlcnMuICBUaGlzIG11c3QgYmUgY2FsbGVkIHdpdGggYm90dG9tIGhhbGYKLSAqIHByb2Nlc3NpbmcgKGFuZCB0aHVzIGFsc28gcHJlZW1wdGlvbikgZGlzYWJsZWQuCisvKioKKyAqIHh0X3dyaXRlX3JlY3NlcV9lbmQgLSBlbmQgb2YgYSB3cml0ZSBzZWN0aW9uCisgKiBAYWRkZW5kOiByZXR1cm4gdmFsdWUgZnJvbSBwcmV2aW91cyB4dF93cml0ZV9yZWNzZXFfYmVnaW4oKQorICoKKyAqIEVuZCBwYWNrZXQgcHJvY2Vzc2luZyA6IGFsbCByZWFkZXJzIGNhbiBwcm9jZWVkCisgKiAxKSBNdXN0IGJlIGNhbGxlZCB3aXRoIHByZWVtcHRpb24gZGlzYWJsZWQKKyAqIDIpIHNvZnRpcnFzIG11c3QgYmUgZGlzYWJsZWQgdG9vIChvciB3ZSBzaG91bGQgdXNlIGlycXNhZmVfY3B1X2FkZCgpKQogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgeHRfaW5mb193cmxvY2sodW5zaWduZWQgaW50IGNwdSkKK3N0YXRpYyBpbmxpbmUgdm9pZCB4dF93cml0ZV9yZWNzZXFfZW5kKHVuc2lnbmVkIGludCBhZGRlbmQpCiB7Ci0Jd3JpdGVfc2VxbG9jaygmcGVyX2NwdSh4dF9pbmZvX2xvY2tzLCBjcHUpLmxvY2spOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgeHRfaW5mb193cnVubG9jayh1bnNpZ25lZCBpbnQgY3B1KQotewotCXdyaXRlX3NlcXVubG9jaygmcGVyX2NwdSh4dF9pbmZvX2xvY2tzLCBjcHUpLmxvY2spOworCS8qIHRoaXMgaXMga2luZCBvZiBhIHdyaXRlX3NlcWNvdW50X2VuZCgpLCBidXQgYWRkZW5kIGlzIDAgb3IgMSAqLworCXNtcF93bWIoKTsKKwlfX3RoaXNfY3B1X2FkZCh4dF9yZWNzZXEuc2VxdWVuY2UsIGFkZGVuZCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oIGIvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaAppbmRleCAyMTZjZWE1Li44NzY5NGNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgKQEAgLTQ3LDYgKzQ3LDcgQEAKIAogI2lmZGVmIENPTkZJR19ORlNfVjQKIAl1NjQJCQljbF9jbGllbnRpZDsJLyogY29uc3RhbnQgKi8KKwluZnM0X3ZlcmlmaWVyCQljbF9jb25maXJtOwkvKiBDbGllbnRpZCB2ZXJpZmllciAqLwogCXVuc2lnbmVkIGxvbmcJCWNsX3N0YXRlOwogCiAJc3BpbmxvY2tfdAkJY2xfbG9jazsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX3hkci5oIGIvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKaW5kZXggNzhiMTAxZS4uN2UzNzFmNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKQEAgLTUwLDYgKzUwLDcgQEAKIAl9IGR1OwogCXN0cnVjdCBuZnNfZnNpZAkJZnNpZDsKIAlfX3U2NAkJCWZpbGVpZDsKKwlfX3U2NAkJCW1vdW50ZWRfb25fZmlsZWlkOwogCXN0cnVjdCB0aW1lc3BlYwkJYXRpbWU7CiAJc3RydWN0IHRpbWVzcGVjCQltdGltZTsKIAlzdHJ1Y3QgdGltZXNwZWMJCWN0aW1lOwpAQCAtODMsNiArODQsNyBAQAogI2RlZmluZSBORlNfQVRUUl9GQVRUUl9QUkVDSEFOR0UJKDFVIDw8IDE4KQogI2RlZmluZSBORlNfQVRUUl9GQVRUUl9WNF9SRUZFUlJBTAkoMVUgPDwgMTkpCS8qIE5GU3Y0IHJlZmVycmFsICovCiAjZGVmaW5lIE5GU19BVFRSX0ZBVFRSX01PVU5UUE9JTlQJKDFVIDw8IDIwKQkvKiBUcmVhdCBhcyBtb3VudHBvaW50ICovCisjZGVmaW5lIE5GU19BVFRSX0ZBVFRSX01PVU5URURfT05fRklMRUlECQkoMVUgPDwgMjEpCiAKICNkZWZpbmUgTkZTX0FUVFJfRkFUVFIgKE5GU19BVFRSX0ZBVFRSX1RZUEUgXAogCQl8IE5GU19BVFRSX0ZBVFRSX01PREUgXApAQCAtMjMxLDYgKzIzMyw3IEBACiAJc3RydWN0IG5mczRfbGF5b3V0Z2V0X2FyZ3MgYXJnczsKIAlzdHJ1Y3QgbmZzNF9sYXlvdXRnZXRfcmVzIHJlczsKIAlzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqKmxzZWdwcDsKKwlnZnBfdCBnZnBfZmxhZ3M7CiB9OwogCiBzdHJ1Y3QgbmZzNF9nZXRkZXZpY2VpbmZvX2FyZ3MgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ubDgwMjExLmggYi9pbmNsdWRlL2xpbnV4L25sODAyMTEuaAppbmRleCBiYmZhMTA5Li5jN2NjYWFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25sODAyMTEuaAorKysgYi9pbmNsdWRlL2xpbnV4L25sODAyMTEuaApAQCAtNzcsNiArNzcsMzkgQEAKICAqLwogCiAvKioKKyAqIERPQzogVmlydHVhbCBpbnRlcmZhY2UgLyBjb25jdXJyZW5jeSBjYXBhYmlsaXRpZXMKKyAqCisgKiBTb21lIGRldmljZXMgYXJlIGFibGUgdG8gb3BlcmF0ZSB3aXRoIHZpcnR1YWwgTUFDcywgdGhleSBjYW4gaGF2ZQorICogbW9yZSB0aGFuIG9uZSB2aXJ0dWFsIGludGVyZmFjZS4gVGhlIGNhcGFiaWxpdHkgaGFuZGxpbmcgZm9yIHRoaXMKKyAqIGlzIGEgYml0IGNvbXBsZXggdGhvdWdoLCBhcyB0aGVyZSBtYXkgYmUgYSBudW1iZXIgb2YgcmVzdHJpY3Rpb25zCisgKiBvbiB0aGUgdHlwZXMgb2YgY29uY3VycmVuY3kgdGhhdCBhcmUgc3VwcG9ydGVkLgorICoKKyAqIFRvIHN0YXJ0IHdpdGgsIGVhY2ggZGV2aWNlIHN1cHBvcnRzIHRoZSBpbnRlcmZhY2UgdHlwZXMgbGlzdGVkIGluCisgKiB0aGUgJU5MODAyMTFfQVRUUl9TVVBQT1JURURfSUZUWVBFUyBhdHRyaWJ1dGUsIGJ1dCBieSBsaXN0aW5nIHRoZQorICogdHlwZXMgdGhlcmUgbm8gY29uY3VycmVuY3kgaXMgaW1wbGllZC4KKyAqCisgKiBPbmNlIGNvbmN1cnJlbmN5IGlzIGRlc2lyZWQsIG1vcmUgYXR0cmlidXRlcyBtdXN0IGJlIG9ic2VydmVkOgorICogVG8gc3RhcnQgd2l0aCwgc2luY2Ugc29tZSBpbnRlcmZhY2UgdHlwZXMgYXJlIHB1cmVseSBtYW5hZ2VkIGluCisgKiBzb2Z0d2FyZSwgbGlrZSB0aGUgQVAtVkxBTiB0eXBlIGluIG1hYzgwMjExIGZvciBleGFtcGxlLCB0aGVyZSdzCisgKiBhbiBhZGRpdGlvbmFsIGxpc3Qgb2YgdGhlc2UsIHRoZXkgY2FuIGJlIGFkZGVkIGF0IGFueSB0aW1lIGFuZAorICogYXJlIG9ubHkgcmVzdHJpY3RlZCBieSBzb21lIHNlbWFudGljIHJlc3RyaWN0aW9ucyAoZS5nLiBBUC1WTEFOCisgKiBjYW5ub3QgYmUgYWRkZWQgd2l0aG91dCBhIGNvcnJlc3BvbmRpbmcgQVAgaW50ZXJmYWNlKS4gVGhpcyBsaXN0CisgKiBpcyBleHBvcnRlZCBpbiB0aGUgJU5MODAyMTFfQVRUUl9TT0ZUV0FSRV9JRlRZUEVTIGF0dHJpYnV0ZS4KKyAqCisgKiBGdXJ0aGVyLCB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgY29tYmluYXRpb25zIGlzIGV4cG9ydGVkLiBUaGlzIGlzCisgKiBpbiB0aGUgJU5MODAyMTFfQVRUUl9JTlRFUkZBQ0VfQ09NQklOQVRJT05TIGF0dHJpYnV0ZS4gQmFzaWNhbGx5LAorICogaXQgZXhwb3J0cyBhIGxpc3Qgb2YgImdyb3VwcyIsIGFuZCBhdCBhbnkgcG9pbnQgaW4gdGltZSB0aGUKKyAqIGludGVyZmFjZXMgdGhhdCBhcmUgY3VycmVudGx5IGFjdGl2ZSBtdXN0IGZhbGwgaW50byBhbnkgb25lIG9mCisgKiB0aGUgYWR2ZXJ0aXNlZCBncm91cHMuIFdpdGhpbiBlYWNoIGdyb3VwLCB0aGVyZSBhcmUgcmVzdHJpY3Rpb25zCisgKiBvbiB0aGUgbnVtYmVyIG9mIGludGVyZmFjZXMgb2YgZGlmZmVyZW50IHR5cGVzIHRoYXQgYXJlIHN1cHBvcnRlZAorICogYW5kIGFsc28gdGhlIG51bWJlciBvZiBkaWZmZXJlbnQgY2hhbm5lbHMsIGFsb25nIHdpdGggcG90ZW50aWFsbHkKKyAqIHNvbWUgb3RoZXIgcmVzdHJpY3Rpb25zLiBTZWUgJmVudW0gbmw4MDIxMV9pZl9jb21iaW5hdGlvbl9hdHRycy4KKyAqCisgKiBBbGwgdG9nZXRoZXIsIHRoZXNlIGF0dHJpYnV0ZXMgZGVmaW5lIHRoZSBjb25jdXJyZW5jeSBvZiB2aXJ0dWFsCisgKiBpbnRlcmZhY2VzIHRoYXQgYSBnaXZlbiBkZXZpY2Ugc3VwcG9ydHMuCisgKi8KKworLyoqCiAgKiBlbnVtIG5sODAyMTFfY29tbWFuZHMgLSBzdXBwb3J0ZWQgbmw4MDIxMSBjb21tYW5kcwogICoKICAqIEBOTDgwMjExX0NNRF9VTlNQRUM6IHVuc3BlY2lmaWVkIGNvbW1hbmQgdG8gY2F0Y2ggZXJyb3JzCkBAIC0yMDMsNiArMjM2LDI4IEBACiAgKiBATkw4MDIxMV9DTURfU0NBTl9BQk9SVEVEOiBzY2FuIHdhcyBhYm9ydGVkLCBmb3IgdW5zcGVjaWZpZWQgcmVhc29ucywKICAqCXBhcnRpYWwgc2NhbiByZXN1bHRzIG1heSBiZSBhdmFpbGFibGUKICAqCisgKiBATkw4MDIxMV9DTURfU1RBUlRfU0NIRURfU0NBTjogc3RhcnQgYSBzY2hlZHVsZWQgc2NhbiBhdCBjZXJ0YWluCisgKglpbnRlcnZhbHMsIGFzIHNwZWNpZmllZCBieSAlTkw4MDIxMV9BVFRSX1NDSEVEX1NDQU5fSU5URVJWQUwuCisgKglMaWtlIHdpdGggbm9ybWFsIHNjYW5zLCBpZiBTU0lEcyAoJU5MODAyMTFfQVRUUl9TQ0FOX1NTSURTKQorICoJYXJlIHBhc3NlZCwgdGhleSBhcmUgdXNlZCBpbiB0aGUgcHJvYmUgcmVxdWVzdHMuICBGb3IKKyAqCWJyb2FkY2FzdCwgYSBicm9hZGNhc3QgU1NJRCBtdXN0IGJlIHBhc3NlZCAoaWUuIGFuIGVtcHR5CisgKglzdHJpbmcpLiAgSWYgbm8gU1NJRCBpcyBwYXNzZWQsIG5vIHByb2JlIHJlcXVlc3RzIGFyZSBzZW50IGFuZAorICoJYSBwYXNzaXZlIHNjYW4gaXMgcGVyZm9ybWVkLiAgJU5MODAyMTFfQVRUUl9TQ0FOX0ZSRVFVRU5DSUVTLAorICoJaWYgcGFzc2VkLCBkZWZpbmUgd2hpY2ggY2hhbm5lbHMgc2hvdWxkIGJlIHNjYW5uZWQ7IGlmIG5vdAorICoJcGFzc2VkLCBhbGwgY2hhbm5lbHMgYWxsb3dlZCBmb3IgdGhlIGN1cnJlbnQgcmVndWxhdG9yeSBkb21haW4KKyAqCWFyZSB1c2VkLiAgRXh0cmEgSUVzIGNhbiBhbHNvIGJlIHBhc3NlZCBmcm9tIHRoZSB1c2Vyc3BhY2UgYnkKKyAqCXVzaW5nIHRoZSAlTkw4MDIxMV9BVFRSX0lFIGF0dHJpYnV0ZS4KKyAqIEBOTDgwMjExX0NNRF9TVE9QX1NDSEVEX1NDQU46IHN0b3AgYSBzY2hlZHVsZWQgc2NhbgorICogQE5MODAyMTFfQ01EX1NDSEVEX1NDQU5fUkVTVUxUUzogaW5kaWNhdGVzIHRoYXQgdGhlcmUgYXJlIHNjaGVkdWxlZCBzY2FuCisgKglyZXN1bHRzIGF2YWlsYWJsZS4KKyAqIEBOTDgwMjExX0NNRF9TQ0hFRF9TQ0FOX1NUT1BQRUQ6IGluZGljYXRlcyB0aGF0IHRoZSBzY2hlZHVsZWQgc2NhbiBoYXMKKyAqCXN0b3BwZWQuICBUaGUgZHJpdmVyIG1heSBpc3N1ZSB0aGlzIGV2ZW50IGF0IGFueSB0aW1lIGR1cmluZyBhCisgKglzY2hlZHVsZWQgc2Nhbi4gIE9uZSByZWFzb24gZm9yIHN0b3BwaW5nIHRoZSBzY2FuIGlzIGlmIHRoZSBoYXJkd2FyZQorICoJZG9lcyBub3Qgc3VwcG9ydCBzdGFydGluZyBhbiBhc3NvY2lhdGlvbiBvciBhIG5vcm1hbCBzY2FuIHdoaWxlIHJ1bm5pbmcKKyAqCWEgc2NoZWR1bGVkIHNjYW4uICBUaGlzIGV2ZW50IGlzIGFsc28gc2VudCB3aGVuIHRoZQorICoJJU5MODAyMTFfQ01EX1NUT1BfU0NIRURfU0NBTiBjb21tYW5kIGlzIHJlY2VpdmVkIG9yIHdoZW4gdGhlIGludGVyZmFjZQorICoJaXMgYnJvdWdodCBkb3duIHdoaWxlIGEgc2NoZWR1bGVkIHNjYW4gd2FzIHJ1bm5pbmcuCisgKgogICogQE5MODAyMTFfQ01EX0dFVF9TVVJWRVk6IGdldCBzdXJ2ZXkgcmVzdWxzLCBlLmcuIGNoYW5uZWwgb2NjdXBhdGlvbgogICogICAgICBvciBub2lzZSBsZXZlbAogICogQE5MODAyMTFfQ01EX05FV19TVVJWRVlfUkVTVUxUUzogc3VydmV5IGRhdGEgbm90aWZpY2F0aW9uIChhcyBhIHJlcGx5IHRvCkBAIC00MTAsNiArNDY1LDI0IEBACiAgKglub3RpZmljYXRpb24uIFRoaXMgZXZlbnQgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IGFuIHVucHJvdGVjdGVkCiAgKglkaXNhc3NvY2lhdGlvbiBmcmFtZSB3YXMgZHJvcHBlZCB3aGVuIE1GUCBpcyBpbiB1c2UuCiAgKgorICogQE5MODAyMTFfQ01EX05FV19QRUVSX0NBTkRJREFURTogTm90aWZpY2F0aW9uIG9uIHRoZSByZWNlcHRpb24gb2YgYQorICogICAgICBiZWFjb24gb3IgcHJvYmUgcmVzcG9uc2UgZnJvbSBhIGNvbXBhdGlibGUgbWVzaCBwZWVyLiAgVGhpcyBpcyBvbmx5CisgKiAgICAgIHNlbnQgd2hpbGUgbm8gc3RhdGlvbiBpbmZvcm1hdGlvbiAoc3RhX2luZm8pIGV4aXN0cyBmb3IgdGhlIG5ldyBwZWVyCisgKiAgICAgIGNhbmRpZGF0ZSBhbmQgd2hlbiBATkw4MDIxMV9NRVNIX1NFVFVQX1VTRVJTUEFDRV9BVVRIIGlzIHNldC4gIE9uCisgKiAgICAgIHJlY2VwdGlvbiBvZiB0aGlzIG5vdGlmaWNhdGlvbiwgdXNlcnNwYWNlIG1heSBkZWNpZGUgdG8gY3JlYXRlIGEgbmV3CisgKiAgICAgIHN0YXRpb24gKEBOTDgwMjExX0NNRF9ORVdfU1RBVElPTikuICBUbyBzdG9wIHRoaXMgbm90aWZpY2F0aW9uIGZyb20KKyAqICAgICAgcmVvY2N1cnJpbmcsIHRoZSB1c2Vyc3BhY2UgYXV0aGVudGljYXRpb24gZGFlbW9uIG1heSB3YW50IHRvIGNyZWF0ZSB0aGUKKyAqICAgICAgbmV3IHN0YXRpb24gd2l0aCB0aGUgQVVUSEVOVElDQVRFRCBmbGFnIHVuc2V0IGFuZCBtYXliZSBjaGFuZ2UgaXQgbGF0ZXIKKyAqICAgICAgZGVwZW5kaW5nIG9uIHRoZSBhdXRoZW50aWNhdGlvbiByZXN1bHQuCisgKgorICogQE5MODAyMTFfQ01EX0dFVF9XT1dMQU46IGdldCBXYWtlLW9uLVdpcmVsZXNzLUxBTiAoV29XTEFOKSBzZXR0aW5ncy4KKyAqIEBOTDgwMjExX0NNRF9TRVRfV09XTEFOOiBzZXQgV2FrZS1vbi1XaXJlbGVzcy1MQU4gKFdvV0xBTikgc2V0dGluZ3MuCisgKglTaW5jZSB3aXJlbGVzcyBpcyBtb3JlIGNvbXBsZXggdGhhbiB3aXJlZCBldGhlcm5ldCwgaXQgc3VwcG9ydHMKKyAqCXZhcmlvdXMgdHJpZ2dlcnMuIFRoZXNlIHRyaWdnZXJzIGNhbiBiZSBjb25maWd1cmVkIHRocm91Z2ggdGhpcworICoJY29tbWFuZCB3aXRoIHRoZSAlTkw4MDIxMV9BVFRSX1dPV0xBTl9UUklHR0VSUyBhdHRyaWJ1dGUuIEZvcgorICoJbW9yZSBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uLCBzZWUKKyAqCWh0dHA6Ly93aXJlbGVzcy5rZXJuZWwub3JnL2VuL3VzZXJzL0RvY3VtZW50YXRpb24vV29XTEFOLgorICoKICAqIEBOTDgwMjExX0NNRF9NQVg6IGhpZ2hlc3QgdXNlZCBjb21tYW5kIG51bWJlcgogICogQF9fTkw4MDIxMV9DTURfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlCiAgKi8KQEAgLTUyMiw2ICs1OTUsMTYgQEAKIAlOTDgwMjExX0NNRF9VTlBST1RfREVBVVRIRU5USUNBVEUsCiAJTkw4MDIxMV9DTURfVU5QUk9UX0RJU0FTU09DSUFURSwKIAorCU5MODAyMTFfQ01EX05FV19QRUVSX0NBTkRJREFURSwKKworCU5MODAyMTFfQ01EX0dFVF9XT1dMQU4sCisJTkw4MDIxMV9DTURfU0VUX1dPV0xBTiwKKworCU5MODAyMTFfQ01EX1NUQVJUX1NDSEVEX1NDQU4sCisJTkw4MDIxMV9DTURfU1RPUF9TQ0hFRF9TQ0FOLAorCU5MODAyMTFfQ01EX1NDSEVEX1NDQU5fUkVTVUxUUywKKwlOTDgwMjExX0NNRF9TQ0hFRF9TQ0FOX1NUT1BQRUQsCisKIAkvKiBhZGQgbmV3IGNvbW1hbmRzIGFib3ZlIGhlcmUgKi8KIAogCS8qIHVzZWQgdG8gZGVmaW5lIE5MODAyMTFfQ01EX01BWCBiZWxvdyAqLwpAQCAtNTQ1LDYgKzYyOCw3IEBACiAvKiBzb3VyY2UtbGV2ZWwgQVBJIGNvbXBhdGliaWxpdHkgKi8KICNkZWZpbmUgTkw4MDIxMV9DTURfR0VUX01FU0hfUEFSQU1TIE5MODAyMTFfQ01EX0dFVF9NRVNIX0NPTkZJRwogI2RlZmluZSBOTDgwMjExX0NNRF9TRVRfTUVTSF9QQVJBTVMgTkw4MDIxMV9DTURfU0VUX01FU0hfQ09ORklHCisjZGVmaW5lIE5MODAyMTFfTUVTSF9TRVRVUF9WRU5ET1JfUEFUSF9TRUxfSUUgTkw4MDIxMV9NRVNIX1NFVFVQX0lFCiAKIC8qKgogICogZW51bSBubDgwMjExX2F0dHJzIC0gbmw4MDIxMSBuZXRsaW5rIGF0dHJpYnV0ZXMKQEAgLTg4Niw2ICs5NzAsMzEgQEAKICAqCWNoYW5nZWQgb25jZSB0aGUgbWVzaCBpcyBhY3RpdmUuCiAgKiBATkw4MDIxMV9BVFRSX01FU0hfQ09ORklHOiBNZXNoIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycywgYSBuZXN0ZWQgYXR0cmlidXRlCiAgKgljb250YWluaW5nIGF0dHJpYnV0ZXMgZnJvbSAmZW51bSBubDgwMjExX21lc2hjb25mX3BhcmFtcy4KKyAqIEBOTDgwMjExX0FUVFJfU1VQUE9SVF9NRVNIX0FVVEg6IEN1cnJlbnRseSwgdGhpcyBtZWFucyB0aGUgdW5kZXJseWluZyBkcml2ZXIKKyAqCWFsbG93cyBhdXRoIGZyYW1lcyBpbiBhIG1lc2ggdG8gYmUgcGFzc2VkIHRvIHVzZXJzcGFjZSBmb3IgcHJvY2Vzc2luZyB2aWEKKyAqCXRoZSBATkw4MDIxMV9NRVNIX1NFVFVQX1VTRVJTUEFDRV9BVVRIIGZsYWcuCisgKiBATkw4MDIxMV9BVFRSX1NUQV9QTElOS19TVEFURTogVGhlIHN0YXRlIG9mIGEgbWVzaCBwZWVyIGxpbmsgYXMKKyAqCWRlZmluZWQgaW4gJmVudW0gbmw4MDIxMV9wbGlua19zdGF0ZS4gVXNlZCB3aGVuIHVzZXJzcGFjZSBpcworICoJZHJpdmluZyB0aGUgcGVlciBsaW5rIG1hbmFnZW1lbnQgc3RhdGUgbWFjaGluZS4KKyAqCUBOTDgwMjExX01FU0hfU0VUVVBfVVNFUlNQQUNFX0FNUEUgbXVzdCBiZSBlbmFibGVkLgorICoKKyAqIEBOTDgwMjExX0FUVFJfV09XTEFOX1NVUFBPUlRFRDogaW5kaWNhdGVzLCBhcyBwYXJ0IG9mIHRoZSB3aXBoeSBjYXBhYmlsaXRpZXMsCisgKgl0aGUgc3VwcG9ydGVkIFdvV0xBTiB0cmlnZ2VycworICogQE5MODAyMTFfQVRUUl9XT1dMQU5fVFJJR0dFUlM6IHVzZWQgYnkgJU5MODAyMTFfQ01EX1NFVF9XT1dMQU4gdG8KKyAqCWluZGljYXRlIHdoaWNoIFdvVyB0cmlnZ2VycyBzaG91bGQgYmUgZW5hYmxlZC4gVGhpcyBpcyBhbHNvCisgKgl1c2VkIGJ5ICVOTDgwMjExX0NNRF9HRVRfV09XTEFOIHRvIGdldCB0aGUgY3VycmVudGx5IGVuYWJsZWQgV29XTEFOCisgKgl0cmlnZ2Vycy4KKworICogQE5MODAyMTFfQVRUUl9TQ0hFRF9TQ0FOX0lOVEVSVkFMOiBJbnRlcnZhbCBiZXR3ZWVuIHNjaGVkdWxlZCBzY2FuCisgKgljeWNsZXMsIGluIG1zZWNzLgorICoKKyAqIEBOTDgwMjExX0FUVFJfSU5URVJGQUNFX0NPTUJJTkFUSU9OUzogTmVzdGVkIGF0dHJpYnV0ZSBsaXN0aW5nIHRoZSBzdXBwb3J0ZWQKKyAqCWludGVyZmFjZSBjb21iaW5hdGlvbnMuIEluIGVhY2ggbmVzdGVkIGl0ZW0sIGl0IGNvbnRhaW5zIGF0dHJpYnV0ZXMKKyAqCWRlZmluZWQgaW4gJmVudW0gbmw4MDIxMV9pZl9jb21iaW5hdGlvbl9hdHRycy4KKyAqIEBOTDgwMjExX0FUVFJfU09GVFdBUkVfSUZUWVBFUzogTmVzdGVkIGF0dHJpYnV0ZSAoanVzdCBsaWtlCisgKgklTkw4MDIxMV9BVFRSX1NVUFBPUlRFRF9JRlRZUEVTKSBjb250YWluaW5nIHRoZSBpbnRlcmZhY2UgdHlwZXMgdGhhdAorICoJYXJlIG1hbmFnZWQgaW4gc29mdHdhcmU6IGludGVyZmFjZXMgb2YgdGhlc2UgdHlwZXMgYXJlbid0IHN1YmplY3QgdG8KKyAqCWFueSByZXN0cmljdGlvbnMgaW4gdGhlaXIgbnVtYmVyIG9yIGNvbWJpbmF0aW9ucy4KICAqCiAgKiBATkw4MDIxMV9BVFRSX01BWDogaGlnaGVzdCBhdHRyaWJ1dGUgbnVtYmVyIGN1cnJlbnRseSBkZWZpbmVkCiAgKiBAX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlCkBAIC0xMDc0LDYgKzExODMsMTcgQEAKIAlOTDgwMjExX0FUVFJfV0lQSFlfQU5URU5OQV9BVkFJTF9UWCwKIAlOTDgwMjExX0FUVFJfV0lQSFlfQU5URU5OQV9BVkFJTF9SWCwKIAorCU5MODAyMTFfQVRUUl9TVVBQT1JUX01FU0hfQVVUSCwKKwlOTDgwMjExX0FUVFJfU1RBX1BMSU5LX1NUQVRFLAorCisJTkw4MDIxMV9BVFRSX1dPV0xBTl9UUklHR0VSUywKKwlOTDgwMjExX0FUVFJfV09XTEFOX1RSSUdHRVJTX1NVUFBPUlRFRCwKKworCU5MODAyMTFfQVRUUl9TQ0hFRF9TQ0FOX0lOVEVSVkFMLAorCisJTkw4MDIxMV9BVFRSX0lOVEVSRkFDRV9DT01CSU5BVElPTlMsCisJTkw4MDIxMV9BVFRSX1NPRlRXQVJFX0lGVFlQRVMsCisKIAkvKiBhZGQgYXR0cmlidXRlcyBoZXJlLCB1cGRhdGUgdGhlIHBvbGljeSBpbiBubDgwMjExLmMgKi8KIAogCV9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1QsCkBAIC0xMTI2LDcgKzEyNDYsOSBAQAogICogQE5MODAyMTFfSUZUWVBFX0FESE9DOiBpbmRlcGVuZGVudCBCU1MgbWVtYmVyCiAgKiBATkw4MDIxMV9JRlRZUEVfU1RBVElPTjogbWFuYWdlZCBCU1MgbWVtYmVyCiAgKiBATkw4MDIxMV9JRlRZUEVfQVA6IGFjY2VzcyBwb2ludAotICogQE5MODAyMTFfSUZUWVBFX0FQX1ZMQU46IFZMQU4gaW50ZXJmYWNlIGZvciBhY2Nlc3MgcG9pbnRzCisgKiBATkw4MDIxMV9JRlRZUEVfQVBfVkxBTjogVkxBTiBpbnRlcmZhY2UgZm9yIGFjY2VzcyBwb2ludHM7IFZMQU4gaW50ZXJmYWNlcworICoJYXJlIGEgYml0IHNwZWNpYWwgaW4gdGhhdCB0aGV5IG11c3QgYWx3YXlzIGJlIHRpZWQgdG8gYSBwcmUtZXhpc3RpbmcKKyAqCUFQIHR5cGUgaW50ZXJmYWNlLgogICogQE5MODAyMTFfSUZUWVBFX1dEUzogd2lyZWxlc3MgZGlzdHJpYnV0aW9uIGludGVyZmFjZQogICogQE5MODAyMTFfSUZUWVBFX01PTklUT1I6IG1vbml0b3IgaW50ZXJmYWNlIHJlY2VpdmluZyBhbGwgZnJhbWVzCiAgKiBATkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDogbWVzaCBwb2ludApAQCAtMTE2OCw2ICsxMjkwLDcgQEAKICAqCXdpdGggc2hvcnQgYmFya2VyIHByZWFtYmxlCiAgKiBATkw4MDIxMV9TVEFfRkxBR19XTUU6IHN0YXRpb24gaXMgV01FL1FvUyBjYXBhYmxlCiAgKiBATkw4MDIxMV9TVEFfRkxBR19NRlA6IHN0YXRpb24gdXNlcyBtYW5hZ2VtZW50IGZyYW1lIHByb3RlY3Rpb24KKyAqIEBOTDgwMjExX1NUQV9GTEFHX0FVVEhFTlRJQ0FURUQ6IHN0YXRpb24gaXMgYXV0aGVudGljYXRlZAogICogQE5MODAyMTFfU1RBX0ZMQUdfTUFYOiBoaWdoZXN0IHN0YXRpb24gZmxhZyBudW1iZXIgY3VycmVudGx5IGRlZmluZWQKICAqIEBfX05MODAyMTFfU1RBX0ZMQUdfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlCiAgKi8KQEAgLTExNzcsNiArMTMwMCw3IEBACiAJTkw4MDIxMV9TVEFfRkxBR19TSE9SVF9QUkVBTUJMRSwKIAlOTDgwMjExX1NUQV9GTEFHX1dNRSwKIAlOTDgwMjExX1NUQV9GTEFHX01GUCwKKwlOTDgwMjExX1NUQV9GTEFHX0FVVEhFTlRJQ0FURUQsCiAKIAkvKiBrZWVwIGxhc3QgKi8KIAlfX05MODAyMTFfU1RBX0ZMQUdfQUZURVJfTEFTVCwKQEAgLTEyMjIsNiArMTM0NiwzNiBAQAogfTsKIAogLyoqCisgKiBlbnVtIG5sODAyMTFfc3RhX2Jzc19wYXJhbSAtIEJTUyBpbmZvcm1hdGlvbiBjb2xsZWN0ZWQgYnkgU1RBCisgKgorICogVGhlc2UgYXR0cmlidXRlIHR5cGVzIGFyZSB1c2VkIHdpdGggJU5MODAyMTFfU1RBX0lORk9fQlNTX1BBUkFNCisgKiB3aGVuIGdldHRpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJpdHJhdGUgb2YgYSBzdGF0aW9uLgorICoKKyAqIEBfX05MODAyMTFfU1RBX0JTU19QQVJBTV9JTlZBTElEOiBhdHRyaWJ1dGUgbnVtYmVyIDAgaXMgcmVzZXJ2ZWQKKyAqIEBOTDgwMjExX1NUQV9CU1NfUEFSQU1fQ1RTX1BST1Q6IHdoZXRoZXIgQ1RTIHByb3RlY3Rpb24gaXMgZW5hYmxlZCAoZmxhZykKKyAqIEBOTDgwMjExX1NUQV9CU1NfUEFSQU1fU0hPUlRfUFJFQU1CTEU6ICB3aGV0aGVyIHNob3J0IHByZWFtYmxlIGlzIGVuYWJsZWQKKyAqCShmbGFnKQorICogQE5MODAyMTFfU1RBX0JTU19QQVJBTV9TSE9SVF9TTE9UX1RJTUU6ICB3aGV0aGVyIHNob3J0IHNsb3QgdGltZSBpcyBlbmFibGVkCisgKgkoZmxhZykKKyAqIEBOTDgwMjExX1NUQV9CU1NfUEFSQU1fRFRJTV9QRVJJT0Q6IERUSU0gcGVyaW9kIGZvciBiZWFjb25pbmcgKHU4KQorICogQE5MODAyMTFfU1RBX0JTU19QQVJBTV9CRUFDT05fSU5URVJWQUw6IEJlYWNvbiBpbnRlcnZhbCAodTE2KQorICogQE5MODAyMTFfU1RBX0JTU19QQVJBTV9NQVg6IGhpZ2hlc3Qgc3RhX2Jzc19wYXJhbSBudW1iZXIgY3VycmVudGx5IGRlZmluZWQKKyAqIEBfX05MODAyMTFfU1RBX0JTU19QQVJBTV9BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2UKKyAqLworZW51bSBubDgwMjExX3N0YV9ic3NfcGFyYW0geworCV9fTkw4MDIxMV9TVEFfQlNTX1BBUkFNX0lOVkFMSUQsCisJTkw4MDIxMV9TVEFfQlNTX1BBUkFNX0NUU19QUk9ULAorCU5MODAyMTFfU1RBX0JTU19QQVJBTV9TSE9SVF9QUkVBTUJMRSwKKwlOTDgwMjExX1NUQV9CU1NfUEFSQU1fU0hPUlRfU0xPVF9USU1FLAorCU5MODAyMTFfU1RBX0JTU19QQVJBTV9EVElNX1BFUklPRCwKKwlOTDgwMjExX1NUQV9CU1NfUEFSQU1fQkVBQ09OX0lOVEVSVkFMLAorCisJLyoga2VlcCBsYXN0ICovCisJX19OTDgwMjExX1NUQV9CU1NfUEFSQU1fQUZURVJfTEFTVCwKKwlOTDgwMjExX1NUQV9CU1NfUEFSQU1fTUFYID0gX19OTDgwMjExX1NUQV9CU1NfUEFSQU1fQUZURVJfTEFTVCAtIDEKK307CisKKy8qKgogICogZW51bSBubDgwMjExX3N0YV9pbmZvIC0gc3RhdGlvbiBpbmZvcm1hdGlvbgogICoKICAqIFRoZXNlIGF0dHJpYnV0ZSB0eXBlcyBhcmUgdXNlZCB3aXRoICVOTDgwMjExX0FUVFJfU1RBX0lORk8KQEAgLTEyMzMsNyArMTM4Nyw3IEBACiAgKiBATkw4MDIxMV9TVEFfSU5GT19UWF9CWVRFUzogdG90YWwgdHJhbnNtaXR0ZWQgYnl0ZXMgKHUzMiwgdG8gdGhpcyBzdGF0aW9uKQogICogQE5MODAyMTFfU1RBX0lORk9fU0lHTkFMOiBzaWduYWwgc3RyZW5ndGggb2YgbGFzdCByZWNlaXZlZCBQUERVICh1OCwgZEJtKQogICogQE5MODAyMTFfU1RBX0lORk9fVFhfQklUUkFURTogY3VycmVudCB1bmljYXN0IHR4IHJhdGUsIG5lc3RlZCBhdHRyaWJ1dGUKLSAqIAljb250YWluaW5nIGluZm8gYXMgcG9zc2libGUsIHNlZSAmZW51bSBubDgwMjExX3N0YV9pbmZvX3R4cmF0ZS4KKyAqIAljb250YWluaW5nIGluZm8gYXMgcG9zc2libGUsIHNlZSAmZW51bSBubDgwMjExX3JhdGVfaW5mbwogICogQE5MODAyMTFfU1RBX0lORk9fUlhfUEFDS0VUUzogdG90YWwgcmVjZWl2ZWQgcGFja2V0ICh1MzIsIGZyb20gdGhpcyBzdGF0aW9uKQogICogQE5MODAyMTFfU1RBX0lORk9fVFhfUEFDS0VUUzogdG90YWwgdHJhbnNtaXR0ZWQgcGFja2V0cyAodTMyLCB0byB0aGlzCiAgKglzdGF0aW9uKQpAQCAtMTI0Myw4ICsxMzk3LDEyIEBACiAgKiBATkw4MDIxMV9TVEFfSU5GT19MTElEOiB0aGUgc3RhdGlvbidzIG1lc2ggTExJRAogICogQE5MODAyMTFfU1RBX0lORk9fUExJRDogdGhlIHN0YXRpb24ncyBtZXNoIFBMSUQKICAqIEBOTDgwMjExX1NUQV9JTkZPX1BMSU5LX1NUQVRFOiBwZWVyIGxpbmsgc3RhdGUgZm9yIHRoZSBzdGF0aW9uCisgKgkoc2VlICVlbnVtIG5sODAyMTFfcGxpbmtfc3RhdGUpCiAgKiBATkw4MDIxMV9TVEFfSU5GT19SWF9CSVRSQVRFOiBsYXN0IHVuaWNhc3QgZGF0YSBmcmFtZSByeCByYXRlLCBuZXN0ZWQKICAqCWF0dHJpYnV0ZSwgbGlrZSBOTDgwMjExX1NUQV9JTkZPX1RYX0JJVFJBVEUuCisgKiBATkw4MDIxMV9TVEFfSU5GT19CU1NfUEFSQU06IGN1cnJlbnQgc3RhdGlvbidzIHZpZXcgb2YgQlNTLCBuZXN0ZWQgYXR0cmlidXRlCisgKiAgICAgY29udGFpbmluZyBpbmZvIGFzIHBvc3NpYmxlLCBzZWUgJmVudW0gbmw4MDIxMV9zdGFfYnNzX3BhcmFtCisgKiBATkw4MDIxMV9TVEFfSU5GT19DT05ORUNURURfVElNRTogdGltZSBzaW5jZSB0aGUgc3RhdGlvbiBpcyBsYXN0IGNvbm5lY3RlZAogICogQF9fTkw4MDIxMV9TVEFfSU5GT19BRlRFUl9MQVNUOiBpbnRlcm5hbAogICogQE5MODAyMTFfU1RBX0lORk9fTUFYOiBoaWdoZXN0IHBvc3NpYmxlIHN0YXRpb24gaW5mbyBhdHRyaWJ1dGUKICAqLwpAQCAtMTI2NCw2ICsxNDIyLDggQEAKIAlOTDgwMjExX1NUQV9JTkZPX1RYX0ZBSUxFRCwKIAlOTDgwMjExX1NUQV9JTkZPX1NJR05BTF9BVkcsCiAJTkw4MDIxMV9TVEFfSU5GT19SWF9CSVRSQVRFLAorCU5MODAyMTFfU1RBX0lORk9fQlNTX1BBUkFNLAorCU5MODAyMTFfU1RBX0lORk9fQ09OTkVDVEVEX1RJTUUsCiAKIAkvKiBrZWVwIGxhc3QgKi8KIAlfX05MODAyMTFfU1RBX0lORk9fQUZURVJfTEFTVCwKQEAgLTE2ODYsOSArMTg0NiwyMSBAQAogICogdmVuZG9yIHNwZWNpZmljIHBhdGggbWV0cmljIG9yIGRpc2FibGUgaXQgdG8gdXNlIHRoZSBkZWZhdWx0IEFpcnRpbWUKICAqIG1ldHJpYy4KICAqCi0gKiBATkw4MDIxMV9NRVNIX1NFVFVQX1ZFTkRPUl9QQVRIX1NFTF9JRTogQSB2ZW5kb3Igc3BlY2lmaWMgaW5mb3JtYXRpb24KLSAqIGVsZW1lbnQgdGhhdCB2ZW5kb3JzIHdpbGwgdXNlIHRvIGlkZW50aWZ5IHRoZSBwYXRoIHNlbGVjdGlvbiBtZXRob2RzIGFuZAotICogbWV0cmljcyBpbiB1c2UuCisgKiBATkw4MDIxMV9NRVNIX1NFVFVQX0lFOiBJbmZvcm1hdGlvbiBlbGVtZW50cyBmb3IgdGhpcyBtZXNoLCBmb3IgaW5zdGFuY2UsIGEKKyAqIHJvYnVzdCBzZWN1cml0eSBuZXR3b3JrIGllLCBvciBhIHZlbmRvciBzcGVjaWZpYyBpbmZvcm1hdGlvbiBlbGVtZW50IHRoYXQKKyAqIHZlbmRvcnMgd2lsbCB1c2UgdG8gaWRlbnRpZnkgdGhlIHBhdGggc2VsZWN0aW9uIG1ldGhvZHMgYW5kIG1ldHJpY3MgaW4gdXNlLgorICoKKyAqIEBOTDgwMjExX01FU0hfU0VUVVBfVVNFUlNQQUNFX0FVVEg6IEVuYWJsZSB0aGlzIG9wdGlvbiBpZiBhbiBhdXRoZW50aWNhdGlvbgorICogZGFlbW9uIHdpbGwgYmUgYXV0aGVudGljYXRpbmcgbWVzaCBjYW5kaWRhdGVzLgorICoKKyAqIEBOTDgwMjExX01FU0hfU0VUVVBfVVNFUlNQQUNFX0FNUEU6IEVuYWJsZSB0aGlzIG9wdGlvbiBpZiBhbiBhdXRoZW50aWNhdGlvbgorICogZGFlbW9uIHdpbGwgYmUgc2VjdXJpbmcgcGVlciBsaW5rIGZyYW1lcy4gIEFNUEUgaXMgYSBzZWN1cmVkIHZlcnNpb24gb2YgTWVzaAorICogUGVlcmluZyBNYW5hZ2VtZW50IChNUE0pIGFuZCBpcyBpbXBsZW1lbnRlZCB3aXRoIHRoZSBhc3Npc3RhbmNlIG9mIGEKKyAqIHVzZXJzcGFjZSBkYWVtb24uICBXaGVuIHRoaXMgZmxhZyBpcyBzZXQsIHRoZSBrZXJuZWwgd2lsbCBzZW5kIHBlZXIKKyAqIG1hbmFnZW1lbnQgZnJhbWVzIHRvIGEgdXNlcnNwYWNlIGRhZW1vbiB0aGF0IHdpbGwgaW1wbGVtZW50IEFNUEUKKyAqIGZ1bmN0aW9uYWxpdHkgKHNlY3VyaXR5IGNhcGFiaWxpdGllcyBzZWxlY3Rpb24sIGtleSBjb25maXJtYXRpb24sIGFuZCBrZXkKKyAqIG1hbmFnZW1lbnQpLiAgV2hlbiB0aGUgZmxhZyBpcyB1bnNldCAoZGVmYXVsdCksIHRoZSBrZXJuZWwgY2FuIGF1dG9ub21vdXNseQorICogY29tcGxldGUgKHVuc2VjdXJlZCkgbWVzaCBwZWVyaW5nIHdpdGhvdXQgdGhlIG5lZWQgb2YgYSB1c2Vyc3BhY2UgZGFlbW9uLgogICoKICAqIEBOTDgwMjExX01FU0hfU0VUVVBfQVRUUl9NQVg6IGhpZ2hlc3QgcG9zc2libGUgbWVzaCBzZXR1cCBhdHRyaWJ1dGUgbnVtYmVyCiAgKiBAX19OTDgwMjExX01FU0hfU0VUVVBfQVRUUl9BRlRFUl9MQVNUOiBJbnRlcm5hbCB1c2UKQEAgLTE2OTcsNyArMTg2OSw5IEBACiAJX19OTDgwMjExX01FU0hfU0VUVVBfSU5WQUxJRCwKIAlOTDgwMjExX01FU0hfU0VUVVBfRU5BQkxFX1ZFTkRPUl9QQVRIX1NFTCwKIAlOTDgwMjExX01FU0hfU0VUVVBfRU5BQkxFX1ZFTkRPUl9NRVRSSUMsCi0JTkw4MDIxMV9NRVNIX1NFVFVQX1ZFTkRPUl9QQVRIX1NFTF9JRSwKKwlOTDgwMjExX01FU0hfU0VUVVBfSUUsCisJTkw4MDIxMV9NRVNIX1NFVFVQX1VTRVJTUEFDRV9BVVRILAorCU5MODAyMTFfTUVTSF9TRVRVUF9VU0VSU1BBQ0VfQU1QRSwKIAogCS8qIGtlZXAgbGFzdCAqLwogCV9fTkw4MDIxMV9NRVNIX1NFVFVQX0FUVFJfQUZURVJfTEFTVCwKQEAgLTIwMDIsNCArMjE3NiwxODkgQEAKIAlOTDgwMjExX1RYX1BPV0VSX0ZJWEVELAogfTsKIAorLyoqCisgKiBlbnVtIG5sODAyMTFfd293bGFuX3BhY2tldF9wYXR0ZXJuX2F0dHIgLSBXb1dMQU4gcGFja2V0IHBhdHRlcm4gYXR0cmlidXRlCisgKiBAX19OTDgwMjExX1dPV0xBTl9QS1RQQVRfSU5WQUxJRDogaW52YWxpZCBudW1iZXIgZm9yIG5lc3RlZCBhdHRyaWJ1dGUKKyAqIEBOTDgwMjExX1dPV0xBTl9QS1RQQVRfUEFUVEVSTjogdGhlIHBhdHRlcm4sIHZhbHVlcyB3aGVyZSB0aGUgbWFzayBoYXMKKyAqCWEgemVybyBiaXQgYXJlIGlnbm9yZWQKKyAqIEBOTDgwMjExX1dPV0xBTl9QS1RQQVRfTUFTSzogcGF0dGVybiBtYXNrLCBtdXN0IGJlIGxvbmcgZW5vdWdoIHRvIGhhdmUKKyAqCWEgYml0IGZvciBlYWNoIGJ5dGUgaW4gdGhlIHBhdHRlcm4uIFRoZSBsb3dlc3Qtb3JkZXIgYml0IGNvcnJlc3BvbmRzCisgKgl0byB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgcGF0dGVybiwgYnV0IHRoZSBieXRlcyBvZiB0aGUgcGF0dGVybiBhcmUKKyAqCWluIGEgbGl0dGxlLWVuZGlhbi1saWtlIGZvcm1hdCwgaS5lLiB0aGUgOXRoIGJ5dGUgb2YgdGhlIHBhdHRlcm4KKyAqCWNvcnJlc3BvbmRzIHRvIHRoZSBsb3dlc3Qtb3JkZXIgYml0IGluIHRoZSBzZWNvbmQgYnl0ZSBvZiB0aGUgbWFzay4KKyAqCUZvciBleGFtcGxlOiBUaGUgbWF0Y2ggMDA6eHg6MDA6MDA6eHg6MDA6MDA6MDA6MDA6eHg6eHg6eHggKHdoZXJlCisgKgl4eCBpbmRpY2F0ZXMgImRvbid0IGNhcmUiKSB3b3VsZCBiZSByZXByZXNlbnRlZCBieSBhIHBhdHRlcm4gb2YKKyAqCXR3ZWx2ZSB6ZXJvIGJ5dGVzLCBhbmQgYSBtYXNrIG9mICIweGVkLDB4MDciLgorICoJTm90ZSB0aGF0IHRoZSBwYXR0ZXJuIG1hdGNoaW5nIGlzIGRvbmUgYXMgdGhvdWdoIGZyYW1lcyB3ZXJlIG5vdAorICoJODAyLjExIGZyYW1lcyBidXQgODAyLjMgZnJhbWVzLCBpLmUuIHRoZSBmcmFtZSBpcyBmdWxseSB1bnBhY2tlZAorICoJZmlyc3QgKGluY2x1ZGluZyBTTkFQIGhlYWRlciB1bnBhY2tpbmcpIGFuZCB0aGVuIG1hdGNoZWQuCisgKiBATlVNX05MODAyMTFfV09XTEFOX1BLVFBBVDogbnVtYmVyIG9mIGF0dHJpYnV0ZXMKKyAqIEBNQVhfTkw4MDIxMV9XT1dMQU5fUEtUUEFUOiBtYXggYXR0cmlidXRlIG51bWJlcgorICovCitlbnVtIG5sODAyMTFfd293bGFuX3BhY2tldF9wYXR0ZXJuX2F0dHIgeworCV9fTkw4MDIxMV9XT1dMQU5fUEtUUEFUX0lOVkFMSUQsCisJTkw4MDIxMV9XT1dMQU5fUEtUUEFUX01BU0ssCisJTkw4MDIxMV9XT1dMQU5fUEtUUEFUX1BBVFRFUk4sCisKKwlOVU1fTkw4MDIxMV9XT1dMQU5fUEtUUEFULAorCU1BWF9OTDgwMjExX1dPV0xBTl9QS1RQQVQgPSBOVU1fTkw4MDIxMV9XT1dMQU5fUEtUUEFUIC0gMSwKK307CisKKy8qKgorICogc3RydWN0IG5sODAyMTFfd293bGFuX3BhdHRlcm5fc3VwcG9ydCAtIHBhdHRlcm4gc3VwcG9ydCBpbmZvcm1hdGlvbgorICogQG1heF9wYXR0ZXJuczogbWF4aW11bSBudW1iZXIgb2YgcGF0dGVybnMgc3VwcG9ydGVkCisgKiBAbWluX3BhdHRlcm5fbGVuOiBtaW5pbXVtIGxlbmd0aCBvZiBlYWNoIHBhdHRlcm4KKyAqIEBtYXhfcGF0dGVybl9sZW46IG1heGltdW0gbGVuZ3RoIG9mIGVhY2ggcGF0dGVybgorICoKKyAqIFRoaXMgc3RydWN0IGlzIGNhcnJpZWQgaW4gJU5MODAyMTFfV09XTEFOX1RSSUdfUEtUX1BBVFRFUk4gd2hlbgorICogdGhhdCBpcyBwYXJ0IG9mICVOTDgwMjExX0FUVFJfV09XTEFOX1RSSUdHRVJTX1NVUFBPUlRFRCBpbiB0aGUKKyAqIGNhcGFiaWxpdHkgaW5mb3JtYXRpb24gZ2l2ZW4gYnkgdGhlIGtlcm5lbCB0byB1c2Vyc3BhY2UuCisgKi8KK3N0cnVjdCBubDgwMjExX3dvd2xhbl9wYXR0ZXJuX3N1cHBvcnQgeworCV9fdTMyIG1heF9wYXR0ZXJuczsKKwlfX3UzMiBtaW5fcGF0dGVybl9sZW47CisJX191MzIgbWF4X3BhdHRlcm5fbGVuOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoqCisgKiBlbnVtIG5sODAyMTFfd293bGFuX3RyaWdnZXJzIC0gV29XTEFOIHRyaWdnZXIgZGVmaW5pdGlvbnMKKyAqIEBfX05MODAyMTFfV09XTEFOX1RSSUdfSU5WQUxJRDogaW52YWxpZCBudW1iZXIgZm9yIG5lc3RlZCBhdHRyaWJ1dGVzCisgKiBATkw4MDIxMV9XT1dMQU5fVFJJR19BTlk6IHdha2UgdXAgb24gYW55IGFjdGl2aXR5LCBkbyBub3QgcmVhbGx5IHB1dAorICoJdGhlIGNoaXAgaW50byBhIHNwZWNpYWwgc3RhdGUgLS0gd29ya3MgYmVzdCB3aXRoIGNoaXBzIHRoYXQgaGF2ZQorICoJc3VwcG9ydCBmb3IgbG93LXBvd2VyIG9wZXJhdGlvbiBhbHJlYWR5IChmbGFnKQorICogQE5MODAyMTFfV09XTEFOX1RSSUdfRElTQ09OTkVDVDogd2FrZSB1cCBvbiBkaXNjb25uZWN0LCB0aGUgd2F5IGRpc2Nvbm5lY3QKKyAqCWlzIGRldGVjdGVkIGlzIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIChmbGFnKQorICogQE5MODAyMTFfV09XTEFOX1RSSUdfTUFHSUNfUEtUOiB3YWtlIHVwIG9uIG1hZ2ljIHBhY2tldCAoNnggMHhmZiwgZm9sbG93ZWQKKyAqCWJ5IDE2IHJlcGV0aXRpb25zIG9mIE1BQyBhZGRyLCBhbnl3aGVyZSBpbiBwYXlsb2FkKSAoZmxhZykKKyAqIEBOTDgwMjExX1dPV0xBTl9UUklHX1BLVF9QQVRURVJOOiB3YWtlIHVwIG9uIHRoZSBzcGVjaWZpZWQgcGFja2V0IHBhdHRlcm5zCisgKgl3aGljaCBhcmUgcGFzc2VkIGluIGFuIGFycmF5IG9mIG5lc3RlZCBhdHRyaWJ1dGVzLCBlYWNoIG5lc3RlZCBhdHRyaWJ1dGUKKyAqCWRlZmluaW5nIGEgd2l0aCBhdHRyaWJ1dGVzIGZyb20gJnN0cnVjdCBubDgwMjExX3dvd2xhbl90cmlnX3BrdF9wYXR0ZXJuLgorICoJRWFjaCBwYXR0ZXJuIGRlZmluZXMgYSB3YWtldXAgcGFja2V0LiBUaGUgbWF0Y2hpbmcgaXMgZG9uZSBvbiB0aGUgTVNEVSwKKyAqCWkuZS4gYXMgdGhvdWdoIHRoZSBwYWNrZXQgd2FzIGFuIDgwMi4zIHBhY2tldCwgc28gdGhlIHBhdHRlcm4gbWF0Y2hpbmcKKyAqCWlzIGRvbmUgYWZ0ZXIgdGhlIHBhY2tldCBpcyBjb252ZXJ0ZWQgdG8gdGhlIE1TRFUuCisgKgorICoJSW4gJU5MODAyMTFfQVRUUl9XT1dMQU5fVFJJR0dFUlNfU1VQUE9SVEVELCBpdCBpcyBhIGJpbmFyeSBhdHRyaWJ1dGUKKyAqCWNhcnJ5aW5nIGEgJnN0cnVjdCBubDgwMjExX3dvd2xhbl9wYXR0ZXJuX3N1cHBvcnQuCisgKiBATlVNX05MODAyMTFfV09XTEFOX1RSSUc6IG51bWJlciBvZiB3YWtlIG9uIHdpcmVsZXNzIHRyaWdnZXJzCisgKiBATUFYX05MODAyMTFfV09XTEFOX1RSSUc6IGhpZ2hlc3Qgd293bGFuIHRyaWdnZXIgYXR0cmlidXRlIG51bWJlcgorICovCitlbnVtIG5sODAyMTFfd293bGFuX3RyaWdnZXJzIHsKKwlfX05MODAyMTFfV09XTEFOX1RSSUdfSU5WQUxJRCwKKwlOTDgwMjExX1dPV0xBTl9UUklHX0FOWSwKKwlOTDgwMjExX1dPV0xBTl9UUklHX0RJU0NPTk5FQ1QsCisJTkw4MDIxMV9XT1dMQU5fVFJJR19NQUdJQ19QS1QsCisJTkw4MDIxMV9XT1dMQU5fVFJJR19QS1RfUEFUVEVSTiwKKworCS8qIGtlZXAgbGFzdCAqLworCU5VTV9OTDgwMjExX1dPV0xBTl9UUklHLAorCU1BWF9OTDgwMjExX1dPV0xBTl9UUklHID0gTlVNX05MODAyMTFfV09XTEFOX1RSSUcgLSAxCit9OworCisvKioKKyAqIGVudW0gbmw4MDIxMV9pZmFjZV9saW1pdF9hdHRycyAtIGxpbWl0IGF0dHJpYnV0ZXMKKyAqIEBOTDgwMjExX0lGQUNFX0xJTUlUX1VOU1BFQzogKHJlc2VydmVkKQorICogQE5MODAyMTFfSUZBQ0VfTElNSVRfTUFYOiBtYXhpbXVtIG51bWJlciBvZiBpbnRlcmZhY2VzIHRoYXQKKyAqCWNhbiBiZSBjaG9zZW4gZnJvbSB0aGlzIHNldCBvZiBpbnRlcmZhY2UgdHlwZXMgKHUzMikKKyAqIEBOTDgwMjExX0lGQUNFX0xJTUlUX1RZUEVTOiBuZXN0ZWQgYXR0cmlidXRlIGNvbnRhaW5pbmcgYQorICoJZmxhZyBhdHRyaWJ1dGUgZm9yIGVhY2ggaW50ZXJmYWNlIHR5cGUgaW4gdGhpcyBzZXQKKyAqIEBOVU1fTkw4MDIxMV9JRkFDRV9MSU1JVDogbnVtYmVyIG9mIGF0dHJpYnV0ZXMKKyAqIEBNQVhfTkw4MDIxMV9JRkFDRV9MSU1JVDogaGlnaGVzdCBhdHRyaWJ1dGUgbnVtYmVyCisgKi8KK2VudW0gbmw4MDIxMV9pZmFjZV9saW1pdF9hdHRycyB7CisJTkw4MDIxMV9JRkFDRV9MSU1JVF9VTlNQRUMsCisJTkw4MDIxMV9JRkFDRV9MSU1JVF9NQVgsCisJTkw4MDIxMV9JRkFDRV9MSU1JVF9UWVBFUywKKworCS8qIGtlZXAgbGFzdCAqLworCU5VTV9OTDgwMjExX0lGQUNFX0xJTUlULAorCU1BWF9OTDgwMjExX0lGQUNFX0xJTUlUID0gTlVNX05MODAyMTFfSUZBQ0VfTElNSVQgLSAxCit9OworCisvKioKKyAqIGVudW0gbmw4MDIxMV9pZl9jb21iaW5hdGlvbl9hdHRycyAtLSBpbnRlcmZhY2UgY29tYmluYXRpb24gYXR0cmlidXRlcworICoKKyAqIEBOTDgwMjExX0lGQUNFX0NPTUJfVU5TUEVDOiAocmVzZXJ2ZWQpCisgKiBATkw4MDIxMV9JRkFDRV9DT01CX0xJTUlUUzogTmVzdGVkIGF0dHJpYnV0ZXMgY29udGFpbmluZyB0aGUgbGltaXRzCisgKglmb3IgZ2l2ZW4gaW50ZXJmYWNlIHR5cGVzLCBzZWUgJmVudW0gbmw4MDIxMV9pZmFjZV9saW1pdF9hdHRycy4KKyAqIEBOTDgwMjExX0lGQUNFX0NPTUJfTUFYTlVNOiB1MzIgYXR0cmlidXRlIGdpdmluZyB0aGUgdG90YWwgbnVtYmVyIG9mCisgKglpbnRlcmZhY2VzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgaW4gdGhpcyBncm91cC4gVGhpcyBudW1iZXIgZG9lc24ndAorICoJYXBwbHkgdG8gaW50ZXJmYWNlcyBwdXJlbHkgbWFuYWdlZCBpbiBzb2Z0d2FyZSwgd2hpY2ggYXJlIGxpc3RlZAorICoJaW4gYSBzZXBhcmF0ZSBhdHRyaWJ1dGUgJU5MODAyMTFfQVRUUl9JTlRFUkZBQ0VTX1NPRlRXQVJFLgorICogQE5MODAyMTFfSUZBQ0VfQ09NQl9TVEFfQVBfQklfTUFUQ0g6IGZsYWcgYXR0cmlidXRlIHNwZWNpZnlpbmcgdGhhdAorICoJYmVhY29uIGludGVydmFscyB3aXRoaW4gdGhpcyBncm91cCBtdXN0IGJlIGFsbCB0aGUgc2FtZSBldmVuIGZvcgorICoJaW5mcmFzdHJ1Y3R1cmUgYW5kIEFQL0dPIGNvbWJpbmF0aW9ucywgaS5lLiB0aGUgR08ocykgbXVzdCBhZG9wdAorICoJdGhlIGluZnJhc3RydWN0dXJlIG5ldHdvcmsncyBiZWFjb24gaW50ZXJ2YWwuCisgKiBATkw4MDIxMV9JRkFDRV9DT01CX05VTV9DSEFOTkVMUzogdTMyIGF0dHJpYnV0ZSBzcGVjaWZ5aW5nIGhvdyBtYW55CisgKglkaWZmZXJlbnQgY2hhbm5lbHMgbWF5IGJlIHVzZWQgd2l0aGluIHRoaXMgZ3JvdXAuCisgKiBATlVNX05MODAyMTFfSUZBQ0VfQ09NQjogbnVtYmVyIG9mIGF0dHJpYnV0ZXMKKyAqIEBNQVhfTkw4MDIxMV9JRkFDRV9DT01COiBoaWdoZXN0IGF0dHJpYnV0ZSBudW1iZXIKKyAqCisgKiBFeGFtcGxlczoKKyAqCWxpbWl0cyA9IFsgI3tTVEF9IDw9IDEsICN7QVB9IDw9IDEgXSwgbWF0Y2hpbmcgQkksIGNoYW5uZWxzID0gMSwgbWF4ID0gMgorICoJPT4gYWxsb3dzIGFuIEFQIGFuZCBhIFNUQSB0aGF0IG11c3QgbWF0Y2ggQklzCisgKgorICoJbnVtYmVycyA9IFsgI3tBUCwgUDJQLUdPfSA8PSA4IF0sIGNoYW5uZWxzID0gMSwgbWF4ID0gOAorICoJPT4gYWxsb3dzIDggb2YgQVAvR08KKyAqCisgKgludW1iZXJzID0gWyAje1NUQX0gPD0gMiBdLCBjaGFubmVscyA9IDIsIG1heCA9IDIKKyAqCT0+IGFsbG93cyB0d28gU1RBcyBvbiBkaWZmZXJlbnQgY2hhbm5lbHMKKyAqCisgKgludW1iZXJzID0gWyAje1NUQX0gPD0gMSwgI3tQMlAtY2xpZW50LFAyUC1HT30gPD0gMyBdLCBtYXggPSA0CisgKgk9PiBhbGxvd3MgYSBTVEEgcGx1cyB0aHJlZSBQMlAgaW50ZXJmYWNlcworICoKKyAqIFRoZSBsaXN0IG9mIHRoZXNlIGZvdXIgcG9zc2libGl0aWVzIGNvdWxkIGNvbXBsZXRlbHkgYmUgY29udGFpbmVkCisgKiB3aXRoaW4gdGhlICVOTDgwMjExX0FUVFJfSU5URVJGQUNFX0NPTUJJTkFUSU9OUyBhdHRyaWJ1dGUgdG8gaW5kaWNhdGUKKyAqIHRoYXQgYW55IG9mIHRoZXNlIGdyb3VwcyBtdXN0IG1hdGNoLgorICoKKyAqICJDb21iaW5hdGlvbnMiIG9mIGp1c3QgYSBzaW5nbGUgaW50ZXJmYWNlIHdpbGwgbm90IGJlIGxpc3RlZCBoZXJlLAorICogYSBzaW5nbGUgaW50ZXJmYWNlIG9mIGFueSB2YWxpZCBpbnRlcmZhY2UgdHlwZSBpcyBhc3N1bWVkIHRvIGFsd2F5cworICogYmUgcG9zc2libGUgYnkgaXRzZWxmLiBUaGlzIG1lYW5zIHRoYXQgaW1wbGljaXRseSwgZm9yIGVhY2ggdmFsaWQKKyAqIGludGVyZmFjZSB0eXBlLCB0aGUgZm9sbG93aW5nIGdyb3VwIGFsd2F5cyBleGlzdHM6CisgKgludW1iZXJzID0gWyAjezx0eXBlPn0gPD0gMSBdLCBjaGFubmVscyA9IDEsIG1heCA9IDEKKyAqLworZW51bSBubDgwMjExX2lmX2NvbWJpbmF0aW9uX2F0dHJzIHsKKwlOTDgwMjExX0lGQUNFX0NPTUJfVU5TUEVDLAorCU5MODAyMTFfSUZBQ0VfQ09NQl9MSU1JVFMsCisJTkw4MDIxMV9JRkFDRV9DT01CX01BWE5VTSwKKwlOTDgwMjExX0lGQUNFX0NPTUJfU1RBX0FQX0JJX01BVENILAorCU5MODAyMTFfSUZBQ0VfQ09NQl9OVU1fQ0hBTk5FTFMsCisKKwkvKiBrZWVwIGxhc3QgKi8KKwlOVU1fTkw4MDIxMV9JRkFDRV9DT01CLAorCU1BWF9OTDgwMjExX0lGQUNFX0NPTUIgPSBOVU1fTkw4MDIxMV9JRkFDRV9DT01CIC0gMQorfTsKKworCisvKioKKyAqIGVudW0gbmw4MDIxMV9wbGlua19zdGF0ZSAtIHN0YXRlIG9mIGEgbWVzaCBwZWVyIGxpbmsgZmluaXRlIHN0YXRlIG1hY2hpbmUKKyAqCisgKiBATkw4MDIxMV9QTElOS19MSVNURU46IGluaXRpYWwgc3RhdGUsIGNvbnNpZGVyZWQgdGhlIGltcGxpY2l0CisgKglzdGF0ZSBvZiBub24gZXhpc3RhbnQgbWVzaCBwZWVyIGxpbmtzCisgKiBATkw4MDIxMV9QTElOS19PUE5fU05UOiBtZXNoIHBsaW5rIG9wZW4gZnJhbWUgaGFzIGJlZW4gc2VudCB0bworICoJdGhpcyBtZXNoIHBlZXIKKyAqIEBOTDgwMjExX1BMSU5LX09QTl9SQ1ZEOiBtZXNoIHBsaW5rIG9wZW4gZnJhbWUgaGFzIGJlZW4gcmVjZWl2ZWQKKyAqCWZyb20gdGhpcyBtZXNoIHBlZXIKKyAqIEBOTDgwMjExX1BMSU5LX0NORl9SQ1ZEOiBtZXNoIHBsaW5rIGNvbmZpcm0gZnJhbWUgaGFzIGJlZW4KKyAqCXJlY2VpdmVkIGZyb20gdGhpcyBtZXNoIHBlZXIKKyAqIEBOTDgwMjExX1BMSU5LX0VTVEFCOiBtZXNoIHBlZXIgbGluayBpcyBlc3RhYmxpc2hlZAorICogQE5MODAyMTFfUExJTktfSE9MRElORzogbWVzaCBwZWVyIGxpbmsgaXMgYmVpbmcgY2xvc2VkIG9yIGNhbmNlbGxlZAorICogQE5MODAyMTFfUExJTktfQkxPQ0tFRDogYWxsIGZyYW1lcyB0cmFuc21pdHRlZCBmcm9tIHRoaXMgbWVzaAorICoJcGxpbmsgYXJlIGRpc2NhcmRlZAorICogQE5VTV9OTDgwMjExX1BMSU5LX1NUQVRFUzogbnVtYmVyIG9mIHBlZXIgbGluayBzdGF0ZXMKKyAqIEBNQVhfTkw4MDIxMV9QTElOS19TVEFURVM6IGhpZ2hlc3QgbnVtZXJpY2FsIHZhbHVlIG9mIHBsaW5rIHN0YXRlcworICovCitlbnVtIG5sODAyMTFfcGxpbmtfc3RhdGUgeworCU5MODAyMTFfUExJTktfTElTVEVOLAorCU5MODAyMTFfUExJTktfT1BOX1NOVCwKKwlOTDgwMjExX1BMSU5LX09QTl9SQ1ZELAorCU5MODAyMTFfUExJTktfQ05GX1JDVkQsCisJTkw4MDIxMV9QTElOS19FU1RBQiwKKwlOTDgwMjExX1BMSU5LX0hPTERJTkcsCisJTkw4MDIxMV9QTElOS19CTE9DS0VELAorCisJLyoga2VlcCBsYXN0ICovCisJTlVNX05MODAyMTFfUExJTktfU1RBVEVTLAorCU1BWF9OTDgwMjExX1BMSU5LX1NUQVRFUyA9IE5VTV9OTDgwMjExX1BMSU5LX1NUQVRFUyAtIDEKK307CisKICNlbmRpZiAvKiBfX0xJTlVYX05MODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vZl9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvb2ZfZGV2aWNlLmgKaW5kZXggOGJmZTZjMS4uYWU1NjM4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9vZl9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L29mX2RldmljZS5oCkBAIC0yMSw4ICsyMSw3IEBACiBzdGF0aWMgaW5saW5lIGludCBvZl9kcml2ZXJfbWF0Y2hfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJIGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCiB7Ci0JZGV2LT5vZl9tYXRjaCA9IG9mX21hdGNoX2RldmljZShkcnYtPm9mX21hdGNoX3RhYmxlLCBkZXYpOwotCXJldHVybiBkZXYtPm9mX21hdGNoICE9IE5VTEw7CisJcmV0dXJuIG9mX21hdGNoX2RldmljZShkcnYtPm9mX21hdGNoX3RhYmxlLCBkZXYpICE9IE5VTEw7CiB9CiAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXZfZ2V0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CkBAIC01OCw2ICs1NywxMSBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgb2ZfZGV2aWNlX25vZGVfcHV0KHN0cnVjdCBkZXZpY2UgKmRldikgeyB9CiAKK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfbWF0Y2hfZGV2aWNlKAorCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaGVzLCBjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIE5VTEw7Cit9CiAjZW5kaWYgLyogQ09ORklHX09GX0RFVklDRSAqLwogCiAjZW5kaWYgLyogX0xJTlVYX09GX0RFVklDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29mX2lycS5oIGIvaW5jbHVkZS9saW51eC9vZl9pcnEuaAppbmRleCAxMDllMDEzLi5lNjk1NWY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L29mX2lycS5oCisrKyBiL2luY2x1ZGUvbGludXgvb2ZfaXJxLmgKQEAgLTY4LDYgKzY4LDcgQEAKIGV4dGVybiBpbnQgb2ZfaXJxX2NvdW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2KTsKIGV4dGVybiBpbnQgb2ZfaXJxX3RvX3Jlc291cmNlX3RhYmxlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LAogCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgaW50IG5yX2lycXMpOworZXh0ZXJuIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfaXJxX2ZpbmRfcGFyZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQpOwogCiAjZW5kaWYgLyogQ09ORklHX09GX0lSUSAqLwogI2VuZGlmIC8qIENPTkZJR19PRiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2ktYXRzLmggYi9pbmNsdWRlL2xpbnV4L3BjaS1hdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTU4MjRmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9wY2ktYXRzLmgKQEAgLTAsMCArMSw1MiBAQAorI2lmbmRlZiBMSU5VWF9QQ0lfQVRTX0gKKyNkZWZpbmUgTElOVVhfUENJX0FUU19ICisKKy8qIEFkZHJlc3MgVHJhbnNsYXRpb24gU2VydmljZSAqLworc3RydWN0IHBjaV9hdHMgeworCWludCBwb3M7ICAgICAgICAvKiBjYXBhYmlsaXR5IHBvc2l0aW9uICovCisJaW50IHN0dTsgICAgICAgIC8qIFNtYWxsZXN0IFRyYW5zbGF0aW9uIFVuaXQgKi8KKwlpbnQgcWRlcDsgICAgICAgLyogSW52YWxpZGF0ZSBRdWV1ZSBEZXB0aCAqLworCWludCByZWZfY250OyAgICAvKiBQaHlzaWNhbCBGdW5jdGlvbiByZWZlcmVuY2UgY291bnQgKi8KKwl1bnNpZ25lZCBpbnQgaXNfZW5hYmxlZDoxOyAgICAgIC8qIEVuYWJsZSBiaXQgaXMgc2V0ICovCit9OworCisjaWZkZWYgQ09ORklHX1BDSV9JT1YKKworZXh0ZXJuIGludCBwY2lfZW5hYmxlX2F0cyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcHMpOworZXh0ZXJuIHZvaWQgcGNpX2Rpc2FibGVfYXRzKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworZXh0ZXJuIGludCBwY2lfYXRzX3F1ZXVlX2RlcHRoKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworLyoqCisgKiBwY2lfYXRzX2VuYWJsZWQgLSBxdWVyeSB0aGUgQVRTIHN0YXR1cworICogQGRldjogdGhlIFBDSSBkZXZpY2UKKyAqCisgKiBSZXR1cm5zIDEgaWYgQVRTIGNhcGFiaWxpdHkgaXMgZW5hYmxlZCwgb3IgMCBpZiBub3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9hdHNfZW5hYmxlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXJldHVybiBkZXYtPmF0cyAmJiBkZXYtPmF0cy0+aXNfZW5hYmxlZDsKK30KKworI2Vsc2UgLyogQ09ORklHX1BDSV9JT1YgKi8KKworc3RhdGljIGlubGluZSBpbnQgcGNpX2VuYWJsZV9hdHMoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHBzKQoreworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2Rpc2FibGVfYXRzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9hdHNfcXVldWVfZGVwdGgoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGNpX2F0c19lbmFibGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfUENJX0lPViAqLworCisjZW5kaWYgLyogTElOVVhfUENJX0FUU19IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKaW5kZXggNGUyYzkxNS4uODY1MmE0ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKQEAgLTYwOCw2ICs2MDgsOCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BVFJPWF9HNTUwCTB4MjUyNwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BVFJPWF9WSUEJMHg0NTM2CiAKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9NT0JJTElUWV9FTEVDVFJPTklDUwkweDE0ZjIKKwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NUCQkweDEwMmMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DVF82OTAwMAkJMHgwMGMwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1RfNjU1NDUJCTB4MDBkOApAQCAtMjQ3NywxNSArMjQ3OSwxMiBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODQwX0hCCTB4MWEyMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODQ1X0hCCTB4MWEzMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVQJMHgxYTM4Ci0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfQ09VR0FSUE9JTlRfU01CVVMJMHgxYzIyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfQ09VR0FSUE9JTlRfTFBDX01JTgkweDFjNDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9DT1VHQVJQT0lOVF9MUENfTUFYCTB4MWM1ZgotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1BBVFNCVVJHX1NNQlVTCTB4MWQyMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1BBVFNCVVJHX0xQQ18wCTB4MWQ0MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1BBVFNCVVJHX0xQQ18xCTB4MWQ0MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0RIODlYWENDX0xQQ19NSU4JMHgyMzEwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfREg4OVhYQ0NfTFBDX01BWAkweDIzMWYKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9ESDg5WFhDQ19TTUJVUwkweDIzMzAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFBXzAJMHgyNDEwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQV8xCTB4MjQxMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUFfMwkweDI0MTMKQEAgLTI2OTYsNyArMjY5NSw2IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIMTBfNQkweDNhNjAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF81XzM0MDBfU0VSSUVTX0xQQ19NSU4JMHgzYjAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfNV8zNDAwX1NFUklFU19MUENfTUFYCTB4M2IxZgotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzVfMzQwMF9TRVJJRVNfU01CVVMJMHgzYjMwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSU9BVF9TTkIJMHg0MDJmCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfNTEwMF8xNgkweDY1ZjAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF81MTAwXzIxCTB4NjVmNQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJjcHUuaCBiL2luY2x1ZGUvbGludXgvcGVyY3B1LmgKaW5kZXggM2E1YzQ0NC4uOGI5NzMwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJjcHUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oCkBAIC05NDgsNyArOTQ4LDcgQEAKIAlpcnFzYWZlX2dlbmVyaWNfY3B1X2NtcHhjaGdfZG91YmxlKHBjcDEsIHBjcDIsIG92YWwxLCBvdmFsMiwgbnZhbDEsIG52YWwyKQogIyBlbmRpZgogIyBkZWZpbmUgaXJxc2FmZV9jcHVfY21weGNoZ19kb3VibGUocGNwMSwgcGNwMiwgb3ZhbDEsIG92YWwyLCBudmFsMSwgbnZhbDIpCVwKLQlfX3BjcHVfZG91YmxlX2NhbGxfcmV0dXJuX2ludChpcnFzYWZlX2NwdV9jbXB4Y2hnX2RvdWJsZV8sIChwY3AxKSwgKHBjcDIpLCAob3ZhbDEpLCAob3ZhbDIpLCAobnZhbDEpLCAobnZhbDIpKQorCV9fcGNwdV9kb3VibGVfY2FsbF9yZXR1cm5fYm9vbChpcnFzYWZlX2NwdV9jbXB4Y2hnX2RvdWJsZV8sIChwY3AxKSwgKHBjcDIpLCAob3ZhbDEpLCAob3ZhbDIpLCAobnZhbDEpLCAobnZhbDIpKQogI2VuZGlmCiAKICNlbmRpZiAvKiBfX0xJTlVYX1BFUkNQVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaCBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCmluZGV4IGVlOWYxZTcuLjM0MTI2ODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCkBAIC0yLDggKzIsOCBAQAogICogUGVyZm9ybWFuY2UgZXZlbnRzOgogICoKICAqICAgIENvcHlyaWdodCAoQykgMjAwOC0yMDA5LCBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KLSAqICAgIENvcHlyaWdodCAoQykgMjAwOC0yMDA5LCBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hcgotICogICAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIFJlZCBIYXQsIEluYy4sIFBldGVyIFppamxzdHJhCisgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMSwgUmVkIEhhdCwgSW5jLiwgSW5nbyBNb2xuYXIKKyAqICAgIENvcHlyaWdodCAoQykgMjAwOC0yMDExLCBSZWQgSGF0LCBJbmMuLCBQZXRlciBaaWpsc3RyYQogICoKICAqIERhdGEgdHlwZSBkZWZpbml0aW9ucywgZGVjbGFyYXRpb25zLCBwcm90b3R5cGVzLgogICoKQEAgLTUyLDYgKzUyLDggQEAKIAlQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlMJPSA0LAogCVBFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFUwkJPSA1LAogCVBFUkZfQ09VTlRfSFdfQlVTX0NZQ0xFUwkJPSA2LAorCVBFUkZfQ09VTlRfSFdfU1RBTExFRF9DWUNMRVNfRlJPTlRFTkQJPSA3LAorCVBFUkZfQ09VTlRfSFdfU1RBTExFRF9DWUNMRVNfQkFDS0VORAk9IDgsCiAKIAlQRVJGX0NPVU5UX0hXX01BWCwJCQkvKiBub24tQUJJICovCiB9OwpAQCAtNDY4LDkgKzQ3MCw5IEBACiAJUEVSRl9DT05URVhUX01BWAkJPSAoX191NjQpLTQwOTUsCiB9OwogCi0jZGVmaW5lIFBFUkZfRkxBR19GRF9OT19HUk9VUAkoMVUgPDwgMCkKLSNkZWZpbmUgUEVSRl9GTEFHX0ZEX09VVFBVVAkoMVUgPDwgMSkKLSNkZWZpbmUgUEVSRl9GTEFHX1BJRF9DR1JPVVAJKDFVIDw8IDIpIC8qIHBpZD1jZ3JvdXAgaWQsIHBlci1jcHUgbW9kZSBvbmx5ICovCisjZGVmaW5lIFBFUkZfRkxBR19GRF9OT19HUk9VUAkJKDFVIDw8IDApCisjZGVmaW5lIFBFUkZfRkxBR19GRF9PVVRQVVQJCSgxVSA8PCAxKQorI2RlZmluZSBQRVJGX0ZMQUdfUElEX0NHUk9VUAkJKDFVIDw8IDIpIC8qIHBpZD1jZ3JvdXAgaWQsIHBlci1jcHUgbW9kZSBvbmx5ICovCiAKICNpZmRlZiBfX0tFUk5FTF9fCiAvKgpAQCAtNDg0LDkgKzQ4Niw5IEBACiAjZW5kaWYKIAogc3RydWN0IHBlcmZfZ3Vlc3RfaW5mb19jYWxsYmFja3MgewotCWludCAoKmlzX2luX2d1ZXN0KSAodm9pZCk7Ci0JaW50ICgqaXNfdXNlcl9tb2RlKSAodm9pZCk7Ci0JdW5zaWduZWQgbG9uZyAoKmdldF9ndWVzdF9pcCkgKHZvaWQpOworCWludAkJCQkoKmlzX2luX2d1ZXN0KSh2b2lkKTsKKwlpbnQJCQkJKCppc191c2VyX21vZGUpKHZvaWQpOworCXVuc2lnbmVkIGxvbmcJCQkoKmdldF9ndWVzdF9pcCkodm9pZCk7CiB9OwogCiAjaWZkZWYgQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVApAQCAtNTA1LDcgKzUwNyw3IEBACiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxX3dvcmsuaD4KLSNpbmNsdWRlIDxsaW51eC9qdW1wX2xhYmVsX3JlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2p1bXBfbGFiZWwuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL2xvY2FsLmg+CiAKQEAgLTY1MiwxOSArNjU0LDE5IEBACiAJICogU3RhcnQgdGhlIHRyYW5zYWN0aW9uLCBhZnRlciB0aGlzIC0+YWRkKCkgZG9lc24ndCBuZWVkIHRvCiAJICogZG8gc2NoZWR1bGFiaWxpdHkgdGVzdHMuCiAJICovCi0Jdm9pZCAoKnN0YXJ0X3R4bikJKHN0cnVjdCBwbXUgKnBtdSk7IC8qIG9wdGlvbmFsICovCisJdm9pZCAoKnN0YXJ0X3R4bikJCShzdHJ1Y3QgcG11ICpwbXUpOyAvKiBvcHRpb25hbCAqLwogCS8qCiAJICogSWYgLT5zdGFydF90eG4oKSBkaXNhYmxlZCB0aGUgLT5hZGQoKSBzY2hlZHVsYWJpbGl0eSB0ZXN0CiAJICogdGhlbiAtPmNvbW1pdF90eG4oKSBpcyByZXF1aXJlZCB0byBwZXJmb3JtIG9uZS4gT24gc3VjY2VzcwogCSAqIHRoZSB0cmFuc2FjdGlvbiBpcyBjbG9zZWQuIE9uIGVycm9yIHRoZSB0cmFuc2FjdGlvbiBpcyBrZXB0CiAJICogb3BlbiB1bnRpbCAtPmNhbmNlbF90eG4oKSBpcyBjYWxsZWQuCiAJICovCi0JaW50ICAoKmNvbW1pdF90eG4pCShzdHJ1Y3QgcG11ICpwbXUpOyAvKiBvcHRpb25hbCAqLworCWludCAgKCpjb21taXRfdHhuKQkJKHN0cnVjdCBwbXUgKnBtdSk7IC8qIG9wdGlvbmFsICovCiAJLyoKIAkgKiBXaWxsIGNhbmNlbCB0aGUgdHJhbnNhY3Rpb24sIGFzc3VtZXMgLT5kZWwoKSBpcyBjYWxsZWQKIAkgKiBmb3IgZWFjaCBzdWNjZXNzZnVsIC0+YWRkKCkgZHVyaW5nIHRoZSB0cmFuc2FjdGlvbi4KIAkgKi8KLQl2b2lkICgqY2FuY2VsX3R4bikJKHN0cnVjdCBwbXUgKnBtdSk7IC8qIG9wdGlvbmFsICovCisJdm9pZCAoKmNhbmNlbF90eG4pCQkoc3RydWN0IHBtdSAqcG11KTsgLyogb3B0aW9uYWwgKi8KIH07CiAKIC8qKgpAQCAtNzEyLDE1ICs3MTQsMTUgQEAKIAkJCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCiBlbnVtIHBlcmZfZ3JvdXBfZmxhZyB7Ci0JUEVSRl9HUk9VUF9TT0ZUV0FSRSA9IDB4MSwKKwlQRVJGX0dST1VQX1NPRlRXQVJFCQk9IDB4MSwKIH07CiAKLSNkZWZpbmUgU1dFVkVOVF9ITElTVF9CSVRTCTgKLSNkZWZpbmUgU1dFVkVOVF9ITElTVF9TSVpFCSgxIDw8IFNXRVZFTlRfSExJU1RfQklUUykKKyNkZWZpbmUgU1dFVkVOVF9ITElTVF9CSVRTCQk4CisjZGVmaW5lIFNXRVZFTlRfSExJU1RfU0laRQkJKDEgPDwgU1dFVkVOVF9ITElTVF9CSVRTKQogCiBzdHJ1Y3Qgc3dldmVudF9obGlzdCB7Ci0Jc3RydWN0IGhsaXN0X2hlYWQJaGVhZHNbU1dFVkVOVF9ITElTVF9TSVpFXTsKLQlzdHJ1Y3QgcmN1X2hlYWQJCXJjdV9oZWFkOworCXN0cnVjdCBobGlzdF9oZWFkCQloZWFkc1tTV0VWRU5UX0hMSVNUX1NJWkVdOworCXN0cnVjdCByY3VfaGVhZAkJCXJjdV9oZWFkOwogfTsKIAogI2RlZmluZSBQRVJGX0FUVEFDSF9DT05URVhUCTB4MDEKQEAgLTczMywxMyArNzM1LDEzIEBACiAgKiBUaGlzIGlzIGEgcGVyLWNwdSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgZGF0YSBzdHJ1Y3R1cmUuCiAgKi8KIHN0cnVjdCBwZXJmX2Nncm91cF9pbmZvIHsKLQl1NjQgdGltZTsKLQl1NjQgdGltZXN0YW1wOworCXU2NAkJCQl0aW1lOworCXU2NAkJCQl0aW1lc3RhbXA7CiB9OwogCiBzdHJ1Y3QgcGVyZl9jZ3JvdXAgewotCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlIGNzczsKLQlzdHJ1Y3QgcGVyZl9jZ3JvdXBfaW5mbyAqaW5mbzsJLyogdGltaW5nIGluZm8sIG9uZSBwZXIgY3B1ICovCisJc3RydWN0CQkJCWNncm91cF9zdWJzeXNfc3RhdGUgY3NzOworCXN0cnVjdAkJCQlwZXJmX2Nncm91cF9pbmZvICppbmZvOwkvKiB0aW1pbmcgaW5mbywgb25lIHBlciBjcHUgKi8KIH07CiAjZW5kaWYKIApAQCAtOTIzLDcgKzkyNSw3IEBACiAKIC8qCiAgKiBOdW1iZXIgb2YgY29udGV4dHMgd2hlcmUgYW4gZXZlbnQgY2FuIHRyaWdnZXI6Ci0gKiAJdGFzaywgc29mdGlycSwgaGFyZGlycSwgbm1pLgorICoJdGFzaywgc29mdGlycSwgaGFyZGlycSwgbm1pLgogICovCiAjZGVmaW5lIFBFUkZfTlJfQ09OVEVYVFMJNAogCkBAIC0xMDAxLDggKzEwMDMsNyBAQAogCXN0cnVjdCBwZXJmX3Jhd19yZWNvcmQJCSpyYXc7CiB9OwogCi1zdGF0aWMgaW5saW5lCi12b2lkIHBlcmZfc2FtcGxlX2RhdGFfaW5pdChzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSwgdTY0IGFkZHIpCitzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9zYW1wbGVfZGF0YV9pbml0KHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLCB1NjQgYWRkcikKIHsKIAlkYXRhLT5hZGRyID0gYWRkcjsKIAlkYXRhLT5yYXcgID0gTlVMTDsKQEAgLTEwMzQsMTMgKzEwMzUsMTIgQEAKIAlyZXR1cm4gZXZlbnQtPnBtdS0+dGFza19jdHhfbnIgPT0gcGVyZl9zd19jb250ZXh0OwogfQogCi1leHRlcm4gYXRvbWljX3QgcGVyZl9zd2V2ZW50X2VuYWJsZWRbUEVSRl9DT1VOVF9TV19NQVhdOworZXh0ZXJuIHN0cnVjdCBqdW1wX2xhYmVsX2tleSBwZXJmX3N3ZXZlbnRfZW5hYmxlZFtQRVJGX0NPVU5UX1NXX01BWF07CiAKIGV4dGVybiB2b2lkIF9fcGVyZl9zd19ldmVudCh1MzIsIHU2NCwgaW50LCBzdHJ1Y3QgcHRfcmVncyAqLCB1NjQpOwogCiAjaWZuZGVmIHBlcmZfYXJjaF9mZXRjaF9jYWxsZXJfcmVncwotc3RhdGljIGlubGluZSB2b2lkCi1wZXJmX2FyY2hfZmV0Y2hfY2FsbGVyX3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgaXApIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHBlcmZfYXJjaF9mZXRjaF9jYWxsZXJfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBpcCkgeyB9CiAjZW5kaWYKIAogLyoKQEAgLTEwNjMsMjYgKzEwNjMsMjQgQEAKIHsKIAlzdHJ1Y3QgcHRfcmVncyBob3RfcmVnczsKIAotCUpVTVBfTEFCRUwoJnBlcmZfc3dldmVudF9lbmFibGVkW2V2ZW50X2lkXSwgaGF2ZV9ldmVudCk7Ci0JcmV0dXJuOwotCi1oYXZlX2V2ZW50OgotCWlmICghcmVncykgewotCQlwZXJmX2ZldGNoX2NhbGxlcl9yZWdzKCZob3RfcmVncyk7Ci0JCXJlZ3MgPSAmaG90X3JlZ3M7CisJaWYgKHN0YXRpY19icmFuY2goJnBlcmZfc3dldmVudF9lbmFibGVkW2V2ZW50X2lkXSkpIHsKKwkJaWYgKCFyZWdzKSB7CisJCQlwZXJmX2ZldGNoX2NhbGxlcl9yZWdzKCZob3RfcmVncyk7CisJCQlyZWdzID0gJmhvdF9yZWdzOworCQl9CisJCV9fcGVyZl9zd19ldmVudChldmVudF9pZCwgbnIsIG5taSwgcmVncywgYWRkcik7CiAJfQotCV9fcGVyZl9zd19ldmVudChldmVudF9pZCwgbnIsIG5taSwgcmVncywgYWRkcik7CiB9CiAKLWV4dGVybiBhdG9taWNfdCBwZXJmX3NjaGVkX2V2ZW50czsKK2V4dGVybiBzdHJ1Y3QganVtcF9sYWJlbF9rZXkgcGVyZl9zY2hlZF9ldmVudHM7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewotCUNPTkRfU1RNVCgmcGVyZl9zY2hlZF9ldmVudHMsIF9fcGVyZl9ldmVudF90YXNrX3NjaGVkX2luKHRhc2spKTsKKwlpZiAoc3RhdGljX2JyYW5jaCgmcGVyZl9zY2hlZF9ldmVudHMpKQorCQlfX3BlcmZfZXZlbnRfdGFza19zY2hlZF9pbih0YXNrKTsKIH0KIAotc3RhdGljIGlubGluZQotdm9pZCBwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KQorc3RhdGljIGlubGluZSB2b2lkIHBlcmZfZXZlbnRfdGFza19zY2hlZF9vdXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpCiB7CiAJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX0NPTlRFWFRfU1dJVENIRVMsIDEsIDEsIE5VTEwsIDApOwogCkBAIC0xMTAwLDE0ICsxMDk4LDEwIEBACiAvKiBDYWxsY2hhaW5zICovCiBERUNMQVJFX1BFUl9DUFUoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5LCBwZXJmX2NhbGxjaGFpbl9lbnRyeSk7CiAKLWV4dGVybiB2b2lkIHBlcmZfY2FsbGNoYWluX3VzZXIoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSwKLQkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1leHRlcm4gdm9pZCBwZXJmX2NhbGxjaGFpbl9rZXJuZWwoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSwKLQkJCQkgIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIHBlcmZfY2FsbGNoYWluX3VzZXIoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgcGVyZl9jYWxsY2hhaW5fa2VybmVsKHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqZW50cnksIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXBlcmZfY2FsbGNoYWluX3N0b3JlKHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqZW50cnksIHU2NCBpcCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2NhbGxjaGFpbl9zdG9yZShzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5LCB1NjQgaXApCiB7CiAJaWYgKGVudHJ5LT5uciA8IFBFUkZfTUFYX1NUQUNLX0RFUFRIKQogCQllbnRyeS0+aXBbZW50cnktPm5yKytdID0gaXA7CkBAIC0xMTQzLDkgKzExMzcsOSBAQAogZXh0ZXJuIHZvaWQgcGVyZl9icF9ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHZvaWQgKmRhdGEpOwogCiAjaWZuZGVmIHBlcmZfbWlzY19mbGFncwotI2RlZmluZSBwZXJmX21pc2NfZmxhZ3MocmVncykJKHVzZXJfbW9kZShyZWdzKSA/IFBFUkZfUkVDT1JEX01JU0NfVVNFUiA6IFwKLQkJCQkgUEVSRl9SRUNPUkRfTUlTQ19LRVJORUwpCi0jZGVmaW5lIHBlcmZfaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQlpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpCisjIGRlZmluZSBwZXJmX21pc2NfZmxhZ3MocmVncykgXAorCQkodXNlcl9tb2RlKHJlZ3MpID8gUEVSRl9SRUNPUkRfTUlTQ19VU0VSIDogUEVSRl9SRUNPUkRfTUlTQ19LRVJORUwpCisjIGRlZmluZSBwZXJmX2luc3RydWN0aW9uX3BvaW50ZXIocmVncykJaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQogI2VuZGlmCiAKIGV4dGVybiBpbnQgcGVyZl9vdXRwdXRfYmVnaW4oc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSAqaGFuZGxlLApAQCAtMTE4MCw5ICsxMTc0LDkgQEAKIHBlcmZfYnBfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB2b2lkICpkYXRhKQkJCXsgfQogCiBzdGF0aWMgaW5saW5lIGludCBwZXJmX3JlZ2lzdGVyX2d1ZXN0X2luZm9fY2FsbGJhY2tzCi0oc3RydWN0IHBlcmZfZ3Vlc3RfaW5mb19jYWxsYmFja3MgKmNhbGxiYWNrcykgeyByZXR1cm4gMDsgfQorKHN0cnVjdCBwZXJmX2d1ZXN0X2luZm9fY2FsbGJhY2tzICpjYWxsYmFja3MpCQkJCXsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHBlcmZfdW5yZWdpc3Rlcl9ndWVzdF9pbmZvX2NhbGxiYWNrcwotKHN0cnVjdCBwZXJmX2d1ZXN0X2luZm9fY2FsbGJhY2tzICpjYWxsYmFja3MpIHsgcmV0dXJuIDA7IH0KKyhzdHJ1Y3QgcGVyZl9ndWVzdF9pbmZvX2NhbGxiYWNrcyAqY2FsbGJhY2tzKQkJCQl7IHJldHVybiAwOyB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X21tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCQl7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X2NvbW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCQl7IH0KQEAgLTExOTUsMjMgKzExODksMjIgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X3Rhc2tfdGljayh2b2lkKQkJCQl7IH0KICNlbmRpZgogCi0jZGVmaW5lIHBlcmZfb3V0cHV0X3B1dChoYW5kbGUsIHgpIFwKLQlwZXJmX291dHB1dF9jb3B5KChoYW5kbGUpLCAmKHgpLCBzaXplb2YoeCkpCisjZGVmaW5lIHBlcmZfb3V0cHV0X3B1dChoYW5kbGUsIHgpIHBlcmZfb3V0cHV0X2NvcHkoKGhhbmRsZSksICYoeCksIHNpemVvZih4KSkKIAogLyoKICAqIFRoaXMgaGFzIHRvIGhhdmUgYSBoaWdoZXIgcHJpb3JpdHkgdGhhbiBtaWdyYXRpb25fbm90aWZpZXIgaW4gc2NoZWQuYy4KICAqLwotI2RlZmluZSBwZXJmX2NwdV9ub3RpZmllcihmbikJCQkJCVwKLWRvIHsJCQkJCQkJCVwKLQlzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGZuIyNfbmIgX19jcHVpbml0ZGF0YSA9CVwKLQkJeyAubm90aWZpZXJfY2FsbCA9IGZuLCAucHJpb3JpdHkgPSBDUFVfUFJJX1BFUkYgfTsgXAotCWZuKCZmbiMjX25iLCAodW5zaWduZWQgbG9uZylDUFVfVVBfUFJFUEFSRSwJCVwKLQkJKHZvaWQgKikodW5zaWduZWQgbG9uZylzbXBfcHJvY2Vzc29yX2lkKCkpOwlcCi0JZm4oJmZuIyNfbmIsICh1bnNpZ25lZCBsb25nKUNQVV9TVEFSVElORywJCVwKLQkJKHZvaWQgKikodW5zaWduZWQgbG9uZylzbXBfcHJvY2Vzc29yX2lkKCkpOwlcCi0JZm4oJmZuIyNfbmIsICh1bnNpZ25lZCBsb25nKUNQVV9PTkxJTkUsCQkJXAotCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKXNtcF9wcm9jZXNzb3JfaWQoKSk7CVwKLQlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJmZuIyNfbmIpOwkJCVwKKyNkZWZpbmUgcGVyZl9jcHVfbm90aWZpZXIoZm4pCQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGZuIyNfbmIgX19jcHVpbml0ZGF0YSA9CQlcCisJCXsgLm5vdGlmaWVyX2NhbGwgPSBmbiwgLnByaW9yaXR5ID0gQ1BVX1BSSV9QRVJGIH07CVwKKwlmbigmZm4jI19uYiwgKHVuc2lnbmVkIGxvbmcpQ1BVX1VQX1BSRVBBUkUsCQkJXAorCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKXNtcF9wcm9jZXNzb3JfaWQoKSk7CQlcCisJZm4oJmZuIyNfbmIsICh1bnNpZ25lZCBsb25nKUNQVV9TVEFSVElORywJCQlcCisJCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpc21wX3Byb2Nlc3Nvcl9pZCgpKTsJCVwKKwlmbigmZm4jI19uYiwgKHVuc2lnbmVkIGxvbmcpQ1BVX09OTElORSwJCQkJXAorCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKXNtcF9wcm9jZXNzb3JfaWQoKSk7CQlcCisJcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZmbiMjX25iKTsJCQkJXAogfSB3aGlsZSAoMCkKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGt0X3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3BrdF9zY2hlZC5oCmluZGV4IDNhMDJlMDIuLmM1MzM2NzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGt0X3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9wa3Rfc2NoZWQuaApAQCAtNTg4LDQgKzU4OCwxOSBAQAogCiAjZGVmaW5lIFNGQl9NQVhfUFJPQiAweEZGRkYKIAorLyogUUZRICovCitlbnVtIHsKKwlUQ0FfUUZRX1VOU1BFQywKKwlUQ0FfUUZRX1dFSUdIVCwKKwlUQ0FfUUZRX0xNQVgsCisJX19UQ0FfUUZRX01BWAorfTsKKworI2RlZmluZSBUQ0FfUUZRX01BWAkoX19UQ0FfUUZRX01BWCAtIDEpCisKK3N0cnVjdCB0Y19xZnFfc3RhdHMgeworCV9fdTMyIHdlaWdodDsKKwlfX3UzMiBsbWF4OworfTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaAppbmRleCA3NDQ5NDJjLi5lZGUxYTgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmgKQEAgLTE1MCw5ICsxNTAsNiBAQAogCQkJCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdW5zaWduZWQgaW50IG5fcmVzLAogCQkJCQljb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSk7CiAKLWV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqIHBsYXRmb3JtX2J1c19nZXRfcG1fb3BzKHZvaWQpOwotZXh0ZXJuIHZvaWQgcGxhdGZvcm1fYnVzX3NldF9wbV9vcHMoY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKnBtKTsKLQogLyogZWFybHkgcGxhdGZvcm0gZHJpdmVyIGludGVyZmFjZSAqLwogc3RydWN0IGVhcmx5X3BsYXRmb3JtX2RyaXZlciB7CiAJY29uc3QgY2hhciAqY2xhc3Nfc3RyOwpAQCAtMjA1LDQgKzIwMiw2NCBAQAogfQogI2VuZGlmIC8qIE1PRFVMRSAqLwogCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCitleHRlcm4gaW50IHBsYXRmb3JtX3BtX3ByZXBhcmUoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIHBsYXRmb3JtX3BtX2NvbXBsZXRlKHN0cnVjdCBkZXZpY2UgKmRldik7CisjZWxzZQorI2RlZmluZSBwbGF0Zm9ybV9wbV9wcmVwYXJlCU5VTEwKKyNkZWZpbmUgcGxhdGZvcm1fcG1fY29tcGxldGUJTlVMTAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU1VTUEVORAorZXh0ZXJuIGludCBwbGF0Zm9ybV9wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gaW50IHBsYXRmb3JtX3BtX3N1c3BlbmRfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgcGxhdGZvcm1fcG1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gaW50IHBsYXRmb3JtX3BtX3Jlc3VtZV9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpOworI2Vsc2UKKyNkZWZpbmUgcGxhdGZvcm1fcG1fc3VzcGVuZAkJTlVMTAorI2RlZmluZSBwbGF0Zm9ybV9wbV9yZXN1bWUJCU5VTEwKKyNkZWZpbmUgcGxhdGZvcm1fcG1fc3VzcGVuZF9ub2lycQlOVUxMCisjZGVmaW5lIHBsYXRmb3JtX3BtX3Jlc3VtZV9ub2lycQlOVUxMCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19ISUJFUk5BVEVfQ0FMTEJBQ0tTCitleHRlcm4gaW50IHBsYXRmb3JtX3BtX2ZyZWV6ZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBwbGF0Zm9ybV9wbV9mcmVlemVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgcGxhdGZvcm1fcG1fdGhhdyhzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBwbGF0Zm9ybV9wbV90aGF3X25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gaW50IHBsYXRmb3JtX3BtX3Bvd2Vyb2ZmKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gaW50IHBsYXRmb3JtX3BtX3Bvd2Vyb2ZmX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gaW50IHBsYXRmb3JtX3BtX3Jlc3RvcmUoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgcGxhdGZvcm1fcG1fcmVzdG9yZV9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpOworI2Vsc2UKKyNkZWZpbmUgcGxhdGZvcm1fcG1fZnJlZXplCQlOVUxMCisjZGVmaW5lIHBsYXRmb3JtX3BtX3RoYXcJCU5VTEwKKyNkZWZpbmUgcGxhdGZvcm1fcG1fcG93ZXJvZmYJCU5VTEwKKyNkZWZpbmUgcGxhdGZvcm1fcG1fcmVzdG9yZQkJTlVMTAorI2RlZmluZSBwbGF0Zm9ybV9wbV9mcmVlemVfbm9pcnEJTlVMTAorI2RlZmluZSBwbGF0Zm9ybV9wbV90aGF3X25vaXJxCQlOVUxMCisjZGVmaW5lIHBsYXRmb3JtX3BtX3Bvd2Vyb2ZmX25vaXJxCU5VTEwKKyNkZWZpbmUgcGxhdGZvcm1fcG1fcmVzdG9yZV9ub2lycQlOVUxMCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QTV9TTEVFUAorI2RlZmluZSBVU0VfUExBVEZPUk1fUE1fU0xFRVBfT1BTIFwKKwkucHJlcGFyZSA9IHBsYXRmb3JtX3BtX3ByZXBhcmUsIFwKKwkuY29tcGxldGUgPSBwbGF0Zm9ybV9wbV9jb21wbGV0ZSwgXAorCS5zdXNwZW5kID0gcGxhdGZvcm1fcG1fc3VzcGVuZCwgXAorCS5yZXN1bWUgPSBwbGF0Zm9ybV9wbV9yZXN1bWUsIFwKKwkuZnJlZXplID0gcGxhdGZvcm1fcG1fZnJlZXplLCBcCisJLnRoYXcgPSBwbGF0Zm9ybV9wbV90aGF3LCBcCisJLnBvd2Vyb2ZmID0gcGxhdGZvcm1fcG1fcG93ZXJvZmYsIFwKKwkucmVzdG9yZSA9IHBsYXRmb3JtX3BtX3Jlc3RvcmUsIFwKKwkuc3VzcGVuZF9ub2lycSA9IHBsYXRmb3JtX3BtX3N1c3BlbmRfbm9pcnEsIFwKKwkucmVzdW1lX25vaXJxID0gcGxhdGZvcm1fcG1fcmVzdW1lX25vaXJxLCBcCisJLmZyZWV6ZV9ub2lycSA9IHBsYXRmb3JtX3BtX2ZyZWV6ZV9ub2lycSwgXAorCS50aGF3X25vaXJxID0gcGxhdGZvcm1fcG1fdGhhd19ub2lycSwgXAorCS5wb3dlcm9mZl9ub2lycSA9IHBsYXRmb3JtX3BtX3Bvd2Vyb2ZmX25vaXJxLCBcCisJLnJlc3RvcmVfbm9pcnEgPSBwbGF0Zm9ybV9wbV9yZXN0b3JlX25vaXJxLAorI2Vsc2UKKyNkZWZpbmUgVVNFX1BMQVRGT1JNX1BNX1NMRUVQX09QUworI2VuZGlmCisKICNlbmRpZiAvKiBfUExBVEZPUk1fREVWSUNFX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtLmggYi9pbmNsdWRlL2xpbnV4L3BtLmgKaW5kZXggNTEyZTA5MS4uMzE2MDY0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG0uaApAQCAtNDYwLDYgKzQ2MCw3IEBACiAJdW5zaWduZWQgbG9uZwkJYWN0aXZlX2ppZmZpZXM7CiAJdW5zaWduZWQgbG9uZwkJc3VzcGVuZGVkX2ppZmZpZXM7CiAJdW5zaWduZWQgbG9uZwkJYWNjb3VudGluZ190aW1lc3RhbXA7CisJdm9pZAkJCSpzdWJzeXNfZGF0YTsgIC8qIE93bmVkIGJ5IHRoZSBzdWJzeXN0ZW0uICovCiAjZW5kaWYKIH07CiAKQEAgLTUyOSwyMSArNTMwLDE3IEBACiAgKi8KIAogI2lmZGVmIENPTkZJR19QTV9TTEVFUAotI2lmbmRlZiBDT05GSUdfQVJDSF9OT19TWVNERVZfT1BTCi1leHRlcm4gaW50IHN5c2Rldl9zdXNwZW5kKHBtX21lc3NhZ2VfdCBzdGF0ZSk7Ci1leHRlcm4gaW50IHN5c2Rldl9yZXN1bWUodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSBpbnQgc3lzZGV2X3N1c3BlbmQocG1fbWVzc2FnZV90IHN0YXRlKSB7IHJldHVybiAwOyB9Ci1zdGF0aWMgaW5saW5lIGludCBzeXNkZXZfcmVzdW1lKHZvaWQpIHsgcmV0dXJuIDA7IH0KLSNlbmRpZgotCiBleHRlcm4gdm9pZCBkZXZpY2VfcG1fbG9jayh2b2lkKTsKIGV4dGVybiB2b2lkIGRwbV9yZXN1bWVfbm9pcnEocG1fbWVzc2FnZV90IHN0YXRlKTsKIGV4dGVybiB2b2lkIGRwbV9yZXN1bWVfZW5kKHBtX21lc3NhZ2VfdCBzdGF0ZSk7CitleHRlcm4gdm9pZCBkcG1fcmVzdW1lKHBtX21lc3NhZ2VfdCBzdGF0ZSk7CitleHRlcm4gdm9pZCBkcG1fY29tcGxldGUocG1fbWVzc2FnZV90IHN0YXRlKTsKIAogZXh0ZXJuIHZvaWQgZGV2aWNlX3BtX3VubG9jayh2b2lkKTsKIGV4dGVybiBpbnQgZHBtX3N1c3BlbmRfbm9pcnEocG1fbWVzc2FnZV90IHN0YXRlKTsKIGV4dGVybiBpbnQgZHBtX3N1c3BlbmRfc3RhcnQocG1fbWVzc2FnZV90IHN0YXRlKTsKK2V4dGVybiBpbnQgZHBtX3N1c3BlbmQocG1fbWVzc2FnZV90IHN0YXRlKTsKK2V4dGVybiBpbnQgZHBtX3ByZXBhcmUocG1fbWVzc2FnZV90IHN0YXRlKTsKIAogZXh0ZXJuIHZvaWQgX19zdXNwZW5kX3JlcG9ydF9yZXN1bHQoY29uc3QgY2hhciAqZnVuY3Rpb24sIHZvaWQgKmZuLCBpbnQgcmV0KTsKIApAQCAtNTUzLDYgKzU1MCwxNiBAQAogCX0gd2hpbGUgKDApCiAKIGV4dGVybiBpbnQgZGV2aWNlX3BtX3dhaXRfZm9yX2RldihzdHJ1Y3QgZGV2aWNlICpzdWIsIHN0cnVjdCBkZXZpY2UgKmRldik7CisKK2V4dGVybiBpbnQgcG1fZ2VuZXJpY19wcmVwYXJlKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gaW50IHBtX2dlbmVyaWNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBwbV9nZW5lcmljX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBwbV9nZW5lcmljX2ZyZWV6ZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBwbV9nZW5lcmljX3RoYXcoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgcG1fZ2VuZXJpY19yZXN0b3JlKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gaW50IHBtX2dlbmVyaWNfcG93ZXJvZmYoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIHBtX2dlbmVyaWNfY29tcGxldGUoc3RydWN0IGRldmljZSAqZGV2KTsKKwogI2Vsc2UgLyogIUNPTkZJR19QTV9TTEVFUCAqLwogCiAjZGVmaW5lIGRldmljZV9wbV9sb2NrKCkgZG8ge30gd2hpbGUgKDApCkBAIC01NjksNiArNTc2LDE1IEBACiB7CiAJcmV0dXJuIDA7CiB9CisKKyNkZWZpbmUgcG1fZ2VuZXJpY19wcmVwYXJlCU5VTEwKKyNkZWZpbmUgcG1fZ2VuZXJpY19zdXNwZW5kCU5VTEwKKyNkZWZpbmUgcG1fZ2VuZXJpY19yZXN1bWUJTlVMTAorI2RlZmluZSBwbV9nZW5lcmljX2ZyZWV6ZQlOVUxMCisjZGVmaW5lIHBtX2dlbmVyaWNfdGhhdwkJTlVMTAorI2RlZmluZSBwbV9nZW5lcmljX3Jlc3RvcmUJTlVMTAorI2RlZmluZSBwbV9nZW5lcmljX3Bvd2Vyb2ZmCU5VTEwKKyNkZWZpbmUgcG1fZ2VuZXJpY19jb21wbGV0ZQlOVUxMCiAjZW5kaWYgLyogIUNPTkZJR19QTV9TTEVFUCAqLwogCiAvKiBIb3cgdG8gcmVvcmRlciBkcG1fbGlzdCBhZnRlciBkZXZpY2VfbW92ZSgpICovCkBAIC01NzksMTEgKzU5NSw0IEBACiAJRFBNX09SREVSX0RFVl9MQVNULAogfTsKIAotZXh0ZXJuIGludCBwbV9nZW5lcmljX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KTsKLWV4dGVybiBpbnQgcG1fZ2VuZXJpY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKLWV4dGVybiBpbnQgcG1fZ2VuZXJpY19mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KTsKLWV4dGVybiBpbnQgcG1fZ2VuZXJpY190aGF3KHN0cnVjdCBkZXZpY2UgKmRldik7Ci1leHRlcm4gaW50IHBtX2dlbmVyaWNfcmVzdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotZXh0ZXJuIGludCBwbV9nZW5lcmljX3Bvd2Vyb2ZmKHN0cnVjdCBkZXZpY2UgKmRldik7Ci0KICNlbmRpZiAvKiBfTElOVVhfUE1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbV9ydW50aW1lLmggYi9pbmNsdWRlL2xpbnV4L3BtX3J1bnRpbWUuaAppbmRleCA4ZGU5YWE2Li44NzhjZjg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BtX3J1bnRpbWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BtX3J1bnRpbWUuaApAQCAtMjQ1LDQgKzI0NSw0NiBAQAogCV9fcG1fcnVudGltZV91c2VfYXV0b3N1c3BlbmQoZGV2LCBmYWxzZSk7CiB9CiAKK3N0cnVjdCBwbV9jbGtfbm90aWZpZXJfYmxvY2sgeworCXN0cnVjdCBub3RpZmllcl9ibG9jayBuYjsKKwlzdHJ1Y3QgZGV2X3Bvd2VyX2RvbWFpbiAqcHdyX2RvbWFpbjsKKwljaGFyICpjb25faWRzW107Cit9OworCisjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUVfQ0xLCitleHRlcm4gaW50IHBtX3J1bnRpbWVfY2xrX2luaXQoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIHBtX3J1bnRpbWVfY2xrX2Rlc3Ryb3koc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgcG1fcnVudGltZV9jbGtfYWRkKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqY29uX2lkKTsKK2V4dGVybiB2b2lkIHBtX3J1bnRpbWVfY2xrX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmNvbl9pZCk7CitleHRlcm4gaW50IHBtX3J1bnRpbWVfY2xrX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgcG1fcnVudGltZV9jbGtfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldik7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgcG1fcnVudGltZV9jbGtfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgcG1fcnVudGltZV9jbGtfZGVzdHJveShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7Cit9CitzdGF0aWMgaW5saW5lIGludCBwbV9ydW50aW1lX2Nsa19hZGQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpjb25faWQpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgcG1fcnVudGltZV9jbGtfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqY29uX2lkKQoreworfQorI2RlZmluZSBwbV9ydW50aW1lX2Nsb2NrX3N1c3BlbmQJTlVMTAorI2RlZmluZSBwbV9ydW50aW1lX2Nsb2NrX3Jlc3VtZQkJTlVMTAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSEFWRV9DTEsKK2V4dGVybiB2b2lkIHBtX3J1bnRpbWVfY2xrX2FkZF9ub3RpZmllcihzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywKKwkJCQkJc3RydWN0IHBtX2Nsa19ub3RpZmllcl9ibG9jayAqY2xrbmIpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbV9ydW50aW1lX2Nsa19hZGRfbm90aWZpZXIoc3RydWN0IGJ1c190eXBlICpidXMsCisJCQkJCXN0cnVjdCBwbV9jbGtfbm90aWZpZXJfYmxvY2sgKmNsa25iKQoreworfQorI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wb3NpeC10aW1lcnMuaCBiL2luY2x1ZGUvbGludXgvcG9zaXgtdGltZXJzLmgKaW5kZXggZDUxMjQzYS4uODA4MjI3ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wb3NpeC10aW1lcnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Bvc2l4LXRpbWVycy5oCkBAIC01LDYgKzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvYWxhcm10aW1lci5oPgogCiB1bmlvbiBjcHVfdGltZV9jb3VudCB7CiAJY3B1dGltZV90IGNwdTsKQEAgLTgwLDYgKzgxLDcgQEAKIAkJCXVuc2lnbmVkIGxvbmcgaW5jcjsKIAkJCXVuc2lnbmVkIGxvbmcgZXhwaXJlczsKIAkJfSBtbXRpbWVyOworCQlzdHJ1Y3QgYWxhcm0gYWxhcm10aW1lcjsKIAl9IGl0OwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaAppbmRleCA4MzhjMTE0Li5lYWY0MzUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaApAQCAtMjA4LDYgKzIwOCw4IEBACiAJCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGFyZW50LGNvbnN0IGNoYXIgKmRlc3QpIHtyZXR1cm4gTlVMTDt9CiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19ta2Rpcihjb25zdCBjaGFyICpuYW1lLAogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGFyZW50KSB7cmV0dXJuIE5VTEw7fQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfbWtkaXJfbW9kZShjb25zdCBjaGFyICpuYW1lLAorCW1vZGVfdCBtb2RlLCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBhcmVudCkgeyByZXR1cm4gTlVMTDsgfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqY3JlYXRlX3Byb2NfcmVhZF9lbnRyeShjb25zdCBjaGFyICpuYW1lLAogCW1vZGVfdCBtb2RlLCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmJhc2UsIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wc3RvcmUuaCBiL2luY2x1ZGUvbGludXgvcHN0b3JlLmgKaW5kZXggNDE5Nzc3My4uMjQ1NWVmMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wc3RvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BzdG9yZS5oCkBAIC0zNSw3ICszNSw5IEBACiAJc3RydWN0IG11dGV4CWJ1Zl9tdXRleDsJLyogc2VyaWFsaXplIGFjY2VzcyB0byAnYnVmJyAqLwogCWNoYXIJCSpidWY7CiAJc2l6ZV90CQlidWZzaXplOwotCXNpemVfdAkJKCpyZWFkKSh1NjQgKmlkLCBlbnVtIHBzdG9yZV90eXBlX2lkICp0eXBlLAorCWludAkJKCpvcGVuKShzdHJ1Y3QgcHN0b3JlX2luZm8gKnBzaSk7CisJaW50CQkoKmNsb3NlKShzdHJ1Y3QgcHN0b3JlX2luZm8gKnBzaSk7CisJc3NpemVfdAkJKCpyZWFkKSh1NjQgKmlkLCBlbnVtIHBzdG9yZV90eXBlX2lkICp0eXBlLAogCQkJc3RydWN0IHRpbWVzcGVjICp0aW1lKTsKIAl1NjQJCSgqd3JpdGUpKGVudW0gcHN0b3JlX3R5cGVfaWQgdHlwZSwgc2l6ZV90IHNpemUpOwogCWludAkJKCplcmFzZSkodTY0IGlkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHRyYWNlLmggYi9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oCmluZGV4IGExMTQ3ZTUuLjkxNzhkNWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHRyYWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9wdHJhY2UuaApAQCAtMTg5LDYgKzE4OSwxMCBAQAogCQljaGlsZC0+cHRyYWNlID0gY3VycmVudC0+cHRyYWNlOwogCQlfX3B0cmFjZV9saW5rKGNoaWxkLCBjdXJyZW50LT5wYXJlbnQpOwogCX0KKworI2lmZGVmIENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQKKwlhdG9taWNfc2V0KCZjaGlsZC0+cHRyYWNlX2JwX3JlZmNudCwgMSk7CisjZW5kaWYKIH0KIAogLyoqCkBAIC0zNTAsNiArMzU0LDEzIEBACiAJCQkJdW5zaWduZWQgbG9uZyBhcmdzWzZdLCB1bnNpZ25lZCBpbnQgbWF4YXJncywKIAkJCQl1bnNpZ25lZCBsb25nICpzcCwgdW5zaWduZWQgbG9uZyAqcGMpOwogCi0jZW5kaWYKKyNpZmRlZiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UCitleHRlcm4gaW50IHB0cmFjZV9nZXRfYnJlYWtwb2ludHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworZXh0ZXJuIHZvaWQgcHRyYWNlX3B1dF9icmVha3BvaW50cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHB0cmFjZV9wdXRfYnJlYWtwb2ludHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spIHsgfQorI2VuZGlmIC8qIENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQgKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMICovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYnRyZWUuaCBiL2luY2x1ZGUvbGludXgvcmJ0cmVlLmgKaW5kZXggNzA2NmFjYi4uMDMzYjUwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yYnRyZWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JidHJlZS5oCkBAIC0xMzYsNiArMTM2LDE0IEBACiAjZGVmaW5lIFJCX0VNUFRZX05PREUobm9kZSkJKHJiX3BhcmVudChub2RlKSA9PSBub2RlKQogI2RlZmluZSBSQl9DTEVBUl9OT0RFKG5vZGUpCShyYl9zZXRfcGFyZW50KG5vZGUsIG5vZGUpKQogCitzdGF0aWMgaW5saW5lIHZvaWQgcmJfaW5pdF9ub2RlKHN0cnVjdCByYl9ub2RlICpyYikKK3sKKwlyYi0+cmJfcGFyZW50X2NvbG9yID0gMDsKKwlyYi0+cmJfcmlnaHQgPSBOVUxMOworCXJiLT5yYl9sZWZ0ID0gTlVMTDsKKwlSQl9DTEVBUl9OT0RFKHJiKTsKK30KKwogZXh0ZXJuIHZvaWQgcmJfaW5zZXJ0X2NvbG9yKHN0cnVjdCByYl9ub2RlICosIHN0cnVjdCByYl9yb290ICopOwogZXh0ZXJuIHZvaWQgcmJfZXJhc2Uoc3RydWN0IHJiX25vZGUgKiwgc3RydWN0IHJiX3Jvb3QgKik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1bGlzdC5oIGIvaW5jbHVkZS9saW51eC9yY3VsaXN0LmgKaW5kZXggMmRlYTk0Zi4uZTNiZWIzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3VsaXN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3VsaXN0LmgKQEAgLTI1Myw3ICsyNTMsNyBAQAogICovCiAjZGVmaW5lIGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvcywgaGVhZCwgbWVtYmVyKSBcCiAJZm9yIChwb3MgPSBsaXN0X2VudHJ5X3JjdSgoaGVhZCktPm5leHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKTsgXAotCQlwcmVmZXRjaChwb3MtPm1lbWJlci5uZXh0KSwgJnBvcy0+bWVtYmVyICE9IChoZWFkKTsgXAorCQkmcG9zLT5tZW1iZXIgIT0gKGhlYWQpOyBcCiAJCXBvcyA9IGxpc3RfZW50cnlfcmN1KHBvcy0+bWVtYmVyLm5leHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKSkKIAogCkBAIC0yNzAsNyArMjcwLDcgQEAKICAqLwogI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2NvbnRpbnVlX3JjdShwb3MsIGhlYWQpIFwKIAlmb3IgKChwb3MpID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhsaXN0X25leHRfcmN1KHBvcykpOyBcCi0JCXByZWZldGNoKChwb3MpLT5uZXh0KSwgKHBvcykgIT0gKGhlYWQpOyBcCisJCShwb3MpICE9IChoZWFkKTsgXAogCQkocG9zKSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobGlzdF9uZXh0X3JjdShwb3MpKSkKIAogLyoqCkBAIC0yODQsNyArMjg0LDcgQEAKICAqLwogI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShwb3MsIGhlYWQsIG1lbWJlcikgCQlcCiAJZm9yIChwb3MgPSBsaXN0X2VudHJ5X3JjdShwb3MtPm1lbWJlci5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlcik7IFwKLQkgICAgIHByZWZldGNoKHBvcy0+bWVtYmVyLm5leHQpLCAmcG9zLT5tZW1iZXIgIT0gKGhlYWQpOwlcCisJICAgICAmcG9zLT5tZW1iZXIgIT0gKGhlYWQpOwlcCiAJICAgICBwb3MgPSBsaXN0X2VudHJ5X3JjdShwb3MtPm1lbWJlci5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlcikpCiAKIC8qKgpAQCAtNDI3LDcgKzQyNyw3IEBACiAKICNkZWZpbmUgX19obGlzdF9mb3JfZWFjaF9yY3UocG9zLCBoZWFkKQkJCQlcCiAJZm9yIChwb3MgPSByY3VfZGVyZWZlcmVuY2UoaGxpc3RfZmlyc3RfcmN1KGhlYWQpKTsJXAotCSAgICAgcG9zICYmICh7IHByZWZldGNoKHBvcy0+bmV4dCk7IDE7IH0pOwkJXAorCSAgICAgcG9zOwkJCQkJCVwKIAkgICAgIHBvcyA9IHJjdV9kZXJlZmVyZW5jZShobGlzdF9uZXh0X3JjdShwb3MpKSkKIAogLyoqCkBAIC00NDMsNyArNDQzLDcgQEAKICAqLwogI2RlZmluZSBobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodHBvcywgcG9zLCBoZWFkLCBtZW1iZXIpCQlcCiAJZm9yIChwb3MgPSByY3VfZGVyZWZlcmVuY2VfcmF3KGhsaXN0X2ZpcnN0X3JjdShoZWFkKSk7CQlcCi0JCXBvcyAmJiAoeyBwcmVmZXRjaChwb3MtPm5leHQpOyAxOyB9KSAmJgkJCSBcCisJCXBvcyAmJgkJCQkJCQkgXAogCQkoeyB0cG9zID0gaGxpc3RfZW50cnkocG9zLCB0eXBlb2YoKnRwb3MpLCBtZW1iZXIpOyAxOyB9KTsgXAogCQlwb3MgPSByY3VfZGVyZWZlcmVuY2VfcmF3KGhsaXN0X25leHRfcmN1KHBvcykpKQogCkBAIC00NjAsNyArNDYwLDcgQEAKICAqLwogI2RlZmluZSBobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3VfYmgodHBvcywgcG9zLCBoZWFkLCBtZW1iZXIpCQkgXAogCWZvciAocG9zID0gcmN1X2RlcmVmZXJlbmNlX2JoKChoZWFkKS0+Zmlyc3QpOwkJCSBcCi0JCXBvcyAmJiAoeyBwcmVmZXRjaChwb3MtPm5leHQpOyAxOyB9KSAmJgkJCSBcCisJCXBvcyAmJgkJCQkJCQkgXAogCQkoeyB0cG9zID0gaGxpc3RfZW50cnkocG9zLCB0eXBlb2YoKnRwb3MpLCBtZW1iZXIpOyAxOyB9KTsgXAogCQlwb3MgPSByY3VfZGVyZWZlcmVuY2VfYmgocG9zLT5uZXh0KSkKIApAQCAtNDcyLDcgKzQ3Miw3IEBACiAgKi8KICNkZWZpbmUgaGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KHRwb3MsIHBvcywgbWVtYmVyKQkJXAogCWZvciAocG9zID0gcmN1X2RlcmVmZXJlbmNlKChwb3MpLT5uZXh0KTsJCQlcCi0JICAgICBwb3MgJiYgKHsgcHJlZmV0Y2gocG9zLT5uZXh0KTsgMTsgfSkgJiYJCQlcCisJICAgICBwb3MgJiYJCQkJCQkJXAogCSAgICAgKHsgdHBvcyA9IGhsaXN0X2VudHJ5KHBvcywgdHlwZW9mKCp0cG9zKSwgbWVtYmVyKTsgMTsgfSk7ICBcCiAJICAgICBwb3MgPSByY3VfZGVyZWZlcmVuY2UocG9zLT5uZXh0KSkKIApAQCAtNDg0LDcgKzQ4NCw3IEBACiAgKi8KICNkZWZpbmUgaGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1X2JoKHRwb3MsIHBvcywgbWVtYmVyKQkJXAogCWZvciAocG9zID0gcmN1X2RlcmVmZXJlbmNlX2JoKChwb3MpLT5uZXh0KTsJCQlcCi0JICAgICBwb3MgJiYgKHsgcHJlZmV0Y2gocG9zLT5uZXh0KTsgMTsgfSkgJiYJCQlcCisJICAgICBwb3MgJiYJCQkJCQkJXAogCSAgICAgKHsgdHBvcyA9IGhsaXN0X2VudHJ5KHBvcywgdHlwZW9mKCp0cG9zKSwgbWVtYmVyKTsgMTsgfSk7ICBcCiAJICAgICBwb3MgPSByY3VfZGVyZWZlcmVuY2VfYmgocG9zLT5uZXh0KSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCmluZGV4IGZmNDIyZDIuLjk5ZjlhYTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKQEAgLTQ3LDYgKzQ3LDE4IEBACiBleHRlcm4gaW50IHJjdXRvcnR1cmVfcnVubmFibGU7IC8qIGZvciBzeXNjdGwgKi8KICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgKi8KIAorI2lmIGRlZmluZWQoQ09ORklHX1RSRUVfUkNVKSB8fCBkZWZpbmVkKENPTkZJR19UUkVFX1BSRUVNUFRfUkNVKQorZXh0ZXJuIHZvaWQgcmN1dG9ydHVyZV9yZWNvcmRfdGVzdF90cmFuc2l0aW9uKHZvaWQpOworZXh0ZXJuIHZvaWQgcmN1dG9ydHVyZV9yZWNvcmRfcHJvZ3Jlc3ModW5zaWduZWQgbG9uZyB2ZXJudW0pOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCByY3V0b3J0dXJlX3JlY29yZF90ZXN0X3RyYW5zaXRpb24odm9pZCkKK3sKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCByY3V0b3J0dXJlX3JlY29yZF9wcm9ncmVzcyh1bnNpZ25lZCBsb25nIHZlcm51bSkKK3sKK30KKyNlbmRpZgorCiAjZGVmaW5lIFVJTlRfQ01QX0dFKGEsIGIpCShVSU5UX01BWCAvIDIgPj0gKGEpIC0gKGIpKQogI2RlZmluZSBVSU5UX0NNUF9MVChhLCBiKQkoVUlOVF9NQVggLyAyIDwgKGEpIC0gKGIpKQogI2RlZmluZSBVTE9OR19DTVBfR0UoYSwgYikJKFVMT05HX01BWCAvIDIgPj0gKGEpIC0gKGIpKQpAQCAtNjgsNyArODAsNiBAQAogZXh0ZXJuIHZvaWQgc3luY2hyb25pemVfc2NoZWQodm9pZCk7CiBleHRlcm4gdm9pZCByY3VfYmFycmllcl9iaCh2b2lkKTsKIGV4dGVybiB2b2lkIHJjdV9iYXJyaWVyX3NjaGVkKHZvaWQpOwotZXh0ZXJuIGludCBzY2hlZF9leHBlZGl0ZWRfdG9ydHVyZV9zdGF0cyhjaGFyICpwYWdlKTsKIAogc3RhdGljIGlubGluZSB2b2lkIF9fcmN1X3JlYWRfbG9ja19iaCh2b2lkKQogewpAQCAtNzc0LDYgKzc4NSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19yY3VfaGVhZF9xdWV1ZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiB7CisJV0FSTl9PTl9PTkNFKCh1bnNpZ25lZCBsb25nKWhlYWQgJiAweDMpOwogCWRlYnVnX29iamVjdF9hY3RpdmF0ZShoZWFkLCAmcmN1aGVhZF9kZWJ1Z19kZXNjcik7CiAJZGVidWdfb2JqZWN0X2FjdGl2ZV9zdGF0ZShoZWFkLCAmcmN1aGVhZF9kZWJ1Z19kZXNjciwKIAkJCQkgIFNUQVRFX1JDVV9IRUFEX1JFQURZLApAQCAtNzk3LDQgKzgwOSw2MCBAQAogfQogI2VuZGlmCS8qICNlbHNlICFDT05GSUdfREVCVUdfT0JKRUNUU19SQ1VfSEVBRCAqLwogCitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19pc19rZnJlZV9yY3Vfb2Zmc2V0KHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXJldHVybiBvZmZzZXQgPCA0MDk2OworfQorCitzdGF0aWMgX19hbHdheXNfaW5saW5lCit2b2lkIF9fa2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJdHlwZWRlZiB2b2lkICgqcmN1X2NhbGxiYWNrKShzdHJ1Y3QgcmN1X2hlYWQgKik7CisKKwlCVUlMRF9CVUdfT04oIV9fYnVpbHRpbl9jb25zdGFudF9wKG9mZnNldCkpOworCisJLyogU2VlIHRoZSBrZnJlZV9yY3UoKSBoZWFkZXIgY29tbWVudC4gKi8KKwlCVUlMRF9CVUdfT04oIV9faXNfa2ZyZWVfcmN1X29mZnNldChvZmZzZXQpKTsKKworCWNhbGxfcmN1KGhlYWQsIChyY3VfY2FsbGJhY2spb2Zmc2V0KTsKK30KKworZXh0ZXJuIHZvaWQga2ZyZWUoY29uc3Qgdm9pZCAqKTsKKworc3RhdGljIGlubGluZSB2b2lkIF9fcmN1X3JlY2xhaW0oc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpaGVhZC0+ZnVuYzsKKworCWlmIChfX2lzX2tmcmVlX3JjdV9vZmZzZXQob2Zmc2V0KSkKKwkJa2ZyZWUoKHZvaWQgKiloZWFkIC0gb2Zmc2V0KTsKKwllbHNlCisJCWhlYWQtPmZ1bmMoaGVhZCk7Cit9CisKKy8qKgorICoga2ZyZWVfcmN1KCkgLSBrZnJlZSBhbiBvYmplY3QgYWZ0ZXIgYSBncmFjZSBwZXJpb2QuCisgKiBAcHRyOglwb2ludGVyIHRvIGtmcmVlCisgKiBAcmN1X2hlYWQ6CXRoZSBuYW1lIG9mIHRoZSBzdHJ1Y3QgcmN1X2hlYWQgd2l0aGluIHRoZSB0eXBlIG9mIEBwdHIuCisgKgorICogTWFueSByY3UgY2FsbGJhY2tzIGZ1bmN0aW9ucyBqdXN0IGNhbGwga2ZyZWUoKSBvbiB0aGUgYmFzZSBzdHJ1Y3R1cmUuCisgKiBUaGVzZSBmdW5jdGlvbnMgYXJlIHRyaXZpYWwsIGJ1dCB0aGVpciBzaXplIGFkZHMgdXAsIGFuZCBmdXJ0aGVybW9yZQorICogd2hlbiB0aGV5IGFyZSB1c2VkIGluIGEga2VybmVsIG1vZHVsZSwgdGhhdCBtb2R1bGUgbXVzdCBpbnZva2UgdGhlCisgKiBoaWdoLWxhdGVuY3kgcmN1X2JhcnJpZXIoKSBmdW5jdGlvbiBhdCBtb2R1bGUtdW5sb2FkIHRpbWUuCisgKgorICogVGhlIGtmcmVlX3JjdSgpIGZ1bmN0aW9uIGhhbmRsZXMgdGhpcyBpc3N1ZS4gIFJhdGhlciB0aGFuIGVuY29kaW5nIGEKKyAqIGZ1bmN0aW9uIGFkZHJlc3MgaW4gdGhlIGVtYmVkZGVkIHJjdV9oZWFkIHN0cnVjdHVyZSwga2ZyZWVfcmN1KCkgaW5zdGVhZAorICogZW5jb2RlcyB0aGUgb2Zmc2V0IG9mIHRoZSByY3VfaGVhZCBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBiYXNlIHN0cnVjdHVyZS4KKyAqIEJlY2F1c2UgdGhlIGZ1bmN0aW9ucyBhcmUgbm90IGFsbG93ZWQgaW4gdGhlIGxvdy1vcmRlciA0MDk2IGJ5dGVzIG9mCisgKiBrZXJuZWwgdmlydHVhbCBtZW1vcnksIG9mZnNldHMgdXAgdG8gNDA5NSBieXRlcyBjYW4gYmUgYWNjb21tb2RhdGVkLgorICogSWYgdGhlIG9mZnNldCBpcyBsYXJnZXIgdGhhbiA0MDk1IGJ5dGVzLCBhIGNvbXBpbGUtdGltZSBlcnJvciB3aWxsCisgKiBiZSBnZW5lcmF0ZWQgaW4gX19rZnJlZV9yY3UoKS4gIElmIHRoaXMgZXJyb3IgaXMgdHJpZ2dlcmVkLCB5b3UgY2FuCisgKiBlaXRoZXIgZmFsbCBiYWNrIHRvIHVzZSBvZiBjYWxsX3JjdSgpIG9yIHJlYXJyYW5nZSB0aGUgc3RydWN0dXJlIHRvCisgKiBwb3NpdGlvbiB0aGUgcmN1X2hlYWQgc3RydWN0dXJlIGludG8gdGhlIGZpcnN0IDQwOTYgYnl0ZXMuCisgKgorICogTm90ZSB0aGF0IHRoZSBhbGxvd2FibGUgb2Zmc2V0IG1pZ2h0IGRlY3JlYXNlIGluIHRoZSBmdXR1cmUsIGZvciBleGFtcGxlLAorICogdG8gYWxsb3cgc29tZXRoaW5nIGxpa2Uga21lbV9jYWNoZV9mcmVlX3JjdSgpLgorICovCisjZGVmaW5lIGtmcmVlX3JjdShwdHIsIHJjdV9oZWFkKQkJCQkJXAorCV9fa2ZyZWVfcmN1KCYoKHB0ciktPnJjdV9oZWFkKSwgb2Zmc2V0b2YodHlwZW9mKCoocHRyKSksIHJjdV9oZWFkKSkKKwogI2VuZGlmIC8qIF9fTElOVVhfUkNVUERBVEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3V0aW55LmggYi9pbmNsdWRlL2xpbnV4L3JjdXRpbnkuaAppbmRleCAzMGViZDdjLi41MmIzZTAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXRpbnkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdXRpbnkuaApAQCAtMTAwLDYgKzEwMCwxNCBAQAogfQogCiAvKgorICogVGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBDUFUsIHdoaWNoCisgKiBhbGxvd3MgdXMgdG8gaWdub3JlIHZpcnR1YWxpemF0aW9uLWJhc2VkIGNvbnRleHQgc3dpdGNoZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByY3VfdmlydF9ub3RlX2NvbnRleHRfc3dpdGNoKGludCBjcHUpCit7Cit9CisKKy8qCiAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBncmFjZSBwZXJpb2RzLgogICovCiBzdGF0aWMgaW5saW5lIGxvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkKHZvaWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaCBiL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oCmluZGV4IDNhOTMzNDguLmU2NWQwNjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmN1dHJlZS5oCkBAIC0zNSw2ICszNSwxNiBAQAogZXh0ZXJuIGludCByY3VfbmVlZHNfY3B1KGludCBjcHUpOwogZXh0ZXJuIHZvaWQgcmN1X2NwdV9zdGFsbF9yZXNldCh2b2lkKTsKIAorLyoKKyAqIE5vdGUgYSB2aXJ0dWFsaXphdGlvbi1iYXNlZCBjb250ZXh0IHN3aXRjaC4gIFRoaXMgaXMgc2ltcGx5IGEKKyAqIHdyYXBwZXIgYXJvdW5kIHJjdV9ub3RlX2NvbnRleHRfc3dpdGNoKCksIHdoaWNoIGFsbG93cyBUSU5ZX1JDVQorICogdG8gc2F2ZSBhIGZldyBieXRlcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHJjdV92aXJ0X25vdGVfY29udGV4dF9zd2l0Y2goaW50IGNwdSkKK3sKKwlyY3Vfbm90ZV9jb250ZXh0X3N3aXRjaChjcHUpOworfQorCiAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKIAogZXh0ZXJuIHZvaWQgZXhpdF9yY3Uodm9pZCk7CkBAIC01OCw5ICs2OCwxMiBAQAogCiBleHRlcm4gdm9pZCByY3VfYmFycmllcih2b2lkKTsKIAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmN1dG9ydHVyZV90ZXN0c2VxOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmN1dG9ydHVyZV92ZXJudW07CiBleHRlcm4gbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWQodm9pZCk7CiBleHRlcm4gbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWRfYmgodm9pZCk7CiBleHRlcm4gbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWRfc2NoZWQodm9pZCk7CisKIGV4dGVybiB2b2lkIHJjdV9mb3JjZV9xdWllc2NlbnRfc3RhdGUodm9pZCk7CiBleHRlcm4gdm9pZCByY3VfYmhfZm9yY2VfcXVpZXNjZW50X3N0YXRlKHZvaWQpOwogZXh0ZXJuIHZvaWQgcmN1X3NjaGVkX2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmZraWxsLXJlZ3VsYXRvci5oIGIvaW5jbHVkZS9saW51eC9yZmtpbGwtcmVndWxhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNhMzZiYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcmZraWxsLXJlZ3VsYXRvci5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiByZmtpbGwtcmVndWxhdG9yLmMgLSBSZWd1bGF0b3IgY29uc3VtZXIgZHJpdmVyIGZvciByZmtpbGwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgIEd1aW1pbmcgWmh1byA8Z216aHVvQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSAgQW50b25pbyBPc3BpdGUgPG9zcGl0ZUBzdHVkZW50aS51bmluYS5pdD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fTElOVVhfUkZLSUxMX1JFR1VMQVRPUl9ICisjZGVmaW5lIF9fTElOVVhfUkZLSUxMX1JFR1VMQVRPUl9ICisKKy8qCisgKiBVc2UgInZyZmtpbGwiIGFzIHN1cHBseSBpZCB3aGVuIGRlY2xhcmluZyB0aGUgcmVndWxhdG9yIGNvbnN1bWVyOgorICoKKyAqIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBwY2FwX3JlZ3VsYXRvcl9WNl9jb25zdW1lcnMgW10gPSB7CisgKiAJeyAuZGV2X25hbWUgPSAicmZraWxsLXJlZ3VsYXRvci4wIiwgLnN1cHBseSA9ICJ2cmZraWxsIiB9LAorICogfTsKKyAqCisgKiBJZiB5b3UgaGF2ZSBzZXZlcmFsIHJlZ3VsYXRvciBkcml2ZW4gcmZraWxsLCB5b3UgY2FuIGFwcGVuZCBhIG51bWVyaWNhbCBpZCB0bworICogLmRldl9uYW1lIGFzIGRvbmUgYWJvdmUsIGFuZCB1c2UgdGhlIHNhbWUgaWQgd2hlbiBkZWNsYXJpbmcgdGhlIHBsYXRmb3JtCisgKiBkZXZpY2U6CisgKgorICogc3RhdGljIHN0cnVjdCByZmtpbGxfcmVndWxhdG9yX3BsYXRmb3JtX2RhdGEgZXp4X3Jma2lsbF9idF9kYXRhID0geworICogCS5uYW1lICA9ICJlengtYmx1ZXRvb3RoIiwKKyAqIAkudHlwZSAgPSBSRktJTExfVFlQRV9CTFVFVE9PVEgsCisgKiB9OworICoKKyAqIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGE5MTBfcmZraWxsID0geworICogCS5uYW1lICA9ICJyZmtpbGwtcmVndWxhdG9yIiwKKyAqIAkuaWQgICAgPSAwLAorICogCS5kZXYgICA9IHsKKyAqIAkJLnBsYXRmb3JtX2RhdGEgPSAmZXp4X3Jma2lsbF9idF9kYXRhLAorICogCX0sCisgKiB9OworICovCisKKyNpbmNsdWRlIDxsaW51eC9yZmtpbGwuaD4KKworc3RydWN0IHJma2lsbF9yZWd1bGF0b3JfcGxhdGZvcm1fZGF0YSB7CisJY2hhciAqbmFtZTsgICAgICAgICAgICAgLyogdGhlIG5hbWUgZm9yIHRoZSByZmtpbGwgc3dpdGNoICovCisJZW51bSByZmtpbGxfdHlwZSB0eXBlOyAgLyogdGhlIHR5cGUgYXMgc3BlY2lmaWVkIGluIHJma2lsbC5oICovCit9OworCisjZW5kaWYgLyogX19MSU5VWF9SRktJTExfUkVHVUxBVE9SX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCA5NDEwN2EyLi44ODVjNGYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC02NTMsOSArNjUzLDggQEAKICAqIEJpdHMgaW4gZmxhZ3MgZmllbGQgb2Ygc2lnbmFsX3N0cnVjdC4KICAqLwogI2RlZmluZSBTSUdOQUxfU1RPUF9TVE9QUEVECTB4MDAwMDAwMDEgLyogam9iIGNvbnRyb2wgc3RvcCBpbiBlZmZlY3QgKi8KLSNkZWZpbmUgU0lHTkFMX1NUT1BfREVRVUVVRUQJMHgwMDAwMDAwMiAvKiBzdG9wIHNpZ25hbCBkZXF1ZXVlZCAqLwotI2RlZmluZSBTSUdOQUxfU1RPUF9DT05USU5VRUQJMHgwMDAwMDAwNCAvKiBTSUdDT05UIHNpbmNlIFdDT05USU5VRUQgcmVhcCAqLwotI2RlZmluZSBTSUdOQUxfR1JPVVBfRVhJVAkweDAwMDAwMDA4IC8qIGdyb3VwIGV4aXQgaW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUgU0lHTkFMX1NUT1BfQ09OVElOVUVECTB4MDAwMDAwMDIgLyogU0lHQ09OVCBzaW5jZSBXQ09OVElOVUVEIHJlYXAgKi8KKyNkZWZpbmUgU0lHTkFMX0dST1VQX0VYSVQJMHgwMDAwMDAwNCAvKiBncm91cCBleGl0IGluIHByb2dyZXNzICovCiAvKgogICogUGVuZGluZyBub3RpZmljYXRpb25zIHRvIHBhcmVudC4KICAqLwpAQCAtNzMxLDEwICs3MzAsNiBAQAogCS8qIHRpbWVzdGFtcHMgKi8KIAl1bnNpZ25lZCBsb25nIGxvbmcgbGFzdF9hcnJpdmFsLC8qIHdoZW4gd2UgbGFzdCByYW4gb24gYSBjcHUgKi8KIAkJCSAgIGxhc3RfcXVldWVkOwkvKiB3aGVuIHdlIHdlcmUgbGFzdCBxdWV1ZWQgdG8gcnVuICovCi0jaWZkZWYgQ09ORklHX1NDSEVEU1RBVFMKLQkvKiBCS0wgc3RhdHMgKi8KLQl1bnNpZ25lZCBpbnQgYmtsX2NvdW50OwotI2VuZGlmCiB9OwogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1NDSEVEU1RBVFMpIHx8IGRlZmluZWQoQ09ORklHX1RBU0tfREVMQVlfQUNDVCkgKi8KIApAQCAtODY4LDYgKzg2Myw3IEBACiAKIHN0cnVjdCBzY2hlZF9ncm91cCB7CiAJc3RydWN0IHNjaGVkX2dyb3VwICpuZXh0OwkvKiBNdXN0IGJlIGEgY2lyY3VsYXIgbGlzdCAqLworCWF0b21pY190IHJlZjsKIAogCS8qCiAJICogQ1BVIHBvd2VyIG9mIHRoaXMgZ3JvdXAsIFNDSEVEX0xPQURfU0NBTEUgYmVpbmcgbWF4IHBvd2VyIGZvciBhCkBAIC04ODIsOSArODc4LDYgQEAKIAkgKiBOT1RFOiB0aGlzIGZpZWxkIGlzIHZhcmlhYmxlIGxlbmd0aC4gKEFsbG9jYXRlZCBkeW5hbWljYWxseQogCSAqIGJ5IGF0dGFjaGluZyBleHRyYSBzcGFjZSB0byB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmUsCiAJICogZGVwZW5kaW5nIG9uIGhvdyBtYW55IENQVXMgdGhlIGtlcm5lbCBoYXMgYm9vdGVkIHVwIHdpdGgpCi0JICoKLQkgKiBJdCBpcyBhbHNvIGJlIGVtYmVkZGVkIGludG8gc3RhdGljIGRhdGEgc3RydWN0dXJlcyBhdCBidWlsZAotCSAqIHRpbWUuIChTZWUgJ3N0cnVjdCBzdGF0aWNfc2NoZWRfZ3JvdXAnIGluIGtlcm5lbC9zY2hlZC5jKQogCSAqLwogCXVuc2lnbmVkIGxvbmcgY3B1bWFza1swXTsKIH07CkBAIC04OTQsMTcgKzg4Nyw2IEBACiAJcmV0dXJuIHRvX2NwdW1hc2soc2ctPmNwdW1hc2spOwogfQogCi1lbnVtIHNjaGVkX2RvbWFpbl9sZXZlbCB7Ci0JU0RfTFZfTk9ORSA9IDAsCi0JU0RfTFZfU0lCTElORywKLQlTRF9MVl9NQywKLQlTRF9MVl9CT09LLAotCVNEX0xWX0NQVSwKLQlTRF9MVl9OT0RFLAotCVNEX0xWX0FMTE5PREVTLAotCVNEX0xWX01BWAotfTsKLQogc3RydWN0IHNjaGVkX2RvbWFpbl9hdHRyIHsKIAlpbnQgcmVsYXhfZG9tYWluX2xldmVsOwogfTsKQEAgLTkxMyw2ICs4OTUsOCBAQAogCS5yZWxheF9kb21haW5fbGV2ZWwgPSAtMSwJCQlcCiB9CiAKK2V4dGVybiBpbnQgc2NoZWRfZG9tYWluX2xldmVsX21heDsKKwogc3RydWN0IHNjaGVkX2RvbWFpbiB7CiAJLyogVGhlc2UgZmllbGRzIG11c3QgYmUgc2V0dXAgKi8KIAlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpwYXJlbnQ7CS8qIHRvcCBkb21haW4gbXVzdCBiZSBudWxsIHRlcm1pbmF0ZWQgKi8KQEAgLTkzMCw3ICs5MTQsNyBAQAogCXVuc2lnbmVkIGludCBmb3JrZXhlY19pZHg7CiAJdW5zaWduZWQgaW50IHNtdF9nYWluOwogCWludCBmbGFnczsJCQkvKiBTZWUgU0RfKiAqLwotCWVudW0gc2NoZWRfZG9tYWluX2xldmVsIGxldmVsOworCWludCBsZXZlbDsKIAogCS8qIFJ1bnRpbWUgZmllbGRzLiAqLwogCXVuc2lnbmVkIGxvbmcgbGFzdF9iYWxhbmNlOwkvKiBpbml0IHRvIGppZmZpZXMuIHVuaXRzIGluIGppZmZpZXMgKi8KQEAgLTk3Myw2ICs5NTcsMTAgQEAKICNpZmRlZiBDT05GSUdfU0NIRURfREVCVUcKIAljaGFyICpuYW1lOwogI2VuZGlmCisJdW5pb24geworCQl2b2lkICpwcml2YXRlOwkJLyogdXNlZCBkdXJpbmcgY29uc3RydWN0aW9uICovCisJCXN0cnVjdCByY3VfaGVhZCByY3U7CS8qIHVzZWQgZHVyaW5nIGRlc3RydWN0aW9uICovCisJfTsKIAogCXVuc2lnbmVkIGludCBzcGFuX3dlaWdodDsKIAkvKgpAQCAtOTgxLDkgKzk2OSw2IEBACiAJICogTk9URTogdGhpcyBmaWVsZCBpcyB2YXJpYWJsZSBsZW5ndGguIChBbGxvY2F0ZWQgZHluYW1pY2FsbHkKIAkgKiBieSBhdHRhY2hpbmcgZXh0cmEgc3BhY2UgdG8gdGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlLAogCSAqIGRlcGVuZGluZyBvbiBob3cgbWFueSBDUFVzIHRoZSBrZXJuZWwgaGFzIGJvb3RlZCB1cCB3aXRoKQotCSAqCi0JICogSXQgaXMgYWxzbyBiZSBlbWJlZGRlZCBpbnRvIHN0YXRpYyBkYXRhIHN0cnVjdHVyZXMgYXQgYnVpbGQKLQkgKiB0aW1lLiAoU2VlICdzdHJ1Y3Qgc3RhdGljX3NjaGVkX2RvbWFpbicgaW4ga2VybmVsL3NjaGVkLmMpCiAJICovCiAJdW5zaWduZWQgbG9uZyBzcGFuWzBdOwogfTsKQEAgLTEyMDAsOCArMTE4NSw2IEBACiAJdW5zaWduZWQgaW50IGZsYWdzOwkvKiBwZXIgcHJvY2VzcyBmbGFncywgZGVmaW5lZCBiZWxvdyAqLwogCXVuc2lnbmVkIGludCBwdHJhY2U7CiAKLQlpbnQgbG9ja19kZXB0aDsJCS8qIEJLTCBsb2NrIGRlcHRoICovCi0KICNpZmRlZiBDT05GSUdfU01QCiAJc3RydWN0IHRhc2tfc3RydWN0ICp3YWtlX2VudHJ5OwogCWludCBvbl9jcHU7CkBAIC0xMjY3LDYgKzEyNTAsNyBAQAogCWludCBleGl0X3N0YXRlOwogCWludCBleGl0X2NvZGUsIGV4aXRfc2lnbmFsOwogCWludCBwZGVhdGhfc2lnbmFsOyAgLyogIFRoZSBzaWduYWwgc2VudCB3aGVuIHRoZSBwYXJlbnQgZGllcyAgKi8KKwl1bnNpZ25lZCBpbnQgZ3JvdXBfc3RvcDsJLyogR1JPVVBfU1RPUF8qLCBzaWdsb2NrIHByb3RlY3RlZCAqLwogCS8qID8/PyAqLwogCXVuc2lnbmVkIGludCBwZXJzb25hbGl0eTsKIAl1bnNpZ25lZCBkaWRfZXhlYzoxOwpAQCAtMTU0MSw2ICsxNTI1LDkgQEAKIAkJdW5zaWduZWQgbG9uZyBtZW1zd19ucl9wYWdlczsgLyogdW5jaGFyZ2VkIG1lbStzd2FwIHVzYWdlICovCiAJfSBtZW1jZ19iYXRjaDsKICNlbmRpZgorI2lmZGVmIENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQKKwlhdG9taWNfdCBwdHJhY2VfYnBfcmVmY250OworI2VuZGlmCiB9OwogCiAvKiBGdXR1cmUtc2FmZSBhY2Nlc3NvciBmb3Igc3RydWN0IHRhc2tfc3RydWN0J3MgY3B1c19hbGxvd2VkLiAqLwpAQCAtMTc4NCw2ICsxNzcxLDE3IEBACiAjZGVmaW5lIHRza191c2VkX21hdGgocCkgKChwKS0+ZmxhZ3MgJiBQRl9VU0VEX01BVEgpCiAjZGVmaW5lIHVzZWRfbWF0aCgpIHRza191c2VkX21hdGgoY3VycmVudCkKIAorLyoKKyAqIHRhc2stPmdyb3VwX3N0b3AgZmxhZ3MKKyAqLworI2RlZmluZSBHUk9VUF9TVE9QX1NJR01BU0sJMHhmZmZmICAgIC8qIHNpZ25yIG9mIHRoZSBsYXN0IGdyb3VwIHN0b3AgKi8KKyNkZWZpbmUgR1JPVVBfU1RPUF9QRU5ESU5HCSgxIDw8IDE2KSAvKiB0YXNrIHNob3VsZCBzdG9wIGZvciBncm91cCBzdG9wICovCisjZGVmaW5lIEdST1VQX1NUT1BfQ09OU1VNRQkoMSA8PCAxNykgLyogY29uc3VtZSBncm91cCBzdG9wIGNvdW50ICovCisjZGVmaW5lIEdST1VQX1NUT1BfVFJBUFBJTkcJKDEgPDwgMTgpIC8qIHN3aXRjaGluZyBmcm9tIFNUT1BQRUQgdG8gVFJBQ0VEICovCisjZGVmaW5lIEdST1VQX1NUT1BfREVRVUVVRUQJKDEgPDwgMTkpIC8qIHN0b3Agc2lnbmFsIGRlcXVldWVkICovCisKK2V4dGVybiB2b2lkIHRhc2tfY2xlYXJfZ3JvdXBfc3RvcF9wZW5kaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CisKICNpZmRlZiBDT05GSUdfUFJFRU1QVF9SQ1UKIAogI2RlZmluZSBSQ1VfUkVBRF9VTkxPQ0tfQkxPQ0tFRCAoMSA8PCAwKSAvKiBibG9ja2VkIHdoaWxlIGluIFJDVSByZWFkLXNpZGUuICovCkBAIC0yMDY0LDE0ICsyMDYyLDEzIEBACiAKIGV4dGVybiBpbnQgd2FrZV91cF9zdGF0ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgaW50IHN0YXRlKTsKIGV4dGVybiBpbnQgd2FrZV91cF9wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKLWV4dGVybiB2b2lkIHdha2VfdXBfbmV3X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCi0JCQkJdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncyk7CitleHRlcm4gdm9pZCB3YWtlX3VwX25ld190YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKICNpZmRlZiBDT05GSUdfU01QCiAgZXh0ZXJuIHZvaWQga2lja19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKICNlbHNlCiAgc3RhdGljIGlubGluZSB2b2lkIGtpY2tfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykgeyB9CiAjZW5kaWYKLWV4dGVybiB2b2lkIHNjaGVkX2Zvcmsoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgY2xvbmVfZmxhZ3MpOworZXh0ZXJuIHZvaWQgc2NoZWRfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogZXh0ZXJuIHZvaWQgc2NoZWRfZGVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogCiBleHRlcm4gdm9pZCBwcm9jX2NhY2hlc19pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCmluZGV4IGNhMDJmMTcuLjhjZTU5ZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKQEAgLTE0NTYsNyArMTQ1Niw3IEBACiAJCQkgICAgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSk7CiAJaW50ICgqaW5vZGVfcmVhZGxpbmspIChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogCWludCAoKmlub2RlX2ZvbGxvd19saW5rKSAoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCk7Ci0JaW50ICgqaW5vZGVfcGVybWlzc2lvbikgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTsKKwlpbnQgKCppbm9kZV9wZXJtaXNzaW9uKSAoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHVuc2lnbmVkIGZsYWdzKTsKIAlpbnQgKCppbm9kZV9zZXRhdHRyKQkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpOwogCWludCAoKmlub2RlX2dldGF0dHIpIChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIAlpbnQgKCppbm9kZV9zZXR4YXR0cikgKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VxbG9jay5oIGIvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKaW5kZXggZTk4Y2QyZS4uMDZkNjk2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKQEAgLTg4LDEyICs4OCwxMiBAQAogCXVuc2lnbmVkIHJldDsKIAogcmVwZWF0OgotCXJldCA9IHNsLT5zZXF1ZW5jZTsKLQlzbXBfcm1iKCk7CisJcmV0ID0gQUNDRVNTX09OQ0Uoc2wtPnNlcXVlbmNlKTsKIAlpZiAodW5saWtlbHkocmV0ICYgMSkpIHsKIAkJY3B1X3JlbGF4KCk7CiAJCWdvdG8gcmVwZWF0OwogCX0KKwlzbXBfcm1iKCk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaWduYWwuaCBiL2luY2x1ZGUvbGludXgvc2lnbmFsLmgKaW5kZXggZmNkMmIxNC4uYTgyMjMwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zaWduYWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oCkBAIC03LDYgKzcsOCBAQAogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAKK3N0cnVjdCB0YXNrX3N0cnVjdDsKKwogLyogZm9yIHN5c2N0bCAqLwogZXh0ZXJuIGludCBwcmludF9mYXRhbF9zaWduYWxzOwogLyoKQEAgLTEyMywxMyArMTI1LDEzIEBACiAjZGVmaW5lIF9zaWdfYW5kKHgseSkJKCh4KSAmICh5KSkKIF9TSUdfU0VUX0JJTk9QKHNpZ2FuZHNldHMsIF9zaWdfYW5kKQogCi0jZGVmaW5lIF9zaWdfbmFuZCh4LHkpCSgoeCkgJiB+KHkpKQotX1NJR19TRVRfQklOT1Aoc2lnbmFuZHNldHMsIF9zaWdfbmFuZCkKKyNkZWZpbmUgX3NpZ19hbmRuKHgseSkJKCh4KSAmIH4oeSkpCitfU0lHX1NFVF9CSU5PUChzaWdhbmRuc2V0cywgX3NpZ19hbmRuKQogCiAjdW5kZWYgX1NJR19TRVRfQklOT1AKICN1bmRlZiBfc2lnX29yCiAjdW5kZWYgX3NpZ19hbmQKLSN1bmRlZiBfc2lnX25hbmQKKyN1bmRlZiBfc2lnX2FuZG4KIAogI2RlZmluZSBfU0lHX1NFVF9PUChuYW1lLCBvcCkJCQkJCQlcCiBzdGF0aWMgaW5saW5lIHZvaWQgbmFtZShzaWdzZXRfdCAqc2V0KQkJCQkJXApAQCAtMjM0LDYgKzIzNiw5IEBACiAJcmV0dXJuIHNpZyA8PSBfTlNJRyA/IDEgOiAwOwogfQogCitzdHJ1Y3QgdGltZXNwZWM7CitzdHJ1Y3QgcHRfcmVnczsKKwogZXh0ZXJuIGludCBuZXh0X3NpZ25hbChzdHJ1Y3Qgc2lncGVuZGluZyAqcGVuZGluZywgc2lnc2V0X3QgKm1hc2spOwogZXh0ZXJuIGludCBkb19zZW5kX3NpZ19pbmZvKGludCBzaWcsIHN0cnVjdCBzaWdpbmZvICppbmZvLAogCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgYm9vbCBncm91cCk7CkBAIC0yNDIsMTAgKzI0NywxMiBAQAogZXh0ZXJuIGxvbmcgZG9fcnRfdGdzaWdxdWV1ZWluZm8ocGlkX3QgdGdpZCwgcGlkX3QgcGlkLCBpbnQgc2lnLAogCQkJCSBzaWdpbmZvX3QgKmluZm8pOwogZXh0ZXJuIGxvbmcgZG9fc2lncGVuZGluZyh2b2lkIF9fdXNlciAqLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiBpbnQgZG9fc2lndGltZWR3YWl0KGNvbnN0IHNpZ3NldF90ICosIHNpZ2luZm9fdCAqLAorCQkJCWNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqKTsKIGV4dGVybiBpbnQgc2lncHJvY21hc2soaW50LCBzaWdzZXRfdCAqLCBzaWdzZXRfdCAqKTsKK2V4dGVybiB2b2lkIHNldF9jdXJyZW50X2Jsb2NrZWQoY29uc3Qgc2lnc2V0X3QgKik7CiBleHRlcm4gaW50IHNob3dfdW5oYW5kbGVkX3NpZ25hbHM7CiAKLXN0cnVjdCBwdF9yZWdzOwogZXh0ZXJuIGludCBnZXRfc2lnbmFsX3RvX2RlbGl2ZXIoc2lnaW5mb190ICppbmZvLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKnJldHVybl9rYSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHZvaWQgKmNvb2tpZSk7CiBleHRlcm4gdm9pZCBleGl0X3NpZ25hbHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAppbmRleCBkMGFlOTBhLi4xNmM5YzA5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKQEAgLTM5MSw4ICszOTEsOCBAQAogCiAJX191MzIJCQlyeGhhc2g7CiAKKwlfX3UxNgkJCXF1ZXVlX21hcHBpbmc7CiAJa21lbWNoZWNrX2JpdGZpZWxkX2JlZ2luKGZsYWdzMik7Ci0JX191MTYJCQlxdWV1ZV9tYXBwaW5nOjE2OwogI2lmZGVmIENPTkZJR19JUFY2X05ESVNDX05PREVUWVBFCiAJX191OAkJCW5kaXNjX25vZGV0eXBlOjI7CiAjZW5kaWYKQEAgLTE3ODIsNyArMTc4Miw3IEBACiAKICNkZWZpbmUgc2tiX3F1ZXVlX3dhbGsocXVldWUsIHNrYikgXAogCQlmb3IgKHNrYiA9IChxdWV1ZSktPm5leHQ7CQkJCQlcCi0JCSAgICAgcHJlZmV0Y2goc2tiLT5uZXh0KSwgKHNrYiAhPSAoc3RydWN0IHNrX2J1ZmYgKikocXVldWUpKTsJXAorCQkgICAgIHNrYiAhPSAoc3RydWN0IHNrX2J1ZmYgKikocXVldWUpOwkJCQlcCiAJCSAgICAgc2tiID0gc2tiLT5uZXh0KQogCiAjZGVmaW5lIHNrYl9xdWV1ZV93YWxrX3NhZmUocXVldWUsIHNrYiwgdG1wKQkJCQkJXApAQCAtMTc5MSw3ICsxNzkxLDcgQEAKIAkJICAgICBza2IgPSB0bXAsIHRtcCA9IHNrYi0+bmV4dCkKIAogI2RlZmluZSBza2JfcXVldWVfd2Fsa19mcm9tKHF1ZXVlLCBza2IpCQkJCQkJXAotCQlmb3IgKDsgcHJlZmV0Y2goc2tiLT5uZXh0KSwgKHNrYiAhPSAoc3RydWN0IHNrX2J1ZmYgKikocXVldWUpKTsJXAorCQlmb3IgKDsgc2tiICE9IChzdHJ1Y3Qgc2tfYnVmZiAqKShxdWV1ZSk7CQkJXAogCQkgICAgIHNrYiA9IHNrYi0+bmV4dCkKIAogI2RlZmluZSBza2JfcXVldWVfd2Fsa19mcm9tX3NhZmUocXVldWUsIHNrYiwgdG1wKQkJCQlcCkBAIC0xODAxLDcgKzE4MDEsNyBAQAogCiAjZGVmaW5lIHNrYl9xdWV1ZV9yZXZlcnNlX3dhbGsocXVldWUsIHNrYikgXAogCQlmb3IgKHNrYiA9IChxdWV1ZSktPnByZXY7CQkJCQlcCi0JCSAgICAgcHJlZmV0Y2goc2tiLT5wcmV2KSwgKHNrYiAhPSAoc3RydWN0IHNrX2J1ZmYgKikocXVldWUpKTsJXAorCQkgICAgIHNrYiAhPSAoc3RydWN0IHNrX2J1ZmYgKikocXVldWUpOwkJCQlcCiAJCSAgICAgc2tiID0gc2tiLT5wcmV2KQogCiAjZGVmaW5lIHNrYl9xdWV1ZV9yZXZlcnNlX3dhbGtfc2FmZShxdWV1ZSwgc2tiLCB0bXApCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc21zYzkxMXguaCBiL2luY2x1ZGUvbGludXgvc21zYzkxMXguaAppbmRleCA3MTQ0ZThhLi40ZGRlNzBlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Ntc2M5MTF4LmgKKysrIGIvaW5jbHVkZS9saW51eC9zbXNjOTExeC5oCkBAIC0yOSw2ICsyOSw3IEBACiAJdW5zaWduZWQgaW50IGlycV9wb2xhcml0eTsKIAl1bnNpZ25lZCBpbnQgaXJxX3R5cGU7CiAJdW5zaWduZWQgaW50IGZsYWdzOworCXVuc2lnbmVkIGludCBzaGlmdDsKIAlwaHlfaW50ZXJmYWNlX3QgcGh5X2ludGVyZmFjZTsKIAl1bnNpZ25lZCBjaGFyIG1hY1s2XTsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaAppbmRleCBkMmI1ZTk4Li40ZWY5OGU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCisrKyBiL2luY2x1ZGUvbGludXgvc29ja2V0LmgKQEAgLTMzMyw1ICszMzMsNyBAQAogCiBleHRlcm4gaW50IF9fc3lzX3JlY3ZtbXNnKGludCBmZCwgc3RydWN0IG1tc2doZHIgX191c2VyICptbXNnLCB1bnNpZ25lZCBpbnQgdmxlbiwKIAkJCSAgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgdGltZXNwZWMgKnRpbWVvdXQpOworZXh0ZXJuIGludCBfX3N5c19zZW5kbW1zZyhpbnQgZmQsIHN0cnVjdCBtbXNnaGRyIF9fdXNlciAqbW1zZywKKwkJCSAgdW5zaWduZWQgaW50IHZsZW4sIHVuc2lnbmVkIGludCBmbGFncyk7CiAjZW5kaWYgLyogbm90IGtlcm5lbCBhbmQgbm90IGdsaWJjICovCiAjZW5kaWYgLyogX0xJTlVYX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrX3VwLmggYi9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrX3VwLmgKaW5kZXggYjE0ZjZhOS4uYTI2ZTJmYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGlubG9ja191cC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfdXAuaApAQCAtNSw2ICs1LDggQEAKICMgZXJyb3IgInBsZWFzZSBkb24ndCBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3RseSIKICNlbmRpZgogCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgkvKiBmb3IgY3B1X3JlbGF4KCkgKi8KKwogLyoKICAqIGluY2x1ZGUvbGludXgvc3BpbmxvY2tfdXAuaCAtIFVQLWRlYnVnIHZlcnNpb24gb2Ygc3BpbmxvY2tzLgogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oIGIvaW5jbHVkZS9saW51eC9zc2Ivc3NiLmgKaW5kZXggOTY1OWVmZi4uMjUyZTQ0ODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oCkBAIC0zMDgsNyArMzA4LDcgQEAKIAogCS8qIElEIGluZm9ybWF0aW9uIGFib3V0IHRoZSBDaGlwLiAqLwogCXUxNiBjaGlwX2lkOwotCXUxNiBjaGlwX3JldjsKKwl1OCBjaGlwX3JldjsKIAl1MTYgc3Byb21fb2Zmc2V0OwogCXUxNiBzcHJvbV9zaXplOwkJLyogbnVtYmVyIG9mIHdvcmRzIGluIHNwcm9tICovCiAJdTggY2hpcF9wYWNrYWdlOwpAQCAtNDA0LDcgKzQwNCw5IEBACiAKIC8qIFNldCBhIGZhbGxiYWNrIFNQUk9NLgogICogU2VlIGtkb2MgYXQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gZm9yIGNvbXBsZXRlIGRvY3VtZW50YXRpb24uICovCi1leHRlcm4gaW50IHNzYl9hcmNoX3NldF9mYWxsYmFja19zcHJvbShjb25zdCBzdHJ1Y3Qgc3NiX3Nwcm9tICpzcHJvbSk7CitleHRlcm4gaW50IHNzYl9hcmNoX3JlZ2lzdGVyX2ZhbGxiYWNrX3Nwcm9tKAorCQlpbnQgKCpzcHJvbV9jYWxsYmFjaykoc3RydWN0IHNzYl9idXMgKmJ1cywKKwkJc3RydWN0IHNzYl9zcHJvbSAqb3V0KSk7CiAKIC8qIFN1c3BlbmQgYSBTU0IgYnVzLgogICogQ2FsbCB0aGlzIGZyb20gdGhlIHBhcmVudCBidXMgc3VzcGVuZCByb3V0aW5lLiAqLwpAQCAtNTE4LDYgKzUyMCw3IEBACiAgKiBPdGhlcndpc2Ugc3RhdGljIGFsd2F5cy1vbiBwb3dlcmNvbnRyb2wgd2lsbCBiZSB1c2VkLiAqLwogZXh0ZXJuIGludCBzc2JfYnVzX3Bvd2VydXAoc3RydWN0IHNzYl9idXMgKmJ1cywgYm9vbCBkeW5hbWljX3BjdGwpOwogCitleHRlcm4gdm9pZCBzc2JfY29tbWl0X3NldHRpbmdzKHN0cnVjdCBzc2JfYnVzICpidXMpOwogCiAvKiBWYXJpb3VzIGhlbHBlciBmdW5jdGlvbnMgKi8KIGV4dGVybiB1MzIgc3NiX2FkbWF0Y2hfYmFzZSh1MzIgYWRtKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3NiL3NzYl9kcml2ZXJfY2hpcGNvbW1vbi5oIGIvaW5jbHVkZS9saW51eC9zc2Ivc3NiX2RyaXZlcl9jaGlwY29tbW9uLmgKaW5kZXggMmNkZjI0OS4uYTA4ZDY5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zc2Ivc3NiX2RyaXZlcl9jaGlwY29tbW9uLmgKKysrIGIvaW5jbHVkZS9saW51eC9zc2Ivc3NiX2RyaXZlcl9jaGlwY29tbW9uLmgKQEAgLTEyMyw2ICsxMjMsOCBAQAogI2RlZmluZSBTU0JfQ0hJUENPX0ZMQVNIREFUQQkJMHgwMDQ4CiAjZGVmaW5lIFNTQl9DSElQQ09fQkNBU1RfQUREUgkJMHgwMDUwCiAjZGVmaW5lIFNTQl9DSElQQ09fQkNBU1RfREFUQQkJMHgwMDU0CisjZGVmaW5lIFNTQl9DSElQQ09fR1BJT1BVTExVUAkJMHgwMDU4CQkvKiBSZXYgPj0gMjAgb25seSAqLworI2RlZmluZSBTU0JfQ0hJUENPX0dQSU9QVUxMRE9XTgkJMHgwMDVDCQkvKiBSZXYgPj0gMjAgb25seSAqLwogI2RlZmluZSBTU0JfQ0hJUENPX0dQSU9JTgkJMHgwMDYwCiAjZGVmaW5lIFNTQl9DSElQQ09fR1BJT09VVAkJMHgwMDY0CiAjZGVmaW5lIFNTQl9DSElQQ09fR1BJT09VVEVOCQkweDAwNjgKQEAgLTEzMSw2ICsxMzMsOSBAQAogI2RlZmluZSBTU0JfQ0hJUENPX0dQSU9JUlEJCTB4MDA3NAogI2RlZmluZSBTU0JfQ0hJUENPX1dBVENIRE9HCQkweDAwODAKICNkZWZpbmUgU1NCX0NISVBDT19HUElPVElNRVIJCTB4MDA4OAkJLyogTEVEIHBvd2Vyc2F2ZSAoY29yZXJldiA+PSAxNikgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fR1BJT1RJTUVSX09GRlRJTUUJMHgwMDAwRkZGRgorI2RlZmluZSAgU1NCX0NISVBDT19HUElPVElNRVJfT0ZGVElNRV9TSElGVAkwCisjZGVmaW5lICBTU0JfQ0hJUENPX0dQSU9USU1FUl9PTlRJTUUJMHhGRkZGMDAwMAogI2RlZmluZSAgU1NCX0NISVBDT19HUElPVElNRVJfT05USU1FX1NISUZUCTE2CiAjZGVmaW5lIFNTQl9DSElQQ09fR1BJT1RPVVRNCQkweDAwOEMJCS8qIExFRCBwb3dlcnNhdmUgKGNvcmVyZXYgPj0gMTYpICovCiAjZGVmaW5lIFNTQl9DSElQQ09fQ0xPQ0tfTgkJMHgwMDkwCkBAIC0xODksOCArMTk0LDEwIEBACiAjZGVmaW5lICBTU0JfQ0hJUENPX0NMS0NUTFNUX0hBVkVBTFBSRVEJMHgwMDAwMDAwOCAvKiBBTFAgYXZhaWxhYmxlIHJlcXVlc3QgKi8KICNkZWZpbmUgIFNTQl9DSElQQ09fQ0xLQ1RMU1RfSEFWRUhUUkVRCTB4MDAwMDAwMTAgLyogSFQgYXZhaWxhYmxlIHJlcXVlc3QgKi8KICNkZWZpbmUgIFNTQl9DSElQQ09fQ0xLQ1RMU1RfSFdDUk9GRgkweDAwMDAwMDIwIC8qIEZvcmNlIEhXIGNsb2NrIHJlcXVlc3Qgb2ZmICovCi0jZGVmaW5lICBTU0JfQ0hJUENPX0NMS0NUTFNUX0hBVkVIVAkweDAwMDEwMDAwIC8qIEhUIGF2YWlsYWJsZSAqLwotI2RlZmluZSAgU1NCX0NISVBDT19DTEtDVExTVF9IQVZFQUxQCTB4MDAwMjAwMDAgLyogQVBMIGF2YWlsYWJsZSAqLworI2RlZmluZSAgU1NCX0NISVBDT19DTEtDVExTVF9IQVZFQUxQCTB4MDAwMTAwMDAgLyogQUxQIGF2YWlsYWJsZSAqLworI2RlZmluZSAgU1NCX0NISVBDT19DTEtDVExTVF9IQVZFSFQJMHgwMDAyMDAwMCAvKiBIVCBhdmFpbGFibGUgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fQ0xLQ1RMU1RfNDMyOEEwX0hBVkVIVAkweDAwMDEwMDAwIC8qIDQzMjhhMCBoYXMgcmV2ZXJzZWQgYml0cyAqLworI2RlZmluZSAgU1NCX0NISVBDT19DTEtDVExTVF80MzI4QTBfSEFWRUFMUAkweDAwMDIwMDAwIC8qIDQzMjhhMCBoYXMgcmV2ZXJzZWQgYml0cyAqLwogI2RlZmluZSBTU0JfQ0hJUENPX0hXX1dPUktBUk9VTkQJMHgwMUU0IC8qIEhhcmR3YXJlIHdvcmthcm91bmQgKHJldiA+PSAyMCkgKi8KICNkZWZpbmUgU1NCX0NISVBDT19VQVJUMF9EQVRBCQkweDAzMDAKICNkZWZpbmUgU1NCX0NISVBDT19VQVJUMF9JTVIJCTB4MDMwNApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zc2Ivc3NiX3JlZ3MuaCBiL2luY2x1ZGUvbGludXgvc3NiL3NzYl9yZWdzLmgKaW5kZXggNDAyOTU1YS4uZWZiZjQ1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zc2Ivc3NiX3JlZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfcmVncy5oCkBAIC05Nyw3ICs5Nyw3IEBACiAjZGVmaW5lICBTU0JfSU5UVkVDX0VORVQxCTB4MDAwMDAwNDAgLyogRW5hYmxlIGludGVycnVwdHMgZm9yIGVuZXQgMSAqLwogI2RlZmluZSBTU0JfVE1TTE9XCQkweDBGOTggICAgIC8qIFNCIFRhcmdldCBTdGF0ZSBMb3cgKi8KICNkZWZpbmUgIFNTQl9UTVNMT1dfUkVTRVQJMHgwMDAwMDAwMSAvKiBSZXNldCAqLwotI2RlZmluZSAgU1NCX1RNU0xPV19SRUpFQ1RfMjIJMHgwMDAwMDAwMiAvKiBSZWplY3QgKEJhY2twbGFuZSByZXYgMi4yKSAqLworI2RlZmluZSAgU1NCX1RNU0xPV19SRUpFQ1QJMHgwMDAwMDAwMiAvKiBSZWplY3QgKFN0YW5kYXJkIEJhY2twbGFuZSkgKi8KICNkZWZpbmUgIFNTQl9UTVNMT1dfUkVKRUNUXzIzCTB4MDAwMDAwMDQgLyogUmVqZWN0IChCYWNrcGxhbmUgcmV2IDIuMykgKi8KICNkZWZpbmUgIFNTQl9UTVNMT1dfQ0xPQ0sJMHgwMDAxMDAwMCAvKiBDbG9jayBFbmFibGUgKi8KICNkZWZpbmUgIFNTQl9UTVNMT1dfRkdDCQkweDAwMDIwMDAwIC8qIEZvcmNlIEdhdGVkIENsb2NrcyBPbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdG1tYWMuaCBiL2luY2x1ZGUvbGludXgvc3RtbWFjLmgKaW5kZXggZjI5MTk3YS4uOTUyOWU0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdG1tYWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N0bW1hYy5oCkBAIC0yNiw2ICsyNiw4IEBACiAjaWZuZGVmIF9fU1RNTUFDX1BMQVRGT1JNX0RBVEEKICNkZWZpbmUgX19TVE1NQUNfUExBVEZPUk1fREFUQQogCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKIC8qIHBsYXRmb3JtIGRhdGEgZm9yIHBsYXRmb3JtIGRldmljZSBzdHJ1Y3R1cmUncyBwbGF0Zm9ybV9kYXRhIGZpZWxkICovCiAKIC8qIFByaXZhdGUgZGF0YSBmb3IgdGhlIFNUTSBvbi1ib2FyZCBldGhlcm5ldCBkcml2ZXIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCmluZGV4IGE3MTZlZTIuLmExNzZkYjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaApAQCAtMTIzLDYgKzEyMyw3IEBACiBleHRlcm4gdm9pZCBhcmd2X2ZyZWUoY2hhciAqKmFyZ3YpOwogCiBleHRlcm4gYm9vbCBzeXNmc19zdHJlcShjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpOworZXh0ZXJuIGludCBzdHJ0b2Jvb2woY29uc3QgY2hhciAqcywgYm9vbCAqcmVzKTsKIAogI2lmZGVmIENPTkZJR19CSU5BUllfUFJJTlRGCiBpbnQgdmJpbl9wcmludGYodTMyICpiaW5fYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3NjaGVkLmgKaW5kZXggZDgxZGI4MC4uZjczYzQ4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc2NoZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zY2hlZC5oCkBAIC0xMjcsMTMgKzEyNywxNiBAQAogI2RlZmluZSBSUENfVEFTS19LSUxMRUQJCTB4MDEwMAkJLyogdGFzayB3YXMga2lsbGVkICovCiAjZGVmaW5lIFJQQ19UQVNLX1NPRlQJCTB4MDIwMAkJLyogVXNlIHNvZnQgdGltZW91dHMgKi8KICNkZWZpbmUgUlBDX1RBU0tfU09GVENPTk4JMHgwNDAwCQkvKiBGYWlsIGlmIGNhbid0IGNvbm5lY3QgKi8KKyNkZWZpbmUgUlBDX1RBU0tfU0VOVAkJMHgwODAwCQkvKiBtZXNzYWdlIHdhcyBzZW50ICovCisjZGVmaW5lIFJQQ19UQVNLX1RJTUVPVVQJMHgxMDAwCQkvKiBmYWlsIHdpdGggRVRJTUVET1VUIG9uIHRpbWVvdXQgKi8KIAogI2RlZmluZSBSUENfSVNfQVNZTkModCkJCSgodCktPnRrX2ZsYWdzICYgUlBDX1RBU0tfQVNZTkMpCiAjZGVmaW5lIFJQQ19JU19TV0FQUEVSKHQpCSgodCktPnRrX2ZsYWdzICYgUlBDX1RBU0tfU1dBUFBFUikKICNkZWZpbmUgUlBDX0RPX1JPT1RPVkVSUklERSh0KQkoKHQpLT50a19mbGFncyAmIFJQQ19UQVNLX1JPT1RDUkVEUykKICNkZWZpbmUgUlBDX0FTU0FTU0lOQVRFRCh0KQkoKHQpLT50a19mbGFncyAmIFJQQ19UQVNLX0tJTExFRCkKLSNkZWZpbmUgUlBDX0lTX1NPRlQodCkJCSgodCktPnRrX2ZsYWdzICYgUlBDX1RBU0tfU09GVCkKKyNkZWZpbmUgUlBDX0lTX1NPRlQodCkJCSgodCktPnRrX2ZsYWdzICYgKFJQQ19UQVNLX1NPRlR8UlBDX1RBU0tfVElNRU9VVCkpCiAjZGVmaW5lIFJQQ19JU19TT0ZUQ09OTih0KQkoKHQpLT50a19mbGFncyAmIFJQQ19UQVNLX1NPRlRDT05OKQorI2RlZmluZSBSUENfV0FTX1NFTlQodCkJCSgodCktPnRrX2ZsYWdzICYgUlBDX1RBU0tfU0VOVCkKIAogI2RlZmluZSBSUENfVEFTS19SVU5OSU5HCTAKICNkZWZpbmUgUlBDX1RBU0tfUVVFVUVECQkxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmggYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKaW5kZXggODNlY2MxNy4uYWI3MTQ0NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaApAQCAtNjEwLDYgKzYxMCw4IEBACiBhc21saW5rYWdlIGxvbmcgc3lzX3NlbmR0byhpbnQsIHZvaWQgX191c2VyICosIHNpemVfdCwgdW5zaWduZWQsCiAJCQkJc3RydWN0IHNvY2thZGRyIF9fdXNlciAqLCBpbnQpOwogYXNtbGlua2FnZSBsb25nIHN5c19zZW5kbXNnKGludCBmZCwgc3RydWN0IG1zZ2hkciBfX3VzZXIgKm1zZywgdW5zaWduZWQgZmxhZ3MpOworYXNtbGlua2FnZSBsb25nIHN5c19zZW5kbW1zZyhpbnQgZmQsIHN0cnVjdCBtbXNnaGRyIF9fdXNlciAqbXNnLAorCQkJICAgICB1bnNpZ25lZCBpbnQgdmxlbiwgdW5zaWduZWQgZmxhZ3MpOwogYXNtbGlua2FnZSBsb25nIHN5c19yZWN2KGludCwgdm9pZCBfX3VzZXIgKiwgc2l6ZV90LCB1bnNpZ25lZCk7CiBhc21saW5rYWdlIGxvbmcgc3lzX3JlY3Zmcm9tKGludCwgdm9pZCBfX3VzZXIgKiwgc2l6ZV90LCB1bnNpZ25lZCwKIAkJCQlzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICosIGludCBfX3VzZXIgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2Rldi5oIGIvaW5jbHVkZS9saW51eC9zeXNkZXYuaAppbmRleCBkZmIwNzhkLi5kMzVlNzgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzZGV2LmgKQEAgLTM0LDEyICszNCw2IEBACiAJc3RydWN0IGxpc3RfaGVhZAlkcml2ZXJzOwogCXN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICoqYXR0cnM7CiAJc3RydWN0IGtzZXQJCWtzZXQ7Ci0jaWZuZGVmIENPTkZJR19BUkNIX05PX1NZU0RFVl9PUFMKLQkvKiBEZWZhdWx0IG9wZXJhdGlvbnMgZm9yIHRoZXNlIHR5cGVzIG9mIGRldmljZXMgKi8KLQlpbnQJKCpzaHV0ZG93bikoc3RydWN0IHN5c19kZXZpY2UgKik7Ci0JaW50CSgqc3VzcGVuZCkoc3RydWN0IHN5c19kZXZpY2UgKiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKLQlpbnQJKCpyZXN1bWUpKHN0cnVjdCBzeXNfZGV2aWNlICopOwotI2VuZGlmCiB9OwogCiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSB7CkBAIC03NywxMSArNzEsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQJZW50cnk7CiAJaW50CSgqYWRkKShzdHJ1Y3Qgc3lzX2RldmljZSAqKTsKIAlpbnQJKCpyZW1vdmUpKHN0cnVjdCBzeXNfZGV2aWNlICopOwotI2lmbmRlZiBDT05GSUdfQVJDSF9OT19TWVNERVZfT1BTCi0JaW50CSgqc2h1dGRvd24pKHN0cnVjdCBzeXNfZGV2aWNlICopOwotCWludAkoKnN1c3BlbmQpKHN0cnVjdCBzeXNfZGV2aWNlICosIHBtX21lc3NhZ2VfdCBzdGF0ZSk7Ci0JaW50CSgqcmVzdW1lKShzdHJ1Y3Qgc3lzX2RldmljZSAqKTsKLSNlbmRpZgogfTsKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2ZzLmggYi9pbmNsdWRlL2xpbnV4L3N5c2ZzLmgKaW5kZXggMzBiODgxNS4uYzNhY2RhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNmcy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzZnMuaApAQCAtMTc2LDcgKzE3Niw2IEBACiAJCQkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSk7CiBzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzeXNmc19nZXQoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpOwogdm9pZCBzeXNmc19wdXQoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpOwotdm9pZCBzeXNmc19wcmludGtfbGFzdF9maWxlKHZvaWQpOwogCiAvKiBDYWxsZWQgdG8gY2xlYXIgYSBucyB0YWcgd2hlbiBpdCBpcyBubyBsb25nZXIgdmFsaWQgKi8KIHZvaWQgc3lzZnNfZXhpdF9ucyhlbnVtIGtvYmpfbnNfdHlwZSB0eXBlLCBjb25zdCB2b2lkICp0YWcpOwpAQCAtMzQ4LDEwICszNDcsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc3lzZnNfcHJpbnRrX2xhc3RfZmlsZSh2b2lkKQotewotfQotCiAjZW5kaWYgLyogQ09ORklHX1NZU0ZTICovCiAKICNlbmRpZiAvKiBfU1lTRlNfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGlfd2lsaW5rX3N0LmggYi9pbmNsdWRlL2xpbnV4L3RpX3dpbGlua19zdC5oCmluZGV4IDcwNzFlYzUuLmIwMDRlNTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGlfd2lsaW5rX3N0LmgKKysrIGIvaW5jbHVkZS9saW51eC90aV93aWxpbmtfc3QuaApAQCAtMTQwLDEyICsxNDAsMTIgQEAKICAqLwogc3RydWN0IHN0X2RhdGFfcyB7CiAJdW5zaWduZWQgbG9uZyBzdF9zdGF0ZTsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCXN0cnVjdCBza19idWZmICp0eF9za2I7CiAjZGVmaW5lIFNUX1RYX1NFTkRJTkcJMQogI2RlZmluZSBTVF9UWF9XQUtFVVAJMgogCXVuc2lnbmVkIGxvbmcgdHhfc3RhdGU7CiAJc3RydWN0IHN0X3Byb3RvX3MgKmxpc3RbU1RfTUFYX0NIQU5ORUxTXTsKKwlib29sIGlzX3JlZ2lzdGVyZWRbU1RfTUFYX0NIQU5ORUxTXTsKIAl1bnNpZ25lZCBsb25nIHJ4X3N0YXRlOwogCXVuc2lnbmVkIGxvbmcgcnhfY291bnQ7CiAJc3RydWN0IHNrX2J1ZmYgKnJ4X3NrYjsKQEAgLTE1NSw2ICsxNTUsNyBAQAogCXVuc2lnbmVkIGNoYXIJcHJvdG9zX3JlZ2lzdGVyZWQ7CiAJdW5zaWduZWQgbG9uZyBsbF9zdGF0ZTsKIAl2b2lkICpraW1fZGF0YTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZS5oIGIvaW5jbHVkZS9saW51eC90aW1lLmgKaW5kZXggNDU0YTI2Mi4uYjMwNjE3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1lLmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1lLmgKQEAgLTEyNiw2ICsxMjYsNyBAQAogc3RydWN0IHRpbWVzcGVjIGdldF9tb25vdG9uaWNfY29hcnNlKHZvaWQpOwogdm9pZCBnZXRfeHRpbWVfYW5kX21vbm90b25pY19hbmRfc2xlZXBfb2Zmc2V0KHN0cnVjdCB0aW1lc3BlYyAqeHRpbSwKIAkJCQlzdHJ1Y3QgdGltZXNwZWMgKnd0b20sIHN0cnVjdCB0aW1lc3BlYyAqc2xlZXApOwordm9pZCB0aW1la2VlcGluZ19pbmplY3Rfc2xlZXB0aW1lKHN0cnVjdCB0aW1lc3BlYyAqZGVsdGEpOwogCiAjZGVmaW5lIENVUlJFTlRfVElNRQkJKGN1cnJlbnRfa2VybmVsX3RpbWUoKSkKICNkZWZpbmUgQ1VSUkVOVF9USU1FX1NFQwkoKHN0cnVjdCB0aW1lc3BlYykgeyBnZXRfc2Vjb25kcygpLCAwIH0pCkBAIC0yOTQsNiArMjk1LDggQEAKICNkZWZpbmUgQ0xPQ0tfUkVBTFRJTUVfQ09BUlNFCQk1CiAjZGVmaW5lIENMT0NLX01PTk9UT05JQ19DT0FSU0UJCTYKICNkZWZpbmUgQ0xPQ0tfQk9PVFRJTUUJCQk3CisjZGVmaW5lIENMT0NLX1JFQUxUSU1FX0FMQVJNCQk4CisjZGVmaW5lIENMT0NLX0JPT1RUSU1FX0FMQVJNCQk5CiAKIC8qCiAgKiBUaGUgSURzIG9mIHZhcmlvdXMgaGFyZHdhcmUgY2xvY2tzOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1lcnF1ZXVlLmggYi9pbmNsdWRlL2xpbnV4L3RpbWVycXVldWUuaAppbmRleCBhNTIwZmQ3Li41MDg4NzI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWVycXVldWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWVycXVldWUuaApAQCAtMzksNyArMzksNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGltZXJxdWV1ZV9pbml0KHN0cnVjdCB0aW1lcnF1ZXVlX25vZGUgKm5vZGUpCiB7Ci0JUkJfQ0xFQVJfTk9ERSgmbm9kZS0+bm9kZSk7CisJcmJfaW5pdF9ub2RlKCZub2RlLT5ub2RlKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHRpbWVycXVldWVfaW5pdF9oZWFkKHN0cnVjdCB0aW1lcnF1ZXVlX2hlYWQgKmhlYWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpcGMuaCBiL2luY2x1ZGUvbGludXgvdGlwYy5oCmluZGV4IGE1Yjk5NGEuLmYyZDkwMDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGlwYy5oCisrKyBiL2luY2x1ZGUvbGludXgvdGlwYy5oCkBAIC0xMDEsNyArMTAxLDcgQEAKICAqIExpbWl0aW5nIHZhbHVlcyBmb3IgbWVzc2FnZXMKICAqLwogCi0jZGVmaW5lIFRJUENfTUFYX1VTRVJfTVNHX1NJWkUJNjYwMDAKKyNkZWZpbmUgVElQQ19NQVhfVVNFUl9NU0dfU0laRQk2NjAwMFUKIAogLyoKICAqIE1lc3NhZ2UgaW1wb3J0YW5jZSBsZXZlbHMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHJhY2Vob29rLmggYi9pbmNsdWRlL2xpbnV4L3RyYWNlaG9vay5oCmluZGV4IGViY2ZhNGUuLmU5NWY1MjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHJhY2Vob29rLmgKKysrIGIvaW5jbHVkZS9saW51eC90cmFjZWhvb2suaApAQCAtNDY5LDMzICs0NjksNiBAQAogfQogCiAvKioKLSAqIHRyYWNlaG9va19ub3RpZnlfamN0bCAtIHJlcG9ydCBhYm91dCBqb2IgY29udHJvbCBzdG9wL2NvbnRpbnVlCi0gKiBAbm90aWZ5OgkJemVybywgJUNMRF9TVE9QUEVEIG9yICVDTERfQ09OVElOVUVECi0gKiBAd2h5OgkJJUNMRF9TVE9QUEVEIG9yICVDTERfQ09OVElOVUVECi0gKgotICogVGhpcyBpcyBjYWxsZWQgd2hlbiB3ZSBtaWdodCBjYWxsIGRvX25vdGlmeV9wYXJlbnRfY2xkc3RvcCgpLgotICoKLSAqIEBub3RpZnkgaXMgemVybyBpZiB3ZSB3b3VsZCBub3Qgb3JkaW5hcmlseSBzZW5kIGEgJVNJR0NITEQsCi0gKiBvciBpcyB0aGUgJUNMRF9TVE9QUEVEIG9yICVDTERfQ09OVElOVUVEIC5zaV9jb2RlIGZvciAlU0lHQ0hMRC4KLSAqCi0gKiBAd2h5IGlzICVDTERfU1RPUFBFRCB3aGVuIGFib3V0IHRvIHN0b3AgZm9yIGpvYiBjb250cm9sOwotICogd2UgYXJlIGFscmVhZHkgaW4gJVRBU0tfU1RPUFBFRCBzdGF0ZSwgYWJvdXQgdG8gY2FsbCBzY2hlZHVsZSgpLgotICogSXQgbWlnaHQgYWxzbyBiZSB0aGF0IHdlIGhhdmUganVzdCBleGl0ZWQgKGNoZWNrICVQRl9FWElUSU5HKSwKLSAqIGJ1dCBuZWVkIHRvIHJlcG9ydCB0aGF0IGEgZ3JvdXAtd2lkZSBzdG9wIGlzIGNvbXBsZXRlLgotICoKLSAqIEB3aHkgaXMgJUNMRF9DT05USU5VRUQgd2hlbiB3YWtpbmcgdXAgYWZ0ZXIgam9iIGNvbnRyb2wgc3RvcCBhbmQKLSAqIHJlYWR5IHRvIG1ha2UgYSBkZWxheWVkIEBub3RpZnkgcmVwb3J0LgotICoKLSAqIFJldHVybiB0aGUgJUNMRF8qIHZhbHVlIGZvciAlU0lHQ0hMRCwgb3IgemVybyB0byBnZW5lcmF0ZSBubyBzaWduYWwuCi0gKgotICogQ2FsbGVkIHdpdGggdGhlIHNpZ2xvY2sgaGVsZC4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdHJhY2Vob29rX25vdGlmeV9qY3RsKGludCBub3RpZnksIGludCB3aHkpCi17Ci0JcmV0dXJuIG5vdGlmeSA/OiAoY3VycmVudC0+cHRyYWNlICYgUFRfUFRSQUNFRCkgPyB3aHkgOiAwOwotfQotCi0vKioKICAqIHRyYWNlaG9va19maW5pc2hfamN0bCAtIHJlcG9ydCBhYm91dCByZXR1cm4gZnJvbSBqb2IgY29udHJvbCBzdG9wCiAgKgogICogVGhpcyBpcyBjYWxsZWQgYnkgZG9fc2lnbmFsX3N0b3AoKSBhZnRlciB3YWtldXAuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaCBiL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCmluZGV4IDk3Yzg0YTUuLmQ1MzBhNDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCisrKyBiL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCkBAIC0yOSw3ICsyOSw3IEBACiAKIHN0cnVjdCB0cmFjZXBvaW50IHsKIAljb25zdCBjaGFyICpuYW1lOwkJLyogVHJhY2Vwb2ludCBuYW1lICovCi0JaW50IHN0YXRlOwkJCS8qIFN0YXRlLiAqLworCXN0cnVjdCBqdW1wX2xhYmVsX2tleSBrZXk7CiAJdm9pZCAoKnJlZ2Z1bmMpKHZvaWQpOwogCXZvaWQgKCp1bnJlZ2Z1bmMpKHZvaWQpOwogCXN0cnVjdCB0cmFjZXBvaW50X2Z1bmMgX19yY3UgKmZ1bmNzOwpAQCAtMTQ2LDkgKzE0Niw3IEBACiAJZXh0ZXJuIHN0cnVjdCB0cmFjZXBvaW50IF9fdHJhY2Vwb2ludF8jI25hbWU7CQkJXAogCXN0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZV8jI25hbWUocHJvdG8pCQkJCVwKIAl7CQkJCQkJCQlcCi0JCUpVTVBfTEFCRUwoJl9fdHJhY2Vwb2ludF8jI25hbWUuc3RhdGUsIGRvX3RyYWNlKTsJXAotCQlyZXR1cm47CQkJCQkJCVwKLWRvX3RyYWNlOgkJCQkJCQkJXAorCQlpZiAoc3RhdGljX2JyYW5jaCgmX190cmFjZXBvaW50XyMjbmFtZS5rZXkpKQkJXAogCQkJX19ET19UUkFDRSgmX190cmFjZXBvaW50XyMjbmFtZSwJCVwKIAkJCQlUUF9QUk9UTyhkYXRhX3Byb3RvKSwJCQlcCiAJCQkJVFBfQVJHUyhkYXRhX2FyZ3MpLAkJCVwKQEAgLTE3NiwxNCArMTc0LDE0IEBACiAgKiBzdHJ1Y3R1cmVzLCBzbyB3ZSBjcmVhdGUgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGl0ZXJhdGlvbgogICogb24gdGhlIHRyYWNlcG9pbnRzLgogICovCi0jZGVmaW5lIERFRklORV9UUkFDRV9GTihuYW1lLCByZWcsIHVucmVnKQkJCQlcCi0Jc3RhdGljIGNvbnN0IGNoYXIgX190cHN0cnRhYl8jI25hbWVbXQkJCQlcCi0JX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX190cmFjZXBvaW50c19zdHJpbmdzIikpKSA9ICNuYW1lOwlcCi0Jc3RydWN0IHRyYWNlcG9pbnQgX190cmFjZXBvaW50XyMjbmFtZQkJCQlcCi0JX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX190cmFjZXBvaW50cyIpKSkgPQkJCVwKLQkJeyBfX3Rwc3RydGFiXyMjbmFtZSwgMCwgcmVnLCB1bnJlZywgTlVMTCB9OwkJXAotCXN0YXRpYyBzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0IF9fdHJhY2Vwb2ludF9wdHJfIyNuYW1lIF9fdXNlZAlcCi0JX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX190cmFjZXBvaW50c19wdHJzIikpKSA9CQlcCisjZGVmaW5lIERFRklORV9UUkFDRV9GTihuYW1lLCByZWcsIHVucmVnKQkJCQkgXAorCXN0YXRpYyBjb25zdCBjaGFyIF9fdHBzdHJ0YWJfIyNuYW1lW10JCQkJIFwKKwlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3RyYWNlcG9pbnRzX3N0cmluZ3MiKSkpID0gI25hbWU7CSBcCisJc3RydWN0IHRyYWNlcG9pbnQgX190cmFjZXBvaW50XyMjbmFtZQkJCQkgXAorCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fdHJhY2Vwb2ludHMiKSkpID0JCQkgXAorCQl7IF9fdHBzdHJ0YWJfIyNuYW1lLCBKVU1QX0xBQkVMX0lOSVQsIHJlZywgdW5yZWcsIE5VTEwgfTtcCisJc3RhdGljIHN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgX190cmFjZXBvaW50X3B0cl8jI25hbWUgX191c2VkCSBcCisJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX190cmFjZXBvaW50c19wdHJzIikpKSA9CQkgXAogCQkmX190cmFjZXBvaW50XyMjbmFtZTsKIAogI2RlZmluZSBERUZJTkVfVFJBQ0UobmFtZSkJCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9ybmRpc19ob3N0LmggYi9pbmNsdWRlL2xpbnV4L3VzYi9ybmRpc19ob3N0LmgKaW5kZXggMDVlZjUyOC4uODhmY2ViNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2Ivcm5kaXNfaG9zdC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3JuZGlzX2hvc3QuaApAQCAtMjU2LDYgKzI1Niw4IEBACiAjZGVmaW5lIEZMQUdfUk5ESVNfUEhZTV9OT1RfV0lSRUxFU1MJMHgwMDAxCiAjZGVmaW5lIEZMQUdfUk5ESVNfUEhZTV9XSVJFTEVTUwkweDAwMDIKIAorLyogRmxhZ3MgZm9yIGRyaXZlcl9pbmZvOjpkYXRhICovCisjZGVmaW5lIFJORElTX0RSSVZFUl9EQVRBX1BPTExfU1RBVFVTCTEJLyogcG9sbCBzdGF0dXMgYmVmb3JlIGNvbnRyb2wgKi8KIAogZXh0ZXJuIHZvaWQgcm5kaXNfc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVyYiAqdXJiKTsKIGV4dGVybiBpbnQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3VzYm5ldC5oIGIvaW5jbHVkZS9saW51eC91c2IvdXNibmV0LmgKaW5kZXggMGUxODU1MC4uNjA1YjBhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvdXNibmV0LmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvdXNibmV0LmgKQEAgLTY4LDYgKzY4LDcgQEAKICMJCWRlZmluZSBFVkVOVF9SWF9QQVVTRUQJNQogIwkJZGVmaW5lIEVWRU5UX0RFVl9XQUtJTkcgNgogIwkJZGVmaW5lIEVWRU5UX0RFVl9BU0xFRVAgNworIwkJZGVmaW5lIEVWRU5UX0RFVl9PUEVOCTgKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHVzYl9kcml2ZXIgKmRyaXZlcl9vZihzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdjRsMi1tZWRpYWJ1cy5oIGIvaW5jbHVkZS9saW51eC92NGwyLW1lZGlhYnVzLmgKaW5kZXggNzA1NGE3YS4uZGU1YzE1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92NGwyLW1lZGlhYnVzLmgKKysrIGIvaW5jbHVkZS9saW51eC92NGwyLW1lZGlhYnVzLmgKQEAgLTQ3LDcgKzQ3LDcgQEAKIAlWNEwyX01CVVNfRk1UX1JHQjU2NV8yWDhfQkUgPSAweDEwMDcsCiAJVjRMMl9NQlVTX0ZNVF9SR0I1NjVfMlg4X0xFID0gMHgxMDA4LAogCi0JLyogWVVWIChpbmNsdWRpbmcgZ3JleSkgLSBuZXh0IGlzIDB4MjAxMyAqLworCS8qIFlVViAoaW5jbHVkaW5nIGdyZXkpIC0gbmV4dCBpcyAweDIwMTQgKi8KIAlWNEwyX01CVVNfRk1UX1k4XzFYOCA9IDB4MjAwMSwKIAlWNEwyX01CVVNfRk1UX1VZVlk4XzFfNVg4ID0gMHgyMDAyLAogCVY0TDJfTUJVU19GTVRfVllVWThfMV81WDggPSAweDIwMDMsCkBAIC02MCw2ICs2MCw3IEBACiAJVjRMMl9NQlVTX0ZNVF9ZMTBfMVgxMCA9IDB4MjAwYSwKIAlWNEwyX01CVVNfRk1UX1lVWVYxMF8yWDEwID0gMHgyMDBiLAogCVY0TDJfTUJVU19GTVRfWVZZVTEwXzJYMTAgPSAweDIwMGMsCisJVjRMMl9NQlVTX0ZNVF9ZMTJfMVgxMiA9IDB4MjAxMywKIAlWNEwyX01CVVNfRk1UX1VZVlk4XzFYMTYgPSAweDIwMGYsCiAJVjRMMl9NQlVTX0ZNVF9WWVVZOF8xWDE2ID0gMHgyMDEwLAogCVY0TDJfTUJVU19GTVRfWVVZVjhfMVgxNiA9IDB4MjAxMSwKQEAgLTY3LDkgKzY4LDExIEBACiAJVjRMMl9NQlVTX0ZNVF9ZVVlWMTBfMVgyMCA9IDB4MjAwZCwKIAlWNEwyX01CVVNfRk1UX1lWWVUxMF8xWDIwID0gMHgyMDBlLAogCi0JLyogQmF5ZXIgLSBuZXh0IGlzIDB4MzAxMyAqLworCS8qIEJheWVyIC0gbmV4dCBpcyAweDMwMTUgKi8KIAlWNEwyX01CVVNfRk1UX1NCR0dSOF8xWDggPSAweDMwMDEsCisJVjRMMl9NQlVTX0ZNVF9TR0JSRzhfMVg4ID0gMHgzMDEzLAogCVY0TDJfTUJVU19GTVRfU0dSQkc4XzFYOCA9IDB4MzAwMiwKKwlWNEwyX01CVVNfRk1UX1NSR0dCOF8xWDggPSAweDMwMTQsCiAJVjRMMl9NQlVTX0ZNVF9TQkdHUjEwX0RQQ004XzFYOCA9IDB4MzAwYiwKIAlWNEwyX01CVVNfRk1UX1NHQlJHMTBfRFBDTThfMVg4ID0gMHgzMDBjLAogCVY0TDJfTUJVU19GTVRfU0dSQkcxMF9EUENNOF8xWDggPSAweDMwMDksCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oIGIvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaAppbmRleCBhYTZjMzkzLi5iZTgyYzhlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKQEAgLTMwOCw2ICszMDgsNyBAQAogI2RlZmluZSBWNEwyX1BJWF9GTVRfWTQgICAgICB2NGwyX2ZvdXJjYygnWScsICcwJywgJzQnLCAnICcpIC8qICA0ICBHcmV5c2NhbGUgICAgICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZNiAgICAgIHY0bDJfZm91cmNjKCdZJywgJzAnLCAnNicsICcgJykgLyogIDYgIEdyZXlzY2FsZSAgICAgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1kxMCAgICAgdjRsMl9mb3VyY2MoJ1knLCAnMScsICcwJywgJyAnKSAvKiAxMCAgR3JleXNjYWxlICAgICAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfWTEyICAgICB2NGwyX2ZvdXJjYygnWScsICcxJywgJzInLCAnICcpIC8qIDEyICBHcmV5c2NhbGUgICAgICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZMTYgICAgIHY0bDJfZm91cmNjKCdZJywgJzEnLCAnNicsICcgJykgLyogMTYgIEdyZXlzY2FsZSAgICAgKi8KIAogLyogUGFsZXR0ZSBmb3JtYXRzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dsMTJ4eC5oIGIvaW5jbHVkZS9saW51eC93bDEyeHguaAppbmRleCBiZWJiOGVmLi40YjY5NzM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3dsMTJ4eC5oCisrKyBiL2luY2x1ZGUvbGludXgvd2wxMnh4LmgKQEAgLTI0LDEyICsyNCwyNiBAQAogI2lmbmRlZiBfTElOVVhfV0wxMlhYX0gKICNkZWZpbmUgX0xJTlVYX1dMMTJYWF9ICiAKLS8qIFRoZSBib2FyZCByZWZlcmVuY2UgY2xvY2sgdmFsdWVzICovCisvKiBSZWZlcmVuY2UgY2xvY2sgdmFsdWVzICovCiBlbnVtIHsKLQlXTDEyWFhfUkVGQ0xPQ0tfMTkgPSAwLAkvKiAxOS4yIE1IeiAqLwotCVdMMTJYWF9SRUZDTE9DS18yNiA9IDEsCS8qIDI2IE1IeiAqLwotCVdMMTJYWF9SRUZDTE9DS18zOCA9IDIsCS8qIDM4LjQgTUh6ICovCi0JV0wxMlhYX1JFRkNMT0NLXzU0ID0gMywJLyogNTQgTUh6ICovCisJV0wxMlhYX1JFRkNMT0NLXzE5CT0gMCwgLyogMTkuMiBNSHogKi8KKwlXTDEyWFhfUkVGQ0xPQ0tfMjYJPSAxLCAvKiAyNiBNSHogKi8KKwlXTDEyWFhfUkVGQ0xPQ0tfMzgJPSAyLCAvKiAzOC40IE1IeiAqLworCVdMMTJYWF9SRUZDTE9DS181Mgk9IDMsIC8qIDUyIE1IeiAqLworCVdMMTJYWF9SRUZDTE9DS18zOF9YVEFMID0gNCwgLyogMzguNCBNSHosIFhUQUwgKi8KKwlXTDEyWFhfUkVGQ0xPQ0tfMjZfWFRBTCA9IDUsIC8qIDI2IE1IeiwgWFRBTCAqLworfTsKKworLyogVENYTyBjbG9jayB2YWx1ZXMgKi8KK2VudW0geworCVdMMTJYWF9UQ1hPQ0xPQ0tfMTlfMgk9IDAsIC8qIDE5LjJNSHogKi8KKwlXTDEyWFhfVENYT0NMT0NLXzI2CT0gMSwgLyogMjYgTUh6ICovCisJV0wxMlhYX1RDWE9DTE9DS18zOF80CT0gMiwgLyogMzguNE1IeiAqLworCVdMMTJYWF9UQ1hPQ0xPQ0tfNTIJPSAzLCAvKiA1MiBNSHogKi8KKwlXTDEyWFhfVENYT0NMT0NLXzE2XzM2OAk9IDQsIC8qIDE2LjM2OCBNSHogKi8KKwlXTDEyWFhfVENYT0NMT0NLXzMyXzczNgk9IDUsIC8qIDMyLjczNiBNSHogKi8KKwlXTDEyWFhfVENYT0NMT0NLXzE2XzgJPSA2LCAvKiAxNi44IE1IeiAqLworCVdMMTJYWF9UQ1hPQ0xPQ0tfMzNfNgk9IDcsIC8qIDMzLjYgTUh6ICovCiB9OwogCiBzdHJ1Y3Qgd2wxMnh4X3BsYXRmb3JtX2RhdGEgewpAQCAtMzgsOCArNTIsMTMgQEAKIAlpbnQgaXJxOwogCWJvb2wgdXNlX2VlcHJvbTsKIAlpbnQgYm9hcmRfcmVmX2Nsb2NrOworCWludCBib2FyZF90Y3hvX2Nsb2NrOworCXVuc2lnbmVkIGxvbmcgcGxhdGZvcm1fcXVpcmtzOwogfTsKIAorLyogUGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBsZXZlbCB0cmlnZ2VyIGludGVycnVwdHMgKi8KKyNkZWZpbmUgV0wxMlhYX1BMQVRGT1JNX1FVSVJLX0VER0VfSVJRCUJJVCgwKQorCiAjaWZkZWYgQ09ORklHX1dMMTJYWF9QTEFURk9STV9EQVRBCiAKIGludCB3bDEyeHhfc2V0X3BsYXRmb3JtX2RhdGEoY29uc3Qgc3RydWN0IHdsMTJ4eF9wbGF0Zm9ybV9kYXRhICpkYXRhKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXZpY2UuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXZpY2UuaAppbmRleCBiZDEwMmNmLi5kNjFmZWJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWRldmljZS5oCkBAIC0xNjMsNyArMTYzLDcgQEAKICh7CQkJCQkJCQkJXAogCXN0cnVjdCB2NGwyX3N1YmRldiAqX19zZDsJCQkJCVwKIAlfX3Y0bDJfZGV2aWNlX2NhbGxfc3ViZGV2c191bnRpbF9lcnJfcCh2NGwyX2RldiwgX19zZCwgY29uZCwgbywJXAotCQkJCQkJZiwgYXJncy4uLik7CQlcCisJCQkJCQlmICwgIyNhcmdzKTsJCVwKIH0pCiAKIC8qIENhbGwgdGhlIHNwZWNpZmllZCBjYWxsYmFjayBmb3IgYWxsIHN1YmRldnMgbWF0Y2hpbmcgZ3JwX2lkIChpZiAwLCB0aGVuCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZGRyY29uZi5oIGIvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaAppbmRleCAyMzcxMGFhLi41ODJlNGFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9hZGRyY29uZi5oCisrKyBiL2luY2x1ZGUvbmV0L2FkZHJjb25mLmgKQEAgLTQyLDggKzQyLDYgQEAKIH07CiAKIAotI2lmZGVmIF9fS0VSTkVMX18KLQogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPG5ldC9pZl9pbmV0Ni5oPgogI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CkBAIC02MSwxNiArNTksMTYgQEAKIAkJCQkJCSAgICAgdm9pZCBfX3VzZXIgKmFyZyk7CiAKIGV4dGVybiBpbnQJCQlpcHY2X2Noa19hZGRyKHN0cnVjdCBuZXQgKm5ldCwKLQkJCQkJICAgICAgc3RydWN0IGluNl9hZGRyICphZGRyLAorCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsCiAJCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCSAgICAgIGludCBzdHJpY3QpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNl9NSVA2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01JUDZfTU9EVUxFKQogZXh0ZXJuIGludAkJCWlwdjZfY2hrX2hvbWVfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsCi0JCQkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOworCQkJCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTsKICNlbmRpZgogCi1leHRlcm4gaW50CQkJaXB2Nl9jaGtfcHJlZml4KHN0cnVjdCBpbjZfYWRkciAqYWRkciwKK2V4dGVybiBpbnQJCQlpcHY2X2Noa19wcmVmaXgoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLAogCQkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIGV4dGVybiBzdHJ1Y3QgaW5ldDZfaWZhZGRyICAgICAgKmlwdjZfZ2V0X2lmYWRkcihzdHJ1Y3QgbmV0ICpuZXQsCkBAIC04OSw5ICs4Nyw5IEBACiBleHRlcm4gaW50IAkJCWlwdjZfcmN2X3NhZGRyX2VxdWFsKGNvbnN0IHN0cnVjdCBzb2NrICpzaywKIAkJCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc29jayAqc2syKTsKIGV4dGVybiB2b2lkCQkJYWRkcmNvbmZfam9pbl9zb2xpY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkJc3RydWN0IGluNl9hZGRyICphZGRyKTsKKwkJCQkJY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTsKIGV4dGVybiB2b2lkCQkJYWRkcmNvbmZfbGVhdmVfc29saWN0KHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsCi0JCQkJCXN0cnVjdCBpbjZfYWRkciAqYWRkcik7CisJCQkJCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcik7CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBhZGRyY29uZl90aW1lb3V0X2ZpeHVwKHUzMiB0aW1lb3V0LAogCQkJCQkJICAgIHVuc2lnbmVkIHVuaXQpCkBAIC0xNTgsMTUgKzE1NiwxNSBAQAogLyoKICAqCWFueWNhc3QgcHJvdG90eXBlcyAoYW55Y2FzdC5jKQogICovCi1leHRlcm4gaW50IGlwdjZfc29ja19hY19qb2luKHN0cnVjdCBzb2NrICpzayxpbnQgaWZpbmRleCxzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOwotZXh0ZXJuIGludCBpcHY2X3NvY2tfYWNfZHJvcChzdHJ1Y3Qgc29jayAqc2ssaW50IGlmaW5kZXgsc3RydWN0IGluNl9hZGRyICphZGRyKTsKK2V4dGVybiBpbnQgaXB2Nl9zb2NrX2FjX2pvaW4oc3RydWN0IHNvY2sgKnNrLGludCBpZmluZGV4LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOworZXh0ZXJuIGludCBpcHY2X3NvY2tfYWNfZHJvcChzdHJ1Y3Qgc29jayAqc2ssaW50IGlmaW5kZXgsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcik7CiBleHRlcm4gdm9pZCBpcHY2X3NvY2tfYWNfY2xvc2Uoc3RydWN0IHNvY2sgKnNrKTsKLWV4dGVybiBpbnQgaW5ldDZfYWNfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIGludCBpZmluZGV4KTsKK2V4dGVybiBpbnQgaW5ldDZfYWNfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIGludCBpZmluZGV4KTsKIAotZXh0ZXJuIGludCBpcHY2X2Rldl9hY19pbmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGluNl9hZGRyICphZGRyKTsKLWV4dGVybiBpbnQgX19pcHY2X2Rldl9hY19kZWMoc3RydWN0IGluZXQ2X2RldiAqaWRldiwgc3RydWN0IGluNl9hZGRyICphZGRyKTsKK2V4dGVybiBpbnQgaXB2Nl9kZXZfYWNfaW5jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcik7CitleHRlcm4gaW50IF9faXB2Nl9kZXZfYWNfZGVjKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcik7CiBleHRlcm4gaW50IGlwdjZfY2hrX2FjYXN0X2FkZHIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBpbjZfYWRkciAqYWRkcik7CisJCQkgICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTsKIAogCiAvKiBEZXZpY2Ugbm90aWZpZXIgKi8KQEAgLTI4NSw0ICsyODMsMyBAQAogI2VuZGlmCiAKICNlbmRpZgotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZl9yeHJwYy5oIGIvaW5jbHVkZS9uZXQvYWZfcnhycGMuaAppbmRleCAwMGMyZWFhLi4wM2U2ZTk0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9hZl9yeHJwYy5oCisrKyBiL2luY2x1ZGUvbmV0L2FmX3J4cnBjLmgKQEAgLTEyLDggKzEyLDYgQEAKICNpZm5kZWYgX05FVF9SWFJQQ19ICiAjZGVmaW5lIF9ORVRfUlhSUENfSAogCi0jaWZkZWYgX19LRVJORUxfXwotCiAjaW5jbHVkZSA8bGludXgvcnhycGMuaD4KIAogc3RydWN0IHJ4cnBjX2NhbGw7CkBAIC01Myw1ICs1MSw0IEBACiAJCQkJCQkgICB1bnNpZ25lZCBsb25nKTsKIGV4dGVybiBpbnQgcnhycGNfa2VybmVsX3JlamVjdF9jYWxsKHN0cnVjdCBzb2NrZXQgKik7CiAKLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX05FVF9SWFJQQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZl91bml4LmggYi9pbmNsdWRlL25ldC9hZl91bml4LmgKaW5kZXggMThlNWMzZi4uOTFhYjViMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYWZfdW5peC5oCisrKyBiL2luY2x1ZGUvbmV0L2FmX3VuaXguaApAQCAtNDEsNyArNDEsNiBAQAogCQkJCXNwaW5fbG9ja19uZXN0ZWQoJnVuaXhfc2socyktPmxvY2ssIFwKIAkJCQlTSU5HTEVfREVQVEhfTkVTVElORykKIAotI2lmZGVmIF9fS0VSTkVMX18KIC8qIFRoZSBBRl9VTklYIHNvY2tldCAqLwogc3RydWN0IHVuaXhfc29jayB7CiAJLyogV0FSTklORzogc2sgaGFzIHRvIGJlIHRoZSBmaXJzdCBtZW1iZXIgKi8KQEAgLTcyLDQgKzcxLDMgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCB1bml4X3N5c2N0bF91bnJlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCkge30KICNlbmRpZgogI2VuZGlmCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2F0bWNsaXAuaCBiL2luY2x1ZGUvbmV0L2F0bWNsaXAuaAppbmRleCA0NjdjNTMxLi40OTdlZjY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9hdG1jbGlwLmgKKysrIGIvaW5jbHVkZS9uZXQvYXRtY2xpcC5oCkBAIC01NCw4ICs1NCw2IEBACiB9OwogCiAKLSNpZmRlZiBfX0tFUk5FTF9fCiBleHRlcm4gc3RydWN0IG5laWdoX3RhYmxlICpjbGlwX3RibF9ob29rOwotI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oCmluZGV4IDJjMGQzMDkuLjBjMjAyMjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmgKQEAgLTI0Niw2ICsyNDYsMTUgQEAKICNkZWZpbmUgSENJX0FUX0dFTkVSQUxfQk9ORElORwkJMHgwNAogI2RlZmluZSBIQ0lfQVRfR0VORVJBTF9CT05ESU5HX01JVE0JMHgwNQogCisvKiBMaW5rIEtleSB0eXBlcyAqLworI2RlZmluZSBIQ0lfTEtfQ09NQklOQVRJT04JCTB4MDAKKyNkZWZpbmUgSENJX0xLX0xPQ0FMX1VOSVQJCTB4MDEKKyNkZWZpbmUgSENJX0xLX1JFTU9URV9VTklUCQkweDAyCisjZGVmaW5lIEhDSV9MS19ERUJVR19DT01CSU5BVElPTgkweDAzCisjZGVmaW5lIEhDSV9MS19VTkFVVEhfQ09NQklOQVRJT04JMHgwNAorI2RlZmluZSBIQ0lfTEtfQVVUSF9DT01CSU5BVElPTgkJMHgwNQorI2RlZmluZSBIQ0lfTEtfQ0hBTkdFRF9DT01CSU5BVElPTgkweDA2CisKIC8qIC0tLS0tICBIQ0kgQ29tbWFuZHMgLS0tLSAqLwogI2RlZmluZSBIQ0lfT1BfTk9QCQkJMHgwMDAwCiAKQEAgLTQyOCw2ICs0MzcsMTggQEAKIAogI2RlZmluZSBIQ0lfT1BfVVNFUl9DT05GSVJNX05FR19SRVBMWQkweDA0MmQKIAorI2RlZmluZSBIQ0lfT1BfUkVNT1RFX09PQl9EQVRBX1JFUExZCTB4MDQzMAorc3RydWN0IGhjaV9jcF9yZW1vdGVfb29iX2RhdGFfcmVwbHkgeworCWJkYWRkcl90IGJkYWRkcjsKKwlfX3U4ICAgICBoYXNoWzE2XTsKKwlfX3U4ICAgICByYW5kb21pemVyWzE2XTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgSENJX09QX1JFTU9URV9PT0JfREFUQV9ORUdfUkVQTFkJMHgwNDMzCitzdHJ1Y3QgaGNpX2NwX3JlbW90ZV9vb2JfZGF0YV9uZWdfcmVwbHkgeworCWJkYWRkcl90IGJkYWRkcjsKK30gX19wYWNrZWQ7CisKICNkZWZpbmUgSENJX09QX0lPX0NBUEFCSUxJVFlfTkVHX1JFUExZCTB4MDQzNAogc3RydWN0IGhjaV9jcF9pb19jYXBhYmlsaXR5X25lZ19yZXBseSB7CiAJYmRhZGRyX3QgYmRhZGRyOwpAQCAtNTM3LDE1ICs1NTgsMTcgQEAKIAlfX3U4ICAgICBkZWxldGVfYWxsOwogfSBfX3BhY2tlZDsKIAorI2RlZmluZSBIQ0lfTUFYX05BTUVfTEVOR1RICQkyNDgKKwogI2RlZmluZSBIQ0lfT1BfV1JJVEVfTE9DQUxfTkFNRQkJMHgwYzEzCiBzdHJ1Y3QgaGNpX2NwX3dyaXRlX2xvY2FsX25hbWUgewotCV9fdTggICAgIG5hbWVbMjQ4XTsKKwlfX3U4ICAgICBuYW1lW0hDSV9NQVhfTkFNRV9MRU5HVEhdOwogfSBfX3BhY2tlZDsKIAogI2RlZmluZSBIQ0lfT1BfUkVBRF9MT0NBTF9OQU1FCQkweDBjMTQKIHN0cnVjdCBoY2lfcnBfcmVhZF9sb2NhbF9uYW1lIHsKIAlfX3U4ICAgICBzdGF0dXM7Ci0JX191OCAgICAgbmFtZVsyNDhdOworCV9fdTggICAgIG5hbWVbSENJX01BWF9OQU1FX0xFTkdUSF07CiB9IF9fcGFja2VkOwogCiAjZGVmaW5lIEhDSV9PUF9XUklURV9DQV9USU1FT1VUCQkweDBjMTYKQEAgLTYwMiw2ICs2MjUsMTQgQEAKIAogI2RlZmluZSBIQ0lfT1BfV1JJVEVfSU5RVUlSWV9NT0RFCTB4MGM0NQogCisjZGVmaW5lIEhDSV9NQVhfRUlSX0xFTkdUSAkJMjQwCisKKyNkZWZpbmUgSENJX09QX1dSSVRFX0VJUgkJMHgwYzUyCitzdHJ1Y3QgaGNpX2NwX3dyaXRlX2VpciB7CisJdWludDhfdAkJZmVjOworCXVpbnQ4X3QJCWRhdGFbSENJX01BWF9FSVJfTEVOR1RIXTsKK30gX19wYWNrZWQ7CisKICNkZWZpbmUgSENJX09QX1JFQURfU1NQX01PREUJCTB4MGM1NQogc3RydWN0IGhjaV9ycF9yZWFkX3NzcF9tb2RlIHsKIAlfX3U4ICAgICBzdGF0dXM7CkBAIC02MTMsNiArNjQ0LDEzIEBACiAJX191OCAgICAgbW9kZTsKIH0gX19wYWNrZWQ7CiAKKyNkZWZpbmUgSENJX09QX1JFQURfTE9DQUxfT09CX0RBVEEJCTB4MGM1Nworc3RydWN0IGhjaV9ycF9yZWFkX2xvY2FsX29vYl9kYXRhIHsKKwlfX3U4ICAgICBzdGF0dXM7CisJX191OCAgICAgaGFzaFsxNl07CisJX191OCAgICAgcmFuZG9taXplclsxNl07Cit9IF9fcGFja2VkOworCiAjZGVmaW5lIEhDSV9PUF9SRUFEX0lOUV9SU1BfVFhfUE9XRVIJMHgwYzU4CiAKICNkZWZpbmUgSENJX09QX1JFQURfTE9DQUxfVkVSU0lPTgkweDEwMDEKQEAgLTc0Nyw3ICs3ODUsNyBAQAogc3RydWN0IGhjaV9ldl9yZW1vdGVfbmFtZSB7CiAJX191OCAgICAgc3RhdHVzOwogCWJkYWRkcl90IGJkYWRkcjsKLQlfX3U4ICAgICBuYW1lWzI0OF07CisJX191OCAgICAgbmFtZVtIQ0lfTUFYX05BTUVfTEVOR1RIXTsKIH0gX19wYWNrZWQ7CiAKICNkZWZpbmUgSENJX0VWX0VOQ1JZUFRfQ0hBTkdFCQkweDA4CkBAIC05NTUsNiArOTkzLDExIEBACiAJX19sZTMyCQlwYXNza2V5OwogfSBfX3BhY2tlZDsKIAorI2RlZmluZSBIQ0lfRVZfUkVNT1RFX09PQl9EQVRBX1JFUVVFU1QJMHgzNQorc3RydWN0IGhjaV9ldl9yZW1vdGVfb29iX2RhdGFfcmVxdWVzdCB7CisJYmRhZGRyX3QgYmRhZGRyOworfSBfX3BhY2tlZDsKKwogI2RlZmluZSBIQ0lfRVZfU0lNUExFX1BBSVJfQ09NUExFVEUJMHgzNgogc3RydWN0IGhjaV9ldl9zaW1wbGVfcGFpcl9jb21wbGV0ZSB7CiAJX191OCAgICAgc3RhdHVzOwpAQCAtMTAzMyw3ICsxMDc2LDYgQEAKIAlfX3U4CWRsZW47CiB9IF9fcGFja2VkOwogCi0jaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogc3RhdGljIGlubGluZSBzdHJ1Y3QgaGNpX2V2ZW50X2hkciAqaGNpX2V2ZW50X2hkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtMTA0OSw3ICsxMDkxLDYgQEAKIHsKIAlyZXR1cm4gKHN0cnVjdCBoY2lfc2NvX2hkciAqKSBza2ItPmRhdGE7CiB9Ci0jZW5kaWYKIAogLyogQ29tbWFuZCBvcGNvZGUgcGFjay91bnBhY2sgKi8KICNkZWZpbmUgaGNpX29wY29kZV9wYWNrKG9nZiwgb2NmKQkoX191MTYpICgob2NmICYgMHgwM2ZmKXwob2dmIDw8IDEwKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKaW5kZXggNDQxZGFkYi4uNmM5OTRjMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKQEAgLTgyLDYgKzgyLDEzIEBACiAJdTggcGluX2xlbjsKIH07CiAKK3N0cnVjdCBvb2JfZGF0YSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWJkYWRkcl90IGJkYWRkcjsKKwl1OCBoYXNoWzE2XTsKKwl1OCByYW5kb21pemVyWzE2XTsKK307CisKICNkZWZpbmUgTlVNX1JFQVNTRU1CTFkgNAogc3RydWN0IGhjaV9kZXYgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKQEAgLTk0LDcgKzEwMSw4IEBACiAJX191OAkJYnVzOwogCV9fdTgJCWRldl90eXBlOwogCWJkYWRkcl90CWJkYWRkcjsKLQlfX3U4CQlkZXZfbmFtZVsyNDhdOworCV9fdTgJCWRldl9uYW1lW0hDSV9NQVhfTkFNRV9MRU5HVEhdOworCV9fdTgJCWVpcltIQ0lfTUFYX0VJUl9MRU5HVEhdOwogCV9fdTgJCWRldl9jbGFzc1szXTsKIAlfX3U4CQltYWpvcl9jbGFzczsKIAlfX3U4CQltaW5vcl9jbGFzczsKQEAgLTExOCw2ICsxMjYsOCBAQAogCV9fdTE2CQlzbmlmZl9taW5faW50ZXJ2YWw7CiAJX191MTYJCXNuaWZmX21heF9pbnRlcnZhbDsKIAorCXVuc2lnbmVkIGludAlhdXRvX2FjY2VwdF9kZWxheTsKKwogCXVuc2lnbmVkIGxvbmcJcXVpcmtzOwogCiAJYXRvbWljX3QJY21kX2NudDsKQEAgLTE2OSw2ICsxNzksOCBAQAogCiAJc3RydWN0IGxpc3RfaGVhZAlsaW5rX2tleXM7CiAKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJlbW90ZV9vb2JfZGF0YTsKKwogCXN0cnVjdCBoY2lfZGV2X3N0YXRzCXN0YXQ7CiAKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCWRyaXZlcl9pbml0OwpAQCAtMjE2LDYgKzIyOCw3IEBACiAJX191MTYJCXBrdF90eXBlOwogCV9fdTE2CQlsaW5rX3BvbGljeTsKIAlfX3UzMgkJbGlua19tb2RlOworCV9fdTgJCWtleV90eXBlOwogCV9fdTgJCWF1dGhfdHlwZTsKIAlfX3U4CQlzZWNfbGV2ZWw7CiAJX191OAkJcGVuZGluZ19zZWNfbGV2ZWw7CkBAIC0yMzUsNiArMjQ4LDcgQEAKIAogCXN0cnVjdCB0aW1lcl9saXN0IGRpc2NfdGltZXI7CiAJc3RydWN0IHRpbWVyX2xpc3QgaWRsZV90aW1lcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBhdXRvX2FjY2VwdF90aW1lcjsKIAogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrX2FkZDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya19kZWw7CkBAIC00MDgsNiArNDIyLDcgQEAKIAogc3RydWN0IGhjaV9jb25uICpoY2lfY29ubmVjdChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgaW50IHR5cGUsIGJkYWRkcl90ICpkc3QsIF9fdTggc2VjX2xldmVsLCBfX3U4IGF1dGhfdHlwZSk7CiBpbnQgaGNpX2Nvbm5fY2hlY2tfbGlua19tb2RlKHN0cnVjdCBoY2lfY29ubiAqY29ubik7CitpbnQgaGNpX2Nvbm5fY2hlY2tfc2VjdXJlKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzZWNfbGV2ZWwpOwogaW50IGhjaV9jb25uX3NlY3VyaXR5KHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzZWNfbGV2ZWwsIF9fdTggYXV0aF90eXBlKTsKIGludCBoY2lfY29ubl9jaGFuZ2VfbGlua19rZXkoc3RydWN0IGhjaV9jb25uICpjb25uKTsKIGludCBoY2lfY29ubl9zd2l0Y2hfcm9sZShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggcm9sZSk7CkBAIC01MDEsMTAgKzUxNiwxNyBAQAogCiBpbnQgaGNpX2xpbmtfa2V5c19jbGVhcihzdHJ1Y3QgaGNpX2RldiAqaGRldik7CiBzdHJ1Y3QgbGlua19rZXkgKmhjaV9maW5kX2xpbmtfa2V5KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBiZGFkZHJfdCAqYmRhZGRyKTsKLWludCBoY2lfYWRkX2xpbmtfa2V5KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBpbnQgbmV3X2tleSwgYmRhZGRyX3QgKmJkYWRkciwKLQkJCQkJCXU4ICprZXksIHU4IHR5cGUsIHU4IHBpbl9sZW4pOworaW50IGhjaV9hZGRfbGlua19rZXkoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBoY2lfY29ubiAqY29ubiwgaW50IG5ld19rZXksCisJCQliZGFkZHJfdCAqYmRhZGRyLCB1OCAqdmFsLCB1OCB0eXBlLCB1OCBwaW5fbGVuKTsKIGludCBoY2lfcmVtb3ZlX2xpbmtfa2V5KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBiZGFkZHJfdCAqYmRhZGRyKTsKIAoraW50IGhjaV9yZW1vdGVfb29iX2RhdGFfY2xlYXIoc3RydWN0IGhjaV9kZXYgKmhkZXYpOworc3RydWN0IG9vYl9kYXRhICpoY2lfZmluZF9yZW1vdGVfb29iX2RhdGEoc3RydWN0IGhjaV9kZXYgKmhkZXYsCisJCQkJCQkJYmRhZGRyX3QgKmJkYWRkcik7CitpbnQgaGNpX2FkZF9yZW1vdGVfb29iX2RhdGEoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGJkYWRkcl90ICpiZGFkZHIsIHU4ICpoYXNoLAorCQkJCQkJCQl1OCAqcmFuZG9taXplcik7CitpbnQgaGNpX3JlbW92ZV9yZW1vdGVfb29iX2RhdGEoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGJkYWRkcl90ICpiZGFkZHIpOworCiB2b2lkIGhjaV9kZWxfb2ZmX3RpbWVyKHN0cnVjdCBoY2lfZGV2ICpoZGV2KTsKIAogdm9pZCBoY2lfZXZlbnRfcGFja2V0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKQEAgLTc1NCwxOSArNzc2LDI3IEBACiBpbnQgbWdtdF9wb3dlcmVkKHUxNiBpbmRleCwgdTggcG93ZXJlZCk7CiBpbnQgbWdtdF9kaXNjb3ZlcmFibGUodTE2IGluZGV4LCB1OCBkaXNjb3ZlcmFibGUpOwogaW50IG1nbXRfY29ubmVjdGFibGUodTE2IGluZGV4LCB1OCBjb25uZWN0YWJsZSk7Ci1pbnQgbWdtdF9uZXdfa2V5KHUxNiBpbmRleCwgc3RydWN0IGxpbmtfa2V5ICprZXksIHU4IG9sZF9rZXlfdHlwZSk7CitpbnQgbWdtdF9uZXdfa2V5KHUxNiBpbmRleCwgc3RydWN0IGxpbmtfa2V5ICprZXksIHU4IHBlcnNpc3RlbnQpOwogaW50IG1nbXRfY29ubmVjdGVkKHUxNiBpbmRleCwgYmRhZGRyX3QgKmJkYWRkcik7CiBpbnQgbWdtdF9kaXNjb25uZWN0ZWQodTE2IGluZGV4LCBiZGFkZHJfdCAqYmRhZGRyKTsKIGludCBtZ210X2Rpc2Nvbm5lY3RfZmFpbGVkKHUxNiBpbmRleCk7CiBpbnQgbWdtdF9jb25uZWN0X2ZhaWxlZCh1MTYgaW5kZXgsIGJkYWRkcl90ICpiZGFkZHIsIHU4IHN0YXR1cyk7Ci1pbnQgbWdtdF9waW5fY29kZV9yZXF1ZXN0KHUxNiBpbmRleCwgYmRhZGRyX3QgKmJkYWRkcik7CitpbnQgbWdtdF9waW5fY29kZV9yZXF1ZXN0KHUxNiBpbmRleCwgYmRhZGRyX3QgKmJkYWRkciwgdTggc2VjdXJlKTsKIGludCBtZ210X3Bpbl9jb2RlX3JlcGx5X2NvbXBsZXRlKHUxNiBpbmRleCwgYmRhZGRyX3QgKmJkYWRkciwgdTggc3RhdHVzKTsKIGludCBtZ210X3Bpbl9jb2RlX25lZ19yZXBseV9jb21wbGV0ZSh1MTYgaW5kZXgsIGJkYWRkcl90ICpiZGFkZHIsIHU4IHN0YXR1cyk7Ci1pbnQgbWdtdF91c2VyX2NvbmZpcm1fcmVxdWVzdCh1MTYgaW5kZXgsIGJkYWRkcl90ICpiZGFkZHIsIF9fbGUzMiB2YWx1ZSk7CitpbnQgbWdtdF91c2VyX2NvbmZpcm1fcmVxdWVzdCh1MTYgaW5kZXgsIGJkYWRkcl90ICpiZGFkZHIsIF9fbGUzMiB2YWx1ZSwKKwkJCQkJCQl1OCBjb25maXJtX2hpbnQpOwogaW50IG1nbXRfdXNlcl9jb25maXJtX3JlcGx5X2NvbXBsZXRlKHUxNiBpbmRleCwgYmRhZGRyX3QgKmJkYWRkciwgdTggc3RhdHVzKTsKIGludCBtZ210X3VzZXJfY29uZmlybV9uZWdfcmVwbHlfY29tcGxldGUodTE2IGluZGV4LCBiZGFkZHJfdCAqYmRhZGRyLAogCQkJCQkJCQl1OCBzdGF0dXMpOwogaW50IG1nbXRfYXV0aF9mYWlsZWQodTE2IGluZGV4LCBiZGFkZHJfdCAqYmRhZGRyLCB1OCBzdGF0dXMpOworaW50IG1nbXRfc2V0X2xvY2FsX25hbWVfY29tcGxldGUodTE2IGluZGV4LCB1OCAqbmFtZSwgdTggc3RhdHVzKTsKK2ludCBtZ210X3JlYWRfbG9jYWxfb29iX2RhdGFfcmVwbHlfY29tcGxldGUodTE2IGluZGV4LCB1OCAqaGFzaCwgdTggKnJhbmRvbWl6ZXIsCisJCQkJCQkJCXU4IHN0YXR1cyk7CitpbnQgbWdtdF9kZXZpY2VfZm91bmQodTE2IGluZGV4LCBiZGFkZHJfdCAqYmRhZGRyLCB1OCAqZGV2X2NsYXNzLCBzOCByc3NpLAorCQkJCQkJCQl1OCAqZWlyKTsKK2ludCBtZ210X3JlbW90ZV9uYW1lKHUxNiBpbmRleCwgYmRhZGRyX3QgKmJkYWRkciwgdTggKm5hbWUpOworaW50IG1nbXRfZGlzY292ZXJpbmcodTE2IGluZGV4LCB1OCBkaXNjb3ZlcmluZyk7CiAKIC8qIEhDSSBpbmZvIGZvciBzb2NrZXQgKi8KICNkZWZpbmUgaGNpX3BpKHNrKSAoKHN0cnVjdCBoY2lfcGluZm8gKikgc2spCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvbDJjYXAuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9sMmNhcC5oCmluZGV4IDRmNGJmZjEuLmQwOWM5YjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9sMmNhcC5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9sMmNhcC5oCkBAIC0yNzYsMTEgKzI3Niw4MSBAQAogI2RlZmluZSBMMkNBUF9DT05OX1BBUkFNX0FDQ0VQVEVECTB4MDAwMAogI2RlZmluZSBMMkNBUF9DT05OX1BBUkFNX1JFSkVDVEVECTB4MDAwMQogCi0vKiAtLS0tLSBMMkNBUCBjb25uZWN0aW9ucyAtLS0tLSAqLwotc3RydWN0IGwyY2FwX2NoYW5fbGlzdCB7Ci0Jc3RydWN0IHNvY2sJKmhlYWQ7Ci0Jcndsb2NrX3QJbG9jazsKLQlsb25nCQludW07CisvKiAtLS0tLSBMMkNBUCBjaGFubmVscyBhbmQgY29ubmVjdGlvbnMgLS0tLS0gKi8KK3N0cnVjdCBzcmVqX2xpc3QgeworCV9fdTgJdHhfc2VxOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKK3N0cnVjdCBsMmNhcF9jaGFuIHsKKwlzdHJ1Y3Qgc29jayAqc2s7CisKKwlzdHJ1Y3QgbDJjYXBfY29ubgkqY29ubjsKKworCV9fbGUxNgkJcHNtOworCV9fdTE2CQlkY2lkOworCV9fdTE2CQlzY2lkOworCisJX191MTYJCWltdHU7CisJX191MTYJCW9tdHU7CisJX191MTYJCWZsdXNoX3RvOworCV9fdTgJCW1vZGU7CisKKwlfX2xlMTYJCXNwb3J0OworCisJX191OAkJc2VjX2xldmVsOworCV9fdTgJCXJvbGVfc3dpdGNoOworCV9fdTgJCWZvcmNlX3JlbGlhYmxlOworCV9fdTgJCWZsdXNoYWJsZTsKKworCV9fdTgJCWlkZW50OworCisJX191OAkJY29uZl9yZXFbNjRdOworCV9fdTgJCWNvbmZfbGVuOworCV9fdTgJCW51bV9jb25mX3JlcTsKKwlfX3U4CQludW1fY29uZl9yc3A7CisKKwlfX3U4CQlmY3M7CisKKwlfX3U4CQl0eF93aW47CisJX191OAkJbWF4X3R4OworCV9fdTE2CQlyZXRyYW5zX3RpbWVvdXQ7CisJX191MTYJCW1vbml0b3JfdGltZW91dDsKKwlfX3UxNgkJbXBzOworCisJX191OAkJY29uZl9zdGF0ZTsKKwlfX3UxNgkJY29ubl9zdGF0ZTsKKworCV9fdTgJCW5leHRfdHhfc2VxOworCV9fdTgJCWV4cGVjdGVkX2Fja19zZXE7CisJX191OAkJZXhwZWN0ZWRfdHhfc2VxOworCV9fdTgJCWJ1ZmZlcl9zZXE7CisJX191OAkJYnVmZmVyX3NlcV9zcmVqOworCV9fdTgJCXNyZWpfc2F2ZV9yZXFzZXE7CisJX191OAkJZnJhbWVzX3NlbnQ7CisJX191OAkJdW5hY2tlZF9mcmFtZXM7CisJX191OAkJcmV0cnlfY291bnQ7CisJX191OAkJbnVtX2Fja2VkOworCV9fdTE2CQlzZHVfbGVuOworCV9fdTE2CQlwYXJ0aWFsX3NkdV9sZW47CisJc3RydWN0IHNrX2J1ZmYJKnNkdTsKKworCV9fdTgJCXJlbW90ZV90eF93aW47CisJX191OAkJcmVtb3RlX21heF90eDsKKwlfX3UxNgkJcmVtb3RlX21wczsKKworCXN0cnVjdCB0aW1lcl9saXN0CXJldHJhbnNfdGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3QJbW9uaXRvcl90aW1lcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdAlhY2tfdGltZXI7CisJc3RydWN0IHNrX2J1ZmYJCSp0eF9zZW5kX2hlYWQ7CisJc3RydWN0IHNrX2J1ZmZfaGVhZAl0eF9xOworCXN0cnVjdCBza19idWZmX2hlYWQJc3Jlal9xOworCXN0cnVjdCBza19idWZmX2hlYWQJYnVzeV9xOworCXN0cnVjdCB3b3JrX3N0cnVjdAlidXN5X3dvcms7CisJc3RydWN0IGxpc3RfaGVhZAlzcmVqX2w7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBnbG9iYWxfbDsKIH07CiAKIHN0cnVjdCBsMmNhcF9jb25uIHsKQEAgLTMwMiw5NyArMzcyLDI0IEBACiAKIAlzdHJ1Y3Qgc2tfYnVmZiAqcnhfc2tiOwogCV9fdTMyCQlyeF9sZW47Ci0JX191OAkJcnhfaWRlbnQ7CiAJX191OAkJdHhfaWRlbnQ7CiAKIAlfX3U4CQlkaXNjX3JlYXNvbjsKIAotCXN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgY2hhbl9saXN0OwotfTsKLQotc3RydWN0IHNvY2tfZGVsX2xpc3QgewotCXN0cnVjdCBzb2NrICpzazsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBjaGFuX2w7CisJcndsb2NrX3QJY2hhbl9sb2NrOwogfTsKIAogI2RlZmluZSBMMkNBUF9JTkZPX0NMX01UVV9SRVFfU0VOVAkweDAxCiAjZGVmaW5lIEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9TRU5UCTB4MDQKICNkZWZpbmUgTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX0RPTkUJMHgwOAogCi0vKiAtLS0tLSBMMkNBUCBjaGFubmVsIGFuZCBzb2NrZXQgaW5mbyAtLS0tLSAqLworLyogLS0tLS0gTDJDQVAgc29ja2V0IGluZm8gLS0tLS0gKi8KICNkZWZpbmUgbDJjYXBfcGkoc2spICgoc3RydWN0IGwyY2FwX3BpbmZvICopIHNrKQotI2RlZmluZSBUWF9RVUVVRShzaykgKCZsMmNhcF9waShzayktPnR4X3F1ZXVlKQotI2RlZmluZSBTUkVKX1FVRVVFKHNrKSAoJmwyY2FwX3BpKHNrKS0+c3Jlal9xdWV1ZSkKLSNkZWZpbmUgQlVTWV9RVUVVRShzaykgKCZsMmNhcF9waShzayktPmJ1c3lfcXVldWUpCi0jZGVmaW5lIFNSRUpfTElTVChzaykgKCZsMmNhcF9waShzayktPnNyZWpfbC5saXN0KQotCi1zdHJ1Y3Qgc3Jlal9saXN0IHsKLQlfX3U4CXR4X3NlcTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci19OwogCiBzdHJ1Y3QgbDJjYXBfcGluZm8gewogCXN0cnVjdCBidF9zb2NrCWJ0OwotCV9fbGUxNgkJcHNtOwotCV9fdTE2CQlkY2lkOwotCV9fdTE2CQlzY2lkOwotCi0JX191MTYJCWltdHU7Ci0JX191MTYJCW9tdHU7Ci0JX191MTYJCWZsdXNoX3RvOwotCV9fdTgJCW1vZGU7Ci0JX191OAkJbnVtX2NvbmZfcmVxOwotCV9fdTgJCW51bV9jb25mX3JzcDsKLQotCV9fdTgJCWZjczsKLQlfX3U4CQlzZWNfbGV2ZWw7Ci0JX191OAkJcm9sZV9zd2l0Y2g7Ci0JX191OAkJZm9yY2VfcmVsaWFibGU7Ci0JX191OAkJZmx1c2hhYmxlOwotCi0JX191OAkJY29uZl9yZXFbNjRdOwotCV9fdTgJCWNvbmZfbGVuOwotCV9fdTgJCWNvbmZfc3RhdGU7Ci0JX191MTYJCWNvbm5fc3RhdGU7Ci0KLQlfX3U4CQluZXh0X3R4X3NlcTsKLQlfX3U4CQlleHBlY3RlZF9hY2tfc2VxOwotCV9fdTgJCWV4cGVjdGVkX3R4X3NlcTsKLQlfX3U4CQlidWZmZXJfc2VxOwotCV9fdTgJCWJ1ZmZlcl9zZXFfc3JlajsKLQlfX3U4CQlzcmVqX3NhdmVfcmVxc2VxOwotCV9fdTgJCWZyYW1lc19zZW50OwotCV9fdTgJCXVuYWNrZWRfZnJhbWVzOwotCV9fdTgJCXJldHJ5X2NvdW50OwotCV9fdTgJCW51bV9hY2tlZDsKLQlfX3UxNgkJc2R1X2xlbjsKLQlfX3UxNgkJcGFydGlhbF9zZHVfbGVuOwotCXN0cnVjdCBza19idWZmCSpzZHU7Ci0KLQlfX3U4CQlpZGVudDsKLQotCV9fdTgJCXR4X3dpbjsKLQlfX3U4CQltYXhfdHg7Ci0JX191OAkJcmVtb3RlX3R4X3dpbjsKLQlfX3U4CQlyZW1vdGVfbWF4X3R4OwotCV9fdTE2CQlyZXRyYW5zX3RpbWVvdXQ7Ci0JX191MTYJCW1vbml0b3JfdGltZW91dDsKLQlfX3UxNgkJcmVtb3RlX21wczsKLQlfX3UxNgkJbXBzOwotCi0JX19sZTE2CQlzcG9ydDsKLQotCXN0cnVjdCB0aW1lcl9saXN0CXJldHJhbnNfdGltZXI7Ci0Jc3RydWN0IHRpbWVyX2xpc3QJbW9uaXRvcl90aW1lcjsKLQlzdHJ1Y3QgdGltZXJfbGlzdAlhY2tfdGltZXI7Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZAl0eF9xdWV1ZTsKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXNyZWpfcXVldWU7Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZAlidXN5X3F1ZXVlOwotCXN0cnVjdCB3b3JrX3N0cnVjdAlidXN5X3dvcms7Ci0Jc3RydWN0IHNyZWpfbGlzdAlzcmVqX2w7Ci0Jc3RydWN0IGwyY2FwX2Nvbm4JKmNvbm47Ci0Jc3RydWN0IHNvY2sJCSpuZXh0X2M7Ci0Jc3RydWN0IHNvY2sJCSpwcmV2X2M7CisJc3RydWN0IGwyY2FwX2NoYW4JKmNoYW47CiB9OwogCiAjZGVmaW5lIEwyQ0FQX0NPTkZfUkVRX1NFTlQgICAgICAgMHgwMQpAQCAtNDE5LDI0ICs0MTYsMjMgQEAKICNkZWZpbmUgTDJDQVBfQ09OTl9STlJfU0VOVCAgICAgICAgMHgwMjAwCiAjZGVmaW5lIEwyQ0FQX0NPTk5fU0FSX1JFVFJZICAgICAgIDB4MDQwMAogCi0jZGVmaW5lIF9fbW9kX3JldHJhbnNfdGltZXIoKSBtb2RfdGltZXIoJmwyY2FwX3BpKHNrKS0+cmV0cmFuc190aW1lciwgXAorI2RlZmluZSBfX21vZF9yZXRyYW5zX3RpbWVyKCkgbW9kX3RpbWVyKCZjaGFuLT5yZXRyYW5zX3RpbWVyLCBcCiAJCWppZmZpZXMgKyAgbXNlY3NfdG9famlmZmllcyhMMkNBUF9ERUZBVUxUX1JFVFJBTlNfVE8pKTsKLSNkZWZpbmUgX19tb2RfbW9uaXRvcl90aW1lcigpIG1vZF90aW1lcigmbDJjYXBfcGkoc2spLT5tb25pdG9yX3RpbWVyLCBcCisjZGVmaW5lIF9fbW9kX21vbml0b3JfdGltZXIoKSBtb2RfdGltZXIoJmNoYW4tPm1vbml0b3JfdGltZXIsIFwKIAkJamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoTDJDQVBfREVGQVVMVF9NT05JVE9SX1RPKSk7Ci0jZGVmaW5lIF9fbW9kX2Fja190aW1lcigpIG1vZF90aW1lcigmbDJjYXBfcGkoc2spLT5hY2tfdGltZXIsIFwKKyNkZWZpbmUgX19tb2RfYWNrX3RpbWVyKCkgbW9kX3RpbWVyKCZjaGFuLT5hY2tfdGltZXIsIFwKIAkJamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoTDJDQVBfREVGQVVMVF9BQ0tfVE8pKTsKIAotc3RhdGljIGlubGluZSBpbnQgbDJjYXBfdHhfd2luZG93X2Z1bGwoc3RydWN0IHNvY2sgKnNrKQorc3RhdGljIGlubGluZSBpbnQgbDJjYXBfdHhfd2luZG93X2Z1bGwoc3RydWN0IGwyY2FwX2NoYW4gKmNoKQogewotCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CiAJaW50IHN1YjsKIAotCXN1YiA9IChwaS0+bmV4dF90eF9zZXEgLSBwaS0+ZXhwZWN0ZWRfYWNrX3NlcSkgJSA2NDsKKwlzdWIgPSAoY2gtPm5leHRfdHhfc2VxIC0gY2gtPmV4cGVjdGVkX2Fja19zZXEpICUgNjQ7CiAKIAlpZiAoc3ViIDwgMCkKIAkJc3ViICs9IDY0OwogCi0JcmV0dXJuIHN1YiA9PSBwaS0+cmVtb3RlX3R4X3dpbjsKKwlyZXR1cm4gc3ViID09IGNoLT5yZW1vdGVfdHhfd2luOwogfQogCiAjZGVmaW5lIF9fZ2V0X3R4c2VxKGN0cmwpCSgoKGN0cmwpICYgTDJDQVBfQ1RSTF9UWFNFUSkgPj4gMSkKQEAgLTQ0NiwyNCArNDQyLDI0IEBACiAjZGVmaW5lIF9faXNfc2FyX3N0YXJ0KGN0cmwpCSgoKGN0cmwpICYgTDJDQVBfQ1RSTF9TQVIpID09IEwyQ0FQX1NEVV9TVEFSVCkKIAogZXh0ZXJuIGludCBkaXNhYmxlX2VydG07Ci1leHRlcm4gY29uc3Qgc3RydWN0IHByb3RvX29wcyBsMmNhcF9zb2NrX29wczsKLWV4dGVybiBzdHJ1Y3QgYnRfc29ja19saXN0IGwyY2FwX3NrX2xpc3Q7CiAKIGludCBsMmNhcF9pbml0X3NvY2tldHModm9pZCk7CiB2b2lkIGwyY2FwX2NsZWFudXBfc29ja2V0cyh2b2lkKTsKIAotdTggbDJjYXBfZ2V0X2lkZW50KHN0cnVjdCBsMmNhcF9jb25uICpjb25uKTsKIHZvaWQgbDJjYXBfc2VuZF9jbWQoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4sIHU4IGlkZW50LCB1OCBjb2RlLCB1MTYgbGVuLCB2b2lkICpkYXRhKTsKLWludCBsMmNhcF9idWlsZF9jb25mX3JlcShzdHJ1Y3Qgc29jayAqc2ssIHZvaWQgKmRhdGEpOwordm9pZCBfX2wyY2FwX2Nvbm5lY3RfcnNwX2RlZmVyKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuKTsKIGludCBfX2wyY2FwX3dhaXRfYWNrKHN0cnVjdCBzb2NrICpzayk7CiAKLXN0cnVjdCBza19idWZmICpsMmNhcF9jcmVhdGVfY29ubmxlc3NfcGR1KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKTsKLXN0cnVjdCBza19idWZmICpsMmNhcF9jcmVhdGVfYmFzaWNfcGR1KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKTsKLXN0cnVjdCBza19idWZmICpsMmNhcF9jcmVhdGVfaWZyYW1lX3BkdShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwgdTE2IGNvbnRyb2wsIHUxNiBzZHVsZW4pOwotaW50IGwyY2FwX3Nhcl9zZWdtZW50X3NkdShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbik7Ci12b2lkIGwyY2FwX2RvX3NlbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXZvaWQgbDJjYXBfc3RyZWFtaW5nX3NlbmQoc3RydWN0IHNvY2sgKnNrKTsKLWludCBsMmNhcF9lcnRtX3NlbmQoc3RydWN0IHNvY2sgKnNrKTsKK3N0cnVjdCBza19idWZmICpsMmNhcF9jcmVhdGVfY29ubmxlc3NfcGR1KHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pOworc3RydWN0IHNrX2J1ZmYgKmwyY2FwX2NyZWF0ZV9iYXNpY19wZHUoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbik7CitzdHJ1Y3Qgc2tfYnVmZiAqbDJjYXBfY3JlYXRlX2lmcmFtZV9wZHUoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwgdTE2IGNvbnRyb2wsIHUxNiBzZHVsZW4pOworaW50IGwyY2FwX3Nhcl9zZWdtZW50X3NkdShzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKTsKK3ZvaWQgbDJjYXBfZG9fc2VuZChzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGwyY2FwX3N0cmVhbWluZ19zZW5kKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuKTsKK2ludCBsMmNhcF9lcnRtX3NlbmQoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4pOworCitpbnQgbDJjYXBfYWRkX3BzbShzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgYmRhZGRyX3QgKnNyYywgX19sZTE2IHBzbSk7CitpbnQgbDJjYXBfYWRkX3NjaWQoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sICBfX3UxNiBzY2lkKTsKIAogdm9pZCBsMmNhcF9zb2NrX3NldF90aW1lcihzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dCk7CiB2b2lkIGwyY2FwX3NvY2tfY2xlYXJfdGltZXIoc3RydWN0IHNvY2sgKnNrKTsKQEAgLTQ3Miw4ICs0NjgsMTAgQEAKIHZvaWQgbDJjYXBfc29ja19pbml0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKnBhcmVudCk7CiBzdHJ1Y3Qgc29jayAqbDJjYXBfc29ja19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCQkJCQkJaW50IHByb3RvLCBnZnBfdCBwcmlvKTsKLXZvaWQgbDJjYXBfc2VuZF9kaXNjb25uX3JlcShzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiwgc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKTsKLXZvaWQgbDJjYXBfY2hhbl9kZWwoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKTsKLWludCBsMmNhcF9kb19jb25uZWN0KHN0cnVjdCBzb2NrICpzayk7Cit2b2lkIGwyY2FwX3NlbmRfZGlzY29ubl9yZXEoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4sIHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCBpbnQgZXJyKTsKK3N0cnVjdCBsMmNhcF9jaGFuICpsMmNhcF9jaGFuX2NyZWF0ZShzdHJ1Y3Qgc29jayAqc2spOwordm9pZCBsMmNhcF9jaGFuX2RlbChzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgaW50IGVycik7Cit2b2lkIGwyY2FwX2NoYW5fZGVzdHJveShzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbik7CitpbnQgbDJjYXBfY2hhbl9jb25uZWN0KHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuKTsKIAogI2VuZGlmIC8qIF9fTDJDQVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL21nbXQuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9tZ210LmgKaW5kZXggNWZhYmZhOC4uNDg5OTI4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL21nbXQuaAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvbWdtdC5oCkBAIC00MSw2ICs0MSwxMCBAQAogCV9fbGUxNiBpbmRleFswXTsKIH0gX19wYWNrZWQ7CiAKKy8qIFJlc2VydmUgb25lIGV4dHJhIGJ5dGUgZm9yIG5hbWVzIGluIG1hbmFnZW1lbnQgbWVzc2FnZXMgc28gdGhhdCB0aGV5CisgKiBhcmUgYWx3YXlzIGd1YXJhbnRlZWQgdG8gYmUgbnVsLXRlcm1pbmF0ZWQgKi8KKyNkZWZpbmUgTUdNVF9NQVhfTkFNRV9MRU5HVEgJCShIQ0lfTUFYX05BTUVfTEVOR1RIICsgMSkKKwogI2RlZmluZSBNR01UX09QX1JFQURfSU5GTwkJMHgwMDA0CiBzdHJ1Y3QgbWdtdF9ycF9yZWFkX2luZm8gewogCV9fdTggdHlwZTsKQEAgLTU1LDYgKzU5LDcgQEAKIAlfX3UxNiBtYW51ZmFjdHVyZXI7CiAJX191OCBoY2lfdmVyOwogCV9fdTE2IGhjaV9yZXY7CisJX191OCBuYW1lW01HTVRfTUFYX05BTUVfTEVOR1RIXTsKIH0gX19wYWNrZWQ7CiAKIHN0cnVjdCBtZ210X21vZGUgewpAQCAtMTY3LDYgKzE3MiwzMyBAQAogCiAjZGVmaW5lIE1HTVRfT1BfVVNFUl9DT05GSVJNX05FR19SRVBMWQkweDAwMTYKIAorI2RlZmluZSBNR01UX09QX1NFVF9MT0NBTF9OQU1FCQkweDAwMTcKK3N0cnVjdCBtZ210X2NwX3NldF9sb2NhbF9uYW1lIHsKKwlfX3U4IG5hbWVbTUdNVF9NQVhfTkFNRV9MRU5HVEhdOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBNR01UX09QX1JFQURfTE9DQUxfT09CX0RBVEEJMHgwMDE4CitzdHJ1Y3QgbWdtdF9ycF9yZWFkX2xvY2FsX29vYl9kYXRhIHsKKwlfX3U4IGhhc2hbMTZdOworCV9fdTggcmFuZG9taXplclsxNl07Cit9IF9fcGFja2VkOworCisjZGVmaW5lIE1HTVRfT1BfQUREX1JFTU9URV9PT0JfREFUQQkweDAwMTkKK3N0cnVjdCBtZ210X2NwX2FkZF9yZW1vdGVfb29iX2RhdGEgeworCWJkYWRkcl90IGJkYWRkcjsKKwlfX3U4IGhhc2hbMTZdOworCV9fdTggcmFuZG9taXplclsxNl07Cit9IF9fcGFja2VkOworCisjZGVmaW5lIE1HTVRfT1BfUkVNT1ZFX1JFTU9URV9PT0JfREFUQQkweDAwMUEKK3N0cnVjdCBtZ210X2NwX3JlbW92ZV9yZW1vdGVfb29iX2RhdGEgeworCWJkYWRkcl90IGJkYWRkcjsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgTUdNVF9PUF9TVEFSVF9ESVNDT1ZFUlkJCTB4MDAxQgorCisjZGVmaW5lIE1HTVRfT1BfU1RPUF9ESVNDT1ZFUlkJCTB4MDAxQworCiAjZGVmaW5lIE1HTVRfRVZfQ01EX0NPTVBMRVRFCQkweDAwMDEKIHN0cnVjdCBtZ210X2V2X2NtZF9jb21wbGV0ZSB7CiAJX19sZTE2IG9wY29kZTsKQEAgLTE5OCw4ICsyMzAsOCBAQAogCiAjZGVmaW5lIE1HTVRfRVZfTkVXX0tFWQkJCTB4MDAwQQogc3RydWN0IG1nbXRfZXZfbmV3X2tleSB7CisJX191OCBzdG9yZV9oaW50OwogCXN0cnVjdCBtZ210X2tleV9pbmZvIGtleTsKLQlfX3U4IG9sZF9rZXlfdHlwZTsKIH0gX19wYWNrZWQ7CiAKICNkZWZpbmUgTUdNVF9FVl9DT05ORUNURUQJCTB4MDAwQgpAQCAtMjIxLDExICsyNTMsMTMgQEAKICNkZWZpbmUgTUdNVF9FVl9QSU5fQ09ERV9SRVFVRVNUCTB4MDAwRQogc3RydWN0IG1nbXRfZXZfcGluX2NvZGVfcmVxdWVzdCB7CiAJYmRhZGRyX3QgYmRhZGRyOworCV9fdTggc2VjdXJlOwogfSBfX3BhY2tlZDsKIAogI2RlZmluZSBNR01UX0VWX1VTRVJfQ09ORklSTV9SRVFVRVNUCTB4MDAwRgogc3RydWN0IG1nbXRfZXZfdXNlcl9jb25maXJtX3JlcXVlc3QgewogCWJkYWRkcl90IGJkYWRkcjsKKwlfX3U4IGNvbmZpcm1faGludDsKIAlfX2xlMzIgdmFsdWU7CiB9IF9fcGFja2VkOwogCkBAIC0yMzQsMyArMjY4LDI0IEBACiAJYmRhZGRyX3QgYmRhZGRyOwogCV9fdTggc3RhdHVzOwogfSBfX3BhY2tlZDsKKworI2RlZmluZSBNR01UX0VWX0xPQ0FMX05BTUVfQ0hBTkdFRAkweDAwMTEKK3N0cnVjdCBtZ210X2V2X2xvY2FsX25hbWVfY2hhbmdlZCB7CisJX191OCBuYW1lW01HTVRfTUFYX05BTUVfTEVOR1RIXTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgTUdNVF9FVl9ERVZJQ0VfRk9VTkQJCTB4MDAxMgorc3RydWN0IG1nbXRfZXZfZGV2aWNlX2ZvdW5kIHsKKwliZGFkZHJfdCBiZGFkZHI7CisJX191OCBkZXZfY2xhc3NbM107CisJX19zOCByc3NpOworCV9fdTggZWlyW0hDSV9NQVhfRUlSX0xFTkdUSF07Cit9IF9fcGFja2VkOworCisjZGVmaW5lIE1HTVRfRVZfUkVNT1RFX05BTUUJCTB4MDAxMworc3RydWN0IG1nbXRfZXZfcmVtb3RlX25hbWUgeworCWJkYWRkcl90IGJkYWRkcjsKKwlfX3U4IG5hbWVbTUdNVF9NQVhfTkFNRV9MRU5HVEhdOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBNR01UX0VWX0RJU0NPVkVSSU5HCQkweDAwMTQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NhaWYvY2FpZl9kZXYuaCBiL2luY2x1ZGUvbmV0L2NhaWYvY2FpZl9kZXYuaAppbmRleCA4ZWZmODNiLi5jMDExMjgxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jYWlmL2NhaWZfZGV2LmgKKysrIGIvaW5jbHVkZS9uZXQvY2FpZi9jYWlmX2Rldi5oCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bmV0L2NhaWYvY2ZjbmZnLmg+CiAjaW5jbHVkZSA8bGludXgvY2FpZi9jYWlmX3NvY2tldC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0Lmg+CiAKIC8qKgogICogc3RydWN0IGNhaWZfcGFyYW0gLSBDQUlGIHBhcmFtZXRlcnMuCkBAIC02Miw0NiArNjMsNDUgQEAKICAqIEUuZy4gQ0FJRiBTb2NrZXQgd2lsbCBjYWxsIHRoaXMgZnVuY3Rpb24gZm9yIGVhY2ggc29ja2V0IGl0IGNvbm5lY3RzCiAgKiBhbmQgaGF2ZSBvbmUgY2xpZW50X2xheWVyIGluc3RhbmNlIGZvciBlYWNoIHNvY2tldC4KICAqLwotaW50IGNhaWZfY29ubmVjdF9jbGllbnQoc3RydWN0IGNhaWZfY29ubmVjdF9yZXF1ZXN0ICpjb25uX3JlcSwKK2ludCBjYWlmX2Nvbm5lY3RfY2xpZW50KHN0cnVjdCBuZXQgKm5ldCwKKwkJCXN0cnVjdCBjYWlmX2Nvbm5lY3RfcmVxdWVzdCAqY29ubl9yZXEsCiAJCQlzdHJ1Y3QgY2ZsYXllciAqY2xpZW50X2xheWVyLCBpbnQgKmlmaW5kZXgsCiAJCQlpbnQgKmhlYWRyb29tLCBpbnQgKnRhaWxyb29tKTsKIAogLyoqCiAgKiBjYWlmX2Rpc2Nvbm5lY3RfY2xpZW50IC0gRGlzY29ubmVjdHMgYSBjbGllbnQgZnJvbSB0aGUgQ0FJRiBzdGFjay4KICAqCisgKiBAY2xpZW50X2xheWVyOiBDbGllbnQgbGF5ZXIgdG8gYmUgZGlzY29ubmVjdGVkLgorICovCitpbnQgY2FpZl9kaXNjb25uZWN0X2NsaWVudChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBjZmxheWVyICpjbGllbnRfbGF5ZXIpOworCisKKy8qKgorICogY2FpZl9jbGllbnRfcmVnaXN0ZXJfcmVmY250IC0gcmVnaXN0ZXIgcmVmLWNvdW50IGZ1bmN0aW9ucyBwcm92aWRlZCBieSBjbGllbnQuCisgKgorICogQGFkYXB0X2xheWVyOiBDbGllbnQgbGF5ZXIgdXNpbmcgQ0FJRiBTdGFjay4KKyAqIEBob2xkOglGdW5jdGlvbiBwcm92aWRlZCBieSBjbGllbnQgbGF5ZXIgaW5jcmVhc2luZyByZWYtY291bnQKKyAqIEBwdXQ6CUZ1bmN0aW9uIHByb3ZpZGVkIGJ5IGNsaWVudCBsYXllciBkZWNyZWFzaW5nIHJlZi1jb3VudAorICoKKyAqIENsaWVudCBvZiB0aGUgQ0FJRiBTdGFjayBtdXN0IHJlZ2lzdGVyIGZ1bmN0aW9ucyBmb3IgcmVmZXJlbmNlIGNvdW50aW5nLgorICogVGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgYnkgdGhlIENBSUYgU3RhY2sgZm9yIGV2ZXJ5IHVwc3RyZWFtIHBhY2tldCwKKyAqIGFuZCBtdXN0IHRoZXJlZm9yZSBiZSBpbXBsZW1lbnRlZCBlZmZpY2llbnRseS4KKyAqCisgKiBDbGllbnQgc2hvdWxkIGNhbGwgY2FpZl9mcmVlX2NsaWVudCB3aGVuIHJlZmVyZW5jZSBjb3VudCBkZWdyZWFzZSB0byB6ZXJvLgorICovCisKK3ZvaWQgY2FpZl9jbGllbnRfcmVnaXN0ZXJfcmVmY250KHN0cnVjdCBjZmxheWVyICphZGFwdF9sYXllciwKKwkJCQkJdm9pZCAoKmhvbGQpKHN0cnVjdCBjZmxheWVyICpseXIpLAorCQkJCQl2b2lkICgqcHV0KShzdHJ1Y3QgY2ZsYXllciAqbHlyKSk7CisvKioKKyAqIGNhaWZfZnJlZV9jbGllbnQgLSBGcmVlIG1lbW9yeSB1c2VkIHRvIG1hbmFnZSB0aGUgY2xpZW50IGluIHRoZSBDQUlGIFN0YWNrLgorICoKICAqIEBjbGllbnRfbGF5ZXI6IENsaWVudCBsYXllciB0byBiZSByZW1vdmVkLgotICovCi1pbnQgY2FpZl9kaXNjb25uZWN0X2NsaWVudChzdHJ1Y3QgY2ZsYXllciAqY2xpZW50X2xheWVyKTsKLQotLyoqCi0gKiBjYWlmX3JlbGVhc2VfY2xpZW50IC0gUmVsZWFzZSBhZGFwdGF0aW9uIGxheWVyIHJlZmVyZW5jZSB0byBjbGllbnQuCiAgKgotICogQGNsaWVudF9sYXllcjogQ2xpZW50IGxheWVyLgotICoKLSAqIFJlbGVhc2VzIGEgY2xpZW50L2FkYXB0YXRpb24gbGF5ZXIgdXNlIG9mIHRoZSBjYWlmIHN0YWNrLgotICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHVzZWQgYWZ0ZXIgY2FpZl9kaXNjb25uZWN0X2NsaWVudCB0bwotICogZGVjcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgc2VydmljZSBsYXllci4KKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgZnJvbSBjbGllbnQgbGF5ZXIgaW4gb3JkZXIgdG8gZnJlZSBtZW1vcnkuCisgKiBDYWxsZXIgbXVzdCBndWFyYW50ZWUgdGhhdCBubyBwYWNrZXRzIGFyZSBpbiBmbGlnaHQgdXBzdHJlYW0gd2hlbiBjYWxsaW5nCisgKiB0aGlzIGZ1bmN0aW9uLgogICovCi12b2lkIGNhaWZfcmVsZWFzZV9jbGllbnQoc3RydWN0IGNmbGF5ZXIgKmNsaWVudF9sYXllcik7Ci0KLS8qKgotICogY29ubmVjdF9yZXFfdG9fbGlua19wYXJhbSAtIFRyYW5zbGF0ZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKLSAqCQkJCWZyb20gc29ja2V0IGZvcm1hdCB0byBpbnRlcm5hbCBmb3JtYXQuCi0gKiBAY25mZzoJUG9pbnRlciB0byBjb25maWd1cmF0aW9uIGhhbmRsZXIKLSAqIEBjb25fcmVxOglDb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgc3VwcGxpZWQgaW4gZnVuY3Rpb24KLSAqCQljYWlmX2Nvbm5lY3RfY2xpZW50Ci0gKiBAY2hhbm5lbF9zZXR1cF9wYXJhbTogUGFyYW1ldGVycyBzdXBwbGllZCB0byB0aGUgQ0FJRiBDb3JlIHN0YWNrIGZvcgotICoJCQkgc2V0dGluZyB1cCBjaGFubmVscy4KLSAqCi0gKi8KLWludCBjb25uZWN0X3JlcV90b19saW5rX3BhcmFtKHN0cnVjdCBjZmNuZmcgKmNuZmcsCi0JCQkJc3RydWN0IGNhaWZfY29ubmVjdF9yZXF1ZXN0ICpjb25fcmVxLAotCQkJCXN0cnVjdCBjZmN0cmxfbGlua19wYXJhbSAqY2hhbm5lbF9zZXR1cF9wYXJhbSk7Ci0KLS8qKgotICogZ2V0X2NhaWZfY29uZigpIC0gR2V0IHRoZSBjb25maWd1cmF0aW9uIGhhbmRsZXIuCi0gKi8KLXN0cnVjdCBjZmNuZmcgKmdldF9jYWlmX2NvbmYodm9pZCk7Ci0KK3ZvaWQgY2FpZl9mcmVlX2NsaWVudChzdHJ1Y3QgY2ZsYXllciAqYWRhcF9sYXllcik7CiAKICNlbmRpZiAvKiBDQUlGX0RFVl9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2FpZi9jZmNuZmcuaCBiL2luY2x1ZGUvbmV0L2NhaWYvY2ZjbmZnLmgKaW5kZXggZjMzZDM2My4uM2U5M2E0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY2FpZi9jZmNuZmcuaAorKysgYi9pbmNsdWRlL25ldC9jYWlmL2NmY25mZy5oCkBAIC00Niw2ICs0NiwxMiBAQAogfTsKIAogLyoqCisgKiBjZmNuZmdfY3JlYXRlKCkgLSBHZXQgdGhlIENBSUYgY29uZmlndXJhdGlvbiBvYmplY3QgZ2l2ZW4gbmV0d29yay4KKyAqIEBuZXQ6CU5ldHdvcmsgZm9yIHRoZSBDQUlGIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgorICovCitzdHJ1Y3QgY2ZjbmZnICpnZXRfY2ZjbmZnKHN0cnVjdCBuZXQgKm5ldCk7CisKKy8qKgogICogY2ZjbmZnX2NyZWF0ZSgpIC0gQ3JlYXRlIHRoZSBDQUlGIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgogICovCiBzdHJ1Y3QgY2ZjbmZnICpjZmNuZmdfY3JlYXRlKHZvaWQpOwpAQCAtNjUsMTcgKzcxLDE1IEBACiAgKiBAZGV2OglQb2ludGVyIHRvIGxpbmsgbGF5ZXIgZGV2aWNlCiAgKiBAcGh5X2xheWVyOglTcGVjaWZ5IHRoZSBwaHlzaWNhbCBsYXllci4gVGhlIHRyYW5zbWl0IGZ1bmN0aW9uCiAgKgkJTVVTVCBiZSBzZXQgaW4gdGhlIHN0cnVjdHVyZS4KLSAqIEBwaHlpZDoJVGhlIGFzc2lnbmVkIHBoeXNpY2FsIElEIGZvciB0aGlzIGxheWVyLCB1c2VkIGluCi0gKgkJY2ZjbmZnX2FkZF9hZGFwdF9sYXllciB0byBzcGVjaWZ5IFBIWSBmb3IgdGhlIGxpbmsuCiAgKiBAcHJlZjoJVGhlIHBoeSAobGluayBsYXllcikgcHJlZmVyZW5jZS4KICAqIEBmY3M6CVNwZWNpZnkgaWYgY2hlY2tzdW0gaXMgdXNlZCBpbiBDQUlGIEZyYW1pbmcgTGF5ZXIuCi0gKiBAc3R4OglTcGVjaWZ5IGlmIFN0YXJ0IE9mIEZyYW1lIGV4dGVuc2lvbiBpcyB1c2VkLgorICogQHN0eDoJU3BlY2lmeSBpZiBTdGFydCBPZiBGcmFtZSBlWHRlbnRpb24gaXMgdXNlZC4KICAqLwogCiB2b2lkCiBjZmNuZmdfYWRkX3BoeV9sYXllcihzdHJ1Y3QgY2ZjbmZnICpjbmZnLCBlbnVtIGNmY25mZ19waHlfdHlwZSBwaHlfdHlwZSwKIAkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2ZsYXllciAqcGh5X2xheWVyLAotCQkgICAgIHUxNiAqcGh5aWQsIGVudW0gY2ZjbmZnX3BoeV9wcmVmZXJlbmNlIHByZWYsCisJCSAgICAgZW51bSBjZmNuZmdfcGh5X3ByZWZlcmVuY2UgcHJlZiwKIAkJICAgICBib29sIGZjcywgYm9vbCBzdHgpOwogCiAvKioKQEAgLTg4LDYxICs5MiwxMiBAQAogaW50IGNmY25mZ19kZWxfcGh5X2xheWVyKHN0cnVjdCBjZmNuZmcgKmNuZmcsIHN0cnVjdCBjZmxheWVyICpwaHlfbGF5ZXIpOwogCiAvKioKLSAqIGNmY25mZ19kaXNjb25uX2FkYXB0X2xheWVyIC0gRGlzY29ubmVjdHMgYW4gYWRhcHRhdGlvbiBsYXllci4KLSAqCi0gKiBAY25mZzoJUG9pbnRlciB0byBhIENBSUYgY29uZmlndXJhdGlvbiBvYmplY3QsIGNyZWF0ZWQgYnkKLSAqCQljZmNuZmdfY3JlYXRlKCkuCi0gKiBAYWRhcF9sYXllcjogQWRhcHRhdGlvbiBsYXllciB0byBiZSByZW1vdmVkLgotICovCi1pbnQgY2ZjbmZnX2Rpc2Nvbm5fYWRhcHRfbGF5ZXIoc3RydWN0IGNmY25mZyAqY25mZywKLQkJCXN0cnVjdCBjZmxheWVyICphZGFwX2xheWVyKTsKLQotLyoqCi0gKiBjZmNuZmdfcmVsZWFzZV9hZGFwX2xheWVyIC0gVXNlZCBieSBjbGllbnQgdG8gcmVsZWFzZSB0aGUgYWRhcHRhdGlvbiBsYXllci4KLSAqCi0gKiBAYWRhcF9sYXllcjogQWRhcHRhdGlvbiBsYXllci4KLSAqLwotdm9pZCBjZmNuZmdfcmVsZWFzZV9hZGFwX2xheWVyKHN0cnVjdCBjZmxheWVyICphZGFwX2xheWVyKTsKLQotLyoqCi0gKiBjZmNuZmdfYWRkX2FkYXB0YXRpb25fbGF5ZXIgLSBBZGQgYW4gYWRhcHRhdGlvbiBsYXllciB0byB0aGUgQ0FJRiBzdGFjay4KLSAqCi0gKiBUaGUgYWRhcHRhdGlvbiBMYXllciBpcyB3aGVyZSB0aGUgaW50ZXJmYWNlIHRvIGFwcGxpY2F0aW9uIG9yIGhpZ2hlci1sZXZlbAotICogZHJpdmVyIGZ1bmN0aW9uYWxpdHkgaXMgaW1wbGVtZW50ZWQuCi0gKgotICogQGNuZmc6CQlQb2ludGVyIHRvIGEgQ0FJRiBjb25maWd1cmF0aW9uIG9iamVjdCwgY3JlYXRlZCBieQotICoJCQljZmNuZmdfY3JlYXRlKCkuCi0gKiBAcGFyYW06CQlMaW5rIHNldHVwIHBhcmFtZXRlcnMuCi0gKiBAYWRhcF9sYXllcjoJCVNwZWNpZnkgdGhlIGFkYXB0YXRpb24gbGF5ZXI7IHRoZSByZWNlaXZlIGFuZAotICoJCQlmbG93LWNvbnRyb2wgZnVuY3Rpb25zIE1VU1QgYmUgc2V0IGluIHRoZSBzdHJ1Y3R1cmUuCi0gKiBAaWZpbmRleDoJCUxpbmsgbGF5ZXIgaW50ZXJmYWNlIGluZGV4IHVzZWQgZm9yIHRoaXMgY29ubmVjdGlvbi4KLSAqIEBwcm90b19oZWFkOgkJUHJvdG9jb2wgaGVhZC1zcGFjZSBuZWVkZWQgYnkgQ0FJRiBwcm90b2NvbCwKLSAqCQkJZXhjbHVkaW5nIGxpbmsgbGF5ZXIuCi0gKiBAcHJvdG9fdGFpbDoJCVByb3RvY29sIHRhaWwtc3BhY2UgbmVlZGVkIGJ5IENBSUYgcHJvdG9jb2wsCi0gKgkJCWV4Y2x1ZGluZyBsaW5rIGxheWVyLgotICovCi1pbnQgY2ZjbmZnX2FkZF9hZGFwdGF0aW9uX2xheWVyKHN0cnVjdCBjZmNuZmcgKmNuZmcsCi0JCQkgICAgc3RydWN0IGNmY3RybF9saW5rX3BhcmFtICpwYXJhbSwKLQkJCSAgICBzdHJ1Y3QgY2ZsYXllciAqYWRhcF9sYXllciwKLQkJCSAgICBpbnQgKmlmaW5kZXgsCi0JCQkgICAgaW50ICpwcm90b19oZWFkLAotCQkJICAgIGludCAqcHJvdG9fdGFpbCk7Ci0KLS8qKgotICogY2ZjbmZnX2dldF9waHlpZCgpIC0gR2V0IHBoeXNpY2FsIElELCBnaXZlbiB0eXBlLgotICogUmV0dXJucyBvbmUgb2YgdGhlIHBoeXNpY2FsIGludGVyZmFjZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHR5cGUuCi0gKiBaZXJvIGlmIG5vIG1hdGNoIGlzIGZvdW5kLgorICogY2ZjbmZnX3NldF9waHlfc3RhdGUoKSAtIFNldCB0aGUgc3RhdGUgb2YgdGhlIHBoeXNpY2FsIGludGVyZmFjZSBkZXZpY2UuCiAgKiBAY25mZzoJQ29uZmlndXJhdGlvbiBvYmplY3QKLSAqIEBwaHlfcHJlZjoJQ2FpZiBMaW5rIExheWVyIHByZWZlcmVuY2UKKyAqIEBwaHlfbGF5ZXI6CVBoeXNpY2FsIExheWVyIHJlcHJlc2VudGF0aW9uCisgKiBAdXA6CVN0YXRlIG9mIGRldmljZQogICovCi1zdHJ1Y3QgZGV2X2luZm8gKmNmY25mZ19nZXRfcGh5aWQoc3RydWN0IGNmY25mZyAqY25mZywKLQkJICAgICBlbnVtIGNmY25mZ19waHlfcHJlZmVyZW5jZSBwaHlfcHJlZik7CitpbnQgY2ZjbmZnX3NldF9waHlfc3RhdGUoc3RydWN0IGNmY25mZyAqY25mZywgc3RydWN0IGNmbGF5ZXIgKnBoeV9sYXllciwKKwkJCQlib29sIHVwKTsKIAotLyoqCi0gKiBjZmNuZmdfZ2V0X2lkX2Zyb21faWZpKCkgLSBHZXQgdGhlIFBoeXNpY2FsIElkZW50aWZpZXIgb2YgaWZpbmRleCwKLSAqIAkJCWl0IG1hdGNoZXMgY2FpZiBwaHlzaWNhbCBpZCB3aXRoIHRoZSBrZXJuZWwgaW50ZXJmYWNlIGlkLgotICogQGNuZmc6CUNvbmZpZ3VyYXRpb24gb2JqZWN0Ci0gKiBAaWZpOglpZmluZGV4IG9idGFpbmVkIGZyb20gc29ja2V0LmMgYmluZHRvZGV2aWNlLgotICovCi1pbnQgY2ZjbmZnX2dldF9pZF9mcm9tX2lmaShzdHJ1Y3QgY2ZjbmZnICpjbmZnLCBpbnQgaWZpKTsKICNlbmRpZgkJCQkvKiBDRkNORkdfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NhaWYvY2ZjdHJsLmggYi9pbmNsdWRlL25ldC9jYWlmL2NmY3RybC5oCmluZGV4IGU1NGY2MzkuLjllNTQyNWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2NhaWYvY2ZjdHJsLmgKKysrIGIvaW5jbHVkZS9uZXQvY2FpZi9jZmN0cmwuaApAQCAtMTIxLDE5ICsxMjEsMTAgQEAKIAkJCSAgIHN0cnVjdCBjZmxheWVyICp1c2VyX2xheWVyKTsKIGludCAgY2ZjdHJsX2xpbmtkb3duX3JlcShzdHJ1Y3QgY2ZsYXllciAqY2ZjdHJsLCB1OCBsaW5raWQsCiAJCQkgc3RydWN0IGNmbGF5ZXIgKmNsaWVudCk7Ci12b2lkIGNmY3RybF9zbGVlcF9yZXEoc3RydWN0IGNmbGF5ZXIgKmNmY3RybCk7Ci12b2lkIGNmY3RybF93YWtlX3JlcShzdHJ1Y3QgY2ZsYXllciAqY2ZjdHJsKTsKLXZvaWQgY2ZjdHJsX2dldHN0YXJ0cmVhc29uX3JlcShzdHJ1Y3QgY2ZsYXllciAqY2ZjdHJsKTsKKwogc3RydWN0IGNmbGF5ZXIgKmNmY3RybF9jcmVhdGUodm9pZCk7Ci12b2lkIGNmY3RybF9zZXRfZG5sYXllcihzdHJ1Y3QgY2ZsYXllciAqdGhpcywgc3RydWN0IGNmbGF5ZXIgKmRuKTsKLXZvaWQgY2ZjdHJsX3NldF91cGxheWVyKHN0cnVjdCBjZmxheWVyICp0aGlzLCBzdHJ1Y3QgY2ZsYXllciAqdXApOwogc3RydWN0IGNmY3RybF9yc3AgKmNmY3RybF9nZXRfcmVzcGZ1bmNzKHN0cnVjdCBjZmxheWVyICpsYXllcik7Ci1ib29sIGNmY3RybF9yZXFfZXEoc3RydWN0IGNmY3RybF9yZXF1ZXN0X2luZm8gKnIxLAotCQkgICBzdHJ1Y3QgY2ZjdHJsX3JlcXVlc3RfaW5mbyAqcjIpOwotdm9pZCBjZmN0cmxfaW5zZXJ0X3JlcShzdHJ1Y3QgY2ZjdHJsICpjdHJsLAotCQkJICAgICAgc3RydWN0IGNmY3RybF9yZXF1ZXN0X2luZm8gKnJlcSk7Ci1zdHJ1Y3QgY2ZjdHJsX3JlcXVlc3RfaW5mbyAqY2ZjdHJsX3JlbW92ZV9yZXEoc3RydWN0IGNmY3RybCAqY3RybCwKLQkJCQkJICAgICAgc3RydWN0IGNmY3RybF9yZXF1ZXN0X2luZm8gKnJlcSk7Ci12b2lkIGNmY3RybF9jYW5jZWxfcmVxKHN0cnVjdCBjZmxheWVyICpsYXlyLCBzdHJ1Y3QgY2ZsYXllciAqYWRhcF9sYXllcik7CitpbnQgY2ZjdHJsX2NhbmNlbF9yZXEoc3RydWN0IGNmbGF5ZXIgKmxheXIsIHN0cnVjdCBjZmxheWVyICphZGFwX2xheWVyKTsKK3ZvaWQgY2ZjdHJsX3JlbW92ZShzdHJ1Y3QgY2ZsYXllciAqbGF5cik7CiAKICNlbmRpZgkJCQkvKiBDRkNUUkxfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NhaWYvY2Zmcm1sLmggYi9pbmNsdWRlL25ldC9jYWlmL2NmZnJtbC5oCmluZGV4IDNmMTRkMmUuLmFmYWMxYTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2NhaWYvY2Zmcm1sLmgKKysrIGIvaW5jbHVkZS9uZXQvY2FpZi9jZmZybWwuaApAQCAtNywxMCArNywxNSBAQAogI2lmbmRlZiBDRkZSTUxfSF8KICNkZWZpbmUgQ0ZGUk1MX0hfCiAjaW5jbHVkZSA8bmV0L2NhaWYvY2FpZl9sYXllci5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogCiBzdHJ1Y3QgY2Zmcm1sOwotc3RydWN0IGNmbGF5ZXIgKmNmZnJtbF9jcmVhdGUodTE2IHBoeWlkLCBib29sIERvRkNTKTsKK3N0cnVjdCBjZmxheWVyICpjZmZybWxfY3JlYXRlKHUxNiBwaHlpZCwgYm9vbCB1c2VfZmNzKTsKK3ZvaWQgY2Zmcm1sX2ZyZWUoc3RydWN0IGNmbGF5ZXIgKmxheXIpOwogdm9pZCBjZmZybWxfc2V0X3VwbGF5ZXIoc3RydWN0IGNmbGF5ZXIgKnRoaXMsIHN0cnVjdCBjZmxheWVyICp1cCk7CiB2b2lkIGNmZnJtbF9zZXRfZG5sYXllcihzdHJ1Y3QgY2ZsYXllciAqdGhpcywgc3RydWN0IGNmbGF5ZXIgKmRuKTsKK3ZvaWQgY2Zmcm1sX3B1dChzdHJ1Y3QgY2ZsYXllciAqbGF5cik7Cit2b2lkIGNmZnJtbF9ob2xkKHN0cnVjdCBjZmxheWVyICpsYXlyKTsKK2ludCBjZmZybWxfcmVmY250X3JlYWQoc3RydWN0IGNmbGF5ZXIgKmxheXIpOwogCiAjZW5kaWYgLyogQ0ZGUk1MX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jYWlmL2NmbXV4bC5oIGIvaW5jbHVkZS9uZXQvY2FpZi9jZm11eGwuaAppbmRleCA0ZTFiNGYzLi41ODQ3YTE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jYWlmL2NmbXV4bC5oCisrKyBiL2luY2x1ZGUvbmV0L2NhaWYvY2ZtdXhsLmgKQEAgLTE2LDcgKzE2LDUgQEAKIHN0cnVjdCBjZmxheWVyICpjZm11eGxfcmVtb3ZlX2RubGF5ZXIoc3RydWN0IGNmbGF5ZXIgKmxheXIsIHU4IHBoeWlkKTsKIGludCBjZm11eGxfc2V0X2RubGF5ZXIoc3RydWN0IGNmbGF5ZXIgKmxheXIsIHN0cnVjdCBjZmxheWVyICp1cCwgdTggcGh5aWQpOwogc3RydWN0IGNmbGF5ZXIgKmNmbXV4bF9yZW1vdmVfdXBsYXllcihzdHJ1Y3QgY2ZsYXllciAqbGF5ciwgdTggbGlua2lkKTsKLWJvb2wgY2ZtdXhsX2lzX3BoeV9pbnVzZShzdHJ1Y3QgY2ZsYXllciAqbGF5ciwgdTggcGh5aWQpOwotdTggY2ZtdXhsX2dldF9waHlpZChzdHJ1Y3QgY2ZsYXllciAqbGF5ciwgdTggY2hhbm5lbF9pZCk7CiAKICNlbmRpZgkJCQkvKiBDRk1VWExfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NhaWYvY2Zwa3QuaCBiL2luY2x1ZGUvbmV0L2NhaWYvY2Zwa3QuaAppbmRleCBmYmM2ODFiLi42YmQyMDBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jYWlmL2NmcGt0LmgKKysrIGIvaW5jbHVkZS9uZXQvY2FpZi9jZnBrdC5oCkBAIC0xNiwxMiArMTYsNiBAQAogICovCiBzdHJ1Y3QgY2Zwa3QgKmNmcGt0X2NyZWF0ZSh1MTYgbGVuKTsKIAotLyogQ3JlYXRlIGEgQ0FJRiBwYWNrZXQuCi0gKiBkYXRhIERhdGEgdG8gY29weS4KLSAqIGxlbiBMZW5ndGggb2YgcGFja2V0IHRvIGJlIGNyZWF0ZWQKLSAqIEByZXR1cm4gTmV3IHBhY2tldC4KLSAqLwotc3RydWN0IGNmcGt0ICpjZnBrdF9jcmVhdGVfdXBsaW5rKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pOwogLyoKICAqIERlc3Ryb3kgYSBDQUlGIFBhY2tldC4KICAqIHBrdCBQYWNrZXQgdG8gYmUgZGVzdG95ZWQuCkBAIC0xODEsMjIgKzE3NSw2IEBACiAJCXUxNiAoKml0ZXJfZnVuYykodTE2IGNoa3MsIHZvaWQgKmJ1ZiwgdTE2IGxlbiksCiAJCXUxNiBkYXRhKTsKIAotLyogQXBwZW5kIGJ5IGdpdmluZyB1c2VyIGFjY2VzcyB0byBwYWNrZXQgYnVmZmVyCi0gKiBjZnBrdCBQYWNrZXQgdG8gYXBwZW5kIHRvCi0gKiBidWYgQnVmZmVyIGluc2lkZSBwa3QgdGhhdCB1c2VyIHNoYWxsIGNvcHkgZGF0YSBpbnRvCi0gKiBidWZsZW4gTGVuZ3RoIG9mIGJ1ZmZlciBhbmQgbnVtYmVyIG9mIGJ5dGVzIGFkZGVkIHRvIHBhY2tldAotICogQHJldHVybiAwIG9uIGVycm9yLCAxIG9uIHN1Y2Nlc3MKLSAqLwotaW50IGNmcGt0X3Jhd19hcHBlbmQoc3RydWN0IGNmcGt0ICpjZnBrdCwgdm9pZCAqKmJ1ZiwgdW5zaWduZWQgaW50IGJ1Zmxlbik7Ci0KLS8qIEV4dHJhY3QgYnkgZ2l2aW5nIHVzZXIgYWNjZXNzIHRvIHBhY2tldCBidWZmZXIKLSAqIGNmcGt0IFBhY2tldCB0byBleHRyYWN0IGZyb20KLSAqIGJ1ZiBCdWZmZXIgaW5zaWRlIHBrdCB0aGF0IHVzZXIgc2hhbGwgY29weSBkYXRhIGZyb20KLSAqIGJ1ZmxlbiBMZW5ndGggb2YgYnVmZmVyIGFuZCBudW1iZXIgb2YgYnl0ZXMgcmVtb3ZlZCBmcm9tIHBhY2tldAotICogQHJldHVybiAwIG9uIGVycm9yLCAxIG9uIHN1Y2Nlc3MKLSAqLwotaW50IGNmcGt0X3Jhd19leHRyYWN0KHN0cnVjdCBjZnBrdCAqY2Zwa3QsIHZvaWQgKipidWYsIHVuc2lnbmVkIGludCBidWZsZW4pOwotCiAvKiBNYXAgZnJvbSBhICJuYXRpdmUiIHBhY2tldCAoZS5nLiBMaW51eCBTb2NrZXQgQnVmZmVyKSB0byBhIENBSUYgcGFja2V0LgogICogIGRpciAtIERpcmVjdGlvbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhpcyBwYWNrZXQgaXMgdG8gYmUgc2VudCBvciByZWNlaXZlZC4KICAqICBuYXRpdmVwa3QgIC0gVGhlIG5hdGl2ZSBwYWNrZXQgdG8gYmUgdHJhbnNmb3JtZWQgdG8gYSBDQUlGIHBhY2tldApAQCAtMjEwLDU5ICsxODgsNiBAQAogICovCiB2b2lkICpjZnBrdF90b25hdGl2ZShzdHJ1Y3QgY2Zwa3QgKnBrdCk7CiAKLS8qCi0gKiBJbnNlcnQgYSBwYWNrZXQgaW4gdGhlIHBhY2tldCBxdWV1ZS4KLSAqIHBrdHEgUGFja2V0IHF1ZXVlIHRvIGluc2VydCBpbnRvCi0gKiBwa3QgUGFja2V0IHRvIGJlIGluc2VydGVkIGluIHF1ZXVlCi0gKiBwcmlvIFByaW9yaXR5IG9mIHBhY2tldAotICovCi12b2lkIGNmcGt0X3F1ZXVlKHN0cnVjdCBjZnBrdHEgKnBrdHEsIHN0cnVjdCBjZnBrdCAqcGt0LAotCQkgdW5zaWduZWQgc2hvcnQgcHJpbyk7Ci0KLS8qCi0gKiBSZW1vdmUgYSBwYWNrZXQgZnJvbSB0aGUgcGFja2V0IHF1ZXVlLgotICogcGt0cSBQYWNrZXQgcXVldWUgdG8gZmV0Y2ggcGFja2V0cyBmcm9tLgotICogQHJldHVybiBEZXF1ZXVlZCBwYWNrZXQuCi0gKi8KLXN0cnVjdCBjZnBrdCAqY2Zwa3RfZGVxdWV1ZShzdHJ1Y3QgY2Zwa3RxICpwa3RxKTsKLQotLyoKLSAqIFBlZWsgaW50byBhIHBhY2tldCBmcm9tIHRoZSBwYWNrZXQgcXVldWUuCi0gKiBwa3RxIFBhY2tldCBxdWV1ZSB0byBmZXRjaCBwYWNrZXRzIGZyb20uCi0gKiBAcmV0dXJuIFBlZWtlZCBwYWNrZXQuCi0gKi8KLXN0cnVjdCBjZnBrdCAqY2Zwa3RfcXBlZWsoc3RydWN0IGNmcGt0cSAqcGt0cSk7Ci0KLS8qCi0gKiBJbml0aWF0ZXMgdGhlIHBhY2tldCBxdWV1ZS4KLSAqIEByZXR1cm4gUG9pbnRlciB0byBuZXcgcGFja2V0IHF1ZXVlLgotICovCi1zdHJ1Y3QgY2Zwa3RxICpjZnBrdHFfY3JlYXRlKHZvaWQpOwotCi0vKgotICogR2V0IHRoZSBudW1iZXIgb2YgcGFja2V0cyBpbiB0aGUgcXVldWUuCi0gKiBwa3RxIFBhY2tldCBxdWV1ZSB0byBmZXRjaCBjb3VudCBmcm9tLgotICogQHJldHVybiBOdW1iZXIgb2YgcGFja2V0cyBpbiBxdWV1ZS4KLSAqLwotaW50IGNmcGt0X3Fjb3VudChzdHJ1Y3QgY2Zwa3RxICpwa3RxKTsKLQotLyoKLSAqIFB1dCBjb250ZW50IG9mIHBhY2tldCBpbnRvIGJ1ZmZlciBmb3IgZGVidWdpbmcgcHVycG9zZXMuCi0gKiBwa3QgUGFja2V0IHRvIGNvcHkgZGF0YSBmcm9tCi0gKiBidWYgQnVmZmVyIHRvIGNvcHkgZGF0YSBpbnRvCi0gKiBidWZsZW4gTGVuZ3RoIG9mIGRhdGEgdG8gY29weQotICogQHJldHVybiBQb2ludGVyIHRvIGNvcGllZCBkYXRhCi0gKi8KLWNoYXIgKmNmcGt0X2xvZ19wa3Qoc3RydWN0IGNmcGt0ICpwa3QsIGNoYXIgKmJ1ZiwgaW50IGJ1Zmxlbik7Ci0KLS8qCi0gKiBDbG9uZXMgYSBwYWNrZXQgYW5kIHJlbGVhc2VzIHRoZSBvcmlnaW5hbCBwYWNrZXQuCi0gKiBUaGlzIGlzIHVzZWQgZm9yIHRha2luZyBvd25lcnNoaXAgb2YgYSBwYWNrZXQgZS5nIHF1ZXVlaW5nLgotICogcGt0IFBhY2tldCB0byBjbG9uZSBhbmQgcmVsZWFzZS4KLSAqIEByZXR1cm4gQ2xvbmVkIHBhY2tldC4KLSAqLwotc3RydWN0IGNmcGt0ICpjZnBrdF9jbG9uZV9yZWxlYXNlKHN0cnVjdCBjZnBrdCAqcGt0KTsKLQogCiAvKgogICogUmV0dXJucyBwYWNrZXQgaW5mb3JtYXRpb24gZm9yIGEgcGFja2V0LgpAQCAtMjcwLDUgKzE5NSw0IEBACiAgKiBAcmV0dXJuIFBhY2tldCBpbmZvcm1hdGlvbgogICovCiBzdHJ1Y3QgY2FpZl9wYXlsb2FkX2luZm8gKmNmcGt0X2luZm8oc3RydWN0IGNmcGt0ICpwa3QpOwotLyohIEB9ICovCiAjZW5kaWYJCQkJLyogQ0ZQS1RfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NhaWYvY2ZzcnZsLmggYi9pbmNsdWRlL25ldC9jYWlmL2Nmc3J2bC5oCmluZGV4IGIxZmE4N2UuLjBmNTkwNTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2NhaWYvY2ZzcnZsLmgKKysrIGIvaW5jbHVkZS9uZXQvY2FpZi9jZnNydmwuaApAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3QuaD4KIAogc3RydWN0IGNmc3J2bCB7CiAJc3RydWN0IGNmbGF5ZXIgbGF5ZXI7CkBAIC0xNywxMiArMTgsMTMgQEAKIAlib29sIHBoeV9mbG93X29uOwogCWJvb2wgbW9kZW1fZmxvd19vbjsKIAlib29sIHN1cHBvcnRzX2Zsb3djdHJsOwotCXZvaWQgKCpyZWxlYXNlKShzdHJ1Y3Qga3JlZiAqKTsKKwl2b2lkICgqcmVsZWFzZSkoc3RydWN0IGNmbGF5ZXIgKmxheWVyKTsKIAlzdHJ1Y3QgZGV2X2luZm8gZGV2X2luZm87Ci0Jc3RydWN0IGtyZWYgcmVmOworCXZvaWQgKCpob2xkKShzdHJ1Y3QgY2ZsYXllciAqbHlyKTsKKwl2b2lkICgqcHV0KShzdHJ1Y3QgY2ZsYXllciAqbHlyKTsKKwlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwogfTsKIAotdm9pZCBjZnNydmxfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZik7CiBzdHJ1Y3QgY2ZsYXllciAqY2Z2ZWlfY3JlYXRlKHU4IGxpbmtpZCwgc3RydWN0IGRldl9pbmZvICpkZXZfaW5mbyk7CiBzdHJ1Y3QgY2ZsYXllciAqY2ZkZ21sX2NyZWF0ZSh1OCBsaW5raWQsIHN0cnVjdCBkZXZfaW5mbyAqZGV2X2luZm8pOwogc3RydWN0IGNmbGF5ZXIgKmNmdXRpbGxfY3JlYXRlKHU4IGxpbmtpZCwgc3RydWN0IGRldl9pbmZvICpkZXZfaW5mbyk7CkBAIC0zMCw4ICszMiwxMiBAQAogc3RydWN0IGNmbGF5ZXIgKmNmcmZtbF9jcmVhdGUodTggbGlua2lkLCBzdHJ1Y3QgZGV2X2luZm8gKmRldl9pbmZvLAogCQkJCWludCBtdHVfc2l6ZSk7CiBzdHJ1Y3QgY2ZsYXllciAqY2ZkYmdsX2NyZWF0ZSh1OCBsaW5raWQsIHN0cnVjdCBkZXZfaW5mbyAqZGV2X2luZm8pOworCit2b2lkIGNmc3J2bF9jdHJsY21kKHN0cnVjdCBjZmxheWVyICpsYXlyLCBlbnVtIGNhaWZfY3RybGNtZCBjdHJsLAorCQkgICAgIGludCBwaHlpZCk7CisKIGJvb2wgY2ZzcnZsX3BoeWlkX21hdGNoKHN0cnVjdCBjZmxheWVyICpsYXllciwgaW50IHBoeWlkKTsKLXZvaWQgY2ZzZXJ2bF9kZXN0cm95KHN0cnVjdCBjZmxheWVyICpsYXllcik7CisKIHZvaWQgY2ZzcnZsX2luaXQoc3RydWN0IGNmc3J2bCAqc2VydmljZSwKIAkJCXU4IGNoYW5uZWxfaWQsCiAJCQlzdHJ1Y3QgZGV2X2luZm8gKmRldl9pbmZvLApAQCAtNDEsMjMgKzQ3LDE5IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjZnNydmxfZ2V0KHN0cnVjdCBjZmxheWVyICpsYXlyKQogewotCXN0cnVjdCBjZnNydmwgKnM7Ci0JaWYgKGxheXIgPT0gTlVMTCkKKwlzdHJ1Y3QgY2ZzcnZsICpzID0gY29udGFpbmVyX29mKGxheXIsIHN0cnVjdCBjZnNydmwsIGxheWVyKTsKKwlpZiAobGF5ciA9PSBOVUxMIHx8IGxheXItPnVwID09IE5VTEwgfHwgcy0+aG9sZCA9PSBOVUxMKQogCQlyZXR1cm47Ci0JcyA9IGNvbnRhaW5lcl9vZihsYXlyLCBzdHJ1Y3QgY2ZzcnZsLCBsYXllcik7Ci0Ja3JlZl9nZXQoJnMtPnJlZik7CisKKwlzLT5ob2xkKGxheXItPnVwKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNmc3J2bF9wdXQoc3RydWN0IGNmbGF5ZXIgKmxheXIpCiB7Ci0Jc3RydWN0IGNmc3J2bCAqczsKLQlpZiAobGF5ciA9PSBOVUxMKQorCXN0cnVjdCBjZnNydmwgKnMgPSBjb250YWluZXJfb2YobGF5ciwgc3RydWN0IGNmc3J2bCwgbGF5ZXIpOworCWlmIChsYXlyID09IE5VTEwgfHwgbGF5ci0+dXAgPT0gTlVMTCB8fCBzLT5ob2xkID09IE5VTEwpCiAJCXJldHVybjsKLQlzID0gY29udGFpbmVyX29mKGxheXIsIHN0cnVjdCBjZnNydmwsIGxheWVyKTsKIAotCVdBUk5fT04oIXMtPnJlbGVhc2UpOwotCWlmIChzLT5yZWxlYXNlKQotCQlrcmVmX3B1dCgmcy0+cmVmLCBzLT5yZWxlYXNlKTsKKwlzLT5wdXQobGF5ci0+dXApOwogfQotCiAjZW5kaWYJCQkJLyogQ0ZTUlZMX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaAppbmRleCBiMmI5ZDI4Li5iZmQ2NTU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCisrKyBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKQEAgLTM4Nyw2ICszODcsNyBAQAogICogQGxpc3Rlbl9pbnRlcnZhbDogbGlzdGVuIGludGVydmFsIG9yIC0xIGZvciBubyBjaGFuZ2UKICAqIEBhaWQ6IEFJRCBvciB6ZXJvIGZvciBubyBjaGFuZ2UKICAqIEBwbGlua19hY3Rpb246IHBsaW5rIGFjdGlvbiB0byB0YWtlCisgKiBAcGxpbmtfc3RhdGU6IHNldCB0aGUgcGVlciBsaW5rIHN0YXRlIGZvciBhIHN0YXRpb24KICAqIEBodF9jYXBhOiBIVCBjYXBhYmlsaXRpZXMgb2Ygc3RhdGlvbgogICovCiBzdHJ1Y3Qgc3RhdGlvbl9wYXJhbWV0ZXJzIHsKQEAgLTM5Nyw2ICszOTgsNyBAQAogCXUxNiBhaWQ7CiAJdTggc3VwcG9ydGVkX3JhdGVzX2xlbjsKIAl1OCBwbGlua19hY3Rpb247CisJdTggcGxpbmtfc3RhdGU7CiAJc3RydWN0IGllZWU4MDIxMV9odF9jYXAgKmh0X2NhcGE7CiB9OwogCkBAIC00MjIsNiArNDI0LDggQEAKICAqIEBTVEFUSU9OX0lORk9fUlhfRFJPUF9NSVNDOiBAcnhfZHJvcHBlZF9taXNjIGZpbGxlZAogICogQFNUQVRJT05fSU5GT19TSUdOQUxfQVZHOiBAc2lnbmFsX2F2ZyBmaWxsZWQKICAqIEBTVEFUSU9OX0lORk9fUlhfQklUUkFURTogQHJ4cmF0ZSBmaWVsZHMgYXJlIGZpbGxlZAorICogQFNUQVRJT05fSU5GT19CU1NfUEFSQU06IEBic3NfcGFyYW0gZmlsbGVkCisgKiBAU1RBVElPTl9JTkZPX0NPTk5FQ1RFRF9USU1FOiBAY29ubmVjdGVkX3RpbWUgZmlsbGVkCiAgKi8KIGVudW0gc3RhdGlvbl9pbmZvX2ZsYWdzIHsKIAlTVEFUSU9OX0lORk9fSU5BQ1RJVkVfVElNRQk9IDE8PDAsCkBAIC00MzksNiArNDQzLDggQEAKIAlTVEFUSU9OX0lORk9fUlhfRFJPUF9NSVNDCT0gMTw8MTIsCiAJU1RBVElPTl9JTkZPX1NJR05BTF9BVkcJCT0gMTw8MTMsCiAJU1RBVElPTl9JTkZPX1JYX0JJVFJBVEUJCT0gMTw8MTQsCisJU1RBVElPTl9JTkZPX0JTU19QQVJBTSAgICAgICAgICA9IDE8PDE1LAorCVNUQVRJT05fSU5GT19DT05ORUNURURfVElNRQk9IDE8PDE2CiB9OwogCiAvKioKQEAgLTQ3MywxMSArNDc5LDQzIEBACiB9OwogCiAvKioKKyAqIGVudW0gc3RhdGlvbl9pbmZvX3JhdGVfZmxhZ3MgLSBiaXRyYXRlIGluZm8gZmxhZ3MKKyAqCisgKiBVc2VkIGJ5IHRoZSBkcml2ZXIgdG8gaW5kaWNhdGUgdGhlIHNwZWNpZmljIHJhdGUgdHJhbnNtaXNzaW9uCisgKiB0eXBlIGZvciA4MDIuMTFuIHRyYW5zbWlzc2lvbnMuCisgKgorICogQEJTU19QQVJBTV9GTEFHU19DVFNfUFJPVDogd2hldGhlciBDVFMgcHJvdGVjdGlvbiBpcyBlbmFibGVkCisgKiBAQlNTX1BBUkFNX0ZMQUdTX1NIT1JUX1BSRUFNQkxFOiB3aGV0aGVyIHNob3J0IHByZWFtYmxlIGlzIGVuYWJsZWQKKyAqIEBCU1NfUEFSQU1fRkxBR1NfU0hPUlRfU0xPVF9USU1FOiB3aGV0aGVyIHNob3J0IHNsb3QgdGltZSBpcyBlbmFibGVkCisgKi8KK2VudW0gYnNzX3BhcmFtX2ZsYWdzIHsKKwlCU1NfUEFSQU1fRkxBR1NfQ1RTX1BST1QJPSAxPDwwLAorCUJTU19QQVJBTV9GTEFHU19TSE9SVF9QUkVBTUJMRQk9IDE8PDEsCisJQlNTX1BBUkFNX0ZMQUdTX1NIT1JUX1NMT1RfVElNRQk9IDE8PDIsCit9OworCisvKioKKyAqIHN0cnVjdCBzdGFfYnNzX3BhcmFtZXRlcnMgLSBCU1MgcGFyYW1ldGVycyBmb3IgdGhlIGF0dGFjaGVkIHN0YXRpb24KKyAqCisgKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudGx5IGFzc29jaWF0ZWQgQlNTCisgKgorICogQGZsYWdzOiBiaXRmbGFnIG9mIGZsYWdzIGZyb20gJmVudW0gYnNzX3BhcmFtX2ZsYWdzCisgKiBAZHRpbV9wZXJpb2Q6IERUSU0gcGVyaW9kIGZvciB0aGUgQlNTCisgKiBAYmVhY29uX2ludGVydmFsOiBiZWFjb24gaW50ZXJ2YWwKKyAqLworc3RydWN0IHN0YV9ic3NfcGFyYW1ldGVycyB7CisJdTggZmxhZ3M7CisJdTggZHRpbV9wZXJpb2Q7CisJdTE2IGJlYWNvbl9pbnRlcnZhbDsKK307CisKKy8qKgogICogc3RydWN0IHN0YXRpb25faW5mbyAtIHN0YXRpb24gaW5mb3JtYXRpb24KICAqCiAgKiBTdGF0aW9uIGluZm9ybWF0aW9uIGZpbGxlZCBieSBkcml2ZXIgZm9yIGdldF9zdGF0aW9uKCkgYW5kIGR1bXBfc3RhdGlvbi4KICAqCiAgKiBAZmlsbGVkOiBiaXRmbGFnIG9mIGZsYWdzIGZyb20gJmVudW0gc3RhdGlvbl9pbmZvX2ZsYWdzCisgKiBAY29ubmVjdGVkX3RpbWU6IHRpbWUoaW4gc2Vjcykgc2luY2UgYSBzdGF0aW9uIGlzIGxhc3QgY29ubmVjdGVkCiAgKiBAaW5hY3RpdmVfdGltZTogdGltZSBzaW5jZSBsYXN0IHN0YXRpb24gYWN0aXZpdHkgKHR4L3J4KSBpbiBtaWxsaXNlY29uZHMKICAqIEByeF9ieXRlczogYnl0ZXMgcmVjZWl2ZWQgZnJvbSB0aGlzIHN0YXRpb24KICAqIEB0eF9ieXRlczogYnl0ZXMgdHJhbnNtaXR0ZWQgdG8gdGhpcyBzdGF0aW9uCkBAIC01MDAsNiArNTM4LDcgQEAKICAqLwogc3RydWN0IHN0YXRpb25faW5mbyB7CiAJdTMyIGZpbGxlZDsKKwl1MzIgY29ubmVjdGVkX3RpbWU7CiAJdTMyIGluYWN0aXZlX3RpbWU7CiAJdTMyIHJ4X2J5dGVzOwogCXUzMiB0eF9ieXRlczsKQEAgLTUxNSw2ICs1NTQsNyBAQAogCXUzMiB0eF9yZXRyaWVzOwogCXUzMiB0eF9mYWlsZWQ7CiAJdTMyIHJ4X2Ryb3BwZWRfbWlzYzsKKwlzdHJ1Y3Qgc3RhX2Jzc19wYXJhbWV0ZXJzIGJzc19wYXJhbTsKIAogCWludCBnZW5lcmF0aW9uOwogfTsKQEAgLTY1NSw4ICs2OTUsMTAgQEAKICAqIEBtZXNoX2lkX2xlbjogbGVuZ3RoIG9mIHRoZSBtZXNoIElELCBhdCBsZWFzdCAxIGFuZCBhdCBtb3N0IDMyIGJ5dGVzCiAgKiBAcGF0aF9zZWxfcHJvdG86IHdoaWNoIHBhdGggc2VsZWN0aW9uIHByb3RvY29sIHRvIHVzZQogICogQHBhdGhfbWV0cmljOiB3aGljaCBtZXRyaWMgdG8gdXNlCi0gKiBAdmVuZG9yX2llOiB2ZW5kb3IgaW5mb3JtYXRpb24gZWxlbWVudHMgKG9wdGlvbmFsKQotICogQHZlbmRvcl9pZV9sZW46IGxlbmd0aCBvZiB2ZW5kb3IgaW5mb3JtYXRpb24gZWxlbWVudHMKKyAqIEBpZTogdmVuZG9yIGluZm9ybWF0aW9uIGVsZW1lbnRzIChvcHRpb25hbCkKKyAqIEBpZV9sZW46IGxlbmd0aCBvZiB2ZW5kb3IgaW5mb3JtYXRpb24gZWxlbWVudHMKKyAqIEBpc19hdXRoZW50aWNhdGVkOiB0aGlzIG1lc2ggcmVxdWlyZXMgYXV0aGVudGljYXRpb24KKyAqIEBpc19zZWN1cmU6IHRoaXMgbWVzaCB1c2VzIHNlY3VyaXR5CiAgKgogICogVGhlc2UgcGFyYW1ldGVycyBhcmUgZml4ZWQgd2hlbiB0aGUgbWVzaCBpcyBjcmVhdGVkLgogICovCkBAIC02NjUsOCArNzA3LDEwIEBACiAJdTggbWVzaF9pZF9sZW47CiAJdTggIHBhdGhfc2VsX3Byb3RvOwogCXU4ICBwYXRoX21ldHJpYzsKLQljb25zdCB1OCAqdmVuZG9yX2llOwotCXU4IHZlbmRvcl9pZV9sZW47CisJY29uc3QgdTggKmllOworCXU4IGllX2xlbjsKKwlib29sIGlzX2F1dGhlbnRpY2F0ZWQ7CisJYm9vbCBpc19zZWN1cmU7CiB9OwogCiAvKioKQEAgLTc1Myw2ICs3OTcsMzUgQEAKIH07CiAKIC8qKgorICogc3RydWN0IGNmZzgwMjExX3NjaGVkX3NjYW5fcmVxdWVzdCAtIHNjaGVkdWxlZCBzY2FuIHJlcXVlc3QgZGVzY3JpcHRpb24KKyAqCisgKiBAc3NpZHM6IFNTSURzIHRvIHNjYW4gZm9yIChwYXNzZWQgaW4gdGhlIHByb2JlX3JlcXMgaW4gYWN0aXZlIHNjYW5zKQorICogQG5fc3NpZHM6IG51bWJlciBvZiBTU0lEcworICogQG5fY2hhbm5lbHM6IHRvdGFsIG51bWJlciBvZiBjaGFubmVscyB0byBzY2FuCisgKiBAaW50ZXJ2YWw6IGludGVydmFsIGJldHdlZW4gZWFjaCBzY2hlZHVsZWQgc2NhbiBjeWNsZQorICogQGllOiBvcHRpb25hbCBpbmZvcm1hdGlvbiBlbGVtZW50KHMpIHRvIGFkZCBpbnRvIFByb2JlIFJlcXVlc3Qgb3IgJU5VTEwKKyAqIEBpZV9sZW46IGxlbmd0aCBvZiBpZSBpbiBvY3RldHMKKyAqIEB3aXBoeTogdGhlIHdpcGh5IHRoaXMgd2FzIGZvcgorICogQGRldjogdGhlIGludGVyZmFjZQorICogQGNoYW5uZWxzOiBjaGFubmVscyB0byBzY2FuCisgKi8KK3N0cnVjdCBjZmc4MDIxMV9zY2hlZF9zY2FuX3JlcXVlc3QgeworCXN0cnVjdCBjZmc4MDIxMV9zc2lkICpzc2lkczsKKwlpbnQgbl9zc2lkczsKKwl1MzIgbl9jaGFubmVsczsKKwl1MzIgaW50ZXJ2YWw7CisJY29uc3QgdTggKmllOworCXNpemVfdCBpZV9sZW47CisKKwkvKiBpbnRlcm5hbCAqLworCXN0cnVjdCB3aXBoeSAqd2lwaHk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKworCS8qIGtlZXAgbGFzdCAqLworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbHNbMF07Cit9OworCisvKioKICAqIGVudW0gY2ZnODAyMTFfc2lnbmFsX3R5cGUgLSBzaWduYWwgdHlwZQogICoKICAqIEBDRkc4MDIxMV9TSUdOQUxfVFlQRV9OT05FOiBubyBzaWduYWwgc3RyZW5ndGggaW5mb3JtYXRpb24gYXZhaWxhYmxlCkBAIC0xMDQ4LDYgKzExMjEsMzggQEAKIH07CiAKIC8qKgorICogc3RydWN0IGNmZzgwMjExX3dvd2xhbl90cmlnX3BrdF9wYXR0ZXJuIC0gcGFja2V0IHBhdHRlcm4KKyAqIEBtYXNrOiBiaXRtYXNrIHdoZXJlIHRvIG1hdGNoIHBhdHRlcm4gYW5kIHdoZXJlIHRvIGlnbm9yZSBieXRlcywKKyAqCW9uZSBiaXQgcGVyIGJ5dGUsIGluIHNhbWUgZm9ybWF0IGFzIG5sODAyMTEKKyAqIEBwYXR0ZXJuOiBieXRlcyB0byBtYXRjaCB3aGVyZSBiaXRtYXNrIGlzIDEKKyAqIEBwYXR0ZXJuX2xlbjogbGVuZ3RoIG9mIHBhdHRlcm4gKGluIGJ5dGVzKQorICoKKyAqIEludGVybmFsIG5vdGU6IEBtYXNrIGFuZCBAcGF0dGVybiBhcmUgYWxsb2NhdGVkIGluIG9uZSBjaHVuayBvZgorICogbWVtb3J5LCBmcmVlIEBtYXNrIG9ubHkhCisgKi8KK3N0cnVjdCBjZmc4MDIxMV93b3dsYW5fdHJpZ19wa3RfcGF0dGVybiB7CisJdTggKm1hc2ssICpwYXR0ZXJuOworCWludCBwYXR0ZXJuX2xlbjsKK307CisKKy8qKgorICogc3RydWN0IGNmZzgwMjExX3dvd2xhbiAtIFdha2Ugb24gV2lyZWxlc3MtTEFOIHN1cHBvcnQgaW5mbworICoKKyAqIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgdGhlIGVuYWJsZWQgV29XTEFOIHRyaWdnZXJzIGZvciB0aGUgZGV2aWNlLgorICogQGFueTogd2FrZSB1cCBvbiBhbnkgYWN0aXZpdHkgLS0gc3BlY2lhbCB0cmlnZ2VyIGlmIGRldmljZSBjb250aW51ZXMKKyAqCW9wZXJhdGluZyBhcyBub3JtYWwgZHVyaW5nIHN1c3BlbmQKKyAqIEBkaXNjb25uZWN0OiB3YWtlIHVwIGlmIGdldHRpbmcgZGlzY29ubmVjdGVkCisgKiBAbWFnaWNfcGt0OiB3YWtlIHVwIG9uIHJlY2VpdmluZyBtYWdpYyBwYWNrZXQKKyAqIEBwYXR0ZXJuczogd2FrZSB1cCBvbiByZWNlaXZpbmcgcGFja2V0IG1hdGNoaW5nIGEgcGF0dGVybgorICogQG5fcGF0dGVybnM6IG51bWJlciBvZiBwYXR0ZXJucworICovCitzdHJ1Y3QgY2ZnODAyMTFfd293bGFuIHsKKwlib29sIGFueSwgZGlzY29ubmVjdCwgbWFnaWNfcGt0OworCXN0cnVjdCBjZmc4MDIxMV93b3dsYW5fdHJpZ19wa3RfcGF0dGVybiAqcGF0dGVybnM7CisJaW50IG5fcGF0dGVybnM7Cit9OworCisvKioKICAqIHN0cnVjdCBjZmc4MDIxMV9vcHMgLSBiYWNrZW5kIGRlc2NyaXB0aW9uIGZvciB3aXJlbGVzcyBjb25maWd1cmF0aW9uCiAgKgogICogVGhpcyBzdHJ1Y3QgaXMgcmVnaXN0ZXJlZCBieSBmdWxsbWFjIGNhcmQgZHJpdmVycyBhbmQvb3Igd2lyZWxlc3Mgc3RhY2tzCkBAIC0xMDYwLDcgKzExNjUsOSBAQAogICogd2lyZWxlc3MgZXh0ZW5zaW9ucyBidXQgdGhpcyBpcyBzdWJqZWN0IHRvIHJlZXZhbHVhdGlvbiBhcyBzb29uIGFzIHRoaXMKICAqIGNvZGUgaXMgdXNlZCBtb3JlIHdpZGVseSBhbmQgd2UgaGF2ZSBhIGZpcnN0IHVzZXIgd2l0aG91dCB3ZXh0LgogICoKLSAqIEBzdXNwZW5kOiB3aXBoeSBkZXZpY2UgbmVlZHMgdG8gYmUgc3VzcGVuZGVkCisgKiBAc3VzcGVuZDogd2lwaHkgZGV2aWNlIG5lZWRzIHRvIGJlIHN1c3BlbmRlZC4gVGhlIHZhcmlhYmxlIEB3b3cgd2lsbAorICoJYmUgJU5VTEwgb3IgY29udGFpbiB0aGUgZW5hYmxlZCBXYWtlLW9uLVdpcmVsZXNzIHRyaWdnZXJzIHRoYXQgYXJlCisgKgljb25maWd1cmVkIGZvciB0aGUgZGV2aWNlLgogICogQHJlc3VtZTogd2lwaHkgZGV2aWNlIG5lZWRzIHRvIGJlIHJlc3VtZWQKICAqCiAgKiBAYWRkX3ZpcnR1YWxfaW50ZjogY3JlYXRlIGEgbmV3IHZpcnR1YWwgaW50ZXJmYWNlIHdpdGggdGhlIGdpdmVuIG5hbWUsCkBAIC0xMTg3LDYgKzEyOTQsMTAgQEAKICAqIEBzZXRfcG93ZXJfbWdtdDogQ29uZmlndXJlIFdMQU4gcG93ZXIgbWFuYWdlbWVudC4gQSB0aW1lb3V0IHZhbHVlIG9mIC0xCiAgKglhbGxvd3MgdGhlIGRyaXZlciB0byBhZGp1c3QgdGhlIGR5bmFtaWMgcHMgdGltZW91dCB2YWx1ZS4KICAqIEBzZXRfY3FtX3Jzc2lfY29uZmlnOiBDb25maWd1cmUgY29ubmVjdGlvbiBxdWFsaXR5IG1vbml0b3IgUlNTSSB0aHJlc2hvbGQuCisgKiBAc2NoZWRfc2Nhbl9zdGFydDogVGVsbCB0aGUgZHJpdmVyIHRvIHN0YXJ0IGEgc2NoZWR1bGVkIHNjYW4uCisgKiBAc2NoZWRfc2Nhbl9zdG9wOiBUZWxsIHRoZSBkcml2ZXIgdG8gc3RvcCBhbiBvbmdvaW5nIHNjaGVkdWxlZAorICoJc2Nhbi4gIFRoZSBkcml2ZXJfaW5pdGlhdGVkIGZsYWcgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIGRyaXZlcgorICoJaXRzZWxmIGhhcyBpbmZvcm1lZCB0aGF0IHRoZSBzY2FuIGhhcyBzdG9wcGVkLgogICoKICAqIEBtZ210X2ZyYW1lX3JlZ2lzdGVyOiBOb3RpZnkgZHJpdmVyIHRoYXQgYSBtYW5hZ2VtZW50IGZyYW1lIHR5cGUgd2FzCiAgKglyZWdpc3RlcmVkLiBOb3RlIHRoYXQgdGhpcyBjYWxsYmFjayBtYXkgbm90IHNsZWVwLCBhbmQgY2Fubm90IHJ1bgpAQCAtMTIwNCw3ICsxMzE1LDcgQEAKICAqIEBnZXRfcmluZ3BhcmFtOiBHZXQgdHggYW5kIHJ4IHJpbmcgY3VycmVudCBhbmQgbWF4aW11bSBzaXplcy4KICAqLwogc3RydWN0IGNmZzgwMjExX29wcyB7Ci0JaW50CSgqc3VzcGVuZCkoc3RydWN0IHdpcGh5ICp3aXBoeSk7CisJaW50CSgqc3VzcGVuZCkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IGNmZzgwMjExX3dvd2xhbiAqd293KTsKIAlpbnQJKCpyZXN1bWUpKHN0cnVjdCB3aXBoeSAqd2lwaHkpOwogCiAJc3RydWN0IG5ldF9kZXZpY2UgKiAoKmFkZF92aXJ0dWFsX2ludGYpKHN0cnVjdCB3aXBoeSAqd2lwaHksCkBAIC0xMzczLDYgKzE0ODQsMTEgQEAKIAlpbnQJKCpzZXRfcmluZ3BhcmFtKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCB1MzIgdHgsIHUzMiByeCk7CiAJdm9pZAkoKmdldF9yaW5ncGFyYW0pKHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQkJIHUzMiAqdHgsIHUzMiAqdHhfbWF4LCB1MzIgKnJ4LCB1MzIgKnJ4X21heCk7CisKKwlpbnQJKCpzY2hlZF9zY2FuX3N0YXJ0KShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGNmZzgwMjExX3NjaGVkX3NjYW5fcmVxdWVzdCAqcmVxdWVzdCk7CisJaW50CSgqc2NoZWRfc2Nhbl9zdG9wKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIH07CiAKIC8qCkBAIC0xNDA0LDYgKzE1MjAsMTAgQEAKICAqCWhpbnRzIHJlYWQgdGhlIGRvY3VtZW5hdGlvbiBmb3IgcmVndWxhdG9yeV9oaW50X2ZvdW5kX2JlYWNvbigpCiAgKiBAV0lQSFlfRkxBR19ORVROU19PSzogaWYgbm90IHNldCwgZG8gbm90IGFsbG93IGNoYW5naW5nIHRoZSBuZXRucyBvZiB0aGlzCiAgKgl3aXBoeSBhdCBhbGwKKyAqIEBXSVBIWV9GTEFHX0VORk9SQ0VfQ09NQklOQVRJT05TOiBTZXQgdGhpcyBmbGFnIHRvIGVuZm9yY2UgaW50ZXJmYWNlCisgKgljb21iaW5hdGlvbnMgZm9yIHRoaXMgZGV2aWNlLiBUaGlzIGZsYWcgaXMgdXNlZCBmb3IgYmFja3dhcmQKKyAqCWNvbXBhdGliaWxpdHkgb25seSB1bnRpbCBhbGwgZHJpdmVycyBhZHZlcnRpc2UgY29tYmluYXRpb25zIGFuZAorICoJdGhleSB3aWxsIGFsd2F5cyBiZSBlbmZvcmNlZC4KICAqIEBXSVBIWV9GTEFHX1BTX09OX0JZX0RFRkFVTFQ6IGlmIHNldCB0byB0cnVlLCBwb3dlcnNhdmUgd2lsbCBiZSBlbmFibGVkCiAgKglieSBkZWZhdWx0IC0tIHRoaXMgZmxhZyB3aWxsIGJlIHNldCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCdzIGRlZmF1bHQKICAqCW9uIHdpcGh5X25ldygpLCBidXQgY2FuIGJlIGNoYW5nZWQgYnkgdGhlIGRyaXZlciBpZiBpdCBoYXMgYSBnb29kCkBAIC0xNDE1LDggKzE1MzUsOSBAQAogICoJY29udHJvbCBwb3J0IHByb3RvY29sIGV0aGVydHlwZS4gVGhlIGRldmljZSBhbHNvIGhvbm91cnMgdGhlCiAgKgljb250cm9sX3BvcnRfbm9fZW5jcnlwdCBmbGFnLgogICogQFdJUEhZX0ZMQUdfSUJTU19SU046IFRoZSBkZXZpY2Ugc3VwcG9ydHMgSUJTUyBSU04uCi0gKiBAV0lQSFlfRkxBR19TVVBQT1JUU19TRVBBUkFURV9ERUZBVUxUX0tFWVM6IFRoZSBkZXZpY2Ugc3VwcG9ydHMgc2VwYXJhdGUKLSAqCXVuaWNhc3QgYW5kIG11bHRpY2FzdCBUWCBrZXlzLgorICogQFdJUEhZX0ZMQUdfTUVTSF9BVVRIOiBUaGUgZGV2aWNlIHN1cHBvcnRzIG1lc2ggYXV0aGVudGljYXRpb24gYnkgcm91dGluZworICoJYXV0aCBmcmFtZXMgdG8gdXNlcnNwYWNlLiBTZWUgQE5MODAyMTFfTUVTSF9TRVRVUF9VU0VSU1BBQ0VfQVVUSC4KKyAqIEBXSVBIWV9GTEFHX1NDSEVEX1NDQU46IFRoZSBkZXZpY2Ugc3VwcG9ydHMgc2NoZWR1bGVkIHNjYW5zLgogICovCiBlbnVtIHdpcGh5X2ZsYWdzIHsKIAlXSVBIWV9GTEFHX0NVU1RPTV9SRUdVTEFUT1JZCQk9IEJJVCgwKSwKQEAgLTE0MjgsNyArMTU0OSw4MyBAQAogCVdJUEhZX0ZMQUdfNEFERFJfU1RBVElPTgkJPSBCSVQoNiksCiAJV0lQSFlfRkxBR19DT05UUk9MX1BPUlRfUFJPVE9DT0wJPSBCSVQoNyksCiAJV0lQSFlfRkxBR19JQlNTX1JTTgkJCT0gQklUKDgpLAotCVdJUEhZX0ZMQUdfU1VQUE9SVFNfU0VQQVJBVEVfREVGQVVMVF9LRVlTPSBCSVQoOSksCisJV0lQSFlfRkxBR19NRVNIX0FVVEgJCQk9IEJJVCgxMCksCisJV0lQSFlfRkxBR19TVVBQT1JUU19TQ0hFRF9TQ0FOCQk9IEJJVCgxMSksCisJV0lQSFlfRkxBR19FTkZPUkNFX0NPTUJJTkFUSU9OUwkJPSBCSVQoMTIpLAorfTsKKworLyoqCisgKiBzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2xpbWl0IC0gbGltaXQgb24gY2VydGFpbiBpbnRlcmZhY2UgdHlwZXMKKyAqIEBtYXg6IG1heGltdW0gbnVtYmVyIG9mIGludGVyZmFjZXMgb2YgdGhlc2UgdHlwZXMKKyAqIEB0eXBlczogaW50ZXJmYWNlIHR5cGVzIChiaXRzKQorICovCitzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2xpbWl0IHsKKwl1MTYgbWF4OworCXUxNiB0eXBlczsKK307CisKKy8qKgorICogc3RydWN0IGllZWU4MDIxMV9pZmFjZV9jb21iaW5hdGlvbiAtIHBvc3NpYmxlIGludGVyZmFjZSBjb21iaW5hdGlvbgorICogQGxpbWl0czogbGltaXRzIGZvciB0aGUgZ2l2ZW4gaW50ZXJmYWNlIHR5cGVzCisgKiBAbl9saW1pdHM6IG51bWJlciBvZiBsaW1pdGF0aW9ucworICogQG51bV9kaWZmZXJlbnRfY2hhbm5lbHM6IGNhbiB1c2UgdXAgdG8gdGhpcyBtYW55IGRpZmZlcmVudCBjaGFubmVscworICogQG1heF9pbnRlcmZhY2VzOiBtYXhpbXVtIG51bWJlciBvZiBpbnRlcmZhY2VzIGluIHRvdGFsIGFsbG93ZWQgaW4gdGhpcworICoJZ3JvdXAKKyAqIEBiZWFjb25faW50X2luZnJhX21hdGNoOiBJbiB0aGlzIGNvbWJpbmF0aW9uLCB0aGUgYmVhY29uIGludGVydmFscworICoJYmV0d2VlbiBpbmZyYXN0cnVjdHVyZSBhbmQgQVAgdHlwZXMgbXVzdCBtYXRjaC4gVGhpcyBpcyByZXF1aXJlZAorICoJb25seSBpbiBzcGVjaWFsIGNhc2VzLgorICoKKyAqIFRoZXNlIGV4YW1wbGVzIGNhbiBiZSBleHByZXNzZWQgYXMgZm9sbG93czoKKyAqCisgKiBBbGxvdyAjU1RBIDw9IDEsICNBUCA8PSAxLCBtYXRjaGluZyBCSSwgY2hhbm5lbHMgPSAxLCAyIHRvdGFsOgorICoKKyAqICBzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2xpbWl0IGxpbWl0czFbXSA9IHsKKyAqCXsgLm1heCA9IDEsIC50eXBlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSwgfSwKKyAqCXsgLm1heCA9IDEsIC50eXBlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9BUH0sIH0sCisgKiAgfTsKKyAqICBzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2NvbWJpbmF0aW9uIGNvbWJpbmF0aW9uMSA9IHsKKyAqCS5saW1pdHMgPSBsaW1pdHMxLAorICoJLm5fbGltaXRzID0gQVJSQVlfU0laRShsaW1pdHMxKSwKKyAqCS5tYXhfaW50ZXJmYWNlcyA9IDIsCisgKgkuYmVhY29uX2ludF9pbmZyYV9tYXRjaCA9IHRydWUsCisgKiAgfTsKKyAqCisgKgorICogQWxsb3cgI3tBUCwgUDJQLUdPfSA8PSA4LCBjaGFubmVscyA9IDEsIDggdG90YWw6CisgKgorICogIHN0cnVjdCBpZWVlODAyMTFfaWZhY2VfbGltaXQgbGltaXRzMltdID0geworICoJeyAubWF4ID0gOCwgLnR5cGVzID0gQklUKE5MODAyMTFfSUZUWVBFX0FQKSB8CisgKgkJCSAgICAgQklUKE5MODAyMTFfSUZUWVBFX1AyUF9HTyksIH0sCisgKiAgfTsKKyAqICBzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2NvbWJpbmF0aW9uIGNvbWJpbmF0aW9uMiA9IHsKKyAqCS5saW1pdHMgPSBsaW1pdHMyLAorICoJLm5fbGltaXRzID0gQVJSQVlfU0laRShsaW1pdHMyKSwKKyAqCS5tYXhfaW50ZXJmYWNlcyA9IDgsCisgKgkubnVtX2RpZmZlcmVudF9jaGFubmVscyA9IDEsCisgKiAgfTsKKyAqCisgKgorICogQWxsb3cgI1NUQSA8PSAxLCAje1AyUC1jbGllbnQsUDJQLUdPfSA8PSAzIG9uIHR3byBjaGFubmVscywgNCB0b3RhbC4KKyAqIFRoaXMgYWxsb3dzIGZvciBhbiBpbmZyYXN0cnVjdHVyZSBjb25uZWN0aW9uIGFuZCB0aHJlZSBQMlAgY29ubmVjdGlvbnMuCisgKgorICogIHN0cnVjdCBpZWVlODAyMTFfaWZhY2VfbGltaXQgbGltaXRzM1tdID0geworICoJeyAubWF4ID0gMSwgLnR5cGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pLCB9LAorICoJeyAubWF4ID0gMywgLnR5cGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1AyUF9HTykgfAorICoJCQkgICAgIEJJVChOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UKSwgfSwKKyAqICB9OworICogIHN0cnVjdCBpZWVlODAyMTFfaWZhY2VfY29tYmluYXRpb24gY29tYmluYXRpb24zID0geworICoJLmxpbWl0cyA9IGxpbWl0czMsCisgKgkubl9saW1pdHMgPSBBUlJBWV9TSVpFKGxpbWl0czMpLAorICoJLm1heF9pbnRlcmZhY2VzID0gNCwKKyAqCS5udW1fZGlmZmVyZW50X2NoYW5uZWxzID0gMiwKKyAqICB9OworICovCitzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2NvbWJpbmF0aW9uIHsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2xpbWl0ICpsaW1pdHM7CisJdTMyIG51bV9kaWZmZXJlbnRfY2hhbm5lbHM7CisJdTE2IG1heF9pbnRlcmZhY2VzOworCXU4IG5fbGltaXRzOworCWJvb2wgYmVhY29uX2ludF9pbmZyYV9tYXRjaDsKIH07CiAKIHN0cnVjdCBtYWNfYWRkcmVzcyB7CkBAIC0xNDQwLDYgKzE2MzcsMzggQEAKIH07CiAKIC8qKgorICogZW51bSB3aXBoeV93b3dsYW5fc3VwcG9ydF9mbGFncyAtIFdvV0xBTiBzdXBwb3J0IGZsYWdzCisgKiBAV0lQSFlfV09XTEFOX0FOWTogc3VwcG9ydHMgd2FrZXVwIGZvciB0aGUgc3BlY2lhbCAiYW55IgorICoJdHJpZ2dlciB0aGF0IGtlZXBzIHRoZSBkZXZpY2Ugb3BlcmF0aW5nIGFzLWlzIGFuZAorICoJd2FrZXMgdXAgdGhlIGhvc3Qgb24gYW55IGFjdGl2aXR5LCBmb3IgZXhhbXBsZSBhCisgKglyZWNlaXZlZCBwYWNrZXQgdGhhdCBwYXNzZWQgZmlsdGVyaW5nOyBub3RlIHRoYXQgdGhlCisgKglwYWNrZXQgc2hvdWxkIGJlIHByZXNlcnZlZCBpbiB0aGF0IGNhc2UKKyAqIEBXSVBIWV9XT1dMQU5fTUFHSUNfUEtUOiBzdXBwb3J0cyB3YWtldXAgb24gbWFnaWMgcGFja2V0CisgKgkoc2VlIG5sODAyMTEuaCkKKyAqIEBXSVBIWV9XT1dMQU5fRElTQ09OTkVDVDogc3VwcG9ydHMgd2FrZXVwIG9uIGRpc2Nvbm5lY3QKKyAqLworZW51bSB3aXBoeV93b3dsYW5fc3VwcG9ydF9mbGFncyB7CisJV0lQSFlfV09XTEFOX0FOWQk9IEJJVCgwKSwKKwlXSVBIWV9XT1dMQU5fTUFHSUNfUEtUCT0gQklUKDEpLAorCVdJUEhZX1dPV0xBTl9ESVNDT05ORUNUCT0gQklUKDIpLAorfTsKKworLyoqCisgKiBzdHJ1Y3Qgd2lwaHlfd293bGFuX3N1cHBvcnQgLSBXb1dMQU4gc3VwcG9ydCBkYXRhCisgKiBAZmxhZ3M6IHNlZSAmZW51bSB3aXBoeV93b3dsYW5fc3VwcG9ydF9mbGFncworICogQG5fcGF0dGVybnM6IG51bWJlciBvZiBzdXBwb3J0ZWQgd2FrZXVwIHBhdHRlcm5zCisgKgkoc2VlIG5sODAyMTEuaCBmb3IgdGhlIHBhdHRlcm4gZGVmaW5pdGlvbikKKyAqIEBwYXR0ZXJuX21heF9sZW46IG1heGltdW0gbGVuZ3RoIG9mIGVhY2ggcGF0dGVybgorICogQHBhdHRlcm5fbWluX2xlbjogbWluaW11bSBsZW5ndGggb2YgZWFjaCBwYXR0ZXJuCisgKi8KK3N0cnVjdCB3aXBoeV93b3dsYW5fc3VwcG9ydCB7CisJdTMyIGZsYWdzOworCWludCBuX3BhdHRlcm5zOworCWludCBwYXR0ZXJuX21heF9sZW47CisJaW50IHBhdHRlcm5fbWluX2xlbjsKK307CisKKy8qKgogICogc3RydWN0IHdpcGh5IC0gd2lyZWxlc3MgaGFyZHdhcmUgZGVzY3JpcHRpb24KICAqIEByZWdfbm90aWZpZXI6IHRoZSBkcml2ZXIncyByZWd1bGF0b3J5IG5vdGlmaWNhdGlvbiBjYWxsYmFjaywKICAqCW5vdGUgdGhhdCBpZiB5b3VyIGRyaXZlciB1c2VzIHdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KCkKQEAgLTE0NzYsNiArMTcwNSwxMSBAQAogICogQHByaXY6IGRyaXZlciBwcml2YXRlIGRhdGEgKHNpemVkIGFjY29yZGluZyB0byB3aXBoeV9uZXcoKSBwYXJhbWV0ZXIpCiAgKiBAaW50ZXJmYWNlX21vZGVzOiBiaXRtYXNrIG9mIGludGVyZmFjZXMgdHlwZXMgdmFsaWQgZm9yIHRoaXMgd2lwaHksCiAgKgltdXN0IGJlIHNldCBieSBkcml2ZXIKKyAqIEBpZmFjZV9jb21iaW5hdGlvbnM6IFZhbGlkIGludGVyZmFjZSBjb21iaW5hdGlvbnMgYXJyYXksIHNob3VsZCBub3QKKyAqCWxpc3Qgc2luZ2xlIGludGVyZmFjZSB0eXBlcy4KKyAqIEBuX2lmYWNlX2NvbWJpbmF0aW9uczogbnVtYmVyIG9mIGVudHJpZXMgaW4gQGlmYWNlX2NvbWJpbmF0aW9ucyBhcnJheS4KKyAqIEBzb2Z0d2FyZV9pZnR5cGVzOiBiaXRtYXNrIG9mIHNvZnR3YXJlIGludGVyZmFjZSB0eXBlcywgdGhlc2UgYXJlIG5vdAorICoJc3ViamVjdCB0byBhbnkgcmVzdHJpY3Rpb25zIHNpbmNlIHRoZXkgYXJlIHB1cmVseSBtYW5hZ2VkIGluIFNXLgogICogQGZsYWdzOiB3aXBoeSBmbGFncywgc2VlICZlbnVtIHdpcGh5X2ZsYWdzCiAgKiBAYnNzX3ByaXZfc2l6ZTogZWFjaCBCU1Mgc3RydWN0IGhhcyBwcml2YXRlIGRhdGEgYWxsb2NhdGVkIHdpdGggaXQsCiAgKgl0aGlzIHZhcmlhYmxlIGRldGVybWluZXMgaXRzIHNpemUKQEAgLTE1MDYsNiArMTc0MCw4IEBACiAgKgogICogQG1heF9yZW1haW5fb25fY2hhbm5lbF9kdXJhdGlvbjogTWF4aW11bSB0aW1lIGEgcmVtYWluLW9uLWNoYW5uZWwgb3BlcmF0aW9uCiAgKgltYXkgcmVxdWVzdCwgaWYgaW1wbGVtZW50ZWQuCisgKgorICogQHdvd2xhbjogV29XTEFOIHN1cHBvcnQgaW5mb3JtYXRpb24KICAqLwogc3RydWN0IHdpcGh5IHsKIAkvKiBhc3NpZ24gdGhlc2UgZmllbGRzIGJlZm9yZSB5b3UgcmVnaXN0ZXIgdGhlIHdpcGh5ICovCkBAIC0xNTE4LDYgKzE3NTQsMTAgQEAKIAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhyeF9zdHlwZXMgKm1nbXRfc3R5cGVzOwogCisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9pZmFjZV9jb21iaW5hdGlvbiAqaWZhY2VfY29tYmluYXRpb25zOworCWludCBuX2lmYWNlX2NvbWJpbmF0aW9uczsKKwl1MTYgc29mdHdhcmVfaWZ0eXBlczsKKwogCXUxNiBuX2FkZHJlc3NlczsKIAogCS8qIFN1cHBvcnRlZCBpbnRlcmZhY2UgbW9kZXMsIE9SIHRvZ2V0aGVyIEJJVChOTDgwMjExX0lGVFlQRV8uLi4pICovCkBAIC0xNTQzLDYgKzE3ODMsOCBAQAogCWNoYXIgZndfdmVyc2lvbltFVEhUT09MX0JVU0lORk9fTEVOXTsKIAl1MzIgaHdfdmVyc2lvbjsKIAorCXN0cnVjdCB3aXBoeV93b3dsYW5fc3VwcG9ydCB3b3dsYW47CisKIAl1MTYgbWF4X3JlbWFpbl9vbl9jaGFubmVsX2R1cmF0aW9uOwogCiAJdTggbWF4X251bV9wbWtpZHM7CkBAIC0xNzI2LDYgKzE5NjgsOCBAQAogICogQG1nbXRfcmVnaXN0cmF0aW9uc19sb2NrOiBsb2NrIGZvciB0aGUgbGlzdAogICogQG10eDogbXV0ZXggdXNlZCB0byBsb2NrIGRhdGEgaW4gdGhpcyBzdHJ1Y3QKICAqIEBjbGVhbnVwX3dvcms6IHdvcmsgc3RydWN0IHVzZWQgZm9yIGNsZWFudXAgdGhhdCBjYW4ndCBiZSBkb25lIGRpcmVjdGx5CisgKiBAYmVhY29uX2ludGVydmFsOiBiZWFjb24gaW50ZXJ2YWwgdXNlZCBvbiB0aGlzIGRldmljZSBmb3IgdHJhbnNtaXR0aW5nCisgKgliZWFjb25zLCAwIHdoZW4gbm90IHZhbGlkCiAgKi8KIHN0cnVjdCB3aXJlbGVzc19kZXYgewogCXN0cnVjdCB3aXBoeSAqd2lwaHk7CkBAIC0xNzY2LDYgKzIwMTAsOCBAQAogCWJvb2wgcHM7CiAJaW50IHBzX3RpbWVvdXQ7CiAKKwlpbnQgYmVhY29uX2ludGVydmFsOworCiAjaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFQKIAkvKiB3ZXh0IGRhdGEgKi8KIAlzdHJ1Y3QgewpAQCAtMTk5MSwxMCArMjIzNywxMiBAQAogICogQGFkZHI6IFRoZSBkZXZpY2UgTUFDIGFkZHJlc3MuCiAgKiBAaWZ0eXBlOiBUaGUgZGV2aWNlIGludGVyZmFjZSB0eXBlLgogICogQGV4dHJhX2hlYWRyb29tOiBUaGUgaGFyZHdhcmUgZXh0cmEgaGVhZHJvb20gZm9yIFNLQnMgaW4gdGhlIEBsaXN0LgorICogQGhhc184MDIxMV9oZWFkZXI6IFNldCBpdCB0cnVlIGlmIFNLQiBpcyB3aXRoIElFRUUgODAyLjExIGhlYWRlci4KICAqLwogdm9pZCBpZWVlODAyMTFfYW1zZHVfdG9fODAyM3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwKIAkJCSAgICAgIGNvbnN0IHU4ICphZGRyLCBlbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZSwKLQkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBleHRyYV9oZWFkcm9vbSk7CisJCQkgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgZXh0cmFfaGVhZHJvb20sCisJCQkgICAgICBib29sIGhhc184MDIxMV9oZWFkZXIpOwogCiAvKioKICAqIGNmZzgwMjExX2NsYXNzaWZ5ODAyMWQgLSBkZXRlcm1pbmUgdGhlIDgwMi4xcC8xZCB0YWcgZm9yIGEgZGF0YSBmcmFtZQpAQCAtMjIxNCw2ICsyNDYyLDI0IEBACiB2b2lkIGNmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXF1ZXN0LCBib29sIGFib3J0ZWQpOwogCiAvKioKKyAqIGNmZzgwMjExX3NjaGVkX3NjYW5fcmVzdWx0cyAtIG5vdGlmeSB0aGF0IG5ldyBzY2FuIHJlc3VsdHMgYXJlIGF2YWlsYWJsZQorICoKKyAqIEB3aXBoeTogdGhlIHdpcGh5IHdoaWNoIGdvdCBzY2hlZHVsZWQgc2NhbiByZXN1bHRzCisgKi8KK3ZvaWQgY2ZnODAyMTFfc2NoZWRfc2Nhbl9yZXN1bHRzKHN0cnVjdCB3aXBoeSAqd2lwaHkpOworCisvKioKKyAqIGNmZzgwMjExX3NjaGVkX3NjYW5fc3RvcHBlZCAtIG5vdGlmeSB0aGF0IHRoZSBzY2hlZHVsZWQgc2NhbiBoYXMgc3RvcHBlZAorICoKKyAqIEB3aXBoeTogdGhlIHdpcGh5IG9uIHdoaWNoIHRoZSBzY2hlZHVsZWQgc2NhbiBzdG9wcGVkCisgKgorICogVGhlIGRyaXZlciBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGluZm9ybSBjZmc4MDIxMSB0aGF0IHRoZQorICogc2NoZWR1bGVkIHNjYW4gaGFkIHRvIGJlIHN0b3BwZWQsIGZvciB3aGF0ZXZlciByZWFzb24uICBUaGUgZHJpdmVyCisgKiBpcyB0aGVuIGNhbGxlZCBiYWNrIHZpYSB0aGUgc2NoZWRfc2Nhbl9zdG9wIG9wZXJhdGlvbiB3aGVuIGRvbmUuCisgKi8KK3ZvaWQgY2ZnODAyMTFfc2NoZWRfc2Nhbl9zdG9wcGVkKHN0cnVjdCB3aXBoeSAqd2lwaHkpOworCisvKioKICAqIGNmZzgwMjExX2luZm9ybV9ic3NfZnJhbWUgLSBpbmZvcm0gY2ZnODAyMTEgb2YgYSByZWNlaXZlZCBCU1MgZnJhbWUKICAqCiAgKiBAd2lwaHk6IHRoZSB3aXBoeSByZXBvcnRpbmcgdGhlIEJTUwpAQCAtMjQ1MCw2ICsyNzE2LDIyIEBACiB2b2lkIGNmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCwgZ2ZwX3QgZ2ZwKTsKIAogLyoqCisgKiBjZmc4MDIxMV9ub3RpZnlfbmV3X2NhbmRpZGF0ZSAtIG5vdGlmeSBjZmc4MDIxMSBvZiBhIG5ldyBtZXNoIHBlZXIgY2FuZGlkYXRlCisgKgorICogQGRldjogbmV0d29yayBkZXZpY2UKKyAqIEBtYWNhZGRyOiB0aGUgTUFDIGFkZHJlc3Mgb2YgdGhlIG5ldyBjYW5kaWRhdGUKKyAqIEBpZTogaW5mb3JtYXRpb24gZWxlbWVudHMgYWR2ZXJ0aXNlZCBieSB0aGUgcGVlciBjYW5kaWRhdGUKKyAqIEBpZV9sZW46IGxlbmdodCBvZiB0aGUgaW5mb3JtYXRpb24gZWxlbWVudHMgYnVmZmVyCisgKiBAZ2ZwOiBhbGxvY2F0aW9uIGZsYWdzCisgKgorICogVGhpcyBmdW5jdGlvbiBub3RpZmllcyBjZmc4MDIxMSB0aGF0IHRoZSBtZXNoIHBlZXIgY2FuZGlkYXRlIGhhcyBiZWVuCisgKiBkZXRlY3RlZCwgbW9zdCBsaWtlbHkgdmlhIGEgYmVhY29uIG9yLCBsZXNzIGxpa2VseSwgdmlhIGEgcHJvYmUgcmVzcG9uc2UuCisgKiBjZmc4MDIxMSB0aGVuIHNlbmRzIGEgbm90aWZpY2F0aW9uIHRvIHVzZXJzcGFjZS4KKyAqLwordm9pZCBjZmc4MDIxMV9ub3RpZnlfbmV3X3BlZXJfY2FuZGlkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCWNvbnN0IHU4ICptYWNhZGRyLCBjb25zdCB1OCAqaWUsIHU4IGllX2xlbiwgZ2ZwX3QgZ2ZwKTsKKworLyoqCiAgKiBET0M6IFJGa2lsbCBpbnRlZ3JhdGlvbgogICoKICAqIFJGa2lsbCBpbnRlZ3JhdGlvbiBpbiBjZmc4MDIxMSBpcyBhbG1vc3QgaW52aXNpYmxlIHRvIGRyaXZlcnMsCkBAIC0yNjY3LDYgKzI5NDksMTUgQEAKIAkJICAgICAgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8sIGdmcF90IGdmcCk7CiAKIC8qKgorICogY2ZnODAyMTFfZGVsX3N0YSAtIG5vdGlmeSB1c2Vyc3BhY2UgYWJvdXQgZGVsZXRpb24gb2YgYSBzdGF0aW9uCisgKgorICogQGRldjogdGhlIG5ldGRldgorICogQG1hY19hZGRyOiB0aGUgc3RhdGlvbidzIGFkZHJlc3MKKyAqIEBnZnA6IGFsbG9jYXRpb24gZmxhZ3MKKyAqLwordm9pZCBjZmc4MDIxMV9kZWxfc3RhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICptYWNfYWRkciwgZ2ZwX3QgZ2ZwKTsKKworLyoqCiAgKiBjZmc4MDIxMV9yeF9tZ210IC0gbm90aWZpY2F0aW9uIG9mIHJlY2VpdmVkLCB1bnByb2Nlc3NlZCBtYW5hZ2VtZW50IGZyYW1lCiAgKiBAZGV2OiBuZXR3b3JrIGRldmljZQogICogQGZyZXE6IEZyZXF1ZW5jeSBvbiB3aGljaCB0aGUgZnJhbWUgd2FzIHJlY2VpdmVkIGluIE1IegpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY29tcGF0LmggYi9pbmNsdWRlL25ldC9jb21wYXQuaAppbmRleCAyOGQ1NDI4Li45ZWU3NWVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jb21wYXQuaAorKysgYi9pbmNsdWRlL25ldC9jb21wYXQuaApAQCAtNDMsNiArNDMsOCBAQAogZXh0ZXJuIGludCBnZXRfY29tcGF0X21zZ2hkcihzdHJ1Y3QgbXNnaGRyICosIHN0cnVjdCBjb21wYXRfbXNnaGRyIF9fdXNlciAqKTsKIGV4dGVybiBpbnQgdmVyaWZ5X2NvbXBhdF9pb3ZlYyhzdHJ1Y3QgbXNnaGRyICosIHN0cnVjdCBpb3ZlYyAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwgaW50KTsKIGV4dGVybiBhc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19zZW5kbXNnKGludCxzdHJ1Y3QgY29tcGF0X21zZ2hkciBfX3VzZXIgKix1bnNpZ25lZCk7CitleHRlcm4gYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfc2VuZG1tc2coaW50LCBzdHJ1Y3QgY29tcGF0X21tc2doZHIgX191c2VyICosCisJCQkJCSAgIHVuc2lnbmVkLCB1bnNpZ25lZCk7CiBleHRlcm4gYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfcmVjdm1zZyhpbnQsc3RydWN0IGNvbXBhdF9tc2doZHIgX191c2VyICosdW5zaWduZWQpOwogZXh0ZXJuIGFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3JlY3ZtbXNnKGludCwgc3RydWN0IGNvbXBhdF9tbXNnaGRyIF9fdXNlciAqLAogCQkJCQkgICB1bnNpZ25lZCwgdW5zaWduZWQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc3QuaCBiL2luY2x1ZGUvbmV0L2RzdC5oCmluZGV4IDc1Yjk1ZGYuLjA3YTA0MDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2RzdC5oCisrKyBiL2luY2x1ZGUvbmV0L2RzdC5oCkBAIC0xNiwxMyArMTYsNiBAQAogI2luY2x1ZGUgPG5ldC9uZWlnaGJvdXIuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKLS8qCi0gKiAwIC0gbm8gZGVidWdnaW5nIG1lc3NhZ2VzCi0gKiAxIC0gcmFyZSBldmVudHMgYW5kIGJ1Z3MgKGRlZmF1bHQpCi0gKiAyIC0gdHJhY2UgbW9kZS4KLSAqLwotI2RlZmluZSBSVF9DQUNIRV9ERUJVRwkJMAotCiAjZGVmaW5lIERTVF9HQ19NSU4JKEhaLzEwKQogI2RlZmluZSBEU1RfR0NfSU5DCShIWi8yKQogI2RlZmluZSBEU1RfR0NfTUFYCSgxMjAqSFopCkBAIC05Miw4ICs4NSw2IEBACiAJfTsKIH07CiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0KIGV4dGVybiB1MzIgKmRzdF9jb3dfbWV0cmljc19nZW5lcmljKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgdW5zaWduZWQgbG9uZyBvbGQpOwogZXh0ZXJuIGNvbnN0IHUzMiBkc3RfZGVmYXVsdF9tZXRyaWNzW1JUQVhfTUFYXTsKIApAQCAtMzUyLDcgKzM0Myw4IEBACiB9CiAKIGV4dGVybiBpbnQgZHN0X2Rpc2NhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1leHRlcm4gdm9pZCAqZHN0X2FsbG9jKHN0cnVjdCBkc3Rfb3BzICogb3BzLCBpbnQgaW5pdGlhbF9yZWYpOworZXh0ZXJuIHZvaWQgKmRzdF9hbGxvYyhzdHJ1Y3QgZHN0X29wcyAqIG9wcywgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICAgIGludCBpbml0aWFsX3JlZiwgaW50IGluaXRpYWxfb2Jzb2xldGUsIGludCBmbGFncyk7CiBleHRlcm4gdm9pZCBfX2RzdF9mcmVlKHN0cnVjdCBkc3RfZW50cnkgKiBkc3QpOwogZXh0ZXJuIHN0cnVjdCBkc3RfZW50cnkgKmRzdF9kZXN0cm95KHN0cnVjdCBkc3RfZW50cnkgKiBkc3QpOwogCkBAIC00MzgsNiArNDMwLDUgQEAKIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBmbG93aSAqZmwsIHN0cnVjdCBzb2NrICpzaywKIAkJCQkgICAgIGludCBmbGFncyk7CiAjZW5kaWYKLSNlbmRpZgogCiAjZW5kaWYgLyogX05FVF9EU1RfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZmxvdy5oIGIvaW5jbHVkZS9uZXQvZmxvdy5oCmluZGV4IDdmZTVhMGYuLmM2ZDVmZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2Zsb3cuaAorKysgYi9pbmNsdWRlL25ldC9mbG93LmgKQEAgLTI2LDggKzI2LDggQEAKIAogdW5pb24gZmxvd2lfdWxpIHsKIAlzdHJ1Y3QgewotCQlfX2JlMTYJc3BvcnQ7CiAJCV9fYmUxNglkcG9ydDsKKwkJX19iZTE2CXNwb3J0OwogCX0gcG9ydHM7CiAKIAlzdHJ1Y3QgewpAQCAtMzYsOCArMzYsOCBAQAogCX0gaWNtcHQ7CiAKIAlzdHJ1Y3QgewotCQlfX2xlMTYJc3BvcnQ7CiAJCV9fbGUxNglkcG9ydDsKKwkJX19sZTE2CXNwb3J0OwogCX0gZG5wb3J0czsKIAogCV9fYmUzMgkJc3BpOwpAQCAtNzAsNiArNzAsMjcgQEAKICNkZWZpbmUgZmw0X2dyZV9rZXkJCXVsaS5ncmVfa2V5CiB9OwogCitzdGF0aWMgaW5saW5lIHZvaWQgZmxvd2k0X2luaXRfb3V0cHV0KHN0cnVjdCBmbG93aTQgKmZsNCwgaW50IG9pZiwKKwkJCQkgICAgICBfX3UzMiBtYXJrLCBfX3U4IHRvcywgX191OCBzY29wZSwKKwkJCQkgICAgICBfX3U4IHByb3RvLCBfX3U4IGZsYWdzLAorCQkJCSAgICAgIF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLAorCQkJCSAgICAgIF9fYmUxNiBkcG9ydCwgX19iZTMyIHNwb3J0KQoreworCWZsNC0+Zmxvd2k0X29pZiA9IG9pZjsKKwlmbDQtPmZsb3dpNF9paWYgPSAwOworCWZsNC0+Zmxvd2k0X21hcmsgPSBtYXJrOworCWZsNC0+Zmxvd2k0X3RvcyA9IHRvczsKKwlmbDQtPmZsb3dpNF9zY29wZSA9IHNjb3BlOworCWZsNC0+Zmxvd2k0X3Byb3RvID0gcHJvdG87CisJZmw0LT5mbG93aTRfZmxhZ3MgPSBmbGFnczsKKwlmbDQtPmZsb3dpNF9zZWNpZCA9IDA7CisJZmw0LT5kYWRkciA9IGRhZGRyOworCWZsNC0+c2FkZHIgPSBzYWRkcjsKKwlmbDQtPmZsNF9kcG9ydCA9IGRwb3J0OworCWZsNC0+Zmw0X3Nwb3J0ID0gc3BvcnQ7Cit9CisJCQkJICAgICAgCisKIHN0cnVjdCBmbG93aTYgewogCXN0cnVjdCBmbG93aV9jb21tb24JX19mbF9jb21tb247CiAjZGVmaW5lIGZsb3dpNl9vaWYJCV9fZmxfY29tbW9uLmZsb3dpY19vaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2dhcnAuaCBiL2luY2x1ZGUvbmV0L2dhcnAuaAppbmRleCBmNGMyOTU5Li44MzRkOGFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9nYXJwLmgKKysrIGIvaW5jbHVkZS9uZXQvZ2FycC5oCkBAIC0xMDQsMTAgKzEwNCwxMiBAQAogCXN0cnVjdCBza19idWZmX2hlYWQJcXVldWU7CiAJc3RydWN0IHNrX2J1ZmYJCSpwZHU7CiAJc3RydWN0IHJiX3Jvb3QJCWdpZDsKKwlzdHJ1Y3QgcmN1X2hlYWQJCXJjdTsKIH07CiAKIHN0cnVjdCBnYXJwX3BvcnQgewogCXN0cnVjdCBnYXJwX2FwcGxpY2FudCBfX3JjdQkqYXBwbGljYW50c1tHQVJQX0FQUExJQ0FUSU9OX01BWCArIDFdOworCXN0cnVjdCByY3VfaGVhZAkJCXJjdTsKIH07CiAKIGV4dGVybiBpbnQJZ2FycF9yZWdpc3Rlcl9hcHBsaWNhdGlvbihzdHJ1Y3QgZ2FycF9hcHBsaWNhdGlvbiAqYXBwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lmX2luZXQ2LmggYi9pbmNsdWRlL25ldC9pZl9pbmV0Ni5oCmluZGV4IGZjY2MyMTguLjExY2YzNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lmX2luZXQ2LmgKKysrIGIvaW5jbHVkZS9uZXQvaWZfaW5ldDYuaApAQCAtMzAsOCArMzAsNiBAQAogI2RlZmluZSBJRl9QUkVGSVhfT05MSU5LCTB4MDEKICNkZWZpbmUgSUZfUFJFRklYX0FVVE9DT05GCTB4MDIKIAotI2lmZGVmIF9fS0VSTkVMX18KLQogZW51bSB7CiAJSU5FVDZfSUZBRERSX1NUQVRFX0RBRCwKIAlJTkVUNl9JRkFERFJfU1RBVEVfUE9TVERBRCwKQEAgLTE1Niw4ICsxNTQsOCBAQAogc3RydWN0IGlwdjZfZGV2c3RhdCB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5CSpwcm9jX2Rpcl9lbnRyeTsKIAlERUZJTkVfU05NUF9TVEFUKHN0cnVjdCBpcHN0YXRzX21pYiwgaXB2Nik7Ci0JREVGSU5FX1NOTVBfU1RBVChzdHJ1Y3QgaWNtcHY2X21pYiwgaWNtcHY2KTsKLQlERUZJTkVfU05NUF9TVEFUKHN0cnVjdCBpY21wdjZtc2dfbWliLCBpY21wdjZtc2cpOworCURFRklORV9TTk1QX1NUQVRfQVRPTUlDKHN0cnVjdCBpY21wdjZfbWliX2RldmljZSwgaWNtcHY2ZGV2KTsKKwlERUZJTkVfU05NUF9TVEFUX0FUT01JQyhzdHJ1Y3QgaWNtcHY2bXNnX21pYl9kZXZpY2UsIGljbXB2Nm1zZ2Rldik7CiB9OwogCiBzdHJ1Y3QgaW5ldDZfZGV2IHsKQEAgLTE5Niw3ICsxOTQsNyBAQAogCXN0cnVjdCByY3VfaGVhZAkJcmN1OwogfTsKIAotc3RhdGljIGlubGluZSB2b2lkIGlwdjZfZXRoX21jX21hcChzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIGNoYXIgKmJ1ZikKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcHY2X2V0aF9tY19tYXAoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLCBjaGFyICpidWYpCiB7CiAJLyoKIAkgKgkrLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCkBAIC0yMTAsNyArMjA4LDcgQEAKIAltZW1jcHkoYnVmICsgMiwgJmFkZHItPnM2X2FkZHIzMlszXSwgc2l6ZW9mKF9fdTMyKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpcHY2X3RyX21jX21hcChzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIGNoYXIgKmJ1ZikKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcHY2X3RyX21jX21hcChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIGNoYXIgKmJ1ZikKIHsKIAkvKiBBbGwgbm9kZXMgRkYwMTo6MSwgRkYwMjo6MSwgRkYwMjo6MTpGRnh4Onh4eHggKi8KIApAQCAtMzAzLDQgKzMwMSwzIEBACiB9CiAKICNlbmRpZgotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0Nl9jb25uZWN0aW9uX3NvY2suaCBiL2luY2x1ZGUvbmV0L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5oCmluZGV4IGZmMDEzNTAuLjMyMDdlNTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5oCkBAIC00MSw1ICs0MSw1IEBACiAKIGV4dGVybiB2b2lkIGluZXQ2X2Nza19hZGRyMnNvY2thZGRyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyICp1YWRkcik7CiAKLWV4dGVybiBpbnQgaW5ldDZfY3NrX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IGluZXQ2X2Nza194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmbG93aSAqZmwpOwogI2VuZGlmIC8qIF9JTkVUNl9DT05ORUNUSU9OX1NPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaCBiL2luY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmgKaW5kZXggNmFjNGUzYi4uZTZkYjYyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oCkBAIC0zNiw3ICszNiw3IEBACiAgKiAoaS5lLiB0aGluZ3MgdGhhdCBkZXBlbmQgb24gdGhlIGFkZHJlc3MgZmFtaWx5KQogICovCiBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIHsKLQlpbnQJICAgICgqcXVldWVfeG1pdCkoc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJaW50CSAgICAoKnF1ZXVlX3htaXQpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmbG93aSAqZmwpOwogCXZvaWQJICAgICgqc2VuZF9jaGVjaykoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAlpbnQJICAgICgqcmVidWlsZF9oZWFkZXIpKHN0cnVjdCBzb2NrICpzayk7CiAJaW50CSAgICAoKmNvbm5fcmVxdWVzdCkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKQEAgLTI0OSw3ICsyNDksMTEgQEAKIGV4dGVybiBpbnQgaW5ldF9jc2tfZ2V0X3BvcnQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBzbnVtKTsKIAogZXh0ZXJuIHN0cnVjdCBkc3RfZW50cnkqIGluZXRfY3NrX3JvdXRlX3JlcShzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCSAgICBzdHJ1Y3QgZmxvd2k0ICpmbDQsCiAJCQkJCSAgICBjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpOworZXh0ZXJuIHN0cnVjdCBkc3RfZW50cnkqIGluZXRfY3NrX3JvdXRlX2NoaWxkX3NvY2soc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJICAgc3RydWN0IHNvY2sgKm5ld3NrLAorCQkJCQkJICAgY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGluZXRfY3NrX3JlcXNrX3F1ZXVlX2FkZChzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0X2Vjbi5oIGIvaW5jbHVkZS9uZXQvaW5ldF9lY24uaAppbmRleCA4OGJkZDAxLi4yZmE4ZDEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0X2Vjbi5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXRfZWNuLmgKQEAgLTM4LDkgKzM4LDE5IEBACiAJcmV0dXJuIG91dGVyOwogfQogCi0jZGVmaW5lCUlORVRfRUNOX3htaXQoc2spIGRvIHsgaW5ldF9zayhzayktPnRvcyB8PSBJTkVUX0VDTl9FQ1RfMDsgfSB3aGlsZSAoMCkKLSNkZWZpbmUJSU5FVF9FQ05fZG9udHhtaXQoc2spIFwKLQlkbyB7IGluZXRfc2soc2spLT50b3MgJj0gfklORVRfRUNOX01BU0s7IH0gd2hpbGUgKDApCitzdGF0aWMgaW5saW5lIHZvaWQgSU5FVF9FQ05feG1pdChzdHJ1Y3Qgc29jayAqc2spCit7CisJaW5ldF9zayhzayktPnRvcyB8PSBJTkVUX0VDTl9FQ1RfMDsKKwlpZiAoaW5ldDZfc2soc2spICE9IE5VTEwpCisJCWluZXQ2X3NrKHNrKS0+dGNsYXNzIHw9IElORVRfRUNOX0VDVF8wOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgSU5FVF9FQ05fZG9udHhtaXQoc3RydWN0IHNvY2sgKnNrKQoreworCWluZXRfc2soc2spLT50b3MgJj0gfklORVRfRUNOX01BU0s7CisJaWYgKGluZXQ2X3NrKHNrKSAhPSBOVUxMKQorCQlpbmV0Nl9zayhzayktPnRjbGFzcyAmPSB+SU5FVF9FQ05fTUFTSzsKK30KIAogI2RlZmluZSBJUDZfRUNOX2Zsb3dfaW5pdChsYWJlbCkgZG8gewkJXAogICAgICAgKGxhYmVsKSAmPSB+aHRvbmwoSU5FVF9FQ05fTUFTSyA8PCAyMCk7CVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfc29jay5oIGIvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKaW5kZXggN2EzNzM2OS4uY2FhZmY1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKQEAgLTU3LDcgKzU3LDE1IEBACiAJdW5zaWduZWQgY2hhcglfX2RhdGFbMF07CiB9OwogCi0jZGVmaW5lIG9wdGxlbmd0aChvcHQpIChzaXplb2Yoc3RydWN0IGlwX29wdGlvbnMpICsgb3B0LT5vcHRsZW4pCitzdHJ1Y3QgaXBfb3B0aW9uc19yY3UgeworCXN0cnVjdCByY3VfaGVhZCByY3U7CisJc3RydWN0IGlwX29wdGlvbnMgb3B0OworfTsKKworc3RydWN0IGlwX29wdGlvbnNfZGF0YSB7CisJc3RydWN0IGlwX29wdGlvbnNfcmN1CW9wdDsKKwljaGFyCQkJZGF0YVs0MF07Cit9OwogCiBzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgewogCXN0cnVjdCByZXF1ZXN0X3NvY2sJcmVxOwpAQCAtNzgsNyArODYsNyBAQAogCQkJCWFja2VkCSAgIDogMSwKIAkJCQlub19zcmNjaGVjazogMTsKIAlrbWVtY2hlY2tfYml0ZmllbGRfZW5kKGZsYWdzKTsKLQlzdHJ1Y3QgaXBfb3B0aW9ucwkqb3B0OworCXN0cnVjdCBpcF9vcHRpb25zX3JjdQkqb3B0OwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgKmluZXRfcnNrKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnNrKQpAQCAtODgsMTcgKzk2LDIxIEBACiAKIHN0cnVjdCBpbmV0X2NvcmsgewogCXVuc2lnbmVkIGludAkJZmxhZ3M7Ci0JdW5zaWduZWQgaW50CQlmcmFnc2l6ZTsKKwlfX2JlMzIJCQlhZGRyOwogCXN0cnVjdCBpcF9vcHRpb25zCSpvcHQ7CisJdW5zaWduZWQgaW50CQlmcmFnc2l6ZTsKIAlzdHJ1Y3QgZHN0X2VudHJ5CSpkc3Q7CiAJaW50CQkJbGVuZ3RoOyAvKiBUb3RhbCBsZW5ndGggb2YgYWxsIGZyYW1lcyAqLwotCV9fYmUzMgkJCWFkZHI7Ci0Jc3RydWN0IGZsb3dpCQlmbDsKIAlzdHJ1Y3QgcGFnZQkJKnBhZ2U7CiAJdTMyCQkJb2ZmOwogCXU4CQkJdHhfZmxhZ3M7CiB9OwogCitzdHJ1Y3QgaW5ldF9jb3JrX2Z1bGwgeworCXN0cnVjdCBpbmV0X2NvcmsJYmFzZTsKKwlzdHJ1Y3QgZmxvd2kJCWZsOworfTsKKwogc3RydWN0IGlwX21jX3NvY2tsaXN0Owogc3RydWN0IGlwdjZfcGluZm87CiBzdHJ1Y3QgcnRhYmxlOwpAQCAtMTQwLDcgKzE1Miw3IEBACiAJX19iZTE2CQkJaW5ldF9zcG9ydDsKIAlfX3UxNgkJCWluZXRfaWQ7CiAKLQlzdHJ1Y3QgaXBfb3B0aW9ucwkqb3B0OworCXN0cnVjdCBpcF9vcHRpb25zX3JjdSBfX3JjdQkqaW5ldF9vcHQ7CiAJX191OAkJCXRvczsKIAlfX3U4CQkJbWluX3R0bDsKIAlfX3U4CQkJbWNfdHRsOwpAQCAtMTU2LDcgKzE2OCw3IEBACiAJaW50CQkJbWNfaW5kZXg7CiAJX19iZTMyCQkJbWNfYWRkcjsKIAlzdHJ1Y3QgaXBfbWNfc29ja2xpc3QgX19yY3UJKm1jX2xpc3Q7Ci0Jc3RydWN0IGluZXRfY29yawljb3JrOworCXN0cnVjdCBpbmV0X2NvcmtfZnVsbAljb3JrOwogfTsKIAogI2RlZmluZSBJUENPUktfT1BUCTEJLyogaXAtb3B0aW9ucyBoYXMgYmVlbiBoZWxkIGluIGlwY29yay5vcHQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRwZWVyLmggYi9pbmNsdWRlL25ldC9pbmV0cGVlci5oCmluZGV4IGU2ZGQ4ZGE2Li44YTE1OWNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0cGVlci5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXRwZWVyLmgKQEAgLTgwLDcgKzgwLDcgQEAKIAlyZXR1cm4gaW5ldF9nZXRwZWVyKCZkYWRkciwgY3JlYXRlKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXJfdjYoc3RydWN0IGluNl9hZGRyICp2NmRhZGRyLCBpbnQgY3JlYXRlKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXJfdjYoY29uc3Qgc3RydWN0IGluNl9hZGRyICp2NmRhZGRyLCBpbnQgY3JlYXRlKQogewogCXN0cnVjdCBpbmV0cGVlcl9hZGRyIGRhZGRyOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcC5oIGIvaW5jbHVkZS9uZXQvaXAuaAppbmRleCA3YzQxNjU4Li42NmRkNDkxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcC5oCisrKyBiL2luY2x1ZGUvbmV0L2lwLmgKQEAgLTUyLDcgKzUyLDcgQEAKIHN0cnVjdCBpcGNtX2Nvb2tpZSB7CiAJX19iZTMyCQkJYWRkcjsKIAlpbnQJCQlvaWY7Ci0Jc3RydWN0IGlwX29wdGlvbnMJKm9wdDsKKwlzdHJ1Y3QgaXBfb3B0aW9uc19yY3UJKm9wdDsKIAlfX3U4CQkJdHhfZmxhZ3M7CiB9OwogCkBAIC05Miw3ICs5Miw3IEBACiAKIGV4dGVybiBpbnQJCWlwX2J1aWxkX2FuZF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSAgICAgIF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAotCQkJCQkgICAgICBzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0KTsKKwkJCQkJICAgICAgc3RydWN0IGlwX29wdGlvbnNfcmN1ICpvcHQpOwogZXh0ZXJuIGludAkJaXBfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KTsKIGV4dGVybiBpbnQJCWlwX2xvY2FsX2RlbGl2ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYik7CkBAIC0xMDQsOSArMTA0LDkgQEAKIGV4dGVybiB2b2lkCQlpcF9zZW5kX2NoZWNrKHN0cnVjdCBpcGhkciAqaXApOwogZXh0ZXJuIGludAkJX19pcF9sb2NhbF9vdXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gaW50CQlpcF9sb2NhbF9vdXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1leHRlcm4gaW50CQlpcF9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludAkJaXBfcXVldWVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2kgKmZsKTsKIGV4dGVybiB2b2lkCQlpcF9pbml0KHZvaWQpOwotZXh0ZXJuIGludAkJaXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLAorZXh0ZXJuIGludAkJaXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsCiAJCQkJICAgICAgIGludCBnZXRmcmFnKHZvaWQgKmZyb20sIGNoYXIgKnRvLCBpbnQgb2Zmc2V0LCBpbnQgbGVuLAogCQkJCQkJICAgaW50IG9kZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiksCiAJCQkJdm9pZCAqZnJvbSwgaW50IGxlbiwgaW50IHByb3RvbGVuLApAQCAtMTE0LDE1ICsxMTQsMTcgQEAKIAkJCQlzdHJ1Y3QgcnRhYmxlICoqcnQsCiAJCQkJdW5zaWduZWQgaW50IGZsYWdzKTsKIGV4dGVybiBpbnQJCWlwX2dlbmVyaWNfZ2V0ZnJhZyh2b2lkICpmcm9tLCBjaGFyICp0bywgaW50IG9mZnNldCwgaW50IGxlbiwgaW50IG9kZCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1leHRlcm4gc3NpemVfdAkJaXBfYXBwZW5kX3BhZ2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKK2V4dGVybiBzc2l6ZV90CQlpcF9hcHBlbmRfcGFnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJaW50IG9mZnNldCwgc2l6ZV90IHNpemUsIGludCBmbGFncyk7CiBleHRlcm4gc3RydWN0IHNrX2J1ZmYgICpfX2lwX21ha2Vfc2tiKHN0cnVjdCBzb2NrICpzaywKKwkJCQkgICAgICBzdHJ1Y3QgZmxvd2k0ICpmbDQsCiAJCQkJICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUsCiAJCQkJICAgICAgc3RydWN0IGluZXRfY29yayAqY29yayk7CiBleHRlcm4gaW50CQlpcF9zZW5kX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWV4dGVybiBpbnQJCWlwX3B1c2hfcGVuZGluZ19mcmFtZXMoc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiBpbnQJCWlwX3B1c2hfcGVuZGluZ19mcmFtZXMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k0ICpmbDQpOwogZXh0ZXJuIHZvaWQJCWlwX2ZsdXNoX3BlbmRpbmdfZnJhbWVzKHN0cnVjdCBzb2NrICpzayk7CiBleHRlcm4gc3RydWN0IHNrX2J1ZmYgICppcF9tYWtlX3NrYihzdHJ1Y3Qgc29jayAqc2ssCisJCQkJICAgIHN0cnVjdCBmbG93aTQgKmZsNCwKIAkJCQkgICAgaW50IGdldGZyYWcodm9pZCAqZnJvbSwgY2hhciAqdG8sIGludCBvZmZzZXQsIGludCBsZW4sCiAJCQkJCQlpbnQgb2RkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSwKIAkJCQkgICAgdm9pZCAqZnJvbSwgaW50IGxlbmd0aCwgaW50IHRyYW5zaGRybGVuLApAQCAtMTMwLDkgKzEzMiw5IEBACiAJCQkJICAgIHN0cnVjdCBydGFibGUgKipydHAsCiAJCQkJICAgIHVuc2lnbmVkIGludCBmbGFncyk7CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmlwX2ZpbmlzaF9za2Ioc3RydWN0IHNvY2sgKnNrKQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqaXBfZmluaXNoX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCkKIHsKLQlyZXR1cm4gX19pcF9tYWtlX3NrYihzaywgJnNrLT5za193cml0ZV9xdWV1ZSwgJmluZXRfc2soc2spLT5jb3JrKTsKKwlyZXR1cm4gX19pcF9tYWtlX3NrYihzaywgZmw0LCAmc2stPnNrX3dyaXRlX3F1ZXVlLCAmaW5ldF9zayhzayktPmNvcmsuYmFzZSk7CiB9CiAKIC8qIGRhdGFncmFtLmMgKi8KQEAgLTE3Miw4ICsxNzQsOCBAQAogCXJldHVybiAoYXJnLT5mbGFncyAmIElQX1JFUExZX0FSR19OT1NSQ0NIRUNLKSA/IEZMT1dJX0ZMQUdfQU5ZU1JDIDogMDsKIH0KIAotdm9pZCBpcF9zZW5kX3JlcGx5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3JlcGx5X2FyZyAqYXJnLAotCQkgICB1bnNpZ25lZCBpbnQgbGVuKTsgCit2b2lkIGlwX3NlbmRfcmVwbHkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgZGFkZHIsCisJCSAgIHN0cnVjdCBpcF9yZXBseV9hcmcgKmFyZywgdW5zaWduZWQgaW50IGxlbik7CiAKIHN0cnVjdCBpcHY0X2NvbmZpZyB7CiAJaW50CWxvZ19tYXJ0aWFuczsKQEAgLTQxNiwxNCArNDE4LDE1IEBACiAgKglGdW5jdGlvbnMgcHJvdmlkZWQgYnkgaXBfb3B0aW9ucy5jCiAgKi8KICAKLWV4dGVybiB2b2lkIGlwX29wdGlvbnNfYnVpbGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX29wdGlvbnMgKm9wdCwgX19iZTMyIGRhZGRyLCBzdHJ1Y3QgcnRhYmxlICpydCwgaW50IGlzX2ZyYWcpOworZXh0ZXJuIHZvaWQgaXBfb3B0aW9uc19idWlsZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0LAorCQkJICAgICBfX2JlMzIgZGFkZHIsIHN0cnVjdCBydGFibGUgKnJ0LCBpbnQgaXNfZnJhZyk7CiBleHRlcm4gaW50IGlwX29wdGlvbnNfZWNobyhzdHJ1Y3QgaXBfb3B0aW9ucyAqZG9wdCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gdm9pZCBpcF9vcHRpb25zX2ZyYWdtZW50KHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludCBpcF9vcHRpb25zX2NvbXBpbGUoc3RydWN0IG5ldCAqbmV0LAogCQkJICAgICAgc3RydWN0IGlwX29wdGlvbnMgKm9wdCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1leHRlcm4gaW50IGlwX29wdGlvbnNfZ2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX29wdGlvbnMgKipvcHRwLAorZXh0ZXJuIGludCBpcF9vcHRpb25zX2dldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9vcHRpb25zX3JjdSAqKm9wdHAsCiAJCQkgIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBvcHRsZW4pOwotZXh0ZXJuIGludCBpcF9vcHRpb25zX2dldF9mcm9tX3VzZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfb3B0aW9ucyAqKm9wdHAsCitleHRlcm4gaW50IGlwX29wdGlvbnNfZ2V0X2Zyb21fdXNlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9vcHRpb25zX3JjdSAqKm9wdHAsCiAJCQkJICAgIHVuc2lnbmVkIGNoYXIgX191c2VyICpkYXRhLCBpbnQgb3B0bGVuKTsKIGV4dGVybiB2b2lkIGlwX29wdGlvbnNfdW5kbyhzdHJ1Y3QgaXBfb3B0aW9ucyAqIG9wdCk7CiBleHRlcm4gdm9pZCBpcF9mb3J3YXJkX29wdGlvbnMoc3RydWN0IHNrX2J1ZmYgKnNrYik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfZmliLmggYi9pbmNsdWRlL25ldC9pcDZfZmliLmgKaW5kZXggYmMzY2RlMC4uNDc3ZWY3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oCisrKyBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaApAQCAtMTMsOCArMTMsNiBAQAogI2lmbmRlZiBfSVA2X0ZJQl9ICiAjZGVmaW5lIF9JUDZfRklCX0gKIAotI2lmZGVmIF9fS0VSTkVMX18KLQogI2luY2x1ZGUgPGxpbnV4L2lwdjZfcm91dGUuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpAQCAtNDIsNiArNDAsNyBAQAogCiAJc3RydWN0IGluNl9hZGRyCWZjX2RzdDsKIAlzdHJ1Y3QgaW42X2FkZHIJZmNfc3JjOworCXN0cnVjdCBpbjZfYWRkcglmY19wcmVmc3JjOwogCXN0cnVjdCBpbjZfYWRkcglmY19nYXRld2F5OwogCiAJdW5zaWduZWQgbG9uZwlmY19leHBpcmVzOwpAQCAtMTA3LDYgKzEwNiw3IEBACiAJc3RydWN0IHJ0NmtleQkJCXJ0NmlfZHN0IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CiAJdTMyCQkJCXJ0NmlfZmxhZ3M7CiAJc3RydWN0IHJ0NmtleQkJCXJ0Nmlfc3JjOworCXN0cnVjdCBydDZrZXkJCQlydDZpX3ByZWZzcmM7CiAJdTMyCQkJCXJ0NmlfbWV0cmljOwogCXUzMgkJCQlydDZpX3BlZXJfZ2VuaWQ7CiAKQEAgLTE5NiwxMiArMTk2LDEyIEBACiAJCQkJCQkgIHBvbF9sb29rdXBfdCBsb29rdXApOwogCiBleHRlcm4gc3RydWN0IGZpYjZfbm9kZQkJKmZpYjZfbG9va3VwKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsCi0JCQkJCSAgICAgc3RydWN0IGluNl9hZGRyICpkYWRkciwKLQkJCQkJICAgICBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTsKKwkJCQkJICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpOwogCiBzdHJ1Y3QgZmliNl9ub2RlCQkqZmliNl9sb2NhdGUoc3RydWN0IGZpYjZfbm9kZSAqcm9vdCwKLQkJCQkJICAgICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLCBpbnQgZHN0X2xlbiwKLQkJCQkJICAgICBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCBpbnQgc3JjX2xlbik7CisJCQkJCSAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwgaW50IGRzdF9sZW4sCisJCQkJCSAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwgaW50IHNyY19sZW4pOwogCiBleHRlcm4gdm9pZAkJCWZpYjZfY2xlYW5fYWxsKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJICAgICAgIGludCAoKmZ1bmMpKHN0cnVjdCBydDZfaW5mbyAqLCB2b2lkICphcmcpLApAQCAtMjM4LDQgKzIzOCwzIEBACiB9CiAjZW5kaWYKICNlbmRpZgotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCmluZGV4IGM4NTBlNWYuLjVlOTFiNzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCisrKyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCkBAIC0yMSw4ICsyMSw2IEBACiAJX191OAkJCXByZWZpeFswXTsJLyogMCw4IG9yIDE2ICovCiB9OwogCi0jaWZkZWYgX19LRVJORUxfXwotCiAjaW5jbHVkZSA8bmV0L2Zsb3cuaD4KICNpbmNsdWRlIDxuZXQvaXA2X2ZpYi5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CkBAIC04NCw2ICs4MiwxMiBAQAogZXh0ZXJuIGludAkJCWlwNl9pbnNfcnQoc3RydWN0IHJ0Nl9pbmZvICopOwogZXh0ZXJuIGludAkJCWlwNl9kZWxfcnQoc3RydWN0IHJ0Nl9pbmZvICopOwogCitleHRlcm4gaW50CQkJaXA2X3JvdXRlX2dldF9zYWRkcihzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJCQkgICAgc3RydWN0IHJ0Nl9pbmZvICpydCwKKwkJCQkJCSAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQkJCQkJICAgIHVuc2lnbmVkIGludCBwcmVmcywKKwkJCQkJCSAgICBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTsKKwogZXh0ZXJuIHN0cnVjdCBydDZfaW5mbwkJKnJ0Nl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LAogCQkJCQkgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKIAkJCQkJICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCkBAIC0xMDYsOSArMTEwLDkgQEAKICAqCXN1cHBvcnQgZnVuY3Rpb25zIGZvciBORAogICoKICAqLwotZXh0ZXJuIHN0cnVjdCBydDZfaW5mbyAqCXJ0Nl9nZXRfZGZsdF9yb3V0ZXIoc3RydWN0IGluNl9hZGRyICphZGRyLAorZXh0ZXJuIHN0cnVjdCBydDZfaW5mbyAqCXJ0Nl9nZXRfZGZsdF9yb3V0ZXIoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLAogCQkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotZXh0ZXJuIHN0cnVjdCBydDZfaW5mbyAqCXJ0Nl9hZGRfZGZsdF9yb3V0ZXIoc3RydWN0IGluNl9hZGRyICpnd2FkZHIsCitleHRlcm4gc3RydWN0IHJ0Nl9pbmZvICoJcnQ2X2FkZF9kZmx0X3JvdXRlcihjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3YWRkciwKIAkJCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQkJICAgIHVuc2lnbmVkIGludCBwcmVmKTsKIApAQCAtMTE2LDE3ICsxMjAsMTcgQEAKIAogZXh0ZXJuIGludAkJCXJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJICAgICAgdTggKm9wdCwgaW50IGxlbiwKLQkJCQkJICAgICAgc3RydWN0IGluNl9hZGRyICpnd2FkZHIpOworCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3YWRkcik7CiAKLWV4dGVybiB2b2lkCQkJcnQ2X3JlZGlyZWN0KHN0cnVjdCBpbjZfYWRkciAqZGVzdCwKLQkJCQkJICAgICBzdHJ1Y3QgaW42X2FkZHIgKnNyYywKLQkJCQkJICAgICBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorZXh0ZXJuIHZvaWQJCQlydDZfcmVkaXJlY3QoY29uc3Qgc3RydWN0IGluNl9hZGRyICpkZXN0LAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc3JjLAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCiAJCQkJCSAgICAgc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsCiAJCQkJCSAgICAgdTggKmxsYWRkciwKIAkJCQkJICAgICBpbnQgb25fbGluayk7CiAKLWV4dGVybiB2b2lkCQkJcnQ2X3BtdHVfZGlzY292ZXJ5KHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCi0JCQkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorZXh0ZXJuIHZvaWQJCQlydDZfcG10dV9kaXNjb3ZlcnkoY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKKwkJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCiAJCQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQkJICAgdTMyIHBtdHUpOwogCkBAIC0xNDEsNiArMTQ1LDcgQEAKIGV4dGVybiBpbnQgcnQ2X2R1bXBfcm91dGUoc3RydWN0IHJ0Nl9pbmZvICpydCwgdm9pZCAqcF9hcmcpOwogZXh0ZXJuIHZvaWQgcnQ2X2lmZG93bihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgcnQ2X210dV9jaGFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbXR1KTsKK2V4dGVybiB2b2lkIHJ0Nl9yZW1vdmVfcHJlZnNyYyhzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnApOwogCiAKIC8qCkBAIC0xODYsNCArMTkxLDMgQEAKIH0KIAogI2VuZGlmCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX2ZpYi5oIGIvaW5jbHVkZS9uZXQvaXBfZmliLmgKaW5kZXggZTVkNjZlYy4uMTA0MjJlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXBfZmliLmgKKysrIGIvaW5jbHVkZS9uZXQvaXBfZmliLmgKQEAgLTE2MCw3ICsxNjAsOCBAQAogCXN0cnVjdCBobGlzdF9ub2RlIHRiX2hsaXN0OwogCXUzMgkJdGJfaWQ7CiAJaW50CQl0Yl9kZWZhdWx0OwotCXVuc2lnbmVkIGNoYXIJdGJfZGF0YVswXTsKKwlpbnQJCXRiX251bV9kZWZhdWx0OworCXVuc2lnbmVkIGxvbmcJdGJfZGF0YVswXTsKIH07CiAKIGV4dGVybiBpbnQgZmliX3RhYmxlX2xvb2t1cChzdHJ1Y3QgZmliX3RhYmxlICp0YiwgY29uc3Qgc3RydWN0IGZsb3dpNCAqZmxwLApAQCAtMjI3LDkgKzIyOCw5IEBACiAvKiBFeHBvcnRlZCBieSBmaWJfZnJvbnRlbmQuYyAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJ0bV9pcHY0X3BvbGljeVtdOwogZXh0ZXJuIHZvaWQJCWlwX2ZpYl9pbml0KHZvaWQpOwotZXh0ZXJuIGludCBmaWJfdmFsaWRhdGVfc291cmNlKF9fYmUzMiBzcmMsIF9fYmUzMiBkc3QsIHU4IHRvcywgaW50IG9pZiwKLQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMzIgKnNwZWNfZHN0LAotCQkJICAgICAgIHUzMiAqaXRhZywgdTMyIG1hcmspOworZXh0ZXJuIGludCBmaWJfdmFsaWRhdGVfc291cmNlKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBzcmMsIF9fYmUzMiBkc3QsCisJCQkgICAgICAgdTggdG9zLCBpbnQgb2lmLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIF9fYmUzMiAqc3BlY19kc3QsIHUzMiAqaXRhZyk7CiBleHRlcm4gdm9pZCBmaWJfc2VsZWN0X2RlZmF1bHQoc3RydWN0IGZpYl9yZXN1bHQgKnJlcyk7CiAKIC8qIEV4cG9ydGVkIGJ5IGZpYl9zZW1hbnRpY3MuYyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdnMuaCBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKaW5kZXggZDUxNmYwMC4uNGZmZjQzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXBfdnMuaAorKysgYi9pbmNsdWRlL25ldC9pcF92cy5oCkBAIC04LDkgKzgsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvaXBfdnMuaD4gICAgICAgICAgICAgICAgLyogZGVmaW5pdGlvbnMgc2hhcmVkIHdpdGggdXNlcmxhbmQgKi8KIAotLyogb2xkIGlwdnNhZG0gdmVyc2lvbnMgc3RpbGwgaW5jbHVkZSB0aGlzIGZpbGUgZGlyZWN0bHkgKi8KLSNpZmRlZiBfX0tFUk5FTF9fCi0KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4gICAgICAgICAgICAgICAgICAvKiBmb3IgX191WFggdHlwZXMgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPiAgICAgICAgICAgICAgIC8qIGZvciBjdGxfcGF0aCAqLwpAQCAtNjY4LDkgKzY2NSw3IEBACiAJc3RydWN0IGRzdF9lbnRyeQkqZHN0X2NhY2hlOwkvKiBkZXN0aW5hdGlvbiBjYWNoZSBlbnRyeSAqLwogCXUzMgkJCWRzdF9ydG9zOwkvKiBSVF9UT1ModG9zKSBmb3IgZHN0ICovCiAJdTMyCQkJZHN0X2Nvb2tpZTsKLSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgotCXN0cnVjdCBpbjZfYWRkcgkJZHN0X3NhZGRyOwotI2VuZGlmCisJdW5pb24gbmZfaW5ldF9hZGRyCWRzdF9zYWRkcjsKIAogCS8qIGZvciB2aXJ0dWFsIHNlcnZpY2UgKi8KIAlzdHJ1Y3QgaXBfdnNfc2VydmljZQkqc3ZjOwkJLyogc2VydmljZSBpdCBiZWxvbmdzIHRvICovCkBAIC03OTEsNiArNzg2LDcgQEAKIC8qIElQVlMgaW4gbmV0d29yayBuYW1lc3BhY2UgKi8KIHN0cnVjdCBuZXRuc19pcHZzIHsKIAlpbnQJCQlnZW47CQkvKiBHZW5lcmF0aW9uICovCisJaW50CQkJZW5hYmxlOwkJLyogZW5hYmxlIGxpa2UgbmZfaG9va3MgZG8gKi8KIAkvKgogCSAqCUhhc2ggdGFibGU6IGZvciByZWFsIHNlcnZpY2UgbG9va3VwcwogCSAqLwpAQCAtMTA4OSw2ICsxMDg1LDIyIEBACiAJYXRvbWljX2luYygmY3RsX2NwLT5uX2NvbnRyb2wpOwogfQogCisvKgorICogSVBWUyBuZXRucyBpbml0ICYgY2xlYW51cCBmdW5jdGlvbnMKKyAqLworZXh0ZXJuIGludCBfX2lwX3ZzX2VzdGltYXRvcl9pbml0KHN0cnVjdCBuZXQgKm5ldCk7CitleHRlcm4gaW50IF9faXBfdnNfY29udHJvbF9pbml0KHN0cnVjdCBuZXQgKm5ldCk7CitleHRlcm4gaW50IF9faXBfdnNfcHJvdG9jb2xfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpOworZXh0ZXJuIGludCBfX2lwX3ZzX2FwcF9pbml0KHN0cnVjdCBuZXQgKm5ldCk7CitleHRlcm4gaW50IF9faXBfdnNfY29ubl9pbml0KHN0cnVjdCBuZXQgKm5ldCk7CitleHRlcm4gaW50IF9faXBfdnNfc3luY19pbml0KHN0cnVjdCBuZXQgKm5ldCk7CitleHRlcm4gdm9pZCBfX2lwX3ZzX2Nvbm5fY2xlYW51cChzdHJ1Y3QgbmV0ICpuZXQpOworZXh0ZXJuIHZvaWQgX19pcF92c19hcHBfY2xlYW51cChzdHJ1Y3QgbmV0ICpuZXQpOworZXh0ZXJuIHZvaWQgX19pcF92c19wcm90b2NvbF9jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCk7CitleHRlcm4gdm9pZCBfX2lwX3ZzX2NvbnRyb2xfY2xlYW51cChzdHJ1Y3QgbmV0ICpuZXQpOworZXh0ZXJuIHZvaWQgX19pcF92c19lc3RpbWF0b3JfY2xlYW51cChzdHJ1Y3QgbmV0ICpuZXQpOworZXh0ZXJuIHZvaWQgX19pcF92c19zeW5jX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KTsKK2V4dGVybiB2b2lkIF9faXBfdnNfc2VydmljZV9jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCk7CiAKIC8qCiAgKiAgICAgIElQVlMgYXBwbGljYXRpb24gZnVuY3Rpb25zCkBAIC0xMjM5LDcgKzEyNTEsOCBAQAogZXh0ZXJuIGludCBpcF92c19kcl94bWl0CiAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwKTsKIGV4dGVybiBpbnQgaXBfdnNfaWNtcF94bWl0Ci0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0KTsKKyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCisgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IGhvb2tudW0pOwogZXh0ZXJuIHZvaWQgaXBfdnNfZHN0X3Jlc2V0KHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KTsKIAogI2lmZGVmIENPTkZJR19JUF9WU19JUFY2CkBAIC0xMjUzLDcgKzEyNjYsNyBAQAogKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCk7CiBleHRlcm4gaW50IGlwX3ZzX2ljbXBfeG1pdF92NgogKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKLSBpbnQgb2Zmc2V0KTsKKyBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaG9va251bSk7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKQEAgLTE0MTUsNiArMTQyOCw0IEBACiAJCWF0b21pY19yZWFkKCZkZXN0LT5pbmFjdGNvbm5zKTsKIH0KIAotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQogI2VuZGlmCS8qIF9ORVRfSVBfVlNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXB2Ni5oIGIvaW5jbHVkZS9uZXQvaXB2Ni5oCmluZGV4IDM0MjAwZjkuLmMwMzNlZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwdjYuaAorKysgYi9pbmNsdWRlL25ldC9pcHY2LmgKQEAgLTc3LDExICs3Nyw5IEBACiAvKgogICoJQWRkciBzY29wZXMKICAqLwotI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgSVBWNl9BRERSX01DX1NDT1BFKGEpCVwKIAkoKGEpLT5zNl9hZGRyWzFdICYgMHgwZikJLyogbm9uc3RhbmRhcmQgKi8KICNkZWZpbmUgX19JUFY2X0FERFJfU0NPUEVfSU5WQUxJRAktMQotI2VuZGlmCiAjZGVmaW5lIElQVjZfQUREUl9TQ09QRV9OT0RFTE9DQUwJMHgwMQogI2RlZmluZSBJUFY2X0FERFJfU0NPUEVfTElOS0xPQ0FMCTB4MDIKICNkZWZpbmUgSVBWNl9BRERSX1NDT1BFX1NJVEVMT0NBTAkweDA1CkBAIC05MSwxNCArODksMTIgQEAKIC8qCiAgKglBZGRyIGZsYWdzCiAgKi8KLSNpZmRlZiBfX0tFUk5FTF9fCiAjZGVmaW5lIElQVjZfQUREUl9NQ19GTEFHX1RSQU5TSUVOVChhKQlcCiAJKChhKS0+czZfYWRkclsxXSAmIDB4MTApCiAjZGVmaW5lIElQVjZfQUREUl9NQ19GTEFHX1BSRUZJWChhKQlcCiAJKChhKS0+czZfYWRkclsxXSAmIDB4MjApCiAjZGVmaW5lIElQVjZfQUREUl9NQ19GTEFHX1JFTkRFWlZPVVMoYSkJXAogCSgoYSktPnM2X2FkZHJbMV0gJiAweDQwKQotI2VuZGlmCiAKIC8qCiAgKglmcmFnbWVudGF0aW9uIGhlYWRlcgpAQCAtMTEzLDggKzEwOSw2IEBACiAKICNkZWZpbmUJSVA2X01GCTB4MDAwMQogCi0jaWZkZWYgX19LRVJORUxfXwotCiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KIAogLyogc3lzY3RscyAqLwpAQCAtMTI5LDYgKzEyMywxNSBAQAogCVNOTVBfSU5DX1NUQVRTIyNtb2RpZmllcigobmV0KS0+bWliLnN0YXRuYW1lIyNfc3RhdGlzdGljcywgKGZpZWxkKSk7XAogfSkKIAorLyogcGVyIGRldmljZSBjb3VudGVycyBhcmUgYXRvbWljX2xvbmdfdCAqLworI2RlZmluZSBfREVWSU5DQVRPTUlDKG5ldCwgc3RhdG5hbWUsIG1vZGlmaWVyLCBpZGV2LCBmaWVsZCkJCVwKKyh7CQkJCQkJCQkJXAorCXN0cnVjdCBpbmV0Nl9kZXYgKl9pZGV2ID0gKGlkZXYpOwkJCQlcCisJaWYgKGxpa2VseShfaWRldiAhPSBOVUxMKSkJCQkJCVwKKwkJU05NUF9JTkNfU1RBVFNfQVRPTUlDX0xPTkcoKF9pZGV2KS0+c3RhdHMuc3RhdG5hbWUjI2RldiwgKGZpZWxkKSk7IFwKKwlTTk1QX0lOQ19TVEFUUyMjbW9kaWZpZXIoKG5ldCktPm1pYi5zdGF0bmFtZSMjX3N0YXRpc3RpY3MsIChmaWVsZCkpO1wKK30pCisKICNkZWZpbmUgX0RFVkFERChuZXQsIHN0YXRuYW1lLCBtb2RpZmllciwgaWRldiwgZmllbGQsIHZhbCkJCVwKICh7CQkJCQkJCQkJXAogCXN0cnVjdCBpbmV0Nl9kZXYgKl9pZGV2ID0gKGlkZXYpOwkJCQlcCkBAIC0xNjAsMTYgKzE2MywxNiBAQAogI2RlZmluZSBJUDZfVVBEX1BPX1NUQVRTX0JIKG5ldCwgaWRldixmaWVsZCx2YWwpICAgXAogCQlfREVWVVBEKG5ldCwgaXB2NiwgNjRfQkgsIGlkZXYsIGZpZWxkLCB2YWwpCiAjZGVmaW5lIElDTVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIGZpZWxkKQlcCi0JCV9ERVZJTkMobmV0LCBpY21wdjYsICwgaWRldiwgZmllbGQpCisJCV9ERVZJTkNBVE9NSUMobmV0LCBpY21wdjYsICwgaWRldiwgZmllbGQpCiAjZGVmaW5lIElDTVA2X0lOQ19TVEFUU19CSChuZXQsIGlkZXYsIGZpZWxkKQlcCi0JCV9ERVZJTkMobmV0LCBpY21wdjYsIF9CSCwgaWRldiwgZmllbGQpCisJCV9ERVZJTkNBVE9NSUMobmV0LCBpY21wdjYsIF9CSCwgaWRldiwgZmllbGQpCiAKICNkZWZpbmUgSUNNUDZNU0dPVVRfSU5DX1NUQVRTKG5ldCwgaWRldiwgZmllbGQpCQlcCi0JX0RFVklOQyhuZXQsIGljbXB2Nm1zZywgLCBpZGV2LCBmaWVsZCArMjU2KQorCV9ERVZJTkNBVE9NSUMobmV0LCBpY21wdjZtc2csICwgaWRldiwgZmllbGQgKzI1NikKICNkZWZpbmUgSUNNUDZNU0dPVVRfSU5DX1NUQVRTX0JIKG5ldCwgaWRldiwgZmllbGQpCVwKLQlfREVWSU5DKG5ldCwgaWNtcHY2bXNnLCBfQkgsIGlkZXYsIGZpZWxkICsyNTYpCisJX0RFVklOQ0FUT01JQyhuZXQsIGljbXB2Nm1zZywgX0JILCBpZGV2LCBmaWVsZCArMjU2KQogI2RlZmluZSBJQ01QNk1TR0lOX0lOQ19TVEFUU19CSChuZXQsIGlkZXYsIGZpZWxkKQlcCi0JX0RFVklOQyhuZXQsIGljbXB2Nm1zZywgX0JILCBpZGV2LCBmaWVsZCkKKwlfREVWSU5DQVRPTUlDKG5ldCwgaWNtcHY2bXNnLCBfQkgsIGlkZXYsIGZpZWxkKQogCiBzdHJ1Y3QgaXA2X3JhX2NoYWluIHsKIAlzdHJ1Y3QgaXA2X3JhX2NoYWluCSpuZXh0OwpAQCAtMzc2LDggKzM3OSw4IEBACiBzdHJ1Y3QgaXA2X2NyZWF0ZV9hcmcgewogCV9fYmUzMiBpZDsKIAl1MzIgdXNlcjsKLQlzdHJ1Y3QgaW42X2FkZHIgKnNyYzsKLQlzdHJ1Y3QgaW42X2FkZHIgKmRzdDsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNyYzsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRzdDsKIH07CiAKIHZvaWQgaXA2X2ZyYWdfaW5pdChzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICpxLCB2b2lkICphKTsKQEAgLTY2Nyw1ICs2NzAsNCBAQAogZXh0ZXJuIHZvaWQgaXB2Nl9zdGF0aWNfc3lzY3RsX3VucmVnaXN0ZXIodm9pZCk7CiAjZW5kaWYKIAotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfTkVUX0lQVjZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXB4LmggYi9pbmNsdWRlL25ldC9pcHguaAppbmRleCAwNWQ3ZTRhLi5jMWZlYzZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcHguaAorKysgYi9pbmNsdWRlL25ldC9pcHguaApAQCAtODAsNyArODAsNiBAQAogCWF0b21pY190CQlyZWZjbnQ7CiB9OwogCi0jaWZkZWYgX19LRVJORUxfXwogc3RydWN0IGlweF9jYiB7CiAJdTgJaXB4X3RjdHJsOwogCV9fYmUzMglpcHhfZGVzdF9uZXQ7CkBAIC0xMTYsNyArMTE1LDYgQEAKIH0KIAogI2RlZmluZSBJUFhfU0tCX0NCKF9fc2tiKSAoKHN0cnVjdCBpcHhfY2IgKikmKChfX3NrYiktPmNiWzBdKSkKLSNlbmRpZgogCiAjZGVmaW5lIElQWF9NSU5fRVBIRU1FUkFMX1NPQ0tFVAkweDQwMDAKICNkZWZpbmUgSVBYX01BWF9FUEhFTUVSQUxfU09DS0VUCTB4N2ZmZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbGxjX3BkdS5oIGIvaW5jbHVkZS9uZXQvbGxjX3BkdS5oCmluZGV4IDc1YjhlMjkuLmY1N2U3ZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2xsY19wZHUuaAorKysgYi9pbmNsdWRlL25ldC9sbGNfcGR1LmgKQEAgLTE5OSw3ICsxOTksNyBAQAogCXU4IHNzYXA7CiAJdTggY3RybF8xOwogCXU4IGN0cmxfMjsKLX07Cit9IF9fcGFja2VkOwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBsbGNfcGR1X3NuICpsbGNfcGR1X3NuX2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtMjExLDcgKzIxMSw3IEBACiAJdTggZHNhcDsKIAl1OCBzc2FwOwogCXU4IGN0cmxfMTsKLX07Cit9IF9fcGFja2VkOwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBsbGNfcGR1X3VuICpsbGNfcGR1X3VuX2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtMzU5LDcgKzM1OSw3IEBACiAJdTggZm10X2lkOwkvKiBhbHdheXMgMHg4MSBmb3IgTExDICovCiAJdTggdHlwZTsJLyogZGlmZmVyZW50IGlmIE5VTEwvbm9uLU5VTEwgTFNBUCAqLwogCXU4IHJ3OwkJLyogc2VuZGVyIHJlY2VpdmUgd2luZG93ICovCi19OworfSBfX3BhY2tlZDsKIAogLyoqCiAgKglsbGNfcGR1X2luaXRfYXNfeGlkX2NtZCAtIHNldHMgYnl0ZXMgMywgNCAmIDUgb2YgTExDIGhlYWRlciBhcyBYSUQKQEAgLTQxNSw3ICs0MTUsNyBAQAogCXU4ICBjdXJyX3NzdjsJCS8qIGN1cnJlbnQgc2VuZCBzdGF0ZSB2YXJpYWJsZSB2YWwgKi8KIAl1OCAgY3Vycl9yc3Y7CQkvKiBjdXJyZW50IHJlY2VpdmUgc3RhdGUgdmFyaWFibGUgKi8KIAl1OCAgaW5kX2JpdHM7CQkvKiBpbmRpY2F0b3IgYml0cyBzZXQgd2l0aCBtYWNybyAqLwotfTsKK30gX19wYWNrZWQ7CiAKIGV4dGVybiB2b2lkIGxsY19wZHVfc2V0X2NtZF9yc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggdHlwZSk7CiBleHRlcm4gdm9pZCBsbGNfcGR1X3NldF9wZl9iaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggYml0X3ZhbHVlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCmluZGV4IDAyNWQ0Y2MuLmU2ZDZhNjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKKysrIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaApAQCAtNTM3LDYgKzUzNywyMSBAQAogCX07CiB9OwogCisvKioKKyAqIHN0cnVjdCBpZWVlODAyMTFfc2NoZWRfc2Nhbl9pZXMgLSBzY2hlZHVsZWQgc2NhbiBJRXMKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHBhc3MgdGhlIGFwcHJvcHJpYXRlIElFcyB0byBiZSB1c2VkIGluIHNjaGVkdWxlZAorICogc2NhbnMgZm9yIGFsbCBiYW5kcy4gIEl0IGNvbnRhaW5zIGJvdGggdGhlIElFcyBwYXNzZWQgZnJvbSB0aGUgdXNlcnNwYWNlCisgKiBhbmQgdGhlIG9uZXMgZ2VuZXJhdGVkIGJ5IG1hYzgwMjExLgorICoKKyAqIEBpZTogYXJyYXkgd2l0aCB0aGUgSUVzIGZvciBlYWNoIHN1cHBvcnRlZCBiYW5kCisgKiBAbGVuOiBhcnJheSB3aXRoIHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIElFcyBmb3IgZWFjaCBiYW5kCisgKi8KK3N0cnVjdCBpZWVlODAyMTFfc2NoZWRfc2Nhbl9pZXMgeworCXU4ICppZVtJRUVFODAyMTFfTlVNX0JBTkRTXTsKKwlzaXplX3QgbGVuW0lFRUU4MDIxMV9OVU1fQkFORFNdOworfTsKKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKklFRUU4MDIxMV9TS0JfQ0Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlyZXR1cm4gKHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqKXNrYi0+Y2I7CkBAIC0xNjA2LDYgKzE2MjEsMTggQEAKICAqCXlvdSBzaG91bGQgZW5zdXJlIHRvIGNhbmNlbCBpdCBvbiB0aGlzIGNhbGxiYWNrLgogICoJTXVzdCBiZSBpbXBsZW1lbnRlZCBhbmQgY2FuIHNsZWVwLgogICoKKyAqIEBzdXNwZW5kOiBTdXNwZW5kIHRoZSBkZXZpY2U7IG1hYzgwMjExIGl0c2VsZiB3aWxsIHF1aWVzY2UgYmVmb3JlIGFuZAorICoJc3RvcCB0cmFuc21pdHRpbmcgYW5kIGRvaW5nIGFueSBvdGhlciBjb25maWd1cmF0aW9uLCBhbmQgdGhlbgorICoJYXNrIHRoZSBkZXZpY2UgdG8gc3VzcGVuZC4gVGhpcyBpcyBvbmx5IGludm9rZWQgd2hlbiBXb1dMQU4gaXMKKyAqCWNvbmZpZ3VyZWQsIG90aGVyd2lzZSB0aGUgZGV2aWNlIGlzIGRlY29uZmlndXJlZCBjb21wbGV0ZWx5IGFuZAorICoJcmVjb25maWd1cmVkIGF0IHJlc3VtZSB0aW1lLgorICoKKyAqIEByZXN1bWU6IElmIFdvV0xBTiB3YXMgY29uZmlndXJlZCwgdGhpcyBpbmRpY2F0ZXMgdGhhdCBtYWM4MDIxMSBpcworICoJbm93IHJlc3VtaW5nIGl0cyBvcGVyYXRpb24sIGFmdGVyIHRoaXMgdGhlIGRldmljZSBtdXN0IGJlIGZ1bGx5CisgKglmdW5jdGlvbmFsIGFnYWluLiBJZiB0aGlzIHJldHVybnMgYW4gZXJyb3IsIHRoZSBvbmx5IHdheSBvdXQgaXMKKyAqCXRvIGFsc28gdW5yZWdpc3RlciB0aGUgZGV2aWNlLiBJZiBpdCByZXR1cm5zIDEsIHRoZW4gbWFjODAyMTEKKyAqCXdpbGwgYWxzbyBnbyB0aHJvdWdoIHRoZSByZWd1bGFyIGNvbXBsZXRlIHJlc3RhcnQgb24gcmVzdW1lLgorICoKICAqIEBhZGRfaW50ZXJmYWNlOiBDYWxsZWQgd2hlbiBhIG5ldGRldmljZSBhdHRhY2hlZCB0byB0aGUgaGFyZHdhcmUgaXMKICAqCWVuYWJsZWQuIEJlY2F1c2UgaXQgaXMgbm90IGNhbGxlZCBmb3IgbW9uaXRvciBtb2RlIGRldmljZXMsIEBzdGFydAogICoJYW5kIEBzdG9wIG11c3QgYmUgaW1wbGVtZW50ZWQuCkBAIC0xNjgxLDYgKzE3MDgsMTMgQEAKICAqCWFueSBlcnJvciB1bmxlc3MgdGhpcyBjYWxsYmFjayByZXR1cm5lZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCiAgKglUaGUgY2FsbGJhY2sgY2FuIHNsZWVwLgogICoKKyAqIEBzY2hlZF9zY2FuX3N0YXJ0OiBBc2sgdGhlIGhhcmR3YXJlIHRvIHN0YXJ0IHNjYW5uaW5nIHJlcGVhdGVkbHkgYXQKKyAqCXNwZWNpZmljIGludGVydmFscy4gIFRoZSBkcml2ZXIgbXVzdCBjYWxsIHRoZQorICoJaWVlZTgwMjExX3NjaGVkX3NjYW5fcmVzdWx0cygpIGZ1bmN0aW9uIHdoZW5ldmVyIGl0IGZpbmRzIHJlc3VsdHMuCisgKglUaGlzIHByb2Nlc3Mgd2lsbCBjb250aW51ZSB1bnRpbCBzY2hlZF9zY2FuX3N0b3AgaXMgY2FsbGVkLgorICoKKyAqIEBzY2hlZF9zY2FuX3N0b3A6IFRlbGwgdGhlIGhhcmR3YXJlIHRvIHN0b3AgYW4gb25nb2luZyBzY2hlZHVsZWQgc2Nhbi4KKyAqCiAgKiBAc3dfc2Nhbl9zdGFydDogTm90aWZpZXIgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQganVzdCBiZWZvcmUgYSBzb2Z0d2FyZSBzY2FuCiAgKglpcyBzdGFydGVkLiBDYW4gYmUgTlVMTCwgaWYgdGhlIGRyaXZlciBkb2Vzbid0IG5lZWQgdGhpcyBub3RpZmljYXRpb24uCiAgKglUaGUgY2FsbGJhY2sgY2FuIHNsZWVwLgpAQCAtMTgxOSwxMSArMTg1MywyMiBAQAogICogQHNldF9yaW5ncGFyYW06IFNldCB0eCBhbmQgcnggcmluZyBzaXplcy4KICAqCiAgKiBAZ2V0X3JpbmdwYXJhbTogR2V0IHR4IGFuZCByeCByaW5nIGN1cnJlbnQgYW5kIG1heGltdW0gc2l6ZXMuCisgKgorICogQHR4X2ZyYW1lc19wZW5kaW5nOiBDaGVjayBpZiB0aGVyZSBpcyBhbnkgcGVuZGluZyBmcmFtZSBpbiB0aGUgaGFyZHdhcmUKKyAqCXF1ZXVlcyBiZWZvcmUgZW50ZXJpbmcgcG93ZXIgc2F2ZS4KKyAqCisgKiBAc2V0X2JpdHJhdGVfbWFzazogU2V0IGEgbWFzayBvZiByYXRlcyB0byBiZSB1c2VkIGZvciByYXRlIGNvbnRyb2wgc2VsZWN0aW9uCisgKgl3aGVuIHRyYW5zbWl0dGluZyBhIGZyYW1lLiBDdXJyZW50bHkgb25seSBsZWdhY3kgcmF0ZXMgYXJlIGhhbmRsZWQuCisgKglUaGUgY2FsbGJhY2sgY2FuIHNsZWVwLgogICovCiBzdHJ1Y3QgaWVlZTgwMjExX29wcyB7CiAJdm9pZCAoKnR4KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAJaW50ICgqc3RhcnQpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAl2b2lkICgqc3RvcCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworI2lmZGVmIENPTkZJR19QTQorCWludCAoKnN1c3BlbmQpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgY2ZnODAyMTFfd293bGFuICp3b3dsYW4pOworCWludCAoKnJlc3VtZSkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworI2VuZGlmCiAJaW50ICgqYWRkX2ludGVyZmFjZSkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwogCWludCAoKmNoYW5nZV9pbnRlcmZhY2UpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LApAQCAtMTg1NCw2ICsxODk5LDEyIEBACiAJCQkJdTMyIGl2MzIsIHUxNiAqcGhhc2Uxa2V5KTsKIAlpbnQgKCpod19zY2FuKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJICAgICAgIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSk7CisJaW50ICgqc2NoZWRfc2Nhbl9zdGFydCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQlzdHJ1Y3QgY2ZnODAyMTFfc2NoZWRfc2Nhbl9yZXF1ZXN0ICpyZXEsCisJCQkJc3RydWN0IGllZWU4MDIxMV9zY2hlZF9zY2FuX2llcyAqaWVzKTsKKwl2b2lkICgqc2NoZWRfc2Nhbl9zdG9wKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKIAl2b2lkICgqc3dfc2Nhbl9zdGFydCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogCXZvaWQgKCpzd19zY2FuX2NvbXBsZXRlKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAJaW50ICgqZ2V0X3N0YXRzKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKQEAgLTE5MDYsNiArMTk1Nyw5IEBACiAJaW50ICgqc2V0X3JpbmdwYXJhbSkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB0eCwgdTMyIHJ4KTsKIAl2b2lkICgqZ2V0X3JpbmdwYXJhbSkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgICAgICB1MzIgKnR4LCB1MzIgKnR4X21heCwgdTMyICpyeCwgdTMyICpyeF9tYXgpOworCWJvb2wgKCp0eF9mcmFtZXNfcGVuZGluZykoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCWludCAoKnNldF9iaXRyYXRlX21hc2spKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCWNvbnN0IHN0cnVjdCBjZmc4MDIxMV9iaXRyYXRlX21hc2sgKm1hc2spOwogfTsKIAogLyoqCkBAIC0yMjIzLDYgKzIyNzcsMTkgQEAKICNkZWZpbmUgSUVFRTgwMjExX1RYX1NUQVRVU19IRUFEUk9PTQkxMwogCiAvKioKKyAqIGllZWU4MDIxMV9zdGFfc2V0X3RpbSAtIHNldCB0aGUgVElNIGJpdCBmb3IgYSBzbGVlcGluZyBzdGF0aW9uCisgKiBAc3RhOiAmc3RydWN0IGllZWU4MDIxMV9zdGEgcG9pbnRlciBmb3IgdGhlIHNsZWVwaW5nIHN0YXRpb24KKyAqCisgKiBJZiBhIGRyaXZlciBidWZmZXJzIGZyYW1lcyBmb3IgYSBwb3dlcnNhdmUgc3RhdGlvbiBpbnN0ZWFkIG9mIHBhc3NpbmcKKyAqIHRoZW0gYmFjayB0byBtYWM4MDIxMSBmb3IgcmV0cmFuc21pc3Npb24sIHRoZSBzdGF0aW9uIG5lZWRzIHRvIGJlIHRvbGQKKyAqIHRvIHdha2UgdXAgdXNpbmcgdGhlIFRJTSBiaXRtYXAgaW4gdGhlIGJlYWNvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHN0YXRpb24ncyBUSU0gYml0IC0gaXQgd2lsbCBiZSBjbGVhcmVkIHdoZW4gdGhlCisgKiBzdGF0aW9uIHdha2VzIHVwLgorICovCit2b2lkIGllZWU4MDIxMV9zdGFfc2V0X3RpbShzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKTsKKworLyoqCiAgKiBpZWVlODAyMTFfdHhfc3RhdHVzIC0gdHJhbnNtaXQgc3RhdHVzIGNhbGxiYWNrCiAgKgogICogQ2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBhbGwgdHJhbnNtaXR0ZWQgZnJhbWVzIGFmdGVyIHRoZXkgaGF2ZSBiZWVuCkBAIC0yMjc2LDYgKzIzNDMsMTcgQEAKIAkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIC8qKgorICogaWVlZTgwMjExX3JlcG9ydF9sb3dfYWNrIC0gcmVwb3J0IG5vbi1yZXNwb25kaW5nIHN0YXRpb24KKyAqCisgKiBXaGVuIG9wZXJhdGluZyBpbiBBUC1tb2RlLCBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gcmVwb3J0IGEgbm9uLXJlc3BvbmRpbmcKKyAqIGNvbm5lY3RlZCBTVEEuCisgKgorICogQHN0YTogdGhlIG5vbi1yZXNwb25kaW5nIGNvbm5lY3RlZCBzdGEKKyAqIEBudW1fcGFja2V0czogbnVtYmVyIG9mIHBhY2tldHMgc2VudCB0byBAc3RhIHdpdGhvdXQgYSByZXNwb25zZQorICovCit2b2lkIGllZWU4MDIxMV9yZXBvcnRfbG93X2FjayhzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MzIgbnVtX3BhY2tldHMpOworCisvKioKICAqIGllZWU4MDIxMV9iZWFjb25fZ2V0X3RpbSAtIGJlYWNvbiBnZW5lcmF0aW9uIGZ1bmN0aW9uCiAgKiBAaHc6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2NfaHcoKS4KICAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gdGhlIGFkZF9pbnRlcmZhY2UgY2FsbGJhY2suCkBAIC0yNTQ1LDYgKzI2MjMsMjggQEAKIHZvaWQgaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGFib3J0ZWQpOwogCiAvKioKKyAqIGllZWU4MDIxMV9zY2hlZF9zY2FuX3Jlc3VsdHMgLSBnb3QgcmVzdWx0cyBmcm9tIHNjaGVkdWxlZCBzY2FuCisgKgorICogV2hlbiBhIHNjaGVkdWxlZCBzY2FuIGlzIHJ1bm5pbmcsIHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgY2FsbGVkIGJ5IHRoZQorICogZHJpdmVyIHdoZW5ldmVyIHRoZXJlIGFyZSBuZXcgc2NhbiByZXN1bHRzIGF2YWlsYWJsZS4KKyAqCisgKiBAaHc6IHRoZSBoYXJkd2FyZSB0aGF0IGlzIHBlcmZvcm1pbmcgc2NoZWR1bGVkIHNjYW5zCisgKi8KK3ZvaWQgaWVlZTgwMjExX3NjaGVkX3NjYW5fcmVzdWx0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisKKy8qKgorICogaWVlZTgwMjExX3NjaGVkX3NjYW5fc3RvcHBlZCAtIGluZm9ybSB0aGF0IHRoZSBzY2hlZHVsZWQgc2NhbiBoYXMgc3RvcHBlZAorICoKKyAqIFdoZW4gYSBzY2hlZHVsZWQgc2NhbiBpcyBydW5uaW5nLCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgYnkKKyAqIHRoZSBkcml2ZXIgaWYgaXQgbmVlZHMgdG8gc3RvcCB0aGUgc2NhbiB0byBwZXJmb3JtIGFub3RoZXIgdGFzay4KKyAqIFVzdWFsIHNjZW5hcmlvcyBhcmUgZHJpdmVycyB0aGF0IGNhbm5vdCBjb250aW51ZSB0aGUgc2NoZWR1bGVkIHNjYW4KKyAqIHdoaWxlIGFzc29jaWF0aW5nLCBmb3IgaW5zdGFuY2UuCisgKgorICogQGh3OiB0aGUgaGFyZHdhcmUgdGhhdCBpcyBwZXJmb3JtaW5nIHNjaGVkdWxlZCBzY2FucworICovCit2b2lkIGllZWU4MDIxMV9zY2hlZF9zY2FuX3N0b3BwZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCisvKioKICAqIGllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzIC0gaXRlcmF0ZSBhY3RpdmUgaW50ZXJmYWNlcwogICoKICAqIFRoaXMgZnVuY3Rpb24gaXRlcmF0ZXMgb3ZlciB0aGUgaW50ZXJmYWNlcyBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmRpc2MuaCBiL2luY2x1ZGUvbmV0L25kaXNjLmgKaW5kZXggZTBlNTk0Zi4uNjJiZWViOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmRpc2MuaAorKysgYi9pbmNsdWRlL25ldC9uZGlzYy5oCkBAIC00Miw4ICs0Miw2IEBACiAjZGVmaW5lIE5EX1JFQUNIQUJMRV9USU1FCQkoMzAqSFopCiAjZGVmaW5lIE5EX1JFVFJBTlNfVElNRVIJCUhaCiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2ljbXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgpAQCAtMTAyLDcgKzEwMCw4IEBACiAJCQkJCQkgICAgc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsCiAJCQkJCQkgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICp0YXJnZXQpOwogCi1leHRlcm4gaW50CQkJbmRpc2NfbWNfbWFwKHN0cnVjdCBpbjZfYWRkciAqYWRkciwgY2hhciAqYnVmLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGlyKTsKK2V4dGVybiBpbnQJCQluZGlzY19tY19tYXAoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLCBjaGFyICpidWYsCisJCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRpcik7CiAKIGV4dGVybiBzdHJ1Y3Qgc2tfYnVmZgkJKm5kaXNjX2J1aWxkX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQkJIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCkBAIC0xNTUsOCArMTU0LDQgQEAKIAlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKIH0KIAotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZXZlbnQuaCBiL2luY2x1ZGUvbmV0L25ldGV2ZW50LmgKaW5kZXggMjJiMjM5Yy4uMDg2ZjhhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZXZlbnQuaAorKysgYi9pbmNsdWRlL25ldC9uZXRldmVudC5oCkBAIC0xMCw3ICsxMCw2IEBACiAgKgogICogCUNoYW5nZXM6CiAgKi8KLSNpZmRlZiBfX0tFUk5FTF9fCiAKIHN0cnVjdCBkc3RfZW50cnk7CiAKQEAgLTI5LDQgKzI4LDMgQEAKIGV4dGVybiBpbnQgY2FsbF9uZXRldmVudF9ub3RpZmllcnModW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYpOwogCiAjZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oCmluZGV4IGQwZDEzMzcuLmM3YzQyZTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgKQEAgLTE0LDcgKzE0LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tbW9uLmg+CiAKLSNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CkBAIC0zMjYsNSArMzI1LDQgQEAKICNkZWZpbmUgTU9EVUxFX0FMSUFTX05GQ1RfSEVMUEVSKGhlbHBlcikgXAogICAgICAgICBNT0RVTEVfQUxJQVMoIm5mY3QtaGVscGVyLSIgaGVscGVyKQogCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9ORl9DT05OVFJBQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oCmluZGV4IDRlZTQ0YzguLjdjYTZiZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgKQEAgLTEwNCw4ICsxMDQsNiBAQAogCX0gc3JjOwogfTsKIAotI2lmZGVmIF9fS0VSTkVMX18KLQogc3RhdGljIGlubGluZSB2b2lkIG5mX2N0X2R1bXBfdHVwbGVfaXAoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdCkKIHsKICNpZmRlZiBERUJVRwpAQCAtMTQ4LDggKzE0Niw2IEBACiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZTsKIH07CiAKLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KIHN0YXRpYyBpbmxpbmUgYm9vbCBfX25mX2N0X3R1cGxlX3NyY19lcXVhbChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0MSwKIAkJCQkJICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdDIpCiB7IApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdC5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdC5oCmluZGV4IGFmZjgwYjEuLjAzNDZiMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9uYXQuaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbmF0LmgKQEAgLTQ4LDcgKzQ4LDYgQEAKIAlzdHJ1Y3QgbmZfbmF0X3JhbmdlIHJhbmdlWzFdOwogfTsKIAotI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmg+CkBAIC05Myw3ICs5Miw0IEBACiAjZW5kaWYKIH0KIAotI2Vsc2UgIC8qICFfX0tFUk5FTF9fOiBpcHRhYmxlcyB3YW50cyB0aGlzIHRvIGNvbXBpbGUuICovCi0jZGVmaW5lIG5mX25hdF9tdWx0aV9yYW5nZSBuZl9uYXRfbXVsdGlfcmFuZ2VfY29tcGF0Ci0jZW5kaWYgLypfX0tFUk5FTF9fKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oIGIvaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oCmluZGV4IDU0MjE5NWQuLmQ3ODZiNGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL2lwdjQuaAorKysgYi9pbmNsdWRlL25ldC9uZXRucy9pcHY0LmgKQEAgLTU0LDYgKzU0LDggQEAKIAlpbnQgc3lzY3RsX3J0X2NhY2hlX3JlYnVpbGRfY291bnQ7CiAJaW50IGN1cnJlbnRfcnRfY2FjaGVfcmVidWlsZF9jb3VudDsKIAorCXVuc2lnbmVkIGludCBzeXNjdGxfcGluZ19ncm91cF9yYW5nZVsyXTsKKwogCWF0b21pY190IHJ0X2dlbmlkOwogCWF0b21pY190IGRldl9hZGRyX2dlbmlkOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9waG9uZXQvcG5fZGV2LmggYi9pbmNsdWRlL25ldC9waG9uZXQvcG5fZGV2LmgKaW5kZXggMTM2NDllYi4uODYzOWRlNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcGhvbmV0L3BuX2Rldi5oCisrKyBiL2luY2x1ZGUvbmV0L3Bob25ldC9wbl9kZXYuaApAQCAtNTEsNyArNTEsNyBAQAogaW50IHBob25ldF9yb3V0ZV9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggZGFkZHIpOwogaW50IHBob25ldF9yb3V0ZV9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggZGFkZHIpOwogdm9pZCBydG1fcGhvbmV0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGRzdCk7Ci1zdHJ1Y3QgbmV0X2RldmljZSAqcGhvbmV0X3JvdXRlX2dldChzdHJ1Y3QgbmV0ICpuZXQsIHU4IGRhZGRyKTsKK3N0cnVjdCBuZXRfZGV2aWNlICpwaG9uZXRfcm91dGVfZ2V0X3JjdShzdHJ1Y3QgbmV0ICpuZXQsIHU4IGRhZGRyKTsKIHN0cnVjdCBuZXRfZGV2aWNlICpwaG9uZXRfcm91dGVfb3V0cHV0KHN0cnVjdCBuZXQgKm5ldCwgdTggZGFkZHIpOwogCiAjZGVmaW5lIFBOX05PX0FERFIJMHhmZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGluZy5oIGIvaW5jbHVkZS9uZXQvcGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MmI1YWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9waW5nLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIElORVQJCUFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUQ1AvSVAgcHJvdG9jb2wgc3VpdGUgZm9yIHRoZSBMSU5VWAorICoJCW9wZXJhdGluZyBzeXN0ZW0uICBJTkVUIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSAgQlNEIFNvY2tldAorICoJCWludGVyZmFjZSBhcyB0aGUgbWVhbnMgb2YgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSB1c2VyIGxldmVsLgorICoKKyAqCQlEZWZpbml0aW9ucyBmb3IgdGhlICJwaW5nIiBtb2R1bGUuCisgKgorICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX1BJTkdfSAorI2RlZmluZSBfUElOR19ICisKKyNpbmNsdWRlIDxuZXQvbmV0bnMvaGFzaC5oPgorCisvKiBQSU5HX0hUQUJMRV9TSVpFIG11c3QgYmUgcG93ZXIgb2YgMiAqLworI2RlZmluZSBQSU5HX0hUQUJMRV9TSVpFIAk2NAorI2RlZmluZSBQSU5HX0hUQUJMRV9NQVNLIAkoUElOR19IVEFCTEVfU0laRS0xKQorCisjZGVmaW5lIHBpbmdfcG9ydGFkZHJfZm9yX2VhY2hfZW50cnkoX19zaywgbm9kZSwgbGlzdCkgXAorCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5KF9fc2ssIG5vZGUsIGxpc3QsIHNrX251bGxzX25vZGUpCisKKy8qCisgKiBnaWRfdCBpcyBlaXRoZXIgdWludCBvciB1c2hvcnQuICBXZSB3YW50IHRvIHBhc3MgaXQgdG8KKyAqIHByb2NfZG9pbnR2ZWNfbWlubWF4KCksIHNvIGl0IG11c3Qgbm90IGJlIGxhcmdlciB0aGFuIE1BWF9JTlQKKyAqLworI2RlZmluZSBHSURfVF9NQVggKCgoZ2lkX3QpfjBVKSA+PiAxKQorCitzdHJ1Y3QgcGluZ190YWJsZSB7CisJc3RydWN0IGhsaXN0X251bGxzX2hlYWQJaGFzaFtQSU5HX0hUQUJMRV9TSVpFXTsKKwlyd2xvY2tfdAkJbG9jazsKK307CisKK3N0cnVjdCBwaW5nX2l0ZXJfc3RhdGUgeworCXN0cnVjdCBzZXFfbmV0X3ByaXZhdGUgIHA7CisJaW50CQkJYnVja2V0OworfTsKKworZXh0ZXJuIHN0cnVjdCBwcm90byBwaW5nX3Byb3Q7CisKKworZXh0ZXJuIHZvaWQgcGluZ19yY3Yoc3RydWN0IHNrX2J1ZmYgKik7CitleHRlcm4gdm9pZCBwaW5nX2VycihzdHJ1Y3Qgc2tfYnVmZiAqLCB1MzIgaW5mbyk7CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworZXh0ZXJuIGludCBfX2luaXQgcGluZ19wcm9jX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBwaW5nX3Byb2NfZXhpdCh2b2lkKTsKKyNlbmRpZgorCit2b2lkIF9faW5pdCBwaW5nX2luaXQodm9pZCk7CisKKworI2VuZGlmIC8qIF9QSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3Jhd3Y2LmggYi9pbmNsdWRlL25ldC9yYXd2Ni5oCmluZGV4IGY2YjliODMuLmNmNzU3NzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3Jhd3Y2LmgKKysrIGIvaW5jbHVkZS9uZXQvcmF3djYuaApAQCAtMSw4ICsxLDYgQEAKICNpZm5kZWYgX05FVF9SQVdWNl9ICiAjZGVmaW5lIF9ORVRfUkFXVjZfSAogCi0jaWZkZWYgX19LRVJORUxfXwotCiAjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CiAKIHZvaWQgcmF3Nl9pY21wX2Vycm9yKHN0cnVjdCBza19idWZmICosIGludCBuZXh0aGRyLApAQCAtMjAsNSArMTgsMyBAQAogI2VuZGlmCiAKICNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3JvdXRlLmggYi9pbmNsdWRlL25ldC9yb3V0ZS5oCmluZGV4IDhmY2UwNjIuLmRiN2IzNDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3JvdXRlLmgKKysrIGIvaW5jbHVkZS9uZXQvcm91dGUuaApAQCAtMzUsMTYgKzM1LDggQEAKICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAKLSNpZm5kZWYgX19LRVJORUxfXwotI3dhcm5pbmcgVGhpcyBmaWxlIGlzIG5vdCBzdXBwb3NlZCB0byBiZSB1c2VkIG91dHNpZGUgb2Yga2VybmVsLgotI2VuZGlmCi0KICNkZWZpbmUgUlRPX09OTElOSwkweDAxCiAKLSNkZWZpbmUgUlRPX0NPTk4JMAotLyogUlRPX0NPTk4gaXMgbm90IHVzZWQgKGJlaW5nIGFsaWFzIGZvciAwKSwgYnV0IHByZXNlcnZlZCBub3QgdG8gYnJlYWsKLSAqIHNvbWUgbW9kdWxlcyByZWZlcnJpbmcgdG8gaXQuICovCi0KICNkZWZpbmUgUlRfQ09OTl9GTEFHUyhzaykgICAoUlRfVE9TKGluZXRfc2soc2spLT50b3MpIHwgc29ja19mbGFnKHNrLCBTT0NLX0xPQ0FMUk9VVEUpKQogCiBzdHJ1Y3QgZmliX25oOwpAQCAtNjAsNyArNTIsNyBAQAogCWludAkJCXJ0X2dlbmlkOwogCXVuc2lnbmVkCQlydF9mbGFnczsKIAlfX3UxNgkJCXJ0X3R5cGU7Ci0JX191OAkJCXJ0X3RvczsKKwlfX3U4CQkJcnRfa2V5X3RvczsKIAogCV9fYmUzMgkJCXJ0X2RzdDsJLyogUGF0aCBkZXN0aW5hdGlvbgkqLwogCV9fYmUzMgkJCXJ0X3NyYzsJLyogUGF0aCBzb3VyY2UJCSovCkBAIC0xMjMsNyArMTE1LDcgQEAKIAkJCQkgICAgICAgX19iZTMyIHNyYywgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZAkJcnRfY2FjaGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBpbnQgaG93KTsKIGV4dGVybiB2b2lkCQlydF9jYWNoZV9mbHVzaF9iYXRjaChzdHJ1Y3QgbmV0ICpuZXQpOwotZXh0ZXJuIHN0cnVjdCBydGFibGUgKl9faXBfcm91dGVfb3V0cHV0X2tleShzdHJ1Y3QgbmV0ICosIGNvbnN0IHN0cnVjdCBmbG93aTQgKmZscCk7CitleHRlcm4gc3RydWN0IHJ0YWJsZSAqX19pcF9yb3V0ZV9vdXRwdXRfa2V5KHN0cnVjdCBuZXQgKiwgc3RydWN0IGZsb3dpNCAqZmxwKTsKIGV4dGVybiBzdHJ1Y3QgcnRhYmxlICppcF9yb3V0ZV9vdXRwdXRfZmxvdyhzdHJ1Y3QgbmV0ICosIHN0cnVjdCBmbG93aTQgKmZscCwKIAkJCQkJICAgc3RydWN0IHNvY2sgKnNrKTsKIGV4dGVybiBzdHJ1Y3QgZHN0X2VudHJ5ICppcHY0X2JsYWNraG9sZV9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdF9vcmlnKTsKQEAgLTE0NSw0MCArMTM3LDMzIEBACiAJcmV0dXJuIGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCAmZmw0KTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgcnRhYmxlICppcF9yb3V0ZV9vdXRwdXRfcG9ydHMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssCitzdGF0aWMgaW5saW5lIHN0cnVjdCBydGFibGUgKmlwX3JvdXRlX291dHB1dF9wb3J0cyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93aTQgKmZsNCwKKwkJCQkJCSAgIHN0cnVjdCBzb2NrICpzaywKIAkJCQkJCSAgIF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLAogCQkJCQkJICAgX19iZTE2IGRwb3J0LCBfX2JlMTYgc3BvcnQsCiAJCQkJCQkgICBfX3U4IHByb3RvLCBfX3U4IHRvcywgaW50IG9pZikKIHsKLQlzdHJ1Y3QgZmxvd2k0IGZsNCA9IHsKLQkJLmZsb3dpNF9vaWYgPSBvaWYsCi0JCS5mbG93aTRfZmxhZ3MgPSBzayA/IGluZXRfc2tfZmxvd2lfZmxhZ3Moc2spIDogMCwKLQkJLmZsb3dpNF9tYXJrID0gc2sgPyBzay0+c2tfbWFyayA6IDAsCi0JCS5kYWRkciA9IGRhZGRyLAotCQkuc2FkZHIgPSBzYWRkciwKLQkJLmZsb3dpNF90b3MgPSB0b3MsCi0JCS5mbG93aTRfcHJvdG8gPSBwcm90bywKLQkJLmZsNF9kcG9ydCA9IGRwb3J0LAotCQkuZmw0X3Nwb3J0ID0gc3BvcnQsCi0JfTsKKwlmbG93aTRfaW5pdF9vdXRwdXQoZmw0LCBvaWYsIHNrID8gc2stPnNrX21hcmsgOiAwLCB0b3MsCisJCQkgICBSVF9TQ09QRV9VTklWRVJTRSwgcHJvdG8sCisJCQkgICBzayA/IGluZXRfc2tfZmxvd2lfZmxhZ3Moc2spIDogMCwKKwkJCSAgIGRhZGRyLCBzYWRkciwgZHBvcnQsIHNwb3J0KTsKIAlpZiAoc2spCi0JCXNlY3VyaXR5X3NrX2NsYXNzaWZ5X2Zsb3coc2ssIGZsb3dpNF90b19mbG93aSgmZmw0KSk7Ci0JcmV0dXJuIGlwX3JvdXRlX291dHB1dF9mbG93KG5ldCwgJmZsNCwgc2spOworCQlzZWN1cml0eV9za19jbGFzc2lmeV9mbG93KHNrLCBmbG93aTRfdG9fZmxvd2koZmw0KSk7CisJcmV0dXJuIGlwX3JvdXRlX291dHB1dF9mbG93KG5ldCwgZmw0LCBzayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHJ0YWJsZSAqaXBfcm91dGVfb3V0cHV0X2dyZShzdHJ1Y3QgbmV0ICpuZXQsCitzdGF0aWMgaW5saW5lIHN0cnVjdCBydGFibGUgKmlwX3JvdXRlX291dHB1dF9ncmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k0ICpmbDQsCiAJCQkJCQkgX19iZTMyIGRhZGRyLCBfX2JlMzIgc2FkZHIsCiAJCQkJCQkgX19iZTMyIGdyZV9rZXksIF9fdTggdG9zLCBpbnQgb2lmKQogewotCXN0cnVjdCBmbG93aTQgZmw0ID0gewotCQkuZmxvd2k0X29pZiA9IG9pZiwKLQkJLmRhZGRyID0gZGFkZHIsCi0JCS5zYWRkciA9IHNhZGRyLAotCQkuZmxvd2k0X3RvcyA9IHRvcywKLQkJLmZsb3dpNF9wcm90byA9IElQUFJPVE9fR1JFLAotCQkuZmw0X2dyZV9rZXkgPSBncmVfa2V5LAotCX07Ci0JcmV0dXJuIGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCAmZmw0KTsKKwltZW1zZXQoZmw0LCAwLCBzaXplb2YoKmZsNCkpOworCWZsNC0+Zmxvd2k0X29pZiA9IG9pZjsKKwlmbDQtPmRhZGRyID0gZGFkZHI7CisJZmw0LT5zYWRkciA9IHNhZGRyOworCWZsNC0+Zmxvd2k0X3RvcyA9IHRvczsKKwlmbDQtPmZsb3dpNF9wcm90byA9IElQUFJPVE9fR1JFOworCWZsNC0+Zmw0X2dyZV9rZXkgPSBncmVfa2V5OworCXJldHVybiBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgZmw0KTsKIH0KIAogZXh0ZXJuIGludCBpcF9yb3V0ZV9pbnB1dF9jb21tb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIGRzdCwgX19iZTMyIHNyYywKQEAgLTE5NiwxNCArMTgxLDE1IEBACiAJcmV0dXJuIGlwX3JvdXRlX2lucHV0X2NvbW1vbihza2IsIGRzdCwgc3JjLCB0b3MsIGRldmluLCB0cnVlKTsKIH0KIAotZXh0ZXJuIHVuc2lnbmVkIHNob3J0CWlwX3J0X2ZyYWdfbmVlZGVkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwaGRyICppcGgsIHVuc2lnbmVkIHNob3J0IG5ld19tdHUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworZXh0ZXJuIHVuc2lnbmVkIHNob3J0CWlwX3J0X2ZyYWdfbmVlZGVkKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGlwaGRyICppcGgsCisJCQkJCSAgdW5zaWduZWQgc2hvcnQgbmV3X210dSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZAkJaXBfcnRfc2VuZF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogZXh0ZXJuIHVuc2lnbmVkCQlpbmV0X2FkZHJfdHlwZShzdHJ1Y3QgbmV0ICpuZXQsIF9fYmUzMiBhZGRyKTsKIGV4dGVybiB1bnNpZ25lZAkJaW5ldF9kZXZfYWRkcl90eXBlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTMyIGFkZHIpOwogZXh0ZXJuIHZvaWQJCWlwX3J0X211bHRpY2FzdF9ldmVudChzdHJ1Y3QgaW5fZGV2aWNlICopOwogZXh0ZXJuIGludAkJaXBfcnRfaW9jdGwoc3RydWN0IG5ldCAqLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKTsKLWV4dGVybiB2b2lkCQlpcF9ydF9nZXRfc291cmNlKHU4ICpzcmMsIHN0cnVjdCBydGFibGUgKnJ0KTsKK2V4dGVybiB2b2lkCQlpcF9ydF9nZXRfc291cmNlKHU4ICpzcmMsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBydGFibGUgKnJ0KTsKIGV4dGVybiBpbnQJCWlwX3J0X2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7CiAKIHN0cnVjdCBpbl9pZmFkZHI7CkBAIC0yMjUsNzggKzIxMSw5MyBAQAogCXJldHVybiBpcF90b3MycHJpb1tJUFRPU19UT1ModG9zKT4+MV07CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHJ0YWJsZSAqaXBfcm91dGVfY29ubmVjdChfX2JlMzIgZHN0LCBfX2JlMzIgc3JjLCB1MzIgdG9zLAorLyogaXBfcm91dGVfY29ubmVjdCgpIGFuZCBpcF9yb3V0ZV9uZXdwb3J0cygpIHdvcmsgaW4gdGFuZGVtIHdoaWxzdAorICogYmluZGluZyBhIHNvY2tldCBmb3IgYSBuZXcgb3V0Z29pbmcgY29ubmVjdGlvbi4KKyAqCisgKiBJbiBvcmRlciB0byB1c2UgSVBTRUMgcHJvcGVybHksIHdlIG11c3QsIGluIHRoZSBlbmQsIGhhdmUgYQorICogcm91dGUgdGhhdCB3YXMgbG9va2VkIHVwIHVzaW5nIGFsbCBhdmFpbGFibGUga2V5cyBpbmNsdWRpbmcgc291cmNlCisgKiBhbmQgZGVzdGluYXRpb24gcG9ydHMuCisgKgorICogSG93ZXZlciwgaWYgYSBzb3VyY2UgcG9ydCBuZWVkcyB0byBiZSBhbGxvY2F0ZWQgKHRoZSB1c2VyIHNwZWNpZmllZAorICogYSB3aWxkY2FyZCBzb3VyY2UgcG9ydCkgd2UgbmVlZCB0byBvYnRhaW4gYWRkcmVzc2luZyBpbmZvcm1hdGlvbgorICogaW4gb3JkZXIgdG8gcGVyZm9ybSB0aGF0IGFsbG9jYXRpb24uCisgKgorICogU28gaXBfcm91dGVfY29ubmVjdCgpIGxvb2tzIHVwIGEgcm91dGUgdXNpbmcgd2lsZGNhcmRlZCBzb3VyY2UgYW5kCisgKiBkZXN0aW5hdGlvbiBwb3J0cyBpbiB0aGUga2V5LCBzaW1wbHkgc28gdGhhdCB3ZSBjYW4gZ2V0IGEgcGFpciBvZgorICogYWRkcmVzc2VzIHRvIHVzZSBmb3IgcG9ydCBhbGxvY2F0aW9uLgorICoKKyAqIExhdGVyLCBvbmNlIHRoZSBwb3J0cyBhcmUgYWxsb2NhdGVkLCBpcF9yb3V0ZV9uZXdwb3J0cygpIHdpbGwgbWFrZQorICogYW5vdGhlciByb3V0ZSBsb29rdXAgaWYgbmVlZGVkIHRvIG1ha2Ugc3VyZSB3ZSBjYXRjaCBhbnkgSVBTRUMKKyAqIHJ1bGVzIGtleWVkIG9uIHRoZSBwb3J0IGluZm9ybWF0aW9uLgorICoKKyAqIFRoZSBjYWxsZXJzIGFsbG9jYXRlIHRoZSBmbG93IGtleSBvbiB0aGVpciBzdGFjaywgYW5kIG11c3QgcGFzcyBpbgorICogdGhlIHNhbWUgZmxvd2k0IG9iamVjdCB0byBib3RoIHRoZSBpcF9yb3V0ZV9jb25uZWN0KCkgYW5kIHRoZQorICogaXBfcm91dGVfbmV3cG9ydHMoKSBjYWxscy4KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgaXBfcm91dGVfY29ubmVjdF9pbml0KHN0cnVjdCBmbG93aTQgKmZsNCwgX19iZTMyIGRzdCwgX19iZTMyIHNyYywKKwkJCQkJIHUzMiB0b3MsIGludCBvaWYsIHU4IHByb3RvY29sLAorCQkJCQkgX19iZTE2IHNwb3J0LCBfX2JlMTYgZHBvcnQsCisJCQkJCSBzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgY2FuX3NsZWVwKQoreworCV9fdTggZmxvd19mbGFncyA9IDA7CisKKwlpZiAoaW5ldF9zayhzayktPnRyYW5zcGFyZW50KQorCQlmbG93X2ZsYWdzIHw9IEZMT1dJX0ZMQUdfQU5ZU1JDOworCWlmIChwcm90b2NvbCA9PSBJUFBST1RPX1RDUCkKKwkJZmxvd19mbGFncyB8PSBGTE9XSV9GTEFHX1BSRUNPV19NRVRSSUNTOworCWlmIChjYW5fc2xlZXApCisJCWZsb3dfZmxhZ3MgfD0gRkxPV0lfRkxBR19DQU5fU0xFRVA7CisKKwlmbG93aTRfaW5pdF9vdXRwdXQoZmw0LCBvaWYsIHNrLT5za19tYXJrLCB0b3MsIFJUX1NDT1BFX1VOSVZFUlNFLAorCQkJICAgcHJvdG9jb2wsIGZsb3dfZmxhZ3MsIGRzdCwgc3JjLCBkcG9ydCwgc3BvcnQpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBydGFibGUgKmlwX3JvdXRlX2Nvbm5lY3Qoc3RydWN0IGZsb3dpNCAqZmw0LAorCQkJCQkgICAgICBfX2JlMzIgZHN0LCBfX2JlMzIgc3JjLCB1MzIgdG9zLAogCQkJCQkgICAgICBpbnQgb2lmLCB1OCBwcm90b2NvbCwKIAkJCQkJICAgICAgX19iZTE2IHNwb3J0LCBfX2JlMTYgZHBvcnQsCiAJCQkJCSAgICAgIHN0cnVjdCBzb2NrICpzaywgYm9vbCBjYW5fc2xlZXApCiB7Ci0Jc3RydWN0IGZsb3dpNCBmbDQgPSB7Ci0JCS5mbG93aTRfb2lmID0gb2lmLAotCQkuZmxvd2k0X21hcmsgPSBzay0+c2tfbWFyaywKLQkJLmRhZGRyID0gZHN0LAotCQkuc2FkZHIgPSBzcmMsCi0JCS5mbG93aTRfdG9zID0gdG9zLAotCQkuZmxvd2k0X3Byb3RvID0gcHJvdG9jb2wsCi0JCS5mbDRfc3BvcnQgPSBzcG9ydCwKLQkJLmZsNF9kcG9ydCA9IGRwb3J0LAotCX07CiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCXN0cnVjdCBydGFibGUgKnJ0OwogCi0JaWYgKGluZXRfc2soc2spLT50cmFuc3BhcmVudCkKLQkJZmw0LmZsb3dpNF9mbGFncyB8PSBGTE9XSV9GTEFHX0FOWVNSQzsKLQlpZiAocHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApCi0JCWZsNC5mbG93aTRfZmxhZ3MgfD0gRkxPV0lfRkxBR19QUkVDT1dfTUVUUklDUzsKLQlpZiAoY2FuX3NsZWVwKQotCQlmbDQuZmxvd2k0X2ZsYWdzIHw9IEZMT1dJX0ZMQUdfQ0FOX1NMRUVQOworCWlwX3JvdXRlX2Nvbm5lY3RfaW5pdChmbDQsIGRzdCwgc3JjLCB0b3MsIG9pZiwgcHJvdG9jb2wsCisJCQkgICAgICBzcG9ydCwgZHBvcnQsIHNrLCBjYW5fc2xlZXApOwogCiAJaWYgKCFkc3QgfHwgIXNyYykgewotCQlydCA9IF9faXBfcm91dGVfb3V0cHV0X2tleShuZXQsICZmbDQpOworCQlydCA9IF9faXBfcm91dGVfb3V0cHV0X2tleShuZXQsIGZsNCk7CiAJCWlmIChJU19FUlIocnQpKQogCQkJcmV0dXJuIHJ0OwotCQlmbDQuZGFkZHIgPSBydC0+cnRfZHN0OwotCQlmbDQuc2FkZHIgPSBydC0+cnRfc3JjOwogCQlpcF9ydF9wdXQocnQpOwogCX0KLQlzZWN1cml0eV9za19jbGFzc2lmeV9mbG93KHNrLCBmbG93aTRfdG9fZmxvd2koJmZsNCkpOwotCXJldHVybiBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsICZmbDQsIHNrKTsKKwlzZWN1cml0eV9za19jbGFzc2lmeV9mbG93KHNrLCBmbG93aTRfdG9fZmxvd2koZmw0KSk7CisJcmV0dXJuIGlwX3JvdXRlX291dHB1dF9mbG93KG5ldCwgZmw0LCBzayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHJ0YWJsZSAqaXBfcm91dGVfbmV3cG9ydHMoc3RydWN0IHJ0YWJsZSAqcnQsCi0JCQkJCSAgICAgICB1OCBwcm90b2NvbCwgX19iZTE2IG9yaWdfc3BvcnQsCi0JCQkJCSAgICAgICBfX2JlMTYgb3JpZ19kcG9ydCwgX19iZTE2IHNwb3J0LAotCQkJCQkgICAgICAgX19iZTE2IGRwb3J0LCBzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgaW5saW5lIHN0cnVjdCBydGFibGUgKmlwX3JvdXRlX25ld3BvcnRzKHN0cnVjdCBmbG93aTQgKmZsNCwgc3RydWN0IHJ0YWJsZSAqcnQsCisJCQkJCSAgICAgICBfX2JlMTYgb3JpZ19zcG9ydCwgX19iZTE2IG9yaWdfZHBvcnQsCisJCQkJCSAgICAgICBfX2JlMTYgc3BvcnQsIF9fYmUxNiBkcG9ydCwKKwkJCQkJICAgICAgIHN0cnVjdCBzb2NrICpzaykKIHsKIAlpZiAoc3BvcnQgIT0gb3JpZ19zcG9ydCB8fCBkcG9ydCAhPSBvcmlnX2Rwb3J0KSB7Ci0JCXN0cnVjdCBmbG93aTQgZmw0ID0gewotCQkJLmZsb3dpNF9vaWYgPSBydC0+cnRfb2lmLAotCQkJLmZsb3dpNF9tYXJrID0gcnQtPnJ0X21hcmssCi0JCQkuZGFkZHIgPSBydC0+cnRfZHN0LAotCQkJLnNhZGRyID0gcnQtPnJ0X3NyYywKLQkJCS5mbG93aTRfdG9zID0gcnQtPnJ0X3RvcywKLQkJCS5mbG93aTRfcHJvdG8gPSBwcm90b2NvbCwKLQkJCS5mbDRfc3BvcnQgPSBzcG9ydCwKLQkJCS5mbDRfZHBvcnQgPSBkcG9ydAotCQl9OwotCQlpZiAoaW5ldF9zayhzayktPnRyYW5zcGFyZW50KQotCQkJZmw0LmZsb3dpNF9mbGFncyB8PSBGTE9XSV9GTEFHX0FOWVNSQzsKLQkJaWYgKHByb3RvY29sID09IElQUFJPVE9fVENQKQotCQkJZmw0LmZsb3dpNF9mbGFncyB8PSBGTE9XSV9GTEFHX1BSRUNPV19NRVRSSUNTOworCQlmbDQtPmZsNF9kcG9ydCA9IGRwb3J0OworCQlmbDQtPmZsNF9zcG9ydCA9IHNwb3J0OwogCQlpcF9ydF9wdXQocnQpOwotCQlzZWN1cml0eV9za19jbGFzc2lmeV9mbG93KHNrLCBmbG93aTRfdG9fZmxvd2koJmZsNCkpOwotCQlyZXR1cm4gaXBfcm91dGVfb3V0cHV0X2Zsb3coc29ja19uZXQoc2spLCAmZmw0LCBzayk7CisJCXNlY3VyaXR5X3NrX2NsYXNzaWZ5X2Zsb3coc2ssIGZsb3dpNF90b19mbG93aShmbDQpKTsKKwkJcmV0dXJuIGlwX3JvdXRlX291dHB1dF9mbG93KHNvY2tfbmV0KHNrKSwgZmw0LCBzayk7CiAJfQogCXJldHVybiBydDsKIH0KIAotZXh0ZXJuIHZvaWQgcnRfYmluZF9wZWVyKHN0cnVjdCBydGFibGUgKnJ0LCBpbnQgY3JlYXRlKTsKK2V4dGVybiB2b2lkIHJ0X2JpbmRfcGVlcihzdHJ1Y3QgcnRhYmxlICpydCwgX19iZTMyIGRhZGRyLCBpbnQgY3JlYXRlKTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9wZWVyICpydF9nZXRfcGVlcihzdHJ1Y3QgcnRhYmxlICpydCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfcGVlciAqcnRfZ2V0X3BlZXIoc3RydWN0IHJ0YWJsZSAqcnQsIF9fYmUzMiBkYWRkcikKIHsKIAlpZiAocnQtPnBlZXIpCiAJCXJldHVybiBydC0+cGVlcjsKIAotCXJ0X2JpbmRfcGVlcihydCwgMCk7CisJcnRfYmluZF9wZWVyKHJ0LCBkYWRkciwgMCk7CiAJcmV0dXJuIHJ0LT5wZWVyOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL2NvbW1hbmQuaCBiL2luY2x1ZGUvbmV0L3NjdHAvY29tbWFuZC5oCmluZGV4IGMwMWRjOTkuLjJiNDQ3NjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvY29tbWFuZC5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvY29tbWFuZC5oCkBAIC03Myw3ICs3Myw2IEBACiAJU0NUUF9DTURfSU5JVF9GQUlMRUQsICAgLyogSGlnaCBsZXZlbCwgZG8gaW5pdCBmYWlsdXJlIHdvcmsuICovCiAJU0NUUF9DTURfUkVQT1JUX0RVUCwJLyogUmVwb3J0IGEgZHVwbGljYXRlIFRTTi4gICovCiAJU0NUUF9DTURfU1RSSUtFLAkvKiBNYXJrIGEgc3RyaWtlIGFnYWluc3QgYSB0cmFuc3BvcnQuICAqLwotCVNDVFBfQ01EX1RSQU5TTUlULCAgICAgIC8qIFRyYW5zbWl0IHRoZSBvdXRxdWV1ZS4gKi8KIAlTQ1RQX0NNRF9IQl9USU1FUlNfU1RBUlQsICAgIC8qIFN0YXJ0IHRoZSBoZWFydGJlYXQgdGltZXJzLiAqLwogCVNDVFBfQ01EX0hCX1RJTUVSX1VQREFURSwgICAgLyogVXBkYXRlIGEgaGVhcnRiZWF0IHRpbWVycy4gICovCiAJU0NUUF9DTURfSEJfVElNRVJTX1NUT1AsICAgICAvKiBTdG9wIHRoZSBoZWFydGJlYXQgdGltZXJzLiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmggYi9pbmNsdWRlL25ldC9zY3RwL2NvbnN0YW50cy5oCmluZGV4IGM3MGQ4Y2MuLjk0MmI4NjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaApAQCAtMTUwLDcgKzE1MCw2IEBACiBTQ1RQX1NVQlRZUEVfQ09OU1RSVUNUT1IoUFJJTUlUSVZFLAlzY3RwX2V2ZW50X3ByaW1pdGl2ZV90LAlwcmltaXRpdmUpCiAKIAotI2RlZmluZSBzY3RwX2NodW5rX2lzX2NvbnRyb2woYSkgKGEtPmNodW5rX2hkci0+dHlwZSAhPSBTQ1RQX0NJRF9EQVRBKQogI2RlZmluZSBzY3RwX2NodW5rX2lzX2RhdGEoYSkgKGEtPmNodW5rX2hkci0+dHlwZSA9PSBTQ1RQX0NJRF9EQVRBKQogCiAvKiBDYWxjdWxhdGUgdGhlIGFjdHVhbCBkYXRhIHNpemUgaW4gYSBkYXRhIGNodW5rICovCkBAIC0xODgsMTUgKzE4NywxNCBAQAogLyogU0NUUCBzdGF0ZSBkZWZpbmVzIGZvciBpbnRlcm5hbCBzdGF0ZSBtYWNoaW5lICovCiB0eXBlZGVmIGVudW0gewogCi0JU0NUUF9TVEFURV9FTVBUWQkJPSAwLAotCVNDVFBfU1RBVEVfQ0xPU0VECQk9IDEsCi0JU0NUUF9TVEFURV9DT09LSUVfV0FJVAkJPSAyLAotCVNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRAk9IDMsCi0JU0NUUF9TVEFURV9FU1RBQkxJU0hFRAkJPSA0LAotCVNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORwk9IDUsCi0JU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UCT0gNiwKLQlTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVECT0gNywKLQlTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UCT0gOCwKKwlTQ1RQX1NUQVRFX0NMT1NFRAkJPSAwLAorCVNDVFBfU1RBVEVfQ09PS0lFX1dBSVQJCT0gMSwKKwlTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQJPSAyLAorCVNDVFBfU1RBVEVfRVNUQUJMSVNIRUQJCT0gMywKKwlTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcJPSA0LAorCVNDVFBfU1RBVEVfU0hVVERPV05fU0VOVAk9IDUsCisJU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRAk9IDYsCisJU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVAk9IDcsCiAKIH0gc2N0cF9zdGF0ZV90OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCmluZGV4IDUwNTg0NWQuLmIyYzIzNjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCkBAIC0xMTUsNyArMTE1LDYgQEAKICAqIHNjdHAvcHJvdG9jb2wuYwogICovCiBleHRlcm4gc3RydWN0IHNvY2sgKnNjdHBfZ2V0X2N0bF9zb2NrKHZvaWQpOwotZXh0ZXJuIHZvaWQgc2N0cF9sb2NhbF9hZGRyX2ZyZWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKTsKIGV4dGVybiBpbnQgc2N0cF9jb3B5X2xvY2FsX2FkZHJfbGlzdChzdHJ1Y3Qgc2N0cF9iaW5kX2FkZHIgKiwKIAkJCQkgICAgIHNjdHBfc2NvcGVfdCwgZ2ZwX3QgZ2ZwLAogCQkJCSAgICAgaW50IGZsYWdzKTsKQEAgLTUzMSw3ICs1MzAsNiBAQAogCiAjZGVmaW5lIF9zY3RwX3dhbGtfcGFyYW1zKHBvcywgY2h1bmssIGVuZCwgbWVtYmVyKVwKIGZvciAocG9zLnYgPSBjaHVuay0+bWVtYmVyO1wKLSAgICAgcG9zLnYgPD0gKHZvaWQgKiljaHVuayArIGVuZCAtIHNpemVvZihzY3RwX3BhcmFtaGRyX3QpICYmXAogICAgICBwb3MudiA8PSAodm9pZCAqKWNodW5rICsgZW5kIC0gbnRvaHMocG9zLnAtPmxlbmd0aCkgJiZcCiAgICAgIG50b2hzKHBvcy5wLT5sZW5ndGgpID49IHNpemVvZihzY3RwX3BhcmFtaGRyX3QpO1wKICAgICAgcG9zLnYgKz0gV09SRF9ST1VORChudG9ocyhwb3MucC0+bGVuZ3RoKSkpCkBAIC01NDIsNyArNTQwLDYgQEAKICNkZWZpbmUgX3NjdHBfd2Fsa19lcnJvcnMoZXJyLCBjaHVua19oZHIsIGVuZClcCiBmb3IgKGVyciA9IChzY3RwX2Vycmhkcl90ICopKCh2b2lkICopY2h1bmtfaGRyICsgXAogCSAgICBzaXplb2Yoc2N0cF9jaHVua2hkcl90KSk7XAotICAgICAodm9pZCAqKWVyciA8PSAodm9pZCAqKWNodW5rX2hkciArIGVuZCAtIHNpemVvZihzY3RwX2Vycmhkcl90KSAmJlwKICAgICAgKHZvaWQgKillcnIgPD0gKHZvaWQgKiljaHVua19oZHIgKyBlbmQgLSBudG9ocyhlcnItPmxlbmd0aCkgJiZcCiAgICAgIG50b2hzKGVyci0+bGVuZ3RoKSA+PSBzaXplb2Yoc2N0cF9lcnJoZHJfdCk7IFwKICAgICAgZXJyID0gKHNjdHBfZXJyaGRyX3QgKikoKHZvaWQgKillcnIgKyBXT1JEX1JPVU5EKG50b2hzKGVyci0+bGVuZ3RoKSkpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zbS5oIGIvaW5jbHVkZS9uZXQvc2N0cC9zbS5oCmluZGV4IDkzNTJkMTIuLjkxNDg2MzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc20uaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3NtLmgKQEAgLTE2NSw2ICsxNjUsNyBAQAogc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2ZfZG9fcHJtX2FzY29uZjsKIAogLyogUHJvdG90eXBlcyBmb3Igb3RoZXIgZXZlbnQgc3RhdGUgZnVuY3Rpb25zLiAgKi8KK3NjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX2RvX25vX3BlbmRpbmdfdHNuOwogc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2ZfZG9fOV8yX3N0YXJ0X3NodXRkb3duOwogc2N0cF9zdGF0ZV9mbl90IHNjdHBfc2ZfZG9fOV8yX3NodXRkb3duX2FjazsKIHNjdHBfc3RhdGVfZm5fdCBzY3RwX3NmX2lnbm9yZV9vdGhlcjsKQEAgLTIzMiw5ICsyMzMsNyBAQAogCQkJCSAgIGNvbnN0IHN0cnVjdCBzY3RwX2NodW5rICosCiAJCQkJICAgc3RydWN0IHNjdHBfcGFyYW1oZHIgKik7CiBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9tYWtlX2hlYXJ0YmVhdChjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqLAotCQkJCSAgY29uc3Qgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICosCi0JCQkJICBjb25zdCB2b2lkICpwYXlsb2FkLAotCQkJCSAgY29uc3Qgc2l6ZV90IHBheWxlbik7CisJCQkJICBjb25zdCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKik7CiBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9tYWtlX2hlYXJ0YmVhdF9hY2soY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc2N0cF9jaHVuayAqLAogCQkJCSAgICAgIGNvbnN0IHZvaWQgKnBheWxvYWQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCmluZGV4IDBmNmU2MGEuLjc5NWY0ODggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCkBAIC01NjQsMTkgKzU2NCwxNSBAQAogCQkJCQkgaW50IG9wdG5hbWUsCiAJCQkJCSBjaGFyIF9fdXNlciAqb3B0dmFsLAogCQkJCQkgaW50IF9fdXNlciAqb3B0bGVuKTsKLQlzdHJ1Y3QgZHN0X2VudHJ5ICooKmdldF9kc3QpCShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLQkJCQkJIHVuaW9uIHNjdHBfYWRkciAqZGFkZHIsCi0JCQkJCSB1bmlvbiBzY3RwX2FkZHIgKnNhZGRyKTsKKwl2b2lkCQkoKmdldF9kc3QpCShzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnQsCisJCQkJCSB1bmlvbiBzY3RwX2FkZHIgKnNhZGRyLAorCQkJCQkgc3RydWN0IGZsb3dpICpmbCwKKwkJCQkJIHN0cnVjdCBzb2NrICpzayk7CiAJdm9pZAkJKCpnZXRfc2FkZHIpCShzdHJ1Y3Qgc2N0cF9zb2NrICpzaywKLQkJCQkJIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotCQkJCQkgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAotCQkJCQkgdW5pb24gc2N0cF9hZGRyICpkYWRkciwKLQkJCQkJIHVuaW9uIHNjdHBfYWRkciAqc2FkZHIpOworCQkJCQkgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0LAorCQkJCQkgc3RydWN0IGZsb3dpICpmbCk7CiAJdm9pZAkJKCpjb3B5X2FkZHJsaXN0KSAoc3RydWN0IGxpc3RfaGVhZCAqLAogCQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICopOwotCXZvaWQJCSgqZHN0X3NhZGRyKQkodW5pb24gc2N0cF9hZGRyICpzYWRkciwKLQkJCQkJIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKLQkJCQkJIF9fYmUxNiBwb3J0KTsKIAlpbnQJCSgqY21wX2FkZHIpCShjb25zdCB1bmlvbiBzY3RwX2FkZHIgKmFkZHIxLAogCQkJCQkgY29uc3QgdW5pb24gc2N0cF9hZGRyICphZGRyMik7CiAJdm9pZAkJKCphZGRyX2NvcHkpCSh1bmlvbiBzY3RwX2FkZHIgKmRzdCwKQEAgLTg5OCw2ICs4OTQsNyBAQAogCQkvKiBJcyB0aGlzIHN0cnVjdHVyZSBrZnJlZSgpYWJsZT8gKi8KIAkJbWFsbG9jZWQ6MTsKIAorCXN0cnVjdCBmbG93aSBmbDsKIAogCS8qIFRoaXMgaXMgdGhlIHBlZXIncyBJUCBhZGRyZXNzIGFuZCBwb3J0LiAqLwogCXVuaW9uIHNjdHBfYWRkciBpcGFkZHI7CkBAIC0xMDYxLDcgKzEwNTgsNyBAQAogCQkJICAgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKik7CiB2b2lkIHNjdHBfdHJhbnNwb3J0X3JvdXRlKHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqLCB1bmlvbiBzY3RwX2FkZHIgKiwKIAkJCSAgc3RydWN0IHNjdHBfc29jayAqKTsKLXZvaWQgc2N0cF90cmFuc3BvcnRfcG10dShzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKik7Cit2b2lkIHNjdHBfdHJhbnNwb3J0X3BtdHUoc3RydWN0IHNjdHBfdHJhbnNwb3J0ICosIHN0cnVjdCBzb2NrICpzayk7CiB2b2lkIHNjdHBfdHJhbnNwb3J0X2ZyZWUoc3RydWN0IHNjdHBfdHJhbnNwb3J0ICopOwogdm9pZCBzY3RwX3RyYW5zcG9ydF9yZXNldF90aW1lcnMoc3RydWN0IHNjdHBfdHJhbnNwb3J0ICopOwogdm9pZCBzY3RwX3RyYW5zcG9ydF9ob2xkKHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqKTsKQEAgLTE0MDAsNyArMTM5Nyw3IEBACiBpbnQgc2N0cF92ZXJpZnlfaW5pdChjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgc2N0cF9jaWRfdCwKIAkJICAgICBzY3RwX2luaXRfY2h1bmtfdCAqcGVlcl9pbml0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssCiAJCSAgICAgc3RydWN0IHNjdHBfY2h1bmsgKiplcnJfY2h1bmspOwotaW50IHNjdHBfcHJvY2Vzc19pbml0KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosIHNjdHBfY2lkX3QgY2lkLAoraW50IHNjdHBfcHJvY2Vzc19pbml0KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosIHN0cnVjdCBzY3RwX2NodW5rICpjaHVuaywKIAkJICAgICAgY29uc3QgdW5pb24gc2N0cF9hZGRyICpwZWVyLAogCQkgICAgICBzY3RwX2luaXRfY2h1bmtfdCAqaW5pdCwgZ2ZwX3QgZ2ZwKTsKIF9fdTMyIHNjdHBfZ2VuZXJhdGVfdGFnKGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC91bHBldmVudC5oIGIvaW5jbHVkZS9uZXQvc2N0cC91bHBldmVudC5oCmluZGV4IDdlYTEyZTguLjk5YjAyN2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvdWxwZXZlbnQuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3VscGV2ZW50LmgKQEAgLTEzMiw2ICsxMzIsOSBAQAogCWNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCBfX3UxNiBrZXlfaWQsCiAJX191MzIgaW5kaWNhdGlvbiwgZ2ZwX3QgZ2ZwKTsKIAorc3RydWN0IHNjdHBfdWxwZXZlbnQgKnNjdHBfdWxwZXZlbnRfbWFrZV9zZW5kZXJfZHJ5X2V2ZW50KAorCWNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCBnZnBfdCBnZnApOworCiB2b2lkIHNjdHBfdWxwZXZlbnRfcmVhZF9zbmRyY3ZpbmZvKGNvbnN0IHN0cnVjdCBzY3RwX3VscGV2ZW50ICpldmVudCwKIAlzdHJ1Y3QgbXNnaGRyICopOwogX191MTYgc2N0cF91bHBldmVudF9nZXRfbm90aWZpY2F0aW9uX3R5cGUoY29uc3Qgc3RydWN0IHNjdHBfdWxwZXZlbnQgKmV2ZW50KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvdXNlci5oIGIvaW5jbHVkZS9uZXQvc2N0cC91c2VyLmgKaW5kZXggZTczZWJkYS4uMzJmZDUxMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC91c2VyLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC91c2VyLmgKQEAgLTkxLDYgKzkxLDcgQEAKICNkZWZpbmUgU0NUUF9QRUVSX0FVVEhfQ0hVTktTCTI2CS8qIFJlYWQgb25seSAqLwogI2RlZmluZSBTQ1RQX0xPQ0FMX0FVVEhfQ0hVTktTCTI3CS8qIFJlYWQgb25seSAqLwogI2RlZmluZSBTQ1RQX0dFVF9BU1NPQ19OVU1CRVIJMjgJLyogUmVhZCBvbmx5ICovCisjZGVmaW5lIFNDVFBfR0VUX0FTU09DX0lEX0xJU1QJMjkJLyogUmVhZCBvbmx5ICovCiAKIC8qIEludGVybmFsIFNvY2tldCBPcHRpb25zLiBTb21lIG9mIHRoZSBzY3RwIGxpYnJhcnkgZnVuY3Rpb25zIGFyZQogICogaW1wbGVtZW50ZWQgdXNpbmcgdGhlc2Ugc29ja2V0IG9wdGlvbnMuCkBAIC0zNTMsNiArMzU0LDIwIEBACiAKIGVudW0geyBTQ1RQX0FVVEhfTkVXS0VZID0gMCwgfTsKIAorLyoKKyAqIDYuMS45LiBTQ1RQX1NFTkRFUl9EUllfRVZFTlQKKyAqCisgKiBXaGVuIHRoZSBTQ1RQIHN0YWNrIGhhcyBubyBtb3JlIHVzZXIgZGF0YSB0byBzZW5kIG9yIHJldHJhbnNtaXQsIHRoaXMKKyAqIG5vdGlmaWNhdGlvbiBpcyBnaXZlbiB0byB0aGUgdXNlci4gQWxzbywgYXQgdGhlIHRpbWUgd2hlbiBhIHVzZXIgYXBwCisgKiBzdWJzY3JpYmVzIHRvIHRoaXMgZXZlbnQsIGlmIHRoZXJlIGlzIG5vIGRhdGEgdG8gYmUgc2VudCBvcgorICogcmV0cmFuc21pdCwgdGhlIHN0YWNrIHdpbGwgaW1tZWRpYXRlbHkgc2VuZCB1cCB0aGlzIG5vdGlmaWNhdGlvbi4KKyAqLworc3RydWN0IHNjdHBfc2VuZGVyX2RyeV9ldmVudCB7CisJX191MTYgc2VuZGVyX2RyeV90eXBlOworCV9fdTE2IHNlbmRlcl9kcnlfZmxhZ3M7CisJX191MzIgc2VuZGVyX2RyeV9sZW5ndGg7CisJc2N0cF9hc3NvY190IHNlbmRlcl9kcnlfYXNzb2NfaWQ7Cit9OwogCiAvKgogICogRGVzY3JpYmVkIGluIFNlY3Rpb24gNy4zCkBAIC0zNjgsNiArMzgzLDcgQEAKIAlfX3U4IHNjdHBfcGFydGlhbF9kZWxpdmVyeV9ldmVudDsKIAlfX3U4IHNjdHBfYWRhcHRhdGlvbl9sYXllcl9ldmVudDsKIAlfX3U4IHNjdHBfYXV0aGVudGljYXRpb25fZXZlbnQ7CisJX191OCBzY3RwX3NlbmRlcl9kcnlfZXZlbnQ7CiB9OwogCiAvKgpAQCAtMzkxLDYgKzQwNyw3IEBACiAJc3RydWN0IHNjdHBfYWRhcHRhdGlvbl9ldmVudCBzbl9hZGFwdGF0aW9uX2V2ZW50OwogCXN0cnVjdCBzY3RwX3BkYXBpX2V2ZW50IHNuX3BkYXBpX2V2ZW50OwogCXN0cnVjdCBzY3RwX2F1dGhrZXlfZXZlbnQgc25fYXV0aGtleV9ldmVudDsKKwlzdHJ1Y3Qgc2N0cF9zZW5kZXJfZHJ5X2V2ZW50IHNuX3NlbmRlcl9kcnlfZXZlbnQ7CiB9OwogCiAvKiBTZWN0aW9uIDUuMy4xCkBAIC00MDcsNyArNDI0LDkgQEAKIAlTQ1RQX1NIVVRET1dOX0VWRU5ULAogCVNDVFBfUEFSVElBTF9ERUxJVkVSWV9FVkVOVCwKIAlTQ1RQX0FEQVBUQVRJT05fSU5ESUNBVElPTiwKLQlTQ1RQX0FVVEhFTlRJQ0FUSU9OX0lORElDQVRJT04sCisJU0NUUF9BVVRIRU5USUNBVElPTl9FVkVOVCwKKyNkZWZpbmUgU0NUUF9BVVRIRU5USUNBVElPTl9JTkRJQ0FUSU9OCVNDVFBfQVVUSEVOVElDQVRJT05fRVZFTlQKKwlTQ1RQX1NFTkRFUl9EUllfRVZFTlQsCiB9OwogCiAvKiBOb3RpZmljYXRpb24gZXJyb3IgY29kZXMgdXNlZCB0byBmaWxsIHVwIHRoZSBlcnJvciBmaWVsZHMgaW4gc29tZQpAQCAtNjY5LDYgKzY4OCwxOCBAQAogfTsKIAogLyoKKyAqIDguMi42LiBHZXQgdGhlIEN1cnJlbnQgSWRlbnRpZmllcnMgb2YgQXNzb2NpYXRpb25zCisgKiAgICAgICAgKFNDVFBfR0VUX0FTU09DX0lEX0xJU1QpCisgKgorICogVGhpcyBvcHRpb24gZ2V0cyB0aGUgY3VycmVudCBsaXN0IG9mIFNDVFAgYXNzb2NpYXRpb24gaWRlbnRpZmllcnMgb2YKKyAqIHRoZSBTQ1RQIGFzc29jaWF0aW9ucyBoYW5kbGVkIGJ5IGEgb25lLXRvLW1hbnkgc3R5bGUgc29ja2V0LgorICovCitzdHJ1Y3Qgc2N0cF9hc3NvY19pZHMgeworCV9fdTMyCQlnYWlkc19udW1iZXJfb2ZfaWRzOworCXNjdHBfYXNzb2NfdAlnYWlkc19hc3NvY19pZFtdOworfTsKKworLyoKICAqIDguMywgOC41IGdldCBhbGwgcGVlci9sb2NhbCBhZGRyZXNzZXMgaW4gYW4gYXNzb2NpYXRpb24uCiAgKiBUaGlzIHBhcmFtZXRlciBzdHJ1Y3QgaXMgdXNlZCBieSBTQ1RQX0dFVF9QRUVSX0FERFJTIGFuZCAKICAqIFNDVFBfR0VUX0xPQ0FMX0FERFJTIHNvY2tldCBvcHRpb25zIHVzZWQgaW50ZXJuYWxseSB0byBpbXBsZW1lbnQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NubXAuaCBiL2luY2x1ZGUvbmV0L3NubXAuaAppbmRleCAyNzQ2MWQ2Li40NzkwODNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zbm1wLmgKKysrIGIvaW5jbHVkZS9uZXQvc25tcC5oCkBAIC03MiwxNCArNzIsMjQgQEAKIAogLyogSUNNUDYgKElQdjYtSUNNUCkgKi8KICNkZWZpbmUgSUNNUDZfTUlCX01BWAlfX0lDTVA2X01JQl9NQVgKKy8qIHBlciBuZXR3b3JrIG5zIGNvdW50ZXJzICovCiBzdHJ1Y3QgaWNtcHY2X21pYiB7CiAJdW5zaWduZWQgbG9uZwltaWJzW0lDTVA2X01JQl9NQVhdOwogfTsKKy8qIHBlciBkZXZpY2UgY291bnRlcnMsIChzaGFyZWQgb24gYWxsIGNwdXMpICovCitzdHJ1Y3QgaWNtcHY2X21pYl9kZXZpY2UgeworCWF0b21pY19sb25nX3QJbWlic1tJQ01QNl9NSUJfTUFYXTsKK307CiAKICNkZWZpbmUgSUNNUDZNU0dfTUlCX01BWCAgX19JQ01QNk1TR19NSUJfTUFYCisvKiBwZXIgbmV0d29yayBucyBjb3VudGVycyAqLwogc3RydWN0IGljbXB2Nm1zZ19taWIgewogCXVuc2lnbmVkIGxvbmcJbWlic1tJQ01QNk1TR19NSUJfTUFYXTsKIH07CisvKiBwZXIgZGV2aWNlIGNvdW50ZXJzLCAoc2hhcmVkIG9uIGFsbCBjcHVzKSAqLworc3RydWN0IGljbXB2Nm1zZ19taWJfZGV2aWNlIHsKKwlhdG9taWNfbG9uZ190CW1pYnNbSUNNUDZNU0dfTUlCX01BWF07Cit9OwogCiAKIC8qIFRDUCAqLwpAQCAtMTE0LDYgKzEyNCw4IEBACiAgKi8gCiAjZGVmaW5lIERFRklORV9TTk1QX1NUQVQodHlwZSwgbmFtZSkJXAogCV9fdHlwZW9mX18odHlwZSkgX19wZXJjcHUgKm5hbWVbMl0KKyNkZWZpbmUgREVGSU5FX1NOTVBfU1RBVF9BVE9NSUModHlwZSwgbmFtZSkJXAorCV9fdHlwZW9mX18odHlwZSkgKm5hbWUKICNkZWZpbmUgREVDTEFSRV9TTk1QX1NUQVQodHlwZSwgbmFtZSkJXAogCWV4dGVybiBfX3R5cGVvZl9fKHR5cGUpIF9fcGVyY3B1ICpuYW1lWzJdCiAKQEAgLTEyNCw2ICsxMzYsOCBAQAogCQkJX190aGlzX2NwdV9pbmMobWliWzBdLT5taWJzW2ZpZWxkXSkKICNkZWZpbmUgU05NUF9JTkNfU1RBVFNfVVNFUihtaWIsIGZpZWxkKQlcCiAJCQl0aGlzX2NwdV9pbmMobWliWzFdLT5taWJzW2ZpZWxkXSkKKyNkZWZpbmUgU05NUF9JTkNfU1RBVFNfQVRPTUlDX0xPTkcobWliLCBmaWVsZCkJXAorCQkJYXRvbWljX2xvbmdfaW5jKCZtaWItPm1pYnNbZmllbGRdKQogI2RlZmluZSBTTk1QX0lOQ19TVEFUUyhtaWIsIGZpZWxkKQlcCiAJCQl0aGlzX2NwdV9pbmMobWliWyFpbl9zb2Z0aXJxKCldLT5taWJzW2ZpZWxkXSkKICNkZWZpbmUgU05NUF9ERUNfU1RBVFMobWliLCBmaWVsZCkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oCmluZGV4IDAxODEwYTMuLmYyMDQ2ZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9zb2NrLmgKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2ZpbHRlci5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3RfbnVsbHMuaD4KQEAgLTEzODksNiArMTM5MCw1OSBAQAogCXNrLT5za19yb3V0ZV9jYXBzICY9IH5mbGFnczsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgc2tiX2RvX2NvcHlfZGF0YV9ub2NhY2hlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgY2hhciBfX3VzZXIgKmZyb20sIGNoYXIgKnRvLAorCQkJCQkgICBpbnQgY29weSwgaW50IG9mZnNldCkKK3sKKwlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fTk9ORSkgeworCQlpbnQgZXJyID0gMDsKKwkJX193c3VtIGNzdW0gPSBjc3VtX2FuZF9jb3B5X2Zyb21fdXNlcihmcm9tLCB0bywgY29weSwgMCwgJmVycik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlza2ItPmNzdW0gPSBjc3VtX2Jsb2NrX2FkZChza2ItPmNzdW0sIGNzdW0sIG9mZnNldCk7CisJfSBlbHNlIGlmIChzay0+c2tfcm91dGVfY2FwcyAmIE5FVElGX0ZfTk9DQUNIRV9DT1BZKSB7CisJCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBmcm9tLCBjb3B5KSB8fAorCQkgICAgX19jb3B5X2Zyb21fdXNlcl9ub2NhY2hlKHRvLCBmcm9tLCBjb3B5KSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIodG8sIGZyb20sIGNvcHkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBza2JfYWRkX2RhdGFfbm9jYWNoZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgIGNoYXIgX191c2VyICpmcm9tLCBpbnQgY29weSkKK3sKKwlpbnQgZXJyLCBvZmZzZXQgPSBza2ItPmxlbjsKKworCWVyciA9IHNrYl9kb19jb3B5X2RhdGFfbm9jYWNoZShzaywgc2tiLCBmcm9tLCBza2JfcHV0KHNrYiwgY29weSksCisJCQkJICAgICAgIGNvcHksIG9mZnNldCk7CisJaWYgKGVycikKKwkJX19za2JfdHJpbShza2IsIG9mZnNldCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW5saW5lIGludCBza2JfY29weV90b19wYWdlX25vY2FjaGUoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqZnJvbSwKKwkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJCSAgIGludCBvZmYsIGludCBjb3B5KQoreworCWludCBlcnI7CisKKwllcnIgPSBza2JfZG9fY29weV9kYXRhX25vY2FjaGUoc2ssIHNrYiwgZnJvbSwgcGFnZV9hZGRyZXNzKHBhZ2UpICsgb2ZmLAorCQkJCSAgICAgICBjb3B5LCBza2ItPmxlbik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXNrYi0+bGVuCSAgICAgKz0gY29weTsKKwlza2ItPmRhdGFfbGVuCSAgICAgKz0gY29weTsKKwlza2ItPnRydWVzaXplCSAgICAgKz0gY29weTsKKwlzay0+c2tfd21lbV9xdWV1ZWQgICArPSBjb3B5OworCXNrX21lbV9jaGFyZ2Uoc2ssIGNvcHkpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW5saW5lIGludCBza2JfY29weV90b19wYWdlKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKmZyb20sCiAJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJICAgaW50IG9mZiwgaW50IGNvcHkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90cmFuc3BfdjYuaCBiL2luY2x1ZGUvbmV0L3RyYW5zcF92Ni5oCmluZGV4IGE4MTIyZGMuLjUyNzFhNzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RyYW5zcF92Ni5oCisrKyBiL2luY2x1ZGUvbmV0L3RyYW5zcF92Ni5oCkBAIC03LDggKzcsNiBAQAogICoJSVB2NiB0cmFuc3BvcnQgcHJvdG9jb2xzCiAgKi8KIAotI2lmZGVmIF9fS0VSTkVMX18KLQogZXh0ZXJuIHN0cnVjdCBwcm90byByYXd2Nl9wcm90OwogZXh0ZXJuIHN0cnVjdCBwcm90byB1ZHB2Nl9wcm90OwogZXh0ZXJuIHN0cnVjdCBwcm90byB1ZHBsaXRldjZfcHJvdDsKQEAgLTU3LDUgKzU1LDMgQEAKIGV4dGVybiB2b2lkIGluZXQ2X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spOwogCiAjZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC93aW1heC5oIGIvaW5jbHVkZS9uZXQvd2ltYXguaAppbmRleCBjNzk5YmE3Li43MzI4ZDUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC93aW1heC5oCisrKyBiL2luY2x1ZGUvbmV0L3dpbWF4LmgKQEAgLTI1MCw3ICsyNTAsNiBAQAogCiAjaWZuZGVmIF9fTkVUX19XSU1BWF9IX18KICNkZWZpbmUgX19ORVRfX1dJTUFYX0hfXwotI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L3dpbWF4Lmg+CiAjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgpAQCAtNTE4LDggKzUxNyw0IEBACiBleHRlcm4gaW50IHdpbWF4X3Jma2lsbChzdHJ1Y3Qgd2ltYXhfZGV2ICosIGVudW0gd2ltYXhfcmZfc3RhdGUpOwogZXh0ZXJuIGludCB3aW1heF9yZXNldChzdHJ1Y3Qgd2ltYXhfZGV2ICopOwogCi0jZWxzZQotLyogWW91IG1pZ2h0IGJlIGxvb2tpbmcgZm9yIGxpbnV4L3dpbWF4LmggKi8KLSNlcnJvciBUaGlzIGZpbGUgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBmcm9tIHVzZXIgc3BhY2UuCi0jZW5kaWYgLyogI2lmZGVmIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiAjaWZuZGVmIF9fTkVUX19XSU1BWF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hmcm0uaCBiL2luY2x1ZGUvbmV0L3hmcm0uaAppbmRleCA2YWU0YmM1Li5iMjAzZTE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC94ZnJtLmgKKysrIGIvaW5jbHVkZS9uZXQveGZybS5oCkBAIC0zMjQsNiArMzI0LDcgQEAKIAlpbnQJCQkoKnRtcGxfc29ydCkoc3RydWN0IHhmcm1fdG1wbCAqKmRzdCwgc3RydWN0IHhmcm1fdG1wbCAqKnNyYywgaW50IG4pOwogCWludAkJCSgqc3RhdGVfc29ydCkoc3RydWN0IHhmcm1fc3RhdGUgKipkc3QsIHN0cnVjdCB4ZnJtX3N0YXRlICoqc3JjLCBpbnQgbik7CiAJaW50CQkJKCpvdXRwdXQpKHN0cnVjdCBza19idWZmICpza2IpOworCWludAkJCSgqb3V0cHV0X2ZpbmlzaCkoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAJaW50CQkJKCpleHRyYWN0X2lucHV0KShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwKIAkJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAlpbnQJCQkoKmV4dHJhY3Rfb3V0cHV0KShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwKQEAgLTk1Nyw2ICs5NTgsMTUgQEAKIAlzdHJ1Y3QgeGZybV9zdGF0ZQkqeHZlY1tYRlJNX01BWF9ERVBUSF07CiB9OwogCitzdGF0aWMgaW5saW5lIGludCBzZWNwYXRoX2V4aXN0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworI2lmZGVmIENPTkZJR19YRlJNCisJcmV0dXJuIHNrYi0+c3AgIT0gTlVMTDsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKwogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2VjX3BhdGggKgogc2VjcGF0aF9nZXQoc3RydWN0IHNlY19wYXRoICpzcCkKIHsKQEAgLTE0NTQsNiArMTQ2NCw3IEBACiBleHRlcm4gaW50IHhmcm00X2V4dHJhY3Rfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQgeGZybTRfcHJlcGFyZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludCB4ZnJtNF9vdXRwdXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IHhmcm00X291dHB1dF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gaW50IHhmcm00X3R1bm5lbF9yZWdpc3RlcihzdHJ1Y3QgeGZybV90dW5uZWwgKmhhbmRsZXIsIHVuc2lnbmVkIHNob3J0IGZhbWlseSk7CiBleHRlcm4gaW50IHhmcm00X3R1bm5lbF9kZXJlZ2lzdGVyKHN0cnVjdCB4ZnJtX3R1bm5lbCAqaGFuZGxlciwgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTsKIGV4dGVybiBpbnQgeGZybTZfZXh0cmFjdF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYik7CkBAIC0xNDY2LDEwICsxNDc3LDExIEBACiBleHRlcm4gaW50IHhmcm02X3R1bm5lbF9yZWdpc3RlcihzdHJ1Y3QgeGZybTZfdHVubmVsICpoYW5kbGVyLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpOwogZXh0ZXJuIGludCB4ZnJtNl90dW5uZWxfZGVyZWdpc3RlcihzdHJ1Y3QgeGZybTZfdHVubmVsICpoYW5kbGVyLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpOwogZXh0ZXJuIF9fYmUzMiB4ZnJtNl90dW5uZWxfYWxsb2Nfc3BpKHN0cnVjdCBuZXQgKm5ldCwgeGZybV9hZGRyZXNzX3QgKnNhZGRyKTsKLWV4dGVybiBfX2JlMzIgeGZybTZfdHVubmVsX3NwaV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIpOworZXh0ZXJuIF9fYmUzMiB4ZnJtNl90dW5uZWxfc3BpX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkcik7CiBleHRlcm4gaW50IHhmcm02X2V4dHJhY3Rfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQgeGZybTZfcHJlcGFyZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludCB4ZnJtNl9vdXRwdXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IHhmcm02X291dHB1dF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gaW50IHhmcm02X2ZpbmRfMXN0ZnJhZ29wdChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgdTggKipwcmV2aGRyKTsKIApAQCAtMTU2MCw4ICsxNTcyLDggQEAKIAljYXNlIEFGX0lORVQ6CiAJCXJldHVybiAoX19mb3JjZSB1MzIpYS0+YTQgLSAoX19mb3JjZSB1MzIpYi0+YTQ7CiAJY2FzZSBBRl9JTkVUNjoKLQkJcmV0dXJuIGlwdjZfYWRkcl9jbXAoKHN0cnVjdCBpbjZfYWRkciAqKWEsCi0JCQkJICAgICAoc3RydWN0IGluNl9hZGRyICopYik7CisJCXJldHVybiBpcHY2X2FkZHJfY21wKChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKilhLAorCQkJCSAgICAgKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqKWIpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX2FkZHIuaCBiL2luY2x1ZGUvcmRtYS9pYl9hZGRyLmgKaW5kZXggYjVmYzlmMy4uYWU4YzY4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX2FkZHIuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfYWRkci5oCkBAIC0yMTcsMTggKzIxNywxOSBAQAogc3RhdGljIGlubGluZSBpbnQgaWJvZV9nZXRfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBldGh0b29sX2NtZCBjbWQ7CisJdTMyIHNwZWVkOwogCi0JaWYgKCFkZXYtPmV0aHRvb2xfb3BzIHx8ICFkZXYtPmV0aHRvb2xfb3BzLT5nZXRfc2V0dGluZ3MgfHwKLQkgICAgZGV2LT5ldGh0b29sX29wcy0+Z2V0X3NldHRpbmdzKGRldiwgJmNtZCkpCisJaWYgKGRldl9ldGh0b29sX2dldF9zZXR0aW5ncyhkZXYsICZjbWQpKQogCQlyZXR1cm4gSUJfUkFURV9QT1JUX0NVUlJFTlQ7CiAKLQlpZiAoY21kLnNwZWVkID49IDQwMDAwKQorCXNwZWVkID0gZXRodG9vbF9jbWRfc3BlZWQoJmNtZCk7CisJaWYgKHNwZWVkID49IDQwMDAwKQogCQlyZXR1cm4gSUJfUkFURV80MF9HQlBTOwotCWVsc2UgaWYgKGNtZC5zcGVlZCA+PSAzMDAwMCkKKwllbHNlIGlmIChzcGVlZCA+PSAzMDAwMCkKIAkJcmV0dXJuIElCX1JBVEVfMzBfR0JQUzsKLQllbHNlIGlmIChjbWQuc3BlZWQgPj0gMjAwMDApCisJZWxzZSBpZiAoc3BlZWQgPj0gMjAwMDApCiAJCXJldHVybiBJQl9SQVRFXzIwX0dCUFM7Ci0JZWxzZSBpZiAoY21kLnNwZWVkID49IDEwMDAwKQorCWVsc2UgaWYgKHNwZWVkID49IDEwMDAwKQogCQlyZXR1cm4gSUJfUkFURV8xMF9HQlBTOwogCWVsc2UKIAkJcmV0dXJuIElCX1JBVEVfUE9SVF9DVVJSRU5UOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2l3X2NtLmggYi9pbmNsdWRlL3JkbWEvaXdfY20uaAppbmRleCBjYmI4MjJlLi4yZDAxOTFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaXdfY20uaAorKysgYi9pbmNsdWRlL3JkbWEvaXdfY20uaApAQCAtNDYsMTggKzQ2LDkgQEAKIAlJV19DTV9FVkVOVF9DTE9TRQkJIC8qIGNsb3NlIGNvbXBsZXRlICovCiB9OwogCi1lbnVtIGl3X2NtX2V2ZW50X3N0YXR1cyB7Ci0JSVdfQ01fRVZFTlRfU1RBVFVTX09LID0gMCwJIC8qIHJlcXVlc3Qgc3VjY2Vzc2Z1bCAqLwotCUlXX0NNX0VWRU5UX1NUQVRVU19BQ0NFUFRFRCA9IDAsIC8qIGNvbm5lY3QgcmVxdWVzdCBhY2NlcHRlZCAqLwotCUlXX0NNX0VWRU5UX1NUQVRVU19SRUpFQ1RFRCwJIC8qIGNvbm5lY3QgcmVxdWVzdCByZWplY3RlZCAqLwotCUlXX0NNX0VWRU5UX1NUQVRVU19USU1FT1VULAkgLyogdGhlIG9wZXJhdGlvbiB0aW1lZCBvdXQgKi8KLQlJV19DTV9FVkVOVF9TVEFUVVNfUkVTRVQsCSAvKiByZXNldCBmcm9tIHJlbW90ZSBwZWVyICovCi0JSVdfQ01fRVZFTlRfU1RBVFVTX0VJTlZBTCwJIC8qIGFzeW5jaHJvbm91cyBmYWlsdXJlIGZvciBiYWQgcGFybSAqLwotfTsKLQogc3RydWN0IGl3X2NtX2V2ZW50IHsKIAllbnVtIGl3X2NtX2V2ZW50X3R5cGUgZXZlbnQ7Ci0JZW51bSBpd19jbV9ldmVudF9zdGF0dXMgc3RhdHVzOworCWludAkJCSBzdGF0dXM7CiAJc3RydWN0IHNvY2thZGRyX2luIGxvY2FsX2FkZHI7CiAJc3RydWN0IHNvY2thZGRyX2luIHJlbW90ZV9hZGRyOwogCXZvaWQgKnByaXZhdGVfZGF0YTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9yZG1hX2NtLmggYi9pbmNsdWRlL3JkbWEvcmRtYV9jbS5oCmluZGV4IDRmYWU5MDMuLjE2OWY3YTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9yZG1hX2NtLmgKKysrIGIvaW5jbHVkZS9yZG1hL3JkbWFfY20uaApAQCAtMzI5LDQgKzMyOSwxNCBAQAogICovCiB2b2lkIHJkbWFfc2V0X3NlcnZpY2VfdHlwZShzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIGludCB0b3MpOwogCisvKioKKyAqIHJkbWFfc2V0X3JldXNlYWRkciAtIEFsbG93IHRoZSByZXVzZSBvZiBsb2NhbCBhZGRyZXNzZXMgd2hlbiBiaW5kaW5nCisgKiAgICB0aGUgcmRtYV9jbV9pZC4KKyAqIEBpZDogQ29tbXVuaWNhdGlvbiBpZGVudGlmaWVyIHRvIGNvbmZpZ3VyZS4KKyAqIEByZXVzZTogVmFsdWUgaW5kaWNhdGluZyBpZiB0aGUgYm91bmQgYWRkcmVzcyBpcyByZXVzYWJsZS4KKyAqCisgKiBSZXVzZSBtdXN0IGJlIHNldCBiZWZvcmUgYW4gYWRkcmVzcyBpcyBib3VuZCB0byB0aGUgaWQuCisgKi8KK2ludCByZG1hX3NldF9yZXVzZWFkZHIoc3RydWN0IHJkbWFfY21faWQgKmlkLCBpbnQgcmV1c2UpOworCiAjZW5kaWYgLyogUkRNQV9DTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvcmRtYV91c2VyX2NtLmggYi9pbmNsdWRlL3JkbWEvcmRtYV91c2VyX2NtLmgKaW5kZXggMWQxNjUwMi4uZmM4MmMxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL3JkbWFfdXNlcl9jbS5oCisrKyBiL2luY2x1ZGUvcmRtYS9yZG1hX3VzZXJfY20uaApAQCAtMjIxLDggKzIyMSw5IEBACiAKIC8qIE9wdGlvbiBkZXRhaWxzICovCiBlbnVtIHsKLQlSRE1BX09QVElPTl9JRF9UT1MJPSAwLAotCVJETUFfT1BUSU9OX0lCX1BBVEgJPSAxCisJUkRNQV9PUFRJT05fSURfVE9TCSA9IDAsCisJUkRNQV9PUFRJT05fSURfUkVVU0VBRERSID0gMSwKKwlSRE1BX09QVElPTl9JQl9QQVRICSA9IDEKIH07CiAKIHN0cnVjdCByZG1hX3VjbV9zZXRfb3B0aW9uIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKaW5kZXggMmQzZWM1MC4uZGQ4MmUwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKQEAgLTE2OSw2ICsxNjksNyBAQAogCQkJCXNkZXZfZGV2OwogCiAJc3RydWN0IGV4ZWN1dGVfd29yawlldzsgLyogdXNlZCB0byBnZXQgcHJvY2VzcyBjb250ZXh0IG9uIHB1dCAqLworCXN0cnVjdCB3b3JrX3N0cnVjdAlyZXF1ZXVlX3dvcms7CiAKIAlzdHJ1Y3Qgc2NzaV9kaF9kYXRhCSpzY3NpX2RoX2RhdGE7CiAJZW51bSBzY3NpX2RldmljZV9zdGF0ZSBzZGV2X3N0YXRlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvZ2ZwZmxhZ3MuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2dmcGZsYWdzLmgKaW5kZXggZTM2MTVjMC4uOWZlM2EzNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvZ2ZwZmxhZ3MuaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9nZnBmbGFncy5oCkBAIC0xMCw2ICsxMCw3IEBACiAgKi8KICNkZWZpbmUgc2hvd19nZnBfZmxhZ3MoZmxhZ3MpCQkJCQkJXAogCShmbGFncykgPyBfX3ByaW50X2ZsYWdzKGZsYWdzLCAifCIsCQkJCVwKKwl7KHVuc2lnbmVkIGxvbmcpR0ZQX1RSQU5TSFVHRSwJCSJHRlBfVFJBTlNIVUdFIn0sCVwKIAl7KHVuc2lnbmVkIGxvbmcpR0ZQX0hJR0hVU0VSX01PVkFCTEUsCSJHRlBfSElHSFVTRVJfTU9WQUJMRSJ9LCBcCiAJeyh1bnNpZ25lZCBsb25nKUdGUF9ISUdIVVNFUiwJCSJHRlBfSElHSFVTRVIifSwJXAogCXsodW5zaWduZWQgbG9uZylHRlBfVVNFUiwJCSJHRlBfVVNFUiJ9LAkJXApAQCAtMzIsNiArMzMsOSBAQAogCXsodW5zaWduZWQgbG9uZylfX0dGUF9IQVJEV0FMTCwJCSJHRlBfSEFSRFdBTEwifSwJXAogCXsodW5zaWduZWQgbG9uZylfX0dGUF9USElTTk9ERSwJCSJHRlBfVEhJU05PREUifSwJXAogCXsodW5zaWduZWQgbG9uZylfX0dGUF9SRUNMQUlNQUJMRSwJIkdGUF9SRUNMQUlNQUJMRSJ9LAlcCi0Jeyh1bnNpZ25lZCBsb25nKV9fR0ZQX01PVkFCTEUsCQkiR0ZQX01PVkFCTEUifQkJXAorCXsodW5zaWduZWQgbG9uZylfX0dGUF9NT1ZBQkxFLAkJIkdGUF9NT1ZBQkxFIn0sCQlcCisJeyh1bnNpZ25lZCBsb25nKV9fR0ZQX05PVFJBQ0ssCQkiR0ZQX05PVFJBQ0sifSwJCVwKKwl7KHVuc2lnbmVkIGxvbmcpX19HRlBfTk9fS1NXQVBELAkiR0ZQX05PX0tTV0FQRCJ9LAlcCisJeyh1bnNpZ25lZCBsb25nKV9fR0ZQX09USEVSX05PREUsCSJHRlBfT1RIRVJfTk9ERSJ9CVwKIAkpIDogIkdGUF9OT1dBSVQiCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2lycS5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvaXJxLmgKaW5kZXggMWMwOTgyMC4uYWUwNDVjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvaXJxLmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvaXJxLmgKQEAgLTIwLDggKzIwLDcgQEAKIAkJCSBzb2Z0aXJxX25hbWUoQkxPQ0tfSU9QT0xMKSwJXAogCQkJIHNvZnRpcnFfbmFtZShUQVNLTEVUKSwJCVwKIAkJCSBzb2Z0aXJxX25hbWUoU0NIRUQpLAkJXAotCQkJIHNvZnRpcnFfbmFtZShIUlRJTUVSKSwJCVwKLQkJCSBzb2Z0aXJxX25hbWUoUkNVKSkKKwkJCSBzb2Z0aXJxX25hbWUoSFJUSU1FUikpCiAKIC8qKgogICogaXJxX2hhbmRsZXJfZW50cnkgLSBjYWxsZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBpcnEgYWN0aW9uIGhhbmRsZXIKZGlmZiAtLWdpdCBhL2luY2x1ZGUveGVuL2V2ZW50cy5oIGIvaW5jbHVkZS94ZW4vZXZlbnRzLmgKaW5kZXggZjFiODdhZC4uOWFmMjFlMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS94ZW4vZXZlbnRzLmgKKysrIGIvaW5jbHVkZS94ZW4vZXZlbnRzLmgKQEAgLTg1LDcgKzg1LDggQEAKIGludCB4ZW5fYWxsb2NhdGVfcGlycV9tc2koc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IG1zaV9kZXNjICptc2lkZXNjKTsKIC8qIEJpbmQgYW4gUFNJIHBpcnEgdG8gYW4gaXJxLiAqLwogaW50IHhlbl9iaW5kX3BpcnFfbXNpX3RvX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgbXNpX2Rlc2MgKm1zaWRlc2MsCi0JCQkgICAgIGludCBwaXJxLCBpbnQgdmVjdG9yLCBjb25zdCBjaGFyICpuYW1lKTsKKwkJCSAgICAgaW50IHBpcnEsIGludCB2ZWN0b3IsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgIGRvbWlkX3QgZG9taWQpOwogI2VuZGlmCiAKIC8qIERlLWFsbG9jYXRlcyB0aGUgYWJvdmUgbWVudGlvbmVkIHBoeXNpY2FsIGludGVycnVwdC4gKi8KQEAgLTk0LDQgKzk1LDEwIEBACiAvKiBSZXR1cm4gaXJxIGZyb20gcGlycSAqLwogaW50IHhlbl9pcnFfZnJvbV9waXJxKHVuc2lnbmVkIHBpcnEpOwogCisvKiBSZXR1cm4gdGhlIHBpcnEgYWxsb2NhdGVkIHRvIHRoZSBpcnEuICovCitpbnQgeGVuX3BpcnFfZnJvbV9pcnEodW5zaWduZWQgaXJxKTsKKworLyogRGV0ZXJtaW5lIHdoZXRoZXIgdG8gaWdub3JlIHRoaXMgSVJRIGlmIGl0IGlzIHBhc3NlZCB0byBhIGd1ZXN0LiAqLworaW50IHhlbl90ZXN0X2lycV9zaGFyZWQoaW50IGlycSk7CisKICNlbmRpZgkvKiBfWEVOX0VWRU5UU19IICovCmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWcKaW5kZXggNTYyNDBlNy4uYzhiMTcyZSAxMDA2NDQKLS0tIGEvaW5pdC9LY29uZmlnCisrKyBiL2luaXQvS2NvbmZpZwpAQCAtNDg1LDcgKzQ4NSw3IEBACiAKIGNvbmZpZyBSQ1VfQk9PU1QKIAlib29sICJFbmFibGUgUkNVIHByaW9yaXR5IGJvb3N0aW5nIgotCWRlcGVuZHMgb24gUlRfTVVURVhFUyAmJiBUSU5ZX1BSRUVNUFRfUkNVCisJZGVwZW5kcyBvbiBSVF9NVVRFWEVTICYmIFBSRUVNUFRfUkNVCiAJZGVmYXVsdCBuCiAJaGVscAogCSAgVGhpcyBvcHRpb24gYm9vc3RzIHRoZSBwcmlvcml0eSBvZiBwcmVlbXB0ZWQgUkNVIHJlYWRlcnMgdGhhdApAQCAtOTAzLDcgKzkwMyw2IEBACiAKIGNvbmZpZyBDQ19PUFRJTUlaRV9GT1JfU0laRQogCWJvb2wgIk9wdGltaXplIGZvciBzaXplIgotCWRlZmF1bHQgeQogCWhlbHAKIAkgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgcGFzcyAiLU9zIiBpbnN0ZWFkIG9mICItTzIiIHRvIGdjYwogCSAgcmVzdWx0aW5nIGluIGEgc21hbGxlciBrZXJuZWwuCkBAIC05MjQsMTQgKzkyMyw2IEBACiAgICAgICAgICAgZW52aXJvbm1lbnRzIHdoaWNoIGNhbiB0b2xlcmF0ZSBhICJub24tc3RhbmRhcmQiIGtlcm5lbC4KICAgICAgICAgICBPbmx5IHVzZSB0aGlzIGlmIHlvdSByZWFsbHkga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCiAKLWNvbmZpZyBFTUJFRERFRAotCWJvb2wgIkVtYmVkZGVkIHN5c3RlbSIKLQlzZWxlY3QgRVhQRVJUCi0JaGVscAotCSAgVGhpcyBvcHRpb24gc2hvdWxkIGJlIGVuYWJsZWQgaWYgY29tcGlsaW5nIHRoZSBrZXJuZWwgZm9yCi0JICBhbiBlbWJlZGRlZCBzeXN0ZW0gc28gY2VydGFpbiBleHBlcnQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlCi0JICBmb3IgY29uZmlndXJhdGlvbi4KLQogY29uZmlnIFVJRDE2CiAJYm9vbCAiRW5hYmxlIDE2LWJpdCBVSUQgc3lzdGVtIGNhbGxzIiBpZiBFWFBFUlQKIAlkZXBlbmRzIG9uIEFSTSB8fCBCTEFDS0ZJTiB8fCBDUklTIHx8IEZSViB8fCBIODMwMCB8fCBYODZfMzIgfHwgTTY4SyB8fCAoUzM5MCAmJiAhNjRCSVQpIHx8IFNVUEVSSCB8fCBTUEFSQzMyIHx8IChTUEFSQzY0ICYmIENPTVBBVCkgfHwgVU1MIHx8IChYODZfNjQgJiYgSUEzMl9FTVVMQVRJT04pCkBAIC0xMTA0LDYgKzEwOTUsMTQgQEAKICAgICAgICAgICBieSBzb21lIGhpZ2ggcGVyZm9ybWFuY2UgdGhyZWFkZWQgYXBwbGljYXRpb25zLiBEaXNhYmxpbmcKICAgICAgICAgICB0aGlzIG9wdGlvbiBzYXZlcyBhYm91dCA3ay4KIAorY29uZmlnIEVNQkVEREVECisJYm9vbCAiRW1iZWRkZWQgc3lzdGVtIgorCXNlbGVjdCBFWFBFUlQKKwloZWxwCisJICBUaGlzIG9wdGlvbiBzaG91bGQgYmUgZW5hYmxlZCBpZiBjb21waWxpbmcgdGhlIGtlcm5lbCBmb3IKKwkgIGFuIGVtYmVkZGVkIHN5c3RlbSBzbyBjZXJ0YWluIGV4cGVydCBvcHRpb25zIGFyZSBhdmFpbGFibGUKKwkgIGZvciBjb25maWd1cmF0aW9uLgorCiBjb25maWcgSEFWRV9QRVJGX0VWRU5UUwogCWJvb2wKIAloZWxwCmRpZmYgLS1naXQgYS9pbml0L21haW4uYyBiL2luaXQvbWFpbi5jCmluZGV4IDRhOTQ3OWUuLjQ4ZGY4ODIgMTAwNjQ0Ci0tLSBhL2luaXQvbWFpbi5jCisrKyBiL2luaXQvbWFpbi5jCkBAIC01ODAsOCArNTgwLDggQEAKICNlbmRpZgogCXBhZ2VfY2dyb3VwX2luaXQoKTsKIAllbmFibGVfZGVidWdfcGFnZWFsbG9jKCk7Ci0Ja21lbWxlYWtfaW5pdCgpOwogCWRlYnVnX29iamVjdHNfbWVtX2luaXQoKTsKKwlrbWVtbGVha19pbml0KCk7CiAJc2V0dXBfcGVyX2NwdV9wYWdlc2V0KCk7CiAJbnVtYV9wb2xpY3lfaW5pdCgpOwogCWlmIChsYXRlX3RpbWVfaW5pdCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9NYWtlZmlsZSBiL2tlcm5lbC9NYWtlZmlsZQppbmRleCA4NWNiZmIzLi5lOWNmMTkxIDEwMDY0NAotLS0gYS9rZXJuZWwvTWFrZWZpbGUKKysrIGIva2VybmVsL01ha2VmaWxlCkBAIC0yMSw3ICsyMSw2IEBACiBDRkxBR1NfUkVNT1ZFX3J0bXV0ZXgtZGVidWcubyA9IC1wZwogQ0ZMQUdTX1JFTU9WRV9jZ3JvdXAtZGVidWcubyA9IC1wZwogQ0ZMQUdTX1JFTU9WRV9zY2hlZF9jbG9jay5vID0gLXBnCi1DRkxBR1NfUkVNT1ZFX3BlcmZfZXZlbnQubyA9IC1wZwogQ0ZMQUdTX1JFTU9WRV9pcnFfd29yay5vID0gLXBnCiBlbmRpZgogCkBAIC0xMDMsOCArMTAyLDkgQEAKIG9iai0kKENPTkZJR19UUkFDRVBPSU5UUykgKz0gdHJhY2UvCiBvYmotJChDT05GSUdfU01QKSArPSBzY2hlZF9jcHVwcmkubwogb2JqLSQoQ09ORklHX0lSUV9XT1JLKSArPSBpcnFfd29yay5vCi1vYmotJChDT05GSUdfUEVSRl9FVkVOVFMpICs9IHBlcmZfZXZlbnQubwotb2JqLSQoQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVCkgKz0gaHdfYnJlYWtwb2ludC5vCisKK29iai0kKENPTkZJR19QRVJGX0VWRU5UUykgKz0gZXZlbnRzLworCiBvYmotJChDT05GSUdfVVNFUl9SRVRVUk5fTk9USUZJRVIpICs9IHVzZXItcmV0dXJuLW5vdGlmaWVyLm8KIG9iai0kKENPTkZJR19QQURBVEEpICs9IHBhZGF0YS5vCiBvYmotJChDT05GSUdfQ1JBU0hfRFVNUCkgKz0gY3Jhc2hfZHVtcC5vCmRpZmYgLS1naXQgYS9rZXJuZWwvY2FwYWJpbGl0eS5jIGIva2VybmVsL2NhcGFiaWxpdHkuYwppbmRleCBiZjBjNzM0Li4zMmE4MGUwIDEwMDY0NAotLS0gYS9rZXJuZWwvY2FwYWJpbGl0eS5jCisrKyBiL2tlcm5lbC9jYXBhYmlsaXR5LmMKQEAgLTM5OSwzICszOTksMTUgQEAKIAlyZXR1cm4gbnNfY2FwYWJsZSh0YXNrX2NyZWRfeHh4KHQsIHVzZXIpLT51c2VyX25zLCBjYXApOwogfQogRVhQT1JUX1NZTUJPTCh0YXNrX25zX2NhcGFibGUpOworCisvKioKKyAqIG5zb3duX2NhcGFibGUgLSBDaGVjayBzdXBlcmlvciBjYXBhYmlsaXR5IHRvIG9uZSdzIG93biB1c2VyX25zCisgKiBAY2FwOiBUaGUgY2FwYWJpbGl0eSBpbiBxdWVzdGlvbgorICoKKyAqIFJldHVybiB0cnVlIGlmIHRoZSBjdXJyZW50IHRhc2sgaGFzIHRoZSBnaXZlbiBzdXBlcmlvciBjYXBhYmlsaXR5CisgKiB0YXJnZXRlZCBhdCBpdHMgb3duIHVzZXIgbmFtZXNwYWNlLgorICovCitib29sIG5zb3duX2NhcGFibGUoaW50IGNhcCkKK3sKKwlyZXR1cm4gbnNfY2FwYWJsZShjdXJyZW50X3VzZXJfbnMoKSwgY2FwKTsKK30KZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAuYyBiL2tlcm5lbC9jZ3JvdXAuYwppbmRleCAyNWM3ZWI1Li45MDlhMzU1IDEwMDY0NAotLS0gYS9rZXJuZWwvY2dyb3VwLmMKKysrIGIva2VybmVsL2Nncm91cC5jCkBAIC0zMjYsMTIgKzMyNiw2IEBACiAJcmV0dXJuICZjc3Nfc2V0X3RhYmxlW2luZGV4XTsKIH0KIAotc3RhdGljIHZvaWQgZnJlZV9jc3Nfc2V0X3JjdShzdHJ1Y3QgcmN1X2hlYWQgKm9iaikKLXsKLQlzdHJ1Y3QgY3NzX3NldCAqY2cgPSBjb250YWluZXJfb2Yob2JqLCBzdHJ1Y3QgY3NzX3NldCwgcmN1X2hlYWQpOwotCWtmcmVlKGNnKTsKLX0KLQogLyogV2UgZG9uJ3QgbWFpbnRhaW4gdGhlIGxpc3RzIHJ1bm5pbmcgdGhyb3VnaCBlYWNoIGNzc19zZXQgdG8gaXRzCiAgKiB0YXNrIHVudGlsIGFmdGVyIHRoZSBmaXJzdCBjYWxsIHRvIGNncm91cF9pdGVyX3N0YXJ0KCkuIFRoaXMKICAqIHJlZHVjZXMgdGhlIGZvcmsoKS9leGl0KCkgb3ZlcmhlYWQgZm9yIHBlb3BsZSB3aG8gaGF2ZSBjZ3JvdXBzCkBAIC0zNzUsNyArMzY5LDcgQEAKIAl9CiAKIAl3cml0ZV91bmxvY2soJmNzc19zZXRfbG9jayk7Ci0JY2FsbF9yY3UoJmNnLT5yY3VfaGVhZCwgZnJlZV9jc3Nfc2V0X3JjdSk7CisJa2ZyZWVfcmN1KGNnLCByY3VfaGVhZCk7CiB9CiAKIC8qCkBAIC04MTIsMTMgKzgwNiw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgZnJlZV9jZ3JvdXBfcmN1KHN0cnVjdCByY3VfaGVhZCAqb2JqKQotewotCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSBjb250YWluZXJfb2Yob2JqLCBzdHJ1Y3QgY2dyb3VwLCByY3VfaGVhZCk7Ci0KLQlrZnJlZShjZ3JwKTsKLX0KLQogc3RhdGljIHZvaWQgY2dyb3VwX2RpcHV0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAkvKiBpcyBkZW50cnkgYSBkaXJlY3RvcnkgPyBpZiBzbywga2ZyZWUoKSBhc3NvY2lhdGVkIGNncm91cCAqLwpAQCAtODU2LDcgKzg0Myw3IEBACiAJCSAqLwogCQlCVUdfT04oIWxpc3RfZW1wdHkoJmNncnAtPnBpZGxpc3RzKSk7CiAKLQkJY2FsbF9yY3UoJmNncnAtPnJjdV9oZWFkLCBmcmVlX2Nncm91cF9yY3UpOworCQlrZnJlZV9yY3UoY2dycCwgcmN1X2hlYWQpOwogCX0KIAlpcHV0KGlub2RlKTsKIH0KQEAgLTQ2MjMsMTQgKzQ2MTAsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZnJlZV9jc3NfaWRfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKQotewotCXN0cnVjdCBjc3NfaWQgKmlkOwotCi0JaWQgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGNzc19pZCwgcmN1X2hlYWQpOwotCWtmcmVlKGlkKTsKLX0KLQogdm9pZCBmcmVlX2Nzc19pZChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiB7CiAJc3RydWN0IGNzc19pZCAqaWQgPSBjc3MtPmlkOwpAQCAtNDY0NSw3ICs0NjI0LDcgQEAKIAlzcGluX2xvY2soJnNzLT5pZF9sb2NrKTsKIAlpZHJfcmVtb3ZlKCZzcy0+aWRyLCBpZC0+aWQpOwogCXNwaW5fdW5sb2NrKCZzcy0+aWRfbG9jayk7Ci0JY2FsbF9yY3UoJmlkLT5yY3VfaGVhZCwgX19mcmVlX2Nzc19pZF9jYik7CisJa2ZyZWVfcmN1KGlkLCByY3VfaGVhZCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChmcmVlX2Nzc19pZCk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9jb21wYXQuYyBiL2tlcm5lbC9jb21wYXQuYwppbmRleCAzOGIxZDJjLi45MjE0ZGNkIDEwMDY0NAotLS0gYS9rZXJuZWwvY29tcGF0LmMKKysrIGIva2VybmVsL2NvbXBhdC5jCkBAIC04OTAsMTAgKzg5MCw5IEBACiB7CiAJY29tcGF0X3NpZ3NldF90IHMzMjsKIAlzaWdzZXRfdCBzOwotCWludCBzaWc7CiAJc3RydWN0IHRpbWVzcGVjIHQ7CiAJc2lnaW5mb190IGluZm87Ci0JbG9uZyByZXQsIHRpbWVvdXQgPSAwOworCWxvbmcgcmV0OwogCiAJaWYgKHNpZ3NldHNpemUgIT0gc2l6ZW9mKHNpZ3NldF90KSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC05MDEsNTEgKzkwMCwxOSBAQAogCWlmIChjb3B5X2Zyb21fdXNlcigmczMyLCB1dGhlc2UsIHNpemVvZihjb21wYXRfc2lnc2V0X3QpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJc2lnc2V0X2Zyb21fY29tcGF0KCZzLCAmczMyKTsKLQlzaWdkZWxzZXRtYXNrKCZzLHNpZ21hc2soU0lHS0lMTCl8c2lnbWFzayhTSUdTVE9QKSk7Ci0Jc2lnbm90c2V0KCZzKTsKIAogCWlmICh1dHMpIHsKLQkJaWYgKGdldF9jb21wYXRfdGltZXNwZWMgKCZ0LCB1dHMpKQorCQlpZiAoZ2V0X2NvbXBhdF90aW1lc3BlYygmdCwgdXRzKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQlpZiAodC50dl9uc2VjID49IDEwMDAwMDAwMDBMIHx8IHQudHZfbnNlYyA8IDAKLQkJCQl8fCB0LnR2X3NlYyA8IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQlzaWcgPSBkZXF1ZXVlX3NpZ25hbChjdXJyZW50LCAmcywgJmluZm8pOwotCWlmICghc2lnKSB7Ci0JCXRpbWVvdXQgPSBNQVhfU0NIRURVTEVfVElNRU9VVDsKLQkJaWYgKHV0cykKLQkJCXRpbWVvdXQgPSB0aW1lc3BlY190b19qaWZmaWVzKCZ0KQotCQkJCSsodC50dl9zZWMgfHwgdC50dl9uc2VjKTsKLQkJaWYgKHRpbWVvdXQpIHsKLQkJCWN1cnJlbnQtPnJlYWxfYmxvY2tlZCA9IGN1cnJlbnQtPmJsb2NrZWQ7Ci0JCQlzaWdhbmRzZXRzKCZjdXJyZW50LT5ibG9ja2VkLCAmY3VycmVudC0+YmxvY2tlZCwgJnMpOworCXJldCA9IGRvX3NpZ3RpbWVkd2FpdCgmcywgJmluZm8sIHV0cyA/ICZ0IDogTlVMTCk7CiAKLQkJCXJlY2FsY19zaWdwZW5kaW5nKCk7Ci0JCQlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCi0JCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKHRpbWVvdXQpOwotCi0JCQlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQkJCXNpZyA9IGRlcXVldWVfc2lnbmFsKGN1cnJlbnQsICZzLCAmaW5mbyk7Ci0JCQljdXJyZW50LT5ibG9ja2VkID0gY3VycmVudC0+cmVhbF9ibG9ja2VkOwotCQkJc2lnaW5pdHNldCgmY3VycmVudC0+cmVhbF9ibG9ja2VkLCAwKTsKLQkJCXJlY2FsY19zaWdwZW5kaW5nKCk7Ci0JCX0KKwlpZiAocmV0ID4gMCAmJiB1aW5mbykgeworCQlpZiAoY29weV9zaWdpbmZvX3RvX3VzZXIzMih1aW5mbywgJmluZm8pKQorCQkJcmV0ID0gLUVGQVVMVDsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKIAotCWlmIChzaWcpIHsKLQkJcmV0ID0gc2lnOwotCQlpZiAodWluZm8pIHsKLQkJCWlmIChjb3B5X3NpZ2luZm9fdG9fdXNlcjMyKHVpbmZvLCAmaW5mbykpCi0JCQkJcmV0ID0gLUVGQVVMVDsKLQkJfQotCX1lbHNlIHsKLQkJcmV0ID0gdGltZW91dD8tRUlOVFI6LUVBR0FJTjsKLQl9CiAJcmV0dXJuIHJldDsKIAogfQpkaWZmIC0tZ2l0IGEva2VybmVsL2NwdXNldC5jIGIva2VybmVsL2NwdXNldC5jCmluZGV4IDMzZWVlMTYuLjJiYjhjMmUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcHVzZXQuYworKysgYi9rZXJuZWwvY3B1c2V0LmMKQEAgLTExNTksNyArMTE1OSw3IEBACiBzdGF0aWMgaW50IHVwZGF0ZV9yZWxheF9kb21haW5fbGV2ZWwoc3RydWN0IGNwdXNldCAqY3MsIHM2NCB2YWwpCiB7CiAjaWZkZWYgQ09ORklHX1NNUAotCWlmICh2YWwgPCAtMSB8fCB2YWwgPj0gU0RfTFZfTUFYKQorCWlmICh2YWwgPCAtMSB8fCB2YWwgPj0gc2NoZWRfZG9tYWluX2xldmVsX21heCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEva2VybmVsL2NyZWQuYyBiL2tlcm5lbC9jcmVkLmMKaW5kZXggNTU1N2I1NS4uODA5M2MxNiAxMDA2NDQKLS0tIGEva2VybmVsL2NyZWQuYworKysgYi9rZXJuZWwvY3JlZC5jCkBAIC01NCw2ICs1NCw3IEBACiAJLmNhcF9lZmZlY3RpdmUJCT0gQ0FQX0lOSVRfRUZGX1NFVCwKIAkuY2FwX2JzZXQJCT0gQ0FQX0lOSVRfQlNFVCwKIAkudXNlcgkJCT0gSU5JVF9VU0VSLAorCS51c2VyX25zCQk9ICZpbml0X3VzZXJfbnMsCiAJLmdyb3VwX2luZm8JCT0gJmluaXRfZ3JvdXBzLAogI2lmZGVmIENPTkZJR19LRVlTCiAJLnRnY3JlZAkJCT0gJmluaXRfdGdjcmVkLApAQCAtNDEwLDYgKzQxMSwxMSBAQAogCQkJZ290byBlcnJvcl9wdXQ7CiAJfQogCisJLyogY2FjaGUgdXNlcl9ucyBpbiBjcmVkLiAgRG9lc24ndCBuZWVkIGEgcmVmY291bnQgYmVjYXVzZSBpdCB3aWxsCisJICogc3RheSBwaW5uZWQgYnkgY3JlZC0+dXNlcgorCSAqLworCW5ldy0+dXNlcl9ucyA9IG5ldy0+dXNlci0+dXNlcl9uczsKKwogI2lmZGVmIENPTkZJR19LRVlTCiAJLyogbmV3IHRocmVhZHMgZ2V0IHRoZWlyIG93biB0aHJlYWQga2V5cmluZ3MgaWYgdGhlaXIgcGFyZW50IGFscmVhZHkKIAkgKiBoYWQgb25lICovCkBAIC03NDEsMTIgKzc0Nyw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKHNldF9jcmVhdGVfZmlsZXNfYXMpOwogCi1zdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKmN1cnJlbnRfdXNlcl9ucyh2b2lkKQotewotCXJldHVybiBfY3VycmVudF91c2VyX25zKCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGN1cnJlbnRfdXNlcl9ucyk7Ci0KICNpZmRlZiBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMKIAogYm9vbCBjcmVkc19hcmVfaW52YWxpZChjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9ldmVudHMvTWFrZWZpbGUgYi9rZXJuZWwvZXZlbnRzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZTIzZDMKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvZXZlbnRzL01ha2VmaWxlCkBAIC0wLDAgKzEsNiBAQAoraWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgorQ0ZMQUdTX1JFTU9WRV9jb3JlLm8gPSAtcGcKK2VuZGlmCisKK29iai15IDo9IGNvcmUubworb2JqLSQoQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVCkgKz0gaHdfYnJlYWtwb2ludC5vCmRpZmYgLS1naXQgYS9rZXJuZWwvcGVyZl9ldmVudC5jIGIva2VybmVsL2V2ZW50cy9jb3JlLmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20ga2VybmVsL3BlcmZfZXZlbnQuYwpyZW5hbWUgdG8ga2VybmVsL2V2ZW50cy9jb3JlLmMKaW5kZXggOGU4MWE5OC4uYzA5NzY3ZiAxMDA2NDQKLS0tIGEva2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9rZXJuZWwvZXZlbnRzL2NvcmUuYwpAQCAtMiw4ICsyLDggQEAKICAqIFBlcmZvcm1hbmNlIGV2ZW50cyBjb3JlIGNvZGU6CiAgKgogICogIENvcHlyaWdodCAoQykgMjAwOCBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hcgotICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFJlZCBIYXQsIEluYy4sIFBldGVyIFppamxzdHJhIDxwemlqbHN0ckByZWRoYXQuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDExIFJlZCBIYXQsIEluYy4sIEluZ28gTW9sbmFyCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTEgUmVkIEhhdCwgSW5jLiwgUGV0ZXIgWmlqbHN0cmEgPHB6aWpsc3RyQHJlZGhhdC5jb20+CiAgKiAgQ29weXJpZ2h0ICCpICAyMDA5IFBhdWwgTWFja2VycmFzLCBJQk0gQ29ycC4gPHBhdWx1c0BhdTEuaWJtLmNvbT4KICAqCiAgKiBGb3IgbGljZW5zaW5nIGRldGFpbHMgc2VlIGtlcm5lbC1iYXNlL0NPUFlJTkcKQEAgLTM5LDEwICszOSwxMCBAQAogI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgogCiBzdHJ1Y3QgcmVtb3RlX2Z1bmN0aW9uX2NhbGwgewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKLQlpbnQgKCpmdW5jKSh2b2lkICppbmZvKTsKLQl2b2lkICppbmZvOwotCWludCByZXQ7CisJc3RydWN0IHRhc2tfc3RydWN0CSpwOworCWludAkJCSgqZnVuYykodm9pZCAqaW5mbyk7CisJdm9pZAkJCSppbmZvOworCWludAkJCXJldDsKIH07CiAKIHN0YXRpYyB2b2lkIHJlbW90ZV9mdW5jdGlvbih2b2lkICpkYXRhKQpAQCAtNzYsMTAgKzc2LDEwIEBACiB0YXNrX2Z1bmN0aW9uX2NhbGwoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8pCiB7CiAJc3RydWN0IHJlbW90ZV9mdW5jdGlvbl9jYWxsIGRhdGEgPSB7Ci0JCS5wID0gcCwKLQkJLmZ1bmMgPSBmdW5jLAotCQkuaW5mbyA9IGluZm8sCi0JCS5yZXQgPSAtRVNSQ0gsIC8qIE5vIHN1Y2ggKHJ1bm5pbmcpIHByb2Nlc3MgKi8KKwkJLnAJPSBwLAorCQkuZnVuYwk9IGZ1bmMsCisJCS5pbmZvCT0gaW5mbywKKwkJLnJldAk9IC1FU1JDSCwgLyogTm8gc3VjaCAocnVubmluZykgcHJvY2VzcyAqLwogCX07CiAKIAlpZiAodGFza19jdXJyKHApKQpAQCAtMTAwLDEwICsxMDAsMTAgQEAKIHN0YXRpYyBpbnQgY3B1X2Z1bmN0aW9uX2NhbGwoaW50IGNwdSwgaW50ICgqZnVuYykgKHZvaWQgKmluZm8pLCB2b2lkICppbmZvKQogewogCXN0cnVjdCByZW1vdGVfZnVuY3Rpb25fY2FsbCBkYXRhID0gewotCQkucCA9IE5VTEwsCi0JCS5mdW5jID0gZnVuYywKLQkJLmluZm8gPSBpbmZvLAotCQkucmV0ID0gLUVOWElPLCAvKiBObyBzdWNoIENQVSAqLworCQkucAk9IE5VTEwsCisJCS5mdW5jCT0gZnVuYywKKwkJLmluZm8JPSBpbmZvLAorCQkucmV0CT0gLUVOWElPLCAvKiBObyBzdWNoIENQVSAqLwogCX07CiAKIAlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCByZW1vdGVfZnVuY3Rpb24sICZkYXRhLCAxKTsKQEAgLTEyNSw3ICsxMjUsNyBAQAogICogcGVyZl9zY2hlZF9ldmVudHMgOiA+MCBldmVudHMgZXhpc3QKICAqIHBlcmZfY2dyb3VwX2V2ZW50czogPjAgcGVyLWNwdSBjZ3JvdXAgZXZlbnRzIGV4aXN0IG9uIHRoaXMgY3B1CiAgKi8KLWF0b21pY190IHBlcmZfc2NoZWRfZXZlbnRzIF9fcmVhZF9tb3N0bHk7CitzdHJ1Y3QganVtcF9sYWJlbF9rZXkgcGVyZl9zY2hlZF9ldmVudHMgX19yZWFkX21vc3RseTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShhdG9taWNfdCwgcGVyZl9jZ3JvdXBfZXZlbnRzKTsKIAogc3RhdGljIGF0b21pY190IG5yX21tYXBfZXZlbnRzIF9fcmVhZF9tb3N0bHk7CkBAIC01ODYsMTQgKzU4Niw2IEBACiAJV0FSTl9PTighYXRvbWljX2luY19ub3RfemVybygmY3R4LT5yZWZjb3VudCkpOwogfQogCi1zdGF0aWMgdm9pZCBmcmVlX2N0eChzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCi17Ci0Jc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4OwotCi0JY3R4ID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQsIHJjdV9oZWFkKTsKLQlrZnJlZShjdHgpOwotfQotCiBzdGF0aWMgdm9pZCBwdXRfY3R4KHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKIHsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY3R4LT5yZWZjb3VudCkpIHsKQEAgLTYwMSw3ICs1OTMsNyBAQAogCQkJcHV0X2N0eChjdHgtPnBhcmVudF9jdHgpOwogCQlpZiAoY3R4LT50YXNrKQogCQkJcHV0X3Rhc2tfc3RydWN0KGN0eC0+dGFzayk7Ci0JCWNhbGxfcmN1KCZjdHgtPnJjdV9oZWFkLCBmcmVlX2N0eCk7CisJCWtmcmVlX3JjdShjdHgsIHJjdV9oZWFkKTsKIAl9CiB9CiAKQEAgLTUzMzEsMTQgKzUzMjMsNiBAQAogCQkJCQkgbG9ja2RlcF9pc19oZWxkKCZzd2hhc2gtPmhsaXN0X211dGV4KSk7CiB9CiAKLXN0YXRpYyB2b2lkIHN3ZXZlbnRfaGxpc3RfcmVsZWFzZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3VfaGVhZCkKLXsKLQlzdHJ1Y3Qgc3dldmVudF9obGlzdCAqaGxpc3Q7Ci0KLQlobGlzdCA9IGNvbnRhaW5lcl9vZihyY3VfaGVhZCwgc3RydWN0IHN3ZXZlbnRfaGxpc3QsIHJjdV9oZWFkKTsKLQlrZnJlZShobGlzdCk7Ci19Ci0KIHN0YXRpYyB2b2lkIHN3ZXZlbnRfaGxpc3RfcmVsZWFzZShzdHJ1Y3Qgc3dldmVudF9odGFibGUgKnN3aGFzaCkKIHsKIAlzdHJ1Y3Qgc3dldmVudF9obGlzdCAqaGxpc3QgPSBzd2V2ZW50X2hsaXN0X2RlcmVmKHN3aGFzaCk7CkBAIC01MzQ3LDcgKzUzMzEsNyBAQAogCQlyZXR1cm47CiAKIAlyY3VfYXNzaWduX3BvaW50ZXIoc3doYXNoLT5zd2V2ZW50X2hsaXN0LCBOVUxMKTsKLQljYWxsX3JjdSgmaGxpc3QtPnJjdV9oZWFkLCBzd2V2ZW50X2hsaXN0X3JlbGVhc2VfcmN1KTsKKwlrZnJlZV9yY3UoaGxpc3QsIHJjdV9oZWFkKTsKIH0KIAogc3RhdGljIHZvaWQgc3dldmVudF9obGlzdF9wdXRfY3B1KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGNwdSkKQEAgLTU0MjksNyArNTQxMyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotYXRvbWljX3QgcGVyZl9zd2V2ZW50X2VuYWJsZWRbUEVSRl9DT1VOVF9TV19NQVhdOworc3RydWN0IGp1bXBfbGFiZWxfa2V5IHBlcmZfc3dldmVudF9lbmFibGVkW1BFUkZfQ09VTlRfU1dfTUFYXTsKIAogc3RhdGljIHZvaWQgc3dfcGVyZl9ldmVudF9kZXN0cm95KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKQEAgLTc0NDUsMTEgKzc0MjksMTEgQEAKIH0KIAogc3RydWN0IGNncm91cF9zdWJzeXMgcGVyZl9zdWJzeXMgPSB7Ci0JLm5hbWUgPSAicGVyZl9ldmVudCIsCi0JLnN1YnN5c19pZCA9IHBlcmZfc3Vic3lzX2lkLAotCS5jcmVhdGUgPSBwZXJmX2Nncm91cF9jcmVhdGUsCi0JLmRlc3Ryb3kgPSBwZXJmX2Nncm91cF9kZXN0cm95LAotCS5leGl0ID0gcGVyZl9jZ3JvdXBfZXhpdCwKLQkuYXR0YWNoID0gcGVyZl9jZ3JvdXBfYXR0YWNoLAorCS5uYW1lCQk9ICJwZXJmX2V2ZW50IiwKKwkuc3Vic3lzX2lkCT0gcGVyZl9zdWJzeXNfaWQsCisJLmNyZWF0ZQkJPSBwZXJmX2Nncm91cF9jcmVhdGUsCisJLmRlc3Ryb3kJPSBwZXJmX2Nncm91cF9kZXN0cm95LAorCS5leGl0CQk9IHBlcmZfY2dyb3VwX2V4aXQsCisJLmF0dGFjaAkJPSBwZXJmX2Nncm91cF9hdHRhY2gsCiB9OwogI2VuZGlmIC8qIENPTkZJR19DR1JPVVBfUEVSRiAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2h3X2JyZWFrcG9pbnQuYyBiL2tlcm5lbC9ldmVudHMvaHdfYnJlYWtwb2ludC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBrZXJuZWwvaHdfYnJlYWtwb2ludC5jCnJlbmFtZSB0byBrZXJuZWwvZXZlbnRzL2h3X2JyZWFrcG9pbnQuYwpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggZjVkMmY2My4uMjBhNDA2NCAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYworKysgYi9rZXJuZWwvZXhpdC5jCkBAIC0xMDE2LDcgKzEwMTYsNyBAQAogCS8qCiAJICogRklYTUU6IGRvIHRoYXQgb25seSB3aGVuIG5lZWRlZCwgdXNpbmcgc2NoZWRfZXhpdCB0cmFjZXBvaW50CiAJICovCi0JZmx1c2hfcHRyYWNlX2h3X2JyZWFrcG9pbnQodHNrKTsKKwlwdHJhY2VfcHV0X2JyZWFrcG9pbnRzKHRzayk7CiAKIAlleGl0X25vdGlmeSh0c2ssIGdyb3VwX2RlYWQpOwogI2lmZGVmIENPTkZJR19OVU1BCkBAIC0xMzc3LDExICsxMzc3LDIzIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLS8qCi0gKiBIYW5kbGUgc3lzX3dhaXQ0IHdvcmsgZm9yIG9uZSB0YXNrIGluIHN0YXRlIFRBU0tfU1RPUFBFRC4gIFdlIGhvbGQKLSAqIHJlYWRfbG9jaygmdGFza2xpc3RfbG9jaykgb24gZW50cnkuICBJZiB3ZSByZXR1cm4gemVybywgd2Ugc3RpbGwgaG9sZAotICogdGhlIGxvY2sgYW5kIHRoaXMgdGFzayBpcyB1bmludGVyZXN0aW5nLiAgSWYgd2UgcmV0dXJuIG5vbnplcm8sIHdlIGhhdmUKLSAqIHJlbGVhc2VkIHRoZSBsb2NrIGFuZCB0aGUgc3lzdGVtIGNhbGwgc2hvdWxkIHJldHVybi4KKy8qKgorICogd2FpdF90YXNrX3N0b3BwZWQgLSBXYWl0IGZvciAlVEFTS19TVE9QUEVEIG9yICVUQVNLX1RSQUNFRAorICogQHdvOiB3YWl0IG9wdGlvbnMKKyAqIEBwdHJhY2U6IGlzIHRoZSB3YWl0IGZvciBwdHJhY2UKKyAqIEBwOiB0YXNrIHRvIHdhaXQgZm9yCisgKgorICogSGFuZGxlIHN5c193YWl0NCgpIHdvcmsgZm9yICVwIGluIHN0YXRlICVUQVNLX1NUT1BQRUQgb3IgJVRBU0tfVFJBQ0VELgorICoKKyAqIENPTlRFWFQ6CisgKiByZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spLCB3aGljaCBpcyByZWxlYXNlZCBpZiByZXR1cm4gdmFsdWUgaXMKKyAqIG5vbi16ZXJvLiAgQWxzbywgZ3JhYnMgYW5kIHJlbGVhc2VzIEBwLT5zaWdoYW5kLT5zaWdsb2NrLgorICoKKyAqIFJFVFVSTlM6CisgKiAwIGlmIHdhaXQgY29uZGl0aW9uIGRpZG4ndCBleGlzdCBhbmQgc2VhcmNoIGZvciBvdGhlciB3YWl0IGNvbmRpdGlvbnMKKyAqIHNob3VsZCBjb250aW51ZS4gIE5vbi16ZXJvIHJldHVybiwgLWVycm5vIG9uIGZhaWx1cmUgYW5kIEBwJ3MgcGlkIG9uCisgKiBzdWNjZXNzLCBpbXBsaWVzIHRoYXQgdGFza2xpc3RfbG9jayBpcyByZWxlYXNlZCBhbmQgd2FpdCBjb25kaXRpb24KKyAqIHNlYXJjaCBzaG91bGQgdGVybWluYXRlLgogICovCiBzdGF0aWMgaW50IHdhaXRfdGFza19zdG9wcGVkKHN0cnVjdCB3YWl0X29wdHMgKndvLAogCQkJCWludCBwdHJhY2UsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKQEAgLTEzOTcsNiArMTQwOSw5IEBACiAJaWYgKCFwdHJhY2UgJiYgISh3by0+d29fZmxhZ3MgJiBXVU5UUkFDRUQpKQogCQlyZXR1cm4gMDsKIAorCWlmICghdGFza19zdG9wcGVkX2NvZGUocCwgcHRyYWNlKSkKKwkJcmV0dXJuIDA7CisKIAlleGl0X2NvZGUgPSAwOwogCXNwaW5fbG9ja19pcnEoJnAtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCkBAIC0xNTM4LDMzICsxNTUzLDg0IEBACiAJCXJldHVybiAwOwogCX0KIAotCWlmIChsaWtlbHkoIXB0cmFjZSkgJiYgdW5saWtlbHkodGFza19wdHJhY2UocCkpKSB7Ci0JCS8qCi0JCSAqIFRoaXMgY2hpbGQgaXMgaGlkZGVuIGJ5IHB0cmFjZS4KLQkJICogV2UgYXJlbid0IGFsbG93ZWQgdG8gc2VlIGl0IG5vdywgYnV0IGV2ZW50dWFsbHkgd2Ugd2lsbC4KLQkJICovCi0JCXdvLT5ub3Rhc2tfZXJyb3IgPSAwOwotCQlyZXR1cm4gMDsKLQl9Ci0KKwkvKiBkZWFkIGJvZHkgZG9lc24ndCBoYXZlIG11Y2ggdG8gY29udHJpYnV0ZSAqLwogCWlmIChwLT5leGl0X3N0YXRlID09IEVYSVRfREVBRCkKIAkJcmV0dXJuIDA7CiAKLQkvKgotCSAqIFdlIGRvbid0IHJlYXAgZ3JvdXAgbGVhZGVycyB3aXRoIHN1YnRocmVhZHMuCi0JICovCi0JaWYgKHAtPmV4aXRfc3RhdGUgPT0gRVhJVF9aT01CSUUgJiYgIWRlbGF5X2dyb3VwX2xlYWRlcihwKSkKLQkJcmV0dXJuIHdhaXRfdGFza196b21iaWUod28sIHApOworCS8qIHNsYXkgem9tYmllPyAqLworCWlmIChwLT5leGl0X3N0YXRlID09IEVYSVRfWk9NQklFKSB7CisJCS8qCisJCSAqIEEgem9tYmllIHB0cmFjZWUgaXMgb25seSB2aXNpYmxlIHRvIGl0cyBwdHJhY2VyLgorCQkgKiBOb3RpZmljYXRpb24gYW5kIHJlYXBpbmcgd2lsbCBiZSBjYXNjYWRlZCB0byB0aGUgcmVhbAorCQkgKiBwYXJlbnQgd2hlbiB0aGUgcHRyYWNlciBkZXRhY2hlcy4KKwkJICovCisJCWlmIChsaWtlbHkoIXB0cmFjZSkgJiYgdW5saWtlbHkodGFza19wdHJhY2UocCkpKSB7CisJCQkvKiBpdCB3aWxsIGJlY29tZSB2aXNpYmxlLCBjbGVhciBub3Rhc2tfZXJyb3IgKi8KKwkJCXdvLT5ub3Rhc2tfZXJyb3IgPSAwOworCQkJcmV0dXJuIDA7CisJCX0KKworCQkvKiB3ZSBkb24ndCByZWFwIGdyb3VwIGxlYWRlcnMgd2l0aCBzdWJ0aHJlYWRzICovCisJCWlmICghZGVsYXlfZ3JvdXBfbGVhZGVyKHApKQorCQkJcmV0dXJuIHdhaXRfdGFza196b21iaWUod28sIHApOworCisJCS8qCisJCSAqIEFsbG93IGFjY2VzcyB0byBzdG9wcGVkL2NvbnRpbnVlZCBzdGF0ZSB2aWEgem9tYmllIGJ5CisJCSAqIGZhbGxpbmcgdGhyb3VnaC4gIENsZWFyaW5nIG9mIG5vdGFza19lcnJvciBpcyBjb21wbGV4LgorCQkgKgorCQkgKiBXaGVuICFAcHRyYWNlOgorCQkgKgorCQkgKiBJZiBXRVhJVEVEIGlzIHNldCwgbm90YXNrX2Vycm9yIHNob3VsZCBuYXR1cmFsbHkgYmUKKwkJICogY2xlYXJlZC4gIElmIG5vdCwgc3Vic2V0IG9mIFdTVE9QUEVEfFdDT05USU5VRUQgaXMgc2V0LAorCQkgKiBzbywgaWYgdGhlcmUgYXJlIGxpdmUgc3VidGhyZWFkcywgdGhlcmUgYXJlIGV2ZW50cyB0bworCQkgKiB3YWl0IGZvci4gIElmIGFsbCBzdWJ0aHJlYWRzIGFyZSBkZWFkLCBpdCdzIHN0aWxsIHNhZmUKKwkJICogdG8gY2xlYXIgLSB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFnYWluIGluIGZpbml0ZQorCQkgKiBhbW91bnQgdGltZSBvbmNlIGFsbCB0aGUgc3VidGhyZWFkcyBhcmUgcmVsZWFzZWQgYW5kCisJCSAqIHdpbGwgdGhlbiByZXR1cm4gd2l0aG91dCBjbGVhcmluZy4KKwkJICoKKwkJICogV2hlbiBAcHRyYWNlOgorCQkgKgorCQkgKiBTdG9wcGVkIHN0YXRlIGlzIHBlci10YXNrIGFuZCB0aHVzIGNhbid0IGNoYW5nZSBvbmNlIHRoZQorCQkgKiB0YXJnZXQgdGFzayBkaWVzLiAgT25seSBjb250aW51ZWQgYW5kIGV4aXRlZCBjYW4gaGFwcGVuLgorCQkgKiBDbGVhciBub3Rhc2tfZXJyb3IgaWYgV0NPTlRJTlVFRCB8IFdFWElURUQuCisJCSAqLworCQlpZiAobGlrZWx5KCFwdHJhY2UpIHx8ICh3by0+d29fZmxhZ3MgJiAoV0NPTlRJTlVFRCB8IFdFWElURUQpKSkKKwkJCXdvLT5ub3Rhc2tfZXJyb3IgPSAwOworCX0gZWxzZSB7CisJCS8qCisJCSAqIElmIEBwIGlzIHB0cmFjZWQgYnkgYSB0YXNrIGluIGl0cyByZWFsIHBhcmVudCdzIGdyb3VwLAorCQkgKiBoaWRlIGdyb3VwIHN0b3AvY29udGludWVkIHN0YXRlIHdoZW4gbG9va2luZyBhdCBAcCBhcworCQkgKiB0aGUgcmVhbCBwYXJlbnQ7IG90aGVyd2lzZSwgYSBzaW5nbGUgc3RvcCBjYW4gYmUKKwkJICogcmVwb3J0ZWQgdHdpY2UgYXMgZ3JvdXAgYW5kIHB0cmFjZSBzdG9wcy4KKwkJICoKKwkJICogSWYgYSBwdHJhY2VyIHdhbnRzIHRvIGRpc3Rpbmd1aXNoIHRoZSB0d28gZXZlbnRzIGZvciBpdHMKKwkJICogb3duIGNoaWxkcmVuLCBpdCBzaG91bGQgY3JlYXRlIGEgc2VwYXJhdGUgcHJvY2VzcyB3aGljaAorCQkgKiB0YWtlcyB0aGUgcm9sZSBvZiByZWFsIHBhcmVudC4KKwkJICovCisJCWlmIChsaWtlbHkoIXB0cmFjZSkgJiYgdGFza19wdHJhY2UocCkgJiYKKwkJICAgIHNhbWVfdGhyZWFkX2dyb3VwKHAtPnBhcmVudCwgcC0+cmVhbF9wYXJlbnQpKQorCQkJcmV0dXJuIDA7CisKKwkJLyoKKwkJICogQHAgaXMgYWxpdmUgYW5kIGl0J3MgZ29ubmEgc3RvcCwgY29udGludWUgb3IgZXhpdCwgc28KKwkJICogdGhlcmUgYWx3YXlzIGlzIHNvbWV0aGluZyB0byB3YWl0IGZvci4KKwkJICovCisJCXdvLT5ub3Rhc2tfZXJyb3IgPSAwOworCX0KIAogCS8qCi0JICogSXQncyBzdG9wcGVkIG9yIHJ1bm5pbmcgbm93LCBzbyBpdCBtaWdodAotCSAqIGxhdGVyIGNvbnRpbnVlLCBleGl0LCBvciBzdG9wIGFnYWluLgorCSAqIFdhaXQgZm9yIHN0b3BwZWQuICBEZXBlbmRpbmcgb24gQHB0cmFjZSwgZGlmZmVyZW50IHN0b3BwZWQgc3RhdGUKKwkgKiBpcyB1c2VkIGFuZCB0aGUgdHdvIGRvbid0IGludGVyYWN0IHdpdGggZWFjaCBvdGhlci4KIAkgKi8KLQl3by0+bm90YXNrX2Vycm9yID0gMDsKKwlyZXQgPSB3YWl0X3Rhc2tfc3RvcHBlZCh3bywgcHRyYWNlLCBwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCi0JaWYgKHRhc2tfc3RvcHBlZF9jb2RlKHAsIHB0cmFjZSkpCi0JCXJldHVybiB3YWl0X3Rhc2tfc3RvcHBlZCh3bywgcHRyYWNlLCBwKTsKLQorCS8qCisJICogV2FpdCBmb3IgY29udGludWVkLiAgVGhlcmUncyBvbmx5IG9uZSBjb250aW51ZWQgc3RhdGUgYW5kIHRoZQorCSAqIHB0cmFjZXIgY2FuIGNvbnN1bWUgaXQgd2hpY2ggY2FuIGNvbmZ1c2UgdGhlIHJlYWwgcGFyZW50LiAgRG9uJ3QKKwkgKiB1c2UgV0NPTlRJTlVFRCBmcm9tIHB0cmFjZXIuICBZb3UgZG9uJ3QgbmVlZCBvciB3YW50IGl0LgorCSAqLwogCXJldHVybiB3YWl0X3Rhc2tfY29udGludWVkKHdvLCBwKTsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2V4dGFibGUuYyBiL2tlcm5lbC9leHRhYmxlLmMKaW5kZXggN2Y4ZjI2My4uNTMzOTcwNSAxMDA2NDQKLS0tIGEva2VybmVsL2V4dGFibGUuYworKysgYi9rZXJuZWwvZXh0YWJsZS5jCkBAIC03Miw2ICs3MiwyNCBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGNvcmVfa2VybmVsX2RhdGEgLSB0ZWxsIGlmIGFkZHIgcG9pbnRzIHRvIGtlcm5lbCBkYXRhCisgKiBAYWRkcjogYWRkcmVzcyB0byB0ZXN0CisgKgorICogUmV0dXJucyB0cnVlIGlmIEBhZGRyIHBhc3NlZCBpbiBpcyBmcm9tIHRoZSBjb3JlIGtlcm5lbCBkYXRhCisgKiBzZWN0aW9uLgorICoKKyAqIE5vdGU6IE9uIHNvbWUgYXJjaHMgaXQgbWF5IHJldHVybiB0cnVlIGZvciBjb3JlIFJPREFUQSwgYW5kIGZhbHNlCisgKiAgZm9yIG90aGVycy4gQnV0IHdpbGwgYWx3YXlzIGJlIHRydWUgZm9yIGNvcmUgUlcgZGF0YS4KKyAqLworaW50IGNvcmVfa2VybmVsX2RhdGEodW5zaWduZWQgbG9uZyBhZGRyKQoreworCWlmIChhZGRyID49ICh1bnNpZ25lZCBsb25nKV9zZGF0YSAmJgorCSAgICBhZGRyIDwgKHVuc2lnbmVkIGxvbmcpX2VkYXRhKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKwogaW50IF9fa2VybmVsX3RleHRfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJaWYgKGNvcmVfa2VybmVsX3RleHQoYWRkcikpCmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuYwppbmRleCBlNzU0OGRlLi4yYjQ0ZDgyIDEwMDY0NAotLS0gYS9rZXJuZWwvZm9yay5jCisrKyBiL2tlcm5lbC9mb3JrLmMKQEAgLTExMDMsNyArMTEwMyw2IEBACiAKIAlwb3NpeF9jcHVfdGltZXJzX2luaXQocCk7CiAKLQlwLT5sb2NrX2RlcHRoID0gLTE7CQkvKiAtMSA9IG5vIGxvY2sgKi8KIAlkb19wb3NpeF9jbG9ja19tb25vdG9uaWNfZ2V0dGltZSgmcC0+c3RhcnRfdGltZSk7CiAJcC0+cmVhbF9zdGFydF90aW1lID0gcC0+c3RhcnRfdGltZTsKIAltb25vdG9uaWNfdG9fYm9vdGJhc2VkKCZwLT5yZWFsX3N0YXJ0X3RpbWUpOwpAQCAtMTE1Myw3ICsxMTUyLDcgQEAKICNlbmRpZgogCiAJLyogUGVyZm9ybSBzY2hlZHVsZXIgcmVsYXRlZCBzZXR1cC4gQXNzaWduIHRoaXMgdGFzayB0byBhIENQVS4gKi8KLQlzY2hlZF9mb3JrKHAsIGNsb25lX2ZsYWdzKTsKKwlzY2hlZF9mb3JrKHApOwogCiAJcmV0dmFsID0gcGVyZl9ldmVudF9pbml0X3Rhc2socCk7CiAJaWYgKHJldHZhbCkKQEAgLTE0NjQsNyArMTQ2Myw3IEBACiAJCSAqLwogCQlwLT5mbGFncyAmPSB+UEZfU1RBUlRJTkc7CiAKLQkJd2FrZV91cF9uZXdfdGFzayhwLCBjbG9uZV9mbGFncyk7CisJCXdha2VfdXBfbmV3X3Rhc2socCk7CiAKIAkJdHJhY2Vob29rX3JlcG9ydF9jbG9uZV9jb21wbGV0ZSh0cmFjZSwgcmVncywKIAkJCQkJCWNsb25lX2ZsYWdzLCBuciwgcCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvZnJlZXplci5jIGIva2VybmVsL2ZyZWV6ZXIuYwppbmRleCA2NmVjZDJlLi43YjAxZGU5IDEwMDY0NAotLS0gYS9rZXJuZWwvZnJlZXplci5jCisrKyBiL2tlcm5lbC9mcmVlemVyLmMKQEAgLTE3LDcgKzE3LDcgQEAKIHsKIAlpZiAoIXVubGlrZWx5KGN1cnJlbnQtPmZsYWdzICYgUEZfTk9GUkVFWkUpKSB7CiAJCWN1cnJlbnQtPmZsYWdzIHw9IFBGX0ZST1pFTjsKLQkJd21iKCk7CisJCXNtcF93bWIoKTsKIAl9CiAJY2xlYXJfZnJlZXplX2ZsYWcoY3VycmVudCk7CiB9CkBAIC05Myw3ICs5Myw3IEBACiAJICogdGhlIHRhc2sgYXMgZnJvemVuIGFuZCBuZXh0IGNsZWFycyBpdHMgVElGX0ZSRUVaRS4KIAkgKi8KIAlpZiAoIWZyZWV6aW5nKHApKSB7Ci0JCXJtYigpOworCQlzbXBfcm1iKCk7CiAJCWlmIChmcm96ZW4ocCkpCiAJCQlyZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9ocnRpbWVyLmMgYi9rZXJuZWwvaHJ0aW1lci5jCmluZGV4IDkwMTc0NzguLmRiYmJmN2QgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ocnRpbWVyLmMKKysrIGIva2VybmVsL2hydGltZXIuYwpAQCAtODEsNyArODEsMTEgQEAKIAl9CiB9OwogCi1zdGF0aWMgaW50IGhydGltZXJfY2xvY2tfdG9fYmFzZV90YWJsZVtNQVhfQ0xPQ0tTXTsKK3N0YXRpYyBjb25zdCBpbnQgaHJ0aW1lcl9jbG9ja190b19iYXNlX3RhYmxlW01BWF9DTE9DS1NdID0geworCVtDTE9DS19SRUFMVElNRV0JPSBIUlRJTUVSX0JBU0VfUkVBTFRJTUUsCisJW0NMT0NLX01PTk9UT05JQ10JPSBIUlRJTUVSX0JBU0VfTU9OT1RPTklDLAorCVtDTE9DS19CT09UVElNRV0JPSBIUlRJTUVSX0JBU0VfQk9PVFRJTUUsCit9OwogCiBzdGF0aWMgaW5saW5lIGludCBocnRpbWVyX2Nsb2NraWRfdG9fYmFzZShjbG9ja2lkX3QgY2xvY2tfaWQpCiB7CkBAIC0xNzIyLDEwICsxNzI2LDYgQEAKIAogdm9pZCBfX2luaXQgaHJ0aW1lcnNfaW5pdCh2b2lkKQogewotCWhydGltZXJfY2xvY2tfdG9fYmFzZV90YWJsZVtDTE9DS19SRUFMVElNRV0gPSBIUlRJTUVSX0JBU0VfUkVBTFRJTUU7Ci0JaHJ0aW1lcl9jbG9ja190b19iYXNlX3RhYmxlW0NMT0NLX01PTk9UT05JQ10gPSBIUlRJTUVSX0JBU0VfTU9OT1RPTklDOwotCWhydGltZXJfY2xvY2tfdG9fYmFzZV90YWJsZVtDTE9DS19CT09UVElNRV0gPSBIUlRJTUVSX0JBU0VfQk9PVFRJTUU7Ci0KIAlocnRpbWVyX2NwdV9ub3RpZnkoJmhydGltZXJzX25iLCAodW5zaWduZWQgbG9uZylDUFVfVVBfUFJFUEFSRSwKIAkJCSAgKHZvaWQgKikobG9uZylzbXBfcHJvY2Vzc29yX2lkKCkpOwogCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmaHJ0aW1lcnNfbmIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2h1bmdfdGFzay5jIGIva2VybmVsL2h1bmdfdGFzay5jCmluZGV4IDUzZWFkMTcuLmVhNjQwMTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9odW5nX3Rhc2suYworKysgYi9rZXJuZWwvaHVuZ190YXNrLmMKQEAgLTMzLDcgKzMzLDcgQEAKIC8qCiAgKiBaZXJvIG1lYW5zIGluZmluaXRlIHRpbWVvdXQgLSBubyBjaGVja2luZyBkb25lOgogICovCi11bnNpZ25lZCBsb25nIF9fcmVhZF9tb3N0bHkgc3lzY3RsX2h1bmdfdGFza190aW1lb3V0X3NlY3MgPSAxMjA7Cit1bnNpZ25lZCBsb25nIF9fcmVhZF9tb3N0bHkgc3lzY3RsX2h1bmdfdGFza190aW1lb3V0X3NlY3MgPSBDT05GSUdfREVGQVVMVF9IVU5HX1RBU0tfVElNRU9VVDsKIAogdW5zaWduZWQgbG9uZyBfX3JlYWRfbW9zdGx5IHN5c2N0bF9odW5nX3Rhc2tfd2FybmluZ3MgPSAxMDsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9LY29uZmlnIGIva2VybmVsL2lycS9LY29uZmlnCmluZGV4IGM1NzRmOWEuLmQxZDA1MWIzIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL0tjb25maWcKKysrIGIva2VybmVsL2lycS9LY29uZmlnCkBAIC00OCw2ICs0OCwxMCBAQAogY29uZmlnIElSUV9FREdFX0VPSV9IQU5ETEVSCiAgICAgICAgYm9vbAogCisjIEdlbmVyaWMgY29uZmlndXJhYmxlIGludGVycnVwdCBjaGlwIGltcGxlbWVudGF0aW9uCitjb25maWcgR0VORVJJQ19JUlFfQ0hJUAorICAgICAgIGJvb2wKKwogIyBTdXBwb3J0IGZvcmNlZCBpcnEgdGhyZWFkaW5nCiBjb25maWcgSVJRX0ZPUkNFRF9USFJFQURJTkcKICAgICAgICBib29sCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL01ha2VmaWxlIGIva2VybmVsL2lycS9NYWtlZmlsZQppbmRleCA1NDMyOWNkLi43MzI5MDA1IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL01ha2VmaWxlCisrKyBiL2tlcm5lbC9pcnEvTWFrZWZpbGUKQEAgLTEsNSArMSw2IEBACiAKIG9iai15IDo9IGlycWRlc2MubyBoYW5kbGUubyBtYW5hZ2UubyBzcHVyaW91cy5vIHJlc2VuZC5vIGNoaXAubyBkdW1teWNoaXAubyBkZXZyZXMubworb2JqLSQoQ09ORklHX0dFTkVSSUNfSVJRX0NISVApICs9IGdlbmVyaWMtY2hpcC5vCiBvYmotJChDT05GSUdfR0VORVJJQ19JUlFfUFJPQkUpICs9IGF1dG9wcm9iZS5vCiBvYmotJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vCiBvYmotJChDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUSkgKz0gbWlncmF0aW9uLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvY2hpcC5jIGIva2VybmVsL2lycS9jaGlwLmMKaW5kZXggNGFmMWUyYi4uZDVhMzAwOSAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9jaGlwLmMKKysrIGIva2VybmVsL2lycS9jaGlwLmMKQEAgLTMxMCw2ICszMTAsNyBAQAogb3V0X3VubG9jazoKIAlyYXdfc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaGFuZGxlX3NpbXBsZV9pcnEpOwogCiAvKioKICAqCWhhbmRsZV9sZXZlbF9pcnEgLSBMZXZlbCB0eXBlIGlycSBoYW5kbGVyCkBAIC01NzMsNiArNTc0LDcgQEAKIAlpZiAoaGFuZGxlICE9IGhhbmRsZV9iYWRfaXJxICYmIGlzX2NoYWluZWQpIHsKIAkJaXJxX3NldHRpbmdzX3NldF9ub3Byb2JlKGRlc2MpOwogCQlpcnFfc2V0dGluZ3Nfc2V0X25vcmVxdWVzdChkZXNjKTsKKwkJaXJxX3NldHRpbmdzX3NldF9ub3RocmVhZChkZXNjKTsKIAkJaXJxX3N0YXJ0dXAoZGVzYyk7CiAJfQogb3V0OgpAQCAtNjEyLDYgKzYxNCw3IEBACiAKIAlpcnFfcHV0X2Rlc2NfdW5sb2NrKGRlc2MsIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGlycV9tb2RpZnlfc3RhdHVzKTsKIAogLyoqCiAgKglpcnFfY3B1X29ubGluZSAtIEludm9rZSBhbGwgaXJxX2NwdV9vbmxpbmUgZnVuY3Rpb25zLgpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9kZWJ1Zy5oIGIva2VybmVsL2lycS9kZWJ1Zy5oCmluZGV4IDMwNmNiYTMuLjk3YThiZmEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvZGVidWcuaAorKysgYi9rZXJuZWwvaXJxL2RlYnVnLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAlQKElSUV9QRVJfQ1BVKTsKIAlQKElSUV9OT1BST0JFKTsKIAlQKElSUV9OT1JFUVVFU1QpOworCVAoSVJRX05PVEhSRUFEKTsKIAlQKElSUV9OT0FVVE9FTik7CiAKIAlQUyhJUlFTX0FVVE9ERVRFQ1QpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9nZW5lcmljLWNoaXAuYyBiL2tlcm5lbC9pcnEvZ2VuZXJpYy1jaGlwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFhOWRiNwotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC9pcnEvZ2VuZXJpYy1jaGlwLmMKQEAgLTAsMCArMSwzNTQgQEAKKy8qCisgKiBMaWJyYXJ5IGltcGxlbWVudGluZyB0aGUgbW9zdCBjb21tb24gaXJxIGNoaXAgY2FsbGJhY2sgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBUaG9tYXMgR2xlaXhuZXIKKyAqLworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KKworI2luY2x1ZGUgImludGVybmFscy5oIgorCitzdGF0aWMgTElTVF9IRUFEKGdjX2xpc3QpOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soZ2NfbG9jayk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlycV9jaGlwX3JlZ3MgKmN1cl9yZWdzKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlyZXR1cm4gJmNvbnRhaW5lcl9vZihkLT5jaGlwLCBzdHJ1Y3QgaXJxX2NoaXBfdHlwZSwgY2hpcCktPnJlZ3M7Cit9CisKKy8qKgorICogaXJxX2djX25vb3AgLSBOT09QIGZ1bmN0aW9uCisgKiBAZDogaXJxX2RhdGEKKyAqLwordm9pZCBpcnFfZ2Nfbm9vcChzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7Cit9CisKKy8qKgorICogaXJxX2djX21hc2tfZGlzYWJsZV9yZWcgLSBNYXNrIGNoaXAgdmlhIGRpc2FibGUgcmVnaXN0ZXIKKyAqIEBkOiBpcnFfZGF0YQorICoKKyAqIENoaXAgaGFzIHNlcGFyYXRlIGVuYWJsZS9kaXNhYmxlIHJlZ2lzdGVycyBpbnN0ZWFkIG9mIGEgc2luZ2xlIG1hc2sKKyAqIHJlZ2lzdGVyLgorICovCit2b2lkIGlycV9nY19tYXNrX2Rpc2FibGVfcmVnKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwl1MzIgbWFzayA9IDEgPDwgKGQtPmlycSAtIGdjLT5pcnFfYmFzZSk7CisKKwlpcnFfZ2NfbG9jayhnYyk7CisJaXJxX3JlZ193cml0ZWwobWFzaywgZ2MtPnJlZ19iYXNlICsgY3VyX3JlZ3MoZCktPmRpc2FibGUpOworCWdjLT5tYXNrX2NhY2hlICY9IH5tYXNrOworCWlycV9nY191bmxvY2soZ2MpOworfQorCisvKioKKyAqIGlycV9nY19tYXNrX3NldF9tYXNrX2JpdCAtIE1hc2sgY2hpcCB2aWEgc2V0dGluZyBiaXQgaW4gbWFzayByZWdpc3RlcgorICogQGQ6IGlycV9kYXRhCisgKgorICogQ2hpcCBoYXMgYSBzaW5nbGUgbWFzayByZWdpc3Rlci4gVmFsdWVzIG9mIHRoaXMgcmVnaXN0ZXIgYXJlIGNhY2hlZAorICogYW5kIHByb3RlY3RlZCBieSBnYy0+bG9jaworICovCit2b2lkIGlycV9nY19tYXNrX3NldF9iaXQoc3RydWN0IGlycV9kYXRhICpkKQoreworCXN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXUzMiBtYXNrID0gMSA8PCAoZC0+aXJxIC0gZ2MtPmlycV9iYXNlKTsKKworCWlycV9nY19sb2NrKGdjKTsKKwlnYy0+bWFza19jYWNoZSB8PSBtYXNrOworCWlycV9yZWdfd3JpdGVsKGdjLT5tYXNrX2NhY2hlLCBnYy0+cmVnX2Jhc2UgKyBjdXJfcmVncyhkKS0+bWFzayk7CisJaXJxX2djX3VubG9jayhnYyk7Cit9CisKKy8qKgorICogaXJxX2djX21hc2tfc2V0X21hc2tfYml0IC0gTWFzayBjaGlwIHZpYSBjbGVhcmluZyBiaXQgaW4gbWFzayByZWdpc3RlcgorICogQGQ6IGlycV9kYXRhCisgKgorICogQ2hpcCBoYXMgYSBzaW5nbGUgbWFzayByZWdpc3Rlci4gVmFsdWVzIG9mIHRoaXMgcmVnaXN0ZXIgYXJlIGNhY2hlZAorICogYW5kIHByb3RlY3RlZCBieSBnYy0+bG9jaworICovCit2b2lkIGlycV9nY19tYXNrX2Nscl9iaXQoc3RydWN0IGlycV9kYXRhICpkKQoreworCXN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXUzMiBtYXNrID0gMSA8PCAoZC0+aXJxIC0gZ2MtPmlycV9iYXNlKTsKKworCWlycV9nY19sb2NrKGdjKTsKKwlnYy0+bWFza19jYWNoZSAmPSB+bWFzazsKKwlpcnFfcmVnX3dyaXRlbChnYy0+bWFza19jYWNoZSwgZ2MtPnJlZ19iYXNlICsgY3VyX3JlZ3MoZCktPm1hc2spOworCWlycV9nY191bmxvY2soZ2MpOworfQorCisvKioKKyAqIGlycV9nY191bm1hc2tfZW5hYmxlX3JlZyAtIFVubWFzayBjaGlwIHZpYSBlbmFibGUgcmVnaXN0ZXIKKyAqIEBkOiBpcnFfZGF0YQorICoKKyAqIENoaXAgaGFzIHNlcGFyYXRlIGVuYWJsZS9kaXNhYmxlIHJlZ2lzdGVycyBpbnN0ZWFkIG9mIGEgc2luZ2xlIG1hc2sKKyAqIHJlZ2lzdGVyLgorICovCit2b2lkIGlycV9nY191bm1hc2tfZW5hYmxlX3JlZyhzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJdTMyIG1hc2sgPSAxIDw8IChkLT5pcnEgLSBnYy0+aXJxX2Jhc2UpOworCisJaXJxX2djX2xvY2soZ2MpOworCWlycV9yZWdfd3JpdGVsKG1hc2ssIGdjLT5yZWdfYmFzZSArIGN1cl9yZWdzKGQpLT5lbmFibGUpOworCWdjLT5tYXNrX2NhY2hlIHw9IG1hc2s7CisJaXJxX2djX3VubG9jayhnYyk7Cit9CisKKy8qKgorICogaXJxX2djX2FjayAtIEFjayBwZW5kaW5nIGludGVycnVwdAorICogQGQ6IGlycV9kYXRhCisgKi8KK3ZvaWQgaXJxX2djX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJdTMyIG1hc2sgPSAxIDw8IChkLT5pcnEgLSBnYy0+aXJxX2Jhc2UpOworCisJaXJxX2djX2xvY2soZ2MpOworCWlycV9yZWdfd3JpdGVsKG1hc2ssIGdjLT5yZWdfYmFzZSArIGN1cl9yZWdzKGQpLT5hY2spOworCWlycV9nY191bmxvY2soZ2MpOworfQorCisvKioKKyAqIGlycV9nY19tYXNrX2Rpc2FibGVfcmVnX2FuZF9hY2stIE1hc2sgYW5kIGFjayBwZW5kaW5nIGludGVycnVwdAorICogQGQ6IGlycV9kYXRhCisgKi8KK3ZvaWQgaXJxX2djX21hc2tfZGlzYWJsZV9yZWdfYW5kX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJdTMyIG1hc2sgPSAxIDw8IChkLT5pcnEgLSBnYy0+aXJxX2Jhc2UpOworCisJaXJxX2djX2xvY2soZ2MpOworCWlycV9yZWdfd3JpdGVsKG1hc2ssIGdjLT5yZWdfYmFzZSArIGN1cl9yZWdzKGQpLT5tYXNrKTsKKwlpcnFfcmVnX3dyaXRlbChtYXNrLCBnYy0+cmVnX2Jhc2UgKyBjdXJfcmVncyhkKS0+YWNrKTsKKwlpcnFfZ2NfdW5sb2NrKGdjKTsKK30KKworLyoqCisgKiBpcnFfZ2NfZW9pIC0gRU9JIGludGVycnVwdAorICogQGQ6IGlycV9kYXRhCisgKi8KK3ZvaWQgaXJxX2djX2VvaShzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJdTMyIG1hc2sgPSAxIDw8IChkLT5pcnEgLSBnYy0+aXJxX2Jhc2UpOworCisJaXJxX2djX2xvY2soZ2MpOworCWlycV9yZWdfd3JpdGVsKG1hc2ssIGdjLT5yZWdfYmFzZSArIGN1cl9yZWdzKGQpLT5lb2kpOworCWlycV9nY191bmxvY2soZ2MpOworfQorCisvKioKKyAqIGlycV9nY19zZXRfd2FrZSAtIFNldC9jbHIgd2FrZSBiaXQgZm9yIGFuIGludGVycnVwdAorICogQGQ6IGlycV9kYXRhCisgKgorICogRm9yIGNoaXBzIHdoZXJlIHRoZSB3YWtlIGZyb20gc3VzcGVuZCBmdW5jdGlvbmFsaXR5IGlzIG5vdAorICogY29uZmlndXJlZCBpbiBhIHNlcGFyYXRlIHJlZ2lzdGVyIGFuZCB0aGUgd2FrZXVwIGFjdGl2ZSBzdGF0ZSBpcworICoganVzdCBzdG9yZWQgaW4gYSBiaXRtYXNrLgorICovCitpbnQgaXJxX2djX3NldF93YWtlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgaW50IG9uKQoreworCXN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXUzMiBtYXNrID0gMSA8PCAoZC0+aXJxIC0gZ2MtPmlycV9iYXNlKTsKKworCWlmICghKG1hc2sgJiBnYy0+d2FrZV9lbmFibGVkKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpcnFfZ2NfbG9jayhnYyk7CisJaWYgKG9uKQorCQlnYy0+d2FrZV9hY3RpdmUgfD0gbWFzazsKKwllbHNlCisJCWdjLT53YWtlX2FjdGl2ZSAmPSB+bWFzazsKKwlpcnFfZ2NfdW5sb2NrKGdjKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpcnFfYWxsb2NfZ2VuZXJpY19jaGlwIC0gQWxsb2NhdGUgYSBnZW5lcmljIGNoaXAgYW5kIGluaXRpYWxpemUgaXQKKyAqIEBuYW1lOglOYW1lIG9mIHRoZSBpcnEgY2hpcAorICogQG51bV9jdDoJTnVtYmVyIG9mIGlycV9jaGlwX3R5cGUgaW5zdGFuY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgKiBAaXJxX2Jhc2U6CUludGVycnVwdCBiYXNlIG5yIGZvciB0aGlzIGNoaXAKKyAqIEByZWdfYmFzZToJUmVnaXN0ZXIgYmFzZSBhZGRyZXNzICh2aXJ0dWFsKQorICogQGhhbmRsZXI6CURlZmF1bHQgZmxvdyBoYW5kbGVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNoaXAKKyAqCisgKiBSZXR1cm5zIGFuIGluaXRpYWxpemVkIGlycV9jaGlwX2dlbmVyaWMgc3RydWN0dXJlLiBUaGUgY2hpcCBkZWZhdWx0cworICogdG8gdGhlIHByaW1hcnkgKGluZGV4IDApIGlycV9jaGlwX3R5cGUgYW5kIEBoYW5kbGVyCisgKi8KK3N0cnVjdCBpcnFfY2hpcF9nZW5lcmljICoKK2lycV9hbGxvY19nZW5lcmljX2NoaXAoY29uc3QgY2hhciAqbmFtZSwgaW50IG51bV9jdCwgdW5zaWduZWQgaW50IGlycV9iYXNlLAorCQkgICAgICAgdm9pZCBfX2lvbWVtICpyZWdfYmFzZSwgaXJxX2Zsb3dfaGFuZGxlcl90IGhhbmRsZXIpCit7CisJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjOworCXVuc2lnbmVkIGxvbmcgc3ogPSBzaXplb2YoKmdjKSArIG51bV9jdCAqIHNpemVvZihzdHJ1Y3QgaXJxX2NoaXBfdHlwZSk7CisKKwlnYyA9IGt6YWxsb2Moc3osIEdGUF9LRVJORUwpOworCWlmIChnYykgeworCQlyYXdfc3Bpbl9sb2NrX2luaXQoJmdjLT5sb2NrKTsKKwkJZ2MtPm51bV9jdCA9IG51bV9jdDsKKwkJZ2MtPmlycV9iYXNlID0gaXJxX2Jhc2U7CisJCWdjLT5yZWdfYmFzZSA9IHJlZ19iYXNlOworCQlnYy0+Y2hpcF90eXBlcy0+Y2hpcC5uYW1lID0gbmFtZTsKKwkJZ2MtPmNoaXBfdHlwZXMtPmhhbmRsZXIgPSBoYW5kbGVyOworCX0KKwlyZXR1cm4gZ2M7Cit9CisKKy8qCisgKiBTZXBhcmF0ZSBsb2NrZGVwIGNsYXNzIGZvciBpbnRlcnJ1cHQgY2hpcCB3aGljaCBjYW4gbmVzdCBpcnFfZGVzYworICogbG9jay4KKyAqLworc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBpcnFfbmVzdGVkX2xvY2tfY2xhc3M7CisKKy8qKgorICogaXJxX3NldHVwX2dlbmVyaWNfY2hpcCAtIFNldHVwIGEgcmFuZ2Ugb2YgaW50ZXJydXB0cyB3aXRoIGEgZ2VuZXJpYyBjaGlwCisgKiBAZ2M6CQlHZW5lcmljIGlycSBjaGlwIGhvbGRpbmcgYWxsIGRhdGEKKyAqIEBtc2s6CUJpdG1hc2sgaG9sZGluZyB0aGUgaXJxcyB0byBpbml0aWFsaXplIHJlbGF0aXZlIHRvIGdjLT5pcnFfYmFzZQorICogQGZsYWdzOglGbGFncyBmb3IgaW5pdGlhbGl6YXRpb24KKyAqIEBjbHI6CUlSUV8qIGJpdHMgdG8gY2xlYXIKKyAqIEBzZXQ6CUlSUV8qIGJpdHMgdG8gc2V0CisgKgorICogU2V0IHVwIG1heC4gMzIgaW50ZXJydXB0cyBzdGFydGluZyBmcm9tIGdjLT5pcnFfYmFzZS4gTm90ZSwgdGhpcworICogaW5pdGlhbGl6ZXMgYWxsIGludGVycnVwdHMgdG8gdGhlIHByaW1hcnkgaXJxX2NoaXBfdHlwZSBhbmQgaXRzCisgKiBhc3NvY2lhdGVkIGhhbmRsZXIuCisgKi8KK3ZvaWQgaXJxX3NldHVwX2dlbmVyaWNfY2hpcChzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2MsIHUzMiBtc2ssCisJCQkgICAgZW51bSBpcnFfZ2NfZmxhZ3MgZmxhZ3MsIHVuc2lnbmVkIGludCBjbHIsCisJCQkgICAgdW5zaWduZWQgaW50IHNldCkKK3sKKwlzdHJ1Y3QgaXJxX2NoaXBfdHlwZSAqY3QgPSBnYy0+Y2hpcF90eXBlczsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXJhd19zcGluX2xvY2soJmdjX2xvY2spOworCWxpc3RfYWRkX3RhaWwoJmdjLT5saXN0LCAmZ2NfbGlzdCk7CisJcmF3X3NwaW5fdW5sb2NrKCZnY19sb2NrKTsKKworCS8qIEluaXQgbWFzayBjYWNoZSA/ICovCisJaWYgKGZsYWdzICYgSVJRX0dDX0lOSVRfTUFTS19DQUNIRSkKKwkJZ2MtPm1hc2tfY2FjaGUgPSBpcnFfcmVnX3JlYWRsKGdjLT5yZWdfYmFzZSArIGN0LT5yZWdzLm1hc2spOworCisJZm9yIChpID0gZ2MtPmlycV9iYXNlOyBtc2s7IG1zayA+Pj0gMSwgaSsrKSB7CisJCWlmICghbXNrICYgMHgwMSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChmbGFncyAmIElSUV9HQ19JTklUX05FU1RFRF9MT0NLKQorCQkJaXJxX3NldF9sb2NrZGVwX2NsYXNzKGksICZpcnFfbmVzdGVkX2xvY2tfY2xhc3MpOworCisJCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpLCAmY3QtPmNoaXAsIGN0LT5oYW5kbGVyKTsKKwkJaXJxX3NldF9jaGlwX2RhdGEoaSwgZ2MpOworCQlpcnFfbW9kaWZ5X3N0YXR1cyhpLCBjbHIsIHNldCk7CisJfQorCWdjLT5pcnFfY250ID0gaSAtIGdjLT5pcnFfYmFzZTsKK30KKworLyoqCisgKiBpcnFfc2V0dXBfYWx0X2NoaXAgLSBTd2l0Y2ggdG8gYWx0ZXJuYXRpdmUgY2hpcAorICogQGQ6CQlpcnFfZGF0YSBmb3IgdGhpcyBpbnRlcnJ1cHQKKyAqIEB0eXBlCUZsb3cgdHlwZSB0byBiZSBpbml0aWFsaXplZAorICoKKyAqIE9ubHkgdG8gYmUgY2FsbGVkIGZyb20gY2hpcC0+aXJxX3NldF90eXBlKCkgY2FsbGJhY2tzLgorICovCitpbnQgaXJxX3NldHVwX2FsdF9jaGlwKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgaW50IHR5cGUpCit7CisJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJc3RydWN0IGlycV9jaGlwX3R5cGUgKmN0ID0gZ2MtPmNoaXBfdHlwZXM7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZ2MtPm51bV9jdDsgaSsrLCBjdCsrKSB7CisJCWlmIChjdC0+dHlwZSAmIHR5cGUpIHsKKwkJCWQtPmNoaXAgPSAmY3QtPmNoaXA7CisJCQlpcnFfZGF0YV90b19kZXNjKGQpLT5oYW5kbGVfaXJxID0gY3QtPmhhbmRsZXI7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoqCisgKiBpcnFfcmVtb3ZlX2dlbmVyaWNfY2hpcCAtIFJlbW92ZSBhIGNoaXAKKyAqIEBnYzoJCUdlbmVyaWMgaXJxIGNoaXAgaG9sZGluZyBhbGwgZGF0YQorICogQG1zazoJQml0bWFzayBob2xkaW5nIHRoZSBpcnFzIHRvIGluaXRpYWxpemUgcmVsYXRpdmUgdG8gZ2MtPmlycV9iYXNlCisgKiBAY2xyOglJUlFfKiBiaXRzIHRvIGNsZWFyCisgKiBAc2V0OglJUlFfKiBiaXRzIHRvIHNldAorICoKKyAqIFJlbW92ZSB1cCB0byAzMiBpbnRlcnJ1cHRzIHN0YXJ0aW5nIGZyb20gZ2MtPmlycV9iYXNlLgorICovCit2b2lkIGlycV9yZW1vdmVfZ2VuZXJpY19jaGlwKHN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYywgdTMyIG1zaywKKwkJCSAgICAgdW5zaWduZWQgaW50IGNsciwgdW5zaWduZWQgaW50IHNldCkKK3sKKwl1bnNpZ25lZCBpbnQgaSA9IGdjLT5pcnFfYmFzZTsKKworCXJhd19zcGluX2xvY2soJmdjX2xvY2spOworCWxpc3RfZGVsKCZnYy0+bGlzdCk7CisJcmF3X3NwaW5fdW5sb2NrKCZnY19sb2NrKTsKKworCWZvciAoOyBtc2s7IG1zayA+Pj0gMSwgaSsrKSB7CisJCWlmICghbXNrICYgMHgwMSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFJlbW92ZSBoYW5kbGVyIGZpcnN0LiBUaGF0IHdpbGwgbWFzayB0aGUgaXJxIGxpbmUgKi8KKwkJaXJxX3NldF9oYW5kbGVyKGksIE5VTEwpOworCQlpcnFfc2V0X2NoaXAoaSwgJm5vX2lycV9jaGlwKTsKKwkJaXJxX3NldF9jaGlwX2RhdGEoaSwgTlVMTCk7CisJCWlycV9tb2RpZnlfc3RhdHVzKGksIGNsciwgc2V0KTsKKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgaXJxX2djX3N1c3BlbmQodm9pZCkKK3sKKwlzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2M7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGdjLCAmZ2NfbGlzdCwgbGlzdCkgeworCQlzdHJ1Y3QgaXJxX2NoaXBfdHlwZSAqY3QgPSBnYy0+Y2hpcF90eXBlczsKKworCQlpZiAoY3QtPmNoaXAuaXJxX3N1c3BlbmQpCisJCQljdC0+Y2hpcC5pcnFfc3VzcGVuZChpcnFfZ2V0X2lycV9kYXRhKGdjLT5pcnFfYmFzZSkpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaXJxX2djX3Jlc3VtZSh2b2lkKQoreworCXN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYzsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZ2MsICZnY19saXN0LCBsaXN0KSB7CisJCXN0cnVjdCBpcnFfY2hpcF90eXBlICpjdCA9IGdjLT5jaGlwX3R5cGVzOworCisJCWlmIChjdC0+Y2hpcC5pcnFfcmVzdW1lKQorCQkJY3QtPmNoaXAuaXJxX3Jlc3VtZShpcnFfZ2V0X2lycV9kYXRhKGdjLT5pcnFfYmFzZSkpOworCX0KK30KKyNlbHNlCisjZGVmaW5lIGlycV9nY19zdXNwZW5kIE5VTEwKKyNkZWZpbmUgaXJxX2djX3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3RhdGljIHZvaWQgaXJxX2djX3NodXRkb3duKHZvaWQpCit7CisJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShnYywgJmdjX2xpc3QsIGxpc3QpIHsKKwkJc3RydWN0IGlycV9jaGlwX3R5cGUgKmN0ID0gZ2MtPmNoaXBfdHlwZXM7CisKKwkJaWYgKGN0LT5jaGlwLmlycV9wbV9zaHV0ZG93bikKKwkJCWN0LT5jaGlwLmlycV9wbV9zaHV0ZG93bihpcnFfZ2V0X2lycV9kYXRhKGdjLT5pcnFfYmFzZSkpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBpcnFfZ2Nfc3lzY29yZV9vcHMgPSB7CisJLnN1c3BlbmQgPSBpcnFfZ2Nfc3VzcGVuZCwKKwkucmVzdW1lID0gaXJxX2djX3Jlc3VtZSwKKwkuc2h1dGRvd24gPSBpcnFfZ2Nfc2h1dGRvd24sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpcnFfZ2NfaW5pdF9vcHModm9pZCkKK3sKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmaXJxX2djX3N5c2NvcmVfb3BzKTsKKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbChpcnFfZ2NfaW5pdF9vcHMpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9pcnFkZXNjLmMgYi9rZXJuZWwvaXJxL2lycWRlc2MuYwppbmRleCAyYzAzOWM5Li44ODZlODAzIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2lycWRlc2MuYworKysgYi9rZXJuZWwvaXJxL2lycWRlc2MuYwpAQCAtMjIsNyArMjIsNyBAQAogICovCiBzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGlycV9kZXNjX2xvY2tfY2xhc3M7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19TTVApICYmIGRlZmluZWQoQ09ORklHX0dFTkVSSUNfSEFSRElSUVMpCisjaWYgZGVmaW5lZChDT05GSUdfU01QKQogc3RhdGljIHZvaWQgX19pbml0IGluaXRfaXJxX2RlZmF1bHRfYWZmaW5pdHkodm9pZCkKIHsKIAlhbGxvY19jcHVtYXNrX3ZhcigmaXJxX2RlZmF1bHRfYWZmaW5pdHksIEdGUF9OT1dBSVQpOwpAQCAtMjkwLDYgKzI5MCwyMiBAQAogCiAjZW5kaWYgLyogIUNPTkZJR19TUEFSU0VfSVJRICovCiAKKy8qKgorICogZ2VuZXJpY19oYW5kbGVfaXJxIC0gSW52b2tlIHRoZSBoYW5kbGVyIGZvciBhIHBhcnRpY3VsYXIgaXJxCisgKiBAaXJxOglUaGUgaXJxIG51bWJlciB0byBoYW5kbGUKKyAqCisgKi8KK2ludCBnZW5lcmljX2hhbmRsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOworCisJaWYgKCFkZXNjKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlnZW5lcmljX2hhbmRsZV9pcnFfZGVzYyhpcnEsIGRlc2MpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19oYW5kbGVfaXJxKTsKKwogLyogRHluYW1pYyBpbnRlcnJ1cHQgaGFuZGxpbmcgKi8KIAogLyoqCkBAIC0zMTEsNiArMzI3LDcgQEAKIAliaXRtYXBfY2xlYXIoYWxsb2NhdGVkX2lycXMsIGZyb20sIGNudCk7CiAJbXV0ZXhfdW5sb2NrKCZzcGFyc2VfaXJxX2xvY2spOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaXJxX2ZyZWVfZGVzY3MpOwogCiAvKioKICAqIGlycV9hbGxvY19kZXNjcyAtIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgcmFuZ2Ugb2YgaXJxIGRlc2NyaXB0b3JzCkBAIC0zNTEsNiArMzY4LDcgQEAKIAltdXRleF91bmxvY2soJnNwYXJzZV9pcnFfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGlycV9hbGxvY19kZXNjcyk7CiAKIC8qKgogICogaXJxX3Jlc2VydmVfaXJxcyAtIG1hcmsgaXJxcyBhbGxvY2F0ZWQKQEAgLTQzMCw3ICs0NDgsNiBAQAogCQkJKnBlcl9jcHVfcHRyKGRlc2MtPmtzdGF0X2lycXMsIGNwdSkgOiAwOwogfQogCi0jaWZkZWYgQ09ORklHX0dFTkVSSUNfSEFSRElSUVMKIHVuc2lnbmVkIGludCBrc3RhdF9pcnFzKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKQEAgLTQ0Myw0ICs0NjAsMyBAQAogCQlzdW0gKz0gKnBlcl9jcHVfcHRyKGRlc2MtPmtzdGF0X2lycXMsIGNwdSk7CiAJcmV0dXJuIHN1bTsKIH0KLSNlbmRpZiAvKiBDT05GSUdfR0VORVJJQ19IQVJESVJRUyAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9tYW5hZ2UuYyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKaW5kZXggMDdjMTYxMS4uZjdjZTAwMiAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9tYW5hZ2UuYworKysgYi9rZXJuZWwvaXJxL21hbmFnZS5jCkBAIC05MDAsNyArOTAwLDggQEAKIAkJICovCiAJCW5ldy0+aGFuZGxlciA9IGlycV9uZXN0ZWRfcHJpbWFyeV9oYW5kbGVyOwogCX0gZWxzZSB7Ci0JCWlycV9zZXR1cF9mb3JjZWRfdGhyZWFkaW5nKG5ldyk7CisJCWlmIChpcnFfc2V0dGluZ3NfY2FuX3RocmVhZChkZXNjKSkKKwkJCWlycV9zZXR1cF9mb3JjZWRfdGhyZWFkaW5nKG5ldyk7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvcHJvYy5jIGIva2VybmVsL2lycS9wcm9jLmMKaW5kZXggZGQyMDFiZC4uODM0ODk5ZiAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9wcm9jLmMKKysrIGIva2VybmVsL2lycS9wcm9jLmMKQEAgLTQxOSw3ICs0MTksNyBAQAogCX0gZWxzZSB7CiAJCXNlcV9wcmludGYocCwgIiAlOHMiLCAiTm9uZSIpOwogCX0KLSNpZmRlZiBDT05GSUdfR0VOSVJDX0lSUV9TSE9XX0xFVkVMCisjaWZkZWYgQ09ORklHX0dFTkVSSUNfSVJRX1NIT1dfTEVWRUwKIAlzZXFfcHJpbnRmKHAsICIgJS04cyIsIGlycWRfaXNfbGV2ZWxfdHlwZSgmZGVzYy0+aXJxX2RhdGEpID8gIkxldmVsIiA6ICJFZGdlIik7CiAjZW5kaWYKIAlpZiAoZGVzYy0+bmFtZSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvc2V0dGluZ3MuaCBiL2tlcm5lbC9pcnEvc2V0dGluZ3MuaAppbmRleCAwZDkxNzMwLi5mMTY2NzgzIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL3NldHRpbmdzLmgKKysrIGIva2VybmVsL2lycS9zZXR0aW5ncy5oCkBAIC04LDYgKzgsNyBAQAogCV9JUlFfTEVWRUwJCT0gSVJRX0xFVkVMLAogCV9JUlFfTk9QUk9CRQkJPSBJUlFfTk9QUk9CRSwKIAlfSVJRX05PUkVRVUVTVAkJPSBJUlFfTk9SRVFVRVNULAorCV9JUlFfTk9USFJFQUQJCT0gSVJRX05PVEhSRUFELAogCV9JUlFfTk9BVVRPRU4JCT0gSVJRX05PQVVUT0VOLAogCV9JUlFfTU9WRV9QQ05UWFQJPSBJUlFfTU9WRV9QQ05UWFQsCiAJX0lSUV9OT19CQUxBTkNJTkcJPSBJUlFfTk9fQkFMQU5DSU5HLApAQCAtMjAsNiArMjEsNyBAQAogI2RlZmluZSBJUlFfTEVWRUwJCUdPVF9ZT1VfTU9ST04KICNkZWZpbmUgSVJRX05PUFJPQkUJCUdPVF9ZT1VfTU9ST04KICNkZWZpbmUgSVJRX05PUkVRVUVTVAkJR09UX1lPVV9NT1JPTgorI2RlZmluZSBJUlFfTk9USFJFQUQJCUdPVF9ZT1VfTU9ST04KICNkZWZpbmUgSVJRX05PQVVUT0VOCQlHT1RfWU9VX01PUk9OCiAjZGVmaW5lIElSUV9ORVNURURfVEhSRUFECUdPVF9ZT1VfTU9ST04KICN1bmRlZiBJUlFGX01PRElGWV9NQVNLCkBAIC05NCw2ICs5NiwyMSBAQAogCWRlc2MtPnN0YXR1c191c2VfYWNjZXNzb3JzIHw9IF9JUlFfTk9SRVFVRVNUOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgaXJxX3NldHRpbmdzX2Nhbl90aHJlYWQoc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXJldHVybiAhKGRlc2MtPnN0YXR1c191c2VfYWNjZXNzb3JzICYgX0lSUV9OT1RIUkVBRCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfc2V0dGluZ3NfY2xyX25vdGhyZWFkKHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlkZXNjLT5zdGF0dXNfdXNlX2FjY2Vzc29ycyAmPSB+X0lSUV9OT1RIUkVBRDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlycV9zZXR0aW5nc19zZXRfbm90aHJlYWQoc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCWRlc2MtPnN0YXR1c191c2VfYWNjZXNzb3JzIHw9IF9JUlFfTk9USFJFQUQ7Cit9CisKIHN0YXRpYyBpbmxpbmUgYm9vbCBpcnFfc2V0dGluZ3NfY2FuX3Byb2JlKHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKIAlyZXR1cm4gIShkZXNjLT5zdGF0dXNfdXNlX2FjY2Vzc29ycyAmIF9JUlFfTk9QUk9CRSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvanVtcF9sYWJlbC5jIGIva2VybmVsL2p1bXBfbGFiZWwuYwppbmRleCAzYjc5YmQ5Li43NGQxYzA5IDEwMDY0NAotLS0gYS9rZXJuZWwvanVtcF9sYWJlbC5jCisrKyBiL2tlcm5lbC9qdW1wX2xhYmVsLmMKQEAgLTIsNDMgKzIsMjMgQEAKICAqIGp1bXAgbGFiZWwgc3VwcG9ydAogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBKYXNvbiBCYXJvbiA8amJhcm9uQHJlZGhhdC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUGV0ZXIgWmlqbHN0cmEgPHB6aWpsc3RyQHJlZGhhdC5jb20+CiAgKgogICovCi0jaW5jbHVkZSA8bGludXgvanVtcF9sYWJlbC5oPgogI2luY2x1ZGUgPGxpbnV4L21lbW9yeS5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvamhhc2guaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc29ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2p1bXBfbGFiZWwuaD4KIAogI2lmZGVmIEhBVkVfSlVNUF9MQUJFTAogCi0jZGVmaW5lIEpVTVBfTEFCRUxfSEFTSF9CSVRTIDYKLSNkZWZpbmUgSlVNUF9MQUJFTF9UQUJMRV9TSVpFICgxIDw8IEpVTVBfTEFCRUxfSEFTSF9CSVRTKQotc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIGp1bXBfbGFiZWxfdGFibGVbSlVNUF9MQUJFTF9UQUJMRV9TSVpFXTsKLQogLyogbXV0ZXggdG8gcHJvdGVjdCBjb21pbmcvZ29pbmcgb2YgdGhlIHRoZSBqdW1wX2xhYmVsIHRhYmxlICovCiBzdGF0aWMgREVGSU5FX01VVEVYKGp1bXBfbGFiZWxfbXV0ZXgpOwogCi1zdHJ1Y3QganVtcF9sYWJlbF9lbnRyeSB7Ci0Jc3RydWN0IGhsaXN0X25vZGUgaGxpc3Q7Ci0Jc3RydWN0IGp1bXBfZW50cnkgKnRhYmxlOwotCWludCBucl9lbnRyaWVzOwotCS8qIGhhbmcgbW9kdWxlcyBvZmYgaGVyZSAqLwotCXN0cnVjdCBobGlzdF9oZWFkIG1vZHVsZXM7Ci0JdW5zaWduZWQgbG9uZyBrZXk7Ci19OwotCi1zdHJ1Y3QganVtcF9sYWJlbF9tb2R1bGVfZW50cnkgewotCXN0cnVjdCBobGlzdF9ub2RlIGhsaXN0OwotCXN0cnVjdCBqdW1wX2VudHJ5ICp0YWJsZTsKLQlpbnQgbnJfZW50cmllczsKLQlzdHJ1Y3QgbW9kdWxlICptb2Q7Ci19OwotCiB2b2lkIGp1bXBfbGFiZWxfbG9jayh2b2lkKQogewogCW11dGV4X2xvY2soJmp1bXBfbGFiZWxfbXV0ZXgpOwpAQCAtNDksNiArMjksMTEgQEAKIAltdXRleF91bmxvY2soJmp1bXBfbGFiZWxfbXV0ZXgpOwogfQogCitib29sIGp1bXBfbGFiZWxfZW5hYmxlZChzdHJ1Y3QganVtcF9sYWJlbF9rZXkgKmtleSkKK3sKKwlyZXR1cm4gISFhdG9taWNfcmVhZCgma2V5LT5lbmFibGVkKTsKK30KKwogc3RhdGljIGludCBqdW1wX2xhYmVsX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQogewogCWNvbnN0IHN0cnVjdCBqdW1wX2VudHJ5ICpqZWEgPSBhOwpAQCAtNjQsNyArNDksNyBAQAogfQogCiBzdGF0aWMgdm9pZAotc29ydF9qdW1wX2xhYmVsX2VudHJpZXMoc3RydWN0IGp1bXBfZW50cnkgKnN0YXJ0LCBzdHJ1Y3QganVtcF9lbnRyeSAqc3RvcCkKK2p1bXBfbGFiZWxfc29ydF9lbnRyaWVzKHN0cnVjdCBqdW1wX2VudHJ5ICpzdGFydCwgc3RydWN0IGp1bXBfZW50cnkgKnN0b3ApCiB7CiAJdW5zaWduZWQgbG9uZyBzaXplOwogCkBAIC03MywxMTggKzU4LDI1IEBACiAJc29ydChzdGFydCwgc2l6ZSwgc2l6ZW9mKHN0cnVjdCBqdW1wX2VudHJ5KSwganVtcF9sYWJlbF9jbXAsIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IGp1bXBfbGFiZWxfZW50cnkgKmdldF9qdW1wX2xhYmVsX2VudHJ5KGp1bXBfbGFiZWxfdCBrZXkpCitzdGF0aWMgdm9pZCBqdW1wX2xhYmVsX3VwZGF0ZShzdHJ1Y3QganVtcF9sYWJlbF9rZXkgKmtleSwgaW50IGVuYWJsZSk7CisKK3ZvaWQganVtcF9sYWJlbF9pbmMoc3RydWN0IGp1bXBfbGFiZWxfa2V5ICprZXkpCiB7Ci0Jc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0Jc3RydWN0IGp1bXBfbGFiZWxfZW50cnkgKmU7Ci0JdTMyIGhhc2ggPSBqaGFzaCgodm9pZCAqKSZrZXksIHNpemVvZihqdW1wX2xhYmVsX3QpLCAwKTsKLQotCWhlYWQgPSAmanVtcF9sYWJlbF90YWJsZVtoYXNoICYgKEpVTVBfTEFCRUxfVEFCTEVfU0laRSAtIDEpXTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeShlLCBub2RlLCBoZWFkLCBobGlzdCkgewotCQlpZiAoa2V5ID09IGUtPmtleSkKLQkJCXJldHVybiBlOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHN0cnVjdCBqdW1wX2xhYmVsX2VudHJ5ICoKLWFkZF9qdW1wX2xhYmVsX2VudHJ5KGp1bXBfbGFiZWxfdCBrZXksIGludCBucl9lbnRyaWVzLCBzdHJ1Y3QganVtcF9lbnRyeSAqdGFibGUpCi17Ci0Jc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7Ci0Jc3RydWN0IGp1bXBfbGFiZWxfZW50cnkgKmU7Ci0JdTMyIGhhc2g7Ci0KLQllID0gZ2V0X2p1bXBfbGFiZWxfZW50cnkoa2V5KTsKLQlpZiAoZSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVFWElTVCk7Ci0KLQllID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGp1bXBfbGFiZWxfZW50cnkpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWUpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0JaGFzaCA9IGpoYXNoKCh2b2lkICopJmtleSwgc2l6ZW9mKGp1bXBfbGFiZWxfdCksIDApOwotCWhlYWQgPSAmanVtcF9sYWJlbF90YWJsZVtoYXNoICYgKEpVTVBfTEFCRUxfVEFCTEVfU0laRSAtIDEpXTsKLQllLT5rZXkgPSBrZXk7Ci0JZS0+dGFibGUgPSB0YWJsZTsKLQllLT5ucl9lbnRyaWVzID0gbnJfZW50cmllczsKLQlJTklUX0hMSVNUX0hFQUQoJihlLT5tb2R1bGVzKSk7Ci0JaGxpc3RfYWRkX2hlYWQoJmUtPmhsaXN0LCBoZWFkKTsKLQlyZXR1cm4gZTsKLX0KLQotc3RhdGljIGludAotYnVpbGRfanVtcF9sYWJlbF9oYXNodGFibGUoc3RydWN0IGp1bXBfZW50cnkgKnN0YXJ0LCBzdHJ1Y3QganVtcF9lbnRyeSAqc3RvcCkKLXsKLQlzdHJ1Y3QganVtcF9lbnRyeSAqaXRlciwgKml0ZXJfYmVnaW47Ci0Jc3RydWN0IGp1bXBfbGFiZWxfZW50cnkgKmVudHJ5OwotCWludCBjb3VudDsKLQotCXNvcnRfanVtcF9sYWJlbF9lbnRyaWVzKHN0YXJ0LCBzdG9wKTsKLQlpdGVyID0gc3RhcnQ7Ci0Jd2hpbGUgKGl0ZXIgPCBzdG9wKSB7Ci0JCWVudHJ5ID0gZ2V0X2p1bXBfbGFiZWxfZW50cnkoaXRlci0+a2V5KTsKLQkJaWYgKCFlbnRyeSkgewotCQkJaXRlcl9iZWdpbiA9IGl0ZXI7Ci0JCQljb3VudCA9IDA7Ci0JCQl3aGlsZSAoKGl0ZXIgPCBzdG9wKSAmJgotCQkJCShpdGVyLT5rZXkgPT0gaXRlcl9iZWdpbi0+a2V5KSkgewotCQkJCWl0ZXIrKzsKLQkJCQljb3VudCsrOwotCQkJfQotCQkJZW50cnkgPSBhZGRfanVtcF9sYWJlbF9lbnRyeShpdGVyX2JlZ2luLT5rZXksCi0JCQkJCQkJY291bnQsIGl0ZXJfYmVnaW4pOwotCQkJaWYgKElTX0VSUihlbnRyeSkpCi0JCQkJcmV0dXJuIFBUUl9FUlIoZW50cnkpOwotCQkgfSBlbHNlIHsKLQkJCVdBUk5fT05DRSgxLCBLRVJOX0VSUiAiYnVpbGRfanVtcF9oYXNodGFibGU6IHVuZXhwZWN0ZWQgZW50cnkhXG4iKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoqKgotICoganVtcF9sYWJlbF91cGRhdGUgLSB1cGRhdGUganVtcCBsYWJlbCB0ZXh0Ci0gKiBAa2V5IC0gIGtleSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggYSBhIGp1bXAgbGFiZWwKLSAqIEB0eXBlIC0gZW51bSBzZXQgdG8gSlVNUF9MQUJFTF9FTkFCTEUgb3IgSlVNUF9MQUJFTF9ESVNBQkxFCi0gKgotICogV2lsbCBlbmFibGUvZGlzYWJsZSB0aGUganVtcCBmb3IganVtcCBsYWJlbCBAa2V5LCBkZXBlbmRpbmcgb24gdGhlCi0gKiB2YWx1ZSBvZiBAdHlwZS4KLSAqCi0gKi8KLQotdm9pZCBqdW1wX2xhYmVsX3VwZGF0ZSh1bnNpZ25lZCBsb25nIGtleSwgZW51bSBqdW1wX2xhYmVsX3R5cGUgdHlwZSkKLXsKLQlzdHJ1Y3QganVtcF9lbnRyeSAqaXRlcjsKLQlzdHJ1Y3QganVtcF9sYWJlbF9lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm1vZHVsZV9ub2RlOwotCXN0cnVjdCBqdW1wX2xhYmVsX21vZHVsZV9lbnRyeSAqZV9tb2R1bGU7Ci0JaW50IGNvdW50OworCWlmIChhdG9taWNfaW5jX25vdF96ZXJvKCZrZXktPmVuYWJsZWQpKQorCQlyZXR1cm47CiAKIAlqdW1wX2xhYmVsX2xvY2soKTsKLQllbnRyeSA9IGdldF9qdW1wX2xhYmVsX2VudHJ5KChqdW1wX2xhYmVsX3Qpa2V5KTsKLQlpZiAoZW50cnkpIHsKLQkJY291bnQgPSBlbnRyeS0+bnJfZW50cmllczsKLQkJaXRlciA9IGVudHJ5LT50YWJsZTsKLQkJd2hpbGUgKGNvdW50LS0pIHsKLQkJCWlmIChrZXJuZWxfdGV4dF9hZGRyZXNzKGl0ZXItPmNvZGUpKQotCQkJCWFyY2hfanVtcF9sYWJlbF90cmFuc2Zvcm0oaXRlciwgdHlwZSk7Ci0JCQlpdGVyKys7Ci0JCX0KLQkJLyogZWFuYmxlL2Rpc2FibGUganVtcCBsYWJlbHMgaW4gbW9kdWxlcyAqLwotCQlobGlzdF9mb3JfZWFjaF9lbnRyeShlX21vZHVsZSwgbW9kdWxlX25vZGUsICYoZW50cnktPm1vZHVsZXMpLAotCQkJCQkJCWhsaXN0KSB7Ci0JCQljb3VudCA9IGVfbW9kdWxlLT5ucl9lbnRyaWVzOwotCQkJaXRlciA9IGVfbW9kdWxlLT50YWJsZTsKLQkJCXdoaWxlIChjb3VudC0tKSB7Ci0JCQkJaWYgKGl0ZXItPmtleSAmJgotCQkJCQkJa2VybmVsX3RleHRfYWRkcmVzcyhpdGVyLT5jb2RlKSkKLQkJCQkJYXJjaF9qdW1wX2xhYmVsX3RyYW5zZm9ybShpdGVyLCB0eXBlKTsKLQkJCQlpdGVyKys7Ci0JCQl9Ci0JCX0KLQl9CisJaWYgKGF0b21pY19hZGRfcmV0dXJuKDEsICZrZXktPmVuYWJsZWQpID09IDEpCisJCWp1bXBfbGFiZWxfdXBkYXRlKGtleSwgSlVNUF9MQUJFTF9FTkFCTEUpOworCWp1bXBfbGFiZWxfdW5sb2NrKCk7Cit9CisKK3ZvaWQganVtcF9sYWJlbF9kZWMoc3RydWN0IGp1bXBfbGFiZWxfa2V5ICprZXkpCit7CisJaWYgKCFhdG9taWNfZGVjX2FuZF9tdXRleF9sb2NrKCZrZXktPmVuYWJsZWQsICZqdW1wX2xhYmVsX211dGV4KSkKKwkJcmV0dXJuOworCisJanVtcF9sYWJlbF91cGRhdGUoa2V5LCBKVU1QX0xBQkVMX0RJU0FCTEUpOwogCWp1bXBfbGFiZWxfdW5sb2NrKCk7CiB9CiAKQEAgLTE5Nyw0MSArODksMjU0IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfTU9EVUxFUwotCi1zdGF0aWMgaW50IG1vZHVsZV9jb25mbGljdCh2b2lkICpzdGFydCwgdm9pZCAqZW5kKQorc3RhdGljIGludCBfX2p1bXBfbGFiZWxfdGV4dF9yZXNlcnZlZChzdHJ1Y3QganVtcF9lbnRyeSAqaXRlcl9zdGFydCwKKwkJc3RydWN0IGp1bXBfZW50cnkgKml0ZXJfc3RvcCwgdm9pZCAqc3RhcnQsIHZvaWQgKmVuZCkKIHsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKm5vZGVfbmV4dCwgKm1vZHVsZV9ub2RlLCAqbW9kdWxlX25vZGVfbmV4dDsKLQlzdHJ1Y3QganVtcF9sYWJlbF9lbnRyeSAqZTsKLQlzdHJ1Y3QganVtcF9sYWJlbF9tb2R1bGVfZW50cnkgKmVfbW9kdWxlOwogCXN0cnVjdCBqdW1wX2VudHJ5ICppdGVyOwotCWludCBpLCBjb3VudDsKLQlpbnQgY29uZmxpY3QgPSAwOwogCi0JZm9yIChpID0gMDsgaSA8IEpVTVBfTEFCRUxfVEFCTEVfU0laRTsgaSsrKSB7Ci0JCWhlYWQgPSAmanVtcF9sYWJlbF90YWJsZVtpXTsKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlLCBub2RlLCBub2RlX25leHQsIGhlYWQsIGhsaXN0KSB7Ci0JCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVfbW9kdWxlLCBtb2R1bGVfbm9kZSwKLQkJCQkJCQltb2R1bGVfbm9kZV9uZXh0LAotCQkJCQkJCSYoZS0+bW9kdWxlcyksIGhsaXN0KSB7Ci0JCQkJY291bnQgPSBlX21vZHVsZS0+bnJfZW50cmllczsKLQkJCQlpdGVyID0gZV9tb2R1bGUtPnRhYmxlOwotCQkJCXdoaWxlIChjb3VudC0tKSB7Ci0JCQkJCWlmIChhZGRyX2NvbmZsaWN0KGl0ZXIsIHN0YXJ0LCBlbmQpKSB7Ci0JCQkJCQljb25mbGljdCA9IDE7Ci0JCQkJCQlnb3RvIG91dDsKLQkJCQkJfQotCQkJCQlpdGVyKys7Ci0JCQkJfQotCQkJfQotCQl9CisJaXRlciA9IGl0ZXJfc3RhcnQ7CisJd2hpbGUgKGl0ZXIgPCBpdGVyX3N0b3ApIHsKKwkJaWYgKGFkZHJfY29uZmxpY3QoaXRlciwgc3RhcnQsIGVuZCkpCisJCQlyZXR1cm4gMTsKKwkJaXRlcisrOwogCX0KLW91dDoKLQlyZXR1cm4gY29uZmxpY3Q7CisKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgX19qdW1wX2xhYmVsX3VwZGF0ZShzdHJ1Y3QganVtcF9sYWJlbF9rZXkgKmtleSwKKwkJc3RydWN0IGp1bXBfZW50cnkgKmVudHJ5LCBpbnQgZW5hYmxlKQoreworCWZvciAoOyBlbnRyeS0+a2V5ID09IChqdW1wX2xhYmVsX3QpKHVuc2lnbmVkIGxvbmcpa2V5OyBlbnRyeSsrKSB7CisJCS8qCisJCSAqIGVudHJ5LT5jb2RlIHNldCB0byAwIGludmFsaWRhdGVzIG1vZHVsZSBpbml0IHRleHQgc2VjdGlvbnMKKwkJICoga2VybmVsX3RleHRfYWRkcmVzcygpIHZlcmlmaWVzIHdlIGFyZSBub3QgaW4gY29yZSBrZXJuZWwKKwkJICogaW5pdCBjb2RlLCBzZWUganVtcF9sYWJlbF9pbnZhbGlkYXRlX21vZHVsZV9pbml0KCkuCisJCSAqLworCQlpZiAoZW50cnktPmNvZGUgJiYga2VybmVsX3RleHRfYWRkcmVzcyhlbnRyeS0+Y29kZSkpCisJCQlhcmNoX2p1bXBfbGFiZWxfdHJhbnNmb3JtKGVudHJ5LCBlbmFibGUpOworCX0KK30KKworLyoKKyAqIE5vdCBhbGwgYXJjaHMgbmVlZCB0aGlzLgorICovCit2b2lkIF9fd2VhayBhcmNoX2p1bXBfbGFiZWxfdGV4dF9wb2tlX2Vhcmx5KGp1bXBfbGFiZWxfdCBhZGRyKQoreworfQorCitzdGF0aWMgX19pbml0IGludCBqdW1wX2xhYmVsX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QganVtcF9lbnRyeSAqaXRlcl9zdGFydCA9IF9fc3RhcnRfX19qdW1wX3RhYmxlOworCXN0cnVjdCBqdW1wX2VudHJ5ICppdGVyX3N0b3AgPSBfX3N0b3BfX19qdW1wX3RhYmxlOworCXN0cnVjdCBqdW1wX2xhYmVsX2tleSAqa2V5ID0gTlVMTDsKKwlzdHJ1Y3QganVtcF9lbnRyeSAqaXRlcjsKKworCWp1bXBfbGFiZWxfbG9jaygpOworCWp1bXBfbGFiZWxfc29ydF9lbnRyaWVzKGl0ZXJfc3RhcnQsIGl0ZXJfc3RvcCk7CisKKwlmb3IgKGl0ZXIgPSBpdGVyX3N0YXJ0OyBpdGVyIDwgaXRlcl9zdG9wOyBpdGVyKyspIHsKKwkJYXJjaF9qdW1wX2xhYmVsX3RleHRfcG9rZV9lYXJseShpdGVyLT5jb2RlKTsKKwkJaWYgKGl0ZXItPmtleSA9PSAoanVtcF9sYWJlbF90KSh1bnNpZ25lZCBsb25nKWtleSkKKwkJCWNvbnRpbnVlOworCisJCWtleSA9IChzdHJ1Y3QganVtcF9sYWJlbF9rZXkgKikodW5zaWduZWQgbG9uZylpdGVyLT5rZXk7CisJCWF0b21pY19zZXQoJmtleS0+ZW5hYmxlZCwgMCk7CisJCWtleS0+ZW50cmllcyA9IGl0ZXI7CisjaWZkZWYgQ09ORklHX01PRFVMRVMKKwkJa2V5LT5uZXh0ID0gTlVMTDsKICNlbmRpZgorCX0KKwlqdW1wX2xhYmVsX3VubG9jaygpOworCisJcmV0dXJuIDA7Cit9CitlYXJseV9pbml0Y2FsbChqdW1wX2xhYmVsX2luaXQpOworCisjaWZkZWYgQ09ORklHX01PRFVMRVMKKworc3RydWN0IGp1bXBfbGFiZWxfbW9kIHsKKwlzdHJ1Y3QganVtcF9sYWJlbF9tb2QgKm5leHQ7CisJc3RydWN0IGp1bXBfZW50cnkgKmVudHJpZXM7CisJc3RydWN0IG1vZHVsZSAqbW9kOworfTsKKworc3RhdGljIGludCBfX2p1bXBfbGFiZWxfbW9kX3RleHRfcmVzZXJ2ZWQodm9pZCAqc3RhcnQsIHZvaWQgKmVuZCkKK3sKKwlzdHJ1Y3QgbW9kdWxlICptb2Q7CisKKwltb2QgPSBfX21vZHVsZV90ZXh0X2FkZHJlc3MoKHVuc2lnbmVkIGxvbmcpc3RhcnQpOworCWlmICghbW9kKQorCQlyZXR1cm4gMDsKKworCVdBUk5fT05fT05DRShfX21vZHVsZV90ZXh0X2FkZHJlc3MoKHVuc2lnbmVkIGxvbmcpZW5kKSAhPSBtb2QpOworCisJcmV0dXJuIF9fanVtcF9sYWJlbF90ZXh0X3Jlc2VydmVkKG1vZC0+anVtcF9lbnRyaWVzLAorCQkJCW1vZC0+anVtcF9lbnRyaWVzICsgbW9kLT5udW1fanVtcF9lbnRyaWVzLAorCQkJCXN0YXJ0LCBlbmQpOworfQorCitzdGF0aWMgdm9pZCBfX2p1bXBfbGFiZWxfbW9kX3VwZGF0ZShzdHJ1Y3QganVtcF9sYWJlbF9rZXkgKmtleSwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QganVtcF9sYWJlbF9tb2QgKm1vZCA9IGtleS0+bmV4dDsKKworCXdoaWxlIChtb2QpIHsKKwkJX19qdW1wX2xhYmVsX3VwZGF0ZShrZXksIG1vZC0+ZW50cmllcywgZW5hYmxlKTsKKwkJbW9kID0gbW9kLT5uZXh0OworCX0KK30KKworLyoqKgorICogYXBwbHlfanVtcF9sYWJlbF9ub3BzIC0gcGF0Y2ggbW9kdWxlIGp1bXAgbGFiZWxzIHdpdGggYXJjaF9nZXRfanVtcF9sYWJlbF9ub3AoKQorICogQG1vZDogbW9kdWxlIHRvIHBhdGNoCisgKgorICogQWxsb3cgZm9yIHJ1bi10aW1lIHNlbGVjdGlvbiBvZiB0aGUgb3B0aW1hbCBub3BzLiBCZWZvcmUgdGhlIG1vZHVsZQorICogbG9hZHMgcGF0Y2ggdGhlc2Ugd2l0aCBhcmNoX2dldF9qdW1wX2xhYmVsX25vcCgpLCB3aGljaCBpcyBzcGVjaWZpZWQgYnkKKyAqIHRoZSBhcmNoIHNwZWNpZmljIGp1bXAgbGFiZWwgY29kZS4KKyAqLwordm9pZCBqdW1wX2xhYmVsX2FwcGx5X25vcHMoc3RydWN0IG1vZHVsZSAqbW9kKQoreworCXN0cnVjdCBqdW1wX2VudHJ5ICppdGVyX3N0YXJ0ID0gbW9kLT5qdW1wX2VudHJpZXM7CisJc3RydWN0IGp1bXBfZW50cnkgKml0ZXJfc3RvcCA9IGl0ZXJfc3RhcnQgKyBtb2QtPm51bV9qdW1wX2VudHJpZXM7CisJc3RydWN0IGp1bXBfZW50cnkgKml0ZXI7CisKKwkvKiBpZiB0aGUgbW9kdWxlIGRvZXNuJ3QgaGF2ZSBqdW1wIGxhYmVsIGVudHJpZXMsIGp1c3QgcmV0dXJuICovCisJaWYgKGl0ZXJfc3RhcnQgPT0gaXRlcl9zdG9wKQorCQlyZXR1cm47CisKKwlmb3IgKGl0ZXIgPSBpdGVyX3N0YXJ0OyBpdGVyIDwgaXRlcl9zdG9wOyBpdGVyKyspCisJCWFyY2hfanVtcF9sYWJlbF90ZXh0X3Bva2VfZWFybHkoaXRlci0+Y29kZSk7Cit9CisKK3N0YXRpYyBpbnQganVtcF9sYWJlbF9hZGRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCkKK3sKKwlzdHJ1Y3QganVtcF9lbnRyeSAqaXRlcl9zdGFydCA9IG1vZC0+anVtcF9lbnRyaWVzOworCXN0cnVjdCBqdW1wX2VudHJ5ICppdGVyX3N0b3AgPSBpdGVyX3N0YXJ0ICsgbW9kLT5udW1fanVtcF9lbnRyaWVzOworCXN0cnVjdCBqdW1wX2VudHJ5ICppdGVyOworCXN0cnVjdCBqdW1wX2xhYmVsX2tleSAqa2V5ID0gTlVMTDsKKwlzdHJ1Y3QganVtcF9sYWJlbF9tb2QgKmpsbTsKKworCS8qIGlmIHRoZSBtb2R1bGUgZG9lc24ndCBoYXZlIGp1bXAgbGFiZWwgZW50cmllcywganVzdCByZXR1cm4gKi8KKwlpZiAoaXRlcl9zdGFydCA9PSBpdGVyX3N0b3ApCisJCXJldHVybiAwOworCisJanVtcF9sYWJlbF9zb3J0X2VudHJpZXMoaXRlcl9zdGFydCwgaXRlcl9zdG9wKTsKKworCWZvciAoaXRlciA9IGl0ZXJfc3RhcnQ7IGl0ZXIgPCBpdGVyX3N0b3A7IGl0ZXIrKykgeworCQlpZiAoaXRlci0+a2V5ID09IChqdW1wX2xhYmVsX3QpKHVuc2lnbmVkIGxvbmcpa2V5KQorCQkJY29udGludWU7CisKKwkJa2V5ID0gKHN0cnVjdCBqdW1wX2xhYmVsX2tleSAqKSh1bnNpZ25lZCBsb25nKWl0ZXItPmtleTsKKworCQlpZiAoX19tb2R1bGVfYWRkcmVzcyhpdGVyLT5rZXkpID09IG1vZCkgeworCQkJYXRvbWljX3NldCgma2V5LT5lbmFibGVkLCAwKTsKKwkJCWtleS0+ZW50cmllcyA9IGl0ZXI7CisJCQlrZXktPm5leHQgPSBOVUxMOworCQkJY29udGludWU7CisJCX0KKworCQlqbG0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QganVtcF9sYWJlbF9tb2QpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFqbG0pCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlqbG0tPm1vZCA9IG1vZDsKKwkJamxtLT5lbnRyaWVzID0gaXRlcjsKKwkJamxtLT5uZXh0ID0ga2V5LT5uZXh0OworCQlrZXktPm5leHQgPSBqbG07CisKKwkJaWYgKGp1bXBfbGFiZWxfZW5hYmxlZChrZXkpKQorCQkJX19qdW1wX2xhYmVsX3VwZGF0ZShrZXksIGl0ZXIsIEpVTVBfTEFCRUxfRU5BQkxFKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQganVtcF9sYWJlbF9kZWxfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCkKK3sKKwlzdHJ1Y3QganVtcF9lbnRyeSAqaXRlcl9zdGFydCA9IG1vZC0+anVtcF9lbnRyaWVzOworCXN0cnVjdCBqdW1wX2VudHJ5ICppdGVyX3N0b3AgPSBpdGVyX3N0YXJ0ICsgbW9kLT5udW1fanVtcF9lbnRyaWVzOworCXN0cnVjdCBqdW1wX2VudHJ5ICppdGVyOworCXN0cnVjdCBqdW1wX2xhYmVsX2tleSAqa2V5ID0gTlVMTDsKKwlzdHJ1Y3QganVtcF9sYWJlbF9tb2QgKmpsbSwgKipwcmV2OworCisJZm9yIChpdGVyID0gaXRlcl9zdGFydDsgaXRlciA8IGl0ZXJfc3RvcDsgaXRlcisrKSB7CisJCWlmIChpdGVyLT5rZXkgPT0gKGp1bXBfbGFiZWxfdCkodW5zaWduZWQgbG9uZylrZXkpCisJCQljb250aW51ZTsKKworCQlrZXkgPSAoc3RydWN0IGp1bXBfbGFiZWxfa2V5ICopKHVuc2lnbmVkIGxvbmcpaXRlci0+a2V5OworCisJCWlmIChfX21vZHVsZV9hZGRyZXNzKGl0ZXItPmtleSkgPT0gbW9kKQorCQkJY29udGludWU7CisKKwkJcHJldiA9ICZrZXktPm5leHQ7CisJCWpsbSA9IGtleS0+bmV4dDsKKworCQl3aGlsZSAoamxtICYmIGpsbS0+bW9kICE9IG1vZCkgeworCQkJcHJldiA9ICZqbG0tPm5leHQ7CisJCQlqbG0gPSBqbG0tPm5leHQ7CisJCX0KKworCQlpZiAoamxtKSB7CisJCQkqcHJldiA9IGpsbS0+bmV4dDsKKwkJCWtmcmVlKGpsbSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGp1bXBfbGFiZWxfaW52YWxpZGF0ZV9tb2R1bGVfaW5pdChzdHJ1Y3QgbW9kdWxlICptb2QpCit7CisJc3RydWN0IGp1bXBfZW50cnkgKml0ZXJfc3RhcnQgPSBtb2QtPmp1bXBfZW50cmllczsKKwlzdHJ1Y3QganVtcF9lbnRyeSAqaXRlcl9zdG9wID0gaXRlcl9zdGFydCArIG1vZC0+bnVtX2p1bXBfZW50cmllczsKKwlzdHJ1Y3QganVtcF9lbnRyeSAqaXRlcjsKKworCWZvciAoaXRlciA9IGl0ZXJfc3RhcnQ7IGl0ZXIgPCBpdGVyX3N0b3A7IGl0ZXIrKykgeworCQlpZiAod2l0aGluX21vZHVsZV9pbml0KGl0ZXItPmNvZGUsIG1vZCkpCisJCQlpdGVyLT5jb2RlID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK2p1bXBfbGFiZWxfbW9kdWxlX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgdmFsLAorCQkJIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG1vZHVsZSAqbW9kID0gZGF0YTsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAodmFsKSB7CisJY2FzZSBNT0RVTEVfU1RBVEVfQ09NSU5HOgorCQlqdW1wX2xhYmVsX2xvY2soKTsKKwkJcmV0ID0ganVtcF9sYWJlbF9hZGRfbW9kdWxlKG1vZCk7CisJCWlmIChyZXQpCisJCQlqdW1wX2xhYmVsX2RlbF9tb2R1bGUobW9kKTsKKwkJanVtcF9sYWJlbF91bmxvY2soKTsKKwkJYnJlYWs7CisJY2FzZSBNT0RVTEVfU1RBVEVfR09JTkc6CisJCWp1bXBfbGFiZWxfbG9jaygpOworCQlqdW1wX2xhYmVsX2RlbF9tb2R1bGUobW9kKTsKKwkJanVtcF9sYWJlbF91bmxvY2soKTsKKwkJYnJlYWs7CisJY2FzZSBNT0RVTEVfU1RBVEVfTElWRToKKwkJanVtcF9sYWJlbF9sb2NrKCk7CisJCWp1bXBfbGFiZWxfaW52YWxpZGF0ZV9tb2R1bGVfaW5pdChtb2QpOworCQlqdW1wX2xhYmVsX3VubG9jaygpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhyZXQpOworfQorCitzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sganVtcF9sYWJlbF9tb2R1bGVfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBqdW1wX2xhYmVsX21vZHVsZV9ub3RpZnksCisJLnByaW9yaXR5ID0gMSwgLyogaGlnaGVyIHRoYW4gdHJhY2Vwb2ludHMgKi8KK307CisKK3N0YXRpYyBfX2luaXQgaW50IGp1bXBfbGFiZWxfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gcmVnaXN0ZXJfbW9kdWxlX25vdGlmaWVyKCZqdW1wX2xhYmVsX21vZHVsZV9uYik7Cit9CitlYXJseV9pbml0Y2FsbChqdW1wX2xhYmVsX2luaXRfbW9kdWxlKTsKKworI2VuZGlmIC8qIENPTkZJR19NT0RVTEVTICovCiAKIC8qKioKICAqIGp1bXBfbGFiZWxfdGV4dF9yZXNlcnZlZCAtIGNoZWNrIGlmIGFkZHIgcmFuZ2UgaXMgcmVzZXJ2ZWQKQEAgLTI0OCwyMzcgKzM1MywyOSBAQAogICovCiBpbnQganVtcF9sYWJlbF90ZXh0X3Jlc2VydmVkKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpCiB7Ci0Jc3RydWN0IGp1bXBfZW50cnkgKml0ZXI7Ci0Jc3RydWN0IGp1bXBfZW50cnkgKml0ZXJfc3RhcnQgPSBfX3N0YXJ0X19fanVtcF90YWJsZTsKLQlzdHJ1Y3QganVtcF9lbnRyeSAqaXRlcl9zdG9wID0gX19zdGFydF9fX2p1bXBfdGFibGU7Ci0JaW50IGNvbmZsaWN0ID0gMDsKKwlpbnQgcmV0ID0gX19qdW1wX2xhYmVsX3RleHRfcmVzZXJ2ZWQoX19zdGFydF9fX2p1bXBfdGFibGUsCisJCQlfX3N0b3BfX19qdW1wX3RhYmxlLCBzdGFydCwgZW5kKTsKIAotCWl0ZXIgPSBpdGVyX3N0YXJ0OwotCXdoaWxlIChpdGVyIDwgaXRlcl9zdG9wKSB7Ci0JCWlmIChhZGRyX2NvbmZsaWN0KGl0ZXIsIHN0YXJ0LCBlbmQpKSB7Ci0JCQljb25mbGljdCA9IDE7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlpdGVyKys7Ci0JfQorCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKLQkvKiBub3cgY2hlY2sgbW9kdWxlcyAqLwogI2lmZGVmIENPTkZJR19NT0RVTEVTCi0JY29uZmxpY3QgPSBtb2R1bGVfY29uZmxpY3Qoc3RhcnQsIGVuZCk7CisJcmV0ID0gX19qdW1wX2xhYmVsX21vZF90ZXh0X3Jlc2VydmVkKHN0YXJ0LCBlbmQpOwogI2VuZGlmCi1vdXQ6Ci0JcmV0dXJuIGNvbmZsaWN0OwotfQotCi0vKgotICogTm90IGFsbCBhcmNocyBuZWVkIHRoaXMuCi0gKi8KLXZvaWQgX193ZWFrIGFyY2hfanVtcF9sYWJlbF90ZXh0X3Bva2VfZWFybHkoanVtcF9sYWJlbF90IGFkZHIpCi17Ci19Ci0KLXN0YXRpYyBfX2luaXQgaW50IGluaXRfanVtcF9sYWJlbCh2b2lkKQotewotCWludCByZXQ7Ci0Jc3RydWN0IGp1bXBfZW50cnkgKml0ZXJfc3RhcnQgPSBfX3N0YXJ0X19fanVtcF90YWJsZTsKLQlzdHJ1Y3QganVtcF9lbnRyeSAqaXRlcl9zdG9wID0gX19zdG9wX19fanVtcF90YWJsZTsKLQlzdHJ1Y3QganVtcF9lbnRyeSAqaXRlcjsKLQotCWp1bXBfbGFiZWxfbG9jaygpOwotCXJldCA9IGJ1aWxkX2p1bXBfbGFiZWxfaGFzaHRhYmxlKF9fc3RhcnRfX19qdW1wX3RhYmxlLAotCQkJCQkgX19zdG9wX19fanVtcF90YWJsZSk7Ci0JaXRlciA9IGl0ZXJfc3RhcnQ7Ci0Jd2hpbGUgKGl0ZXIgPCBpdGVyX3N0b3ApIHsKLQkJYXJjaF9qdW1wX2xhYmVsX3RleHRfcG9rZV9lYXJseShpdGVyLT5jb2RlKTsKLQkJaXRlcisrOwotCX0KLQlqdW1wX2xhYmVsX3VubG9jaygpOwogCXJldHVybiByZXQ7CiB9Ci1lYXJseV9pbml0Y2FsbChpbml0X2p1bXBfbGFiZWwpOworCitzdGF0aWMgdm9pZCBqdW1wX2xhYmVsX3VwZGF0ZShzdHJ1Y3QganVtcF9sYWJlbF9rZXkgKmtleSwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QganVtcF9lbnRyeSAqZW50cnkgPSBrZXktPmVudHJpZXM7CisKKwkvKiBpZiB0aGVyZSBhcmUgbm8gdXNlcnMsIGVudHJ5IGNhbiBiZSBOVUxMICovCisJaWYgKGVudHJ5KQorCQlfX2p1bXBfbGFiZWxfdXBkYXRlKGtleSwgZW50cnksIGVuYWJsZSk7CiAKICNpZmRlZiBDT05GSUdfTU9EVUxFUwotCi1zdGF0aWMgc3RydWN0IGp1bXBfbGFiZWxfbW9kdWxlX2VudHJ5ICoKLWFkZF9qdW1wX2xhYmVsX21vZHVsZV9lbnRyeShzdHJ1Y3QganVtcF9sYWJlbF9lbnRyeSAqZW50cnksCi0JCQkgICAgc3RydWN0IGp1bXBfZW50cnkgKml0ZXJfYmVnaW4sCi0JCQkgICAgaW50IGNvdW50LCBzdHJ1Y3QgbW9kdWxlICptb2QpCi17Ci0Jc3RydWN0IGp1bXBfbGFiZWxfbW9kdWxlX2VudHJ5ICplOwotCi0JZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBqdW1wX2xhYmVsX21vZHVsZV9lbnRyeSksIEdGUF9LRVJORUwpOwotCWlmICghZSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JZS0+bW9kID0gbW9kOwotCWUtPm5yX2VudHJpZXMgPSBjb3VudDsKLQllLT50YWJsZSA9IGl0ZXJfYmVnaW47Ci0JaGxpc3RfYWRkX2hlYWQoJmUtPmhsaXN0LCAmZW50cnktPm1vZHVsZXMpOwotCXJldHVybiBlOworCV9fanVtcF9sYWJlbF9tb2RfdXBkYXRlKGtleSwgZW5hYmxlKTsKKyNlbmRpZgogfQogCi1zdGF0aWMgaW50IGFkZF9qdW1wX2xhYmVsX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QpCi17Ci0Jc3RydWN0IGp1bXBfZW50cnkgKml0ZXIsICppdGVyX2JlZ2luOwotCXN0cnVjdCBqdW1wX2xhYmVsX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3QganVtcF9sYWJlbF9tb2R1bGVfZW50cnkgKm1vZHVsZV9lbnRyeTsKLQlpbnQgY291bnQ7Ci0KLQkvKiBpZiB0aGUgbW9kdWxlIGRvZXNuJ3QgaGF2ZSBqdW1wIGxhYmVsIGVudHJpZXMsIGp1c3QgcmV0dXJuICovCi0JaWYgKCFtb2QtPm51bV9qdW1wX2VudHJpZXMpCi0JCXJldHVybiAwOwotCi0Jc29ydF9qdW1wX2xhYmVsX2VudHJpZXMobW9kLT5qdW1wX2VudHJpZXMsCi0JCQkJbW9kLT5qdW1wX2VudHJpZXMgKyBtb2QtPm51bV9qdW1wX2VudHJpZXMpOwotCWl0ZXIgPSBtb2QtPmp1bXBfZW50cmllczsKLQl3aGlsZSAoaXRlciA8IG1vZC0+anVtcF9lbnRyaWVzICsgbW9kLT5udW1fanVtcF9lbnRyaWVzKSB7Ci0JCWVudHJ5ID0gZ2V0X2p1bXBfbGFiZWxfZW50cnkoaXRlci0+a2V5KTsKLQkJaXRlcl9iZWdpbiA9IGl0ZXI7Ci0JCWNvdW50ID0gMDsKLQkJd2hpbGUgKChpdGVyIDwgbW9kLT5qdW1wX2VudHJpZXMgKyBtb2QtPm51bV9qdW1wX2VudHJpZXMpICYmCi0JCQkoaXRlci0+a2V5ID09IGl0ZXJfYmVnaW4tPmtleSkpIHsKLQkJCQlpdGVyKys7Ci0JCQkJY291bnQrKzsKLQkJfQotCQlpZiAoIWVudHJ5KSB7Ci0JCQllbnRyeSA9IGFkZF9qdW1wX2xhYmVsX2VudHJ5KGl0ZXJfYmVnaW4tPmtleSwgMCwgTlVMTCk7Ci0JCQlpZiAoSVNfRVJSKGVudHJ5KSkKLQkJCQlyZXR1cm4gUFRSX0VSUihlbnRyeSk7Ci0JCX0KLQkJbW9kdWxlX2VudHJ5ID0gYWRkX2p1bXBfbGFiZWxfbW9kdWxlX2VudHJ5KGVudHJ5LCBpdGVyX2JlZ2luLAotCQkJCQkJCSAgIGNvdW50LCBtb2QpOwotCQlpZiAoSVNfRVJSKG1vZHVsZV9lbnRyeSkpCi0JCQlyZXR1cm4gUFRSX0VSUihtb2R1bGVfZW50cnkpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcmVtb3ZlX2p1bXBfbGFiZWxfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCkKLXsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKm5vZGVfbmV4dCwgKm1vZHVsZV9ub2RlLCAqbW9kdWxlX25vZGVfbmV4dDsKLQlzdHJ1Y3QganVtcF9sYWJlbF9lbnRyeSAqZTsKLQlzdHJ1Y3QganVtcF9sYWJlbF9tb2R1bGVfZW50cnkgKmVfbW9kdWxlOwotCWludCBpOwotCi0JLyogaWYgdGhlIG1vZHVsZSBkb2Vzbid0IGhhdmUganVtcCBsYWJlbCBlbnRyaWVzLCBqdXN0IHJldHVybiAqLwotCWlmICghbW9kLT5udW1fanVtcF9lbnRyaWVzKQotCQlyZXR1cm47Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSlVNUF9MQUJFTF9UQUJMRV9TSVpFOyBpKyspIHsKLQkJaGVhZCA9ICZqdW1wX2xhYmVsX3RhYmxlW2ldOwotCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIG5vZGUsIG5vZGVfbmV4dCwgaGVhZCwgaGxpc3QpIHsKLQkJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZV9tb2R1bGUsIG1vZHVsZV9ub2RlLAotCQkJCQkJICBtb2R1bGVfbm9kZV9uZXh0LAotCQkJCQkJICAmKGUtPm1vZHVsZXMpLCBobGlzdCkgewotCQkJCWlmIChlX21vZHVsZS0+bW9kID09IG1vZCkgewotCQkJCQlobGlzdF9kZWwoJmVfbW9kdWxlLT5obGlzdCk7Ci0JCQkJCWtmcmVlKGVfbW9kdWxlKTsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoaGxpc3RfZW1wdHkoJmUtPm1vZHVsZXMpICYmIChlLT5ucl9lbnRyaWVzID09IDApKSB7Ci0JCQkJaGxpc3RfZGVsKCZlLT5obGlzdCk7Ci0JCQkJa2ZyZWUoZSk7Ci0JCQl9Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHJlbW92ZV9qdW1wX2xhYmVsX21vZHVsZV9pbml0KHN0cnVjdCBtb2R1bGUgKm1vZCkKLXsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKm5vZGVfbmV4dCwgKm1vZHVsZV9ub2RlLCAqbW9kdWxlX25vZGVfbmV4dDsKLQlzdHJ1Y3QganVtcF9sYWJlbF9lbnRyeSAqZTsKLQlzdHJ1Y3QganVtcF9sYWJlbF9tb2R1bGVfZW50cnkgKmVfbW9kdWxlOwotCXN0cnVjdCBqdW1wX2VudHJ5ICppdGVyOwotCWludCBpLCBjb3VudDsKLQotCS8qIGlmIHRoZSBtb2R1bGUgZG9lc24ndCBoYXZlIGp1bXAgbGFiZWwgZW50cmllcywganVzdCByZXR1cm4gKi8KLQlpZiAoIW1vZC0+bnVtX2p1bXBfZW50cmllcykKLQkJcmV0dXJuOwotCi0JZm9yIChpID0gMDsgaSA8IEpVTVBfTEFCRUxfVEFCTEVfU0laRTsgaSsrKSB7Ci0JCWhlYWQgPSAmanVtcF9sYWJlbF90YWJsZVtpXTsKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlLCBub2RlLCBub2RlX25leHQsIGhlYWQsIGhsaXN0KSB7Ci0JCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVfbW9kdWxlLCBtb2R1bGVfbm9kZSwKLQkJCQkJCSAgbW9kdWxlX25vZGVfbmV4dCwKLQkJCQkJCSAgJihlLT5tb2R1bGVzKSwgaGxpc3QpIHsKLQkJCQlpZiAoZV9tb2R1bGUtPm1vZCAhPSBtb2QpCi0JCQkJCWNvbnRpbnVlOwotCQkJCWNvdW50ID0gZV9tb2R1bGUtPm5yX2VudHJpZXM7Ci0JCQkJaXRlciA9IGVfbW9kdWxlLT50YWJsZTsKLQkJCQl3aGlsZSAoY291bnQtLSkgewotCQkJCQlpZiAod2l0aGluX21vZHVsZV9pbml0KGl0ZXItPmNvZGUsIG1vZCkpCi0JCQkJCQlpdGVyLT5rZXkgPSAwOwotCQkJCQlpdGVyKys7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotfQotCi1zdGF0aWMgaW50Ci1qdW1wX2xhYmVsX21vZHVsZV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIHZhbCwKLQkJCSB2b2lkICpkYXRhKQotewotCXN0cnVjdCBtb2R1bGUgKm1vZCA9IGRhdGE7Ci0JaW50IHJldCA9IDA7Ci0KLQlzd2l0Y2ggKHZhbCkgewotCWNhc2UgTU9EVUxFX1NUQVRFX0NPTUlORzoKLQkJanVtcF9sYWJlbF9sb2NrKCk7Ci0JCXJldCA9IGFkZF9qdW1wX2xhYmVsX21vZHVsZShtb2QpOwotCQlpZiAocmV0KQotCQkJcmVtb3ZlX2p1bXBfbGFiZWxfbW9kdWxlKG1vZCk7Ci0JCWp1bXBfbGFiZWxfdW5sb2NrKCk7Ci0JCWJyZWFrOwotCWNhc2UgTU9EVUxFX1NUQVRFX0dPSU5HOgotCQlqdW1wX2xhYmVsX2xvY2soKTsKLQkJcmVtb3ZlX2p1bXBfbGFiZWxfbW9kdWxlKG1vZCk7Ci0JCWp1bXBfbGFiZWxfdW5sb2NrKCk7Ci0JCWJyZWFrOwotCWNhc2UgTU9EVUxFX1NUQVRFX0xJVkU6Ci0JCWp1bXBfbGFiZWxfbG9jaygpOwotCQlyZW1vdmVfanVtcF9sYWJlbF9tb2R1bGVfaW5pdChtb2QpOwotCQlqdW1wX2xhYmVsX3VubG9jaygpOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqKgotICogYXBwbHlfanVtcF9sYWJlbF9ub3BzIC0gcGF0Y2ggbW9kdWxlIGp1bXAgbGFiZWxzIHdpdGggYXJjaF9nZXRfanVtcF9sYWJlbF9ub3AoKQotICogQG1vZDogbW9kdWxlIHRvIHBhdGNoCi0gKgotICogQWxsb3cgZm9yIHJ1bi10aW1lIHNlbGVjdGlvbiBvZiB0aGUgb3B0aW1hbCBub3BzLiBCZWZvcmUgdGhlIG1vZHVsZQotICogbG9hZHMgcGF0Y2ggdGhlc2Ugd2l0aCBhcmNoX2dldF9qdW1wX2xhYmVsX25vcCgpLCB3aGljaCBpcyBzcGVjaWZpZWQgYnkKLSAqIHRoZSBhcmNoIHNwZWNpZmljIGp1bXAgbGFiZWwgY29kZS4KLSAqLwotdm9pZCBqdW1wX2xhYmVsX2FwcGx5X25vcHMoc3RydWN0IG1vZHVsZSAqbW9kKQotewotCXN0cnVjdCBqdW1wX2VudHJ5ICppdGVyOwotCi0JLyogaWYgdGhlIG1vZHVsZSBkb2Vzbid0IGhhdmUganVtcCBsYWJlbCBlbnRyaWVzLCBqdXN0IHJldHVybiAqLwotCWlmICghbW9kLT5udW1fanVtcF9lbnRyaWVzKQotCQlyZXR1cm47Ci0KLQlpdGVyID0gbW9kLT5qdW1wX2VudHJpZXM7Ci0Jd2hpbGUgKGl0ZXIgPCBtb2QtPmp1bXBfZW50cmllcyArIG1vZC0+bnVtX2p1bXBfZW50cmllcykgewotCQlhcmNoX2p1bXBfbGFiZWxfdGV4dF9wb2tlX2Vhcmx5KGl0ZXItPmNvZGUpOwotCQlpdGVyKys7Ci0JfQotfQotCi1zdHJ1Y3Qgbm90aWZpZXJfYmxvY2sganVtcF9sYWJlbF9tb2R1bGVfbmIgPSB7Ci0JLm5vdGlmaWVyX2NhbGwgPSBqdW1wX2xhYmVsX21vZHVsZV9ub3RpZnksCi0JLnByaW9yaXR5ID0gMCwKLX07Ci0KLXN0YXRpYyBfX2luaXQgaW50IGluaXRfanVtcF9sYWJlbF9tb2R1bGUodm9pZCkKLXsKLQlyZXR1cm4gcmVnaXN0ZXJfbW9kdWxlX25vdGlmaWVyKCZqdW1wX2xhYmVsX21vZHVsZV9uYik7Ci19Ci1lYXJseV9pbml0Y2FsbChpbml0X2p1bXBfbGFiZWxfbW9kdWxlKTsKLQotI2VuZGlmIC8qIENPTkZJR19NT0RVTEVTICovCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL2tleGVjLmMgYi9rZXJuZWwva2V4ZWMuYwppbmRleCA1NTkzNmY5Li44ZDgxNGNiIDEwMDY0NAotLS0gYS9rZXJuZWwva2V4ZWMuYworKysgYi9rZXJuZWwva2V4ZWMuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgva21zZ19kdW1wLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KIAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTE1MzAsOCArMTUzMSw3IEBACiAJCWlmIChlcnJvcikKIAkJCWdvdG8gRW5hYmxlX2NwdXM7CiAJCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JCS8qIFN1c3BlbmQgc3lzdGVtIGRldmljZXMgKi8KLQkJZXJyb3IgPSBzeXNkZXZfc3VzcGVuZChQTVNHX0ZSRUVaRSk7CisJCWVycm9yID0gc3lzY29yZV9zdXNwZW5kKCk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gRW5hYmxlX2lycXM7CiAJfSBlbHNlCkBAIC0xNTQ2LDcgKzE1NDYsNyBAQAogCiAjaWZkZWYgQ09ORklHX0tFWEVDX0pVTVAKIAlpZiAoa2V4ZWNfaW1hZ2UtPnByZXNlcnZlX2NvbnRleHQpIHsKLQkJc3lzZGV2X3Jlc3VtZSgpOworCQlzeXNjb3JlX3Jlc3VtZSgpOwogIEVuYWJsZV9pcnFzOgogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAgRW5hYmxlX2NwdXM6CmRpZmYgLS1naXQgYS9rZXJuZWwva21vZC5jIGIva2VybmVsL2ttb2QuYwppbmRleCA5Y2QwNTkxLi41YWUwZmYzIDEwMDY0NAotLS0gYS9rZXJuZWwva21vZC5jCisrKyBiL2tlcm5lbC9rbW9kLmMKQEAgLTI0NSw3ICsyNDUsNiBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19QTV9TTEVFUAogLyoKICAqIElmIHNldCwgY2FsbF91c2VybW9kZWhlbHBlcl9leGVjKCkgd2lsbCBleGl0IGltbWVkaWF0ZWx5IHJldHVybmluZyAtRUJVU1kKICAqICh1c2VkIGZvciBwcmV2ZW50aW5nIHVzZXIgbGFuZCBwcm9jZXNzZXMgZnJvbSBiZWluZyBjcmVhdGVkIGFmdGVyIHRoZSB1c2VyCkBAIC0zMDEsNiArMzAwLDE1IEBACiAJdXNlcm1vZGVoZWxwZXJfZGlzYWJsZWQgPSAwOwogfQogCisvKioKKyAqIHVzZXJtb2RlaGVscGVyX2lzX2Rpc2FibGVkIC0gY2hlY2sgaWYgbmV3IGhlbHBlcnMgYXJlIGFsbG93ZWQgdG8gYmUgc3RhcnRlZAorICovCitib29sIHVzZXJtb2RlaGVscGVyX2lzX2Rpc2FibGVkKHZvaWQpCit7CisJcmV0dXJuIHVzZXJtb2RlaGVscGVyX2Rpc2FibGVkOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNlcm1vZGVoZWxwZXJfaXNfZGlzYWJsZWQpOworCiBzdGF0aWMgdm9pZCBoZWxwZXJfbG9jayh2b2lkKQogewogCWF0b21pY19pbmMoJnJ1bm5pbmdfaGVscGVycyk7CkBAIC0zMTIsMTIgKzMyMCw2IEBACiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnJ1bm5pbmdfaGVscGVycykpCiAJCXdha2VfdXAoJnJ1bm5pbmdfaGVscGVyc193YWl0cSk7CiB9Ci0jZWxzZSAvKiBDT05GSUdfUE1fU0xFRVAgKi8KLSNkZWZpbmUgdXNlcm1vZGVoZWxwZXJfZGlzYWJsZWQJMAotCi1zdGF0aWMgaW5saW5lIHZvaWQgaGVscGVyX2xvY2sodm9pZCkge30KLXN0YXRpYyBpbmxpbmUgdm9pZCBoZWxwZXJfdW5sb2NrKHZvaWQpIHt9Ci0jZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCiAKIC8qKgogICogY2FsbF91c2VybW9kZWhlbHBlcl9zZXR1cCAtIHByZXBhcmUgdG8gY2FsbCBhIHVzZXJtb2RlIGhlbHBlcgpkaWZmIC0tZ2l0IGEva2VybmVsL2tzeXNmcy5jIGIva2VybmVsL2tzeXNmcy5jCmluZGV4IDBiNjI0ZTcuLjNiMDUzYzAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rc3lzZnMuYworKysgYi9rZXJuZWwva3N5c2ZzLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KIAogI2RlZmluZSBLRVJORUxfQVRUUl9STyhfbmFtZSkgXAogc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBfbmFtZSMjX2F0dHIgPSBfX0FUVFJfUk8oX25hbWUpCkBAIC0xMzEsNiArMTMyLDE0IEBACiAKICNlbmRpZiAvKiBDT05GSUdfS0VYRUMgKi8KIAorLyogd2hldGhlciBmaWxlIGNhcGFiaWxpdGllcyBhcmUgZW5hYmxlZCAqLworc3RhdGljIHNzaXplX3QgZnNjYXBzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZmlsZV9jYXBzX2VuYWJsZWQpOworfQorS0VSTkVMX0FUVFJfUk8oZnNjYXBzKTsKKwogLyoKICAqIE1ha2UgL3N5cy9rZXJuZWwvbm90ZXMgZ2l2ZSB0aGUgcmF3IGNvbnRlbnRzIG9mIG91ciBrZXJuZWwgLm5vdGVzIHNlY3Rpb24uCiAgKi8KQEAgLTE1OCw2ICsxNjcsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoa2VybmVsX2tvYmopOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqIGtlcm5lbF9hdHRyc1tdID0geworCSZmc2NhcHNfYXR0ci5hdHRyLAogI2lmIGRlZmluZWQoQ09ORklHX0hPVFBMVUcpCiAJJnVldmVudF9zZXFudW1fYXR0ci5hdHRyLAogCSZ1ZXZlbnRfaGVscGVyX2F0dHIuYXR0ciwKZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NrZGVwLmMgYi9rZXJuZWwvbG9ja2RlcC5jCmluZGV4IDUzYTY4OTUuLjYzNDM3ZDAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sb2NrZGVwLmMKKysrIGIva2VybmVsL2xvY2tkZXAuYwpAQCAtNDkwLDYgKzQ5MCwxOCBAQAogCXVzYWdlW2ldID0gJ1wwJzsKIH0KIAorc3RhdGljIGludCBfX3ByaW50X2xvY2tfbmFtZShzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MpCit7CisJY2hhciBzdHJbS1NZTV9OQU1FX0xFTl07CisJY29uc3QgY2hhciAqbmFtZTsKKworCW5hbWUgPSBjbGFzcy0+bmFtZTsKKwlpZiAoIW5hbWUpCisJCW5hbWUgPSBfX2dldF9rZXlfbmFtZShjbGFzcy0+a2V5LCBzdHIpOworCisJcmV0dXJuIHByaW50aygiJXMiLCBuYW1lKTsKK30KKwogc3RhdGljIHZvaWQgcHJpbnRfbG9ja19uYW1lKHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcykKIHsKIAljaGFyIHN0cltLU1lNX05BTUVfTEVOXSwgdXNhZ2VbTE9DS19VU0FHRV9DSEFSU107CkBAIC0xMDUzLDYgKzEwNjUsNTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQKK3ByaW50X2NpcmN1bGFyX2xvY2tfc2NlbmFyaW8oc3RydWN0IGhlbGRfbG9jayAqc3JjLAorCQkJICAgICBzdHJ1Y3QgaGVsZF9sb2NrICp0Z3QsCisJCQkgICAgIHN0cnVjdCBsb2NrX2xpc3QgKnBydCkKK3sKKwlzdHJ1Y3QgbG9ja19jbGFzcyAqc291cmNlID0gaGxvY2tfY2xhc3Moc3JjKTsKKwlzdHJ1Y3QgbG9ja19jbGFzcyAqdGFyZ2V0ID0gaGxvY2tfY2xhc3ModGd0KTsKKwlzdHJ1Y3QgbG9ja19jbGFzcyAqcGFyZW50ID0gcHJ0LT5jbGFzczsKKworCS8qCisJICogQSBkaXJlY3QgbG9ja2luZyBwcm9ibGVtIHdoZXJlIHVuc2FmZV9jbGFzcyBsb2NrIGlzIHRha2VuCisJICogZGlyZWN0bHkgYnkgc2FmZV9jbGFzcyBsb2NrLCB0aGVuIGFsbCB3ZSBuZWVkIHRvIHNob3cKKwkgKiBpcyB0aGUgZGVhZGxvY2sgc2NlbmFyaW8sIGFzIGl0IGlzIG9idmlvdXMgdGhhdCB0aGUKKwkgKiB1bnNhZmUgbG9jayBpcyB0YWtlbiB1bmRlciB0aGUgc2FmZSBsb2NrLgorCSAqCisJICogQnV0IGlmIHRoZXJlIGlzIGEgY2hhaW4gaW5zdGVhZCwgd2hlcmUgdGhlIHNhZmUgbG9jayB0YWtlcworCSAqIGFuIGludGVybWVkaWF0ZSBsb2NrIChtaWRkbGVfY2xhc3MpIHdoZXJlIHRoaXMgbG9jayBpcworCSAqIG5vdCB0aGUgc2FtZSBhcyB0aGUgc2FmZSBsb2NrLCB0aGVuIHRoZSBsb2NrIGNoYWluIGlzCisJICogdXNlZCB0byBkZXNjcmliZSB0aGUgcHJvYmxlbS4gT3RoZXJ3aXNlIHdlIHdvdWxkIG5lZWQKKwkgKiB0byBzaG93IGEgZGlmZmVyZW50IENQVSBjYXNlIGZvciBlYWNoIGxpbmsgaW4gdGhlIGNoYWluCisJICogZnJvbSB0aGUgc2FmZV9jbGFzcyBsb2NrIHRvIHRoZSB1bnNhZmVfY2xhc3MgbG9jay4KKwkgKi8KKwlpZiAocGFyZW50ICE9IHNvdXJjZSkgeworCQlwcmludGsoIkNoYWluIGV4aXN0cyBvZjpcbiAgIik7CisJCV9fcHJpbnRfbG9ja19uYW1lKHNvdXJjZSk7CisJCXByaW50aygiIC0tPiAiKTsKKwkJX19wcmludF9sb2NrX25hbWUocGFyZW50KTsKKwkJcHJpbnRrKCIgLS0+ICIpOworCQlfX3ByaW50X2xvY2tfbmFtZSh0YXJnZXQpOworCQlwcmludGsoIlxuXG4iKTsKKwl9CisKKwlwcmludGsoIiBQb3NzaWJsZSB1bnNhZmUgbG9ja2luZyBzY2VuYXJpbzpcblxuIik7CisJcHJpbnRrKCIgICAgICAgQ1BVMCAgICAgICAgICAgICAgICAgICAgQ1BVMVxuIik7CisJcHJpbnRrKCIgICAgICAgLS0tLSAgICAgICAgICAgICAgICAgICAgLS0tLVxuIik7CisJcHJpbnRrKCIgIGxvY2soIik7CisJX19wcmludF9sb2NrX25hbWUodGFyZ2V0KTsKKwlwcmludGsoIik7XG4iKTsKKwlwcmludGsoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrKCIpOworCV9fcHJpbnRfbG9ja19uYW1lKHBhcmVudCk7CisJcHJpbnRrKCIpO1xuIik7CisJcHJpbnRrKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jaygiKTsKKwlfX3ByaW50X2xvY2tfbmFtZSh0YXJnZXQpOworCXByaW50aygiKTtcbiIpOworCXByaW50aygiICBsb2NrKCIpOworCV9fcHJpbnRfbG9ja19uYW1lKHNvdXJjZSk7CisJcHJpbnRrKCIpO1xuIik7CisJcHJpbnRrKCJcbiAqKiogREVBRExPQ0sgKioqXG5cbiIpOworfQorCiAvKgogICogV2hlbiBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgaXMgZGV0ZWN0ZWQsIHByaW50IHRoZQogICogaGVhZGVyIGZpcnN0OgpAQCAtMTA5Niw2ICsxMTU4LDcgQEAKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIgPSBjdXJyZW50OwogCXN0cnVjdCBsb2NrX2xpc3QgKnBhcmVudDsKKwlzdHJ1Y3QgbG9ja19saXN0ICpmaXJzdF9wYXJlbnQ7CiAJaW50IGRlcHRoOwogCiAJaWYgKCFkZWJ1Z19sb2Nrc19vZmZfZ3JhcGhfdW5sb2NrKCkgfHwgZGVidWdfbG9ja3Nfc2lsZW50KQpAQCAtMTEwOSw2ICsxMTcyLDcgQEAKIAlwcmludF9jaXJjdWxhcl9idWdfaGVhZGVyKHRhcmdldCwgZGVwdGgsIGNoZWNrX3NyYywgY2hlY2tfdGd0KTsKIAogCXBhcmVudCA9IGdldF9sb2NrX3BhcmVudCh0YXJnZXQpOworCWZpcnN0X3BhcmVudCA9IHBhcmVudDsKIAogCXdoaWxlIChwYXJlbnQpIHsKIAkJcHJpbnRfY2lyY3VsYXJfYnVnX2VudHJ5KHBhcmVudCwgLS1kZXB0aCk7CkBAIC0xMTE2LDYgKzExODAsOSBAQAogCX0KIAogCXByaW50aygiXG5vdGhlciBpbmZvIHRoYXQgbWlnaHQgaGVscCB1cyBkZWJ1ZyB0aGlzOlxuXG4iKTsKKwlwcmludF9jaXJjdWxhcl9sb2NrX3NjZW5hcmlvKGNoZWNrX3NyYywgY2hlY2tfdGd0LAorCQkJCSAgICAgZmlyc3RfcGFyZW50KTsKKwogCWxvY2tkZXBfcHJpbnRfaGVsZF9sb2NrcyhjdXJyKTsKIAogCXByaW50aygiXG5zdGFjayBiYWNrdHJhY2U6XG4iKTsKQEAgLTEzMTQsNyArMTM4MSw3IEBACiAJCXByaW50aygiXG4iKTsKIAogCQlpZiAoZGVwdGggPT0gMCAmJiAoZW50cnkgIT0gcm9vdCkpIHsKLQkJCXByaW50aygibG9ja2RlcDolcyBiYWQgQkZTIGdlbmVyYXRlZCB0cmVlXG4iLCBfX2Z1bmNfXyk7CisJCQlwcmludGsoImxvY2tkZXA6JXMgYmFkIHBhdGggZm91bmQgaW4gY2hhaW4gZ3JhcGhcbiIsIF9fZnVuY19fKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTEzMjUsNiArMTM5Miw2MiBAQAogCXJldHVybjsKIH0KIAorc3RhdGljIHZvaWQKK3ByaW50X2lycV9sb2NrX3NjZW5hcmlvKHN0cnVjdCBsb2NrX2xpc3QgKnNhZmVfZW50cnksCisJCQlzdHJ1Y3QgbG9ja19saXN0ICp1bnNhZmVfZW50cnksCisJCQlzdHJ1Y3QgbG9ja19jbGFzcyAqcHJldl9jbGFzcywKKwkJCXN0cnVjdCBsb2NrX2NsYXNzICpuZXh0X2NsYXNzKQoreworCXN0cnVjdCBsb2NrX2NsYXNzICpzYWZlX2NsYXNzID0gc2FmZV9lbnRyeS0+Y2xhc3M7CisJc3RydWN0IGxvY2tfY2xhc3MgKnVuc2FmZV9jbGFzcyA9IHVuc2FmZV9lbnRyeS0+Y2xhc3M7CisJc3RydWN0IGxvY2tfY2xhc3MgKm1pZGRsZV9jbGFzcyA9IHByZXZfY2xhc3M7CisKKwlpZiAobWlkZGxlX2NsYXNzID09IHNhZmVfY2xhc3MpCisJCW1pZGRsZV9jbGFzcyA9IG5leHRfY2xhc3M7CisKKwkvKgorCSAqIEEgZGlyZWN0IGxvY2tpbmcgcHJvYmxlbSB3aGVyZSB1bnNhZmVfY2xhc3MgbG9jayBpcyB0YWtlbgorCSAqIGRpcmVjdGx5IGJ5IHNhZmVfY2xhc3MgbG9jaywgdGhlbiBhbGwgd2UgbmVlZCB0byBzaG93CisJICogaXMgdGhlIGRlYWRsb2NrIHNjZW5hcmlvLCBhcyBpdCBpcyBvYnZpb3VzIHRoYXQgdGhlCisJICogdW5zYWZlIGxvY2sgaXMgdGFrZW4gdW5kZXIgdGhlIHNhZmUgbG9jay4KKwkgKgorCSAqIEJ1dCBpZiB0aGVyZSBpcyBhIGNoYWluIGluc3RlYWQsIHdoZXJlIHRoZSBzYWZlIGxvY2sgdGFrZXMKKwkgKiBhbiBpbnRlcm1lZGlhdGUgbG9jayAobWlkZGxlX2NsYXNzKSB3aGVyZSB0aGlzIGxvY2sgaXMKKwkgKiBub3QgdGhlIHNhbWUgYXMgdGhlIHNhZmUgbG9jaywgdGhlbiB0aGUgbG9jayBjaGFpbiBpcworCSAqIHVzZWQgdG8gZGVzY3JpYmUgdGhlIHByb2JsZW0uIE90aGVyd2lzZSB3ZSB3b3VsZCBuZWVkCisJICogdG8gc2hvdyBhIGRpZmZlcmVudCBDUFUgY2FzZSBmb3IgZWFjaCBsaW5rIGluIHRoZSBjaGFpbgorCSAqIGZyb20gdGhlIHNhZmVfY2xhc3MgbG9jayB0byB0aGUgdW5zYWZlX2NsYXNzIGxvY2suCisJICovCisJaWYgKG1pZGRsZV9jbGFzcyAhPSB1bnNhZmVfY2xhc3MpIHsKKwkJcHJpbnRrKCJDaGFpbiBleGlzdHMgb2Y6XG4gICIpOworCQlfX3ByaW50X2xvY2tfbmFtZShzYWZlX2NsYXNzKTsKKwkJcHJpbnRrKCIgLS0+ICIpOworCQlfX3ByaW50X2xvY2tfbmFtZShtaWRkbGVfY2xhc3MpOworCQlwcmludGsoIiAtLT4gIik7CisJCV9fcHJpbnRfbG9ja19uYW1lKHVuc2FmZV9jbGFzcyk7CisJCXByaW50aygiXG5cbiIpOworCX0KKworCXByaW50aygiIFBvc3NpYmxlIGludGVycnVwdCB1bnNhZmUgbG9ja2luZyBzY2VuYXJpbzpcblxuIik7CisJcHJpbnRrKCIgICAgICAgQ1BVMCAgICAgICAgICAgICAgICAgICAgQ1BVMVxuIik7CisJcHJpbnRrKCIgICAgICAgLS0tLSAgICAgICAgICAgICAgICAgICAgLS0tLVxuIik7CisJcHJpbnRrKCIgIGxvY2soIik7CisJX19wcmludF9sb2NrX25hbWUodW5zYWZlX2NsYXNzKTsKKwlwcmludGsoIik7XG4iKTsKKwlwcmludGsoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9pcnFfZGlzYWJsZSgpO1xuIik7CisJcHJpbnRrKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jaygiKTsKKwlfX3ByaW50X2xvY2tfbmFtZShzYWZlX2NsYXNzKTsKKwlwcmludGsoIik7XG4iKTsKKwlwcmludGsoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrKCIpOworCV9fcHJpbnRfbG9ja19uYW1lKG1pZGRsZV9jbGFzcyk7CisJcHJpbnRrKCIpO1xuIik7CisJcHJpbnRrKCIgIDxJbnRlcnJ1cHQ+XG4iKTsKKwlwcmludGsoIiAgICBsb2NrKCIpOworCV9fcHJpbnRfbG9ja19uYW1lKHNhZmVfY2xhc3MpOworCXByaW50aygiKTtcbiIpOworCXByaW50aygiXG4gKioqIERFQURMT0NLICoqKlxuXG4iKTsKK30KKwogc3RhdGljIGludAogcHJpbnRfYmFkX2lycV9kZXBlbmRlbmN5KHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciwKIAkJCSBzdHJ1Y3QgbG9ja19saXN0ICpwcmV2X3Jvb3QsCkBAIC0xMzc2LDYgKzE0OTksOSBAQAogCXByaW50X3N0YWNrX3RyYWNlKGZvcndhcmRzX2VudHJ5LT5jbGFzcy0+dXNhZ2VfdHJhY2VzICsgYml0MiwgMSk7CiAKIAlwcmludGsoIlxub3RoZXIgaW5mbyB0aGF0IG1pZ2h0IGhlbHAgdXMgZGVidWcgdGhpczpcblxuIik7CisJcHJpbnRfaXJxX2xvY2tfc2NlbmFyaW8oYmFja3dhcmRzX2VudHJ5LCBmb3J3YXJkc19lbnRyeSwKKwkJCQlobG9ja19jbGFzcyhwcmV2KSwgaGxvY2tfY2xhc3MobmV4dCkpOworCiAJbG9ja2RlcF9wcmludF9oZWxkX2xvY2tzKGN1cnIpOwogCiAJcHJpbnRrKCJcbnRoZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiAlcy1pcnEtc2FmZSBsb2NrIiwgaXJxY2xhc3MpOwpAQCAtMTUzOSw2ICsxNjY1LDI2IEBACiAKICNlbmRpZgogCitzdGF0aWMgdm9pZAorcHJpbnRfZGVhZGxvY2tfc2NlbmFyaW8oc3RydWN0IGhlbGRfbG9jayAqbnh0LAorCQkJICAgICBzdHJ1Y3QgaGVsZF9sb2NrICpwcnYpCit7CisJc3RydWN0IGxvY2tfY2xhc3MgKm5leHQgPSBobG9ja19jbGFzcyhueHQpOworCXN0cnVjdCBsb2NrX2NsYXNzICpwcmV2ID0gaGxvY2tfY2xhc3MocHJ2KTsKKworCXByaW50aygiIFBvc3NpYmxlIHVuc2FmZSBsb2NraW5nIHNjZW5hcmlvOlxuXG4iKTsKKwlwcmludGsoIiAgICAgICBDUFUwXG4iKTsKKwlwcmludGsoIiAgICAgICAtLS0tXG4iKTsKKwlwcmludGsoIiAgbG9jaygiKTsKKwlfX3ByaW50X2xvY2tfbmFtZShwcmV2KTsKKwlwcmludGsoIik7XG4iKTsKKwlwcmludGsoIiAgbG9jaygiKTsKKwlfX3ByaW50X2xvY2tfbmFtZShuZXh0KTsKKwlwcmludGsoIik7XG4iKTsKKwlwcmludGsoIlxuICoqKiBERUFETE9DSyAqKipcblxuIik7CisJcHJpbnRrKCIgTWF5IGJlIGR1ZSB0byBtaXNzaW5nIGxvY2sgbmVzdGluZyBub3RhdGlvblxuXG4iKTsKK30KKwogc3RhdGljIGludAogcHJpbnRfZGVhZGxvY2tfYnVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3Vyciwgc3RydWN0IGhlbGRfbG9jayAqcHJldiwKIAkJICAgc3RydWN0IGhlbGRfbG9jayAqbmV4dCkKQEAgLTE1NTcsNiArMTcwMyw3IEBACiAJcHJpbnRfbG9jayhwcmV2KTsKIAogCXByaW50aygiXG5vdGhlciBpbmZvIHRoYXQgbWlnaHQgaGVscCB1cyBkZWJ1ZyB0aGlzOlxuIik7CisJcHJpbnRfZGVhZGxvY2tfc2NlbmFyaW8obmV4dCwgcHJldik7CiAJbG9ja2RlcF9wcmludF9oZWxkX2xvY2tzKGN1cnIpOwogCiAJcHJpbnRrKCJcbnN0YWNrIGJhY2t0cmFjZTpcbiIpOwpAQCAtMTgyNiw3ICsxOTczLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoYXNoX2hlYWQgPSBjaGFpbmhhc2hlbnRyeShjaGFpbl9rZXkpOwogCXN0cnVjdCBsb2NrX2NoYWluICpjaGFpbjsKIAlzdHJ1Y3QgaGVsZF9sb2NrICpobG9ja19jdXJyLCAqaGxvY2tfbmV4dDsKLQlpbnQgaSwgaiwgbiwgY247CisJaW50IGksIGo7CiAKIAlpZiAoREVCVUdfTE9DS1NfV0FSTl9PTighaXJxc19kaXNhYmxlZCgpKSkKIAkJcmV0dXJuIDA7CkBAIC0xODg2LDE1ICsyMDMzLDkgQEAKIAl9CiAJaSsrOwogCWNoYWluLT5kZXB0aCA9IGN1cnItPmxvY2tkZXBfZGVwdGggKyAxIC0gaTsKLQljbiA9IG5yX2NoYWluX2hsb2NrczsKLQl3aGlsZSAoY24gKyBjaGFpbi0+ZGVwdGggPD0gTUFYX0xPQ0tERVBfQ0hBSU5fSExPQ0tTKSB7Ci0JCW4gPSBjbXB4Y2hnKCZucl9jaGFpbl9obG9ja3MsIGNuLCBjbiArIGNoYWluLT5kZXB0aCk7Ci0JCWlmIChuID09IGNuKQotCQkJYnJlYWs7Ci0JCWNuID0gbjsKLQl9Ci0JaWYgKGxpa2VseShjbiArIGNoYWluLT5kZXB0aCA8PSBNQVhfTE9DS0RFUF9DSEFJTl9ITE9DS1MpKSB7Ci0JCWNoYWluLT5iYXNlID0gY247CisJaWYgKGxpa2VseShucl9jaGFpbl9obG9ja3MgKyBjaGFpbi0+ZGVwdGggPD0gTUFYX0xPQ0tERVBfQ0hBSU5fSExPQ0tTKSkgeworCQljaGFpbi0+YmFzZSA9IG5yX2NoYWluX2hsb2NrczsKKwkJbnJfY2hhaW5faGxvY2tzICs9IGNoYWluLT5kZXB0aDsKIAkJZm9yIChqID0gMDsgaiA8IGNoYWluLT5kZXB0aCAtIDE7IGorKywgaSsrKSB7CiAJCQlpbnQgbG9ja19pZCA9IGN1cnItPmhlbGRfbG9ja3NbaV0uY2xhc3NfaWR4IC0gMTsKIAkJCWNoYWluX2hsb2Nrc1tjaGFpbi0+YmFzZSArIGpdID0gbG9ja19pZDsKQEAgLTIwMTEsNiArMjE1MiwyNCBAQAogI2VuZGlmCiB9CiAKK3N0YXRpYyB2b2lkCitwcmludF91c2FnZV9idWdfc2NlbmFyaW8oc3RydWN0IGhlbGRfbG9jayAqbG9jaykKK3sKKwlzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MgPSBobG9ja19jbGFzcyhsb2NrKTsKKworCXByaW50aygiIFBvc3NpYmxlIHVuc2FmZSBsb2NraW5nIHNjZW5hcmlvOlxuXG4iKTsKKwlwcmludGsoIiAgICAgICBDUFUwXG4iKTsKKwlwcmludGsoIiAgICAgICAtLS0tXG4iKTsKKwlwcmludGsoIiAgbG9jaygiKTsKKwlfX3ByaW50X2xvY2tfbmFtZShjbGFzcyk7CisJcHJpbnRrKCIpO1xuIik7CisJcHJpbnRrKCIgIDxJbnRlcnJ1cHQ+XG4iKTsKKwlwcmludGsoIiAgICBsb2NrKCIpOworCV9fcHJpbnRfbG9ja19uYW1lKGNsYXNzKTsKKwlwcmludGsoIik7XG4iKTsKKwlwcmludGsoIlxuICoqKiBERUFETE9DSyAqKipcblxuIik7Cit9CisKIHN0YXRpYyBpbnQKIHByaW50X3VzYWdlX2J1ZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIHN0cnVjdCBoZWxkX2xvY2sgKnRoaXMsCiAJCWVudW0gbG9ja191c2FnZV9iaXQgcHJldl9iaXQsIGVudW0gbG9ja191c2FnZV9iaXQgbmV3X2JpdCkKQEAgLTIwMzksNiArMjE5OCw4IEBACiAKIAlwcmludF9pcnF0cmFjZV9ldmVudHMoY3Vycik7CiAJcHJpbnRrKCJcbm90aGVyIGluZm8gdGhhdCBtaWdodCBoZWxwIHVzIGRlYnVnIHRoaXM6XG4iKTsKKwlwcmludF91c2FnZV9idWdfc2NlbmFyaW8odGhpcyk7CisKIAlsb2NrZGVwX3ByaW50X2hlbGRfbG9ja3MoY3Vycik7CiAKIAlwcmludGsoIlxuc3RhY2sgYmFja3RyYWNlOlxuIik7CkBAIC0yMDczLDYgKzIyMzQsMTAgQEAKIAkJCXN0cnVjdCBoZWxkX2xvY2sgKnRoaXMsIGludCBmb3J3YXJkcywKIAkJCWNvbnN0IGNoYXIgKmlycWNsYXNzKQogeworCXN0cnVjdCBsb2NrX2xpc3QgKmVudHJ5ID0gb3RoZXI7CisJc3RydWN0IGxvY2tfbGlzdCAqbWlkZGxlID0gTlVMTDsKKwlpbnQgZGVwdGg7CisKIAlpZiAoIWRlYnVnX2xvY2tzX29mZl9ncmFwaF91bmxvY2soKSB8fCBkZWJ1Z19sb2Nrc19zaWxlbnQpCiAJCXJldHVybiAwOwogCkBAIC0yMDkxLDYgKzIyNTYsMjUgQEAKIAlwcmludGsoIlxuXG5hbmQgaW50ZXJydXB0cyBjb3VsZCBjcmVhdGUgaW52ZXJzZSBsb2NrIG9yZGVyaW5nIGJldHdlZW4gdGhlbS5cblxuIik7CiAKIAlwcmludGsoIlxub3RoZXIgaW5mbyB0aGF0IG1pZ2h0IGhlbHAgdXMgZGVidWcgdGhpczpcbiIpOworCisJLyogRmluZCBhIG1pZGRsZSBsb2NrIChpZiBvbmUgZXhpc3RzKSAqLworCWRlcHRoID0gZ2V0X2xvY2tfZGVwdGgob3RoZXIpOworCWRvIHsKKwkJaWYgKGRlcHRoID09IDAgJiYgKGVudHJ5ICE9IHJvb3QpKSB7CisJCQlwcmludGsoImxvY2tkZXA6JXMgYmFkIHBhdGggZm91bmQgaW4gY2hhaW4gZ3JhcGhcbiIsIF9fZnVuY19fKTsKKwkJCWJyZWFrOworCQl9CisJCW1pZGRsZSA9IGVudHJ5OworCQllbnRyeSA9IGdldF9sb2NrX3BhcmVudChlbnRyeSk7CisJCWRlcHRoLS07CisJfSB3aGlsZSAoZW50cnkgJiYgZW50cnkgIT0gcm9vdCAmJiAoZGVwdGggPj0gMCkpOworCWlmIChmb3J3YXJkcykKKwkJcHJpbnRfaXJxX2xvY2tfc2NlbmFyaW8ocm9vdCwgb3RoZXIsCisJCQltaWRkbGUgPyBtaWRkbGUtPmNsYXNzIDogcm9vdC0+Y2xhc3MsIG90aGVyLT5jbGFzcyk7CisJZWxzZQorCQlwcmludF9pcnFfbG9ja19zY2VuYXJpbyhvdGhlciwgcm9vdCwKKwkJCW1pZGRsZSA/IG1pZGRsZS0+Y2xhc3MgOiBvdGhlci0+Y2xhc3MsIHJvb3QtPmNsYXNzKTsKKwogCWxvY2tkZXBfcHJpbnRfaGVsZF9sb2NrcyhjdXJyKTsKIAogCXByaW50aygiXG50aGUgc2hvcnRlc3QgZGVwZW5kZW5jaWVzIGJldHdlZW4gMm5kIGxvY2sgYW5kIDFzdCBsb2NrOlxuIik7CmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlLmMgYi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggZDU5MzhhNS4uMjI4Nzk3MiAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS5jCisrKyBiL2tlcm5lbC9tb2R1bGUuYwpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ttZW1sZWFrLmg+CiAjaW5jbHVkZSA8bGludXgvanVtcF9sYWJlbC5oPgogI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgorI2luY2x1ZGUgPGxpbnV4L2JzZWFyY2guaD4KIAogI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCiAjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL21vZHVsZS5oPgpAQCAtMjQwLDIzICsyNDEsMjQgQEAKIAkJCQkgICBzdHJ1Y3QgbW9kdWxlICpvd25lciwKIAkJCQkgICBib29sICgqZm4pKGNvbnN0IHN0cnVjdCBzeW1zZWFyY2ggKnN5bXMsCiAJCQkJCSAgICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyLAotCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgc3ltbnVtLCB2b2lkICpkYXRhKSwKKwkJCQkJICAgICAgdm9pZCAqZGF0YSksCiAJCQkJICAgdm9pZCAqZGF0YSkKIHsKLQl1bnNpZ25lZCBpbnQgaSwgajsKKwl1bnNpZ25lZCBpbnQgajsKIAogCWZvciAoaiA9IDA7IGogPCBhcnJzaXplOyBqKyspIHsKLQkJZm9yIChpID0gMDsgaSA8IGFycltqXS5zdG9wIC0gYXJyW2pdLnN0YXJ0OyBpKyspCi0JCQlpZiAoZm4oJmFycltqXSwgb3duZXIsIGksIGRhdGEpKQotCQkJCXJldHVybiB0cnVlOworCQlpZiAoZm4oJmFycltqXSwgb3duZXIsIGRhdGEpKQorCQkJcmV0dXJuIHRydWU7CiAJfQogCiAJcmV0dXJuIGZhbHNlOwogfQogCiAvKiBSZXR1cm5zIHRydWUgYXMgc29vbiBhcyBmbiByZXR1cm5zIHRydWUsIG90aGVyd2lzZSBmYWxzZS4gKi8KLWJvb2wgZWFjaF9zeW1ib2woYm9vbCAoKmZuKShjb25zdCBzdHJ1Y3Qgc3ltc2VhcmNoICphcnIsIHN0cnVjdCBtb2R1bGUgKm93bmVyLAotCQkJICAgIHVuc2lnbmVkIGludCBzeW1udW0sIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKQorYm9vbCBlYWNoX3N5bWJvbF9zZWN0aW9uKGJvb2wgKCpmbikoY29uc3Qgc3RydWN0IHN5bXNlYXJjaCAqYXJyLAorCQkJCSAgICBzdHJ1Y3QgbW9kdWxlICpvd25lciwKKwkJCQkgICAgdm9pZCAqZGF0YSksCisJCQkgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgbW9kdWxlICptb2Q7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBzeW1zZWFyY2ggYXJyW10gPSB7CkBAIC0zMDksNyArMzExLDcgQEAKIAl9CiAJcmV0dXJuIGZhbHNlOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoZWFjaF9zeW1ib2wpOworRVhQT1JUX1NZTUJPTF9HUEwoZWFjaF9zeW1ib2xfc2VjdGlvbik7CiAKIHN0cnVjdCBmaW5kX3N5bWJvbF9hcmcgewogCS8qIElucHV0ICovCkBAIC0zMjMsMTUgKzMyNSwxMiBAQAogCWNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICpzeW07CiB9OwogCi1zdGF0aWMgYm9vbCBmaW5kX3N5bWJvbF9pbl9zZWN0aW9uKGNvbnN0IHN0cnVjdCBzeW1zZWFyY2ggKnN5bXMsCi0JCQkJICAgc3RydWN0IG1vZHVsZSAqb3duZXIsCi0JCQkJICAgdW5zaWduZWQgaW50IHN5bW51bSwgdm9pZCAqZGF0YSkKK3N0YXRpYyBib29sIGNoZWNrX3N5bWJvbChjb25zdCBzdHJ1Y3Qgc3ltc2VhcmNoICpzeW1zLAorCQkJCSBzdHJ1Y3QgbW9kdWxlICpvd25lciwKKwkJCQkgdW5zaWduZWQgaW50IHN5bW51bSwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgZmluZF9zeW1ib2xfYXJnICpmc2EgPSBkYXRhOwogCi0JaWYgKHN0cmNtcChzeW1zLT5zdGFydFtzeW1udW1dLm5hbWUsIGZzYS0+bmFtZSkgIT0gMCkKLQkJcmV0dXJuIGZhbHNlOwotCiAJaWYgKCFmc2EtPmdwbG9rKSB7CiAJCWlmIChzeW1zLT5saWNlbmNlID09IEdQTF9PTkxZKQogCQkJcmV0dXJuIGZhbHNlOwpAQCAtMzY1LDYgKzM2NCwzMCBAQAogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgaW50IGNtcF9uYW1lKGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2YikKK3sKKwljb25zdCBjaGFyICphOworCWNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICpiOworCWEgPSB2YTsgYiA9IHZiOworCXJldHVybiBzdHJjbXAoYSwgYi0+bmFtZSk7Cit9CisKK3N0YXRpYyBib29sIGZpbmRfc3ltYm9sX2luX3NlY3Rpb24oY29uc3Qgc3RydWN0IHN5bXNlYXJjaCAqc3ltcywKKwkJCQkgICBzdHJ1Y3QgbW9kdWxlICpvd25lciwKKwkJCQkgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBmaW5kX3N5bWJvbF9hcmcgKmZzYSA9IGRhdGE7CisJc3RydWN0IGtlcm5lbF9zeW1ib2wgKnN5bTsKKworCXN5bSA9IGJzZWFyY2goZnNhLT5uYW1lLCBzeW1zLT5zdGFydCwgc3ltcy0+c3RvcCAtIHN5bXMtPnN0YXJ0LAorCQkJc2l6ZW9mKHN0cnVjdCBrZXJuZWxfc3ltYm9sKSwgY21wX25hbWUpOworCisJaWYgKHN5bSAhPSBOVUxMICYmIGNoZWNrX3N5bWJvbChzeW1zLCBvd25lciwgc3ltIC0gc3ltcy0+c3RhcnQsIGRhdGEpKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKwogLyogRmluZCBhIHN5bWJvbCBhbmQgcmV0dXJuIGl0LCBhbG9uZyB3aXRoLCAob3B0aW9uYWwpIGNyYyBhbmQKICAqIChvcHRpb25hbCkgbW9kdWxlIHdoaWNoIG93bnMgaXQuICBOZWVkcyBwcmVlbXB0IGRpc2FibGVkIG9yIG1vZHVsZV9tdXRleC4gKi8KIGNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICpmaW5kX3N5bWJvbChjb25zdCBjaGFyICpuYW1lLApAQCAtMzc5LDcgKzQwMiw3IEBACiAJZnNhLmdwbG9rID0gZ3Bsb2s7CiAJZnNhLndhcm4gPSB3YXJuOwogCi0JaWYgKGVhY2hfc3ltYm9sKGZpbmRfc3ltYm9sX2luX3NlY3Rpb24sICZmc2EpKSB7CisJaWYgKGVhY2hfc3ltYm9sX3NlY3Rpb24oZmluZF9zeW1ib2xfaW5fc2VjdGlvbiwgJmZzYSkpIHsKIAkJaWYgKG93bmVyKQogCQkJKm93bmVyID0gZnNhLm93bmVyOwogCQlpZiAoY3JjKQpAQCAtMTYwNywyNyArMTYzMCwyOCBAQAogCX0KIH0KIAotLyogU2V0dGluZyBtZW1vcnkgYmFjayB0byBSVytOWCBiZWZvcmUgcmVsZWFzaW5nIGl0ICovCi12b2lkIHVuc2V0X3NlY3Rpb25fcm9fbngoc3RydWN0IG1vZHVsZSAqbW9kLCB2b2lkICptb2R1bGVfcmVnaW9uKQorc3RhdGljIHZvaWQgdW5zZXRfbW9kdWxlX2NvcmVfcm9fbngoc3RydWN0IG1vZHVsZSAqbW9kKQogewotCXVuc2lnbmVkIGxvbmcgdG90YWxfcGFnZXM7CisJc2V0X3BhZ2VfYXR0cmlidXRlcyhtb2QtPm1vZHVsZV9jb3JlICsgbW9kLT5jb3JlX3RleHRfc2l6ZSwKKwkJbW9kLT5tb2R1bGVfY29yZSArIG1vZC0+Y29yZV9zaXplLAorCQlzZXRfbWVtb3J5X3gpOworCXNldF9wYWdlX2F0dHJpYnV0ZXMobW9kLT5tb2R1bGVfY29yZSwKKwkJbW9kLT5tb2R1bGVfY29yZSArIG1vZC0+Y29yZV9yb19zaXplLAorCQlzZXRfbWVtb3J5X3J3KTsKK30KIAotCWlmIChtb2QtPm1vZHVsZV9jb3JlID09IG1vZHVsZV9yZWdpb24pIHsKLQkJLyogU2V0IGNvcmUgYXMgTlgrUlcgKi8KLQkJdG90YWxfcGFnZXMgPSBNT0RfTlVNQkVSX09GX1BBR0VTKG1vZC0+bW9kdWxlX2NvcmUsIG1vZC0+Y29yZV9zaXplKTsKLQkJc2V0X21lbW9yeV9ueCgodW5zaWduZWQgbG9uZyltb2QtPm1vZHVsZV9jb3JlLCB0b3RhbF9wYWdlcyk7Ci0JCXNldF9tZW1vcnlfcncoKHVuc2lnbmVkIGxvbmcpbW9kLT5tb2R1bGVfY29yZSwgdG90YWxfcGFnZXMpOwotCi0JfSBlbHNlIGlmIChtb2QtPm1vZHVsZV9pbml0ID09IG1vZHVsZV9yZWdpb24pIHsKLQkJLyogU2V0IGluaXQgYXMgTlgrUlcgKi8KLQkJdG90YWxfcGFnZXMgPSBNT0RfTlVNQkVSX09GX1BBR0VTKG1vZC0+bW9kdWxlX2luaXQsIG1vZC0+aW5pdF9zaXplKTsKLQkJc2V0X21lbW9yeV9ueCgodW5zaWduZWQgbG9uZyltb2QtPm1vZHVsZV9pbml0LCB0b3RhbF9wYWdlcyk7Ci0JCXNldF9tZW1vcnlfcncoKHVuc2lnbmVkIGxvbmcpbW9kLT5tb2R1bGVfaW5pdCwgdG90YWxfcGFnZXMpOwotCX0KK3N0YXRpYyB2b2lkIHVuc2V0X21vZHVsZV9pbml0X3JvX254KHN0cnVjdCBtb2R1bGUgKm1vZCkKK3sKKwlzZXRfcGFnZV9hdHRyaWJ1dGVzKG1vZC0+bW9kdWxlX2luaXQgKyBtb2QtPmluaXRfdGV4dF9zaXplLAorCQltb2QtPm1vZHVsZV9pbml0ICsgbW9kLT5pbml0X3NpemUsCisJCXNldF9tZW1vcnlfeCk7CisJc2V0X3BhZ2VfYXR0cmlidXRlcyhtb2QtPm1vZHVsZV9pbml0LAorCQltb2QtPm1vZHVsZV9pbml0ICsgbW9kLT5pbml0X3JvX3NpemUsCisJCXNldF9tZW1vcnlfcncpOwogfQogCiAvKiBJdGVyYXRlIHRocm91Z2ggYWxsIG1vZHVsZXMgYW5kIHNldCBlYWNoIG1vZHVsZSdzIHRleHQgYXMgUlcgKi8KLXZvaWQgc2V0X2FsbF9tb2R1bGVzX3RleHRfcncoKQordm9pZCBzZXRfYWxsX21vZHVsZXNfdGV4dF9ydyh2b2lkKQogewogCXN0cnVjdCBtb2R1bGUgKm1vZDsKIApAQCAtMTY0OCw3ICsxNjcyLDcgQEAKIH0KIAogLyogSXRlcmF0ZSB0aHJvdWdoIGFsbCBtb2R1bGVzIGFuZCBzZXQgZWFjaCBtb2R1bGUncyB0ZXh0IGFzIFJPICovCi12b2lkIHNldF9hbGxfbW9kdWxlc190ZXh0X3JvKCkKK3ZvaWQgc2V0X2FsbF9tb2R1bGVzX3RleHRfcm8odm9pZCkKIHsKIAlzdHJ1Y3QgbW9kdWxlICptb2Q7CiAKQEAgLTE2NjksNyArMTY5Myw4IEBACiB9CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHNldF9zZWN0aW9uX3JvX254KHZvaWQgKmJhc2UsIHVuc2lnbmVkIGxvbmcgdGV4dF9zaXplLCB1bnNpZ25lZCBsb25nIHJvX3NpemUsIHVuc2lnbmVkIGxvbmcgdG90YWxfc2l6ZSkgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgdW5zZXRfc2VjdGlvbl9yb19ueChzdHJ1Y3QgbW9kdWxlICptb2QsIHZvaWQgKm1vZHVsZV9yZWdpb24pIHsgfQorc3RhdGljIHZvaWQgdW5zZXRfbW9kdWxlX2NvcmVfcm9fbngoc3RydWN0IG1vZHVsZSAqbW9kKSB7IH0KK3N0YXRpYyB2b2lkIHVuc2V0X21vZHVsZV9pbml0X3JvX254KHN0cnVjdCBtb2R1bGUgKm1vZCkgeyB9CiAjZW5kaWYKIAogLyogRnJlZSBhIG1vZHVsZSwgcmVtb3ZlIGZyb20gbGlzdHMsIGV0Yy4gKi8KQEAgLTE2OTYsNyArMTcyMSw3IEBACiAJZGVzdHJveV9wYXJhbXMobW9kLT5rcCwgbW9kLT5udW1fa3ApOwogCiAJLyogVGhpcyBtYXkgYmUgTlVMTCwgYnV0IHRoYXQncyBPSyAqLwotCXVuc2V0X3NlY3Rpb25fcm9fbngobW9kLCBtb2QtPm1vZHVsZV9pbml0KTsKKwl1bnNldF9tb2R1bGVfaW5pdF9yb19ueChtb2QpOwogCW1vZHVsZV9mcmVlKG1vZCwgbW9kLT5tb2R1bGVfaW5pdCk7CiAJa2ZyZWUobW9kLT5hcmdzKTsKIAlwZXJjcHVfbW9kZnJlZShtb2QpOwpAQCAtMTcwNSw3ICsxNzMwLDcgQEAKIAlsb2NrZGVwX2ZyZWVfa2V5X3JhbmdlKG1vZC0+bW9kdWxlX2NvcmUsIG1vZC0+Y29yZV9zaXplKTsKIAogCS8qIEZpbmFsbHksIGZyZWUgdGhlIGNvcmUgKGNvbnRhaW5pbmcgdGhlIG1vZHVsZSBzdHJ1Y3R1cmUpICovCi0JdW5zZXRfc2VjdGlvbl9yb19ueChtb2QsIG1vZC0+bW9kdWxlX2NvcmUpOworCXVuc2V0X21vZHVsZV9jb3JlX3JvX254KG1vZCk7CiAJbW9kdWxlX2ZyZWUobW9kLCBtb2QtPm1vZHVsZV9jb3JlKTsKIAogI2lmZGVmIENPTkZJR19NUFUKQEAgLTIwMzAsMTEgKzIwNTUsOCBAQAogCWNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICpzdGFydCwKIAljb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqc3RvcCkKIHsKLQljb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqa3MgPSBzdGFydDsKLQlmb3IgKDsga3MgPCBzdG9wOyBrcysrKQotCQlpZiAoc3RyY21wKGtzLT5uYW1lLCBuYW1lKSA9PSAwKQotCQkJcmV0dXJuIGtzOwotCXJldHVybiBOVUxMOworCXJldHVybiBic2VhcmNoKG5hbWUsIHN0YXJ0LCBzdG9wIC0gc3RhcnQsCisJCQlzaXplb2Yoc3RydWN0IGtlcm5lbF9zeW1ib2wpLCBjbXBfbmFtZSk7CiB9CiAKIHN0YXRpYyBpbnQgaXNfZXhwb3J0ZWQoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyB2YWx1ZSwKQEAgLTI5MzEsMTAgKzI5NTMsMTEgQEAKIAltb2QtPnN5bXRhYiA9IG1vZC0+Y29yZV9zeW10YWI7CiAJbW9kLT5zdHJ0YWIgPSBtb2QtPmNvcmVfc3RydGFiOwogI2VuZGlmCi0JdW5zZXRfc2VjdGlvbl9yb19ueChtb2QsIG1vZC0+bW9kdWxlX2luaXQpOworCXVuc2V0X21vZHVsZV9pbml0X3JvX254KG1vZCk7CiAJbW9kdWxlX2ZyZWUobW9kLCBtb2QtPm1vZHVsZV9pbml0KTsKIAltb2QtPm1vZHVsZV9pbml0ID0gTlVMTDsKIAltb2QtPmluaXRfc2l6ZSA9IDA7CisJbW9kLT5pbml0X3JvX3NpemUgPSAwOwogCW1vZC0+aW5pdF90ZXh0X3NpemUgPSAwOwogCW11dGV4X3VubG9jaygmbW9kdWxlX211dGV4KTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL211dGV4LmMgYi9rZXJuZWwvbXV0ZXguYwppbmRleCBmZTQ3MDZjLi4yYzkzOGUyIDEwMDY0NAotLS0gYS9rZXJuZWwvbXV0ZXguYworKysgYi9rZXJuZWwvbXV0ZXguYwpAQCAtMTYzLDEzICsxNjMsNiBAQAogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm93bmVyOwogCiAJCS8qCi0JCSAqIElmIHdlIG93biB0aGUgQktMLCB0aGVuIGRvbid0IHNwaW4uIFRoZSBvd25lciBvZgotCQkgKiB0aGUgbXV0ZXggbWlnaHQgYmUgd2FpdGluZyBvbiB1cyB0byByZWxlYXNlIHRoZSBCS0wuCi0JCSAqLwotCQlpZiAodW5saWtlbHkoY3VycmVudC0+bG9ja19kZXB0aCA+PSAwKSkKLQkJCWJyZWFrOwotCi0JCS8qCiAJCSAqIElmIHRoZXJlJ3MgYW4gb3duZXIsIHdhaXQgZm9yIGl0IHRvIGVpdGhlcgogCQkgKiByZWxlYXNlIHRoZSBsb2NrIG9yIGdvIHRvIHNsZWVwLgogCQkgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9wYXJhbXMuYyBiL2tlcm5lbC9wYXJhbXMuYwppbmRleCA3YWIzODhhLi5lZDcyZTEzIDEwMDY0NAotLS0gYS9rZXJuZWwvcGFyYW1zLmMKKysrIGIva2VybmVsL3BhcmFtcy5jCkBAIC0yOTcsMjEgKzI5NywxNSBAQAogaW50IHBhcmFtX3NldF9ib29sKGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCiB7CiAJYm9vbCB2OworCWludCByZXQ7CiAKIAkvKiBObyBlcXVhbHMgbWVhbnMgInNldCIuLi4gKi8KIAlpZiAoIXZhbCkgdmFsID0gIjEiOwogCiAJLyogT25lIG9mID1beVluTjAxXSAqLwotCXN3aXRjaCAodmFsWzBdKSB7Ci0JY2FzZSAneSc6IGNhc2UgJ1knOiBjYXNlICcxJzoKLQkJdiA9IHRydWU7Ci0JCWJyZWFrOwotCWNhc2UgJ24nOiBjYXNlICdOJzogY2FzZSAnMCc6Ci0JCXYgPSBmYWxzZTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCXJldCA9IHN0cnRvYm9vbCh2YWwsICZ2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJaWYgKGtwLT5mbGFncyAmIEtQQVJBTV9JU0JPT0wpCiAJCSooYm9vbCAqKWtwLT5hcmcgPSB2OwpAQCAtODIxLDE1ICs4MTUsMTggQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgdmF0dHItPnZlcnNpb24pOwogfQogCi1leHRlcm4gc3RydWN0IG1vZHVsZV92ZXJzaW9uX2F0dHJpYnV0ZSBfX3N0YXJ0X19fbW9kdmVyW10sIF9fc3RvcF9fX21vZHZlcltdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBtb2R1bGVfdmVyc2lvbl9hdHRyaWJ1dGUgKl9fc3RhcnRfX19tb2R2ZXJbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbW9kdWxlX3ZlcnNpb25fYXR0cmlidXRlICpfX3N0b3BfX19tb2R2ZXJbXTsKIAogc3RhdGljIHZvaWQgX19pbml0IHZlcnNpb25fc3lzZnNfYnVpbHRpbih2b2lkKQogewotCWNvbnN0IHN0cnVjdCBtb2R1bGVfdmVyc2lvbl9hdHRyaWJ1dGUgKnZhdHRyOworCWNvbnN0IHN0cnVjdCBtb2R1bGVfdmVyc2lvbl9hdHRyaWJ1dGUgKipwOwogCXN0cnVjdCBtb2R1bGVfa29iamVjdCAqbWs7CiAJaW50IGVycjsKIAotCWZvciAodmF0dHIgPSBfX3N0YXJ0X19fbW9kdmVyOyB2YXR0ciA8IF9fc3RvcF9fX21vZHZlcjsgdmF0dHIrKykgeworCWZvciAocCA9IF9fc3RhcnRfX19tb2R2ZXI7IHAgPCBfX3N0b3BfX19tb2R2ZXI7IHArKykgeworCQljb25zdCBzdHJ1Y3QgbW9kdWxlX3ZlcnNpb25fYXR0cmlidXRlICp2YXR0ciA9ICpwOworCiAJCW1rID0gbG9jYXRlX21vZHVsZV9rb2JqZWN0KHZhdHRyLT5tb2R1bGVfbmFtZSk7CiAJCWlmIChtaykgewogCQkJZXJyID0gc3lzZnNfY3JlYXRlX2ZpbGUoJm1rLT5rb2JqLCAmdmF0dHItPm1hdHRyLmF0dHIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL0tjb25maWcgYi9rZXJuZWwvcG93ZXIvS2NvbmZpZwppbmRleCA2ZGU5YThmLi44N2Y0ZDI0IDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvS2NvbmZpZworKysgYi9rZXJuZWwvcG93ZXIvS2NvbmZpZwpAQCAtMTI1LDEyICsxMjUsNiBAQAogCWNvZGUuIFRoaXMgaXMgaGVscGZ1bCB3aGVuIGRlYnVnZ2luZyBhbmQgcmVwb3J0aW5nIFBNIGJ1Z3MsIGxpa2UKIAlzdXNwZW5kIHN1cHBvcnQuCiAKLWNvbmZpZyBQTV9WRVJCT1NFCi0JYm9vbCAiVmVyYm9zZSBQb3dlciBNYW5hZ2VtZW50IGRlYnVnZ2luZyIKLQlkZXBlbmRzIG9uIFBNX0RFQlVHCi0JLS0taGVscC0tLQotCVRoaXMgb3B0aW9uIGVuYWJsZXMgdmVyYm9zZSBtZXNzYWdlcyBmcm9tIHRoZSBQb3dlciBNYW5hZ2VtZW50IGNvZGUuCi0KIGNvbmZpZyBQTV9BRFZBTkNFRF9ERUJVRwogCWJvb2wgIkV4dHJhIFBNIGF0dHJpYnV0ZXMgaW4gc3lzZnMgZm9yIGxvdy1sZXZlbCBkZWJ1Z2dpbmcvdGVzdGluZyIKIAlkZXBlbmRzIG9uIFBNX0RFQlVHCkBAIC0yMjksMyArMjIzLDcgQEAKIAkgIHJlcHJlc2VudGluZyBpbmRpdmlkdWFsIHZvbHRhZ2UgZG9tYWlucyBhbmQgcHJvdmlkZXMgU09DCiAJICBpbXBsZW1lbnRhdGlvbnMgYSByZWFkeSB0byB1c2UgZnJhbWV3b3JrIHRvIG1hbmFnZSBPUFBzLgogCSAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9wb3dlci9vcHAudHh0PgorCitjb25maWcgUE1fUlVOVElNRV9DTEsKKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBQTV9SVU5USU1FICYmIEhBVkVfQ0xLCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvaGliZXJuYXRlLmMgYi9rZXJuZWwvcG93ZXIvaGliZXJuYXRlLmMKaW5kZXggYWVhYmQyNi4uZjliZWM1NiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL2hpYmVybmF0ZS5jCisrKyBiL2tlcm5lbC9wb3dlci9oaWJlcm5hdGUuYwpAQCAtMjcyLDkgKzI3Miw3IEBACiAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCi0JZXJyb3IgPSBzeXNkZXZfc3VzcGVuZChQTVNHX0ZSRUVaRSk7Ci0JaWYgKCFlcnJvcikKLQkJZXJyb3IgPSBzeXNjb3JlX3N1c3BlbmQoKTsKKwllcnJvciA9IHN5c2NvcmVfc3VzcGVuZCgpOwogCWlmIChlcnJvcikgewogCQlwcmludGsoS0VSTl9FUlIgIlBNOiBTb21lIHN5c3RlbSBkZXZpY2VzIGZhaWxlZCB0byBwb3dlciBkb3duLCAiCiAJCQkiYWJvcnRpbmcgaGliZXJuYXRpb25cbiIpOwpAQCAtMjk5LDcgKzI5Nyw2IEBACiAKICBQb3dlcl91cDoKIAlzeXNjb3JlX3Jlc3VtZSgpOwotCXN5c2Rldl9yZXN1bWUoKTsKIAkvKiBOT1RFOiAgZHBtX3Jlc3VtZV9ub2lycSgpIGlzIGp1c3QgYSByZXN1bWUoKSBmb3IgZGV2aWNlcwogCSAqIHRoYXQgc3VzcGVuZGVkIHdpdGggaXJxcyBvZmYgLi4uIG5vIG92ZXJhbGwgcG93ZXJ1cC4KIAkgKi8KQEAgLTMzMCwyMCArMzI3LDI1IEBACiAKIGludCBoaWJlcm5hdGlvbl9zbmFwc2hvdChpbnQgcGxhdGZvcm1fbW9kZSkKIHsKKwlwbV9tZXNzYWdlX3QgbXNnID0gUE1TR19SRUNPVkVSOwogCWludCBlcnJvcjsKIAogCWVycm9yID0gcGxhdGZvcm1fYmVnaW4ocGxhdGZvcm1fbW9kZSk7CiAJaWYgKGVycm9yKQogCQlnb3RvIENsb3NlOwogCisJZXJyb3IgPSBkcG1fcHJlcGFyZShQTVNHX0ZSRUVaRSk7CisJaWYgKGVycm9yKQorCQlnb3RvIENvbXBsZXRlX2RldmljZXM7CisKIAkvKiBQcmVhbGxvY2F0ZSBpbWFnZSBtZW1vcnkgYmVmb3JlIHNodXR0aW5nIGRvd24gZGV2aWNlcy4gKi8KIAllcnJvciA9IGhpYmVybmF0ZV9wcmVhbGxvY2F0ZV9tZW1vcnkoKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gQ2xvc2U7CisJCWdvdG8gQ29tcGxldGVfZGV2aWNlczsKIAogCXN1c3BlbmRfY29uc29sZSgpOwogCXBtX3Jlc3RyaWN0X2dmcF9tYXNrKCk7Ci0JZXJyb3IgPSBkcG1fc3VzcGVuZF9zdGFydChQTVNHX0ZSRUVaRSk7CisJZXJyb3IgPSBkcG1fc3VzcGVuZChQTVNHX0ZSRUVaRSk7CiAJaWYgKGVycm9yKQogCQlnb3RvIFJlY292ZXJfcGxhdGZvcm07CiAKQEAgLTM2MSwxMyArMzYzLDE3IEBACiAJaWYgKGVycm9yIHx8ICFpbl9zdXNwZW5kKQogCQlzd3N1c3BfZnJlZSgpOwogCi0JZHBtX3Jlc3VtZV9lbmQoaW5fc3VzcGVuZCA/Ci0JCShlcnJvciA/IFBNU0dfUkVDT1ZFUiA6IFBNU0dfVEhBVykgOiBQTVNHX1JFU1RPUkUpOworCW1zZyA9IGluX3N1c3BlbmQgPyAoZXJyb3IgPyBQTVNHX1JFQ09WRVIgOiBQTVNHX1RIQVcpIDogUE1TR19SRVNUT1JFOworCWRwbV9yZXN1bWUobXNnKTsKIAogCWlmIChlcnJvciB8fCAhaW5fc3VzcGVuZCkKIAkJcG1fcmVzdG9yZV9nZnBfbWFzaygpOwogCiAJcmVzdW1lX2NvbnNvbGUoKTsKKworIENvbXBsZXRlX2RldmljZXM6CisJZHBtX2NvbXBsZXRlKG1zZyk7CisKICBDbG9zZToKIAlwbGF0Zm9ybV9lbmQocGxhdGZvcm1fbW9kZSk7CiAJcmV0dXJuIGVycm9yOwpAQCAtNDA2LDkgKzQxMiw3IEBACiAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCi0JZXJyb3IgPSBzeXNkZXZfc3VzcGVuZChQTVNHX1FVSUVTQ0UpOwotCWlmICghZXJyb3IpCi0JCWVycm9yID0gc3lzY29yZV9zdXNwZW5kKCk7CisJZXJyb3IgPSBzeXNjb3JlX3N1c3BlbmQoKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gRW5hYmxlX2lycXM7CiAKQEAgLTQzNiw3ICs0NDAsNiBAQAogCXRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKIAogCXN5c2NvcmVfcmVzdW1lKCk7Ci0Jc3lzZGV2X3Jlc3VtZSgpOwogCiAgRW5hYmxlX2lycXM6CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwpAQCAtNTIyLDcgKzUyNSw2IEBACiAJCWdvdG8gUGxhdGZvcm1fZmluaXNoOwogCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQlzeXNkZXZfc3VzcGVuZChQTVNHX0hJQkVSTkFURSk7CiAJc3lzY29yZV9zdXNwZW5kKCk7CiAJaWYgKHBtX3dha2V1cF9wZW5kaW5nKCkpIHsKIAkJZXJyb3IgPSAtRUFHQUlOOwpAQCAtNTM1LDcgKzUzNyw2IEBACiAKICBQb3dlcl91cDoKIAlzeXNjb3JlX3Jlc3VtZSgpOwotCXN5c2Rldl9yZXN1bWUoKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJZW5hYmxlX25vbmJvb3RfY3B1cygpOwogCkBAIC05NzYsMTAgKzk3NywzMyBAQAogCiBwb3dlcl9hdHRyKGltYWdlX3NpemUpOwogCitzdGF0aWMgc3NpemVfdCByZXNlcnZlZF9zaXplX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsIHJlc2VydmVkX3NpemUpOworfQorCitzdGF0aWMgc3NpemVfdCByZXNlcnZlZF9zaXplX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCWlmIChzc2NhbmYoYnVmLCAiJWx1IiwgJnNpemUpID09IDEpIHsKKwkJcmVzZXJ2ZWRfc2l6ZSA9IHNpemU7CisJCXJldHVybiBuOworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCitwb3dlcl9hdHRyKHJlc2VydmVkX3NpemUpOworCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqIGdbXSA9IHsKIAkmZGlza19hdHRyLmF0dHIsCiAJJnJlc3VtZV9hdHRyLmF0dHIsCiAJJmltYWdlX3NpemVfYXR0ci5hdHRyLAorCSZyZXNlcnZlZF9zaXplX2F0dHIuYXR0ciwKIAlOVUxMLAogfTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL21haW4uYyBiL2tlcm5lbC9wb3dlci9tYWluLmMKaW5kZXggZGU5YWVmOC4uMjk4MWFmNCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL21haW4uYworKysgYi9rZXJuZWwvcG93ZXIvbWFpbi5jCkBAIC0zMzcsNiArMzM3LDcgQEAKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAloaWJlcm5hdGVfaW1hZ2Vfc2l6ZV9pbml0KCk7CisJaGliZXJuYXRlX3Jlc2VydmVkX3NpemVfaW5pdCgpOwogCXBvd2VyX2tvYmogPSBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkKCJwb3dlciIsIE5VTEwpOwogCWlmICghcG93ZXJfa29iaikKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvcG93ZXIuaCBiL2tlcm5lbC9wb3dlci9wb3dlci5oCmluZGV4IDAzNjM0YmUuLjlhMDBhMGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9wb3dlci5oCisrKyBiL2tlcm5lbC9wb3dlci9wb3dlci5oCkBAIC0xNSw2ICsxNSw3IEBACiAKICNpZmRlZiBDT05GSUdfSElCRVJOQVRJT04KIC8qIGtlcm5lbC9wb3dlci9zbmFwc2hvdC5jICovCitleHRlcm4gdm9pZCBfX2luaXQgaGliZXJuYXRlX3Jlc2VydmVkX3NpemVfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIF9faW5pdCBoaWJlcm5hdGVfaW1hZ2Vfc2l6ZV9pbml0KHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fSEVBREVSCkBAIC01NSw2ICs1Niw3IEBACiAKICNlbHNlIC8qICFDT05GSUdfSElCRVJOQVRJT04gKi8KIAorc3RhdGljIGlubGluZSB2b2lkIGhpYmVybmF0ZV9yZXNlcnZlZF9zaXplX2luaXQodm9pZCkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBoaWJlcm5hdGVfaW1hZ2Vfc2l6ZV9pbml0KHZvaWQpIHt9CiAjZW5kaWYgLyogIUNPTkZJR19ISUJFUk5BVElPTiAqLwogCkBAIC03Miw2ICs3NCw4IEBACiAKIC8qIFByZWZlcnJlZCBpbWFnZSBzaXplIGluIGJ5dGVzIChkZWZhdWx0IDUwMCBNQikgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIGltYWdlX3NpemU7CisvKiBTaXplIG9mIG1lbW9yeSByZXNlcnZlZCBmb3IgZHJpdmVycyAoZGVmYXVsdCBTUEFSRV9QQUdFUyB4IFBBR0VfU0laRSkgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIHJlc2VydmVkX3NpemU7CiBleHRlcm4gaW50IGluX3N1c3BlbmQ7CiBleHRlcm4gZGV2X3Qgc3dzdXNwX3Jlc3VtZV9kZXZpY2U7CiBleHRlcm4gc2VjdG9yX3Qgc3dzdXNwX3Jlc3VtZV9ibG9jazsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jIGIva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKaW5kZXggY2EwYWFjYy4uYWNlNTU4OCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKKysrIGIva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKQEAgLTQxLDE2ICs0MSwyOCBAQAogc3RhdGljIHZvaWQgc3dzdXNwX3Vuc2V0X3BhZ2VfZm9yYmlkZGVuKHN0cnVjdCBwYWdlICopOwogCiAvKgorICogTnVtYmVyIG9mIGJ5dGVzIHRvIHJlc2VydmUgZm9yIG1lbW9yeSBhbGxvY2F0aW9ucyBtYWRlIGJ5IGRldmljZSBkcml2ZXJzCisgKiBmcm9tIHRoZWlyIC0+ZnJlZXplKCkgYW5kIC0+ZnJlZXplX25vaXJxKCkgY2FsbGJhY2tzIHNvIHRoYXQgdGhleSBkb24ndAorICogY2F1c2UgaW1hZ2UgY3JlYXRpb24gdG8gZmFpbCAodHVuYWJsZSB2aWEgL3N5cy9wb3dlci9yZXNlcnZlZF9zaXplKS4KKyAqLwordW5zaWduZWQgbG9uZyByZXNlcnZlZF9zaXplOworCit2b2lkIF9faW5pdCBoaWJlcm5hdGVfcmVzZXJ2ZWRfc2l6ZV9pbml0KHZvaWQpCit7CisJcmVzZXJ2ZWRfc2l6ZSA9IFNQQVJFX1BBR0VTICogUEFHRV9TSVpFOworfQorCisvKgogICogUHJlZmVycmVkIGltYWdlIHNpemUgaW4gYnl0ZXMgKHR1bmFibGUgdmlhIC9zeXMvcG93ZXIvaW1hZ2Vfc2l6ZSkuCi0gKiBXaGVuIGl0IGlzIHNldCB0byBOLCB0aGUgaW1hZ2UgY3JlYXRpbmcgY29kZSB3aWxsIGRvIGl0cyBiZXN0IHRvCi0gKiBlbnN1cmUgdGhlIGltYWdlIHNpemUgd2lsbCBub3QgZXhjZWVkIE4gYnl0ZXMsIGJ1dCBpZiB0aGF0IGlzCi0gKiBpbXBvc3NpYmxlLCBpdCB3aWxsIHRyeSB0byBjcmVhdGUgdGhlIHNtYWxsZXN0IGltYWdlIHBvc3NpYmxlLgorICogV2hlbiBpdCBpcyBzZXQgdG8gTiwgc3dzdXNwIHdpbGwgZG8gaXRzIGJlc3QgdG8gZW5zdXJlIHRoZSBpbWFnZQorICogc2l6ZSB3aWxsIG5vdCBleGNlZWQgTiBieXRlcywgYnV0IGlmIHRoYXQgaXMgaW1wb3NzaWJsZSwgaXQgd2lsbAorICogdHJ5IHRvIGNyZWF0ZSB0aGUgc21hbGxlc3QgaW1hZ2UgcG9zc2libGUuCiAgKi8KIHVuc2lnbmVkIGxvbmcgaW1hZ2Vfc2l6ZTsKIAogdm9pZCBfX2luaXQgaGliZXJuYXRlX2ltYWdlX3NpemVfaW5pdCh2b2lkKQogewotCWltYWdlX3NpemUgPSAodG90YWxyYW1fcGFnZXMgLyAzKSAqIFBBR0VfU0laRTsKKwlpbWFnZV9zaXplID0gKCh0b3RhbHJhbV9wYWdlcyAqIDIpIC8gNSkgKiBQQUdFX1NJWkU7CiB9CiAKIC8qIExpc3Qgb2YgUEJFcyBuZWVkZWQgZm9yIHJlc3RvcmluZyB0aGUgcGFnZXMgdGhhdCB3ZXJlIGFsbG9jYXRlZCBiZWZvcmUKQEAgLTEyNjMsMTEgKzEyNzUsMTMgQEAKICAqIGZyYW1lIGluIHVzZS4gIFdlIGFsc28gbmVlZCBhIG51bWJlciBvZiBwYWdlIGZyYW1lcyB0byBiZSBmcmVlIGR1cmluZwogICogaGliZXJuYXRpb24gZm9yIGFsbG9jYXRpb25zIG1hZGUgd2hpbGUgc2F2aW5nIHRoZSBpbWFnZSBhbmQgZm9yIGRldmljZQogICogZHJpdmVycywgaW4gY2FzZSB0aGV5IG5lZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZyb20gdGhlaXIgaGliZXJuYXRpb24KLSAqIGNhbGxiYWNrcyAodGhlc2UgdHdvIG51bWJlcnMgYXJlIGdpdmVuIGJ5IFBBR0VTX0ZPUl9JTyBhbmQgU1BBUkVfUEFHRVMsCi0gKiByZXNwZWN0aXZlbHksIGJvdGggb2Ygd2hpY2ggYXJlIHJvdWdoIGVzdGltYXRlcykuICBUbyBtYWtlIHRoaXMgaGFwcGVuLCB3ZQotICogY29tcHV0ZSB0aGUgdG90YWwgbnVtYmVyIG9mIGF2YWlsYWJsZSBwYWdlIGZyYW1lcyBhbmQgYWxsb2NhdGUgYXQgbGVhc3QKKyAqIGNhbGxiYWNrcyAodGhlc2UgdHdvIG51bWJlcnMgYXJlIGdpdmVuIGJ5IFBBR0VTX0ZPUl9JTyAod2hpY2ggaXMgYSByb3VnaAorICogZXN0aW1hdGUpIGFuZCByZXNlcnZlcmRfc2l6ZSBkaXZpZGVkIGJ5IFBBR0VfU0laRSAod2hpY2ggaXMgdHVuYWJsZSB0aHJvdWdoCisgKiAvc3lzL3Bvd2VyL3Jlc2VydmVkX3NpemUsIHJlc3BlY3RpdmVseSkuICBUbyBtYWtlIHRoaXMgaGFwcGVuLCB3ZSBjb21wdXRlIHRoZQorICogdG90YWwgbnVtYmVyIG9mIGF2YWlsYWJsZSBwYWdlIGZyYW1lcyBhbmQgYWxsb2NhdGUgYXQgbGVhc3QKICAqCi0gKiAoW3BhZ2UgZnJhbWVzIHRvdGFsXSArIFBBR0VTX0ZPUl9JTyArIFttZXRhZGF0YSBwYWdlc10pIC8gMiArIDIgKiBTUEFSRV9QQUdFUworICogKFtwYWdlIGZyYW1lcyB0b3RhbF0gKyBQQUdFU19GT1JfSU8gKyBbbWV0YWRhdGEgcGFnZXNdKSAvIDIKKyAqICArIDIgKiBESVZfUk9VTkRfVVAocmVzZXJ2ZWRfc2l6ZSwgUEFHRV9TSVpFKQogICoKICAqIG9mIHRoZW0sIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBtYXhpbXVtIHNpemUgb2YgYSBoaWJlcm5hdGlvbiBpbWFnZS4KICAqCkBAIC0xMzIyLDcgKzEzMzYsOCBAQAogCWNvdW50IC09IHRvdGFscmVzZXJ2ZV9wYWdlczsKIAogCS8qIENvbXB1dGUgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNhdmVhYmxlIHBhZ2VzIHRvIGxlYXZlIGluIG1lbW9yeS4gKi8KLQltYXhfc2l6ZSA9IChjb3VudCAtIChzaXplICsgUEFHRVNfRk9SX0lPKSkgLyAyIC0gMiAqIFNQQVJFX1BBR0VTOworCW1heF9zaXplID0gKGNvdW50IC0gKHNpemUgKyBQQUdFU19GT1JfSU8pKSAvIDIKKwkJCS0gMiAqIERJVl9ST1VORF9VUChyZXNlcnZlZF9zaXplLCBQQUdFX1NJWkUpOwogCS8qIENvbXB1dGUgdGhlIGRlc2lyZWQgbnVtYmVyIG9mIGltYWdlIHBhZ2VzIHNwZWNpZmllZCBieSBpbWFnZV9zaXplLiAqLwogCXNpemUgPSBESVZfUk9VTkRfVVAoaW1hZ2Vfc2l6ZSwgUEFHRV9TSVpFKTsKIAlpZiAoc2l6ZSA+IG1heF9zaXplKQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3N1c3BlbmQuYyBiL2tlcm5lbC9wb3dlci9zdXNwZW5kLmMKaW5kZXggMjgxNGMzMi4uMWM0MWJhMiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3N1c3BlbmQuYworKysgYi9rZXJuZWwvcG93ZXIvc3VzcGVuZC5jCkBAIC0xNjMsMTYgKzE2MywxMyBAQAogCWFyY2hfc3VzcGVuZF9kaXNhYmxlX2lycXMoKTsKIAlCVUdfT04oIWlycXNfZGlzYWJsZWQoKSk7CiAKLQllcnJvciA9IHN5c2Rldl9zdXNwZW5kKFBNU0dfU1VTUEVORCk7Ci0JaWYgKCFlcnJvcikKLQkJZXJyb3IgPSBzeXNjb3JlX3N1c3BlbmQoKTsKKwllcnJvciA9IHN5c2NvcmVfc3VzcGVuZCgpOwogCWlmICghZXJyb3IpIHsKIAkJaWYgKCEoc3VzcGVuZF90ZXN0KFRFU1RfQ09SRSkgfHwgcG1fd2FrZXVwX3BlbmRpbmcoKSkpIHsKIAkJCWVycm9yID0gc3VzcGVuZF9vcHMtPmVudGVyKHN0YXRlKTsKIAkJCWV2ZW50c19jaGVja19lbmFibGVkID0gZmFsc2U7CiAJCX0KIAkJc3lzY29yZV9yZXN1bWUoKTsKLQkJc3lzZGV2X3Jlc3VtZSgpOwogCX0KIAogCWFyY2hfc3VzcGVuZF9lbmFibGVfaXJxcygpOwpAQCAtMjEzLDcgKzIxMCw2IEBACiAJCQlnb3RvIENsb3NlOwogCX0KIAlzdXNwZW5kX2NvbnNvbGUoKTsKLQlwbV9yZXN0cmljdF9nZnBfbWFzaygpOwogCXN1c3BlbmRfdGVzdF9zdGFydCgpOwogCWVycm9yID0gZHBtX3N1c3BlbmRfc3RhcnQoUE1TR19TVVNQRU5EKTsKIAlpZiAoZXJyb3IpIHsKQEAgLTIyNCwxMyArMjIwLDEyIEBACiAJaWYgKHN1c3BlbmRfdGVzdChURVNUX0RFVklDRVMpKQogCQlnb3RvIFJlY292ZXJfcGxhdGZvcm07CiAKLQlzdXNwZW5kX2VudGVyKHN0YXRlKTsKKwllcnJvciA9IHN1c3BlbmRfZW50ZXIoc3RhdGUpOwogCiAgUmVzdW1lX2RldmljZXM6CiAJc3VzcGVuZF90ZXN0X3N0YXJ0KCk7CiAJZHBtX3Jlc3VtZV9lbmQoUE1TR19SRVNVTUUpOwogCXN1c3BlbmRfdGVzdF9maW5pc2goInJlc3VtZSBkZXZpY2VzIik7Ci0JcG1fcmVzdG9yZV9nZnBfbWFzaygpOwogCXJlc3VtZV9jb25zb2xlKCk7CiAgQ2xvc2U6CiAJaWYgKHN1c3BlbmRfb3BzLT5lbmQpCkBAIC0yOTEsNyArMjg2LDkgQEAKIAkJZ290byBGaW5pc2g7CiAKIAlwcl9kZWJ1ZygiUE06IEVudGVyaW5nICVzIHNsZWVwXG4iLCBwbV9zdGF0ZXNbc3RhdGVdKTsKKwlwbV9yZXN0cmljdF9nZnBfbWFzaygpOwogCWVycm9yID0gc3VzcGVuZF9kZXZpY2VzX2FuZF9lbnRlcihzdGF0ZSk7CisJcG1fcmVzdG9yZV9nZnBfbWFzaygpOwogCiAgRmluaXNoOgogCXByX2RlYnVnKCJQTTogRmluaXNoaW5nIHdha2V1cC5cbiIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3VzZXIuYyBiL2tlcm5lbC9wb3dlci91c2VyLmMKaW5kZXggYzM2YzNiOS4uN2QwMmQzMyAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3VzZXIuYworKysgYi9rZXJuZWwvcG93ZXIvdXNlci5jCkBAIC0xMzUsOCArMTM1LDEwIEBACiAJZnJlZV9iYXNpY19tZW1vcnlfYml0bWFwcygpOwogCWRhdGEgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJZnJlZV9hbGxfc3dhcF9wYWdlcyhkYXRhLT5zd2FwKTsKLQlpZiAoZGF0YS0+ZnJvemVuKQorCWlmIChkYXRhLT5mcm96ZW4pIHsKKwkJcG1fcmVzdG9yZV9nZnBfbWFzaygpOwogCQl0aGF3X3Byb2Nlc3NlcygpOworCX0KIAlwbV9ub3RpZmllcl9jYWxsX2NoYWluKGRhdGEtPm1vZGUgPT0gT19SRE9OTFkgPwogCQkJUE1fUE9TVF9ISUJFUk5BVElPTiA6IFBNX1BPU1RfUkVTVE9SRSk7CiAJYXRvbWljX2luYygmc25hcHNob3RfZGV2aWNlX2F2YWlsYWJsZSk7CkBAIC0zNzksNiArMzgxLDcgQEAKIAkJICogUE1fSElCRVJOQVRJT05fUFJFUEFSRQogCQkgKi8KIAkJZXJyb3IgPSBzdXNwZW5kX2RldmljZXNfYW5kX2VudGVyKFBNX1NVU1BFTkRfTUVNKTsKKwkJZGF0YS0+cmVhZHkgPSAwOwogCQlicmVhazsKIAogCWNhc2UgU05BUFNIT1RfUExBVEZPUk1fU1VQUE9SVDoKZGlmZiAtLWdpdCBhL2tlcm5lbC9wdHJhY2UuYyBiL2tlcm5lbC9wdHJhY2UuYwppbmRleCAwZmMxZWVkLi43YTgxZmMwIDEwMDY0NAotLS0gYS9rZXJuZWwvcHRyYWNlLmMKKysrIGIva2VybmVsL3B0cmFjZS5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvcmVnc2V0Lmg+CisjaW5jbHVkZSA8bGludXgvaHdfYnJlYWtwb2ludC5oPgogCiAKIC8qCkBAIC0zNywzNSArMzgsMzMgQEAKIAljaGlsZC0+cGFyZW50ID0gbmV3X3BhcmVudDsKIH0KIAotLyoKLSAqIFR1cm4gYSB0cmFjaW5nIHN0b3AgaW50byBhIG5vcm1hbCBzdG9wIG5vdywgc2luY2Ugd2l0aCBubyB0cmFjZXIgdGhlcmUKLSAqIHdvdWxkIGJlIG5vIHdheSB0byB3YWtlIGl0IHVwIHdpdGggU0lHQ09OVCBvciBTSUdLSUxMLiAgSWYgdGhlcmUgd2FzIGEKLSAqIHNpZ25hbCBzZW50IHRoYXQgd291bGQgcmVzdW1lIHRoZSBjaGlsZCwgYnV0IGRpZG4ndCBiZWNhdXNlIGl0IHdhcyBpbgotICogVEFTS19UUkFDRUQsIHJlc3VtZSBpdCBub3cuCi0gKiBSZXF1aXJlcyB0aGF0IGlycXMgYmUgZGlzYWJsZWQuCi0gKi8KLXN0YXRpYyB2b2lkIHB0cmFjZV91bnRyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCi17Ci0Jc3Bpbl9sb2NrKCZjaGlsZC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JaWYgKHRhc2tfaXNfdHJhY2VkKGNoaWxkKSkgewotCQkvKgotCQkgKiBJZiB0aGUgZ3JvdXAgc3RvcCBpcyBjb21wbGV0ZWQgb3IgaW4gcHJvZ3Jlc3MsCi0JCSAqIHRoaXMgdGhyZWFkIHdhcyBhbHJlYWR5IGNvdW50ZWQgYXMgc3RvcHBlZC4KLQkJICovCi0JCWlmIChjaGlsZC0+c2lnbmFsLT5mbGFncyAmIFNJR05BTF9TVE9QX1NUT1BQRUQgfHwKLQkJICAgIGNoaWxkLT5zaWduYWwtPmdyb3VwX3N0b3BfY291bnQpCi0JCQlfX3NldF90YXNrX3N0YXRlKGNoaWxkLCBUQVNLX1NUT1BQRUQpOwotCQllbHNlCi0JCQlzaWduYWxfd2FrZV91cChjaGlsZCwgMSk7Ci0JfQotCXNwaW5fdW5sb2NrKCZjaGlsZC0+c2lnaGFuZC0+c2lnbG9jayk7Ci19Ci0KLS8qCi0gKiB1bnB0cmFjZSBhIHRhc2s6IG1vdmUgaXQgYmFjayB0byBpdHMgb3JpZ2luYWwgcGFyZW50IGFuZAotICogcmVtb3ZlIGl0IGZyb20gdGhlIHB0cmFjZSBsaXN0LgorLyoqCisgKiBfX3B0cmFjZV91bmxpbmsgLSB1bmxpbmsgcHRyYWNlZSBhbmQgcmVzdG9yZSBpdHMgZXhlY3V0aW9uIHN0YXRlCisgKiBAY2hpbGQ6IHB0cmFjZWUgdG8gYmUgdW5saW5rZWQKICAqCi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSB0YXNrbGlzdCBsb2NrIHdyaXRlLWhlbGQuCisgKiBSZW1vdmUgQGNoaWxkIGZyb20gdGhlIHB0cmFjZSBsaXN0LCBtb3ZlIGl0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIHBhcmVudCwKKyAqIGFuZCByZXN0b3JlIHRoZSBleGVjdXRpb24gc3RhdGUgc28gdGhhdCBpdCBjb25mb3JtcyB0byB0aGUgZ3JvdXAgc3RvcAorICogc3RhdGUuCisgKgorICogVW5saW5raW5nIGNhbiBoYXBwZW4gdmlhIHR3byBwYXRocyAtIGV4cGxpY2l0IFBUUkFDRV9ERVRBQ0ggb3IgcHRyYWNlcgorICogZXhpdGluZy4gIEZvciBQVFJBQ0VfREVUQUNILCB1bmxlc3MgdGhlIHB0cmFjZWUgaGFzIGJlZW4ga2lsbGVkIGJldHdlZW4KKyAqIHB0cmFjZV9jaGVja19hdHRhY2goKSBhbmQgaGVyZSwgaXQncyBndWFyYW50ZWVkIHRvIGJlIGluIFRBU0tfVFJBQ0VELgorICogSWYgdGhlIHB0cmFjZXIgaXMgZXhpdGluZywgdGhlIHB0cmFjZWUgY2FuIGJlIGluIGFueSBzdGF0ZS4KKyAqCisgKiBBZnRlciBkZXRhY2gsIHRoZSBwdHJhY2VlIHNob3VsZCBiZSBpbiBhIHN0YXRlIHdoaWNoIGNvbmZvcm1zIHRvIHRoZQorICogZ3JvdXAgc3RvcC4gIElmIHRoZSBncm91cCBpcyBzdG9wcGVkIG9yIGluIHRoZSBwcm9jZXNzIG9mIHN0b3BwaW5nLCB0aGUKKyAqIHB0cmFjZWUgc2hvdWxkIGJlIHB1dCBpbnRvIFRBU0tfU1RPUFBFRDsgb3RoZXJ3aXNlLCBpdCBzaG91bGQgYmUgd29rZW4KKyAqIHVwIGZyb20gVEFTS19UUkFDRUQuCisgKgorICogSWYgdGhlIHB0cmFjZWUgaXMgaW4gVEFTS19UUkFDRUQgYW5kIG5lZWRzIHRvIGJlIG1vdmVkIHRvIFRBU0tfU1RPUFBFRCwKKyAqIGl0IGdvZXMgdGhyb3VnaCBUUkFDRUQgLT4gUlVOTklORyAtPiBTVE9QUEVEIHRyYW5zaXRpb24gd2hpY2ggaXMgc2ltaWxhcgorICogdG8gYnV0IGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gb2Ygd2hhdCBoYXBwZW5zIHdoaWxlIGF0dGFjaGluZyB0byBhCisgKiBzdG9wcGVkIHRhc2suICBIb3dldmVyLCBpbiB0aGlzIGRpcmVjdGlvbiwgdGhlIGludGVybWVkaWF0ZSBSVU5OSU5HCisgKiBzdGF0ZSBpcyBub3QgaGlkZGVuIGV2ZW4gZnJvbSB0aGUgY3VycmVudCBwdHJhY2VyIGFuZCBpZiBpdCBpbW1lZGlhdGVseQorICogcmUtYXR0YWNoZXMgYW5kIHBlcmZvcm1zIGEgV05PSEFORyB3YWl0KDIpLCBpdCBtYXkgZmFpbC4KKyAqCisgKiBDT05URVhUOgorICogd3JpdGVfbG9ja19pcnEodGFza2xpc3RfbG9jaykKICAqLwogdm9pZCBfX3B0cmFjZV91bmxpbmsoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKIHsKQEAgLTc1LDggKzc0LDI3IEBACiAJY2hpbGQtPnBhcmVudCA9IGNoaWxkLT5yZWFsX3BhcmVudDsKIAlsaXN0X2RlbF9pbml0KCZjaGlsZC0+cHRyYWNlX2VudHJ5KTsKIAotCWlmICh0YXNrX2lzX3RyYWNlZChjaGlsZCkpCi0JCXB0cmFjZV91bnRyYWNlKGNoaWxkKTsKKwlzcGluX2xvY2soJmNoaWxkLT5zaWdoYW5kLT5zaWdsb2NrKTsKKworCS8qCisJICogUmVpbnN0YXRlIEdST1VQX1NUT1BfUEVORElORyBpZiBncm91cCBzdG9wIGlzIGluIGVmZmVjdCBhbmQKKwkgKiBAY2hpbGQgaXNuJ3QgZGVhZC4KKwkgKi8KKwlpZiAoIShjaGlsZC0+ZmxhZ3MgJiBQRl9FWElUSU5HKSAmJgorCSAgICAoY2hpbGQtPnNpZ25hbC0+ZmxhZ3MgJiBTSUdOQUxfU1RPUF9TVE9QUEVEIHx8CisJICAgICBjaGlsZC0+c2lnbmFsLT5ncm91cF9zdG9wX2NvdW50KSkKKwkJY2hpbGQtPmdyb3VwX3N0b3AgfD0gR1JPVVBfU1RPUF9QRU5ESU5HOworCisJLyoKKwkgKiBJZiB0cmFuc2l0aW9uIHRvIFRBU0tfU1RPUFBFRCBpcyBwZW5kaW5nIG9yIGluIFRBU0tfVFJBQ0VELCBraWNrCisJICogQGNoaWxkIGluIHRoZSBidXR0LiAgTm90ZSB0aGF0IEByZXN1bWUgc2hvdWxkIGJlIHVzZWQgaWZmIEBjaGlsZAorCSAqIGlzIGluIFRBU0tfVFJBQ0VEOyBvdGhlcndpc2UsIHdlIG1pZ2h0IHVuZHVseSBkaXNydXB0CisJICogVEFTS19LSUxMQUJMRSBzbGVlcHMuCisJICovCisJaWYgKGNoaWxkLT5ncm91cF9zdG9wICYgR1JPVVBfU1RPUF9QRU5ESU5HIHx8IHRhc2tfaXNfdHJhY2VkKGNoaWxkKSkKKwkJc2lnbmFsX3dha2VfdXAoY2hpbGQsIHRhc2tfaXNfdHJhY2VkKGNoaWxkKSk7CisKKwlzcGluX3VubG9jaygmY2hpbGQtPnNpZ2hhbmQtPnNpZ2xvY2spOwogfQogCiAvKgpAQCAtOTUsMTYgKzExMywxNCBAQAogCSAqLwogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJaWYgKChjaGlsZC0+cHRyYWNlICYgUFRfUFRSQUNFRCkgJiYgY2hpbGQtPnBhcmVudCA9PSBjdXJyZW50KSB7Ci0JCXJldCA9IDA7CiAJCS8qCiAJCSAqIGNoaWxkLT5zaWdoYW5kIGNhbid0IGJlIE5VTEwsIHJlbGVhc2VfdGFzaygpCiAJCSAqIGRvZXMgcHRyYWNlX3VubGluaygpIGJlZm9yZSBfX2V4aXRfc2lnbmFsKCkuCiAJCSAqLwogCQlzcGluX2xvY2tfaXJxKCZjaGlsZC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCWlmICh0YXNrX2lzX3N0b3BwZWQoY2hpbGQpKQotCQkJY2hpbGQtPnN0YXRlID0gVEFTS19UUkFDRUQ7Ci0JCWVsc2UgaWYgKCF0YXNrX2lzX3RyYWNlZChjaGlsZCkgJiYgIWtpbGwpCi0JCQlyZXQgPSAtRVNSQ0g7CisJCVdBUk5fT05fT05DRSh0YXNrX2lzX3N0b3BwZWQoY2hpbGQpKTsKKwkJaWYgKHRhc2tfaXNfdHJhY2VkKGNoaWxkKSB8fCBraWxsKQorCQkJcmV0ID0gMDsKIAkJc3Bpbl91bmxvY2tfaXJxKCZjaGlsZC0+c2lnaGFuZC0+c2lnbG9jayk7CiAJfQogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKQEAgLTE2OCw2ICsxODQsNyBAQAogCiBzdGF0aWMgaW50IHB0cmFjZV9hdHRhY2goc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogeworCWJvb2wgd2FpdF90cmFwID0gZmFsc2U7CiAJaW50IHJldHZhbDsKIAogCWF1ZGl0X3B0cmFjZSh0YXNrKTsKQEAgLTIwNywxMiArMjI0LDQyIEBACiAJX19wdHJhY2VfbGluayh0YXNrLCBjdXJyZW50KTsKIAlzZW5kX3NpZ19pbmZvKFNJR1NUT1AsIFNFTkRfU0lHX0ZPUkNFRCwgdGFzayk7CiAKKwlzcGluX2xvY2soJnRhc2stPnNpZ2hhbmQtPnNpZ2xvY2spOworCisJLyoKKwkgKiBJZiB0aGUgdGFzayBpcyBhbHJlYWR5IFNUT1BQRUQsIHNldCBHUk9VUF9TVE9QX1BFTkRJTkcgYW5kCisJICogVFJBUFBJTkcsIGFuZCBraWNrIGl0IHNvIHRoYXQgaXQgdHJhbnNpdHMgdG8gVFJBQ0VELiAgVFJBUFBJTkcKKwkgKiB3aWxsIGJlIGNsZWFyZWQgaWYgdGhlIGNoaWxkIGNvbXBsZXRlcyB0aGUgdHJhbnNpdGlvbiBvciBhbnkKKwkgKiBldmVudCB3aGljaCBjbGVhcnMgdGhlIGdyb3VwIHN0b3Agc3RhdGVzIGhhcHBlbnMuICBXZSdsbCB3YWl0CisJICogZm9yIHRoZSB0cmFuc2l0aW9uIHRvIGNvbXBsZXRlIGJlZm9yZSByZXR1cm5pbmcgZnJvbSB0aGlzCisJICogZnVuY3Rpb24uCisJICoKKwkgKiBUaGlzIGhpZGVzIFNUT1BQRUQgLT4gUlVOTklORyAtPiBUUkFDRUQgdHJhbnNpdGlvbiBmcm9tIHRoZQorCSAqIGF0dGFjaGluZyB0aHJlYWQgYnV0IGEgZGlmZmVyZW50IHRocmVhZCBpbiB0aGUgc2FtZSBncm91cCBjYW4KKwkgKiBzdGlsbCBvYnNlcnZlIHRoZSB0cmFuc2llbnQgUlVOTklORyBzdGF0ZS4gIElPVywgaWYgYW5vdGhlcgorCSAqIHRocmVhZCdzIFdOT0hBTkcgd2FpdCgyKSBvbiB0aGUgc3RvcHBlZCB0cmFjZWUgcmFjZXMgYWdhaW5zdAorCSAqIEFUVEFDSCwgdGhlIHdhaXQoMikgbWF5IGZhaWwgZHVlIHRvIHRoZSB0cmFuc2llbnQgUlVOTklORy4KKwkgKgorCSAqIFRoZSBmb2xsb3dpbmcgdGFza19pc19zdG9wcGVkKCkgdGVzdCBpcyBzYWZlIGFzIGJvdGggdHJhbnNpdGlvbnMKKwkgKiBpbiBhbmQgb3V0IG9mIFNUT1BQRUQgYXJlIHByb3RlY3RlZCBieSBzaWdsb2NrLgorCSAqLworCWlmICh0YXNrX2lzX3N0b3BwZWQodGFzaykpIHsKKwkJdGFzay0+Z3JvdXBfc3RvcCB8PSBHUk9VUF9TVE9QX1BFTkRJTkcgfCBHUk9VUF9TVE9QX1RSQVBQSU5HOworCQlzaWduYWxfd2FrZV91cCh0YXNrLCAxKTsKKwkJd2FpdF90cmFwID0gdHJ1ZTsKKwl9CisKKwlzcGluX3VubG9jaygmdGFzay0+c2lnaGFuZC0+c2lnbG9jayk7CisKIAlyZXR2YWwgPSAwOwogdW5sb2NrX3Rhc2tsaXN0OgogCXdyaXRlX3VubG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOwogdW5sb2NrX2NyZWRzOgogCW11dGV4X3VubG9jaygmdGFzay0+c2lnbmFsLT5jcmVkX2d1YXJkX211dGV4KTsKIG91dDoKKwlpZiAod2FpdF90cmFwKQorCQl3YWl0X2V2ZW50KGN1cnJlbnQtPnNpZ25hbC0+d2FpdF9jaGxkZXhpdCwKKwkJCSAgICEodGFzay0+Z3JvdXBfc3RvcCAmIEdST1VQX1NUT1BfVFJBUFBJTkcpKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0zMTUsOCArMzYyLDYgQEAKIAlpZiAoY2hpbGQtPnB0cmFjZSkgewogCQljaGlsZC0+ZXhpdF9jb2RlID0gZGF0YTsKIAkJZGVhZCA9IF9fcHRyYWNlX2RldGFjaChjdXJyZW50LCBjaGlsZCk7Ci0JCWlmICghY2hpbGQtPmV4aXRfc3RhdGUpCi0JCQl3YWtlX3VwX3N0YXRlKGNoaWxkLCBUQVNLX1RSQUNFRCB8IFRBU0tfU1RPUFBFRCk7CiAJfQogCXdyaXRlX3VubG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOwogCkBAIC04NzksMyArOTI0LDE5IEBACiAJcmV0dXJuIHJldDsKIH0KICNlbmRpZgkvKiBDT05GSUdfQ09NUEFUICovCisKKyNpZmRlZiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UCitpbnQgcHRyYWNlX2dldF9icmVha3BvaW50cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlpZiAoYXRvbWljX2luY19ub3RfemVybygmdHNrLT5wdHJhY2VfYnBfcmVmY250KSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gLTE7Cit9CisKK3ZvaWQgcHRyYWNlX3B1dF9icmVha3BvaW50cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmdHNrLT5wdHJhY2VfYnBfcmVmY250KSkKKwkJZmx1c2hfcHRyYWNlX2h3X2JyZWFrcG9pbnQodHNrKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1cGRhdGUuYyBiL2tlcm5lbC9yY3VwZGF0ZS5jCmluZGV4IGYzMjQwZTkuLjc3ODRiZDIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3VwZGF0ZS5jCisrKyBiL2tlcm5lbC9yY3VwZGF0ZS5jCkBAIC0xNDIsMTAgKzE0MiwxNyBAQAogCQkgKiBFbnN1cmUgdGhhdCBxdWV1ZWQgY2FsbGJhY2tzIGFyZSBhbGwgZXhlY3V0ZWQuCiAJCSAqIElmIHdlIGRldGVjdCB0aGF0IHdlIGFyZSBuZXN0ZWQgaW4gYSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsCiAJCSAqIHNlY3Rpb24sIHdlIHNob3VsZCBzaW1wbHkgZmFpbCwgb3RoZXJ3aXNlIHdlIHdvdWxkIGRlYWRsb2NrLgorCQkgKiBJbiAhUFJFRU1QVCBjb25maWd1cmF0aW9ucywgdGhlcmUgaXMgbm8gd2F5IHRvIHRlbGwgaWYgd2UgYXJlCisJCSAqIGluIGEgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIG9yIG5vdCwgc28gd2UgbmV2ZXIKKwkJICogYXR0ZW1wdCBhbnkgZml4dXAgYW5kIGp1c3QgcHJpbnQgYSB3YXJuaW5nLgogCQkgKi8KKyNpZm5kZWYgQ09ORklHX1BSRUVNUFQKKwkJV0FSTl9PTl9PTkNFKDEpOworCQlyZXR1cm4gMDsKKyNlbmRpZgogCQlpZiAocmN1X3ByZWVtcHRfZGVwdGgoKSAhPSAwIHx8IHByZWVtcHRfY291bnQoKSAhPSAwIHx8CiAJCSAgICBpcnFzX2Rpc2FibGVkKCkpIHsKLQkJCVdBUk5fT04oMSk7CisJCQlXQVJOX09OX09OQ0UoMSk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlyY3VfYmFycmllcigpOwpAQCAtMTg0LDEwICsxOTEsMTcgQEAKIAkJICogRW5zdXJlIHRoYXQgcXVldWVkIGNhbGxiYWNrcyBhcmUgYWxsIGV4ZWN1dGVkLgogCQkgKiBJZiB3ZSBkZXRlY3QgdGhhdCB3ZSBhcmUgbmVzdGVkIGluIGEgUkNVIHJlYWQtc2lkZSBjcml0aWNhbAogCQkgKiBzZWN0aW9uLCB3ZSBzaG91bGQgc2ltcGx5IGZhaWwsIG90aGVyd2lzZSB3ZSB3b3VsZCBkZWFkbG9jay4KKwkJICogSW4gIVBSRUVNUFQgY29uZmlndXJhdGlvbnMsIHRoZXJlIGlzIG5vIHdheSB0byB0ZWxsIGlmIHdlIGFyZQorCQkgKiBpbiBhIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiBvciBub3QsIHNvIHdlIG5ldmVyCisJCSAqIGF0dGVtcHQgYW55IGZpeHVwIGFuZCBqdXN0IHByaW50IGEgd2FybmluZy4KIAkJICovCisjaWZuZGVmIENPTkZJR19QUkVFTVBUCisJCVdBUk5fT05fT05DRSgxKTsKKwkJcmV0dXJuIDA7CisjZW5kaWYKIAkJaWYgKHJjdV9wcmVlbXB0X2RlcHRoKCkgIT0gMCB8fCBwcmVlbXB0X2NvdW50KCkgIT0gMCB8fAogCQkgICAgaXJxc19kaXNhYmxlZCgpKSB7Ci0JCQlXQVJOX09OKDEpOworCQkJV0FSTl9PTl9PTkNFKDEpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJcmN1X2JhcnJpZXIoKTsKQEAgLTIxNCwxNSArMjI4LDE3IEBACiAJCSAqIEVuc3VyZSB0aGF0IHF1ZXVlZCBjYWxsYmFja3MgYXJlIGFsbCBleGVjdXRlZC4KIAkJICogSWYgd2UgZGV0ZWN0IHRoYXQgd2UgYXJlIG5lc3RlZCBpbiBhIFJDVSByZWFkLXNpZGUgY3JpdGljYWwKIAkJICogc2VjdGlvbiwgd2Ugc2hvdWxkIHNpbXBseSBmYWlsLCBvdGhlcndpc2Ugd2Ugd291bGQgZGVhZGxvY2suCi0JCSAqIE5vdGUgdGhhdCB0aGUgbWFjaGluZXJ5IHRvIHJlbGlhYmx5IGRldGVybWluZSB3aGV0aGVyCi0JCSAqIG9yIG5vdCB3ZSBhcmUgaW4gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uCi0JCSAqIGV4aXN0cyBvbmx5IGluIHRoZSBwcmVlbXB0aWJsZSBSQ1UgaW1wbGVtZW50YXRpb25zCi0JCSAqIChUSU5ZX1BSRUVNUFRfUkNVIGFuZCBUUkVFX1BSRUVNUFRfUkNVKSwgd2hpY2ggaXMgd2h5Ci0JCSAqIERFQlVHX09CSkVDVFNfUkNVX0hFQUQgaXMgZGlzYWxsb3dlZCBpZiAhUFJFRU1QVC4KKwkJICogSW4gIVBSRUVNUFQgY29uZmlndXJhdGlvbnMsIHRoZXJlIGlzIG5vIHdheSB0byB0ZWxsIGlmIHdlIGFyZQorCQkgKiBpbiBhIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiBvciBub3QsIHNvIHdlIG5ldmVyCisJCSAqIGF0dGVtcHQgYW55IGZpeHVwIGFuZCBqdXN0IHByaW50IGEgd2FybmluZy4KIAkJICovCisjaWZuZGVmIENPTkZJR19QUkVFTVBUCisJCVdBUk5fT05fT05DRSgxKTsKKwkJcmV0dXJuIDA7CisjZW5kaWYKIAkJaWYgKHJjdV9wcmVlbXB0X2RlcHRoKCkgIT0gMCB8fCBwcmVlbXB0X2NvdW50KCkgIT0gMCB8fAogCQkgICAgaXJxc19kaXNhYmxlZCgpKSB7Ci0JCQlXQVJOX09OKDEpOworCQkJV0FSTl9PTl9PTkNFKDEpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJcmN1X2JhcnJpZXIoKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0aW55LmMgYi9rZXJuZWwvcmN1dGlueS5jCmluZGV4IDBjMzQzYjkuLjdiYmFjN2QgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0aW55LmMKKysrIGIva2VybmVsL3JjdXRpbnkuYwpAQCAtMzUsMTUgKzM1LDE2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAvKiBDb250cm9scyBmb3IgcmN1X2t0aHJlYWQoKSBrdGhyZWFkLCByZXBsYWNpbmcgUkNVX1NPRlRJUlEgdXNlZCBwcmV2aW91c2x5LiAqLwogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqcmN1X2t0aHJlYWRfdGFzazsKIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChyY3Vfa3RocmVhZF93cSk7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBoYXZlX3JjdV9rdGhyZWFkX3dvcms7Ci1zdGF0aWMgdm9pZCBpbnZva2VfcmN1X2t0aHJlYWQodm9pZCk7CiAKIC8qIEZvcndhcmQgZGVjbGFyYXRpb25zIGZvciByY3V0aW55X3BsdWdpbi5oLiAqLwogc3RydWN0IHJjdV9jdHJsYmxrOworc3RhdGljIHZvaWQgaW52b2tlX3JjdV9rdGhyZWFkKHZvaWQpOwogc3RhdGljIHZvaWQgcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKHN0cnVjdCByY3VfY3RybGJsayAqcmNwKTsKIHN0YXRpYyBpbnQgcmN1X2t0aHJlYWQodm9pZCAqYXJnKTsKIHN0YXRpYyB2b2lkIF9fY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLApAQCAtNzksMzYgKzgwLDQ1IEBACiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19OT19IWiAqLwogCiAvKgotICogSGVscGVyIGZ1bmN0aW9uIGZvciByY3VfcXNjdHJfaW5jKCkgYW5kIHJjdV9iaF9xc2N0cl9pbmMoKS4KLSAqIEFsc28gZGlzYWJsZSBpcnFzIHRvIGF2b2lkIGNvbmZ1c2lvbiBkdWUgdG8gaW50ZXJydXB0IGhhbmRsZXJzCisgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHJjdV9zY2hlZF9xcygpIGFuZCByY3VfYmhfcXMoKS4KKyAqIEFsc28gaXJxcyBhcmUgZGlzYWJsZWQgdG8gYXZvaWQgY29uZnVzaW9uIGR1ZSB0byBpbnRlcnJ1cHQgaGFuZGxlcnMKICAqIGludm9raW5nIGNhbGxfcmN1KCkuCiAgKi8KIHN0YXRpYyBpbnQgcmN1X3FzY3RyX2hlbHAoc3RydWN0IHJjdV9jdHJsYmxrICpyY3ApCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlpZiAocmNwLT5yY3VjYmxpc3QgIT0gTlVMTCAmJgogCSAgICByY3AtPmRvbmV0YWlsICE9IHJjcC0+Y3VydGFpbCkgewogCQlyY3AtPmRvbmV0YWlsID0gcmNwLT5jdXJ0YWlsOwotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCXJldHVybiAxOwogCX0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KIAogLyoKKyAqIFdha2UgdXAgcmN1X2t0aHJlYWQoKSB0byBwcm9jZXNzIGNhbGxiYWNrcyBub3cgZWxpZ2libGUgZm9yIGludm9jYXRpb24KKyAqIG9yIHRvIGJvb3N0IHJlYWRlcnMuCisgKi8KK3N0YXRpYyB2b2lkIGludm9rZV9yY3Vfa3RocmVhZCh2b2lkKQoreworCWhhdmVfcmN1X2t0aHJlYWRfd29yayA9IDE7CisJd2FrZV91cCgmcmN1X2t0aHJlYWRfd3EpOworfQorCisvKgogICogUmVjb3JkIGFuIHJjdSBxdWllc2NlbnQgc3RhdGUuICBBbmQgYW4gcmN1X2JoIHF1aWVzY2VudCBzdGF0ZSB3aGlsZSB3ZQogICogYXJlIGF0IGl0LCBnaXZlbiB0aGF0IGFueSByY3UgcXVpZXNjZW50IHN0YXRlIGlzIGFsc28gYW4gcmN1X2JoCiAgKiBxdWllc2NlbnQgc3RhdGUuICBVc2UgIisiIGluc3RlYWQgb2YgInx8IiB0byBkZWZlYXQgc2hvcnQgY2lyY3VpdGluZy4KICAqLwogdm9pZCByY3Vfc2NoZWRfcXMoaW50IGNwdSkKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWlmIChyY3VfcXNjdHJfaGVscCgmcmN1X3NjaGVkX2N0cmxibGspICsKIAkgICAgcmN1X3FzY3RyX2hlbHAoJnJjdV9iaF9jdHJsYmxrKSkKIAkJaW52b2tlX3JjdV9rdGhyZWFkKCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCiAvKgpAQCAtMTE2LDggKzEyNiwxMiBAQAogICovCiB2b2lkIHJjdV9iaF9xcyhpbnQgY3B1KQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJaWYgKHJjdV9xc2N0cl9oZWxwKCZyY3VfYmhfY3RybGJsaykpCiAJCWludm9rZV9yY3Vfa3RocmVhZCgpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogLyoKQEAgLTE2Nyw3ICsxODEsNyBAQAogCQlwcmVmZXRjaChuZXh0KTsKIAkJZGVidWdfcmN1X2hlYWRfdW5xdWV1ZShsaXN0KTsKIAkJbG9jYWxfYmhfZGlzYWJsZSgpOwotCQlsaXN0LT5mdW5jKGxpc3QpOworCQlfX3JjdV9yZWNsYWltKGxpc3QpOwogCQlsb2NhbF9iaF9lbmFibGUoKTsKIAkJbGlzdCA9IG5leHQ7CiAJCVJDVV9UUkFDRShjYl9jb3VudCsrKTsKQEAgLTIwOCwyMCArMjIyLDYgQEAKIH0KIAogLyoKLSAqIFdha2UgdXAgcmN1X2t0aHJlYWQoKSB0byBwcm9jZXNzIGNhbGxiYWNrcyBub3cgZWxpZ2libGUgZm9yIGludm9jYXRpb24KLSAqIG9yIHRvIGJvb3N0IHJlYWRlcnMuCi0gKi8KLXN0YXRpYyB2b2lkIGludm9rZV9yY3Vfa3RocmVhZCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JaGF2ZV9yY3Vfa3RocmVhZF93b3JrID0gMTsKLQl3YWtlX3VwKCZyY3Vfa3RocmVhZF93cSk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0vKgogICogV2FpdCBmb3IgYSBncmFjZSBwZXJpb2QgdG8gZWxhcHNlLiAgQnV0IGl0IGlzIGlsbGVnYWwgdG8gaW52b2tlCiAgKiBzeW5jaHJvbml6ZV9zY2hlZCgpIGZyb20gd2l0aGluIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KICAqIFRoZXJlZm9yZSwgYW55IGxlZ2FsIGNhbGwgdG8gc3luY2hyb25pemVfc2NoZWQoKSBpcyBhIHF1aWVzY2VudApkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRpbnlfcGx1Z2luLmggYi9rZXJuZWwvcmN1dGlueV9wbHVnaW4uaAppbmRleCAzY2I4ZTM2Li5mMjU5YzY3IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dGlueV9wbHVnaW4uaAorKysgYi9rZXJuZWwvcmN1dGlueV9wbHVnaW4uaApAQCAtMTAwLDIzICsxMDAsMjggQEAKIAl1OCBjb21wbGV0ZWQ7CQkvKiBMYXN0IGdyYWNlIHBlcmlvZCBjb21wbGV0ZWQuICovCiAJCQkJLyogIElmIGFsbCB0aHJlZSBhcmUgZXF1YWwsIFJDVSBpcyBpZGxlLiAqLwogI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QKLQlzOCBib29zdGVkX3RoaXNfZ3A7CS8qIEhhcyBib29zdGluZyBhbHJlYWR5IGhhcHBlbmVkPyAqLwogCXVuc2lnbmVkIGxvbmcgYm9vc3RfdGltZTsgLyogV2hlbiB0byBzdGFydCBib29zdGluZyAoamlmZmllcykgKi8KICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9CT09TVCAqLwogI2lmZGVmIENPTkZJR19SQ1VfVFJBQ0UKIAl1bnNpZ25lZCBsb25nIG5fZ3JhY2VfcGVyaW9kczsKICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUCiAJdW5zaWduZWQgbG9uZyBuX3Rhc2tzX2Jvb3N0ZWQ7CisJCQkJLyogVG90YWwgbnVtYmVyIG9mIHRhc2tzIGJvb3N0ZWQuICovCiAJdW5zaWduZWQgbG9uZyBuX2V4cF9ib29zdHM7CisJCQkJLyogTnVtYmVyIG9mIHRhc2tzIGJvb3N0ZWQgZm9yIGV4cGVkaXRlZCBHUC4gKi8KIAl1bnNpZ25lZCBsb25nIG5fbm9ybWFsX2Jvb3N0czsKLQl1bnNpZ25lZCBsb25nIG5fbm9ybWFsX2JhbGtfYmxrZF90YXNrczsKLQl1bnNpZ25lZCBsb25nIG5fbm9ybWFsX2JhbGtfZ3BfdGFza3M7Ci0JdW5zaWduZWQgbG9uZyBuX25vcm1hbF9iYWxrX2Jvb3N0X3Rhc2tzOwotCXVuc2lnbmVkIGxvbmcgbl9ub3JtYWxfYmFsa19ib29zdGVkOwotCXVuc2lnbmVkIGxvbmcgbl9ub3JtYWxfYmFsa19ub3R5ZXQ7Ci0JdW5zaWduZWQgbG9uZyBuX25vcm1hbF9iYWxrX25vczsKLQl1bnNpZ25lZCBsb25nIG5fZXhwX2JhbGtfYmxrZF90YXNrczsKLQl1bnNpZ25lZCBsb25nIG5fZXhwX2JhbGtfbm9zOworCQkJCS8qIE51bWJlciBvZiB0YXNrcyBib29zdGVkIGZvciBub3JtYWwgR1AuICovCisJdW5zaWduZWQgbG9uZyBuX2JhbGtfYmxrZF90YXNrczsKKwkJCQkvKiBSZWZ1c2VkIHRvIGJvb3N0OiBubyBibG9ja2VkIHRhc2tzLiAqLworCXVuc2lnbmVkIGxvbmcgbl9iYWxrX2V4cF9ncF90YXNrczsKKwkJCQkvKiBSZWZ1c2VkIHRvIGJvb3N0OiBub3RoaW5nIGJsb2NraW5nIEdQLiAqLworCXVuc2lnbmVkIGxvbmcgbl9iYWxrX2Jvb3N0X3Rhc2tzOworCQkJCS8qIFJlZnVzZWQgdG8gYm9vc3Q6IGFscmVhZHkgYm9vc3RpbmcuICovCisJdW5zaWduZWQgbG9uZyBuX2JhbGtfbm90eWV0OworCQkJCS8qIFJlZnVzZWQgdG8gYm9vc3Q6IG5vdCB5ZXQgdGltZS4gKi8KKwl1bnNpZ25lZCBsb25nIG5fYmFsa19ub3M7CisJCQkJLyogUmVmdXNlZCB0byBib29zdDogbm90IHN1cmUgd2h5LCB0aG91Z2guICovCisJCQkJLyogIFRoaXMgY2FuIGhhcHBlbiBkdWUgdG8gcmFjZSBjb25kaXRpb25zLiAqLwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUICovCiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfVFJBQ0UgKi8KIH07CkBAIC0yMDEsNyArMjA2LDYgQEAKIAogI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QKIHN0YXRpYyB2b2lkIHJjdV9pbml0aWF0ZV9ib29zdF90cmFjZSh2b2lkKTsKLXN0YXRpYyB2b2lkIHJjdV9pbml0aWF0ZV9leHBfYm9vc3RfdHJhY2Uodm9pZCk7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QgKi8KIAogLyoKQEAgLTIxOSw0MSArMjIzLDIxIEBACiAJCSAgICJOLiJbIXJjdV9wcmVlbXB0X2N0cmxibGsuZ3BfdGFza3NdLAogCQkgICAiRS4iWyFyY3VfcHJlZW1wdF9jdHJsYmxrLmV4cF90YXNrc10pOwogI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QKLQlzZXFfcHJpbnRmKG0sICIgICAgICAgICAgICAgdHRiPSVjIGJ0Zz0iLAotCQkgICAiQi4iWyFyY3VfcHJlZW1wdF9jdHJsYmxrLmJvb3N0X3Rhc2tzXSk7Ci0Jc3dpdGNoIChyY3VfcHJlZW1wdF9jdHJsYmxrLmJvb3N0ZWRfdGhpc19ncCkgewotCWNhc2UgLTE6Ci0JCXNlcV9wdXRzKG0sICJleHAiKTsKLQkJYnJlYWs7Ci0JY2FzZSAwOgotCQlzZXFfcHV0cyhtLCAibm8iKTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlzZXFfcHV0cyhtLCAiYmVndW4iKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlzZXFfcHV0cyhtLCAiZG9uZSIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlzZXFfcHJpbnRmKG0sICI/JWQ/IiwgcmN1X3ByZWVtcHRfY3RybGJsay5ib29zdGVkX3RoaXNfZ3ApOwotCX0KLQlzZXFfcHJpbnRmKG0sICIgbnRiPSVsdSBuZWI9JWx1IG5uYj0lbHUgaj0lMDR4IGJ0PSUwNHhcbiIsCisJc2VxX3ByaW50ZihtLCAiJXN0dGI9JWMgbnRiPSVsdSBuZWI9JWx1IG5uYj0lbHUgaj0lMDR4IGJ0PSUwNHhcbiIsCisJCSAgICIgICAgICAgICAgICAgIiwKKwkJICAgIkIuIlshcmN1X3ByZWVtcHRfY3RybGJsay5ib29zdF90YXNrc10sCiAJCSAgIHJjdV9wcmVlbXB0X2N0cmxibGsubl90YXNrc19ib29zdGVkLAogCQkgICByY3VfcHJlZW1wdF9jdHJsYmxrLm5fZXhwX2Jvb3N0cywKIAkJICAgcmN1X3ByZWVtcHRfY3RybGJsay5uX25vcm1hbF9ib29zdHMsCiAJCSAgIChpbnQpKGppZmZpZXMgJiAweGZmZmYpLAogCQkgICAoaW50KShyY3VfcHJlZW1wdF9jdHJsYmxrLmJvb3N0X3RpbWUgJiAweGZmZmYpKTsKLQlzZXFfcHJpbnRmKG0sICIgICAgICAgICAgICAgJXM6IG50PSVsdSBndD0lbHUgYnQ9JWx1IGI9JWx1IG55PSVsdSBub3M9JWx1XG4iLAotCQkgICAibm9ybWFsIGJhbGsiLAotCQkgICByY3VfcHJlZW1wdF9jdHJsYmxrLm5fbm9ybWFsX2JhbGtfYmxrZF90YXNrcywKLQkJICAgcmN1X3ByZWVtcHRfY3RybGJsay5uX25vcm1hbF9iYWxrX2dwX3Rhc2tzLAotCQkgICByY3VfcHJlZW1wdF9jdHJsYmxrLm5fbm9ybWFsX2JhbGtfYm9vc3RfdGFza3MsCi0JCSAgIHJjdV9wcmVlbXB0X2N0cmxibGsubl9ub3JtYWxfYmFsa19ib29zdGVkLAotCQkgICByY3VfcHJlZW1wdF9jdHJsYmxrLm5fbm9ybWFsX2JhbGtfbm90eWV0LAotCQkgICByY3VfcHJlZW1wdF9jdHJsYmxrLm5fbm9ybWFsX2JhbGtfbm9zKTsKLQlzZXFfcHJpbnRmKG0sICIgICAgICAgICAgICAgZXhwIGJhbGs6IGJ0PSVsdSBub3M9JWx1XG4iLAotCQkgICByY3VfcHJlZW1wdF9jdHJsYmxrLm5fZXhwX2JhbGtfYmxrZF90YXNrcywKLQkJICAgcmN1X3ByZWVtcHRfY3RybGJsay5uX2V4cF9iYWxrX25vcyk7CisJc2VxX3ByaW50ZihtLCAiJXM6IG50PSVsdSBlZ3Q9JWx1IGJ0PSVsdSBueT0lbHUgbm9zPSVsdVxuIiwKKwkJICAgIiAgICAgICAgICAgICBiYWxrIiwKKwkJICAgcmN1X3ByZWVtcHRfY3RybGJsay5uX2JhbGtfYmxrZF90YXNrcywKKwkJICAgcmN1X3ByZWVtcHRfY3RybGJsay5uX2JhbGtfZXhwX2dwX3Rhc2tzLAorCQkgICByY3VfcHJlZW1wdF9jdHJsYmxrLm5fYmFsa19ib29zdF90YXNrcywKKwkJICAgcmN1X3ByZWVtcHRfY3RybGJsay5uX2JhbGtfbm90eWV0LAorCQkgICByY3VfcHJlZW1wdF9jdHJsYmxrLm5fYmFsa19ub3MpOwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUICovCiB9CiAKQEAgLTI3MSwyNSArMjU1LDU5IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcnRfbXV0ZXggbXR4OwotCXN0cnVjdCBsaXN0X2hlYWQgKm5wOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0YjsKIAotCWlmIChyY3VfcHJlZW1wdF9jdHJsYmxrLmJvb3N0X3Rhc2tzID09IE5VTEwpCisJaWYgKHJjdV9wcmVlbXB0X2N0cmxibGsuYm9vc3RfdGFza3MgPT0gTlVMTCAmJgorCSAgICByY3VfcHJlZW1wdF9jdHJsYmxrLmV4cF90YXNrcyA9PSBOVUxMKQogCQlyZXR1cm4gMDsgIC8qIE5vdGhpbmcgdG8gYm9vc3QuICovCisKIAlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXJjdV9wcmVlbXB0X2N0cmxibGsuYm9vc3RlZF90aGlzX2dwKys7Ci0JdCA9IGNvbnRhaW5lcl9vZihyY3VfcHJlZW1wdF9jdHJsYmxrLmJvb3N0X3Rhc2tzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsCi0JCQkgcmN1X25vZGVfZW50cnkpOwotCW5wID0gcmN1X25leHRfbm9kZV9lbnRyeSh0KTsKKworCS8qCisJICogUmVjaGVjayB3aXRoIGlycXMgZGlzYWJsZWQ6IGFsbCB0YXNrcyBpbiBuZWVkIG9mIGJvb3N0aW5nCisJICogbWlnaHQgZXhpdCB0aGVpciBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIG9uIHRoZWlyIG93bgorCSAqIGlmIHdlIGFyZSBwcmVlbXB0ZWQganVzdCBiZWZvcmUgZGlzYWJsaW5nIGlycXMuCisJICovCisJaWYgKHJjdV9wcmVlbXB0X2N0cmxibGsuYm9vc3RfdGFza3MgPT0gTlVMTCAmJgorCSAgICByY3VfcHJlZW1wdF9jdHJsYmxrLmV4cF90YXNrcyA9PSBOVUxMKSB7CisJCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogUHJlZmVyZW50aWFsbHkgYm9vc3QgdGFza3MgYmxvY2tpbmcgZXhwZWRpdGVkIGdyYWNlIHBlcmlvZHMuCisJICogVGhpcyBjYW5ub3Qgc3RhcnZlIHRoZSBub3JtYWwgZ3JhY2UgcGVyaW9kcyBiZWNhdXNlIGEgc2Vjb25kCisJICogZXhwZWRpdGVkIGdyYWNlIHBlcmlvZCBtdXN0IGJvb3N0IGFsbCBibG9ja2VkIHRhc2tzLCBpbmNsdWRpbmcKKwkgKiB0aG9zZSBibG9ja2luZyB0aGUgcHJlLWV4aXN0aW5nIG5vcm1hbCBncmFjZSBwZXJpb2QuCisJICovCisJaWYgKHJjdV9wcmVlbXB0X2N0cmxibGsuZXhwX3Rhc2tzICE9IE5VTEwpIHsKKwkJdGIgPSByY3VfcHJlZW1wdF9jdHJsYmxrLmV4cF90YXNrczsKKwkJUkNVX1RSQUNFKHJjdV9wcmVlbXB0X2N0cmxibGsubl9leHBfYm9vc3RzKyspOworCX0gZWxzZSB7CisJCXRiID0gcmN1X3ByZWVtcHRfY3RybGJsay5ib29zdF90YXNrczsKKwkJUkNVX1RSQUNFKHJjdV9wcmVlbXB0X2N0cmxibGsubl9ub3JtYWxfYm9vc3RzKyspOworCX0KKwlSQ1VfVFJBQ0UocmN1X3ByZWVtcHRfY3RybGJsay5uX3Rhc2tzX2Jvb3N0ZWQrKyk7CisKKwkvKgorCSAqIFdlIGJvb3N0IHRhc2sgdCBieSBtYW51ZmFjdHVyaW5nIGFuIHJ0X211dGV4IHRoYXQgYXBwZWFycyB0bworCSAqIGJlIGhlbGQgYnkgdGFzayB0LiAgV2UgbGVhdmUgYSBwb2ludGVyIHRvIHRoYXQgcnRfbXV0ZXggd2hlcmUKKwkgKiB0YXNrIHQgY2FuIGZpbmQgaXQsIGFuZCB0YXNrIHQgd2lsbCByZWxlYXNlIHRoZSBtdXRleCB3aGVuIGl0CisJICogZXhpdHMgaXRzIG91dGVybW9zdCBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICBUaGVuCisJICogc2ltcGx5IGFjcXVpcmluZyB0aGlzIGFydGlmaWNpYWwgcnRfbXV0ZXggd2lsbCBib29zdCB0YXNrCisJICogdCdzIHByaW9yaXR5LiAgKFRoYW5rcyB0byB0Z2x4IGZvciBzdWdnZXN0aW5nIHRoaXMgYXBwcm9hY2ghKQorCSAqLworCXQgPSBjb250YWluZXJfb2YodGIsIHN0cnVjdCB0YXNrX3N0cnVjdCwgcmN1X25vZGVfZW50cnkpOwogCXJ0X211dGV4X2luaXRfcHJveHlfbG9ja2VkKCZtdHgsIHQpOwogCXQtPnJjdV9ib29zdF9tdXRleCA9ICZtdHg7CiAJdC0+cmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwgfD0gUkNVX1JFQURfVU5MT0NLX0JPT1NURUQ7CiAJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlydF9tdXRleF9sb2NrKCZtdHgpOwotCVJDVV9UUkFDRShyY3VfcHJlZW1wdF9jdHJsYmxrLm5fdGFza3NfYm9vc3RlZCsrKTsKLQlyY3VfcHJlZW1wdF9jdHJsYmxrLmJvb3N0ZWRfdGhpc19ncCsrOwotCXJ0X211dGV4X3VubG9jaygmbXR4KTsKLQlyZXR1cm4gcmN1X3ByZWVtcHRfY3RybGJsay5ib29zdF90YXNrcyAhPSBOVUxMOworCXJ0X211dGV4X3VubG9jaygmbXR4KTsgIC8qIEtlZXAgbG9ja2RlcCBoYXBweS4gKi8KKworCXJldHVybiByY3VfcHJlZW1wdF9jdHJsYmxrLmJvb3N0X3Rhc2tzICE9IE5VTEwgfHwKKwkgICAgICAgcmN1X3ByZWVtcHRfY3RybGJsay5leHBfdGFza3MgIT0gTlVMTDsKIH0KIAogLyoKQEAgLTMwNCw0MiArMzIyLDI1IEBACiAgKi8KIHN0YXRpYyBpbnQgcmN1X2luaXRpYXRlX2Jvb3N0KHZvaWQpCiB7Ci0JaWYgKCFyY3VfcHJlZW1wdF9ibG9ja2VkX3JlYWRlcnNfY2dwKCkpIHsKLQkJUkNVX1RSQUNFKHJjdV9wcmVlbXB0X2N0cmxibGsubl9ub3JtYWxfYmFsa19ibGtkX3Rhc2tzKyspOworCWlmICghcmN1X3ByZWVtcHRfYmxvY2tlZF9yZWFkZXJzX2NncCgpICYmCisJICAgIHJjdV9wcmVlbXB0X2N0cmxibGsuZXhwX3Rhc2tzID09IE5VTEwpIHsKKwkJUkNVX1RSQUNFKHJjdV9wcmVlbXB0X2N0cmxibGsubl9iYWxrX2V4cF9ncF90YXNrcysrKTsKIAkJcmV0dXJuIDA7CiAJfQotCWlmIChyY3VfcHJlZW1wdF9jdHJsYmxrLmdwX3Rhc2tzICE9IE5VTEwgJiYKLQkgICAgcmN1X3ByZWVtcHRfY3RybGJsay5ib29zdF90YXNrcyA9PSBOVUxMICYmCi0JICAgIHJjdV9wcmVlbXB0X2N0cmxibGsuYm9vc3RlZF90aGlzX2dwID09IDAgJiYKLQkgICAgVUxPTkdfQ01QX0dFKGppZmZpZXMsIHJjdV9wcmVlbXB0X2N0cmxibGsuYm9vc3RfdGltZSkpIHsKLQkJcmN1X3ByZWVtcHRfY3RybGJsay5ib29zdF90YXNrcyA9IHJjdV9wcmVlbXB0X2N0cmxibGsuZ3BfdGFza3M7CisJaWYgKHJjdV9wcmVlbXB0X2N0cmxibGsuZXhwX3Rhc2tzICE9IE5VTEwgfHwKKwkgICAgKHJjdV9wcmVlbXB0X2N0cmxibGsuZ3BfdGFza3MgIT0gTlVMTCAmJgorCSAgICAgcmN1X3ByZWVtcHRfY3RybGJsay5ib29zdF90YXNrcyA9PSBOVUxMICYmCisJICAgICBVTE9OR19DTVBfR0UoamlmZmllcywgcmN1X3ByZWVtcHRfY3RybGJsay5ib29zdF90aW1lKSkpIHsKKwkJaWYgKHJjdV9wcmVlbXB0X2N0cmxibGsuZXhwX3Rhc2tzID09IE5VTEwpCisJCQlyY3VfcHJlZW1wdF9jdHJsYmxrLmJvb3N0X3Rhc2tzID0KKwkJCQlyY3VfcHJlZW1wdF9jdHJsYmxrLmdwX3Rhc2tzOwogCQlpbnZva2VfcmN1X2t0aHJlYWQoKTsKLQkJUkNVX1RSQUNFKHJjdV9wcmVlbXB0X2N0cmxibGsubl9ub3JtYWxfYm9vc3RzKyspOwogCX0gZWxzZQogCQlSQ1VfVFJBQ0UocmN1X2luaXRpYXRlX2Jvb3N0X3RyYWNlKCkpOwogCXJldHVybiAxOwogfQogCi0vKgotICogSW5pdGlhdGUgYm9vc3RpbmcgZm9yIGFuIGV4cGVkaXRlZCBncmFjZSBwZXJpb2QuCi0gKi8KLXN0YXRpYyB2b2lkIHJjdV9pbml0aWF0ZV9leHBlZGl0ZWRfYm9vc3Qodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlpZiAoIWxpc3RfZW1wdHkoJnJjdV9wcmVlbXB0X2N0cmxibGsuYmxrZF90YXNrcykpIHsKLQkJcmN1X3ByZWVtcHRfY3RybGJsay5ib29zdF90YXNrcyA9Ci0JCQlyY3VfcHJlZW1wdF9jdHJsYmxrLmJsa2RfdGFza3MubmV4dDsKLQkJcmN1X3ByZWVtcHRfY3RybGJsay5ib29zdGVkX3RoaXNfZ3AgPSAtMTsKLQkJaW52b2tlX3JjdV9rdGhyZWFkKCk7Ci0JCVJDVV9UUkFDRShyY3VfcHJlZW1wdF9jdHJsYmxrLm5fZXhwX2Jvb3N0cysrKTsKLQl9IGVsc2UKLQkJUkNVX1RSQUNFKHJjdV9pbml0aWF0ZV9leHBfYm9vc3RfdHJhY2UoKSk7Ci0JcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotI2RlZmluZSBSQ1VfQk9PU1RfREVMQVlfSklGRklFUyBESVZfUk9VTkRfVVAoQ09ORklHX1JDVV9CT09TVF9ERUxBWSAqIEhaLCAxMDAwKTsKKyNkZWZpbmUgUkNVX0JPT1NUX0RFTEFZX0pJRkZJRVMgRElWX1JPVU5EX1VQKENPTkZJR19SQ1VfQk9PU1RfREVMQVkgKiBIWiwgMTAwMCkKIAogLyoKICAqIERvIHByaW9yaXR5LWJvb3N0IGFjY291bnRpbmcgZm9yIHRoZSBzdGFydCBvZiBhIG5ldyBncmFjZSBwZXJpb2QuCkBAIC0zNDcsOCArMzQ4LDYgQEAKIHN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X2Jvb3N0X3N0YXJ0X2dwKHZvaWQpCiB7CiAJcmN1X3ByZWVtcHRfY3RybGJsay5ib29zdF90aW1lID0gamlmZmllcyArIFJDVV9CT09TVF9ERUxBWV9KSUZGSUVTOwotCWlmIChyY3VfcHJlZW1wdF9jdHJsYmxrLmJvb3N0ZWRfdGhpc19ncCA+IDApCi0JCXJjdV9wcmVlbXB0X2N0cmxibGsuYm9vc3RlZF90aGlzX2dwID0gMDsKIH0KIAogI2Vsc2UgLyogI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QgKi8KQEAgLTM3MiwxMyArMzcxLDYgQEAKIH0KIAogLyoKLSAqIElmIHRoZXJlIGlzIG5vIFJDVSBwcmlvcml0eSBib29zdGluZywgd2UgZG9uJ3QgaW5pdGlhdGUgZXhwZWRpdGVkIGJvb3N0aW5nLgotICovCi1zdGF0aWMgdm9pZCByY3VfaW5pdGlhdGVfZXhwZWRpdGVkX2Jvb3N0KHZvaWQpCi17Ci19Ci0KLS8qCiAgKiBJZiB0aGVyZSBpcyBubyBSQ1UgcHJpb3JpdHkgYm9vc3RpbmcsIG5vdGhpbmcgdG8gZG8gYXQgZ3JhY2UtcGVyaW9kIHN0YXJ0LgogICovCiBzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9ib29zdF9zdGFydF9ncCh2b2lkKQpAQCAtNDE4LDcgKzQxMCw3IEBACiAJaWYgKCFyY3VfcHJlZW1wdF9ncF9pbl9wcm9ncmVzcygpKQogCQlyZXR1cm47CiAJLyoKLQkgKiBDaGVjayB1cCBvbiBib29zdGluZy4gIElmIHRoZXJlIGFyZSBubyByZWFkZXJzIGJsb2NraW5nIHRoZQorCSAqIENoZWNrIHVwIG9uIGJvb3N0aW5nLiAgSWYgdGhlcmUgYXJlIHJlYWRlcnMgYmxvY2tpbmcgdGhlCiAJICogY3VycmVudCBncmFjZSBwZXJpb2QsIGxlYXZlLgogCSAqLwogCWlmIChyY3VfaW5pdGlhdGVfYm9vc3QoKSkKQEAgLTU3OCw3ICs1NzAsNyBAQAogCQllbXB0eSA9ICFyY3VfcHJlZW1wdF9ibG9ja2VkX3JlYWRlcnNfY2dwKCk7CiAJCWVtcHR5X2V4cCA9IHJjdV9wcmVlbXB0X2N0cmxibGsuZXhwX3Rhc2tzID09IE5VTEw7CiAJCW5wID0gcmN1X25leHRfbm9kZV9lbnRyeSh0KTsKLQkJbGlzdF9kZWwoJnQtPnJjdV9ub2RlX2VudHJ5KTsKKwkJbGlzdF9kZWxfaW5pdCgmdC0+cmN1X25vZGVfZW50cnkpOwogCQlpZiAoJnQtPnJjdV9ub2RlX2VudHJ5ID09IHJjdV9wcmVlbXB0X2N0cmxibGsuZ3BfdGFza3MpCiAJCQlyY3VfcHJlZW1wdF9jdHJsYmxrLmdwX3Rhc2tzID0gbnA7CiAJCWlmICgmdC0+cmN1X25vZGVfZW50cnkgPT0gcmN1X3ByZWVtcHRfY3RybGJsay5leHBfdGFza3MpCkBAIC01ODcsNyArNTc5LDYgQEAKIAkJaWYgKCZ0LT5yY3Vfbm9kZV9lbnRyeSA9PSByY3VfcHJlZW1wdF9jdHJsYmxrLmJvb3N0X3Rhc2tzKQogCQkJcmN1X3ByZWVtcHRfY3RybGJsay5ib29zdF90YXNrcyA9IG5wOwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUICovCi0JCUlOSVRfTElTVF9IRUFEKCZ0LT5yY3Vfbm9kZV9lbnRyeSk7CiAKIAkJLyoKIAkJICogSWYgdGhpcyB3YXMgdGhlIGxhc3QgdGFzayBvbiB0aGUgY3VycmVudCBsaXN0LCBhbmQgaWYKQEAgLTgxMiwxMyArODAzLDE2IEBACiAJcnBjcC0+ZXhwX3Rhc2tzID0gcnBjcC0+YmxrZF90YXNrcy5uZXh0OwogCWlmIChycGNwLT5leHBfdGFza3MgPT0gJnJwY3AtPmJsa2RfdGFza3MpCiAJCXJwY3AtPmV4cF90YXNrcyA9IE5VTEw7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJLyogV2FpdCBmb3IgdGFpbCBvZiAtPmJsa2RfdGFza3MgbGlzdCB0byBkcmFpbi4gKi8KLQlpZiAocmN1X3ByZWVtcHRlZF9yZWFkZXJzX2V4cCgpKQotCQlyY3VfaW5pdGlhdGVfZXhwZWRpdGVkX2Jvb3N0KCk7CisJaWYgKCFyY3VfcHJlZW1wdGVkX3JlYWRlcnNfZXhwKCkpCisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwllbHNlIHsKKwkJcmN1X2luaXRpYXRlX2Jvb3N0KCk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJd2FpdF9ldmVudChzeW5jX3JjdV9wcmVlbXB0X2V4cF93cSwKIAkJCSAgICFyY3VfcHJlZW1wdGVkX3JlYWRlcnNfZXhwKCkpOworCX0KIAogCS8qIENsZWFuIHVwIGFuZCBleGl0LiAqLwogCWJhcnJpZXIoKTsgLyogZW5zdXJlIGV4cGVkaXRlZCBHUCBzZWVuIGJlZm9yZSBjb3VudGVyIGluY3JlbWVudC4gKi8KQEAgLTkzMSwyNCArOTI1LDE3IEBACiAKIHN0YXRpYyB2b2lkIHJjdV9pbml0aWF0ZV9ib29zdF90cmFjZSh2b2lkKQogewotCWlmIChyY3VfcHJlZW1wdF9jdHJsYmxrLmdwX3Rhc2tzID09IE5VTEwpCi0JCXJjdV9wcmVlbXB0X2N0cmxibGsubl9ub3JtYWxfYmFsa19ncF90YXNrcysrOwotCWVsc2UgaWYgKHJjdV9wcmVlbXB0X2N0cmxibGsuYm9vc3RfdGFza3MgIT0gTlVMTCkKLQkJcmN1X3ByZWVtcHRfY3RybGJsay5uX25vcm1hbF9iYWxrX2Jvb3N0X3Rhc2tzKys7Ci0JZWxzZSBpZiAocmN1X3ByZWVtcHRfY3RybGJsay5ib29zdGVkX3RoaXNfZ3AgIT0gMCkKLQkJcmN1X3ByZWVtcHRfY3RybGJsay5uX25vcm1hbF9iYWxrX2Jvb3N0ZWQrKzsKLQllbHNlIGlmICghVUxPTkdfQ01QX0dFKGppZmZpZXMsIHJjdV9wcmVlbXB0X2N0cmxibGsuYm9vc3RfdGltZSkpCi0JCXJjdV9wcmVlbXB0X2N0cmxibGsubl9ub3JtYWxfYmFsa19ub3R5ZXQrKzsKLQllbHNlCi0JCXJjdV9wcmVlbXB0X2N0cmxibGsubl9ub3JtYWxfYmFsa19ub3MrKzsKLX0KLQotc3RhdGljIHZvaWQgcmN1X2luaXRpYXRlX2V4cF9ib29zdF90cmFjZSh2b2lkKQotewogCWlmIChsaXN0X2VtcHR5KCZyY3VfcHJlZW1wdF9jdHJsYmxrLmJsa2RfdGFza3MpKQotCQlyY3VfcHJlZW1wdF9jdHJsYmxrLm5fZXhwX2JhbGtfYmxrZF90YXNrcysrOworCQlyY3VfcHJlZW1wdF9jdHJsYmxrLm5fYmFsa19ibGtkX3Rhc2tzKys7CisJZWxzZSBpZiAocmN1X3ByZWVtcHRfY3RybGJsay5ncF90YXNrcyA9PSBOVUxMICYmCisJCSByY3VfcHJlZW1wdF9jdHJsYmxrLmV4cF90YXNrcyA9PSBOVUxMKQorCQlyY3VfcHJlZW1wdF9jdHJsYmxrLm5fYmFsa19leHBfZ3BfdGFza3MrKzsKKwllbHNlIGlmIChyY3VfcHJlZW1wdF9jdHJsYmxrLmJvb3N0X3Rhc2tzICE9IE5VTEwpCisJCXJjdV9wcmVlbXB0X2N0cmxibGsubl9iYWxrX2Jvb3N0X3Rhc2tzKys7CisJZWxzZSBpZiAoIVVMT05HX0NNUF9HRShqaWZmaWVzLCByY3VfcHJlZW1wdF9jdHJsYmxrLmJvb3N0X3RpbWUpKQorCQlyY3VfcHJlZW1wdF9jdHJsYmxrLm5fYmFsa19ub3R5ZXQrKzsKIAllbHNlCi0JCXJjdV9wcmVlbXB0X2N0cmxibGsubl9leHBfYmFsa19ub3MrKzsKKwkJcmN1X3ByZWVtcHRfY3RybGJsay5uX2JhbGtfbm9zKys7CiB9CiAKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9CT09TVCAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRvcnR1cmUuYyBiL2tlcm5lbC9yY3V0b3J0dXJlLmMKaW5kZXggYzIyNGRhNC4uMmUxMzhkYiAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRvcnR1cmUuYworKysgYi9rZXJuZWwvcmN1dG9ydHVyZS5jCkBAIC0xMzEsNyArMTMxLDcgQEAKIAogc3RhdGljIExJU1RfSEVBRChyY3VfdG9ydHVyZV9mcmVlbGlzdCk7CiBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlIF9fcmN1ICpyY3VfdG9ydHVyZV9jdXJyZW50Owotc3RhdGljIGxvbmcgcmN1X3RvcnR1cmVfY3VycmVudF92ZXJzaW9uOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmN1X3RvcnR1cmVfY3VycmVudF92ZXJzaW9uOwogc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZSByY3VfdG9ydHVyZXNbMTAgKiBSQ1VfVE9SVFVSRV9QSVBFX0xFTl07CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJjdV90b3J0dXJlX2xvY2spOwogc3RhdGljIERFRklORV9QRVJfQ1BVKGxvbmcgW1JDVV9UT1JUVVJFX1BJUEVfTEVOICsgMV0sIHJjdV90b3J0dXJlX2NvdW50KSA9CkBAIC0xNDYsOCArMTQ2LDYgQEAKIHN0YXRpYyBhdG9taWNfdCBuX3JjdV90b3J0dXJlX2Vycm9yOwogc3RhdGljIGxvbmcgbl9yY3VfdG9ydHVyZV9ib29zdF9rdHJlcnJvcjsKIHN0YXRpYyBsb25nIG5fcmN1X3RvcnR1cmVfYm9vc3RfcnRlcnJvcjsKLXN0YXRpYyBsb25nIG5fcmN1X3RvcnR1cmVfYm9vc3RfYWxsb2NlcnJvcjsKLXN0YXRpYyBsb25nIG5fcmN1X3RvcnR1cmVfYm9vc3RfYWZmZXJyb3I7CiBzdGF0aWMgbG9uZyBuX3JjdV90b3J0dXJlX2Jvb3N0X2ZhaWx1cmU7CiBzdGF0aWMgbG9uZyBuX3JjdV90b3J0dXJlX2Jvb3N0czsKIHN0YXRpYyBsb25nIG5fcmN1X3RvcnR1cmVfdGltZXJzOwpAQCAtMTYzLDExICsxNjEsMTEgQEAKICNlbmRpZgogaW50IHJjdXRvcnR1cmVfcnVubmFibGUgPSBSQ1VUT1JUVVJFX1JVTk5BQkxFX0lOSVQ7CiAKLSNpZmRlZiBDT05GSUdfUkNVX0JPT1NUCisjaWYgZGVmaW5lZChDT05GSUdfUkNVX0JPT1NUKSAmJiAhZGVmaW5lZChDT05GSUdfSE9UUExVR19DUFUpCiAjZGVmaW5lIHJjdV9jYW5fYm9vc3QoKSAxCi0jZWxzZSAvKiAjaWZkZWYgQ09ORklHX1JDVV9CT09TVCAqLworI2Vsc2UgLyogI2lmIGRlZmluZWQoQ09ORklHX1JDVV9CT09TVCkgJiYgIWRlZmluZWQoQ09ORklHX0hPVFBMVUdfQ1BVKSAqLwogI2RlZmluZSByY3VfY2FuX2Jvb3N0KCkgMAotI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUICovCisjZW5kaWYgLyogI2Vsc2UgI2lmIGRlZmluZWQoQ09ORklHX1JDVV9CT09TVCkgJiYgIWRlZmluZWQoQ09ORklHX0hPVFBMVUdfQ1BVKSAqLwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBib29zdF9zdGFydHRpbWU7CS8qIGppZmZpZXMgb2YgbmV4dCBib29zdCB0ZXN0IHN0YXJ0LiAqLwogREVGSU5FX01VVEVYKGJvb3N0X211dGV4KTsJCS8qIHByb3RlY3Qgc2V0dGluZyBib29zdF9zdGFydHRpbWUgKi8KQEAgLTc1MSw2ICs3NDksNyBAQAogCQluX3JjdV90b3J0dXJlX2Jvb3N0X3J0ZXJyb3IrKzsKIAl9CiAKKwlpbml0X3JjdV9oZWFkX29uX3N0YWNrKCZyYmkucmN1KTsKIAkvKiBFYWNoIHBhc3MgdGhyb3VnaCB0aGUgZm9sbG93aW5nIGxvb3AgZG9lcyBvbmUgYm9vc3QtdGVzdCBjeWNsZS4gKi8KIAlkbyB7CiAJCS8qIFdhaXQgZm9yIHRoZSBuZXh0IHRlc3QgaW50ZXJ2YWwuICovCkBAIC04MTAsNiArODA5LDcgQEAKIAogCS8qIENsZWFuIHVwIGFuZCBleGl0LiAqLwogCVZFUkJPU0VfUFJJTlRLX1NUUklORygicmN1X3RvcnR1cmVfYm9vc3QgdGFzayBzdG9wcGluZyIpOworCWRlc3Ryb3lfcmN1X2hlYWRfb25fc3RhY2soJnJiaS5yY3UpOwogCXJjdXRvcnR1cmVfc2h1dGRvd25fYWJzb3JiKCJyY3VfdG9ydHVyZV9ib29zdCIpOwogCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpIHx8IHJiaS5pbmZsaWdodCkKIAkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CkBAIC04ODYsNyArODg2LDcgQEAKIAkJCW9sZF9ycC0+cnRvcnRfcGlwZV9jb3VudCsrOwogCQkJY3VyX29wcy0+ZGVmZXJyZWRfZnJlZShvbGRfcnApOwogCQl9Ci0JCXJjdV90b3J0dXJlX2N1cnJlbnRfdmVyc2lvbisrOworCQlyY3V0b3J0dXJlX3JlY29yZF9wcm9ncmVzcygrK3JjdV90b3J0dXJlX2N1cnJlbnRfdmVyc2lvbik7CiAJCW9sZGJhdGNoID0gY3VyX29wcy0+Y29tcGxldGVkKCk7CiAJCXJjdV9zdHV0dGVyX3dhaXQoInJjdV90b3J0dXJlX3dyaXRlciIpOwogCX0gd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkgJiYgZnVsbHN0b3AgPT0gRlVMTFNUT1BfRE9OVFNUT1ApOwpAQCAtMTA2Niw4ICsxMDY2LDggQEAKIAl9CiAJY250ICs9IHNwcmludGYoJnBhZ2VbY250XSwgIiVzJXMgIiwgdG9ydHVyZV90eXBlLCBUT1JUVVJFX0ZMQUcpOwogCWNudCArPSBzcHJpbnRmKCZwYWdlW2NudF0sCi0JCSAgICAgICAicnRjOiAlcCB2ZXI6ICVsZCB0ZmxlOiAlZCBydGE6ICVkIHJ0YWY6ICVkIHJ0ZjogJWQgIgotCQkgICAgICAgInJ0bWJlOiAlZCBydGJrZTogJWxkIHJ0YnJlOiAlbGQgcnRiYWU6ICVsZCBydGJhZmU6ICVsZCAiCisJCSAgICAgICAicnRjOiAlcCB2ZXI6ICVsdSB0ZmxlOiAlZCBydGE6ICVkIHJ0YWY6ICVkIHJ0ZjogJWQgIgorCQkgICAgICAgInJ0bWJlOiAlZCBydGJrZTogJWxkIHJ0YnJlOiAlbGQgIgogCQkgICAgICAgInJ0YmY6ICVsZCBydGI6ICVsZCBudDogJWxkIiwKIAkJICAgICAgIHJjdV90b3J0dXJlX2N1cnJlbnQsCiAJCSAgICAgICByY3VfdG9ydHVyZV9jdXJyZW50X3ZlcnNpb24sCkBAIC0xMDc4LDE2ICsxMDc4LDEyIEBACiAJCSAgICAgICBhdG9taWNfcmVhZCgmbl9yY3VfdG9ydHVyZV9tYmVycm9yKSwKIAkJICAgICAgIG5fcmN1X3RvcnR1cmVfYm9vc3Rfa3RyZXJyb3IsCiAJCSAgICAgICBuX3JjdV90b3J0dXJlX2Jvb3N0X3J0ZXJyb3IsCi0JCSAgICAgICBuX3JjdV90b3J0dXJlX2Jvb3N0X2FsbG9jZXJyb3IsCi0JCSAgICAgICBuX3JjdV90b3J0dXJlX2Jvb3N0X2FmZmVycm9yLAogCQkgICAgICAgbl9yY3VfdG9ydHVyZV9ib29zdF9mYWlsdXJlLAogCQkgICAgICAgbl9yY3VfdG9ydHVyZV9ib29zdHMsCiAJCSAgICAgICBuX3JjdV90b3J0dXJlX3RpbWVycyk7CiAJaWYgKGF0b21pY19yZWFkKCZuX3JjdV90b3J0dXJlX21iZXJyb3IpICE9IDAgfHwKIAkgICAgbl9yY3VfdG9ydHVyZV9ib29zdF9rdHJlcnJvciAhPSAwIHx8CiAJICAgIG5fcmN1X3RvcnR1cmVfYm9vc3RfcnRlcnJvciAhPSAwIHx8Ci0JICAgIG5fcmN1X3RvcnR1cmVfYm9vc3RfYWxsb2NlcnJvciAhPSAwIHx8Ci0JICAgIG5fcmN1X3RvcnR1cmVfYm9vc3RfYWZmZXJyb3IgIT0gMCB8fAogCSAgICBuX3JjdV90b3J0dXJlX2Jvb3N0X2ZhaWx1cmUgIT0gMCkKIAkJY250ICs9IHNwcmludGYoJnBhZ2VbY250XSwgIiAhISEiKTsKIAljbnQgKz0gc3ByaW50ZigmcGFnZVtjbnRdLCAiXG4lcyVzICIsIHRvcnR1cmVfdHlwZSwgVE9SVFVSRV9GTEFHKTsKQEAgLTEzMzEsNiArMTMyNyw3IEBACiAJaW50IGk7CiAKIAltdXRleF9sb2NrKCZmdWxsc3RvcF9tdXRleCk7CisJcmN1dG9ydHVyZV9yZWNvcmRfdGVzdF90cmFuc2l0aW9uKCk7CiAJaWYgKGZ1bGxzdG9wID09IEZVTExTVE9QX1NIVVRET1dOKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgLyogYnV0IGdvaW5nIGRvd24gYW55d2F5LCBzby4uLiAqLwogCQkgICAgICAgIkNvbmN1cnJlbnQgJ3JtbW9kIHJjdXRvcnR1cmUnIGFuZCBzaHV0ZG93biBpbGxlZ2FsIVxuIik7CkBAIC0xNDg2LDggKzE0ODMsNiBAQAogCWF0b21pY19zZXQoJm5fcmN1X3RvcnR1cmVfZXJyb3IsIDApOwogCW5fcmN1X3RvcnR1cmVfYm9vc3Rfa3RyZXJyb3IgPSAwOwogCW5fcmN1X3RvcnR1cmVfYm9vc3RfcnRlcnJvciA9IDA7Ci0Jbl9yY3VfdG9ydHVyZV9ib29zdF9hbGxvY2Vycm9yID0gMDsKLQluX3JjdV90b3J0dXJlX2Jvb3N0X2FmZmVycm9yID0gMDsKIAluX3JjdV90b3J0dXJlX2Jvb3N0X2ZhaWx1cmUgPSAwOwogCW5fcmN1X3RvcnR1cmVfYm9vc3RzID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgUkNVX1RPUlRVUkVfUElQRV9MRU4gKyAxOyBpKyspCkBAIC0xNjI0LDYgKzE2MTksNyBAQAogCQl9CiAJfQogCXJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmcmN1dG9ydHVyZV9zaHV0ZG93bl9uYik7CisJcmN1dG9ydHVyZV9yZWNvcmRfdGVzdF90cmFuc2l0aW9uKCk7CiAJbXV0ZXhfdW5sb2NrKCZmdWxsc3RvcF9tdXRleCk7CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0cmVlLmMgYi9rZXJuZWwvcmN1dHJlZS5jCmluZGV4IGRkNGFlYTguLmYwN2QyZjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0cmVlLmMKKysrIGIva2VybmVsL3JjdXRyZWUuYwpAQCAtNDcsNiArNDcsOSBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjaW5jbHVkZSAicmN1dHJlZS5oIgogCkBAIC03OSwxMCArODIsNDEgQEAKIHN0cnVjdCByY3Vfc3RhdGUgcmN1X2JoX3N0YXRlID0gUkNVX1NUQVRFX0lOSVRJQUxJWkVSKHJjdV9iaF9zdGF0ZSk7CiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcmN1X2RhdGEsIHJjdV9iaF9kYXRhKTsKIAorc3RhdGljIHN0cnVjdCByY3Vfc3RhdGUgKnJjdV9zdGF0ZTsKKwogaW50IHJjdV9zY2hlZHVsZXJfYWN0aXZlIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MX0dQTChyY3Vfc2NoZWR1bGVyX2FjdGl2ZSk7CiAKIC8qCisgKiBDb250cm9sIHZhcmlhYmxlcyBmb3IgcGVyLUNQVSBhbmQgcGVyLXJjdV9ub2RlIGt0aHJlYWRzLiAgVGhlc2UKKyAqIGhhbmRsZSBhbGwgZmxhdm9ycyBvZiBSQ1UuCisgKi8KK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgcmN1X2NwdV9rdGhyZWFkX3Rhc2spOworREVGSU5FX1BFUl9DUFUodW5zaWduZWQgaW50LCByY3VfY3B1X2t0aHJlYWRfc3RhdHVzKTsKK0RFRklORV9QRVJfQ1BVKGludCwgcmN1X2NwdV9rdGhyZWFkX2NwdSk7CitERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBpbnQsIHJjdV9jcHVfa3RocmVhZF9sb29wcyk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUod2FpdF9xdWV1ZV9oZWFkX3QsIHJjdV9jcHVfd3EpOworREVGSU5FX1BFUl9DUFUoY2hhciwgcmN1X2NwdV9oYXNfd29yayk7CitzdGF0aWMgY2hhciByY3Vfa3RocmVhZHNfc3Bhd25hYmxlOworCitzdGF0aWMgdm9pZCByY3Vfbm9kZV9rdGhyZWFkX3NldGFmZmluaXR5KHN0cnVjdCByY3Vfbm9kZSAqcm5wLCBpbnQgb3V0Z29pbmdjcHUpOworc3RhdGljIHZvaWQgaW52b2tlX3JjdV9jcHVfa3RocmVhZCh2b2lkKTsKKworI2RlZmluZSBSQ1VfS1RIUkVBRF9QUklPIDEJLyogUlQgcHJpb3JpdHkgZm9yIHBlci1DUFUga3RocmVhZHMuICovCisKKy8qCisgKiBUcmFjayB0aGUgcmN1dG9ydHVyZSB0ZXN0IHNlcXVlbmNlIG51bWJlciBhbmQgdGhlIHVwZGF0ZSB2ZXJzaW9uCisgKiBudW1iZXIgd2l0aGluIGEgZ2l2ZW4gdGVzdC4gIFRoZSByY3V0b3J0dXJlX3Rlc3RzZXEgaXMgaW5jcmVtZW50ZWQKKyAqIG9uIGV2ZXJ5IHJjdXRvcnR1cmUgbW9kdWxlIGxvYWQgYW5kIHVubG9hZCwgc28gaGFzIGFuIG9kZCB2YWx1ZQorICogd2hlbiBhIHRlc3QgaXMgcnVubmluZy4gIFRoZSByY3V0b3J0dXJlX3Zlcm51bSBpcyBzZXQgdG8gemVybworICogd2hlbiByY3V0b3J0dXJlIHN0YXJ0cyBhbmQgaXMgaW5jcmVtZW50ZWQgb24gZWFjaCByY3V0b3J0dXJlIHVwZGF0ZS4KKyAqIFRoZXNlIHZhcmlhYmxlcyBlbmFibGUgY29ycmVsYXRpbmcgcmN1dG9ydHVyZSBvdXRwdXQgd2l0aCB0aGUKKyAqIFJDVSB0cmFjaW5nIGluZm9ybWF0aW9uLgorICovCit1bnNpZ25lZCBsb25nIHJjdXRvcnR1cmVfdGVzdHNlcTsKK3Vuc2lnbmVkIGxvbmcgcmN1dG9ydHVyZV92ZXJudW07CisKKy8qCiAgKiBSZXR1cm4gdHJ1ZSBpZiBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGlzIGluIHByb2dyZXNzLiAgVGhlIEFDQ0VTU19PTkNFKClzCiAgKiBwZXJtaXQgdGhpcyBmdW5jdGlvbiB0byBiZSBpbnZva2VkIHdpdGhvdXQgaG9sZGluZyB0aGUgcm9vdCByY3Vfbm9kZQogICogc3RydWN0dXJlJ3MgLT5sb2NrLCBidXQgb2YgY291cnNlIHJlc3VsdHMgY2FuIGJlIHN1YmplY3QgdG8gY2hhbmdlLgpAQCAtMTI0LDYgKzE1OCw3IEBACiAJcmN1X3NjaGVkX3FzKGNwdSk7CiAJcmN1X3ByZWVtcHRfbm90ZV9jb250ZXh0X3N3aXRjaChjcHUpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocmN1X25vdGVfY29udGV4dF9zd2l0Y2gpOwogCiAjaWZkZWYgQ09ORklHX05PX0haCiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcmN1X2R5bnRpY2tzLCByY3VfZHludGlja3MpID0gewpAQCAtMTQwLDEwICsxNzUsOCBAQAogbW9kdWxlX3BhcmFtKHFoaW1hcmssIGludCwgMCk7CiBtb2R1bGVfcGFyYW0ocWxvd21hcmssIGludCwgMCk7CiAKLSNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUgotaW50IHJjdV9jcHVfc3RhbGxfc3VwcHJlc3MgX19yZWFkX21vc3RseSA9IFJDVV9DUFVfU1RBTExfU1VQUFJFU1NfSU5JVDsKK2ludCByY3VfY3B1X3N0YWxsX3N1cHByZXNzIF9fcmVhZF9tb3N0bHk7CiBtb2R1bGVfcGFyYW0ocmN1X2NwdV9zdGFsbF9zdXBwcmVzcywgaW50LCAwNjQ0KTsKLSNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgKi8KIAogc3RhdGljIHZvaWQgZm9yY2VfcXVpZXNjZW50X3N0YXRlKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgaW50IHJlbGF4ZWQpOwogc3RhdGljIGludCByY3VfcGVuZGluZyhpbnQgY3B1KTsKQEAgLTE3Niw2ICsyMDksMzEgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJjdV9iaF9mb3JjZV9xdWllc2NlbnRfc3RhdGUpOwogCiAvKgorICogUmVjb3JkIHRoZSBudW1iZXIgb2YgdGltZXMgcmN1dG9ydHVyZSB0ZXN0cyBoYXZlIGJlZW4gaW5pdGlhdGVkIGFuZAorICogdGVybWluYXRlZC4gIFRoaXMgaW5mb3JtYXRpb24gYWxsb3dzIHRoZSBkZWJ1Z2ZzIHRyYWNpbmcgc3RhdHMgdG8gYmUKKyAqIGNvcnJlbGF0ZWQgdG8gdGhlIHJjdXRvcnR1cmUgbWVzc2FnZXMsIGV2ZW4gd2hlbiB0aGUgcmN1dG9ydHVyZSBtb2R1bGUKKyAqIGlzIGJlaW5nIHJlcGVhdGVkbHkgbG9hZGVkIGFuZCB1bmxvYWRlZC4gIEluIG90aGVyIHdvcmRzLCB3ZSBjYW5ub3QKKyAqIHN0b3JlIHRoaXMgc3RhdGUgaW4gcmN1dG9ydHVyZSBpdHNlbGYuCisgKi8KK3ZvaWQgcmN1dG9ydHVyZV9yZWNvcmRfdGVzdF90cmFuc2l0aW9uKHZvaWQpCit7CisJcmN1dG9ydHVyZV90ZXN0c2VxKys7CisJcmN1dG9ydHVyZV92ZXJudW0gPSAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmN1dG9ydHVyZV9yZWNvcmRfdGVzdF90cmFuc2l0aW9uKTsKKworLyoKKyAqIFJlY29yZCB0aGUgbnVtYmVyIG9mIHdyaXRlciBwYXNzZXMgdGhyb3VnaCB0aGUgY3VycmVudCByY3V0b3J0dXJlIHRlc3QuCisgKiBUaGlzIGlzIGFsc28gdXNlZCB0byBjb3JyZWxhdGUgZGVidWdmcyB0cmFjaW5nIHN0YXRzIHdpdGggdGhlIHJjdXRvcnR1cmUKKyAqIG1lc3NhZ2VzLgorICovCit2b2lkIHJjdXRvcnR1cmVfcmVjb3JkX3Byb2dyZXNzKHVuc2lnbmVkIGxvbmcgdmVybnVtKQoreworCXJjdXRvcnR1cmVfdmVybnVtKys7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyY3V0b3J0dXJlX3JlY29yZF9wcm9ncmVzcyk7CisKKy8qCiAgKiBGb3JjZSBhIHF1aWVzY2VudCBzdGF0ZSBmb3IgUkNVLXNjaGVkLgogICovCiB2b2lkIHJjdV9zY2hlZF9mb3JjZV9xdWllc2NlbnRfc3RhdGUodm9pZCkKQEAgLTIzNCw4ICsyOTIsOCBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQkvKiBJZiBwcmVlbXB0YWJsZSBSQ1UsIG5vIHBvaW50IGluIHNlbmRpbmcgcmVzY2hlZHVsZSBJUEkuICovCi0JaWYgKHJkcC0+cHJlZW1wdGFibGUpCisJLyogSWYgcHJlZW1wdGlibGUgUkNVLCBubyBwb2ludCBpbiBzZW5kaW5nIHJlc2NoZWR1bGUgSVBJLiAqLworCWlmIChyZHAtPnByZWVtcHRpYmxlKQogCQlyZXR1cm4gMDsKIAogCS8qIFRoZSBDUFUgaXMgb25saW5lLCBzbyBzZW5kIGl0IGEgcmVzY2hlZHVsZSBJUEkuICovCkBAIC00NTAsOCArNTA4LDYgQEAKIAogI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfTk9fSFogKi8KIAotI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SCi0KIGludCByY3VfY3B1X3N0YWxsX3N1cHByZXNzIF9fcmVhZF9tb3N0bHk7CiAKIHN0YXRpYyB2b2lkIHJlY29yZF9ncF9zdGFsbF9jaGVja190aW1lKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKQEAgLTUzNywyMSArNTkzLDI0IEBACiAKIHN0YXRpYyB2b2lkIGNoZWNrX2NwdV9zdGFsbChzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHN0cnVjdCByY3VfZGF0YSAqcmRwKQogewotCWxvbmcgZGVsdGE7CisJdW5zaWduZWQgbG9uZyBqOworCXVuc2lnbmVkIGxvbmcganM7CiAJc3RydWN0IHJjdV9ub2RlICpybnA7CiAKIAlpZiAocmN1X2NwdV9zdGFsbF9zdXBwcmVzcykKIAkJcmV0dXJuOwotCWRlbHRhID0gamlmZmllcyAtIEFDQ0VTU19PTkNFKHJzcC0+amlmZmllc19zdGFsbCk7CisJaiA9IEFDQ0VTU19PTkNFKGppZmZpZXMpOworCWpzID0gQUNDRVNTX09OQ0UocnNwLT5qaWZmaWVzX3N0YWxsKTsKIAlybnAgPSByZHAtPm15bm9kZTsKLQlpZiAoKEFDQ0VTU19PTkNFKHJucC0+cXNtYXNrKSAmIHJkcC0+Z3JwbWFzaykgJiYgZGVsdGEgPj0gMCkgeworCWlmICgoQUNDRVNTX09OQ0Uocm5wLT5xc21hc2spICYgcmRwLT5ncnBtYXNrKSAmJiBVTE9OR19DTVBfR0UoaiwganMpKSB7CiAKIAkJLyogV2UgaGF2ZW4ndCBjaGVja2VkIGluLCBzbyBnbyBkdW1wIHN0YWNrLiAqLwogCQlwcmludF9jcHVfc3RhbGwocnNwKTsKIAotCX0gZWxzZSBpZiAocmN1X2dwX2luX3Byb2dyZXNzKHJzcCkgJiYgZGVsdGEgPj0gUkNVX1NUQUxMX1JBVF9ERUxBWSkgeworCX0gZWxzZSBpZiAocmN1X2dwX2luX3Byb2dyZXNzKHJzcCkgJiYKKwkJICAgVUxPTkdfQ01QX0dFKGosIGpzICsgUkNVX1NUQUxMX1JBVF9ERUxBWSkpIHsKIAotCQkvKiBUaGV5IGhhZCB0d28gdGltZSB1bml0cyB0byBkdW1wIHN0YWNrLCBzbyBjb21wbGFpbi4gKi8KKwkJLyogVGhleSBoYWQgYSBmZXcgdGltZSB1bml0cyB0byBkdW1wIHN0YWNrLCBzbyBjb21wbGFpbi4gKi8KIAkJcHJpbnRfb3RoZXJfY3B1X3N0YWxsKHJzcCk7CiAJfQogfQpAQCAtNTg3LDI2ICs2NDYsNiBAQAogCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwgJnJjdV9wYW5pY19ibG9jayk7CiB9CiAKLSNlbHNlIC8qICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiAqLwotCi1zdGF0aWMgdm9pZCByZWNvcmRfZ3Bfc3RhbGxfY2hlY2tfdGltZShzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCi17Ci19Ci0KLXN0YXRpYyB2b2lkIGNoZWNrX2NwdV9zdGFsbChzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHN0cnVjdCByY3VfZGF0YSAqcmRwKQotewotfQotCi12b2lkIHJjdV9jcHVfc3RhbGxfcmVzZXQodm9pZCkKLXsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IGNoZWNrX2NwdV9zdGFsbF9pbml0KHZvaWQpCi17Ci19Ci0KLSNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgKi8KLQogLyoKICAqIFVwZGF0ZSBDUFUtbG9jYWwgcmN1X2RhdGEgc3RhdGUgdG8gcmVjb3JkIHRoZSBuZXdseSBub3RpY2VkIGdyYWNlIHBlcmlvZC4KICAqIFRoaXMgaXMgdXNlZCBib3RoIHdoZW4gd2Ugc3RhcnRlZCB0aGUgZ3JhY2UgcGVyaW9kIGFuZCB3aGVuIHdlIG5vdGljZQpAQCAtODA5LDYgKzg0OCw3IEBACiAJCXJucC0+Y29tcGxldGVkID0gcnNwLT5jb21wbGV0ZWQ7CiAJCXJzcC0+c2lnbmFsZWQgPSBSQ1VfU0lHTkFMX0lOSVQ7IC8qIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSBPSy4gKi8KIAkJcmN1X3N0YXJ0X2dwX3Blcl9jcHUocnNwLCBybnAsIHJkcCk7CisJCXJjdV9wcmVlbXB0X2Jvb3N0X3N0YXJ0X2dwKHJucCk7CiAJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KQEAgLTg0NCw2ICs4ODQsNyBAQAogCQlybnAtPmNvbXBsZXRlZCA9IHJzcC0+Y29tcGxldGVkOwogCQlpZiAocm5wID09IHJkcC0+bXlub2RlKQogCQkJcmN1X3N0YXJ0X2dwX3Blcl9jcHUocnNwLCBybnAsIHJkcCk7CisJCXJjdV9wcmVlbXB0X2Jvb3N0X3N0YXJ0X2dwKHJucCk7CiAJCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJfQogCkBAIC04NjQsNyArOTA1LDEyIEBACiBzdGF0aWMgdm9pZCByY3VfcmVwb3J0X3FzX3JzcChzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiAJX19yZWxlYXNlcyhyY3VfZ2V0X3Jvb3QocnNwKS0+bG9jaykKIHsKKwl1bnNpZ25lZCBsb25nIGdwX2R1cmF0aW9uOworCiAJV0FSTl9PTl9PTkNFKCFyY3VfZ3BfaW5fcHJvZ3Jlc3MocnNwKSk7CisJZ3BfZHVyYXRpb24gPSBqaWZmaWVzIC0gcnNwLT5ncF9zdGFydDsKKwlpZiAoZ3BfZHVyYXRpb24gPiByc3AtPmdwX21heCkKKwkJcnNwLT5ncF9tYXggPSBncF9kdXJhdGlvbjsKIAlyc3AtPmNvbXBsZXRlZCA9IHJzcC0+Z3BudW07CiAJcnNwLT5zaWduYWxlZCA9IFJDVV9HUF9JRExFOwogCXJjdV9zdGFydF9ncChyc3AsIGZsYWdzKTsgIC8qIHJlbGVhc2VzIHJvb3Qgbm9kZSdzIHJucC0+bG9jay4gKi8KQEAgLTg5NCw3ICs5NDAsNyBAQAogCQkJcmV0dXJuOwogCQl9CiAJCXJucC0+cXNtYXNrICY9IH5tYXNrOwotCQlpZiAocm5wLT5xc21hc2sgIT0gMCB8fCByY3VfcHJlZW1wdGVkX3JlYWRlcnMocm5wKSkgeworCQlpZiAocm5wLT5xc21hc2sgIT0gMCB8fCByY3VfcHJlZW1wdF9ibG9ja2VkX3JlYWRlcnNfY2dwKHJucCkpIHsKIAogCQkJLyogT3RoZXIgYml0cyBzdGlsbCBzZXQgYXQgdGhpcyBsZXZlbCwgc28gZG9uZS4gKi8KIAkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKQEAgLTEwMzcsNiArMTA4Myw4IEBACiAvKgogICogUmVtb3ZlIHRoZSBvdXRnb2luZyBDUFUgZnJvbSB0aGUgYml0bWFza3MgaW4gdGhlIHJjdV9ub2RlIGhpZXJhcmNoeQogICogYW5kIG1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBvdXRnb2luZyBDUFUgdG8gdGhlIGN1cnJlbnQgb25lLgorICogVGhlcmUgY2FuIG9ubHkgYmUgb25lIENQVSBob3RwbHVnIG9wZXJhdGlvbiBhdCBhIHRpbWUsIHNvIG5vIG90aGVyCisgKiBDUFUgY2FuIGJlIGF0dGVtcHRpbmcgdG8gdXBkYXRlIHJjdV9jcHVfa3RocmVhZF90YXNrLgogICovCiBzdGF0aWMgdm9pZCBfX3JjdV9vZmZsaW5lX2NwdShpbnQgY3B1LCBzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCiB7CkBAIC0xMDQ1LDYgKzEwOTMsMTQgQEAKIAlpbnQgbmVlZF9yZXBvcnQgPSAwOwogCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gcGVyX2NwdV9wdHIocnNwLT5yZGEsIGNwdSk7CiAJc3RydWN0IHJjdV9ub2RlICpybnA7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0OworCisJLyogU3RvcCB0aGUgQ1BVJ3Mga3RocmVhZC4gKi8KKwl0ID0gcGVyX2NwdShyY3VfY3B1X2t0aHJlYWRfdGFzaywgY3B1KTsKKwlpZiAodCAhPSBOVUxMKSB7CisJCXBlcl9jcHUocmN1X2NwdV9rdGhyZWFkX3Rhc2ssIGNwdSkgPSBOVUxMOworCQlrdGhyZWFkX3N0b3AodCk7CisJfQogCiAJLyogRXhjbHVkZSBhbnkgYXR0ZW1wdHMgdG8gc3RhcnQgYSBuZXcgZ3JhY2UgcGVyaW9kLiAqLwogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKQEAgLTEwODIsNiArMTEzOCw3IEBACiAJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAlpZiAobmVlZF9yZXBvcnQgJiBSQ1VfT0ZMX1RBU0tTX0VYUF9HUCkKIAkJcmN1X3JlcG9ydF9leHBfcm5wKHJzcCwgcm5wKTsKKwlyY3Vfbm9kZV9rdGhyZWFkX3NldGFmZmluaXR5KHJucCwgLTEpOwogfQogCiAvKgpAQCAtMTE0Myw3ICsxMjAwLDcgQEAKIAkJbmV4dCA9IGxpc3QtPm5leHQ7CiAJCXByZWZldGNoKG5leHQpOwogCQlkZWJ1Z19yY3VfaGVhZF91bnF1ZXVlKGxpc3QpOwotCQlsaXN0LT5mdW5jKGxpc3QpOworCQlfX3JjdV9yZWNsYWltKGxpc3QpOwogCQlsaXN0ID0gbmV4dDsKIAkJaWYgKCsrY291bnQgPj0gcmRwLT5ibGltaXQpCiAJCQlicmVhazsKQEAgLTExNzksNyArMTIzNiw3IEBACiAKIAkvKiBSZS1yYWlzZSB0aGUgUkNVIHNvZnRpcnEgaWYgdGhlcmUgYXJlIGNhbGxiYWNrcyByZW1haW5pbmcuICovCiAJaWYgKGNwdV9oYXNfY2FsbGJhY2tzX3JlYWR5X3RvX2ludm9rZShyZHApKQotCQlyYWlzZV9zb2Z0aXJxKFJDVV9TT0ZUSVJRKTsKKwkJaW52b2tlX3JjdV9jcHVfa3RocmVhZCgpOwogfQogCiAvKgpAQCAtMTIyNSw3ICsxMjgyLDcgQEAKIAl9CiAJcmN1X3ByZWVtcHRfY2hlY2tfY2FsbGJhY2tzKGNwdSk7CiAJaWYgKHJjdV9wZW5kaW5nKGNwdSkpCi0JCXJhaXNlX3NvZnRpcnEoUkNVX1NPRlRJUlEpOworCQlpbnZva2VfcmN1X2NwdV9rdGhyZWFkKCk7CiB9CiAKICNpZmRlZiBDT05GSUdfU01QCkBAIC0xMjMzLDYgKzEyOTAsOCBAQAogLyoKICAqIFNjYW4gdGhlIGxlYWYgcmN1X25vZGUgc3RydWN0dXJlcywgcHJvY2Vzc2luZyBkeW50aWNrIHN0YXRlIGZvciBhbnkgdGhhdAogICogaGF2ZSBub3QgeWV0IGVuY291bnRlcmVkIGEgcXVpZXNjZW50IHN0YXRlLCB1c2luZyB0aGUgZnVuY3Rpb24gc3BlY2lmaWVkLgorICogQWxzbyBpbml0aWF0ZSBib29zdGluZyBmb3IgYW55IHRocmVhZHMgYmxvY2tlZCBvbiB0aGUgcm9vdCByY3Vfbm9kZS4KKyAqCiAgKiBUaGUgY2FsbGVyIG11c3QgaGF2ZSBzdXBwcmVzc2VkIHN0YXJ0IG9mIG5ldyBncmFjZSBwZXJpb2RzLgogICovCiBzdGF0aWMgdm9pZCBmb3JjZV9xc19ybnAoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBpbnQgKCpmKShzdHJ1Y3QgcmN1X2RhdGEgKikpCkBAIC0xMjUxLDcgKzEzMTAsNyBAQAogCQkJcmV0dXJuOwogCQl9CiAJCWlmIChybnAtPnFzbWFzayA9PSAwKSB7Ci0JCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCQlyY3VfaW5pdGlhdGVfYm9vc3Qocm5wLCBmbGFncyk7IC8qIHJlbGVhc2VzIHJucC0+bG9jayAqLwogCQkJY29udGludWU7CiAJCX0KIAkJY3B1ID0gcm5wLT5ncnBsbzsKQEAgLTEyNjksNiArMTMyOCwxMSBAQAogCQl9CiAJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAl9CisJcm5wID0gcmN1X2dldF9yb290KHJzcCk7CisJaWYgKHJucC0+cXNtYXNrID09IDApIHsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJcmN1X2luaXRpYXRlX2Jvb3N0KHJucCwgZmxhZ3MpOyAvKiByZWxlYXNlcyBybnAtPmxvY2suICovCisJfQogfQogCiAvKgpAQCAtMTM4OSw3ICsxNDUzLDcgQEAKIC8qCiAgKiBEbyBzb2Z0aXJxIHByb2Nlc3NpbmcgZm9yIHRoZSBjdXJyZW50IENQVS4KICAqLwotc3RhdGljIHZvaWQgcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKHN0cnVjdCBzb2Z0aXJxX2FjdGlvbiAqdW51c2VkKQorc3RhdGljIHZvaWQgcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKHZvaWQpCiB7CiAJLyoKIAkgKiBNZW1vcnkgcmVmZXJlbmNlcyBmcm9tIGFueSBwcmlvciBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zCkBAIC0xNDE0LDYgKzE0NzgsMzQ3IEBACiAJcmN1X25lZWRzX2NwdV9mbHVzaCgpOwogfQogCisvKgorICogV2FrZSB1cCB0aGUgY3VycmVudCBDUFUncyBrdGhyZWFkLiAgVGhpcyByZXBsYWNlcyByYWlzZV9zb2Z0aXJxKCkKKyAqIGluIGVhcmxpZXIgdmVyc2lvbnMgb2YgUkNVLiAgTm90ZSB0aGF0IGJlY2F1c2Ugd2UgYXJlIHJ1bm5pbmcgb24KKyAqIHRoZSBjdXJyZW50IENQVSB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQsIHRoZSByY3VfY3B1X2t0aHJlYWRfdGFzaworICogY2Fubm90IGRpc2FwcGVhciBvdXQgZnJvbSB1bmRlciB1cy4KKyAqLworc3RhdGljIHZvaWQgaW52b2tlX3JjdV9jcHVfa3RocmVhZCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJX190aGlzX2NwdV93cml0ZShyY3VfY3B1X2hhc193b3JrLCAxKTsKKwlpZiAoX190aGlzX2NwdV9yZWFkKHJjdV9jcHVfa3RocmVhZF90YXNrKSA9PSBOVUxMKSB7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwl3YWtlX3VwKCZfX2dldF9jcHVfdmFyKHJjdV9jcHVfd3EpKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBXYWtlIHVwIHRoZSBzcGVjaWZpZWQgcGVyLXJjdV9ub2RlLXN0cnVjdHVyZSBrdGhyZWFkLgorICogQmVjYXVzZSB0aGUgcGVyLXJjdV9ub2RlIGt0aHJlYWRzIGFyZSBpbW1vcnRhbCwgd2UgZG9uJ3QgbmVlZAorICogdG8gZG8gYW55dGhpbmcgdG8ga2VlcCB0aGVtIGFsaXZlLgorICovCitzdGF0aWMgdm9pZCBpbnZva2VfcmN1X25vZGVfa3RocmVhZChzdHJ1Y3QgcmN1X25vZGUgKnJucCkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CisKKwl0ID0gcm5wLT5ub2RlX2t0aHJlYWRfdGFzazsKKwlpZiAodCAhPSBOVUxMKQorCQl3YWtlX3VwX3Byb2Nlc3ModCk7Cit9CisKKy8qCisgKiBTZXQgdGhlIHNwZWNpZmllZCBDUFUncyBrdGhyZWFkIHRvIHJ1biBSVCBvciBub3QsIGFzIHNwZWNpZmllZCBieQorICogdGhlIHRvX3J0IGFyZ3VtZW50LiAgVGhlIENQVS1ob3RwbHVnIGxvY2tzIGFyZSBoZWxkLCBzbyB0aGUgdGFzaworICogaXMgbm90IGdvaW5nIGF3YXkuCisgKi8KK3N0YXRpYyB2b2lkIHJjdV9jcHVfa3RocmVhZF9zZXRydChpbnQgY3B1LCBpbnQgdG9fcnQpCit7CisJaW50IHBvbGljeTsKKwlzdHJ1Y3Qgc2NoZWRfcGFyYW0gc3A7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0OworCisJdCA9IHBlcl9jcHUocmN1X2NwdV9rdGhyZWFkX3Rhc2ssIGNwdSk7CisJaWYgKHQgPT0gTlVMTCkKKwkJcmV0dXJuOworCWlmICh0b19ydCkgeworCQlwb2xpY3kgPSBTQ0hFRF9GSUZPOworCQlzcC5zY2hlZF9wcmlvcml0eSA9IFJDVV9LVEhSRUFEX1BSSU87CisJfSBlbHNlIHsKKwkJcG9saWN5ID0gU0NIRURfTk9STUFMOworCQlzcC5zY2hlZF9wcmlvcml0eSA9IDA7CisJfQorCXNjaGVkX3NldHNjaGVkdWxlcl9ub2NoZWNrKHQsIHBvbGljeSwgJnNwKTsKK30KKworLyoKKyAqIFRpbWVyIGhhbmRsZXIgdG8gaW5pdGlhdGUgdGhlIHdha2luZyB1cCBvZiBwZXItQ1BVIGt0aHJlYWRzIHRoYXQKKyAqIGhhdmUgeWllbGRlZCB0aGUgQ1BVIGR1ZSB0byBleGNlc3MgbnVtYmVycyBvZiBSQ1UgY2FsbGJhY2tzLgorICogV2Ugd2FrZSB1cCB0aGUgcGVyLXJjdV9ub2RlIGt0aHJlYWQsIHdoaWNoIGluIHR1cm4gd2lsbCB3YWtlIHVwCisgKiB0aGUgYm9vc3RlciBrdGhyZWFkLgorICovCitzdGF0aWMgdm9pZCByY3VfY3B1X2t0aHJlYWRfdGltZXIodW5zaWduZWQgbG9uZyBhcmcpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHBlcl9jcHVfcHRyKHJjdV9zdGF0ZS0+cmRhLCBhcmcpOworCXN0cnVjdCByY3Vfbm9kZSAqcm5wID0gcmRwLT5teW5vZGU7CisKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOworCXJucC0+d2FrZW1hc2sgfD0gcmRwLT5ncnBtYXNrOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlpbnZva2VfcmN1X25vZGVfa3RocmVhZChybnApOworfQorCisvKgorICogRHJvcCB0byBub24tcmVhbC10aW1lIHByaW9yaXR5IGFuZCB5aWVsZCwgYnV0IG9ubHkgYWZ0ZXIgcG9zdGluZyBhCisgKiB0aW1lciB0aGF0IHdpbGwgY2F1c2UgdXMgdG8gcmVnYWluIG91ciByZWFsLXRpbWUgcHJpb3JpdHkgaWYgd2UKKyAqIHJlbWFpbiBwcmVlbXB0ZWQuICBFaXRoZXIgd2F5LCB3ZSByZXN0b3JlIG91ciByZWFsLXRpbWUgcHJpb3JpdHkKKyAqIGJlZm9yZSByZXR1cm5pbmcuCisgKi8KK3N0YXRpYyB2b2lkIHJjdV95aWVsZCh2b2lkICgqZikodW5zaWduZWQgbG9uZyksIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBzY2hlZF9wYXJhbSBzcDsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB5aWVsZF90aW1lcjsKKworCXNldHVwX3RpbWVyX29uX3N0YWNrKCZ5aWVsZF90aW1lciwgZiwgYXJnKTsKKwltb2RfdGltZXIoJnlpZWxkX3RpbWVyLCBqaWZmaWVzICsgMik7CisJc3Auc2NoZWRfcHJpb3JpdHkgPSAwOworCXNjaGVkX3NldHNjaGVkdWxlcl9ub2NoZWNrKGN1cnJlbnQsIFNDSEVEX05PUk1BTCwgJnNwKTsKKwlzZXRfdXNlcl9uaWNlKGN1cnJlbnQsIDE5KTsKKwlzY2hlZHVsZSgpOworCXNwLnNjaGVkX3ByaW9yaXR5ID0gUkNVX0tUSFJFQURfUFJJTzsKKwlzY2hlZF9zZXRzY2hlZHVsZXJfbm9jaGVjayhjdXJyZW50LCBTQ0hFRF9GSUZPLCAmc3ApOworCWRlbF90aW1lcigmeWllbGRfdGltZXIpOworfQorCisvKgorICogSGFuZGxlIGNhc2VzIHdoZXJlIHRoZSByY3VfY3B1X2t0aHJlYWQoKSBlbmRzIHVwIG9uIHRoZSB3cm9uZyBDUFUuCisgKiBUaGlzIGNhbiBoYXBwZW4gd2hpbGUgdGhlIGNvcnJlc3BvbmRpbmcgQ1BVIGlzIGVpdGhlciBjb21pbmcgb25saW5lCisgKiBvciBnb2luZyBvZmZsaW5lLiAgV2UgY2Fubm90IHdhaXQgdW50aWwgdGhlIENQVSBpcyBmdWxseSBvbmxpbmUKKyAqIGJlZm9yZSBzdGFydGluZyB0aGUga3RocmVhZCwgYmVjYXVzZSB0aGUgdmFyaW91cyBub3RpZmllciBmdW5jdGlvbnMKKyAqIGNhbiB3YWl0IGZvciBSQ1UgZ3JhY2UgcGVyaW9kcy4gIFNvIHdlIHBhcmsgcmN1X2NwdV9rdGhyZWFkKCkgdW50aWwKKyAqIHRoZSBjb3JyZXNwb25kaW5nIENQVSBpcyBvbmxpbmUuCisgKgorICogUmV0dXJuIDEgaWYgdGhlIGt0aHJlYWQgbmVlZHMgdG8gc3RvcCwgMCBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIG11c3QgZGlzYWJsZSBiaC4gIFRoaXMgZnVuY3Rpb24gY2FuIG1vbWVudGFyaWx5IGVuYWJsZSBpdC4KKyAqLworc3RhdGljIGludCByY3VfY3B1X2t0aHJlYWRfc2hvdWxkX3N0b3AoaW50IGNwdSkKK3sKKwl3aGlsZSAoY3B1X2lzX29mZmxpbmUoY3B1KSB8fAorCSAgICAgICAhY3B1bWFza19lcXVhbCgmY3VycmVudC0+Y3B1c19hbGxvd2VkLCBjcHVtYXNrX29mKGNwdSkpIHx8CisJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSAhPSBjcHUpIHsKKwkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKKwkJCXJldHVybiAxOworCQlwZXJfY3B1KHJjdV9jcHVfa3RocmVhZF9zdGF0dXMsIGNwdSkgPSBSQ1VfS1RIUkVBRF9PRkZDUFU7CisJCXBlcl9jcHUocmN1X2NwdV9rdGhyZWFkX2NwdSwgY3B1KSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisJCWxvY2FsX2JoX2VuYWJsZSgpOworCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKKwkJaWYgKCFjcHVtYXNrX2VxdWFsKCZjdXJyZW50LT5jcHVzX2FsbG93ZWQsIGNwdW1hc2tfb2YoY3B1KSkpCisJCQlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBjcHVtYXNrX29mKGNwdSkpOworCQlsb2NhbF9iaF9kaXNhYmxlKCk7CisJfQorCXBlcl9jcHUocmN1X2NwdV9rdGhyZWFkX2NwdSwgY3B1KSA9IGNwdTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFBlci1DUFUga2VybmVsIHRocmVhZCB0aGF0IGludm9rZXMgUkNVIGNhbGxiYWNrcy4gIFRoaXMgcmVwbGFjZXMgdGhlCisgKiBlYXJsaWVyIFJDVSBzb2Z0aXJxLgorICovCitzdGF0aWMgaW50IHJjdV9jcHVfa3RocmVhZCh2b2lkICphcmcpCit7CisJaW50IGNwdSA9IChpbnQpKGxvbmcpYXJnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHNwaW5jbnQgPSAwOworCXVuc2lnbmVkIGludCAqc3RhdHVzcCA9ICZwZXJfY3B1KHJjdV9jcHVfa3RocmVhZF9zdGF0dXMsIGNwdSk7CisJd2FpdF9xdWV1ZV9oZWFkX3QgKndxcCA9ICZwZXJfY3B1KHJjdV9jcHVfd3EsIGNwdSk7CisJY2hhciB3b3JrOworCWNoYXIgKndvcmtwID0gJnBlcl9jcHUocmN1X2NwdV9oYXNfd29yaywgY3B1KTsKKworCWZvciAoOzspIHsKKwkJKnN0YXR1c3AgPSBSQ1VfS1RIUkVBRF9XQUlUSU5HOworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoKndxcCwKKwkJCQkJICp3b3JrcCAhPSAwIHx8IGt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7CisJCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwkJaWYgKHJjdV9jcHVfa3RocmVhZF9zaG91bGRfc3RvcChjcHUpKSB7CisJCQlsb2NhbF9iaF9lbmFibGUoKTsKKwkJCWJyZWFrOworCQl9CisJCSpzdGF0dXNwID0gUkNVX0tUSFJFQURfUlVOTklORzsKKwkJcGVyX2NwdShyY3VfY3B1X2t0aHJlYWRfbG9vcHMsIGNwdSkrKzsKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQl3b3JrID0gKndvcmtwOworCQkqd29ya3AgPSAwOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCWlmICh3b3JrKQorCQkJcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKCk7CisJCWxvY2FsX2JoX2VuYWJsZSgpOworCQlpZiAoKndvcmtwICE9IDApCisJCQlzcGluY250Kys7CisJCWVsc2UKKwkJCXNwaW5jbnQgPSAwOworCQlpZiAoc3BpbmNudCA+IDEwKSB7CisJCQkqc3RhdHVzcCA9IFJDVV9LVEhSRUFEX1lJRUxESU5HOworCQkJcmN1X3lpZWxkKHJjdV9jcHVfa3RocmVhZF90aW1lciwgKHVuc2lnbmVkIGxvbmcpY3B1KTsKKwkJCXNwaW5jbnQgPSAwOworCQl9CisJfQorCSpzdGF0dXNwID0gUkNVX0tUSFJFQURfU1RPUFBFRDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNwYXduIGEgcGVyLUNQVSBrdGhyZWFkLCBzZXR0aW5nIHVwIGFmZmluaXR5IGFuZCBwcmlvcml0eS4KKyAqIEJlY2F1c2UgdGhlIENQVSBob3RwbHVnIGxvY2sgaXMgaGVsZCwgbm8gb3RoZXIgQ1BVIHdpbGwgYmUgYXR0ZW1wdGluZworICogdG8gbWFuaXB1bGF0ZSByY3VfY3B1X2t0aHJlYWRfdGFzay4gIFRoZXJlIG1pZ2h0IGJlIGFub3RoZXIgQ1BVCisgKiBhdHRlbXB0aW5nIHRvIGFjY2VzcyBpdCBkdXJpbmcgYm9vdCwgYnV0IHRoZSBsb2NraW5nIGluIGt0aHJlYWRfYmluZCgpCisgKiB3aWxsIGVuZm9yY2Ugc3VmZmljaWVudCBvcmRlcmluZy4KKyAqLworc3RhdGljIGludCBfX2NwdWluaXQgcmN1X3NwYXduX29uZV9jcHVfa3RocmVhZChpbnQgY3B1KQoreworCXN0cnVjdCBzY2hlZF9wYXJhbSBzcDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CisKKwlpZiAoIXJjdV9rdGhyZWFkc19zcGF3bmFibGUgfHwKKwkgICAgcGVyX2NwdShyY3VfY3B1X2t0aHJlYWRfdGFzaywgY3B1KSAhPSBOVUxMKQorCQlyZXR1cm4gMDsKKwl0ID0ga3RocmVhZF9jcmVhdGUocmN1X2NwdV9rdGhyZWFkLCAodm9pZCAqKShsb25nKWNwdSwgInJjdWMlZCIsIGNwdSk7CisJaWYgKElTX0VSUih0KSkKKwkJcmV0dXJuIFBUUl9FUlIodCk7CisJa3RocmVhZF9iaW5kKHQsIGNwdSk7CisJcGVyX2NwdShyY3VfY3B1X2t0aHJlYWRfY3B1LCBjcHUpID0gY3B1OworCVdBUk5fT05fT05DRShwZXJfY3B1KHJjdV9jcHVfa3RocmVhZF90YXNrLCBjcHUpICE9IE5VTEwpOworCXBlcl9jcHUocmN1X2NwdV9rdGhyZWFkX3Rhc2ssIGNwdSkgPSB0OworCXdha2VfdXBfcHJvY2Vzcyh0KTsKKwlzcC5zY2hlZF9wcmlvcml0eSA9IFJDVV9LVEhSRUFEX1BSSU87CisJc2NoZWRfc2V0c2NoZWR1bGVyX25vY2hlY2sodCwgU0NIRURfRklGTywgJnNwKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFBlci1yY3Vfbm9kZSBrdGhyZWFkLCB3aGljaCBpcyBpbiBjaGFyZ2Ugb2Ygd2FraW5nIHVwIHRoZSBwZXItQ1BVCisgKiBrdGhyZWFkcyB3aGVuIG5lZWRlZC4gIFdlIGlnbm9yZSByZXF1ZXN0cyB0byB3YWtlIHVwIGt0aHJlYWRzCisgKiBmb3Igb2ZmbGluZSBDUFVzLCB3aGljaCBpcyBPSyBiZWNhdXNlIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSgpCisgKiB0YWtlcyBjYXJlIG9mIHRoaXMgY2FzZS4KKyAqLworc3RhdGljIGludCByY3Vfbm9kZV9rdGhyZWFkKHZvaWQgKmFyZykKK3sKKwlpbnQgY3B1OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCXN0cnVjdCByY3Vfbm9kZSAqcm5wID0gKHN0cnVjdCByY3Vfbm9kZSAqKWFyZzsKKwlzdHJ1Y3Qgc2NoZWRfcGFyYW0gc3A7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0OworCisJZm9yICg7OykgeworCQlybnAtPm5vZGVfa3RocmVhZF9zdGF0dXMgPSBSQ1VfS1RIUkVBRF9XQUlUSU5HOworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocm5wLT5ub2RlX3dxLCBybnAtPndha2VtYXNrICE9IDApOworCQlybnAtPm5vZGVfa3RocmVhZF9zdGF0dXMgPSBSQ1VfS1RIUkVBRF9SVU5OSU5HOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQltYXNrID0gcm5wLT53YWtlbWFzazsKKwkJcm5wLT53YWtlbWFzayA9IDA7CisJCXJjdV9pbml0aWF0ZV9ib29zdChybnAsIGZsYWdzKTsgLyogcmVsZWFzZXMgcm5wLT5sb2NrLiAqLworCQlmb3IgKGNwdSA9IHJucC0+Z3JwbG87IGNwdSA8PSBybnAtPmdycGhpOyBjcHUrKywgbWFzayA+Pj0gMSkgeworCQkJaWYgKChtYXNrICYgMHgxKSA9PSAwKQorCQkJCWNvbnRpbnVlOworCQkJcHJlZW1wdF9kaXNhYmxlKCk7CisJCQl0ID0gcGVyX2NwdShyY3VfY3B1X2t0aHJlYWRfdGFzaywgY3B1KTsKKwkJCWlmICghY3B1X29ubGluZShjcHUpIHx8IHQgPT0gTlVMTCkgeworCQkJCXByZWVtcHRfZW5hYmxlKCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlwZXJfY3B1KHJjdV9jcHVfaGFzX3dvcmssIGNwdSkgPSAxOworCQkJc3Auc2NoZWRfcHJpb3JpdHkgPSBSQ1VfS1RIUkVBRF9QUklPOworCQkJc2NoZWRfc2V0c2NoZWR1bGVyX25vY2hlY2sodCwgU0NIRURfRklGTywgJnNwKTsKKwkJCXByZWVtcHRfZW5hYmxlKCk7CisJCX0KKwl9CisJLyogTk9UUkVBQ0hFRCAqLworCXJucC0+bm9kZV9rdGhyZWFkX3N0YXR1cyA9IFJDVV9LVEhSRUFEX1NUT1BQRUQ7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQgdGhlIHBlci1yY3Vfbm9kZSBrdGhyZWFkJ3MgYWZmaW5pdHkgdG8gY292ZXIgYWxsIENQVXMgdGhhdCBhcmUKKyAqIHNlcnZlZCBieSB0aGUgcmN1X25vZGUgaW4gcXVlc3Rpb24uICBUaGUgQ1BVIGhvdHBsdWcgbG9jayBpcyBzdGlsbAorICogaGVsZCwgc28gdGhlIHZhbHVlIG9mIHJucC0+cXNtYXNraW5pdCB3aWxsIGJlIHN0YWJsZS4KKyAqCisgKiBXZSBkb24ndCBpbmNsdWRlIG91dGdvaW5nY3B1IGluIHRoZSBhZmZpbml0eSBzZXQsIHVzZSAtMSBpZiB0aGVyZSBpcworICogbm8gb3V0Z29pbmcgQ1BVLiAgSWYgdGhlcmUgYXJlIG5vIENQVXMgbGVmdCBpbiB0aGUgYWZmaW5pdHkgc2V0LAorICogdGhpcyBmdW5jdGlvbiBhbGxvd3MgdGhlIGt0aHJlYWQgdG8gZXhlY3V0ZSBvbiBhbnkgQ1BVLgorICovCitzdGF0aWMgdm9pZCByY3Vfbm9kZV9rdGhyZWFkX3NldGFmZmluaXR5KHN0cnVjdCByY3Vfbm9kZSAqcm5wLCBpbnQgb3V0Z29pbmdjcHUpCit7CisJY3B1bWFza192YXJfdCBjbTsKKwlpbnQgY3B1OworCXVuc2lnbmVkIGxvbmcgbWFzayA9IHJucC0+cXNtYXNraW5pdDsKKworCWlmIChybnAtPm5vZGVfa3RocmVhZF90YXNrID09IE5VTEwpCisJCXJldHVybjsKKwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZjbSwgR0ZQX0tFUk5FTCkpCisJCXJldHVybjsKKwljcHVtYXNrX2NsZWFyKGNtKTsKKwlmb3IgKGNwdSA9IHJucC0+Z3JwbG87IGNwdSA8PSBybnAtPmdycGhpOyBjcHUrKywgbWFzayA+Pj0gMSkKKwkJaWYgKChtYXNrICYgMHgxKSAmJiBjcHUgIT0gb3V0Z29pbmdjcHUpCisJCQljcHVtYXNrX3NldF9jcHUoY3B1LCBjbSk7CisJaWYgKGNwdW1hc2tfd2VpZ2h0KGNtKSA9PSAwKSB7CisJCWNwdW1hc2tfc2V0YWxsKGNtKTsKKwkJZm9yIChjcHUgPSBybnAtPmdycGxvOyBjcHUgPD0gcm5wLT5ncnBoaTsgY3B1KyspCisJCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIGNtKTsKKwkJV0FSTl9PTl9PTkNFKGNwdW1hc2tfd2VpZ2h0KGNtKSA9PSAwKTsKKwl9CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIocm5wLT5ub2RlX2t0aHJlYWRfdGFzaywgY20pOworCXJjdV9ib29zdF9rdGhyZWFkX3NldGFmZmluaXR5KHJucCwgY20pOworCWZyZWVfY3B1bWFza192YXIoY20pOworfQorCisvKgorICogU3Bhd24gYSBwZXItcmN1X25vZGUga3RocmVhZCwgc2V0dGluZyBwcmlvcml0eSBhbmQgYWZmaW5pdHkuCisgKiBDYWxsZWQgZHVyaW5nIGJvb3QgYmVmb3JlIG9ubGluZS9vZmZsaW5lIGNhbiBoYXBwZW4sIG9yLCBpZgorICogZHVyaW5nIHJ1bnRpbWUsIHdpdGggdGhlIG1haW4gQ1BVLWhvdHBsdWcgbG9ja3MgaGVsZC4gIFNvIG9ubHkKKyAqIG9uZSBvZiB0aGVzZSBjYW4gYmUgZXhlY3V0aW5nIGF0IGEgdGltZS4KKyAqLworc3RhdGljIGludCBfX2NwdWluaXQgcmN1X3NwYXduX29uZV9ub2RlX2t0aHJlYWQoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAorCQkJCQkJc3RydWN0IHJjdV9ub2RlICpybnApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcm5wX2luZGV4ID0gcm5wIC0gJnJzcC0+bm9kZVswXTsKKwlzdHJ1Y3Qgc2NoZWRfcGFyYW0gc3A7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0OworCisJaWYgKCFyY3Vfa3RocmVhZHNfc3Bhd25hYmxlIHx8CisJICAgIHJucC0+cXNtYXNraW5pdCA9PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAocm5wLT5ub2RlX2t0aHJlYWRfdGFzayA9PSBOVUxMKSB7CisJCXQgPSBrdGhyZWFkX2NyZWF0ZShyY3Vfbm9kZV9rdGhyZWFkLCAodm9pZCAqKXJucCwKKwkJCQkgICAicmN1biVkIiwgcm5wX2luZGV4KTsKKwkJaWYgKElTX0VSUih0KSkKKwkJCXJldHVybiBQVFJfRVJSKHQpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlybnAtPm5vZGVfa3RocmVhZF90YXNrID0gdDsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQl3YWtlX3VwX3Byb2Nlc3ModCk7CisJCXNwLnNjaGVkX3ByaW9yaXR5ID0gOTk7CisJCXNjaGVkX3NldHNjaGVkdWxlcl9ub2NoZWNrKHQsIFNDSEVEX0ZJRk8sICZzcCk7CisJfQorCXJldHVybiByY3Vfc3Bhd25fb25lX2Jvb3N0X2t0aHJlYWQocnNwLCBybnAsIHJucF9pbmRleCk7Cit9CisKKy8qCisgKiBTcGF3biBhbGwga3RocmVhZHMgLS0gY2FsbGVkIGFzIHNvb24gYXMgdGhlIHNjaGVkdWxlciBpcyBydW5uaW5nLgorICovCitzdGF0aWMgaW50IF9faW5pdCByY3Vfc3Bhd25fa3RocmVhZHModm9pZCkKK3sKKwlpbnQgY3B1OworCXN0cnVjdCByY3Vfbm9kZSAqcm5wOworCisJcmN1X2t0aHJlYWRzX3NwYXduYWJsZSA9IDE7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwZXJfY3B1KHJjdV9jcHVfd3EsIGNwdSkpOworCQlwZXJfY3B1KHJjdV9jcHVfaGFzX3dvcmssIGNwdSkgPSAwOworCQlpZiAoY3B1X29ubGluZShjcHUpKQorCQkJKHZvaWQpcmN1X3NwYXduX29uZV9jcHVfa3RocmVhZChjcHUpOworCX0KKwlybnAgPSByY3VfZ2V0X3Jvb3QocmN1X3N0YXRlKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZybnAtPm5vZGVfd3EpOworCXJjdV9pbml0X2Jvb3N0X3dhaXRxdWV1ZShybnApOworCSh2b2lkKXJjdV9zcGF3bl9vbmVfbm9kZV9rdGhyZWFkKHJjdV9zdGF0ZSwgcm5wKTsKKwlpZiAoTlVNX1JDVV9OT0RFUyA+IDEpCisJCXJjdV9mb3JfZWFjaF9sZWFmX25vZGUocmN1X3N0YXRlLCBybnApIHsKKwkJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJucC0+bm9kZV93cSk7CisJCQlyY3VfaW5pdF9ib29zdF93YWl0cXVldWUocm5wKTsKKwkJCSh2b2lkKXJjdV9zcGF3bl9vbmVfbm9kZV9rdGhyZWFkKHJjdV9zdGF0ZSwgcm5wKTsKKwkJfQorCXJldHVybiAwOworfQorZWFybHlfaW5pdGNhbGwocmN1X3NwYXduX2t0aHJlYWRzKTsKKwogc3RhdGljIHZvaWQKIF9fY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCB2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpyY3UpLAogCSAgIHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKQEAgLTE0MzksNiArMTg0NCwxMyBAQAogCS8qIEFkZCB0aGUgY2FsbGJhY2sgdG8gb3VyIGxpc3QuICovCiAJKnJkcC0+bnh0dGFpbFtSQ1VfTkVYVF9UQUlMXSA9IGhlYWQ7CiAJcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdID0gJmhlYWQtPm5leHQ7CisJcmRwLT5xbGVuKys7CisKKwkvKiBJZiBpbnRlcnJ1cHRzIHdlcmUgZGlzYWJsZWQsIGRvbid0IGRpdmUgaW50byBSQ1UgY29yZS4gKi8KKwlpZiAoaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncykpIHsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlyZXR1cm47CisJfQogCiAJLyoKIAkgKiBGb3JjZSB0aGUgZ3JhY2UgcGVyaW9kIGlmIHRvbyBtYW55IGNhbGxiYWNrcyBvciB0b28gbG9uZyB3YWl0aW5nLgpAQCAtMTQ0Nyw3ICsxODU5LDcgQEAKIAkgKiBpbnZva2luZyBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKSBpZiB0aGUgbmV3bHkgZW5xdWV1ZWQgY2FsbGJhY2sKIAkgKiBpcyB0aGUgb25seSBvbmUgd2FpdGluZyBmb3IgYSBncmFjZSBwZXJpb2QgdG8gY29tcGxldGUuCiAJICovCi0JaWYgKHVubGlrZWx5KCsrcmRwLT5xbGVuID4gcmRwLT5xbGVuX2xhc3RfZnFzX2NoZWNrICsgcWhpbWFyaykpIHsKKwlpZiAodW5saWtlbHkocmRwLT5xbGVuID4gcmRwLT5xbGVuX2xhc3RfZnFzX2NoZWNrICsgcWhpbWFyaykpIHsKIAogCQkvKiBBcmUgd2UgaWdub3JpbmcgYSBjb21wbGV0ZWQgZ3JhY2UgcGVyaW9kPyAqLwogCQlyY3VfcHJvY2Vzc19ncF9lbmQocnNwLCByZHApOwpAQCAtMTU4Myw3ICsxOTk1LDcgQEAKIAkJICogb3IgUkNVLWJoLCBmb3JjZSBhIGxvY2FsIHJlc2NoZWR1bGUuCiAJCSAqLwogCQlyZHAtPm5fcnBfcXNfcGVuZGluZysrOwotCQlpZiAoIXJkcC0+cHJlZW1wdGFibGUgJiYKKwkJaWYgKCFyZHAtPnByZWVtcHRpYmxlICYmCiAJCSAgICBVTE9OR19DTVBfTFQoQUNDRVNTX09OQ0UocnNwLT5qaWZmaWVzX2ZvcmNlX3FzKSAtIDEsCiAJCQkJIGppZmZpZXMpKQogCQkJc2V0X25lZWRfcmVzY2hlZCgpOwpAQCAtMTc2MCw3ICsyMTcyLDcgQEAKICAqIHRoYXQgdGhpcyBDUFUgY2Fubm90IHBvc3NpYmx5IGhhdmUgYW55IFJDVSBjYWxsYmFja3MgaW4gZmxpZ2h0IHlldC4KICAqLwogc3RhdGljIHZvaWQgX19jcHVpbml0Ci1yY3VfaW5pdF9wZXJjcHVfZGF0YShpbnQgY3B1LCBzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIGludCBwcmVlbXB0YWJsZSkKK3JjdV9pbml0X3BlcmNwdV9kYXRhKGludCBjcHUsIHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgaW50IHByZWVtcHRpYmxlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBtYXNrOwpAQCAtMTc3Miw3ICsyMTg0LDcgQEAKIAlyZHAtPnBhc3NlZF9xdWllc2MgPSAwOyAgLyogV2UgY291bGQgYmUgcmFjaW5nIHdpdGggbmV3IEdQLCAqLwogCXJkcC0+cXNfcGVuZGluZyA9IDE7CSAvKiAgc28gc2V0IHVwIHRvIHJlc3BvbmQgdG8gY3VycmVudCBHUC4gKi8KIAlyZHAtPmJlZW5vbmxpbmUgPSAxOwkgLyogV2UgaGF2ZSBub3cgYmVlbiBvbmxpbmUuICovCi0JcmRwLT5wcmVlbXB0YWJsZSA9IHByZWVtcHRhYmxlOworCXJkcC0+cHJlZW1wdGlibGUgPSBwcmVlbXB0aWJsZTsKIAlyZHAtPnFsZW5fbGFzdF9mcXNfY2hlY2sgPSAwOwogCXJkcC0+bl9mb3JjZV9xc19zbmFwID0gcnNwLT5uX2ZvcmNlX3FzOwogCXJkcC0+YmxpbWl0ID0gYmxpbWl0OwpAQCAtMTgxMyw2ICsyMjI1LDE5IEBACiAJcmN1X3ByZWVtcHRfaW5pdF9wZXJjcHVfZGF0YShjcHUpOwogfQogCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgcmN1X29ubGluZV9rdGhyZWFkcyhpbnQgY3B1KQoreworCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gcGVyX2NwdV9wdHIocmN1X3N0YXRlLT5yZGEsIGNwdSk7CisJc3RydWN0IHJjdV9ub2RlICpybnAgPSByZHAtPm15bm9kZTsKKworCS8qIEZpcmUgdXAgdGhlIGluY29taW5nIENQVSdzIGt0aHJlYWQgYW5kIGxlYWYgcmN1X25vZGUga3RocmVhZC4gKi8KKwlpZiAocmN1X2t0aHJlYWRzX3NwYXduYWJsZSkgeworCQkodm9pZClyY3Vfc3Bhd25fb25lX2NwdV9rdGhyZWFkKGNwdSk7CisJCWlmIChybnAtPm5vZGVfa3RocmVhZF90YXNrID09IE5VTEwpCisJCQkodm9pZClyY3Vfc3Bhd25fb25lX25vZGVfa3RocmVhZChyY3Vfc3RhdGUsIHJucCk7CisJfQorfQorCiAvKgogICogSGFuZGxlIENQVSBvbmxpbmUvb2ZmbGluZSBub3RpZmljYXRpb24gZXZlbnRzLgogICovCkBAIC0xODIwLDExICsyMjQ1LDIzIEBACiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQogewogCWxvbmcgY3B1ID0gKGxvbmcpaGNwdTsKKwlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHBlcl9jcHVfcHRyKHJjdV9zdGF0ZS0+cmRhLCBjcHUpOworCXN0cnVjdCByY3Vfbm9kZSAqcm5wID0gcmRwLT5teW5vZGU7CiAKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgQ1BVX1VQX1BSRVBBUkU6CiAJY2FzZSBDUFVfVVBfUFJFUEFSRV9GUk9aRU46CiAJCXJjdV9vbmxpbmVfY3B1KGNwdSk7CisJCXJjdV9vbmxpbmVfa3RocmVhZHMoY3B1KTsKKwkJYnJlYWs7CisJY2FzZSBDUFVfT05MSU5FOgorCWNhc2UgQ1BVX0RPV05fRkFJTEVEOgorCQlyY3Vfbm9kZV9rdGhyZWFkX3NldGFmZmluaXR5KHJucCwgLTEpOworCQlyY3VfY3B1X2t0aHJlYWRfc2V0cnQoY3B1LCAxKTsKKwkJYnJlYWs7CisJY2FzZSBDUFVfRE9XTl9QUkVQQVJFOgorCQlyY3Vfbm9kZV9rdGhyZWFkX3NldGFmZmluaXR5KHJucCwgY3B1KTsKKwkJcmN1X2NwdV9rdGhyZWFkX3NldHJ0KGNwdSwgMCk7CiAJCWJyZWFrOwogCWNhc2UgQ1BVX0RZSU5HOgogCWNhc2UgQ1BVX0RZSU5HX0ZST1pFTjoKQEAgLTE5NDMsMTAgKzIzODAsNyBAQAogCQkJCQkgICAgICBqIC8gcnNwLT5sZXZlbHNwcmVhZFtpIC0gMV07CiAJCQl9CiAJCQlybnAtPmxldmVsID0gaTsKLQkJCUlOSVRfTElTVF9IRUFEKCZybnAtPmJsb2NrZWRfdGFza3NbMF0pOwotCQkJSU5JVF9MSVNUX0hFQUQoJnJucC0+YmxvY2tlZF90YXNrc1sxXSk7Ci0JCQlJTklUX0xJU1RfSEVBRCgmcm5wLT5ibG9ja2VkX3Rhc2tzWzJdKTsKLQkJCUlOSVRfTElTVF9IRUFEKCZybnAtPmJsb2NrZWRfdGFza3NbM10pOworCQkJSU5JVF9MSVNUX0hFQUQoJnJucC0+YmxrZF90YXNrcyk7CiAJCX0KIAl9CiAKQEAgLTE5NjgsNyArMjQwMiw2IEBACiAJcmN1X2luaXRfb25lKCZyY3Vfc2NoZWRfc3RhdGUsICZyY3Vfc2NoZWRfZGF0YSk7CiAJcmN1X2luaXRfb25lKCZyY3VfYmhfc3RhdGUsICZyY3VfYmhfZGF0YSk7CiAJX19yY3VfaW5pdF9wcmVlbXB0KCk7Ci0Jb3Blbl9zb2Z0aXJxKFJDVV9TT0ZUSVJRLCByY3VfcHJvY2Vzc19jYWxsYmFja3MpOwogCiAJLyoKIAkgKiBXZSBkb24ndCBuZWVkIHByb3RlY3Rpb24gYWdhaW5zdCBDUFUtaG90cGx1ZyBoZXJlIGJlY2F1c2UKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0cmVlLmggYi9rZXJuZWwvcmN1dHJlZS5oCmluZGV4IGU4ZjA1N2UuLjI1NzY2NDggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0cmVlLmgKKysrIGIva2VybmVsL3JjdXRyZWUuaApAQCAtOTEsNiArOTEsMTQgQEAKIAkJCQkvKiAgcmVtYWlucyBldmVuIGZvciBubWkgZnJvbSBpcnEgaGFuZGxlci4gKi8KIH07CiAKKy8qIFJDVSdzIGt0aHJlYWQgc3RhdGVzIGZvciB0cmFjaW5nLiAqLworI2RlZmluZSBSQ1VfS1RIUkVBRF9TVE9QUEVEICAwCisjZGVmaW5lIFJDVV9LVEhSRUFEX1JVTk5JTkcgIDEKKyNkZWZpbmUgUkNVX0tUSFJFQURfV0FJVElORyAgMgorI2RlZmluZSBSQ1VfS1RIUkVBRF9PRkZDUFUgICAzCisjZGVmaW5lIFJDVV9LVEhSRUFEX1lJRUxESU5HIDQKKyNkZWZpbmUgUkNVX0tUSFJFQURfTUFYICAgICAgNAorCiAvKgogICogRGVmaW5pdGlvbiBmb3Igbm9kZSB3aXRoaW4gdGhlIFJDVSBncmFjZS1wZXJpb2QtZGV0ZWN0aW9uIGhpZXJhcmNoeS4KICAqLwpAQCAtMTA5LDEwICsxMTcsMTEgQEAKIAkJCQkvKiAgYW4gcmN1X2RhdGEgc3RydWN0dXJlLCBvdGhlcndpc2UsIGVhY2ggKi8KIAkJCQkvKiAgYml0IGNvcnJlc3BvbmRzIHRvIGEgY2hpbGQgcmN1X25vZGUgKi8KIAkJCQkvKiAgc3RydWN0dXJlLiAqLwotCXVuc2lnbmVkIGxvbmcgZXhwbWFzazsJLyogR3JvdXBzIHRoYXQgaGF2ZSAtPmJsb2NrZWRfdGFza3NbXSAqLworCXVuc2lnbmVkIGxvbmcgZXhwbWFzazsJLyogR3JvdXBzIHRoYXQgaGF2ZSAtPmJsa2RfdGFza3MgKi8KIAkJCQkvKiAgZWxlbWVudHMgdGhhdCBuZWVkIHRvIGRyYWluIHRvIGFsbG93IHRoZSAqLwogCQkJCS8qICBjdXJyZW50IGV4cGVkaXRlZCBncmFjZSBwZXJpb2QgdG8gKi8KIAkJCQkvKiAgY29tcGxldGUgKG9ubHkgZm9yIFRSRUVfUFJFRU1QVF9SQ1UpLiAqLworCXVuc2lnbmVkIGxvbmcgd2FrZW1hc2s7IC8qIENQVXMgd2hvc2Uga3RocmVhZCBuZWVkcyB0byBiZSBhd2FrZW5lZC4gKi8KIAl1bnNpZ25lZCBsb25nIHFzbWFza2luaXQ7CiAJCQkJLyogUGVyLUdQIGluaXRpYWwgdmFsdWUgZm9yIHFzbWFzayAmIGV4cG1hc2suICovCiAJdW5zaWduZWQgbG9uZyBncnBtYXNrOwkvKiBNYXNrIHRvIGFwcGx5IHRvIHBhcmVudCBxc21hc2suICovCkBAIC0xMjIsMTEgKzEzMSw2OCBAQAogCXU4CWdycG51bTsJCS8qIENQVS9ncm91cCBudW1iZXIgZm9yIG5leHQgbGV2ZWwgdXAuICovCiAJdTgJbGV2ZWw7CQkvKiByb290IGlzIGF0IGxldmVsIDAuICovCiAJc3RydWN0IHJjdV9ub2RlICpwYXJlbnQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCBibG9ja2VkX3Rhc2tzWzRdOwotCQkJCS8qIFRhc2tzIGJsb2NrZWQgaW4gUkNVIHJlYWQtc2lkZSBjcml0c2VjdC4gKi8KLQkJCQkvKiAgR3JhY2UgcGVyaW9kIG51bWJlciAoLT5ncG51bSkgeCBibG9ja2VkICovCi0JCQkJLyogIGJ5IHRhc2tzIG9uIHRoZSAoeCAmIDB4MSkgZWxlbWVudCBvZiB0aGUgKi8KLQkJCQkvKiAgYmxvY2tlZF90YXNrc1tdIGFycmF5LiAqLworCXN0cnVjdCBsaXN0X2hlYWQgYmxrZF90YXNrczsKKwkJCQkvKiBUYXNrcyBibG9ja2VkIGluIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgKi8KKwkJCQkvKiAgc2VjdGlvbi4gIFRhc2tzIGFyZSBwbGFjZWQgYXQgdGhlIGhlYWQgKi8KKwkJCQkvKiAgb2YgdGhpcyBsaXN0IGFuZCBhZ2UgdG93YXJkcyB0aGUgdGFpbC4gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkICpncF90YXNrczsKKwkJCQkvKiBQb2ludGVyIHRvIHRoZSBmaXJzdCB0YXNrIGJsb2NraW5nIHRoZSAqLworCQkJCS8qICBjdXJyZW50IGdyYWNlIHBlcmlvZCwgb3IgTlVMTCBpZiB0aGVyZSAqLworCQkJCS8qICBpcyBubyBzdWNoIHRhc2suICovCisJc3RydWN0IGxpc3RfaGVhZCAqZXhwX3Rhc2tzOworCQkJCS8qIFBvaW50ZXIgdG8gdGhlIGZpcnN0IHRhc2sgYmxvY2tpbmcgdGhlICovCisJCQkJLyogIGN1cnJlbnQgZXhwZWRpdGVkIGdyYWNlIHBlcmlvZCwgb3IgTlVMTCAqLworCQkJCS8qICBpZiB0aGVyZSBpcyBubyBzdWNoIHRhc2suICBJZiB0aGVyZSAqLworCQkJCS8qICBpcyBubyBjdXJyZW50IGV4cGVkaXRlZCBncmFjZSBwZXJpb2QsICovCisJCQkJLyogIHRoZW4gdGhlcmUgY2FuIGNhbm5vdCBiZSBhbnkgc3VjaCB0YXNrLiAqLworI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QKKwlzdHJ1Y3QgbGlzdF9oZWFkICpib29zdF90YXNrczsKKwkJCQkvKiBQb2ludGVyIHRvIGZpcnN0IHRhc2sgdGhhdCBuZWVkcyB0byBiZSAqLworCQkJCS8qICBwcmlvcml0eSBib29zdGVkLCBvciBOVUxMIGlmIG5vIHByaW9yaXR5ICovCisJCQkJLyogIGJvb3N0aW5nIGlzIG5lZWRlZCBmb3IgdGhpcyByY3Vfbm9kZSAqLworCQkJCS8qICBzdHJ1Y3R1cmUuICBJZiB0aGVyZSBhcmUgbm8gdGFza3MgKi8KKwkJCQkvKiAgcXVldWVkIG9uIHRoaXMgcmN1X25vZGUgc3RydWN0dXJlIHRoYXQgKi8KKwkJCQkvKiAgYXJlIGJsb2NraW5nIHRoZSBjdXJyZW50IGdyYWNlIHBlcmlvZCwgKi8KKwkJCQkvKiAgdGhlcmUgY2FuIGJlIG5vIHN1Y2ggdGFzay4gKi8KKwl1bnNpZ25lZCBsb25nIGJvb3N0X3RpbWU7CisJCQkJLyogV2hlbiB0byBzdGFydCBib29zdGluZyAoamlmZmllcykuICovCisJc3RydWN0IHRhc2tfc3RydWN0ICpib29zdF9rdGhyZWFkX3Rhc2s7CisJCQkJLyoga3RocmVhZCB0aGF0IHRha2VzIGNhcmUgb2YgcHJpb3JpdHkgKi8KKwkJCQkvKiAgYm9vc3RpbmcgZm9yIHRoaXMgcmN1X25vZGUgc3RydWN0dXJlLiAqLworCXdhaXRfcXVldWVfaGVhZF90IGJvb3N0X3dxOworCQkJCS8qIFdhaXQgcXVldWUgb24gd2hpY2ggdG8gcGFyayB0aGUgYm9vc3QgKi8KKwkJCQkvKiAga3RocmVhZC4gKi8KKwl1bnNpZ25lZCBpbnQgYm9vc3Rfa3RocmVhZF9zdGF0dXM7CisJCQkJLyogU3RhdGUgb2YgYm9vc3Rfa3RocmVhZF90YXNrIGZvciB0cmFjaW5nLiAqLworCXVuc2lnbmVkIGxvbmcgbl90YXNrc19ib29zdGVkOworCQkJCS8qIFRvdGFsIG51bWJlciBvZiB0YXNrcyBib29zdGVkLiAqLworCXVuc2lnbmVkIGxvbmcgbl9leHBfYm9vc3RzOworCQkJCS8qIE51bWJlciBvZiB0YXNrcyBib29zdGVkIGZvciBleHBlZGl0ZWQgR1AuICovCisJdW5zaWduZWQgbG9uZyBuX25vcm1hbF9ib29zdHM7CisJCQkJLyogTnVtYmVyIG9mIHRhc2tzIGJvb3N0ZWQgZm9yIG5vcm1hbCBHUC4gKi8KKwl1bnNpZ25lZCBsb25nIG5fYmFsa19ibGtkX3Rhc2tzOworCQkJCS8qIFJlZnVzZWQgdG8gYm9vc3Q6IG5vIGJsb2NrZWQgdGFza3MuICovCisJdW5zaWduZWQgbG9uZyBuX2JhbGtfZXhwX2dwX3Rhc2tzOworCQkJCS8qIFJlZnVzZWQgdG8gYm9vc3Q6IG5vdGhpbmcgYmxvY2tpbmcgR1AuICovCisJdW5zaWduZWQgbG9uZyBuX2JhbGtfYm9vc3RfdGFza3M7CisJCQkJLyogUmVmdXNlZCB0byBib29zdDogYWxyZWFkeSBib29zdGluZy4gKi8KKwl1bnNpZ25lZCBsb25nIG5fYmFsa19ub3RibG9ja2VkOworCQkJCS8qIFJlZnVzZWQgdG8gYm9vc3Q6IFJDVSBSUyBDUyBzdGlsbCBydW5uaW5nLiAqLworCXVuc2lnbmVkIGxvbmcgbl9iYWxrX25vdHlldDsKKwkJCQkvKiBSZWZ1c2VkIHRvIGJvb3N0OiBub3QgeWV0IHRpbWUuICovCisJdW5zaWduZWQgbG9uZyBuX2JhbGtfbm9zOworCQkJCS8qIFJlZnVzZWQgdG8gYm9vc3Q6IG5vdCBzdXJlIHdoeSwgdGhvdWdoLiAqLworCQkJCS8qICBUaGlzIGNhbiBoYXBwZW4gZHVlIHRvIHJhY2UgY29uZGl0aW9ucy4gKi8KKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9CT09TVCAqLworCXN0cnVjdCB0YXNrX3N0cnVjdCAqbm9kZV9rdGhyZWFkX3Rhc2s7CisJCQkJLyoga3RocmVhZCB0aGF0IHRha2VzIGNhcmUgb2YgdGhpcyByY3Vfbm9kZSAqLworCQkJCS8qICBzdHJ1Y3R1cmUsIGZvciBleGFtcGxlLCBhd2FrZW5pbmcgdGhlICovCisJCQkJLyogIHBlci1DUFUga3RocmVhZHMgYXMgbmVlZGVkLiAqLworCXdhaXRfcXVldWVfaGVhZF90IG5vZGVfd3E7CisJCQkJLyogV2FpdCBxdWV1ZSBvbiB3aGljaCB0byBwYXJrIHRoZSBwZXItbm9kZSAqLworCQkJCS8qICBrdGhyZWFkLiAqLworCXVuc2lnbmVkIGludCBub2RlX2t0aHJlYWRfc3RhdHVzOworCQkJCS8qIFN0YXRlIG9mIG5vZGVfa3RocmVhZF90YXNrIGZvciB0cmFjaW5nLiAqLwogfSBfX19fY2FjaGVsaW5lX2ludGVybm9kZWFsaWduZWRfaW5fc21wOwogCiAvKgpAQCAtMTc1LDcgKzI0MSw3IEBACiAJYm9vbAkJcGFzc2VkX3F1aWVzYzsJLyogVXNlci1tb2RlL2lkbGUgbG9vcCBldGMuICovCiAJYm9vbAkJcXNfcGVuZGluZzsJLyogQ29yZSB3YWl0cyBmb3IgcXVpZXNjIHN0YXRlLiAqLwogCWJvb2wJCWJlZW5vbmxpbmU7CS8qIENQVSBvbmxpbmUgYXQgbGVhc3Qgb25jZS4gKi8KLQlib29sCQlwcmVlbXB0YWJsZTsJLyogUHJlZW1wdGFibGUgUkNVPyAqLworCWJvb2wJCXByZWVtcHRpYmxlOwkvKiBQcmVlbXB0aWJsZSBSQ1U/ICovCiAJc3RydWN0IHJjdV9ub2RlICpteW5vZGU7CS8qIFRoaXMgQ1BVJ3MgbGVhZiBvZiBoaWVyYXJjaHkgKi8KIAl1bnNpZ25lZCBsb25nIGdycG1hc2s7CQkvKiBNYXNrIHRvIGFwcGx5IHRvIGxlYWYgcXNtYXNrLiAqLwogCkBAIC0yNTQsNyArMzIwLDYgQEAKICNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX05PX0haICovCiAKICNkZWZpbmUgUkNVX0pJRkZJRVNfVElMTF9GT1JDRV9RUwkgMwkvKiBmb3IgcnNwLT5qaWZmaWVzX2ZvcmNlX3FzICovCi0jaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IKIAogI2lmZGVmIENPTkZJR19QUk9WRV9SQ1UKICNkZWZpbmUgUkNVX1NUQUxMX0RFTEFZX0RFTFRBCSAgICAgICAoNSAqIEhaKQpAQCAtMjcyLDEzICszMzcsNiBAQAogCQkJCQkJLyogIHNjaGVkdWxpbmcgY2xvY2sgaXJxICovCiAJCQkJCQkvKiAgYmVmb3JlIHJhdHRpbmcgb24gdGhlbS4gKi8KIAotI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SX1JVTk5BQkxFCi0jZGVmaW5lIFJDVV9DUFVfU1RBTExfU1VQUFJFU1NfSU5JVCAwCi0jZWxzZQotI2RlZmluZSBSQ1VfQ1BVX1NUQUxMX1NVUFBSRVNTX0lOSVQgMQotI2VuZGlmCi0KLSNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgKi8KIAogLyoKICAqIFJDVSBnbG9iYWwgc3RhdGUsIGluY2x1ZGluZyBub2RlIGhpZXJhcmNoeS4gIFRoaXMgaGllcmFyY2h5IGlzCkBAIC0zMjUsMTIgKzM4MywxMiBAQAogCQkJCQkJLyogIGR1ZSB0byBsb2NrIHVuYXZhaWxhYmxlLiAqLwogCXVuc2lnbmVkIGxvbmcgbl9mb3JjZV9xc19uZ3A7CQkvKiBOdW1iZXIgb2YgY2FsbHMgbGVhdmluZyAqLwogCQkJCQkJLyogIGR1ZSB0byBubyBHUCBhY3RpdmUuICovCi0jaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IKIAl1bnNpZ25lZCBsb25nIGdwX3N0YXJ0OwkJCS8qIFRpbWUgYXQgd2hpY2ggR1Agc3RhcnRlZCwgKi8KIAkJCQkJCS8qICBidXQgaW4gamlmZmllcy4gKi8KIAl1bnNpZ25lZCBsb25nIGppZmZpZXNfc3RhbGw7CQkvKiBUaW1lIGF0IHdoaWNoIHRvIGNoZWNrICovCiAJCQkJCQkvKiAgZm9yIENQVSBzdGFsbHMuICovCi0jZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SICovCisJdW5zaWduZWQgbG9uZyBncF9tYXg7CQkJLyogTWF4aW11bSBHUCBkdXJhdGlvbiBpbiAqLworCQkJCQkJLyogIGppZmZpZXMuICovCiAJY2hhciAqbmFtZTsJCQkJLyogTmFtZSBvZiBzdHJ1Y3R1cmUuICovCiB9OwogCkBAIC0zNjEsMTYgKzQxOSwxNCBAQAogc3RhdGljIHZvaWQgcmN1X2Jvb3R1cF9hbm5vdW5jZSh2b2lkKTsKIGxvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkKHZvaWQpOwogc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfbm90ZV9jb250ZXh0X3N3aXRjaChpbnQgY3B1KTsKLXN0YXRpYyBpbnQgcmN1X3ByZWVtcHRlZF9yZWFkZXJzKHN0cnVjdCByY3Vfbm9kZSAqcm5wKTsKK3N0YXRpYyBpbnQgcmN1X3ByZWVtcHRfYmxvY2tlZF9yZWFkZXJzX2NncChzdHJ1Y3QgcmN1X25vZGUgKnJucCk7CiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiBzdGF0aWMgdm9pZCByY3VfcmVwb3J0X3VuYmxvY2tfcXNfcm5wKHN0cnVjdCByY3Vfbm9kZSAqcm5wLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUgKi8KLSNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUgogc3RhdGljIHZvaWQgcmN1X3ByaW50X2RldGFpbF90YXNrX3N0YWxsKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCk7CiBzdGF0aWMgdm9pZCByY3VfcHJpbnRfdGFza19zdGFsbChzdHJ1Y3QgcmN1X25vZGUgKnJucCk7CiBzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9zdGFsbF9yZXNldCh2b2lkKTsKLSNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgKi8KIHN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X2NoZWNrX2Jsb2NrZWRfdGFza3Moc3RydWN0IHJjdV9ub2RlICpybnApOwogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogc3RhdGljIGludCByY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKQEAgLTM5MCw1ICs0NDYsMTMgQEAKIHN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X3NlbmRfY2JzX3RvX29ubGluZSh2b2lkKTsKIHN0YXRpYyB2b2lkIF9faW5pdCBfX3JjdV9pbml0X3ByZWVtcHQodm9pZCk7CiBzdGF0aWMgdm9pZCByY3VfbmVlZHNfY3B1X2ZsdXNoKHZvaWQpOworc3RhdGljIHZvaWQgX19pbml0IHJjdV9pbml0X2Jvb3N0X3dhaXRxdWV1ZShzdHJ1Y3QgcmN1X25vZGUgKnJucCk7CitzdGF0aWMgdm9pZCByY3VfaW5pdGlhdGVfYm9vc3Qoc3RydWN0IHJjdV9ub2RlICpybnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworc3RhdGljIHZvaWQgcmN1X2Jvb3N0X2t0aHJlYWRfc2V0YWZmaW5pdHkoc3RydWN0IHJjdV9ub2RlICpybnAsCisJCQkJCSAgY3B1bWFza192YXJfdCBjbSk7CitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9ib29zdF9zdGFydF9ncChzdHJ1Y3QgcmN1X25vZGUgKnJucCk7CitzdGF0aWMgaW50IF9fY3B1aW5pdCByY3Vfc3Bhd25fb25lX2Jvb3N0X2t0aHJlYWQoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAorCQkJCQkJIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAorCQkJCQkJIGludCBybnBfaW5kZXgpOwogCiAjZW5kaWYgLyogI2lmbmRlZiBSQ1VfVFJFRV9OT05DT1JFICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaCBiL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oCmluZGV4IGEzNjM4NzEuLjNmNjU1OWEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oCisrKyBiL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFJlYWQtQ29weSBVcGRhdGUgbWVjaGFuaXNtIGZvciBtdXR1YWwgZXhjbHVzaW9uICh0cmVlLWJhc2VkIHZlcnNpb24pCiAgKiBJbnRlcm5hbCBub24tcHVibGljIGRlZmluaXRpb25zIHRoYXQgcHJvdmlkZSBlaXRoZXIgY2xhc3NpYwotICogb3IgcHJlZW1wdGFibGUgc2VtYW50aWNzLgorICogb3IgcHJlZW1wdGlibGUgc2VtYW50aWNzLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNTQsMTAgKzU0LDYgQEAKICNpZmRlZiBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVF9SVU5OQUJMRQogCXByaW50ayhLRVJOX0lORk8gIlx0UkNVIHRvcnR1cmUgdGVzdGluZyBzdGFydHMgZHVyaW5nIGJvb3QuXG4iKTsKICNlbmRpZgotI2lmbmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUgotCXByaW50ayhLRVJOX0lORk8KLQkgICAgICAgIlx0UkNVLWJhc2VkIGRldGVjdGlvbiBvZiBzdGFsbGVkIENQVXMgaXMgZGlzYWJsZWQuXG4iKTsKLSNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UpICYmICFkZWZpbmVkKENPTkZJR19SQ1VfQ1BVX1NUQUxMX1ZFUkJPU0UpCiAJcHJpbnRrKEtFUk5fSU5GTyAiXHRWZXJib3NlIHN0YWxsZWQtQ1BVcyBkZXRlY3Rpb24gaXMgZGlzYWJsZWQuXG4iKTsKICNlbmRpZgpAQCAtNzAsNiArNjYsNyBAQAogCiBzdHJ1Y3QgcmN1X3N0YXRlIHJjdV9wcmVlbXB0X3N0YXRlID0gUkNVX1NUQVRFX0lOSVRJQUxJWkVSKHJjdV9wcmVlbXB0X3N0YXRlKTsKIERFRklORV9QRVJfQ1BVKHN0cnVjdCByY3VfZGF0YSwgcmN1X3ByZWVtcHRfZGF0YSk7CitzdGF0aWMgc3RydWN0IHJjdV9zdGF0ZSAqcmN1X3N0YXRlID0gJnJjdV9wcmVlbXB0X3N0YXRlOwogCiBzdGF0aWMgaW50IHJjdV9wcmVlbXB0ZWRfcmVhZGVyc19leHAoc3RydWN0IHJjdV9ub2RlICpybnApOwogCkBAIC03OCw3ICs3NSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCByY3VfYm9vdHVwX2Fubm91bmNlKHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiUHJlZW1wdGFibGUgaGllcmFyY2hpY2FsIFJDVSBpbXBsZW1lbnRhdGlvbi5cbiIpOworCXByaW50ayhLRVJOX0lORk8gIlByZWVtcHRpYmxlIGhpZXJhcmNoaWNhbCBSQ1UgaW1wbGVtZW50YXRpb24uXG4iKTsKIAlyY3VfYm9vdHVwX2Fubm91bmNlX29kZG5lc3MoKTsKIH0KIApAQCAtMTExLDcgKzEwOCw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChyY3VfZm9yY2VfcXVpZXNjZW50X3N0YXRlKTsKIAogLyoKLSAqIFJlY29yZCBhIHByZWVtcHRhYmxlLVJDVSBxdWllc2NlbnQgc3RhdGUgZm9yIHRoZSBzcGVjaWZpZWQgQ1BVLiAgTm90ZQorICogUmVjb3JkIGEgcHJlZW1wdGlibGUtUkNVIHF1aWVzY2VudCBzdGF0ZSBmb3IgdGhlIHNwZWNpZmllZCBDUFUuICBOb3RlCiAgKiB0aGF0IHRoaXMganVzdCBtZWFucyB0aGF0IHRoZSB0YXNrIGN1cnJlbnRseSBydW5uaW5nIG9uIHRoZSBDUFUgaXMKICAqIG5vdCBpbiBhIHF1aWVzY2VudCBzdGF0ZS4gIFRoZXJlIG1pZ2h0IGJlIGFueSBudW1iZXIgb2YgdGFza3MgYmxvY2tlZAogICogd2hpbGUgaW4gYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgpAQCAtMTM0LDEyICsxMzEsMTIgQEAKICAqIFdlIGhhdmUgZW50ZXJlZCB0aGUgc2NoZWR1bGVyLCBhbmQgdGhlIGN1cnJlbnQgdGFzayBtaWdodCBzb29uIGJlCiAgKiBjb250ZXh0LXN3aXRjaGVkIGF3YXkgZnJvbS4gIElmIHRoaXMgdGFzayBpcyBpbiBhbiBSQ1UgcmVhZC1zaWRlCiAgKiBjcml0aWNhbCBzZWN0aW9uLCB3ZSB3aWxsIG5vIGxvbmdlciBiZSBhYmxlIHRvIHJlbHkgb24gdGhlIENQVSB0bwotICogcmVjb3JkIHRoYXQgZmFjdCwgc28gd2UgZW5xdWV1ZSB0aGUgdGFzayBvbiB0aGUgYXBwcm9wcmlhdGUgZW50cnkKLSAqIG9mIHRoZSBibG9ja2VkX3Rhc2tzW10gYXJyYXkuICBUaGUgdGFzayB3aWxsIGRlcXVldWUgaXRzZWxmIHdoZW4KLSAqIGl0IGV4aXRzIHRoZSBvdXRlcm1vc3QgZW5jbG9zaW5nIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KLSAqIFRoZXJlZm9yZSwgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kIGNhbm5vdCBiZSBwZXJtaXR0ZWQgdG8gY29tcGxldGUKLSAqIHVudGlsIHRoZSBibG9ja2VkX3Rhc2tzW10gZW50cnkgaW5kZXhlZCBieSB0aGUgbG93LW9yZGVyIGJpdCBvZgotICogcm5wLT5ncG51bSBlbXB0aWVzLgorICogcmVjb3JkIHRoYXQgZmFjdCwgc28gd2UgZW5xdWV1ZSB0aGUgdGFzayBvbiB0aGUgYmxrZF90YXNrcyBsaXN0LgorICogVGhlIHRhc2sgd2lsbCBkZXF1ZXVlIGl0c2VsZiB3aGVuIGl0IGV4aXRzIHRoZSBvdXRlcm1vc3QgZW5jbG9zaW5nCisgKiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICBUaGVyZWZvcmUsIHRoZSBjdXJyZW50IGdyYWNlIHBlcmlvZAorICogY2Fubm90IGJlIHBlcm1pdHRlZCB0byBjb21wbGV0ZSB1bnRpbCB0aGUgYmxrZF90YXNrcyBsaXN0IGVudHJpZXMKKyAqIHByZWRhdGluZyB0aGUgY3VycmVudCBncmFjZSBwZXJpb2QgZHJhaW4sIGluIG90aGVyIHdvcmRzLCB1bnRpbAorICogcm5wLT5ncF90YXNrcyBiZWNvbWVzIE5VTEwuCiAgKgogICogQ2FsbGVyIG11c3QgZGlzYWJsZSBwcmVlbXB0aW9uLgogICovCkBAIC0xNDcsNyArMTQ0LDYgQEAKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQgPSBjdXJyZW50OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHBoYXNlOwogCXN0cnVjdCByY3VfZGF0YSAqcmRwOwogCXN0cnVjdCByY3Vfbm9kZSAqcm5wOwogCkBAIC0xNjksMTUgKzE2NSwzMCBAQAogCQkgKiAoaS5lLiwgdGhpcyBDUFUgaGFzIG5vdCB5ZXQgcGFzc2VkIHRocm91Z2ggYSBxdWllc2NlbnQKIAkJICogc3RhdGUgZm9yIHRoZSBjdXJyZW50IGdyYWNlIHBlcmlvZCksIHRoZW4gYXMgbG9uZwogCQkgKiBhcyB0aGF0IHRhc2sgcmVtYWlucyBxdWV1ZWQsIHRoZSBjdXJyZW50IGdyYWNlIHBlcmlvZAotCQkgKiBjYW5ub3QgZW5kLgorCQkgKiBjYW5ub3QgZW5kLiAgTm90ZSB0aGF0IHRoZXJlIGlzIHNvbWUgdW5jZXJ0YWludHkgYXMKKwkJICogdG8gZXhhY3RseSB3aGVuIHRoZSBjdXJyZW50IGdyYWNlIHBlcmlvZCBzdGFydGVkLgorCQkgKiBXZSB0YWtlIGEgY29uc2VydmF0aXZlIGFwcHJvYWNoLCB3aGljaCBjYW4gcmVzdWx0CisJCSAqIGluIHVubmVjZXNzYXJpbHkgd2FpdGluZyBvbiB0YXNrcyB0aGF0IHN0YXJ0ZWQgdmVyeQorCQkgKiBzbGlnaHRseSBhZnRlciB0aGUgY3VycmVudCBncmFjZSBwZXJpb2QgYmVnYW4uICBDJ2VzdAorCQkgKiBsYSB2aWUhISEKIAkJICoKIAkJICogQnV0IGZpcnN0LCBub3RlIHRoYXQgdGhlIGN1cnJlbnQgQ1BVIG11c3Qgc3RpbGwgYmUKIAkJICogb24gbGluZSEKIAkJICovCiAJCVdBUk5fT05fT05DRSgocmRwLT5ncnBtYXNrICYgcm5wLT5xc21hc2tpbml0KSA9PSAwKTsKIAkJV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZ0LT5yY3Vfbm9kZV9lbnRyeSkpOwotCQlwaGFzZSA9IChybnAtPmdwbnVtICsgIShybnAtPnFzbWFzayAmIHJkcC0+Z3JwbWFzaykpICYgMHgxOwotCQlsaXN0X2FkZCgmdC0+cmN1X25vZGVfZW50cnksICZybnAtPmJsb2NrZWRfdGFza3NbcGhhc2VdKTsKKwkJaWYgKChybnAtPnFzbWFzayAmIHJkcC0+Z3JwbWFzaykgJiYgcm5wLT5ncF90YXNrcyAhPSBOVUxMKSB7CisJCQlsaXN0X2FkZCgmdC0+cmN1X25vZGVfZW50cnksIHJucC0+Z3BfdGFza3MtPnByZXYpOworCQkJcm5wLT5ncF90YXNrcyA9ICZ0LT5yY3Vfbm9kZV9lbnRyeTsKKyNpZmRlZiBDT05GSUdfUkNVX0JPT1NUCisJCQlpZiAocm5wLT5ib29zdF90YXNrcyAhPSBOVUxMKQorCQkJCXJucC0+Ym9vc3RfdGFza3MgPSBybnAtPmdwX3Rhc2tzOworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUICovCisJCX0gZWxzZSB7CisJCQlsaXN0X2FkZCgmdC0+cmN1X25vZGVfZW50cnksICZybnAtPmJsa2RfdGFza3MpOworCQkJaWYgKHJucC0+cXNtYXNrICYgcmRwLT5ncnBtYXNrKQorCQkJCXJucC0+Z3BfdGFza3MgPSAmdC0+cmN1X25vZGVfZW50cnk7CisJCX0KIAkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCX0KIApAQCAtMTk2LDcgKzIwNyw3IEBACiB9CiAKIC8qCi0gKiBUcmVlLXByZWVtcHRhYmxlIFJDVSBpbXBsZW1lbnRhdGlvbiBmb3IgcmN1X3JlYWRfbG9jaygpLgorICogVHJlZS1wcmVlbXB0aWJsZSBSQ1UgaW1wbGVtZW50YXRpb24gZm9yIHJjdV9yZWFkX2xvY2soKS4KICAqIEp1c3QgaW5jcmVtZW50IC0+cmN1X3JlYWRfbG9ja19uZXN0aW5nLCBzaGFyZWQgc3RhdGUgd2lsbCBiZSB1cGRhdGVkCiAgKiBpZiB3ZSBibG9jay4KICAqLwpAQCAtMjEyLDEyICsyMjMsOSBAQAogICogZm9yIHRoZSBzcGVjaWZpZWQgcmN1X25vZGUgc3RydWN0dXJlLiAgSWYgdGhlIGNhbGxlciBuZWVkcyBhIHJlbGlhYmxlCiAgKiBhbnN3ZXIsIGl0IG11c3QgaG9sZCB0aGUgcmN1X25vZGUncyAtPmxvY2suCiAgKi8KLXN0YXRpYyBpbnQgcmN1X3ByZWVtcHRlZF9yZWFkZXJzKHN0cnVjdCByY3Vfbm9kZSAqcm5wKQorc3RhdGljIGludCByY3VfcHJlZW1wdF9ibG9ja2VkX3JlYWRlcnNfY2dwKHN0cnVjdCByY3Vfbm9kZSAqcm5wKQogewotCWludCBwaGFzZSA9IHJucC0+Z3BudW0gJiAweDE7Ci0KLQlyZXR1cm4gIWxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1twaGFzZV0pIHx8Ci0JICAgICAgICFsaXN0X2VtcHR5KCZybnAtPmJsb2NrZWRfdGFza3NbcGhhc2UgKyAyXSk7CisJcmV0dXJuIHJucC0+Z3BfdGFza3MgIT0gTlVMTDsKIH0KIAogLyoKQEAgLTIzMyw3ICsyNDEsNyBAQAogCXVuc2lnbmVkIGxvbmcgbWFzazsKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucF9wOwogCi0JaWYgKHJucC0+cXNtYXNrICE9IDAgfHwgcmN1X3ByZWVtcHRlZF9yZWFkZXJzKHJucCkpIHsKKwlpZiAocm5wLT5xc21hc2sgIT0gMCB8fCByY3VfcHJlZW1wdF9ibG9ja2VkX3JlYWRlcnNfY2dwKHJucCkpIHsKIAkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm47ICAvKiBTdGlsbCBuZWVkIG1vcmUgcXVpZXNjZW50IHN0YXRlcyEgKi8KIAl9CkBAIC0yNTcsNiArMjY1LDIxIEBACiB9CiAKIC8qCisgKiBBZHZhbmNlIGEgLT5ibGtkX3Rhc2tzLWxpc3QgcG9pbnRlciB0byB0aGUgbmV4dCBlbnRyeSwgaW5zdGVhZAorICogcmV0dXJuaW5nIE5VTEwgaWYgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdC4KKyAqLworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgKnJjdV9uZXh0X25vZGVfZW50cnkoc3RydWN0IHRhc2tfc3RydWN0ICp0LAorCQkJCQkgICAgIHN0cnVjdCByY3Vfbm9kZSAqcm5wKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKm5wOworCisJbnAgPSB0LT5yY3Vfbm9kZV9lbnRyeS5uZXh0OworCWlmIChucCA9PSAmcm5wLT5ibGtkX3Rhc2tzKQorCQlucCA9IE5VTEw7CisJcmV0dXJuIG5wOworfQorCisvKgogICogSGFuZGxlIHNwZWNpYWwgY2FzZXMgZHVyaW5nIHJjdV9yZWFkX3VubG9jaygpLCBzdWNoIGFzIG5lZWRpbmcgdG8KICAqIG5vdGlmeSBSQ1UgY29yZSBwcm9jZXNzaW5nIG9yIHRhc2sgaGF2aW5nIGJsb2NrZWQgZHVyaW5nIHRoZSBSQ1UKICAqIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgpAQCAtMjY2LDYgKzI4OSw3IEBACiAJaW50IGVtcHR5OwogCWludCBlbXB0eV9leHA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpucDsKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucDsKIAlpbnQgc3BlY2lhbDsKIApAQCAtMzA2LDEwICszMzAsMTkgQEAKIAkJCQlicmVhazsKIAkJCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCiAJCX0KLQkJZW1wdHkgPSAhcmN1X3ByZWVtcHRlZF9yZWFkZXJzKHJucCk7CisJCWVtcHR5ID0gIXJjdV9wcmVlbXB0X2Jsb2NrZWRfcmVhZGVyc19jZ3Aocm5wKTsKIAkJZW1wdHlfZXhwID0gIXJjdV9wcmVlbXB0ZWRfcmVhZGVyc19leHAocm5wKTsKIAkJc21wX21iKCk7IC8qIGVuc3VyZSBleHBlZGl0ZWQgZmFzdHBhdGggc2VlcyBlbmQgb2YgUkNVIGMtcy4gKi8KKwkJbnAgPSByY3VfbmV4dF9ub2RlX2VudHJ5KHQsIHJucCk7CiAJCWxpc3RfZGVsX2luaXQoJnQtPnJjdV9ub2RlX2VudHJ5KTsKKwkJaWYgKCZ0LT5yY3Vfbm9kZV9lbnRyeSA9PSBybnAtPmdwX3Rhc2tzKQorCQkJcm5wLT5ncF90YXNrcyA9IG5wOworCQlpZiAoJnQtPnJjdV9ub2RlX2VudHJ5ID09IHJucC0+ZXhwX3Rhc2tzKQorCQkJcm5wLT5leHBfdGFza3MgPSBucDsKKyNpZmRlZiBDT05GSUdfUkNVX0JPT1NUCisJCWlmICgmdC0+cmN1X25vZGVfZW50cnkgPT0gcm5wLT5ib29zdF90YXNrcykKKwkJCXJucC0+Ym9vc3RfdGFza3MgPSBucDsKKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9CT09TVCAqLwogCQl0LT5yY3VfYmxvY2tlZF9ub2RlID0gTlVMTDsKIAogCQkvKgpAQCAtMzIyLDYgKzM1NSwxNSBAQAogCQllbHNlCiAJCQlyY3VfcmVwb3J0X3VuYmxvY2tfcXNfcm5wKHJucCwgZmxhZ3MpOwogCisjaWZkZWYgQ09ORklHX1JDVV9CT09TVAorCQkvKiBVbmJvb3N0IGlmIHdlIHdlcmUgYm9vc3RlZC4gKi8KKwkJaWYgKHNwZWNpYWwgJiBSQ1VfUkVBRF9VTkxPQ0tfQk9PU1RFRCkgeworCQkJdC0+cmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwgJj0gflJDVV9SRUFEX1VOTE9DS19CT09TVEVEOworCQkJcnRfbXV0ZXhfdW5sb2NrKHQtPnJjdV9ib29zdF9tdXRleCk7CisJCQl0LT5yY3VfYm9vc3RfbXV0ZXggPSBOVUxMOworCQl9CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QgKi8KKwogCQkvKgogCQkgKiBJZiB0aGlzIHdhcyB0aGUgbGFzdCB0YXNrIG9uIHRoZSBleHBlZGl0ZWQgbGlzdHMsCiAJCSAqIHRoZW4gd2UgbmVlZCB0byByZXBvcnQgdXAgdGhlIHJjdV9ub2RlIGhpZXJhcmNoeS4KQEAgLTMzNCw3ICszNzYsNyBAQAogfQogCiAvKgotICogVHJlZS1wcmVlbXB0YWJsZSBSQ1UgaW1wbGVtZW50YXRpb24gZm9yIHJjdV9yZWFkX3VubG9jaygpLgorICogVHJlZS1wcmVlbXB0aWJsZSBSQ1UgaW1wbGVtZW50YXRpb24gZm9yIHJjdV9yZWFkX3VubG9jaygpLgogICogRGVjcmVtZW50IC0+cmN1X3JlYWRfbG9ja19uZXN0aW5nLiAgSWYgdGhlIHJlc3VsdCBpcyB6ZXJvIChvdXRlcm1vc3QKICAqIHJjdV9yZWFkX3VubG9jaygpKSBhbmQgLT5yY3VfcmVhZF91bmxvY2tfc3BlY2lhbCBpcyBub24temVybywgdGhlbgogICogaW52b2tlIHJjdV9yZWFkX3VubG9ja19zcGVjaWFsKCkgdG8gY2xlYW4gdXAgYWZ0ZXIgYSBjb250ZXh0IHN3aXRjaApAQCAtMzU2LDggKzM5OCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX3JjdV9yZWFkX3VubG9jayk7CiAKLSNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUgotCiAjaWZkZWYgQ09ORklHX1JDVV9DUFVfU1RBTExfVkVSQk9TRQogCiAvKgpAQCAtMzY3LDE4ICs0MDcsMTYgQEAKIHN0YXRpYyB2b2lkIHJjdV9wcmludF9kZXRhaWxfdGFza19zdGFsbF9ybnAoc3RydWN0IHJjdV9ub2RlICpybnApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpscDsKLQlpbnQgcGhhc2U7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0OwogCi0JaWYgKHJjdV9wcmVlbXB0ZWRfcmVhZGVycyhybnApKSB7Ci0JCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7Ci0JCXBoYXNlID0gcm5wLT5ncG51bSAmIDB4MTsKLQkJbHAgPSAmcm5wLT5ibG9ja2VkX3Rhc2tzW3BoYXNlXTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCBscCwgcmN1X25vZGVfZW50cnkpCi0JCQlzY2hlZF9zaG93X3Rhc2sodCk7Ci0JCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKLQl9CisJaWYgKCFyY3VfcHJlZW1wdF9ibG9ja2VkX3JlYWRlcnNfY2dwKHJucCkpCisJCXJldHVybjsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOworCXQgPSBsaXN0X2VudHJ5KHJucC0+Z3BfdGFza3MsCisJCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHJjdV9ub2RlX2VudHJ5KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKHQsICZybnAtPmJsa2RfdGFza3MsIHJjdV9ub2RlX2VudHJ5KQorCQlzY2hlZF9zaG93X3Rhc2sodCk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogfQogCiAvKgpAQCAtNDA4LDE2ICs0NDYsMTQgQEAKICAqLwogc3RhdGljIHZvaWQgcmN1X3ByaW50X3Rhc2tfc3RhbGwoc3RydWN0IHJjdV9ub2RlICpybnApCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbHA7Ci0JaW50IHBoYXNlOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKIAotCWlmIChyY3VfcHJlZW1wdGVkX3JlYWRlcnMocm5wKSkgewotCQlwaGFzZSA9IHJucC0+Z3BudW0gJiAweDE7Ci0JCWxwID0gJnJucC0+YmxvY2tlZF90YXNrc1twaGFzZV07Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgbHAsIHJjdV9ub2RlX2VudHJ5KQotCQkJcHJpbnRrKCIgUCVkIiwgdC0+cGlkKTsKLQl9CisJaWYgKCFyY3VfcHJlZW1wdF9ibG9ja2VkX3JlYWRlcnNfY2dwKHJucCkpCisJCXJldHVybjsKKwl0ID0gbGlzdF9lbnRyeShybnAtPmdwX3Rhc2tzLAorCQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCByY3Vfbm9kZV9lbnRyeSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZSh0LCAmcm5wLT5ibGtkX3Rhc2tzLCByY3Vfbm9kZV9lbnRyeSkKKwkJcHJpbnRrKCIgUCVkIiwgdC0+cGlkKTsKIH0KIAogLyoKQEAgLTQzMCwxOCArNDY2LDIxIEBACiAJcmN1X3ByZWVtcHRfc3RhdGUuamlmZmllc19zdGFsbCA9IGppZmZpZXMgKyBVTE9OR19NQVggLyAyOwogfQogCi0jZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SICovCi0KIC8qCiAgKiBDaGVjayB0aGF0IHRoZSBsaXN0IG9mIGJsb2NrZWQgdGFza3MgZm9yIHRoZSBuZXdseSBjb21wbGV0ZWQgZ3JhY2UKICAqIHBlcmlvZCBpcyBpbiBmYWN0IGVtcHR5LiAgSXQgaXMgYSBzZXJpb3VzIGJ1ZyB0byBjb21wbGV0ZSBhIGdyYWNlCiAgKiBwZXJpb2QgdGhhdCBzdGlsbCBoYXMgUkNVIHJlYWRlcnMgYmxvY2tlZCEgIFRoaXMgZnVuY3Rpb24gbXVzdCBiZQogICogaW52b2tlZCAtYmVmb3JlLSB1cGRhdGluZyB0aGlzIHJucCdzIC0+Z3BudW0sIGFuZCB0aGUgcm5wJ3MgLT5sb2NrCiAgKiBtdXN0IGJlIGhlbGQgYnkgdGhlIGNhbGxlci4KKyAqCisgKiBBbHNvLCBpZiB0aGVyZSBhcmUgYmxvY2tlZCB0YXNrcyBvbiB0aGUgbGlzdCwgdGhleSBhdXRvbWF0aWNhbGx5CisgKiBibG9jayB0aGUgbmV3bHkgY3JlYXRlZCBncmFjZSBwZXJpb2QsIHNvIHNldCB1cCAtPmdwX3Rhc2tzIGFjY29yZGluZ2x5LgogICovCiBzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9jaGVja19ibG9ja2VkX3Rhc2tzKHN0cnVjdCByY3Vfbm9kZSAqcm5wKQogewotCVdBUk5fT05fT05DRShyY3VfcHJlZW1wdGVkX3JlYWRlcnMocm5wKSk7CisJV0FSTl9PTl9PTkNFKHJjdV9wcmVlbXB0X2Jsb2NrZWRfcmVhZGVyc19jZ3Aocm5wKSk7CisJaWYgKCFsaXN0X2VtcHR5KCZybnAtPmJsa2RfdGFza3MpKQorCQlybnAtPmdwX3Rhc2tzID0gcm5wLT5ibGtkX3Rhc2tzLm5leHQ7CiAJV0FSTl9PTl9PTkNFKHJucC0+cXNtYXNrKTsKIH0KIApAQCAtNDY1LDUwICs1MDQsNjggQEAKIAkJCQkgICAgIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAogCQkJCSAgICAgc3RydWN0IHJjdV9kYXRhICpyZHApCiB7Ci0JaW50IGk7CiAJc3RydWN0IGxpc3RfaGVhZCAqbHA7CiAJc3RydWN0IGxpc3RfaGVhZCAqbHBfcm9vdDsKIAlpbnQgcmV0dmFsID0gMDsKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucF9yb290ID0gcmN1X2dldF9yb290KHJzcCk7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0cDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CiAKIAlpZiAocm5wID09IHJucF9yb290KSB7CiAJCVdBUk5fT05DRSgxLCAiTGFzdCBDUFUgdGhvdWdodCB0byBiZSBvZmZsaW5lZD8iKTsKIAkJcmV0dXJuIDA7ICAvKiBTaG91bGRuJ3QgaGFwcGVuOiBhdCBsZWFzdCBvbmUgQ1BVIG9ubGluZS4gKi8KIAl9Ci0JV0FSTl9PTl9PTkNFKHJucCAhPSByZHAtPm15bm9kZSAmJgotCQkgICAgICghbGlzdF9lbXB0eSgmcm5wLT5ibG9ja2VkX3Rhc2tzWzBdKSB8fAotCQkgICAgICAhbGlzdF9lbXB0eSgmcm5wLT5ibG9ja2VkX3Rhc2tzWzFdKSB8fAotCQkgICAgICAhbGlzdF9lbXB0eSgmcm5wLT5ibG9ja2VkX3Rhc2tzWzJdKSB8fAotCQkgICAgICAhbGlzdF9lbXB0eSgmcm5wLT5ibG9ja2VkX3Rhc2tzWzNdKSkpOworCisJLyogSWYgd2UgYXJlIG9uIGFuIGludGVybmFsIG5vZGUsIGNvbXBsYWluIGJpdHRlcmx5LiAqLworCVdBUk5fT05fT05DRShybnAgIT0gcmRwLT5teW5vZGUpOwogCiAJLyoKLQkgKiBNb3ZlIHRhc2tzIHVwIHRvIHJvb3QgcmN1X25vZGUuICBSZWx5IG9uIHRoZSBmYWN0IHRoYXQgdGhlCi0JICogcm9vdCByY3Vfbm9kZSBjYW4gYmUgYXQgbW9zdCBvbmUgYWhlYWQgb2YgdGhlIHJlc3Qgb2YgdGhlCi0JICogcmN1X25vZGVzIGluIHRlcm1zIG9mIGdwX251bSB2YWx1ZS4gIFRoaXMgZmFjdCBhbGxvd3MgdXMgdG8KLQkgKiBtb3ZlIHRoZSBibG9ja2VkX3Rhc2tzW10gYXJyYXkgZGlyZWN0bHksIGVsZW1lbnQgYnkgZWxlbWVudC4KKwkgKiBNb3ZlIHRhc2tzIHVwIHRvIHJvb3QgcmN1X25vZGUuICBEb24ndCB0cnkgdG8gZ2V0IGZhbmN5IGZvcgorCSAqIHRoaXMgY29ybmVyLWNhc2Ugb3BlcmF0aW9uIC0tIGp1c3QgcHV0IHRoaXMgbm9kZSdzIHRhc2tzCisJICogYXQgdGhlIGhlYWQgb2YgdGhlIHJvb3Qgbm9kZSdzIGxpc3QsIGFuZCB1cGRhdGUgdGhlIHJvb3Qgbm9kZSdzCisJICogLT5ncF90YXNrcyBhbmQgLT5leHBfdGFza3MgcG9pbnRlcnMgdG8gdGhvc2Ugb2YgdGhpcyBub2RlJ3MsCisJICogaWYgbm9uLU5VTEwuICBUaGlzIG1pZ2h0IHJlc3VsdCBpbiB3YWl0aW5nIGZvciBtb3JlIHRhc2tzIHRoYW4KKwkgKiBhYnNvbHV0ZWx5IG5lY2Vzc2FyeSwgYnV0IHRoaXMgaXMgYSBnb29kIHBlcmZvcm1hbmNlL2NvbXBsZXhpdHkKKwkgKiB0cmFkZW9mZi4KIAkgKi8KLQlpZiAocmN1X3ByZWVtcHRlZF9yZWFkZXJzKHJucCkpCisJaWYgKHJjdV9wcmVlbXB0X2Jsb2NrZWRfcmVhZGVyc19jZ3Aocm5wKSkKIAkJcmV0dmFsIHw9IFJDVV9PRkxfVEFTS1NfTk9STV9HUDsKIAlpZiAocmN1X3ByZWVtcHRlZF9yZWFkZXJzX2V4cChybnApKQogCQlyZXR2YWwgfD0gUkNVX09GTF9UQVNLU19FWFBfR1A7Ci0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlscCA9ICZybnAtPmJsb2NrZWRfdGFza3NbaV07Ci0JCWxwX3Jvb3QgPSAmcm5wX3Jvb3QtPmJsb2NrZWRfdGFza3NbaV07Ci0JCXdoaWxlICghbGlzdF9lbXB0eShscCkpIHsKLQkJCXRwID0gbGlzdF9lbnRyeShscC0+bmV4dCwgdHlwZW9mKCp0cCksIHJjdV9ub2RlX2VudHJ5KTsKLQkJCXJhd19zcGluX2xvY2soJnJucF9yb290LT5sb2NrKTsgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkICovCi0JCQlsaXN0X2RlbCgmdHAtPnJjdV9ub2RlX2VudHJ5KTsKLQkJCXRwLT5yY3VfYmxvY2tlZF9ub2RlID0gcm5wX3Jvb3Q7Ci0JCQlsaXN0X2FkZCgmdHAtPnJjdV9ub2RlX2VudHJ5LCBscF9yb290KTsKLQkJCXJhd19zcGluX3VubG9jaygmcm5wX3Jvb3QtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZCAqLwotCQl9CisJbHAgPSAmcm5wLT5ibGtkX3Rhc2tzOworCWxwX3Jvb3QgPSAmcm5wX3Jvb3QtPmJsa2RfdGFza3M7CisJd2hpbGUgKCFsaXN0X2VtcHR5KGxwKSkgeworCQl0ID0gbGlzdF9lbnRyeShscC0+bmV4dCwgdHlwZW9mKCp0KSwgcmN1X25vZGVfZW50cnkpOworCQlyYXdfc3Bpbl9sb2NrKCZybnBfcm9vdC0+bG9jayk7IC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZCAqLworCQlsaXN0X2RlbCgmdC0+cmN1X25vZGVfZW50cnkpOworCQl0LT5yY3VfYmxvY2tlZF9ub2RlID0gcm5wX3Jvb3Q7CisJCWxpc3RfYWRkKCZ0LT5yY3Vfbm9kZV9lbnRyeSwgbHBfcm9vdCk7CisJCWlmICgmdC0+cmN1X25vZGVfZW50cnkgPT0gcm5wLT5ncF90YXNrcykKKwkJCXJucF9yb290LT5ncF90YXNrcyA9IHJucC0+Z3BfdGFza3M7CisJCWlmICgmdC0+cmN1X25vZGVfZW50cnkgPT0gcm5wLT5leHBfdGFza3MpCisJCQlybnBfcm9vdC0+ZXhwX3Rhc2tzID0gcm5wLT5leHBfdGFza3M7CisjaWZkZWYgQ09ORklHX1JDVV9CT09TVAorCQlpZiAoJnQtPnJjdV9ub2RlX2VudHJ5ID09IHJucC0+Ym9vc3RfdGFza3MpCisJCQlybnBfcm9vdC0+Ym9vc3RfdGFza3MgPSBybnAtPmJvb3N0X3Rhc2tzOworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUICovCisJCXJhd19zcGluX3VubG9jaygmcm5wX3Jvb3QtPmxvY2spOyAvKiBpcnFzIHN0aWxsIGRpc2FibGVkICovCiAJfQorCisjaWZkZWYgQ09ORklHX1JDVV9CT09TVAorCS8qIEluIGNhc2Ugcm9vdCBpcyBiZWluZyBib29zdGVkIGFuZCBsZWFmIGlzIG5vdC4gKi8KKwlyYXdfc3Bpbl9sb2NrKCZybnBfcm9vdC0+bG9jayk7IC8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZCAqLworCWlmIChybnBfcm9vdC0+Ym9vc3RfdGFza3MgIT0gTlVMTCAmJgorCSAgICBybnBfcm9vdC0+Ym9vc3RfdGFza3MgIT0gcm5wX3Jvb3QtPmdwX3Rhc2tzKQorCQlybnBfcm9vdC0+Ym9vc3RfdGFza3MgPSBybnBfcm9vdC0+Z3BfdGFza3M7CisJcmF3X3NwaW5fdW5sb2NrKCZybnBfcm9vdC0+bG9jayk7IC8qIGlycXMgc3RpbGwgZGlzYWJsZWQgKi8KKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9CT09TVCAqLworCisJcm5wLT5ncF90YXNrcyA9IE5VTEw7CisJcm5wLT5leHBfdGFza3MgPSBOVUxMOwogCXJldHVybiByZXR2YWw7CiB9CiAKIC8qCi0gKiBEbyBDUFUtb2ZmbGluZSBwcm9jZXNzaW5nIGZvciBwcmVlbXB0YWJsZSBSQ1UuCisgKiBEbyBDUFUtb2ZmbGluZSBwcm9jZXNzaW5nIGZvciBwcmVlbXB0aWJsZSBSQ1UuCiAgKi8KIHN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X29mZmxpbmVfY3B1KGludCBjcHUpCiB7CkBAIC01MzcsNyArNTk0LDcgQEAKIH0KIAogLyoKLSAqIFByb2Nlc3MgY2FsbGJhY2tzIGZvciBwcmVlbXB0YWJsZSBSQ1UuCisgKiBQcm9jZXNzIGNhbGxiYWNrcyBmb3IgcHJlZW1wdGlibGUgUkNVLgogICovCiBzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9wcm9jZXNzX2NhbGxiYWNrcyh2b2lkKQogewpAQCAtNTQ2LDcgKzYwMyw3IEBACiB9CiAKIC8qCi0gKiBRdWV1ZSBhIHByZWVtcHRhYmxlLVJDVSBjYWxsYmFjayBmb3IgaW52b2NhdGlvbiBhZnRlciBhIGdyYWNlIHBlcmlvZC4KKyAqIFF1ZXVlIGEgcHJlZW1wdGlibGUtUkNVIGNhbGxiYWNrIGZvciBpbnZvY2F0aW9uIGFmdGVyIGEgZ3JhY2UgcGVyaW9kLgogICovCiB2b2lkIGNhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqcmN1KSkKIHsKQEAgLTU5NCw4ICs2NTEsNyBAQAogICovCiBzdGF0aWMgaW50IHJjdV9wcmVlbXB0ZWRfcmVhZGVyc19leHAoc3RydWN0IHJjdV9ub2RlICpybnApCiB7Ci0JcmV0dXJuICFsaXN0X2VtcHR5KCZybnAtPmJsb2NrZWRfdGFza3NbMl0pIHx8Ci0JICAgICAgICFsaXN0X2VtcHR5KCZybnAtPmJsb2NrZWRfdGFza3NbM10pOworCXJldHVybiBybnAtPmV4cF90YXNrcyAhPSBOVUxMOwogfQogCiAvKgpAQCAtNjU1LDEzICs3MTEsMTcgQEAKIHN0YXRpYyB2b2lkCiBzeW5jX3JjdV9wcmVlbXB0X2V4cF9pbml0KHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgc3RydWN0IHJjdV9ub2RlICpybnApCiB7Ci0JaW50IG11c3Rfd2FpdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBtdXN0X3dhaXQgPSAwOwogCi0JcmF3X3NwaW5fbG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkICovCi0JbGlzdF9zcGxpY2VfaW5pdCgmcm5wLT5ibG9ja2VkX3Rhc2tzWzBdLCAmcm5wLT5ibG9ja2VkX3Rhc2tzWzJdKTsKLQlsaXN0X3NwbGljZV9pbml0KCZybnAtPmJsb2NrZWRfdGFza3NbMV0sICZybnAtPmJsb2NrZWRfdGFza3NbM10pOwotCW11c3Rfd2FpdCA9IHJjdV9wcmVlbXB0ZWRfcmVhZGVyc19leHAocm5wKTsKLQlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkICovCisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlpZiAobGlzdF9lbXB0eSgmcm5wLT5ibGtkX3Rhc2tzKSkKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCWVsc2UgeworCQlybnAtPmV4cF90YXNrcyA9IHJucC0+YmxrZF90YXNrcy5uZXh0OworCQlyY3VfaW5pdGlhdGVfYm9vc3Qocm5wLCBmbGFncyk7ICAvKiByZWxlYXNlcyBybnAtPmxvY2sgKi8KKwkJbXVzdF93YWl0ID0gMTsKKwl9CiAJaWYgKCFtdXN0X3dhaXQpCiAJCXJjdV9yZXBvcnRfZXhwX3JucChyc3AsIHJucCk7CiB9CkBAIC02NjksOSArNzI5LDcgQEAKIC8qCiAgKiBXYWl0IGZvciBhbiByY3UtcHJlZW1wdCBncmFjZSBwZXJpb2QsIGJ1dCBleHBlZGl0ZSBpdC4gIFRoZSBiYXNpYyBpZGVhCiAgKiBpcyB0byBpbnZva2Ugc3luY2hyb25pemVfc2NoZWRfZXhwZWRpdGVkKCkgdG8gcHVzaCBhbGwgdGhlIHRhc2tzIHRvCi0gKiB0aGUgLT5ibG9ja2VkX3Rhc2tzW10gbGlzdHMsIG1vdmUgYWxsIGVudHJpZXMgZnJvbSB0aGUgZmlyc3Qgc2V0IG9mCi0gKiAtPmJsb2NrZWRfdGFza3NbXSBsaXN0cyB0byB0aGUgc2Vjb25kIHNldCwgYW5kIGZpbmFsbHkgd2FpdCBmb3IgdGhpcwotICogc2Vjb25kIHNldCB0byBkcmFpbi4KKyAqIHRoZSAtPmJsa2RfdGFza3MgbGlzdHMgYW5kIHdhaXQgZm9yIHRoaXMgbGlzdCB0byBkcmFpbi4KICAqLwogdm9pZCBzeW5jaHJvbml6ZV9yY3VfZXhwZWRpdGVkKHZvaWQpCiB7CkBAIC03MDMsNyArNzYxLDcgQEAKIAlpZiAoKEFDQ0VTU19PTkNFKHN5bmNfcmN1X3ByZWVtcHRfZXhwX2NvdW50KSAtIHNuYXApID4gMCkKIAkJZ290byB1bmxvY2tfbWJfcmV0OyAvKiBPdGhlcnMgZGlkIG91ciB3b3JrIGZvciB1cy4gKi8KIAotCS8qIGZvcmNlIGFsbCBSQ1UgcmVhZGVycyBvbnRvIGJsb2NrZWRfdGFza3NbXS4gKi8KKwkvKiBmb3JjZSBhbGwgUkNVIHJlYWRlcnMgb250byAtPmJsa2RfdGFza3MgbGlzdHMuICovCiAJc3luY2hyb25pemVfc2NoZWRfZXhwZWRpdGVkKCk7CiAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CkBAIC03MTUsNyArNzczLDcgQEAKIAkJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAl9CiAKLQkvKiBTbmFwc2hvdCBjdXJyZW50IHN0YXRlIG9mIC0+YmxvY2tlZF90YXNrc1tdIGxpc3RzLiAqLworCS8qIFNuYXBzaG90IGN1cnJlbnQgc3RhdGUgb2YgLT5ibGtkX3Rhc2tzIGxpc3RzLiAqLwogCXJjdV9mb3JfZWFjaF9sZWFmX25vZGUocnNwLCBybnApCiAJCXN5bmNfcmN1X3ByZWVtcHRfZXhwX2luaXQocnNwLCBybnApOwogCWlmIChOVU1fUkNVX05PREVTID4gMSkKQEAgLTcyMyw3ICs3ODEsNyBAQAogCiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CiAKLQkvKiBXYWl0IGZvciBzbmFwc2hvdHRlZCAtPmJsb2NrZWRfdGFza3NbXSBsaXN0cyB0byBkcmFpbi4gKi8KKwkvKiBXYWl0IGZvciBzbmFwc2hvdHRlZCAtPmJsa2RfdGFza3MgbGlzdHMgdG8gZHJhaW4uICovCiAJcm5wID0gcmN1X2dldF9yb290KHJzcCk7CiAJd2FpdF9ldmVudChzeW5jX3JjdV9wcmVlbXB0X2V4cF93cSwKIAkJICAgc3luY19yY3VfcHJlZW1wdF9leHBfZG9uZShybnApKTsKQEAgLTczOSw3ICs3OTcsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZCk7CiAKIC8qCi0gKiBDaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGltbWVkaWF0ZSBwcmVlbXB0YWJsZS1SQ1UtcmVsYXRlZCB3b3JrCisgKiBDaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGltbWVkaWF0ZSBwcmVlbXB0aWJsZS1SQ1UtcmVsYXRlZCB3b3JrCiAgKiB0byBiZSBkb25lLgogICovCiBzdGF0aWMgaW50IHJjdV9wcmVlbXB0X3BlbmRpbmcoaW50IGNwdSkKQEAgLTc0OSw3ICs4MDcsNyBAQAogfQogCiAvKgotICogRG9lcyBwcmVlbXB0YWJsZSBSQ1UgbmVlZCB0aGUgQ1BVIHRvIHN0YXkgb3V0IG9mIGR5bnRpY2tzIG1vZGU/CisgKiBEb2VzIHByZWVtcHRpYmxlIFJDVSBuZWVkIHRoZSBDUFUgdG8gc3RheSBvdXQgb2YgZHludGlja3MgbW9kZT8KICAqLwogc3RhdGljIGludCByY3VfcHJlZW1wdF9uZWVkc19jcHUoaW50IGNwdSkKIHsKQEAgLTc2Niw3ICs4MjQsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhcnJpZXIpOwogCiAvKgotICogSW5pdGlhbGl6ZSBwcmVlbXB0YWJsZSBSQ1UncyBwZXItQ1BVIGRhdGEuCisgKiBJbml0aWFsaXplIHByZWVtcHRpYmxlIFJDVSdzIHBlci1DUFUgZGF0YS4KICAqLwogc3RhdGljIHZvaWQgX19jcHVpbml0IHJjdV9wcmVlbXB0X2luaXRfcGVyY3B1X2RhdGEoaW50IGNwdSkKIHsKQEAgLTc3NCw3ICs4MzIsNyBAQAogfQogCiAvKgotICogTW92ZSBwcmVlbXB0YWJsZSBSQ1UncyBjYWxsYmFja3MgZnJvbSBkeWluZyBDUFUgdG8gb3RoZXIgb25saW5lIENQVS4KKyAqIE1vdmUgcHJlZW1wdGlibGUgUkNVJ3MgY2FsbGJhY2tzIGZyb20gZHlpbmcgQ1BVIHRvIG90aGVyIG9ubGluZSBDUFUuCiAgKi8KIHN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X3NlbmRfY2JzX3RvX29ubGluZSh2b2lkKQogewpAQCAtNzgyLDcgKzg0MCw3IEBACiB9CiAKIC8qCi0gKiBJbml0aWFsaXplIHByZWVtcHRhYmxlIFJDVSdzIHN0YXRlIHN0cnVjdHVyZXMuCisgKiBJbml0aWFsaXplIHByZWVtcHRpYmxlIFJDVSdzIHN0YXRlIHN0cnVjdHVyZXMuCiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBfX3JjdV9pbml0X3ByZWVtcHQodm9pZCkKIHsKQEAgLTc5MCw3ICs4NDgsNyBAQAogfQogCiAvKgotICogQ2hlY2sgZm9yIGEgdGFzayBleGl0aW5nIHdoaWxlIGluIGEgcHJlZW1wdGFibGUtUkNVIHJlYWQtc2lkZQorICogQ2hlY2sgZm9yIGEgdGFzayBleGl0aW5nIHdoaWxlIGluIGEgcHJlZW1wdGlibGUtUkNVIHJlYWQtc2lkZQogICogY3JpdGljYWwgc2VjdGlvbiwgY2xlYW4gdXAgaWYgc28uICBObyBuZWVkIHRvIGlzc3VlIHdhcm5pbmdzLAogICogYXMgZGVidWdfY2hlY2tfbm9fbG9ja3NfaGVsZCgpIGFscmVhZHkgZG9lcyB0aGlzIGlmIGxvY2tkZXAKICAqIGlzIGVuYWJsZWQuCkBAIC04MDIsMTEgKzg2MCwxMyBAQAogCWlmICh0LT5yY3VfcmVhZF9sb2NrX25lc3RpbmcgPT0gMCkKIAkJcmV0dXJuOwogCXQtPnJjdV9yZWFkX2xvY2tfbmVzdGluZyA9IDE7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CisJX19yY3VfcmVhZF91bmxvY2soKTsKIH0KIAogI2Vsc2UgLyogI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCiAKK3N0YXRpYyBzdHJ1Y3QgcmN1X3N0YXRlICpyY3Vfc3RhdGUgPSAmcmN1X3NjaGVkX3N0YXRlOworCiAvKgogICogVGVsbCB0aGVtIHdoYXQgUkNVIHRoZXkgYXJlIHJ1bm5pbmcuCiAgKi8KQEAgLTgzNiw3ICs4OTYsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwocmN1X2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSk7CiAKIC8qCi0gKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgd2UgbmV2ZXIgaGF2ZSB0byBjaGVjayBmb3IKKyAqIEJlY2F1c2UgcHJlZW1wdGlibGUgUkNVIGRvZXMgbm90IGV4aXN0LCB3ZSBuZXZlciBoYXZlIHRvIGNoZWNrIGZvcgogICogQ1BVcyBiZWluZyBpbiBxdWllc2NlbnQgc3RhdGVzLgogICovCiBzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9ub3RlX2NvbnRleHRfc3dpdGNoKGludCBjcHUpCkBAIC04NDQsMTAgKzkwNCwxMCBAQAogfQogCiAvKgotICogQmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIHRoZXJlIGFyZSBuZXZlciBhbnkgcHJlZW1wdGVkCisgKiBCZWNhdXNlIHByZWVtcHRpYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgdGhlcmUgYXJlIG5ldmVyIGFueSBwcmVlbXB0ZWQKICAqIFJDVSByZWFkZXJzLgogICovCi1zdGF0aWMgaW50IHJjdV9wcmVlbXB0ZWRfcmVhZGVycyhzdHJ1Y3QgcmN1X25vZGUgKnJucCkKK3N0YXRpYyBpbnQgcmN1X3ByZWVtcHRfYmxvY2tlZF9yZWFkZXJzX2NncChzdHJ1Y3QgcmN1X25vZGUgKnJucCkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTg2MiwxMCArOTIyLDggQEAKIAogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAotI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SCi0KIC8qCi0gKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgd2UgbmV2ZXIgaGF2ZSB0byBjaGVjayBmb3IKKyAqIEJlY2F1c2UgcHJlZW1wdGlibGUgUkNVIGRvZXMgbm90IGV4aXN0LCB3ZSBuZXZlciBoYXZlIHRvIGNoZWNrIGZvcgogICogdGFza3MgYmxvY2tlZCB3aXRoaW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucy4KICAqLwogc3RhdGljIHZvaWQgcmN1X3ByaW50X2RldGFpbF90YXNrX3N0YWxsKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKQEAgLTg3Myw3ICs5MzEsNyBAQAogfQogCiAvKgotICogQmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIHdlIG5ldmVyIGhhdmUgdG8gY2hlY2sgZm9yCisgKiBCZWNhdXNlIHByZWVtcHRpYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgd2UgbmV2ZXIgaGF2ZSB0byBjaGVjayBmb3IKICAqIHRhc2tzIGJsb2NrZWQgd2l0aGluIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMuCiAgKi8KIHN0YXRpYyB2b2lkIHJjdV9wcmludF90YXNrX3N0YWxsKHN0cnVjdCByY3Vfbm9kZSAqcm5wKQpAQCAtODg4LDEwICs5NDYsOCBAQAogewogfQogCi0jZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SICovCi0KIC8qCi0gKiBCZWNhdXNlIHRoZXJlIGlzIG5vIHByZWVtcHRhYmxlIFJDVSwgdGhlcmUgY2FuIGJlIG5vIHJlYWRlcnMgYmxvY2tlZCwKKyAqIEJlY2F1c2UgdGhlcmUgaXMgbm8gcHJlZW1wdGlibGUgUkNVLCB0aGVyZSBjYW4gYmUgbm8gcmVhZGVycyBibG9ja2VkLAogICogc28gdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBmb3IgYmxvY2tlZCB0YXNrcy4gIFNvIGNoZWNrIG9ubHkgZm9yCiAgKiBib2d1cyBxc21hc2sgdmFsdWVzLgogICovCkBAIC05MDMsNyArOTU5LDcgQEAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIAogLyoKLSAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBpdCBuZXZlciBuZWVkcyB0byBtaWdyYXRlCisgKiBCZWNhdXNlIHByZWVtcHRpYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgaXQgbmV2ZXIgbmVlZHMgdG8gbWlncmF0ZQogICogdGFza3MgdGhhdCB3ZXJlIGJsb2NrZWQgd2l0aGluIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMsIGFuZAogICogc3VjaCBub24tZXhpc3RlbnQgdGFza3MgY2Fubm90IHBvc3NpYmx5IGhhdmUgYmVlbiBibG9ja2luZyB0aGUgY3VycmVudAogICogZ3JhY2UgcGVyaW9kLgpAQCAtOTE2LDcgKzk3Miw3IEBACiB9CiAKIC8qCi0gKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgaXQgbmV2ZXIgbmVlZHMgQ1BVLW9mZmxpbmUKKyAqIEJlY2F1c2UgcHJlZW1wdGlibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBpdCBuZXZlciBuZWVkcyBDUFUtb2ZmbGluZQogICogcHJvY2Vzc2luZy4KICAqLwogc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfb2ZmbGluZV9jcHUoaW50IGNwdSkKQEAgLTkyNiw3ICs5ODIsNyBAQAogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAogLyoKLSAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBpdCBuZXZlciBoYXMgYW55IGNhbGxiYWNrcworICogQmVjYXVzZSBwcmVlbXB0aWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIGl0IG5ldmVyIGhhcyBhbnkgY2FsbGJhY2tzCiAgKiB0byBjaGVjay4KICAqLwogc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfY2hlY2tfY2FsbGJhY2tzKGludCBjcHUpCkBAIC05MzQsNyArOTkwLDcgQEAKIH0KIAogLyoKLSAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBpdCBuZXZlciBoYXMgYW55IGNhbGxiYWNrcworICogQmVjYXVzZSBwcmVlbXB0aWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIGl0IG5ldmVyIGhhcyBhbnkgY2FsbGJhY2tzCiAgKiB0byBwcm9jZXNzLgogICovCiBzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9wcm9jZXNzX2NhbGxiYWNrcyh2b2lkKQpAQCAtOTQzLDcgKzk5OSw3IEBACiAKIC8qCiAgKiBXYWl0IGZvciBhbiByY3UtcHJlZW1wdCBncmFjZSBwZXJpb2QsIGJ1dCBtYWtlIGl0IGhhcHBlbiBxdWlja2x5LgotICogQnV0IGJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBtYXAgdG8gcmN1LXNjaGVkLgorICogQnV0IGJlY2F1c2UgcHJlZW1wdGlibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBtYXAgdG8gcmN1LXNjaGVkLgogICovCiB2b2lkIHN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQodm9pZCkKIHsKQEAgLTk1NCw3ICsxMDEwLDcgQEAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIAogLyoKLSAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCB0aGVyZSBpcyBuZXZlciBhbnkgbmVlZCB0bworICogQmVjYXVzZSBwcmVlbXB0aWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIHRoZXJlIGlzIG5ldmVyIGFueSBuZWVkIHRvCiAgKiByZXBvcnQgb24gdGFza3MgcHJlZW1wdGVkIGluIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgZHVyaW5nCiAgKiBleHBlZGl0ZWQgUkNVIGdyYWNlIHBlcmlvZHMuCiAgKi8KQEAgLTk2Niw3ICsxMDIyLDcgQEAKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVICovCiAKIC8qCi0gKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgaXQgbmV2ZXIgaGFzIGFueSB3b3JrIHRvIGRvLgorICogQmVjYXVzZSBwcmVlbXB0aWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIGl0IG5ldmVyIGhhcyBhbnkgd29yayB0byBkby4KICAqLwogc3RhdGljIGludCByY3VfcHJlZW1wdF9wZW5kaW5nKGludCBjcHUpCiB7CkBAIC05NzQsNyArMTAzMCw3IEBACiB9CiAKIC8qCi0gKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgaXQgbmV2ZXIgbmVlZHMgYW55IENQVS4KKyAqIEJlY2F1c2UgcHJlZW1wdGlibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBpdCBuZXZlciBuZWVkcyBhbnkgQ1BVLgogICovCiBzdGF0aWMgaW50IHJjdV9wcmVlbXB0X25lZWRzX2NwdShpbnQgY3B1KQogewpAQCAtOTgyLDcgKzEwMzgsNyBAQAogfQogCiAvKgotICogQmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIHJjdV9iYXJyaWVyKCkgaXMganVzdAorICogQmVjYXVzZSBwcmVlbXB0aWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIHJjdV9iYXJyaWVyKCkgaXMganVzdAogICogYW5vdGhlciBuYW1lIGZvciByY3VfYmFycmllcl9zY2hlZCgpLgogICovCiB2b2lkIHJjdV9iYXJyaWVyKHZvaWQpCkBAIC05OTIsNyArMTA0OCw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChyY3VfYmFycmllcik7CiAKIC8qCi0gKiBCZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgdGhlcmUgaXMgbm8gcGVyLUNQVQorICogQmVjYXVzZSBwcmVlbXB0aWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIHRoZXJlIGlzIG5vIHBlci1DUFUKICAqIGRhdGEgdG8gaW5pdGlhbGl6ZS4KICAqLwogc3RhdGljIHZvaWQgX19jcHVpbml0IHJjdV9wcmVlbXB0X2luaXRfcGVyY3B1X2RhdGEoaW50IGNwdSkKQEAgLTEwMDAsMTQgKzEwNTYsMTQgQEAKIH0KIAogLyoKLSAqIEJlY2F1c2UgdGhlcmUgaXMgbm8gcHJlZW1wdGFibGUgUkNVLCB0aGVyZSBhcmUgbm8gY2FsbGJhY2tzIHRvIG1vdmUuCisgKiBCZWNhdXNlIHRoZXJlIGlzIG5vIHByZWVtcHRpYmxlIFJDVSwgdGhlcmUgYXJlIG5vIGNhbGxiYWNrcyB0byBtb3ZlLgogICovCiBzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9zZW5kX2Nic190b19vbmxpbmUodm9pZCkKIHsKIH0KIAogLyoKLSAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBpdCBuZWVkIG5vdCBiZSBpbml0aWFsaXplZC4KKyAqIEJlY2F1c2UgcHJlZW1wdGlibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBpdCBuZWVkIG5vdCBiZSBpbml0aWFsaXplZC4KICAqLwogc3RhdGljIHZvaWQgX19pbml0IF9fcmN1X2luaXRfcHJlZW1wdCh2b2lkKQogewpAQCAtMTAxNSw2ICsxMDcxLDI3NiBAQAogCiAjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVICovCiAKKyNpZmRlZiBDT05GSUdfUkNVX0JPT1NUCisKKyNpbmNsdWRlICJydG11dGV4X2NvbW1vbi5oIgorCisjaWZkZWYgQ09ORklHX1JDVV9UUkFDRQorCitzdGF0aWMgdm9pZCByY3VfaW5pdGlhdGVfYm9vc3RfdHJhY2Uoc3RydWN0IHJjdV9ub2RlICpybnApCit7CisJaWYgKGxpc3RfZW1wdHkoJnJucC0+YmxrZF90YXNrcykpCisJCXJucC0+bl9iYWxrX2Jsa2RfdGFza3MrKzsKKwllbHNlIGlmIChybnAtPmV4cF90YXNrcyA9PSBOVUxMICYmIHJucC0+Z3BfdGFza3MgPT0gTlVMTCkKKwkJcm5wLT5uX2JhbGtfZXhwX2dwX3Rhc2tzKys7CisJZWxzZSBpZiAocm5wLT5ncF90YXNrcyAhPSBOVUxMICYmIHJucC0+Ym9vc3RfdGFza3MgIT0gTlVMTCkKKwkJcm5wLT5uX2JhbGtfYm9vc3RfdGFza3MrKzsKKwllbHNlIGlmIChybnAtPmdwX3Rhc2tzICE9IE5VTEwgJiYgcm5wLT5xc21hc2sgIT0gMCkKKwkJcm5wLT5uX2JhbGtfbm90YmxvY2tlZCsrOworCWVsc2UgaWYgKHJucC0+Z3BfdGFza3MgIT0gTlVMTCAmJgorCQkgVUxPTkdfQ01QX0xUKGppZmZpZXMsIHJucC0+Ym9vc3RfdGltZSkpCisJCXJucC0+bl9iYWxrX25vdHlldCsrOworCWVsc2UKKwkJcm5wLT5uX2JhbGtfbm9zKys7Cit9CisKKyNlbHNlIC8qICNpZmRlZiBDT05GSUdfUkNVX1RSQUNFICovCisKK3N0YXRpYyB2b2lkIHJjdV9pbml0aWF0ZV9ib29zdF90cmFjZShzdHJ1Y3QgcmN1X25vZGUgKnJucCkKK3sKK30KKworI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfUkNVX1RSQUNFICovCisKKy8qCisgKiBDYXJyeSBvdXQgUkNVIHByaW9yaXR5IGJvb3N0aW5nIG9uIHRoZSB0YXNrIGluZGljYXRlZCBieSAtPmV4cF90YXNrcworICogb3IgLT5ib29zdF90YXNrcywgYWR2YW5jaW5nIHRoZSBwb2ludGVyIHRvIHRoZSBuZXh0IHRhc2sgaW4gdGhlCisgKiAtPmJsa2RfdGFza3MgbGlzdC4KKyAqCisgKiBOb3RlIHRoYXQgaXJxcyBtdXN0IGJlIGVuYWJsZWQ6IGJvb3N0aW5nIHRoZSB0YXNrIGNhbiBibG9jay4KKyAqIFJldHVybnMgMSBpZiB0aGVyZSBhcmUgbW9yZSB0YXNrcyBuZWVkaW5nIHRvIGJlIGJvb3N0ZWQuCisgKi8KK3N0YXRpYyBpbnQgcmN1X2Jvb3N0KHN0cnVjdCByY3Vfbm9kZSAqcm5wKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHJ0X211dGV4IG10eDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CisJc3RydWN0IGxpc3RfaGVhZCAqdGI7CisKKwlpZiAocm5wLT5leHBfdGFza3MgPT0gTlVMTCAmJiBybnAtPmJvb3N0X3Rhc2tzID09IE5VTEwpCisJCXJldHVybiAwOyAgLyogTm90aGluZyBsZWZ0IHRvIGJvb3N0LiAqLworCisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKKworCS8qCisJICogUmVjaGVjayB1bmRlciB0aGUgbG9jazogYWxsIHRhc2tzIGluIG5lZWQgb2YgYm9vc3RpbmcKKwkgKiBtaWdodCBleGl0IHRoZWlyIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMgb24gdGhlaXIgb3duLgorCSAqLworCWlmIChybnAtPmV4cF90YXNrcyA9PSBOVUxMICYmIHJucC0+Ym9vc3RfdGFza3MgPT0gTlVMTCkgeworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogUHJlZmVyZW50aWFsbHkgYm9vc3QgdGFza3MgYmxvY2tpbmcgZXhwZWRpdGVkIGdyYWNlIHBlcmlvZHMuCisJICogVGhpcyBjYW5ub3Qgc3RhcnZlIHRoZSBub3JtYWwgZ3JhY2UgcGVyaW9kcyBiZWNhdXNlIGEgc2Vjb25kCisJICogZXhwZWRpdGVkIGdyYWNlIHBlcmlvZCBtdXN0IGJvb3N0IGFsbCBibG9ja2VkIHRhc2tzLCBpbmNsdWRpbmcKKwkgKiB0aG9zZSBibG9ja2luZyB0aGUgcHJlLWV4aXN0aW5nIG5vcm1hbCBncmFjZSBwZXJpb2QuCisJICovCisJaWYgKHJucC0+ZXhwX3Rhc2tzICE9IE5VTEwpIHsKKwkJdGIgPSBybnAtPmV4cF90YXNrczsKKwkJcm5wLT5uX2V4cF9ib29zdHMrKzsKKwl9IGVsc2UgeworCQl0YiA9IHJucC0+Ym9vc3RfdGFza3M7CisJCXJucC0+bl9ub3JtYWxfYm9vc3RzKys7CisJfQorCXJucC0+bl90YXNrc19ib29zdGVkKys7CisKKwkvKgorCSAqIFdlIGJvb3N0IHRhc2sgdCBieSBtYW51ZmFjdHVyaW5nIGFuIHJ0X211dGV4IHRoYXQgYXBwZWFycyB0bworCSAqIGJlIGhlbGQgYnkgdGFzayB0LiAgV2UgbGVhdmUgYSBwb2ludGVyIHRvIHRoYXQgcnRfbXV0ZXggd2hlcmUKKwkgKiB0YXNrIHQgY2FuIGZpbmQgaXQsIGFuZCB0YXNrIHQgd2lsbCByZWxlYXNlIHRoZSBtdXRleCB3aGVuIGl0CisJICogZXhpdHMgaXRzIG91dGVybW9zdCBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uICBUaGVuCisJICogc2ltcGx5IGFjcXVpcmluZyB0aGlzIGFydGlmaWNpYWwgcnRfbXV0ZXggd2lsbCBib29zdCB0YXNrCisJICogdCdzIHByaW9yaXR5LiAgKFRoYW5rcyB0byB0Z2x4IGZvciBzdWdnZXN0aW5nIHRoaXMgYXBwcm9hY2ghKQorCSAqCisJICogTm90ZSB0aGF0IHRhc2sgdCBtdXN0IGFjcXVpcmUgcm5wLT5sb2NrIHRvIHJlbW92ZSBpdHNlbGYgZnJvbQorCSAqIHRoZSAtPmJsa2RfdGFza3MgbGlzdCwgd2hpY2ggaXQgd2lsbCBkbyBmcm9tIGV4aXQoKSBpZiBmcm9tCisJICogbm93aGVyZSBlbHNlLiAgV2UgdGhlcmVmb3JlIGFyZSBndWFyYW50ZWVkIHRoYXQgdGFzayB0IHdpbGwKKwkgKiBzdGF5IGFyb3VuZCBhdCBsZWFzdCB1bnRpbCB3ZSBkcm9wIHJucC0+bG9jay4gIE5vdGUgdGhhdAorCSAqIHJucC0+bG9jayBhbHNvIHJlc29sdmVzIHJhY2VzIGJldHdlZW4gb3VyIHByaW9yaXR5IGJvb3N0aW5nCisJICogYW5kIHRhc2sgdCdzIGV4aXRpbmcgaXRzIG91dGVybW9zdCBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsCisJICogc2VjdGlvbi4KKwkgKi8KKwl0ID0gY29udGFpbmVyX29mKHRiLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHJjdV9ub2RlX2VudHJ5KTsKKwlydF9tdXRleF9pbml0X3Byb3h5X2xvY2tlZCgmbXR4LCB0KTsKKwl0LT5yY3VfYm9vc3RfbXV0ZXggPSAmbXR4OworCXQtPnJjdV9yZWFkX3VubG9ja19zcGVjaWFsIHw9IFJDVV9SRUFEX1VOTE9DS19CT09TVEVEOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlydF9tdXRleF9sb2NrKCZtdHgpOyAgLyogU2lkZSBlZmZlY3Q6IGJvb3N0cyB0YXNrIHQncyBwcmlvcml0eS4gKi8KKwlydF9tdXRleF91bmxvY2soJm10eCk7ICAvKiBLZWVwIGxvY2tkZXAgaGFwcHkuICovCisKKwlyZXR1cm4gcm5wLT5leHBfdGFza3MgIT0gTlVMTCB8fCBybnAtPmJvb3N0X3Rhc2tzICE9IE5VTEw7Cit9CisKKy8qCisgKiBUaW1lciBoYW5kbGVyIHRvIGluaXRpYXRlIHdha2luZyB1cCBvZiBib29zdCBrdGhyZWFkcyB0aGF0CisgKiBoYXZlIHlpZWxkZWQgdGhlIENQVSBkdWUgdG8gZXhjZXNzaXZlIG51bWJlcnMgb2YgdGFza3MgdG8KKyAqIGJvb3N0LiAgV2Ugd2FrZSB1cCB0aGUgcGVyLXJjdV9ub2RlIGt0aHJlYWQsIHdoaWNoIGluIHR1cm4KKyAqIHdpbGwgd2FrZSB1cCB0aGUgYm9vc3RlciBrdGhyZWFkLgorICovCitzdGF0aWMgdm9pZCByY3VfYm9vc3Rfa3RocmVhZF90aW1lcih1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlpbnZva2VfcmN1X25vZGVfa3RocmVhZCgoc3RydWN0IHJjdV9ub2RlICopYXJnKTsKK30KKworLyoKKyAqIFByaW9yaXR5LWJvb3N0aW5nIGt0aHJlYWQuICBPbmUgcGVyIGxlYWYgcmN1X25vZGUgYW5kIG9uZSBmb3IgdGhlCisgKiByb290IHJjdV9ub2RlLgorICovCitzdGF0aWMgaW50IHJjdV9ib29zdF9rdGhyZWFkKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IChzdHJ1Y3QgcmN1X25vZGUgKilhcmc7CisJaW50IHNwaW5jbnQgPSAwOworCWludCBtb3JlMmJvb3N0OworCisJZm9yICg7OykgeworCQlybnAtPmJvb3N0X2t0aHJlYWRfc3RhdHVzID0gUkNVX0tUSFJFQURfV0FJVElORzsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHJucC0+Ym9vc3Rfd3EsIHJucC0+Ym9vc3RfdGFza3MgfHwKKwkJCQkJCQlybnAtPmV4cF90YXNrcyk7CisJCXJucC0+Ym9vc3Rfa3RocmVhZF9zdGF0dXMgPSBSQ1VfS1RIUkVBRF9SVU5OSU5HOworCQltb3JlMmJvb3N0ID0gcmN1X2Jvb3N0KHJucCk7CisJCWlmIChtb3JlMmJvb3N0KQorCQkJc3BpbmNudCsrOworCQllbHNlCisJCQlzcGluY250ID0gMDsKKwkJaWYgKHNwaW5jbnQgPiAxMCkgeworCQkJcmN1X3lpZWxkKHJjdV9ib29zdF9rdGhyZWFkX3RpbWVyLCAodW5zaWduZWQgbG9uZylybnApOworCQkJc3BpbmNudCA9IDA7CisJCX0KKwl9CisJLyogTk9UUkVBQ0hFRCAqLworCXJldHVybiAwOworfQorCisvKgorICogQ2hlY2sgdG8gc2VlIGlmIGl0IGlzIHRpbWUgdG8gc3RhcnQgYm9vc3RpbmcgUkNVIHJlYWRlcnMgdGhhdCBhcmUKKyAqIGJsb2NraW5nIHRoZSBjdXJyZW50IGdyYWNlIHBlcmlvZCwgYW5kLCBpZiBzbywgdGVsbCB0aGUgcGVyLXJjdV9ub2RlCisgKiBrdGhyZWFkIHRvIHN0YXJ0IGJvb3N0aW5nIHRoZW0uICBJZiB0aGVyZSBpcyBhbiBleHBlZGl0ZWQgZ3JhY2UKKyAqIHBlcmlvZCBpbiBwcm9ncmVzcywgaXQgaXMgYWx3YXlzIHRpbWUgdG8gYm9vc3QuCisgKgorICogVGhlIGNhbGxlciBtdXN0IGhvbGQgcm5wLT5sb2NrLCB3aGljaCB0aGlzIGZ1bmN0aW9uIHJlbGVhc2VzLAorICogYnV0IGlycXMgcmVtYWluIGRpc2FibGVkLiAgVGhlIC0+Ym9vc3Rfa3RocmVhZF90YXNrIGlzIGltbW9ydGFsLAorICogc28gd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBpdCBnb2luZyBhd2F5LgorICovCitzdGF0aWMgdm9pZCByY3VfaW5pdGlhdGVfYm9vc3Qoc3RydWN0IHJjdV9ub2RlICpybnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0OworCisJaWYgKCFyY3VfcHJlZW1wdF9ibG9ja2VkX3JlYWRlcnNfY2dwKHJucCkgJiYgcm5wLT5leHBfdGFza3MgPT0gTlVMTCkgeworCQlybnAtPm5fYmFsa19leHBfZ3BfdGFza3MrKzsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCWlmIChybnAtPmV4cF90YXNrcyAhPSBOVUxMIHx8CisJICAgIChybnAtPmdwX3Rhc2tzICE9IE5VTEwgJiYKKwkgICAgIHJucC0+Ym9vc3RfdGFza3MgPT0gTlVMTCAmJgorCSAgICAgcm5wLT5xc21hc2sgPT0gMCAmJgorCSAgICAgVUxPTkdfQ01QX0dFKGppZmZpZXMsIHJucC0+Ym9vc3RfdGltZSkpKSB7CisJCWlmIChybnAtPmV4cF90YXNrcyA9PSBOVUxMKQorCQkJcm5wLT5ib29zdF90YXNrcyA9IHJucC0+Z3BfdGFza3M7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwkJdCA9IHJucC0+Ym9vc3Rfa3RocmVhZF90YXNrOworCQlpZiAodCAhPSBOVUxMKQorCQkJd2FrZV91cF9wcm9jZXNzKHQpOworCX0gZWxzZSB7CisJCXJjdV9pbml0aWF0ZV9ib29zdF90cmFjZShybnApOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJfQorfQorCisvKgorICogU2V0IHRoZSBhZmZpbml0eSBvZiB0aGUgYm9vc3Qga3RocmVhZC4gIFRoZSBDUFUtaG90cGx1ZyBsb2NrcyBhcmUKKyAqIGhlbGQsIHNvIG5vIG9uZSBzaG91bGQgYmUgbWVzc2luZyB3aXRoIHRoZSBleGlzdGVuY2Ugb2YgdGhlIGJvb3N0CisgKiBrdGhyZWFkLgorICovCitzdGF0aWMgdm9pZCByY3VfYm9vc3Rfa3RocmVhZF9zZXRhZmZpbml0eShzdHJ1Y3QgcmN1X25vZGUgKnJucCwKKwkJCQkJICBjcHVtYXNrX3Zhcl90IGNtKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKKworCXQgPSBybnAtPmJvb3N0X2t0aHJlYWRfdGFzazsKKwlpZiAodCAhPSBOVUxMKQorCQlzZXRfY3B1c19hbGxvd2VkX3B0cihybnAtPmJvb3N0X2t0aHJlYWRfdGFzaywgY20pOworfQorCisjZGVmaW5lIFJDVV9CT09TVF9ERUxBWV9KSUZGSUVTIERJVl9ST1VORF9VUChDT05GSUdfUkNVX0JPT1NUX0RFTEFZICogSFosIDEwMDApCisKKy8qCisgKiBEbyBwcmlvcml0eS1ib29zdCBhY2NvdW50aW5nIGZvciB0aGUgc3RhcnQgb2YgYSBuZXcgZ3JhY2UgcGVyaW9kLgorICovCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9ib29zdF9zdGFydF9ncChzdHJ1Y3QgcmN1X25vZGUgKnJucCkKK3sKKwlybnAtPmJvb3N0X3RpbWUgPSBqaWZmaWVzICsgUkNVX0JPT1NUX0RFTEFZX0pJRkZJRVM7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBSQ1UtYm9vc3Qgd2FpdHF1ZXVlLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgcmN1X2luaXRfYm9vc3Rfd2FpdHF1ZXVlKHN0cnVjdCByY3Vfbm9kZSAqcm5wKQoreworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJucC0+Ym9vc3Rfd3EpOworfQorCisvKgorICogQ3JlYXRlIGFuIFJDVS1ib29zdCBrdGhyZWFkIGZvciB0aGUgc3BlY2lmaWVkIG5vZGUgaWYgb25lIGRvZXMgbm90CisgKiBhbHJlYWR5IGV4aXN0LiAgV2Ugb25seSBjcmVhdGUgdGhpcyBrdGhyZWFkIGZvciBwcmVlbXB0aWJsZSBSQ1UuCisgKiBSZXR1cm5zIHplcm8gaWYgYWxsIGlzIHdlbGwsIGEgbmVnYXRlZCBlcnJubyBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgX19jcHVpbml0IHJjdV9zcGF3bl9vbmVfYm9vc3Rfa3RocmVhZChzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsCisJCQkJCQkgc3RydWN0IHJjdV9ub2RlICpybnAsCisJCQkJCQkgaW50IHJucF9pbmRleCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzY2hlZF9wYXJhbSBzcDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CisKKwlpZiAoJnJjdV9wcmVlbXB0X3N0YXRlICE9IHJzcCkKKwkJcmV0dXJuIDA7CisJaWYgKHJucC0+Ym9vc3Rfa3RocmVhZF90YXNrICE9IE5VTEwpCisJCXJldHVybiAwOworCXQgPSBrdGhyZWFkX2NyZWF0ZShyY3VfYm9vc3Rfa3RocmVhZCwgKHZvaWQgKilybnAsCisJCQkgICAicmN1YiVkIiwgcm5wX2luZGV4KTsKKwlpZiAoSVNfRVJSKHQpKQorCQlyZXR1cm4gUFRSX0VSUih0KTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOworCXJucC0+Ym9vc3Rfa3RocmVhZF90YXNrID0gdDsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJd2FrZV91cF9wcm9jZXNzKHQpOworCXNwLnNjaGVkX3ByaW9yaXR5ID0gUkNVX0tUSFJFQURfUFJJTzsKKwlzY2hlZF9zZXRzY2hlZHVsZXJfbm9jaGVjayh0LCBTQ0hFRF9GSUZPLCAmc3ApOworCXJldHVybiAwOworfQorCisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1JDVV9CT09TVCAqLworCitzdGF0aWMgdm9pZCByY3VfaW5pdGlhdGVfYm9vc3Qoc3RydWN0IHJjdV9ub2RlICpybnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCByY3VfYm9vc3Rfa3RocmVhZF9zZXRhZmZpbml0eShzdHJ1Y3QgcmN1X25vZGUgKnJucCwKKwkJCQkJICBjcHVtYXNrX3Zhcl90IGNtKQoreworfQorCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9ib29zdF9zdGFydF9ncChzdHJ1Y3QgcmN1X25vZGUgKnJucCkKK3sKK30KKworc3RhdGljIHZvaWQgX19pbml0IHJjdV9pbml0X2Jvb3N0X3dhaXRxdWV1ZShzdHJ1Y3QgcmN1X25vZGUgKnJucCkKK3sKK30KKworc3RhdGljIGludCBfX2NwdWluaXQgcmN1X3NwYXduX29uZV9ib29zdF9rdGhyZWFkKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKKwkJCQkJCSBzdHJ1Y3QgcmN1X25vZGUgKnJucCwKKwkJCQkJCSBpbnQgcm5wX2luZGV4KQoreworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QgKi8KKwogI2lmbmRlZiBDT05GSUdfU01QCiAKIHZvaWQgc3luY2hyb25pemVfc2NoZWRfZXhwZWRpdGVkKHZvaWQpCkBAIC0xMTg3LDggKzE1MTMsOCBAQAogICoKICAqIEJlY2F1c2UgaXQgaXMgbm90IGxlZ2FsIHRvIGludm9rZSByY3VfcHJvY2Vzc19jYWxsYmFja3MoKSB3aXRoIGlycXMKICAqIGRpc2FibGVkLCB3ZSBkbyBvbmUgcGFzcyBvZiBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKSwgdGhlbiBkbyBhCi0gKiByYWlzZV9zb2Z0aXJxKCkgdG8gY2F1c2UgcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKCkgdG8gYmUgaW52b2tlZCBsYXRlci4KLSAqIFRoZSBwZXItY3B1IHJjdV9keW50aWNrX2RyYWluIHZhcmlhYmxlIGNvbnRyb2xzIHRoZSBzZXF1ZW5jaW5nLgorICogaW52b2tlX3JjdV9jcHVfa3RocmVhZCgpIHRvIGNhdXNlIHJjdV9wcm9jZXNzX2NhbGxiYWNrcygpIHRvIGJlIGludm9rZWQKKyAqIGxhdGVyLiAgVGhlIHBlci1jcHUgcmN1X2R5bnRpY2tfZHJhaW4gdmFyaWFibGUgY29udHJvbHMgdGhlIHNlcXVlbmNpbmcuCiAgKi8KIGludCByY3VfbmVlZHNfY3B1KGludCBjcHUpCiB7CkBAIC0xMjM5LDcgKzE1NjUsNyBAQAogCiAJLyogSWYgUkNVIGNhbGxiYWNrcyBhcmUgc3RpbGwgcGVuZGluZywgUkNVIHN0aWxsIG5lZWRzIHRoaXMgQ1BVLiAqLwogCWlmIChjKQotCQlyYWlzZV9zb2Z0aXJxKFJDVV9TT0ZUSVJRKTsKKwkJaW52b2tlX3JjdV9jcHVfa3RocmVhZCgpOwogCXJldHVybiBjOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZV90cmFjZS5jIGIva2VybmVsL3JjdXRyZWVfdHJhY2UuYwppbmRleCBjOGU5Nzg1Li5hYTBmZDcyIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dHJlZV90cmFjZS5jCisrKyBiL2tlcm5lbC9yY3V0cmVlX3RyYWNlLmMKQEAgLTQ2LDYgKzQ2LDE4IEBACiAjZGVmaW5lIFJDVV9UUkVFX05PTkNPUkUKICNpbmNsdWRlICJyY3V0cmVlLmgiCiAKK0RFQ0xBUkVfUEVSX0NQVSh1bnNpZ25lZCBpbnQsIHJjdV9jcHVfa3RocmVhZF9zdGF0dXMpOworREVDTEFSRV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgcmN1X2NwdV9rdGhyZWFkX2NwdSk7CitERUNMQVJFX1BFUl9DUFUodW5zaWduZWQgaW50LCByY3VfY3B1X2t0aHJlYWRfbG9vcHMpOworREVDTEFSRV9QRVJfQ1BVKGNoYXIsIHJjdV9jcHVfaGFzX3dvcmspOworCitzdGF0aWMgY2hhciBjb252ZXJ0X2t0aHJlYWRfc3RhdHVzKHVuc2lnbmVkIGludCBrdGhyZWFkX3N0YXR1cykKK3sKKwlpZiAoa3RocmVhZF9zdGF0dXMgPiBSQ1VfS1RIUkVBRF9NQVgpCisJCXJldHVybiAnPyc7CisJcmV0dXJuICJTUldPWSJba3RocmVhZF9zdGF0dXNdOworfQorCiBzdGF0aWMgdm9pZCBwcmludF9vbmVfcmN1X2RhdGEoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKIHsKIAlpZiAoIXJkcC0+YmVlbm9ubGluZSkKQEAgLTY0LDcgKzc2LDIxIEBACiAJCSAgIHJkcC0+ZHludGlja3NfZnFzKTsKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX05PX0haICovCiAJc2VxX3ByaW50ZihtLCAiIG9mPSVsdSByaT0lbHUiLCByZHAtPm9mZmxpbmVfZnFzLCByZHAtPnJlc2NoZWRfaXBpKTsKLQlzZXFfcHJpbnRmKG0sICIgcWw9JWxkIGI9JWxkIiwgcmRwLT5xbGVuLCByZHAtPmJsaW1pdCk7CisJc2VxX3ByaW50ZihtLCAiIHFsPSVsZCBxcz0lYyVjJWMlYyBrdD0lZC8lYy8lZCBrdGw9JXggYj0lbGQiLAorCQkgICByZHAtPnFsZW4sCisJCSAgICIuTiJbcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1JFQURZX1RBSUxdICE9CisJCQlyZHAtPm54dHRhaWxbUkNVX05FWFRfVEFJTF1dLAorCQkgICAiLlIiW3JkcC0+bnh0dGFpbFtSQ1VfV0FJVF9UQUlMXSAhPQorCQkJcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1JFQURZX1RBSUxdXSwKKwkJICAgIi5XIltyZHAtPm54dHRhaWxbUkNVX0RPTkVfVEFJTF0gIT0KKwkJCXJkcC0+bnh0dGFpbFtSQ1VfV0FJVF9UQUlMXV0sCisJCSAgICIuRCJbJnJkcC0+bnh0bGlzdCAhPSByZHAtPm54dHRhaWxbUkNVX0RPTkVfVEFJTF1dLAorCQkgICBwZXJfY3B1KHJjdV9jcHVfaGFzX3dvcmssIHJkcC0+Y3B1KSwKKwkJICAgY29udmVydF9rdGhyZWFkX3N0YXR1cyhwZXJfY3B1KHJjdV9jcHVfa3RocmVhZF9zdGF0dXMsCisJCQkJCSAgcmRwLT5jcHUpKSwKKwkJICAgcGVyX2NwdShyY3VfY3B1X2t0aHJlYWRfY3B1LCByZHAtPmNwdSksCisJCSAgIHBlcl9jcHUocmN1X2NwdV9rdGhyZWFkX2xvb3BzLCByZHAtPmNwdSkgJiAweGZmZmYsCisJCSAgIHJkcC0+YmxpbWl0KTsKIAlzZXFfcHJpbnRmKG0sICIgY2k9JWx1IGNvPSVsdSBjYT0lbHVcbiIsCiAJCSAgIHJkcC0+bl9jYnNfaW52b2tlZCwgcmRwLT5uX2Nic19vcnBoYW5lZCwgcmRwLT5uX2Nic19hZG9wdGVkKTsKIH0KQEAgLTEyMSw3ICsxNDcsMTggQEAKIAkJICAgcmRwLT5keW50aWNrc19mcXMpOwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfTk9fSFogKi8KIAlzZXFfcHJpbnRmKG0sICIsJWx1LCVsdSIsIHJkcC0+b2ZmbGluZV9mcXMsIHJkcC0+cmVzY2hlZF9pcGkpOwotCXNlcV9wcmludGYobSwgIiwlbGQsJWxkIiwgcmRwLT5xbGVuLCByZHAtPmJsaW1pdCk7CisJc2VxX3ByaW50ZihtLCAiLCVsZCxcIiVjJWMlYyVjXCIsJWQsXCIlY1wiLCVsZCIsIHJkcC0+cWxlbiwKKwkJICAgIi5OIltyZHAtPm54dHRhaWxbUkNVX05FWFRfUkVBRFlfVEFJTF0gIT0KKwkJCXJkcC0+bnh0dGFpbFtSQ1VfTkVYVF9UQUlMXV0sCisJCSAgICIuUiJbcmRwLT5ueHR0YWlsW1JDVV9XQUlUX1RBSUxdICE9CisJCQlyZHAtPm54dHRhaWxbUkNVX05FWFRfUkVBRFlfVEFJTF1dLAorCQkgICAiLlciW3JkcC0+bnh0dGFpbFtSQ1VfRE9ORV9UQUlMXSAhPQorCQkJcmRwLT5ueHR0YWlsW1JDVV9XQUlUX1RBSUxdXSwKKwkJICAgIi5EIlsmcmRwLT5ueHRsaXN0ICE9IHJkcC0+bnh0dGFpbFtSQ1VfRE9ORV9UQUlMXV0sCisJCSAgIHBlcl9jcHUocmN1X2NwdV9oYXNfd29yaywgcmRwLT5jcHUpLAorCQkgICBjb252ZXJ0X2t0aHJlYWRfc3RhdHVzKHBlcl9jcHUocmN1X2NwdV9rdGhyZWFkX3N0YXR1cywKKwkJCQkJICByZHAtPmNwdSkpLAorCQkgICByZHAtPmJsaW1pdCk7CiAJc2VxX3ByaW50ZihtLCAiLCVsdSwlbHUsJWx1XG4iLAogCQkgICByZHAtPm5fY2JzX2ludm9rZWQsIHJkcC0+bl9jYnNfb3JwaGFuZWQsIHJkcC0+bl9jYnNfYWRvcHRlZCk7CiB9CkBAIC0xNTcsMTEgKzE5NCw3NiBAQAogCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCiB9OwogCisjaWZkZWYgQ09ORklHX1JDVV9CT09TVAorCitzdGF0aWMgdm9pZCBwcmludF9vbmVfcmN1X25vZGVfYm9vc3Qoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgcmN1X25vZGUgKnJucCkKK3sKKwlzZXFfcHJpbnRmKG0sICAiJWQ6JWQgdGFza3M9JWMlYyVjJWMga3Q9JWMgbnRiPSVsdSBuZWI9JWx1IG5uYj0lbHUgIgorCQkgICAiaj0lMDR4IGJ0PSUwNHhcbiIsCisJCSAgIHJucC0+Z3JwbG8sIHJucC0+Z3JwaGksCisJCSAgICJULiJbbGlzdF9lbXB0eSgmcm5wLT5ibGtkX3Rhc2tzKV0sCisJCSAgICJOLiJbIXJucC0+Z3BfdGFza3NdLAorCQkgICAiRS4iWyFybnAtPmV4cF90YXNrc10sCisJCSAgICJCLiJbIXJucC0+Ym9vc3RfdGFza3NdLAorCQkgICBjb252ZXJ0X2t0aHJlYWRfc3RhdHVzKHJucC0+Ym9vc3Rfa3RocmVhZF9zdGF0dXMpLAorCQkgICBybnAtPm5fdGFza3NfYm9vc3RlZCwgcm5wLT5uX2V4cF9ib29zdHMsCisJCSAgIHJucC0+bl9ub3JtYWxfYm9vc3RzLAorCQkgICAoaW50KShqaWZmaWVzICYgMHhmZmZmKSwKKwkJICAgKGludCkocm5wLT5ib29zdF90aW1lICYgMHhmZmZmKSk7CisJc2VxX3ByaW50ZihtLCAiJXM6IG50PSVsdSBlZ3Q9JWx1IGJ0PSVsdSBuYj0lbHUgbnk9JWx1IG5vcz0lbHVcbiIsCisJCSAgICIgICAgIGJhbGsiLAorCQkgICBybnAtPm5fYmFsa19ibGtkX3Rhc2tzLAorCQkgICBybnAtPm5fYmFsa19leHBfZ3BfdGFza3MsCisJCSAgIHJucC0+bl9iYWxrX2Jvb3N0X3Rhc2tzLAorCQkgICBybnAtPm5fYmFsa19ub3RibG9ja2VkLAorCQkgICBybnAtPm5fYmFsa19ub3R5ZXQsCisJCSAgIHJucC0+bl9iYWxrX25vcyk7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19yY3Vfbm9kZV9ib29zdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKK3sKKwlzdHJ1Y3QgcmN1X25vZGUgKnJucDsKKworCXJjdV9mb3JfZWFjaF9sZWFmX25vZGUoJnJjdV9wcmVlbXB0X3N0YXRlLCBybnApCisJCXByaW50X29uZV9yY3Vfbm9kZV9ib29zdChtLCBybnApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJjdV9ub2RlX2Jvb3N0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHNob3dfcmN1X25vZGVfYm9vc3QsIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByY3Vfbm9kZV9ib29zdF9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gcmN1X25vZGVfYm9vc3Rfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKK307CisKKy8qCisgKiBDcmVhdGUgdGhlIHJjdWJvb3N0IGRlYnVnZnMgZW50cnkuICBTdGFuZGFyZCBlcnJvciByZXR1cm4uCisgKi8KK3N0YXRpYyBpbnQgcmN1X2Jvb3N0X3RyYWNlX2NyZWF0ZV9maWxlKHN0cnVjdCBkZW50cnkgKnJjdWRpcikKK3sKKwlyZXR1cm4gIWRlYnVnZnNfY3JlYXRlX2ZpbGUoInJjdWJvb3N0IiwgMDQ0NCwgcmN1ZGlyLCBOVUxMLAorCQkJCSAgICAmcmN1X25vZGVfYm9vc3RfZm9wcyk7Cit9CisKKyNlbHNlIC8qICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUICovCisKK3N0YXRpYyBpbnQgcmN1X2Jvb3N0X3RyYWNlX2NyZWF0ZV9maWxlKHN0cnVjdCBkZW50cnkgKnJjdWRpcikKK3sKKwlyZXR1cm4gMDsgIC8qIFRoZXJlIGNhbm5vdCBiZSBhbiBlcnJvciBpZiB3ZSBkaWRuJ3QgY3JlYXRlIGl0ISAqLworfQorCisjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QgKi8KKwogc3RhdGljIHZvaWQgcHJpbnRfb25lX3JjdV9zdGF0ZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKIHsKIAl1bnNpZ25lZCBsb25nIGdwbnVtOwogCWludCBsZXZlbCA9IDA7Ci0JaW50IHBoYXNlOwogCXN0cnVjdCByY3Vfbm9kZSAqcm5wOwogCiAJZ3BudW0gPSByc3AtPmdwbnVtOwpAQCAtMTc4LDEzICsyODAsMTEgQEAKIAkJCXNlcV9wdXRzKG0sICJcbiIpOwogCQkJbGV2ZWwgPSBybnAtPmxldmVsOwogCQl9Ci0JCXBoYXNlID0gZ3BudW0gJiAweDE7Ci0JCXNlcV9wcmludGYobSwgIiVseC8lbHggJWMlYz4lYyVjICVkOiVkIF4lZCAgICAiLAorCQlzZXFfcHJpbnRmKG0sICIlbHgvJWx4ICVjJWM+JWMgJWQ6JWQgXiVkICAgICIsCiAJCQkgICBybnAtPnFzbWFzaywgcm5wLT5xc21hc2tpbml0LAotCQkJICAgIlQuIltsaXN0X2VtcHR5KCZybnAtPmJsb2NrZWRfdGFza3NbcGhhc2VdKV0sCi0JCQkgICAiRS4iW2xpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1twaGFzZSArIDJdKV0sCi0JCQkgICAiVC4iW2xpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1shcGhhc2VdKV0sCi0JCQkgICAiRS4iW2xpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1shcGhhc2UgKyAyXSldLAorCQkJICAgIi5HIltybnAtPmdwX3Rhc2tzICE9IE5VTExdLAorCQkJICAgIi5FIltybnAtPmV4cF90YXNrcyAhPSBOVUxMXSwKKwkJCSAgICIuVCJbIWxpc3RfZW1wdHkoJnJucC0+YmxrZF90YXNrcyldLAogCQkJICAgcm5wLT5ncnBsbywgcm5wLT5ncnBoaSwgcm5wLT5ncnBudW0pOwogCX0KIAlzZXFfcHV0cyhtLCAiXG4iKTsKQEAgLTIxNiwxNiArMzE2LDM1IEBACiAJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAKK3N0YXRpYyB2b2lkIHNob3dfb25lX3JjdWdwKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHJjdV9zdGF0ZSAqcnNwKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBjb21wbGV0ZWQ7CisJdW5zaWduZWQgbG9uZyBncG51bTsKKwl1bnNpZ25lZCBsb25nIGdwYWdlOworCXVuc2lnbmVkIGxvbmcgZ3BtYXg7CisJc3RydWN0IHJjdV9ub2RlICpybnAgPSAmcnNwLT5ub2RlWzBdOworCisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwljb21wbGV0ZWQgPSByc3AtPmNvbXBsZXRlZDsKKwlncG51bSA9IHJzcC0+Z3BudW07CisJaWYgKHJzcC0+Y29tcGxldGVkID09IHJzcC0+Z3BudW0pCisJCWdwYWdlID0gMDsKKwllbHNlCisJCWdwYWdlID0gamlmZmllcyAtIHJzcC0+Z3Bfc3RhcnQ7CisJZ3BtYXggPSByc3AtPmdwX21heDsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJc2VxX3ByaW50ZihtLCAiJXM6IGNvbXBsZXRlZD0lbGQgIGdwbnVtPSVsdSAgYWdlPSVsZCAgbWF4PSVsZFxuIiwKKwkJICAgcnNwLT5uYW1lLCBjb21wbGV0ZWQsIGdwbnVtLCBncGFnZSwgZ3BtYXgpOworfQorCiBzdGF0aWMgaW50IHNob3dfcmN1Z3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCiB7CiAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKLQlzZXFfcHJpbnRmKG0sICJyY3VfcHJlZW1wdDogY29tcGxldGVkPSVsZCAgZ3BudW09JWx1XG4iLAotCQkgICByY3VfcHJlZW1wdF9zdGF0ZS5jb21wbGV0ZWQsIHJjdV9wcmVlbXB0X3N0YXRlLmdwbnVtKTsKKwlzaG93X29uZV9yY3VncChtLCAmcmN1X3ByZWVtcHRfc3RhdGUpOwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSAqLwotCXNlcV9wcmludGYobSwgInJjdV9zY2hlZDogY29tcGxldGVkPSVsZCAgZ3BudW09JWx1XG4iLAotCQkgICByY3Vfc2NoZWRfc3RhdGUuY29tcGxldGVkLCByY3Vfc2NoZWRfc3RhdGUuZ3BudW0pOwotCXNlcV9wcmludGYobSwgInJjdV9iaDogY29tcGxldGVkPSVsZCAgZ3BudW09JWx1XG4iLAotCQkgICByY3VfYmhfc3RhdGUuY29tcGxldGVkLCByY3VfYmhfc3RhdGUuZ3BudW0pOworCXNob3dfb25lX3JjdWdwKG0sICZyY3Vfc2NoZWRfc3RhdGUpOworCXNob3dfb25lX3JjdWdwKG0sICZyY3VfYmhfc3RhdGUpOwogCXJldHVybiAwOwogfQogCkBAIC0yOTgsNiArNDE3LDI5IEBACiAJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAKK3N0YXRpYyBpbnQgc2hvd19yY3V0b3J0dXJlKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQoreworCXNlcV9wcmludGYobSwgInJjdXRvcnR1cmUgdGVzdCBzZXF1ZW5jZTogJWx1ICVzXG4iLAorCQkgICByY3V0b3J0dXJlX3Rlc3RzZXEgPj4gMSwKKwkJICAgKHJjdXRvcnR1cmVfdGVzdHNlcSAmIDB4MSkgPyAiKHRlc3QgaW4gcHJvZ3Jlc3MpIiA6ICIiKTsKKwlzZXFfcHJpbnRmKG0sICJyY3V0b3J0dXJlIHVwZGF0ZSB2ZXJzaW9uIG51bWJlcjogJWx1XG4iLAorCQkgICByY3V0b3J0dXJlX3Zlcm51bSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmN1dG9ydHVyZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzaG93X3JjdXRvcnR1cmUsIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByY3V0b3J0dXJlX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSByY3V0b3J0dXJlX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCit9OworCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqcmN1ZGlyOwogCiBzdGF0aWMgaW50IF9faW5pdCByY3V0cmVlX3RyYWNlX2luaXQodm9pZCkKQEAgLTMxOCw2ICs0NjAsOSBAQAogCWlmICghcmV0dmFsKQogCQlnb3RvIGZyZWVfb3V0OwogCisJaWYgKHJjdV9ib29zdF90cmFjZV9jcmVhdGVfZmlsZShyY3VkaXIpKQorCQlnb3RvIGZyZWVfb3V0OworCiAJcmV0dmFsID0gZGVidWdmc19jcmVhdGVfZmlsZSgicmN1Z3AiLCAwNDQ0LCByY3VkaXIsIE5VTEwsICZyY3VncF9mb3BzKTsKIAlpZiAoIXJldHZhbCkKIAkJZ290byBmcmVlX291dDsKQEAgLTMzMSw2ICs0NzYsMTEgQEAKIAkJCQkJCU5VTEwsICZyY3VfcGVuZGluZ19mb3BzKTsKIAlpZiAoIXJldHZhbCkKIAkJZ290byBmcmVlX291dDsKKworCXJldHZhbCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInJjdXRvcnR1cmUiLCAwNDQ0LCByY3VkaXIsCisJCQkJCQlOVUxMLCAmcmN1dG9ydHVyZV9mb3BzKTsKKwlpZiAoIXJldHZhbCkKKwkJZ290byBmcmVlX291dDsKIAlyZXR1cm4gMDsKIGZyZWVfb3V0OgogCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShyY3VkaXIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkLmMgYi9rZXJuZWwvc2NoZWQuYwppbmRleCBjNGIzNDEwLi4wNTE2YWY0IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQuYworKysgYi9rZXJuZWwvc2NoZWQuYwpAQCAtMjMxLDcgKzIzMSw3IEBACiAjZW5kaWYKIAogLyoKLSAqIHNjaGVkX2RvbWFpbnNfbXV0ZXggc2VyaWFsaXplcyBjYWxscyB0byBhcmNoX2luaXRfc2NoZWRfZG9tYWlucywKKyAqIHNjaGVkX2RvbWFpbnNfbXV0ZXggc2VyaWFsaXplcyBjYWxscyB0byBpbml0X3NjaGVkX2RvbWFpbnMsCiAgKiBkZXRhY2hfZGVzdHJveV9kb21haW5zIGFuZCBwYXJ0aXRpb25fc2NoZWRfZG9tYWlucy4KICAqLwogc3RhdGljIERFRklORV9NVVRFWChzY2hlZF9kb21haW5zX211dGV4KTsKQEAgLTMyOCw3ICszMjgsOSBAQAogCSAqLwogCXN0cnVjdCBzY2hlZF9lbnRpdHkgKmN1cnIsICpuZXh0LCAqbGFzdCwgKnNraXA7CiAKKyNpZmRlZglDT05GSUdfU0NIRURfREVCVUcKIAl1bnNpZ25lZCBpbnQgbnJfc3ByZWFkX292ZXI7CisjZW5kaWYKIAogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECiAJc3RydWN0IHJxICpycTsJLyogY3B1IHJ1bnF1ZXVlIHRvIHdoaWNoIHRoaXMgY2ZzX3JxIGlzIGF0dGFjaGVkICovCkBAIC00MjAsNiArNDIyLDcgQEAKICAqLwogc3RydWN0IHJvb3RfZG9tYWluIHsKIAlhdG9taWNfdCByZWZjb3VudDsKKwlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwogCWNwdW1hc2tfdmFyX3Qgc3BhbjsKIAljcHVtYXNrX3Zhcl90IG9ubGluZTsKIApAQCAtNDYzLDcgKzQ2Niw3IEBACiAJdTY0IG5vaHpfc3RhbXA7CiAJdW5zaWduZWQgY2hhciBub2h6X2JhbGFuY2Vfa2ljazsKICNlbmRpZgotCXVuc2lnbmVkIGludCBza2lwX2Nsb2NrX3VwZGF0ZTsKKwlpbnQgc2tpcF9jbG9ja191cGRhdGU7CiAKIAkvKiBjYXB0dXJlIGxvYWQgZnJvbSAqYWxsKiB0YXNrcyBvbiB0aGlzIGNwdTogKi8KIAlzdHJ1Y3QgbG9hZF93ZWlnaHQgbG9hZDsKQEAgLTU3OCw3ICs1ODEsNyBAQAogCiAjZGVmaW5lIHJjdV9kZXJlZmVyZW5jZV9jaGVja19zY2hlZF9kb21haW4ocCkgXAogCXJjdV9kZXJlZmVyZW5jZV9jaGVjaygocCksIFwKLQkJCSAgICAgIHJjdV9yZWFkX2xvY2tfc2NoZWRfaGVsZCgpIHx8IFwKKwkJCSAgICAgIHJjdV9yZWFkX2xvY2tfaGVsZCgpIHx8IFwKIAkJCSAgICAgIGxvY2tkZXBfaXNfaGVsZCgmc2NoZWRfZG9tYWluc19tdXRleCkpCiAKIC8qCkBAIC02NDksNyArNjUyLDcgQEAKIHsKIAlzNjQgZGVsdGE7CiAKLQlpZiAocnEtPnNraXBfY2xvY2tfdXBkYXRlKQorCWlmIChycS0+c2tpcF9jbG9ja191cGRhdGUgPiAwKQogCQlyZXR1cm47CiAKIAlkZWx0YSA9IHNjaGVkX2Nsb2NrX2NwdShjcHVfb2YocnEpKSAtIHJxLT5jbG9jazsKQEAgLTEyMDcsMTEgKzEyMTAsMTcgQEAKIAlpbnQgaTsKIAlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKIAorCXJjdV9yZWFkX2xvY2soKTsKIAlmb3JfZWFjaF9kb21haW4oY3B1LCBzZCkgewotCQlmb3JfZWFjaF9jcHUoaSwgc2NoZWRfZG9tYWluX3NwYW4oc2QpKQotCQkJaWYgKCFpZGxlX2NwdShpKSkKLQkJCQlyZXR1cm4gaTsKKwkJZm9yX2VhY2hfY3B1KGksIHNjaGVkX2RvbWFpbl9zcGFuKHNkKSkgeworCQkJaWYgKCFpZGxlX2NwdShpKSkgeworCQkJCWNwdSA9IGk7CisJCQkJZ290byB1bmxvY2s7CisJCQl9CisJCX0KIAl9Cit1bmxvY2s6CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIGNwdTsKIH0KIC8qCkBAIC0xMzIxLDE1ICsxMzMwLDE1IEBACiB7CiAJdTY0IHRtcDsKIAorCXRtcCA9ICh1NjQpZGVsdGFfZXhlYyAqIHdlaWdodDsKKwogCWlmICghbHctPmludl93ZWlnaHQpIHsKIAkJaWYgKEJJVFNfUEVSX0xPTkcgPiAzMiAmJiB1bmxpa2VseShsdy0+d2VpZ2h0ID49IFdNVUxUX0NPTlNUKSkKIAkJCWx3LT5pbnZfd2VpZ2h0ID0gMTsKIAkJZWxzZQotCQkJbHctPmludl93ZWlnaHQgPSAxICsgKFdNVUxUX0NPTlNULWx3LT53ZWlnaHQvMikKLQkJCQkvIChsdy0+d2VpZ2h0KzEpOworCQkJbHctPmludl93ZWlnaHQgPSBXTVVMVF9DT05TVCAvIGx3LT53ZWlnaHQ7CiAJfQogCi0JdG1wID0gKHU2NClkZWx0YV9leGVjICogd2VpZ2h0OwogCS8qCiAJICogQ2hlY2sgd2hldGhlciB3ZSdkIG92ZXJmbG93IHRoZSA2NC1iaXQgbXVsdGlwbGljYXRpb246CiAJICovCkBAIC0yMTk5LDIxICsyMjA4LDYgQEAKIHN0YXRpYyBpbnQgbWlncmF0aW9uX2NwdV9zdG9wKHZvaWQgKmRhdGEpOwogCiAvKgotICogVGhlIHRhc2sncyBydW5xdWV1ZSBsb2NrIG11c3QgYmUgaGVsZC4KLSAqIFJldHVybnMgdHJ1ZSBpZiB5b3UgaGF2ZSB0byB3YWl0IGZvciBtaWdyYXRpb24gdGhyZWFkLgotICovCi1zdGF0aWMgYm9vbCBuZWVkX21pZ3JhdGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCi17Ci0JLyoKLQkgKiBJZiB0aGUgdGFzayBpcyBub3Qgb24gYSBydW5xdWV1ZSAoYW5kIG5vdCBydW5uaW5nKSwgdGhlbgotCSAqIHRoZSBuZXh0IHdha2UtdXAgd2lsbCBwcm9wZXJseSBwbGFjZSB0aGUgdGFzay4KLQkgKi8KLQlib29sIHJ1bm5pbmcgPSBwLT5vbl9ycSB8fCBwLT5vbl9jcHU7Ci0Jc21wX3JtYigpOyAvKiBmaW5pc2hfbG9ja19zd2l0Y2goKSAqLwotCXJldHVybiBydW5uaW5nOwotfQotCi0vKgogICogd2FpdF90YXNrX2luYWN0aXZlIC0gd2FpdCBmb3IgYSB0aHJlYWQgdG8gdW5zY2hlZHVsZS4KICAqCiAgKiBJZiBAbWF0Y2hfc3RhdGUgaXMgbm9uemVybywgaXQncyB0aGUgQHAtPnN0YXRlIHZhbHVlIGp1c3QgY2hlY2tlZCBhbmQKQEAgLTI0MjksMTIgKzI0MjMsMTQgQEAKIAkJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7CiAKIAkJc2NoZWRzdGF0X2luYyhwLCBzZS5zdGF0aXN0aWNzLm5yX3dha2V1cHNfcmVtb3RlKTsKKwkJcmN1X3JlYWRfbG9jaygpOwogCQlmb3JfZWFjaF9kb21haW4odGhpc19jcHUsIHNkKSB7CiAJCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIHNjaGVkX2RvbWFpbl9zcGFuKHNkKSkpIHsKIAkJCQlzY2hlZHN0YXRfaW5jKHNkLCB0dHd1X3dha2VfcmVtb3RlKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQorCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCkBAIC0yNzQ1LDcgKzI3NDEsNyBAQAogLyoKICAqIGZvcmsoKS9jbG9uZSgpLXRpbWUgc2V0dXA6CiAgKi8KLXZvaWQgc2NoZWRfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBjbG9uZV9mbGFncykKK3ZvaWQgc2NoZWRfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgY3B1ID0gZ2V0X2NwdSgpOwpAQCAtMjgyNyw3ICsyODIzLDcgQEAKICAqIHRoYXQgbXVzdCBiZSBkb25lIGZvciBldmVyeSBuZXdseSBjcmVhdGVkIGNvbnRleHQsIHRoZW4gcHV0cyB0aGUgdGFzawogICogb24gdGhlIHJ1bnF1ZXVlIGFuZCB3YWtlcyBpdC4KICAqLwotdm9pZCB3YWtlX3VwX25ld190YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncykKK3ZvaWQgd2FrZV91cF9uZXdfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcnEgKnJxOwpAQCAtNDAwOCw5ICs0MDA0LDYgQEAKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGJ5IHRoZSB0aW1lciBjb2RlLCB3aXRoIEhaIGZyZXF1ZW5jeS4KICAqIFdlIGNhbGwgaXQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgotICoKLSAqIEl0IGFsc28gZ2V0cyBjYWxsZWQgYnkgdGhlIGZvcmsgY29kZSwgd2hlbiBjaGFuZ2luZyB0aGUgcGFyZW50J3MKLSAqIHRpbWVzbGljZXMuCiAgKi8KIHZvaWQgc2NoZWR1bGVyX3RpY2sodm9pZCkKIHsKQEAgLTQxMzAsMTcgKzQxMjMsMTEgQEAKIAlwcm9maWxlX2hpdChTQ0hFRF9QUk9GSUxJTkcsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAKIAlzY2hlZHN0YXRfaW5jKHRoaXNfcnEoKSwgc2NoZWRfY291bnQpOwotI2lmZGVmIENPTkZJR19TQ0hFRFNUQVRTCi0JaWYgKHVubGlrZWx5KHByZXYtPmxvY2tfZGVwdGggPj0gMCkpIHsKLQkJc2NoZWRzdGF0X2luYyh0aGlzX3JxKCksIHJxX3NjaGVkX2luZm8uYmtsX2NvdW50KTsKLQkJc2NoZWRzdGF0X2luYyhwcmV2LCBzY2hlZF9pbmZvLmJrbF9jb3VudCk7Ci0JfQotI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIHB1dF9wcmV2X3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2KQogewotCWlmIChwcmV2LT5vbl9ycSkKKwlpZiAocHJldi0+b25fcnEgfHwgcnEtPnNraXBfY2xvY2tfdXBkYXRlIDwgMCkKIAkJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKIAlwcmV2LT5zY2hlZF9jbGFzcy0+cHV0X3ByZXZfdGFzayhycSwgcHJldik7CiB9CkBAIC01ODYxLDExICs1ODQ4LDggQEAKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKIAogCS8qIFNldCB0aGUgcHJlZW1wdCBjb3VudCBfb3V0c2lkZV8gdGhlIHNwaW5sb2NrcyEgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QUkVFTVBUKQotCXRhc2tfdGhyZWFkX2luZm8oaWRsZSktPnByZWVtcHRfY291bnQgPSAoaWRsZS0+bG9ja19kZXB0aCA+PSAwKTsKLSNlbHNlCiAJdGFza190aHJlYWRfaW5mbyhpZGxlKS0+cHJlZW1wdF9jb3VudCA9IDA7Ci0jZW5kaWYKKwogCS8qCiAJICogVGhlIGlkbGUgdGFza3MgaGF2ZSB0aGVpciBvd24sIHNpbXBsZSBzY2hlZHVsaW5nIGNsYXNzOgogCSAqLwpAQCAtNTk2MiwxMyArNTk0NiwxNSBAQAogCiAJcnEgPSB0YXNrX3JxX2xvY2socCwgJmZsYWdzKTsKIAorCWlmIChjcHVtYXNrX2VxdWFsKCZwLT5jcHVzX2FsbG93ZWQsIG5ld19tYXNrKSkKKwkJZ290byBvdXQ7CisKIAlpZiAoIWNwdW1hc2tfaW50ZXJzZWN0cyhuZXdfbWFzaywgY3B1X2FjdGl2ZV9tYXNrKSkgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAodW5saWtlbHkoKHAtPmZsYWdzICYgUEZfVEhSRUFEX0JPVU5EKSAmJiBwICE9IGN1cnJlbnQgJiYKLQkJICAgICAhY3B1bWFza19lcXVhbCgmcC0+Y3B1c19hbGxvd2VkLCBuZXdfbWFzaykpKSB7CisJaWYgKHVubGlrZWx5KChwLT5mbGFncyAmIFBGX1RIUkVBRF9CT1VORCkgJiYgcCAhPSBjdXJyZW50KSkgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CkBAIC01OTg1LDcgKzU5NzEsNyBAQAogCQlnb3RvIG91dDsKIAogCWRlc3RfY3B1ID0gY3B1bWFza19hbnlfYW5kKGNwdV9hY3RpdmVfbWFzaywgbmV3X21hc2spOwotCWlmIChuZWVkX21pZ3JhdGVfdGFzayhwKSkgeworCWlmIChwLT5vbl9ycSkgewogCQlzdHJ1Y3QgbWlncmF0aW9uX2FyZyBhcmcgPSB7IHAsIGRlc3RfY3B1IH07CiAJCS8qIE5lZWQgaGVscCBmcm9tIG1pZ3JhdGlvbiB0aHJlYWQ6IGRyb3AgbG9jayBhbmQgd2FpdC4gKi8KIAkJdGFza19ycV91bmxvY2socnEsIHAsICZmbGFncyk7CkBAIC02NDY1LDYgKzY0NTEsOCBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogCitzdGF0aWMgY3B1bWFza192YXJfdCBzY2hlZF9kb21haW5zX3RtcG1hc2s7IC8qIHNjaGVkX2RvbWFpbnNfbXV0ZXggKi8KKwogI2lmZGVmIENPTkZJR19TQ0hFRF9ERUJVRwogCiBzdGF0aWMgX19yZWFkX21vc3RseSBpbnQgc2NoZWRfZG9tYWluX2RlYnVnX2VuYWJsZWQ7CkBAIC02NTYwLDcgKzY1NDgsNiBAQAogCiBzdGF0aWMgdm9pZCBzY2hlZF9kb21haW5fZGVidWcoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCBjcHUpCiB7Ci0JY3B1bWFza192YXJfdCBncm91cG1hc2s7CiAJaW50IGxldmVsID0gMDsKIAogCWlmICghc2NoZWRfZG9tYWluX2RlYnVnX2VuYWJsZWQpCkBAIC02NTczLDIwICs2NTYwLDE0IEBACiAKIAlwcmludGsoS0VSTl9ERUJVRyAiQ1BVJWQgYXR0YWNoaW5nIHNjaGVkLWRvbWFpbjpcbiIsIGNwdSk7CiAKLQlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZncm91cG1hc2ssIEdGUF9LRVJORUwpKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJDYW5ub3QgbG9hZC1iYWxhbmNlIChvdXQgb2YgbWVtb3J5KVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KIAlmb3IgKDs7KSB7Ci0JCWlmIChzY2hlZF9kb21haW5fZGVidWdfb25lKHNkLCBjcHUsIGxldmVsLCBncm91cG1hc2spKQorCQlpZiAoc2NoZWRfZG9tYWluX2RlYnVnX29uZShzZCwgY3B1LCBsZXZlbCwgc2NoZWRfZG9tYWluc190bXBtYXNrKSkKIAkJCWJyZWFrOwogCQlsZXZlbCsrOwogCQlzZCA9IHNkLT5wYXJlbnQ7CiAJCWlmICghc2QpCiAJCQlicmVhazsKIAl9Ci0JZnJlZV9jcHVtYXNrX3Zhcihncm91cG1hc2spOwogfQogI2Vsc2UgLyogIUNPTkZJR19TQ0hFRF9ERUJVRyAqLwogIyBkZWZpbmUgc2NoZWRfZG9tYWluX2RlYnVnKHNkLCBjcHUpIGRvIHsgfSB3aGlsZSAoMCkKQEAgLTY2NDMsMTIgKzY2MjQsMTEgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgZnJlZV9yb290ZG9tYWluKHN0cnVjdCByb290X2RvbWFpbiAqcmQpCitzdGF0aWMgdm9pZCBmcmVlX3Jvb3Rkb21haW4oc3RydWN0IHJjdV9oZWFkICpyY3UpCiB7Ci0Jc3luY2hyb25pemVfc2NoZWQoKTsKKwlzdHJ1Y3Qgcm9vdF9kb21haW4gKnJkID0gY29udGFpbmVyX29mKHJjdSwgc3RydWN0IHJvb3RfZG9tYWluLCByY3UpOwogCiAJY3B1cHJpX2NsZWFudXAoJnJkLT5jcHVwcmkpOwotCiAJZnJlZV9jcHVtYXNrX3ZhcihyZC0+cnRvX21hc2spOwogCWZyZWVfY3B1bWFza192YXIocmQtPm9ubGluZSk7CiAJZnJlZV9jcHVtYXNrX3ZhcihyZC0+c3Bhbik7CkBAIC02Njg5LDcgKzY2NjksNyBAQAogCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKG9sZF9yZCkKLQkJZnJlZV9yb290ZG9tYWluKG9sZF9yZCk7CisJCWNhbGxfcmN1X3NjaGVkKCZvbGRfcmQtPnJjdSwgZnJlZV9yb290ZG9tYWluKTsKIH0KIAogc3RhdGljIGludCBpbml0X3Jvb3Rkb21haW4oc3RydWN0IHJvb3RfZG9tYWluICpyZCkKQEAgLTY3NDAsNiArNjcyMCwyNSBAQAogCXJldHVybiByZDsKIH0KIAorc3RhdGljIHZvaWQgZnJlZV9zY2hlZF9kb21haW4oc3RydWN0IHJjdV9oZWFkICpyY3UpCit7CisJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QgPSBjb250YWluZXJfb2YocmN1LCBzdHJ1Y3Qgc2NoZWRfZG9tYWluLCByY3UpOworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzZC0+Z3JvdXBzLT5yZWYpKQorCQlrZnJlZShzZC0+Z3JvdXBzKTsKKwlrZnJlZShzZCk7Cit9CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfc2NoZWRfZG9tYWluKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgY3B1KQoreworCWNhbGxfcmN1KCZzZC0+cmN1LCBmcmVlX3NjaGVkX2RvbWFpbik7Cit9CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfc2NoZWRfZG9tYWlucyhzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IGNwdSkKK3sKKwlmb3IgKDsgc2Q7IHNkID0gc2QtPnBhcmVudCkKKwkJZGVzdHJveV9zY2hlZF9kb21haW4oc2QsIGNwdSk7Cit9CisKIC8qCiAgKiBBdHRhY2ggdGhlIGRvbWFpbiAnc2QnIHRvICdjcHUnIGFzIGl0cyBiYXNlIGRvbWFpbi4gQ2FsbGVycyBtdXN0CiAgKiBob2xkIHRoZSBob3RwbHVnIGxvY2suCkBAIC02NzUwLDkgKzY3NDksNiBAQAogCXN0cnVjdCBycSAqcnEgPSBjcHVfcnEoY3B1KTsKIAlzdHJ1Y3Qgc2NoZWRfZG9tYWluICp0bXA7CiAKLQlmb3IgKHRtcCA9IHNkOyB0bXA7IHRtcCA9IHRtcC0+cGFyZW50KQotCQl0bXAtPnNwYW5fd2VpZ2h0ID0gY3B1bWFza193ZWlnaHQoc2NoZWRfZG9tYWluX3NwYW4odG1wKSk7Ci0KIAkvKiBSZW1vdmUgdGhlIHNjaGVkIGRvbWFpbnMgd2hpY2ggZG8gbm90IGNvbnRyaWJ1dGUgdG8gc2NoZWR1bGluZy4gKi8KIAlmb3IgKHRtcCA9IHNkOyB0bXA7ICkgewogCQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpwYXJlbnQgPSB0bXAtPnBhcmVudDsKQEAgLTY3NjMsMTIgKzY3NTksMTUgQEAKIAkJCXRtcC0+cGFyZW50ID0gcGFyZW50LT5wYXJlbnQ7CiAJCQlpZiAocGFyZW50LT5wYXJlbnQpCiAJCQkJcGFyZW50LT5wYXJlbnQtPmNoaWxkID0gdG1wOworCQkJZGVzdHJveV9zY2hlZF9kb21haW4ocGFyZW50LCBjcHUpOwogCQl9IGVsc2UKIAkJCXRtcCA9IHRtcC0+cGFyZW50OwogCX0KIAogCWlmIChzZCAmJiBzZF9kZWdlbmVyYXRlKHNkKSkgeworCQl0bXAgPSBzZDsKIAkJc2QgPSBzZC0+cGFyZW50OworCQlkZXN0cm95X3NjaGVkX2RvbWFpbih0bXAsIGNwdSk7CiAJCWlmIChzZCkKIAkJCXNkLT5jaGlsZCA9IE5VTEw7CiAJfQpAQCAtNjc3Niw3ICs2Nzc1LDkgQEAKIAlzY2hlZF9kb21haW5fZGVidWcoc2QsIGNwdSk7CiAKIAlycV9hdHRhY2hfcm9vdChycSwgcmQpOworCXRtcCA9IHJxLT5zZDsKIAlyY3VfYXNzaWduX3BvaW50ZXIocnEtPnNkLCBzZCk7CisJZGVzdHJveV9zY2hlZF9kb21haW5zKHRtcCwgY3B1KTsKIH0KIAogLyogY3B1cyB3aXRoIGlzb2xhdGVkIGRvbWFpbnMgKi8KQEAgLTY3OTIsNTYgKzY3OTMsNiBAQAogCiBfX3NldHVwKCJpc29sY3B1cz0iLCBpc29sYXRlZF9jcHVfc2V0dXApOwogCi0vKgotICogaW5pdF9zY2hlZF9idWlsZF9ncm91cHMgdGFrZXMgdGhlIGNwdW1hc2sgd2Ugd2lzaCB0byBzcGFuLCBhbmQgYSBwb2ludGVyCi0gKiB0byBhIGZ1bmN0aW9uIHdoaWNoIGlkZW50aWZpZXMgd2hhdCBncm91cChhbG9uZyB3aXRoIHNjaGVkIGdyb3VwKSBhIENQVQotICogYmVsb25ncyB0by4gVGhlIHJldHVybiB2YWx1ZSBvZiBncm91cF9mbiBtdXN0IGJlIGEgPj0gMCBhbmQgPCBucl9jcHVfaWRzCi0gKiAoZHVlIHRvIHRoZSBmYWN0IHRoYXQgd2Uga2VlcCB0cmFjayBvZiBncm91cHMgY292ZXJlZCB3aXRoIGEgc3RydWN0IGNwdW1hc2spLgotICoKLSAqIGluaXRfc2NoZWRfYnVpbGRfZ3JvdXBzIHdpbGwgYnVpbGQgYSBjaXJjdWxhciBsaW5rZWQgbGlzdCBvZiB0aGUgZ3JvdXBzCi0gKiBjb3ZlcmVkIGJ5IHRoZSBnaXZlbiBzcGFuLCBhbmQgd2lsbCBzZXQgZWFjaCBncm91cCdzIC0+Y3B1bWFzayBjb3JyZWN0bHksCi0gKiBhbmQgLT5jcHVfcG93ZXIgdG8gMC4KLSAqLwotc3RhdGljIHZvaWQKLWluaXRfc2NoZWRfYnVpbGRfZ3JvdXBzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpzcGFuLAotCQkJY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXAsCi0JCQlpbnQgKCpncm91cF9mbikoaW50IGNwdSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXAsCi0JCQkJCXN0cnVjdCBzY2hlZF9ncm91cCAqKnNnLAotCQkJCQlzdHJ1Y3QgY3B1bWFzayAqdG1wbWFzayksCi0JCQlzdHJ1Y3QgY3B1bWFzayAqY292ZXJlZCwgc3RydWN0IGNwdW1hc2sgKnRtcG1hc2spCi17Ci0Jc3RydWN0IHNjaGVkX2dyb3VwICpmaXJzdCA9IE5VTEwsICpsYXN0ID0gTlVMTDsKLQlpbnQgaTsKLQotCWNwdW1hc2tfY2xlYXIoY292ZXJlZCk7Ci0KLQlmb3JfZWFjaF9jcHUoaSwgc3BhbikgewotCQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKnNnOwotCQlpbnQgZ3JvdXAgPSBncm91cF9mbihpLCBjcHVfbWFwLCAmc2csIHRtcG1hc2spOwotCQlpbnQgajsKLQotCQlpZiAoY3B1bWFza190ZXN0X2NwdShpLCBjb3ZlcmVkKSkKLQkJCWNvbnRpbnVlOwotCi0JCWNwdW1hc2tfY2xlYXIoc2NoZWRfZ3JvdXBfY3B1cyhzZykpOwotCQlzZy0+Y3B1X3Bvd2VyID0gMDsKLQotCQlmb3JfZWFjaF9jcHUoaiwgc3BhbikgewotCQkJaWYgKGdyb3VwX2ZuKGosIGNwdV9tYXAsIE5VTEwsIHRtcG1hc2spICE9IGdyb3VwKQotCQkJCWNvbnRpbnVlOwotCi0JCQljcHVtYXNrX3NldF9jcHUoaiwgY292ZXJlZCk7Ci0JCQljcHVtYXNrX3NldF9jcHUoaiwgc2NoZWRfZ3JvdXBfY3B1cyhzZykpOwotCQl9Ci0JCWlmICghZmlyc3QpCi0JCQlmaXJzdCA9IHNnOwotCQlpZiAobGFzdCkKLQkJCWxhc3QtPm5leHQgPSBzZzsKLQkJbGFzdCA9IHNnOwotCX0KLQlsYXN0LT5uZXh0ID0gZmlyc3Q7Ci19Ci0KICNkZWZpbmUgU0RfTk9ERVNfUEVSX0RPTUFJTiAxNgogCiAjaWZkZWYgQ09ORklHX05VTUEKQEAgLTY4NTgsNyArNjgwOSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZShpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlcykKIHsKLQlpbnQgaSwgbiwgdmFsLCBtaW5fdmFsLCBiZXN0X25vZGUgPSAwOworCWludCBpLCBuLCB2YWwsIG1pbl92YWwsIGJlc3Rfbm9kZSA9IC0xOwogCiAJbWluX3ZhbCA9IElOVF9NQVg7CiAKQEAgLTY4ODIsNyArNjgzMyw4IEBACiAJCX0KIAl9CiAKLQlub2RlX3NldChiZXN0X25vZGUsICp1c2VkX25vZGVzKTsKKwlpZiAoYmVzdF9ub2RlICE9IC0xKQorCQlub2RlX3NldChiZXN0X25vZGUsICp1c2VkX25vZGVzKTsKIAlyZXR1cm4gYmVzdF9ub2RlOwogfQogCkBAIC02OTA4LDMxNSArNjg2MCwxMzAgQEAKIAogCWZvciAoaSA9IDE7IGkgPCBTRF9OT0RFU19QRVJfRE9NQUlOOyBpKyspIHsKIAkJaW50IG5leHRfbm9kZSA9IGZpbmRfbmV4dF9iZXN0X25vZGUobm9kZSwgJnVzZWRfbm9kZXMpOwotCisJCWlmIChuZXh0X25vZGUgPCAwKQorCQkJYnJlYWs7CiAJCWNwdW1hc2tfb3Ioc3Bhbiwgc3BhbiwgY3B1bWFza19vZl9ub2RlKG5leHRfbm9kZSkpOwogCX0KIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbm9kZV9tYXNrKGludCBjcHUpCit7CisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmc2NoZWRfZG9tYWluc19tdXRleCk7CisKKwlzY2hlZF9kb21haW5fbm9kZV9zcGFuKGNwdV90b19ub2RlKGNwdSksIHNjaGVkX2RvbWFpbnNfdG1wbWFzayk7CisKKwlyZXR1cm4gc2NoZWRfZG9tYWluc190bXBtYXNrOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9hbGxub2Rlc19tYXNrKGludCBjcHUpCit7CisJcmV0dXJuIGNwdV9wb3NzaWJsZV9tYXNrOworfQogI2VuZGlmIC8qIENPTkZJR19OVU1BICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X2NwdV9tYXNrKGludCBjcHUpCit7CisJcmV0dXJuIGNwdW1hc2tfb2Zfbm9kZShjcHVfdG9fbm9kZShjcHUpKTsKK30KKwogaW50IHNjaGVkX3NtdF9wb3dlcl9zYXZpbmdzID0gMCwgc2NoZWRfbWNfcG93ZXJfc2F2aW5ncyA9IDA7CiAKLS8qCi0gKiBUaGUgY3B1cyBtYXNrIGluIHNjaGVkX2dyb3VwIGFuZCBzY2hlZF9kb21haW4gaGFuZ3Mgb2ZmIHRoZSBlbmQuCi0gKgotICogKCBTZWUgdGhlIHRoZSBjb21tZW50cyBpbiBpbmNsdWRlL2xpbnV4L3NjaGVkLmg6c3RydWN0IHNjaGVkX2dyb3VwCi0gKiAgIGFuZCBzdHJ1Y3Qgc2NoZWRfZG9tYWluLiApCi0gKi8KLXN0cnVjdCBzdGF0aWNfc2NoZWRfZ3JvdXAgewotCXN0cnVjdCBzY2hlZF9ncm91cCBzZzsKLQlERUNMQVJFX0JJVE1BUChjcHVzLCBDT05GSUdfTlJfQ1BVUyk7Ci19OwotCi1zdHJ1Y3Qgc3RhdGljX3NjaGVkX2RvbWFpbiB7Ci0Jc3RydWN0IHNjaGVkX2RvbWFpbiBzZDsKLQlERUNMQVJFX0JJVE1BUChzcGFuLCBDT05GSUdfTlJfQ1BVUyk7CitzdHJ1Y3Qgc2RfZGF0YSB7CisJc3RydWN0IHNjaGVkX2RvbWFpbiAqKl9fcGVyY3B1IHNkOworCXN0cnVjdCBzY2hlZF9ncm91cCAqKl9fcGVyY3B1IHNnOwogfTsKIAogc3RydWN0IHNfZGF0YSB7Ci0jaWZkZWYgQ09ORklHX05VTUEKLQlpbnQJCQlzZF9hbGxub2RlczsKLQljcHVtYXNrX3Zhcl90CQlkb21haW5zcGFuOwotCWNwdW1hc2tfdmFyX3QJCWNvdmVyZWQ7Ci0JY3B1bWFza192YXJfdAkJbm90Y292ZXJlZDsKLSNlbmRpZgotCWNwdW1hc2tfdmFyX3QJCW5vZGVtYXNrOwotCWNwdW1hc2tfdmFyX3QJCXRoaXNfc2libGluZ19tYXA7Ci0JY3B1bWFza192YXJfdAkJdGhpc19jb3JlX21hcDsKLQljcHVtYXNrX3Zhcl90CQl0aGlzX2Jvb2tfbWFwOwotCWNwdW1hc2tfdmFyX3QJCXNlbmRfY292ZXJlZDsKLQljcHVtYXNrX3Zhcl90CQl0bXBtYXNrOwotCXN0cnVjdCBzY2hlZF9ncm91cAkqKnNjaGVkX2dyb3VwX25vZGVzOworCXN0cnVjdCBzY2hlZF9kb21haW4gKiogX19wZXJjcHUgc2Q7CiAJc3RydWN0IHJvb3RfZG9tYWluCSpyZDsKIH07CiAKIGVudW0gc19hbGxvYyB7Ci0Jc2Ffc2NoZWRfZ3JvdXBzID0gMCwKIAlzYV9yb290ZG9tYWluLAotCXNhX3RtcG1hc2ssCi0Jc2Ffc2VuZF9jb3ZlcmVkLAotCXNhX3RoaXNfYm9va19tYXAsCi0Jc2FfdGhpc19jb3JlX21hcCwKLQlzYV90aGlzX3NpYmxpbmdfbWFwLAotCXNhX25vZGVtYXNrLAotCXNhX3NjaGVkX2dyb3VwX25vZGVzLAotI2lmZGVmIENPTkZJR19OVU1BCi0Jc2Ffbm90Y292ZXJlZCwKLQlzYV9jb3ZlcmVkLAotCXNhX2RvbWFpbnNwYW4sCi0jZW5kaWYKKwlzYV9zZCwKKwlzYV9zZF9zdG9yYWdlLAogCXNhX25vbmUsCiB9OwogCi0vKgotICogU01UIHNjaGVkLWRvbWFpbnM6Ci0gKi8KLSNpZmRlZiBDT05GSUdfU0NIRURfU01UCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHN0YXRpY19zY2hlZF9kb21haW4sIGNwdV9kb21haW5zKTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc3RhdGljX3NjaGVkX2dyb3VwLCBzY2hlZF9ncm91cHMpOworc3RydWN0IHNjaGVkX2RvbWFpbl90b3BvbG9neV9sZXZlbDsKIAotc3RhdGljIGludAotY3B1X3RvX2NwdV9ncm91cChpbnQgY3B1LCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X21hcCwKLQkJIHN0cnVjdCBzY2hlZF9ncm91cCAqKnNnLCBzdHJ1Y3QgY3B1bWFzayAqdW51c2VkKQordHlwZWRlZiBzdHJ1Y3Qgc2NoZWRfZG9tYWluICooKnNjaGVkX2RvbWFpbl9pbml0X2YpKHN0cnVjdCBzY2hlZF9kb21haW5fdG9wb2xvZ3lfbGV2ZWwgKnRsLCBpbnQgY3B1KTsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IGNwdW1hc2sgKigqc2NoZWRfZG9tYWluX21hc2tfZikoaW50IGNwdSk7CisKK3N0cnVjdCBzY2hlZF9kb21haW5fdG9wb2xvZ3lfbGV2ZWwgeworCXNjaGVkX2RvbWFpbl9pbml0X2YgaW5pdDsKKwlzY2hlZF9kb21haW5fbWFza19mIG1hc2s7CisJc3RydWN0IHNkX2RhdGEgICAgICBkYXRhOworfTsKKworLyoKKyAqIEFzc3VtZXMgdGhlIHNjaGVkX2RvbWFpbiB0cmVlIGlzIGZ1bGx5IGNvbnN0cnVjdGVkCisgKi8KK3N0YXRpYyBpbnQgZ2V0X2dyb3VwKGludCBjcHUsIHN0cnVjdCBzZF9kYXRhICpzZGQsIHN0cnVjdCBzY2hlZF9ncm91cCAqKnNnKQogeworCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkID0gKnBlcl9jcHVfcHRyKHNkZC0+c2QsIGNwdSk7CisJc3RydWN0IHNjaGVkX2RvbWFpbiAqY2hpbGQgPSBzZC0+Y2hpbGQ7CisKKwlpZiAoY2hpbGQpCisJCWNwdSA9IGNwdW1hc2tfZmlyc3Qoc2NoZWRfZG9tYWluX3NwYW4oY2hpbGQpKTsKKwogCWlmIChzZykKLQkJKnNnID0gJnBlcl9jcHUoc2NoZWRfZ3JvdXBzLCBjcHUpLnNnOworCQkqc2cgPSAqcGVyX2NwdV9wdHIoc2RkLT5zZywgY3B1KTsKKwogCXJldHVybiBjcHU7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1NDSEVEX1NNVCAqLwogCiAvKgotICogbXVsdGktY29yZSBzY2hlZC1kb21haW5zOgorICogYnVpbGRfc2NoZWRfZ3JvdXBzIHRha2VzIHRoZSBjcHVtYXNrIHdlIHdpc2ggdG8gc3BhbiwgYW5kIGEgcG9pbnRlcgorICogdG8gYSBmdW5jdGlvbiB3aGljaCBpZGVudGlmaWVzIHdoYXQgZ3JvdXAoYWxvbmcgd2l0aCBzY2hlZCBncm91cCkgYSBDUFUKKyAqIGJlbG9uZ3MgdG8uIFRoZSByZXR1cm4gdmFsdWUgb2YgZ3JvdXBfZm4gbXVzdCBiZSBhID49IDAgYW5kIDwgbnJfY3B1X2lkcworICogKGR1ZSB0byB0aGUgZmFjdCB0aGF0IHdlIGtlZXAgdHJhY2sgb2YgZ3JvdXBzIGNvdmVyZWQgd2l0aCBhIHN0cnVjdCBjcHVtYXNrKS4KKyAqCisgKiBidWlsZF9zY2hlZF9ncm91cHMgd2lsbCBidWlsZCBhIGNpcmN1bGFyIGxpbmtlZCBsaXN0IG9mIHRoZSBncm91cHMKKyAqIGNvdmVyZWQgYnkgdGhlIGdpdmVuIHNwYW4sIGFuZCB3aWxsIHNldCBlYWNoIGdyb3VwJ3MgLT5jcHVtYXNrIGNvcnJlY3RseSwKKyAqIGFuZCAtPmNwdV9wb3dlciB0byAwLgogICovCi0jaWZkZWYgQ09ORklHX1NDSEVEX01DCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHN0YXRpY19zY2hlZF9kb21haW4sIGNvcmVfZG9tYWlucyk7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHN0YXRpY19zY2hlZF9ncm91cCwgc2NoZWRfZ3JvdXBfY29yZSk7Ci0KLXN0YXRpYyBpbnQKLWNwdV90b19jb3JlX2dyb3VwKGludCBjcHUsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwLAotCQkgIHN0cnVjdCBzY2hlZF9ncm91cCAqKnNnLCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKK3N0YXRpYyB2b2lkCitidWlsZF9zY2hlZF9ncm91cHMoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QpCiB7Ci0JaW50IGdyb3VwOwotI2lmZGVmIENPTkZJR19TQ0hFRF9TTVQKLQljcHVtYXNrX2FuZChtYXNrLCB0b3BvbG9neV90aHJlYWRfY3B1bWFzayhjcHUpLCBjcHVfbWFwKTsKLQlncm91cCA9IGNwdW1hc2tfZmlyc3QobWFzayk7Ci0jZWxzZQotCWdyb3VwID0gY3B1OwotI2VuZGlmCi0JaWYgKHNnKQotCQkqc2cgPSAmcGVyX2NwdShzY2hlZF9ncm91cF9jb3JlLCBncm91cCkuc2c7Ci0JcmV0dXJuIGdyb3VwOwotfQotI2VuZGlmIC8qIENPTkZJR19TQ0hFRF9NQyAqLworCXN0cnVjdCBzY2hlZF9ncm91cCAqZmlyc3QgPSBOVUxMLCAqbGFzdCA9IE5VTEw7CisJc3RydWN0IHNkX2RhdGEgKnNkZCA9IHNkLT5wcml2YXRlOworCWNvbnN0IHN0cnVjdCBjcHVtYXNrICpzcGFuID0gc2NoZWRfZG9tYWluX3NwYW4oc2QpOworCXN0cnVjdCBjcHVtYXNrICpjb3ZlcmVkOworCWludCBpOwogCi0vKgotICogYm9vayBzY2hlZC1kb21haW5zOgotICovCi0jaWZkZWYgQ09ORklHX1NDSEVEX0JPT0sKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc3RhdGljX3NjaGVkX2RvbWFpbiwgYm9va19kb21haW5zKTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc3RhdGljX3NjaGVkX2dyb3VwLCBzY2hlZF9ncm91cF9ib29rKTsKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZzY2hlZF9kb21haW5zX211dGV4KTsKKwljb3ZlcmVkID0gc2NoZWRfZG9tYWluc190bXBtYXNrOwogCi1zdGF0aWMgaW50Ci1jcHVfdG9fYm9va19ncm91cChpbnQgY3B1LCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X21hcCwKLQkJICBzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKipzZywgc3RydWN0IGNwdW1hc2sgKm1hc2spCi17Ci0JaW50IGdyb3VwID0gY3B1OwotI2lmZGVmIENPTkZJR19TQ0hFRF9NQwotCWNwdW1hc2tfYW5kKG1hc2ssIGNwdV9jb3JlZ3JvdXBfbWFzayhjcHUpLCBjcHVfbWFwKTsKLQlncm91cCA9IGNwdW1hc2tfZmlyc3QobWFzayk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9TTVQpCi0JY3B1bWFza19hbmQobWFzaywgdG9wb2xvZ3lfdGhyZWFkX2NwdW1hc2soY3B1KSwgY3B1X21hcCk7Ci0JZ3JvdXAgPSBjcHVtYXNrX2ZpcnN0KG1hc2spOwotI2VuZGlmCi0JaWYgKHNnKQotCQkqc2cgPSAmcGVyX2NwdShzY2hlZF9ncm91cF9ib29rLCBncm91cCkuc2c7Ci0JcmV0dXJuIGdyb3VwOwotfQotI2VuZGlmIC8qIENPTkZJR19TQ0hFRF9CT09LICovCisJY3B1bWFza19jbGVhcihjb3ZlcmVkKTsKIAotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzdGF0aWNfc2NoZWRfZG9tYWluLCBwaHlzX2RvbWFpbnMpOwotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzdGF0aWNfc2NoZWRfZ3JvdXAsIHNjaGVkX2dyb3VwX3BoeXMpOworCWZvcl9lYWNoX2NwdShpLCBzcGFuKSB7CisJCXN0cnVjdCBzY2hlZF9ncm91cCAqc2c7CisJCWludCBncm91cCA9IGdldF9ncm91cChpLCBzZGQsICZzZyk7CisJCWludCBqOwogCi1zdGF0aWMgaW50Ci1jcHVfdG9fcGh5c19ncm91cChpbnQgY3B1LCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X21hcCwKLQkJICBzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKipzZywgc3RydWN0IGNwdW1hc2sgKm1hc2spCi17Ci0JaW50IGdyb3VwOwotI2lmZGVmIENPTkZJR19TQ0hFRF9CT09LCi0JY3B1bWFza19hbmQobWFzaywgY3B1X2Jvb2tfbWFzayhjcHUpLCBjcHVfbWFwKTsKLQlncm91cCA9IGNwdW1hc2tfZmlyc3QobWFzayk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9NQykKLQljcHVtYXNrX2FuZChtYXNrLCBjcHVfY29yZWdyb3VwX21hc2soY3B1KSwgY3B1X21hcCk7Ci0JZ3JvdXAgPSBjcHVtYXNrX2ZpcnN0KG1hc2spOwotI2VsaWYgZGVmaW5lZChDT05GSUdfU0NIRURfU01UKQotCWNwdW1hc2tfYW5kKG1hc2ssIHRvcG9sb2d5X3RocmVhZF9jcHVtYXNrKGNwdSksIGNwdV9tYXApOwotCWdyb3VwID0gY3B1bWFza19maXJzdChtYXNrKTsKLSNlbHNlCi0JZ3JvdXAgPSBjcHU7Ci0jZW5kaWYKLQlpZiAoc2cpCi0JCSpzZyA9ICZwZXJfY3B1KHNjaGVkX2dyb3VwX3BoeXMsIGdyb3VwKS5zZzsKLQlyZXR1cm4gZ3JvdXA7Ci19Ci0KLSNpZmRlZiBDT05GSUdfTlVNQQotLyoKLSAqIFRoZSBpbml0X3NjaGVkX2J1aWxkX2dyb3VwcyBjYW4ndCBoYW5kbGUgd2hhdCB3ZSB3YW50IHRvIGRvIHdpdGggbm9kZQotICogZ3JvdXBzLCBzbyByb2xsIG91ciBvd24uIE5vdyBlYWNoIG5vZGUgaGFzIGl0cyBvd24gbGlzdCBvZiBncm91cHMgd2hpY2gKLSAqIGdldHMgZHluYW1pY2FsbHkgYWxsb2NhdGVkLgotICovCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHN0YXRpY19zY2hlZF9kb21haW4sIG5vZGVfZG9tYWlucyk7Ci1zdGF0aWMgc3RydWN0IHNjaGVkX2dyb3VwICoqKnNjaGVkX2dyb3VwX25vZGVzX2J5Y3B1OwotCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHN0YXRpY19zY2hlZF9kb21haW4sIGFsbG5vZGVzX2RvbWFpbnMpOwotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzdGF0aWNfc2NoZWRfZ3JvdXAsIHNjaGVkX2dyb3VwX2FsbG5vZGVzKTsKLQotc3RhdGljIGludCBjcHVfdG9fYWxsbm9kZXNfZ3JvdXAoaW50IGNwdSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXAsCi0JCQkJIHN0cnVjdCBzY2hlZF9ncm91cCAqKnNnLAotCQkJCSBzdHJ1Y3QgY3B1bWFzayAqbm9kZW1hc2spCi17Ci0JaW50IGdyb3VwOwotCi0JY3B1bWFza19hbmQobm9kZW1hc2ssIGNwdW1hc2tfb2Zfbm9kZShjcHVfdG9fbm9kZShjcHUpKSwgY3B1X21hcCk7Ci0JZ3JvdXAgPSBjcHVtYXNrX2ZpcnN0KG5vZGVtYXNrKTsKLQotCWlmIChzZykKLQkJKnNnID0gJnBlcl9jcHUoc2NoZWRfZ3JvdXBfYWxsbm9kZXMsIGdyb3VwKS5zZzsKLQlyZXR1cm4gZ3JvdXA7Ci19Ci0KLXN0YXRpYyB2b2lkIGluaXRfbnVtYV9zY2hlZF9ncm91cHNfcG93ZXIoc3RydWN0IHNjaGVkX2dyb3VwICpncm91cF9oZWFkKQotewotCXN0cnVjdCBzY2hlZF9ncm91cCAqc2cgPSBncm91cF9oZWFkOwotCWludCBqOwotCi0JaWYgKCFzZykKLQkJcmV0dXJuOwotCWRvIHsKLQkJZm9yX2VhY2hfY3B1KGosIHNjaGVkX2dyb3VwX2NwdXMoc2cpKSB7Ci0JCQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKLQotCQkJc2QgPSAmcGVyX2NwdShwaHlzX2RvbWFpbnMsIGopLnNkOwotCQkJaWYgKGogIT0gZ3JvdXBfZmlyc3RfY3B1KHNkLT5ncm91cHMpKSB7Ci0JCQkJLyoKLQkJCQkgKiBPbmx5IGFkZCAicG93ZXIiIG9uY2UgZm9yIGVhY2gKLQkJCQkgKiBwaHlzaWNhbCBwYWNrYWdlLgotCQkJCSAqLwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlzZy0+Y3B1X3Bvd2VyICs9IHNkLT5ncm91cHMtPmNwdV9wb3dlcjsKLQkJfQotCQlzZyA9IHNnLT5uZXh0OwotCX0gd2hpbGUgKHNnICE9IGdyb3VwX2hlYWQpOwotfQotCi1zdGF0aWMgaW50IGJ1aWxkX251bWFfc2NoZWRfZ3JvdXBzKHN0cnVjdCBzX2RhdGEgKmQsCi0JCQkJICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXAsIGludCBudW0pCi17Ci0Jc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7Ci0Jc3RydWN0IHNjaGVkX2dyb3VwICpzZywgKnByZXY7Ci0JaW50IG4sIGo7Ci0KLQljcHVtYXNrX2NsZWFyKGQtPmNvdmVyZWQpOwotCWNwdW1hc2tfYW5kKGQtPm5vZGVtYXNrLCBjcHVtYXNrX29mX25vZGUobnVtKSwgY3B1X21hcCk7Ci0JaWYgKGNwdW1hc2tfZW1wdHkoZC0+bm9kZW1hc2spKSB7Ci0JCWQtPnNjaGVkX2dyb3VwX25vZGVzW251bV0gPSBOVUxMOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlzY2hlZF9kb21haW5fbm9kZV9zcGFuKG51bSwgZC0+ZG9tYWluc3Bhbik7Ci0JY3B1bWFza19hbmQoZC0+ZG9tYWluc3BhbiwgZC0+ZG9tYWluc3BhbiwgY3B1X21hcCk7Ci0KLQlzZyA9IGttYWxsb2Nfbm9kZShzaXplb2Yoc3RydWN0IHNjaGVkX2dyb3VwKSArIGNwdW1hc2tfc2l6ZSgpLAotCQkJICBHRlBfS0VSTkVMLCBudW0pOwotCWlmICghc2cpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuIG5vdCBhbGxvYyBkb21haW4gZ3JvdXAgZm9yIG5vZGUgJWRcbiIsCi0JCSAgICAgICBudW0pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JZC0+c2NoZWRfZ3JvdXBfbm9kZXNbbnVtXSA9IHNnOwotCi0JZm9yX2VhY2hfY3B1KGosIGQtPm5vZGVtYXNrKSB7Ci0JCXNkID0gJnBlcl9jcHUobm9kZV9kb21haW5zLCBqKS5zZDsKLQkJc2QtPmdyb3VwcyA9IHNnOwotCX0KLQotCXNnLT5jcHVfcG93ZXIgPSAwOwotCWNwdW1hc2tfY29weShzY2hlZF9ncm91cF9jcHVzKHNnKSwgZC0+bm9kZW1hc2spOwotCXNnLT5uZXh0ID0gc2c7Ci0JY3B1bWFza19vcihkLT5jb3ZlcmVkLCBkLT5jb3ZlcmVkLCBkLT5ub2RlbWFzayk7Ci0KLQlwcmV2ID0gc2c7Ci0JZm9yIChqID0gMDsgaiA8IG5yX25vZGVfaWRzOyBqKyspIHsKLQkJbiA9IChudW0gKyBqKSAlIG5yX25vZGVfaWRzOwotCQljcHVtYXNrX2NvbXBsZW1lbnQoZC0+bm90Y292ZXJlZCwgZC0+Y292ZXJlZCk7Ci0JCWNwdW1hc2tfYW5kKGQtPnRtcG1hc2ssIGQtPm5vdGNvdmVyZWQsIGNwdV9tYXApOwotCQljcHVtYXNrX2FuZChkLT50bXBtYXNrLCBkLT50bXBtYXNrLCBkLT5kb21haW5zcGFuKTsKLQkJaWYgKGNwdW1hc2tfZW1wdHkoZC0+dG1wbWFzaykpCi0JCQlicmVhazsKLQkJY3B1bWFza19hbmQoZC0+dG1wbWFzaywgZC0+dG1wbWFzaywgY3B1bWFza19vZl9ub2RlKG4pKTsKLQkJaWYgKGNwdW1hc2tfZW1wdHkoZC0+dG1wbWFzaykpCisJCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGksIGNvdmVyZWQpKQogCQkJY29udGludWU7Ci0JCXNnID0ga21hbGxvY19ub2RlKHNpemVvZihzdHJ1Y3Qgc2NoZWRfZ3JvdXApICsgY3B1bWFza19zaXplKCksCi0JCQkJICBHRlBfS0VSTkVMLCBudW0pOwotCQlpZiAoIXNnKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgIkNhbiBub3QgYWxsb2MgZG9tYWluIGdyb3VwIGZvciBub2RlICVkXG4iLCBqKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9CisKKwkJY3B1bWFza19jbGVhcihzY2hlZF9ncm91cF9jcHVzKHNnKSk7CiAJCXNnLT5jcHVfcG93ZXIgPSAwOwotCQljcHVtYXNrX2NvcHkoc2NoZWRfZ3JvdXBfY3B1cyhzZyksIGQtPnRtcG1hc2spOwotCQlzZy0+bmV4dCA9IHByZXYtPm5leHQ7Ci0JCWNwdW1hc2tfb3IoZC0+Y292ZXJlZCwgZC0+Y292ZXJlZCwgZC0+dG1wbWFzayk7Ci0JCXByZXYtPm5leHQgPSBzZzsKLQkJcHJldiA9IHNnOwotCX0KLW91dDoKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLwogCi0jaWZkZWYgQ09ORklHX05VTUEKLS8qIEZyZWUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdmFyaW91cyBzY2hlZF9ncm91cCBzdHJ1Y3R1cmVzICovCi1zdGF0aWMgdm9pZCBmcmVlX3NjaGVkX2dyb3Vwcyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X21hcCwKLQkJCSAgICAgIHN0cnVjdCBjcHVtYXNrICpub2RlbWFzaykKLXsKLQlpbnQgY3B1LCBpOwotCi0JZm9yX2VhY2hfY3B1KGNwdSwgY3B1X21hcCkgewotCQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKipzY2hlZF9ncm91cF9ub2RlcwotCQkJPSBzY2hlZF9ncm91cF9ub2Rlc19ieWNwdVtjcHVdOwotCi0JCWlmICghc2NoZWRfZ3JvdXBfbm9kZXMpCi0JCQljb250aW51ZTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgbnJfbm9kZV9pZHM7IGkrKykgewotCQkJc3RydWN0IHNjaGVkX2dyb3VwICpvbGRzZywgKnNnID0gc2NoZWRfZ3JvdXBfbm9kZXNbaV07Ci0KLQkJCWNwdW1hc2tfYW5kKG5vZGVtYXNrLCBjcHVtYXNrX29mX25vZGUoaSksIGNwdV9tYXApOwotCQkJaWYgKGNwdW1hc2tfZW1wdHkobm9kZW1hc2spKQorCQlmb3JfZWFjaF9jcHUoaiwgc3BhbikgeworCQkJaWYgKGdldF9ncm91cChqLCBzZGQsIE5VTEwpICE9IGdyb3VwKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoc2cgPT0gTlVMTCkKLQkJCQljb250aW51ZTsKLQkJCXNnID0gc2ctPm5leHQ7Ci1uZXh0X3NnOgotCQkJb2xkc2cgPSBzZzsKLQkJCXNnID0gc2ctPm5leHQ7Ci0JCQlrZnJlZShvbGRzZyk7Ci0JCQlpZiAob2xkc2cgIT0gc2NoZWRfZ3JvdXBfbm9kZXNbaV0pCi0JCQkJZ290byBuZXh0X3NnOworCQkJY3B1bWFza19zZXRfY3B1KGosIGNvdmVyZWQpOworCQkJY3B1bWFza19zZXRfY3B1KGosIHNjaGVkX2dyb3VwX2NwdXMoc2cpKTsKIAkJfQotCQlrZnJlZShzY2hlZF9ncm91cF9ub2Rlcyk7Ci0JCXNjaGVkX2dyb3VwX25vZGVzX2J5Y3B1W2NwdV0gPSBOVUxMOworCisJCWlmICghZmlyc3QpCisJCQlmaXJzdCA9IHNnOworCQlpZiAobGFzdCkKKwkJCWxhc3QtPm5leHQgPSBzZzsKKwkJbGFzdCA9IHNnOwogCX0KKwlsYXN0LT5uZXh0ID0gZmlyc3Q7CiB9Ci0jZWxzZSAvKiAhQ09ORklHX05VTUEgKi8KLXN0YXRpYyB2b2lkIGZyZWVfc2NoZWRfZ3JvdXBzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwLAotCQkJICAgICAgc3RydWN0IGNwdW1hc2sgKm5vZGVtYXNrKQotewotfQotI2VuZGlmIC8qIENPTkZJR19OVU1BICovCiAKIC8qCiAgKiBJbml0aWFsaXplIHNjaGVkIGdyb3VwcyBjcHVfcG93ZXIuCkBAIC03MjMwLDExICs2OTk3LDYgQEAKICAqLwogc3RhdGljIHZvaWQgaW5pdF9zY2hlZF9ncm91cHNfcG93ZXIoaW50IGNwdSwgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QpCiB7Ci0Jc3RydWN0IHNjaGVkX2RvbWFpbiAqY2hpbGQ7Ci0Jc3RydWN0IHNjaGVkX2dyb3VwICpncm91cDsKLQlsb25nIHBvd2VyOwotCWludCB3ZWlnaHQ7Ci0KIAlXQVJOX09OKCFzZCB8fCAhc2QtPmdyb3Vwcyk7CiAKIAlpZiAoY3B1ICE9IGdyb3VwX2ZpcnN0X2NwdShzZC0+Z3JvdXBzKSkKQEAgLTcyNDIsMzYgKzcwMDQsNyBAQAogCiAJc2QtPmdyb3Vwcy0+Z3JvdXBfd2VpZ2h0ID0gY3B1bWFza193ZWlnaHQoc2NoZWRfZ3JvdXBfY3B1cyhzZC0+Z3JvdXBzKSk7CiAKLQljaGlsZCA9IHNkLT5jaGlsZDsKLQotCXNkLT5ncm91cHMtPmNwdV9wb3dlciA9IDA7Ci0KLQlpZiAoIWNoaWxkKSB7Ci0JCXBvd2VyID0gU0NIRURfTE9BRF9TQ0FMRTsKLQkJd2VpZ2h0ID0gY3B1bWFza193ZWlnaHQoc2NoZWRfZG9tYWluX3NwYW4oc2QpKTsKLQkJLyoKLQkJICogU01UIHNpYmxpbmdzIHNoYXJlIHRoZSBwb3dlciBvZiBhIHNpbmdsZSBjb3JlLgotCQkgKiBVc3VhbGx5IG11bHRpcGxlIHRocmVhZHMgZ2V0IGEgYmV0dGVyIHlpZWxkIG91dCBvZgotCQkgKiB0aGF0IG9uZSBjb3JlIHRoYW4gYSBzaW5nbGUgdGhyZWFkIHdvdWxkIGhhdmUsCi0JCSAqIHJlZmxlY3QgdGhhdCBpbiBzZC0+c210X2dhaW4uCi0JCSAqLwotCQlpZiAoKHNkLT5mbGFncyAmIFNEX1NIQVJFX0NQVVBPV0VSKSAmJiB3ZWlnaHQgPiAxKSB7Ci0JCQlwb3dlciAqPSBzZC0+c210X2dhaW47Ci0JCQlwb3dlciAvPSB3ZWlnaHQ7Ci0JCQlwb3dlciA+Pj0gU0NIRURfTE9BRF9TSElGVDsKLQkJfQotCQlzZC0+Z3JvdXBzLT5jcHVfcG93ZXIgKz0gcG93ZXI7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIEFkZCBjcHVfcG93ZXIgb2YgZWFjaCBjaGlsZCBncm91cCB0byB0aGlzIGdyb3VwcyBjcHVfcG93ZXIuCi0JICovCi0JZ3JvdXAgPSBjaGlsZC0+Z3JvdXBzOwotCWRvIHsKLQkJc2QtPmdyb3Vwcy0+Y3B1X3Bvd2VyICs9IGdyb3VwLT5jcHVfcG93ZXI7Ci0JCWdyb3VwID0gZ3JvdXAtPm5leHQ7Ci0JfSB3aGlsZSAoZ3JvdXAgIT0gY2hpbGQtPmdyb3Vwcyk7CisJdXBkYXRlX2dyb3VwX3Bvd2VyKHNkLCBjcHUpOwogfQogCiAvKgpAQCAtNzI4NSwxNSArNzAxOCwxNSBAQAogIyBkZWZpbmUgU0RfSU5JVF9OQU1FKHNkLCB0eXBlKQkJZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKLSNkZWZpbmUJU0RfSU5JVChzZCwgdHlwZSkJc2RfaW5pdF8jI3R5cGUoc2QpCi0KLSNkZWZpbmUgU0RfSU5JVF9GVU5DKHR5cGUpCVwKLXN0YXRpYyBub2lubGluZSB2b2lkIHNkX2luaXRfIyN0eXBlKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkKQlcCi17CQkJCQkJCQlcCi0JbWVtc2V0KHNkLCAwLCBzaXplb2YoKnNkKSk7CQkJCVwKLQkqc2QgPSBTRF8jI3R5cGUjI19JTklUOwkJCQkJXAotCXNkLT5sZXZlbCA9IFNEX0xWXyMjdHlwZTsJCQkJXAotCVNEX0lOSVRfTkFNRShzZCwgdHlwZSk7CQkJCQlcCisjZGVmaW5lIFNEX0lOSVRfRlVOQyh0eXBlKQkJCQkJCVwKK3N0YXRpYyBub2lubGluZSBzdHJ1Y3Qgc2NoZWRfZG9tYWluICoJCQkJCVwKK3NkX2luaXRfIyN0eXBlKHN0cnVjdCBzY2hlZF9kb21haW5fdG9wb2xvZ3lfbGV2ZWwgKnRsLCBpbnQgY3B1KSAJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCA9ICpwZXJfY3B1X3B0cih0bC0+ZGF0YS5zZCwgY3B1KTsJXAorCSpzZCA9IFNEXyMjdHlwZSMjX0lOSVQ7CQkJCQkJXAorCVNEX0lOSVRfTkFNRShzZCwgdHlwZSk7CQkJCQkJXAorCXNkLT5wcml2YXRlID0gJnRsLT5kYXRhOwkJCQkJXAorCXJldHVybiBzZDsJCQkJCQkJXAogfQogCiBTRF9JTklUX0ZVTkMoQ1BVKQpAQCAtNzMxMiwxMyArNzA0NSwxNCBAQAogI2VuZGlmCiAKIHN0YXRpYyBpbnQgZGVmYXVsdF9yZWxheF9kb21haW5fbGV2ZWwgPSAtMTsKK2ludCBzY2hlZF9kb21haW5fbGV2ZWxfbWF4OwogCiBzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9yZWxheF9kb21haW5fbGV2ZWwoY2hhciAqc3RyKQogewogCXVuc2lnbmVkIGxvbmcgdmFsOwogCiAJdmFsID0gc2ltcGxlX3N0cnRvdWwoc3RyLCBOVUxMLCAwKTsKLQlpZiAodmFsIDwgU0RfTFZfTUFYKQorCWlmICh2YWwgPCBzY2hlZF9kb21haW5fbGV2ZWxfbWF4KQogCQlkZWZhdWx0X3JlbGF4X2RvbWFpbl9sZXZlbCA9IHZhbDsKIAogCXJldHVybiAxOwpAQCAtNzM0NiwzNyArNzA4MCwyMCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgX19zZHRfZnJlZShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X21hcCk7CitzdGF0aWMgaW50IF9fc2R0X2FsbG9jKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwKTsKKwogc3RhdGljIHZvaWQgX19mcmVlX2RvbWFpbl9hbGxvY3Moc3RydWN0IHNfZGF0YSAqZCwgZW51bSBzX2FsbG9jIHdoYXQsCiAJCQkJIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwKQogewogCXN3aXRjaCAod2hhdCkgewotCWNhc2Ugc2Ffc2NoZWRfZ3JvdXBzOgotCQlmcmVlX3NjaGVkX2dyb3VwcyhjcHVfbWFwLCBkLT50bXBtYXNrKTsgLyogZmFsbCB0aHJvdWdoICovCi0JCWQtPnNjaGVkX2dyb3VwX25vZGVzID0gTlVMTDsKIAljYXNlIHNhX3Jvb3Rkb21haW46Ci0JCWZyZWVfcm9vdGRvbWFpbihkLT5yZCk7IC8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2Ugc2FfdG1wbWFzazoKLQkJZnJlZV9jcHVtYXNrX3ZhcihkLT50bXBtYXNrKTsgLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSBzYV9zZW5kX2NvdmVyZWQ6Ci0JCWZyZWVfY3B1bWFza192YXIoZC0+c2VuZF9jb3ZlcmVkKTsgLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSBzYV90aGlzX2Jvb2tfbWFwOgotCQlmcmVlX2NwdW1hc2tfdmFyKGQtPnRoaXNfYm9va19tYXApOyAvKiBmYWxsIHRocm91Z2ggKi8KLQljYXNlIHNhX3RoaXNfY29yZV9tYXA6Ci0JCWZyZWVfY3B1bWFza192YXIoZC0+dGhpc19jb3JlX21hcCk7IC8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2Ugc2FfdGhpc19zaWJsaW5nX21hcDoKLQkJZnJlZV9jcHVtYXNrX3ZhcihkLT50aGlzX3NpYmxpbmdfbWFwKTsgLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSBzYV9ub2RlbWFzazoKLQkJZnJlZV9jcHVtYXNrX3ZhcihkLT5ub2RlbWFzayk7IC8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2Ugc2Ffc2NoZWRfZ3JvdXBfbm9kZXM6Ci0jaWZkZWYgQ09ORklHX05VTUEKLQkJa2ZyZWUoZC0+c2NoZWRfZ3JvdXBfbm9kZXMpOyAvKiBmYWxsIHRocm91Z2ggKi8KLQljYXNlIHNhX25vdGNvdmVyZWQ6Ci0JCWZyZWVfY3B1bWFza192YXIoZC0+bm90Y292ZXJlZCk7IC8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2Ugc2FfY292ZXJlZDoKLQkJZnJlZV9jcHVtYXNrX3ZhcihkLT5jb3ZlcmVkKTsgLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSBzYV9kb21haW5zcGFuOgotCQlmcmVlX2NwdW1hc2tfdmFyKGQtPmRvbWFpbnNwYW4pOyAvKiBmYWxsIHRocm91Z2ggKi8KLSNlbmRpZgorCQlpZiAoIWF0b21pY19yZWFkKCZkLT5yZC0+cmVmY291bnQpKQorCQkJZnJlZV9yb290ZG9tYWluKCZkLT5yZC0+cmN1KTsgLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBzYV9zZDoKKwkJZnJlZV9wZXJjcHUoZC0+c2QpOyAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIHNhX3NkX3N0b3JhZ2U6CisJCV9fc2R0X2ZyZWUoY3B1X21hcCk7IC8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2Ugc2Ffbm9uZToKIAkJYnJlYWs7CiAJfQpAQCAtNzM4NSwzMDggKzcxMDIsMjEyIEBACiBzdGF0aWMgZW51bSBzX2FsbG9jIF9fdmlzaXRfZG9tYWluX2FsbG9jYXRpb25faGVsbChzdHJ1Y3Qgc19kYXRhICpkLAogCQkJCQkJICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXApCiB7Ci0jaWZkZWYgQ09ORklHX05VTUEKLQlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZkLT5kb21haW5zcGFuLCBHRlBfS0VSTkVMKSkKLQkJcmV0dXJuIHNhX25vbmU7Ci0JaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmZC0+Y292ZXJlZCwgR0ZQX0tFUk5FTCkpCi0JCXJldHVybiBzYV9kb21haW5zcGFuOwotCWlmICghYWxsb2NfY3B1bWFza192YXIoJmQtPm5vdGNvdmVyZWQsIEdGUF9LRVJORUwpKQotCQlyZXR1cm4gc2FfY292ZXJlZDsKLQkvKiBBbGxvY2F0ZSB0aGUgcGVyLW5vZGUgbGlzdCBvZiBzY2hlZCBncm91cHMgKi8KLQlkLT5zY2hlZF9ncm91cF9ub2RlcyA9IGtjYWxsb2MobnJfbm9kZV9pZHMsCi0JCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzY2hlZF9ncm91cCAqKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkLT5zY2hlZF9ncm91cF9ub2RlcykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJDYW4gbm90IGFsbG9jIHNjaGVkIGdyb3VwIG5vZGUgbGlzdFxuIik7Ci0JCXJldHVybiBzYV9ub3Rjb3ZlcmVkOwotCX0KLQlzY2hlZF9ncm91cF9ub2Rlc19ieWNwdVtjcHVtYXNrX2ZpcnN0KGNwdV9tYXApXSA9IGQtPnNjaGVkX2dyb3VwX25vZGVzOwotI2VuZGlmCi0JaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmZC0+bm9kZW1hc2ssIEdGUF9LRVJORUwpKQotCQlyZXR1cm4gc2Ffc2NoZWRfZ3JvdXBfbm9kZXM7Ci0JaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmZC0+dGhpc19zaWJsaW5nX21hcCwgR0ZQX0tFUk5FTCkpCi0JCXJldHVybiBzYV9ub2RlbWFzazsKLQlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZkLT50aGlzX2NvcmVfbWFwLCBHRlBfS0VSTkVMKSkKLQkJcmV0dXJuIHNhX3RoaXNfc2libGluZ19tYXA7Ci0JaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmZC0+dGhpc19ib29rX21hcCwgR0ZQX0tFUk5FTCkpCi0JCXJldHVybiBzYV90aGlzX2NvcmVfbWFwOwotCWlmICghYWxsb2NfY3B1bWFza192YXIoJmQtPnNlbmRfY292ZXJlZCwgR0ZQX0tFUk5FTCkpCi0JCXJldHVybiBzYV90aGlzX2Jvb2tfbWFwOwotCWlmICghYWxsb2NfY3B1bWFza192YXIoJmQtPnRtcG1hc2ssIEdGUF9LRVJORUwpKQotCQlyZXR1cm4gc2Ffc2VuZF9jb3ZlcmVkOworCW1lbXNldChkLCAwLCBzaXplb2YoKmQpKTsKKworCWlmIChfX3NkdF9hbGxvYyhjcHVfbWFwKSkKKwkJcmV0dXJuIHNhX3NkX3N0b3JhZ2U7CisJZC0+c2QgPSBhbGxvY19wZXJjcHUoc3RydWN0IHNjaGVkX2RvbWFpbiAqKTsKKwlpZiAoIWQtPnNkKQorCQlyZXR1cm4gc2Ffc2Rfc3RvcmFnZTsKIAlkLT5yZCA9IGFsbG9jX3Jvb3Rkb21haW4oKTsKLQlpZiAoIWQtPnJkKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhbm5vdCBhbGxvYyByb290IGRvbWFpblxuIik7Ci0JCXJldHVybiBzYV90bXBtYXNrOwotCX0KKwlpZiAoIWQtPnJkKQorCQlyZXR1cm4gc2Ffc2Q7CiAJcmV0dXJuIHNhX3Jvb3Rkb21haW47CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpfX2J1aWxkX251bWFfc2NoZWRfZG9tYWlucyhzdHJ1Y3Qgc19kYXRhICpkLAotCWNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluX2F0dHIgKmF0dHIsIGludCBpKQorLyoKKyAqIE5VTEwgdGhlIHNkX2RhdGEgZWxlbWVudHMgd2UndmUgdXNlZCB0byBidWlsZCB0aGUgc2NoZWRfZG9tYWluIGFuZAorICogc2NoZWRfZ3JvdXAgc3RydWN0dXJlIHNvIHRoYXQgdGhlIHN1YnNlcXVlbnQgX19mcmVlX2RvbWFpbl9hbGxvY3MoKQorICogd2lsbCBub3QgZnJlZSB0aGUgZGF0YSB3ZSdyZSB1c2luZy4KKyAqLworc3RhdGljIHZvaWQgY2xhaW1fYWxsb2NhdGlvbnMoaW50IGNwdSwgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QpCiB7Ci0Jc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QgPSBOVUxMOwotI2lmZGVmIENPTkZJR19OVU1BCi0Jc3RydWN0IHNjaGVkX2RvbWFpbiAqcGFyZW50OworCXN0cnVjdCBzZF9kYXRhICpzZGQgPSBzZC0+cHJpdmF0ZTsKKwlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKnNnID0gc2QtPmdyb3VwczsKIAotCWQtPnNkX2FsbG5vZGVzID0gMDsKLQlpZiAoY3B1bWFza193ZWlnaHQoY3B1X21hcCkgPgotCSAgICBTRF9OT0RFU19QRVJfRE9NQUlOICogY3B1bWFza193ZWlnaHQoZC0+bm9kZW1hc2spKSB7Ci0JCXNkID0gJnBlcl9jcHUoYWxsbm9kZXNfZG9tYWlucywgaSkuc2Q7Ci0JCVNEX0lOSVQoc2QsIEFMTE5PREVTKTsKLQkJc2V0X2RvbWFpbl9hdHRyaWJ1dGUoc2QsIGF0dHIpOwotCQljcHVtYXNrX2NvcHkoc2NoZWRfZG9tYWluX3NwYW4oc2QpLCBjcHVfbWFwKTsKLQkJY3B1X3RvX2FsbG5vZGVzX2dyb3VwKGksIGNwdV9tYXAsICZzZC0+Z3JvdXBzLCBkLT50bXBtYXNrKTsKLQkJZC0+c2RfYWxsbm9kZXMgPSAxOworCVdBUk5fT05fT05DRSgqcGVyX2NwdV9wdHIoc2RkLT5zZCwgY3B1KSAhPSBzZCk7CisJKnBlcl9jcHVfcHRyKHNkZC0+c2QsIGNwdSkgPSBOVUxMOworCisJaWYgKGNwdSA9PSBjcHVtYXNrX2ZpcnN0KHNjaGVkX2dyb3VwX2NwdXMoc2cpKSkgeworCQlXQVJOX09OX09OQ0UoKnBlcl9jcHVfcHRyKHNkZC0+c2csIGNwdSkgIT0gc2cpOworCQkqcGVyX2NwdV9wdHIoc2RkLT5zZywgY3B1KSA9IE5VTEw7CiAJfQotCXBhcmVudCA9IHNkOwotCi0Jc2QgPSAmcGVyX2NwdShub2RlX2RvbWFpbnMsIGkpLnNkOwotCVNEX0lOSVQoc2QsIE5PREUpOwotCXNldF9kb21haW5fYXR0cmlidXRlKHNkLCBhdHRyKTsKLQlzY2hlZF9kb21haW5fbm9kZV9zcGFuKGNwdV90b19ub2RlKGkpLCBzY2hlZF9kb21haW5fc3BhbihzZCkpOwotCXNkLT5wYXJlbnQgPSBwYXJlbnQ7Ci0JaWYgKHBhcmVudCkKLQkJcGFyZW50LT5jaGlsZCA9IHNkOwotCWNwdW1hc2tfYW5kKHNjaGVkX2RvbWFpbl9zcGFuKHNkKSwgc2NoZWRfZG9tYWluX3NwYW4oc2QpLCBjcHVfbWFwKTsKLSNlbmRpZgotCXJldHVybiBzZDsKIH0KIAotc3RhdGljIHN0cnVjdCBzY2hlZF9kb21haW4gKl9fYnVpbGRfY3B1X3NjaGVkX2RvbWFpbihzdHJ1Y3Qgc19kYXRhICpkLAotCWNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluX2F0dHIgKmF0dHIsCi0Jc3RydWN0IHNjaGVkX2RvbWFpbiAqcGFyZW50LCBpbnQgaSkKLXsKLQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKLQlzZCA9ICZwZXJfY3B1KHBoeXNfZG9tYWlucywgaSkuc2Q7Ci0JU0RfSU5JVChzZCwgQ1BVKTsKLQlzZXRfZG9tYWluX2F0dHJpYnV0ZShzZCwgYXR0cik7Ci0JY3B1bWFza19jb3B5KHNjaGVkX2RvbWFpbl9zcGFuKHNkKSwgZC0+bm9kZW1hc2spOwotCXNkLT5wYXJlbnQgPSBwYXJlbnQ7Ci0JaWYgKHBhcmVudCkKLQkJcGFyZW50LT5jaGlsZCA9IHNkOwotCWNwdV90b19waHlzX2dyb3VwKGksIGNwdV9tYXAsICZzZC0+Z3JvdXBzLCBkLT50bXBtYXNrKTsKLQlyZXR1cm4gc2Q7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpfX2J1aWxkX2Jvb2tfc2NoZWRfZG9tYWluKHN0cnVjdCBzX2RhdGEgKmQsCi0JY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXAsIHN0cnVjdCBzY2hlZF9kb21haW5fYXR0ciAqYXR0ciwKLQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpwYXJlbnQsIGludCBpKQotewotCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkID0gcGFyZW50OwotI2lmZGVmIENPTkZJR19TQ0hFRF9CT09LCi0Jc2QgPSAmcGVyX2NwdShib29rX2RvbWFpbnMsIGkpLnNkOwotCVNEX0lOSVQoc2QsIEJPT0spOwotCXNldF9kb21haW5fYXR0cmlidXRlKHNkLCBhdHRyKTsKLQljcHVtYXNrX2FuZChzY2hlZF9kb21haW5fc3BhbihzZCksIGNwdV9tYXAsIGNwdV9ib29rX21hc2soaSkpOwotCXNkLT5wYXJlbnQgPSBwYXJlbnQ7Ci0JcGFyZW50LT5jaGlsZCA9IHNkOwotCWNwdV90b19ib29rX2dyb3VwKGksIGNwdV9tYXAsICZzZC0+Z3JvdXBzLCBkLT50bXBtYXNrKTsKLSNlbmRpZgotCXJldHVybiBzZDsKLX0KLQotc3RhdGljIHN0cnVjdCBzY2hlZF9kb21haW4gKl9fYnVpbGRfbWNfc2NoZWRfZG9tYWluKHN0cnVjdCBzX2RhdGEgKmQsCi0JY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXAsIHN0cnVjdCBzY2hlZF9kb21haW5fYXR0ciAqYXR0ciwKLQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpwYXJlbnQsIGludCBpKQotewotCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkID0gcGFyZW50OwotI2lmZGVmIENPTkZJR19TQ0hFRF9NQwotCXNkID0gJnBlcl9jcHUoY29yZV9kb21haW5zLCBpKS5zZDsKLQlTRF9JTklUKHNkLCBNQyk7Ci0Jc2V0X2RvbWFpbl9hdHRyaWJ1dGUoc2QsIGF0dHIpOwotCWNwdW1hc2tfYW5kKHNjaGVkX2RvbWFpbl9zcGFuKHNkKSwgY3B1X21hcCwgY3B1X2NvcmVncm91cF9tYXNrKGkpKTsKLQlzZC0+cGFyZW50ID0gcGFyZW50OwotCXBhcmVudC0+Y2hpbGQgPSBzZDsKLQljcHVfdG9fY29yZV9ncm91cChpLCBjcHVfbWFwLCAmc2QtPmdyb3VwcywgZC0+dG1wbWFzayk7Ci0jZW5kaWYKLQlyZXR1cm4gc2Q7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpfX2J1aWxkX3NtdF9zY2hlZF9kb21haW4oc3RydWN0IHNfZGF0YSAqZCwKLQljb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X21hcCwgc3RydWN0IHNjaGVkX2RvbWFpbl9hdHRyICphdHRyLAotCXN0cnVjdCBzY2hlZF9kb21haW4gKnBhcmVudCwgaW50IGkpCi17Ci0Jc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QgPSBwYXJlbnQ7CiAjaWZkZWYgQ09ORklHX1NDSEVEX1NNVAotCXNkID0gJnBlcl9jcHUoY3B1X2RvbWFpbnMsIGkpLnNkOwotCVNEX0lOSVQoc2QsIFNJQkxJTkcpOwotCXNldF9kb21haW5fYXR0cmlidXRlKHNkLCBhdHRyKTsKLQljcHVtYXNrX2FuZChzY2hlZF9kb21haW5fc3BhbihzZCksIGNwdV9tYXAsIHRvcG9sb2d5X3RocmVhZF9jcHVtYXNrKGkpKTsKLQlzZC0+cGFyZW50ID0gcGFyZW50OwotCXBhcmVudC0+Y2hpbGQgPSBzZDsKLQljcHVfdG9fY3B1X2dyb3VwKGksIGNwdV9tYXAsICZzZC0+Z3JvdXBzLCBkLT50bXBtYXNrKTsKLSNlbmRpZgotCXJldHVybiBzZDsKLX0KLQotc3RhdGljIHZvaWQgYnVpbGRfc2NoZWRfZ3JvdXBzKHN0cnVjdCBzX2RhdGEgKmQsIGVudW0gc2NoZWRfZG9tYWluX2xldmVsIGwsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXAsIGludCBjcHUpCitzdGF0aWMgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9zbXRfbWFzayhpbnQgY3B1KQogewotCXN3aXRjaCAobCkgeworCXJldHVybiB0b3BvbG9neV90aHJlYWRfY3B1bWFzayhjcHUpOworfQorI2VuZGlmCisKKy8qCisgKiBUb3BvbG9neSBsaXN0LCBib3R0b20tdXAuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2NoZWRfZG9tYWluX3RvcG9sb2d5X2xldmVsIGRlZmF1bHRfdG9wb2xvZ3lbXSA9IHsKICNpZmRlZiBDT05GSUdfU0NIRURfU01UCi0JY2FzZSBTRF9MVl9TSUJMSU5HOiAvKiBzZXQgdXAgQ1BVIChzaWJsaW5nKSBncm91cHMgKi8KLQkJY3B1bWFza19hbmQoZC0+dGhpc19zaWJsaW5nX21hcCwgY3B1X21hcCwKLQkJCSAgICB0b3BvbG9neV90aHJlYWRfY3B1bWFzayhjcHUpKTsKLQkJaWYgKGNwdSA9PSBjcHVtYXNrX2ZpcnN0KGQtPnRoaXNfc2libGluZ19tYXApKQotCQkJaW5pdF9zY2hlZF9idWlsZF9ncm91cHMoZC0+dGhpc19zaWJsaW5nX21hcCwgY3B1X21hcCwKLQkJCQkJCSZjcHVfdG9fY3B1X2dyb3VwLAotCQkJCQkJZC0+c2VuZF9jb3ZlcmVkLCBkLT50bXBtYXNrKTsKLQkJYnJlYWs7CisJeyBzZF9pbml0X1NJQkxJTkcsIGNwdV9zbXRfbWFzaywgfSwKICNlbmRpZgogI2lmZGVmIENPTkZJR19TQ0hFRF9NQwotCWNhc2UgU0RfTFZfTUM6IC8qIHNldCB1cCBtdWx0aS1jb3JlIGdyb3VwcyAqLwotCQljcHVtYXNrX2FuZChkLT50aGlzX2NvcmVfbWFwLCBjcHVfbWFwLCBjcHVfY29yZWdyb3VwX21hc2soY3B1KSk7Ci0JCWlmIChjcHUgPT0gY3B1bWFza19maXJzdChkLT50aGlzX2NvcmVfbWFwKSkKLQkJCWluaXRfc2NoZWRfYnVpbGRfZ3JvdXBzKGQtPnRoaXNfY29yZV9tYXAsIGNwdV9tYXAsCi0JCQkJCQkmY3B1X3RvX2NvcmVfZ3JvdXAsCi0JCQkJCQlkLT5zZW5kX2NvdmVyZWQsIGQtPnRtcG1hc2spOwotCQlicmVhazsKKwl7IHNkX2luaXRfTUMsIGNwdV9jb3JlZ3JvdXBfbWFzaywgfSwKICNlbmRpZgogI2lmZGVmIENPTkZJR19TQ0hFRF9CT09LCi0JY2FzZSBTRF9MVl9CT09LOiAvKiBzZXQgdXAgYm9vayBncm91cHMgKi8KLQkJY3B1bWFza19hbmQoZC0+dGhpc19ib29rX21hcCwgY3B1X21hcCwgY3B1X2Jvb2tfbWFzayhjcHUpKTsKLQkJaWYgKGNwdSA9PSBjcHVtYXNrX2ZpcnN0KGQtPnRoaXNfYm9va19tYXApKQotCQkJaW5pdF9zY2hlZF9idWlsZF9ncm91cHMoZC0+dGhpc19ib29rX21hcCwgY3B1X21hcCwKLQkJCQkJCSZjcHVfdG9fYm9va19ncm91cCwKLQkJCQkJCWQtPnNlbmRfY292ZXJlZCwgZC0+dG1wbWFzayk7Ci0JCWJyZWFrOworCXsgc2RfaW5pdF9CT09LLCBjcHVfYm9va19tYXNrLCB9LAogI2VuZGlmCi0JY2FzZSBTRF9MVl9DUFU6IC8qIHNldCB1cCBwaHlzaWNhbCBncm91cHMgKi8KLQkJY3B1bWFza19hbmQoZC0+bm9kZW1hc2ssIGNwdW1hc2tfb2Zfbm9kZShjcHUpLCBjcHVfbWFwKTsKLQkJaWYgKCFjcHVtYXNrX2VtcHR5KGQtPm5vZGVtYXNrKSkKLQkJCWluaXRfc2NoZWRfYnVpbGRfZ3JvdXBzKGQtPm5vZGVtYXNrLCBjcHVfbWFwLAotCQkJCQkJJmNwdV90b19waHlzX2dyb3VwLAotCQkJCQkJZC0+c2VuZF9jb3ZlcmVkLCBkLT50bXBtYXNrKTsKLQkJYnJlYWs7CisJeyBzZF9pbml0X0NQVSwgY3B1X2NwdV9tYXNrLCB9LAogI2lmZGVmIENPTkZJR19OVU1BCi0JY2FzZSBTRF9MVl9BTExOT0RFUzoKLQkJaW5pdF9zY2hlZF9idWlsZF9ncm91cHMoY3B1X21hcCwgY3B1X21hcCwgJmNwdV90b19hbGxub2Rlc19ncm91cCwKLQkJCQkJZC0+c2VuZF9jb3ZlcmVkLCBkLT50bXBtYXNrKTsKLQkJYnJlYWs7CisJeyBzZF9pbml0X05PREUsIGNwdV9ub2RlX21hc2ssIH0sCisJeyBzZF9pbml0X0FMTE5PREVTLCBjcHVfYWxsbm9kZXNfbWFzaywgfSwKICNlbmRpZgotCWRlZmF1bHQ6Ci0JCWJyZWFrOworCXsgTlVMTCwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2NoZWRfZG9tYWluX3RvcG9sb2d5X2xldmVsICpzY2hlZF9kb21haW5fdG9wb2xvZ3kgPSBkZWZhdWx0X3RvcG9sb2d5OworCitzdGF0aWMgaW50IF9fc2R0X2FsbG9jKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwKQoreworCXN0cnVjdCBzY2hlZF9kb21haW5fdG9wb2xvZ3lfbGV2ZWwgKnRsOworCWludCBqOworCisJZm9yICh0bCA9IHNjaGVkX2RvbWFpbl90b3BvbG9neTsgdGwtPmluaXQ7IHRsKyspIHsKKwkJc3RydWN0IHNkX2RhdGEgKnNkZCA9ICZ0bC0+ZGF0YTsKKworCQlzZGQtPnNkID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBzY2hlZF9kb21haW4gKik7CisJCWlmICghc2RkLT5zZCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXNkZC0+c2cgPSBhbGxvY19wZXJjcHUoc3RydWN0IHNjaGVkX2dyb3VwICopOworCQlpZiAoIXNkZC0+c2cpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlmb3JfZWFjaF9jcHUoaiwgY3B1X21hcCkgeworCQkJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7CisJCQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKnNnOworCisJCSAgICAgICAJc2QgPSBremFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCBzY2hlZF9kb21haW4pICsgY3B1bWFza19zaXplKCksCisJCQkJCUdGUF9LRVJORUwsIGNwdV90b19ub2RlKGopKTsKKwkJCWlmICghc2QpCisJCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJCSpwZXJfY3B1X3B0cihzZGQtPnNkLCBqKSA9IHNkOworCisJCQlzZyA9IGt6YWxsb2Nfbm9kZShzaXplb2Yoc3RydWN0IHNjaGVkX2dyb3VwKSArIGNwdW1hc2tfc2l6ZSgpLAorCQkJCQlHRlBfS0VSTkVMLCBjcHVfdG9fbm9kZShqKSk7CisJCQlpZiAoIXNnKQorCQkJCXJldHVybiAtRU5PTUVNOworCisJCQkqcGVyX2NwdV9wdHIoc2RkLT5zZywgaikgPSBzZzsKKwkJfQogCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX3NkdF9mcmVlKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwKQoreworCXN0cnVjdCBzY2hlZF9kb21haW5fdG9wb2xvZ3lfbGV2ZWwgKnRsOworCWludCBqOworCisJZm9yICh0bCA9IHNjaGVkX2RvbWFpbl90b3BvbG9neTsgdGwtPmluaXQ7IHRsKyspIHsKKwkJc3RydWN0IHNkX2RhdGEgKnNkZCA9ICZ0bC0+ZGF0YTsKKworCQlmb3JfZWFjaF9jcHUoaiwgY3B1X21hcCkgeworCQkJa2ZyZWUoKnBlcl9jcHVfcHRyKHNkZC0+c2QsIGopKTsKKwkJCWtmcmVlKCpwZXJfY3B1X3B0cihzZGQtPnNnLCBqKSk7CisJCX0KKwkJZnJlZV9wZXJjcHUoc2RkLT5zZCk7CisJCWZyZWVfcGVyY3B1KHNkZC0+c2cpOworCX0KK30KKworc3RydWN0IHNjaGVkX2RvbWFpbiAqYnVpbGRfc2NoZWRfZG9tYWluKHN0cnVjdCBzY2hlZF9kb21haW5fdG9wb2xvZ3lfbGV2ZWwgKnRsLAorCQlzdHJ1Y3Qgc19kYXRhICpkLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X21hcCwKKwkJc3RydWN0IHNjaGVkX2RvbWFpbl9hdHRyICphdHRyLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpjaGlsZCwKKwkJaW50IGNwdSkKK3sKKwlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCA9IHRsLT5pbml0KHRsLCBjcHUpOworCWlmICghc2QpCisJCXJldHVybiBjaGlsZDsKKworCXNldF9kb21haW5fYXR0cmlidXRlKHNkLCBhdHRyKTsKKwljcHVtYXNrX2FuZChzY2hlZF9kb21haW5fc3BhbihzZCksIGNwdV9tYXAsIHRsLT5tYXNrKGNwdSkpOworCWlmIChjaGlsZCkgeworCQlzZC0+bGV2ZWwgPSBjaGlsZC0+bGV2ZWwgKyAxOworCQlzY2hlZF9kb21haW5fbGV2ZWxfbWF4ID0gbWF4KHNjaGVkX2RvbWFpbl9sZXZlbF9tYXgsIHNkLT5sZXZlbCk7CisJCWNoaWxkLT5wYXJlbnQgPSBzZDsKKwl9CisJc2QtPmNoaWxkID0gY2hpbGQ7CisKKwlyZXR1cm4gc2Q7CiB9CiAKIC8qCiAgKiBCdWlsZCBzY2hlZCBkb21haW5zIGZvciBhIGdpdmVuIHNldCBvZiBjcHVzIGFuZCBhdHRhY2ggdGhlIHNjaGVkIGRvbWFpbnMKICAqIHRvIHRoZSBpbmRpdmlkdWFsIGNwdXMKICAqLwotc3RhdGljIGludCBfX2J1aWxkX3NjaGVkX2RvbWFpbnMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXAsCi0JCQkJIHN0cnVjdCBzY2hlZF9kb21haW5fYXR0ciAqYXR0cikKK3N0YXRpYyBpbnQgYnVpbGRfc2NoZWRfZG9tYWlucyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X21hcCwKKwkJCSAgICAgICBzdHJ1Y3Qgc2NoZWRfZG9tYWluX2F0dHIgKmF0dHIpCiB7CiAJZW51bSBzX2FsbG9jIGFsbG9jX3N0YXRlID0gc2Ffbm9uZTsKLQlzdHJ1Y3Qgc19kYXRhIGQ7CiAJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7Ci0JaW50IGk7Ci0jaWZkZWYgQ09ORklHX05VTUEKLQlkLnNkX2FsbG5vZGVzID0gMDsKLSNlbmRpZgorCXN0cnVjdCBzX2RhdGEgZDsKKwlpbnQgaSwgcmV0ID0gLUVOT01FTTsKIAogCWFsbG9jX3N0YXRlID0gX192aXNpdF9kb21haW5fYWxsb2NhdGlvbl9oZWxsKCZkLCBjcHVfbWFwKTsKIAlpZiAoYWxsb2Nfc3RhdGUgIT0gc2Ffcm9vdGRvbWFpbikKIAkJZ290byBlcnJvcjsKLQlhbGxvY19zdGF0ZSA9IHNhX3NjaGVkX2dyb3VwczsKIAotCS8qCi0JICogU2V0IHVwIGRvbWFpbnMgZm9yIGNwdXMgc3BlY2lmaWVkIGJ5IHRoZSBjcHVfbWFwLgotCSAqLworCS8qIFNldCB1cCBkb21haW5zIGZvciBjcHVzIHNwZWNpZmllZCBieSB0aGUgY3B1X21hcC4gKi8KIAlmb3JfZWFjaF9jcHUoaSwgY3B1X21hcCkgewotCQljcHVtYXNrX2FuZChkLm5vZGVtYXNrLCBjcHVtYXNrX29mX25vZGUoY3B1X3RvX25vZGUoaSkpLAotCQkJICAgIGNwdV9tYXApOworCQlzdHJ1Y3Qgc2NoZWRfZG9tYWluX3RvcG9sb2d5X2xldmVsICp0bDsKIAotCQlzZCA9IF9fYnVpbGRfbnVtYV9zY2hlZF9kb21haW5zKCZkLCBjcHVfbWFwLCBhdHRyLCBpKTsKLQkJc2QgPSBfX2J1aWxkX2NwdV9zY2hlZF9kb21haW4oJmQsIGNwdV9tYXAsIGF0dHIsIHNkLCBpKTsKLQkJc2QgPSBfX2J1aWxkX2Jvb2tfc2NoZWRfZG9tYWluKCZkLCBjcHVfbWFwLCBhdHRyLCBzZCwgaSk7Ci0JCXNkID0gX19idWlsZF9tY19zY2hlZF9kb21haW4oJmQsIGNwdV9tYXAsIGF0dHIsIHNkLCBpKTsKLQkJc2QgPSBfX2J1aWxkX3NtdF9zY2hlZF9kb21haW4oJmQsIGNwdV9tYXAsIGF0dHIsIHNkLCBpKTsKKwkJc2QgPSBOVUxMOworCQlmb3IgKHRsID0gc2NoZWRfZG9tYWluX3RvcG9sb2d5OyB0bC0+aW5pdDsgdGwrKykKKwkJCXNkID0gYnVpbGRfc2NoZWRfZG9tYWluKHRsLCAmZCwgY3B1X21hcCwgYXR0ciwgc2QsIGkpOworCisJCXdoaWxlIChzZC0+Y2hpbGQpCisJCQlzZCA9IHNkLT5jaGlsZDsKKworCQkqcGVyX2NwdV9wdHIoZC5zZCwgaSkgPSBzZDsKIAl9CiAKKwkvKiBCdWlsZCB0aGUgZ3JvdXBzIGZvciB0aGUgZG9tYWlucyAqLwogCWZvcl9lYWNoX2NwdShpLCBjcHVfbWFwKSB7Ci0JCWJ1aWxkX3NjaGVkX2dyb3VwcygmZCwgU0RfTFZfU0lCTElORywgY3B1X21hcCwgaSk7Ci0JCWJ1aWxkX3NjaGVkX2dyb3VwcygmZCwgU0RfTFZfQk9PSywgY3B1X21hcCwgaSk7Ci0JCWJ1aWxkX3NjaGVkX2dyb3VwcygmZCwgU0RfTFZfTUMsIGNwdV9tYXAsIGkpOworCQlmb3IgKHNkID0gKnBlcl9jcHVfcHRyKGQuc2QsIGkpOyBzZDsgc2QgPSBzZC0+cGFyZW50KSB7CisJCQlzZC0+c3Bhbl93ZWlnaHQgPSBjcHVtYXNrX3dlaWdodChzY2hlZF9kb21haW5fc3BhbihzZCkpOworCQkJZ2V0X2dyb3VwKGksIHNkLT5wcml2YXRlLCAmc2QtPmdyb3Vwcyk7CisJCQlhdG9taWNfaW5jKCZzZC0+Z3JvdXBzLT5yZWYpOworCisJCQlpZiAoaSAhPSBjcHVtYXNrX2ZpcnN0KHNjaGVkX2RvbWFpbl9zcGFuKHNkKSkpCisJCQkJY29udGludWU7CisKKwkJCWJ1aWxkX3NjaGVkX2dyb3VwcyhzZCk7CisJCX0KIAl9CiAKLQkvKiBTZXQgdXAgcGh5c2ljYWwgZ3JvdXBzICovCi0JZm9yIChpID0gMDsgaSA8IG5yX25vZGVfaWRzOyBpKyspCi0JCWJ1aWxkX3NjaGVkX2dyb3VwcygmZCwgU0RfTFZfQ1BVLCBjcHVfbWFwLCBpKTsKLQotI2lmZGVmIENPTkZJR19OVU1BCi0JLyogU2V0IHVwIG5vZGUgZ3JvdXBzICovCi0JaWYgKGQuc2RfYWxsbm9kZXMpCi0JCWJ1aWxkX3NjaGVkX2dyb3VwcygmZCwgU0RfTFZfQUxMTk9ERVMsIGNwdV9tYXAsIDApOwotCi0JZm9yIChpID0gMDsgaSA8IG5yX25vZGVfaWRzOyBpKyspCi0JCWlmIChidWlsZF9udW1hX3NjaGVkX2dyb3VwcygmZCwgY3B1X21hcCwgaSkpCi0JCQlnb3RvIGVycm9yOwotI2VuZGlmCi0KIAkvKiBDYWxjdWxhdGUgQ1BVIHBvd2VyIGZvciBwaHlzaWNhbCBwYWNrYWdlcyBhbmQgbm9kZXMgKi8KLSNpZmRlZiBDT05GSUdfU0NIRURfU01UCi0JZm9yX2VhY2hfY3B1KGksIGNwdV9tYXApIHsKLQkJc2QgPSAmcGVyX2NwdShjcHVfZG9tYWlucywgaSkuc2Q7Ci0JCWluaXRfc2NoZWRfZ3JvdXBzX3Bvd2VyKGksIHNkKTsKLQl9Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfU0NIRURfTUMKLQlmb3JfZWFjaF9jcHUoaSwgY3B1X21hcCkgewotCQlzZCA9ICZwZXJfY3B1KGNvcmVfZG9tYWlucywgaSkuc2Q7Ci0JCWluaXRfc2NoZWRfZ3JvdXBzX3Bvd2VyKGksIHNkKTsKLQl9Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfU0NIRURfQk9PSwotCWZvcl9lYWNoX2NwdShpLCBjcHVfbWFwKSB7Ci0JCXNkID0gJnBlcl9jcHUoYm9va19kb21haW5zLCBpKS5zZDsKLQkJaW5pdF9zY2hlZF9ncm91cHNfcG93ZXIoaSwgc2QpOwotCX0KLSNlbmRpZgorCWZvciAoaSA9IG5yX2NwdW1hc2tfYml0cy0xOyBpID49IDA7IGktLSkgeworCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoaSwgY3B1X21hcCkpCisJCQljb250aW51ZTsKIAotCWZvcl9lYWNoX2NwdShpLCBjcHVfbWFwKSB7Ci0JCXNkID0gJnBlcl9jcHUocGh5c19kb21haW5zLCBpKS5zZDsKLQkJaW5pdF9zY2hlZF9ncm91cHNfcG93ZXIoaSwgc2QpOworCQlmb3IgKHNkID0gKnBlcl9jcHVfcHRyKGQuc2QsIGkpOyBzZDsgc2QgPSBzZC0+cGFyZW50KSB7CisJCQljbGFpbV9hbGxvY2F0aW9ucyhpLCBzZCk7CisJCQlpbml0X3NjaGVkX2dyb3Vwc19wb3dlcihpLCBzZCk7CisJCX0KIAl9CiAKLSNpZmRlZiBDT05GSUdfTlVNQQotCWZvciAoaSA9IDA7IGkgPCBucl9ub2RlX2lkczsgaSsrKQotCQlpbml0X251bWFfc2NoZWRfZ3JvdXBzX3Bvd2VyKGQuc2NoZWRfZ3JvdXBfbm9kZXNbaV0pOwotCi0JaWYgKGQuc2RfYWxsbm9kZXMpIHsKLQkJc3RydWN0IHNjaGVkX2dyb3VwICpzZzsKLQotCQljcHVfdG9fYWxsbm9kZXNfZ3JvdXAoY3B1bWFza19maXJzdChjcHVfbWFwKSwgY3B1X21hcCwgJnNnLAotCQkJCQkJCQlkLnRtcG1hc2spOwotCQlpbml0X251bWFfc2NoZWRfZ3JvdXBzX3Bvd2VyKHNnKTsKLQl9Ci0jZW5kaWYKLQogCS8qIEF0dGFjaCB0aGUgZG9tYWlucyAqLworCXJjdV9yZWFkX2xvY2soKTsKIAlmb3JfZWFjaF9jcHUoaSwgY3B1X21hcCkgewotI2lmZGVmIENPTkZJR19TQ0hFRF9TTVQKLQkJc2QgPSAmcGVyX2NwdShjcHVfZG9tYWlucywgaSkuc2Q7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9NQykKLQkJc2QgPSAmcGVyX2NwdShjb3JlX2RvbWFpbnMsIGkpLnNkOwotI2VsaWYgZGVmaW5lZChDT05GSUdfU0NIRURfQk9PSykKLQkJc2QgPSAmcGVyX2NwdShib29rX2RvbWFpbnMsIGkpLnNkOwotI2Vsc2UKLQkJc2QgPSAmcGVyX2NwdShwaHlzX2RvbWFpbnMsIGkpLnNkOwotI2VuZGlmCisJCXNkID0gKnBlcl9jcHVfcHRyKGQuc2QsIGkpOwogCQljcHVfYXR0YWNoX2RvbWFpbihzZCwgZC5yZCwgaSk7CiAJfQorCXJjdV9yZWFkX3VubG9jaygpOwogCi0JZC5zY2hlZF9ncm91cF9ub2RlcyA9IE5VTEw7IC8qIGRvbid0IGZyZWUgdGhpcyB3ZSBzdGlsbCBuZWVkIGl0ICovCi0JX19mcmVlX2RvbWFpbl9hbGxvY3MoJmQsIHNhX3RtcG1hc2ssIGNwdV9tYXApOwotCXJldHVybiAwOwotCisJcmV0ID0gMDsKIGVycm9yOgogCV9fZnJlZV9kb21haW5fYWxsb2NzKCZkLCBhbGxvY19zdGF0ZSwgY3B1X21hcCk7Ci0JcmV0dXJuIC1FTk9NRU07Ci19Ci0KLXN0YXRpYyBpbnQgYnVpbGRfc2NoZWRfZG9tYWlucyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X21hcCkKLXsKLQlyZXR1cm4gX19idWlsZF9zY2hlZF9kb21haW5zKGNwdV9tYXAsIE5VTEwpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBjcHVtYXNrX3Zhcl90ICpkb21zX2N1cjsJLyogY3VycmVudCBzY2hlZCBkb21haW5zICovCkBAIC03NzQxLDcgKzczNjIsNyBAQAogICogRm9yIG5vdyB0aGlzIGp1c3QgZXhjbHVkZXMgaXNvbGF0ZWQgY3B1cywgYnV0IGNvdWxkIGJlIHVzZWQgdG8KICAqIGV4Y2x1ZGUgb3RoZXIgc3BlY2lhbCBjYXNlcyBpbiB0aGUgZnV0dXJlLgogICovCi1zdGF0aWMgaW50IGFyY2hfaW5pdF9zY2hlZF9kb21haW5zKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwKQorc3RhdGljIGludCBpbml0X3NjaGVkX2RvbWFpbnMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXApCiB7CiAJaW50IGVycjsKIApAQCAtNzc1MiwzMiArNzM3MywyNCBAQAogCQlkb21zX2N1ciA9ICZmYWxsYmFja19kb21zOwogCWNwdW1hc2tfYW5kbm90KGRvbXNfY3VyWzBdLCBjcHVfbWFwLCBjcHVfaXNvbGF0ZWRfbWFwKTsKIAlkYXR0cl9jdXIgPSBOVUxMOwotCWVyciA9IGJ1aWxkX3NjaGVkX2RvbWFpbnMoZG9tc19jdXJbMF0pOworCWVyciA9IGJ1aWxkX3NjaGVkX2RvbWFpbnMoZG9tc19jdXJbMF0sIE5VTEwpOwogCXJlZ2lzdGVyX3NjaGVkX2RvbWFpbl9zeXNjdGwoKTsKIAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIGFyY2hfZGVzdHJveV9zY2hlZF9kb21haW5zKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwLAotCQkJCSAgICAgICBzdHJ1Y3QgY3B1bWFzayAqdG1wbWFzaykKLXsKLQlmcmVlX3NjaGVkX2dyb3VwcyhjcHVfbWFwLCB0bXBtYXNrKTsKLX0KLQogLyoKICAqIERldGFjaCBzY2hlZCBkb21haW5zIGZyb20gYSBncm91cCBvZiBjcHVzIHNwZWNpZmllZCBpbiBjcHVfbWFwCiAgKiBUaGVzZSBjcHVzIHdpbGwgbm93IGJlIGF0dGFjaGVkIHRvIHRoZSBOVUxMIGRvbWFpbgogICovCiBzdGF0aWMgdm9pZCBkZXRhY2hfZGVzdHJveV9kb21haW5zKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwKQogewotCS8qIFNhdmUgYmVjYXVzZSBob3RwbHVnIGxvY2sgaGVsZC4gKi8KLQlzdGF0aWMgREVDTEFSRV9CSVRNQVAodG1wbWFzaywgQ09ORklHX05SX0NQVVMpOwogCWludCBpOwogCisJcmN1X3JlYWRfbG9jaygpOwogCWZvcl9lYWNoX2NwdShpLCBjcHVfbWFwKQogCQljcHVfYXR0YWNoX2RvbWFpbihOVUxMLCAmZGVmX3Jvb3RfZG9tYWluLCBpKTsKLQlzeW5jaHJvbml6ZV9zY2hlZCgpOwotCWFyY2hfZGVzdHJveV9zY2hlZF9kb21haW5zKGNwdV9tYXAsIHRvX2NwdW1hc2sodG1wbWFzaykpOworCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiAvKiBoYW5kbGUgbnVsbCBhcyAiZGVmYXVsdCIgKi8KQEAgLTc4NjYsOCArNzQ3OSw3IEBACiAJCQkJZ290byBtYXRjaDI7CiAJCX0KIAkJLyogbm8gbWF0Y2ggLSBhZGQgYSBuZXcgZG9tc19uZXcgKi8KLQkJX19idWlsZF9zY2hlZF9kb21haW5zKGRvbXNfbmV3W2ldLAotCQkJCQlkYXR0cl9uZXcgPyBkYXR0cl9uZXcgKyBpIDogTlVMTCk7CisJCWJ1aWxkX3NjaGVkX2RvbWFpbnMoZG9tc19uZXdbaV0sIGRhdHRyX25ldyA/IGRhdHRyX25ldyArIGkgOiBOVUxMKTsKIG1hdGNoMjoKIAkJOwogCX0KQEAgLTc4ODYsNyArNzQ5OCw3IEBACiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9NQykgfHwgZGVmaW5lZChDT05GSUdfU0NIRURfU01UKQotc3RhdGljIHZvaWQgYXJjaF9yZWluaXRfc2NoZWRfZG9tYWlucyh2b2lkKQorc3RhdGljIHZvaWQgcmVpbml0X3NjaGVkX2RvbWFpbnModm9pZCkKIHsKIAlnZXRfb25saW5lX2NwdXMoKTsKIApAQCAtNzkxOSw3ICs3NTMxLDcgQEAKIAllbHNlCiAJCXNjaGVkX21jX3Bvd2VyX3NhdmluZ3MgPSBsZXZlbDsKIAotCWFyY2hfcmVpbml0X3NjaGVkX2RvbWFpbnMoKTsKKwlyZWluaXRfc2NoZWRfZG9tYWlucygpOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtODAzOCwxNCArNzY1MCw5IEBACiAJYWxsb2NfY3B1bWFza192YXIoJm5vbl9pc29sYXRlZF9jcHVzLCBHRlBfS0VSTkVMKTsKIAlhbGxvY19jcHVtYXNrX3ZhcigmZmFsbGJhY2tfZG9tcywgR0ZQX0tFUk5FTCk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19OVU1BKQotCXNjaGVkX2dyb3VwX25vZGVzX2J5Y3B1ID0ga3phbGxvYyhucl9jcHVfaWRzICogc2l6ZW9mKHZvaWQgKiopLAotCQkJCQkJCQlHRlBfS0VSTkVMKTsKLQlCVUdfT04oc2NoZWRfZ3JvdXBfbm9kZXNfYnljcHUgPT0gTlVMTCk7Ci0jZW5kaWYKIAlnZXRfb25saW5lX2NwdXMoKTsKIAltdXRleF9sb2NrKCZzY2hlZF9kb21haW5zX211dGV4KTsKLQlhcmNoX2luaXRfc2NoZWRfZG9tYWlucyhjcHVfYWN0aXZlX21hc2spOworCWluaXRfc2NoZWRfZG9tYWlucyhjcHVfYWN0aXZlX21hc2spOwogCWNwdW1hc2tfYW5kbm90KG5vbl9pc29sYXRlZF9jcHVzLCBjcHVfcG9zc2libGVfbWFzaywgY3B1X2lzb2xhdGVkX21hcCk7CiAJaWYgKGNwdW1hc2tfZW1wdHkobm9uX2lzb2xhdGVkX2NwdXMpKQogCQljcHVtYXNrX3NldF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCBub25faXNvbGF0ZWRfY3B1cyk7CkBAIC04MzUyLDYgKzc5NTksNyBAQAogCS8qIEFsbG9jYXRlIHRoZSBub2h6X2NwdV9tYXNrIGlmIENPTkZJR19DUFVNQVNLX09GRlNUQUNLICovCiAJemFsbG9jX2NwdW1hc2tfdmFyKCZub2h6X2NwdV9tYXNrLCBHRlBfTk9XQUlUKTsKICNpZmRlZiBDT05GSUdfU01QCisJemFsbG9jX2NwdW1hc2tfdmFyKCZzY2hlZF9kb21haW5zX3RtcG1hc2ssIEdGUF9OT1dBSVQpOwogI2lmZGVmIENPTkZJR19OT19IWgogCXphbGxvY19jcHVtYXNrX3Zhcigmbm9oei5pZGxlX2NwdXNfbWFzaywgR0ZQX05PV0FJVCk7CiAJYWxsb2NfY3B1bWFza192YXIoJm5vaHouZ3JwX2lkbGVfbWFzaywgR0ZQX05PV0FJVCk7CkBAIC04NjI0LDcgKzgyMzIsNiBAQAogewogCXN0cnVjdCBydF9ycSAqcnRfcnE7CiAJc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2U7Ci0Jc3RydWN0IHJxICpycTsKIAlpbnQgaTsKIAogCXRnLT5ydF9ycSA9IGt6YWxsb2Moc2l6ZW9mKHJ0X3JxKSAqIG5yX2NwdV9pZHMsIEdGUF9LRVJORUwpOwpAQCAtODYzOCw4ICs4MjQ1LDYgQEAKIAkJCWt0aW1lX3RvX25zKGRlZl9ydF9iYW5kd2lkdGgucnRfcGVyaW9kKSwgMCk7CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewotCQlycSA9IGNwdV9ycShpKTsKLQogCQlydF9ycSA9IGt6YWxsb2Nfbm9kZShzaXplb2Yoc3RydWN0IHJ0X3JxKSwKIAkJCQkgICAgIEdGUF9LRVJORUwsIGNwdV90b19ub2RlKGkpKTsKIAkJaWYgKCFydF9ycSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jIGIva2VybmVsL3NjaGVkX2RlYnVnLmMKaW5kZXggMzY2OWJlYzYuLmE2NzEwYTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jCisrKyBiL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jCkBAIC0yOTYsOSArMjk2LDYgQEAKIAlQKHR0d3VfY291bnQpOwogCVAodHR3dV9sb2NhbCk7CiAKLQlTRVFfcHJpbnRmKG0sICIgIC4lLTMwczogJWRcbiIsICJia2xfY291bnQiLAotCQkJCXJxLT5ycV9zY2hlZF9pbmZvLmJrbF9jb3VudCk7Ci0KICN1bmRlZiBQCiAjdW5kZWYgUDY0CiAjZW5kaWYKQEAgLTQ0MSw3ICs0MzgsNiBAQAogCVAoc2Uuc3RhdGlzdGljcy53YWl0X2NvdW50KTsKIAlQTihzZS5zdGF0aXN0aWNzLmlvd2FpdF9zdW0pOwogCVAoc2Uuc3RhdGlzdGljcy5pb3dhaXRfY291bnQpOwotCVAoc2NoZWRfaW5mby5ia2xfY291bnQpOwogCVAoc2UubnJfbWlncmF0aW9ucyk7CiAJUChzZS5zdGF0aXN0aWNzLm5yX21pZ3JhdGlvbnNfY29sZCk7CiAJUChzZS5zdGF0aXN0aWNzLm5yX2ZhaWxlZF9taWdyYXRpb25zX2FmZmluZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfZmFpci5jIGIva2VybmVsL3NjaGVkX2ZhaXIuYwppbmRleCAwNTRjZWJiLi4zN2YyMjYyIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfZmFpci5jCisrKyBiL2tlcm5lbC9zY2hlZF9mYWlyLmMKQEAgLTEzNDQsNiArMTM0NCw4IEBACiAJaHJ0aWNrX3VwZGF0ZShycSk7CiB9CiAKK3N0YXRpYyB2b2lkIHNldF9uZXh0X2J1ZGR5KHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKTsKKwogLyoKICAqIFRoZSBkZXF1ZXVlX3Rhc2sgbWV0aG9kIGlzIGNhbGxlZCBiZWZvcmUgbnJfcnVubmluZyBpcwogICogZGVjcmVhc2VkLiBXZSByZW1vdmUgdGhlIHRhc2sgZnJvbSB0aGUgcmJ0cmVlIGFuZApAQCAtMTM1MywxNCArMTM1NSwyMiBAQAogewogCXN0cnVjdCBjZnNfcnEgKmNmc19ycTsKIAlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSA9ICZwLT5zZTsKKwlpbnQgdGFza19zbGVlcCA9IGZsYWdzICYgREVRVUVVRV9TTEVFUDsKIAogCWZvcl9lYWNoX3NjaGVkX2VudGl0eShzZSkgewogCQljZnNfcnEgPSBjZnNfcnFfb2Yoc2UpOwogCQlkZXF1ZXVlX2VudGl0eShjZnNfcnEsIHNlLCBmbGFncyk7CiAKIAkJLyogRG9uJ3QgZGVxdWV1ZSBwYXJlbnQgaWYgaXQgaGFzIG90aGVyIGVudGl0aWVzIGJlc2lkZXMgdXMgKi8KLQkJaWYgKGNmc19ycS0+bG9hZC53ZWlnaHQpCisJCWlmIChjZnNfcnEtPmxvYWQud2VpZ2h0KSB7CisJCQkvKgorCQkJICogQmlhcyBwaWNrX25leHQgdG8gcGljayBhIHRhc2sgZnJvbSB0aGlzIGNmc19ycSwgYXMKKwkJCSAqIHAgaXMgc2xlZXBpbmcgd2hlbiBpdCBpcyB3aXRoaW4gaXRzIHNjaGVkX3NsaWNlLgorCQkJICovCisJCQlpZiAodGFza19zbGVlcCAmJiBwYXJlbnRfZW50aXR5KHNlKSkKKwkJCQlzZXRfbmV4dF9idWRkeShwYXJlbnRfZW50aXR5KHNlKSk7CiAJCQlicmVhazsKKwkJfQogCQlmbGFncyB8PSBERVFVRVVFX1NMRUVQOwogCX0KIApAQCAtMTYzOSw2ICsxNjQ5LDcgQEAKIAkvKgogCSAqIE90aGVyd2lzZSwgaXRlcmF0ZSB0aGUgZG9tYWlucyBhbmQgZmluZCBhbiBlbGVnaWJsZSBpZGxlIGNwdS4KIAkgKi8KKwlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yX2VhY2hfZG9tYWluKHRhcmdldCwgc2QpIHsKIAkJaWYgKCEoc2QtPmZsYWdzICYgU0RfU0hBUkVfUEtHX1JFU09VUkNFUykpCiAJCQlicmVhazsKQEAgLTE2NTgsNiArMTY2OSw3IEBACiAJCSAgICBjcHVtYXNrX3Rlc3RfY3B1KHByZXZfY3B1LCBzY2hlZF9kb21haW5fc3BhbihzZCkpKQogCQkJYnJlYWs7CiAJfQorCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIHRhcmdldDsKIH0KQEAgLTE2OTAsNiArMTcwMiw3IEBACiAJCW5ld19jcHUgPSBwcmV2X2NwdTsKIAl9CiAKKwlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yX2VhY2hfZG9tYWluKGNwdSwgdG1wKSB7CiAJCWlmICghKHRtcC0+ZmxhZ3MgJiBTRF9MT0FEX0JBTEFOQ0UpKQogCQkJY29udGludWU7CkBAIC0xNzQwLDkgKzE3NTMsMTAgQEAKIAogCWlmIChhZmZpbmVfc2QpIHsKIAkJaWYgKGNwdSA9PSBwcmV2X2NwdSB8fCB3YWtlX2FmZmluZShhZmZpbmVfc2QsIHAsIHN5bmMpKQotCQkJcmV0dXJuIHNlbGVjdF9pZGxlX3NpYmxpbmcocCwgY3B1KTsKLQkJZWxzZQotCQkJcmV0dXJuIHNlbGVjdF9pZGxlX3NpYmxpbmcocCwgcHJldl9jcHUpOworCQkJcHJldl9jcHUgPSBjcHU7CisKKwkJbmV3X2NwdSA9IHNlbGVjdF9pZGxlX3NpYmxpbmcocCwgcHJldl9jcHUpOworCQlnb3RvIHVubG9jazsKIAl9CiAKIAl3aGlsZSAoc2QpIHsKQEAgLTE3ODMsNiArMTc5Nyw4IEBACiAJCX0KIAkJLyogd2hpbGUgbG9vcCB3aWxsIGJyZWFrIGhlcmUgaWYgc2QgPT0gTlVMTCAqLwogCX0KK3VubG9jazoKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiBuZXdfY3B1OwogfQpAQCAtMTg0MCwyNiArMTg1NiwyNiBAQAogCiBzdGF0aWMgdm9pZCBzZXRfbGFzdF9idWRkeShzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSkKIHsKLQlpZiAobGlrZWx5KHRhc2tfb2Yoc2UpLT5wb2xpY3kgIT0gU0NIRURfSURMRSkpIHsKLQkJZm9yX2VhY2hfc2NoZWRfZW50aXR5KHNlKQotCQkJY2ZzX3JxX29mKHNlKS0+bGFzdCA9IHNlOwotCX0KKwlpZiAoZW50aXR5X2lzX3Rhc2soc2UpICYmIHVubGlrZWx5KHRhc2tfb2Yoc2UpLT5wb2xpY3kgPT0gU0NIRURfSURMRSkpCisJCXJldHVybjsKKworCWZvcl9lYWNoX3NjaGVkX2VudGl0eShzZSkKKwkJY2ZzX3JxX29mKHNlKS0+bGFzdCA9IHNlOwogfQogCiBzdGF0aWMgdm9pZCBzZXRfbmV4dF9idWRkeShzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSkKIHsKLQlpZiAobGlrZWx5KHRhc2tfb2Yoc2UpLT5wb2xpY3kgIT0gU0NIRURfSURMRSkpIHsKLQkJZm9yX2VhY2hfc2NoZWRfZW50aXR5KHNlKQotCQkJY2ZzX3JxX29mKHNlKS0+bmV4dCA9IHNlOwotCX0KKwlpZiAoZW50aXR5X2lzX3Rhc2soc2UpICYmIHVubGlrZWx5KHRhc2tfb2Yoc2UpLT5wb2xpY3kgPT0gU0NIRURfSURMRSkpCisJCXJldHVybjsKKworCWZvcl9lYWNoX3NjaGVkX2VudGl0eShzZSkKKwkJY2ZzX3JxX29mKHNlKS0+bmV4dCA9IHNlOwogfQogCiBzdGF0aWMgdm9pZCBzZXRfc2tpcF9idWRkeShzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSkKIHsKLQlpZiAobGlrZWx5KHRhc2tfb2Yoc2UpLT5wb2xpY3kgIT0gU0NIRURfSURMRSkpIHsKLQkJZm9yX2VhY2hfc2NoZWRfZW50aXR5KHNlKQotCQkJY2ZzX3JxX29mKHNlKS0+c2tpcCA9IHNlOwotCX0KKwlmb3JfZWFjaF9zY2hlZF9lbnRpdHkoc2UpCisJCWNmc19ycV9vZihzZSktPnNraXAgPSBzZTsKIH0KIAogLyoKQEAgLTE4NzEsMTIgKzE4ODcsMTUgQEAKIAlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSA9ICZjdXJyLT5zZSwgKnBzZSA9ICZwLT5zZTsKIAlzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEgPSB0YXNrX2Nmc19ycShjdXJyKTsKIAlpbnQgc2NhbGUgPSBjZnNfcnEtPm5yX3J1bm5pbmcgPj0gc2NoZWRfbnJfbGF0ZW5jeTsKKwlpbnQgbmV4dF9idWRkeV9tYXJrZWQgPSAwOwogCiAJaWYgKHVubGlrZWx5KHNlID09IHBzZSkpCiAJCXJldHVybjsKIAotCWlmIChzY2hlZF9mZWF0KE5FWFRfQlVERFkpICYmIHNjYWxlICYmICEod2FrZV9mbGFncyAmIFdGX0ZPUkspKQorCWlmIChzY2hlZF9mZWF0KE5FWFRfQlVERFkpICYmIHNjYWxlICYmICEod2FrZV9mbGFncyAmIFdGX0ZPUkspKSB7CiAJCXNldF9uZXh0X2J1ZGR5KHBzZSk7CisJCW5leHRfYnVkZHlfbWFya2VkID0gMTsKKwl9CiAKIAkvKgogCSAqIFdlIGNhbiBjb21lIGhlcmUgd2l0aCBUSUZfTkVFRF9SRVNDSEVEIGFscmVhZHkgc2V0IGZyb20gbmV3IHRhc2sKQEAgLTE5MDQsOCArMTkyMywxNSBAQAogCXVwZGF0ZV9jdXJyKGNmc19ycSk7CiAJZmluZF9tYXRjaGluZ19zZSgmc2UsICZwc2UpOwogCUJVR19PTighcHNlKTsKLQlpZiAod2FrZXVwX3ByZWVtcHRfZW50aXR5KHNlLCBwc2UpID09IDEpCisJaWYgKHdha2V1cF9wcmVlbXB0X2VudGl0eShzZSwgcHNlKSA9PSAxKSB7CisJCS8qCisJCSAqIEJpYXMgcGlja19uZXh0IHRvIHBpY2sgdGhlIHNjaGVkIGVudGl0eSB0aGF0IGlzCisJCSAqIHRyaWdnZXJpbmcgdGhpcyBwcmVlbXB0aW9uLgorCQkgKi8KKwkJaWYgKCFuZXh0X2J1ZGR5X21hcmtlZCkKKwkJCXNldF9uZXh0X2J1ZGR5KHBzZSk7CiAJCWdvdG8gcHJlZW1wdDsKKwl9CiAKIAlyZXR1cm47CiAKQEAgLTIxMTYsNyArMjE0Miw3IEBACiBiYWxhbmNlX3Rhc2tzKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCiAJICAgICAgdW5zaWduZWQgbG9uZyBtYXhfbG9hZF9tb3ZlLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKIAkgICAgICBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwgaW50ICphbGxfcGlubmVkLAotCSAgICAgIGludCAqdGhpc19iZXN0X3ByaW8sIHN0cnVjdCBjZnNfcnEgKmJ1c2llc3RfY2ZzX3JxKQorCSAgICAgIHN0cnVjdCBjZnNfcnEgKmJ1c2llc3RfY2ZzX3JxKQogewogCWludCBsb29wcyA9IDAsIHB1bGxlZCA9IDA7CiAJbG9uZyByZW1fbG9hZF9tb3ZlID0gbWF4X2xvYWRfbW92ZTsKQEAgLTIxNTQsOSArMjE4MCw2IEBACiAJCSAqLwogCQlpZiAocmVtX2xvYWRfbW92ZSA8PSAwKQogCQkJYnJlYWs7Ci0KLQkJaWYgKHAtPnByaW8gPCAqdGhpc19iZXN0X3ByaW8pCi0JCQkqdGhpc19iZXN0X3ByaW8gPSBwLT5wcmlvOwogCX0KIG91dDoKIAkvKgpAQCAtMjIxNiw3ICsyMjM5LDcgQEAKIGxvYWRfYmFsYW5jZV9mYWlyKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCiAJCSAgdW5zaWduZWQgbG9uZyBtYXhfbG9hZF9tb3ZlLAogCQkgIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKLQkJICBpbnQgKmFsbF9waW5uZWQsIGludCAqdGhpc19iZXN0X3ByaW8pCisJCSAgaW50ICphbGxfcGlubmVkKQogewogCWxvbmcgcmVtX2xvYWRfbW92ZSA9IG1heF9sb2FkX21vdmU7CiAJaW50IGJ1c2llc3RfY3B1ID0gY3B1X29mKGJ1c2llc3QpOwpAQCAtMjI0MSw3ICsyMjY0LDcgQEAKIAkJcmVtX2xvYWQgPSBkaXZfdTY0KHJlbV9sb2FkLCBidXNpZXN0X2hfbG9hZCArIDEpOwogCiAJCW1vdmVkX2xvYWQgPSBiYWxhbmNlX3Rhc2tzKHRoaXNfcnEsIHRoaXNfY3B1LCBidXNpZXN0LAotCQkJCXJlbV9sb2FkLCBzZCwgaWRsZSwgYWxsX3Bpbm5lZCwgdGhpc19iZXN0X3ByaW8sCisJCQkJcmVtX2xvYWQsIHNkLCBpZGxlLCBhbGxfcGlubmVkLAogCQkJCWJ1c2llc3RfY2ZzX3JxKTsKIAogCQlpZiAoIW1vdmVkX2xvYWQpCkBAIC0yMjY3LDExICsyMjkwLDExIEBACiBsb2FkX2JhbGFuY2VfZmFpcihzdHJ1Y3QgcnEgKnRoaXNfcnEsIGludCB0aGlzX2NwdSwgc3RydWN0IHJxICpidXNpZXN0LAogCQkgIHVuc2lnbmVkIGxvbmcgbWF4X2xvYWRfbW92ZSwKIAkJICBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUsCi0JCSAgaW50ICphbGxfcGlubmVkLCBpbnQgKnRoaXNfYmVzdF9wcmlvKQorCQkgIGludCAqYWxsX3Bpbm5lZCkKIHsKIAlyZXR1cm4gYmFsYW5jZV90YXNrcyh0aGlzX3JxLCB0aGlzX2NwdSwgYnVzaWVzdCwKIAkJCW1heF9sb2FkX21vdmUsIHNkLCBpZGxlLCBhbGxfcGlubmVkLAotCQkJdGhpc19iZXN0X3ByaW8sICZidXNpZXN0LT5jZnMpOworCQkJJmJ1c2llc3QtPmNmcyk7CiB9CiAjZW5kaWYKIApAQCAtMjI4OCwxMiArMjMxMSwxMSBAQAogCQkgICAgICBpbnQgKmFsbF9waW5uZWQpCiB7CiAJdW5zaWduZWQgbG9uZyB0b3RhbF9sb2FkX21vdmVkID0gMCwgbG9hZF9tb3ZlZDsKLQlpbnQgdGhpc19iZXN0X3ByaW8gPSB0aGlzX3JxLT5jdXJyLT5wcmlvOwogCiAJZG8gewogCQlsb2FkX21vdmVkID0gbG9hZF9iYWxhbmNlX2ZhaXIodGhpc19ycSwgdGhpc19jcHUsIGJ1c2llc3QsCiAJCQkJbWF4X2xvYWRfbW92ZSAtIHRvdGFsX2xvYWRfbW92ZWQsCi0JCQkJc2QsIGlkbGUsIGFsbF9waW5uZWQsICZ0aGlzX2Jlc3RfcHJpbyk7CisJCQkJc2QsIGlkbGUsIGFsbF9waW5uZWQpOwogCiAJCXRvdGFsX2xvYWRfbW92ZWQgKz0gbG9hZF9tb3ZlZDsKIApAQCAtMjY2Miw3ICsyNjg0LDcgQEAKIAkvKgogCSAqIE9ubHkgc2libGluZ3MgY2FuIGhhdmUgc2lnbmlmaWNhbnRseSBsZXNzIHRoYW4gU0NIRURfTE9BRF9TQ0FMRQogCSAqLwotCWlmIChzZC0+bGV2ZWwgIT0gU0RfTFZfU0lCTElORykKKwlpZiAoIShzZC0+ZmxhZ3MgJiBTRF9TSEFSRV9DUFVQT1dFUikpCiAJCXJldHVybiAwOwogCiAJLyoKQEAgLTM0NzksNiArMzUwMSw3IEBACiAJcmF3X3NwaW5fdW5sb2NrKCZ0aGlzX3JxLT5sb2NrKTsKIAogCXVwZGF0ZV9zaGFyZXModGhpc19jcHUpOworCXJjdV9yZWFkX2xvY2soKTsKIAlmb3JfZWFjaF9kb21haW4odGhpc19jcHUsIHNkKSB7CiAJCXVuc2lnbmVkIGxvbmcgaW50ZXJ2YWw7CiAJCWludCBiYWxhbmNlID0gMTsKQEAgLTM1MDAsNiArMzUyMyw3IEBACiAJCQlicmVhazsKIAkJfQogCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJhd19zcGluX2xvY2soJnRoaXNfcnEtPmxvY2spOwogCkBAIC0zNTQ4LDYgKzM1NzIsNyBAQAogCWRvdWJsZV9sb2NrX2JhbGFuY2UoYnVzaWVzdF9ycSwgdGFyZ2V0X3JxKTsKIAogCS8qIFNlYXJjaCBmb3IgYW4gc2Qgc3Bhbm5pbmcgdXMgYW5kIHRoZSB0YXJnZXQgQ1BVLiAqLworCXJjdV9yZWFkX2xvY2soKTsKIAlmb3JfZWFjaF9kb21haW4odGFyZ2V0X2NwdSwgc2QpIHsKIAkJaWYgKChzZC0+ZmxhZ3MgJiBTRF9MT0FEX0JBTEFOQ0UpICYmCiAJCSAgICBjcHVtYXNrX3Rlc3RfY3B1KGJ1c2llc3RfY3B1LCBzY2hlZF9kb21haW5fc3BhbihzZCkpKQpAQCAtMzU2Myw2ICszNTg4LDcgQEAKIAkJZWxzZQogCQkJc2NoZWRzdGF0X2luYyhzZCwgYWxiX2ZhaWxlZCk7CiAJfQorCXJjdV9yZWFkX3VubG9jaygpOwogCWRvdWJsZV91bmxvY2tfYmFsYW5jZShidXNpZXN0X3JxLCB0YXJnZXRfcnEpOwogb3V0X3VubG9jazoKIAlidXNpZXN0X3JxLT5hY3RpdmVfYmFsYW5jZSA9IDA7CkBAIC0zNjg5LDYgKzM3MTUsNyBAQAogewogCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOwogCXN0cnVjdCBzY2hlZF9ncm91cCAqaWxiX2dyb3VwOworCWludCBpbGIgPSBucl9jcHVfaWRzOwogCiAJLyoKIAkgKiBIYXZlIGlkbGUgbG9hZCBiYWxhbmNlciBzZWxlY3Rpb24gZnJvbSBzZW1pLWlkbGUgcGFja2FnZXMgb25seQpAQCAtMzcwNCwyMCArMzczMSwyNSBAQAogCWlmIChjcHVtYXNrX3dlaWdodChub2h6LmlkbGVfY3B1c19tYXNrKSA8IDIpCiAJCWdvdG8gb3V0X2RvbmU7CiAKKwlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yX2VhY2hfZmxhZ19kb21haW4oY3B1LCBzZCwgU0RfUE9XRVJTQVZJTkdTX0JBTEFOQ0UpIHsKIAkJaWxiX2dyb3VwID0gc2QtPmdyb3VwczsKIAogCQlkbyB7Ci0JCQlpZiAoaXNfc2VtaV9pZGxlX2dyb3VwKGlsYl9ncm91cCkpCi0JCQkJcmV0dXJuIGNwdW1hc2tfZmlyc3Qobm9oei5ncnBfaWRsZV9tYXNrKTsKKwkJCWlmIChpc19zZW1pX2lkbGVfZ3JvdXAoaWxiX2dyb3VwKSkgeworCQkJCWlsYiA9IGNwdW1hc2tfZmlyc3Qobm9oei5ncnBfaWRsZV9tYXNrKTsKKwkJCQlnb3RvIHVubG9jazsKKwkJCX0KIAogCQkJaWxiX2dyb3VwID0gaWxiX2dyb3VwLT5uZXh0OwogCiAJCX0gd2hpbGUgKGlsYl9ncm91cCAhPSBzZC0+Z3JvdXBzKTsKIAl9Cit1bmxvY2s6CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIG91dF9kb25lOgotCXJldHVybiBucl9jcHVfaWRzOworCXJldHVybiBpbGI7CiB9CiAjZWxzZSAvKiAgKENPTkZJR19TQ0hFRF9NQyB8fCBDT05GSUdfU0NIRURfU01UKSAqLwogc3RhdGljIGlubGluZSBpbnQgZmluZF9uZXdfaWxiKGludCBjYWxsX2NwdSkKQEAgLTM4NjIsNiArMzg5NCw3IEBACiAKIAl1cGRhdGVfc2hhcmVzKGNwdSk7CiAKKwlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yX2VhY2hfZG9tYWluKGNwdSwgc2QpIHsKIAkJaWYgKCEoc2QtPmZsYWdzICYgU0RfTE9BRF9CQUxBTkNFKSkKIAkJCWNvbnRpbnVlOwpAQCAtMzkwNyw2ICszOTQwLDcgQEAKIAkJaWYgKCFiYWxhbmNlKQogCQkJYnJlYWs7CiAJfQorCXJjdV9yZWFkX3VubG9jaygpOwogCiAJLyoKIAkgKiBuZXh0X2JhbGFuY2Ugd2lsbCBiZSB1cGRhdGVkIG9ubHkgd2hlbiB0aGVyZSBpcyBhIG5lZWQuCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfcnQuYyBiL2tlcm5lbC9zY2hlZF9ydC5jCmluZGV4IDE5ZWNiMzEuLjY0YjJhMzcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9ydC5jCisrKyBiL2tlcm5lbC9zY2hlZF9ydC5jCkBAIC0xODMsNiArMTgzLDE0IEBACiAJcmV0dXJuIGt0aW1lX3RvX25zKHJ0X3JxLT50Zy0+cnRfYmFuZHdpZHRoLnJ0X3BlcmlvZCk7CiB9CiAKK3R5cGVkZWYgc3RydWN0IHRhc2tfZ3JvdXAgKnJ0X3JxX2l0ZXJfdDsKKworI2RlZmluZSBmb3JfZWFjaF9ydF9ycShydF9ycSwgaXRlciwgcnEpIFwKKwlmb3IgKGl0ZXIgPSBsaXN0X2VudHJ5X3JjdSh0YXNrX2dyb3Vwcy5uZXh0LCB0eXBlb2YoKml0ZXIpLCBsaXN0KTsgXAorCSAgICAgKCZpdGVyLT5saXN0ICE9ICZ0YXNrX2dyb3VwcykgJiYgXAorCSAgICAgKHJ0X3JxID0gaXRlci0+cnRfcnFbY3B1X29mKHJxKV0pOyBcCisJICAgICBpdGVyID0gbGlzdF9lbnRyeV9yY3UoaXRlci0+bGlzdC5uZXh0LCB0eXBlb2YoKml0ZXIpLCBsaXN0KSkKKwogc3RhdGljIGlubGluZSB2b2lkIGxpc3RfYWRkX2xlYWZfcnRfcnEoc3RydWN0IHJ0X3JxICpydF9ycSkKIHsKIAlsaXN0X2FkZF9yY3UoJnJ0X3JxLT5sZWFmX3J0X3JxX2xpc3QsCkBAIC0yODgsNiArMjk2LDExIEBACiAJcmV0dXJuIGt0aW1lX3RvX25zKGRlZl9ydF9iYW5kd2lkdGgucnRfcGVyaW9kKTsKIH0KIAordHlwZWRlZiBzdHJ1Y3QgcnRfcnEgKnJ0X3JxX2l0ZXJfdDsKKworI2RlZmluZSBmb3JfZWFjaF9ydF9ycShydF9ycSwgaXRlciwgcnEpIFwKKwlmb3IgKCh2b2lkKSBpdGVyLCBydF9ycSA9ICZycS0+cnQ7IHJ0X3JxOyBydF9ycSA9IE5VTEwpCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X2FkZF9sZWFmX3J0X3JxKHN0cnVjdCBydF9ycSAqcnRfcnEpCiB7CiB9CkBAIC00MDIsMTIgKzQxNSwxMyBAQAogc3RhdGljIHZvaWQgX19kaXNhYmxlX3J1bnRpbWUoc3RydWN0IHJxICpycSkKIHsKIAlzdHJ1Y3Qgcm9vdF9kb21haW4gKnJkID0gcnEtPnJkOworCXJ0X3JxX2l0ZXJfdCBpdGVyOwogCXN0cnVjdCBydF9ycSAqcnRfcnE7CiAKIAlpZiAodW5saWtlbHkoIXNjaGVkdWxlcl9ydW5uaW5nKSkKIAkJcmV0dXJuOwogCi0JZm9yX2VhY2hfbGVhZl9ydF9ycShydF9ycSwgcnEpIHsKKwlmb3JfZWFjaF9ydF9ycShydF9ycSwgaXRlciwgcnEpIHsKIAkJc3RydWN0IHJ0X2JhbmR3aWR0aCAqcnRfYiA9IHNjaGVkX3J0X2JhbmR3aWR0aChydF9ycSk7CiAJCXM2NCB3YW50OwogCQlpbnQgaTsKQEAgLTQ4Nyw2ICs1MDEsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2VuYWJsZV9ydW50aW1lKHN0cnVjdCBycSAqcnEpCiB7CisJcnRfcnFfaXRlcl90IGl0ZXI7CiAJc3RydWN0IHJ0X3JxICpydF9ycTsKIAogCWlmICh1bmxpa2VseSghc2NoZWR1bGVyX3J1bm5pbmcpKQpAQCAtNDk1LDcgKzUxMCw3IEBACiAJLyoKIAkgKiBSZXNldCBlYWNoIHJ1bnF1ZXVlJ3MgYmFuZHdpZHRoIHNldHRpbmdzCiAJICovCi0JZm9yX2VhY2hfbGVhZl9ydF9ycShydF9ycSwgcnEpIHsKKwlmb3JfZWFjaF9ydF9ycShydF9ycSwgaXRlciwgcnEpIHsKIAkJc3RydWN0IHJ0X2JhbmR3aWR0aCAqcnRfYiA9IHNjaGVkX3J0X2JhbmR3aWR0aChydF9ycSk7CiAKIAkJcmF3X3NwaW5fbG9jaygmcnRfYi0+cnRfcnVudGltZV9sb2NrKTsKQEAgLTU2Miw2ICs1NzcsMTMgQEAKIAkJCWlmIChydF9ycS0+cnRfdGhyb3R0bGVkICYmIHJ0X3JxLT5ydF90aW1lIDwgcnVudGltZSkgewogCQkJCXJ0X3JxLT5ydF90aHJvdHRsZWQgPSAwOwogCQkJCWVucXVldWUgPSAxOworCisJCQkJLyoKKwkJCQkgKiBGb3JjZSBhIGNsb2NrIHVwZGF0ZSBpZiB0aGUgQ1BVIHdhcyBpZGxlLAorCQkJCSAqIGxlc3Qgd2FrZXVwIC0+IHVudGhyb3R0bGUgdGltZSBhY2N1bXVsYXRlLgorCQkJCSAqLworCQkJCWlmIChydF9ycS0+cnRfbnJfcnVubmluZyAmJiBycS0+Y3VyciA9PSBycS0+aWRsZSkKKwkJCQkJcnEtPnNraXBfY2xvY2tfdXBkYXRlID0gLTE7CiAJCQl9CiAJCQlpZiAocnRfcnEtPnJ0X3RpbWUgfHwgcnRfcnEtPnJ0X25yX3J1bm5pbmcpCiAJCQkJaWRsZSA9IDA7CkBAIC0xODEwLDEwICsxODMyLDExIEBACiAKIHN0YXRpYyB2b2lkIHByaW50X3J0X3N0YXRzKHN0cnVjdCBzZXFfZmlsZSAqbSwgaW50IGNwdSkKIHsKKwlydF9ycV9pdGVyX3QgaXRlcjsKIAlzdHJ1Y3QgcnRfcnEgKnJ0X3JxOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCWZvcl9lYWNoX2xlYWZfcnRfcnEocnRfcnEsIGNwdV9ycShjcHUpKQorCWZvcl9lYWNoX3J0X3JxKHJ0X3JxLCBpdGVyLCBjcHVfcnEoY3B1KSkKIAkJcHJpbnRfcnRfcnEobSwgY3B1LCBydF9ycSk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvc2lnbmFsLmMgYi9rZXJuZWwvc2lnbmFsLmMKaW5kZXggNzE2NWFmNS4uYWQ1ZTgxOCAxMDA2NDQKLS0tIGEva2VybmVsL3NpZ25hbC5jCisrKyBiL2tlcm5lbC9zaWduYWwuYwpAQCAtMTI0LDcgKzEyNCw3IEBACiAKIHN0YXRpYyBpbnQgcmVjYWxjX3NpZ3BlbmRpbmdfdHNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkKIHsKLQlpZiAodC0+c2lnbmFsLT5ncm91cF9zdG9wX2NvdW50ID4gMCB8fAorCWlmICgodC0+Z3JvdXBfc3RvcCAmIEdST1VQX1NUT1BfUEVORElORykgfHwKIAkgICAgUEVORElORygmdC0+cGVuZGluZywgJnQtPmJsb2NrZWQpIHx8CiAJICAgIFBFTkRJTkcoJnQtPnNpZ25hbC0+c2hhcmVkX3BlbmRpbmcsICZ0LT5ibG9ja2VkKSkgewogCQlzZXRfdHNrX3RocmVhZF9mbGFnKHQsIFRJRl9TSUdQRU5ESU5HKTsKQEAgLTIyMyw2ICsyMjMsODMgQEAKIAkJCQljdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIHNpZyk7CiB9CiAKKy8qKgorICogdGFza19jbGVhcl9ncm91cF9zdG9wX3RyYXBwaW5nIC0gY2xlYXIgZ3JvdXAgc3RvcCB0cmFwcGluZyBiaXQKKyAqIEB0YXNrOiB0YXJnZXQgdGFzaworICoKKyAqIElmIEdST1VQX1NUT1BfVFJBUFBJTkcgaXMgc2V0LCBhIHB0cmFjZXIgaXMgd2FpdGluZyBmb3IgdXMuICBDbGVhciBpdAorICogYW5kIHdha2UgdXAgdGhlIHB0cmFjZXIuICBOb3RlIHRoYXQgd2UgZG9uJ3QgbmVlZCBhbnkgZnVydGhlciBsb2NraW5nLgorICogQHRhc2stPnNpZ2xvY2sgZ3VhcmFudGVlcyB0aGF0IEB0YXNrLT5wYXJlbnQgcG9pbnRzIHRvIHRoZSBwdHJhY2VyLgorICoKKyAqIENPTlRFWFQ6CisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIEB0YXNrLT5zaWdoYW5kLT5zaWdsb2NrIGhlbGQuCisgKi8KK3N0YXRpYyB2b2lkIHRhc2tfY2xlYXJfZ3JvdXBfc3RvcF90cmFwcGluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJaWYgKHVubGlrZWx5KHRhc2stPmdyb3VwX3N0b3AgJiBHUk9VUF9TVE9QX1RSQVBQSU5HKSkgeworCQl0YXNrLT5ncm91cF9zdG9wICY9IH5HUk9VUF9TVE9QX1RSQVBQSU5HOworCQlfX3dha2VfdXBfc3luY19rZXkoJnRhc2stPnBhcmVudC0+c2lnbmFsLT53YWl0X2NobGRleGl0LAorCQkJCSAgIFRBU0tfVU5JTlRFUlJVUFRJQkxFLCAxLCB0YXNrKTsKKwl9Cit9CisKKy8qKgorICogdGFza19jbGVhcl9ncm91cF9zdG9wX3BlbmRpbmcgLSBjbGVhciBwZW5kaW5nIGdyb3VwIHN0b3AKKyAqIEB0YXNrOiB0YXJnZXQgdGFzaworICoKKyAqIENsZWFyIGdyb3VwIHN0b3Agc3RhdGVzIGZvciBAdGFzay4KKyAqCisgKiBDT05URVhUOgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBAdGFzay0+c2lnaGFuZC0+c2lnbG9jayBoZWxkLgorICovCit2b2lkIHRhc2tfY2xlYXJfZ3JvdXBfc3RvcF9wZW5kaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwl0YXNrLT5ncm91cF9zdG9wICY9IH4oR1JPVVBfU1RPUF9QRU5ESU5HIHwgR1JPVVBfU1RPUF9DT05TVU1FIHwKKwkJCSAgICAgIEdST1VQX1NUT1BfREVRVUVVRUQpOworfQorCisvKioKKyAqIHRhc2tfcGFydGljaXBhdGVfZ3JvdXBfc3RvcCAtIHBhcnRpY2lwYXRlIGluIGEgZ3JvdXAgc3RvcAorICogQHRhc2s6IHRhc2sgcGFydGljaXBhdGluZyBpbiBhIGdyb3VwIHN0b3AKKyAqCisgKiBAdGFzayBoYXMgR1JPVVBfU1RPUF9QRU5ESU5HIHNldCBhbmQgaXMgcGFydGljaXBhdGluZyBpbiBhIGdyb3VwIHN0b3AuCisgKiBHcm91cCBzdG9wIHN0YXRlcyBhcmUgY2xlYXJlZCBhbmQgdGhlIGdyb3VwIHN0b3AgY291bnQgaXMgY29uc3VtZWQgaWYKKyAqICVHUk9VUF9TVE9QX0NPTlNVTUUgd2FzIHNldC4gIElmIHRoZSBjb25zdW1wdGlvbiBjb21wbGV0ZXMgdGhlIGdyb3VwCisgKiBzdG9wLCB0aGUgYXBwcm9wcmlhdGUgJVNJR05BTF8qIGZsYWdzIGFyZSBzZXQuCisgKgorICogQ09OVEVYVDoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggQHRhc2stPnNpZ2hhbmQtPnNpZ2xvY2sgaGVsZC4KKyAqCisgKiBSRVRVUk5TOgorICogJXRydWUgaWYgZ3JvdXAgc3RvcCBjb21wbGV0aW9uIHNob3VsZCBiZSBub3RpZmllZCB0byB0aGUgcGFyZW50LCAlZmFsc2UKKyAqIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgdGFza19wYXJ0aWNpcGF0ZV9ncm91cF9zdG9wKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnID0gdGFzay0+c2lnbmFsOworCWJvb2wgY29uc3VtZSA9IHRhc2stPmdyb3VwX3N0b3AgJiBHUk9VUF9TVE9QX0NPTlNVTUU7CisKKwlXQVJOX09OX09OQ0UoISh0YXNrLT5ncm91cF9zdG9wICYgR1JPVVBfU1RPUF9QRU5ESU5HKSk7CisKKwl0YXNrX2NsZWFyX2dyb3VwX3N0b3BfcGVuZGluZyh0YXNrKTsKKworCWlmICghY29uc3VtZSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCFXQVJOX09OX09OQ0Uoc2lnLT5ncm91cF9zdG9wX2NvdW50ID09IDApKQorCQlzaWctPmdyb3VwX3N0b3BfY291bnQtLTsKKworCS8qCisJICogVGVsbCB0aGUgY2FsbGVyIHRvIG5vdGlmeSBjb21wbGV0aW9uIGlmZiB3ZSBhcmUgZW50ZXJpbmcgaW50byBhCisJICogZnJlc2ggZ3JvdXAgc3RvcC4gIFJlYWQgY29tbWVudCBpbiBkb19zaWduYWxfc3RvcCgpIGZvciBkZXRhaWxzLgorCSAqLworCWlmICghc2lnLT5ncm91cF9zdG9wX2NvdW50ICYmICEoc2lnLT5mbGFncyAmIFNJR05BTF9TVE9QX1NUT1BQRUQpKSB7CisJCXNpZy0+ZmxhZ3MgPSBTSUdOQUxfU1RPUF9TVE9QUEVEOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCiAvKgogICogYWxsb2NhdGUgYSBuZXcgc2lnbmFsIHF1ZXVlIHJlY29yZAogICogLSB0aGlzIG1heSBiZSBjYWxsZWQgd2l0aG91dCBsb2NrcyBpZiBhbmQgb25seSBpZiB0ID09IGN1cnJlbnQsIG90aGVyd2lzZSBhbgpAQCAtNTI3LDcgKzYwNCw3IEBACiAJCSAqIGlzIHRvIGFsZXJ0IHN0b3Atc2lnbmFsIHByb2Nlc3NpbmcgY29kZSB3aGVuIGFub3RoZXIKIAkJICogcHJvY2Vzc29yIGhhcyBjb21lIGFsb25nIGFuZCBjbGVhcmVkIHRoZSBmbGFnLgogCQkgKi8KLQkJdHNrLT5zaWduYWwtPmZsYWdzIHw9IFNJR05BTF9TVE9QX0RFUVVFVUVEOworCQljdXJyZW50LT5ncm91cF9zdG9wIHw9IEdST1VQX1NUT1BfREVRVUVVRUQ7CiAJfQogCWlmICgoaW5mby0+c2lfY29kZSAmIF9fU0lfTUFTSykgPT0gX19TSV9USU1FUiAmJiBpbmZvLT5zaV9zeXNfcHJpdmF0ZSkgewogCQkvKgpAQCAtNTkyLDcgKzY2OSw3IEBACiAJaWYgKHNpZ2lzZW1wdHlzZXQoJm0pKQogCQlyZXR1cm4gMDsKIAotCXNpZ25hbmRzZXRzKCZzLT5zaWduYWwsICZzLT5zaWduYWwsIG1hc2spOworCXNpZ2FuZG5zZXRzKCZzLT5zaWduYWwsICZzLT5zaWduYWwsIG1hc2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShxLCBuLCAmcy0+bGlzdCwgbGlzdCkgewogCQlpZiAoc2lnaXNtZW1iZXIobWFzaywgcS0+aW5mby5zaV9zaWdubykpIHsKIAkJCWxpc3RfZGVsX2luaXQoJnEtPmxpc3QpOwpAQCAtNzI3LDM0ICs4MDQsMTQgQEAKIAl9IGVsc2UgaWYgKHNpZyA9PSBTSUdDT05UKSB7CiAJCXVuc2lnbmVkIGludCB3aHk7CiAJCS8qCi0JCSAqIFJlbW92ZSBhbGwgc3RvcCBzaWduYWxzIGZyb20gYWxsIHF1ZXVlcywKLQkJICogYW5kIHdha2UgYWxsIHRocmVhZHMuCisJCSAqIFJlbW92ZSBhbGwgc3RvcCBzaWduYWxzIGZyb20gYWxsIHF1ZXVlcywgd2FrZSBhbGwgdGhyZWFkcy4KIAkJICovCiAJCXJtX2Zyb21fcXVldWUoU0lHX0tFUk5FTF9TVE9QX01BU0ssICZzaWduYWwtPnNoYXJlZF9wZW5kaW5nKTsKIAkJdCA9IHA7CiAJCWRvIHsKLQkJCXVuc2lnbmVkIGludCBzdGF0ZTsKKwkJCXRhc2tfY2xlYXJfZ3JvdXBfc3RvcF9wZW5kaW5nKHQpOwogCQkJcm1fZnJvbV9xdWV1ZShTSUdfS0VSTkVMX1NUT1BfTUFTSywgJnQtPnBlbmRpbmcpOwotCQkJLyoKLQkJCSAqIElmIHRoZXJlIGlzIGEgaGFuZGxlciBmb3IgU0lHQ09OVCwgd2UgbXVzdCBtYWtlCi0JCQkgKiBzdXJlIHRoYXQgbm8gdGhyZWFkIHJldHVybnMgdG8gdXNlciBtb2RlIGJlZm9yZQotCQkJICogd2UgcG9zdCB0aGUgc2lnbmFsLCBpbiBjYXNlIGl0IHdhcyB0aGUgb25seQotCQkJICogdGhyZWFkIGVsaWdpYmxlIHRvIHJ1biB0aGUgc2lnbmFsIGhhbmRsZXItLXRoZW4KLQkJCSAqIGl0IG11c3Qgbm90IGRvIGFueXRoaW5nIGJldHdlZW4gcmVzdW1pbmcgYW5kCi0JCQkgKiBydW5uaW5nIHRoZSBoYW5kbGVyLiAgV2l0aCB0aGUgVElGX1NJR1BFTkRJTkcKLQkJCSAqIGZsYWcgc2V0LCB0aGUgdGhyZWFkIHdpbGwgcGF1c2UgYW5kIGFjcXVpcmUgdGhlCi0JCQkgKiBzaWdsb2NrIHRoYXQgd2UgaG9sZCBub3cgYW5kIHVudGlsIHdlJ3ZlIHF1ZXVlZAotCQkJICogdGhlIHBlbmRpbmcgc2lnbmFsLgotCQkJICoKLQkJCSAqIFdha2UgdXAgdGhlIHN0b3BwZWQgdGhyZWFkIF9hZnRlcl8gc2V0dGluZwotCQkJICogVElGX1NJR1BFTkRJTkcKLQkJCSAqLwotCQkJc3RhdGUgPSBfX1RBU0tfU1RPUFBFRDsKLQkJCWlmIChzaWdfdXNlcl9kZWZpbmVkKHQsIFNJR0NPTlQpICYmICFzaWdpc21lbWJlcigmdC0+YmxvY2tlZCwgU0lHQ09OVCkpIHsKLQkJCQlzZXRfdHNrX3RocmVhZF9mbGFnKHQsIFRJRl9TSUdQRU5ESU5HKTsKLQkJCQlzdGF0ZSB8PSBUQVNLX0lOVEVSUlVQVElCTEU7Ci0JCQl9Ci0JCQl3YWtlX3VwX3N0YXRlKHQsIHN0YXRlKTsKKwkJCXdha2VfdXBfc3RhdGUodCwgX19UQVNLX1NUT1BQRUQpOwogCQl9IHdoaWxlX2VhY2hfdGhyZWFkKHAsIHQpOwogCiAJCS8qCkBAIC03ODAsMTMgKzgzNyw2IEBACiAJCQlzaWduYWwtPmZsYWdzID0gd2h5IHwgU0lHTkFMX1NUT1BfQ09OVElOVUVEOwogCQkJc2lnbmFsLT5ncm91cF9zdG9wX2NvdW50ID0gMDsKIAkJCXNpZ25hbC0+Z3JvdXBfZXhpdF9jb2RlID0gMDsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBXZSBhcmUgbm90IHN0b3BwZWQsIGJ1dCB0aGVyZSBjb3VsZCBiZSBhIHN0b3AKLQkJCSAqIHNpZ25hbCBpbiB0aGUgbWlkZGxlIG9mIGJlaW5nIHByb2Nlc3NlZCBhZnRlcgotCQkJICogYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBxdWV1ZS4gIENsZWFyIHRoYXQgdG9vLgotCQkJICovCi0JCQlzaWduYWwtPmZsYWdzICY9IH5TSUdOQUxfU1RPUF9ERVFVRVVFRDsKIAkJfQogCX0KIApAQCAtODc1LDYgKzkyNSw3IEBACiAJCQlzaWduYWwtPmdyb3VwX3N0b3BfY291bnQgPSAwOwogCQkJdCA9IHA7CiAJCQlkbyB7CisJCQkJdGFza19jbGVhcl9ncm91cF9zdG9wX3BlbmRpbmcodCk7CiAJCQkJc2lnYWRkc2V0KCZ0LT5wZW5kaW5nLnNpZ25hbCwgU0lHS0lMTCk7CiAJCQkJc2lnbmFsX3dha2VfdXAodCwgMSk7CiAJCQl9IHdoaWxlX2VhY2hfdGhyZWFkKHAsIHQpOwpAQCAtMTEwOSw2ICsxMTYwLDcgQEAKIAlwLT5zaWduYWwtPmdyb3VwX3N0b3BfY291bnQgPSAwOwogCiAJd2hpbGVfZWFjaF90aHJlYWQocCwgdCkgeworCQl0YXNrX2NsZWFyX2dyb3VwX3N0b3BfcGVuZGluZyh0KTsKIAkJY291bnQrKzsKIAogCQkvKiBEb24ndCBib3RoZXIgd2l0aCBhbHJlYWR5IGRlYWQgdGhyZWFkcyAqLwpAQCAtMTUzNiwxNiArMTU4OCwzMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGRvX25vdGlmeV9wYXJlbnRfY2xkc3RvcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IHdoeSkKKy8qKgorICogZG9fbm90aWZ5X3BhcmVudF9jbGRzdG9wIC0gbm90aWZ5IHBhcmVudCBvZiBzdG9wcGVkL2NvbnRpbnVlZCBzdGF0ZSBjaGFuZ2UKKyAqIEB0c2s6IHRhc2sgcmVwb3J0aW5nIHRoZSBzdGF0ZSBjaGFuZ2UKKyAqIEBmb3JfcHRyYWNlcjogdGhlIG5vdGlmaWNhdGlvbiBpcyBmb3IgcHRyYWNlcgorICogQHdoeTogQ0xEX3tDT05USU5VRUR8U1RPUFBFRHxUUkFQUEVEfSB0byByZXBvcnQKKyAqCisgKiBOb3RpZnkgQHRzaydzIHBhcmVudCB0aGF0IHRoZSBzdG9wcGVkL2NvbnRpbnVlZCBzdGF0ZSBoYXMgY2hhbmdlZC4gIElmCisgKiBAZm9yX3B0cmFjZXIgaXMgJWZhbHNlLCBAdHNrJ3MgZ3JvdXAgbGVhZGVyIG5vdGlmaWVzIHRvIGl0cyByZWFsIHBhcmVudC4KKyAqIElmICV0cnVlLCBAdHNrIHJlcG9ydHMgdG8gQHRzay0+cGFyZW50IHdoaWNoIHNob3VsZCBiZSB0aGUgcHRyYWNlci4KKyAqCisgKiBDT05URVhUOgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0YXNrbGlzdF9sb2NrIGF0IGxlYXN0IHJlYWQgbG9ja2VkLgorICovCitzdGF0aWMgdm9pZCBkb19ub3RpZnlfcGFyZW50X2NsZHN0b3Aoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCQkJICAgICBib29sIGZvcl9wdHJhY2VyLCBpbnQgd2h5KQogewogCXN0cnVjdCBzaWdpbmZvIGluZm87CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudDsKIAlzdHJ1Y3Qgc2lnaGFuZF9zdHJ1Y3QgKnNpZ2hhbmQ7CiAKLQlpZiAodGFza19wdHJhY2UodHNrKSkKKwlpZiAoZm9yX3B0cmFjZXIpIHsKIAkJcGFyZW50ID0gdHNrLT5wYXJlbnQ7Ci0JZWxzZSB7CisJfSBlbHNlIHsKIAkJdHNrID0gdHNrLT5ncm91cF9sZWFkZXI7CiAJCXBhcmVudCA9IHRzay0+cmVhbF9wYXJlbnQ7CiAJfQpAQCAtMTYyMSw2ICsxNjg3LDE1IEBACiB9CiAKIC8qCisgKiBUZXN0IHdoZXRoZXIgdGhlIHRhcmdldCB0YXNrIG9mIHRoZSB1c3VhbCBjbGRzdG9wIG5vdGlmaWNhdGlvbiAtIHRoZQorICogcmVhbF9wYXJlbnQgb2YgQGNoaWxkIC0gaXMgaW4gdGhlIHNhbWUgZ3JvdXAgYXMgdGhlIHB0cmFjZXIuCisgKi8KK3N0YXRpYyBib29sIHJlYWxfcGFyZW50X2lzX3B0cmFjZXIoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKK3sKKwlyZXR1cm4gc2FtZV90aHJlYWRfZ3JvdXAoY2hpbGQtPnBhcmVudCwgY2hpbGQtPnJlYWxfcGFyZW50KTsKK30KKworLyoKICAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2l0aCBjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrIGhlbGQuCiAgKgogICogVGhpcyBzaG91bGQgYmUgdGhlIHBhdGggZm9yIGFsbCBwdHJhY2Ugc3RvcHMuCkBAIC0xNjMxLDEwICsxNzA2LDEyIEBACiAgKiBJZiB3ZSBhY3R1YWxseSBkZWNpZGUgbm90IHRvIHN0b3AgYXQgYWxsIGJlY2F1c2UgdGhlIHRyYWNlcgogICogaXMgZ29uZSwgd2Uga2VlcCBjdXJyZW50LT5leGl0X2NvZGUgdW5sZXNzIGNsZWFyX2NvZGUuCiAgKi8KLXN0YXRpYyB2b2lkIHB0cmFjZV9zdG9wKGludCBleGl0X2NvZGUsIGludCBjbGVhcl9jb2RlLCBzaWdpbmZvX3QgKmluZm8pCitzdGF0aWMgdm9pZCBwdHJhY2Vfc3RvcChpbnQgZXhpdF9jb2RlLCBpbnQgd2h5LCBpbnQgY2xlYXJfY29kZSwgc2lnaW5mb190ICppbmZvKQogCV9fcmVsZWFzZXMoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spCiAJX19hY3F1aXJlcygmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jaykKIHsKKwlib29sIGdzdG9wX2RvbmUgPSBmYWxzZTsKKwogCWlmIChhcmNoX3B0cmFjZV9zdG9wX25lZWRlZChleGl0X2NvZGUsIGluZm8pKSB7CiAJCS8qCiAJCSAqIFRoZSBhcmNoIGNvZGUgaGFzIHNvbWV0aGluZyBzcGVjaWFsIHRvIGRvIGJlZm9yZSBhCkBAIC0xNjU1LDIxICsxNzMyLDQ5IEBACiAJfQogCiAJLyoKLQkgKiBJZiB0aGVyZSBpcyBhIGdyb3VwIHN0b3AgaW4gcHJvZ3Jlc3MsCi0JICogd2UgbXVzdCBwYXJ0aWNpcGF0ZSBpbiB0aGUgYm9va2tlZXBpbmcuCisJICogSWYgQHdoeSBpcyBDTERfU1RPUFBFRCwgd2UncmUgdHJhcHBpbmcgdG8gcGFydGljaXBhdGUgaW4gYSBncm91cAorCSAqIHN0b3AuICBEbyB0aGUgYm9va2tlZXBpbmcuICBOb3RlIHRoYXQgaWYgU0lHQ09OVCB3YXMgZGVsaWV2ZXJlZAorCSAqIHdoaWxlIHNpZ2xvY2sgd2FzIHJlbGVhc2VkIGZvciB0aGUgYXJjaCBob29rLCBQRU5ESU5HIGNvdWxkIGJlCisJICogY2xlYXIgbm93LiAgV2UgYWN0IGFzIGlmIFNJR0NPTlQgaXMgcmVjZWl2ZWQgYWZ0ZXIgVEFTS19UUkFDRUQKKwkgKiBpcyBlbnRlcmVkIC0gaWdub3JlIGl0LgogCSAqLwotCWlmIChjdXJyZW50LT5zaWduYWwtPmdyb3VwX3N0b3BfY291bnQgPiAwKQotCQktLWN1cnJlbnQtPnNpZ25hbC0+Z3JvdXBfc3RvcF9jb3VudDsKKwlpZiAod2h5ID09IENMRF9TVE9QUEVEICYmIChjdXJyZW50LT5ncm91cF9zdG9wICYgR1JPVVBfU1RPUF9QRU5ESU5HKSkKKwkJZ3N0b3BfZG9uZSA9IHRhc2tfcGFydGljaXBhdGVfZ3JvdXBfc3RvcChjdXJyZW50KTsKIAogCWN1cnJlbnQtPmxhc3Rfc2lnaW5mbyA9IGluZm87CiAJY3VycmVudC0+ZXhpdF9jb2RlID0gZXhpdF9jb2RlOwogCi0JLyogTGV0IHRoZSBkZWJ1Z2dlciBydW4uICAqLwotCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19UUkFDRUQpOworCS8qCisJICogVFJBQ0VEIHNob3VsZCBiZSB2aXNpYmxlIGJlZm9yZSBUUkFQUElORyBpcyBjbGVhcmVkOyBvdGhlcndpc2UsCisJICogdGhlIHRyYWNlciBtaWdodCBmYWlsIGRvX3dhaXQoKS4KKwkgKi8KKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1RSQUNFRCk7CisKKwkvKgorCSAqIFdlJ3JlIGNvbW1pdHRpbmcgdG8gdHJhcHBpbmcuICBDbGVhcmluZyBHUk9VUF9TVE9QX1RSQVBQSU5HIGFuZAorCSAqIHRyYW5zaXRpb24gdG8gVEFTS19UUkFDRUQgc2hvdWxkIGJlIGF0b21pYyB3aXRoIHJlc3BlY3QgdG8KKwkgKiBzaWdsb2NrLiAgVGhpcyBoc291bGQgYmUgZG9uZSBhZnRlciB0aGUgYXJjaCBob29rIGFzIHNpZ2xvY2sgaXMKKwkgKiByZWxlYXNlZCBhbmQgcmVncmFiYmVkIGFjcm9zcyBpdC4KKwkgKi8KKwl0YXNrX2NsZWFyX2dyb3VwX3N0b3BfdHJhcHBpbmcoY3VycmVudCk7CisKIAlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJaWYgKG1heV9wdHJhY2Vfc3RvcCgpKSB7Ci0JCWRvX25vdGlmeV9wYXJlbnRfY2xkc3RvcChjdXJyZW50LCBDTERfVFJBUFBFRCk7CisJCS8qCisJCSAqIE5vdGlmeSBwYXJlbnRzIG9mIHRoZSBzdG9wLgorCQkgKgorCQkgKiBXaGlsZSBwdHJhY2VkLCB0aGVyZSBhcmUgdHdvIHBhcmVudHMgLSB0aGUgcHRyYWNlciBhbmQKKwkJICogdGhlIHJlYWxfcGFyZW50IG9mIHRoZSBncm91cF9sZWFkZXIuICBUaGUgcHRyYWNlciBzaG91bGQKKwkJICoga25vdyBhYm91dCBldmVyeSBzdG9wIHdoaWxlIHRoZSByZWFsIHBhcmVudCBpcyBvbmx5CisJCSAqIGludGVyZXN0ZWQgaW4gdGhlIGNvbXBsZXRpb24gb2YgZ3JvdXAgc3RvcC4gIFRoZSBzdGF0ZXMKKwkJICogZm9yIHRoZSB0d28gZG9uJ3QgaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyLiAgTm90aWZ5CisJCSAqIHNlcGFyYXRlbHkgdW5sZXNzIHRoZXkncmUgZ29ubmEgYmUgZHVwbGljYXRlcy4KKwkJICovCisJCWRvX25vdGlmeV9wYXJlbnRfY2xkc3RvcChjdXJyZW50LCB0cnVlLCB3aHkpOworCQlpZiAoZ3N0b3BfZG9uZSAmJiAhcmVhbF9wYXJlbnRfaXNfcHRyYWNlcihjdXJyZW50KSkKKwkJCWRvX25vdGlmeV9wYXJlbnRfY2xkc3RvcChjdXJyZW50LCBmYWxzZSwgd2h5KTsKKwogCQkvKgogCQkgKiBEb24ndCB3YW50IHRvIGFsbG93IHByZWVtcHRpb24gaGVyZSwgYmVjYXVzZQogCQkgKiBzeXNfcHRyYWNlKCkgbmVlZHMgdGhpcyB0YXNrIHRvIGJlIGluYWN0aXZlLgpAQCAtMTY4NCw3ICsxNzg5LDE2IEBACiAJCS8qCiAJCSAqIEJ5IHRoZSB0aW1lIHdlIGdvdCB0aGUgbG9jaywgb3VyIHRyYWNlciB3ZW50IGF3YXkuCiAJCSAqIERvbid0IGRyb3AgdGhlIGxvY2sgeWV0LCBhbm90aGVyIHRyYWNlciBtYXkgY29tZS4KKwkJICoKKwkJICogSWYgQGdzdG9wX2RvbmUsIHRoZSBwdHJhY2VyIHdlbnQgYXdheSBiZXR3ZWVuIGdyb3VwIHN0b3AKKwkJICogY29tcGxldGlvbiBhbmQgaGVyZS4gIER1cmluZyBkZXRhY2gsIGl0IHdvdWxkIGhhdmUgc2V0CisJCSAqIEdST1VQX1NUT1BfUEVORElORyBvbiB1cyBhbmQgd2UnbGwgcmUtZW50ZXIgVEFTS19TVE9QUEVECisJCSAqIGluIGRvX3NpZ25hbF9zdG9wKCkgb24gcmV0dXJuLCBzbyBub3RpZnlpbmcgdGhlIHJlYWwKKwkJICogcGFyZW50IG9mIHRoZSBncm91cCBzdG9wIGNvbXBsZXRpb24gaXMgZW5vdWdoLgogCQkgKi8KKwkJaWYgKGdzdG9wX2RvbmUpCisJCQlkb19ub3RpZnlfcGFyZW50X2NsZHN0b3AoY3VycmVudCwgZmFsc2UsIHdoeSk7CisKIAkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCQlpZiAoY2xlYXJfY29kZSkKIAkJCWN1cnJlbnQtPmV4aXRfY29kZSA9IDA7CkBAIC0xNzI4LDcgKzE4NDIsNyBAQAogCiAJLyogTGV0IHRoZSBkZWJ1Z2dlciBydW4uICAqLwogCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCXB0cmFjZV9zdG9wKGV4aXRfY29kZSwgMSwgJmluZm8pOworCXB0cmFjZV9zdG9wKGV4aXRfY29kZSwgQ0xEX1RSQVBQRUQsIDEsICZpbmZvKTsKIAlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwogfQogCkBAIC0xNzQxLDY2ICsxODU1LDExNSBAQAogc3RhdGljIGludCBkb19zaWduYWxfc3RvcChpbnQgc2lnbnIpCiB7CiAJc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZyA9IGN1cnJlbnQtPnNpZ25hbDsKLQlpbnQgbm90aWZ5OwogCi0JaWYgKCFzaWctPmdyb3VwX3N0b3BfY291bnQpIHsKKwlpZiAoIShjdXJyZW50LT5ncm91cF9zdG9wICYgR1JPVVBfU1RPUF9QRU5ESU5HKSkgeworCQl1bnNpZ25lZCBpbnQgZ3N0b3AgPSBHUk9VUF9TVE9QX1BFTkRJTkcgfCBHUk9VUF9TVE9QX0NPTlNVTUU7CiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKIAotCQlpZiAoIWxpa2VseShzaWctPmZsYWdzICYgU0lHTkFMX1NUT1BfREVRVUVVRUQpIHx8CisJCS8qIHNpZ25yIHdpbGwgYmUgcmVjb3JkZWQgaW4gdGFzay0+Z3JvdXBfc3RvcCBmb3IgcmV0cmllcyAqLworCQlXQVJOX09OX09OQ0Uoc2lnbnIgJiB+R1JPVVBfU1RPUF9TSUdNQVNLKTsKKworCQlpZiAoIWxpa2VseShjdXJyZW50LT5ncm91cF9zdG9wICYgR1JPVVBfU1RPUF9ERVFVRVVFRCkgfHwKIAkJICAgIHVubGlrZWx5KHNpZ25hbF9ncm91cF9leGl0KHNpZykpKQogCQkJcmV0dXJuIDA7CiAJCS8qCi0JCSAqIFRoZXJlIGlzIG5vIGdyb3VwIHN0b3AgYWxyZWFkeSBpbiBwcm9ncmVzcy4KLQkJICogV2UgbXVzdCBpbml0aWF0ZSBvbmUgbm93LgorCQkgKiBUaGVyZSBpcyBubyBncm91cCBzdG9wIGFscmVhZHkgaW4gcHJvZ3Jlc3MuICBXZSBtdXN0CisJCSAqIGluaXRpYXRlIG9uZSBub3cuCisJCSAqCisJCSAqIFdoaWxlIHB0cmFjZWQsIGEgdGFzayBtYXkgYmUgcmVzdW1lZCB3aGlsZSBncm91cCBzdG9wIGlzCisJCSAqIHN0aWxsIGluIGVmZmVjdCBhbmQgdGhlbiByZWNlaXZlIGEgc3RvcCBzaWduYWwgYW5kCisJCSAqIGluaXRpYXRlIGFub3RoZXIgZ3JvdXAgc3RvcC4gIFRoaXMgZGV2aWF0ZXMgZnJvbSB0aGUKKwkJICogdXN1YWwgYmVoYXZpb3IgYXMgdHdvIGNvbnNlY3V0aXZlIHN0b3Agc2lnbmFscyBjYW4ndAorCQkgKiBjYXVzZSB0d28gZ3JvdXAgc3RvcHMgd2hlbiAhcHRyYWNlZC4gIFRoYXQgaXMgd2h5IHdlCisJCSAqIGFsc28gY2hlY2sgIXRhc2tfaXNfc3RvcHBlZCh0KSBiZWxvdy4KKwkJICoKKwkJICogVGhlIGNvbmRpdGlvbiBjYW4gYmUgZGlzdGluZ3Vpc2hlZCBieSB0ZXN0aW5nIHdoZXRoZXIKKwkJICogU0lHTkFMX1NUT1BfU1RPUFBFRCBpcyBhbHJlYWR5IHNldC4gIERvbid0IGdlbmVyYXRlCisJCSAqIGdyb3VwX2V4aXRfY29kZSBpbiBzdWNoIGNhc2UuCisJCSAqCisJCSAqIFRoaXMgaXMgbm90IG5lY2Vzc2FyeSBmb3IgU0lHTkFMX1NUT1BfQ09OVElOVUVEIGJlY2F1c2UKKwkJICogYW4gaW50ZXJ2ZW5pbmcgc3RvcCBzaWduYWwgaXMgcmVxdWlyZWQgdG8gY2F1c2UgdHdvCisJCSAqIGNvbnRpbnVlZCBldmVudHMgcmVnYXJkbGVzcyBvZiBwdHJhY2UuCiAJCSAqLwotCQlzaWctPmdyb3VwX2V4aXRfY29kZSA9IHNpZ25yOworCQlpZiAoIShzaWctPmZsYWdzICYgU0lHTkFMX1NUT1BfU1RPUFBFRCkpCisJCQlzaWctPmdyb3VwX2V4aXRfY29kZSA9IHNpZ25yOworCQllbHNlCisJCQlXQVJOX09OX09OQ0UoIXRhc2tfcHRyYWNlKGN1cnJlbnQpKTsKIAorCQljdXJyZW50LT5ncm91cF9zdG9wICY9IH5HUk9VUF9TVE9QX1NJR01BU0s7CisJCWN1cnJlbnQtPmdyb3VwX3N0b3AgfD0gc2lnbnIgfCBnc3RvcDsKIAkJc2lnLT5ncm91cF9zdG9wX2NvdW50ID0gMTsKLQkJZm9yICh0ID0gbmV4dF90aHJlYWQoY3VycmVudCk7IHQgIT0gY3VycmVudDsgdCA9IG5leHRfdGhyZWFkKHQpKQorCQlmb3IgKHQgPSBuZXh0X3RocmVhZChjdXJyZW50KTsgdCAhPSBjdXJyZW50OworCQkgICAgIHQgPSBuZXh0X3RocmVhZCh0KSkgeworCQkJdC0+Z3JvdXBfc3RvcCAmPSB+R1JPVVBfU1RPUF9TSUdNQVNLOwogCQkJLyoKIAkJCSAqIFNldHRpbmcgc3RhdGUgdG8gVEFTS19TVE9QUEVEIGZvciBhIGdyb3VwCiAJCQkgKiBzdG9wIGlzIGFsd2F5cyBkb25lIHdpdGggdGhlIHNpZ2xvY2sgaGVsZCwKIAkJCSAqIHNvIHRoaXMgY2hlY2sgaGFzIG5vIHJhY2VzLgogCQkJICovCi0JCQlpZiAoISh0LT5mbGFncyAmIFBGX0VYSVRJTkcpICYmCi0JCQkgICAgIXRhc2tfaXNfc3RvcHBlZF9vcl90cmFjZWQodCkpIHsKKwkJCWlmICghKHQtPmZsYWdzICYgUEZfRVhJVElORykgJiYgIXRhc2tfaXNfc3RvcHBlZCh0KSkgeworCQkJCXQtPmdyb3VwX3N0b3AgfD0gc2lnbnIgfCBnc3RvcDsKIAkJCQlzaWctPmdyb3VwX3N0b3BfY291bnQrKzsKIAkJCQlzaWduYWxfd2FrZV91cCh0LCAwKTsKIAkJCX0KKwkJfQogCX0KLQkvKgotCSAqIElmIHRoZXJlIGFyZSBubyBvdGhlciB0aHJlYWRzIGluIHRoZSBncm91cCwgb3IgaWYgdGhlcmUgaXMKLQkgKiBhIGdyb3VwIHN0b3AgaW4gcHJvZ3Jlc3MgYW5kIHdlIGFyZSB0aGUgbGFzdCB0byBzdG9wLCByZXBvcnQKLQkgKiB0byB0aGUgcGFyZW50LiAgV2hlbiBwdHJhY2VkLCBldmVyeSB0aHJlYWQgcmVwb3J0cyBpdHNlbGYuCi0JICovCi0Jbm90aWZ5ID0gc2lnLT5ncm91cF9zdG9wX2NvdW50ID09IDEgPyBDTERfU1RPUFBFRCA6IDA7Ci0Jbm90aWZ5ID0gdHJhY2Vob29rX25vdGlmeV9qY3RsKG5vdGlmeSwgQ0xEX1NUT1BQRUQpOwotCS8qCi0JICogdHJhY2Vob29rX25vdGlmeV9qY3RsKCkgY2FuIGRyb3AgYW5kIHJlYWNxdWlyZSBzaWdsb2NrLCBzbwotCSAqIHdlIGtlZXAgLT5ncm91cF9zdG9wX2NvdW50ICE9IDAgYmVmb3JlIHRoZSBjYWxsLiBJZiBTSUdDT05UCi0JICogb3IgU0lHS0lMTCBjb21lcyBpbiBiZXR3ZWVuIC0+Z3JvdXBfc3RvcF9jb3VudCA9PSAwLgotCSAqLwotCWlmIChzaWctPmdyb3VwX3N0b3BfY291bnQpIHsKLQkJaWYgKCEtLXNpZy0+Z3JvdXBfc3RvcF9jb3VudCkKLQkJCXNpZy0+ZmxhZ3MgPSBTSUdOQUxfU1RPUF9TVE9QUEVEOwotCQljdXJyZW50LT5leGl0X2NvZGUgPSBzaWctPmdyb3VwX2V4aXRfY29kZTsKK3JldHJ5OgorCWlmIChsaWtlbHkoIXRhc2tfcHRyYWNlKGN1cnJlbnQpKSkgeworCQlpbnQgbm90aWZ5ID0gMDsKKworCQkvKgorCQkgKiBJZiB0aGVyZSBhcmUgbm8gb3RoZXIgdGhyZWFkcyBpbiB0aGUgZ3JvdXAsIG9yIGlmIHRoZXJlCisJCSAqIGlzIGEgZ3JvdXAgc3RvcCBpbiBwcm9ncmVzcyBhbmQgd2UgYXJlIHRoZSBsYXN0IHRvIHN0b3AsCisJCSAqIHJlcG9ydCB0byB0aGUgcGFyZW50LgorCQkgKi8KKwkJaWYgKHRhc2tfcGFydGljaXBhdGVfZ3JvdXBfc3RvcChjdXJyZW50KSkKKwkJCW5vdGlmeSA9IENMRF9TVE9QUEVEOworCiAJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19TVE9QUEVEKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKworCQkvKgorCQkgKiBOb3RpZnkgdGhlIHBhcmVudCBvZiB0aGUgZ3JvdXAgc3RvcCBjb21wbGV0aW9uLiAgQmVjYXVzZQorCQkgKiB3ZSdyZSBub3QgaG9sZGluZyBlaXRoZXIgdGhlIHNpZ2xvY2sgb3IgdGFza2xpc3RfbG9jaworCQkgKiBoZXJlLCBwdHJhY2VyIG1heSBhdHRhY2ggaW5iZXR3ZWVuOyBob3dldmVyLCB0aGlzIGlzIGZvcgorCQkgKiBncm91cCBzdG9wIGFuZCBzaG91bGQgYWx3YXlzIGJlIGRlbGl2ZXJlZCB0byB0aGUgcmVhbAorCQkgKiBwYXJlbnQgb2YgdGhlIGdyb3VwIGxlYWRlci4gIFRoZSBuZXcgcHRyYWNlciB3aWxsIGdldAorCQkgKiBpdHMgbm90aWZpY2F0aW9uIHdoZW4gdGhpcyB0YXNrIHRyYW5zaXRpb25zIGludG8KKwkJICogVEFTS19UUkFDRUQuCisJCSAqLworCQlpZiAobm90aWZ5KSB7CisJCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCQkJZG9fbm90aWZ5X3BhcmVudF9jbGRzdG9wKGN1cnJlbnQsIGZhbHNlLCBub3RpZnkpOworCQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCQl9CisKKwkJLyogTm93IHdlIGRvbid0IHJ1biBhZ2FpbiB1bnRpbCB3b2tlbiBieSBTSUdDT05UIG9yIFNJR0tJTEwgKi8KKwkJc2NoZWR1bGUoKTsKKworCQlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwl9IGVsc2UgeworCQlwdHJhY2Vfc3RvcChjdXJyZW50LT5ncm91cF9zdG9wICYgR1JPVVBfU1RPUF9TSUdNQVNLLAorCQkJICAgIENMRF9TVE9QUEVELCAwLCBOVUxMKTsKKwkJY3VycmVudC0+ZXhpdF9jb2RlID0gMDsKIAl9CisKKwkvKgorCSAqIEdST1VQX1NUT1BfUEVORElORyBjb3VsZCBiZSBzZXQgaWYgYW5vdGhlciBncm91cCBzdG9wIGhhcworCSAqIHN0YXJ0ZWQgc2luY2UgYmVpbmcgd29rZW4gdXAgb3IgcHRyYWNlIHdhbnRzIHVzIHRvIHRyYW5zaXQKKwkgKiBiZXR3ZWVuIFRBU0tfU1RPUFBFRCBhbmQgVFJBQ0VELiAgUmV0cnkgZ3JvdXAgc3RvcC4KKwkgKi8KKwlpZiAoY3VycmVudC0+Z3JvdXBfc3RvcCAmIEdST1VQX1NUT1BfUEVORElORykgeworCQlXQVJOX09OX09OQ0UoIShjdXJyZW50LT5ncm91cF9zdG9wICYgR1JPVVBfU1RPUF9TSUdNQVNLKSk7CisJCWdvdG8gcmV0cnk7CisJfQorCisJLyogUFRSQUNFX0FUVEFDSCBtaWdodCBoYXZlIHJhY2VkIHdpdGggdGFzayBraWxsaW5nLCBjbGVhciB0cmFwcGluZyAqLworCXRhc2tfY2xlYXJfZ3JvdXBfc3RvcF90cmFwcGluZyhjdXJyZW50KTsKKwogCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CiAKLQlpZiAobm90aWZ5KSB7Ci0JCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7Ci0JCWRvX25vdGlmeV9wYXJlbnRfY2xkc3RvcChjdXJyZW50LCBub3RpZnkpOwotCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0JfQotCi0JLyogTm93IHdlIGRvbid0IHJ1biBhZ2FpbiB1bnRpbCB3b2tlbiBieSBTSUdDT05UIG9yIFNJR0tJTEwgKi8KLQlkbyB7Ci0JCXNjaGVkdWxlKCk7Ci0JfSB3aGlsZSAodHJ5X3RvX2ZyZWV6ZSgpKTsKLQogCXRyYWNlaG9va19maW5pc2hfamN0bCgpOwotCWN1cnJlbnQtPmV4aXRfY29kZSA9IDA7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTE4MTQsNyArMTk3Nyw3IEBACiAJcHRyYWNlX3NpZ25hbF9kZWxpdmVyKHJlZ3MsIGNvb2tpZSk7CiAKIAkvKiBMZXQgdGhlIGRlYnVnZ2VyIHJ1bi4gICovCi0JcHRyYWNlX3N0b3Aoc2lnbnIsIDAsIGluZm8pOworCXB0cmFjZV9zdG9wKHNpZ25yLCBDTERfVFJBUFBFRCwgMCwgaW5mbyk7CiAKIAkvKiBXZSdyZSBiYWNrLiAgRGlkIHRoZSBkZWJ1Z2dlciBjYW5jZWwgdGhlIHNpZz8gICovCiAJc2lnbnIgPSBjdXJyZW50LT5leGl0X2NvZGU7CkBAIC0xODY5LDE4ICsyMDMyLDM2IEBACiAJICogdGhlIENMRF8gc2lfY29kZSBpbnRvIFNJR05BTF9DTERfTUFTSyBiaXRzLgogCSAqLwogCWlmICh1bmxpa2VseShzaWduYWwtPmZsYWdzICYgU0lHTkFMX0NMRF9NQVNLKSkgewotCQlpbnQgd2h5ID0gKHNpZ25hbC0+ZmxhZ3MgJiBTSUdOQUxfU1RPUF9DT05USU5VRUQpCi0JCQkJPyBDTERfQ09OVElOVUVEIDogQ0xEX1NUT1BQRUQ7CisJCXN0cnVjdCB0YXNrX3N0cnVjdCAqbGVhZGVyOworCQlpbnQgd2h5OworCisJCWlmIChzaWduYWwtPmZsYWdzICYgU0lHTkFMX0NMRF9DT05USU5VRUQpCisJCQl3aHkgPSBDTERfQ09OVElOVUVEOworCQllbHNlCisJCQl3aHkgPSBDTERfU1RPUFBFRDsKKwogCQlzaWduYWwtPmZsYWdzICY9IH5TSUdOQUxfQ0xEX01BU0s7CiAKLQkJd2h5ID0gdHJhY2Vob29rX25vdGlmeV9qY3RsKHdoeSwgQ0xEX0NPTlRJTlVFRCk7CiAJCXNwaW5fdW5sb2NrX2lycSgmc2lnaGFuZC0+c2lnbG9jayk7CiAKLQkJaWYgKHdoeSkgewotCQkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQkJCWRvX25vdGlmeV9wYXJlbnRfY2xkc3RvcChjdXJyZW50LT5ncm91cF9sZWFkZXIsIHdoeSk7Ci0JCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0JCX0KKwkJLyoKKwkJICogTm90aWZ5IHRoZSBwYXJlbnQgdGhhdCB3ZSdyZSBjb250aW51aW5nLiAgVGhpcyBldmVudCBpcworCQkgKiBhbHdheXMgcGVyLXByb2Nlc3MgYW5kIGRvZXNuJ3QgbWFrZSB3aG9sZSBsb3Qgb2Ygc2Vuc2UKKwkJICogZm9yIHB0cmFjZXJzLCB3aG8gc2hvdWxkbid0IGNvbnN1bWUgdGhlIHN0YXRlIHZpYQorCQkgKiB3YWl0KDIpIGVpdGhlciwgYnV0LCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgbm90aWZ5CisJCSAqIHRoZSBwdHJhY2VyIG9mIHRoZSBncm91cCBsZWFkZXIgdG9vIHVubGVzcyBpdCdzIGdvbm5hIGJlCisJCSAqIGEgZHVwbGljYXRlLgorCQkgKi8KKwkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKworCQlkb19ub3RpZnlfcGFyZW50X2NsZHN0b3AoY3VycmVudCwgZmFsc2UsIHdoeSk7CisKKwkJbGVhZGVyID0gY3VycmVudC0+Z3JvdXBfbGVhZGVyOworCQlpZiAodGFza19wdHJhY2UobGVhZGVyKSAmJiAhcmVhbF9wYXJlbnRfaXNfcHRyYWNlcihsZWFkZXIpKQorCQkJZG9fbm90aWZ5X3BhcmVudF9jbGRzdG9wKGxlYWRlciwgdHJ1ZSwgd2h5KTsKKworCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisKIAkJZ290byByZWxvY2s7CiAJfQogCkBAIC0xODk3LDggKzIwNzgsOCBAQAogCQlpZiAodW5saWtlbHkoc2lnbnIgIT0gMCkpCiAJCQlrYSA9IHJldHVybl9rYTsKIAkJZWxzZSB7Ci0JCQlpZiAodW5saWtlbHkoc2lnbmFsLT5ncm91cF9zdG9wX2NvdW50ID4gMCkgJiYKLQkJCSAgICBkb19zaWduYWxfc3RvcCgwKSkKKwkJCWlmICh1bmxpa2VseShjdXJyZW50LT5ncm91cF9zdG9wICYKKwkJCQkgICAgIEdST1VQX1NUT1BfUEVORElORykgJiYgZG9fc2lnbmFsX3N0b3AoMCkpCiAJCQkJZ290byByZWxvY2s7CiAKIAkJCXNpZ25yID0gZGVxdWV1ZV9zaWduYWwoY3VycmVudCwgJmN1cnJlbnQtPmJsb2NrZWQsCkBAIC0yMDE3LDEwICsyMTk4LDQyIEBACiAJcmV0dXJuIHNpZ25yOwogfQogCisvKgorICogSXQgY291bGQgYmUgdGhhdCBjb21wbGV0ZV9zaWduYWwoKSBwaWNrZWQgdXMgdG8gbm90aWZ5IGFib3V0IHRoZQorICogZ3JvdXAtd2lkZSBzaWduYWwuIE90aGVyIHRocmVhZHMgc2hvdWxkIGJlIG5vdGlmaWVkIG5vdyB0byB0YWtlCisgKiB0aGUgc2hhcmVkIHNpZ25hbHMgaW4gQHdoaWNoIHNpbmNlIHdlIHdpbGwgbm90LgorICovCitzdGF0aWMgdm9pZCByZXRhcmdldF9zaGFyZWRfcGVuZGluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc2lnc2V0X3QgKndoaWNoKQoreworCXNpZ3NldF90IHJldGFyZ2V0OworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKKworCXNpZ2FuZHNldHMoJnJldGFyZ2V0LCAmdHNrLT5zaWduYWwtPnNoYXJlZF9wZW5kaW5nLnNpZ25hbCwgd2hpY2gpOworCWlmIChzaWdpc2VtcHR5c2V0KCZyZXRhcmdldCkpCisJCXJldHVybjsKKworCXQgPSB0c2s7CisJd2hpbGVfZWFjaF90aHJlYWQodHNrLCB0KSB7CisJCWlmICh0LT5mbGFncyAmIFBGX0VYSVRJTkcpCisJCQljb250aW51ZTsKKworCQlpZiAoIWhhc19wZW5kaW5nX3NpZ25hbHMoJnJldGFyZ2V0LCAmdC0+YmxvY2tlZCkpCisJCQljb250aW51ZTsKKwkJLyogUmVtb3ZlIHRoZSBzaWduYWxzIHRoaXMgdGhyZWFkIGNhbiBoYW5kbGUuICovCisJCXNpZ2FuZHNldHMoJnJldGFyZ2V0LCAmcmV0YXJnZXQsICZ0LT5ibG9ja2VkKTsKKworCQlpZiAoIXNpZ25hbF9wZW5kaW5nKHQpKQorCQkJc2lnbmFsX3dha2VfdXAodCwgMCk7CisKKwkJaWYgKHNpZ2lzZW1wdHlzZXQoJnJldGFyZ2V0KSkKKwkJCWJyZWFrOworCX0KK30KKwogdm9pZCBleGl0X3NpZ25hbHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAJaW50IGdyb3VwX3N0b3AgPSAwOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKKwlzaWdzZXRfdCB1bmJsb2NrZWQ7CiAKIAlpZiAodGhyZWFkX2dyb3VwX2VtcHR5KHRzaykgfHwgc2lnbmFsX2dyb3VwX2V4aXQodHNrLT5zaWduYWwpKSB7CiAJCXRzay0+ZmxhZ3MgfD0gUEZfRVhJVElORzsKQEAgLTIwMzYsMjYgKzIyNDksMjMgQEAKIAlpZiAoIXNpZ25hbF9wZW5kaW5nKHRzaykpCiAJCWdvdG8gb3V0OwogCi0JLyoKLQkgKiBJdCBjb3VsZCBiZSB0aGF0IF9fZ3JvdXBfY29tcGxldGVfc2lnbmFsKCkgY2hvb3NlIHVzIHRvCi0JICogbm90aWZ5IGFib3V0IGdyb3VwLXdpZGUgc2lnbmFsLiBBbm90aGVyIHRocmVhZCBzaG91bGQgYmUKLQkgKiB3b2tlbiBub3cgdG8gdGFrZSB0aGUgc2lnbmFsIHNpbmNlIHdlIHdpbGwgbm90LgotCSAqLwotCWZvciAodCA9IHRzazsgKHQgPSBuZXh0X3RocmVhZCh0KSkgIT0gdHNrOyApCi0JCWlmICghc2lnbmFsX3BlbmRpbmcodCkgJiYgISh0LT5mbGFncyAmIFBGX0VYSVRJTkcpKQotCQkJcmVjYWxjX3NpZ3BlbmRpbmdfYW5kX3dha2UodCk7CisJdW5ibG9ja2VkID0gdHNrLT5ibG9ja2VkOworCXNpZ25vdHNldCgmdW5ibG9ja2VkKTsKKwlyZXRhcmdldF9zaGFyZWRfcGVuZGluZyh0c2ssICZ1bmJsb2NrZWQpOwogCi0JaWYgKHVubGlrZWx5KHRzay0+c2lnbmFsLT5ncm91cF9zdG9wX2NvdW50KSAmJgotCQkJIS0tdHNrLT5zaWduYWwtPmdyb3VwX3N0b3BfY291bnQpIHsKLQkJdHNrLT5zaWduYWwtPmZsYWdzID0gU0lHTkFMX1NUT1BfU1RPUFBFRDsKLQkJZ3JvdXBfc3RvcCA9IHRyYWNlaG9va19ub3RpZnlfamN0bChDTERfU1RPUFBFRCwgQ0xEX1NUT1BQRUQpOwotCX0KKwlpZiAodW5saWtlbHkodHNrLT5ncm91cF9zdG9wICYgR1JPVVBfU1RPUF9QRU5ESU5HKSAmJgorCSAgICB0YXNrX3BhcnRpY2lwYXRlX2dyb3VwX3N0b3AodHNrKSkKKwkJZ3JvdXBfc3RvcCA9IENMRF9TVE9QUEVEOwogb3V0OgogCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAorCS8qCisJICogSWYgZ3JvdXAgc3RvcCBoYXMgY29tcGxldGVkLCBkZWxpdmVyIHRoZSBub3RpZmljYXRpb24uICBUaGlzCisJICogc2hvdWxkIGFsd2F5cyBnbyB0byB0aGUgcmVhbCBwYXJlbnQgb2YgdGhlIGdyb3VwIGxlYWRlci4KKwkgKi8KIAlpZiAodW5saWtlbHkoZ3JvdXBfc3RvcCkpIHsKIAkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQkJZG9fbm90aWZ5X3BhcmVudF9jbGRzdG9wKHRzaywgZ3JvdXBfc3RvcCk7CisJCWRvX25vdGlmeV9wYXJlbnRfY2xkc3RvcCh0c2ssIGZhbHNlLCBncm91cF9zdG9wKTsKIAkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwogCX0KIH0KQEAgLTIwODksMTEgKzIyOTksMzMgQEAKIAlyZXR1cm4gLUVJTlRSOwogfQogCi0vKgotICogV2UgZG9uJ3QgbmVlZCB0byBnZXQgdGhlIGtlcm5lbCBsb2NrIC0gdGhpcyBpcyBhbGwgbG9jYWwgdG8gdGhpcwotICogcGFydGljdWxhciB0aHJlYWQuLiAoYW5kIHRoYXQncyBnb29kLCBiZWNhdXNlIHRoaXMgaXMgX2hlYXZpbHlfCi0gKiB1c2VkIGJ5IHZhcmlvdXMgcHJvZ3JhbXMpCitzdGF0aWMgdm9pZCBfX3NldF90YXNrX2Jsb2NrZWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGNvbnN0IHNpZ3NldF90ICpuZXdzZXQpCit7CisJaWYgKHNpZ25hbF9wZW5kaW5nKHRzaykgJiYgIXRocmVhZF9ncm91cF9lbXB0eSh0c2spKSB7CisJCXNpZ3NldF90IG5ld2Jsb2NrZWQ7CisJCS8qIEEgc2V0IG9mIG5vdyBibG9ja2VkIGJ1dCBwcmV2aW91c2x5IHVuYmxvY2tlZCBzaWduYWxzLiAqLworCQlzaWdhbmRuc2V0cygmbmV3YmxvY2tlZCwgbmV3c2V0LCAmY3VycmVudC0+YmxvY2tlZCk7CisJCXJldGFyZ2V0X3NoYXJlZF9wZW5kaW5nKHRzaywgJm5ld2Jsb2NrZWQpOworCX0KKwl0c2stPmJsb2NrZWQgPSAqbmV3c2V0OworCXJlY2FsY19zaWdwZW5kaW5nKCk7Cit9CisKKy8qKgorICogc2V0X2N1cnJlbnRfYmxvY2tlZCAtIGNoYW5nZSBjdXJyZW50LT5ibG9ja2VkIG1hc2sKKyAqIEBuZXdzZXQ6IG5ldyBtYXNrCisgKgorICogSXQgaXMgd3JvbmcgdG8gY2hhbmdlIC0+YmxvY2tlZCBkaXJlY3RseSwgdGhpcyBoZWxwZXIgc2hvdWxkIGJlIHVzZWQKKyAqIHRvIGVuc3VyZSB0aGUgcHJvY2VzcyBjYW4ndCBtaXNzIGEgc2hhcmVkIHNpZ25hbCB3ZSBhcmUgZ29pbmcgdG8gYmxvY2suCiAgKi8KK3ZvaWQgc2V0X2N1cnJlbnRfYmxvY2tlZChjb25zdCBzaWdzZXRfdCAqbmV3c2V0KQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKworCXNwaW5fbG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CisJX19zZXRfdGFza19ibG9ja2VkKHRzaywgbmV3c2V0KTsKKwlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7Cit9CiAKIC8qCiAgKiBUaGlzIGlzIGFsc28gdXNlZnVsIGZvciBrZXJuZWwgdGhyZWFkcyB0aGF0IHdhbnQgdG8gdGVtcG9yYXJpbHkKQEAgLTIxMDUsMzAgKzIzMzcsMjkgQEAKICAqLwogaW50IHNpZ3Byb2NtYXNrKGludCBob3csIHNpZ3NldF90ICpzZXQsIHNpZ3NldF90ICpvbGRzZXQpCiB7Ci0JaW50IGVycm9yOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKwlzaWdzZXRfdCBuZXdzZXQ7CiAKLQlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwkvKiBMb2NrbGVzcywgb25seSBjdXJyZW50IGNhbiBjaGFuZ2UgLT5ibG9ja2VkLCBuZXZlciBmcm9tIGlycSAqLwogCWlmIChvbGRzZXQpCi0JCSpvbGRzZXQgPSBjdXJyZW50LT5ibG9ja2VkOworCQkqb2xkc2V0ID0gdHNrLT5ibG9ja2VkOwogCi0JZXJyb3IgPSAwOwogCXN3aXRjaCAoaG93KSB7CiAJY2FzZSBTSUdfQkxPQ0s6Ci0JCXNpZ29yc2V0cygmY3VycmVudC0+YmxvY2tlZCwgJmN1cnJlbnQtPmJsb2NrZWQsIHNldCk7CisJCXNpZ29yc2V0cygmbmV3c2V0LCAmdHNrLT5ibG9ja2VkLCBzZXQpOwogCQlicmVhazsKIAljYXNlIFNJR19VTkJMT0NLOgotCQlzaWduYW5kc2V0cygmY3VycmVudC0+YmxvY2tlZCwgJmN1cnJlbnQtPmJsb2NrZWQsIHNldCk7CisJCXNpZ2FuZG5zZXRzKCZuZXdzZXQsICZ0c2stPmJsb2NrZWQsIHNldCk7CiAJCWJyZWFrOwogCWNhc2UgU0lHX1NFVE1BU0s6Ci0JCWN1cnJlbnQtPmJsb2NrZWQgPSAqc2V0OworCQluZXdzZXQgPSAqc2V0OwogCQlicmVhazsKIAlkZWZhdWx0OgotCQllcnJvciA9IC1FSU5WQUw7CisJCXJldHVybiAtRUlOVkFMOwogCX0KLQlyZWNhbGNfc2lncGVuZGluZygpOwotCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CiAKLQlyZXR1cm4gZXJyb3I7CisJc2V0X2N1cnJlbnRfYmxvY2tlZCgmbmV3c2V0KTsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0yMTM4LDQwICsyMzY5LDM0IEBACiAgKiAgQG9zZXQ6IHByZXZpb3VzIHZhbHVlIG9mIHNpZ25hbCBtYXNrIGlmIG5vbi1udWxsCiAgKiAgQHNpZ3NldHNpemU6IHNpemUgb2Ygc2lnc2V0X3QgdHlwZQogICovCi1TWVNDQUxMX0RFRklORTQocnRfc2lncHJvY21hc2ssIGludCwgaG93LCBzaWdzZXRfdCBfX3VzZXIgKiwgc2V0LAorU1lTQ0FMTF9ERUZJTkU0KHJ0X3NpZ3Byb2NtYXNrLCBpbnQsIGhvdywgc2lnc2V0X3QgX191c2VyICosIG5zZXQsCiAJCXNpZ3NldF90IF9fdXNlciAqLCBvc2V0LCBzaXplX3QsIHNpZ3NldHNpemUpCiB7Ci0JaW50IGVycm9yID0gLUVJTlZBTDsKIAlzaWdzZXRfdCBvbGRfc2V0LCBuZXdfc2V0OworCWludCBlcnJvcjsKIAogCS8qIFhYWDogRG9uJ3QgcHJlY2x1ZGUgaGFuZGxpbmcgZGlmZmVyZW50IHNpemVkIHNpZ3NldF90J3MuICAqLwogCWlmIChzaWdzZXRzaXplICE9IHNpemVvZihzaWdzZXRfdCkpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChzZXQpIHsKLQkJZXJyb3IgPSAtRUZBVUxUOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJm5ld19zZXQsIHNldCwgc2l6ZW9mKCpzZXQpKSkKLQkJCWdvdG8gb3V0OworCW9sZF9zZXQgPSBjdXJyZW50LT5ibG9ja2VkOworCisJaWYgKG5zZXQpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZuZXdfc2V0LCBuc2V0LCBzaXplb2Yoc2lnc2V0X3QpKSkKKwkJCXJldHVybiAtRUZBVUxUOwogCQlzaWdkZWxzZXRtYXNrKCZuZXdfc2V0LCBzaWdtYXNrKFNJR0tJTEwpfHNpZ21hc2soU0lHU1RPUCkpOwogCi0JCWVycm9yID0gc2lncHJvY21hc2soaG93LCAmbmV3X3NldCwgJm9sZF9zZXQpOworCQllcnJvciA9IHNpZ3Byb2NtYXNrKGhvdywgJm5ld19zZXQsIE5VTEwpOwogCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dDsKLQkJaWYgKG9zZXQpCi0JCQlnb3RvIHNldF9vbGQ7Ci0JfSBlbHNlIGlmIChvc2V0KSB7Ci0JCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQlvbGRfc2V0ID0gY3VycmVudC0+YmxvY2tlZDsKLQkJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQotCXNldF9vbGQ6Ci0JCWVycm9yID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfdG9fdXNlcihvc2V0LCAmb2xkX3NldCwgc2l6ZW9mKCpvc2V0KSkpCi0JCQlnb3RvIG91dDsKKwkJCXJldHVybiBlcnJvcjsKIAl9Ci0JZXJyb3IgPSAwOwotb3V0OgotCXJldHVybiBlcnJvcjsKKworCWlmIChvc2V0KSB7CisJCWlmIChjb3B5X3RvX3VzZXIob3NldCwgJm9sZF9zZXQsIHNpemVvZihzaWdzZXRfdCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIGxvbmcgZG9fc2lncGVuZGluZyh2b2lkIF9fdXNlciAqc2V0LCB1bnNpZ25lZCBsb25nIHNpZ3NldHNpemUpCkBAIC0yMjg0LDYgKzI1MDksNjYgQEAKICNlbmRpZgogCiAvKioKKyAqICBkb19zaWd0aW1lZHdhaXQgLSB3YWl0IGZvciBxdWV1ZWQgc2lnbmFscyBzcGVjaWZpZWQgaW4gQHdoaWNoCisgKiAgQHdoaWNoOiBxdWV1ZWQgc2lnbmFscyB0byB3YWl0IGZvcgorICogIEBpbmZvOiBpZiBub24tbnVsbCwgdGhlIHNpZ25hbCdzIHNpZ2luZm8gaXMgcmV0dXJuZWQgaGVyZQorICogIEB0czogdXBwZXIgYm91bmQgb24gcHJvY2VzcyB0aW1lIHN1c3BlbnNpb24KKyAqLworaW50IGRvX3NpZ3RpbWVkd2FpdChjb25zdCBzaWdzZXRfdCAqd2hpY2gsIHNpZ2luZm9fdCAqaW5mbywKKwkJCWNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqdHMpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCWxvbmcgdGltZW91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOworCXNpZ3NldF90IG1hc2sgPSAqd2hpY2g7CisJaW50IHNpZzsKKworCWlmICh0cykgeworCQlpZiAoIXRpbWVzcGVjX3ZhbGlkKHRzKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQl0aW1lb3V0ID0gdGltZXNwZWNfdG9famlmZmllcyh0cyk7CisJCS8qCisJCSAqIFdlIGNhbiBiZSBjbG9zZSB0byB0aGUgbmV4dCB0aWNrLCBhZGQgYW5vdGhlciBvbmUKKwkJICogdG8gZW5zdXJlIHdlIHdpbGwgd2FpdCBhdCBsZWFzdCB0aGUgdGltZSBhc2tlZCBmb3IuCisJCSAqLworCQlpZiAodHMtPnR2X3NlYyB8fCB0cy0+dHZfbnNlYykKKwkJCXRpbWVvdXQrKzsKKwl9CisKKwkvKgorCSAqIEludmVydCB0aGUgc2V0IG9mIGFsbG93ZWQgc2lnbmFscyB0byBnZXQgdGhvc2Ugd2Ugd2FudCB0byBibG9jay4KKwkgKi8KKwlzaWdkZWxzZXRtYXNrKCZtYXNrLCBzaWdtYXNrKFNJR0tJTEwpIHwgc2lnbWFzayhTSUdTVE9QKSk7CisJc2lnbm90c2V0KCZtYXNrKTsKKworCXNwaW5fbG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CisJc2lnID0gZGVxdWV1ZV9zaWduYWwodHNrLCAmbWFzaywgaW5mbyk7CisJaWYgKCFzaWcgJiYgdGltZW91dCkgeworCQkvKgorCQkgKiBOb25lIHJlYWR5LCB0ZW1wb3JhcmlseSB1bmJsb2NrIHRob3NlIHdlJ3JlIGludGVyZXN0ZWQKKwkJICogd2hpbGUgd2UgYXJlIHNsZWVwaW5nIGluIHNvIHRoYXQgd2UnbGwgYmUgYXdha2VuZWQgd2hlbgorCQkgKiB0aGV5IGFycml2ZS4gVW5ibG9ja2luZyBpcyBhbHdheXMgZmluZSwgd2UgY2FuIGF2b2lkCisJCSAqIHNldF9jdXJyZW50X2Jsb2NrZWQoKS4KKwkJICovCisJCXRzay0+cmVhbF9ibG9ja2VkID0gdHNrLT5ibG9ja2VkOworCQlzaWdhbmRzZXRzKCZ0c2stPmJsb2NrZWQsICZ0c2stPmJsb2NrZWQsICZtYXNrKTsKKwkJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOworCisJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUodGltZW91dCk7CisKKwkJc3Bpbl9sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKKwkJX19zZXRfdGFza19ibG9ja2VkKHRzaywgJnRzay0+cmVhbF9ibG9ja2VkKTsKKwkJc2lnaW5pdHNldCgmdHNrLT5yZWFsX2Jsb2NrZWQsIDApOworCQlzaWcgPSBkZXF1ZXVlX3NpZ25hbCh0c2ssICZtYXNrLCBpbmZvKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOworCisJaWYgKHNpZykKKwkJcmV0dXJuIHNpZzsKKwlyZXR1cm4gdGltZW91dCA/IC1FSU5UUiA6IC1FQUdBSU47Cit9CisKKy8qKgogICogIHN5c19ydF9zaWd0aW1lZHdhaXQgLSBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHF1ZXVlZCBzaWduYWxzIHNwZWNpZmllZAogICoJCQlpbiBAdXRoZXNlCiAgKiAgQHV0aGVzZTogcXVldWVkIHNpZ25hbHMgdG8gd2FpdCBmb3IKQEAgLTIyOTUsMTEgKzI1ODAsMTAgQEAKIAkJc2lnaW5mb190IF9fdXNlciAqLCB1aW5mbywgY29uc3Qgc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqLCB1dHMsCiAJCXNpemVfdCwgc2lnc2V0c2l6ZSkKIHsKLQlpbnQgcmV0LCBzaWc7CiAJc2lnc2V0X3QgdGhlc2U7CiAJc3RydWN0IHRpbWVzcGVjIHRzOwogCXNpZ2luZm9fdCBpbmZvOwotCWxvbmcgdGltZW91dCA9IDA7CisJaW50IHJldDsKIAogCS8qIFhYWDogRG9uJ3QgcHJlY2x1ZGUgaGFuZGxpbmcgZGlmZmVyZW50IHNpemVkIHNpZ3NldF90J3MuICAqLwogCWlmIChzaWdzZXRzaXplICE9IHNpemVvZihzaWdzZXRfdCkpCkBAIC0yMzA4LDYxICsyNTkyLDE2IEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKCZ0aGVzZSwgdXRoZXNlLCBzaXplb2YodGhlc2UpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkvKgotCSAqIEludmVydCB0aGUgc2V0IG9mIGFsbG93ZWQgc2lnbmFscyB0byBnZXQgdGhvc2Ugd2UKLQkgKiB3YW50IHRvIGJsb2NrLgotCSAqLwotCXNpZ2RlbHNldG1hc2soJnRoZXNlLCBzaWdtYXNrKFNJR0tJTEwpfHNpZ21hc2soU0lHU1RPUCkpOwotCXNpZ25vdHNldCgmdGhlc2UpOwotCiAJaWYgKHV0cykgewogCQlpZiAoY29weV9mcm9tX3VzZXIoJnRzLCB1dHMsIHNpemVvZih0cykpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmICh0cy50dl9uc2VjID49IDEwMDAwMDAwMDBMIHx8IHRzLnR2X25zZWMgPCAwCi0JCSAgICB8fCB0cy50dl9zZWMgPCAwKQotCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0Jc2lnID0gZGVxdWV1ZV9zaWduYWwoY3VycmVudCwgJnRoZXNlLCAmaW5mbyk7Ci0JaWYgKCFzaWcpIHsKLQkJdGltZW91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOwotCQlpZiAodXRzKQotCQkJdGltZW91dCA9ICh0aW1lc3BlY190b19qaWZmaWVzKCZ0cykKLQkJCQkgICArICh0cy50dl9zZWMgfHwgdHMudHZfbnNlYykpOworCXJldCA9IGRvX3NpZ3RpbWVkd2FpdCgmdGhlc2UsICZpbmZvLCB1dHMgPyAmdHMgOiBOVUxMKTsKIAotCQlpZiAodGltZW91dCkgewotCQkJLyoKLQkJCSAqIE5vbmUgcmVhZHkgLS0gdGVtcG9yYXJpbHkgdW5ibG9jayB0aG9zZSB3ZSdyZQotCQkJICogaW50ZXJlc3RlZCB3aGlsZSB3ZSBhcmUgc2xlZXBpbmcgaW4gc28gdGhhdCB3ZSdsbAotCQkJICogYmUgYXdha2VuZWQgd2hlbiB0aGV5IGFycml2ZS4KLQkJCSAqLwotCQkJY3VycmVudC0+cmVhbF9ibG9ja2VkID0gY3VycmVudC0+YmxvY2tlZDsKLQkJCXNpZ2FuZHNldHMoJmN1cnJlbnQtPmJsb2NrZWQsICZjdXJyZW50LT5ibG9ja2VkLCAmdGhlc2UpOwotCQkJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKLQkJCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0KLQkJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUodGltZW91dCk7Ci0KLQkJCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQkJc2lnID0gZGVxdWV1ZV9zaWduYWwoY3VycmVudCwgJnRoZXNlLCAmaW5mbyk7Ci0JCQljdXJyZW50LT5ibG9ja2VkID0gY3VycmVudC0+cmVhbF9ibG9ja2VkOwotCQkJc2lnaW5pdHNldCgmY3VycmVudC0+cmVhbF9ibG9ja2VkLCAwKTsKLQkJCXJlY2FsY19zaWdwZW5kaW5nKCk7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQotCWlmIChzaWcpIHsKLQkJcmV0ID0gc2lnOwotCQlpZiAodWluZm8pIHsKLQkJCWlmIChjb3B5X3NpZ2luZm9fdG9fdXNlcih1aW5mbywgJmluZm8pKQotCQkJCXJldCA9IC1FRkFVTFQ7Ci0JCX0KLQl9IGVsc2UgewotCQlyZXQgPSAtRUFHQUlOOwotCQlpZiAodGltZW91dCkKLQkJCXJldCA9IC1FSU5UUjsKKwlpZiAocmV0ID4gMCAmJiB1aW5mbykgeworCQlpZiAoY29weV9zaWdpbmZvX3RvX3VzZXIodWluZm8sICZpbmZvKSkKKwkJCXJldCA9IC1FRkFVTFQ7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTI2NTAsNjAgKzI4ODksNTEgQEAKIC8qKgogICogIHN5c19zaWdwcm9jbWFzayAtIGV4YW1pbmUgYW5kIGNoYW5nZSBibG9ja2VkIHNpZ25hbHMKICAqICBAaG93OiB3aGV0aGVyIHRvIGFkZCwgcmVtb3ZlLCBvciBzZXQgc2lnbmFscwotICogIEBzZXQ6IHNpZ25hbHMgdG8gYWRkIG9yIHJlbW92ZSAoaWYgbm9uLW51bGwpCisgKiAgQG5zZXQ6IHNpZ25hbHMgdG8gYWRkIG9yIHJlbW92ZSAoaWYgbm9uLW51bGwpCiAgKiAgQG9zZXQ6IHByZXZpb3VzIHZhbHVlIG9mIHNpZ25hbCBtYXNrIGlmIG5vbi1udWxsCiAgKgogICogU29tZSBwbGF0Zm9ybXMgaGF2ZSB0aGVpciBvd24gdmVyc2lvbiB3aXRoIHNwZWNpYWwgYXJndW1lbnRzOwogICogb3RoZXJzIHN1cHBvcnQgb25seSBzeXNfcnRfc2lncHJvY21hc2suCiAgKi8KIAotU1lTQ0FMTF9ERUZJTkUzKHNpZ3Byb2NtYXNrLCBpbnQsIGhvdywgb2xkX3NpZ3NldF90IF9fdXNlciAqLCBzZXQsCitTWVNDQUxMX0RFRklORTMoc2lncHJvY21hc2ssIGludCwgaG93LCBvbGRfc2lnc2V0X3QgX191c2VyICosIG5zZXQsCiAJCW9sZF9zaWdzZXRfdCBfX3VzZXIgKiwgb3NldCkKIHsKLQlpbnQgZXJyb3I7CiAJb2xkX3NpZ3NldF90IG9sZF9zZXQsIG5ld19zZXQ7CisJc2lnc2V0X3QgbmV3X2Jsb2NrZWQ7CiAKLQlpZiAoc2V0KSB7Ci0JCWVycm9yID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZuZXdfc2V0LCBzZXQsIHNpemVvZigqc2V0KSkpCi0JCQlnb3RvIG91dDsKKwlvbGRfc2V0ID0gY3VycmVudC0+YmxvY2tlZC5zaWdbMF07CisKKwlpZiAobnNldCkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJm5ld19zZXQsIG5zZXQsIHNpemVvZigqbnNldCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCW5ld19zZXQgJj0gfihzaWdtYXNrKFNJR0tJTEwpIHwgc2lnbWFzayhTSUdTVE9QKSk7CiAKLQkJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCW9sZF9zZXQgPSBjdXJyZW50LT5ibG9ja2VkLnNpZ1swXTsKKwkJbmV3X2Jsb2NrZWQgPSBjdXJyZW50LT5ibG9ja2VkOwogCi0JCWVycm9yID0gMDsKIAkJc3dpdGNoIChob3cpIHsKLQkJZGVmYXVsdDoKLQkJCWVycm9yID0gLUVJTlZBTDsKLQkJCWJyZWFrOwogCQljYXNlIFNJR19CTE9DSzoKLQkJCXNpZ2FkZHNldG1hc2soJmN1cnJlbnQtPmJsb2NrZWQsIG5ld19zZXQpOworCQkJc2lnYWRkc2V0bWFzaygmbmV3X2Jsb2NrZWQsIG5ld19zZXQpOwogCQkJYnJlYWs7CiAJCWNhc2UgU0lHX1VOQkxPQ0s6Ci0JCQlzaWdkZWxzZXRtYXNrKCZjdXJyZW50LT5ibG9ja2VkLCBuZXdfc2V0KTsKKwkJCXNpZ2RlbHNldG1hc2soJm5ld19ibG9ja2VkLCBuZXdfc2V0KTsKIAkJCWJyZWFrOwogCQljYXNlIFNJR19TRVRNQVNLOgotCQkJY3VycmVudC0+YmxvY2tlZC5zaWdbMF0gPSBuZXdfc2V0OworCQkJbmV3X2Jsb2NrZWQuc2lnWzBdID0gbmV3X3NldDsKIAkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlyZWNhbGNfc2lncGVuZGluZygpOwotCQlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dDsKLQkJaWYgKG9zZXQpCi0JCQlnb3RvIHNldF9vbGQ7Ci0JfSBlbHNlIGlmIChvc2V0KSB7Ci0JCW9sZF9zZXQgPSBjdXJyZW50LT5ibG9ja2VkLnNpZ1swXTsKLQlzZXRfb2xkOgotCQllcnJvciA9IC1FRkFVTFQ7Ci0JCWlmIChjb3B5X3RvX3VzZXIob3NldCwgJm9sZF9zZXQsIHNpemVvZigqb3NldCkpKQotCQkJZ290byBvdXQ7CisJCXNldF9jdXJyZW50X2Jsb2NrZWQoJm5ld19ibG9ja2VkKTsKIAl9Ci0JZXJyb3IgPSAwOwotb3V0OgotCXJldHVybiBlcnJvcjsKKworCWlmIChvc2V0KSB7CisJCWlmIChjb3B5X3RvX3VzZXIob3NldCwgJm9sZF9zZXQsIHNpemVvZigqb3NldCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIDA7CiB9CiAjZW5kaWYgLyogX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLICovCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0aXJxLmMgYi9rZXJuZWwvc29mdGlycS5jCmluZGV4IDE3NGY5NzYuLjEzOTYwMTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zb2Z0aXJxLmMKKysrIGIva2VybmVsL3NvZnRpcnEuYwpAQCAtNTgsNyArNTgsNyBAQAogCiBjaGFyICpzb2Z0aXJxX3RvX25hbWVbTlJfU09GVElSUVNdID0gewogCSJISSIsICJUSU1FUiIsICJORVRfVFgiLCAiTkVUX1JYIiwgIkJMT0NLIiwgIkJMT0NLX0lPUE9MTCIsCi0JIlRBU0tMRVQiLCAiU0NIRUQiLCAiSFJUSU1FUiIsCSJSQ1UiCisJIlRBU0tMRVQiLCAiU0NIRUQiLCAiSFJUSU1FUiIKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzLmMgYi9rZXJuZWwvc3lzLmMKaW5kZXggYWY0NjhlZC4uZTQxMjhiMiAxMDA2NDQKLS0tIGEva2VybmVsL3N5cy5jCisrKyBiL2tlcm5lbC9zeXMuYwpAQCAtMzE0LDggKzMxNCw4IEBACiB7CiAJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmcmVib290X25vdGlmaWVyX2xpc3QsIFNZU19SRVNUQVJULCBjbWQpOwogCXN5c3RlbV9zdGF0ZSA9IFNZU1RFTV9SRVNUQVJUOworCXVzZXJtb2RlaGVscGVyX2Rpc2FibGUoKTsKIAlkZXZpY2Vfc2h1dGRvd24oKTsKLQlzeXNkZXZfc2h1dGRvd24oKTsKIAlzeXNjb3JlX3NodXRkb3duKCk7CiB9CiAKQEAgLTM0NCw2ICszNDQsNyBAQAogCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJnJlYm9vdF9ub3RpZmllcl9saXN0LAogCQkoc3RhdGUgPT0gU1lTVEVNX0hBTFQpP1NZU19IQUxUOlNZU19QT1dFUl9PRkYsIE5VTEwpOwogCXN5c3RlbV9zdGF0ZSA9IHN0YXRlOworCXVzZXJtb2RlaGVscGVyX2Rpc2FibGUoKTsKIAlkZXZpY2Vfc2h1dGRvd24oKTsKIH0KIC8qKgpAQCAtMzU0LDcgKzM1NSw2IEBACiB2b2lkIGtlcm5lbF9oYWx0KHZvaWQpCiB7CiAJa2VybmVsX3NodXRkb3duX3ByZXBhcmUoU1lTVEVNX0hBTFQpOwotCXN5c2Rldl9zaHV0ZG93bigpOwogCXN5c2NvcmVfc2h1dGRvd24oKTsKIAlwcmludGsoS0VSTl9FTUVSRyAiU3lzdGVtIGhhbHRlZC5cbiIpOwogCWttc2dfZHVtcChLTVNHX0RVTVBfSEFMVCk7CkBAIC0zNzQsNyArMzc0LDYgQEAKIAlpZiAocG1fcG93ZXJfb2ZmX3ByZXBhcmUpCiAJCXBtX3Bvd2VyX29mZl9wcmVwYXJlKCk7CiAJZGlzYWJsZV9ub25ib290X2NwdXMoKTsKLQlzeXNkZXZfc2h1dGRvd24oKTsKIAlzeXNjb3JlX3NodXRkb3duKCk7CiAJcHJpbnRrKEtFUk5fRU1FUkcgIlBvd2VyIGRvd24uXG4iKTsKIAlrbXNnX2R1bXAoS01TR19EVU1QX1BPV0VST0ZGKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNfbmkuYyBiL2tlcm5lbC9zeXNfbmkuYwppbmRleCAyNWNjNDFjLi42MmNiYzg4IDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzX25pLmMKKysrIGIva2VybmVsL3N5c19uaS5jCkBAIC00Niw3ICs0Niw5IEBACiBjb25kX3N5c2NhbGwoY29tcGF0X3N5c19nZXRzb2Nrb3B0KTsKIGNvbmRfc3lzY2FsbChzeXNfc2h1dGRvd24pOwogY29uZF9zeXNjYWxsKHN5c19zZW5kbXNnKTsKK2NvbmRfc3lzY2FsbChzeXNfc2VuZG1tc2cpOwogY29uZF9zeXNjYWxsKGNvbXBhdF9zeXNfc2VuZG1zZyk7Citjb25kX3N5c2NhbGwoY29tcGF0X3N5c19zZW5kbW1zZyk7CiBjb25kX3N5c2NhbGwoc3lzX3JlY3Ztc2cpOwogY29uZF9zeXNjYWxsKHN5c19yZWN2bW1zZyk7CiBjb25kX3N5c2NhbGwoY29tcGF0X3N5c19yZWN2bXNnKTsKQEAgLTY5LDE1ICs3MSwyMiBAQAogY29uZF9zeXNjYWxsKHN5c19zZW1nZXQpOwogY29uZF9zeXNjYWxsKHN5c19zZW1vcCk7CiBjb25kX3N5c2NhbGwoc3lzX3NlbXRpbWVkb3ApOworY29uZF9zeXNjYWxsKGNvbXBhdF9zeXNfc2VtdGltZWRvcCk7CiBjb25kX3N5c2NhbGwoc3lzX3NlbWN0bCk7Citjb25kX3N5c2NhbGwoY29tcGF0X3N5c19zZW1jdGwpOwogY29uZF9zeXNjYWxsKHN5c19tc2dnZXQpOwogY29uZF9zeXNjYWxsKHN5c19tc2dzbmQpOworY29uZF9zeXNjYWxsKGNvbXBhdF9zeXNfbXNnc25kKTsKIGNvbmRfc3lzY2FsbChzeXNfbXNncmN2KTsKK2NvbmRfc3lzY2FsbChjb21wYXRfc3lzX21zZ3Jjdik7CiBjb25kX3N5c2NhbGwoc3lzX21zZ2N0bCk7Citjb25kX3N5c2NhbGwoY29tcGF0X3N5c19tc2djdGwpOwogY29uZF9zeXNjYWxsKHN5c19zaG1nZXQpOwogY29uZF9zeXNjYWxsKHN5c19zaG1hdCk7Citjb25kX3N5c2NhbGwoY29tcGF0X3N5c19zaG1hdCk7CiBjb25kX3N5c2NhbGwoc3lzX3NobWR0KTsKIGNvbmRfc3lzY2FsbChzeXNfc2htY3RsKTsKK2NvbmRfc3lzY2FsbChjb21wYXRfc3lzX3NobWN0bCk7CiBjb25kX3N5c2NhbGwoc3lzX21xX29wZW4pOwogY29uZF9zeXNjYWxsKHN5c19tcV91bmxpbmspOwogY29uZF9zeXNjYWxsKHN5c19tcV90aW1lZHNlbmQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvTWFrZWZpbGUgYi9rZXJuZWwvdGltZS9NYWtlZmlsZQppbmRleCBiMDQyNTk5Li5lMmZkNzRiIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9NYWtlZmlsZQorKysgYi9rZXJuZWwvdGltZS9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKIG9iai15ICs9IHRpbWVrZWVwaW5nLm8gbnRwLm8gY2xvY2tzb3VyY2UubyBqaWZmaWVzLm8gdGltZXJfbGlzdC5vIHRpbWVjb21wYXJlLm8KLW9iai15ICs9IHRpbWVjb252Lm8gcG9zaXgtY2xvY2subworb2JqLXkgKz0gdGltZWNvbnYubyBwb3NpeC1jbG9jay5vIGFsYXJtdGltZXIubwogCiBvYmotJChDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRCkJCSs9IGNsb2NrZXZlbnRzLm8KIG9iai0kKENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTKQkJKz0gdGljay1jb21tb24ubwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvYWxhcm10aW1lci5jIGIva2VybmVsL3RpbWUvYWxhcm10aW1lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNjUwMTQKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdGltZS9hbGFybXRpbWVyLmMKQEAgLTAsMCArMSw2OTQgQEAKKy8qCisgKiBBbGFybXRpbWVyIGludGVyZmFjZQorICoKKyAqIFRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIGEgdGltZXIgd2hpY2ggaXMgc2ltaWxhcnRvIGhydGltZXJzLAorICogYnV0IHRyaWdnZXJzIGEgUlRDIGFsYXJtIGlmIHRoZSBib3ggaXMgc3VzcGVuZC4KKyAqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbmZsdWVuY2VkIGJ5IHRoZSBBbmRyb2lkIFJUQyBBbGFybSB0aW1lcgorICogaW50ZXJmYWNlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJQk0gQ29ycGVyYXRpb24KKyAqCisgKiBBdXRob3I6IEpvaG4gU3R1bHR6IDxqb2huLnN0dWx0ekBsaW5hcm8ub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVycXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9hbGFybXRpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wb3NpeC10aW1lcnMuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CisKKy8qKgorICogc3RydWN0IGFsYXJtX2Jhc2UgLSBBbGFybSB0aW1lciBiYXNlcworICogQGxvY2s6CQlMb2NrIGZvciBzeW5jcmhvbml6ZWQgYWNjZXNzIHRvIHRoZSBiYXNlCisgKiBAdGltZXJxdWV1ZToJCVRpbWVycXVldWUgaGVhZCBtYW5hZ2luZyB0aGUgbGlzdCBvZiBldmVudHMKKyAqIEB0aW1lcjogCQlocnRpbWVyIHVzZWQgdG8gc2NoZWR1bGUgZXZlbnRzIHdoaWxlIHJ1bm5pbmcKKyAqIEBnZXR0aW1lOgkJRnVuY3Rpb24gdG8gcmVhZCB0aGUgdGltZSBjb3JyZWxhdGluZyB0byB0aGUgYmFzZQorICogQGJhc2VfY2xvY2tpZDoJY2xvY2tpZCBmb3IgdGhlIGJhc2UKKyAqLworc3RhdGljIHN0cnVjdCBhbGFybV9iYXNlIHsKKwlzcGlubG9ja190CQlsb2NrOworCXN0cnVjdCB0aW1lcnF1ZXVlX2hlYWQJdGltZXJxdWV1ZTsKKwlzdHJ1Y3QgaHJ0aW1lcgkJdGltZXI7CisJa3RpbWVfdAkJCSgqZ2V0dGltZSkodm9pZCk7CisJY2xvY2tpZF90CQliYXNlX2Nsb2NraWQ7Cit9IGFsYXJtX2Jhc2VzW0FMQVJNX05VTVRZUEVdOworCisjaWZkZWYgQ09ORklHX1JUQ19DTEFTUworLyogcnRjIHRpbWVyIGFuZCBkZXZpY2UgZm9yIHNldHRpbmcgYWxhcm0gd2FrZXVwcyBhdCBzdXNwZW5kICovCitzdGF0aWMgc3RydWN0IHJ0Y190aW1lcgkJcnRjdGltZXI7CitzdGF0aWMgc3RydWN0IHJ0Y19kZXZpY2UJKnJ0Y2RldjsKKyNlbmRpZgorCisvKiBmcmVlemVyIGRlbHRhICYgbG9jayB1c2VkIHRvIGhhbmRsZSBjbG9ja19uYW5vc2xlZXAgdHJpZ2dlcmVkIHdha2V1cHMgKi8KK3N0YXRpYyBrdGltZV90IGZyZWV6ZXJfZGVsdGE7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGZyZWV6ZXJfZGVsdGFfbG9jayk7CisKKworLyoqCisgKiBhbGFybXRpbWVyX2VucXVldWUgLSBBZGRzIGFuIGFsYXJtIHRpbWVyIHRvIGFuIGFsYXJtX2Jhc2UgdGltZXJxdWV1ZQorICogQGJhc2U6IHBvaW50ZXIgdG8gdGhlIGJhc2Ugd2hlcmUgdGhlIHRpbWVyIGlzIGJlaW5nIHJ1bgorICogQGFsYXJtOiBwb2ludGVyIHRvIGFsYXJtIGJlaW5nIGVucXVldWVkLgorICoKKyAqIEFkZHMgYWxhcm0gdG8gYSBhbGFybV9iYXNlIHRpbWVycXVldWUgYW5kIGlmIG5lY2Vzc2FyeSBzZXRzCisgKiBhbiBocnRpbWVyIHRvIHJ1bi4KKyAqCisgKiBNdXN0IGhvbGQgYmFzZS0+bG9jayB3aGVuIGNhbGxpbmcuCisgKi8KK3N0YXRpYyB2b2lkIGFsYXJtdGltZXJfZW5xdWV1ZShzdHJ1Y3QgYWxhcm1fYmFzZSAqYmFzZSwgc3RydWN0IGFsYXJtICphbGFybSkKK3sKKwl0aW1lcnF1ZXVlX2FkZCgmYmFzZS0+dGltZXJxdWV1ZSwgJmFsYXJtLT5ub2RlKTsKKwlpZiAoJmFsYXJtLT5ub2RlID09IHRpbWVycXVldWVfZ2V0bmV4dCgmYmFzZS0+dGltZXJxdWV1ZSkpIHsKKwkJaHJ0aW1lcl90cnlfdG9fY2FuY2VsKCZiYXNlLT50aW1lcik7CisJCWhydGltZXJfc3RhcnQoJmJhc2UtPnRpbWVyLCBhbGFybS0+bm9kZS5leHBpcmVzLAorCQkJCUhSVElNRVJfTU9ERV9BQlMpOworCX0KK30KKworLyoqCisgKiBhbGFybXRpbWVyX3JlbW92ZSAtIFJlbW92ZXMgYW4gYWxhcm0gdGltZXIgZnJvbSBhbiBhbGFybV9iYXNlIHRpbWVycXVldWUKKyAqIEBiYXNlOiBwb2ludGVyIHRvIHRoZSBiYXNlIHdoZXJlIHRoZSB0aW1lciBpcyBydW5uaW5nCisgKiBAYWxhcm06IHBvaW50ZXIgdG8gYWxhcm0gYmVpbmcgcmVtb3ZlZAorICoKKyAqIFJlbW92ZXMgYWxhcm0gdG8gYSBhbGFybV9iYXNlIHRpbWVycXVldWUgYW5kIGlmIG5lY2Vzc2FyeSBzZXRzCisgKiBhIG5ldyB0aW1lciB0byBydW4uCisgKgorICogTXVzdCBob2xkIGJhc2UtPmxvY2sgd2hlbiBjYWxsaW5nLgorICovCitzdGF0aWMgdm9pZCBhbGFybXRpbWVyX3JlbW92ZShzdHJ1Y3QgYWxhcm1fYmFzZSAqYmFzZSwgc3RydWN0IGFsYXJtICphbGFybSkKK3sKKwlzdHJ1Y3QgdGltZXJxdWV1ZV9ub2RlICpuZXh0ID0gdGltZXJxdWV1ZV9nZXRuZXh0KCZiYXNlLT50aW1lcnF1ZXVlKTsKKworCXRpbWVycXVldWVfZGVsKCZiYXNlLT50aW1lcnF1ZXVlLCAmYWxhcm0tPm5vZGUpOworCWlmIChuZXh0ID09ICZhbGFybS0+bm9kZSkgeworCQlocnRpbWVyX3RyeV90b19jYW5jZWwoJmJhc2UtPnRpbWVyKTsKKwkJbmV4dCA9IHRpbWVycXVldWVfZ2V0bmV4dCgmYmFzZS0+dGltZXJxdWV1ZSk7CisJCWlmICghbmV4dCkKKwkJCXJldHVybjsKKwkJaHJ0aW1lcl9zdGFydCgmYmFzZS0+dGltZXIsIG5leHQtPmV4cGlyZXMsIEhSVElNRVJfTU9ERV9BQlMpOworCX0KK30KKworCisvKioKKyAqIGFsYXJtdGltZXJfZmlyZWQgLSBIYW5kbGVzIGFsYXJtIGhydGltZXIgYmVpbmcgZmlyZWQuCisgKiBAdGltZXI6IHBvaW50ZXIgdG8gaHJ0aW1lciBiZWluZyBydW4KKyAqCisgKiBXaGVuIGEgYWxhcm0gdGltZXIgZmlyZXMsIHRoaXMgcnVucyB0aHJvdWdoIHRoZSB0aW1lcnF1ZXVlIHRvCisgKiBzZWUgd2hpY2ggYWxhcm1zIGV4cGlyZWQsIGFuZCBydW5zIHRob3NlLiBJZiB0aGVyZSBhcmUgbW9yZSBhbGFybQorICogdGltZXJzIHF1ZXVlZCBmb3IgdGhlIGZ1dHVyZSwgd2Ugc2V0IHRoZSBocnRpbWVyIHRvIGZpcmUgd2hlbgorICogd2hlbiB0aGUgbmV4dCBmdXR1cmUgYWxhcm0gdGltZXIgZXhwaXJlcy4KKyAqLworc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGFsYXJtdGltZXJfZmlyZWQoc3RydWN0IGhydGltZXIgKnRpbWVyKQoreworCXN0cnVjdCBhbGFybV9iYXNlICpiYXNlID0gY29udGFpbmVyX29mKHRpbWVyLCBzdHJ1Y3QgYWxhcm1fYmFzZSwgdGltZXIpOworCXN0cnVjdCB0aW1lcnF1ZXVlX25vZGUgKm5leHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlrdGltZV90IG5vdzsKKwlpbnQgcmV0ID0gSFJUSU1FUl9OT1JFU1RBUlQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmFzZS0+bG9jaywgZmxhZ3MpOworCW5vdyA9IGJhc2UtPmdldHRpbWUoKTsKKwl3aGlsZSAoKG5leHQgPSB0aW1lcnF1ZXVlX2dldG5leHQoJmJhc2UtPnRpbWVycXVldWUpKSkgeworCQlzdHJ1Y3QgYWxhcm0gKmFsYXJtOworCQlrdGltZV90IGV4cGlyZWQgPSBuZXh0LT5leHBpcmVzOworCisJCWlmIChleHBpcmVkLnR2NjQgPj0gbm93LnR2NjQpCisJCQlicmVhazsKKworCQlhbGFybSA9IGNvbnRhaW5lcl9vZihuZXh0LCBzdHJ1Y3QgYWxhcm0sIG5vZGUpOworCisJCXRpbWVycXVldWVfZGVsKCZiYXNlLT50aW1lcnF1ZXVlLCAmYWxhcm0tPm5vZGUpOworCQlhbGFybS0+ZW5hYmxlZCA9IDA7CisJCS8qIFJlLWFkZCBwZXJpb2RpYyB0aW1lcnMgKi8KKwkJaWYgKGFsYXJtLT5wZXJpb2QudHY2NCkgeworCQkJYWxhcm0tPm5vZGUuZXhwaXJlcyA9IGt0aW1lX2FkZChleHBpcmVkLCBhbGFybS0+cGVyaW9kKTsKKwkJCXRpbWVycXVldWVfYWRkKCZiYXNlLT50aW1lcnF1ZXVlLCAmYWxhcm0tPm5vZGUpOworCQkJYWxhcm0tPmVuYWJsZWQgPSAxOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhc2UtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKGFsYXJtLT5mdW5jdGlvbikKKwkJCWFsYXJtLT5mdW5jdGlvbihhbGFybSk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZiYXNlLT5sb2NrLCBmbGFncyk7CisJfQorCisJaWYgKG5leHQpIHsKKwkJaHJ0aW1lcl9zZXRfZXhwaXJlcygmYmFzZS0+dGltZXIsIG5leHQtPmV4cGlyZXMpOworCQlyZXQgPSBIUlRJTUVSX1JFU1RBUlQ7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhc2UtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7CisKK30KKworI2lmZGVmIENPTkZJR19SVENfQ0xBU1MKKy8qKgorICogYWxhcm10aW1lcl9zdXNwZW5kIC0gU3VzcGVuZCB0aW1lIGNhbGxiYWNrCisgKiBAZGV2OiB1bnVzZWQKKyAqIEBzdGF0ZTogdW51c2VkCisgKgorICogV2hlbiB3ZSBhcmUgZ29pbmcgaW50byBzdXNwZW5kLCB3ZSBsb29rIHRocm91Z2ggdGhlIGJhc2VzCisgKiB0byBzZWUgd2hpY2ggaXMgdGhlIHNvb25lc3QgdGltZXIgdG8gZXhwaXJlLiBXZSB0aGVuCisgKiBzZXQgYW4gcnRjIHRpbWVyIHRvIGZpcmUgdGhhdCBmYXIgaW50byB0aGUgZnV0dXJlLCB3aGljaAorICogd2lsbCB3YWtlIHVzIGZyb20gc3VzcGVuZC4KKyAqLworc3RhdGljIGludCBhbGFybXRpbWVyX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBydGNfdGltZSB0bTsKKwlrdGltZV90IG1pbiwgbm93OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZnJlZXplcl9kZWx0YV9sb2NrLCBmbGFncyk7CisJbWluID0gZnJlZXplcl9kZWx0YTsKKwlmcmVlemVyX2RlbHRhID0ga3RpbWVfc2V0KDAsIDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZyZWV6ZXJfZGVsdGFfbG9jaywgZmxhZ3MpOworCisJLyogSWYgd2UgaGF2ZSBubyBydGNkZXYsIGp1c3QgcmV0dXJuICovCisJaWYgKCFydGNkZXYpCisJCXJldHVybiAwOworCisJLyogRmluZCB0aGUgc29vbmVzdCB0aW1lciB0byBleHBpcmUqLworCWZvciAoaSA9IDA7IGkgPCBBTEFSTV9OVU1UWVBFOyBpKyspIHsKKwkJc3RydWN0IGFsYXJtX2Jhc2UgKmJhc2UgPSAmYWxhcm1fYmFzZXNbaV07CisJCXN0cnVjdCB0aW1lcnF1ZXVlX25vZGUgKm5leHQ7CisJCWt0aW1lX3QgZGVsdGE7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmJhc2UtPmxvY2ssIGZsYWdzKTsKKwkJbmV4dCA9IHRpbWVycXVldWVfZ2V0bmV4dCgmYmFzZS0+dGltZXJxdWV1ZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhc2UtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKCFuZXh0KQorCQkJY29udGludWU7CisJCWRlbHRhID0ga3RpbWVfc3ViKG5leHQtPmV4cGlyZXMsIGJhc2UtPmdldHRpbWUoKSk7CisJCWlmICghbWluLnR2NjQgfHwgKGRlbHRhLnR2NjQgPCBtaW4udHY2NCkpCisJCQltaW4gPSBkZWx0YTsKKwl9CisJaWYgKG1pbi50djY0ID09IDApCisJCXJldHVybiAwOworCisJLyogWFhYIC0gU2hvdWxkIHdlIGVuZm9yY2UgYSBtaW5pbXVtIHNsZWVwIHRpbWU/ICovCisJV0FSTl9PTihtaW4udHY2NCA8IE5TRUNfUEVSX1NFQyk7CisKKwkvKiBTZXR1cCBhbiBydGMgdGltZXIgdG8gZmlyZSB0aGF0IGZhciBpbiB0aGUgZnV0dXJlICovCisJcnRjX3RpbWVyX2NhbmNlbChydGNkZXYsICZydGN0aW1lcik7CisJcnRjX3JlYWRfdGltZShydGNkZXYsICZ0bSk7CisJbm93ID0gcnRjX3RtX3RvX2t0aW1lKHRtKTsKKwlub3cgPSBrdGltZV9hZGQobm93LCBtaW4pOworCisJcnRjX3RpbWVyX3N0YXJ0KHJ0Y2RldiwgJnJ0Y3RpbWVyLCBub3csIGt0aW1lX3NldCgwLCAwKSk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCitzdGF0aWMgaW50IGFsYXJtdGltZXJfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgYWxhcm10aW1lcl9mcmVlemVyc2V0KGt0aW1lX3QgYWJzZXhwLCBlbnVtIGFsYXJtdGltZXJfdHlwZSB0eXBlKQoreworCWt0aW1lX3QgZGVsdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgYWxhcm1fYmFzZSAqYmFzZSA9ICZhbGFybV9iYXNlc1t0eXBlXTsKKworCWRlbHRhID0ga3RpbWVfc3ViKGFic2V4cCwgYmFzZS0+Z2V0dGltZSgpKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZmcmVlemVyX2RlbHRhX2xvY2ssIGZsYWdzKTsKKwlpZiAoIWZyZWV6ZXJfZGVsdGEudHY2NCB8fCAoZGVsdGEudHY2NCA8IGZyZWV6ZXJfZGVsdGEudHY2NCkpCisJCWZyZWV6ZXJfZGVsdGEgPSBkZWx0YTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmcmVlemVyX2RlbHRhX2xvY2ssIGZsYWdzKTsKK30KKworCisvKioKKyAqIGFsYXJtX2luaXQgLSBJbml0aWFsaXplIGFuIGFsYXJtIHN0cnVjdHVyZQorICogQGFsYXJtOiBwdHIgdG8gYWxhcm0gdG8gYmUgaW5pdGlhbGl6ZWQKKyAqIEB0eXBlOiB0aGUgdHlwZSBvZiB0aGUgYWxhcm0KKyAqIEBmdW5jdGlvbjogY2FsbGJhY2sgdGhhdCBpcyBydW4gd2hlbiB0aGUgYWxhcm0gZmlyZXMKKyAqLwordm9pZCBhbGFybV9pbml0KHN0cnVjdCBhbGFybSAqYWxhcm0sIGVudW0gYWxhcm10aW1lcl90eXBlIHR5cGUsCisJCXZvaWQgKCpmdW5jdGlvbikoc3RydWN0IGFsYXJtICopKQoreworCXRpbWVycXVldWVfaW5pdCgmYWxhcm0tPm5vZGUpOworCWFsYXJtLT5wZXJpb2QgPSBrdGltZV9zZXQoMCwgMCk7CisJYWxhcm0tPmZ1bmN0aW9uID0gZnVuY3Rpb247CisJYWxhcm0tPnR5cGUgPSB0eXBlOworCWFsYXJtLT5lbmFibGVkID0gMDsKK30KKworLyoqCisgKiBhbGFybV9zdGFydCAtIFNldHMgYW4gYWxhcm0gdG8gZmlyZQorICogQGFsYXJtOiBwdHIgdG8gYWxhcm0gdG8gc2V0CisgKiBAc3RhcnQ6IHRpbWUgdG8gcnVuIHRoZSBhbGFybQorICogQHBlcmlvZDogcGVyaW9kIGF0IHdoaWNoIHRoZSBhbGFybSB3aWxsIHJlY3VyCisgKi8KK3ZvaWQgYWxhcm1fc3RhcnQoc3RydWN0IGFsYXJtICphbGFybSwga3RpbWVfdCBzdGFydCwga3RpbWVfdCBwZXJpb2QpCit7CisJc3RydWN0IGFsYXJtX2Jhc2UgKmJhc2UgPSAmYWxhcm1fYmFzZXNbYWxhcm0tPnR5cGVdOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmFzZS0+bG9jaywgZmxhZ3MpOworCWlmIChhbGFybS0+ZW5hYmxlZCkKKwkJYWxhcm10aW1lcl9yZW1vdmUoYmFzZSwgYWxhcm0pOworCWFsYXJtLT5ub2RlLmV4cGlyZXMgPSBzdGFydDsKKwlhbGFybS0+cGVyaW9kID0gcGVyaW9kOworCWFsYXJtdGltZXJfZW5xdWV1ZShiYXNlLCBhbGFybSk7CisJYWxhcm0tPmVuYWJsZWQgPSAxOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhc2UtPmxvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBhbGFybV9jYW5jZWwgLSBUcmllcyB0byBjYW5jZWwgYW4gYWxhcm0gdGltZXIKKyAqIEBhbGFybTogcHRyIHRvIGFsYXJtIHRvIGJlIGNhbmNlbGVkCisgKi8KK3ZvaWQgYWxhcm1fY2FuY2VsKHN0cnVjdCBhbGFybSAqYWxhcm0pCit7CisJc3RydWN0IGFsYXJtX2Jhc2UgKmJhc2UgPSAmYWxhcm1fYmFzZXNbYWxhcm0tPnR5cGVdOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmFzZS0+bG9jaywgZmxhZ3MpOworCWlmIChhbGFybS0+ZW5hYmxlZCkKKwkJYWxhcm10aW1lcl9yZW1vdmUoYmFzZSwgYWxhcm0pOworCWFsYXJtLT5lbmFibGVkID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYXNlLT5sb2NrLCBmbGFncyk7Cit9CisKKworLyoqCisgKiBjbG9jazJhbGFybSAtIGhlbHBlciB0aGF0IGNvbnZlcnRzIGZyb20gY2xvY2tpZCB0byBhbGFybXR5cGVzCisgKiBAY2xvY2tpZDogY2xvY2tpZC4KKyAqLworc3RhdGljIGVudW0gYWxhcm10aW1lcl90eXBlIGNsb2NrMmFsYXJtKGNsb2NraWRfdCBjbG9ja2lkKQoreworCWlmIChjbG9ja2lkID09IENMT0NLX1JFQUxUSU1FX0FMQVJNKQorCQlyZXR1cm4gQUxBUk1fUkVBTFRJTUU7CisJaWYgKGNsb2NraWQgPT0gQ0xPQ0tfQk9PVFRJTUVfQUxBUk0pCisJCXJldHVybiBBTEFSTV9CT09UVElNRTsKKwlyZXR1cm4gLTE7Cit9CisKKy8qKgorICogYWxhcm1faGFuZGxlX3RpbWVyIC0gQ2FsbGJhY2sgZm9yIHBvc2l4IHRpbWVycworICogQGFsYXJtOiBhbGFybSB0aGF0IGZpcmVkCisgKgorICogUG9zaXggdGltZXIgY2FsbGJhY2sgZm9yIGV4cGlyZWQgYWxhcm0gdGltZXJzLgorICovCitzdGF0aWMgdm9pZCBhbGFybV9oYW5kbGVfdGltZXIoc3RydWN0IGFsYXJtICphbGFybSkKK3sKKwlzdHJ1Y3Qga19pdGltZXIgKnB0ciA9IGNvbnRhaW5lcl9vZihhbGFybSwgc3RydWN0IGtfaXRpbWVyLAorCQkJCQkJaXQuYWxhcm10aW1lcik7CisJaWYgKHBvc2l4X3RpbWVyX2V2ZW50KHB0ciwgMCkgIT0gMCkKKwkJcHRyLT5pdF9vdmVycnVuKys7Cit9CisKKy8qKgorICogYWxhcm1fY2xvY2tfZ2V0cmVzIC0gcG9zaXggZ2V0cmVzIGludGVyZmFjZQorICogQHdoaWNoX2Nsb2NrOiBjbG9ja2lkCisgKiBAdHA6IHRpbWVzcGVjIHRvIGZpbGwKKyAqCisgKiBSZXR1cm5zIHRoZSBncmFudWxhcml0eSBvZiB1bmRlcmx5aW5nIGFsYXJtIGJhc2UgY2xvY2sKKyAqLworc3RhdGljIGludCBhbGFybV9jbG9ja19nZXRyZXMoY29uc3QgY2xvY2tpZF90IHdoaWNoX2Nsb2NrLCBzdHJ1Y3QgdGltZXNwZWMgKnRwKQoreworCWNsb2NraWRfdCBiYXNlaWQgPSBhbGFybV9iYXNlc1tjbG9jazJhbGFybSh3aGljaF9jbG9jayldLmJhc2VfY2xvY2tpZDsKKworCXJldHVybiBocnRpbWVyX2dldF9yZXMoYmFzZWlkLCB0cCk7Cit9CisKKy8qKgorICogYWxhcm1fY2xvY2tfZ2V0IC0gcG9zaXggY2xvY2tfZ2V0IGludGVyZmFjZQorICogQHdoaWNoX2Nsb2NrOiBjbG9ja2lkCisgKiBAdHA6IHRpbWVzcGVjIHRvIGZpbGwuCisgKgorICogUHJvdmlkZXMgdGhlIHVuZGVybHlpbmcgYWxhcm0gYmFzZSB0aW1lLgorICovCitzdGF0aWMgaW50IGFsYXJtX2Nsb2NrX2dldChjbG9ja2lkX3Qgd2hpY2hfY2xvY2ssIHN0cnVjdCB0aW1lc3BlYyAqdHApCit7CisJc3RydWN0IGFsYXJtX2Jhc2UgKmJhc2UgPSAmYWxhcm1fYmFzZXNbY2xvY2syYWxhcm0od2hpY2hfY2xvY2spXTsKKworCSp0cCA9IGt0aW1lX3RvX3RpbWVzcGVjKGJhc2UtPmdldHRpbWUoKSk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYWxhcm1fdGltZXJfY3JlYXRlIC0gcG9zaXggdGltZXJfY3JlYXRlIGludGVyZmFjZQorICogQG5ld190aW1lcjoga19pdGltZXIgcG9pbnRlciB0byBtYW5hZ2UKKyAqCisgKiBJbml0aWFsaXplcyB0aGUga19pdGltZXIgc3RydWN0dXJlLgorICovCitzdGF0aWMgaW50IGFsYXJtX3RpbWVyX2NyZWF0ZShzdHJ1Y3Qga19pdGltZXIgKm5ld190aW1lcikKK3sKKwllbnVtICBhbGFybXRpbWVyX3R5cGUgdHlwZTsKKwlzdHJ1Y3QgYWxhcm1fYmFzZSAqYmFzZTsKKworCWlmICghY2FwYWJsZShDQVBfV0FLRV9BTEFSTSkpCisJCXJldHVybiAtRVBFUk07CisKKwl0eXBlID0gY2xvY2syYWxhcm0obmV3X3RpbWVyLT5pdF9jbG9jayk7CisJYmFzZSA9ICZhbGFybV9iYXNlc1t0eXBlXTsKKwlhbGFybV9pbml0KCZuZXdfdGltZXItPml0LmFsYXJtdGltZXIsIHR5cGUsIGFsYXJtX2hhbmRsZV90aW1lcik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYWxhcm1fdGltZXJfZ2V0IC0gcG9zaXggdGltZXJfZ2V0IGludGVyZmFjZQorICogQG5ld190aW1lcjoga19pdGltZXIgcG9pbnRlcgorICogQGN1cl9zZXR0aW5nOiBpdGltZXJzcGVjIGRhdGEgdG8gZmlsbAorICoKKyAqIENvcGllcyB0aGUgaXRpbWVyc3BlYyBkYXRhIG91dCBmcm9tIHRoZSBrX2l0aW1lcgorICovCitzdGF0aWMgdm9pZCBhbGFybV90aW1lcl9nZXQoc3RydWN0IGtfaXRpbWVyICp0aW1yLAorCQkJCXN0cnVjdCBpdGltZXJzcGVjICpjdXJfc2V0dGluZykKK3sKKwljdXJfc2V0dGluZy0+aXRfaW50ZXJ2YWwgPQorCQkJa3RpbWVfdG9fdGltZXNwZWModGltci0+aXQuYWxhcm10aW1lci5wZXJpb2QpOworCWN1cl9zZXR0aW5nLT5pdF92YWx1ZSA9CisJCQlrdGltZV90b190aW1lc3BlYyh0aW1yLT5pdC5hbGFybXRpbWVyLm5vZGUuZXhwaXJlcyk7CisJcmV0dXJuOworfQorCisvKioKKyAqIGFsYXJtX3RpbWVyX2RlbCAtIHBvc2l4IHRpbWVyX2RlbCBpbnRlcmZhY2UKKyAqIEB0aW1yOiBrX2l0aW1lciBwb2ludGVyIHRvIGJlIGRlbGV0ZWQKKyAqCisgKiBDYW5jZWxzIGFueSBwcm9ncmFtbWVkIGFsYXJtcyBmb3IgdGhlIGdpdmVuIHRpbWVyLgorICovCitzdGF0aWMgaW50IGFsYXJtX3RpbWVyX2RlbChzdHJ1Y3Qga19pdGltZXIgKnRpbXIpCit7CisJYWxhcm1fY2FuY2VsKCZ0aW1yLT5pdC5hbGFybXRpbWVyKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBhbGFybV90aW1lcl9zZXQgLSBwb3NpeCB0aW1lcl9zZXQgaW50ZXJmYWNlCisgKiBAdGltcjoga19pdGltZXIgcG9pbnRlciB0byBiZSBkZWxldGVkCisgKiBAZmxhZ3M6IHRpbWVyIGZsYWdzCisgKiBAbmV3X3NldHRpbmc6IGl0aW1lcnNwZWMgdG8gYmUgdXNlZAorICogQG9sZF9zZXR0aW5nOiBpdGltZXJzcGVjIGJlaW5nIHJlcGxhY2VkCisgKgorICogU2V0cyB0aGUgdGltZXIgdG8gbmV3X3NldHRpbmcsIGFuZCBzdGFydHMgdGhlIHRpbWVyLgorICovCitzdGF0aWMgaW50IGFsYXJtX3RpbWVyX3NldChzdHJ1Y3Qga19pdGltZXIgKnRpbXIsIGludCBmbGFncywKKwkJCQlzdHJ1Y3QgaXRpbWVyc3BlYyAqbmV3X3NldHRpbmcsCisJCQkJc3RydWN0IGl0aW1lcnNwZWMgKm9sZF9zZXR0aW5nKQoreworCS8qIFNhdmUgb2xkIHZhbHVlcyAqLworCW9sZF9zZXR0aW5nLT5pdF9pbnRlcnZhbCA9CisJCQlrdGltZV90b190aW1lc3BlYyh0aW1yLT5pdC5hbGFybXRpbWVyLnBlcmlvZCk7CisJb2xkX3NldHRpbmctPml0X3ZhbHVlID0KKwkJCWt0aW1lX3RvX3RpbWVzcGVjKHRpbXItPml0LmFsYXJtdGltZXIubm9kZS5leHBpcmVzKTsKKworCS8qIElmIHRoZSB0aW1lciB3YXMgYWxyZWFkeSBzZXQsIGNhbmNlbCBpdCAqLworCWFsYXJtX2NhbmNlbCgmdGltci0+aXQuYWxhcm10aW1lcik7CisKKwkvKiBzdGFydCB0aGUgdGltZXIgKi8KKwlhbGFybV9zdGFydCgmdGltci0+aXQuYWxhcm10aW1lciwKKwkJCXRpbWVzcGVjX3RvX2t0aW1lKG5ld19zZXR0aW5nLT5pdF92YWx1ZSksCisJCQl0aW1lc3BlY190b19rdGltZShuZXdfc2V0dGluZy0+aXRfaW50ZXJ2YWwpKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBhbGFybXRpbWVyX25zbGVlcF93YWtldXAgLSBXYWtldXAgZnVuY3Rpb24gZm9yIGFsYXJtX3RpbWVyX25zbGVlcAorICogQGFsYXJtOiBwdHIgdG8gYWxhcm0gdGhhdCBmaXJlZAorICoKKyAqIFdha2VzIHVwIHRoZSB0YXNrIHRoYXQgc2V0IHRoZSBhbGFybXRpbWVyCisgKi8KK3N0YXRpYyB2b2lkIGFsYXJtdGltZXJfbnNsZWVwX3dha2V1cChzdHJ1Y3QgYWxhcm0gKmFsYXJtKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKilhbGFybS0+ZGF0YTsKKworCWFsYXJtLT5kYXRhID0gTlVMTDsKKwlpZiAodGFzaykKKwkJd2FrZV91cF9wcm9jZXNzKHRhc2spOworfQorCisvKioKKyAqIGFsYXJtdGltZXJfZG9fbnNsZWVwIC0gSW50ZXJuYWwgYWxhcm10aW1lciBuc2xlZXAgaW1wbGVtZW50YXRpb24KKyAqIEBhbGFybTogcHRyIHRvIGFsYXJtdGltZXIKKyAqIEBhYnNleHA6IGFic29sdXRlIGV4cGlyYXRpb24gdGltZQorICoKKyAqIFNldHMgdGhlIGFsYXJtIHRpbWVyIGFuZCBzbGVlcHMgdW50aWwgaXQgaXMgZmlyZWQgb3IgaW50ZXJydXB0ZWQuCisgKi8KK3N0YXRpYyBpbnQgYWxhcm10aW1lcl9kb19uc2xlZXAoc3RydWN0IGFsYXJtICphbGFybSwga3RpbWVfdCBhYnNleHApCit7CisJYWxhcm0tPmRhdGEgPSAodm9pZCAqKWN1cnJlbnQ7CisJZG8geworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlhbGFybV9zdGFydChhbGFybSwgYWJzZXhwLCBrdGltZV9zZXQoMCwgMCkpOworCQlpZiAobGlrZWx5KGFsYXJtLT5kYXRhKSkKKwkJCXNjaGVkdWxlKCk7CisKKwkJYWxhcm1fY2FuY2VsKGFsYXJtKTsKKwl9IHdoaWxlIChhbGFybS0+ZGF0YSAmJiAhc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpOworCisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCisJcmV0dXJuIChhbGFybS0+ZGF0YSA9PSBOVUxMKTsKK30KKworCisvKioKKyAqIHVwZGF0ZV9ybXRwIC0gVXBkYXRlIHJlbWFpbmluZyB0aW1lc3BlYyB2YWx1ZQorICogQGV4cDogZXhwaXJhdGlvbiB0aW1lCisgKiBAdHlwZTogdGltZXIgdHlwZQorICogQHJtdHA6IHVzZXIgcG9pbnRlciB0byByZW1haW5pbmcgdGltZXBzZWMgdmFsdWUKKyAqCisgKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBmaWxscyBpbiBybXRwIHZhbHVlIHdpdGggdGltZSBiZXR3ZWVuCisgKiBub3cgYW5kIHRoZSBleHAgdmFsdWUKKyAqLworc3RhdGljIGludCB1cGRhdGVfcm10cChrdGltZV90IGV4cCwgZW51bSAgYWxhcm10aW1lcl90eXBlIHR5cGUsCisJCQlzdHJ1Y3QgdGltZXNwZWMgX191c2VyICpybXRwKQoreworCXN0cnVjdCB0aW1lc3BlYyBybXQ7CisJa3RpbWVfdCByZW07CisKKwlyZW0gPSBrdGltZV9zdWIoZXhwLCBhbGFybV9iYXNlc1t0eXBlXS5nZXR0aW1lKCkpOworCisJaWYgKHJlbS50djY0IDw9IDApCisJCXJldHVybiAwOworCXJtdCA9IGt0aW1lX3RvX3RpbWVzcGVjKHJlbSk7CisKKwlpZiAoY29weV90b191c2VyKHJtdHAsICZybXQsIHNpemVvZigqcm10cCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAxOworCit9CisKKy8qKgorICogYWxhcm1fdGltZXJfbnNsZWVwX3Jlc3RhcnQgLSByZXN0YXJ0YmxvY2sgYWxhcm10aW1lciBuc2xlZXAKKyAqIEByZXN0YXJ0OiBwdHIgdG8gcmVzdGFydCBibG9jaworICoKKyAqIEhhbmRsZXMgcmVzdGFydGVkIGNsb2NrX25hbm9zbGVlcCBjYWxscworICovCitzdGF0aWMgbG9uZyBfX3NjaGVkIGFsYXJtX3RpbWVyX25zbGVlcF9yZXN0YXJ0KHN0cnVjdCByZXN0YXJ0X2Jsb2NrICpyZXN0YXJ0KQoreworCWVudW0gIGFsYXJtdGltZXJfdHlwZSB0eXBlID0gcmVzdGFydC0+bmFub3NsZWVwLmluZGV4OworCWt0aW1lX3QgZXhwOworCXN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgICpybXRwOworCXN0cnVjdCBhbGFybSBhbGFybTsKKwlpbnQgcmV0ID0gMDsKKworCWV4cC50djY0ID0gcmVzdGFydC0+bmFub3NsZWVwLmV4cGlyZXM7CisJYWxhcm1faW5pdCgmYWxhcm0sIHR5cGUsIGFsYXJtdGltZXJfbnNsZWVwX3dha2V1cCk7CisKKwlpZiAoYWxhcm10aW1lcl9kb19uc2xlZXAoJmFsYXJtLCBleHApKQorCQlnb3RvIG91dDsKKworCWlmIChmcmVlemluZyhjdXJyZW50KSkKKwkJYWxhcm10aW1lcl9mcmVlemVyc2V0KGV4cCwgdHlwZSk7CisKKwlybXRwID0gcmVzdGFydC0+bmFub3NsZWVwLnJtdHA7CisJaWYgKHJtdHApIHsKKwkJcmV0ID0gdXBkYXRlX3JtdHAoZXhwLCB0eXBlLCBybXRwKTsKKwkJaWYgKHJldCA8PSAwKQorCQkJZ290byBvdXQ7CisJfQorCisKKwkvKiBUaGUgb3RoZXIgdmFsdWVzIGluIHJlc3RhcnQgYXJlIGFscmVhZHkgZmlsbGVkIGluICovCisJcmV0ID0gLUVSRVNUQVJUX1JFU1RBUlRCTE9DSzsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGFsYXJtX3RpbWVyX25zbGVlcCAtIGFsYXJtdGltZXIgbmFub3NsZWVwCisgKiBAd2hpY2hfY2xvY2s6IGNsb2NraWQKKyAqIEBmbGFnczogZGV0ZXJtaW5zIGFic3RpbWUgb3IgcmVsYXRpdmUKKyAqIEB0c3JlcTogcmVxdWVzdGVkIHNsZWVwIHRpbWUgKGFicyBvciByZWwpCisgKiBAcm10cDogcmVtYWluaW5nIHNsZWVwIHRpbWUgc2F2ZWQKKyAqCisgKiBIYW5kbGVzIGNsb2NrX25hbm9zbGVlcCBjYWxscyBhZ2FpbnN0IF9BTEFSTSBjbG9ja2lkcworICovCitzdGF0aWMgaW50IGFsYXJtX3RpbWVyX25zbGVlcChjb25zdCBjbG9ja2lkX3Qgd2hpY2hfY2xvY2ssIGludCBmbGFncywKKwkJICAgICBzdHJ1Y3QgdGltZXNwZWMgKnRzcmVxLCBzdHJ1Y3QgdGltZXNwZWMgX191c2VyICpybXRwKQoreworCWVudW0gIGFsYXJtdGltZXJfdHlwZSB0eXBlID0gY2xvY2syYWxhcm0od2hpY2hfY2xvY2spOworCXN0cnVjdCBhbGFybSBhbGFybTsKKwlrdGltZV90IGV4cDsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgcmVzdGFydF9ibG9jayAqcmVzdGFydDsKKworCWlmICghY2FwYWJsZShDQVBfV0FLRV9BTEFSTSkpCisJCXJldHVybiAtRVBFUk07CisKKwlhbGFybV9pbml0KCZhbGFybSwgdHlwZSwgYWxhcm10aW1lcl9uc2xlZXBfd2FrZXVwKTsKKworCWV4cCA9IHRpbWVzcGVjX3RvX2t0aW1lKCp0c3JlcSk7CisJLyogQ29udmVydCAoaWYgbmVjZXNzYXJ5KSB0byBhYnNvbHV0ZSB0aW1lICovCisJaWYgKGZsYWdzICE9IFRJTUVSX0FCU1RJTUUpIHsKKwkJa3RpbWVfdCBub3cgPSBhbGFybV9iYXNlc1t0eXBlXS5nZXR0aW1lKCk7CisJCWV4cCA9IGt0aW1lX2FkZChub3csIGV4cCk7CisJfQorCisJaWYgKGFsYXJtdGltZXJfZG9fbnNsZWVwKCZhbGFybSwgZXhwKSkKKwkJZ290byBvdXQ7CisKKwlpZiAoZnJlZXppbmcoY3VycmVudCkpCisJCWFsYXJtdGltZXJfZnJlZXplcnNldChleHAsIHR5cGUpOworCisJLyogYWJzIHRpbWVycyBkb24ndCBzZXQgcmVtYWluaW5nIHRpbWUgb3IgcmVzdGFydCAqLworCWlmIChmbGFncyA9PSBUSU1FUl9BQlNUSU1FKSB7CisJCXJldCA9IC1FUkVTVEFSVE5PSEFORDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHJtdHApIHsKKwkJcmV0ID0gdXBkYXRlX3JtdHAoZXhwLCB0eXBlLCBybXRwKTsKKwkJaWYgKHJldCA8PSAwKQorCQkJZ290byBvdXQ7CisJfQorCisJcmVzdGFydCA9ICZjdXJyZW50X3RocmVhZF9pbmZvKCktPnJlc3RhcnRfYmxvY2s7CisJcmVzdGFydC0+Zm4gPSBhbGFybV90aW1lcl9uc2xlZXBfcmVzdGFydDsKKwlyZXN0YXJ0LT5uYW5vc2xlZXAuaW5kZXggPSB0eXBlOworCXJlc3RhcnQtPm5hbm9zbGVlcC5leHBpcmVzID0gZXhwLnR2NjQ7CisJcmVzdGFydC0+bmFub3NsZWVwLnJtdHAgPSBybXRwOworCXJldCA9IC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0s7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisKKy8qIFN1c3BlbmQgaG9vayBzdHJ1Y3R1cmVzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgYWxhcm10aW1lcl9wbV9vcHMgPSB7CisJLnN1c3BlbmQgPSBhbGFybXRpbWVyX3N1c3BlbmQsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhbGFybXRpbWVyX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJhbGFybXRpbWVyIiwKKwkJLnBtID0gJmFsYXJtdGltZXJfcG1fb3BzLAorCX0KK307CisKKy8qKgorICogYWxhcm10aW1lcl9pbml0IC0gSW5pdGlhbGl6ZSBhbGFybSB0aW1lciBjb2RlCisgKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgYWxhcm0gYmFzZXMgYW5kIHJlZ2lzdGVycworICogdGhlIHBvc2l4IGNsb2NrIGlkcy4KKyAqLworc3RhdGljIGludCBfX2luaXQgYWxhcm10aW1lcl9pbml0KHZvaWQpCit7CisJaW50IGVycm9yID0gMDsKKwlpbnQgaTsKKwlzdHJ1Y3Qga19jbG9jayBhbGFybV9jbG9jayA9IHsKKwkJLmNsb2NrX2dldHJlcwk9IGFsYXJtX2Nsb2NrX2dldHJlcywKKwkJLmNsb2NrX2dldAk9IGFsYXJtX2Nsb2NrX2dldCwKKwkJLnRpbWVyX2NyZWF0ZQk9IGFsYXJtX3RpbWVyX2NyZWF0ZSwKKwkJLnRpbWVyX3NldAk9IGFsYXJtX3RpbWVyX3NldCwKKwkJLnRpbWVyX2RlbAk9IGFsYXJtX3RpbWVyX2RlbCwKKwkJLnRpbWVyX2dldAk9IGFsYXJtX3RpbWVyX2dldCwKKwkJLm5zbGVlcAkJPSBhbGFybV90aW1lcl9uc2xlZXAsCisJfTsKKworCXBvc2l4X3RpbWVyc19yZWdpc3Rlcl9jbG9jayhDTE9DS19SRUFMVElNRV9BTEFSTSwgJmFsYXJtX2Nsb2NrKTsKKwlwb3NpeF90aW1lcnNfcmVnaXN0ZXJfY2xvY2soQ0xPQ0tfQk9PVFRJTUVfQUxBUk0sICZhbGFybV9jbG9jayk7CisKKwkvKiBJbml0aWFsaXplIGFsYXJtIGJhc2VzICovCisJYWxhcm1fYmFzZXNbQUxBUk1fUkVBTFRJTUVdLmJhc2VfY2xvY2tpZCA9IENMT0NLX1JFQUxUSU1FOworCWFsYXJtX2Jhc2VzW0FMQVJNX1JFQUxUSU1FXS5nZXR0aW1lID0gJmt0aW1lX2dldF9yZWFsOworCWFsYXJtX2Jhc2VzW0FMQVJNX0JPT1RUSU1FXS5iYXNlX2Nsb2NraWQgPSBDTE9DS19CT09UVElNRTsKKwlhbGFybV9iYXNlc1tBTEFSTV9CT09UVElNRV0uZ2V0dGltZSA9ICZrdGltZV9nZXRfYm9vdHRpbWU7CisJZm9yIChpID0gMDsgaSA8IEFMQVJNX05VTVRZUEU7IGkrKykgeworCQl0aW1lcnF1ZXVlX2luaXRfaGVhZCgmYWxhcm1fYmFzZXNbaV0udGltZXJxdWV1ZSk7CisJCXNwaW5fbG9ja19pbml0KCZhbGFybV9iYXNlc1tpXS5sb2NrKTsKKwkJaHJ0aW1lcl9pbml0KCZhbGFybV9iYXNlc1tpXS50aW1lciwKKwkJCQlhbGFybV9iYXNlc1tpXS5iYXNlX2Nsb2NraWQsCisJCQkJSFJUSU1FUl9NT0RFX0FCUyk7CisJCWFsYXJtX2Jhc2VzW2ldLnRpbWVyLmZ1bmN0aW9uID0gYWxhcm10aW1lcl9maXJlZDsKKwl9CisJZXJyb3IgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFsYXJtdGltZXJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJhbGFybXRpbWVyIiwgLTEsIE5VTEwsIDApOworCisJcmV0dXJuIGVycm9yOworfQorZGV2aWNlX2luaXRjYWxsKGFsYXJtdGltZXJfaW5pdCk7CisKKyNpZmRlZiBDT05GSUdfUlRDX0NMQVNTCisvKioKKyAqIGhhc193YWtlYWxhcm0gLSBjaGVjayBydGMgZGV2aWNlIGhhcyB3YWtlYWxhcm0gYWJpbGl0eQorICogQGRldjogY3VycmVudCBkZXZpY2UKKyAqIEBuYW1lX3B0cjogbmFtZSB0byBiZSByZXR1cm5lZAorICoKKyAqIFRoaXMgaGVscGVyIGZ1bmN0aW9uIGNoZWNrcyB0byBzZWUgaWYgdGhlIHJ0YyBkZXZpY2UgY2FuIHdha2UKKyAqIGZyb20gc3VzcGVuZC4KKyAqLworc3RhdGljIGludCBfX2luaXQgaGFzX3dha2VhbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKm5hbWVfcHRyKQoreworCXN0cnVjdCBydGNfZGV2aWNlICpjYW5kaWRhdGUgPSB0b19ydGNfZGV2aWNlKGRldik7CisKKwlpZiAoIWNhbmRpZGF0ZS0+b3BzLT5zZXRfYWxhcm0pCisJCXJldHVybiAwOworCWlmICghZGV2aWNlX21heV93YWtldXAoY2FuZGlkYXRlLT5kZXYucGFyZW50KSkKKwkJcmV0dXJuIDA7CisKKwkqKGNvbnN0IGNoYXIgKiopbmFtZV9wdHIgPSBkZXZfbmFtZShkZXYpOworCXJldHVybiAxOworfQorCisvKioKKyAqIGFsYXJtdGltZXJfaW5pdF9sYXRlIC0gTGF0ZSBpbml0aWFsaXppbmcgb2YgYWxhcm10aW1lciBjb2RlCisgKgorICogVGhpcyBmdW5jdGlvbiBsb2NhdGVzIGEgcnRjIGRldmljZSB0byB1c2UgZm9yIHdha2VhbGFybXMuCisgKiBSdW4gYXMgbGF0ZV9pbml0Y2FsbCB0byBtYWtlIHN1cmUgcnRjIGRldmljZXMgaGF2ZSBiZWVuCisgKiByZWdpc3RlcmVkLgorICovCitzdGF0aWMgaW50IF9faW5pdCBhbGFybXRpbWVyX2luaXRfbGF0ZSh2b2lkKQoreworCWNoYXIgKnN0cjsKKworCS8qIEZpbmQgYW4gcnRjIGRldmljZSBhbmQgaW5pdCB0aGUgcnRjX3RpbWVyICovCisJY2xhc3NfZmluZF9kZXZpY2UocnRjX2NsYXNzLCBOVUxMLCAmc3RyLCBoYXNfd2FrZWFsYXJtKTsKKwlpZiAoc3RyKQorCQlydGNkZXYgPSBydGNfY2xhc3Nfb3BlbihzdHIpOworCWlmICghcnRjZGV2KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vIFJUQyBkZXZpY2UgZm91bmQsIEFMQVJNIHRpbWVycyB3aWxsIgorCQkJIiBub3Qgd2FrZSBmcm9tIHN1c3BlbmQiKTsKKwl9CisJcnRjX3RpbWVyX2luaXQoJnJ0Y3RpbWVyLCBOVUxMLCBOVUxMKTsKKworCXJldHVybiAwOworfQorI2Vsc2UKK3N0YXRpYyBpbnQgX19pbml0IGFsYXJtdGltZXJfaW5pdF9sYXRlKHZvaWQpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiS2VybmVsIG5vdCBidWlsdCB3aXRoIFJUQyBzdXBwb3J0LCBBTEFSTSB0aW1lcnMiCisJCSIgd2lsbCBub3Qgd2FrZSBmcm9tIHN1c3BlbmQiKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorbGF0ZV9pbml0Y2FsbChhbGFybXRpbWVyX2luaXRfbGF0ZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jIGIva2VybmVsL3RpbWUvY2xvY2tldmVudHMuYwppbmRleCAwZDc0YjliLi5jMDI3ZDRmIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jCisrKyBiL2tlcm5lbC90aW1lL2Nsb2NrZXZlbnRzLmMKQEAgLTE5NCw2ICsxOTQsNzAgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSk7CiAKK3N0YXRpYyB2b2lkIGNsb2NrZXZlbnRzX2NvbmZpZyhzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYsCisJCQkgICAgICAgdTMyIGZyZXEpCit7CisJdTY0IHNlYzsKKworCWlmICghKGRldi0+ZmVhdHVyZXMgJiBDTE9DS19FVlRfRkVBVF9PTkVTSE9UKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNlY29uZHMgd2UgY2FuIHNsZWVwLiBMaW1pdAorCSAqIHRvIDEwIG1pbnV0ZXMgZm9yIGhhcmR3YXJlIHdoaWNoIGNhbiBwcm9ncmFtIG1vcmUgdGhhbgorCSAqIDMyYml0IHRpY2tzIHNvIHdlIHN0aWxsIGdldCByZWFzb25hYmxlIGNvbnZlcnNpb24gdmFsdWVzLgorCSAqLworCXNlYyA9IGRldi0+bWF4X2RlbHRhX3RpY2tzOworCWRvX2RpdihzZWMsIGZyZXEpOworCWlmICghc2VjKQorCQlzZWMgPSAxOworCWVsc2UgaWYgKHNlYyA+IDYwMCAmJiBkZXYtPm1heF9kZWx0YV90aWNrcyA+IFVJTlRfTUFYKQorCQlzZWMgPSA2MDA7CisKKwljbG9ja2V2ZW50c19jYWxjX211bHRfc2hpZnQoZGV2LCBmcmVxLCBzZWMpOworCWRldi0+bWluX2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucyhkZXYtPm1pbl9kZWx0YV90aWNrcywgZGV2KTsKKwlkZXYtPm1heF9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoZGV2LT5tYXhfZGVsdGFfdGlja3MsIGRldik7Cit9CisKKy8qKgorICogY2xvY2tldmVudHNfY29uZmlnX2FuZF9yZWdpc3RlciAtIENvbmZpZ3VyZSBhbmQgcmVnaXN0ZXIgYSBjbG9jayBldmVudCBkZXZpY2UKKyAqIEBkZXY6CWRldmljZSB0byByZWdpc3RlcgorICogQGZyZXE6CVRoZSBjbG9jayBmcmVxdWVuY3kKKyAqIEBtaW5fZGVsdGE6CVRoZSBtaW5pbXVtIGNsb2NrIHRpY2tzIHRvIHByb2dyYW0gaW4gb25lc2hvdCBtb2RlCisgKiBAbWF4X2RlbHRhOglUaGUgbWF4aW11bSBjbG9jayB0aWNrcyB0byBwcm9ncmFtIGluIG9uZXNob3QgbW9kZQorICoKKyAqIG1pbi9tYXhfZGVsdGEgY2FuIGJlIDAgZm9yIGRldmljZXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgb25lc2hvdCBtb2RlLgorICovCit2b2lkIGNsb2NrZXZlbnRzX2NvbmZpZ19hbmRfcmVnaXN0ZXIoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2LAorCQkJCSAgICAgdTMyIGZyZXEsIHVuc2lnbmVkIGxvbmcgbWluX2RlbHRhLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBtYXhfZGVsdGEpCit7CisJZGV2LT5taW5fZGVsdGFfdGlja3MgPSBtaW5fZGVsdGE7CisJZGV2LT5tYXhfZGVsdGFfdGlja3MgPSBtYXhfZGVsdGE7CisJY2xvY2tldmVudHNfY29uZmlnKGRldiwgZnJlcSk7CisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGRldik7Cit9CisKKy8qKgorICogY2xvY2tldmVudHNfdXBkYXRlX2ZyZXEgLSBVcGRhdGUgZnJlcXVlbmN5IGFuZCByZXByb2dyYW0gYSBjbG9jayBldmVudCBkZXZpY2UuCisgKiBAZGV2OglkZXZpY2UgdG8gbW9kaWZ5CisgKiBAZnJlcToJbmV3IGRldmljZSBmcmVxdWVuY3kKKyAqCisgKiBSZWNvbmZpZ3VyZSBhbmQgcmVwcm9ncmFtIGEgY2xvY2sgZXZlbnQgZGV2aWNlIGluIG9uZXNob3QKKyAqIG1vZGUuIE11c3QgYmUgY2FsbGVkIG9uIHRoZSBjcHUgZm9yIHdoaWNoIHRoZSBkZXZpY2UgZGVsaXZlcnMgcGVyCisgKiBjcHUgdGltZXIgZXZlbnRzIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCEgIFJldHVybnMgMCBvbiBzdWNjZXNzLAorICogLUVUSU1FIHdoZW4gdGhlIGV2ZW50IGlzIGluIHRoZSBwYXN0LgorICovCitpbnQgY2xvY2tldmVudHNfdXBkYXRlX2ZyZXEoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2LCB1MzIgZnJlcSkKK3sKKwljbG9ja2V2ZW50c19jb25maWcoZGV2LCBmcmVxKTsKKworCWlmIChkZXYtPm1vZGUgIT0gQ0xPQ0tfRVZUX01PREVfT05FU0hPVCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gY2xvY2tldmVudHNfcHJvZ3JhbV9ldmVudChkZXYsIGRldi0+bmV4dF9ldmVudCwga3RpbWVfZ2V0KCkpOworfQorCiAvKgogICogTm9vcCBoYW5kbGVyIHdoZW4gd2Ugc2h1dCBkb3duIGFuIGV2ZW50IGRldmljZQogICovCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jIGIva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYwppbmRleCA2NTE5Y2Y2Li4xYzk1ZmQ2IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCisrKyBiL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKQEAgLTYyNiwxOSArNjI2LDYgQEAKIAlsaXN0X2FkZCgmY3MtPmxpc3QsIGVudHJ5KTsKIH0KIAotCi0vKgotICogTWF4aW11bSB0aW1lIHdlIGV4cGVjdCB0byBnbyBiZXR3ZWVuIHRpY2tzLiBUaGlzIGluY2x1ZGVzIGlkbGUKLSAqIHRpY2tsZXNzIHRpbWUuIEl0IHByb3ZpZGVzIHRoZSB0cmFkZSBvZmYgYmV0d2VlbiBzZWxlY3RpbmcgYQotICogbXVsdC9zaGlmdCBwYWlyIHRoYXQgaXMgdmVyeSBwcmVjaXNlIGJ1dCBjYW4gb25seSBoYW5kbGUgYSBzaG9ydAotICogcGVyaW9kIG9mIHRpbWUsIHZzLiBhIG11bHQvc2hpZnQgcGFpciB0aGF0IGNhbiBoYW5kbGUgbG9uZyBwZXJpb2RzCi0gKiBvZiB0aW1lIGJ1dCBpc24ndCBhcyBwcmVjaXNlLgotICoKLSAqIFRoaXMgaXMgYSBzdWJzeXN0ZW0gY29uc3RhbnQsIGFuZCBhY3R1YWwgaGFyZHdhcmUgbGltaXRhdGlvbnMKLSAqIG1heSBvdmVycmlkZSBpdCAoaWU6IGNsb2Nrc291cmNlcyB0aGF0IHdyYXAgZXZlcnkgMyBzZWNvbmRzKS4KLSAqLwotI2RlZmluZSBNQVhfVVBEQVRFX0xFTkdUSCA1IC8qIFNlY29uZHMgKi8KLQogLyoqCiAgKiBfX2Nsb2Nrc291cmNlX3VwZGF0ZWZyZXFfc2NhbGUgLSBVc2VkIHVwZGF0ZSBjbG9ja3NvdXJjZSB3aXRoIG5ldyBmcmVxCiAgKiBAdDoJCWNsb2Nrc291cmNlIHRvIGJlIHJlZ2lzdGVyZWQKQEAgLTY1MiwxNSArNjM5LDI4IEBACiAgKi8KIHZvaWQgX19jbG9ja3NvdXJjZV91cGRhdGVmcmVxX3NjYWxlKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MsIHUzMiBzY2FsZSwgdTMyIGZyZXEpCiB7CisJdTY0IHNlYzsKKwogCS8qCi0JICogSWRlYWxseSB3ZSB3YW50IHRvIHVzZSAgc29tZSBvZiB0aGUgbGltaXRzIHVzZWQgaW4KLQkgKiBjbG9ja3NvdXJjZV9tYXhfZGVmZXJtZW50LCB0byBwcm92aWRlIGEgbW9yZSBpbmZvcm1lZAotCSAqIE1BWF9VUERBVEVfTEVOR1RILiBCdXQgZm9yIG5vdyB0aGlzIGp1c3QgZ2V0cyB0aGUKLQkgKiByZWdpc3RlciBpbnRlcmZhY2Ugd29ya2luZyBwcm9wZXJseS4KKwkgKiBDYWxjIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzZWNvbmRzIHdoaWNoIHdlIGNhbiBydW4gYmVmb3JlCisJICogd3JhcHBpbmcgYXJvdW5kLiBGb3IgY2xvY2tzb3VyY2VzIHdoaWNoIGhhdmUgYSBtYXNrID4gMzJiaXQKKwkgKiB3ZSBuZWVkIHRvIGxpbWl0IHRoZSBtYXggc2xlZXAgdGltZSB0byBoYXZlIGEgZ29vZAorCSAqIGNvbnZlcnNpb24gcHJlY2lzaW9uLiAxMCBtaW51dGVzIGlzIHN0aWxsIGEgcmVhc29uYWJsZQorCSAqIGFtb3VudC4gVGhhdCByZXN1bHRzIGluIGEgc2hpZnQgdmFsdWUgb2YgMjQgZm9yIGEKKwkgKiBjbG9ja3NvdXJjZSB3aXRoIG1hc2sgPj0gNDBiaXQgYW5kIGYgPj0gNEdIei4gVGhhdCBtYXBzIHRvCisJICogfiAwLjA2cHBtIGdyYW51bGFyaXR5IGZvciBOVFAuIFdlIGFwcGx5IHRoZSBzYW1lIDEyLjUlCisJICogbWFyZ2luIGFzIHdlIGRvIGluIGNsb2Nrc291cmNlX21heF9kZWZlcm1lbnQoKQogCSAqLworCXNlYyA9IChjcy0+bWFzayAtIChjcy0+bWFzayA+PiA1KSk7CisJZG9fZGl2KHNlYywgZnJlcSk7CisJZG9fZGl2KHNlYywgc2NhbGUpOworCWlmICghc2VjKQorCQlzZWMgPSAxOworCWVsc2UgaWYgKHNlYyA+IDYwMCAmJiBjcy0+bWFzayA+IFVJTlRfTUFYKQorCQlzZWMgPSA2MDA7CisKIAljbG9ja3NfY2FsY19tdWx0X3NoaWZ0KCZjcy0+bXVsdCwgJmNzLT5zaGlmdCwgZnJlcSwKLQkJCQkgICAgICBOU0VDX1BFUl9TRUMvc2NhbGUsCi0JCQkJICAgICAgTUFYX1VQREFURV9MRU5HVEgqc2NhbGUpOworCQkJICAgICAgIE5TRUNfUEVSX1NFQyAvIHNjYWxlLCBzZWMgKiBzY2FsZSk7CiAJY3MtPm1heF9pZGxlX25zID0gY2xvY2tzb3VyY2VfbWF4X2RlZmVybWVudChjcyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX2Nsb2Nrc291cmNlX3VwZGF0ZWZyZXFfc2NhbGUpOwpAQCAtNjg1LDggKzY4NSw4IEBACiAJLyogQWRkIGNsb2Nrc291cmNlIHRvIHRoZSBjbGNva3NvdXJjZSBsaXN0ICovCiAJbXV0ZXhfbG9jaygmY2xvY2tzb3VyY2VfbXV0ZXgpOwogCWNsb2Nrc291cmNlX2VucXVldWUoY3MpOwotCWNsb2Nrc291cmNlX3NlbGVjdCgpOwogCWNsb2Nrc291cmNlX2VucXVldWVfd2F0Y2hkb2coY3MpOworCWNsb2Nrc291cmNlX3NlbGVjdCgpOwogCW11dGV4X3VubG9jaygmY2xvY2tzb3VyY2VfbXV0ZXgpOwogCXJldHVybiAwOwogfQpAQCAtNzA2LDggKzcwNiw4IEBACiAKIAltdXRleF9sb2NrKCZjbG9ja3NvdXJjZV9tdXRleCk7CiAJY2xvY2tzb3VyY2VfZW5xdWV1ZShjcyk7Ci0JY2xvY2tzb3VyY2Vfc2VsZWN0KCk7CiAJY2xvY2tzb3VyY2VfZW5xdWV1ZV93YXRjaGRvZyhjcyk7CisJY2xvY2tzb3VyY2Vfc2VsZWN0KCk7CiAJbXV0ZXhfdW5sb2NrKCZjbG9ja3NvdXJjZV9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aWNrLWJyb2FkY2FzdC5jIGIva2VybmVsL3RpbWUvdGljay1icm9hZGNhc3QuYwppbmRleCBkYTgwMGZmLi43MjNjNzYzIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aWNrLWJyb2FkY2FzdC5jCisrKyBiL2tlcm5lbC90aW1lL3RpY2stYnJvYWRjYXN0LmMKQEAgLTUyMiwxMCArNTIyLDExIEBACiAgKi8KIHZvaWQgdGlja19icm9hZGNhc3Rfc2V0dXBfb25lc2hvdChzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpiYykKIHsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCiAJLyogU2V0IGl0IHVwIG9ubHkgb25jZSAhICovCiAJaWYgKGJjLT5ldmVudF9oYW5kbGVyICE9IHRpY2tfaGFuZGxlX29uZXNob3RfYnJvYWRjYXN0KSB7CiAJCWludCB3YXNfcGVyaW9kaWMgPSBiYy0+bW9kZSA9PSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzsKLQkJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCQliYy0+ZXZlbnRfaGFuZGxlciA9IHRpY2tfaGFuZGxlX29uZXNob3RfYnJvYWRjYXN0OwogCQljbG9ja2V2ZW50c19zZXRfbW9kZShiYywgQ0xPQ0tfRVZUX01PREVfT05FU0hPVCk7CkBAIC01NTEsNiArNTUyLDE1IEBACiAJCQl0aWNrX2Jyb2FkY2FzdF9zZXRfZXZlbnQodGlja19uZXh0X3BlcmlvZCwgMSk7CiAJCX0gZWxzZQogCQkJYmMtPm5leHRfZXZlbnQudHY2NCA9IEtUSU1FX01BWDsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBUaGUgZmlyc3QgY3B1IHdoaWNoIHN3aXRjaGVzIHRvIG9uZXNob3QgbW9kZSBzZXRzCisJCSAqIHRoZSBiaXQgZm9yIGFsbCBvdGhlciBjcHVzIHdoaWNoIGFyZSBpbiB0aGUgZ2VuZXJhbAorCQkgKiAocGVyaW9kaWMpIGJyb2FkY2FzdCBtYXNrLiBTbyB0aGUgYml0IGlzIHNldCBhbmQKKwkJICogd291bGQgcHJldmVudCB0aGUgZmlyc3QgYnJvYWRjYXN0IGVudGVyIGFmdGVyIHRoaXMKKwkJICogdG8gcHJvZ3JhbSB0aGUgYmMgZGV2aWNlLgorCQkgKi8KKwkJdGlja19icm9hZGNhc3RfY2xlYXJfb25lc2hvdChjcHUpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYyBiL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKaW5kZXggOGFkNWQ1Ny4uOGU2YTA1YSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYworKysgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCkBAIC01OTYsNiArNTk2LDU4IEBACiBzdGF0aWMgc3RydWN0IHRpbWVzcGVjIHRpbWVrZWVwaW5nX3N1c3BlbmRfdGltZTsKIAogLyoqCisgKiBfX3RpbWVrZWVwaW5nX2luamVjdF9zbGVlcHRpbWUgLSBJbnRlcm5hbCBmdW5jdGlvbiB0byBhZGQgc2xlZXAgaW50ZXJ2YWwKKyAqIEBkZWx0YTogcG9pbnRlciB0byBhIHRpbWVzcGVjIGRlbHRhIHZhbHVlCisgKgorICogVGFrZXMgYSB0aW1lc3BlYyBvZmZzZXQgbWVhc3VyaW5nIGEgc3VzcGVuZCBpbnRlcnZhbCBhbmQgcHJvcGVybHkKKyAqIGFkZHMgdGhlIHNsZWVwIG9mZnNldCB0byB0aGUgdGltZWtlZXBpbmcgdmFyaWFibGVzLgorICovCitzdGF0aWMgdm9pZCBfX3RpbWVrZWVwaW5nX2luamVjdF9zbGVlcHRpbWUoc3RydWN0IHRpbWVzcGVjICpkZWx0YSkKK3sKKwl4dGltZSA9IHRpbWVzcGVjX2FkZCh4dGltZSwgKmRlbHRhKTsKKwl3YWxsX3RvX21vbm90b25pYyA9IHRpbWVzcGVjX3N1Yih3YWxsX3RvX21vbm90b25pYywgKmRlbHRhKTsKKwl0b3RhbF9zbGVlcF90aW1lID0gdGltZXNwZWNfYWRkKHRvdGFsX3NsZWVwX3RpbWUsICpkZWx0YSk7Cit9CisKKworLyoqCisgKiB0aW1la2VlcGluZ19pbmplY3Rfc2xlZXB0aW1lIC0gQWRkcyBzdXNwZW5kIGludGVydmFsIHRvIHRpbWVla2VlcGluZyB2YWx1ZXMKKyAqIEBkZWx0YTogcG9pbnRlciB0byBhIHRpbWVzcGVjIGRlbHRhIHZhbHVlCisgKgorICogVGhpcyBob29rIGlzIGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgY2Fubm90IHN1cHBvcnQgcmVhZF9wZXJzaXN0ZW50X2Nsb2NrCisgKiBiZWNhdXNlIHRoZWlyIFJUQy9wZXJzaXN0ZW50IGNsb2NrIGlzIG9ubHkgYWNjZXNzaWJsZSB3aGVuIGlycXMgYXJlIGVuYWJsZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgcnRjX3Jlc3VtZSgpLCBhbmQgYWxsb3dzCisgKiBhIHN1c3BlbmQgb2Zmc2V0IHRvIGJlIGluamVjdGVkIGludG8gdGhlIHRpbWVrZWVwaW5nIHZhbHVlcy4KKyAqLwordm9pZCB0aW1la2VlcGluZ19pbmplY3Rfc2xlZXB0aW1lKHN0cnVjdCB0aW1lc3BlYyAqZGVsdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CisKKwkvKiBNYWtlIHN1cmUgd2UgZG9uJ3Qgc2V0IHRoZSBjbG9jayB0d2ljZSAqLworCXJlYWRfcGVyc2lzdGVudF9jbG9jaygmdHMpOworCWlmICghKHRzLnR2X3NlYyA9PSAwICYmIHRzLnR2X25zZWMgPT0gMCkpCisJCXJldHVybjsKKworCXdyaXRlX3NlcWxvY2tfaXJxc2F2ZSgmeHRpbWVfbG9jaywgZmxhZ3MpOworCXRpbWVrZWVwaW5nX2ZvcndhcmRfbm93KCk7CisKKwlfX3RpbWVrZWVwaW5nX2luamVjdF9zbGVlcHRpbWUoZGVsdGEpOworCisJdGltZWtlZXBlci5udHBfZXJyb3IgPSAwOworCW50cF9jbGVhcigpOworCXVwZGF0ZV92c3lzY2FsbCgmeHRpbWUsICZ3YWxsX3RvX21vbm90b25pYywgdGltZWtlZXBlci5jbG9jaywKKwkJCQl0aW1la2VlcGVyLm11bHQpOworCisJd3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKKworCS8qIHNpZ25hbCBocnRpbWVycyBhYm91dCB0aW1lIGNoYW5nZSAqLworCWNsb2NrX3dhc19zZXQoKTsKK30KKworCisvKioKICAqIHRpbWVrZWVwaW5nX3Jlc3VtZSAtIFJlc3VtZXMgdGhlIGdlbmVyaWMgdGltZWtlZXBpbmcgc3Vic3lzdGVtLgogICoKICAqIFRoaXMgaXMgZm9yIHRoZSBnZW5lcmljIGNsb2Nrc291cmNlIHRpbWVrZWVwaW5nLgpAQCAtNjE1LDkgKzY2Nyw3IEBACiAKIAlpZiAodGltZXNwZWNfY29tcGFyZSgmdHMsICZ0aW1la2VlcGluZ19zdXNwZW5kX3RpbWUpID4gMCkgewogCQl0cyA9IHRpbWVzcGVjX3N1Yih0cywgdGltZWtlZXBpbmdfc3VzcGVuZF90aW1lKTsKLQkJeHRpbWUgPSB0aW1lc3BlY19hZGQoeHRpbWUsIHRzKTsKLQkJd2FsbF90b19tb25vdG9uaWMgPSB0aW1lc3BlY19zdWIod2FsbF90b19tb25vdG9uaWMsIHRzKTsKLQkJdG90YWxfc2xlZXBfdGltZSA9IHRpbWVzcGVjX2FkZCh0b3RhbF9zbGVlcF90aW1lLCB0cyk7CisJCV9fdGltZWtlZXBpbmdfaW5qZWN0X3NsZWVwdGltZSgmdHMpOwogCX0KIAkvKiByZS1iYXNlIHRoZSBsYXN0IGN5Y2xlIHZhbHVlICovCiAJdGltZWtlZXBlci5jbG9jay0+Y3ljbGVfbGFzdCA9IHRpbWVrZWVwZXIuY2xvY2stPnJlYWQodGltZWtlZXBlci5jbG9jayk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvS2NvbmZpZyBiL2tlcm5lbC90cmFjZS9LY29uZmlnCmluZGV4IDYxZDdkNTlmLi4yYWQzOWU1IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvS2NvbmZpZworKysgYi9rZXJuZWwvdHJhY2UvS2NvbmZpZwpAQCAtMTQxLDcgKzE0MSw3IEBACiBjb25maWcgRlVOQ1RJT05fVFJBQ0VSCiAJYm9vbCAiS2VybmVsIEZ1bmN0aW9uIFRyYWNlciIKIAlkZXBlbmRzIG9uIEhBVkVfRlVOQ1RJT05fVFJBQ0VSCi0Jc2VsZWN0IEZSQU1FX1BPSU5URVIgaWYgIUFSTV9VTldJTkQgJiYgIVMzOTAKKwlzZWxlY3QgRlJBTUVfUE9JTlRFUiBpZiAhQVJNX1VOV0lORCAmJiAhUzM5MCAmJiAhTUlDUk9CTEFaRQogCXNlbGVjdCBLQUxMU1lNUwogCXNlbGVjdCBHRU5FUklDX1RSQUNFUgogCXNlbGVjdCBDT05URVhUX1NXSVRDSF9UUkFDRVIKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9mdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9mdHJhY2UuYwppbmRleCBlZTI0ZmExLi5kMDE3YzJjIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL2Z0cmFjZS5jCkBAIC0zOSwyMCArMzksMjYgQEAKICNpbmNsdWRlICJ0cmFjZV9zdGF0LmgiCiAKICNkZWZpbmUgRlRSQUNFX1dBUk5fT04oY29uZCkJCQlcCi0JZG8gewkJCQkJXAotCQlpZiAoV0FSTl9PTihjb25kKSkJCVwKKwkoewkJCQkJXAorCQlpbnQgX19fciA9IGNvbmQ7CQlcCisJCWlmIChXQVJOX09OKF9fX3IpKQkJXAogCQkJZnRyYWNlX2tpbGwoKTsJCVwKLQl9IHdoaWxlICgwKQorCQlfX19yOwkJCQlcCisJfSkKIAogI2RlZmluZSBGVFJBQ0VfV0FSTl9PTl9PTkNFKGNvbmQpCQlcCi0JZG8gewkJCQkJXAotCQlpZiAoV0FSTl9PTl9PTkNFKGNvbmQpKQkJXAorCSh7CQkJCQlcCisJCWludCBfX19yID0gY29uZDsJCVwKKwkJaWYgKFdBUk5fT05fT05DRShfX19yKSkJCVwKIAkJCWZ0cmFjZV9raWxsKCk7CQlcCi0JfSB3aGlsZSAoMCkKKwkJX19fcjsJCQkJXAorCX0pCiAKIC8qIGhhc2ggYml0cyBmb3Igc3BlY2lmaWMgZnVuY3Rpb24gc2VsZWN0aW9uICovCiAjZGVmaW5lIEZUUkFDRV9IQVNIX0JJVFMgNwogI2RlZmluZSBGVFJBQ0VfRlVOQ19IQVNIU0laRSAoMSA8PCBGVFJBQ0VfSEFTSF9CSVRTKQorI2RlZmluZSBGVFJBQ0VfSEFTSF9ERUZBVUxUX0JJVFMgMTAKKyNkZWZpbmUgRlRSQUNFX0hBU0hfTUFYX0JJVFMgMTIKIAogLyogZnRyYWNlX2VuYWJsZWQgaXMgYSBtZXRob2QgdG8gdHVybiBmdHJhY2Ugb24gb3Igb2ZmICovCiBpbnQgZnRyYWNlX2VuYWJsZWQgX19yZWFkX21vc3RseTsKQEAgLTgxLDIzICs4NywyOSBAQAogCS5mdW5jCQk9IGZ0cmFjZV9zdHViLAogfTsKIAotc3RhdGljIHN0cnVjdCBmdHJhY2Vfb3BzICpmdHJhY2VfbGlzdCBfX3JlYWRfbW9zdGx5ID0gJmZ0cmFjZV9saXN0X2VuZDsKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX29wcyAqZnRyYWNlX2dsb2JhbF9saXN0IF9fcmVhZF9tb3N0bHkgPSAmZnRyYWNlX2xpc3RfZW5kOworc3RhdGljIHN0cnVjdCBmdHJhY2Vfb3BzICpmdHJhY2Vfb3BzX2xpc3QgX19yZWFkX21vc3RseSA9ICZmdHJhY2VfbGlzdF9lbmQ7CiBmdHJhY2VfZnVuY190IGZ0cmFjZV90cmFjZV9mdW5jdGlvbiBfX3JlYWRfbW9zdGx5ID0gZnRyYWNlX3N0dWI7CiBmdHJhY2VfZnVuY190IF9fZnRyYWNlX3RyYWNlX2Z1bmN0aW9uIF9fcmVhZF9tb3N0bHkgPSBmdHJhY2Vfc3R1YjsKIGZ0cmFjZV9mdW5jX3QgZnRyYWNlX3BpZF9mdW5jdGlvbiBfX3JlYWRfbW9zdGx5ID0gZnRyYWNlX3N0dWI7CitzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMgZ2xvYmFsX29wczsKKworc3RhdGljIHZvaWQKK2Z0cmFjZV9vcHNfbGlzdF9mdW5jKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwKTsKIAogLyoKLSAqIFRyYXZlcnNlIHRoZSBmdHJhY2VfbGlzdCwgaW52b2tpbmcgYWxsIGVudHJpZXMuICBUaGUgcmVhc29uIHRoYXQgd2UKKyAqIFRyYXZlcnNlIHRoZSBmdHJhY2VfZ2xvYmFsX2xpc3QsIGludm9raW5nIGFsbCBlbnRyaWVzLiAgVGhlIHJlYXNvbiB0aGF0IHdlCiAgKiBjYW4gdXNlIHJjdV9kZXJlZmVyZW5jZV9yYXcoKSBpcyB0aGF0IGVsZW1lbnRzIHJlbW92ZWQgZnJvbSB0aGlzIGxpc3QKICAqIGFyZSBzaW1wbHkgbGVha2VkLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIGludGVyYWN0IHdpdGggYSBncmFjZS1wZXJpb2QKICAqIG1lY2hhbmlzbS4gIFRoZSByY3VfZGVyZWZlcmVuY2VfcmF3KCkgY2FsbHMgYXJlIG5lZWRlZCB0byBoYW5kbGUKLSAqIGNvbmN1cnJlbnQgaW5zZXJ0aW9ucyBpbnRvIHRoZSBmdHJhY2VfbGlzdC4KKyAqIGNvbmN1cnJlbnQgaW5zZXJ0aW9ucyBpbnRvIHRoZSBmdHJhY2VfZ2xvYmFsX2xpc3QuCiAgKgogICogU2lsbHkgQWxwaGEgYW5kIHNpbGx5IHBvaW50ZXItc3BlY3VsYXRpb24gY29tcGlsZXIgb3B0aW1pemF0aW9ucyEKICAqLwotc3RhdGljIHZvaWQgZnRyYWNlX2xpc3RfZnVuYyh1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCkKK3N0YXRpYyB2b2lkIGZ0cmFjZV9nbG9iYWxfbGlzdF9mdW5jKHVuc2lnbmVkIGxvbmcgaXAsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwKQogewotCXN0cnVjdCBmdHJhY2Vfb3BzICpvcCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoZnRyYWNlX2xpc3QpOyAvKnNlZSBhYm92ZSovCisJc3RydWN0IGZ0cmFjZV9vcHMgKm9wID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhmdHJhY2VfZ2xvYmFsX2xpc3QpOyAvKnNlZSBhYm92ZSovCiAKIAl3aGlsZSAob3AgIT0gJmZ0cmFjZV9saXN0X2VuZCkgewogCQlvcC0+ZnVuYyhpcCwgcGFyZW50X2lwKTsKQEAgLTE0Nyw0NiArMTU5LDY5IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBfX3JlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbihzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKQorc3RhdGljIHZvaWQgdXBkYXRlX2dsb2JhbF9vcHModm9pZCkKIHsKLQlvcHMtPm5leHQgPSBmdHJhY2VfbGlzdDsKKwlmdHJhY2VfZnVuY190IGZ1bmM7CisKIAkvKgotCSAqIFdlIGFyZSBlbnRlcmluZyBvcHMgaW50byB0aGUgZnRyYWNlX2xpc3QgYnV0IGFub3RoZXIKLQkgKiBDUFUgbWlnaHQgYmUgd2Fsa2luZyB0aGF0IGxpc3QuIFdlIG5lZWQgdG8gbWFrZSBzdXJlCi0JICogdGhlIG9wcy0+bmV4dCBwb2ludGVyIGlzIHZhbGlkIGJlZm9yZSBhbm90aGVyIENQVSBzZWVzCi0JICogdGhlIG9wcyBwb2ludGVyIGluY2x1ZGVkIGludG8gdGhlIGZ0cmFjZV9saXN0LgorCSAqIElmIHRoZXJlJ3Mgb25seSBvbmUgZnVuY3Rpb24gcmVnaXN0ZXJlZCwgdGhlbiBjYWxsIHRoYXQKKwkgKiBmdW5jdGlvbiBkaXJlY3RseS4gT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvIGl0ZXJhdGUgb3ZlciB0aGUKKwkgKiByZWdpc3RlcmVkIGNhbGxlcnMuCiAJICovCi0JcmN1X2Fzc2lnbl9wb2ludGVyKGZ0cmFjZV9saXN0LCBvcHMpOworCWlmIChmdHJhY2VfZ2xvYmFsX2xpc3QgPT0gJmZ0cmFjZV9saXN0X2VuZCB8fAorCSAgICBmdHJhY2VfZ2xvYmFsX2xpc3QtPm5leHQgPT0gJmZ0cmFjZV9saXN0X2VuZCkKKwkJZnVuYyA9IGZ0cmFjZV9nbG9iYWxfbGlzdC0+ZnVuYzsKKwllbHNlCisJCWZ1bmMgPSBmdHJhY2VfZ2xvYmFsX2xpc3RfZnVuYzsKIAotCWlmIChmdHJhY2VfZW5hYmxlZCkgewotCQlmdHJhY2VfZnVuY190IGZ1bmM7Ci0KLQkJaWYgKG9wcy0+bmV4dCA9PSAmZnRyYWNlX2xpc3RfZW5kKQotCQkJZnVuYyA9IG9wcy0+ZnVuYzsKLQkJZWxzZQotCQkJZnVuYyA9IGZ0cmFjZV9saXN0X2Z1bmM7Ci0KLQkJaWYgKCFsaXN0X2VtcHR5KCZmdHJhY2VfcGlkcykpIHsKLQkJCXNldF9mdHJhY2VfcGlkX2Z1bmN0aW9uKGZ1bmMpOwotCQkJZnVuYyA9IGZ0cmFjZV9waWRfZnVuYzsKLQkJfQotCi0JCS8qCi0JCSAqIEZvciBvbmUgZnVuYywgc2ltcGx5IGNhbGwgaXQgZGlyZWN0bHkuCi0JCSAqIEZvciBtb3JlIHRoYW4gb25lIGZ1bmMsIGNhbGwgdGhlIGNoYWluLgotCQkgKi8KLSNpZmRlZiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVAotCQlmdHJhY2VfdHJhY2VfZnVuY3Rpb24gPSBmdW5jOwotI2Vsc2UKLQkJX19mdHJhY2VfdHJhY2VfZnVuY3Rpb24gPSBmdW5jOwotCQlmdHJhY2VfdHJhY2VfZnVuY3Rpb24gPSBmdHJhY2VfdGVzdF9zdG9wX2Z1bmM7Ci0jZW5kaWYKKwkvKiBJZiB3ZSBmaWx0ZXIgb24gcGlkcywgdXBkYXRlIHRvIHVzZSB0aGUgcGlkIGZ1bmN0aW9uICovCisJaWYgKCFsaXN0X2VtcHR5KCZmdHJhY2VfcGlkcykpIHsKKwkJc2V0X2Z0cmFjZV9waWRfZnVuY3Rpb24oZnVuYyk7CisJCWZ1bmMgPSBmdHJhY2VfcGlkX2Z1bmM7CiAJfQogCi0JcmV0dXJuIDA7CisJZ2xvYmFsX29wcy5mdW5jID0gZnVuYzsKIH0KIAotc3RhdGljIGludCBfX3VucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMpCitzdGF0aWMgdm9pZCB1cGRhdGVfZnRyYWNlX2Z1bmN0aW9uKHZvaWQpCit7CisJZnRyYWNlX2Z1bmNfdCBmdW5jOworCisJdXBkYXRlX2dsb2JhbF9vcHMoKTsKKworCS8qCisJICogSWYgd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QgYW5kIHRoaXMgb3BzIGlzCisJICogbm90IGR5bmFtaWMsIHRoZW4gaGF2ZSB0aGUgbWNvdW50IHRyYW1wb2xpbmUgY2FsbAorCSAqIHRoZSBmdW5jdGlvbiBkaXJlY3RseQorCSAqLworCWlmIChmdHJhY2Vfb3BzX2xpc3QgPT0gJmZ0cmFjZV9saXN0X2VuZCB8fAorCSAgICAoZnRyYWNlX29wc19saXN0LT5uZXh0ID09ICZmdHJhY2VfbGlzdF9lbmQgJiYKKwkgICAgICEoZnRyYWNlX29wc19saXN0LT5mbGFncyAmIEZUUkFDRV9PUFNfRkxfRFlOQU1JQykpKQorCQlmdW5jID0gZnRyYWNlX29wc19saXN0LT5mdW5jOworCWVsc2UKKwkJZnVuYyA9IGZ0cmFjZV9vcHNfbGlzdF9mdW5jOworCisjaWZkZWYgQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1QKKwlmdHJhY2VfdHJhY2VfZnVuY3Rpb24gPSBmdW5jOworI2Vsc2UKKwlfX2Z0cmFjZV90cmFjZV9mdW5jdGlvbiA9IGZ1bmM7CisJZnRyYWNlX3RyYWNlX2Z1bmN0aW9uID0gZnRyYWNlX3Rlc3Rfc3RvcF9mdW5jOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGFkZF9mdHJhY2Vfb3BzKHN0cnVjdCBmdHJhY2Vfb3BzICoqbGlzdCwgc3RydWN0IGZ0cmFjZV9vcHMgKm9wcykKK3sKKwlvcHMtPm5leHQgPSAqbGlzdDsKKwkvKgorCSAqIFdlIGFyZSBlbnRlcmluZyBvcHMgaW50byB0aGUgbGlzdCBidXQgYW5vdGhlcgorCSAqIENQVSBtaWdodCBiZSB3YWxraW5nIHRoYXQgbGlzdC4gV2UgbmVlZCB0byBtYWtlIHN1cmUKKwkgKiB0aGUgb3BzLT5uZXh0IHBvaW50ZXIgaXMgdmFsaWQgYmVmb3JlIGFub3RoZXIgQ1BVIHNlZXMKKwkgKiB0aGUgb3BzIHBvaW50ZXIgaW5jbHVkZWQgaW50byB0aGUgbGlzdC4KKwkgKi8KKwlyY3VfYXNzaWduX3BvaW50ZXIoKmxpc3QsIG9wcyk7Cit9CisKK3N0YXRpYyBpbnQgcmVtb3ZlX2Z0cmFjZV9vcHMoc3RydWN0IGZ0cmFjZV9vcHMgKipsaXN0LCBzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKQogewogCXN0cnVjdCBmdHJhY2Vfb3BzICoqcDsKIApAQCAtMTk0LDEzICsyMjksMTIgQEAKIAkgKiBJZiB3ZSBhcmUgcmVtb3ZpbmcgdGhlIGxhc3QgZnVuY3Rpb24sIHRoZW4gc2ltcGx5IHBvaW50CiAJICogdG8gdGhlIGZ0cmFjZV9zdHViLgogCSAqLwotCWlmIChmdHJhY2VfbGlzdCA9PSBvcHMgJiYgb3BzLT5uZXh0ID09ICZmdHJhY2VfbGlzdF9lbmQpIHsKLQkJZnRyYWNlX3RyYWNlX2Z1bmN0aW9uID0gZnRyYWNlX3N0dWI7Ci0JCWZ0cmFjZV9saXN0ID0gJmZ0cmFjZV9saXN0X2VuZDsKKwlpZiAoKmxpc3QgPT0gb3BzICYmIG9wcy0+bmV4dCA9PSAmZnRyYWNlX2xpc3RfZW5kKSB7CisJCSpsaXN0ID0gJmZ0cmFjZV9saXN0X2VuZDsKIAkJcmV0dXJuIDA7CiAJfQogCi0JZm9yIChwID0gJmZ0cmFjZV9saXN0OyAqcCAhPSAmZnRyYWNlX2xpc3RfZW5kOyBwID0gJigqcCktPm5leHQpCisJZm9yIChwID0gbGlzdDsgKnAgIT0gJmZ0cmFjZV9saXN0X2VuZDsgcCA9ICYoKnApLT5uZXh0KQogCQlpZiAoKnAgPT0gb3BzKQogCQkJYnJlYWs7CiAKQEAgLTIwOCw1MyArMjQyLDgzIEBACiAJCXJldHVybiAtMTsKIAogCSpwID0gKCpwKS0+bmV4dDsKKwlyZXR1cm4gMDsKK30KIAotCWlmIChmdHJhY2VfZW5hYmxlZCkgewotCQkvKiBJZiB3ZSBvbmx5IGhhdmUgb25lIGZ1bmMgbGVmdCwgdGhlbiBjYWxsIHRoYXQgZGlyZWN0bHkgKi8KLQkJaWYgKGZ0cmFjZV9saXN0LT5uZXh0ID09ICZmdHJhY2VfbGlzdF9lbmQpIHsKLQkJCWZ0cmFjZV9mdW5jX3QgZnVuYyA9IGZ0cmFjZV9saXN0LT5mdW5jOworc3RhdGljIGludCBfX3JlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbihzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKQoreworCWlmIChmdHJhY2VfZGlzYWJsZWQpCisJCXJldHVybiAtRU5PREVWOwogCi0JCQlpZiAoIWxpc3RfZW1wdHkoJmZ0cmFjZV9waWRzKSkgewotCQkJCXNldF9mdHJhY2VfcGlkX2Z1bmN0aW9uKGZ1bmMpOwotCQkJCWZ1bmMgPSBmdHJhY2VfcGlkX2Z1bmM7Ci0JCQl9Ci0jaWZkZWYgQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1QKLQkJCWZ0cmFjZV90cmFjZV9mdW5jdGlvbiA9IGZ1bmM7Ci0jZWxzZQotCQkJX19mdHJhY2VfdHJhY2VfZnVuY3Rpb24gPSBmdW5jOwotI2VuZGlmCi0JCX0KLQl9CisJaWYgKEZUUkFDRV9XQVJOX09OKG9wcyA9PSAmZ2xvYmFsX29wcykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKFdBUk5fT04ob3BzLT5mbGFncyAmIEZUUkFDRV9PUFNfRkxfRU5BQkxFRCkpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoIWNvcmVfa2VybmVsX2RhdGEoKHVuc2lnbmVkIGxvbmcpb3BzKSkKKwkJb3BzLT5mbGFncyB8PSBGVFJBQ0VfT1BTX0ZMX0RZTkFNSUM7CisKKwlpZiAob3BzLT5mbGFncyAmIEZUUkFDRV9PUFNfRkxfR0xPQkFMKSB7CisJCWludCBmaXJzdCA9IGZ0cmFjZV9nbG9iYWxfbGlzdCA9PSAmZnRyYWNlX2xpc3RfZW5kOworCQlhZGRfZnRyYWNlX29wcygmZnRyYWNlX2dsb2JhbF9saXN0LCBvcHMpOworCQlvcHMtPmZsYWdzIHw9IEZUUkFDRV9PUFNfRkxfRU5BQkxFRDsKKwkJaWYgKGZpcnN0KQorCQkJYWRkX2Z0cmFjZV9vcHMoJmZ0cmFjZV9vcHNfbGlzdCwgJmdsb2JhbF9vcHMpOworCX0gZWxzZQorCQlhZGRfZnRyYWNlX29wcygmZnRyYWNlX29wc19saXN0LCBvcHMpOworCisJaWYgKGZ0cmFjZV9lbmFibGVkKQorCQl1cGRhdGVfZnRyYWNlX2Z1bmN0aW9uKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX3VucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMpCit7CisJaW50IHJldDsKKworCWlmIChmdHJhY2VfZGlzYWJsZWQpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKFdBUk5fT04oIShvcHMtPmZsYWdzICYgRlRSQUNFX09QU19GTF9FTkFCTEVEKSkpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoRlRSQUNFX1dBUk5fT04ob3BzID09ICZnbG9iYWxfb3BzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAob3BzLT5mbGFncyAmIEZUUkFDRV9PUFNfRkxfR0xPQkFMKSB7CisJCXJldCA9IHJlbW92ZV9mdHJhY2Vfb3BzKCZmdHJhY2VfZ2xvYmFsX2xpc3QsIG9wcyk7CisJCWlmICghcmV0ICYmIGZ0cmFjZV9nbG9iYWxfbGlzdCA9PSAmZnRyYWNlX2xpc3RfZW5kKQorCQkJcmV0ID0gcmVtb3ZlX2Z0cmFjZV9vcHMoJmZ0cmFjZV9vcHNfbGlzdCwgJmdsb2JhbF9vcHMpOworCQlpZiAoIXJldCkKKwkJCW9wcy0+ZmxhZ3MgJj0gfkZUUkFDRV9PUFNfRkxfRU5BQkxFRDsKKwl9IGVsc2UKKwkJcmV0ID0gcmVtb3ZlX2Z0cmFjZV9vcHMoJmZ0cmFjZV9vcHNfbGlzdCwgb3BzKTsKKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKGZ0cmFjZV9lbmFibGVkKQorCQl1cGRhdGVfZnRyYWNlX2Z1bmN0aW9uKCk7CisKKwkvKgorCSAqIER5bmFtaWMgb3BzIG1heSBiZSBmcmVlZCwgd2UgbXVzdCBtYWtlIHN1cmUgdGhhdCBhbGwKKwkgKiBjYWxsZXJzIGFyZSBkb25lIGJlZm9yZSBsZWF2aW5nIHRoaXMgZnVuY3Rpb24uCisJICovCisJaWYgKG9wcy0+ZmxhZ3MgJiBGVFJBQ0VfT1BTX0ZMX0RZTkFNSUMpCisJCXN5bmNocm9uaXplX3NjaGVkKCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgZnRyYWNlX3VwZGF0ZV9waWRfZnVuYyh2b2lkKQogewotCWZ0cmFjZV9mdW5jX3QgZnVuYzsKLQorCS8qIE9ubHkgZG8gc29tZXRoaW5nIGlmIHdlIGFyZSB0cmFjaW5nIHNvbWV0aGluZyAqLwogCWlmIChmdHJhY2VfdHJhY2VfZnVuY3Rpb24gPT0gZnRyYWNlX3N0dWIpCiAJCXJldHVybjsKIAotI2lmZGVmIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUCi0JZnVuYyA9IGZ0cmFjZV90cmFjZV9mdW5jdGlvbjsKLSNlbHNlCi0JZnVuYyA9IF9fZnRyYWNlX3RyYWNlX2Z1bmN0aW9uOwotI2VuZGlmCi0KLQlpZiAoIWxpc3RfZW1wdHkoJmZ0cmFjZV9waWRzKSkgewotCQlzZXRfZnRyYWNlX3BpZF9mdW5jdGlvbihmdW5jKTsKLQkJZnVuYyA9IGZ0cmFjZV9waWRfZnVuYzsKLQl9IGVsc2UgewotCQlpZiAoZnVuYyA9PSBmdHJhY2VfcGlkX2Z1bmMpCi0JCQlmdW5jID0gZnRyYWNlX3BpZF9mdW5jdGlvbjsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVAotCWZ0cmFjZV90cmFjZV9mdW5jdGlvbiA9IGZ1bmM7Ci0jZWxzZQotCV9fZnRyYWNlX3RyYWNlX2Z1bmN0aW9uID0gZnVuYzsKLSNlbmRpZgorCXVwZGF0ZV9mdHJhY2VfZnVuY3Rpb24oKTsKIH0KIAogI2lmZGVmIENPTkZJR19GVU5DVElPTl9QUk9GSUxFUgpAQCAtODg4LDggKzk1MiwzNSBAQAogCUZUUkFDRV9TVEFSVF9GVU5DX1JFVAkJPSAoMSA8PCAzKSwKIAlGVFJBQ0VfU1RPUF9GVU5DX1JFVAkJPSAoMSA8PCA0KSwKIH07CitzdHJ1Y3QgZnRyYWNlX2Z1bmNfZW50cnkgeworCXN0cnVjdCBobGlzdF9ub2RlIGhsaXN0OworCXVuc2lnbmVkIGxvbmcgaXA7Cit9OwogCi1zdGF0aWMgaW50IGZ0cmFjZV9maWx0ZXJlZDsKK3N0cnVjdCBmdHJhY2VfaGFzaCB7CisJdW5zaWduZWQgbG9uZwkJc2l6ZV9iaXRzOworCXN0cnVjdCBobGlzdF9oZWFkCSpidWNrZXRzOworCXVuc2lnbmVkIGxvbmcJCWNvdW50OworCXN0cnVjdCByY3VfaGVhZAkJcmN1OworfTsKKworLyoKKyAqIFdlIG1ha2UgdGhlc2UgY29uc3RhbnQgYmVjYXVzZSBubyBvbmUgc2hvdWxkIHRvdWNoIHRoZW0sCisgKiBidXQgdGhleSBhcmUgdXNlZCBhcyB0aGUgZGVmYXVsdCAiZW1wdHkgaGFzaCIsIHRvIGF2b2lkIGFsbG9jYXRpbmcKKyAqIGl0IGFsbCB0aGUgdGltZS4gVGhlc2UgYXJlIGluIGEgcmVhZCBvbmx5IHNlY3Rpb24gc3VjaCB0aGF0IGlmCisgKiBhbnlvbmUgZG9lcyB0cnkgdG8gbW9kaWZ5IGl0LCBpdCB3aWxsIGNhdXNlIGFuIGV4Y2VwdGlvbi4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBobGlzdF9oZWFkIGVtcHR5X2J1Y2tldHNbMV07CitzdGF0aWMgY29uc3Qgc3RydWN0IGZ0cmFjZV9oYXNoIGVtcHR5X2hhc2ggPSB7CisJLmJ1Y2tldHMgPSAoc3RydWN0IGhsaXN0X2hlYWQgKillbXB0eV9idWNrZXRzLAorfTsKKyNkZWZpbmUgRU1QVFlfSEFTSAkoKHN0cnVjdCBmdHJhY2VfaGFzaCAqKSZlbXB0eV9oYXNoKQorCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMgZ2xvYmFsX29wcyA9IHsKKwkuZnVuYwkJCT0gZnRyYWNlX3N0dWIsCisJLm5vdHJhY2VfaGFzaAkJPSBFTVBUWV9IQVNILAorCS5maWx0ZXJfaGFzaAkJPSBFTVBUWV9IQVNILAorfTsKIAogc3RhdGljIHN0cnVjdCBkeW5fZnRyYWNlICpmdHJhY2VfbmV3X2FkZHJzOwogCkBAIC05MTIsNiArMTAwMywyNjkgQEAKIAogc3RhdGljIHN0cnVjdCBkeW5fZnRyYWNlICpmdHJhY2VfZnJlZV9yZWNvcmRzOwogCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9mdW5jX2VudHJ5ICoKK2Z0cmFjZV9sb29rdXBfaXAoc3RydWN0IGZ0cmFjZV9oYXNoICpoYXNoLCB1bnNpZ25lZCBsb25nIGlwKQoreworCXVuc2lnbmVkIGxvbmcga2V5OworCXN0cnVjdCBmdHJhY2VfZnVuY19lbnRyeSAqZW50cnk7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhoZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKKworCWlmICghaGFzaC0+Y291bnQpCisJCXJldHVybiBOVUxMOworCisJaWYgKGhhc2gtPnNpemVfYml0cyA+IDApCisJCWtleSA9IGhhc2hfbG9uZyhpcCwgaGFzaC0+c2l6ZV9iaXRzKTsKKwllbHNlCisJCWtleSA9IDA7CisKKwloaGQgPSAmaGFzaC0+YnVja2V0c1trZXldOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVudHJ5LCBuLCBoaGQsIGhsaXN0KSB7CisJCWlmIChlbnRyeS0+aXAgPT0gaXApCisJCQlyZXR1cm4gZW50cnk7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBfX2FkZF9oYXNoX2VudHJ5KHN0cnVjdCBmdHJhY2VfaGFzaCAqaGFzaCwKKwkJCSAgICAgc3RydWN0IGZ0cmFjZV9mdW5jX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGhkOworCXVuc2lnbmVkIGxvbmcga2V5OworCisJaWYgKGhhc2gtPnNpemVfYml0cykKKwkJa2V5ID0gaGFzaF9sb25nKGVudHJ5LT5pcCwgaGFzaC0+c2l6ZV9iaXRzKTsKKwllbHNlCisJCWtleSA9IDA7CisKKwloaGQgPSAmaGFzaC0+YnVja2V0c1trZXldOworCWhsaXN0X2FkZF9oZWFkKCZlbnRyeS0+aGxpc3QsIGhoZCk7CisJaGFzaC0+Y291bnQrKzsKK30KKworc3RhdGljIGludCBhZGRfaGFzaF9lbnRyeShzdHJ1Y3QgZnRyYWNlX2hhc2ggKmhhc2gsIHVuc2lnbmVkIGxvbmcgaXApCit7CisJc3RydWN0IGZ0cmFjZV9mdW5jX2VudHJ5ICplbnRyeTsKKworCWVudHJ5ID0ga21hbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlbnRyeSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllbnRyeS0+aXAgPSBpcDsKKwlfX2FkZF9oYXNoX2VudHJ5KGhhc2gsIGVudHJ5KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorZnJlZV9oYXNoX2VudHJ5KHN0cnVjdCBmdHJhY2VfaGFzaCAqaGFzaCwKKwkJICBzdHJ1Y3QgZnRyYWNlX2Z1bmNfZW50cnkgKmVudHJ5KQoreworCWhsaXN0X2RlbCgmZW50cnktPmhsaXN0KTsKKwlrZnJlZShlbnRyeSk7CisJaGFzaC0+Y291bnQtLTsKK30KKworc3RhdGljIHZvaWQKK3JlbW92ZV9oYXNoX2VudHJ5KHN0cnVjdCBmdHJhY2VfaGFzaCAqaGFzaCwKKwkJICBzdHJ1Y3QgZnRyYWNlX2Z1bmNfZW50cnkgKmVudHJ5KQoreworCWhsaXN0X2RlbCgmZW50cnktPmhsaXN0KTsKKwloYXNoLT5jb3VudC0tOworfQorCitzdGF0aWMgdm9pZCBmdHJhY2VfaGFzaF9jbGVhcihzdHJ1Y3QgZnRyYWNlX2hhc2ggKmhhc2gpCit7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhoZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqdHAsICp0bjsKKwlzdHJ1Y3QgZnRyYWNlX2Z1bmNfZW50cnkgKmVudHJ5OworCWludCBzaXplID0gMSA8PCBoYXNoLT5zaXplX2JpdHM7CisJaW50IGk7CisKKwlpZiAoIWhhc2gtPmNvdW50KQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCWhoZCA9ICZoYXNoLT5idWNrZXRzW2ldOworCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCB0cCwgdG4sIGhoZCwgaGxpc3QpCisJCQlmcmVlX2hhc2hfZW50cnkoaGFzaCwgZW50cnkpOworCX0KKwlGVFJBQ0VfV0FSTl9PTihoYXNoLT5jb3VudCk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfZnRyYWNlX2hhc2goc3RydWN0IGZ0cmFjZV9oYXNoICpoYXNoKQoreworCWlmICghaGFzaCB8fCBoYXNoID09IEVNUFRZX0hBU0gpCisJCXJldHVybjsKKwlmdHJhY2VfaGFzaF9jbGVhcihoYXNoKTsKKwlrZnJlZShoYXNoLT5idWNrZXRzKTsKKwlrZnJlZShoYXNoKTsKK30KKworc3RhdGljIHZvaWQgX19mcmVlX2Z0cmFjZV9oYXNoX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkKK3sKKwlzdHJ1Y3QgZnRyYWNlX2hhc2ggKmhhc2g7CisKKwloYXNoID0gY29udGFpbmVyX29mKHJjdSwgc3RydWN0IGZ0cmFjZV9oYXNoLCByY3UpOworCWZyZWVfZnRyYWNlX2hhc2goaGFzaCk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfZnRyYWNlX2hhc2hfcmN1KHN0cnVjdCBmdHJhY2VfaGFzaCAqaGFzaCkKK3sKKwlpZiAoIWhhc2ggfHwgaGFzaCA9PSBFTVBUWV9IQVNIKQorCQlyZXR1cm47CisJY2FsbF9yY3Vfc2NoZWQoJmhhc2gtPnJjdSwgX19mcmVlX2Z0cmFjZV9oYXNoX3JjdSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX2hhc2ggKmFsbG9jX2Z0cmFjZV9oYXNoKGludCBzaXplX2JpdHMpCit7CisJc3RydWN0IGZ0cmFjZV9oYXNoICpoYXNoOworCWludCBzaXplOworCisJaGFzaCA9IGt6YWxsb2Moc2l6ZW9mKCpoYXNoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFoYXNoKQorCQlyZXR1cm4gTlVMTDsKKworCXNpemUgPSAxIDw8IHNpemVfYml0czsKKwloYXNoLT5idWNrZXRzID0ga3phbGxvYyhzaXplb2YoKmhhc2gtPmJ1Y2tldHMpICogc2l6ZSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWhhc2gtPmJ1Y2tldHMpIHsKKwkJa2ZyZWUoaGFzaCk7CisJCXJldHVybiBOVUxMOworCX0KKworCWhhc2gtPnNpemVfYml0cyA9IHNpemVfYml0czsKKworCXJldHVybiBoYXNoOworfQorCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9oYXNoICoKK2FsbG9jX2FuZF9jb3B5X2Z0cmFjZV9oYXNoKGludCBzaXplX2JpdHMsIHN0cnVjdCBmdHJhY2VfaGFzaCAqaGFzaCkKK3sKKwlzdHJ1Y3QgZnRyYWNlX2Z1bmNfZW50cnkgKmVudHJ5OworCXN0cnVjdCBmdHJhY2VfaGFzaCAqbmV3X2hhc2g7CisJc3RydWN0IGhsaXN0X25vZGUgKnRwOworCWludCBzaXplOworCWludCByZXQ7CisJaW50IGk7CisKKwluZXdfaGFzaCA9IGFsbG9jX2Z0cmFjZV9oYXNoKHNpemVfYml0cyk7CisJaWYgKCFuZXdfaGFzaCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBFbXB0eSBoYXNoPyAqLworCWlmICghaGFzaCB8fCAhaGFzaC0+Y291bnQpCisJCXJldHVybiBuZXdfaGFzaDsKKworCXNpemUgPSAxIDw8IGhhc2gtPnNpemVfYml0czsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCB0cCwgJmhhc2gtPmJ1Y2tldHNbaV0sIGhsaXN0KSB7CisJCQlyZXQgPSBhZGRfaGFzaF9lbnRyeShuZXdfaGFzaCwgZW50cnktPmlwKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gZnJlZV9oYXNoOworCQl9CisJfQorCisJRlRSQUNFX1dBUk5fT04obmV3X2hhc2gtPmNvdW50ICE9IGhhc2gtPmNvdW50KTsKKworCXJldHVybiBuZXdfaGFzaDsKKworIGZyZWVfaGFzaDoKKwlmcmVlX2Z0cmFjZV9oYXNoKG5ld19oYXNoKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludAorZnRyYWNlX2hhc2hfbW92ZShzdHJ1Y3QgZnRyYWNlX2hhc2ggKipkc3QsIHN0cnVjdCBmdHJhY2VfaGFzaCAqc3JjKQoreworCXN0cnVjdCBmdHJhY2VfZnVuY19lbnRyeSAqZW50cnk7CisJc3RydWN0IGhsaXN0X25vZGUgKnRwLCAqdG47CisJc3RydWN0IGhsaXN0X2hlYWQgKmhoZDsKKwlzdHJ1Y3QgZnRyYWNlX2hhc2ggKm9sZF9oYXNoOworCXN0cnVjdCBmdHJhY2VfaGFzaCAqbmV3X2hhc2g7CisJdW5zaWduZWQgbG9uZyBrZXk7CisJaW50IHNpemUgPSBzcmMtPmNvdW50OworCWludCBiaXRzID0gMDsKKwlpbnQgaTsKKworCS8qCisJICogSWYgdGhlIG5ldyBzb3VyY2UgaXMgZW1wdHksIGp1c3QgZnJlZSBkc3QgYW5kIGFzc2lnbiBpdAorCSAqIHRoZSBlbXB0eV9oYXNoLgorCSAqLworCWlmICghc3JjLT5jb3VudCkgeworCQlmcmVlX2Z0cmFjZV9oYXNoX3JjdSgqZHN0KTsKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKCpkc3QsIEVNUFRZX0hBU0gpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIE1ha2UgdGhlIGhhc2ggc2l6ZSBhYm91dCAxLzIgdGhlICMgZm91bmQKKwkgKi8KKwlmb3IgKHNpemUgLz0gMjsgc2l6ZTsgc2l6ZSA+Pj0gMSkKKwkJYml0cysrOworCisJLyogRG9uJ3QgYWxsb2NhdGUgdG9vIG11Y2ggKi8KKwlpZiAoYml0cyA+IEZUUkFDRV9IQVNIX01BWF9CSVRTKQorCQliaXRzID0gRlRSQUNFX0hBU0hfTUFYX0JJVFM7CisKKwluZXdfaGFzaCA9IGFsbG9jX2Z0cmFjZV9oYXNoKGJpdHMpOworCWlmICghbmV3X2hhc2gpCisJCXJldHVybiAtRU5PTUVNOworCisJc2l6ZSA9IDEgPDwgc3JjLT5zaXplX2JpdHM7CisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQloaGQgPSAmc3JjLT5idWNrZXRzW2ldOworCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCB0cCwgdG4sIGhoZCwgaGxpc3QpIHsKKwkJCWlmIChiaXRzID4gMCkKKwkJCQlrZXkgPSBoYXNoX2xvbmcoZW50cnktPmlwLCBiaXRzKTsKKwkJCWVsc2UKKwkJCQlrZXkgPSAwOworCQkJcmVtb3ZlX2hhc2hfZW50cnkoc3JjLCBlbnRyeSk7CisJCQlfX2FkZF9oYXNoX2VudHJ5KG5ld19oYXNoLCBlbnRyeSk7CisJCX0KKwl9CisKKwlvbGRfaGFzaCA9ICpkc3Q7CisJcmN1X2Fzc2lnbl9wb2ludGVyKCpkc3QsIG5ld19oYXNoKTsKKwlmcmVlX2Z0cmFjZV9oYXNoX3JjdShvbGRfaGFzaCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRlc3QgdGhlIGhhc2hlcyBmb3IgdGhpcyBvcHMgdG8gc2VlIGlmIHdlIHdhbnQgdG8gY2FsbAorICogdGhlIG9wcy0+ZnVuYyBvciBub3QuCisgKgorICogSXQncyBhIG1hdGNoIGlmIHRoZSBpcCBpcyBpbiB0aGUgb3BzLT5maWx0ZXJfaGFzaCBvcgorICogdGhlIGZpbHRlcl9oYXNoIGRvZXMgbm90IGV4aXN0IG9yIGlzIGVtcHR5LAorICogIEFORAorICogdGhlIGlwIGlzIG5vdCBpbiB0aGUgb3BzLT5ub3RyYWNlX2hhc2guCisgKgorICogVGhpcyBuZWVkcyB0byBiZSBjYWxsZWQgd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkIGFzCisgKiB0aGUgaGFzaGVzIGFyZSBmcmVlZCB3aXRoIGNhbGxfcmN1X3NjaGVkKCkuCisgKi8KK3N0YXRpYyBpbnQKK2Z0cmFjZV9vcHNfdGVzdChzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCB1bnNpZ25lZCBsb25nIGlwKQoreworCXN0cnVjdCBmdHJhY2VfaGFzaCAqZmlsdGVyX2hhc2g7CisJc3RydWN0IGZ0cmFjZV9oYXNoICpub3RyYWNlX2hhc2g7CisJaW50IHJldDsKKworCWZpbHRlcl9oYXNoID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhvcHMtPmZpbHRlcl9oYXNoKTsKKwlub3RyYWNlX2hhc2ggPSByY3VfZGVyZWZlcmVuY2VfcmF3KG9wcy0+bm90cmFjZV9oYXNoKTsKKworCWlmICgoIWZpbHRlcl9oYXNoIHx8ICFmaWx0ZXJfaGFzaC0+Y291bnQgfHwKKwkgICAgIGZ0cmFjZV9sb29rdXBfaXAoZmlsdGVyX2hhc2gsIGlwKSkgJiYKKwkgICAgKCFub3RyYWNlX2hhc2ggfHwgIW5vdHJhY2VfaGFzaC0+Y291bnQgfHwKKwkgICAgICFmdHJhY2VfbG9va3VwX2lwKG5vdHJhY2VfaGFzaCwgaXApKSkKKwkJcmV0ID0gMTsKKwllbHNlCisJCXJldCA9IDA7CisKKwlyZXR1cm4gcmV0OworfQorCiAvKgogICogVGhpcyBpcyBhIGRvdWJsZSBmb3IuIERvIG5vdCB1c2UgJ2JyZWFrJyB0byBicmVhayBvdXQgb2YgdGhlIGxvb3AsCiAgKiB5b3UgbXVzdCB1c2UgYSBnb3RvLgpAQCAtOTI2LDYgKzEyODAsMTA1IEBACiAJCX0JCQkJXAogCX0KIAorc3RhdGljIHZvaWQgX19mdHJhY2VfaGFzaF9yZWNfdXBkYXRlKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsCisJCQkJICAgICBpbnQgZmlsdGVyX2hhc2gsCisJCQkJICAgICBib29sIGluYykKK3sKKwlzdHJ1Y3QgZnRyYWNlX2hhc2ggKmhhc2g7CisJc3RydWN0IGZ0cmFjZV9oYXNoICpvdGhlcl9oYXNoOworCXN0cnVjdCBmdHJhY2VfcGFnZSAqcGc7CisJc3RydWN0IGR5bl9mdHJhY2UgKnJlYzsKKwlpbnQgY291bnQgPSAwOworCWludCBhbGwgPSAwOworCisJLyogT25seSB1cGRhdGUgaWYgdGhlIG9wcyBoYXMgYmVlbiByZWdpc3RlcmVkICovCisJaWYgKCEob3BzLT5mbGFncyAmIEZUUkFDRV9PUFNfRkxfRU5BQkxFRCkpCisJCXJldHVybjsKKworCS8qCisJICogSW4gdGhlIGZpbHRlcl9oYXNoIGNhc2U6CisJICogICBJZiB0aGUgY291bnQgaXMgemVybywgd2UgdXBkYXRlIGFsbCByZWNvcmRzLgorCSAqICAgT3RoZXJ3aXNlIHdlIGp1c3QgdXBkYXRlIHRoZSBpdGVtcyBpbiB0aGUgaGFzaC4KKwkgKgorCSAqIEluIHRoZSBub3RyYWNlX2hhc2ggY2FzZToKKwkgKiAgIFdlIGVuYWJsZSB0aGUgdXBkYXRlIGluIHRoZSBoYXNoLgorCSAqICAgQXMgZGlzYWJsaW5nIG5vdHJhY2UgbWVhbnMgZW5hYmxpbmcgdGhlIHRyYWNpbmcsCisJICogICBhbmQgZW5hYmxpbmcgbm90cmFjZSBtZWFucyBkaXNhYmxpbmcsIHRoZSBpbmMgdmFyaWFibGUKKwkgKiAgIGdldHMgaW52ZXJzZWQuCisJICovCisJaWYgKGZpbHRlcl9oYXNoKSB7CisJCWhhc2ggPSBvcHMtPmZpbHRlcl9oYXNoOworCQlvdGhlcl9oYXNoID0gb3BzLT5ub3RyYWNlX2hhc2g7CisJCWlmICghaGFzaCB8fCAhaGFzaC0+Y291bnQpCisJCQlhbGwgPSAxOworCX0gZWxzZSB7CisJCWluYyA9ICFpbmM7CisJCWhhc2ggPSBvcHMtPm5vdHJhY2VfaGFzaDsKKwkJb3RoZXJfaGFzaCA9IG9wcy0+ZmlsdGVyX2hhc2g7CisJCS8qCisJCSAqIElmIHRoZSBub3RyYWNlIGhhc2ggaGFzIG5vIGl0ZW1zLAorCQkgKiB0aGVuIHRoZXJlJ3Mgbm90aGluZyB0byBkby4KKwkJICovCisJCWlmIChoYXNoICYmICFoYXNoLT5jb3VudCkKKwkJCXJldHVybjsKKwl9CisKKwlkb19mb3JfZWFjaF9mdHJhY2VfcmVjKHBnLCByZWMpIHsKKwkJaW50IGluX290aGVyX2hhc2ggPSAwOworCQlpbnQgaW5faGFzaCA9IDA7CisJCWludCBtYXRjaCA9IDA7CisKKwkJaWYgKGFsbCkgeworCQkJLyoKKwkJCSAqIE9ubHkgdGhlIGZpbHRlcl9oYXNoIGFmZmVjdHMgYWxsIHJlY29yZHMuCisJCQkgKiBVcGRhdGUgaWYgdGhlIHJlY29yZCBpcyBub3QgaW4gdGhlIG5vdHJhY2UgaGFzaC4KKwkJCSAqLworCQkJaWYgKCFvdGhlcl9oYXNoIHx8ICFmdHJhY2VfbG9va3VwX2lwKG90aGVyX2hhc2gsIHJlYy0+aXApKQorCQkJCW1hdGNoID0gMTsKKwkJfSBlbHNlIHsKKwkJCWluX2hhc2ggPSBoYXNoICYmICEhZnRyYWNlX2xvb2t1cF9pcChoYXNoLCByZWMtPmlwKTsKKwkJCWluX290aGVyX2hhc2ggPSBvdGhlcl9oYXNoICYmICEhZnRyYWNlX2xvb2t1cF9pcChvdGhlcl9oYXNoLCByZWMtPmlwKTsKKworCQkJLyoKKwkJCSAqCisJCQkgKi8KKwkJCWlmIChmaWx0ZXJfaGFzaCAmJiBpbl9oYXNoICYmICFpbl9vdGhlcl9oYXNoKQorCQkJCW1hdGNoID0gMTsKKwkJCWVsc2UgaWYgKCFmaWx0ZXJfaGFzaCAmJiBpbl9oYXNoICYmCisJCQkJIChpbl9vdGhlcl9oYXNoIHx8ICFvdGhlcl9oYXNoLT5jb3VudCkpCisJCQkJbWF0Y2ggPSAxOworCQl9CisJCWlmICghbWF0Y2gpCisJCQljb250aW51ZTsKKworCQlpZiAoaW5jKSB7CisJCQlyZWMtPmZsYWdzKys7CisJCQlpZiAoRlRSQUNFX1dBUk5fT04oKHJlYy0+ZmxhZ3MgJiB+RlRSQUNFX0ZMX01BU0spID09IEZUUkFDRV9SRUZfTUFYKSkKKwkJCQlyZXR1cm47CisJCX0gZWxzZSB7CisJCQlpZiAoRlRSQUNFX1dBUk5fT04oKHJlYy0+ZmxhZ3MgJiB+RlRSQUNFX0ZMX01BU0spID09IDApKQorCQkJCXJldHVybjsKKwkJCXJlYy0+ZmxhZ3MtLTsKKwkJfQorCQljb3VudCsrOworCQkvKiBTaG9ydGN1dCwgaWYgd2UgaGFuZGxlZCBhbGwgcmVjb3Jkcywgd2UgYXJlIGRvbmUuICovCisJCWlmICghYWxsICYmIGNvdW50ID09IGhhc2gtPmNvdW50KQorCQkJcmV0dXJuOworCX0gd2hpbGVfZm9yX2VhY2hfZnRyYWNlX3JlYygpOworfQorCitzdGF0aWMgdm9pZCBmdHJhY2VfaGFzaF9yZWNfZGlzYWJsZShzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLAorCQkJCSAgICBpbnQgZmlsdGVyX2hhc2gpCit7CisJX19mdHJhY2VfaGFzaF9yZWNfdXBkYXRlKG9wcywgZmlsdGVyX2hhc2gsIDApOworfQorCitzdGF0aWMgdm9pZCBmdHJhY2VfaGFzaF9yZWNfZW5hYmxlKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsCisJCQkJICAgaW50IGZpbHRlcl9oYXNoKQoreworCV9fZnRyYWNlX2hhc2hfcmVjX3VwZGF0ZShvcHMsIGZpbHRlcl9oYXNoLCAxKTsKK30KKwogc3RhdGljIHZvaWQgZnRyYWNlX2ZyZWVfcmVjKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMpCiB7CiAJcmVjLT5mcmVlbGlzdCA9IGZ0cmFjZV9mcmVlX3JlY29yZHM7CkBAIC0xMDQ3LDE4ICsxNTAwLDE4IEBACiAJZnRyYWNlX2FkZHIgPSAodW5zaWduZWQgbG9uZylGVFJBQ0VfQUREUjsKIAogCS8qCi0JICogSWYgdGhpcyByZWNvcmQgaXMgbm90IHRvIGJlIHRyYWNlZCBvciB3ZSB3YW50IHRvIGRpc2FibGUgaXQsCi0JICogdGhlbiBkaXNhYmxlIGl0LgorCSAqIElmIHdlIGFyZSBlbmFibGluZyB0cmFjaW5nOgogCSAqCi0JICogSWYgd2Ugd2FudCB0byBlbmFibGUgaXQgYW5kIGZpbHRlcmluZyBpcyBvZmYsIHRoZW4gZW5hYmxlIGl0LgorCSAqICAgSWYgdGhlIHJlY29yZCBoYXMgYSByZWYgY291bnQsIHRoZW4gd2UgbmVlZCB0byBlbmFibGUgaXQKKwkgKiAgIGJlY2F1c2Ugc29tZW9uZSBpcyB1c2luZyBpdC4KIAkgKgotCSAqIElmIHdlIHdhbnQgdG8gZW5hYmxlIGl0IGFuZCBmaWx0ZXJpbmcgaXMgb24sIGVuYWJsZSBpdCBvbmx5IGlmCi0JICogaXQncyBmaWx0ZXJlZAorCSAqICAgT3RoZXJ3aXNlIHdlIG1ha2Ugc3VyZSBpdHMgZGlzYWJsZWQuCisJICoKKwkgKiBJZiB3ZSBhcmUgZGlzYWJsaW5nIHRyYWNpbmcsIHRoZW4gZGlzYWJsZSBhbGwgcmVjb3JkcyB0aGF0CisJICogYXJlIGVuYWJsZWQuCiAJICovCi0JaWYgKGVuYWJsZSAmJiAhKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfTk9UUkFDRSkpIHsKLQkJaWYgKCFmdHJhY2VfZmlsdGVyZWQgfHwgKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRklMVEVSKSkKLQkJCWZsYWcgPSBGVFJBQ0VfRkxfRU5BQkxFRDsKLQl9CisJaWYgKGVuYWJsZSAmJiAocmVjLT5mbGFncyAmIH5GVFJBQ0VfRkxfTUFTSykpCisJCWZsYWcgPSBGVFJBQ0VfRkxfRU5BQkxFRDsKIAogCS8qIElmIHRoZSBzdGF0ZSBvZiB0aGlzIHJlY29yZCBoYXNuJ3QgY2hhbmdlZCwgdGhlbiBkbyBub3RoaW5nICovCiAJaWYgKChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0VOQUJMRUQpID09IGZsYWcpCkBAIC0xMDc5LDE5ICsxNTMyLDE2IEBACiAJc3RydWN0IGZ0cmFjZV9wYWdlICpwZzsKIAlpbnQgZmFpbGVkOwogCisJaWYgKHVubGlrZWx5KGZ0cmFjZV9kaXNhYmxlZCkpCisJCXJldHVybjsKKwogCWRvX2Zvcl9lYWNoX2Z0cmFjZV9yZWMocGcsIHJlYykgewotCQkvKgotCQkgKiBTa2lwIG92ZXIgZnJlZSByZWNvcmRzLCByZWNvcmRzIHRoYXQgaGF2ZQotCQkgKiBmYWlsZWQgYW5kIG5vdCBjb252ZXJ0ZWQuCi0JCSAqLwotCQlpZiAocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GUkVFIHx8Ci0JCSAgICByZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZBSUxFRCB8fAotCQkgICAgIShyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0NPTlZFUlRFRCkpCisJCS8qIFNraXAgb3ZlciBmcmVlIHJlY29yZHMgKi8KKwkJaWYgKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRlJFRSkKIAkJCWNvbnRpbnVlOwogCiAJCWZhaWxlZCA9IF9fZnRyYWNlX3JlcGxhY2VfY29kZShyZWMsIGVuYWJsZSk7CiAJCWlmIChmYWlsZWQpIHsKLQkJCXJlYy0+ZmxhZ3MgfD0gRlRSQUNFX0ZMX0ZBSUxFRDsKIAkJCWZ0cmFjZV9idWcoZmFpbGVkLCByZWMtPmlwKTsKIAkJCS8qIFN0b3AgcHJvY2Vzc2luZyAqLwogCQkJcmV0dXJuOwpAQCAtMTEwNywxMCArMTU1NywxMiBAQAogCiAJaXAgPSByZWMtPmlwOwogCisJaWYgKHVubGlrZWx5KGZ0cmFjZV9kaXNhYmxlZCkpCisJCXJldHVybiAwOworCiAJcmV0ID0gZnRyYWNlX21ha2Vfbm9wKG1vZCwgcmVjLCBNQ09VTlRfQUREUik7CiAJaWYgKHJldCkgewogCQlmdHJhY2VfYnVnKHJldCwgaXApOwotCQlyZWMtPmZsYWdzIHw9IEZUUkFDRV9GTF9GQUlMRUQ7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gMTsKQEAgLTExNzEsNiArMTYyMyw3IEBACiAKIHN0YXRpYyBmdHJhY2VfZnVuY190IHNhdmVkX2Z0cmFjZV9mdW5jOwogc3RhdGljIGludCBmdHJhY2Vfc3RhcnRfdXA7CitzdGF0aWMgaW50IGdsb2JhbF9zdGFydF91cDsKIAogc3RhdGljIHZvaWQgZnRyYWNlX3N0YXJ0dXBfZW5hYmxlKGludCBjb21tYW5kKQogewpAQCAtMTE4NSwxOSArMTYzOCwzNiBAQAogCWZ0cmFjZV9ydW5fdXBkYXRlX2NvZGUoY29tbWFuZCk7CiB9CiAKLXN0YXRpYyB2b2lkIGZ0cmFjZV9zdGFydHVwKGludCBjb21tYW5kKQorc3RhdGljIHZvaWQgZnRyYWNlX3N0YXJ0dXAoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgaW50IGNvbW1hbmQpCiB7CisJYm9vbCBoYXNoX2VuYWJsZSA9IHRydWU7CisKIAlpZiAodW5saWtlbHkoZnRyYWNlX2Rpc2FibGVkKSkKIAkJcmV0dXJuOwogCiAJZnRyYWNlX3N0YXJ0X3VwKys7CiAJY29tbWFuZCB8PSBGVFJBQ0VfRU5BQkxFX0NBTExTOwogCisJLyogb3BzIG1hcmtlZCBnbG9iYWwgc2hhcmUgdGhlIGZpbHRlciBoYXNoZXMgKi8KKwlpZiAob3BzLT5mbGFncyAmIEZUUkFDRV9PUFNfRkxfR0xPQkFMKSB7CisJCW9wcyA9ICZnbG9iYWxfb3BzOworCQkvKiBEb24ndCB1cGRhdGUgaGFzaCBpZiBnbG9iYWwgaXMgYWxyZWFkeSBzZXQgKi8KKwkJaWYgKGdsb2JhbF9zdGFydF91cCkKKwkJCWhhc2hfZW5hYmxlID0gZmFsc2U7CisJCWdsb2JhbF9zdGFydF91cCsrOworCX0KKworCW9wcy0+ZmxhZ3MgfD0gRlRSQUNFX09QU19GTF9FTkFCTEVEOworCWlmIChoYXNoX2VuYWJsZSkKKwkJZnRyYWNlX2hhc2hfcmVjX2VuYWJsZShvcHMsIDEpOworCiAJZnRyYWNlX3N0YXJ0dXBfZW5hYmxlKGNvbW1hbmQpOwogfQogCi1zdGF0aWMgdm9pZCBmdHJhY2Vfc2h1dGRvd24oaW50IGNvbW1hbmQpCitzdGF0aWMgdm9pZCBmdHJhY2Vfc2h1dGRvd24oc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgaW50IGNvbW1hbmQpCiB7CisJYm9vbCBoYXNoX2Rpc2FibGUgPSB0cnVlOworCiAJaWYgKHVubGlrZWx5KGZ0cmFjZV9kaXNhYmxlZCkpCiAJCXJldHVybjsKIApAQCAtMTIwOSw2ICsxNjc5LDIzIEBACiAJICovCiAJV0FSTl9PTl9PTkNFKGZ0cmFjZV9zdGFydF91cCA8IDApOwogCisJaWYgKG9wcy0+ZmxhZ3MgJiBGVFJBQ0VfT1BTX0ZMX0dMT0JBTCkgeworCQlvcHMgPSAmZ2xvYmFsX29wczsKKwkJZ2xvYmFsX3N0YXJ0X3VwLS07CisJCVdBUk5fT05fT05DRShnbG9iYWxfc3RhcnRfdXAgPCAwKTsKKwkJLyogRG9uJ3QgdXBkYXRlIGhhc2ggaWYgZ2xvYmFsIHN0aWxsIGhhcyB1c2VycyAqLworCQlpZiAoZ2xvYmFsX3N0YXJ0X3VwKSB7CisJCQlXQVJOX09OX09OQ0UoIWZ0cmFjZV9zdGFydF91cCk7CisJCQloYXNoX2Rpc2FibGUgPSBmYWxzZTsKKwkJfQorCX0KKworCWlmIChoYXNoX2Rpc2FibGUpCisJCWZ0cmFjZV9oYXNoX3JlY19kaXNhYmxlKG9wcywgMSk7CisKKwlpZiAob3BzICE9ICZnbG9iYWxfb3BzIHx8ICFnbG9iYWxfc3RhcnRfdXApCisJCW9wcy0+ZmxhZ3MgJj0gfkZUUkFDRV9PUFNfRkxfRU5BQkxFRDsKKwogCWlmICghZnRyYWNlX3N0YXJ0X3VwKQogCQljb21tYW5kIHw9IEZUUkFDRV9ESVNBQkxFX0NBTExTOwogCkBAIC0xMjczLDEwICsxNzYwLDEwIEBACiAJCSAqLwogCQlpZiAoIWZ0cmFjZV9jb2RlX2Rpc2FibGUobW9kLCBwKSkgewogCQkJZnRyYWNlX2ZyZWVfcmVjKHApOwotCQkJY29udGludWU7CisJCQkvKiBHYW1lIG92ZXIgKi8KKwkJCWJyZWFrOwogCQl9CiAKLQkJcC0+ZmxhZ3MgfD0gRlRSQUNFX0ZMX0NPTlZFUlRFRDsKIAkJZnRyYWNlX3VwZGF0ZV9jbnQrKzsKIAogCQkvKgpAQCAtMTM1MSw5ICsxODM4LDkgQEAKIGVudW0gewogCUZUUkFDRV9JVEVSX0ZJTFRFUgk9ICgxIDw8IDApLAogCUZUUkFDRV9JVEVSX05PVFJBQ0UJPSAoMSA8PCAxKSwKLQlGVFJBQ0VfSVRFUl9GQUlMVVJFUwk9ICgxIDw8IDIpLAotCUZUUkFDRV9JVEVSX1BSSU5UQUxMCT0gKDEgPDwgMyksCi0JRlRSQUNFX0lURVJfSEFTSAk9ICgxIDw8IDQpLAorCUZUUkFDRV9JVEVSX1BSSU5UQUxMCT0gKDEgPDwgMiksCisJRlRSQUNFX0lURVJfSEFTSAk9ICgxIDw8IDMpLAorCUZUUkFDRV9JVEVSX0VOQUJMRUQJPSAoMSA8PCA0KSwKIH07CiAKICNkZWZpbmUgRlRSQUNFX0JVRkZfTUFYIChLU1lNX1NZTUJPTF9MRU4rNCkgLyogcm9vbSBmb3Igd2lsZGNhcmRzICovCkBAIC0xMzY1LDYgKzE4NTIsOCBAQAogCXN0cnVjdCBkeW5fZnRyYWNlCQkqZnVuYzsKIAlzdHJ1Y3QgZnRyYWNlX2Z1bmNfcHJvYmUJKnByb2JlOwogCXN0cnVjdCB0cmFjZV9wYXJzZXIJCXBhcnNlcjsKKwlzdHJ1Y3QgZnRyYWNlX2hhc2gJCSpoYXNoOworCXN0cnVjdCBmdHJhY2Vfb3BzCQkqb3BzOwogCWludAkJCQloaWR4OwogCWludAkJCQlpZHg7CiAJdW5zaWduZWQJCQlmbGFnczsKQEAgLTE0NjEsOCArMTk1MCwxMiBAQAogdF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7CiAJc3RydWN0IGZ0cmFjZV9pdGVyYXRvciAqaXRlciA9IG0tPnByaXZhdGU7CisJc3RydWN0IGZ0cmFjZV9vcHMgKm9wcyA9ICZnbG9iYWxfb3BzOwogCXN0cnVjdCBkeW5fZnRyYWNlICpyZWMgPSBOVUxMOwogCisJaWYgKHVubGlrZWx5KGZ0cmFjZV9kaXNhYmxlZCkpCisJCXJldHVybiBOVUxMOworCiAJaWYgKGl0ZXItPmZsYWdzICYgRlRSQUNFX0lURVJfSEFTSCkKIAkJcmV0dXJuIHRfaGFzaF9uZXh0KG0sIHBvcyk7CiAKQEAgLTE0ODMsMTcgKzE5NzYsMTUgQEAKIAkJcmVjID0gJml0ZXItPnBnLT5yZWNvcmRzW2l0ZXItPmlkeCsrXTsKIAkJaWYgKChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZSRUUpIHx8CiAKLQkJICAgICghKGl0ZXItPmZsYWdzICYgRlRSQUNFX0lURVJfRkFJTFVSRVMpICYmCi0JCSAgICAgKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRkFJTEVEKSkgfHwKLQotCQkgICAgKChpdGVyLT5mbGFncyAmIEZUUkFDRV9JVEVSX0ZBSUxVUkVTKSAmJgotCQkgICAgICEocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GQUlMRUQpKSB8fAotCiAJCSAgICAoKGl0ZXItPmZsYWdzICYgRlRSQUNFX0lURVJfRklMVEVSKSAmJgotCQkgICAgICEocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GSUxURVIpKSB8fAorCQkgICAgICEoZnRyYWNlX2xvb2t1cF9pcChvcHMtPmZpbHRlcl9oYXNoLCByZWMtPmlwKSkpIHx8CiAKIAkJICAgICgoaXRlci0+ZmxhZ3MgJiBGVFJBQ0VfSVRFUl9OT1RSQUNFKSAmJgotCQkgICAgICEocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9OT1RSQUNFKSkpIHsKKwkJICAgICAhZnRyYWNlX2xvb2t1cF9pcChvcHMtPm5vdHJhY2VfaGFzaCwgcmVjLT5pcCkpIHx8CisKKwkJICAgICgoaXRlci0+ZmxhZ3MgJiBGVFJBQ0VfSVRFUl9FTkFCTEVEKSAmJgorCQkgICAgICEocmVjLT5mbGFncyAmIH5GVFJBQ0VfRkxfTUFTSykpKSB7CisKIAkJCXJlYyA9IE5VTEw7CiAJCQlnb3RvIHJldHJ5OwogCQl9CkBAIC0xNTE3LDEwICsyMDA4LDE1IEBACiBzdGF0aWMgdm9pZCAqdF9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQogewogCXN0cnVjdCBmdHJhY2VfaXRlcmF0b3IgKml0ZXIgPSBtLT5wcml2YXRlOworCXN0cnVjdCBmdHJhY2Vfb3BzICpvcHMgPSAmZ2xvYmFsX29wczsKIAl2b2lkICpwID0gTlVMTDsKIAlsb2ZmX3QgbDsKIAogCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKKworCWlmICh1bmxpa2VseShmdHJhY2VfZGlzYWJsZWQpKQorCQlyZXR1cm4gTlVMTDsKKwogCS8qCiAJICogSWYgYW4gbHNlZWsgd2FzIGRvbmUsIHRoZW4gcmVzZXQgYW5kIHN0YXJ0IGZyb20gYmVnaW5uaW5nLgogCSAqLwpAQCAtMTUzMiw3ICsyMDI4LDcgQEAKIAkgKiBvZmYsIHdlIGNhbiBzaG9ydCBjdXQgYW5kIGp1c3QgcHJpbnQgb3V0IHRoYXQgYWxsCiAJICogZnVuY3Rpb25zIGFyZSBlbmFibGVkLgogCSAqLwotCWlmIChpdGVyLT5mbGFncyAmIEZUUkFDRV9JVEVSX0ZJTFRFUiAmJiAhZnRyYWNlX2ZpbHRlcmVkKSB7CisJaWYgKGl0ZXItPmZsYWdzICYgRlRSQUNFX0lURVJfRklMVEVSICYmICFvcHMtPmZpbHRlcl9oYXNoLT5jb3VudCkgewogCQlpZiAoKnBvcyA+IDApCiAJCQlyZXR1cm4gdF9oYXNoX3N0YXJ0KG0sIHBvcyk7CiAJCWl0ZXItPmZsYWdzIHw9IEZUUkFDRV9JVEVSX1BSSU5UQUxMOwpAQCAtMTU5MCw3ICsyMDg2LDExIEBACiAJaWYgKCFyZWMpCiAJCXJldHVybiAwOwogCi0Jc2VxX3ByaW50ZihtLCAiJXBzXG4iLCAodm9pZCAqKXJlYy0+aXApOworCXNlcV9wcmludGYobSwgIiVwcyIsICh2b2lkICopcmVjLT5pcCk7CisJaWYgKGl0ZXItPmZsYWdzICYgRlRSQUNFX0lURVJfRU5BQkxFRCkKKwkJc2VxX3ByaW50ZihtLCAiICglbGQpIiwKKwkJCSAgIHJlYy0+ZmxhZ3MgJiB+RlRSQUNFX0ZMX01BU0spOworCXNlcV9wcmludGYobSwgIlxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE2MzAsNDQgKzIxMzAsNDYgQEAKIH0KIAogc3RhdGljIGludAotZnRyYWNlX2ZhaWx1cmVzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCitmdHJhY2VfZW5hYmxlZF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCByZXQ7Ci0Jc3RydWN0IHNlcV9maWxlICptOwogCXN0cnVjdCBmdHJhY2VfaXRlcmF0b3IgKml0ZXI7CisJaW50IHJldDsKIAotCXJldCA9IGZ0cmFjZV9hdmFpbF9vcGVuKGlub2RlLCBmaWxlKTsKKwlpZiAodW5saWtlbHkoZnRyYWNlX2Rpc2FibGVkKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpdGVyID0ga3phbGxvYyhzaXplb2YoKml0ZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWl0ZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJaXRlci0+cGcgPSBmdHJhY2VfcGFnZXNfc3RhcnQ7CisJaXRlci0+ZmxhZ3MgPSBGVFJBQ0VfSVRFUl9FTkFCTEVEOworCisJcmV0ID0gc2VxX29wZW4oZmlsZSwgJnNob3dfZnRyYWNlX3NlcV9vcHMpOwogCWlmICghcmV0KSB7Ci0JCW0gPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JCWl0ZXIgPSBtLT5wcml2YXRlOwotCQlpdGVyLT5mbGFncyA9IEZUUkFDRV9JVEVSX0ZBSUxVUkVTOworCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwkJbS0+cHJpdmF0ZSA9IGl0ZXI7CisJfSBlbHNlIHsKKwkJa2ZyZWUoaXRlcik7CiAJfQogCiAJcmV0dXJuIHJldDsKIH0KIAotCi1zdGF0aWMgdm9pZCBmdHJhY2VfZmlsdGVyX3Jlc2V0KGludCBlbmFibGUpCitzdGF0aWMgdm9pZCBmdHJhY2VfZmlsdGVyX3Jlc2V0KHN0cnVjdCBmdHJhY2VfaGFzaCAqaGFzaCkKIHsKLQlzdHJ1Y3QgZnRyYWNlX3BhZ2UgKnBnOwotCXN0cnVjdCBkeW5fZnRyYWNlICpyZWM7Ci0JdW5zaWduZWQgbG9uZyB0eXBlID0gZW5hYmxlID8gRlRSQUNFX0ZMX0ZJTFRFUiA6IEZUUkFDRV9GTF9OT1RSQUNFOwotCiAJbXV0ZXhfbG9jaygmZnRyYWNlX2xvY2spOwotCWlmIChlbmFibGUpCi0JCWZ0cmFjZV9maWx0ZXJlZCA9IDA7Ci0JZG9fZm9yX2VhY2hfZnRyYWNlX3JlYyhwZywgcmVjKSB7Ci0JCWlmIChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZBSUxFRCkKLQkJCWNvbnRpbnVlOwotCQlyZWMtPmZsYWdzICY9IH50eXBlOwotCX0gd2hpbGVfZm9yX2VhY2hfZnRyYWNlX3JlYygpOworCWZ0cmFjZV9oYXNoX2NsZWFyKGhhc2gpOwogCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOwogfQogCiBzdGF0aWMgaW50Ci1mdHJhY2VfcmVnZXhfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGVuYWJsZSkKK2Z0cmFjZV9yZWdleF9vcGVuKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIGludCBmbGFnLAorCQkgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBmdHJhY2VfaXRlcmF0b3IgKml0ZXI7CisJc3RydWN0IGZ0cmFjZV9oYXNoICpoYXNoOwogCWludCByZXQgPSAwOwogCiAJaWYgKHVubGlrZWx5KGZ0cmFjZV9kaXNhYmxlZCkpCkBAIC0xNjgyLDIxICsyMTg0LDQyIEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAorCWlmIChmbGFnICYgRlRSQUNFX0lURVJfTk9UUkFDRSkKKwkJaGFzaCA9IG9wcy0+bm90cmFjZV9oYXNoOworCWVsc2UKKwkJaGFzaCA9IG9wcy0+ZmlsdGVyX2hhc2g7CisKKwlpdGVyLT5vcHMgPSBvcHM7CisJaXRlci0+ZmxhZ3MgPSBmbGFnOworCisJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7CisJCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKKwkJaXRlci0+aGFzaCA9IGFsbG9jX2FuZF9jb3B5X2Z0cmFjZV9oYXNoKEZUUkFDRV9IQVNIX0RFRkFVTFRfQklUUywgaGFzaCk7CisJCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOworCisJCWlmICghaXRlci0+aGFzaCkgeworCQkJdHJhY2VfcGFyc2VyX3B1dCgmaXRlci0+cGFyc2VyKTsKKwkJCWtmcmVlKGl0ZXIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisKIAltdXRleF9sb2NrKCZmdHJhY2VfcmVnZXhfbG9jayk7CisKIAlpZiAoKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSAmJgogCSAgICAoZmlsZS0+Zl9mbGFncyAmIE9fVFJVTkMpKQotCQlmdHJhY2VfZmlsdGVyX3Jlc2V0KGVuYWJsZSk7CisJCWZ0cmFjZV9maWx0ZXJfcmVzZXQoaXRlci0+aGFzaCk7CiAKIAlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgewogCQlpdGVyLT5wZyA9IGZ0cmFjZV9wYWdlc19zdGFydDsKLQkJaXRlci0+ZmxhZ3MgPSBlbmFibGUgPyBGVFJBQ0VfSVRFUl9GSUxURVIgOgotCQkJRlRSQUNFX0lURVJfTk9UUkFDRTsKIAogCQlyZXQgPSBzZXFfb3BlbihmaWxlLCAmc2hvd19mdHJhY2Vfc2VxX29wcyk7CiAJCWlmICghcmV0KSB7CiAJCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJCQltLT5wcml2YXRlID0gaXRlcjsKIAkJfSBlbHNlIHsKKwkJCS8qIEZhaWxlZCAqLworCQkJZnJlZV9mdHJhY2VfaGFzaChpdGVyLT5oYXNoKTsKIAkJCXRyYWNlX3BhcnNlcl9wdXQoJml0ZXItPnBhcnNlcik7CiAJCQlrZnJlZShpdGVyKTsKIAkJfQpAQCAtMTcxMCwxMyArMjIzMywxNSBAQAogc3RhdGljIGludAogZnRyYWNlX2ZpbHRlcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXJldHVybiBmdHJhY2VfcmVnZXhfb3Blbihpbm9kZSwgZmlsZSwgMSk7CisJcmV0dXJuIGZ0cmFjZV9yZWdleF9vcGVuKCZnbG9iYWxfb3BzLCBGVFJBQ0VfSVRFUl9GSUxURVIsCisJCQkJIGlub2RlLCBmaWxlKTsKIH0KIAogc3RhdGljIGludAogZnRyYWNlX25vdHJhY2Vfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gZnRyYWNlX3JlZ2V4X29wZW4oaW5vZGUsIGZpbGUsIDApOworCXJldHVybiBmdHJhY2VfcmVnZXhfb3BlbigmZ2xvYmFsX29wcywgRlRSQUNFX0lURVJfTk9UUkFDRSwKKwkJCQkgaW5vZGUsIGZpbGUpOwogfQogCiBzdGF0aWMgbG9mZl90CkBAIC0xNzYxLDg2ICsyMjg2LDk5IEBACiB9CiAKIHN0YXRpYyBpbnQKLWZ0cmFjZV9tYXRjaF9yZWNvcmQoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgY2hhciAqcmVnZXgsIGludCBsZW4sIGludCB0eXBlKQorZW50ZXJfcmVjb3JkKHN0cnVjdCBmdHJhY2VfaGFzaCAqaGFzaCwgc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgaW50IG5vdCkKIHsKLQljaGFyIHN0cltLU1lNX1NZTUJPTF9MRU5dOworCXN0cnVjdCBmdHJhY2VfZnVuY19lbnRyeSAqZW50cnk7CisJaW50IHJldCA9IDA7CiAKLQlrYWxsc3ltc19sb29rdXAocmVjLT5pcCwgTlVMTCwgTlVMTCwgTlVMTCwgc3RyKTsKLQlyZXR1cm4gZnRyYWNlX21hdGNoKHN0ciwgcmVnZXgsIGxlbiwgdHlwZSk7Ci19CisJZW50cnkgPSBmdHJhY2VfbG9va3VwX2lwKGhhc2gsIHJlYy0+aXApOworCWlmIChub3QpIHsKKwkJLyogRG8gbm90aGluZyBpZiBpdCBkb2Vzbid0IGV4aXN0ICovCisJCWlmICghZW50cnkpCisJCQlyZXR1cm4gMDsKIAotc3RhdGljIGludCBmdHJhY2VfbWF0Y2hfcmVjb3JkcyhjaGFyICpidWZmLCBpbnQgbGVuLCBpbnQgZW5hYmxlKQotewotCXVuc2lnbmVkIGludCBzZWFyY2hfbGVuOwotCXN0cnVjdCBmdHJhY2VfcGFnZSAqcGc7Ci0Jc3RydWN0IGR5bl9mdHJhY2UgKnJlYzsKLQl1bnNpZ25lZCBsb25nIGZsYWc7Ci0JY2hhciAqc2VhcmNoOwotCWludCB0eXBlOwotCWludCBub3Q7Ci0JaW50IGZvdW5kID0gMDsKKwkJZnJlZV9oYXNoX2VudHJ5KGhhc2gsIGVudHJ5KTsKKwl9IGVsc2UgeworCQkvKiBEbyBub3RoaW5nIGlmIGl0IGV4aXN0cyAqLworCQlpZiAoZW50cnkpCisJCQlyZXR1cm4gMDsKIAotCWZsYWcgPSBlbmFibGUgPyBGVFJBQ0VfRkxfRklMVEVSIDogRlRSQUNFX0ZMX05PVFJBQ0U7Ci0JdHlwZSA9IGZpbHRlcl9wYXJzZV9yZWdleChidWZmLCBsZW4sICZzZWFyY2gsICZub3QpOwotCi0Jc2VhcmNoX2xlbiA9IHN0cmxlbihzZWFyY2gpOwotCi0JbXV0ZXhfbG9jaygmZnRyYWNlX2xvY2spOwotCWRvX2Zvcl9lYWNoX2Z0cmFjZV9yZWMocGcsIHJlYykgewotCi0JCWlmIChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZBSUxFRCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChmdHJhY2VfbWF0Y2hfcmVjb3JkKHJlYywgc2VhcmNoLCBzZWFyY2hfbGVuLCB0eXBlKSkgewotCQkJaWYgKG5vdCkKLQkJCQlyZWMtPmZsYWdzICY9IH5mbGFnOwotCQkJZWxzZQotCQkJCXJlYy0+ZmxhZ3MgfD0gZmxhZzsKLQkJCWZvdW5kID0gMTsKLQkJfQotCQkvKgotCQkgKiBPbmx5IGVuYWJsZSBmaWx0ZXJpbmcgaWYgd2UgaGF2ZSBhIGZ1bmN0aW9uIHRoYXQKLQkJICogaXMgZmlsdGVyZWQgb24uCi0JCSAqLwotCQlpZiAoZW5hYmxlICYmIChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZJTFRFUikpCi0JCQlmdHJhY2VfZmlsdGVyZWQgPSAxOwotCX0gd2hpbGVfZm9yX2VhY2hfZnRyYWNlX3JlYygpOwotCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOwotCi0JcmV0dXJuIGZvdW5kOworCQlyZXQgPSBhZGRfaGFzaF9lbnRyeShoYXNoLCByZWMtPmlwKTsKKwl9CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludAotZnRyYWNlX21hdGNoX21vZHVsZV9yZWNvcmQoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgY2hhciAqbW9kLAotCQkJICAgY2hhciAqcmVnZXgsIGludCBsZW4sIGludCB0eXBlKQorZnRyYWNlX21hdGNoX3JlY29yZChzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLCBjaGFyICptb2QsCisJCSAgICBjaGFyICpyZWdleCwgaW50IGxlbiwgaW50IHR5cGUpCiB7CiAJY2hhciBzdHJbS1NZTV9TWU1CT0xfTEVOXTsKIAljaGFyICptb2RuYW1lOwogCiAJa2FsbHN5bXNfbG9va3VwKHJlYy0+aXAsIE5VTEwsIE5VTEwsICZtb2RuYW1lLCBzdHIpOwogCi0JaWYgKCFtb2RuYW1lIHx8IHN0cmNtcChtb2RuYW1lLCBtb2QpKQotCQlyZXR1cm4gMDsKKwlpZiAobW9kKSB7CisJCS8qIG1vZHVsZSBsb29rdXAgcmVxdWlyZXMgbWF0Y2hpbmcgdGhlIG1vZHVsZSAqLworCQlpZiAoIW1vZG5hbWUgfHwgc3RyY21wKG1vZG5hbWUsIG1vZCkpCisJCQlyZXR1cm4gMDsKIAotCS8qIGJsYW5rIHNlYXJjaCBtZWFucyB0byBtYXRjaCBhbGwgZnVuY3MgaW4gdGhlIG1vZCAqLwotCWlmIChsZW4pCi0JCXJldHVybiBmdHJhY2VfbWF0Y2goc3RyLCByZWdleCwgbGVuLCB0eXBlKTsKLQllbHNlCi0JCXJldHVybiAxOworCQkvKiBibGFuayBzZWFyY2ggbWVhbnMgdG8gbWF0Y2ggYWxsIGZ1bmNzIGluIHRoZSBtb2QgKi8KKwkJaWYgKCFsZW4pCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gZnRyYWNlX21hdGNoKHN0ciwgcmVnZXgsIGxlbiwgdHlwZSk7CiB9CiAKLXN0YXRpYyBpbnQgZnRyYWNlX21hdGNoX21vZHVsZV9yZWNvcmRzKGNoYXIgKmJ1ZmYsIGNoYXIgKm1vZCwgaW50IGVuYWJsZSkKK3N0YXRpYyBpbnQKK21hdGNoX3JlY29yZHMoc3RydWN0IGZ0cmFjZV9oYXNoICpoYXNoLCBjaGFyICpidWZmLAorCSAgICAgIGludCBsZW4sIGNoYXIgKm1vZCwgaW50IG5vdCkKIHsKIAl1bnNpZ25lZCBzZWFyY2hfbGVuID0gMDsKIAlzdHJ1Y3QgZnRyYWNlX3BhZ2UgKnBnOwogCXN0cnVjdCBkeW5fZnRyYWNlICpyZWM7CiAJaW50IHR5cGUgPSBNQVRDSF9GVUxMOwogCWNoYXIgKnNlYXJjaCA9IGJ1ZmY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnOwotCWludCBub3QgPSAwOwogCWludCBmb3VuZCA9IDA7CisJaW50IHJldDsKIAotCWZsYWcgPSBlbmFibGUgPyBGVFJBQ0VfRkxfRklMVEVSIDogRlRSQUNFX0ZMX05PVFJBQ0U7CisJaWYgKGxlbikgeworCQl0eXBlID0gZmlsdGVyX3BhcnNlX3JlZ2V4KGJ1ZmYsIGxlbiwgJnNlYXJjaCwgJm5vdCk7CisJCXNlYXJjaF9sZW4gPSBzdHJsZW4oc2VhcmNoKTsKKwl9CisKKwltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CisKKwlpZiAodW5saWtlbHkoZnRyYWNlX2Rpc2FibGVkKSkKKwkJZ290byBvdXRfdW5sb2NrOworCisJZG9fZm9yX2VhY2hfZnRyYWNlX3JlYyhwZywgcmVjKSB7CisKKwkJaWYgKGZ0cmFjZV9tYXRjaF9yZWNvcmQocmVjLCBtb2QsIHNlYXJjaCwgc2VhcmNoX2xlbiwgdHlwZSkpIHsKKwkJCXJldCA9IGVudGVyX3JlY29yZChoYXNoLCByZWMsIG5vdCk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCWZvdW5kID0gcmV0OworCQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCX0KKwkJCWZvdW5kID0gMTsKKwkJfQorCX0gd2hpbGVfZm9yX2VhY2hfZnRyYWNlX3JlYygpOworIG91dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7CisKKwlyZXR1cm4gZm91bmQ7Cit9CisKK3N0YXRpYyBpbnQKK2Z0cmFjZV9tYXRjaF9yZWNvcmRzKHN0cnVjdCBmdHJhY2VfaGFzaCAqaGFzaCwgY2hhciAqYnVmZiwgaW50IGxlbikKK3sKKwlyZXR1cm4gbWF0Y2hfcmVjb3JkcyhoYXNoLCBidWZmLCBsZW4sIE5VTEwsIDApOworfQorCitzdGF0aWMgaW50CitmdHJhY2VfbWF0Y2hfbW9kdWxlX3JlY29yZHMoc3RydWN0IGZ0cmFjZV9oYXNoICpoYXNoLCBjaGFyICpidWZmLCBjaGFyICptb2QpCit7CisJaW50IG5vdCA9IDA7CiAKIAkvKiBibGFuayBvciAnKicgbWVhbiB0aGUgc2FtZSAqLwogCWlmIChzdHJjbXAoYnVmZiwgIioiKSA9PSAwKQpAQCAtMTg1MiwzMiArMjM5MCw3IEBACiAJCW5vdCA9IDE7CiAJfQogCi0JaWYgKHN0cmxlbihidWZmKSkgewotCQl0eXBlID0gZmlsdGVyX3BhcnNlX3JlZ2V4KGJ1ZmYsIHN0cmxlbihidWZmKSwgJnNlYXJjaCwgJm5vdCk7Ci0JCXNlYXJjaF9sZW4gPSBzdHJsZW4oc2VhcmNoKTsKLQl9Ci0KLQltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7Ci0JZG9fZm9yX2VhY2hfZnRyYWNlX3JlYyhwZywgcmVjKSB7Ci0KLQkJaWYgKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRkFJTEVEKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGZ0cmFjZV9tYXRjaF9tb2R1bGVfcmVjb3JkKHJlYywgbW9kLAotCQkJCQkgICAgICAgc2VhcmNoLCBzZWFyY2hfbGVuLCB0eXBlKSkgewotCQkJaWYgKG5vdCkKLQkJCQlyZWMtPmZsYWdzICY9IH5mbGFnOwotCQkJZWxzZQotCQkJCXJlYy0+ZmxhZ3MgfD0gZmxhZzsKLQkJCWZvdW5kID0gMTsKLQkJfQotCQlpZiAoZW5hYmxlICYmIChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZJTFRFUikpCi0JCQlmdHJhY2VfZmlsdGVyZWQgPSAxOwotCi0JfSB3aGlsZV9mb3JfZWFjaF9mdHJhY2VfcmVjKCk7Ci0JbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7Ci0KLQlyZXR1cm4gZm91bmQ7CisJcmV0dXJuIG1hdGNoX3JlY29yZHMoaGFzaCwgYnVmZiwgc3RybGVuKGJ1ZmYpLCBtb2QsIG5vdCk7CiB9CiAKIC8qCkBAIC0xODg4LDcgKzI0MDEsMTAgQEAKIHN0YXRpYyBpbnQKIGZ0cmFjZV9tb2RfY2FsbGJhY2soY2hhciAqZnVuYywgY2hhciAqY21kLCBjaGFyICpwYXJhbSwgaW50IGVuYWJsZSkKIHsKKwlzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzID0gJmdsb2JhbF9vcHM7CisJc3RydWN0IGZ0cmFjZV9oYXNoICpoYXNoOwogCWNoYXIgKm1vZDsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKIAogCS8qCiAJICogY21kID09ICdtb2QnIGJlY2F1c2Ugd2Ugb25seSByZWdpc3RlcmVkIHRoaXMgZnVuYwpAQCAtMTkwMCwxNSArMjQxNiwyNCBAQAogCiAJLyogd2UgbXVzdCBoYXZlIGEgbW9kdWxlIG5hbWUgKi8KIAlpZiAoIXBhcmFtKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIHJldDsKIAogCW1vZCA9IHN0cnNlcCgmcGFyYW0sICI6Iik7CiAJaWYgKCFzdHJsZW4obW9kKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiByZXQ7CiAKLQlpZiAoZnRyYWNlX21hdGNoX21vZHVsZV9yZWNvcmRzKGZ1bmMsIG1vZCwgZW5hYmxlKSkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIC1FSU5WQUw7CisJaWYgKGVuYWJsZSkKKwkJaGFzaCA9IG9wcy0+ZmlsdGVyX2hhc2g7CisJZWxzZQorCQloYXNoID0gb3BzLT5ub3RyYWNlX2hhc2g7CisKKwlyZXQgPSBmdHJhY2VfbWF0Y2hfbW9kdWxlX3JlY29yZHMoaGFzaCwgZnVuYywgbW9kKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gLUVJTlZBTDsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9mdW5jX2NvbW1hbmQgZnRyYWNlX21vZF9jbWQgPSB7CkBAIC0xOTU5LDYgKzI0ODQsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2VuYWJsZV9mdHJhY2VfZnVuY3Rpb25fcHJvYmUodm9pZCkKIHsKKwlpbnQgcmV0OwogCWludCBpOwogCiAJaWYgKGZ0cmFjZV9wcm9iZV9yZWdpc3RlcmVkKQpAQCAtMTk3MywxMyArMjQ5OSwxNiBAQAogCWlmIChpID09IEZUUkFDRV9GVU5DX0hBU0hTSVpFKQogCQlyZXR1cm47CiAKLQlfX3JlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbigmdHJhY2VfcHJvYmVfb3BzKTsKLQlmdHJhY2Vfc3RhcnR1cCgwKTsKKwlyZXQgPSBfX3JlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbigmdHJhY2VfcHJvYmVfb3BzKTsKKwlpZiAoIXJldCkKKwkJZnRyYWNlX3N0YXJ0dXAoJnRyYWNlX3Byb2JlX29wcywgMCk7CisKIAlmdHJhY2VfcHJvYmVfcmVnaXN0ZXJlZCA9IDE7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGlzYWJsZV9mdHJhY2VfZnVuY3Rpb25fcHJvYmUodm9pZCkKIHsKKwlpbnQgcmV0OwogCWludCBpOwogCiAJaWYgKCFmdHJhY2VfcHJvYmVfcmVnaXN0ZXJlZCkKQEAgLTE5OTIsOCArMjUyMSwxMCBAQAogCX0KIAogCS8qIG5vIG1vcmUgZnVuY3MgbGVmdCAqLwotCV9fdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oJnRyYWNlX3Byb2JlX29wcyk7Ci0JZnRyYWNlX3NodXRkb3duKDApOworCXJldCA9IF9fdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oJnRyYWNlX3Byb2JlX29wcyk7CisJaWYgKCFyZXQpCisJCWZ0cmFjZV9zaHV0ZG93bigmdHJhY2VfcHJvYmVfb3BzLCAwKTsKKwogCWZ0cmFjZV9wcm9iZV9yZWdpc3RlcmVkID0gMDsKIH0KIApAQCAtMjAyOSwxMiArMjU2MCwxMyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKKworCWlmICh1bmxpa2VseShmdHJhY2VfZGlzYWJsZWQpKQorCQlnb3RvIG91dF91bmxvY2s7CisKIAlkb19mb3JfZWFjaF9mdHJhY2VfcmVjKHBnLCByZWMpIHsKIAotCQlpZiAocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GQUlMRUQpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIWZ0cmFjZV9tYXRjaF9yZWNvcmQocmVjLCBzZWFyY2gsIGxlbiwgdHlwZSkpCisJCWlmICghZnRyYWNlX21hdGNoX3JlY29yZChyZWMsIE5VTEwsIHNlYXJjaCwgbGVuLCB0eXBlKSkKIAkJCWNvbnRpbnVlOwogCiAJCWVudHJ5ID0ga21hbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7CkBAIC0yMTk1LDE4ICsyNzI3LDIyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBmdHJhY2VfcHJvY2Vzc19yZWdleChjaGFyICpidWZmLCBpbnQgbGVuLCBpbnQgZW5hYmxlKQorc3RhdGljIGludCBmdHJhY2VfcHJvY2Vzc19yZWdleChzdHJ1Y3QgZnRyYWNlX2hhc2ggKmhhc2gsCisJCQkJY2hhciAqYnVmZiwgaW50IGxlbiwgaW50IGVuYWJsZSkKIHsKIAljaGFyICpmdW5jLCAqY29tbWFuZCwgKm5leHQgPSBidWZmOwogCXN0cnVjdCBmdHJhY2VfZnVuY19jb21tYW5kICpwOwotCWludCByZXQgPSAtRUlOVkFMOworCWludCByZXQ7CiAKIAlmdW5jID0gc3Ryc2VwKCZuZXh0LCAiOiIpOwogCiAJaWYgKCFuZXh0KSB7Ci0JCWlmIChmdHJhY2VfbWF0Y2hfcmVjb3JkcyhmdW5jLCBsZW4sIGVuYWJsZSkpCi0JCQlyZXR1cm4gMDsKLQkJcmV0dXJuIHJldDsKKwkJcmV0ID0gZnRyYWNlX21hdGNoX3JlY29yZHMoaGFzaCwgZnVuYywgbGVuKTsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSAtRUlOVkFMOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCXJldHVybiAwOwogCX0KIAogCS8qIGNvbW1hbmQgZm91bmQgKi8KQEAgLTIyMzksNiArMjc3NSwxMCBAQAogCiAJbXV0ZXhfbG9jaygmZnRyYWNlX3JlZ2V4X2xvY2spOwogCisJcmV0ID0gLUVOT0RFVjsKKwlpZiAodW5saWtlbHkoZnRyYWNlX2Rpc2FibGVkKSkKKwkJZ290byBvdXRfdW5sb2NrOworCiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKIAkJc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCQlpdGVyID0gbS0+cHJpdmF0ZTsKQEAgLTIyNTAsNyArMjc5MCw3IEBACiAKIAlpZiAocmVhZCA+PSAwICYmIHRyYWNlX3BhcnNlcl9sb2FkZWQocGFyc2VyKSAmJgogCSAgICAhdHJhY2VfcGFyc2VyX2NvbnQocGFyc2VyKSkgewotCQlyZXQgPSBmdHJhY2VfcHJvY2Vzc19yZWdleChwYXJzZXItPmJ1ZmZlciwKKwkJcmV0ID0gZnRyYWNlX3Byb2Nlc3NfcmVnZXgoaXRlci0+aGFzaCwgcGFyc2VyLT5idWZmZXIsCiAJCQkJCSAgIHBhcnNlci0+aWR4LCBlbmFibGUpOwogCQl0cmFjZV9wYXJzZXJfY2xlYXIocGFyc2VyKTsKIAkJaWYgKHJldCkKQEAgLTIyNzgsMjIgKzI4MTgsNDkgQEAKIAlyZXR1cm4gZnRyYWNlX3JlZ2V4X3dyaXRlKGZpbGUsIHVidWYsIGNudCwgcHBvcywgMCk7CiB9CiAKLXN0YXRpYyB2b2lkCi1mdHJhY2Vfc2V0X3JlZ2V4KHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbiwgaW50IHJlc2V0LCBpbnQgZW5hYmxlKQorc3RhdGljIGludAorZnRyYWNlX3NldF9yZWdleChzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4sCisJCSBpbnQgcmVzZXQsIGludCBlbmFibGUpCiB7CisJc3RydWN0IGZ0cmFjZV9oYXNoICoqb3JpZ19oYXNoOworCXN0cnVjdCBmdHJhY2VfaGFzaCAqaGFzaDsKKwlpbnQgcmV0OworCisJLyogQWxsIGdsb2JhbCBvcHMgdXNlcyB0aGUgZ2xvYmFsIG9wcyBmaWx0ZXJzICovCisJaWYgKG9wcy0+ZmxhZ3MgJiBGVFJBQ0VfT1BTX0ZMX0dMT0JBTCkKKwkJb3BzID0gJmdsb2JhbF9vcHM7CisKIAlpZiAodW5saWtlbHkoZnRyYWNlX2Rpc2FibGVkKSkKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChlbmFibGUpCisJCW9yaWdfaGFzaCA9ICZvcHMtPmZpbHRlcl9oYXNoOworCWVsc2UKKwkJb3JpZ19oYXNoID0gJm9wcy0+bm90cmFjZV9oYXNoOworCisJaGFzaCA9IGFsbG9jX2FuZF9jb3B5X2Z0cmFjZV9oYXNoKEZUUkFDRV9IQVNIX0RFRkFVTFRfQklUUywgKm9yaWdfaGFzaCk7CisJaWYgKCFoYXNoKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCW11dGV4X2xvY2soJmZ0cmFjZV9yZWdleF9sb2NrKTsKIAlpZiAocmVzZXQpCi0JCWZ0cmFjZV9maWx0ZXJfcmVzZXQoZW5hYmxlKTsKKwkJZnRyYWNlX2ZpbHRlcl9yZXNldChoYXNoKTsKIAlpZiAoYnVmKQotCQlmdHJhY2VfbWF0Y2hfcmVjb3JkcyhidWYsIGxlbiwgZW5hYmxlKTsKKwkJZnRyYWNlX21hdGNoX3JlY29yZHMoaGFzaCwgYnVmLCBsZW4pOworCisJbXV0ZXhfbG9jaygmZnRyYWNlX2xvY2spOworCXJldCA9IGZ0cmFjZV9oYXNoX21vdmUob3JpZ19oYXNoLCBoYXNoKTsKKwltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKKwogCW11dGV4X3VubG9jaygmZnRyYWNlX3JlZ2V4X2xvY2spOworCisJZnJlZV9mdHJhY2VfaGFzaChoYXNoKTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKICAqIGZ0cmFjZV9zZXRfZmlsdGVyIC0gc2V0IGEgZnVuY3Rpb24gdG8gZmlsdGVyIG9uIGluIGZ0cmFjZQorICogQG9wcyAtIHRoZSBvcHMgdG8gc2V0IHRoZSBmaWx0ZXIgd2l0aAogICogQGJ1ZiAtIHRoZSBzdHJpbmcgdGhhdCBob2xkcyB0aGUgZnVuY3Rpb24gZmlsdGVyIHRleHQuCiAgKiBAbGVuIC0gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLgogICogQHJlc2V0IC0gbm9uIHplcm8gdG8gcmVzZXQgYWxsIGZpbHRlcnMgYmVmb3JlIGFwcGx5aW5nIHRoaXMgZmlsdGVyLgpAQCAtMjMwMSwxMyArMjg2OCwxNiBAQAogICogRmlsdGVycyBkZW5vdGUgd2hpY2ggZnVuY3Rpb25zIHNob3VsZCBiZSBlbmFibGVkIHdoZW4gdHJhY2luZyBpcyBlbmFibGVkLgogICogSWYgQGJ1ZiBpcyBOVUxMIGFuZCByZXNldCBpcyBzZXQsIGFsbCBmdW5jdGlvbnMgd2lsbCBiZSBlbmFibGVkIGZvciB0cmFjaW5nLgogICovCi12b2lkIGZ0cmFjZV9zZXRfZmlsdGVyKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbiwgaW50IHJlc2V0KQordm9pZCBmdHJhY2Vfc2V0X2ZpbHRlcihzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCB1bnNpZ25lZCBjaGFyICpidWYsCisJCSAgICAgICBpbnQgbGVuLCBpbnQgcmVzZXQpCiB7Ci0JZnRyYWNlX3NldF9yZWdleChidWYsIGxlbiwgcmVzZXQsIDEpOworCWZ0cmFjZV9zZXRfcmVnZXgob3BzLCBidWYsIGxlbiwgcmVzZXQsIDEpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoZnRyYWNlX3NldF9maWx0ZXIpOwogCiAvKioKICAqIGZ0cmFjZV9zZXRfbm90cmFjZSAtIHNldCBhIGZ1bmN0aW9uIHRvIG5vdCB0cmFjZSBpbiBmdHJhY2UKKyAqIEBvcHMgLSB0aGUgb3BzIHRvIHNldCB0aGUgbm90cmFjZSBmaWx0ZXIgd2l0aAogICogQGJ1ZiAtIHRoZSBzdHJpbmcgdGhhdCBob2xkcyB0aGUgZnVuY3Rpb24gbm90cmFjZSB0ZXh0LgogICogQGxlbiAtIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZy4KICAqIEByZXNldCAtIG5vbiB6ZXJvIHRvIHJlc2V0IGFsbCBmaWx0ZXJzIGJlZm9yZSBhcHBseWluZyB0aGlzIGZpbHRlci4KQEAgLTIzMTYsMTAgKzI4ODYsNDQgQEAKICAqIGlzIGVuYWJsZWQuIElmIEBidWYgaXMgTlVMTCBhbmQgcmVzZXQgaXMgc2V0LCBhbGwgZnVuY3Rpb25zIHdpbGwgYmUgZW5hYmxlZAogICogZm9yIHRyYWNpbmcuCiAgKi8KLXZvaWQgZnRyYWNlX3NldF9ub3RyYWNlKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbiwgaW50IHJlc2V0KQordm9pZCBmdHJhY2Vfc2V0X25vdHJhY2Uoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgY2hhciAqYnVmLAorCQkJaW50IGxlbiwgaW50IHJlc2V0KQogewotCWZ0cmFjZV9zZXRfcmVnZXgoYnVmLCBsZW4sIHJlc2V0LCAwKTsKKwlmdHJhY2Vfc2V0X3JlZ2V4KG9wcywgYnVmLCBsZW4sIHJlc2V0LCAwKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGZ0cmFjZV9zZXRfbm90cmFjZSk7CisvKioKKyAqIGZ0cmFjZV9zZXRfZmlsdGVyIC0gc2V0IGEgZnVuY3Rpb24gdG8gZmlsdGVyIG9uIGluIGZ0cmFjZQorICogQG9wcyAtIHRoZSBvcHMgdG8gc2V0IHRoZSBmaWx0ZXIgd2l0aAorICogQGJ1ZiAtIHRoZSBzdHJpbmcgdGhhdCBob2xkcyB0aGUgZnVuY3Rpb24gZmlsdGVyIHRleHQuCisgKiBAbGVuIC0gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLgorICogQHJlc2V0IC0gbm9uIHplcm8gdG8gcmVzZXQgYWxsIGZpbHRlcnMgYmVmb3JlIGFwcGx5aW5nIHRoaXMgZmlsdGVyLgorICoKKyAqIEZpbHRlcnMgZGVub3RlIHdoaWNoIGZ1bmN0aW9ucyBzaG91bGQgYmUgZW5hYmxlZCB3aGVuIHRyYWNpbmcgaXMgZW5hYmxlZC4KKyAqIElmIEBidWYgaXMgTlVMTCBhbmQgcmVzZXQgaXMgc2V0LCBhbGwgZnVuY3Rpb25zIHdpbGwgYmUgZW5hYmxlZCBmb3IgdHJhY2luZy4KKyAqLwordm9pZCBmdHJhY2Vfc2V0X2dsb2JhbF9maWx0ZXIodW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuLCBpbnQgcmVzZXQpCit7CisJZnRyYWNlX3NldF9yZWdleCgmZ2xvYmFsX29wcywgYnVmLCBsZW4sIHJlc2V0LCAxKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGZ0cmFjZV9zZXRfZ2xvYmFsX2ZpbHRlcik7CisKKy8qKgorICogZnRyYWNlX3NldF9ub3RyYWNlIC0gc2V0IGEgZnVuY3Rpb24gdG8gbm90IHRyYWNlIGluIGZ0cmFjZQorICogQG9wcyAtIHRoZSBvcHMgdG8gc2V0IHRoZSBub3RyYWNlIGZpbHRlciB3aXRoCisgKiBAYnVmIC0gdGhlIHN0cmluZyB0aGF0IGhvbGRzIHRoZSBmdW5jdGlvbiBub3RyYWNlIHRleHQuCisgKiBAbGVuIC0gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLgorICogQHJlc2V0IC0gbm9uIHplcm8gdG8gcmVzZXQgYWxsIGZpbHRlcnMgYmVmb3JlIGFwcGx5aW5nIHRoaXMgZmlsdGVyLgorICoKKyAqIE5vdHJhY2UgRmlsdGVycyBkZW5vdGUgd2hpY2ggZnVuY3Rpb25zIHNob3VsZCBub3QgYmUgZW5hYmxlZCB3aGVuIHRyYWNpbmcKKyAqIGlzIGVuYWJsZWQuIElmIEBidWYgaXMgTlVMTCBhbmQgcmVzZXQgaXMgc2V0LCBhbGwgZnVuY3Rpb25zIHdpbGwgYmUgZW5hYmxlZAorICogZm9yIHRyYWNpbmcuCisgKi8KK3ZvaWQgZnRyYWNlX3NldF9nbG9iYWxfbm90cmFjZSh1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4sIGludCByZXNldCkKK3sKKwlmdHJhY2Vfc2V0X3JlZ2V4KCZnbG9iYWxfb3BzLCBidWYsIGxlbiwgcmVzZXQsIDApOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZnRyYWNlX3NldF9nbG9iYWxfbm90cmFjZSk7CiAKIC8qCiAgKiBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIHRvIGFsbG93IHVzZXJzIHRvIHNldCBmaWx0ZXJzIG9uIGJvb3QgdXAuCkBAIC0yMzcwLDIyICsyOTc0LDIzIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLwogCi1zdGF0aWMgdm9pZCBfX2luaXQgc2V0X2Z0cmFjZV9lYXJseV9maWx0ZXIoY2hhciAqYnVmLCBpbnQgZW5hYmxlKQorc3RhdGljIHZvaWQgX19pbml0CitzZXRfZnRyYWNlX2Vhcmx5X2ZpbHRlcihzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCBjaGFyICpidWYsIGludCBlbmFibGUpCiB7CiAJY2hhciAqZnVuYzsKIAogCXdoaWxlIChidWYpIHsKIAkJZnVuYyA9IHN0cnNlcCgmYnVmLCAiLCIpOwotCQlmdHJhY2Vfc2V0X3JlZ2V4KGZ1bmMsIHN0cmxlbihmdW5jKSwgMCwgZW5hYmxlKTsKKwkJZnRyYWNlX3NldF9yZWdleChvcHMsIGZ1bmMsIHN0cmxlbihmdW5jKSwgMCwgZW5hYmxlKTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzZXRfZnRyYWNlX2Vhcmx5X2ZpbHRlcnModm9pZCkKIHsKIAlpZiAoZnRyYWNlX2ZpbHRlcl9idWZbMF0pCi0JCXNldF9mdHJhY2VfZWFybHlfZmlsdGVyKGZ0cmFjZV9maWx0ZXJfYnVmLCAxKTsKKwkJc2V0X2Z0cmFjZV9lYXJseV9maWx0ZXIoJmdsb2JhbF9vcHMsIGZ0cmFjZV9maWx0ZXJfYnVmLCAxKTsKIAlpZiAoZnRyYWNlX25vdHJhY2VfYnVmWzBdKQotCQlzZXRfZnRyYWNlX2Vhcmx5X2ZpbHRlcihmdHJhY2Vfbm90cmFjZV9idWYsIDApOworCQlzZXRfZnRyYWNlX2Vhcmx5X2ZpbHRlcigmZ2xvYmFsX29wcywgZnRyYWNlX25vdHJhY2VfYnVmLCAwKTsKICNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCiAJaWYgKGZ0cmFjZV9ncmFwaF9idWZbMF0pCiAJCXNldF9mdHJhY2VfZWFybHlfZ3JhcGgoZnRyYWNlX2dyYXBoX2J1Zik7CkBAIC0yMzkzLDExICsyOTk4LDE0IEBACiB9CiAKIHN0YXRpYyBpbnQKLWZ0cmFjZV9yZWdleF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgZW5hYmxlKQorZnRyYWNlX3JlZ2V4X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IHNlcV9maWxlICptID0gKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZnRyYWNlX2l0ZXJhdG9yICppdGVyOworCXN0cnVjdCBmdHJhY2VfaGFzaCAqKm9yaWdfaGFzaDsKIAlzdHJ1Y3QgdHJhY2VfcGFyc2VyICpwYXJzZXI7CisJaW50IGZpbHRlcl9oYXNoOworCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZmdHJhY2VfcmVnZXhfbG9jayk7CiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKQEAgLTI0MTAsMzMgKzMwMTgsNDEgQEAKIAlwYXJzZXIgPSAmaXRlci0+cGFyc2VyOwogCWlmICh0cmFjZV9wYXJzZXJfbG9hZGVkKHBhcnNlcikpIHsKIAkJcGFyc2VyLT5idWZmZXJbcGFyc2VyLT5pZHhdID0gMDsKLQkJZnRyYWNlX21hdGNoX3JlY29yZHMocGFyc2VyLT5idWZmZXIsIHBhcnNlci0+aWR4LCBlbmFibGUpOworCQlmdHJhY2VfbWF0Y2hfcmVjb3JkcyhpdGVyLT5oYXNoLCBwYXJzZXItPmJ1ZmZlciwgcGFyc2VyLT5pZHgpOwogCX0KIAotCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKLQlpZiAoZnRyYWNlX3N0YXJ0X3VwICYmIGZ0cmFjZV9lbmFibGVkKQotCQlmdHJhY2VfcnVuX3VwZGF0ZV9jb2RlKEZUUkFDRV9FTkFCTEVfQ0FMTFMpOwotCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOwotCiAJdHJhY2VfcGFyc2VyX3B1dChwYXJzZXIpOworCisJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7CisJCWZpbHRlcl9oYXNoID0gISEoaXRlci0+ZmxhZ3MgJiBGVFJBQ0VfSVRFUl9GSUxURVIpOworCisJCWlmIChmaWx0ZXJfaGFzaCkKKwkJCW9yaWdfaGFzaCA9ICZpdGVyLT5vcHMtPmZpbHRlcl9oYXNoOworCQllbHNlCisJCQlvcmlnX2hhc2ggPSAmaXRlci0+b3BzLT5ub3RyYWNlX2hhc2g7CisKKwkJbXV0ZXhfbG9jaygmZnRyYWNlX2xvY2spOworCQkvKgorCQkgKiBSZW1vdmUgdGhlIGN1cnJlbnQgc2V0LCB1cGRhdGUgdGhlIGhhc2ggYW5kIGFkZAorCQkgKiB0aGVtIGJhY2suCisJCSAqLworCQlmdHJhY2VfaGFzaF9yZWNfZGlzYWJsZShpdGVyLT5vcHMsIGZpbHRlcl9oYXNoKTsKKwkJcmV0ID0gZnRyYWNlX2hhc2hfbW92ZShvcmlnX2hhc2gsIGl0ZXItPmhhc2gpOworCQlpZiAoIXJldCkgeworCQkJZnRyYWNlX2hhc2hfcmVjX2VuYWJsZShpdGVyLT5vcHMsIGZpbHRlcl9oYXNoKTsKKwkJCWlmIChpdGVyLT5vcHMtPmZsYWdzICYgRlRSQUNFX09QU19GTF9FTkFCTEVECisJCQkgICAgJiYgZnRyYWNlX2VuYWJsZWQpCisJCQkJZnRyYWNlX3J1bl91cGRhdGVfY29kZShGVFJBQ0VfRU5BQkxFX0NBTExTKTsKKwkJfQorCQltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKKwl9CisJZnJlZV9mdHJhY2VfaGFzaChpdGVyLT5oYXNoKTsKIAlrZnJlZShpdGVyKTsKIAogCW11dGV4X3VubG9jaygmZnRyYWNlX3JlZ2V4X2xvY2spOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1mdHJhY2VfZmlsdGVyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIGZ0cmFjZV9yZWdleF9yZWxlYXNlKGlub2RlLCBmaWxlLCAxKTsKLX0KLQotc3RhdGljIGludAotZnRyYWNlX25vdHJhY2VfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gZnRyYWNlX3JlZ2V4X3JlbGVhc2UoaW5vZGUsIGZpbGUsIDApOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdHJhY2VfYXZhaWxfZm9wcyA9IHsKIAkub3BlbiA9IGZ0cmFjZV9hdmFpbF9vcGVuLAogCS5yZWFkID0gc2VxX3JlYWQsCkBAIC0yNDQ0LDggKzMwNjAsOCBAQAogCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfcHJpdmF0ZSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ0cmFjZV9mYWlsdXJlc19mb3BzID0gewotCS5vcGVuID0gZnRyYWNlX2ZhaWx1cmVzX29wZW4sCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdHJhY2VfZW5hYmxlZF9mb3BzID0geworCS5vcGVuID0gZnRyYWNlX2VuYWJsZWRfb3BlbiwKIAkucmVhZCA9IHNlcV9yZWFkLAogCS5sbHNlZWsgPSBzZXFfbHNlZWssCiAJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9wcml2YXRlLApAQCAtMjQ1Niw3ICszMDcyLDcgQEAKIAkucmVhZCA9IHNlcV9yZWFkLAogCS53cml0ZSA9IGZ0cmFjZV9maWx0ZXJfd3JpdGUsCiAJLmxsc2VlayA9IGZ0cmFjZV9yZWdleF9sc2VlaywKLQkucmVsZWFzZSA9IGZ0cmFjZV9maWx0ZXJfcmVsZWFzZSwKKwkucmVsZWFzZSA9IGZ0cmFjZV9yZWdleF9yZWxlYXNlLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnRyYWNlX25vdHJhY2VfZm9wcyA9IHsKQEAgLTI0NjQsNyArMzA4MCw3IEBACiAJLnJlYWQgPSBzZXFfcmVhZCwKIAkud3JpdGUgPSBmdHJhY2Vfbm90cmFjZV93cml0ZSwKIAkubGxzZWVrID0gZnRyYWNlX3JlZ2V4X2xzZWVrLAotCS5yZWxlYXNlID0gZnRyYWNlX25vdHJhY2VfcmVsZWFzZSwKKwkucmVsZWFzZSA9IGZ0cmFjZV9yZWdleF9yZWxlYXNlLAogfTsKIAogI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKQEAgLTI1NzMsOSArMzE4OSw2IEBACiAJYm9vbCBleGlzdHM7CiAJaW50IGk7CiAKLQlpZiAoZnRyYWNlX2Rpc2FibGVkKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCS8qIGRlY29kZSByZWdleCAqLwogCXR5cGUgPSBmaWx0ZXJfcGFyc2VfcmVnZXgoYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSwgJnNlYXJjaCwgJm5vdCk7CiAJaWYgKCFub3QgJiYgKmlkeCA+PSBGVFJBQ0VfR1JBUEhfTUFYX0ZVTkNTKQpAQCAtMjU4NCwxMiArMzE5NywxOCBAQAogCXNlYXJjaF9sZW4gPSBzdHJsZW4oc2VhcmNoKTsKIAogCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKKworCWlmICh1bmxpa2VseShmdHJhY2VfZGlzYWJsZWQpKSB7CisJCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKIAlkb19mb3JfZWFjaF9mdHJhY2VfcmVjKHBnLCByZWMpIHsKIAotCQlpZiAocmVjLT5mbGFncyAmIChGVFJBQ0VfRkxfRkFJTEVEIHwgRlRSQUNFX0ZMX0ZSRUUpKQorCQlpZiAocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GUkVFKQogCQkJY29udGludWU7CiAKLQkJaWYgKGZ0cmFjZV9tYXRjaF9yZWNvcmQocmVjLCBzZWFyY2gsIHNlYXJjaF9sZW4sIHR5cGUpKSB7CisJCWlmIChmdHJhY2VfbWF0Y2hfcmVjb3JkKHJlYywgTlVMTCwgc2VhcmNoLCBzZWFyY2hfbGVuLCB0eXBlKSkgewogCQkJLyogaWYgaXQgaXMgaW4gdGhlIGFycmF5ICovCiAJCQlleGlzdHMgPSBmYWxzZTsKIAkJCWZvciAoaSA9IDA7IGkgPCAqaWR4OyBpKyspIHsKQEAgLTI2NzksOCArMzI5OCw4IEBACiAJdHJhY2VfY3JlYXRlX2ZpbGUoImF2YWlsYWJsZV9maWx0ZXJfZnVuY3Rpb25zIiwgMDQ0NCwKIAkJCWRfdHJhY2VyLCBOVUxMLCAmZnRyYWNlX2F2YWlsX2ZvcHMpOwogCi0JdHJhY2VfY3JlYXRlX2ZpbGUoImZhaWx1cmVzIiwgMDQ0NCwKLQkJCWRfdHJhY2VyLCBOVUxMLCAmZnRyYWNlX2ZhaWx1cmVzX2ZvcHMpOworCXRyYWNlX2NyZWF0ZV9maWxlKCJlbmFibGVkX2Z1bmN0aW9ucyIsIDA0NDQsCisJCQlkX3RyYWNlciwgTlVMTCwgJmZ0cmFjZV9lbmFibGVkX2ZvcHMpOwogCiAJdHJhY2VfY3JlYXRlX2ZpbGUoInNldF9mdHJhY2VfZmlsdGVyIiwgMDY0NCwgZF90cmFjZXIsCiAJCQlOVUxMLCAmZnRyYWNlX2ZpbHRlcl9mb3BzKTsKQEAgLTI3MDMsNyArMzMyMiw2IEBACiB7CiAJdW5zaWduZWQgbG9uZyAqcDsKIAl1bnNpZ25lZCBsb25nIGFkZHI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKIAlwID0gc3RhcnQ7CkBAIC0yNzIwLDEwICszMzM4LDcgQEAKIAkJZnRyYWNlX3JlY29yZF9pcChhZGRyKTsKIAl9CiAKLQkvKiBkaXNhYmxlIGludGVycnVwdHMgdG8gcHJldmVudCBrc3RvcCBtYWNoaW5lICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWZ0cmFjZV91cGRhdGVfY29kZShtb2QpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKIAogCXJldHVybiAwOwpAQCAtMjczNSwxMCArMzM1MCwxMSBAQAogCXN0cnVjdCBkeW5fZnRyYWNlICpyZWM7CiAJc3RydWN0IGZ0cmFjZV9wYWdlICpwZzsKIAotCWlmIChmdHJhY2VfZGlzYWJsZWQpCi0JCXJldHVybjsKLQogCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKKworCWlmIChmdHJhY2VfZGlzYWJsZWQpCisJCWdvdG8gb3V0X3VubG9jazsKKwogCWRvX2Zvcl9lYWNoX2Z0cmFjZV9yZWMocGcsIHJlYykgewogCQlpZiAod2l0aGluX21vZHVsZV9jb3JlKHJlYy0+aXAsIG1vZCkpIHsKIAkJCS8qCkBAIC0yNzQ5LDYgKzMzNjUsNyBAQAogCQkJZnRyYWNlX2ZyZWVfcmVjKHJlYyk7CiAJCX0KIAl9IHdoaWxlX2Zvcl9lYWNoX2Z0cmFjZV9yZWMoKTsKKyBvdXRfdW5sb2NrOgogCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOwogfQogCkBAIC0yODM1LDYgKzM0NTIsMTAgQEAKIAogI2Vsc2UKIAorc3RhdGljIHN0cnVjdCBmdHJhY2Vfb3BzIGdsb2JhbF9vcHMgPSB7CisJLmZ1bmMJCQk9IGZ0cmFjZV9zdHViLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgZnRyYWNlX25vZHluX2luaXQodm9pZCkKIHsKIAlmdHJhY2VfZW5hYmxlZCA9IDE7CkBAIC0yODQ1LDEyICszNDY2LDM4IEBACiBzdGF0aWMgaW5saW5lIGludCBmdHJhY2VfaW5pdF9keW5fZGVidWdmcyhzdHJ1Y3QgZGVudHJ5ICpkX3RyYWNlcikgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9zdGFydHVwX2VuYWJsZShpbnQgY29tbWFuZCkgeyB9CiAvKiBLZWVwIGFzIG1hY3JvcyBzbyB3ZSBkbyBub3QgbmVlZCB0byBkZWZpbmUgdGhlIGNvbW1hbmRzICovCi0jIGRlZmluZSBmdHJhY2Vfc3RhcnR1cChjb21tYW5kKQlkbyB7IH0gd2hpbGUgKDApCi0jIGRlZmluZSBmdHJhY2Vfc2h1dGRvd24oY29tbWFuZCkJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgZnRyYWNlX3N0YXJ0dXAob3BzLCBjb21tYW5kKQlkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSBmdHJhY2Vfc2h1dGRvd24ob3BzLCBjb21tYW5kKQlkbyB7IH0gd2hpbGUgKDApCiAjIGRlZmluZSBmdHJhY2Vfc3RhcnR1cF9zeXNjdGwoKQlkbyB7IH0gd2hpbGUgKDApCiAjIGRlZmluZSBmdHJhY2Vfc2h1dGRvd25fc3lzY3RsKCkJZG8geyB9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIGludAorZnRyYWNlX29wc190ZXN0KHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIHVuc2lnbmVkIGxvbmcgaXApCit7CisJcmV0dXJuIDE7Cit9CisKICNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi8KIAorc3RhdGljIHZvaWQKK2Z0cmFjZV9vcHNfbGlzdF9mdW5jKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwKQoreworCXN0cnVjdCBmdHJhY2Vfb3BzICpvcDsKKworCS8qCisJICogU29tZSBvZiB0aGUgb3BzIG1heSBiZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQsCisJICogdGhleSBtdXN0IGJlIGZyZWVkIGFmdGVyIGEgc3luY2hyb25pemVfc2NoZWQoKS4KKwkgKi8KKwlwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpOworCW9wID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhmdHJhY2Vfb3BzX2xpc3QpOworCXdoaWxlIChvcCAhPSAmZnRyYWNlX2xpc3RfZW5kKSB7CisJCWlmIChmdHJhY2Vfb3BzX3Rlc3Qob3AsIGlwKSkKKwkJCW9wLT5mdW5jKGlwLCBwYXJlbnRfaXApOworCQlvcCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcob3AtPm5leHQpOworCX07CisJcHJlZW1wdF9lbmFibGVfbm90cmFjZSgpOworfQorCiBzdGF0aWMgdm9pZCBjbGVhcl9mdHJhY2Vfc3dhcHBlcih2b2lkKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKQEAgLTMxNDMsMTkgKzM3OTAsMjMgQEAKICAqLwogaW50IHJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbihzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKQogewotCWludCByZXQ7Ci0KLQlpZiAodW5saWtlbHkoZnRyYWNlX2Rpc2FibGVkKSkKLQkJcmV0dXJuIC0xOworCWludCByZXQgPSAtMTsKIAogCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKIAotCXJldCA9IF9fcmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKG9wcyk7Ci0JZnRyYWNlX3N0YXJ0dXAoMCk7CisJaWYgKHVubGlrZWx5KGZ0cmFjZV9kaXNhYmxlZCkpCisJCWdvdG8gb3V0X3VubG9jazsKIAorCXJldCA9IF9fcmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKG9wcyk7CisJaWYgKCFyZXQpCisJCWZ0cmFjZV9zdGFydHVwKG9wcywgMCk7CisKKworIG91dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbik7CiAKIC8qKgogICogdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24gLSB1bnJlZ2lzdGVyIGEgZnVuY3Rpb24gZm9yIHByb2ZpbGluZy4KQEAgLTMxNjksMjUgKzM4MjAsMjcgQEAKIAogCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKIAlyZXQgPSBfX3VucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKG9wcyk7Ci0JZnRyYWNlX3NodXRkb3duKDApOworCWlmICghcmV0KQorCQlmdHJhY2Vfc2h1dGRvd24ob3BzLCAwKTsKIAltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKIAogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbik7CiAKIGludAogZnRyYWNlX2VuYWJsZV9zeXNjdGwoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKIAkJICAgICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsCiAJCSAgICAgbG9mZl90ICpwcG9zKQogewotCWludCByZXQ7Ci0KLQlpZiAodW5saWtlbHkoZnRyYWNlX2Rpc2FibGVkKSkKLQkJcmV0dXJuIC1FTk9ERVY7CisJaW50IHJldCA9IC1FTk9ERVY7CiAKIAltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CiAKLQlyZXQgID0gcHJvY19kb2ludHZlYyh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CisJaWYgKHVubGlrZWx5KGZ0cmFjZV9kaXNhYmxlZCkpCisJCWdvdG8gb3V0OworCisJcmV0ID0gcHJvY19kb2ludHZlYyh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CiAKIAlpZiAocmV0IHx8ICF3cml0ZSB8fCAobGFzdF9mdHJhY2VfZW5hYmxlZCA9PSAhIWZ0cmFjZV9lbmFibGVkKSkKIAkJZ290byBvdXQ7CkBAIC0zMTk5LDExICszODUyLDExIEBACiAJCWZ0cmFjZV9zdGFydHVwX3N5c2N0bCgpOwogCiAJCS8qIHdlIGFyZSBzdGFydGluZyBmdHJhY2UgYWdhaW4gKi8KLQkJaWYgKGZ0cmFjZV9saXN0ICE9ICZmdHJhY2VfbGlzdF9lbmQpIHsKLQkJCWlmIChmdHJhY2VfbGlzdC0+bmV4dCA9PSAmZnRyYWNlX2xpc3RfZW5kKQotCQkJCWZ0cmFjZV90cmFjZV9mdW5jdGlvbiA9IGZ0cmFjZV9saXN0LT5mdW5jOworCQlpZiAoZnRyYWNlX29wc19saXN0ICE9ICZmdHJhY2VfbGlzdF9lbmQpIHsKKwkJCWlmIChmdHJhY2Vfb3BzX2xpc3QtPm5leHQgPT0gJmZ0cmFjZV9saXN0X2VuZCkKKwkJCQlmdHJhY2VfdHJhY2VfZnVuY3Rpb24gPSBmdHJhY2Vfb3BzX2xpc3QtPmZ1bmM7CiAJCQllbHNlCi0JCQkJZnRyYWNlX3RyYWNlX2Z1bmN0aW9uID0gZnRyYWNlX2xpc3RfZnVuYzsKKwkJCQlmdHJhY2VfdHJhY2VfZnVuY3Rpb24gPSBmdHJhY2Vfb3BzX2xpc3RfZnVuYzsKIAkJfQogCiAJfSBlbHNlIHsKQEAgLTMzOTIsNyArNDA0NSw3IEBACiAJZnRyYWNlX2dyYXBoX3JldHVybiA9IHJldGZ1bmM7CiAJZnRyYWNlX2dyYXBoX2VudHJ5ID0gZW50cnlmdW5jOwogCi0JZnRyYWNlX3N0YXJ0dXAoRlRSQUNFX1NUQVJUX0ZVTkNfUkVUKTsKKwlmdHJhY2Vfc3RhcnR1cCgmZ2xvYmFsX29wcywgRlRSQUNFX1NUQVJUX0ZVTkNfUkVUKTsKIAogb3V0OgogCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOwpAQCAtMzQwOSw3ICs0MDYyLDcgQEAKIAlmdHJhY2VfZ3JhcGhfYWN0aXZlLS07CiAJZnRyYWNlX2dyYXBoX3JldHVybiA9ICh0cmFjZV9mdW5jX2dyYXBoX3JldF90KWZ0cmFjZV9zdHViOwogCWZ0cmFjZV9ncmFwaF9lbnRyeSA9IGZ0cmFjZV9ncmFwaF9lbnRyeV9zdHViOwotCWZ0cmFjZV9zaHV0ZG93bihGVFJBQ0VfU1RPUF9GVU5DX1JFVCk7CisJZnRyYWNlX3NodXRkb3duKCZnbG9iYWxfb3BzLCBGVFJBQ0VfU1RPUF9GVU5DX1JFVCk7CiAJdW5yZWdpc3Rlcl9wbV9ub3RpZmllcigmZnRyYWNlX3N1c3BlbmRfbm90aWZpZXIpOwogCXVucmVnaXN0ZXJfdHJhY2Vfc2NoZWRfc3dpdGNoKGZ0cmFjZV9ncmFwaF9wcm9iZV9zY2hlZF9zd2l0Y2gsIE5VTEwpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2UuYyBiL2tlcm5lbC90cmFjZS90cmFjZS5jCmluZGV4IGQzOGMxNmEuLmVlOWM5MjEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZS5jCkBAIC0xMTEwLDYgKzExMTAsNyBAQAogCiAJZW50cnktPnByZWVtcHRfY291bnQJCT0gcGMgJiAweGZmOwogCWVudHJ5LT5waWQJCQk9ICh0c2spID8gdHNrLT5waWQgOiAwOworCWVudHJ5LT5wYWRkaW5nCQkJPSAwOwogCWVudHJ5LT5mbGFncyA9CiAjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQKIAkJKGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpID8gVFJBQ0VfRkxBR19JUlFTX09GRiA6IDApIHwKQEAgLTIwMTMsOSArMjAxNCwxMCBAQAogewogCWVudW0gcHJpbnRfbGluZV90IHJldDsKIAotCWlmIChpdGVyLT5sb3N0X2V2ZW50cykKLQkJdHJhY2Vfc2VxX3ByaW50ZigmaXRlci0+c2VxLCAiQ1BVOiVkIFtMT1NUICVsdSBFVkVOVFNdXG4iLAotCQkJCSBpdGVyLT5jcHUsIGl0ZXItPmxvc3RfZXZlbnRzKTsKKwlpZiAoaXRlci0+bG9zdF9ldmVudHMgJiYKKwkgICAgIXRyYWNlX3NlcV9wcmludGYoJml0ZXItPnNlcSwgIkNQVTolZCBbTE9TVCAlbHUgRVZFTlRTXVxuIiwKKwkJCQkgaXRlci0+Y3B1LCBpdGVyLT5sb3N0X2V2ZW50cykpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAogCWlmIChpdGVyLT50cmFjZSAmJiBpdGVyLT50cmFjZS0+cHJpbnRfbGluZSkgewogCQlyZXQgPSBpdGVyLT50cmFjZS0+cHJpbnRfbGluZShpdGVyKTsKQEAgLTMyMjksNiArMzIzMSwxNCBAQAogCiAJCWlmIChpdGVyLT5zZXEubGVuID49IGNudCkKIAkJCWJyZWFrOworCisJCS8qCisJCSAqIFNldHRpbmcgdGhlIGZ1bGwgZmxhZyBtZWFucyB3ZSByZWFjaGVkIHRoZSB0cmFjZV9zZXEgYnVmZmVyCisJCSAqIHNpemUgYW5kIHdlIHNob3VsZCBsZWF2ZSBieSBwYXJ0aWFsIG91dHB1dCBjb25kaXRpb24gYWJvdmUuCisJCSAqIE9uZSBvZiB0aGUgdHJhY2Vfc2VxXyogZnVuY3Rpb25zIGlzIG5vdCB1c2VkIHByb3Blcmx5LgorCQkgKi8KKwkJV0FSTl9PTkNFKGl0ZXItPnNlcS5mdWxsLCAiZnVsbCBmbGFnIHNldCBmb3IgdHJhY2UgdHlwZSAlZCIsCisJCQkgIGl0ZXItPmVudC0+dHlwZSk7CiAJfQogCXRyYWNlX2FjY2Vzc191bmxvY2soaXRlci0+Y3B1X2ZpbGUpOwogCXRyYWNlX2V2ZW50X3JlYWRfdW5sb2NrKCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2UuaCBiL2tlcm5lbC90cmFjZS90cmFjZS5oCmluZGV4IDVlOWRmYzYuLjZiNjljNGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZS5oCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZS5oCkBAIC00MTksNiArNDE5LDggQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGZ0cmFjZV91cGRhdGVfdG90X2NudDsKICNkZWZpbmUgRFlOX0ZUUkFDRV9URVNUX05BTUUgdHJhY2Vfc2VsZnRlc3RfZHluYW1pY190ZXN0X2Z1bmMKIGV4dGVybiBpbnQgRFlOX0ZUUkFDRV9URVNUX05BTUUodm9pZCk7CisjZGVmaW5lIERZTl9GVFJBQ0VfVEVTVF9OQU1FMiB0cmFjZV9zZWxmdGVzdF9keW5hbWljX3Rlc3RfZnVuYzIKK2V4dGVybiBpbnQgRFlOX0ZUUkFDRV9URVNUX05BTUUyKHZvaWQpOwogI2VuZGlmCiAKIGV4dGVybiBpbnQgcmluZ19idWZmZXJfZXhwYW5kZWQ7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKaW5kZXggZTg4Zjc0Zi4uMmZlMTEwMyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYwpAQCAtMTE2LDYgKzExNiw3IEBACiAJX19jb21tb25fZmllbGQodW5zaWduZWQgY2hhciwgZmxhZ3MpOwogCV9fY29tbW9uX2ZpZWxkKHVuc2lnbmVkIGNoYXIsIHByZWVtcHRfY291bnQpOwogCV9fY29tbW9uX2ZpZWxkKGludCwgcGlkKTsKKwlfX2NvbW1vbl9maWVsZChpbnQsIHBhZGRpbmcpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYwppbmRleCAxNmFlZTRkLi44ZDBlMWNjIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jCkBAIC0xNDksMTEgKzE0OSwxMyBAQAogc3RhdGljIHN0cnVjdCBmdHJhY2Vfb3BzIHRyYWNlX29wcyBfX3JlYWRfbW9zdGx5ID0KIHsKIAkuZnVuYyA9IGZ1bmN0aW9uX3RyYWNlX2NhbGwsCisJLmZsYWdzID0gRlRSQUNFX09QU19GTF9HTE9CQUwsCiB9OwogCiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMgdHJhY2Vfc3RhY2tfb3BzIF9fcmVhZF9tb3N0bHkgPQogewogCS5mdW5jID0gZnVuY3Rpb25fc3RhY2tfdHJhY2VfY2FsbCwKKwkuZmxhZ3MgPSBGVFJBQ0VfT1BTX0ZMX0dMT0JBTCwKIH07CiAKIC8qIE91ciB0d28gb3B0aW9ucyAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMKaW5kZXggYTQ5NjliNC4uYzc3NDI0YiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jCkBAIC0xNTMsNiArMTUzLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX29wcyB0cmFjZV9vcHMgX19yZWFkX21vc3RseSA9CiB7CiAJLmZ1bmMgPSBpcnFzb2ZmX3RyYWNlcl9jYWxsLAorCS5mbGFncyA9IEZUUkFDRV9PUFNfRkxfR0xPQkFMLAogfTsKICNlbmRpZiAvKiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSICovCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9rcHJvYmUuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9rcHJvYmUuYwppbmRleCAzNWQ1NWEzLi5mOTI1YzQ1IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2twcm9iZS5jCkBAIC01Myw3ICs1Myw2IEBACiAJImNvbW1vbl9wcmVlbXB0X2NvdW50IiwKIAkiY29tbW9uX3BpZCIsCiAJImNvbW1vbl90Z2lkIiwKLQkiY29tbW9uX2xvY2tfZGVwdGgiLAogCUZJRUxEX1NUUklOR19JUCwKIAlGSUVMRF9TVFJJTkdfUkVUSVAsCiAJRklFTERfU1RSSU5HX0ZVTkMsCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfb3V0cHV0LmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfb3V0cHV0LmMKaW5kZXggNDU2YmU5MC4uY2Y1MzVjYyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX291dHB1dC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9vdXRwdXQuYwpAQCAtODMwLDYgKzgzMCw5IEBACiBlbnVtIHByaW50X2xpbmVfdCB0cmFjZV9ub3BfcHJpbnQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MsCiAJCQkJICBzdHJ1Y3QgdHJhY2VfZXZlbnQgKmV2ZW50KQogeworCWlmICghdHJhY2Vfc2VxX3ByaW50ZigmaXRlci0+c2VxLCAidHlwZTogJWRcbiIsIGl0ZXItPmVudC0+dHlwZSkpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwogCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9wcmludGsuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9wcmludGsuYwppbmRleCAyNTQ3ZDg4Li5kZmY3NjNiIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfcHJpbnRrLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3ByaW50ay5jCkBAIC0zMiw3ICszMiw3IEBACiAKIHN0cnVjdCB0cmFjZV9icHJpbnRrX2ZtdCB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCWNoYXIgZm10WzBdOworCWNvbnN0IGNoYXIgKmZtdDsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRyYWNlX2JwcmludGtfZm10ICpsb29rdXBfZm9ybWF0KGNvbnN0IGNoYXIgKmZtdCkKQEAgLTQ5LDYgKzQ5LDcgQEAKIHZvaWQgaG9sZF9tb2R1bGVfdHJhY2VfYnByaW50a19mb3JtYXQoY29uc3QgY2hhciAqKnN0YXJ0LCBjb25zdCBjaGFyICoqZW5kKQogewogCWNvbnN0IGNoYXIgKippdGVyOworCWNoYXIgKmZtdDsKIAogCW11dGV4X2xvY2soJmJ0cmFjZV9tdXRleCk7CiAJZm9yIChpdGVyID0gc3RhcnQ7IGl0ZXIgPCBlbmQ7IGl0ZXIrKykgewpAQCAtNTgsMTQgKzU5LDE4IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCXRiX2ZtdCA9IGttYWxsb2Mob2Zmc2V0b2Yoc3RydWN0IHRyYWNlX2JwcmludGtfZm10LCBmbXQpCi0JCQkJKyBzdHJsZW4oKml0ZXIpICsgMSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICh0Yl9mbXQpIHsKKwkJdGJfZm10ID0ga21hbGxvYyhzaXplb2YoKnRiX2ZtdCksIEdGUF9LRVJORUwpOworCQlpZiAodGJfZm10KQorCQkJZm10ID0ga21hbGxvYyhzdHJsZW4oKml0ZXIpICsgMSwgR0ZQX0tFUk5FTCk7CisJCWlmICh0Yl9mbXQgJiYgZm10KSB7CiAJCQlsaXN0X2FkZF90YWlsKCZ0Yl9mbXQtPmxpc3QsICZ0cmFjZV9icHJpbnRrX2ZtdF9saXN0KTsKLQkJCXN0cmNweSh0Yl9mbXQtPmZtdCwgKml0ZXIpOworCQkJc3RyY3B5KGZtdCwgKml0ZXIpOworCQkJdGJfZm10LT5mbXQgPSBmbXQ7CiAJCQkqaXRlciA9IHRiX2ZtdC0+Zm10OwotCQl9IGVsc2UKKwkJfSBlbHNlIHsKKwkJCWtmcmVlKHRiX2ZtdCk7CiAJCQkqaXRlciA9IE5VTEw7CisJCX0KIAl9CiAJbXV0ZXhfdW5sb2NrKCZidHJhY2VfbXV0ZXgpOwogfQpAQCAtODQsNiArODksNzYgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFRoZSBkZWJ1Z2ZzL3RyYWNpbmcvcHJpbnRrX2Zvcm1hdHMgZmlsZSBtYXBzIHRoZSBhZGRyZXNzZXMgd2l0aAorICogdGhlIEFTQ0lJIGZvcm1hdHMgdGhhdCBhcmUgdXNlZCBpbiB0aGUgYnByaW50ayBldmVudHMgaW4gdGhlCisgKiBidWZmZXIuIEZvciB1c2Vyc3BhY2UgdG9vbHMgdG8gYmUgYWJsZSB0byBkZWNvZGUgdGhlIGV2ZW50cyBmcm9tCisgKiB0aGUgYnVmZmVyLCB0aGV5IG5lZWQgdG8gYmUgYWJsZSB0byBtYXAgdGhlIGFkZHJlc3Mgd2l0aCB0aGUgZm9ybWF0LgorICoKKyAqIFRoZSBhZGRyZXNzZXMgb2YgdGhlIGJwcmludGsgZm9ybWF0cyBhcmUgaW4gdGhlaXIgb3duIHNlY3Rpb24KKyAqIF9fdHJhY2VfcHJpbnRrX2ZtdC4gQnV0IGZvciBtb2R1bGVzIHdlIGNvcHkgdGhlbSBpbnRvIGEgbGluayBsaXN0LgorICogVGhlIGNvZGUgdG8gcHJpbnQgdGhlIGZvcm1hdHMgYW5kIHRoZWlyIGFkZHJlc3NlcyBwYXNzZXMgYXJvdW5kIHRoZQorICogYWRkcmVzcyBvZiB0aGUgZm10IHN0cmluZy4gSWYgdGhlIGZtdCBhZGRyZXNzIHBhc3NlZCBpbnRvIHRoZSBzZXEKKyAqIGZ1bmN0aW9ucyBpcyB3aXRoaW4gdGhlIGtlcm5lbCBjb3JlIF9fdHJhY2VfcHJpbnRrX2ZtdCBzZWN0aW9uLCB0aGVuCisgKiBpdCBzaW1wbHkgdXNlcyB0aGUgbmV4dCBwb2ludGVyIGluIHRoZSBsaXN0LgorICoKKyAqIFdoZW4gdGhlIGZtdCBwb2ludGVyIGlzIG91dHNpZGUgdGhlIGtlcm5lbCBjb3JlIF9fdHJhY2VfcHJpbnRrX2ZtdAorICogc2VjdGlvbiwgdGhlbiB3ZSBuZWVkIHRvIHJlYWQgdGhlIGxpbmsgbGlzdCBwb2ludGVycy4gVGhlIHRyaWNrIGlzCisgKiB3ZSBwYXNzIHRoZSBhZGRyZXNzIG9mIHRoZSBzdHJpbmcgdG8gdGhlIHNlcSBmdW5jdGlvbiBqdXN0IGxpa2UKKyAqIHdlIGRvIGZvciB0aGUga2VybmVsIGNvcmUgZm9ybWF0cy4gVG8gZ2V0IGJhY2sgdGhlIHN0cnVjdHVyZSB0aGF0CisgKiBob2xkcyB0aGUgZm9ybWF0LCB3ZSBzaW1wbHkgdXNlIGNvbnRhaW5lcm9mKCkgYW5kIHRoZW4gZ28gdG8gdGhlCisgKiBuZXh0IGZvcm1hdCBpbiB0aGUgbGlzdC4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKioKK2ZpbmRfbmV4dF9tb2RfZm9ybWF0KGludCBzdGFydF9pbmRleCwgdm9pZCAqdiwgY29uc3QgY2hhciAqKmZtdCwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IHRyYWNlX2JwcmludGtfZm10ICptb2RfZm10OworCisJaWYgKGxpc3RfZW1wdHkoJnRyYWNlX2JwcmludGtfZm10X2xpc3QpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogdiB3aWxsIHBvaW50IHRvIHRoZSBhZGRyZXNzIG9mIHRoZSBmbXQgcmVjb3JkIGZyb20gdF9uZXh0CisJICogdiB3aWxsIGJlIE5VTEwgZnJvbSB0X3N0YXJ0LgorCSAqIElmIHRoaXMgaXMgdGhlIGZpcnN0IHBvaW50ZXIgb3IgY2FsbGVkIGZyb20gc3RhcnQKKwkgKiB0aGVuIHdlIG5lZWQgdG8gd2FsayB0aGUgbGlzdC4KKwkgKi8KKwlpZiAoIXYgfHwgc3RhcnRfaW5kZXggPT0gKnBvcykgeworCQlzdHJ1Y3QgdHJhY2VfYnByaW50a19mbXQgKnA7CisKKwkJLyogc2VhcmNoIHRoZSBtb2R1bGUgbGlzdCAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZ0cmFjZV9icHJpbnRrX2ZtdF9saXN0LCBsaXN0KSB7CisJCQlpZiAoc3RhcnRfaW5kZXggPT0gKnBvcykKKwkJCQlyZXR1cm4gJnAtPmZtdDsKKwkJCXN0YXJ0X2luZGV4Kys7CisJCX0KKwkJLyogcG9zID4gaW5kZXggKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoKKwkgKiB2IHBvaW50cyB0byB0aGUgYWRkcmVzcyBvZiB0aGUgZm10IGZpZWxkIGluIHRoZSBtb2QgbGlzdAorCSAqIHN0cnVjdHVyZSB0aGF0IGhvbGRzIHRoZSBtb2R1bGUgcHJpbnQgZm9ybWF0LgorCSAqLworCW1vZF9mbXQgPSBjb250YWluZXJfb2YodiwgdHlwZW9mKCptb2RfZm10KSwgZm10KTsKKwlpZiAobW9kX2ZtdC0+bGlzdC5uZXh0ID09ICZ0cmFjZV9icHJpbnRrX2ZtdF9saXN0KQorCQlyZXR1cm4gTlVMTDsKKworCW1vZF9mbXQgPSBjb250YWluZXJfb2YobW9kX2ZtdC0+bGlzdC5uZXh0LCB0eXBlb2YoKm1vZF9mbXQpLCBsaXN0KTsKKworCXJldHVybiAmbW9kX2ZtdC0+Zm10OworfQorCitzdGF0aWMgdm9pZCBmb3JtYXRfbW9kX3N0YXJ0KHZvaWQpCit7CisJbXV0ZXhfbG9jaygmYnRyYWNlX211dGV4KTsKK30KKworc3RhdGljIHZvaWQgZm9ybWF0X21vZF9zdG9wKHZvaWQpCit7CisJbXV0ZXhfdW5sb2NrKCZidHJhY2VfbXV0ZXgpOworfQorCiAjZWxzZSAvKiAhQ09ORklHX01PRFVMRVMgKi8KIF9faW5pdCBzdGF0aWMgaW50CiBtb2R1bGVfdHJhY2VfYnByaW50a19mb3JtYXRfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKQEAgLTkxLDYgKzE2NiwxMyBAQAogewogCXJldHVybiAwOwogfQorc3RhdGljIGlubGluZSBjb25zdCBjaGFyICoqCitmaW5kX25leHRfbW9kX2Zvcm1hdChpbnQgc3RhcnRfaW5kZXgsIHZvaWQgKnYsIGNvbnN0IGNoYXIgKipmbXQsIGxvZmZfdCAqcG9zKQoreworCXJldHVybiBOVUxMOworfQorc3RhdGljIGlubGluZSB2b2lkIGZvcm1hdF9tb2Rfc3RhcnQodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZm9ybWF0X21vZF9zdG9wKHZvaWQpIHsgfQogI2VuZGlmIC8qIENPTkZJR19NT0RVTEVTICovCiAKIApAQCAtMTUzLDIwICsyMzUsMzMgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKF9fZnRyYWNlX3ZwcmludGspOwogCitzdGF0aWMgY29uc3QgY2hhciAqKmZpbmRfbmV4dCh2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwljb25zdCBjaGFyICoqZm10ID0gdjsKKwlpbnQgc3RhcnRfaW5kZXg7CisKKwlpZiAoIWZtdCkKKwkJZm10ID0gX19zdGFydF9fX3RyYWNlX2JwcmludGtfZm10ICsgKnBvczsKKworCXN0YXJ0X2luZGV4ID0gX19zdG9wX19fdHJhY2VfYnByaW50a19mbXQgLSBfX3N0YXJ0X19fdHJhY2VfYnByaW50a19mbXQ7CisKKwlpZiAoKnBvcyA8IHN0YXJ0X2luZGV4KQorCQlyZXR1cm4gZm10OworCisJcmV0dXJuIGZpbmRfbmV4dF9tb2RfZm9ybWF0KHN0YXJ0X2luZGV4LCB2LCBmbXQsIHBvcyk7Cit9CisKIHN0YXRpYyB2b2lkICoKIHRfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKIHsKLQljb25zdCBjaGFyICoqZm10ID0gX19zdGFydF9fX3RyYWNlX2JwcmludGtfZm10ICsgKnBvczsKLQotCWlmICgodW5zaWduZWQgbG9uZylmbXQgPj0gKHVuc2lnbmVkIGxvbmcpX19zdG9wX19fdHJhY2VfYnByaW50a19mbXQpCi0JCXJldHVybiBOVUxMOwotCXJldHVybiBmbXQ7CisJZm9ybWF0X21vZF9zdGFydCgpOworCXJldHVybiBmaW5kX25leHQoTlVMTCwgcG9zKTsKIH0KIAogc3RhdGljIHZvaWQgKnRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKiB2LCBsb2ZmX3QgKnBvcykKIHsKIAkoKnBvcykrKzsKLQlyZXR1cm4gdF9zdGFydChtLCBwb3MpOworCXJldHVybiBmaW5kX25leHQodiwgcG9zKTsKIH0KIAogc3RhdGljIGludCB0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQpAQCAtMjA1LDYgKzMwMCw3IEBACiAKIHN0YXRpYyB2b2lkIHRfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApCiB7CisJZm9ybWF0X21vZF9zdG9wKCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2hvd19mb3JtYXRfc2VxX29wcyA9IHsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYwppbmRleCA3MzE5NTU5Li5mMDI5ZGQ0IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jCkBAIC0xMjksNiArMTI5LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX29wcyB0cmFjZV9vcHMgX19yZWFkX21vc3RseSA9CiB7CiAJLmZ1bmMgPSB3YWtldXBfdHJhY2VyX2NhbGwsCisJLmZsYWdzID0gRlRSQUNFX09QU19GTF9HTE9CQUwsCiB9OwogI2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9UUkFDRVIgKi8KIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYwppbmRleCA2NTk3MzJlLi4yODg1NDFmIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYwpAQCAtMTAxLDYgKzEwMSwyMDYgQEAKIAogI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQogCitzdGF0aWMgaW50IHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfcHJvYmUxX2NudDsKK3N0YXRpYyB2b2lkIHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfcHJvYmUxX2Z1bmModW5zaWduZWQgbG9uZyBpcCwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgcGlwKQoreworCXRyYWNlX3NlbGZ0ZXN0X3Rlc3RfcHJvYmUxX2NudCsrOworfQorCitzdGF0aWMgaW50IHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfcHJvYmUyX2NudDsKK3N0YXRpYyB2b2lkIHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfcHJvYmUyX2Z1bmModW5zaWduZWQgbG9uZyBpcCwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgcGlwKQoreworCXRyYWNlX3NlbGZ0ZXN0X3Rlc3RfcHJvYmUyX2NudCsrOworfQorCitzdGF0aWMgaW50IHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfcHJvYmUzX2NudDsKK3N0YXRpYyB2b2lkIHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfcHJvYmUzX2Z1bmModW5zaWduZWQgbG9uZyBpcCwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgcGlwKQoreworCXRyYWNlX3NlbGZ0ZXN0X3Rlc3RfcHJvYmUzX2NudCsrOworfQorCitzdGF0aWMgaW50IHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfZ2xvYmFsX2NudDsKK3N0YXRpYyB2b2lkIHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfZ2xvYmFsX2Z1bmModW5zaWduZWQgbG9uZyBpcCwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgcGlwKQoreworCXRyYWNlX3NlbGZ0ZXN0X3Rlc3RfZ2xvYmFsX2NudCsrOworfQorCitzdGF0aWMgaW50IHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfZHluX2NudDsKK3N0YXRpYyB2b2lkIHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfZHluX2Z1bmModW5zaWduZWQgbG9uZyBpcCwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgcGlwKQoreworCXRyYWNlX3NlbGZ0ZXN0X3Rlc3RfZHluX2NudCsrOworfQorCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMgdGVzdF9wcm9iZTEgPSB7CisJLmZ1bmMJCQk9IHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfcHJvYmUxX2Z1bmMsCit9OworCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMgdGVzdF9wcm9iZTIgPSB7CisJLmZ1bmMJCQk9IHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfcHJvYmUyX2Z1bmMsCit9OworCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMgdGVzdF9wcm9iZTMgPSB7CisJLmZ1bmMJCQk9IHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfcHJvYmUzX2Z1bmMsCit9OworCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMgdGVzdF9nbG9iYWwgPSB7CisJLmZ1bmMJCQk9IHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfZ2xvYmFsX2Z1bmMsCisJLmZsYWdzCQkJPSBGVFJBQ0VfT1BTX0ZMX0dMT0JBTCwKK307CisKK3N0YXRpYyB2b2lkIHByaW50X2NvdW50cyh2b2lkKQoreworCXByaW50aygiKCVkICVkICVkICVkICVkKSAiLAorCSAgICAgICB0cmFjZV9zZWxmdGVzdF90ZXN0X3Byb2JlMV9jbnQsCisJICAgICAgIHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfcHJvYmUyX2NudCwKKwkgICAgICAgdHJhY2Vfc2VsZnRlc3RfdGVzdF9wcm9iZTNfY250LAorCSAgICAgICB0cmFjZV9zZWxmdGVzdF90ZXN0X2dsb2JhbF9jbnQsCisJICAgICAgIHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfZHluX2NudCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc2V0X2NvdW50cyh2b2lkKQoreworCXRyYWNlX3NlbGZ0ZXN0X3Rlc3RfcHJvYmUxX2NudCA9IDA7CisJdHJhY2Vfc2VsZnRlc3RfdGVzdF9wcm9iZTJfY250ID0gMDsKKwl0cmFjZV9zZWxmdGVzdF90ZXN0X3Byb2JlM19jbnQgPSAwOworCXRyYWNlX3NlbGZ0ZXN0X3Rlc3RfZ2xvYmFsX2NudCA9IDA7CisJdHJhY2Vfc2VsZnRlc3RfdGVzdF9keW5fY250ID0gMDsKK30KKworc3RhdGljIGludCB0cmFjZV9zZWxmdGVzdF9vcHMoaW50IGNudCkKK3sKKwlpbnQgc2F2ZV9mdHJhY2VfZW5hYmxlZCA9IGZ0cmFjZV9lbmFibGVkOworCXN0cnVjdCBmdHJhY2Vfb3BzICpkeW5fb3BzOworCWNoYXIgKmZ1bmMxX25hbWU7CisJY2hhciAqZnVuYzJfbmFtZTsKKwlpbnQgbGVuMTsKKwlpbnQgbGVuMjsKKwlpbnQgcmV0ID0gLTE7CisKKwlwcmludGsoS0VSTl9DT05UICJQQVNTRURcbiIpOworCXByX2luZm8oIlRlc3RpbmcgZHluYW1pYyBmdHJhY2Ugb3BzICMlZDogIiwgY250KTsKKworCWZ0cmFjZV9lbmFibGVkID0gMTsKKwlyZXNldF9jb3VudHMoKTsKKworCS8qIEhhbmRsZSBQUEM2NCAnLicgbmFtZSAqLworCWZ1bmMxX25hbWUgPSAiKiIgX19zdHJpbmdpZnkoRFlOX0ZUUkFDRV9URVNUX05BTUUpOworCWZ1bmMyX25hbWUgPSAiKiIgX19zdHJpbmdpZnkoRFlOX0ZUUkFDRV9URVNUX05BTUUyKTsKKwlsZW4xID0gc3RybGVuKGZ1bmMxX25hbWUpOworCWxlbjIgPSBzdHJsZW4oZnVuYzJfbmFtZSk7CisKKwkvKgorCSAqIFByb2JlIDEgd2lsbCB0cmFjZSBmdW5jdGlvbiAxLgorCSAqIFByb2JlIDIgd2lsbCB0cmFjZSBmdW5jdGlvbiAyLgorCSAqIFByb2JlIDMgd2lsbCB0cmFjZSBmdW5jdGlvbnMgMSBhbmQgMi4KKwkgKi8KKwlmdHJhY2Vfc2V0X2ZpbHRlcigmdGVzdF9wcm9iZTEsIGZ1bmMxX25hbWUsIGxlbjEsIDEpOworCWZ0cmFjZV9zZXRfZmlsdGVyKCZ0ZXN0X3Byb2JlMiwgZnVuYzJfbmFtZSwgbGVuMiwgMSk7CisJZnRyYWNlX3NldF9maWx0ZXIoJnRlc3RfcHJvYmUzLCBmdW5jMV9uYW1lLCBsZW4xLCAxKTsKKwlmdHJhY2Vfc2V0X2ZpbHRlcigmdGVzdF9wcm9iZTMsIGZ1bmMyX25hbWUsIGxlbjIsIDApOworCisJcmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKCZ0ZXN0X3Byb2JlMSk7CisJcmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKCZ0ZXN0X3Byb2JlMik7CisJcmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKCZ0ZXN0X3Byb2JlMyk7CisJcmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKCZ0ZXN0X2dsb2JhbCk7CisKKwlEWU5fRlRSQUNFX1RFU1RfTkFNRSgpOworCisJcHJpbnRfY291bnRzKCk7CisKKwlpZiAodHJhY2Vfc2VsZnRlc3RfdGVzdF9wcm9iZTFfY250ICE9IDEpCisJCWdvdG8gb3V0OworCWlmICh0cmFjZV9zZWxmdGVzdF90ZXN0X3Byb2JlMl9jbnQgIT0gMCkKKwkJZ290byBvdXQ7CisJaWYgKHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfcHJvYmUzX2NudCAhPSAxKQorCQlnb3RvIG91dDsKKwlpZiAodHJhY2Vfc2VsZnRlc3RfdGVzdF9nbG9iYWxfY250ID09IDApCisJCWdvdG8gb3V0OworCisJRFlOX0ZUUkFDRV9URVNUX05BTUUyKCk7CisKKwlwcmludF9jb3VudHMoKTsKKworCWlmICh0cmFjZV9zZWxmdGVzdF90ZXN0X3Byb2JlMV9jbnQgIT0gMSkKKwkJZ290byBvdXQ7CisJaWYgKHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfcHJvYmUyX2NudCAhPSAxKQorCQlnb3RvIG91dDsKKwlpZiAodHJhY2Vfc2VsZnRlc3RfdGVzdF9wcm9iZTNfY250ICE9IDIpCisJCWdvdG8gb3V0OworCisJLyogQWRkIGEgZHluYW1pYyBwcm9iZSAqLworCWR5bl9vcHMgPSBremFsbG9jKHNpemVvZigqZHluX29wcyksIEdGUF9LRVJORUwpOworCWlmICghZHluX29wcykgeworCQlwcmludGsoIk1FTU9SWSBFUlJPUiAiKTsKKwkJZ290byBvdXQ7CisJfQorCisJZHluX29wcy0+ZnVuYyA9IHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfZHluX2Z1bmM7CisKKwlyZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oZHluX29wcyk7CisKKwl0cmFjZV9zZWxmdGVzdF90ZXN0X2dsb2JhbF9jbnQgPSAwOworCisJRFlOX0ZUUkFDRV9URVNUX05BTUUoKTsKKworCXByaW50X2NvdW50cygpOworCisJaWYgKHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfcHJvYmUxX2NudCAhPSAyKQorCQlnb3RvIG91dF9mcmVlOworCWlmICh0cmFjZV9zZWxmdGVzdF90ZXN0X3Byb2JlMl9jbnQgIT0gMSkKKwkJZ290byBvdXRfZnJlZTsKKwlpZiAodHJhY2Vfc2VsZnRlc3RfdGVzdF9wcm9iZTNfY250ICE9IDMpCisJCWdvdG8gb3V0X2ZyZWU7CisJaWYgKHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfZ2xvYmFsX2NudCA9PSAwKQorCQlnb3RvIG91dDsKKwlpZiAodHJhY2Vfc2VsZnRlc3RfdGVzdF9keW5fY250ID09IDApCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlEWU5fRlRSQUNFX1RFU1RfTkFNRTIoKTsKKworCXByaW50X2NvdW50cygpOworCisJaWYgKHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfcHJvYmUxX2NudCAhPSAyKQorCQlnb3RvIG91dF9mcmVlOworCWlmICh0cmFjZV9zZWxmdGVzdF90ZXN0X3Byb2JlMl9jbnQgIT0gMikKKwkJZ290byBvdXRfZnJlZTsKKwlpZiAodHJhY2Vfc2VsZnRlc3RfdGVzdF9wcm9iZTNfY250ICE9IDQpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlyZXQgPSAwOworIG91dF9mcmVlOgorCXVucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKGR5bl9vcHMpOworCWtmcmVlKGR5bl9vcHMpOworCisgb3V0OgorCS8qIFB1cnBvc2VseSB1bnJlZ2lzdGVyIGluIHRoZSBzYW1lIG9yZGVyICovCisJdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oJnRlc3RfcHJvYmUxKTsKKwl1bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbigmdGVzdF9wcm9iZTIpOworCXVucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKCZ0ZXN0X3Byb2JlMyk7CisJdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oJnRlc3RfZ2xvYmFsKTsKKworCS8qIE1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIG9mZiAqLworCXJlc2V0X2NvdW50cygpOworCURZTl9GVFJBQ0VfVEVTVF9OQU1FKCk7CisJRFlOX0ZUUkFDRV9URVNUX05BTUUoKTsKKworCWlmICh0cmFjZV9zZWxmdGVzdF90ZXN0X3Byb2JlMV9jbnQgfHwKKwkgICAgdHJhY2Vfc2VsZnRlc3RfdGVzdF9wcm9iZTJfY250IHx8CisJICAgIHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfcHJvYmUzX2NudCB8fAorCSAgICB0cmFjZV9zZWxmdGVzdF90ZXN0X2dsb2JhbF9jbnQgfHwKKwkgICAgdHJhY2Vfc2VsZnRlc3RfdGVzdF9keW5fY250KQorCQlyZXQgPSAtMTsKKworCWZ0cmFjZV9lbmFibGVkID0gc2F2ZV9mdHJhY2VfZW5hYmxlZDsKKworCXJldHVybiByZXQ7Cit9CisKIC8qIFRlc3QgZHluYW1pYyBjb2RlIG1vZGlmaWNhdGlvbiBhbmQgZnRyYWNlIGZpbHRlcnMgKi8KIGludCB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX2R5bmFtaWNfdHJhY2luZyhzdHJ1Y3QgdHJhY2VyICp0cmFjZSwKIAkJCQkJICAgc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKQEAgLTEzMSw3ICszMzEsNyBAQAogCWZ1bmNfbmFtZSA9ICIqIiBfX3N0cmluZ2lmeShEWU5fRlRSQUNFX1RFU1RfTkFNRSk7CiAKIAkvKiBmaWx0ZXIgb25seSBvbiBvdXIgZnVuY3Rpb24gKi8KLQlmdHJhY2Vfc2V0X2ZpbHRlcihmdW5jX25hbWUsIHN0cmxlbihmdW5jX25hbWUpLCAxKTsKKwlmdHJhY2Vfc2V0X2dsb2JhbF9maWx0ZXIoZnVuY19uYW1lLCBzdHJsZW4oZnVuY19uYW1lKSwgMSk7CiAKIAkvKiBlbmFibGUgdHJhY2luZyAqLwogCXJldCA9IHRyYWNlcl9pbml0KHRyYWNlLCB0cik7CkBAIC0xNjYsMjIgKzM2NiwzMCBAQAogCiAJLyogY2hlY2sgdGhlIHRyYWNlIGJ1ZmZlciAqLwogCXJldCA9IHRyYWNlX3Rlc3RfYnVmZmVyKHRyLCAmY291bnQpOwotCXRyYWNlLT5yZXNldCh0cik7CiAJdHJhY2luZ19zdGFydCgpOwogCiAJLyogd2Ugc2hvdWxkIG9ubHkgaGF2ZSBvbmUgaXRlbSAqLwogCWlmICghcmV0ICYmIGNvdW50ICE9IDEpIHsKKwkJdHJhY2UtPnJlc2V0KHRyKTsKIAkJcHJpbnRrKEtFUk5fQ09OVCAiLi4gZmlsdGVyIGZhaWxlZCBjb3VudD0lbGQgLi4iLCBjb3VudCk7CiAJCXJldCA9IC0xOwogCQlnb3RvIG91dDsKIAl9CiAKKwkvKiBUZXN0IHRoZSBvcHMgd2l0aCBnbG9iYWwgdHJhY2luZyBydW5uaW5nICovCisJcmV0ID0gdHJhY2Vfc2VsZnRlc3Rfb3BzKDEpOworCXRyYWNlLT5yZXNldCh0cik7CisKICBvdXQ6CiAJZnRyYWNlX2VuYWJsZWQgPSBzYXZlX2Z0cmFjZV9lbmFibGVkOwogCXRyYWNlcl9lbmFibGVkID0gc2F2ZV90cmFjZXJfZW5hYmxlZDsKIAogCS8qIEVuYWJsZSB0cmFjaW5nIG9uIGFsbCBmdW5jdGlvbnMgYWdhaW4gKi8KLQlmdHJhY2Vfc2V0X2ZpbHRlcihOVUxMLCAwLCAxKTsKKwlmdHJhY2Vfc2V0X2dsb2JhbF9maWx0ZXIoTlVMTCwgMCwgMSk7CisKKwkvKiBUZXN0IHRoZSBvcHMgd2l0aCBnbG9iYWwgdHJhY2luZyBvZmYgKi8KKwlpZiAoIXJldCkKKwkJcmV0ID0gdHJhY2Vfc2VsZnRlc3Rfb3BzKDIpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdF9keW5hbWljLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3RfZHluYW1pYy5jCmluZGV4IDU0ZGQ3N2MuLmI0YzQ3NWEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdF9keW5hbWljLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0X2R5bmFtaWMuYwpAQCAtNSwzICs1LDkgQEAKIAkvKiB1c2VkIHRvIGNhbGwgbWNvdW50ICovCiAJcmV0dXJuIDA7CiB9CisKK2ludCBEWU5fRlRSQUNFX1RFU1RfTkFNRTIodm9pZCkKK3sKKwkvKiB1c2VkIHRvIGNhbGwgbWNvdW50ICovCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhY2suYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zdGFjay5jCmluZGV4IDRjNWRlYWQuLmIwYjUzYjggMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9zdGFjay5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zdGFjay5jCkBAIC0xMzMsNiArMTMzLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX29wcyB0cmFjZV9vcHMgX19yZWFkX21vc3RseSA9CiB7CiAJLmZ1bmMgPSBzdGFja190cmFjZV9jYWxsLAorCS5mbGFncyA9IEZUUkFDRV9PUFNfRkxfR0xPQkFMLAogfTsKIAogc3RhdGljIHNzaXplX3QKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZXBvaW50LmMgYi9rZXJuZWwvdHJhY2Vwb2ludC5jCmluZGV4IDY4MTg3YWYuLmIyMTlmMTQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZXBvaW50LmMKKysrIGIva2VybmVsL3RyYWNlcG9pbnQuYwpAQCAtMjUxLDkgKzI1MSw5IEBACiB7CiAJV0FSTl9PTihzdHJjbXAoKCplbnRyeSktPm5hbWUsIGVsZW0tPm5hbWUpICE9IDApOwogCi0JaWYgKGVsZW0tPnJlZ2Z1bmMgJiYgIWVsZW0tPnN0YXRlICYmIGFjdGl2ZSkKKwlpZiAoZWxlbS0+cmVnZnVuYyAmJiAhanVtcF9sYWJlbF9lbmFibGVkKCZlbGVtLT5rZXkpICYmIGFjdGl2ZSkKIAkJZWxlbS0+cmVnZnVuYygpOwotCWVsc2UgaWYgKGVsZW0tPnVucmVnZnVuYyAmJiBlbGVtLT5zdGF0ZSAmJiAhYWN0aXZlKQorCWVsc2UgaWYgKGVsZW0tPnVucmVnZnVuYyAmJiBqdW1wX2xhYmVsX2VuYWJsZWQoJmVsZW0tPmtleSkgJiYgIWFjdGl2ZSkKIAkJZWxlbS0+dW5yZWdmdW5jKCk7CiAKIAkvKgpAQCAtMjY0LDEzICsyNjQsMTAgQEAKIAkgKiBpcyB1c2VkLgogCSAqLwogCXJjdV9hc3NpZ25fcG9pbnRlcihlbGVtLT5mdW5jcywgKCplbnRyeSktPmZ1bmNzKTsKLQlpZiAoIWVsZW0tPnN0YXRlICYmIGFjdGl2ZSkgewotCQlqdW1wX2xhYmVsX2VuYWJsZSgmZWxlbS0+c3RhdGUpOwotCQllbGVtLT5zdGF0ZSA9IGFjdGl2ZTsKLQl9IGVsc2UgaWYgKGVsZW0tPnN0YXRlICYmICFhY3RpdmUpIHsKLQkJanVtcF9sYWJlbF9kaXNhYmxlKCZlbGVtLT5zdGF0ZSk7Ci0JCWVsZW0tPnN0YXRlID0gYWN0aXZlOwotCX0KKwlpZiAoYWN0aXZlICYmICFqdW1wX2xhYmVsX2VuYWJsZWQoJmVsZW0tPmtleSkpCisJCWp1bXBfbGFiZWxfaW5jKCZlbGVtLT5rZXkpOworCWVsc2UgaWYgKCFhY3RpdmUgJiYganVtcF9sYWJlbF9lbmFibGVkKCZlbGVtLT5rZXkpKQorCQlqdW1wX2xhYmVsX2RlYygmZWxlbS0+a2V5KTsKIH0KIAogLyoKQEAgLTI4MSwxMyArMjc4LDExIEBACiAgKi8KIHN0YXRpYyB2b2lkIGRpc2FibGVfdHJhY2Vwb2ludChzdHJ1Y3QgdHJhY2Vwb2ludCAqZWxlbSkKIHsKLQlpZiAoZWxlbS0+dW5yZWdmdW5jICYmIGVsZW0tPnN0YXRlKQorCWlmIChlbGVtLT51bnJlZ2Z1bmMgJiYganVtcF9sYWJlbF9lbmFibGVkKCZlbGVtLT5rZXkpKQogCQllbGVtLT51bnJlZ2Z1bmMoKTsKIAotCWlmIChlbGVtLT5zdGF0ZSkgewotCQlqdW1wX2xhYmVsX2Rpc2FibGUoJmVsZW0tPnN0YXRlKTsKLQkJZWxlbS0+c3RhdGUgPSAwOwotCX0KKwlpZiAoanVtcF9sYWJlbF9lbmFibGVkKCZlbGVtLT5rZXkpKQorCQlqdW1wX2xhYmVsX2RlYygmZWxlbS0+a2V5KTsKIAlyY3VfYXNzaWduX3BvaW50ZXIoZWxlbS0+ZnVuY3MsIE5VTEwpOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvd2F0Y2hkb2cuYyBiL2tlcm5lbC93YXRjaGRvZy5jCmluZGV4IDE0MGRjZTcuLjE0NzMzZDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC93YXRjaGRvZy5jCisrKyBiL2tlcm5lbC93YXRjaGRvZy5jCkBAIC00MzAsOSArNDMwLDEyIEBACiAJCXAgPSBrdGhyZWFkX2NyZWF0ZSh3YXRjaGRvZywgKHZvaWQgKikodW5zaWduZWQgbG9uZyljcHUsICJ3YXRjaGRvZy8lZCIsIGNwdSk7CiAJCWlmIChJU19FUlIocCkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAic29mdGxvY2t1cCB3YXRjaGRvZyBmb3IgJWkgZmFpbGVkXG4iLCBjcHUpOwotCQkJaWYgKCFlcnIpCisJCQlpZiAoIWVycikgewogCQkJCS8qIGlmIGhhcmRsb2NrdXAgaGFzbid0IGFscmVhZHkgc2V0IHRoaXMgKi8KIAkJCQllcnIgPSBQVFJfRVJSKHApOworCQkJCS8qIGFuZCBkaXNhYmxlIHRoZSBwZXJmIGV2ZW50ICovCisJCQkJd2F0Y2hkb2dfbm1pX2Rpc2FibGUoY3B1KTsKKwkJCX0KIAkJCWdvdG8gb3V0OwogCQl9CiAJCWt0aHJlYWRfYmluZChwLCBjcHUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3dvcmtxdWV1ZS5jIGIva2VybmVsL3dvcmtxdWV1ZS5jCmluZGV4IDg4NTlhNDEuLmUzMzc4ZTggMTAwNjQ0Ci0tLSBhL2tlcm5lbC93b3JrcXVldWUuYworKysgYi9rZXJuZWwvd29ya3F1ZXVlLmMKQEAgLTEyOTEsOCArMTI5MSwxNCBAQAogCQkJcmV0dXJuIHRydWU7CiAJCXNwaW5fdW5sb2NrX2lycSgmZ2N3cS0+bG9jayk7CiAKLQkJLyogQ1BVIGhhcyBjb21lIHVwIGluIGJldHdlZW4sIHJldHJ5IG1pZ3JhdGlvbiAqLworCQkvKgorCQkgKiBXZSd2ZSByYWNlZCB3aXRoIENQVSBob3RbdW5dcGx1Zy4gIEdpdmUgaXQgYSBicmVhdGhlcgorCQkgKiBhbmQgcmV0cnkgbWlncmF0aW9uLiAgY29uZF9yZXNjaGVkKCkgaXMgcmVxdWlyZWQgaGVyZTsKKwkJICogb3RoZXJ3aXNlLCB3ZSBtaWdodCBkZWFkbG9jayBhZ2FpbnN0IGNwdV9zdG9wIHRyeWluZyB0bworCQkgKiBicmluZyBkb3duIHRoZSBDUFUgb24gbm9uLXByZWVtcHRpdmUga2VybmVsLgorCQkgKi8KIAkJY3B1X3JlbGF4KCk7CisJCWNvbmRfcmVzY2hlZCgpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcuZGVidWcgYi9saWIvS2NvbmZpZy5kZWJ1ZwppbmRleCBjNzY4YmNkLi4xMGVmNjE5IDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZy5kZWJ1ZworKysgYi9saWIvS2NvbmZpZy5kZWJ1ZwpAQCAtMjM4LDYgKzIzOCwyMSBAQAogCSAgZW5hYmxlZCB0aGVuIGFsbCBoZWxkIGxvY2tzIHdpbGwgYWxzbyBiZSByZXBvcnRlZC4gVGhpcwogCSAgZmVhdHVyZSBoYXMgbmVnbGlnaWJsZSBvdmVyaGVhZC4KIAorY29uZmlnIERFRkFVTFRfSFVOR19UQVNLX1RJTUVPVVQKKwlpbnQgIkRlZmF1bHQgdGltZW91dCBmb3IgaHVuZyB0YXNrIGRldGVjdGlvbiAoaW4gc2Vjb25kcykiCisJZGVwZW5kcyBvbiBERVRFQ1RfSFVOR19UQVNLCisJZGVmYXVsdCAxMjAKKwloZWxwCisJICBUaGlzIG9wdGlvbiBjb250cm9scyB0aGUgZGVmYXVsdCB0aW1lb3V0IChpbiBzZWNvbmRzKSB1c2VkCisJICB0byBkZXRlcm1pbmUgd2hlbiBhIHRhc2sgaGFzIGJlY29tZSBub24tcmVzcG9uc2l2ZSBhbmQgc2hvdWxkCisJICBiZSBjb25zaWRlcmVkIGh1bmcuCisKKwkgIEl0IGNhbiBiZSBhZGp1c3RlZCBhdCBydW50aW1lIHZpYSB0aGUga2VybmVsLmh1bmdfdGFza190aW1lb3V0CisJICBzeXNjdGwgb3IgYnkgd3JpdGluZyBhIHZhbHVlIHRvIC9wcm9jL3N5cy9rZXJuZWwvaHVuZ190YXNrX3RpbWVvdXQuCisKKwkgIEEgdGltZW91dCBvZiAwIGRpc2FibGVzIHRoZSBjaGVjay4gIFRoZSBkZWZhdWx0IGlzIHR3byBtaW51dGVzLgorCSAgS2VlcGluZyB0aGUgZGVmYXVsdCBzaG91bGQgYmUgZmluZSBpbiBtb3N0IGNhc2VzLgorCiBjb25maWcgQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQwogCWJvb2wgIlBhbmljIChSZWJvb3QpIE9uIEh1bmcgVGFza3MiCiAJZGVwZW5kcyBvbiBERVRFQ1RfSFVOR19UQVNLCkBAIC0zMzcsNyArMzUyLDcgQEAKIAogY29uZmlnIERFQlVHX09CSkVDVFNfUkNVX0hFQUQKIAlib29sICJEZWJ1ZyBSQ1UgY2FsbGJhY2tzIG9iamVjdHMiCi0JZGVwZW5kcyBvbiBERUJVR19PQkpFQ1RTICYmIFBSRUVNUFQKKwlkZXBlbmRzIG9uIERFQlVHX09CSkVDVFMKIAloZWxwCiAJICBFbmFibGUgdGhpcyB0byB0dXJuIG9uIGRlYnVnZ2luZyBvZiBSQ1UgbGlzdCBoZWFkcyAoY2FsbF9yY3UoKSB1c2FnZSkuCiAKQEAgLTM5OCw5ICs0MTMsOSBAQAogY29uZmlnIERFQlVHX0tNRU1MRUFLCiAJYm9vbCAiS2VybmVsIG1lbW9yeSBsZWFrIGRldGVjdG9yIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIEVYUEVSSU1FTlRBTCAmJiAhTUVNT1JZX0hPVFBMVUcgJiYgXAotCQkoWDg2IHx8IEFSTSB8fCBQUEMgfHwgUzM5MCB8fCBTUEFSQzY0IHx8IFNVUEVSSCB8fCBNSUNST0JMQVpFIHx8IFRJTEUpCisJCShYODYgfHwgQVJNIHx8IFBQQyB8fCBNSVBTIHx8IFMzOTAgfHwgU1BBUkM2NCB8fCBTVVBFUkggfHwgTUlDUk9CTEFaRSB8fCBUSUxFKQogCi0Jc2VsZWN0IERFQlVHX0ZTIGlmIFNZU0ZTCisJc2VsZWN0IERFQlVHX0ZTCiAJc2VsZWN0IFNUQUNLVFJBQ0UgaWYgU1RBQ0tUUkFDRV9TVVBQT1JUCiAJc2VsZWN0IEtBTExTWU1TCiAJc2VsZWN0IENSQzMyCkBAIC04NzUsMjIgKzg5MCw5IEBACiAJICBTYXkgTiBoZXJlIGlmIHlvdSB3YW50IHRoZSBSQ1UgdG9ydHVyZSB0ZXN0cyB0byBzdGFydCBvbmx5CiAJICBhZnRlciBiZWluZyBtYW51YWxseSBlbmFibGVkIHZpYSAvcHJvYy4KIAotY29uZmlnIFJDVV9DUFVfU1RBTExfREVURUNUT1IKLQlib29sICJDaGVjayBmb3Igc3RhbGxlZCBDUFVzIGRlbGF5aW5nIFJDVSBncmFjZSBwZXJpb2RzIgotCWRlcGVuZHMgb24gVFJFRV9SQ1UgfHwgVFJFRV9QUkVFTVBUX1JDVQotCWRlZmF1bHQgeQotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGNhdXNlcyBSQ1UgdG8gcHJpbnRrIGluZm9ybWF0aW9uIG9uIHdoaWNoCi0JICBDUFVzIGFyZSBkZWxheWluZyB0aGUgY3VycmVudCBncmFjZSBwZXJpb2QsIGJ1dCBvbmx5IHdoZW4KLQkgIHRoZSBncmFjZSBwZXJpb2QgZXh0ZW5kcyBmb3IgZXhjZXNzaXZlIHRpbWUgcGVyaW9kcy4KLQotCSAgU2F5IE4gaWYgeW91IHdhbnQgdG8gZGlzYWJsZSBzdWNoIGNoZWNrcy4KLQotCSAgU2F5IFkgaWYgeW91IGFyZSB1bnN1cmUuCi0KIGNvbmZpZyBSQ1VfQ1BVX1NUQUxMX1RJTUVPVVQKIAlpbnQgIlJDVSBDUFUgc3RhbGwgdGltZW91dCBpbiBzZWNvbmRzIgotCWRlcGVuZHMgb24gUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUgorCWRlcGVuZHMgb24gVFJFRV9SQ1UgfHwgVFJFRV9QUkVFTVBUX1JDVQogCXJhbmdlIDMgMzAwCiAJZGVmYXVsdCA2MAogCWhlbHAKQEAgLTg5OSwyMiArOTAxLDkgQEAKIAkgIFJDVSBncmFjZSBwZXJpb2QgcGVyc2lzdHMsIGFkZGl0aW9uYWwgQ1BVIHN0YWxsIHdhcm5pbmdzIGFyZQogCSAgcHJpbnRlZCBhdCBtb3JlIHdpZGVseSBzcGFjZWQgaW50ZXJ2YWxzLgogCi1jb25maWcgUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUl9SVU5OQUJMRQotCWJvb2wgIlJDVSBDUFUgc3RhbGwgY2hlY2tpbmcgc3RhcnRzIGF1dG9tYXRpY2FsbHkgYXQgYm9vdCIKLQlkZXBlbmRzIG9uIFJDVV9DUFVfU1RBTExfREVURUNUT1IKLQlkZWZhdWx0IHkKLQloZWxwCi0JICBJZiBzZXQsIHN0YXJ0IGNoZWNraW5nIGZvciBSQ1UgQ1BVIHN0YWxscyBpbW1lZGlhdGVseSBvbgotCSAgYm9vdC4gIE90aGVyd2lzZSwgUkNVIENQVSBzdGFsbCBjaGVja2luZyBtdXN0IGJlIG1hbnVhbGx5Ci0JICBlbmFibGVkLgotCi0JICBTYXkgWSBpZiB5b3UgYXJlIHVuc3VyZS4KLQotCSAgU2F5IE4gaWYgeW91IHdpc2ggdG8gc3VwcHJlc3MgUkNVIENQVSBzdGFsbCBjaGVja2luZyBkdXJpbmcgYm9vdC4KLQogY29uZmlnIFJDVV9DUFVfU1RBTExfVkVSQk9TRQogCWJvb2wgIlByaW50IGFkZGl0aW9uYWwgcGVyLXRhc2sgaW5mb3JtYXRpb24gZm9yIFJDVV9DUFVfU1RBTExfREVURUNUT1IiCi0JZGVwZW5kcyBvbiBSQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SICYmIFRSRUVfUFJFRU1QVF9SQ1UKKwlkZXBlbmRzIG9uIFRSRUVfUFJFRU1QVF9SQ1UKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBjYXVzZXMgUkNVIHRvIHByaW50ayBkZXRhaWxlZCBwZXItdGFzayBpbmZvcm1hdGlvbgpkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlCmluZGV4IGVmMGYyODUuLjRiNDlhMjQgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZQorKysgYi9saWIvTWFrZWZpbGUKQEAgLTIxLDcgKzIxLDggQEAKIAogb2JqLXkgKz0gYmNkLm8gZGl2NjQubyBzb3J0Lm8gcGFyc2VyLm8gaGFsZm1kNC5vIGRlYnVnX2xvY2tzLm8gcmFuZG9tMzIubyBcCiAJIGJ1c3Rfc3BpbmxvY2tzLm8gaGV4ZHVtcC5vIGthc3ByaW50Zi5vIGJpdG1hcC5vIHNjYXR0ZXJsaXN0Lm8gXAotCSBzdHJpbmdfaGVscGVycy5vIGdjZC5vIGxjbS5vIGxpc3Rfc29ydC5vIHV1aWQubyBmbGV4X2FycmF5Lm8KKwkgc3RyaW5nX2hlbHBlcnMubyBnY2QubyBsY20ubyBsaXN0X3NvcnQubyB1dWlkLm8gZmxleF9hcnJheS5vIFwKKwkgYnNlYXJjaC5vCiBvYmoteSArPSBrc3RydG94Lm8KIG9iai0kKENPTkZJR19URVNUX0tTVFJUT1gpICs9IHRlc3Qta3N0cnRveC5vCiAKZGlmZiAtLWdpdCBhL2xpYi9ic2VhcmNoLmMgYi9saWIvYnNlYXJjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNTQ3NTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYnNlYXJjaC5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBBIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaCBmb3IgdGhlIExpbnV4IGtlcm5lbAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IEtzcGxpY2UsIEluYy4KKyAqIEF1dGhvcjogVGltIEFiYm90dCA8dGFiYm90dEBrc3BsaWNlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvYnNlYXJjaC5oPgorCisvKgorICogYnNlYXJjaCAtIGJpbmFyeSBzZWFyY2ggYW4gYXJyYXkgb2YgZWxlbWVudHMKKyAqIEBrZXk6IHBvaW50ZXIgdG8gaXRlbSBiZWluZyBzZWFyY2hlZCBmb3IKKyAqIEBiYXNlOiBwb2ludGVyIHRvIGZpcnN0IGVsZW1lbnQgdG8gc2VhcmNoCisgKiBAbnVtOiBudW1iZXIgb2YgZWxlbWVudHMKKyAqIEBzaXplOiBzaXplIG9mIGVhY2ggZWxlbWVudAorICogQGNtcDogcG9pbnRlciB0byBjb21wYXJpc29uIGZ1bmN0aW9uCisgKgorICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgYmluYXJ5IHNlYXJjaCBvbiB0aGUgZ2l2ZW4gYXJyYXkuICBUaGUKKyAqIGNvbnRlbnRzIG9mIHRoZSBhcnJheSBzaG91bGQgYWxyZWFkeSBiZSBpbiBhc2NlbmRpbmcgc29ydGVkIG9yZGVyCisgKiB1bmRlciB0aGUgcHJvdmlkZWQgY29tcGFyaXNvbiBmdW5jdGlvbi4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIGtleSBuZWVkIG5vdCBoYXZlIHRoZSBzYW1lIHR5cGUgYXMgdGhlIGVsZW1lbnRzIGluCisgKiB0aGUgYXJyYXksIGUuZy4ga2V5IGNvdWxkIGJlIGEgc3RyaW5nIGFuZCB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbgorICogY291bGQgY29tcGFyZSB0aGUgc3RyaW5nIHdpdGggdGhlIHN0cnVjdCdzIG5hbWUgZmllbGQuICBIb3dldmVyLCBpZgorICogdGhlIGtleSBhbmQgZWxlbWVudHMgaW4gdGhlIGFycmF5IGFyZSBvZiB0aGUgc2FtZSB0eXBlLCB5b3UgY2FuIHVzZQorICogdGhlIHNhbWUgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgYm90aCBzb3J0KCkgYW5kIGJzZWFyY2goKS4KKyAqLwordm9pZCAqYnNlYXJjaChjb25zdCB2b2lkICprZXksIGNvbnN0IHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLAorCSAgICAgIGludCAoKmNtcCkoY29uc3Qgdm9pZCAqa2V5LCBjb25zdCB2b2lkICplbHQpKQoreworCXNpemVfdCBzdGFydCA9IDAsIGVuZCA9IG51bTsKKwlpbnQgcmVzdWx0OworCisJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CisJCXNpemVfdCBtaWQgPSBzdGFydCArIChlbmQgLSBzdGFydCkgLyAyOworCisJCXJlc3VsdCA9IGNtcChrZXksIGJhc2UgKyBtaWQgKiBzaXplKTsKKwkJaWYgKHJlc3VsdCA8IDApCisJCQllbmQgPSBtaWQ7CisJCWVsc2UgaWYgKHJlc3VsdCA+IDApCisJCQlzdGFydCA9IG1pZCArIDE7CisJCWVsc2UKKwkJCXJldHVybiAodm9pZCAqKWJhc2UgKyBtaWQgKiBzaXplOworCX0KKworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChic2VhcmNoKTsKZGlmZiAtLWdpdCBhL2xpYi9kbWEtZGVidWcuYyBiL2xpYi9kbWEtZGVidWcuYwppbmRleCA0YmZiMDQ3Li5kYjA3YmZkIDEwMDY0NAotLS0gYS9saWIvZG1hLWRlYnVnLmMKKysrIGIvbGliL2RtYS1kZWJ1Zy5jCkBAIC02NDksNyArNjQ5LDcgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotc3RhdGljIGludCBkZXZpY2VfZG1hX2FsbG9jYXRpb25zKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgZGV2aWNlX2RtYV9hbGxvY2F0aW9ucyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkbWFfZGVidWdfZW50cnkgKipvdXRfZW50cnkpCiB7CiAJc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSAqZW50cnk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTY2MCw4ICs2NjAsMTAgQEAKIAlmb3IgKGkgPSAwOyBpIDwgSEFTSF9TSVpFOyArK2kpIHsKIAkJc3Bpbl9sb2NrKCZkbWFfZW50cnlfaGFzaFtpXS5sb2NrKTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmRtYV9lbnRyeV9oYXNoW2ldLmxpc3QsIGxpc3QpIHsKLQkJCWlmIChlbnRyeS0+ZGV2ID09IGRldikKKwkJCWlmIChlbnRyeS0+ZGV2ID09IGRldikgewogCQkJCWNvdW50ICs9IDE7CisJCQkJKm91dF9lbnRyeSA9IGVudHJ5OworCQkJfQogCQl9CiAJCXNwaW5fdW5sb2NrKCZkbWFfZW50cnlfaGFzaFtpXS5sb2NrKTsKIAl9CkBAIC02NzQsNiArNjc2LDcgQEAKIHN0YXRpYyBpbnQgZG1hX2RlYnVnX2RldmljZV9jaGFuZ2Uoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gZGF0YTsKKwlzdHJ1Y3QgZG1hX2RlYnVnX2VudHJ5ICp1bmluaXRpYWxpemVkX3ZhcihlbnRyeSk7CiAJaW50IGNvdW50OwogCiAJaWYgKGdsb2JhbF9kaXNhYmxlKQpAQCAtNjgxLDEyICs2ODQsMTcgQEAKIAogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBCVVNfTk9USUZZX1VOQk9VTkRfRFJJVkVSOgotCQljb3VudCA9IGRldmljZV9kbWFfYWxsb2NhdGlvbnMoZGV2KTsKKwkJY291bnQgPSBkZXZpY2VfZG1hX2FsbG9jYXRpb25zKGRldiwgJmVudHJ5KTsKIAkJaWYgKGNvdW50ID09IDApCiAJCQlicmVhazsKLQkJZXJyX3ByaW50ayhkZXYsIE5VTEwsICJETUEtQVBJOiBkZXZpY2UgZHJpdmVyIGhhcyBwZW5kaW5nICIKKwkJZXJyX3ByaW50ayhkZXYsIGVudHJ5LCAiRE1BLUFQSTogZGV2aWNlIGRyaXZlciBoYXMgcGVuZGluZyAiCiAJCQkJIkRNQSBhbGxvY2F0aW9ucyB3aGlsZSByZWxlYXNlZCBmcm9tIGRldmljZSAiCi0JCQkJIltjb3VudD0lZF1cbiIsIGNvdW50KTsKKwkJCQkiW2NvdW50PSVkXVxuIgorCQkJCSJPbmUgb2YgbGVha2VkIGVudHJpZXMgZGV0YWlsczogIgorCQkJCSJbZGV2aWNlIGFkZHJlc3M9MHglMDE2bGx4XSBbc2l6ZT0lbGx1IGJ5dGVzXSAiCisJCQkJIlttYXBwZWQgd2l0aCAlc10gW21hcHBlZCBhcyAlc11cbiIsCisJCQljb3VudCwgZW50cnktPmRldl9hZGRyLCBlbnRyeS0+c2l6ZSwKKwkJCWRpcjJuYW1lW2VudHJ5LT5kaXJlY3Rpb25dLCB0eXBlMm5hbWVbZW50cnktPnR5cGVdKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9saWIvZmxleF9hcnJheS5jIGIvbGliL2ZsZXhfYXJyYXkuYwppbmRleCBjMGVhNDBiLi44NTRiNTdiIDEwMDY0NAotLS0gYS9saWIvZmxleF9hcnJheS5jCisrKyBiL2xpYi9mbGV4X2FycmF5LmMKQEAgLTIzMiwxMCArMjMyLDEwIEBACiAKIC8qKgogICogZmxleF9hcnJheV9wcmVhbGxvYyAtIGd1YXJhbnRlZSB0aGF0IGFycmF5IHNwYWNlIGV4aXN0cwotICogQGZhOgkJdGhlIGZsZXggYXJyYXkgZm9yIHdoaWNoIHRvIHByZWFsbG9jYXRlIHBhcnRzCi0gKiBAc3RhcnQ6CWluZGV4IG9mIGZpcnN0IGFycmF5IGVsZW1lbnQgZm9yIHdoaWNoIHNwYWNlIGlzIGFsbG9jYXRlZAotICogQGVuZDoJaW5kZXggb2YgbGFzdCAoaW5jbHVzaXZlKSBlbGVtZW50IGZvciB3aGljaCBzcGFjZSBpcyBhbGxvY2F0ZWQKLSAqIEBmbGFnczoJcGFnZSBhbGxvY2F0aW9uIGZsYWdzCisgKiBAZmE6CQkJdGhlIGZsZXggYXJyYXkgZm9yIHdoaWNoIHRvIHByZWFsbG9jYXRlIHBhcnRzCisgKiBAc3RhcnQ6CQlpbmRleCBvZiBmaXJzdCBhcnJheSBlbGVtZW50IGZvciB3aGljaCBzcGFjZSBpcyBhbGxvY2F0ZWQKKyAqIEBucl9lbGVtZW50czoJbnVtYmVyIG9mIGVsZW1lbnRzIGZvciB3aGljaCBzcGFjZSBpcyBhbGxvY2F0ZWQKKyAqIEBmbGFnczoJCXBhZ2UgYWxsb2NhdGlvbiBmbGFncwogICoKICAqIFRoaXMgd2lsbCBndWFyYW50ZWUgdGhhdCBubyBmdXR1cmUgY2FsbHMgdG8gZmxleF9hcnJheV9wdXQoKQogICogd2lsbCBhbGxvY2F0ZSBtZW1vcnkuICBJdCBjYW4gYmUgdXNlZCBpZiB5b3UgYXJlIGV4cGVjdGluZyB0bwpAQCAtMjQ1LDE0ICsyNDUsMjQgQEAKICAqIExvY2tpbmcgbXVzdCBiZSBwcm92aWRlZCBieSB0aGUgY2FsbGVyLgogICovCiBpbnQgZmxleF9hcnJheV9wcmVhbGxvYyhzdHJ1Y3QgZmxleF9hcnJheSAqZmEsIHVuc2lnbmVkIGludCBzdGFydCwKLQkJCXVuc2lnbmVkIGludCBlbmQsIGdmcF90IGZsYWdzKQorCQkJdW5zaWduZWQgaW50IG5yX2VsZW1lbnRzLCBnZnBfdCBmbGFncykKIHsKIAlpbnQgc3RhcnRfcGFydDsKIAlpbnQgZW5kX3BhcnQ7CiAJaW50IHBhcnRfbnI7CisJdW5zaWduZWQgaW50IGVuZDsKIAlzdHJ1Y3QgZmxleF9hcnJheV9wYXJ0ICpwYXJ0OwogCi0JaWYgKHN0YXJ0ID49IGZhLT50b3RhbF9ucl9lbGVtZW50cyB8fCBlbmQgPj0gZmEtPnRvdGFsX25yX2VsZW1lbnRzKQorCWlmICghc3RhcnQgJiYgIW5yX2VsZW1lbnRzKQorCQlyZXR1cm4gMDsKKwlpZiAoc3RhcnQgPj0gZmEtPnRvdGFsX25yX2VsZW1lbnRzKQorCQlyZXR1cm4gLUVOT1NQQzsKKwlpZiAoIW5yX2VsZW1lbnRzKQorCQlyZXR1cm4gMDsKKworCWVuZCA9IHN0YXJ0ICsgbnJfZWxlbWVudHMgLSAxOworCisJaWYgKGVuZCA+PSBmYS0+dG90YWxfbnJfZWxlbWVudHMpCiAJCXJldHVybiAtRU5PU1BDOwogCWlmIChlbGVtZW50c19maXRfaW5fYmFzZShmYSkpCiAJCXJldHVybiAwOwpAQCAtMzQzLDYgKzM1Myw4IEBACiAJaW50IHBhcnRfbnI7CiAJaW50IHJldCA9IDA7CiAKKwlpZiAoIWZhLT50b3RhbF9ucl9lbGVtZW50cykKKwkJcmV0dXJuIDA7CiAJaWYgKGVsZW1lbnRzX2ZpdF9pbl9iYXNlKGZhKSkKIAkJcmV0dXJuIHJldDsKIAlmb3IgKHBhcnRfbnIgPSAwOyBwYXJ0X25yIDwgRkxFWF9BUlJBWV9OUl9CQVNFX1BUUlM7IHBhcnRfbnIrKykgewpkaWZmIC0tZ2l0IGEvbGliL3N0cmluZy5jIGIvbGliL3N0cmluZy5jCmluZGV4IGY3MWJlYWQuLjAxZmFkOWIgMTAwNjQ0Ci0tLSBhL2xpYi9zdHJpbmcuYworKysgYi9saWIvc3RyaW5nLmMKQEAgLTUzNSw2ICs1MzUsMzUgQEAKIH0KIEVYUE9SVF9TWU1CT0woc3lzZnNfc3RyZXEpOwogCisvKioKKyAqIHN0cnRvYm9vbCAtIGNvbnZlcnQgY29tbW9uIHVzZXIgaW5wdXRzIGludG8gYm9vbGVhbiB2YWx1ZXMKKyAqIEBzOiBpbnB1dCBzdHJpbmcKKyAqIEByZXM6IHJlc3VsdAorICoKKyAqIFRoaXMgcm91dGluZSByZXR1cm5zIDAgaWZmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMgb25lIG9mICdZeTFObjAnLgorICogT3RoZXJ3aXNlIGl0IHdpbGwgcmV0dXJuIC1FSU5WQUwuICBWYWx1ZSBwb2ludGVkIHRvIGJ5IHJlcyBpcworICogdXBkYXRlZCB1cG9uIGZpbmRpbmcgYSBtYXRjaC4KKyAqLworaW50IHN0cnRvYm9vbChjb25zdCBjaGFyICpzLCBib29sICpyZXMpCit7CisJc3dpdGNoIChzWzBdKSB7CisJY2FzZSAneSc6CisJY2FzZSAnWSc6CisJY2FzZSAnMSc6CisJCSpyZXMgPSB0cnVlOworCQlicmVhazsKKwljYXNlICduJzoKKwljYXNlICdOJzoKKwljYXNlICcwJzoKKwkJKnJlcyA9IGZhbHNlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHN0cnRvYm9vbCk7CisKICNpZm5kZWYgX19IQVZFX0FSQ0hfTUVNU0VUCiAvKioKICAqIG1lbXNldCAtIEZpbGwgYSByZWdpb24gb2YgbWVtb3J5IHdpdGggdGhlIGdpdmVuIHZhbHVlCmRpZmYgLS1naXQgYS9saWIvdnNwcmludGYuYyBiL2xpYi92c3ByaW50Zi5jCmluZGV4IGJjMGFjNmIuLmRmZDYwMTkgMTAwNjQ0Ci0tLSBhL2xpYi92c3ByaW50Zi5jCisrKyBiL2xpYi92c3ByaW50Zi5jCkBAIC03OTcsNyArNzk3LDcgQEAKIAlyZXR1cm4gc3RyaW5nKGJ1ZiwgZW5kLCB1dWlkLCBzcGVjKTsKIH0KIAotaW50IGtwdHJfcmVzdHJpY3QgPSAxOworaW50IGtwdHJfcmVzdHJpY3QgX19yZWFkX21vc3RseTsKIAogLyoKICAqIFNob3cgYSAnJXAnIHRoaW5nLiAgQSBrZXJuZWwgZXh0ZW5zaW9uIGlzIHRoYXQgdGhlICclcCcgaXMgZm9sbG93ZWQKZGlmZiAtLWdpdCBhL2xpYi94ei94el9kZWNfbHptYTIuYyBiL2xpYi94ei94el9kZWNfbHptYTIuYwppbmRleCBlYTVmYTRmLi5hNmNkYzk2IDEwMDY0NAotLS0gYS9saWIveHoveHpfZGVjX2x6bWEyLmMKKysrIGIvbGliL3h6L3h6X2RlY19sem1hMi5jCkBAIC05NjksNiArOTY5LDkgQEAKIAkJCSAqLwogCQkJdG1wID0gYi0+aW5bYi0+aW5fcG9zKytdOwogCisJCQlpZiAodG1wID09IDB4MDApCisJCQkJcmV0dXJuIFhaX1NUUkVBTV9FTkQ7CisKIAkJCWlmICh0bXAgPj0gMHhFMCB8fCB0bXAgPT0gMHgwMSkgewogCQkJCXMtPmx6bWEyLm5lZWRfcHJvcHMgPSB0cnVlOwogCQkJCXMtPmx6bWEyLm5lZWRfZGljdF9yZXNldCA9IGZhbHNlOwpAQCAtMTAwMSw5ICsxMDA0LDYgQEAKIAkJCQkJCWx6bWFfcmVzZXQocyk7CiAJCQkJfQogCQkJfSBlbHNlIHsKLQkJCQlpZiAodG1wID09IDB4MDApCi0JCQkJCXJldHVybiBYWl9TVFJFQU1fRU5EOwotCiAJCQkJaWYgKHRtcCA+IDB4MDIpCiAJCQkJCXJldHVybiBYWl9EQVRBX0VSUk9SOwogCmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuYwppbmRleCA0NzBkY2RhLi44MzMyNmFkIDEwMDY0NAotLS0gYS9tbS9odWdlX21lbW9yeS5jCisrKyBiL21tL2h1Z2VfbWVtb3J5LmMKQEAgLTE0MDgsNiArMTQwOCw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2RlZmluZSBWTV9OT19USFAgKFZNX1NQRUNJQUx8Vk1fSU5TRVJUUEFHRXxWTV9NSVhFRE1BUHxWTV9TQU98IFwKKwkJICAgVk1fSFVHRVRMQnxWTV9TSEFSRUR8Vk1fTUFZU0hBUkUpCisKIGludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkgICAgIHVuc2lnbmVkIGxvbmcgKnZtX2ZsYWdzLCBpbnQgYWR2aWNlKQogewpAQCAtMTQxNiwxMSArMTQxOSw3IEBACiAJCS8qCiAJCSAqIEJlIHNvbWV3aGF0IG92ZXItcHJvdGVjdGl2ZSBsaWtlIEtTTSBmb3Igbm93IQogCQkgKi8KLQkJaWYgKCp2bV9mbGFncyAmIChWTV9IVUdFUEFHRSB8Ci0JCQkJIFZNX1NIQVJFRCAgIHwgVk1fTUFZU0hBUkUgICB8Ci0JCQkJIFZNX1BGTk1BUCAgIHwgVk1fSU8gICAgICB8IFZNX0RPTlRFWFBBTkQgfAotCQkJCSBWTV9SRVNFUlZFRCB8IFZNX0hVR0VUTEIgfCBWTV9JTlNFUlRQQUdFIHwKLQkJCQkgVk1fTUlYRURNQVAgfCBWTV9TQU8pKQorCQlpZiAoKnZtX2ZsYWdzICYgKFZNX0hVR0VQQUdFIHwgVk1fTk9fVEhQKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQkqdm1fZmxhZ3MgJj0gflZNX05PSFVHRVBBR0U7CiAJCSp2bV9mbGFncyB8PSBWTV9IVUdFUEFHRTsKQEAgLTE0MzYsMTEgKzE0MzUsNyBAQAogCQkvKgogCQkgKiBCZSBzb21ld2hhdCBvdmVyLXByb3RlY3RpdmUgbGlrZSBLU00gZm9yIG5vdyEKIAkJICovCi0JCWlmICgqdm1fZmxhZ3MgJiAoVk1fTk9IVUdFUEFHRSB8Ci0JCQkJIFZNX1NIQVJFRCAgIHwgVk1fTUFZU0hBUkUgICB8Ci0JCQkJIFZNX1BGTk1BUCAgIHwgVk1fSU8gICAgICB8IFZNX0RPTlRFWFBBTkQgfAotCQkJCSBWTV9SRVNFUlZFRCB8IFZNX0hVR0VUTEIgfCBWTV9JTlNFUlRQQUdFIHwKLQkJCQkgVk1fTUlYRURNQVAgfCBWTV9TQU8pKQorCQlpZiAoKnZtX2ZsYWdzICYgKFZNX05PSFVHRVBBR0UgfCBWTV9OT19USFApKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCSp2bV9mbGFncyAmPSB+Vk1fSFVHRVBBR0U7CiAJCSp2bV9mbGFncyB8PSBWTV9OT0hVR0VQQUdFOwpAQCAtMTU3NCwxMCArMTU2OSwxNCBAQAogCQkgKiBwYWdlIGZhdWx0IGlmIG5lZWRlZC4KIAkJICovCiAJCXJldHVybiAwOwotCWlmICh2bWEtPnZtX2ZpbGUgfHwgdm1hLT52bV9vcHMpCisJaWYgKHZtYS0+dm1fb3BzKQogCQkvKiBraHVnZXBhZ2VkIG5vdCB5ZXQgd29ya2luZyBvbiBmaWxlIG9yIHNwZWNpYWwgbWFwcGluZ3MgKi8KIAkJcmV0dXJuIDA7Ci0JVk1fQlVHX09OKGlzX2xpbmVhcl9wZm5fbWFwcGluZyh2bWEpIHx8IGlzX3Bmbl9tYXBwaW5nKHZtYSkpOworCS8qCisJICogSWYgaXNfcGZuX21hcHBpbmcoKSBpcyB0cnVlIGlzX2xlYXJuX3Bmbl9tYXBwaW5nKCkgbXVzdCBiZQorCSAqIHRydWUgdG9vLCB2ZXJpZnkgaXQgaGVyZS4KKwkgKi8KKwlWTV9CVUdfT04oaXNfbGluZWFyX3Bmbl9tYXBwaW5nKHZtYSkgfHwgdm1hLT52bV9mbGFncyAmIFZNX05PX1RIUCk7CiAJaHN0YXJ0ID0gKHZtYS0+dm1fc3RhcnQgKyB+SFBBR0VfUE1EX01BU0spICYgSFBBR0VfUE1EX01BU0s7CiAJaGVuZCA9IHZtYS0+dm1fZW5kICYgSFBBR0VfUE1EX01BU0s7CiAJaWYgKGhzdGFydCA8IGhlbmQpCkBAIC0xODI4LDEyICsxODI3LDE1IEBACiAJICAgICh2bWEtPnZtX2ZsYWdzICYgVk1fTk9IVUdFUEFHRSkpCiAJCWdvdG8gb3V0OwogCi0JLyogVk1fUEZOTUFQIHZtYXMgbWF5IGhhdmUgdm1fb3BzIG51bGwgYnV0IHZtX2ZpbGUgc2V0ICovCi0JaWYgKCF2bWEtPmFub25fdm1hIHx8IHZtYS0+dm1fb3BzIHx8IHZtYS0+dm1fZmlsZSkKKwlpZiAoIXZtYS0+YW5vbl92bWEgfHwgdm1hLT52bV9vcHMpCiAJCWdvdG8gb3V0OwogCWlmIChpc192bWFfdGVtcG9yYXJ5X3N0YWNrKHZtYSkpCiAJCWdvdG8gb3V0OwotCVZNX0JVR19PTihpc19saW5lYXJfcGZuX21hcHBpbmcodm1hKSB8fCBpc19wZm5fbWFwcGluZyh2bWEpKTsKKwkvKgorCSAqIElmIGlzX3Bmbl9tYXBwaW5nKCkgaXMgdHJ1ZSBpc19sZWFybl9wZm5fbWFwcGluZygpIG11c3QgYmUKKwkgKiB0cnVlIHRvbywgdmVyaWZ5IGl0IGhlcmUuCisJICovCisJVk1fQlVHX09OKGlzX2xpbmVhcl9wZm5fbWFwcGluZyh2bWEpIHx8IHZtYS0+dm1fZmxhZ3MgJiBWTV9OT19USFApOwogCiAJcGdkID0gcGdkX29mZnNldChtbSwgYWRkcmVzcyk7CiAJaWYgKCFwZ2RfcHJlc2VudCgqcGdkKSkKQEAgLTIwNjYsMTMgKzIwNjgsMTYgQEAKIAkJCXByb2dyZXNzKys7CiAJCQljb250aW51ZTsKIAkJfQotCQkvKiBWTV9QRk5NQVAgdm1hcyBtYXkgaGF2ZSB2bV9vcHMgbnVsbCBidXQgdm1fZmlsZSBzZXQgKi8KLQkJaWYgKCF2bWEtPmFub25fdm1hIHx8IHZtYS0+dm1fb3BzIHx8IHZtYS0+dm1fZmlsZSkKKwkJaWYgKCF2bWEtPmFub25fdm1hIHx8IHZtYS0+dm1fb3BzKQogCQkJZ290byBza2lwOwogCQlpZiAoaXNfdm1hX3RlbXBvcmFyeV9zdGFjayh2bWEpKQogCQkJZ290byBza2lwOwotCi0JCVZNX0JVR19PTihpc19saW5lYXJfcGZuX21hcHBpbmcodm1hKSB8fCBpc19wZm5fbWFwcGluZyh2bWEpKTsKKwkJLyoKKwkJICogSWYgaXNfcGZuX21hcHBpbmcoKSBpcyB0cnVlIGlzX2xlYXJuX3Bmbl9tYXBwaW5nKCkKKwkJICogbXVzdCBiZSB0cnVlIHRvbywgdmVyaWZ5IGl0IGhlcmUuCisJCSAqLworCQlWTV9CVUdfT04oaXNfbGluZWFyX3Bmbl9tYXBwaW5nKHZtYSkgfHwKKwkJCSAgdm1hLT52bV9mbGFncyAmIFZNX05PX1RIUCk7CiAKIAkJaHN0YXJ0ID0gKHZtYS0+dm1fc3RhcnQgKyB+SFBBR0VfUE1EX01BU0spICYgSFBBR0VfUE1EX01BU0s7CiAJCWhlbmQgPSB2bWEtPnZtX2VuZCAmIEhQQUdFX1BNRF9NQVNLOwpkaWZmIC0tZ2l0IGEvbW0va21lbWxlYWsuYyBiL21tL2ttZW1sZWFrLmMKaW5kZXggYzFkNTg2Ny4uYWFjZWU0NSAxMDA2NDQKLS0tIGEvbW0va21lbWxlYWsuYworKysgYi9tbS9rbWVtbGVhay5jCkBAIC0xNDE0LDkgKzE0MTQsMTIgQEAKIAkrKygqcG9zKTsKIAogCWxpc3RfZm9yX2VhY2hfY29udGludWVfcmN1KG4sICZvYmplY3RfbGlzdCkgewotCQluZXh0X29iaiA9IGxpc3RfZW50cnkobiwgc3RydWN0IGttZW1sZWFrX29iamVjdCwgb2JqZWN0X2xpc3QpOwotCQlpZiAoZ2V0X29iamVjdChuZXh0X29iaikpCisJCXN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iaiA9CisJCQlsaXN0X2VudHJ5KG4sIHN0cnVjdCBrbWVtbGVha19vYmplY3QsIG9iamVjdF9saXN0KTsKKwkJaWYgKGdldF9vYmplY3Qob2JqKSkgeworCQkJbmV4dF9vYmogPSBvYmo7CiAJCQlicmVhazsKKwkJfQogCX0KIAogCXB1dF9vYmplY3QocHJldl9vYmopOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCBjZTIyYTI1Li42MWU2NmYwIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYworKysgYi9tbS9tZW1vcnkuYwpAQCAtMTM1OSw3ICsxMzU5LDcgQEAKIAkJICovCiAJCW1hcmtfcGFnZV9hY2Nlc3NlZChwYWdlKTsKIAl9Ci0JaWYgKGZsYWdzICYgRk9MTF9NTE9DSykgeworCWlmICgoZmxhZ3MgJiBGT0xMX01MT0NLKSAmJiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkpIHsKIAkJLyoKIAkJICogVGhlIHByZWxpbWluYXJ5IG1hcHBpbmcgY2hlY2sgaXMgbWFpbmx5IHRvIGF2b2lkIHRoZQogCQkgKiBwb2ludGxlc3Mgb3ZlcmhlYWQgb2YgbG9ja19wYWdlIG9uIHRoZSBaRVJPX1BBR0UKQEAgLTE0MTIsOSArMTQxMiw4IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IHN0YWNrX2d1YXJkX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQlyZXR1cm4gKHZtYS0+dm1fZmxhZ3MgJiBWTV9HUk9XU0RPV04pICYmCi0JCSh2bWEtPnZtX3N0YXJ0ID09IGFkZHIpICYmCi0JCSF2bWFfc3RhY2tfY29udGludWUodm1hLT52bV9wcmV2LCBhZGRyKTsKKwlyZXR1cm4gc3RhY2tfZ3VhcmRfcGFnZV9zdGFydCh2bWEsIGFkZHIpIHx8CisJICAgICAgIHN0YWNrX2d1YXJkX3BhZ2VfZW5kKHZtYSwgYWRkcitQQUdFX1NJWkUpOwogfQogCiAvKioKQEAgLTE1NTEsMTMgKzE1NTAsNiBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQkvKgotCQkgKiBJZiB3ZSBkb24ndCBhY3R1YWxseSB3YW50IHRoZSBwYWdlIGl0c2VsZiwKLQkJICogYW5kIGl0J3MgdGhlIHN0YWNrIGd1YXJkIHBhZ2UsIGp1c3Qgc2tpcCBpdC4KLQkJICovCi0JCWlmICghcGFnZXMgJiYgc3RhY2tfZ3VhcmRfcGFnZSh2bWEsIHN0YXJ0KSkKLQkJCWdvdG8gbmV4dF9wYWdlOwotCiAJCWRvIHsKIAkJCXN0cnVjdCBwYWdlICpwYWdlOwogCQkJdW5zaWduZWQgaW50IGZvbGxfZmxhZ3MgPSBndXBfZmxhZ3M7CkBAIC0xNTc0LDYgKzE1NjYsMTEgQEAKIAkJCQlpbnQgcmV0OwogCQkJCXVuc2lnbmVkIGludCBmYXVsdF9mbGFncyA9IDA7CiAKKwkJCQkvKiBGb3IgbWxvY2ssIGp1c3Qgc2tpcCB0aGUgc3RhY2sgZ3VhcmQgcGFnZS4gKi8KKwkJCQlpZiAoZm9sbF9mbGFncyAmIEZPTExfTUxPQ0spIHsKKwkJCQkJaWYgKHN0YWNrX2d1YXJkX3BhZ2Uodm1hLCBzdGFydCkpCisJCQkJCQlnb3RvIG5leHRfcGFnZTsKKwkJCQl9CiAJCQkJaWYgKGZvbGxfZmxhZ3MgJiBGT0xMX1dSSVRFKQogCQkJCQlmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX1dSSVRFOwogCQkJCWlmIChub25ibG9ja2luZykKQEAgLTMzOTYsNyArMzM5Myw3IEBACiAJICogcnVuIHB0ZV9vZmZzZXRfbWFwIG9uIHRoZSBwbWQsIGlmIGFuIGh1Z2UgcG1kIGNvdWxkCiAJICogbWF0ZXJpYWxpemUgZnJvbSB1bmRlciB1cyBmcm9tIGEgZGlmZmVyZW50IHRocmVhZC4KIAkgKi8KLQlpZiAodW5saWtlbHkoX19wdGVfYWxsb2MobW0sIHZtYSwgcG1kLCBhZGRyZXNzKSkpCisJaWYgKHVubGlrZWx5KHBtZF9ub25lKCpwbWQpKSAmJiBfX3B0ZV9hbGxvYyhtbSwgdm1hLCBwbWQsIGFkZHJlc3MpKQogCQlyZXR1cm4gVk1fRkFVTFRfT09NOwogCS8qIGlmIGFuIGh1Z2UgcG1kIG1hdGVyaWFsaXplZCBmcm9tIHVuZGVyIHVzIGp1c3QgcmV0cnkgbGF0ZXIgKi8KIAlpZiAodW5saWtlbHkocG1kX3RyYW5zX2h1Z2UoKnBtZCkpKQpkaWZmIC0tZ2l0IGEvbW0vbWxvY2suYyBiL21tL21sb2NrLmMKaW5kZXggNmI1NWUzZS4uNTE2YjJjMiAxMDA2NDQKLS0tIGEvbW0vbWxvY2suYworKysgYi9tbS9tbG9jay5jCkBAIC0xNjIsNyArMTYyLDcgQEAKIAlWTV9CVUdfT04oZW5kICAgPiB2bWEtPnZtX2VuZCk7CiAJVk1fQlVHX09OKCFyd3NlbV9pc19sb2NrZWQoJm1tLT5tbWFwX3NlbSkpOwogCi0JZ3VwX2ZsYWdzID0gRk9MTF9UT1VDSDsKKwlndXBfZmxhZ3MgPSBGT0xMX1RPVUNIIHwgRk9MTF9NTE9DSzsKIAkvKgogCSAqIFdlIHdhbnQgdG8gdG91Y2ggd3JpdGFibGUgbWFwcGluZ3Mgd2l0aCBhIHdyaXRlIGZhdWx0IGluIG9yZGVyCiAJICogdG8gYnJlYWsgQ09XLCBleGNlcHQgZm9yIHNoYXJlZCBtYXBwaW5ncyBiZWNhdXNlIHRoZXNlIGRvbid0IENPVwpAQCAtMTc4LDkgKzE3OCw2IEBACiAJaWYgKHZtYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQykpCiAJCWd1cF9mbGFncyB8PSBGT0xMX0ZPUkNFOwogCi0JaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpCi0JCWd1cF9mbGFncyB8PSBGT0xMX01MT0NLOwotCiAJcmV0dXJuIF9fZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgbW0sIGFkZHIsIG5yX3BhZ2VzLCBndXBfZmxhZ3MsCiAJCQkJTlVMTCwgTlVMTCwgbm9uYmxvY2tpbmcpOwogfQpkaWZmIC0tZ2l0IGEvbW0vbW1hcC5jIGIvbW0vbW1hcC5jCmluZGV4IGUyN2UwY2YuLjc3MjE0MGMgMTAwNjQ0Ci0tLSBhL21tL21tYXAuYworKysgYi9tbS9tbWFwLmMKQEAgLTE3NjcsMTAgKzE3NjcsMTMgQEAKIAkJc2l6ZSA9IGFkZHJlc3MgLSB2bWEtPnZtX3N0YXJ0OwogCQlncm93ID0gKGFkZHJlc3MgLSB2bWEtPnZtX2VuZCkgPj4gUEFHRV9TSElGVDsKIAotCQllcnJvciA9IGFjY3Rfc3RhY2tfZ3Jvd3RoKHZtYSwgc2l6ZSwgZ3Jvdyk7Ci0JCWlmICghZXJyb3IpIHsKLQkJCXZtYS0+dm1fZW5kID0gYWRkcmVzczsKLQkJCXBlcmZfZXZlbnRfbW1hcCh2bWEpOworCQllcnJvciA9IC1FTk9NRU07CisJCWlmICh2bWEtPnZtX3Bnb2ZmICsgKHNpemUgPj4gUEFHRV9TSElGVCkgPj0gdm1hLT52bV9wZ29mZikgeworCQkJZXJyb3IgPSBhY2N0X3N0YWNrX2dyb3d0aCh2bWEsIHNpemUsIGdyb3cpOworCQkJaWYgKCFlcnJvcikgeworCQkJCXZtYS0+dm1fZW5kID0gYWRkcmVzczsKKwkJCQlwZXJmX2V2ZW50X21tYXAodm1hKTsKKwkJCX0KIAkJfQogCX0KIAl2bWFfdW5sb2NrX2Fub25fdm1hKHZtYSk7CmRpZmYgLS1naXQgYS9tbS9vb21fa2lsbC5jIGIvbW0vb29tX2tpbGwuYwppbmRleCA4M2ZiNzJjMS4uZjUyZTg1YyAxMDA2NDQKLS0tIGEvbW0vb29tX2tpbGwuYworKysgYi9tbS9vb21fa2lsbC5jCkBAIC0xNzIsMTAgKzE3MiwxMyBAQAogCiAJLyoKIAkgKiBUaGUgYmFzZWxpbmUgZm9yIHRoZSBiYWRuZXNzIHNjb3JlIGlzIHRoZSBwcm9wb3J0aW9uIG9mIFJBTSB0aGF0IGVhY2gKLQkgKiB0YXNrJ3MgcnNzIGFuZCBzd2FwIHNwYWNlIHVzZS4KKwkgKiB0YXNrJ3MgcnNzLCBwYWdldGFibGUgYW5kIHN3YXAgc3BhY2UgdXNlLgogCSAqLwotCXBvaW50cyA9IChnZXRfbW1fcnNzKHAtPm1tKSArIGdldF9tbV9jb3VudGVyKHAtPm1tLCBNTV9TV0FQRU5UUykpICogMTAwMCAvCi0JCQl0b3RhbHBhZ2VzOworCXBvaW50cyA9IGdldF9tbV9yc3MocC0+bW0pICsgcC0+bW0tPm5yX3B0ZXM7CisJcG9pbnRzICs9IGdldF9tbV9jb3VudGVyKHAtPm1tLCBNTV9TV0FQRU5UUyk7CisKKwlwb2ludHMgKj0gMTAwMDsKKwlwb2ludHMgLz0gdG90YWxwYWdlczsKIAl0YXNrX3VubG9jayhwKTsKIAogCS8qCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggOWY4YTk3Yi4uZDQ5ZGY3OCAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9rbWVtLmg+CiAjaW5jbHVkZSA8bGludXgvZnRyYWNlX2V2ZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvbWVtY29udHJvbC5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KQEAgLTIzMTcsNiArMjMxOCwyMSBAQAogCiBFWFBPUlRfU1lNQk9MKGZyZWVfcGFnZXMpOwogCitzdGF0aWMgdm9pZCAqbWFrZV9hbGxvY19leGFjdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIG9yZGVyLCBzaXplX3Qgc2l6ZSkKK3sKKwlpZiAoYWRkcikgeworCQl1bnNpZ25lZCBsb25nIGFsbG9jX2VuZCA9IGFkZHIgKyAoUEFHRV9TSVpFIDw8IG9yZGVyKTsKKwkJdW5zaWduZWQgbG9uZyB1c2VkID0gYWRkciArIFBBR0VfQUxJR04oc2l6ZSk7CisKKwkJc3BsaXRfcGFnZSh2aXJ0X3RvX3BhZ2UoKHZvaWQgKilhZGRyKSwgb3JkZXIpOworCQl3aGlsZSAodXNlZCA8IGFsbG9jX2VuZCkgeworCQkJZnJlZV9wYWdlKHVzZWQpOworCQkJdXNlZCArPSBQQUdFX1NJWkU7CisJCX0KKwl9CisJcmV0dXJuICh2b2lkICopYWRkcjsKK30KKwogLyoqCiAgKiBhbGxvY19wYWdlc19leGFjdCAtIGFsbG9jYXRlIGFuIGV4YWN0IG51bWJlciBwaHlzaWNhbGx5LWNvbnRpZ3VvdXMgcGFnZXMuCiAgKiBAc2l6ZTogdGhlIG51bWJlciBvZiBieXRlcyB0byBhbGxvY2F0ZQpAQCAtMjMzNiwyMiArMjM1MiwzMyBAQAogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAogCWFkZHIgPSBfX2dldF9mcmVlX3BhZ2VzKGdmcF9tYXNrLCBvcmRlcik7Ci0JaWYgKGFkZHIpIHsKLQkJdW5zaWduZWQgbG9uZyBhbGxvY19lbmQgPSBhZGRyICsgKFBBR0VfU0laRSA8PCBvcmRlcik7Ci0JCXVuc2lnbmVkIGxvbmcgdXNlZCA9IGFkZHIgKyBQQUdFX0FMSUdOKHNpemUpOwotCi0JCXNwbGl0X3BhZ2UodmlydF90b19wYWdlKCh2b2lkICopYWRkciksIG9yZGVyKTsKLQkJd2hpbGUgKHVzZWQgPCBhbGxvY19lbmQpIHsKLQkJCWZyZWVfcGFnZSh1c2VkKTsKLQkJCXVzZWQgKz0gUEFHRV9TSVpFOwotCQl9Ci0JfQotCi0JcmV0dXJuICh2b2lkICopYWRkcjsKKwlyZXR1cm4gbWFrZV9hbGxvY19leGFjdChhZGRyLCBvcmRlciwgc2l6ZSk7CiB9CiBFWFBPUlRfU1lNQk9MKGFsbG9jX3BhZ2VzX2V4YWN0KTsKIAogLyoqCisgKiBhbGxvY19wYWdlc19leGFjdF9uaWQgLSBhbGxvY2F0ZSBhbiBleGFjdCBudW1iZXIgb2YgcGh5c2ljYWxseS1jb250aWd1b3VzCisgKgkJCSAgIHBhZ2VzIG9uIGEgbm9kZS4KKyAqIEBuaWQ6IHRoZSBwcmVmZXJyZWQgbm9kZSBJRCB3aGVyZSBtZW1vcnkgc2hvdWxkIGJlIGFsbG9jYXRlZAorICogQHNpemU6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYWxsb2NhdGUKKyAqIEBnZnBfbWFzazogR0ZQIGZsYWdzIGZvciB0aGUgYWxsb2NhdGlvbgorICoKKyAqIExpa2UgYWxsb2NfcGFnZXNfZXhhY3QoKSwgYnV0IHRyeSB0byBhbGxvY2F0ZSBvbiBub2RlIG5pZCBmaXJzdCBiZWZvcmUgZmFsbGluZworICogYmFjay4KKyAqIE5vdGUgdGhpcyBpcyBub3QgYWxsb2NfcGFnZXNfZXhhY3Rfbm9kZSgpIHdoaWNoIGFsbG9jYXRlcyBvbiBhIHNwZWNpZmljIG5vZGUsCisgKiBidXQgaXMgbm90IGV4YWN0LgorICovCit2b2lkICphbGxvY19wYWdlc19leGFjdF9uaWQoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKQoreworCXVuc2lnbmVkIG9yZGVyID0gZ2V0X29yZGVyKHNpemUpOworCXN0cnVjdCBwYWdlICpwID0gYWxsb2NfcGFnZXNfbm9kZShuaWQsIGdmcF9tYXNrLCBvcmRlcik7CisJaWYgKCFwKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gbWFrZV9hbGxvY19leGFjdCgodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocCksIG9yZGVyLCBzaXplKTsKK30KK0VYUE9SVF9TWU1CT0woYWxsb2NfcGFnZXNfZXhhY3RfbmlkKTsKKworLyoqCiAgKiBmcmVlX3BhZ2VzX2V4YWN0IC0gcmVsZWFzZSBtZW1vcnkgYWxsb2NhdGVkIHZpYSBhbGxvY19wYWdlc19leGFjdCgpCiAgKiBAdmlydDogdGhlIHZhbHVlIHJldHVybmVkIGJ5IGFsbG9jX3BhZ2VzX2V4YWN0LgogICogQHNpemU6IHNpemUgb2YgYWxsb2NhdGlvbiwgc2FtZSB2YWx1ZSBhcyBwYXNzZWQgdG8gYWxsb2NfcGFnZXNfZXhhY3QoKS4KQEAgLTM1NjQsNyArMzU5MSw3IEBACiAKIAlpZiAoIXNsYWJfaXNfYXZhaWxhYmxlKCkpIHsKIAkJem9uZS0+d2FpdF90YWJsZSA9ICh3YWl0X3F1ZXVlX2hlYWRfdCAqKQotCQkJYWxsb2NfYm9vdG1lbV9ub2RlKHBnZGF0LCBhbGxvY19zaXplKTsKKwkJCWFsbG9jX2Jvb3RtZW1fbm9kZV9ub3BhbmljKHBnZGF0LCBhbGxvY19zaXplKTsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBUaGlzIGNhc2UgbWVhbnMgdGhhdCBhIHpvbmUgd2hvc2Ugc2l6ZSB3YXMgMCBnZXRzIG5ldyBtZW1vcnkKQEAgLTQxNDEsNyArNDE2OCw4IEBACiAJdW5zaWduZWQgbG9uZyB1c2VtYXBzaXplID0gdXNlbWFwX3NpemUoem9uZXNpemUpOwogCXpvbmUtPnBhZ2VibG9ja19mbGFncyA9IE5VTEw7CiAJaWYgKHVzZW1hcHNpemUpCi0JCXpvbmUtPnBhZ2VibG9ja19mbGFncyA9IGFsbG9jX2Jvb3RtZW1fbm9kZShwZ2RhdCwgdXNlbWFwc2l6ZSk7CisJCXpvbmUtPnBhZ2VibG9ja19mbGFncyA9IGFsbG9jX2Jvb3RtZW1fbm9kZV9ub3BhbmljKHBnZGF0LAorCQkJCQkJCQkgICB1c2VtYXBzaXplKTsKIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfdXNlbWFwKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsCkBAIC00MzA3LDcgKzQzMzUsNyBAQAogCQlzaXplID0gIChlbmQgLSBzdGFydCkgKiBzaXplb2Yoc3RydWN0IHBhZ2UpOwogCQltYXAgPSBhbGxvY19yZW1hcChwZ2RhdC0+bm9kZV9pZCwgc2l6ZSk7CiAJCWlmICghbWFwKQotCQkJbWFwID0gYWxsb2NfYm9vdG1lbV9ub2RlKHBnZGF0LCBzaXplKTsKKwkJCW1hcCA9IGFsbG9jX2Jvb3RtZW1fbm9kZV9ub3BhbmljKHBnZGF0LCBzaXplKTsKIAkJcGdkYXQtPm5vZGVfbWVtX21hcCA9IG1hcCArIChwZ2RhdC0+bm9kZV9zdGFydF9wZm4gLSBzdGFydCk7CiAJfQogI2lmbmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUwpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9jZ3JvdXAuYyBiL21tL3BhZ2VfY2dyb3VwLmMKaW5kZXggOTkwNTUwMS4uMmRhYWRjMyAxMDA2NDQKLS0tIGEvbW0vcGFnZV9jZ3JvdXAuYworKysgYi9tbS9wYWdlX2Nncm91cC5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIHsKIAl2b2lkICphZGRyID0gTlVMTDsKIAotCWFkZHIgPSBhbGxvY19wYWdlc19leGFjdChzaXplLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTsKKwlhZGRyID0gYWxsb2NfcGFnZXNfZXhhY3RfbmlkKG5pZCwgc2l6ZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7CiAJaWYgKGFkZHIpCiAJCXJldHVybiBhZGRyOwogCmRpZmYgLS1naXQgYS9tbS9wcmlvX3RyZWUuYyBiL21tL3ByaW9fdHJlZS5jCmluZGV4IDYwM2FlOTguLjc5OWRjZmQgMTAwNjQ0Ci0tLSBhL21tL3ByaW9fdHJlZS5jCisrKyBiL21tL3ByaW9fdHJlZS5jCkBAIC0xMyw2ICsxMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3ByaW9fdHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKIC8qCiAgKiBTZWUgbGliL3ByaW9fdHJlZS5jIGZvciBkZXRhaWxzIG9uIHRoZSBnZW5lcmFsIHJhZGl4IHByaW9yaXR5IHNlYXJjaCB0cmVlCmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA4ZmEyN2U0Li5iYTRhZDI4IDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCisrKyBiL21tL3NobWVtLmMKQEAgLTg1Miw3ICs4NTIsNyBAQAogCiBzdGF0aWMgaW50IHNobWVtX3VudXNlX2lub2RlKHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvLCBzd3BfZW50cnlfdCBlbnRyeSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKIAl1bnNpZ25lZCBsb25nIGlkeDsKIAl1bnNpZ25lZCBsb25nIHNpemU7CiAJdW5zaWduZWQgbG9uZyBsaW1pdDsKQEAgLTg3NSw4ICs4NzUsMTAgQEAKIAlpZiAoc2l6ZSA+IFNITUVNX05SX0RJUkVDVCkKIAkJc2l6ZSA9IFNITUVNX05SX0RJUkVDVDsKIAlvZmZzZXQgPSBzaG1lbV9maW5kX3N3cChlbnRyeSwgcHRyLCBwdHIrc2l6ZSk7Ci0JaWYgKG9mZnNldCA+PSAwKQorCWlmIChvZmZzZXQgPj0gMCkgeworCQlzaG1lbV9zd3BfYmFsYW5jZV91bm1hcCgpOwogCQlnb3RvIGZvdW5kOworCX0KIAlpZiAoIWluZm8tPmlfaW5kaXJlY3QpCiAJCWdvdG8gbG9zdDI7CiAKQEAgLTkxNyw2ICs5MTksNyBAQAogCQkJc2htZW1fc3dwX3VubWFwKHB0cik7CiAJCQlpZiAob2Zmc2V0ID49IDApIHsKIAkJCQlzaG1lbV9kaXJfdW5tYXAoZGlyKTsKKwkJCQlwdHIgPSBzaG1lbV9zd3BfbWFwKHN1YmRpcik7CiAJCQkJZ290byBmb3VuZDsKIAkJCX0KIAkJfQpAQCAtOTI4LDggKzkzMSw3IEBACiAJcmV0dXJuIDA7CiBmb3VuZDoKIAlpZHggKz0gb2Zmc2V0OwotCWlub2RlID0gaWdyYWIoJmluZm8tPnZmc19pbm9kZSk7Ci0Jc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOworCXB0ciArPSBvZmZzZXQ7CiAKIAkvKgogCSAqIE1vdmUgX2hlYWRfIHRvIHN0YXJ0IHNlYXJjaCBmb3IgbmV4dCBmcm9tIGhlcmUuCkBAIC05NDAsMzcgKzk0MiwxOCBAQAogCSAqLwogCWlmIChzaG1lbV9zd2FwbGlzdC5uZXh0ICE9ICZpbmZvLT5zd2FwbGlzdCkKIAkJbGlzdF9tb3ZlX3RhaWwoJnNobWVtX3N3YXBsaXN0LCAmaW5mby0+c3dhcGxpc3QpOwotCW11dGV4X3VubG9jaygmc2htZW1fc3dhcGxpc3RfbXV0ZXgpOwogCi0JZXJyb3IgPSAxOwotCWlmICghaW5vZGUpCi0JCWdvdG8gb3V0OwogCS8qCi0JICogQ2hhcmdlIHBhZ2UgdXNpbmcgR0ZQX0tFUk5FTCB3aGlsZSB3ZSBjYW4gd2FpdC4KLQkgKiBDaGFyZ2VkIGJhY2sgdG8gdGhlIHVzZXIobm90IHRvIGNhbGxlcikgd2hlbiBzd2FwIGFjY291bnQgaXMgdXNlZC4KLQkgKiBhZGRfdG9fcGFnZV9jYWNoZSgpIHdpbGwgYmUgY2FsbGVkIHdpdGggR0ZQX05PV0FJVC4KKwkgKiBXZSByZWx5IG9uIHNobWVtX3N3YXBsaXN0X211dGV4LCBub3Qgb25seSB0byBwcm90ZWN0IHRoZSBzd2FwbGlzdCwKKwkgKiBidXQgYWxzbyB0byBob2xkIHVwIHNobWVtX2V2aWN0X2lub2RlKCk6IHNvIGlub2RlIGNhbm5vdCBiZSBmcmVlZAorCSAqIGJlbmVhdGggdXMgKHBhZ2Vsb2NrIGRvZXNuJ3QgaGVscCB1bnRpbCB0aGUgcGFnZSBpcyBpbiBwYWdlY2FjaGUpLgogCSAqLwotCWVycm9yID0gbWVtX2Nncm91cF9jYWNoZV9jaGFyZ2UocGFnZSwgY3VycmVudC0+bW0sIEdGUF9LRVJORUwpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXQ7Ci0JZXJyb3IgPSByYWRpeF90cmVlX3ByZWxvYWQoR0ZQX0tFUk5FTCk7Ci0JaWYgKGVycm9yKSB7Ci0JCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfY2FjaGVfcGFnZShwYWdlKTsKLQkJZ290byBvdXQ7Ci0JfQotCWVycm9yID0gMTsKLQotCXNwaW5fbG9jaygmaW5mby0+bG9jayk7Ci0JcHRyID0gc2htZW1fc3dwX2VudHJ5KGluZm8sIGlkeCwgTlVMTCk7Ci0JaWYgKHB0ciAmJiBwdHItPnZhbCA9PSBlbnRyeS52YWwpIHsKLQkJZXJyb3IgPSBhZGRfdG9fcGFnZV9jYWNoZV9sb2NrZWQocGFnZSwgaW5vZGUtPmlfbWFwcGluZywKLQkJCQkJCWlkeCwgR0ZQX05PV0FJVCk7Ci0JCS8qIGRvZXMgbWVtX2Nncm91cF91bmNoYXJnZV9jYWNoZV9wYWdlIG9uIGVycm9yICovCi0JfSBlbHNlCS8qIHdlIG11c3QgY29tcGVuc2F0ZSBmb3Igb3VyIHByZWNoYXJnZSBhYm92ZSAqLwotCQltZW1fY2dyb3VwX3VuY2hhcmdlX2NhY2hlX3BhZ2UocGFnZSk7CisJbWFwcGluZyA9IGluZm8tPnZmc19pbm9kZS5pX21hcHBpbmc7CisJZXJyb3IgPSBhZGRfdG9fcGFnZV9jYWNoZV9sb2NrZWQocGFnZSwgbWFwcGluZywgaWR4LCBHRlBfTk9XQUlUKTsKKwkvKiB3aGljaCBkb2VzIG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY2FjaGVfcGFnZSBvbiBlcnJvciAqLwogCiAJaWYgKGVycm9yID09IC1FRVhJU1QpIHsKLQkJc3RydWN0IHBhZ2UgKmZpbGVwYWdlID0gZmluZF9nZXRfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpZHgpOworCQlzdHJ1Y3QgcGFnZSAqZmlsZXBhZ2UgPSBmaW5kX2dldF9wYWdlKG1hcHBpbmcsIGlkeCk7CiAJCWVycm9yID0gMTsKIAkJaWYgKGZpbGVwYWdlKSB7CiAJCQkvKgpAQCAtOTkwLDE0ICs5NzMsOCBAQAogCQlzd2FwX2ZyZWUoZW50cnkpOwogCQllcnJvciA9IDE7CS8qIG5vdCBhbiBlcnJvciwgYnV0IGVudHJ5IHdhcyBmb3VuZCAqLwogCX0KLQlpZiAocHRyKQotCQlzaG1lbV9zd3BfdW5tYXAocHRyKTsKKwlzaG1lbV9zd3BfdW5tYXAocHRyKTsKIAlzcGluX3VubG9jaygmaW5mby0+bG9jayk7Ci0JcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOwotb3V0OgotCXVubG9ja19wYWdlKHBhZ2UpOwotCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKLQlpcHV0KGlub2RlKTsJCS8qIGFsbG93cyBmb3IgTlVMTCAqLwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMTAwOSw2ICs5ODYsMjYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqbmV4dDsKIAlzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbzsKIAlpbnQgZm91bmQgPSAwOworCWludCBlcnJvcjsKKworCS8qCisJICogQ2hhcmdlIHBhZ2UgdXNpbmcgR0ZQX0tFUk5FTCB3aGlsZSB3ZSBjYW4gd2FpdCwgYmVmb3JlIHRha2luZworCSAqIHRoZSBzaG1lbV9zd2FwbGlzdF9tdXRleCB3aGljaCBtaWdodCBob2xkIHVwIHNobWVtX3dyaXRlcGFnZSgpLgorCSAqIENoYXJnZWQgYmFjayB0byB0aGUgdXNlciAobm90IHRvIGNhbGxlcikgd2hlbiBzd2FwIGFjY291bnQgaXMgdXNlZC4KKwkgKiBhZGRfdG9fcGFnZV9jYWNoZSgpIHdpbGwgYmUgY2FsbGVkIHdpdGggR0ZQX05PV0FJVC4KKwkgKi8KKwllcnJvciA9IG1lbV9jZ3JvdXBfY2FjaGVfY2hhcmdlKHBhZ2UsIGN1cnJlbnQtPm1tLCBHRlBfS0VSTkVMKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0OworCS8qCisJICogVHJ5IHRvIHByZWxvYWQgd2hpbGUgd2UgY2FuIHdhaXQsIHRvIG5vdCBtYWtlIGEgaGFiaXQgb2YKKwkgKiBkcmFpbmluZyBhdG9taWMgcmVzZXJ2ZXM7IGJ1dCBkb24ndCBsYXRjaCBvbiB0byB0aGlzIGNwdSwKKwkgKiBpdCdzIG9rYXkgaWYgc29tZXRpbWVzIHdlIGdldCByZXNjaGVkdWxlZCBhZnRlciB0aGlzLgorCSAqLworCWVycm9yID0gcmFkaXhfdHJlZV9wcmVsb2FkKEdGUF9LRVJORUwpOworCWlmIChlcnJvcikKKwkJZ290byB1bmNoYXJnZTsKKwlyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7CiAKIAltdXRleF9sb2NrKCZzaG1lbV9zd2FwbGlzdF9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9zYWZlKHAsIG5leHQsICZzaG1lbV9zd2FwbGlzdCkgewpAQCAtMTAxNiwxNyArMTAxMywxOSBAQAogCQlmb3VuZCA9IHNobWVtX3VudXNlX2lub2RlKGluZm8sIGVudHJ5LCBwYWdlKTsKIAkJY29uZF9yZXNjaGVkKCk7CiAJCWlmIChmb3VuZCkKLQkJCWdvdG8gb3V0OworCQkJYnJlYWs7CiAJfQogCW11dGV4X3VubG9jaygmc2htZW1fc3dhcGxpc3RfbXV0ZXgpOwotCS8qCi0JICogQ2FuIHNvbWUgcmFjZSBicmluZyB1cyBoZXJlPyAgV2UndmUgYmVlbiBob2xkaW5nIHBhZ2UgbG9jaywKLQkgKiBzbyBJIHRoaW5rIG5vdDsgYnV0IHdvdWxkIHJhdGhlciB0cnkgYWdhaW4gbGF0ZXIgdGhhbiBCVUcoKQotCSAqLworCit1bmNoYXJnZToKKwlpZiAoIWZvdW5kKQorCQltZW1fY2dyb3VwX3VuY2hhcmdlX2NhY2hlX3BhZ2UocGFnZSk7CisJaWYgKGZvdW5kIDwgMCkKKwkJZXJyb3IgPSBmb3VuZDsKK291dDoKIAl1bmxvY2tfcGFnZShwYWdlKTsKIAlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci1vdXQ6Ci0JcmV0dXJuIChmb3VuZCA8IDApID8gZm91bmQgOiAwOworCXJldHVybiBlcnJvcjsKIH0KIAogLyoKQEAgLTEwNjQsNyArMTA2MywyNSBAQAogCWVsc2UKIAkJc3dhcC52YWwgPSAwOwogCisJLyoKKwkgKiBBZGQgaW5vZGUgdG8gc2htZW1fdW51c2UoKSdzIGxpc3Qgb2Ygc3dhcHBlZC1vdXQgaW5vZGVzLAorCSAqIGlmIGl0J3Mgbm90IGFscmVhZHkgdGhlcmUuICBEbyBpdCBub3cgYmVjYXVzZSB3ZSBjYW5ub3QgdGFrZQorCSAqIG11dGV4IHdoaWxlIGhvbGRpbmcgc3BpbmxvY2ssIGFuZCBtdXN0IGRvIHNvIGJlZm9yZSB0aGUgcGFnZQorCSAqIGlzIG1vdmVkIHRvIHN3YXAgY2FjaGUsIHdoZW4gaXRzIHBhZ2Vsb2NrIG5vIGxvbmdlciBwcm90ZWN0cworCSAqIHRoZSBpbm9kZSBmcm9tIGV2aWN0aW9uLiAgQnV0IGRvbid0IHVubG9jayB0aGUgbXV0ZXggdW50aWwKKwkgKiB3ZSd2ZSB0YWtlbiB0aGUgc3BpbmxvY2ssIGJlY2F1c2Ugc2htZW1fdW51c2VfaW5vZGUoKSB3aWxsCisJICogcHJ1bmUgYSAhc3dhcHBlZCBpbm9kZSBmcm9tIHRoZSBzd2FwbGlzdCB1bmRlciBib3RoIGxvY2tzLgorCSAqLworCWlmIChzd2FwLnZhbCkgeworCQltdXRleF9sb2NrKCZzaG1lbV9zd2FwbGlzdF9tdXRleCk7CisJCWlmIChsaXN0X2VtcHR5KCZpbmZvLT5zd2FwbGlzdCkpCisJCQlsaXN0X2FkZF90YWlsKCZpbmZvLT5zd2FwbGlzdCwgJnNobWVtX3N3YXBsaXN0KTsKKwl9CisKIAlzcGluX2xvY2soJmluZm8tPmxvY2spOworCWlmIChzd2FwLnZhbCkKKwkJbXV0ZXhfdW5sb2NrKCZzaG1lbV9zd2FwbGlzdF9tdXRleCk7CisKIAlpZiAoaW5kZXggPj0gaW5mby0+bmV4dF9pbmRleCkgewogCQlCVUdfT04oIShpbmZvLT5mbGFncyAmIFNITUVNX1RSVU5DQVRFKSk7CiAJCWdvdG8gdW5sb2NrOwpAQCAtMTA4NCwyMSArMTEwMSwxMCBAQAogCQlkZWxldGVfZnJvbV9wYWdlX2NhY2hlKHBhZ2UpOwogCQlzaG1lbV9zd3Bfc2V0KGluZm8sIGVudHJ5LCBzd2FwLnZhbCk7CiAJCXNobWVtX3N3cF91bm1hcChlbnRyeSk7Ci0JCWlmIChsaXN0X2VtcHR5KCZpbmZvLT5zd2FwbGlzdCkpCi0JCQlpbm9kZSA9IGlncmFiKGlub2RlKTsKLQkJZWxzZQotCQkJaW5vZGUgPSBOVUxMOwogCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CiAJCXN3YXBfc2htZW1fYWxsb2Moc3dhcCk7CiAJCUJVR19PTihwYWdlX21hcHBlZChwYWdlKSk7CiAJCXN3YXBfd3JpdGVwYWdlKHBhZ2UsIHdiYyk7Ci0JCWlmIChpbm9kZSkgewotCQkJbXV0ZXhfbG9jaygmc2htZW1fc3dhcGxpc3RfbXV0ZXgpOwotCQkJLyogbW92ZSBpbnN0ZWFkIG9mIGFkZCBpbiBjYXNlIHdlJ3JlIHJhY2luZyAqLwotCQkJbGlzdF9tb3ZlX3RhaWwoJmluZm8tPnN3YXBsaXN0LCAmc2htZW1fc3dhcGxpc3QpOwotCQkJbXV0ZXhfdW5sb2NrKCZzaG1lbV9zd2FwbGlzdF9tdXRleCk7Ci0JCQlpcHV0KGlub2RlKTsKLQkJfQogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE0MDAsMjAgKzE0MDYsMTQgQEAKIAkJaWYgKHNiaW5mby0+bWF4X2Jsb2NrcykgewogCQkJaWYgKHBlcmNwdV9jb3VudGVyX2NvbXBhcmUoJnNiaW5mby0+dXNlZF9ibG9ja3MsCiAJCQkJCQlzYmluZm8tPm1heF9ibG9ja3MpID49IDAgfHwKLQkJCSAgICBzaG1lbV9hY2N0X2Jsb2NrKGluZm8tPmZsYWdzKSkgewotCQkJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKLQkJCQllcnJvciA9IC1FTk9TUEM7Ci0JCQkJZ290byBmYWlsZWQ7Ci0JCQl9CisJCQkgICAgc2htZW1fYWNjdF9ibG9jayhpbmZvLT5mbGFncykpCisJCQkJZ290byBub3NwYWNlOwogCQkJcGVyY3B1X2NvdW50ZXJfaW5jKCZzYmluZm8tPnVzZWRfYmxvY2tzKTsKIAkJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAJCQlpbm9kZS0+aV9ibG9ja3MgKz0gQkxPQ0tTX1BFUl9QQUdFOwogCQkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwotCQl9IGVsc2UgaWYgKHNobWVtX2FjY3RfYmxvY2soaW5mby0+ZmxhZ3MpKSB7Ci0JCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7Ci0JCQllcnJvciA9IC1FTk9TUEM7Ci0JCQlnb3RvIGZhaWxlZDsKLQkJfQorCQl9IGVsc2UgaWYgKHNobWVtX2FjY3RfYmxvY2soaW5mby0+ZmxhZ3MpKQorCQkJZ290byBub3NwYWNlOwogCiAJCWlmICghZmlsZXBhZ2UpIHsKIAkJCWludCByZXQ7CkBAIC0xNDkzLDYgKzE0OTMsMjQgQEAKIAllcnJvciA9IDA7CiAJZ290byBvdXQ7CiAKK25vc3BhY2U6CisJLyoKKwkgKiBQZXJoYXBzIHRoZSBwYWdlIHdhcyBicm91Z2h0IGluIGZyb20gc3dhcCBiZXR3ZWVuIGZpbmRfbG9ja19wYWdlCisJICogYW5kIHRha2luZyBpbmZvLT5sb2NrPyAgV2UgYWxsb3cgZm9yIHRoYXQgYXQgYWRkX3RvX3BhZ2VfY2FjaGVfbHJ1LAorCSAqIGJ1dCBtdXN0IGFsc28gYXZvaWQgcmVwb3J0aW5nIGEgc3B1cmlvdXMgRU5PU1BDIHdoaWxlIHdvcmtpbmcgb24gYQorCSAqIGZ1bGwgdG1wZnMuICAoV2hlbiBmaWxlcGFnZSBoYXMgYmVlbiBwYXNzZWQgaW4gdG8gc2htZW1fZ2V0cGFnZSwgaXQKKwkgKiBpcyBhbHJlYWR5IGluIHBhZ2UgY2FjaGUsIHdoaWNoIHByZXZlbnRzIHRoaXMgcmFjZSBmcm9tIG9jY3VycmluZy4pCisJICovCisJaWYgKCFmaWxlcGFnZSkgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZpbmRfZ2V0X3BhZ2UobWFwcGluZywgaWR4KTsKKwkJaWYgKHBhZ2UpIHsKKwkJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJCWdvdG8gcmVwZWF0OworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwllcnJvciA9IC1FTk9TUEM7CiBmYWlsZWQ6CiAJaWYgKCpwYWdlcCAhPSBmaWxlcGFnZSkgewogCQl1bmxvY2tfcGFnZShmaWxlcGFnZSk7CmRpZmYgLS1naXQgYS9tbS9zbGFiLmMgYi9tbS9zbGFiLmMKaW5kZXggNDZhOWMxNi4uYmNmYTQ5OCAxMDA2NDQKLS0tIGEvbW0vc2xhYi5jCisrKyBiL21tL3NsYWIuYwpAQCAtMTE1LDYgKzExNSw3IEBACiAjaW5jbHVkZQk8bGludXgvZGVidWdvYmplY3RzLmg+CiAjaW5jbHVkZQk8bGludXgva21lbWNoZWNrLmg+CiAjaW5jbHVkZQk8bGludXgvbWVtb3J5Lmg+CisjaW5jbHVkZQk8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUJPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZQk8YXNtL3RsYmZsdXNoLmg+CmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMKaW5kZXggOTRkMmEzMy4uOWQyZTVlNCAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCisrKyBiL21tL3NsdWIuYwpAQCAtMTk0MCw3ICsxOTQwLDcgQEAKIAkJICogU2luY2UgdGhpcyBpcyB3aXRob3V0IGxvY2sgc2VtYW50aWNzIHRoZSBwcm90ZWN0aW9uIGlzIG9ubHkgYWdhaW5zdAogCQkgKiBjb2RlIGV4ZWN1dGluZyBvbiB0aGlzIGNwdSAqbm90KiBmcm9tIGFjY2VzcyBieSBvdGhlciBjcHVzLgogCQkgKi8KLQkJaWYgKHVubGlrZWx5KCF0aGlzX2NwdV9jbXB4Y2hnX2RvdWJsZSgKKwkJaWYgKHVubGlrZWx5KCFpcnFzYWZlX2NwdV9jbXB4Y2hnX2RvdWJsZSgKIAkJCQlzLT5jcHVfc2xhYi0+ZnJlZWxpc3QsIHMtPmNwdV9zbGFiLT50aWQsCiAJCQkJb2JqZWN0LCB0aWQsCiAJCQkJZ2V0X2ZyZWVwb2ludGVyKHMsIG9iamVjdCksIG5leHRfdGlkKHRpZCkpKSkgewpAQCAtMjE0NSw3ICsyMTQ1LDcgQEAKIAkJc2V0X2ZyZWVwb2ludGVyKHMsIG9iamVjdCwgYy0+ZnJlZWxpc3QpOwogCiAjaWZkZWYgQ09ORklHX0NNUFhDSEdfTE9DQUwKLQkJaWYgKHVubGlrZWx5KCF0aGlzX2NwdV9jbXB4Y2hnX2RvdWJsZSgKKwkJaWYgKHVubGlrZWx5KCFpcnFzYWZlX2NwdV9jbXB4Y2hnX2RvdWJsZSgKIAkJCQlzLT5jcHVfc2xhYi0+ZnJlZWxpc3QsIHMtPmNwdV9zbGFiLT50aWQsCiAJCQkJYy0+ZnJlZWxpc3QsIHRpZCwKIAkJCQlvYmplY3QsIG5leHRfdGlkKHRpZCkpKSkgewpkaWZmIC0tZ2l0IGEvbW0vc3dhcC5jIGIvbW0vc3dhcC5jCmluZGV4IGE0NDhkYjMuLjU2MDJmMWEgMTAwNjQ0Ci0tLSBhL21tL3N3YXAuYworKysgYi9tbS9zd2FwLmMKQEAgLTM5Niw2ICszOTYsOSBAQAogCWlmICghUGFnZUxSVShwYWdlKSkKIAkJcmV0dXJuOwogCisJaWYgKFBhZ2VVbmV2aWN0YWJsZShwYWdlKSkKKwkJcmV0dXJuOworCiAJLyogU29tZSBwcm9jZXNzZXMgYXJlIHVzaW5nIHRoZSBwYWdlICovCiAJaWYgKHBhZ2VfbWFwcGVkKHBhZ2UpKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGY2YjQzNWMuLmM5MTc3MjAgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXlhY2N0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvb29tLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgpAQCAtOTM3LDcgKzkzOCw3IEBACiAJICogYmFjayBvZmYgYW5kIHdhaXQgZm9yIGNvbmdlc3Rpb24gdG8gY2xlYXIgYmVjYXVzZSBmdXJ0aGVyIHJlY2xhaW0KIAkgKiB3aWxsIGVuY291bnRlciB0aGUgc2FtZSBwcm9ibGVtCiAJICovCi0JaWYgKG5yX2RpcnR5ID09IG5yX2Nvbmdlc3RlZCAmJiBucl9kaXJ0eSAhPSAwKQorCWlmIChucl9kaXJ0eSAmJiBucl9kaXJ0eSA9PSBucl9jb25nZXN0ZWQgJiYgc2Nhbm5pbmdfZ2xvYmFsX2xydShzYykpCiAJCXpvbmVfc2V0X2ZsYWcoem9uZSwgWk9ORV9DT05HRVNURUQpOwogCiAJZnJlZV9wYWdlX2xpc3QoJmZyZWVfcGFnZXMpOwpkaWZmIC0tZ2l0IGEvbmV0LzgwMi9nYXJwLmMgYi9uZXQvODAyL2dhcnAuYwppbmRleCBjMWRmMmRhLi4xNjEwMjk1IDEwMDY0NAotLS0gYS9uZXQvODAyL2dhcnAuYworKysgYi9uZXQvODAyL2dhcnAuYwpAQCAtNTU0LDggKzU1NCw3IEBACiAJCQlyZXR1cm47CiAJfQogCXJjdV9hc3NpZ25fcG9pbnRlcihkZXYtPmdhcnBfcG9ydCwgTlVMTCk7Ci0Jc3luY2hyb25pemVfcmN1KCk7Ci0Ja2ZyZWUocG9ydCk7CisJa2ZyZWVfcmN1KHBvcnQsIHJjdSk7CiB9CiAKIGludCBnYXJwX2luaXRfYXBwbGljYW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBnYXJwX2FwcGxpY2F0aW9uICphcHBsKQpAQCAtNjA3LDcgKzYwNiw2IEBACiAJQVNTRVJUX1JUTkwoKTsKIAogCXJjdV9hc3NpZ25fcG9pbnRlcihwb3J0LT5hcHBsaWNhbnRzW2FwcGwtPnR5cGVdLCBOVUxMKTsKLQlzeW5jaHJvbml6ZV9yY3UoKTsKIAogCS8qIERlbGV0ZSB0aW1lciBhbmQgZ2VuZXJhdGUgYSBmaW5hbCBUUkFOU01JVF9QRFUgZXZlbnQgdG8gZmx1c2ggb3V0CiAJICogYWxsIHBlbmRpbmcgbWVzc2FnZXMgYmVmb3JlIHRoZSBhcHBsaWNhbnQgaXMgZ29uZS4gKi8KQEAgLTYxNyw3ICs2MTUsNyBAQAogCWdhcnBfcXVldWVfeG1pdChhcHApOwogCiAJZGV2X21jX2RlbChkZXYsIGFwcGwtPnByb3RvLmdyb3VwX2FkZHJlc3MpOwotCWtmcmVlKGFwcCk7CisJa2ZyZWVfcmN1KGFwcCwgcmN1KTsKIAlnYXJwX3JlbGVhc2VfcG9ydChkZXYpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2FycF91bmluaXRfYXBwbGljYW50KTsKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmMgYi9uZXQvODAyMXEvdmxhbi5jCmluZGV4IDc4NTA0MTIuLmIyMjc0ZDEgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuLmMKKysrIGIvbmV0LzgwMjFxL3ZsYW4uYwpAQCAtNDksMTEgKzQ5LDYgQEAKIHN0YXRpYyBjb25zdCBjaGFyIHZsYW5fY29weXJpZ2h0W10gPSAiQmVuIEdyZWVhciA8Z3JlZWFyYkBjYW5kZWxhdGVjaC5jb20+IjsKIHN0YXRpYyBjb25zdCBjaGFyIHZsYW5fYnVnZ3lyaWdodFtdID0gIkRhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AcmVkaGF0LmNvbT4iOwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHZsYW5fcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKLQkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QXzgwMjFRKSwKLQkuZnVuYyA9IHZsYW5fc2tiX3JlY3YsIC8qIFZMQU4gcmVjZWl2ZSBtZXRob2QgKi8KLX07Ci0KIC8qIEVuZCBvZiBnbG9iYWwgdmFyaWFibGVzIGRlZmluaXRpb25zLiAqLwogCiBzdGF0aWMgdm9pZCB2bGFuX2dyb3VwX2ZyZWUoc3RydWN0IHZsYW5fZ3JvdXAgKmdycCkKQEAgLTEyNCwxMCArMTE5LDE0IEBACiAKIAlncnAtPm5yX3ZsYW5zLS07CiAKLQl2bGFuX2dyb3VwX3NldF9kZXZpY2UoZ3JwLCB2bGFuX2lkLCBOVUxMKTsKLQlpZiAoIWdycC0+a2lsbGFsbCkKLQkJc3luY2hyb25pemVfbmV0KCk7CisJaWYgKHZsYW4tPmZsYWdzICYgVkxBTl9GTEFHX0dWUlApCisJCXZsYW5fZ3ZycF9yZXF1ZXN0X2xlYXZlKGRldik7CiAKKwl2bGFuX2dyb3VwX3NldF9kZXZpY2UoZ3JwLCB2bGFuX2lkLCBOVUxMKTsKKwkvKiBCZWNhdXNlIHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKCkgbWFrZXMgc3VyZSBhdCBsZWFzdCBvbmUgcmN1CisJICogZ3JhY2UgcGVyaW9kIGlzIHJlc3BlY3RlZCBiZWZvcmUgZGV2aWNlIGZyZWVpbmcsCisJICogd2UgZG9udCBuZWVkIHRvIGNhbGwgc3luY2hyb25pemVfbmV0KCkgaGVyZS4KKwkgKi8KIAl1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIGhlYWQpOwogCiAJLyogSWYgdGhlIGdyb3VwIGlzIG5vdyBlbXB0eSwga2lsbCBvZmYgdGhlIGdyb3VwLiAqLwpAQCAtMzI3LDEwICszMjYsNiBAQAogc3RhdGljIHZvaWQgdmxhbl90cmFuc2Zlcl9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuZGV2KQogewotCXUzMiBvbGRfZmVhdHVyZXMgPSB2bGFuZGV2LT5mZWF0dXJlczsKLQotCXZsYW5kZXYtPmZlYXR1cmVzICY9IH5kZXYtPnZsYW5fZmVhdHVyZXM7Ci0JdmxhbmRldi0+ZmVhdHVyZXMgfD0gZGV2LT5mZWF0dXJlcyAmIGRldi0+dmxhbl9mZWF0dXJlczsKIAl2bGFuZGV2LT5nc29fbWF4X3NpemUgPSBkZXYtPmdzb19tYXhfc2l6ZTsKIAogCWlmIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19WTEFOX1RYKQpAQCAtMzQxLDggKzMzNiw4IEBACiAjaWYgZGVmaW5lZChDT05GSUdfRkNPRSkgfHwgZGVmaW5lZChDT05GSUdfRkNPRV9NT0RVTEUpCiAJdmxhbmRldi0+ZmNvZV9kZHBfeGlkID0gZGV2LT5mY29lX2RkcF94aWQ7CiAjZW5kaWYKLQlpZiAob2xkX2ZlYXR1cmVzICE9IHZsYW5kZXYtPmZlYXR1cmVzKQotCQluZXRkZXZfZmVhdHVyZXNfY2hhbmdlKHZsYW5kZXYpOworCisJbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyh2bGFuZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgX192bGFuX2RldmljZV9ldmVudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KQpAQCAtNDg3LDkgKzQ4Miw2IEBACiAJCWlmIChkZXYtPnJlZ19zdGF0ZSAhPSBORVRSRUdfVU5SRUdJU1RFUklORykKIAkJCWJyZWFrOwogCi0JCS8qIERlbGV0ZSBhbGwgVkxBTnMgZm9yIHRoaXMgZGV2LiAqLwotCQlncnAtPmtpbGxhbGwgPSAxOwotCiAJCWZvciAoaSA9IDA7IGkgPCBWTEFOX05fVklEOyBpKyspIHsKIAkJCXZsYW5kZXYgPSB2bGFuX2dyb3VwX2dldF9kZXZpY2UoZ3JwLCBpKTsKIAkJCWlmICghdmxhbmRldikKQEAgLTUwOCw2ICs1MDAsMTggQEAKIAljYXNlIE5FVERFVl9QUkVfVFlQRV9DSEFOR0U6CiAJCS8qIEZvcmJpZCB1bmRlcmxheWluZyBkZXZpY2UgdG8gY2hhbmdlIGl0cyB0eXBlLiAqLwogCQlyZXR1cm4gTk9USUZZX0JBRDsKKworCWNhc2UgTkVUREVWX05PVElGWV9QRUVSUzoKKwljYXNlIE5FVERFVl9CT05ESU5HX0ZBSUxPVkVSOgorCQkvKiBQcm9wYWdhdGUgdG8gdmxhbiBkZXZpY2VzICovCisJCWZvciAoaSA9IDA7IGkgPCBWTEFOX05fVklEOyBpKyspIHsKKwkJCXZsYW5kZXYgPSB2bGFuX2dyb3VwX2dldF9kZXZpY2UoZ3JwLCBpKTsKKwkJCWlmICghdmxhbmRldikKKwkJCQljb250aW51ZTsKKworCQkJY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKGV2ZW50LCB2bGFuZGV2KTsKKwkJfQorCQlicmVhazsKIAl9CiAKIG91dDoKQEAgLTY4OCw3ICs2OTIsNiBAQAogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycjQ7CiAKLQlkZXZfYWRkX3BhY2soJnZsYW5fcGFja2V0X3R5cGUpOwogCXZsYW5faW9jdGxfc2V0KHZsYW5faW9jdGxfaGFuZGxlcik7CiAJcmV0dXJuIDA7CiAKQEAgLTcwOSw4ICs3MTIsNiBAQAogCiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJnZsYW5fbm90aWZpZXJfYmxvY2spOwogCi0JZGV2X3JlbW92ZV9wYWNrKCZ2bGFuX3BhY2tldF90eXBlKTsKLQogCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmdmxhbl9uZXRfb3BzKTsKIAlyY3VfYmFycmllcigpOyAvKiBXYWl0IGZvciBjb21wbGV0aW9uIG9mIGNhbGxfcmN1KCkncyAqLwogCmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5oIGIvbmV0LzgwMjFxL3ZsYW4uaAppbmRleCA1Njg3YzliLi5jMzQwOGRlIDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbi5oCisrKyBiL25ldC84MDIxcS92bGFuLmgKQEAgLTc1LDggKzc1LDYgQEAKIH0KIAogLyogZm91bmQgaW4gdmxhbl9kZXYuYyAqLwotaW50IHZsYW5fc2tiX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpOwogdm9pZCB2bGFuX2Rldl9zZXRfaW5ncmVzc19wcmlvcml0eShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgIHUzMiBza2JfcHJpbywgdTE2IHZsYW5fcHJpbyk7CiBpbnQgdmxhbl9kZXZfc2V0X2VncmVzc19wcmlvcml0eShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW5fY29yZS5jIGIvbmV0LzgwMjFxL3ZsYW5fY29yZS5jCmluZGV4IGNlOGUzYWIuLjQxNDk1ZGMyIDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbl9jb3JlLmMKKysrIGIvbmV0LzgwMjFxL3ZsYW5fY29yZS5jCkBAIC00LDcgKzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldHBvbGwuaD4KICNpbmNsdWRlICJ2bGFuLmgiCiAKLWJvb2wgdmxhbl9od2FjY2VsX2RvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipza2JwKQorYm9vbCB2bGFuX2RvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipza2JwKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSAqc2ticDsKIAl1MTYgdmxhbl9pZCA9IHNrYi0+dmxhbl90Y2kgJiBWTEFOX1ZJRF9NQVNLOwpAQCAtODgsMyArODgsODYgQEAKIAlyZXR1cm4gbmFwaV9ncm9fZnJhZ3MobmFwaSk7CiB9CiBFWFBPUlRfU1lNQk9MKHZsYW5fZ3JvX2ZyYWdzKTsKKworc3RhdGljIHN0cnVjdCBza19idWZmICp2bGFuX2NoZWNrX3Jlb3JkZXJfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpCit7CisJaWYgKHZsYW5fZGV2X2luZm8oc2tiLT5kZXYpLT5mbGFncyAmIFZMQU5fRkxBR19SRU9SREVSX0hEUikgeworCQlpZiAoc2tiX2Nvdyhza2IsIHNrYl9oZWFkcm9vbShza2IpKSA8IDApCisJCQlza2IgPSBOVUxMOworCQlpZiAoc2tiKSB7CisJCQkvKiBMaWZ0ZWQgZnJvbSBHbGViJ3MgVkxBTiBjb2RlLi4uICovCisJCQltZW1tb3ZlKHNrYi0+ZGF0YSAtIEVUSF9ITEVOLAorCQkJCXNrYi0+ZGF0YSAtIFZMQU5fRVRIX0hMRU4sIDEyKTsKKwkJCXNrYi0+bWFjX2hlYWRlciArPSBWTEFOX0hMRU47CisJCX0KKwl9CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIHZvaWQgdmxhbl9zZXRfZW5jYXBfcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHZsYW5faGRyICp2aGRyKQoreworCV9fYmUxNiBwcm90bzsKKwl1bnNpZ25lZCBjaGFyICpyYXdwOworCisJLyoKKwkgKiBXYXMgYSBWTEFOIHBhY2tldCwgZ3JhYiB0aGUgZW5jYXBzdWxhdGVkIHByb3RvY29sLCB3aGljaCB0aGUgbGF5ZXIKKwkgKiB0aHJlZSBwcm90b2NvbHMgY2FyZSBhYm91dC4KKwkgKi8KKworCXByb3RvID0gdmhkci0+aF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90bzsKKwlpZiAobnRvaHMocHJvdG8pID49IDE1MzYpIHsKKwkJc2tiLT5wcm90b2NvbCA9IHByb3RvOworCQlyZXR1cm47CisJfQorCisJcmF3cCA9IHNrYi0+ZGF0YTsKKwlpZiAoKih1bnNpZ25lZCBzaG9ydCAqKSByYXdwID09IDB4RkZGRikKKwkJLyoKKwkJICogVGhpcyBpcyBhIG1hZ2ljIGhhY2sgdG8gc3BvdCBJUFggcGFja2V0cy4gT2xkZXIgTm92ZWxsCisJCSAqIGJyZWFrcyB0aGUgcHJvdG9jb2wgZGVzaWduIGFuZCBydW5zIElQWCBvdmVyIDgwMi4zIHdpdGhvdXQKKwkJICogYW4gODAyLjIgTExDIGxheWVyLiBXZSBsb29rIGZvciBGRkZGIHdoaWNoIGlzbid0IGEgdXNlZAorCQkgKiA4MDIuMiBTU0FQL0RTQVAuIFRoaXMgd29uJ3Qgd29yayBmb3IgZmF1bHQgdG9sZXJhbnQgbmV0d2FyZQorCQkgKiBidXQgZG9lcyBmb3IgdGhlIHJlc3QuCisJCSAqLworCQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyXzMpOworCWVsc2UKKwkJLyoKKwkJICogUmVhbCA4MDIuMiBMTEMKKwkJICovCisJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF84MDJfMik7Cit9CisKK3N0cnVjdCBza19idWZmICp2bGFuX3VudGFnKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHZsYW5faGRyICp2aGRyOworCXUxNiB2bGFuX3RjaTsKKworCWlmICh1bmxpa2VseSh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpKSB7CisJCS8qIHZsYW5fdGNpIGlzIGFscmVhZHkgc2V0LXVwIHNvIGxlYXZlIHRoaXMgZm9yIGFub3RoZXIgdGltZSAqLworCQlyZXR1cm4gc2tiOworCX0KKworCXNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpOworCWlmICh1bmxpa2VseSghc2tiKSkKKwkJZ290byBlcnJfZnJlZTsKKworCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIFZMQU5fSExFTikpKQorCQlnb3RvIGVycl9mcmVlOworCisJdmhkciA9IChzdHJ1Y3Qgdmxhbl9oZHIgKikgc2tiLT5kYXRhOworCXZsYW5fdGNpID0gbnRvaHModmhkci0+aF92bGFuX1RDSSk7CisJX192bGFuX2h3YWNjZWxfcHV0X3RhZyhza2IsIHZsYW5fdGNpKTsKKworCXNrYl9wdWxsX3Jjc3VtKHNrYiwgVkxBTl9ITEVOKTsKKwl2bGFuX3NldF9lbmNhcF9wcm90byhza2IsIHZoZHIpOworCisJc2tiID0gdmxhbl9jaGVja19yZW9yZGVyX2hlYWRlcihza2IpOworCWlmICh1bmxpa2VseSghc2tiKSkKKwkJZ290byBlcnJfZnJlZTsKKworCXJldHVybiBza2I7CisKK2Vycl9mcmVlOgorCWtmcmVlX3NrYihza2IpOworCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW5fZGV2LmMgYi9uZXQvODAyMXEvdmxhbl9kZXYuYwppbmRleCBlMzRlYTllLi5mMjQ3ZjViIDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbl9kZXYuYworKysgYi9uZXQvODAyMXEvdmxhbl9kZXYuYwpAQCAtNjUsMTc5ICs2NSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnZsYW5fY2hlY2tfcmVvcmRlcl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlpZiAodmxhbl9kZXZfaW5mbyhza2ItPmRldiktPmZsYWdzICYgVkxBTl9GTEFHX1JFT1JERVJfSERSKSB7Ci0JCWlmIChza2JfY293KHNrYiwgc2tiX2hlYWRyb29tKHNrYikpIDwgMCkKLQkJCXNrYiA9IE5VTEw7Ci0JCWlmIChza2IpIHsKLQkJCS8qIExpZnRlZCBmcm9tIEdsZWIncyBWTEFOIGNvZGUuLi4gKi8KLQkJCW1lbW1vdmUoc2tiLT5kYXRhIC0gRVRIX0hMRU4sCi0JCQkJc2tiLT5kYXRhIC0gVkxBTl9FVEhfSExFTiwgMTIpOwotCQkJc2tiLT5tYWNfaGVhZGVyICs9IFZMQU5fSExFTjsKLQkJfQotCX0KLQotCXJldHVybiBza2I7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB2bGFuX3NldF9lbmNhcF9wcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQlzdHJ1Y3Qgdmxhbl9oZHIgKnZoZHIpCi17Ci0JX19iZTE2IHByb3RvOwotCXVuc2lnbmVkIGNoYXIgKnJhd3A7Ci0KLQkvKgotCSAqIFdhcyBhIFZMQU4gcGFja2V0LCBncmFiIHRoZSBlbmNhcHN1bGF0ZWQgcHJvdG9jb2wsIHdoaWNoIHRoZSBsYXllcgotCSAqIHRocmVlIHByb3RvY29scyBjYXJlIGFib3V0LgotCSAqLwotCi0JcHJvdG8gPSB2aGRyLT5oX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvOwotCWlmIChudG9ocyhwcm90bykgPj0gMTUzNikgewotCQlza2ItPnByb3RvY29sID0gcHJvdG87Ci0JCXJldHVybjsKLQl9Ci0KLQlyYXdwID0gc2tiLT5kYXRhOwotCWlmICgqKHVuc2lnbmVkIHNob3J0ICopcmF3cCA9PSAweEZGRkYpCi0JCS8qCi0JCSAqIFRoaXMgaXMgYSBtYWdpYyBoYWNrIHRvIHNwb3QgSVBYIHBhY2tldHMuIE9sZGVyIE5vdmVsbAotCQkgKiBicmVha3MgdGhlIHByb3RvY29sIGRlc2lnbiBhbmQgcnVucyBJUFggb3ZlciA4MDIuMyB3aXRob3V0Ci0JCSAqIGFuIDgwMi4yIExMQyBsYXllci4gV2UgbG9vayBmb3IgRkZGRiB3aGljaCBpc24ndCBhIHVzZWQKLQkJICogODAyLjIgU1NBUC9EU0FQLiBUaGlzIHdvbid0IHdvcmsgZm9yIGZhdWx0IHRvbGVyYW50IG5ldHdhcmUKLQkJICogYnV0IGRvZXMgZm9yIHRoZSByZXN0LgotCQkgKi8KLQkJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QXzgwMl8zKTsKLQllbHNlCi0JCS8qCi0JCSAqIFJlYWwgODAyLjIgTExDCi0JCSAqLwotCQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyXzIpOwotfQotCi0vKgotICoJRGV0ZXJtaW5lIHRoZSBwYWNrZXQncyBwcm90b2NvbCBJRC4gVGhlIHJ1bGUgaGVyZSBpcyB0aGF0IHdlCi0gKglhc3N1bWUgODAyLjMgaWYgdGhlIHR5cGUgZmllbGQgaXMgc2hvcnQgZW5vdWdoIHRvIGJlIGEgbGVuZ3RoLgotICoJVGhpcyBpcyBub3JtYWwgcHJhY3RpY2UgYW5kIHdvcmtzIGZvciBhbnkgJ25vdyBpbiB1c2UnIHByb3RvY29sLgotICoKLSAqICBBbHNvLCBhdCB0aGlzIHBvaW50IHdlIGFzc3VtZSB0aGF0IHdlIEFSRSBkZWFsaW5nIGV4Y2x1c2l2ZWx5IHdpdGgKLSAqICBWTEFOIHBhY2tldHMsIG9yIHBhY2tldHMgdGhhdCBzaG91bGQgYmUgbWFkZSBpbnRvIFZMQU4gcGFja2V0cyBiYXNlZAotICogIG9uIGEgZGVmYXVsdCBWTEFOIElELgotICoKLSAqICBOT1RFOiAgU2hvdWxkIGJlIHNpbWlsYXIgdG8gZXRoZXJuZXQvZXRoLmMuCi0gKgotICogIFNBTklUWSBOT1RFOiAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYSBwYWNrZXQgaXMgbW92aW5nIHVwIHRoZSBzdGFjawotICogICAgICAgICAgICAgICAgdG93YXJkcyB1c2VybGFuZC4gIFRvIGdldCBoZXJlLCBpdCB3b3VsZCBoYXZlIGFscmVhZHkgcGFzc2VkCi0gKiAgICAgICAgICAgICAgICB0aHJvdWdoIHRoZSBldGhlcm5ldC9ldGguYyBldGhfdHlwZV90cmFucygpIG1ldGhvZC4KLSAqICBTQU5JVFkgTk9URSAyOiBXZSBhcmUgcmVmZXJlbmNpbmcgdG8gdGhlIFZMQU5fSERSIGZyaWVsZHMsIHdoaWNoIE1BWSBiZQotICogICAgICAgICAgICAgICAgIHN0b3JlZCBVTkFMSUdORUQgaW4gdGhlIG1lbW9yeS4gIFJJU0Mgc3lzdGVtcyBkb24ndCBsaWtlCi0gKiAgICAgICAgICAgICAgICAgc3VjaCBjYXNlcyB2ZXJ5IG11Y2guLi4KLSAqICBTQU5JVFkgTk9URSAyYTogQWNjb3JkaW5nIHRvIERhdmUgTWlsbGVyICYgQWxleGV5LCBpdCB3aWxsIGFsd2F5cyBiZQotICogIAkJICAgIGFsaWduZWQsIHNvIHRoZXJlIGRvZXNuJ3QgbmVlZCB0byBiZSBhbnkgb2YgdGhlIHVuYWxpZ25lZAotICogIAkJICAgIHN0dWZmLiAgSXQgaGFzIGJlZW4gY29tbWVudGVkIG91dCBub3cuLi4gIC0tQmVuCi0gKgotICovCi1pbnQgdmxhbl9za2JfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKLXsKLQlzdHJ1Y3Qgdmxhbl9oZHIgKnZoZHI7Ci0Jc3RydWN0IHZsYW5fcGNwdV9zdGF0cyAqcnhfc3RhdHM7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKnZsYW5fZGV2OwotCXUxNiB2bGFuX2lkOwotCXUxNiB2bGFuX3RjaTsKLQotCXNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpOwotCWlmIChza2IgPT0gTlVMTCkKLQkJZ290byBlcnJfZnJlZTsKLQotCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIFZMQU5fSExFTikpKQotCQlnb3RvIGVycl9mcmVlOwotCi0JdmhkciA9IChzdHJ1Y3Qgdmxhbl9oZHIgKilza2ItPmRhdGE7Ci0Jdmxhbl90Y2kgPSBudG9ocyh2aGRyLT5oX3ZsYW5fVENJKTsKLQl2bGFuX2lkID0gdmxhbl90Y2kgJiBWTEFOX1ZJRF9NQVNLOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCXZsYW5fZGV2ID0gdmxhbl9maW5kX2RldihkZXYsIHZsYW5faWQpOwotCi0JLyogSWYgdGhlIFZMQU4gZGV2aWNlIGlzIGRlZmluZWQsIHdlIHVzZSBpdC4KLQkgKiBJZiBub3QsIGFuZCB0aGUgVklEIGlzIDAsIGl0IGlzIGEgODAyLjFwIHBhY2tldCAobm90Ci0JICogcmVhbGx5IGEgVkxBTiksIHNvIHdlIHdpbGwganVzdCBuZXRpZl9yeCBpdCBsYXRlciB0byB0aGUKLQkgKiBvcmlnaW5hbCBpbnRlcmZhY2UsIGJ1dCB3aXRoIHRoZSBza2ItPnByb3RvIHNldCB0byB0aGUKLQkgKiB3cmFwcGVkIHByb3RvOiB3ZSBkbyBub3RoaW5nIGhlcmUuCi0JICovCi0KLQlpZiAoIXZsYW5fZGV2KSB7Ci0JCWlmICh2bGFuX2lkKSB7Ci0JCQlwcl9kZWJ1ZygiJXM6IEVSUk9SOiBObyBuZXRfZGV2aWNlIGZvciBWSUQ6ICV1IG9uIGRldjogJXNcbiIsCi0JCQkJIF9fZnVuY19fLCB2bGFuX2lkLCBkZXYtPm5hbWUpOwotCQkJZ290byBlcnJfdW5sb2NrOwotCQl9Ci0JCXJ4X3N0YXRzID0gTlVMTDsKLQl9IGVsc2UgewotCQlza2ItPmRldiA9IHZsYW5fZGV2OwotCi0JCXJ4X3N0YXRzID0gdGhpc19jcHVfcHRyKHZsYW5fZGV2X2luZm8oc2tiLT5kZXYpLT52bGFuX3BjcHVfc3RhdHMpOwotCi0JCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJnJ4X3N0YXRzLT5zeW5jcCk7Ci0JCXJ4X3N0YXRzLT5yeF9wYWNrZXRzKys7Ci0JCXJ4X3N0YXRzLT5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQotCQlza2ItPnByaW9yaXR5ID0gdmxhbl9nZXRfaW5ncmVzc19wcmlvcml0eShza2ItPmRldiwgdmxhbl90Y2kpOwotCi0JCXByX2RlYnVnKCIlczogcHJpb3JpdHk6ICV1IGZvciBUQ0k6ICVodVxuIiwKLQkJCSBfX2Z1bmNfXywgc2tiLT5wcmlvcml0eSwgdmxhbl90Y2kpOwotCi0JCXN3aXRjaCAoc2tiLT5wa3RfdHlwZSkgewotCQljYXNlIFBBQ0tFVF9CUk9BRENBU1Q6Ci0JCQkvKiBZZWFoLCBzdGF0cyBjb2xsZWN0IHRoZXNlIHRvZ2V0aGVyLi4gKi8KLQkJCS8qIHN0YXRzLT5icm9hZGNhc3QgKys7IC8vIG5vIHN1Y2ggY291bnRlciA6LSggKi8KLQkJCWJyZWFrOwotCi0JCWNhc2UgUEFDS0VUX01VTFRJQ0FTVDoKLQkJCXJ4X3N0YXRzLT5yeF9tdWx0aWNhc3QrKzsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUEFDS0VUX09USEVSSE9TVDoKLQkJCS8qIE91ciBsb3dlciBsYXllciB0aGlua3MgdGhpcyBpcyBub3QgbG9jYWwsIGxldCdzIG1ha2UKLQkJCSAqIHN1cmUuCi0JCQkgKiBUaGlzIGFsbG93cyB0aGUgVkxBTiB0byBoYXZlIGEgZGlmZmVyZW50IE1BQyB0aGFuIHRoZQotCQkJICogdW5kZXJseWluZyBkZXZpY2UsIGFuZCBzdGlsbCByb3V0ZSBjb3JyZWN0bHkuCi0JCQkgKi8KLQkJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKGV0aF9oZHIoc2tiKS0+aF9kZXN0LAotCQkJCQkJc2tiLT5kZXYtPmRldl9hZGRyKSkKLQkJCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JCXU2NF9zdGF0c191cGRhdGVfZW5kKCZyeF9zdGF0cy0+c3luY3ApOwotCX0KLQotCXNrYl9wdWxsX3Jjc3VtKHNrYiwgVkxBTl9ITEVOKTsKLQl2bGFuX3NldF9lbmNhcF9wcm90byhza2IsIHZoZHIpOwotCi0JaWYgKHZsYW5fZGV2KSB7Ci0JCXNrYiA9IHZsYW5fY2hlY2tfcmVvcmRlcl9oZWFkZXIoc2tiKTsKLQkJaWYgKCFza2IpIHsKLQkJCXJ4X3N0YXRzLT5yeF9lcnJvcnMrKzsKLQkJCWdvdG8gZXJyX3VubG9jazsKLQkJfQotCX0KLQotCW5ldGlmX3J4KHNrYik7Ci0KLQlyY3VfcmVhZF91bmxvY2soKTsKLQlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7Ci0KLWVycl91bmxvY2s6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci1lcnJfZnJlZToKLQlhdG9taWNfbG9uZ19pbmMoJmRldi0+cnhfZHJvcHBlZCk7Ci0Ja2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIE5FVF9SWF9EUk9QOwotfQotCiBzdGF0aWMgaW5saW5lIHUxNgogdmxhbl9kZXZfZ2V0X2VncmVzc19xb3NfbWFzayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtNDg3LDkgKzMxNCw2IEBACiAJc3RydWN0IHZsYW5fZGV2X2luZm8gKnZsYW4gPSB2bGFuX2Rldl9pbmZvKGRldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2ID0gdmxhbi0+cmVhbF9kZXY7CiAKLQlpZiAodmxhbi0+ZmxhZ3MgJiBWTEFOX0ZMQUdfR1ZSUCkKLQkJdmxhbl9ndnJwX3JlcXVlc3RfbGVhdmUoZGV2KTsKLQogCWRldl9tY191bnN5bmMocmVhbF9kZXYsIGRldik7CiAJZGV2X3VjX3Vuc3luYyhyZWFsX2RldiwgZGV2KTsKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkKQEAgLTcwNCw4ICs1MjgsOCBAQAogCQkJCQkgICgxPDxfX0xJTktfU1RBVEVfRE9STUFOVCkpKSB8CiAJCSAgICAgICgxPDxfX0xJTktfU1RBVEVfUFJFU0VOVCk7CiAKLQlkZXYtPmZlYXR1cmVzIHw9IHJlYWxfZGV2LT5mZWF0dXJlcyAmIHJlYWxfZGV2LT52bGFuX2ZlYXR1cmVzOwotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MTFRYOworCWRldi0+aHdfZmVhdHVyZXMgPSBORVRJRl9GX0FMTF9UWF9PRkZMT0FEUzsKKwlkZXYtPmZlYXR1cmVzIHw9IHJlYWxfZGV2LT52bGFuX2ZlYXR1cmVzIHwgTkVUSUZfRl9MTFRYOwogCWRldi0+Z3NvX21heF9zaXplID0gcmVhbF9kZXYtPmdzb19tYXhfc2l6ZTsKIAogCS8qIGlwdjYgc2hhcmVkIGNhcmQgcmVsYXRlZCBzdHVmZiAqLwpAQCAtNzU5LDYgKzU4MywxOSBAQAogCX0KIH0KIAorc3RhdGljIHUzMiB2bGFuX2Rldl9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZlYXR1cmVzKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHZsYW5fZGV2X2luZm8oZGV2KS0+cmVhbF9kZXY7CisKKwlmZWF0dXJlcyAmPSByZWFsX2Rldi0+ZmVhdHVyZXM7CisJZmVhdHVyZXMgJj0gcmVhbF9kZXYtPnZsYW5fZmVhdHVyZXM7CisJaWYgKGRldl9ldGh0b29sX2dldF9yeF9jc3VtKHJlYWxfZGV2KSkKKwkJZmVhdHVyZXMgfD0gTkVUSUZfRl9SWENTVU07CisJZmVhdHVyZXMgfD0gTkVUSUZfRl9MTFRYOworCisJcmV0dXJuIGZlYXR1cmVzOworfQorCiBzdGF0aWMgaW50IHZsYW5fZXRodG9vbF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewpAQCAtNzc0LDE4ICs2MTEsNiBAQAogCXN0cmNweShpbmZvLT5md192ZXJzaW9uLCAiTi9BIik7CiB9CiAKLXN0YXRpYyB1MzIgdmxhbl9ldGh0b29sX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JY29uc3Qgc3RydWN0IHZsYW5fZGV2X2luZm8gKnZsYW4gPSB2bGFuX2Rldl9pbmZvKGRldik7Ci0JcmV0dXJuIGRldl9ldGh0b29sX2dldF9yeF9jc3VtKHZsYW4tPnJlYWxfZGV2KTsKLX0KLQotc3RhdGljIHUzMiB2bGFuX2V0aHRvb2xfZ2V0X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JY29uc3Qgc3RydWN0IHZsYW5fZGV2X2luZm8gKnZsYW4gPSB2bGFuX2Rldl9pbmZvKGRldik7Ci0JcmV0dXJuIGRldl9ldGh0b29sX2dldF9mbGFncyh2bGFuLT5yZWFsX2Rldik7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnZsYW5fZGV2X2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpCiB7CiAKQEAgLTgyMywzMiArNjQ4LDEwIEBACiAJcmV0dXJuIHN0YXRzOwogfQogCi1zdGF0aWMgaW50IHZsYW5fZXRodG9vbF9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQotewotICAgICAgIGlmIChkYXRhKSB7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHZsYW5fZGV2X2luZm8oZGV2KS0+cmVhbF9kZXY7Ci0KLQkJLyogVW5kZXJseWluZyBkZXZpY2UgbXVzdCBzdXBwb3J0IFRTTyBmb3IgVkxBTi10YWdnZWQgcGFja2V0cwotCQkgKiBhbmQgbXVzdCBoYXZlIFRTTyBlbmFibGVkIG5vdy4KLQkJICovCi0JCWlmICghKHJlYWxfZGV2LT52bGFuX2ZlYXR1cmVzICYgTkVUSUZfRl9UU08pKQotCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCQlpZiAoIShyZWFsX2Rldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1RTTykpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKLQl9IGVsc2UgewotCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdmxhbl9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzCSAgICAgICAgPSB2bGFuX2V0aHRvb2xfZ2V0X3NldHRpbmdzLAogCS5nZXRfZHJ2aW5mbwkgICAgICAgID0gdmxhbl9ldGh0b29sX2dldF9kcnZpbmZvLAogCS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLAotCS5nZXRfcnhfY3N1bQkJPSB2bGFuX2V0aHRvb2xfZ2V0X3J4X2NzdW0sCi0JLmdldF9mbGFncwkJPSB2bGFuX2V0aHRvb2xfZ2V0X2ZsYWdzLAotCS5zZXRfdHNvICAgICAgICAgICAgICAgID0gdmxhbl9ldGh0b29sX3NldF90c28sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZsYW5fbmV0ZGV2X29wcyA9IHsKQEAgLTg3NCw2ICs2NzcsNyBAQAogCS5uZG9fZmNvZV9nZXRfd3duCT0gdmxhbl9kZXZfZmNvZV9nZXRfd3duLAogCS5uZG9fZmNvZV9kZHBfdGFyZ2V0CT0gdmxhbl9kZXZfZmNvZV9kZHBfdGFyZ2V0LAogI2VuZGlmCisJLm5kb19maXhfZmVhdHVyZXMJPSB2bGFuX2Rldl9maXhfZmVhdHVyZXMsCiB9OwogCiB2b2lkIHZsYW5fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL25ldC85cC9jbGllbnQuYyBiL25ldC85cC9jbGllbnQuYwppbmRleCA3NzM2Nzc0Li5jZWFiOTQzIDEwMDY0NAotLS0gYS9uZXQvOXAvY2xpZW50LmMKKysrIGIvbmV0LzlwL2NsaWVudC5jCkBAIC02MTQsNyArNjE0LDcgQEAKIAogCWVyciA9IGMtPnRyYW5zX21vZC0+cmVxdWVzdChjLCByZXEpOwogCWlmIChlcnIgPCAwKSB7Ci0JCWlmIChlcnIgIT0gLUVSRVNUQVJUU1lTKQorCQlpZiAoZXJyICE9IC1FUkVTVEFSVFNZUyAmJiBlcnIgIT0gLUVGQVVMVCkKIAkJCWMtPnN0YXR1cyA9IERpc2Nvbm5lY3RlZDsKIAkJZ290byByZXRlcnI7CiAJfQpAQCAtMTI4MSw3ICsxMjgxLDcgQEAKIHA5X2NsaWVudF9yZWFkKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciAqZGF0YSwgY2hhciBfX3VzZXIgKnVkYXRhLCB1NjQgb2Zmc2V0LAogCQkJCQkJCQl1MzIgY291bnQpCiB7Ci0JaW50IGVyciwgcnNpemUsIHRvdGFsOworCWludCBlcnIsIHJzaXplOwogCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7CiAJc3RydWN0IHA5X3JlcV90ICpyZXE7CiAJY2hhciAqZGF0YXB0cjsKQEAgLTEyOTAsNyArMTI5MCw2IEBACiAJCQkJCShsb25nIGxvbmcgdW5zaWduZWQpIG9mZnNldCwgY291bnQpOwogCWVyciA9IDA7CiAJY2xudCA9IGZpZC0+Y2xudDsKLQl0b3RhbCA9IDA7CiAKIAlyc2l6ZSA9IGZpZC0+aW91bml0OwogCWlmICghcnNpemUgfHwgcnNpemUgPiBjbG50LT5tc2l6ZS1QOV9JT0hEUlNaKQpAQCAtMTM0Niw3ICsxMzQ1LDcgQEAKIHA5X2NsaWVudF93cml0ZShzdHJ1Y3QgcDlfZmlkICpmaWQsIGNoYXIgKmRhdGEsIGNvbnN0IGNoYXIgX191c2VyICp1ZGF0YSwKIAkJCQkJCQl1NjQgb2Zmc2V0LCB1MzIgY291bnQpCiB7Ci0JaW50IGVyciwgcnNpemUsIHRvdGFsOworCWludCBlcnIsIHJzaXplOwogCXN0cnVjdCBwOV9jbGllbnQgKmNsbnQ7CiAJc3RydWN0IHA5X3JlcV90ICpyZXE7CiAKQEAgLTEzNTQsNyArMTM1Myw2IEBACiAJCQkJZmlkLT5maWQsIChsb25nIGxvbmcgdW5zaWduZWQpIG9mZnNldCwgY291bnQpOwogCWVyciA9IDA7CiAJY2xudCA9IGZpZC0+Y2xudDsKLQl0b3RhbCA9IDA7CiAKIAlyc2l6ZSA9IGZpZC0+aW91bml0OwogCWlmICghcnNpemUgfHwgcnNpemUgPiBjbG50LT5tc2l6ZS1QOV9JT0hEUlNaKQpAQCAtMTc0NSw3ICsxNzQzLDcgQEAKIAogaW50IHA5X2NsaWVudF9yZWFkZGlyKHN0cnVjdCBwOV9maWQgKmZpZCwgY2hhciAqZGF0YSwgdTMyIGNvdW50LCB1NjQgb2Zmc2V0KQogewotCWludCBlcnIsIHJzaXplLCB0b3RhbDsKKwlpbnQgZXJyLCByc2l6ZTsKIAlzdHJ1Y3QgcDlfY2xpZW50ICpjbG50OwogCXN0cnVjdCBwOV9yZXFfdCAqcmVxOwogCWNoYXIgKmRhdGFwdHI7CkBAIC0xNzU1LDcgKzE3NTMsNiBAQAogCiAJZXJyID0gMDsKIAljbG50ID0gZmlkLT5jbG50OwotCXRvdGFsID0gMDsKIAogCXJzaXplID0gZmlkLT5pb3VuaXQ7CiAJaWYgKCFyc2l6ZSB8fCByc2l6ZSA+IGNsbnQtPm1zaXplLVA5X1JFQURESVJIRFJTWikKZGlmZiAtLWdpdCBhL25ldC85cC9wcm90b2NvbC5jIGIvbmV0LzlwL3Byb3RvY29sLmMKaW5kZXggYjU4YTUwMS4uYTg3MzI3NyAxMDA2NDQKLS0tIGEvbmV0LzlwL3Byb3RvY29sLmMKKysrIGIvbmV0LzlwL3Byb3RvY29sLmMKQEAgLTY3NCw2ICs2NzQsNyBAQAogCX0KIAogCXN0cmNweShkaXJlbnQtPmRfbmFtZSwgbmFtZXB0cik7CisJa2ZyZWUobmFtZXB0cik7CiAKIG91dDoKIAlyZXR1cm4gZmFrZV9wZHUub2Zmc2V0OwpkaWZmIC0tZ2l0IGEvbmV0LzlwL3RyYW5zX2NvbW1vbi5jIGIvbmV0LzlwL3RyYW5zX2NvbW1vbi5jCmluZGV4IGU4ODMxNzIuLjlhNzBlYmQgMTAwNjQ0Ci0tLSBhL25ldC85cC90cmFuc19jb21tb24uYworKysgYi9uZXQvOXAvdHJhbnNfY29tbW9uLmMKQEAgLTYzLDcgKzYzLDcgQEAKIAkJaW50IG5yX3BhZ2VzLCB1OCBydykKIHsKIAl1aW50MzJfdCBmaXJzdF9wYWdlX2J5dGVzID0gMDsKLQl1aW50MzJfdCBwZGF0YV9tYXBwZWRfcGFnZXM7CisJaW50MzJfdCBwZGF0YV9tYXBwZWRfcGFnZXM7CiAJc3RydWN0IHRyYW5zX3JwYWdlX2luZm8gICpycGluZm87CiAKIAkqcGRhdGFfb2ZmID0gKF9fZm9yY2Ugc2l6ZV90KXJlcS0+dGMtPnB1YnVmICYgKFBBR0VfU0laRS0xKTsKQEAgLTc1LDE0ICs3NSw5IEBACiAJcnBpbmZvID0gcmVxLT50Yy0+cHJpdmF0ZTsKIAlwZGF0YV9tYXBwZWRfcGFnZXMgPSBnZXRfdXNlcl9wYWdlc19mYXN0KCh1bnNpZ25lZCBsb25nKXJlcS0+dGMtPnB1YnVmLAogCQkJbnJfcGFnZXMsIHJ3LCAmcnBpbmZvLT5ycF9kYXRhWzBdKTsKKwlpZiAocGRhdGFfbWFwcGVkX3BhZ2VzIDw9IDApCisJCXJldHVybiBwZGF0YV9tYXBwZWRfcGFnZXM7CiAKLQlpZiAocGRhdGFfbWFwcGVkX3BhZ2VzIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImdldF91c2VyX3BhZ2VzX2Zhc3QgZmFpbGVkOiVkIHVkYXRhOiVwIgotCQkJCSJucl9wYWdlczolZFxuIiwgcGRhdGFfbWFwcGVkX3BhZ2VzLAotCQkJCXJlcS0+dGMtPnB1YnVmLCBucl9wYWdlcyk7Ci0JCXBkYXRhX21hcHBlZF9wYWdlcyA9IDA7Ci0JCXJldHVybiAtRUlPOwotCX0KIAlycGluZm8tPnJwX25yX3BhZ2VzID0gcGRhdGFfbWFwcGVkX3BhZ2VzOwogCWlmICgqcGRhdGFfb2ZmKSB7CiAJCSpwZGF0YV9sZW4gPSBmaXJzdF9wYWdlX2J5dGVzOwpkaWZmIC0tZ2l0IGEvbmV0LzlwL3RyYW5zX2ZkLmMgYi9uZXQvOXAvdHJhbnNfZmQuYwppbmRleCBhYTU2NzJiLi40YTkwODQzIDEwMDY0NAotLS0gYS9uZXQvOXAvdHJhbnNfZmQuYworKysgYi9uZXQvOXAvdHJhbnNfZmQuYwpAQCAtNzE2LDcgKzcxNiw2IEBACiAJc3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdOwogCWludCBvcHRpb247CiAJY2hhciAqb3B0aW9ucywgKnRtcF9vcHRpb25zOwotCWludCByZXQ7CiAKIAlvcHRzLT5wb3J0ID0gUDlfUE9SVDsKIAlvcHRzLT5yZmQgPSB+MDsKQEAgLTc0NCw3ICs3NDMsNiBAQAogCQkJaWYgKHIgPCAwKSB7CiAJCQkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwKIAkJCQkiaW50ZWdlciBmaWVsZCwgYnV0IG5vIGludGVnZXI/XG4iKTsKLQkJCQlyZXQgPSByOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9uZXQvOXAvdHJhbnNfcmRtYS5jIGIvbmV0LzlwL3RyYW5zX3JkbWEuYwppbmRleCAxNTBlMGM0Li44NDRhN2E1IDEwMDY0NAotLS0gYS9uZXQvOXAvdHJhbnNfcmRtYS5jCisrKyBiL25ldC85cC90cmFuc19yZG1hLmMKQEAgLTE2Nyw3ICsxNjcsNiBAQAogCXN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTsKIAlpbnQgb3B0aW9uOwogCWNoYXIgKm9wdGlvbnMsICp0bXBfb3B0aW9uczsKLQlpbnQgcmV0OwogCiAJb3B0cy0+cG9ydCA9IFA5X1BPUlQ7CiAJb3B0cy0+c3FfZGVwdGggPSBQOV9SRE1BX1NRX0RFUFRIOwpAQCAtMTk1LDcgKzE5NCw2IEBACiAJCWlmIChyIDwgMCkgewogCQkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwKIAkJCQkgICAiaW50ZWdlciBmaWVsZCwgYnV0IG5vIGludGVnZXI/XG4iKTsKLQkJCXJldCA9IHI7CiAJCQljb250aW51ZTsKIAkJfQogCQlzd2l0Y2ggKHRva2VuKSB7CmRpZmYgLS1naXQgYS9uZXQvS2NvbmZpZyBiL25ldC9LY29uZmlnCmluZGV4IDc5Y2FiZjEuLjg3ODE1MWMgMTAwNjQ0Ci0tLSBhL25ldC9LY29uZmlnCisrKyBiL25ldC9LY29uZmlnCkBAIC0yMzIsNiArMjMyLDIwIEBACiAJZGVwZW5kcyBvbiBTTVAgJiYgU1lTRlMgJiYgVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMKIAlkZWZhdWx0IHkKIAorY29uZmlnIEhBVkVfQlBGX0pJVAorCWJvb2wKKworY29uZmlnIEJQRl9KSVQKKwlib29sICJlbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlciIKKwlkZXBlbmRzIG9uIEhBVkVfQlBGX0pJVAorCWRlcGVuZHMgb24gTU9EVUxFUworCS0tLWhlbHAtLS0KKwkgIEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIgZmlsdGVyaW5nIGNhcGFiaWxpdGllcyBhcmUgbm9ybWFsbHkgaGFuZGxlZAorCSAgYnkgYW4gaW50ZXJwcmV0ZXIuIFRoaXMgb3B0aW9uIGFsbG93cyBrZXJuZWwgdG8gZ2VuZXJhdGUgYSBuYXRpdmUKKwkgIGNvZGUgd2hlbiBmaWx0ZXIgaXMgbG9hZGVkIGluIG1lbW9yeS4gVGhpcyBzaG91bGQgc3BlZWR1cAorCSAgcGFja2V0IHNuaWZmaW5nIChsaWJwY2FwL3RjcGR1bXApLiBOb3RlIDogQWRtaW4gc2hvdWxkIGVuYWJsZQorCSAgdGhpcyBmZWF0dXJlIGNoYW5naW5nIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZQorCiBtZW51ICJOZXR3b3JrIHRlc3RpbmciCiAKIGNvbmZpZyBORVRfUEtUR0VOCmRpZmYgLS1naXQgYS9uZXQvYXRtL2xlYy5jIGIvbmV0L2F0bS9sZWMuYwppbmRleCAzODc1NGZkLi4yNTA3M2I2IDEwMDY0NAotLS0gYS9uZXQvYXRtL2xlYy5jCisrKyBiL25ldC9hdG0vbGVjLmMKQEAgLTEyOSw3ICsxMjksNiBAQAogI2lmIGRlZmluZWQoQ09ORklHX0JSSURHRSkgfHwgZGVmaW5lZChDT05GSUdfQlJJREdFX01PRFVMRSkKIHN0YXRpYyB2b2lkIGxlY19oYW5kbGVfYnJpZGdlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGV0aGhkciAqZXRoOwogCWNoYXIgKmJ1ZmY7CiAJc3RydWN0IGxlY19wcml2ICpwcml2OwogCkBAIC0xMzgsNyArMTM3LDYgQEAKIAkgKiBMRV9UT1BPTE9HWV9SRVFVRVNUIHdpdGggdGhlIHNhbWUgdmFsdWUgb2YgVG9wb2xvZ3kgQ2hhbmdlIGJpdAogCSAqIGFzIHRoZSBDb25maWcgQlBEVSBoYXMKIAkgKi8KLQlldGggPSAoc3RydWN0IGV0aGhkciAqKXNrYi0+ZGF0YTsKIAlidWZmID0gc2tiLT5kYXRhICsgc2tiLT5kZXYtPmhhcmRfaGVhZGVyX2xlbjsKIAlpZiAoKmJ1ZmYrKyA9PSAweDQyICYmICpidWZmKysgPT0gMHg0MiAmJiAqYnVmZisrID09IDB4MDMpIHsKIAkJc3RydWN0IHNvY2sgKnNrOwpAQCAtMTE4MCw3ICsxMTc4LDYgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBsYW5lX21vZHVsZV9jbGVhbnVwKHZvaWQpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IGxlY19wcml2ICpwcml2OwogCiAJcmVtb3ZlX3Byb2NfZW50cnkoImxlYyIsIGF0bV9wcm9jX3Jvb3QpOwogCkBAIC0xMTg4LDcgKzExODUsNiBAQAogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9MRUNfSVRGOyBpKyspIHsKIAkJaWYgKGRldl9sZWNbaV0gIT0gTlVMTCkgewotCQkJcHJpdiA9IG5ldGRldl9wcml2KGRldl9sZWNbaV0pOwogCQkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2X2xlY1tpXSk7CiAJCQlmcmVlX25ldGRldihkZXZfbGVjW2ldKTsKIAkJCWRldl9sZWNbaV0gPSBOVUxMOwpkaWZmIC0tZ2l0IGEvbmV0L2F4MjUvYWZfYXgyNS5jIGIvbmV0L2F4MjUvYWZfYXgyNS5jCmluZGV4IDZkYTVkYWUuLmU3YzY5ZjQgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2FmX2F4MjUuYworKysgYi9uZXQvYXgyNS9hZl9heDI1LmMKQEAgLTE1MzgsOCArMTUzOCw2IEBACiAJfQogCiAJLyogQnVpbGQgYSBwYWNrZXQgKi8KLQlTT0NLX0RFQlVHKHNrLCAiQVguMjU6IHNlbmR0bzogQWRkcmVzc2VzIGJ1aWx0LiBCdWlsZGluZyBwYWNrZXQuXG4iKTsKLQogCS8qIEFzc3VtZSB0aGUgd29yc3QgY2FzZSAqLwogCXNpemUgPSBsZW4gKyBheDI1LT5heDI1X2Rldi0+ZGV2LT5oYXJkX2hlYWRlcl9sZW47CiAKQEAgLTE1NDksOCArMTU0Nyw2IEBACiAKIAlza2JfcmVzZXJ2ZShza2IsIHNpemUgLSBsZW4pOwogCi0JU09DS19ERUJVRyhzaywgIkFYLjI1OiBBcHBlbmRpbmcgdXNlciBkYXRhXG4iKTsKLQogCS8qIFVzZXIgZGF0YSBmb2xsb3dzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBBWC4yNSBkYXRhICovCiAJaWYgKG1lbWNweV9mcm9taW92ZWMoc2tiX3B1dChza2IsIGxlbiksIG1zZy0+bXNnX2lvdiwgbGVuKSkgewogCQllcnIgPSAtRUZBVUxUOwpAQCAtMTU2NCw4ICsxNTYwLDYgQEAKIAlpZiAoIWF4MjUtPnBpZGluY2wpCiAJCSpza2JfcHVzaChza2IsIDEpID0gc2stPnNrX3Byb3RvY29sOwogCi0JU09DS19ERUJVRyhzaywgIkFYLjI1OiBUcmFuc21pdHRpbmcgYnVmZmVyXG4iKTsKLQogCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX1NFUVBBQ0tFVCkgewogCQkvKiBDb25uZWN0ZWQgbW9kZSBzb2NrZXRzIGdvIHZpYSB0aGUgTEFQQiBtYWNoaW5lICovCiAJCWlmIChzay0+c2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKSB7CkBAIC0xNTgzLDIyICsxNTc3LDE0IEBACiAKIAlza2JfcHVzaChza2IsIDEgKyBheDI1X2FkZHJfc2l6ZShkcCkpOwogCi0JU09DS19ERUJVRyhzaywgIkJ1aWxkaW5nIEFYLjI1IEhlYWRlciAoZHA9JXApLlxuIiwgZHApOwotCi0JaWYgKGRwICE9IE5VTEwpCi0JCVNPQ0tfREVCVUcoc2ssICJOdW0gZGlnaXBlYXRlcnM9JWRcbiIsIGRwLT5uZGlnaSk7CisJLyogQnVpbGRpbmcgQVguMjUgSGVhZGVyICovCiAKIAkvKiBCdWlsZCBhbiBBWC4yNSBoZWFkZXIgKi8KIAlsdiA9IGF4MjVfYWRkcl9idWlsZChza2ItPmRhdGEsICZheDI1LT5zb3VyY2VfYWRkciwgJnNheC5zYXgyNV9jYWxsLAogCQkJICAgICBkcCwgQVgyNV9DT01NQU5ELCBBWDI1X01PRFVMVVMpOwogCi0JU09DS19ERUJVRyhzaywgIkJ1aWx0IGhlYWRlciAoJWQgYnl0ZXMpXG4iLGx2KTsKLQogCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIGx2KTsKIAotCVNPQ0tfREVCVUcoc2ssICJiYXNlPSVwIHBvcz0lcFxuIiwKLQkJICAgc2tiLT5kYXRhLCBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpKTsKLQogCSpza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpID0gQVgyNV9VSTsKIAogCS8qIERhdGFncmFtIGZyYW1lcyBnbyBzdHJhaWdodCBvdXQgb2YgdGhlIGRvb3IgYXMgVUkgKi8KZGlmZiAtLWdpdCBhL25ldC9heDI1L2F4MjVfaWZhY2UuYyBiL25ldC9heDI1L2F4MjVfaWZhY2UuYwppbmRleCA1YTBkZGE4Li42MGI1NDVlIDEwMDY0NAotLS0gYS9uZXQvYXgyNS9heDI1X2lmYWNlLmMKKysrIGIvbmV0L2F4MjUvYXgyNV9pZmFjZS5jCkBAIC01OCw3ICs1OCw3IEBACiAKIHZvaWQgYXgyNV9wcm90b2NvbF9yZWxlYXNlKHVuc2lnbmVkIGludCBwaWQpCiB7Ci0Jc3RydWN0IGF4MjVfcHJvdG9jb2wgKnMsICpwcm90b2NvbDsKKwlzdHJ1Y3QgYXgyNV9wcm90b2NvbCAqcHJvdG9jb2w7CiAKIAl3cml0ZV9sb2NrX2JoKCZwcm90b2NvbF9saXN0X2xvY2spOwogCXByb3RvY29sID0gcHJvdG9jb2xfbGlzdDsKQEAgLTcyLDcgKzcyLDYgQEAKIAogCXdoaWxlIChwcm90b2NvbCAhPSBOVUxMICYmIHByb3RvY29sLT5uZXh0ICE9IE5VTEwpIHsKIAkJaWYgKHByb3RvY29sLT5uZXh0LT5waWQgPT0gcGlkKSB7Ci0JCQlzID0gcHJvdG9jb2wtPm5leHQ7CiAJCQlwcm90b2NvbC0+bmV4dCA9IHByb3RvY29sLT5uZXh0LT5uZXh0OwogCQkJZ290byBvdXQ7CiAJCX0KZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2FnZ3JlZ2F0aW9uLmMgYi9uZXQvYmF0bWFuLWFkdi9hZ2dyZWdhdGlvbi5jCmluZGV4IGFmNDVkNmIuLmE4YzMyMDMgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L2FnZ3JlZ2F0aW9uLmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvYWdncmVnYXRpb24uYwpAQCAtMjMsMTEgKzIzLDEyIEBACiAjaW5jbHVkZSAiYWdncmVnYXRpb24uaCIKICNpbmNsdWRlICJzZW5kLmgiCiAjaW5jbHVkZSAicm91dGluZy5oIgorI2luY2x1ZGUgImhhcmQtaW50ZXJmYWNlLmgiCiAKLS8qIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgaG5hIGluZm9ybWF0aW9uIGZvciBhIGdpdmVuIHBhY2tldCAqLwotc3RhdGljIGludCBobmFfbGVuKHN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0KQorLyogY2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSB0dCBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiBwYWNrZXQgKi8KK3N0YXRpYyBpbnQgdHRfbGVuKHN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0KQogewotCXJldHVybiBiYXRtYW5fcGFja2V0LT5udW1faG5hICogRVRIX0FMRU47CisJcmV0dXJuIGJhdG1hbl9wYWNrZXQtPm51bV90dCAqIEVUSF9BTEVOOwogfQogCiAvKiByZXR1cm4gdHJ1ZSBpZiBuZXdfcGFja2V0IGNhbiBiZSBhZ2dyZWdhdGVkIHdpdGggZm9yd19wYWNrZXQgKi8KQEAgLTk1LDcgKzk2LDYgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLSNkZWZpbmUgYXRvbWljX2RlY19ub3RfemVybyh2KSAgICAgICAgICBhdG9taWNfYWRkX3VubGVzcygodiksIC0xLCAwKQogLyogY3JlYXRlIGEgbmV3IGFnZ3JlZ2F0ZWQgcGFja2V0IGFuZCBhZGQgdGhpcyBwYWNrZXQgdG8gaXQgKi8KIHN0YXRpYyB2b2lkIG5ld19hZ2dyZWdhdGVkX3BhY2tldCh1bnNpZ25lZCBjaGFyICpwYWNrZXRfYnVmZiwgaW50IHBhY2tldF9sZW4sCiAJCQkJICB1bnNpZ25lZCBsb25nIHNlbmRfdGltZSwgYm9vbCBkaXJlY3RfbGluaywKQEAgLTEwNiwxMiArMTA2LDE1IEBACiAJc3RydWN0IGZvcndfcGFja2V0ICpmb3J3X3BhY2tldF9hZ2dyOwogCXVuc2lnbmVkIGNoYXIgKnNrYl9idWZmOwogCisJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZpZl9pbmNvbWluZy0+cmVmY291bnQpKQorCQlyZXR1cm47CisKIAkvKiBvd24gcGFja2V0IHNob3VsZCBhbHdheXMgYmUgc2NoZWR1bGVkICovCiAJaWYgKCFvd25fcGFja2V0KSB7CiAJCWlmICghYXRvbWljX2RlY19ub3RfemVybygmYmF0X3ByaXYtPmJhdG1hbl9xdWV1ZV9sZWZ0KSkgewogCQkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKIAkJCQkiYmF0bWFuIHBhY2tldCBxdWV1ZSBmdWxsXG4iKTsKLQkJCXJldHVybjsKKwkJCWdvdG8gb3V0OwogCQl9CiAJfQogCkBAIC0xMTksNyArMTIyLDcgQEAKIAlpZiAoIWZvcndfcGFja2V0X2FnZ3IpIHsKIAkJaWYgKCFvd25fcGFja2V0KQogCQkJYXRvbWljX2luYygmYmF0X3ByaXYtPmJhdG1hbl9xdWV1ZV9sZWZ0KTsKLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoKGF0b21pY19yZWFkKCZiYXRfcHJpdi0+YWdncmVnYXRlZF9vZ21zKSkgJiYKQEAgLTEzNCw3ICsxMzcsNyBAQAogCQlpZiAoIW93bl9wYWNrZXQpCiAJCQlhdG9taWNfaW5jKCZiYXRfcHJpdi0+YmF0bWFuX3F1ZXVlX2xlZnQpOwogCQlrZnJlZShmb3J3X3BhY2tldF9hZ2dyKTsKLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAl9CiAJc2tiX3Jlc2VydmUoZm9yd19wYWNrZXRfYWdnci0+c2tiLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpOwogCkBAIC0xNjUsNiArMTY4LDEwIEBACiAJcXVldWVfZGVsYXllZF93b3JrKGJhdF9ldmVudF93b3JrcXVldWUsCiAJCQkgICAmZm9yd19wYWNrZXRfYWdnci0+ZGVsYXllZF93b3JrLAogCQkJICAgc2VuZF90aW1lIC0gamlmZmllcyk7CisKKwlyZXR1cm47CitvdXQ6CisJaGFyZGlmX2ZyZWVfcmVmKGlmX2luY29taW5nKTsKIH0KIAogLyogYWdncmVnYXRlIGEgbmV3IHBhY2tldCBpbnRvIHRoZSBleGlzdGluZyBhZ2dyZWdhdGlvbiAqLwpAQCAtMjUxLDcgKzI1OCw3IEBACiB7CiAJc3RydWN0IGJhdG1hbl9wYWNrZXQgKmJhdG1hbl9wYWNrZXQ7CiAJaW50IGJ1ZmZfcG9zID0gMDsKLQl1bnNpZ25lZCBjaGFyICpobmFfYnVmZjsKKwl1bnNpZ25lZCBjaGFyICp0dF9idWZmOwogCiAJYmF0bWFuX3BhY2tldCA9IChzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqKXBhY2tldF9idWZmOwogCkBAIC0yNjAsMTQgKzI2NywxNCBAQAogCQkgICBvcmlnX2ludGVydmFsLiAqLwogCQliYXRtYW5fcGFja2V0LT5zZXFubyA9IG50b2hsKGJhdG1hbl9wYWNrZXQtPnNlcW5vKTsKIAotCQlobmFfYnVmZiA9IHBhY2tldF9idWZmICsgYnVmZl9wb3MgKyBCQVRfUEFDS0VUX0xFTjsKKwkJdHRfYnVmZiA9IHBhY2tldF9idWZmICsgYnVmZl9wb3MgKyBCQVRfUEFDS0VUX0xFTjsKIAkJcmVjZWl2ZV9iYXRfcGFja2V0KGV0aGhkciwgYmF0bWFuX3BhY2tldCwKLQkJCQkgICBobmFfYnVmZiwgaG5hX2xlbihiYXRtYW5fcGFja2V0KSwKKwkJCQkgICB0dF9idWZmLCB0dF9sZW4oYmF0bWFuX3BhY2tldCksCiAJCQkJICAgaWZfaW5jb21pbmcpOwogCi0JCWJ1ZmZfcG9zICs9IEJBVF9QQUNLRVRfTEVOICsgaG5hX2xlbihiYXRtYW5fcGFja2V0KTsKKwkJYnVmZl9wb3MgKz0gQkFUX1BBQ0tFVF9MRU4gKyB0dF9sZW4oYmF0bWFuX3BhY2tldCk7CiAJCWJhdG1hbl9wYWNrZXQgPSAoc3RydWN0IGJhdG1hbl9wYWNrZXQgKikKIAkJCShwYWNrZXRfYnVmZiArIGJ1ZmZfcG9zKTsKIAl9IHdoaWxlIChhZ2dyZWdhdGVkX3BhY2tldChidWZmX3BvcywgcGFja2V0X2xlbiwKLQkJCQkgICBiYXRtYW5fcGFja2V0LT5udW1faG5hKSk7CisJCQkJICAgYmF0bWFuX3BhY2tldC0+bnVtX3R0KSk7CiB9CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9hZ2dyZWdhdGlvbi5oIGIvbmV0L2JhdG1hbi1hZHYvYWdncmVnYXRpb24uaAppbmRleCAwNjIyMDQyLi43ZTZkNzJmIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9hZ2dyZWdhdGlvbi5oCisrKyBiL25ldC9iYXRtYW4tYWR2L2FnZ3JlZ2F0aW9uLmgKQEAgLTI1LDkgKzI1LDkgQEAKICNpbmNsdWRlICJtYWluLmgiCiAKIC8qIGlzIHRoZXJlIGFub3RoZXIgYWdncmVnYXRlZCBwYWNrZXQgaGVyZT8gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGFnZ3JlZ2F0ZWRfcGFja2V0KGludCBidWZmX3BvcywgaW50IHBhY2tldF9sZW4sIGludCBudW1faG5hKQorc3RhdGljIGlubGluZSBpbnQgYWdncmVnYXRlZF9wYWNrZXQoaW50IGJ1ZmZfcG9zLCBpbnQgcGFja2V0X2xlbiwgaW50IG51bV90dCkKIHsKLQlpbnQgbmV4dF9idWZmX3BvcyA9IGJ1ZmZfcG9zICsgQkFUX1BBQ0tFVF9MRU4gKyAobnVtX2huYSAqIEVUSF9BTEVOKTsKKwlpbnQgbmV4dF9idWZmX3BvcyA9IGJ1ZmZfcG9zICsgQkFUX1BBQ0tFVF9MRU4gKyAobnVtX3R0ICogRVRIX0FMRU4pOwogCiAJcmV0dXJuIChuZXh0X2J1ZmZfcG9zIDw9IHBhY2tldF9sZW4pICYmCiAJCShuZXh0X2J1ZmZfcG9zIDw9IE1BWF9BR0dSRUdBVElPTl9CWVRFUyk7CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9iYXRfZGVidWdmcy5jIGIvbmV0L2JhdG1hbi1hZHYvYmF0X2RlYnVnZnMuYwppbmRleCAwZTlkNDM1Li5hYmFlZWM1IDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9iYXRfZGVidWdmcy5jCisrKyBiL25ldC9iYXRtYW4tYWR2L2JhdF9kZWJ1Z2ZzLmMKQEAgLTI0MSwxMyArMjQxLDEzIEBACiBzdGF0aWMgaW50IHRyYW5zdGFibGVfZ2xvYmFsX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilpbm9kZS0+aV9wcml2YXRlOwotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBobmFfZ2xvYmFsX3NlcV9wcmludF90ZXh0LCBuZXRfZGV2KTsKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgdHRfZ2xvYmFsX3NlcV9wcmludF90ZXh0LCBuZXRfZGV2KTsKIH0KIAogc3RhdGljIGludCB0cmFuc3RhYmxlX2xvY2FsX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilpbm9kZS0+aV9wcml2YXRlOwotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBobmFfbG9jYWxfc2VxX3ByaW50X3RleHQsIG5ldF9kZXYpOworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCB0dF9sb2NhbF9zZXFfcHJpbnRfdGV4dCwgbmV0X2Rldik7CiB9CiAKIHN0YXRpYyBpbnQgdmlzX2RhdGFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2JhdF9zeXNmcy5jIGIvbmV0L2JhdG1hbi1hZHYvYmF0X3N5c2ZzLmMKaW5kZXggZTQ0OWJmNi4uNDk3YTA3MCAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvYmF0X3N5c2ZzLmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvYmF0X3N5c2ZzLmMKQEAgLTQ4OCwyMiArNDg4LDI0IEBACiAJICAgIChzdHJuY21wKGhhcmRfaWZhY2UtPnNvZnRfaWZhY2UtPm5hbWUsIGJ1ZmYsIElGTkFNU0laKSA9PSAwKSkKIAkJZ290byBvdXQ7CiAKLQlpZiAoc3RhdHVzX3RtcCA9PSBJRl9OT1RfSU5fVVNFKSB7Ci0JCXJ0bmxfbG9jaygpOwotCQloYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2UoaGFyZF9pZmFjZSk7Ci0JCXJ0bmxfdW5sb2NrKCk7CisJaWYgKCFydG5sX3RyeWxvY2soKSkgeworCQlyZXQgPSAtRVJFU1RBUlRTWVM7CiAJCWdvdG8gb3V0OwogCX0KIAotCS8qIGlmIHRoZSBpbnRlcmZhY2UgYWxyZWFkeSBpcyBpbiB1c2UgKi8KLQlpZiAoaGFyZF9pZmFjZS0+aWZfc3RhdHVzICE9IElGX05PVF9JTl9VU0UpIHsKLQkJcnRubF9sb2NrKCk7CisJaWYgKHN0YXR1c190bXAgPT0gSUZfTk9UX0lOX1VTRSkgewogCQloYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2UoaGFyZF9pZmFjZSk7Ci0JCXJ0bmxfdW5sb2NrKCk7CisJCWdvdG8gdW5sb2NrOwogCX0KIAorCS8qIGlmIHRoZSBpbnRlcmZhY2UgYWxyZWFkeSBpcyBpbiB1c2UgKi8KKwlpZiAoaGFyZF9pZmFjZS0+aWZfc3RhdHVzICE9IElGX05PVF9JTl9VU0UpCisJCWhhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShoYXJkX2lmYWNlKTsKKwogCXJldCA9IGhhcmRpZl9lbmFibGVfaW50ZXJmYWNlKGhhcmRfaWZhY2UsIGJ1ZmYpOwogCit1bmxvY2s6CisJcnRubF91bmxvY2soKTsKIG91dDoKIAloYXJkaWZfZnJlZV9yZWYoaGFyZF9pZmFjZSk7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2dhdGV3YXlfY2xpZW50LmMgYi9uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NsaWVudC5jCmluZGV4IDNjYzQzNTUuLjYxNjA1YTAgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L2dhdGV3YXlfY2xpZW50LmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvZ2F0ZXdheV9jbGllbnQuYwpAQCAtMjMsODAgKzIzLDg4IEBACiAjaW5jbHVkZSAiZ2F0ZXdheV9jbGllbnQuaCIKICNpbmNsdWRlICJnYXRld2F5X2NvbW1vbi5oIgogI2luY2x1ZGUgImhhcmQtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAib3JpZ2luYXRvci5oIgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L3VkcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KIAotc3RhdGljIHZvaWQgZ3dfbm9kZV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkKLXsKLQlzdHJ1Y3QgZ3dfbm9kZSAqZ3dfbm9kZTsKLQotCWd3X25vZGUgPSBjb250YWluZXJfb2YocmN1LCBzdHJ1Y3QgZ3dfbm9kZSwgcmN1KTsKLQlrZnJlZShnd19ub2RlKTsKLX0KLQogc3RhdGljIHZvaWQgZ3dfbm9kZV9mcmVlX3JlZihzdHJ1Y3QgZ3dfbm9kZSAqZ3dfbm9kZSkKIHsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZ3dfbm9kZS0+cmVmY291bnQpKQotCQljYWxsX3JjdSgmZ3dfbm9kZS0+cmN1LCBnd19ub2RlX2ZyZWVfcmN1KTsKKwkJa2ZyZWVfcmN1KGd3X25vZGUsIHJjdSk7CiB9CiAKLXZvaWQgKmd3X2dldF9zZWxlY3RlZChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KQorc3RhdGljIHN0cnVjdCBnd19ub2RlICpnd19nZXRfc2VsZWN0ZWRfZ3dfbm9kZShzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KQogewotCXN0cnVjdCBnd19ub2RlICpjdXJyX2dhdGV3YXlfdG1wOwotCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSA9IE5VTEw7CisJc3RydWN0IGd3X25vZGUgKmd3X25vZGU7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JY3Vycl9nYXRld2F5X3RtcCA9IHJjdV9kZXJlZmVyZW5jZShiYXRfcHJpdi0+Y3Vycl9ndyk7Ci0JaWYgKCFjdXJyX2dhdGV3YXlfdG1wKQorCWd3X25vZGUgPSByY3VfZGVyZWZlcmVuY2UoYmF0X3ByaXYtPmN1cnJfZ3cpOworCWlmICghZ3dfbm9kZSkKIAkJZ290byBvdXQ7CiAKLQlvcmlnX25vZGUgPSBjdXJyX2dhdGV3YXlfdG1wLT5vcmlnX25vZGU7Ci0JaWYgKCFvcmlnX25vZGUpCisJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZnd19ub2RlLT5yZWZjb3VudCkpCisJCWd3X25vZGUgPSBOVUxMOworCitvdXQ6CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIGd3X25vZGU7Cit9CisKK3N0cnVjdCBvcmlnX25vZGUgKmd3X2dldF9zZWxlY3RlZF9vcmlnKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCit7CisJc3RydWN0IGd3X25vZGUgKmd3X25vZGU7CisJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlID0gTlVMTDsKKworCWd3X25vZGUgPSBnd19nZXRfc2VsZWN0ZWRfZ3dfbm9kZShiYXRfcHJpdik7CisJaWYgKCFnd19ub2RlKQogCQlnb3RvIG91dDsKIAorCXJjdV9yZWFkX2xvY2soKTsKKwlvcmlnX25vZGUgPSBnd19ub2RlLT5vcmlnX25vZGU7CisJaWYgKCFvcmlnX25vZGUpCisJCWdvdG8gdW5sb2NrOworCiAJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZvcmlnX25vZGUtPnJlZmNvdW50KSkKIAkJb3JpZ19ub2RlID0gTlVMTDsKIAotb3V0OgordW5sb2NrOgogCXJjdV9yZWFkX3VubG9jaygpOwotCXJldHVybiBvcmlnX25vZGU7Ci19Ci0KLXZvaWQgZ3dfZGVzZWxlY3Qoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKLXsKLQlzdHJ1Y3QgZ3dfbm9kZSAqZ3dfbm9kZTsKLQotCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPmd3X2xpc3RfbG9jayk7Ci0JZ3dfbm9kZSA9IHJjdV9kZXJlZmVyZW5jZShiYXRfcHJpdi0+Y3Vycl9ndyk7Ci0JcmN1X2Fzc2lnbl9wb2ludGVyKGJhdF9wcml2LT5jdXJyX2d3LCBOVUxMKTsKLQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmd3X2xpc3RfbG9jayk7Ci0KK291dDoKIAlpZiAoZ3dfbm9kZSkKIAkJZ3dfbm9kZV9mcmVlX3JlZihnd19ub2RlKTsKKwlyZXR1cm4gb3JpZ19ub2RlOwogfQogCiBzdGF0aWMgdm9pZCBnd19zZWxlY3Qoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwgc3RydWN0IGd3X25vZGUgKm5ld19nd19ub2RlKQogewogCXN0cnVjdCBnd19ub2RlICpjdXJyX2d3X25vZGU7CiAKKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5nd19saXN0X2xvY2spOworCiAJaWYgKG5ld19nd19ub2RlICYmICFhdG9taWNfaW5jX25vdF96ZXJvKCZuZXdfZ3dfbm9kZS0+cmVmY291bnQpKQogCQluZXdfZ3dfbm9kZSA9IE5VTEw7CiAKLQlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5nd19saXN0X2xvY2spOwotCWN1cnJfZ3dfbm9kZSA9IHJjdV9kZXJlZmVyZW5jZShiYXRfcHJpdi0+Y3Vycl9ndyk7CisJY3Vycl9nd19ub2RlID0gYmF0X3ByaXYtPmN1cnJfZ3c7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKGJhdF9wcml2LT5jdXJyX2d3LCBuZXdfZ3dfbm9kZSk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5nd19saXN0X2xvY2spOwogCiAJaWYgKGN1cnJfZ3dfbm9kZSkKIAkJZ3dfbm9kZV9mcmVlX3JlZihjdXJyX2d3X25vZGUpOworCisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5nd19saXN0X2xvY2spOworfQorCit2b2lkIGd3X2Rlc2VsZWN0KHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCit7CisJZ3dfc2VsZWN0KGJhdF9wcml2LCBOVUxMKTsKIH0KIAogdm9pZCBnd19lbGVjdGlvbihzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KQogewogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCXN0cnVjdCBnd19ub2RlICpnd19ub2RlLCAqY3Vycl9ndywgKmN1cnJfZ3dfdG1wID0gTlVMTDsKKwlzdHJ1Y3QgZ3dfbm9kZSAqZ3dfbm9kZSwgKmN1cnJfZ3cgPSBOVUxMLCAqY3Vycl9nd190bXAgPSBOVUxMOworCXN0cnVjdCBuZWlnaF9ub2RlICpyb3V0ZXI7CiAJdWludDhfdCBtYXhfdHEgPSAwOwogCXVpbnQzMl90IG1heF9nd19mYWN0b3IgPSAwLCB0bXBfZ3dfZmFjdG9yID0gMDsKIAlpbnQgZG93biwgdXA7CkBAIC0xMTAsMzIgKzExOCwyNSBAQAogCWlmIChhdG9taWNfcmVhZCgmYmF0X3ByaXYtPmd3X21vZGUpICE9IEdXX01PREVfQ0xJRU5UKQogCQlyZXR1cm47CiAKKwljdXJyX2d3ID0gZ3dfZ2V0X3NlbGVjdGVkX2d3X25vZGUoYmF0X3ByaXYpOworCWlmIChjdXJyX2d3KQorCQlnb3RvIG91dDsKKwogCXJjdV9yZWFkX2xvY2soKTsKLQljdXJyX2d3ID0gcmN1X2RlcmVmZXJlbmNlKGJhdF9wcml2LT5jdXJyX2d3KTsKLQlpZiAoY3Vycl9ndykgewotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcmV0dXJuOwotCX0KLQogCWlmIChobGlzdF9lbXB0eSgmYmF0X3ByaXYtPmd3X2xpc3QpKSB7Ci0KLQkJaWYgKGN1cnJfZ3cpIHsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwotCQkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKLQkJCQkiUmVtb3Zpbmcgc2VsZWN0ZWQgZ2F0ZXdheSAtICIKLQkJCQkibm8gZ2F0ZXdheSBpbiByYW5nZVxuIik7Ci0JCQlnd19kZXNlbGVjdChiYXRfcHJpdik7Ci0JCX0gZWxzZQotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQkJcmV0dXJuOworCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAorCQkJIlJlbW92aW5nIHNlbGVjdGVkIGdhdGV3YXkgLSAiCisJCQkibm8gZ2F0ZXdheSBpbiByYW5nZVxuIik7CisJCWd3X2Rlc2VsZWN0KGJhdF9wcml2KTsKKwkJZ290byB1bmxvY2s7CiAJfQogCiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGd3X25vZGUsIG5vZGUsICZiYXRfcHJpdi0+Z3dfbGlzdCwgbGlzdCkgewotCQlpZiAoIWd3X25vZGUtPm9yaWdfbm9kZS0+cm91dGVyKQorCQlpZiAoZ3dfbm9kZS0+ZGVsZXRlZCkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChnd19ub2RlLT5kZWxldGVkKQorCQlyb3V0ZXIgPSBvcmlnX25vZGVfZ2V0X3JvdXRlcihnd19ub2RlLT5vcmlnX25vZGUpOworCQlpZiAoIXJvdXRlcikKIAkJCWNvbnRpbnVlOwogCiAJCXN3aXRjaCAoYXRvbWljX3JlYWQoJmJhdF9wcml2LT5nd19zZWxfY2xhc3MpKSB7CkBAIC0xNDMsMTUgKzE0NCwxNCBAQAogCQkJZ3dfYmFuZHdpZHRoX3RvX2tiaXQoZ3dfbm9kZS0+b3JpZ19ub2RlLT5nd19mbGFncywKIAkJCQkJICAgICAmZG93biwgJnVwKTsKIAotCQkJdG1wX2d3X2ZhY3RvciA9IChnd19ub2RlLT5vcmlnX25vZGUtPnJvdXRlci0+dHFfYXZnICoKLQkJCQkJIGd3X25vZGUtPm9yaWdfbm9kZS0+cm91dGVyLT50cV9hdmcgKgorCQkJdG1wX2d3X2ZhY3RvciA9IChyb3V0ZXItPnRxX2F2ZyAqIHJvdXRlci0+dHFfYXZnICoKIAkJCQkJIGRvd24gKiAxMDAgKiAxMDApIC8KIAkJCQkJIChUUV9MT0NBTF9XSU5ET1dfU0laRSAqCiAJCQkJCSBUUV9MT0NBTF9XSU5ET1dfU0laRSAqIDY0KTsKIAogCQkJaWYgKCh0bXBfZ3dfZmFjdG9yID4gbWF4X2d3X2ZhY3RvcikgfHwKIAkJCSAgICAoKHRtcF9nd19mYWN0b3IgPT0gbWF4X2d3X2ZhY3RvcikgJiYKLQkJCSAgICAgKGd3X25vZGUtPm9yaWdfbm9kZS0+cm91dGVyLT50cV9hdmcgPiBtYXhfdHEpKSkKKwkJCSAgICAgKHJvdXRlci0+dHFfYXZnID4gbWF4X3RxKSkpCiAJCQkJY3Vycl9nd190bXAgPSBnd19ub2RlOwogCQkJYnJlYWs7CiAKQEAgLTE2MywxOSArMTYzLDI1IEBACiAJCQkgICogICAgIHNvb24gYXMgYSBiZXR0ZXIgZ2F0ZXdheSBhcHBlYXJzIHdoaWNoIGhhcwogCQkJICAqICAgICAkcm91dGluZ19jbGFzcyBtb3JlIHRxIHBvaW50cykKIAkJCSAgKiovCi0JCQlpZiAoZ3dfbm9kZS0+b3JpZ19ub2RlLT5yb3V0ZXItPnRxX2F2ZyA+IG1heF90cSkKKwkJCWlmIChyb3V0ZXItPnRxX2F2ZyA+IG1heF90cSkKIAkJCQljdXJyX2d3X3RtcCA9IGd3X25vZGU7CiAJCQlicmVhazsKIAkJfQogCi0JCWlmIChnd19ub2RlLT5vcmlnX25vZGUtPnJvdXRlci0+dHFfYXZnID4gbWF4X3RxKQotCQkJbWF4X3RxID0gZ3dfbm9kZS0+b3JpZ19ub2RlLT5yb3V0ZXItPnRxX2F2ZzsKKwkJaWYgKHJvdXRlci0+dHFfYXZnID4gbWF4X3RxKQorCQkJbWF4X3RxID0gcm91dGVyLT50cV9hdmc7CiAKIAkJaWYgKHRtcF9nd19mYWN0b3IgPiBtYXhfZ3dfZmFjdG9yKQogCQkJbWF4X2d3X2ZhY3RvciA9IHRtcF9nd19mYWN0b3I7CisKKwkJbmVpZ2hfbm9kZV9mcmVlX3JlZihyb3V0ZXIpOwogCX0KIAogCWlmIChjdXJyX2d3ICE9IGN1cnJfZ3dfdG1wKSB7CisJCXJvdXRlciA9IG9yaWdfbm9kZV9nZXRfcm91dGVyKGN1cnJfZ3dfdG1wLT5vcmlnX25vZGUpOworCQlpZiAoIXJvdXRlcikKKwkJCWdvdG8gdW5sb2NrOworCiAJCWlmICgoY3Vycl9ndykgJiYgKCFjdXJyX2d3X3RtcCkpCiAJCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAogCQkJCSJSZW1vdmluZyBzZWxlY3RlZCBnYXRld2F5IC0gIgpAQCAtMTg2LDQ4ICsxOTIsNTAgQEAKIAkJCQkiKGd3X2ZsYWdzOiAlaSwgdHE6ICVpKVxuIiwKIAkJCQljdXJyX2d3X3RtcC0+b3JpZ19ub2RlLT5vcmlnLAogCQkJCWN1cnJfZ3dfdG1wLT5vcmlnX25vZGUtPmd3X2ZsYWdzLAotCQkJCWN1cnJfZ3dfdG1wLT5vcmlnX25vZGUtPnJvdXRlci0+dHFfYXZnKTsKKwkJCQlyb3V0ZXItPnRxX2F2Zyk7CiAJCWVsc2UKIAkJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCiAJCQkJIkNoYW5naW5nIHJvdXRlIHRvIGdhdGV3YXkgJXBNICIKIAkJCQkiKGd3X2ZsYWdzOiAlaSwgdHE6ICVpKVxuIiwKIAkJCQljdXJyX2d3X3RtcC0+b3JpZ19ub2RlLT5vcmlnLAogCQkJCWN1cnJfZ3dfdG1wLT5vcmlnX25vZGUtPmd3X2ZsYWdzLAotCQkJCWN1cnJfZ3dfdG1wLT5vcmlnX25vZGUtPnJvdXRlci0+dHFfYXZnKTsKKwkJCQlyb3V0ZXItPnRxX2F2Zyk7CiAKKwkJbmVpZ2hfbm9kZV9mcmVlX3JlZihyb3V0ZXIpOwogCQlnd19zZWxlY3QoYmF0X3ByaXYsIGN1cnJfZ3dfdG1wKTsKIAl9CiAKK3VubG9jazoKIAlyY3VfcmVhZF91bmxvY2soKTsKK291dDoKKwlpZiAoY3Vycl9ndykKKwkJZ3dfbm9kZV9mcmVlX3JlZihjdXJyX2d3KTsKIH0KIAogdm9pZCBnd19jaGVja19lbGVjdGlvbihzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LCBzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUpCiB7Ci0Jc3RydWN0IGd3X25vZGUgKmN1cnJfZ2F0ZXdheV90bXA7CisJc3RydWN0IG9yaWdfbm9kZSAqY3Vycl9nd19vcmlnOworCXN0cnVjdCBuZWlnaF9ub2RlICpyb3V0ZXJfZ3cgPSBOVUxMLCAqcm91dGVyX29yaWcgPSBOVUxMOwogCXVpbnQ4X3QgZ3dfdHFfYXZnLCBvcmlnX3RxX2F2ZzsKIAotCXJjdV9yZWFkX2xvY2soKTsKLQljdXJyX2dhdGV3YXlfdG1wID0gcmN1X2RlcmVmZXJlbmNlKGJhdF9wcml2LT5jdXJyX2d3KTsKLQlpZiAoIWN1cnJfZ2F0ZXdheV90bXApCi0JCWdvdG8gb3V0X3JjdTsKKwljdXJyX2d3X29yaWcgPSBnd19nZXRfc2VsZWN0ZWRfb3JpZyhiYXRfcHJpdik7CisJaWYgKCFjdXJyX2d3X29yaWcpCisJCWdvdG8gZGVzZWxlY3Q7CiAKLQlpZiAoIWN1cnJfZ2F0ZXdheV90bXAtPm9yaWdfbm9kZSkKLQkJZ290byBkZXNlbGVjdF9yY3U7Ci0KLQlpZiAoIWN1cnJfZ2F0ZXdheV90bXAtPm9yaWdfbm9kZS0+cm91dGVyKQotCQlnb3RvIGRlc2VsZWN0X3JjdTsKKwlyb3V0ZXJfZ3cgPSBvcmlnX25vZGVfZ2V0X3JvdXRlcihjdXJyX2d3X29yaWcpOworCWlmICghcm91dGVyX2d3KQorCQlnb3RvIGRlc2VsZWN0OwogCiAJLyogdGhpcyBub2RlIGFscmVhZHkgaXMgdGhlIGdhdGV3YXkgKi8KLQlpZiAoY3Vycl9nYXRld2F5X3RtcC0+b3JpZ19ub2RlID09IG9yaWdfbm9kZSkKLQkJZ290byBvdXRfcmN1OworCWlmIChjdXJyX2d3X29yaWcgPT0gb3JpZ19ub2RlKQorCQlnb3RvIG91dDsKIAotCWlmICghb3JpZ19ub2RlLT5yb3V0ZXIpCi0JCWdvdG8gb3V0X3JjdTsKKwlyb3V0ZXJfb3JpZyA9IG9yaWdfbm9kZV9nZXRfcm91dGVyKG9yaWdfbm9kZSk7CisJaWYgKCFyb3V0ZXJfb3JpZykKKwkJZ290byBvdXQ7CiAKLQlnd190cV9hdmcgPSBjdXJyX2dhdGV3YXlfdG1wLT5vcmlnX25vZGUtPnJvdXRlci0+dHFfYXZnOwotCXJjdV9yZWFkX3VubG9jaygpOwotCi0Jb3JpZ190cV9hdmcgPSBvcmlnX25vZGUtPnJvdXRlci0+dHFfYXZnOworCWd3X3RxX2F2ZyA9IHJvdXRlcl9ndy0+dHFfYXZnOworCW9yaWdfdHFfYXZnID0gcm91dGVyX29yaWctPnRxX2F2ZzsKIAogCS8qIHRoZSBUUSB2YWx1ZSBoYXMgdG8gYmUgYmV0dGVyICovCiAJaWYgKG9yaWdfdHFfYXZnIDwgZ3dfdHFfYXZnKQpAQCAtMjQ1LDE2ICsyNTMsMTcgQEAKIAkJIlJlc3RhcnRpbmcgZ2F0ZXdheSBzZWxlY3Rpb246IGJldHRlciBnYXRld2F5IGZvdW5kICh0cSBjdXJyOiAiCiAJCSIlaSwgdHEgbmV3OiAlaSlcbiIsCiAJCWd3X3RxX2F2Zywgb3JpZ190cV9hdmcpOwotCWdvdG8gZGVzZWxlY3Q7CiAKLW91dF9yY3U6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0JZ290byBvdXQ7Ci1kZXNlbGVjdF9yY3U6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiBkZXNlbGVjdDoKIAlnd19kZXNlbGVjdChiYXRfcHJpdik7CiBvdXQ6CisJaWYgKGN1cnJfZ3dfb3JpZykKKwkJb3JpZ19ub2RlX2ZyZWVfcmVmKGN1cnJfZ3dfb3JpZyk7CisJaWYgKHJvdXRlcl9ndykKKwkJbmVpZ2hfbm9kZV9mcmVlX3JlZihyb3V0ZXJfZ3cpOworCWlmIChyb3V0ZXJfb3JpZykKKwkJbmVpZ2hfbm9kZV9mcmVlX3JlZihyb3V0ZXJfb3JpZyk7CisKIAlyZXR1cm47CiB9CiAKQEAgLTI5MSw3ICszMDAsMTUgQEAKIAkJICAgIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwgdWludDhfdCBuZXdfZ3dmbGFncykKIHsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQlzdHJ1Y3QgZ3dfbm9kZSAqZ3dfbm9kZTsKKwlzdHJ1Y3QgZ3dfbm9kZSAqZ3dfbm9kZSwgKmN1cnJfZ3c7CisKKwkvKioKKwkgKiBOb3RlOiBXZSBkb24ndCBuZWVkIGEgTlVMTCBjaGVjayBoZXJlLCBzaW5jZSBjdXJyX2d3IG5ldmVyIGdldHMKKwkgKiBkZXJlZmVyZW5jZWQuIElmIGN1cnJfZ3cgaXMgTlVMTCB3ZSBhbHNvIHNob3VsZCBub3QgZXhpdCBhcyB3ZSBtYXkKKwkgKiBoYXZlIHRoaXMgZ2F0ZXdheSBpbiBvdXIgbGlzdCAoZHVwbGljYXRpb24gY2hlY2shKSBldmVuIHRob3VnaCB3ZQorCSAqIGhhdmUgbm8gY3VycmVudGx5IHNlbGVjdGVkIGdhdGV3YXkuCisJICovCisJY3Vycl9ndyA9IGd3X2dldF9zZWxlY3RlZF9nd19ub2RlKGJhdF9wcml2KTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZ3dfbm9kZSwgbm9kZSwgJmJhdF9wcml2LT5nd19saXN0LCBsaXN0KSB7CkBAIC0zMTIsMjIgKzMyOSwyNiBAQAogCQkJCSJHYXRld2F5ICVwTSByZW1vdmVkIGZyb20gZ2F0ZXdheSBsaXN0XG4iLAogCQkJCW9yaWdfbm9kZS0+b3JpZyk7CiAKLQkJCWlmIChnd19ub2RlID09IHJjdV9kZXJlZmVyZW5jZShiYXRfcHJpdi0+Y3Vycl9ndykpIHsKLQkJCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCQlnd19kZXNlbGVjdChiYXRfcHJpdik7Ci0JCQkJcmV0dXJuOwotCQkJfQorCQkJaWYgKGd3X25vZGUgPT0gY3Vycl9ndykKKwkJCQlnb3RvIGRlc2VsZWN0OwogCQl9CiAKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybjsKKwkJZ290byB1bmxvY2s7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwogCiAJaWYgKG5ld19nd2ZsYWdzID09IDApCi0JCXJldHVybjsKKwkJZ290byB1bmxvY2s7CiAKIAlnd19ub2RlX2FkZChiYXRfcHJpdiwgb3JpZ19ub2RlLCBuZXdfZ3dmbGFncyk7CisJZ290byB1bmxvY2s7CisKK2Rlc2VsZWN0OgorCWd3X2Rlc2VsZWN0KGJhdF9wcml2KTsKK3VubG9jazoKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWlmIChjdXJyX2d3KQorCQlnd19ub2RlX2ZyZWVfcmVmKGN1cnJfZ3cpOwogfQogCiB2b2lkIGd3X25vZGVfZGVsZXRlKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSkKQEAgLTMzNyw5ICszNTgsMTIgQEAKIAogdm9pZCBnd19ub2RlX3B1cmdlKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCiB7Ci0Jc3RydWN0IGd3X25vZGUgKmd3X25vZGU7CisJc3RydWN0IGd3X25vZGUgKmd3X25vZGUsICpjdXJyX2d3OwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqbm9kZV90bXA7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gMiAqIFBVUkdFX1RJTUVPVVQgKiBIWjsKKwljaGFyIGRvX2Rlc2VsZWN0ID0gMDsKKworCWN1cnJfZ3cgPSBnd19nZXRfc2VsZWN0ZWRfZ3dfbm9kZShiYXRfcHJpdik7CiAKIAlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5nd19saXN0X2xvY2spOwogCkBAIC0zNTAsNDEgKzM3NCw1NiBAQAogCQkgICAgYXRvbWljX3JlYWQoJmJhdF9wcml2LT5tZXNoX3N0YXRlKSA9PSBNRVNIX0FDVElWRSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChyY3VfZGVyZWZlcmVuY2UoYmF0X3ByaXYtPmN1cnJfZ3cpID09IGd3X25vZGUpCi0JCQlnd19kZXNlbGVjdChiYXRfcHJpdik7CisJCWlmIChjdXJyX2d3ID09IGd3X25vZGUpCisJCQlkb19kZXNlbGVjdCA9IDE7CiAKIAkJaGxpc3RfZGVsX3JjdSgmZ3dfbm9kZS0+bGlzdCk7CiAJCWd3X25vZGVfZnJlZV9yZWYoZ3dfbm9kZSk7CiAJfQogCi0KIAlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmd3X2xpc3RfbG9jayk7CisKKwkvKiBnd19kZXNlbGVjdCgpIG5lZWRzIHRvIGFjcXVpcmUgdGhlIGd3X2xpc3RfbG9jayAqLworCWlmIChkb19kZXNlbGVjdCkKKwkJZ3dfZGVzZWxlY3QoYmF0X3ByaXYpOworCisJaWYgKGN1cnJfZ3cpCisJCWd3X25vZGVfZnJlZV9yZWYoY3Vycl9ndyk7CiB9CiAKKy8qKgorICogZmFpbHMgaWYgb3JpZ19ub2RlIGhhcyBubyByb3V0ZXIKKyAqLwogc3RhdGljIGludCBfd3JpdGVfYnVmZmVyX3RleHQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKIAkJCSAgICAgIHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgZ3dfbm9kZSAqZ3dfbm9kZSkKIHsKIAlzdHJ1Y3QgZ3dfbm9kZSAqY3Vycl9ndzsKLQlpbnQgZG93biwgdXAsIHJldDsKKwlzdHJ1Y3QgbmVpZ2hfbm9kZSAqcm91dGVyOworCWludCBkb3duLCB1cCwgcmV0ID0gLTE7CiAKIAlnd19iYW5kd2lkdGhfdG9fa2JpdChnd19ub2RlLT5vcmlnX25vZGUtPmd3X2ZsYWdzLCAmZG93biwgJnVwKTsKIAotCXJjdV9yZWFkX2xvY2soKTsKLQljdXJyX2d3ID0gcmN1X2RlcmVmZXJlbmNlKGJhdF9wcml2LT5jdXJyX2d3KTsKKwlyb3V0ZXIgPSBvcmlnX25vZGVfZ2V0X3JvdXRlcihnd19ub2RlLT5vcmlnX25vZGUpOworCWlmICghcm91dGVyKQorCQlnb3RvIG91dDsKKworCWN1cnJfZ3cgPSBnd19nZXRfc2VsZWN0ZWRfZ3dfbm9kZShiYXRfcHJpdik7CiAKIAlyZXQgPSBzZXFfcHJpbnRmKHNlcSwgIiVzICVwTSAoJTNpKSAlcE0gWyUxMHNdOiAlM2kgLSAlaSVzLyVpJXNcbiIsCi0JCSAgICAgICAoY3Vycl9ndyA9PSBnd19ub2RlID8gIj0+IiA6ICIgICIpLAotCQkgICAgICAgZ3dfbm9kZS0+b3JpZ19ub2RlLT5vcmlnLAotCQkgICAgICAgZ3dfbm9kZS0+b3JpZ19ub2RlLT5yb3V0ZXItPnRxX2F2ZywKLQkJICAgICAgIGd3X25vZGUtPm9yaWdfbm9kZS0+cm91dGVyLT5hZGRyLAotCQkgICAgICAgZ3dfbm9kZS0+b3JpZ19ub2RlLT5yb3V0ZXItPmlmX2luY29taW5nLT5uZXRfZGV2LT5uYW1lLAotCQkgICAgICAgZ3dfbm9kZS0+b3JpZ19ub2RlLT5nd19mbGFncywKLQkJICAgICAgIChkb3duID4gMjA0OCA/IGRvd24gLyAxMDI0IDogZG93biksCi0JCSAgICAgICAoZG93biA+IDIwNDggPyAiTUJpdCIgOiAiS0JpdCIpLAotCQkgICAgICAgKHVwID4gMjA0OCA/IHVwIC8gMTAyNCA6IHVwKSwKLQkJICAgICAgICh1cCA+IDIwNDggPyAiTUJpdCIgOiAiS0JpdCIpKTsKKwkJCSAoY3Vycl9ndyA9PSBnd19ub2RlID8gIj0+IiA6ICIgICIpLAorCQkJIGd3X25vZGUtPm9yaWdfbm9kZS0+b3JpZywKKwkJCSByb3V0ZXItPnRxX2F2Zywgcm91dGVyLT5hZGRyLAorCQkJIHJvdXRlci0+aWZfaW5jb21pbmctPm5ldF9kZXYtPm5hbWUsCisJCQkgZ3dfbm9kZS0+b3JpZ19ub2RlLT5nd19mbGFncywKKwkJCSAoZG93biA+IDIwNDggPyBkb3duIC8gMTAyNCA6IGRvd24pLAorCQkJIChkb3duID4gMjA0OCA/ICJNQml0IiA6ICJLQml0IiksCisJCQkgKHVwID4gMjA0OCA/IHVwIC8gMTAyNCA6IHVwKSwKKwkJCSAodXAgPiAyMDQ4ID8gIk1CaXQiIDogIktCaXQiKSk7CiAKLQlyY3VfcmVhZF91bmxvY2soKTsKKwluZWlnaF9ub2RlX2ZyZWVfcmVmKHJvdXRlcik7CisJaWYgKGN1cnJfZ3cpCisJCWd3X25vZGVfZnJlZV9yZWYoY3Vycl9ndyk7CitvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzkyLDQwICs0MzEsNDIgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKXNlcS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CisJc3RydWN0IGhhcmRfaWZhY2UgKnByaW1hcnlfaWY7CiAJc3RydWN0IGd3X25vZGUgKmd3X25vZGU7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0JaW50IGd3X2NvdW50ID0gMDsKKwlpbnQgZ3dfY291bnQgPSAwLCByZXQgPSAwOwogCi0JaWYgKCFiYXRfcHJpdi0+cHJpbWFyeV9pZikgewotCi0JCXJldHVybiBzZXFfcHJpbnRmKHNlcSwgIkJBVE1BTiBtZXNoICVzIGRpc2FibGVkIC0gcGxlYXNlICIKLQkJCQkgICJzcGVjaWZ5IGludGVyZmFjZXMgdG8gZW5hYmxlIGl0XG4iLAotCQkJCSAgbmV0X2Rldi0+bmFtZSk7CisJcHJpbWFyeV9pZiA9IHByaW1hcnlfaWZfZ2V0X3NlbGVjdGVkKGJhdF9wcml2KTsKKwlpZiAoIXByaW1hcnlfaWYpIHsKKwkJcmV0ID0gc2VxX3ByaW50ZihzZXEsICJCQVRNQU4gbWVzaCAlcyBkaXNhYmxlZCAtIHBsZWFzZSAiCisJCQkJICJzcGVjaWZ5IGludGVyZmFjZXMgdG8gZW5hYmxlIGl0XG4iLAorCQkJCSBuZXRfZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGJhdF9wcml2LT5wcmltYXJ5X2lmLT5pZl9zdGF0dXMgIT0gSUZfQUNUSVZFKSB7Ci0KLQkJcmV0dXJuIHNlcV9wcmludGYoc2VxLCAiQkFUTUFOIG1lc2ggJXMgZGlzYWJsZWQgLSAiCi0JCQkJICAgICAgICJwcmltYXJ5IGludGVyZmFjZSBub3QgYWN0aXZlXG4iLAotCQkJCSAgICAgICBuZXRfZGV2LT5uYW1lKTsKKwlpZiAocHJpbWFyeV9pZi0+aWZfc3RhdHVzICE9IElGX0FDVElWRSkgeworCQlyZXQgPSBzZXFfcHJpbnRmKHNlcSwgIkJBVE1BTiBtZXNoICVzIGRpc2FibGVkIC0gIgorCQkJCSAicHJpbWFyeSBpbnRlcmZhY2Ugbm90IGFjdGl2ZVxuIiwKKwkJCQkgbmV0X2Rldi0+bmFtZSk7CisJCWdvdG8gb3V0OwogCX0KIAogCXNlcV9wcmludGYoc2VxLCAiICAgICAgJS0xMnMgKCVzLyVpKSAlMTdzIFslMTBzXTogZ3dfY2xhc3MgLi4uICIKIAkJICAgIltCLkEuVC5NLkEuTi4gYWR2ICVzJXMsIE1haW5JRi9NQUM6ICVzLyVwTSAoJXMpXVxuIiwKIAkJICAgIkdhdGV3YXkiLCAiIyIsIFRRX01BWF9WQUxVRSwgIk5leHRob3AiLAogCQkgICAib3V0Z29pbmdJRiIsIFNPVVJDRV9WRVJTSU9OLCBSRVZJU0lPTl9WRVJTSU9OX1NUUiwKLQkJICAgYmF0X3ByaXYtPnByaW1hcnlfaWYtPm5ldF9kZXYtPm5hbWUsCi0JCSAgIGJhdF9wcml2LT5wcmltYXJ5X2lmLT5uZXRfZGV2LT5kZXZfYWRkciwgbmV0X2Rldi0+bmFtZSk7CisJCSAgIHByaW1hcnlfaWYtPm5ldF9kZXYtPm5hbWUsCisJCSAgIHByaW1hcnlfaWYtPm5ldF9kZXYtPmRldl9hZGRyLCBuZXRfZGV2LT5uYW1lKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZ3dfbm9kZSwgbm9kZSwgJmJhdF9wcml2LT5nd19saXN0LCBsaXN0KSB7CiAJCWlmIChnd19ub2RlLT5kZWxldGVkKQogCQkJY29udGludWU7CiAKLQkJaWYgKCFnd19ub2RlLT5vcmlnX25vZGUtPnJvdXRlcikKKwkJLyogZmFpbHMgaWYgb3JpZ19ub2RlIGhhcyBubyByb3V0ZXIgKi8KKwkJaWYgKF93cml0ZV9idWZmZXJfdGV4dChiYXRfcHJpdiwgc2VxLCBnd19ub2RlKSA8IDApCiAJCQljb250aW51ZTsKIAotCQlfd3JpdGVfYnVmZmVyX3RleHQoYmF0X3ByaXYsIHNlcSwgZ3dfbm9kZSk7CiAJCWd3X2NvdW50Kys7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwpAQCAtNDMzLDcgKzQ3NCwxMCBAQAogCWlmIChnd19jb3VudCA9PSAwKQogCQlzZXFfcHJpbnRmKHNlcSwgIk5vIGdhdGV3YXlzIGluIHJhbmdlIC4uLlxuIik7CiAKLQlyZXR1cm4gMDsKK291dDoKKwlpZiAocHJpbWFyeV9pZikKKwkJaGFyZGlmX2ZyZWVfcmVmKHByaW1hcnlfaWYpOworCXJldHVybiByZXQ7CiB9CiAKIGludCBnd19pc190YXJnZXQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTQ0Miw2ICs0ODYsNyBAQAogCXN0cnVjdCBpcGhkciAqaXBoZHI7CiAJc3RydWN0IGlwdjZoZHIgKmlwdjZoZHI7CiAJc3RydWN0IHVkcGhkciAqdWRwaGRyOworCXN0cnVjdCBnd19ub2RlICpjdXJyX2d3OwogCXVuc2lnbmVkIGludCBoZWFkZXJfbGVuID0gMDsKIAogCWlmIChhdG9taWNfcmVhZCgmYmF0X3ByaXYtPmd3X21vZGUpID09IEdXX01PREVfT0ZGKQpAQCAtNTA2LDEyICs1NTEsMTEgQEAKIAlpZiAoYXRvbWljX3JlYWQoJmJhdF9wcml2LT5nd19tb2RlKSA9PSBHV19NT0RFX1NFUlZFUikKIAkJcmV0dXJuIC0xOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCWlmICghcmN1X2RlcmVmZXJlbmNlKGJhdF9wcml2LT5jdXJyX2d3KSkgewotCQlyY3VfcmVhZF91bmxvY2soKTsKKwljdXJyX2d3ID0gZ3dfZ2V0X3NlbGVjdGVkX2d3X25vZGUoYmF0X3ByaXYpOworCWlmICghY3Vycl9ndykKIAkJcmV0dXJuIDA7Ci0JfQotCXJjdV9yZWFkX3VubG9jaygpOwogCisJaWYgKGN1cnJfZ3cpCisJCWd3X25vZGVfZnJlZV9yZWYoY3Vycl9ndyk7CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NsaWVudC5oIGIvbmV0L2JhdG1hbi1hZHYvZ2F0ZXdheV9jbGllbnQuaAppbmRleCAyYWE0MzkxLi4xY2U4YzYwIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NsaWVudC5oCisrKyBiL25ldC9iYXRtYW4tYWR2L2dhdGV3YXlfY2xpZW50LmgKQEAgLTI0LDcgKzI0LDcgQEAKIAogdm9pZCBnd19kZXNlbGVjdChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KTsKIHZvaWQgZ3dfZWxlY3Rpb24oc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdik7Ci12b2lkICpnd19nZXRfc2VsZWN0ZWQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdik7CitzdHJ1Y3Qgb3JpZ19ub2RlICpnd19nZXRfc2VsZWN0ZWRfb3JpZyhzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KTsKIHZvaWQgZ3dfY2hlY2tfZWxlY3Rpb24oc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwgc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlKTsKIHZvaWQgZ3dfbm9kZV91cGRhdGUoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKIAkJICAgIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwgdWludDhfdCBuZXdfZ3dmbGFncyk7CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jIGIvbmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYwppbmRleCBiMzA1OGU0Li5kZmJmY2NjIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jCisrKyBiL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmMKQEAgLTMxLDkgKzMxLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogCi0vKiBwcm90ZWN0IHVwZGF0ZSBjcml0aWNhbCBzaWRlIG9mIGhhcmRpZl9saXN0IC0gYnV0IG5vdCB0aGUgY29udGVudCAqLwotc3RhdGljIERFRklORV9TUElOTE9DSyhoYXJkaWZfbGlzdF9sb2NrKTsKLQogCiBzdGF0aWMgaW50IGJhdG1hbl9za2JfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTExMCw0NyArMTA3LDU3IEBACiAJcmV0dXJuIGhhcmRfaWZhY2U7CiB9CiAKLXN0YXRpYyB2b2lkIHVwZGF0ZV9wcmltYXJ5X2FkZHIoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKK3N0YXRpYyB2b2lkIHByaW1hcnlfaWZfdXBkYXRlX2FkZHIoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKIHsKIAlzdHJ1Y3QgdmlzX3BhY2tldCAqdmlzX3BhY2tldDsKKwlzdHJ1Y3QgaGFyZF9pZmFjZSAqcHJpbWFyeV9pZjsKKworCXByaW1hcnlfaWYgPSBwcmltYXJ5X2lmX2dldF9zZWxlY3RlZChiYXRfcHJpdik7CisJaWYgKCFwcmltYXJ5X2lmKQorCQlnb3RvIG91dDsKIAogCXZpc19wYWNrZXQgPSAoc3RydWN0IHZpc19wYWNrZXQgKikKIAkJCQliYXRfcHJpdi0+bXlfdmlzX2luZm8tPnNrYl9wYWNrZXQtPmRhdGE7Ci0JbWVtY3B5KHZpc19wYWNrZXQtPnZpc19vcmlnLAotCSAgICAgICBiYXRfcHJpdi0+cHJpbWFyeV9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkodmlzX3BhY2tldC0+dmlzX29yaWcsIHByaW1hcnlfaWYtPm5ldF9kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CiAJbWVtY3B5KHZpc19wYWNrZXQtPnNlbmRlcl9vcmlnLAotCSAgICAgICBiYXRfcHJpdi0+cHJpbWFyeV9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwkgICAgICAgcHJpbWFyeV9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKworb3V0OgorCWlmIChwcmltYXJ5X2lmKQorCQloYXJkaWZfZnJlZV9yZWYocHJpbWFyeV9pZik7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9wcmltYXJ5X2lmKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCi0JCQkgICBzdHJ1Y3QgaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSkKK3N0YXRpYyB2b2lkIHByaW1hcnlfaWZfc2VsZWN0KHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCisJCQkgICAgICBzdHJ1Y3QgaGFyZF9pZmFjZSAqbmV3X2hhcmRfaWZhY2UpCiB7CisJc3RydWN0IGhhcmRfaWZhY2UgKmN1cnJfaGFyZF9pZmFjZTsKIAlzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldDsKLQlzdHJ1Y3QgaGFyZF9pZmFjZSAqb2xkX2lmOwogCi0JaWYgKGhhcmRfaWZhY2UgJiYgIWF0b21pY19pbmNfbm90X3plcm8oJmhhcmRfaWZhY2UtPnJlZmNvdW50KSkKLQkJaGFyZF9pZmFjZSA9IE5VTEw7CisJQVNTRVJUX1JUTkwoKTsKIAotCW9sZF9pZiA9IGJhdF9wcml2LT5wcmltYXJ5X2lmOwotCWJhdF9wcml2LT5wcmltYXJ5X2lmID0gaGFyZF9pZmFjZTsKKwlpZiAobmV3X2hhcmRfaWZhY2UgJiYgIWF0b21pY19pbmNfbm90X3plcm8oJm5ld19oYXJkX2lmYWNlLT5yZWZjb3VudCkpCisJCW5ld19oYXJkX2lmYWNlID0gTlVMTDsKIAotCWlmIChvbGRfaWYpCi0JCWhhcmRpZl9mcmVlX3JlZihvbGRfaWYpOworCWN1cnJfaGFyZF9pZmFjZSA9IGJhdF9wcml2LT5wcmltYXJ5X2lmOworCXJjdV9hc3NpZ25fcG9pbnRlcihiYXRfcHJpdi0+cHJpbWFyeV9pZiwgbmV3X2hhcmRfaWZhY2UpOwogCi0JaWYgKCFiYXRfcHJpdi0+cHJpbWFyeV9pZikKKwlpZiAoY3Vycl9oYXJkX2lmYWNlKQorCQloYXJkaWZfZnJlZV9yZWYoY3Vycl9oYXJkX2lmYWNlKTsKKworCWlmICghbmV3X2hhcmRfaWZhY2UpCiAJCXJldHVybjsKIAotCWJhdG1hbl9wYWNrZXQgPSAoc3RydWN0IGJhdG1hbl9wYWNrZXQgKikoaGFyZF9pZmFjZS0+cGFja2V0X2J1ZmYpOworCWJhdG1hbl9wYWNrZXQgPSAoc3RydWN0IGJhdG1hbl9wYWNrZXQgKikobmV3X2hhcmRfaWZhY2UtPnBhY2tldF9idWZmKTsKIAliYXRtYW5fcGFja2V0LT5mbGFncyA9IFBSSU1BUklFU19GSVJTVF9IT1A7CiAJYmF0bWFuX3BhY2tldC0+dHRsID0gVFRMOwogCi0JdXBkYXRlX3ByaW1hcnlfYWRkcihiYXRfcHJpdik7CisJcHJpbWFyeV9pZl91cGRhdGVfYWRkcihiYXRfcHJpdik7CiAKIAkvKioqCi0JICogaGFja3kgdHJpY2sgdG8gbWFrZSBzdXJlIHRoYXQgd2Ugc2VuZCB0aGUgSE5BIGluZm9ybWF0aW9uIHZpYQorCSAqIGhhY2t5IHRyaWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIHNlbmQgdGhlIFRUIGluZm9ybWF0aW9uIHZpYQogCSAqIG91ciBuZXcgcHJpbWFyeSBpbnRlcmZhY2UKIAkgKi8KLQlhdG9taWNfc2V0KCZiYXRfcHJpdi0+aG5hX2xvY2FsX2NoYW5nZWQsIDEpOworCWF0b21pY19zZXQoJmJhdF9wcml2LT50dF9sb2NhbF9jaGFuZ2VkLCAxKTsKIH0KIAogc3RhdGljIGJvb2wgaGFyZGlmX2lzX2lmYWNlX3VwKHN0cnVjdCBoYXJkX2lmYWNlICpoYXJkX2lmYWNlKQpAQCAtMjM2LDkgKzI0MywxMCBAQAogc3RhdGljIHZvaWQgaGFyZGlmX2FjdGl2YXRlX2ludGVyZmFjZShzdHJ1Y3QgaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSkKIHsKIAlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2OworCXN0cnVjdCBoYXJkX2lmYWNlICpwcmltYXJ5X2lmID0gTlVMTDsKIAogCWlmIChoYXJkX2lmYWNlLT5pZl9zdGF0dXMgIT0gSUZfSU5BQ1RJVkUpCi0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAKIAliYXRfcHJpdiA9IG5ldGRldl9wcml2KGhhcmRfaWZhY2UtPnNvZnRfaWZhY2UpOwogCkBAIC0yNDksMTQgKzI1NywxOCBAQAogCSAqIHRoZSBmaXJzdCBhY3RpdmUgaW50ZXJmYWNlIGJlY29tZXMgb3VyIHByaW1hcnkgaW50ZXJmYWNlIG9yCiAJICogdGhlIG5leHQgYWN0aXZlIGludGVyZmFjZSBhZnRlciB0aGUgb2xkIHByaW1heSBpbnRlcmZhY2Ugd2FzIHJlbW92ZWQKIAkgKi8KLQlpZiAoIWJhdF9wcml2LT5wcmltYXJ5X2lmKQotCQlzZXRfcHJpbWFyeV9pZihiYXRfcHJpdiwgaGFyZF9pZmFjZSk7CisJcHJpbWFyeV9pZiA9IHByaW1hcnlfaWZfZ2V0X3NlbGVjdGVkKGJhdF9wcml2KTsKKwlpZiAoIXByaW1hcnlfaWYpCisJCXByaW1hcnlfaWZfc2VsZWN0KGJhdF9wcml2LCBoYXJkX2lmYWNlKTsKIAogCWJhdF9pbmZvKGhhcmRfaWZhY2UtPnNvZnRfaWZhY2UsICJJbnRlcmZhY2UgYWN0aXZhdGVkOiAlc1xuIiwKIAkJIGhhcmRfaWZhY2UtPm5ldF9kZXYtPm5hbWUpOwogCiAJdXBkYXRlX21pbl9tdHUoaGFyZF9pZmFjZS0+c29mdF9pZmFjZSk7Ci0JcmV0dXJuOworCitvdXQ6CisJaWYgKHByaW1hcnlfaWYpCisJCWhhcmRpZl9mcmVlX3JlZihwcmltYXJ5X2lmKTsKIH0KIAogc3RhdGljIHZvaWQgaGFyZGlmX2RlYWN0aXZhdGVfaW50ZXJmYWNlKHN0cnVjdCBoYXJkX2lmYWNlICpoYXJkX2lmYWNlKQpAQCAtMzI3LDcgKzMzOSw3IEBACiAJYmF0bWFuX3BhY2tldC0+ZmxhZ3MgPSAwOwogCWJhdG1hbl9wYWNrZXQtPnR0bCA9IDI7CiAJYmF0bWFuX3BhY2tldC0+dHEgPSBUUV9NQVhfVkFMVUU7Ci0JYmF0bWFuX3BhY2tldC0+bnVtX2huYSA9IDA7CisJYmF0bWFuX3BhY2tldC0+bnVtX3R0ID0gMDsKIAogCWhhcmRfaWZhY2UtPmlmX251bSA9IGJhdF9wcml2LT5udW1faWZhY2VzOwogCWJhdF9wcml2LT5udW1faWZhY2VzKys7CkBAIC0zODYsMTIgKzM5OCwxMyBAQAogdm9pZCBoYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGhhcmRfaWZhY2UgKmhhcmRfaWZhY2UpCiB7CiAJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGhhcmRfaWZhY2UtPnNvZnRfaWZhY2UpOworCXN0cnVjdCBoYXJkX2lmYWNlICpwcmltYXJ5X2lmID0gTlVMTDsKIAogCWlmIChoYXJkX2lmYWNlLT5pZl9zdGF0dXMgPT0gSUZfQUNUSVZFKQogCQloYXJkaWZfZGVhY3RpdmF0ZV9pbnRlcmZhY2UoaGFyZF9pZmFjZSk7CiAKIAlpZiAoaGFyZF9pZmFjZS0+aWZfc3RhdHVzICE9IElGX0lOQUNUSVZFKQotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCiAJYmF0X2luZm8oaGFyZF9pZmFjZS0+c29mdF9pZmFjZSwgIlJlbW92aW5nIGludGVyZmFjZTogJXNcbiIsCiAJCSBoYXJkX2lmYWNlLT5uZXRfZGV2LT5uYW1lKTsKQEAgLTQwMCwxMSArNDEzLDEyIEBACiAJYmF0X3ByaXYtPm51bV9pZmFjZXMtLTsKIAlvcmlnX2hhc2hfZGVsX2lmKGhhcmRfaWZhY2UsIGJhdF9wcml2LT5udW1faWZhY2VzKTsKIAotCWlmIChoYXJkX2lmYWNlID09IGJhdF9wcml2LT5wcmltYXJ5X2lmKSB7CisJcHJpbWFyeV9pZiA9IHByaW1hcnlfaWZfZ2V0X3NlbGVjdGVkKGJhdF9wcml2KTsKKwlpZiAoaGFyZF9pZmFjZSA9PSBwcmltYXJ5X2lmKSB7CiAJCXN0cnVjdCBoYXJkX2lmYWNlICpuZXdfaWY7CiAKIAkJbmV3X2lmID0gaGFyZGlmX2dldF9hY3RpdmUoaGFyZF9pZmFjZS0+c29mdF9pZmFjZSk7Ci0JCXNldF9wcmltYXJ5X2lmKGJhdF9wcml2LCBuZXdfaWYpOworCQlwcmltYXJ5X2lmX3NlbGVjdChiYXRfcHJpdiwgbmV3X2lmKTsKIAogCQlpZiAobmV3X2lmKQogCQkJaGFyZGlmX2ZyZWVfcmVmKG5ld19pZik7CkBAIC00MjUsNiArNDM5LDEwIEBACiAKIAloYXJkX2lmYWNlLT5zb2Z0X2lmYWNlID0gTlVMTDsKIAloYXJkaWZfZnJlZV9yZWYoaGFyZF9pZmFjZSk7CisKK291dDoKKwlpZiAocHJpbWFyeV9pZikKKwkJaGFyZGlmX2ZyZWVfcmVmKHByaW1hcnlfaWYpOwogfQogCiBzdGF0aWMgc3RydWN0IGhhcmRfaWZhY2UgKmhhcmRpZl9hZGRfaW50ZXJmYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KQpAQCAtNDMyLDYgKzQ1MCw4IEBACiAJc3RydWN0IGhhcmRfaWZhY2UgKmhhcmRfaWZhY2U7CiAJaW50IHJldDsKIAorCUFTU0VSVF9SVE5MKCk7CisKIAlyZXQgPSBpc192YWxpZF9pZmFjZShuZXRfZGV2KTsKIAlpZiAocmV0ICE9IDEpCiAJCWdvdG8gb3V0OwpAQCAtNDU4LDEwICs0NzgsNyBAQAogCWF0b21pY19zZXQoJmhhcmRfaWZhY2UtPnJlZmNvdW50LCAyKTsKIAogCWNoZWNrX2tub3duX21hY19hZGRyKGhhcmRfaWZhY2UtPm5ldF9kZXYpOwotCi0Jc3Bpbl9sb2NrKCZoYXJkaWZfbGlzdF9sb2NrKTsKIAlsaXN0X2FkZF90YWlsX3JjdSgmaGFyZF9pZmFjZS0+bGlzdCwgJmhhcmRpZl9saXN0KTsKLQlzcGluX3VubG9jaygmaGFyZGlmX2xpc3RfbG9jayk7CiAKIAlyZXR1cm4gaGFyZF9pZmFjZTsKIApAQCAtNDc1LDYgKzQ5Miw4IEBACiAKIHN0YXRpYyB2b2lkIGhhcmRpZl9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBoYXJkX2lmYWNlICpoYXJkX2lmYWNlKQogeworCUFTU0VSVF9SVE5MKCk7CisKIAkvKiBmaXJzdCBkZWFjdGl2YXRlIGludGVyZmFjZSAqLwogCWlmIChoYXJkX2lmYWNlLT5pZl9zdGF0dXMgIT0gSUZfTk9UX0lOX1VTRSkKIAkJaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlKGhhcmRfaWZhY2UpOwpAQCAtNDkwLDIwICs1MDksMTEgQEAKIHZvaWQgaGFyZGlmX3JlbW92ZV9pbnRlcmZhY2VzKHZvaWQpCiB7CiAJc3RydWN0IGhhcmRfaWZhY2UgKmhhcmRfaWZhY2UsICpoYXJkX2lmYWNlX3RtcDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGlmX3F1ZXVlOwogCi0JSU5JVF9MSVNUX0hFQUQoJmlmX3F1ZXVlKTsKLQotCXNwaW5fbG9jaygmaGFyZGlmX2xpc3RfbG9jayk7CisJcnRubF9sb2NrKCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhhcmRfaWZhY2UsIGhhcmRfaWZhY2VfdG1wLAogCQkJCSAmaGFyZGlmX2xpc3QsIGxpc3QpIHsKIAkJbGlzdF9kZWxfcmN1KCZoYXJkX2lmYWNlLT5saXN0KTsKLQkJbGlzdF9hZGRfdGFpbCgmaGFyZF9pZmFjZS0+bGlzdCwgJmlmX3F1ZXVlKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmhhcmRpZl9saXN0X2xvY2spOwotCi0JcnRubF9sb2NrKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhhcmRfaWZhY2UsIGhhcmRfaWZhY2VfdG1wLCAmaWZfcXVldWUsIGxpc3QpIHsKIAkJaGFyZGlmX3JlbW92ZV9pbnRlcmZhY2UoaGFyZF9pZmFjZSk7CiAJfQogCXJ0bmxfdW5sb2NrKCk7CkBAIC01MTQsNiArNTI0LDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKXB0cjsKIAlzdHJ1Y3QgaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSA9IGhhcmRpZl9nZXRfYnlfbmV0ZGV2KG5ldF9kZXYpOworCXN0cnVjdCBoYXJkX2lmYWNlICpwcmltYXJ5X2lmID0gTlVMTDsKIAlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2OwogCiAJaWYgKCFoYXJkX2lmYWNlICYmIGV2ZW50ID09IE5FVERFVl9SRUdJU1RFUikKQEAgLTUzMSw5ICs1NDIsNyBAQAogCQloYXJkaWZfZGVhY3RpdmF0ZV9pbnRlcmZhY2UoaGFyZF9pZmFjZSk7CiAJCWJyZWFrOwogCWNhc2UgTkVUREVWX1VOUkVHSVNURVI6Ci0JCXNwaW5fbG9jaygmaGFyZGlmX2xpc3RfbG9jayk7CiAJCWxpc3RfZGVsX3JjdSgmaGFyZF9pZmFjZS0+bGlzdCk7Ci0JCXNwaW5fdW5sb2NrKCZoYXJkaWZfbGlzdF9sb2NrKTsKIAogCQloYXJkaWZfcmVtb3ZlX2ludGVyZmFjZShoYXJkX2lmYWNlKTsKIAkJYnJlYWs7CkBAIC01NDksOCArNTU4LDEyIEBACiAJCXVwZGF0ZV9tYWNfYWRkcmVzc2VzKGhhcmRfaWZhY2UpOwogCiAJCWJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoaGFyZF9pZmFjZS0+c29mdF9pZmFjZSk7Ci0JCWlmIChoYXJkX2lmYWNlID09IGJhdF9wcml2LT5wcmltYXJ5X2lmKQotCQkJdXBkYXRlX3ByaW1hcnlfYWRkcihiYXRfcHJpdik7CisJCXByaW1hcnlfaWYgPSBwcmltYXJ5X2lmX2dldF9zZWxlY3RlZChiYXRfcHJpdik7CisJCWlmICghcHJpbWFyeV9pZikKKwkJCWdvdG8gaGFyZGlmX3B1dDsKKworCQlpZiAoaGFyZF9pZmFjZSA9PSBwcmltYXJ5X2lmKQorCQkJcHJpbWFyeV9pZl91cGRhdGVfYWRkcihiYXRfcHJpdik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtNTU5LDYgKzU3Miw4IEBACiBoYXJkaWZfcHV0OgogCWhhcmRpZl9mcmVlX3JlZihoYXJkX2lmYWNlKTsKIG91dDoKKwlpZiAocHJpbWFyeV9pZikKKwkJaGFyZGlmX2ZyZWVfcmVmKHByaW1hcnlfaWYpOwogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuaCBiL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmgKaW5kZXggYTlkZGYzNi4uNjQyNjU5OSAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuaAorKysgYi9uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oCkBAIC00NSw0ICs0NSwyMiBAQAogCQljYWxsX3JjdSgmaGFyZF9pZmFjZS0+cmN1LCBoYXJkaWZfZnJlZV9yY3UpOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBoYXJkX2lmYWNlICpwcmltYXJ5X2lmX2dldF9zZWxlY3RlZCgKKwkJCQkJCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCit7CisJc3RydWN0IGhhcmRfaWZhY2UgKmhhcmRfaWZhY2U7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJaGFyZF9pZmFjZSA9IHJjdV9kZXJlZmVyZW5jZShiYXRfcHJpdi0+cHJpbWFyeV9pZik7CisJaWYgKCFoYXJkX2lmYWNlKQorCQlnb3RvIG91dDsKKworCWlmICghYXRvbWljX2luY19ub3RfemVybygmaGFyZF9pZmFjZS0+cmVmY291bnQpKQorCQloYXJkX2lmYWNlID0gTlVMTDsKKworb3V0OgorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiBoYXJkX2lmYWNlOworfQorCiAjZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX0hBUkRfSU5URVJGQUNFX0hfICovCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9pY21wX3NvY2tldC5jIGIvbmV0L2JhdG1hbi1hZHYvaWNtcF9zb2NrZXQuYwppbmRleCAzNGNlNTZjLi5mYTIyYmEyIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9pY21wX3NvY2tldC5jCisrKyBiL25ldC9iYXRtYW4tYWR2L2ljbXBfc29ja2V0LmMKQEAgLTE1Myw2ICsxNTMsNyBAQAogewogCXN0cnVjdCBzb2NrZXRfY2xpZW50ICpzb2NrZXRfY2xpZW50ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBzb2NrZXRfY2xpZW50LT5iYXRfcHJpdjsKKwlzdHJ1Y3QgaGFyZF9pZmFjZSAqcHJpbWFyeV9pZiA9IE5VTEw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgaWNtcF9wYWNrZXRfcnIgKmljbXBfcGFja2V0OwogCkBAIC0xNjcsMTUgKzE2OCwyMSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoIWJhdF9wcml2LT5wcmltYXJ5X2lmKQotCQlyZXR1cm4gLUVGQVVMVDsKKwlwcmltYXJ5X2lmID0gcHJpbWFyeV9pZl9nZXRfc2VsZWN0ZWQoYmF0X3ByaXYpOworCisJaWYgKCFwcmltYXJ5X2lmKSB7CisJCWxlbiA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KIAogCWlmIChsZW4gPj0gc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldF9ycikpCiAJCXBhY2tldF9sZW4gPSBzaXplb2Yoc3RydWN0IGljbXBfcGFja2V0X3JyKTsKIAogCXNrYiA9IGRldl9hbGxvY19za2IocGFja2V0X2xlbiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7Ci0JaWYgKCFza2IpCi0JCXJldHVybiAtRU5PTUVNOworCWlmICghc2tiKSB7CisJCWxlbiA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KIAogCXNrYl9yZXNlcnZlKHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTsKIAlpY21wX3BhY2tldCA9IChzdHJ1Y3QgaWNtcF9wYWNrZXRfcnIgKilza2JfcHV0KHNrYiwgcGFja2V0X2xlbik7CkBAIC0yMTgsMjMgKzIyNSwxMyBAQAogCWlmIChhdG9taWNfcmVhZCgmYmF0X3ByaXYtPm1lc2hfc3RhdGUpICE9IE1FU0hfQUNUSVZFKQogCQlnb3RvIGRzdF91bnJlYWNoOwogCi0JcmN1X3JlYWRfbG9jaygpOwogCW9yaWdfbm9kZSA9IG9yaWdfaGFzaF9maW5kKGJhdF9wcml2LCBpY21wX3BhY2tldC0+ZHN0KTsKLQogCWlmICghb3JpZ19ub2RlKQotCQlnb3RvIHVubG9jazsKKwkJZ290byBkc3RfdW5yZWFjaDsKIAotCW5laWdoX25vZGUgPSBvcmlnX25vZGUtPnJvdXRlcjsKLQorCW5laWdoX25vZGUgPSBvcmlnX25vZGVfZ2V0X3JvdXRlcihvcmlnX25vZGUpOwogCWlmICghbmVpZ2hfbm9kZSkKLQkJZ290byB1bmxvY2s7Ci0KLQlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oJm5laWdoX25vZGUtPnJlZmNvdW50KSkgewotCQluZWlnaF9ub2RlID0gTlVMTDsKLQkJZ290byB1bmxvY2s7Ci0JfQotCi0JcmN1X3JlYWRfdW5sb2NrKCk7CisJCWdvdG8gZHN0X3VucmVhY2g7CiAKIAlpZiAoIW5laWdoX25vZGUtPmlmX2luY29taW5nKQogCQlnb3RvIGRzdF91bnJlYWNoOwpAQCAtMjQzLDcgKzI0MCw3IEBACiAJCWdvdG8gZHN0X3VucmVhY2g7CiAKIAltZW1jcHkoaWNtcF9wYWNrZXQtPm9yaWcsCi0JICAgICAgIGJhdF9wcml2LT5wcmltYXJ5X2lmLT5uZXRfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCSAgICAgICBwcmltYXJ5X2lmLT5uZXRfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCiAJaWYgKHBhY2tldF9sZW4gPT0gc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldF9ycikpCiAJCW1lbWNweShpY21wX3BhY2tldC0+cnIsCkBAIC0yNTIsMTQgKzI0OSwxNCBAQAogCXNlbmRfc2tiX3BhY2tldChza2IsIG5laWdoX25vZGUtPmlmX2luY29taW5nLCBuZWlnaF9ub2RlLT5hZGRyKTsKIAlnb3RvIG91dDsKIAotdW5sb2NrOgotCXJjdV9yZWFkX3VubG9jaygpOwogZHN0X3VucmVhY2g6CiAJaWNtcF9wYWNrZXQtPm1zZ190eXBlID0gREVTVElOQVRJT05fVU5SRUFDSEFCTEU7CiAJYmF0X3NvY2tldF9hZGRfcGFja2V0KHNvY2tldF9jbGllbnQsIGljbXBfcGFja2V0LCBwYWNrZXRfbGVuKTsKIGZyZWVfc2tiOgogCWtmcmVlX3NrYihza2IpOwogb3V0OgorCWlmIChwcmltYXJ5X2lmKQorCQloYXJkaWZfZnJlZV9yZWYocHJpbWFyeV9pZik7CiAJaWYgKG5laWdoX25vZGUpCiAJCW5laWdoX25vZGVfZnJlZV9yZWYobmVpZ2hfbm9kZSk7CiAJaWYgKG9yaWdfbm9kZSkKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L21haW4uYyBiL25ldC9iYXRtYW4tYWR2L21haW4uYwppbmRleCA3MDliMzNiLi4wYTdjZWUwIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9tYWluLmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvbWFpbi5jCkBAIC0zMyw2ICszMyw5IEBACiAjaW5jbHVkZSAidmlzLmgiCiAjaW5jbHVkZSAiaGFzaC5oIgogCisKKy8qIExpc3QgbWFuaXB1bGF0aW9ucyBvbiBoYXJkaWZfbGlzdCBoYXZlIHRvIGJlIHJ0bmxfbG9jaygpJ2VkLAorICogbGlzdCB0cmF2ZXJzYWxzIGp1c3QgcmN1LWxvY2tlZCAqLwogc3RydWN0IGxpc3RfaGVhZCBoYXJkaWZfbGlzdDsKIAogdW5zaWduZWQgY2hhciBicm9hZGNhc3RfYWRkcltdID0gezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9OwpAQCAtODEsMjggKzg0LDI5IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmYmF0X3ByaXYtPmZvcndfYmF0X2xpc3RfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmJhdF9wcml2LT5mb3J3X2JjYXN0X2xpc3RfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmJhdF9wcml2LT5obmFfbGhhc2hfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmJhdF9wcml2LT5obmFfZ2hhc2hfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmJhdF9wcml2LT50dF9saGFzaF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYmF0X3ByaXYtPnR0X2doYXNoX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZiYXRfcHJpdi0+Z3dfbGlzdF9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmYmF0X3ByaXYtPnZpc19oYXNoX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZiYXRfcHJpdi0+dmlzX2xpc3RfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmJhdF9wcml2LT5zb2Z0aWZfbmVpZ2hfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmJhdF9wcml2LT5zb2Z0aWZfbmVpZ2hfdmlkX2xvY2spOwogCiAJSU5JVF9ITElTVF9IRUFEKCZiYXRfcHJpdi0+Zm9yd19iYXRfbGlzdCk7CiAJSU5JVF9ITElTVF9IRUFEKCZiYXRfcHJpdi0+Zm9yd19iY2FzdF9saXN0KTsKIAlJTklUX0hMSVNUX0hFQUQoJmJhdF9wcml2LT5nd19saXN0KTsKLQlJTklUX0hMSVNUX0hFQUQoJmJhdF9wcml2LT5zb2Z0aWZfbmVpZ2hfbGlzdCk7CisJSU5JVF9ITElTVF9IRUFEKCZiYXRfcHJpdi0+c29mdGlmX25laWdoX3ZpZHMpOwogCiAJaWYgKG9yaWdpbmF0b3JfaW5pdChiYXRfcHJpdikgPCAxKQogCQlnb3RvIGVycjsKIAotCWlmIChobmFfbG9jYWxfaW5pdChiYXRfcHJpdikgPCAxKQorCWlmICh0dF9sb2NhbF9pbml0KGJhdF9wcml2KSA8IDEpCiAJCWdvdG8gZXJyOwogCi0JaWYgKGhuYV9nbG9iYWxfaW5pdChiYXRfcHJpdikgPCAxKQorCWlmICh0dF9nbG9iYWxfaW5pdChiYXRfcHJpdikgPCAxKQogCQlnb3RvIGVycjsKIAotCWhuYV9sb2NhbF9hZGQoc29mdF9pZmFjZSwgc29mdF9pZmFjZS0+ZGV2X2FkZHIpOworCXR0X2xvY2FsX2FkZChzb2Z0X2lmYWNlLCBzb2Z0X2lmYWNlLT5kZXZfYWRkcik7CiAKIAlpZiAodmlzX2luaXQoYmF0X3ByaXYpIDwgMSkKIAkJZ290byBlcnI7CkBAIC0xMzMsOCArMTM3LDggQEAKIAlnd19ub2RlX3B1cmdlKGJhdF9wcml2KTsKIAlvcmlnaW5hdG9yX2ZyZWUoYmF0X3ByaXYpOwogCi0JaG5hX2xvY2FsX2ZyZWUoYmF0X3ByaXYpOwotCWhuYV9nbG9iYWxfZnJlZShiYXRfcHJpdik7CisJdHRfbG9jYWxfZnJlZShiYXRfcHJpdik7CisJdHRfZ2xvYmFsX2ZyZWUoYmF0X3ByaXYpOwogCiAJc29mdGlmX25laWdoX3B1cmdlKGJhdF9wcml2KTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvbWFpbi5oIGIvbmV0L2JhdG1hbi1hZHYvbWFpbi5oCmluZGV4IGRjMjQ4NjkuLjE0OGI0OWUgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L21haW4uaAorKysgYi9uZXQvYmF0bWFuLWFkdi9tYWluLmgKQEAgLTM0LDE2ICszNCwxOCBAQAogCiAjZGVmaW5lIFRRX01BWF9WQUxVRSAyNTUKICNkZWZpbmUgSklUVEVSIDIwCi0jZGVmaW5lIFRUTCA1MAkJCSAgLyogVGltZSBUbyBMaXZlIG9mIGJyb2FkY2FzdCBtZXNzYWdlcyAqLwogCi0jZGVmaW5lIFBVUkdFX1RJTUVPVVQgMjAwCS8qIHB1cmdlIG9yaWdpbmF0b3JzIGFmdGVyIHRpbWUgaW4gc2Vjb25kcyBpZiBubwotCQkJCSAgICogdmFsaWQgcGFja2V0IGNvbWVzIGluIC0+IFRPRE86IGNoZWNrCi0JCQkJICAgKiBpbmZsdWVuY2Ugb24gVFFfTE9DQUxfV0lORE9XX1NJWkUgKi8KLSNkZWZpbmUgTE9DQUxfSE5BX1RJTUVPVVQgMzYwMCAvKiBpbiBzZWNvbmRzICovCisgLyogVGltZSBUbyBMaXZlIG9mIGJyb2FkY2FzdCBtZXNzYWdlcyAqLworI2RlZmluZSBUVEwgNTAKIAotI2RlZmluZSBUUV9MT0NBTF9XSU5ET1dfU0laRSA2NAkgIC8qIHNsaWRpbmcgcGFja2V0IHJhbmdlIG9mIHJlY2VpdmVkIG9yaWdpbmF0b3IKLQkJCQkgICAqIG1lc3NhZ2VzIGluIHNxdWVuY2UgbnVtYmVycyAoc2hvdWxkIGJlIGEKLQkJCQkgICAqIG11bHRpcGxlIG9mIG91ciB3b3JkIHNpemUpICovCisvKiBwdXJnZSBvcmlnaW5hdG9ycyBhZnRlciB0aW1lIGluIHNlY29uZHMgaWYgbm8gdmFsaWQgcGFja2V0IGNvbWVzIGluCisgKiAtPiBUT0RPOiBjaGVjayBpbmZsdWVuY2Ugb24gVFFfTE9DQUxfV0lORE9XX1NJWkUgKi8KKyNkZWZpbmUgUFVSR0VfVElNRU9VVCAyMDAKKyNkZWZpbmUgVFRfTE9DQUxfVElNRU9VVCAzNjAwIC8qIGluIHNlY29uZHMgKi8KKworLyogc2xpZGluZyBwYWNrZXQgcmFuZ2Ugb2YgcmVjZWl2ZWQgb3JpZ2luYXRvciBtZXNzYWdlcyBpbiBzcXVlbmNlIG51bWJlcnMKKyAqIChzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiBvdXIgd29yZCBzaXplKSAqLworI2RlZmluZSBUUV9MT0NBTF9XSU5ET1dfU0laRSA2NAogI2RlZmluZSBUUV9HTE9CQUxfV0lORE9XX1NJWkUgNQogI2RlZmluZSBUUV9MT0NBTF9CSURSRUNUX1NFTkRfTUlOSU1VTSAxCiAjZGVmaW5lIFRRX0xPQ0FMX0JJRFJFQ1RfUkVDVl9NSU5JTVVNIDEKQEAgLTU1LDIxICs1NywyMCBAQAogCiAjZGVmaW5lIFZJU19JTlRFUlZBTCA1MDAwCS8qIDUgc2Vjb25kcyAqLwogCi0vKiBob3cgbXVjaCB3b3JzZSBzZWNvbmRhcnkgaW50ZXJmYWNlcyBtYXkgYmUgdG8KLSAqIHRvIGJlIGNvbnNpZGVyZWQgYXMgYm9uZGluZyBjYW5kaWRhdGVzICovCi0KKy8qIGhvdyBtdWNoIHdvcnNlIHNlY29uZGFyeSBpbnRlcmZhY2VzIG1heSBiZSB0byBiZSBjb25zaWRlcmVkIGFzIGJvbmRpbmcKKyAqIGNhbmRpZGF0ZXMgKi8KICNkZWZpbmUgQk9ORElOR19UUV9USFJFU0hPTEQJNTAKIAotI2RlZmluZSBNQVhfQUdHUkVHQVRJT05fQllURVMgNTEyIC8qIHNob3VsZCBub3QgYmUgYmlnZ2VyIHRoYW4gNTEyIGJ5dGVzIG9yCi0JCQkJICAgKiBjaGFuZ2UgdGhlIHNpemUgb2YKLQkJCQkgICAqIGZvcndfcGFja2V0LT5kaXJlY3RfbGlua19mbGFncyAqLworLyogc2hvdWxkIG5vdCBiZSBiaWdnZXIgdGhhbiA1MTIgYnl0ZXMgb3IgY2hhbmdlIHRoZSBzaXplIG9mCisgKiBmb3J3X3BhY2tldC0+ZGlyZWN0X2xpbmtfZmxhZ3MgKi8KKyNkZWZpbmUgTUFYX0FHR1JFR0FUSU9OX0JZVEVTIDUxMgogI2RlZmluZSBNQVhfQUdHUkVHQVRJT05fTVMgMTAwCiAKICNkZWZpbmUgU09GVElGX05FSUdIX1RJTUVPVVQgMTgwMDAwIC8qIDMgbWludXRlcyAqLwogCisvKiBkb24ndCByZXNldCBhZ2FpbiB3aXRoaW4gMzAgc2Vjb25kcyAqLwogI2RlZmluZSBSRVNFVF9QUk9URUNUSU9OX01TIDMwMDAwCiAjZGVmaW5lIEVYUEVDVEVEX1NFUU5PX1JBTkdFCTY1NTM2Ci0vKiBkb24ndCByZXNldCBhZ2FpbiB3aXRoaW4gMzAgc2Vjb25kcyAqLwogCiAjZGVmaW5lIE1FU0hfSU5BQ1RJVkUgMAogI2RlZmluZSBNRVNIX0FDVElWRSAxCkBAIC04NCwxMiArODUsMTMgQEAKICNpZmRlZiBwcl9mbXQKICN1bmRlZiBwcl9mbXQKICNlbmRpZgotI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdCAvKiBBcHBlbmQgJ2JhdG1hbi1hZHY6ICcgYmVmb3JlCi0JCQkJCSAgICAgKiBrZXJuZWwgbWVzc2FnZXMgKi8KKy8qIEFwcGVuZCAnYmF0bWFuLWFkdjogJyBiZWZvcmUga2VybmVsIG1lc3NhZ2VzICovCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CiAKLSNkZWZpbmUgREJHX0JBVE1BTiAxCS8qIGFsbCBtZXNzYWdlcyByZWxhdGVkIHRvIHJvdXRpbmcgLyBmbG9vZGluZyAvCi0JCQkgKiBicm9hZGNhc3RpbmcgLyBldGMgKi8KLSNkZWZpbmUgREJHX1JPVVRFUyAyCS8qIHJvdXRlIG9yIGhuYSBhZGRlZCAvIGNoYW5nZWQgLyBkZWxldGVkICovCisvKiBhbGwgbWVzc2FnZXMgcmVsYXRlZCB0byByb3V0aW5nIC8gZmxvb2RpbmcgLyBicm9hZGNhc3RpbmcgLyBldGMgKi8KKyNkZWZpbmUgREJHX0JBVE1BTiAxCisvKiByb3V0ZSBvciB0dCBlbnRyeSBhZGRlZCAvIGNoYW5nZWQgLyBkZWxldGVkICovCisjZGVmaW5lIERCR19ST1VURVMgMgogI2RlZmluZSBEQkdfQUxMIDMKIAogCkBAIC0xNzUsNCArMTc3LDYgQEAKIAlyZXR1cm4gKG1lbWNtcChkYXRhMSwgZGF0YTIsIEVUSF9BTEVOKSA9PSAwID8gMSA6IDApOwogfQogCisjZGVmaW5lIGF0b21pY19kZWNfbm90X3plcm8odikJYXRvbWljX2FkZF91bmxlc3MoKHYpLCAtMSwgMCkKKwogI2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9NQUlOX0hfICovCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmMgYi9uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmMKaW5kZXggMGI5MTMzMC4uNDBhMzBiYiAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jCisrKyBiL25ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYwpAQCAtMTksOCArMTksNiBAQAogICoKICAqLwogCi0vKiBpbmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50ZXIgZm9yIHRoaXMgb3JpZ2luYXRvciAqLwotCiAjaW5jbHVkZSAibWFpbi5oIgogI2luY2x1ZGUgIm9yaWdpbmF0b3IuaCIKICNpbmNsdWRlICJoYXNoLmgiCkBAIC01NiwxOCArNTQsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgbmVpZ2hfbm9kZV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkKLXsKLQlzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZTsKLQotCW5laWdoX25vZGUgPSBjb250YWluZXJfb2YocmN1LCBzdHJ1Y3QgbmVpZ2hfbm9kZSwgcmN1KTsKLQlrZnJlZShuZWlnaF9ub2RlKTsKLX0KLQogdm9pZCBuZWlnaF9ub2RlX2ZyZWVfcmVmKHN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlKQogewogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZuZWlnaF9ub2RlLT5yZWZjb3VudCkpCi0JCWNhbGxfcmN1KCZuZWlnaF9ub2RlLT5yY3UsIG5laWdoX25vZGVfZnJlZV9yY3UpOworCQlrZnJlZV9yY3UobmVpZ2hfbm9kZSwgcmN1KTsKK30KKworLyogaW5jcmVhc2VzIHRoZSByZWZjb3VudGVyIG9mIGEgZm91bmQgcm91dGVyICovCitzdHJ1Y3QgbmVpZ2hfbm9kZSAqb3JpZ19ub2RlX2dldF9yb3V0ZXIoc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlKQoreworCXN0cnVjdCBuZWlnaF9ub2RlICpyb3V0ZXI7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJcm91dGVyID0gcmN1X2RlcmVmZXJlbmNlKG9yaWdfbm9kZS0+cm91dGVyKTsKKworCWlmIChyb3V0ZXIgJiYgIWF0b21pY19pbmNfbm90X3plcm8oJnJvdXRlci0+cmVmY291bnQpKQorCQlyb3V0ZXIgPSBOVUxMOworCisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIHJvdXRlcjsKIH0KIAogc3RydWN0IG5laWdoX25vZGUgKmNyZWF0ZV9uZWlnaGJvcihzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsCkBAIC04Nyw2ICs5Miw3IEBACiAKIAlJTklUX0hMSVNUX05PREUoJm5laWdoX25vZGUtPmxpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZuZWlnaF9ub2RlLT5ib25kaW5nX2xpc3QpOworCXNwaW5fbG9ja19pbml0KCZuZWlnaF9ub2RlLT50cV9sb2NrKTsKIAogCW1lbWNweShuZWlnaF9ub2RlLT5hZGRyLCBuZWlnaCwgRVRIX0FMRU4pOwogCW5laWdoX25vZGUtPm9yaWdfbm9kZSA9IG9yaWdfbmVpZ2hfbm9kZTsKQEAgLTEyOCw3ICsxMzQsNyBAQAogCXNwaW5fdW5sb2NrX2JoKCZvcmlnX25vZGUtPm5laWdoX2xpc3RfbG9jayk7CiAKIAlmcmFnX2xpc3RfZnJlZSgmb3JpZ19ub2RlLT5mcmFnX2xpc3QpOwotCWhuYV9nbG9iYWxfZGVsX29yaWcob3JpZ19ub2RlLT5iYXRfcHJpdiwgb3JpZ19ub2RlLAorCXR0X2dsb2JhbF9kZWxfb3JpZyhvcmlnX25vZGUtPmJhdF9wcml2LCBvcmlnX25vZGUsCiAJCQkgICAgIm9yaWdpbmF0b3IgdGltZWQgb3V0Iik7CiAKIAlrZnJlZShvcmlnX25vZGUtPmJjYXN0X293bik7CkBAIC0yMDYsNyArMjEyLDcgQEAKIAlvcmlnX25vZGUtPmJhdF9wcml2ID0gYmF0X3ByaXY7CiAJbWVtY3B5KG9yaWdfbm9kZS0+b3JpZywgYWRkciwgRVRIX0FMRU4pOwogCW9yaWdfbm9kZS0+cm91dGVyID0gTlVMTDsKLQlvcmlnX25vZGUtPmhuYV9idWZmID0gTlVMTDsKKwlvcmlnX25vZGUtPnR0X2J1ZmYgPSBOVUxMOwogCW9yaWdfbm9kZS0+YmNhc3Rfc2Vxbm9fcmVzZXQgPSBqaWZmaWVzIC0gMQogCQkJCQktIG1zZWNzX3RvX2ppZmZpZXMoUkVTRVRfUFJPVEVDVElPTl9NUyk7CiAJb3JpZ19ub2RlLT5iYXRtYW5fc2Vxbm9fcmVzZXQgPSBqaWZmaWVzIC0gMQpAQCAtMzE3LDggKzMyMyw4IEBACiAJCQkJCQkJJmJlc3RfbmVpZ2hfbm9kZSkpIHsKIAkJCXVwZGF0ZV9yb3V0ZXMoYmF0X3ByaXYsIG9yaWdfbm9kZSwKIAkJCQkgICAgICBiZXN0X25laWdoX25vZGUsCi0JCQkJICAgICAgb3JpZ19ub2RlLT5obmFfYnVmZiwKLQkJCQkgICAgICBvcmlnX25vZGUtPmhuYV9idWZmX2xlbik7CisJCQkJICAgICAgb3JpZ19ub2RlLT50dF9idWZmLAorCQkJCSAgICAgIG9yaWdfbm9kZS0+dHRfYnVmZl9sZW4pOwogCQl9CiAJfQogCkBAIC0zODksMjkgKzM5NSwzNCBAQAogCXN0cnVjdCBoYXNodGFibGVfdCAqaGFzaCA9IGJhdF9wcml2LT5vcmlnX2hhc2g7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsICpub2RlX3RtcDsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgaGFyZF9pZmFjZSAqcHJpbWFyeV9pZjsKIAlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGU7Ci0Jc3RydWN0IG5laWdoX25vZGUgKm5laWdoX25vZGU7CisJc3RydWN0IG5laWdoX25vZGUgKm5laWdoX25vZGUsICpuZWlnaF9ub2RlX3RtcDsKIAlpbnQgYmF0bWFuX2NvdW50ID0gMDsKIAlpbnQgbGFzdF9zZWVuX3NlY3M7CiAJaW50IGxhc3Rfc2Vlbl9tc2VjczsKLQlpbnQgaTsKKwlpbnQgaSwgcmV0ID0gMDsKIAotCWlmICgoIWJhdF9wcml2LT5wcmltYXJ5X2lmKSB8fAotCSAgICAoYmF0X3ByaXYtPnByaW1hcnlfaWYtPmlmX3N0YXR1cyAhPSBJRl9BQ1RJVkUpKSB7Ci0JCWlmICghYmF0X3ByaXYtPnByaW1hcnlfaWYpCi0JCQlyZXR1cm4gc2VxX3ByaW50ZihzZXEsICJCQVRNQU4gbWVzaCAlcyBkaXNhYmxlZCAtICIKLQkJCQkgICAgICJwbGVhc2Ugc3BlY2lmeSBpbnRlcmZhY2VzIHRvIGVuYWJsZSBpdFxuIiwKLQkJCQkgICAgIG5ldF9kZXYtPm5hbWUpOworCXByaW1hcnlfaWYgPSBwcmltYXJ5X2lmX2dldF9zZWxlY3RlZChiYXRfcHJpdik7CiAKLQkJcmV0dXJuIHNlcV9wcmludGYoc2VxLCAiQkFUTUFOIG1lc2ggJXMgIgotCQkJCSAgImRpc2FibGVkIC0gcHJpbWFyeSBpbnRlcmZhY2Ugbm90IGFjdGl2ZVxuIiwKLQkJCQkgIG5ldF9kZXYtPm5hbWUpOworCWlmICghcHJpbWFyeV9pZikgeworCQlyZXQgPSBzZXFfcHJpbnRmKHNlcSwgIkJBVE1BTiBtZXNoICVzIGRpc2FibGVkIC0gIgorCQkJCSAicGxlYXNlIHNwZWNpZnkgaW50ZXJmYWNlcyB0byBlbmFibGUgaXRcbiIsCisJCQkJIG5ldF9kZXYtPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocHJpbWFyeV9pZi0+aWZfc3RhdHVzICE9IElGX0FDVElWRSkgeworCQlyZXQgPSBzZXFfcHJpbnRmKHNlcSwgIkJBVE1BTiBtZXNoICVzICIKKwkJCQkgImRpc2FibGVkIC0gcHJpbWFyeSBpbnRlcmZhY2Ugbm90IGFjdGl2ZVxuIiwKKwkJCQkgbmV0X2Rldi0+bmFtZSk7CisJCWdvdG8gb3V0OwogCX0KIAogCXNlcV9wcmludGYoc2VxLCAiW0IuQS5ULk0uQS5OLiBhZHYgJXMlcywgTWFpbklGL01BQzogJXMvJXBNICglcyldXG4iLAogCQkgICBTT1VSQ0VfVkVSU0lPTiwgUkVWSVNJT05fVkVSU0lPTl9TVFIsCi0JCSAgIGJhdF9wcml2LT5wcmltYXJ5X2lmLT5uZXRfZGV2LT5uYW1lLAotCQkgICBiYXRfcHJpdi0+cHJpbWFyeV9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsIG5ldF9kZXYtPm5hbWUpOworCQkgICBwcmltYXJ5X2lmLT5uZXRfZGV2LT5uYW1lLAorCQkgICBwcmltYXJ5X2lmLT5uZXRfZGV2LT5kZXZfYWRkciwgbmV0X2Rldi0+bmFtZSk7CiAJc2VxX3ByaW50ZihzZXEsICIgICUtMTVzICVzICglcy8laSkgJTE3cyBbJTEwc106ICUyMHMgLi4uXG4iLAogCQkgICAiT3JpZ2luYXRvciIsICJsYXN0LXNlZW4iLCAiIyIsIFRRX01BWF9WQUxVRSwgIk5leHRob3AiLAogCQkgICAib3V0Z29pbmdJRiIsICJQb3RlbnRpYWwgbmV4dGhvcHMiKTsKQEAgLTQyMSw0MCArNDMyLDQ3IEBACiAKIAkJcmN1X3JlYWRfbG9jaygpOwogCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uob3JpZ19ub2RlLCBub2RlLCBoZWFkLCBoYXNoX2VudHJ5KSB7Ci0JCQlpZiAoIW9yaWdfbm9kZS0+cm91dGVyKQorCQkJbmVpZ2hfbm9kZSA9IG9yaWdfbm9kZV9nZXRfcm91dGVyKG9yaWdfbm9kZSk7CisJCQlpZiAoIW5laWdoX25vZGUpCiAJCQkJY29udGludWU7CiAKLQkJCWlmIChvcmlnX25vZGUtPnJvdXRlci0+dHFfYXZnID09IDApCi0JCQkJY29udGludWU7CisJCQlpZiAobmVpZ2hfbm9kZS0+dHFfYXZnID09IDApCisJCQkJZ290byBuZXh0OwogCiAJCQlsYXN0X3NlZW5fc2VjcyA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtCiAJCQkJCQlvcmlnX25vZGUtPmxhc3RfdmFsaWQpIC8gMTAwMDsKIAkJCWxhc3Rfc2Vlbl9tc2VjcyA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtCiAJCQkJCQlvcmlnX25vZGUtPmxhc3RfdmFsaWQpICUgMTAwMDsKIAotCQkJbmVpZ2hfbm9kZSA9IG9yaWdfbm9kZS0+cm91dGVyOwogCQkJc2VxX3ByaW50ZihzZXEsICIlcE0gJTRpLiUwM2lzICAgKCUzaSkgJXBNIFslMTBzXToiLAogCQkJCSAgIG9yaWdfbm9kZS0+b3JpZywgbGFzdF9zZWVuX3NlY3MsCiAJCQkJICAgbGFzdF9zZWVuX21zZWNzLCBuZWlnaF9ub2RlLT50cV9hdmcsCiAJCQkJICAgbmVpZ2hfbm9kZS0+YWRkciwKIAkJCQkgICBuZWlnaF9ub2RlLT5pZl9pbmNvbWluZy0+bmV0X2Rldi0+bmFtZSk7CiAKLQkJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShuZWlnaF9ub2RlLCBub2RlX3RtcCwKKwkJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShuZWlnaF9ub2RlX3RtcCwgbm9kZV90bXAsCiAJCQkJCQkgJm9yaWdfbm9kZS0+bmVpZ2hfbGlzdCwgbGlzdCkgewotCQkJCXNlcV9wcmludGYoc2VxLCAiICVwTSAoJTNpKSIsIG5laWdoX25vZGUtPmFkZHIsCi0JCQkJCQluZWlnaF9ub2RlLT50cV9hdmcpOworCQkJCXNlcV9wcmludGYoc2VxLCAiICVwTSAoJTNpKSIsCisJCQkJCSAgIG5laWdoX25vZGVfdG1wLT5hZGRyLAorCQkJCQkgICBuZWlnaF9ub2RlX3RtcC0+dHFfYXZnKTsKIAkJCX0KIAogCQkJc2VxX3ByaW50ZihzZXEsICJcbiIpOwogCQkJYmF0bWFuX2NvdW50Kys7CisKK25leHQ6CisJCQluZWlnaF9ub2RlX2ZyZWVfcmVmKG5laWdoX25vZGUpOwogCQl9CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCX0KIAotCWlmICgoYmF0bWFuX2NvdW50ID09IDApKQorCWlmIChiYXRtYW5fY291bnQgPT0gMCkKIAkJc2VxX3ByaW50ZihzZXEsICJObyBiYXRtYW4gbm9kZXMgaW4gcmFuZ2UgLi4uXG4iKTsKIAotCXJldHVybiAwOworb3V0OgorCWlmIChwcmltYXJ5X2lmKQorCQloYXJkaWZfZnJlZV9yZWYocHJpbWFyeV9pZik7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBvcmlnX25vZGVfYWRkX2lmKHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwgaW50IG1heF9pZl9udW0pCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmggYi9uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmgKaW5kZXggNWNjMDExMC4uZTFkNjQxZiAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5oCisrKyBiL25ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuaApAQCAtMzQsNiArMzQsNyBAQAogCQkJCSAgIHVpbnQ4X3QgKm5laWdoLAogCQkJCSAgIHN0cnVjdCBoYXJkX2lmYWNlICppZl9pbmNvbWluZyk7CiB2b2lkIG5laWdoX25vZGVfZnJlZV9yZWYoc3RydWN0IG5laWdoX25vZGUgKm5laWdoX25vZGUpOworc3RydWN0IG5laWdoX25vZGUgKm9yaWdfbm9kZV9nZXRfcm91dGVyKHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSk7CiBpbnQgb3JpZ19zZXFfcHJpbnRfdGV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KTsKIGludCBvcmlnX2hhc2hfYWRkX2lmKHN0cnVjdCBoYXJkX2lmYWNlICpoYXJkX2lmYWNlLCBpbnQgbWF4X2lmX251bSk7CiBpbnQgb3JpZ19oYXNoX2RlbF9pZihzdHJ1Y3QgaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSwgaW50IG1heF9pZl9udW0pOwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvcGFja2V0LmggYi9uZXQvYmF0bWFuLWFkdi9wYWNrZXQuaAppbmRleCBlNzU3MTg3Li5lZGE5OTY1IDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9wYWNrZXQuaAorKysgYi9uZXQvYmF0bWFuLWFkdi9wYWNrZXQuaApAQCAtNjEsNyArNjEsNyBAQAogCXVpbnQ4X3QgIG9yaWdbNl07CiAJdWludDhfdCAgcHJldl9zZW5kZXJbNl07CiAJdWludDhfdCAgdHRsOwotCXVpbnQ4X3QgIG51bV9obmE7CisJdWludDhfdCAgbnVtX3R0OwogCXVpbnQ4X3QgIGd3X2ZsYWdzOyAgLyogZmxhZ3MgcmVsYXRlZCB0byBnYXRld2F5IGNsYXNzICovCiAJdWludDhfdCAgYWxpZ247CiB9IF9fcGFja2VkOwpAQCAtMTI4LDggKzEyOCw3IEBACiAJdWludDhfdCAgZW50cmllczsJIC8qIG51bWJlciBvZiBlbnRyaWVzIGJlaGluZCB0aGlzIHN0cnVjdCAqLwogCXVpbnQzMl90IHNlcW5vOwkJIC8qIHNlcXVlbmNlIG51bWJlciAqLwogCXVpbnQ4X3QgIHR0bDsJCSAvKiBUVEwgKi8KLQl1aW50OF90ICB2aXNfb3JpZ1s2XTsJIC8qIG9yaWdpbmF0b3IgdGhhdCBpbmZvcm1zIGFib3V0IGl0cwotCQkJCSAgKiBuZWlnaGJvcnMgKi8KKwl1aW50OF90ICB2aXNfb3JpZ1s2XTsJIC8qIG9yaWdpbmF0b3IgdGhhdCBhbm5vdW5jZXMgaXRzIG5laWdoYm9ycyAqLwogCXVpbnQ4X3QgIHRhcmdldF9vcmlnWzZdOyAvKiB3aG8gc2hvdWxkIHJlY2VpdmUgdGhpcyBwYWNrZXQgKi8KIAl1aW50OF90ICBzZW5kZXJfb3JpZ1s2XTsgLyogd2hvIHNlbnQgb3IgcmVicm9hZGNhc3RlZCB0aGlzIHBhY2tldCAqLwogfSBfX3BhY2tlZDsKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYyBiL25ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYwppbmRleCBjMTcyZjVkLi5iYjFjM2VjIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvcm91dGluZy5jCkBAIC02NCw4MCArNjQsOTcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHVwZGF0ZV9ITkEoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwgc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlLAotCQkgICAgICAgdW5zaWduZWQgY2hhciAqaG5hX2J1ZmYsIGludCBobmFfYnVmZl9sZW4pCitzdGF0aWMgdm9pZCB1cGRhdGVfVFQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwgc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqdHRfYnVmZiwgaW50IHR0X2J1ZmZfbGVuKQogewotCWlmICgoaG5hX2J1ZmZfbGVuICE9IG9yaWdfbm9kZS0+aG5hX2J1ZmZfbGVuKSB8fAotCSAgICAoKGhuYV9idWZmX2xlbiA+IDApICYmCi0JICAgICAob3JpZ19ub2RlLT5obmFfYnVmZl9sZW4gPiAwKSAmJgotCSAgICAgKG1lbWNtcChvcmlnX25vZGUtPmhuYV9idWZmLCBobmFfYnVmZiwgaG5hX2J1ZmZfbGVuKSAhPSAwKSkpIHsKKwlpZiAoKHR0X2J1ZmZfbGVuICE9IG9yaWdfbm9kZS0+dHRfYnVmZl9sZW4pIHx8CisJICAgICgodHRfYnVmZl9sZW4gPiAwKSAmJgorCSAgICAgKG9yaWdfbm9kZS0+dHRfYnVmZl9sZW4gPiAwKSAmJgorCSAgICAgKG1lbWNtcChvcmlnX25vZGUtPnR0X2J1ZmYsIHR0X2J1ZmYsIHR0X2J1ZmZfbGVuKSAhPSAwKSkpIHsKIAotCQlpZiAob3JpZ19ub2RlLT5obmFfYnVmZl9sZW4gPiAwKQotCQkJaG5hX2dsb2JhbF9kZWxfb3JpZyhiYXRfcHJpdiwgb3JpZ19ub2RlLAotCQkJCQkgICAgIm9yaWdpbmF0b3IgY2hhbmdlZCBobmEiKTsKKwkJaWYgKG9yaWdfbm9kZS0+dHRfYnVmZl9sZW4gPiAwKQorCQkJdHRfZ2xvYmFsX2RlbF9vcmlnKGJhdF9wcml2LCBvcmlnX25vZGUsCisJCQkJCSAgICAib3JpZ2luYXRvciBjaGFuZ2VkIHR0Iik7CiAKLQkJaWYgKChobmFfYnVmZl9sZW4gPiAwKSAmJiAoaG5hX2J1ZmYpKQotCQkJaG5hX2dsb2JhbF9hZGRfb3JpZyhiYXRfcHJpdiwgb3JpZ19ub2RlLAotCQkJCQkgICAgaG5hX2J1ZmYsIGhuYV9idWZmX2xlbik7CisJCWlmICgodHRfYnVmZl9sZW4gPiAwKSAmJiAodHRfYnVmZikpCisJCQl0dF9nbG9iYWxfYWRkX29yaWcoYmF0X3ByaXYsIG9yaWdfbm9kZSwKKwkJCQkJICAgIHR0X2J1ZmYsIHR0X2J1ZmZfbGVuKTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIHVwZGF0ZV9yb3V0ZShzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAogCQkJIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwKIAkJCSBzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZSwKLQkJCSB1bnNpZ25lZCBjaGFyICpobmFfYnVmZiwgaW50IGhuYV9idWZmX2xlbikKKwkJCSB1bnNpZ25lZCBjaGFyICp0dF9idWZmLCBpbnQgdHRfYnVmZl9sZW4pCiB7Ci0Jc3RydWN0IG5laWdoX25vZGUgKm5laWdoX25vZGVfdG1wOworCXN0cnVjdCBuZWlnaF9ub2RlICpjdXJyX3JvdXRlcjsKKworCWN1cnJfcm91dGVyID0gb3JpZ19ub2RlX2dldF9yb3V0ZXIob3JpZ19ub2RlKTsKIAogCS8qIHJvdXRlIGRlbGV0ZWQgKi8KLQlpZiAoKG9yaWdfbm9kZS0+cm91dGVyKSAmJiAoIW5laWdoX25vZGUpKSB7CisJaWYgKChjdXJyX3JvdXRlcikgJiYgKCFuZWlnaF9ub2RlKSkgewogCiAJCWJhdF9kYmcoREJHX1JPVVRFUywgYmF0X3ByaXYsICJEZWxldGluZyByb3V0ZSB0b3dhcmRzOiAlcE1cbiIsCiAJCQlvcmlnX25vZGUtPm9yaWcpOwotCQlobmFfZ2xvYmFsX2RlbF9vcmlnKGJhdF9wcml2LCBvcmlnX25vZGUsCisJCXR0X2dsb2JhbF9kZWxfb3JpZyhiYXRfcHJpdiwgb3JpZ19ub2RlLAogCQkJCSAgICAib3JpZ2luYXRvciB0aW1lZCBvdXQiKTsKIAotCQkvKiByb3V0ZSBhZGRlZCAqLwotCX0gZWxzZSBpZiAoKCFvcmlnX25vZGUtPnJvdXRlcikgJiYgKG5laWdoX25vZGUpKSB7CisJLyogcm91dGUgYWRkZWQgKi8KKwl9IGVsc2UgaWYgKCghY3Vycl9yb3V0ZXIpICYmIChuZWlnaF9ub2RlKSkgewogCiAJCWJhdF9kYmcoREJHX1JPVVRFUywgYmF0X3ByaXYsCiAJCQkiQWRkaW5nIHJvdXRlIHRvd2FyZHM6ICVwTSAodmlhICVwTSlcbiIsCiAJCQlvcmlnX25vZGUtPm9yaWcsIG5laWdoX25vZGUtPmFkZHIpOwotCQlobmFfZ2xvYmFsX2FkZF9vcmlnKGJhdF9wcml2LCBvcmlnX25vZGUsCi0JCQkJICAgIGhuYV9idWZmLCBobmFfYnVmZl9sZW4pOworCQl0dF9nbG9iYWxfYWRkX29yaWcoYmF0X3ByaXYsIG9yaWdfbm9kZSwKKwkJCQkgICAgdHRfYnVmZiwgdHRfYnVmZl9sZW4pOwogCi0JCS8qIHJvdXRlIGNoYW5nZWQgKi8KKwkvKiByb3V0ZSBjaGFuZ2VkICovCiAJfSBlbHNlIHsKIAkJYmF0X2RiZyhEQkdfUk9VVEVTLCBiYXRfcHJpdiwKIAkJCSJDaGFuZ2luZyByb3V0ZSB0b3dhcmRzOiAlcE0gIgogCQkJIihub3cgdmlhICVwTSAtIHdhcyB2aWEgJXBNKVxuIiwKIAkJCW9yaWdfbm9kZS0+b3JpZywgbmVpZ2hfbm9kZS0+YWRkciwKLQkJCW9yaWdfbm9kZS0+cm91dGVyLT5hZGRyKTsKKwkJCWN1cnJfcm91dGVyLT5hZGRyKTsKIAl9CiAKKwlpZiAoY3Vycl9yb3V0ZXIpCisJCW5laWdoX25vZGVfZnJlZV9yZWYoY3Vycl9yb3V0ZXIpOworCisJLyogaW5jcmVhc2UgcmVmY291bnQgb2YgbmV3IGJlc3QgbmVpZ2hib3IgKi8KIAlpZiAobmVpZ2hfbm9kZSAmJiAhYXRvbWljX2luY19ub3RfemVybygmbmVpZ2hfbm9kZS0+cmVmY291bnQpKQogCQluZWlnaF9ub2RlID0gTlVMTDsKLQluZWlnaF9ub2RlX3RtcCA9IG9yaWdfbm9kZS0+cm91dGVyOwotCW9yaWdfbm9kZS0+cm91dGVyID0gbmVpZ2hfbm9kZTsKLQlpZiAobmVpZ2hfbm9kZV90bXApCi0JCW5laWdoX25vZGVfZnJlZV9yZWYobmVpZ2hfbm9kZV90bXApOworCisJc3Bpbl9sb2NrX2JoKCZvcmlnX25vZGUtPm5laWdoX2xpc3RfbG9jayk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKG9yaWdfbm9kZS0+cm91dGVyLCBuZWlnaF9ub2RlKTsKKwlzcGluX3VubG9ja19iaCgmb3JpZ19ub2RlLT5uZWlnaF9saXN0X2xvY2spOworCisJLyogZGVjcmVhc2UgcmVmY291bnQgb2YgcHJldmlvdXMgYmVzdCBuZWlnaGJvciAqLworCWlmIChjdXJyX3JvdXRlcikKKwkJbmVpZ2hfbm9kZV9mcmVlX3JlZihjdXJyX3JvdXRlcik7CiB9CiAKIAogdm9pZCB1cGRhdGVfcm91dGVzKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwKLQkJICAgc3RydWN0IG5laWdoX25vZGUgKm5laWdoX25vZGUsIHVuc2lnbmVkIGNoYXIgKmhuYV9idWZmLAotCQkgICBpbnQgaG5hX2J1ZmZfbGVuKQorCQkgICBzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZSwgdW5zaWduZWQgY2hhciAqdHRfYnVmZiwKKwkJICAgaW50IHR0X2J1ZmZfbGVuKQogeworCXN0cnVjdCBuZWlnaF9ub2RlICpyb3V0ZXIgPSBOVUxMOwogCiAJaWYgKCFvcmlnX25vZGUpCi0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAKLQlpZiAob3JpZ19ub2RlLT5yb3V0ZXIgIT0gbmVpZ2hfbm9kZSkKKwlyb3V0ZXIgPSBvcmlnX25vZGVfZ2V0X3JvdXRlcihvcmlnX25vZGUpOworCisJaWYgKHJvdXRlciAhPSBuZWlnaF9ub2RlKQogCQl1cGRhdGVfcm91dGUoYmF0X3ByaXYsIG9yaWdfbm9kZSwgbmVpZ2hfbm9kZSwKLQkJCSAgICAgaG5hX2J1ZmYsIGhuYV9idWZmX2xlbik7Ci0JLyogbWF5IGJlIGp1c3QgSE5BIGNoYW5nZWQgKi8KKwkJCSAgICAgdHRfYnVmZiwgdHRfYnVmZl9sZW4pOworCS8qIG1heSBiZSBqdXN0IFRUIGNoYW5nZWQgKi8KIAllbHNlCi0JCXVwZGF0ZV9ITkEoYmF0X3ByaXYsIG9yaWdfbm9kZSwgaG5hX2J1ZmYsIGhuYV9idWZmX2xlbik7CisJCXVwZGF0ZV9UVChiYXRfcHJpdiwgb3JpZ19ub2RlLCB0dF9idWZmLCB0dF9idWZmX2xlbik7CisKK291dDoKKwlpZiAocm91dGVyKQorCQluZWlnaF9ub2RlX2ZyZWVfcmVmKHJvdXRlcik7CiB9CiAKIHN0YXRpYyBpbnQgaXNfYmlkaXJlY3Rpb25hbF9uZWlnaChzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsCkBAIC0xNTIsNjUgKzE2OSw0MSBAQAogCXVpbnQ4X3Qgb3JpZ19lcV9jb3VudCwgbmVpZ2hfcnFfY291bnQsIHRxX293bjsKIAlpbnQgdHFfYXN5bV9wZW5hbHR5LCByZXQgPSAwOwogCi0JaWYgKG9yaWdfbm9kZSA9PSBvcmlnX25laWdoX25vZGUpIHsKLQkJcmN1X3JlYWRfbG9jaygpOwotCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodG1wX25laWdoX25vZGUsIG5vZGUsCi0JCQkJCSAmb3JpZ19ub2RlLT5uZWlnaF9saXN0LCBsaXN0KSB7CisJLyogZmluZCBjb3JyZXNwb25kaW5nIG9uZSBob3AgbmVpZ2hib3IgKi8KKwlyY3VfcmVhZF9sb2NrKCk7CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHRtcF9uZWlnaF9ub2RlLCBub2RlLAorCQkJCSAmb3JpZ19uZWlnaF9ub2RlLT5uZWlnaF9saXN0LCBsaXN0KSB7CiAKLQkJCWlmICghY29tcGFyZV9ldGgodG1wX25laWdoX25vZGUtPmFkZHIsCi0JCQkJCSBvcmlnX25laWdoX25vZGUtPm9yaWcpKQotCQkJCWNvbnRpbnVlOworCQlpZiAoIWNvbXBhcmVfZXRoKHRtcF9uZWlnaF9ub2RlLT5hZGRyLCBvcmlnX25laWdoX25vZGUtPm9yaWcpKQorCQkJY29udGludWU7CiAKLQkJCWlmICh0bXBfbmVpZ2hfbm9kZS0+aWZfaW5jb21pbmcgIT0gaWZfaW5jb21pbmcpCi0JCQkJY29udGludWU7CisJCWlmICh0bXBfbmVpZ2hfbm9kZS0+aWZfaW5jb21pbmcgIT0gaWZfaW5jb21pbmcpCisJCQljb250aW51ZTsKIAotCQkJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZ0bXBfbmVpZ2hfbm9kZS0+cmVmY291bnQpKQotCQkJCWNvbnRpbnVlOworCQlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oJnRtcF9uZWlnaF9ub2RlLT5yZWZjb3VudCkpCisJCQljb250aW51ZTsKIAotCQkJbmVpZ2hfbm9kZSA9IHRtcF9uZWlnaF9ub2RlOwotCQl9Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCi0JCWlmICghbmVpZ2hfbm9kZSkKLQkJCW5laWdoX25vZGUgPSBjcmVhdGVfbmVpZ2hib3Iob3JpZ19ub2RlLAotCQkJCQkJICAgICBvcmlnX25laWdoX25vZGUsCi0JCQkJCQkgICAgIG9yaWdfbmVpZ2hfbm9kZS0+b3JpZywKLQkJCQkJCSAgICAgaWZfaW5jb21pbmcpOwotCQlpZiAoIW5laWdoX25vZGUpCi0JCQlnb3RvIG91dDsKLQotCQluZWlnaF9ub2RlLT5sYXN0X3ZhbGlkID0gamlmZmllczsKLQl9IGVsc2UgewotCQkvKiBmaW5kIHBhY2tldCBjb3VudCBvZiBjb3JyZXNwb25kaW5nIG9uZSBob3AgbmVpZ2hib3IgKi8KLQkJcmN1X3JlYWRfbG9jaygpOwotCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodG1wX25laWdoX25vZGUsIG5vZGUsCi0JCQkJCSAmb3JpZ19uZWlnaF9ub2RlLT5uZWlnaF9saXN0LCBsaXN0KSB7Ci0KLQkJCWlmICghY29tcGFyZV9ldGgodG1wX25laWdoX25vZGUtPmFkZHIsCi0JCQkJCSBvcmlnX25laWdoX25vZGUtPm9yaWcpKQotCQkJCWNvbnRpbnVlOwotCi0JCQlpZiAodG1wX25laWdoX25vZGUtPmlmX2luY29taW5nICE9IGlmX2luY29taW5nKQotCQkJCWNvbnRpbnVlOwotCi0JCQlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oJnRtcF9uZWlnaF9ub2RlLT5yZWZjb3VudCkpCi0JCQkJY29udGludWU7Ci0KLQkJCW5laWdoX25vZGUgPSB0bXBfbmVpZ2hfbm9kZTsKLQkJfQotCQlyY3VfcmVhZF91bmxvY2soKTsKLQotCQlpZiAoIW5laWdoX25vZGUpCi0JCQluZWlnaF9ub2RlID0gY3JlYXRlX25laWdoYm9yKG9yaWdfbmVpZ2hfbm9kZSwKLQkJCQkJCSAgICAgb3JpZ19uZWlnaF9ub2RlLAotCQkJCQkJICAgICBvcmlnX25laWdoX25vZGUtPm9yaWcsCi0JCQkJCQkgICAgIGlmX2luY29taW5nKTsKLQkJaWYgKCFuZWlnaF9ub2RlKQotCQkJZ290byBvdXQ7CisJCW5laWdoX25vZGUgPSB0bXBfbmVpZ2hfbm9kZTsKKwkJYnJlYWs7CiAJfQorCXJjdV9yZWFkX3VubG9jaygpOworCisJaWYgKCFuZWlnaF9ub2RlKQorCQluZWlnaF9ub2RlID0gY3JlYXRlX25laWdoYm9yKG9yaWdfbmVpZ2hfbm9kZSwKKwkJCQkJICAgICBvcmlnX25laWdoX25vZGUsCisJCQkJCSAgICAgb3JpZ19uZWlnaF9ub2RlLT5vcmlnLAorCQkJCQkgICAgIGlmX2luY29taW5nKTsKKworCWlmICghbmVpZ2hfbm9kZSkKKwkJZ290byBvdXQ7CisKKwkvKiBpZiBvcmlnX25vZGUgaXMgZGlyZWN0IG5laWdoYm91ciB1cGRhdGUgbmVpZ2hfbm9kZSBsYXN0X3ZhbGlkICovCisJaWYgKG9yaWdfbm9kZSA9PSBvcmlnX25laWdoX25vZGUpCisJCW5laWdoX25vZGUtPmxhc3RfdmFsaWQgPSBqaWZmaWVzOwogCiAJb3JpZ19ub2RlLT5sYXN0X3ZhbGlkID0gamlmZmllczsKIAorCS8qIGZpbmQgcGFja2V0IGNvdW50IG9mIGNvcnJlc3BvbmRpbmcgb25lIGhvcCBuZWlnaGJvciAqLwogCXNwaW5fbG9ja19iaCgmb3JpZ19ub2RlLT5vZ21fY250X2xvY2spOwogCW9yaWdfZXFfY291bnQgPSBvcmlnX25laWdoX25vZGUtPmJjYXN0X293bl9zdW1baWZfaW5jb21pbmctPmlmX251bV07CiAJbmVpZ2hfcnFfY291bnQgPSBuZWlnaF9ub2RlLT5yZWFsX3BhY2tldF9jb3VudDsKQEAgLTI4OCw4ICsyODEsOCBAQAogCQkJCSAgc3RydWN0IG5laWdoX25vZGUgKm5laWdoX25vZGUpCiB7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0Jc3RydWN0IG5laWdoX25vZGUgKnRtcF9uZWlnaF9ub2RlOwotCXVpbnQ4X3QgYmVzdF90cSwgaW50ZXJmZXJlbmNlX2NhbmRpZGF0ZSA9IDA7CisJc3RydWN0IG5laWdoX25vZGUgKnRtcF9uZWlnaF9ub2RlLCAqcm91dGVyID0gTlVMTDsKKwl1aW50OF90IGludGVyZmVyZW5jZV9jYW5kaWRhdGUgPSAwOwogCiAJc3Bpbl9sb2NrX2JoKCZvcmlnX25vZGUtPm5laWdoX2xpc3RfbG9jayk7CiAKQEAgLTI5OCwxMyArMjkxLDEyIEBACiAJCQkgbmVpZ2hfbm9kZS0+b3JpZ19ub2RlLT5wcmltYXJ5X2FkZHIpKQogCQlnb3RvIGNhbmRpZGF0ZV9kZWw7CiAKLQlpZiAoIW9yaWdfbm9kZS0+cm91dGVyKQorCXJvdXRlciA9IG9yaWdfbm9kZV9nZXRfcm91dGVyKG9yaWdfbm9kZSk7CisJaWYgKCFyb3V0ZXIpCiAJCWdvdG8gY2FuZGlkYXRlX2RlbDsKIAotCWJlc3RfdHEgPSBvcmlnX25vZGUtPnJvdXRlci0+dHFfYXZnOwotCiAJLyogLi4uIGFuZCBpcyBnb29kIGVub3VnaCB0byBiZSBjb25zaWRlcmVkICovCi0JaWYgKG5laWdoX25vZGUtPnRxX2F2ZyA8IGJlc3RfdHEgLSBCT05ESU5HX1RRX1RIUkVTSE9MRCkKKwlpZiAobmVpZ2hfbm9kZS0+dHFfYXZnIDwgcm91dGVyLT50cV9hdmcgLSBCT05ESU5HX1RRX1RIUkVTSE9MRCkKIAkJZ290byBjYW5kaWRhdGVfZGVsOwogCiAJLyoqCkBAIC0zNTAsNyArMzQyLDkgQEAKIAogb3V0OgogCXNwaW5fdW5sb2NrX2JoKCZvcmlnX25vZGUtPm5laWdoX2xpc3RfbG9jayk7Ci0JcmV0dXJuOworCisJaWYgKHJvdXRlcikKKwkJbmVpZ2hfbm9kZV9mcmVlX3JlZihyb3V0ZXIpOwogfQogCiAvKiBjb3B5IHByaW1hcnkgYWRkcmVzcyBmb3IgYm9uZGluZyAqLwpAQCAtMzY5LDEzICszNjMsMTQgQEAKIAkJCXN0cnVjdCBldGhoZHIgKmV0aGhkciwKIAkJCXN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0LAogCQkJc3RydWN0IGhhcmRfaWZhY2UgKmlmX2luY29taW5nLAotCQkJdW5zaWduZWQgY2hhciAqaG5hX2J1ZmYsIGludCBobmFfYnVmZl9sZW4sCisJCQl1bnNpZ25lZCBjaGFyICp0dF9idWZmLCBpbnQgdHRfYnVmZl9sZW4sCiAJCQljaGFyIGlzX2R1cGxpY2F0ZSkKIHsKIAlzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZSA9IE5VTEwsICp0bXBfbmVpZ2hfbm9kZSA9IE5VTEw7CisJc3RydWN0IG5laWdoX25vZGUgKnJvdXRlciA9IE5VTEw7CiAJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlX3RtcDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQlpbnQgdG1wX2huYV9idWZmX2xlbjsKKwlpbnQgdG1wX3R0X2J1ZmZfbGVuOwogCXVpbnQ4X3QgYmNhc3Rfb3duX3N1bV9vcmlnLCBiY2FzdF9vd25fc3VtX25laWdoOwogCiAJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwgInVwZGF0ZV9vcmlnaW5hdG9yKCk6ICIKQEAgLTM5NiwxMCArMzkxLDEyIEBACiAJCWlmIChpc19kdXBsaWNhdGUpCiAJCQljb250aW51ZTsKIAorCQlzcGluX2xvY2tfYmgoJnRtcF9uZWlnaF9ub2RlLT50cV9sb2NrKTsKIAkJcmluZ19idWZmZXJfc2V0KHRtcF9uZWlnaF9ub2RlLT50cV9yZWN2LAogCQkJCSZ0bXBfbmVpZ2hfbm9kZS0+dHFfaW5kZXgsIDApOwogCQl0bXBfbmVpZ2hfbm9kZS0+dHFfYXZnID0KIAkJCXJpbmdfYnVmZmVyX2F2Zyh0bXBfbmVpZ2hfbm9kZS0+dHFfcmVjdik7CisJCXNwaW5fdW5sb2NrX2JoKCZ0bXBfbmVpZ2hfbm9kZS0+dHFfbG9jayk7CiAJfQogCiAJaWYgKCFuZWlnaF9ub2RlKSB7CkBAIC00MjQsMTAgKzQyMSwxMiBAQAogCW9yaWdfbm9kZS0+ZmxhZ3MgPSBiYXRtYW5fcGFja2V0LT5mbGFnczsKIAluZWlnaF9ub2RlLT5sYXN0X3ZhbGlkID0gamlmZmllczsKIAorCXNwaW5fbG9ja19iaCgmbmVpZ2hfbm9kZS0+dHFfbG9jayk7CiAJcmluZ19idWZmZXJfc2V0KG5laWdoX25vZGUtPnRxX3JlY3YsCiAJCQkmbmVpZ2hfbm9kZS0+dHFfaW5kZXgsCiAJCQliYXRtYW5fcGFja2V0LT50cSk7CiAJbmVpZ2hfbm9kZS0+dHFfYXZnID0gcmluZ19idWZmZXJfYXZnKG5laWdoX25vZGUtPnRxX3JlY3YpOworCXNwaW5fdW5sb2NrX2JoKCZuZWlnaF9ub2RlLT50cV9sb2NrKTsKIAogCWlmICghaXNfZHVwbGljYXRlKSB7CiAJCW9yaWdfbm9kZS0+bGFzdF90dGwgPSBiYXRtYW5fcGFja2V0LT50dGw7CkBAIC00MzYsMjQgKzQzNSwyMyBAQAogCiAJYm9uZGluZ19jYW5kaWRhdGVfYWRkKG9yaWdfbm9kZSwgbmVpZ2hfbm9kZSk7CiAKLQl0bXBfaG5hX2J1ZmZfbGVuID0gKGhuYV9idWZmX2xlbiA+IGJhdG1hbl9wYWNrZXQtPm51bV9obmEgKiBFVEhfQUxFTiA/Ci0JCQkgICAgYmF0bWFuX3BhY2tldC0+bnVtX2huYSAqIEVUSF9BTEVOIDogaG5hX2J1ZmZfbGVuKTsKKwl0bXBfdHRfYnVmZl9sZW4gPSAodHRfYnVmZl9sZW4gPiBiYXRtYW5fcGFja2V0LT5udW1fdHQgKiBFVEhfQUxFTiA/CisJCQkgICAgYmF0bWFuX3BhY2tldC0+bnVtX3R0ICogRVRIX0FMRU4gOiB0dF9idWZmX2xlbik7CiAKIAkvKiBpZiB0aGlzIG5laWdoYm9yIGFscmVhZHkgaXMgb3VyIG5leHQgaG9wIHRoZXJlIGlzIG5vdGhpbmcKIAkgKiB0byBjaGFuZ2UgKi8KLQlpZiAob3JpZ19ub2RlLT5yb3V0ZXIgPT0gbmVpZ2hfbm9kZSkKLQkJZ290byB1cGRhdGVfaG5hOworCXJvdXRlciA9IG9yaWdfbm9kZV9nZXRfcm91dGVyKG9yaWdfbm9kZSk7CisJaWYgKHJvdXRlciA9PSBuZWlnaF9ub2RlKQorCQlnb3RvIHVwZGF0ZV90dDsKIAogCS8qIGlmIHRoaXMgbmVpZ2hib3IgZG9lcyBub3Qgb2ZmZXIgYSBiZXR0ZXIgVFEgd2Ugd29uJ3QgY29uc2lkZXIgaXQgKi8KLQlpZiAoKG9yaWdfbm9kZS0+cm91dGVyKSAmJgotCSAgICAob3JpZ19ub2RlLT5yb3V0ZXItPnRxX2F2ZyA+IG5laWdoX25vZGUtPnRxX2F2ZykpCi0JCWdvdG8gdXBkYXRlX2huYTsKKwlpZiAocm91dGVyICYmIChyb3V0ZXItPnRxX2F2ZyA+IG5laWdoX25vZGUtPnRxX2F2ZykpCisJCWdvdG8gdXBkYXRlX3R0OwogCiAJLyogaWYgdGhlIFRRIGlzIHRoZSBzYW1lIGFuZCB0aGUgbGluayBub3QgbW9yZSBzeW1ldHJpYyB3ZQogCSAqIHdvbid0IGNvbnNpZGVyIGl0IGVpdGhlciAqLwotCWlmICgob3JpZ19ub2RlLT5yb3V0ZXIpICYmCi0JICAgICAobmVpZ2hfbm9kZS0+dHFfYXZnID09IG9yaWdfbm9kZS0+cm91dGVyLT50cV9hdmcpKSB7Ci0JCW9yaWdfbm9kZV90bXAgPSBvcmlnX25vZGUtPnJvdXRlci0+b3JpZ19ub2RlOworCWlmIChyb3V0ZXIgJiYgKG5laWdoX25vZGUtPnRxX2F2ZyA9PSByb3V0ZXItPnRxX2F2ZykpIHsKKwkJb3JpZ19ub2RlX3RtcCA9IHJvdXRlci0+b3JpZ19ub2RlOwogCQlzcGluX2xvY2tfYmgoJm9yaWdfbm9kZV90bXAtPm9nbV9jbnRfbG9jayk7CiAJCWJjYXN0X293bl9zdW1fb3JpZyA9CiAJCQlvcmlnX25vZGVfdG1wLT5iY2FzdF9vd25fc3VtW2lmX2luY29taW5nLT5pZl9udW1dOwpAQCAtNDY2LDE2ICs0NjQsMTYgQEAKIAkJc3Bpbl91bmxvY2tfYmgoJm9yaWdfbm9kZV90bXAtPm9nbV9jbnRfbG9jayk7CiAKIAkJaWYgKGJjYXN0X293bl9zdW1fb3JpZyA+PSBiY2FzdF9vd25fc3VtX25laWdoKQotCQkJZ290byB1cGRhdGVfaG5hOworCQkJZ290byB1cGRhdGVfdHQ7CiAJfQogCiAJdXBkYXRlX3JvdXRlcyhiYXRfcHJpdiwgb3JpZ19ub2RlLCBuZWlnaF9ub2RlLAotCQkgICAgICBobmFfYnVmZiwgdG1wX2huYV9idWZmX2xlbik7CisJCSAgICAgIHR0X2J1ZmYsIHRtcF90dF9idWZmX2xlbik7CiAJZ290byB1cGRhdGVfZ3c7CiAKLXVwZGF0ZV9obmE6Ci0JdXBkYXRlX3JvdXRlcyhiYXRfcHJpdiwgb3JpZ19ub2RlLCBvcmlnX25vZGUtPnJvdXRlciwKLQkJICAgICAgaG5hX2J1ZmYsIHRtcF9obmFfYnVmZl9sZW4pOwordXBkYXRlX3R0OgorCXVwZGF0ZV9yb3V0ZXMoYmF0X3ByaXYsIG9yaWdfbm9kZSwgcm91dGVyLAorCQkgICAgICB0dF9idWZmLCB0bXBfdHRfYnVmZl9sZW4pOwogCiB1cGRhdGVfZ3c6CiAJaWYgKG9yaWdfbm9kZS0+Z3dfZmxhZ3MgIT0gYmF0bWFuX3BhY2tldC0+Z3dfZmxhZ3MpCkBAIC00OTYsNiArNDk0LDggQEAKIG91dDoKIAlpZiAobmVpZ2hfbm9kZSkKIAkJbmVpZ2hfbm9kZV9mcmVlX3JlZihuZWlnaF9ub2RlKTsKKwlpZiAocm91dGVyKQorCQluZWlnaF9ub2RlX2ZyZWVfcmVmKHJvdXRlcik7CiB9CiAKIC8qIGNoZWNrcyB3aGV0aGVyIHRoZSBob3N0IHJlc3RhcnRlZCBhbmQgaXMgaW4gdGhlIHByb3RlY3Rpb24gdGltZS4KQEAgLTU5NywxMiArNTk3LDE0IEBACiAKIHZvaWQgcmVjZWl2ZV9iYXRfcGFja2V0KHN0cnVjdCBldGhoZHIgKmV0aGhkciwKIAkJCXN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0LAotCQkJdW5zaWduZWQgY2hhciAqaG5hX2J1ZmYsIGludCBobmFfYnVmZl9sZW4sCisJCQl1bnNpZ25lZCBjaGFyICp0dF9idWZmLCBpbnQgdHRfYnVmZl9sZW4sCiAJCQlzdHJ1Y3QgaGFyZF9pZmFjZSAqaWZfaW5jb21pbmcpCiB7CiAJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGlmX2luY29taW5nLT5zb2Z0X2lmYWNlKTsKIAlzdHJ1Y3QgaGFyZF9pZmFjZSAqaGFyZF9pZmFjZTsKIAlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25laWdoX25vZGUsICpvcmlnX25vZGU7CisJc3RydWN0IG5laWdoX25vZGUgKnJvdXRlciA9IE5VTEwsICpyb3V0ZXJfcm91dGVyID0gTlVMTDsKKwlzdHJ1Y3QgbmVpZ2hfbm9kZSAqb3JpZ19uZWlnaF9yb3V0ZXIgPSBOVUxMOwogCWNoYXIgaGFzX2RpcmVjdGxpbmtfZmxhZzsKIAljaGFyIGlzX215X2FkZHIgPSAwLCBpc19teV9vcmlnID0gMCwgaXNfbXlfb2xkb3JpZyA9IDA7CiAJY2hhciBpc19icm9hZGNhc3QgPSAwLCBpc19iaWRpcmVjdGlvbmFsLCBpc19zaW5nbGVfaG9wX25laWdoOwpAQCAtNzQ3LDE0ICs3NDksMTUgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJcm91dGVyID0gb3JpZ19ub2RlX2dldF9yb3V0ZXIob3JpZ19ub2RlKTsKKwlpZiAocm91dGVyKQorCQlyb3V0ZXJfcm91dGVyID0gb3JpZ19ub2RlX2dldF9yb3V0ZXIocm91dGVyLT5vcmlnX25vZGUpOworCiAJLyogYXZvaWQgdGVtcG9yYXJ5IHJvdXRpbmcgbG9vcHMgKi8KLQlpZiAoKG9yaWdfbm9kZS0+cm91dGVyKSAmJgotCSAgICAob3JpZ19ub2RlLT5yb3V0ZXItPm9yaWdfbm9kZS0+cm91dGVyKSAmJgotCSAgICAoY29tcGFyZV9ldGgob3JpZ19ub2RlLT5yb3V0ZXItPmFkZHIsCi0JCQkgYmF0bWFuX3BhY2tldC0+cHJldl9zZW5kZXIpKSAmJgorCWlmIChyb3V0ZXIgJiYgcm91dGVyX3JvdXRlciAmJgorCSAgICAoY29tcGFyZV9ldGgocm91dGVyLT5hZGRyLCBiYXRtYW5fcGFja2V0LT5wcmV2X3NlbmRlcikpICYmCiAJICAgICEoY29tcGFyZV9ldGgoYmF0bWFuX3BhY2tldC0+b3JpZywgYmF0bWFuX3BhY2tldC0+cHJldl9zZW5kZXIpKSAmJgotCSAgICAoY29tcGFyZV9ldGgob3JpZ19ub2RlLT5yb3V0ZXItPmFkZHIsCi0JCQkgb3JpZ19ub2RlLT5yb3V0ZXItPm9yaWdfbm9kZS0+cm91dGVyLT5hZGRyKSkpIHsKKwkgICAgKGNvbXBhcmVfZXRoKHJvdXRlci0+YWRkciwgcm91dGVyX3JvdXRlci0+YWRkcikpKSB7CiAJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCiAJCQkiRHJvcCBwYWNrZXQ6IGlnbm9yaW5nIGFsbCByZWJyb2FkY2FzdCBwYWNrZXRzIHRoYXQgIgogCQkJIm1heSBtYWtlIG1lIGxvb3AgKHNlbmRlcjogJXBNKVxuIiwgZXRoaGRyLT5oX3NvdXJjZSk7CkBAIC03NjksOSArNzcyLDExIEBACiAJaWYgKCFvcmlnX25laWdoX25vZGUpCiAJCWdvdG8gb3V0OwogCisJb3JpZ19uZWlnaF9yb3V0ZXIgPSBvcmlnX25vZGVfZ2V0X3JvdXRlcihvcmlnX25laWdoX25vZGUpOworCiAJLyogZHJvcCBwYWNrZXQgaWYgc2VuZGVyIGlzIG5vdCBhIGRpcmVjdCBuZWlnaGJvciBhbmQgaWYgd2UKIAkgKiBkb24ndCByb3V0ZSB0b3dhcmRzIGl0ICovCi0JaWYgKCFpc19zaW5nbGVfaG9wX25laWdoICYmICghb3JpZ19uZWlnaF9ub2RlLT5yb3V0ZXIpKSB7CisJaWYgKCFpc19zaW5nbGVfaG9wX25laWdoICYmICghb3JpZ19uZWlnaF9yb3V0ZXIpKSB7CiAJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCiAJCQkiRHJvcCBwYWNrZXQ6IE9HTSB2aWEgdW5rbm93biBuZWlnaGJvciFcbiIpOwogCQlnb3RvIG91dF9uZWlnaDsKQEAgLTc4OSwxNCArNzk0LDE0IEBACiAJICAgICAoKG9yaWdfbm9kZS0+bGFzdF9yZWFsX3NlcW5vID09IGJhdG1hbl9wYWNrZXQtPnNlcW5vKSAmJgogCSAgICAgIChvcmlnX25vZGUtPmxhc3RfdHRsIC0gMyA8PSBiYXRtYW5fcGFja2V0LT50dGwpKSkpCiAJCXVwZGF0ZV9vcmlnKGJhdF9wcml2LCBvcmlnX25vZGUsIGV0aGhkciwgYmF0bWFuX3BhY2tldCwKLQkJCSAgICBpZl9pbmNvbWluZywgaG5hX2J1ZmYsIGhuYV9idWZmX2xlbiwgaXNfZHVwbGljYXRlKTsKKwkJCSAgICBpZl9pbmNvbWluZywgdHRfYnVmZiwgdHRfYnVmZl9sZW4sIGlzX2R1cGxpY2F0ZSk7CiAKIAkvKiBpcyBzaW5nbGUgaG9wIChkaXJlY3QpIG5laWdoYm9yICovCiAJaWYgKGlzX3NpbmdsZV9ob3BfbmVpZ2gpIHsKIAogCQkvKiBtYXJrIGRpcmVjdCBsaW5rIG9uIGluY29taW5nIGludGVyZmFjZSAqLwogCQlzY2hlZHVsZV9mb3J3YXJkX3BhY2tldChvcmlnX25vZGUsIGV0aGhkciwgYmF0bWFuX3BhY2tldCwKLQkJCQkJMSwgaG5hX2J1ZmZfbGVuLCBpZl9pbmNvbWluZyk7CisJCQkJCTEsIHR0X2J1ZmZfbGVuLCBpZl9pbmNvbWluZyk7CiAKIAkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwgIkZvcndhcmRpbmcgcGFja2V0OiAiCiAJCQkicmVicm9hZGNhc3QgbmVpZ2hib3IgcGFja2V0IHdpdGggZGlyZWN0IGxpbmsgZmxhZ1xuIik7CkBAIC04MTksMTIgKzgyNCwxOSBAQAogCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCiAJCSJGb3J3YXJkaW5nIHBhY2tldDogcmVicm9hZGNhc3Qgb3JpZ2luYXRvciBwYWNrZXRcbiIpOwogCXNjaGVkdWxlX2ZvcndhcmRfcGFja2V0KG9yaWdfbm9kZSwgZXRoaGRyLCBiYXRtYW5fcGFja2V0LAotCQkJCTAsIGhuYV9idWZmX2xlbiwgaWZfaW5jb21pbmcpOworCQkJCTAsIHR0X2J1ZmZfbGVuLCBpZl9pbmNvbWluZyk7CiAKIG91dF9uZWlnaDoKIAlpZiAoKG9yaWdfbmVpZ2hfbm9kZSkgJiYgKCFpc19zaW5nbGVfaG9wX25laWdoKSkKIAkJb3JpZ19ub2RlX2ZyZWVfcmVmKG9yaWdfbmVpZ2hfbm9kZSk7CiBvdXQ6CisJaWYgKHJvdXRlcikKKwkJbmVpZ2hfbm9kZV9mcmVlX3JlZihyb3V0ZXIpOworCWlmIChyb3V0ZXJfcm91dGVyKQorCQluZWlnaF9ub2RlX2ZyZWVfcmVmKHJvdXRlcl9yb3V0ZXIpOworCWlmIChvcmlnX25laWdoX3JvdXRlcikKKwkJbmVpZ2hfbm9kZV9mcmVlX3JlZihvcmlnX25laWdoX3JvdXRlcik7CisKIAlvcmlnX25vZGVfZnJlZV9yZWYob3JpZ19ub2RlKTsKIH0KIApAQCAtODY4LDggKzg4MCw5IEBACiBzdGF0aWMgaW50IHJlY3ZfbXlfaWNtcF9wYWNrZXQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKIAkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzaXplX3QgaWNtcF9sZW4pCiB7CisJc3RydWN0IGhhcmRfaWZhY2UgKnByaW1hcnlfaWYgPSBOVUxMOwogCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSA9IE5VTEw7Ci0Jc3RydWN0IG5laWdoX25vZGUgKm5laWdoX25vZGUgPSBOVUxMOworCXN0cnVjdCBuZWlnaF9ub2RlICpyb3V0ZXIgPSBOVUxMOwogCXN0cnVjdCBpY21wX3BhY2tldF9yciAqaWNtcF9wYWNrZXQ7CiAJaW50IHJldCA9IE5FVF9SWF9EUk9QOwogCkBAIC04ODEsMjggKzg5NCwxOSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoIWJhdF9wcml2LT5wcmltYXJ5X2lmKQorCXByaW1hcnlfaWYgPSBwcmltYXJ5X2lmX2dldF9zZWxlY3RlZChiYXRfcHJpdik7CisJaWYgKCFwcmltYXJ5X2lmKQogCQlnb3RvIG91dDsKIAogCS8qIGFuc3dlciBlY2hvIHJlcXVlc3QgKHBpbmcpICovCiAJLyogZ2V0IHJvdXRpbmcgaW5mb3JtYXRpb24gKi8KLQlyY3VfcmVhZF9sb2NrKCk7CiAJb3JpZ19ub2RlID0gb3JpZ19oYXNoX2ZpbmQoYmF0X3ByaXYsIGljbXBfcGFja2V0LT5vcmlnKTsKLQogCWlmICghb3JpZ19ub2RlKQotCQlnb3RvIHVubG9jazsKKwkJZ290byBvdXQ7CiAKLQluZWlnaF9ub2RlID0gb3JpZ19ub2RlLT5yb3V0ZXI7Ci0KLQlpZiAoIW5laWdoX25vZGUpCi0JCWdvdG8gdW5sb2NrOwotCi0JaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZuZWlnaF9ub2RlLT5yZWZjb3VudCkpIHsKLQkJbmVpZ2hfbm9kZSA9IE5VTEw7Ci0JCWdvdG8gdW5sb2NrOwotCX0KLQotCXJjdV9yZWFkX3VubG9jaygpOworCXJvdXRlciA9IG9yaWdfbm9kZV9nZXRfcm91dGVyKG9yaWdfbm9kZSk7CisJaWYgKCFyb3V0ZXIpCisJCWdvdG8gb3V0OwogCiAJLyogY3JlYXRlIGEgY29weSBvZiB0aGUgc2tiLCBpZiBuZWVkZWQsIHRvIG1vZGlmeSBpdC4gKi8KIAlpZiAoc2tiX2Nvdyhza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSkgPCAwKQpAQCAtOTExLDIwICs5MTUsMTggQEAKIAlpY21wX3BhY2tldCA9IChzdHJ1Y3QgaWNtcF9wYWNrZXRfcnIgKilza2ItPmRhdGE7CiAKIAltZW1jcHkoaWNtcF9wYWNrZXQtPmRzdCwgaWNtcF9wYWNrZXQtPm9yaWcsIEVUSF9BTEVOKTsKLQltZW1jcHkoaWNtcF9wYWNrZXQtPm9yaWcsCi0JCWJhdF9wcml2LT5wcmltYXJ5X2lmLT5uZXRfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShpY21wX3BhY2tldC0+b3JpZywgcHJpbWFyeV9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAlpY21wX3BhY2tldC0+bXNnX3R5cGUgPSBFQ0hPX1JFUExZOwogCWljbXBfcGFja2V0LT50dGwgPSBUVEw7CiAKLQlzZW5kX3NrYl9wYWNrZXQoc2tiLCBuZWlnaF9ub2RlLT5pZl9pbmNvbWluZywgbmVpZ2hfbm9kZS0+YWRkcik7CisJc2VuZF9za2JfcGFja2V0KHNrYiwgcm91dGVyLT5pZl9pbmNvbWluZywgcm91dGVyLT5hZGRyKTsKIAlyZXQgPSBORVRfUlhfU1VDQ0VTUzsKLQlnb3RvIG91dDsKIAotdW5sb2NrOgotCXJjdV9yZWFkX3VubG9jaygpOwogb3V0OgotCWlmIChuZWlnaF9ub2RlKQotCQluZWlnaF9ub2RlX2ZyZWVfcmVmKG5laWdoX25vZGUpOworCWlmIChwcmltYXJ5X2lmKQorCQloYXJkaWZfZnJlZV9yZWYocHJpbWFyeV9pZik7CisJaWYgKHJvdXRlcikKKwkJbmVpZ2hfbm9kZV9mcmVlX3JlZihyb3V0ZXIpOwogCWlmIChvcmlnX25vZGUpCiAJCW9yaWdfbm9kZV9mcmVlX3JlZihvcmlnX25vZGUpOwogCXJldHVybiByZXQ7CkBAIC05MzMsOCArOTM1LDkgQEAKIHN0YXRpYyBpbnQgcmVjdl9pY21wX3R0bF9leGNlZWRlZChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAogCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKKwlzdHJ1Y3QgaGFyZF9pZmFjZSAqcHJpbWFyeV9pZiA9IE5VTEw7CiAJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlID0gTlVMTDsKLQlzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZSA9IE5VTEw7CisJc3RydWN0IG5laWdoX25vZGUgKnJvdXRlciA9IE5VTEw7CiAJc3RydWN0IGljbXBfcGFja2V0ICppY21wX3BhY2tldDsKIAlpbnQgcmV0ID0gTkVUX1JYX0RST1A7CiAKQEAgLTk0OCwyNyArOTUxLDE4IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmICghYmF0X3ByaXYtPnByaW1hcnlfaWYpCisJcHJpbWFyeV9pZiA9IHByaW1hcnlfaWZfZ2V0X3NlbGVjdGVkKGJhdF9wcml2KTsKKwlpZiAoIXByaW1hcnlfaWYpCiAJCWdvdG8gb3V0OwogCiAJLyogZ2V0IHJvdXRpbmcgaW5mb3JtYXRpb24gKi8KLQlyY3VfcmVhZF9sb2NrKCk7CiAJb3JpZ19ub2RlID0gb3JpZ19oYXNoX2ZpbmQoYmF0X3ByaXYsIGljbXBfcGFja2V0LT5vcmlnKTsKLQogCWlmICghb3JpZ19ub2RlKQotCQlnb3RvIHVubG9jazsKKwkJZ290byBvdXQ7CiAKLQluZWlnaF9ub2RlID0gb3JpZ19ub2RlLT5yb3V0ZXI7Ci0KLQlpZiAoIW5laWdoX25vZGUpCi0JCWdvdG8gdW5sb2NrOwotCi0JaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZuZWlnaF9ub2RlLT5yZWZjb3VudCkpIHsKLQkJbmVpZ2hfbm9kZSA9IE5VTEw7Ci0JCWdvdG8gdW5sb2NrOwotCX0KLQotCXJjdV9yZWFkX3VubG9jaygpOworCXJvdXRlciA9IG9yaWdfbm9kZV9nZXRfcm91dGVyKG9yaWdfbm9kZSk7CisJaWYgKCFyb3V0ZXIpCisJCWdvdG8gb3V0OwogCiAJLyogY3JlYXRlIGEgY29weSBvZiB0aGUgc2tiLCBpZiBuZWVkZWQsIHRvIG1vZGlmeSBpdC4gKi8KIAlpZiAoc2tiX2Nvdyhza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSkgPCAwKQpAQCAtOTc3LDIwICs5NzEsMTggQEAKIAlpY21wX3BhY2tldCA9IChzdHJ1Y3QgaWNtcF9wYWNrZXQgKilza2ItPmRhdGE7CiAKIAltZW1jcHkoaWNtcF9wYWNrZXQtPmRzdCwgaWNtcF9wYWNrZXQtPm9yaWcsIEVUSF9BTEVOKTsKLQltZW1jcHkoaWNtcF9wYWNrZXQtPm9yaWcsCi0JCWJhdF9wcml2LT5wcmltYXJ5X2lmLT5uZXRfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShpY21wX3BhY2tldC0+b3JpZywgcHJpbWFyeV9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAlpY21wX3BhY2tldC0+bXNnX3R5cGUgPSBUVExfRVhDRUVERUQ7CiAJaWNtcF9wYWNrZXQtPnR0bCA9IFRUTDsKIAotCXNlbmRfc2tiX3BhY2tldChza2IsIG5laWdoX25vZGUtPmlmX2luY29taW5nLCBuZWlnaF9ub2RlLT5hZGRyKTsKKwlzZW5kX3NrYl9wYWNrZXQoc2tiLCByb3V0ZXItPmlmX2luY29taW5nLCByb3V0ZXItPmFkZHIpOwogCXJldCA9IE5FVF9SWF9TVUNDRVNTOwotCWdvdG8gb3V0OwogCi11bmxvY2s6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiBvdXQ6Ci0JaWYgKG5laWdoX25vZGUpCi0JCW5laWdoX25vZGVfZnJlZV9yZWYobmVpZ2hfbm9kZSk7CisJaWYgKHByaW1hcnlfaWYpCisJCWhhcmRpZl9mcmVlX3JlZihwcmltYXJ5X2lmKTsKKwlpZiAocm91dGVyKQorCQluZWlnaF9ub2RlX2ZyZWVfcmVmKHJvdXRlcik7CiAJaWYgKG9yaWdfbm9kZSkKIAkJb3JpZ19ub2RlX2ZyZWVfcmVmKG9yaWdfbm9kZSk7CiAJcmV0dXJuIHJldDsKQEAgLTEwMDMsNyArOTk1LDcgQEAKIAlzdHJ1Y3QgaWNtcF9wYWNrZXRfcnIgKmljbXBfcGFja2V0OwogCXN0cnVjdCBldGhoZHIgKmV0aGhkcjsKIAlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUgPSBOVUxMOwotCXN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlID0gTlVMTDsKKwlzdHJ1Y3QgbmVpZ2hfbm9kZSAqcm91dGVyID0gTlVMTDsKIAlpbnQgaGRyX3NpemUgPSBzaXplb2Yoc3RydWN0IGljbXBfcGFja2V0KTsKIAlpbnQgcmV0ID0gTkVUX1JYX0RST1A7CiAKQEAgLTEwNTAsMjMgKzEwNDIsMTMgQEAKIAkJcmV0dXJuIHJlY3ZfaWNtcF90dGxfZXhjZWVkZWQoYmF0X3ByaXYsIHNrYik7CiAKIAkvKiBnZXQgcm91dGluZyBpbmZvcm1hdGlvbiAqLwotCXJjdV9yZWFkX2xvY2soKTsKIAlvcmlnX25vZGUgPSBvcmlnX2hhc2hfZmluZChiYXRfcHJpdiwgaWNtcF9wYWNrZXQtPmRzdCk7Ci0KIAlpZiAoIW9yaWdfbm9kZSkKLQkJZ290byB1bmxvY2s7CisJCWdvdG8gb3V0OwogCi0JbmVpZ2hfbm9kZSA9IG9yaWdfbm9kZS0+cm91dGVyOwotCi0JaWYgKCFuZWlnaF9ub2RlKQotCQlnb3RvIHVubG9jazsKLQotCWlmICghYXRvbWljX2luY19ub3RfemVybygmbmVpZ2hfbm9kZS0+cmVmY291bnQpKSB7Ci0JCW5laWdoX25vZGUgPSBOVUxMOwotCQlnb3RvIHVubG9jazsKLQl9Ci0KLQlyY3VfcmVhZF91bmxvY2soKTsKKwlyb3V0ZXIgPSBvcmlnX25vZGVfZ2V0X3JvdXRlcihvcmlnX25vZGUpOworCWlmICghcm91dGVyKQorCQlnb3RvIG91dDsKIAogCS8qIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIHNrYiwgaWYgbmVlZGVkLCB0byBtb2RpZnkgaXQuICovCiAJaWYgKHNrYl9jb3coc2tiLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpIDwgMCkKQEAgLTEwNzgsMjAgKzEwNjAsMTE3IEBACiAJaWNtcF9wYWNrZXQtPnR0bC0tOwogCiAJLyogcm91dGUgaXQgKi8KLQlzZW5kX3NrYl9wYWNrZXQoc2tiLCBuZWlnaF9ub2RlLT5pZl9pbmNvbWluZywgbmVpZ2hfbm9kZS0+YWRkcik7CisJc2VuZF9za2JfcGFja2V0KHNrYiwgcm91dGVyLT5pZl9pbmNvbWluZywgcm91dGVyLT5hZGRyKTsKIAlyZXQgPSBORVRfUlhfU1VDQ0VTUzsKLQlnb3RvIG91dDsKIAotdW5sb2NrOgotCXJjdV9yZWFkX3VubG9jaygpOwogb3V0OgotCWlmIChuZWlnaF9ub2RlKQotCQluZWlnaF9ub2RlX2ZyZWVfcmVmKG5laWdoX25vZGUpOworCWlmIChyb3V0ZXIpCisJCW5laWdoX25vZGVfZnJlZV9yZWYocm91dGVyKTsKIAlpZiAob3JpZ19ub2RlKQogCQlvcmlnX25vZGVfZnJlZV9yZWYob3JpZ19ub2RlKTsKIAlyZXR1cm4gcmV0OwogfQogCisvKiBJbiB0aGUgYm9uZGluZyBjYXNlLCBzZW5kIHRoZSBwYWNrZXRzIGluIGEgcm91bmQKKyAqIHJvYmluIGZhc2hpb24gb3ZlciB0aGUgcmVtYWluaW5nIGludGVyZmFjZXMuCisgKgorICogVGhpcyBtZXRob2Qgcm90YXRlcyB0aGUgYm9uZGluZyBsaXN0IGFuZCBpbmNyZWFzZXMgdGhlCisgKiByZXR1cm5lZCByb3V0ZXIncyByZWZjb3VudC4gKi8KK3N0YXRpYyBzdHJ1Y3QgbmVpZ2hfbm9kZSAqZmluZF9ib25kX3JvdXRlcihzdHJ1Y3Qgb3JpZ19ub2RlICpwcmltYXJ5X29yaWcsCisJCQkJCSAgIHN0cnVjdCBoYXJkX2lmYWNlICpyZWN2X2lmKQoreworCXN0cnVjdCBuZWlnaF9ub2RlICp0bXBfbmVpZ2hfbm9kZTsKKwlzdHJ1Y3QgbmVpZ2hfbm9kZSAqcm91dGVyID0gTlVMTCwgKmZpcnN0X2NhbmRpZGF0ZSA9IE5VTEw7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodG1wX25laWdoX25vZGUsICZwcmltYXJ5X29yaWctPmJvbmRfbGlzdCwKKwkJCQlib25kaW5nX2xpc3QpIHsKKwkJaWYgKCFmaXJzdF9jYW5kaWRhdGUpCisJCQlmaXJzdF9jYW5kaWRhdGUgPSB0bXBfbmVpZ2hfbm9kZTsKKworCQkvKiByZWN2X2lmID09IE5VTEwgb24gdGhlIGZpcnN0IG5vZGUuICovCisJCWlmICh0bXBfbmVpZ2hfbm9kZS0+aWZfaW5jb21pbmcgPT0gcmVjdl9pZikKKwkJCWNvbnRpbnVlOworCisJCWlmICghYXRvbWljX2luY19ub3RfemVybygmdG1wX25laWdoX25vZGUtPnJlZmNvdW50KSkKKwkJCWNvbnRpbnVlOworCisJCXJvdXRlciA9IHRtcF9uZWlnaF9ub2RlOworCQlicmVhazsKKwl9CisKKwkvKiB1c2UgdGhlIGZpcnN0IGNhbmRpZGF0ZSBpZiBub3RoaW5nIHdhcyBmb3VuZC4gKi8KKwlpZiAoIXJvdXRlciAmJiBmaXJzdF9jYW5kaWRhdGUgJiYKKwkgICAgYXRvbWljX2luY19ub3RfemVybygmZmlyc3RfY2FuZGlkYXRlLT5yZWZjb3VudCkpCisJCXJvdXRlciA9IGZpcnN0X2NhbmRpZGF0ZTsKKworCWlmICghcm91dGVyKQorCQlnb3RvIG91dDsKKworCS8qIHNlbGVjdGVkIHNob3VsZCBwb2ludCB0byB0aGUgbmV4dCBlbGVtZW50CisJICogYWZ0ZXIgdGhlIGN1cnJlbnQgcm91dGVyICovCisJc3Bpbl9sb2NrX2JoKCZwcmltYXJ5X29yaWctPm5laWdoX2xpc3RfbG9jayk7CisJLyogdGhpcyBpcyBhIGxpc3RfbW92ZSgpLCB3aGljaCB1bmZvcnR1bmF0ZWx5CisJICogZG9lcyBub3QgZXhpc3QgYXMgcmN1IHZlcnNpb24gKi8KKwlsaXN0X2RlbF9yY3UoJnByaW1hcnlfb3JpZy0+Ym9uZF9saXN0KTsKKwlsaXN0X2FkZF9yY3UoJnByaW1hcnlfb3JpZy0+Ym9uZF9saXN0LAorCQkgICAgICZyb3V0ZXItPmJvbmRpbmdfbGlzdCk7CisJc3Bpbl91bmxvY2tfYmgoJnByaW1hcnlfb3JpZy0+bmVpZ2hfbGlzdF9sb2NrKTsKKworb3V0OgorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiByb3V0ZXI7Cit9CisKKy8qIEludGVyZmFjZSBBbHRlcm5hdGluZzogVXNlIHRoZSBiZXN0IG9mIHRoZQorICogcmVtYWluaW5nIGNhbmRpZGF0ZXMgd2hpY2ggYXJlIG5vdCB1c2luZworICogdGhpcyBpbnRlcmZhY2UuCisgKgorICogSW5jcmVhc2VzIHRoZSByZXR1cm5lZCByb3V0ZXIncyByZWZjb3VudCAqLworc3RhdGljIHN0cnVjdCBuZWlnaF9ub2RlICpmaW5kX2lmYWx0ZXJfcm91dGVyKHN0cnVjdCBvcmlnX25vZGUgKnByaW1hcnlfb3JpZywKKwkJCQkJICAgICAgc3RydWN0IGhhcmRfaWZhY2UgKnJlY3ZfaWYpCit7CisJc3RydWN0IG5laWdoX25vZGUgKnRtcF9uZWlnaF9ub2RlOworCXN0cnVjdCBuZWlnaF9ub2RlICpyb3V0ZXIgPSBOVUxMLCAqZmlyc3RfY2FuZGlkYXRlID0gTlVMTDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0bXBfbmVpZ2hfbm9kZSwgJnByaW1hcnlfb3JpZy0+Ym9uZF9saXN0LAorCQkJCWJvbmRpbmdfbGlzdCkgeworCQlpZiAoIWZpcnN0X2NhbmRpZGF0ZSkKKwkJCWZpcnN0X2NhbmRpZGF0ZSA9IHRtcF9uZWlnaF9ub2RlOworCisJCS8qIHJlY3ZfaWYgPT0gTlVMTCBvbiB0aGUgZmlyc3Qgbm9kZS4gKi8KKwkJaWYgKHRtcF9uZWlnaF9ub2RlLT5pZl9pbmNvbWluZyA9PSByZWN2X2lmKQorCQkJY29udGludWU7CisKKwkJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZ0bXBfbmVpZ2hfbm9kZS0+cmVmY291bnQpKQorCQkJY29udGludWU7CisKKwkJLyogaWYgd2UgZG9uJ3QgaGF2ZSBhIHJvdXRlciB5ZXQKKwkJICogb3IgdGhpcyBvbmUgaXMgYmV0dGVyLCBjaG9vc2UgaXQuICovCisJCWlmICgoIXJvdXRlcikgfHwKKwkJICAgICh0bXBfbmVpZ2hfbm9kZS0+dHFfYXZnID4gcm91dGVyLT50cV9hdmcpKSB7CisJCQkvKiBkZWNyZW1lbnQgcmVmY291bnQgb2YKKwkJCSAqIHByZXZpb3VzbHkgc2VsZWN0ZWQgcm91dGVyICovCisJCQlpZiAocm91dGVyKQorCQkJCW5laWdoX25vZGVfZnJlZV9yZWYocm91dGVyKTsKKworCQkJcm91dGVyID0gdG1wX25laWdoX25vZGU7CisJCQlhdG9taWNfaW5jX25vdF96ZXJvKCZyb3V0ZXItPnJlZmNvdW50KTsKKwkJfQorCisJCW5laWdoX25vZGVfZnJlZV9yZWYodG1wX25laWdoX25vZGUpOworCX0KKworCS8qIHVzZSB0aGUgZmlyc3QgY2FuZGlkYXRlIGlmIG5vdGhpbmcgd2FzIGZvdW5kLiAqLworCWlmICghcm91dGVyICYmIGZpcnN0X2NhbmRpZGF0ZSAmJgorCSAgICBhdG9taWNfaW5jX25vdF96ZXJvKCZmaXJzdF9jYW5kaWRhdGUtPnJlZmNvdW50KSkKKwkJcm91dGVyID0gZmlyc3RfY2FuZGlkYXRlOworCisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIHJvdXRlcjsKK30KKwogLyogZmluZCBhIHN1aXRhYmxlIHJvdXRlciBmb3IgdGhpcyBvcmlnaW5hdG9yLCBhbmQgdXNlCiAgKiBib25kaW5nIGlmIHBvc3NpYmxlLiBpbmNyZWFzZXMgdGhlIGZvdW5kIG5laWdoYm9ycwogICogcmVmY291bnQuKi8KQEAgLTExMDEsMTUgKzExODAsMTYgQEAKIHsKIAlzdHJ1Y3Qgb3JpZ19ub2RlICpwcmltYXJ5X29yaWdfbm9kZTsKIAlzdHJ1Y3Qgb3JpZ19ub2RlICpyb3V0ZXJfb3JpZzsKLQlzdHJ1Y3QgbmVpZ2hfbm9kZSAqcm91dGVyLCAqZmlyc3RfY2FuZGlkYXRlLCAqdG1wX25laWdoX25vZGU7CisJc3RydWN0IG5laWdoX25vZGUgKnJvdXRlcjsKIAlzdGF0aWMgdWludDhfdCB6ZXJvX21hY1tFVEhfQUxFTl0gPSB7MCwgMCwgMCwgMCwgMCwgMH07CiAJaW50IGJvbmRpbmdfZW5hYmxlZDsKIAogCWlmICghb3JpZ19ub2RlKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmICghb3JpZ19ub2RlLT5yb3V0ZXIpCi0JCXJldHVybiBOVUxMOworCXJvdXRlciA9IG9yaWdfbm9kZV9nZXRfcm91dGVyKG9yaWdfbm9kZSk7CisJaWYgKCFyb3V0ZXIpCisJCWdvdG8gZXJyOwogCiAJLyogd2l0aG91dCBib25kaW5nLCB0aGUgZmlyc3Qgbm9kZSBzaG91bGQKIAkgKiBhbHdheXMgY2hvb3NlIHRoZSBkZWZhdWx0IHJvdXRlci4gKi8KQEAgLTExMTcsMTIgKzExOTcsOSBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCS8qIHNlbGVjdCBkZWZhdWx0IHJvdXRlciB0byBvdXRwdXQgKi8KLQlyb3V0ZXIgPSBvcmlnX25vZGUtPnJvdXRlcjsKLQlyb3V0ZXJfb3JpZyA9IG9yaWdfbm9kZS0+cm91dGVyLT5vcmlnX25vZGU7Ci0JaWYgKCFyb3V0ZXJfb3JpZyB8fCAhYXRvbWljX2luY19ub3RfemVybygmcm91dGVyLT5yZWZjb3VudCkpIHsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybiBOVUxMOwotCX0KKwlyb3V0ZXJfb3JpZyA9IHJvdXRlci0+b3JpZ19ub2RlOworCWlmICghcm91dGVyX29yaWcpCisJCWdvdG8gZXJyX3VubG9jazsKIAogCWlmICgoIXJlY3ZfaWYpICYmICghYm9uZGluZ19lbmFibGVkKSkKIAkJZ290byByZXR1cm5fcm91dGVyOwpAQCAtMTE1MSw5MSArMTIyOCwyNiBAQAogCWlmIChhdG9taWNfcmVhZCgmcHJpbWFyeV9vcmlnX25vZGUtPmJvbmRfY2FuZGlkYXRlcykgPCAyKQogCQlnb3RvIHJldHVybl9yb3V0ZXI7CiAKLQogCS8qIGFsbCBub2RlcyBiZXR3ZWVuIHNob3VsZCBjaG9vc2UgYSBjYW5kaWRhdGUgd2hpY2gKIAkgKiBpcyBpcyBub3Qgb24gdGhlIGludGVyZmFjZSB3aGVyZSB0aGUgcGFja2V0IGNhbWUKIAkgKiBpbi4gKi8KIAogCW5laWdoX25vZGVfZnJlZV9yZWYocm91dGVyKTsKLQlmaXJzdF9jYW5kaWRhdGUgPSBOVUxMOwotCXJvdXRlciA9IE5VTEw7CiAKLQlpZiAoYm9uZGluZ19lbmFibGVkKSB7Ci0JCS8qIGluIHRoZSBib25kaW5nIGNhc2UsIHNlbmQgdGhlIHBhY2tldHMgaW4gYSByb3VuZAotCQkgKiByb2JpbiBmYXNoaW9uIG92ZXIgdGhlIHJlbWFpbmluZyBpbnRlcmZhY2VzLiAqLworCWlmIChib25kaW5nX2VuYWJsZWQpCisJCXJvdXRlciA9IGZpbmRfYm9uZF9yb3V0ZXIocHJpbWFyeV9vcmlnX25vZGUsIHJlY3ZfaWYpOworCWVsc2UKKwkJcm91dGVyID0gZmluZF9pZmFsdGVyX3JvdXRlcihwcmltYXJ5X29yaWdfbm9kZSwgcmVjdl9pZik7CiAKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodG1wX25laWdoX25vZGUsCi0JCQkJJnByaW1hcnlfb3JpZ19ub2RlLT5ib25kX2xpc3QsIGJvbmRpbmdfbGlzdCkgewotCQkJaWYgKCFmaXJzdF9jYW5kaWRhdGUpCi0JCQkJZmlyc3RfY2FuZGlkYXRlID0gdG1wX25laWdoX25vZGU7Ci0JCQkvKiByZWN2X2lmID09IE5VTEwgb24gdGhlIGZpcnN0IG5vZGUuICovCi0JCQlpZiAodG1wX25laWdoX25vZGUtPmlmX2luY29taW5nICE9IHJlY3ZfaWYgJiYKLQkJCSAgICBhdG9taWNfaW5jX25vdF96ZXJvKCZ0bXBfbmVpZ2hfbm9kZS0+cmVmY291bnQpKSB7Ci0JCQkJcm91dGVyID0gdG1wX25laWdoX25vZGU7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQkvKiB1c2UgdGhlIGZpcnN0IGNhbmRpZGF0ZSBpZiBub3RoaW5nIHdhcyBmb3VuZC4gKi8KLQkJaWYgKCFyb3V0ZXIgJiYgZmlyc3RfY2FuZGlkYXRlICYmCi0JCSAgICBhdG9taWNfaW5jX25vdF96ZXJvKCZmaXJzdF9jYW5kaWRhdGUtPnJlZmNvdW50KSkKLQkJCXJvdXRlciA9IGZpcnN0X2NhbmRpZGF0ZTsKLQotCQlpZiAoIXJvdXRlcikgewotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCi0JCS8qIHNlbGVjdGVkIHNob3VsZCBwb2ludCB0byB0aGUgbmV4dCBlbGVtZW50Ci0JCSAqIGFmdGVyIHRoZSBjdXJyZW50IHJvdXRlciAqLwotCQlzcGluX2xvY2tfYmgoJnByaW1hcnlfb3JpZ19ub2RlLT5uZWlnaF9saXN0X2xvY2spOwotCQkvKiB0aGlzIGlzIGEgbGlzdF9tb3ZlKCksIHdoaWNoIHVuZm9ydHVuYXRlbHkKLQkJICogZG9lcyBub3QgZXhpc3QgYXMgcmN1IHZlcnNpb24gKi8KLQkJbGlzdF9kZWxfcmN1KCZwcmltYXJ5X29yaWdfbm9kZS0+Ym9uZF9saXN0KTsKLQkJbGlzdF9hZGRfcmN1KCZwcmltYXJ5X29yaWdfbm9kZS0+Ym9uZF9saXN0LAotCQkJCSZyb3V0ZXItPmJvbmRpbmdfbGlzdCk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZwcmltYXJ5X29yaWdfbm9kZS0+bmVpZ2hfbGlzdF9sb2NrKTsKLQotCX0gZWxzZSB7Ci0JCS8qIGlmIGJvbmRpbmcgaXMgZGlzYWJsZWQsIHVzZSB0aGUgYmVzdCBvZiB0aGUKLQkJICogcmVtYWluaW5nIGNhbmRpZGF0ZXMgd2hpY2ggYXJlIG5vdCB1c2luZwotCQkgKiB0aGlzIGludGVyZmFjZS4gKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodG1wX25laWdoX25vZGUsCi0JCQkmcHJpbWFyeV9vcmlnX25vZGUtPmJvbmRfbGlzdCwgYm9uZGluZ19saXN0KSB7Ci0JCQlpZiAoIWZpcnN0X2NhbmRpZGF0ZSkKLQkJCQlmaXJzdF9jYW5kaWRhdGUgPSB0bXBfbmVpZ2hfbm9kZTsKLQotCQkJLyogcmVjdl9pZiA9PSBOVUxMIG9uIHRoZSBmaXJzdCBub2RlLiAqLwotCQkJaWYgKHRtcF9uZWlnaF9ub2RlLT5pZl9pbmNvbWluZyA9PSByZWN2X2lmKQotCQkJCWNvbnRpbnVlOwotCi0JCQlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oJnRtcF9uZWlnaF9ub2RlLT5yZWZjb3VudCkpCi0JCQkJY29udGludWU7Ci0KLQkJCS8qIGlmIHdlIGRvbid0IGhhdmUgYSByb3V0ZXIgeWV0Ci0JCQkgKiBvciB0aGlzIG9uZSBpcyBiZXR0ZXIsIGNob29zZSBpdC4gKi8KLQkJCWlmICgoIXJvdXRlcikgfHwKLQkJCSAgICAodG1wX25laWdoX25vZGUtPnRxX2F2ZyA+IHJvdXRlci0+dHFfYXZnKSkgewotCQkJCS8qIGRlY3JlbWVudCByZWZjb3VudCBvZgotCQkJCSAqIHByZXZpb3VzbHkgc2VsZWN0ZWQgcm91dGVyICovCi0JCQkJaWYgKHJvdXRlcikKLQkJCQkJbmVpZ2hfbm9kZV9mcmVlX3JlZihyb3V0ZXIpOwotCi0JCQkJcm91dGVyID0gdG1wX25laWdoX25vZGU7Ci0JCQkJYXRvbWljX2luY19ub3RfemVybygmcm91dGVyLT5yZWZjb3VudCk7Ci0JCQl9Ci0KLQkJCW5laWdoX25vZGVfZnJlZV9yZWYodG1wX25laWdoX25vZGUpOwotCQl9Ci0KLQkJLyogdXNlIHRoZSBmaXJzdCBjYW5kaWRhdGUgaWYgbm90aGluZyB3YXMgZm91bmQuICovCi0JCWlmICghcm91dGVyICYmIGZpcnN0X2NhbmRpZGF0ZSAmJgotCQkgICAgYXRvbWljX2luY19ub3RfemVybygmZmlyc3RfY2FuZGlkYXRlLT5yZWZjb3VudCkpCi0JCQlyb3V0ZXIgPSBmaXJzdF9jYW5kaWRhdGU7Ci0JfQogcmV0dXJuX3JvdXRlcjoKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gcm91dGVyOworZXJyX3VubG9jazoKKwlyY3VfcmVhZF91bmxvY2soKTsKK2VycjoKKwlpZiAocm91dGVyKQorCQluZWlnaF9ub2RlX2ZyZWVfcmVmKHJvdXRlcik7CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQgY2hlY2tfdW5pY2FzdF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhkcl9zaXplKQpAQCAtMTI4NCwxMyArMTI5NiwxMCBAQAogCX0KIAogCS8qIGdldCByb3V0aW5nIGluZm9ybWF0aW9uICovCi0JcmN1X3JlYWRfbG9jaygpOwogCW9yaWdfbm9kZSA9IG9yaWdfaGFzaF9maW5kKGJhdF9wcml2LCB1bmljYXN0X3BhY2tldC0+ZGVzdCk7CiAKIAlpZiAoIW9yaWdfbm9kZSkKLQkJZ290byB1bmxvY2s7Ci0KLQlyY3VfcmVhZF91bmxvY2soKTsKKwkJZ290byBvdXQ7CiAKIAkvKiBmaW5kX3JvdXRlcigpIGluY3JlYXNlcyBuZWlnaF9ub2RlcyByZWZjb3VudCBpZiBmb3VuZC4gKi8KIAluZWlnaF9ub2RlID0gZmluZF9yb3V0ZXIoYmF0X3ByaXYsIG9yaWdfbm9kZSwgcmVjdl9pZik7CkBAIC0xMzM2LDEwICsxMzQ1LDcgQEAKIAkvKiByb3V0ZSBpdCAqLwogCXNlbmRfc2tiX3BhY2tldChza2IsIG5laWdoX25vZGUtPmlmX2luY29taW5nLCBuZWlnaF9ub2RlLT5hZGRyKTsKIAlyZXQgPSBORVRfUlhfU1VDQ0VTUzsKLQlnb3RvIG91dDsKIAotdW5sb2NrOgotCXJjdV9yZWFkX3VubG9jaygpOwogb3V0OgogCWlmIChuZWlnaF9ub2RlKQogCQluZWlnaF9ub2RlX2ZyZWVfcmVmKG5laWdoX25vZGUpOwpAQCAtMTQzOCwxMyArMTQ0NCwxMCBAQAogCWlmIChiY2FzdF9wYWNrZXQtPnR0bCA8IDIpCiAJCWdvdG8gb3V0OwogCi0JcmN1X3JlYWRfbG9jaygpOwogCW9yaWdfbm9kZSA9IG9yaWdfaGFzaF9maW5kKGJhdF9wcml2LCBiY2FzdF9wYWNrZXQtPm9yaWcpOwogCiAJaWYgKCFvcmlnX25vZGUpCi0JCWdvdG8gcmN1X3VubG9jazsKLQotCXJjdV9yZWFkX3VubG9jaygpOworCQlnb3RvIG91dDsKIAogCXNwaW5fbG9ja19iaCgmb3JpZ19ub2RlLT5iY2FzdF9zZXFub19sb2NrKTsKIApAQCAtMTQ3NSw5ICsxNDc4LDYgQEAKIAlyZXQgPSBORVRfUlhfU1VDQ0VTUzsKIAlnb3RvIG91dDsKIAotcmN1X3VubG9jazoKLQlyY3VfcmVhZF91bmxvY2soKTsKLQlnb3RvIG91dDsKIHNwaW5fdW5sb2NrOgogCXNwaW5fdW5sb2NrX2JoKCZvcmlnX25vZGUtPmJjYXN0X3NlcW5vX2xvY2spOwogb3V0OgpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvcm91dGluZy5oIGIvbmV0L2JhdG1hbi1hZHYvcm91dGluZy5oCmluZGV4IGI1YTA2NGMuLjg3MGYyOTggMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L3JvdXRpbmcuaAorKysgYi9uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmgKQEAgLTI1LDExICsyNSwxMSBAQAogdm9pZCBzbGlkZV9vd25fYmNhc3Rfd2luZG93KHN0cnVjdCBoYXJkX2lmYWNlICpoYXJkX2lmYWNlKTsKIHZvaWQgcmVjZWl2ZV9iYXRfcGFja2V0KHN0cnVjdCBldGhoZHIgKmV0aGhkciwKIAkJCQlzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldCwKLQkJCQl1bnNpZ25lZCBjaGFyICpobmFfYnVmZiwgaW50IGhuYV9idWZmX2xlbiwKKwkJCQl1bnNpZ25lZCBjaGFyICp0dF9idWZmLCBpbnQgdHRfYnVmZl9sZW4sCiAJCQkJc3RydWN0IGhhcmRfaWZhY2UgKmlmX2luY29taW5nKTsKIHZvaWQgdXBkYXRlX3JvdXRlcyhzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LCBzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsCi0JCSAgIHN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlLCB1bnNpZ25lZCBjaGFyICpobmFfYnVmZiwKLQkJICAgaW50IGhuYV9idWZmX2xlbik7CisJCSAgIHN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlLCB1bnNpZ25lZCBjaGFyICp0dF9idWZmLAorCQkgICBpbnQgdHRfYnVmZl9sZW4pOwogaW50IHJvdXRlX3VuaWNhc3RfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoYXJkX2lmYWNlICpyZWN2X2lmKTsKIGludCByZWN2X2ljbXBfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoYXJkX2lmYWNlICpyZWN2X2lmKTsKIGludCByZWN2X3VuaWNhc3RfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoYXJkX2lmYWNlICpyZWN2X2lmKTsKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3NlbmQuYyBiL25ldC9iYXRtYW4tYWR2L3NlbmQuYwppbmRleCBkNDllNTRkLi4zMzc3OTI3IDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9zZW5kLmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvc2VuZC5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIAkvKiBhZGp1c3QgYWxsIGZsYWdzIGFuZCBsb2cgcGFja2V0cyAqLwogCXdoaWxlIChhZ2dyZWdhdGVkX3BhY2tldChidWZmX3BvcywKIAkJCQkgZm9yd19wYWNrZXQtPnBhY2tldF9sZW4sCi0JCQkJIGJhdG1hbl9wYWNrZXQtPm51bV9obmEpKSB7CisJCQkJIGJhdG1hbl9wYWNrZXQtPm51bV90dCkpIHsKIAogCQkvKiB3ZSBtaWdodCBoYXZlIGFnZ3JlZ2F0ZWQgZGlyZWN0IGxpbmsgcGFja2V0cyB3aXRoIGFuCiAJCSAqIG9yZGluYXJ5IGJhc2UgcGFja2V0ICovCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAkJCWhhcmRfaWZhY2UtPm5ldF9kZXYtPmRldl9hZGRyKTsKIAogCQlidWZmX3BvcyArPSBzaXplb2Yoc3RydWN0IGJhdG1hbl9wYWNrZXQpICsKLQkJCShiYXRtYW5fcGFja2V0LT5udW1faG5hICogRVRIX0FMRU4pOworCQkJKGJhdG1hbl9wYWNrZXQtPm51bV90dCAqIEVUSF9BTEVOKTsKIAkJcGFja2V0X251bSsrOwogCQliYXRtYW5fcGFja2V0ID0gKHN0cnVjdCBiYXRtYW5fcGFja2V0ICopCiAJCQkoZm9yd19wYWNrZXQtPnNrYi0+ZGF0YSArIGJ1ZmZfcG9zKTsKQEAgLTIyMiw3ICsyMjIsNyBAQAogCXN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0OwogCiAJbmV3X2xlbiA9IHNpemVvZihzdHJ1Y3QgYmF0bWFuX3BhY2tldCkgKwotCQkJKGJhdF9wcml2LT5udW1fbG9jYWxfaG5hICogRVRIX0FMRU4pOworCQkJKGJhdF9wcml2LT5udW1fbG9jYWxfdHQgKiBFVEhfQUxFTik7CiAJbmV3X2J1ZmYgPSBrbWFsbG9jKG5ld19sZW4sIEdGUF9BVE9NSUMpOwogCiAJLyoga2VlcCBvbGQgYnVmZmVyIGlmIGttYWxsb2Mgc2hvdWxkIGZhaWwgKi8KQEAgLTIzMSw3ICsyMzEsNyBAQAogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBiYXRtYW5fcGFja2V0KSk7CiAJCWJhdG1hbl9wYWNrZXQgPSAoc3RydWN0IGJhdG1hbl9wYWNrZXQgKiluZXdfYnVmZjsKIAotCQliYXRtYW5fcGFja2V0LT5udW1faG5hID0gaG5hX2xvY2FsX2ZpbGxfYnVmZmVyKGJhdF9wcml2LAorCQliYXRtYW5fcGFja2V0LT5udW1fdHQgPSB0dF9sb2NhbF9maWxsX2J1ZmZlcihiYXRfcHJpdiwKIAkJCQluZXdfYnVmZiArIHNpemVvZihzdHJ1Y3QgYmF0bWFuX3BhY2tldCksCiAJCQkJbmV3X2xlbiAtIHNpemVvZihzdHJ1Y3QgYmF0bWFuX3BhY2tldCkpOwogCkBAIC0yNDQsNiArMjQ0LDcgQEAKIHZvaWQgc2NoZWR1bGVfb3duX3BhY2tldChzdHJ1Y3QgaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSkKIHsKIAlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoaGFyZF9pZmFjZS0+c29mdF9pZmFjZSk7CisJc3RydWN0IGhhcmRfaWZhY2UgKnByaW1hcnlfaWY7CiAJdW5zaWduZWQgbG9uZyBzZW5kX3RpbWU7CiAJc3RydWN0IGJhdG1hbl9wYWNrZXQgKmJhdG1hbl9wYWNrZXQ7CiAJaW50IHZpc19zZXJ2ZXI7CkBAIC0yNTMsNiArMjU0LDcgQEAKIAkJcmV0dXJuOwogCiAJdmlzX3NlcnZlciA9IGF0b21pY19yZWFkKCZiYXRfcHJpdi0+dmlzX21vZGUpOworCXByaW1hcnlfaWYgPSBwcmltYXJ5X2lmX2dldF9zZWxlY3RlZChiYXRfcHJpdik7CiAKIAkvKioKIAkgKiB0aGUgaW50ZXJmYWNlIGdldHMgYWN0aXZhdGVkIGhlcmUgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIGJldHdlZW4KQEAgLTI2NCw5ICsyNjYsOSBAQAogCWlmIChoYXJkX2lmYWNlLT5pZl9zdGF0dXMgPT0gSUZfVE9fQkVfQUNUSVZBVEVEKQogCQloYXJkX2lmYWNlLT5pZl9zdGF0dXMgPSBJRl9BQ1RJVkU7CiAKLQkvKiBpZiBsb2NhbCBobmEgaGFzIGNoYW5nZWQgYW5kIGludGVyZmFjZSBpcyBhIHByaW1hcnkgaW50ZXJmYWNlICovCi0JaWYgKChhdG9taWNfcmVhZCgmYmF0X3ByaXYtPmhuYV9sb2NhbF9jaGFuZ2VkKSkgJiYKLQkgICAgKGhhcmRfaWZhY2UgPT0gYmF0X3ByaXYtPnByaW1hcnlfaWYpKQorCS8qIGlmIGxvY2FsIHR0IGhhcyBjaGFuZ2VkIGFuZCBpbnRlcmZhY2UgaXMgYSBwcmltYXJ5IGludGVyZmFjZSAqLworCWlmICgoYXRvbWljX3JlYWQoJmJhdF9wcml2LT50dF9sb2NhbF9jaGFuZ2VkKSkgJiYKKwkgICAgKGhhcmRfaWZhY2UgPT0gcHJpbWFyeV9pZikpCiAJCXJlYnVpbGRfYmF0bWFuX3BhY2tldChiYXRfcHJpdiwgaGFyZF9pZmFjZSk7CiAKIAkvKioKQEAgLTI4NCw3ICsyODYsNyBAQAogCWVsc2UKIAkJYmF0bWFuX3BhY2tldC0+ZmxhZ3MgJj0gflZJU19TRVJWRVI7CiAKLQlpZiAoKGhhcmRfaWZhY2UgPT0gYmF0X3ByaXYtPnByaW1hcnlfaWYpICYmCisJaWYgKChoYXJkX2lmYWNlID09IHByaW1hcnlfaWYpICYmCiAJICAgIChhdG9taWNfcmVhZCgmYmF0X3ByaXYtPmd3X21vZGUpID09IEdXX01PREVfU0VSVkVSKSkKIAkJYmF0bWFuX3BhY2tldC0+Z3dfZmxhZ3MgPQogCQkJCSh1aW50OF90KWF0b21pY19yZWFkKCZiYXRfcHJpdi0+Z3dfYmFuZHdpZHRoKTsKQEAgLTI5OSwxNSArMzAxLDE5IEBACiAJCQkgICAgICAgaGFyZF9pZmFjZS0+cGFja2V0X2J1ZmYsCiAJCQkgICAgICAgaGFyZF9pZmFjZS0+cGFja2V0X2xlbiwKIAkJCSAgICAgICBoYXJkX2lmYWNlLCAxLCBzZW5kX3RpbWUpOworCisJaWYgKHByaW1hcnlfaWYpCisJCWhhcmRpZl9mcmVlX3JlZihwcmltYXJ5X2lmKTsKIH0KIAogdm9pZCBzY2hlZHVsZV9mb3J3YXJkX3BhY2tldChzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsCiAJCQkgICAgIHN0cnVjdCBldGhoZHIgKmV0aGhkciwKIAkJCSAgICAgc3RydWN0IGJhdG1hbl9wYWNrZXQgKmJhdG1hbl9wYWNrZXQsCi0JCQkgICAgIHVpbnQ4X3QgZGlyZWN0bGluaywgaW50IGhuYV9idWZmX2xlbiwKKwkJCSAgICAgdWludDhfdCBkaXJlY3RsaW5rLCBpbnQgdHRfYnVmZl9sZW4sCiAJCQkgICAgIHN0cnVjdCBoYXJkX2lmYWNlICppZl9pbmNvbWluZykKIHsKIAlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoaWZfaW5jb21pbmctPnNvZnRfaWZhY2UpOworCXN0cnVjdCBuZWlnaF9ub2RlICpyb3V0ZXI7CiAJdW5zaWduZWQgY2hhciBpbl90cSwgaW5fdHRsLCB0cV9hdmcgPSAwOwogCXVuc2lnbmVkIGxvbmcgc2VuZF90aW1lOwogCkBAIC0zMTYsNiArMzIyLDggQEAKIAkJcmV0dXJuOwogCX0KIAorCXJvdXRlciA9IG9yaWdfbm9kZV9nZXRfcm91dGVyKG9yaWdfbm9kZSk7CisKIAlpbl90cSA9IGJhdG1hbl9wYWNrZXQtPnRxOwogCWluX3R0bCA9IGJhdG1hbl9wYWNrZXQtPnR0bDsKIApAQCAtMzI0LDIwICszMzIsMjIgQEAKIAogCS8qIHJlYnJvYWRjYXN0IHRxIG9mIG91ciBiZXN0IHJhbmtpbmcgbmVpZ2hib3IgdG8gZW5zdXJlIHRoZSByZWJyb2FkY2FzdAogCSAqIG9mIG91ciBiZXN0IHRxIHZhbHVlICovCi0JaWYgKChvcmlnX25vZGUtPnJvdXRlcikgJiYgKG9yaWdfbm9kZS0+cm91dGVyLT50cV9hdmcgIT0gMCkpIHsKKwlpZiAocm91dGVyICYmIHJvdXRlci0+dHFfYXZnICE9IDApIHsKIAogCQkvKiByZWJyb2FkY2FzdCBvZ20gb2YgYmVzdCByYW5raW5nIG5laWdoYm9yIGFzIGlzICovCi0JCWlmICghY29tcGFyZV9ldGgob3JpZ19ub2RlLT5yb3V0ZXItPmFkZHIsIGV0aGhkci0+aF9zb3VyY2UpKSB7Ci0JCQliYXRtYW5fcGFja2V0LT50cSA9IG9yaWdfbm9kZS0+cm91dGVyLT50cV9hdmc7CisJCWlmICghY29tcGFyZV9ldGgocm91dGVyLT5hZGRyLCBldGhoZHItPmhfc291cmNlKSkgeworCQkJYmF0bWFuX3BhY2tldC0+dHEgPSByb3V0ZXItPnRxX2F2ZzsKIAotCQkJaWYgKG9yaWdfbm9kZS0+cm91dGVyLT5sYXN0X3R0bCkKLQkJCQliYXRtYW5fcGFja2V0LT50dGwgPSBvcmlnX25vZGUtPnJvdXRlci0+bGFzdF90dGwKLQkJCQkJCQktIDE7CisJCQlpZiAocm91dGVyLT5sYXN0X3R0bCkKKwkJCQliYXRtYW5fcGFja2V0LT50dGwgPSByb3V0ZXItPmxhc3RfdHRsIC0gMTsKIAkJfQogCi0JCXRxX2F2ZyA9IG9yaWdfbm9kZS0+cm91dGVyLT50cV9hdmc7CisJCXRxX2F2ZyA9IHJvdXRlci0+dHFfYXZnOwogCX0KIAorCWlmIChyb3V0ZXIpCisJCW5laWdoX25vZGVfZnJlZV9yZWYocm91dGVyKTsKKwogCS8qIGFwcGx5IGhvcCBwZW5hbHR5ICovCiAJYmF0bWFuX3BhY2tldC0+dHEgPSBob3BfcGVuYWx0eShiYXRtYW5fcGFja2V0LT50cSwgYmF0X3ByaXYpOwogCkBAIC0zNTksNyArMzY5LDcgQEAKIAlzZW5kX3RpbWUgPSBmb3J3YXJkX3NlbmRfdGltZSgpOwogCWFkZF9iYXRfcGFja2V0X3RvX2xpc3QoYmF0X3ByaXYsCiAJCQkgICAgICAgKHVuc2lnbmVkIGNoYXIgKiliYXRtYW5fcGFja2V0LAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgYmF0bWFuX3BhY2tldCkgKyBobmFfYnVmZl9sZW4sCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBiYXRtYW5fcGFja2V0KSArIHR0X2J1ZmZfbGVuLAogCQkJICAgICAgIGlmX2luY29taW5nLCAwLCBzZW5kX3RpbWUpOwogfQogCkBAIC0zNjcsNiArMzc3LDggQEAKIHsKIAlpZiAoZm9yd19wYWNrZXQtPnNrYikKIAkJa2ZyZWVfc2tiKGZvcndfcGFja2V0LT5za2IpOworCWlmIChmb3J3X3BhY2tldC0+aWZfaW5jb21pbmcpCisJCWhhcmRpZl9mcmVlX3JlZihmb3J3X3BhY2tldC0+aWZfaW5jb21pbmcpOwogCWtmcmVlKGZvcndfcGFja2V0KTsKIH0KIApAQCAtMzg4LDcgKzQwMCw2IEBACiAJCQkgICBzZW5kX3RpbWUpOwogfQogCi0jZGVmaW5lIGF0b21pY19kZWNfbm90X3plcm8odikgICAgICAgICAgYXRvbWljX2FkZF91bmxlc3MoKHYpLCAtMSwgMCkKIC8qIGFkZCBhIGJyb2FkY2FzdCBwYWNrZXQgdG8gdGhlIHF1ZXVlIGFuZCBzZXR1cCB0aW1lcnMuIGJyb2FkY2FzdCBwYWNrZXRzCiAgKiBhcmUgc2VudCBtdWx0aXBsZSB0aW1lcyB0byBpbmNyZWFzZSBwcm9iYWJpbGl0eSBmb3IgYmVlaW5nIHJlY2VpdmVkLgogICoKQEAgLTM5OSw2ICs0MTAsNyBAQAogICogc2tiIGlzIGZyZWVkLiAqLwogaW50IGFkZF9iY2FzdF9wYWNrZXRfdG9fbGlzdChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXN0cnVjdCBoYXJkX2lmYWNlICpwcmltYXJ5X2lmID0gTlVMTDsKIAlzdHJ1Y3QgZm9yd19wYWNrZXQgKmZvcndfcGFja2V0OwogCXN0cnVjdCBiY2FzdF9wYWNrZXQgKmJjYXN0X3BhY2tldDsKIApAQCAtNDA3LDggKzQxOSw5IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmICghYmF0X3ByaXYtPnByaW1hcnlfaWYpCi0JCWdvdG8gb3V0OworCXByaW1hcnlfaWYgPSBwcmltYXJ5X2lmX2dldF9zZWxlY3RlZChiYXRfcHJpdik7CisJaWYgKCFwcmltYXJ5X2lmKQorCQlnb3RvIG91dF9hbmRfaW5jOwogCiAJZm9yd19wYWNrZXQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZm9yd19wYWNrZXQpLCBHRlBfQVRPTUlDKTsKIApAQCAtNDI2LDcgKzQzOSw3IEBACiAJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKIAogCWZvcndfcGFja2V0LT5za2IgPSBza2I7Ci0JZm9yd19wYWNrZXQtPmlmX2luY29taW5nID0gYmF0X3ByaXYtPnByaW1hcnlfaWY7CisJZm9yd19wYWNrZXQtPmlmX2luY29taW5nID0gcHJpbWFyeV9pZjsKIAogCS8qIGhvdyBvZnRlbiBkaWQgd2Ugc2VuZCB0aGUgYmNhc3QgcGFja2V0ID8gKi8KIAlmb3J3X3BhY2tldC0+bnVtX3BhY2tldHMgPSAwOwpAQCAtNDM5LDYgKzQ1Miw4IEBACiBvdXRfYW5kX2luYzoKIAlhdG9taWNfaW5jKCZiYXRfcHJpdi0+YmNhc3RfcXVldWVfbGVmdCk7CiBvdXQ6CisJaWYgKHByaW1hcnlfaWYpCisJCWhhcmRpZl9mcmVlX3JlZihwcmltYXJ5X2lmKTsKIAlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiB9CiAKQEAgLTUyNiw2ICs1NDEsNyBAQAogewogCXN0cnVjdCBmb3J3X3BhY2tldCAqZm9yd19wYWNrZXQ7CiAJc3RydWN0IGhsaXN0X25vZGUgKnRtcF9ub2RlLCAqc2FmZV90bXBfbm9kZTsKKwlib29sIHBlbmRpbmc7CiAKIAlpZiAoaGFyZF9pZmFjZSkKIAkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKQEAgLTU1NCw4ICs1NzAsMTMgQEAKIAkJICogc2VuZF9vdXRzdGFuZGluZ19iY2FzdF9wYWNrZXQoKSB3aWxsIGxvY2sgdGhlIGxpc3QgdG8KIAkJICogZGVsZXRlIHRoZSBpdGVtIGZyb20gdGhlIGxpc3QKIAkJICovCi0JCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZm9yd19wYWNrZXQtPmRlbGF5ZWRfd29yayk7CisJCXBlbmRpbmcgPSBjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmZvcndfcGFja2V0LT5kZWxheWVkX3dvcmspOwogCQlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5mb3J3X2JjYXN0X2xpc3RfbG9jayk7CisKKwkJaWYgKHBlbmRpbmcpIHsKKwkJCWhsaXN0X2RlbCgmZm9yd19wYWNrZXQtPmxpc3QpOworCQkJZm9yd19wYWNrZXRfZnJlZShmb3J3X3BhY2tldCk7CisJCX0KIAl9CiAJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5mb3J3X2JjYXN0X2xpc3RfbG9jayk7CiAKQEAgLTU3OCw4ICs1OTksMTMgQEAKIAkJICogc2VuZF9vdXRzdGFuZGluZ19iYXRfcGFja2V0KCkgd2lsbCBsb2NrIHRoZSBsaXN0IHRvCiAJCSAqIGRlbGV0ZSB0aGUgaXRlbSBmcm9tIHRoZSBsaXN0CiAJCSAqLwotCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmZvcndfcGFja2V0LT5kZWxheWVkX3dvcmspOworCQlwZW5kaW5nID0gY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZmb3J3X3BhY2tldC0+ZGVsYXllZF93b3JrKTsKIAkJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+Zm9yd19iYXRfbGlzdF9sb2NrKTsKKworCQlpZiAocGVuZGluZykgeworCQkJaGxpc3RfZGVsKCZmb3J3X3BhY2tldC0+bGlzdCk7CisJCQlmb3J3X3BhY2tldF9mcmVlKGZvcndfcGFja2V0KTsKKwkJfQogCX0KIAlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmZvcndfYmF0X2xpc3RfbG9jayk7CiB9CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9zZW5kLmggYi9uZXQvYmF0bWFuLWFkdi9zZW5kLmgKaW5kZXggN2IyZmYxOS4uMjQ3MTcyZCAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvc2VuZC5oCisrKyBiL25ldC9iYXRtYW4tYWR2L3NlbmQuaApAQCAtMjksNyArMjksNyBAQAogdm9pZCBzY2hlZHVsZV9mb3J3YXJkX3BhY2tldChzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsCiAJCQkgICAgIHN0cnVjdCBldGhoZHIgKmV0aGhkciwKIAkJCSAgICAgc3RydWN0IGJhdG1hbl9wYWNrZXQgKmJhdG1hbl9wYWNrZXQsCi0JCQkgICAgIHVpbnQ4X3QgZGlyZWN0bGluaywgaW50IGhuYV9idWZmX2xlbiwKKwkJCSAgICAgdWludDhfdCBkaXJlY3RsaW5rLCBpbnQgdHRfYnVmZl9sZW4sCiAJCQkgICAgIHN0cnVjdCBoYXJkX2lmYWNlICppZl9vdXRnb2luZyk7CiBpbnQgYWRkX2JjYXN0X3BhY2tldF90b19saXN0KHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBzZW5kX291dHN0YW5kaW5nX2JhdF9wYWNrZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3NvZnQtaW50ZXJmYWNlLmMgYi9uZXQvYmF0bWFuLWFkdi9zb2Z0LWludGVyZmFjZS5jCmluZGV4IDgyNGUxZjYuLmQ1YWE2MDkgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L3NvZnQtaW50ZXJmYWNlLmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvc29mdC1pbnRlcmZhY2UuYwpAQCAtNDMsOCArNDMsNiBAQAogc3RhdGljIHUzMiBiYXRfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgYmF0X3NldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgdmFsdWUpOwogc3RhdGljIHUzMiBiYXRfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdTMyIGJhdF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgYmF0X3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBiYXRfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncyA9IGJhdF9nZXRfc2V0dGluZ3MsCkBAIC01Miw4ICs1MCw2IEBACiAJLmdldF9tc2dsZXZlbCA9IGJhdF9nZXRfbXNnbGV2ZWwsCiAJLnNldF9tc2dsZXZlbCA9IGJhdF9zZXRfbXNnbGV2ZWwsCiAJLmdldF9saW5rID0gYmF0X2dldF9saW5rLAotCS5nZXRfcnhfY3N1bSA9IGJhdF9nZXRfcnhfY3N1bSwKLQkuc2V0X3J4X2NzdW0gPSBiYXRfc2V0X3J4X2NzdW0KIH07CiAKIGludCBteV9za2JfaGVhZF9wdXNoKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCkBAIC03NiwxMjAgKzcyLDM3MSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzb2Z0aWZfbmVpZ2hfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpCi17Ci0Jc3RydWN0IHNvZnRpZl9uZWlnaCAqc29mdGlmX25laWdoOwotCi0Jc29mdGlmX25laWdoID0gY29udGFpbmVyX29mKHJjdSwgc3RydWN0IHNvZnRpZl9uZWlnaCwgcmN1KTsKLQlrZnJlZShzb2Z0aWZfbmVpZ2gpOwotfQotCiBzdGF0aWMgdm9pZCBzb2Z0aWZfbmVpZ2hfZnJlZV9yZWYoc3RydWN0IHNvZnRpZl9uZWlnaCAqc29mdGlmX25laWdoKQogewogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzb2Z0aWZfbmVpZ2gtPnJlZmNvdW50KSkKLQkJY2FsbF9yY3UoJnNvZnRpZl9uZWlnaC0+cmN1LCBzb2Z0aWZfbmVpZ2hfZnJlZV9yY3UpOworCQlrZnJlZV9yY3Uoc29mdGlmX25laWdoLCByY3UpOwogfQogCi12b2lkIHNvZnRpZl9uZWlnaF9wdXJnZShzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KQorc3RhdGljIHZvaWQgc29mdGlmX25laWdoX3ZpZF9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkKIHsKLQlzdHJ1Y3Qgc29mdGlmX25laWdoICpzb2Z0aWZfbmVpZ2gsICpzb2Z0aWZfbmVpZ2hfdG1wOworCXN0cnVjdCBzb2Z0aWZfbmVpZ2hfdmlkICpzb2Z0aWZfbmVpZ2hfdmlkOworCXN0cnVjdCBzb2Z0aWZfbmVpZ2ggKnNvZnRpZl9uZWlnaDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKm5vZGVfdG1wOworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXY7CisKKwlzb2Z0aWZfbmVpZ2hfdmlkID0gY29udGFpbmVyX29mKHJjdSwgc3RydWN0IHNvZnRpZl9uZWlnaF92aWQsIHJjdSk7CisJYmF0X3ByaXYgPSBzb2Z0aWZfbmVpZ2hfdmlkLT5iYXRfcHJpdjsKIAogCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPnNvZnRpZl9uZWlnaF9sb2NrKTsKLQogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc29mdGlmX25laWdoLCBub2RlLCBub2RlX3RtcCwKLQkJCQkgICZiYXRfcHJpdi0+c29mdGlmX25laWdoX2xpc3QsIGxpc3QpIHsKLQotCQlpZiAoKCF0aW1lX2FmdGVyKGppZmZpZXMsIHNvZnRpZl9uZWlnaC0+bGFzdF9zZWVuICsKLQkJCQltc2Vjc190b19qaWZmaWVzKFNPRlRJRl9ORUlHSF9USU1FT1VUKSkpICYmCi0JCSAgICAoYXRvbWljX3JlYWQoJmJhdF9wcml2LT5tZXNoX3N0YXRlKSA9PSBNRVNIX0FDVElWRSkpCi0JCQljb250aW51ZTsKLQorCQkJCSAgJnNvZnRpZl9uZWlnaF92aWQtPnNvZnRpZl9uZWlnaF9saXN0LCBsaXN0KSB7CiAJCWhsaXN0X2RlbF9yY3UoJnNvZnRpZl9uZWlnaC0+bGlzdCk7Ci0KLQkJaWYgKGJhdF9wcml2LT5zb2Z0aWZfbmVpZ2ggPT0gc29mdGlmX25laWdoKSB7Ci0JCQliYXRfZGJnKERCR19ST1VURVMsIGJhdF9wcml2LAotCQkJCSAiQ3VycmVudCBtZXNoIGV4aXQgcG9pbnQgJyVwTScgdmFuaXNoZWQgIgotCQkJCSAiKHZpZDogJWQpLlxuIiwKLQkJCQkgc29mdGlmX25laWdoLT5hZGRyLCBzb2Z0aWZfbmVpZ2gtPnZpZCk7Ci0JCQlzb2Z0aWZfbmVpZ2hfdG1wID0gYmF0X3ByaXYtPnNvZnRpZl9uZWlnaDsKLQkJCWJhdF9wcml2LT5zb2Z0aWZfbmVpZ2ggPSBOVUxMOwotCQkJc29mdGlmX25laWdoX2ZyZWVfcmVmKHNvZnRpZl9uZWlnaF90bXApOwotCQl9Ci0KIAkJc29mdGlmX25laWdoX2ZyZWVfcmVmKHNvZnRpZl9uZWlnaCk7CiAJfQotCiAJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5zb2Z0aWZfbmVpZ2hfbG9jayk7CisKKwlrZnJlZShzb2Z0aWZfbmVpZ2hfdmlkKTsKK30KKworc3RhdGljIHZvaWQgc29mdGlmX25laWdoX3ZpZF9mcmVlX3JlZihzdHJ1Y3Qgc29mdGlmX25laWdoX3ZpZCAqc29mdGlmX25laWdoX3ZpZCkKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc29mdGlmX25laWdoX3ZpZC0+cmVmY291bnQpKQorCQljYWxsX3JjdSgmc29mdGlmX25laWdoX3ZpZC0+cmN1LCBzb2Z0aWZfbmVpZ2hfdmlkX2ZyZWVfcmN1KTsKK30KKworc3RhdGljIHN0cnVjdCBzb2Z0aWZfbmVpZ2hfdmlkICpzb2Z0aWZfbmVpZ2hfdmlkX2dldChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAorCQkJCQkJICAgICBzaG9ydCB2aWQpCit7CisJc3RydWN0IHNvZnRpZl9uZWlnaF92aWQgKnNvZnRpZl9uZWlnaF92aWQ7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNvZnRpZl9uZWlnaF92aWQsIG5vZGUsCisJCQkJICZiYXRfcHJpdi0+c29mdGlmX25laWdoX3ZpZHMsIGxpc3QpIHsKKwkJaWYgKHNvZnRpZl9uZWlnaF92aWQtPnZpZCAhPSB2aWQpCisJCQljb250aW51ZTsKKworCQlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oJnNvZnRpZl9uZWlnaF92aWQtPnJlZmNvdW50KSkKKwkJCWNvbnRpbnVlOworCisJCWdvdG8gb3V0OworCX0KKworCXNvZnRpZl9uZWlnaF92aWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc29mdGlmX25laWdoX3ZpZCksCisJCQkJICAgR0ZQX0FUT01JQyk7CisJaWYgKCFzb2Z0aWZfbmVpZ2hfdmlkKQorCQlnb3RvIG91dDsKKworCXNvZnRpZl9uZWlnaF92aWQtPnZpZCA9IHZpZDsKKwlzb2Z0aWZfbmVpZ2hfdmlkLT5iYXRfcHJpdiA9IGJhdF9wcml2OworCisJLyogaW5pdGlhbGl6ZSB3aXRoIDIgLSBjYWxsZXIgZGVjcmVtZW50cyBjb3VudGVyIGJ5IG9uZSAqLworCWF0b21pY19zZXQoJnNvZnRpZl9uZWlnaF92aWQtPnJlZmNvdW50LCAyKTsKKwlJTklUX0hMSVNUX0hFQUQoJnNvZnRpZl9uZWlnaF92aWQtPnNvZnRpZl9uZWlnaF9saXN0KTsKKwlJTklUX0hMSVNUX05PREUoJnNvZnRpZl9uZWlnaF92aWQtPmxpc3QpOworCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPnNvZnRpZl9uZWlnaF92aWRfbG9jayk7CisJaGxpc3RfYWRkX2hlYWRfcmN1KCZzb2Z0aWZfbmVpZ2hfdmlkLT5saXN0LAorCQkJICAgJmJhdF9wcml2LT5zb2Z0aWZfbmVpZ2hfdmlkcyk7CisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5zb2Z0aWZfbmVpZ2hfdmlkX2xvY2spOworCitvdXQ6CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIHNvZnRpZl9uZWlnaF92aWQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc29mdGlmX25laWdoICpzb2Z0aWZfbmVpZ2hfZ2V0KHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCiAJCQkJCSAgICAgdWludDhfdCAqYWRkciwgc2hvcnQgdmlkKQogewotCXN0cnVjdCBzb2Z0aWZfbmVpZ2ggKnNvZnRpZl9uZWlnaDsKKwlzdHJ1Y3Qgc29mdGlmX25laWdoX3ZpZCAqc29mdGlmX25laWdoX3ZpZDsKKwlzdHJ1Y3Qgc29mdGlmX25laWdoICpzb2Z0aWZfbmVpZ2ggPSBOVUxMOwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwogCisJc29mdGlmX25laWdoX3ZpZCA9IHNvZnRpZl9uZWlnaF92aWRfZ2V0KGJhdF9wcml2LCB2aWQpOworCWlmICghc29mdGlmX25laWdoX3ZpZCkKKwkJZ290byBvdXQ7CisKIAlyY3VfcmVhZF9sb2NrKCk7CiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNvZnRpZl9uZWlnaCwgbm9kZSwKLQkJCQkgJmJhdF9wcml2LT5zb2Z0aWZfbmVpZ2hfbGlzdCwgbGlzdCkgeworCQkJCSAmc29mdGlmX25laWdoX3ZpZC0+c29mdGlmX25laWdoX2xpc3QsCisJCQkJIGxpc3QpIHsKIAkJaWYgKCFjb21wYXJlX2V0aChzb2Z0aWZfbmVpZ2gtPmFkZHIsIGFkZHIpKQogCQkJY29udGludWU7CiAKLQkJaWYgKHNvZnRpZl9uZWlnaC0+dmlkICE9IHZpZCkKLQkJCWNvbnRpbnVlOwotCiAJCWlmICghYXRvbWljX2luY19ub3RfemVybygmc29mdGlmX25laWdoLT5yZWZjb3VudCkpCiAJCQljb250aW51ZTsKIAogCQlzb2Z0aWZfbmVpZ2gtPmxhc3Rfc2VlbiA9IGppZmZpZXM7Ci0JCWdvdG8gb3V0OworCQlnb3RvIHVubG9jazsKIAl9CiAKIAlzb2Z0aWZfbmVpZ2ggPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc29mdGlmX25laWdoKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFzb2Z0aWZfbmVpZ2gpCi0JCWdvdG8gb3V0OworCQlnb3RvIHVubG9jazsKIAogCW1lbWNweShzb2Z0aWZfbmVpZ2gtPmFkZHIsIGFkZHIsIEVUSF9BTEVOKTsKLQlzb2Z0aWZfbmVpZ2gtPnZpZCA9IHZpZDsKIAlzb2Z0aWZfbmVpZ2gtPmxhc3Rfc2VlbiA9IGppZmZpZXM7CiAJLyogaW5pdGlhbGl6ZSB3aXRoIDIgLSBjYWxsZXIgZGVjcmVtZW50cyBjb3VudGVyIGJ5IG9uZSAqLwogCWF0b21pY19zZXQoJnNvZnRpZl9uZWlnaC0+cmVmY291bnQsIDIpOwogCiAJSU5JVF9ITElTVF9OT0RFKCZzb2Z0aWZfbmVpZ2gtPmxpc3QpOwogCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPnNvZnRpZl9uZWlnaF9sb2NrKTsKLQlobGlzdF9hZGRfaGVhZF9yY3UoJnNvZnRpZl9uZWlnaC0+bGlzdCwgJmJhdF9wcml2LT5zb2Z0aWZfbmVpZ2hfbGlzdCk7CisJaGxpc3RfYWRkX2hlYWRfcmN1KCZzb2Z0aWZfbmVpZ2gtPmxpc3QsCisJCQkgICAmc29mdGlmX25laWdoX3ZpZC0+c29mdGlmX25laWdoX2xpc3QpOworCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+c29mdGlmX25laWdoX2xvY2spOworCit1bmxvY2s6CisJcmN1X3JlYWRfdW5sb2NrKCk7CitvdXQ6CisJaWYgKHNvZnRpZl9uZWlnaF92aWQpCisJCXNvZnRpZl9uZWlnaF92aWRfZnJlZV9yZWYoc29mdGlmX25laWdoX3ZpZCk7CisJcmV0dXJuIHNvZnRpZl9uZWlnaDsKK30KKworc3RhdGljIHN0cnVjdCBzb2Z0aWZfbmVpZ2ggKnNvZnRpZl9uZWlnaF9nZXRfc2VsZWN0ZWQoCisJCQkJc3RydWN0IHNvZnRpZl9uZWlnaF92aWQgKnNvZnRpZl9uZWlnaF92aWQpCit7CisJc3RydWN0IHNvZnRpZl9uZWlnaCAqc29mdGlmX25laWdoOworCisJcmN1X3JlYWRfbG9jaygpOworCXNvZnRpZl9uZWlnaCA9IHJjdV9kZXJlZmVyZW5jZShzb2Z0aWZfbmVpZ2hfdmlkLT5zb2Z0aWZfbmVpZ2gpOworCisJaWYgKHNvZnRpZl9uZWlnaCAmJiAhYXRvbWljX2luY19ub3RfemVybygmc29mdGlmX25laWdoLT5yZWZjb3VudCkpCisJCXNvZnRpZl9uZWlnaCA9IE5VTEw7CisKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gc29mdGlmX25laWdoOworfQorCitzdGF0aWMgc3RydWN0IHNvZnRpZl9uZWlnaCAqc29mdGlmX25laWdoX3ZpZF9nZXRfc2VsZWN0ZWQoCisJCQkJCQlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAorCQkJCQkJc2hvcnQgdmlkKQoreworCXN0cnVjdCBzb2Z0aWZfbmVpZ2hfdmlkICpzb2Z0aWZfbmVpZ2hfdmlkOworCXN0cnVjdCBzb2Z0aWZfbmVpZ2ggKnNvZnRpZl9uZWlnaCA9IE5VTEw7CisKKwlzb2Z0aWZfbmVpZ2hfdmlkID0gc29mdGlmX25laWdoX3ZpZF9nZXQoYmF0X3ByaXYsIHZpZCk7CisJaWYgKCFzb2Z0aWZfbmVpZ2hfdmlkKQorCQlnb3RvIG91dDsKKworCXNvZnRpZl9uZWlnaCA9IHNvZnRpZl9uZWlnaF9nZXRfc2VsZWN0ZWQoc29mdGlmX25laWdoX3ZpZCk7CitvdXQ6CisJaWYgKHNvZnRpZl9uZWlnaF92aWQpCisJCXNvZnRpZl9uZWlnaF92aWRfZnJlZV9yZWYoc29mdGlmX25laWdoX3ZpZCk7CisJcmV0dXJuIHNvZnRpZl9uZWlnaDsKK30KKworc3RhdGljIHZvaWQgc29mdGlmX25laWdoX3ZpZF9zZWxlY3Qoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKKwkJCQkgICAgc3RydWN0IHNvZnRpZl9uZWlnaCAqbmV3X25laWdoLAorCQkJCSAgICBzaG9ydCB2aWQpCit7CisJc3RydWN0IHNvZnRpZl9uZWlnaF92aWQgKnNvZnRpZl9uZWlnaF92aWQ7CisJc3RydWN0IHNvZnRpZl9uZWlnaCAqY3Vycl9uZWlnaDsKKworCXNvZnRpZl9uZWlnaF92aWQgPSBzb2Z0aWZfbmVpZ2hfdmlkX2dldChiYXRfcHJpdiwgdmlkKTsKKwlpZiAoIXNvZnRpZl9uZWlnaF92aWQpCisJCWdvdG8gb3V0OworCisJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+c29mdGlmX25laWdoX2xvY2spOworCisJaWYgKG5ld19uZWlnaCAmJiAhYXRvbWljX2luY19ub3RfemVybygmbmV3X25laWdoLT5yZWZjb3VudCkpCisJCW5ld19uZWlnaCA9IE5VTEw7CisKKwljdXJyX25laWdoID0gc29mdGlmX25laWdoX3ZpZC0+c29mdGlmX25laWdoOworCXJjdV9hc3NpZ25fcG9pbnRlcihzb2Z0aWZfbmVpZ2hfdmlkLT5zb2Z0aWZfbmVpZ2gsIG5ld19uZWlnaCk7CisKKwlpZiAoKGN1cnJfbmVpZ2gpICYmICghbmV3X25laWdoKSkKKwkJYmF0X2RiZyhEQkdfUk9VVEVTLCBiYXRfcHJpdiwKKwkJCSJSZW1vdmluZyBtZXNoIGV4aXQgcG9pbnQgb24gdmlkOiAlZCAocHJldjogJXBNKS5cbiIsCisJCQl2aWQsIGN1cnJfbmVpZ2gtPmFkZHIpOworCWVsc2UgaWYgKChjdXJyX25laWdoKSAmJiAobmV3X25laWdoKSkKKwkJYmF0X2RiZyhEQkdfUk9VVEVTLCBiYXRfcHJpdiwKKwkJCSJDaGFuZ2luZyBtZXNoIGV4aXQgcG9pbnQgb24gdmlkOiAlZCBmcm9tICVwTSAiCisJCQkidG8gJXBNLlxuIiwgdmlkLCBjdXJyX25laWdoLT5hZGRyLCBuZXdfbmVpZ2gtPmFkZHIpOworCWVsc2UgaWYgKCghY3Vycl9uZWlnaCkgJiYgKG5ld19uZWlnaCkpCisJCWJhdF9kYmcoREJHX1JPVVRFUywgYmF0X3ByaXYsCisJCQkiU2V0dGluZyBtZXNoIGV4aXQgcG9pbnQgb24gdmlkOiAlZCB0byAlcE0uXG4iLAorCQkJdmlkLCBuZXdfbmVpZ2gtPmFkZHIpOworCisJaWYgKGN1cnJfbmVpZ2gpCisJCXNvZnRpZl9uZWlnaF9mcmVlX3JlZihjdXJyX25laWdoKTsKKwogCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+c29mdGlmX25laWdoX2xvY2spOwogCiBvdXQ6CisJaWYgKHNvZnRpZl9uZWlnaF92aWQpCisJCXNvZnRpZl9uZWlnaF92aWRfZnJlZV9yZWYoc29mdGlmX25laWdoX3ZpZCk7Cit9CisKK3N0YXRpYyB2b2lkIHNvZnRpZl9uZWlnaF92aWRfZGVzZWxlY3Qoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKKwkJCQkgICAgICBzdHJ1Y3Qgc29mdGlmX25laWdoX3ZpZCAqc29mdGlmX25laWdoX3ZpZCkKK3sKKwlzdHJ1Y3Qgc29mdGlmX25laWdoICpjdXJyX25laWdoOworCXN0cnVjdCBzb2Z0aWZfbmVpZ2ggKnNvZnRpZl9uZWlnaCA9IE5VTEwsICpzb2Z0aWZfbmVpZ2hfdG1wOworCXN0cnVjdCBoYXJkX2lmYWNlICpwcmltYXJ5X2lmID0gTlVMTDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKworCXByaW1hcnlfaWYgPSBwcmltYXJ5X2lmX2dldF9zZWxlY3RlZChiYXRfcHJpdik7CisJaWYgKCFwcmltYXJ5X2lmKQorCQlnb3RvIG91dDsKKworCS8qIGZpbmQgbmV3IHNvZnRpZl9uZWlnaCBpbW1lZGlhdGVseSB0byBhdm9pZCB0ZW1wb3JhcnkgbG9vcHMgKi8KKwlyY3VfcmVhZF9sb2NrKCk7CisJY3Vycl9uZWlnaCA9IHJjdV9kZXJlZmVyZW5jZShzb2Z0aWZfbmVpZ2hfdmlkLT5zb2Z0aWZfbmVpZ2gpOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNvZnRpZl9uZWlnaF90bXAsIG5vZGUsCisJCQkJICZzb2Z0aWZfbmVpZ2hfdmlkLT5zb2Z0aWZfbmVpZ2hfbGlzdCwKKwkJCQkgbGlzdCkgeworCQlpZiAoc29mdGlmX25laWdoX3RtcCA9PSBjdXJyX25laWdoKQorCQkJY29udGludWU7CisKKwkJLyogd2UgZ290IGEgbmVpZ2hib3IgYnV0IGl0cyBtYWMgaXMgJ2JpZ2dlcicgdGhhbiBvdXJzICAqLworCQlpZiAobWVtY21wKHByaW1hcnlfaWYtPm5ldF9kZXYtPmRldl9hZGRyLAorCQkJICAgc29mdGlmX25laWdoX3RtcC0+YWRkciwgRVRIX0FMRU4pIDwgMCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghYXRvbWljX2luY19ub3RfemVybygmc29mdGlmX25laWdoX3RtcC0+cmVmY291bnQpKQorCQkJY29udGludWU7CisKKwkJc29mdGlmX25laWdoID0gc29mdGlmX25laWdoX3RtcDsKKwkJZ290byB1bmxvY2s7CisJfQorCit1bmxvY2s6CiAJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JcmV0dXJuIHNvZnRpZl9uZWlnaDsKK291dDoKKwlzb2Z0aWZfbmVpZ2hfdmlkX3NlbGVjdChiYXRfcHJpdiwgc29mdGlmX25laWdoLCBzb2Z0aWZfbmVpZ2hfdmlkLT52aWQpOworCisJaWYgKHByaW1hcnlfaWYpCisJCWhhcmRpZl9mcmVlX3JlZihwcmltYXJ5X2lmKTsKKwlpZiAoc29mdGlmX25laWdoKQorCQlzb2Z0aWZfbmVpZ2hfZnJlZV9yZWYoc29mdGlmX25laWdoKTsKIH0KIAogaW50IHNvZnRpZl9uZWlnaF9zZXFfcHJpbnRfdGV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopc2VxLT5wcml2YXRlOwogCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKKwlzdHJ1Y3Qgc29mdGlmX25laWdoX3ZpZCAqc29mdGlmX25laWdoX3ZpZDsKIAlzdHJ1Y3Qgc29mdGlmX25laWdoICpzb2Z0aWZfbmVpZ2g7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisJc3RydWN0IGhhcmRfaWZhY2UgKnByaW1hcnlfaWY7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsICpub2RlX3RtcDsKKwlzdHJ1Y3Qgc29mdGlmX25laWdoICpjdXJyX3NvZnRpZl9uZWlnaDsKKwlpbnQgcmV0ID0gMCwgbGFzdF9zZWVuX3NlY3MsIGxhc3Rfc2Vlbl9tc2VjczsKIAotCWlmICghYmF0X3ByaXYtPnByaW1hcnlfaWYpIHsKLQkJcmV0dXJuIHNlcV9wcmludGYoc2VxLCAiQkFUTUFOIG1lc2ggJXMgZGlzYWJsZWQgLSAiCi0JCQkgICAgICAgInBsZWFzZSBzcGVjaWZ5IGludGVyZmFjZXMgdG8gZW5hYmxlIGl0XG4iLAotCQkJICAgICAgIG5ldF9kZXYtPm5hbWUpOworCXByaW1hcnlfaWYgPSBwcmltYXJ5X2lmX2dldF9zZWxlY3RlZChiYXRfcHJpdik7CisJaWYgKCFwcmltYXJ5X2lmKSB7CisJCXJldCA9IHNlcV9wcmludGYoc2VxLCAiQkFUTUFOIG1lc2ggJXMgZGlzYWJsZWQgLSAiCisJCQkJICJwbGVhc2Ugc3BlY2lmeSBpbnRlcmZhY2VzIHRvIGVuYWJsZSBpdFxuIiwKKwkJCQkgbmV0X2Rldi0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChwcmltYXJ5X2lmLT5pZl9zdGF0dXMgIT0gSUZfQUNUSVZFKSB7CisJCXJldCA9IHNlcV9wcmludGYoc2VxLCAiQkFUTUFOIG1lc2ggJXMgIgorCQkJCSAiZGlzYWJsZWQgLSBwcmltYXJ5IGludGVyZmFjZSBub3QgYWN0aXZlXG4iLAorCQkJCSBuZXRfZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CiAJfQogCiAJc2VxX3ByaW50ZihzZXEsICJTb2Z0aWYgbmVpZ2hib3IgbGlzdCAoJXMpXG4iLCBuZXRfZGV2LT5uYW1lKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc29mdGlmX25laWdoLCBub2RlLAotCQkJCSAmYmF0X3ByaXYtPnNvZnRpZl9uZWlnaF9saXN0LCBsaXN0KQotCQlzZXFfcHJpbnRmKHNlcSwgIiVzICVwTSAodmlkOiAlZClcbiIsCi0JCQkJYmF0X3ByaXYtPnNvZnRpZl9uZWlnaCA9PSBzb2Z0aWZfbmVpZ2gKLQkJCQk/ICI9PiIgOiAiICAiLCBzb2Z0aWZfbmVpZ2gtPmFkZHIsCi0JCQkJc29mdGlmX25laWdoLT52aWQpOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzb2Z0aWZfbmVpZ2hfdmlkLCBub2RlLAorCQkJCSAmYmF0X3ByaXYtPnNvZnRpZl9uZWlnaF92aWRzLCBsaXN0KSB7CisJCXNlcV9wcmludGYoc2VxLCAiICAgICAlLTE1cyAlcyBvbiB2aWQ6ICVkXG4iLAorCQkJICAgIk9yaWdpbmF0b3IiLCAibGFzdC1zZWVuIiwgc29mdGlmX25laWdoX3ZpZC0+dmlkKTsKKworCQljdXJyX3NvZnRpZl9uZWlnaCA9IHNvZnRpZl9uZWlnaF9nZXRfc2VsZWN0ZWQoc29mdGlmX25laWdoX3ZpZCk7CisKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNvZnRpZl9uZWlnaCwgbm9kZV90bXAsCisJCQkJCSAmc29mdGlmX25laWdoX3ZpZC0+c29mdGlmX25laWdoX2xpc3QsCisJCQkJCSBsaXN0KSB7CisJCQlsYXN0X3NlZW5fc2VjcyA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtCisJCQkJCQlzb2Z0aWZfbmVpZ2gtPmxhc3Rfc2VlbikgLyAxMDAwOworCQkJbGFzdF9zZWVuX21zZWNzID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0KKwkJCQkJCXNvZnRpZl9uZWlnaC0+bGFzdF9zZWVuKSAlIDEwMDA7CisJCQlzZXFfcHJpbnRmKHNlcSwgIiVzICVwTSAgJTNpLiUwM2lzXG4iLAorCQkJCSAgIGN1cnJfc29mdGlmX25laWdoID09IHNvZnRpZl9uZWlnaAorCQkJCSAgID8gIj0+IiA6ICIgICIsIHNvZnRpZl9uZWlnaC0+YWRkciwKKwkJCQkgICBsYXN0X3NlZW5fc2VjcywgbGFzdF9zZWVuX21zZWNzKTsKKwkJfQorCisJCWlmIChjdXJyX3NvZnRpZl9uZWlnaCkKKwkJCXNvZnRpZl9uZWlnaF9mcmVlX3JlZihjdXJyX3NvZnRpZl9uZWlnaCk7CisKKwkJc2VxX3ByaW50ZihzZXEsICJcbiIpOworCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKIAotCXJldHVybiAwOworb3V0OgorCWlmIChwcmltYXJ5X2lmKQorCQloYXJkaWZfZnJlZV9yZWYocHJpbWFyeV9pZik7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBzb2Z0aWZfbmVpZ2hfcHVyZ2Uoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKK3sKKwlzdHJ1Y3Qgc29mdGlmX25laWdoICpzb2Z0aWZfbmVpZ2gsICpjdXJyX3NvZnRpZl9uZWlnaDsKKwlzdHJ1Y3Qgc29mdGlmX25laWdoX3ZpZCAqc29mdGlmX25laWdoX3ZpZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKm5vZGVfdG1wLCAqbm9kZV90bXAyOworCWNoYXIgZG9fZGVzZWxlY3Q7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNvZnRpZl9uZWlnaF92aWQsIG5vZGUsCisJCQkJICZiYXRfcHJpdi0+c29mdGlmX25laWdoX3ZpZHMsIGxpc3QpIHsKKwkJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZzb2Z0aWZfbmVpZ2hfdmlkLT5yZWZjb3VudCkpCisJCQljb250aW51ZTsKKworCQljdXJyX3NvZnRpZl9uZWlnaCA9IHNvZnRpZl9uZWlnaF9nZXRfc2VsZWN0ZWQoc29mdGlmX25laWdoX3ZpZCk7CisJCWRvX2Rlc2VsZWN0ID0gMDsKKworCQlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5zb2Z0aWZfbmVpZ2hfbG9jayk7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc29mdGlmX25laWdoLCBub2RlX3RtcCwgbm9kZV90bXAyLAorCQkJCQkgICZzb2Z0aWZfbmVpZ2hfdmlkLT5zb2Z0aWZfbmVpZ2hfbGlzdCwKKwkJCQkJICBsaXN0KSB7CisJCQlpZiAoKCF0aW1lX2FmdGVyKGppZmZpZXMsIHNvZnRpZl9uZWlnaC0+bGFzdF9zZWVuICsKKwkJCQltc2Vjc190b19qaWZmaWVzKFNPRlRJRl9ORUlHSF9USU1FT1VUKSkpICYmCisJCQkgICAgKGF0b21pY19yZWFkKCZiYXRfcHJpdi0+bWVzaF9zdGF0ZSkgPT0gTUVTSF9BQ1RJVkUpKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoY3Vycl9zb2Z0aWZfbmVpZ2ggPT0gc29mdGlmX25laWdoKSB7CisJCQkJYmF0X2RiZyhEQkdfUk9VVEVTLCBiYXRfcHJpdiwKKwkJCQkJIkN1cnJlbnQgbWVzaCBleGl0IHBvaW50IG9uIHZpZDogJWQgIgorCQkJCQkiJyVwTScgdmFuaXNoZWQuXG4iLAorCQkJCQlzb2Z0aWZfbmVpZ2hfdmlkLT52aWQsCisJCQkJCXNvZnRpZl9uZWlnaC0+YWRkcik7CisJCQkJZG9fZGVzZWxlY3QgPSAxOworCQkJfQorCisJCQlobGlzdF9kZWxfcmN1KCZzb2Z0aWZfbmVpZ2gtPmxpc3QpOworCQkJc29mdGlmX25laWdoX2ZyZWVfcmVmKHNvZnRpZl9uZWlnaCk7CisJCX0KKwkJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5zb2Z0aWZfbmVpZ2hfbG9jayk7CisKKwkJLyogc29mdF9uZWlnaF92aWRfZGVzZWxlY3QoKSBuZWVkcyB0byBhY3F1aXJlIHRoZQorCQkgKiBzb2Z0aWZfbmVpZ2hfbG9jayAqLworCQlpZiAoZG9fZGVzZWxlY3QpCisJCQlzb2Z0aWZfbmVpZ2hfdmlkX2Rlc2VsZWN0KGJhdF9wcml2LCBzb2Z0aWZfbmVpZ2hfdmlkKTsKKworCQlpZiAoY3Vycl9zb2Z0aWZfbmVpZ2gpCisJCQlzb2Z0aWZfbmVpZ2hfZnJlZV9yZWYoY3Vycl9zb2Z0aWZfbmVpZ2gpOworCisJCXNvZnRpZl9uZWlnaF92aWRfZnJlZV9yZWYoc29mdGlmX25laWdoX3ZpZCk7CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCisJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+c29mdGlmX25laWdoX3ZpZF9sb2NrKTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNvZnRpZl9uZWlnaF92aWQsIG5vZGUsIG5vZGVfdG1wLAorCQkJCSAgJmJhdF9wcml2LT5zb2Z0aWZfbmVpZ2hfdmlkcywgbGlzdCkgeworCQlpZiAoIWhsaXN0X2VtcHR5KCZzb2Z0aWZfbmVpZ2hfdmlkLT5zb2Z0aWZfbmVpZ2hfbGlzdCkpCisJCQljb250aW51ZTsKKworCQlobGlzdF9kZWxfcmN1KCZzb2Z0aWZfbmVpZ2hfdmlkLT5saXN0KTsKKwkJc29mdGlmX25laWdoX3ZpZF9mcmVlX3JlZihzb2Z0aWZfbmVpZ2hfdmlkKTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5zb2Z0aWZfbmVpZ2hfdmlkX2xvY2spOworCiB9CiAKIHN0YXRpYyB2b2lkIHNvZnRpZl9iYXRtYW5fcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtMTk4LDcgKzQ0NSw5IEBACiAJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGV0aGhkciAqZXRoaGRyID0gKHN0cnVjdCBldGhoZHIgKilza2ItPmRhdGE7CiAJc3RydWN0IGJhdG1hbl9wYWNrZXQgKmJhdG1hbl9wYWNrZXQ7Ci0Jc3RydWN0IHNvZnRpZl9uZWlnaCAqc29mdGlmX25laWdoLCAqc29mdGlmX25laWdoX3RtcDsKKwlzdHJ1Y3Qgc29mdGlmX25laWdoICpzb2Z0aWZfbmVpZ2ggPSBOVUxMOworCXN0cnVjdCBoYXJkX2lmYWNlICpwcmltYXJ5X2lmID0gTlVMTDsKKwlzdHJ1Y3Qgc29mdGlmX25laWdoICpjdXJyX3NvZnRpZl9uZWlnaCA9IE5VTEw7CiAKIAlpZiAobnRvaHMoZXRoaGRyLT5oX3Byb3RvKSA9PSBFVEhfUF84MDIxUSkKIAkJYmF0bWFuX3BhY2tldCA9IChzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqKQpAQCAtMjA3LDYzICs0NTYsNTIgQEAKIAkJYmF0bWFuX3BhY2tldCA9IChzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqKShza2ItPmRhdGEgKyBFVEhfSExFTik7CiAKIAlpZiAoYmF0bWFuX3BhY2tldC0+dmVyc2lvbiAhPSBDT01QQVRfVkVSU0lPTikKLQkJZ290byBlcnI7CisJCWdvdG8gb3V0OwogCiAJaWYgKGJhdG1hbl9wYWNrZXQtPnBhY2tldF90eXBlICE9IEJBVF9QQUNLRVQpCi0JCWdvdG8gZXJyOworCQlnb3RvIG91dDsKIAogCWlmICghKGJhdG1hbl9wYWNrZXQtPmZsYWdzICYgUFJJTUFSSUVTX0ZJUlNUX0hPUCkpCi0JCWdvdG8gZXJyOworCQlnb3RvIG91dDsKIAogCWlmIChpc19teV9tYWMoYmF0bWFuX3BhY2tldC0+b3JpZykpCi0JCWdvdG8gZXJyOworCQlnb3RvIG91dDsKIAogCXNvZnRpZl9uZWlnaCA9IHNvZnRpZl9uZWlnaF9nZXQoYmF0X3ByaXYsIGJhdG1hbl9wYWNrZXQtPm9yaWcsIHZpZCk7Ci0KIAlpZiAoIXNvZnRpZl9uZWlnaCkKLQkJZ290byBlcnI7CisJCWdvdG8gb3V0OwogCi0JaWYgKGJhdF9wcml2LT5zb2Z0aWZfbmVpZ2ggPT0gc29mdGlmX25laWdoKQorCWN1cnJfc29mdGlmX25laWdoID0gc29mdGlmX25laWdoX3ZpZF9nZXRfc2VsZWN0ZWQoYmF0X3ByaXYsIHZpZCk7CisJaWYgKGN1cnJfc29mdGlmX25laWdoID09IHNvZnRpZl9uZWlnaCkKKwkJZ290byBvdXQ7CisKKwlwcmltYXJ5X2lmID0gcHJpbWFyeV9pZl9nZXRfc2VsZWN0ZWQoYmF0X3ByaXYpOworCWlmICghcHJpbWFyeV9pZikKIAkJZ290byBvdXQ7CiAKIAkvKiB3ZSBnb3QgYSBuZWlnaGJvciBidXQgaXRzIG1hYyBpcyAnYmlnZ2VyJyB0aGFuIG91cnMgICovCi0JaWYgKG1lbWNtcChiYXRfcHJpdi0+cHJpbWFyeV9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsCisJaWYgKG1lbWNtcChwcmltYXJ5X2lmLT5uZXRfZGV2LT5kZXZfYWRkciwKIAkJICAgc29mdGlmX25laWdoLT5hZGRyLCBFVEhfQUxFTikgPCAwKQogCQlnb3RvIG91dDsKIAotCS8qIHN3aXRjaCB0byBuZXcgJ3NtYWxsZXN0IG5laWdoYm9yJyAqLwotCWlmICgoYmF0X3ByaXYtPnNvZnRpZl9uZWlnaCkgJiYKLQkgICAgKG1lbWNtcChzb2Z0aWZfbmVpZ2gtPmFkZHIsIGJhdF9wcml2LT5zb2Z0aWZfbmVpZ2gtPmFkZHIsCi0JCQkJCQkJRVRIX0FMRU4pIDwgMCkpIHsKLQkJYmF0X2RiZyhEQkdfUk9VVEVTLCBiYXRfcHJpdiwKLQkJCSJDaGFuZ2luZyBtZXNoIGV4aXQgcG9pbnQgZnJvbSAlcE0gKHZpZDogJWQpICIKLQkJCSJ0byAlcE0gKHZpZDogJWQpLlxuIiwKLQkJCSBiYXRfcHJpdi0+c29mdGlmX25laWdoLT5hZGRyLAotCQkJIGJhdF9wcml2LT5zb2Z0aWZfbmVpZ2gtPnZpZCwKLQkJCSBzb2Z0aWZfbmVpZ2gtPmFkZHIsIHNvZnRpZl9uZWlnaC0+dmlkKTsKLQkJc29mdGlmX25laWdoX3RtcCA9IGJhdF9wcml2LT5zb2Z0aWZfbmVpZ2g7Ci0JCWJhdF9wcml2LT5zb2Z0aWZfbmVpZ2ggPSBzb2Z0aWZfbmVpZ2g7Ci0JCXNvZnRpZl9uZWlnaF9mcmVlX3JlZihzb2Z0aWZfbmVpZ2hfdG1wKTsKLQkJLyogd2UgbmVlZCB0byBob2xkIHRoZSBhZGRpdGlvbmFsIHJlZmVyZW5jZSAqLwotCQlnb3RvIGVycjsKKwkvKiBjbG9zZSBvd24gYmF0WCBkZXZpY2UgYW5kIHVzZSBzb2Z0aWZfbmVpZ2ggYXMgZXhpdCBub2RlICovCisJaWYgKCFjdXJyX3NvZnRpZl9uZWlnaCkgeworCQlzb2Z0aWZfbmVpZ2hfdmlkX3NlbGVjdChiYXRfcHJpdiwgc29mdGlmX25laWdoLCB2aWQpOworCQlnb3RvIG91dDsKIAl9CiAKLQkvKiBjbG9zZSBvd24gYmF0WCBkZXZpY2UgYW5kIHVzZSBzb2Z0aWZfbmVpZ2ggYXMgZXhpdCBub2RlICovCi0JaWYgKCghYmF0X3ByaXYtPnNvZnRpZl9uZWlnaCkgJiYKLQkgICAgKG1lbWNtcChzb2Z0aWZfbmVpZ2gtPmFkZHIsCi0JCSAgICBiYXRfcHJpdi0+cHJpbWFyeV9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKSA8IDApKSB7Ci0JCWJhdF9kYmcoREJHX1JPVVRFUywgYmF0X3ByaXYsCi0JCQkiU2V0dGluZyBtZXNoIGV4aXQgcG9pbnQgdG8gJXBNICh2aWQ6ICVkKS5cbiIsCi0JCQlzb2Z0aWZfbmVpZ2gtPmFkZHIsIHNvZnRpZl9uZWlnaC0+dmlkKTsKLQkJYmF0X3ByaXYtPnNvZnRpZl9uZWlnaCA9IHNvZnRpZl9uZWlnaDsKLQkJLyogd2UgbmVlZCB0byBob2xkIHRoZSBhZGRpdGlvbmFsIHJlZmVyZW5jZSAqLwotCQlnb3RvIGVycjsKLQl9CisJLyogc3dpdGNoIHRvIG5ldyAnc21hbGxlc3QgbmVpZ2hib3InICovCisJaWYgKG1lbWNtcChzb2Z0aWZfbmVpZ2gtPmFkZHIsIGN1cnJfc29mdGlmX25laWdoLT5hZGRyLCBFVEhfQUxFTikgPCAwKQorCQlzb2Z0aWZfbmVpZ2hfdmlkX3NlbGVjdChiYXRfcHJpdiwgc29mdGlmX25laWdoLCB2aWQpOwogCiBvdXQ6Ci0Jc29mdGlmX25laWdoX2ZyZWVfcmVmKHNvZnRpZl9uZWlnaCk7Ci1lcnI6CiAJa2ZyZWVfc2tiKHNrYik7CisJaWYgKHNvZnRpZl9uZWlnaCkKKwkJc29mdGlmX25laWdoX2ZyZWVfcmVmKHNvZnRpZl9uZWlnaCk7CisJaWYgKGN1cnJfc29mdGlmX25laWdoKQorCQlzb2Z0aWZfbmVpZ2hfZnJlZV9yZWYoY3Vycl9zb2Z0aWZfbmVpZ2gpOworCWlmIChwcmltYXJ5X2lmKQorCQloYXJkaWZfZnJlZV9yZWYocHJpbWFyeV9pZik7CiAJcmV0dXJuOwogfQogCkBAIC0yOTMsMTEgKzUzMSwxMSBAQAogCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLT5zYV9kYXRhKSkKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCi0JLyogb25seSBtb2RpZnkgaG5hLXRhYmxlIGlmIGl0IGhhcyBiZWVuIGluaXRpYWxpc2VkIGJlZm9yZSAqLworCS8qIG9ubHkgbW9kaWZ5IHRyYW5zdGFibGUgaWYgaXQgaGFzIGJlZW4gaW5pdGlhbGlzZWQgYmVmb3JlICovCiAJaWYgKGF0b21pY19yZWFkKCZiYXRfcHJpdi0+bWVzaF9zdGF0ZSkgPT0gTUVTSF9BQ1RJVkUpIHsKLQkJaG5hX2xvY2FsX3JlbW92ZShiYXRfcHJpdiwgZGV2LT5kZXZfYWRkciwKKwkJdHRfbG9jYWxfcmVtb3ZlKGJhdF9wcml2LCBkZXYtPmRldl9hZGRyLAogCQkJCSAibWFjIGFkZHJlc3MgY2hhbmdlZCIpOwotCQlobmFfbG9jYWxfYWRkKGRldiwgYWRkci0+c2FfZGF0YSk7CisJCXR0X2xvY2FsX2FkZChkZXYsIGFkZHItPnNhX2RhdGEpOwogCX0KIAogCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBFVEhfQUxFTik7CkBAIC0zMTksOCArNTU3LDEwIEBACiB7CiAJc3RydWN0IGV0aGhkciAqZXRoaGRyID0gKHN0cnVjdCBldGhoZHIgKilza2ItPmRhdGE7CiAJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KHNvZnRfaWZhY2UpOworCXN0cnVjdCBoYXJkX2lmYWNlICpwcmltYXJ5X2lmID0gTlVMTDsKIAlzdHJ1Y3QgYmNhc3RfcGFja2V0ICpiY2FzdF9wYWNrZXQ7CiAJc3RydWN0IHZsYW5fZXRoaGRyICp2aGRyOworCXN0cnVjdCBzb2Z0aWZfbmVpZ2ggKmN1cnJfc29mdGlmX25laWdoID0gTlVMTDsKIAlpbnQgZGF0YV9sZW4gPSBza2ItPmxlbiwgcmV0OwogCXNob3J0IHZpZCA9IC0xOwogCWJvb2wgZG9fYmNhc3QgPSBmYWxzZTsKQEAgLTM0OCwxMSArNTg4LDEyIEBACiAJICogaWYgd2UgaGF2ZSBhIGFub3RoZXIgY2hvc2VuIG1lc2ggZXhpdCBub2RlIGluIHJhbmdlCiAJICogaXQgd2lsbCB0cmFuc3BvcnQgdGhlIHBhY2tldHMgdG8gdGhlIG1lc2gKIAkgKi8KLQlpZiAoKGJhdF9wcml2LT5zb2Z0aWZfbmVpZ2gpICYmIChiYXRfcHJpdi0+c29mdGlmX25laWdoLT52aWQgPT0gdmlkKSkKKwljdXJyX3NvZnRpZl9uZWlnaCA9IHNvZnRpZl9uZWlnaF92aWRfZ2V0X3NlbGVjdGVkKGJhdF9wcml2LCB2aWQpOworCWlmIChjdXJyX3NvZnRpZl9uZWlnaCkKIAkJZ290byBkcm9wcGVkOwogCiAJLyogVE9ETzogY2hlY2sgdGhpcyBmb3IgbG9ja3MgKi8KLQlobmFfbG9jYWxfYWRkKHNvZnRfaWZhY2UsIGV0aGhkci0+aF9zb3VyY2UpOworCXR0X2xvY2FsX2FkZChzb2Z0X2lmYWNlLCBldGhoZHItPmhfc291cmNlKTsKIAogCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGhoZHItPmhfZGVzdCkpIHsKIAkJcmV0ID0gZ3dfaXNfdGFyZ2V0KGJhdF9wcml2LCBza2IpOwpAQCAtMzY2LDcgKzYwNyw4IEBACiAKIAkvKiBldGhlcm5ldCBwYWNrZXQgc2hvdWxkIGJlIGJyb2FkY2FzdGVkICovCiAJaWYgKGRvX2JjYXN0KSB7Ci0JCWlmICghYmF0X3ByaXYtPnByaW1hcnlfaWYpCisJCXByaW1hcnlfaWYgPSBwcmltYXJ5X2lmX2dldF9zZWxlY3RlZChiYXRfcHJpdik7CisJCWlmICghcHJpbWFyeV9pZikKIAkJCWdvdG8gZHJvcHBlZDsKIAogCQlpZiAobXlfc2tiX2hlYWRfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgYmNhc3RfcGFja2V0KSkgPCAwKQpAQCAtMzgyLDcgKzYyNCw3IEBACiAJCS8qIGh3IGFkZHJlc3Mgb2YgZmlyc3QgaW50ZXJmYWNlIGlzIHRoZSBvcmlnIG1hYyBiZWNhdXNlIG9ubHkKIAkJICogdGhpcyBtYWMgaXMga25vd24gdGhyb3VnaG91dCB0aGUgbWVzaCAqLwogCQltZW1jcHkoYmNhc3RfcGFja2V0LT5vcmlnLAotCQkgICAgICAgYmF0X3ByaXYtPnByaW1hcnlfaWYtPm5ldF9kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJCSAgICAgICBwcmltYXJ5X2lmLT5uZXRfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCiAJCS8qIHNldCBicm9hZGNhc3Qgc2VxdWVuY2UgbnVtYmVyICovCiAJCWJjYXN0X3BhY2tldC0+c2Vxbm8gPQpAQCAtNDEwLDYgKzY1MiwxMCBAQAogZHJvcHBlZF9mcmVlZDoKIAliYXRfcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOwogZW5kOgorCWlmIChjdXJyX3NvZnRpZl9uZWlnaCkKKwkJc29mdGlmX25laWdoX2ZyZWVfcmVmKGN1cnJfc29mdGlmX25laWdoKTsKKwlpZiAocHJpbWFyeV9pZikKKwkJaGFyZGlmX2ZyZWVfcmVmKHByaW1hcnlfaWYpOwogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKQEAgLTQyMSw2ICs2NjcsNyBAQAogCXN0cnVjdCB1bmljYXN0X3BhY2tldCAqdW5pY2FzdF9wYWNrZXQ7CiAJc3RydWN0IGV0aGhkciAqZXRoaGRyOwogCXN0cnVjdCB2bGFuX2V0aGhkciAqdmhkcjsKKwlzdHJ1Y3Qgc29mdGlmX25laWdoICpjdXJyX3NvZnRpZl9uZWlnaCA9IE5VTEw7CiAJc2hvcnQgdmlkID0gLTE7CiAJaW50IHJldDsKIApAQCAtNDUwLDcgKzY5Nyw4IEBACiAJICogaWYgd2UgaGF2ZSBhIGFub3RoZXIgY2hvc2VuIG1lc2ggZXhpdCBub2RlIGluIHJhbmdlCiAJICogaXQgd2lsbCB0cmFuc3BvcnQgdGhlIHBhY2tldHMgdG8gdGhlIG5vbi1tZXNoIG5ldHdvcmsKIAkgKi8KLQlpZiAoKGJhdF9wcml2LT5zb2Z0aWZfbmVpZ2gpICYmIChiYXRfcHJpdi0+c29mdGlmX25laWdoLT52aWQgPT0gdmlkKSkgeworCWN1cnJfc29mdGlmX25laWdoID0gc29mdGlmX25laWdoX3ZpZF9nZXRfc2VsZWN0ZWQoYmF0X3ByaXYsIHZpZCk7CisJaWYgKGN1cnJfc29mdGlmX25laWdoKSB7CiAJCXNrYl9wdXNoKHNrYiwgaGRyX3NpemUpOwogCQl1bmljYXN0X3BhY2tldCA9IChzdHJ1Y3QgdW5pY2FzdF9wYWNrZXQgKilza2ItPmRhdGE7CiAKQEAgLTQ2MSw3ICs3MDksNyBAQAogCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwogCiAJCW1lbWNweSh1bmljYXN0X3BhY2tldC0+ZGVzdCwKLQkJICAgICAgIGJhdF9wcml2LT5zb2Z0aWZfbmVpZ2gtPmFkZHIsIEVUSF9BTEVOKTsKKwkJICAgICAgIGN1cnJfc29mdGlmX25laWdoLT5hZGRyLCBFVEhfQUxFTik7CiAJCXJldCA9IHJvdXRlX3VuaWNhc3RfcGFja2V0KHNrYiwgcmVjdl9pZik7CiAJCWlmIChyZXQgPT0gTkVUX1JYX0RST1ApCiAJCQlnb3RvIGRyb3BwZWQ7CkBAIC00ODYsMTEgKzczNCwxMyBAQAogCXNvZnRfaWZhY2UtPmxhc3RfcnggPSBqaWZmaWVzOwogCiAJbmV0aWZfcngoc2tiKTsKLQlyZXR1cm47CisJZ290byBvdXQ7CiAKIGRyb3BwZWQ6CiAJa2ZyZWVfc2tiKHNrYik7CiBvdXQ6CisJaWYgKGN1cnJfc29mdGlmX25laWdoKQorCQlzb2Z0aWZfbmVpZ2hfZnJlZV9yZWYoY3Vycl9zb2Z0aWZfbmVpZ2gpOwogCXJldHVybjsKIH0KIApAQCAtNTI0LDE0ICs3NzQsMTUgQEAKIAlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGludGVyZmFjZV90eDsKICNlbmRpZgogCWRldi0+ZGVzdHJ1Y3RvciA9IGZyZWVfbmV0ZGV2OworCWRldi0+dHhfcXVldWVfbGVuID0gMDsKIAogCS8qKgogCSAqIGNhbid0IGNhbGwgbWluX210dSwgYmVjYXVzZSB0aGUgbmVlZGVkIHZhcmlhYmxlcwogCSAqIGhhdmUgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0CiAJICovCiAJZGV2LT5tdHUgPSBFVEhfREFUQV9MRU47Ci0JZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSBCQVRfSEVBREVSX0xFTjsgLyogcmVzZXJ2ZSBtb3JlIHNwYWNlIGluIHRoZQotCQkJCQkJKiBza2J1ZmYgZm9yIG91ciBoZWFkZXIgKi8KKwkvKiByZXNlcnZlIG1vcmUgc3BhY2UgaW4gdGhlIHNrYnVmZiBmb3Igb3VyIGhlYWRlciAqLworCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gQkFUX0hFQURFUl9MRU47CiAKIAkvKiBnZW5lcmF0ZSByYW5kb20gYWRkcmVzcyAqLwogCXJhbmRvbV9ldGhlcl9hZGRyKGRldl9hZGRyKTsKQEAgLTU1Niw3ICs4MDcsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSByZWdpc3Rlcl9uZXRkZXYoc29mdF9pZmFjZSk7CisJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKHNvZnRfaWZhY2UpOwogCWlmIChyZXQgPCAwKSB7CiAJCXByX2VycigiVW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBiYXRtYW4gaW50ZXJmYWNlICclcyc6ICVpXG4iLAogCQkgICAgICAgbmFtZSwgcmV0KTsKQEAgLTU4MCwxMSArODMxLDEwIEBACiAKIAlhdG9taWNfc2V0KCZiYXRfcHJpdi0+bWVzaF9zdGF0ZSwgTUVTSF9JTkFDVElWRSk7CiAJYXRvbWljX3NldCgmYmF0X3ByaXYtPmJjYXN0X3NlcW5vLCAxKTsKLQlhdG9taWNfc2V0KCZiYXRfcHJpdi0+aG5hX2xvY2FsX2NoYW5nZWQsIDApOworCWF0b21pY19zZXQoJmJhdF9wcml2LT50dF9sb2NhbF9jaGFuZ2VkLCAwKTsKIAogCWJhdF9wcml2LT5wcmltYXJ5X2lmID0gTlVMTDsKIAliYXRfcHJpdi0+bnVtX2lmYWNlcyA9IDA7Ci0JYmF0X3ByaXYtPnNvZnRpZl9uZWlnaCA9IE5VTEw7CiAKIAlyZXQgPSBzeXNmc19hZGRfbWVzaGlmKHNvZnRfaWZhY2UpOwogCWlmIChyZXQgPCAwKQpAQCAtNjQwLDcgKzg5MCw3IEBACiB7CiAJY21kLT5zdXBwb3J0ZWQgPSAwOwogCWNtZC0+YWR2ZXJ0aXNpbmcgPSAwOwotCWNtZC0+c3BlZWQgPSBTUEVFRF8xMDsKKwlldGh0b29sX2NtZF9zcGVlZF9zZXQoY21kLCBTUEVFRF8xMCk7CiAJY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKIAljbWQtPnBvcnQgPSBQT1JUX1RQOwogCWNtZC0+cGh5X2FkZHJlc3MgPSAwOwpAQCAtNjc1LDEyICs5MjUsMyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgdTMyIGJhdF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJhdF9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci19CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jIGIvbmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYwppbmRleCA4ZDE1YjQ4Li43YjcyOTY2IDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jCisrKyBiL25ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMKQEAgLTIyLDQzICsyMiw0NCBAQAogI2luY2x1ZGUgIm1haW4uaCIKICNpbmNsdWRlICJ0cmFuc2xhdGlvbi10YWJsZS5oIgogI2luY2x1ZGUgInNvZnQtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiaGFyZC1pbnRlcmZhY2UuaCIKICNpbmNsdWRlICJoYXNoLmgiCiAjaW5jbHVkZSAib3JpZ2luYXRvci5oIgogCi1zdGF0aWMgdm9pZCBobmFfbG9jYWxfcHVyZ2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLXN0YXRpYyB2b2lkIF9obmFfZ2xvYmFsX2RlbF9vcmlnKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCi0JCQkJIHN0cnVjdCBobmFfZ2xvYmFsX2VudHJ5ICpobmFfZ2xvYmFsX2VudHJ5LAorc3RhdGljIHZvaWQgdHRfbG9jYWxfcHVyZ2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3N0YXRpYyB2b2lkIF90dF9nbG9iYWxfZGVsX29yaWcoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKKwkJCQkgc3RydWN0IHR0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsX2VudHJ5LAogCQkJCSBjaGFyICptZXNzYWdlKTsKIAogLyogcmV0dXJucyAxIGlmIHRoZXkgYXJlIHRoZSBzYW1lIG1hYyBhZGRyICovCi1zdGF0aWMgaW50IGNvbXBhcmVfbGhuYShzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgdm9pZCAqZGF0YTIpCitzdGF0aWMgaW50IGNvbXBhcmVfbHR0KHN0cnVjdCBobGlzdF9ub2RlICpub2RlLCB2b2lkICpkYXRhMikKIHsKLQl2b2lkICpkYXRhMSA9IGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgaG5hX2xvY2FsX2VudHJ5LCBoYXNoX2VudHJ5KTsKKwl2b2lkICpkYXRhMSA9IGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgdHRfbG9jYWxfZW50cnksIGhhc2hfZW50cnkpOwogCiAJcmV0dXJuIChtZW1jbXAoZGF0YTEsIGRhdGEyLCBFVEhfQUxFTikgPT0gMCA/IDEgOiAwKTsKIH0KIAogLyogcmV0dXJucyAxIGlmIHRoZXkgYXJlIHRoZSBzYW1lIG1hYyBhZGRyICovCi1zdGF0aWMgaW50IGNvbXBhcmVfZ2huYShzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgdm9pZCAqZGF0YTIpCitzdGF0aWMgaW50IGNvbXBhcmVfZ3R0KHN0cnVjdCBobGlzdF9ub2RlICpub2RlLCB2b2lkICpkYXRhMikKIHsKLQl2b2lkICpkYXRhMSA9IGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgaG5hX2dsb2JhbF9lbnRyeSwgaGFzaF9lbnRyeSk7CisJdm9pZCAqZGF0YTEgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IHR0X2dsb2JhbF9lbnRyeSwgaGFzaF9lbnRyeSk7CiAKIAlyZXR1cm4gKG1lbWNtcChkYXRhMSwgZGF0YTIsIEVUSF9BTEVOKSA9PSAwID8gMSA6IDApOwogfQogCi1zdGF0aWMgdm9pZCBobmFfbG9jYWxfc3RhcnRfdGltZXIoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKK3N0YXRpYyB2b2lkIHR0X2xvY2FsX3N0YXJ0X3RpbWVyKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCiB7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJmJhdF9wcml2LT5obmFfd29yaywgaG5hX2xvY2FsX3B1cmdlKTsKLQlxdWV1ZV9kZWxheWVkX3dvcmsoYmF0X2V2ZW50X3dvcmtxdWV1ZSwgJmJhdF9wcml2LT5obmFfd29yaywgMTAgKiBIWik7CisJSU5JVF9ERUxBWUVEX1dPUksoJmJhdF9wcml2LT50dF93b3JrLCB0dF9sb2NhbF9wdXJnZSk7CisJcXVldWVfZGVsYXllZF93b3JrKGJhdF9ldmVudF93b3JrcXVldWUsICZiYXRfcHJpdi0+dHRfd29yaywgMTAgKiBIWik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaG5hX2xvY2FsX2VudHJ5ICpobmFfbG9jYWxfaGFzaF9maW5kKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCitzdGF0aWMgc3RydWN0IHR0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9oYXNoX2ZpbmQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKIAkJCQkJCSAgIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGhhc2h0YWJsZV90ICpoYXNoID0gYmF0X3ByaXYtPmhuYV9sb2NhbF9oYXNoOworCXN0cnVjdCBoYXNodGFibGVfdCAqaGFzaCA9IGJhdF9wcml2LT50dF9sb2NhbF9oYXNoOwogCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCXN0cnVjdCBobmFfbG9jYWxfZW50cnkgKmhuYV9sb2NhbF9lbnRyeSwgKmhuYV9sb2NhbF9lbnRyeV90bXAgPSBOVUxMOworCXN0cnVjdCB0dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnksICp0dF9sb2NhbF9lbnRyeV90bXAgPSBOVUxMOwogCWludCBpbmRleDsKIAogCWlmICghaGFzaCkKQEAgLTY4LDI2ICs2OSwyNiBAQAogCWhlYWQgPSAmaGFzaC0+dGFibGVbaW5kZXhdOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShobmFfbG9jYWxfZW50cnksIG5vZGUsIGhlYWQsIGhhc2hfZW50cnkpIHsKLQkJaWYgKCFjb21wYXJlX2V0aChobmFfbG9jYWxfZW50cnksIGRhdGEpKQorCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0dF9sb2NhbF9lbnRyeSwgbm9kZSwgaGVhZCwgaGFzaF9lbnRyeSkgeworCQlpZiAoIWNvbXBhcmVfZXRoKHR0X2xvY2FsX2VudHJ5LCBkYXRhKSkKIAkJCWNvbnRpbnVlOwogCi0JCWhuYV9sb2NhbF9lbnRyeV90bXAgPSBobmFfbG9jYWxfZW50cnk7CisJCXR0X2xvY2FsX2VudHJ5X3RtcCA9IHR0X2xvY2FsX2VudHJ5OwogCQlicmVhazsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlyZXR1cm4gaG5hX2xvY2FsX2VudHJ5X3RtcDsKKwlyZXR1cm4gdHRfbG9jYWxfZW50cnlfdG1wOwogfQogCi1zdGF0aWMgc3RydWN0IGhuYV9nbG9iYWxfZW50cnkgKmhuYV9nbG9iYWxfaGFzaF9maW5kKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCitzdGF0aWMgc3RydWN0IHR0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsX2hhc2hfZmluZChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAogCQkJCQkJICAgICB2b2lkICpkYXRhKQogewotCXN0cnVjdCBoYXNodGFibGVfdCAqaGFzaCA9IGJhdF9wcml2LT5obmFfZ2xvYmFsX2hhc2g7CisJc3RydWN0IGhhc2h0YWJsZV90ICpoYXNoID0gYmF0X3ByaXYtPnR0X2dsb2JhbF9oYXNoOwogCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCXN0cnVjdCBobmFfZ2xvYmFsX2VudHJ5ICpobmFfZ2xvYmFsX2VudHJ5OwotCXN0cnVjdCBobmFfZ2xvYmFsX2VudHJ5ICpobmFfZ2xvYmFsX2VudHJ5X3RtcCA9IE5VTEw7CisJc3RydWN0IHR0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsX2VudHJ5OworCXN0cnVjdCB0dF9nbG9iYWxfZW50cnkgKnR0X2dsb2JhbF9lbnRyeV90bXAgPSBOVUxMOwogCWludCBpbmRleDsKIAogCWlmICghaGFzaCkKQEAgLTk3LDEyNSArOTgsMTI1IEBACiAJaGVhZCA9ICZoYXNoLT50YWJsZVtpbmRleF07CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGhuYV9nbG9iYWxfZW50cnksIG5vZGUsIGhlYWQsIGhhc2hfZW50cnkpIHsKLQkJaWYgKCFjb21wYXJlX2V0aChobmFfZ2xvYmFsX2VudHJ5LCBkYXRhKSkKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodHRfZ2xvYmFsX2VudHJ5LCBub2RlLCBoZWFkLCBoYXNoX2VudHJ5KSB7CisJCWlmICghY29tcGFyZV9ldGgodHRfZ2xvYmFsX2VudHJ5LCBkYXRhKSkKIAkJCWNvbnRpbnVlOwogCi0JCWhuYV9nbG9iYWxfZW50cnlfdG1wID0gaG5hX2dsb2JhbF9lbnRyeTsKKwkJdHRfZ2xvYmFsX2VudHJ5X3RtcCA9IHR0X2dsb2JhbF9lbnRyeTsKIAkJYnJlYWs7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogCi0JcmV0dXJuIGhuYV9nbG9iYWxfZW50cnlfdG1wOworCXJldHVybiB0dF9nbG9iYWxfZW50cnlfdG1wOwogfQogCi1pbnQgaG5hX2xvY2FsX2luaXQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKK2ludCB0dF9sb2NhbF9pbml0KHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCiB7Ci0JaWYgKGJhdF9wcml2LT5obmFfbG9jYWxfaGFzaCkKKwlpZiAoYmF0X3ByaXYtPnR0X2xvY2FsX2hhc2gpCiAJCXJldHVybiAxOwogCi0JYmF0X3ByaXYtPmhuYV9sb2NhbF9oYXNoID0gaGFzaF9uZXcoMTAyNCk7CisJYmF0X3ByaXYtPnR0X2xvY2FsX2hhc2ggPSBoYXNoX25ldygxMDI0KTsKIAotCWlmICghYmF0X3ByaXYtPmhuYV9sb2NhbF9oYXNoKQorCWlmICghYmF0X3ByaXYtPnR0X2xvY2FsX2hhc2gpCiAJCXJldHVybiAwOwogCi0JYXRvbWljX3NldCgmYmF0X3ByaXYtPmhuYV9sb2NhbF9jaGFuZ2VkLCAwKTsKLQlobmFfbG9jYWxfc3RhcnRfdGltZXIoYmF0X3ByaXYpOworCWF0b21pY19zZXQoJmJhdF9wcml2LT50dF9sb2NhbF9jaGFuZ2VkLCAwKTsKKwl0dF9sb2NhbF9zdGFydF90aW1lcihiYXRfcHJpdik7CiAKIAlyZXR1cm4gMTsKIH0KIAotdm9pZCBobmFfbG9jYWxfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpzb2Z0X2lmYWNlLCB1aW50OF90ICphZGRyKQordm9pZCB0dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKnNvZnRfaWZhY2UsIHVpbnQ4X3QgKmFkZHIpCiB7CiAJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KHNvZnRfaWZhY2UpOwotCXN0cnVjdCBobmFfbG9jYWxfZW50cnkgKmhuYV9sb2NhbF9lbnRyeTsKLQlzdHJ1Y3QgaG5hX2dsb2JhbF9lbnRyeSAqaG5hX2dsb2JhbF9lbnRyeTsKKwlzdHJ1Y3QgdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5OworCXN0cnVjdCB0dF9nbG9iYWxfZW50cnkgKnR0X2dsb2JhbF9lbnRyeTsKIAlpbnQgcmVxdWlyZWRfYnl0ZXM7CiAKLQlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5obmFfbGhhc2hfbG9jayk7Ci0JaG5hX2xvY2FsX2VudHJ5ID0gaG5hX2xvY2FsX2hhc2hfZmluZChiYXRfcHJpdiwgYWRkcik7Ci0Jc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5obmFfbGhhc2hfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+dHRfbGhhc2hfbG9jayk7CisJdHRfbG9jYWxfZW50cnkgPSB0dF9sb2NhbF9oYXNoX2ZpbmQoYmF0X3ByaXYsIGFkZHIpOworCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+dHRfbGhhc2hfbG9jayk7CiAKLQlpZiAoaG5hX2xvY2FsX2VudHJ5KSB7Ci0JCWhuYV9sb2NhbF9lbnRyeS0+bGFzdF9zZWVuID0gamlmZmllczsKKwlpZiAodHRfbG9jYWxfZW50cnkpIHsKKwkJdHRfbG9jYWxfZW50cnktPmxhc3Rfc2VlbiA9IGppZmZpZXM7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBvbmx5IGFubm91bmNlIGFzIG1hbnkgaG9zdHMgYXMgcG9zc2libGUgaW4gdGhlIGJhdG1hbi1wYWNrZXQgYW5kCi0JICAgc3BhY2UgaW4gYmF0bWFuX3BhY2tldC0+bnVtX2huYSBUaGF0IGFsc28gc2hvdWxkIGdpdmUgYSBsaW1pdCB0bworCSAgIHNwYWNlIGluIGJhdG1hbl9wYWNrZXQtPm51bV90dCBUaGF0IGFsc28gc2hvdWxkIGdpdmUgYSBsaW1pdCB0bwogCSAgIE1BQy1mbG9vZGluZy4gKi8KLQlyZXF1aXJlZF9ieXRlcyA9IChiYXRfcHJpdi0+bnVtX2xvY2FsX2huYSArIDEpICogRVRIX0FMRU47CisJcmVxdWlyZWRfYnl0ZXMgPSAoYmF0X3ByaXYtPm51bV9sb2NhbF90dCArIDEpICogRVRIX0FMRU47CiAJcmVxdWlyZWRfYnl0ZXMgKz0gQkFUX1BBQ0tFVF9MRU47CiAKIAlpZiAoKHJlcXVpcmVkX2J5dGVzID4gRVRIX0RBVEFfTEVOKSB8fAogCSAgICAoYXRvbWljX3JlYWQoJmJhdF9wcml2LT5hZ2dyZWdhdGVkX29nbXMpICYmCiAJICAgICByZXF1aXJlZF9ieXRlcyA+IE1BWF9BR0dSRUdBVElPTl9CWVRFUykgfHwKLQkgICAgKGJhdF9wcml2LT5udW1fbG9jYWxfaG5hICsgMSA+IDI1NSkpIHsKKwkgICAgKGJhdF9wcml2LT5udW1fbG9jYWxfdHQgKyAxID4gMjU1KSkgewogCQliYXRfZGJnKERCR19ST1VURVMsIGJhdF9wcml2LAotCQkJIkNhbid0IGFkZCBuZXcgbG9jYWwgaG5hIGVudHJ5ICglcE0pOiAiCi0JCQkibnVtYmVyIG9mIGxvY2FsIGhuYSBlbnRyaWVzIGV4Y2VlZHMgcGFja2V0IHNpemVcbiIsCisJCQkiQ2FuJ3QgYWRkIG5ldyBsb2NhbCB0dCBlbnRyeSAoJXBNKTogIgorCQkJIm51bWJlciBvZiBsb2NhbCB0dCBlbnRyaWVzIGV4Y2VlZHMgcGFja2V0IHNpemVcbiIsCiAJCQlhZGRyKTsKIAkJcmV0dXJuOwogCX0KIAogCWJhdF9kYmcoREJHX1JPVVRFUywgYmF0X3ByaXYsCi0JCSJDcmVhdGluZyBuZXcgbG9jYWwgaG5hIGVudHJ5OiAlcE1cbiIsIGFkZHIpOworCQkiQ3JlYXRpbmcgbmV3IGxvY2FsIHR0IGVudHJ5OiAlcE1cbiIsIGFkZHIpOwogCi0JaG5hX2xvY2FsX2VudHJ5ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhuYV9sb2NhbF9lbnRyeSksIEdGUF9BVE9NSUMpOwotCWlmICghaG5hX2xvY2FsX2VudHJ5KQorCXR0X2xvY2FsX2VudHJ5ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHR0X2xvY2FsX2VudHJ5KSwgR0ZQX0FUT01JQyk7CisJaWYgKCF0dF9sb2NhbF9lbnRyeSkKIAkJcmV0dXJuOwogCi0JbWVtY3B5KGhuYV9sb2NhbF9lbnRyeS0+YWRkciwgYWRkciwgRVRIX0FMRU4pOwotCWhuYV9sb2NhbF9lbnRyeS0+bGFzdF9zZWVuID0gamlmZmllczsKKwltZW1jcHkodHRfbG9jYWxfZW50cnktPmFkZHIsIGFkZHIsIEVUSF9BTEVOKTsKKwl0dF9sb2NhbF9lbnRyeS0+bGFzdF9zZWVuID0gamlmZmllczsKIAogCS8qIHRoZSBiYXRtYW4gaW50ZXJmYWNlIG1hYyBhZGRyZXNzIHNob3VsZCBuZXZlciBiZSBwdXJnZWQgKi8KIAlpZiAoY29tcGFyZV9ldGgoYWRkciwgc29mdF9pZmFjZS0+ZGV2X2FkZHIpKQotCQlobmFfbG9jYWxfZW50cnktPm5ldmVyX3B1cmdlID0gMTsKKwkJdHRfbG9jYWxfZW50cnktPm5ldmVyX3B1cmdlID0gMTsKIAllbHNlCi0JCWhuYV9sb2NhbF9lbnRyeS0+bmV2ZXJfcHVyZ2UgPSAwOworCQl0dF9sb2NhbF9lbnRyeS0+bmV2ZXJfcHVyZ2UgPSAwOwogCi0Jc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+aG5hX2xoYXNoX2xvY2spOworCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPnR0X2xoYXNoX2xvY2spOwogCi0JaGFzaF9hZGQoYmF0X3ByaXYtPmhuYV9sb2NhbF9oYXNoLCBjb21wYXJlX2xobmEsIGNob29zZV9vcmlnLAotCQkgaG5hX2xvY2FsX2VudHJ5LCAmaG5hX2xvY2FsX2VudHJ5LT5oYXNoX2VudHJ5KTsKLQliYXRfcHJpdi0+bnVtX2xvY2FsX2huYSsrOwotCWF0b21pY19zZXQoJmJhdF9wcml2LT5obmFfbG9jYWxfY2hhbmdlZCwgMSk7CisJaGFzaF9hZGQoYmF0X3ByaXYtPnR0X2xvY2FsX2hhc2gsIGNvbXBhcmVfbHR0LCBjaG9vc2Vfb3JpZywKKwkJIHR0X2xvY2FsX2VudHJ5LCAmdHRfbG9jYWxfZW50cnktPmhhc2hfZW50cnkpOworCWJhdF9wcml2LT5udW1fbG9jYWxfdHQrKzsKKwlhdG9taWNfc2V0KCZiYXRfcHJpdi0+dHRfbG9jYWxfY2hhbmdlZCwgMSk7CiAKLQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmhuYV9saGFzaF9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPnR0X2xoYXNoX2xvY2spOwogCiAJLyogcmVtb3ZlIGFkZHJlc3MgZnJvbSBnbG9iYWwgaGFzaCBpZiBwcmVzZW50ICovCi0Jc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+aG5hX2doYXNoX2xvY2spOworCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPnR0X2doYXNoX2xvY2spOwogCi0JaG5hX2dsb2JhbF9lbnRyeSA9IGhuYV9nbG9iYWxfaGFzaF9maW5kKGJhdF9wcml2LCBhZGRyKTsKKwl0dF9nbG9iYWxfZW50cnkgPSB0dF9nbG9iYWxfaGFzaF9maW5kKGJhdF9wcml2LCBhZGRyKTsKIAotCWlmIChobmFfZ2xvYmFsX2VudHJ5KQotCQlfaG5hX2dsb2JhbF9kZWxfb3JpZyhiYXRfcHJpdiwgaG5hX2dsb2JhbF9lbnRyeSwKLQkJCQkgICAgICJsb2NhbCBobmEgcmVjZWl2ZWQiKTsKKwlpZiAodHRfZ2xvYmFsX2VudHJ5KQorCQlfdHRfZ2xvYmFsX2RlbF9vcmlnKGJhdF9wcml2LCB0dF9nbG9iYWxfZW50cnksCisJCQkJICAgICAibG9jYWwgdHQgcmVjZWl2ZWQiKTsKIAotCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+aG5hX2doYXNoX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+dHRfZ2hhc2hfbG9jayk7CiB9CiAKLWludCBobmFfbG9jYWxfZmlsbF9idWZmZXIoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKK2ludCB0dF9sb2NhbF9maWxsX2J1ZmZlcihzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAogCQkJICB1bnNpZ25lZCBjaGFyICpidWZmLCBpbnQgYnVmZl9sZW4pCiB7Ci0Jc3RydWN0IGhhc2h0YWJsZV90ICpoYXNoID0gYmF0X3ByaXYtPmhuYV9sb2NhbF9oYXNoOwotCXN0cnVjdCBobmFfbG9jYWxfZW50cnkgKmhuYV9sb2NhbF9lbnRyeTsKKwlzdHJ1Y3QgaGFzaHRhYmxlX3QgKmhhc2ggPSBiYXRfcHJpdi0+dHRfbG9jYWxfaGFzaDsKKwlzdHJ1Y3QgdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5OwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwogCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOwogCWludCBpLCBjb3VudCA9IDA7CiAKLQlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5obmFfbGhhc2hfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+dHRfbGhhc2hfbG9jayk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgaGFzaC0+c2l6ZTsgaSsrKSB7CiAJCWhlYWQgPSAmaGFzaC0+dGFibGVbaV07CiAKIAkJcmN1X3JlYWRfbG9jaygpOwotCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaG5hX2xvY2FsX2VudHJ5LCBub2RlLAorCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodHRfbG9jYWxfZW50cnksIG5vZGUsCiAJCQkJCSBoZWFkLCBoYXNoX2VudHJ5KSB7CiAJCQlpZiAoYnVmZl9sZW4gPCAoY291bnQgKyAxKSAqIEVUSF9BTEVOKQogCQkJCWJyZWFrOwogCi0JCQltZW1jcHkoYnVmZiArIChjb3VudCAqIEVUSF9BTEVOKSwgaG5hX2xvY2FsX2VudHJ5LT5hZGRyLAorCQkJbWVtY3B5KGJ1ZmYgKyAoY291bnQgKiBFVEhfQUxFTiksIHR0X2xvY2FsX2VudHJ5LT5hZGRyLAogCQkJICAgICAgIEVUSF9BTEVOKTsKIAogCQkJY291bnQrKzsKQEAgLTIyMywzNyArMjI0LDQ3IEBACiAJCXJjdV9yZWFkX3VubG9jaygpOwogCX0KIAotCS8qIGlmIHdlIGRpZCBub3QgZ2V0IGFsbCBuZXcgbG9jYWwgaG5hcyBzZWUgeW91IG5leHQgdGltZSAgOy0pICovCi0JaWYgKGNvdW50ID09IGJhdF9wcml2LT5udW1fbG9jYWxfaG5hKQotCQlhdG9taWNfc2V0KCZiYXRfcHJpdi0+aG5hX2xvY2FsX2NoYW5nZWQsIDApOworCS8qIGlmIHdlIGRpZCBub3QgZ2V0IGFsbCBuZXcgbG9jYWwgdHRzIHNlZSB5b3UgbmV4dCB0aW1lICA7LSkgKi8KKwlpZiAoY291bnQgPT0gYmF0X3ByaXYtPm51bV9sb2NhbF90dCkKKwkJYXRvbWljX3NldCgmYmF0X3ByaXYtPnR0X2xvY2FsX2NoYW5nZWQsIDApOwogCi0Jc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5obmFfbGhhc2hfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT50dF9saGFzaF9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKLWludCBobmFfbG9jYWxfc2VxX3ByaW50X3RleHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKK2ludCB0dF9sb2NhbF9zZXFfcHJpbnRfdGV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopc2VxLT5wcml2YXRlOwogCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKLQlzdHJ1Y3QgaGFzaHRhYmxlX3QgKmhhc2ggPSBiYXRfcHJpdi0+aG5hX2xvY2FsX2hhc2g7Ci0Jc3RydWN0IGhuYV9sb2NhbF9lbnRyeSAqaG5hX2xvY2FsX2VudHJ5OworCXN0cnVjdCBoYXNodGFibGVfdCAqaGFzaCA9IGJhdF9wcml2LT50dF9sb2NhbF9oYXNoOworCXN0cnVjdCB0dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnk7CisJc3RydWN0IGhhcmRfaWZhY2UgKnByaW1hcnlfaWY7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CiAJc2l6ZV90IGJ1Zl9zaXplLCBwb3M7CiAJY2hhciAqYnVmZjsKLQlpbnQgaTsKKwlpbnQgaSwgcmV0ID0gMDsKIAotCWlmICghYmF0X3ByaXYtPnByaW1hcnlfaWYpIHsKLQkJcmV0dXJuIHNlcV9wcmludGYoc2VxLCAiQkFUTUFOIG1lc2ggJXMgZGlzYWJsZWQgLSAiCi0JCQkgICAgICAgInBsZWFzZSBzcGVjaWZ5IGludGVyZmFjZXMgdG8gZW5hYmxlIGl0XG4iLAotCQkJICAgICAgIG5ldF9kZXYtPm5hbWUpOworCXByaW1hcnlfaWYgPSBwcmltYXJ5X2lmX2dldF9zZWxlY3RlZChiYXRfcHJpdik7CisJaWYgKCFwcmltYXJ5X2lmKSB7CisJCXJldCA9IHNlcV9wcmludGYoc2VxLCAiQkFUTUFOIG1lc2ggJXMgZGlzYWJsZWQgLSAiCisJCQkJICJwbGVhc2Ugc3BlY2lmeSBpbnRlcmZhY2VzIHRvIGVuYWJsZSBpdFxuIiwKKwkJCQkgbmV0X2Rldi0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChwcmltYXJ5X2lmLT5pZl9zdGF0dXMgIT0gSUZfQUNUSVZFKSB7CisJCXJldCA9IHNlcV9wcmludGYoc2VxLCAiQkFUTUFOIG1lc2ggJXMgZGlzYWJsZWQgLSAiCisJCQkJICJwcmltYXJ5IGludGVyZmFjZSBub3QgYWN0aXZlXG4iLAorCQkJCSBuZXRfZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CiAJfQogCiAJc2VxX3ByaW50ZihzZXEsICJMb2NhbGx5IHJldHJpZXZlZCBhZGRyZXNzZXMgKGZyb20gJXMpICIKLQkJICAgImFubm91bmNlZCB2aWEgSE5BOlxuIiwKKwkJICAgImFubm91bmNlZCB2aWEgVFQ6XG4iLAogCQkgICBuZXRfZGV2LT5uYW1lKTsKIAotCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPmhuYV9saGFzaF9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT50dF9saGFzaF9sb2NrKTsKIAogCWJ1Zl9zaXplID0gMTsKIAkvKiBFc3RpbWF0ZSBsZW5ndGggZm9yOiAiICogeHg6eHg6eHg6eHg6eHg6eHhcbiIgKi8KQEAgLTI2OCw4ICsyNzksOSBAQAogCiAJYnVmZiA9IGttYWxsb2MoYnVmX3NpemUsIEdGUF9BVE9NSUMpOwogCWlmICghYnVmZikgewotCQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmhuYV9saGFzaF9sb2NrKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+dHRfbGhhc2hfbG9jayk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OwogCX0KIAogCWJ1ZmZbMF0gPSAnXDAnOwpAQCAtMjc5LDIxMSArMjkxLDIyNSBAQAogCQloZWFkID0gJmhhc2gtPnRhYmxlW2ldOwogCiAJCXJjdV9yZWFkX2xvY2soKTsKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGhuYV9sb2NhbF9lbnRyeSwgbm9kZSwKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHR0X2xvY2FsX2VudHJ5LCBub2RlLAogCQkJCQkgaGVhZCwgaGFzaF9lbnRyeSkgewogCQkJcG9zICs9IHNucHJpbnRmKGJ1ZmYgKyBwb3MsIDIyLCAiICogJXBNXG4iLAotCQkJCQlobmFfbG9jYWxfZW50cnktPmFkZHIpOworCQkJCQl0dF9sb2NhbF9lbnRyeS0+YWRkcik7CiAJCX0KIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQogCi0Jc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5obmFfbGhhc2hfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT50dF9saGFzaF9sb2NrKTsKIAogCXNlcV9wcmludGYoc2VxLCAiJXMiLCBidWZmKTsKIAlrZnJlZShidWZmKTsKLQlyZXR1cm4gMDsKK291dDoKKwlpZiAocHJpbWFyeV9pZikKKwkJaGFyZGlmX2ZyZWVfcmVmKHByaW1hcnlfaWYpOworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9obmFfbG9jYWxfZGVsKHN0cnVjdCBobGlzdF9ub2RlICpub2RlLCB2b2lkICphcmcpCitzdGF0aWMgdm9pZCBfdHRfbG9jYWxfZGVsKHN0cnVjdCBobGlzdF9ub2RlICpub2RlLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IChzdHJ1Y3QgYmF0X3ByaXYgKilhcmc7Ci0Jdm9pZCAqZGF0YSA9IGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgaG5hX2xvY2FsX2VudHJ5LCBoYXNoX2VudHJ5KTsKKwl2b2lkICpkYXRhID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCB0dF9sb2NhbF9lbnRyeSwgaGFzaF9lbnRyeSk7CiAKIAlrZnJlZShkYXRhKTsKLQliYXRfcHJpdi0+bnVtX2xvY2FsX2huYS0tOwotCWF0b21pY19zZXQoJmJhdF9wcml2LT5obmFfbG9jYWxfY2hhbmdlZCwgMSk7CisJYmF0X3ByaXYtPm51bV9sb2NhbF90dC0tOworCWF0b21pY19zZXQoJmJhdF9wcml2LT50dF9sb2NhbF9jaGFuZ2VkLCAxKTsKIH0KIAotc3RhdGljIHZvaWQgaG5hX2xvY2FsX2RlbChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAotCQkJICBzdHJ1Y3QgaG5hX2xvY2FsX2VudHJ5ICpobmFfbG9jYWxfZW50cnksCitzdGF0aWMgdm9pZCB0dF9sb2NhbF9kZWwoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKKwkJCSAgc3RydWN0IHR0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeSwKIAkJCSAgY2hhciAqbWVzc2FnZSkKIHsKLQliYXRfZGJnKERCR19ST1VURVMsIGJhdF9wcml2LCAiRGVsZXRpbmcgbG9jYWwgaG5hIGVudHJ5ICglcE0pOiAlc1xuIiwKLQkJaG5hX2xvY2FsX2VudHJ5LT5hZGRyLCBtZXNzYWdlKTsKKwliYXRfZGJnKERCR19ST1VURVMsIGJhdF9wcml2LCAiRGVsZXRpbmcgbG9jYWwgdHQgZW50cnkgKCVwTSk6ICVzXG4iLAorCQl0dF9sb2NhbF9lbnRyeS0+YWRkciwgbWVzc2FnZSk7CiAKLQloYXNoX3JlbW92ZShiYXRfcHJpdi0+aG5hX2xvY2FsX2hhc2gsIGNvbXBhcmVfbGhuYSwgY2hvb3NlX29yaWcsCi0JCSAgICBobmFfbG9jYWxfZW50cnktPmFkZHIpOwotCV9obmFfbG9jYWxfZGVsKCZobmFfbG9jYWxfZW50cnktPmhhc2hfZW50cnksIGJhdF9wcml2KTsKKwloYXNoX3JlbW92ZShiYXRfcHJpdi0+dHRfbG9jYWxfaGFzaCwgY29tcGFyZV9sdHQsIGNob29zZV9vcmlnLAorCQkgICAgdHRfbG9jYWxfZW50cnktPmFkZHIpOworCV90dF9sb2NhbF9kZWwoJnR0X2xvY2FsX2VudHJ5LT5oYXNoX2VudHJ5LCBiYXRfcHJpdik7CiB9CiAKLXZvaWQgaG5hX2xvY2FsX3JlbW92ZShzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAordm9pZCB0dF9sb2NhbF9yZW1vdmUoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKIAkJICAgICAgdWludDhfdCAqYWRkciwgY2hhciAqbWVzc2FnZSkKIHsKLQlzdHJ1Y3QgaG5hX2xvY2FsX2VudHJ5ICpobmFfbG9jYWxfZW50cnk7CisJc3RydWN0IHR0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTsKIAotCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPmhuYV9saGFzaF9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT50dF9saGFzaF9sb2NrKTsKIAotCWhuYV9sb2NhbF9lbnRyeSA9IGhuYV9sb2NhbF9oYXNoX2ZpbmQoYmF0X3ByaXYsIGFkZHIpOworCXR0X2xvY2FsX2VudHJ5ID0gdHRfbG9jYWxfaGFzaF9maW5kKGJhdF9wcml2LCBhZGRyKTsKIAotCWlmIChobmFfbG9jYWxfZW50cnkpCi0JCWhuYV9sb2NhbF9kZWwoYmF0X3ByaXYsIGhuYV9sb2NhbF9lbnRyeSwgbWVzc2FnZSk7CisJaWYgKHR0X2xvY2FsX2VudHJ5KQorCQl0dF9sb2NhbF9kZWwoYmF0X3ByaXYsIHR0X2xvY2FsX2VudHJ5LCBtZXNzYWdlKTsKIAotCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+aG5hX2xoYXNoX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+dHRfbGhhc2hfbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIGhuYV9sb2NhbF9wdXJnZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgdm9pZCB0dF9sb2NhbF9wdXJnZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGRlbGF5ZWRfd29yayAqZGVsYXllZF93b3JrID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOwogCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPQotCQljb250YWluZXJfb2YoZGVsYXllZF93b3JrLCBzdHJ1Y3QgYmF0X3ByaXYsIGhuYV93b3JrKTsKLQlzdHJ1Y3QgaGFzaHRhYmxlX3QgKmhhc2ggPSBiYXRfcHJpdi0+aG5hX2xvY2FsX2hhc2g7Ci0Jc3RydWN0IGhuYV9sb2NhbF9lbnRyeSAqaG5hX2xvY2FsX2VudHJ5OworCQljb250YWluZXJfb2YoZGVsYXllZF93b3JrLCBzdHJ1Y3QgYmF0X3ByaXYsIHR0X3dvcmspOworCXN0cnVjdCBoYXNodGFibGVfdCAqaGFzaCA9IGJhdF9wcml2LT50dF9sb2NhbF9oYXNoOworCXN0cnVjdCB0dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnk7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsICpub2RlX3RtcDsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAJaW50IGk7CiAKLQlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5obmFfbGhhc2hfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+dHRfbGhhc2hfbG9jayk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgaGFzaC0+c2l6ZTsgaSsrKSB7CiAJCWhlYWQgPSAmaGFzaC0+dGFibGVbaV07CiAKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShobmFfbG9jYWxfZW50cnksIG5vZGUsIG5vZGVfdG1wLAorCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHR0X2xvY2FsX2VudHJ5LCBub2RlLCBub2RlX3RtcCwKIAkJCQkJICBoZWFkLCBoYXNoX2VudHJ5KSB7Ci0JCQlpZiAoaG5hX2xvY2FsX2VudHJ5LT5uZXZlcl9wdXJnZSkKKwkJCWlmICh0dF9sb2NhbF9lbnRyeS0+bmV2ZXJfcHVyZ2UpCiAJCQkJY29udGludWU7CiAKLQkJCXRpbWVvdXQgPSBobmFfbG9jYWxfZW50cnktPmxhc3Rfc2VlbjsKLQkJCXRpbWVvdXQgKz0gTE9DQUxfSE5BX1RJTUVPVVQgKiBIWjsKKwkJCXRpbWVvdXQgPSB0dF9sb2NhbF9lbnRyeS0+bGFzdF9zZWVuOworCQkJdGltZW91dCArPSBUVF9MT0NBTF9USU1FT1VUICogSFo7CiAKIAkJCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkKIAkJCQljb250aW51ZTsKIAotCQkJaG5hX2xvY2FsX2RlbChiYXRfcHJpdiwgaG5hX2xvY2FsX2VudHJ5LAorCQkJdHRfbG9jYWxfZGVsKGJhdF9wcml2LCB0dF9sb2NhbF9lbnRyeSwKIAkJCQkgICAgICAiYWRkcmVzcyB0aW1lZCBvdXQiKTsKIAkJfQogCX0KIAotCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+aG5hX2xoYXNoX2xvY2spOwotCWhuYV9sb2NhbF9zdGFydF90aW1lcihiYXRfcHJpdik7CisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT50dF9saGFzaF9sb2NrKTsKKwl0dF9sb2NhbF9zdGFydF90aW1lcihiYXRfcHJpdik7CiB9CiAKLXZvaWQgaG5hX2xvY2FsX2ZyZWUoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKK3ZvaWQgdHRfbG9jYWxfZnJlZShzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KQogewotCWlmICghYmF0X3ByaXYtPmhuYV9sb2NhbF9oYXNoKQorCWlmICghYmF0X3ByaXYtPnR0X2xvY2FsX2hhc2gpCiAJCXJldHVybjsKIAotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYmF0X3ByaXYtPmhuYV93b3JrKTsKLQloYXNoX2RlbGV0ZShiYXRfcHJpdi0+aG5hX2xvY2FsX2hhc2gsIF9obmFfbG9jYWxfZGVsLCBiYXRfcHJpdik7Ci0JYmF0X3ByaXYtPmhuYV9sb2NhbF9oYXNoID0gTlVMTDsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmJhdF9wcml2LT50dF93b3JrKTsKKwloYXNoX2RlbGV0ZShiYXRfcHJpdi0+dHRfbG9jYWxfaGFzaCwgX3R0X2xvY2FsX2RlbCwgYmF0X3ByaXYpOworCWJhdF9wcml2LT50dF9sb2NhbF9oYXNoID0gTlVMTDsKIH0KIAotaW50IGhuYV9nbG9iYWxfaW5pdChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KQoraW50IHR0X2dsb2JhbF9pbml0KHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCiB7Ci0JaWYgKGJhdF9wcml2LT5obmFfZ2xvYmFsX2hhc2gpCisJaWYgKGJhdF9wcml2LT50dF9nbG9iYWxfaGFzaCkKIAkJcmV0dXJuIDE7CiAKLQliYXRfcHJpdi0+aG5hX2dsb2JhbF9oYXNoID0gaGFzaF9uZXcoMTAyNCk7CisJYmF0X3ByaXYtPnR0X2dsb2JhbF9oYXNoID0gaGFzaF9uZXcoMTAyNCk7CiAKLQlpZiAoIWJhdF9wcml2LT5obmFfZ2xvYmFsX2hhc2gpCisJaWYgKCFiYXRfcHJpdi0+dHRfZ2xvYmFsX2hhc2gpCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIDE7CiB9CiAKLXZvaWQgaG5hX2dsb2JhbF9hZGRfb3JpZyhzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAordm9pZCB0dF9nbG9iYWxfYWRkX29yaWcoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKIAkJCSBzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsCi0JCQkgdW5zaWduZWQgY2hhciAqaG5hX2J1ZmYsIGludCBobmFfYnVmZl9sZW4pCisJCQkgdW5zaWduZWQgY2hhciAqdHRfYnVmZiwgaW50IHR0X2J1ZmZfbGVuKQogewotCXN0cnVjdCBobmFfZ2xvYmFsX2VudHJ5ICpobmFfZ2xvYmFsX2VudHJ5OwotCXN0cnVjdCBobmFfbG9jYWxfZW50cnkgKmhuYV9sb2NhbF9lbnRyeTsKLQlpbnQgaG5hX2J1ZmZfY291bnQgPSAwOwotCXVuc2lnbmVkIGNoYXIgKmhuYV9wdHI7CisJc3RydWN0IHR0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsX2VudHJ5OworCXN0cnVjdCB0dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnk7CisJaW50IHR0X2J1ZmZfY291bnQgPSAwOworCXVuc2lnbmVkIGNoYXIgKnR0X3B0cjsKIAotCXdoaWxlICgoaG5hX2J1ZmZfY291bnQgKyAxKSAqIEVUSF9BTEVOIDw9IGhuYV9idWZmX2xlbikgewotCQlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5obmFfZ2hhc2hfbG9jayk7CisJd2hpbGUgKCh0dF9idWZmX2NvdW50ICsgMSkgKiBFVEhfQUxFTiA8PSB0dF9idWZmX2xlbikgeworCQlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT50dF9naGFzaF9sb2NrKTsKIAotCQlobmFfcHRyID0gaG5hX2J1ZmYgKyAoaG5hX2J1ZmZfY291bnQgKiBFVEhfQUxFTik7Ci0JCWhuYV9nbG9iYWxfZW50cnkgPSBobmFfZ2xvYmFsX2hhc2hfZmluZChiYXRfcHJpdiwgaG5hX3B0cik7CisJCXR0X3B0ciA9IHR0X2J1ZmYgKyAodHRfYnVmZl9jb3VudCAqIEVUSF9BTEVOKTsKKwkJdHRfZ2xvYmFsX2VudHJ5ID0gdHRfZ2xvYmFsX2hhc2hfZmluZChiYXRfcHJpdiwgdHRfcHRyKTsKIAotCQlpZiAoIWhuYV9nbG9iYWxfZW50cnkpIHsKLQkJCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+aG5hX2doYXNoX2xvY2spOworCQlpZiAoIXR0X2dsb2JhbF9lbnRyeSkgeworCQkJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT50dF9naGFzaF9sb2NrKTsKIAotCQkJaG5hX2dsb2JhbF9lbnRyeSA9Ci0JCQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IGhuYV9nbG9iYWxfZW50cnkpLAorCQkJdHRfZ2xvYmFsX2VudHJ5ID0KKwkJCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdHRfZ2xvYmFsX2VudHJ5KSwKIAkJCQkJR0ZQX0FUT01JQyk7CiAKLQkJCWlmICghaG5hX2dsb2JhbF9lbnRyeSkKKwkJCWlmICghdHRfZ2xvYmFsX2VudHJ5KQogCQkJCWJyZWFrOwogCi0JCQltZW1jcHkoaG5hX2dsb2JhbF9lbnRyeS0+YWRkciwgaG5hX3B0ciwgRVRIX0FMRU4pOworCQkJbWVtY3B5KHR0X2dsb2JhbF9lbnRyeS0+YWRkciwgdHRfcHRyLCBFVEhfQUxFTik7CiAKIAkJCWJhdF9kYmcoREJHX1JPVVRFUywgYmF0X3ByaXYsCi0JCQkJIkNyZWF0aW5nIG5ldyBnbG9iYWwgaG5hIGVudHJ5OiAiCisJCQkJIkNyZWF0aW5nIG5ldyBnbG9iYWwgdHQgZW50cnk6ICIKIAkJCQkiJXBNICh2aWEgJXBNKVxuIiwKLQkJCQlobmFfZ2xvYmFsX2VudHJ5LT5hZGRyLCBvcmlnX25vZGUtPm9yaWcpOworCQkJCXR0X2dsb2JhbF9lbnRyeS0+YWRkciwgb3JpZ19ub2RlLT5vcmlnKTsKIAotCQkJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+aG5hX2doYXNoX2xvY2spOwotCQkJaGFzaF9hZGQoYmF0X3ByaXYtPmhuYV9nbG9iYWxfaGFzaCwgY29tcGFyZV9naG5hLAotCQkJCSBjaG9vc2Vfb3JpZywgaG5hX2dsb2JhbF9lbnRyeSwKLQkJCQkgJmhuYV9nbG9iYWxfZW50cnktPmhhc2hfZW50cnkpOworCQkJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+dHRfZ2hhc2hfbG9jayk7CisJCQloYXNoX2FkZChiYXRfcHJpdi0+dHRfZ2xvYmFsX2hhc2gsIGNvbXBhcmVfZ3R0LAorCQkJCSBjaG9vc2Vfb3JpZywgdHRfZ2xvYmFsX2VudHJ5LAorCQkJCSAmdHRfZ2xvYmFsX2VudHJ5LT5oYXNoX2VudHJ5KTsKIAogCQl9CiAKLQkJaG5hX2dsb2JhbF9lbnRyeS0+b3JpZ19ub2RlID0gb3JpZ19ub2RlOwotCQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmhuYV9naGFzaF9sb2NrKTsKKwkJdHRfZ2xvYmFsX2VudHJ5LT5vcmlnX25vZGUgPSBvcmlnX25vZGU7CisJCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+dHRfZ2hhc2hfbG9jayk7CiAKIAkJLyogcmVtb3ZlIGFkZHJlc3MgZnJvbSBsb2NhbCBoYXNoIGlmIHByZXNlbnQgKi8KLQkJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+aG5hX2xoYXNoX2xvY2spOworCQlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT50dF9saGFzaF9sb2NrKTsKIAotCQlobmFfcHRyID0gaG5hX2J1ZmYgKyAoaG5hX2J1ZmZfY291bnQgKiBFVEhfQUxFTik7Ci0JCWhuYV9sb2NhbF9lbnRyeSA9IGhuYV9sb2NhbF9oYXNoX2ZpbmQoYmF0X3ByaXYsIGhuYV9wdHIpOworCQl0dF9wdHIgPSB0dF9idWZmICsgKHR0X2J1ZmZfY291bnQgKiBFVEhfQUxFTik7CisJCXR0X2xvY2FsX2VudHJ5ID0gdHRfbG9jYWxfaGFzaF9maW5kKGJhdF9wcml2LCB0dF9wdHIpOwogCi0JCWlmIChobmFfbG9jYWxfZW50cnkpCi0JCQlobmFfbG9jYWxfZGVsKGJhdF9wcml2LCBobmFfbG9jYWxfZW50cnksCi0JCQkJICAgICAgImdsb2JhbCBobmEgcmVjZWl2ZWQiKTsKKwkJaWYgKHR0X2xvY2FsX2VudHJ5KQorCQkJdHRfbG9jYWxfZGVsKGJhdF9wcml2LCB0dF9sb2NhbF9lbnRyeSwKKwkJCQkgICAgICAiZ2xvYmFsIHR0IHJlY2VpdmVkIik7CiAKLQkJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5obmFfbGhhc2hfbG9jayk7CisJCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+dHRfbGhhc2hfbG9jayk7CiAKLQkJaG5hX2J1ZmZfY291bnQrKzsKKwkJdHRfYnVmZl9jb3VudCsrOwogCX0KIAogCS8qIGluaXRpYWxpemUsIGFuZCBvdmVyd3JpdGUgaWYgbWFsbG9jIHN1Y2NlZWRzICovCi0Jb3JpZ19ub2RlLT5obmFfYnVmZiA9IE5VTEw7Ci0Jb3JpZ19ub2RlLT5obmFfYnVmZl9sZW4gPSAwOworCW9yaWdfbm9kZS0+dHRfYnVmZiA9IE5VTEw7CisJb3JpZ19ub2RlLT50dF9idWZmX2xlbiA9IDA7CiAKLQlpZiAoaG5hX2J1ZmZfbGVuID4gMCkgewotCQlvcmlnX25vZGUtPmhuYV9idWZmID0ga21hbGxvYyhobmFfYnVmZl9sZW4sIEdGUF9BVE9NSUMpOwotCQlpZiAob3JpZ19ub2RlLT5obmFfYnVmZikgewotCQkJbWVtY3B5KG9yaWdfbm9kZS0+aG5hX2J1ZmYsIGhuYV9idWZmLCBobmFfYnVmZl9sZW4pOwotCQkJb3JpZ19ub2RlLT5obmFfYnVmZl9sZW4gPSBobmFfYnVmZl9sZW47CisJaWYgKHR0X2J1ZmZfbGVuID4gMCkgeworCQlvcmlnX25vZGUtPnR0X2J1ZmYgPSBrbWFsbG9jKHR0X2J1ZmZfbGVuLCBHRlBfQVRPTUlDKTsKKwkJaWYgKG9yaWdfbm9kZS0+dHRfYnVmZikgeworCQkJbWVtY3B5KG9yaWdfbm9kZS0+dHRfYnVmZiwgdHRfYnVmZiwgdHRfYnVmZl9sZW4pOworCQkJb3JpZ19ub2RlLT50dF9idWZmX2xlbiA9IHR0X2J1ZmZfbGVuOwogCQl9CiAJfQogfQogCi1pbnQgaG5hX2dsb2JhbF9zZXFfcHJpbnRfdGV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQoraW50IHR0X2dsb2JhbF9zZXFfcHJpbnRfdGV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopc2VxLT5wcml2YXRlOwogCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKLQlzdHJ1Y3QgaGFzaHRhYmxlX3QgKmhhc2ggPSBiYXRfcHJpdi0+aG5hX2dsb2JhbF9oYXNoOwotCXN0cnVjdCBobmFfZ2xvYmFsX2VudHJ5ICpobmFfZ2xvYmFsX2VudHJ5OworCXN0cnVjdCBoYXNodGFibGVfdCAqaGFzaCA9IGJhdF9wcml2LT50dF9nbG9iYWxfaGFzaDsKKwlzdHJ1Y3QgdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWxfZW50cnk7CisJc3RydWN0IGhhcmRfaWZhY2UgKnByaW1hcnlfaWY7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CiAJc2l6ZV90IGJ1Zl9zaXplLCBwb3M7CiAJY2hhciAqYnVmZjsKLQlpbnQgaTsKKwlpbnQgaSwgcmV0ID0gMDsKIAotCWlmICghYmF0X3ByaXYtPnByaW1hcnlfaWYpIHsKLQkJcmV0dXJuIHNlcV9wcmludGYoc2VxLCAiQkFUTUFOIG1lc2ggJXMgZGlzYWJsZWQgLSAiCi0JCQkJICAicGxlYXNlIHNwZWNpZnkgaW50ZXJmYWNlcyB0byBlbmFibGUgaXRcbiIsCi0JCQkJICBuZXRfZGV2LT5uYW1lKTsKKwlwcmltYXJ5X2lmID0gcHJpbWFyeV9pZl9nZXRfc2VsZWN0ZWQoYmF0X3ByaXYpOworCWlmICghcHJpbWFyeV9pZikgeworCQlyZXQgPSBzZXFfcHJpbnRmKHNlcSwgIkJBVE1BTiBtZXNoICVzIGRpc2FibGVkIC0gcGxlYXNlICIKKwkJCQkgInNwZWNpZnkgaW50ZXJmYWNlcyB0byBlbmFibGUgaXRcbiIsCisJCQkJIG5ldF9kZXYtPm5hbWUpOworCQlnb3RvIG91dDsKIAl9CiAKLQlzZXFfcHJpbnRmKHNlcSwgIkdsb2JhbGx5IGFubm91bmNlZCBITkFzIHJlY2VpdmVkIHZpYSB0aGUgbWVzaCAlc1xuIiwKKwlpZiAocHJpbWFyeV9pZi0+aWZfc3RhdHVzICE9IElGX0FDVElWRSkgeworCQlyZXQgPSBzZXFfcHJpbnRmKHNlcSwgIkJBVE1BTiBtZXNoICVzIGRpc2FibGVkIC0gIgorCQkJCSAicHJpbWFyeSBpbnRlcmZhY2Ugbm90IGFjdGl2ZVxuIiwKKwkJCQkgbmV0X2Rldi0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCXNlcV9wcmludGYoc2VxLAorCQkgICAiR2xvYmFsbHkgYW5ub3VuY2VkIFRUIGVudHJpZXMgcmVjZWl2ZWQgdmlhIHRoZSBtZXNoICVzXG4iLAogCQkgICBuZXRfZGV2LT5uYW1lKTsKIAotCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPmhuYV9naGFzaF9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT50dF9naGFzaF9sb2NrKTsKIAogCWJ1Zl9zaXplID0gMTsKIAkvKiBFc3RpbWF0ZSBsZW5ndGggZm9yOiAiICogeHg6eHg6eHg6eHg6eHg6eHggdmlhIHh4Onh4Onh4Onh4Onh4Onh4XG4iKi8KQEAgLTQ5OCw4ICs1MjQsOSBAQAogCiAJYnVmZiA9IGttYWxsb2MoYnVmX3NpemUsIEdGUF9BVE9NSUMpOwogCWlmICghYnVmZikgewotCQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmhuYV9naGFzaF9sb2NrKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+dHRfZ2hhc2hfbG9jayk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OwogCX0KIAlidWZmWzBdID0gJ1wwJzsKIAlwb3MgPSAwOwpAQCAtNTA4LDEwMSArNTM1LDEwNCBAQAogCQloZWFkID0gJmhhc2gtPnRhYmxlW2ldOwogCiAJCXJjdV9yZWFkX2xvY2soKTsKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGhuYV9nbG9iYWxfZW50cnksIG5vZGUsCisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0dF9nbG9iYWxfZW50cnksIG5vZGUsCiAJCQkJCSBoZWFkLCBoYXNoX2VudHJ5KSB7CiAJCQlwb3MgKz0gc25wcmludGYoYnVmZiArIHBvcywgNDQsCiAJCQkJCSIgKiAlcE0gdmlhICVwTVxuIiwKLQkJCQkJaG5hX2dsb2JhbF9lbnRyeS0+YWRkciwKLQkJCQkJaG5hX2dsb2JhbF9lbnRyeS0+b3JpZ19ub2RlLT5vcmlnKTsKKwkJCQkJdHRfZ2xvYmFsX2VudHJ5LT5hZGRyLAorCQkJCQl0dF9nbG9iYWxfZW50cnktPm9yaWdfbm9kZS0+b3JpZyk7CiAJCX0KIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQogCi0Jc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5obmFfZ2hhc2hfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT50dF9naGFzaF9sb2NrKTsKIAogCXNlcV9wcmludGYoc2VxLCAiJXMiLCBidWZmKTsKIAlrZnJlZShidWZmKTsKLQlyZXR1cm4gMDsKK291dDoKKwlpZiAocHJpbWFyeV9pZikKKwkJaGFyZGlmX2ZyZWVfcmVmKHByaW1hcnlfaWYpOworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9obmFfZ2xvYmFsX2RlbF9vcmlnKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCi0JCQkJIHN0cnVjdCBobmFfZ2xvYmFsX2VudHJ5ICpobmFfZ2xvYmFsX2VudHJ5LAorc3RhdGljIHZvaWQgX3R0X2dsb2JhbF9kZWxfb3JpZyhzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAorCQkJCSBzdHJ1Y3QgdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWxfZW50cnksCiAJCQkJIGNoYXIgKm1lc3NhZ2UpCiB7CiAJYmF0X2RiZyhEQkdfUk9VVEVTLCBiYXRfcHJpdiwKLQkJIkRlbGV0aW5nIGdsb2JhbCBobmEgZW50cnkgJXBNICh2aWEgJXBNKTogJXNcbiIsCi0JCWhuYV9nbG9iYWxfZW50cnktPmFkZHIsIGhuYV9nbG9iYWxfZW50cnktPm9yaWdfbm9kZS0+b3JpZywKKwkJIkRlbGV0aW5nIGdsb2JhbCB0dCBlbnRyeSAlcE0gKHZpYSAlcE0pOiAlc1xuIiwKKwkJdHRfZ2xvYmFsX2VudHJ5LT5hZGRyLCB0dF9nbG9iYWxfZW50cnktPm9yaWdfbm9kZS0+b3JpZywKIAkJbWVzc2FnZSk7CiAKLQloYXNoX3JlbW92ZShiYXRfcHJpdi0+aG5hX2dsb2JhbF9oYXNoLCBjb21wYXJlX2dobmEsIGNob29zZV9vcmlnLAotCQkgICAgaG5hX2dsb2JhbF9lbnRyeS0+YWRkcik7Ci0Ja2ZyZWUoaG5hX2dsb2JhbF9lbnRyeSk7CisJaGFzaF9yZW1vdmUoYmF0X3ByaXYtPnR0X2dsb2JhbF9oYXNoLCBjb21wYXJlX2d0dCwgY2hvb3NlX29yaWcsCisJCSAgICB0dF9nbG9iYWxfZW50cnktPmFkZHIpOworCWtmcmVlKHR0X2dsb2JhbF9lbnRyeSk7CiB9CiAKLXZvaWQgaG5hX2dsb2JhbF9kZWxfb3JpZyhzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAordm9pZCB0dF9nbG9iYWxfZGVsX29yaWcoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKIAkJCSBzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsIGNoYXIgKm1lc3NhZ2UpCiB7Ci0Jc3RydWN0IGhuYV9nbG9iYWxfZW50cnkgKmhuYV9nbG9iYWxfZW50cnk7Ci0JaW50IGhuYV9idWZmX2NvdW50ID0gMDsKLQl1bnNpZ25lZCBjaGFyICpobmFfcHRyOworCXN0cnVjdCB0dF9nbG9iYWxfZW50cnkgKnR0X2dsb2JhbF9lbnRyeTsKKwlpbnQgdHRfYnVmZl9jb3VudCA9IDA7CisJdW5zaWduZWQgY2hhciAqdHRfcHRyOwogCi0JaWYgKG9yaWdfbm9kZS0+aG5hX2J1ZmZfbGVuID09IDApCisJaWYgKG9yaWdfbm9kZS0+dHRfYnVmZl9sZW4gPT0gMCkKIAkJcmV0dXJuOwogCi0Jc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+aG5hX2doYXNoX2xvY2spOworCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPnR0X2doYXNoX2xvY2spOwogCi0Jd2hpbGUgKChobmFfYnVmZl9jb3VudCArIDEpICogRVRIX0FMRU4gPD0gb3JpZ19ub2RlLT5obmFfYnVmZl9sZW4pIHsKLQkJaG5hX3B0ciA9IG9yaWdfbm9kZS0+aG5hX2J1ZmYgKyAoaG5hX2J1ZmZfY291bnQgKiBFVEhfQUxFTik7Ci0JCWhuYV9nbG9iYWxfZW50cnkgPSBobmFfZ2xvYmFsX2hhc2hfZmluZChiYXRfcHJpdiwgaG5hX3B0cik7CisJd2hpbGUgKCh0dF9idWZmX2NvdW50ICsgMSkgKiBFVEhfQUxFTiA8PSBvcmlnX25vZGUtPnR0X2J1ZmZfbGVuKSB7CisJCXR0X3B0ciA9IG9yaWdfbm9kZS0+dHRfYnVmZiArICh0dF9idWZmX2NvdW50ICogRVRIX0FMRU4pOworCQl0dF9nbG9iYWxfZW50cnkgPSB0dF9nbG9iYWxfaGFzaF9maW5kKGJhdF9wcml2LCB0dF9wdHIpOwogCi0JCWlmICgoaG5hX2dsb2JhbF9lbnRyeSkgJiYKLQkJICAgIChobmFfZ2xvYmFsX2VudHJ5LT5vcmlnX25vZGUgPT0gb3JpZ19ub2RlKSkKLQkJCV9obmFfZ2xvYmFsX2RlbF9vcmlnKGJhdF9wcml2LCBobmFfZ2xvYmFsX2VudHJ5LAorCQlpZiAoKHR0X2dsb2JhbF9lbnRyeSkgJiYKKwkJICAgICh0dF9nbG9iYWxfZW50cnktPm9yaWdfbm9kZSA9PSBvcmlnX25vZGUpKQorCQkJX3R0X2dsb2JhbF9kZWxfb3JpZyhiYXRfcHJpdiwgdHRfZ2xvYmFsX2VudHJ5LAogCQkJCQkgICAgIG1lc3NhZ2UpOwogCi0JCWhuYV9idWZmX2NvdW50Kys7CisJCXR0X2J1ZmZfY291bnQrKzsKIAl9CiAKLQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmhuYV9naGFzaF9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPnR0X2doYXNoX2xvY2spOwogCi0Jb3JpZ19ub2RlLT5obmFfYnVmZl9sZW4gPSAwOwotCWtmcmVlKG9yaWdfbm9kZS0+aG5hX2J1ZmYpOwotCW9yaWdfbm9kZS0+aG5hX2J1ZmYgPSBOVUxMOworCW9yaWdfbm9kZS0+dHRfYnVmZl9sZW4gPSAwOworCWtmcmVlKG9yaWdfbm9kZS0+dHRfYnVmZik7CisJb3JpZ19ub2RlLT50dF9idWZmID0gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgaG5hX2dsb2JhbF9kZWwoc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsIHZvaWQgKmFyZykKK3N0YXRpYyB2b2lkIHR0X2dsb2JhbF9kZWwoc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsIHZvaWQgKmFyZykKIHsKLQl2b2lkICpkYXRhID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBobmFfZ2xvYmFsX2VudHJ5LCBoYXNoX2VudHJ5KTsKKwl2b2lkICpkYXRhID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCB0dF9nbG9iYWxfZW50cnksIGhhc2hfZW50cnkpOwogCiAJa2ZyZWUoZGF0YSk7CiB9CiAKLXZvaWQgaG5hX2dsb2JhbF9mcmVlKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCit2b2lkIHR0X2dsb2JhbF9mcmVlKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCiB7Ci0JaWYgKCFiYXRfcHJpdi0+aG5hX2dsb2JhbF9oYXNoKQorCWlmICghYmF0X3ByaXYtPnR0X2dsb2JhbF9oYXNoKQogCQlyZXR1cm47CiAKLQloYXNoX2RlbGV0ZShiYXRfcHJpdi0+aG5hX2dsb2JhbF9oYXNoLCBobmFfZ2xvYmFsX2RlbCwgTlVMTCk7Ci0JYmF0X3ByaXYtPmhuYV9nbG9iYWxfaGFzaCA9IE5VTEw7CisJaGFzaF9kZWxldGUoYmF0X3ByaXYtPnR0X2dsb2JhbF9oYXNoLCB0dF9nbG9iYWxfZGVsLCBOVUxMKTsKKwliYXRfcHJpdi0+dHRfZ2xvYmFsX2hhc2ggPSBOVUxMOwogfQogCiBzdHJ1Y3Qgb3JpZ19ub2RlICp0cmFuc3RhYmxlX3NlYXJjaChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LCB1aW50OF90ICphZGRyKQogewotCXN0cnVjdCBobmFfZ2xvYmFsX2VudHJ5ICpobmFfZ2xvYmFsX2VudHJ5OworCXN0cnVjdCB0dF9nbG9iYWxfZW50cnkgKnR0X2dsb2JhbF9lbnRyeTsKIAlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUgPSBOVUxMOwogCi0Jc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+aG5hX2doYXNoX2xvY2spOwotCWhuYV9nbG9iYWxfZW50cnkgPSBobmFfZ2xvYmFsX2hhc2hfZmluZChiYXRfcHJpdiwgYWRkcik7CisJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+dHRfZ2hhc2hfbG9jayk7CisJdHRfZ2xvYmFsX2VudHJ5ID0gdHRfZ2xvYmFsX2hhc2hfZmluZChiYXRfcHJpdiwgYWRkcik7CiAKLQlpZiAoIWhuYV9nbG9iYWxfZW50cnkpCisJaWYgKCF0dF9nbG9iYWxfZW50cnkpCiAJCWdvdG8gb3V0OwogCi0JaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZobmFfZ2xvYmFsX2VudHJ5LT5vcmlnX25vZGUtPnJlZmNvdW50KSkKKwlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oJnR0X2dsb2JhbF9lbnRyeS0+b3JpZ19ub2RlLT5yZWZjb3VudCkpCiAJCWdvdG8gb3V0OwogCi0Jb3JpZ19ub2RlID0gaG5hX2dsb2JhbF9lbnRyeS0+b3JpZ19ub2RlOworCW9yaWdfbm9kZSA9IHR0X2dsb2JhbF9lbnRyeS0+b3JpZ19ub2RlOwogCiBvdXQ6Ci0Jc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT5obmFfZ2hhc2hfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT50dF9naGFzaF9sb2NrKTsKIAlyZXR1cm4gb3JpZ19ub2RlOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuaCBiL25ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmgKaW5kZXggZjE5OTMxYy4uNDYxNTJjMyAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuaAorKysgYi9uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5oCkBAIC0yMiwyMiArMjIsMjIgQEAKICNpZm5kZWYgX05FVF9CQVRNQU5fQURWX1RSQU5TTEFUSU9OX1RBQkxFX0hfCiAjZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9UUkFOU0xBVElPTl9UQUJMRV9IXwogCi1pbnQgaG5hX2xvY2FsX2luaXQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdik7Ci12b2lkIGhuYV9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKnNvZnRfaWZhY2UsIHVpbnQ4X3QgKmFkZHIpOwotdm9pZCBobmFfbG9jYWxfcmVtb3ZlKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCitpbnQgdHRfbG9jYWxfaW5pdChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KTsKK3ZvaWQgdHRfbG9jYWxfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpzb2Z0X2lmYWNlLCB1aW50OF90ICphZGRyKTsKK3ZvaWQgdHRfbG9jYWxfcmVtb3ZlKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCiAJCSAgICAgIHVpbnQ4X3QgKmFkZHIsIGNoYXIgKm1lc3NhZ2UpOwotaW50IGhuYV9sb2NhbF9maWxsX2J1ZmZlcihzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAoraW50IHR0X2xvY2FsX2ZpbGxfYnVmZmVyKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCiAJCQkgIHVuc2lnbmVkIGNoYXIgKmJ1ZmYsIGludCBidWZmX2xlbik7Ci1pbnQgaG5hX2xvY2FsX3NlcV9wcmludF90ZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpOwotdm9pZCBobmFfbG9jYWxfZnJlZShzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KTsKLWludCBobmFfZ2xvYmFsX2luaXQoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdik7Ci12b2lkIGhuYV9nbG9iYWxfYWRkX29yaWcoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwKK2ludCB0dF9sb2NhbF9zZXFfcHJpbnRfdGV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KTsKK3ZvaWQgdHRfbG9jYWxfZnJlZShzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KTsKK2ludCB0dF9nbG9iYWxfaW5pdChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KTsKK3ZvaWQgdHRfZ2xvYmFsX2FkZF9vcmlnKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCiAJCQkgc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlLAotCQkJIHVuc2lnbmVkIGNoYXIgKmhuYV9idWZmLCBpbnQgaG5hX2J1ZmZfbGVuKTsKLWludCBobmFfZ2xvYmFsX3NlcV9wcmludF90ZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpOwotdm9pZCBobmFfZ2xvYmFsX2RlbF9vcmlnKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCisJCQkgdW5zaWduZWQgY2hhciAqdHRfYnVmZiwgaW50IHR0X2J1ZmZfbGVuKTsKK2ludCB0dF9nbG9iYWxfc2VxX3ByaW50X3RleHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCk7Cit2b2lkIHR0X2dsb2JhbF9kZWxfb3JpZyhzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAogCQkJIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwgY2hhciAqbWVzc2FnZSk7Ci12b2lkIGhuYV9nbG9iYWxfZnJlZShzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KTsKK3ZvaWQgdHRfZ2xvYmFsX2ZyZWUoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdik7CiBzdHJ1Y3Qgb3JpZ19ub2RlICp0cmFuc3RhYmxlX3NlYXJjaChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LCB1aW50OF90ICphZGRyKTsKIAogI2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9UUkFOU0xBVElPTl9UQUJMRV9IXyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvdHlwZXMuaCBiL25ldC9iYXRtYW4tYWR2L3R5cGVzLmgKaW5kZXggODM0NDVjZi4uZmFiNzBlOCAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvdHlwZXMuaAorKysgYi9uZXQvYmF0bWFuLWFkdi90eXBlcy5oCkBAIC02Nyw3ICs2Nyw3IEBACiBzdHJ1Y3Qgb3JpZ19ub2RlIHsKIAl1aW50OF90IG9yaWdbRVRIX0FMRU5dOwogCXVpbnQ4X3QgcHJpbWFyeV9hZGRyW0VUSF9BTEVOXTsKLQlzdHJ1Y3QgbmVpZ2hfbm9kZSAqcm91dGVyOworCXN0cnVjdCBuZWlnaF9ub2RlIF9fcmN1ICpyb3V0ZXI7IC8qIHJjdSBwcm90ZWN0ZWQgcG9pbnRlciAqLwogCXVuc2lnbmVkIGxvbmcgKmJjYXN0X293bjsKIAl1aW50OF90ICpiY2FzdF9vd25fc3VtOwogCXVuc2lnbmVkIGxvbmcgbGFzdF92YWxpZDsKQEAgLTc1LDI1ICs3NSwyNSBAQAogCXVuc2lnbmVkIGxvbmcgYmF0bWFuX3NlcW5vX3Jlc2V0OwogCXVpbnQ4X3QgZ3dfZmxhZ3M7CiAJdWludDhfdCBmbGFnczsKLQl1bnNpZ25lZCBjaGFyICpobmFfYnVmZjsKLQlpbnQxNl90IGhuYV9idWZmX2xlbjsKKwl1bnNpZ25lZCBjaGFyICp0dF9idWZmOworCWludDE2X3QgdHRfYnVmZl9sZW47CiAJdWludDMyX3QgbGFzdF9yZWFsX3NlcW5vOwogCXVpbnQ4X3QgbGFzdF90dGw7CiAJdW5zaWduZWQgbG9uZyBiY2FzdF9iaXRzW05VTV9XT1JEU107CiAJdWludDMyX3QgbGFzdF9iY2FzdF9zZXFubzsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCBuZWlnaF9saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgZnJhZ19saXN0OwotCXNwaW5sb2NrX3QgbmVpZ2hfbGlzdF9sb2NrOyAvKiBwcm90ZWN0cyBuZWlnaGJvciBsaXN0ICovCisJc3BpbmxvY2tfdCBuZWlnaF9saXN0X2xvY2s7IC8qIHByb3RlY3RzIG5laWdoX2xpc3QgYW5kIHJvdXRlciAqLwogCWF0b21pY190IHJlZmNvdW50OwogCXN0cnVjdCByY3VfaGVhZCByY3U7CiAJc3RydWN0IGhsaXN0X25vZGUgaGFzaF9lbnRyeTsKIAlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2OwogCXVuc2lnbmVkIGxvbmcgbGFzdF9mcmFnX3BhY2tldDsKLQlzcGlubG9ja190IG9nbV9jbnRfbG9jazsgLyogcHJvdGVjdHM6IGJjYXN0X293biwgYmNhc3Rfb3duX3N1bSwKLQkJCQkgICogbmVpZ2hfbm9kZS0+cmVhbF9iaXRzLAotCQkJCSAgKiBuZWlnaF9ub2RlLT5yZWFsX3BhY2tldF9jb3VudCAqLwotCXNwaW5sb2NrX3QgYmNhc3Rfc2Vxbm9fbG9jazsgLyogcHJvdGVjdHMgYmNhc3RfYml0cywKLQkJCQkgICAgICAqCSBsYXN0X2JjYXN0X3NlcW5vICovCisJLyogb2dtX2NudF9sb2NrIHByb3RlY3RzOiBiY2FzdF9vd24sIGJjYXN0X293bl9zdW0sCisJICogbmVpZ2hfbm9kZS0+cmVhbF9iaXRzLCBuZWlnaF9ub2RlLT5yZWFsX3BhY2tldF9jb3VudCAqLworCXNwaW5sb2NrX3Qgb2dtX2NudF9sb2NrOworCS8qIGJjYXN0X3NlcW5vX2xvY2sgcHJvdGVjdHMgYmNhc3RfYml0cywgbGFzdF9iY2FzdF9zZXFubyAqLworCXNwaW5sb2NrX3QgYmNhc3Rfc2Vxbm9fbG9jazsKIAlhdG9taWNfdCBib25kX2NhbmRpZGF0ZXM7CiAJc3RydWN0IGxpc3RfaGVhZCBib25kX2xpc3Q7CiB9OwpAQCAtMTI1LDYgKzEyNSw3IEBACiAJc3RydWN0IHJjdV9oZWFkIHJjdTsKIAlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGU7CiAJc3RydWN0IGhhcmRfaWZhY2UgKmlmX2luY29taW5nOworCXNwaW5sb2NrX3QgdHFfbG9jazsJLyogcHJvdGVjdHM6IHRxX3JlY3YsIHRxX2luZGV4ICovCiB9OwogCiAKQEAgLTE0NSwzNCArMTQ2LDM0IEBACiAJYXRvbWljX3QgYmNhc3RfcXVldWVfbGVmdDsKIAlhdG9taWNfdCBiYXRtYW5fcXVldWVfbGVmdDsKIAljaGFyIG51bV9pZmFjZXM7Ci0Jc3RydWN0IGhsaXN0X2hlYWQgc29mdGlmX25laWdoX2xpc3Q7Ci0Jc3RydWN0IHNvZnRpZl9uZWlnaCAqc29mdGlmX25laWdoOwogCXN0cnVjdCBkZWJ1Z19sb2cgKmRlYnVnX2xvZzsKLQlzdHJ1Y3QgaGFyZF9pZmFjZSAqcHJpbWFyeV9pZjsKIAlzdHJ1Y3Qga29iamVjdCAqbWVzaF9vYmo7CiAJc3RydWN0IGRlbnRyeSAqZGVidWdfZGlyOwogCXN0cnVjdCBobGlzdF9oZWFkIGZvcndfYmF0X2xpc3Q7CiAJc3RydWN0IGhsaXN0X2hlYWQgZm9yd19iY2FzdF9saXN0OwogCXN0cnVjdCBobGlzdF9oZWFkIGd3X2xpc3Q7CisJc3RydWN0IGhsaXN0X2hlYWQgc29mdGlmX25laWdoX3ZpZHM7CiAJc3RydWN0IGxpc3RfaGVhZCB2aXNfc2VuZF9saXN0OwogCXN0cnVjdCBoYXNodGFibGVfdCAqb3JpZ19oYXNoOwotCXN0cnVjdCBoYXNodGFibGVfdCAqaG5hX2xvY2FsX2hhc2g7Ci0Jc3RydWN0IGhhc2h0YWJsZV90ICpobmFfZ2xvYmFsX2hhc2g7CisJc3RydWN0IGhhc2h0YWJsZV90ICp0dF9sb2NhbF9oYXNoOworCXN0cnVjdCBoYXNodGFibGVfdCAqdHRfZ2xvYmFsX2hhc2g7CiAJc3RydWN0IGhhc2h0YWJsZV90ICp2aXNfaGFzaDsKIAlzcGlubG9ja190IGZvcndfYmF0X2xpc3RfbG9jazsgLyogcHJvdGVjdHMgZm9yd19iYXRfbGlzdCAqLwogCXNwaW5sb2NrX3QgZm9yd19iY2FzdF9saXN0X2xvY2s7IC8qIHByb3RlY3RzICAqLwotCXNwaW5sb2NrX3QgaG5hX2xoYXNoX2xvY2s7IC8qIHByb3RlY3RzIGhuYV9sb2NhbF9oYXNoICovCi0Jc3BpbmxvY2tfdCBobmFfZ2hhc2hfbG9jazsgLyogcHJvdGVjdHMgaG5hX2dsb2JhbF9oYXNoICovCisJc3BpbmxvY2tfdCB0dF9saGFzaF9sb2NrOyAvKiBwcm90ZWN0cyB0dF9sb2NhbF9oYXNoICovCisJc3BpbmxvY2tfdCB0dF9naGFzaF9sb2NrOyAvKiBwcm90ZWN0cyB0dF9nbG9iYWxfaGFzaCAqLwogCXNwaW5sb2NrX3QgZ3dfbGlzdF9sb2NrOyAvKiBwcm90ZWN0cyBnd19saXN0IGFuZCBjdXJyX2d3ICovCiAJc3BpbmxvY2tfdCB2aXNfaGFzaF9sb2NrOyAvKiBwcm90ZWN0cyB2aXNfaGFzaCAqLwogCXNwaW5sb2NrX3QgdmlzX2xpc3RfbG9jazsgLyogcHJvdGVjdHMgdmlzX2luZm86OnJlY3ZfbGlzdCAqLwogCXNwaW5sb2NrX3Qgc29mdGlmX25laWdoX2xvY2s7IC8qIHByb3RlY3RzIHNvZnQtaW50ZXJmYWNlIG5laWdoIGxpc3QgKi8KLQlpbnQxNl90IG51bV9sb2NhbF9obmE7Ci0JYXRvbWljX3QgaG5hX2xvY2FsX2NoYW5nZWQ7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayBobmFfd29yazsKKwlzcGlubG9ja190IHNvZnRpZl9uZWlnaF92aWRfbG9jazsgLyogcHJvdGVjdHMgc29mdC1pbnRlcmZhY2UgdmlkIGxpc3QgKi8KKwlpbnQxNl90IG51bV9sb2NhbF90dDsKKwlhdG9taWNfdCB0dF9sb2NhbF9jaGFuZ2VkOworCXN0cnVjdCBkZWxheWVkX3dvcmsgdHRfd29yazsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIG9yaWdfd29yazsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHZpc193b3JrOwogCXN0cnVjdCBnd19ub2RlIF9fcmN1ICpjdXJyX2d3OyAgLyogcmN1IHByb3RlY3RlZCBwb2ludGVyICovCisJc3RydWN0IGhhcmRfaWZhY2UgX19yY3UgKnByaW1hcnlfaWY7ICAvKiByY3UgcHJvdGVjdGVkIHBvaW50ZXIgKi8KIAlzdHJ1Y3QgdmlzX2luZm8gKm15X3Zpc19pbmZvOwogfTsKIApAQCAtMTkxLDE0ICsxOTIsMTQgQEAKIAlzdHJ1Y3QgaWNtcF9wYWNrZXRfcnIgaWNtcF9wYWNrZXQ7CiB9OwogCi1zdHJ1Y3QgaG5hX2xvY2FsX2VudHJ5IHsKK3N0cnVjdCB0dF9sb2NhbF9lbnRyeSB7CiAJdWludDhfdCBhZGRyW0VUSF9BTEVOXTsKIAl1bnNpZ25lZCBsb25nIGxhc3Rfc2VlbjsKIAljaGFyIG5ldmVyX3B1cmdlOwogCXN0cnVjdCBobGlzdF9ub2RlIGhhc2hfZW50cnk7CiB9OwogCi1zdHJ1Y3QgaG5hX2dsb2JhbF9lbnRyeSB7CitzdHJ1Y3QgdHRfZ2xvYmFsX2VudHJ5IHsKIAl1aW50OF90IGFkZHJbRVRIX0FMRU5dOwogCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSBoYXNoX2VudHJ5OwpAQCAtMjYxLDcgKzI2Miw3IEBACiBzdHJ1Y3QgdmlzX2luZm9fZW50cnkgewogCXVpbnQ4X3QgIHNyY1tFVEhfQUxFTl07CiAJdWludDhfdCAgZGVzdFtFVEhfQUxFTl07Ci0JdWludDhfdCAgcXVhbGl0eTsJLyogcXVhbGl0eSA9IDAgbWVhbnMgSE5BICovCisJdWludDhfdCAgcXVhbGl0eTsJLyogcXVhbGl0eSA9IDAgY2xpZW50ICovCiB9IF9fcGFja2VkOwogCiBzdHJ1Y3QgcmVjdmxpc3Rfbm9kZSB7CkBAIC0yNjksMTEgKzI3MCwyMCBAQAogCXVpbnQ4X3QgbWFjW0VUSF9BTEVOXTsKIH07CiAKK3N0cnVjdCBzb2Z0aWZfbmVpZ2hfdmlkIHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBsaXN0OworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXY7CisJc2hvcnQgdmlkOworCWF0b21pY190IHJlZmNvdW50OworCXN0cnVjdCBzb2Z0aWZfbmVpZ2ggX19yY3UgKnNvZnRpZl9uZWlnaDsKKwlzdHJ1Y3QgcmN1X2hlYWQgcmN1OworCXN0cnVjdCBobGlzdF9oZWFkIHNvZnRpZl9uZWlnaF9saXN0OworfTsKKwogc3RydWN0IHNvZnRpZl9uZWlnaCB7CiAJc3RydWN0IGhsaXN0X25vZGUgbGlzdDsKIAl1aW50OF90IGFkZHJbRVRIX0FMRU5dOwogCXVuc2lnbmVkIGxvbmcgbGFzdF9zZWVuOwotCXNob3J0IHZpZDsKIAlhdG9taWNfdCByZWZjb3VudDsKIAlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwogfTsKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3VuaWNhc3QuYyBiL25ldC9iYXRtYW4tYWR2L3VuaWNhc3QuYwppbmRleCAxOWY4NGJkLi4xOWMzZGFmIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi91bmljYXN0LmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvdW5pY2FzdC5jCkBAIC0yMjEsMTUgKzIyMSwxNyBAQAogCQkgIHN0cnVjdCBoYXJkX2lmYWNlICpoYXJkX2lmYWNlLCB1aW50OF90IGRzdGFkZHJbXSkKIHsKIAlzdHJ1Y3QgdW5pY2FzdF9wYWNrZXQgdG1wX3VjLCAqdW5pY2FzdF9wYWNrZXQ7CisJc3RydWN0IGhhcmRfaWZhY2UgKnByaW1hcnlfaWY7CiAJc3RydWN0IHNrX2J1ZmYgKmZyYWdfc2tiOwogCXN0cnVjdCB1bmljYXN0X2ZyYWdfcGFja2V0ICpmcmFnMSwgKmZyYWcyOwogCWludCB1Y19oZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCB1bmljYXN0X3BhY2tldCk7CiAJaW50IHVjZl9oZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCB1bmljYXN0X2ZyYWdfcGFja2V0KTsKIAlpbnQgZGF0YV9sZW4gPSBza2ItPmxlbiAtIHVjX2hkcl9sZW47Ci0JaW50IGxhcmdlX3RhaWwgPSAwOworCWludCBsYXJnZV90YWlsID0gMCwgcmV0ID0gTkVUX1JYX0RST1A7CiAJdWludDE2X3Qgc2Vxbm87CiAKLQlpZiAoIWJhdF9wcml2LT5wcmltYXJ5X2lmKQorCXByaW1hcnlfaWYgPSBwcmltYXJ5X2lmX2dldF9zZWxlY3RlZChiYXRfcHJpdik7CisJaWYgKCFwcmltYXJ5X2lmKQogCQlnb3RvIGRyb3BwZWQ7CiAKIAlmcmFnX3NrYiA9IGRldl9hbGxvY19za2IoZGF0YV9sZW4gLSAoZGF0YV9sZW4gLyAyKSArIHVjZl9oZHJfbGVuKTsKQEAgLTI1NCw3ICsyNTYsNyBAQAogCWZyYWcxLT52ZXJzaW9uID0gQ09NUEFUX1ZFUlNJT047CiAJZnJhZzEtPnBhY2tldF90eXBlID0gQkFUX1VOSUNBU1RfRlJBRzsKIAotCW1lbWNweShmcmFnMS0+b3JpZywgYmF0X3ByaXYtPnByaW1hcnlfaWYtPm5ldF9kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KGZyYWcxLT5vcmlnLCBwcmltYXJ5X2lmLT5uZXRfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCW1lbWNweShmcmFnMiwgZnJhZzEsIHNpemVvZihzdHJ1Y3QgdW5pY2FzdF9mcmFnX3BhY2tldCkpOwogCiAJaWYgKGRhdGFfbGVuICYgMSkKQEAgLTI2OSwxMyArMjcxLDE3IEBACiAKIAlzZW5kX3NrYl9wYWNrZXQoc2tiLCBoYXJkX2lmYWNlLCBkc3RhZGRyKTsKIAlzZW5kX3NrYl9wYWNrZXQoZnJhZ19za2IsIGhhcmRfaWZhY2UsIGRzdGFkZHIpOwotCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKKwlyZXQgPSBORVRfUlhfU1VDQ0VTUzsKKwlnb3RvIG91dDsKIAogZHJvcF9mcmFnOgogCWtmcmVlX3NrYihmcmFnX3NrYik7CiBkcm9wcGVkOgogCWtmcmVlX3NrYihza2IpOwotCXJldHVybiBORVRfUlhfRFJPUDsKK291dDoKKwlpZiAocHJpbWFyeV9pZikKKwkJaGFyZGlmX2ZyZWVfcmVmKHByaW1hcnlfaWYpOworCXJldHVybiByZXQ7CiB9CiAKIGludCB1bmljYXN0X3NlbmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCkBAIC0yODksMTIgKzI5NSwxMiBAQAogCiAJLyogZ2V0IHJvdXRpbmcgaW5mb3JtYXRpb24gKi8KIAlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZXRoaGRyLT5oX2Rlc3QpKSB7Ci0JCW9yaWdfbm9kZSA9IChzdHJ1Y3Qgb3JpZ19ub2RlICopZ3dfZ2V0X3NlbGVjdGVkKGJhdF9wcml2KTsKKwkJb3JpZ19ub2RlID0gKHN0cnVjdCBvcmlnX25vZGUgKilnd19nZXRfc2VsZWN0ZWRfb3JpZyhiYXRfcHJpdik7CiAJCWlmIChvcmlnX25vZGUpCiAJCQlnb3RvIGZpbmRfcm91dGVyOwogCX0KIAotCS8qIGNoZWNrIGZvciBobmEgaG9zdCAtIGluY3JlYXNlcyBvcmlnX25vZGUgcmVmY291bnQgKi8KKwkvKiBjaGVjayBmb3IgdHQgaG9zdCAtIGluY3JlYXNlcyBvcmlnX25vZGUgcmVmY291bnQgKi8KIAlvcmlnX25vZGUgPSB0cmFuc3RhYmxlX3NlYXJjaChiYXRfcHJpdiwgZXRoaGRyLT5oX2Rlc3QpOwogCiBmaW5kX3JvdXRlcjoKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3Zpcy5jIGIvbmV0L2JhdG1hbi1hZHYvdmlzLmMKaW5kZXggZjkwMjEyZi4uYzM5ZjIwYyAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvdmlzLmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvdmlzLmMKQEAgLTE5NCw3ICsxOTQsNyBAQAogewogCS8qIG1heGltYWwgbGVuZ3RoOiBtYXgoNCsxNysyLCAzKzE3KzErMysyKSA9PSAyNiAqLwogCWlmIChwcmltYXJ5ICYmIGVudHJ5LT5xdWFsaXR5ID09IDApCi0JCXJldHVybiBzcHJpbnRmKGJ1ZmYsICJITkEgJXBNLCAiLCBlbnRyeS0+ZGVzdCk7CisJCXJldHVybiBzcHJpbnRmKGJ1ZmYsICJUVCAlcE0sICIsIGVudHJ5LT5kZXN0KTsKIAllbHNlIGlmIChjb21wYXJlX2V0aChlbnRyeS0+c3JjLCBzcmMpKQogCQlyZXR1cm4gc3ByaW50ZihidWZmLCAiVFEgJXBNICVkLCAiLCBlbnRyeS0+ZGVzdCwKIAkJCSAgICAgICBlbnRyeS0+cXVhbGl0eSk7CkBAIC0yMDQsNiArMjA0LDcgQEAKIAogaW50IHZpc19zZXFfcHJpbnRfdGV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQogeworCXN0cnVjdCBoYXJkX2lmYWNlICpwcmltYXJ5X2lmOwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwogCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOwogCXN0cnVjdCB2aXNfaW5mbyAqaW5mbzsKQEAgLTIxNSwxNSArMjE2LDE4IEBACiAJSExJU1RfSEVBRCh2aXNfaWZfbGlzdCk7CiAJc3RydWN0IGlmX2xpc3RfZW50cnkgKmVudHJ5OwogCXN0cnVjdCBobGlzdF9ub2RlICpwb3MsICpuOwotCWludCBpLCBqOworCWludCBpLCBqLCByZXQgPSAwOwogCWludCB2aXNfc2VydmVyID0gYXRvbWljX3JlYWQoJmJhdF9wcml2LT52aXNfbW9kZSk7CiAJc2l6ZV90IGJ1ZmZfcG9zLCBidWZfc2l6ZTsKIAljaGFyICpidWZmOwogCWludCBjb21wYXJlOwogCi0JaWYgKCghYmF0X3ByaXYtPnByaW1hcnlfaWYpIHx8Ci0JICAgICh2aXNfc2VydmVyID09IFZJU19UWVBFX0NMSUVOVF9VUERBVEUpKQotCQlyZXR1cm4gMDsKKwlwcmltYXJ5X2lmID0gcHJpbWFyeV9pZl9nZXRfc2VsZWN0ZWQoYmF0X3ByaXYpOworCWlmICghcHJpbWFyeV9pZikKKwkJZ290byBvdXQ7CisKKwlpZiAodmlzX3NlcnZlciA9PSBWSVNfVFlQRV9DTElFTlRfVVBEQVRFKQorCQlnb3RvIG91dDsKIAogCWJ1Zl9zaXplID0gMTsKIAkvKiBFc3RpbWF0ZSBsZW5ndGggKi8KQEAgLTI3MCw3ICsyNzQsOCBAQAogCWJ1ZmYgPSBrbWFsbG9jKGJ1Zl9zaXplLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWJ1ZmYpIHsKIAkJc3Bpbl91bmxvY2tfYmgoJmJhdF9wcml2LT52aXNfaGFzaF9sb2NrKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OwogCX0KIAlidWZmWzBdID0gJ1wwJzsKIAlidWZmX3BvcyA9IDA7CkBAIC0zMjgsNyArMzMzLDEwIEBACiAJc2VxX3ByaW50ZihzZXEsICIlcyIsIGJ1ZmYpOwogCWtmcmVlKGJ1ZmYpOwogCi0JcmV0dXJuIDA7CitvdXQ6CisJaWYgKHByaW1hcnlfaWYpCisJCWhhcmRpZl9mcmVlX3JlZihwcmltYXJ5X2lmKTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKiBhZGQgdGhlIGluZm8gcGFja2V0IHRvIHRoZSBzZW5kIGxpc3QsIGlmIGl0IHdhcyBub3QKQEAgLTU1OCw2ICs1NjYsNyBAQAogCQkJCXN0cnVjdCB2aXNfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgaGFzaHRhYmxlX3QgKmhhc2ggPSBiYXRfcHJpdi0+b3JpZ19oYXNoOworCXN0cnVjdCBuZWlnaF9ub2RlICpyb3V0ZXI7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CiAJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOwpAQCAtNTcxLDEzICs1ODAsMTcgQEAKIAogCQlyY3VfcmVhZF9sb2NrKCk7CiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShvcmlnX25vZGUsIG5vZGUsIGhlYWQsIGhhc2hfZW50cnkpIHsKLQkJCWlmICgob3JpZ19ub2RlKSAmJiAob3JpZ19ub2RlLT5yb3V0ZXIpICYmCi0JCQkgICAgKG9yaWdfbm9kZS0+ZmxhZ3MgJiBWSVNfU0VSVkVSKSAmJgotCQkJICAgIChvcmlnX25vZGUtPnJvdXRlci0+dHFfYXZnID4gYmVzdF90cSkpIHsKLQkJCQliZXN0X3RxID0gb3JpZ19ub2RlLT5yb3V0ZXItPnRxX2F2ZzsKKwkJCXJvdXRlciA9IG9yaWdfbm9kZV9nZXRfcm91dGVyKG9yaWdfbm9kZSk7CisJCQlpZiAoIXJvdXRlcikKKwkJCQljb250aW51ZTsKKworCQkJaWYgKChvcmlnX25vZGUtPmZsYWdzICYgVklTX1NFUlZFUikgJiYKKwkJCSAgICAocm91dGVyLT50cV9hdmcgPiBiZXN0X3RxKSkgeworCQkJCWJlc3RfdHEgPSByb3V0ZXItPnRxX2F2ZzsKIAkJCQltZW1jcHkocGFja2V0LT50YXJnZXRfb3JpZywgb3JpZ19ub2RlLT5vcmlnLAogCQkJCSAgICAgICBFVEhfQUxFTik7CiAJCQl9CisJCQluZWlnaF9ub2RlX2ZyZWVfcmVmKHJvdXRlcik7CiAJCX0KIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQpAQCAtNjA1LDExICs2MTgsMTEgQEAKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKIAlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGU7Ci0Jc3RydWN0IG5laWdoX25vZGUgKm5laWdoX25vZGU7CisJc3RydWN0IG5laWdoX25vZGUgKnJvdXRlcjsKIAlzdHJ1Y3QgdmlzX2luZm8gKmluZm8gPSAoc3RydWN0IHZpc19pbmZvICopYmF0X3ByaXYtPm15X3Zpc19pbmZvOwogCXN0cnVjdCB2aXNfcGFja2V0ICpwYWNrZXQgPSAoc3RydWN0IHZpc19wYWNrZXQgKilpbmZvLT5za2JfcGFja2V0LT5kYXRhOwogCXN0cnVjdCB2aXNfaW5mb19lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IGhuYV9sb2NhbF9lbnRyeSAqaG5hX2xvY2FsX2VudHJ5OworCXN0cnVjdCB0dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnk7CiAJaW50IGJlc3RfdHEgPSAtMSwgaTsKIAogCWluZm8tPmZpcnN0X3NlZW4gPSBqaWZmaWVzOwpAQCAtNjMzLDU5ICs2NDYsNjEgQEAKIAogCQlyY3VfcmVhZF9sb2NrKCk7CiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShvcmlnX25vZGUsIG5vZGUsIGhlYWQsIGhhc2hfZW50cnkpIHsKLQkJCW5laWdoX25vZGUgPSBvcmlnX25vZGUtPnJvdXRlcjsKLQotCQkJaWYgKCFuZWlnaF9ub2RlKQorCQkJcm91dGVyID0gb3JpZ19ub2RlX2dldF9yb3V0ZXIob3JpZ19ub2RlKTsKKwkJCWlmICghcm91dGVyKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoIWNvbXBhcmVfZXRoKG5laWdoX25vZGUtPmFkZHIsIG9yaWdfbm9kZS0+b3JpZykpCi0JCQkJY29udGludWU7CisJCQlpZiAoIWNvbXBhcmVfZXRoKHJvdXRlci0+YWRkciwgb3JpZ19ub2RlLT5vcmlnKSkKKwkJCQlnb3RvIG5leHQ7CiAKLQkJCWlmIChuZWlnaF9ub2RlLT5pZl9pbmNvbWluZy0+aWZfc3RhdHVzICE9IElGX0FDVElWRSkKLQkJCQljb250aW51ZTsKKwkJCWlmIChyb3V0ZXItPmlmX2luY29taW5nLT5pZl9zdGF0dXMgIT0gSUZfQUNUSVZFKQorCQkJCWdvdG8gbmV4dDsKIAotCQkJaWYgKG5laWdoX25vZGUtPnRxX2F2ZyA8IDEpCi0JCQkJY29udGludWU7CisJCQlpZiAocm91dGVyLT50cV9hdmcgPCAxKQorCQkJCWdvdG8gbmV4dDsKIAogCQkJLyogZmlsbCBvbmUgZW50cnkgaW50byBidWZmZXIuICovCiAJCQllbnRyeSA9IChzdHJ1Y3QgdmlzX2luZm9fZW50cnkgKikKIAkJCQkgICAgICBza2JfcHV0KGluZm8tPnNrYl9wYWNrZXQsIHNpemVvZigqZW50cnkpKTsKIAkJCW1lbWNweShlbnRyeS0+c3JjLAotCQkJICAgICAgIG5laWdoX25vZGUtPmlmX2luY29taW5nLT5uZXRfZGV2LT5kZXZfYWRkciwKKwkJCSAgICAgICByb3V0ZXItPmlmX2luY29taW5nLT5uZXRfZGV2LT5kZXZfYWRkciwKIAkJCSAgICAgICBFVEhfQUxFTik7CiAJCQltZW1jcHkoZW50cnktPmRlc3QsIG9yaWdfbm9kZS0+b3JpZywgRVRIX0FMRU4pOwotCQkJZW50cnktPnF1YWxpdHkgPSBuZWlnaF9ub2RlLT50cV9hdmc7CisJCQllbnRyeS0+cXVhbGl0eSA9IHJvdXRlci0+dHFfYXZnOwogCQkJcGFja2V0LT5lbnRyaWVzKys7CiAKK25leHQ6CisJCQluZWlnaF9ub2RlX2ZyZWVfcmVmKHJvdXRlcik7CisKIAkJCWlmICh2aXNfcGFja2V0X2Z1bGwoaW5mbykpCiAJCQkJZ290byB1bmxvY2s7CiAJCX0KIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQogCi0JaGFzaCA9IGJhdF9wcml2LT5obmFfbG9jYWxfaGFzaDsKKwloYXNoID0gYmF0X3ByaXYtPnR0X2xvY2FsX2hhc2g7CiAKLQlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT5obmFfbGhhc2hfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZiYXRfcHJpdi0+dHRfbGhhc2hfbG9jayk7CiAJZm9yIChpID0gMDsgaSA8IGhhc2gtPnNpemU7IGkrKykgewogCQloZWFkID0gJmhhc2gtPnRhYmxlW2ldOwogCi0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGhuYV9sb2NhbF9lbnRyeSwgbm9kZSwgaGVhZCwgaGFzaF9lbnRyeSkgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeSh0dF9sb2NhbF9lbnRyeSwgbm9kZSwgaGVhZCwgaGFzaF9lbnRyeSkgewogCQkJZW50cnkgPSAoc3RydWN0IHZpc19pbmZvX2VudHJ5ICopCiAJCQkJCXNrYl9wdXQoaW5mby0+c2tiX3BhY2tldCwKIAkJCQkJCXNpemVvZigqZW50cnkpKTsKIAkJCW1lbXNldChlbnRyeS0+c3JjLCAwLCBFVEhfQUxFTik7Ci0JCQltZW1jcHkoZW50cnktPmRlc3QsIGhuYV9sb2NhbF9lbnRyeS0+YWRkciwgRVRIX0FMRU4pOwotCQkJZW50cnktPnF1YWxpdHkgPSAwOyAvKiAwIG1lYW5zIEhOQSAqLworCQkJbWVtY3B5KGVudHJ5LT5kZXN0LCB0dF9sb2NhbF9lbnRyeS0+YWRkciwgRVRIX0FMRU4pOworCQkJZW50cnktPnF1YWxpdHkgPSAwOyAvKiAwIG1lYW5zIFRUICovCiAJCQlwYWNrZXQtPmVudHJpZXMrKzsKIAogCQkJaWYgKHZpc19wYWNrZXRfZnVsbChpbmZvKSkgewotCQkJCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+aG5hX2xoYXNoX2xvY2spOworCQkJCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+dHRfbGhhc2hfbG9jayk7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCX0KIAl9CiAKLQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPmhuYV9saGFzaF9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPnR0X2xoYXNoX2xvY2spOwogCXJldHVybiAwOwogCiB1bmxvY2s6CkBAIC03MjUsNiArNzQwLDcgQEAKIHN0YXRpYyB2b2lkIGJyb2FkY2FzdF92aXNfcGFja2V0KHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCiAJCQkJIHN0cnVjdCB2aXNfaW5mbyAqaW5mbykKIHsKKwlzdHJ1Y3QgbmVpZ2hfbm9kZSAqcm91dGVyOwogCXN0cnVjdCBoYXNodGFibGVfdCAqaGFzaCA9IGJhdF9wcml2LT5vcmlnX2hhc2g7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CkBAIC03NDUsMTkgKzc2MSwyNiBAQAogCQlyY3VfcmVhZF9sb2NrKCk7CiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShvcmlnX25vZGUsIG5vZGUsIGhlYWQsIGhhc2hfZW50cnkpIHsKIAkJCS8qIGlmIGl0J3MgYSB2aXMgc2VydmVyIGFuZCByZWFjaGFibGUsIHNlbmQgaXQuICovCi0JCQlpZiAoKCFvcmlnX25vZGUpIHx8ICghb3JpZ19ub2RlLT5yb3V0ZXIpKQotCQkJCWNvbnRpbnVlOwogCQkJaWYgKCEob3JpZ19ub2RlLT5mbGFncyAmIFZJU19TRVJWRVIpKQogCQkJCWNvbnRpbnVlOwotCQkJLyogZG9uJ3Qgc2VuZCBpdCBpZiB3ZSBhbHJlYWR5IHJlY2VpdmVkIHRoZSBwYWNrZXQgZnJvbQotCQkJKiB0aGlzIG5vZGUuICovCi0JCQlpZiAocmVjdl9saXN0X2lzX2luKGJhdF9wcml2LCAmaW5mby0+cmVjdl9saXN0LAotCQkJCQkgICAgb3JpZ19ub2RlLT5vcmlnKSkKKworCQkJcm91dGVyID0gb3JpZ19ub2RlX2dldF9yb3V0ZXIob3JpZ19ub2RlKTsKKwkJCWlmICghcm91dGVyKQogCQkJCWNvbnRpbnVlOwogCisJCQkvKiBkb24ndCBzZW5kIGl0IGlmIHdlIGFscmVhZHkgcmVjZWl2ZWQgdGhlIHBhY2tldCBmcm9tCisJCQkgKiB0aGlzIG5vZGUuICovCisJCQlpZiAocmVjdl9saXN0X2lzX2luKGJhdF9wcml2LCAmaW5mby0+cmVjdl9saXN0LAorCQkJCQkgICAgb3JpZ19ub2RlLT5vcmlnKSkgeworCQkJCW5laWdoX25vZGVfZnJlZV9yZWYocm91dGVyKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwogCQkJbWVtY3B5KHBhY2tldC0+dGFyZ2V0X29yaWcsIG9yaWdfbm9kZS0+b3JpZywgRVRIX0FMRU4pOwotCQkJaGFyZF9pZmFjZSA9IG9yaWdfbm9kZS0+cm91dGVyLT5pZl9pbmNvbWluZzsKLQkJCW1lbWNweShkc3RhZGRyLCBvcmlnX25vZGUtPnJvdXRlci0+YWRkciwgRVRIX0FMRU4pOworCQkJaGFyZF9pZmFjZSA9IHJvdXRlci0+aWZfaW5jb21pbmc7CisJCQltZW1jcHkoZHN0YWRkciwgcm91dGVyLT5hZGRyLCBFVEhfQUxFTik7CisKKwkJCW5laWdoX25vZGVfZnJlZV9yZWYocm91dGVyKTsKIAogCQkJc2tiID0gc2tiX2Nsb25lKGluZm8tPnNrYl9wYWNrZXQsIEdGUF9BVE9NSUMpOwogCQkJaWYgKHNrYikKQEAgLTc3Miw2MCArNzk1LDQ4IEBACiAJCQkgICAgICAgc3RydWN0IHZpc19pbmZvICppbmZvKQogewogCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKLQlzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZSA9IE5VTEw7CisJc3RydWN0IG5laWdoX25vZGUgKnJvdXRlciA9IE5VTEw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgdmlzX3BhY2tldCAqcGFja2V0OwogCiAJcGFja2V0ID0gKHN0cnVjdCB2aXNfcGFja2V0ICopaW5mby0+c2tiX3BhY2tldC0+ZGF0YTsKIAotCXJjdV9yZWFkX2xvY2soKTsKIAlvcmlnX25vZGUgPSBvcmlnX2hhc2hfZmluZChiYXRfcHJpdiwgcGFja2V0LT50YXJnZXRfb3JpZyk7Ci0KIAlpZiAoIW9yaWdfbm9kZSkKLQkJZ290byB1bmxvY2s7CisJCWdvdG8gb3V0OwogCi0JbmVpZ2hfbm9kZSA9IG9yaWdfbm9kZS0+cm91dGVyOwotCi0JaWYgKCFuZWlnaF9ub2RlKQotCQlnb3RvIHVubG9jazsKLQotCWlmICghYXRvbWljX2luY19ub3RfemVybygmbmVpZ2hfbm9kZS0+cmVmY291bnQpKSB7Ci0JCW5laWdoX25vZGUgPSBOVUxMOwotCQlnb3RvIHVubG9jazsKLQl9Ci0KLQlyY3VfcmVhZF91bmxvY2soKTsKKwlyb3V0ZXIgPSBvcmlnX25vZGVfZ2V0X3JvdXRlcihvcmlnX25vZGUpOworCWlmICghcm91dGVyKQorCQlnb3RvIG91dDsKIAogCXNrYiA9IHNrYl9jbG9uZShpbmZvLT5za2JfcGFja2V0LCBHRlBfQVRPTUlDKTsKIAlpZiAoc2tiKQotCQlzZW5kX3NrYl9wYWNrZXQoc2tiLCBuZWlnaF9ub2RlLT5pZl9pbmNvbWluZywKLQkJCQluZWlnaF9ub2RlLT5hZGRyKTsKKwkJc2VuZF9za2JfcGFja2V0KHNrYiwgcm91dGVyLT5pZl9pbmNvbWluZywgcm91dGVyLT5hZGRyKTsKIAotCWdvdG8gb3V0OwotCi11bmxvY2s6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiBvdXQ6Ci0JaWYgKG5laWdoX25vZGUpCi0JCW5laWdoX25vZGVfZnJlZV9yZWYobmVpZ2hfbm9kZSk7CisJaWYgKHJvdXRlcikKKwkJbmVpZ2hfbm9kZV9mcmVlX3JlZihyb3V0ZXIpOwogCWlmIChvcmlnX25vZGUpCiAJCW9yaWdfbm9kZV9mcmVlX3JlZihvcmlnX25vZGUpOwotCXJldHVybjsKIH0KIAogLyogb25seSBzZW5kIG9uZSB2aXMgcGFja2V0LiBjYWxsZWQgZnJvbSBzZW5kX3Zpc19wYWNrZXRzKCkgKi8KIHN0YXRpYyB2b2lkIHNlbmRfdmlzX3BhY2tldChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LCBzdHJ1Y3QgdmlzX2luZm8gKmluZm8pCiB7CisJc3RydWN0IGhhcmRfaWZhY2UgKnByaW1hcnlfaWY7CiAJc3RydWN0IHZpc19wYWNrZXQgKnBhY2tldDsKIAorCXByaW1hcnlfaWYgPSBwcmltYXJ5X2lmX2dldF9zZWxlY3RlZChiYXRfcHJpdik7CisJaWYgKCFwcmltYXJ5X2lmKQorCQlnb3RvIG91dDsKKwogCXBhY2tldCA9IChzdHJ1Y3QgdmlzX3BhY2tldCAqKWluZm8tPnNrYl9wYWNrZXQtPmRhdGE7CiAJaWYgKHBhY2tldC0+dHRsIDwgMikgewogCQlwcl9kZWJ1ZygiRXJyb3IgLSBjYW4ndCBzZW5kIHZpcyBwYWNrZXQ6IHR0bCBleGNlZWRlZFxuIik7Ci0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAJfQogCi0JbWVtY3B5KHBhY2tldC0+c2VuZGVyX29yaWcsIGJhdF9wcml2LT5wcmltYXJ5X2lmLT5uZXRfZGV2LT5kZXZfYWRkciwKLQkgICAgICAgRVRIX0FMRU4pOworCW1lbWNweShwYWNrZXQtPnNlbmRlcl9vcmlnLCBwcmltYXJ5X2lmLT5uZXRfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCXBhY2tldC0+dHRsLS07CiAKIAlpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIocGFja2V0LT50YXJnZXRfb3JpZykpCkBAIC04MzMsNiArODQ0LDEwIEBACiAJZWxzZQogCQl1bmljYXN0X3Zpc19wYWNrZXQoYmF0X3ByaXYsIGluZm8pOwogCXBhY2tldC0+dHRsKys7IC8qIHJlc3RvcmUgVFRMICovCisKK291dDoKKwlpZiAocHJpbWFyeV9pZikKKwkJaGFyZGlmX2ZyZWVfcmVmKHByaW1hcnlfaWYpOwogfQogCiAvKiBjYWxsZWQgZnJvbSB0aW1lcjsgc2VuZCAoYW5kIG1heWJlIGdlbmVyYXRlKSB2aXMgcGFja2V0LiAqLwpAQCAtODU5LDggKzg3NCw3IEBACiAJCWtyZWZfZ2V0KCZpbmZvLT5yZWZjb3VudCk7CiAJCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+dmlzX2hhc2hfbG9jayk7CiAKLQkJaWYgKGJhdF9wcml2LT5wcmltYXJ5X2lmKQotCQkJc2VuZF92aXNfcGFja2V0KGJhdF9wcml2LCBpbmZvKTsKKwkJc2VuZF92aXNfcGFja2V0KGJhdF9wcml2LCBpbmZvKTsKIAogCQlzcGluX2xvY2tfYmgoJmJhdF9wcml2LT52aXNfaGFzaF9sb2NrKTsKIAkJc2VuZF9saXN0X2RlbChpbmZvKTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvYm5lcC9ibmVwLmggYi9uZXQvYmx1ZXRvb3RoL2JuZXAvYm5lcC5oCmluZGV4IDcwNjcyNTQ0Li44ZTZjMDYxIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2JuZXAvYm5lcC5oCisrKyBiL25ldC9ibHVldG9vdGgvYm5lcC9ibmVwLmgKQEAgLTIzLDg4ICsyMyw4OCBAQAogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9ibHVldG9vdGguaD4KIAotLy8gTGltaXRzCi0jZGVmaW5lIEJORVBfTUFYX1BST1RPX0ZJTFRFUlMgICAgIDUKLSNkZWZpbmUgQk5FUF9NQVhfTVVMVElDQVNUX0ZJTFRFUlMgMjAKKy8qIExpbWl0cyAqLworI2RlZmluZSBCTkVQX01BWF9QUk9UT19GSUxURVJTCQk1CisjZGVmaW5lIEJORVBfTUFYX01VTFRJQ0FTVF9GSUxURVJTCTIwCiAKLS8vIFVVSURzCi0jZGVmaW5lIEJORVBfQkFTRV9VVUlEIDB4MDAwMDAwMDAwMDAwMTAwMDgwMDAwMDgwNUY5QjM0RkIKLSNkZWZpbmUgQk5FUF9VVUlEMTYgICAgMHgwMgotI2RlZmluZSBCTkVQX1VVSUQzMiAgICAweDA0Ci0jZGVmaW5lIEJORVBfVVVJRDEyOCAgIDB4MTYKKy8qIFVVSURzICovCisjZGVmaW5lIEJORVBfQkFTRV9VVUlECTB4MDAwMDAwMDAwMDAwMTAwMDgwMDAwMDgwNUY5QjM0RkIKKyNkZWZpbmUgQk5FUF9VVUlEMTYJMHgwMgorI2RlZmluZSBCTkVQX1VVSUQzMgkweDA0CisjZGVmaW5lIEJORVBfVVVJRDEyOAkweDE2CiAKLSNkZWZpbmUgQk5FUF9TVkNfUEFOVSAgMHgxMTE1Ci0jZGVmaW5lIEJORVBfU1ZDX05BUCAgIDB4MTExNgotI2RlZmluZSBCTkVQX1NWQ19HTiAgICAweDExMTcKKyNkZWZpbmUgQk5FUF9TVkNfUEFOVQkweDExMTUKKyNkZWZpbmUgQk5FUF9TVkNfTkFQCTB4MTExNgorI2RlZmluZSBCTkVQX1NWQ19HTgkweDExMTcKIAotLy8gUGFja2V0IHR5cGVzCi0jZGVmaW5lIEJORVBfR0VORVJBTCAgICAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgQk5FUF9DT05UUk9MICAgICAgICAgICAgICAgMHgwMQotI2RlZmluZSBCTkVQX0NPTVBSRVNTRUQgICAgICAgICAgICAweDAyCi0jZGVmaW5lIEJORVBfQ09NUFJFU1NFRF9TUkNfT05MWSAgIDB4MDMKLSNkZWZpbmUgQk5FUF9DT01QUkVTU0VEX0RTVF9PTkxZICAgMHgwNAorLyogUGFja2V0IHR5cGVzICovCisjZGVmaW5lIEJORVBfR0VORVJBTAkJCTB4MDAKKyNkZWZpbmUgQk5FUF9DT05UUk9MCQkJMHgwMQorI2RlZmluZSBCTkVQX0NPTVBSRVNTRUQJCQkweDAyCisjZGVmaW5lIEJORVBfQ09NUFJFU1NFRF9TUkNfT05MWQkweDAzCisjZGVmaW5lIEJORVBfQ09NUFJFU1NFRF9EU1RfT05MWQkweDA0CiAKLS8vIENvbnRyb2wgdHlwZXMKLSNkZWZpbmUgQk5FUF9DTURfTk9UX1VOREVSU1RPT0QgICAgMHgwMAotI2RlZmluZSBCTkVQX1NFVFVQX0NPTk5fUkVRICAgICAgICAweDAxCi0jZGVmaW5lIEJORVBfU0VUVVBfQ09OTl9SU1AgICAgICAgIDB4MDIKLSNkZWZpbmUgQk5FUF9GSUxURVJfTkVUX1RZUEVfU0VUICAgMHgwMwotI2RlZmluZSBCTkVQX0ZJTFRFUl9ORVRfVFlQRV9SU1AgICAweDA0Ci0jZGVmaW5lIEJORVBfRklMVEVSX01VTFRJX0FERFJfU0VUIDB4MDUKLSNkZWZpbmUgQk5FUF9GSUxURVJfTVVMVElfQUREUl9SU1AgMHgwNgorLyogQ29udHJvbCB0eXBlcyAqLworI2RlZmluZSBCTkVQX0NNRF9OT1RfVU5ERVJTVE9PRAkJMHgwMAorI2RlZmluZSBCTkVQX1NFVFVQX0NPTk5fUkVRCQkweDAxCisjZGVmaW5lIEJORVBfU0VUVVBfQ09OTl9SU1AJCTB4MDIKKyNkZWZpbmUgQk5FUF9GSUxURVJfTkVUX1RZUEVfU0VUCTB4MDMKKyNkZWZpbmUgQk5FUF9GSUxURVJfTkVUX1RZUEVfUlNQCTB4MDQKKyNkZWZpbmUgQk5FUF9GSUxURVJfTVVMVElfQUREUl9TRVQJMHgwNQorI2RlZmluZSBCTkVQX0ZJTFRFUl9NVUxUSV9BRERSX1JTUAkweDA2CiAKLS8vIEV4dGVuc2lvbiB0eXBlcwotI2RlZmluZSBCTkVQX0VYVF9DT05UUk9MICAgICAgICAgICAweDAwCisvKiBFeHRlbnNpb24gdHlwZXMgKi8KKyNkZWZpbmUgQk5FUF9FWFRfQ09OVFJPTCAweDAwCiAKLS8vIFJlc3BvbnNlIG1lc3NhZ2VzCi0jZGVmaW5lIEJORVBfU1VDQ0VTUyAgICAgICAgICAgICAgIDB4MDAKKy8qIFJlc3BvbnNlIG1lc3NhZ2VzICovCisjZGVmaW5lIEJORVBfU1VDQ0VTUyAweDAwCiAKLSNkZWZpbmUgQk5FUF9DT05OX0lOVkFMSURfRFNUICAgICAgMHgwMQotI2RlZmluZSBCTkVQX0NPTk5fSU5WQUxJRF9TUkMgICAgICAweDAyCi0jZGVmaW5lIEJORVBfQ09OTl9JTlZBTElEX1NWQyAgICAgIDB4MDMKLSNkZWZpbmUgQk5FUF9DT05OX05PVF9BTExPV0VEICAgICAgMHgwNAorI2RlZmluZSBCTkVQX0NPTk5fSU5WQUxJRF9EU1QgMHgwMQorI2RlZmluZSBCTkVQX0NPTk5fSU5WQUxJRF9TUkMgMHgwMgorI2RlZmluZSBCTkVQX0NPTk5fSU5WQUxJRF9TVkMgMHgwMworI2RlZmluZSBCTkVQX0NPTk5fTk9UX0FMTE9XRUQgMHgwNAogCi0jZGVmaW5lIEJORVBfRklMVEVSX1VOU1VQUE9SVEVEX1JFUSAgICAweDAxCi0jZGVmaW5lIEJORVBfRklMVEVSX0lOVkFMSURfUkFOR0UgICAgICAweDAyCi0jZGVmaW5lIEJORVBfRklMVEVSX0lOVkFMSURfTUNBRERSICAgICAweDAyCi0jZGVmaW5lIEJORVBfRklMVEVSX0xJTUlUX1JFQUNIRUQgICAgICAweDAzCi0jZGVmaW5lIEJORVBfRklMVEVSX0RFTklFRF9TRUNVUklUWSAgICAweDA0CisjZGVmaW5lIEJORVBfRklMVEVSX1VOU1VQUE9SVEVEX1JFUQkweDAxCisjZGVmaW5lIEJORVBfRklMVEVSX0lOVkFMSURfUkFOR0UJMHgwMgorI2RlZmluZSBCTkVQX0ZJTFRFUl9JTlZBTElEX01DQUREUgkweDAyCisjZGVmaW5lIEJORVBfRklMVEVSX0xJTUlUX1JFQUNIRUQJMHgwMworI2RlZmluZSBCTkVQX0ZJTFRFUl9ERU5JRURfU0VDVVJJVFkJMHgwNAogCi0vLyBMMkNBUCBzZXR0aW5ncwotI2RlZmluZSBCTkVQX01UVSAgICAgICAgIDE2OTEKLSNkZWZpbmUgQk5FUF9QU00JIDB4MGYKLSNkZWZpbmUgQk5FUF9GTFVTSF9UTyAgICAweGZmZmYKLSNkZWZpbmUgQk5FUF9DT05ORUNUX1RPICAxNQotI2RlZmluZSBCTkVQX0ZJTFRFUl9UTyAgIDE1CisvKiBMMkNBUCBzZXR0aW5ncyAqLworI2RlZmluZSBCTkVQX01UVQkxNjkxCisjZGVmaW5lIEJORVBfUFNNCTB4MGYKKyNkZWZpbmUgQk5FUF9GTFVTSF9UTwkweGZmZmYKKyNkZWZpbmUgQk5FUF9DT05ORUNUX1RPCTE1CisjZGVmaW5lIEJORVBfRklMVEVSX1RPCTE1CiAKLS8vIEhlYWRlcnMKLSNkZWZpbmUgQk5FUF9UWVBFX01BU0sJIDB4N2YKLSNkZWZpbmUgQk5FUF9FWFRfSEVBREVSCSAweDgwCisvKiBIZWFkZXJzICovCisjZGVmaW5lIEJORVBfVFlQRV9NQVNLCTB4N2YKKyNkZWZpbmUgQk5FUF9FWFRfSEVBREVSCTB4ODAKIAogc3RydWN0IGJuZXBfc2V0dXBfY29ubl9yZXEgewotCV9fdTggIHR5cGU7Ci0JX191OCAgY3RybDsKLQlfX3U4ICB1dWlkX3NpemU7Ci0JX191OCAgc2VydmljZVswXTsKKwlfX3U4IHR5cGU7CisJX191OCBjdHJsOworCV9fdTggdXVpZF9zaXplOworCV9fdTggc2VydmljZVswXTsKIH0gX19wYWNrZWQ7CiAKIHN0cnVjdCBibmVwX3NldF9maWx0ZXJfcmVxIHsKLQlfX3U4ICB0eXBlOwotCV9fdTggIGN0cmw7CisJX191OCB0eXBlOworCV9fdTggY3RybDsKIAlfX2JlMTYgbGVuOwotCV9fdTggIGxpc3RbMF07CisJX191OCBsaXN0WzBdOwogfSBfX3BhY2tlZDsKIAogc3RydWN0IGJuZXBfY29udHJvbF9yc3AgewotCV9fdTggIHR5cGU7Ci0JX191OCAgY3RybDsKKwlfX3U4IHR5cGU7CisJX191OCBjdHJsOwogCV9fYmUxNiByZXNwOwogfSBfX3BhY2tlZDsKIAogc3RydWN0IGJuZXBfZXh0X2hkciB7Ci0JX191OCAgdHlwZTsKLQlfX3U4ICBsZW47Ci0JX191OCAgZGF0YVswXTsKKwlfX3U4IHR5cGU7CisJX191OCBsZW47CisJX191OCBkYXRhWzBdOwogfSBfX3BhY2tlZDsKIAogLyogQk5FUCBpb2N0bCBkZWZpbmVzICovCkBAIC0xMTQsMTAgKzExNCwxMCBAQAogI2RlZmluZSBCTkVQR0VUQ09OTklORk8JX0lPUignQicsIDIxMSwgaW50KQogCiBzdHJ1Y3QgYm5lcF9jb25uYWRkX3JlcSB7Ci0JaW50ICAgc29jazsgICAgICAgLy8gQ29ubmVjdGVkIHNvY2tldAorCWludCAgIHNvY2s7CQkvKiBDb25uZWN0ZWQgc29ja2V0ICovCiAJX191MzIgZmxhZ3M7CiAJX191MTYgcm9sZTsKLQljaGFyICBkZXZpY2VbMTZdOyAvLyBOYW1lIG9mIHRoZSBFdGhlcm5ldCBkZXZpY2UKKwljaGFyICBkZXZpY2VbMTZdOwkvKiBOYW1lIG9mIHRoZSBFdGhlcm5ldCBkZXZpY2UgKi8KIH07CiAKIHN0cnVjdCBibmVwX2Nvbm5kZWxfcmVxIHsKQEAgLTE0OCwxNCArMTQ4LDE0IEBACiBpbnQgYm5lcF9nZXRfY29ubmxpc3Qoc3RydWN0IGJuZXBfY29ubmxpc3RfcmVxICpyZXEpOwogaW50IGJuZXBfZ2V0X2Nvbm5pbmZvKHN0cnVjdCBibmVwX2Nvbm5pbmZvICpjaSk7CiAKLS8vIEJORVAgc2Vzc2lvbnMKKy8qIEJORVAgc2Vzc2lvbnMgKi8KIHN0cnVjdCBibmVwX3Nlc3Npb24gewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAogCXVuc2lnbmVkIGludCAgcm9sZTsKIAl1bnNpZ25lZCBsb25nIHN0YXRlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JYXRvbWljX3QgICAgICBraWxsZWQ7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwogCiAJc3RydWN0IGV0aGhkciBlaDsKIAlzdHJ1Y3QgbXNnaGRyIG1zZzsKQEAgLTE3Myw3ICsxNzMsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBibmVwX21jX2hhc2goX191OCAqYWRkcikKIHsKLQlyZXR1cm4gKGNyYzMyX2JlKH4wLCBhZGRyLCBFVEhfQUxFTikgPj4gMjYpOworCXJldHVybiBjcmMzMl9iZSh+MCwgYWRkciwgRVRIX0FMRU4pID4+IDI2OwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvYm5lcC9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2JuZXAvY29yZS5jCmluZGV4IDAzZDRkMTIuLmNhMzlmY2YgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvYm5lcC9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9ibmVwL2NvcmUuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogCiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CkBAIC0xMzEsNyArMTMyLDggQEAKIAkJcmV0dXJuIC1FSUxTRVE7CiAKIAluID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGRhdGEpOwotCWRhdGErKzsgbGVuIC09IDI7CisJZGF0YSsrOworCWxlbiAtPSAyOwogCiAJaWYgKGxlbiA8IG4pCiAJCXJldHVybiAtRUlMU0VROwpAQCAtMTc2LDcgKzE3OCw4IEBACiAJCXJldHVybiAtRUlMU0VROwogCiAJbiA9IGdldF91bmFsaWduZWRfYmUxNihkYXRhKTsKLQlkYXRhICs9IDI7IGxlbiAtPSAyOworCWRhdGEgKz0gMjsKKwlsZW4gLT0gMjsKIAogCWlmIChsZW4gPCBuKQogCQlyZXR1cm4gLUVJTFNFUTsKQEAgLTE4Nyw2ICsxOTAsOCBAQAogCW4gLz0gKEVUSF9BTEVOICogMik7CiAKIAlpZiAobiA+IDApIHsKKwkJaW50IGk7CisKIAkJcy0+bWNfZmlsdGVyID0gMDsKIAogCQkvKiBBbHdheXMgc2VuZCBicm9hZGNhc3QgKi8KQEAgLTE5NiwxOCArMjAxLDIyIEBACiAJCWZvciAoOyBuID4gMDsgbi0tKSB7CiAJCQl1OCBhMVs2XSwgKmEyOwogCi0JCQltZW1jcHkoYTEsIGRhdGEsIEVUSF9BTEVOKTsgZGF0YSArPSBFVEhfQUxFTjsKLQkJCWEyID0gZGF0YTsgZGF0YSArPSBFVEhfQUxFTjsKKwkJCW1lbWNweShhMSwgZGF0YSwgRVRIX0FMRU4pOworCQkJZGF0YSArPSBFVEhfQUxFTjsKKwkJCWEyID0gZGF0YTsKKwkJCWRhdGEgKz0gRVRIX0FMRU47CiAKIAkJCUJUX0RCRygibWMgZmlsdGVyICVzIC0+ICVzIiwKIAkJCQliYXRvc3RyKCh2b2lkICopIGExKSwgYmF0b3N0cigodm9pZCAqKSBhMikpOwogCi0JCQkjZGVmaW5lIElOQ0EoYSkgeyBpbnQgaSA9IDU7IHdoaWxlIChpID49MCAmJiArK2FbaS0tXSA9PSAwKTsgfQotCiAJCQkvKiBJdGVyYXRlIGZyb20gYTEgdG8gYTIgKi8KIAkJCXNldF9iaXQoYm5lcF9tY19oYXNoKGExKSwgKHVsb25nICopICZzLT5tY19maWx0ZXIpOwogCQkJd2hpbGUgKG1lbWNtcChhMSwgYTIsIDYpIDwgMCAmJiBzLT5tY19maWx0ZXIgIT0gfjBMTCkgewotCQkJCUlOQ0EoYTEpOworCQkJCS8qIEluY3JlbWVudCBhMSAqLworCQkJCWkgPSA1OworCQkJCXdoaWxlIChpID49IDAgJiYgKythMVtpLS1dID09IDApCisJCQkJCTsKKwogCQkJCXNldF9iaXQoYm5lcF9tY19oYXNoKGExKSwgKHVsb25nICopICZzLT5tY19maWx0ZXIpOwogCQkJfQogCQl9CkBAIC0yMjcsNyArMjM2LDggQEAKIAl1OCAgY21kID0gKih1OCAqKWRhdGE7CiAJaW50IGVyciA9IDA7CiAKLQlkYXRhKys7IGxlbi0tOworCWRhdGErKzsKKwlsZW4tLTsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBCTkVQX0NNRF9OT1RfVU5ERVJTVE9PRDoKQEAgLTMwMiw3ICszMTIsNiBAQAogCUVUSF9BTEVOICsgMiwgLyogQk5FUF9DT01QUkVTU0VEX1NSQ19PTkxZICovCiAJRVRIX0FMRU4gKyAyICAvKiBCTkVQX0NPTVBSRVNTRURfRFNUX09OTFkgKi8KIH07Ci0jZGVmaW5lIEJORVBfUlhfVFlQRVMJKHNpemVvZihfX2JuZXBfcnhfaGxlbikgLSAxKQogCiBzdGF0aWMgaW5saW5lIGludCBibmVwX3J4X2ZyYW1lKHN0cnVjdCBibmVwX3Nlc3Npb24gKnMsIHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC0zMTIsOSArMzIxLDEwIEBACiAKIAlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCi0JdHlwZSA9ICoodTggKikgc2tiLT5kYXRhOyBza2JfcHVsbChza2IsIDEpOworCXR5cGUgPSAqKHU4ICopIHNrYi0+ZGF0YTsKKwlza2JfcHVsbChza2IsIDEpOwogCi0JaWYgKCh0eXBlICYgQk5FUF9UWVBFX01BU0spID4gQk5FUF9SWF9UWVBFUykKKwlpZiAoKHR5cGUgJiBCTkVQX1RZUEVfTUFTSykgPj0gc2l6ZW9mKF9fYm5lcF9yeF9obGVuKSkKIAkJZ290byBiYWRmcmFtZTsKIAogCWlmICgodHlwZSAmIEJORVBfVFlQRV9NQVNLKSA9PSBCTkVQX0NPTlRST0wpIHsKQEAgLTM2NywxNCArMzc3LDE0IEBACiAKIAljYXNlIEJORVBfQ09NUFJFU1NFRF9EU1RfT05MWToKIAkJbWVtY3B5KF9fc2tiX3B1dChuc2tiLCBFVEhfQUxFTiksIHNrYl9tYWNfaGVhZGVyKHNrYiksCi0JCSAgICAgICBFVEhfQUxFTik7CisJCQkJCQkJCUVUSF9BTEVOKTsKIAkJbWVtY3B5KF9fc2tiX3B1dChuc2tiLCBFVEhfQUxFTiArIDIpLCBzLT5laC5oX3NvdXJjZSwKLQkJICAgICAgIEVUSF9BTEVOICsgMik7CisJCQkJCQkJCUVUSF9BTEVOICsgMik7CiAJCWJyZWFrOwogCiAJY2FzZSBCTkVQX0dFTkVSQUw6CiAJCW1lbWNweShfX3NrYl9wdXQobnNrYiwgRVRIX0FMRU4gKiAyKSwgc2tiX21hY19oZWFkZXIoc2tiKSwKLQkJICAgICAgIEVUSF9BTEVOICogMik7CisJCQkJCQkJCUVUSF9BTEVOICogMik7CiAJCXB1dF91bmFsaWduZWQocy0+ZWguaF9wcm90bywgKF9fYmUxNiAqKSBfX3NrYl9wdXQobnNrYiwgMikpOwogCQlicmVhazsKIAl9CkBAIC00NzAsMTUgKzQ4MCwxNCBAQAogCiAJQlRfREJHKCIiKTsKIAotCWRhZW1vbml6ZSgia2JuZXBkICVzIiwgZGV2LT5uYW1lKTsKIAlzZXRfdXNlcl9uaWNlKGN1cnJlbnQsIC0xNSk7CiAKIAlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmd2FpdCwgY3VycmVudCk7CiAJYWRkX3dhaXRfcXVldWUoc2tfc2xlZXAoc2spLCAmd2FpdCk7Ci0Jd2hpbGUgKCFhdG9taWNfcmVhZCgmcy0+a2lsbGVkKSkgeworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAKLQkJLy8gUlgKKwkJLyogUlggKi8KIAkJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmc2stPnNrX3JlY2VpdmVfcXVldWUpKSkgewogCQkJc2tiX29ycGhhbihza2IpOwogCQkJYm5lcF9yeF9mcmFtZShzLCBza2IpOwpAQCAtNDg3LDcgKzQ5Niw3IEBACiAJCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQ09OTkVDVEVEKQogCQkJYnJlYWs7CiAKLQkJLy8gVFgKKwkJLyogVFggKi8KIAkJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmc2stPnNrX3dyaXRlX3F1ZXVlKSkpCiAJCQlpZiAoYm5lcF90eF9mcmFtZShzLCBza2IpKQogCQkJCWJyZWFrOwpAQCAtNTU1LDggKzU2NCw4IEBACiAKIAkvKiBzZXNzaW9uIHN0cnVjdCBhbGxvY2F0ZWQgYXMgcHJpdmF0ZSBwYXJ0IG9mIG5ldF9kZXZpY2UgKi8KIAlkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBibmVwX3Nlc3Npb24pLAotCQkJICAgKCpyZXEtPmRldmljZSkgPyByZXEtPmRldmljZSA6ICJibmVwJWQiLAotCQkJICAgYm5lcF9uZXRfc2V0dXApOworCQkJCSgqcmVxLT5kZXZpY2UpID8gcmVxLT5kZXZpY2UgOiAiYm5lcCVkIiwKKwkJCQlibmVwX25ldF9zZXR1cCk7CiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC01NzEsNyArNTgwLDcgQEAKIAlzID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCS8qIFRoaXMgaXMgcnggaGVhZGVyIHRoZXJlZm9yZSBhZGRyZXNzZXMgYXJlIHN3YXBwZWQuCi0JICogaWUgZWguaF9kZXN0IGlzIG91ciBsb2NhbCBhZGRyZXNzLiAqLworCSAqIGllLiBlaC5oX2Rlc3QgaXMgb3VyIGxvY2FsIGFkZHJlc3MuICovCiAJbWVtY3B5KHMtPmVoLmhfZGVzdCwgICAmc3JjLCBFVEhfQUxFTik7CiAJbWVtY3B5KHMtPmVoLmhfc291cmNlLCAmZHN0LCBFVEhfQUxFTik7CiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIHMtPmVoLmhfZGVzdCwgRVRIX0FMRU4pOwpAQCAtNTk3LDE3ICs2MDYsMTcgQEAKIAlTRVRfTkVUREVWX0RFVlRZUEUoZGV2LCAmYm5lcF90eXBlKTsKIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwotCWlmIChlcnIpIHsKKwlpZiAoZXJyKQogCQlnb3RvIGZhaWxlZDsKLQl9CiAKIAlfX2JuZXBfbGlua19zZXNzaW9uKHMpOwogCi0JZXJyID0ga2VybmVsX3RocmVhZChibmVwX3Nlc3Npb24sIHMsIENMT05FX0tFUk5FTCk7Ci0JaWYgKGVyciA8IDApIHsKKwlzLT50YXNrID0ga3RocmVhZF9ydW4oYm5lcF9zZXNzaW9uLCBzLCAia2JuZXBkICVzIiwgZGV2LT5uYW1lKTsKKwlpZiAoSVNfRVJSKHMtPnRhc2spKSB7CiAJCS8qIFNlc3Npb24gdGhyZWFkIHN0YXJ0IGZhaWxlZCwgZ290dGEgY2xlYW51cC4gKi8KIAkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAkJX19ibmVwX3VubGlua19zZXNzaW9uKHMpOworCQllcnIgPSBQVFJfRVJSKHMtPnRhc2spOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKQEAgLTYzMSwxNSArNjQwLDkgQEAKIAlkb3duX3JlYWQoJmJuZXBfc2Vzc2lvbl9zZW0pOwogCiAJcyA9IF9fYm5lcF9nZXRfc2Vzc2lvbihyZXEtPmRzdCk7Ci0JaWYgKHMpIHsKLQkJLyogV2FrZXVwIHVzZXItc3BhY2Ugd2hpY2ggaXMgcG9sbGluZyBmb3Igc29ja2V0IGVycm9ycy4KLQkJICogVGhpcyBpcyB0ZW1wb3JhcnkgaGFjayB1bnRpbCB3ZSBoYXZlIHNodXRkb3duIGluIEwyQ0FQICovCi0JCXMtPnNvY2stPnNrLT5za19lcnIgPSBFVU5BVENIOwotCi0JCS8qIEtpbGwgc2Vzc2lvbiB0aHJlYWQgKi8KLQkJYXRvbWljX2luYygmcy0+a2lsbGVkKTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKHNrX3NsZWVwKHMtPnNvY2stPnNrKSk7Ci0JfSBlbHNlCisJaWYgKHMpCisJCWt0aHJlYWRfc3RvcChzLT50YXNrKTsKKwllbHNlCiAJCWVyciA9IC1FTk9FTlQ7CiAKIAl1cF9yZWFkKCZibmVwX3Nlc3Npb25fc2VtKTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvYm5lcC9zb2NrLmMgYi9uZXQvYmx1ZXRvb3RoL2JuZXAvc29jay5jCmluZGV4IGQ5MzVkYTcuLjE3ODAwYjEgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvYm5lcC9zb2NrLmMKKysrIGIvbmV0L2JsdWV0b290aC9ibmVwL3NvY2suYwpAQCAtMzksMTAgKzM5LDEwIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpbmNsdWRlICJibmVwLmgiCiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvY210cC9jYXBpLmMgYi9uZXQvYmx1ZXRvb3RoL2NtdHAvY2FwaS5jCmluZGV4IDY3Y2ZmODEwLi43NDQyMzNjIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2NtdHAvY2FwaS5jCisrKyBiL25ldC9ibHVldG9vdGgvY210cC9jYXBpLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAKICNpbmNsdWRlIDxsaW51eC9pc2RuL2NhcGlsbGkuaD4KQEAgLTE0Myw3ICsxNDQsNyBAQAogCiAJc2tiX3F1ZXVlX3RhaWwoJnNlc3Npb24tPnRyYW5zbWl0LCBza2IpOwogCi0JY210cF9zY2hlZHVsZShzZXNzaW9uKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoc2tfc2xlZXAoc2Vzc2lvbi0+c29jay0+c2spKTsKIH0KIAogc3RhdGljIHZvaWQgY210cF9zZW5kX2ludGVyb3Btc2coc3RydWN0IGNtdHBfc2Vzc2lvbiAqc2Vzc2lvbiwKQEAgLTM4Niw4ICszODcsNyBAQAogCiAJY2FwaV9jdHJfZG93bihjdHJsKTsKIAotCWF0b21pY19pbmMoJnNlc3Npb24tPnRlcm1pbmF0ZSk7Ci0JY210cF9zY2hlZHVsZShzZXNzaW9uKTsKKwlrdGhyZWFkX3N0b3Aoc2Vzc2lvbi0+dGFzayk7CiB9CiAKIHN0YXRpYyB2b2lkIGNtdHBfcmVnaXN0ZXJfYXBwbChzdHJ1Y3QgY2FwaV9jdHIgKmN0cmwsIF9fdTE2IGFwcGwsIGNhcGlfcmVnaXN0ZXJfcGFyYW1zICpycCkKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvY210cC9jbXRwLmggYi9uZXQvYmx1ZXRvb3RoL2NtdHAvY210cC5oCmluZGV4IDc4NWU3OWUuLmRiNDNiNTQgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvY210cC9jbXRwLmgKKysrIGIvbmV0L2JsdWV0b290aC9jbXRwL2NtdHAuaApAQCAtMzcsNyArMzcsNyBAQAogI2RlZmluZSBDTVRQX0xPT1BCQUNLCTAKIAogc3RydWN0IGNtdHBfY29ubmFkZF9yZXEgewotCWludCAgIHNvY2s7CS8vIENvbm5lY3RlZCBzb2NrZXQKKwlpbnQgICBzb2NrOwkvKiBDb25uZWN0ZWQgc29ja2V0ICovCiAJX191MzIgZmxhZ3M7CiB9OwogCkBAIC04MSw3ICs4MSw3IEBACiAKIAljaGFyIG5hbWVbQlROQU1TSVpdOwogCi0JYXRvbWljX3QgdGVybWluYXRlOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKIAogCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CiAKQEAgLTEyMSwxMyArMTIxLDYgQEAKIAogdm9pZCBjbXRwX3JlY3ZfY2FwaW1zZyhzdHJ1Y3QgY210cF9zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAotc3RhdGljIGlubGluZSB2b2lkIGNtdHBfc2NoZWR1bGUoc3RydWN0IGNtdHBfc2Vzc2lvbiAqc2Vzc2lvbikKLXsKLQlzdHJ1Y3Qgc29jayAqc2sgPSBzZXNzaW9uLT5zb2NrLT5zazsKLQotCXdha2VfdXBfaW50ZXJydXB0aWJsZShza19zbGVlcChzaykpOwotfQotCiAvKiBDTVRQIGluaXQgZGVmaW5lcyAqLwogaW50IGNtdHBfaW5pdF9zb2NrZXRzKHZvaWQpOwogdm9pZCBjbXRwX2NsZWFudXBfc29ja2V0cyh2b2lkKTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvY210cC9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2NtdHAvY29yZS5jCmluZGV4IDk2NGVhOTEuLmM1YjExYWYgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvY210cC9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9jbXRwL2NvcmUuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KIAogI2luY2x1ZGUgPGxpbnV4L2lzZG4vY2FwaWxsaS5oPgpAQCAtMjM1LDkgKzIzNiwxMiBAQAogCiAJCXNpemUgPSBtaW5fdCh1aW50LCAoKHRhaWwgPCAyNTgpID8gKHRhaWwgLSAyKSA6ICh0YWlsIC0gMykpLCBza2ItPmxlbik7CiAKLQkJaWYgKChzY2ItPmlkIDwgMCkgJiYgKChzY2ItPmlkID0gY210cF9hbGxvY19ibG9ja19pZChzZXNzaW9uKSkgPCAwKSkgewotCQkJc2tiX3F1ZXVlX2hlYWQoJnNlc3Npb24tPnRyYW5zbWl0LCBza2IpOwotCQkJYnJlYWs7CisJCWlmIChzY2ItPmlkIDwgMCkgeworCQkJc2NiLT5pZCA9IGNtdHBfYWxsb2NfYmxvY2tfaWQoc2Vzc2lvbik7CisJCQlpZiAoc2NiLT5pZCA8IDApIHsKKwkJCQlza2JfcXVldWVfaGVhZCgmc2Vzc2lvbi0+dHJhbnNtaXQsIHNrYik7CisJCQkJYnJlYWs7CisJCQl9CiAJCX0KIAogCQlpZiAoc2l6ZSA8IDI1NikgewpAQCAtMjg0LDEyICsyODgsMTEgQEAKIAogCUJUX0RCRygic2Vzc2lvbiAlcCIsIHNlc3Npb24pOwogCi0JZGFlbW9uaXplKCJrY210cGRfY3RyXyVkIiwgc2Vzc2lvbi0+bnVtKTsKIAlzZXRfdXNlcl9uaWNlKGN1cnJlbnQsIC0xNSk7CiAKIAlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmd2FpdCwgY3VycmVudCk7CiAJYWRkX3dhaXRfcXVldWUoc2tfc2xlZXAoc2spLCAmd2FpdCk7Ci0Jd2hpbGUgKCFhdG9taWNfcmVhZCgmc2Vzc2lvbi0+dGVybWluYXRlKSkgeworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAKIAkJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9DT05ORUNURUQpCkBAIC0zNDMsNyArMzQ2LDggQEAKIAogCWJhY3B5KCZzZXNzaW9uLT5iZGFkZHIsICZidF9zayhzb2NrLT5zayktPmRzdCk7CiAKLQlzZXNzaW9uLT5tdHUgPSBtaW5fdCh1aW50LCBsMmNhcF9waShzb2NrLT5zayktPm9tdHUsIGwyY2FwX3BpKHNvY2stPnNrKS0+aW10dSk7CisJc2Vzc2lvbi0+bXR1ID0gbWluX3QodWludCwgbDJjYXBfcGkoc29jay0+c2spLT5jaGFuLT5vbXR1LAorCQkJCQlsMmNhcF9waShzb2NrLT5zayktPmNoYW4tPmltdHUpOwogCiAJQlRfREJHKCJtdHUgJWQiLCBzZXNzaW9uLT5tdHUpOwogCkBAIC0zNjcsOSArMzcxLDEyIEBACiAKIAlfX2NtdHBfbGlua19zZXNzaW9uKHNlc3Npb24pOwogCi0JZXJyID0ga2VybmVsX3RocmVhZChjbXRwX3Nlc3Npb24sIHNlc3Npb24sIENMT05FX0tFUk5FTCk7Ci0JaWYgKGVyciA8IDApCisJc2Vzc2lvbi0+dGFzayA9IGt0aHJlYWRfcnVuKGNtdHBfc2Vzc2lvbiwgc2Vzc2lvbiwgImtjbXRwZF9jdHJfJWQiLAorCQkJCQkJCQlzZXNzaW9uLT5udW0pOworCWlmIChJU19FUlIoc2Vzc2lvbi0+dGFzaykpIHsKKwkJZXJyID0gUFRSX0VSUihzZXNzaW9uLT50YXNrKTsKIAkJZ290byB1bmxpbms7CisJfQogCiAJaWYgKCEoc2Vzc2lvbi0+ZmxhZ3MgJiAoMSA8PCBDTVRQX0xPT1BCQUNLKSkpIHsKIAkJZXJyID0gY210cF9hdHRhY2hfZGV2aWNlKHNlc3Npb24pOwpAQCAtNDA2LDkgKzQxMyw4IEBACiAJCS8qIEZsdXNoIHRoZSB0cmFuc21pdCBxdWV1ZSAqLwogCQlza2JfcXVldWVfcHVyZ2UoJnNlc3Npb24tPnRyYW5zbWl0KTsKIAotCQkvKiBLaWxsIHNlc3Npb24gdGhyZWFkICovCi0JCWF0b21pY19pbmMoJnNlc3Npb24tPnRlcm1pbmF0ZSk7Ci0JCWNtdHBfc2NoZWR1bGUoc2Vzc2lvbik7CisJCS8qIFN0b3Agc2Vzc2lvbiB0aHJlYWQgKi8KKwkJa3RocmVhZF9zdG9wKHNlc3Npb24tPnRhc2spOwogCX0gZWxzZQogCQllcnIgPSAtRU5PRU5UOwogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2NtdHAvc29jay5jIGIvbmV0L2JsdWV0b290aC9jbXRwL3NvY2suYwppbmRleCA3ZWExOTc5Li4zZjJkZDVjIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2NtdHAvc29jay5jCisrKyBiL25ldC9ibHVldG9vdGgvY210cC9zb2NrLmMKQEAgLTM0LDEyICszNCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KIAogI2luY2x1ZGUgPGxpbnV4L2lzZG4vY2FwaWxsaS5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpbmNsdWRlICJjbXRwLmgiCiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYyBiL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYwppbmRleCA3YTZmNTZiLi4zMTYzMzMwIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jCkBAIC0yNjksNiArMjY5LDE5IEBACiAJaGNpX2Nvbm5fZW50ZXJfc25pZmZfbW9kZShjb25uKTsKIH0KIAorc3RhdGljIHZvaWQgaGNpX2Nvbm5fYXV0b19hY2NlcHQodW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGhjaV9jb25uICpjb25uID0gKHZvaWQgKikgYXJnOworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gY29ubi0+aGRldjsKKworCWhjaV9kZXZfbG9jayhoZGV2KTsKKworCWhjaV9zZW5kX2NtZChoZGV2LCBIQ0lfT1BfVVNFUl9DT05GSVJNX1JFUExZLCBzaXplb2YoY29ubi0+ZHN0KSwKKwkJCQkJCQkJJmNvbm4tPmRzdCk7CisKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKK30KKwogc3RydWN0IGhjaV9jb25uICpoY2lfY29ubl9hZGQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGludCB0eXBlLCBiZGFkZHJfdCAqZHN0KQogewogCXN0cnVjdCBoY2lfY29ubiAqY29ubjsKQEAgLTI4Nyw2ICszMDAsNyBAQAogCWNvbm4tPmF1dGhfdHlwZSA9IEhDSV9BVF9HRU5FUkFMX0JPTkRJTkc7CiAJY29ubi0+aW9fY2FwYWJpbGl0eSA9IGhkZXYtPmlvX2NhcGFiaWxpdHk7CiAJY29ubi0+cmVtb3RlX2F1dGggPSAweGZmOworCWNvbm4tPmtleV90eXBlID0gMHhmZjsKIAogCWNvbm4tPnBvd2VyX3NhdmUgPSAxOwogCWNvbm4tPmRpc2NfdGltZW91dCA9IEhDSV9ESVNDT05OX1RJTUVPVVQ7CkBAIC0zMTEsNiArMzI1LDggQEAKIAogCXNldHVwX3RpbWVyKCZjb25uLT5kaXNjX3RpbWVyLCBoY2lfY29ubl90aW1lb3V0LCAodW5zaWduZWQgbG9uZyljb25uKTsKIAlzZXR1cF90aW1lcigmY29ubi0+aWRsZV90aW1lciwgaGNpX2Nvbm5faWRsZSwgKHVuc2lnbmVkIGxvbmcpY29ubik7CisJc2V0dXBfdGltZXIoJmNvbm4tPmF1dG9fYWNjZXB0X3RpbWVyLCBoY2lfY29ubl9hdXRvX2FjY2VwdCwKKwkJCQkJCQkodW5zaWduZWQgbG9uZykgY29ubik7CiAKIAlhdG9taWNfc2V0KCZjb25uLT5yZWZjbnQsIDApOwogCkBAIC0zNDEsNiArMzU3LDggQEAKIAogCWRlbF90aW1lcigmY29ubi0+ZGlzY190aW1lcik7CiAKKwlkZWxfdGltZXIoJmNvbm4tPmF1dG9fYWNjZXB0X3RpbWVyKTsKKwogCWlmIChjb25uLT50eXBlID09IEFDTF9MSU5LKSB7CiAJCXN0cnVjdCBoY2lfY29ubiAqc2NvID0gY29ubi0+bGluazsKIAkJaWYgKHNjbykKQEAgLTUzNSwzNiArNTUzLDkzIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIEVuY3J5cHQgdGhlIHRoZSBsaW5rICovCitzdGF0aWMgdm9pZCBoY2lfY29ubl9lbmNyeXB0KHN0cnVjdCBoY2lfY29ubiAqY29ubikKK3sKKwlCVF9EQkcoImNvbm4gJXAiLCBjb25uKTsKKworCWlmICghdGVzdF9hbmRfc2V0X2JpdChIQ0lfQ09OTl9FTkNSWVBUX1BFTkQsICZjb25uLT5wZW5kKSkgeworCQlzdHJ1Y3QgaGNpX2NwX3NldF9jb25uX2VuY3J5cHQgY3A7CisJCWNwLmhhbmRsZSAgPSBjcHVfdG9fbGUxNihjb25uLT5oYW5kbGUpOworCQljcC5lbmNyeXB0ID0gMHgwMTsKKwkJaGNpX3NlbmRfY21kKGNvbm4tPmhkZXYsIEhDSV9PUF9TRVRfQ09OTl9FTkNSWVBULCBzaXplb2YoY3ApLAorCQkJCQkJCQkJJmNwKTsKKwl9Cit9CisKIC8qIEVuYWJsZSBzZWN1cml0eSAqLwogaW50IGhjaV9jb25uX3NlY3VyaXR5KHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzZWNfbGV2ZWwsIF9fdTggYXV0aF90eXBlKQogewogCUJUX0RCRygiY29ubiAlcCIsIGNvbm4pOwogCisJLyogRm9yIHNkcCB3ZSBkb24ndCBuZWVkIHRoZSBsaW5rIGtleS4gKi8KIAlpZiAoc2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX1NEUCkKIAkJcmV0dXJuIDE7CiAKKwkvKiBGb3Igbm9uIDIuMSBkZXZpY2VzIGFuZCBsb3cgc2VjdXJpdHkgbGV2ZWwgd2UgZG9uJ3QgbmVlZCB0aGUgbGluaworCSAgIGtleS4gKi8KIAlpZiAoc2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX0xPVyAmJgogCQkJCSghY29ubi0+c3NwX21vZGUgfHwgIWNvbm4tPmhkZXYtPnNzcF9tb2RlKSkKIAkJcmV0dXJuIDE7CiAKLQlpZiAoY29ubi0+bGlua19tb2RlICYgSENJX0xNX0VOQ1JZUFQpCi0JCXJldHVybiBoY2lfY29ubl9hdXRoKGNvbm4sIHNlY19sZXZlbCwgYXV0aF90eXBlKTsKKwkvKiBGb3Igb3RoZXIgc2VjdXJpdHkgbGV2ZWxzIHdlIG5lZWQgdGhlIGxpbmsga2V5LiAqLworCWlmICghKGNvbm4tPmxpbmtfbW9kZSAmIEhDSV9MTV9BVVRIKSkKKwkJZ290byBhdXRoOwogCisJLyogQW4gYXV0aGVudGljYXRlZCBjb21iaW5hdGlvbiBrZXkgaGFzIHN1ZmZpY2llbnQgc2VjdXJpdHkgZm9yIGFueQorCSAgIHNlY3VyaXR5IGxldmVsLiAqLworCWlmIChjb25uLT5rZXlfdHlwZSA9PSBIQ0lfTEtfQVVUSF9DT01CSU5BVElPTikKKwkJZ290byBlbmNyeXB0OworCisJLyogQW4gdW5hdXRoZW50aWNhdGVkIGNvbWJpbmF0aW9uIGtleSBoYXMgc3VmZmljaWVudCBzZWN1cml0eSBmb3IKKwkgICBzZWN1cml0eSBsZXZlbCAxIGFuZCAyLiAqLworCWlmIChjb25uLT5rZXlfdHlwZSA9PSBIQ0lfTEtfVU5BVVRIX0NPTUJJTkFUSU9OICYmCisJCQkoc2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX01FRElVTSB8fAorCQkJc2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX0xPVykpCisJCWdvdG8gZW5jcnlwdDsKKworCS8qIEEgY29tYmluYXRpb24ga2V5IGhhcyBhbHdheXMgc3VmZmljaWVudCBzZWN1cml0eSBmb3IgdGhlIHNlY3VyaXR5CisJICAgbGV2ZWxzIDEgb3IgMi4gSGlnaCBzZWN1cml0eSBsZXZlbCByZXF1aXJlcyB0aGUgY29tYmluYXRpb24ga2V5CisJICAgaXMgZ2VuZXJhdGVkIHVzaW5nIG1heGltdW0gUElOIGNvZGUgbGVuZ3RoICgxNikuCisJICAgRm9yIHByZSAyLjEgdW5pdHMuICovCisJaWYgKGNvbm4tPmtleV90eXBlID09IEhDSV9MS19DT01CSU5BVElPTiAmJgorCQkJKHNlY19sZXZlbCAhPSBCVF9TRUNVUklUWV9ISUdIIHx8CisJCQljb25uLT5waW5fbGVuZ3RoID09IDE2KSkKKwkJZ290byBlbmNyeXB0OworCithdXRoOgogCWlmICh0ZXN0X2FuZF9zZXRfYml0KEhDSV9DT05OX0VOQ1JZUFRfUEVORCwgJmNvbm4tPnBlbmQpKQogCQlyZXR1cm4gMDsKIAotCWlmIChoY2lfY29ubl9hdXRoKGNvbm4sIHNlY19sZXZlbCwgYXV0aF90eXBlKSkgewotCQlzdHJ1Y3QgaGNpX2NwX3NldF9jb25uX2VuY3J5cHQgY3A7Ci0JCWNwLmhhbmRsZSAgPSBjcHVfdG9fbGUxNihjb25uLT5oYW5kbGUpOwotCQljcC5lbmNyeXB0ID0gMTsKLQkJaGNpX3NlbmRfY21kKGNvbm4tPmhkZXYsIEhDSV9PUF9TRVRfQ09OTl9FTkNSWVBULAotCQkJCQkJCXNpemVvZihjcCksICZjcCk7Ci0JfQorCWhjaV9jb25uX2F1dGgoY29ubiwgc2VjX2xldmVsLCBhdXRoX3R5cGUpOworCXJldHVybiAwOwogCitlbmNyeXB0OgorCWlmIChjb25uLT5saW5rX21vZGUgJiBIQ0lfTE1fRU5DUllQVCkKKwkJcmV0dXJuIDE7CisKKwloY2lfY29ubl9lbmNyeXB0KGNvbm4pOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChoY2lfY29ubl9zZWN1cml0eSk7CiAKKy8qIENoZWNrIHNlY3VyZSBsaW5rIHJlcXVpcmVtZW50ICovCitpbnQgaGNpX2Nvbm5fY2hlY2tfc2VjdXJlKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzZWNfbGV2ZWwpCit7CisJQlRfREJHKCJjb25uICVwIiwgY29ubik7CisKKwlpZiAoc2VjX2xldmVsICE9IEJUX1NFQ1VSSVRZX0hJR0gpCisJCXJldHVybiAxOyAvKiBBY2NlcHQgaWYgbm9uLXNlY3VyZSBpcyByZXF1aXJlZCAqLworCisJaWYgKGNvbm4tPmtleV90eXBlID09IEhDSV9MS19BVVRIX0NPTUJJTkFUSU9OIHx8CisJCQkoY29ubi0+a2V5X3R5cGUgPT0gSENJX0xLX0NPTUJJTkFUSU9OICYmCisJCQljb25uLT5waW5fbGVuZ3RoID09IDE2KSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsgLyogUmVqZWN0IG5vdCBzZWN1cmUgbGluayAqLworfQorRVhQT1JUX1NZTUJPTChoY2lfY29ubl9jaGVja19zZWN1cmUpOworCiAvKiBDaGFuZ2UgbGluayBrZXkgKi8KIGludCBoY2lfY29ubl9jaGFuZ2VfbGlua19rZXkoc3RydWN0IGhjaV9jb25uICpjb25uKQogewpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCmluZGV4IGM4M2Y2MTguLjgxNTI2OWIgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKQEAgLTU2LDcgKzU2LDYgQEAKIHN0YXRpYyB2b2lkIGhjaV9jbWRfdGFzayh1bnNpZ25lZCBsb25nIGFyZyk7CiBzdGF0aWMgdm9pZCBoY2lfcnhfdGFzayh1bnNpZ25lZCBsb25nIGFyZyk7CiBzdGF0aWMgdm9pZCBoY2lfdHhfdGFzayh1bnNpZ25lZCBsb25nIGFyZyk7Ci1zdGF0aWMgdm9pZCBoY2lfbm90aWZ5KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBpbnQgZXZlbnQpOwogCiBzdGF0aWMgREVGSU5FX1JXTE9DSyhoY2lfdGFza19sb2NrKTsKIApAQCAtNTg3LDEwICs1ODYsOCBAQAogCWhjaV9yZXFfY2FuY2VsKGhkZXYsIEVOT0RFVik7CiAJaGNpX3JlcV9sb2NrKGhkZXYpOwogCi0JLyogU3RvcCB0aW1lciwgaXQgbWlnaHQgYmUgcnVubmluZyAqLwotCWRlbF90aW1lcl9zeW5jKCZoZGV2LT5jbWRfdGltZXIpOwotCiAJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoSENJX1VQLCAmaGRldi0+ZmxhZ3MpKSB7CisJCWRlbF90aW1lcl9zeW5jKCZoZGV2LT5jbWRfdGltZXIpOwogCQloY2lfcmVxX3VubG9jayhoZGV2KTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNjI5LDYgKzYyNiw3IEBACiAKIAkvKiBEcm9wIGxhc3Qgc2VudCBjb21tYW5kICovCiAJaWYgKGhkZXYtPnNlbnRfY21kKSB7CisJCWRlbF90aW1lcl9zeW5jKCZoZGV2LT5jbWRfdGltZXIpOwogCQlrZnJlZV9za2IoaGRldi0+c2VudF9jbWQpOwogCQloZGV2LT5zZW50X2NtZCA9IE5VTEw7CiAJfQpAQCAtMTAyMiwxOCArMTAyMCw1NCBAQAogCXJldHVybiBOVUxMOwogfQogCi1pbnQgaGNpX2FkZF9saW5rX2tleShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgaW50IG5ld19rZXksIGJkYWRkcl90ICpiZGFkZHIsCi0JCQkJCQl1OCAqdmFsLCB1OCB0eXBlLCB1OCBwaW5fbGVuKQorc3RhdGljIGludCBoY2lfcGVyc2lzdGVudF9rZXkoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBoY2lfY29ubiAqY29ubiwKKwkJCQkJCXU4IGtleV90eXBlLCB1OCBvbGRfa2V5X3R5cGUpCit7CisJLyogTGVnYWN5IGtleSAqLworCWlmIChrZXlfdHlwZSA8IDB4MDMpCisJCXJldHVybiAxOworCisJLyogRGVidWcga2V5cyBhcmUgaW5zZWN1cmUgc28gZG9uJ3Qgc3RvcmUgdGhlbSBwZXJzaXN0ZW50bHkgKi8KKwlpZiAoa2V5X3R5cGUgPT0gSENJX0xLX0RFQlVHX0NPTUJJTkFUSU9OKQorCQlyZXR1cm4gMDsKKworCS8qIENoYW5nZWQgY29tYmluYXRpb24ga2V5IGFuZCB0aGVyZSdzIG5vIHByZXZpb3VzIG9uZSAqLworCWlmIChrZXlfdHlwZSA9PSBIQ0lfTEtfQ0hBTkdFRF9DT01CSU5BVElPTiAmJiBvbGRfa2V5X3R5cGUgPT0gMHhmZikKKwkJcmV0dXJuIDA7CisKKwkvKiBTZWN1cml0eSBtb2RlIDMgY2FzZSAqLworCWlmICghY29ubikKKwkJcmV0dXJuIDE7CisKKwkvKiBOZWl0aGVyIGxvY2FsIG5vciByZW1vdGUgc2lkZSBoYWQgbm8tYm9uZGluZyBhcyByZXF1aXJlbWVudCAqLworCWlmIChjb25uLT5hdXRoX3R5cGUgPiAweDAxICYmIGNvbm4tPnJlbW90ZV9hdXRoID4gMHgwMSkKKwkJcmV0dXJuIDE7CisKKwkvKiBMb2NhbCBzaWRlIGhhZCBkZWRpY2F0ZWQgYm9uZGluZyBhcyByZXF1aXJlbWVudCAqLworCWlmIChjb25uLT5hdXRoX3R5cGUgPT0gMHgwMiB8fCBjb25uLT5hdXRoX3R5cGUgPT0gMHgwMykKKwkJcmV0dXJuIDE7CisKKwkvKiBSZW1vdGUgc2lkZSBoYWQgZGVkaWNhdGVkIGJvbmRpbmcgYXMgcmVxdWlyZW1lbnQgKi8KKwlpZiAoY29ubi0+cmVtb3RlX2F1dGggPT0gMHgwMiB8fCBjb25uLT5yZW1vdGVfYXV0aCA9PSAweDAzKQorCQlyZXR1cm4gMTsKKworCS8qIElmIG5vbmUgb2YgdGhlIGFib3ZlIGNyaXRlcmlhIG1hdGNoLCB0aGVuIGRvbid0IHN0b3JlIHRoZSBrZXkKKwkgKiBwZXJzaXN0ZW50bHkgKi8KKwlyZXR1cm4gMDsKK30KKworaW50IGhjaV9hZGRfbGlua19rZXkoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBoY2lfY29ubiAqY29ubiwgaW50IG5ld19rZXksCisJCQkJYmRhZGRyX3QgKmJkYWRkciwgdTggKnZhbCwgdTggdHlwZSwgdTggcGluX2xlbikKIHsKIAlzdHJ1Y3QgbGlua19rZXkgKmtleSwgKm9sZF9rZXk7Ci0JdTggb2xkX2tleV90eXBlOworCXU4IG9sZF9rZXlfdHlwZSwgcGVyc2lzdGVudDsKIAogCW9sZF9rZXkgPSBoY2lfZmluZF9saW5rX2tleShoZGV2LCBiZGFkZHIpOwogCWlmIChvbGRfa2V5KSB7CiAJCW9sZF9rZXlfdHlwZSA9IG9sZF9rZXktPnR5cGU7CiAJCWtleSA9IG9sZF9rZXk7CiAJfSBlbHNlIHsKLQkJb2xkX2tleV90eXBlID0gMHhmZjsKKwkJb2xkX2tleV90eXBlID0gY29ubiA/IGNvbm4tPmtleV90eXBlIDogMHhmZjsKIAkJa2V5ID0ga3phbGxvYyhzaXplb2YoKmtleSksIEdGUF9BVE9NSUMpOwogCQlpZiAoIWtleSkKIAkJCXJldHVybiAtRU5PTUVNOwpAQCAtMTA0MiwxNiArMTA3NiwzNyBAQAogCiAJQlRfREJHKCIlcyBrZXkgZm9yICVzIHR5cGUgJXUiLCBoZGV2LT5uYW1lLCBiYXRvc3RyKGJkYWRkciksIHR5cGUpOwogCisJLyogU29tZSBidWdneSBjb250cm9sbGVyIGNvbWJpbmF0aW9ucyBnZW5lcmF0ZSBhIGNoYW5nZWQKKwkgKiBjb21iaW5hdGlvbiBrZXkgZm9yIGxlZ2FjeSBwYWlyaW5nIGV2ZW4gd2hlbiB0aGVyZSdzIG5vCisJICogcHJldmlvdXMga2V5ICovCisJaWYgKHR5cGUgPT0gSENJX0xLX0NIQU5HRURfQ09NQklOQVRJT04gJiYKKwkJCQkJKCFjb25uIHx8IGNvbm4tPnJlbW90ZV9hdXRoID09IDB4ZmYpICYmCisJCQkJCW9sZF9rZXlfdHlwZSA9PSAweGZmKSB7CisJCXR5cGUgPSBIQ0lfTEtfQ09NQklOQVRJT047CisJCWlmIChjb25uKQorCQkJY29ubi0+a2V5X3R5cGUgPSB0eXBlOworCX0KKwogCWJhY3B5KCZrZXktPmJkYWRkciwgYmRhZGRyKTsKIAltZW1jcHkoa2V5LT52YWwsIHZhbCwgMTYpOwotCWtleS0+dHlwZSA9IHR5cGU7CiAJa2V5LT5waW5fbGVuID0gcGluX2xlbjsKIAotCWlmIChuZXdfa2V5KQotCQltZ210X25ld19rZXkoaGRldi0+aWQsIGtleSwgb2xkX2tleV90eXBlKTsKLQotCWlmICh0eXBlID09IDB4MDYpCisJaWYgKHR5cGUgPT0gSENJX0xLX0NIQU5HRURfQ09NQklOQVRJT04pCiAJCWtleS0+dHlwZSA9IG9sZF9rZXlfdHlwZTsKKwllbHNlCisJCWtleS0+dHlwZSA9IHR5cGU7CisKKwlpZiAoIW5ld19rZXkpCisJCXJldHVybiAwOworCisJcGVyc2lzdGVudCA9IGhjaV9wZXJzaXN0ZW50X2tleShoZGV2LCBjb25uLCB0eXBlLCBvbGRfa2V5X3R5cGUpOworCisJbWdtdF9uZXdfa2V5KGhkZXYtPmlkLCBrZXksIHBlcnNpc3RlbnQpOworCisJaWYgKCFwZXJzaXN0ZW50KSB7CisJCWxpc3RfZGVsKCZrZXktPmxpc3QpOworCQlrZnJlZShrZXkpOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTA4Myw2ICsxMTM4LDcwIEBACiAJdGFza2xldF9zY2hlZHVsZSgmaGRldi0+Y21kX3Rhc2spOwogfQogCitzdHJ1Y3Qgb29iX2RhdGEgKmhjaV9maW5kX3JlbW90ZV9vb2JfZGF0YShzdHJ1Y3QgaGNpX2RldiAqaGRldiwKKwkJCQkJCQliZGFkZHJfdCAqYmRhZGRyKQoreworCXN0cnVjdCBvb2JfZGF0YSAqZGF0YTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGF0YSwgJmhkZXYtPnJlbW90ZV9vb2JfZGF0YSwgbGlzdCkKKwkJaWYgKGJhY21wKGJkYWRkciwgJmRhdGEtPmJkYWRkcikgPT0gMCkKKwkJCXJldHVybiBkYXRhOworCisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBoY2lfcmVtb3ZlX3JlbW90ZV9vb2JfZGF0YShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgYmRhZGRyX3QgKmJkYWRkcikKK3sKKwlzdHJ1Y3Qgb29iX2RhdGEgKmRhdGE7CisKKwlkYXRhID0gaGNpX2ZpbmRfcmVtb3RlX29vYl9kYXRhKGhkZXYsIGJkYWRkcik7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCUJUX0RCRygiJXMgcmVtb3ZpbmcgJXMiLCBoZGV2LT5uYW1lLCBiYXRvc3RyKGJkYWRkcikpOworCisJbGlzdF9kZWwoJmRhdGEtPmxpc3QpOworCWtmcmVlKGRhdGEpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBoY2lfcmVtb3RlX29vYl9kYXRhX2NsZWFyKHN0cnVjdCBoY2lfZGV2ICpoZGV2KQoreworCXN0cnVjdCBvb2JfZGF0YSAqZGF0YSwgKm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGF0YSwgbiwgJmhkZXYtPnJlbW90ZV9vb2JfZGF0YSwgbGlzdCkgeworCQlsaXN0X2RlbCgmZGF0YS0+bGlzdCk7CisJCWtmcmVlKGRhdGEpOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgaGNpX2FkZF9yZW1vdGVfb29iX2RhdGEoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGJkYWRkcl90ICpiZGFkZHIsIHU4ICpoYXNoLAorCQkJCQkJCQl1OCAqcmFuZG9taXplcikKK3sKKwlzdHJ1Y3Qgb29iX2RhdGEgKmRhdGE7CisKKwlkYXRhID0gaGNpX2ZpbmRfcmVtb3RlX29vYl9kYXRhKGhkZXYsIGJkYWRkcik7CisKKwlpZiAoIWRhdGEpIHsKKwkJZGF0YSA9IGttYWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0FUT01JQyk7CisJCWlmICghZGF0YSkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWJhY3B5KCZkYXRhLT5iZGFkZHIsIGJkYWRkcik7CisJCWxpc3RfYWRkKCZkYXRhLT5saXN0LCAmaGRldi0+cmVtb3RlX29vYl9kYXRhKTsKKwl9CisKKwltZW1jcHkoZGF0YS0+aGFzaCwgaGFzaCwgc2l6ZW9mKGRhdGEtPmhhc2gpKTsKKwltZW1jcHkoZGF0YS0+cmFuZG9taXplciwgcmFuZG9taXplciwgc2l6ZW9mKGRhdGEtPnJhbmRvbWl6ZXIpKTsKKworCUJUX0RCRygiJXMgZm9yICVzIiwgaGRldi0+bmFtZSwgYmF0b3N0cihiZGFkZHIpKTsKKworCXJldHVybiAwOworfQorCiAvKiBSZWdpc3RlciBIQ0kgZGV2aWNlICovCiBpbnQgaGNpX3JlZ2lzdGVyX2RldihzdHJ1Y3QgaGNpX2RldiAqaGRldikKIHsKQEAgLTExNDcsNiArMTI2Niw4IEBACiAKIAlJTklUX0xJU1RfSEVBRCgmaGRldi0+bGlua19rZXlzKTsKIAorCUlOSVRfTElTVF9IRUFEKCZoZGV2LT5yZW1vdGVfb29iX2RhdGEpOworCiAJSU5JVF9XT1JLKCZoZGV2LT5wb3dlcl9vbiwgaGNpX3Bvd2VyX29uKTsKIAlJTklUX1dPUksoJmhkZXYtPnBvd2VyX29mZiwgaGNpX3Bvd2VyX29mZik7CiAJc2V0dXBfdGltZXIoJmhkZXYtPm9mZl90aW1lciwgaGNpX2F1dG9fb2ZmLCAodW5zaWduZWQgbG9uZykgaGRldik7CkBAIC0xMjI2LDYgKzEzNDcsNyBAQAogCWhjaV9ibGFja2xpc3RfY2xlYXIoaGRldik7CiAJaGNpX3V1aWRzX2NsZWFyKGhkZXYpOwogCWhjaV9saW5rX2tleXNfY2xlYXIoaGRldik7CisJaGNpX3JlbW90ZV9vb2JfZGF0YV9jbGVhcihoZGV2KTsKIAloY2lfZGV2X3VubG9ja19iaChoZGV2KTsKIAogCV9faGNpX2Rldl9wdXQoaGRldik7CkBAIC0xMjc1LDcgKzEzOTcsNyBAQAogRVhQT1JUX1NZTUJPTChoY2lfcmVjdl9mcmFtZSk7CiAKIHN0YXRpYyBpbnQgaGNpX3JlYXNzZW1ibHkoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGludCB0eXBlLCB2b2lkICpkYXRhLAotCQkJICBpbnQgY291bnQsIF9fdTggaW5kZXgsIGdmcF90IGdmcF9tYXNrKQorCQkJCQkJICBpbnQgY291bnQsIF9fdTggaW5kZXgpCiB7CiAJaW50IGxlbiA9IDA7CiAJaW50IGhsZW4gPSAwOwpAQCAtMTMwNSw3ICsxNDI3LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJc2tiID0gYnRfc2tiX2FsbG9jKGxlbiwgZ2ZwX21hc2spOworCQlza2IgPSBidF9za2JfYWxsb2MobGVuLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFza2IpCiAJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTM5MSw4ICsxNTEzLDcgQEAKIAkJcmV0dXJuIC1FSUxTRVE7CiAKIAl3aGlsZSAoY291bnQpIHsKLQkJcmVtID0gaGNpX3JlYXNzZW1ibHkoaGRldiwgdHlwZSwgZGF0YSwgY291bnQsCi0JCQkJCQl0eXBlIC0gMSwgR0ZQX0FUT01JQyk7CisJCXJlbSA9IGhjaV9yZWFzc2VtYmx5KGhkZXYsIHR5cGUsIGRhdGEsIGNvdW50LCB0eXBlIC0gMSk7CiAJCWlmIChyZW0gPCAwKQogCQkJcmV0dXJuIHJlbTsKIApAQCAtMTQyNiw4ICsxNTQ3LDggQEAKIAkJfSBlbHNlCiAJCQl0eXBlID0gYnRfY2Ioc2tiKS0+cGt0X3R5cGU7CiAKLQkJcmVtID0gaGNpX3JlYXNzZW1ibHkoaGRldiwgdHlwZSwgZGF0YSwKLQkJCQkJY291bnQsIFNUUkVBTV9SRUFTU0VNQkxZLCBHRlBfQVRPTUlDKTsKKwkJcmVtID0gaGNpX3JlYXNzZW1ibHkoaGRldiwgdHlwZSwgZGF0YSwgY291bnQsCisJCQkJCQkJU1RSRUFNX1JFQVNTRU1CTFkpOwogCQlpZiAocmVtIDwgMCkKIAkJCXJldHVybiByZW07CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCmluZGV4IGNlYmU3NTg4Li5mMTNkZGJmIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKQEAgLTU2LDcgKzU2LDkgQEAKIAlpZiAoc3RhdHVzKQogCQlyZXR1cm47CiAKLQljbGVhcl9iaXQoSENJX0lOUVVJUlksICZoZGV2LT5mbGFncyk7CisJaWYgKHRlc3RfYml0KEhDSV9NR01ULCAmaGRldi0+ZmxhZ3MpICYmCisJCQkJdGVzdF9hbmRfY2xlYXJfYml0KEhDSV9JTlFVSVJZLCAmaGRldi0+ZmxhZ3MpKQorCQltZ210X2Rpc2NvdmVyaW5nKGhkZXYtPmlkLCAwKTsKIAogCWhjaV9yZXFfY29tcGxldGUoaGRldiwgSENJX09QX0lOUVVJUllfQ0FOQ0VMLCBzdGF0dXMpOwogCkBAIC03Miw3ICs3NCw5IEBACiAJaWYgKHN0YXR1cykKIAkJcmV0dXJuOwogCi0JY2xlYXJfYml0KEhDSV9JTlFVSVJZLCAmaGRldi0+ZmxhZ3MpOworCWlmICh0ZXN0X2JpdChIQ0lfTUdNVCwgJmhkZXYtPmZsYWdzKSAmJgorCQkJCXRlc3RfYW5kX2NsZWFyX2JpdChIQ0lfSU5RVUlSWSwgJmhkZXYtPmZsYWdzKSkKKwkJbWdtdF9kaXNjb3ZlcmluZyhoZGV2LT5pZCwgMCk7CiAKIAloY2lfY29ubl9jaGVja19wZW5kaW5nKGhkZXYpOwogfQpAQCAtMTk1LDE0ICsxOTksMTcgQEAKIAogCUJUX0RCRygiJXMgc3RhdHVzIDB4JXgiLCBoZGV2LT5uYW1lLCBzdGF0dXMpOwogCi0JaWYgKHN0YXR1cykKLQkJcmV0dXJuOwotCiAJc2VudCA9IGhjaV9zZW50X2NtZF9kYXRhKGhkZXYsIEhDSV9PUF9XUklURV9MT0NBTF9OQU1FKTsKIAlpZiAoIXNlbnQpCiAJCXJldHVybjsKIAotCW1lbWNweShoZGV2LT5kZXZfbmFtZSwgc2VudCwgMjQ4KTsKKwlpZiAodGVzdF9iaXQoSENJX01HTVQsICZoZGV2LT5mbGFncykpCisJCW1nbXRfc2V0X2xvY2FsX25hbWVfY29tcGxldGUoaGRldi0+aWQsIHNlbnQsIHN0YXR1cyk7CisKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm47CisKKwltZW1jcHkoaGRldi0+ZGV2X25hbWUsIHNlbnQsIEhDSV9NQVhfTkFNRV9MRU5HVEgpOwogfQogCiBzdGF0aWMgdm9pZCBoY2lfY2NfcmVhZF9sb2NhbF9uYW1lKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMjE0LDcgKzIyMSw3IEBACiAJaWYgKHJwLT5zdGF0dXMpCiAJCXJldHVybjsKIAotCW1lbWNweShoZGV2LT5kZXZfbmFtZSwgcnAtPm5hbWUsIDI0OCk7CisJbWVtY3B5KGhkZXYtPmRldl9uYW1lLCBycC0+bmFtZSwgSENJX01BWF9OQU1FX0xFTkdUSCk7CiB9CiAKIHN0YXRpYyB2b2lkIGhjaV9jY193cml0ZV9hdXRoX2VuYWJsZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTgyMSwxNiArODI4LDMxIEBACiAJCQkJCQkJCXJwLT5zdGF0dXMpOwogfQogCitzdGF0aWMgdm9pZCBoY2lfY2NfcmVhZF9sb2NhbF9vb2JfZGF0YV9yZXBseShzdHJ1Y3QgaGNpX2RldiAqaGRldiwKKwkJCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBoY2lfcnBfcmVhZF9sb2NhbF9vb2JfZGF0YSAqcnAgPSAodm9pZCAqKSBza2ItPmRhdGE7CisKKwlCVF9EQkcoIiVzIHN0YXR1cyAweCV4IiwgaGRldi0+bmFtZSwgcnAtPnN0YXR1cyk7CisKKwltZ210X3JlYWRfbG9jYWxfb29iX2RhdGFfcmVwbHlfY29tcGxldGUoaGRldi0+aWQsIHJwLT5oYXNoLAorCQkJCQkJcnAtPnJhbmRvbWl6ZXIsIHJwLT5zdGF0dXMpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgaGNpX2NzX2lucXVpcnkoc3RydWN0IGhjaV9kZXYgKmhkZXYsIF9fdTggc3RhdHVzKQogewogCUJUX0RCRygiJXMgc3RhdHVzIDB4JXgiLCBoZGV2LT5uYW1lLCBzdGF0dXMpOwogCiAJaWYgKHN0YXR1cykgewogCQloY2lfcmVxX2NvbXBsZXRlKGhkZXYsIEhDSV9PUF9JTlFVSVJZLCBzdGF0dXMpOwotCiAJCWhjaV9jb25uX2NoZWNrX3BlbmRpbmcoaGRldik7Ci0JfSBlbHNlCi0JCXNldF9iaXQoSENJX0lOUVVJUlksICZoZGV2LT5mbGFncyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAodGVzdF9iaXQoSENJX01HTVQsICZoZGV2LT5mbGFncykgJiYKKwkJCQkJIXRlc3RfYW5kX3NldF9iaXQoSENJX0lOUVVJUlksCisJCQkJCQkJJmhkZXYtPmZsYWdzKSkKKwkJbWdtdF9kaXNjb3ZlcmluZyhoZGV2LT5pZCwgMSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfY3NfY3JlYXRlX2Nvbm4oc3RydWN0IGhjaV9kZXYgKmhkZXYsIF9fdTggc3RhdHVzKQpAQCAtOTk5LDEyICsxMDIxLDE5IEBACiAJaGNpX2Rldl9sb2NrKGhkZXYpOwogCiAJY29ubiA9IGhjaV9jb25uX2hhc2hfbG9va3VwX2JhKGhkZXYsIEFDTF9MSU5LLCAmY3AtPmJkYWRkcik7Ci0JaWYgKGNvbm4gJiYgaGNpX291dGdvaW5nX2F1dGhfbmVlZGVkKGhkZXYsIGNvbm4pKSB7CisJaWYgKCFjb25uKQorCQlnb3RvIHVubG9jazsKKworCWlmICghaGNpX291dGdvaW5nX2F1dGhfbmVlZGVkKGhkZXYsIGNvbm4pKQorCQlnb3RvIHVubG9jazsKKworCWlmICghdGVzdF9hbmRfc2V0X2JpdChIQ0lfQ09OTl9BVVRIX1BFTkQsICZjb25uLT5wZW5kKSkgewogCQlzdHJ1Y3QgaGNpX2NwX2F1dGhfcmVxdWVzdGVkIGNwOwogCQljcC5oYW5kbGUgPSBfX2NwdV90b19sZTE2KGNvbm4tPmhhbmRsZSk7CiAJCWhjaV9zZW5kX2NtZChoZGV2LCBIQ0lfT1BfQVVUSF9SRVFVRVNURUQsIHNpemVvZihjcCksICZjcCk7CiAJfQogCit1bmxvY2s6CiAJaGNpX2Rldl91bmxvY2soaGRldik7CiB9CiAKQEAgLTExOTQsNyArMTIyMyw5IEBACiAKIAlCVF9EQkcoIiVzIHN0YXR1cyAlZCIsIGhkZXYtPm5hbWUsIHN0YXR1cyk7CiAKLQljbGVhcl9iaXQoSENJX0lOUVVJUlksICZoZGV2LT5mbGFncyk7CisJaWYgKHRlc3RfYml0KEhDSV9NR01ULCAmaGRldi0+ZmxhZ3MpICYmCisJCQkJdGVzdF9hbmRfY2xlYXJfYml0KEhDSV9JTlFVSVJZLCAmaGRldi0+ZmxhZ3MpKQorCQltZ210X2Rpc2NvdmVyaW5nKGhkZXYtPmlkLCAwKTsKIAogCWhjaV9yZXFfY29tcGxldGUoaGRldiwgSENJX09QX0lOUVVJUlksIHN0YXR1cyk7CiAKQEAgLTEyMTQsNyArMTI0NSwxMyBAQAogCiAJaGNpX2Rldl9sb2NrKGhkZXYpOwogCi0JZm9yICg7IG51bV9yc3A7IG51bV9yc3AtLSkgeworCWlmICghdGVzdF9hbmRfc2V0X2JpdChIQ0lfSU5RVUlSWSwgJmhkZXYtPmZsYWdzKSkgeworCisJCWlmICh0ZXN0X2JpdChIQ0lfTUdNVCwgJmhkZXYtPmZsYWdzKSkKKwkJCW1nbXRfZGlzY292ZXJpbmcoaGRldi0+aWQsIDEpOworCX0KKworCWZvciAoOyBudW1fcnNwOyBudW1fcnNwLS0sIGluZm8rKykgewogCQliYWNweSgmZGF0YS5iZGFkZHIsICZpbmZvLT5iZGFkZHIpOwogCQlkYXRhLnBzY2FuX3JlcF9tb2RlCT0gaW5mby0+cHNjYW5fcmVwX21vZGU7CiAJCWRhdGEucHNjYW5fcGVyaW9kX21vZGUJPSBpbmZvLT5wc2Nhbl9wZXJpb2RfbW9kZTsKQEAgLTEyMjMsOCArMTI2MCw5IEBACiAJCWRhdGEuY2xvY2tfb2Zmc2V0CT0gaW5mby0+Y2xvY2tfb2Zmc2V0OwogCQlkYXRhLnJzc2kJCT0gMHgwMDsKIAkJZGF0YS5zc3BfbW9kZQkJPSAweDAwOwotCQlpbmZvKys7CiAJCWhjaV9pbnF1aXJ5X2NhY2hlX3VwZGF0ZShoZGV2LCAmZGF0YSk7CisJCW1nbXRfZGV2aWNlX2ZvdW5kKGhkZXYtPmlkLCAmaW5mby0+YmRhZGRyLCBpbmZvLT5kZXZfY2xhc3MsIDAsCisJCQkJCQkJCQlOVUxMKTsKIAl9CiAKIAloY2lfZGV2X3VubG9jayhoZGV2KTsKQEAgLTE0MDIsNyArMTQ0MCw3IEBACiAKIAljb25uLT5zdGF0ZSA9IEJUX0NMT1NFRDsKIAotCWlmIChjb25uLT50eXBlID09IEFDTF9MSU5LKQorCWlmIChjb25uLT50eXBlID09IEFDTF9MSU5LIHx8IGNvbm4tPnR5cGUgPT0gTEVfTElOSykKIAkJbWdtdF9kaXNjb25uZWN0ZWQoaGRldi0+aWQsICZjb25uLT5kc3QpOwogCiAJaGNpX3Byb3RvX2Rpc2Nvbm5fY2ZtKGNvbm4sIGV2LT5yZWFzb24pOwpAQCAtMTQyOCw3ICsxNDY2LDYgQEAKIAkJCWNvbm4tPnNlY19sZXZlbCA9IGNvbm4tPnBlbmRpbmdfc2VjX2xldmVsOwogCQl9IGVsc2UgewogCQkJbWdtdF9hdXRoX2ZhaWxlZChoZGV2LT5pZCwgJmNvbm4tPmRzdCwgZXYtPnN0YXR1cyk7Ci0JCQljb25uLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9MT1c7CiAJCX0KIAogCQljbGVhcl9iaXQoSENJX0NPTk5fQVVUSF9QRU5ELCAmY29ubi0+cGVuZCk7CkBAIC0xNDgyLDEzICsxNTE5LDIzIEBACiAKIAloY2lfZGV2X2xvY2soaGRldik7CiAKKwlpZiAoZXYtPnN0YXR1cyA9PSAwICYmIHRlc3RfYml0KEhDSV9NR01ULCAmaGRldi0+ZmxhZ3MpKQorCQltZ210X3JlbW90ZV9uYW1lKGhkZXYtPmlkLCAmZXYtPmJkYWRkciwgZXYtPm5hbWUpOworCiAJY29ubiA9IGhjaV9jb25uX2hhc2hfbG9va3VwX2JhKGhkZXYsIEFDTF9MSU5LLCAmZXYtPmJkYWRkcik7Ci0JaWYgKGNvbm4gJiYgaGNpX291dGdvaW5nX2F1dGhfbmVlZGVkKGhkZXYsIGNvbm4pKSB7CisJaWYgKCFjb25uKQorCQlnb3RvIHVubG9jazsKKworCWlmICghaGNpX291dGdvaW5nX2F1dGhfbmVlZGVkKGhkZXYsIGNvbm4pKQorCQlnb3RvIHVubG9jazsKKworCWlmICghdGVzdF9hbmRfc2V0X2JpdChIQ0lfQ09OTl9BVVRIX1BFTkQsICZjb25uLT5wZW5kKSkgewogCQlzdHJ1Y3QgaGNpX2NwX2F1dGhfcmVxdWVzdGVkIGNwOwogCQljcC5oYW5kbGUgPSBfX2NwdV90b19sZTE2KGNvbm4tPmhhbmRsZSk7CiAJCWhjaV9zZW5kX2NtZChoZGV2LCBIQ0lfT1BfQVVUSF9SRVFVRVNURUQsIHNpemVvZihjcCksICZjcCk7CiAJfQogCit1bmxvY2s6CiAJaGNpX2Rldl91bmxvY2soaGRldik7CiB9CiAKQEAgLTE3NTEsNiArMTc5OCwxMCBAQAogCQloY2lfY2NfcGluX2NvZGVfbmVnX3JlcGx5KGhkZXYsIHNrYik7CiAJCWJyZWFrOwogCisJY2FzZSBIQ0lfT1BfUkVBRF9MT0NBTF9PT0JfREFUQToKKwkJaGNpX2NjX3JlYWRfbG9jYWxfb29iX2RhdGFfcmVwbHkoaGRldiwgc2tiKTsKKwkJYnJlYWs7CisKIAljYXNlIEhDSV9PUF9MRV9SRUFEX0JVRkZFUl9TSVpFOgogCQloY2lfY2NfbGVfcmVhZF9idWZmZXJfc2l6ZShoZGV2LCBza2IpOwogCQlicmVhazsKQEAgLTE5ODQsOSArMjAzNSwxNiBAQAogCWlmICghdGVzdF9iaXQoSENJX1BBSVJBQkxFLCAmaGRldi0+ZmxhZ3MpKQogCQloY2lfc2VuZF9jbWQoaGRldiwgSENJX09QX1BJTl9DT0RFX05FR19SRVBMWSwKIAkJCQkJc2l6ZW9mKGV2LT5iZGFkZHIpLCAmZXYtPmJkYWRkcik7CisJZWxzZSBpZiAodGVzdF9iaXQoSENJX01HTVQsICZoZGV2LT5mbGFncykpIHsKKwkJdTggc2VjdXJlOwogCi0JaWYgKHRlc3RfYml0KEhDSV9NR01ULCAmaGRldi0+ZmxhZ3MpKQotCQltZ210X3Bpbl9jb2RlX3JlcXVlc3QoaGRldi0+aWQsICZldi0+YmRhZGRyKTsKKwkJaWYgKGNvbm4tPnBlbmRpbmdfc2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX0hJR0gpCisJCQlzZWN1cmUgPSAxOworCQllbHNlCisJCQlzZWN1cmUgPSAwOworCisJCW1nbXRfcGluX2NvZGVfcmVxdWVzdChoZGV2LT5pZCwgJmV2LT5iZGFkZHIsIHNlY3VyZSk7CisJfQogCiAJaGNpX2Rldl91bmxvY2soaGRldik7CiB9CkBAIC0yMDE1LDE3ICsyMDczLDMwIEBACiAJQlRfREJHKCIlcyBmb3VuZCBrZXkgdHlwZSAldSBmb3IgJXMiLCBoZGV2LT5uYW1lLCBrZXktPnR5cGUsCiAJCQkJCQkJYmF0b3N0cigmZXYtPmJkYWRkcikpOwogCi0JaWYgKCF0ZXN0X2JpdChIQ0lfREVCVUdfS0VZUywgJmhkZXYtPmZsYWdzKSAmJiBrZXktPnR5cGUgPT0gMHgwMykgeworCWlmICghdGVzdF9iaXQoSENJX0RFQlVHX0tFWVMsICZoZGV2LT5mbGFncykgJiYKKwkJCQlrZXktPnR5cGUgPT0gSENJX0xLX0RFQlVHX0NPTUJJTkFUSU9OKSB7CiAJCUJUX0RCRygiJXMgaWdub3JpbmcgZGVidWcga2V5IiwgaGRldi0+bmFtZSk7CiAJCWdvdG8gbm90X2ZvdW5kOwogCX0KIAogCWNvbm4gPSBoY2lfY29ubl9oYXNoX2xvb2t1cF9iYShoZGV2LCBBQ0xfTElOSywgJmV2LT5iZGFkZHIpOworCWlmIChjb25uKSB7CisJCWlmIChrZXktPnR5cGUgPT0gSENJX0xLX1VOQVVUSF9DT01CSU5BVElPTiAmJgorCQkJCWNvbm4tPmF1dGhfdHlwZSAhPSAweGZmICYmCisJCQkJKGNvbm4tPmF1dGhfdHlwZSAmIDB4MDEpKSB7CisJCQlCVF9EQkcoIiVzIGlnbm9yaW5nIHVuYXV0aGVudGljYXRlZCBrZXkiLCBoZGV2LT5uYW1lKTsKKwkJCWdvdG8gbm90X2ZvdW5kOworCQl9CiAKLQlpZiAoa2V5LT50eXBlID09IDB4MDQgJiYgY29ubiAmJiBjb25uLT5hdXRoX3R5cGUgIT0gMHhmZiAmJgotCQkJCQkJKGNvbm4tPmF1dGhfdHlwZSAmIDB4MDEpKSB7Ci0JCUJUX0RCRygiJXMgaWdub3JpbmcgdW5hdXRoZW50aWNhdGVkIGtleSIsIGhkZXYtPm5hbWUpOwotCQlnb3RvIG5vdF9mb3VuZDsKKwkJaWYgKGtleS0+dHlwZSA9PSBIQ0lfTEtfQ09NQklOQVRJT04gJiYga2V5LT5waW5fbGVuIDwgMTYgJiYKKwkJCQljb25uLT5wZW5kaW5nX3NlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9ISUdIKSB7CisJCQlCVF9EQkcoIiVzIGlnbm9yaW5nIGtleSB1bmF1dGhlbnRpY2F0ZWQgZm9yIGhpZ2ggXAorCQkJCQkJCXNlY3VyaXR5IiwgaGRldi0+bmFtZSk7CisJCQlnb3RvIG5vdF9mb3VuZDsKKwkJfQorCisJCWNvbm4tPmtleV90eXBlID0ga2V5LT50eXBlOworCQljb25uLT5waW5fbGVuZ3RoID0ga2V5LT5waW5fbGVuOwogCX0KIAogCWJhY3B5KCZjcC5iZGFkZHIsICZldi0+YmRhZGRyKTsKQEAgLTIwNTcsMTEgKzIxMjgsMTUgQEAKIAkJaGNpX2Nvbm5faG9sZChjb25uKTsKIAkJY29ubi0+ZGlzY190aW1lb3V0ID0gSENJX0RJU0NPTk5fVElNRU9VVDsKIAkJcGluX2xlbiA9IGNvbm4tPnBpbl9sZW5ndGg7CisKKwkJaWYgKGV2LT5rZXlfdHlwZSAhPSBIQ0lfTEtfQ0hBTkdFRF9DT01CSU5BVElPTikKKwkJCWNvbm4tPmtleV90eXBlID0gZXYtPmtleV90eXBlOworCiAJCWhjaV9jb25uX3B1dChjb25uKTsKIAl9CiAKIAlpZiAodGVzdF9iaXQoSENJX0xJTktfS0VZUywgJmhkZXYtPmZsYWdzKSkKLQkJaGNpX2FkZF9saW5rX2tleShoZGV2LCAxLCAmZXYtPmJkYWRkciwgZXYtPmxpbmtfa2V5LAorCQloY2lfYWRkX2xpbmtfa2V5KGhkZXYsIGNvbm4sIDEsICZldi0+YmRhZGRyLCBldi0+bGlua19rZXksCiAJCQkJCQkJZXYtPmtleV90eXBlLCBwaW5fbGVuKTsKIAogCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwpAQCAtMjEzNiwxMSArMjIxMSwxNyBAQAogCiAJaGNpX2Rldl9sb2NrKGhkZXYpOwogCisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEhDSV9JTlFVSVJZLCAmaGRldi0+ZmxhZ3MpKSB7CisKKwkJaWYgKHRlc3RfYml0KEhDSV9NR01ULCAmaGRldi0+ZmxhZ3MpKQorCQkJbWdtdF9kaXNjb3ZlcmluZyhoZGV2LT5pZCwgMSk7CisJfQorCiAJaWYgKChza2ItPmxlbiAtIDEpIC8gbnVtX3JzcCAhPSBzaXplb2Yoc3RydWN0IGlucXVpcnlfaW5mb193aXRoX3Jzc2kpKSB7CiAJCXN0cnVjdCBpbnF1aXJ5X2luZm9fd2l0aF9yc3NpX2FuZF9wc2Nhbl9tb2RlICppbmZvOwogCQlpbmZvID0gKHZvaWQgKikgKHNrYi0+ZGF0YSArIDEpOwogCi0JCWZvciAoOyBudW1fcnNwOyBudW1fcnNwLS0pIHsKKwkJZm9yICg7IG51bV9yc3A7IG51bV9yc3AtLSwgaW5mbysrKSB7CiAJCQliYWNweSgmZGF0YS5iZGFkZHIsICZpbmZvLT5iZGFkZHIpOwogCQkJZGF0YS5wc2Nhbl9yZXBfbW9kZQk9IGluZm8tPnBzY2FuX3JlcF9tb2RlOwogCQkJZGF0YS5wc2Nhbl9wZXJpb2RfbW9kZQk9IGluZm8tPnBzY2FuX3BlcmlvZF9tb2RlOwpAQCAtMjE0OSwxMyArMjIzMCwxNSBAQAogCQkJZGF0YS5jbG9ja19vZmZzZXQJPSBpbmZvLT5jbG9ja19vZmZzZXQ7CiAJCQlkYXRhLnJzc2kJCT0gaW5mby0+cnNzaTsKIAkJCWRhdGEuc3NwX21vZGUJCT0gMHgwMDsKLQkJCWluZm8rKzsKIAkJCWhjaV9pbnF1aXJ5X2NhY2hlX3VwZGF0ZShoZGV2LCAmZGF0YSk7CisJCQltZ210X2RldmljZV9mb3VuZChoZGV2LT5pZCwgJmluZm8tPmJkYWRkciwKKwkJCQkJCWluZm8tPmRldl9jbGFzcywgaW5mby0+cnNzaSwKKwkJCQkJCU5VTEwpOwogCQl9CiAJfSBlbHNlIHsKIAkJc3RydWN0IGlucXVpcnlfaW5mb193aXRoX3Jzc2kgKmluZm8gPSAodm9pZCAqKSAoc2tiLT5kYXRhICsgMSk7CiAKLQkJZm9yICg7IG51bV9yc3A7IG51bV9yc3AtLSkgeworCQlmb3IgKDsgbnVtX3JzcDsgbnVtX3JzcC0tLCBpbmZvKyspIHsKIAkJCWJhY3B5KCZkYXRhLmJkYWRkciwgJmluZm8tPmJkYWRkcik7CiAJCQlkYXRhLnBzY2FuX3JlcF9tb2RlCT0gaW5mby0+cHNjYW5fcmVwX21vZGU7CiAJCQlkYXRhLnBzY2FuX3BlcmlvZF9tb2RlCT0gaW5mby0+cHNjYW5fcGVyaW9kX21vZGU7CkBAIC0yMTY0LDggKzIyNDcsMTAgQEAKIAkJCWRhdGEuY2xvY2tfb2Zmc2V0CT0gaW5mby0+Y2xvY2tfb2Zmc2V0OwogCQkJZGF0YS5yc3NpCQk9IGluZm8tPnJzc2k7CiAJCQlkYXRhLnNzcF9tb2RlCQk9IDB4MDA7Ci0JCQlpbmZvKys7CiAJCQloY2lfaW5xdWlyeV9jYWNoZV91cGRhdGUoaGRldiwgJmRhdGEpOworCQkJbWdtdF9kZXZpY2VfZm91bmQoaGRldi0+aWQsICZpbmZvLT5iZGFkZHIsCisJCQkJCQlpbmZvLT5kZXZfY2xhc3MsIGluZm8tPnJzc2ksCisJCQkJCQlOVUxMKTsKIAkJfQogCX0KIApAQCAtMjI5NCw5ICsyMzc5LDE1IEBACiAJaWYgKCFudW1fcnNwKQogCQlyZXR1cm47CiAKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSENJX0lOUVVJUlksICZoZGV2LT5mbGFncykpIHsKKworCQlpZiAodGVzdF9iaXQoSENJX01HTVQsICZoZGV2LT5mbGFncykpCisJCQltZ210X2Rpc2NvdmVyaW5nKGhkZXYtPmlkLCAxKTsKKwl9CisKIAloY2lfZGV2X2xvY2soaGRldik7CiAKLQlmb3IgKDsgbnVtX3JzcDsgbnVtX3JzcC0tKSB7CisJZm9yICg7IG51bV9yc3A7IG51bV9yc3AtLSwgaW5mbysrKSB7CiAJCWJhY3B5KCZkYXRhLmJkYWRkciwgJmluZm8tPmJkYWRkcik7CiAJCWRhdGEucHNjYW5fcmVwX21vZGUJPSBpbmZvLT5wc2Nhbl9yZXBfbW9kZTsKIAkJZGF0YS5wc2Nhbl9wZXJpb2RfbW9kZQk9IGluZm8tPnBzY2FuX3BlcmlvZF9tb2RlOwpAQCAtMjMwNSw4ICsyMzk2LDkgQEAKIAkJZGF0YS5jbG9ja19vZmZzZXQJPSBpbmZvLT5jbG9ja19vZmZzZXQ7CiAJCWRhdGEucnNzaQkJPSBpbmZvLT5yc3NpOwogCQlkYXRhLnNzcF9tb2RlCQk9IDB4MDE7Ci0JCWluZm8rKzsKIAkJaGNpX2lucXVpcnlfY2FjaGVfdXBkYXRlKGhkZXYsICZkYXRhKTsKKwkJbWdtdF9kZXZpY2VfZm91bmQoaGRldi0+aWQsICZpbmZvLT5iZGFkZHIsIGluZm8tPmRldl9jbGFzcywKKwkJCQkJCWluZm8tPnJzc2ksIGluZm8tPmRhdGEpOwogCX0KIAogCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwpAQCAtMjMyNiw3ICsyNDE4LDcgQEAKIAogCS8qIElmIHJlbW90ZSByZXF1ZXN0cyBuby1ib25kaW5nIGZvbGxvdyB0aGF0IGxlYWQgKi8KIAlpZiAoY29ubi0+cmVtb3RlX2F1dGggPT0gMHgwMCB8fCBjb25uLT5yZW1vdGVfYXV0aCA9PSAweDAxKQotCQlyZXR1cm4gMHgwMDsKKwkJcmV0dXJuIGNvbm4tPnJlbW90ZV9hdXRoIHwgKGNvbm4tPmF1dGhfdHlwZSAmIDB4MDEpOwogCiAJcmV0dXJuIGNvbm4tPmF1dGhfdHlwZTsKIH0KQEAgLTIzNTUsOCArMjQ0NywxNCBAQAogCiAJCWJhY3B5KCZjcC5iZGFkZHIsICZldi0+YmRhZGRyKTsKIAkJY3AuY2FwYWJpbGl0eSA9IGNvbm4tPmlvX2NhcGFiaWxpdHk7Ci0JCWNwLm9vYl9kYXRhID0gMDsKLQkJY3AuYXV0aGVudGljYXRpb24gPSBoY2lfZ2V0X2F1dGhfcmVxKGNvbm4pOworCQljb25uLT5hdXRoX3R5cGUgPSBoY2lfZ2V0X2F1dGhfcmVxKGNvbm4pOworCQljcC5hdXRoZW50aWNhdGlvbiA9IGNvbm4tPmF1dGhfdHlwZTsKKworCQlpZiAoKGNvbm4tPm91dCA9PSAweDAxIHx8IGNvbm4tPnJlbW90ZV9vb2IgPT0gMHgwMSkgJiYKKwkJCQloY2lfZmluZF9yZW1vdGVfb29iX2RhdGEoaGRldiwgJmNvbm4tPmRzdCkpCisJCQljcC5vb2JfZGF0YSA9IDB4MDE7CisJCWVsc2UKKwkJCWNwLm9vYl9kYXRhID0gMHgwMDsKIAogCQloY2lfc2VuZF9jbWQoaGRldiwgSENJX09QX0lPX0NBUEFCSUxJVFlfUkVQTFksCiAJCQkJCQkJc2l6ZW9mKGNwKSwgJmNwKTsKQEAgLTIzNjQsNyArMjQ2Miw3IEBACiAJCXN0cnVjdCBoY2lfY3BfaW9fY2FwYWJpbGl0eV9uZWdfcmVwbHkgY3A7CiAKIAkJYmFjcHkoJmNwLmJkYWRkciwgJmV2LT5iZGFkZHIpOwotCQljcC5yZWFzb24gPSAweDE2OyAvKiBQYWlyaW5nIG5vdCBhbGxvd2VkICovCisJCWNwLnJlYXNvbiA9IDB4MTg7IC8qIFBhaXJpbmcgbm90IGFsbG93ZWQgKi8KIAogCQloY2lfc2VuZF9jbWQoaGRldiwgSENJX09QX0lPX0NBUEFCSUxJVFlfTkVHX1JFUExZLAogCQkJCQkJCXNpemVvZihjcCksICZjcCk7CkBAIC0yMzg3LDggKzI0ODUsNiBAQAogCWlmICghY29ubikKIAkJZ290byB1bmxvY2s7CiAKLQloY2lfY29ubl9ob2xkKGNvbm4pOwotCiAJY29ubi0+cmVtb3RlX2NhcCA9IGV2LT5jYXBhYmlsaXR5OwogCWNvbm4tPnJlbW90ZV9vb2IgPSBldi0+b29iX2RhdGE7CiAJY29ubi0+cmVtb3RlX2F1dGggPSBldi0+YXV0aGVudGljYXRpb247CkBAIC0yNDAxLDE0ICsyNDk3LDY3IEBACiAJCQkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaGNpX2V2X3VzZXJfY29uZmlybV9yZXEgKmV2ID0gKHZvaWQgKikgc2tiLT5kYXRhOworCWludCBsb2NfbWl0bSwgcmVtX21pdG0sIGNvbmZpcm1faGludCA9IDA7CisJc3RydWN0IGhjaV9jb25uICpjb25uOwogCiAJQlRfREJHKCIlcyIsIGhkZXYtPm5hbWUpOwogCiAJaGNpX2Rldl9sb2NrKGhkZXYpOwogCi0JaWYgKHRlc3RfYml0KEhDSV9NR01ULCAmaGRldi0+ZmxhZ3MpKQotCQltZ210X3VzZXJfY29uZmlybV9yZXF1ZXN0KGhkZXYtPmlkLCAmZXYtPmJkYWRkciwgZXYtPnBhc3NrZXkpOworCWlmICghdGVzdF9iaXQoSENJX01HTVQsICZoZGV2LT5mbGFncykpCisJCWdvdG8gdW5sb2NrOwogCisJY29ubiA9IGhjaV9jb25uX2hhc2hfbG9va3VwX2JhKGhkZXYsIEFDTF9MSU5LLCAmZXYtPmJkYWRkcik7CisJaWYgKCFjb25uKQorCQlnb3RvIHVubG9jazsKKworCWxvY19taXRtID0gKGNvbm4tPmF1dGhfdHlwZSAmIDB4MDEpOworCXJlbV9taXRtID0gKGNvbm4tPnJlbW90ZV9hdXRoICYgMHgwMSk7CisKKwkvKiBJZiB3ZSByZXF1aXJlIE1JVE0gYnV0IHRoZSByZW1vdGUgZGV2aWNlIGNhbid0IHByb3ZpZGUgdGhhdAorCSAqIChpdCBoYXMgTm9JbnB1dE5vT3V0cHV0KSB0aGVuIHJlamVjdCB0aGUgY29uZmlybWF0aW9uCisJICogcmVxdWVzdC4gVGhlIG9ubHkgZXhjZXB0aW9uIGlzIHdoZW4gd2UncmUgZGVkaWNhdGVkIGJvbmRpbmcKKwkgKiBpbml0aWF0b3JzIChjb25uZWN0X2NmbV9jYiBzZXQpIHNpbmNlIHRoZW4gd2UgYWx3YXlzIGhhdmUgdGhlIE1JVE0KKwkgKiBiaXQgc2V0LiAqLworCWlmICghY29ubi0+Y29ubmVjdF9jZm1fY2IgJiYgbG9jX21pdG0gJiYgY29ubi0+cmVtb3RlX2NhcCA9PSAweDAzKSB7CisJCUJUX0RCRygiUmVqZWN0aW5nIHJlcXVlc3Q6IHJlbW90ZSBkZXZpY2UgY2FuJ3QgcHJvdmlkZSBNSVRNIik7CisJCWhjaV9zZW5kX2NtZChoZGV2LCBIQ0lfT1BfVVNFUl9DT05GSVJNX05FR19SRVBMWSwKKwkJCQkJc2l6ZW9mKGV2LT5iZGFkZHIpLCAmZXYtPmJkYWRkcik7CisJCWdvdG8gdW5sb2NrOworCX0KKworCS8qIElmIG5vIHNpZGUgcmVxdWlyZXMgTUlUTSBwcm90ZWN0aW9uOyBhdXRvLWFjY2VwdCAqLworCWlmICgoIWxvY19taXRtIHx8IGNvbm4tPnJlbW90ZV9jYXAgPT0gMHgwMykgJiYKKwkJCQkoIXJlbV9taXRtIHx8IGNvbm4tPmlvX2NhcGFiaWxpdHkgPT0gMHgwMykpIHsKKworCQkvKiBJZiB3ZSdyZSBub3QgdGhlIGluaXRpYXRvcnMgcmVxdWVzdCBhdXRob3JpemF0aW9uIHRvCisJCSAqIHByb2NlZWQgZnJvbSB1c2VyIHNwYWNlIChtZ210X3VzZXJfY29uZmlybSB3aXRoCisJCSAqIGNvbmZpcm1faGludCBzZXQgdG8gMSkuICovCisJCWlmICghdGVzdF9iaXQoSENJX0NPTk5fQVVUSF9QRU5ELCAmY29ubi0+cGVuZCkpIHsKKwkJCUJUX0RCRygiQ29uZmlybWluZyBhdXRvLWFjY2VwdCBhcyBhY2NlcHRvciIpOworCQkJY29uZmlybV9oaW50ID0gMTsKKwkJCWdvdG8gY29uZmlybTsKKwkJfQorCisJCUJUX0RCRygiQXV0by1hY2NlcHQgb2YgdXNlciBjb25maXJtYXRpb24gd2l0aCAldW1zIGRlbGF5IiwKKwkJCQkJCWhkZXYtPmF1dG9fYWNjZXB0X2RlbGF5KTsKKworCQlpZiAoaGRldi0+YXV0b19hY2NlcHRfZGVsYXkgPiAwKSB7CisJCQlpbnQgZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKGhkZXYtPmF1dG9fYWNjZXB0X2RlbGF5KTsKKwkJCW1vZF90aW1lcigmY29ubi0+YXV0b19hY2NlcHRfdGltZXIsIGppZmZpZXMgKyBkZWxheSk7CisJCQlnb3RvIHVubG9jazsKKwkJfQorCisJCWhjaV9zZW5kX2NtZChoZGV2LCBIQ0lfT1BfVVNFUl9DT05GSVJNX1JFUExZLAorCQkJCQkJc2l6ZW9mKGV2LT5iZGFkZHIpLCAmZXYtPmJkYWRkcik7CisJCWdvdG8gdW5sb2NrOworCX0KKworY29uZmlybToKKwltZ210X3VzZXJfY29uZmlybV9yZXF1ZXN0KGhkZXYtPmlkLCAmZXYtPmJkYWRkciwgZXYtPnBhc3NrZXksCisJCQkJCQkJCWNvbmZpcm1faGludCk7CisKK3VubG9jazoKIAloY2lfZGV2X3VubG9jayhoZGV2KTsKIH0KIApAQCAtMjQ1NSw2ICsyNjA0LDQxIEBACiAJaGNpX2Rldl91bmxvY2soaGRldik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBoY2lfcmVtb3RlX29vYl9kYXRhX3JlcXVlc3RfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LAorCQkJCQkJCXN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGhjaV9ldl9yZW1vdGVfb29iX2RhdGFfcmVxdWVzdCAqZXYgPSAodm9pZCAqKSBza2ItPmRhdGE7CisJc3RydWN0IG9vYl9kYXRhICpkYXRhOworCisJQlRfREJHKCIlcyIsIGhkZXYtPm5hbWUpOworCisJaGNpX2Rldl9sb2NrKGhkZXYpOworCisJaWYgKCF0ZXN0X2JpdChIQ0lfTUdNVCwgJmhkZXYtPmZsYWdzKSkKKwkJZ290byB1bmxvY2s7CisKKwlkYXRhID0gaGNpX2ZpbmRfcmVtb3RlX29vYl9kYXRhKGhkZXYsICZldi0+YmRhZGRyKTsKKwlpZiAoZGF0YSkgeworCQlzdHJ1Y3QgaGNpX2NwX3JlbW90ZV9vb2JfZGF0YV9yZXBseSBjcDsKKworCQliYWNweSgmY3AuYmRhZGRyLCAmZXYtPmJkYWRkcik7CisJCW1lbWNweShjcC5oYXNoLCBkYXRhLT5oYXNoLCBzaXplb2YoY3AuaGFzaCkpOworCQltZW1jcHkoY3AucmFuZG9taXplciwgZGF0YS0+cmFuZG9taXplciwgc2l6ZW9mKGNwLnJhbmRvbWl6ZXIpKTsKKworCQloY2lfc2VuZF9jbWQoaGRldiwgSENJX09QX1JFTU9URV9PT0JfREFUQV9SRVBMWSwgc2l6ZW9mKGNwKSwKKwkJCQkJCQkJCSZjcCk7CisJfSBlbHNlIHsKKwkJc3RydWN0IGhjaV9jcF9yZW1vdGVfb29iX2RhdGFfbmVnX3JlcGx5IGNwOworCisJCWJhY3B5KCZjcC5iZGFkZHIsICZldi0+YmRhZGRyKTsKKwkJaGNpX3NlbmRfY21kKGhkZXYsIEhDSV9PUF9SRU1PVEVfT09CX0RBVEFfTkVHX1JFUExZLCBzaXplb2YoY3ApLAorCQkJCQkJCQkJJmNwKTsKKwl9CisKK3VubG9jazoKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGhjaV9sZV9jb25uX2NvbXBsZXRlX2V2dChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaGNpX2V2X2xlX2Nvbm5fY29tcGxldGUgKmV2ID0gKHZvaWQgKikgc2tiLT5kYXRhOwpAQCAtMjQ3NSwxMiArMjY1OSwxNSBAQAogCX0KIAogCWlmIChldi0+c3RhdHVzKSB7CisJCW1nbXRfY29ubmVjdF9mYWlsZWQoaGRldi0+aWQsICZldi0+YmRhZGRyLCBldi0+c3RhdHVzKTsKIAkJaGNpX3Byb3RvX2Nvbm5lY3RfY2ZtKGNvbm4sIGV2LT5zdGF0dXMpOwogCQljb25uLT5zdGF0ZSA9IEJUX0NMT1NFRDsKIAkJaGNpX2Nvbm5fZGVsKGNvbm4pOwogCQlnb3RvIHVubG9jazsKIAl9CiAKKwltZ210X2Nvbm5lY3RlZChoZGV2LT5pZCwgJmV2LT5iZGFkZHIpOworCiAJY29ubi0+aGFuZGxlID0gX19sZTE2X3RvX2NwdShldi0+aGFuZGxlKTsKIAljb25uLT5zdGF0ZSA9IEJUX0NPTk5FQ1RFRDsKIApAQCAtMjY1Nyw2ICsyODQ0LDEwIEBACiAJCWhjaV9sZV9tZXRhX2V2dChoZGV2LCBza2IpOwogCQlicmVhazsKIAorCWNhc2UgSENJX0VWX1JFTU9URV9PT0JfREFUQV9SRVFVRVNUOgorCQloY2lfcmVtb3RlX29vYl9kYXRhX3JlcXVlc3RfZXZ0KGhkZXYsIHNrYik7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJQlRfREJHKCIlcyBldmVudCAweCV4IiwgaGRldi0+bmFtZSwgZXZlbnQpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jCmluZGV4IDNjODM4YTYuLmE2YzNhYTggMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYwpAQCAtMjE2LDEzICsyMTYsMTMgQEAKIHN0YXRpYyBzc2l6ZV90IHNob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQljaGFyIG5hbWVbMjQ5XTsKKwljaGFyIG5hbWVbSENJX01BWF9OQU1FX0xFTkdUSCArIDFdOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IDI0ODsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBIQ0lfTUFYX05BTUVfTEVOR1RIOyBpKyspCiAJCW5hbWVbaV0gPSBoZGV2LT5kZXZfbmFtZVtpXTsKIAotCW5hbWVbMjQ4XSA9ICdcMCc7CisJbmFtZVtIQ0lfTUFYX05BTUVfTEVOR1RIXSA9ICdcMCc7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIG5hbWUpOwogfQogCkBAIC0yNzcsMTAgKzI3NywxMiBAQAogc3RhdGljIHNzaXplX3Qgc3RvcmVfaWRsZV90aW1lb3V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JdW5zaWduZWQgbG9uZyB2YWw7CisJdW5zaWduZWQgaW50IHZhbDsKKwlpbnQgcnY7CiAKLQlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsKSA8IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJ2ID0ga3N0cnRvdWludChidWYsIDAsICZ2YWwpOworCWlmIChydiA8IDApCisJCXJldHVybiBydjsKIAogCWlmICh2YWwgIT0gMCAmJiAodmFsIDwgNTAwIHx8IHZhbCA+IDM2MDAwMDApKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI5OSwxNSArMzAxLDE0IEBACiBzdGF0aWMgc3NpemVfdCBzdG9yZV9zbmlmZl9tYXhfaW50ZXJ2YWwoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQl1bnNpZ25lZCBsb25nIHZhbDsKKwl1MTYgdmFsOworCWludCBydjsKIAotCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDAsICZ2YWwpIDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcnYgPSBrc3RydG91MTYoYnVmLCAwLCAmdmFsKTsKKwlpZiAocnYgPCAwKQorCQlyZXR1cm4gcnY7CiAKLQlpZiAodmFsIDwgMHgwMDAyIHx8IHZhbCA+IDB4RkZGRSB8fCB2YWwgJSAyKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICh2YWwgPCBoZGV2LT5zbmlmZl9taW5faW50ZXJ2YWwpCisJaWYgKHZhbCA9PSAwIHx8IHZhbCAlIDIgfHwgdmFsIDwgaGRldi0+c25pZmZfbWluX2ludGVydmFsKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWhkZXYtPnNuaWZmX21heF9pbnRlcnZhbCA9IHZhbDsKQEAgLTMyNCwxNSArMzI1LDE0IEBACiBzdGF0aWMgc3NpemVfdCBzdG9yZV9zbmlmZl9taW5faW50ZXJ2YWwoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQl1bnNpZ25lZCBsb25nIHZhbDsKKwl1MTYgdmFsOworCWludCBydjsKIAotCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDAsICZ2YWwpIDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcnYgPSBrc3RydG91MTYoYnVmLCAwLCAmdmFsKTsKKwlpZiAocnYgPCAwKQorCQlyZXR1cm4gcnY7CiAKLQlpZiAodmFsIDwgMHgwMDAyIHx8IHZhbCA+IDB4RkZGRSB8fCB2YWwgJSAyKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICh2YWwgPiBoZGV2LT5zbmlmZl9tYXhfaW50ZXJ2YWwpCisJaWYgKHZhbCA9PSAwIHx8IHZhbCAlIDIgfHwgdmFsID4gaGRldi0+c25pZmZfbWF4X2ludGVydmFsKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWhkZXYtPnNuaWZmX21pbl9pbnRlcnZhbCA9IHZhbDsKQEAgLTUxMSw2ICs1MTEsMzUgQEAKIAkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAogfTsKIAorc3RhdGljIGludCBhdXRvX2FjY2VwdF9kZWxheV9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGE7CisKKwloY2lfZGV2X2xvY2tfYmgoaGRldik7CisKKwloZGV2LT5hdXRvX2FjY2VwdF9kZWxheSA9IHZhbDsKKworCWhjaV9kZXZfdW5sb2NrX2JoKGhkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXV0b19hY2NlcHRfZGVsYXlfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGF0YTsKKworCWhjaV9kZXZfbG9ja19iaChoZGV2KTsKKworCSp2YWwgPSBoZGV2LT5hdXRvX2FjY2VwdF9kZWxheTsKKworCWhjaV9kZXZfdW5sb2NrX2JoKGhkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKGF1dG9fYWNjZXB0X2RlbGF5X2ZvcHMsIGF1dG9fYWNjZXB0X2RlbGF5X2dldCwKKwkJCQkJYXV0b19hY2NlcHRfZGVsYXlfc2V0LCAiJWxsdVxuIik7CisKIGludCBoY2lfcmVnaXN0ZXJfc3lzZnMoc3RydWN0IGhjaV9kZXYgKmhkZXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmhkZXYtPmRldjsKQEAgLTU0NSw2ICs1NzQsOCBAQAogCiAJZGVidWdmc19jcmVhdGVfZmlsZSgidXVpZHMiLCAwNDQ0LCBoZGV2LT5kZWJ1Z2ZzLCBoZGV2LCAmdXVpZHNfZm9wcyk7CiAKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJhdXRvX2FjY2VwdF9kZWxheSIsIDA0NDQsIGhkZXYtPmRlYnVnZnMsIGhkZXYsCisJCQkJCQkmYXV0b19hY2NlcHRfZGVsYXlfZm9wcyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCmluZGV4IDVlYzEyOTcuLmM0MDVhOTUgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KIAogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CkBAIC01NSwyMiArNTYsMjQgQEAKIHN0YXRpYyBMSVNUX0hFQUQoaGlkcF9zZXNzaW9uX2xpc3QpOwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBoaWRwX2tleWNvZGVbMjU2XSA9IHsKLQkgIDAsICAwLCAgMCwgIDAsIDMwLCA0OCwgNDYsIDMyLCAxOCwgMzMsIDM0LCAzNSwgMjMsIDM2LCAzNywgMzgsCi0JIDUwLCA0OSwgMjQsIDI1LCAxNiwgMTksIDMxLCAyMCwgMjIsIDQ3LCAxNywgNDUsIDIxLCA0NCwgIDIsICAzLAotCSAgNCwgIDUsICA2LCAgNywgIDgsICA5LCAxMCwgMTEsIDI4LCAgMSwgMTQsIDE1LCA1NywgMTIsIDEzLCAyNiwKLQkgMjcsIDQzLCA0MywgMzksIDQwLCA0MSwgNTEsIDUyLCA1MywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2MywgNjQsCi0JIDY1LCA2NiwgNjcsIDY4LCA4NywgODgsIDk5LCA3MCwxMTksMTEwLDEwMiwxMDQsMTExLDEwNywxMDksMTA2LAotCTEwNSwxMDgsMTAzLCA2OSwgOTgsIDU1LCA3NCwgNzgsIDk2LCA3OSwgODAsIDgxLCA3NSwgNzYsIDc3LCA3MSwKLQkgNzIsIDczLCA4MiwgODMsIDg2LDEyNywxMTYsMTE3LDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsCi0JMTkxLDE5MiwxOTMsMTk0LDEzNCwxMzgsMTMwLDEzMiwxMjgsMTI5LDEzMSwxMzcsMTMzLDEzNSwxMzYsMTEzLAotCTExNSwxMTQsICAwLCAgMCwgIDAsMTIxLCAgMCwgODksIDkzLDEyNCwgOTIsIDk0LCA5NSwgIDAsICAwLCAgMCwKLQkxMjIsMTIzLCA5MCwgOTEsIDg1LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCi0JICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAotCSAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKLQkgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCi0JICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAotCSAyOSwgNDIsIDU2LDEyNSwgOTcsIDU0LDEwMCwxMjYsMTY0LDE2NiwxNjUsMTYzLDE2MSwxMTUsMTE0LDExMywKLQkxNTAsMTU4LDE1OSwxMjgsMTM2LDE3NywxNzgsMTc2LDE0MiwxNTIsMTczLDE0MAorCSAgMCwgICAwLCAgIDAsICAgMCwgIDMwLCAgNDgsICA0NiwgIDMyLCAgMTgsICAzMywgIDM0LCAgMzUsICAyMywgIDM2LAorCSAzNywgIDM4LCAgNTAsICA0OSwgIDI0LCAgMjUsICAxNiwgIDE5LCAgMzEsICAyMCwgIDIyLCAgNDcsICAxNywgIDQ1LAorCSAyMSwgIDQ0LCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAyOCwgICAxLAorCSAxNCwgIDE1LCAgNTcsICAxMiwgIDEzLCAgMjYsICAyNywgIDQzLCAgNDMsICAzOSwgIDQwLCAgNDEsICA1MSwgIDUyLAorCSA1MywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywgIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA4NywgIDg4LAorCSA5OSwgIDcwLCAxMTksIDExMCwgMTAyLCAxMDQsIDExMSwgMTA3LCAxMDksIDEwNiwgMTA1LCAxMDgsIDEwMywgIDY5LAorCSA5OCwgIDU1LCAgNzQsICA3OCwgIDk2LCAgNzksICA4MCwgIDgxLCAgNzUsICA3NiwgIDc3LCAgNzEsICA3MiwgIDczLAorCSA4MiwgIDgzLCAgODYsIDEyNywgMTE2LCAxMTcsIDE4MywgMTg0LCAxODUsIDE4NiwgMTg3LCAxODgsIDE4OSwgMTkwLAorCTE5MSwgMTkyLCAxOTMsIDE5NCwgMTM0LCAxMzgsIDEzMCwgMTMyLCAxMjgsIDEyOSwgMTMxLCAxMzcsIDEzMywgMTM1LAorCTEzNiwgMTEzLCAxMTUsIDExNCwgICAwLCAgIDAsICAgMCwgMTIxLCAgIDAsICA4OSwgIDkzLCAxMjQsICA5MiwgIDk0LAorCSA5NSwgICAwLCAgIDAsICAgMCwgMTIyLCAxMjMsICA5MCwgIDkxLCAgODUsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorCSAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorCSAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorCSAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorCSAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorCSAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorCSAyOSwgIDQyLCAgNTYsIDEyNSwgIDk3LCAgNTQsIDEwMCwgMTI2LCAxNjQsIDE2NiwgMTY1LCAxNjMsIDE2MSwgMTE1LAorCTExNCwgMTEzLCAxNTAsIDE1OCwgMTU5LCAxMjgsIDEzNiwgMTc3LCAxNzgsIDE3NiwgMTQyLCAxNTIsIDE3MywgMTQwCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBoaWRwX21rZXlzcGF0W10gPSB7IDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEgfTsKQEAgLTQ2MSw4ICs0NjQsNyBAQAogewogCXN0cnVjdCBoaWRwX3Nlc3Npb24gKnNlc3Npb24gPSAoc3RydWN0IGhpZHBfc2Vzc2lvbiAqKSBhcmc7CiAKLQlhdG9taWNfaW5jKCZzZXNzaW9uLT50ZXJtaW5hdGUpOwotCWhpZHBfc2NoZWR1bGUoc2Vzc2lvbik7CisJa3RocmVhZF9zdG9wKHNlc3Npb24tPnRhc2spOwogfQogCiBzdGF0aWMgdm9pZCBoaWRwX3NldF90aW1lcihzdHJ1Y3QgaGlkcF9zZXNzaW9uICpzZXNzaW9uKQpAQCAtNTMzLDkgKzUzNSw3IEBACiAJCXNrYl9xdWV1ZV9wdXJnZSgmc2Vzc2lvbi0+Y3RybF90cmFuc21pdCk7CiAJCXNrYl9xdWV1ZV9wdXJnZSgmc2Vzc2lvbi0+aW50cl90cmFuc21pdCk7CiAKLQkJLyogS2lsbCBzZXNzaW9uIHRocmVhZCAqLwotCQlhdG9taWNfaW5jKCZzZXNzaW9uLT50ZXJtaW5hdGUpOwotCQloaWRwX3NjaGVkdWxlKHNlc3Npb24pOworCQlrdGhyZWFkX3N0b3Aoc2Vzc2lvbi0+dGFzayk7CiAJfQogfQogCkBAIC02OTQsMjIgKzY5NCwxMCBAQAogCXN0cnVjdCBzb2NrICpjdHJsX3NrID0gc2Vzc2lvbi0+Y3RybF9zb2NrLT5zazsKIAlzdHJ1Y3Qgc29jayAqaW50cl9zayA9IHNlc3Npb24tPmludHJfc29jay0+c2s7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgdmVuZG9yID0gMHgwMDAwLCBwcm9kdWN0ID0gMHgwMDAwOwogCXdhaXRfcXVldWVfdCBjdHJsX3dhaXQsIGludHJfd2FpdDsKIAogCUJUX0RCRygic2Vzc2lvbiAlcCIsIHNlc3Npb24pOwogCi0JaWYgKHNlc3Npb24tPmlucHV0KSB7Ci0JCXZlbmRvciAgPSBzZXNzaW9uLT5pbnB1dC0+aWQudmVuZG9yOwotCQlwcm9kdWN0ID0gc2Vzc2lvbi0+aW5wdXQtPmlkLnByb2R1Y3Q7Ci0JfQotCi0JaWYgKHNlc3Npb24tPmhpZCkgewotCQl2ZW5kb3IgID0gc2Vzc2lvbi0+aGlkLT52ZW5kb3I7Ci0JCXByb2R1Y3QgPSBzZXNzaW9uLT5oaWQtPnByb2R1Y3Q7Ci0JfQotCi0JZGFlbW9uaXplKCJraGlkcGRfJTA0eCUwNHgiLCB2ZW5kb3IsIHByb2R1Y3QpOwogCXNldF91c2VyX25pY2UoY3VycmVudCwgLTE1KTsKIAogCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZjdHJsX3dhaXQsIGN1cnJlbnQpOwpAQCAtNzE4LDEwICs3MDYsMTEgQEAKIAlhZGRfd2FpdF9xdWV1ZShza19zbGVlcChpbnRyX3NrKSwgJmludHJfd2FpdCk7CiAJc2Vzc2lvbi0+d2FpdGluZ19mb3Jfc3RhcnR1cCA9IDA7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzZXNzaW9uLT5zdGFydHVwX3F1ZXVlKTsKLQl3aGlsZSAoIWF0b21pY19yZWFkKCZzZXNzaW9uLT50ZXJtaW5hdGUpKSB7CisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAotCQlpZiAoY3RybF9zay0+c2tfc3RhdGUgIT0gQlRfQ09OTkVDVEVEIHx8IGludHJfc2stPnNrX3N0YXRlICE9IEJUX0NPTk5FQ1RFRCkKKwkJaWYgKGN0cmxfc2stPnNrX3N0YXRlICE9IEJUX0NPTk5FQ1RFRCB8fAorCQkJCWludHJfc2stPnNrX3N0YXRlICE9IEJUX0NPTk5FQ1RFRCkKIAkJCWJyZWFrOwogCiAJCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmN0cmxfc2stPnNrX3JlY2VpdmVfcXVldWUpKSkgewpAQCAtOTY1LDYgKzk1NCw3IEBACiBpbnQgaGlkcF9hZGRfY29ubmVjdGlvbihzdHJ1Y3QgaGlkcF9jb25uYWRkX3JlcSAqcmVxLCBzdHJ1Y3Qgc29ja2V0ICpjdHJsX3NvY2ssIHN0cnVjdCBzb2NrZXQgKmludHJfc29jaykKIHsKIAlzdHJ1Y3QgaGlkcF9zZXNzaW9uICpzZXNzaW9uLCAqczsKKwlpbnQgdmVuZG9yLCBwcm9kdWN0OwogCWludCBlcnI7CiAKIAlCVF9EQkcoIiIpOwpAQCAtOTg5LDggKzk3OSwxMCBAQAogCiAJYmFjcHkoJnNlc3Npb24tPmJkYWRkciwgJmJ0X3NrKGN0cmxfc29jay0+c2spLT5kc3QpOwogCi0Jc2Vzc2lvbi0+Y3RybF9tdHUgPSBtaW5fdCh1aW50LCBsMmNhcF9waShjdHJsX3NvY2stPnNrKS0+b210dSwgbDJjYXBfcGkoY3RybF9zb2NrLT5zayktPmltdHUpOwotCXNlc3Npb24tPmludHJfbXR1ID0gbWluX3QodWludCwgbDJjYXBfcGkoaW50cl9zb2NrLT5zayktPm9tdHUsIGwyY2FwX3BpKGludHJfc29jay0+c2spLT5pbXR1KTsKKwlzZXNzaW9uLT5jdHJsX210dSA9IG1pbl90KHVpbnQsIGwyY2FwX3BpKGN0cmxfc29jay0+c2spLT5jaGFuLT5vbXR1LAorCQkJCQlsMmNhcF9waShjdHJsX3NvY2stPnNrKS0+Y2hhbi0+aW10dSk7CisJc2Vzc2lvbi0+aW50cl9tdHUgPSBtaW5fdCh1aW50LCBsMmNhcF9waShpbnRyX3NvY2stPnNrKS0+Y2hhbi0+b210dSwKKwkJCQkJbDJjYXBfcGkoaW50cl9zb2NrLT5zayktPmNoYW4tPmltdHUpOwogCiAJQlRfREJHKCJjdHJsIG10dSAlZCBpbnRyIG10dSAlZCIsIHNlc3Npb24tPmN0cmxfbXR1LCBzZXNzaW9uLT5pbnRyX210dSk7CiAKQEAgLTEwMjYsOSArMTAxOCwyNCBAQAogCiAJaGlkcF9zZXRfdGltZXIoc2Vzc2lvbik7CiAKLQllcnIgPSBrZXJuZWxfdGhyZWFkKGhpZHBfc2Vzc2lvbiwgc2Vzc2lvbiwgQ0xPTkVfS0VSTkVMKTsKLQlpZiAoZXJyIDwgMCkKKwlpZiAoc2Vzc2lvbi0+aGlkKSB7CisJCXZlbmRvciAgPSBzZXNzaW9uLT5oaWQtPnZlbmRvcjsKKwkJcHJvZHVjdCA9IHNlc3Npb24tPmhpZC0+cHJvZHVjdDsKKwl9IGVsc2UgaWYgKHNlc3Npb24tPmlucHV0KSB7CisJCXZlbmRvciAgPSBzZXNzaW9uLT5pbnB1dC0+aWQudmVuZG9yOworCQlwcm9kdWN0ID0gc2Vzc2lvbi0+aW5wdXQtPmlkLnByb2R1Y3Q7CisJfSBlbHNlIHsKKwkJdmVuZG9yID0gMHgwMDAwOworCQlwcm9kdWN0ID0gMHgwMDAwOworCX0KKworCXNlc3Npb24tPnRhc2sgPSBrdGhyZWFkX3J1bihoaWRwX3Nlc3Npb24sIHNlc3Npb24sICJraGlkcGRfJTA0eCUwNHgiLAorCQkJCQkJCXZlbmRvciwgcHJvZHVjdCk7CisJaWYgKElTX0VSUihzZXNzaW9uLT50YXNrKSkgeworCQllcnIgPSBQVFJfRVJSKHNlc3Npb24tPnRhc2spOwogCQlnb3RvIHVubGluazsKKwl9CisKIAl3aGlsZSAoc2Vzc2lvbi0+d2FpdGluZ19mb3Jfc3RhcnR1cCkgewogCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc2Vzc2lvbi0+c3RhcnR1cF9xdWV1ZSwKIAkJCSFzZXNzaW9uLT53YWl0aW5nX2Zvcl9zdGFydHVwKTsKQEAgLTEwNTMsOCArMTA2MCw3IEBACiBlcnJfYWRkX2RldmljZToKIAloaWRfZGVzdHJveV9kZXZpY2Uoc2Vzc2lvbi0+aGlkKTsKIAlzZXNzaW9uLT5oaWQgPSBOVUxMOwotCWF0b21pY19pbmMoJnNlc3Npb24tPnRlcm1pbmF0ZSk7Ci0JaGlkcF9zY2hlZHVsZShzZXNzaW9uKTsKKwlrdGhyZWFkX3N0b3Aoc2Vzc2lvbi0+dGFzayk7CiAKIHVubGluazoKIAloaWRwX2RlbF90aW1lcihzZXNzaW9uKTsKQEAgLTExMDUsMTMgKzExMTEsNyBAQAogCQkJc2tiX3F1ZXVlX3B1cmdlKCZzZXNzaW9uLT5jdHJsX3RyYW5zbWl0KTsKIAkJCXNrYl9xdWV1ZV9wdXJnZSgmc2Vzc2lvbi0+aW50cl90cmFuc21pdCk7CiAKLQkJCS8qIFdha2V1cCB1c2VyLXNwYWNlIHBvbGxpbmcgZm9yIHNvY2tldCBlcnJvcnMgKi8KLQkJCXNlc3Npb24tPmludHJfc29jay0+c2stPnNrX2VyciA9IEVVTkFUQ0g7Ci0JCQlzZXNzaW9uLT5jdHJsX3NvY2stPnNrLT5za19lcnIgPSBFVU5BVENIOwotCi0JCQkvKiBLaWxsIHNlc3Npb24gdGhyZWFkICovCi0JCQlhdG9taWNfaW5jKCZzZXNzaW9uLT50ZXJtaW5hdGUpOwotCQkJaGlkcF9zY2hlZHVsZShzZXNzaW9uKTsKKwkJCWt0aHJlYWRfc3RvcChzZXNzaW9uLT50YXNrKTsKIAkJfQogCX0gZWxzZQogCQllcnIgPSAtRU5PRU5UOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oaWRwL2hpZHAuaCBiL25ldC9ibHVldG9vdGgvaGlkcC9oaWRwLmgKaW5kZXggMTNkZTVmYS4uMTI4MjJjZCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oaWRwL2hpZHAuaAorKysgYi9uZXQvYmx1ZXRvb3RoL2hpZHAvaGlkcC5oCkBAIC04NCw4ICs4NCw4IEBACiAjZGVmaW5lIEhJRFBfV0FJVElOR19GT1JfU0VORF9BQ0sJMTEKIAogc3RydWN0IGhpZHBfY29ubmFkZF9yZXEgewotCWludCAgIGN0cmxfc29jazsJLy8gQ29ubmVjdGVkIGNvbnRyb2wgc29ja2V0Ci0JaW50ICAgaW50cl9zb2NrOwkvLyBDb25udGV0ZWQgaW50ZXJydXB0IHNvY2tldAorCWludCAgIGN0cmxfc29jazsJLyogQ29ubmVjdGVkIGNvbnRyb2wgc29ja2V0ICovCisJaW50ICAgaW50cl9zb2NrOwkvKiBDb25uZWN0ZWQgaW50ZXJydXB0IHNvY2tldCAqLwogCV9fdTE2IHBhcnNlcjsKIAlfX3UxNiByZF9zaXplOwogCV9fdTggX191c2VyICpyZF9kYXRhOwpAQCAtMTQyLDcgKzE0Miw3IEBACiAJdWludCBjdHJsX210dTsKIAl1aW50IGludHJfbXR1OwogCi0JYXRvbWljX3QgdGVybWluYXRlOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKIAogCXVuc2lnbmVkIGNoYXIga2V5c1s4XTsKIAl1bnNpZ25lZCBjaGFyIGxlZHM7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hpZHAvc29jay5jIGIvbmV0L2JsdWV0b290aC9oaWRwL3NvY2suYwppbmRleCAyNTBkZmQ0Li4xNzhhYzdmIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hpZHAvc29jay5jCisrKyBiL25ldC9ibHVldG9vdGgvaGlkcC9zb2NrLmMKQEAgLTg1LDcgKzg1LDggQEAKIAkJCXJldHVybiBlcnI7CiAJCX0KIAotCQlpZiAoY3NvY2stPnNrLT5za19zdGF0ZSAhPSBCVF9DT05ORUNURUQgfHwgaXNvY2stPnNrLT5za19zdGF0ZSAhPSBCVF9DT05ORUNURUQpIHsKKwkJaWYgKGNzb2NrLT5zay0+c2tfc3RhdGUgIT0gQlRfQ09OTkVDVEVEIHx8CisJCQkJaXNvY2stPnNrLT5za19zdGF0ZSAhPSBCVF9DT05ORUNURUQpIHsKIAkJCXNvY2tmZF9wdXQoY3NvY2spOwogCQkJc29ja2ZkX3B1dChpc29jayk7CiAJCQlyZXR1cm4gLUVCQURGRDsKQEAgLTE0MCw4ICsxNDEsOCBAQAogCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogc3RydWN0IGNvbXBhdF9oaWRwX2Nvbm5hZGRfcmVxIHsKLQlpbnQgICBjdHJsX3NvY2s7CS8vIENvbm5lY3RlZCBjb250cm9sIHNvY2tldAotCWludCAgIGludHJfc29jazsJLy8gQ29ubnRldGVkIGludGVycnVwdCBzb2NrZXQKKwlpbnQgICBjdHJsX3NvY2s7CS8qIENvbm5lY3RlZCBjb250cm9sIHNvY2tldCAqLworCWludCAgIGludHJfc29jazsJLyogQ29ubmVjdGVkIGludGVycnVwdCBzb2NrZXQgKi8KIAlfX3UxNiBwYXJzZXI7CiAJX191MTYgcmRfc2l6ZTsKIAljb21wYXRfdXB0cl90IHJkX2RhdGE7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2wyY2FwX2NvcmUuYyBiL25ldC9ibHVldG9vdGgvbDJjYXBfY29yZS5jCmluZGV4IGNhMjdmM2EuLmE4NmY5YmEgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvbDJjYXBfY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvbDJjYXBfY29yZS5jCkBAIC02MiwxNjggKzYyLDIzMyBAQAogCiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKl9idXN5X3dxOwogCi1zdHJ1Y3QgYnRfc29ja19saXN0IGwyY2FwX3NrX2xpc3QgPSB7Ci0JLmxvY2sgPSBfX1JXX0xPQ0tfVU5MT0NLRUQobDJjYXBfc2tfbGlzdC5sb2NrKQotfTsKK0xJU1RfSEVBRChjaGFuX2xpc3QpOworREVGSU5FX1JXTE9DSyhjaGFuX2xpc3RfbG9jayk7CiAKIHN0YXRpYyB2b2lkIGwyY2FwX2J1c3lfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmwyY2FwX2J1aWxkX2NtZChzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiwKIAkJCQl1OCBjb2RlLCB1OCBpZGVudCwgdTE2IGRsZW4sIHZvaWQgKmRhdGEpOworc3RhdGljIGludCBsMmNhcF9idWlsZF9jb25mX3JlcShzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgdm9pZCAqZGF0YSk7CiAKIHN0YXRpYyBpbnQgbDJjYXBfZXJ0bV9kYXRhX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwogCiAvKiAtLS0tIEwyQ0FQIGNoYW5uZWxzIC0tLS0gKi8KLXN0YXRpYyBzdHJ1Y3Qgc29jayAqX19sMmNhcF9nZXRfY2hhbl9ieV9kY2lkKHN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgKmwsIHUxNiBjaWQpCitzdGF0aWMgc3RydWN0IGwyY2FwX2NoYW4gKl9fbDJjYXBfZ2V0X2NoYW5fYnlfZGNpZChzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiwgdTE2IGNpZCkKIHsKLQlzdHJ1Y3Qgc29jayAqczsKLQlmb3IgKHMgPSBsLT5oZWFkOyBzOyBzID0gbDJjYXBfcGkocyktPm5leHRfYykgewotCQlpZiAobDJjYXBfcGkocyktPmRjaWQgPT0gY2lkKQotCQkJYnJlYWs7CisJc3RydWN0IGwyY2FwX2NoYW4gKmM7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZjb25uLT5jaGFuX2wsIGxpc3QpIHsKKwkJaWYgKGMtPmRjaWQgPT0gY2lkKQorCQkJcmV0dXJuIGM7CiAJfQotCXJldHVybiBzOworCXJldHVybiBOVUxMOworCiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc29jayAqX19sMmNhcF9nZXRfY2hhbl9ieV9zY2lkKHN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgKmwsIHUxNiBjaWQpCitzdGF0aWMgc3RydWN0IGwyY2FwX2NoYW4gKl9fbDJjYXBfZ2V0X2NoYW5fYnlfc2NpZChzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiwgdTE2IGNpZCkKIHsKLQlzdHJ1Y3Qgc29jayAqczsKLQlmb3IgKHMgPSBsLT5oZWFkOyBzOyBzID0gbDJjYXBfcGkocyktPm5leHRfYykgewotCQlpZiAobDJjYXBfcGkocyktPnNjaWQgPT0gY2lkKQotCQkJYnJlYWs7CisJc3RydWN0IGwyY2FwX2NoYW4gKmM7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZjb25uLT5jaGFuX2wsIGxpc3QpIHsKKwkJaWYgKGMtPnNjaWQgPT0gY2lkKQorCQkJcmV0dXJuIGM7CiAJfQotCXJldHVybiBzOworCXJldHVybiBOVUxMOwogfQogCiAvKiBGaW5kIGNoYW5uZWwgd2l0aCBnaXZlbiBTQ0lELgogICogUmV0dXJucyBsb2NrZWQgc29ja2V0ICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrICpsMmNhcF9nZXRfY2hhbl9ieV9zY2lkKHN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgKmwsIHUxNiBjaWQpCitzdGF0aWMgc3RydWN0IGwyY2FwX2NoYW4gKmwyY2FwX2dldF9jaGFuX2J5X3NjaWQoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4sIHUxNiBjaWQpCiB7Ci0Jc3RydWN0IHNvY2sgKnM7Ci0JcmVhZF9sb2NrKCZsLT5sb2NrKTsKLQlzID0gX19sMmNhcF9nZXRfY2hhbl9ieV9zY2lkKGwsIGNpZCk7Ci0JaWYgKHMpCi0JCWJoX2xvY2tfc29jayhzKTsKLQlyZWFkX3VubG9jaygmbC0+bG9jayk7Ci0JcmV0dXJuIHM7CisJc3RydWN0IGwyY2FwX2NoYW4gKmM7CisKKwlyZWFkX2xvY2soJmNvbm4tPmNoYW5fbG9jayk7CisJYyA9IF9fbDJjYXBfZ2V0X2NoYW5fYnlfc2NpZChjb25uLCBjaWQpOworCWlmIChjKQorCQliaF9sb2NrX3NvY2soYy0+c2spOworCXJlYWRfdW5sb2NrKCZjb25uLT5jaGFuX2xvY2spOworCXJldHVybiBjOwogfQogCi1zdGF0aWMgc3RydWN0IHNvY2sgKl9fbDJjYXBfZ2V0X2NoYW5fYnlfaWRlbnQoc3RydWN0IGwyY2FwX2NoYW5fbGlzdCAqbCwgdTggaWRlbnQpCitzdGF0aWMgc3RydWN0IGwyY2FwX2NoYW4gKl9fbDJjYXBfZ2V0X2NoYW5fYnlfaWRlbnQoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4sIHU4IGlkZW50KQogewotCXN0cnVjdCBzb2NrICpzOwotCWZvciAocyA9IGwtPmhlYWQ7IHM7IHMgPSBsMmNhcF9waShzKS0+bmV4dF9jKSB7Ci0JCWlmIChsMmNhcF9waShzKS0+aWRlbnQgPT0gaWRlbnQpCi0JCQlicmVhazsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqYzsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJmNvbm4tPmNoYW5fbCwgbGlzdCkgeworCQlpZiAoYy0+aWRlbnQgPT0gaWRlbnQpCisJCQlyZXR1cm4gYzsKIAl9Ci0JcmV0dXJuIHM7CisJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2sgKmwyY2FwX2dldF9jaGFuX2J5X2lkZW50KHN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgKmwsIHU4IGlkZW50KQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbDJjYXBfY2hhbiAqbDJjYXBfZ2V0X2NoYW5fYnlfaWRlbnQoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4sIHU4IGlkZW50KQogewotCXN0cnVjdCBzb2NrICpzOwotCXJlYWRfbG9jaygmbC0+bG9jayk7Ci0JcyA9IF9fbDJjYXBfZ2V0X2NoYW5fYnlfaWRlbnQobCwgaWRlbnQpOwotCWlmIChzKQotCQliaF9sb2NrX3NvY2socyk7Ci0JcmVhZF91bmxvY2soJmwtPmxvY2spOwotCXJldHVybiBzOworCXN0cnVjdCBsMmNhcF9jaGFuICpjOworCisJcmVhZF9sb2NrKCZjb25uLT5jaGFuX2xvY2spOworCWMgPSBfX2wyY2FwX2dldF9jaGFuX2J5X2lkZW50KGNvbm4sIGlkZW50KTsKKwlpZiAoYykKKwkJYmhfbG9ja19zb2NrKGMtPnNrKTsKKwlyZWFkX3VubG9jaygmY29ubi0+Y2hhbl9sb2NrKTsKKwlyZXR1cm4gYzsKIH0KIAotc3RhdGljIHUxNiBsMmNhcF9hbGxvY19jaWQoc3RydWN0IGwyY2FwX2NoYW5fbGlzdCAqbCkKK3N0YXRpYyBzdHJ1Y3QgbDJjYXBfY2hhbiAqX19sMmNhcF9nbG9iYWxfY2hhbl9ieV9hZGRyKF9fbGUxNiBwc20sIGJkYWRkcl90ICpzcmMpCit7CisJc3RydWN0IGwyY2FwX2NoYW4gKmM7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZjaGFuX2xpc3QsIGdsb2JhbF9sKSB7CisJCWlmIChjLT5zcG9ydCA9PSBwc20gJiYgIWJhY21wKCZidF9zayhjLT5zayktPnNyYywgc3JjKSkKKwkJCWdvdG8gZm91bmQ7CisJfQorCisJYyA9IE5VTEw7Citmb3VuZDoKKwlyZXR1cm4gYzsKK30KKworaW50IGwyY2FwX2FkZF9wc20oc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sIGJkYWRkcl90ICpzcmMsIF9fbGUxNiBwc20pCit7CisJaW50IGVycjsKKworCXdyaXRlX2xvY2tfYmgoJmNoYW5fbGlzdF9sb2NrKTsKKworCWlmIChwc20gJiYgX19sMmNhcF9nbG9iYWxfY2hhbl9ieV9hZGRyKHBzbSwgc3JjKSkgeworCQllcnIgPSAtRUFERFJJTlVTRTsKKwkJZ290byBkb25lOworCX0KKworCWlmIChwc20pIHsKKwkJY2hhbi0+cHNtID0gcHNtOworCQljaGFuLT5zcG9ydCA9IHBzbTsKKwkJZXJyID0gMDsKKwl9IGVsc2UgeworCQl1MTYgcDsKKworCQllcnIgPSAtRUlOVkFMOworCQlmb3IgKHAgPSAweDEwMDE7IHAgPCAweDExMDA7IHAgKz0gMikKKwkJCWlmICghX19sMmNhcF9nbG9iYWxfY2hhbl9ieV9hZGRyKGNwdV90b19sZTE2KHApLCBzcmMpKSB7CisJCQkJY2hhbi0+cHNtICAgPSBjcHVfdG9fbGUxNihwKTsKKwkJCQljaGFuLT5zcG9ydCA9IGNwdV90b19sZTE2KHApOworCQkJCWVyciA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJfQorCitkb25lOgorCXdyaXRlX3VubG9ja19iaCgmY2hhbl9saXN0X2xvY2spOworCXJldHVybiBlcnI7Cit9CisKK2ludCBsMmNhcF9hZGRfc2NpZChzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgIF9fdTE2IHNjaWQpCit7CisJd3JpdGVfbG9ja19iaCgmY2hhbl9saXN0X2xvY2spOworCisJY2hhbi0+c2NpZCA9IHNjaWQ7CisKKwl3cml0ZV91bmxvY2tfYmgoJmNoYW5fbGlzdF9sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTE2IGwyY2FwX2FsbG9jX2NpZChzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubikKIHsKIAl1MTYgY2lkID0gTDJDQVBfQ0lEX0RZTl9TVEFSVDsKIAogCWZvciAoOyBjaWQgPCBMMkNBUF9DSURfRFlOX0VORDsgY2lkKyspIHsKLQkJaWYgKCFfX2wyY2FwX2dldF9jaGFuX2J5X3NjaWQobCwgY2lkKSkKKwkJaWYgKCFfX2wyY2FwX2dldF9jaGFuX2J5X3NjaWQoY29ubiwgY2lkKSkKIAkJCXJldHVybiBjaWQ7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2wyY2FwX2NoYW5fbGluayhzdHJ1Y3QgbDJjYXBfY2hhbl9saXN0ICpsLCBzdHJ1Y3Qgc29jayAqc2spCitzdHJ1Y3QgbDJjYXBfY2hhbiAqbDJjYXBfY2hhbl9jcmVhdGUoc3RydWN0IHNvY2sgKnNrKQogewotCXNvY2tfaG9sZChzayk7CisJc3RydWN0IGwyY2FwX2NoYW4gKmNoYW47CiAKLQlpZiAobC0+aGVhZCkKLQkJbDJjYXBfcGkobC0+aGVhZCktPnByZXZfYyA9IHNrOworCWNoYW4gPSBremFsbG9jKHNpemVvZigqY2hhbiksIEdGUF9BVE9NSUMpOworCWlmICghY2hhbikKKwkJcmV0dXJuIE5VTEw7CiAKLQlsMmNhcF9waShzayktPm5leHRfYyA9IGwtPmhlYWQ7Ci0JbDJjYXBfcGkoc2spLT5wcmV2X2MgPSBOVUxMOwotCWwtPmhlYWQgPSBzazsKKwljaGFuLT5zayA9IHNrOworCisJd3JpdGVfbG9ja19iaCgmY2hhbl9saXN0X2xvY2spOworCWxpc3RfYWRkKCZjaGFuLT5nbG9iYWxfbCwgJmNoYW5fbGlzdCk7CisJd3JpdGVfdW5sb2NrX2JoKCZjaGFuX2xpc3RfbG9jayk7CisKKwlyZXR1cm4gY2hhbjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGwyY2FwX2NoYW5fdW5saW5rKHN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgKmwsIHN0cnVjdCBzb2NrICpzaykKK3ZvaWQgbDJjYXBfY2hhbl9kZXN0cm95KHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuKQogewotCXN0cnVjdCBzb2NrICpuZXh0ID0gbDJjYXBfcGkoc2spLT5uZXh0X2MsICpwcmV2ID0gbDJjYXBfcGkoc2spLT5wcmV2X2M7CisJd3JpdGVfbG9ja19iaCgmY2hhbl9saXN0X2xvY2spOworCWxpc3RfZGVsKCZjaGFuLT5nbG9iYWxfbCk7CisJd3JpdGVfdW5sb2NrX2JoKCZjaGFuX2xpc3RfbG9jayk7CiAKLQl3cml0ZV9sb2NrX2JoKCZsLT5sb2NrKTsKLQlpZiAoc2sgPT0gbC0+aGVhZCkKLQkJbC0+aGVhZCA9IG5leHQ7Ci0KLQlpZiAobmV4dCkKLQkJbDJjYXBfcGkobmV4dCktPnByZXZfYyA9IHByZXY7Ci0JaWYgKHByZXYpCi0JCWwyY2FwX3BpKHByZXYpLT5uZXh0X2MgPSBuZXh0OwotCXdyaXRlX3VubG9ja19iaCgmbC0+bG9jayk7Ci0KLQlfX3NvY2tfcHV0KHNrKTsKKwlrZnJlZShjaGFuKTsKIH0KIAotc3RhdGljIHZvaWQgX19sMmNhcF9jaGFuX2FkZChzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqcGFyZW50KQorc3RhdGljIHZvaWQgX19sMmNhcF9jaGFuX2FkZChzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiwgc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4pCiB7Ci0Jc3RydWN0IGwyY2FwX2NoYW5fbGlzdCAqbCA9ICZjb25uLT5jaGFuX2xpc3Q7CisJc3RydWN0IHNvY2sgKnNrID0gY2hhbi0+c2s7CiAKIAlCVF9EQkcoImNvbm4gJXAsIHBzbSAweCUyLjJ4LCBkY2lkIDB4JTQuNHgiLCBjb25uLAotCQkJbDJjYXBfcGkoc2spLT5wc20sIGwyY2FwX3BpKHNrKS0+ZGNpZCk7CisJCQljaGFuLT5wc20sIGNoYW4tPmRjaWQpOwogCiAJY29ubi0+ZGlzY19yZWFzb24gPSAweDEzOwogCi0JbDJjYXBfcGkoc2spLT5jb25uID0gY29ubjsKKwljaGFuLT5jb25uID0gY29ubjsKIAogCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX1NFUVBBQ0tFVCB8fCBzay0+c2tfdHlwZSA9PSBTT0NLX1NUUkVBTSkgewogCQlpZiAoY29ubi0+aGNvbi0+dHlwZSA9PSBMRV9MSU5LKSB7CiAJCQkvKiBMRSBjb25uZWN0aW9uICovCi0JCQlsMmNhcF9waShzayktPm9tdHUgPSBMMkNBUF9MRV9ERUZBVUxUX01UVTsKLQkJCWwyY2FwX3BpKHNrKS0+c2NpZCA9IEwyQ0FQX0NJRF9MRV9EQVRBOwotCQkJbDJjYXBfcGkoc2spLT5kY2lkID0gTDJDQVBfQ0lEX0xFX0RBVEE7CisJCQljaGFuLT5vbXR1ID0gTDJDQVBfTEVfREVGQVVMVF9NVFU7CisJCQljaGFuLT5zY2lkID0gTDJDQVBfQ0lEX0xFX0RBVEE7CisJCQljaGFuLT5kY2lkID0gTDJDQVBfQ0lEX0xFX0RBVEE7CiAJCX0gZWxzZSB7CiAJCQkvKiBBbGxvYyBDSUQgZm9yIGNvbm5lY3Rpb24tb3JpZW50ZWQgc29ja2V0ICovCi0JCQlsMmNhcF9waShzayktPnNjaWQgPSBsMmNhcF9hbGxvY19jaWQobCk7Ci0JCQlsMmNhcF9waShzayktPm9tdHUgPSBMMkNBUF9ERUZBVUxUX01UVTsKKwkJCWNoYW4tPnNjaWQgPSBsMmNhcF9hbGxvY19jaWQoY29ubik7CisJCQljaGFuLT5vbXR1ID0gTDJDQVBfREVGQVVMVF9NVFU7CiAJCX0KIAl9IGVsc2UgaWYgKHNrLT5za190eXBlID09IFNPQ0tfREdSQU0pIHsKIAkJLyogQ29ubmVjdGlvbmxlc3Mgc29ja2V0ICovCi0JCWwyY2FwX3BpKHNrKS0+c2NpZCA9IEwyQ0FQX0NJRF9DT05OX0xFU1M7Ci0JCWwyY2FwX3BpKHNrKS0+ZGNpZCA9IEwyQ0FQX0NJRF9DT05OX0xFU1M7Ci0JCWwyY2FwX3BpKHNrKS0+b210dSA9IEwyQ0FQX0RFRkFVTFRfTVRVOworCQljaGFuLT5zY2lkID0gTDJDQVBfQ0lEX0NPTk5fTEVTUzsKKwkJY2hhbi0+ZGNpZCA9IEwyQ0FQX0NJRF9DT05OX0xFU1M7CisJCWNoYW4tPm9tdHUgPSBMMkNBUF9ERUZBVUxUX01UVTsKIAl9IGVsc2UgewogCQkvKiBSYXcgc29ja2V0IGNhbiBzZW5kL3JlY3Ygc2lnbmFsbGluZyBtZXNzYWdlcyBvbmx5ICovCi0JCWwyY2FwX3BpKHNrKS0+c2NpZCA9IEwyQ0FQX0NJRF9TSUdOQUxJTkc7Ci0JCWwyY2FwX3BpKHNrKS0+ZGNpZCA9IEwyQ0FQX0NJRF9TSUdOQUxJTkc7Ci0JCWwyY2FwX3BpKHNrKS0+b210dSA9IEwyQ0FQX0RFRkFVTFRfTVRVOworCQljaGFuLT5zY2lkID0gTDJDQVBfQ0lEX1NJR05BTElORzsKKwkJY2hhbi0+ZGNpZCA9IEwyQ0FQX0NJRF9TSUdOQUxJTkc7CisJCWNoYW4tPm9tdHUgPSBMMkNBUF9ERUZBVUxUX01UVTsKIAl9CiAKLQlfX2wyY2FwX2NoYW5fbGluayhsLCBzayk7CisJc29ja19ob2xkKHNrKTsKIAotCWlmIChwYXJlbnQpCi0JCWJ0X2FjY2VwdF9lbnF1ZXVlKHBhcmVudCwgc2spOworCWxpc3RfYWRkKCZjaGFuLT5saXN0LCAmY29ubi0+Y2hhbl9sKTsKIH0KIAogLyogRGVsZXRlIGNoYW5uZWwuCiAgKiBNdXN0IGJlIGNhbGxlZCBvbiB0aGUgbG9ja2VkIHNvY2tldC4gKi8KLXZvaWQgbDJjYXBfY2hhbl9kZWwoc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyKQordm9pZCBsMmNhcF9jaGFuX2RlbChzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgaW50IGVycikKIHsKLQlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKKwlzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLT5zazsKKwlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGNoYW4tPmNvbm47CiAJc3RydWN0IHNvY2sgKnBhcmVudCA9IGJ0X3NrKHNrKS0+cGFyZW50OwogCiAJbDJjYXBfc29ja19jbGVhcl90aW1lcihzayk7CiAKLQlCVF9EQkcoInNrICVwLCBjb25uICVwLCBlcnIgJWQiLCBzaywgY29ubiwgZXJyKTsKKwlCVF9EQkcoImNoYW4gJXAsIGNvbm4gJXAsIGVyciAlZCIsIGNoYW4sIGNvbm4sIGVycik7CiAKIAlpZiAoY29ubikgewotCQkvKiBVbmxpbmsgZnJvbSBjaGFubmVsIGxpc3QgKi8KLQkJbDJjYXBfY2hhbl91bmxpbmsoJmNvbm4tPmNoYW5fbGlzdCwgc2spOwotCQlsMmNhcF9waShzayktPmNvbm4gPSBOVUxMOworCQkvKiBEZWxldGUgZnJvbSBjaGFubmVsIGxpc3QgKi8KKwkJd3JpdGVfbG9ja19iaCgmY29ubi0+Y2hhbl9sb2NrKTsKKwkJbGlzdF9kZWwoJmNoYW4tPmxpc3QpOworCQl3cml0ZV91bmxvY2tfYmgoJmNvbm4tPmNoYW5fbG9jayk7CisJCV9fc29ja19wdXQoc2spOworCisJCWNoYW4tPmNvbm4gPSBOVUxMOwogCQloY2lfY29ubl9wdXQoY29ubi0+aGNvbik7CiAJfQogCkBAIC0yMzksMjkgKzMwNCwzNSBAQAogCX0gZWxzZQogCQlzay0+c2tfc3RhdGVfY2hhbmdlKHNrKTsKIAotCXNrYl9xdWV1ZV9wdXJnZShUWF9RVUVVRShzaykpOworCWlmICghKGNoYW4tPmNvbmZfc3RhdGUgJiBMMkNBUF9DT05GX09VVFBVVF9ET05FICYmCisJCQljaGFuLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9JTlBVVF9ET05FKSkKKwkJcmV0dXJuOwogCi0JaWYgKGwyY2FwX3BpKHNrKS0+bW9kZSA9PSBMMkNBUF9NT0RFX0VSVE0pIHsKKwlza2JfcXVldWVfcHVyZ2UoJmNoYW4tPnR4X3EpOworCisJaWYgKGNoYW4tPm1vZGUgPT0gTDJDQVBfTU9ERV9FUlRNKSB7CiAJCXN0cnVjdCBzcmVqX2xpc3QgKmwsICp0bXA7CiAKLQkJZGVsX3RpbWVyKCZsMmNhcF9waShzayktPnJldHJhbnNfdGltZXIpOwotCQlkZWxfdGltZXIoJmwyY2FwX3BpKHNrKS0+bW9uaXRvcl90aW1lcik7Ci0JCWRlbF90aW1lcigmbDJjYXBfcGkoc2spLT5hY2tfdGltZXIpOworCQlkZWxfdGltZXIoJmNoYW4tPnJldHJhbnNfdGltZXIpOworCQlkZWxfdGltZXIoJmNoYW4tPm1vbml0b3JfdGltZXIpOworCQlkZWxfdGltZXIoJmNoYW4tPmFja190aW1lcik7CiAKLQkJc2tiX3F1ZXVlX3B1cmdlKFNSRUpfUVVFVUUoc2spKTsKLQkJc2tiX3F1ZXVlX3B1cmdlKEJVU1lfUVVFVUUoc2spKTsKKwkJc2tiX3F1ZXVlX3B1cmdlKCZjaGFuLT5zcmVqX3EpOworCQlza2JfcXVldWVfcHVyZ2UoJmNoYW4tPmJ1c3lfcSk7CiAKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIHRtcCwgU1JFSl9MSVNUKHNrKSwgbGlzdCkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgdG1wLCAmY2hhbi0+c3Jlal9sLCBsaXN0KSB7CiAJCQlsaXN0X2RlbCgmbC0+bGlzdCk7CiAJCQlrZnJlZShsKTsKIAkJfQogCX0KIH0KIAotc3RhdGljIGlubGluZSB1OCBsMmNhcF9nZXRfYXV0aF90eXBlKHN0cnVjdCBzb2NrICpzaykKK3N0YXRpYyBpbmxpbmUgdTggbDJjYXBfZ2V0X2F1dGhfdHlwZShzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbikKIHsKKwlzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLT5zazsKKwogCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX1JBVykgewotCQlzd2l0Y2ggKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsKSB7CisJCXN3aXRjaCAoY2hhbi0+c2VjX2xldmVsKSB7CiAJCWNhc2UgQlRfU0VDVVJJVFlfSElHSDoKIAkJCXJldHVybiBIQ0lfQVRfREVESUNBVEVEX0JPTkRJTkdfTUlUTTsKIAkJY2FzZSBCVF9TRUNVUklUWV9NRURJVU06CkBAIC0yNjksMTYgKzM0MCwxNiBAQAogCQlkZWZhdWx0OgogCQkJcmV0dXJuIEhDSV9BVF9OT19CT05ESU5HOwogCQl9Ci0JfSBlbHNlIGlmIChsMmNhcF9waShzayktPnBzbSA9PSBjcHVfdG9fbGUxNigweDAwMDEpKSB7Ci0JCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9MT1cpCi0JCQlsMmNhcF9waShzayktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX1NEUDsKKwl9IGVsc2UgaWYgKGNoYW4tPnBzbSA9PSBjcHVfdG9fbGUxNigweDAwMDEpKSB7CisJCWlmIChjaGFuLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfTE9XKQorCQkJY2hhbi0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfU0RQOwogCi0JCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9ISUdIKQorCQlpZiAoY2hhbi0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX0hJR0gpCiAJCQlyZXR1cm4gSENJX0FUX05PX0JPTkRJTkdfTUlUTTsKIAkJZWxzZQogCQkJcmV0dXJuIEhDSV9BVF9OT19CT05ESU5HOwogCX0gZWxzZSB7Ci0JCXN3aXRjaCAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwpIHsKKwkJc3dpdGNoIChjaGFuLT5zZWNfbGV2ZWwpIHsKIAkJY2FzZSBCVF9TRUNVUklUWV9ISUdIOgogCQkJcmV0dXJuIEhDSV9BVF9HRU5FUkFMX0JPTkRJTkdfTUlUTTsKIAkJY2FzZSBCVF9TRUNVUklUWV9NRURJVU06CkBAIC0yOTAsMTUgKzM2MSwxNCBAQAogfQogCiAvKiBTZXJ2aWNlIGxldmVsIHNlY3VyaXR5ICovCi1zdGF0aWMgaW5saW5lIGludCBsMmNhcF9jaGVja19zZWN1cml0eShzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgaW5saW5lIGludCBsMmNhcF9jaGVja19zZWN1cml0eShzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbikKIHsKLQlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKKwlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGNoYW4tPmNvbm47CiAJX191OCBhdXRoX3R5cGU7CiAKLQlhdXRoX3R5cGUgPSBsMmNhcF9nZXRfYXV0aF90eXBlKHNrKTsKKwlhdXRoX3R5cGUgPSBsMmNhcF9nZXRfYXV0aF90eXBlKGNoYW4pOwogCi0JcmV0dXJuIGhjaV9jb25uX3NlY3VyaXR5KGNvbm4tPmhjb24sIGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsLAotCQkJCQkJCQlhdXRoX3R5cGUpOworCXJldHVybiBoY2lfY29ubl9zZWN1cml0eShjb25uLT5oY29uLCBjaGFuLT5zZWNfbGV2ZWwsIGF1dGhfdHlwZSk7CiB9CiAKIHU4IGwyY2FwX2dldF9pZGVudChzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubikKQEAgLTM0MSwxMSArNDExLDEyIEBACiAJaGNpX3NlbmRfYWNsKGNvbm4tPmhjb24sIHNrYiwgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbDJjYXBfc2VuZF9zZnJhbWUoc3RydWN0IGwyY2FwX3BpbmZvICpwaSwgdTE2IGNvbnRyb2wpCitzdGF0aWMgaW5saW5lIHZvaWQgbDJjYXBfc2VuZF9zZnJhbWUoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sIHUxNiBjb250cm9sKQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGwyY2FwX2hkciAqbGg7Ci0Jc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBwaS0+Y29ubjsKKwlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoY2hhbi0+c2spOworCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gY2hhbi0+Y29ubjsKIAlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKilwaTsKIAlpbnQgY291bnQsIGhsZW4gPSBMMkNBUF9IRFJfU0laRSArIDI7CiAJdTggZmxhZ3M7CkBAIC0zNTMsMjIgKzQyNCwyMiBAQAogCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQ09OTkVDVEVEKQogCQlyZXR1cm47CiAKLQlpZiAocGktPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpCisJaWYgKGNoYW4tPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpCiAJCWhsZW4gKz0gMjsKIAotCUJUX0RCRygicGkgJXAsIGNvbnRyb2wgMHglMi4yeCIsIHBpLCBjb250cm9sKTsKKwlCVF9EQkcoImNoYW4gJXAsIGNvbnRyb2wgMHglMi4yeCIsIGNoYW4sIGNvbnRyb2wpOwogCiAJY291bnQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGNvbm4tPm10dSwgaGxlbik7CiAJY29udHJvbCB8PSBMMkNBUF9DVFJMX0ZSQU1FX1RZUEU7CiAKLQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NFTkRfRkJJVCkgeworCWlmIChjaGFuLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TRU5EX0ZCSVQpIHsKIAkJY29udHJvbCB8PSBMMkNBUF9DVFJMX0ZJTkFMOwotCQlwaS0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9TRU5EX0ZCSVQ7CisJCWNoYW4tPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fU0VORF9GQklUOwogCX0KIAotCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fU0VORF9QQklUKSB7CisJaWYgKGNoYW4tPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NFTkRfUEJJVCkgewogCQljb250cm9sIHw9IEwyQ0FQX0NUUkxfUE9MTDsKLQkJcGktPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fU0VORF9QQklUOworCQljaGFuLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1NFTkRfUEJJVDsKIAl9CiAKIAlza2IgPSBidF9za2JfYWxsb2MoY291bnQsIEdGUF9BVE9NSUMpOwpAQCAtMzc3LDEwICs0NDgsMTAgQEAKIAogCWxoID0gKHN0cnVjdCBsMmNhcF9oZHIgKikgc2tiX3B1dChza2IsIEwyQ0FQX0hEUl9TSVpFKTsKIAlsaC0+bGVuID0gY3B1X3RvX2xlMTYoaGxlbiAtIEwyQ0FQX0hEUl9TSVpFKTsKLQlsaC0+Y2lkID0gY3B1X3RvX2xlMTYocGktPmRjaWQpOworCWxoLT5jaWQgPSBjcHVfdG9fbGUxNihjaGFuLT5kY2lkKTsKIAlwdXRfdW5hbGlnbmVkX2xlMTYoY29udHJvbCwgc2tiX3B1dChza2IsIDIpKTsKIAotCWlmIChwaS0+ZmNzID09IEwyQ0FQX0ZDU19DUkMxNikgeworCWlmIChjaGFuLT5mY3MgPT0gTDJDQVBfRkNTX0NSQzE2KSB7CiAJCXUxNiBmY3MgPSBjcmMxNigwLCAodTggKilsaCwgY291bnQgLSAyKTsKIAkJcHV0X3VuYWxpZ25lZF9sZTE2KGZjcywgc2tiX3B1dChza2IsIDIpKTsKIAl9CkBAIC0zOTAsNDUgKzQ2MSw0NiBAQAogCWVsc2UKIAkJZmxhZ3MgPSBBQ0xfU1RBUlQ7CiAKLQloY2lfc2VuZF9hY2wocGktPmNvbm4tPmhjb24sIHNrYiwgZmxhZ3MpOworCWhjaV9zZW5kX2FjbChjaGFuLT5jb25uLT5oY29uLCBza2IsIGZsYWdzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGwyY2FwX3NlbmRfcnJfb3Jfcm5yKHN0cnVjdCBsMmNhcF9waW5mbyAqcGksIHUxNiBjb250cm9sKQorc3RhdGljIGlubGluZSB2b2lkIGwyY2FwX3NlbmRfcnJfb3Jfcm5yKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCB1MTYgY29udHJvbCkKIHsKLQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX0xPQ0FMX0JVU1kpIHsKKwlpZiAoY2hhbi0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fTE9DQUxfQlVTWSkgewogCQljb250cm9sIHw9IEwyQ0FQX1NVUEVSX1JDVl9OT1RfUkVBRFk7Ci0JCXBpLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fUk5SX1NFTlQ7CisJCWNoYW4tPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9STlJfU0VOVDsKIAl9IGVsc2UKIAkJY29udHJvbCB8PSBMMkNBUF9TVVBFUl9SQ1ZfUkVBRFk7CiAKLQljb250cm9sIHw9IHBpLT5idWZmZXJfc2VxIDw8IEwyQ0FQX0NUUkxfUkVRU0VRX1NISUZUOworCWNvbnRyb2wgfD0gY2hhbi0+YnVmZmVyX3NlcSA8PCBMMkNBUF9DVFJMX1JFUVNFUV9TSElGVDsKIAotCWwyY2FwX3NlbmRfc2ZyYW1lKHBpLCBjb250cm9sKTsKKwlsMmNhcF9zZW5kX3NmcmFtZShjaGFuLCBjb250cm9sKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX19sMmNhcF9ub19jb25uX3BlbmRpbmcoc3RydWN0IHNvY2sgKnNrKQorc3RhdGljIGlubGluZSBpbnQgX19sMmNhcF9ub19jb25uX3BlbmRpbmcoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4pCiB7Ci0JcmV0dXJuICEobDJjYXBfcGkoc2spLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9DT05ORUNUX1BFTkQpOworCXJldHVybiAhKGNoYW4tPmNvbmZfc3RhdGUgJiBMMkNBUF9DT05GX0NPTk5FQ1RfUEVORCk7CiB9CiAKLXN0YXRpYyB2b2lkIGwyY2FwX2RvX3N0YXJ0KHN0cnVjdCBzb2NrICpzaykKK3N0YXRpYyB2b2lkIGwyY2FwX2RvX3N0YXJ0KHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuKQogewotCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gbDJjYXBfcGkoc2spLT5jb25uOworCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gY2hhbi0+Y29ubjsKIAogCWlmIChjb25uLT5pbmZvX3N0YXRlICYgTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX1NFTlQpIHsKIAkJaWYgKCEoY29ubi0+aW5mb19zdGF0ZSAmIEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9ET05FKSkKIAkJCXJldHVybjsKIAotCQlpZiAobDJjYXBfY2hlY2tfc2VjdXJpdHkoc2spICYmIF9fbDJjYXBfbm9fY29ubl9wZW5kaW5nKHNrKSkgeworCQlpZiAobDJjYXBfY2hlY2tfc2VjdXJpdHkoY2hhbikgJiYKKwkJCQlfX2wyY2FwX25vX2Nvbm5fcGVuZGluZyhjaGFuKSkgewogCQkJc3RydWN0IGwyY2FwX2Nvbm5fcmVxIHJlcTsKLQkJCXJlcS5zY2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKLQkJCXJlcS5wc20gID0gbDJjYXBfcGkoc2spLT5wc207CisJCQlyZXEuc2NpZCA9IGNwdV90b19sZTE2KGNoYW4tPnNjaWQpOworCQkJcmVxLnBzbSAgPSBjaGFuLT5wc207CiAKLQkJCWwyY2FwX3BpKHNrKS0+aWRlbnQgPSBsMmNhcF9nZXRfaWRlbnQoY29ubik7Ci0JCQlsMmNhcF9waShzayktPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9DT05ORUNUX1BFTkQ7CisJCQljaGFuLT5pZGVudCA9IGwyY2FwX2dldF9pZGVudChjb25uKTsKKwkJCWNoYW4tPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9DT05ORUNUX1BFTkQ7CiAKLQkJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGwyY2FwX3BpKHNrKS0+aWRlbnQsCi0JCQkJCUwyQ0FQX0NPTk5fUkVRLCBzaXplb2YocmVxKSwgJnJlcSk7CisJCQlsMmNhcF9zZW5kX2NtZChjb25uLCBjaGFuLT5pZGVudCwgTDJDQVBfQ09OTl9SRVEsCisJCQkJCQkJc2l6ZW9mKHJlcSksICZyZXEpOwogCQl9CiAJfSBlbHNlIHsKIAkJc3RydWN0IGwyY2FwX2luZm9fcmVxIHJlcTsKQEAgLTQ2MSwyMyArNTMzLDI0IEBACiAJfQogfQogCi12b2lkIGwyY2FwX3NlbmRfZGlzY29ubl9yZXEoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4sIHN0cnVjdCBzb2NrICpzaywgaW50IGVycikKK3ZvaWQgbDJjYXBfc2VuZF9kaXNjb25uX3JlcShzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiwgc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sIGludCBlcnIpCiB7CisJc3RydWN0IHNvY2sgKnNrOwogCXN0cnVjdCBsMmNhcF9kaXNjb25uX3JlcSByZXE7CiAKIAlpZiAoIWNvbm4pCiAJCXJldHVybjsKIAotCXNrYl9xdWV1ZV9wdXJnZShUWF9RVUVVRShzaykpOworCXNrID0gY2hhbi0+c2s7CiAKLQlpZiAobDJjYXBfcGkoc2spLT5tb2RlID09IEwyQ0FQX01PREVfRVJUTSkgewotCQlkZWxfdGltZXIoJmwyY2FwX3BpKHNrKS0+cmV0cmFuc190aW1lcik7Ci0JCWRlbF90aW1lcigmbDJjYXBfcGkoc2spLT5tb25pdG9yX3RpbWVyKTsKLQkJZGVsX3RpbWVyKCZsMmNhcF9waShzayktPmFja190aW1lcik7CisJaWYgKGNoYW4tPm1vZGUgPT0gTDJDQVBfTU9ERV9FUlRNKSB7CisJCWRlbF90aW1lcigmY2hhbi0+cmV0cmFuc190aW1lcik7CisJCWRlbF90aW1lcigmY2hhbi0+bW9uaXRvcl90aW1lcik7CisJCWRlbF90aW1lcigmY2hhbi0+YWNrX3RpbWVyKTsKIAl9CiAKLQlyZXEuZGNpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+ZGNpZCk7Ci0JcmVxLnNjaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOworCXJlcS5kY2lkID0gY3B1X3RvX2xlMTYoY2hhbi0+ZGNpZCk7CisJcmVxLnNjaWQgPSBjcHVfdG9fbGUxNihjaGFuLT5zY2lkKTsKIAlsMmNhcF9zZW5kX2NtZChjb25uLCBsMmNhcF9nZXRfaWRlbnQoY29ubiksCiAJCQlMMkNBUF9ESVNDT05OX1JFUSwgc2l6ZW9mKHJlcSksICZyZXEpOwogCkBAIC00ODgsMTcgKzU2MSwxNSBAQAogLyogLS0tLSBMMkNBUCBjb25uZWN0aW9ucyAtLS0tICovCiBzdGF0aWMgdm9pZCBsMmNhcF9jb25uX3N0YXJ0KHN0cnVjdCBsMmNhcF9jb25uICpjb25uKQogewotCXN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgKmwgPSAmY29ubi0+Y2hhbl9saXN0OwotCXN0cnVjdCBzb2NrX2RlbF9saXN0IGRlbCwgKnRtcDEsICp0bXAyOwotCXN0cnVjdCBzb2NrICpzazsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgKnRtcDsKIAogCUJUX0RCRygiY29ubiAlcCIsIGNvbm4pOwogCi0JSU5JVF9MSVNUX0hFQUQoJmRlbC5saXN0KTsKKwlyZWFkX2xvY2soJmNvbm4tPmNoYW5fbG9jayk7CiAKLQlyZWFkX2xvY2soJmwtPmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaGFuLCB0bXAsICZjb25uLT5jaGFuX2wsIGxpc3QpIHsKKwkJc3RydWN0IHNvY2sgKnNrID0gY2hhbi0+c2s7CiAKLQlmb3IgKHNrID0gbC0+aGVhZDsgc2s7IHNrID0gbDJjYXBfcGkoc2spLT5uZXh0X2MpIHsKIAkJYmhfbG9ja19zb2NrKHNrKTsKIAogCQlpZiAoc2stPnNrX3R5cGUgIT0gU09DS19TRVFQQUNLRVQgJiYKQEAgLTUxMCw0MCArNTgxLDQxIEBACiAJCWlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVCkgewogCQkJc3RydWN0IGwyY2FwX2Nvbm5fcmVxIHJlcTsKIAotCQkJaWYgKCFsMmNhcF9jaGVja19zZWN1cml0eShzaykgfHwKLQkJCQkJIV9fbDJjYXBfbm9fY29ubl9wZW5kaW5nKHNrKSkgeworCQkJaWYgKCFsMmNhcF9jaGVja19zZWN1cml0eShjaGFuKSB8fAorCQkJCQkhX19sMmNhcF9ub19jb25uX3BlbmRpbmcoY2hhbikpIHsKIAkJCQliaF91bmxvY2tfc29jayhzayk7CiAJCQkJY29udGludWU7CiAJCQl9CiAKLQkJCWlmICghbDJjYXBfbW9kZV9zdXBwb3J0ZWQobDJjYXBfcGkoc2spLT5tb2RlLAorCQkJaWYgKCFsMmNhcF9tb2RlX3N1cHBvcnRlZChjaGFuLT5tb2RlLAogCQkJCQljb25uLT5mZWF0X21hc2spCi0JCQkJCSYmIGwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSAmCisJCQkJCSYmIGNoYW4tPmNvbmZfc3RhdGUgJgogCQkJCQlMMkNBUF9DT05GX1NUQVRFMl9ERVZJQ0UpIHsKLQkJCQl0bXAxID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNvY2tfZGVsX2xpc3QpLAotCQkJCQkJR0ZQX0FUT01JQyk7Ci0JCQkJdG1wMS0+c2sgPSBzazsKLQkJCQlsaXN0X2FkZF90YWlsKCZ0bXAxLT5saXN0LCAmZGVsLmxpc3QpOworCQkJCS8qIF9fbDJjYXBfc29ja19jbG9zZSgpIGNhbGxzIGxpc3RfZGVsKGNoYW4pCisJCQkJICogc28gcmVsZWFzZSB0aGUgbG9jayAqLworCQkJCXJlYWRfdW5sb2NrX2JoKCZjb25uLT5jaGFuX2xvY2spOworCQkJCSBfX2wyY2FwX3NvY2tfY2xvc2Uoc2ssIEVDT05OUkVTRVQpOworCQkJCXJlYWRfbG9ja19iaCgmY29ubi0+Y2hhbl9sb2NrKTsKIAkJCQliaF91bmxvY2tfc29jayhzayk7CiAJCQkJY29udGludWU7CiAJCQl9CiAKLQkJCXJlcS5zY2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKLQkJCXJlcS5wc20gID0gbDJjYXBfcGkoc2spLT5wc207CisJCQlyZXEuc2NpZCA9IGNwdV90b19sZTE2KGNoYW4tPnNjaWQpOworCQkJcmVxLnBzbSAgPSBjaGFuLT5wc207CiAKLQkJCWwyY2FwX3BpKHNrKS0+aWRlbnQgPSBsMmNhcF9nZXRfaWRlbnQoY29ubik7Ci0JCQlsMmNhcF9waShzayktPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9DT05ORUNUX1BFTkQ7CisJCQljaGFuLT5pZGVudCA9IGwyY2FwX2dldF9pZGVudChjb25uKTsKKwkJCWNoYW4tPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9DT05ORUNUX1BFTkQ7CiAKLQkJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGwyY2FwX3BpKHNrKS0+aWRlbnQsCi0JCQkJTDJDQVBfQ09OTl9SRVEsIHNpemVvZihyZXEpLCAmcmVxKTsKKwkJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGNoYW4tPmlkZW50LCBMMkNBUF9DT05OX1JFUSwKKwkJCQkJCQlzaXplb2YocmVxKSwgJnJlcSk7CiAKIAkJfSBlbHNlIGlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVDIpIHsKIAkJCXN0cnVjdCBsMmNhcF9jb25uX3JzcCByc3A7CiAJCQljaGFyIGJ1ZlsxMjhdOwotCQkJcnNwLnNjaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPmRjaWQpOwotCQkJcnNwLmRjaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOworCQkJcnNwLnNjaWQgPSBjcHVfdG9fbGUxNihjaGFuLT5kY2lkKTsKKwkJCXJzcC5kY2lkID0gY3B1X3RvX2xlMTYoY2hhbi0+c2NpZCk7CiAKLQkJCWlmIChsMmNhcF9jaGVja19zZWN1cml0eShzaykpIHsKKwkJCWlmIChsMmNhcF9jaGVja19zZWN1cml0eShjaGFuKSkgewogCQkJCWlmIChidF9zayhzayktPmRlZmVyX3NldHVwKSB7CiAJCQkJCXN0cnVjdCBzb2NrICpwYXJlbnQgPSBidF9zayhzayktPnBhcmVudDsKIAkJCQkJcnNwLnJlc3VsdCA9IGNwdV90b19sZTE2KEwyQ0FQX0NSX1BFTkQpOwpAQCAtNTYwLDgwICs2MzIsNzcgQEAKIAkJCQlyc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoTDJDQVBfQ1NfQVVUSEVOX1BFTkQpOwogCQkJfQogCi0JCQlsMmNhcF9zZW5kX2NtZChjb25uLCBsMmNhcF9waShzayktPmlkZW50LAotCQkJCQlMMkNBUF9DT05OX1JTUCwgc2l6ZW9mKHJzcCksICZyc3ApOworCQkJbDJjYXBfc2VuZF9jbWQoY29ubiwgY2hhbi0+aWRlbnQsIEwyQ0FQX0NPTk5fUlNQLAorCQkJCQkJCXNpemVvZihyc3ApLCAmcnNwKTsKIAotCQkJaWYgKGwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfUkVRX1NFTlQgfHwKKwkJCWlmIChjaGFuLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9SRVFfU0VOVCB8fAogCQkJCQlyc3AucmVzdWx0ICE9IEwyQ0FQX0NSX1NVQ0NFU1MpIHsKIAkJCQliaF91bmxvY2tfc29jayhzayk7CiAJCQkJY29udGludWU7CiAJCQl9CiAKLQkJCWwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX1JFUV9TRU5UOworCQkJY2hhbi0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX1JFUV9TRU5UOwogCQkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfZ2V0X2lkZW50KGNvbm4pLCBMMkNBUF9DT05GX1JFUSwKLQkJCQkJCWwyY2FwX2J1aWxkX2NvbmZfcmVxKHNrLCBidWYpLCBidWYpOwotCQkJbDJjYXBfcGkoc2spLT5udW1fY29uZl9yZXErKzsKKwkJCQkJCWwyY2FwX2J1aWxkX2NvbmZfcmVxKGNoYW4sIGJ1ZiksIGJ1Zik7CisJCQljaGFuLT5udW1fY29uZl9yZXErKzsKIAkJfQogCiAJCWJoX3VubG9ja19zb2NrKHNrKTsKIAl9CiAKLQlyZWFkX3VubG9jaygmbC0+bG9jayk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodG1wMSwgdG1wMiwgJmRlbC5saXN0LCBsaXN0KSB7Ci0JCWJoX2xvY2tfc29jayh0bXAxLT5zayk7Ci0JCV9fbDJjYXBfc29ja19jbG9zZSh0bXAxLT5zaywgRUNPTk5SRVNFVCk7Ci0JCWJoX3VubG9ja19zb2NrKHRtcDEtPnNrKTsKLQkJbGlzdF9kZWwoJnRtcDEtPmxpc3QpOwotCQlrZnJlZSh0bXAxKTsKLQl9CisJcmVhZF91bmxvY2soJmNvbm4tPmNoYW5fbG9jayk7CiB9CiAKIC8qIEZpbmQgc29ja2V0IHdpdGggY2lkIGFuZCBzb3VyY2UgYmRhZGRyLgogICogUmV0dXJucyBjbG9zZXN0IG1hdGNoLCBsb2NrZWQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc29jayAqbDJjYXBfZ2V0X3NvY2tfYnlfc2NpZChpbnQgc3RhdGUsIF9fbGUxNiBjaWQsIGJkYWRkcl90ICpzcmMpCitzdGF0aWMgc3RydWN0IGwyY2FwX2NoYW4gKmwyY2FwX2dsb2JhbF9jaGFuX2J5X3NjaWQoaW50IHN0YXRlLCBfX2xlMTYgY2lkLCBiZGFkZHJfdCAqc3JjKQogewotCXN0cnVjdCBzb2NrICpzLCAqc2sgPSBOVUxMLCAqc2sxID0gTlVMTDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqYywgKmMxID0gTlVMTDsKIAotCXJlYWRfbG9jaygmbDJjYXBfc2tfbGlzdC5sb2NrKTsKKwlyZWFkX2xvY2soJmNoYW5fbGlzdF9sb2NrKTsKIAotCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmbDJjYXBfc2tfbGlzdC5oZWFkKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmY2hhbl9saXN0LCBnbG9iYWxfbCkgeworCQlzdHJ1Y3Qgc29jayAqc2sgPSBjLT5zazsKKwogCQlpZiAoc3RhdGUgJiYgc2stPnNrX3N0YXRlICE9IHN0YXRlKQogCQkJY29udGludWU7CiAKLQkJaWYgKGwyY2FwX3BpKHNrKS0+c2NpZCA9PSBjaWQpIHsKKwkJaWYgKGMtPnNjaWQgPT0gY2lkKSB7CiAJCQkvKiBFeGFjdCBtYXRjaC4gKi8KLQkJCWlmICghYmFjbXAoJmJ0X3NrKHNrKS0+c3JjLCBzcmMpKQotCQkJCWJyZWFrOworCQkJaWYgKCFiYWNtcCgmYnRfc2soc2spLT5zcmMsIHNyYykpIHsKKwkJCQlyZWFkX3VubG9jaygmY2hhbl9saXN0X2xvY2spOworCQkJCXJldHVybiBjOworCQkJfQogCiAJCQkvKiBDbG9zZXN0IG1hdGNoICovCiAJCQlpZiAoIWJhY21wKCZidF9zayhzayktPnNyYywgQkRBRERSX0FOWSkpCi0JCQkJc2sxID0gc2s7CisJCQkJYzEgPSBjOwogCQl9CiAJfQotCXMgPSBub2RlID8gc2sgOiBzazE7Ci0JaWYgKHMpCi0JCWJoX2xvY2tfc29jayhzKTsKLQlyZWFkX3VubG9jaygmbDJjYXBfc2tfbGlzdC5sb2NrKTsKIAotCXJldHVybiBzOworCXJlYWRfdW5sb2NrKCZjaGFuX2xpc3RfbG9jayk7CisKKwlyZXR1cm4gYzE7CiB9CiAKIHN0YXRpYyB2b2lkIGwyY2FwX2xlX2Nvbm5fcmVhZHkoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4pCiB7Ci0Jc3RydWN0IGwyY2FwX2NoYW5fbGlzdCAqbGlzdCA9ICZjb25uLT5jaGFuX2xpc3Q7Ci0Jc3RydWN0IHNvY2sgKnBhcmVudCwgKnVuaW5pdGlhbGl6ZWRfdmFyKHNrKTsKKwlzdHJ1Y3Qgc29jayAqcGFyZW50LCAqc2s7CisJc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sICpwY2hhbjsKIAogCUJUX0RCRygiIik7CiAKIAkvKiBDaGVjayBpZiB3ZSBoYXZlIHNvY2tldCBsaXN0ZW5pbmcgb24gY2lkICovCi0JcGFyZW50ID0gbDJjYXBfZ2V0X3NvY2tfYnlfc2NpZChCVF9MSVNURU4sIEwyQ0FQX0NJRF9MRV9EQVRBLAorCXBjaGFuID0gbDJjYXBfZ2xvYmFsX2NoYW5fYnlfc2NpZChCVF9MSVNURU4sIEwyQ0FQX0NJRF9MRV9EQVRBLAogCQkJCQkJCWNvbm4tPnNyYyk7Ci0JaWYgKCFwYXJlbnQpCisJaWYgKCFwY2hhbikKIAkJcmV0dXJuOwogCisJcGFyZW50ID0gcGNoYW4tPnNrOworCisJYmhfbG9ja19zb2NrKHBhcmVudCk7CisKIAkvKiBDaGVjayBmb3IgYmFja2xvZyBzaXplICovCiAJaWYgKHNrX2FjY2VwdHFfaXNfZnVsbChwYXJlbnQpKSB7CiAJCUJUX0RCRygiYmFja2xvZyBmdWxsICVkIiwgcGFyZW50LT5za19hY2tfYmFja2xvZyk7CkBAIC02NDQsMjIgKzcxMywzMyBAQAogCWlmICghc2spCiAJCWdvdG8gY2xlYW47CiAKLQl3cml0ZV9sb2NrX2JoKCZsaXN0LT5sb2NrKTsKKwljaGFuID0gbDJjYXBfY2hhbl9jcmVhdGUoc2spOworCWlmICghY2hhbikgeworCQlsMmNhcF9zb2NrX2tpbGwoc2spOworCQlnb3RvIGNsZWFuOworCX0KKworCWwyY2FwX3BpKHNrKS0+Y2hhbiA9IGNoYW47CisKKwl3cml0ZV9sb2NrX2JoKCZjb25uLT5jaGFuX2xvY2spOwogCiAJaGNpX2Nvbm5faG9sZChjb25uLT5oY29uKTsKIAogCWwyY2FwX3NvY2tfaW5pdChzaywgcGFyZW50KTsKKwogCWJhY3B5KCZidF9zayhzayktPnNyYywgY29ubi0+c3JjKTsKIAliYWNweSgmYnRfc2soc2spLT5kc3QsIGNvbm4tPmRzdCk7CiAKLQlfX2wyY2FwX2NoYW5fYWRkKGNvbm4sIHNrLCBwYXJlbnQpOworCWJ0X2FjY2VwdF9lbnF1ZXVlKHBhcmVudCwgc2spOworCisJX19sMmNhcF9jaGFuX2FkZChjb25uLCBjaGFuKTsKIAogCWwyY2FwX3NvY2tfc2V0X3RpbWVyKHNrLCBzay0+c2tfc25kdGltZW8pOwogCiAJc2stPnNrX3N0YXRlID0gQlRfQ09OTkVDVEVEOwogCXBhcmVudC0+c2tfZGF0YV9yZWFkeShwYXJlbnQsIDApOwogCi0Jd3JpdGVfdW5sb2NrX2JoKCZsaXN0LT5sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJmNvbm4tPmNoYW5fbG9jayk7CiAKIGNsZWFuOgogCWJoX3VubG9ja19zb2NrKHBhcmVudCk7CkBAIC02NjcsMTcgKzc0NywxOCBAQAogCiBzdGF0aWMgdm9pZCBsMmNhcF9jb25uX3JlYWR5KHN0cnVjdCBsMmNhcF9jb25uICpjb25uKQogewotCXN0cnVjdCBsMmNhcF9jaGFuX2xpc3QgKmwgPSAmY29ubi0+Y2hhbl9saXN0OwotCXN0cnVjdCBzb2NrICpzazsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbjsKIAogCUJUX0RCRygiY29ubiAlcCIsIGNvbm4pOwogCiAJaWYgKCFjb25uLT5oY29uLT5vdXQgJiYgY29ubi0+aGNvbi0+dHlwZSA9PSBMRV9MSU5LKQogCQlsMmNhcF9sZV9jb25uX3JlYWR5KGNvbm4pOwogCi0JcmVhZF9sb2NrKCZsLT5sb2NrKTsKKwlyZWFkX2xvY2soJmNvbm4tPmNoYW5fbG9jayk7CiAKLQlmb3IgKHNrID0gbC0+aGVhZDsgc2s7IHNrID0gbDJjYXBfcGkoc2spLT5uZXh0X2MpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoYW4sICZjb25uLT5jaGFuX2wsIGxpc3QpIHsKKwkJc3RydWN0IHNvY2sgKnNrID0gY2hhbi0+c2s7CisKIAkJYmhfbG9ja19zb2NrKHNrKTsKIAogCQlpZiAoY29ubi0+aGNvbi0+dHlwZSA9PSBMRV9MSU5LKSB7CkBAIC02OTIsMzAgKzc3MywzMSBAQAogCQkJc2stPnNrX3N0YXRlID0gQlRfQ09OTkVDVEVEOwogCQkJc2stPnNrX3N0YXRlX2NoYW5nZShzayk7CiAJCX0gZWxzZSBpZiAoc2stPnNrX3N0YXRlID09IEJUX0NPTk5FQ1QpCi0JCQlsMmNhcF9kb19zdGFydChzayk7CisJCQlsMmNhcF9kb19zdGFydChjaGFuKTsKIAogCQliaF91bmxvY2tfc29jayhzayk7CiAJfQogCi0JcmVhZF91bmxvY2soJmwtPmxvY2spOworCXJlYWRfdW5sb2NrKCZjb25uLT5jaGFuX2xvY2spOwogfQogCiAvKiBOb3RpZnkgc29ja2V0cyB0aGF0IHdlIGNhbm5vdCBndWFyYW50eSByZWxpYWJpbGl0eSBhbnltb3JlICovCiBzdGF0aWMgdm9pZCBsMmNhcF9jb25uX3VucmVsaWFibGUoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4sIGludCBlcnIpCiB7Ci0Jc3RydWN0IGwyY2FwX2NoYW5fbGlzdCAqbCA9ICZjb25uLT5jaGFuX2xpc3Q7Ci0Jc3RydWN0IHNvY2sgKnNrOworCXN0cnVjdCBsMmNhcF9jaGFuICpjaGFuOwogCiAJQlRfREJHKCJjb25uICVwIiwgY29ubik7CiAKLQlyZWFkX2xvY2soJmwtPmxvY2spOworCXJlYWRfbG9jaygmY29ubi0+Y2hhbl9sb2NrKTsKIAotCWZvciAoc2sgPSBsLT5oZWFkOyBzazsgc2sgPSBsMmNhcF9waShzayktPm5leHRfYykgewotCQlpZiAobDJjYXBfcGkoc2spLT5mb3JjZV9yZWxpYWJsZSkKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoYW4sICZjb25uLT5jaGFuX2wsIGxpc3QpIHsKKwkJc3RydWN0IHNvY2sgKnNrID0gY2hhbi0+c2s7CisKKwkJaWYgKGNoYW4tPmZvcmNlX3JlbGlhYmxlKQogCQkJc2stPnNrX2VyciA9IGVycjsKIAl9CiAKLQlyZWFkX3VubG9jaygmbC0+bG9jayk7CisJcmVhZF91bmxvY2soJmNvbm4tPmNoYW5fbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIGwyY2FwX2luZm9fdGltZW91dCh1bnNpZ25lZCBsb25nIGFyZykKQEAgLTc1NSw3ICs4MzcsOSBAQAogCWNvbm4tPmZlYXRfbWFzayA9IDA7CiAKIAlzcGluX2xvY2tfaW5pdCgmY29ubi0+bG9jayk7Ci0Jcndsb2NrX2luaXQoJmNvbm4tPmNoYW5fbGlzdC5sb2NrKTsKKwlyd2xvY2tfaW5pdCgmY29ubi0+Y2hhbl9sb2NrKTsKKworCUlOSVRfTElTVF9IRUFEKCZjb25uLT5jaGFuX2wpOwogCiAJaWYgKGhjb24tPnR5cGUgIT0gTEVfTElOSykKIAkJc2V0dXBfdGltZXIoJmNvbm4tPmluZm9fdGltZXIsIGwyY2FwX2luZm9fdGltZW91dCwKQEAgLTc2OSw2ICs4NTMsNyBAQAogc3RhdGljIHZvaWQgbDJjYXBfY29ubl9kZWwoc3RydWN0IGhjaV9jb25uICpoY29uLCBpbnQgZXJyKQogewogCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gaGNvbi0+bDJjYXBfZGF0YTsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgKmw7CiAJc3RydWN0IHNvY2sgKnNrOwogCiAJaWYgKCFjb25uKQpAQCAtNzc5LDkgKzg2NCwxMCBAQAogCWtmcmVlX3NrYihjb25uLT5yeF9za2IpOwogCiAJLyogS2lsbCBjaGFubmVscyAqLwotCXdoaWxlICgoc2sgPSBjb25uLT5jaGFuX2xpc3QuaGVhZCkpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hhbiwgbCwgJmNvbm4tPmNoYW5fbCwgbGlzdCkgeworCQlzayA9IGNoYW4tPnNrOwogCQliaF9sb2NrX3NvY2soc2spOwotCQlsMmNhcF9jaGFuX2RlbChzaywgZXJyKTsKKwkJbDJjYXBfY2hhbl9kZWwoY2hhbiwgZXJyKTsKIAkJYmhfdW5sb2NrX3NvY2soc2spOwogCQlsMmNhcF9zb2NrX2tpbGwoc2spOwogCX0KQEAgLTc5MywxMiArODc5LDExIEBACiAJa2ZyZWUoY29ubik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBsMmNhcF9jaGFuX2FkZChzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqcGFyZW50KQorc3RhdGljIGlubGluZSB2b2lkIGwyY2FwX2NoYW5fYWRkKHN0cnVjdCBsMmNhcF9jb25uICpjb25uLCBzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbikKIHsKLQlzdHJ1Y3QgbDJjYXBfY2hhbl9saXN0ICpsID0gJmNvbm4tPmNoYW5fbGlzdDsKLQl3cml0ZV9sb2NrX2JoKCZsLT5sb2NrKTsKLQlfX2wyY2FwX2NoYW5fYWRkKGNvbm4sIHNrLCBwYXJlbnQpOwotCXdyaXRlX3VubG9ja19iaCgmbC0+bG9jayk7CisJd3JpdGVfbG9ja19iaCgmY29ubi0+Y2hhbl9sb2NrKTsKKwlfX2wyY2FwX2NoYW5fYWRkKGNvbm4sIGNoYW4pOworCXdyaXRlX3VubG9ja19iaCgmY29ubi0+Y2hhbl9sb2NrKTsKIH0KIAogLyogLS0tLSBTb2NrZXQgaW50ZXJmYWNlIC0tLS0gKi8KQEAgLTgwNiwzNSArODkxLDM5IEBACiAvKiBGaW5kIHNvY2tldCB3aXRoIHBzbSBhbmQgc291cmNlIGJkYWRkci4KICAqIFJldHVybnMgY2xvc2VzdCBtYXRjaC4KICAqLwotc3RhdGljIHN0cnVjdCBzb2NrICpsMmNhcF9nZXRfc29ja19ieV9wc20oaW50IHN0YXRlLCBfX2xlMTYgcHNtLCBiZGFkZHJfdCAqc3JjKQorc3RhdGljIHN0cnVjdCBsMmNhcF9jaGFuICpsMmNhcF9nbG9iYWxfY2hhbl9ieV9wc20oaW50IHN0YXRlLCBfX2xlMTYgcHNtLCBiZGFkZHJfdCAqc3JjKQogewotCXN0cnVjdCBzb2NrICpzayA9IE5VTEwsICpzazEgPSBOVUxMOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0cnVjdCBsMmNhcF9jaGFuICpjLCAqYzEgPSBOVUxMOwogCi0JcmVhZF9sb2NrKCZsMmNhcF9za19saXN0LmxvY2spOworCXJlYWRfbG9jaygmY2hhbl9saXN0X2xvY2spOwogCi0Jc2tfZm9yX2VhY2goc2ssIG5vZGUsICZsMmNhcF9za19saXN0LmhlYWQpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZjaGFuX2xpc3QsIGdsb2JhbF9sKSB7CisJCXN0cnVjdCBzb2NrICpzayA9IGMtPnNrOworCiAJCWlmIChzdGF0ZSAmJiBzay0+c2tfc3RhdGUgIT0gc3RhdGUpCiAJCQljb250aW51ZTsKIAotCQlpZiAobDJjYXBfcGkoc2spLT5wc20gPT0gcHNtKSB7CisJCWlmIChjLT5wc20gPT0gcHNtKSB7CiAJCQkvKiBFeGFjdCBtYXRjaC4gKi8KLQkJCWlmICghYmFjbXAoJmJ0X3NrKHNrKS0+c3JjLCBzcmMpKQotCQkJCWJyZWFrOworCQkJaWYgKCFiYWNtcCgmYnRfc2soc2spLT5zcmMsIHNyYykpIHsKKwkJCQlyZWFkX3VubG9ja19iaCgmY2hhbl9saXN0X2xvY2spOworCQkJCXJldHVybiBjOworCQkJfQogCiAJCQkvKiBDbG9zZXN0IG1hdGNoICovCiAJCQlpZiAoIWJhY21wKCZidF9zayhzayktPnNyYywgQkRBRERSX0FOWSkpCi0JCQkJc2sxID0gc2s7CisJCQkJYzEgPSBjOwogCQl9CiAJfQogCi0JcmVhZF91bmxvY2soJmwyY2FwX3NrX2xpc3QubG9jayk7CisJcmVhZF91bmxvY2soJmNoYW5fbGlzdF9sb2NrKTsKIAotCXJldHVybiBub2RlID8gc2sgOiBzazE7CisJcmV0dXJuIGMxOwogfQogCi1pbnQgbDJjYXBfZG9fY29ubmVjdChzdHJ1Y3Qgc29jayAqc2spCitpbnQgbDJjYXBfY2hhbl9jb25uZWN0KHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuKQogeworCXN0cnVjdCBzb2NrICpzayA9IGNoYW4tPnNrOwogCWJkYWRkcl90ICpzcmMgPSAmYnRfc2soc2spLT5zcmM7CiAJYmRhZGRyX3QgKmRzdCA9ICZidF9zayhzayktPmRzdDsKIAlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubjsKQEAgLTg0NCw3ICs5MzMsNyBAQAogCWludCBlcnI7CiAKIAlCVF9EQkcoIiVzIC0+ICVzIHBzbSAweCUyLjJ4IiwgYmF0b3N0cihzcmMpLCBiYXRvc3RyKGRzdCksCi0JCQkJCQkJbDJjYXBfcGkoc2spLT5wc20pOworCQkJCQkJCWNoYW4tPnBzbSk7CiAKIAloZGV2ID0gaGNpX2dldF9yb3V0ZShkc3QsIHNyYyk7CiAJaWYgKCFoZGV2KQpAQCAtODUyLDE0ICs5NDEsMTQgQEAKIAogCWhjaV9kZXZfbG9ja19iaChoZGV2KTsKIAotCWF1dGhfdHlwZSA9IGwyY2FwX2dldF9hdXRoX3R5cGUoc2spOworCWF1dGhfdHlwZSA9IGwyY2FwX2dldF9hdXRoX3R5cGUoY2hhbik7CiAKLQlpZiAobDJjYXBfcGkoc2spLT5kY2lkID09IEwyQ0FQX0NJRF9MRV9EQVRBKQorCWlmIChjaGFuLT5kY2lkID09IEwyQ0FQX0NJRF9MRV9EQVRBKQogCQloY29uID0gaGNpX2Nvbm5lY3QoaGRldiwgTEVfTElOSywgZHN0LAotCQkJCQlsMmNhcF9waShzayktPnNlY19sZXZlbCwgYXV0aF90eXBlKTsKKwkJCQkJY2hhbi0+c2VjX2xldmVsLCBhdXRoX3R5cGUpOwogCWVsc2UKIAkJaGNvbiA9IGhjaV9jb25uZWN0KGhkZXYsIEFDTF9MSU5LLCBkc3QsCi0JCQkJCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsLCBhdXRoX3R5cGUpOworCQkJCQljaGFuLT5zZWNfbGV2ZWwsIGF1dGhfdHlwZSk7CiAKIAlpZiAoSVNfRVJSKGhjb24pKSB7CiAJCWVyciA9IFBUUl9FUlIoaGNvbik7CkBAIC04NzYsNyArOTY1LDcgQEAKIAkvKiBVcGRhdGUgc291cmNlIGFkZHIgb2YgdGhlIHNvY2tldCAqLwogCWJhY3B5KHNyYywgY29ubi0+c3JjKTsKIAotCWwyY2FwX2NoYW5fYWRkKGNvbm4sIHNrLCBOVUxMKTsKKwlsMmNhcF9jaGFuX2FkZChjb25uLCBjaGFuKTsKIAogCXNrLT5za19zdGF0ZSA9IEJUX0NPTk5FQ1Q7CiAJbDJjYXBfc29ja19zZXRfdGltZXIoc2ssIHNrLT5za19zbmR0aW1lbyk7CkBAIC04ODUsMTAgKzk3NCwxMCBAQAogCQlpZiAoc2stPnNrX3R5cGUgIT0gU09DS19TRVFQQUNLRVQgJiYKIAkJCQlzay0+c2tfdHlwZSAhPSBTT0NLX1NUUkVBTSkgewogCQkJbDJjYXBfc29ja19jbGVhcl90aW1lcihzayk7Ci0JCQlpZiAobDJjYXBfY2hlY2tfc2VjdXJpdHkoc2spKQorCQkJaWYgKGwyY2FwX2NoZWNrX3NlY3VyaXR5KGNoYW4pKQogCQkJCXNrLT5za19zdGF0ZSA9IEJUX0NPTk5FQ1RFRDsKIAkJfSBlbHNlCi0JCQlsMmNhcF9kb19zdGFydChzayk7CisJCQlsMmNhcF9kb19zdGFydChjaGFuKTsKIAl9CiAKIAllcnIgPSAwOwpAQCAtOTAxLDEyICs5OTAsMTMgQEAKIAogaW50IF9fbDJjYXBfd2FpdF9hY2soc3RydWN0IHNvY2sgKnNrKQogeworCXN0cnVjdCBsMmNhcF9jaGFuICpjaGFuID0gbDJjYXBfcGkoc2spLT5jaGFuOwogCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwogCWludCBlcnIgPSAwOwogCWludCB0aW1lbyA9IEhaLzU7CiAKIAlhZGRfd2FpdF9xdWV1ZShza19zbGVlcChzayksICZ3YWl0KTsKLQl3aGlsZSAoKGwyY2FwX3BpKHNrKS0+dW5hY2tlZF9mcmFtZXMgPiAwICYmIGwyY2FwX3BpKHNrKS0+Y29ubikpIHsKKwl3aGlsZSAoKGNoYW4tPnVuYWNrZWRfZnJhbWVzID4gMCAmJiBjaGFuLT5jb25uKSkgewogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCiAJCWlmICghdGltZW8pCkBAIC05MzIsNjggKzEwMjIsNjkgQEAKIAogc3RhdGljIHZvaWQgbDJjYXBfbW9uaXRvcl90aW1lb3V0KHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBzb2NrICpzayA9ICh2b2lkICopIGFyZzsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiA9ICh2b2lkICopIGFyZzsKKwlzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLT5zazsKIAotCUJUX0RCRygic2sgJXAiLCBzayk7CisJQlRfREJHKCJjaGFuICVwIiwgY2hhbik7CiAKIAliaF9sb2NrX3NvY2soc2spOwotCWlmIChsMmNhcF9waShzayktPnJldHJ5X2NvdW50ID49IGwyY2FwX3BpKHNrKS0+cmVtb3RlX21heF90eCkgewotCQlsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKGwyY2FwX3BpKHNrKS0+Y29ubiwgc2ssIEVDT05OQUJPUlRFRCk7CisJaWYgKGNoYW4tPnJldHJ5X2NvdW50ID49IGNoYW4tPnJlbW90ZV9tYXhfdHgpIHsKKwkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShjaGFuLT5jb25uLCBjaGFuLCBFQ09OTkFCT1JURUQpOwogCQliaF91bmxvY2tfc29jayhzayk7CiAJCXJldHVybjsKIAl9CiAKLQlsMmNhcF9waShzayktPnJldHJ5X2NvdW50Kys7CisJY2hhbi0+cmV0cnlfY291bnQrKzsKIAlfX21vZF9tb25pdG9yX3RpbWVyKCk7CiAKLQlsMmNhcF9zZW5kX3JyX29yX3JucihsMmNhcF9waShzayksIEwyQ0FQX0NUUkxfUE9MTCk7CisJbDJjYXBfc2VuZF9ycl9vcl9ybnIoY2hhbiwgTDJDQVBfQ1RSTF9QT0xMKTsKIAliaF91bmxvY2tfc29jayhzayk7CiB9CiAKIHN0YXRpYyB2b2lkIGwyY2FwX3JldHJhbnNfdGltZW91dCh1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3Qgc29jayAqc2sgPSAodm9pZCAqKSBhcmc7CisJc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4gPSAodm9pZCAqKSBhcmc7CisJc3RydWN0IHNvY2sgKnNrID0gY2hhbi0+c2s7CiAKLQlCVF9EQkcoInNrICVwIiwgc2spOworCUJUX0RCRygiY2hhbiAlcCIsIGNoYW4pOwogCiAJYmhfbG9ja19zb2NrKHNrKTsKLQlsMmNhcF9waShzayktPnJldHJ5X2NvdW50ID0gMTsKKwljaGFuLT5yZXRyeV9jb3VudCA9IDE7CiAJX19tb2RfbW9uaXRvcl90aW1lcigpOwogCi0JbDJjYXBfcGkoc2spLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fV0FJVF9GOworCWNoYW4tPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9XQUlUX0Y7CiAKLQlsMmNhcF9zZW5kX3JyX29yX3JucihsMmNhcF9waShzayksIEwyQ0FQX0NUUkxfUE9MTCk7CisJbDJjYXBfc2VuZF9ycl9vcl9ybnIoY2hhbiwgTDJDQVBfQ1RSTF9QT0xMKTsKIAliaF91bmxvY2tfc29jayhzayk7CiB9CiAKLXN0YXRpYyB2b2lkIGwyY2FwX2Ryb3BfYWNrZWRfZnJhbWVzKHN0cnVjdCBzb2NrICpzaykKK3N0YXRpYyB2b2lkIGwyY2FwX2Ryb3BfYWNrZWRfZnJhbWVzKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuKQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQl3aGlsZSAoKHNrYiA9IHNrYl9wZWVrKFRYX1FVRVVFKHNrKSkpICYmCi0JCQlsMmNhcF9waShzayktPnVuYWNrZWRfZnJhbWVzKSB7Ci0JCWlmIChidF9jYihza2IpLT50eF9zZXEgPT0gbDJjYXBfcGkoc2spLT5leHBlY3RlZF9hY2tfc2VxKQorCXdoaWxlICgoc2tiID0gc2tiX3BlZWsoJmNoYW4tPnR4X3EpKSAmJgorCQkJY2hhbi0+dW5hY2tlZF9mcmFtZXMpIHsKKwkJaWYgKGJ0X2NiKHNrYiktPnR4X3NlcSA9PSBjaGFuLT5leHBlY3RlZF9hY2tfc2VxKQogCQkJYnJlYWs7CiAKLQkJc2tiID0gc2tiX2RlcXVldWUoVFhfUVVFVUUoc2spKTsKKwkJc2tiID0gc2tiX2RlcXVldWUoJmNoYW4tPnR4X3EpOwogCQlrZnJlZV9za2Ioc2tiKTsKIAotCQlsMmNhcF9waShzayktPnVuYWNrZWRfZnJhbWVzLS07CisJCWNoYW4tPnVuYWNrZWRfZnJhbWVzLS07CiAJfQogCi0JaWYgKCFsMmNhcF9waShzayktPnVuYWNrZWRfZnJhbWVzKQotCQlkZWxfdGltZXIoJmwyY2FwX3BpKHNrKS0+cmV0cmFuc190aW1lcik7CisJaWYgKCFjaGFuLT51bmFja2VkX2ZyYW1lcykKKwkJZGVsX3RpbWVyKCZjaGFuLT5yZXRyYW5zX3RpbWVyKTsKIH0KIAotdm9pZCBsMmNhcF9kb19zZW5kKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3ZvaWQgbDJjYXBfZG9fc2VuZChzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwotCXN0cnVjdCBoY2lfY29ubiAqaGNvbiA9IHBpLT5jb25uLT5oY29uOworCXN0cnVjdCBoY2lfY29ubiAqaGNvbiA9IGNoYW4tPmNvbm4tPmhjb247CiAJdTE2IGZsYWdzOwogCi0JQlRfREJHKCJzayAlcCwgc2tiICVwIGxlbiAlZCIsIHNrLCBza2IsIHNrYi0+bGVuKTsKKwlCVF9EQkcoImNoYW4gJXAsIHNrYiAlcCBsZW4gJWQiLCBjaGFuLCBza2IsIHNrYi0+bGVuKTsKIAotCWlmICghcGktPmZsdXNoYWJsZSAmJiBsbXBfbm9fZmx1c2hfY2FwYWJsZShoY29uLT5oZGV2KSkKKwlpZiAoIWNoYW4tPmZsdXNoYWJsZSAmJiBsbXBfbm9fZmx1c2hfY2FwYWJsZShoY29uLT5oZGV2KSkKIAkJZmxhZ3MgPSBBQ0xfU1RBUlRfTk9fRkxVU0g7CiAJZWxzZQogCQlmbGFncyA9IEFDTF9TVEFSVDsKQEAgLTEwMDEsMzUgKzEwOTIsMzMgQEAKIAloY2lfc2VuZF9hY2woaGNvbiwgc2tiLCBmbGFncyk7CiB9CiAKLXZvaWQgbDJjYXBfc3RyZWFtaW5nX3NlbmQoc3RydWN0IHNvY2sgKnNrKQordm9pZCBsMmNhcF9zdHJlYW1pbmdfc2VuZChzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CiAJdTE2IGNvbnRyb2wsIGZjczsKIAotCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoVFhfUVVFVUUoc2spKSkpIHsKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZjaGFuLT50eF9xKSkpIHsKIAkJY29udHJvbCA9IGdldF91bmFsaWduZWRfbGUxNihza2ItPmRhdGEgKyBMMkNBUF9IRFJfU0laRSk7Ci0JCWNvbnRyb2wgfD0gcGktPm5leHRfdHhfc2VxIDw8IEwyQ0FQX0NUUkxfVFhTRVFfU0hJRlQ7CisJCWNvbnRyb2wgfD0gY2hhbi0+bmV4dF90eF9zZXEgPDwgTDJDQVBfQ1RSTF9UWFNFUV9TSElGVDsKIAkJcHV0X3VuYWxpZ25lZF9sZTE2KGNvbnRyb2wsIHNrYi0+ZGF0YSArIEwyQ0FQX0hEUl9TSVpFKTsKIAotCQlpZiAocGktPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpIHsKKwkJaWYgKGNoYW4tPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpIHsKIAkJCWZjcyA9IGNyYzE2KDAsICh1OCAqKXNrYi0+ZGF0YSwgc2tiLT5sZW4gLSAyKTsKIAkJCXB1dF91bmFsaWduZWRfbGUxNihmY3MsIHNrYi0+ZGF0YSArIHNrYi0+bGVuIC0gMik7CiAJCX0KIAotCQlsMmNhcF9kb19zZW5kKHNrLCBza2IpOworCQlsMmNhcF9kb19zZW5kKGNoYW4sIHNrYik7CiAKLQkJcGktPm5leHRfdHhfc2VxID0gKHBpLT5uZXh0X3R4X3NlcSArIDEpICUgNjQ7CisJCWNoYW4tPm5leHRfdHhfc2VxID0gKGNoYW4tPm5leHRfdHhfc2VxICsgMSkgJSA2NDsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGwyY2FwX3JldHJhbnNtaXRfb25lX2ZyYW1lKHN0cnVjdCBzb2NrICpzaywgdTggdHhfc2VxKQorc3RhdGljIHZvaWQgbDJjYXBfcmV0cmFuc21pdF9vbmVfZnJhbWUoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sIHU4IHR4X3NlcSkKIHsKLQlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwogCXN0cnVjdCBza19idWZmICpza2IsICp0eF9za2I7CiAJdTE2IGNvbnRyb2wsIGZjczsKIAotCXNrYiA9IHNrYl9wZWVrKFRYX1FVRVVFKHNrKSk7CisJc2tiID0gc2tiX3BlZWsoJmNoYW4tPnR4X3EpOwogCWlmICghc2tiKQogCQlyZXR1cm47CiAKQEAgLTEwMzcsNTQgKzExMjYsNTUgQEAKIAkJaWYgKGJ0X2NiKHNrYiktPnR4X3NlcSA9PSB0eF9zZXEpCiAJCQlicmVhazsKIAotCQlpZiAoc2tiX3F1ZXVlX2lzX2xhc3QoVFhfUVVFVUUoc2spLCBza2IpKQorCQlpZiAoc2tiX3F1ZXVlX2lzX2xhc3QoJmNoYW4tPnR4X3EsIHNrYikpCiAJCQlyZXR1cm47CiAKLQl9IHdoaWxlICgoc2tiID0gc2tiX3F1ZXVlX25leHQoVFhfUVVFVUUoc2spLCBza2IpKSk7CisJfSB3aGlsZSAoKHNrYiA9IHNrYl9xdWV1ZV9uZXh0KCZjaGFuLT50eF9xLCBza2IpKSk7CiAKLQlpZiAocGktPnJlbW90ZV9tYXhfdHggJiYKLQkJCWJ0X2NiKHNrYiktPnJldHJpZXMgPT0gcGktPnJlbW90ZV9tYXhfdHgpIHsKLQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShwaS0+Y29ubiwgc2ssIEVDT05OQUJPUlRFRCk7CisJaWYgKGNoYW4tPnJlbW90ZV9tYXhfdHggJiYKKwkJCWJ0X2NiKHNrYiktPnJldHJpZXMgPT0gY2hhbi0+cmVtb3RlX21heF90eCkgeworCQlsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKGNoYW4tPmNvbm4sIGNoYW4sIEVDT05OQUJPUlRFRCk7CiAJCXJldHVybjsKIAl9CiAKIAl0eF9za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKIAlidF9jYihza2IpLT5yZXRyaWVzKys7CiAJY29udHJvbCA9IGdldF91bmFsaWduZWRfbGUxNih0eF9za2ItPmRhdGEgKyBMMkNBUF9IRFJfU0laRSk7CisJY29udHJvbCAmPSBMMkNBUF9DVFJMX1NBUjsKIAotCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fU0VORF9GQklUKSB7CisJaWYgKGNoYW4tPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NFTkRfRkJJVCkgewogCQljb250cm9sIHw9IEwyQ0FQX0NUUkxfRklOQUw7Ci0JCXBpLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1NFTkRfRkJJVDsKKwkJY2hhbi0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9TRU5EX0ZCSVQ7CiAJfQogCi0JY29udHJvbCB8PSAocGktPmJ1ZmZlcl9zZXEgPDwgTDJDQVBfQ1RSTF9SRVFTRVFfU0hJRlQpCisJY29udHJvbCB8PSAoY2hhbi0+YnVmZmVyX3NlcSA8PCBMMkNBUF9DVFJMX1JFUVNFUV9TSElGVCkKIAkJCXwgKHR4X3NlcSA8PCBMMkNBUF9DVFJMX1RYU0VRX1NISUZUKTsKIAogCXB1dF91bmFsaWduZWRfbGUxNihjb250cm9sLCB0eF9za2ItPmRhdGEgKyBMMkNBUF9IRFJfU0laRSk7CiAKLQlpZiAocGktPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpIHsKKwlpZiAoY2hhbi0+ZmNzID09IEwyQ0FQX0ZDU19DUkMxNikgewogCQlmY3MgPSBjcmMxNigwLCAodTggKil0eF9za2ItPmRhdGEsIHR4X3NrYi0+bGVuIC0gMik7CiAJCXB1dF91bmFsaWduZWRfbGUxNihmY3MsIHR4X3NrYi0+ZGF0YSArIHR4X3NrYi0+bGVuIC0gMik7CiAJfQogCi0JbDJjYXBfZG9fc2VuZChzaywgdHhfc2tiKTsKKwlsMmNhcF9kb19zZW5kKGNoYW4sIHR4X3NrYik7CiB9CiAKLWludCBsMmNhcF9lcnRtX3NlbmQoc3RydWN0IHNvY2sgKnNrKQoraW50IGwyY2FwX2VydG1fc2VuZChzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdHhfc2tiOwotCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CisJc3RydWN0IHNvY2sgKnNrID0gY2hhbi0+c2s7CiAJdTE2IGNvbnRyb2wsIGZjczsKIAlpbnQgbnNlbnQgPSAwOwogCiAJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9DT05ORUNURUQpCiAJCXJldHVybiAtRU5PVENPTk47CiAKLQl3aGlsZSAoKHNrYiA9IHNrLT5za19zZW5kX2hlYWQpICYmICghbDJjYXBfdHhfd2luZG93X2Z1bGwoc2spKSkgeworCXdoaWxlICgoc2tiID0gY2hhbi0+dHhfc2VuZF9oZWFkKSAmJiAoIWwyY2FwX3R4X3dpbmRvd19mdWxsKGNoYW4pKSkgewogCi0JCWlmIChwaS0+cmVtb3RlX21heF90eCAmJgotCQkJCWJ0X2NiKHNrYiktPnJldHJpZXMgPT0gcGktPnJlbW90ZV9tYXhfdHgpIHsKLQkJCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEocGktPmNvbm4sIHNrLCBFQ09OTkFCT1JURUQpOworCQlpZiAoY2hhbi0+cmVtb3RlX21heF90eCAmJgorCQkJCWJ0X2NiKHNrYiktPnJldHJpZXMgPT0gY2hhbi0+cmVtb3RlX21heF90eCkgeworCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShjaGFuLT5jb25uLCBjaGFuLCBFQ09OTkFCT1JURUQpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTA5NSwzNiArMTE4NSwzNiBAQAogCQljb250cm9sID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHR4X3NrYi0+ZGF0YSArIEwyQ0FQX0hEUl9TSVpFKTsKIAkJY29udHJvbCAmPSBMMkNBUF9DVFJMX1NBUjsKIAotCQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NFTkRfRkJJVCkgeworCQlpZiAoY2hhbi0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fU0VORF9GQklUKSB7CiAJCQljb250cm9sIHw9IEwyQ0FQX0NUUkxfRklOQUw7Ci0JCQlwaS0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9TRU5EX0ZCSVQ7CisJCQljaGFuLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1NFTkRfRkJJVDsKIAkJfQotCQljb250cm9sIHw9IChwaS0+YnVmZmVyX3NlcSA8PCBMMkNBUF9DVFJMX1JFUVNFUV9TSElGVCkKLQkJCQl8IChwaS0+bmV4dF90eF9zZXEgPDwgTDJDQVBfQ1RSTF9UWFNFUV9TSElGVCk7CisJCWNvbnRyb2wgfD0gKGNoYW4tPmJ1ZmZlcl9zZXEgPDwgTDJDQVBfQ1RSTF9SRVFTRVFfU0hJRlQpCisJCQkJfCAoY2hhbi0+bmV4dF90eF9zZXEgPDwgTDJDQVBfQ1RSTF9UWFNFUV9TSElGVCk7CiAJCXB1dF91bmFsaWduZWRfbGUxNihjb250cm9sLCB0eF9za2ItPmRhdGEgKyBMMkNBUF9IRFJfU0laRSk7CiAKIAotCQlpZiAocGktPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpIHsKKwkJaWYgKGNoYW4tPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpIHsKIAkJCWZjcyA9IGNyYzE2KDAsICh1OCAqKXNrYi0+ZGF0YSwgdHhfc2tiLT5sZW4gLSAyKTsKIAkJCXB1dF91bmFsaWduZWRfbGUxNihmY3MsIHNrYi0+ZGF0YSArIHR4X3NrYi0+bGVuIC0gMik7CiAJCX0KIAotCQlsMmNhcF9kb19zZW5kKHNrLCB0eF9za2IpOworCQlsMmNhcF9kb19zZW5kKGNoYW4sIHR4X3NrYik7CiAKIAkJX19tb2RfcmV0cmFuc190aW1lcigpOwogCi0JCWJ0X2NiKHNrYiktPnR4X3NlcSA9IHBpLT5uZXh0X3R4X3NlcTsKLQkJcGktPm5leHRfdHhfc2VxID0gKHBpLT5uZXh0X3R4X3NlcSArIDEpICUgNjQ7CisJCWJ0X2NiKHNrYiktPnR4X3NlcSA9IGNoYW4tPm5leHRfdHhfc2VxOworCQljaGFuLT5uZXh0X3R4X3NlcSA9IChjaGFuLT5uZXh0X3R4X3NlcSArIDEpICUgNjQ7CiAKIAkJaWYgKGJ0X2NiKHNrYiktPnJldHJpZXMgPT0gMSkKLQkJCXBpLT51bmFja2VkX2ZyYW1lcysrOworCQkJY2hhbi0+dW5hY2tlZF9mcmFtZXMrKzsKIAotCQlwaS0+ZnJhbWVzX3NlbnQrKzsKKwkJY2hhbi0+ZnJhbWVzX3NlbnQrKzsKIAotCQlpZiAoc2tiX3F1ZXVlX2lzX2xhc3QoVFhfUVVFVUUoc2spLCBza2IpKQotCQkJc2stPnNrX3NlbmRfaGVhZCA9IE5VTEw7CisJCWlmIChza2JfcXVldWVfaXNfbGFzdCgmY2hhbi0+dHhfcSwgc2tiKSkKKwkJCWNoYW4tPnR4X3NlbmRfaGVhZCA9IE5VTEw7CiAJCWVsc2UKLQkJCXNrLT5za19zZW5kX2hlYWQgPSBza2JfcXVldWVfbmV4dChUWF9RVUVVRShzayksIHNrYik7CisJCQljaGFuLT50eF9zZW5kX2hlYWQgPSBza2JfcXVldWVfbmV4dCgmY2hhbi0+dHhfcSwgc2tiKTsKIAogCQluc2VudCsrOwogCX0KQEAgLTExMzIsNDEgKzEyMjIsMzkgQEAKIAlyZXR1cm4gbnNlbnQ7CiB9CiAKLXN0YXRpYyBpbnQgbDJjYXBfcmV0cmFuc21pdF9mcmFtZXMoc3RydWN0IHNvY2sgKnNrKQorc3RhdGljIGludCBsMmNhcF9yZXRyYW5zbWl0X2ZyYW1lcyhzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbikKIHsKLQlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwogCWludCByZXQ7CiAKLQlpZiAoIXNrYl9xdWV1ZV9lbXB0eShUWF9RVUVVRShzaykpKQotCQlzay0+c2tfc2VuZF9oZWFkID0gVFhfUVVFVUUoc2spLT5uZXh0OworCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZjaGFuLT50eF9xKSkKKwkJY2hhbi0+dHhfc2VuZF9oZWFkID0gY2hhbi0+dHhfcS5uZXh0OwogCi0JcGktPm5leHRfdHhfc2VxID0gcGktPmV4cGVjdGVkX2Fja19zZXE7Ci0JcmV0ID0gbDJjYXBfZXJ0bV9zZW5kKHNrKTsKKwljaGFuLT5uZXh0X3R4X3NlcSA9IGNoYW4tPmV4cGVjdGVkX2Fja19zZXE7CisJcmV0ID0gbDJjYXBfZXJ0bV9zZW5kKGNoYW4pOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGwyY2FwX3NlbmRfYWNrKHN0cnVjdCBsMmNhcF9waW5mbyAqcGkpCitzdGF0aWMgdm9pZCBsMmNhcF9zZW5kX2FjayhzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbikKIHsKLQlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKilwaTsKIAl1MTYgY29udHJvbCA9IDA7CiAKLQljb250cm9sIHw9IHBpLT5idWZmZXJfc2VxIDw8IEwyQ0FQX0NUUkxfUkVRU0VRX1NISUZUOworCWNvbnRyb2wgfD0gY2hhbi0+YnVmZmVyX3NlcSA8PCBMMkNBUF9DVFJMX1JFUVNFUV9TSElGVDsKIAotCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fTE9DQUxfQlVTWSkgeworCWlmIChjaGFuLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9MT0NBTF9CVVNZKSB7CiAJCWNvbnRyb2wgfD0gTDJDQVBfU1VQRVJfUkNWX05PVF9SRUFEWTsKLQkJcGktPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9STlJfU0VOVDsKLQkJbDJjYXBfc2VuZF9zZnJhbWUocGksIGNvbnRyb2wpOworCQljaGFuLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fUk5SX1NFTlQ7CisJCWwyY2FwX3NlbmRfc2ZyYW1lKGNoYW4sIGNvbnRyb2wpOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKGwyY2FwX2VydG1fc2VuZChzaykgPiAwKQorCWlmIChsMmNhcF9lcnRtX3NlbmQoY2hhbikgPiAwKQogCQlyZXR1cm47CiAKIAljb250cm9sIHw9IEwyQ0FQX1NVUEVSX1JDVl9SRUFEWTsKLQlsMmNhcF9zZW5kX3NmcmFtZShwaSwgY29udHJvbCk7CisJbDJjYXBfc2VuZF9zZnJhbWUoY2hhbiwgY29udHJvbCk7CiB9CiAKLXN0YXRpYyB2b2lkIGwyY2FwX3NlbmRfc3JlanRhaWwoc3RydWN0IHNvY2sgKnNrKQorc3RhdGljIHZvaWQgbDJjYXBfc2VuZF9zcmVqdGFpbChzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbikKIHsKIAlzdHJ1Y3Qgc3Jlal9saXN0ICp0YWlsOwogCXUxNiBjb250cm9sOwpAQCAtMTE3NCwxNSArMTI2MiwxNSBAQAogCWNvbnRyb2wgPSBMMkNBUF9TVVBFUl9TRUxFQ1RfUkVKRUNUOwogCWNvbnRyb2wgfD0gTDJDQVBfQ1RSTF9GSU5BTDsKIAotCXRhaWwgPSBsaXN0X2VudHJ5KFNSRUpfTElTVChzayktPnByZXYsIHN0cnVjdCBzcmVqX2xpc3QsIGxpc3QpOworCXRhaWwgPSBsaXN0X2VudHJ5KCgmY2hhbi0+c3Jlal9sKS0+cHJldiwgc3RydWN0IHNyZWpfbGlzdCwgbGlzdCk7CiAJY29udHJvbCB8PSB0YWlsLT50eF9zZXEgPDwgTDJDQVBfQ1RSTF9SRVFTRVFfU0hJRlQ7CiAKLQlsMmNhcF9zZW5kX3NmcmFtZShsMmNhcF9waShzayksIGNvbnRyb2wpOworCWwyY2FwX3NlbmRfc2ZyYW1lKGNoYW4sIGNvbnRyb2wpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBsMmNhcF9za2J1ZmZfZnJvbWlvdmVjKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLCBpbnQgY291bnQsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNvbm47CisJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNoYW4tPmNvbm47CiAJc3RydWN0IHNrX2J1ZmYgKipmcmFnOwogCWludCBlcnIsIHNlbnQgPSAwOwogCkBAIC0xMjEyLDkgKzEzMDAsMTAgQEAKIAlyZXR1cm4gc2VudDsKIH0KIAotc3RydWN0IHNrX2J1ZmYgKmwyY2FwX2NyZWF0ZV9jb25ubGVzc19wZHUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCitzdHJ1Y3Qgc2tfYnVmZiAqbDJjYXBfY3JlYXRlX2Nvbm5sZXNzX3BkdShzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKQogewotCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gbDJjYXBfcGkoc2spLT5jb25uOworCXN0cnVjdCBzb2NrICpzayA9IGNoYW4tPnNrOworCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gY2hhbi0+Y29ubjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBlcnIsIGNvdW50LCBobGVuID0gTDJDQVBfSERSX1NJWkUgKyAyOwogCXN0cnVjdCBsMmNhcF9oZHIgKmxoOwpAQCAtMTIyOSw5ICsxMzE4LDkgQEAKIAogCS8qIENyZWF0ZSBMMkNBUCBoZWFkZXIgKi8KIAlsaCA9IChzdHJ1Y3QgbDJjYXBfaGRyICopIHNrYl9wdXQoc2tiLCBMMkNBUF9IRFJfU0laRSk7Ci0JbGgtPmNpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+ZGNpZCk7CisJbGgtPmNpZCA9IGNwdV90b19sZTE2KGNoYW4tPmRjaWQpOwogCWxoLT5sZW4gPSBjcHVfdG9fbGUxNihsZW4gKyAoaGxlbiAtIEwyQ0FQX0hEUl9TSVpFKSk7Ci0JcHV0X3VuYWxpZ25lZF9sZTE2KGwyY2FwX3BpKHNrKS0+cHNtLCBza2JfcHV0KHNrYiwgMikpOworCXB1dF91bmFsaWduZWRfbGUxNihjaGFuLT5wc20sIHNrYl9wdXQoc2tiLCAyKSk7CiAKIAllcnIgPSBsMmNhcF9za2J1ZmZfZnJvbWlvdmVjKHNrLCBtc2csIGxlbiwgY291bnQsIHNrYik7CiAJaWYgKHVubGlrZWx5KGVyciA8IDApKSB7CkBAIC0xMjQxLDkgKzEzMzAsMTAgQEAKIAlyZXR1cm4gc2tiOwogfQogCi1zdHJ1Y3Qgc2tfYnVmZiAqbDJjYXBfY3JlYXRlX2Jhc2ljX3BkdShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbikKK3N0cnVjdCBza19idWZmICpsMmNhcF9jcmVhdGVfYmFzaWNfcGR1KHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiB7Ci0Jc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNvbm47CisJc3RydWN0IHNvY2sgKnNrID0gY2hhbi0+c2s7CisJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBjaGFuLT5jb25uOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IGVyciwgY291bnQsIGhsZW4gPSBMMkNBUF9IRFJfU0laRTsKIAlzdHJ1Y3QgbDJjYXBfaGRyICpsaDsKQEAgLTEyNTgsNyArMTM0OCw3IEBACiAKIAkvKiBDcmVhdGUgTDJDQVAgaGVhZGVyICovCiAJbGggPSAoc3RydWN0IGwyY2FwX2hkciAqKSBza2JfcHV0KHNrYiwgTDJDQVBfSERSX1NJWkUpOwotCWxoLT5jaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPmRjaWQpOworCWxoLT5jaWQgPSBjcHVfdG9fbGUxNihjaGFuLT5kY2lkKTsKIAlsaC0+bGVuID0gY3B1X3RvX2xlMTYobGVuICsgKGhsZW4gLSBMMkNBUF9IRFJfU0laRSkpOwogCiAJZXJyID0gbDJjYXBfc2tidWZmX2Zyb21pb3ZlYyhzaywgbXNnLCBsZW4sIGNvdW50LCBza2IpOwpAQCAtMTI2OSw5ICsxMzU5LDEwIEBACiAJcmV0dXJuIHNrYjsKIH0KIAotc3RydWN0IHNrX2J1ZmYgKmwyY2FwX2NyZWF0ZV9pZnJhbWVfcGR1KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCB1MTYgY29udHJvbCwgdTE2IHNkdWxlbikKK3N0cnVjdCBza19idWZmICpsMmNhcF9jcmVhdGVfaWZyYW1lX3BkdShzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCB1MTYgY29udHJvbCwgdTE2IHNkdWxlbikKIHsKLQlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKKwlzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLT5zazsKKwlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGNoYW4tPmNvbm47CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgZXJyLCBjb3VudCwgaGxlbiA9IEwyQ0FQX0hEUl9TSVpFICsgMjsKIAlzdHJ1Y3QgbDJjYXBfaGRyICpsaDsKQEAgLTEyODQsNyArMTM3NSw3IEBACiAJaWYgKHNkdWxlbikKIAkJaGxlbiArPSAyOwogCi0JaWYgKGwyY2FwX3BpKHNrKS0+ZmNzID09IEwyQ0FQX0ZDU19DUkMxNikKKwlpZiAoY2hhbi0+ZmNzID09IEwyQ0FQX0ZDU19DUkMxNikKIAkJaGxlbiArPSAyOwogCiAJY291bnQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIChjb25uLT5tdHUgLSBobGVuKSwgbGVuKTsKQEAgLTEyOTUsNyArMTM4Niw3IEBACiAKIAkvKiBDcmVhdGUgTDJDQVAgaGVhZGVyICovCiAJbGggPSAoc3RydWN0IGwyY2FwX2hkciAqKSBza2JfcHV0KHNrYiwgTDJDQVBfSERSX1NJWkUpOwotCWxoLT5jaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPmRjaWQpOworCWxoLT5jaWQgPSBjcHVfdG9fbGUxNihjaGFuLT5kY2lkKTsKIAlsaC0+bGVuID0gY3B1X3RvX2xlMTYobGVuICsgKGhsZW4gLSBMMkNBUF9IRFJfU0laRSkpOwogCXB1dF91bmFsaWduZWRfbGUxNihjb250cm9sLCBza2JfcHV0KHNrYiwgMikpOwogCWlmIChzZHVsZW4pCkBAIC0xMzA3LDE2ICsxMzk4LDE1IEBACiAJCXJldHVybiBFUlJfUFRSKGVycik7CiAJfQogCi0JaWYgKGwyY2FwX3BpKHNrKS0+ZmNzID09IEwyQ0FQX0ZDU19DUkMxNikKKwlpZiAoY2hhbi0+ZmNzID09IEwyQ0FQX0ZDU19DUkMxNikKIAkJcHV0X3VuYWxpZ25lZF9sZTE2KDAsIHNrYl9wdXQoc2tiLCAyKSk7CiAKIAlidF9jYihza2IpLT5yZXRyaWVzID0gMDsKIAlyZXR1cm4gc2tiOwogfQogCi1pbnQgbDJjYXBfc2FyX3NlZ21lbnRfc2R1KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKQoraW50IGwyY2FwX3Nhcl9zZWdtZW50X3NkdShzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKQogewotCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNhcl9xdWV1ZTsKIAl1MTYgY29udHJvbDsKQEAgLTEzMjQsMjYgKzE0MTQsMjYgQEAKIAogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnNhcl9xdWV1ZSk7CiAJY29udHJvbCA9IEwyQ0FQX1NEVV9TVEFSVDsKLQlza2IgPSBsMmNhcF9jcmVhdGVfaWZyYW1lX3BkdShzaywgbXNnLCBwaS0+cmVtb3RlX21wcywgY29udHJvbCwgbGVuKTsKKwlza2IgPSBsMmNhcF9jcmVhdGVfaWZyYW1lX3BkdShjaGFuLCBtc2csIGNoYW4tPnJlbW90ZV9tcHMsIGNvbnRyb2wsIGxlbik7CiAJaWYgKElTX0VSUihza2IpKQogCQlyZXR1cm4gUFRSX0VSUihza2IpOwogCiAJX19za2JfcXVldWVfdGFpbCgmc2FyX3F1ZXVlLCBza2IpOwotCWxlbiAtPSBwaS0+cmVtb3RlX21wczsKLQlzaXplICs9IHBpLT5yZW1vdGVfbXBzOworCWxlbiAtPSBjaGFuLT5yZW1vdGVfbXBzOworCXNpemUgKz0gY2hhbi0+cmVtb3RlX21wczsKIAogCXdoaWxlIChsZW4gPiAwKSB7CiAJCXNpemVfdCBidWZsZW47CiAKLQkJaWYgKGxlbiA+IHBpLT5yZW1vdGVfbXBzKSB7CisJCWlmIChsZW4gPiBjaGFuLT5yZW1vdGVfbXBzKSB7CiAJCQljb250cm9sID0gTDJDQVBfU0RVX0NPTlRJTlVFOwotCQkJYnVmbGVuID0gcGktPnJlbW90ZV9tcHM7CisJCQlidWZsZW4gPSBjaGFuLT5yZW1vdGVfbXBzOwogCQl9IGVsc2UgewogCQkJY29udHJvbCA9IEwyQ0FQX1NEVV9FTkQ7CiAJCQlidWZsZW4gPSBsZW47CiAJCX0KIAotCQlza2IgPSBsMmNhcF9jcmVhdGVfaWZyYW1lX3BkdShzaywgbXNnLCBidWZsZW4sIGNvbnRyb2wsIDApOworCQlza2IgPSBsMmNhcF9jcmVhdGVfaWZyYW1lX3BkdShjaGFuLCBtc2csIGJ1ZmxlbiwgY29udHJvbCwgMCk7CiAJCWlmIChJU19FUlIoc2tiKSkgewogCQkJc2tiX3F1ZXVlX3B1cmdlKCZzYXJfcXVldWUpOwogCQkJcmV0dXJuIFBUUl9FUlIoc2tiKTsKQEAgLTEzNTMsOSArMTQ0Myw5IEBACiAJCWxlbiAtPSBidWZsZW47CiAJCXNpemUgKz0gYnVmbGVuOwogCX0KLQlza2JfcXVldWVfc3BsaWNlX3RhaWwoJnNhcl9xdWV1ZSwgVFhfUVVFVUUoc2spKTsKLQlpZiAoc2stPnNrX3NlbmRfaGVhZCA9PSBOVUxMKQotCQlzay0+c2tfc2VuZF9oZWFkID0gc2FyX3F1ZXVlLm5leHQ7CisJc2tiX3F1ZXVlX3NwbGljZV90YWlsKCZzYXJfcXVldWUsICZjaGFuLT50eF9xKTsKKwlpZiAoY2hhbi0+dHhfc2VuZF9oZWFkID09IE5VTEwpCisJCWNoYW4tPnR4X3NlbmRfaGVhZCA9IHNhcl9xdWV1ZS5uZXh0OwogCiAJcmV0dXJuIHNpemU7CiB9CkBAIC0xMzYzLDEwICsxNDUzLDExIEBACiBzdGF0aWMgdm9pZCBsMmNhcF9jaGFuX3JlYWR5KHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3Qgc29jayAqcGFyZW50ID0gYnRfc2soc2spLT5wYXJlbnQ7CisJc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4gPSBsMmNhcF9waShzayktPmNoYW47CiAKIAlCVF9EQkcoInNrICVwLCBwYXJlbnQgJXAiLCBzaywgcGFyZW50KTsKIAotCWwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSA9IDA7CisJY2hhbi0+Y29uZl9zdGF0ZSA9IDA7CiAJbDJjYXBfc29ja19jbGVhcl90aW1lcihzayk7CiAKIAlpZiAoIXBhcmVudCkgewpAQCAtMTM4NiwxNCArMTQ3NywxNCBAQAogLyogQ29weSBmcmFtZSB0byBhbGwgcmF3IHNvY2tldHMgb24gdGhhdCBjb25uZWN0aW9uICovCiBzdGF0aWMgdm9pZCBsMmNhcF9yYXdfcmVjdihzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgbDJjYXBfY2hhbl9saXN0ICpsID0gJmNvbm4tPmNoYW5fbGlzdDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKLQlzdHJ1Y3Qgc29jayAqc2s7CisJc3RydWN0IGwyY2FwX2NoYW4gKmNoYW47CiAKIAlCVF9EQkcoImNvbm4gJXAiLCBjb25uKTsKIAotCXJlYWRfbG9jaygmbC0+bG9jayk7Ci0JZm9yIChzayA9IGwtPmhlYWQ7IHNrOyBzayA9IGwyY2FwX3BpKHNrKS0+bmV4dF9jKSB7CisJcmVhZF9sb2NrKCZjb25uLT5jaGFuX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhbiwgJmNvbm4tPmNoYW5fbCwgbGlzdCkgeworCQlzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLT5zazsKIAkJaWYgKHNrLT5za190eXBlICE9IFNPQ0tfUkFXKQogCQkJY29udGludWU7CiAKQEAgLTE0MDcsNyArMTQ5OCw3IEBACiAJCWlmIChzb2NrX3F1ZXVlX3Jjdl9za2Ioc2ssIG5za2IpKQogCQkJa2ZyZWVfc2tiKG5za2IpOwogCX0KLQlyZWFkX3VubG9jaygmbC0+bG9jayk7CisJcmVhZF91bmxvY2soJmNvbm4tPmNoYW5fbG9jayk7CiB9CiAKIC8qIC0tLS0gTDJDQVAgc2lnbmFsbGluZyBjb21tYW5kcyAtLS0tICovCkBAIC0xNTM5LDMyICsxNjMwLDM1IEBACiAKIHN0YXRpYyB2b2lkIGwyY2FwX2Fja190aW1lb3V0KHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBzb2NrICpzayA9ICh2b2lkICopIGFyZzsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiA9ICh2b2lkICopIGFyZzsKIAotCWJoX2xvY2tfc29jayhzayk7Ci0JbDJjYXBfc2VuZF9hY2sobDJjYXBfcGkoc2spKTsKLQliaF91bmxvY2tfc29jayhzayk7CisJYmhfbG9ja19zb2NrKGNoYW4tPnNrKTsKKwlsMmNhcF9zZW5kX2FjayhjaGFuKTsKKwliaF91bmxvY2tfc29jayhjaGFuLT5zayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBsMmNhcF9lcnRtX2luaXQoc3RydWN0IHNvY2sgKnNrKQorc3RhdGljIGlubGluZSB2b2lkIGwyY2FwX2VydG1faW5pdChzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbikKIHsKLQlsMmNhcF9waShzayktPmV4cGVjdGVkX2Fja19zZXEgPSAwOwotCWwyY2FwX3BpKHNrKS0+dW5hY2tlZF9mcmFtZXMgPSAwOwotCWwyY2FwX3BpKHNrKS0+YnVmZmVyX3NlcSA9IDA7Ci0JbDJjYXBfcGkoc2spLT5udW1fYWNrZWQgPSAwOwotCWwyY2FwX3BpKHNrKS0+ZnJhbWVzX3NlbnQgPSAwOworCXN0cnVjdCBzb2NrICpzayA9IGNoYW4tPnNrOwogCi0Jc2V0dXBfdGltZXIoJmwyY2FwX3BpKHNrKS0+cmV0cmFuc190aW1lciwKLQkJCWwyY2FwX3JldHJhbnNfdGltZW91dCwgKHVuc2lnbmVkIGxvbmcpIHNrKTsKLQlzZXR1cF90aW1lcigmbDJjYXBfcGkoc2spLT5tb25pdG9yX3RpbWVyLAotCQkJbDJjYXBfbW9uaXRvcl90aW1lb3V0LCAodW5zaWduZWQgbG9uZykgc2spOwotCXNldHVwX3RpbWVyKCZsMmNhcF9waShzayktPmFja190aW1lciwKLQkJCWwyY2FwX2Fja190aW1lb3V0LCAodW5zaWduZWQgbG9uZykgc2spOworCWNoYW4tPmV4cGVjdGVkX2Fja19zZXEgPSAwOworCWNoYW4tPnVuYWNrZWRfZnJhbWVzID0gMDsKKwljaGFuLT5idWZmZXJfc2VxID0gMDsKKwljaGFuLT5udW1fYWNrZWQgPSAwOworCWNoYW4tPmZyYW1lc19zZW50ID0gMDsKIAotCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdChTUkVKX1FVRVVFKHNrKSk7Ci0JX19za2JfcXVldWVfaGVhZF9pbml0KEJVU1lfUVVFVUUoc2spKTsKKwlzZXR1cF90aW1lcigmY2hhbi0+cmV0cmFuc190aW1lciwgbDJjYXBfcmV0cmFuc190aW1lb3V0LAorCQkJCQkJCSh1bnNpZ25lZCBsb25nKSBjaGFuKTsKKwlzZXR1cF90aW1lcigmY2hhbi0+bW9uaXRvcl90aW1lciwgbDJjYXBfbW9uaXRvcl90aW1lb3V0LAorCQkJCQkJCSh1bnNpZ25lZCBsb25nKSBjaGFuKTsKKwlzZXR1cF90aW1lcigmY2hhbi0+YWNrX3RpbWVyLCBsMmNhcF9hY2tfdGltZW91dCwgKHVuc2lnbmVkIGxvbmcpIGNoYW4pOwogCi0JSU5JVF9XT1JLKCZsMmNhcF9waShzayktPmJ1c3lfd29yaywgbDJjYXBfYnVzeV93b3JrKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZjaGFuLT5zcmVqX3EpOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmNoYW4tPmJ1c3lfcSk7CisKKwlJTklUX0xJU1RfSEVBRCgmY2hhbi0+c3Jlal9sKTsKKworCUlOSVRfV09SSygmY2hhbi0+YnVzeV93b3JrLCBsMmNhcF9idXN5X3dvcmspOwogCiAJc2stPnNrX2JhY2tsb2dfcmN2ID0gbDJjYXBfZXJ0bV9kYXRhX3JjdjsKIH0KQEAgLTE1ODIsMzggKzE2NzYsMzcgQEAKIAl9CiB9CiAKLWludCBsMmNhcF9idWlsZF9jb25mX3JlcShzdHJ1Y3Qgc29jayAqc2ssIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGwyY2FwX2J1aWxkX2NvbmZfcmVxKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CiAJc3RydWN0IGwyY2FwX2NvbmZfcmVxICpyZXEgPSBkYXRhOwotCXN0cnVjdCBsMmNhcF9jb25mX3JmYyByZmMgPSB7IC5tb2RlID0gcGktPm1vZGUgfTsKKwlzdHJ1Y3QgbDJjYXBfY29uZl9yZmMgcmZjID0geyAubW9kZSA9IGNoYW4tPm1vZGUgfTsKIAl2b2lkICpwdHIgPSByZXEtPmRhdGE7CiAKLQlCVF9EQkcoInNrICVwIiwgc2spOworCUJUX0RCRygiY2hhbiAlcCIsIGNoYW4pOwogCi0JaWYgKHBpLT5udW1fY29uZl9yZXEgfHwgcGktPm51bV9jb25mX3JzcCkKKwlpZiAoY2hhbi0+bnVtX2NvbmZfcmVxIHx8IGNoYW4tPm51bV9jb25mX3JzcCkKIAkJZ290byBkb25lOwogCi0Jc3dpdGNoIChwaS0+bW9kZSkgeworCXN3aXRjaCAoY2hhbi0+bW9kZSkgewogCWNhc2UgTDJDQVBfTU9ERV9TVFJFQU1JTkc6CiAJY2FzZSBMMkNBUF9NT0RFX0VSVE06Ci0JCWlmIChwaS0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfU1RBVEUyX0RFVklDRSkKKwkJaWYgKGNoYW4tPmNvbmZfc3RhdGUgJiBMMkNBUF9DT05GX1NUQVRFMl9ERVZJQ0UpCiAJCQlicmVhazsKIAogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAlkZWZhdWx0OgotCQlwaS0+bW9kZSA9IGwyY2FwX3NlbGVjdF9tb2RlKHJmYy5tb2RlLCBwaS0+Y29ubi0+ZmVhdF9tYXNrKTsKKwkJY2hhbi0+bW9kZSA9IGwyY2FwX3NlbGVjdF9tb2RlKHJmYy5tb2RlLCBjaGFuLT5jb25uLT5mZWF0X21hc2spOwogCQlicmVhazsKIAl9CiAKIGRvbmU6Ci0JaWYgKHBpLT5pbXR1ICE9IEwyQ0FQX0RFRkFVTFRfTVRVKQotCQlsMmNhcF9hZGRfY29uZl9vcHQoJnB0ciwgTDJDQVBfQ09ORl9NVFUsIDIsIHBpLT5pbXR1KTsKKwlpZiAoY2hhbi0+aW10dSAhPSBMMkNBUF9ERUZBVUxUX01UVSkKKwkJbDJjYXBfYWRkX2NvbmZfb3B0KCZwdHIsIEwyQ0FQX0NPTkZfTVRVLCAyLCBjaGFuLT5pbXR1KTsKIAotCXN3aXRjaCAocGktPm1vZGUpIHsKKwlzd2l0Y2ggKGNoYW4tPm1vZGUpIHsKIAljYXNlIEwyQ0FQX01PREVfQkFTSUM6Ci0JCWlmICghKHBpLT5jb25uLT5mZWF0X21hc2sgJiBMMkNBUF9GRUFUX0VSVE0pICYmCi0JCQkJIShwaS0+Y29ubi0+ZmVhdF9tYXNrICYgTDJDQVBfRkVBVF9TVFJFQU1JTkcpKQorCQlpZiAoIShjaGFuLT5jb25uLT5mZWF0X21hc2sgJiBMMkNBUF9GRUFUX0VSVE0pICYmCisJCQkJIShjaGFuLT5jb25uLT5mZWF0X21hc2sgJiBMMkNBUF9GRUFUX1NUUkVBTUlORykpCiAJCQlicmVhazsKIAogCQlyZmMubW9kZSAgICAgICAgICAgID0gTDJDQVBfTU9ERV9CQVNJQzsKQEAgLTE2MjksMjQgKzE3MjIsMjQgQEAKIAogCWNhc2UgTDJDQVBfTU9ERV9FUlRNOgogCQlyZmMubW9kZSAgICAgICAgICAgID0gTDJDQVBfTU9ERV9FUlRNOwotCQlyZmMudHh3aW5fc2l6ZSAgICAgID0gcGktPnR4X3dpbjsKLQkJcmZjLm1heF90cmFuc21pdCAgICA9IHBpLT5tYXhfdHg7CisJCXJmYy50eHdpbl9zaXplICAgICAgPSBjaGFuLT50eF93aW47CisJCXJmYy5tYXhfdHJhbnNtaXQgICAgPSBjaGFuLT5tYXhfdHg7CiAJCXJmYy5yZXRyYW5zX3RpbWVvdXQgPSAwOwogCQlyZmMubW9uaXRvcl90aW1lb3V0ID0gMDsKIAkJcmZjLm1heF9wZHVfc2l6ZSAgICA9IGNwdV90b19sZTE2KEwyQ0FQX0RFRkFVTFRfTUFYX1BEVV9TSVpFKTsKLQkJaWYgKEwyQ0FQX0RFRkFVTFRfTUFYX1BEVV9TSVpFID4gcGktPmNvbm4tPm10dSAtIDEwKQotCQkJcmZjLm1heF9wZHVfc2l6ZSA9IGNwdV90b19sZTE2KHBpLT5jb25uLT5tdHUgLSAxMCk7CisJCWlmIChMMkNBUF9ERUZBVUxUX01BWF9QRFVfU0laRSA+IGNoYW4tPmNvbm4tPm10dSAtIDEwKQorCQkJcmZjLm1heF9wZHVfc2l6ZSA9IGNwdV90b19sZTE2KGNoYW4tPmNvbm4tPm10dSAtIDEwKTsKIAogCQlsMmNhcF9hZGRfY29uZl9vcHQoJnB0ciwgTDJDQVBfQ09ORl9SRkMsIHNpemVvZihyZmMpLAogCQkJCQkJCSh1bnNpZ25lZCBsb25nKSAmcmZjKTsKIAotCQlpZiAoIShwaS0+Y29ubi0+ZmVhdF9tYXNrICYgTDJDQVBfRkVBVF9GQ1MpKQorCQlpZiAoIShjaGFuLT5jb25uLT5mZWF0X21hc2sgJiBMMkNBUF9GRUFUX0ZDUykpCiAJCQlicmVhazsKIAotCQlpZiAocGktPmZjcyA9PSBMMkNBUF9GQ1NfTk9ORSB8fAotCQkJCXBpLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9OT19GQ1NfUkVDVikgewotCQkJcGktPmZjcyA9IEwyQ0FQX0ZDU19OT05FOwotCQkJbDJjYXBfYWRkX2NvbmZfb3B0KCZwdHIsIEwyQ0FQX0NPTkZfRkNTLCAxLCBwaS0+ZmNzKTsKKwkJaWYgKGNoYW4tPmZjcyA9PSBMMkNBUF9GQ1NfTk9ORSB8fAorCQkJCWNoYW4tPmNvbmZfc3RhdGUgJiBMMkNBUF9DT05GX05PX0ZDU19SRUNWKSB7CisJCQljaGFuLT5mY3MgPSBMMkNBUF9GQ1NfTk9ORTsKKwkJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX0ZDUywgMSwgY2hhbi0+ZmNzKTsKIAkJfQogCQlicmVhazsKIApAQCAtMTY1Nyw0MyArMTc1MCw0MiBAQAogCQlyZmMucmV0cmFuc190aW1lb3V0ID0gMDsKIAkJcmZjLm1vbml0b3JfdGltZW91dCA9IDA7CiAJCXJmYy5tYXhfcGR1X3NpemUgICAgPSBjcHVfdG9fbGUxNihMMkNBUF9ERUZBVUxUX01BWF9QRFVfU0laRSk7Ci0JCWlmIChMMkNBUF9ERUZBVUxUX01BWF9QRFVfU0laRSA+IHBpLT5jb25uLT5tdHUgLSAxMCkKLQkJCXJmYy5tYXhfcGR1X3NpemUgPSBjcHVfdG9fbGUxNihwaS0+Y29ubi0+bXR1IC0gMTApOworCQlpZiAoTDJDQVBfREVGQVVMVF9NQVhfUERVX1NJWkUgPiBjaGFuLT5jb25uLT5tdHUgLSAxMCkKKwkJCXJmYy5tYXhfcGR1X3NpemUgPSBjcHVfdG9fbGUxNihjaGFuLT5jb25uLT5tdHUgLSAxMCk7CiAKIAkJbDJjYXBfYWRkX2NvbmZfb3B0KCZwdHIsIEwyQ0FQX0NPTkZfUkZDLCBzaXplb2YocmZjKSwKIAkJCQkJCQkodW5zaWduZWQgbG9uZykgJnJmYyk7CiAKLQkJaWYgKCEocGktPmNvbm4tPmZlYXRfbWFzayAmIEwyQ0FQX0ZFQVRfRkNTKSkKKwkJaWYgKCEoY2hhbi0+Y29ubi0+ZmVhdF9tYXNrICYgTDJDQVBfRkVBVF9GQ1MpKQogCQkJYnJlYWs7CiAKLQkJaWYgKHBpLT5mY3MgPT0gTDJDQVBfRkNTX05PTkUgfHwKLQkJCQlwaS0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfTk9fRkNTX1JFQ1YpIHsKLQkJCXBpLT5mY3MgPSBMMkNBUF9GQ1NfTk9ORTsKLQkJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX0ZDUywgMSwgcGktPmZjcyk7CisJCWlmIChjaGFuLT5mY3MgPT0gTDJDQVBfRkNTX05PTkUgfHwKKwkJCQljaGFuLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9OT19GQ1NfUkVDVikgeworCQkJY2hhbi0+ZmNzID0gTDJDQVBfRkNTX05PTkU7CisJCQlsMmNhcF9hZGRfY29uZl9vcHQoJnB0ciwgTDJDQVBfQ09ORl9GQ1MsIDEsIGNoYW4tPmZjcyk7CiAJCX0KIAkJYnJlYWs7CiAJfQogCi0JcmVxLT5kY2lkICA9IGNwdV90b19sZTE2KHBpLT5kY2lkKTsKKwlyZXEtPmRjaWQgID0gY3B1X3RvX2xlMTYoY2hhbi0+ZGNpZCk7CiAJcmVxLT5mbGFncyA9IGNwdV90b19sZTE2KDApOwogCiAJcmV0dXJuIHB0ciAtIGRhdGE7CiB9CiAKLXN0YXRpYyBpbnQgbDJjYXBfcGFyc2VfY29uZl9yZXEoc3RydWN0IHNvY2sgKnNrLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBsMmNhcF9wYXJzZV9jb25mX3JlcShzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwogCXN0cnVjdCBsMmNhcF9jb25mX3JzcCAqcnNwID0gZGF0YTsKIAl2b2lkICpwdHIgPSByc3AtPmRhdGE7Ci0Jdm9pZCAqcmVxID0gcGktPmNvbmZfcmVxOwotCWludCBsZW4gPSBwaS0+Y29uZl9sZW47CisJdm9pZCAqcmVxID0gY2hhbi0+Y29uZl9yZXE7CisJaW50IGxlbiA9IGNoYW4tPmNvbmZfbGVuOwogCWludCB0eXBlLCBoaW50LCBvbGVuOwogCXVuc2lnbmVkIGxvbmcgdmFsOwogCXN0cnVjdCBsMmNhcF9jb25mX3JmYyByZmMgPSB7IC5tb2RlID0gTDJDQVBfTU9ERV9CQVNJQyB9OwogCXUxNiBtdHUgPSBMMkNBUF9ERUZBVUxUX01UVTsKIAl1MTYgcmVzdWx0ID0gTDJDQVBfQ09ORl9TVUNDRVNTOwogCi0JQlRfREJHKCJzayAlcCIsIHNrKTsKKwlCVF9EQkcoImNoYW4gJXAiLCBjaGFuKTsKIAogCXdoaWxlIChsZW4gPj0gTDJDQVBfQ09ORl9PUFRfU0laRSkgewogCQlsZW4gLT0gbDJjYXBfZ2V0X2NvbmZfb3B0KCZyZXEsICZ0eXBlLCAmb2xlbiwgJnZhbCk7CkBAIC0xNzA3LDcgKzE3OTksNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBMMkNBUF9DT05GX0ZMVVNIX1RPOgotCQkJcGktPmZsdXNoX3RvID0gdmFsOworCQkJY2hhbi0+Zmx1c2hfdG8gPSB2YWw7CiAJCQlicmVhazsKIAogCQljYXNlIEwyQ0FQX0NPTkZfUU9TOgpAQCAtMTcyMCw3ICsxODEyLDcgQEAKIAogCQljYXNlIEwyQ0FQX0NPTkZfRkNTOgogCQkJaWYgKHZhbCA9PSBMMkNBUF9GQ1NfTk9ORSkKLQkJCQlwaS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX05PX0ZDU19SRUNWOworCQkJCWNoYW4tPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9OT19GQ1NfUkVDVjsKIAogCQkJYnJlYWs7CiAKQEAgLTE3MzQsMzAgKzE4MjYsMzAgQEAKIAkJfQogCX0KIAotCWlmIChwaS0+bnVtX2NvbmZfcnNwIHx8IHBpLT5udW1fY29uZl9yZXEgPiAxKQorCWlmIChjaGFuLT5udW1fY29uZl9yc3AgfHwgY2hhbi0+bnVtX2NvbmZfcmVxID4gMSkKIAkJZ290byBkb25lOwogCi0Jc3dpdGNoIChwaS0+bW9kZSkgeworCXN3aXRjaCAoY2hhbi0+bW9kZSkgewogCWNhc2UgTDJDQVBfTU9ERV9TVFJFQU1JTkc6CiAJY2FzZSBMMkNBUF9NT0RFX0VSVE06Ci0JCWlmICghKHBpLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9TVEFURTJfREVWSUNFKSkgewotCQkJcGktPm1vZGUgPSBsMmNhcF9zZWxlY3RfbW9kZShyZmMubW9kZSwKLQkJCQkJcGktPmNvbm4tPmZlYXRfbWFzayk7CisJCWlmICghKGNoYW4tPmNvbmZfc3RhdGUgJiBMMkNBUF9DT05GX1NUQVRFMl9ERVZJQ0UpKSB7CisJCQljaGFuLT5tb2RlID0gbDJjYXBfc2VsZWN0X21vZGUocmZjLm1vZGUsCisJCQkJCWNoYW4tPmNvbm4tPmZlYXRfbWFzayk7CiAJCQlicmVhazsKIAkJfQogCi0JCWlmIChwaS0+bW9kZSAhPSByZmMubW9kZSkKKwkJaWYgKGNoYW4tPm1vZGUgIT0gcmZjLm1vZGUpCiAJCQlyZXR1cm4gLUVDT05OUkVGVVNFRDsKIAogCQlicmVhazsKIAl9CiAKIGRvbmU6Ci0JaWYgKHBpLT5tb2RlICE9IHJmYy5tb2RlKSB7CisJaWYgKGNoYW4tPm1vZGUgIT0gcmZjLm1vZGUpIHsKIAkJcmVzdWx0ID0gTDJDQVBfQ09ORl9VTkFDQ0VQVDsKLQkJcmZjLm1vZGUgPSBwaS0+bW9kZTsKKwkJcmZjLm1vZGUgPSBjaGFuLT5tb2RlOwogCi0JCWlmIChwaS0+bnVtX2NvbmZfcnNwID09IDEpCisJCWlmIChjaGFuLT5udW1fY29uZl9yc3AgPT0gMSkKIAkJCXJldHVybiAtRUNPTk5SRUZVU0VEOwogCiAJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX1JGQywKQEAgLTE3NzIsMzIgKzE4NjQsMzIgQEAKIAkJaWYgKG10dSA8IEwyQ0FQX0RFRkFVTFRfTUlOX01UVSkKIAkJCXJlc3VsdCA9IEwyQ0FQX0NPTkZfVU5BQ0NFUFQ7CiAJCWVsc2UgewotCQkJcGktPm9tdHUgPSBtdHU7Ci0JCQlwaS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX01UVV9ET05FOworCQkJY2hhbi0+b210dSA9IG10dTsKKwkJCWNoYW4tPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9NVFVfRE9ORTsKIAkJfQotCQlsMmNhcF9hZGRfY29uZl9vcHQoJnB0ciwgTDJDQVBfQ09ORl9NVFUsIDIsIHBpLT5vbXR1KTsKKwkJbDJjYXBfYWRkX2NvbmZfb3B0KCZwdHIsIEwyQ0FQX0NPTkZfTVRVLCAyLCBjaGFuLT5vbXR1KTsKIAogCQlzd2l0Y2ggKHJmYy5tb2RlKSB7CiAJCWNhc2UgTDJDQVBfTU9ERV9CQVNJQzoKLQkJCXBpLT5mY3MgPSBMMkNBUF9GQ1NfTk9ORTsKLQkJCXBpLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfTU9ERV9ET05FOworCQkJY2hhbi0+ZmNzID0gTDJDQVBfRkNTX05PTkU7CisJCQljaGFuLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfTU9ERV9ET05FOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBMMkNBUF9NT0RFX0VSVE06Ci0JCQlwaS0+cmVtb3RlX3R4X3dpbiA9IHJmYy50eHdpbl9zaXplOwotCQkJcGktPnJlbW90ZV9tYXhfdHggPSByZmMubWF4X3RyYW5zbWl0OworCQkJY2hhbi0+cmVtb3RlX3R4X3dpbiA9IHJmYy50eHdpbl9zaXplOworCQkJY2hhbi0+cmVtb3RlX21heF90eCA9IHJmYy5tYXhfdHJhbnNtaXQ7CiAKLQkJCWlmIChsZTE2X3RvX2NwdShyZmMubWF4X3BkdV9zaXplKSA+IHBpLT5jb25uLT5tdHUgLSAxMCkKLQkJCQlyZmMubWF4X3BkdV9zaXplID0gY3B1X3RvX2xlMTYocGktPmNvbm4tPm10dSAtIDEwKTsKKwkJCWlmIChsZTE2X3RvX2NwdShyZmMubWF4X3BkdV9zaXplKSA+IGNoYW4tPmNvbm4tPm10dSAtIDEwKQorCQkJCXJmYy5tYXhfcGR1X3NpemUgPSBjcHVfdG9fbGUxNihjaGFuLT5jb25uLT5tdHUgLSAxMCk7CiAKLQkJCXBpLT5yZW1vdGVfbXBzID0gbGUxNl90b19jcHUocmZjLm1heF9wZHVfc2l6ZSk7CisJCQljaGFuLT5yZW1vdGVfbXBzID0gbGUxNl90b19jcHUocmZjLm1heF9wZHVfc2l6ZSk7CiAKIAkJCXJmYy5yZXRyYW5zX3RpbWVvdXQgPQogCQkJCWxlMTZfdG9fY3B1KEwyQ0FQX0RFRkFVTFRfUkVUUkFOU19UTyk7CiAJCQlyZmMubW9uaXRvcl90aW1lb3V0ID0KIAkJCQlsZTE2X3RvX2NwdShMMkNBUF9ERUZBVUxUX01PTklUT1JfVE8pOwogCi0JCQlwaS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX01PREVfRE9ORTsKKwkJCWNoYW4tPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9NT0RFX0RPTkU7CiAKIAkJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX1JGQywKIAkJCQkJc2l6ZW9mKHJmYyksICh1bnNpZ25lZCBsb25nKSAmcmZjKTsKQEAgLTE4MDUsMTIgKzE4OTcsMTIgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgTDJDQVBfTU9ERV9TVFJFQU1JTkc6Ci0JCQlpZiAobGUxNl90b19jcHUocmZjLm1heF9wZHVfc2l6ZSkgPiBwaS0+Y29ubi0+bXR1IC0gMTApCi0JCQkJcmZjLm1heF9wZHVfc2l6ZSA9IGNwdV90b19sZTE2KHBpLT5jb25uLT5tdHUgLSAxMCk7CisJCQlpZiAobGUxNl90b19jcHUocmZjLm1heF9wZHVfc2l6ZSkgPiBjaGFuLT5jb25uLT5tdHUgLSAxMCkKKwkJCQlyZmMubWF4X3BkdV9zaXplID0gY3B1X3RvX2xlMTYoY2hhbi0+Y29ubi0+bXR1IC0gMTApOwogCi0JCQlwaS0+cmVtb3RlX21wcyA9IGxlMTZfdG9fY3B1KHJmYy5tYXhfcGR1X3NpemUpOworCQkJY2hhbi0+cmVtb3RlX21wcyA9IGxlMTZfdG9fY3B1KHJmYy5tYXhfcGR1X3NpemUpOwogCi0JCQlwaS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX01PREVfRE9ORTsKKwkJCWNoYW4tPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9NT0RFX0RPTkU7CiAKIAkJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX1JGQywKIAkJCQkJc2l6ZW9mKHJmYyksICh1bnNpZ25lZCBsb25nKSAmcmZjKTsKQEAgLTE4MjEsMjkgKzE5MTMsMjggQEAKIAkJCXJlc3VsdCA9IEwyQ0FQX0NPTkZfVU5BQ0NFUFQ7CiAKIAkJCW1lbXNldCgmcmZjLCAwLCBzaXplb2YocmZjKSk7Ci0JCQlyZmMubW9kZSA9IHBpLT5tb2RlOworCQkJcmZjLm1vZGUgPSBjaGFuLT5tb2RlOwogCQl9CiAKIAkJaWYgKHJlc3VsdCA9PSBMMkNBUF9DT05GX1NVQ0NFU1MpCi0JCQlwaS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX09VVFBVVF9ET05FOworCQkJY2hhbi0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX09VVFBVVF9ET05FOwogCX0KLQlyc3AtPnNjaWQgICA9IGNwdV90b19sZTE2KHBpLT5kY2lkKTsKKwlyc3AtPnNjaWQgICA9IGNwdV90b19sZTE2KGNoYW4tPmRjaWQpOwogCXJzcC0+cmVzdWx0ID0gY3B1X3RvX2xlMTYocmVzdWx0KTsKIAlyc3AtPmZsYWdzICA9IGNwdV90b19sZTE2KDB4MDAwMCk7CiAKIAlyZXR1cm4gcHRyIC0gZGF0YTsKIH0KIAotc3RhdGljIGludCBsMmNhcF9wYXJzZV9jb25mX3JzcChzdHJ1Y3Qgc29jayAqc2ssIHZvaWQgKnJzcCwgaW50IGxlbiwgdm9pZCAqZGF0YSwgdTE2ICpyZXN1bHQpCitzdGF0aWMgaW50IGwyY2FwX3BhcnNlX2NvbmZfcnNwKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCB2b2lkICpyc3AsIGludCBsZW4sIHZvaWQgKmRhdGEsIHUxNiAqcmVzdWx0KQogewotCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CiAJc3RydWN0IGwyY2FwX2NvbmZfcmVxICpyZXEgPSBkYXRhOwogCXZvaWQgKnB0ciA9IHJlcS0+ZGF0YTsKIAlpbnQgdHlwZSwgb2xlbjsKIAl1bnNpZ25lZCBsb25nIHZhbDsKIAlzdHJ1Y3QgbDJjYXBfY29uZl9yZmMgcmZjOwogCi0JQlRfREJHKCJzayAlcCwgcnNwICVwLCBsZW4gJWQsIHJlcSAlcCIsIHNrLCByc3AsIGxlbiwgZGF0YSk7CisJQlRfREJHKCJjaGFuICVwLCByc3AgJXAsIGxlbiAlZCwgcmVxICVwIiwgY2hhbiwgcnNwLCBsZW4sIGRhdGEpOwogCiAJd2hpbGUgKGxlbiA+PSBMMkNBUF9DT05GX09QVF9TSVpFKSB7CiAJCWxlbiAtPSBsMmNhcF9nZXRfY29uZl9vcHQoJnJzcCwgJnR5cGUsICZvbGVuLCAmdmFsKTsKQEAgLTE4NTIsMjcgKzE5NDMsMjcgQEAKIAkJY2FzZSBMMkNBUF9DT05GX01UVToKIAkJCWlmICh2YWwgPCBMMkNBUF9ERUZBVUxUX01JTl9NVFUpIHsKIAkJCQkqcmVzdWx0ID0gTDJDQVBfQ09ORl9VTkFDQ0VQVDsKLQkJCQlwaS0+aW10dSA9IEwyQ0FQX0RFRkFVTFRfTUlOX01UVTsKKwkJCQljaGFuLT5pbXR1ID0gTDJDQVBfREVGQVVMVF9NSU5fTVRVOwogCQkJfSBlbHNlCi0JCQkJcGktPmltdHUgPSB2YWw7Ci0JCQlsMmNhcF9hZGRfY29uZl9vcHQoJnB0ciwgTDJDQVBfQ09ORl9NVFUsIDIsIHBpLT5pbXR1KTsKKwkJCQljaGFuLT5pbXR1ID0gdmFsOworCQkJbDJjYXBfYWRkX2NvbmZfb3B0KCZwdHIsIEwyQ0FQX0NPTkZfTVRVLCAyLCBjaGFuLT5pbXR1KTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgTDJDQVBfQ09ORl9GTFVTSF9UTzoKLQkJCXBpLT5mbHVzaF90byA9IHZhbDsKKwkJCWNoYW4tPmZsdXNoX3RvID0gdmFsOwogCQkJbDJjYXBfYWRkX2NvbmZfb3B0KCZwdHIsIEwyQ0FQX0NPTkZfRkxVU0hfVE8sCi0JCQkJCQkJMiwgcGktPmZsdXNoX3RvKTsKKwkJCQkJCQkyLCBjaGFuLT5mbHVzaF90byk7CiAJCQlicmVhazsKIAogCQljYXNlIEwyQ0FQX0NPTkZfUkZDOgogCQkJaWYgKG9sZW4gPT0gc2l6ZW9mKHJmYykpCiAJCQkJbWVtY3B5KCZyZmMsICh2b2lkICopdmFsLCBvbGVuKTsKIAotCQkJaWYgKChwaS0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfU1RBVEUyX0RFVklDRSkgJiYKLQkJCQkJCQlyZmMubW9kZSAhPSBwaS0+bW9kZSkKKwkJCWlmICgoY2hhbi0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfU1RBVEUyX0RFVklDRSkgJiYKKwkJCQkJCQlyZmMubW9kZSAhPSBjaGFuLT5tb2RlKQogCQkJCXJldHVybiAtRUNPTk5SRUZVU0VEOwogCi0JCQlwaS0+ZmNzID0gMDsKKwkJCWNoYW4tPmZjcyA9IDA7CiAKIAkJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX1JGQywKIAkJCQkJc2l6ZW9mKHJmYyksICh1bnNpZ25lZCBsb25nKSAmcmZjKTsKQEAgLTE4ODAsNTMgKzE5NzEsNzQgQEAKIAkJfQogCX0KIAotCWlmIChwaS0+bW9kZSA9PSBMMkNBUF9NT0RFX0JBU0lDICYmIHBpLT5tb2RlICE9IHJmYy5tb2RlKQorCWlmIChjaGFuLT5tb2RlID09IEwyQ0FQX01PREVfQkFTSUMgJiYgY2hhbi0+bW9kZSAhPSByZmMubW9kZSkKIAkJcmV0dXJuIC1FQ09OTlJFRlVTRUQ7CiAKLQlwaS0+bW9kZSA9IHJmYy5tb2RlOworCWNoYW4tPm1vZGUgPSByZmMubW9kZTsKIAogCWlmICgqcmVzdWx0ID09IEwyQ0FQX0NPTkZfU1VDQ0VTUykgewogCQlzd2l0Y2ggKHJmYy5tb2RlKSB7CiAJCWNhc2UgTDJDQVBfTU9ERV9FUlRNOgotCQkJcGktPnJldHJhbnNfdGltZW91dCA9IGxlMTZfdG9fY3B1KHJmYy5yZXRyYW5zX3RpbWVvdXQpOwotCQkJcGktPm1vbml0b3JfdGltZW91dCA9IGxlMTZfdG9fY3B1KHJmYy5tb25pdG9yX3RpbWVvdXQpOwotCQkJcGktPm1wcyAgICA9IGxlMTZfdG9fY3B1KHJmYy5tYXhfcGR1X3NpemUpOworCQkJY2hhbi0+cmV0cmFuc190aW1lb3V0ID0gbGUxNl90b19jcHUocmZjLnJldHJhbnNfdGltZW91dCk7CisJCQljaGFuLT5tb25pdG9yX3RpbWVvdXQgPSBsZTE2X3RvX2NwdShyZmMubW9uaXRvcl90aW1lb3V0KTsKKwkJCWNoYW4tPm1wcyAgICA9IGxlMTZfdG9fY3B1KHJmYy5tYXhfcGR1X3NpemUpOwogCQkJYnJlYWs7CiAJCWNhc2UgTDJDQVBfTU9ERV9TVFJFQU1JTkc6Ci0JCQlwaS0+bXBzICAgID0gbGUxNl90b19jcHUocmZjLm1heF9wZHVfc2l6ZSk7CisJCQljaGFuLT5tcHMgICAgPSBsZTE2X3RvX2NwdShyZmMubWF4X3BkdV9zaXplKTsKIAkJfQogCX0KIAotCXJlcS0+ZGNpZCAgID0gY3B1X3RvX2xlMTYocGktPmRjaWQpOworCXJlcS0+ZGNpZCAgID0gY3B1X3RvX2xlMTYoY2hhbi0+ZGNpZCk7CiAJcmVxLT5mbGFncyAgPSBjcHVfdG9fbGUxNigweDAwMDApOwogCiAJcmV0dXJuIHB0ciAtIGRhdGE7CiB9CiAKLXN0YXRpYyBpbnQgbDJjYXBfYnVpbGRfY29uZl9yc3Aoc3RydWN0IHNvY2sgKnNrLCB2b2lkICpkYXRhLCB1MTYgcmVzdWx0LCB1MTYgZmxhZ3MpCitzdGF0aWMgaW50IGwyY2FwX2J1aWxkX2NvbmZfcnNwKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCB2b2lkICpkYXRhLCB1MTYgcmVzdWx0LCB1MTYgZmxhZ3MpCiB7CiAJc3RydWN0IGwyY2FwX2NvbmZfcnNwICpyc3AgPSBkYXRhOwogCXZvaWQgKnB0ciA9IHJzcC0+ZGF0YTsKIAotCUJUX0RCRygic2sgJXAiLCBzayk7CisJQlRfREJHKCJjaGFuICVwIiwgY2hhbik7CiAKLQlyc3AtPnNjaWQgICA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+ZGNpZCk7CisJcnNwLT5zY2lkICAgPSBjcHVfdG9fbGUxNihjaGFuLT5kY2lkKTsKIAlyc3AtPnJlc3VsdCA9IGNwdV90b19sZTE2KHJlc3VsdCk7CiAJcnNwLT5mbGFncyAgPSBjcHVfdG9fbGUxNihmbGFncyk7CiAKIAlyZXR1cm4gcHRyIC0gZGF0YTsKIH0KIAotc3RhdGljIHZvaWQgbDJjYXBfY29uZl9yZmNfZ2V0KHN0cnVjdCBzb2NrICpzaywgdm9pZCAqcnNwLCBpbnQgbGVuKQordm9pZCBfX2wyY2FwX2Nvbm5lY3RfcnNwX2RlZmVyKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuKQogewotCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CisJc3RydWN0IGwyY2FwX2Nvbm5fcnNwIHJzcDsKKwlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGNoYW4tPmNvbm47CisJdTggYnVmWzEyOF07CisKKwlyc3Auc2NpZCAgID0gY3B1X3RvX2xlMTYoY2hhbi0+ZGNpZCk7CisJcnNwLmRjaWQgICA9IGNwdV90b19sZTE2KGNoYW4tPnNjaWQpOworCXJzcC5yZXN1bHQgPSBjcHVfdG9fbGUxNihMMkNBUF9DUl9TVUNDRVNTKTsKKwlyc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoTDJDQVBfQ1NfTk9fSU5GTyk7CisJbDJjYXBfc2VuZF9jbWQoY29ubiwgY2hhbi0+aWRlbnQsCisJCQkJTDJDQVBfQ09OTl9SU1AsIHNpemVvZihyc3ApLCAmcnNwKTsKKworCWlmIChjaGFuLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9SRVFfU0VOVCkKKwkJcmV0dXJuOworCisJY2hhbi0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX1JFUV9TRU5UOworCWwyY2FwX3NlbmRfY21kKGNvbm4sIGwyY2FwX2dldF9pZGVudChjb25uKSwgTDJDQVBfQ09ORl9SRVEsCisJCQlsMmNhcF9idWlsZF9jb25mX3JlcShjaGFuLCBidWYpLCBidWYpOworCWNoYW4tPm51bV9jb25mX3JlcSsrOworfQorCitzdGF0aWMgdm9pZCBsMmNhcF9jb25mX3JmY19nZXQoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sIHZvaWQgKnJzcCwgaW50IGxlbikKK3sKIAlpbnQgdHlwZSwgb2xlbjsKIAl1bnNpZ25lZCBsb25nIHZhbDsKIAlzdHJ1Y3QgbDJjYXBfY29uZl9yZmMgcmZjOwogCi0JQlRfREJHKCJzayAlcCwgcnNwICVwLCBsZW4gJWQiLCBzaywgcnNwLCBsZW4pOworCUJUX0RCRygiY2hhbiAlcCwgcnNwICVwLCBsZW4gJWQiLCBjaGFuLCByc3AsIGxlbik7CiAKLQlpZiAoKHBpLT5tb2RlICE9IEwyQ0FQX01PREVfRVJUTSkgJiYgKHBpLT5tb2RlICE9IEwyQ0FQX01PREVfU1RSRUFNSU5HKSkKKwlpZiAoKGNoYW4tPm1vZGUgIT0gTDJDQVBfTU9ERV9FUlRNKSAmJiAoY2hhbi0+bW9kZSAhPSBMMkNBUF9NT0RFX1NUUkVBTUlORykpCiAJCXJldHVybjsKIAogCXdoaWxlIChsZW4gPj0gTDJDQVBfQ09ORl9PUFRfU0laRSkgewpAQCAtMTk0MywxMiArMjA1NSwxMiBAQAogZG9uZToKIAlzd2l0Y2ggKHJmYy5tb2RlKSB7CiAJY2FzZSBMMkNBUF9NT0RFX0VSVE06Ci0JCXBpLT5yZXRyYW5zX3RpbWVvdXQgPSBsZTE2X3RvX2NwdShyZmMucmV0cmFuc190aW1lb3V0KTsKLQkJcGktPm1vbml0b3JfdGltZW91dCA9IGxlMTZfdG9fY3B1KHJmYy5tb25pdG9yX3RpbWVvdXQpOwotCQlwaS0+bXBzICAgID0gbGUxNl90b19jcHUocmZjLm1heF9wZHVfc2l6ZSk7CisJCWNoYW4tPnJldHJhbnNfdGltZW91dCA9IGxlMTZfdG9fY3B1KHJmYy5yZXRyYW5zX3RpbWVvdXQpOworCQljaGFuLT5tb25pdG9yX3RpbWVvdXQgPSBsZTE2X3RvX2NwdShyZmMubW9uaXRvcl90aW1lb3V0KTsKKwkJY2hhbi0+bXBzICAgID0gbGUxNl90b19jcHUocmZjLm1heF9wZHVfc2l6ZSk7CiAJCWJyZWFrOwogCWNhc2UgTDJDQVBfTU9ERV9TVFJFQU1JTkc6Ci0JCXBpLT5tcHMgICAgPSBsZTE2X3RvX2NwdShyZmMubWF4X3BkdV9zaXplKTsKKwkJY2hhbi0+bXBzICAgID0gbGUxNl90b19jcHUocmZjLm1heF9wZHVfc2l6ZSk7CiAJfQogfQogCkBAIC0xOTc0LDkgKzIwODYsOSBAQAogCiBzdGF0aWMgaW5saW5lIGludCBsMmNhcF9jb25uZWN0X3JlcShzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiwgc3RydWN0IGwyY2FwX2NtZF9oZHIgKmNtZCwgdTggKmRhdGEpCiB7Ci0Jc3RydWN0IGwyY2FwX2NoYW5fbGlzdCAqbGlzdCA9ICZjb25uLT5jaGFuX2xpc3Q7CiAJc3RydWN0IGwyY2FwX2Nvbm5fcmVxICpyZXEgPSAoc3RydWN0IGwyY2FwX2Nvbm5fcmVxICopIGRhdGE7CiAJc3RydWN0IGwyY2FwX2Nvbm5fcnNwIHJzcDsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiA9IE5VTEwsICpwY2hhbjsKIAlzdHJ1Y3Qgc29jayAqcGFyZW50LCAqc2sgPSBOVUxMOwogCWludCByZXN1bHQsIHN0YXR1cyA9IEwyQ0FQX0NTX05PX0lORk87CiAKQEAgLTE5ODYsMTIgKzIwOTgsMTQgQEAKIAlCVF9EQkcoInBzbSAweCUyLjJ4IHNjaWQgMHglNC40eCIsIHBzbSwgc2NpZCk7CiAKIAkvKiBDaGVjayBpZiB3ZSBoYXZlIHNvY2tldCBsaXN0ZW5pbmcgb24gcHNtICovCi0JcGFyZW50ID0gbDJjYXBfZ2V0X3NvY2tfYnlfcHNtKEJUX0xJU1RFTiwgcHNtLCBjb25uLT5zcmMpOwotCWlmICghcGFyZW50KSB7CisJcGNoYW4gPSBsMmNhcF9nbG9iYWxfY2hhbl9ieV9wc20oQlRfTElTVEVOLCBwc20sIGNvbm4tPnNyYyk7CisJaWYgKCFwY2hhbikgewogCQlyZXN1bHQgPSBMMkNBUF9DUl9CQURfUFNNOwogCQlnb3RvIHNlbmRyZXNwOwogCX0KIAorCXBhcmVudCA9IHBjaGFuLT5zazsKKwogCWJoX2xvY2tfc29jayhwYXJlbnQpOwogCiAJLyogQ2hlY2sgaWYgdGhlIEFDTCBpcyBzZWN1cmUgZW5vdWdoIChpZiBub3QgU0RQKSAqLwpAQCAtMjAxNCwxMSArMjEyOCwxOSBAQAogCWlmICghc2spCiAJCWdvdG8gcmVzcG9uc2U7CiAKLQl3cml0ZV9sb2NrX2JoKCZsaXN0LT5sb2NrKTsKKwljaGFuID0gbDJjYXBfY2hhbl9jcmVhdGUoc2spOworCWlmICghY2hhbikgeworCQlsMmNhcF9zb2NrX2tpbGwoc2spOworCQlnb3RvIHJlc3BvbnNlOworCX0KKworCWwyY2FwX3BpKHNrKS0+Y2hhbiA9IGNoYW47CisKKwl3cml0ZV9sb2NrX2JoKCZjb25uLT5jaGFuX2xvY2spOwogCiAJLyogQ2hlY2sgaWYgd2UgYWxyZWFkeSBoYXZlIGNoYW5uZWwgd2l0aCB0aGF0IGRjaWQgKi8KLQlpZiAoX19sMmNhcF9nZXRfY2hhbl9ieV9kY2lkKGxpc3QsIHNjaWQpKSB7Ci0JCXdyaXRlX3VubG9ja19iaCgmbGlzdC0+bG9jayk7CisJaWYgKF9fbDJjYXBfZ2V0X2NoYW5fYnlfZGNpZChjb25uLCBzY2lkKSkgeworCQl3cml0ZV91bmxvY2tfYmgoJmNvbm4tPmNoYW5fbG9jayk7CiAJCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKTsKIAkJbDJjYXBfc29ja19raWxsKHNrKTsKIAkJZ290byByZXNwb25zZTsKQEAgLTIwMjksMTggKzIxNTEsMjEgQEAKIAlsMmNhcF9zb2NrX2luaXQoc2ssIHBhcmVudCk7CiAJYmFjcHkoJmJ0X3NrKHNrKS0+c3JjLCBjb25uLT5zcmMpOwogCWJhY3B5KCZidF9zayhzayktPmRzdCwgY29ubi0+ZHN0KTsKLQlsMmNhcF9waShzayktPnBzbSAgPSBwc207Ci0JbDJjYXBfcGkoc2spLT5kY2lkID0gc2NpZDsKKwljaGFuLT5wc20gID0gcHNtOworCWNoYW4tPmRjaWQgPSBzY2lkOwogCi0JX19sMmNhcF9jaGFuX2FkZChjb25uLCBzaywgcGFyZW50KTsKLQlkY2lkID0gbDJjYXBfcGkoc2spLT5zY2lkOworCWJ0X2FjY2VwdF9lbnF1ZXVlKHBhcmVudCwgc2spOworCisJX19sMmNhcF9jaGFuX2FkZChjb25uLCBjaGFuKTsKKworCWRjaWQgPSBjaGFuLT5zY2lkOwogCiAJbDJjYXBfc29ja19zZXRfdGltZXIoc2ssIHNrLT5za19zbmR0aW1lbyk7CiAKLQlsMmNhcF9waShzayktPmlkZW50ID0gY21kLT5pZGVudDsKKwljaGFuLT5pZGVudCA9IGNtZC0+aWRlbnQ7CiAKIAlpZiAoY29ubi0+aW5mb19zdGF0ZSAmIEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9ET05FKSB7Ci0JCWlmIChsMmNhcF9jaGVja19zZWN1cml0eShzaykpIHsKKwkJaWYgKGwyY2FwX2NoZWNrX3NlY3VyaXR5KGNoYW4pKSB7CiAJCQlpZiAoYnRfc2soc2spLT5kZWZlcl9zZXR1cCkgewogCQkJCXNrLT5za19zdGF0ZSA9IEJUX0NPTk5FQ1QyOwogCQkJCXJlc3VsdCA9IEwyQ0FQX0NSX1BFTkQ7CkBAIC0yMDYyLDcgKzIxODcsNyBAQAogCQlzdGF0dXMgPSBMMkNBUF9DU19OT19JTkZPOwogCX0KIAotCXdyaXRlX3VubG9ja19iaCgmbGlzdC0+bG9jayk7CisJd3JpdGVfdW5sb2NrX2JoKCZjb25uLT5jaGFuX2xvY2spOwogCiByZXNwb25zZToKIAliaF91bmxvY2tfc29jayhwYXJlbnQpOwpAQCAtMjA4OCwxMyArMjIxMywxMyBAQAogCQkJCQlMMkNBUF9JTkZPX1JFUSwgc2l6ZW9mKGluZm8pLCAmaW5mbyk7CiAJfQogCi0JaWYgKHNrICYmICEobDJjYXBfcGkoc2spLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9SRVFfU0VOVCkgJiYKKwlpZiAoY2hhbiAmJiAhKGNoYW4tPmNvbmZfc3RhdGUgJiBMMkNBUF9DT05GX1JFUV9TRU5UKSAmJgogCQkJCXJlc3VsdCA9PSBMMkNBUF9DUl9TVUNDRVNTKSB7CiAJCXU4IGJ1ZlsxMjhdOwotCQlsMmNhcF9waShzayktPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9SRVFfU0VOVDsKKwkJY2hhbi0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX1JFUV9TRU5UOwogCQlsMmNhcF9zZW5kX2NtZChjb25uLCBsMmNhcF9nZXRfaWRlbnQoY29ubiksIEwyQ0FQX0NPTkZfUkVRLAotCQkJCQlsMmNhcF9idWlsZF9jb25mX3JlcShzaywgYnVmKSwgYnVmKTsKLQkJbDJjYXBfcGkoc2spLT5udW1fY29uZl9yZXErKzsKKwkJCQkJbDJjYXBfYnVpbGRfY29uZl9yZXEoY2hhbiwgYnVmKSwgYnVmKTsKKwkJY2hhbi0+bnVtX2NvbmZfcmVxKys7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yMTA0LDYgKzIyMjksNyBAQAogewogCXN0cnVjdCBsMmNhcF9jb25uX3JzcCAqcnNwID0gKHN0cnVjdCBsMmNhcF9jb25uX3JzcCAqKSBkYXRhOwogCXUxNiBzY2lkLCBkY2lkLCByZXN1bHQsIHN0YXR1czsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbjsKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJdTggcmVxWzEyOF07CiAKQEAgLTIxMTUsMzQgKzIyNDEsMzYgQEAKIAlCVF9EQkcoImRjaWQgMHglNC40eCBzY2lkIDB4JTQuNHggcmVzdWx0IDB4JTIuMnggc3RhdHVzIDB4JTIuMngiLCBkY2lkLCBzY2lkLCByZXN1bHQsIHN0YXR1cyk7CiAKIAlpZiAoc2NpZCkgewotCQlzayA9IGwyY2FwX2dldF9jaGFuX2J5X3NjaWQoJmNvbm4tPmNoYW5fbGlzdCwgc2NpZCk7Ci0JCWlmICghc2spCisJCWNoYW4gPSBsMmNhcF9nZXRfY2hhbl9ieV9zY2lkKGNvbm4sIHNjaWQpOworCQlpZiAoIWNoYW4pCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9IGVsc2UgewotCQlzayA9IGwyY2FwX2dldF9jaGFuX2J5X2lkZW50KCZjb25uLT5jaGFuX2xpc3QsIGNtZC0+aWRlbnQpOwotCQlpZiAoIXNrKQorCQljaGFuID0gbDJjYXBfZ2V0X2NoYW5fYnlfaWRlbnQoY29ubiwgY21kLT5pZGVudCk7CisJCWlmICghY2hhbikKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KIAorCXNrID0gY2hhbi0+c2s7CisKIAlzd2l0Y2ggKHJlc3VsdCkgewogCWNhc2UgTDJDQVBfQ1JfU1VDQ0VTUzoKIAkJc2stPnNrX3N0YXRlID0gQlRfQ09ORklHOwotCQlsMmNhcF9waShzayktPmlkZW50ID0gMDsKLQkJbDJjYXBfcGkoc2spLT5kY2lkID0gZGNpZDsKLQkJbDJjYXBfcGkoc2spLT5jb25mX3N0YXRlICY9IH5MMkNBUF9DT05GX0NPTk5FQ1RfUEVORDsKKwkJY2hhbi0+aWRlbnQgPSAwOworCQljaGFuLT5kY2lkID0gZGNpZDsKKwkJY2hhbi0+Y29uZl9zdGF0ZSAmPSB+TDJDQVBfQ09ORl9DT05ORUNUX1BFTkQ7CiAKLQkJaWYgKGwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfUkVRX1NFTlQpCisJCWlmIChjaGFuLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9SRVFfU0VOVCkKIAkJCWJyZWFrOwogCi0JCWwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX1JFUV9TRU5UOworCQljaGFuLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfUkVRX1NFTlQ7CiAKIAkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfZ2V0X2lkZW50KGNvbm4pLCBMMkNBUF9DT05GX1JFUSwKLQkJCQkJbDJjYXBfYnVpbGRfY29uZl9yZXEoc2ssIHJlcSksIHJlcSk7Ci0JCWwyY2FwX3BpKHNrKS0+bnVtX2NvbmZfcmVxKys7CisJCQkJCWwyY2FwX2J1aWxkX2NvbmZfcmVxKGNoYW4sIHJlcSksIHJlcSk7CisJCWNoYW4tPm51bV9jb25mX3JlcSsrOwogCQlicmVhazsKIAogCWNhc2UgTDJDQVBfQ1JfUEVORDoKLQkJbDJjYXBfcGkoc2spLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfQ09OTkVDVF9QRU5EOworCQljaGFuLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfQ09OTkVDVF9QRU5EOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0yMTU0LDcgKzIyODIsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlsMmNhcF9jaGFuX2RlbChzaywgRUNPTk5SRUZVU0VEKTsKKwkJbDJjYXBfY2hhbl9kZWwoY2hhbiwgRUNPTk5SRUZVU0VEKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0yMTYyLDE1ICsyMjkwLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZGVmYXVsdF9mY3Moc3RydWN0IGwyY2FwX3BpbmZvICpwaSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZGVmYXVsdF9mY3Moc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4pCiB7CisJc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKGNoYW4tPnNrKTsKKwogCS8qIEZDUyBpcyBlbmFibGVkIG9ubHkgaW4gRVJUTSBvciBzdHJlYW1pbmcgbW9kZSwgaWYgb25lIG9yIGJvdGgKIAkgKiBzaWRlcyByZXF1ZXN0IGl0LgogCSAqLwotCWlmIChwaS0+bW9kZSAhPSBMMkNBUF9NT0RFX0VSVE0gJiYgcGktPm1vZGUgIT0gTDJDQVBfTU9ERV9TVFJFQU1JTkcpCi0JCXBpLT5mY3MgPSBMMkNBUF9GQ1NfTk9ORTsKLQllbHNlIGlmICghKHBpLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9OT19GQ1NfUkVDVikpCi0JCXBpLT5mY3MgPSBMMkNBUF9GQ1NfQ1JDMTY7CisJaWYgKGNoYW4tPm1vZGUgIT0gTDJDQVBfTU9ERV9FUlRNICYmIGNoYW4tPm1vZGUgIT0gTDJDQVBfTU9ERV9TVFJFQU1JTkcpCisJCWNoYW4tPmZjcyA9IEwyQ0FQX0ZDU19OT05FOworCWVsc2UgaWYgKCEocGktPmNoYW4tPmNvbmZfc3RhdGUgJiBMMkNBUF9DT05GX05PX0ZDU19SRUNWKSkKKwkJY2hhbi0+ZmNzID0gTDJDQVBfRkNTX0NSQzE2OwogfQogCiBzdGF0aWMgaW5saW5lIGludCBsMmNhcF9jb25maWdfcmVxKHN0cnVjdCBsMmNhcF9jb25uICpjb25uLCBzdHJ1Y3QgbDJjYXBfY21kX2hkciAqY21kLCB1MTYgY21kX2xlbiwgdTggKmRhdGEpCkBAIC0yMTc4LDYgKzIzMDgsNyBAQAogCXN0cnVjdCBsMmNhcF9jb25mX3JlcSAqcmVxID0gKHN0cnVjdCBsMmNhcF9jb25mX3JlcSAqKSBkYXRhOwogCXUxNiBkY2lkLCBmbGFnczsKIAl1OCByc3BbNjRdOworCXN0cnVjdCBsMmNhcF9jaGFuICpjaGFuOwogCXN0cnVjdCBzb2NrICpzazsKIAlpbnQgbGVuOwogCkBAIC0yMTg2LDEwICsyMzE3LDEyIEBACiAKIAlCVF9EQkcoImRjaWQgMHglNC40eCBmbGFncyAweCUyLjJ4IiwgZGNpZCwgZmxhZ3MpOwogCi0Jc2sgPSBsMmNhcF9nZXRfY2hhbl9ieV9zY2lkKCZjb25uLT5jaGFuX2xpc3QsIGRjaWQpOwotCWlmICghc2spCisJY2hhbiA9IGwyY2FwX2dldF9jaGFuX2J5X3NjaWQoY29ubiwgZGNpZCk7CisJaWYgKCFjaGFuKQogCQlyZXR1cm4gLUVOT0VOVDsKIAorCXNrID0gY2hhbi0+c2s7CisKIAlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0NPTkZJRykgewogCQlzdHJ1Y3QgbDJjYXBfY21kX3JlaiByZWo7CiAKQEAgLTIyMDEsNjIgKzIzMzQsNjIgQEAKIAogCS8qIFJlamVjdCBpZiBjb25maWcgYnVmZmVyIGlzIHRvbyBzbWFsbC4gKi8KIAlsZW4gPSBjbWRfbGVuIC0gc2l6ZW9mKCpyZXEpOwotCWlmIChsMmNhcF9waShzayktPmNvbmZfbGVuICsgbGVuID4gc2l6ZW9mKGwyY2FwX3BpKHNrKS0+Y29uZl9yZXEpKSB7CisJaWYgKGNoYW4tPmNvbmZfbGVuICsgbGVuID4gc2l6ZW9mKGNoYW4tPmNvbmZfcmVxKSkgewogCQlsMmNhcF9zZW5kX2NtZChjb25uLCBjbWQtPmlkZW50LCBMMkNBUF9DT05GX1JTUCwKLQkJCQlsMmNhcF9idWlsZF9jb25mX3JzcChzaywgcnNwLAorCQkJCWwyY2FwX2J1aWxkX2NvbmZfcnNwKGNoYW4sIHJzcCwKIAkJCQkJTDJDQVBfQ09ORl9SRUpFQ1QsIGZsYWdzKSwgcnNwKTsKIAkJZ290byB1bmxvY2s7CiAJfQogCiAJLyogU3RvcmUgY29uZmlnLiAqLwotCW1lbWNweShsMmNhcF9waShzayktPmNvbmZfcmVxICsgbDJjYXBfcGkoc2spLT5jb25mX2xlbiwgcmVxLT5kYXRhLCBsZW4pOwotCWwyY2FwX3BpKHNrKS0+Y29uZl9sZW4gKz0gbGVuOworCW1lbWNweShjaGFuLT5jb25mX3JlcSArIGNoYW4tPmNvbmZfbGVuLCByZXEtPmRhdGEsIGxlbik7CisJY2hhbi0+Y29uZl9sZW4gKz0gbGVuOwogCiAJaWYgKGZsYWdzICYgMHgwMDAxKSB7CiAJCS8qIEluY29tcGxldGUgY29uZmlnLiBTZW5kIGVtcHR5IHJlc3BvbnNlLiAqLwogCQlsMmNhcF9zZW5kX2NtZChjb25uLCBjbWQtPmlkZW50LCBMMkNBUF9DT05GX1JTUCwKLQkJCQlsMmNhcF9idWlsZF9jb25mX3JzcChzaywgcnNwLAorCQkJCWwyY2FwX2J1aWxkX2NvbmZfcnNwKGNoYW4sIHJzcCwKIAkJCQkJTDJDQVBfQ09ORl9TVUNDRVNTLCAweDAwMDEpLCByc3ApOwogCQlnb3RvIHVubG9jazsKIAl9CiAKIAkvKiBDb21wbGV0ZSBjb25maWcuICovCi0JbGVuID0gbDJjYXBfcGFyc2VfY29uZl9yZXEoc2ssIHJzcCk7CisJbGVuID0gbDJjYXBfcGFyc2VfY29uZl9yZXEoY2hhbiwgcnNwKTsKIAlpZiAobGVuIDwgMCkgewotCQlsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKGNvbm4sIHNrLCBFQ09OTlJFU0VUKTsKKwkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShjb25uLCBjaGFuLCBFQ09OTlJFU0VUKTsKIAkJZ290byB1bmxvY2s7CiAJfQogCiAJbDJjYXBfc2VuZF9jbWQoY29ubiwgY21kLT5pZGVudCwgTDJDQVBfQ09ORl9SU1AsIGxlbiwgcnNwKTsKLQlsMmNhcF9waShzayktPm51bV9jb25mX3JzcCsrOworCWNoYW4tPm51bV9jb25mX3JzcCsrOwogCiAJLyogUmVzZXQgY29uZmlnIGJ1ZmZlci4gKi8KLQlsMmNhcF9waShzayktPmNvbmZfbGVuID0gMDsKKwljaGFuLT5jb25mX2xlbiA9IDA7CiAKLQlpZiAoIShsMmNhcF9waShzayktPmNvbmZfc3RhdGUgJiBMMkNBUF9DT05GX09VVFBVVF9ET05FKSkKKwlpZiAoIShjaGFuLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9PVVRQVVRfRE9ORSkpCiAJCWdvdG8gdW5sb2NrOwogCi0JaWYgKGwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfSU5QVVRfRE9ORSkgewotCQlzZXRfZGVmYXVsdF9mY3MobDJjYXBfcGkoc2spKTsKKwlpZiAoY2hhbi0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfSU5QVVRfRE9ORSkgeworCQlzZXRfZGVmYXVsdF9mY3MoY2hhbik7CiAKIAkJc2stPnNrX3N0YXRlID0gQlRfQ09OTkVDVEVEOwogCi0JCWwyY2FwX3BpKHNrKS0+bmV4dF90eF9zZXEgPSAwOwotCQlsMmNhcF9waShzayktPmV4cGVjdGVkX3R4X3NlcSA9IDA7Ci0JCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdChUWF9RVUVVRShzaykpOwotCQlpZiAobDJjYXBfcGkoc2spLT5tb2RlID09IEwyQ0FQX01PREVfRVJUTSkKLQkJCWwyY2FwX2VydG1faW5pdChzayk7CisJCWNoYW4tPm5leHRfdHhfc2VxID0gMDsKKwkJY2hhbi0+ZXhwZWN0ZWRfdHhfc2VxID0gMDsKKwkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmY2hhbi0+dHhfcSk7CisJCWlmIChjaGFuLT5tb2RlID09IEwyQ0FQX01PREVfRVJUTSkKKwkJCWwyY2FwX2VydG1faW5pdChjaGFuKTsKIAogCQlsMmNhcF9jaGFuX3JlYWR5KHNrKTsKIAkJZ290byB1bmxvY2s7CiAJfQogCi0JaWYgKCEobDJjYXBfcGkoc2spLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9SRVFfU0VOVCkpIHsKKwlpZiAoIShjaGFuLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9SRVFfU0VOVCkpIHsKIAkJdTggYnVmWzY0XTsKLQkJbDJjYXBfcGkoc2spLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfUkVRX1NFTlQ7CisJCWNoYW4tPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9SRVFfU0VOVDsKIAkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfZ2V0X2lkZW50KGNvbm4pLCBMMkNBUF9DT05GX1JFUSwKLQkJCQkJbDJjYXBfYnVpbGRfY29uZl9yZXEoc2ssIGJ1ZiksIGJ1Zik7Ci0JCWwyY2FwX3BpKHNrKS0+bnVtX2NvbmZfcmVxKys7CisJCQkJCWwyY2FwX2J1aWxkX2NvbmZfcmVxKGNoYW4sIGJ1ZiksIGJ1Zik7CisJCWNoYW4tPm51bV9jb25mX3JlcSsrOwogCX0KIAogdW5sb2NrOgpAQCAtMjI2OCw2ICsyNDAxLDcgQEAKIHsKIAlzdHJ1Y3QgbDJjYXBfY29uZl9yc3AgKnJzcCA9IChzdHJ1Y3QgbDJjYXBfY29uZl9yc3AgKilkYXRhOwogCXUxNiBzY2lkLCBmbGFncywgcmVzdWx0OworCXN0cnVjdCBsMmNhcF9jaGFuICpjaGFuOwogCXN0cnVjdCBzb2NrICpzazsKIAlpbnQgbGVuID0gY21kLT5sZW4gLSBzaXplb2YoKnJzcCk7CiAKQEAgLTIyNzgsMzYgKzI0MTIsMzggQEAKIAlCVF9EQkcoInNjaWQgMHglNC40eCBmbGFncyAweCUyLjJ4IHJlc3VsdCAweCUyLjJ4IiwKIAkJCXNjaWQsIGZsYWdzLCByZXN1bHQpOwogCi0Jc2sgPSBsMmNhcF9nZXRfY2hhbl9ieV9zY2lkKCZjb25uLT5jaGFuX2xpc3QsIHNjaWQpOwotCWlmICghc2spCisJY2hhbiA9IGwyY2FwX2dldF9jaGFuX2J5X3NjaWQoY29ubiwgc2NpZCk7CisJaWYgKCFjaGFuKQogCQlyZXR1cm4gMDsKIAorCXNrID0gY2hhbi0+c2s7CisKIAlzd2l0Y2ggKHJlc3VsdCkgewogCWNhc2UgTDJDQVBfQ09ORl9TVUNDRVNTOgotCQlsMmNhcF9jb25mX3JmY19nZXQoc2ssIHJzcC0+ZGF0YSwgbGVuKTsKKwkJbDJjYXBfY29uZl9yZmNfZ2V0KGNoYW4sIHJzcC0+ZGF0YSwgbGVuKTsKIAkJYnJlYWs7CiAKIAljYXNlIEwyQ0FQX0NPTkZfVU5BQ0NFUFQ6Ci0JCWlmIChsMmNhcF9waShzayktPm51bV9jb25mX3JzcCA8PSBMMkNBUF9DT05GX01BWF9DT05GX1JTUCkgeworCQlpZiAoY2hhbi0+bnVtX2NvbmZfcnNwIDw9IEwyQ0FQX0NPTkZfTUFYX0NPTkZfUlNQKSB7CiAJCQljaGFyIHJlcVs2NF07CiAKIAkJCWlmIChsZW4gPiBzaXplb2YocmVxKSAtIHNpemVvZihzdHJ1Y3QgbDJjYXBfY29uZl9yZXEpKSB7Ci0JCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShjb25uLCBzaywgRUNPTk5SRVNFVCk7CisJCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShjb25uLCBjaGFuLCBFQ09OTlJFU0VUKTsKIAkJCQlnb3RvIGRvbmU7CiAJCQl9CiAKIAkJCS8qIHRocm93IG91dCBhbnkgb2xkIHN0b3JlZCBjb25mIHJlcXVlc3RzICovCiAJCQlyZXN1bHQgPSBMMkNBUF9DT05GX1NVQ0NFU1M7Ci0JCQlsZW4gPSBsMmNhcF9wYXJzZV9jb25mX3JzcChzaywgcnNwLT5kYXRhLAotCQkJCQkJCWxlbiwgcmVxLCAmcmVzdWx0KTsKKwkJCWxlbiA9IGwyY2FwX3BhcnNlX2NvbmZfcnNwKGNoYW4sIHJzcC0+ZGF0YSwgbGVuLAorCQkJCQkJCQlyZXEsICZyZXN1bHQpOwogCQkJaWYgKGxlbiA8IDApIHsKLQkJCQlsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKGNvbm4sIHNrLCBFQ09OTlJFU0VUKTsKKwkJCQlsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKGNvbm4sIGNoYW4sIEVDT05OUkVTRVQpOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KIAogCQkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfZ2V0X2lkZW50KGNvbm4pLAogCQkJCQkJTDJDQVBfQ09ORl9SRVEsIGxlbiwgcmVxKTsKLQkJCWwyY2FwX3BpKHNrKS0+bnVtX2NvbmZfcmVxKys7CisJCQljaGFuLT5udW1fY29uZl9yZXErKzsKIAkJCWlmIChyZXN1bHQgIT0gTDJDQVBfQ09ORl9TVUNDRVNTKQogCQkJCWdvdG8gZG9uZTsKIAkJCWJyZWFrOwpAQCAtMjMxNiwyNCArMjQ1MiwyNCBAQAogCWRlZmF1bHQ6CiAJCXNrLT5za19lcnIgPSBFQ09OTlJFU0VUOwogCQlsMmNhcF9zb2NrX3NldF90aW1lcihzaywgSFogKiA1KTsKLQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShjb25uLCBzaywgRUNPTk5SRVNFVCk7CisJCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEoY29ubiwgY2hhbiwgRUNPTk5SRVNFVCk7CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAlpZiAoZmxhZ3MgJiAweDAxKQogCQlnb3RvIGRvbmU7CiAKLQlsMmNhcF9waShzayktPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9JTlBVVF9ET05FOworCWNoYW4tPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9JTlBVVF9ET05FOwogCi0JaWYgKGwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfT1VUUFVUX0RPTkUpIHsKLQkJc2V0X2RlZmF1bHRfZmNzKGwyY2FwX3BpKHNrKSk7CisJaWYgKGNoYW4tPmNvbmZfc3RhdGUgJiBMMkNBUF9DT05GX09VVFBVVF9ET05FKSB7CisJCXNldF9kZWZhdWx0X2ZjcyhjaGFuKTsKIAogCQlzay0+c2tfc3RhdGUgPSBCVF9DT05ORUNURUQ7Ci0JCWwyY2FwX3BpKHNrKS0+bmV4dF90eF9zZXEgPSAwOwotCQlsMmNhcF9waShzayktPmV4cGVjdGVkX3R4X3NlcSA9IDA7Ci0JCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdChUWF9RVUVVRShzaykpOwotCQlpZiAobDJjYXBfcGkoc2spLT5tb2RlID09ICBMMkNBUF9NT0RFX0VSVE0pCi0JCQlsMmNhcF9lcnRtX2luaXQoc2spOworCQljaGFuLT5uZXh0X3R4X3NlcSA9IDA7CisJCWNoYW4tPmV4cGVjdGVkX3R4X3NlcSA9IDA7CisJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmNoYW4tPnR4X3EpOworCQlpZiAoY2hhbi0+bW9kZSA9PSAgTDJDQVBfTU9ERV9FUlRNKQorCQkJbDJjYXBfZXJ0bV9pbml0KGNoYW4pOwogCiAJCWwyY2FwX2NoYW5fcmVhZHkoc2spOwogCX0KQEAgLTIzNDgsNiArMjQ4NCw3IEBACiAJc3RydWN0IGwyY2FwX2Rpc2Nvbm5fcmVxICpyZXEgPSAoc3RydWN0IGwyY2FwX2Rpc2Nvbm5fcmVxICopIGRhdGE7CiAJc3RydWN0IGwyY2FwX2Rpc2Nvbm5fcnNwIHJzcDsKIAl1MTYgZGNpZCwgc2NpZDsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbjsKIAlzdHJ1Y3Qgc29jayAqc2s7CiAKIAlzY2lkID0gX19sZTE2X3RvX2NwdShyZXEtPnNjaWQpOwpAQCAtMjM1NSwxMiArMjQ5MiwxNCBAQAogCiAJQlRfREJHKCJzY2lkIDB4JTQuNHggZGNpZCAweCU0LjR4Iiwgc2NpZCwgZGNpZCk7CiAKLQlzayA9IGwyY2FwX2dldF9jaGFuX2J5X3NjaWQoJmNvbm4tPmNoYW5fbGlzdCwgZGNpZCk7Ci0JaWYgKCFzaykKKwljaGFuID0gbDJjYXBfZ2V0X2NoYW5fYnlfc2NpZChjb25uLCBkY2lkKTsKKwlpZiAoIWNoYW4pCiAJCXJldHVybiAwOwogCi0JcnNwLmRjaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOwotCXJzcC5zY2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5kY2lkKTsKKwlzayA9IGNoYW4tPnNrOworCisJcnNwLmRjaWQgPSBjcHVfdG9fbGUxNihjaGFuLT5zY2lkKTsKKwlyc3Auc2NpZCA9IGNwdV90b19sZTE2KGNoYW4tPmRjaWQpOwogCWwyY2FwX3NlbmRfY21kKGNvbm4sIGNtZC0+aWRlbnQsIEwyQ0FQX0RJU0NPTk5fUlNQLCBzaXplb2YocnNwKSwgJnJzcCk7CiAKIAlzay0+c2tfc2h1dGRvd24gPSBTSFVURE9XTl9NQVNLOwpAQCAtMjM3NCw3ICsyNTEzLDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JbDJjYXBfY2hhbl9kZWwoc2ssIEVDT05OUkVTRVQpOworCWwyY2FwX2NoYW5fZGVsKGNoYW4sIEVDT05OUkVTRVQpOwogCWJoX3VubG9ja19zb2NrKHNrKTsKIAogCWwyY2FwX3NvY2tfa2lsbChzayk7CkBAIC0yMzg1LDYgKzI1MjQsNyBAQAogewogCXN0cnVjdCBsMmNhcF9kaXNjb25uX3JzcCAqcnNwID0gKHN0cnVjdCBsMmNhcF9kaXNjb25uX3JzcCAqKSBkYXRhOwogCXUxNiBkY2lkLCBzY2lkOworCXN0cnVjdCBsMmNhcF9jaGFuICpjaGFuOwogCXN0cnVjdCBzb2NrICpzazsKIAogCXNjaWQgPSBfX2xlMTZfdG9fY3B1KHJzcC0+c2NpZCk7CkBAIC0yMzkyLDEwICsyNTMyLDEyIEBACiAKIAlCVF9EQkcoImRjaWQgMHglNC40eCBzY2lkIDB4JTQuNHgiLCBkY2lkLCBzY2lkKTsKIAotCXNrID0gbDJjYXBfZ2V0X2NoYW5fYnlfc2NpZCgmY29ubi0+Y2hhbl9saXN0LCBzY2lkKTsKLQlpZiAoIXNrKQorCWNoYW4gPSBsMmNhcF9nZXRfY2hhbl9ieV9zY2lkKGNvbm4sIHNjaWQpOworCWlmICghY2hhbikKIAkJcmV0dXJuIDA7CiAKKwlzayA9IGNoYW4tPnNrOworCiAJLyogZG9uJ3QgZGVsZXRlIGwyY2FwIGNoYW5uZWwgaWYgc2sgaXMgb3duZWQgYnkgdXNlciAqLwogCWlmIChzb2NrX293bmVkX2J5X3VzZXIoc2spKSB7CiAJCXNrLT5za19zdGF0ZSA9IEJUX0RJU0NPTk47CkBAIC0yNDA1LDcgKzI1NDcsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlsMmNhcF9jaGFuX2RlbChzaywgMCk7CisJbDJjYXBfY2hhbl9kZWwoY2hhbiwgMCk7CiAJYmhfdW5sb2NrX3NvY2soc2spOwogCiAJbDJjYXBfc29ja19raWxsKHNrKTsKQEAgLTI0NjIsNiArMjYwNCwxMSBAQAogCiAJQlRfREJHKCJ0eXBlIDB4JTQuNHggcmVzdWx0IDB4JTIuMngiLCB0eXBlLCByZXN1bHQpOwogCisJLyogTDJDQVAgSW5mbyByZXEvcnNwIGFyZSB1bmJvdW5kIHRvIGNoYW5uZWxzLCBhZGQgZXh0cmEgY2hlY2tzICovCisJaWYgKGNtZC0+aWRlbnQgIT0gY29ubi0+aW5mb19pZGVudCB8fAorCQkJY29ubi0+aW5mb19zdGF0ZSAmIEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9ET05FKQorCQlyZXR1cm4gMDsKKwogCWRlbF90aW1lcigmY29ubi0+aW5mb190aW1lcik7CiAKIAlpZiAocmVzdWx0ICE9IEwyQ0FQX0lSX1NVQ0NFU1MpIHsKQEAgLTI2NzIsNyArMjgxOSw4IEBACiAKIAkJaWYgKGVycikgewogCQkJc3RydWN0IGwyY2FwX2NtZF9yZWogcmVqOwotCQkJQlRfREJHKCJlcnJvciAlZCIsIGVycik7CisKKwkJCUJUX0VSUigiV3JvbmcgbGluayB0eXBlICglZCkiLCBlcnIpOwogCiAJCQkvKiBGSVhNRTogTWFwIGVyciB0byBhIHZhbGlkIHJlYXNvbiAqLwogCQkJcmVqLnJlYXNvbiA9IGNwdV90b19sZTE2KDApOwpAQCAtMjY4NiwxMiArMjgzNCwxMiBAQAogCWtmcmVlX3NrYihza2IpOwogfQogCi1zdGF0aWMgaW50IGwyY2FwX2NoZWNrX2ZjcyhzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpLCAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgbDJjYXBfY2hlY2tfZmNzKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAl1MTYgb3VyX2ZjcywgcmN2X2ZjczsKIAlpbnQgaGRyX3NpemUgPSBMMkNBUF9IRFJfU0laRSArIDI7CiAKLQlpZiAocGktPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpIHsKKwlpZiAoY2hhbi0+ZmNzID09IEwyQ0FQX0ZDU19DUkMxNikgewogCQlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gMik7CiAJCXJjdl9mY3MgPSBnZXRfdW5hbGlnbmVkX2xlMTYoc2tiLT5kYXRhICsgc2tiLT5sZW4pOwogCQlvdXJfZmNzID0gY3JjMTYoMCwgc2tiLT5kYXRhIC0gaGRyX3NpemUsIHNrYi0+bGVuICsgaGRyX3NpemUpOwpAQCAtMjcwMiw0OSArMjg1MCw0NyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbDJjYXBfc2VuZF9pX29yX3JyX29yX3JucihzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgaW5saW5lIHZvaWQgbDJjYXBfc2VuZF9pX29yX3JyX29yX3JucihzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbikKIHsKLQlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwogCXUxNiBjb250cm9sID0gMDsKIAotCXBpLT5mcmFtZXNfc2VudCA9IDA7CisJY2hhbi0+ZnJhbWVzX3NlbnQgPSAwOwogCi0JY29udHJvbCB8PSBwaS0+YnVmZmVyX3NlcSA8PCBMMkNBUF9DVFJMX1JFUVNFUV9TSElGVDsKKwljb250cm9sIHw9IGNoYW4tPmJ1ZmZlcl9zZXEgPDwgTDJDQVBfQ1RSTF9SRVFTRVFfU0hJRlQ7CiAKLQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX0xPQ0FMX0JVU1kpIHsKKwlpZiAoY2hhbi0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fTE9DQUxfQlVTWSkgewogCQljb250cm9sIHw9IEwyQ0FQX1NVUEVSX1JDVl9OT1RfUkVBRFk7Ci0JCWwyY2FwX3NlbmRfc2ZyYW1lKHBpLCBjb250cm9sKTsKLQkJcGktPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9STlJfU0VOVDsKKwkJbDJjYXBfc2VuZF9zZnJhbWUoY2hhbiwgY29udHJvbCk7CisJCWNoYW4tPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9STlJfU0VOVDsKIAl9CiAKLQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1JFTU9URV9CVVNZKQotCQlsMmNhcF9yZXRyYW5zbWl0X2ZyYW1lcyhzayk7CisJaWYgKGNoYW4tPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1JFTU9URV9CVVNZKQorCQlsMmNhcF9yZXRyYW5zbWl0X2ZyYW1lcyhjaGFuKTsKIAotCWwyY2FwX2VydG1fc2VuZChzayk7CisJbDJjYXBfZXJ0bV9zZW5kKGNoYW4pOwogCi0JaWYgKCEocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX0xPQ0FMX0JVU1kpICYmCi0JCQlwaS0+ZnJhbWVzX3NlbnQgPT0gMCkgeworCWlmICghKGNoYW4tPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX0xPQ0FMX0JVU1kpICYmCisJCQljaGFuLT5mcmFtZXNfc2VudCA9PSAwKSB7CiAJCWNvbnRyb2wgfD0gTDJDQVBfU1VQRVJfUkNWX1JFQURZOwotCQlsMmNhcF9zZW5kX3NmcmFtZShwaSwgY29udHJvbCk7CisJCWwyY2FwX3NlbmRfc2ZyYW1lKGNoYW4sIGNvbnRyb2wpOwogCX0KIH0KIAotc3RhdGljIGludCBsMmNhcF9hZGRfdG9fc3Jlal9xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHU4IHR4X3NlcSwgdTggc2FyKQorc3RhdGljIGludCBsMmNhcF9hZGRfdG9fc3Jlal9xdWV1ZShzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggdHhfc2VxLCB1OCBzYXIpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKm5leHRfc2tiOwotCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CiAJaW50IHR4X3NlcV9vZmZzZXQsIG5leHRfdHhfc2VxX29mZnNldDsKIAogCWJ0X2NiKHNrYiktPnR4X3NlcSA9IHR4X3NlcTsKIAlidF9jYihza2IpLT5zYXIgPSBzYXI7CiAKLQluZXh0X3NrYiA9IHNrYl9wZWVrKFNSRUpfUVVFVUUoc2spKTsKKwluZXh0X3NrYiA9IHNrYl9wZWVrKCZjaGFuLT5zcmVqX3EpOwogCWlmICghbmV4dF9za2IpIHsKLQkJX19za2JfcXVldWVfdGFpbChTUkVKX1FVRVVFKHNrKSwgc2tiKTsKKwkJX19za2JfcXVldWVfdGFpbCgmY2hhbi0+c3Jlal9xLCBza2IpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQl0eF9zZXFfb2Zmc2V0ID0gKHR4X3NlcSAtIHBpLT5idWZmZXJfc2VxKSAlIDY0OworCXR4X3NlcV9vZmZzZXQgPSAodHhfc2VxIC0gY2hhbi0+YnVmZmVyX3NlcSkgJSA2NDsKIAlpZiAodHhfc2VxX29mZnNldCA8IDApCiAJCXR4X3NlcV9vZmZzZXQgKz0gNjQ7CiAKQEAgLTI3NTMsNTMgKzI4OTksNTIgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCW5leHRfdHhfc2VxX29mZnNldCA9IChidF9jYihuZXh0X3NrYiktPnR4X3NlcSAtCi0JCQkJCQlwaS0+YnVmZmVyX3NlcSkgJSA2NDsKKwkJCQkJCWNoYW4tPmJ1ZmZlcl9zZXEpICUgNjQ7CiAJCWlmIChuZXh0X3R4X3NlcV9vZmZzZXQgPCAwKQogCQkJbmV4dF90eF9zZXFfb2Zmc2V0ICs9IDY0OwogCiAJCWlmIChuZXh0X3R4X3NlcV9vZmZzZXQgPiB0eF9zZXFfb2Zmc2V0KSB7Ci0JCQlfX3NrYl9xdWV1ZV9iZWZvcmUoU1JFSl9RVUVVRShzayksIG5leHRfc2tiLCBza2IpOworCQkJX19za2JfcXVldWVfYmVmb3JlKCZjaGFuLT5zcmVqX3EsIG5leHRfc2tiLCBza2IpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAotCQlpZiAoc2tiX3F1ZXVlX2lzX2xhc3QoU1JFSl9RVUVVRShzayksIG5leHRfc2tiKSkKKwkJaWYgKHNrYl9xdWV1ZV9pc19sYXN0KCZjaGFuLT5zcmVqX3EsIG5leHRfc2tiKSkKIAkJCWJyZWFrOwogCi0JfSB3aGlsZSAoKG5leHRfc2tiID0gc2tiX3F1ZXVlX25leHQoU1JFSl9RVUVVRShzayksIG5leHRfc2tiKSkpOworCX0gd2hpbGUgKChuZXh0X3NrYiA9IHNrYl9xdWV1ZV9uZXh0KCZjaGFuLT5zcmVqX3EsIG5leHRfc2tiKSkpOwogCi0JX19za2JfcXVldWVfdGFpbChTUkVKX1FVRVVFKHNrKSwgc2tiKTsKKwlfX3NrYl9xdWV1ZV90YWlsKCZjaGFuLT5zcmVqX3EsIHNrYik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBsMmNhcF9lcnRtX3JlYXNzZW1ibHlfc2R1KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IGNvbnRyb2wpCitzdGF0aWMgaW50IGwyY2FwX2VydG1fcmVhc3NlbWJseV9zZHUoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IsIHUxNiBjb250cm9sKQogewotCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CiAJc3RydWN0IHNrX2J1ZmYgKl9za2I7CiAJaW50IGVycjsKIAogCXN3aXRjaCAoY29udHJvbCAmIEwyQ0FQX0NUUkxfU0FSKSB7CiAJY2FzZSBMMkNBUF9TRFVfVU5TRUdNRU5URUQ6Ci0JCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fU0FSX1NEVSkKKwkJaWYgKGNoYW4tPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NBUl9TRFUpCiAJCQlnb3RvIGRyb3A7CiAKLQkJZXJyID0gc29ja19xdWV1ZV9yY3Zfc2tiKHNrLCBza2IpOworCQllcnIgPSBzb2NrX3F1ZXVlX3Jjdl9za2IoY2hhbi0+c2ssIHNrYik7CiAJCWlmICghZXJyKQogCQkJcmV0dXJuIGVycjsKIAogCQlicmVhazsKIAogCWNhc2UgTDJDQVBfU0RVX1NUQVJUOgotCQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NBUl9TRFUpCisJCWlmIChjaGFuLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TQVJfU0RVKQogCQkJZ290byBkcm9wOwogCi0JCXBpLT5zZHVfbGVuID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHNrYi0+ZGF0YSk7CisJCWNoYW4tPnNkdV9sZW4gPSBnZXRfdW5hbGlnbmVkX2xlMTYoc2tiLT5kYXRhKTsKIAotCQlpZiAocGktPnNkdV9sZW4gPiBwaS0+aW10dSkKKwkJaWYgKGNoYW4tPnNkdV9sZW4gPiBjaGFuLT5pbXR1KQogCQkJZ290byBkaXNjb25uZWN0OwogCi0JCXBpLT5zZHUgPSBidF9za2JfYWxsb2MocGktPnNkdV9sZW4sIEdGUF9BVE9NSUMpOwotCQlpZiAoIXBpLT5zZHUpCisJCWNoYW4tPnNkdSA9IGJ0X3NrYl9hbGxvYyhjaGFuLT5zZHVfbGVuLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFjaGFuLT5zZHUpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAogCQkvKiBwdWxsIHNkdV9sZW4gYnl0ZXMgb25seSBhZnRlciBhbGxvYywgYmVjYXVzZSBvZiBMb2NhbCBCdXN5CkBAIC0yODA3LDYzICsyOTUyLDYzIEBACiAJCSAqIG9ubHkgb25jZSwgaS5lLiwgd2hlbiBhbGxvYyBkb2VzIG5vdCBmYWlsICovCiAJCXNrYl9wdWxsKHNrYiwgMik7CiAKLQkJbWVtY3B5KHNrYl9wdXQocGktPnNkdSwgc2tiLT5sZW4pLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwkJbWVtY3B5KHNrYl9wdXQoY2hhbi0+c2R1LCBza2ItPmxlbiksIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCi0JCXBpLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU0FSX1NEVTsKLQkJcGktPnBhcnRpYWxfc2R1X2xlbiA9IHNrYi0+bGVuOworCQljaGFuLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU0FSX1NEVTsKKwkJY2hhbi0+cGFydGlhbF9zZHVfbGVuID0gc2tiLT5sZW47CiAJCWJyZWFrOwogCiAJY2FzZSBMMkNBUF9TRFVfQ09OVElOVUU6Ci0JCWlmICghKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TQVJfU0RVKSkKKwkJaWYgKCEoY2hhbi0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fU0FSX1NEVSkpCiAJCQlnb3RvIGRpc2Nvbm5lY3Q7CiAKLQkJaWYgKCFwaS0+c2R1KQorCQlpZiAoIWNoYW4tPnNkdSkKIAkJCWdvdG8gZGlzY29ubmVjdDsKIAotCQlwaS0+cGFydGlhbF9zZHVfbGVuICs9IHNrYi0+bGVuOwotCQlpZiAocGktPnBhcnRpYWxfc2R1X2xlbiA+IHBpLT5zZHVfbGVuKQorCQljaGFuLT5wYXJ0aWFsX3NkdV9sZW4gKz0gc2tiLT5sZW47CisJCWlmIChjaGFuLT5wYXJ0aWFsX3NkdV9sZW4gPiBjaGFuLT5zZHVfbGVuKQogCQkJZ290byBkcm9wOwogCi0JCW1lbWNweShza2JfcHV0KHBpLT5zZHUsIHNrYi0+bGVuKSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJCW1lbWNweShza2JfcHV0KGNoYW4tPnNkdSwgc2tiLT5sZW4pLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAogCQlicmVhazsKIAogCWNhc2UgTDJDQVBfU0RVX0VORDoKLQkJaWYgKCEocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NBUl9TRFUpKQorCQlpZiAoIShjaGFuLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TQVJfU0RVKSkKIAkJCWdvdG8gZGlzY29ubmVjdDsKIAotCQlpZiAoIXBpLT5zZHUpCisJCWlmICghY2hhbi0+c2R1KQogCQkJZ290byBkaXNjb25uZWN0OwogCi0JCWlmICghKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TQVJfUkVUUlkpKSB7Ci0JCQlwaS0+cGFydGlhbF9zZHVfbGVuICs9IHNrYi0+bGVuOworCQlpZiAoIShjaGFuLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TQVJfUkVUUlkpKSB7CisJCQljaGFuLT5wYXJ0aWFsX3NkdV9sZW4gKz0gc2tiLT5sZW47CiAKLQkJCWlmIChwaS0+cGFydGlhbF9zZHVfbGVuID4gcGktPmltdHUpCisJCQlpZiAoY2hhbi0+cGFydGlhbF9zZHVfbGVuID4gY2hhbi0+aW10dSkKIAkJCQlnb3RvIGRyb3A7CiAKLQkJCWlmIChwaS0+cGFydGlhbF9zZHVfbGVuICE9IHBpLT5zZHVfbGVuKQorCQkJaWYgKGNoYW4tPnBhcnRpYWxfc2R1X2xlbiAhPSBjaGFuLT5zZHVfbGVuKQogCQkJCWdvdG8gZHJvcDsKIAotCQkJbWVtY3B5KHNrYl9wdXQocGktPnNkdSwgc2tiLT5sZW4pLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwkJCW1lbWNweShza2JfcHV0KGNoYW4tPnNkdSwgc2tiLT5sZW4pLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAkJfQogCi0JCV9za2IgPSBza2JfY2xvbmUocGktPnNkdSwgR0ZQX0FUT01JQyk7CisJCV9za2IgPSBza2JfY2xvbmUoY2hhbi0+c2R1LCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFfc2tiKSB7Ci0JCQlwaS0+Y29ubl9zdGF0ZSB8PSBMMkNBUF9DT05OX1NBUl9SRVRSWTsKKwkJCWNoYW4tPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9TQVJfUkVUUlk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCi0JCWVyciA9IHNvY2tfcXVldWVfcmN2X3NrYihzaywgX3NrYik7CisJCWVyciA9IHNvY2tfcXVldWVfcmN2X3NrYihjaGFuLT5zaywgX3NrYik7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlrZnJlZV9za2IoX3NrYik7Ci0JCQlwaS0+Y29ubl9zdGF0ZSB8PSBMMkNBUF9DT05OX1NBUl9SRVRSWTsKKwkJCWNoYW4tPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9TQVJfUkVUUlk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAKLQkJcGktPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fU0FSX1JFVFJZOwotCQlwaS0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9TQVJfU0RVOworCQljaGFuLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1NBUl9SRVRSWTsKKwkJY2hhbi0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9TQVJfU0RVOwogCi0JCWtmcmVlX3NrYihwaS0+c2R1KTsKKwkJa2ZyZWVfc2tiKGNoYW4tPnNkdSk7CiAJCWJyZWFrOwogCX0KIApAQCAtMjg3MSw1MSArMzAxNiw1MCBAQAogCXJldHVybiAwOwogCiBkcm9wOgotCWtmcmVlX3NrYihwaS0+c2R1KTsKLQlwaS0+c2R1ID0gTlVMTDsKKwlrZnJlZV9za2IoY2hhbi0+c2R1KTsKKwljaGFuLT5zZHUgPSBOVUxMOwogCiBkaXNjb25uZWN0OgotCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEocGktPmNvbm4sIHNrLCBFQ09OTlJFU0VUKTsKKwlsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKGNoYW4tPmNvbm4sIGNoYW4sIEVDT05OUkVTRVQpOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGwyY2FwX3RyeV9wdXNoX3J4X3NrYihzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgaW50IGwyY2FwX3RyeV9wdXNoX3J4X3NrYihzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbikKIHsKLQlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJdTE2IGNvbnRyb2w7CiAJaW50IGVycjsKIAotCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoQlVTWV9RVUVVRShzaykpKSkgeworCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmNoYW4tPmJ1c3lfcSkpKSB7CiAJCWNvbnRyb2wgPSBidF9jYihza2IpLT5zYXIgPDwgTDJDQVBfQ1RSTF9TQVJfU0hJRlQ7Ci0JCWVyciA9IGwyY2FwX2VydG1fcmVhc3NlbWJseV9zZHUoc2ssIHNrYiwgY29udHJvbCk7CisJCWVyciA9IGwyY2FwX2VydG1fcmVhc3NlbWJseV9zZHUoY2hhbiwgc2tiLCBjb250cm9sKTsKIAkJaWYgKGVyciA8IDApIHsKLQkJCXNrYl9xdWV1ZV9oZWFkKEJVU1lfUVVFVUUoc2spLCBza2IpOworCQkJc2tiX3F1ZXVlX2hlYWQoJmNoYW4tPmJ1c3lfcSwgc2tiKTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAotCQlwaS0+YnVmZmVyX3NlcSA9IChwaS0+YnVmZmVyX3NlcSArIDEpICUgNjQ7CisJCWNoYW4tPmJ1ZmZlcl9zZXEgPSAoY2hhbi0+YnVmZmVyX3NlcSArIDEpICUgNjQ7CiAJfQogCi0JaWYgKCEocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1JOUl9TRU5UKSkKKwlpZiAoIShjaGFuLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9STlJfU0VOVCkpCiAJCWdvdG8gZG9uZTsKIAotCWNvbnRyb2wgPSBwaS0+YnVmZmVyX3NlcSA8PCBMMkNBUF9DVFJMX1JFUVNFUV9TSElGVDsKKwljb250cm9sID0gY2hhbi0+YnVmZmVyX3NlcSA8PCBMMkNBUF9DVFJMX1JFUVNFUV9TSElGVDsKIAljb250cm9sIHw9IEwyQ0FQX1NVUEVSX1JDVl9SRUFEWSB8IEwyQ0FQX0NUUkxfUE9MTDsKLQlsMmNhcF9zZW5kX3NmcmFtZShwaSwgY29udHJvbCk7Ci0JbDJjYXBfcGkoc2spLT5yZXRyeV9jb3VudCA9IDE7CisJbDJjYXBfc2VuZF9zZnJhbWUoY2hhbiwgY29udHJvbCk7CisJY2hhbi0+cmV0cnlfY291bnQgPSAxOwogCi0JZGVsX3RpbWVyKCZwaS0+cmV0cmFuc190aW1lcik7CisJZGVsX3RpbWVyKCZjaGFuLT5yZXRyYW5zX3RpbWVyKTsKIAlfX21vZF9tb25pdG9yX3RpbWVyKCk7CiAKLQlsMmNhcF9waShzayktPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9XQUlUX0Y7CisJY2hhbi0+Y29ubl9zdGF0ZSB8PSBMMkNBUF9DT05OX1dBSVRfRjsKIAogZG9uZToKLQlwaS0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9MT0NBTF9CVVNZOwotCXBpLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1JOUl9TRU5UOworCWNoYW4tPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fTE9DQUxfQlVTWTsKKwljaGFuLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1JOUl9TRU5UOwogCi0JQlRfREJHKCJzayAlcCwgRXhpdCBsb2NhbCBidXN5Iiwgc2spOworCUJUX0RCRygiY2hhbiAlcCwgRXhpdCBsb2NhbCBidXN5IiwgY2hhbik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI5MjMsMjEgKzMwNjcsMjEgQEAKIHN0YXRpYyB2b2lkIGwyY2FwX2J1c3lfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0Jc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbDJjYXBfcGluZm8sIGJ1c3lfd29yayk7Ci0Jc3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopcGk7CisJc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4gPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGwyY2FwX2NoYW4sIGJ1c3lfd29yayk7CisJc3RydWN0IHNvY2sgKnNrID0gY2hhbi0+c2s7CiAJaW50IG5fdHJpZXMgPSAwLCB0aW1lbyA9IEhaLzUsIGVycjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJbG9ja19zb2NrKHNrKTsKIAogCWFkZF93YWl0X3F1ZXVlKHNrX3NsZWVwKHNrKSwgJndhaXQpOwotCXdoaWxlICgoc2tiID0gc2tiX3BlZWsoQlVTWV9RVUVVRShzaykpKSkgeworCXdoaWxlICgoc2tiID0gc2tiX3BlZWsoJmNoYW4tPmJ1c3lfcSkpKSB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAKIAkJaWYgKG5fdHJpZXMrKyA+IEwyQ0FQX0xPQ0FMX0JVU1lfVFJJRVMpIHsKIAkJCWVyciA9IC1FQlVTWTsKLQkJCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEocGktPmNvbm4sIHNrLCBFQlVTWSk7CisJCQlsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKGNoYW4tPmNvbm4sIGNoYW4sIEVCVVNZKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTI5NTcsNyArMzEwMSw3IEBACiAJCWlmIChlcnIpCiAJCQlicmVhazsKIAotCQlpZiAobDJjYXBfdHJ5X3B1c2hfcnhfc2tiKHNrKSA9PSAwKQorCQlpZiAobDJjYXBfdHJ5X3B1c2hfcnhfc2tiKGNoYW4pID09IDApCiAJCQlicmVhazsKIAl9CiAKQEAgLTI5NjcsNDggKzMxMTEsNDYgQEAKIAlyZWxlYXNlX3NvY2soc2spOwogfQogCi1zdGF0aWMgaW50IGwyY2FwX3B1c2hfcnhfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IGNvbnRyb2wpCitzdGF0aWMgaW50IGwyY2FwX3B1c2hfcnhfc2tiKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgY29udHJvbCkKIHsKLQlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwogCWludCBzY3RybCwgZXJyOwogCi0JaWYgKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9MT0NBTF9CVVNZKSB7CisJaWYgKGNoYW4tPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX0xPQ0FMX0JVU1kpIHsKIAkJYnRfY2Ioc2tiKS0+c2FyID0gY29udHJvbCA+PiBMMkNBUF9DVFJMX1NBUl9TSElGVDsKLQkJX19za2JfcXVldWVfdGFpbChCVVNZX1FVRVVFKHNrKSwgc2tiKTsKLQkJcmV0dXJuIGwyY2FwX3RyeV9wdXNoX3J4X3NrYihzayk7CisJCV9fc2tiX3F1ZXVlX3RhaWwoJmNoYW4tPmJ1c3lfcSwgc2tiKTsKKwkJcmV0dXJuIGwyY2FwX3RyeV9wdXNoX3J4X3NrYihjaGFuKTsKIAogCiAJfQogCi0JZXJyID0gbDJjYXBfZXJ0bV9yZWFzc2VtYmx5X3NkdShzaywgc2tiLCBjb250cm9sKTsKKwllcnIgPSBsMmNhcF9lcnRtX3JlYXNzZW1ibHlfc2R1KGNoYW4sIHNrYiwgY29udHJvbCk7CiAJaWYgKGVyciA+PSAwKSB7Ci0JCXBpLT5idWZmZXJfc2VxID0gKHBpLT5idWZmZXJfc2VxICsgMSkgJSA2NDsKKwkJY2hhbi0+YnVmZmVyX3NlcSA9IChjaGFuLT5idWZmZXJfc2VxICsgMSkgJSA2NDsKIAkJcmV0dXJuIGVycjsKIAl9CiAKIAkvKiBCdXN5IENvbmRpdGlvbiAqLwotCUJUX0RCRygic2sgJXAsIEVudGVyIGxvY2FsIGJ1c3kiLCBzayk7CisJQlRfREJHKCJjaGFuICVwLCBFbnRlciBsb2NhbCBidXN5IiwgY2hhbik7CiAKLQlwaS0+Y29ubl9zdGF0ZSB8PSBMMkNBUF9DT05OX0xPQ0FMX0JVU1k7CisJY2hhbi0+Y29ubl9zdGF0ZSB8PSBMMkNBUF9DT05OX0xPQ0FMX0JVU1k7CiAJYnRfY2Ioc2tiKS0+c2FyID0gY29udHJvbCA+PiBMMkNBUF9DVFJMX1NBUl9TSElGVDsKLQlfX3NrYl9xdWV1ZV90YWlsKEJVU1lfUVVFVUUoc2spLCBza2IpOworCV9fc2tiX3F1ZXVlX3RhaWwoJmNoYW4tPmJ1c3lfcSwgc2tiKTsKIAotCXNjdHJsID0gcGktPmJ1ZmZlcl9zZXEgPDwgTDJDQVBfQ1RSTF9SRVFTRVFfU0hJRlQ7CisJc2N0cmwgPSBjaGFuLT5idWZmZXJfc2VxIDw8IEwyQ0FQX0NUUkxfUkVRU0VRX1NISUZUOwogCXNjdHJsIHw9IEwyQ0FQX1NVUEVSX1JDVl9OT1RfUkVBRFk7Ci0JbDJjYXBfc2VuZF9zZnJhbWUocGksIHNjdHJsKTsKKwlsMmNhcF9zZW5kX3NmcmFtZShjaGFuLCBzY3RybCk7CiAKLQlwaS0+Y29ubl9zdGF0ZSB8PSBMMkNBUF9DT05OX1JOUl9TRU5UOworCWNoYW4tPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9STlJfU0VOVDsKIAotCWRlbF90aW1lcigmcGktPmFja190aW1lcik7CisJZGVsX3RpbWVyKCZjaGFuLT5hY2tfdGltZXIpOwogCi0JcXVldWVfd29yayhfYnVzeV93cSwgJnBpLT5idXN5X3dvcmspOworCXF1ZXVlX3dvcmsoX2J1c3lfd3EsICZjaGFuLT5idXN5X3dvcmspOwogCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBsMmNhcF9zdHJlYW1pbmdfcmVhc3NlbWJseV9zZHUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgY29udHJvbCkKK3N0YXRpYyBpbnQgbDJjYXBfc3RyZWFtaW5nX3JlYXNzZW1ibHlfc2R1KHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgY29udHJvbCkKIHsKLQlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwogCXN0cnVjdCBza19idWZmICpfc2tiOwogCWludCBlcnIgPSAtRUlOVkFMOwogCkBAIC0zMDE5LDgwICszMTYxLDgwIEBACiAKIAlzd2l0Y2ggKGNvbnRyb2wgJiBMMkNBUF9DVFJMX1NBUikgewogCWNhc2UgTDJDQVBfU0RVX1VOU0VHTUVOVEVEOgotCQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NBUl9TRFUpIHsKLQkJCWtmcmVlX3NrYihwaS0+c2R1KTsKKwkJaWYgKGNoYW4tPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NBUl9TRFUpIHsKKwkJCWtmcmVlX3NrYihjaGFuLT5zZHUpOwogCQkJYnJlYWs7CiAJCX0KIAotCQllcnIgPSBzb2NrX3F1ZXVlX3Jjdl9za2Ioc2ssIHNrYik7CisJCWVyciA9IHNvY2tfcXVldWVfcmN2X3NrYihjaGFuLT5zaywgc2tiKTsKIAkJaWYgKCFlcnIpCiAJCQlyZXR1cm4gMDsKIAogCQlicmVhazsKIAogCWNhc2UgTDJDQVBfU0RVX1NUQVJUOgotCQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NBUl9TRFUpIHsKLQkJCWtmcmVlX3NrYihwaS0+c2R1KTsKKwkJaWYgKGNoYW4tPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NBUl9TRFUpIHsKKwkJCWtmcmVlX3NrYihjaGFuLT5zZHUpOwogCQkJYnJlYWs7CiAJCX0KIAotCQlwaS0+c2R1X2xlbiA9IGdldF91bmFsaWduZWRfbGUxNihza2ItPmRhdGEpOworCQljaGFuLT5zZHVfbGVuID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHNrYi0+ZGF0YSk7CiAJCXNrYl9wdWxsKHNrYiwgMik7CiAKLQkJaWYgKHBpLT5zZHVfbGVuID4gcGktPmltdHUpIHsKKwkJaWYgKGNoYW4tPnNkdV9sZW4gPiBjaGFuLT5pbXR1KSB7CiAJCQllcnIgPSAtRU1TR1NJWkU7CiAJCQlicmVhazsKIAkJfQogCi0JCXBpLT5zZHUgPSBidF9za2JfYWxsb2MocGktPnNkdV9sZW4sIEdGUF9BVE9NSUMpOwotCQlpZiAoIXBpLT5zZHUpIHsKKwkJY2hhbi0+c2R1ID0gYnRfc2tiX2FsbG9jKGNoYW4tPnNkdV9sZW4sIEdGUF9BVE9NSUMpOworCQlpZiAoIWNoYW4tPnNkdSkgewogCQkJZXJyID0gLUVOT01FTTsKIAkJCWJyZWFrOwogCQl9CiAKLQkJbWVtY3B5KHNrYl9wdXQocGktPnNkdSwgc2tiLT5sZW4pLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwkJbWVtY3B5KHNrYl9wdXQoY2hhbi0+c2R1LCBza2ItPmxlbiksIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCi0JCXBpLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU0FSX1NEVTsKLQkJcGktPnBhcnRpYWxfc2R1X2xlbiA9IHNrYi0+bGVuOworCQljaGFuLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU0FSX1NEVTsKKwkJY2hhbi0+cGFydGlhbF9zZHVfbGVuID0gc2tiLT5sZW47CiAJCWVyciA9IDA7CiAJCWJyZWFrOwogCiAJY2FzZSBMMkNBUF9TRFVfQ09OVElOVUU6Ci0JCWlmICghKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TQVJfU0RVKSkKKwkJaWYgKCEoY2hhbi0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fU0FSX1NEVSkpCiAJCQlicmVhazsKIAotCQltZW1jcHkoc2tiX3B1dChwaS0+c2R1LCBza2ItPmxlbiksIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCQltZW1jcHkoc2tiX3B1dChjaGFuLT5zZHUsIHNrYi0+bGVuKSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CiAKLQkJcGktPnBhcnRpYWxfc2R1X2xlbiArPSBza2ItPmxlbjsKLQkJaWYgKHBpLT5wYXJ0aWFsX3NkdV9sZW4gPiBwaS0+c2R1X2xlbikKLQkJCWtmcmVlX3NrYihwaS0+c2R1KTsKKwkJY2hhbi0+cGFydGlhbF9zZHVfbGVuICs9IHNrYi0+bGVuOworCQlpZiAoY2hhbi0+cGFydGlhbF9zZHVfbGVuID4gY2hhbi0+c2R1X2xlbikKKwkJCWtmcmVlX3NrYihjaGFuLT5zZHUpOwogCQllbHNlCiAJCQllcnIgPSAwOwogCiAJCWJyZWFrOwogCiAJY2FzZSBMMkNBUF9TRFVfRU5EOgotCQlpZiAoIShwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fU0FSX1NEVSkpCisJCWlmICghKGNoYW4tPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NBUl9TRFUpKQogCQkJYnJlYWs7CiAKLQkJbWVtY3B5KHNrYl9wdXQocGktPnNkdSwgc2tiLT5sZW4pLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwkJbWVtY3B5KHNrYl9wdXQoY2hhbi0+c2R1LCBza2ItPmxlbiksIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCi0JCXBpLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1NBUl9TRFU7Ci0JCXBpLT5wYXJ0aWFsX3NkdV9sZW4gKz0gc2tiLT5sZW47CisJCWNoYW4tPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fU0FSX1NEVTsKKwkJY2hhbi0+cGFydGlhbF9zZHVfbGVuICs9IHNrYi0+bGVuOwogCi0JCWlmIChwaS0+cGFydGlhbF9zZHVfbGVuID4gcGktPmltdHUpCisJCWlmIChjaGFuLT5wYXJ0aWFsX3NkdV9sZW4gPiBjaGFuLT5pbXR1KQogCQkJZ290byBkcm9wOwogCi0JCWlmIChwaS0+cGFydGlhbF9zZHVfbGVuID09IHBpLT5zZHVfbGVuKSB7Ci0JCQlfc2tiID0gc2tiX2Nsb25lKHBpLT5zZHUsIEdGUF9BVE9NSUMpOwotCQkJZXJyID0gc29ja19xdWV1ZV9yY3Zfc2tiKHNrLCBfc2tiKTsKKwkJaWYgKGNoYW4tPnBhcnRpYWxfc2R1X2xlbiA9PSBjaGFuLT5zZHVfbGVuKSB7CisJCQlfc2tiID0gc2tiX2Nsb25lKGNoYW4tPnNkdSwgR0ZQX0FUT01JQyk7CisJCQllcnIgPSBzb2NrX3F1ZXVlX3Jjdl9za2IoY2hhbi0+c2ssIF9za2IpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJa2ZyZWVfc2tiKF9za2IpOwogCQl9CiAJCWVyciA9IDA7CiAKIGRyb3A6Ci0JCWtmcmVlX3NrYihwaS0+c2R1KTsKKwkJa2ZyZWVfc2tiKGNoYW4tPnNkdSk7CiAJCWJyZWFrOwogCX0KIApAQCAtMzEwMCwzMSArMzI0MiwzMCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIGwyY2FwX2NoZWNrX3NyZWpfZ2FwKHN0cnVjdCBzb2NrICpzaywgdTggdHhfc2VxKQorc3RhdGljIHZvaWQgbDJjYXBfY2hlY2tfc3Jlal9nYXAoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sIHU4IHR4X3NlcSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXUxNiBjb250cm9sOwogCi0Jd2hpbGUgKChza2IgPSBza2JfcGVlayhTUkVKX1FVRVVFKHNrKSkpKSB7CisJd2hpbGUgKChza2IgPSBza2JfcGVlaygmY2hhbi0+c3Jlal9xKSkpIHsKIAkJaWYgKGJ0X2NiKHNrYiktPnR4X3NlcSAhPSB0eF9zZXEpCiAJCQlicmVhazsKIAotCQlza2IgPSBza2JfZGVxdWV1ZShTUkVKX1FVRVVFKHNrKSk7CisJCXNrYiA9IHNrYl9kZXF1ZXVlKCZjaGFuLT5zcmVqX3EpOwogCQljb250cm9sID0gYnRfY2Ioc2tiKS0+c2FyIDw8IEwyQ0FQX0NUUkxfU0FSX1NISUZUOwotCQlsMmNhcF9lcnRtX3JlYXNzZW1ibHlfc2R1KHNrLCBza2IsIGNvbnRyb2wpOwotCQlsMmNhcF9waShzayktPmJ1ZmZlcl9zZXFfc3JlaiA9Ci0JCQkobDJjYXBfcGkoc2spLT5idWZmZXJfc2VxX3NyZWogKyAxKSAlIDY0OworCQlsMmNhcF9lcnRtX3JlYXNzZW1ibHlfc2R1KGNoYW4sIHNrYiwgY29udHJvbCk7CisJCWNoYW4tPmJ1ZmZlcl9zZXFfc3JlaiA9CisJCQkoY2hhbi0+YnVmZmVyX3NlcV9zcmVqICsgMSkgJSA2NDsKIAkJdHhfc2VxID0gKHR4X3NlcSArIDEpICUgNjQ7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBsMmNhcF9yZXNlbmRfc3JlamZyYW1lKHN0cnVjdCBzb2NrICpzaywgdTggdHhfc2VxKQorc3RhdGljIHZvaWQgbDJjYXBfcmVzZW5kX3NyZWpmcmFtZShzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgdTggdHhfc2VxKQogewotCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CiAJc3RydWN0IHNyZWpfbGlzdCAqbCwgKnRtcDsKIAl1MTYgY29udHJvbDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsLCB0bXAsIFNSRUpfTElTVChzayksIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgdG1wLCAmY2hhbi0+c3Jlal9sLCBsaXN0KSB7CiAJCWlmIChsLT50eF9zZXEgPT0gdHhfc2VxKSB7CiAJCQlsaXN0X2RlbCgmbC0+bGlzdCk7CiAJCQlrZnJlZShsKTsKQEAgLTMxMzIsMTA3ICszMjczLDEwNSBAQAogCQl9CiAJCWNvbnRyb2wgPSBMMkNBUF9TVVBFUl9TRUxFQ1RfUkVKRUNUOwogCQljb250cm9sIHw9IGwtPnR4X3NlcSA8PCBMMkNBUF9DVFJMX1JFUVNFUV9TSElGVDsKLQkJbDJjYXBfc2VuZF9zZnJhbWUocGksIGNvbnRyb2wpOworCQlsMmNhcF9zZW5kX3NmcmFtZShjaGFuLCBjb250cm9sKTsKIAkJbGlzdF9kZWwoJmwtPmxpc3QpOwotCQlsaXN0X2FkZF90YWlsKCZsLT5saXN0LCBTUkVKX0xJU1Qoc2spKTsKKwkJbGlzdF9hZGRfdGFpbCgmbC0+bGlzdCwgJmNoYW4tPnNyZWpfbCk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBsMmNhcF9zZW5kX3NyZWpmcmFtZShzdHJ1Y3Qgc29jayAqc2ssIHU4IHR4X3NlcSkKK3N0YXRpYyB2b2lkIGwyY2FwX3NlbmRfc3JlamZyYW1lKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCB1OCB0eF9zZXEpCiB7Ci0Jc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKHNrKTsKIAlzdHJ1Y3Qgc3Jlal9saXN0ICpuZXc7CiAJdTE2IGNvbnRyb2w7CiAKLQl3aGlsZSAodHhfc2VxICE9IHBpLT5leHBlY3RlZF90eF9zZXEpIHsKKwl3aGlsZSAodHhfc2VxICE9IGNoYW4tPmV4cGVjdGVkX3R4X3NlcSkgewogCQljb250cm9sID0gTDJDQVBfU1VQRVJfU0VMRUNUX1JFSkVDVDsKLQkJY29udHJvbCB8PSBwaS0+ZXhwZWN0ZWRfdHhfc2VxIDw8IEwyQ0FQX0NUUkxfUkVRU0VRX1NISUZUOwotCQlsMmNhcF9zZW5kX3NmcmFtZShwaSwgY29udHJvbCk7CisJCWNvbnRyb2wgfD0gY2hhbi0+ZXhwZWN0ZWRfdHhfc2VxIDw8IEwyQ0FQX0NUUkxfUkVRU0VRX1NISUZUOworCQlsMmNhcF9zZW5kX3NmcmFtZShjaGFuLCBjb250cm9sKTsKIAogCQluZXcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3Jlal9saXN0KSwgR0ZQX0FUT01JQyk7Ci0JCW5ldy0+dHhfc2VxID0gcGktPmV4cGVjdGVkX3R4X3NlcTsKLQkJcGktPmV4cGVjdGVkX3R4X3NlcSA9IChwaS0+ZXhwZWN0ZWRfdHhfc2VxICsgMSkgJSA2NDsKLQkJbGlzdF9hZGRfdGFpbCgmbmV3LT5saXN0LCBTUkVKX0xJU1Qoc2spKTsKKwkJbmV3LT50eF9zZXEgPSBjaGFuLT5leHBlY3RlZF90eF9zZXE7CisJCWNoYW4tPmV4cGVjdGVkX3R4X3NlcSA9IChjaGFuLT5leHBlY3RlZF90eF9zZXEgKyAxKSAlIDY0OworCQlsaXN0X2FkZF90YWlsKCZuZXctPmxpc3QsICZjaGFuLT5zcmVqX2wpOwogCX0KLQlwaS0+ZXhwZWN0ZWRfdHhfc2VxID0gKHBpLT5leHBlY3RlZF90eF9zZXEgKyAxKSAlIDY0OworCWNoYW4tPmV4cGVjdGVkX3R4X3NlcSA9IChjaGFuLT5leHBlY3RlZF90eF9zZXEgKyAxKSAlIDY0OwogfQogCi1zdGF0aWMgaW5saW5lIGludCBsMmNhcF9kYXRhX2NoYW5uZWxfaWZyYW1lKHN0cnVjdCBzb2NrICpzaywgdTE2IHJ4X2NvbnRyb2wsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW5saW5lIGludCBsMmNhcF9kYXRhX2NoYW5uZWxfaWZyYW1lKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCB1MTYgcnhfY29udHJvbCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwogCXU4IHR4X3NlcSA9IF9fZ2V0X3R4c2VxKHJ4X2NvbnRyb2wpOwogCXU4IHJlcV9zZXEgPSBfX2dldF9yZXFzZXEocnhfY29udHJvbCk7CiAJdTggc2FyID0gcnhfY29udHJvbCA+PiBMMkNBUF9DVFJMX1NBUl9TSElGVDsKIAlpbnQgdHhfc2VxX29mZnNldCwgZXhwZWN0ZWRfdHhfc2VxX29mZnNldDsKLQlpbnQgbnVtX3RvX2FjayA9IChwaS0+dHhfd2luLzYpICsgMTsKKwlpbnQgbnVtX3RvX2FjayA9IChjaGFuLT50eF93aW4vNikgKyAxOwogCWludCBlcnIgPSAwOwogCi0JQlRfREJHKCJzayAlcCBsZW4gJWQgdHhfc2VxICVkIHJ4X2NvbnRyb2wgMHglNC40eCIsIHNrLCBza2ItPmxlbiwgdHhfc2VxLAotCQkJCQkJCQlyeF9jb250cm9sKTsKKwlCVF9EQkcoImNoYW4gJXAgbGVuICVkIHR4X3NlcSAlZCByeF9jb250cm9sIDB4JTQuNHgiLCBjaGFuLCBza2ItPmxlbiwKKwkJCQkJCQl0eF9zZXEsIHJ4X2NvbnRyb2wpOwogCiAJaWYgKEwyQ0FQX0NUUkxfRklOQUwgJiByeF9jb250cm9sICYmCi0JCQlsMmNhcF9waShzayktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1dBSVRfRikgewotCQlkZWxfdGltZXIoJnBpLT5tb25pdG9yX3RpbWVyKTsKLQkJaWYgKHBpLT51bmFja2VkX2ZyYW1lcyA+IDApCisJCQljaGFuLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9XQUlUX0YpIHsKKwkJZGVsX3RpbWVyKCZjaGFuLT5tb25pdG9yX3RpbWVyKTsKKwkJaWYgKGNoYW4tPnVuYWNrZWRfZnJhbWVzID4gMCkKIAkJCV9fbW9kX3JldHJhbnNfdGltZXIoKTsKLQkJcGktPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fV0FJVF9GOworCQljaGFuLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1dBSVRfRjsKIAl9CiAKLQlwaS0+ZXhwZWN0ZWRfYWNrX3NlcSA9IHJlcV9zZXE7Ci0JbDJjYXBfZHJvcF9hY2tlZF9mcmFtZXMoc2spOworCWNoYW4tPmV4cGVjdGVkX2Fja19zZXEgPSByZXFfc2VxOworCWwyY2FwX2Ryb3BfYWNrZWRfZnJhbWVzKGNoYW4pOwogCi0JaWYgKHR4X3NlcSA9PSBwaS0+ZXhwZWN0ZWRfdHhfc2VxKQorCWlmICh0eF9zZXEgPT0gY2hhbi0+ZXhwZWN0ZWRfdHhfc2VxKQogCQlnb3RvIGV4cGVjdGVkOwogCi0JdHhfc2VxX29mZnNldCA9ICh0eF9zZXEgLSBwaS0+YnVmZmVyX3NlcSkgJSA2NDsKKwl0eF9zZXFfb2Zmc2V0ID0gKHR4X3NlcSAtIGNoYW4tPmJ1ZmZlcl9zZXEpICUgNjQ7CiAJaWYgKHR4X3NlcV9vZmZzZXQgPCAwKQogCQl0eF9zZXFfb2Zmc2V0ICs9IDY0OwogCiAJLyogaW52YWxpZCB0eF9zZXEgKi8KLQlpZiAodHhfc2VxX29mZnNldCA+PSBwaS0+dHhfd2luKSB7Ci0JCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEocGktPmNvbm4sIHNrLCBFQ09OTlJFU0VUKTsKKwlpZiAodHhfc2VxX29mZnNldCA+PSBjaGFuLT50eF93aW4pIHsKKwkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShjaGFuLT5jb25uLCBjaGFuLCBFQ09OTlJFU0VUKTsKIAkJZ290byBkcm9wOwogCX0KIAotCWlmIChwaS0+Y29ubl9zdGF0ZSA9PSBMMkNBUF9DT05OX0xPQ0FMX0JVU1kpCisJaWYgKGNoYW4tPmNvbm5fc3RhdGUgPT0gTDJDQVBfQ09OTl9MT0NBTF9CVVNZKQogCQlnb3RvIGRyb3A7CiAKLQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NSRUpfU0VOVCkgeworCWlmIChjaGFuLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TUkVKX1NFTlQpIHsKIAkJc3RydWN0IHNyZWpfbGlzdCAqZmlyc3Q7CiAKLQkJZmlyc3QgPSBsaXN0X2ZpcnN0X2VudHJ5KFNSRUpfTElTVChzayksCisJCWZpcnN0ID0gbGlzdF9maXJzdF9lbnRyeSgmY2hhbi0+c3Jlal9sLAogCQkJCXN0cnVjdCBzcmVqX2xpc3QsIGxpc3QpOwogCQlpZiAodHhfc2VxID09IGZpcnN0LT50eF9zZXEpIHsKLQkJCWwyY2FwX2FkZF90b19zcmVqX3F1ZXVlKHNrLCBza2IsIHR4X3NlcSwgc2FyKTsKLQkJCWwyY2FwX2NoZWNrX3NyZWpfZ2FwKHNrLCB0eF9zZXEpOworCQkJbDJjYXBfYWRkX3RvX3NyZWpfcXVldWUoY2hhbiwgc2tiLCB0eF9zZXEsIHNhcik7CisJCQlsMmNhcF9jaGVja19zcmVqX2dhcChjaGFuLCB0eF9zZXEpOwogCiAJCQlsaXN0X2RlbCgmZmlyc3QtPmxpc3QpOwogCQkJa2ZyZWUoZmlyc3QpOwogCi0JCQlpZiAobGlzdF9lbXB0eShTUkVKX0xJU1Qoc2spKSkgewotCQkJCXBpLT5idWZmZXJfc2VxID0gcGktPmJ1ZmZlcl9zZXFfc3JlajsKLQkJCQlwaS0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9TUkVKX1NFTlQ7Ci0JCQkJbDJjYXBfc2VuZF9hY2socGkpOwotCQkJCUJUX0RCRygic2sgJXAsIEV4aXQgU1JFSl9TRU5UIiwgc2spOworCQkJaWYgKGxpc3RfZW1wdHkoJmNoYW4tPnNyZWpfbCkpIHsKKwkJCQljaGFuLT5idWZmZXJfc2VxID0gY2hhbi0+YnVmZmVyX3NlcV9zcmVqOworCQkJCWNoYW4tPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fU1JFSl9TRU5UOworCQkJCWwyY2FwX3NlbmRfYWNrKGNoYW4pOworCQkJCUJUX0RCRygiY2hhbiAlcCwgRXhpdCBTUkVKX1NFTlQiLCBjaGFuKTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCBzcmVqX2xpc3QgKmw7CiAKIAkJCS8qIGR1cGxpY2F0ZWQgdHhfc2VxICovCi0JCQlpZiAobDJjYXBfYWRkX3RvX3NyZWpfcXVldWUoc2ssIHNrYiwgdHhfc2VxLCBzYXIpIDwgMCkKKwkJCWlmIChsMmNhcF9hZGRfdG9fc3Jlal9xdWV1ZShjaGFuLCBza2IsIHR4X3NlcSwgc2FyKSA8IDApCiAJCQkJZ290byBkcm9wOwogCi0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGwsIFNSRUpfTElTVChzayksIGxpc3QpIHsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkobCwgJmNoYW4tPnNyZWpfbCwgbGlzdCkgewogCQkJCWlmIChsLT50eF9zZXEgPT0gdHhfc2VxKSB7Ci0JCQkJCWwyY2FwX3Jlc2VuZF9zcmVqZnJhbWUoc2ssIHR4X3NlcSk7CisJCQkJCWwyY2FwX3Jlc2VuZF9zcmVqZnJhbWUoY2hhbiwgdHhfc2VxKTsKIAkJCQkJcmV0dXJuIDA7CiAJCQkJfQogCQkJfQotCQkJbDJjYXBfc2VuZF9zcmVqZnJhbWUoc2ssIHR4X3NlcSk7CisJCQlsMmNhcF9zZW5kX3NyZWpmcmFtZShjaGFuLCB0eF9zZXEpOwogCQl9CiAJfSBlbHNlIHsKIAkJZXhwZWN0ZWRfdHhfc2VxX29mZnNldCA9Ci0JCQkocGktPmV4cGVjdGVkX3R4X3NlcSAtIHBpLT5idWZmZXJfc2VxKSAlIDY0OworCQkJKGNoYW4tPmV4cGVjdGVkX3R4X3NlcSAtIGNoYW4tPmJ1ZmZlcl9zZXEpICUgNjQ7CiAJCWlmIChleHBlY3RlZF90eF9zZXFfb2Zmc2V0IDwgMCkKIAkJCWV4cGVjdGVkX3R4X3NlcV9vZmZzZXQgKz0gNjQ7CiAKQEAgLTMyNDAsNTEgKzMzNzksNTEgQEAKIAkJaWYgKHR4X3NlcV9vZmZzZXQgPCBleHBlY3RlZF90eF9zZXFfb2Zmc2V0KQogCQkJZ290byBkcm9wOwogCi0JCXBpLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU1JFSl9TRU5UOworCQljaGFuLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU1JFSl9TRU5UOwogCi0JCUJUX0RCRygic2sgJXAsIEVudGVyIFNSRUoiLCBzayk7CisJCUJUX0RCRygiY2hhbiAlcCwgRW50ZXIgU1JFSiIsIGNoYW4pOwogCi0JCUlOSVRfTElTVF9IRUFEKFNSRUpfTElTVChzaykpOwotCQlwaS0+YnVmZmVyX3NlcV9zcmVqID0gcGktPmJ1ZmZlcl9zZXE7CisJCUlOSVRfTElTVF9IRUFEKCZjaGFuLT5zcmVqX2wpOworCQljaGFuLT5idWZmZXJfc2VxX3NyZWogPSBjaGFuLT5idWZmZXJfc2VxOwogCi0JCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdChTUkVKX1FVRVVFKHNrKSk7Ci0JCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdChCVVNZX1FVRVVFKHNrKSk7Ci0JCWwyY2FwX2FkZF90b19zcmVqX3F1ZXVlKHNrLCBza2IsIHR4X3NlcSwgc2FyKTsKKwkJX19za2JfcXVldWVfaGVhZF9pbml0KCZjaGFuLT5zcmVqX3EpOworCQlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmNoYW4tPmJ1c3lfcSk7CisJCWwyY2FwX2FkZF90b19zcmVqX3F1ZXVlKGNoYW4sIHNrYiwgdHhfc2VxLCBzYXIpOwogCi0JCXBpLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU0VORF9QQklUOworCQljaGFuLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU0VORF9QQklUOwogCi0JCWwyY2FwX3NlbmRfc3JlamZyYW1lKHNrLCB0eF9zZXEpOworCQlsMmNhcF9zZW5kX3NyZWpmcmFtZShjaGFuLCB0eF9zZXEpOwogCi0JCWRlbF90aW1lcigmcGktPmFja190aW1lcik7CisJCWRlbF90aW1lcigmY2hhbi0+YWNrX3RpbWVyKTsKIAl9CiAJcmV0dXJuIDA7CiAKIGV4cGVjdGVkOgotCXBpLT5leHBlY3RlZF90eF9zZXEgPSAocGktPmV4cGVjdGVkX3R4X3NlcSArIDEpICUgNjQ7CisJY2hhbi0+ZXhwZWN0ZWRfdHhfc2VxID0gKGNoYW4tPmV4cGVjdGVkX3R4X3NlcSArIDEpICUgNjQ7CiAKLQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NSRUpfU0VOVCkgeworCWlmIChjaGFuLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TUkVKX1NFTlQpIHsKIAkJYnRfY2Ioc2tiKS0+dHhfc2VxID0gdHhfc2VxOwogCQlidF9jYihza2IpLT5zYXIgPSBzYXI7Ci0JCV9fc2tiX3F1ZXVlX3RhaWwoU1JFSl9RVUVVRShzayksIHNrYik7CisJCV9fc2tiX3F1ZXVlX3RhaWwoJmNoYW4tPnNyZWpfcSwgc2tiKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JZXJyID0gbDJjYXBfcHVzaF9yeF9za2Ioc2ssIHNrYiwgcnhfY29udHJvbCk7CisJZXJyID0gbDJjYXBfcHVzaF9yeF9za2IoY2hhbiwgc2tiLCByeF9jb250cm9sKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIDA7CiAKIAlpZiAocnhfY29udHJvbCAmIEwyQ0FQX0NUUkxfRklOQUwpIHsKLQkJaWYgKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9SRUpfQUNUKQotCQkJcGktPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fUkVKX0FDVDsKKwkJaWYgKGNoYW4tPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1JFSl9BQ1QpCisJCQljaGFuLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1JFSl9BQ1Q7CiAJCWVsc2UKLQkJCWwyY2FwX3JldHJhbnNtaXRfZnJhbWVzKHNrKTsKKwkJCWwyY2FwX3JldHJhbnNtaXRfZnJhbWVzKGNoYW4pOwogCX0KIAogCV9fbW9kX2Fja190aW1lcigpOwogCi0JcGktPm51bV9hY2tlZCA9IChwaS0+bnVtX2Fja2VkICsgMSkgJSBudW1fdG9fYWNrOwotCWlmIChwaS0+bnVtX2Fja2VkID09IG51bV90b19hY2sgLSAxKQotCQlsMmNhcF9zZW5kX2FjayhwaSk7CisJY2hhbi0+bnVtX2Fja2VkID0gKGNoYW4tPm51bV9hY2tlZCArIDEpICUgbnVtX3RvX2FjazsKKwlpZiAoY2hhbi0+bnVtX2Fja2VkID09IG51bV90b19hY2sgLSAxKQorCQlsMmNhcF9zZW5kX2FjayhjaGFuKTsKIAogCXJldHVybiAwOwogCkBAIC0zMjkzLDE2NSArMzQzMiwxNjAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGwyY2FwX2RhdGFfY2hhbm5lbF9ycmZyYW1lKHN0cnVjdCBzb2NrICpzaywgdTE2IHJ4X2NvbnRyb2wpCitzdGF0aWMgaW5saW5lIHZvaWQgbDJjYXBfZGF0YV9jaGFubmVsX3JyZnJhbWUoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sIHUxNiByeF9jb250cm9sKQogewotCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7Ci0KLQlCVF9EQkcoInNrICVwLCByZXFfc2VxICVkIGN0cmwgMHglNC40eCIsIHNrLCBfX2dldF9yZXFzZXEocnhfY29udHJvbCksCisJQlRfREJHKCJjaGFuICVwLCByZXFfc2VxICVkIGN0cmwgMHglNC40eCIsIGNoYW4sIF9fZ2V0X3JlcXNlcShyeF9jb250cm9sKSwKIAkJCQkJCXJ4X2NvbnRyb2wpOwogCi0JcGktPmV4cGVjdGVkX2Fja19zZXEgPSBfX2dldF9yZXFzZXEocnhfY29udHJvbCk7Ci0JbDJjYXBfZHJvcF9hY2tlZF9mcmFtZXMoc2spOworCWNoYW4tPmV4cGVjdGVkX2Fja19zZXEgPSBfX2dldF9yZXFzZXEocnhfY29udHJvbCk7CisJbDJjYXBfZHJvcF9hY2tlZF9mcmFtZXMoY2hhbik7CiAKIAlpZiAocnhfY29udHJvbCAmIEwyQ0FQX0NUUkxfUE9MTCkgewotCQlwaS0+Y29ubl9zdGF0ZSB8PSBMMkNBUF9DT05OX1NFTkRfRkJJVDsKLQkJaWYgKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TUkVKX1NFTlQpIHsKLQkJCWlmICgocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1JFTU9URV9CVVNZKSAmJgotCQkJCQkocGktPnVuYWNrZWRfZnJhbWVzID4gMCkpCisJCWNoYW4tPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9TRU5EX0ZCSVQ7CisJCWlmIChjaGFuLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TUkVKX1NFTlQpIHsKKwkJCWlmICgoY2hhbi0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fUkVNT1RFX0JVU1kpICYmCisJCQkJCShjaGFuLT51bmFja2VkX2ZyYW1lcyA+IDApKQogCQkJCV9fbW9kX3JldHJhbnNfdGltZXIoKTsKIAotCQkJcGktPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fUkVNT1RFX0JVU1k7Ci0JCQlsMmNhcF9zZW5kX3NyZWp0YWlsKHNrKTsKKwkJCWNoYW4tPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fUkVNT1RFX0JVU1k7CisJCQlsMmNhcF9zZW5kX3NyZWp0YWlsKGNoYW4pOwogCQl9IGVsc2UgewotCQkJbDJjYXBfc2VuZF9pX29yX3JyX29yX3Jucihzayk7CisJCQlsMmNhcF9zZW5kX2lfb3JfcnJfb3Jfcm5yKGNoYW4pOwogCQl9CiAKIAl9IGVsc2UgaWYgKHJ4X2NvbnRyb2wgJiBMMkNBUF9DVFJMX0ZJTkFMKSB7Ci0JCXBpLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1JFTU9URV9CVVNZOworCQljaGFuLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1JFTU9URV9CVVNZOwogCi0JCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fUkVKX0FDVCkKLQkJCXBpLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1JFSl9BQ1Q7CisJCWlmIChjaGFuLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9SRUpfQUNUKQorCQkJY2hhbi0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9SRUpfQUNUOwogCQllbHNlCi0JCQlsMmNhcF9yZXRyYW5zbWl0X2ZyYW1lcyhzayk7CisJCQlsMmNhcF9yZXRyYW5zbWl0X2ZyYW1lcyhjaGFuKTsKIAogCX0gZWxzZSB7Ci0JCWlmICgocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1JFTU9URV9CVVNZKSAmJgotCQkJCShwaS0+dW5hY2tlZF9mcmFtZXMgPiAwKSkKKwkJaWYgKChjaGFuLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9SRU1PVEVfQlVTWSkgJiYKKwkJCQkoY2hhbi0+dW5hY2tlZF9mcmFtZXMgPiAwKSkKIAkJCV9fbW9kX3JldHJhbnNfdGltZXIoKTsKIAotCQlwaS0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9SRU1PVEVfQlVTWTsKLQkJaWYgKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TUkVKX1NFTlQpCi0JCQlsMmNhcF9zZW5kX2FjayhwaSk7CisJCWNoYW4tPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fUkVNT1RFX0JVU1k7CisJCWlmIChjaGFuLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TUkVKX1NFTlQpCisJCQlsMmNhcF9zZW5kX2FjayhjaGFuKTsKIAkJZWxzZQotCQkJbDJjYXBfZXJ0bV9zZW5kKHNrKTsKKwkJCWwyY2FwX2VydG1fc2VuZChjaGFuKTsKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBsMmNhcF9kYXRhX2NoYW5uZWxfcmVqZnJhbWUoc3RydWN0IHNvY2sgKnNrLCB1MTYgcnhfY29udHJvbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBsMmNhcF9kYXRhX2NoYW5uZWxfcmVqZnJhbWUoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sIHUxNiByeF9jb250cm9sKQogewotCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CiAJdTggdHhfc2VxID0gX19nZXRfcmVxc2VxKHJ4X2NvbnRyb2wpOwogCi0JQlRfREJHKCJzayAlcCwgcmVxX3NlcSAlZCBjdHJsIDB4JTQuNHgiLCBzaywgdHhfc2VxLCByeF9jb250cm9sKTsKKwlCVF9EQkcoImNoYW4gJXAsIHJlcV9zZXEgJWQgY3RybCAweCU0LjR4IiwgY2hhbiwgdHhfc2VxLCByeF9jb250cm9sKTsKIAotCXBpLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1JFTU9URV9CVVNZOworCWNoYW4tPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fUkVNT1RFX0JVU1k7CiAKLQlwaS0+ZXhwZWN0ZWRfYWNrX3NlcSA9IHR4X3NlcTsKLQlsMmNhcF9kcm9wX2Fja2VkX2ZyYW1lcyhzayk7CisJY2hhbi0+ZXhwZWN0ZWRfYWNrX3NlcSA9IHR4X3NlcTsKKwlsMmNhcF9kcm9wX2Fja2VkX2ZyYW1lcyhjaGFuKTsKIAogCWlmIChyeF9jb250cm9sICYgTDJDQVBfQ1RSTF9GSU5BTCkgewotCQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1JFSl9BQ1QpCi0JCQlwaS0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9SRUpfQUNUOworCQlpZiAoY2hhbi0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fUkVKX0FDVCkKKwkJCWNoYW4tPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fUkVKX0FDVDsKIAkJZWxzZQotCQkJbDJjYXBfcmV0cmFuc21pdF9mcmFtZXMoc2spOworCQkJbDJjYXBfcmV0cmFuc21pdF9mcmFtZXMoY2hhbik7CiAJfSBlbHNlIHsKLQkJbDJjYXBfcmV0cmFuc21pdF9mcmFtZXMoc2spOworCQlsMmNhcF9yZXRyYW5zbWl0X2ZyYW1lcyhjaGFuKTsKIAotCQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1dBSVRfRikKLQkJCXBpLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fUkVKX0FDVDsKKwkJaWYgKGNoYW4tPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1dBSVRfRikKKwkJCWNoYW4tPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9SRUpfQUNUOwogCX0KIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBsMmNhcF9kYXRhX2NoYW5uZWxfc3JlamZyYW1lKHN0cnVjdCBzb2NrICpzaywgdTE2IHJ4X2NvbnRyb2wpCitzdGF0aWMgaW5saW5lIHZvaWQgbDJjYXBfZGF0YV9jaGFubmVsX3NyZWpmcmFtZShzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiwgdTE2IHJ4X2NvbnRyb2wpCiB7Ci0Jc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKHNrKTsKIAl1OCB0eF9zZXEgPSBfX2dldF9yZXFzZXEocnhfY29udHJvbCk7CiAKLQlCVF9EQkcoInNrICVwLCByZXFfc2VxICVkIGN0cmwgMHglNC40eCIsIHNrLCB0eF9zZXEsIHJ4X2NvbnRyb2wpOworCUJUX0RCRygiY2hhbiAlcCwgcmVxX3NlcSAlZCBjdHJsIDB4JTQuNHgiLCBjaGFuLCB0eF9zZXEsIHJ4X2NvbnRyb2wpOwogCi0JcGktPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fUkVNT1RFX0JVU1k7CisJY2hhbi0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9SRU1PVEVfQlVTWTsKIAogCWlmIChyeF9jb250cm9sICYgTDJDQVBfQ1RSTF9QT0xMKSB7Ci0JCXBpLT5leHBlY3RlZF9hY2tfc2VxID0gdHhfc2VxOwotCQlsMmNhcF9kcm9wX2Fja2VkX2ZyYW1lcyhzayk7CisJCWNoYW4tPmV4cGVjdGVkX2Fja19zZXEgPSB0eF9zZXE7CisJCWwyY2FwX2Ryb3BfYWNrZWRfZnJhbWVzKGNoYW4pOwogCi0JCXBpLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU0VORF9GQklUOwotCQlsMmNhcF9yZXRyYW5zbWl0X29uZV9mcmFtZShzaywgdHhfc2VxKTsKKwkJY2hhbi0+Y29ubl9zdGF0ZSB8PSBMMkNBUF9DT05OX1NFTkRfRkJJVDsKKwkJbDJjYXBfcmV0cmFuc21pdF9vbmVfZnJhbWUoY2hhbiwgdHhfc2VxKTsKIAotCQlsMmNhcF9lcnRtX3NlbmQoc2spOworCQlsMmNhcF9lcnRtX3NlbmQoY2hhbik7CiAKLQkJaWYgKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9XQUlUX0YpIHsKLQkJCXBpLT5zcmVqX3NhdmVfcmVxc2VxID0gdHhfc2VxOwotCQkJcGktPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9TUkVKX0FDVDsKKwkJaWYgKGNoYW4tPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1dBSVRfRikgeworCQkJY2hhbi0+c3Jlal9zYXZlX3JlcXNlcSA9IHR4X3NlcTsKKwkJCWNoYW4tPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9TUkVKX0FDVDsKIAkJfQogCX0gZWxzZSBpZiAocnhfY29udHJvbCAmIEwyQ0FQX0NUUkxfRklOQUwpIHsKLQkJaWYgKChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fU1JFSl9BQ1QpICYmCi0JCQkJcGktPnNyZWpfc2F2ZV9yZXFzZXEgPT0gdHhfc2VxKQotCQkJcGktPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fU1JFSl9BQ1Q7CisJCWlmICgoY2hhbi0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fU1JFSl9BQ1QpICYmCisJCQkJY2hhbi0+c3Jlal9zYXZlX3JlcXNlcSA9PSB0eF9zZXEpCisJCQljaGFuLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1NSRUpfQUNUOwogCQllbHNlCi0JCQlsMmNhcF9yZXRyYW5zbWl0X29uZV9mcmFtZShzaywgdHhfc2VxKTsKKwkJCWwyY2FwX3JldHJhbnNtaXRfb25lX2ZyYW1lKGNoYW4sIHR4X3NlcSk7CiAJfSBlbHNlIHsKLQkJbDJjYXBfcmV0cmFuc21pdF9vbmVfZnJhbWUoc2ssIHR4X3NlcSk7Ci0JCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fV0FJVF9GKSB7Ci0JCQlwaS0+c3Jlal9zYXZlX3JlcXNlcSA9IHR4X3NlcTsKLQkJCXBpLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU1JFSl9BQ1Q7CisJCWwyY2FwX3JldHJhbnNtaXRfb25lX2ZyYW1lKGNoYW4sIHR4X3NlcSk7CisJCWlmIChjaGFuLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9XQUlUX0YpIHsKKwkJCWNoYW4tPnNyZWpfc2F2ZV9yZXFzZXEgPSB0eF9zZXE7CisJCQljaGFuLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU1JFSl9BQ1Q7CiAJCX0KIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBsMmNhcF9kYXRhX2NoYW5uZWxfcm5yZnJhbWUoc3RydWN0IHNvY2sgKnNrLCB1MTYgcnhfY29udHJvbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBsMmNhcF9kYXRhX2NoYW5uZWxfcm5yZnJhbWUoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sIHUxNiByeF9jb250cm9sKQogewotCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CiAJdTggdHhfc2VxID0gX19nZXRfcmVxc2VxKHJ4X2NvbnRyb2wpOwogCi0JQlRfREJHKCJzayAlcCwgcmVxX3NlcSAlZCBjdHJsIDB4JTQuNHgiLCBzaywgdHhfc2VxLCByeF9jb250cm9sKTsKKwlCVF9EQkcoImNoYW4gJXAsIHJlcV9zZXEgJWQgY3RybCAweCU0LjR4IiwgY2hhbiwgdHhfc2VxLCByeF9jb250cm9sKTsKIAotCXBpLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fUkVNT1RFX0JVU1k7Ci0JcGktPmV4cGVjdGVkX2Fja19zZXEgPSB0eF9zZXE7Ci0JbDJjYXBfZHJvcF9hY2tlZF9mcmFtZXMoc2spOworCWNoYW4tPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9SRU1PVEVfQlVTWTsKKwljaGFuLT5leHBlY3RlZF9hY2tfc2VxID0gdHhfc2VxOworCWwyY2FwX2Ryb3BfYWNrZWRfZnJhbWVzKGNoYW4pOwogCiAJaWYgKHJ4X2NvbnRyb2wgJiBMMkNBUF9DVFJMX1BPTEwpCi0JCXBpLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU0VORF9GQklUOworCQljaGFuLT5jb25uX3N0YXRlIHw9IEwyQ0FQX0NPTk5fU0VORF9GQklUOwogCi0JaWYgKCEocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NSRUpfU0VOVCkpIHsKLQkJZGVsX3RpbWVyKCZwaS0+cmV0cmFuc190aW1lcik7CisJaWYgKCEoY2hhbi0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fU1JFSl9TRU5UKSkgeworCQlkZWxfdGltZXIoJmNoYW4tPnJldHJhbnNfdGltZXIpOwogCQlpZiAocnhfY29udHJvbCAmIEwyQ0FQX0NUUkxfUE9MTCkKLQkJCWwyY2FwX3NlbmRfcnJfb3Jfcm5yKHBpLCBMMkNBUF9DVFJMX0ZJTkFMKTsKKwkJCWwyY2FwX3NlbmRfcnJfb3Jfcm5yKGNoYW4sIEwyQ0FQX0NUUkxfRklOQUwpOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKHJ4X2NvbnRyb2wgJiBMMkNBUF9DVFJMX1BPTEwpCi0JCWwyY2FwX3NlbmRfc3JlanRhaWwoc2spOworCQlsMmNhcF9zZW5kX3NyZWp0YWlsKGNoYW4pOwogCWVsc2UKLQkJbDJjYXBfc2VuZF9zZnJhbWUocGksIEwyQ0FQX1NVUEVSX1JDVl9SRUFEWSk7CisJCWwyY2FwX3NlbmRfc2ZyYW1lKGNoYW4sIEwyQ0FQX1NVUEVSX1JDVl9SRUFEWSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGwyY2FwX2RhdGFfY2hhbm5lbF9zZnJhbWUoc3RydWN0IHNvY2sgKnNrLCB1MTYgcnhfY29udHJvbCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbmxpbmUgaW50IGwyY2FwX2RhdGFfY2hhbm5lbF9zZnJhbWUoc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4sIHUxNiByeF9jb250cm9sLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCUJUX0RCRygic2sgJXAgcnhfY29udHJvbCAweCU0LjR4IGxlbiAlZCIsIHNrLCByeF9jb250cm9sLCBza2ItPmxlbik7CisJQlRfREJHKCJjaGFuICVwIHJ4X2NvbnRyb2wgMHglNC40eCBsZW4gJWQiLCBjaGFuLCByeF9jb250cm9sLCBza2ItPmxlbik7CiAKIAlpZiAoTDJDQVBfQ1RSTF9GSU5BTCAmIHJ4X2NvbnRyb2wgJiYKLQkJCWwyY2FwX3BpKHNrKS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fV0FJVF9GKSB7Ci0JCWRlbF90aW1lcigmbDJjYXBfcGkoc2spLT5tb25pdG9yX3RpbWVyKTsKLQkJaWYgKGwyY2FwX3BpKHNrKS0+dW5hY2tlZF9mcmFtZXMgPiAwKQorCQkJY2hhbi0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fV0FJVF9GKSB7CisJCWRlbF90aW1lcigmY2hhbi0+bW9uaXRvcl90aW1lcik7CisJCWlmIChjaGFuLT51bmFja2VkX2ZyYW1lcyA+IDApCiAJCQlfX21vZF9yZXRyYW5zX3RpbWVyKCk7Ci0JCWwyY2FwX3BpKHNrKS0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9XQUlUX0Y7CisJCWNoYW4tPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fV0FJVF9GOwogCX0KIAogCXN3aXRjaCAocnhfY29udHJvbCAmIEwyQ0FQX0NUUkxfU1VQRVJWSVNFKSB7CiAJY2FzZSBMMkNBUF9TVVBFUl9SQ1ZfUkVBRFk6Ci0JCWwyY2FwX2RhdGFfY2hhbm5lbF9ycmZyYW1lKHNrLCByeF9jb250cm9sKTsKKwkJbDJjYXBfZGF0YV9jaGFubmVsX3JyZnJhbWUoY2hhbiwgcnhfY29udHJvbCk7CiAJCWJyZWFrOwogCiAJY2FzZSBMMkNBUF9TVVBFUl9SRUpFQ1Q6Ci0JCWwyY2FwX2RhdGFfY2hhbm5lbF9yZWpmcmFtZShzaywgcnhfY29udHJvbCk7CisJCWwyY2FwX2RhdGFfY2hhbm5lbF9yZWpmcmFtZShjaGFuLCByeF9jb250cm9sKTsKIAkJYnJlYWs7CiAKIAljYXNlIEwyQ0FQX1NVUEVSX1NFTEVDVF9SRUpFQ1Q6Ci0JCWwyY2FwX2RhdGFfY2hhbm5lbF9zcmVqZnJhbWUoc2ssIHJ4X2NvbnRyb2wpOworCQlsMmNhcF9kYXRhX2NoYW5uZWxfc3JlamZyYW1lKGNoYW4sIHJ4X2NvbnRyb2wpOwogCQlicmVhazsKIAogCWNhc2UgTDJDQVBfU1VQRVJfUkNWX05PVF9SRUFEWToKLQkJbDJjYXBfZGF0YV9jaGFubmVsX3JucmZyYW1lKHNrLCByeF9jb250cm9sKTsKKwkJbDJjYXBfZGF0YV9jaGFubmVsX3JucmZyYW1lKGNoYW4sIHJ4X2NvbnRyb2wpOwogCQlicmVhazsKIAl9CiAKQEAgLTM0NjEsNyArMzU5NSw3IEBACiAKIHN0YXRpYyBpbnQgbDJjYXBfZXJ0bV9kYXRhX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKHNrKTsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiA9IGwyY2FwX3BpKHNrKS0+Y2hhbjsKIAl1MTYgY29udHJvbDsKIAl1OCByZXFfc2VxOwogCWludCBsZW4sIG5leHRfdHhfc2VxX29mZnNldCwgcmVxX3NlcV9vZmZzZXQ7CkBAIC0zNDc1LDUxICszNjA5LDUxIEBACiAJICogUmVjZWl2ZXIgd2lsbCBtaXNzIGl0IGFuZCBzdGFydCBwcm9wZXIgcmVjb3ZlcnkKIAkgKiBwcm9jZWR1cmVzIGFuZCBhc2sgcmV0cmFuc21pc3Npb24uCiAJICovCi0JaWYgKGwyY2FwX2NoZWNrX2ZjcyhwaSwgc2tiKSkKKwlpZiAobDJjYXBfY2hlY2tfZmNzKGNoYW4sIHNrYikpCiAJCWdvdG8gZHJvcDsKIAogCWlmIChfX2lzX3Nhcl9zdGFydChjb250cm9sKSAmJiBfX2lzX2lmcmFtZShjb250cm9sKSkKIAkJbGVuIC09IDI7CiAKLQlpZiAocGktPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpCisJaWYgKGNoYW4tPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpCiAJCWxlbiAtPSAyOwogCi0JaWYgKGxlbiA+IHBpLT5tcHMpIHsKLQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShwaS0+Y29ubiwgc2ssIEVDT05OUkVTRVQpOworCWlmIChsZW4gPiBjaGFuLT5tcHMpIHsKKwkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShjaGFuLT5jb25uLCBjaGFuLCBFQ09OTlJFU0VUKTsKIAkJZ290byBkcm9wOwogCX0KIAogCXJlcV9zZXEgPSBfX2dldF9yZXFzZXEoY29udHJvbCk7Ci0JcmVxX3NlcV9vZmZzZXQgPSAocmVxX3NlcSAtIHBpLT5leHBlY3RlZF9hY2tfc2VxKSAlIDY0OworCXJlcV9zZXFfb2Zmc2V0ID0gKHJlcV9zZXEgLSBjaGFuLT5leHBlY3RlZF9hY2tfc2VxKSAlIDY0OwogCWlmIChyZXFfc2VxX29mZnNldCA8IDApCiAJCXJlcV9zZXFfb2Zmc2V0ICs9IDY0OwogCiAJbmV4dF90eF9zZXFfb2Zmc2V0ID0KLQkJKHBpLT5uZXh0X3R4X3NlcSAtIHBpLT5leHBlY3RlZF9hY2tfc2VxKSAlIDY0OworCQkoY2hhbi0+bmV4dF90eF9zZXEgLSBjaGFuLT5leHBlY3RlZF9hY2tfc2VxKSAlIDY0OwogCWlmIChuZXh0X3R4X3NlcV9vZmZzZXQgPCAwKQogCQluZXh0X3R4X3NlcV9vZmZzZXQgKz0gNjQ7CiAKIAkvKiBjaGVjayBmb3IgaW52YWxpZCByZXEtc2VxICovCiAJaWYgKHJlcV9zZXFfb2Zmc2V0ID4gbmV4dF90eF9zZXFfb2Zmc2V0KSB7Ci0JCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEocGktPmNvbm4sIHNrLCBFQ09OTlJFU0VUKTsKKwkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShjaGFuLT5jb25uLCBjaGFuLCBFQ09OTlJFU0VUKTsKIAkJZ290byBkcm9wOwogCX0KIAogCWlmIChfX2lzX2lmcmFtZShjb250cm9sKSkgewogCQlpZiAobGVuIDwgMCkgewotCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShwaS0+Y29ubiwgc2ssIEVDT05OUkVTRVQpOworCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShjaGFuLT5jb25uLCBjaGFuLCBFQ09OTlJFU0VUKTsKIAkJCWdvdG8gZHJvcDsKIAkJfQogCi0JCWwyY2FwX2RhdGFfY2hhbm5lbF9pZnJhbWUoc2ssIGNvbnRyb2wsIHNrYik7CisJCWwyY2FwX2RhdGFfY2hhbm5lbF9pZnJhbWUoY2hhbiwgY29udHJvbCwgc2tiKTsKIAl9IGVsc2UgewogCQlpZiAobGVuICE9IDApIHsKIAkJCUJUX0VSUigiJWQiLCBsZW4pOwotCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShwaS0+Y29ubiwgc2ssIEVDT05OUkVTRVQpOworCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShjaGFuLT5jb25uLCBjaGFuLCBFQ09OTlJFU0VUKTsKIAkJCWdvdG8gZHJvcDsKIAkJfQogCi0JCWwyY2FwX2RhdGFfY2hhbm5lbF9zZnJhbWUoc2ssIGNvbnRyb2wsIHNrYik7CisJCWwyY2FwX2RhdGFfY2hhbm5lbF9zZnJhbWUoY2hhbiwgY29udHJvbCwgc2tiKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTM1MzEsMzMgKzM2NjUsMzUgQEAKIAogc3RhdGljIGlubGluZSBpbnQgbDJjYXBfZGF0YV9jaGFubmVsKHN0cnVjdCBsMmNhcF9jb25uICpjb25uLCB1MTYgY2lkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBzb2NrICpzazsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbjsKKwlzdHJ1Y3Qgc29jayAqc2sgPSBOVUxMOwogCXN0cnVjdCBsMmNhcF9waW5mbyAqcGk7CiAJdTE2IGNvbnRyb2w7CiAJdTggdHhfc2VxOwogCWludCBsZW47CiAKLQlzayA9IGwyY2FwX2dldF9jaGFuX2J5X3NjaWQoJmNvbm4tPmNoYW5fbGlzdCwgY2lkKTsKLQlpZiAoIXNrKSB7CisJY2hhbiA9IGwyY2FwX2dldF9jaGFuX2J5X3NjaWQoY29ubiwgY2lkKTsKKwlpZiAoIWNoYW4pIHsKIAkJQlRfREJHKCJ1bmtub3duIGNpZCAweCU0LjR4IiwgY2lkKTsKIAkJZ290byBkcm9wOwogCX0KIAorCXNrID0gY2hhbi0+c2s7CiAJcGkgPSBsMmNhcF9waShzayk7CiAKLQlCVF9EQkcoInNrICVwLCBsZW4gJWQiLCBzaywgc2tiLT5sZW4pOworCUJUX0RCRygiY2hhbiAlcCwgbGVuICVkIiwgY2hhbiwgc2tiLT5sZW4pOwogCiAJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9DT05ORUNURUQpCiAJCWdvdG8gZHJvcDsKIAotCXN3aXRjaCAocGktPm1vZGUpIHsKKwlzd2l0Y2ggKGNoYW4tPm1vZGUpIHsKIAljYXNlIEwyQ0FQX01PREVfQkFTSUM6CiAJCS8qIElmIHNvY2tldCByZWN2IGJ1ZmZlcnMgb3ZlcmZsb3dzIHdlIGRyb3AgZGF0YSBoZXJlCiAJCSAqIHdoaWNoIGlzICpiYWQqIGJlY2F1c2UgTDJDQVAgaGFzIHRvIGJlIHJlbGlhYmxlLgogCQkgKiBCdXQgd2UgZG9uJ3QgaGF2ZSBhbnkgb3RoZXIgY2hvaWNlLiBMMkNBUCBkb2Vzbid0CiAJCSAqIHByb3ZpZGUgZmxvdyBjb250cm9sIG1lY2hhbmlzbS4gKi8KIAotCQlpZiAocGktPmltdHUgPCBza2ItPmxlbikKKwkJaWYgKGNoYW4tPmltdHUgPCBza2ItPmxlbikKIAkJCWdvdG8gZHJvcDsKIAogCQlpZiAoIXNvY2tfcXVldWVfcmN2X3NrYihzaywgc2tiKSkKQEAgLTM1NzksMzEgKzM3MTUsMzEgQEAKIAkJc2tiX3B1bGwoc2tiLCAyKTsKIAkJbGVuID0gc2tiLT5sZW47CiAKLQkJaWYgKGwyY2FwX2NoZWNrX2ZjcyhwaSwgc2tiKSkKKwkJaWYgKGwyY2FwX2NoZWNrX2ZjcyhjaGFuLCBza2IpKQogCQkJZ290byBkcm9wOwogCiAJCWlmIChfX2lzX3Nhcl9zdGFydChjb250cm9sKSkKIAkJCWxlbiAtPSAyOwogCi0JCWlmIChwaS0+ZmNzID09IEwyQ0FQX0ZDU19DUkMxNikKKwkJaWYgKGNoYW4tPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpCiAJCQlsZW4gLT0gMjsKIAotCQlpZiAobGVuID4gcGktPm1wcyB8fCBsZW4gPCAwIHx8IF9faXNfc2ZyYW1lKGNvbnRyb2wpKQorCQlpZiAobGVuID4gY2hhbi0+bXBzIHx8IGxlbiA8IDAgfHwgX19pc19zZnJhbWUoY29udHJvbCkpCiAJCQlnb3RvIGRyb3A7CiAKIAkJdHhfc2VxID0gX19nZXRfdHhzZXEoY29udHJvbCk7CiAKLQkJaWYgKHBpLT5leHBlY3RlZF90eF9zZXEgPT0gdHhfc2VxKQotCQkJcGktPmV4cGVjdGVkX3R4X3NlcSA9IChwaS0+ZXhwZWN0ZWRfdHhfc2VxICsgMSkgJSA2NDsKKwkJaWYgKGNoYW4tPmV4cGVjdGVkX3R4X3NlcSA9PSB0eF9zZXEpCisJCQljaGFuLT5leHBlY3RlZF90eF9zZXEgPSAoY2hhbi0+ZXhwZWN0ZWRfdHhfc2VxICsgMSkgJSA2NDsKIAkJZWxzZQotCQkJcGktPmV4cGVjdGVkX3R4X3NlcSA9ICh0eF9zZXEgKyAxKSAlIDY0OworCQkJY2hhbi0+ZXhwZWN0ZWRfdHhfc2VxID0gKHR4X3NlcSArIDEpICUgNjQ7CiAKLQkJbDJjYXBfc3RyZWFtaW5nX3JlYXNzZW1ibHlfc2R1KHNrLCBza2IsIGNvbnRyb2wpOworCQlsMmNhcF9zdHJlYW1pbmdfcmVhc3NlbWJseV9zZHUoY2hhbiwgc2tiLCBjb250cm9sKTsKIAogCQlnb3RvIGRvbmU7CiAKIAlkZWZhdWx0OgotCQlCVF9EQkcoInNrICVwOiBiYWQgbW9kZSAweCUyLjJ4Iiwgc2ssIHBpLT5tb2RlKTsKKwkJQlRfREJHKCJjaGFuICVwOiBiYWQgbW9kZSAweCUyLjJ4IiwgY2hhbiwgY2hhbi0+bW9kZSk7CiAJCWJyZWFrOwogCX0KIApAQCAtMzYxOSwxMiArMzc1NSwxNSBAQAogCiBzdGF0aWMgaW5saW5lIGludCBsMmNhcF9jb25sZXNzX2NoYW5uZWwoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4sIF9fbGUxNiBwc20sIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrOworCXN0cnVjdCBzb2NrICpzayA9IE5VTEw7CisJc3RydWN0IGwyY2FwX2NoYW4gKmNoYW47CiAKLQlzayA9IGwyY2FwX2dldF9zb2NrX2J5X3BzbSgwLCBwc20sIGNvbm4tPnNyYyk7Ci0JaWYgKCFzaykKKwljaGFuID0gbDJjYXBfZ2xvYmFsX2NoYW5fYnlfcHNtKDAsIHBzbSwgY29ubi0+c3JjKTsKKwlpZiAoIWNoYW4pCiAJCWdvdG8gZHJvcDsKIAorCXNrID0gY2hhbi0+c2s7CisKIAliaF9sb2NrX3NvY2soc2spOwogCiAJQlRfREJHKCJzayAlcCwgbGVuICVkIiwgc2ssIHNrYi0+bGVuKTsKQEAgLTM2MzIsNyArMzc3MSw0MCBAQAogCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQk9VTkQgJiYgc2stPnNrX3N0YXRlICE9IEJUX0NPTk5FQ1RFRCkKIAkJZ290byBkcm9wOwogCi0JaWYgKGwyY2FwX3BpKHNrKS0+aW10dSA8IHNrYi0+bGVuKQorCWlmIChsMmNhcF9waShzayktPmNoYW4tPmltdHUgPCBza2ItPmxlbikKKwkJZ290byBkcm9wOworCisJaWYgKCFzb2NrX3F1ZXVlX3Jjdl9za2Ioc2ssIHNrYikpCisJCWdvdG8gZG9uZTsKKworZHJvcDoKKwlrZnJlZV9za2Ioc2tiKTsKKworZG9uZToKKwlpZiAoc2spCisJCWJoX3VubG9ja19zb2NrKHNrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbDJjYXBfYXR0X2NoYW5uZWwoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4sIF9fbGUxNiBjaWQsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHNvY2sgKnNrID0gTlVMTDsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbjsKKworCWNoYW4gPSBsMmNhcF9nbG9iYWxfY2hhbl9ieV9zY2lkKDAsIGNpZCwgY29ubi0+c3JjKTsKKwlpZiAoIWNoYW4pCisJCWdvdG8gZHJvcDsKKworCXNrID0gY2hhbi0+c2s7CisKKwliaF9sb2NrX3NvY2soc2spOworCisJQlRfREJHKCJzayAlcCwgbGVuICVkIiwgc2ssIHNrYi0+bGVuKTsKKworCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQk9VTkQgJiYgc2stPnNrX3N0YXRlICE9IEJUX0NPTk5FQ1RFRCkKKwkJZ290byBkcm9wOworCisJaWYgKGwyY2FwX3BpKHNrKS0+Y2hhbi0+aW10dSA8IHNrYi0+bGVuKQogCQlnb3RvIGRyb3A7CiAKIAlpZiAoIXNvY2tfcXVldWVfcmN2X3NrYihzaywgc2tiKSkKQEAgLTM2NzYsNiArMzg0OCwxMCBAQAogCQlsMmNhcF9jb25sZXNzX2NoYW5uZWwoY29ubiwgcHNtLCBza2IpOwogCQlicmVhazsKIAorCWNhc2UgTDJDQVBfQ0lEX0xFX0RBVEE6CisJCWwyY2FwX2F0dF9jaGFubmVsKGNvbm4sIGNpZCwgc2tiKTsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlsMmNhcF9kYXRhX2NoYW5uZWwoY29ubiwgY2lkLCBza2IpOwogCQlicmVhazsKQEAgLTM2ODcsOCArMzg2Myw3IEBACiBzdGF0aWMgaW50IGwyY2FwX2Nvbm5lY3RfaW5kKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBiZGFkZHJfdCAqYmRhZGRyLCB1OCB0eXBlKQogewogCWludCBleGFjdCA9IDAsIGxtMSA9IDAsIGxtMiA9IDA7Ci0JcmVnaXN0ZXIgc3RydWN0IHNvY2sgKnNrOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0cnVjdCBsMmNhcF9jaGFuICpjOwogCiAJaWYgKHR5cGUgIT0gQUNMX0xJTkspCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzY5NiwyMyArMzg3MSwyNSBAQAogCUJUX0RCRygiaGRldiAlcywgYmRhZGRyICVzIiwgaGRldi0+bmFtZSwgYmF0b3N0cihiZGFkZHIpKTsKIAogCS8qIEZpbmQgbGlzdGVuaW5nIHNvY2tldHMgYW5kIGNoZWNrIHRoZWlyIGxpbmtfbW9kZSAqLwotCXJlYWRfbG9jaygmbDJjYXBfc2tfbGlzdC5sb2NrKTsKLQlza19mb3JfZWFjaChzaywgbm9kZSwgJmwyY2FwX3NrX2xpc3QuaGVhZCkgeworCXJlYWRfbG9jaygmY2hhbl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJmNoYW5fbGlzdCwgZ2xvYmFsX2wpIHsKKwkJc3RydWN0IHNvY2sgKnNrID0gYy0+c2s7CisKIAkJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9MSVNURU4pCiAJCQljb250aW51ZTsKIAogCQlpZiAoIWJhY21wKCZidF9zayhzayktPnNyYywgJmhkZXYtPmJkYWRkcikpIHsKIAkJCWxtMSB8PSBIQ0lfTE1fQUNDRVBUOwotCQkJaWYgKGwyY2FwX3BpKHNrKS0+cm9sZV9zd2l0Y2gpCisJCQlpZiAoYy0+cm9sZV9zd2l0Y2gpCiAJCQkJbG0xIHw9IEhDSV9MTV9NQVNURVI7CiAJCQlleGFjdCsrOwogCQl9IGVsc2UgaWYgKCFiYWNtcCgmYnRfc2soc2spLT5zcmMsIEJEQUREUl9BTlkpKSB7CiAJCQlsbTIgfD0gSENJX0xNX0FDQ0VQVDsKLQkJCWlmIChsMmNhcF9waShzayktPnJvbGVfc3dpdGNoKQorCQkJaWYgKGMtPnJvbGVfc3dpdGNoKQogCQkJCWxtMiB8PSBIQ0lfTE1fTUFTVEVSOwogCQl9CiAJfQotCXJlYWRfdW5sb2NrKCZsMmNhcF9za19saXN0LmxvY2spOworCXJlYWRfdW5sb2NrKCZjaGFuX2xpc3RfbG9jayk7CiAKIAlyZXR1cm4gZXhhY3QgPyBsbTEgOiBsbTI7CiB9CkBAIC0zNzYwLDQ5ICszOTM3LDUwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBsMmNhcF9jaGVja19lbmNyeXB0aW9uKHN0cnVjdCBzb2NrICpzaywgdTggZW5jcnlwdCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBsMmNhcF9jaGVja19lbmNyeXB0aW9uKHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCB1OCBlbmNyeXB0KQogeworCXN0cnVjdCBzb2NrICpzayA9IGNoYW4tPnNrOworCiAJaWYgKHNrLT5za190eXBlICE9IFNPQ0tfU0VRUEFDS0VUICYmIHNrLT5za190eXBlICE9IFNPQ0tfU1RSRUFNKQogCQlyZXR1cm47CiAKIAlpZiAoZW5jcnlwdCA9PSAweDAwKSB7Ci0JCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9NRURJVU0pIHsKKwkJaWYgKGNoYW4tPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9NRURJVU0pIHsKIAkJCWwyY2FwX3NvY2tfY2xlYXJfdGltZXIoc2spOwogCQkJbDJjYXBfc29ja19zZXRfdGltZXIoc2ssIEhaICogNSk7Ci0JCX0gZWxzZSBpZiAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfSElHSCkKKwkJfSBlbHNlIGlmIChjaGFuLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfSElHSCkKIAkJCV9fbDJjYXBfc29ja19jbG9zZShzaywgRUNPTk5SRUZVU0VEKTsKIAl9IGVsc2UgewotCQlpZiAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfTUVESVVNKQorCQlpZiAoY2hhbi0+c2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX01FRElVTSkKIAkJCWwyY2FwX3NvY2tfY2xlYXJfdGltZXIoc2spOwogCX0KIH0KIAogc3RhdGljIGludCBsMmNhcF9zZWN1cml0eV9jZm0oc3RydWN0IGhjaV9jb25uICpoY29uLCB1OCBzdGF0dXMsIHU4IGVuY3J5cHQpCiB7Ci0Jc3RydWN0IGwyY2FwX2NoYW5fbGlzdCAqbDsKIAlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGhjb24tPmwyY2FwX2RhdGE7Ci0Jc3RydWN0IHNvY2sgKnNrOworCXN0cnVjdCBsMmNhcF9jaGFuICpjaGFuOwogCiAJaWYgKCFjb25uKQogCQlyZXR1cm4gMDsKIAotCWwgPSAmY29ubi0+Y2hhbl9saXN0OwotCiAJQlRfREJHKCJjb25uICVwIiwgY29ubik7CiAKLQlyZWFkX2xvY2soJmwtPmxvY2spOworCXJlYWRfbG9jaygmY29ubi0+Y2hhbl9sb2NrKTsKIAotCWZvciAoc2sgPSBsLT5oZWFkOyBzazsgc2sgPSBsMmNhcF9waShzayktPm5leHRfYykgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhbiwgJmNvbm4tPmNoYW5fbCwgbGlzdCkgeworCQlzdHJ1Y3Qgc29jayAqc2sgPSBjaGFuLT5zazsKKwogCQliaF9sb2NrX3NvY2soc2spOwogCi0JCWlmIChsMmNhcF9waShzayktPmNvbmZfc3RhdGUgJiBMMkNBUF9DT05GX0NPTk5FQ1RfUEVORCkgeworCQlpZiAoY2hhbi0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfQ09OTkVDVF9QRU5EKSB7CiAJCQliaF91bmxvY2tfc29jayhzayk7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCWlmICghc3RhdHVzICYmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVEVEIHx8CiAJCQkJCQlzay0+c2tfc3RhdGUgPT0gQlRfQ09ORklHKSkgewotCQkJbDJjYXBfY2hlY2tfZW5jcnlwdGlvbihzaywgZW5jcnlwdCk7CisJCQlsMmNhcF9jaGVja19lbmNyeXB0aW9uKGNoYW4sIGVuY3J5cHQpOwogCQkJYmhfdW5sb2NrX3NvY2soc2spOwogCQkJY29udGludWU7CiAJCX0KQEAgLTM4MTAsMTMgKzM5ODgsMTMgQEAKIAkJaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNUKSB7CiAJCQlpZiAoIXN0YXR1cykgewogCQkJCXN0cnVjdCBsMmNhcF9jb25uX3JlcSByZXE7Ci0JCQkJcmVxLnNjaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOwotCQkJCXJlcS5wc20gID0gbDJjYXBfcGkoc2spLT5wc207CisJCQkJcmVxLnNjaWQgPSBjcHVfdG9fbGUxNihjaGFuLT5zY2lkKTsKKwkJCQlyZXEucHNtICA9IGNoYW4tPnBzbTsKIAotCQkJCWwyY2FwX3BpKHNrKS0+aWRlbnQgPSBsMmNhcF9nZXRfaWRlbnQoY29ubik7Ci0JCQkJbDJjYXBfcGkoc2spLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfQ09OTkVDVF9QRU5EOworCQkJCWNoYW4tPmlkZW50ID0gbDJjYXBfZ2V0X2lkZW50KGNvbm4pOworCQkJCWNoYW4tPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9DT05ORUNUX1BFTkQ7CiAKLQkJCQlsMmNhcF9zZW5kX2NtZChjb25uLCBsMmNhcF9waShzayktPmlkZW50LAorCQkJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGNoYW4tPmlkZW50LAogCQkJCQlMMkNBUF9DT05OX1JFUSwgc2l6ZW9mKHJlcSksICZyZXEpOwogCQkJfSBlbHNlIHsKIAkJCQlsMmNhcF9zb2NrX2NsZWFyX3RpbWVyKHNrKTsKQEAgLTM4MzUsMTggKzQwMTMsMTggQEAKIAkJCQlyZXN1bHQgPSBMMkNBUF9DUl9TRUNfQkxPQ0s7CiAJCQl9CiAKLQkJCXJzcC5zY2lkICAgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPmRjaWQpOwotCQkJcnNwLmRjaWQgICA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+c2NpZCk7CisJCQlyc3Auc2NpZCAgID0gY3B1X3RvX2xlMTYoY2hhbi0+ZGNpZCk7CisJCQlyc3AuZGNpZCAgID0gY3B1X3RvX2xlMTYoY2hhbi0+c2NpZCk7CiAJCQlyc3AucmVzdWx0ID0gY3B1X3RvX2xlMTYocmVzdWx0KTsKIAkJCXJzcC5zdGF0dXMgPSBjcHVfdG9fbGUxNihMMkNBUF9DU19OT19JTkZPKTsKLQkJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGwyY2FwX3BpKHNrKS0+aWRlbnQsCi0JCQkJCUwyQ0FQX0NPTk5fUlNQLCBzaXplb2YocnNwKSwgJnJzcCk7CisJCQlsMmNhcF9zZW5kX2NtZChjb25uLCBjaGFuLT5pZGVudCwgTDJDQVBfQ09OTl9SU1AsCisJCQkJCQkJc2l6ZW9mKHJzcCksICZyc3ApOwogCQl9CiAKIAkJYmhfdW5sb2NrX3NvY2soc2spOwogCX0KIAotCXJlYWRfdW5sb2NrKCZsLT5sb2NrKTsKKwlyZWFkX3VubG9jaygmY29ubi0+Y2hhbl9sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzg2NSw3ICs0MDQzLDcgQEAKIAogCWlmICghKGZsYWdzICYgQUNMX0NPTlQpKSB7CiAJCXN0cnVjdCBsMmNhcF9oZHIgKmhkcjsKLQkJc3RydWN0IHNvY2sgKnNrOworCQlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbjsKIAkJdTE2IGNpZDsKIAkJaW50IGxlbjsKIApAQCAtMzkwMywxOSArNDA4MSwyMiBAQAogCQkJZ290byBkcm9wOwogCQl9CiAKLQkJc2sgPSBsMmNhcF9nZXRfY2hhbl9ieV9zY2lkKCZjb25uLT5jaGFuX2xpc3QsIGNpZCk7CisJCWNoYW4gPSBsMmNhcF9nZXRfY2hhbl9ieV9zY2lkKGNvbm4sIGNpZCk7CiAKLQkJaWYgKHNrICYmIGwyY2FwX3BpKHNrKS0+aW10dSA8IGxlbiAtIEwyQ0FQX0hEUl9TSVpFKSB7Ci0JCQlCVF9FUlIoIkZyYW1lIGV4Y2VlZGluZyByZWN2IE1UVSAobGVuICVkLCBNVFUgJWQpIiwKLQkJCQkJbGVuLCBsMmNhcF9waShzayktPmltdHUpOworCQlpZiAoY2hhbiAmJiBjaGFuLT5zaykgeworCQkJc3RydWN0IHNvY2sgKnNrID0gY2hhbi0+c2s7CisKKwkJCWlmIChjaGFuLT5pbXR1IDwgbGVuIC0gTDJDQVBfSERSX1NJWkUpIHsKKwkJCQlCVF9FUlIoIkZyYW1lIGV4Y2VlZGluZyByZWN2IE1UVSAobGVuICVkLCAiCisJCQkJCQkJIk1UVSAlZCkiLCBsZW4sCisJCQkJCQkJY2hhbi0+aW10dSk7CisJCQkJYmhfdW5sb2NrX3NvY2soc2spOworCQkJCWwyY2FwX2Nvbm5fdW5yZWxpYWJsZShjb25uLCBFQ09NTSk7CisJCQkJZ290byBkcm9wOworCQkJfQogCQkJYmhfdW5sb2NrX3NvY2soc2spOwotCQkJbDJjYXBfY29ubl91bnJlbGlhYmxlKGNvbm4sIEVDT01NKTsKLQkJCWdvdG8gZHJvcDsKIAkJfQogCi0JCWlmIChzaykKLQkJCWJoX3VubG9ja19zb2NrKHNrKTsKLQogCQkvKiBBbGxvY2F0ZSBza2IgZm9yIHRoZSBjb21wbGV0ZSBmcmFtZSAod2l0aCBoZWFkZXIpICovCiAJCWNvbm4tPnJ4X3NrYiA9IGJ0X3NrYl9hbGxvYyhsZW4sIEdGUF9BVE9NSUMpOwogCQlpZiAoIWNvbm4tPnJ4X3NrYikKQEAgLTM5NjEsMjQgKzQxNDIsMjIgQEAKIAogc3RhdGljIGludCBsMmNhcF9kZWJ1Z2ZzX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICpwKQogewotCXN0cnVjdCBzb2NrICpzazsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqYzsKIAotCXJlYWRfbG9ja19iaCgmbDJjYXBfc2tfbGlzdC5sb2NrKTsKKwlyZWFkX2xvY2tfYmgoJmNoYW5fbGlzdF9sb2NrKTsKIAotCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmbDJjYXBfc2tfbGlzdC5oZWFkKSB7Ci0JCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmY2hhbl9saXN0LCBnbG9iYWxfbCkgeworCQlzdHJ1Y3Qgc29jayAqc2sgPSBjLT5zazsKIAogCQlzZXFfcHJpbnRmKGYsICIlcyAlcyAlZCAlZCAweCU0LjR4IDB4JTQuNHggJWQgJWQgJWQgJWRcbiIsCiAJCQkJCWJhdG9zdHIoJmJ0X3NrKHNrKS0+c3JjKSwKIAkJCQkJYmF0b3N0cigmYnRfc2soc2spLT5kc3QpLAotCQkJCQlzay0+c2tfc3RhdGUsIF9fbGUxNl90b19jcHUocGktPnBzbSksCi0JCQkJCXBpLT5zY2lkLCBwaS0+ZGNpZCwKLQkJCQkJcGktPmltdHUsIHBpLT5vbXR1LCBwaS0+c2VjX2xldmVsLAotCQkJCQlwaS0+bW9kZSk7CisJCQkJCXNrLT5za19zdGF0ZSwgX19sZTE2X3RvX2NwdShjLT5wc20pLAorCQkJCQljLT5zY2lkLCBjLT5kY2lkLCBjLT5pbXR1LCBjLT5vbXR1LAorCQkJCQljLT5zZWNfbGV2ZWwsIGMtPm1vZGUpOwogCX0KIAotCXJlYWRfdW5sb2NrX2JoKCZsMmNhcF9za19saXN0LmxvY2spOworCXJlYWRfdW5sb2NrX2JoKCZjaGFuX2xpc3RfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvbDJjYXBfc29jay5jIGIvbmV0L2JsdWV0b290aC9sMmNhcF9zb2NrLmMKaW5kZXggMjk5ZmU1Ni4uMThkYzk4OCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9sMmNhcF9zb2NrLmMKKysrIGIvbmV0L2JsdWV0b290aC9sMmNhcF9zb2NrLmMKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmg+CiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9sMmNhcC5oPgogCitzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBsMmNhcF9zb2NrX29wczsKKwogLyogLS0tLSBMMkNBUCB0aW1lcnMgLS0tLSAqLwogc3RhdGljIHZvaWQgbDJjYXBfc29ja190aW1lb3V0KHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtNTEsNyArNTMsNyBAQAogCWlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVEVEIHx8IHNrLT5za19zdGF0ZSA9PSBCVF9DT05GSUcpCiAJCXJlYXNvbiA9IEVDT05OUkVGVVNFRDsKIAllbHNlIGlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVCAmJgotCQkJCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsICE9IEJUX1NFQ1VSSVRZX1NEUCkKKwkJCWwyY2FwX3BpKHNrKS0+Y2hhbi0+c2VjX2xldmVsICE9IEJUX1NFQ1VSSVRZX1NEUCkKIAkJcmVhc29uID0gRUNPTk5SRUZVU0VEOwogCWVsc2UKIAkJcmVhc29uID0gRVRJTUVET1VUOwpAQCAtNzYsMjEgKzc4LDEwIEBACiAJc2tfc3RvcF90aW1lcihzaywgJnNrLT5za190aW1lcik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc29jayAqX19sMmNhcF9nZXRfc29ja19ieV9hZGRyKF9fbGUxNiBwc20sIGJkYWRkcl90ICpzcmMpCi17Ci0Jc3RydWN0IHNvY2sgKnNrOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmbDJjYXBfc2tfbGlzdC5oZWFkKQotCQlpZiAobDJjYXBfcGkoc2spLT5zcG9ydCA9PSBwc20gJiYgIWJhY21wKCZidF9zayhzayktPnNyYywgc3JjKSkKLQkJCWdvdG8gZm91bmQ7Ci0Jc2sgPSBOVUxMOwotZm91bmQ6Ci0JcmV0dXJuIHNrOwotfQotCiBzdGF0aWMgaW50IGwyY2FwX3NvY2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIGludCBhbGVuKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBsMmNhcF9jaGFuICpjaGFuID0gbDJjYXBfcGkoc2spLT5jaGFuOwogCXN0cnVjdCBzb2NrYWRkcl9sMiBsYTsKIAlpbnQgbGVuLCBlcnIgPSAwOwogCkBAIC0xMjksMjYgKzEyMCwyMCBAQAogCQl9CiAJfQogCi0Jd3JpdGVfbG9ja19iaCgmbDJjYXBfc2tfbGlzdC5sb2NrKTsKLQotCWlmIChsYS5sMl9wc20gJiYgX19sMmNhcF9nZXRfc29ja19ieV9hZGRyKGxhLmwyX3BzbSwgJmxhLmwyX2JkYWRkcikpIHsKLQkJZXJyID0gLUVBRERSSU5VU0U7Ci0JfSBlbHNlIHsKLQkJLyogU2F2ZSBzb3VyY2UgYWRkcmVzcyAqLwotCQliYWNweSgmYnRfc2soc2spLT5zcmMsICZsYS5sMl9iZGFkZHIpOwotCQlsMmNhcF9waShzayktPnBzbSAgID0gbGEubDJfcHNtOwotCQlsMmNhcF9waShzayktPnNwb3J0ID0gbGEubDJfcHNtOwotCQlzay0+c2tfc3RhdGUgPSBCVF9CT1VORDsKLQotCQlpZiAoX19sZTE2X3RvX2NwdShsYS5sMl9wc20pID09IDB4MDAwMSB8fAotCQkJCQlfX2xlMTZfdG9fY3B1KGxhLmwyX3BzbSkgPT0gMHgwMDAzKQotCQkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9TRFA7Ci0JfQotCiAJaWYgKGxhLmwyX2NpZCkKLQkJbDJjYXBfcGkoc2spLT5zY2lkID0gbGEubDJfY2lkOworCQllcnIgPSBsMmNhcF9hZGRfc2NpZChjaGFuLCBsYS5sMl9jaWQpOworCWVsc2UKKwkJZXJyID0gbDJjYXBfYWRkX3BzbShjaGFuLCAmbGEubDJfYmRhZGRyLCBsYS5sMl9wc20pOwogCi0Jd3JpdGVfdW5sb2NrX2JoKCZsMmNhcF9za19saXN0LmxvY2spOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGRvbmU7CisKKwlpZiAoX19sZTE2X3RvX2NwdShsYS5sMl9wc20pID09IDB4MDAwMSB8fAorCQkJCV9fbGUxNl90b19jcHUobGEubDJfcHNtKSA9PSAweDAwMDMpCisJCWNoYW4tPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX1NEUDsKKworCWJhY3B5KCZidF9zayhzayktPnNyYywgJmxhLmwyX2JkYWRkcik7CisJc2stPnNrX3N0YXRlID0gQlRfQk9VTkQ7CiAKIGRvbmU6CiAJcmVsZWFzZV9zb2NrKHNrKTsKQEAgLTE1OCw2ICsxNDMsNyBAQAogc3RhdGljIGludCBsMmNhcF9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICphZGRyLCBpbnQgYWxlbiwgaW50IGZsYWdzKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBsMmNhcF9jaGFuICpjaGFuID0gbDJjYXBfcGkoc2spLT5jaGFuOwogCXN0cnVjdCBzb2NrYWRkcl9sMiBsYTsKIAlpbnQgbGVuLCBlcnIgPSAwOwogCkBAIC0xODIsNyArMTY4LDcgQEAKIAkJZ290byBkb25lOwogCX0KIAotCXN3aXRjaCAobDJjYXBfcGkoc2spLT5tb2RlKSB7CisJc3dpdGNoIChjaGFuLT5tb2RlKSB7CiAJY2FzZSBMMkNBUF9NT0RFX0JBU0lDOgogCQlicmVhazsKIAljYXNlIEwyQ0FQX01PREVfRVJUTToKQEAgLTIyNiwxMCArMjEyLDEwIEBACiAKIAkvKiBTZXQgZGVzdGluYXRpb24gYWRkcmVzcyBhbmQgcHNtICovCiAJYmFjcHkoJmJ0X3NrKHNrKS0+ZHN0LCAmbGEubDJfYmRhZGRyKTsKLQlsMmNhcF9waShzayktPnBzbSA9IGxhLmwyX3BzbTsKLQlsMmNhcF9waShzayktPmRjaWQgPSBsYS5sMl9jaWQ7CisJY2hhbi0+cHNtID0gbGEubDJfcHNtOworCWNoYW4tPmRjaWQgPSBsYS5sMl9jaWQ7CiAKLQllcnIgPSBsMmNhcF9kb19jb25uZWN0KHNrKTsKKwllcnIgPSBsMmNhcF9jaGFuX2Nvbm5lY3QobDJjYXBfcGkoc2spLT5jaGFuKTsKIAlpZiAoZXJyKQogCQlnb3RvIGRvbmU7CiAKQEAgLTI0NCw2ICsyMzAsNyBAQAogc3RhdGljIGludCBsMmNhcF9zb2NrX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgYmFja2xvZykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiA9IGwyY2FwX3BpKHNrKS0+Y2hhbjsKIAlpbnQgZXJyID0gMDsKIAogCUJUX0RCRygic2sgJXAgYmFja2xvZyAlZCIsIHNrLCBiYWNrbG9nKTsKQEAgLTI1Niw3ICsyNDMsNyBAQAogCQlnb3RvIGRvbmU7CiAJfQogCi0Jc3dpdGNoIChsMmNhcF9waShzayktPm1vZGUpIHsKKwlzd2l0Y2ggKGNoYW4tPm1vZGUpIHsKIAljYXNlIEwyQ0FQX01PREVfQkFTSUM6CiAJCWJyZWFrOwogCWNhc2UgTDJDQVBfTU9ERV9FUlRNOgpAQCAtMjY5LDI4ICsyNTYsNiBAQAogCQlnb3RvIGRvbmU7CiAJfQogCi0JaWYgKCFsMmNhcF9waShzayktPnBzbSAmJiAhbDJjYXBfcGkoc2spLT5kY2lkKSB7Ci0JCWJkYWRkcl90ICpzcmMgPSAmYnRfc2soc2spLT5zcmM7Ci0JCXUxNiBwc207Ci0KLQkJZXJyID0gLUVJTlZBTDsKLQotCQl3cml0ZV9sb2NrX2JoKCZsMmNhcF9za19saXN0LmxvY2spOwotCi0JCWZvciAocHNtID0gMHgxMDAxOyBwc20gPCAweDExMDA7IHBzbSArPSAyKQotCQkJaWYgKCFfX2wyY2FwX2dldF9zb2NrX2J5X2FkZHIoY3B1X3RvX2xlMTYocHNtKSwgc3JjKSkgewotCQkJCWwyY2FwX3BpKHNrKS0+cHNtICAgPSBjcHVfdG9fbGUxNihwc20pOwotCQkJCWwyY2FwX3BpKHNrKS0+c3BvcnQgPSBjcHVfdG9fbGUxNihwc20pOwotCQkJCWVyciA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJd3JpdGVfdW5sb2NrX2JoKCZsMmNhcF9za19saXN0LmxvY2spOwotCi0JCWlmIChlcnIgPCAwKQotCQkJZ290byBkb25lOwotCX0KLQogCXNrLT5za19tYXhfYWNrX2JhY2tsb2cgPSBiYWNrbG9nOwogCXNrLT5za19hY2tfYmFja2xvZyA9IDA7CiAJc2stPnNrX3N0YXRlID0gQlRfTElTVEVOOwpAQCAtMzYwLDYgKzMyNSw3IEBACiB7CiAJc3RydWN0IHNvY2thZGRyX2wyICpsYSA9IChzdHJ1Y3Qgc29ja2FkZHJfbDIgKikgYWRkcjsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiA9IGwyY2FwX3BpKHNrKS0+Y2hhbjsKIAogCUJUX0RCRygic29jayAlcCwgc2sgJXAiLCBzb2NrLCBzayk7CiAKQEAgLTM2NywxMyArMzMzLDEzIEBACiAJKmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbDIpOwogCiAJaWYgKHBlZXIpIHsKLQkJbGEtPmwyX3BzbSA9IGwyY2FwX3BpKHNrKS0+cHNtOworCQlsYS0+bDJfcHNtID0gY2hhbi0+cHNtOwogCQliYWNweSgmbGEtPmwyX2JkYWRkciwgJmJ0X3NrKHNrKS0+ZHN0KTsKLQkJbGEtPmwyX2NpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+ZGNpZCk7CisJCWxhLT5sMl9jaWQgPSBjcHVfdG9fbGUxNihjaGFuLT5kY2lkKTsKIAl9IGVsc2UgewotCQlsYS0+bDJfcHNtID0gbDJjYXBfcGkoc2spLT5zcG9ydDsKKwkJbGEtPmwyX3BzbSA9IGNoYW4tPnNwb3J0OwogCQliYWNweSgmbGEtPmwyX2JkYWRkciwgJmJ0X3NrKHNrKS0+c3JjKTsKLQkJbGEtPmwyX2NpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+c2NpZCk7CisJCWxhLT5sMl9jaWQgPSBjcHVfdG9fbGUxNihjaGFuLT5zY2lkKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTM4Miw2ICszNDgsNyBAQAogc3RhdGljIGludCBsMmNhcF9zb2NrX2dldHNvY2tvcHRfb2xkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4gPSBsMmNhcF9waShzayktPmNoYW47CiAJc3RydWN0IGwyY2FwX29wdGlvbnMgb3B0czsKIAlzdHJ1Y3QgbDJjYXBfY29ubmluZm8gY2luZm87CiAJaW50IGxlbiwgZXJyID0gMDsKQEAgLTM5NywxMyArMzY0LDEzIEBACiAJc3dpdGNoIChvcHRuYW1lKSB7CiAJY2FzZSBMMkNBUF9PUFRJT05TOgogCQltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7Ci0JCW9wdHMuaW10dSAgICAgPSBsMmNhcF9waShzayktPmltdHU7Ci0JCW9wdHMub210dSAgICAgPSBsMmNhcF9waShzayktPm9tdHU7Ci0JCW9wdHMuZmx1c2hfdG8gPSBsMmNhcF9waShzayktPmZsdXNoX3RvOwotCQlvcHRzLm1vZGUgICAgID0gbDJjYXBfcGkoc2spLT5tb2RlOwotCQlvcHRzLmZjcyAgICAgID0gbDJjYXBfcGkoc2spLT5mY3M7Ci0JCW9wdHMubWF4X3R4ICAgPSBsMmNhcF9waShzayktPm1heF90eDsKLQkJb3B0cy50eHdpbl9zaXplID0gKF9fdTE2KWwyY2FwX3BpKHNrKS0+dHhfd2luOworCQlvcHRzLmltdHUgICAgID0gY2hhbi0+aW10dTsKKwkJb3B0cy5vbXR1ICAgICA9IGNoYW4tPm9tdHU7CisJCW9wdHMuZmx1c2hfdG8gPSBjaGFuLT5mbHVzaF90bzsKKwkJb3B0cy5tb2RlICAgICA9IGNoYW4tPm1vZGU7CisJCW9wdHMuZmNzICAgICAgPSBjaGFuLT5mY3M7CisJCW9wdHMubWF4X3R4ICAgPSBjaGFuLT5tYXhfdHg7CisJCW9wdHMudHh3aW5fc2l6ZSA9IChfX3UxNiljaGFuLT50eF93aW47CiAKIAkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHNpemVvZihvcHRzKSk7CiAJCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCAoY2hhciAqKSAmb3B0cywgbGVuKSkKQEAgLTQxMiw3ICszNzksNyBAQAogCQlicmVhazsKIAogCWNhc2UgTDJDQVBfTE06Ci0JCXN3aXRjaCAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwpIHsKKwkJc3dpdGNoIChjaGFuLT5zZWNfbGV2ZWwpIHsKIAkJY2FzZSBCVF9TRUNVUklUWV9MT1c6CiAJCQlvcHQgPSBMMkNBUF9MTV9BVVRIOwogCQkJYnJlYWs7CkBAIC00MjgsMTAgKzM5NSwxMCBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAobDJjYXBfcGkoc2spLT5yb2xlX3N3aXRjaCkKKwkJaWYgKGNoYW4tPnJvbGVfc3dpdGNoKQogCQkJb3B0IHw9IEwyQ0FQX0xNX01BU1RFUjsKIAotCQlpZiAobDJjYXBfcGkoc2spLT5mb3JjZV9yZWxpYWJsZSkKKwkJaWYgKGNoYW4tPmZvcmNlX3JlbGlhYmxlKQogCQkJb3B0IHw9IEwyQ0FQX0xNX1JFTElBQkxFOwogCiAJCWlmIChwdXRfdXNlcihvcHQsICh1MzIgX191c2VyICopIG9wdHZhbCkpCkBAIC00NDYsOCArNDEzLDggQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJY2luZm8uaGNpX2hhbmRsZSA9IGwyY2FwX3BpKHNrKS0+Y29ubi0+aGNvbi0+aGFuZGxlOwotCQltZW1jcHkoY2luZm8uZGV2X2NsYXNzLCBsMmNhcF9waShzayktPmNvbm4tPmhjb24tPmRldl9jbGFzcywgMyk7CisJCWNpbmZvLmhjaV9oYW5kbGUgPSBjaGFuLT5jb25uLT5oY29uLT5oYW5kbGU7CisJCW1lbWNweShjaW5mby5kZXZfY2xhc3MsIGNoYW4tPmNvbm4tPmhjb24tPmRldl9jbGFzcywgMyk7CiAKIAkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHNpemVvZihjaW5mbykpOwogCQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgKGNoYXIgKikgJmNpbmZvLCBsZW4pKQpAQCAtNDY3LDYgKzQzNCw3IEBACiBzdGF0aWMgaW50IGwyY2FwX3NvY2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4gPSBsMmNhcF9waShzayktPmNoYW47CiAJc3RydWN0IGJ0X3NlY3VyaXR5IHNlYzsKIAlpbnQgbGVuLCBlcnIgPSAwOwogCkBAIC00OTEsNyArNDU5LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJc2VjLmxldmVsID0gbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWw7CisJCXNlYy5sZXZlbCA9IGNoYW4tPnNlY19sZXZlbDsKIAogCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc2l6ZW9mKHNlYykpOwogCQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgKGNoYXIgKikgJnNlYywgbGVuKSkKQEAgLTUxMSw3ICs0NzksNyBAQAogCQlicmVhazsKIAogCWNhc2UgQlRfRkxVU0hBQkxFOgotCQlpZiAocHV0X3VzZXIobDJjYXBfcGkoc2spLT5mbHVzaGFibGUsICh1MzIgX191c2VyICopIG9wdHZhbCkpCisJCWlmIChwdXRfdXNlcihjaGFuLT5mbHVzaGFibGUsICh1MzIgX191c2VyICopIG9wdHZhbCkpCiAJCQllcnIgPSAtRUZBVUxUOwogCiAJCWJyZWFrOwpAQCAtNTI4LDYgKzQ5Niw3IEBACiBzdGF0aWMgaW50IGwyY2FwX3NvY2tfc2V0c29ja29wdF9vbGQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4gPSBsMmNhcF9waShzayktPmNoYW47CiAJc3RydWN0IGwyY2FwX29wdGlvbnMgb3B0czsKIAlpbnQgbGVuLCBlcnIgPSAwOwogCXUzMiBvcHQ7CkBAIC01NDMsMTMgKzUxMiwxMyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlvcHRzLmltdHUgICAgID0gbDJjYXBfcGkoc2spLT5pbXR1OwotCQlvcHRzLm9tdHUgICAgID0gbDJjYXBfcGkoc2spLT5vbXR1OwotCQlvcHRzLmZsdXNoX3RvID0gbDJjYXBfcGkoc2spLT5mbHVzaF90bzsKLQkJb3B0cy5tb2RlICAgICA9IGwyY2FwX3BpKHNrKS0+bW9kZTsKLQkJb3B0cy5mY3MgICAgICA9IGwyY2FwX3BpKHNrKS0+ZmNzOwotCQlvcHRzLm1heF90eCAgID0gbDJjYXBfcGkoc2spLT5tYXhfdHg7Ci0JCW9wdHMudHh3aW5fc2l6ZSA9IChfX3UxNilsMmNhcF9waShzayktPnR4X3dpbjsKKwkJb3B0cy5pbXR1ICAgICA9IGNoYW4tPmltdHU7CisJCW9wdHMub210dSAgICAgPSBjaGFuLT5vbXR1OworCQlvcHRzLmZsdXNoX3RvID0gY2hhbi0+Zmx1c2hfdG87CisJCW9wdHMubW9kZSAgICAgPSBjaGFuLT5tb2RlOworCQlvcHRzLmZjcyAgICAgID0gY2hhbi0+ZmNzOworCQlvcHRzLm1heF90eCAgID0gY2hhbi0+bWF4X3R4OworCQlvcHRzLnR4d2luX3NpemUgPSAoX191MTYpY2hhbi0+dHhfd2luOwogCiAJCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgc2l6ZW9mKG9wdHMpLCBvcHRsZW4pOwogCQlpZiAoY29weV9mcm9tX3VzZXIoKGNoYXIgKikgJm9wdHMsIG9wdHZhbCwgbGVuKSkgewpAQCAtNTYyLDEwICs1MzEsMTAgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJbDJjYXBfcGkoc2spLT5tb2RlID0gb3B0cy5tb2RlOwotCQlzd2l0Y2ggKGwyY2FwX3BpKHNrKS0+bW9kZSkgeworCQljaGFuLT5tb2RlID0gb3B0cy5tb2RlOworCQlzd2l0Y2ggKGNoYW4tPm1vZGUpIHsKIAkJY2FzZSBMMkNBUF9NT0RFX0JBU0lDOgotCQkJbDJjYXBfcGkoc2spLT5jb25mX3N0YXRlICY9IH5MMkNBUF9DT05GX1NUQVRFMl9ERVZJQ0U7CisJCQljaGFuLT5jb25mX3N0YXRlICY9IH5MMkNBUF9DT05GX1NUQVRFMl9ERVZJQ0U7CiAJCQlicmVhazsKIAkJY2FzZSBMMkNBUF9NT0RFX0VSVE06CiAJCWNhc2UgTDJDQVBfTU9ERV9TVFJFQU1JTkc6CkBAIC01NzcsMTEgKzU0NiwxMSBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlsMmNhcF9waShzayktPmltdHUgPSBvcHRzLmltdHU7Ci0JCWwyY2FwX3BpKHNrKS0+b210dSA9IG9wdHMub210dTsKLQkJbDJjYXBfcGkoc2spLT5mY3MgID0gb3B0cy5mY3M7Ci0JCWwyY2FwX3BpKHNrKS0+bWF4X3R4ID0gb3B0cy5tYXhfdHg7Ci0JCWwyY2FwX3BpKHNrKS0+dHhfd2luID0gKF9fdTgpb3B0cy50eHdpbl9zaXplOworCQljaGFuLT5pbXR1ID0gb3B0cy5pbXR1OworCQljaGFuLT5vbXR1ID0gb3B0cy5vbXR1OworCQljaGFuLT5mY3MgID0gb3B0cy5mY3M7CisJCWNoYW4tPm1heF90eCA9IG9wdHMubWF4X3R4OworCQljaGFuLT50eF93aW4gPSAoX191OClvcHRzLnR4d2luX3NpemU7CiAJCWJyZWFrOwogCiAJY2FzZSBMMkNBUF9MTToKQEAgLTU5MSwxNCArNTYwLDE0IEBACiAJCX0KIAogCQlpZiAob3B0ICYgTDJDQVBfTE1fQVVUSCkKLQkJCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfTE9XOworCQkJY2hhbi0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfTE9XOwogCQlpZiAob3B0ICYgTDJDQVBfTE1fRU5DUllQVCkKLQkJCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfTUVESVVNOworCQkJY2hhbi0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfTUVESVVNOwogCQlpZiAob3B0ICYgTDJDQVBfTE1fU0VDVVJFKQotCQkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9ISUdIOworCQkJY2hhbi0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfSElHSDsKIAotCQlsMmNhcF9waShzayktPnJvbGVfc3dpdGNoICAgID0gKG9wdCAmIEwyQ0FQX0xNX01BU1RFUik7Ci0JCWwyY2FwX3BpKHNrKS0+Zm9yY2VfcmVsaWFibGUgPSAob3B0ICYgTDJDQVBfTE1fUkVMSUFCTEUpOworCQljaGFuLT5yb2xlX3N3aXRjaCAgICA9IChvcHQgJiBMMkNBUF9MTV9NQVNURVIpOworCQljaGFuLT5mb3JjZV9yZWxpYWJsZSA9IChvcHQgJiBMMkNBUF9MTV9SRUxJQUJMRSk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTYxMyw2ICs1ODIsNyBAQAogc3RhdGljIGludCBsMmNhcF9zb2NrX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbikKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiA9IGwyY2FwX3BpKHNrKS0+Y2hhbjsKIAlzdHJ1Y3QgYnRfc2VjdXJpdHkgc2VjOwogCWludCBsZW4sIGVyciA9IDA7CiAJdTMyIG9wdDsKQEAgLTY0OSw3ICs2MTksNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlsMmNhcF9waShzayktPnNlY19sZXZlbCA9IHNlYy5sZXZlbDsKKwkJY2hhbi0+c2VjX2xldmVsID0gc2VjLmxldmVsOwogCQlicmVhazsKIAogCWNhc2UgQlRfREVGRVJfU0VUVVA6CkBAIC02NzgsNyArNjQ4LDcgQEAKIAkJfQogCiAJCWlmIChvcHQgPT0gQlRfRkxVU0hBQkxFX09GRikgewotCQkJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNvbm47CisJCQlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGNoYW4tPmNvbm47CiAJCQkvKiBwcm9jZWVkIGZ1cnRoZXIgb25seSB3aGVuIHdlIGhhdmUgbDJjYXBfY29ubiBhbmQKIAkJCSAgIE5vIEZsdXNoIHN1cHBvcnQgaW4gdGhlIExNICovCiAJCQlpZiAoIWNvbm4gfHwgIWxtcF9ub19mbHVzaF9jYXBhYmxlKGNvbm4tPmhjb24tPmhkZXYpKSB7CkBAIC02ODcsNyArNjU3LDcgQEAKIAkJCX0KIAkJfQogCi0JCWwyY2FwX3BpKHNrKS0+Zmx1c2hhYmxlID0gb3B0OworCQljaGFuLT5mbHVzaGFibGUgPSBvcHQ7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTcwMiw3ICs2NzIsNyBAQAogc3RhdGljIGludCBsMmNhcF9zb2NrX3NlbmRtc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7Ci0Jc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKHNrKTsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiA9IGwyY2FwX3BpKHNrKS0+Y2hhbjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXUxNiBjb250cm9sOwogCWludCBlcnI7CkBAIC03MjUsNzQgKzY5NSw3NyBAQAogCiAJLyogQ29ubmVjdGlvbmxlc3MgY2hhbm5lbCAqLwogCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX0RHUkFNKSB7Ci0JCXNrYiA9IGwyY2FwX2NyZWF0ZV9jb25ubGVzc19wZHUoc2ssIG1zZywgbGVuKTsKKwkJc2tiID0gbDJjYXBfY3JlYXRlX2Nvbm5sZXNzX3BkdShjaGFuLCBtc2csIGxlbik7CiAJCWlmIChJU19FUlIoc2tiKSkgewogCQkJZXJyID0gUFRSX0VSUihza2IpOwogCQl9IGVsc2UgewotCQkJbDJjYXBfZG9fc2VuZChzaywgc2tiKTsKKwkJCWwyY2FwX2RvX3NlbmQoY2hhbiwgc2tiKTsKIAkJCWVyciA9IGxlbjsKIAkJfQogCQlnb3RvIGRvbmU7CiAJfQogCi0Jc3dpdGNoIChwaS0+bW9kZSkgeworCXN3aXRjaCAoY2hhbi0+bW9kZSkgewogCWNhc2UgTDJDQVBfTU9ERV9CQVNJQzoKIAkJLyogQ2hlY2sgb3V0Z29pbmcgTVRVICovCi0JCWlmIChsZW4gPiBwaS0+b210dSkgeworCQlpZiAobGVuID4gY2hhbi0+b210dSkgewogCQkJZXJyID0gLUVNU0dTSVpFOwogCQkJZ290byBkb25lOwogCQl9CiAKIAkJLyogQ3JlYXRlIGEgYmFzaWMgUERVICovCi0JCXNrYiA9IGwyY2FwX2NyZWF0ZV9iYXNpY19wZHUoc2ssIG1zZywgbGVuKTsKKwkJc2tiID0gbDJjYXBfY3JlYXRlX2Jhc2ljX3BkdShjaGFuLCBtc2csIGxlbik7CiAJCWlmIChJU19FUlIoc2tiKSkgewogCQkJZXJyID0gUFRSX0VSUihza2IpOwogCQkJZ290byBkb25lOwogCQl9CiAKLQkJbDJjYXBfZG9fc2VuZChzaywgc2tiKTsKKwkJbDJjYXBfZG9fc2VuZChjaGFuLCBza2IpOwogCQllcnIgPSBsZW47CiAJCWJyZWFrOwogCiAJY2FzZSBMMkNBUF9NT0RFX0VSVE06CiAJY2FzZSBMMkNBUF9NT0RFX1NUUkVBTUlORzoKIAkJLyogRW50aXJlIFNEVSBmaXRzIGludG8gb25lIFBEVSAqLwotCQlpZiAobGVuIDw9IHBpLT5yZW1vdGVfbXBzKSB7CisJCWlmIChsZW4gPD0gY2hhbi0+cmVtb3RlX21wcykgewogCQkJY29udHJvbCA9IEwyQ0FQX1NEVV9VTlNFR01FTlRFRDsKLQkJCXNrYiA9IGwyY2FwX2NyZWF0ZV9pZnJhbWVfcGR1KHNrLCBtc2csIGxlbiwgY29udHJvbCwgMCk7CisJCQlza2IgPSBsMmNhcF9jcmVhdGVfaWZyYW1lX3BkdShjaGFuLCBtc2csIGxlbiwgY29udHJvbCwKKwkJCQkJCQkJCTApOwogCQkJaWYgKElTX0VSUihza2IpKSB7CiAJCQkJZXJyID0gUFRSX0VSUihza2IpOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KLQkJCV9fc2tiX3F1ZXVlX3RhaWwoVFhfUVVFVUUoc2spLCBza2IpOworCQkJX19za2JfcXVldWVfdGFpbCgmY2hhbi0+dHhfcSwgc2tiKTsKIAotCQkJaWYgKHNrLT5za19zZW5kX2hlYWQgPT0gTlVMTCkKLQkJCQlzay0+c2tfc2VuZF9oZWFkID0gc2tiOworCQkJaWYgKGNoYW4tPnR4X3NlbmRfaGVhZCA9PSBOVUxMKQorCQkJCWNoYW4tPnR4X3NlbmRfaGVhZCA9IHNrYjsKIAogCQl9IGVsc2UgewogCQkvKiBTZWdtZW50IFNEVSBpbnRvIG11bHRpcGxlcyBQRFVzICovCi0JCQllcnIgPSBsMmNhcF9zYXJfc2VnbWVudF9zZHUoc2ssIG1zZywgbGVuKTsKKwkJCWVyciA9IGwyY2FwX3Nhcl9zZWdtZW50X3NkdShjaGFuLCBtc2csIGxlbik7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlnb3RvIGRvbmU7CiAJCX0KIAotCQlpZiAocGktPm1vZGUgPT0gTDJDQVBfTU9ERV9TVFJFQU1JTkcpIHsKLQkJCWwyY2FwX3N0cmVhbWluZ19zZW5kKHNrKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1JFTU9URV9CVVNZKSAmJgotCQkJCQkocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1dBSVRfRikpIHsKLQkJCQllcnIgPSBsZW47Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQllcnIgPSBsMmNhcF9lcnRtX3NlbmQoc2spOworCQlpZiAoY2hhbi0+bW9kZSA9PSBMMkNBUF9NT0RFX1NUUkVBTUlORykgeworCQkJbDJjYXBfc3RyZWFtaW5nX3NlbmQoY2hhbik7CisJCQllcnIgPSBsZW47CisJCQlicmVhazsKIAkJfQogCisJCWlmICgoY2hhbi0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fUkVNT1RFX0JVU1kpICYmCisJCQkJKGNoYW4tPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1dBSVRfRikpIHsKKwkJCWVyciA9IGxlbjsKKwkJCWJyZWFrOworCQl9CisJCWVyciA9IGwyY2FwX2VydG1fc2VuZChjaGFuKTsKKwogCQlpZiAoZXJyID49IDApCiAJCQllcnIgPSBsZW47CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJQlRfREJHKCJiYWQgc3RhdGUgJTEuMXgiLCBwaS0+bW9kZSk7CisJCUJUX0RCRygiYmFkIHN0YXRlICUxLjF4IiwgY2hhbi0+bW9kZSk7CiAJCWVyciA9IC1FQkFERkQ7CiAJfQogCkBAIC04MDgsMjkgKzc4MSw5IEBACiAJbG9ja19zb2NrKHNrKTsKIAogCWlmIChzay0+c2tfc3RhdGUgPT0gQlRfQ09OTkVDVDIgJiYgYnRfc2soc2spLT5kZWZlcl9zZXR1cCkgewotCQlzdHJ1Y3QgbDJjYXBfY29ubl9yc3AgcnNwOwotCQlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKLQkJdTggYnVmWzEyOF07Ci0KIAkJc2stPnNrX3N0YXRlID0gQlRfQ09ORklHOwogCi0JCXJzcC5zY2lkICAgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPmRjaWQpOwotCQlyc3AuZGNpZCAgID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKLQkJcnNwLnJlc3VsdCA9IGNwdV90b19sZTE2KEwyQ0FQX0NSX1NVQ0NFU1MpOwotCQlyc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoTDJDQVBfQ1NfTk9fSU5GTyk7Ci0JCWwyY2FwX3NlbmRfY21kKGwyY2FwX3BpKHNrKS0+Y29ubiwgbDJjYXBfcGkoc2spLT5pZGVudCwKLQkJCQkJTDJDQVBfQ09OTl9SU1AsIHNpemVvZihyc3ApLCAmcnNwKTsKLQotCQlpZiAobDJjYXBfcGkoc2spLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9SRVFfU0VOVCkgewotCQkJcmVsZWFzZV9zb2NrKHNrKTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJbDJjYXBfcGkoc2spLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfUkVRX1NFTlQ7Ci0JCWwyY2FwX3NlbmRfY21kKGNvbm4sIGwyY2FwX2dldF9pZGVudChjb25uKSwgTDJDQVBfQ09ORl9SRVEsCi0JCQkJbDJjYXBfYnVpbGRfY29uZl9yZXEoc2ssIGJ1ZiksIGJ1Zik7Ci0JCWwyY2FwX3BpKHNrKS0+bnVtX2NvbmZfcmVxKys7Ci0KKwkJX19sMmNhcF9jb25uZWN0X3JzcF9kZWZlcihsMmNhcF9waShzayktPmNoYW4pOwogCQlyZWxlYXNlX3NvY2soc2spOwogCQlyZXR1cm4gMDsKIAl9CkBAIC04NTQsNyArODA3LDggQEAKIAlCVF9EQkcoInNrICVwIHN0YXRlICVkIiwgc2ssIHNrLT5za19zdGF0ZSk7CiAKIAkvKiBLaWxsIHBvb3Igb3JwaGFuICovCi0JYnRfc29ja191bmxpbmsoJmwyY2FwX3NrX2xpc3QsIHNrKTsKKworCWwyY2FwX2NoYW5fZGVzdHJveShsMmNhcF9waShzayktPmNoYW4pOwogCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfREVBRCk7CiAJc29ja19wdXQoc2spOwogfQpAQCAtODg1LDcgKzgzOSw4IEBACiAKIHZvaWQgX19sMmNhcF9zb2NrX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgaW50IHJlYXNvbikKIHsKLQlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiA9IGwyY2FwX3BpKHNrKS0+Y2hhbjsKKwlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGNoYW4tPmNvbm47CiAKIAlCVF9EQkcoInNrICVwIHN0YXRlICVkIHNvY2tldCAlcCIsIHNrLCBzay0+c2tfc3RhdGUsIHNrLT5za19zb2NrZXQpOwogCkBAIC05MDAsOSArODU1LDkgQEAKIAkJCQkJc2stPnNrX3R5cGUgPT0gU09DS19TVFJFQU0pICYmCiAJCQkJCWNvbm4tPmhjb24tPnR5cGUgPT0gQUNMX0xJTkspIHsKIAkJCWwyY2FwX3NvY2tfc2V0X3RpbWVyKHNrLCBzay0+c2tfc25kdGltZW8pOwotCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShjb25uLCBzaywgcmVhc29uKTsKKwkJCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEoY29ubiwgY2hhbiwgcmVhc29uKTsKIAkJfSBlbHNlCi0JCQlsMmNhcF9jaGFuX2RlbChzaywgcmVhc29uKTsKKwkJCWwyY2FwX2NoYW5fZGVsKGNoYW4sIHJlYXNvbik7CiAJCWJyZWFrOwogCiAJY2FzZSBCVF9DT05ORUNUMjoKQEAgLTkxNywyMCArODcyLDIwIEBACiAJCQllbHNlCiAJCQkJcmVzdWx0ID0gTDJDQVBfQ1JfQkFEX1BTTTsKIAotCQkJcnNwLnNjaWQgICA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+ZGNpZCk7Ci0JCQlyc3AuZGNpZCAgID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5zY2lkKTsKKwkJCXJzcC5zY2lkICAgPSBjcHVfdG9fbGUxNihjaGFuLT5kY2lkKTsKKwkJCXJzcC5kY2lkICAgPSBjcHVfdG9fbGUxNihjaGFuLT5zY2lkKTsKIAkJCXJzcC5yZXN1bHQgPSBjcHVfdG9fbGUxNihyZXN1bHQpOwogCQkJcnNwLnN0YXR1cyA9IGNwdV90b19sZTE2KEwyQ0FQX0NTX05PX0lORk8pOwotCQkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfcGkoc2spLT5pZGVudCwKLQkJCQkJTDJDQVBfQ09OTl9SU1AsIHNpemVvZihyc3ApLCAmcnNwKTsKKwkJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGNoYW4tPmlkZW50LCBMMkNBUF9DT05OX1JTUCwKKwkJCQkJCQlzaXplb2YocnNwKSwgJnJzcCk7CiAJCX0KIAotCQlsMmNhcF9jaGFuX2RlbChzaywgcmVhc29uKTsKKwkJbDJjYXBfY2hhbl9kZWwoY2hhbiwgcmVhc29uKTsKIAkJYnJlYWs7CiAKIAljYXNlIEJUX0NPTk5FQ1Q6CiAJY2FzZSBCVF9ESVNDT05OOgotCQlsMmNhcF9jaGFuX2RlbChzaywgcmVhc29uKTsKKwkJbDJjYXBfY2hhbl9kZWwoY2hhbiwgcmVhc29uKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtOTQyLDYgKzg5Nyw3IEBACiBzdGF0aWMgaW50IGwyY2FwX3NvY2tfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbiA9IGwyY2FwX3BpKHNrKS0+Y2hhbjsKIAlpbnQgZXJyID0gMDsKIAogCUJUX0RCRygic29jayAlcCwgc2sgJXAiLCBzb2NrLCBzayk7CkBAIC05NTEsNyArOTA3LDcgQEAKIAogCWxvY2tfc29jayhzayk7CiAJaWYgKCFzay0+c2tfc2h1dGRvd24pIHsKLQkJaWYgKGwyY2FwX3BpKHNrKS0+bW9kZSA9PSBMMkNBUF9NT0RFX0VSVE0pCisJCWlmIChjaGFuLT5tb2RlID09IEwyQ0FQX01PREVfRVJUTSkKIAkJCWVyciA9IF9fbDJjYXBfd2FpdF9hY2soc2spOwogCiAJCXNrLT5za19zaHV0ZG93biA9IFNIVVRET1dOX01BU0s7CkBAIC05OTgsNDkgKzk1NCw0NyBAQAogdm9pZCBsMmNhcF9zb2NrX2luaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqcGFyZW50KQogewogCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CisJc3RydWN0IGwyY2FwX2NoYW4gKmNoYW4gPSBwaS0+Y2hhbjsKIAogCUJUX0RCRygic2sgJXAiLCBzayk7CiAKIAlpZiAocGFyZW50KSB7CisJCXN0cnVjdCBsMmNhcF9jaGFuICpwY2hhbiA9IGwyY2FwX3BpKHBhcmVudCktPmNoYW47CisKIAkJc2stPnNrX3R5cGUgPSBwYXJlbnQtPnNrX3R5cGU7CiAJCWJ0X3NrKHNrKS0+ZGVmZXJfc2V0dXAgPSBidF9zayhwYXJlbnQpLT5kZWZlcl9zZXR1cDsKIAotCQlwaS0+aW10dSA9IGwyY2FwX3BpKHBhcmVudCktPmltdHU7Ci0JCXBpLT5vbXR1ID0gbDJjYXBfcGkocGFyZW50KS0+b210dTsKLQkJcGktPmNvbmZfc3RhdGUgPSBsMmNhcF9waShwYXJlbnQpLT5jb25mX3N0YXRlOwotCQlwaS0+bW9kZSA9IGwyY2FwX3BpKHBhcmVudCktPm1vZGU7Ci0JCXBpLT5mY3MgID0gbDJjYXBfcGkocGFyZW50KS0+ZmNzOwotCQlwaS0+bWF4X3R4ID0gbDJjYXBfcGkocGFyZW50KS0+bWF4X3R4OwotCQlwaS0+dHhfd2luID0gbDJjYXBfcGkocGFyZW50KS0+dHhfd2luOwotCQlwaS0+c2VjX2xldmVsID0gbDJjYXBfcGkocGFyZW50KS0+c2VjX2xldmVsOwotCQlwaS0+cm9sZV9zd2l0Y2ggPSBsMmNhcF9waShwYXJlbnQpLT5yb2xlX3N3aXRjaDsKLQkJcGktPmZvcmNlX3JlbGlhYmxlID0gbDJjYXBfcGkocGFyZW50KS0+Zm9yY2VfcmVsaWFibGU7Ci0JCXBpLT5mbHVzaGFibGUgPSBsMmNhcF9waShwYXJlbnQpLT5mbHVzaGFibGU7CisJCWNoYW4tPmltdHUgPSBwY2hhbi0+aW10dTsKKwkJY2hhbi0+b210dSA9IHBjaGFuLT5vbXR1OworCQljaGFuLT5jb25mX3N0YXRlID0gcGNoYW4tPmNvbmZfc3RhdGU7CisJCWNoYW4tPm1vZGUgPSBwY2hhbi0+bW9kZTsKKwkJY2hhbi0+ZmNzICA9IHBjaGFuLT5mY3M7CisJCWNoYW4tPm1heF90eCA9IHBjaGFuLT5tYXhfdHg7CisJCWNoYW4tPnR4X3dpbiA9IHBjaGFuLT50eF93aW47CisJCWNoYW4tPnNlY19sZXZlbCA9IHBjaGFuLT5zZWNfbGV2ZWw7CisJCWNoYW4tPnJvbGVfc3dpdGNoID0gcGNoYW4tPnJvbGVfc3dpdGNoOworCQljaGFuLT5mb3JjZV9yZWxpYWJsZSA9IHBjaGFuLT5mb3JjZV9yZWxpYWJsZTsKKwkJY2hhbi0+Zmx1c2hhYmxlID0gcGNoYW4tPmZsdXNoYWJsZTsKIAl9IGVsc2UgewotCQlwaS0+aW10dSA9IEwyQ0FQX0RFRkFVTFRfTVRVOwotCQlwaS0+b210dSA9IDA7CisJCWNoYW4tPmltdHUgPSBMMkNBUF9ERUZBVUxUX01UVTsKKwkJY2hhbi0+b210dSA9IDA7CiAJCWlmICghZGlzYWJsZV9lcnRtICYmIHNrLT5za190eXBlID09IFNPQ0tfU1RSRUFNKSB7Ci0JCQlwaS0+bW9kZSA9IEwyQ0FQX01PREVfRVJUTTsKLQkJCXBpLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfU1RBVEUyX0RFVklDRTsKKwkJCWNoYW4tPm1vZGUgPSBMMkNBUF9NT0RFX0VSVE07CisJCQljaGFuLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfU1RBVEUyX0RFVklDRTsKIAkJfSBlbHNlIHsKLQkJCXBpLT5tb2RlID0gTDJDQVBfTU9ERV9CQVNJQzsKKwkJCWNoYW4tPm1vZGUgPSBMMkNBUF9NT0RFX0JBU0lDOwogCQl9Ci0JCXBpLT5tYXhfdHggPSBMMkNBUF9ERUZBVUxUX01BWF9UWDsKLQkJcGktPmZjcyAgPSBMMkNBUF9GQ1NfQ1JDMTY7Ci0JCXBpLT50eF93aW4gPSBMMkNBUF9ERUZBVUxUX1RYX1dJTkRPVzsKLQkJcGktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX0xPVzsKLQkJcGktPnJvbGVfc3dpdGNoID0gMDsKLQkJcGktPmZvcmNlX3JlbGlhYmxlID0gMDsKLQkJcGktPmZsdXNoYWJsZSA9IEJUX0ZMVVNIQUJMRV9PRkY7CisJCWNoYW4tPm1heF90eCA9IEwyQ0FQX0RFRkFVTFRfTUFYX1RYOworCQljaGFuLT5mY3MgID0gTDJDQVBfRkNTX0NSQzE2OworCQljaGFuLT50eF93aW4gPSBMMkNBUF9ERUZBVUxUX1RYX1dJTkRPVzsKKwkJY2hhbi0+c2VjX2xldmVsID0gQlRfU0VDVVJJVFlfTE9XOworCQljaGFuLT5yb2xlX3N3aXRjaCA9IDA7CisJCWNoYW4tPmZvcmNlX3JlbGlhYmxlID0gMDsKKwkJY2hhbi0+Zmx1c2hhYmxlID0gQlRfRkxVU0hBQkxFX09GRjsKIAl9CiAKIAkvKiBEZWZhdWx0IGNvbmZpZyBvcHRpb25zICovCi0JcGktPmNvbmZfbGVuID0gMDsKLQlwaS0+Zmx1c2hfdG8gPSBMMkNBUF9ERUZBVUxUX0ZMVVNIX1RPOwotCXNrYl9xdWV1ZV9oZWFkX2luaXQoVFhfUVVFVUUoc2spKTsKLQlza2JfcXVldWVfaGVhZF9pbml0KFNSRUpfUVVFVUUoc2spKTsKLQlza2JfcXVldWVfaGVhZF9pbml0KEJVU1lfUVVFVUUoc2spKTsKLQlJTklUX0xJU1RfSEVBRChTUkVKX0xJU1Qoc2spKTsKKwljaGFuLT5mbHVzaF90byA9IEwyQ0FQX0RFRkFVTFRfRkxVU0hfVE87CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHJvdG8gbDJjYXBfcHJvdG8gPSB7CkBAIC0xMDcwLDcgKzEwMjQsNiBAQAogCiAJc2V0dXBfdGltZXIoJnNrLT5za190aW1lciwgbDJjYXBfc29ja190aW1lb3V0LCAodW5zaWduZWQgbG9uZykgc2spOwogCi0JYnRfc29ja19saW5rKCZsMmNhcF9za19saXN0LCBzayk7CiAJcmV0dXJuIHNrOwogfQogCkBAIC0xMDc4LDYgKzEwMzEsNyBAQAogCQkJICAgICBpbnQga2VybikKIHsKIAlzdHJ1Y3Qgc29jayAqc2s7CisJc3RydWN0IGwyY2FwX2NoYW4gKmNoYW47CiAKIAlCVF9EQkcoInNvY2sgJXAiLCBzb2NrKTsKIApAQCAtMTA5NiwxMSArMTA1MCwxOSBAQAogCWlmICghc2spCiAJCXJldHVybiAtRU5PTUVNOwogCisJY2hhbiA9IGwyY2FwX2NoYW5fY3JlYXRlKHNrKTsKKwlpZiAoIWNoYW4pIHsKKwkJbDJjYXBfc29ja19raWxsKHNrKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbDJjYXBfcGkoc2spLT5jaGFuID0gY2hhbjsKKwogCWwyY2FwX3NvY2tfaW5pdChzaywgTlVMTCk7CiAJcmV0dXJuIDA7CiB9CiAKLWNvbnN0IHN0cnVjdCBwcm90b19vcHMgbDJjYXBfc29ja19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBsMmNhcF9zb2NrX29wcyA9IHsKIAkuZmFtaWx5CQk9IFBGX0JMVUVUT09USCwKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLnJlbGVhc2UJPSBsMmNhcF9zb2NrX3JlbGVhc2UsCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL21nbXQuYyBiL25ldC9ibHVldG9vdGgvbWdtdC5jCmluZGV4IDQ0NzZkOGUuLmRhZTM4MmMgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvbWdtdC5jCisrKyBiL25ldC9ibHVldG9vdGgvbWdtdC5jCkBAIC0zNiw3ICszNiw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCV9fdTE2IG9wY29kZTsKIAlpbnQgaW5kZXg7Ci0Jdm9pZCAqY21kOworCXZvaWQgKnBhcmFtOwogCXN0cnVjdCBzb2NrICpzazsKIAl2b2lkICp1c2VyX2RhdGE7CiB9OwpAQCAtMTc5LDEwICsxNzksMTIgQEAKIAogCWhjaV9kZWxfb2ZmX3RpbWVyKGhkZXYpOwogCi0JaGNpX2Rldl9sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfbG9jayhoZGV2KTsKIAogCXNldF9iaXQoSENJX01HTVQsICZoZGV2LT5mbGFncyk7CiAKKwltZW1zZXQoJnJwLCAwLCBzaXplb2YocnApKTsKKwogCXJwLnR5cGUgPSBoZGV2LT5kZXZfdHlwZTsKIAogCXJwLnBvd2VyZWQgPSB0ZXN0X2JpdChIQ0lfVVAsICZoZGV2LT5mbGFncyk7CkBAIC0yMDQsNyArMjA2LDkgQEAKIAlycC5oY2lfdmVyID0gaGRldi0+aGNpX3ZlcjsKIAlwdXRfdW5hbGlnbmVkX2xlMTYoaGRldi0+aGNpX3JldiwgJnJwLmhjaV9yZXYpOwogCi0JaGNpX2Rldl91bmxvY2tfYmgoaGRldik7CisJbWVtY3B5KHJwLm5hbWUsIGhkZXYtPmRldl9uYW1lLCBzaXplb2YoaGRldi0+ZGV2X25hbWUpKTsKKworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwogCWhjaV9kZXZfcHV0KGhkZXYpOwogCiAJcmV0dXJuIGNtZF9jb21wbGV0ZShzaywgaW5kZXgsIE1HTVRfT1BfUkVBRF9JTkZPLCAmcnAsIHNpemVvZihycCkpOwpAQCAtMjEzLDcgKzIxNyw3IEBACiBzdGF0aWMgdm9pZCBtZ210X3BlbmRpbmdfZnJlZShzdHJ1Y3QgcGVuZGluZ19jbWQgKmNtZCkKIHsKIAlzb2NrX3B1dChjbWQtPnNrKTsKLQlrZnJlZShjbWQtPmNtZCk7CisJa2ZyZWUoY21kLT5wYXJhbSk7CiAJa2ZyZWUoY21kKTsKIH0KIApAQCAtMjI5LDEzICsyMzMsMTQgQEAKIAljbWQtPm9wY29kZSA9IG9wY29kZTsKIAljbWQtPmluZGV4ID0gaW5kZXg7CiAKLQljbWQtPmNtZCA9IGttYWxsb2MobGVuLCBHRlBfQVRPTUlDKTsKLQlpZiAoIWNtZC0+Y21kKSB7CisJY21kLT5wYXJhbSA9IGttYWxsb2MobGVuLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWNtZC0+cGFyYW0pIHsKIAkJa2ZyZWUoY21kKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JbWVtY3B5KGNtZC0+Y21kLCBkYXRhLCBsZW4pOworCWlmIChkYXRhKQorCQltZW1jcHkoY21kLT5wYXJhbSwgZGF0YSwgbGVuKTsKIAogCWNtZC0+c2sgPSBzazsKIAlzb2NrX2hvbGQoc2spOwpAQCAtMzExLDcgKzMxNiw3IEBACiAJaWYgKCFoZGV2KQogCQlyZXR1cm4gY21kX3N0YXR1cyhzaywgaW5kZXgsIE1HTVRfT1BfU0VUX1BPV0VSRUQsIEVOT0RFVik7CiAKLQloY2lfZGV2X2xvY2tfYmgoaGRldik7CisJaGNpX2Rldl9sb2NrKGhkZXYpOwogCiAJdXAgPSB0ZXN0X2JpdChIQ0lfVVAsICZoZGV2LT5mbGFncyk7CiAJaWYgKChjcC0+dmFsICYmIHVwKSB8fCAoIWNwLT52YWwgJiYgIXVwKSkgewpAQCAtMzM4LDcgKzM0Myw3IEBACiAJZXJyID0gMDsKIAogZmFpbGVkOgotCWhjaV9kZXZfdW5sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwogCWhjaV9kZXZfcHV0KGhkZXYpOwogCXJldHVybiBlcnI7CiB9CkBAIC0zNjMsNyArMzY4LDcgQEAKIAlpZiAoIWhkZXYpCiAJCXJldHVybiBjbWRfc3RhdHVzKHNrLCBpbmRleCwgTUdNVF9PUF9TRVRfRElTQ09WRVJBQkxFLCBFTk9ERVYpOwogCi0JaGNpX2Rldl9sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfbG9jayhoZGV2KTsKIAogCWlmICghdGVzdF9iaXQoSENJX1VQLCAmaGRldi0+ZmxhZ3MpKSB7CiAJCWVyciA9IGNtZF9zdGF0dXMoc2ssIGluZGV4LCBNR01UX09QX1NFVF9ESVNDT1ZFUkFCTEUsIEVORVRET1dOKTsKQEAgLTM5OCw3ICs0MDMsNyBAQAogCQltZ210X3BlbmRpbmdfcmVtb3ZlKGNtZCk7CiAKIGZhaWxlZDoKLQloY2lfZGV2X3VubG9ja19iaChoZGV2KTsKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKIAloY2lfZGV2X3B1dChoZGV2KTsKIAogCXJldHVybiBlcnI7CkBAIC00MjQsNyArNDI5LDcgQEAKIAlpZiAoIWhkZXYpCiAJCXJldHVybiBjbWRfc3RhdHVzKHNrLCBpbmRleCwgTUdNVF9PUF9TRVRfQ09OTkVDVEFCTEUsIEVOT0RFVik7CiAKLQloY2lfZGV2X2xvY2tfYmgoaGRldik7CisJaGNpX2Rldl9sb2NrKGhkZXYpOwogCiAJaWYgKCF0ZXN0X2JpdChIQ0lfVVAsICZoZGV2LT5mbGFncykpIHsKIAkJZXJyID0gY21kX3N0YXR1cyhzaywgaW5kZXgsIE1HTVRfT1BfU0VUX0NPTk5FQ1RBQkxFLCBFTkVURE9XTik7CkBAIC00NTgsNyArNDYzLDcgQEAKIAkJbWdtdF9wZW5kaW5nX3JlbW92ZShjbWQpOwogCiBmYWlsZWQ6Ci0JaGNpX2Rldl91bmxvY2tfYmgoaGRldik7CisJaGNpX2Rldl91bmxvY2soaGRldik7CiAJaGNpX2Rldl9wdXQoaGRldik7CiAKIAlyZXR1cm4gZXJyOwpAQCAtNTE3LDcgKzUyMiw3IEBACiAJaWYgKCFoZGV2KQogCQlyZXR1cm4gY21kX3N0YXR1cyhzaywgaW5kZXgsIE1HTVRfT1BfU0VUX1BBSVJBQkxFLCBFTk9ERVYpOwogCi0JaGNpX2Rldl9sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfbG9jayhoZGV2KTsKIAogCWlmIChjcC0+dmFsKQogCQlzZXRfYml0KEhDSV9QQUlSQUJMRSwgJmhkZXYtPmZsYWdzKTsKQEAgLTUzMywxMiArNTM4LDE1NiBAQAogCWVyciA9IG1nbXRfZXZlbnQoTUdNVF9FVl9QQUlSQUJMRSwgaW5kZXgsICZldiwgc2l6ZW9mKGV2KSwgc2spOwogCiBmYWlsZWQ6Ci0JaGNpX2Rldl91bmxvY2tfYmgoaGRldik7CisJaGNpX2Rldl91bmxvY2soaGRldik7CiAJaGNpX2Rldl9wdXQoaGRldik7CiAKIAlyZXR1cm4gZXJyOwogfQogCisjZGVmaW5lIEVJUl9GTEFHUwkJMHgwMSAvKiBmbGFncyAqLworI2RlZmluZSBFSVJfVVVJRDE2X1NPTUUJCTB4MDIgLyogMTYtYml0IFVVSUQsIG1vcmUgYXZhaWxhYmxlICovCisjZGVmaW5lIEVJUl9VVUlEMTZfQUxMCQkweDAzIC8qIDE2LWJpdCBVVUlELCBhbGwgbGlzdGVkICovCisjZGVmaW5lIEVJUl9VVUlEMzJfU09NRQkJMHgwNCAvKiAzMi1iaXQgVVVJRCwgbW9yZSBhdmFpbGFibGUgKi8KKyNkZWZpbmUgRUlSX1VVSUQzMl9BTEwJCTB4MDUgLyogMzItYml0IFVVSUQsIGFsbCBsaXN0ZWQgKi8KKyNkZWZpbmUgRUlSX1VVSUQxMjhfU09NRQkweDA2IC8qIDEyOC1iaXQgVVVJRCwgbW9yZSBhdmFpbGFibGUgKi8KKyNkZWZpbmUgRUlSX1VVSUQxMjhfQUxMCQkweDA3IC8qIDEyOC1iaXQgVVVJRCwgYWxsIGxpc3RlZCAqLworI2RlZmluZSBFSVJfTkFNRV9TSE9SVAkJMHgwOCAvKiBzaG9ydGVuZWQgbG9jYWwgbmFtZSAqLworI2RlZmluZSBFSVJfTkFNRV9DT01QTEVURQkweDA5IC8qIGNvbXBsZXRlIGxvY2FsIG5hbWUgKi8KKyNkZWZpbmUgRUlSX1RYX1BPV0VSCQkweDBBIC8qIHRyYW5zbWl0IHBvd2VyIGxldmVsICovCisjZGVmaW5lIEVJUl9ERVZJQ0VfSUQJCTB4MTAgLyogZGV2aWNlIElEICovCisKKyNkZWZpbmUgUE5QX0lORk9fU1ZDTEFTU19JRAkJMHgxMjAwCisKK3N0YXRpYyB1OCBibHVldG9vdGhfYmFzZV91dWlkW10gPSB7CisJCQkweEZCLCAweDM0LCAweDlCLCAweDVGLCAweDgwLCAweDAwLCAweDAwLCAweDgwLAorCQkJMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKK307CisKK3N0YXRpYyB1MTYgZ2V0X3V1aWQxNih1OCAqdXVpZDEyOCkKK3sKKwl1MzIgdmFsOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHsKKwkJaWYgKGJsdWV0b290aF9iYXNlX3V1aWRbaV0gIT0gdXVpZDEyOFtpXSkKKwkJCXJldHVybiAwOworCX0KKworCW1lbWNweSgmdmFsLCAmdXVpZDEyOFsxMl0sIDQpOworCisJdmFsID0gbGUzMl90b19jcHUodmFsKTsKKwlpZiAodmFsID4gMHhmZmZmKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAodTE2KSB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV9laXIoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHU4ICpkYXRhKQoreworCXU4ICpwdHIgPSBkYXRhOworCXUxNiBlaXJfbGVuID0gMDsKKwl1MTYgdXVpZDE2X2xpc3RbSENJX01BWF9FSVJfTEVOR1RIIC8gc2l6ZW9mKHUxNildOworCWludCBpLCB0cnVuY2F0ZWQgPSAwOworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisJc2l6ZV90IG5hbWVfbGVuOworCisJbmFtZV9sZW4gPSBzdHJsZW4oaGRldi0+ZGV2X25hbWUpOworCisJaWYgKG5hbWVfbGVuID4gMCkgeworCQkvKiBFSVIgRGF0YSB0eXBlICovCisJCWlmIChuYW1lX2xlbiA+IDQ4KSB7CisJCQluYW1lX2xlbiA9IDQ4OworCQkJcHRyWzFdID0gRUlSX05BTUVfU0hPUlQ7CisJCX0gZWxzZQorCQkJcHRyWzFdID0gRUlSX05BTUVfQ09NUExFVEU7CisKKwkJLyogRUlSIERhdGEgbGVuZ3RoICovCisJCXB0clswXSA9IG5hbWVfbGVuICsgMTsKKworCQltZW1jcHkocHRyICsgMiwgaGRldi0+ZGV2X25hbWUsIG5hbWVfbGVuKTsKKworCQllaXJfbGVuICs9IChuYW1lX2xlbiArIDIpOworCQlwdHIgKz0gKG5hbWVfbGVuICsgMik7CisJfQorCisJbWVtc2V0KHV1aWQxNl9saXN0LCAwLCBzaXplb2YodXVpZDE2X2xpc3QpKTsKKworCS8qIEdyb3VwIGFsbCBVVUlEMTYgdHlwZXMgKi8KKwlsaXN0X2Zvcl9lYWNoKHAsICZoZGV2LT51dWlkcykgeworCQlzdHJ1Y3QgYnRfdXVpZCAqdXVpZCA9IGxpc3RfZW50cnkocCwgc3RydWN0IGJ0X3V1aWQsIGxpc3QpOworCQl1MTYgdXVpZDE2OworCisJCXV1aWQxNiA9IGdldF91dWlkMTYodXVpZC0+dXVpZCk7CisJCWlmICh1dWlkMTYgPT0gMCkKKwkJCXJldHVybjsKKworCQlpZiAodXVpZDE2IDwgMHgxMTAwKQorCQkJY29udGludWU7CisKKwkJaWYgKHV1aWQxNiA9PSBQTlBfSU5GT19TVkNMQVNTX0lEKQorCQkJY29udGludWU7CisKKwkJLyogU3RvcCBpZiBub3QgZW5vdWdoIHNwYWNlIHRvIHB1dCBuZXh0IFVVSUQgKi8KKwkJaWYgKGVpcl9sZW4gKyAyICsgc2l6ZW9mKHUxNikgPiBIQ0lfTUFYX0VJUl9MRU5HVEgpIHsKKwkJCXRydW5jYXRlZCA9IDE7CisJCQlicmVhazsKKwkJfQorCisJCS8qIENoZWNrIGZvciBkdXBsaWNhdGVzICovCisJCWZvciAoaSA9IDA7IHV1aWQxNl9saXN0W2ldICE9IDA7IGkrKykKKwkJCWlmICh1dWlkMTZfbGlzdFtpXSA9PSB1dWlkMTYpCisJCQkJYnJlYWs7CisKKwkJaWYgKHV1aWQxNl9saXN0W2ldID09IDApIHsKKwkJCXV1aWQxNl9saXN0W2ldID0gdXVpZDE2OworCQkJZWlyX2xlbiArPSBzaXplb2YodTE2KTsKKwkJfQorCX0KKworCWlmICh1dWlkMTZfbGlzdFswXSAhPSAwKSB7CisJCXU4ICpsZW5ndGggPSBwdHI7CisKKwkJLyogRUlSIERhdGEgdHlwZSAqLworCQlwdHJbMV0gPSB0cnVuY2F0ZWQgPyBFSVJfVVVJRDE2X1NPTUUgOiBFSVJfVVVJRDE2X0FMTDsKKworCQlwdHIgKz0gMjsKKwkJZWlyX2xlbiArPSAyOworCisJCWZvciAoaSA9IDA7IHV1aWQxNl9saXN0W2ldICE9IDA7IGkrKykgeworCQkJKnB0cisrID0gKHV1aWQxNl9saXN0W2ldICYgMHgwMGZmKTsKKwkJCSpwdHIrKyA9ICh1dWlkMTZfbGlzdFtpXSAmIDB4ZmYwMCkgPj4gODsKKwkJfQorCisJCS8qIEVJUiBEYXRhIGxlbmd0aCAqLworCQkqbGVuZ3RoID0gKGkgKiBzaXplb2YodTE2KSkgKyAxOworCX0KK30KKworc3RhdGljIGludCB1cGRhdGVfZWlyKHN0cnVjdCBoY2lfZGV2ICpoZGV2KQoreworCXN0cnVjdCBoY2lfY3Bfd3JpdGVfZWlyIGNwOworCisJaWYgKCEoaGRldi0+ZmVhdHVyZXNbNl0gJiBMTVBfRVhUX0lOUSkpCisJCXJldHVybiAwOworCisJaWYgKGhkZXYtPnNzcF9tb2RlID09IDApCisJCXJldHVybiAwOworCisJaWYgKHRlc3RfYml0KEhDSV9TRVJWSUNFX0NBQ0hFLCAmaGRldi0+ZmxhZ3MpKQorCQlyZXR1cm4gMDsKKworCW1lbXNldCgmY3AsIDAsIHNpemVvZihjcCkpOworCisJY3JlYXRlX2VpcihoZGV2LCBjcC5kYXRhKTsKKworCWlmIChtZW1jbXAoY3AuZGF0YSwgaGRldi0+ZWlyLCBzaXplb2YoY3AuZGF0YSkpID09IDApCisJCXJldHVybiAwOworCisJbWVtY3B5KGhkZXYtPmVpciwgY3AuZGF0YSwgc2l6ZW9mKGNwLmRhdGEpKTsKKworCXJldHVybiBoY2lfc2VuZF9jbWQoaGRldiwgSENJX09QX1dSSVRFX0VJUiwgc2l6ZW9mKGNwKSwgJmNwKTsKK30KKwogc3RhdGljIHU4IGdldF9zZXJ2aWNlX2NsYXNzZXMoc3RydWN0IGhjaV9kZXYgKmhkZXYpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqcDsKQEAgLTU5MCw3ICs3MzksNyBAQAogCWlmICghaGRldikKIAkJcmV0dXJuIGNtZF9zdGF0dXMoc2ssIGluZGV4LCBNR01UX09QX0FERF9VVUlELCBFTk9ERVYpOwogCi0JaGNpX2Rldl9sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfbG9jayhoZGV2KTsKIAogCXV1aWQgPSBrbWFsbG9jKHNpemVvZigqdXVpZCksIEdGUF9BVE9NSUMpOwogCWlmICghdXVpZCkgewpAQCAtNjA3LDEwICs3NTYsMTQgQEAKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBmYWlsZWQ7CiAKKwllcnIgPSB1cGRhdGVfZWlyKGhkZXYpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwogCWVyciA9IGNtZF9jb21wbGV0ZShzaywgaW5kZXgsIE1HTVRfT1BfQUREX1VVSUQsIE5VTEwsIDApOwogCiBmYWlsZWQ6Ci0JaGNpX2Rldl91bmxvY2tfYmgoaGRldik7CisJaGNpX2Rldl91bmxvY2soaGRldik7CiAJaGNpX2Rldl9wdXQoaGRldik7CiAKIAlyZXR1cm4gZXJyOwpAQCAtNjM1LDcgKzc4OCw3IEBACiAJaWYgKCFoZGV2KQogCQlyZXR1cm4gY21kX3N0YXR1cyhzaywgaW5kZXgsIE1HTVRfT1BfUkVNT1ZFX1VVSUQsIEVOT0RFVik7CiAKLQloY2lfZGV2X2xvY2tfYmgoaGRldik7CisJaGNpX2Rldl9sb2NrKGhkZXYpOwogCiAJaWYgKG1lbWNtcChjcC0+dXVpZCwgYnRfdXVpZF9hbnksIDE2KSA9PSAwKSB7CiAJCWVyciA9IGhjaV91dWlkc19jbGVhcihoZGV2KTsKQEAgLTY2MywxMCArODE2LDE0IEBACiAJaWYgKGVyciA8IDApCiAJCWdvdG8gdW5sb2NrOwogCisJZXJyID0gdXBkYXRlX2VpcihoZGV2KTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byB1bmxvY2s7CisKIAllcnIgPSBjbWRfY29tcGxldGUoc2ssIGluZGV4LCBNR01UX09QX1JFTU9WRV9VVUlELCBOVUxMLCAwKTsKIAogdW5sb2NrOgotCWhjaV9kZXZfdW5sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwogCWhjaV9kZXZfcHV0KGhkZXYpOwogCiAJcmV0dXJuIGVycjsKQEAgLTY5MCw3ICs4NDcsNyBAQAogCWlmICghaGRldikKIAkJcmV0dXJuIGNtZF9zdGF0dXMoc2ssIGluZGV4LCBNR01UX09QX1NFVF9ERVZfQ0xBU1MsIEVOT0RFVik7CiAKLQloY2lfZGV2X2xvY2tfYmgoaGRldik7CisJaGNpX2Rldl9sb2NrKGhkZXYpOwogCiAJaGRldi0+bWFqb3JfY2xhc3MgPSBjcC0+bWFqb3I7CiAJaGRldi0+bWlub3JfY2xhc3MgPSBjcC0+bWlub3I7CkBAIC03MDAsNyArODU3LDcgQEAKIAlpZiAoZXJyID09IDApCiAJCWVyciA9IGNtZF9jb21wbGV0ZShzaywgaW5kZXgsIE1HTVRfT1BfU0VUX0RFVl9DTEFTUywgTlVMTCwgMCk7CiAKLQloY2lfZGV2X3VubG9ja19iaChoZGV2KTsKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKIAloY2lfZGV2X3B1dChoZGV2KTsKIAogCXJldHVybiBlcnI7CkBAIC03MjIsNyArODc5LDcgQEAKIAlpZiAoIWhkZXYpCiAJCXJldHVybiBjbWRfc3RhdHVzKHNrLCBpbmRleCwgTUdNVF9PUF9TRVRfU0VSVklDRV9DQUNIRSwgRU5PREVWKTsKIAotCWhjaV9kZXZfbG9ja19iaChoZGV2KTsKKwloY2lfZGV2X2xvY2soaGRldik7CiAKIAlCVF9EQkcoImhjaSV1IGVuYWJsZSAlZCIsIGluZGV4LCBjcC0+ZW5hYmxlKTsKIApAQCAtNzMyLDEzICs4ODksMTUgQEAKIAl9IGVsc2UgewogCQljbGVhcl9iaXQoSENJX1NFUlZJQ0VfQ0FDSEUsICZoZGV2LT5mbGFncyk7CiAJCWVyciA9IHVwZGF0ZV9jbGFzcyhoZGV2KTsKKwkJaWYgKGVyciA9PSAwKQorCQkJZXJyID0gdXBkYXRlX2VpcihoZGV2KTsKIAl9CiAKIAlpZiAoZXJyID09IDApCiAJCWVyciA9IGNtZF9jb21wbGV0ZShzaywgaW5kZXgsIE1HTVRfT1BfU0VUX1NFUlZJQ0VfQ0FDSEUsIE5VTEwsCiAJCQkJCQkJCQkwKTsKIAotCWhjaV9kZXZfdW5sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwogCWhjaV9kZXZfcHV0KGhkZXYpOwogCiAJcmV0dXJuIGVycjsKQEAgLTc3Miw3ICs5MzEsNyBAQAogCUJUX0RCRygiaGNpJXUgZGVidWdfa2V5cyAldSBrZXlfY291bnQgJXUiLCBpbmRleCwgY3AtPmRlYnVnX2tleXMsCiAJCQkJCQkJCWtleV9jb3VudCk7CiAKLQloY2lfZGV2X2xvY2tfYmgoaGRldik7CisJaGNpX2Rldl9sb2NrKGhkZXYpOwogCiAJaGNpX2xpbmtfa2V5c19jbGVhcihoZGV2KTsKIApAQCAtNzg2LDExICs5NDUsMTEgQEAKIAlmb3IgKGkgPSAwOyBpIDwga2V5X2NvdW50OyBpKyspIHsKIAkJc3RydWN0IG1nbXRfa2V5X2luZm8gKmtleSA9ICZjcC0+a2V5c1tpXTsKIAotCQloY2lfYWRkX2xpbmtfa2V5KGhkZXYsIDAsICZrZXktPmJkYWRkciwga2V5LT52YWwsIGtleS0+dHlwZSwKKwkJaGNpX2FkZF9saW5rX2tleShoZGV2LCBOVUxMLCAwLCAma2V5LT5iZGFkZHIsIGtleS0+dmFsLCBrZXktPnR5cGUsCiAJCQkJCQkJCWtleS0+cGluX2xlbik7CiAJfQogCi0JaGNpX2Rldl91bmxvY2tfYmgoaGRldik7CisJaGNpX2Rldl91bmxvY2soaGRldik7CiAJaGNpX2Rldl9wdXQoaGRldik7CiAKIAlyZXR1cm4gMDsKQEAgLTgxMiw3ICs5NzEsNyBAQAogCWlmICghaGRldikKIAkJcmV0dXJuIGNtZF9zdGF0dXMoc2ssIGluZGV4LCBNR01UX09QX1JFTU9WRV9LRVksIEVOT0RFVik7CiAKLQloY2lfZGV2X2xvY2tfYmgoaGRldik7CisJaGNpX2Rldl9sb2NrKGhkZXYpOwogCiAJZXJyID0gaGNpX3JlbW92ZV9saW5rX2tleShoZGV2LCAmY3AtPmJkYWRkcik7CiAJaWYgKGVyciA8IDApIHsKQEAgLTgzNSw3ICs5OTQsNyBAQAogCX0KIAogdW5sb2NrOgotCWhjaV9kZXZfdW5sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwogCWhjaV9kZXZfcHV0KGhkZXYpOwogCiAJcmV0dXJuIGVycjsKQEAgLTg2MSw3ICsxMDIwLDcgQEAKIAlpZiAoIWhkZXYpCiAJCXJldHVybiBjbWRfc3RhdHVzKHNrLCBpbmRleCwgTUdNVF9PUF9ESVNDT05ORUNULCBFTk9ERVYpOwogCi0JaGNpX2Rldl9sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfbG9jayhoZGV2KTsKIAogCWlmICghdGVzdF9iaXQoSENJX1VQLCAmaGRldi0+ZmxhZ3MpKSB7CiAJCWVyciA9IGNtZF9zdGF0dXMoc2ssIGluZGV4LCBNR01UX09QX0RJU0NPTk5FQ1QsIEVORVRET1dOKTsKQEAgLTg3NCw2ICsxMDMzLDkgQEAKIAl9CiAKIAljb25uID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfYmEoaGRldiwgQUNMX0xJTkssICZjcC0+YmRhZGRyKTsKKwlpZiAoIWNvbm4pCisJCWNvbm4gPSBoY2lfY29ubl9oYXNoX2xvb2t1cF9iYShoZGV2LCBMRV9MSU5LLCAmY3AtPmJkYWRkcik7CisKIAlpZiAoIWNvbm4pIHsKIAkJZXJyID0gY21kX3N0YXR1cyhzaywgaW5kZXgsIE1HTVRfT1BfRElTQ09OTkVDVCwgRU5PVENPTk4pOwogCQlnb3RvIGZhaWxlZDsKQEAgLTg5Myw3ICsxMDU1LDcgQEAKIAkJbWdtdF9wZW5kaW5nX3JlbW92ZShjbWQpOwogCiBmYWlsZWQ6Ci0JaGNpX2Rldl91bmxvY2tfYmgoaGRldik7CisJaGNpX2Rldl91bmxvY2soaGRldik7CiAJaGNpX2Rldl9wdXQoaGRldik7CiAKIAlyZXR1cm4gZXJyOwpAQCAtOTE0LDcgKzEwNzYsNyBAQAogCWlmICghaGRldikKIAkJcmV0dXJuIGNtZF9zdGF0dXMoc2ssIGluZGV4LCBNR01UX09QX0dFVF9DT05ORUNUSU9OUywgRU5PREVWKTsKIAotCWhjaV9kZXZfbG9ja19iaChoZGV2KTsKKwloY2lfZGV2X2xvY2soaGRldik7CiAKIAljb3VudCA9IDA7CiAJbGlzdF9mb3JfZWFjaChwLCAmaGRldi0+Y29ubl9oYXNoLmxpc3QpIHsKQEAgLTk0NSw3ICsxMTA3LDcgQEAKIAogdW5sb2NrOgogCWtmcmVlKHJwKTsKLQloY2lfZGV2X3VubG9ja19iaChoZGV2KTsKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKIAloY2lfZGV2X3B1dChoZGV2KTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtOTcwLDcgKzExMzIsNyBAQAogCWlmICghaGRldikKIAkJcmV0dXJuIGNtZF9zdGF0dXMoc2ssIGluZGV4LCBNR01UX09QX1BJTl9DT0RFX1JFUExZLCBFTk9ERVYpOwogCi0JaGNpX2Rldl9sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfbG9jayhoZGV2KTsKIAogCWlmICghdGVzdF9iaXQoSENJX1VQLCAmaGRldi0+ZmxhZ3MpKSB7CiAJCWVyciA9IGNtZF9zdGF0dXMoc2ssIGluZGV4LCBNR01UX09QX1BJTl9DT0RFX1JFUExZLCBFTkVURE9XTik7CkBAIC05OTIsNyArMTE1NCw3IEBACiAJCW1nbXRfcGVuZGluZ19yZW1vdmUoY21kKTsKIAogZmFpbGVkOgotCWhjaV9kZXZfdW5sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwogCWhjaV9kZXZfcHV0KGhkZXYpOwogCiAJcmV0dXJuIGVycjsKQEAgLTEwMTksNyArMTE4MSw3IEBACiAJCXJldHVybiBjbWRfc3RhdHVzKHNrLCBpbmRleCwgTUdNVF9PUF9QSU5fQ09ERV9ORUdfUkVQTFksCiAJCQkJCQkJCQlFTk9ERVYpOwogCi0JaGNpX2Rldl9sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfbG9jayhoZGV2KTsKIAogCWlmICghdGVzdF9iaXQoSENJX1VQLCAmaGRldi0+ZmxhZ3MpKSB7CiAJCWVyciA9IGNtZF9zdGF0dXMoc2ssIGluZGV4LCBNR01UX09QX1BJTl9DT0RFX05FR19SRVBMWSwKQEAgLTEwNDAsNyArMTIwMiw3IEBACiAJCW1nbXRfcGVuZGluZ19yZW1vdmUoY21kKTsKIAogZmFpbGVkOgotCWhjaV9kZXZfdW5sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwogCWhjaV9kZXZfcHV0KGhkZXYpOwogCiAJcmV0dXJuIGVycjsKQEAgLTEwNjMsMTQgKzEyMjUsMTQgQEAKIAlpZiAoIWhkZXYpCiAJCXJldHVybiBjbWRfc3RhdHVzKHNrLCBpbmRleCwgTUdNVF9PUF9TRVRfSU9fQ0FQQUJJTElUWSwgRU5PREVWKTsKIAotCWhjaV9kZXZfbG9ja19iaChoZGV2KTsKKwloY2lfZGV2X2xvY2soaGRldik7CiAKIAloZGV2LT5pb19jYXBhYmlsaXR5ID0gY3AtPmlvX2NhcGFiaWxpdHk7CiAKIAlCVF9EQkcoIiVzIElPIGNhcGFiaWxpdHkgc2V0IHRvIDB4JTAyeCIsIGhkZXYtPm5hbWUsCiAJCQkJCQkJaGRldi0+aW9fY2FwYWJpbGl0eSk7CiAKLQloY2lfZGV2X3VubG9ja19iaChoZGV2KTsKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKIAloY2lfZGV2X3B1dChoZGV2KTsKIAogCXJldHVybiBjbWRfY29tcGxldGUoc2ssIGluZGV4LCBNR01UX09QX1NFVF9JT19DQVBBQklMSVRZLCBOVUxMLCAwKTsKQEAgLTExNTYsNyArMTMxOCw3IEBACiAJaWYgKCFoZGV2KQogCQlyZXR1cm4gY21kX3N0YXR1cyhzaywgaW5kZXgsIE1HTVRfT1BfUEFJUl9ERVZJQ0UsIEVOT0RFVik7CiAKLQloY2lfZGV2X2xvY2tfYmgoaGRldik7CisJaGNpX2Rldl9sb2NrKGhkZXYpOwogCiAJaWYgKGNwLT5pb19jYXAgPT0gMHgwMykgewogCQlzZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9NRURJVU07CkBAIC0xMTk4LDcgKzEzNjAsNyBAQAogCWVyciA9IDA7CiAKIHVubG9jazoKLQloY2lfZGV2X3VubG9ja19iaChoZGV2KTsKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKIAloY2lfZGV2X3B1dChoZGV2KTsKIAogCXJldHVybiBlcnI7CkBAIC0xMjMwLDcgKzEzOTIsNyBAQAogCWlmICghaGRldikKIAkJcmV0dXJuIGNtZF9zdGF0dXMoc2ssIGluZGV4LCBtZ210X29wLCBFTk9ERVYpOwogCi0JaGNpX2Rldl9sb2NrX2JoKGhkZXYpOworCWhjaV9kZXZfbG9jayhoZGV2KTsKIAogCWlmICghdGVzdF9iaXQoSENJX1VQLCAmaGRldi0+ZmxhZ3MpKSB7CiAJCWVyciA9IGNtZF9zdGF0dXMoc2ssIGluZGV4LCBtZ210X29wLCBFTkVURE9XTik7CkBAIC0xMjQ4LDYgKzE0MTAsMjMxIEBACiAJCW1nbXRfcGVuZGluZ19yZW1vdmUoY21kKTsKIAogZmFpbGVkOgorCWhjaV9kZXZfdW5sb2NrKGhkZXYpOworCWhjaV9kZXZfcHV0KGhkZXYpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzZXRfbG9jYWxfbmFtZShzdHJ1Y3Qgc29jayAqc2ssIHUxNiBpbmRleCwgdW5zaWduZWQgY2hhciAqZGF0YSwKKwkJCQkJCQkJdTE2IGxlbikKK3sKKwlzdHJ1Y3QgbWdtdF9jcF9zZXRfbG9jYWxfbmFtZSAqbWdtdF9jcCA9ICh2b2lkICopIGRhdGE7CisJc3RydWN0IGhjaV9jcF93cml0ZV9sb2NhbF9uYW1lIGhjaV9jcDsKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldjsKKwlzdHJ1Y3QgcGVuZGluZ19jbWQgKmNtZDsKKwlpbnQgZXJyOworCisJQlRfREJHKCIiKTsKKworCWlmIChsZW4gIT0gc2l6ZW9mKCptZ210X2NwKSkKKwkJcmV0dXJuIGNtZF9zdGF0dXMoc2ssIGluZGV4LCBNR01UX09QX1NFVF9MT0NBTF9OQU1FLCBFSU5WQUwpOworCisJaGRldiA9IGhjaV9kZXZfZ2V0KGluZGV4KTsKKwlpZiAoIWhkZXYpCisJCXJldHVybiBjbWRfc3RhdHVzKHNrLCBpbmRleCwgTUdNVF9PUF9TRVRfTE9DQUxfTkFNRSwgRU5PREVWKTsKKworCWhjaV9kZXZfbG9jayhoZGV2KTsKKworCWNtZCA9IG1nbXRfcGVuZGluZ19hZGQoc2ssIE1HTVRfT1BfU0VUX0xPQ0FMX05BTUUsIGluZGV4LCBkYXRhLCBsZW4pOworCWlmICghY21kKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbGVkOworCX0KKworCW1lbWNweShoY2lfY3AubmFtZSwgbWdtdF9jcC0+bmFtZSwgc2l6ZW9mKGhjaV9jcC5uYW1lKSk7CisJZXJyID0gaGNpX3NlbmRfY21kKGhkZXYsIEhDSV9PUF9XUklURV9MT0NBTF9OQU1FLCBzaXplb2YoaGNpX2NwKSwKKwkJCQkJCQkJJmhjaV9jcCk7CisJaWYgKGVyciA8IDApCisJCW1nbXRfcGVuZGluZ19yZW1vdmUoY21kKTsKKworZmFpbGVkOgorCWhjaV9kZXZfdW5sb2NrKGhkZXYpOworCWhjaV9kZXZfcHV0KGhkZXYpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCByZWFkX2xvY2FsX29vYl9kYXRhKHN0cnVjdCBzb2NrICpzaywgdTE2IGluZGV4KQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2OworCXN0cnVjdCBwZW5kaW5nX2NtZCAqY21kOworCWludCBlcnI7CisKKwlCVF9EQkcoImhjaSV1IiwgaW5kZXgpOworCisJaGRldiA9IGhjaV9kZXZfZ2V0KGluZGV4KTsKKwlpZiAoIWhkZXYpCisJCXJldHVybiBjbWRfc3RhdHVzKHNrLCBpbmRleCwgTUdNVF9PUF9SRUFEX0xPQ0FMX09PQl9EQVRBLAorCQkJCQkJCQkJRU5PREVWKTsKKworCWhjaV9kZXZfbG9jayhoZGV2KTsKKworCWlmICghdGVzdF9iaXQoSENJX1VQLCAmaGRldi0+ZmxhZ3MpKSB7CisJCWVyciA9IGNtZF9zdGF0dXMoc2ssIGluZGV4LCBNR01UX09QX1JFQURfTE9DQUxfT09CX0RBVEEsCisJCQkJCQkJCUVORVRET1dOKTsKKwkJZ290byB1bmxvY2s7CisJfQorCisJaWYgKCEoaGRldi0+ZmVhdHVyZXNbNl0gJiBMTVBfU0lNUExFX1BBSVIpKSB7CisJCWVyciA9IGNtZF9zdGF0dXMoc2ssIGluZGV4LCBNR01UX09QX1JFQURfTE9DQUxfT09CX0RBVEEsCisJCQkJCQkJCUVPUE5PVFNVUFApOworCQlnb3RvIHVubG9jazsKKwl9CisKKwlpZiAobWdtdF9wZW5kaW5nX2ZpbmQoTUdNVF9PUF9SRUFEX0xPQ0FMX09PQl9EQVRBLCBpbmRleCkpIHsKKwkJZXJyID0gY21kX3N0YXR1cyhzaywgaW5kZXgsIE1HTVRfT1BfUkVBRF9MT0NBTF9PT0JfREFUQSwgRUJVU1kpOworCQlnb3RvIHVubG9jazsKKwl9CisKKwljbWQgPSBtZ210X3BlbmRpbmdfYWRkKHNrLCBNR01UX09QX1JFQURfTE9DQUxfT09CX0RBVEEsIGluZGV4LCBOVUxMLCAwKTsKKwlpZiAoIWNtZCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIHVubG9jazsKKwl9CisKKwllcnIgPSBoY2lfc2VuZF9jbWQoaGRldiwgSENJX09QX1JFQURfTE9DQUxfT09CX0RBVEEsIDAsIE5VTEwpOworCWlmIChlcnIgPCAwKQorCQltZ210X3BlbmRpbmdfcmVtb3ZlKGNtZCk7CisKK3VubG9jazoKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKKwloY2lfZGV2X3B1dChoZGV2KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgYWRkX3JlbW90ZV9vb2JfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHUxNiBpbmRleCwgdW5zaWduZWQgY2hhciAqZGF0YSwKKwkJCQkJCQkJCXUxNiBsZW4pCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXY7CisJc3RydWN0IG1nbXRfY3BfYWRkX3JlbW90ZV9vb2JfZGF0YSAqY3AgPSAodm9pZCAqKSBkYXRhOworCWludCBlcnI7CisKKwlCVF9EQkcoImhjaSV1ICIsIGluZGV4KTsKKworCWlmIChsZW4gIT0gc2l6ZW9mKCpjcCkpCisJCXJldHVybiBjbWRfc3RhdHVzKHNrLCBpbmRleCwgTUdNVF9PUF9BRERfUkVNT1RFX09PQl9EQVRBLAorCQkJCQkJCQkJRUlOVkFMKTsKKworCWhkZXYgPSBoY2lfZGV2X2dldChpbmRleCk7CisJaWYgKCFoZGV2KQorCQlyZXR1cm4gY21kX3N0YXR1cyhzaywgaW5kZXgsIE1HTVRfT1BfQUREX1JFTU9URV9PT0JfREFUQSwKKwkJCQkJCQkJCUVOT0RFVik7CisKKwloY2lfZGV2X2xvY2soaGRldik7CisKKwllcnIgPSBoY2lfYWRkX3JlbW90ZV9vb2JfZGF0YShoZGV2LCAmY3AtPmJkYWRkciwgY3AtPmhhc2gsCisJCQkJCQkJCWNwLT5yYW5kb21pemVyKTsKKwlpZiAoZXJyIDwgMCkKKwkJZXJyID0gY21kX3N0YXR1cyhzaywgaW5kZXgsIE1HTVRfT1BfQUREX1JFTU9URV9PT0JfREFUQSwgLWVycik7CisJZWxzZQorCQllcnIgPSBjbWRfY29tcGxldGUoc2ssIGluZGV4LCBNR01UX09QX0FERF9SRU1PVEVfT09CX0RBVEEsIE5VTEwsCisJCQkJCQkJCQkwKTsKKworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOworCWhjaV9kZXZfcHV0KGhkZXYpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCByZW1vdmVfcmVtb3RlX29vYl9kYXRhKHN0cnVjdCBzb2NrICpzaywgdTE2IGluZGV4LAorCQkJCQkJdW5zaWduZWQgY2hhciAqZGF0YSwgdTE2IGxlbikKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldjsKKwlzdHJ1Y3QgbWdtdF9jcF9yZW1vdmVfcmVtb3RlX29vYl9kYXRhICpjcCA9ICh2b2lkICopIGRhdGE7CisJaW50IGVycjsKKworCUJUX0RCRygiaGNpJXUgIiwgaW5kZXgpOworCisJaWYgKGxlbiAhPSBzaXplb2YoKmNwKSkKKwkJcmV0dXJuIGNtZF9zdGF0dXMoc2ssIGluZGV4LCBNR01UX09QX1JFTU9WRV9SRU1PVEVfT09CX0RBVEEsCisJCQkJCQkJCQlFSU5WQUwpOworCisJaGRldiA9IGhjaV9kZXZfZ2V0KGluZGV4KTsKKwlpZiAoIWhkZXYpCisJCXJldHVybiBjbWRfc3RhdHVzKHNrLCBpbmRleCwgTUdNVF9PUF9SRU1PVkVfUkVNT1RFX09PQl9EQVRBLAorCQkJCQkJCQkJRU5PREVWKTsKKworCWhjaV9kZXZfbG9jayhoZGV2KTsKKworCWVyciA9IGhjaV9yZW1vdmVfcmVtb3RlX29vYl9kYXRhKGhkZXYsICZjcC0+YmRhZGRyKTsKKwlpZiAoZXJyIDwgMCkKKwkJZXJyID0gY21kX3N0YXR1cyhzaywgaW5kZXgsIE1HTVRfT1BfUkVNT1ZFX1JFTU9URV9PT0JfREFUQSwKKwkJCQkJCQkJCS1lcnIpOworCWVsc2UKKwkJZXJyID0gY21kX2NvbXBsZXRlKHNrLCBpbmRleCwgTUdNVF9PUF9SRU1PVkVfUkVNT1RFX09PQl9EQVRBLAorCQkJCQkJCQlOVUxMLCAwKTsKKworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOworCWhjaV9kZXZfcHV0KGhkZXYpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzdGFydF9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCB1MTYgaW5kZXgpCit7CisJdTggbGFwWzNdID0geyAweDMzLCAweDhiLCAweDllIH07CisJc3RydWN0IGhjaV9jcF9pbnF1aXJ5IGNwOworCXN0cnVjdCBwZW5kaW5nX2NtZCAqY21kOworCXN0cnVjdCBoY2lfZGV2ICpoZGV2OworCWludCBlcnI7CisKKwlCVF9EQkcoImhjaSV1IiwgaW5kZXgpOworCisJaGRldiA9IGhjaV9kZXZfZ2V0KGluZGV4KTsKKwlpZiAoIWhkZXYpCisJCXJldHVybiBjbWRfc3RhdHVzKHNrLCBpbmRleCwgTUdNVF9PUF9TVEFSVF9ESVNDT1ZFUlksIEVOT0RFVik7CisKKwloY2lfZGV2X2xvY2tfYmgoaGRldik7CisKKwljbWQgPSBtZ210X3BlbmRpbmdfYWRkKHNrLCBNR01UX09QX1NUQVJUX0RJU0NPVkVSWSwgaW5kZXgsIE5VTEwsIDApOworCWlmICghY21kKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbGVkOworCX0KKworCW1lbXNldCgmY3AsIDAsIHNpemVvZihjcCkpOworCW1lbWNweSgmY3AubGFwLCBsYXAsIDMpOworCWNwLmxlbmd0aCAgPSAweDA4OworCWNwLm51bV9yc3AgPSAweDAwOworCisJZXJyID0gaGNpX3NlbmRfY21kKGhkZXYsIEhDSV9PUF9JTlFVSVJZLCBzaXplb2YoY3ApLCAmY3ApOworCWlmIChlcnIgPCAwKQorCQltZ210X3BlbmRpbmdfcmVtb3ZlKGNtZCk7CisKK2ZhaWxlZDoKKwloY2lfZGV2X3VubG9ja19iaChoZGV2KTsKKwloY2lfZGV2X3B1dChoZGV2KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgc3RvcF9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCB1MTYgaW5kZXgpCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXY7CisJc3RydWN0IHBlbmRpbmdfY21kICpjbWQ7CisJaW50IGVycjsKKworCUJUX0RCRygiaGNpJXUiLCBpbmRleCk7CisKKwloZGV2ID0gaGNpX2Rldl9nZXQoaW5kZXgpOworCWlmICghaGRldikKKwkJcmV0dXJuIGNtZF9zdGF0dXMoc2ssIGluZGV4LCBNR01UX09QX1NUT1BfRElTQ09WRVJZLCBFTk9ERVYpOworCisJaGNpX2Rldl9sb2NrX2JoKGhkZXYpOworCisJY21kID0gbWdtdF9wZW5kaW5nX2FkZChzaywgTUdNVF9PUF9TVE9QX0RJU0NPVkVSWSwgaW5kZXgsIE5VTEwsIDApOworCWlmICghY21kKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbGVkOworCX0KKworCWVyciA9IGhjaV9zZW5kX2NtZChoZGV2LCBIQ0lfT1BfSU5RVUlSWV9DQU5DRUwsIDAsIE5VTEwpOworCWlmIChlcnIgPCAwKQorCQltZ210X3BlbmRpbmdfcmVtb3ZlKGNtZCk7CisKK2ZhaWxlZDoKIAloY2lfZGV2X3VubG9ja19iaChoZGV2KTsKIAloY2lfZGV2X3B1dChoZGV2KTsKIApAQCAtMTI2Niw3ICsxNjUzLDcgQEAKIAlpZiAobXNnbGVuIDwgc2l6ZW9mKCpoZHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWJ1ZiA9IGttYWxsb2MobXNnbGVuLCBHRlBfQVRPTUlDKTsKKwlidWYgPSBrbWFsbG9jKG1zZ2xlbiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xMzQ5LDYgKzE3MzYsMjUgQEAKIAljYXNlIE1HTVRfT1BfVVNFUl9DT05GSVJNX05FR19SRVBMWToKIAkJZXJyID0gdXNlcl9jb25maXJtX3JlcGx5KHNrLCBpbmRleCwgYnVmICsgc2l6ZW9mKCpoZHIpLCBsZW4sIDApOwogCQlicmVhazsKKwljYXNlIE1HTVRfT1BfU0VUX0xPQ0FMX05BTUU6CisJCWVyciA9IHNldF9sb2NhbF9uYW1lKHNrLCBpbmRleCwgYnVmICsgc2l6ZW9mKCpoZHIpLCBsZW4pOworCQlicmVhazsKKwljYXNlIE1HTVRfT1BfUkVBRF9MT0NBTF9PT0JfREFUQToKKwkJZXJyID0gcmVhZF9sb2NhbF9vb2JfZGF0YShzaywgaW5kZXgpOworCQlicmVhazsKKwljYXNlIE1HTVRfT1BfQUREX1JFTU9URV9PT0JfREFUQToKKwkJZXJyID0gYWRkX3JlbW90ZV9vb2JfZGF0YShzaywgaW5kZXgsIGJ1ZiArIHNpemVvZigqaGRyKSwgbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBNR01UX09QX1JFTU9WRV9SRU1PVEVfT09CX0RBVEE6CisJCWVyciA9IHJlbW92ZV9yZW1vdGVfb29iX2RhdGEoc2ssIGluZGV4LCBidWYgKyBzaXplb2YoKmhkciksCisJCQkJCQkJCQlsZW4pOworCQlicmVhazsKKwljYXNlIE1HTVRfT1BfU1RBUlRfRElTQ09WRVJZOgorCQllcnIgPSBzdGFydF9kaXNjb3Zlcnkoc2ssIGluZGV4KTsKKwkJYnJlYWs7CisJY2FzZSBNR01UX09QX1NUT1BfRElTQ09WRVJZOgorCQllcnIgPSBzdG9wX2Rpc2NvdmVyeShzaywgaW5kZXgpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlCVF9EQkcoIlVua25vd24gb3AgJXUiLCBvcGNvZGUpOwogCQllcnIgPSBjbWRfc3RhdHVzKHNrLCBpbmRleCwgb3Bjb2RlLCAweDAxKTsKQEAgLTEzODIsNyArMTc4OCw3IEBACiAKIHN0YXRpYyB2b2lkIG1vZGVfcnNwKHN0cnVjdCBwZW5kaW5nX2NtZCAqY21kLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBtZ210X21vZGUgKmNwID0gY21kLT5jbWQ7CisJc3RydWN0IG1nbXRfbW9kZSAqY3AgPSBjbWQtPnBhcmFtOwogCXN0cnVjdCBjbWRfbG9va3VwICptYXRjaCA9IGRhdGE7CiAKIAlpZiAoY3AtPnZhbCAhPSBtYXRjaC0+dmFsKQpAQCAtMTQ1NSwxNyArMTg2MSwxNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBtZ210X25ld19rZXkodTE2IGluZGV4LCBzdHJ1Y3QgbGlua19rZXkgKmtleSwgdTggb2xkX2tleV90eXBlKQoraW50IG1nbXRfbmV3X2tleSh1MTYgaW5kZXgsIHN0cnVjdCBsaW5rX2tleSAqa2V5LCB1OCBwZXJzaXN0ZW50KQogewogCXN0cnVjdCBtZ210X2V2X25ld19rZXkgZXY7CiAKIAltZW1zZXQoJmV2LCAwLCBzaXplb2YoZXYpKTsKIAorCWV2LnN0b3JlX2hpbnQgPSBwZXJzaXN0ZW50OwogCWJhY3B5KCZldi5rZXkuYmRhZGRyLCAma2V5LT5iZGFkZHIpOwogCWV2LmtleS50eXBlID0ga2V5LT50eXBlOwogCW1lbWNweShldi5rZXkudmFsLCBrZXktPnZhbCwgMTYpOwogCWV2LmtleS5waW5fbGVuID0ga2V5LT5waW5fbGVuOwotCWV2Lm9sZF9rZXlfdHlwZSA9IG9sZF9rZXlfdHlwZTsKIAogCXJldHVybiBtZ210X2V2ZW50KE1HTVRfRVZfTkVXX0tFWSwgaW5kZXgsICZldiwgc2l6ZW9mKGV2KSwgTlVMTCk7CiB9CkBAIC0xNDgxLDcgKzE4ODcsNyBAQAogCiBzdGF0aWMgdm9pZCBkaXNjb25uZWN0X3JzcChzdHJ1Y3QgcGVuZGluZ19jbWQgKmNtZCwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgbWdtdF9jcF9kaXNjb25uZWN0ICpjcCA9IGNtZC0+Y21kOworCXN0cnVjdCBtZ210X2NwX2Rpc2Nvbm5lY3QgKmNwID0gY21kLT5wYXJhbTsKIAlzdHJ1Y3Qgc29jayAqKnNrID0gZGF0YTsKIAlzdHJ1Y3QgbWdtdF9ycF9kaXNjb25uZWN0IHJwOwogCkBAIC0xNTM5LDExICsxOTQ1LDEyIEBACiAJcmV0dXJuIG1nbXRfZXZlbnQoTUdNVF9FVl9DT05ORUNUX0ZBSUxFRCwgaW5kZXgsICZldiwgc2l6ZW9mKGV2KSwgTlVMTCk7CiB9CiAKLWludCBtZ210X3Bpbl9jb2RlX3JlcXVlc3QodTE2IGluZGV4LCBiZGFkZHJfdCAqYmRhZGRyKQoraW50IG1nbXRfcGluX2NvZGVfcmVxdWVzdCh1MTYgaW5kZXgsIGJkYWRkcl90ICpiZGFkZHIsIHU4IHNlY3VyZSkKIHsKIAlzdHJ1Y3QgbWdtdF9ldl9waW5fY29kZV9yZXF1ZXN0IGV2OwogCiAJYmFjcHkoJmV2LmJkYWRkciwgYmRhZGRyKTsKKwlldi5zZWN1cmUgPSBzZWN1cmU7CiAKIAlyZXR1cm4gbWdtdF9ldmVudChNR01UX0VWX1BJTl9DT0RFX1JFUVVFU1QsIGluZGV4LCAmZXYsIHNpemVvZihldiksCiAJCQkJCQkJCQlOVUxMKTsKQEAgLTE1OTEsMTMgKzE5OTgsMTUgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1pbnQgbWdtdF91c2VyX2NvbmZpcm1fcmVxdWVzdCh1MTYgaW5kZXgsIGJkYWRkcl90ICpiZGFkZHIsIF9fbGUzMiB2YWx1ZSkKK2ludCBtZ210X3VzZXJfY29uZmlybV9yZXF1ZXN0KHUxNiBpbmRleCwgYmRhZGRyX3QgKmJkYWRkciwgX19sZTMyIHZhbHVlLAorCQkJCQkJCXU4IGNvbmZpcm1faGludCkKIHsKIAlzdHJ1Y3QgbWdtdF9ldl91c2VyX2NvbmZpcm1fcmVxdWVzdCBldjsKIAogCUJUX0RCRygiaGNpJXUiLCBpbmRleCk7CiAKIAliYWNweSgmZXYuYmRhZGRyLCBiZGFkZHIpOworCWV2LmNvbmZpcm1faGludCA9IGNvbmZpcm1faGludDsKIAlwdXRfdW5hbGlnbmVkX2xlMzIodmFsdWUsICZldi52YWx1ZSk7CiAKIAlyZXR1cm4gbWdtdF9ldmVudChNR01UX0VWX1VTRVJfQ09ORklSTV9SRVFVRVNULCBpbmRleCwgJmV2LCBzaXplb2YoZXYpLApAQCAtMTY0NSwzICsyMDU0LDExMCBAQAogCiAJcmV0dXJuIG1nbXRfZXZlbnQoTUdNVF9FVl9BVVRIX0ZBSUxFRCwgaW5kZXgsICZldiwgc2l6ZW9mKGV2KSwgTlVMTCk7CiB9CisKK2ludCBtZ210X3NldF9sb2NhbF9uYW1lX2NvbXBsZXRlKHUxNiBpbmRleCwgdTggKm5hbWUsIHU4IHN0YXR1cykKK3sKKwlzdHJ1Y3QgcGVuZGluZ19jbWQgKmNtZDsKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldjsKKwlzdHJ1Y3QgbWdtdF9jcF9zZXRfbG9jYWxfbmFtZSBldjsKKwlpbnQgZXJyOworCisJbWVtc2V0KCZldiwgMCwgc2l6ZW9mKGV2KSk7CisJbWVtY3B5KGV2Lm5hbWUsIG5hbWUsIEhDSV9NQVhfTkFNRV9MRU5HVEgpOworCisJY21kID0gbWdtdF9wZW5kaW5nX2ZpbmQoTUdNVF9PUF9TRVRfTE9DQUxfTkFNRSwgaW5kZXgpOworCWlmICghY21kKQorCQlnb3RvIHNlbmRfZXZlbnQ7CisKKwlpZiAoc3RhdHVzKSB7CisJCWVyciA9IGNtZF9zdGF0dXMoY21kLT5zaywgaW5kZXgsIE1HTVRfT1BfU0VUX0xPQ0FMX05BTUUsIEVJTyk7CisJCWdvdG8gZmFpbGVkOworCX0KKworCWhkZXYgPSBoY2lfZGV2X2dldChpbmRleCk7CisJaWYgKGhkZXYpIHsKKwkJaGNpX2Rldl9sb2NrX2JoKGhkZXYpOworCQl1cGRhdGVfZWlyKGhkZXYpOworCQloY2lfZGV2X3VubG9ja19iaChoZGV2KTsKKwkJaGNpX2Rldl9wdXQoaGRldik7CisJfQorCisJZXJyID0gY21kX2NvbXBsZXRlKGNtZC0+c2ssIGluZGV4LCBNR01UX09QX1NFVF9MT0NBTF9OQU1FLCAmZXYsCisJCQkJCQkJCXNpemVvZihldikpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGZhaWxlZDsKKworc2VuZF9ldmVudDoKKwllcnIgPSBtZ210X2V2ZW50KE1HTVRfRVZfTE9DQUxfTkFNRV9DSEFOR0VELCBpbmRleCwgJmV2LCBzaXplb2YoZXYpLAorCQkJCQkJCWNtZCA/IGNtZC0+c2sgOiBOVUxMKTsKKworZmFpbGVkOgorCWlmIChjbWQpCisJCW1nbXRfcGVuZGluZ19yZW1vdmUoY21kKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgbWdtdF9yZWFkX2xvY2FsX29vYl9kYXRhX3JlcGx5X2NvbXBsZXRlKHUxNiBpbmRleCwgdTggKmhhc2gsIHU4ICpyYW5kb21pemVyLAorCQkJCQkJCQl1OCBzdGF0dXMpCit7CisJc3RydWN0IHBlbmRpbmdfY21kICpjbWQ7CisJaW50IGVycjsKKworCUJUX0RCRygiaGNpJXUgc3RhdHVzICV1IiwgaW5kZXgsIHN0YXR1cyk7CisKKwljbWQgPSBtZ210X3BlbmRpbmdfZmluZChNR01UX09QX1JFQURfTE9DQUxfT09CX0RBVEEsIGluZGV4KTsKKwlpZiAoIWNtZCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlpZiAoc3RhdHVzKSB7CisJCWVyciA9IGNtZF9zdGF0dXMoY21kLT5zaywgaW5kZXgsIE1HTVRfT1BfUkVBRF9MT0NBTF9PT0JfREFUQSwKKwkJCQkJCQkJCUVJTyk7CisJfSBlbHNlIHsKKwkJc3RydWN0IG1nbXRfcnBfcmVhZF9sb2NhbF9vb2JfZGF0YSBycDsKKworCQltZW1jcHkocnAuaGFzaCwgaGFzaCwgc2l6ZW9mKHJwLmhhc2gpKTsKKwkJbWVtY3B5KHJwLnJhbmRvbWl6ZXIsIHJhbmRvbWl6ZXIsIHNpemVvZihycC5yYW5kb21pemVyKSk7CisKKwkJZXJyID0gY21kX2NvbXBsZXRlKGNtZC0+c2ssIGluZGV4LCBNR01UX09QX1JFQURfTE9DQUxfT09CX0RBVEEsCisJCQkJCQkJJnJwLCBzaXplb2YocnApKTsKKwl9CisKKwltZ210X3BlbmRpbmdfcmVtb3ZlKGNtZCk7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgbWdtdF9kZXZpY2VfZm91bmQodTE2IGluZGV4LCBiZGFkZHJfdCAqYmRhZGRyLCB1OCAqZGV2X2NsYXNzLCBzOCByc3NpLAorCQkJCQkJCQl1OCAqZWlyKQoreworCXN0cnVjdCBtZ210X2V2X2RldmljZV9mb3VuZCBldjsKKworCW1lbXNldCgmZXYsIDAsIHNpemVvZihldikpOworCisJYmFjcHkoJmV2LmJkYWRkciwgYmRhZGRyKTsKKwltZW1jcHkoZXYuZGV2X2NsYXNzLCBkZXZfY2xhc3MsIHNpemVvZihldi5kZXZfY2xhc3MpKTsKKwlldi5yc3NpID0gcnNzaTsKKworCWlmIChlaXIpCisJCW1lbWNweShldi5laXIsIGVpciwgc2l6ZW9mKGV2LmVpcikpOworCisJcmV0dXJuIG1nbXRfZXZlbnQoTUdNVF9FVl9ERVZJQ0VfRk9VTkQsIGluZGV4LCAmZXYsIHNpemVvZihldiksIE5VTEwpOworfQorCitpbnQgbWdtdF9yZW1vdGVfbmFtZSh1MTYgaW5kZXgsIGJkYWRkcl90ICpiZGFkZHIsIHU4ICpuYW1lKQoreworCXN0cnVjdCBtZ210X2V2X3JlbW90ZV9uYW1lIGV2OworCisJbWVtc2V0KCZldiwgMCwgc2l6ZW9mKGV2KSk7CisKKwliYWNweSgmZXYuYmRhZGRyLCBiZGFkZHIpOworCW1lbWNweShldi5uYW1lLCBuYW1lLCBIQ0lfTUFYX05BTUVfTEVOR1RIKTsKKworCXJldHVybiBtZ210X2V2ZW50KE1HTVRfRVZfUkVNT1RFX05BTUUsIGluZGV4LCAmZXYsIHNpemVvZihldiksIE5VTEwpOworfQorCitpbnQgbWdtdF9kaXNjb3ZlcmluZyh1MTYgaW5kZXgsIHU4IGRpc2NvdmVyaW5nKQoreworCXJldHVybiBtZ210X2V2ZW50KE1HTVRfRVZfRElTQ09WRVJJTkcsIGluZGV4LCAmZGlzY292ZXJpbmcsCisJCQkJCQlzaXplb2YoZGlzY292ZXJpbmcpLCBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYyBiL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYwppbmRleCBjOTk3MzkzLi41NzU5YmI3IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCkBAIC0yMzIsNiArMjMyLDggQEAKIHN0YXRpYyBpbmxpbmUgaW50IHJmY29tbV9jaGVja19zZWN1cml0eShzdHJ1Y3QgcmZjb21tX2RsYyAqZCkKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBkLT5zZXNzaW9uLT5zb2NrLT5zazsKKwlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y2hhbi0+Y29ubjsKKwogCV9fdTggYXV0aF90eXBlOwogCiAJc3dpdGNoIChkLT5zZWNfbGV2ZWwpIHsKQEAgLTI0Niw4ICsyNDgsNyBAQAogCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gaGNpX2Nvbm5fc2VjdXJpdHkobDJjYXBfcGkoc2spLT5jb25uLT5oY29uLCBkLT5zZWNfbGV2ZWwsCi0JCQkJCQkJCWF1dGhfdHlwZSk7CisJcmV0dXJuIGhjaV9jb25uX3NlY3VyaXR5KGNvbm4tPmhjb24sIGQtPnNlY19sZXZlbCwgYXV0aF90eXBlKTsKIH0KIAogc3RhdGljIHZvaWQgcmZjb21tX3Nlc3Npb25fdGltZW91dCh1bnNpZ25lZCBsb25nIGFyZykKQEAgLTcxMCwxMCArNzExLDEwIEBACiAJLyogU2V0IEwyQ0FQIG9wdGlvbnMgKi8KIAlzayA9IHNvY2stPnNrOwogCWxvY2tfc29jayhzayk7Ci0JbDJjYXBfcGkoc2spLT5pbXR1ID0gbDJjYXBfbXR1OwotCWwyY2FwX3BpKHNrKS0+c2VjX2xldmVsID0gc2VjX2xldmVsOworCWwyY2FwX3BpKHNrKS0+Y2hhbi0+aW10dSA9IGwyY2FwX210dTsKKwlsMmNhcF9waShzayktPmNoYW4tPnNlY19sZXZlbCA9IHNlY19sZXZlbDsKIAlpZiAobDJjYXBfZXJ0bSkKLQkJbDJjYXBfcGkoc2spLT5tb2RlID0gTDJDQVBfTU9ERV9FUlRNOworCQlsMmNhcF9waShzayktPmNoYW4tPm1vZGUgPSBMMkNBUF9NT0RFX0VSVE07CiAJcmVsZWFzZV9zb2NrKHNrKTsKIAogCXMgPSByZmNvbW1fc2Vzc2lvbl9hZGQoc29jaywgQlRfQk9VTkQpOwpAQCAtMTI0MSw2ICsxMjQyLDcgQEAKIHZvaWQgcmZjb21tX2RsY19hY2NlcHQoc3RydWN0IHJmY29tbV9kbGMgKmQpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gZC0+c2Vzc2lvbi0+c29jay0+c2s7CisJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNoYW4tPmNvbm47CiAKIAlCVF9EQkcoImRsYyAlcCIsIGQpOwogCkBAIC0xMjU0LDcgKzEyNTYsNyBAQAogCXJmY29tbV9kbGNfdW5sb2NrKGQpOwogCiAJaWYgKGQtPnJvbGVfc3dpdGNoKQotCQloY2lfY29ubl9zd2l0Y2hfcm9sZShsMmNhcF9waShzayktPmNvbm4tPmhjb24sIDB4MDApOworCQloY2lfY29ubl9zd2l0Y2hfcm9sZShjb25uLT5oY29uLCAweDAwKTsKIAogCXJmY29tbV9zZW5kX21zYyhkLT5zZXNzaW9uLCAxLCBkLT5kbGNpLCBkLT52MjRfc2lnKTsKIH0KQEAgLTE4OTAsNyArMTg5Miw4IEBACiAKIAkJLyogV2Ugc2hvdWxkIGFkanVzdCBNVFUgb24gaW5jb21pbmcgc2Vzc2lvbnMuCiAJCSAqIEwyQ0FQIE1UVSBtaW51cyBVSUggaGVhZGVyIGFuZCBGQ1MuICovCi0JCXMtPm10dSA9IG1pbihsMmNhcF9waShuc29jay0+c2spLT5vbXR1LCBsMmNhcF9waShuc29jay0+c2spLT5pbXR1KSAtIDU7CisJCXMtPm10dSA9IG1pbihsMmNhcF9waShuc29jay0+c2spLT5jaGFuLT5vbXR1LAorCQkJCWwyY2FwX3BpKG5zb2NrLT5zayktPmNoYW4tPmltdHUpIC0gNTsKIAogCQlyZmNvbW1fc2NoZWR1bGUoKTsKIAl9IGVsc2UKQEAgLTE5MDksNyArMTkxMiw3IEBACiAKIAkJLyogV2UgY2FuIGFkanVzdCBNVFUgb24gb3V0Z29pbmcgc2Vzc2lvbnMuCiAJCSAqIEwyQ0FQIE1UVSBtaW51cyBVSUggaGVhZGVyIGFuZCBGQ1MuICovCi0JCXMtPm10dSA9IG1pbihsMmNhcF9waShzayktPm9tdHUsIGwyY2FwX3BpKHNrKS0+aW10dSkgLSA1OworCQlzLT5tdHUgPSBtaW4obDJjYXBfcGkoc2spLT5jaGFuLT5vbXR1LCBsMmNhcF9waShzayktPmNoYW4tPmltdHUpIC0gNTsKIAogCQlyZmNvbW1fc2VuZF9zYWJtKHMsIDApOwogCQlicmVhazsKQEAgLTE5OTIsNyArMTk5NSw3IEBACiAJLyogU2V0IEwyQ0FQIG9wdGlvbnMgKi8KIAlzayA9IHNvY2stPnNrOwogCWxvY2tfc29jayhzayk7Ci0JbDJjYXBfcGkoc2spLT5pbXR1ID0gbDJjYXBfbXR1OworCWwyY2FwX3BpKHNrKS0+Y2hhbi0+aW10dSA9IGwyY2FwX210dTsKIAlyZWxlYXNlX3NvY2soc2spOwogCiAJLyogU3RhcnQgbGlzdGVuaW5nIG9uIHRoZSBzb2NrZXQgKi8KQEAgLTIwOTMsNyArMjA5Niw3IEBACiAJCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFJGQ09NTV9BVVRIX1BFTkRJTkcsICZkLT5mbGFncykpCiAJCQljb250aW51ZTsKIAotCQlpZiAoIXN0YXR1cykKKwkJaWYgKCFzdGF0dXMgJiYgaGNpX2Nvbm5fY2hlY2tfc2VjdXJlKGNvbm4sIGQtPnNlY19sZXZlbCkpCiAJCQlzZXRfYml0KFJGQ09NTV9BVVRIX0FDQ0VQVCwgJmQtPmZsYWdzKTsKIAkJZWxzZQogCQkJc2V0X2JpdChSRkNPTU1fQVVUSF9SRUpFQ1QsICZkLT5mbGFncyk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMKaW5kZXggNjZjYzFmMC4uMzg2Y2ZhZiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYwpAQCAtNzQzLDYgKzc0Myw3IEBACiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IHNvY2sgKmwyY2FwX3NrOwogCXN0cnVjdCByZmNvbW1fY29ubmluZm8gY2luZm87CisJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNoYW4tPmNvbm47CiAJaW50IGxlbiwgZXJyID0gMDsKIAl1MzIgb3B0OwogCkBAIC03ODcsOCArNzg4LDggQEAKIAogCQlsMmNhcF9zayA9IHJmY29tbV9waShzayktPmRsYy0+c2Vzc2lvbi0+c29jay0+c2s7CiAKLQkJY2luZm8uaGNpX2hhbmRsZSA9IGwyY2FwX3BpKGwyY2FwX3NrKS0+Y29ubi0+aGNvbi0+aGFuZGxlOwotCQltZW1jcHkoY2luZm8uZGV2X2NsYXNzLCBsMmNhcF9waShsMmNhcF9zayktPmNvbm4tPmhjb24tPmRldl9jbGFzcywgMyk7CisJCWNpbmZvLmhjaV9oYW5kbGUgPSBjb25uLT5oY29uLT5oYW5kbGU7CisJCW1lbWNweShjaW5mby5kZXZfY2xhc3MsIGNvbm4tPmhjb24tPmRldl9jbGFzcywgMyk7CiAKIAkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHNpemVvZihjaW5mbykpOwogCQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgKGNoYXIgKikgJmNpbmZvLCBsZW4pKQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9ici5jIGIvbmV0L2JyaWRnZS9ici5jCmluZGV4IDg0YmJiODIuLmYyMGM0ZmQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnIuYworKysgYi9uZXQvYnJpZGdlL2JyLmMKQEAgLTEwNCwzICsxMDQsNCBAQAogbW9kdWxlX2V4aXQoYnJfZGVpbml0KQogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1ZFUlNJT04oQlJfVkVSU0lPTik7CitNT0RVTEVfQUxJQVNfUlROTF9MSU5LKCJicmlkZ2UiKTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMgYi9uZXQvYnJpZGdlL2JyX2RldmljZS5jCmluZGV4IDIxZTU5MDEuLmE2YjJmODYgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMKKysrIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuYwpAQCAtNzQsMTMgKzc0LDIzIEBACiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAorc3RhdGljIGludCBicl9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IG5ldGRldl9wcml2KGRldik7CisKKwlici0+c3RhdHMgPSBhbGxvY19wZXJjcHUoc3RydWN0IGJyX2NwdV9uZXRzdGF0cyk7CisJaWYgKCFici0+c3RhdHMpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgYnJfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQotCWJyX2ZlYXR1cmVzX3JlY29tcHV0ZShicik7CisJbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpOwogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAJYnJfc3RwX2VuYWJsZV9icmlkZ2UoYnIpOwogCWJyX211bHRpY2FzdF9vcGVuKGJyKTsKQEAgLTE3Nyw0OCArMTg3LDExIEBACiAJc3RyY3B5KGluZm8tPmJ1c19pbmZvLCAiTi9BIik7CiB9CiAKLXN0YXRpYyBpbnQgYnJfc2V0X3NnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQorc3RhdGljIHUzMiBicl9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZlYXR1cmVzKQogewogCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IG5ldGRldl9wcml2KGRldik7CiAKLQlpZiAoZGF0YSkKLQkJYnItPmZlYXR1cmVfbWFzayB8PSBORVRJRl9GX1NHOwotCWVsc2UKLQkJYnItPmZlYXR1cmVfbWFzayAmPSB+TkVUSUZfRl9TRzsKLQotCWJyX2ZlYXR1cmVzX3JlY29tcHV0ZShicik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYnJfc2V0X3RzbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKGRhdGEpCi0JCWJyLT5mZWF0dXJlX21hc2sgfD0gTkVUSUZfRl9UU087Ci0JZWxzZQotCQlici0+ZmVhdHVyZV9tYXNrICY9IH5ORVRJRl9GX1RTTzsKLQotCWJyX2ZlYXR1cmVzX3JlY29tcHV0ZShicik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYnJfc2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCi17Ci0Jc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmIChkYXRhKQotCQlici0+ZmVhdHVyZV9tYXNrIHw9IE5FVElGX0ZfTk9fQ1NVTTsKLQllbHNlCi0JCWJyLT5mZWF0dXJlX21hc2sgJj0gfk5FVElGX0ZfQUxMX0NTVU07Ci0KLQlicl9mZWF0dXJlc19yZWNvbXB1dGUoYnIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJyX3NldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKLXsKLQlyZXR1cm4gZXRodG9vbF9vcF9zZXRfZmxhZ3MobmV0ZGV2LCBkYXRhLCBFVEhfRkxBR19UWFZMQU4pOworCXJldHVybiBicl9mZWF0dXJlc19yZWNvbXB1dGUoYnIsIGZlYXR1cmVzKTsKIH0KIAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCkBAIC0zMTksMjEgKzI5MiwxMiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBicl9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8gICAgPSBicl9nZXRpbmZvLAogCS5nZXRfbGluawk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCi0JLmdldF90eF9jc3VtCT0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKLQkuc2V0X3R4X2NzdW0gCT0gYnJfc2V0X3R4X2NzdW0sCi0JLmdldF9zZwkJPSBldGh0b29sX29wX2dldF9zZywKLQkuc2V0X3NnCQk9IGJyX3NldF9zZywKLQkuZ2V0X3Rzbwk9IGV0aHRvb2xfb3BfZ2V0X3RzbywKLQkuc2V0X3Rzbwk9IGJyX3NldF90c28sCi0JLmdldF91Zm8JPSBldGh0b29sX29wX2dldF91Zm8sCi0JLnNldF91Zm8JPSBldGh0b29sX29wX3NldF91Zm8sCi0JLmdldF9mbGFncwk9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLAotCS5zZXRfZmxhZ3MJPSBicl9zZXRfZmxhZ3MsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJyX25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuCQkgPSBicl9kZXZfb3BlbiwKIAkubmRvX3N0b3AJCSA9IGJyX2Rldl9zdG9wLAorCS5uZG9faW5pdAkJID0gYnJfZGV2X2luaXQsCiAJLm5kb19zdGFydF94bWl0CQkgPSBicl9kZXZfeG1pdCwKIAkubmRvX2dldF9zdGF0czY0CSA9IGJyX2dldF9zdGF0czY0LAogCS5uZG9fc2V0X21hY19hZGRyZXNzCSA9IGJyX3NldF9tYWNfYWRkcmVzcywKQEAgLTM0Nyw2ICszMTEsNyBAQAogI2VuZGlmCiAJLm5kb19hZGRfc2xhdmUJCSA9IGJyX2FkZF9zbGF2ZSwKIAkubmRvX2RlbF9zbGF2ZQkJID0gYnJfZGVsX3NsYXZlLAorCS5uZG9fZml4X2ZlYXR1cmVzICAgICAgICA9IGJyX2ZpeF9mZWF0dXJlcywKIH07CiAKIHN0YXRpYyB2b2lkIGJyX2Rldl9mcmVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0zNTcsMTggKzMyMiw0OSBAQAogCWZyZWVfbmV0ZGV2KGRldik7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX3R5cGUgYnJfdHlwZSA9IHsKKwkubmFtZQk9ICJicmlkZ2UiLAorfTsKKwogdm9pZCBicl9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBuZXRkZXZfcHJpdihkZXYpOworCiAJcmFuZG9tX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcik7CiAJZXRoZXJfc2V0dXAoZGV2KTsKIAogCWRldi0+bmV0ZGV2X29wcyA9ICZicl9uZXRkZXZfb3BzOwogCWRldi0+ZGVzdHJ1Y3RvciA9IGJyX2Rldl9mcmVlOwogCVNFVF9FVEhUT09MX09QUyhkZXYsICZicl9ldGh0b29sX29wcyk7CisJU0VUX05FVERFVl9ERVZUWVBFKGRldiwgJmJyX3R5cGUpOwogCWRldi0+dHhfcXVldWVfbGVuID0gMDsKIAlkZXYtPnByaXZfZmxhZ3MgPSBJRkZfRUJSSURHRTsKIAogCWRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9GUkFHTElTVCB8IE5FVElGX0ZfSElHSERNQSB8CiAJCQlORVRJRl9GX0dTT19NQVNLIHwgTkVUSUZfRl9OT19DU1VNIHwgTkVUSUZfRl9MTFRYIHwKLQkJCU5FVElGX0ZfTkVUTlNfTE9DQUwgfCBORVRJRl9GX0dTTyB8IE5FVElGX0ZfSFdfVkxBTl9UWDsKKwkJCU5FVElGX0ZfTkVUTlNfTE9DQUwgfCBORVRJRl9GX0hXX1ZMQU5fVFg7CisJZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0ZSQUdMSVNUIHwgTkVUSUZfRl9ISUdIRE1BIHwKKwkJCSAgIE5FVElGX0ZfR1NPX01BU0sgfCBORVRJRl9GX05PX0NTVU0gfAorCQkJICAgTkVUSUZfRl9IV19WTEFOX1RYOworCisJYnItPmRldiA9IGRldjsKKwlzcGluX2xvY2tfaW5pdCgmYnItPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZici0+cG9ydF9saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgmYnItPmhhc2hfbG9jayk7CisKKwlici0+YnJpZGdlX2lkLnByaW9bMF0gPSAweDgwOworCWJyLT5icmlkZ2VfaWQucHJpb1sxXSA9IDB4MDA7CisKKwltZW1jcHkoYnItPmdyb3VwX2FkZHIsIGJyX2dyb3VwX2FkZHJlc3MsIEVUSF9BTEVOKTsKKworCWJyLT5zdHBfZW5hYmxlZCA9IEJSX05PX1NUUDsKKwlici0+ZGVzaWduYXRlZF9yb290ID0gYnItPmJyaWRnZV9pZDsKKwlici0+YnJpZGdlX21heF9hZ2UgPSBici0+bWF4X2FnZSA9IDIwICogSFo7CisJYnItPmJyaWRnZV9oZWxsb190aW1lID0gYnItPmhlbGxvX3RpbWUgPSAyICogSFo7CisJYnItPmJyaWRnZV9mb3J3YXJkX2RlbGF5ID0gYnItPmZvcndhcmRfZGVsYXkgPSAxNSAqIEhaOworCWJyLT5hZ2VpbmdfdGltZSA9IDMwMCAqIEhaOworCisJYnJfbmV0ZmlsdGVyX3J0YWJsZV9pbml0KGJyKTsKKwlicl9zdHBfdGltZXJfaW5pdChicik7CisJYnJfbXVsdGljYXN0X2luaXQoYnIpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9mZGIuYyBiL25ldC9icmlkZ2UvYnJfZmRiLmMKaW5kZXggY2M0ZDNjNS4uZTBkZmJjMSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9mZGIuYworKysgYi9uZXQvYnJpZGdlL2JyX2ZkYi5jCkBAIC0yOCw2ICsyOCw3IEBACiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmJyX2ZkYl9jYWNoZSBfX3JlYWRfbW9zdGx5Owogc3RhdGljIGludCBmZGJfaW5zZXJ0KHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqc291cmNlLAogCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKTsKK3N0YXRpYyB2b2lkIGZkYl9ub3RpZnkoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICosIGludCk7CiAKIHN0YXRpYyB1MzIgZmRiX3NhbHQgX19yZWFkX21vc3RseTsKIApAQCAtNjIsNyArNjMsNyBAQAogCQkJCSAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpmZGIpCiB7CiAJcmV0dXJuICFmZGItPmlzX3N0YXRpYyAmJgotCQl0aW1lX2JlZm9yZV9lcShmZGItPmFnZWluZ190aW1lciArIGhvbGRfdGltZShiciksIGppZmZpZXMpOworCQl0aW1lX2JlZm9yZV9lcShmZGItPnVwZGF0ZWQgKyBob2xkX3RpbWUoYnIpLCBqaWZmaWVzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgYnJfbWFjX2hhc2goY29uc3QgdW5zaWduZWQgY2hhciAqbWFjKQpAQCAtODEsNiArODIsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmRiX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZV9mZGJfZW50cnkgKmYpCiB7CisJZmRiX25vdGlmeShmLCBSVE1fREVMTkVJR0gpOwogCWhsaXN0X2RlbF9yY3UoJmYtPmhsaXN0KTsKIAljYWxsX3JjdSgmZi0+cmN1LCBmZGJfcmN1X2ZyZWUpOwogfQpAQCAtMTQwLDcgKzE0Miw3IEBACiAJCQl1bnNpZ25lZCBsb25nIHRoaXNfdGltZXI7CiAJCQlpZiAoZi0+aXNfc3RhdGljKQogCQkJCWNvbnRpbnVlOwotCQkJdGhpc190aW1lciA9IGYtPmFnZWluZ190aW1lciArIGRlbGF5OworCQkJdGhpc190aW1lciA9IGYtPnVwZGF0ZWQgKyBkZWxheTsKIAkJCWlmICh0aW1lX2JlZm9yZV9lcSh0aGlzX3RpbWVyLCBqaWZmaWVzKSkKIAkJCQlmZGJfZGVsZXRlKGYpOwogCQkJZWxzZSBpZiAodGltZV9iZWZvcmUodGhpc190aW1lciwgbmV4dF90aW1lcikpCkBAIC0yOTMsNyArMjk1LDcgQEAKIAogCQkJZmUtPmlzX2xvY2FsID0gZi0+aXNfbG9jYWw7CiAJCQlpZiAoIWYtPmlzX3N0YXRpYykKLQkJCQlmZS0+YWdlaW5nX3RpbWVyX3ZhbHVlID0gamlmZmllc190b19jbG9ja190KGppZmZpZXMgLSBmLT5hZ2VpbmdfdGltZXIpOworCQkJCWZlLT5hZ2VpbmdfdGltZXJfdmFsdWUgPSBqaWZmaWVzX3RvX2Nsb2NrX3QoamlmZmllcyAtIGYtPnVwZGF0ZWQpOwogCQkJKytmZTsKIAkJCSsrbnVtOwogCQl9CkBAIC0zMDUsOCArMzA3LDIxIEBACiAJcmV0dXJuIG51bTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2JyaWRnZV9mZGJfZW50cnkgKmZkYl9maW5kKHN0cnVjdCBobGlzdF9oZWFkICpoZWFkLAotCQkJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpCitzdGF0aWMgc3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpmZGJfZmluZChzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCwKKwkJCQkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKQoreworCXN0cnVjdCBobGlzdF9ub2RlICpoOworCXN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZmRiOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnkoZmRiLCBoLCBoZWFkLCBobGlzdCkgeworCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihmZGItPmFkZHIuYWRkciwgYWRkcikpCisJCQlyZXR1cm4gZmRiOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZmRiX2ZpbmRfcmN1KHN0cnVjdCBobGlzdF9oZWFkICpoZWFkLAorCQkJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpCiB7CiAJc3RydWN0IGhsaXN0X25vZGUgKmg7CiAJc3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpmZGI7CkBAIC0zMjAsOCArMzM1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZmRiX2NyZWF0ZShzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCwKIAkJCQkJICAgICAgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnNvdXJjZSwKLQkJCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsCi0JCQkJCSAgICAgICBpbnQgaXNfbG9jYWwpCisJCQkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKQogewogCXN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZmRiOwogCkBAIC0zMjksMTEgKzM0MywxMSBAQAogCWlmIChmZGIpIHsKIAkJbWVtY3B5KGZkYi0+YWRkci5hZGRyLCBhZGRyLCBFVEhfQUxFTik7CiAJCWZkYi0+ZHN0ID0gc291cmNlOwotCQlmZGItPmlzX2xvY2FsID0gaXNfbG9jYWw7Ci0JCWZkYi0+aXNfc3RhdGljID0gaXNfbG9jYWw7Ci0JCWZkYi0+YWdlaW5nX3RpbWVyID0gamlmZmllczsKLQorCQlmZGItPmlzX2xvY2FsID0gMDsKKwkJZmRiLT5pc19zdGF0aWMgPSAwOworCQlmZGItPnVwZGF0ZWQgPSBmZGItPnVzZWQgPSBqaWZmaWVzOwogCQlobGlzdF9hZGRfaGVhZF9yY3UoJmZkYi0+aGxpc3QsIGhlYWQpOworCQlmZGJfbm90aWZ5KGZkYiwgUlRNX05FV05FSUdIKTsKIAl9CiAJcmV0dXJuIGZkYjsKIH0KQEAgLTM2MCwxMiArMzc0LDE1IEBACiAJCWZkYl9kZWxldGUoZmRiKTsKIAl9CiAKLQlpZiAoIWZkYl9jcmVhdGUoaGVhZCwgc291cmNlLCBhZGRyLCAxKSkKKwlmZGIgPSBmZGJfY3JlYXRlKGhlYWQsIHNvdXJjZSwgYWRkcik7CisJaWYgKCFmZGIpCiAJCXJldHVybiAtRU5PTUVNOwogCisJZmRiLT5pc19sb2NhbCA9IGZkYi0+aXNfc3RhdGljID0gMTsKIAlyZXR1cm4gMDsKIH0KIAorLyogQWRkIGVudHJ5IGZvciBsb2NhbCBhZGRyZXNzIG9mIGludGVyZmFjZSAqLwogaW50IGJyX2ZkYl9pbnNlcnQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpzb3VyY2UsCiAJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcikKIHsKQEAgLTM5Miw3ICs0MDksNyBAQAogCSAgICAgIHNvdXJjZS0+c3RhdGUgPT0gQlJfU1RBVEVfRk9SV0FSRElORykpCiAJCXJldHVybjsKIAotCWZkYiA9IGZkYl9maW5kKGhlYWQsIGFkZHIpOworCWZkYiA9IGZkYl9maW5kX3JjdShoZWFkLCBhZGRyKTsKIAlpZiAobGlrZWx5KGZkYikpIHsKIAkJLyogYXR0ZW1wdCB0byB1cGRhdGUgYW4gZW50cnkgZm9yIGEgbG9jYWwgaW50ZXJmYWNlICovCiAJCWlmICh1bmxpa2VseShmZGItPmlzX2xvY2FsKSkgewpAQCAtNDAzLDE1ICs0MjAsMjc3IEBACiAJCX0gZWxzZSB7CiAJCQkvKiBmYXN0cGF0aDogdXBkYXRlIG9mIGV4aXN0aW5nIGVudHJ5ICovCiAJCQlmZGItPmRzdCA9IHNvdXJjZTsKLQkJCWZkYi0+YWdlaW5nX3RpbWVyID0gamlmZmllczsKKwkJCWZkYi0+dXBkYXRlZCA9IGppZmZpZXM7CiAJCX0KIAl9IGVsc2UgewogCQlzcGluX2xvY2soJmJyLT5oYXNoX2xvY2spOwotCQlpZiAoIWZkYl9maW5kKGhlYWQsIGFkZHIpKQotCQkJZmRiX2NyZWF0ZShoZWFkLCBzb3VyY2UsIGFkZHIsIDApOworCQlpZiAobGlrZWx5KCFmZGJfZmluZChoZWFkLCBhZGRyKSkpCisJCQlmZGJfY3JlYXRlKGhlYWQsIHNvdXJjZSwgYWRkcik7CisKIAkJLyogZWxzZSAgd2UgbG9zZSByYWNlIGFuZCBzb21lb25lIGVsc2UgaW5zZXJ0cwogCQkgKiBpdCBmaXJzdCwgZG9uJ3QgYm90aGVyIHVwZGF0aW5nCiAJCSAqLwogCQlzcGluX3VubG9jaygmYnItPmhhc2hfbG9jayk7CiAJfQogfQorCitzdGF0aWMgaW50IGZkYl90b19udWQoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpmZGIpCit7CisJaWYgKGZkYi0+aXNfbG9jYWwpCisJCXJldHVybiBOVURfUEVSTUFORU5UOworCWVsc2UgaWYgKGZkYi0+aXNfc3RhdGljKQorCQlyZXR1cm4gTlVEX05PQVJQOworCWVsc2UgaWYgKGhhc19leHBpcmVkKGZkYi0+ZHN0LT5iciwgZmRiKSkKKwkJcmV0dXJuIE5VRF9TVEFMRTsKKwllbHNlCisJCXJldHVybiBOVURfUkVBQ0hBQkxFOworfQorCitzdGF0aWMgaW50IGZkYl9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9mZGJfZW50cnkgKmZkYiwKKwkJCSB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKKwlzdHJ1Y3QgbmRhX2NhY2hlaW5mbyBjaTsKKwlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKKwlzdHJ1Y3QgbmRtc2cgKm5kbTsKKworCW5saCA9IG5sbXNnX3B1dChza2IsIHBpZCwgc2VxLCB0eXBlLCBzaXplb2YoKm5kbSksIGZsYWdzKTsKKwlpZiAobmxoID09IE5VTEwpCisJCXJldHVybiAtRU1TR1NJWkU7CisKKworCW5kbSA9IG5sbXNnX2RhdGEobmxoKTsKKwluZG0tPm5kbV9mYW1pbHkJID0gQUZfQlJJREdFOworCW5kbS0+bmRtX3BhZDEgICAgPSAwOworCW5kbS0+bmRtX3BhZDIgICAgPSAwOworCW5kbS0+bmRtX2ZsYWdzCSA9IDA7CisJbmRtLT5uZG1fdHlwZQkgPSAwOworCW5kbS0+bmRtX2lmaW5kZXggPSBmZGItPmRzdC0+ZGV2LT5pZmluZGV4OworCW5kbS0+bmRtX3N0YXRlICAgPSBmZGJfdG9fbnVkKGZkYik7CisKKwlOTEFfUFVUKHNrYiwgTkRBX0xMQUREUiwgRVRIX0FMRU4sICZmZGItPmFkZHIpOworCisJY2kubmRtX3VzZWQJID0gamlmZmllc190b19jbG9ja190KG5vdyAtIGZkYi0+dXNlZCk7CisJY2kubmRtX2NvbmZpcm1lZCA9IDA7CisJY2kubmRtX3VwZGF0ZWQJID0gamlmZmllc190b19jbG9ja190KG5vdyAtIGZkYi0+dXBkYXRlZCk7CisJY2kubmRtX3JlZmNudAkgPSAwOworCU5MQV9QVVQoc2tiLCBOREFfQ0FDSEVJTkZPLCBzaXplb2YoY2kpLCAmY2kpOworCisJcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7CisKK25sYV9wdXRfZmFpbHVyZToKKwlubG1zZ19jYW5jZWwoc2tiLCBubGgpOworCXJldHVybiAtRU1TR1NJWkU7Cit9CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IGZkYl9ubG1zZ19zaXplKHZvaWQpCit7CisJcmV0dXJuIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgbmRtc2cpKQorCQkrIG5sYV90b3RhbF9zaXplKEVUSF9BTEVOKSAvKiBOREFfTExBRERSICovCisJCSsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBuZGFfY2FjaGVpbmZvKSk7Cit9CisKK3N0YXRpYyB2b2lkIGZkYl9ub3RpZnkoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpmZGIsIGludCB0eXBlKQoreworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZmRiLT5kc3QtPmRldik7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgZXJyID0gLUVOT0JVRlM7CisKKwlza2IgPSBubG1zZ19uZXcoZmRiX25sbXNnX3NpemUoKSwgR0ZQX0FUT01JQyk7CisJaWYgKHNrYiA9PSBOVUxMKQorCQlnb3RvIGVycm91dDsKKworCWVyciA9IGZkYl9maWxsX2luZm8oc2tiLCBmZGIsIDAsIDAsIHR5cGUsIDApOworCWlmIChlcnIgPCAwKSB7CisJCS8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBmZGJfbmxtc2dfc2l6ZSgpICovCisJCVdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7CisJCWtmcmVlX3NrYihza2IpOworCQlnb3RvIGVycm91dDsKKwl9CisJcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfTkVJR0gsIE5VTEwsIEdGUF9BVE9NSUMpOworCXJldHVybjsKK2Vycm91dDoKKwlpZiAoZXJyIDwgMCkKKwkJcnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9ORUlHSCwgZXJyKTsKK30KKworLyogRHVtcCBpbmZvcm1hdGlvbiBhYm91dCBlbnRyaWVzLCBpbiByZXNwb25zZSB0byBHRVRORUlHSCAqLworaW50IGJyX2ZkYl9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKK3sKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCWludCBpZHggPSAwOworCisJcmN1X3JlYWRfbG9jaygpOworCWZvcl9lYWNoX25ldGRldl9yY3UobmV0LCBkZXYpIHsKKwkJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwkJaW50IGk7CisKKwkJaWYgKCEoZGV2LT5wcml2X2ZsYWdzICYgSUZGX0VCUklER0UpKQorCQkJY29udGludWU7CisKKwkJZm9yIChpID0gMDsgaSA8IEJSX0hBU0hfU0laRTsgaSsrKSB7CisJCQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqaDsKKwkJCXN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZjsKKworCQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGYsIGgsICZici0+aGFzaFtpXSwgaGxpc3QpIHsKKwkJCQlpZiAoaWR4IDwgY2ItPmFyZ3NbMF0pCisJCQkJCWdvdG8gc2tpcDsKKworCQkJCWlmIChmZGJfZmlsbF9pbmZvKHNrYiwgZiwKKwkJCQkJCSAgTkVUTElOS19DQihjYi0+c2tiKS5waWQsCisJCQkJCQkgIGNiLT5ubGgtPm5sbXNnX3NlcSwKKwkJCQkJCSAgUlRNX05FV05FSUdILAorCQkJCQkJICBOTE1fRl9NVUxUSSkgPCAwKQorCQkJCQlicmVhazsKK3NraXA6CisJCQkJKytpZHg7CisJCQl9CisJCX0KKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwljYi0+YXJnc1swXSA9IGlkeDsKKworCXJldHVybiBza2ItPmxlbjsKK30KKworLyogQ3JlYXRlIG5ldyBzdGF0aWMgZmRiIGVudHJ5ICovCitzdGF0aWMgaW50IGZkYl9hZGRfZW50cnkoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqc291cmNlLCBjb25zdCBfX3U4ICphZGRyLAorCQkJIF9fdTE2IHN0YXRlKQoreworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHNvdXJjZS0+YnI7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSAmYnItPmhhc2hbYnJfbWFjX2hhc2goYWRkcildOworCXN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZmRiOworCisJZmRiID0gZmRiX2ZpbmQoaGVhZCwgYWRkcik7CisJaWYgKGZkYikKKwkJcmV0dXJuIC1FRVhJU1Q7CisKKwlmZGIgPSBmZGJfY3JlYXRlKGhlYWQsIHNvdXJjZSwgYWRkcik7CisJaWYgKCFmZGIpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHN0YXRlICYgTlVEX1BFUk1BTkVOVCkKKwkJZmRiLT5pc19sb2NhbCA9IGZkYi0+aXNfc3RhdGljID0gMTsKKwllbHNlIGlmIChzdGF0ZSAmIE5VRF9OT0FSUCkKKwkJZmRiLT5pc19zdGF0aWMgPSAxOworCXJldHVybiAwOworfQorCisvKiBBZGQgbmV3IHBlcm1hbmVudCBmZGIgZW50cnkgd2l0aCBSVE1fTkVXTkVJR0ggKi8KK2ludCBicl9mZGJfYWRkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLCB2b2lkICphcmcpCit7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CisJc3RydWN0IG5kbXNnICpuZG07CisJc3RydWN0IG5sYXR0ciAqdGJbTkRBX01BWCsxXTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7CisJY29uc3QgX191OCAqYWRkcjsKKwlpbnQgZXJyOworCisJQVNTRVJUX1JUTkwoKTsKKwllcnIgPSBubG1zZ19wYXJzZShubGgsIHNpemVvZigqbmRtKSwgdGIsIE5EQV9NQVgsIE5VTEwpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJbmRtID0gbmxtc2dfZGF0YShubGgpOworCWlmIChuZG0tPm5kbV9pZmluZGV4ID09IDApIHsKKwkJcHJfaW5mbygiYnJpZGdlOiBSVE1fTkVXTkVJR0ggd2l0aCBpbnZhbGlkIGlmaW5kZXhcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgobmV0LCBuZG0tPm5kbV9pZmluZGV4KTsKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJcHJfaW5mbygiYnJpZGdlOiBSVE1fTkVXTkVJR0ggd2l0aCB1bmtub3duIGlmaW5kZXhcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoIXRiW05EQV9MTEFERFJdIHx8IG5sYV9sZW4odGJbTkRBX0xMQUREUl0pICE9IEVUSF9BTEVOKSB7CisJCXByX2luZm8oImJyaWRnZTogUlRNX05FV05FSUdIIHdpdGggaW52YWxpZCBhZGRyZXNzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYWRkciA9IG5sYV9kYXRhKHRiW05EQV9MTEFERFJdKTsKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkcikpIHsKKwkJcHJfaW5mbygiYnJpZGdlOiBSVE1fTkVXTkVJR0ggd2l0aCBpbnZhbGlkIGV0aGVyIGFkZHJlc3NcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwID0gYnJfcG9ydF9nZXRfcnRubChkZXYpOworCWlmIChwID09IE5VTEwpIHsKKwkJcHJfaW5mbygiYnJpZGdlOiBSVE1fTkVXTkVJR0ggJXMgbm90IGEgYnJpZGdlIHBvcnRcbiIsCisJCQlkZXYtPm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGluX2xvY2tfYmgoJnAtPmJyLT5oYXNoX2xvY2spOworCWVyciA9IGZkYl9hZGRfZW50cnkocCwgYWRkciwgbmRtLT5uZG1fc3RhdGUpOworCXNwaW5fdW5sb2NrX2JoKCZwLT5ici0+aGFzaF9sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZmRiX2RlbGV0ZV9ieV9hZGRyKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIGNvbnN0IHU4ICphZGRyKQoreworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHAtPmJyOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gJmJyLT5oYXNoW2JyX21hY19oYXNoKGFkZHIpXTsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9mZGJfZW50cnkgKmZkYjsKKworCWZkYiA9IGZkYl9maW5kKGhlYWQsIGFkZHIpOworCWlmICghZmRiKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWZkYl9kZWxldGUoZmRiKTsKKwlyZXR1cm4gMDsKK30KKworLyogUmVtb3ZlIG5laWdoYm9yIGVudHJ5IHdpdGggUlRNX0RFTE5FSUdIICovCitpbnQgYnJfZmRiX2RlbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOworCXN0cnVjdCBuZG1zZyAqbmRtOworCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7CisJc3RydWN0IG5sYXR0ciAqbGxhdHRyOworCWNvbnN0IF9fdTggKmFkZHI7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlpbnQgZXJyOworCisJQVNTRVJUX1JUTkwoKTsKKwlpZiAobmxtc2dfbGVuKG5saCkgPCBzaXplb2YoKm5kbSkpCisJCXJldHVybiAtRUlOVkFMOworCisJbmRtID0gbmxtc2dfZGF0YShubGgpOworCWlmIChuZG0tPm5kbV9pZmluZGV4ID09IDApIHsKKwkJcHJfaW5mbygiYnJpZGdlOiBSVE1fREVMTkVJR0ggd2l0aCBpbnZhbGlkIGlmaW5kZXhcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgobmV0LCBuZG0tPm5kbV9pZmluZGV4KTsKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJcHJfaW5mbygiYnJpZGdlOiBSVE1fREVMTkVJR0ggd2l0aCB1bmtub3duIGlmaW5kZXhcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlsbGF0dHIgPSBubG1zZ19maW5kX2F0dHIobmxoLCBzaXplb2YoKm5kbSksIE5EQV9MTEFERFIpOworCWlmIChsbGF0dHIgPT0gTlVMTCB8fCBubGFfbGVuKGxsYXR0cikgIT0gRVRIX0FMRU4pIHsKKwkJcHJfaW5mbygiYnJpZGdlOiBSVE1fREVMTkVJR0ggd2l0aCBpbnZhbGlkIGFkZHJlc3NcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlhZGRyID0gbmxhX2RhdGEobGxhdHRyKTsKKworCXAgPSBicl9wb3J0X2dldF9ydG5sKGRldik7CisJaWYgKHAgPT0gTlVMTCkgeworCQlwcl9pbmZvKCJicmlkZ2U6IFJUTV9ERUxORUlHSCAlcyBub3QgYSBicmlkZ2UgcG9ydFxuIiwKKwkJCWRldi0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNwaW5fbG9ja19iaCgmcC0+YnItPmhhc2hfbG9jayk7CisJZXJyID0gZmRiX2RlbGV0ZV9ieV9hZGRyKHAsIGFkZHIpOworCXNwaW5fdW5sb2NrX2JoKCZwLT5ici0+aGFzaF9sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lmLmMgYi9uZXQvYnJpZGdlL2JyX2lmLmMKaW5kZXggNzE4YjYwMy4uNWRiZGZkZiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pZi5jCisrKyBiL25ldC9icmlkZ2UvYnJfaWYuYwpAQCAtMzYsOCArMzYsOCBAQAogCWlmIChkZXYtPmV0aHRvb2xfb3BzICYmIGRldi0+ZXRodG9vbF9vcHMtPmdldF9zZXR0aW5ncykgewogCQlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZCA9IHsgLmNtZCA9IEVUSFRPT0xfR1NFVCwgfTsKIAotCQlpZiAoIWRldi0+ZXRodG9vbF9vcHMtPmdldF9zZXR0aW5ncyhkZXYsICZlY21kKSkgewotCQkJc3dpdGNoKGVjbWQuc3BlZWQpIHsKKwkJaWYgKCFkZXZfZXRodG9vbF9nZXRfc2V0dGluZ3MoZGV2LCAmZWNtZCkpIHsKKwkJCXN3aXRjaCAoZXRodG9vbF9jbWRfc3BlZWQoJmVjbWQpKSB7CiAJCQljYXNlIFNQRUVEXzEwMDAwOgogCQkJCXJldHVybiAyOwogCQkJY2FzZSBTUEVFRF8xMDAwOgpAQCAtMTc1LDU2ICsxNzUsNiBAQAogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGJyLT5kZXYsIGhlYWQpOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKm5ld19icmlkZ2VfZGV2KHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSkKLXsKLQlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnI7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQotCWRldiA9IGFsbG9jX25ldGRldihzaXplb2Yoc3RydWN0IG5ldF9icmlkZ2UpLCBuYW1lLAotCQkJICAgYnJfZGV2X3NldHVwKTsKLQotCWlmICghZGV2KQotCQlyZXR1cm4gTlVMTDsKLQlkZXZfbmV0X3NldChkZXYsIG5ldCk7Ci0KLQliciA9IG5ldGRldl9wcml2KGRldik7Ci0JYnItPmRldiA9IGRldjsKLQotCWJyLT5zdGF0cyA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgYnJfY3B1X25ldHN0YXRzKTsKLQlpZiAoIWJyLT5zdGF0cykgewotCQlmcmVlX25ldGRldihkZXYpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlzcGluX2xvY2tfaW5pdCgmYnItPmxvY2spOwotCUlOSVRfTElTVF9IRUFEKCZici0+cG9ydF9saXN0KTsKLQlzcGluX2xvY2tfaW5pdCgmYnItPmhhc2hfbG9jayk7Ci0KLQlici0+YnJpZGdlX2lkLnByaW9bMF0gPSAweDgwOwotCWJyLT5icmlkZ2VfaWQucHJpb1sxXSA9IDB4MDA7Ci0KLQltZW1jcHkoYnItPmdyb3VwX2FkZHIsIGJyX2dyb3VwX2FkZHJlc3MsIEVUSF9BTEVOKTsKLQotCWJyLT5mZWF0dXJlX21hc2sgPSBkZXYtPmZlYXR1cmVzOwotCWJyLT5zdHBfZW5hYmxlZCA9IEJSX05PX1NUUDsKLQlici0+ZGVzaWduYXRlZF9yb290ID0gYnItPmJyaWRnZV9pZDsKLQlici0+cm9vdF9wYXRoX2Nvc3QgPSAwOwotCWJyLT5yb290X3BvcnQgPSAwOwotCWJyLT5icmlkZ2VfbWF4X2FnZSA9IGJyLT5tYXhfYWdlID0gMjAgKiBIWjsKLQlici0+YnJpZGdlX2hlbGxvX3RpbWUgPSBici0+aGVsbG9fdGltZSA9IDIgKiBIWjsKLQlici0+YnJpZGdlX2ZvcndhcmRfZGVsYXkgPSBici0+Zm9yd2FyZF9kZWxheSA9IDE1ICogSFo7Ci0JYnItPnRvcG9sb2d5X2NoYW5nZSA9IDA7Ci0JYnItPnRvcG9sb2d5X2NoYW5nZV9kZXRlY3RlZCA9IDA7Ci0JYnItPmFnZWluZ190aW1lID0gMzAwICogSFo7Ci0KLQlicl9uZXRmaWx0ZXJfcnRhYmxlX2luaXQoYnIpOwotCi0JYnJfc3RwX3RpbWVyX2luaXQoYnIpOwotCWJyX211bHRpY2FzdF9pbml0KGJyKTsKLQotCXJldHVybiBkZXY7Ci19Ci0KIC8qIGZpbmQgYW4gYXZhaWxhYmxlIHBvcnQgbnVtYmVyICovCiBzdGF0aWMgaW50IGZpbmRfcG9ydG5vKHN0cnVjdCBuZXRfYnJpZGdlICpicikKIHsKQEAgLTI3Nyw0MiArMjI3LDE5IEBACiAJcmV0dXJuIHA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX3R5cGUgYnJfdHlwZSA9IHsKLQkubmFtZQk9ICJicmlkZ2UiLAotfTsKLQogaW50IGJyX2FkZF9icmlkZ2Uoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JaW50IHJldDsKIAotCWRldiA9IG5ld19icmlkZ2VfZGV2KG5ldCwgbmFtZSk7CisJZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgbmV0X2JyaWRnZSksIG5hbWUsCisJCQkgICBicl9kZXZfc2V0dXApOworCiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcnRubF9sb2NrKCk7Ci0JaWYgKHN0cmNocihkZXYtPm5hbWUsICclJykpIHsKLQkJcmV0ID0gZGV2X2FsbG9jX25hbWUoZGV2LCBkZXYtPm5hbWUpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0X2ZyZWU7Ci0JfQorCWRldl9uZXRfc2V0KGRldiwgbmV0KTsKIAotCVNFVF9ORVRERVZfREVWVFlQRShkZXYsICZicl90eXBlKTsKLQotCXJldCA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KLQlyZXQgPSBicl9zeXNmc19hZGRicihkZXYpOwotCWlmIChyZXQpCi0JCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7Ci0gb3V0OgotCXJ0bmxfdW5sb2NrKCk7Ci0JcmV0dXJuIHJldDsKLQotb3V0X2ZyZWU6Ci0JZnJlZV9uZXRkZXYoZGV2KTsKLQlnb3RvIG91dDsKKwlyZXR1cm4gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiB9CiAKIGludCBicl9kZWxfYnJpZGdlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSkKQEAgLTM2NCwxNSArMjkxLDE1IEBACiAvKgogICogUmVjb21wdXRlcyBmZWF0dXJlcyB1c2luZyBzbGF2ZSdzIGZlYXR1cmVzCiAgKi8KLXZvaWQgYnJfZmVhdHVyZXNfcmVjb21wdXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicikKK3UzMiBicl9mZWF0dXJlc19yZWNvbXB1dGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MzIgZmVhdHVyZXMpCiB7CiAJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcDsKLQl1MzIgZmVhdHVyZXMsIG1hc2s7CisJdTMyIG1hc2s7CiAKLQlmZWF0dXJlcyA9IG1hc2sgPSBici0+ZmVhdHVyZV9tYXNrOwogCWlmIChsaXN0X2VtcHR5KCZici0+cG9ydF9saXN0KSkKLQkJZ290byBkb25lOworCQlyZXR1cm4gZmVhdHVyZXM7CiAKKwltYXNrID0gZmVhdHVyZXM7CiAJZmVhdHVyZXMgJj0gfk5FVElGX0ZfT05FX0ZPUl9BTEw7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZici0+cG9ydF9saXN0LCBsaXN0KSB7CkBAIC0zODAsOCArMzA3LDcgQEAKIAkJCQkJCSAgICAgcC0+ZGV2LT5mZWF0dXJlcywgbWFzayk7CiAJfQogCi1kb25lOgotCWJyLT5kZXYtPmZlYXR1cmVzID0gbmV0ZGV2X2ZpeF9mZWF0dXJlcyhici0+ZGV2LCBmZWF0dXJlcyk7CisJcmV0dXJuIGZlYXR1cmVzOwogfQogCiAvKiBjYWxsZWQgd2l0aCBSVE5MICovCkBAIC00NDYsOSArMzcyLDEwIEBACiAKIAlsaXN0X2FkZF9yY3UoJnAtPmxpc3QsICZici0+cG9ydF9saXN0KTsKIAorCW5ldGRldl91cGRhdGVfZmVhdHVyZXMoYnItPmRldik7CisKIAlzcGluX2xvY2tfYmgoJmJyLT5sb2NrKTsKIAljaGFuZ2VkX2FkZHIgPSBicl9zdHBfcmVjYWxjdWxhdGVfYnJpZGdlX2lkKGJyKTsKLQlicl9mZWF0dXJlc19yZWNvbXB1dGUoYnIpOwogCiAJaWYgKChkZXYtPmZsYWdzICYgSUZGX1VQKSAmJiBuZXRpZl9jYXJyaWVyX29rKGRldikgJiYKIAkgICAgKGJyLT5kZXYtPmZsYWdzICYgSUZGX1VQKSkKQEAgLTQ5Niw5ICs0MjMsMTAgQEAKIAogCXNwaW5fbG9ja19iaCgmYnItPmxvY2spOwogCWJyX3N0cF9yZWNhbGN1bGF0ZV9icmlkZ2VfaWQoYnIpOwotCWJyX2ZlYXR1cmVzX3JlY29tcHV0ZShicik7CiAJc3Bpbl91bmxvY2tfYmgoJmJyLT5sb2NrKTsKIAorCW5ldGRldl91cGRhdGVfZmVhdHVyZXMoYnItPmRldik7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jCmluZGV4IGUyMTYwNzkuLmYzYWMxZTggMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfaW5wdXQuYworKysgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmMKQEAgLTk4LDkgKzk4LDEwIEBACiAJfQogCiAJaWYgKHNrYikgewotCQlpZiAoZHN0KQorCQlpZiAoZHN0KSB7CisJCQlkc3QtPnVzZWQgPSBqaWZmaWVzOwogCQkJYnJfZm9yd2FyZChkc3QtPmRzdCwgc2tiLCBza2IyKTsKLQkJZWxzZQorCQl9IGVsc2UKIAkJCWJyX2Zsb29kX2ZvcndhcmQoYnIsIHNrYiwgc2tiMik7CiAJfQogCkBAIC0xNjQsNyArMTY1LDcgQEAKIAkJCWdvdG8gZHJvcDsKIAogCQkvKiBJZiBTVFAgaXMgdHVybmVkIG9mZiwgdGhlbiBmb3J3YXJkICovCi0JCWlmIChwLT5ici0+c3RwX2VuYWJsZWQgPT0gQlJfTk9fU1RQKQorCQlpZiAocC0+YnItPnN0cF9lbmFibGVkID09IEJSX05PX1NUUCAmJiBkZXN0WzVdID09IDApCiAJCQlnb3RvIGZvcndhcmQ7CiAKIAkJaWYgKE5GX0hPT0soTkZQUk9UT19CUklER0UsIE5GX0JSX0xPQ0FMX0lOLCBza2IsIHNrYi0+ZGV2LApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pb2N0bC5jIGIvbmV0L2JyaWRnZS9icl9pb2N0bC5jCmluZGV4IDNkOWZjYTAuLjcyMjJmZTEgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfaW9jdGwuYworKysgYi9uZXQvYnJpZGdlL2JyX2lvY3RsLmMKQEAgLTE4MSw0MCArMTgxLDE5IEBACiAJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKIAkJCXJldHVybiAtRVBFUk07CiAKLQkJc3Bpbl9sb2NrX2JoKCZici0+bG9jayk7Ci0JCWJyLT5icmlkZ2VfZm9yd2FyZF9kZWxheSA9IGNsb2NrX3RfdG9famlmZmllcyhhcmdzWzFdKTsKLQkJaWYgKGJyX2lzX3Jvb3RfYnJpZGdlKGJyKSkKLQkJCWJyLT5mb3J3YXJkX2RlbGF5ID0gYnItPmJyaWRnZV9mb3J3YXJkX2RlbGF5OwotCQlzcGluX3VubG9ja19iaCgmYnItPmxvY2spOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGJyX3NldF9mb3J3YXJkX2RlbGF5KGJyLCBhcmdzWzFdKTsKIAogCWNhc2UgQlJDVExfU0VUX0JSSURHRV9IRUxMT19USU1FOgotCXsKLQkJdW5zaWduZWQgbG9uZyB0ID0gY2xvY2tfdF90b19qaWZmaWVzKGFyZ3NbMV0pOwogCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCiAJCQlyZXR1cm4gLUVQRVJNOwogCi0JCWlmICh0IDwgSFopCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlzcGluX2xvY2tfYmgoJmJyLT5sb2NrKTsKLQkJYnItPmJyaWRnZV9oZWxsb190aW1lID0gdDsKLQkJaWYgKGJyX2lzX3Jvb3RfYnJpZGdlKGJyKSkKLQkJCWJyLT5oZWxsb190aW1lID0gYnItPmJyaWRnZV9oZWxsb190aW1lOwotCQlzcGluX3VubG9ja19iaCgmYnItPmxvY2spOwotCQlyZXR1cm4gMDsKLQl9CisJCXJldHVybiBicl9zZXRfaGVsbG9fdGltZShiciwgYXJnc1sxXSk7CiAKIAljYXNlIEJSQ1RMX1NFVF9CUklER0VfTUFYX0FHRToKIAkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQogCQkJcmV0dXJuIC1FUEVSTTsKIAotCQlzcGluX2xvY2tfYmgoJmJyLT5sb2NrKTsKLQkJYnItPmJyaWRnZV9tYXhfYWdlID0gY2xvY2tfdF90b19qaWZmaWVzKGFyZ3NbMV0pOwotCQlpZiAoYnJfaXNfcm9vdF9icmlkZ2UoYnIpKQotCQkJYnItPm1heF9hZ2UgPSBici0+YnJpZGdlX21heF9hZ2U7Ci0JCXNwaW5fdW5sb2NrX2JoKCZici0+bG9jayk7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gYnJfc2V0X21heF9hZ2UoYnIsIGFyZ3NbMV0pOwogCiAJY2FzZSBCUkNUTF9TRVRfQUdFSU5HX1RJTUU6CiAJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKQEAgLTI3NSwxOSArMjU0LDE2IEBACiAJY2FzZSBCUkNUTF9TRVRfUE9SVF9QUklPUklUWToKIAl7CiAJCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7Ci0JCWludCByZXQgPSAwOworCQlpbnQgcmV0OwogCiAJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKIAkJCXJldHVybiAtRVBFUk07CiAKLQkJaWYgKGFyZ3NbMl0gPj0gKDE8PCgxNi1CUl9QT1JUX0JJVFMpKSkKLQkJCXJldHVybiAtRVJBTkdFOwotCiAJCXNwaW5fbG9ja19iaCgmYnItPmxvY2spOwogCQlpZiAoKHAgPSBicl9nZXRfcG9ydChiciwgYXJnc1sxXSkpID09IE5VTEwpCiAJCQlyZXQgPSAtRUlOVkFMOwogCQllbHNlCi0JCQlicl9zdHBfc2V0X3BvcnRfcHJpb3JpdHkocCwgYXJnc1syXSk7CisJCQlyZXQgPSBicl9zdHBfc2V0X3BvcnRfcHJpb3JpdHkocCwgYXJnc1syXSk7CiAJCXNwaW5fdW5sb2NrX2JoKCZici0+bG9jayk7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtMjk1LDE1ICsyNzEsMTcgQEAKIAljYXNlIEJSQ1RMX1NFVF9QQVRIX0NPU1Q6CiAJewogCQlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwOwotCQlpbnQgcmV0ID0gMDsKKwkJaW50IHJldDsKIAogCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCiAJCQlyZXR1cm4gLUVQRVJNOwogCisJCXNwaW5fbG9ja19iaCgmYnItPmxvY2spOwogCQlpZiAoKHAgPSBicl9nZXRfcG9ydChiciwgYXJnc1sxXSkpID09IE5VTEwpCiAJCQlyZXQgPSAtRUlOVkFMOwogCQllbHNlCi0JCQlicl9zdHBfc2V0X3BhdGhfY29zdChwLCBhcmdzWzJdKTsKKwkJCXJldCA9IGJyX3N0cF9zZXRfcGF0aF9jb3N0KHAsIGFyZ3NbMl0pOworCQlzcGluX3VubG9ja19iaCgmYnItPmxvY2spOwogCiAJCXJldHVybiByZXQ7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKaW5kZXggNTk2NjBjOS4uMmYxNGVhZiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYworKysgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jCkBAIC00MTMsNyArNDEzLDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBza19idWZmICpicl9pcDZfbXVsdGljYXN0X2FsbG9jX3F1ZXJ5KHN0cnVjdCBuZXRfYnJpZGdlICpiciwKLQkJCQkJCSAgICBzdHJ1Y3QgaW42X2FkZHIgKmdyb3VwKQorCQkJCQkJICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3JvdXApCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgaXB2NmhkciAqaXA2aDsKQEAgLTExMTUsNyArMTExNSw3IEBACiAJCQkJICBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LAogCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7CiAJc3RydWN0IGlnbXBoZHIgKmloID0gaWdtcF9oZHIoc2tiKTsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKm1wOwogCXN0cnVjdCBpZ21wdjNfcXVlcnkgKmloMzsKQEAgLTExOTAsNyArMTE5MCw3IEBACiAJCQkJICBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LAogCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7CisJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpOwogCXN0cnVjdCBtbGRfbXNnICptbGQgPSAoc3RydWN0IG1sZF9tc2cgKikgaWNtcDZfaGRyKHNrYik7CiAJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptcDsKIAlzdHJ1Y3QgbWxkMl9xdWVyeSAqbWxkMnE7CkBAIC0xMTk4LDcgKzExOTgsNyBAQAogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgX19yY3UgKipwcDsKIAl1bnNpZ25lZCBsb25nIG1heF9kZWxheTsKIAl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7Ci0Jc3RydWN0IGluNl9hZGRyICpncm91cCA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpncm91cCA9IE5VTEw7CiAJaW50IGVyciA9IDA7CiAKIAlzcGluX2xvY2soJmJyLT5tdWx0aWNhc3RfbG9jayk7CkBAIC0xMzU2LDcgKzEzNTYsNyBAQAogCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBza19idWZmICpza2IyID0gc2tiOwotCXN0cnVjdCBpcGhkciAqaXBoOworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoOwogCXN0cnVjdCBpZ21waGRyICppaDsKIAl1bnNpZ25lZCBsZW47CiAJdW5zaWduZWQgb2Zmc2V0OwpAQCAtMTQ1Miw3ICsxNDUyLDcgQEAKIAkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsKLQlzdHJ1Y3QgaXB2NmhkciAqaXA2aDsKKwljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aDsKIAlzdHJ1Y3QgaWNtcDZoZHIgKmljbXA2aDsKIAl1OCBuZXh0aGRyOwogCXVuc2lnbmVkIGxlbjsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCmluZGV4IGYzYmMzMjIuLmUxZjVlYzcgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKKysrIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiBzdGF0aWMgaW50IGJyX3BhcnNlX2lwX29wdGlvbnMoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0OwotCXN0cnVjdCBpcGhkciAqaXBoOworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItPmRldjsKIAl1MzIgbGVuOwogCkBAIC01NTQsNyArNTU0LDcgQEAKIAkJCQkJICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKIAkJCQkJICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCiB7Ci0Jc3RydWN0IGlwdjZoZHIgKmhkcjsKKwljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaGRyOwogCXUzMiBwa3RfbGVuOwogCiAJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkKQEAgLTczNyw3ICs3MzcsNyBAQAogCQluZl9icmlkZ2UtPm1hc2sgfD0gQlJORl9QS1RfVFlQRTsKIAl9CiAKLQlpZiAoYnJfcGFyc2VfaXBfb3B0aW9ucyhza2IpKQorCWlmIChwZiA9PSBQRl9JTkVUICYmIGJyX3BhcnNlX2lwX29wdGlvbnMoc2tiKSkKIAkJcmV0dXJuIE5GX0RST1A7CiAKIAkvKiBUaGUgcGh5c2RldiBtb2R1bGUgY2hlY2tzIG9uIHRoaXMgKi8KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0bGluay5jIGIvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMKaW5kZXggZjhiZjRjNy4uZmZiMGRjNCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMKKysrIGIvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMKQEAgLTEyLDkgKzEyLDExIEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxuZXQvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgorCiAjaW5jbHVkZSAiYnJfcHJpdmF0ZS5oIgogCiBzdGF0aWMgaW5saW5lIHNpemVfdCBicl9ubG1zZ19zaXplKHZvaWQpCkBAIC0xMTgsOCArMTIwLDkgQEAKIAlpbnQgaWR4OwogCiAJaWR4ID0gMDsKLQlmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHsKLQkJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IGJyX3BvcnRfZ2V0X3J0bmwoZGV2KTsKKwlyY3VfcmVhZF9sb2NrKCk7CisJZm9yX2VhY2hfbmV0ZGV2X3JjdShuZXQsIGRldikgeworCQlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0ID0gYnJfcG9ydF9nZXRfcmN1KGRldik7CiAKIAkJLyogbm90IGEgYnJpZGdlIHBvcnQgKi8KIAkJaWYgKCFwb3J0IHx8IGlkeCA8IGNiLT5hcmdzWzBdKQpAQCAtMTMzLDcgKzEzNiw3IEBACiBza2lwOgogCQkrK2lkeDsKIAl9Ci0KKwlyY3VfcmVhZF91bmxvY2soKTsKIAljYi0+YXJnc1swXSA9IGlkeDsKIAogCXJldHVybiBza2ItPmxlbjsKQEAgLTE4OCwyMCArMTkxLDYxIEBACiAJcmV0dXJuIDA7CiB9CiAKLQotaW50IF9faW5pdCBicl9uZXRsaW5rX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgYnJfdmFsaWRhdGUoc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IG5sYXR0ciAqZGF0YVtdKQogewotCWlmIChfX3J0bmxfcmVnaXN0ZXIoUEZfQlJJREdFLCBSVE1fR0VUTElOSywgTlVMTCwgYnJfZHVtcF9pZmluZm8pKQotCQlyZXR1cm4gLUVOT0JVRlM7Ci0KLQkvKiBPbmx5IHRoZSBmaXJzdCBjYWxsIHRvIF9fcnRubF9yZWdpc3RlciBjYW4gZmFpbCAqLwotCV9fcnRubF9yZWdpc3RlcihQRl9CUklER0UsIFJUTV9TRVRMSU5LLCBicl9ydG1fc2V0bGluaywgTlVMTCk7CisJaWYgKHRiW0lGTEFfQUREUkVTU10pIHsKKwkJaWYgKG5sYV9sZW4odGJbSUZMQV9BRERSRVNTXSkgIT0gRVRIX0FMRU4pCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG5sYV9kYXRhKHRiW0lGTEFfQUREUkVTU10pKSkKKwkJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBfX2V4aXQgYnJfbmV0bGlua19maW5pKHZvaWQpCitzdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgYnJfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHsKKwkua2luZAkJPSAiYnJpZGdlIiwKKwkucHJpdl9zaXplCT0gc2l6ZW9mKHN0cnVjdCBuZXRfYnJpZGdlKSwKKwkuc2V0dXAJCT0gYnJfZGV2X3NldHVwLAorCS52YWxpZGF0ZQk9IGJyX3ZhbGlkYXRlLAorfTsKKworaW50IF9faW5pdCBicl9uZXRsaW5rX2luaXQodm9pZCkKIHsKKwlpbnQgZXJyOworCisJZXJyID0gcnRubF9saW5rX3JlZ2lzdGVyKCZicl9saW5rX29wcyk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyMTsKKworCWVyciA9IF9fcnRubF9yZWdpc3RlcihQRl9CUklER0UsIFJUTV9HRVRMSU5LLCBOVUxMLCBicl9kdW1wX2lmaW5mbyk7CisJaWYgKGVycikKKwkJZ290byBlcnIyOworCWVyciA9IF9fcnRubF9yZWdpc3RlcihQRl9CUklER0UsIFJUTV9TRVRMSU5LLCBicl9ydG1fc2V0bGluaywgTlVMTCk7CisJaWYgKGVycikKKwkJZ290byBlcnIzOworCWVyciA9IF9fcnRubF9yZWdpc3RlcihQRl9CUklER0UsIFJUTV9ORVdORUlHSCwgYnJfZmRiX2FkZCwgTlVMTCk7CisJaWYgKGVycikKKwkJZ290byBlcnIzOworCWVyciA9IF9fcnRubF9yZWdpc3RlcihQRl9CUklER0UsIFJUTV9ERUxORUlHSCwgYnJfZmRiX2RlbGV0ZSwgTlVMTCk7CisJaWYgKGVycikKKwkJZ290byBlcnIzOworCWVyciA9IF9fcnRubF9yZWdpc3RlcihQRl9CUklER0UsIFJUTV9HRVRORUlHSCwgTlVMTCwgYnJfZmRiX2R1bXApOworCWlmIChlcnIpCisJCWdvdG8gZXJyMzsKKworCXJldHVybiAwOworCitlcnIzOgogCXJ0bmxfdW5yZWdpc3Rlcl9hbGwoUEZfQlJJREdFKTsKK2VycjI6CisJcnRubF9saW5rX3VucmVnaXN0ZXIoJmJyX2xpbmtfb3BzKTsKK2VycjE6CisJcmV0dXJuIGVycjsKIH0KIAordm9pZCBfX2V4aXQgYnJfbmV0bGlua19maW5pKHZvaWQpCit7CisJcnRubF9saW5rX3VucmVnaXN0ZXIoJmJyX2xpbmtfb3BzKTsKKwlydG5sX3VucmVnaXN0ZXJfYWxsKFBGX0JSSURHRSk7Cit9CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX25vdGlmeS5jIGIvbmV0L2JyaWRnZS9icl9ub3RpZnkuYwppbmRleCA3ZDMzN2M5Li42NTQ1ZWU5IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX25vdGlmeS5jCisrKyBiL25ldC9icmlkZ2UvYnJfbm90aWZ5LmMKQEAgLTM2LDYgKzM2LDEyIEBACiAJc3RydWN0IG5ldF9icmlkZ2UgKmJyOwogCWludCBlcnI7CiAKKwkvKiByZWdpc3RlciBvZiBicmlkZ2UgY29tcGxldGVkLCBhZGQgc3lzZnMgZW50cmllcyAqLworCWlmICgoZGV2LT5wcml2X2ZsYWdzICYgSUZGX0VCUklER0UpICYmIGV2ZW50ID09IE5FVERFVl9SRUdJU1RFUikgeworCQlicl9zeXNmc19hZGRicihkZXYpOworCQlyZXR1cm4gTk9USUZZX0RPTkU7CisJfQorCiAJLyogbm90IGEgcG9ydCBvZiBhIGJyaWRnZSAqLwogCXAgPSBicl9wb3J0X2dldF9ydG5sKGRldik7CiAJaWYgKCFwKQpAQCAtNjAsMTAgKzY2LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIE5FVERFVl9GRUFUX0NIQU5HRToKLQkJc3Bpbl9sb2NrX2JoKCZici0+bG9jayk7Ci0JCWlmIChuZXRpZl9ydW5uaW5nKGJyLT5kZXYpKQotCQkJYnJfZmVhdHVyZXNfcmVjb21wdXRlKGJyKTsKLQkJc3Bpbl91bmxvY2tfYmgoJmJyLT5sb2NrKTsKKwkJbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhici0+ZGV2KTsKIAkJYnJlYWs7CiAKIAljYXNlIE5FVERFVl9ET1dOOgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmggYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaAppbmRleCAzODcwMTNkLi41NDU3OGYyIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaAorKysgYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaApAQCAtNjQsNyArNjQsOCBAQAogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQJCSpkc3Q7CiAKIAlzdHJ1Y3QgcmN1X2hlYWQJCQlyY3U7Ci0JdW5zaWduZWQgbG9uZwkJCWFnZWluZ190aW1lcjsKKwl1bnNpZ25lZCBsb25nCQkJdXBkYXRlZDsKKwl1bnNpZ25lZCBsb25nCQkJdXNlZDsKIAltYWNfYWRkcgkJCWFkZHI7CiAJdW5zaWduZWQgY2hhcgkJCWlzX2xvY2FsOwogCXVuc2lnbmVkIGNoYXIJCQlpc19zdGF0aWM7CkBAIC0xODIsNyArMTgzLDYgQEAKIAlzdHJ1Y3QgYnJfY3B1X25ldHN0YXRzIF9fcGVyY3B1ICpzdGF0czsKIAlzcGlubG9ja190CQkJaGFzaF9sb2NrOwogCXN0cnVjdCBobGlzdF9oZWFkCQloYXNoW0JSX0hBU0hfU0laRV07Ci0JdTMyCQkJCWZlYXR1cmVfbWFzazsKICNpZmRlZiBDT05GSUdfQlJJREdFX05FVEZJTFRFUgogCXN0cnVjdCBydGFibGUgCQkJZmFrZV9ydGFibGU7CiAJYm9vbAkJCQluZl9jYWxsX2lwdGFibGVzOwpAQCAtMzUzLDYgKzM1Myw5IEBACiBleHRlcm4gdm9pZCBicl9mZGJfdXBkYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKIAkJCSAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqc291cmNlLAogCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKTsKK2V4dGVybiBpbnQgYnJfZmRiX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTsKK2V4dGVybiBpbnQgYnJfZmRiX2FkZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqYXJnKTsKK2V4dGVybiBpbnQgYnJfZmRiX2RlbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqYXJnKTsKIAogLyogYnJfZm9yd2FyZC5jICovCiBleHRlcm4gdm9pZCBicl9kZWxpdmVyKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnRvLApAQCAtMzc1LDcgKzM3OCw3IEBACiBleHRlcm4gaW50IGJyX2RlbF9pZihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCiAJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50IGJyX21pbl9tdHUoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyKTsKLWV4dGVybiB2b2lkIGJyX2ZlYXR1cmVzX3JlY29tcHV0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpOworZXh0ZXJuIHUzMiBicl9mZWF0dXJlc19yZWNvbXB1dGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1MzIgZmVhdHVyZXMpOwogCiAvKiBicl9pbnB1dC5jICovCiBleHRlcm4gaW50IGJyX2hhbmRsZV9mcmFtZV9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYik7CkBAIC00OTEsNiArNDk0LDExIEBACiBleHRlcm4gdm9pZCBicl9pbml0X3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCk7CiBleHRlcm4gdm9pZCBicl9iZWNvbWVfZGVzaWduYXRlZF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApOwogCitleHRlcm4gaW50IGJyX3NldF9mb3J3YXJkX2RlbGF5KHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB4KTsKK2V4dGVybiBpbnQgYnJfc2V0X2hlbGxvX3RpbWUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHgpOworZXh0ZXJuIGludCBicl9zZXRfbWF4X2FnZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgeCk7CisKKwogLyogYnJfc3RwX2lmLmMgKi8KIGV4dGVybiB2b2lkIGJyX3N0cF9lbmFibGVfYnJpZGdlKHN0cnVjdCBuZXRfYnJpZGdlICpicik7CiBleHRlcm4gdm9pZCBicl9zdHBfZGlzYWJsZV9icmlkZ2Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTsKQEAgLTUwMSwxMCArNTA5LDEwIEBACiBleHRlcm4gdm9pZCBicl9zdHBfY2hhbmdlX2JyaWRnZV9pZChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmEpOwogZXh0ZXJuIHZvaWQgYnJfc3RwX3NldF9icmlkZ2VfcHJpb3JpdHkoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAogCQkJCSAgICAgICB1MTYgbmV3cHJpbyk7Ci1leHRlcm4gdm9pZCBicl9zdHBfc2V0X3BvcnRfcHJpb3JpdHkoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwKLQkJCQkgICAgIHU4IG5ld3ByaW8pOwotZXh0ZXJuIHZvaWQgYnJfc3RwX3NldF9wYXRoX2Nvc3Qoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwKLQkJCQkgdTMyIHBhdGhfY29zdCk7CitleHRlcm4gaW50IGJyX3N0cF9zZXRfcG9ydF9wcmlvcml0eShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIG5ld3ByaW8pOworZXh0ZXJuIGludCBicl9zdHBfc2V0X3BhdGhfY29zdChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAorCQkJCXVuc2lnbmVkIGxvbmcgcGF0aF9jb3N0KTsKIGV4dGVybiBzc2l6ZV90IGJyX3Nob3dfYnJpZGdlX2lkKGNoYXIgKmJ1ZiwgY29uc3Qgc3RydWN0IGJyaWRnZV9pZCAqaWQpOwogCiAvKiBicl9zdHBfYnBkdS5jICovCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3ByaXZhdGVfc3RwLmggYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGVfc3RwLmgKaW5kZXggOGI2NTBmNy4uNjQyZWY0NyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlX3N0cC5oCisrKyBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZV9zdHAuaApAQCAtMTYsNiArMTYsMTkgQEAKICNkZWZpbmUgQlBEVV9UWVBFX0NPTkZJRyAwCiAjZGVmaW5lIEJQRFVfVFlQRV9UQ04gMHg4MAogCisvKiBJRUVFIDgwMi4xRC0xOTk4IHRpbWVyIHZhbHVlcyAqLworI2RlZmluZSBCUl9NSU5fSEVMTE9fVElNRQkoMSpIWikKKyNkZWZpbmUgQlJfTUFYX0hFTExPX1RJTUUJKDEwKkhaKQorCisjZGVmaW5lIEJSX01JTl9GT1JXQVJEX0RFTEFZCSgyKkhaKQorI2RlZmluZSBCUl9NQVhfRk9SV0FSRF9ERUxBWQkoMzAqSFopCisKKyNkZWZpbmUgQlJfTUlOX01BWF9BR0UJCSg2KkhaKQorI2RlZmluZSBCUl9NQVhfTUFYX0FHRQkJKDQwKkhaKQorCisjZGVmaW5lIEJSX01JTl9QQVRIX0NPU1QJMQorI2RlZmluZSBCUl9NQVhfUEFUSF9DT1NUCTY1NTM1CisKIHN0cnVjdCBicl9jb25maWdfYnBkdQogewogCXVuc2lnbmVkCXRvcG9sb2d5X2NoYW5nZToxOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9zdHAuYyBiL25ldC9icmlkZ2UvYnJfc3RwLmMKaW5kZXggNzM3MGQxNC4uYmI0MzgzZSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9zdHAuYworKysgYi9uZXQvYnJpZGdlL2JyX3N0cC5jCkBAIC00ODQsMyArNDg0LDUxIEBACiAJCWJyX3RvcG9sb2d5X2NoYW5nZV9hY2tub3dsZWRnZShwKTsKIAl9CiB9CisKKy8qIENoYW5nZSBicmlkZ2UgU1RQIHBhcmFtZXRlciAqLworaW50IGJyX3NldF9oZWxsb190aW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJdW5zaWduZWQgbG9uZyB0ID0gY2xvY2tfdF90b19qaWZmaWVzKHZhbCk7CisKKwlpZiAodCA8IEJSX01JTl9IRUxMT19USU1FIHx8IHQgPiBCUl9NQVhfSEVMTE9fVElNRSkKKwkJcmV0dXJuIC1FUkFOR0U7CisKKwlzcGluX2xvY2tfYmgoJmJyLT5sb2NrKTsKKwlici0+YnJpZGdlX2hlbGxvX3RpbWUgPSB0OworCWlmIChicl9pc19yb290X2JyaWRnZShicikpCisJCWJyLT5oZWxsb190aW1lID0gYnItPmJyaWRnZV9oZWxsb190aW1lOworCXNwaW5fdW5sb2NrX2JoKCZici0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBicl9zZXRfbWF4X2FnZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgdCA9IGNsb2NrX3RfdG9famlmZmllcyh2YWwpOworCisJaWYgKHQgPCBCUl9NSU5fTUFYX0FHRSB8fCB0ID4gQlJfTUFYX01BWF9BR0UpCisJCXJldHVybiAtRVJBTkdFOworCisJc3Bpbl9sb2NrX2JoKCZici0+bG9jayk7CisJYnItPmJyaWRnZV9tYXhfYWdlID0gdDsKKwlpZiAoYnJfaXNfcm9vdF9icmlkZ2UoYnIpKQorCQlici0+bWF4X2FnZSA9IGJyLT5icmlkZ2VfbWF4X2FnZTsKKwlzcGluX3VubG9ja19iaCgmYnItPmxvY2spOworCXJldHVybiAwOworCit9CisKK2ludCBicl9zZXRfZm9yd2FyZF9kZWxheShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgdCA9IGNsb2NrX3RfdG9famlmZmllcyh2YWwpOworCisJaWYgKGJyLT5zdHBfZW5hYmxlZCAhPSBCUl9OT19TVFAgJiYKKwkgICAgKHQgPCBCUl9NSU5fRk9SV0FSRF9ERUxBWSB8fCB0ID4gQlJfTUFYX0ZPUldBUkRfREVMQVkpKQorCQlyZXR1cm4gLUVSQU5HRTsKKworCXNwaW5fbG9ja19iaCgmYnItPmxvY2spOworCWJyLT5icmlkZ2VfZm9yd2FyZF9kZWxheSA9IHQ7CisJaWYgKGJyX2lzX3Jvb3RfYnJpZGdlKGJyKSkKKwkJYnItPmZvcndhcmRfZGVsYXkgPSBici0+YnJpZGdlX2ZvcndhcmRfZGVsYXk7CisJc3Bpbl91bmxvY2tfYmgoJmJyLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfc3RwX2lmLmMgYi9uZXQvYnJpZGdlL2JyX3N0cF9pZi5jCmluZGV4IDliNjFkMDkuLjZmNjE1YjggMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfc3RwX2lmLmMKKysrIGIvbmV0L2JyaWRnZS9icl9zdHBfaWYuYwpAQCAtMjAsNyArMjAsNyBAQAogCiAKIC8qIFBvcnQgaWQgaXMgY29tcG9zZWQgb2YgcHJpb3JpdHkgYW5kIHBvcnQgbnVtYmVyLgotICogTkI6IGxlYXN0IHNpZ25pZmljYW50IGJpdHMgb2YgcHJpb3JpdHkgYXJlIGRyb3BwZWQgdG8KKyAqIE5COiBzb21lIGJpdHMgb2YgcHJpb3JpdHkgYXJlIGRyb3BwZWQgdG8KICAqICAgICBtYWtlIHJvb20gZm9yIG1vcmUgcG9ydHMuCiAgKi8KIHN0YXRpYyBpbmxpbmUgcG9ydF9pZCBicl9tYWtlX3BvcnRfaWQoX191OCBwcmlvcml0eSwgX191MTYgcG9ydF9ubykKQEAgLTI5LDYgKzI5LDggQEAKIAkJfCAocG9ydF9ubyAmICgoMTw8QlJfUE9SVF9CSVRTKS0xKSk7CiB9CiAKKyNkZWZpbmUgQlJfTUFYX1BPUlRfUFJJT1JJVFkgKCh1MTYpfjAgPj4gQlJfUE9SVF9CSVRTKQorCiAvKiBjYWxsZWQgdW5kZXIgYnJpZGdlIGxvY2sgKi8KIHZvaWQgYnJfaW5pdF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApCiB7CkBAIC0yNTUsMTAgKzI1NywxNCBAQAogfQogCiAvKiBjYWxsZWQgdW5kZXIgYnJpZGdlIGxvY2sgKi8KLXZvaWQgYnJfc3RwX3NldF9wb3J0X3ByaW9yaXR5KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHU4IG5ld3ByaW8pCitpbnQgYnJfc3RwX3NldF9wb3J0X3ByaW9yaXR5KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHVuc2lnbmVkIGxvbmcgbmV3cHJpbykKIHsKLQlwb3J0X2lkIG5ld19wb3J0X2lkID0gYnJfbWFrZV9wb3J0X2lkKG5ld3ByaW8sIHAtPnBvcnRfbm8pOworCXBvcnRfaWQgbmV3X3BvcnRfaWQ7CiAKKwlpZiAobmV3cHJpbyA+IEJSX01BWF9QT1JUX1BSSU9SSVRZKQorCQlyZXR1cm4gLUVSQU5HRTsKKworCW5ld19wb3J0X2lkID0gYnJfbWFrZV9wb3J0X2lkKG5ld3ByaW8sIHAtPnBvcnRfbm8pOwogCWlmIChicl9pc19kZXNpZ25hdGVkX3BvcnQocCkpCiAJCXAtPmRlc2lnbmF0ZWRfcG9ydCA9IG5ld19wb3J0X2lkOwogCkBAIC0yNjksMTQgKzI3NSwyMSBAQAogCQlicl9iZWNvbWVfZGVzaWduYXRlZF9wb3J0KHApOwogCQlicl9wb3J0X3N0YXRlX3NlbGVjdGlvbihwLT5icik7CiAJfQorCisJcmV0dXJuIDA7CiB9CiAKIC8qIGNhbGxlZCB1bmRlciBicmlkZ2UgbG9jayAqLwotdm9pZCBicl9zdHBfc2V0X3BhdGhfY29zdChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1MzIgcGF0aF9jb3N0KQoraW50IGJyX3N0cF9zZXRfcGF0aF9jb3N0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHVuc2lnbmVkIGxvbmcgcGF0aF9jb3N0KQogeworCWlmIChwYXRoX2Nvc3QgPCBCUl9NSU5fUEFUSF9DT1NUIHx8CisJICAgIHBhdGhfY29zdCA+IEJSX01BWF9QQVRIX0NPU1QpCisJCXJldHVybiAtRVJBTkdFOworCiAJcC0+cGF0aF9jb3N0ID0gcGF0aF9jb3N0OwogCWJyX2NvbmZpZ3VyYXRpb25fdXBkYXRlKHAtPmJyKTsKIAlicl9wb3J0X3N0YXRlX3NlbGVjdGlvbihwLT5icik7CisJcmV0dXJuIDA7CiB9CiAKIHNzaXplX3QgYnJfc2hvd19icmlkZ2VfaWQoY2hhciAqYnVmLCBjb25zdCBzdHJ1Y3QgYnJpZGdlX2lkICppZCkKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYyBiL25ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYwppbmRleCA1YzFlNTU1Li42OGI4OTNlIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMKKysrIGIvbmV0L2JyaWRnZS9icl9zeXNmc19ici5jCkBAIC00Myw5ICs0Myw3IEBACiAJaWYgKGVuZHAgPT0gYnVmKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNwaW5fbG9ja19iaCgmYnItPmxvY2spOwogCWVyciA9ICgqc2V0KShiciwgdmFsKTsKLQlzcGluX3VubG9ja19iaCgmYnItPmxvY2spOwogCXJldHVybiBlcnIgPyBlcnIgOiBsZW47CiB9CiAKQEAgLTU3LDIwICs1NSwxMSBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwgamlmZmllc190b19jbG9ja190KGJyLT5mb3J3YXJkX2RlbGF5KSk7CiB9CiAKLXN0YXRpYyBpbnQgc2V0X2ZvcndhcmRfZGVsYXkoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCkKLXsKLQl1bnNpZ25lZCBsb25nIGRlbGF5ID0gY2xvY2tfdF90b19qaWZmaWVzKHZhbCk7Ci0JYnItPmZvcndhcmRfZGVsYXkgPSBkZWxheTsKLQlpZiAoYnJfaXNfcm9vdF9icmlkZ2UoYnIpKQotCQlici0+YnJpZGdlX2ZvcndhcmRfZGVsYXkgPSBkZWxheTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHNzaXplX3Qgc3RvcmVfZm9yd2FyZF9kZWxheShzdHJ1Y3QgZGV2aWNlICpkLAogCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKLQlyZXR1cm4gc3RvcmVfYnJpZGdlX3Bhcm0oZCwgYnVmLCBsZW4sIHNldF9mb3J3YXJkX2RlbGF5KTsKKwlyZXR1cm4gc3RvcmVfYnJpZGdlX3Bhcm0oZCwgYnVmLCBsZW4sIGJyX3NldF9mb3J3YXJkX2RlbGF5KTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihmb3J3YXJkX2RlbGF5LCBTX0lSVUdPIHwgU19JV1VTUiwKIAkJICAgc2hvd19mb3J3YXJkX2RlbGF5LCBzdG9yZV9mb3J3YXJkX2RlbGF5KTsKQEAgLTgyLDI0ICs3MSwxMSBAQAogCQkgICAgICAgamlmZmllc190b19jbG9ja190KHRvX2JyaWRnZShkKS0+aGVsbG9fdGltZSkpOwogfQogCi1zdGF0aWMgaW50IHNldF9oZWxsb190aW1lKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwpCi17Ci0JdW5zaWduZWQgbG9uZyB0ID0gY2xvY2tfdF90b19qaWZmaWVzKHZhbCk7Ci0KLQlpZiAodCA8IEhaKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWJyLT5oZWxsb190aW1lID0gdDsKLQlpZiAoYnJfaXNfcm9vdF9icmlkZ2UoYnIpKQotCQlici0+YnJpZGdlX2hlbGxvX3RpbWUgPSB0OwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9oZWxsb190aW1lKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1ZiwKIAkJCQlzaXplX3QgbGVuKQogewotCXJldHVybiBzdG9yZV9icmlkZ2VfcGFybShkLCBidWYsIGxlbiwgc2V0X2hlbGxvX3RpbWUpOworCXJldHVybiBzdG9yZV9icmlkZ2VfcGFybShkLCBidWYsIGxlbiwgYnJfc2V0X2hlbGxvX3RpbWUpOwogfQogc3RhdGljIERFVklDRV9BVFRSKGhlbGxvX3RpbWUsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2hlbGxvX3RpbWUsCiAJCSAgIHN0b3JlX2hlbGxvX3RpbWUpOwpAQCAtMTExLDE5ICs4NywxMCBAQAogCQkgICAgICAgamlmZmllc190b19jbG9ja190KHRvX2JyaWRnZShkKS0+bWF4X2FnZSkpOwogfQogCi1zdGF0aWMgaW50IHNldF9tYXhfYWdlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwpCi17Ci0JdW5zaWduZWQgbG9uZyB0ID0gY2xvY2tfdF90b19qaWZmaWVzKHZhbCk7Ci0JYnItPm1heF9hZ2UgPSB0OwotCWlmIChicl9pc19yb290X2JyaWRnZShicikpCi0JCWJyLT5icmlkZ2VfbWF4X2FnZSA9IHQ7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IHN0b3JlX21heF9hZ2Uoc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKLQlyZXR1cm4gc3RvcmVfYnJpZGdlX3Bhcm0oZCwgYnVmLCBsZW4sIHNldF9tYXhfYWdlKTsKKwlyZXR1cm4gc3RvcmVfYnJpZGdlX3Bhcm0oZCwgYnVmLCBsZW4sIGJyX3NldF9tYXhfYWdlKTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihtYXhfYWdlLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19tYXhfYWdlLCBzdG9yZV9tYXhfYWdlKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9zeXNmc19pZi5jIGIvbmV0L2JyaWRnZS9icl9zeXNmc19pZi5jCmluZGV4IGZkNTc5OWMuLjYyMjliNjIgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfc3lzZnNfaWYuYworKysgYi9uZXQvYnJpZGdlL2JyX3N5c2ZzX2lmLmMKQEAgLTIzLDcgKzIzLDcgQEAKIHN0cnVjdCBicnBvcnRfYXR0cmlidXRlIHsKIAlzdHJ1Y3QgYXR0cmlidXRlCWF0dHI7CiAJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKiwgY2hhciAqKTsKLQlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKiwgdW5zaWduZWQgbG9uZyk7CisJaW50ICgqc3RvcmUpKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKiwgdW5zaWduZWQgbG9uZyk7CiB9OwogCiAjZGVmaW5lIEJSUE9SVF9BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkJCSAgICAgICAgXApAQCAtMzgsMjcgKzM4LDE3IEBACiB7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHAtPnBhdGhfY29zdCk7CiB9Ci1zdGF0aWMgc3NpemVfdCBzdG9yZV9wYXRoX2Nvc3Qoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdW5zaWduZWQgbG9uZyB2KQotewotCWJyX3N0cF9zZXRfcGF0aF9jb3N0KHAsIHYpOwotCXJldHVybiAwOwotfQorCiBzdGF0aWMgQlJQT1JUX0FUVFIocGF0aF9jb3N0LCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJICAgc2hvd19wYXRoX2Nvc3QsIHN0b3JlX3BhdGhfY29zdCk7CisJCSAgIHNob3dfcGF0aF9jb3N0LCBicl9zdHBfc2V0X3BhdGhfY29zdCk7CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfcHJpb3JpdHkoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgY2hhciAqYnVmKQogewogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwLT5wcmlvcml0eSk7CiB9Ci1zdGF0aWMgc3NpemVfdCBzdG9yZV9wcmlvcml0eShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1bnNpZ25lZCBsb25nIHYpCi17Ci0JaWYgKHYgPj0gKDE8PCgxNi1CUl9QT1JUX0JJVFMpKSkKLQkJcmV0dXJuIC1FUkFOR0U7Ci0JYnJfc3RwX3NldF9wb3J0X3ByaW9yaXR5KHAsIHYpOwotCXJldHVybiAwOwotfQorCiBzdGF0aWMgQlJQT1JUX0FUVFIocHJpb3JpdHksIFNfSVJVR08gfCBTX0lXVVNSLAotCQkJIHNob3dfcHJpb3JpdHksIHN0b3JlX3ByaW9yaXR5KTsKKwkJCSBzaG93X3ByaW9yaXR5LCBicl9zdHBfc2V0X3BvcnRfcHJpb3JpdHkpOwogCiBzdGF0aWMgc3NpemVfdCBzaG93X2Rlc2lnbmF0ZWRfcm9vdChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBjaGFyICpidWYpCiB7CkBAIC0xMzYsNyArMTI2LDcgQEAKIH0KIHN0YXRpYyBCUlBPUlRfQVRUUihob2xkX3RpbWVyLCBTX0lSVUdPLCBzaG93X2hvbGRfdGltZXIsIE5VTEwpOwogCi1zdGF0aWMgc3NpemVfdCBzdG9yZV9mbHVzaChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1bnNpZ25lZCBsb25nIHYpCitzdGF0aWMgaW50IHN0b3JlX2ZsdXNoKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHVuc2lnbmVkIGxvbmcgdikKIHsKIAlicl9mZGJfZGVsZXRlX2J5X3BvcnQocC0+YnIsIHAsIDApOyAvLyBEb24ndCBkZWxldGUgbG9jYWwgZW50cnkKIAlyZXR1cm4gMDsKQEAgLTE0OCw3ICsxMzgsNyBAQAogCWludCBoYWlycGluX21vZGUgPSAocC0+ZmxhZ3MgJiBCUl9IQUlSUElOX01PREUpID8gMSA6IDA7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGhhaXJwaW5fbW9kZSk7CiB9Ci1zdGF0aWMgc3NpemVfdCBzdG9yZV9oYWlycGluX21vZGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdW5zaWduZWQgbG9uZyB2KQorc3RhdGljIGludCBzdG9yZV9oYWlycGluX21vZGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgdW5zaWduZWQgbG9uZyB2KQogewogCWlmICh2KQogCQlwLT5mbGFncyB8PSBCUl9IQUlSUElOX01PREU7CkBAIC0xNjUsNyArMTU1LDcgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcC0+bXVsdGljYXN0X3JvdXRlcik7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHN0b3JlX211bHRpY2FzdF9yb3V0ZXIoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwKK3N0YXRpYyBpbnQgc3RvcmVfbXVsdGljYXN0X3JvdXRlcihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdikKIHsKIAlyZXR1cm4gYnJfbXVsdGljYXN0X3NldF9wb3J0X3JvdXRlcihwLCB2KTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCmluZGV4IDg5MzY2OWMuLjFhOTJiMzYgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYwpAQCAtMTc2Niw3ICsxNzY2LDcgQEAKIAogCW5ld2luZm8tPmVudHJpZXNfc2l6ZSA9IHNpemU7CiAKLQl4dF9jb21wYXRfaW5pdF9vZmZzZXRzKEFGX0lORVQsIGluZm8tPm5lbnRyaWVzKTsKKwl4dF9jb21wYXRfaW5pdF9vZmZzZXRzKE5GUFJPVE9fQlJJREdFLCBpbmZvLT5uZW50cmllcyk7CiAJcmV0dXJuIEVCVF9FTlRSWV9JVEVSQVRFKGVudHJpZXMsIHNpemUsIGNvbXBhdF9jYWxjX2VudHJ5LCBpbmZvLAogCQkJCQkJCWVudHJpZXMsIG5ld2luZm8pOwogfQpAQCAtMTg4Miw3ICsxODgyLDcgQEAKIAlzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoOwogCXN0cnVjdCB4dF90YXJnZXQgKnd0OwogCXZvaWQgKmRzdCA9IE5VTEw7Ci0JaW50IG9mZiwgcGFkID0gMCwgcmV0ID0gMDsKKwlpbnQgb2ZmLCBwYWQgPSAwOwogCXVuc2lnbmVkIGludCBzaXplX2tlcm4sIGVudHJ5X29mZnNldCwgbWF0Y2hfc2l6ZSA9IG13dC0+bWF0Y2hfc2l6ZTsKIAogCXN0cmxjcHkobmFtZSwgbXd0LT51Lm5hbWUsIHNpemVvZihuYW1lKSk7CkBAIC0xOTM1LDEzICsxOTM1LDYgQEAKIAkJYnJlYWs7CiAJfQogCi0JaWYgKCFkc3QpIHsKLQkJcmV0ID0geHRfY29tcGF0X2FkZF9vZmZzZXQoTkZQUk9UT19CUklER0UsIGVudHJ5X29mZnNldCwKLQkJCQkJb2ZmICsgZWJ0X2NvbXBhdF9lbnRyeV9wYWRzaXplKCkpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCiAJc3RhdGUtPmJ1Zl9rZXJuX29mZnNldCArPSBtYXRjaF9zaXplICsgb2ZmOwogCXN0YXRlLT5idWZfdXNlcl9vZmZzZXQgKz0gbWF0Y2hfc2l6ZTsKIAlwYWQgPSBYVF9BTElHTihzaXplX2tlcm4pIC0gc2l6ZV9rZXJuOwpAQCAtMjAxNiw1MCArMjAwOSw2IEBACiAJcmV0dXJuIGdyb3d0aDsKIH0KIAotI2RlZmluZSBFQlRfQ09NUEFUX1dBVENIRVJfSVRFUkFURShlLCBmbiwgYXJncy4uLikgICAgICAgICAgXAotKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCXVuc2lnbmVkIGludCBfX2k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JaW50IF9fcmV0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlzdHJ1Y3QgY29tcGF0X2VidF9lbnRyeV9td3QgKl9fd2F0Y2hlcjsgICAgICAgICAgICAgXAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JZm9yIChfX2kgPSBlLT53YXRjaGVyc19vZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAgIFwKLQkgICAgIF9faSA8IChlKS0+dGFyZ2V0X29mZnNldDsgICAgICAgICAgICAgICAgICAgICAgXAotCSAgICAgX19pICs9IF9fd2F0Y2hlci0+d2F0Y2hlcl9zaXplICsgICAgICAgICAgICAgICBcCi0JICAgICBzaXplb2Yoc3RydWN0IGNvbXBhdF9lYnRfZW50cnlfbXd0KSkgeyAgICAgICAgIFwKLQkJX193YXRjaGVyID0gKHZvaWQgKikoZSkgKyBfX2k7ICAgICAgICAgICAgICBcCi0JCV9fcmV0ID0gZm4oX193YXRjaGVyICwgIyMgYXJncyk7ICAgICAgICAgICAgXAotCQlpZiAoX19yZXQgIT0gMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCWJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWlmIChfX3JldCA9PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCWlmIChfX2kgIT0gKGUpLT50YXJnZXRfb2Zmc2V0KSAgICAgICAgICAgICAgXAotCQkJX19yZXQgPSAtRUlOVkFMOyAgICAgICAgICAgICAgICAgICAgXAotCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JX19yZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0pCi0KLSNkZWZpbmUgRUJUX0NPTVBBVF9NQVRDSF9JVEVSQVRFKGUsIGZuLCBhcmdzLi4uKSAgICAgICAgICAgIFwKLSh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl1bnNpZ25lZCBpbnQgX19pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWludCBfX3JldCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0Jc3RydWN0IGNvbXBhdF9lYnRfZW50cnlfbXd0ICpfX21hdGNoOyAgICAgICAgICAgICAgIFwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWZvciAoX19pID0gc2l6ZW9mKHN0cnVjdCBlYnRfZW50cnkpOyAgICAgICAgICAgICAgICBcCi0JICAgICBfX2kgPCAoZSktPndhdGNoZXJzX29mZnNldDsgICAgICAgICAgICAgICAgICAgIFwKLQkgICAgIF9faSArPSBfX21hdGNoLT5tYXRjaF9zaXplICsgICAgICAgICAgICAgICAgICAgXAotCSAgICAgc2l6ZW9mKHN0cnVjdCBjb21wYXRfZWJ0X2VudHJ5X213dCkpIHsgICAgICAgICBcCi0JCV9fbWF0Y2ggPSAodm9pZCAqKShlKSArIF9faTsgICAgICAgICAgICAgICAgXAotCQlfX3JldCA9IGZuKF9fbWF0Y2ggLCAjIyBhcmdzKTsgICAgICAgICAgICAgIFwKLQkJaWYgKF9fcmV0ICE9IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQlicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlpZiAoX19yZXQgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQlpZiAoX19pICE9IChlKS0+d2F0Y2hlcnNfb2Zmc2V0KSAgICAgICAgICAgIFwKLQkJCV9fcmV0ID0gLUVJTlZBTDsgICAgICAgICAgICAgICAgICAgIFwKLQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCV9fcmV0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19KQotCiAvKiBjYWxsZWQgZm9yIGFsbCBlYnRfZW50cnkgc3RydWN0dXJlcy4gKi8KIHN0YXRpYyBpbnQgc2l6ZV9lbnRyeV9td3Qoc3RydWN0IGVidF9lbnRyeSAqZW50cnksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJhc2UsCiAJCQkgIHVuc2lnbmVkIGludCAqdG90YWwsCkBAIC0yMTMyLDYgKzIwODEsMTQgQEAKIAkJfQogCX0KIAorCWlmIChzdGF0ZS0+YnVmX2tlcm5fc3RhcnQgPT0gTlVMTCkgeworCQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gYnVmX3N0YXJ0IC0gKGNoYXIgKikgYmFzZTsKKworCQlyZXQgPSB4dF9jb21wYXRfYWRkX29mZnNldChORlBST1RPX0JSSURHRSwgb2Zmc2V0LCBuZXdfb2Zmc2V0KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKwogCXN0YXJ0b2ZmID0gc3RhdGUtPmJ1Zl91c2VyX29mZnNldCAtIHN0YXJ0b2ZmOwogCiAJQlVHX09OKCp0b3RhbCA8IHN0YXJ0b2ZmKTsKQEAgLTIyNDAsNiArMjE5Nyw3IEBACiAKIAl4dF9jb21wYXRfbG9jayhORlBST1RPX0JSSURHRSk7CiAKKwl4dF9jb21wYXRfaW5pdF9vZmZzZXRzKE5GUFJPVE9fQlJJREdFLCB0bXAubmVudHJpZXMpOwogCXJldCA9IGNvbXBhdF9jb3B5X2VudHJpZXMoZW50cmllc190bXAsIHRtcC5lbnRyaWVzX3NpemUsICZzdGF0ZSk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0X3VubG9jazsKZGlmZiAtLWdpdCBhL25ldC9jYWlmL01ha2VmaWxlIGIvbmV0L2NhaWYvTWFrZWZpbGUKaW5kZXggOWQzOGU0MC4uZWJjZDRlNyAxMDA2NDQKLS0tIGEvbmV0L2NhaWYvTWFrZWZpbGUKKysrIGIvbmV0L2NhaWYvTWFrZWZpbGUKQEAgLTUsNyArNSw3IEBACiAJY2Zmcm1sLm8gY2Z2ZWlsLm8gY2ZkYmdsLm9cCiAJY2ZzZXJsLm8gY2ZkZ21sLm8gIFwKIAljZnJmbWwubyBjZnZpZGwubyBjZnV0aWxsLm8gXAotCWNmc3J2bC5vIGNmcGt0X3NrYnVmZi5vIGNhaWZfY29uZmlnX3V0aWwubworCWNmc3J2bC5vIGNmcGt0X3NrYnVmZi5vCiAKIG9iai0kKENPTkZJR19DQUlGKSArPSBjYWlmLm8KIG9iai0kKENPTkZJR19DQUlGX05FVERFVikgKz0gY2hubF9uZXQubwpkaWZmIC0tZ2l0IGEvbmV0L2NhaWYvY2FpZl9jb25maWdfdXRpbC5jIGIvbmV0L2NhaWYvY2FpZl9jb25maWdfdXRpbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTIyZDhjLi4wMDAwMDAwCi0tLSBhL25ldC9jYWlmL2NhaWZfY29uZmlnX3V0aWwuYworKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFNULUVyaWNzc29uIEFCIDIwMTAKLSAqIEF1dGhvcjoJU2p1ciBCcmVuZGVsYW5kIHNqdXIuYnJhbmRlbGFuZEBzdGVyaWNzc29uLmNvbQotICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bmV0L2NhaWYvY2ZjdHJsLmg+Ci0jaW5jbHVkZSA8bmV0L2NhaWYvY2ZjbmZnLmg+Ci0jaW5jbHVkZSA8bmV0L2NhaWYvY2FpZl9kZXYuaD4KLQotaW50IGNvbm5lY3RfcmVxX3RvX2xpbmtfcGFyYW0oc3RydWN0IGNmY25mZyAqY25mZywKLQkJCQlzdHJ1Y3QgY2FpZl9jb25uZWN0X3JlcXVlc3QgKnMsCi0JCQkJc3RydWN0IGNmY3RybF9saW5rX3BhcmFtICpsKQotewotCXN0cnVjdCBkZXZfaW5mbyAqZGV2X2luZm87Ci0JZW51bSBjZmNuZmdfcGh5X3ByZWZlcmVuY2UgcHJlZjsKLQlpbnQgcmVzOwotCi0JbWVtc2V0KGwsIDAsIHNpemVvZigqbCkpOwotCS8qIEluIGNhaWYgcHJvdG9jb2wgbG93IHZhbHVlIGlzIGhpZ2ggcHJpb3JpdHkgKi8KLQlsLT5wcmlvcml0eSA9IENBSUZfUFJJT19NQVggLSBzLT5wcmlvcml0eSArIDE7Ci0KLQlpZiAocy0+aWZpbmRleCAhPSAwKXsKLQkJcmVzID0gY2ZjbmZnX2dldF9pZF9mcm9tX2lmaShjbmZnLCBzLT5pZmluZGV4KTsKLQkJaWYgKHJlcyA8IDApCi0JCQlyZXR1cm4gcmVzOwotCQlsLT5waHlpZCA9IHJlczsKLQl9Ci0JZWxzZSB7Ci0JCXN3aXRjaCAocy0+bGlua19zZWxlY3RvcikgewotCQljYXNlIENBSUZfTElOS19ISUdIX0JBTkRXOgotCQkJcHJlZiA9IENGUEhZUFJFRl9ISUdIX0JXOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ0FJRl9MSU5LX0xPV19MQVRFTkNZOgotCQkJcHJlZiA9IENGUEhZUFJFRl9MT1dfTEFUOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlkZXZfaW5mbyA9IGNmY25mZ19nZXRfcGh5aWQoY25mZywgcHJlZik7Ci0JCWlmIChkZXZfaW5mbyA9PSBOVUxMKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCWwtPnBoeWlkID0gZGV2X2luZm8tPmlkOwotCX0KLQlzd2l0Y2ggKHMtPnByb3RvY29sKSB7Ci0JY2FzZSBDQUlGUFJPVE9fQVQ6Ci0JCWwtPmxpbmt0eXBlID0gQ0ZDVFJMX1NSVl9WRUk7Ci0JCWlmIChzLT5zb2NrYWRkci51LmF0LnR5cGUgPT0gQ0FJRl9BVFRZUEVfUExBSU4pCi0JCQlsLT5jaHR5cGUgPSAweDAyOwotCQllbHNlCi0JCQlsLT5jaHR5cGUgPSBzLT5zb2NrYWRkci51LmF0LnR5cGU7Ci0JCWwtPmVuZHBvaW50ID0gMHgwMDsKLQkJYnJlYWs7Ci0JY2FzZSBDQUlGUFJPVE9fREFUQUdSQU06Ci0JCWwtPmxpbmt0eXBlID0gQ0ZDVFJMX1NSVl9EQVRBR1JBTTsKLQkJbC0+Y2h0eXBlID0gMHgwMDsKLQkJbC0+dS5kYXRhZ3JhbS5jb25uaWQgPSBzLT5zb2NrYWRkci51LmRnbS5jb25uZWN0aW9uX2lkOwotCQlicmVhazsKLQljYXNlIENBSUZQUk9UT19EQVRBR1JBTV9MT09QOgotCQlsLT5saW5rdHlwZSA9IENGQ1RSTF9TUlZfREFUQUdSQU07Ci0JCWwtPmNodHlwZSA9IDB4MDM7Ci0JCWwtPmVuZHBvaW50ID0gMHgwMDsKLQkJbC0+dS5kYXRhZ3JhbS5jb25uaWQgPSBzLT5zb2NrYWRkci51LmRnbS5jb25uZWN0aW9uX2lkOwotCQlicmVhazsKLQljYXNlIENBSUZQUk9UT19SRk06Ci0JCWwtPmxpbmt0eXBlID0gQ0ZDVFJMX1NSVl9SRk07Ci0JCWwtPnUuZGF0YWdyYW0uY29ubmlkID0gcy0+c29ja2FkZHIudS5yZm0uY29ubmVjdGlvbl9pZDsKLQkJc3RybmNweShsLT51LnJmbS52b2x1bWUsIHMtPnNvY2thZGRyLnUucmZtLnZvbHVtZSwKLQkJCXNpemVvZihsLT51LnJmbS52b2x1bWUpLTEpOwotCQlsLT51LnJmbS52b2x1bWVbc2l6ZW9mKGwtPnUucmZtLnZvbHVtZSktMV0gPSAwOwotCQlicmVhazsKLQljYXNlIENBSUZQUk9UT19VVElMOgotCQlsLT5saW5rdHlwZSA9IENGQ1RSTF9TUlZfVVRJTDsKLQkJbC0+ZW5kcG9pbnQgPSAweDAwOwotCQlsLT5jaHR5cGUgPSAweDAwOwotCQlzdHJuY3B5KGwtPnUudXRpbGl0eS5uYW1lLCBzLT5zb2NrYWRkci51LnV0aWwuc2VydmljZSwKLQkJCXNpemVvZihsLT51LnV0aWxpdHkubmFtZSktMSk7Ci0JCWwtPnUudXRpbGl0eS5uYW1lW3NpemVvZihsLT51LnV0aWxpdHkubmFtZSktMV0gPSAwOwotCQljYWlmX2Fzc2VydChzaXplb2YobC0+dS51dGlsaXR5Lm5hbWUpID4gMTApOwotCQlsLT51LnV0aWxpdHkucGFyYW1sZW4gPSBzLT5wYXJhbS5zaXplOwotCQlpZiAobC0+dS51dGlsaXR5LnBhcmFtbGVuID4gc2l6ZW9mKGwtPnUudXRpbGl0eS5wYXJhbXMpKQotCQkJbC0+dS51dGlsaXR5LnBhcmFtbGVuID0gc2l6ZW9mKGwtPnUudXRpbGl0eS5wYXJhbXMpOwotCi0JCW1lbWNweShsLT51LnV0aWxpdHkucGFyYW1zLCBzLT5wYXJhbS5kYXRhLAotCQkgICAgICAgbC0+dS51dGlsaXR5LnBhcmFtbGVuKTsKLQotCQlicmVhazsKLQljYXNlIENBSUZQUk9UT19ERUJVRzoKLQkJbC0+bGlua3R5cGUgPSBDRkNUUkxfU1JWX0RCRzsKLQkJbC0+ZW5kcG9pbnQgPSBzLT5zb2NrYWRkci51LmRiZy5zZXJ2aWNlOwotCQlsLT5jaHR5cGUgPSBzLT5zb2NrYWRkci51LmRiZy50eXBlOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9uZXQvY2FpZi9jYWlmX2Rldi5jIGIvbmV0L2NhaWYvY2FpZl9kZXYuYwppbmRleCBhNDJhNDA4Li4zNjZjYTBmIDEwMDY0NAotLS0gYS9uZXQvY2FpZi9jYWlmX2Rldi5jCisrKyBiL25ldC9jYWlmL2NhaWZfZGV2LmMKQEAgLTEyLDQ5ICsxMiw1MSBAQAogI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiVzKCk6ICIgZm10LCBfX2Z1bmNfXwogCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bmV0L25ldG5zL2dlbmVyaWMuaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPG5ldC9wa3Rfc2NoZWQuaD4KICNpbmNsdWRlIDxuZXQvY2FpZi9jYWlmX2RldmljZS5oPgotI2luY2x1ZGUgPG5ldC9jYWlmL2NhaWZfZGV2Lmg+CiAjaW5jbHVkZSA8bmV0L2NhaWYvY2FpZl9sYXllci5oPgogI2luY2x1ZGUgPG5ldC9jYWlmL2NmcGt0Lmg+CiAjaW5jbHVkZSA8bmV0L2NhaWYvY2ZjbmZnLmg+CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLSNkZWZpbmUgVElNRU9VVCAoSFoqNSkKIAogLyogVXNlZCBmb3IgbG9jYWwgdHJhY2tpbmcgb2YgdGhlIENBSUYgbmV0IGRldmljZXMgKi8KIHN0cnVjdCBjYWlmX2RldmljZV9lbnRyeSB7CiAJc3RydWN0IGNmbGF5ZXIgbGF5ZXI7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCWF0b21pY190IGluX3VzZTsKLQlhdG9taWNfdCBzdGF0ZTsKLQl1MTYgcGh5aWQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKLQl3YWl0X3F1ZXVlX2hlYWRfdCBldmVudDsKKwlpbnQgX19wZXJjcHUgKnBjcHVfcmVmY250OwogfTsKIAogc3RydWN0IGNhaWZfZGV2aWNlX2VudHJ5X2xpc3QgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAkvKiBQcm90ZWN0cyBzaW11bGFub3VzIGRlbGV0ZXMgaW4gbGlzdCAqLwotCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKIH07CiAKIHN0cnVjdCBjYWlmX25ldCB7CisJc3RydWN0IGNmY25mZyAqY2ZnOwogCXN0cnVjdCBjYWlmX2RldmljZV9lbnRyeV9saXN0IGNhaWZkZXZzOwogfTsKIAogc3RhdGljIGludCBjYWlmX25ldF9pZDsKLXN0YXRpYyBzdHJ1Y3QgY2ZjbmZnICpjZmc7CisKK3N0cnVjdCBjZmNuZmcgKmdldF9jZmNuZmcoc3RydWN0IG5ldCAqbmV0KQoreworCXN0cnVjdCBjYWlmX25ldCAqY2FpZm47CisJQlVHX09OKCFuZXQpOworCWNhaWZuID0gbmV0X2dlbmVyaWMobmV0LCBjYWlmX25ldF9pZCk7CisJQlVHX09OKCFjYWlmbik7CisJcmV0dXJuIGNhaWZuLT5jZmc7Cit9CitFWFBPUlRfU1lNQk9MKGdldF9jZmNuZmcpOwogCiBzdGF0aWMgc3RydWN0IGNhaWZfZGV2aWNlX2VudHJ5X2xpc3QgKmNhaWZfZGV2aWNlX2xpc3Qoc3RydWN0IG5ldCAqbmV0KQogewpAQCAtNjUsMTkgKzY3LDM5IEBACiAJcmV0dXJuICZjYWlmbi0+Y2FpZmRldnM7CiB9CiAKK3N0YXRpYyB2b2lkIGNhaWZkX3B1dChzdHJ1Y3QgY2FpZl9kZXZpY2VfZW50cnkgKmUpCit7CisJaXJxc2FmZV9jcHVfZGVjKCplLT5wY3B1X3JlZmNudCk7Cit9CisKK3N0YXRpYyB2b2lkIGNhaWZkX2hvbGQoc3RydWN0IGNhaWZfZGV2aWNlX2VudHJ5ICplKQoreworCWlycXNhZmVfY3B1X2luYygqZS0+cGNwdV9yZWZjbnQpOworfQorCitzdGF0aWMgaW50IGNhaWZkX3JlZmNudF9yZWFkKHN0cnVjdCBjYWlmX2RldmljZV9lbnRyeSAqZSkKK3sKKwlpbnQgaSwgcmVmY250ID0gMDsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKKwkJcmVmY250ICs9ICpwZXJfY3B1X3B0cihlLT5wY3B1X3JlZmNudCwgaSk7CisJcmV0dXJuIHJlZmNudDsKK30KKwogLyogQWxsb2NhdGUgbmV3IENBSUYgZGV2aWNlLiAqLwogc3RhdGljIHN0cnVjdCBjYWlmX2RldmljZV9lbnRyeSAqY2FpZl9kZXZpY2VfYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgY2FpZl9kZXZpY2VfZW50cnlfbGlzdCAqY2FpZmRldnM7CiAJc3RydWN0IGNhaWZfZGV2aWNlX2VudHJ5ICpjYWlmZDsKKwogCWNhaWZkZXZzID0gY2FpZl9kZXZpY2VfbGlzdChkZXZfbmV0KGRldikpOwogCUJVR19PTighY2FpZmRldnMpOworCiAJY2FpZmQgPSBremFsbG9jKHNpemVvZigqY2FpZmQpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWNhaWZkKQogCQlyZXR1cm4gTlVMTDsKKwljYWlmZC0+cGNwdV9yZWZjbnQgPSBhbGxvY19wZXJjcHUoaW50KTsKIAljYWlmZC0+bmV0ZGV2ID0gZGV2OwotCWxpc3RfYWRkKCZjYWlmZC0+bGlzdCwgJmNhaWZkZXZzLT5saXN0KTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjYWlmZC0+ZXZlbnQpOworCWRldl9ob2xkKGRldik7CiAJcmV0dXJuIGNhaWZkOwogfQogCkBAIC04Nyw5OCArMTA5LDYwIEBACiAJICAgIGNhaWZfZGV2aWNlX2xpc3QoZGV2X25ldChkZXYpKTsKIAlzdHJ1Y3QgY2FpZl9kZXZpY2VfZW50cnkgKmNhaWZkOwogCUJVR19PTighY2FpZmRldnMpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2FpZmQsICZjYWlmZGV2cy0+bGlzdCwgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNhaWZkLCAmY2FpZmRldnMtPmxpc3QsIGxpc3QpIHsKIAkJaWYgKGNhaWZkLT5uZXRkZXYgPT0gZGV2KQogCQkJcmV0dXJuIGNhaWZkOwogCX0KIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgY2FpZl9kZXZpY2VfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBjYWlmX2RldmljZV9lbnRyeV9saXN0ICpjYWlmZGV2cyA9Ci0JICAgIGNhaWZfZGV2aWNlX2xpc3QoZGV2X25ldChkZXYpKTsKLQlzdHJ1Y3QgY2FpZl9kZXZpY2VfZW50cnkgKmNhaWZkOwotCUFTU0VSVF9SVE5MKCk7Ci0JaWYgKGRldi0+dHlwZSAhPSBBUlBIUkRfQ0FJRikKLQkJcmV0dXJuOwotCi0Jc3Bpbl9sb2NrX2JoKCZjYWlmZGV2cy0+bG9jayk7Ci0JY2FpZmQgPSBjYWlmX2dldChkZXYpOwotCWlmIChjYWlmZCA9PSBOVUxMKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZjYWlmZGV2cy0+bG9jayk7Ci0JCXJldHVybjsKLQl9Ci0KLQlsaXN0X2RlbCgmY2FpZmQtPmxpc3QpOwotCXNwaW5fdW5sb2NrX2JoKCZjYWlmZGV2cy0+bG9jayk7Ci0KLQlrZnJlZShjYWlmZCk7Ci19Ci0KIHN0YXRpYyBpbnQgdHJhbnNtaXQoc3RydWN0IGNmbGF5ZXIgKmxheWVyLCBzdHJ1Y3QgY2Zwa3QgKnBrdCkKIHsKKwlpbnQgZXJyOwogCXN0cnVjdCBjYWlmX2RldmljZV9lbnRyeSAqY2FpZmQgPQogCSAgICBjb250YWluZXJfb2YobGF5ZXIsIHN0cnVjdCBjYWlmX2RldmljZV9lbnRyeSwgbGF5ZXIpOwotCXN0cnVjdCBza19idWZmICpza2IsICpza2IyOwotCWludCByZXQgPSAtRUlOVkFMOworCXN0cnVjdCBza19idWZmICpza2I7CisKIAlza2IgPSBjZnBrdF90b25hdGl2ZShwa3QpOwogCXNrYi0+ZGV2ID0gY2FpZmQtPm5ldGRldjsKLQkvKgotCSAqIERvbid0IGFsbG93IFNLQiB0byBiZSBkZXN0cm95ZWQgdXBvbiBlcnJvciwgYnV0IHNpZ25hbCByZXNlbmQKLQkgKiBub3RpZmljYXRpb24gdG8gY2xpZW50cy4gV2UgY2FuJ3QgcmVseSBvbiB0aGUgcmV0dXJuIHZhbHVlIGFzCi0JICogY29uZ2VzdGlvbiAoTkVUX1hNSVRfQ04pIHNvbWV0aW1lcyBkcm9wcyB0aGUgcGFja2V0LCBzb21ldGltZXMgZG9uJ3QuCi0JICovCi0JaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoY2FpZmQtPm5ldGRldikpCi0JCXJldHVybiAtRUFHQUlOOwotCXNrYjIgPSBza2JfZ2V0KHNrYik7CiAKLQlyZXQgPSBkZXZfcXVldWVfeG1pdChza2IyKTsKKwllcnIgPSBkZXZfcXVldWVfeG1pdChza2IpOworCWlmIChlcnIgPiAwKQorCQllcnIgPSAtRUlPOwogCi0JaWYgKCFyZXQpCi0JCWtmcmVlX3NrYihza2IpOwotCWVsc2UKLQkJcmV0dXJuIC1FQUdBSU47Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBtb2RlbWNtZChzdHJ1Y3QgY2ZsYXllciAqbGF5ciwgZW51bSBjYWlmX21vZGVtY21kIGN0cmwpCi17Ci0Jc3RydWN0IGNhaWZfZGV2aWNlX2VudHJ5ICpjYWlmZDsKLQlzdHJ1Y3QgY2FpZl9kZXZfY29tbW9uICpjYWlmZGV2OwotCWNhaWZkID0gY29udGFpbmVyX29mKGxheXIsIHN0cnVjdCBjYWlmX2RldmljZV9lbnRyeSwgbGF5ZXIpOwotCWNhaWZkZXYgPSBuZXRkZXZfcHJpdihjYWlmZC0+bmV0ZGV2KTsKLQlpZiAoY3RybCA9PSBfQ0FJRl9NT0RFTUNNRF9QSFlJRl9VU0VGVUxMKSB7Ci0JCWF0b21pY19zZXQoJmNhaWZkLT5pbl91c2UsIDEpOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNhaWZkLT5ldmVudCk7Ci0KLQl9IGVsc2UgaWYgKGN0cmwgPT0gX0NBSUZfTU9ERU1DTURfUEhZSUZfVVNFTEVTUykgewotCQlhdG9taWNfc2V0KCZjYWlmZC0+aW5fdXNlLCAwKTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjYWlmZC0+ZXZlbnQpOwotCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogfQogCiAvKgotICogU3R1ZmYgcmVjZWl2ZWQgcGFja2V0cyB0byBhc3NvY2lhdGVkIHNvY2tldHMuCisgKiBTdHVmZiByZWNlaXZlZCBwYWNrZXRzIGludG8gdGhlIENBSUYgc3RhY2suCiAgKiBPbiBlcnJvciwgcmV0dXJucyBub24temVybyBhbmQgcmVsZWFzZXMgdGhlIHNrYi4KICAqLwogc3RhdGljIGludCByZWNlaXZlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcGt0dHlwZSwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQogewotCXN0cnVjdCBuZXQgKm5ldDsKIAlzdHJ1Y3QgY2Zwa3QgKnBrdDsKIAlzdHJ1Y3QgY2FpZl9kZXZpY2VfZW50cnkgKmNhaWZkOwotCW5ldCA9IGRldl9uZXQoZGV2KTsKKwogCXBrdCA9IGNmcGt0X2Zyb21uYXRpdmUoQ0FJRl9ESVJfSU4sIHNrYik7CisKKwlyY3VfcmVhZF9sb2NrKCk7CiAJY2FpZmQgPSBjYWlmX2dldChkZXYpOwotCWlmICghY2FpZmQgfHwgIWNhaWZkLT5sYXllci51cCB8fCAhY2FpZmQtPmxheWVyLnVwLT5yZWNlaXZlKQotCQlyZXR1cm4gTkVUX1JYX0RST1A7CiAKLQlpZiAoY2FpZmQtPmxheWVyLnVwLT5yZWNlaXZlKGNhaWZkLT5sYXllci51cCwgcGt0KSkKKwlpZiAoIWNhaWZkIHx8ICFjYWlmZC0+bGF5ZXIudXAgfHwgIWNhaWZkLT5sYXllci51cC0+cmVjZWl2ZSB8fAorCQkJIW5ldGlmX29wZXJfdXAoY2FpZmQtPm5ldGRldikpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gTkVUX1JYX0RST1A7CisJfQogCisJLyogSG9sZCByZWZlcmVuY2UgdG8gbmV0ZGV2aWNlIHdoaWxlIHVzaW5nIENBSUYgc3RhY2sgKi8KKwljYWlmZF9ob2xkKGNhaWZkKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWNhaWZkLT5sYXllci51cC0+cmVjZWl2ZShjYWlmZC0+bGF5ZXIudXAsIHBrdCk7CisKKwkvKiBSZWxlYXNlIHJlZmVyZW5jZSB0byBzdGFjayB1cHdhcmRzICovCisJY2FpZmRfcHV0KGNhaWZkKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTg5LDE1ICsxNzMsMjUgQEAKIAogc3RhdGljIHZvaWQgZGV2X2Zsb3djdHJsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBvbikKIHsKLQlzdHJ1Y3QgY2FpZl9kZXZpY2VfZW50cnkgKmNhaWZkID0gY2FpZl9nZXQoZGV2KTsKLQlpZiAoIWNhaWZkIHx8ICFjYWlmZC0+bGF5ZXIudXAgfHwgIWNhaWZkLT5sYXllci51cC0+Y3RybGNtZCkKKwlzdHJ1Y3QgY2FpZl9kZXZpY2VfZW50cnkgKmNhaWZkOworCisJcmN1X3JlYWRfbG9jaygpOworCisJY2FpZmQgPSBjYWlmX2dldChkZXYpOworCWlmICghY2FpZmQgfHwgIWNhaWZkLT5sYXllci51cCB8fCAhY2FpZmQtPmxheWVyLnVwLT5jdHJsY21kKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm47CisJfQorCisJY2FpZmRfaG9sZChjYWlmZCk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAljYWlmZC0+bGF5ZXIudXAtPmN0cmxjbWQoY2FpZmQtPmxheWVyLnVwLAogCQkJCSBvbiA/CiAJCQkJIF9DQUlGX0NUUkxDTURfUEhZSUZfRkxPV19PTl9JTkQgOgogCQkJCSBfQ0FJRl9DVFJMQ01EX1BIWUlGX0ZMT1dfT0ZGX0lORCwKIAkJCQkgY2FpZmQtPmxheWVyLmlkKTsKKwljYWlmZF9wdXQoY2FpZmQpOwogfQogCiAvKiBub3RpZnkgQ2FpZiBvZiBkZXZpY2UgZXZlbnRzICovCkBAIC0yMDgsMzcgKzIwMiwyOCBAQAogCXN0cnVjdCBjYWlmX2RldmljZV9lbnRyeSAqY2FpZmQgPSBOVUxMOwogCXN0cnVjdCBjYWlmX2Rldl9jb21tb24gKmNhaWZkZXY7CiAJZW51bSBjZmNuZmdfcGh5X3ByZWZlcmVuY2UgcHJlZjsKLQlpbnQgcmVzID0gLUVJTlZBTDsKIAllbnVtIGNmY25mZ19waHlfdHlwZSBwaHlfdHlwZTsKKwlzdHJ1Y3QgY2ZjbmZnICpjZmc7CisJc3RydWN0IGNhaWZfZGV2aWNlX2VudHJ5X2xpc3QgKmNhaWZkZXZzID0KKwkgICAgY2FpZl9kZXZpY2VfbGlzdChkZXZfbmV0KGRldikpOwogCiAJaWYgKGRldi0+dHlwZSAhPSBBUlBIUkRfQ0FJRikKIAkJcmV0dXJuIDA7CiAKKwljZmcgPSBnZXRfY2ZjbmZnKGRldl9uZXQoZGV2KSk7CisJaWYgKGNmZyA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwogCXN3aXRjaCAod2hhdCkgewogCWNhc2UgTkVUREVWX1JFR0lTVEVSOgotCQluZXRkZXZfaW5mbyhkZXYsICJyZWdpc3RlclxuIik7CiAJCWNhaWZkID0gY2FpZl9kZXZpY2VfYWxsb2MoZGV2KTsKLQkJaWYgKGNhaWZkID09IE5VTEwpCi0JCQlicmVhazsKKwkJaWYgKCFjYWlmZCkKKwkJCXJldHVybiAwOworCiAJCWNhaWZkZXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCQljYWlmZGV2LT5mbG93Y3RybCA9IGRldl9mbG93Y3RybDsKLQkJYXRvbWljX3NldCgmY2FpZmQtPnN0YXRlLCB3aGF0KTsKLQkJcmVzID0gMDsKLQkJYnJlYWs7CiAKLQljYXNlIE5FVERFVl9VUDoKLQkJbmV0ZGV2X2luZm8oZGV2LCAidXBcbiIpOwotCQljYWlmZCA9IGNhaWZfZ2V0KGRldik7Ci0JCWlmIChjYWlmZCA9PSBOVUxMKQotCQkJYnJlYWs7Ci0JCWNhaWZkZXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCQlpZiAoYXRvbWljX3JlYWQoJmNhaWZkLT5zdGF0ZSkgPT0gTkVUREVWX1VQKSB7Ci0JCQluZXRkZXZfaW5mbyhkZXYsICJhbHJlYWR5IHVwXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWF0b21pY19zZXQoJmNhaWZkLT5zdGF0ZSwgd2hhdCk7CiAJCWNhaWZkLT5sYXllci50cmFuc21pdCA9IHRyYW5zbWl0OwotCQljYWlmZC0+bGF5ZXIubW9kZW1jbWQgPSBtb2RlbWNtZDsKIAogCQlpZiAoY2FpZmRldi0+dXNlX2ZyYWcpCiAJCQlwaHlfdHlwZSA9IENGUEhZVFlQRV9GUkFHOwpAQCAtMjU2LDYyICsyNDEsOTQgQEAKIAkJCXByZWYgPSBDRlBIWVBSRUZfSElHSF9CVzsKIAkJCWJyZWFrOwogCQl9Ci0JCWRldl9ob2xkKGRldik7Ci0JCWNmY25mZ19hZGRfcGh5X2xheWVyKGdldF9jYWlmX2NvbmYoKSwKLQkJCQkgICAgIHBoeV90eXBlLAotCQkJCSAgICAgZGV2LAotCQkJCSAgICAgJmNhaWZkLT5sYXllciwKLQkJCQkgICAgICZjYWlmZC0+cGh5aWQsCi0JCQkJICAgICBwcmVmLAotCQkJCSAgICAgY2FpZmRldi0+dXNlX2ZjcywKLQkJCQkgICAgIGNhaWZkZXYtPnVzZV9zdHgpOwogCQlzdHJuY3B5KGNhaWZkLT5sYXllci5uYW1lLCBkZXYtPm5hbWUsCiAJCQlzaXplb2YoY2FpZmQtPmxheWVyLm5hbWUpIC0gMSk7CiAJCWNhaWZkLT5sYXllci5uYW1lW3NpemVvZihjYWlmZC0+bGF5ZXIubmFtZSkgLSAxXSA9IDA7CisKKwkJbXV0ZXhfbG9jaygmY2FpZmRldnMtPmxvY2spOworCQlsaXN0X2FkZF9yY3UoJmNhaWZkLT5saXN0LCAmY2FpZmRldnMtPmxpc3QpOworCisJCWNmY25mZ19hZGRfcGh5X2xheWVyKGNmZywKKwkJCQkgICAgIHBoeV90eXBlLAorCQkJCSAgICAgZGV2LAorCQkJCSAgICAgJmNhaWZkLT5sYXllciwKKwkJCQkgICAgIHByZWYsCisJCQkJICAgICBjYWlmZGV2LT51c2VfZmNzLAorCQkJCSAgICAgY2FpZmRldi0+dXNlX3N0eCk7CisJCW11dGV4X3VubG9jaygmY2FpZmRldnMtPmxvY2spOwogCQlicmVhazsKIAotCWNhc2UgTkVUREVWX0dPSU5HX0RPV046CisJY2FzZSBORVRERVZfVVA6CisJCXJjdV9yZWFkX2xvY2soKTsKKwogCQljYWlmZCA9IGNhaWZfZ2V0KGRldik7Ci0JCWlmIChjYWlmZCA9PSBOVUxMKQorCQlpZiAoY2FpZmQgPT0gTlVMTCkgeworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlicmVhazsKLQkJbmV0ZGV2X2luZm8oZGV2LCAiZ29pbmcgZG93blxuIik7CisJCX0KIAotCQlpZiAoYXRvbWljX3JlYWQoJmNhaWZkLT5zdGF0ZSkgPT0gTkVUREVWX0dPSU5HX0RPV04gfHwKLQkJCWF0b21pY19yZWFkKCZjYWlmZC0+c3RhdGUpID09IE5FVERFVl9ET1dOKQotCQkJYnJlYWs7CisJCWNmY25mZ19zZXRfcGh5X3N0YXRlKGNmZywgJmNhaWZkLT5sYXllciwgdHJ1ZSk7CisJCXJjdV9yZWFkX3VubG9jaygpOwogCi0JCWF0b21pY19zZXQoJmNhaWZkLT5zdGF0ZSwgd2hhdCk7Ci0JCWlmICghY2FpZmQgfHwgIWNhaWZkLT5sYXllci51cCB8fCAhY2FpZmQtPmxheWVyLnVwLT5jdHJsY21kKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWNhaWZkLT5sYXllci51cC0+Y3RybGNtZChjYWlmZC0+bGF5ZXIudXAsCi0JCQkJCSBfQ0FJRl9DVFJMQ01EX1BIWUlGX0RPV05fSU5ELAotCQkJCQkgY2FpZmQtPmxheWVyLmlkKTsKLQkJbWlnaHRfc2xlZXAoKTsKLQkJcmVzID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoY2FpZmQtPmV2ZW50LAotCQkJCQlhdG9taWNfcmVhZCgmY2FpZmQtPmluX3VzZSkgPT0gMCwKLQkJCQkJVElNRU9VVCk7CiAJCWJyZWFrOwogCiAJY2FzZSBORVRERVZfRE9XTjoKKwkJcmN1X3JlYWRfbG9jaygpOworCiAJCWNhaWZkID0gY2FpZl9nZXQoZGV2KTsKLQkJaWYgKGNhaWZkID09IE5VTEwpCi0JCQlicmVhazsKLQkJbmV0ZGV2X2luZm8oZGV2LCAiZG93blxuIik7Ci0JCWlmIChhdG9taWNfcmVhZCgmY2FpZmQtPmluX3VzZSkpCi0JCQluZXRkZXZfd2FybihkZXYsCi0JCQkJICAgICJVbnJlZ2lzdGVyaW5nIGFuIGFjdGl2ZSBDQUlGIGRldmljZVxuIik7Ci0JCWNmY25mZ19kZWxfcGh5X2xheWVyKGdldF9jYWlmX2NvbmYoKSwgJmNhaWZkLT5sYXllcik7Ci0JCWRldl9wdXQoZGV2KTsKLQkJYXRvbWljX3NldCgmY2FpZmQtPnN0YXRlLCB3aGF0KTsKKwkJaWYgKCFjYWlmZCB8fCAhY2FpZmQtPmxheWVyLnVwIHx8ICFjYWlmZC0+bGF5ZXIudXAtPmN0cmxjbWQpIHsKKwkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQljZmNuZmdfc2V0X3BoeV9zdGF0ZShjZmcsICZjYWlmZC0+bGF5ZXIsIGZhbHNlKTsKKwkJY2FpZmRfaG9sZChjYWlmZCk7CisJCXJjdV9yZWFkX3VubG9jaygpOworCisJCWNhaWZkLT5sYXllci51cC0+Y3RybGNtZChjYWlmZC0+bGF5ZXIudXAsCisJCQkJCSBfQ0FJRl9DVFJMQ01EX1BIWUlGX0RPV05fSU5ELAorCQkJCQkgY2FpZmQtPmxheWVyLmlkKTsKKwkJY2FpZmRfcHV0KGNhaWZkKTsKIAkJYnJlYWs7CiAKIAljYXNlIE5FVERFVl9VTlJFR0lTVEVSOgorCQltdXRleF9sb2NrKCZjYWlmZGV2cy0+bG9jayk7CisKIAkJY2FpZmQgPSBjYWlmX2dldChkZXYpOwotCQlpZiAoY2FpZmQgPT0gTlVMTCkKKwkJaWYgKGNhaWZkID09IE5VTEwpIHsKKwkJCW11dGV4X3VubG9jaygmY2FpZmRldnMtPmxvY2spOwogCQkJYnJlYWs7Ci0JCW5ldGRldl9pbmZvKGRldiwgInVucmVnaXN0ZXJcbiIpOwotCQlhdG9taWNfc2V0KCZjYWlmZC0+c3RhdGUsIHdoYXQpOwotCQljYWlmX2RldmljZV9kZXN0cm95KGRldik7CisJCX0KKwkJbGlzdF9kZWxfcmN1KCZjYWlmZC0+bGlzdCk7CisKKwkJLyoKKwkJICogTkVUREVWX1VOUkVHSVNURVIgaXMgY2FsbGVkIHJlcGVhdGVkbHkgdW50aWwgYWxsIHJlZmVyZW5jZQorCQkgKiBjb3VudHMgZm9yIHRoZSBuZXQtZGV2aWNlIGFyZSByZWxlYXNlZC4gSWYgcmVmZXJlbmNlcyB0bworCQkgKiBjYWlmZCBpcyB0YWtlbiwgc2ltcGx5IGlnbm9yZSBORVRERVZfVU5SRUdJU1RFUiBhbmQgd2FpdCBmb3IKKwkJICogdGhlIG5leHQgY2FsbCB0byBORVRERVZfVU5SRUdJU1RFUi4KKwkJICoKKwkJICogSWYgYW55IHBhY2tldHMgYXJlIGluIGZsaWdodCBkb3duIHRoZSBDQUlGIFN0YWNrLAorCQkgKiBjZmNuZmdfZGVsX3BoeV9sYXllciB3aWxsIHJldHVybiBub256ZXJvLgorCQkgKiBJZiBubyBwYWNrZXRzIGFyZSBpbiBmbGlnaHQsIHRoZSBDQUlGIFN0YWNrIGFzc29jaWF0ZWQKKwkJICogd2l0aCB0aGUgbmV0LWRldmljZSB1bi1yZWdpc3RlcmluZyBpcyBmcmVlZC4KKwkJICovCisKKwkJaWYgKGNhaWZkX3JlZmNudF9yZWFkKGNhaWZkKSAhPSAwIHx8CisJCQljZmNuZmdfZGVsX3BoeV9sYXllcihjZmcsICZjYWlmZC0+bGF5ZXIpICE9IDApIHsKKworCQkJcHJfaW5mbygiV2FpdCBmb3IgZGV2aWNlIGludXNlXG4iKTsKKwkJCS8qIEVucm9sZSBkZXZpY2UgaWYgQ0FJRiBTdGFjayBpcyBzdGlsbCBpbiB1c2UgKi8KKwkJCWxpc3RfYWRkX3JjdSgmY2FpZmQtPmxpc3QsICZjYWlmZGV2cy0+bGlzdCk7CisJCQltdXRleF91bmxvY2soJmNhaWZkZXZzLT5sb2NrKTsKKwkJCWJyZWFrOworCQl9CisKKwkJc3luY2hyb25pemVfcmN1KCk7CisJCWRldl9wdXQoY2FpZmQtPm5ldGRldik7CisJCWZyZWVfcGVyY3B1KGNhaWZkLT5wY3B1X3JlZmNudCk7CisJCWtmcmVlKGNhaWZkKTsKKworCQltdXRleF91bmxvY2soJmNhaWZkZXZzLT5sb2NrKTsKIAkJYnJlYWs7CiAJfQogCXJldHVybiAwOwpAQCAtMzIyLDYxICszMzksNjAgQEAKIAkucHJpb3JpdHkgPSAwLAogfTsKIAotCi1zdHJ1Y3QgY2ZjbmZnICpnZXRfY2FpZl9jb25mKHZvaWQpCi17Ci0JcmV0dXJuIGNmZzsKLX0KLUVYUE9SVF9TWU1CT0woZ2V0X2NhaWZfY29uZik7Ci0KLWludCBjYWlmX2Nvbm5lY3RfY2xpZW50KHN0cnVjdCBjYWlmX2Nvbm5lY3RfcmVxdWVzdCAqY29ubl9yZXEsCi0JCQlzdHJ1Y3QgY2ZsYXllciAqY2xpZW50X2xheWVyLCBpbnQgKmlmaW5kZXgsCi0JCQlpbnQgKmhlYWRyb29tLCBpbnQgKnRhaWxyb29tKQotewotCXN0cnVjdCBjZmN0cmxfbGlua19wYXJhbSBwYXJhbTsKLQlpbnQgcmV0OwotCXJldCA9IGNvbm5lY3RfcmVxX3RvX2xpbmtfcGFyYW0oZ2V0X2NhaWZfY29uZigpLCBjb25uX3JlcSwgJnBhcmFtKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCS8qIEhvb2sgdXAgdGhlIGFkYXB0YXRpb24gbGF5ZXIuICovCi0JcmV0dXJuIGNmY25mZ19hZGRfYWRhcHRhdGlvbl9sYXllcihnZXRfY2FpZl9jb25mKCksICZwYXJhbSwKLQkJCQkJY2xpZW50X2xheWVyLCBpZmluZGV4LAotCQkJCQloZWFkcm9vbSwgdGFpbHJvb20pOwotfQotRVhQT1JUX1NZTUJPTChjYWlmX2Nvbm5lY3RfY2xpZW50KTsKLQotaW50IGNhaWZfZGlzY29ubmVjdF9jbGllbnQoc3RydWN0IGNmbGF5ZXIgKmFkYXBfbGF5ZXIpCi17Ci0gICAgICAgcmV0dXJuIGNmY25mZ19kaXNjb25uX2FkYXB0X2xheWVyKGdldF9jYWlmX2NvbmYoKSwgYWRhcF9sYXllcik7Ci19Ci1FWFBPUlRfU1lNQk9MKGNhaWZfZGlzY29ubmVjdF9jbGllbnQpOwotCi12b2lkIGNhaWZfcmVsZWFzZV9jbGllbnQoc3RydWN0IGNmbGF5ZXIgKmFkYXBfbGF5ZXIpCi17Ci0gICAgICAgY2ZjbmZnX3JlbGVhc2VfYWRhcF9sYXllcihhZGFwX2xheWVyKTsKLX0KLUVYUE9SVF9TWU1CT0woY2FpZl9yZWxlYXNlX2NsaWVudCk7Ci0KIC8qIFBlci1uYW1lc3BhY2UgQ2FpZiBkZXZpY2VzIGhhbmRsaW5nICovCiBzdGF0aWMgaW50IGNhaWZfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBjYWlmX25ldCAqY2FpZm4gPSBuZXRfZ2VuZXJpYyhuZXQsIGNhaWZfbmV0X2lkKTsKKwlCVUdfT04oIWNhaWZuKTsKIAlJTklUX0xJU1RfSEVBRCgmY2FpZm4tPmNhaWZkZXZzLmxpc3QpOwotCXNwaW5fbG9ja19pbml0KCZjYWlmbi0+Y2FpZmRldnMubG9jayk7CisJbXV0ZXhfaW5pdCgmY2FpZm4tPmNhaWZkZXZzLmxvY2spOworCisJY2FpZm4tPmNmZyA9IGNmY25mZ19jcmVhdGUoKTsKKwlpZiAoIWNhaWZuLT5jZmcpIHsKKwkJcHJfd2FybigiY2FuJ3QgY3JlYXRlIGNmY25mZ1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBjYWlmX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCWludCByZXM7CisJc3RydWN0IGNhaWZfZGV2aWNlX2VudHJ5ICpjYWlmZCwgKnRtcDsKKwlzdHJ1Y3QgY2FpZl9kZXZpY2VfZW50cnlfbGlzdCAqY2FpZmRldnMgPQorCSAgICBjYWlmX2RldmljZV9saXN0KG5ldCk7CisJc3RydWN0IGNmY25mZyAqY2ZnOworCiAJcnRubF9sb2NrKCk7Ci0JZm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7Ci0JCWlmIChkZXYtPnR5cGUgIT0gQVJQSFJEX0NBSUYpCi0JCQljb250aW51ZTsKLQkJcmVzID0gZGV2X2Nsb3NlKGRldik7Ci0JCWNhaWZfZGV2aWNlX2Rlc3Ryb3koZGV2KTsKKwltdXRleF9sb2NrKCZjYWlmZGV2cy0+bG9jayk7CisKKwljZmcgPSBnZXRfY2ZjbmZnKG5ldCk7CisJaWYgKGNmZyA9PSBOVUxMKSB7CisJCW11dGV4X3VubG9jaygmY2FpZmRldnMtPmxvY2spOworCQlyZXR1cm47CiAJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNhaWZkLCB0bXAsICZjYWlmZGV2cy0+bGlzdCwgbGlzdCkgeworCQlpbnQgaSA9IDA7CisJCWxpc3RfZGVsX3JjdSgmY2FpZmQtPmxpc3QpOworCQljZmNuZmdfc2V0X3BoeV9zdGF0ZShjZmcsICZjYWlmZC0+bGF5ZXIsIGZhbHNlKTsKKworCQl3aGlsZSAoaSA8IDEwICYmCisJCQkoY2FpZmRfcmVmY250X3JlYWQoY2FpZmQpICE9IDAgfHwKKwkJCWNmY25mZ19kZWxfcGh5X2xheWVyKGNmZywgJmNhaWZkLT5sYXllcikgIT0gMCkpIHsKKworCQkJcHJfaW5mbygiV2FpdCBmb3IgZGV2aWNlIGludXNlXG4iKTsKKwkJCW1zbGVlcCgyNTApOworCQkJaSsrOworCQl9CisJCXN5bmNocm9uaXplX3JjdSgpOworCQlkZXZfcHV0KGNhaWZkLT5uZXRkZXYpOworCQlmcmVlX3BlcmNwdShjYWlmZC0+cGNwdV9yZWZjbnQpOworCQlrZnJlZShjYWlmZCk7CisJfQorCWNmY25mZ19yZW1vdmUoY2ZnKTsKKworCW11dGV4X3VubG9jaygmY2FpZmRldnMtPmxvY2spOwogCXJ0bmxfdW5sb2NrKCk7CiB9CiAKQEAgLTM5MSwzMiArNDA3LDIzIEBACiBzdGF0aWMgaW50IF9faW5pdCBjYWlmX2RldmljZV9pbml0KHZvaWQpCiB7CiAJaW50IHJlc3VsdDsKLQljZmcgPSBjZmNuZmdfY3JlYXRlKCk7Ci0JaWYgKCFjZmcpIHsKLQkJcHJfd2FybigiY2FuJ3QgY3JlYXRlIGNmY25mZ1xuIik7Ci0JCWdvdG8gZXJyX2NmY25mZ19jcmVhdGVfZmFpbGVkOwotCX0KKwogCXJlc3VsdCA9IHJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoJmNhaWZfbmV0X29wcyk7CiAKLQlpZiAocmVzdWx0KSB7Ci0JCWtmcmVlKGNmZyk7Ci0JCWNmZyA9IE5VTEw7CisJaWYgKHJlc3VsdCkKIAkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0JZGV2X2FkZF9wYWNrKCZjYWlmX3BhY2tldF90eXBlKTsKKwogCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmY2FpZl9kZXZpY2Vfbm90aWZpZXIpOworCWRldl9hZGRfcGFjaygmY2FpZl9wYWNrZXRfdHlwZSk7CiAKIAlyZXR1cm4gcmVzdWx0OwotZXJyX2NmY25mZ19jcmVhdGVfZmFpbGVkOgotCXJldHVybiAtRU5PREVWOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY2FpZl9kZXZpY2VfZXhpdCh2b2lkKQogewotCWRldl9yZW1vdmVfcGFjaygmY2FpZl9wYWNrZXRfdHlwZSk7CiAJdW5yZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKCZjYWlmX25ldF9vcHMpOwogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZjYWlmX2RldmljZV9ub3RpZmllcik7Ci0JY2ZjbmZnX3JlbW92ZShjZmcpOworCWRldl9yZW1vdmVfcGFjaygmY2FpZl9wYWNrZXRfdHlwZSk7CiB9CiAKIG1vZHVsZV9pbml0KGNhaWZfZGV2aWNlX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2NhaWYvY2FpZl9zb2NrZXQuYyBiL25ldC9jYWlmL2NhaWZfc29ja2V0LmMKaW5kZXggMzdhNDAzNC4uYjg0MDM5NSAxMDA2NDQKLS0tIGEvbmV0L2NhaWYvY2FpZl9zb2NrZXQuYworKysgYi9uZXQvY2FpZi9jYWlmX3NvY2tldC5jCkBAIC00OCw2ICs0OCw3IEBACiAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCiBzdHJ1Y3QgZGVidWdfZnNfY291bnRlciB7CiAJYXRvbWljX3QgY2FpZl9ucl9zb2NrczsKKwlhdG9taWNfdCBjYWlmX3NvY2tfY3JlYXRlOwogCWF0b21pY190IG51bV9jb25uZWN0X3JlcTsKIAlhdG9taWNfdCBudW1fY29ubmVjdF9yZXNwOwogCWF0b21pY190IG51bV9jb25uZWN0X2ZhaWxfcmVzcDsKQEAgLTU5LDExICs2MCwxMSBAQAogCWF0b21pY190IG51bV9yeF9mbG93X29uOwogfTsKIHN0YXRpYyBzdHJ1Y3QgZGVidWdfZnNfY291bnRlciBjbnQ7Ci0jZGVmaW5lCWRiZnNfYXRvbWljX2luYyh2KSBhdG9taWNfaW5jKHYpCi0jZGVmaW5lCWRiZnNfYXRvbWljX2RlYyh2KSBhdG9taWNfZGVjKHYpCisjZGVmaW5lCWRiZnNfYXRvbWljX2luYyh2KSBhdG9taWNfaW5jX3JldHVybih2KQorI2RlZmluZQlkYmZzX2F0b21pY19kZWModikgYXRvbWljX2RlY19yZXR1cm4odikKICNlbHNlCi0jZGVmaW5lCWRiZnNfYXRvbWljX2luYyh2KQotI2RlZmluZQlkYmZzX2F0b21pY19kZWModikKKyNkZWZpbmUJZGJmc19hdG9taWNfaW5jKHYpIDAKKyNkZWZpbmUJZGJmc19hdG9taWNfZGVjKHYpIDAKICNlbmRpZgogCiBzdHJ1Y3QgY2FpZnNvY2sgewpAQCAtMTU1LDkgKzE1NiwxMCBAQAogCiAJaWYgKGF0b21pY19yZWFkKCZzay0+c2tfcm1lbV9hbGxvYykgKyBza2ItPnRydWVzaXplID49CiAJCSh1bnNpZ25lZClzay0+c2tfcmN2YnVmICYmIHJ4X2Zsb3dfaXNfb24oY2Zfc2spKSB7Ci0JCXByX2RlYnVnKCJzZW5kaW5nIGZsb3cgT0ZGIChxdWV1ZSBsZW4gPSAlZCAlZClcbiIsCi0JCQlhdG9taWNfcmVhZCgmY2Zfc2stPnNrLnNrX3JtZW1fYWxsb2MpLAotCQkJc2tfcmN2YnVmX2xvd3dhdGVyKGNmX3NrKSk7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcl9kZWJ1Zygic2VuZGluZyBmbG93IE9GRiAocXVldWUgbGVuID0gJWQgJWQpXG4iLAorCQkJCQlhdG9taWNfcmVhZCgmY2Zfc2stPnNrLnNrX3JtZW1fYWxsb2MpLAorCQkJCQlza19yY3ZidWZfbG93d2F0ZXIoY2Zfc2spKTsKIAkJc2V0X3J4X2Zsb3dfb2ZmKGNmX3NrKTsKIAkJZGJmc19hdG9taWNfaW5jKCZjbnQubnVtX3J4X2Zsb3dfb2ZmKTsKIAkJY2FpZl9mbG93X2N0cmwoc2ssIENBSUZfTU9ERU1DTURfRkxPV19PRkZfUkVRKTsKQEAgLTE2OCw3ICsxNzAsOCBAQAogCQlyZXR1cm4gZXJyOwogCWlmICghc2tfcm1lbV9zY2hlZHVsZShzaywgc2tiLT50cnVlc2l6ZSkgJiYgcnhfZmxvd19pc19vbihjZl9zaykpIHsKIAkJc2V0X3J4X2Zsb3dfb2ZmKGNmX3NrKTsKLQkJcHJfZGVidWcoInNlbmRpbmcgZmxvdyBPRkYgZHVlIHRvIHJtZW1fc2NoZWR1bGVcbiIpOworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJfZGVidWcoInNlbmRpbmcgZmxvdyBPRkYgZHVlIHRvIHJtZW1fc2NoZWR1bGVcbiIpOwogCQlkYmZzX2F0b21pY19pbmMoJmNudC5udW1fcnhfZmxvd19vZmYpOwogCQljYWlmX2Zsb3dfY3RybChzaywgQ0FJRl9NT0RFTUNNRF9GTE9XX09GRl9SRVEpOwogCX0KQEAgLTIwMiwxMyArMjA1LDI1IEBACiAJc2tiID0gY2Zwa3RfdG9uYXRpdmUocGt0KTsKIAogCWlmICh1bmxpa2VseShjZl9zay0+c2suc2tfc3RhdGUgIT0gQ0FJRl9DT05ORUNURUQpKSB7Ci0JCWNmcGt0X2Rlc3Ryb3kocGt0KTsKKwkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiAwOwogCX0KIAljYWlmX3F1ZXVlX3Jjdl9za2IoJmNmX3NrLT5zaywgc2tiKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgY2Zza19ob2xkKHN0cnVjdCBjZmxheWVyICpsYXlyKQoreworCXN0cnVjdCBjYWlmc29jayAqY2Zfc2sgPSBjb250YWluZXJfb2YobGF5ciwgc3RydWN0IGNhaWZzb2NrLCBsYXllcik7CisJc29ja19ob2xkKCZjZl9zay0+c2spOworfQorCitzdGF0aWMgdm9pZCBjZnNrX3B1dChzdHJ1Y3QgY2ZsYXllciAqbGF5cikKK3sKKwlzdHJ1Y3QgY2FpZnNvY2sgKmNmX3NrID0gY29udGFpbmVyX29mKGxheXIsIHN0cnVjdCBjYWlmc29jaywgbGF5ZXIpOworCXNvY2tfcHV0KCZjZl9zay0+c2spOworfQorCiAvKiBQYWNrZXQgQ29udHJvbCBDYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgZnJvbSBDQUlGICovCiBzdGF0aWMgdm9pZCBjYWlmX2N0cmxfY2Ioc3RydWN0IGNmbGF5ZXIgKmxheXIsCiAJCQkJZW51bSBjYWlmX2N0cmxjbWQgZmxvdywKQEAgLTIzMiw2ICsyNDcsOCBAQAogCiAJY2FzZSBDQUlGX0NUUkxDTURfSU5JVF9SU1A6CiAJCS8qIFdlJ3JlIG5vdyBjb25uZWN0ZWQgKi8KKwkJY2FpZl9jbGllbnRfcmVnaXN0ZXJfcmVmY250KCZjZl9zay0+bGF5ZXIsCisJCQkJCQljZnNrX2hvbGQsIGNmc2tfcHV0KTsKIAkJZGJmc19hdG9taWNfaW5jKCZjbnQubnVtX2Nvbm5lY3RfcmVzcCk7CiAJCWNmX3NrLT5zay5za19zdGF0ZSA9IENBSUZfQ09OTkVDVEVEOwogCQlzZXRfdHhfZmxvd19vbihjZl9zayk7CkBAIC0yNDIsNyArMjU5LDYgQEAKIAkJLyogV2UncmUgbm93IGRpc2Nvbm5lY3RlZCAqLwogCQljZl9zay0+c2suc2tfc3RhdGUgPSBDQUlGX0RJU0NPTk5FQ1RFRDsKIAkJY2Zfc2stPnNrLnNrX3N0YXRlX2NoYW5nZSgmY2Zfc2stPnNrKTsKLQkJY2ZjbmZnX3JlbGVhc2VfYWRhcF9sYXllcigmY2Zfc2stPmxheWVyKTsKIAkJYnJlYWs7CiAKIAljYXNlIENBSUZfQ1RSTENNRF9JTklUX0ZBSUxfUlNQOgpAQCAtNTE5LDQzICs1MzUsMTQgQEAKIAkJCWludCBub2Jsb2NrLCBsb25nIHRpbWVvKQogewogCXN0cnVjdCBjZnBrdCAqcGt0OwotCWludCByZXQsIGxvb3BjbnQgPSAwOwogCiAJcGt0ID0gY2Zwa3RfZnJvbW5hdGl2ZShDQUlGX0RJUl9PVVQsIHNrYik7Ci0JbWVtc2V0KGNmcGt0X2luZm8ocGt0KSwgMCwgc2l6ZW9mKHN0cnVjdCBjYWlmX3BheWxvYWRfaW5mbykpOwotCWRvIHsKKwltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHN0cnVjdCBjYWlmX3BheWxvYWRfaW5mbykpOwogCi0JCXJldCA9IC1FVElNRURPVVQ7CisJaWYgKGNmX3NrLT5sYXllci5kbiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkvKiBTbGlnaHQgcGFyYW5vaWEsIHByb2JhYmx5IG5vdCBuZWVkZWQuICovCi0JCWlmICh1bmxpa2VseShsb29wY250KysgPiAxMDAwKSkgewotCQkJcHJfd2FybigidHJhbnNtaXQgcmV0cmllcyBmYWlsZWQsIGVycm9yID0gJWRcbiIsIHJldCk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChjZl9zay0+bGF5ZXIuZG4gIT0gTlVMTCkKLQkJCXJldCA9IGNmX3NrLT5sYXllci5kbi0+dHJhbnNtaXQoY2Zfc2stPmxheWVyLmRuLCBwa3QpOwotCQlpZiAobGlrZWx5KHJldCA+PSAwKSkKLQkJCWJyZWFrOwotCQkvKiBpZiB0cmFuc21pdCByZXR1cm4gLUVBR0FJTiwgdGhlbiByZXRyeSAqLwotCQlpZiAobm9ibG9jayAmJiByZXQgPT0gLUVBR0FJTikKLQkJCWJyZWFrOwotCQl0aW1lbyA9IGNhaWZfd2FpdF9mb3JfZmxvd19vbihjZl9zaywgMCwgdGltZW8sICZyZXQpOwotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCXJldCA9IHNvY2tfaW50cl9lcnJubyh0aW1lbyk7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAocmV0KQotCQkJYnJlYWs7Ci0JCWlmIChjZl9zay0+c2suc2tfc3RhdGUgIT0gQ0FJRl9DT05ORUNURUQgfHwKLQkJCXNvY2tfZmxhZygmY2Zfc2stPnNrLCBTT0NLX0RFQUQpIHx8Ci0JCQkoY2Zfc2stPnNrLnNrX3NodXRkb3duICYgUkNWX1NIVVRET1dOKSkgewotCQkJcmV0ID0gLUVQSVBFOwotCQkJY2Zfc2stPnNrLnNrX2VyciA9IEVQSVBFOwotCQkJYnJlYWs7Ci0JCX0KLQl9IHdoaWxlIChyZXQgPT0gLUVBR0FJTik7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gY2Zfc2stPmxheWVyLmRuLT50cmFuc21pdChjZl9zay0+bGF5ZXIuZG4sIHBrdCk7CiB9CiAKIC8qIENvcGllZCBmcm9tIGFmX3VuaXg6dW5peF9kZ3JhbV9zZW5kbXNnLCBhbmQgYWRhcHRlZCB0byBDQUlGICovCkBAIC02MjAsNyArNjA3LDkgQEAKIAkJZ290byBlcnI7CiAJcmV0ID0gdHJhbnNtaXRfc2tiKHNrYiwgY2Zfc2ssIG5vYmxvY2ssIHRpbWVvKTsKIAlpZiAocmV0IDwgMCkKLQkJZ290byBlcnI7CisJCS8qIHNrYiBpcyBhbHJlYWR5IGZyZWVkICovCisJCXJldHVybiByZXQ7CisKIAlyZXR1cm4gbGVuOwogZXJyOgogCWtmcmVlX3NrYihza2IpOwpAQCAtODI2LDcgKzgxNSw3IEBACiAJCQkJc2stPnNrX3N0YXRlID09IENBSUZfRElTQ09OTkVDVEVEKTsKIAkJaWYgKHNrLT5za19zaHV0ZG93biAmIFNIVVRET1dOX01BU0spIHsKIAkJCS8qIEFsbG93IHJlLWNvbm5lY3QgYWZ0ZXIgU0hVVERPV05fSU5EICovCi0JCQljYWlmX2Rpc2Nvbm5lY3RfY2xpZW50KCZjZl9zay0+bGF5ZXIpOworCQkJY2FpZl9kaXNjb25uZWN0X2NsaWVudChzb2NrX25ldChzayksICZjZl9zay0+bGF5ZXIpOwogCQkJYnJlYWs7CiAJCX0KIAkJLyogTm8gcmVjb25uZWN0IG9uIGEgc2VxcGFja2V0IHNvY2tldCAqLwpAQCAtODUyLDcgKzg0MSw3IEBACiAJc29jay0+c3RhdGUgPSBTU19DT05ORUNUSU5HOwogCXNrLT5za19zdGF0ZSA9IENBSUZfQ09OTkVDVElORzsKIAotCS8qIENoZWNrIHByaW9yaXR5IHZhbHVlIGNvbWluZyBmcm9tIHNvY2tldCAqLworCS8qIENoZWNrIHByaW9yaXR5IHZhbHVlIGNvbW1pbmcgZnJvbSBzb2NrZXQgKi8KIAkvKiBpZiBwcmlvcml0eSB2YWx1ZSBpcyBvdXQgb2YgcmFuZ2UgaXQgd2lsbCBiZSBhanVzdGVkICovCiAJaWYgKGNmX3NrLT5zay5za19wcmlvcml0eSA+IENBSUZfUFJJT19NQVgpCiAJCWNmX3NrLT5jb25uX3JlcS5wcmlvcml0eSA9IENBSUZfUFJJT19NQVg7CkBAIC04NjYsOCArODU1LDEwIEBACiAKIAlkYmZzX2F0b21pY19pbmMoJmNudC5udW1fY29ubmVjdF9yZXEpOwogCWNmX3NrLT5sYXllci5yZWNlaXZlID0gY2FpZl9za3RyZWN2X2NiOwotCWVyciA9IGNhaWZfY29ubmVjdF9jbGllbnQoJmNmX3NrLT5jb25uX3JlcSwKKworCWVyciA9IGNhaWZfY29ubmVjdF9jbGllbnQoc29ja19uZXQoc2spLCAmY2Zfc2stPmNvbm5fcmVxLAogCQkJCSZjZl9zay0+bGF5ZXIsICZpZmluZGV4LCAmaGVhZHJvb20sICZ0YWlscm9vbSk7CisKIAlpZiAoZXJyIDwgMCkgewogCQljZl9zay0+c2suc2tfc29ja2V0LT5zdGF0ZSA9IFNTX1VOQ09OTkVDVEVEOwogCQljZl9zay0+c2suc2tfc3RhdGUgPSBDQUlGX0RJU0NPTk5FQ1RFRDsKQEAgLTk0NywxMyArOTM4LDE0IEBACiAJICogY2FpZl9xdWV1ZV9yY3Zfc2tiIGNoZWNrcyBTT0NLX0RFQUQgaG9sZGluZyB0aGUgcXVldWUgbG9jaywKIAkgKiB0aGlzIGVuc3VyZXMgbm8gcGFja2V0cyB3aGVuIHNvY2sgaXMgZGVhZC4KIAkgKi8KLQlzcGluX2xvY2soJnNrLT5za19yZWNlaXZlX3F1ZXVlLmxvY2spOworCXNwaW5fbG9ja19iaCgmc2stPnNrX3JlY2VpdmVfcXVldWUubG9jayk7CiAJc29ja19zZXRfZmxhZyhzaywgU09DS19ERUFEKTsKLQlzcGluX3VubG9jaygmc2stPnNrX3JlY2VpdmVfcXVldWUubG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnNrLT5za19yZWNlaXZlX3F1ZXVlLmxvY2spOwogCXNvY2stPnNrID0gTlVMTDsKIAogCWRiZnNfYXRvbWljX2luYygmY250Lm51bV9kaXNjb25uZWN0KTsKIAorCVdBUk5fT04oSVNfRVJSKGNmX3NrLT5kZWJ1Z2ZzX3NvY2tldF9kaXIpKTsKIAlpZiAoY2Zfc2stPmRlYnVnZnNfc29ja2V0X2RpciAhPSBOVUxMKQogCQlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoY2Zfc2stPmRlYnVnZnNfc29ja2V0X2Rpcik7CiAKQEAgLTk2MywxMyArOTU1LDEyIEBACiAKIAlpZiAoY2Zfc2stPnNrLnNrX3NvY2tldC0+c3RhdGUgPT0gU1NfQ09OTkVDVEVEIHx8CiAJCWNmX3NrLT5zay5za19zb2NrZXQtPnN0YXRlID09IFNTX0NPTk5FQ1RJTkcpCi0JCXJlcyA9IGNhaWZfZGlzY29ubmVjdF9jbGllbnQoJmNmX3NrLT5sYXllcik7CisJCXJlcyA9IGNhaWZfZGlzY29ubmVjdF9jbGllbnQoc29ja19uZXQoc2spLCAmY2Zfc2stPmxheWVyKTsKIAogCWNmX3NrLT5zay5za19zb2NrZXQtPnN0YXRlID0gU1NfRElTQ09OTkVDVElORzsKIAl3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbChza19zbGVlcChzayksIFBPTExFUlJ8UE9MTEhVUCk7CiAKIAlzb2NrX29ycGhhbihzayk7Ci0JY2Zfc2stPmxheWVyLmRuID0gTlVMTDsKIAlza19zdHJlYW1fa2lsbF9xdWV1ZXMoJmNmX3NrLT5zayk7CiAJcmVsZWFzZV9zb2NrKHNrKTsKIAlzb2NrX3B1dChzayk7CkBAIC0xMDYwLDE2ICsxMDUxLDE4IEBACiAJY2FpZl9hc3NlcnQoc2tfdW5oYXNoZWQoc2spKTsKIAljYWlmX2Fzc2VydCghc2stPnNrX3NvY2tldCk7CiAJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHsKLQkJcHJfaW5mbygiQXR0ZW1wdCB0byByZWxlYXNlIGFsaXZlIENBSUYgc29ja2V0OiAlcFxuIiwgc2spOworCQlwcl9kZWJ1ZygiQXR0ZW1wdCB0byByZWxlYXNlIGFsaXZlIENBSUYgc29ja2V0OiAlcFxuIiwgc2spOwogCQlyZXR1cm47CiAJfQogCXNrX3N0cmVhbV9raWxsX3F1ZXVlcygmY2Zfc2stPnNrKTsKIAlkYmZzX2F0b21pY19kZWMoJmNudC5jYWlmX25yX3NvY2tzKTsKKwljYWlmX2ZyZWVfY2xpZW50KCZjZl9zay0+bGF5ZXIpOwogfQogCiBzdGF0aWMgaW50IGNhaWZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLAogCQkJaW50IGtlcm4pCiB7CisJaW50IG51bTsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBOVUxMOwogCXN0cnVjdCBjYWlmc29jayAqY2Zfc2sgPSBOVUxMOwogCXN0YXRpYyBzdHJ1Y3QgcHJvdG8gcHJvdCA9IHsubmFtZSA9ICJQRl9DQUlGIiwKQEAgLTExMzIsMTQgKzExMjUsMTYgQEAKIAljZl9zay0+Y29ubl9yZXEucHJvdG9jb2wgPSBwcm90b2NvbDsKIAkvKiBJbmNyZWFzZSB0aGUgbnVtYmVyIG9mIHNvY2tldHMgY3JlYXRlZC4gKi8KIAlkYmZzX2F0b21pY19pbmMoJmNudC5jYWlmX25yX3NvY2tzKTsKKwludW0gPSBkYmZzX2F0b21pY19pbmMoJmNudC5jYWlmX3NvY2tfY3JlYXRlKTsKICNpZmRlZiBDT05GSUdfREVCVUdfRlMKIAlpZiAoIUlTX0VSUihkZWJ1Z2ZzZGlyKSkgeworCiAJCS8qIEZpbGwgaW4gc29tZSBpbmZvcm1hdGlvbiBjb25jZXJuaW5nIHRoZSBtaXNjIHNvY2tldC4gKi8KLQkJc25wcmludGYoY2Zfc2stPm5hbWUsIHNpemVvZihjZl9zay0+bmFtZSksICJjZnNrJWQiLAotCQkJCWF0b21pY19yZWFkKCZjbnQuY2FpZl9ucl9zb2NrcykpOworCQlzbnByaW50ZihjZl9zay0+bmFtZSwgc2l6ZW9mKGNmX3NrLT5uYW1lKSwgImNmc2slZCIsIG51bSk7CiAKIAkJY2Zfc2stPmRlYnVnZnNfc29ja2V0X2RpciA9CiAJCQlkZWJ1Z2ZzX2NyZWF0ZV9kaXIoY2Zfc2stPm5hbWUsIGRlYnVnZnNkaXIpOworCiAJCWRlYnVnZnNfY3JlYXRlX3UzMigic2tfc3RhdGUiLCBTX0lSVVNSIHwgU19JV1VTUiwKIAkJCQljZl9zay0+ZGVidWdmc19zb2NrZXRfZGlyLAogCQkJCSh1MzIgKikgJmNmX3NrLT5zay5za19zdGF0ZSk7CkBAIC0xMTgzLDYgKzExNzgsOSBAQAogCQlkZWJ1Z2ZzX2NyZWF0ZV91MzIoIm51bV9zb2NrZXRzIiwgU19JUlVTUiB8IFNfSVdVU1IsCiAJCQkJZGVidWdmc2RpciwKIAkJCQkodTMyICopICZjbnQuY2FpZl9ucl9zb2Nrcyk7CisJCWRlYnVnZnNfY3JlYXRlX3UzMigibnVtX2NyZWF0ZSIsIFNfSVJVU1IgfCBTX0lXVVNSLAorCQkJCWRlYnVnZnNkaXIsCisJCQkJKHUzMiAqKSAmY250LmNhaWZfc29ja19jcmVhdGUpOwogCQlkZWJ1Z2ZzX2NyZWF0ZV91MzIoIm51bV9jb25uZWN0X3JlcSIsIFNfSVJVU1IgfCBTX0lXVVNSLAogCQkJCWRlYnVnZnNkaXIsCiAJCQkJKHUzMiAqKSAmY250Lm51bV9jb25uZWN0X3JlcSk7CmRpZmYgLS1naXQgYS9uZXQvY2FpZi9jZmNuZmcuYyBiL25ldC9jYWlmL2NmY25mZy5jCmluZGV4IGYxZjk4ZDkuLjM1MWMyY2EgMTAwNjQ0Ci0tLSBhL25ldC9jYWlmL2NmY25mZy5jCisrKyBiL25ldC9jYWlmL2NmY25mZy5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPG5ldC9jYWlmL2NhaWZfbGF5ZXIuaD4KICNpbmNsdWRlIDxuZXQvY2FpZi9jZnBrdC5oPgogI2luY2x1ZGUgPG5ldC9jYWlmL2NmY25mZy5oPgpAQCAtMTgsMTEgKzE5LDcgQEAKICNpbmNsdWRlIDxuZXQvY2FpZi9jZmZybWwuaD4KICNpbmNsdWRlIDxuZXQvY2FpZi9jZnNlcmwuaD4KICNpbmNsdWRlIDxuZXQvY2FpZi9jZnNydmwuaD4KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLQotI2RlZmluZSBNQVhfUEhZX0xBWUVSUyA3CisjaW5jbHVkZSA8bmV0L2NhaWYvY2FpZl9kZXYuaD4KIAogI2RlZmluZSBjb250YWluZXJfb2JqKGxheXIpIGNvbnRhaW5lcl9vZihsYXlyLCBzdHJ1Y3QgY2ZjbmZnLCBsYXllcikKIApAQCAtMzAsNiArMjcsOSBAQAogICogdG8gbWFuYWdlIHBoeXNpY2FsIGludGVyZmFjZXMKICAqLwogc3RydWN0IGNmY25mZ19waHlpbmZvIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJYm9vbCB1cDsKKwogCS8qIFBvaW50ZXIgdG8gdGhlIGxheWVyIGJlbG93IHRoZSBNVVggKGZyYW1pbmcgbGF5ZXIpICovCiAJc3RydWN0IGNmbGF5ZXIgKmZybV9sYXllcjsKIAkvKiBQb2ludGVyIHRvIHRoZSBsb3dlc3QgYWN0dWFsIHBoeXNpY2FsIGxheWVyICovCkBAIC0zOSw5ICszOSw2IEBACiAJLyogUHJlZmVyZW5jZSBvZiB0aGUgcGh5c2ljYWwgaW4gaW50ZXJmYWNlICovCiAJZW51bSBjZmNuZmdfcGh5X3ByZWZlcmVuY2UgcHJlZjsKIAotCS8qIFJlZmVyZW5jZSBjb3VudCwgbnVtYmVyIG9mIGNoYW5uZWxzIHVzaW5nIHRoZSBkZXZpY2UgKi8KLQlpbnQgcGh5X3JlZl9jb3VudDsKLQogCS8qIEluZm9ybWF0aW9uIGFib3V0IHRoZSBwaHlzaWNhbCBkZXZpY2UgKi8KIAlzdHJ1Y3QgZGV2X2luZm8gZGV2X2luZm87CiAKQEAgLTU5LDggKzU2LDggQEAKIAlzdHJ1Y3QgY2ZsYXllciBsYXllcjsKIAlzdHJ1Y3QgY2ZsYXllciAqY3RybDsKIAlzdHJ1Y3QgY2ZsYXllciAqbXV4OwotCXU4IGxhc3RfcGh5aWQ7Ci0Jc3RydWN0IGNmY25mZ19waHlpbmZvIHBoeV9sYXllcnNbTUFYX1BIWV9MQVlFUlNdOworCXN0cnVjdCBsaXN0X2hlYWQgcGh5czsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKIH07CiAKIHN0YXRpYyB2b2lkIGNmY25mZ19saW5rdXBfcnNwKHN0cnVjdCBjZmxheWVyICpsYXllciwgdTggY2hhbm5lbF9pZCwKQEAgLTc2LDYgKzczLDkgQEAKIHsKIAlzdHJ1Y3QgY2ZjbmZnICp0aGlzOwogCXN0cnVjdCBjZmN0cmxfcnNwICpyZXNwOworCisJbWlnaHRfc2xlZXAoKTsKKwogCS8qIEluaXRpYXRlIHRoaXMgbGF5ZXIgKi8KIAl0aGlzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNmY25mZyksIEdGUF9BVE9NSUMpOwogCWlmICghdGhpcykgewpAQCAtOTksMjcgKzk5LDMzIEBACiAJcmVzcC0+cmFkaW9zZXRfcnNwID0gY2ZjdHJsX3Jlc3BfZnVuYzsKIAlyZXNwLT5saW5rc2V0dXBfcnNwID0gY2ZjbmZnX2xpbmt1cF9yc3A7CiAJcmVzcC0+cmVqZWN0X3JzcCA9IGNmY25mZ19yZWplY3RfcnNwOwotCi0JdGhpcy0+bGFzdF9waHlpZCA9IDE7CisJSU5JVF9MSVNUX0hFQUQoJnRoaXMtPnBoeXMpOwogCiAJY2ZtdXhsX3NldF91cGxheWVyKHRoaXMtPm11eCwgdGhpcy0+Y3RybCwgMCk7CiAJbGF5ZXJfc2V0X2RuKHRoaXMtPmN0cmwsIHRoaXMtPm11eCk7CiAJbGF5ZXJfc2V0X3VwKHRoaXMtPmN0cmwsIHRoaXMpOworCW11dGV4X2luaXQoJnRoaXMtPmxvY2spOworCiAJcmV0dXJuIHRoaXM7CiBvdXRfb2ZfbWVtOgogCXByX3dhcm4oIk91dCBvZiBtZW1vcnlcbiIpOworCisJc3luY2hyb25pemVfcmN1KCk7CisKIAlrZnJlZSh0aGlzLT5tdXgpOwogCWtmcmVlKHRoaXMtPmN0cmwpOwogCWtmcmVlKHRoaXMpOwogCXJldHVybiBOVUxMOwogfQotRVhQT1JUX1NZTUJPTChjZmNuZmdfY3JlYXRlKTsKIAogdm9pZCBjZmNuZmdfcmVtb3ZlKHN0cnVjdCBjZmNuZmcgKmNmZykKIHsKKwltaWdodF9zbGVlcCgpOwogCWlmIChjZmcpIHsKKwkJc3luY2hyb25pemVfcmN1KCk7CisKIAkJa2ZyZWUoY2ZnLT5tdXgpOwotCQlrZnJlZShjZmctPmN0cmwpOworCQljZmN0cmxfcmVtb3ZlKGNmZy0+Y3RybCk7CiAJCWtmcmVlKGNmZyk7CiAJfQogfQpAQCAtMTI4LDEzMiArMTM0LDk2IEBACiB7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgY2ZjbmZnX3BoeWluZm8gKmNmY25mZ19nZXRfcGh5aW5mb19yY3Uoc3RydWN0IGNmY25mZyAqY25mZywKKwkJCQkJCQl1OCBwaHlpZCkKK3sKKwlzdHJ1Y3QgY2ZjbmZnX3BoeWluZm8gKnBoeTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBoeSwgJmNuZmctPnBoeXMsIG5vZGUpCisJCWlmIChwaHktPmlkID09IHBoeWlkKQorCQkJcmV0dXJuIHBoeTsKKwlyZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIHZvaWQgY2ZjdHJsX2VudW1fcmVzcCh2b2lkKQogewogfQogCi1zdHJ1Y3QgZGV2X2luZm8gKmNmY25mZ19nZXRfcGh5aWQoc3RydWN0IGNmY25mZyAqY25mZywKK3N0YXRpYyBzdHJ1Y3QgZGV2X2luZm8gKmNmY25mZ19nZXRfcGh5aWQoc3RydWN0IGNmY25mZyAqY25mZywKIAkJCQkgIGVudW0gY2ZjbmZnX3BoeV9wcmVmZXJlbmNlIHBoeV9wcmVmKQogewotCXUxNiBpOwotCiAJLyogVHJ5IHRvIG1hdGNoIHdpdGggc3BlY2lmaWVkIHByZWZlcmVuY2UgKi8KLQlmb3IgKGkgPSAxOyBpIDwgTUFYX1BIWV9MQVlFUlM7IGkrKykgewotCQlpZiAoY25mZy0+cGh5X2xheWVyc1tpXS5pZCA9PSBpICYmCi0JCSAgICAgY25mZy0+cGh5X2xheWVyc1tpXS5wcmVmID09IHBoeV9wcmVmICYmCi0JCSAgICAgY25mZy0+cGh5X2xheWVyc1tpXS5mcm1fbGF5ZXIgIT0gTlVMTCkgewotCQkJY2FpZl9hc3NlcnQoY25mZy0+cGh5X2xheWVycyAhPSBOVUxMKTsKLQkJCWNhaWZfYXNzZXJ0KGNuZmctPnBoeV9sYXllcnNbaV0uaWQgPT0gaSk7Ci0JCQlyZXR1cm4gJmNuZmctPnBoeV9sYXllcnNbaV0uZGV2X2luZm87Ci0JCX0KKwlzdHJ1Y3QgY2ZjbmZnX3BoeWluZm8gKnBoeTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBoeSwgJmNuZmctPnBoeXMsIG5vZGUpIHsKKwkJaWYgKHBoeS0+dXAgJiYgcGh5LT5wcmVmID09IHBoeV9wcmVmICYmCisJCQkJcGh5LT5mcm1fbGF5ZXIgIT0gTlVMTCkKKworCQkJcmV0dXJuICZwaHktPmRldl9pbmZvOwogCX0KKwogCS8qIE90aGVyd2lzZSBqdXN0IHJldHVybiBzb21ldGhpbmcgKi8KLQlmb3IgKGkgPSAxOyBpIDwgTUFYX1BIWV9MQVlFUlM7IGkrKykgewotCQlpZiAoY25mZy0+cGh5X2xheWVyc1tpXS5pZCA9PSBpKSB7Ci0JCQljYWlmX2Fzc2VydChjbmZnLT5waHlfbGF5ZXJzICE9IE5VTEwpOwotCQkJY2FpZl9hc3NlcnQoY25mZy0+cGh5X2xheWVyc1tpXS5pZCA9PSBpKTsKLQkJCXJldHVybiAmY25mZy0+cGh5X2xheWVyc1tpXS5kZXZfaW5mbzsKLQkJfQotCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwaHksICZjbmZnLT5waHlzLCBub2RlKQorCQlpZiAocGh5LT51cCkKKwkJCXJldHVybiAmcGh5LT5kZXZfaW5mbzsKIAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgc3RydWN0IGNmY25mZ19waHlpbmZvICpjZmNuZmdfZ2V0X3BoeWluZm8oc3RydWN0IGNmY25mZyAqY25mZywKLQkJCQkJCQl1OCBwaHlpZCkKK3N0YXRpYyBpbnQgY2ZjbmZnX2dldF9pZF9mcm9tX2lmaShzdHJ1Y3QgY2ZjbmZnICpjbmZnLCBpbnQgaWZpKQogewotCWludCBpOwotCS8qIFRyeSB0byBtYXRjaCB3aXRoIHNwZWNpZmllZCBwcmVmZXJlbmNlICovCi0JZm9yIChpID0gMDsgaSA8IE1BWF9QSFlfTEFZRVJTOyBpKyspCi0JCWlmIChjbmZnLT5waHlfbGF5ZXJzW2ldLmZybV9sYXllciAhPSBOVUxMICYmCi0JCSAgICBjbmZnLT5waHlfbGF5ZXJzW2ldLmlkID09IHBoeWlkKQotCQkJcmV0dXJuICZjbmZnLT5waHlfbGF5ZXJzW2ldOwotCXJldHVybiBOVUxMOwotfQorCXN0cnVjdCBjZmNuZmdfcGh5aW5mbyAqcGh5OwogCi0KLWludCBjZmNuZmdfZ2V0X2lkX2Zyb21faWZpKHN0cnVjdCBjZmNuZmcgKmNuZmcsIGludCBpZmkpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IE1BWF9QSFlfTEFZRVJTOyBpKyspCi0JCWlmIChjbmZnLT5waHlfbGF5ZXJzW2ldLmZybV9sYXllciAhPSBOVUxMICYmCi0JCQkJY25mZy0+cGh5X2xheWVyc1tpXS5pZmluZGV4ID09IGlmaSkKLQkJCXJldHVybiBpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBoeSwgJmNuZmctPnBoeXMsIG5vZGUpCisJCWlmIChwaHktPmlmaW5kZXggPT0gaWZpICYmIHBoeS0+dXApCisJCQlyZXR1cm4gcGh5LT5pZDsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAotaW50IGNmY25mZ19kaXNjb25uX2FkYXB0X2xheWVyKHN0cnVjdCBjZmNuZmcgKmNuZmcsIHN0cnVjdCBjZmxheWVyICphZGFwX2xheWVyKQoraW50IGNhaWZfZGlzY29ubmVjdF9jbGllbnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY2ZsYXllciAqYWRhcF9sYXllcikKIHsKIAl1OCBjaGFubmVsX2lkID0gMDsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgY2ZsYXllciAqc2VydmwgPSBOVUxMOwotCXN0cnVjdCBjZmNuZmdfcGh5aW5mbyAqcGh5aW5mbyA9IE5VTEw7Ci0JdTggcGh5aWQgPSAwOworCXN0cnVjdCBjZmNuZmcgKmNmZyA9IGdldF9jZmNuZmcobmV0KTsKIAogCWNhaWZfYXNzZXJ0KGFkYXBfbGF5ZXIgIT0gTlVMTCk7CisKIAljaGFubmVsX2lkID0gYWRhcF9sYXllci0+aWQ7CiAJaWYgKGFkYXBfbGF5ZXItPmRuID09IE5VTEwgfHwgY2hhbm5lbF9pZCA9PSAwKSB7CiAJCXByX2VycigiYWRhcF9sYXllci0+ZG4gPT0gTlVMTCBvciBhZGFwX2xheWVyLT5pZCBpcyAwXG4iKTsKIAkJcmV0ID0gLUVOT1RDT05OOwogCQlnb3RvIGVuZDsKIAl9Ci0Jc2VydmwgPSBjZm11eGxfcmVtb3ZlX3VwbGF5ZXIoY25mZy0+bXV4LCBjaGFubmVsX2lkKTsKKworCXNlcnZsID0gY2ZtdXhsX3JlbW92ZV91cGxheWVyKGNmZy0+bXV4LCBjaGFubmVsX2lkKTsKIAlpZiAoc2VydmwgPT0gTlVMTCkgewotCQlwcl9lcnIoIlBST1RPQ09MIEVSUk9SIC0gRXJyb3IgcmVtb3Zpbmcgc2VydmljZV9sYXllciBDaGFubmVsX0lkKCVkKSIsCi0JCSAgICAgICBjaGFubmVsX2lkKTsKKwkJcHJfZXJyKCJQUk9UT0NPTCBFUlJPUiAtICIKKwkJCQkiRXJyb3IgcmVtb3Zpbmcgc2VydmljZV9sYXllciBDaGFubmVsX0lkKCVkKSIsCisJCQkJY2hhbm5lbF9pZCk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZW5kOwogCX0KLQlsYXllcl9zZXRfdXAoc2VydmwsIE5VTEwpOwotCXJldCA9IGNmY3RybF9saW5rZG93bl9yZXEoY25mZy0+Y3RybCwgY2hhbm5lbF9pZCwgYWRhcF9sYXllcik7Ci0JaWYgKHJldCkKLQkJZ290byBlbmQ7Ci0JY2FpZl9hc3NlcnQoY2hhbm5lbF9pZCA9PSBzZXJ2bC0+aWQpOwotCWlmIChhZGFwX2xheWVyLT5kbiAhPSBOVUxMKSB7Ci0JCXBoeWlkID0gY2ZzcnZsX2dldHBoeWlkKGFkYXBfbGF5ZXItPmRuKTsKIAotCQlwaHlpbmZvID0gY2ZjbmZnX2dldF9waHlpbmZvKGNuZmcsIHBoeWlkKTsKLQkJaWYgKHBoeWluZm8gPT0gTlVMTCkgewotCQkJcHJfd2FybigiTm8gaW50ZXJmYWNlIHRvIHNlbmQgZGlzY29ubmVjdCB0b1xuIik7Ci0JCQlyZXQgPSAtRU5PREVWOwotCQkJZ290byBlbmQ7Ci0JCX0KLQkJaWYgKHBoeWluZm8tPmlkICE9IHBoeWlkIHx8Ci0JCQlwaHlpbmZvLT5waHlfbGF5ZXItPmlkICE9IHBoeWlkIHx8Ci0JCQlwaHlpbmZvLT5mcm1fbGF5ZXItPmlkICE9IHBoeWlkKSB7Ci0JCQlwcl9lcnIoIkluY29uc2lzdGVuY3kgaW4gcGh5IHJlZ2lzdHJhdGlvblxuIik7Ci0JCQlyZXQgPSAtRUlOVkFMOwotCQkJZ290byBlbmQ7Ci0JCX0KLQl9Ci0JaWYgKHBoeWluZm8gIT0gTlVMTCAmJiAtLXBoeWluZm8tPnBoeV9yZWZfY291bnQgPT0gMCAmJgotCQlwaHlpbmZvLT5waHlfbGF5ZXIgIT0gTlVMTCAmJgotCQlwaHlpbmZvLT5waHlfbGF5ZXItPm1vZGVtY21kICE9IE5VTEwpIHsKLQkJcGh5aW5mby0+cGh5X2xheWVyLT5tb2RlbWNtZChwaHlpbmZvLT5waHlfbGF5ZXIsCi0JCQkJCSAgICAgX0NBSUZfTU9ERU1DTURfUEhZSUZfVVNFTEVTUyk7Ci0JfQorCXJldCA9IGNmY3RybF9saW5rZG93bl9yZXEoY2ZnLT5jdHJsLCBjaGFubmVsX2lkLCBhZGFwX2xheWVyKTsKKwogZW5kOgotCWNmc3J2bF9wdXQoc2VydmwpOwotCWNmY3RybF9jYW5jZWxfcmVxKGNuZmctPmN0cmwsIGFkYXBfbGF5ZXIpOworCWNmY3RybF9jYW5jZWxfcmVxKGNmZy0+Y3RybCwgYWRhcF9sYXllcik7CisKKwkvKiBEbyBSQ1Ugc3luYyBiZWZvcmUgaW5pdGlhdGluZyBjbGVhbnVwICovCisJc3luY2hyb25pemVfcmN1KCk7CiAJaWYgKGFkYXBfbGF5ZXItPmN0cmxjbWQgIT0gTlVMTCkKIAkJYWRhcF9sYXllci0+Y3RybGNtZChhZGFwX2xheWVyLCBDQUlGX0NUUkxDTURfREVJTklUX1JTUCwgMCk7CiAJcmV0dXJuIHJldDsKIAogfQotRVhQT1JUX1NZTUJPTChjZmNuZmdfZGlzY29ubl9hZGFwdF9sYXllcik7Ci0KLXZvaWQgY2ZjbmZnX3JlbGVhc2VfYWRhcF9sYXllcihzdHJ1Y3QgY2ZsYXllciAqYWRhcF9sYXllcikKLXsKLQlpZiAoYWRhcF9sYXllci0+ZG4pCi0JCWNmc3J2bF9wdXQoYWRhcF9sYXllci0+ZG4pOwotfQotRVhQT1JUX1NZTUJPTChjZmNuZmdfcmVsZWFzZV9hZGFwX2xheWVyKTsKK0VYUE9SVF9TWU1CT0woY2FpZl9kaXNjb25uZWN0X2NsaWVudCk7CiAKIHN0YXRpYyB2b2lkIGNmY25mZ19saW5rZGVzdHJveV9yc3Aoc3RydWN0IGNmbGF5ZXIgKmxheWVyLCB1OCBjaGFubmVsX2lkKQogewogfQogCi1pbnQgcHJvdG9oZWFkW0NGQ1RSTF9TUlZfTUFTS10gPSB7CitzdGF0aWMgY29uc3QgaW50IHByb3RvaGVhZFtDRkNUUkxfU1JWX01BU0tdID0gewogCVtDRkNUUkxfU1JWX1ZFSV0gPSA0LAogCVtDRkNUUkxfU1JWX0RBVEFHUkFNXSA9IDcsCiAJW0NGQ1RSTF9TUlZfVVRJTF0gPSA0LApAQCAtMjYxLDQ5ICsyMzEsMTU3IEBACiAJW0NGQ1RSTF9TUlZfREJHXSA9IDMsCiB9OwogCi1pbnQgY2ZjbmZnX2FkZF9hZGFwdGF0aW9uX2xheWVyKHN0cnVjdCBjZmNuZmcgKmNuZmcsCi0JCQkJc3RydWN0IGNmY3RybF9saW5rX3BhcmFtICpwYXJhbSwKLQkJCQlzdHJ1Y3QgY2ZsYXllciAqYWRhcF9sYXllciwKLQkJCQlpbnQgKmlmaW5kZXgsCisKK3N0YXRpYyBpbnQgY2FpZl9jb25uZWN0X3JlcV90b19saW5rX3BhcmFtKHN0cnVjdCBjZmNuZmcgKmNuZmcsCisJCQkJICAgc3RydWN0IGNhaWZfY29ubmVjdF9yZXF1ZXN0ICpzLAorCQkJCSAgIHN0cnVjdCBjZmN0cmxfbGlua19wYXJhbSAqbCkKK3sKKwlzdHJ1Y3QgZGV2X2luZm8gKmRldl9pbmZvOworCWVudW0gY2ZjbmZnX3BoeV9wcmVmZXJlbmNlIHByZWY7CisJaW50IHJlczsKKworCW1lbXNldChsLCAwLCBzaXplb2YoKmwpKTsKKwkvKiBJbiBjYWlmIHByb3RvY29sIGxvdyB2YWx1ZSBpcyBoaWdoIHByaW9yaXR5ICovCisJbC0+cHJpb3JpdHkgPSBDQUlGX1BSSU9fTUFYIC0gcy0+cHJpb3JpdHkgKyAxOworCisJaWYgKHMtPmlmaW5kZXggIT0gMCkgeworCQlyZXMgPSBjZmNuZmdfZ2V0X2lkX2Zyb21faWZpKGNuZmcsIHMtPmlmaW5kZXgpOworCQlpZiAocmVzIDwgMCkKKwkJCXJldHVybiByZXM7CisJCWwtPnBoeWlkID0gcmVzOworCX0gZWxzZSB7CisJCXN3aXRjaCAocy0+bGlua19zZWxlY3RvcikgeworCQljYXNlIENBSUZfTElOS19ISUdIX0JBTkRXOgorCQkJcHJlZiA9IENGUEhZUFJFRl9ISUdIX0JXOworCQkJYnJlYWs7CisJCWNhc2UgQ0FJRl9MSU5LX0xPV19MQVRFTkNZOgorCQkJcHJlZiA9IENGUEhZUFJFRl9MT1dfTEFUOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlkZXZfaW5mbyA9IGNmY25mZ19nZXRfcGh5aWQoY25mZywgcHJlZik7CisJCWlmIChkZXZfaW5mbyA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWwtPnBoeWlkID0gZGV2X2luZm8tPmlkOworCX0KKwlzd2l0Y2ggKHMtPnByb3RvY29sKSB7CisJY2FzZSBDQUlGUFJPVE9fQVQ6CisJCWwtPmxpbmt0eXBlID0gQ0ZDVFJMX1NSVl9WRUk7CisJCWwtPmVuZHBvaW50ID0gKHMtPnNvY2thZGRyLnUuYXQudHlwZSA+PiAyKSAmIDB4MzsKKwkJbC0+Y2h0eXBlID0gcy0+c29ja2FkZHIudS5hdC50eXBlICYgMHgzOworCQlicmVhazsKKwljYXNlIENBSUZQUk9UT19EQVRBR1JBTToKKwkJbC0+bGlua3R5cGUgPSBDRkNUUkxfU1JWX0RBVEFHUkFNOworCQlsLT5jaHR5cGUgPSAweDAwOworCQlsLT51LmRhdGFncmFtLmNvbm5pZCA9IHMtPnNvY2thZGRyLnUuZGdtLmNvbm5lY3Rpb25faWQ7CisJCWJyZWFrOworCWNhc2UgQ0FJRlBST1RPX0RBVEFHUkFNX0xPT1A6CisJCWwtPmxpbmt0eXBlID0gQ0ZDVFJMX1NSVl9EQVRBR1JBTTsKKwkJbC0+Y2h0eXBlID0gMHgwMzsKKwkJbC0+ZW5kcG9pbnQgPSAweDAwOworCQlsLT51LmRhdGFncmFtLmNvbm5pZCA9IHMtPnNvY2thZGRyLnUuZGdtLmNvbm5lY3Rpb25faWQ7CisJCWJyZWFrOworCWNhc2UgQ0FJRlBST1RPX1JGTToKKwkJbC0+bGlua3R5cGUgPSBDRkNUUkxfU1JWX1JGTTsKKwkJbC0+dS5kYXRhZ3JhbS5jb25uaWQgPSBzLT5zb2NrYWRkci51LnJmbS5jb25uZWN0aW9uX2lkOworCQlzdHJuY3B5KGwtPnUucmZtLnZvbHVtZSwgcy0+c29ja2FkZHIudS5yZm0udm9sdW1lLAorCQkJc2l6ZW9mKGwtPnUucmZtLnZvbHVtZSktMSk7CisJCWwtPnUucmZtLnZvbHVtZVtzaXplb2YobC0+dS5yZm0udm9sdW1lKS0xXSA9IDA7CisJCWJyZWFrOworCWNhc2UgQ0FJRlBST1RPX1VUSUw6CisJCWwtPmxpbmt0eXBlID0gQ0ZDVFJMX1NSVl9VVElMOworCQlsLT5lbmRwb2ludCA9IDB4MDA7CisJCWwtPmNodHlwZSA9IDB4MDA7CisJCXN0cm5jcHkobC0+dS51dGlsaXR5Lm5hbWUsIHMtPnNvY2thZGRyLnUudXRpbC5zZXJ2aWNlLAorCQkJc2l6ZW9mKGwtPnUudXRpbGl0eS5uYW1lKS0xKTsKKwkJbC0+dS51dGlsaXR5Lm5hbWVbc2l6ZW9mKGwtPnUudXRpbGl0eS5uYW1lKS0xXSA9IDA7CisJCWNhaWZfYXNzZXJ0KHNpemVvZihsLT51LnV0aWxpdHkubmFtZSkgPiAxMCk7CisJCWwtPnUudXRpbGl0eS5wYXJhbWxlbiA9IHMtPnBhcmFtLnNpemU7CisJCWlmIChsLT51LnV0aWxpdHkucGFyYW1sZW4gPiBzaXplb2YobC0+dS51dGlsaXR5LnBhcmFtcykpCisJCQlsLT51LnV0aWxpdHkucGFyYW1sZW4gPSBzaXplb2YobC0+dS51dGlsaXR5LnBhcmFtcyk7CisKKwkJbWVtY3B5KGwtPnUudXRpbGl0eS5wYXJhbXMsIHMtPnBhcmFtLmRhdGEsCisJCSAgICAgICBsLT51LnV0aWxpdHkucGFyYW1sZW4pOworCisJCWJyZWFrOworCWNhc2UgQ0FJRlBST1RPX0RFQlVHOgorCQlsLT5saW5rdHlwZSA9IENGQ1RSTF9TUlZfREJHOworCQlsLT5lbmRwb2ludCA9IHMtPnNvY2thZGRyLnUuZGJnLnNlcnZpY2U7CisJCWwtPmNodHlwZSA9IHMtPnNvY2thZGRyLnUuZGJnLnR5cGU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGNhaWZfY29ubmVjdF9jbGllbnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgY2FpZl9jb25uZWN0X3JlcXVlc3QgKmNvbm5fcmVxLAorCQkJc3RydWN0IGNmbGF5ZXIgKmFkYXBfbGF5ZXIsIGludCAqaWZpbmRleCwKIAkJCQlpbnQgKnByb3RvX2hlYWQsCiAJCQkJaW50ICpwcm90b190YWlsKQogewogCXN0cnVjdCBjZmxheWVyICpmcm1sOworCXN0cnVjdCBjZmNuZmdfcGh5aW5mbyAqcGh5OworCWludCBlcnI7CisJc3RydWN0IGNmY3RybF9saW5rX3BhcmFtIHBhcmFtOworCXN0cnVjdCBjZmNuZmcgKmNmZyA9IGdldF9jZmNuZmcobmV0KTsKKwljYWlmX2Fzc2VydChjZmcgIT0gTlVMTCk7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJZXJyID0gY2FpZl9jb25uZWN0X3JlcV90b19saW5rX3BhcmFtKGNmZywgY29ubl9yZXEsICZwYXJhbSk7CisJaWYgKGVycikKKwkJZ290byB1bmxvY2s7CisKKwlwaHkgPSBjZmNuZmdfZ2V0X3BoeWluZm9fcmN1KGNmZywgcGFyYW0ucGh5aWQpOworCWlmICghcGh5KSB7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gdW5sb2NrOworCX0KKwllcnIgPSAtRUlOVkFMOworCiAJaWYgKGFkYXBfbGF5ZXIgPT0gTlVMTCkgewogCQlwcl9lcnIoImFkYXBfbGF5ZXIgaXMgemVyb1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIHVubG9jazsKIAl9CiAJaWYgKGFkYXBfbGF5ZXItPnJlY2VpdmUgPT0gTlVMTCkgewogCQlwcl9lcnIoImFkYXBfbGF5ZXItPnJlY2VpdmUgaXMgTlVMTFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIHVubG9jazsKIAl9CiAJaWYgKGFkYXBfbGF5ZXItPmN0cmxjbWQgPT0gTlVMTCkgewogCQlwcl9lcnIoImFkYXBfbGF5ZXItPmN0cmxjbWQgPT0gTlVMTFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIHVubG9jazsKIAl9Ci0JZnJtbCA9IGNuZmctPnBoeV9sYXllcnNbcGFyYW0tPnBoeWlkXS5mcm1fbGF5ZXI7CisKKwllcnIgPSAtRU5PREVWOworCWZybWwgPSBwaHktPmZybV9sYXllcjsKIAlpZiAoZnJtbCA9PSBOVUxMKSB7CiAJCXByX2VycigiU3BlY2lmaWVkIFBIWSB0eXBlIGRvZXMgbm90IGV4aXN0IVxuIik7Ci0JCXJldHVybiAtRU5PREVWOworCQlnb3RvIHVubG9jazsKIAl9Ci0JY2FpZl9hc3NlcnQocGFyYW0tPnBoeWlkID09IGNuZmctPnBoeV9sYXllcnNbcGFyYW0tPnBoeWlkXS5pZCk7Ci0JY2FpZl9hc3NlcnQoY25mZy0+cGh5X2xheWVyc1twYXJhbS0+cGh5aWRdLmZybV9sYXllci0+aWQgPT0KLQkJICAgICBwYXJhbS0+cGh5aWQpOwotCWNhaWZfYXNzZXJ0KGNuZmctPnBoeV9sYXllcnNbcGFyYW0tPnBoeWlkXS5waHlfbGF5ZXItPmlkID09Ci0JCSAgICAgcGFyYW0tPnBoeWlkKTsKKwljYWlmX2Fzc2VydChwYXJhbS5waHlpZCA9PSBwaHktPmlkKTsKKwljYWlmX2Fzc2VydChwaHktPmZybV9sYXllci0+aWQgPT0KKwkJICAgICBwYXJhbS5waHlpZCk7CisJY2FpZl9hc3NlcnQocGh5LT5waHlfbGF5ZXItPmlkID09CisJCSAgICAgcGFyYW0ucGh5aWQpOwogCi0JKmlmaW5kZXggPSBjbmZnLT5waHlfbGF5ZXJzW3BhcmFtLT5waHlpZF0uaWZpbmRleDsKLQkqcHJvdG9faGVhZCA9Ci0JCXByb3RvaGVhZFtwYXJhbS0+bGlua3R5cGVdKwotCQkoY25mZy0+cGh5X2xheWVyc1twYXJhbS0+cGh5aWRdLnVzZV9zdHggPyAxIDogMCk7Ci0KKwkqaWZpbmRleCA9IHBoeS0+aWZpbmRleDsKIAkqcHJvdG9fdGFpbCA9IDI7CisJKnByb3RvX2hlYWQgPQorCisJcHJvdG9oZWFkW3BhcmFtLmxpbmt0eXBlXSArIChwaHktPnVzZV9zdHggPyAxIDogMCk7CisKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCS8qIEZJWE1FOiBFTlVNRVJBVEUgSU5JVElBTExZIFdIRU4gQUNUSVZBVElORyBQSFlTSUNBTCBJTlRFUkZBQ0UgKi8KLQljZmN0cmxfZW51bV9yZXEoY25mZy0+Y3RybCwgcGFyYW0tPnBoeWlkKTsKLQlyZXR1cm4gY2ZjdHJsX2xpbmt1cF9yZXF1ZXN0KGNuZmctPmN0cmwsIHBhcmFtLCBhZGFwX2xheWVyKTsKKwljZmN0cmxfZW51bV9yZXEoY2ZnLT5jdHJsLCBwYXJhbS5waHlpZCk7CisJcmV0dXJuIGNmY3RybF9saW5rdXBfcmVxdWVzdChjZmctPmN0cmwsICZwYXJhbSwgYWRhcF9sYXllcik7CisKK3VubG9jazoKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gZXJyOwogfQotRVhQT1JUX1NZTUJPTChjZmNuZmdfYWRkX2FkYXB0YXRpb25fbGF5ZXIpOworRVhQT1JUX1NZTUJPTChjYWlmX2Nvbm5lY3RfY2xpZW50KTsKIAogc3RhdGljIHZvaWQgY2ZjbmZnX3JlamVjdF9yc3Aoc3RydWN0IGNmbGF5ZXIgKmxheWVyLCB1OCBjaGFubmVsX2lkLAogCQkJICAgICBzdHJ1Y3QgY2ZsYXllciAqYWRhcHRfbGF5ZXIpCkBAIC0zMTUsMzIgKzM5MywzNyBAQAogCiBzdGF0aWMgdm9pZAogY2ZjbmZnX2xpbmt1cF9yc3Aoc3RydWN0IGNmbGF5ZXIgKmxheWVyLCB1OCBjaGFubmVsX2lkLCBlbnVtIGNmY3RybF9zcnYgc2VydiwKLQkJIHU4IHBoeWlkLCBzdHJ1Y3QgY2ZsYXllciAqYWRhcHRfbGF5ZXIpCisJCSAgdTggcGh5aWQsIHN0cnVjdCBjZmxheWVyICphZGFwdF9sYXllcikKIHsKIAlzdHJ1Y3QgY2ZjbmZnICpjbmZnID0gY29udGFpbmVyX29iaihsYXllcik7CiAJc3RydWN0IGNmbGF5ZXIgKnNlcnZpY2VsID0gTlVMTDsKIAlzdHJ1Y3QgY2ZjbmZnX3BoeWluZm8gKnBoeWluZm87CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAorCXJjdV9yZWFkX2xvY2soKTsKKwogCWlmIChhZGFwdF9sYXllciA9PSBOVUxMKSB7Ci0JCXByX2RlYnVnKCJsaW5rIHNldHVwIHJlc3BvbnNlIGJ1dCBubyBjbGllbnQgZXhpc3QsIHNlbmQgbGlua2Rvd24gYmFja1xuIik7CisJCXByX2RlYnVnKCJsaW5rIHNldHVwIHJlc3BvbnNlIGJ1dCBubyBjbGllbnQgZXhpc3QsIgorCQkJCSJzZW5kIGxpbmtkb3duIGJhY2tcbiIpOwogCQljZmN0cmxfbGlua2Rvd25fcmVxKGNuZmctPmN0cmwsIGNoYW5uZWxfaWQsIE5VTEwpOwotCQlyZXR1cm47CisJCWdvdG8gdW5sb2NrOwogCX0KIAogCWNhaWZfYXNzZXJ0KGNuZmcgIT0gTlVMTCk7CiAJY2FpZl9hc3NlcnQocGh5aWQgIT0gMCk7Ci0JcGh5aW5mbyA9ICZjbmZnLT5waHlfbGF5ZXJzW3BoeWlkXTsKKworCXBoeWluZm8gPSBjZmNuZmdfZ2V0X3BoeWluZm9fcmN1KGNuZmcsIHBoeWlkKTsKKwlpZiAocGh5aW5mbyA9PSBOVUxMKSB7CisJCXByX2VycigiRVJST1I6IExpbmsgTGF5ZXIgRGV2aWNlIGRpc3NhcGVhcmVkIgorCQkJCSJ3aGlsZSBjb25uZWN0aW5nXG4iKTsKKwkJZ290byB1bmxvY2s7CisJfQorCisJY2FpZl9hc3NlcnQocGh5aW5mbyAhPSBOVUxMKTsKIAljYWlmX2Fzc2VydChwaHlpbmZvLT5pZCA9PSBwaHlpZCk7CiAJY2FpZl9hc3NlcnQocGh5aW5mby0+cGh5X2xheWVyICE9IE5VTEwpOwogCWNhaWZfYXNzZXJ0KHBoeWluZm8tPnBoeV9sYXllci0+aWQgPT0gcGh5aWQpOwogCi0JcGh5aW5mby0+cGh5X3JlZl9jb3VudCsrOwotCWlmIChwaHlpbmZvLT5waHlfcmVmX2NvdW50ID09IDEgJiYKLQkgICAgcGh5aW5mby0+cGh5X2xheWVyLT5tb2RlbWNtZCAhPSBOVUxMKSB7Ci0JCXBoeWluZm8tPnBoeV9sYXllci0+bW9kZW1jbWQocGh5aW5mby0+cGh5X2xheWVyLAotCQkJCQkgICAgIF9DQUlGX01PREVNQ01EX1BIWUlGX1VTRUZVTEwpOwotCX0KIAlhZGFwdF9sYXllci0+aWQgPSBjaGFubmVsX2lkOwogCiAJc3dpdGNoIChzZXJ2KSB7CkBAIC0zNDgsNyArNDMxLDggQEAKIAkJc2VydmljZWwgPSBjZnZlaV9jcmVhdGUoY2hhbm5lbF9pZCwgJnBoeWluZm8tPmRldl9pbmZvKTsKIAkJYnJlYWs7CiAJY2FzZSBDRkNUUkxfU1JWX0RBVEFHUkFNOgotCQlzZXJ2aWNlbCA9IGNmZGdtbF9jcmVhdGUoY2hhbm5lbF9pZCwgJnBoeWluZm8tPmRldl9pbmZvKTsKKwkJc2VydmljZWwgPSBjZmRnbWxfY3JlYXRlKGNoYW5uZWxfaWQsCisJCQkJCSZwaHlpbmZvLT5kZXZfaW5mbyk7CiAJCWJyZWFrOwogCWNhc2UgQ0ZDVFJMX1NSVl9SRk06CiAJCW5ldGRldiA9IHBoeWluZm8tPmRldl9pbmZvLmRldjsKQEAgLTM2NSw5NCArNDQ5LDkzIEBACiAJCXNlcnZpY2VsID0gY2ZkYmdsX2NyZWF0ZShjaGFubmVsX2lkLCAmcGh5aW5mby0+ZGV2X2luZm8pOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcl9lcnIoIlByb3RvY29sIGVycm9yLiBMaW5rIHNldHVwIHJlc3BvbnNlIC0gdW5rbm93biBjaGFubmVsIHR5cGVcbiIpOwotCQlyZXR1cm47CisJCXByX2VycigiUHJvdG9jb2wgZXJyb3IuIExpbmsgc2V0dXAgcmVzcG9uc2UgIgorCQkJCSItIHVua25vd24gY2hhbm5lbCB0eXBlXG4iKTsKKwkJZ290byB1bmxvY2s7CiAJfQogCWlmICghc2VydmljZWwpIHsKIAkJcHJfd2FybigiT3V0IG9mIG1lbW9yeVxuIik7Ci0JCXJldHVybjsKKwkJZ290byB1bmxvY2s7CiAJfQogCWxheWVyX3NldF9kbihzZXJ2aWNlbCwgY25mZy0+bXV4KTsKIAljZm11eGxfc2V0X3VwbGF5ZXIoY25mZy0+bXV4LCBzZXJ2aWNlbCwgY2hhbm5lbF9pZCk7CiAJbGF5ZXJfc2V0X3VwKHNlcnZpY2VsLCBhZGFwdF9sYXllcik7CiAJbGF5ZXJfc2V0X2RuKGFkYXB0X2xheWVyLCBzZXJ2aWNlbCk7Ci0JY2ZzcnZsX2dldChzZXJ2aWNlbCk7CisKKwlyY3VfcmVhZF91bmxvY2soKTsKKwogCXNlcnZpY2VsLT5jdHJsY21kKHNlcnZpY2VsLCBDQUlGX0NUUkxDTURfSU5JVF9SU1AsIDApOworCXJldHVybjsKK3VubG9jazoKKwlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogdm9pZAogY2ZjbmZnX2FkZF9waHlfbGF5ZXIoc3RydWN0IGNmY25mZyAqY25mZywgZW51bSBjZmNuZmdfcGh5X3R5cGUgcGh5X3R5cGUsCiAJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGNmbGF5ZXIgKnBoeV9sYXllciwKLQkJICAgICB1MTYgKnBoeWlkLCBlbnVtIGNmY25mZ19waHlfcHJlZmVyZW5jZSBwcmVmLAorCQkgICAgIGVudW0gY2ZjbmZnX3BoeV9wcmVmZXJlbmNlIHByZWYsCiAJCSAgICAgYm9vbCBmY3MsIGJvb2wgc3R4KQogewogCXN0cnVjdCBjZmxheWVyICpmcm1sOwogCXN0cnVjdCBjZmxheWVyICpwaHlfZHJpdmVyID0gTlVMTDsKKwlzdHJ1Y3QgY2ZjbmZnX3BoeWluZm8gKnBoeWluZm87CiAJaW50IGk7CisJdTggcGh5aWQ7CiAKKwltdXRleF9sb2NrKCZjbmZnLT5sb2NrKTsKIAotCWlmIChjbmZnLT5waHlfbGF5ZXJzW2NuZmctPmxhc3RfcGh5aWRdLmZybV9sYXllciA9PSBOVUxMKSB7Ci0JCSpwaHlpZCA9IGNuZmctPmxhc3RfcGh5aWQ7Ci0KLQkJLyogcmFuZ2U6ICogMS4uKE1BWF9QSFlfTEFZRVJTLTEpICovCi0JCWNuZmctPmxhc3RfcGh5aWQgPQotCQkgICAgKGNuZmctPmxhc3RfcGh5aWQgJSAoTUFYX1BIWV9MQVlFUlMgLSAxKSkgKyAxOwotCX0gZWxzZSB7Ci0JCSpwaHlpZCA9IDA7Ci0JCWZvciAoaSA9IDE7IGkgPCBNQVhfUEhZX0xBWUVSUzsgaSsrKSB7Ci0JCQlpZiAoY25mZy0+cGh5X2xheWVyc1tpXS5mcm1fbGF5ZXIgPT0gTlVMTCkgewotCQkJCSpwaHlpZCA9IGk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KKwkvKiBDQUlGIHByb3RvY29sIGFsbG93IG1heGltdW0gNiBsaW5rLWxheWVycyAqLworCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHsKKwkJcGh5aWQgPSAoZGV2LT5pZmluZGV4ICsgaSkgJiAweDc7CisJCWlmIChwaHlpZCA9PSAwKQorCQkJY29udGludWU7CisJCWlmIChjZmNuZmdfZ2V0X3BoeWluZm9fcmN1KGNuZmcsIHBoeWlkKSA9PSBOVUxMKQorCQkJZ290byBnb3RfcGh5aWQ7CiAJfQotCWlmICgqcGh5aWQgPT0gMCkgewotCQlwcl9lcnIoIk5vIEF2YWlsYWJsZSBQSFkgSURcbiIpOwotCQlyZXR1cm47Ci0JfQorCXByX3dhcm4oIlRvbyBtYW55IENBSUYgTGluayBMYXllcnMgKG1heCA2KVxuIik7CisJZ290byBvdXQ7CisKK2dvdF9waHlpZDoKKwlwaHlpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNmY25mZ19waHlpbmZvKSwgR0ZQX0FUT01JQyk7CiAKIAlzd2l0Y2ggKHBoeV90eXBlKSB7CiAJY2FzZSBDRlBIWVRZUEVfRlJBRzoKIAkJcGh5X2RyaXZlciA9Ci0JCSAgICBjZnNlcmxfY3JlYXRlKENGUEhZVFlQRV9GUkFHLCAqcGh5aWQsIHN0eCk7CisJCSAgICBjZnNlcmxfY3JlYXRlKENGUEhZVFlQRV9GUkFHLCBwaHlpZCwgc3R4KTsKIAkJaWYgKCFwaHlfZHJpdmVyKSB7CiAJCQlwcl93YXJuKCJPdXQgb2YgbWVtb3J5XG4iKTsKLQkJCXJldHVybjsKKwkJCWdvdG8gb3V0OwogCQl9Ci0KIAkJYnJlYWs7CiAJY2FzZSBDRlBIWVRZUEVfQ0FJRjoKIAkJcGh5X2RyaXZlciA9IE5VTEw7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByX2VycigiJWRcbiIsIHBoeV90eXBlKTsKLQkJcmV0dXJuOwotCQlicmVhazsKKwkJZ290byBvdXQ7CiAJfQotCi0JcGh5X2xheWVyLT5pZCA9ICpwaHlpZDsKLQljbmZnLT5waHlfbGF5ZXJzWypwaHlpZF0ucHJlZiA9IHByZWY7Ci0JY25mZy0+cGh5X2xheWVyc1sqcGh5aWRdLmlkID0gKnBoeWlkOwotCWNuZmctPnBoeV9sYXllcnNbKnBoeWlkXS5kZXZfaW5mby5pZCA9ICpwaHlpZDsKLQljbmZnLT5waHlfbGF5ZXJzWypwaHlpZF0uZGV2X2luZm8uZGV2ID0gZGV2OwotCWNuZmctPnBoeV9sYXllcnNbKnBoeWlkXS5waHlfbGF5ZXIgPSBwaHlfbGF5ZXI7Ci0JY25mZy0+cGh5X2xheWVyc1sqcGh5aWRdLnBoeV9yZWZfY291bnQgPSAwOwotCWNuZmctPnBoeV9sYXllcnNbKnBoeWlkXS5pZmluZGV4ID0gZGV2LT5pZmluZGV4OwotCWNuZmctPnBoeV9sYXllcnNbKnBoeWlkXS51c2Vfc3R4ID0gc3R4OwotCWNuZmctPnBoeV9sYXllcnNbKnBoeWlkXS51c2VfZmNzID0gZmNzOworCXBoeV9sYXllci0+aWQgPSBwaHlpZDsKKwlwaHlpbmZvLT5wcmVmID0gcHJlZjsKKwlwaHlpbmZvLT5pZCA9IHBoeWlkOworCXBoeWluZm8tPmRldl9pbmZvLmlkID0gcGh5aWQ7CisJcGh5aW5mby0+ZGV2X2luZm8uZGV2ID0gZGV2OworCXBoeWluZm8tPnBoeV9sYXllciA9IHBoeV9sYXllcjsKKwlwaHlpbmZvLT5pZmluZGV4ID0gZGV2LT5pZmluZGV4OworCXBoeWluZm8tPnVzZV9zdHggPSBzdHg7CisJcGh5aW5mby0+dXNlX2ZjcyA9IGZjczsKIAogCXBoeV9sYXllci0+dHlwZSA9IHBoeV90eXBlOwotCWZybWwgPSBjZmZybWxfY3JlYXRlKCpwaHlpZCwgZmNzKTsKKwlmcm1sID0gY2Zmcm1sX2NyZWF0ZShwaHlpZCwgZmNzKTsKKwogCWlmICghZnJtbCkgewogCQlwcl93YXJuKCJPdXQgb2YgbWVtb3J5XG4iKTsKLQkJcmV0dXJuOworCQlrZnJlZShwaHlpbmZvKTsKKwkJZ290byBvdXQ7CiAJfQotCWNuZmctPnBoeV9sYXllcnNbKnBoeWlkXS5mcm1fbGF5ZXIgPSBmcm1sOwotCWNmbXV4bF9zZXRfZG5sYXllcihjbmZnLT5tdXgsIGZybWwsICpwaHlpZCk7CisJcGh5aW5mby0+ZnJtX2xheWVyID0gZnJtbDsKIAlsYXllcl9zZXRfdXAoZnJtbCwgY25mZy0+bXV4KTsKIAogCWlmIChwaHlfZHJpdmVyICE9IE5VTEwpIHsKLQkJcGh5X2RyaXZlci0+aWQgPSAqcGh5aWQ7CisJCXBoeV9kcml2ZXItPmlkID0gcGh5aWQ7CiAJCWxheWVyX3NldF9kbihmcm1sLCBwaHlfZHJpdmVyKTsKIAkJbGF5ZXJfc2V0X3VwKHBoeV9kcml2ZXIsIGZybWwpOwogCQlsYXllcl9zZXRfZG4ocGh5X2RyaXZlciwgcGh5X2xheWVyKTsKQEAgLTQ2MSwzMyArNTQ0LDk1IEBACiAJCWxheWVyX3NldF9kbihmcm1sLCBwaHlfbGF5ZXIpOwogCQlsYXllcl9zZXRfdXAocGh5X2xheWVyLCBmcm1sKTsKIAl9CisKKwlsaXN0X2FkZF9yY3UoJnBoeWluZm8tPm5vZGUsICZjbmZnLT5waHlzKTsKK291dDoKKwltdXRleF91bmxvY2soJmNuZmctPmxvY2spOwogfQogRVhQT1JUX1NZTUJPTChjZmNuZmdfYWRkX3BoeV9sYXllcik7CiAKK2ludCBjZmNuZmdfc2V0X3BoeV9zdGF0ZShzdHJ1Y3QgY2ZjbmZnICpjbmZnLCBzdHJ1Y3QgY2ZsYXllciAqcGh5X2xheWVyLAorCQlib29sIHVwKQoreworCXN0cnVjdCBjZmNuZmdfcGh5aW5mbyAqcGh5aW5mbzsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlwaHlpbmZvID0gY2ZjbmZnX2dldF9waHlpbmZvX3JjdShjbmZnLCBwaHlfbGF5ZXItPmlkKTsKKwlpZiAocGh5aW5mbyA9PSBOVUxMKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAocGh5aW5mby0+dXAgPT0gdXApIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybiAwOworCX0KKwlwaHlpbmZvLT51cCA9IHVwOworCisJaWYgKHVwKSB7CisJCWNmZnJtbF9ob2xkKHBoeWluZm8tPmZybV9sYXllcik7CisJCWNmbXV4bF9zZXRfZG5sYXllcihjbmZnLT5tdXgsIHBoeWluZm8tPmZybV9sYXllciwKKwkJCQkJcGh5X2xheWVyLT5pZCk7CisJfSBlbHNlIHsKKwkJY2ZtdXhsX3JlbW92ZV9kbmxheWVyKGNuZmctPm11eCwgcGh5X2xheWVyLT5pZCk7CisJCWNmZnJtbF9wdXQocGh5aW5mby0+ZnJtX2xheWVyKTsKKwl9CisKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woY2ZjbmZnX3NldF9waHlfc3RhdGUpOworCiBpbnQgY2ZjbmZnX2RlbF9waHlfbGF5ZXIoc3RydWN0IGNmY25mZyAqY25mZywgc3RydWN0IGNmbGF5ZXIgKnBoeV9sYXllcikKIHsKIAlzdHJ1Y3QgY2ZsYXllciAqZnJtbCwgKmZybWxfZG47CiAJdTE2IHBoeWlkOwotCXBoeWlkID0gcGh5X2xheWVyLT5pZDsKLQljYWlmX2Fzc2VydChwaHlpZCA9PSBjbmZnLT5waHlfbGF5ZXJzW3BoeWlkXS5pZCk7Ci0JY2FpZl9hc3NlcnQocGh5X2xheWVyID09IGNuZmctPnBoeV9sYXllcnNbcGh5aWRdLnBoeV9sYXllcik7Ci0JY2FpZl9hc3NlcnQocGh5X2xheWVyLT5pZCA9PSBwaHlpZCk7Ci0JY2FpZl9hc3NlcnQoY25mZy0+cGh5X2xheWVyc1twaHlpZF0uZnJtX2xheWVyLT5pZCA9PSBwaHlpZCk7CisJc3RydWN0IGNmY25mZ19waHlpbmZvICpwaHlpbmZvOwogCi0JbWVtc2V0KCZjbmZnLT5waHlfbGF5ZXJzW3BoeV9sYXllci0+aWRdLCAwLAotCSAgICAgICBzaXplb2Yoc3RydWN0IGNmY25mZ19waHlpbmZvKSk7Ci0JZnJtbCA9IGNmbXV4bF9yZW1vdmVfZG5sYXllcihjbmZnLT5tdXgsIHBoeV9sYXllci0+aWQpOworCW1pZ2h0X3NsZWVwKCk7CisKKwltdXRleF9sb2NrKCZjbmZnLT5sb2NrKTsKKworCXBoeWlkID0gcGh5X2xheWVyLT5pZDsKKwlwaHlpbmZvID0gY2ZjbmZnX2dldF9waHlpbmZvX3JjdShjbmZnLCBwaHlpZCk7CisKKwlpZiAocGh5aW5mbyA9PSBOVUxMKSB7CisJCW11dGV4X3VubG9jaygmY25mZy0+bG9jayk7CisJCXJldHVybiAwOworCX0KKwljYWlmX2Fzc2VydChwaHlpZCA9PSBwaHlpbmZvLT5pZCk7CisJY2FpZl9hc3NlcnQocGh5X2xheWVyID09IHBoeWluZm8tPnBoeV9sYXllcik7CisJY2FpZl9hc3NlcnQocGh5X2xheWVyLT5pZCA9PSBwaHlpZCk7CisJY2FpZl9hc3NlcnQocGh5aW5mby0+ZnJtX2xheWVyLT5pZCA9PSBwaHlpZCk7CisKKwlsaXN0X2RlbF9yY3UoJnBoeWluZm8tPm5vZGUpOworCXN5bmNocm9uaXplX3JjdSgpOworCisJLyogRmFpbCBpZiByZWZlcmVuY2UgY291bnQgaXMgbm90IHplcm8gKi8KKwlpZiAoY2Zmcm1sX3JlZmNudF9yZWFkKHBoeWluZm8tPmZybV9sYXllcikgIT0gMCkgeworCQlwcl9pbmZvKCJXYWl0IGZvciBkZXZpY2UgaW51c2VcbiIpOworCQlsaXN0X2FkZF9yY3UoJnBoeWluZm8tPm5vZGUsICZjbmZnLT5waHlzKTsKKwkJbXV0ZXhfdW5sb2NrKCZjbmZnLT5sb2NrKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJZnJtbCA9IHBoeWluZm8tPmZybV9sYXllcjsKIAlmcm1sX2RuID0gZnJtbC0+ZG47CiAJY2Zmcm1sX3NldF91cGxheWVyKGZybWwsIE5VTEwpOwogCWNmZnJtbF9zZXRfZG5sYXllcihmcm1sLCBOVUxMKTsKLQlrZnJlZShmcm1sKTsKLQogCWlmIChwaHlfbGF5ZXIgIT0gZnJtbF9kbikgewogCQlsYXllcl9zZXRfdXAoZnJtbF9kbiwgTlVMTCk7CiAJCWxheWVyX3NldF9kbihmcm1sX2RuLCBOVUxMKTsKLQkJa2ZyZWUoZnJtbF9kbik7CiAJfQogCWxheWVyX3NldF91cChwaHlfbGF5ZXIsIE5VTEwpOworCisJaWYgKHBoeWluZm8tPnBoeV9sYXllciAhPSBmcm1sX2RuKQorCQlrZnJlZShmcm1sX2RuKTsKKworCWNmZnJtbF9mcmVlKGZybWwpOworCWtmcmVlKHBoeWluZm8pOworCW11dGV4X3VubG9jaygmY25mZy0+bG9jayk7CisKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woY2ZjbmZnX2RlbF9waHlfbGF5ZXIpOwpkaWZmIC0tZ2l0IGEvbmV0L2NhaWYvY2ZjdHJsLmMgYi9uZXQvY2FpZi9jZmN0cmwuYwppbmRleCAzY2Q4Zjk3Li4wYzAwYTYwIDEwMDY0NAotLS0gYS9uZXQvY2FpZi9jZmN0cmwuYworKysgYi9uZXQvY2FpZi9jZmN0cmwuYwpAQCAtMTcsNyArMTcsNiBAQAogI2RlZmluZSBVVElMSVRZX05BTUVfTEVOR1RIIDE2CiAjZGVmaW5lIENGUEtUX0NUUkxfUEtUX0xFTiAyMAogCi0KICNpZmRlZiBDQUlGX05PX0xPT1AKIHN0YXRpYyBpbnQgaGFuZGxlX2xvb3Aoc3RydWN0IGNmY3RybCAqY3RybCwKIAkJCSAgICAgIGludCBjbWQsIHN0cnVjdCBjZnBrdCAqcGt0KXsKQEAgLTUxLDE0ICs1MCwzMSBAQAogCXRoaXMtPnNlcnYubGF5ZXIucmVjZWl2ZSA9IGNmY3RybF9yZWN2OwogCXNwcmludGYodGhpcy0+c2Vydi5sYXllci5uYW1lLCAiY3RybCIpOwogCXRoaXMtPnNlcnYubGF5ZXIuY3RybGNtZCA9IGNmY3RybF9jdHJsY21kOworI2lmbmRlZiBDQUlGX05PX0xPT1AKIAlzcGluX2xvY2tfaW5pdCgmdGhpcy0+bG9vcF9saW5raWRfbG9jayk7CisJdGhpcy0+bG9vcF9saW5raWQgPSAxOworI2VuZGlmCiAJc3Bpbl9sb2NrX2luaXQoJnRoaXMtPmluZm9fbGlzdF9sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmdGhpcy0+bGlzdCk7Ci0JdGhpcy0+bG9vcF9saW5raWQgPSAxOwogCXJldHVybiAmdGhpcy0+c2Vydi5sYXllcjsKIH0KIAotc3RhdGljIGJvb2wgcGFyYW1fZXEoc3RydWN0IGNmY3RybF9saW5rX3BhcmFtICpwMSwgc3RydWN0IGNmY3RybF9saW5rX3BhcmFtICpwMikKK3ZvaWQgY2ZjdHJsX3JlbW92ZShzdHJ1Y3QgY2ZsYXllciAqbGF5ZXIpCit7CisJc3RydWN0IGNmY3RybF9yZXF1ZXN0X2luZm8gKnAsICp0bXA7CisJc3RydWN0IGNmY3RybCAqY3RybCA9IGNvbnRhaW5lcl9vYmoobGF5ZXIpOworCisJc3Bpbl9sb2NrX2JoKCZjdHJsLT5pbmZvX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIHRtcCwgJmN0cmwtPmxpc3QsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJnAtPmxpc3QpOworCQlrZnJlZShwKTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJmN0cmwtPmluZm9fbGlzdF9sb2NrKTsKKwlrZnJlZShsYXllcik7Cit9CisKK3N0YXRpYyBib29sIHBhcmFtX2VxKGNvbnN0IHN0cnVjdCBjZmN0cmxfbGlua19wYXJhbSAqcDEsCisJCQljb25zdCBzdHJ1Y3QgY2ZjdHJsX2xpbmtfcGFyYW0gKnAyKQogewogCWJvb2wgZXEgPQogCSAgICBwMS0+bGlua3R5cGUgPT0gcDItPmxpbmt0eXBlICYmCkBAIC0xMDAsOCArMTE2LDggQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgY2ZjdHJsX3JlcV9lcShzdHJ1Y3QgY2ZjdHJsX3JlcXVlc3RfaW5mbyAqcjEsCi0JCSAgIHN0cnVjdCBjZmN0cmxfcmVxdWVzdF9pbmZvICpyMikKK3N0YXRpYyBib29sIGNmY3RybF9yZXFfZXEoY29uc3Qgc3RydWN0IGNmY3RybF9yZXF1ZXN0X2luZm8gKnIxLAorCQkJICBjb25zdCBzdHJ1Y3QgY2ZjdHJsX3JlcXVlc3RfaW5mbyAqcjIpCiB7CiAJaWYgKHIxLT5jbWQgIT0gcjItPmNtZCkKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMTEyLDIzICsxMjgsMjIgQEAKIH0KIAogLyogSW5zZXJ0IHJlcXVlc3QgYXQgdGhlIGVuZCAqLwotdm9pZCBjZmN0cmxfaW5zZXJ0X3JlcShzdHJ1Y3QgY2ZjdHJsICpjdHJsLAorc3RhdGljIHZvaWQgY2ZjdHJsX2luc2VydF9yZXEoc3RydWN0IGNmY3RybCAqY3RybCwKIAkJCSAgICAgIHN0cnVjdCBjZmN0cmxfcmVxdWVzdF9pbmZvICpyZXEpCiB7Ci0Jc3Bpbl9sb2NrKCZjdHJsLT5pbmZvX2xpc3RfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZjdHJsLT5pbmZvX2xpc3RfbG9jayk7CiAJYXRvbWljX2luYygmY3RybC0+cmVxX3NlcV9ubyk7CiAJcmVxLT5zZXF1ZW5jZV9ubyA9IGF0b21pY19yZWFkKCZjdHJsLT5yZXFfc2VxX25vKTsKIAlsaXN0X2FkZF90YWlsKCZyZXEtPmxpc3QsICZjdHJsLT5saXN0KTsKLQlzcGluX3VubG9jaygmY3RybC0+aW5mb19saXN0X2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZjdHJsLT5pbmZvX2xpc3RfbG9jayk7CiB9CiAKIC8qIENvbXBhcmUgYW5kIHJlbW92ZSByZXF1ZXN0ICovCi1zdHJ1Y3QgY2ZjdHJsX3JlcXVlc3RfaW5mbyAqY2ZjdHJsX3JlbW92ZV9yZXEoc3RydWN0IGNmY3RybCAqY3RybCwKLQkJCQkJICAgICAgc3RydWN0IGNmY3RybF9yZXF1ZXN0X2luZm8gKnJlcSkKK3N0YXRpYyBzdHJ1Y3QgY2ZjdHJsX3JlcXVlc3RfaW5mbyAqY2ZjdHJsX3JlbW92ZV9yZXEoc3RydWN0IGNmY3RybCAqY3RybCwKKwkJCQkJCXN0cnVjdCBjZmN0cmxfcmVxdWVzdF9pbmZvICpyZXEpCiB7CiAJc3RydWN0IGNmY3RybF9yZXF1ZXN0X2luZm8gKnAsICp0bXAsICpmaXJzdDsKIAotCXNwaW5fbG9jaygmY3RybC0+aW5mb19saXN0X2xvY2spOwogCWZpcnN0ID0gbGlzdF9maXJzdF9lbnRyeSgmY3RybC0+bGlzdCwgc3RydWN0IGNmY3RybF9yZXF1ZXN0X2luZm8sIGxpc3QpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIHRtcCwgJmN0cmwtPmxpc3QsIGxpc3QpIHsKQEAgLTE0NCw3ICsxNTksNiBAQAogCX0KIAlwID0gTlVMTDsKIG91dDoKLQlzcGluX3VubG9jaygmY3RybC0+aW5mb19saXN0X2xvY2spOwogCXJldHVybiBwOwogfQogCkBAIC0xNTQsMTYgKzE2OCw2IEBACiAJcmV0dXJuICZ0aGlzLT5yZXM7CiB9CiAKLXZvaWQgY2ZjdHJsX3NldF9kbmxheWVyKHN0cnVjdCBjZmxheWVyICp0aGlzLCBzdHJ1Y3QgY2ZsYXllciAqZG4pCi17Ci0JdGhpcy0+ZG4gPSBkbjsKLX0KLQotdm9pZCBjZmN0cmxfc2V0X3VwbGF5ZXIoc3RydWN0IGNmbGF5ZXIgKnRoaXMsIHN0cnVjdCBjZmxheWVyICp1cCkKLXsKLQl0aGlzLT51cCA9IHVwOwotfQotCiBzdGF0aWMgdm9pZCBpbml0X2luZm8oc3RydWN0IGNhaWZfcGF5bG9hZF9pbmZvICppbmZvLCBzdHJ1Y3QgY2ZjdHJsICpjZmN0cmwpCiB7CiAJaW5mby0+aGRyX2xlbiA9IDA7CkBAIC0xODgsMTAgKzE5Miw2IEBACiAJY2Zwa3RfYWRkYmR5KHBrdCwgcGh5c2xpbmtpZCk7CiAJcmV0ID0KIAkgICAgY2ZjdHJsLT5zZXJ2LmxheWVyLmRuLT50cmFuc21pdChjZmN0cmwtPnNlcnYubGF5ZXIuZG4sIHBrdCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJfZXJyKCJDb3VsZCBub3QgdHJhbnNtaXQgZW51bSBtZXNzYWdlXG4iKTsKLQkJY2Zwa3RfZGVzdHJveShwa3QpOwotCX0KIH0KIAogaW50IGNmY3RybF9saW5rdXBfcmVxdWVzdChzdHJ1Y3QgY2ZsYXllciAqbGF5ZXIsCkBAIC0yMDUsMTQgKzIwNSwyMyBAQAogCXN0cnVjdCBjZmN0cmxfcmVxdWVzdF9pbmZvICpyZXE7CiAJaW50IHJldDsKIAljaGFyIHV0aWxpdHlfbmFtZVsxNl07Ci0Jc3RydWN0IGNmcGt0ICpwa3QgPSBjZnBrdF9jcmVhdGUoQ0ZQS1RfQ1RSTF9QS1RfTEVOKTsKKwlzdHJ1Y3QgY2Zwa3QgKnBrdDsKKworCWlmIChjZmN0cmxfY2FuY2VsX3JlcShsYXllciwgdXNlcl9sYXllcikgPiAwKSB7CisJCS8qIFNsaWdodCBQYXJhbm9pYSwgY2hlY2sgaWYgYWxyZWFkeSBjb25uZWN0aW5nICovCisJCXByX2VycigiRHVwbGljYXRlIGNvbm5lY3QgcmVxdWVzdCBmb3Igc2FtZSBjbGllbnRcbiIpOworCQlXQVJOX09OKDEpOworCQlyZXR1cm4gLUVBTFJFQURZOworCX0KKworCXBrdCA9IGNmcGt0X2NyZWF0ZShDRlBLVF9DVFJMX1BLVF9MRU4pOwogCWlmICghcGt0KSB7CiAJCXByX3dhcm4oIk91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJY2Zwa3RfYWRkYmR5KHBrdCwgQ0ZDVFJMX0NNRF9MSU5LX1NFVFVQKTsKLQljZnBrdF9hZGRiZHkocGt0LCAocGFyYW0tPmNodHlwZSA8PCA0KSArIHBhcmFtLT5saW5rdHlwZSk7Ci0JY2Zwa3RfYWRkYmR5KHBrdCwgKHBhcmFtLT5wcmlvcml0eSA8PCAzKSArIHBhcmFtLT5waHlpZCk7CisJY2Zwa3RfYWRkYmR5KHBrdCwgKHBhcmFtLT5jaHR5cGUgPDwgNCkgfCBwYXJhbS0+bGlua3R5cGUpOworCWNmcGt0X2FkZGJkeShwa3QsIChwYXJhbS0+cHJpb3JpdHkgPDwgMykgfCBwYXJhbS0+cGh5aWQpOwogCWNmcGt0X2FkZGJkeShwa3QsIHBhcmFtLT5lbmRwb2ludCAmIDB4MDMpOwogCiAJc3dpdGNoIChwYXJhbS0+bGlua3R5cGUpIHsKQEAgLTI3NSw5ICsyODQsMTMgQEAKIAlyZXQgPQogCSAgICBjZmN0cmwtPnNlcnYubGF5ZXIuZG4tPnRyYW5zbWl0KGNmY3RybC0+c2Vydi5sYXllci5kbiwgcGt0KTsKIAlpZiAocmV0IDwgMCkgewotCQlwcl9lcnIoIkNvdWxkIG5vdCB0cmFuc21pdCBsaW5rc2V0dXAgcmVxdWVzdFxuIik7Ci0JCWNmcGt0X2Rlc3Ryb3kocGt0KTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWludCBjb3VudDsKKworCQljb3VudCA9IGNmY3RybF9jYW5jZWxfcmVxKCZjZmN0cmwtPnNlcnYubGF5ZXIsCisJCQkJCQl1c2VyX2xheWVyKTsKKwkJaWYgKGNvdW50ICE9IDEpCisJCQlwcl9lcnIoIkNvdWxkIG5vdCByZW1vdmUgcmVxdWVzdCAoJWQpIiwgY291bnQpOworCQkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjk3LDgwICszMTAsMjkgQEAKIAlpbml0X2luZm8oY2Zwa3RfaW5mbyhwa3QpLCBjZmN0cmwpOwogCXJldCA9CiAJICAgIGNmY3RybC0+c2Vydi5sYXllci5kbi0+dHJhbnNtaXQoY2ZjdHJsLT5zZXJ2LmxheWVyLmRuLCBwa3QpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByX2VycigiQ291bGQgbm90IHRyYW5zbWl0IGxpbmstZG93biByZXF1ZXN0XG4iKTsKLQkJY2Zwa3RfZGVzdHJveShwa3QpOwotCX0KKyNpZm5kZWYgQ0FJRl9OT19MT09QCisJY2ZjdHJsLT5sb29wX2xpbmt1c2VkW2NoYW5uZWxpZF0gPSAwOworI2VuZGlmCiAJcmV0dXJuIHJldDsKIH0KIAotdm9pZCBjZmN0cmxfc2xlZXBfcmVxKHN0cnVjdCBjZmxheWVyICpsYXllcikKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBjZmN0cmwgKmNmY3RybCA9IGNvbnRhaW5lcl9vYmoobGF5ZXIpOwotCXN0cnVjdCBjZnBrdCAqcGt0ID0gY2Zwa3RfY3JlYXRlKENGUEtUX0NUUkxfUEtUX0xFTik7Ci0JaWYgKCFwa3QpIHsKLQkJcHJfd2FybigiT3V0IG9mIG1lbW9yeVxuIik7Ci0JCXJldHVybjsKLQl9Ci0JY2Zwa3RfYWRkYmR5KHBrdCwgQ0ZDVFJMX0NNRF9TTEVFUCk7Ci0JaW5pdF9pbmZvKGNmcGt0X2luZm8ocGt0KSwgY2ZjdHJsKTsKLQlyZXQgPQotCSAgICBjZmN0cmwtPnNlcnYubGF5ZXIuZG4tPnRyYW5zbWl0KGNmY3RybC0+c2Vydi5sYXllci5kbiwgcGt0KTsKLQlpZiAocmV0IDwgMCkKLQkJY2Zwa3RfZGVzdHJveShwa3QpOwotfQotCi12b2lkIGNmY3RybF93YWtlX3JlcShzdHJ1Y3QgY2ZsYXllciAqbGF5ZXIpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgY2ZjdHJsICpjZmN0cmwgPSBjb250YWluZXJfb2JqKGxheWVyKTsKLQlzdHJ1Y3QgY2Zwa3QgKnBrdCA9IGNmcGt0X2NyZWF0ZShDRlBLVF9DVFJMX1BLVF9MRU4pOwotCWlmICghcGt0KSB7Ci0JCXByX3dhcm4oIk91dCBvZiBtZW1vcnlcbiIpOwotCQlyZXR1cm47Ci0JfQotCWNmcGt0X2FkZGJkeShwa3QsIENGQ1RSTF9DTURfV0FLRSk7Ci0JaW5pdF9pbmZvKGNmcGt0X2luZm8ocGt0KSwgY2ZjdHJsKTsKLQlyZXQgPQotCSAgICBjZmN0cmwtPnNlcnYubGF5ZXIuZG4tPnRyYW5zbWl0KGNmY3RybC0+c2Vydi5sYXllci5kbiwgcGt0KTsKLQlpZiAocmV0IDwgMCkKLQkJY2Zwa3RfZGVzdHJveShwa3QpOwotfQotCi12b2lkIGNmY3RybF9nZXRzdGFydHJlYXNvbl9yZXEoc3RydWN0IGNmbGF5ZXIgKmxheWVyKQotewotCWludCByZXQ7Ci0Jc3RydWN0IGNmY3RybCAqY2ZjdHJsID0gY29udGFpbmVyX29iaihsYXllcik7Ci0Jc3RydWN0IGNmcGt0ICpwa3QgPSBjZnBrdF9jcmVhdGUoQ0ZQS1RfQ1RSTF9QS1RfTEVOKTsKLQlpZiAoIXBrdCkgewotCQlwcl93YXJuKCJPdXQgb2YgbWVtb3J5XG4iKTsKLQkJcmV0dXJuOwotCX0KLQljZnBrdF9hZGRiZHkocGt0LCBDRkNUUkxfQ01EX1NUQVJUX1JFQVNPTik7Ci0JaW5pdF9pbmZvKGNmcGt0X2luZm8ocGt0KSwgY2ZjdHJsKTsKLQlyZXQgPQotCSAgICBjZmN0cmwtPnNlcnYubGF5ZXIuZG4tPnRyYW5zbWl0KGNmY3RybC0+c2Vydi5sYXllci5kbiwgcGt0KTsKLQlpZiAocmV0IDwgMCkKLQkJY2Zwa3RfZGVzdHJveShwa3QpOwotfQotCi0KLXZvaWQgY2ZjdHJsX2NhbmNlbF9yZXEoc3RydWN0IGNmbGF5ZXIgKmxheXIsIHN0cnVjdCBjZmxheWVyICphZGFwX2xheWVyKQoraW50IGNmY3RybF9jYW5jZWxfcmVxKHN0cnVjdCBjZmxheWVyICpsYXlyLCBzdHJ1Y3QgY2ZsYXllciAqYWRhcF9sYXllcikKIHsKIAlzdHJ1Y3QgY2ZjdHJsX3JlcXVlc3RfaW5mbyAqcCwgKnRtcDsKIAlzdHJ1Y3QgY2ZjdHJsICpjdHJsID0gY29udGFpbmVyX29iaihsYXlyKTsKLQlzcGluX2xvY2soJmN0cmwtPmluZm9fbGlzdF9sb2NrKTsKKwlpbnQgZm91bmQgPSAwOworCXNwaW5fbG9ja19iaCgmY3RybC0+aW5mb19saXN0X2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIHRtcCwgJmN0cmwtPmxpc3QsIGxpc3QpIHsKIAkJaWYgKHAtPmNsaWVudF9sYXllciA9PSBhZGFwX2xheWVyKSB7Ci0JCQlwcl9kZWJ1ZygiY2FuY2VsIHJlcSA6JWRcbiIsIHAtPnNlcXVlbmNlX25vKTsKIAkJCWxpc3RfZGVsKCZwLT5saXN0KTsKIAkJCWtmcmVlKHApOworCQkJZm91bmQrKzsKIAkJfQogCX0KIAotCXNwaW5fdW5sb2NrKCZjdHJsLT5pbmZvX2xpc3RfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJmN0cmwtPmluZm9fbGlzdF9sb2NrKTsKKwlyZXR1cm4gZm91bmQ7CiB9CiAKIHN0YXRpYyBpbnQgY2ZjdHJsX3JlY3Yoc3RydWN0IGNmbGF5ZXIgKmxheWVyLCBzdHJ1Y3QgY2Zwa3QgKnBrdCkKQEAgLTUyMiw2ICs0ODQsNyBAQAogCiAJCQlyc3AuY21kID0gY21kOwogCQkJcnNwLnBhcmFtID0gbGlua3BhcmFtOworCQkJc3Bpbl9sb2NrX2JoKCZjZmN0cmwtPmluZm9fbGlzdF9sb2NrKTsKIAkJCXJlcSA9IGNmY3RybF9yZW1vdmVfcmVxKGNmY3RybCwgJnJzcCk7CiAKIAkJCWlmIChDRkNUUkxfRVJSX0JJVCA9PSAoQ0ZDVFJMX0VSUl9CSVQgJiBjbWRyc3ApIHx8CkBAIC01NDEsNiArNTA0LDggQEAKIAogCQkJaWYgKHJlcSAhPSBOVUxMKQogCQkJCWtmcmVlKHJlcSk7CisKKwkJCXNwaW5fdW5sb2NrX2JoKCZjZmN0cmwtPmluZm9fbGlzdF9sb2NrKTsKIAkJfQogCQlicmVhazsKIAljYXNlIENGQ1RSTF9DTURfTElOS19ERVNUUk9ZOgpAQCAtNTg0LDEyICs1NDksMjkgQEAKIAlzd2l0Y2ggKGN0cmwpIHsKIAljYXNlIF9DQUlGX0NUUkxDTURfUEhZSUZfRkxPV19PRkZfSU5EOgogCWNhc2UgQ0FJRl9DVFJMQ01EX0ZMT1dfT0ZGX0lORDoKLQkJc3Bpbl9sb2NrKCZ0aGlzLT5pbmZvX2xpc3RfbG9jayk7CisJCXNwaW5fbG9ja19iaCgmdGhpcy0+aW5mb19saXN0X2xvY2spOwogCQlpZiAoIWxpc3RfZW1wdHkoJnRoaXMtPmxpc3QpKSB7CiAJCQlwcl9kZWJ1ZygiUmVjZWl2ZWQgZmxvdyBvZmYgaW4gY29udHJvbCBsYXllclxuIik7CiAJCX0KLQkJc3Bpbl91bmxvY2soJnRoaXMtPmluZm9fbGlzdF9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnRoaXMtPmluZm9fbGlzdF9sb2NrKTsKIAkJYnJlYWs7CisJY2FzZSBfQ0FJRl9DVFJMQ01EX1BIWUlGX0RPV05fSU5EOiB7CisJCXN0cnVjdCBjZmN0cmxfcmVxdWVzdF9pbmZvICpwLCAqdG1wOworCisJCS8qIEZpbmQgYWxsIGNvbm5lY3QgcmVxdWVzdCBhbmQgcmVwb3J0IGZhaWx1cmUgKi8KKwkJc3Bpbl9sb2NrX2JoKCZ0aGlzLT5pbmZvX2xpc3RfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCB0bXAsICZ0aGlzLT5saXN0LCBsaXN0KSB7CisJCQlpZiAocC0+cGFyYW0ucGh5aWQgPT0gcGh5aWQpIHsKKwkJCQlsaXN0X2RlbCgmcC0+bGlzdCk7CisJCQkJcC0+Y2xpZW50X2xheWVyLT5jdHJsY21kKHAtPmNsaWVudF9sYXllciwKKwkJCQkJCUNBSUZfQ1RSTENNRF9JTklUX0ZBSUxfUlNQLAorCQkJCQkJcGh5aWQpOworCQkJCWtmcmVlKHApOworCQkJfQorCQl9CisJCXNwaW5fdW5sb2NrX2JoKCZ0aGlzLT5pbmZvX2xpc3RfbG9jayk7CisJCWJyZWFrOworCX0KIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC01OTksMjcgKzU4MSwzMyBAQAogc3RhdGljIGludCBoYW5kbGVfbG9vcChzdHJ1Y3QgY2ZjdHJsICpjdHJsLCBpbnQgY21kLCBzdHJ1Y3QgY2Zwa3QgKnBrdCkKIHsKIAlzdGF0aWMgaW50IGxhc3RfbGlua2lkOworCXN0YXRpYyBpbnQgZGVjOwogCXU4IGxpbmtpZCwgbGlua3R5cGUsIHRtcDsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgQ0ZDVFJMX0NNRF9MSU5LX1NFVFVQOgotCQlzcGluX2xvY2soJmN0cmwtPmxvb3BfbGlua2lkX2xvY2spOwotCQlmb3IgKGxpbmtpZCA9IGxhc3RfbGlua2lkICsgMTsgbGlua2lkIDwgMjU1OyBsaW5raWQrKykKLQkJCWlmICghY3RybC0+bG9vcF9saW5rdXNlZFtsaW5raWRdKQotCQkJCWdvdG8gZm91bmQ7CisJCXNwaW5fbG9ja19iaCgmY3RybC0+bG9vcF9saW5raWRfbG9jayk7CisJCWlmICghZGVjKSB7CisJCQlmb3IgKGxpbmtpZCA9IGxhc3RfbGlua2lkICsgMTsgbGlua2lkIDwgMjU1OyBsaW5raWQrKykKKwkJCQlpZiAoIWN0cmwtPmxvb3BfbGlua3VzZWRbbGlua2lkXSkKKwkJCQkJZ290byBmb3VuZDsKKwkJfQorCQlkZWMgPSAxOwogCQlmb3IgKGxpbmtpZCA9IGxhc3RfbGlua2lkIC0gMTsgbGlua2lkID4gMDsgbGlua2lkLS0pCiAJCQlpZiAoIWN0cmwtPmxvb3BfbGlua3VzZWRbbGlua2lkXSkKIAkJCQlnb3RvIGZvdW5kOwotCQlzcGluX3VubG9jaygmY3RybC0+bG9vcF9saW5raWRfbG9jayk7Ci0JCXByX2VycigiT3V0IG9mIGxpbmstaWRzXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXNwaW5fdW5sb2NrX2JoKCZjdHJsLT5sb29wX2xpbmtpZF9sb2NrKTsKKwogZm91bmQ6CisJCWlmIChsaW5raWQgPCAxMCkKKwkJCWRlYyA9IDA7CisKIAkJaWYgKCFjdHJsLT5sb29wX2xpbmt1c2VkW2xpbmtpZF0pCiAJCQljdHJsLT5sb29wX2xpbmt1c2VkW2xpbmtpZF0gPSAxOwogCiAJCWxhc3RfbGlua2lkID0gbGlua2lkOwogCiAJCWNmcGt0X2FkZF90cmFpbChwa3QsICZsaW5raWQsIDEpOwotCQlzcGluX3VubG9jaygmY3RybC0+bG9vcF9saW5raWRfbG9jayk7CisJCXNwaW5fdW5sb2NrX2JoKCZjdHJsLT5sb29wX2xpbmtpZF9sb2NrKTsKIAkJY2Zwa3RfcGVla19oZWFkKHBrdCwgJmxpbmt0eXBlLCAxKTsKIAkJaWYgKGxpbmt0eXBlID09ICBDRkNUUkxfU1JWX1VUSUwpIHsKIAkJCXRtcCA9IDB4MDE7CkBAIC02MjksMTAgKzYxNywxMCBAQAogCQlicmVhazsKIAogCWNhc2UgQ0ZDVFJMX0NNRF9MSU5LX0RFU1RST1k6Ci0JCXNwaW5fbG9jaygmY3RybC0+bG9vcF9saW5raWRfbG9jayk7CisJCXNwaW5fbG9ja19iaCgmY3RybC0+bG9vcF9saW5raWRfbG9jayk7CiAJCWNmcGt0X3BlZWtfaGVhZChwa3QsICZsaW5raWQsIDEpOwogCQljdHJsLT5sb29wX2xpbmt1c2VkW2xpbmtpZF0gPSAwOwotCQlzcGluX3VubG9jaygmY3RybC0+bG9vcF9saW5raWRfbG9jayk7CisJCXNwaW5fdW5sb2NrX2JoKCZjdHJsLT5sb29wX2xpbmtpZF9sb2NrKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvY2FpZi9jZmRnbWwuYyBiL25ldC9jYWlmL2NmZGdtbC5jCmluZGV4IDA1NGZkYjUuLjAzODJkZWMgMTAwNjQ0Ci0tLSBhL25ldC9jYWlmL2NmZGdtbC5jCisrKyBiL25ldC9jYWlmL2NmZGdtbC5jCkBAIC0xMDgsMTAgKzEwOCw1IEBACiAJICovCiAJaW5mby0+aGRyX2xlbiA9IDQ7CiAJaW5mby0+ZGV2X2luZm8gPSAmc2VydmljZS0+ZGV2X2luZm87Ci0JcmV0ID0gbGF5ci0+ZG4tPnRyYW5zbWl0KGxheXItPmRuLCBwa3QpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXUzMiB0bXAzMjsKLQkJY2Zwa3RfZXh0cl9oZWFkKHBrdCwgJnRtcDMyLCA0KTsKLQl9Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gbGF5ci0+ZG4tPnRyYW5zbWl0KGxheXItPmRuLCBwa3QpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2NhaWYvY2Zmcm1sLmMgYi9uZXQvY2FpZi9jZmZybWwuYwppbmRleCBhNDQ1MDQzLi4wNDIwNGIyIDEwMDY0NAotLS0gYS9uZXQvY2FpZi9jZmZybWwuYworKysgYi9uZXQvY2FpZi9jZmZybWwuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYy1jY2l0dC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPG5ldC9jYWlmL2NhaWZfbGF5ZXIuaD4KICNpbmNsdWRlIDxuZXQvY2FpZi9jZnBrdC5oPgogI2luY2x1ZGUgPG5ldC9jYWlmL2NmZnJtbC5oPgpAQCAtMjEsNiArMjIsNyBAQAogc3RydWN0IGNmZnJtbCB7CiAJc3RydWN0IGNmbGF5ZXIgbGF5ZXI7CiAJYm9vbCBkb2ZjczsJCS8qICE8IEZDUyBhY3RpdmUgKi8KKwlpbnQgX19wZXJjcHUJCSpwY3B1X3JlZmNudDsKIH07CiAKIHN0YXRpYyBpbnQgY2Zmcm1sX3JlY2VpdmUoc3RydWN0IGNmbGF5ZXIgKmxheXIsIHN0cnVjdCBjZnBrdCAqcGt0KTsKQEAgLTM3LDYgKzM5LDEyIEBACiAJCXByX3dhcm4oIk91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CisJdGhpcy0+cGNwdV9yZWZjbnQgPSBhbGxvY19wZXJjcHUoaW50KTsKKwlpZiAodGhpcy0+cGNwdV9yZWZjbnQgPT0gTlVMTCkgeworCQlrZnJlZSh0aGlzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCiAJY2FpZl9hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IGNmZnJtbCwgbGF5ZXIpID09IDApOwogCiAJbWVtc2V0KHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgY2ZsYXllcikpOwpAQCAtNDksNiArNTcsMTMgQEAKIAlyZXR1cm4gKHN0cnVjdCBjZmxheWVyICopIHRoaXM7CiB9CiAKK3ZvaWQgY2Zmcm1sX2ZyZWUoc3RydWN0IGNmbGF5ZXIgKmxheWVyKQoreworCXN0cnVjdCBjZmZybWwgKnRoaXMgPSBjb250YWluZXJfb2JqKGxheWVyKTsKKwlmcmVlX3BlcmNwdSh0aGlzLT5wY3B1X3JlZmNudCk7CisJa2ZyZWUobGF5ZXIpOworfQorCiB2b2lkIGNmZnJtbF9zZXRfdXBsYXllcihzdHJ1Y3QgY2ZsYXllciAqdGhpcywgc3RydWN0IGNmbGF5ZXIgKnVwKQogewogCXRoaXMtPnVwID0gdXA7CkBAIC0xMTIsNiArMTI3LDEzIEBACiAJCWNmcGt0X2Rlc3Ryb3kocGt0KTsKIAkJcmV0dXJuIC1FUFJPVE87CiAJfQorCisJaWYgKGxheXItPnVwID09IE5VTEwpIHsKKwkJcHJfZXJyKCJMYXlyIHVwIGlzIG1pc3NpbmchXG4iKTsKKwkJY2Zwa3RfZGVzdHJveShwa3QpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlyZXR1cm4gbGF5ci0+dXAtPnJlY2VpdmUobGF5ci0+dXAsIHBrdCk7CiB9CiAKQEAgLTEyMCw3ICsxNDIsNiBAQAogCWludCB0bXA7CiAJdTE2IGNoa3M7CiAJdTE2IGxlbjsKLQlpbnQgcmV0OwogCXN0cnVjdCBjZmZybWwgKnRoaXMgPSBjb250YWluZXJfb2JqKGxheXIpOwogCWlmICh0aGlzLT5kb2ZjcykgewogCQljaGtzID0gY2Zwa3RfaXRlcmF0ZShwa3QsIGNmZnJtbF9jaGVja3N1bSwgMHhmZmZmKTsKQEAgLTEzNSwxOSArMTU2LDQ0IEBACiAJY2Zwa3RfaW5mbyhwa3QpLT5oZHJfbGVuICs9IDI7CiAJaWYgKGNmcGt0X2Vycm9uZW91cyhwa3QpKSB7CiAJCXByX2VycigiUGFja2V0IGlzIGVycm9uZW91cyFcbiIpOworCQljZnBrdF9kZXN0cm95KHBrdCk7CiAJCXJldHVybiAtRVBST1RPOwogCX0KLQlyZXQgPSBsYXlyLT5kbi0+dHJhbnNtaXQobGF5ci0+ZG4sIHBrdCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJLyogUmVtb3ZlIGhlYWRlciBvbiBmYXVsdHkgcGFja2V0LiAqLwotCQljZnBrdF9leHRyX2hlYWQocGt0LCAmdG1wLCAyKTsKKworCWlmIChsYXlyLT5kbiA9PSBOVUxMKSB7CisJCWNmcGt0X2Rlc3Ryb3kocGt0KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAl9Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gbGF5ci0+ZG4tPnRyYW5zbWl0KGxheXItPmRuLCBwa3QpOwogfQogCiBzdGF0aWMgdm9pZCBjZmZybWxfY3RybGNtZChzdHJ1Y3QgY2ZsYXllciAqbGF5ciwgZW51bSBjYWlmX2N0cmxjbWQgY3RybCwKIAkJCQkJaW50IHBoeWlkKQogewotCWlmIChsYXlyLT51cC0+Y3RybGNtZCkKKwlpZiAobGF5ci0+dXAgJiYgbGF5ci0+dXAtPmN0cmxjbWQpCiAJCWxheXItPnVwLT5jdHJsY21kKGxheXItPnVwLCBjdHJsLCBsYXlyLT5pZCk7CiB9CisKK3ZvaWQgY2Zmcm1sX3B1dChzdHJ1Y3QgY2ZsYXllciAqbGF5cikKK3sKKwlzdHJ1Y3QgY2Zmcm1sICp0aGlzID0gY29udGFpbmVyX29iaihsYXlyKTsKKwlpZiAobGF5ciAhPSBOVUxMICYmIHRoaXMtPnBjcHVfcmVmY250ICE9IE5VTEwpCisJCWlycXNhZmVfY3B1X2RlYygqdGhpcy0+cGNwdV9yZWZjbnQpOworfQorCit2b2lkIGNmZnJtbF9ob2xkKHN0cnVjdCBjZmxheWVyICpsYXlyKQoreworCXN0cnVjdCBjZmZybWwgKnRoaXMgPSBjb250YWluZXJfb2JqKGxheXIpOworCWlmIChsYXlyICE9IE5VTEwgJiYgdGhpcy0+cGNwdV9yZWZjbnQgIT0gTlVMTCkKKwkJaXJxc2FmZV9jcHVfaW5jKCp0aGlzLT5wY3B1X3JlZmNudCk7Cit9CisKK2ludCBjZmZybWxfcmVmY250X3JlYWQoc3RydWN0IGNmbGF5ZXIgKmxheXIpCit7CisJaW50IGksIHJlZmNudCA9IDA7CisJc3RydWN0IGNmZnJtbCAqdGhpcyA9IGNvbnRhaW5lcl9vYmoobGF5cik7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCisJCXJlZmNudCArPSAqcGVyX2NwdV9wdHIodGhpcy0+cGNwdV9yZWZjbnQsIGkpOworCXJldHVybiByZWZjbnQ7Cit9CmRpZmYgLS1naXQgYS9uZXQvY2FpZi9jZm11eGwuYyBiL25ldC9jYWlmL2NmbXV4bC5jCmluZGV4IDI0ZjFmZmEuLjJhNTZkZjcgMTAwNjQ0Ci0tLSBhL25ldC9jYWlmL2NmbXV4bC5jCisrKyBiL25ldC9jYWlmL2NmbXV4bC5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3QuaD4KICNpbmNsdWRlIDxuZXQvY2FpZi9jZnBrdC5oPgogI2luY2x1ZGUgPG5ldC9jYWlmL2NmbXV4bC5oPgogI2luY2x1ZGUgPG5ldC9jYWlmL2Nmc3J2bC5oPgpAQCAtNjQsNjYgKzY1LDMxIEBACiBpbnQgY2ZtdXhsX3NldF91cGxheWVyKHN0cnVjdCBjZmxheWVyICpsYXlyLCBzdHJ1Y3QgY2ZsYXllciAqdXAsIHU4IGxpbmtpZCkKIHsKIAlzdHJ1Y3QgY2ZtdXhsICptdXhsID0gY29udGFpbmVyX29iaihsYXlyKTsKLQlzcGluX2xvY2soJm11eGwtPnJlY2VpdmVfbG9jayk7Ci0JY2ZzcnZsX2dldCh1cCk7Ci0JbGlzdF9hZGQoJnVwLT5ub2RlLCAmbXV4bC0+c3J2bF9saXN0KTsKLQlzcGluX3VubG9jaygmbXV4bC0+cmVjZWl2ZV9sb2NrKTsKKworCXNwaW5fbG9ja19iaCgmbXV4bC0+cmVjZWl2ZV9sb2NrKTsKKwlsaXN0X2FkZF9yY3UoJnVwLT5ub2RlLCAmbXV4bC0+c3J2bF9saXN0KTsKKwlzcGluX3VubG9ja19iaCgmbXV4bC0+cmVjZWl2ZV9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIAotYm9vbCBjZm11eGxfaXNfcGh5X2ludXNlKHN0cnVjdCBjZmxheWVyICpsYXlyLCB1OCBwaHlpZCkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlOwotCXN0cnVjdCBjZmxheWVyICpsYXllcjsKLQlzdHJ1Y3QgY2ZtdXhsICptdXhsID0gY29udGFpbmVyX29iaihsYXlyKTsKLQlib29sIG1hdGNoID0gZmFsc2U7Ci0Jc3Bpbl9sb2NrKCZtdXhsLT5yZWNlaXZlX2xvY2spOwotCi0JbGlzdF9mb3JfZWFjaChub2RlLCAmbXV4bC0+c3J2bF9saXN0KSB7Ci0JCWxheWVyID0gbGlzdF9lbnRyeShub2RlLCBzdHJ1Y3QgY2ZsYXllciwgbm9kZSk7Ci0JCWlmIChjZnNydmxfcGh5aWRfbWF0Y2gobGF5ZXIsIHBoeWlkKSkgewotCQkJbWF0Y2ggPSB0cnVlOwotCQkJYnJlYWs7Ci0JCX0KLQotCX0KLQlzcGluX3VubG9jaygmbXV4bC0+cmVjZWl2ZV9sb2NrKTsKLQlyZXR1cm4gbWF0Y2g7Ci19Ci0KLXU4IGNmbXV4bF9nZXRfcGh5aWQoc3RydWN0IGNmbGF5ZXIgKmxheXIsIHU4IGNoYW5uZWxfaWQpCi17Ci0Jc3RydWN0IGNmbGF5ZXIgKnVwOwotCWludCBwaHlpZDsKLQlzdHJ1Y3QgY2ZtdXhsICptdXhsID0gY29udGFpbmVyX29iaihsYXlyKTsKLQlzcGluX2xvY2soJm11eGwtPnJlY2VpdmVfbG9jayk7Ci0JdXAgPSBnZXRfdXAobXV4bCwgY2hhbm5lbF9pZCk7Ci0JaWYgKHVwICE9IE5VTEwpCi0JCXBoeWlkID0gY2ZzcnZsX2dldHBoeWlkKHVwKTsKLQllbHNlCi0JCXBoeWlkID0gMDsKLQlzcGluX3VubG9jaygmbXV4bC0+cmVjZWl2ZV9sb2NrKTsKLQlyZXR1cm4gcGh5aWQ7Ci19Ci0KIGludCBjZm11eGxfc2V0X2RubGF5ZXIoc3RydWN0IGNmbGF5ZXIgKmxheXIsIHN0cnVjdCBjZmxheWVyICpkbiwgdTggcGh5aWQpCiB7CiAJc3RydWN0IGNmbXV4bCAqbXV4bCA9IChzdHJ1Y3QgY2ZtdXhsICopIGxheXI7Ci0Jc3Bpbl9sb2NrKCZtdXhsLT50cmFuc21pdF9sb2NrKTsKLQlsaXN0X2FkZCgmZG4tPm5vZGUsICZtdXhsLT5mcm1sX2xpc3QpOwotCXNwaW5fdW5sb2NrKCZtdXhsLT50cmFuc21pdF9sb2NrKTsKKworCXNwaW5fbG9ja19iaCgmbXV4bC0+dHJhbnNtaXRfbG9jayk7CisJbGlzdF9hZGRfcmN1KCZkbi0+bm9kZSwgJm11eGwtPmZybWxfbGlzdCk7CisJc3Bpbl91bmxvY2tfYmgoJm11eGwtPnRyYW5zbWl0X2xvY2spOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IGNmbGF5ZXIgKmdldF9mcm9tX2lkKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHUxNiBpZCkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlOwotCXN0cnVjdCBjZmxheWVyICpsYXllcjsKLQlsaXN0X2Zvcl9lYWNoKG5vZGUsIGxpc3QpIHsKLQkJbGF5ZXIgPSBsaXN0X2VudHJ5KG5vZGUsIHN0cnVjdCBjZmxheWVyLCBub2RlKTsKLQkJaWYgKGxheWVyLT5pZCA9PSBpZCkKLQkJCXJldHVybiBsYXllcjsKKwlzdHJ1Y3QgY2ZsYXllciAqbHlyOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGx5ciwgbGlzdCwgbm9kZSkgeworCQlpZiAobHlyLT5pZCA9PSBpZCkKKwkJCXJldHVybiBseXI7CiAJfQorCiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTEzMSw0MSArOTcsNDUgQEAKIHsKIAlzdHJ1Y3QgY2ZtdXhsICptdXhsID0gY29udGFpbmVyX29iaihsYXlyKTsKIAlzdHJ1Y3QgY2ZsYXllciAqZG47Ci0Jc3Bpbl9sb2NrKCZtdXhsLT50cmFuc21pdF9sb2NrKTsKLQltZW1zZXQobXV4bC0+ZG5fY2FjaGUsIDAsIHNpemVvZihtdXhsLT5kbl9jYWNoZSkpOworCWludCBpZHggPSBwaHlpZCAlIEROX0NBQ0hFX1NJWkU7CisKKwlzcGluX2xvY2tfYmgoJm11eGwtPnRyYW5zbWl0X2xvY2spOworCXJjdV9hc3NpZ25fcG9pbnRlcihtdXhsLT5kbl9jYWNoZVtpZHhdLCBOVUxMKTsKIAlkbiA9IGdldF9mcm9tX2lkKCZtdXhsLT5mcm1sX2xpc3QsIHBoeWlkKTsKLQlpZiAoZG4gPT0gTlVMTCkgewotCQlzcGluX3VubG9jaygmbXV4bC0+dHJhbnNtaXRfbG9jayk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlsaXN0X2RlbCgmZG4tPm5vZGUpOworCWlmIChkbiA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCWxpc3RfZGVsX3JjdSgmZG4tPm5vZGUpOwogCWNhaWZfYXNzZXJ0KGRuICE9IE5VTEwpOwotCXNwaW5fdW5sb2NrKCZtdXhsLT50cmFuc21pdF9sb2NrKTsKK291dDoKKwlzcGluX3VubG9ja19iaCgmbXV4bC0+dHJhbnNtaXRfbG9jayk7CiAJcmV0dXJuIGRuOwogfQogCi0vKiBJbnZhcmlhbnQ6IGxvY2sgaXMgdGFrZW4gKi8KIHN0YXRpYyBzdHJ1Y3QgY2ZsYXllciAqZ2V0X3VwKHN0cnVjdCBjZm11eGwgKm11eGwsIHUxNiBpZCkKIHsKIAlzdHJ1Y3QgY2ZsYXllciAqdXA7CiAJaW50IGlkeCA9IGlkICUgVVBfQ0FDSEVfU0laRTsKLQl1cCA9IG11eGwtPnVwX2NhY2hlW2lkeF07CisJdXAgPSByY3VfZGVyZWZlcmVuY2UobXV4bC0+dXBfY2FjaGVbaWR4XSk7CiAJaWYgKHVwID09IE5VTEwgfHwgdXAtPmlkICE9IGlkKSB7CisJCXNwaW5fbG9ja19iaCgmbXV4bC0+cmVjZWl2ZV9sb2NrKTsKIAkJdXAgPSBnZXRfZnJvbV9pZCgmbXV4bC0+c3J2bF9saXN0LCBpZCk7Ci0JCW11eGwtPnVwX2NhY2hlW2lkeF0gPSB1cDsKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKG11eGwtPnVwX2NhY2hlW2lkeF0sIHVwKTsKKwkJc3Bpbl91bmxvY2tfYmgoJm11eGwtPnJlY2VpdmVfbG9jayk7CiAJfQogCXJldHVybiB1cDsKIH0KIAotLyogSW52YXJpYW50OiBsb2NrIGlzIHRha2VuICovCiBzdGF0aWMgc3RydWN0IGNmbGF5ZXIgKmdldF9kbihzdHJ1Y3QgY2ZtdXhsICptdXhsLCBzdHJ1Y3QgZGV2X2luZm8gKmRldl9pbmZvKQogewogCXN0cnVjdCBjZmxheWVyICpkbjsKIAlpbnQgaWR4ID0gZGV2X2luZm8tPmlkICUgRE5fQ0FDSEVfU0laRTsKLQlkbiA9IG11eGwtPmRuX2NhY2hlW2lkeF07CisJZG4gPSByY3VfZGVyZWZlcmVuY2UobXV4bC0+ZG5fY2FjaGVbaWR4XSk7CiAJaWYgKGRuID09IE5VTEwgfHwgZG4tPmlkICE9IGRldl9pbmZvLT5pZCkgeworCQlzcGluX2xvY2tfYmgoJm11eGwtPnRyYW5zbWl0X2xvY2spOwogCQlkbiA9IGdldF9mcm9tX2lkKCZtdXhsLT5mcm1sX2xpc3QsIGRldl9pbmZvLT5pZCk7Ci0JCW11eGwtPmRuX2NhY2hlW2lkeF0gPSBkbjsKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKG11eGwtPmRuX2NhY2hlW2lkeF0sIGRuKTsKKwkJc3Bpbl91bmxvY2tfYmgoJm11eGwtPnRyYW5zbWl0X2xvY2spOwogCX0KIAlyZXR1cm4gZG47CiB9CkBAIC0xNzQsMTUgKzE0NCwxNyBAQAogewogCXN0cnVjdCBjZmxheWVyICp1cDsKIAlzdHJ1Y3QgY2ZtdXhsICptdXhsID0gY29udGFpbmVyX29iaihsYXlyKTsKLQlzcGluX2xvY2soJm11eGwtPnJlY2VpdmVfbG9jayk7Ci0JdXAgPSBnZXRfdXAobXV4bCwgaWQpOworCWludCBpZHggPSBpZCAlIFVQX0NBQ0hFX1NJWkU7CisKKwlzcGluX2xvY2tfYmgoJm11eGwtPnJlY2VpdmVfbG9jayk7CisJdXAgPSBnZXRfZnJvbV9pZCgmbXV4bC0+c3J2bF9saXN0LCBpZCk7CiAJaWYgKHVwID09IE5VTEwpCiAJCWdvdG8gb3V0OwotCW1lbXNldChtdXhsLT51cF9jYWNoZSwgMCwgc2l6ZW9mKG11eGwtPnVwX2NhY2hlKSk7Ci0JbGlzdF9kZWwoJnVwLT5ub2RlKTsKLQljZnNydmxfcHV0KHVwKTsKKworCXJjdV9hc3NpZ25fcG9pbnRlcihtdXhsLT51cF9jYWNoZVtpZHhdLCBOVUxMKTsKKwlsaXN0X2RlbF9yY3UoJnVwLT5ub2RlKTsKIG91dDoKLQlzcGluX3VubG9jaygmbXV4bC0+cmVjZWl2ZV9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmbXV4bC0+cmVjZWl2ZV9sb2NrKTsKIAlyZXR1cm4gdXA7CiB9CiAKQEAgLTE5Nyw1OCArMTY5LDc4IEBACiAJCWNmcGt0X2Rlc3Ryb3kocGt0KTsKIAkJcmV0dXJuIC1FUFJPVE87CiAJfQotCi0Jc3Bpbl9sb2NrKCZtdXhsLT5yZWNlaXZlX2xvY2spOworCXJjdV9yZWFkX2xvY2soKTsKIAl1cCA9IGdldF91cChtdXhsLCBpZCk7Ci0Jc3Bpbl91bmxvY2soJm11eGwtPnJlY2VpdmVfbG9jayk7CisKIAlpZiAodXAgPT0gTlVMTCkgewotCQlwcl9pbmZvKCJSZWNlaXZlZCBkYXRhIG9uIHVua25vd24gbGluayBJRCA9ICVkICgweCV4KSB1cCA9PSBOVUxMIiwKLQkJCWlkLCBpZCk7CisJCXByX2RlYnVnKCJSZWNlaXZlZCBkYXRhIG9uIHVua25vd24gbGluayBJRCA9ICVkICgweCV4KSIKKwkJCSIgdXAgPT0gTlVMTCIsIGlkLCBpZCk7CiAJCWNmcGt0X2Rlc3Ryb3kocGt0KTsKIAkJLyoKIAkJICogRG9uJ3QgcmV0dXJuIEVSUk9SLCBzaW5jZSBtb2RlbSBtaXNiZWhhdmVzIGFuZCBzZW5kcyBvdXQKIAkJICogZmxvdyBvbiBiZWZvcmUgbGlua3NldHVwIHJlc3BvbnNlLgogCQkgKi8KKworCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuIC8qIENGR0xVX0VQUk9UOyAqLyAwOwogCX0KKworCS8qIFdlIGNhbid0IGhvbGQgcmN1X2xvY2sgZHVyaW5nIHJlY2VpdmUsIHNvIHRha2UgYSByZWYgY291bnQgaW5zdGVhZCAqLwogCWNmc3J2bF9nZXQodXApOworCXJjdV9yZWFkX3VubG9jaygpOworCiAJcmV0ID0gdXAtPnJlY2VpdmUodXAsIHBrdCk7CisKIAljZnNydmxfcHV0KHVwKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGNmbXV4bF90cmFuc21pdChzdHJ1Y3QgY2ZsYXllciAqbGF5ciwgc3RydWN0IGNmcGt0ICpwa3QpCiB7Ci0JaW50IHJldDsKIAlzdHJ1Y3QgY2ZtdXhsICptdXhsID0gY29udGFpbmVyX29iaihsYXlyKTsKKwlpbnQgZXJyOwogCXU4IGxpbmtpZDsKIAlzdHJ1Y3QgY2ZsYXllciAqZG47CiAJc3RydWN0IGNhaWZfcGF5bG9hZF9pbmZvICppbmZvID0gY2Zwa3RfaW5mbyhwa3QpOwotCWRuID0gZ2V0X2RuKG11eGwsIGNmcGt0X2luZm8ocGt0KS0+ZGV2X2luZm8pOworCUJVR19PTighaW5mbyk7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlkbiA9IGdldF9kbihtdXhsLCBpbmZvLT5kZXZfaW5mbyk7CiAJaWYgKGRuID09IE5VTEwpIHsKLQkJcHJfd2FybigiU2VuZCBkYXRhIG9uIHVua25vd24gcGh5IElEID0gJWQgKDB4JXgpXG4iLAorCQlwcl9kZWJ1ZygiU2VuZCBkYXRhIG9uIHVua25vd24gcGh5IElEID0gJWQgKDB4JXgpXG4iLAogCQkJaW5mby0+ZGV2X2luZm8tPmlkLCBpbmZvLT5kZXZfaW5mby0+aWQpOworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJY2Zwa3RfZGVzdHJveShwa3QpOwogCQlyZXR1cm4gLUVOT1RDT05OOwogCX0KKwogCWluZm8tPmhkcl9sZW4gKz0gMTsKIAlsaW5raWQgPSBpbmZvLT5jaGFubmVsX2lkOwogCWNmcGt0X2FkZF9oZWFkKHBrdCwgJmxpbmtpZCwgMSk7Ci0JcmV0ID0gZG4tPnRyYW5zbWl0KGRuLCBwa3QpOwotCS8qIFJlbW92ZSBNVVggcHJvdG9jb2wgaGVhZGVyIHVwb24gZXJyb3IuICovCi0JaWYgKHJldCA8IDApCi0JCWNmcGt0X2V4dHJfaGVhZChwa3QsICZsaW5raWQsIDEpOwotCXJldHVybiByZXQ7CisKKwkvKiBXZSBjYW4ndCBob2xkIHJjdV9sb2NrIGR1cmluZyByZWNlaXZlLCBzbyB0YWtlIGEgcmVmIGNvdW50IGluc3RlYWQgKi8KKwljZmZybWxfaG9sZChkbik7CisKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWVyciA9IGRuLT50cmFuc21pdChkbiwgcGt0KTsKKworCWNmZnJtbF9wdXQoZG4pOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIGNmbXV4bF9jdHJsY21kKHN0cnVjdCBjZmxheWVyICpsYXlyLCBlbnVtIGNhaWZfY3RybGNtZCBjdHJsLAogCQkJCWludCBwaHlpZCkKIHsKIAlzdHJ1Y3QgY2ZtdXhsICptdXhsID0gY29udGFpbmVyX29iaihsYXlyKTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlLCAqbmV4dDsKIAlzdHJ1Y3QgY2ZsYXllciAqbGF5ZXI7Ci0JbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsICZtdXhsLT5zcnZsX2xpc3QpIHsKLQkJbGF5ZXIgPSBsaXN0X2VudHJ5KG5vZGUsIHN0cnVjdCBjZmxheWVyLCBub2RlKTsKLQkJaWYgKGNmc3J2bF9waHlpZF9tYXRjaChsYXllciwgcGh5aWQpKQorCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGxheWVyLCAmbXV4bC0+c3J2bF9saXN0LCBub2RlKSB7CisJCWlmIChjZnNydmxfcGh5aWRfbWF0Y2gobGF5ZXIsIHBoeWlkKSAmJiBsYXllci0+Y3RybGNtZCkKKwkJCS8qIE5PVEU6IGN0cmxjbWQgaXMgbm90IGFsbG93ZWQgdG8gYmxvY2sgKi8KIAkJCWxheWVyLT5jdHJsY21kKGxheWVyLCBjdHJsLCBwaHlpZCk7CiAJfQorCXJjdV9yZWFkX3VubG9jaygpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2NhaWYvY2Zwa3Rfc2tidWZmLmMgYi9uZXQvY2FpZi9jZnBrdF9za2J1ZmYuYwppbmRleCBkN2U4NjVlLi43NWQ0YmZhIDEwMDY0NAotLS0gYS9uZXQvY2FpZi9jZnBrdF9za2J1ZmYuYworKysgYi9uZXQvY2FpZi9jZnBrdF9za2J1ZmYuYwpAQCAtNDIsMjIgKzQyLDIyIEBACiAJYm9vbCBlcnJvbm91czsKIH07CiAKLWlubGluZSBzdHJ1Y3QgY2Zwa3RfcHJpdl9kYXRhICpjZnBrdF9wcml2KHN0cnVjdCBjZnBrdCAqcGt0KQorc3RhdGljIGlubGluZSBzdHJ1Y3QgY2Zwa3RfcHJpdl9kYXRhICpjZnBrdF9wcml2KHN0cnVjdCBjZnBrdCAqcGt0KQogewogCXJldHVybiAoc3RydWN0IGNmcGt0X3ByaXZfZGF0YSAqKSBwa3QtPnNrYi5jYjsKIH0KIAotaW5saW5lIGJvb2wgaXNfZXJyb25vdXMoc3RydWN0IGNmcGt0ICpwa3QpCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfZXJyb25vdXMoc3RydWN0IGNmcGt0ICpwa3QpCiB7CiAJcmV0dXJuIGNmcGt0X3ByaXYocGt0KS0+ZXJyb25vdXM7CiB9CiAKLWlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqcGt0X3RvX3NrYihzdHJ1Y3QgY2Zwa3QgKnBrdCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnBrdF90b19za2Ioc3RydWN0IGNmcGt0ICpwa3QpCiB7CiAJcmV0dXJuICZwa3QtPnNrYjsKIH0KIAotaW5saW5lIHN0cnVjdCBjZnBrdCAqc2tiX3RvX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgY2Zwa3QgKnNrYl90b19wa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlyZXR1cm4gKHN0cnVjdCBjZnBrdCAqKSBza2I7CiB9CkBAIC05NywyMSArOTcsMjAgQEAKIHsKIAlyZXR1cm4gY2Zwa3RfY3JlYXRlX3BmeChsZW4gKyBQS1RfUE9TVEZJWCwgUEtUX1BSRUZJWCk7CiB9Ci1FWFBPUlRfU1lNQk9MKGNmcGt0X2NyZWF0ZSk7CiAKIHZvaWQgY2Zwa3RfZGVzdHJveShzdHJ1Y3QgY2Zwa3QgKnBrdCkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcGt0X3RvX3NrYihwa3QpOwogCWtmcmVlX3NrYihza2IpOwogfQotRVhQT1JUX1NZTUJPTChjZnBrdF9kZXN0cm95KTsKKwogCiBpbmxpbmUgYm9vbCBjZnBrdF9tb3JlKHN0cnVjdCBjZnBrdCAqcGt0KQogewogCXN0cnVjdCBza19idWZmICpza2IgPSBwa3RfdG9fc2tiKHBrdCk7CiAJcmV0dXJuIHNrYi0+bGVuID4gMDsKIH0KLUVYUE9SVF9TWU1CT0woY2Zwa3RfbW9yZSk7CisKIAogaW50IGNmcGt0X3BlZWtfaGVhZChzdHJ1Y3QgY2Zwa3QgKnBrdCwgdm9pZCAqZGF0YSwgdTE2IGxlbikKIHsKQEAgLTEyMyw3ICsxMjIsNiBAQAogCXJldHVybiAhY2Zwa3RfZXh0cl9oZWFkKHBrdCwgZGF0YSwgbGVuKSAmJgogCSAgICAhY2Zwa3RfYWRkX2hlYWQocGt0LCBkYXRhLCBsZW4pOwogfQotRVhQT1JUX1NZTUJPTChjZnBrdF9wZWVrX2hlYWQpOwogCiBpbnQgY2Zwa3RfZXh0cl9oZWFkKHN0cnVjdCBjZnBrdCAqcGt0LCB2b2lkICpkYXRhLCB1MTYgbGVuKQogewpAQCAtMTQ4LDcgKzE0Niw2IEBACiAJbWVtY3B5KGRhdGEsIGZyb20sIGxlbik7CiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKGNmcGt0X2V4dHJfaGVhZCk7CiAKIGludCBjZnBrdF9leHRyX3RyYWlsKHN0cnVjdCBjZnBrdCAqcGt0LCB2b2lkICpkdGEsIHUxNiBsZW4pCiB7CkBAIC0xNzEsMTMgKzE2OCwxMyBAQAogCW1lbWNweShkYXRhLCBmcm9tLCBsZW4pOwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChjZnBrdF9leHRyX3RyYWlsKTsKKwogCiBpbnQgY2Zwa3RfcGFkX3RyYWlsKHN0cnVjdCBjZnBrdCAqcGt0LCB1MTYgbGVuKQogewogCXJldHVybiBjZnBrdF9hZGRfYm9keShwa3QsIE5VTEwsIGxlbik7CiB9Ci1FWFBPUlRfU1lNQk9MKGNmcGt0X3BhZF90cmFpbCk7CisKIAogaW50IGNmcGt0X2FkZF9ib2R5KHN0cnVjdCBjZnBrdCAqcGt0LCBjb25zdCB2b2lkICpkYXRhLCB1MTYgbGVuKQogewpAQCAtMjI2LDEzICsyMjMsMTEgQEAKIAkJbWVtY3B5KHRvLCBkYXRhLCBsZW4pOwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChjZnBrdF9hZGRfYm9keSk7CiAKIGlubGluZSBpbnQgY2Zwa3RfYWRkYmR5KHN0cnVjdCBjZnBrdCAqcGt0LCB1OCBkYXRhKQogewogCXJldHVybiBjZnBrdF9hZGRfYm9keShwa3QsICZkYXRhLCAxKTsKIH0KLUVYUE9SVF9TWU1CT0woY2Zwa3RfYWRkYmR5KTsKIAogaW50IGNmcGt0X2FkZF9oZWFkKHN0cnVjdCBjZnBrdCAqcGt0LCBjb25zdCB2b2lkICpkYXRhMiwgdTE2IGxlbikKIHsKQEAgLTI1OSwyMCArMjU0LDIwIEBACiAJbWVtY3B5KHRvLCBkYXRhLCBsZW4pOwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChjZnBrdF9hZGRfaGVhZCk7CisKIAogaW5saW5lIGludCBjZnBrdF9hZGRfdHJhaWwoc3RydWN0IGNmcGt0ICpwa3QsIGNvbnN0IHZvaWQgKmRhdGEsIHUxNiBsZW4pCiB7CiAJcmV0dXJuIGNmcGt0X2FkZF9ib2R5KHBrdCwgZGF0YSwgbGVuKTsKIH0KLUVYUE9SVF9TWU1CT0woY2Zwa3RfYWRkX3RyYWlsKTsKKwogCiBpbmxpbmUgdTE2IGNmcGt0X2dldGxlbihzdHJ1Y3QgY2Zwa3QgKnBrdCkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcGt0X3RvX3NrYihwa3QpOwogCXJldHVybiBza2ItPmxlbjsKIH0KLUVYUE9SVF9TWU1CT0woY2Zwa3RfZ2V0bGVuKTsKKwogCiBpbmxpbmUgdTE2IGNmcGt0X2l0ZXJhdGUoc3RydWN0IGNmcGt0ICpwa3QsCiAJCQkgICAgdTE2ICgqaXRlcl9mdW5jKSh1MTYsIHZvaWQgKiwgdTE2KSwKQEAgLTI5MCw3ICsyODUsNyBAQAogCX0KIAlyZXR1cm4gaXRlcl9mdW5jKGRhdGEsIHBrdC0+c2tiLmRhdGEsIGNmcGt0X2dldGxlbihwa3QpKTsKIH0KLUVYUE9SVF9TWU1CT0woY2Zwa3RfaXRlcmF0ZSk7CisKIAogaW50IGNmcGt0X3NldGxlbihzdHJ1Y3QgY2Zwa3QgKnBrdCwgdTE2IGxlbikKIHsKQEAgLTMxNSwxOCArMzEwLDYgQEAKIAogCXJldHVybiBjZnBrdF9nZXRsZW4ocGt0KTsKIH0KLUVYUE9SVF9TWU1CT0woY2Zwa3Rfc2V0bGVuKTsKLQotc3RydWN0IGNmcGt0ICpjZnBrdF9jcmVhdGVfdXBsaW5rKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCi17Ci0Jc3RydWN0IGNmcGt0ICpwa3QgPSBjZnBrdF9jcmVhdGVfcGZ4KGxlbiArIFBLVF9QT1NURklYLCBQS1RfUFJFRklYKTsKLQlpZiAoIXBrdCkKLQkJcmV0dXJuIE5VTEw7Ci0JaWYgKHVubGlrZWx5KGRhdGEgIT0gTlVMTCkpCi0JCWNmcGt0X2FkZF9ib2R5KHBrdCwgZGF0YSwgbGVuKTsKLQlyZXR1cm4gcGt0OwotfQotRVhQT1JUX1NZTUJPTChjZnBrdF9jcmVhdGVfdXBsaW5rKTsKIAogc3RydWN0IGNmcGt0ICpjZnBrdF9hcHBlbmQoc3RydWN0IGNmcGt0ICpkc3Rwa3QsCiAJCQkgICAgIHN0cnVjdCBjZnBrdCAqYWRkcGt0LApAQCAtMzY4LDcgKzM1MSw2IEBACiAJZHN0LT5sZW4gKz0gYWRkbGVuOwogCXJldHVybiBza2JfdG9fcGt0KGRzdCk7CiB9Ci1FWFBPUlRfU1lNQk9MKGNmcGt0X2FwcGVuZCk7CiAKIHN0cnVjdCBjZnBrdCAqY2Zwa3Rfc3BsaXQoc3RydWN0IGNmcGt0ICpwa3QsIHUxNiBwb3MpCiB7CkBAIC00MDYsMTc0ICszODgsMTMgQEAKIAlza2IyLT5sZW4gKz0gbGVuMm5kOwogCXJldHVybiBza2JfdG9fcGt0KHNrYjIpOwogfQotRVhQT1JUX1NZTUJPTChjZnBrdF9zcGxpdCk7CiAKLWNoYXIgKmNmcGt0X2xvZ19wa3Qoc3RydWN0IGNmcGt0ICpwa3QsIGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbikKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcGt0X3RvX3NrYihwa3QpOwotCWNoYXIgKnAgPSBidWY7Ci0JaW50IGk7Ci0KLQkvKgotCSAqIFNhbml0eSBjaGVjayBidWZmZXIgbGVuZ3RoLCBpdCBuZWVkcyB0byBiZSBhdCBsZWFzdCBhcyBsYXJnZSBhcwotCSAqIHRoZSBoZWFkZXIgaW5mbzogfj01MCsgYnl0ZXMKLQkgKi8KLQlpZiAoYnVmbGVuIDwgNTApCi0JCXJldHVybiBOVUxMOwotCi0Jc25wcmludGYoYnVmLCBidWZsZW4sICIlczogcGt0OiVwIGxlbjolbGQoJWxkKyVsZCkgeyVsZCwlbGR9IGRhdGE6IFsiLAotCQlpc19lcnJvbm91cyhwa3QpID8gIkVSUk9OT1VTLVNLQiIgOgotCQkgKHNrYi0+ZGF0YV9sZW4gIT0gMCA/ICJDT01QTEVYLVNLQiIgOiAiU0tCIiksCi0JCSBza2IsCi0JCSAobG9uZykgc2tiLT5sZW4sCi0JCSAobG9uZykgKHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtIHNrYi0+ZGF0YSksCi0JCSAobG9uZykgc2tiLT5kYXRhX2xlbiwKLQkJIChsb25nKSAoc2tiLT5kYXRhIC0gc2tiLT5oZWFkKSwKLQkJIChsb25nKSAoc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gc2tiLT5oZWFkKSk7Ci0JcCA9IGJ1ZiArIHN0cmxlbihidWYpOwotCi0JZm9yIChpID0gMDsgaSA8IHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtIHNrYi0+ZGF0YSAmJiBpIDwgMzAwOyBpKyspIHsKLQkJaWYgKHAgPiBidWYgKyBidWZsZW4gLSAxMCkgewotCQkJc3ByaW50ZihwLCAiLi4uIik7Ci0JCQlwID0gYnVmICsgc3RybGVuKGJ1Zik7Ci0JCQlicmVhazsKLQkJfQotCQlzcHJpbnRmKHAsICIlMDJ4LCIsIHNrYi0+ZGF0YVtpXSk7Ci0JCXAgPSBidWYgKyBzdHJsZW4oYnVmKTsKLQl9Ci0Jc3ByaW50ZihwLCAiXVxuIik7Ci0JcmV0dXJuIGJ1ZjsKLX0KLUVYUE9SVF9TWU1CT0woY2Zwa3RfbG9nX3BrdCk7Ci0KLWludCBjZnBrdF9yYXdfYXBwZW5kKHN0cnVjdCBjZnBrdCAqcGt0LCB2b2lkICoqYnVmLCB1bnNpZ25lZCBpbnQgYnVmbGVuKQotewotCXN0cnVjdCBza19idWZmICpza2IgPSBwa3RfdG9fc2tiKHBrdCk7Ci0Jc3RydWN0IHNrX2J1ZmYgKmxhc3Rza2I7Ci0KLQljYWlmX2Fzc2VydChidWYgIT0gTlVMTCk7Ci0JaWYgKHVubGlrZWx5KGlzX2Vycm9ub3VzKHBrdCkpKQotCQlyZXR1cm4gLUVQUk9UTzsKLQkvKiBNYWtlIHN1cmUgU0tCIGlzIHdyaXRhYmxlICovCi0JaWYgKHVubGlrZWx5KHNrYl9jb3dfZGF0YShza2IsIDAsICZsYXN0c2tiKSA8IDApKSB7Ci0JCVBLVF9FUlJPUihwa3QsICJza2JfY293X2RhdGEgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIC1FUFJPVE87Ci0JfQotCi0JaWYgKHVubGlrZWx5KHNrYl9saW5lYXJpemUoc2tiKSAhPSAwKSkgewotCQlQS1RfRVJST1IocGt0LCAibGluZWFyaXplIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtRVBST1RPOwotCX0KLQotCWlmICh1bmxpa2VseShza2JfdGFpbHJvb20oc2tiKSA8IGJ1ZmxlbikpIHsKLQkJUEtUX0VSUk9SKHBrdCwgImJ1ZmZlciB0b28gc2hvcnQgLSBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLUVQUk9UTzsKLQl9Ci0KLQkqYnVmID0gc2tiX3B1dChza2IsIGJ1Zmxlbik7Ci0JcmV0dXJuIDE7Ci19Ci1FWFBPUlRfU1lNQk9MKGNmcGt0X3Jhd19hcHBlbmQpOwotCi1pbnQgY2Zwa3RfcmF3X2V4dHJhY3Qoc3RydWN0IGNmcGt0ICpwa3QsIHZvaWQgKipidWYsIHVuc2lnbmVkIGludCBidWZsZW4pCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBrdF90b19za2IocGt0KTsKLQotCWNhaWZfYXNzZXJ0KGJ1ZiAhPSBOVUxMKTsKLQlpZiAodW5saWtlbHkoaXNfZXJyb25vdXMocGt0KSkpCi0JCXJldHVybiAtRVBST1RPOwotCi0JaWYgKHVubGlrZWx5KGJ1ZmxlbiA+IHNrYi0+bGVuKSkgewotCQlQS1RfRVJST1IocGt0LCAiYnVmbGVuIHRvbyBsYXJnZSAtIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtRVBST1RPOwotCX0KLQotCWlmICh1bmxpa2VseShidWZsZW4gPiBza2JfaGVhZGxlbihza2IpKSkgewotCQlpZiAodW5saWtlbHkoc2tiX2xpbmVhcml6ZShza2IpICE9IDApKSB7Ci0JCQlQS1RfRVJST1IocGt0LCAibGluZWFyaXplIGZhaWxlZFxuIik7Ci0JCQlyZXR1cm4gLUVQUk9UTzsKLQkJfQotCX0KLQotCSpidWYgPSBza2ItPmRhdGE7Ci0Jc2tiX3B1bGwoc2tiLCBidWZsZW4pOwotCi0JcmV0dXJuIDE7Ci19Ci1FWFBPUlRfU1lNQk9MKGNmcGt0X3Jhd19leHRyYWN0KTsKLQotaW5saW5lIGJvb2wgY2Zwa3RfZXJyb25lb3VzKHN0cnVjdCBjZnBrdCAqcGt0KQorYm9vbCBjZnBrdF9lcnJvbmVvdXMoc3RydWN0IGNmcGt0ICpwa3QpCiB7CiAJcmV0dXJuIGNmcGt0X3ByaXYocGt0KS0+ZXJyb25vdXM7CiB9Ci1FWFBPUlRfU1lNQk9MKGNmcGt0X2Vycm9uZW91cyk7Ci0KLXN0cnVjdCBjZnBrdHEgKmNmcGt0cV9jcmVhdGUodm9pZCkKLXsKLQlzdHJ1Y3QgY2Zwa3RxICpxID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNmcGt0cSksIEdGUF9BVE9NSUMpOwotCWlmICghcSkKLQkJcmV0dXJuIE5VTEw7Ci0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcS0+aGVhZCk7Ci0JYXRvbWljX3NldCgmcS0+Y291bnQsIDApOwotCXNwaW5fbG9ja19pbml0KCZxLT5sb2NrKTsKLQlyZXR1cm4gcTsKLX0KLUVYUE9SVF9TWU1CT0woY2Zwa3RxX2NyZWF0ZSk7Ci0KLXZvaWQgY2Zwa3RfcXVldWUoc3RydWN0IGNmcGt0cSAqcGt0cSwgc3RydWN0IGNmcGt0ICpwa3QsIHVuc2lnbmVkIHNob3J0IHByaW8pCi17Ci0JYXRvbWljX2luYygmcGt0cS0+Y291bnQpOwotCXNwaW5fbG9jaygmcGt0cS0+bG9jayk7Ci0Jc2tiX3F1ZXVlX3RhaWwoJnBrdHEtPmhlYWQsIHBrdF90b19za2IocGt0KSk7Ci0Jc3Bpbl91bmxvY2soJnBrdHEtPmxvY2spOwotCi19Ci1FWFBPUlRfU1lNQk9MKGNmcGt0X3F1ZXVlKTsKLQotc3RydWN0IGNmcGt0ICpjZnBrdF9xcGVlayhzdHJ1Y3QgY2Zwa3RxICpwa3RxKQotewotCXN0cnVjdCBjZnBrdCAqdG1wOwotCXNwaW5fbG9jaygmcGt0cS0+bG9jayk7Ci0JdG1wID0gc2tiX3RvX3BrdChza2JfcGVlaygmcGt0cS0+aGVhZCkpOwotCXNwaW5fdW5sb2NrKCZwa3RxLT5sb2NrKTsKLQlyZXR1cm4gdG1wOwotfQotRVhQT1JUX1NZTUJPTChjZnBrdF9xcGVlayk7Ci0KLXN0cnVjdCBjZnBrdCAqY2Zwa3RfZGVxdWV1ZShzdHJ1Y3QgY2Zwa3RxICpwa3RxKQotewotCXN0cnVjdCBjZnBrdCAqcGt0OwotCXNwaW5fbG9jaygmcGt0cS0+bG9jayk7Ci0JcGt0ID0gc2tiX3RvX3BrdChza2JfZGVxdWV1ZSgmcGt0cS0+aGVhZCkpOwotCWlmIChwa3QpIHsKLQkJYXRvbWljX2RlYygmcGt0cS0+Y291bnQpOwotCQljYWlmX2Fzc2VydChhdG9taWNfcmVhZCgmcGt0cS0+Y291bnQpID49IDApOwotCX0KLQlzcGluX3VubG9jaygmcGt0cS0+bG9jayk7Ci0JcmV0dXJuIHBrdDsKLX0KLUVYUE9SVF9TWU1CT0woY2Zwa3RfZGVxdWV1ZSk7Ci0KLWludCBjZnBrdF9xY291bnQoc3RydWN0IGNmcGt0cSAqcGt0cSkKLXsKLQlyZXR1cm4gYXRvbWljX3JlYWQoJnBrdHEtPmNvdW50KTsKLX0KLUVYUE9SVF9TWU1CT0woY2Zwa3RfcWNvdW50KTsKLQotc3RydWN0IGNmcGt0ICpjZnBrdF9jbG9uZV9yZWxlYXNlKHN0cnVjdCBjZnBrdCAqcGt0KQotewotCXN0cnVjdCBjZnBrdCAqY2xvbmU7Ci0JY2xvbmUgID0gc2tiX3RvX3BrdChza2JfY2xvbmUocGt0X3RvX3NrYihwa3QpLCBHRlBfQVRPTUlDKSk7Ci0JLyogRnJlZSBvcmlnaW5hbCBwYWNrZXQuICovCi0JY2Zwa3RfZGVzdHJveShwa3QpOwotCWlmICghY2xvbmUpCi0JCXJldHVybiBOVUxMOwotCXJldHVybiBjbG9uZTsKLX0KLUVYUE9SVF9TWU1CT0woY2Zwa3RfY2xvbmVfcmVsZWFzZSk7CiAKIHN0cnVjdCBjYWlmX3BheWxvYWRfaW5mbyAqY2Zwa3RfaW5mbyhzdHJ1Y3QgY2Zwa3QgKnBrdCkKIHsKIAlyZXR1cm4gKHN0cnVjdCBjYWlmX3BheWxvYWRfaW5mbyAqKSZwa3RfdG9fc2tiKHBrdCktPmNiOwogfQotRVhQT1JUX1NZTUJPTChjZnBrdF9pbmZvKTsKZGlmZiAtLWdpdCBhL25ldC9jYWlmL2NmcmZtbC5jIGIvbmV0L2NhaWYvY2ZyZm1sLmMKaW5kZXggZTJmYjVmYS4uMGRlYWJiNCAxMDA2NDQKLS0tIGEvbmV0L2NhaWYvY2ZyZm1sLmMKKysrIGIvbmV0L2NhaWYvY2ZyZm1sLmMKQEAgLTMxLDkgKzMxLDkgQEAKIAlzcGlubG9ja190IHN5bmM7CiB9OwogCi1zdGF0aWMgdm9pZCBjZnJmbWxfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3N0YXRpYyB2b2lkIGNmcmZtbF9yZWxlYXNlKHN0cnVjdCBjZmxheWVyICpsYXllcikKIHsKLQlzdHJ1Y3QgY2ZzcnZsICpzcnZsID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBjZnNydmwsIHJlZik7CisJc3RydWN0IGNmc3J2bCAqc3J2bCA9IGNvbnRhaW5lcl9vZihsYXllciwgc3RydWN0IGNmc3J2bCwgbGF5ZXIpOwogCXN0cnVjdCBjZnJmbWwgKnJmbWwgPSBjb250YWluZXJfb2JqKCZzcnZsLT5sYXllcik7CiAKIAlpZiAocmZtbC0+aW5jb21wbGV0ZV9mcm0pCmRpZmYgLS1naXQgYS9uZXQvY2FpZi9jZnNlcmwuYyBiL25ldC9jYWlmL2Nmc2VybC5jCmluZGV4IDgzMDNmZTMuLjI3MTVjODQgMTAwNjQ0Ci0tLSBhL25ldC9jYWlmL2Nmc2VybC5jCisrKyBiL25ldC9jYWlmL2Nmc2VybC5jCkBAIC0xNzksMTUgKzE3OSwxMCBAQAogc3RhdGljIGludCBjZnNlcmxfdHJhbnNtaXQoc3RydWN0IGNmbGF5ZXIgKmxheWVyLCBzdHJ1Y3QgY2Zwa3QgKm5ld3BrdCkKIHsKIAlzdHJ1Y3QgY2ZzZXJsICpsYXlyID0gY29udGFpbmVyX29iaihsYXllcik7Ci0JaW50IHJldDsKIAl1OCB0bXA4ID0gQ0ZTRVJMX1NUWDsKIAlpZiAobGF5ci0+dXNlc3R4KQogCQljZnBrdF9hZGRfaGVhZChuZXdwa3QsICZ0bXA4LCAxKTsKLQlyZXQgPSBsYXllci0+ZG4tPnRyYW5zbWl0KGxheWVyLT5kbiwgbmV3cGt0KTsKLQlpZiAocmV0IDwgMCkKLQkJY2Zwa3RfZXh0cl9oZWFkKG5ld3BrdCwgJnRtcDgsIDEpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gbGF5ZXItPmRuLT50cmFuc21pdChsYXllci0+ZG4sIG5ld3BrdCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNmc2VybF9jdHJsY21kKHN0cnVjdCBjZmxheWVyICpsYXlyLCBlbnVtIGNhaWZfY3RybGNtZCBjdHJsLApkaWZmIC0tZ2l0IGEvbmV0L2NhaWYvY2ZzcnZsLmMgYi9uZXQvY2FpZi9jZnNydmwuYwppbmRleCBhYjVlNTQyLi41MzVhMWU3IDEwMDY0NAotLS0gYS9uZXQvY2FpZi9jZnNydmwuYworKysgYi9uZXQvY2FpZi9jZnNydmwuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bmV0L2NhaWYvY2FpZl9sYXllci5oPgogI2luY2x1ZGUgPG5ldC9jYWlmL2Nmc3J2bC5oPgogI2luY2x1ZGUgPG5ldC9jYWlmL2NmcGt0Lmg+CkBAIC0yNyw4ICsyOCw4IEBACiB7CiAJc3RydWN0IGNmc3J2bCAqc2VydmljZSA9IGNvbnRhaW5lcl9vYmoobGF5cik7CiAKLQljYWlmX2Fzc2VydChsYXlyLT51cCAhPSBOVUxMKTsKLQljYWlmX2Fzc2VydChsYXlyLT51cC0+Y3RybGNtZCAhPSBOVUxMKTsKKwlpZiAobGF5ci0+dXAgPT0gTlVMTCB8fCBsYXlyLT51cC0+Y3RybGNtZCA9PSBOVUxMKQorCQlyZXR1cm47CiAKIAlzd2l0Y2ggKGN0cmwpIHsKIAljYXNlIENBSUZfQ1RSTENNRF9JTklUX1JTUDoKQEAgLTE1MSwxNCArMTUyLDkgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotdm9pZCBjZnNlcnZsX2Rlc3Ryb3koc3RydWN0IGNmbGF5ZXIgKmxheWVyKQorc3RhdGljIHZvaWQgY2ZzcnZsX3JlbGVhc2Uoc3RydWN0IGNmbGF5ZXIgKmxheWVyKQogewotCWtmcmVlKGxheWVyKTsKLX0KLQotdm9pZCBjZnNydmxfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKLXsKLQlzdHJ1Y3QgY2ZzcnZsICpzZXJ2aWNlID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBjZnNydmwsIHJlZik7CisJc3RydWN0IGNmc3J2bCAqc2VydmljZSA9IGNvbnRhaW5lcl9vZihsYXllciwgc3RydWN0IGNmc3J2bCwgbGF5ZXIpOwogCWtmcmVlKHNlcnZpY2UpOwogfQogCkBAIC0xNzgsMTAgKzE3NCw4IEBACiAJc2VydmljZS0+ZGV2X2luZm8gPSAqZGV2X2luZm87CiAJc2VydmljZS0+c3VwcG9ydHNfZmxvd2N0cmwgPSBzdXBwb3J0c19mbG93Y3RybDsKIAlzZXJ2aWNlLT5yZWxlYXNlID0gY2ZzcnZsX3JlbGVhc2U7Ci0Ja3JlZl9pbml0KCZzZXJ2aWNlLT5yZWYpOwogfQogCi0KIGJvb2wgY2ZzcnZsX3JlYWR5KHN0cnVjdCBjZnNydmwgKnNlcnZpY2UsIGludCAqZXJyKQogewogCWlmIChzZXJ2aWNlLT5vcGVuICYmIHNlcnZpY2UtPm1vZGVtX2Zsb3dfb24gJiYgc2VydmljZS0+cGh5X2Zsb3dfb24pCkBAIC0xOTQsNiArMTg4LDcgQEAKIAkqZXJyID0gLUVBR0FJTjsKIAlyZXR1cm4gZmFsc2U7CiB9CisKIHU4IGNmc3J2bF9nZXRwaHlpZChzdHJ1Y3QgY2ZsYXllciAqbGF5ZXIpCiB7CiAJc3RydWN0IGNmc3J2bCAqc2VydmwgPSBjb250YWluZXJfb2JqKGxheWVyKTsKQEAgLTIwNSwzICsyMDAsMjYgQEAKIAlzdHJ1Y3QgY2ZzcnZsICpzZXJ2bCA9IGNvbnRhaW5lcl9vYmoobGF5ZXIpOwogCXJldHVybiBzZXJ2bC0+ZGV2X2luZm8uaWQgPT0gcGh5aWQ7CiB9CisKK3ZvaWQgY2FpZl9mcmVlX2NsaWVudChzdHJ1Y3QgY2ZsYXllciAqYWRhcF9sYXllcikKK3sKKwlzdHJ1Y3QgY2ZzcnZsICpzZXJ2bDsKKwlpZiAoYWRhcF9sYXllciA9PSBOVUxMIHx8IGFkYXBfbGF5ZXItPmRuID09IE5VTEwpCisJCXJldHVybjsKKwlzZXJ2bCA9IGNvbnRhaW5lcl9vYmooYWRhcF9sYXllci0+ZG4pOworCXNlcnZsLT5yZWxlYXNlKCZzZXJ2bC0+bGF5ZXIpOworfQorRVhQT1JUX1NZTUJPTChjYWlmX2ZyZWVfY2xpZW50KTsKKwordm9pZCBjYWlmX2NsaWVudF9yZWdpc3Rlcl9yZWZjbnQoc3RydWN0IGNmbGF5ZXIgKmFkYXB0X2xheWVyLAorCQkJCQl2b2lkICgqaG9sZCkoc3RydWN0IGNmbGF5ZXIgKmx5ciksCisJCQkJCXZvaWQgKCpwdXQpKHN0cnVjdCBjZmxheWVyICpseXIpKQoreworCXN0cnVjdCBjZnNydmwgKnNlcnZpY2U7CisJc2VydmljZSA9IGNvbnRhaW5lcl9vZihhZGFwdF9sYXllci0+ZG4sIHN0cnVjdCBjZnNydmwsIGxheWVyKTsKKworCVdBUk5fT04oYWRhcHRfbGF5ZXIgPT0gTlVMTCB8fCBhZGFwdF9sYXllci0+ZG4gPT0gTlVMTCk7CisJc2VydmljZS0+aG9sZCA9IGhvbGQ7CisJc2VydmljZS0+cHV0ID0gcHV0OworfQorRVhQT1JUX1NZTUJPTChjYWlmX2NsaWVudF9yZWdpc3Rlcl9yZWZjbnQpOwpkaWZmIC0tZ2l0IGEvbmV0L2NhaWYvY2Z1dGlsbC5jIGIvbmV0L2NhaWYvY2Z1dGlsbC5jCmluZGV4IDMxNWMwZDYuLjk4ZTAyN2QgMTAwNjQ0Ci0tLSBhL25ldC9jYWlmL2NmdXRpbGwuYworKysgYi9uZXQvY2FpZi9jZnV0aWxsLmMKQEAgLTEwMCwxMCArMTAwLDUgQEAKIAkgKi8KIAlpbmZvLT5oZHJfbGVuID0gMTsKIAlpbmZvLT5kZXZfaW5mbyA9ICZzZXJ2aWNlLT5kZXZfaW5mbzsKLQlyZXQgPSBsYXlyLT5kbi0+dHJhbnNtaXQobGF5ci0+ZG4sIHBrdCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJdTMyIHRtcDMyOwotCQljZnBrdF9leHRyX2hlYWQocGt0LCAmdG1wMzIsIDQpOwotCX0KLQlyZXR1cm4gcmV0OworCXJldHVybiBsYXlyLT5kbi0+dHJhbnNtaXQobGF5ci0+ZG4sIHBrdCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvY2FpZi9jZnZlaWwuYyBiL25ldC9jYWlmL2NmdmVpbC5jCmluZGV4IGMzYjFkZWMuLjNlYzgzZmIgMTAwNjQ0Ci0tLSBhL25ldC9jYWlmL2NmdmVpbC5jCisrKyBiL25ldC9jYWlmL2NmdmVpbC5jCkBAIC04MiwxMyArODIsMTQgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBjZnNydmwgKnNlcnZpY2UgPSBjb250YWluZXJfb2JqKGxheXIpOwogCWlmICghY2ZzcnZsX3JlYWR5KHNlcnZpY2UsICZyZXQpKQotCQlyZXR1cm4gcmV0OworCQlnb3RvIGVycjsKIAljYWlmX2Fzc2VydChsYXlyLT5kbiAhPSBOVUxMKTsKIAljYWlmX2Fzc2VydChsYXlyLT5kbi0+dHJhbnNtaXQgIT0gTlVMTCk7CiAKIAlpZiAoY2Zwa3RfYWRkX2hlYWQocGt0LCAmdG1wLCAxKSA8IDApIHsKIAkJcHJfZXJyKCJQYWNrZXQgaXMgZXJyb25lb3VzIVxuIik7Ci0JCXJldHVybiAtRVBST1RPOworCQlyZXQgPSAtRVBST1RPOworCQlnb3RvIGVycjsKIAl9CiAKIAkvKiBBZGQgaW5mby0+IGZvciBNVVgtbGF5ZXIgdG8gcm91dGUgdGhlIHBhY2tldCBvdXQuICovCkBAIC05Niw4ICs5Nyw4IEBACiAJaW5mby0+Y2hhbm5lbF9pZCA9IHNlcnZpY2UtPmxheWVyLmlkOwogCWluZm8tPmhkcl9sZW4gPSAxOwogCWluZm8tPmRldl9pbmZvID0gJnNlcnZpY2UtPmRldl9pbmZvOwotCXJldCA9IGxheXItPmRuLT50cmFuc21pdChsYXlyLT5kbiwgcGt0KTsKLQlpZiAocmV0IDwgMCkKLQkJY2Zwa3RfZXh0cl9oZWFkKHBrdCwgJnRtcCwgMSk7CisJcmV0dXJuIGxheXItPmRuLT50cmFuc21pdChsYXlyLT5kbiwgcGt0KTsKK2VycjoKKwljZnBrdF9kZXN0cm95KHBrdCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL25ldC9jYWlmL2NmdmlkbC5jIGIvbmV0L2NhaWYvY2Z2aWRsLmMKaW5kZXggYmY2ZmVmMi4uYjJmNTk4OSAxMDA2NDQKLS0tIGEvbmV0L2NhaWYvY2Z2aWRsLmMKKysrIGIvbmV0L2NhaWYvY2Z2aWRsLmMKQEAgLTYwLDggKzYwLDUgQEAKIAlpbmZvID0gY2Zwa3RfaW5mbyhwa3QpOwogCWluZm8tPmNoYW5uZWxfaWQgPSBzZXJ2aWNlLT5sYXllci5pZDsKIAlpbmZvLT5kZXZfaW5mbyA9ICZzZXJ2aWNlLT5kZXZfaW5mbzsKLQlyZXQgPSBsYXlyLT5kbi0+dHJhbnNtaXQobGF5ci0+ZG4sIHBrdCk7Ci0JaWYgKHJldCA8IDApCi0JCWNmcGt0X2V4dHJfaGVhZChwa3QsICZ2aWRlb2hlYWRlciwgNCk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gbGF5ci0+ZG4tPnRyYW5zbWl0KGxheXItPmRuLCBwa3QpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2NhaWYvY2hubF9uZXQuYyBiL25ldC9jYWlmL2NobmxfbmV0LmMKaW5kZXggNjAwOGQ2ZC4uNjQ5ZWJhYyAxMDA2NDQKLS0tIGEvbmV0L2NhaWYvY2hubF9uZXQuYworKysgYi9uZXQvY2FpZi9jaG5sX25ldC5jCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSA8bGludXgvY2FpZi9pZl9jYWlmLmg+CiAjaW5jbHVkZSA8bmV0L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPG5ldC9jYWlmL2NhaWZfbGF5ZXIuaD4KLSNpbmNsdWRlIDxuZXQvY2FpZi9jZmNuZmcuaD4KICNpbmNsdWRlIDxuZXQvY2FpZi9jZnBrdC5oPgogI2luY2x1ZGUgPG5ldC9jYWlmL2NhaWZfZGV2Lmg+CiAKQEAgLTg0LDEwICs4MywxMSBAQAogCWlmICghcHJpdikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKiBHZXQgbGVuZ3RoIG9mIENBSUYgcGFja2V0LiAqLwotCXBrdGxlbiA9IGNmcGt0X2dldGxlbihwa3QpOwotCiAJc2tiID0gKHN0cnVjdCBza19idWZmICopIGNmcGt0X3RvbmF0aXZlKHBrdCk7CisKKwkvKiBHZXQgbGVuZ3RoIG9mIENBSUYgcGFja2V0LiAqLworCXBrdGxlbiA9IHNrYi0+bGVuOworCiAJLyogUGFzcyBzb21lIG1pbmltdW0gaW5mb3JtYXRpb24gYW5kCiAJICogc2VuZCB0aGUgcGFja2V0IHRvIHRoZSBuZXQgc3RhY2suCiAJICovCkBAIC0xNTMsNiArMTUzLDE4IEBACiB9CiBzdGF0aWMgREVDTEFSRV9XT1JLKGNsb3NlX3dvcmtlciwgY2xvc2Vfd29yayk7CiAKK3N0YXRpYyB2b2lkIGNobmxfaG9sZChzdHJ1Y3QgY2ZsYXllciAqbHlyKQoreworCXN0cnVjdCBjaG5sX25ldCAqcHJpdiA9IGNvbnRhaW5lcl9vZihseXIsIHN0cnVjdCBjaG5sX25ldCwgY2hubCk7CisJZGV2X2hvbGQocHJpdi0+bmV0ZGV2KTsKK30KKworc3RhdGljIHZvaWQgY2hubF9wdXQoc3RydWN0IGNmbGF5ZXIgKmx5cikKK3sKKwlzdHJ1Y3QgY2hubF9uZXQgKnByaXYgPSBjb250YWluZXJfb2YobHlyLCBzdHJ1Y3QgY2hubF9uZXQsIGNobmwpOworCWRldl9wdXQocHJpdi0+bmV0ZGV2KTsKK30KKwogc3RhdGljIHZvaWQgY2hubF9mbG93Y3RybF9jYihzdHJ1Y3QgY2ZsYXllciAqbGF5ciwgZW51bSBjYWlmX2N0cmxjbWQgZmxvdywKIAkJCQlpbnQgcGh5aWQpCiB7CkBAIC0xOTAsNiArMjAyLDcgQEAKIAkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5uZXRkZXYpOwogCQlicmVhazsKIAljYXNlIENBSUZfQ1RSTENNRF9JTklUX1JTUDoKKwkJY2FpZl9jbGllbnRfcmVnaXN0ZXJfcmVmY250KCZwcml2LT5jaG5sLCBjaG5sX2hvbGQsIGNobmxfcHV0KTsKIAkJcHJpdi0+c3RhdGUgPSBDQUlGX0NPTk5FQ1RFRDsKIAkJcHJpdi0+Zmxvd2VuYWJsZWQgPSB0cnVlOwogCQluZXRpZl93YWtlX3F1ZXVlKHByaXYtPm5ldGRldik7CkBAIC0yNTcsOCArMjcwLDkgQEAKIAogCWlmIChwcml2LT5zdGF0ZSAhPSBDQUlGX0NPTk5FQ1RJTkcpIHsKIAkJcHJpdi0+c3RhdGUgPSBDQUlGX0NPTk5FQ1RJTkc7Ci0JCXJlc3VsdCA9IGNhaWZfY29ubmVjdF9jbGllbnQoJnByaXYtPmNvbm5fcmVxLCAmcHJpdi0+Y2hubCwKLQkJCQkJJmxsaWZpbmRleCwgJmhlYWRyb29tLCAmdGFpbHJvb20pOworCQlyZXN1bHQgPSBjYWlmX2Nvbm5lY3RfY2xpZW50KGRldl9uZXQoZGV2KSwgJnByaXYtPmNvbm5fcmVxLAorCQkJCQkJJnByaXYtPmNobmwsICZsbGlmaW5kZXgsCisJCQkJCQkmaGVhZHJvb20sICZ0YWlscm9vbSk7CiAJCWlmIChyZXN1bHQgIT0gMCkgewogCQkJCXByX2RlYnVnKCJlcnI6ICIKIAkJCQkJICJVbmFibGUgdG8gcmVnaXN0ZXIgYW5kIG9wZW4gZGV2aWNlLCIKQEAgLTMxNCw3ICszMjgsNyBAQAogCiAJaWYgKHJlc3VsdCA9PSAwKSB7CiAJCXByX2RlYnVnKCJjb25uZWN0IHRpbWVvdXRcbiIpOwotCQljYWlmX2Rpc2Nvbm5lY3RfY2xpZW50KCZwcml2LT5jaG5sKTsKKwkJY2FpZl9kaXNjb25uZWN0X2NsaWVudChkZXZfbmV0KGRldiksICZwcml2LT5jaG5sKTsKIAkJcHJpdi0+c3RhdGUgPSBDQUlGX0RJU0NPTk5FQ1RFRDsKIAkJcHJfZGVidWcoInN0YXRlIGRpc2Nvbm5lY3RlZFxuIik7CiAJCXJlc3VsdCA9IC1FVElNRURPVVQ7CkBAIC0zMzAsNyArMzQ0LDcgQEAKIAlyZXR1cm4gMDsKIAogZXJyb3I6Ci0JY2FpZl9kaXNjb25uZWN0X2NsaWVudCgmcHJpdi0+Y2hubCk7CisJY2FpZl9kaXNjb25uZWN0X2NsaWVudChkZXZfbmV0KGRldiksICZwcml2LT5jaG5sKTsKIAlwcml2LT5zdGF0ZSA9IENBSUZfRElTQ09OTkVDVEVEOwogCXByX2RlYnVnKCJzdGF0ZSBkaXNjb25uZWN0ZWRcbiIpOwogCXJldHVybiByZXN1bHQ7CkBAIC0zNDQsNyArMzU4LDcgQEAKIAlBU1NFUlRfUlROTCgpOwogCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXByaXYtPnN0YXRlID0gQ0FJRl9ESVNDT05ORUNURUQ7Ci0JY2FpZl9kaXNjb25uZWN0X2NsaWVudCgmcHJpdi0+Y2hubCk7CisJY2FpZl9kaXNjb25uZWN0X2NsaWVudChkZXZfbmV0KGRldiksICZwcml2LT5jaG5sKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzczLDExICszODcsMTggQEAKIAkubmRvX3N0YXJ0X3htaXQgPSBjaG5sX25ldF9zdGFydF94bWl0LAogfTsKIAorc3RhdGljIHZvaWQgY2hubF9uZXRfZGVzdHJ1Y3RvcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBjaG5sX25ldCAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJY2FpZl9mcmVlX2NsaWVudCgmcHJpdi0+Y2hubCk7CisJZnJlZV9uZXRkZXYoZGV2KTsKK30KKwogc3RhdGljIHZvaWQgaXBjYWlmX25ldF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBjaG5sX25ldCAqcHJpdjsKIAlkZXYtPm5ldGRldl9vcHMgPSAmbmV0ZGV2X29wczsKLQlkZXYtPmRlc3RydWN0b3IgPSBmcmVlX25ldGRldjsKKwlkZXYtPmRlc3RydWN0b3IgPSBjaG5sX25ldF9kZXN0cnVjdG9yOwogCWRldi0+ZmxhZ3MgfD0gSUZGX05PQVJQOwogCWRldi0+ZmxhZ3MgfD0gSUZGX1BPSU5UT1BPSU5UOwogCWRldi0+bXR1ID0gR1BSU19QRFBfTVRVOwpAQCAtMzkxLDcgKzQxMiw3IEBACiAJcHJpdi0+Y29ubl9yZXEubGlua19zZWxlY3RvciA9IENBSUZfTElOS19ISUdIX0JBTkRXOwogCXByaXYtPmNvbm5fcmVxLnByaW9yaXR5ID0gQ0FJRl9QUklPX0xPVzsKIAkvKiBJbnNlcnQgaWxsZWdhbCB2YWx1ZSAqLwotCXByaXYtPmNvbm5fcmVxLnNvY2thZGRyLnUuZGdtLmNvbm5lY3Rpb25faWQgPSAtMTsKKwlwcml2LT5jb25uX3JlcS5zb2NrYWRkci51LmRnbS5jb25uZWN0aW9uX2lkID0gMDsKIAlwcml2LT5mbG93ZW5hYmxlZCA9IGZhbHNlOwogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+bmV0bWdtdF93cSk7CkBAIC00NTMsNiArNDc0LDEwIEBACiAJCXByX3dhcm4oImRldmljZSBydG1sIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwogCWVsc2UKIAkJbGlzdF9hZGQoJmNhaWZkZXYtPmxpc3RfZmllbGQsICZjaG5sX25ldF9saXN0KTsKKworCS8qIFRha2UgaWZpbmRleCBhcyBjb25uZWN0aW9uLWlkIGlmIG51bGwgKi8KKwlpZiAoY2FpZmRldi0+Y29ubl9yZXEuc29ja2FkZHIudS5kZ20uY29ubmVjdGlvbl9pZCA9PSAwKQorCQljYWlmZGV2LT5jb25uX3JlcS5zb2NrYWRkci51LmRnbS5jb25uZWN0aW9uX2lkID0gZGV2LT5pZmluZGV4OwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9jYW4vYWZfY2FuLmMgYi9uZXQvY2FuL2FmX2Nhbi5jCmluZGV4IDczM2Q2NmYuLjA5NGZjNTMgMTAwNjQ0Ci0tLSBhL25ldC9jYW4vYWZfY2FuLmMKKysrIGIvbmV0L2Nhbi9hZl9jYW4uYwpAQCAtODQsOCArODQsOCBAQAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpyY3ZfY2FjaGUgX19yZWFkX21vc3RseTsKIAogLyogdGFibGUgb2YgcmVnaXN0ZXJlZCBDQU4gcHJvdG9jb2xzICovCi1zdGF0aWMgc3RydWN0IGNhbl9wcm90byAqcHJvdG9fdGFiW0NBTl9OUFJPVE9dIF9fcmVhZF9tb3N0bHk7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHByb3RvX3RhYl9sb2NrKTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2FuX3Byb3RvICpwcm90b190YWJbQ0FOX05QUk9UT10gX19yZWFkX21vc3RseTsKK3N0YXRpYyBERUZJTkVfTVVURVgocHJvdG9fdGFiX2xvY2spOwogCiBzdHJ1Y3QgdGltZXJfbGlzdCBjYW5fc3RhdHRpbWVyOyAgIC8qIHRpbWVyIGZvciBzdGF0aXN0aWNzIHVwZGF0ZSAqLwogc3RydWN0IHNfc3RhdHMgICAgY2FuX3N0YXRzOyAgICAgICAvKiBwYWNrZXQgc3RhdGlzdGljcyAqLwpAQCAtMTE1LDExICsxMTUsMjkgQEAKIAlza2JfcXVldWVfcHVyZ2UoJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBjYW5fcHJvdG8gKmNhbl9nZXRfcHJvdG8oaW50IHByb3RvY29sKQoreworCWNvbnN0IHN0cnVjdCBjYW5fcHJvdG8gKmNwOworCisJcmN1X3JlYWRfbG9jaygpOworCWNwID0gcmN1X2RlcmVmZXJlbmNlKHByb3RvX3RhYltwcm90b2NvbF0pOworCWlmIChjcCAmJiAhdHJ5X21vZHVsZV9nZXQoY3AtPnByb3QtPm93bmVyKSkKKwkJY3AgPSBOVUxMOworCXJjdV9yZWFkX3VubG9jaygpOworCisJcmV0dXJuIGNwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2FuX3B1dF9wcm90byhjb25zdCBzdHJ1Y3QgY2FuX3Byb3RvICpjcCkKK3sKKwltb2R1bGVfcHV0KGNwLT5wcm90LT5vd25lcik7Cit9CisKIHN0YXRpYyBpbnQgY2FuX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCwKIAkJICAgICAgaW50IGtlcm4pCiB7CiAJc3RydWN0IHNvY2sgKnNrOwotCXN0cnVjdCBjYW5fcHJvdG8gKmNwOworCWNvbnN0IHN0cnVjdCBjYW5fcHJvdG8gKmNwOwogCWludCBlcnIgPSAwOwogCiAJc29jay0+c3RhdGUgPSBTU19VTkNPTk5FQ1RFRDsKQEAgLTEzMCw5ICsxNDgsMTIgQEAKIAlpZiAoIW5ldF9lcShuZXQsICZpbml0X25ldCkpCiAJCXJldHVybiAtRUFGTk9TVVBQT1JUOwogCisJY3AgPSBjYW5fZ2V0X3Byb3RvKHByb3RvY29sKTsKKwogI2lmZGVmIENPTkZJR19NT0RVTEVTCi0JLyogdHJ5IHRvIGxvYWQgcHJvdG9jb2wgbW9kdWxlIGtlcm5lbCBpcyBtb2R1bGFyICovCi0JaWYgKCFwcm90b190YWJbcHJvdG9jb2xdKSB7CisJaWYgKCFjcCkgeworCQkvKiB0cnkgdG8gbG9hZCBwcm90b2NvbCBtb2R1bGUgaWYga2VybmVsIGlzIG1vZHVsYXIgKi8KKwogCQllcnIgPSByZXF1ZXN0X21vZHVsZSgiY2FuLXByb3RvLSVkIiwgcHJvdG9jb2wpOwogCiAJCS8qCkBAIC0xNDMsMjIgKzE2NCwxOCBAQAogCQlpZiAoZXJyICYmIHByaW50a19yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX0VSUiAiY2FuOiByZXF1ZXN0X21vZHVsZSAiCiAJCQkgICAgICAgIihjYW4tcHJvdG8tJWQpIGZhaWxlZC5cbiIsIHByb3RvY29sKTsKKworCQljcCA9IGNhbl9nZXRfcHJvdG8ocHJvdG9jb2wpOwogCX0KICNlbmRpZgogCi0Jc3Bpbl9sb2NrKCZwcm90b190YWJfbG9jayk7Ci0JY3AgPSBwcm90b190YWJbcHJvdG9jb2xdOwotCWlmIChjcCAmJiAhdHJ5X21vZHVsZV9nZXQoY3AtPnByb3QtPm93bmVyKSkKLQkJY3AgPSBOVUxMOwotCXNwaW5fdW5sb2NrKCZwcm90b190YWJfbG9jayk7Ci0KIAkvKiBjaGVjayBmb3IgYXZhaWxhYmxlIHByb3RvY29sIGFuZCBjb3JyZWN0IHVzYWdlICovCiAKIAlpZiAoIWNwKQogCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKIAogCWlmIChjcC0+dHlwZSAhPSBzb2NrLT50eXBlKSB7Ci0JCWVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7CisJCWVyciA9IC1FUFJPVE9UWVBFOwogCQlnb3RvIGVycm91dDsKIAl9CiAKQEAgLTE4Myw3ICsyMDAsNyBAQAogCX0KIAogIGVycm91dDoKLQltb2R1bGVfcHV0KGNwLT5wcm90LT5vd25lcik7CisJY2FuX3B1dF9wcm90byhjcCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNjc5LDcgKzY5Niw3IEBACiAgKiAgLUVCVVNZICBwcm90b2NvbCBhbHJlYWR5IGluIHVzZQogICogIC1FTk9CVUYgaWYgcHJvdG9fcmVnaXN0ZXIoKSBmYWlscwogICovCi1pbnQgY2FuX3Byb3RvX3JlZ2lzdGVyKHN0cnVjdCBjYW5fcHJvdG8gKmNwKQoraW50IGNhbl9wcm90b19yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgY2FuX3Byb3RvICpjcCkKIHsKIAlpbnQgcHJvdG8gPSBjcC0+cHJvdG9jb2w7CiAJaW50IGVyciA9IDA7CkBAIC02OTQsMTUgKzcxMSwxNiBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0Jc3Bpbl9sb2NrKCZwcm90b190YWJfbG9jayk7CisJbXV0ZXhfbG9jaygmcHJvdG9fdGFiX2xvY2spOworCiAJaWYgKHByb3RvX3RhYltwcm90b10pIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjYW46IHByb3RvY29sICVkIGFscmVhZHkgcmVnaXN0ZXJlZFxuIiwKIAkJICAgICAgIHByb3RvKTsKIAkJZXJyID0gLUVCVVNZOwogCX0gZWxzZQotCQlwcm90b190YWJbcHJvdG9dID0gY3A7CisJCXJjdV9hc3NpZ25fcG9pbnRlcihwcm90b190YWJbcHJvdG9dLCBjcCk7CiAKLQlzcGluX3VubG9jaygmcHJvdG9fdGFiX2xvY2spOworCW11dGV4X3VubG9jaygmcHJvdG9fdGFiX2xvY2spOwogCiAJaWYgKGVyciA8IDApCiAJCXByb3RvX3VucmVnaXN0ZXIoY3AtPnByb3QpOwpAQCAtNzE1LDE3ICs3MzMsMTYgQEAKICAqIGNhbl9wcm90b191bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBDQU4gdHJhbnNwb3J0IHByb3RvY29sCiAgKiBAY3A6IHBvaW50ZXIgdG8gQ0FOIHByb3RvY29sIHN0cnVjdHVyZQogICovCi12b2lkIGNhbl9wcm90b191bnJlZ2lzdGVyKHN0cnVjdCBjYW5fcHJvdG8gKmNwKQordm9pZCBjYW5fcHJvdG9fdW5yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgY2FuX3Byb3RvICpjcCkKIHsKIAlpbnQgcHJvdG8gPSBjcC0+cHJvdG9jb2w7CiAKLQlzcGluX2xvY2soJnByb3RvX3RhYl9sb2NrKTsKLQlpZiAoIXByb3RvX3RhYltwcm90b10pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJCVUc6IGNhbjogcHJvdG9jb2wgJWQgaXMgbm90IHJlZ2lzdGVyZWRcbiIsCi0JCSAgICAgICBwcm90byk7Ci0JfQotCXByb3RvX3RhYltwcm90b10gPSBOVUxMOwotCXNwaW5fdW5sb2NrKCZwcm90b190YWJfbG9jayk7CisJbXV0ZXhfbG9jaygmcHJvdG9fdGFiX2xvY2spOworCUJVR19PTihwcm90b190YWJbcHJvdG9dICE9IGNwKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIocHJvdG9fdGFiW3Byb3RvXSwgTlVMTCk7CisJbXV0ZXhfdW5sb2NrKCZwcm90b190YWJfbG9jayk7CisKKwlzeW5jaHJvbml6ZV9yY3UoKTsKIAogCXByb3RvX3VucmVnaXN0ZXIoY3AtPnByb3QpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2Nhbi9iY20uYyBiL25ldC9jYW4vYmNtLmMKaW5kZXggNTdiMWFlZC4uY2NlZDgwNiAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9iY20uYworKysgYi9uZXQvY2FuL2JjbS5jCkBAIC0xNDI3LDkgKzE0MjcsMTQgQEAKIHN0YXRpYyBpbnQgYmNtX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKLQlzdHJ1Y3QgYmNtX3NvY2sgKmJvID0gYmNtX3NrKHNrKTsKKwlzdHJ1Y3QgYmNtX3NvY2sgKmJvOwogCXN0cnVjdCBiY21fb3AgKm9wLCAqbmV4dDsKIAorCWlmIChzayA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWJvID0gYmNtX3NrKHNrKTsKKwogCS8qIHJlbW92ZSBiY21fb3BzLCB0aW1lciwgcnhfdW5yZWdpc3RlcigpLCBldGMuICovCiAKIAl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmYm8tPm5vdGlmaWVyKTsKQEAgLTE1OTYsNyArMTYwMSw3IEBACiAJLmluaXQgICAgICAgPSBiY21faW5pdCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2FuX3Byb3RvIGJjbV9jYW5fcHJvdG8gX19yZWFkX21vc3RseSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2FuX3Byb3RvIGJjbV9jYW5fcHJvdG8gPSB7CiAJLnR5cGUgICAgICAgPSBTT0NLX0RHUkFNLAogCS5wcm90b2NvbCAgID0gQ0FOX0JDTSwKIAkub3BzICAgICAgICA9ICZiY21fb3BzLApkaWZmIC0tZ2l0IGEvbmV0L2Nhbi9yYXcuYyBiL25ldC9jYW4vcmF3LmMKaW5kZXggNjQ5YWNmYS4uZGVhOTlhNiAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9yYXcuYworKysgYi9uZXQvY2FuL3Jhdy5jCkBAIC0zMDUsNyArMzA1LDEyIEBACiBzdGF0aWMgaW50IHJhd19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7Ci0Jc3RydWN0IHJhd19zb2NrICpybyA9IHJhd19zayhzayk7CisJc3RydWN0IHJhd19zb2NrICpybzsKKworCWlmICghc2spCisJCXJldHVybiAwOworCisJcm8gPSByYXdfc2soc2spOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJnJvLT5ub3RpZmllcik7CiAKQEAgLTc2OSw3ICs3NzQsNyBAQAogCS5pbml0ICAgICAgID0gcmF3X2luaXQsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNhbl9wcm90byByYXdfY2FuX3Byb3RvIF9fcmVhZF9tb3N0bHkgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNhbl9wcm90byByYXdfY2FuX3Byb3RvID0gewogCS50eXBlICAgICAgID0gU09DS19SQVcsCiAJLnByb3RvY29sICAgPSBDQU5fUkFXLAogCS5vcHMgICAgICAgID0gJnJhd19vcHMsCmRpZmYgLS1naXQgYS9uZXQvY2VwaC9tZXNzZW5nZXIuYyBiL25ldC9jZXBoL21lc3Nlbmdlci5jCmluZGV4IDA1ZjM1NzguLmUxNWE4MmMgMTAwNjQ0Ci0tLSBhL25ldC9jZXBoL21lc3Nlbmdlci5jCisrKyBiL25ldC9jZXBoL21lc3Nlbmdlci5jCkBAIC0yMjY3LDYgKzIyNjcsMTkgQEAKIAltLT5tb3JlX3RvX2ZvbGxvdyA9IGZhbHNlOwogCW0tPnBvb2wgPSBOVUxMOwogCisJLyogbWlkZGxlICovCisJbS0+bWlkZGxlID0gTlVMTDsKKworCS8qIGRhdGEgKi8KKwltLT5ucl9wYWdlcyA9IDA7CisJbS0+cGFnZV9hbGlnbm1lbnQgPSAwOworCW0tPnBhZ2VzID0gTlVMTDsKKwltLT5wYWdlbGlzdCA9IE5VTEw7CisJbS0+YmlvID0gTlVMTDsKKwltLT5iaW9faXRlciA9IE5VTEw7CisJbS0+YmlvX3NlZyA9IDA7CisJbS0+dHJhaWwgPSBOVUxMOworCiAJLyogZnJvbnQgKi8KIAlpZiAoZnJvbnRfbGVuKSB7CiAJCWlmIChmcm9udF9sZW4gPiBQQUdFX0NBQ0hFX1NJWkUpIHsKQEAgLTIyODYsMTkgKzIyOTksNiBAQAogCX0KIAltLT5mcm9udC5pb3ZfbGVuID0gZnJvbnRfbGVuOwogCi0JLyogbWlkZGxlICovCi0JbS0+bWlkZGxlID0gTlVMTDsKLQotCS8qIGRhdGEgKi8KLQltLT5ucl9wYWdlcyA9IDA7Ci0JbS0+cGFnZV9hbGlnbm1lbnQgPSAwOwotCW0tPnBhZ2VzID0gTlVMTDsKLQltLT5wYWdlbGlzdCA9IE5VTEw7Ci0JbS0+YmlvID0gTlVMTDsKLQltLT5iaW9faXRlciA9IE5VTEw7Ci0JbS0+YmlvX3NlZyA9IDA7Ci0JbS0+dHJhaWwgPSBOVUxMOwotCiAJZG91dCgiY2VwaF9tc2dfbmV3ICVwIGZyb250ICVkXG4iLCBtLCBmcm9udF9sZW4pOwogCXJldHVybiBtOwogCmRpZmYgLS1naXQgYS9uZXQvY2VwaC9vc2RfY2xpZW50LmMgYi9uZXQvY2VwaC9vc2RfY2xpZW50LmMKaW5kZXggNWE4MGY0MS4uNmI1ZGRhMSAxMDA2NDQKLS0tIGEvbmV0L2NlcGgvb3NkX2NsaWVudC5jCisrKyBiL25ldC9jZXBoL29zZF9jbGllbnQuYwpAQCAtNDcwLDggKzQ3MCw4IEBACiAJCQkJCSBzbmFwYywgb3BzLAogCQkJCQkgdXNlX21lbXBvb2wsCiAJCQkJCSBHRlBfTk9GUywgTlVMTCwgTlVMTCk7Ci0JaWYgKElTX0VSUihyZXEpKQotCQlyZXR1cm4gcmVxOworCWlmICghcmVxKQorCQlyZXR1cm4gTlVMTDsKIAogCS8qIGNhbGN1bGF0ZSBtYXggd3JpdGUgc2l6ZSAqLwogCWNhbGNfbGF5b3V0KG9zZGMsIHZpbm8sIGxheW91dCwgb2ZmLCBwbGVuLCByZXEsIG9wcyk7CmRpZmYgLS1naXQgYS9uZXQvY29tcGF0LmMgYi9uZXQvY29tcGF0LmMKaW5kZXggMzY0OWQ1OC4uYzU3OGQ5MyAxMDA2NDQKLS0tIGEvbmV0L2NvbXBhdC5jCisrKyBiL25ldC9jb21wYXQuYwpAQCAtNzIyLDExICs3MjIsMTEgQEAKIAogLyogQXJndW1lbnQgbGlzdCBzaXplcyBmb3IgY29tcGF0X3N5c19zb2NrZXRjYWxsICovCiAjZGVmaW5lIEFMKHgpICgoeCkgKiBzaXplb2YodTMyKSkKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIG5hc1syMF0gPSB7CitzdGF0aWMgdW5zaWduZWQgY2hhciBuYXNbMjFdID0gewogCUFMKDApLCBBTCgzKSwgQUwoMyksIEFMKDMpLCBBTCgyKSwgQUwoMyksCiAJQUwoMyksIEFMKDMpLCBBTCg0KSwgQUwoNCksIEFMKDQpLCBBTCg2KSwKIAlBTCg2KSwgQUwoMiksIEFMKDUpLCBBTCg1KSwgQUwoMyksIEFMKDMpLAotCUFMKDQpLCBBTCg1KQorCUFMKDQpLCBBTCg1KSwgQUwoNCkKIH07CiAjdW5kZWYgQUwKIApAQCAtNzM1LDYgKzczNSwxMyBAQAogCXJldHVybiBzeXNfc2VuZG1zZyhmZCwgKHN0cnVjdCBtc2doZHIgX191c2VyICopbXNnLCBmbGFncyB8IE1TR19DTVNHX0NPTVBBVCk7CiB9CiAKK2FzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3NlbmRtbXNnKGludCBmZCwgc3RydWN0IGNvbXBhdF9tbXNnaGRyIF9fdXNlciAqbW1zZywKKwkJCQkgICAgdW5zaWduZWQgdmxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXJldHVybiBfX3N5c19zZW5kbW1zZyhmZCwgKHN0cnVjdCBtbXNnaGRyIF9fdXNlciAqKW1tc2csIHZsZW4sCisJCQkgICAgICBmbGFncyB8IE1TR19DTVNHX0NPTVBBVCk7Cit9CisKIGFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3JlY3Ztc2coaW50IGZkLCBzdHJ1Y3QgY29tcGF0X21zZ2hkciBfX3VzZXIgKm1zZywgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXJldHVybiBzeXNfcmVjdm1zZyhmZCwgKHN0cnVjdCBtc2doZHIgX191c2VyICopbXNnLCBmbGFncyB8IE1TR19DTVNHX0NPTVBBVCk7CkBAIC03ODAsNyArNzg3LDcgQEAKIAl1MzIgYVs2XTsKIAl1MzIgYTAsIGExOwogCi0JaWYgKGNhbGwgPCBTWVNfU09DS0VUIHx8IGNhbGwgPiBTWVNfUkVDVk1NU0cpCisJaWYgKGNhbGwgPCBTWVNfU09DS0VUIHx8IGNhbGwgPiBTWVNfU0VORE1NU0cpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChjb3B5X2Zyb21fdXNlcihhLCBhcmdzLCBuYXNbY2FsbF0pKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTgzOSw2ICs4NDYsOSBAQAogCWNhc2UgU1lTX1NFTkRNU0c6CiAJCXJldCA9IGNvbXBhdF9zeXNfc2VuZG1zZyhhMCwgY29tcGF0X3B0cihhMSksIGFbMl0pOwogCQlicmVhazsKKwljYXNlIFNZU19TRU5ETU1TRzoKKwkJcmV0ID0gY29tcGF0X3N5c19zZW5kbW1zZyhhMCwgY29tcGF0X3B0cihhMSksIGFbMl0sIGFbM10pOworCQlicmVhazsKIAljYXNlIFNZU19SRUNWTVNHOgogCQlyZXQgPSBjb21wYXRfc3lzX3JlY3Ztc2coYTAsIGNvbXBhdF9wdHIoYTEpLCBhWzJdKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IGMyYWM1OTkuLmQ5NDUzNzkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCisrKyBiL25ldC9jb3JlL2Rldi5jCkBAIC05NDgsNyArOTQ4LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woZGV2X2FsbG9jX25hbWUpOwogCi1zdGF0aWMgaW50IGRldl9nZXRfdmFsaWRfbmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLCBib29sIGZtdCkKK3N0YXRpYyBpbnQgZGV2X2dldF92YWxpZF9uYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IG5ldCAqbmV0OwogCkBAIC05NTgsNyArOTU4LDcgQEAKIAlpZiAoIWRldl92YWxpZF9uYW1lKG5hbWUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChmbXQgJiYgc3RyY2hyKG5hbWUsICclJykpCisJaWYgKHN0cmNocihuYW1lLCAnJScpKQogCQlyZXR1cm4gZGV2X2FsbG9jX25hbWUoZGV2LCBuYW1lKTsKIAllbHNlIGlmIChfX2Rldl9nZXRfYnlfbmFtZShuZXQsIG5hbWUpKQogCQlyZXR1cm4gLUVFWElTVDsKQEAgLTk5NSw3ICs5OTUsNyBAQAogCiAJbWVtY3B5KG9sZG5hbWUsIGRldi0+bmFtZSwgSUZOQU1TSVopOwogCi0JZXJyID0gZGV2X2dldF92YWxpZF9uYW1lKGRldiwgbmV3bmFtZSwgMSk7CisJZXJyID0gZGV2X2dldF92YWxpZF9uYW1lKGRldiwgbmV3bmFtZSk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKQEAgLTEwMDcsNyArMTAwNyw3IEBACiAJfQogCiAJd3JpdGVfbG9ja19iaCgmZGV2X2Jhc2VfbG9jayk7Ci0JaGxpc3RfZGVsKCZkZXYtPm5hbWVfaGxpc3QpOworCWhsaXN0X2RlbF9yY3UoJmRldi0+bmFtZV9obGlzdCk7CiAJd3JpdGVfdW5sb2NrX2JoKCZkZXZfYmFzZV9sb2NrKTsKIAogCXN5bmNocm9uaXplX3JjdSgpOwpAQCAtMTI4NCwxMSArMTI4NCwxMyBAQAogICovCiBpbnQgZGV2X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JTElTVF9IRUFEKHNpbmdsZSk7CisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfVVApIHsKKwkJTElTVF9IRUFEKHNpbmdsZSk7CiAKLQlsaXN0X2FkZCgmZGV2LT51bnJlZ19saXN0LCAmc2luZ2xlKTsKLQlkZXZfY2xvc2VfbWFueSgmc2luZ2xlKTsKLQlsaXN0X2RlbCgmc2luZ2xlKTsKKwkJbGlzdF9hZGQoJmRldi0+dW5yZWdfbGlzdCwgJnNpbmdsZSk7CisJCWRldl9jbG9zZV9tYW55KCZzaW5nbGUpOworCQlsaXN0X2RlbCgmc2luZ2xlKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGRldl9jbG9zZSk7CkBAIC0xMzE1LDcgKzEzMTcsOCBAQAogCQlyZXR1cm47CiAKIAlfX2V0aHRvb2xfc2V0X2ZsYWdzKGRldiwgZmxhZ3MgJiB+RVRIX0ZMQUdfTFJPKTsKLQlXQVJOX09OKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTyk7CisJaWYgKHVubGlrZWx5KGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykpCisJCW5ldGRldl9XQVJOKGRldiwgImZhaWxlZCB0byBkaXNhYmxlIExSTyFcbiIpOwogfQogRVhQT1JUX1NZTUJPTChkZXZfZGlzYWJsZV9scm8pOwogCkBAIC0yNTAyLDggKzI1MDUsOCBAQAogX191MzIgX19za2JfZ2V0X3J4aGFzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludCBuaG9mZiwgaGFzaCA9IDAsIHBvZmY7Ci0Jc3RydWN0IGlwdjZoZHIgKmlwNjsKLQlzdHJ1Y3QgaXBoZHIgKmlwOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDY7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcDsKIAl1OCBpcF9wcm90bzsKIAl1MzIgYWRkcjEsIGFkZHIyLCBpaGw7CiAJdW5pb24gewpAQCAtMjUxOCw3ICsyNTIxLDcgQEAKIAkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCppcCkgKyBuaG9mZikpCiAJCQlnb3RvIGRvbmU7CiAKLQkJaXAgPSAoc3RydWN0IGlwaGRyICopIChza2ItPmRhdGEgKyBuaG9mZik7CisJCWlwID0gKGNvbnN0IHN0cnVjdCBpcGhkciAqKSAoc2tiLT5kYXRhICsgbmhvZmYpOwogCQlpZiAoaXAtPmZyYWdfb2ZmICYgaHRvbnMoSVBfTUYgfCBJUF9PRkZTRVQpKQogCQkJaXBfcHJvdG8gPSAwOwogCQllbHNlCkBAIC0yNTMxLDcgKzI1MzQsNyBAQAogCQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwNikgKyBuaG9mZikpCiAJCQlnb3RvIGRvbmU7CiAKLQkJaXA2ID0gKHN0cnVjdCBpcHY2aGRyICopIChza2ItPmRhdGEgKyBuaG9mZik7CisJCWlwNiA9IChjb25zdCBzdHJ1Y3QgaXB2NmhkciAqKSAoc2tiLT5kYXRhICsgbmhvZmYpOwogCQlpcF9wcm90byA9IGlwNi0+bmV4dGhkcjsKIAkJYWRkcjEgPSAoX19mb3JjZSB1MzIpIGlwNi0+c2FkZHIuczZfYWRkcjMyWzNdOwogCQlhZGRyMiA9IChfX2ZvcmNlIHUzMikgaXA2LT5kYWRkci5zNl9hZGRyMzJbM107CkBAIC0zMDc2LDI1ICszMDc5LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5ldGRldl9yeF9oYW5kbGVyX3VucmVnaXN0ZXIpOwogCi1zdGF0aWMgdm9pZCB2bGFuX29uX2JvbmRfaG9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCS8qCi0JICogTWFrZSBzdXJlIEFSUCBmcmFtZXMgcmVjZWl2ZWQgb24gVkxBTiBpbnRlcmZhY2VzIHN0YWNrZWQgb24KLQkgKiBib25kaW5nIGludGVyZmFjZXMgc3RpbGwgbWFrZSB0aGVpciB3YXkgdG8gYW55IGJhc2UgYm9uZGluZwotCSAqIGRldmljZSB0aGF0IG1heSBoYXZlIHJlZ2lzdGVyZWQgZm9yIGEgc3BlY2lmaWMgcHR5cGUuCi0JICovCi0JaWYgKHNrYi0+ZGV2LT5wcml2X2ZsYWdzICYgSUZGXzgwMl8xUV9WTEFOICYmCi0JICAgIHZsYW5fZGV2X3JlYWxfZGV2KHNrYi0+ZGV2KS0+cHJpdl9mbGFncyAmIElGRl9CT05ESU5HICYmCi0JICAgIHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfQVJQKSkgewotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOwotCi0JCWlmICghc2tiMikKLQkJCXJldHVybjsKLQkJc2tiMi0+ZGV2ID0gdmxhbl9kZXZfcmVhbF9kZXYoc2tiLT5kZXYpOwotCQluZXRpZl9yeChza2IyKTsKLQl9Ci19Ci0KIHN0YXRpYyBpbnQgX19uZXRpZl9yZWNlaXZlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBwYWNrZXRfdHlwZSAqcHR5cGUsICpwdF9wcmV2OwpAQCAtMzEzMCw2ICszMTE0LDEyIEBACiAKIAlfX3RoaXNfY3B1X2luYyhzb2Z0bmV0X2RhdGEucHJvY2Vzc2VkKTsKIAorCWlmIChza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QXzgwMjFRKSkgeworCQlza2IgPSB2bGFuX3VudGFnKHNrYik7CisJCWlmICh1bmxpa2VseSghc2tiKSkKKwkJCWdvdG8gb3V0OworCX0KKwogI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVAogCWlmIChza2ItPnRjX3ZlcmQgJiBUQ19OQ0xTKSB7CiAJCXNrYi0+dGNfdmVyZCA9IENMUl9UQ19OQ0xTKHNrYi0+dGNfdmVyZCk7CkBAIC0zMTc3LDE1ICszMTY3LDEzIEBACiAJCQlyZXQgPSBkZWxpdmVyX3NrYihza2IsIHB0X3ByZXYsIG9yaWdfZGV2KTsKIAkJCXB0X3ByZXYgPSBOVUxMOwogCQl9Ci0JCWlmICh2bGFuX2h3YWNjZWxfZG9fcmVjZWl2ZSgmc2tiKSkgeworCQlpZiAodmxhbl9kb19yZWNlaXZlKCZza2IpKSB7CiAJCQlyZXQgPSBfX25ldGlmX3JlY2VpdmVfc2tiKHNrYik7CiAJCQlnb3RvIG91dDsKIAkJfSBlbHNlIGlmICh1bmxpa2VseSghc2tiKSkKIAkJCWdvdG8gb3V0OwogCX0KIAotCXZsYW5fb25fYm9uZF9ob29rKHNrYik7Ci0KIAkvKiBkZWxpdmVyIG9ubHkgZXhhY3QgbWF0Y2ggd2hlbiBpbmRpY2F0ZWQgKi8KIAludWxsX29yX2RldiA9IGRlbGl2ZXJfZXhhY3QgPyBza2ItPmRldiA6IE5VTEw7CiAKQEAgLTQ1MTAsNiArNDQ5OCwzMCBAQAogfQogCiAvKioKKyAqCWRldl9ldGh0b29sX2dldF9zZXR0aW5ncyAtIGNhbGwgZGV2aWNlJ3MgZXRodG9vbF9vcHM6OmdldF9zZXR0aW5ncygpCisgKglAZGV2OiBkZXZpY2UKKyAqCUBjbWQ6IG1lbW9yeSBhcmVhIGZvciBldGh0b29sX29wczo6Z2V0X3NldHRpbmdzKCkgcmVzdWx0CisgKgorICogICAgICBUaGUgY21kIGFyZyBpcyBpbml0aWFsaXplZCBwcm9wZXJseSAoY2xlYXJlZCBhbmQKKyAqICAgICAgZXRodG9vbF9jbWQ6OmNtZCBmaWVsZCBzZXQgdG8gRVRIVE9PTF9HU0VUKS4KKyAqCisgKglSZXR1cm4gZGV2aWNlJ3MgZXRodG9vbF9vcHM6OmdldF9zZXR0aW5ncygpIHJlc3VsdCB2YWx1ZSBvcgorICoJLUVPUE5PVFNVUFAgd2hlbiBkZXZpY2UgZG9lc24ndCBleHBvc2UKKyAqCWV0aHRvb2xfb3BzOjpnZXRfc2V0dGluZ3MoKSBvcGVyYXRpb24uCisgKi8KK2ludCBkZXZfZXRodG9vbF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJaWYgKCFkZXYtPmV0aHRvb2xfb3BzIHx8ICFkZXYtPmV0aHRvb2xfb3BzLT5nZXRfc2V0dGluZ3MpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCW1lbXNldChjbWQsIDAsIHNpemVvZihzdHJ1Y3QgZXRodG9vbF9jbWQpKTsKKwljbWQtPmNtZCA9IEVUSFRPT0xfR1NFVDsKKwlyZXR1cm4gZGV2LT5ldGh0b29sX29wcy0+Z2V0X3NldHRpbmdzKGRldiwgY21kKTsKK30KK0VYUE9SVF9TWU1CT0woZGV2X2V0aHRvb2xfZ2V0X3NldHRpbmdzKTsKKworLyoqCiAgKglkZXZfZ2V0X2ZsYWdzIC0gZ2V0IGZsYWdzIHJlcG9ydGVkIHRvIHVzZXJzcGFjZQogICoJQGRldjogZGV2aWNlCiAgKgpAQCAtNDc3Myw3ICs0Nzg1LDcgQEAKIAkJICogaXMgbmV2ZXIgcmVhY2hlZAogCQkgKi8KIAkJV0FSTl9PTigxKTsKLQkJZXJyID0gLUVJTlZBTDsKKwkJZXJyID0gLUVOT1RUWTsKIAkJYnJlYWs7CiAKIAl9CkBAIC01MDQxLDcgKzUwNTMsNyBAQAogCQkvKiBTZXQgdGhlIHBlciBkZXZpY2UgbWVtb3J5IGJ1ZmZlciBzcGFjZS4KIAkJICogTm90IGFwcGxpY2FibGUgaW4gb3VyIGNhc2UgKi8KIAljYXNlIFNJT0NTSUZMSU5LOgotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIC1FTk9UVFk7CiAKIAkvKgogCSAqCVVua25vd24gb3IgcHJpdmF0ZSBpb2N0bC4KQEAgLTUwNjIsNyArNTA3NCw3IEBACiAJCS8qIFRha2UgY2FyZSBvZiBXaXJlbGVzcyBFeHRlbnNpb25zICovCiAJCWlmIChjbWQgPj0gU0lPQ0lXRklSU1QgJiYgY21kIDw9IFNJT0NJV0xBU1QpCiAJCQlyZXR1cm4gd2V4dF9oYW5kbGVfaW9jdGwobmV0LCAmaWZyLCBjbWQsIGFyZyk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gLUVOT1RUWTsKIAl9CiB9CiAKQEAgLTUxMTQsNyArNTEyNiw3IEBACiAJCQlsaXN0X2RlbCgmZGV2LT51bnJlZ19saXN0KTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0KKwkJZGV2LT5kaXNtYW50bGUgPSB0cnVlOwogCQlCVUdfT04oZGV2LT5yZWdfc3RhdGUgIT0gTkVUUkVHX1JFR0lTVEVSRUQpOwogCX0KIApAQCAtNTE4NCwyNyArNTE5NiwyNyBAQAogCS8qIEZpeCBpbGxlZ2FsIGNoZWNrc3VtIGNvbWJpbmF0aW9ucyAqLwogCWlmICgoZmVhdHVyZXMgJiBORVRJRl9GX0hXX0NTVU0pICYmCiAJICAgIChmZWF0dXJlcyAmIChORVRJRl9GX0lQX0NTVU18TkVUSUZfRl9JUFY2X0NTVU0pKSkgewotCQluZXRkZXZfaW5mbyhkZXYsICJtaXhlZCBIVyBhbmQgSVAgY2hlY2tzdW0gc2V0dGluZ3MuXG4iKTsKKwkJbmV0ZGV2X3dhcm4oZGV2LCAibWl4ZWQgSFcgYW5kIElQIGNoZWNrc3VtIHNldHRpbmdzLlxuIik7CiAJCWZlYXR1cmVzICY9IH4oTkVUSUZfRl9JUF9DU1VNfE5FVElGX0ZfSVBWNl9DU1VNKTsKIAl9CiAKIAlpZiAoKGZlYXR1cmVzICYgTkVUSUZfRl9OT19DU1VNKSAmJgogCSAgICAoZmVhdHVyZXMgJiAoTkVUSUZfRl9IV19DU1VNfE5FVElGX0ZfSVBfQ1NVTXxORVRJRl9GX0lQVjZfQ1NVTSkpKSB7Ci0JCW5ldGRldl9pbmZvKGRldiwgIm1peGVkIG5vIGNoZWNrc3VtbWluZyBhbmQgb3RoZXIgc2V0dGluZ3MuXG4iKTsKKwkJbmV0ZGV2X3dhcm4oZGV2LCAibWl4ZWQgbm8gY2hlY2tzdW1taW5nIGFuZCBvdGhlciBzZXR0aW5ncy5cbiIpOwogCQlmZWF0dXJlcyAmPSB+KE5FVElGX0ZfSVBfQ1NVTXxORVRJRl9GX0lQVjZfQ1NVTXxORVRJRl9GX0hXX0NTVU0pOwogCX0KIAogCS8qIEZpeCBpbGxlZ2FsIFNHK0NTVU0gY29tYmluYXRpb25zLiAqLwogCWlmICgoZmVhdHVyZXMgJiBORVRJRl9GX1NHKSAmJgogCSAgICAhKGZlYXR1cmVzICYgTkVUSUZfRl9BTExfQ1NVTSkpIHsKLQkJbmV0ZGV2X2luZm8oZGV2LAotCQkJICAgICJEcm9wcGluZyBORVRJRl9GX1NHIHNpbmNlIG5vIGNoZWNrc3VtIGZlYXR1cmUuXG4iKTsKKwkJbmV0ZGV2X2RiZyhkZXYsCisJCQkiRHJvcHBpbmcgTkVUSUZfRl9TRyBzaW5jZSBubyBjaGVja3N1bSBmZWF0dXJlLlxuIik7CiAJCWZlYXR1cmVzICY9IH5ORVRJRl9GX1NHOwogCX0KIAogCS8qIFRTTyByZXF1aXJlcyB0aGF0IFNHIGlzIHByZXNlbnQgYXMgd2VsbC4gKi8KIAlpZiAoKGZlYXR1cmVzICYgTkVUSUZfRl9BTExfVFNPKSAmJiAhKGZlYXR1cmVzICYgTkVUSUZfRl9TRykpIHsKLQkJbmV0ZGV2X2luZm8oZGV2LCAiRHJvcHBpbmcgVFNPIGZlYXR1cmVzIHNpbmNlIG5vIFNHIGZlYXR1cmUuXG4iKTsKKwkJbmV0ZGV2X2RiZyhkZXYsICJEcm9wcGluZyBUU08gZmVhdHVyZXMgc2luY2Ugbm8gU0cgZmVhdHVyZS5cbiIpOwogCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9BTExfVFNPOwogCX0KIApAQCAtNTIxNCw3ICs1MjI2LDcgQEAKIAogCS8qIFNvZnR3YXJlIEdTTyBkZXBlbmRzIG9uIFNHLiAqLwogCWlmICgoZmVhdHVyZXMgJiBORVRJRl9GX0dTTykgJiYgIShmZWF0dXJlcyAmIE5FVElGX0ZfU0cpKSB7Ci0JCW5ldGRldl9pbmZvKGRldiwgIkRyb3BwaW5nIE5FVElGX0ZfR1NPIHNpbmNlIG5vIFNHIGZlYXR1cmUuXG4iKTsKKwkJbmV0ZGV2X2RiZyhkZXYsICJEcm9wcGluZyBORVRJRl9GX0dTTyBzaW5jZSBubyBTRyBmZWF0dXJlLlxuIik7CiAJCWZlYXR1cmVzICY9IH5ORVRJRl9GX0dTTzsKIAl9CiAKQEAgLTUyMjQsMTMgKzUyMzYsMTMgQEAKIAkJaWYgKCEoKGZlYXR1cmVzICYgTkVUSUZfRl9HRU5fQ1NVTSkgfHwKIAkJICAgIChmZWF0dXJlcyAmIChORVRJRl9GX0lQX0NTVU18TkVUSUZfRl9JUFY2X0NTVU0pKQogCQkJICAgID09IChORVRJRl9GX0lQX0NTVU18TkVUSUZfRl9JUFY2X0NTVU0pKSkgewotCQkJbmV0ZGV2X2luZm8oZGV2LAorCQkJbmV0ZGV2X2RiZyhkZXYsCiAJCQkJIkRyb3BwaW5nIE5FVElGX0ZfVUZPIHNpbmNlIG5vIGNoZWNrc3VtIG9mZmxvYWQgZmVhdHVyZXMuXG4iKTsKIAkJCWZlYXR1cmVzICY9IH5ORVRJRl9GX1VGTzsKIAkJfQogCiAJCWlmICghKGZlYXR1cmVzICYgTkVUSUZfRl9TRykpIHsKLQkJCW5ldGRldl9pbmZvKGRldiwKKwkJCW5ldGRldl9kYmcoZGV2LAogCQkJCSJEcm9wcGluZyBORVRJRl9GX1VGTyBzaW5jZSBubyBORVRJRl9GX1NHIGZlYXR1cmUuXG4iKTsKIAkJCWZlYXR1cmVzICY9IH5ORVRJRl9GX1VGTzsKIAkJfQpAQCAtNTI0MCwxMSArNTI1MiwxMyBAQAogfQogRVhQT1JUX1NZTUJPTChuZXRkZXZfZml4X2ZlYXR1cmVzKTsKIAotdm9pZCBuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitpbnQgX19uZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJdTMyIGZlYXR1cmVzOwogCWludCBlcnIgPSAwOwogCisJQVNTRVJUX1JUTkwoKTsKKwogCWZlYXR1cmVzID0gbmV0ZGV2X2dldF93YW50ZWRfZmVhdHVyZXMoZGV2KTsKIAogCWlmIChkZXYtPm5ldGRldl9vcHMtPm5kb19maXhfZmVhdHVyZXMpCkBAIC01MjU0LDI0ICs1MjY4LDYwIEBACiAJZmVhdHVyZXMgPSBuZXRkZXZfZml4X2ZlYXR1cmVzKGRldiwgZmVhdHVyZXMpOwogCiAJaWYgKGRldi0+ZmVhdHVyZXMgPT0gZmVhdHVyZXMpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKLQluZXRkZXZfaW5mbyhkZXYsICJGZWF0dXJlcyBjaGFuZ2VkOiAweCUwOHggLT4gMHglMDh4XG4iLAorCW5ldGRldl9kYmcoZGV2LCAiRmVhdHVyZXMgY2hhbmdlZDogMHglMDh4IC0+IDB4JTA4eFxuIiwKIAkJZGV2LT5mZWF0dXJlcywgZmVhdHVyZXMpOwogCiAJaWYgKGRldi0+bmV0ZGV2X29wcy0+bmRvX3NldF9mZWF0dXJlcykKIAkJZXJyID0gZGV2LT5uZXRkZXZfb3BzLT5uZG9fc2V0X2ZlYXR1cmVzKGRldiwgZmVhdHVyZXMpOwogCi0JaWYgKCFlcnIpCi0JCWRldi0+ZmVhdHVyZXMgPSBmZWF0dXJlczsKLQllbHNlIGlmIChlcnIgPCAwKQorCWlmICh1bmxpa2VseShlcnIgPCAwKSkgewogCQluZXRkZXZfZXJyKGRldiwKIAkJCSJzZXRfZmVhdHVyZXMoKSBmYWlsZWQgKCVkKTsgd2FudGVkIDB4JTA4eCwgbGVmdCAweCUwOHhcbiIsCiAJCQllcnIsIGZlYXR1cmVzLCBkZXYtPmZlYXR1cmVzKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICghZXJyKQorCQlkZXYtPmZlYXR1cmVzID0gZmVhdHVyZXM7CisKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKgluZXRkZXZfdXBkYXRlX2ZlYXR1cmVzIC0gcmVjYWxjdWxhdGUgZGV2aWNlIGZlYXR1cmVzCisgKglAZGV2OiB0aGUgZGV2aWNlIHRvIGNoZWNrCisgKgorICoJUmVjYWxjdWxhdGUgZGV2LT5mZWF0dXJlcyBzZXQgYW5kIHNlbmQgbm90aWZpY2F0aW9ucyBpZiBpdAorICoJaGFzIGNoYW5nZWQuIFNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgZHJpdmVyIG9yIGhhcmR3YXJlIGRlcGVuZGVudAorICoJY29uZGl0aW9ucyBtaWdodCBoYXZlIGNoYW5nZWQgdGhhdCBpbmZsdWVuY2UgdGhlIGZlYXR1cmVzLgorICovCit2b2lkIG5ldGRldl91cGRhdGVfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpZiAoX19uZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldikpCisJCW5ldGRldl9mZWF0dXJlc19jaGFuZ2UoZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0wobmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyk7CiAKIC8qKgorICoJbmV0ZGV2X2NoYW5nZV9mZWF0dXJlcyAtIHJlY2FsY3VsYXRlIGRldmljZSBmZWF0dXJlcworICoJQGRldjogdGhlIGRldmljZSB0byBjaGVjaworICoKKyAqCVJlY2FsY3VsYXRlIGRldi0+ZmVhdHVyZXMgc2V0IGFuZCBzZW5kIG5vdGlmaWNhdGlvbnMgZXZlbgorICoJaWYgdGhleSBoYXZlIG5vdCBjaGFuZ2VkLiBTaG91bGQgYmUgY2FsbGVkIGluc3RlYWQgb2YKKyAqCW5ldGRldl91cGRhdGVfZmVhdHVyZXMoKSBpZiBhbHNvIGRldi0+dmxhbl9mZWF0dXJlcyBtaWdodAorICoJaGF2ZSBjaGFuZ2VkIHRvIGFsbG93IHRoZSBjaGFuZ2VzIHRvIGJlIHByb3BhZ2F0ZWQgdG8gc3RhY2tlZAorICoJVkxBTiBkZXZpY2VzLgorICovCit2b2lkIG5ldGRldl9jaGFuZ2VfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlfX25ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTsKKwluZXRkZXZfZmVhdHVyZXNfY2hhbmdlKGRldik7Cit9CitFWFBPUlRfU1lNQk9MKG5ldGRldl9jaGFuZ2VfZmVhdHVyZXMpOworCisvKioKICAqCW5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlIC0JdHJhbnNmZXIgb3BlcnN0YXRlCiAgKglAcm9vdGRldjogdGhlIHJvb3Qgb3IgbG93ZXIgbGV2ZWwgZGV2aWNlIHRvIHRyYW5zZmVyIHN0YXRlIGZyb20KICAqCUBkZXY6IHRoZSBkZXZpY2UgdG8gdHJhbnNmZXIgb3BlcnN0YXRlIHRvCkBAIC01Mzg3LDYgKzU0MzcsMTAgQEAKIAogCWRldi0+aWZsaW5rID0gLTE7CiAKKwlyZXQgPSBkZXZfZ2V0X3ZhbGlkX25hbWUoZGV2LCBkZXYtPm5hbWUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKwogCS8qIEluaXQsIGlmIHRoaXMgZnVuY3Rpb24gaXMgYXZhaWxhYmxlICovCiAJaWYgKGRldi0+bmV0ZGV2X29wcy0+bmRvX2luaXQpIHsKIAkJcmV0ID0gZGV2LT5uZXRkZXZfb3BzLT5uZG9faW5pdChkZXYpOwpAQCAtNTM5NywxMCArNTQ1MSw2IEBACiAJCX0KIAl9CiAKLQlyZXQgPSBkZXZfZ2V0X3ZhbGlkX25hbWUoZGV2LCBkZXYtPm5hbWUsIDApOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyX3VuaW5pdDsKLQogCWRldi0+aWZpbmRleCA9IGRldl9uZXdfaW5kZXgobmV0KTsKIAlpZiAoZGV2LT5pZmxpbmsgPT0gLTEpCiAJCWRldi0+aWZsaW5rID0gZGV2LT5pZmluZGV4OwpAQCAtNTQxMiwxMCArNTQ2MiwxMiBAQAogCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TT0ZUX0ZFQVRVUkVTOwogCWRldi0+d2FudGVkX2ZlYXR1cmVzID0gZGV2LT5mZWF0dXJlcyAmIGRldi0+aHdfZmVhdHVyZXM7CiAKLQkvKiBBdm9pZCB3YXJuaW5nIGZyb20gbmV0ZGV2X2ZpeF9mZWF0dXJlcygpIGZvciBHU08gd2l0aG91dCBTRyAqLwotCWlmICghKGRldi0+d2FudGVkX2ZlYXR1cmVzICYgTkVUSUZfRl9TRykpIHsKLQkJZGV2LT53YW50ZWRfZmVhdHVyZXMgJj0gfk5FVElGX0ZfR1NPOwotCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0dTTzsKKwkvKiBUdXJuIG9uIG5vIGNhY2hlIGNvcHkgaWYgSFcgaXMgZG9pbmcgY2hlY2tzdW0gKi8KKwlkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfTk9DQUNIRV9DT1BZOworCWlmICgoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfQUxMX0NTVU0pICYmCisJICAgICEoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTk9fQ1NVTSkpIHsKKwkJZGV2LT53YW50ZWRfZmVhdHVyZXMgfD0gTkVUSUZfRl9OT0NBQ0hFX0NPUFk7CisJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9OT0NBQ0hFX0NPUFk7CiAJfQogCiAJLyogRW5hYmxlIEdSTyBhbmQgTkVUSUZfRl9ISUdIRE1BIGZvciB2bGFucyBieSBkZWZhdWx0LApAQCAtNTQzNCw3ICs1NDg2LDcgQEAKIAkJZ290byBlcnJfdW5pbml0OwogCWRldi0+cmVnX3N0YXRlID0gTkVUUkVHX1JFR0lTVEVSRUQ7CiAKLQluZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7CisJX19uZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7CiAKIAkvKgogCSAqCURlZmF1bHQgaW5pdGlhbCBzdGF0ZSBhdCByZWdpc3RyeSBpcyB0aGF0IHRoZQpAQCAtNTUzMSwxOSArNTU4Myw3IEBACiAJaW50IGVycjsKIAogCXJ0bmxfbG9jaygpOwotCi0JLyoKLQkgKiBJZiB0aGUgbmFtZSBpcyBhIGZvcm1hdCBzdHJpbmcgdGhlIGNhbGxlciB3YW50cyB1cyB0byBkbyBhCi0JICogbmFtZSBhbGxvY2F0aW9uLgotCSAqLwotCWlmIChzdHJjaHIoZGV2LT5uYW1lLCAnJScpKSB7Ci0JCWVyciA9IGRldl9hbGxvY19uYW1lKGRldiwgZGV2LT5uYW1lKTsKLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIG91dDsKLQl9Ci0KIAllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKLW91dDoKIAlydG5sX3VubG9jaygpOwogCXJldHVybiBlcnI7CiB9CkBAIC02MDI1LDcgKzYwNjUsNyBAQAogCQkvKiBXZSBnZXQgaGVyZSBpZiB3ZSBjYW4ndCB1c2UgdGhlIGN1cnJlbnQgZGV2aWNlIG5hbWUgKi8KIAkJaWYgKCFwYXQpCiAJCQlnb3RvIG91dDsKLQkJaWYgKGRldl9nZXRfdmFsaWRfbmFtZShkZXYsIHBhdCwgMSkpCisJCWlmIChkZXZfZ2V0X3ZhbGlkX25hbWUoZGV2LCBwYXQpIDwgMCkKIAkJCWdvdG8gb3V0OwogCX0KIApAQCAtNjE1NywyOSArNjE5NywyMCBAQAogICovCiB1MzIgbmV0ZGV2X2luY3JlbWVudF9mZWF0dXJlcyh1MzIgYWxsLCB1MzIgb25lLCB1MzIgbWFzaykKIHsKKwlpZiAobWFzayAmIE5FVElGX0ZfR0VOX0NTVU0pCisJCW1hc2sgfD0gTkVUSUZfRl9BTExfQ1NVTTsKKwltYXNrIHw9IE5FVElGX0ZfVkxBTl9DSEFMTEVOR0VEOworCisJYWxsIHw9IG9uZSAmIChORVRJRl9GX09ORV9GT1JfQUxMfE5FVElGX0ZfQUxMX0NTVU0pICYgbWFzazsKKwlhbGwgJj0gb25lIHwgfk5FVElGX0ZfQUxMX0ZPUl9BTEw7CisKIAkvKiBJZiBkZXZpY2UgbmVlZHMgY2hlY2tzdW1taW5nLCBkb3duZ3JhZGUgdG8gaXQuICovCi0JaWYgKGFsbCAmIE5FVElGX0ZfTk9fQ1NVTSAmJiAhKG9uZSAmIE5FVElGX0ZfTk9fQ1NVTSkpCi0JCWFsbCBePSBORVRJRl9GX05PX0NTVU0gfCAob25lICYgTkVUSUZfRl9BTExfQ1NVTSk7Ci0JZWxzZSBpZiAobWFzayAmIE5FVElGX0ZfQUxMX0NTVU0pIHsKLQkJLyogSWYgb25lIGRldmljZSBzdXBwb3J0cyB2NC92NiBjaGVja3N1bW1pbmcsIHNldCBmb3IgYWxsLiAqLwotCQlpZiAob25lICYgKE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNKSAmJgotCQkgICAgIShhbGwgJiBORVRJRl9GX0dFTl9DU1VNKSkgewotCQkJYWxsICY9IH5ORVRJRl9GX0FMTF9DU1VNOwotCQkJYWxsIHw9IG9uZSAmIChORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSk7Ci0JCX0KKwlpZiAoYWxsICYgKE5FVElGX0ZfQUxMX0NTVU0gJiB+TkVUSUZfRl9OT19DU1VNKSkKKwkJYWxsICY9IH5ORVRJRl9GX05PX0NTVU07CiAKLQkJLyogSWYgb25lIGRldmljZSBzdXBwb3J0cyBodyBjaGVja3N1bW1pbmcsIHNldCBmb3IgYWxsLiAqLwotCQlpZiAob25lICYgTkVUSUZfRl9HRU5fQ1NVTSAmJiAhKGFsbCAmIE5FVElGX0ZfR0VOX0NTVU0pKSB7Ci0JCQlhbGwgJj0gfk5FVElGX0ZfQUxMX0NTVU07Ci0JCQlhbGwgfD0gTkVUSUZfRl9IV19DU1VNOwotCQl9Ci0JfQotCi0Jb25lIHw9IE5FVElGX0ZfQUxMX0NTVU07Ci0KLQlvbmUgfD0gYWxsICYgTkVUSUZfRl9PTkVfRk9SX0FMTDsKLQlhbGwgJj0gb25lIHwgTkVUSUZfRl9MTFRYIHwgTkVUSUZfRl9HU08gfCBORVRJRl9GX1VGTzsKLQlhbGwgfD0gb25lICYgbWFzayAmIE5FVElGX0ZfT05FX0ZPUl9BTEw7CisJLyogSWYgb25lIGRldmljZSBzdXBwb3J0cyBodyBjaGVja3N1bW1pbmcsIHNldCBmb3IgYWxsLiAqLworCWlmIChhbGwgJiBORVRJRl9GX0dFTl9DU1VNKQorCQlhbGwgJj0gfihORVRJRl9GX0FMTF9DU1VNICYgfk5FVElGX0ZfR0VOX0NTVU0pOwogCiAJcmV0dXJuIGFsbDsKIH0KZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMgYi9uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jCmluZGV4IDdiMzlmM2UuLmUyZTY2OTMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMKKysrIGIvbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYwpAQCAtNjgsMTQgKzY4LDYgQEAKIAlyZXR1cm4gX19od19hZGRyX2FkZF9leChsaXN0LCBhZGRyLCBhZGRyX2xlbiwgYWRkcl90eXBlLCBmYWxzZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGhhX3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKLXsKLQlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOwotCi0JaGEgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IG5ldGRldl9od19hZGRyLCByY3VfaGVhZCk7Ci0Ja2ZyZWUoaGEpOwotfQotCiBzdGF0aWMgaW50IF9faHdfYWRkcl9kZWxfZXgoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QsCiAJCQkgICAgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLAogCQkJICAgIHVuc2lnbmVkIGNoYXIgYWRkcl90eXBlLCBib29sIGdsb2JhbCkKQEAgLTk0LDcgKzg2LDcgQEAKIAkJCWlmICgtLWhhLT5yZWZjb3VudCkKIAkJCQlyZXR1cm4gMDsKIAkJCWxpc3RfZGVsX3JjdSgmaGEtPmxpc3QpOwotCQkJY2FsbF9yY3UoJmhhLT5yY3VfaGVhZCwgaGFfcmN1X2ZyZWUpOworCQkJa2ZyZWVfcmN1KGhhLCByY3VfaGVhZCk7CiAJCQlsaXN0LT5jb3VudC0tOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTE5Nyw3ICsxODksNyBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhhLCB0bXAsICZsaXN0LT5saXN0LCBsaXN0KSB7CiAJCWxpc3RfZGVsX3JjdSgmaGEtPmxpc3QpOwotCQljYWxsX3JjdSgmaGEtPnJjdV9oZWFkLCBoYV9yY3VfZnJlZSk7CisJCWtmcmVlX3JjdShoYSwgcmN1X2hlYWQpOwogCX0KIAlsaXN0LT5jb3VudCA9IDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kcm9wX21vbml0b3IuYyBiL25ldC9jb3JlL2Ryb3BfbW9uaXRvci5jCmluZGV4IDcwNjUwMmYuLjdmMzZiMzggMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Ryb3BfbW9uaXRvci5jCisrKyBiL25ldC9jb3JlL2Ryb3BfbW9uaXRvci5jCkBAIC0yMDcsMTQgKzIwNyw2IEBACiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKLQotc3RhdGljIHZvaWQgZnJlZV9kbV9od19zdGF0KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKLXsKLQlzdHJ1Y3QgZG1faHdfc3RhdF9kZWx0YSAqbjsKLQluID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBkbV9od19zdGF0X2RlbHRhLCByY3UpOwotCWtmcmVlKG4pOwotfQotCiBzdGF0aWMgaW50IHNldF9hbGxfbW9uaXRvcl90cmFjZXMoaW50IHN0YXRlKQogewogCWludCByYyA9IDA7CkBAIC0yNDUsNyArMjM3LDcgQEAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5ld19zdGF0LCB0ZW1wLCAmaHdfc3RhdHNfbGlzdCwgbGlzdCkgewogCQkJaWYgKG5ld19zdGF0LT5kZXYgPT0gTlVMTCkgewogCQkJCWxpc3RfZGVsX3JjdSgmbmV3X3N0YXQtPmxpc3QpOwotCQkJCWNhbGxfcmN1KCZuZXdfc3RhdC0+cmN1LCBmcmVlX2RtX2h3X3N0YXQpOworCQkJCWtmcmVlX3JjdShuZXdfc3RhdCwgcmN1KTsKIAkJCX0KIAkJfQogCQlicmVhazsKQEAgLTMxNCw3ICszMDYsNyBAQAogCQkJCW5ld19zdGF0LT5kZXYgPSBOVUxMOwogCQkJCWlmICh0cmFjZV9zdGF0ZSA9PSBUUkFDRV9PRkYpIHsKIAkJCQkJbGlzdF9kZWxfcmN1KCZuZXdfc3RhdC0+bGlzdCk7Ci0JCQkJCWNhbGxfcmN1KCZuZXdfc3RhdC0+cmN1LCBmcmVlX2RtX2h3X3N0YXQpOworCQkJCQlrZnJlZV9yY3UobmV3X3N0YXQsIHJjdSk7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KZGlmZiAtLWdpdCBhL25ldC9jb3JlL2RzdC5jIGIvbmV0L2NvcmUvZHN0LmMKaW5kZXggOTExMDRkMy4uODFhNGZhMSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZHN0LmMKKysrIGIvbmV0L2NvcmUvZHN0LmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjaW5jbHVkZSA8bmV0L2RzdC5oPgogCkBAIC0zMyw5ICszNCw2IEBACiAgKiAzKSBUaGlzIGxpc3QgaXMgZ3VhcmRlZCBieSBhIG11dGV4LAogICogICAgc28gdGhhdCB0aGUgZ2NfdGFzayBhbmQgZHN0X2Rldl9ldmVudCgpIGNhbiBiZSBzeW5jaHJvbml6ZWQuCiAgKi8KLSNpZiBSVF9DQUNIRV9ERUJVRyA+PSAyCi1zdGF0aWMgYXRvbWljX3QJCQkgZHN0X3RvdGFsID0gQVRPTUlDX0lOSVQoMCk7Ci0jZW5kaWYKIAogLyoKICAqIFdlIHdhbnQgdG8ga2VlcCBsb2NrICYgbGlzdCBjbG9zZSB0b2dldGhlcgpAQCAtNjksMTAgKzY3LDYgQEAKIAl1bnNpZ25lZCBsb25nIGV4cGlyZXMgPSB+MEw7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0LCAqbmV4dCwgaGVhZDsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpsYXN0ID0gJmhlYWQ7Ci0jaWYgUlRfQ0FDSEVfREVCVUcgPj0gMgotCWt0aW1lX3QgdGltZV9zdGFydCA9IGt0aW1lX2dldCgpOwotCXN0cnVjdCB0aW1lc3BlYyBlbGFwc2VkOwotI2VuZGlmCiAKIAltdXRleF9sb2NrKCZkc3RfZ2NfbXV0ZXgpOwogCW5leHQgPSBkc3RfYnVzeV9saXN0OwpAQCAtMTQ2LDE1ICsxNDAsNiBAQAogCiAJc3Bpbl91bmxvY2tfYmgoJmRzdF9nYXJiYWdlLmxvY2spOwogCW11dGV4X3VubG9jaygmZHN0X2djX211dGV4KTsKLSNpZiBSVF9DQUNIRV9ERUJVRyA+PSAyCi0JZWxhcHNlZCA9IGt0aW1lX3RvX3RpbWVzcGVjKGt0aW1lX3N1YihrdGltZV9nZXQoKSwgdGltZV9zdGFydCkpOwotCXByaW50ayhLRVJOX0RFQlVHICJkc3RfdG90YWw6ICVkIGRlbGF5ZWQ6ICVkIHdvcmtfcGVyZjogJWQiCi0JCSIgZXhwaXJlczogJWx1IGVsYXBzZWQ6ICVsdSB1c1xuIiwKLQkJYXRvbWljX3JlYWQoJmRzdF90b3RhbCksIGRlbGF5ZWQsIHdvcmtfcGVyZm9ybWVkLAotCQlleHBpcmVzLAotCQllbGFwc2VkLnR2X3NlYyAqIFVTRUNfUEVSX1NFQyArCi0JCSAgZWxhcHNlZC50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQyk7Ci0jZW5kaWYKIH0KIAogaW50IGRzdF9kaXNjYXJkKHN0cnVjdCBza19idWZmICpza2IpCkBAIC0xNjYsNyArMTUxLDggQEAKIAogY29uc3QgdTMyIGRzdF9kZWZhdWx0X21ldHJpY3NbUlRBWF9NQVhdOwogCi12b2lkICpkc3RfYWxsb2Moc3RydWN0IGRzdF9vcHMgKm9wcywgaW50IGluaXRpYWxfcmVmKQordm9pZCAqZHN0X2FsbG9jKHN0cnVjdCBkc3Rfb3BzICpvcHMsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCWludCBpbml0aWFsX3JlZiwgaW50IGluaXRpYWxfb2Jzb2xldGUsIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CiAKQEAgLTE3NCwxOCArMTYwLDM2IEBACiAJCWlmIChvcHMtPmdjKG9wcykpCiAJCQlyZXR1cm4gTlVMTDsKIAl9Ci0JZHN0ID0ga21lbV9jYWNoZV96YWxsb2Mob3BzLT5rbWVtX2NhY2hlcCwgR0ZQX0FUT01JQyk7CisJZHN0ID0ga21lbV9jYWNoZV9hbGxvYyhvcHMtPmttZW1fY2FjaGVwLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWRzdCkKIAkJcmV0dXJuIE5VTEw7Ci0JYXRvbWljX3NldCgmZHN0LT5fX3JlZmNudCwgaW5pdGlhbF9yZWYpOworCWRzdC0+Y2hpbGQgPSBOVUxMOworCWRzdC0+ZGV2ID0gZGV2OworCWlmIChkZXYpCisJCWRldl9ob2xkKGRldik7CiAJZHN0LT5vcHMgPSBvcHM7Ci0JZHN0LT5sYXN0dXNlID0gamlmZmllczsKLQlkc3QtPnBhdGggPSBkc3Q7Ci0JZHN0LT5pbnB1dCA9IGRzdC0+b3V0cHV0ID0gZHN0X2Rpc2NhcmQ7CiAJZHN0X2luaXRfbWV0cmljcyhkc3QsIGRzdF9kZWZhdWx0X21ldHJpY3MsIHRydWUpOwotI2lmIFJUX0NBQ0hFX0RFQlVHID49IDIKLQlhdG9taWNfaW5jKCZkc3RfdG90YWwpOworCWRzdC0+ZXhwaXJlcyA9IDBVTDsKKwlkc3QtPnBhdGggPSBkc3Q7CisJZHN0LT5uZWlnaGJvdXIgPSBOVUxMOworCWRzdC0+aGggPSBOVUxMOworI2lmZGVmIENPTkZJR19YRlJNCisJZHN0LT54ZnJtID0gTlVMTDsKICNlbmRpZgorCWRzdC0+aW5wdXQgPSBkc3RfZGlzY2FyZDsKKwlkc3QtPm91dHB1dCA9IGRzdF9kaXNjYXJkOworCWRzdC0+ZXJyb3IgPSAwOworCWRzdC0+b2Jzb2xldGUgPSBpbml0aWFsX29ic29sZXRlOworCWRzdC0+aGVhZGVyX2xlbiA9IDA7CisJZHN0LT50cmFpbGVyX2xlbiA9IDA7CisjaWZkZWYgQ09ORklHX0lQX1JPVVRFX0NMQVNTSUQKKwlkc3QtPnRjbGFzc2lkID0gMDsKKyNlbmRpZgorCWF0b21pY19zZXQoJmRzdC0+X19yZWZjbnQsIGluaXRpYWxfcmVmKTsKKwlkc3QtPl9fdXNlID0gMDsKKwlkc3QtPmxhc3R1c2UgPSBqaWZmaWVzOworCWRzdC0+ZmxhZ3MgPSBmbGFnczsKKwlkc3QtPm5leHQgPSBOVUxMOwogCWRzdF9lbnRyaWVzX2FkZChvcHMsIDEpOwogCXJldHVybiBkc3Q7CiB9CkBAIC0yNDUsOSArMjQ5LDYgQEAKIAkJZHN0LT5vcHMtPmRlc3Ryb3koZHN0KTsKIAlpZiAoZHN0LT5kZXYpCiAJCWRldl9wdXQoZHN0LT5kZXYpOwotI2lmIFJUX0NBQ0hFX0RFQlVHID49IDIKLQlhdG9taWNfZGVjKCZkc3RfdG90YWwpOwotI2VuZGlmCiAJa21lbV9jYWNoZV9mcmVlKGRzdC0+b3BzLT5rbWVtX2NhY2hlcCwgZHN0KTsKIAogCWRzdCA9IGNoaWxkOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZXRodG9vbC5jIGIvbmV0L2NvcmUvZXRodG9vbC5jCmluZGV4IDc0ZWFkOWUuLjg0ZTczMDQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2V0aHRvb2wuYworKysgYi9uZXQvY29yZS9ldGh0b29sLmMKQEAgLTIxLDYgKzIxLDggQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAvKgogICogU29tZSB1c2VmdWwgZXRodG9vbF9vcHMgbWV0aG9kcyB0aGF0J3JlIGRldmljZSBpbmRlcGVuZGVudC4KQEAgLTMxNyw3ICszMTksNyBAQAogCiAJZGV2LT53YW50ZWRfZmVhdHVyZXMgJj0gfmZlYXR1cmVzWzBdLnZhbGlkOwogCWRldi0+d2FudGVkX2ZlYXR1cmVzIHw9IGZlYXR1cmVzWzBdLnZhbGlkICYgZmVhdHVyZXNbMF0ucmVxdWVzdGVkOwotCW5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTsKKwlfX25ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTsKIAogCWlmICgoZGV2LT53YW50ZWRfZmVhdHVyZXMgXiBkZXYtPmZlYXR1cmVzKSAmIGZlYXR1cmVzWzBdLnZhbGlkKQogCQlyZXQgfD0gRVRIVE9PTF9GX1dJU0g7CkBAIC0zMzAsNyArMzMyLDcgQEAKIAkvKiBORVRJRl9GX0lQX0NTVU0gKi8gICAgICAgICAidHgtY2hlY2tzdW0taXB2NCIsCiAJLyogTkVUSUZfRl9OT19DU1VNICovICAgICAgICAgInR4LWNoZWNrc3VtLXVubmVlZGVkIiwKIAkvKiBORVRJRl9GX0hXX0NTVU0gKi8gICAgICAgICAidHgtY2hlY2tzdW0taXAtZ2VuZXJpYyIsCi0JLyogTkVUSUZfRl9JUFY2X0NTVU0gKi8gICAgICAgInR4X2NoZWNrc3VtLWlwdjYiLAorCS8qIE5FVElGX0ZfSVBWNl9DU1VNICovICAgICAgICJ0eC1jaGVja3N1bS1pcHY2IiwKIAkvKiBORVRJRl9GX0hJR0hETUEgKi8gICAgICAgICAiaGlnaGRtYSIsCiAJLyogTkVUSUZfRl9GUkFHTElTVCAqLyAgICAgICAgInR4LXNjYXR0ZXItZ2F0aGVyLWZyYWdsaXN0IiwKIAkvKiBORVRJRl9GX0hXX1ZMQU5fVFggKi8gICAgICAidHgtdmxhbi1ody1pbnNlcnQiLApAQCAtMzU5LDggKzM2MSw4IEBACiAJLyogTkVUSUZfRl9OVFVQTEUgKi8gICAgICAgICAgInJ4LW50dXBsZS1maWx0ZXIiLAogCS8qIE5FVElGX0ZfUlhIQVNIICovICAgICAgICAgICJyeC1oYXNoaW5nIiwKIAkvKiBORVRJRl9GX1JYQ1NVTSAqLyAgICAgICAgICAicngtY2hlY2tzdW0iLAotCSIiLAotCSIiLAorCS8qIE5FVElGX0ZfTk9DQUNIRV9DT1BZICovICAgICJ0eC1ub2NhY2hlLWNvcHkiLAorCS8qIE5FVElGX0ZfTE9PUEJBQ0sgKi8gICAgICAgICJsb29wYmFjayIsCiB9OwogCiBzdGF0aWMgaW50IF9fZXRodG9vbF9nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3NldCkKQEAgLTQ5OSw3ICs1MDEsNyBAQAogCQllbHNlCiAJCQlkZXYtPndhbnRlZF9mZWF0dXJlcyAmPSB+bWFzazsKIAotCQluZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7CisJCV9fbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTU0NCwxNCArNTQ2LDE0IEBACiAJfQogCiAJLyogYWxsb3cgY2hhbmdpbmcgb25seSBiaXRzIHNldCBpbiBod19mZWF0dXJlcyAqLwotCWNoYW5nZWQgPSAoZGF0YSBeIGRldi0+d2FudGVkX2ZlYXR1cmVzKSAmIGZsYWdzX2R1cF9mZWF0dXJlczsKKwljaGFuZ2VkID0gKGRhdGEgXiBkZXYtPmZlYXR1cmVzKSAmIGZsYWdzX2R1cF9mZWF0dXJlczsKIAlpZiAoY2hhbmdlZCAmIH5kZXYtPmh3X2ZlYXR1cmVzKQogCQlyZXR1cm4gKGNoYW5nZWQgJiBkZXYtPmh3X2ZlYXR1cmVzKSA/IC1FSU5WQUwgOiAtRU9QTk9UU1VQUDsKIAogCWRldi0+d2FudGVkX2ZlYXR1cmVzID0KLQkJKGRldi0+d2FudGVkX2ZlYXR1cmVzICYgfmNoYW5nZWQpIHwgZGF0YTsKKwkJKGRldi0+d2FudGVkX2ZlYXR1cmVzICYgfmNoYW5nZWQpIHwgKGRhdGEgJiBkZXYtPmh3X2ZlYXR1cmVzKTsKIAotCW5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTsKKwlfX25ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTsKIAogCXJldHVybiAwOwogfQpAQCAtOTA4LDYgKzkxMCw5IEBACiAJc3RydWN0IGV0aHRvb2xfcnhfbnR1cGxlX2Zsb3dfc3BlY19jb250YWluZXIgKmZzYyA9IE5VTEw7CiAJaW50IHJldDsKIAorCWlmICghb3BzLT5zZXRfcnhfbnR1cGxlKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKIAlpZiAoIShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9OVFVQTEUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTQ0MSw2ICsxNDQ2LDM1IEBACiAJcmV0dXJuIGRldi0+ZXRodG9vbF9vcHMtPnNldF9yaW5ncGFyYW0oZGV2LCAmcmluZ3BhcmFtKTsKIH0KIAorc3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQgZXRodG9vbF9nZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJCSAgIHZvaWQgX191c2VyICp1c2VyYWRkcikKK3sKKwlzdHJ1Y3QgZXRodG9vbF9jaGFubmVscyBjaGFubmVscyA9IHsgLmNtZCA9IEVUSFRPT0xfR0NIQU5ORUxTIH07CisKKwlpZiAoIWRldi0+ZXRodG9vbF9vcHMtPmdldF9jaGFubmVscykKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJZGV2LT5ldGh0b29sX29wcy0+Z2V0X2NoYW5uZWxzKGRldiwgJmNoYW5uZWxzKTsKKworCWlmIChjb3B5X3RvX3VzZXIodXNlcmFkZHIsICZjaGFubmVscywgc2l6ZW9mKGNoYW5uZWxzKSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCitzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludCBldGh0b29sX3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkJICAgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQoreworCXN0cnVjdCBldGh0b29sX2NoYW5uZWxzIGNoYW5uZWxzOworCisJaWYgKCFkZXYtPmV0aHRvb2xfb3BzLT5zZXRfY2hhbm5lbHMpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmY2hhbm5lbHMsIHVzZXJhZGRyLCBzaXplb2YoY2hhbm5lbHMpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gZGV2LT5ldGh0b29sX29wcy0+c2V0X2NoYW5uZWxzKGRldiwgJmNoYW5uZWxzKTsKK30KKwogc3RhdGljIGludCBldGh0b29sX2dldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcikKIHsKIAlzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtIHBhdXNlcGFyYW0gPSB7IEVUSFRPT0xfR1BBVVNFUEFSQU0gfTsKQEAgLTE2MTgsMTQgKzE2NTIsNjAgQEAKIHN0YXRpYyBpbnQgZXRodG9vbF9waHlzX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcikKIHsKIAlzdHJ1Y3QgZXRodG9vbF92YWx1ZSBpZDsKKwlzdGF0aWMgYm9vbCBidXN5OworCWludCByYzsKIAotCWlmICghZGV2LT5ldGh0b29sX29wcy0+cGh5c19pZCkKKwlpZiAoIWRldi0+ZXRodG9vbF9vcHMtPnNldF9waHlzX2lkKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKKwlpZiAoYnVzeSkKKwkJcmV0dXJuIC1FQlVTWTsKKwogCWlmIChjb3B5X2Zyb21fdXNlcigmaWQsIHVzZXJhZGRyLCBzaXplb2YoaWQpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXR1cm4gZGV2LT5ldGh0b29sX29wcy0+cGh5c19pZChkZXYsIGlkLmRhdGEpOworCXJjID0gZGV2LT5ldGh0b29sX29wcy0+c2V0X3BoeXNfaWQoZGV2LCBFVEhUT09MX0lEX0FDVElWRSk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJLyogRHJvcCB0aGUgUlROTCBsb2NrIHdoaWxlIHdhaXRpbmcsIGJ1dCBwcmV2ZW50IHJlZW50cnkgb3IKKwkgKiByZW1vdmFsIG9mIHRoZSBkZXZpY2UuCisJICovCisJYnVzeSA9IHRydWU7CisJZGV2X2hvbGQoZGV2KTsKKwlydG5sX3VubG9jaygpOworCisJaWYgKHJjID09IDApIHsKKwkJLyogRHJpdmVyIHdpbGwgaGFuZGxlIHRoaXMgaXRzZWxmICovCisJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSgKKwkJCWlkLmRhdGEgPyAoaWQuZGF0YSAqIEhaKSA6IE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKKwl9IGVsc2UgeworCQkvKiBEcml2ZXIgZXhwZWN0cyB0byBiZSBjYWxsZWQgYXQgdHdpY2UgdGhlIGZyZXF1ZW5jeSBpbiByYyAqLworCQlpbnQgbiA9IHJjICogMiwgaSwgaW50ZXJ2YWwgPSBIWiAvIG47CisKKwkJLyogQ291bnQgZG93biBzZWNvbmRzICovCisJCWRvIHsKKwkJCS8qIENvdW50IGRvd24gaXRlcmF0aW9ucyBwZXIgc2Vjb25kICovCisJCQlpID0gbjsKKwkJCWRvIHsKKwkJCQlydG5sX2xvY2soKTsKKwkJCQlyYyA9IGRldi0+ZXRodG9vbF9vcHMtPnNldF9waHlzX2lkKGRldiwKKwkJCQkgICAgKGkgJiAxKSA/IEVUSFRPT0xfSURfT0ZGIDogRVRIVE9PTF9JRF9PTik7CisJCQkJcnRubF91bmxvY2soKTsKKwkJCQlpZiAocmMpCisJCQkJCWJyZWFrOworCQkJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShpbnRlcnZhbCk7CisJCQl9IHdoaWxlICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgJiYgLS1pICE9IDApOworCQl9IHdoaWxlICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgJiYKKwkJCSAoaWQuZGF0YSA9PSAwIHx8IC0taWQuZGF0YSAhPSAwKSk7CisJfQorCisJcnRubF9sb2NrKCk7CisJZGV2X3B1dChkZXYpOworCWJ1c3kgPSBmYWxzZTsKKworCSh2b2lkKWRldi0+ZXRodG9vbF9vcHMtPnNldF9waHlzX2lkKGRldiwgRVRIVE9PTF9JRF9JTkFDVElWRSk7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IGV0aHRvb2xfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcikKQEAgLTE3NDMsNiArMTgyMyw4NyBAQAogCXJldHVybiBkZXYtPmV0aHRvb2xfb3BzLT5mbGFzaF9kZXZpY2UoZGV2LCAmZWZsKTsKIH0KIAorc3RhdGljIGludCBldGh0b29sX3NldF9kdW1wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQl2b2lkIF9fdXNlciAqdXNlcmFkZHIpCit7CisJc3RydWN0IGV0aHRvb2xfZHVtcCBkdW1wOworCisJaWYgKCFkZXYtPmV0aHRvb2xfb3BzLT5zZXRfZHVtcCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZkdW1wLCB1c2VyYWRkciwgc2l6ZW9mKGR1bXApKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gZGV2LT5ldGh0b29sX29wcy0+c2V0X2R1bXAoZGV2LCAmZHVtcCk7Cit9CisKK3N0YXRpYyBpbnQgZXRodG9vbF9nZXRfZHVtcF9mbGFnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQoreworCWludCByZXQ7CisJc3RydWN0IGV0aHRvb2xfZHVtcCBkdW1wOworCWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzID0gZGV2LT5ldGh0b29sX29wczsKKworCWlmICghZGV2LT5ldGh0b29sX29wcy0+Z2V0X2R1bXBfZmxhZykKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZkdW1wLCB1c2VyYWRkciwgc2l6ZW9mKGR1bXApKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXQgPSBvcHMtPmdldF9kdW1wX2ZsYWcoZGV2LCAmZHVtcCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChjb3B5X3RvX3VzZXIodXNlcmFkZHIsICZkdW1wLCBzaXplb2YoZHVtcCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBldGh0b29sX2dldF9kdW1wX2RhdGEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQl2b2lkIF9fdXNlciAqdXNlcmFkZHIpCit7CisJaW50IHJldDsKKwlfX3UzMiBsZW47CisJc3RydWN0IGV0aHRvb2xfZHVtcCBkdW1wLCB0bXA7CisJY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBkZXYtPmV0aHRvb2xfb3BzOworCXZvaWQgKmRhdGEgPSBOVUxMOworCisJaWYgKCFkZXYtPmV0aHRvb2xfb3BzLT5nZXRfZHVtcF9kYXRhIHx8CisJCSFkZXYtPmV0aHRvb2xfb3BzLT5nZXRfZHVtcF9mbGFnKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmR1bXAsIHVzZXJhZGRyLCBzaXplb2YoZHVtcCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCW1lbXNldCgmdG1wLCAwLCBzaXplb2YodG1wKSk7CisJdG1wLmNtZCA9IEVUSFRPT0xfR0VUX0RVTVBfRkxBRzsKKwlyZXQgPSBvcHMtPmdldF9kdW1wX2ZsYWcoZGV2LCAmdG1wKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbGVuID0gKHRtcC5sZW4gPiBkdW1wLmxlbikgPyBkdW1wLmxlbiA6IHRtcC5sZW47CisJaWYgKCFsZW4pCisJCXJldHVybiAtRUZBVUxUOworCisJZGF0YSA9IHZ6YWxsb2ModG1wLmxlbik7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXQgPSBvcHMtPmdldF9kdW1wX2RhdGEoZGV2LCAmZHVtcCwgZGF0YSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCAmZHVtcCwgc2l6ZW9mKGR1bXApKSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CisJdXNlcmFkZHIgKz0gb2Zmc2V0b2Yoc3RydWN0IGV0aHRvb2xfZHVtcCwgZGF0YSk7CisJaWYgKGNvcHlfdG9fdXNlcih1c2VyYWRkciwgZGF0YSwgbGVuKSkKKwkJcmV0ID0gLUVGQVVMVDsKK291dDoKKwl2ZnJlZShkYXRhKTsKKwlyZXR1cm4gcmV0OworfQorCiAvKiBUaGUgbWFpbiBlbnRyeSBwb2ludCBpbiB0aGlzIGZpbGUuICBDYWxsZWQgZnJvbSBuZXQvY29yZS9kZXYuYyAqLwogCiBpbnQgZGV2X2V0aHRvb2woc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmcikKQEAgLTE5NTMsNiArMjExNCwyMSBAQAogCWNhc2UgRVRIVE9PTF9TR1JPOgogCQlyYyA9IGV0aHRvb2xfc2V0X29uZV9mZWF0dXJlKGRldiwgdXNlcmFkZHIsIGV0aGNtZCk7CiAJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9HQ0hBTk5FTFM6CisJCXJjID0gZXRodG9vbF9nZXRfY2hhbm5lbHMoZGV2LCB1c2VyYWRkcik7CisJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9TQ0hBTk5FTFM6CisJCXJjID0gZXRodG9vbF9zZXRfY2hhbm5lbHMoZGV2LCB1c2VyYWRkcik7CisJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9TRVRfRFVNUDoKKwkJcmMgPSBldGh0b29sX3NldF9kdW1wKGRldiwgdXNlcmFkZHIpOworCQlicmVhazsKKwljYXNlIEVUSFRPT0xfR0VUX0RVTVBfRkxBRzoKKwkJcmMgPSBldGh0b29sX2dldF9kdW1wX2ZsYWcoZGV2LCB1c2VyYWRkcik7CisJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9HRVRfRFVNUF9EQVRBOgorCQlyYyA9IGV0aHRvb2xfZ2V0X2R1bXBfZGF0YShkZXYsIHVzZXJhZGRyKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmMgPSAtRU9QTk9UU1VQUDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWJfcnVsZXMuYyBiL25ldC9jb3JlL2ZpYl9ydWxlcy5jCmluZGV4IDgyNDhlYmIuLjM5MTE1ODYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpYl9ydWxlcy5jCisrKyBiL25ldC9jb3JlL2ZpYl9ydWxlcy5jCkBAIC01OTAsNyArNTkwLDggQEAKIAlpbnQgaWR4ID0gMDsKIAlzdHJ1Y3QgZmliX3J1bGUgKnJ1bGU7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJ1bGUsICZvcHMtPnJ1bGVzX2xpc3QsIGxpc3QpIHsKKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocnVsZSwgJm9wcy0+cnVsZXNfbGlzdCwgbGlzdCkgewogCQlpZiAoaWR4IDwgY2ItPmFyZ3NbMV0pCiAJCQlnb3RvIHNraXA7CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggYWZiOGFmYi4uMGViOGM0NCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmMKKysrIGIvbmV0L2NvcmUvZmlsdGVyLmMKQEAgLTM5LDY1ICszOSw2IEBACiAjaW5jbHVkZSA8bGludXgvZmlsdGVyLmg+CiAjaW5jbHVkZSA8bGludXgvcmVjaXByb2NhbF9kaXYuaD4KIAotZW51bSB7Ci0JQlBGX1NfUkVUX0sgPSAxLAotCUJQRl9TX1JFVF9BLAotCUJQRl9TX0FMVV9BRERfSywKLQlCUEZfU19BTFVfQUREX1gsCi0JQlBGX1NfQUxVX1NVQl9LLAotCUJQRl9TX0FMVV9TVUJfWCwKLQlCUEZfU19BTFVfTVVMX0ssCi0JQlBGX1NfQUxVX01VTF9YLAotCUJQRl9TX0FMVV9ESVZfWCwKLQlCUEZfU19BTFVfQU5EX0ssCi0JQlBGX1NfQUxVX0FORF9YLAotCUJQRl9TX0FMVV9PUl9LLAotCUJQRl9TX0FMVV9PUl9YLAotCUJQRl9TX0FMVV9MU0hfSywKLQlCUEZfU19BTFVfTFNIX1gsCi0JQlBGX1NfQUxVX1JTSF9LLAotCUJQRl9TX0FMVV9SU0hfWCwKLQlCUEZfU19BTFVfTkVHLAotCUJQRl9TX0xEX1dfQUJTLAotCUJQRl9TX0xEX0hfQUJTLAotCUJQRl9TX0xEX0JfQUJTLAotCUJQRl9TX0xEX1dfTEVOLAotCUJQRl9TX0xEX1dfSU5ELAotCUJQRl9TX0xEX0hfSU5ELAotCUJQRl9TX0xEX0JfSU5ELAotCUJQRl9TX0xEX0lNTSwKLQlCUEZfU19MRFhfV19MRU4sCi0JQlBGX1NfTERYX0JfTVNILAotCUJQRl9TX0xEWF9JTU0sCi0JQlBGX1NfTUlTQ19UQVgsCi0JQlBGX1NfTUlTQ19UWEEsCi0JQlBGX1NfQUxVX0RJVl9LLAotCUJQRl9TX0xEX01FTSwKLQlCUEZfU19MRFhfTUVNLAotCUJQRl9TX1NULAotCUJQRl9TX1NUWCwKLQlCUEZfU19KTVBfSkEsCi0JQlBGX1NfSk1QX0pFUV9LLAotCUJQRl9TX0pNUF9KRVFfWCwKLQlCUEZfU19KTVBfSkdFX0ssCi0JQlBGX1NfSk1QX0pHRV9YLAotCUJQRl9TX0pNUF9KR1RfSywKLQlCUEZfU19KTVBfSkdUX1gsCi0JQlBGX1NfSk1QX0pTRVRfSywKLQlCUEZfU19KTVBfSlNFVF9YLAotCS8qIEFuY2lsbGFyeSBkYXRhICovCi0JQlBGX1NfQU5DX1BST1RPQ09MLAotCUJQRl9TX0FOQ19QS1RUWVBFLAotCUJQRl9TX0FOQ19JRklOREVYLAotCUJQRl9TX0FOQ19OTEFUVFIsCi0JQlBGX1NfQU5DX05MQVRUUl9ORVNULAotCUJQRl9TX0FOQ19NQVJLLAotCUJQRl9TX0FOQ19RVUVVRSwKLQlCUEZfU19BTkNfSEFUWVBFLAotCUJQRl9TX0FOQ19SWEhBU0gsCi0JQlBGX1NfQU5DX0NQVSwKLX07Ci0KIC8qIE5vIGh1cnJ5IGluIHRoaXMgYnJhbmNoICovCiBzdGF0aWMgdm9pZCAqX19sb2FkX3BvaW50ZXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGssIHVuc2lnbmVkIGludCBzaXplKQogewpAQCAtMTQ1LDcgKzg2LDcgQEAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJZmlsdGVyID0gcmN1X2RlcmVmZXJlbmNlKHNrLT5za19maWx0ZXIpOwogCWlmIChmaWx0ZXIpIHsKLQkJdW5zaWduZWQgaW50IHBrdF9sZW4gPSBza19ydW5fZmlsdGVyKHNrYiwgZmlsdGVyLT5pbnNucyk7CisJCXVuc2lnbmVkIGludCBwa3RfbGVuID0gU0tfUlVOX0ZJTFRFUihmaWx0ZXIsIHNrYik7CiAKIAkJZXJyID0gcGt0X2xlbiA/IHBza2JfdHJpbShza2IsIHBrdF9sZW4pIDogLUVQRVJNOwogCX0KQEAgLTYzOCw2ICs1NzksNyBAQAogewogCXN0cnVjdCBza19maWx0ZXIgKmZwID0gY29udGFpbmVyX29mKHJjdSwgc3RydWN0IHNrX2ZpbHRlciwgcmN1KTsKIAorCWJwZl9qaXRfZnJlZShmcCk7CiAJa2ZyZWUoZnApOwogfQogRVhQT1JUX1NZTUJPTChza19maWx0ZXJfcmVsZWFzZV9yY3UpOwpAQCAtNjcyLDYgKzYxNCw3IEBACiAKIAlhdG9taWNfc2V0KCZmcC0+cmVmY250LCAxKTsKIAlmcC0+bGVuID0gZnByb2ctPmxlbjsKKwlmcC0+YnBmX2Z1bmMgPSBza19ydW5fZmlsdGVyOwogCiAJZXJyID0gc2tfY2hrX2ZpbHRlcihmcC0+aW5zbnMsIGZwLT5sZW4pOwogCWlmIChlcnIpIHsKQEAgLTY3OSw2ICs2MjIsOCBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAorCWJwZl9qaXRfY29tcGlsZShmcCk7CisKIAlvbGRfZnAgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHNrLT5za19maWx0ZXIsCiAJCQkJCSAgIHNvY2tfb3duZWRfYnlfdXNlcihzaykpOwogCXJjdV9hc3NpZ25fcG9pbnRlcihzay0+c2tfZmlsdGVyLCBmcCk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9nZW5fZXN0aW1hdG9yLmMgYi9uZXQvY29yZS9nZW5fZXN0aW1hdG9yLmMKaW5kZXggN2MyMzczMy4uNDNiMDNkZCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZ2VuX2VzdGltYXRvci5jCisrKyBiL25ldC9jb3JlL2dlbl9lc3RpbWF0b3IuYwpAQCAtMjQ5LDEzICsyNDksNiBAQAogfQogRVhQT1JUX1NZTUJPTChnZW5fbmV3X2VzdGltYXRvcik7CiAKLXN0YXRpYyB2b2lkIF9fZ2VuX2tpbGxfZXN0aW1hdG9yKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKLXsKLQlzdHJ1Y3QgZ2VuX2VzdGltYXRvciAqZSA9IGNvbnRhaW5lcl9vZihoZWFkLAotCQkJCQlzdHJ1Y3QgZ2VuX2VzdGltYXRvciwgZV9yY3UpOwotCWtmcmVlKGUpOwotfQotCiAvKioKICAqIGdlbl9raWxsX2VzdGltYXRvciAtIHJlbW92ZSBhIHJhdGUgZXN0aW1hdG9yCiAgKiBAYnN0YXRzOiBiYXNpYyBzdGF0aXN0aWNzCkBAIC0yNzksNyArMjcyLDcgQEAKIAkJd3JpdGVfdW5sb2NrKCZlc3RfbG9jayk7CiAKIAkJbGlzdF9kZWxfcmN1KCZlLT5saXN0KTsKLQkJY2FsbF9yY3UoJmUtPmVfcmN1LCBfX2dlbl9raWxsX2VzdGltYXRvcik7CisJCWtmcmVlX3JjdShlLCBlX3JjdSk7CiAJfQogCXNwaW5fdW5sb2NrX2JoKCZlc3RfdHJlZV9sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldC1zeXNmcy5jIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKaW5kZXggNWNlYjI1Ny4uMTFiOThiYyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKKysrIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKQEAgLTI4LDYgKzI4LDcgQEAKIHN0YXRpYyBjb25zdCBjaGFyIGZtdF9oZXhbXSA9ICIlI3hcbiI7CiBzdGF0aWMgY29uc3QgY2hhciBmbXRfbG9uZ19oZXhbXSA9ICIlI2x4XG4iOwogc3RhdGljIGNvbnN0IGNoYXIgZm10X2RlY1tdID0gIiVkXG4iOworc3RhdGljIGNvbnN0IGNoYXIgZm10X3VkZWNbXSA9ICIldVxuIjsKIHN0YXRpYyBjb25zdCBjaGFyIGZtdF91bG9uZ1tdID0gIiVsdVxuIjsKIHN0YXRpYyBjb25zdCBjaGFyIGZtdF91NjRbXSA9ICIlbGx1XG4iOwogCkBAIC0xNDUsMTMgKzE0NiwxMCBAQAogCWlmICghcnRubF90cnlsb2NrKCkpCiAJCXJldHVybiByZXN0YXJ0X3N5c2NhbGwoKTsKIAotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgJiYKLQkgICAgbmV0ZGV2LT5ldGh0b29sX29wcyAmJgotCSAgICBuZXRkZXYtPmV0aHRvb2xfb3BzLT5nZXRfc2V0dGluZ3MpIHsKLQkJc3RydWN0IGV0aHRvb2xfY21kIGNtZCA9IHsgRVRIVE9PTF9HU0VUIH07Ci0KLQkJaWYgKCFuZXRkZXYtPmV0aHRvb2xfb3BzLT5nZXRfc2V0dGluZ3MobmV0ZGV2LCAmY21kKSkKLQkJCXJldCA9IHNwcmludGYoYnVmLCBmbXRfZGVjLCBldGh0b29sX2NtZF9zcGVlZCgmY21kKSk7CisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQlzdHJ1Y3QgZXRodG9vbF9jbWQgY21kOworCQlpZiAoIWRldl9ldGh0b29sX2dldF9zZXR0aW5ncyhuZXRkZXYsICZjbWQpKQorCQkJcmV0ID0gc3ByaW50ZihidWYsIGZtdF91ZGVjLCBldGh0b29sX2NtZF9zcGVlZCgmY21kKSk7CiAJfQogCXJ0bmxfdW5sb2NrKCk7CiAJcmV0dXJuIHJldDsKQEAgLTE2NiwxMyArMTY0LDExIEBACiAJaWYgKCFydG5sX3RyeWxvY2soKSkKIAkJcmV0dXJuIHJlc3RhcnRfc3lzY2FsbCgpOwogCi0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSAmJgotCSAgICBuZXRkZXYtPmV0aHRvb2xfb3BzICYmCi0JICAgIG5ldGRldi0+ZXRodG9vbF9vcHMtPmdldF9zZXR0aW5ncykgewotCQlzdHJ1Y3QgZXRodG9vbF9jbWQgY21kID0geyBFVEhUT09MX0dTRVQgfTsKLQotCQlpZiAoIW5ldGRldi0+ZXRodG9vbF9vcHMtPmdldF9zZXR0aW5ncyhuZXRkZXYsICZjbWQpKQotCQkJcmV0ID0gc3ByaW50ZihidWYsICIlc1xuIiwgY21kLmR1cGxleCA/ICJmdWxsIiA6ICJoYWxmIik7CisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQlzdHJ1Y3QgZXRodG9vbF9jbWQgY21kOworCQlpZiAoIWRldl9ldGh0b29sX2dldF9zZXR0aW5ncyhuZXRkZXYsICZjbWQpKQorCQkJcmV0ID0gc3ByaW50ZihidWYsICIlc1xuIiwKKwkJCQkgICAgICBjbWQuZHVwbGV4ID8gImZ1bGwiIDogImhhbGYiKTsKIAl9CiAJcnRubF91bmxvY2soKTsKIAlyZXR1cm4gcmV0OwpAQCAtNTY1LDEzICs1NjEsNiBAQAogCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyB2b2lkIHJwc19tYXBfcmVsZWFzZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkKLXsKLQlzdHJ1Y3QgcnBzX21hcCAqbWFwID0gY29udGFpbmVyX29mKHJjdSwgc3RydWN0IHJwc19tYXAsIHJjdSk7Ci0KLQlrZnJlZShtYXApOwotfQotCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9ycHNfbWFwKHN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKnF1ZXVlLAogCQkgICAgICBzdHJ1Y3QgcnhfcXVldWVfYXR0cmlidXRlICphdHRyaWJ1dGUsCiAJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKQEAgLTYxOSw3ICs2MDgsNyBAQAogCXNwaW5fdW5sb2NrKCZycHNfbWFwX2xvY2spOwogCiAJaWYgKG9sZF9tYXApCi0JCWNhbGxfcmN1KCZvbGRfbWFwLT5yY3UsIHJwc19tYXBfcmVsZWFzZSk7CisJCWtmcmVlX3JjdShvbGRfbWFwLCByY3UpOwogCiAJZnJlZV9jcHVtYXNrX3ZhcihtYXNrKTsKIAlyZXR1cm4gbGVuOwpAQCAtNzI4LDcgKzcxNyw3IEBACiAJbWFwID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhxdWV1ZS0+cnBzX21hcCk7CiAJaWYgKG1hcCkgewogCQlSQ1VfSU5JVF9QT0lOVEVSKHF1ZXVlLT5ycHNfbWFwLCBOVUxMKTsKLQkJY2FsbF9yY3UoJm1hcC0+cmN1LCBycHNfbWFwX3JlbGVhc2UpOworCQlrZnJlZV9yY3UobWFwLCByY3UpOwogCX0KIAogCWZsb3dfdGFibGUgPSByY3VfZGVyZWZlcmVuY2VfcmF3KHF1ZXVlLT5ycHNfZmxvd190YWJsZSk7CkBAIC04OTgsMjEgKzg4Nyw2IEBACiAJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIHZvaWQgeHBzX21hcF9yZWxlYXNlKHN0cnVjdCByY3VfaGVhZCAqcmN1KQotewotCXN0cnVjdCB4cHNfbWFwICptYXAgPSBjb250YWluZXJfb2YocmN1LCBzdHJ1Y3QgeHBzX21hcCwgcmN1KTsKLQotCWtmcmVlKG1hcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHhwc19kZXZfbWFwc19yZWxlYXNlKHN0cnVjdCByY3VfaGVhZCAqcmN1KQotewotCXN0cnVjdCB4cHNfZGV2X21hcHMgKmRldl9tYXBzID0KLQkgICAgY29udGFpbmVyX29mKHJjdSwgc3RydWN0IHhwc19kZXZfbWFwcywgcmN1KTsKLQotCWtmcmVlKGRldl9tYXBzKTsKLX0KLQogc3RhdGljIERFRklORV9NVVRFWCh4cHNfbWFwX211dGV4KTsKICNkZWZpbmUgeG1hcF9kZXJlZmVyZW5jZShQKQkJXAogCXJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoKFApLCBsb2NrZGVwX2lzX2hlbGQoJnhwc19tYXBfbXV0ZXgpKQpAQCAtOTY4LDcgKzk0Miw3IEBACiAJCX0gZWxzZQogCQkJcG9zID0gbWFwX2xlbiA9IGFsbG9jX2xlbiA9IDA7CiAKLQkJbmVlZF9zZXQgPSBjcHVfaXNzZXQoY3B1LCAqbWFzaykgJiYgY3B1X29ubGluZShjcHUpOworCQluZWVkX3NldCA9IGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBtYXNrKSAmJiBjcHVfb25saW5lKGNwdSk7CiAjaWZkZWYgQ09ORklHX05VTUEKIAkJaWYgKG5lZWRfc2V0KSB7CiAJCQlpZiAobnVtYV9ub2RlID09IC0yKQpAQCAtMTAwOSw3ICs5ODMsNyBAQAogCQltYXAgPSBkZXZfbWFwcyA/CiAJCQl4bWFwX2RlcmVmZXJlbmNlKGRldl9tYXBzLT5jcHVfbWFwW2NwdV0pIDogTlVMTDsKIAkJaWYgKG1hcCAmJiB4bWFwX2RlcmVmZXJlbmNlKG5ld19kZXZfbWFwcy0+Y3B1X21hcFtjcHVdKSAhPSBtYXApCi0JCQljYWxsX3JjdSgmbWFwLT5yY3UsIHhwc19tYXBfcmVsZWFzZSk7CisJCQlrZnJlZV9yY3UobWFwLCByY3UpOwogCQlpZiAobmV3X2Rldl9tYXBzLT5jcHVfbWFwW2NwdV0pCiAJCQlub25lbXB0eSA9IDE7CiAJfQpAQCAtMTAyMiw3ICs5OTYsNyBAQAogCX0KIAogCWlmIChkZXZfbWFwcykKLQkJY2FsbF9yY3UoJmRldl9tYXBzLT5yY3UsIHhwc19kZXZfbWFwc19yZWxlYXNlKTsKKwkJa2ZyZWVfcmN1KGRldl9tYXBzLCByY3UpOwogCiAJbmV0ZGV2X3F1ZXVlX251bWFfbm9kZV93cml0ZShxdWV1ZSwgKG51bWFfbm9kZSA+PSAwKSA/IG51bWFfbm9kZSA6CiAJCQkJCSAgICBOVU1BX05PX05PREUpOwpAQCAtMTA4NCw3ICsxMDU4LDcgQEAKIAkJCQllbHNlIHsKIAkJCQkJUkNVX0lOSVRfUE9JTlRFUihkZXZfbWFwcy0+Y3B1X21hcFtpXSwKIAkJCQkJICAgIE5VTEwpOwotCQkJCQljYWxsX3JjdSgmbWFwLT5yY3UsIHhwc19tYXBfcmVsZWFzZSk7CisJCQkJCWtmcmVlX3JjdShtYXAsIHJjdSk7CiAJCQkJCW1hcCA9IE5VTEw7CiAJCQkJfQogCQkJfQpAQCAtMTA5NCw3ICsxMDY4LDcgQEAKIAogCQlpZiAoIW5vbmVtcHR5KSB7CiAJCQlSQ1VfSU5JVF9QT0lOVEVSKGRldi0+eHBzX21hcHMsIE5VTEwpOwotCQkJY2FsbF9yY3UoJmRldl9tYXBzLT5yY3UsIHhwc19kZXZfbWFwc19yZWxlYXNlKTsKKwkJCWtmcmVlX3JjdShkZXZfbWFwcywgcmN1KTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jIGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jCmluZGV4IDNmODYwMjYuLjJlMmRjZTYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYworKysgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMKQEAgLTI3LDE0ICsyNyw2IEBACiAKICNkZWZpbmUgSU5JVElBTF9ORVRfR0VOX1BUUlMJMTMgLyogKzEgZm9yIGxlbiArMiBmb3IgcmN1X2hlYWQgKi8KIAotc3RhdGljIHZvaWQgbmV0X2dlbmVyaWNfcmVsZWFzZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkKLXsKLQlzdHJ1Y3QgbmV0X2dlbmVyaWMgKm5nOwotCi0JbmcgPSBjb250YWluZXJfb2YocmN1LCBzdHJ1Y3QgbmV0X2dlbmVyaWMsIHJjdSk7Ci0Ja2ZyZWUobmcpOwotfQotCiBzdGF0aWMgaW50IG5ldF9hc3NpZ25fZ2VuZXJpYyhzdHJ1Y3QgbmV0ICpuZXQsIGludCBpZCwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgbmV0X2dlbmVyaWMgKm5nLCAqb2xkX25nOwpAQCAtNjgsNyArNjAsNyBAQAogCW1lbWNweSgmbmctPnB0ciwgJm9sZF9uZy0+cHRyLCBvbGRfbmctPmxlbiAqIHNpemVvZih2b2lkKikpOwogCiAJcmN1X2Fzc2lnbl9wb2ludGVyKG5ldC0+Z2VuLCBuZyk7Ci0JY2FsbF9yY3UoJm9sZF9uZy0+cmN1LCBuZXRfZ2VuZXJpY19yZWxlYXNlKTsKKwlrZnJlZV9yY3Uob2xkX25nLCByY3UpOwogYXNzaWduOgogCW5nLT5wdHJbaWQgLSAxXSA9IGRhdGE7CiAJcmV0dXJuIDA7CkBAIC0yMTYsMTEgKzIwOCwxNCBAQAogCWttZW1fY2FjaGVfZnJlZShuZXRfY2FjaGVwLCBuZXQpOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldCAqbmV0X2NyZWF0ZSh2b2lkKQorc3RydWN0IG5ldCAqY29weV9uZXRfbnModW5zaWduZWQgbG9uZyBmbGFncywgc3RydWN0IG5ldCAqb2xkX25ldCkKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQ7CiAJaW50IHJ2OwogCisJaWYgKCEoZmxhZ3MgJiBDTE9ORV9ORVdORVQpKQorCQlyZXR1cm4gZ2V0X25ldChvbGRfbmV0KTsKKwogCW5ldCA9IG5ldF9hbGxvYygpOwogCWlmICghbmV0KQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKQEAgLTIzOSwxMyArMjM0LDYgQEAKIAlyZXR1cm4gbmV0OwogfQogCi1zdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1bnNpZ25lZCBsb25nIGZsYWdzLCBzdHJ1Y3QgbmV0ICpvbGRfbmV0KQotewotCWlmICghKGZsYWdzICYgQ0xPTkVfTkVXTkVUKSkKLQkJcmV0dXJuIGdldF9uZXQob2xkX25ldCk7Ci0JcmV0dXJuIG5ldF9jcmVhdGUoKTsKLX0KLQogc3RhdGljIERFRklORV9TUElOTE9DSyhjbGVhbnVwX2xpc3RfbG9jayk7CiBzdGF0aWMgTElTVF9IRUFEKGNsZWFudXBfbGlzdCk7ICAvKiBNdXN0IGhvbGQgY2xlYW51cF9saXN0X2xvY2sgdG8gdG91Y2ggKi8KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0cG9sbC5jIGIvbmV0L2NvcmUvbmV0cG9sbC5jCmluZGV4IDA2YmUyNDMuLjJkN2Q2ZDQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldHBvbGwuYworKysgYi9uZXQvY29yZS9uZXRwb2xsLmMKQEAgLTUzOSw3ICs1MzksNyBAQAogewogCWludCBwcm90bywgbGVuLCB1bGVuOwogCWludCBoaXRzID0gMDsKLQlzdHJ1Y3QgaXBoZHIgKmlwaDsKKwljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDsKIAlzdHJ1Y3QgdWRwaGRyICp1aDsKIAlzdHJ1Y3QgbmV0cG9sbF9pbmZvICpucGluZm8gPSBza2ItPmRldi0+bnBpbmZvOwogCXN0cnVjdCBuZXRwb2xsICpucCwgKnRtcDsKQEAgLTY5OCwzMiArNjk4LDggQEAKIAogCWlmICgqY3VyICE9IDApIHsKIAkJLyogTUFDIGFkZHJlc3MgKi8KLQkJaWYgKChkZWxpbSA9IHN0cmNocihjdXIsICc6JykpID09IE5VTEwpCisJCWlmICghbWFjX3B0b24oY3VyLCBucC0+cmVtb3RlX21hYykpCiAJCQlnb3RvIHBhcnNlX2ZhaWxlZDsKLQkJKmRlbGltID0gMDsKLQkJbnAtPnJlbW90ZV9tYWNbMF0gPSBzaW1wbGVfc3RydG9sKGN1ciwgTlVMTCwgMTYpOwotCQljdXIgPSBkZWxpbSArIDE7Ci0JCWlmICgoZGVsaW0gPSBzdHJjaHIoY3VyLCAnOicpKSA9PSBOVUxMKQotCQkJZ290byBwYXJzZV9mYWlsZWQ7Ci0JCSpkZWxpbSA9IDA7Ci0JCW5wLT5yZW1vdGVfbWFjWzFdID0gc2ltcGxlX3N0cnRvbChjdXIsIE5VTEwsIDE2KTsKLQkJY3VyID0gZGVsaW0gKyAxOwotCQlpZiAoKGRlbGltID0gc3RyY2hyKGN1ciwgJzonKSkgPT0gTlVMTCkKLQkJCWdvdG8gcGFyc2VfZmFpbGVkOwotCQkqZGVsaW0gPSAwOwotCQlucC0+cmVtb3RlX21hY1syXSA9IHNpbXBsZV9zdHJ0b2woY3VyLCBOVUxMLCAxNik7Ci0JCWN1ciA9IGRlbGltICsgMTsKLQkJaWYgKChkZWxpbSA9IHN0cmNocihjdXIsICc6JykpID09IE5VTEwpCi0JCQlnb3RvIHBhcnNlX2ZhaWxlZDsKLQkJKmRlbGltID0gMDsKLQkJbnAtPnJlbW90ZV9tYWNbM10gPSBzaW1wbGVfc3RydG9sKGN1ciwgTlVMTCwgMTYpOwotCQljdXIgPSBkZWxpbSArIDE7Ci0JCWlmICgoZGVsaW0gPSBzdHJjaHIoY3VyLCAnOicpKSA9PSBOVUxMKQotCQkJZ290byBwYXJzZV9mYWlsZWQ7Ci0JCSpkZWxpbSA9IDA7Ci0JCW5wLT5yZW1vdGVfbWFjWzRdID0gc2ltcGxlX3N0cnRvbChjdXIsIE5VTEwsIDE2KTsKLQkJY3VyID0gZGVsaW0gKyAxOwotCQlucC0+cmVtb3RlX21hY1s1XSA9IHNpbXBsZV9zdHJ0b2woY3VyLCBOVUxMLCAxNik7CiAJfQogCiAJbmV0cG9sbF9wcmludF9vcHRpb25zKG5wKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmMKaW5kZXggYWVlZWNlNy4uNjc4NzBlOSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmMKKysrIGIvbmV0L2NvcmUvcGt0Z2VuLmMKQEAgLTE1Niw2ICsxNTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CiAjaW5jbHVkZSA8bmV0L2lwdjYuaD4KQEAgLTQ0OSw3ICs0NTAsNiBAQAogc3RhdGljIHZvaWQgcGt0Z2VuX2NsZWFyX2NvdW50ZXJzKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBzY2FuX2lwNihjb25zdCBjaGFyICpzLCBjaGFyIGlwWzE2XSk7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGZtdF9pcDYoY2hhciAqcywgY29uc3QgY2hhciBpcFsxNl0pOwogCiAvKiBNb2R1bGUgcGFyYW1ldGVycywgZGVmYXVsdHMuICovCiBzdGF0aWMgaW50IHBnX2NvdW50X2QgX19yZWFkX21vc3RseSA9IDEwMDA7CkBAIC01NTYsMjEgKzU1NiwxMyBAQAogCQkJICAgcGt0X2Rldi0+c2tiX3ByaW9yaXR5KTsKIAogCWlmIChwa3RfZGV2LT5mbGFncyAmIEZfSVBWNikgewotCQljaGFyIGIxWzEyOF0sIGIyWzEyOF0sIGIzWzEyOF07Ci0JCWZtdF9pcDYoYjEsIHBrdF9kZXYtPmluNl9zYWRkci5zNl9hZGRyKTsKLQkJZm10X2lwNihiMiwgcGt0X2Rldi0+bWluX2luNl9zYWRkci5zNl9hZGRyKTsKLQkJZm10X2lwNihiMywgcGt0X2Rldi0+bWF4X2luNl9zYWRkci5zNl9hZGRyKTsKIAkJc2VxX3ByaW50ZihzZXEsCi0JCQkgICAiICAgICBzYWRkcjogJXMgIG1pbl9zYWRkcjogJXMgIG1heF9zYWRkcjogJXNcbiIsIGIxLAotCQkJICAgYjIsIGIzKTsKLQotCQlmbXRfaXA2KGIxLCBwa3RfZGV2LT5pbjZfZGFkZHIuczZfYWRkcik7Ci0JCWZtdF9pcDYoYjIsIHBrdF9kZXYtPm1pbl9pbjZfZGFkZHIuczZfYWRkcik7Ci0JCWZtdF9pcDYoYjMsIHBrdF9kZXYtPm1heF9pbjZfZGFkZHIuczZfYWRkcik7Ci0JCXNlcV9wcmludGYoc2VxLAotCQkJICAgIiAgICAgZGFkZHI6ICVzICBtaW5fZGFkZHI6ICVzICBtYXhfZGFkZHI6ICVzXG4iLCBiMSwKLQkJCSAgIGIyLCBiMyk7Ci0KKwkJCSAgICIgICAgIHNhZGRyOiAlcEk2YyAgbWluX3NhZGRyOiAlcEk2YyAgbWF4X3NhZGRyOiAlcEk2Y1xuIgorCQkJICAgIiAgICAgZGFkZHI6ICVwSTZjICBtaW5fZGFkZHI6ICVwSTZjICBtYXhfZGFkZHI6ICVwSTZjXG4iLAorCQkJICAgJnBrdF9kZXYtPmluNl9zYWRkciwKKwkJCSAgICZwa3RfZGV2LT5taW5faW42X3NhZGRyLCAmcGt0X2Rldi0+bWF4X2luNl9zYWRkciwKKwkJCSAgICZwa3RfZGV2LT5pbjZfZGFkZHIsCisJCQkgICAmcGt0X2Rldi0+bWluX2luNl9kYWRkciwgJnBrdF9kZXYtPm1heF9pbjZfZGFkZHIpOwogCX0gZWxzZSB7CiAJCXNlcV9wcmludGYoc2VxLAogCQkJICAgIiAgICAgZHN0X21pbjogJXMgIGRzdF9tYXg6ICVzXG4iLApAQCAtNzA2LDEwICs2OTgsOSBAQAogCQkgICBwa3RfZGV2LT5jdXJfc3JjX21hY19vZmZzZXQpOwogCiAJaWYgKHBrdF9kZXYtPmZsYWdzICYgRl9JUFY2KSB7Ci0JCWNoYXIgYjFbMTI4XSwgYjJbMTI4XTsKLQkJZm10X2lwNihiMSwgcGt0X2Rldi0+Y3VyX2luNl9kYWRkci5zNl9hZGRyKTsKLQkJZm10X2lwNihiMiwgcGt0X2Rldi0+Y3VyX2luNl9zYWRkci5zNl9hZGRyKTsKLQkJc2VxX3ByaW50ZihzZXEsICIgICAgIGN1cl9zYWRkcjogJXMgIGN1cl9kYWRkcjogJXNcbiIsIGIyLCBiMSk7CisJCXNlcV9wcmludGYoc2VxLCAiICAgICBjdXJfc2FkZHI6ICVwSTZjICBjdXJfZGFkZHI6ICVwSTZjXG4iLAorCQkJCSZwa3RfZGV2LT5jdXJfaW42X3NhZGRyLAorCQkJCSZwa3RfZGV2LT5jdXJfaW42X2RhZGRyKTsKIAl9IGVsc2UKIAkJc2VxX3ByaW50ZihzZXEsICIgICAgIGN1cl9zYWRkcjogMHgleCAgY3VyX2RhZGRyOiAweCV4XG4iLAogCQkJICAgcGt0X2Rldi0+Y3VyX3NhZGRyLCBwa3RfZGV2LT5jdXJfZGFkZHIpOwpAQCAtMTMwOSw3ICsxMzAwLDcgQEAKIAkJYnVmW2xlbl0gPSAwOwogCiAJCXNjYW5faXA2KGJ1ZiwgcGt0X2Rldi0+aW42X2RhZGRyLnM2X2FkZHIpOwotCQlmbXRfaXA2KGJ1ZiwgcGt0X2Rldi0+aW42X2RhZGRyLnM2X2FkZHIpOworCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXBJNmMiLCAmcGt0X2Rldi0+aW42X2RhZGRyKTsKIAogCQlpcHY2X2FkZHJfY29weSgmcGt0X2Rldi0+Y3VyX2luNl9kYWRkciwgJnBrdF9kZXYtPmluNl9kYWRkcik7CiAKQEAgLTEzMzIsNyArMTMyMyw3IEBACiAJCWJ1ZltsZW5dID0gMDsKIAogCQlzY2FuX2lwNihidWYsIHBrdF9kZXYtPm1pbl9pbjZfZGFkZHIuczZfYWRkcik7Ci0JCWZtdF9pcDYoYnVmLCBwa3RfZGV2LT5taW5faW42X2RhZGRyLnM2X2FkZHIpOworCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXBJNmMiLCAmcGt0X2Rldi0+bWluX2luNl9kYWRkcik7CiAKIAkJaXB2Nl9hZGRyX2NvcHkoJnBrdF9kZXYtPmN1cl9pbjZfZGFkZHIsCiAJCQkgICAgICAgJnBrdF9kZXYtPm1pbl9pbjZfZGFkZHIpOwpAQCAtMTM1NSw3ICsxMzQ2LDcgQEAKIAkJYnVmW2xlbl0gPSAwOwogCiAJCXNjYW5faXA2KGJ1ZiwgcGt0X2Rldi0+bWF4X2luNl9kYWRkci5zNl9hZGRyKTsKLQkJZm10X2lwNihidWYsIHBrdF9kZXYtPm1heF9pbjZfZGFkZHIuczZfYWRkcik7CisJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcEk2YyIsICZwa3RfZGV2LT5tYXhfaW42X2RhZGRyKTsKIAogCQlpZiAoZGVidWcpCiAJCQlwcmludGsoS0VSTl9ERUJVRyAicGt0Z2VuOiBkc3Q2X21heCBzZXQgdG86ICVzXG4iLCBidWYpOwpAQCAtMTM3Niw3ICsxMzY3LDcgQEAKIAkJYnVmW2xlbl0gPSAwOwogCiAJCXNjYW5faXA2KGJ1ZiwgcGt0X2Rldi0+aW42X3NhZGRyLnM2X2FkZHIpOwotCQlmbXRfaXA2KGJ1ZiwgcGt0X2Rldi0+aW42X3NhZGRyLnM2X2FkZHIpOworCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXBJNmMiLCAmcGt0X2Rldi0+aW42X3NhZGRyKTsKIAogCQlpcHY2X2FkZHJfY29weSgmcGt0X2Rldi0+Y3VyX2luNl9zYWRkciwgJnBrdF9kZXYtPmluNl9zYWRkcik7CiAKQEAgLTE0MzAsMTEgKzE0MjEsNiBAQAogCQlyZXR1cm4gY291bnQ7CiAJfQogCWlmICghc3RyY21wKG5hbWUsICJkc3RfbWFjIikpIHsKLQkJY2hhciAqdiA9IHZhbHN0cjsKLQkJdW5zaWduZWQgY2hhciBvbGRfZG1hY1tFVEhfQUxFTl07Ci0JCXVuc2lnbmVkIGNoYXIgKm0gPSBwa3RfZGV2LT5kc3RfbWFjOwotCQltZW1jcHkob2xkX2RtYWMsIHBrdF9kZXYtPmRzdF9tYWMsIEVUSF9BTEVOKTsKLQogCQlsZW4gPSBzdHJuX2xlbigmdXNlcl9idWZmZXJbaV0sIHNpemVvZih2YWxzdHIpIC0gMSk7CiAJCWlmIChsZW4gPCAwKQogCQkJcmV0dXJuIGxlbjsKQEAgLTE0NDIsMzUgKzE0MjgsMTYgQEAKIAkJbWVtc2V0KHZhbHN0ciwgMCwgc2l6ZW9mKHZhbHN0cikpOwogCQlpZiAoY29weV9mcm9tX3VzZXIodmFsc3RyLCAmdXNlcl9idWZmZXJbaV0sIGxlbikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJaSArPSBsZW47CiAKLQkJZm9yICgqbSA9IDA7ICp2ICYmIG0gPCBwa3RfZGV2LT5kc3RfbWFjICsgNjsgdisrKSB7Ci0JCQlpbnQgdmFsdWU7Ci0KLQkJCXZhbHVlID0gaGV4X3RvX2Jpbigqdik7Ci0JCQlpZiAodmFsdWUgPj0gMCkKLQkJCQkqbSA9ICptICogMTYgKyB2YWx1ZTsKLQotCQkJaWYgKCp2ID09ICc6JykgewotCQkJCW0rKzsKLQkJCQkqbSA9IDA7Ci0JCQl9Ci0JCX0KLQorCQlpZiAoIW1hY19wdG9uKHZhbHN0ciwgcGt0X2Rldi0+ZHN0X21hYykpCisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJLyogU2V0IHVwIERlc3QgTUFDICovCi0JCWlmIChjb21wYXJlX2V0aGVyX2FkZHIob2xkX2RtYWMsIHBrdF9kZXYtPmRzdF9tYWMpKQotCQkJbWVtY3B5KCYocGt0X2Rldi0+aGhbMF0pLCBwa3RfZGV2LT5kc3RfbWFjLCBFVEhfQUxFTik7CisJCW1lbWNweSgmcGt0X2Rldi0+aGhbMF0sIHBrdF9kZXYtPmRzdF9tYWMsIEVUSF9BTEVOKTsKIAotCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiBkc3RtYWMiKTsKKwkJc3ByaW50ZihwZ19yZXN1bHQsICJPSzogZHN0bWFjICVwTSIsIHBrdF9kZXYtPmRzdF9tYWMpOwogCQlyZXR1cm4gY291bnQ7CiAJfQogCWlmICghc3RyY21wKG5hbWUsICJzcmNfbWFjIikpIHsKLQkJY2hhciAqdiA9IHZhbHN0cjsKLQkJdW5zaWduZWQgY2hhciBvbGRfc21hY1tFVEhfQUxFTl07Ci0JCXVuc2lnbmVkIGNoYXIgKm0gPSBwa3RfZGV2LT5zcmNfbWFjOwotCi0JCW1lbWNweShvbGRfc21hYywgcGt0X2Rldi0+c3JjX21hYywgRVRIX0FMRU4pOwotCiAJCWxlbiA9IHN0cm5fbGVuKCZ1c2VyX2J1ZmZlcltpXSwgc2l6ZW9mKHZhbHN0cikgLSAxKTsKIAkJaWYgKGxlbiA8IDApCiAJCQlyZXR1cm4gbGVuOwpAQCAtMTQ3OCwyNiArMTQ0NSwxMyBAQAogCQltZW1zZXQodmFsc3RyLCAwLCBzaXplb2YodmFsc3RyKSk7CiAJCWlmIChjb3B5X2Zyb21fdXNlcih2YWxzdHIsICZ1c2VyX2J1ZmZlcltpXSwgbGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQlpICs9IGxlbjsKIAotCQlmb3IgKCptID0gMDsgKnYgJiYgbSA8IHBrdF9kZXYtPnNyY19tYWMgKyA2OyB2KyspIHsKLQkJCWludCB2YWx1ZTsKLQotCQkJdmFsdWUgPSBoZXhfdG9fYmluKCp2KTsKLQkJCWlmICh2YWx1ZSA+PSAwKQotCQkJCSptID0gKm0gKiAxNiArIHZhbHVlOwotCi0JCQlpZiAoKnYgPT0gJzonKSB7Ci0JCQkJbSsrOwotCQkJCSptID0gMDsKLQkJCX0KLQkJfQotCisJCWlmICghbWFjX3B0b24odmFsc3RyLCBwa3RfZGV2LT5zcmNfbWFjKSkKKwkJCXJldHVybiAtRUlOVkFMOwogCQkvKiBTZXQgdXAgU3JjIE1BQyAqLwotCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKG9sZF9zbWFjLCBwa3RfZGV2LT5zcmNfbWFjKSkKLQkJCW1lbWNweSgmKHBrdF9kZXYtPmhoWzZdKSwgcGt0X2Rldi0+c3JjX21hYywgRVRIX0FMRU4pOworCQltZW1jcHkoJnBrdF9kZXYtPmhoWzZdLCBwa3RfZGV2LT5zcmNfbWFjLCBFVEhfQUxFTik7CiAKLQkJc3ByaW50ZihwZ19yZXN1bHQsICJPSzogc3JjbWFjIik7CisJCXNwcmludGYocGdfcmVzdWx0LCAiT0s6IHNyY21hYyAlcE0iLCBwa3RfZGV2LT5zcmNfbWFjKTsKIAkJcmV0dXJuIGNvdW50OwogCX0KIApAQCAtMjUxNCw3ICsyNDY4LDYgQEAKIHsKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeCA9IHBrdF9kZXYtPmZsb3dzW3BrdF9kZXYtPmN1cmZsXS54OwogCWludCBlcnIgPSAwOwotCXN0cnVjdCBpcGhkciAqaXBoOwogCiAJaWYgKCF4KQogCQlyZXR1cm4gMDsKQEAgLTI1MjQsNyArMjQ3Nyw2IEBACiAJCXJldHVybiAwOwogCiAJc3Bpbl9sb2NrKCZ4LT5sb2NrKTsKLQlpcGggPSBpcF9oZHIoc2tiKTsKIAogCWVyciA9IHgtPm91dGVyX21vZGUtPm91dHB1dCh4LCBza2IpOwogCWlmIChlcnIpCkBAIC0yNjI0LDYgKzI1NzYsNyBAQAogCX0gZWxzZSB7CiAJCWludCBmcmFncyA9IHBrdF9kZXYtPm5mcmFnczsKIAkJaW50IGksIGxlbjsKKwkJaW50IGZyYWdfbGVuOwogCiAKIAkJaWYgKGZyYWdzID4gTUFYX1NLQl9GUkFHUykKQEAgLTI2MzUsNiArMjU4OCw4IEBACiAJCX0KIAogCQlpID0gMDsKKwkJZnJhZ19sZW4gPSAoZGF0YWxlbi9mcmFncykgPCBQQUdFX1NJWkUgPworCQkJICAgKGRhdGFsZW4vZnJhZ3MpIDogUEFHRV9TSVpFOwogCQl3aGlsZSAoZGF0YWxlbiA+IDApIHsKIAkJCWlmICh1bmxpa2VseSghcGt0X2Rldi0+cGFnZSkpIHsKIAkJCQlpbnQgbm9kZSA9IG51bWFfbm9kZV9pZCgpOwpAQCAtMjY0OCwzOCArMjYwMywxOCBAQAogCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5wYWdlID0gcGt0X2Rldi0+cGFnZTsKIAkJCWdldF9wYWdlKHBrdF9kZXYtPnBhZ2UpOwogCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5wYWdlX29mZnNldCA9IDA7Ci0JCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnNpemUgPQotCQkJICAgIChkYXRhbGVuIDwgUEFHRV9TSVpFID8gZGF0YWxlbiA6IFBBR0VfU0laRSk7CisJCQkvKmxhc3QgZnJhZ21lbnQsIGZpbGwgcmVzdCBvZiBkYXRhKi8KKwkJCWlmIChpID09IChmcmFncyAtIDEpKQorCQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZSA9CisJCQkJICAgIChkYXRhbGVuIDwgUEFHRV9TSVpFID8gZGF0YWxlbiA6IFBBR0VfU0laRSk7CisJCQllbHNlCisJCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5zaXplID0gZnJhZ19sZW47CiAJCQlkYXRhbGVuIC09IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZTsKIAkJCXNrYi0+bGVuICs9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZTsKIAkJCXNrYi0+ZGF0YV9sZW4gKz0gc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5zaXplOwogCQkJaSsrOwogCQkJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9IGk7CiAJCX0KLQotCQl3aGlsZSAoaSA8IGZyYWdzKSB7Ci0JCQlpbnQgcmVtOwotCi0JCQlpZiAoaSA9PSAwKQotCQkJCWJyZWFrOwotCi0JCQlyZW0gPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2kgLSAxXS5zaXplIC8gMjsKLQkJCWlmIChyZW0gPT0gMCkKLQkJCQlicmVhazsKLQotCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpIC0gMV0uc2l6ZSAtPSByZW07Ci0KLQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0gPQotCQkJICAgIHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaSAtIDFdOwotCQkJZ2V0X3BhZ2Uoc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5wYWdlKTsKLQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0ucGFnZSA9Ci0JCQkgICAgc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpIC0gMV0ucGFnZTsKLQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0ucGFnZV9vZmZzZXQgKz0KLQkJCSAgICBza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2kgLSAxXS5zaXplOwotCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5zaXplID0gcmVtOwotCQkJaSsrOwotCQkJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9IGk7Ci0JCX0KIAl9CiAKIAkvKiBTdGFtcCB0aGUgdGltZSwgYW5kIHNlcXVlbmNlIG51bWJlciwKQEAgLTI5MTcsNzkgKzI4NTIsNiBAQAogCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBjaGFyIHRvaGV4KGNoYXIgaGV4ZGlnaXQpCi17Ci0JcmV0dXJuIGhleGRpZ2l0ID4gOSA/IGhleGRpZ2l0ICsgJ2EnIC0gMTAgOiBoZXhkaWdpdCArICcwJzsKLX0KLQotc3RhdGljIGludCBmbXRfeGxvbmcoY2hhciAqcywgdW5zaWduZWQgaW50IGkpCi17Ci0JY2hhciAqYmFrID0gczsKLQkqcyA9IHRvaGV4KChpID4+IDEyKSAmIDB4Zik7Ci0JaWYgKHMgIT0gYmFrIHx8ICpzICE9ICcwJykKLQkJKytzOwotCSpzID0gdG9oZXgoKGkgPj4gOCkgJiAweGYpOwotCWlmIChzICE9IGJhayB8fCAqcyAhPSAnMCcpCi0JCSsrczsKLQkqcyA9IHRvaGV4KChpID4+IDQpICYgMHhmKTsKLQlpZiAocyAhPSBiYWsgfHwgKnMgIT0gJzAnKQotCQkrK3M7Ci0JKnMgPSB0b2hleChpICYgMHhmKTsKLQlyZXR1cm4gcyAtIGJhayArIDE7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZm10X2lwNihjaGFyICpzLCBjb25zdCBjaGFyIGlwWzE2XSkKLXsKLQl1bnNpZ25lZCBpbnQgbGVuOwotCXVuc2lnbmVkIGludCBpOwotCXVuc2lnbmVkIGludCB0ZW1wOwotCXVuc2lnbmVkIGludCBjb21wcmVzc2luZzsKLQlpbnQgajsKLQotCWxlbiA9IDA7Ci0JY29tcHJlc3NpbmcgPSAwOwotCWZvciAoaiA9IDA7IGogPCAxNjsgaiArPSAyKSB7Ci0KLSNpZmRlZiBWNE1BUFBFRFBSRUZJWAotCQlpZiAoaiA9PSAxMiAmJiAhbWVtY21wKGlwLCBWNG1hcHBlZHByZWZpeCwgMTIpKSB7Ci0JCQlpbmV0X250b2FfcigqKHN0cnVjdCBpbl9hZGRyICopKGlwICsgMTIpLCBzKTsKLQkJCXRlbXAgPSBzdHJsZW4ocyk7Ci0JCQlyZXR1cm4gbGVuICsgdGVtcDsKLQkJfQotI2VuZGlmCi0JCXRlbXAgPSAoKHVuc2lnbmVkIGxvbmcpKHVuc2lnbmVkIGNoYXIpaXBbal0gPDwgOCkgKwotCQkgICAgKHVuc2lnbmVkIGxvbmcpKHVuc2lnbmVkIGNoYXIpaXBbaiArIDFdOwotCQlpZiAodGVtcCA9PSAwKSB7Ci0JCQlpZiAoIWNvbXByZXNzaW5nKSB7Ci0JCQkJY29tcHJlc3NpbmcgPSAxOwotCQkJCWlmIChqID09IDApIHsKLQkJCQkJKnMrKyA9ICc6JzsKLQkJCQkJKytsZW47Ci0JCQkJfQotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKGNvbXByZXNzaW5nKSB7Ci0JCQkJY29tcHJlc3NpbmcgPSAwOwotCQkJCSpzKysgPSAnOic7Ci0JCQkJKytsZW47Ci0JCQl9Ci0JCQlpID0gZm10X3hsb25nKHMsIHRlbXApOwotCQkJbGVuICs9IGk7Ci0JCQlzICs9IGk7Ci0JCQlpZiAoaiA8IDE0KSB7Ci0JCQkJKnMrKyA9ICc6JzsKLQkJCQkrK2xlbjsKLQkJCX0KLQkJfQotCX0KLQlpZiAoY29tcHJlc3NpbmcpIHsKLQkJKnMrKyA9ICc6JzsKLQkJKytsZW47Ci0JfQotCSpzID0gMDsKLQlyZXR1cm4gbGVuOwotfQotCiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZpbGxfcGFja2V0X2lwdjYoc3RydWN0IG5ldF9kZXZpY2UgKm9kZXYsCiAJCQkJCXN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQogewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwppbmRleCBkN2M0YmI0Li5kMmJhMjU5IDEwMDY0NAotLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuYworKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwpAQCAtMTAwNywxMCArMTAwNywxMSBAQAogCXNfaCA9IGNiLT5hcmdzWzBdOwogCXNfaWR4ID0gY2ItPmFyZ3NbMV07CiAKKwlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChoID0gc19oOyBoIDwgTkVUREVWX0hBU0hFTlRSSUVTOyBoKyssIHNfaWR4ID0gMCkgewogCQlpZHggPSAwOwogCQloZWFkID0gJm5ldC0+ZGV2X2luZGV4X2hlYWRbaF07Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgbm9kZSwgaGVhZCwgaW5kZXhfaGxpc3QpIHsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRldiwgbm9kZSwgaGVhZCwgaW5kZXhfaGxpc3QpIHsKIAkJCWlmIChpZHggPCBzX2lkeCkKIAkJCQlnb3RvIGNvbnQ7CiAJCQlpZiAocnRubF9maWxsX2lmaW5mbyhza2IsIGRldiwgUlRNX05FV0xJTkssCkBAIC0xMDIzLDYgKzEwMjQsNyBAQAogCQl9CiAJfQogb3V0OgorCXJjdV9yZWFkX3VubG9jaygpOwogCWNiLT5hcmdzWzFdID0gaWR4OwogCWNiLT5hcmdzWzBdID0gaDsKIApAQCAtMTQ5OSw2ICsxNTAxLDcgQEAKIAljaGFyIGlmbmFtZVtJRk5BTVNJWl07CiAJc3RydWN0IG5sYXR0ciAqdGJbSUZMQV9NQVgrMV07CiAJaW50IGVycjsKKwlMSVNUX0hFQUQobGlzdF9raWxsKTsKIAogCWVyciA9IG5sbXNnX3BhcnNlKG5saCwgc2l6ZW9mKCppZm0pLCB0YiwgSUZMQV9NQVgsIGlmbGFfcG9saWN5KTsKIAlpZiAoZXJyIDwgMCkKQEAgLTE1MjIsNyArMTUyNSw5IEBACiAJaWYgKCFvcHMpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCW9wcy0+ZGVsbGluayhkZXYsIE5VTEwpOworCW9wcy0+ZGVsbGluayhkZXYsICZsaXN0X2tpbGwpOworCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoJmxpc3Rfa2lsbCk7CisJbGlzdF9kZWwoJmxpc3Rfa2lsbCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1NzAsMTIgKzE1NzUsNiBAQAogCWRldi0+cnRubF9saW5rX3N0YXRlID0gUlROTF9MSU5LX0lOSVRJQUxJWklORzsKIAlkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlcyA9IHJlYWxfbnVtX3F1ZXVlczsKIAotCWlmIChzdHJjaHIoZGV2LT5uYW1lLCAnJScpKSB7Ci0JCWVyciA9IGRldl9hbGxvY19uYW1lKGRldiwgZGV2LT5uYW1lKTsKLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIGVycl9mcmVlOwotCX0KLQogCWlmICh0YltJRkxBX01UVV0pCiAJCWRldi0+bXR1ID0gbmxhX2dldF91MzIodGJbSUZMQV9NVFVdKTsKIAlpZiAodGJbSUZMQV9BRERSRVNTXSkKQEAgLTE1OTUsOCArMTU5NCw2IEBACiAKIAlyZXR1cm4gZGV2OwogCi1lcnJfZnJlZToKLQlmcmVlX25ldGRldihkZXYpOwogZXJyOgogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CkBAIC0xODc5LDcgKzE4NzYsNiBAQAogCWludCBtaW5fbGVuOwogCWludCBmYW1pbHk7CiAJaW50IHR5cGU7Ci0JaW50IGVycjsKIAogCXR5cGUgPSBubGgtPm5sbXNnX3R5cGU7CiAJaWYgKHR5cGUgPiBSVE1fTUFYKQpAQCAtMTkwNiwxMSArMTkwMiw4IEBACiAJCWlmIChkdW1waXQgPT0gTlVMTCkKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCQlfX3J0bmxfdW5sb2NrKCk7CiAJCXJ0bmwgPSBuZXQtPnJ0bmw7Ci0JCWVyciA9IG5ldGxpbmtfZHVtcF9zdGFydChydG5sLCBza2IsIG5saCwgZHVtcGl0LCBOVUxMKTsKLQkJcnRubF9sb2NrKCk7Ci0JCXJldHVybiBlcnI7CisJCXJldHVybiBuZXRsaW5rX2R1bXBfc3RhcnQocnRubCwgc2tiLCBubGgsIGR1bXBpdCwgTlVMTCk7CiAJfQogCiAJbWVtc2V0KHJ0YV9idWYsIDAsIChydGF0dHJfbWF4ICogc2l6ZW9mKHN0cnVjdCBydGF0dHIgKikpKTsKQEAgLTE5ODAsNyArMTk3Myw3IEBACiB7CiAJc3RydWN0IHNvY2sgKnNrOwogCXNrID0gbmV0bGlua19rZXJuZWxfY3JlYXRlKG5ldCwgTkVUTElOS19ST1VURSwgUlROTEdSUF9NQVgsCi0JCQkJICAgcnRuZXRsaW5rX3JjdiwgJnJ0bmxfbXV0ZXgsIFRISVNfTU9EVUxFKTsKKwkJCQkgICBydG5ldGxpbmtfcmN2LCBOVUxMLCBUSElTX01PRFVMRSk7CiAJaWYgKCFzaykKIAkJcmV0dXJuIC1FTk9NRU07CiAJbmV0LT5ydG5sID0gc2s7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IDdlYmVlZDAuLjQ2Y2JkMjggMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCisrKyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJycXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgpAQCAtMjk5Myw2ICsyOTk0LDkgQEAKIAlza2ItPmRlc3RydWN0b3IgPSBzb2NrX3JtZW1fZnJlZTsKIAlhdG9taWNfYWRkKHNrYi0+dHJ1ZXNpemUsICZzay0+c2tfcm1lbV9hbGxvYyk7CiAKKwkvKiBiZWZvcmUgZXhpdGluZyByY3Ugc2VjdGlvbiwgbWFrZSBzdXJlIGRzdCBpcyByZWZjb3VudGVkICovCisJc2tiX2RzdF9mb3JjZShza2IpOworCiAJc2tiX3F1ZXVlX3RhaWwoJnNrLT5za19lcnJvcl9xdWV1ZSwgc2tiKTsKIAlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkKIAkJc2stPnNrX2RhdGFfcmVhZHkoc2ssIHNrYi0+bGVuKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKaW5kZXggMzg1YjYwOS4uYTgyOWUzZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKKysrIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKQEAgLTEyMiw2ICsxMjIsMTUgQEAKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMKIAl9LAorI2lmZGVmIENPTkZJR19CUEZfSklUCisJeworCQkucHJvY25hbWUJPSAiYnBmX2ppdF9lbmFibGUiLAorCQkuZGF0YQkJPSAmYnBmX2ppdF9lbmFibGUsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjCisJfSwKKyNlbmRpZgogCXsKIAkJLnByb2NuYW1lCT0gIm5ldGRldl90c3RhbXBfcHJlcXVldWUiLAogCQkuZGF0YQkJPSAmbmV0ZGV2X3RzdGFtcF9wcmVxdWV1ZSwKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3V0aWxzLmMgYi9uZXQvY29yZS91dGlscy5jCmluZGV4IDVmZWEwYWIuLjIwMTJiYzcgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3V0aWxzLmMKKysrIGIvbmV0L2NvcmUvdXRpbHMuYwpAQCAtMjk2LDMgKzI5NiwyNyBAQAogCQkJCWNzdW1fdW5mb2xkKCpzdW0pKSk7CiB9CiBFWFBPUlRfU1lNQk9MKGluZXRfcHJvdG9fY3N1bV9yZXBsYWNlNCk7CisKK2ludCBtYWNfcHRvbihjb25zdCBjaGFyICpzLCB1OCAqbWFjKQoreworCWludCBpOworCisJLyogWFg6WFg6WFg6WFg6WFg6WFggKi8KKwlpZiAoc3RybGVuKHMpIDwgMyAqIEVUSF9BTEVOIC0gMSkKKwkJcmV0dXJuIDA7CisKKwkvKiBEb24ndCBkaXJ0eSByZXN1bHQgdW5sZXNzIHN0cmluZyBpcyB2YWxpZCBNQUMuICovCisJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspIHsKKwkJaWYgKCFzdHJjaHIoIjAxMjM0NTY3ODlhYmNkZWZBQkNERUYiLCBzW2kgKiAzXSkpCisJCQlyZXR1cm4gMDsKKwkJaWYgKCFzdHJjaHIoIjAxMjM0NTY3ODlhYmNkZWZBQkNERUYiLCBzW2kgKiAzICsgMV0pKQorCQkJcmV0dXJuIDA7CisJCWlmIChpICE9IEVUSF9BTEVOIC0gMSAmJiBzW2kgKiAzICsgMl0gIT0gJzonKQorCQkJcmV0dXJuIDA7CisJfQorCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKSB7CisJCW1hY1tpXSA9IChoZXhfdG9fYmluKHNbaSAqIDNdKSA8PCA0KSB8IGhleF90b19iaW4oc1tpICogMyArIDFdKTsKKwl9CisJcmV0dXJuIDE7Cit9CitFWFBPUlRfU1lNQk9MKG1hY19wdG9uKTsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lwdjQuYyBiL25ldC9kY2NwL2lwdjQuYwppbmRleCBhZTQ1MWM2Li44YzM2YWRmIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pcHY0LmMKKysrIGIvbmV0L2RjY3AvaXB2NC5jCkBAIC00MCwxMyArNDAsMTUgQEAKIAogaW50IGRjY3BfdjRfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsIGludCBhZGRyX2xlbikKIHsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnVzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopdWFkZHI7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7Ci0JY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICp1c2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXVhZGRyOwogCV9fYmUxNiBvcmlnX3Nwb3J0LCBvcmlnX2Rwb3J0OwotCXN0cnVjdCBydGFibGUgKnJ0OwogCV9fYmUzMiBkYWRkciwgbmV4dGhvcDsKKwlzdHJ1Y3QgZmxvd2k0ICpmbDQ7CisJc3RydWN0IHJ0YWJsZSAqcnQ7CiAJaW50IGVycjsKKwlzdHJ1Y3QgaXBfb3B0aW9uc19yY3UgKmluZXRfb3B0OwogCiAJZHAtPmRjY3BzX3JvbGUgPSBEQ0NQX1JPTEVfQ0xJRU5UOwogCkBAIC01NywxNSArNTksMTkgQEAKIAkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CiAKIAluZXh0aG9wID0gZGFkZHIgPSB1c2luLT5zaW5fYWRkci5zX2FkZHI7Ci0JaWYgKGluZXQtPm9wdCAhPSBOVUxMICYmIGluZXQtPm9wdC0+c3JyKSB7CisKKwlpbmV0X29wdCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoaW5ldC0+aW5ldF9vcHQsCisJCQkJCSAgICAgc29ja19vd25lZF9ieV91c2VyKHNrKSk7CisJaWYgKGluZXRfb3B0ICE9IE5VTEwgJiYgaW5ldF9vcHQtPm9wdC5zcnIpIHsKIAkJaWYgKGRhZGRyID09IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJbmV4dGhvcCA9IGluZXQtPm9wdC0+ZmFkZHI7CisJCW5leHRob3AgPSBpbmV0X29wdC0+b3B0LmZhZGRyOwogCX0KIAogCW9yaWdfc3BvcnQgPSBpbmV0LT5pbmV0X3Nwb3J0OwogCW9yaWdfZHBvcnQgPSB1c2luLT5zaW5fcG9ydDsKLQlydCA9IGlwX3JvdXRlX2Nvbm5lY3QobmV4dGhvcCwgaW5ldC0+aW5ldF9zYWRkciwKKwlmbDQgPSAmaW5ldC0+Y29yay5mbC51LmlwNDsKKwlydCA9IGlwX3JvdXRlX2Nvbm5lY3QoZmw0LCBuZXh0aG9wLCBpbmV0LT5pbmV0X3NhZGRyLAogCQkJICAgICAgUlRfQ09OTl9GTEFHUyhzayksIHNrLT5za19ib3VuZF9kZXZfaWYsCiAJCQkgICAgICBJUFBST1RPX0RDQ1AsCiAJCQkgICAgICBvcmlnX3Nwb3J0LCBvcmlnX2Rwb3J0LCBzaywgdHJ1ZSk7CkBAIC03NywxOSArODMsMTkgQEAKIAkJcmV0dXJuIC1FTkVUVU5SRUFDSDsKIAl9CiAKLQlpZiAoaW5ldC0+b3B0ID09IE5VTEwgfHwgIWluZXQtPm9wdC0+c3JyKQotCQlkYWRkciA9IHJ0LT5ydF9kc3Q7CisJaWYgKGluZXRfb3B0ID09IE5VTEwgfHwgIWluZXRfb3B0LT5vcHQuc3JyKQorCQlkYWRkciA9IGZsNC0+ZGFkZHI7CiAKIAlpZiAoaW5ldC0+aW5ldF9zYWRkciA9PSAwKQotCQlpbmV0LT5pbmV0X3NhZGRyID0gcnQtPnJ0X3NyYzsKKwkJaW5ldC0+aW5ldF9zYWRkciA9IGZsNC0+c2FkZHI7CiAJaW5ldC0+aW5ldF9yY3Zfc2FkZHIgPSBpbmV0LT5pbmV0X3NhZGRyOwogCiAJaW5ldC0+aW5ldF9kcG9ydCA9IHVzaW4tPnNpbl9wb3J0OwogCWluZXQtPmluZXRfZGFkZHIgPSBkYWRkcjsKIAogCWluZXRfY3NrKHNrKS0+aWNza19leHRfaGRyX2xlbiA9IDA7Ci0JaWYgKGluZXQtPm9wdCAhPSBOVUxMKQotCQlpbmV0X2NzayhzayktPmljc2tfZXh0X2hkcl9sZW4gPSBpbmV0LT5vcHQtPm9wdGxlbjsKKwlpZiAoaW5ldF9vcHQpCisJCWluZXRfY3NrKHNrKS0+aWNza19leHRfaGRyX2xlbiA9IGluZXRfb3B0LT5vcHQub3B0bGVuOwogCS8qCiAJICogU29ja2V0IGlkZW50aXR5IGlzIHN0aWxsIHVua25vd24gKHNwb3J0IG1heSBiZSB6ZXJvKS4KIAkgKiBIb3dldmVyIHdlIHNldCBzdGF0ZSB0byBEQ0NQX1JFUVVFU1RJTkcgYW5kIG5vdCByZWxlYXNpbmcgc29ja2V0CkBAIC0xMDEsOCArMTA3LDcgQEAKIAlpZiAoZXJyICE9IDApCiAJCWdvdG8gZmFpbHVyZTsKIAotCXJ0ID0gaXBfcm91dGVfbmV3cG9ydHMocnQsIElQUFJPVE9fRENDUCwKLQkJCSAgICAgICBvcmlnX3Nwb3J0LCBvcmlnX2Rwb3J0LAorCXJ0ID0gaXBfcm91dGVfbmV3cG9ydHMoZmw0LCBydCwgb3JpZ19zcG9ydCwgb3JpZ19kcG9ydCwKIAkJCSAgICAgICBpbmV0LT5pbmV0X3Nwb3J0LCBpbmV0LT5pbmV0X2Rwb3J0LCBzayk7CiAJaWYgKElTX0VSUihydCkpIHsKIAkJcnQgPSBOVUxMOwpAQCAtMzkxLDMyICszOTYsMzAgQEAKIAlpZiAoc2tfYWNjZXB0cV9pc19mdWxsKHNrKSkKIAkJZ290byBleGl0X292ZXJmbG93OwogCi0JaWYgKGRzdCA9PSBOVUxMICYmIChkc3QgPSBpbmV0X2Nza19yb3V0ZV9yZXEoc2ssIHJlcSkpID09IE5VTEwpCi0JCWdvdG8gZXhpdDsKLQogCW5ld3NrID0gZGNjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZChzaywgcmVxLCBza2IpOwogCWlmIChuZXdzayA9PSBOVUxMKQogCQlnb3RvIGV4aXRfbm9uZXdzazsKIAotCXNrX3NldHVwX2NhcHMobmV3c2ssIGRzdCk7Ci0KIAluZXdpbmV0CQkgICA9IGluZXRfc2sobmV3c2spOwogCWlyZXEJCSAgID0gaW5ldF9yc2socmVxKTsKIAluZXdpbmV0LT5pbmV0X2RhZGRyCT0gaXJlcS0+cm10X2FkZHI7CiAJbmV3aW5ldC0+aW5ldF9yY3Zfc2FkZHIgPSBpcmVxLT5sb2NfYWRkcjsKIAluZXdpbmV0LT5pbmV0X3NhZGRyCT0gaXJlcS0+bG9jX2FkZHI7Ci0JbmV3aW5ldC0+b3B0CSAgID0gaXJlcS0+b3B0OworCW5ld2luZXQtPmluZXRfb3B0CT0gaXJlcS0+b3B0OwogCWlyZXEtPm9wdAkgICA9IE5VTEw7CiAJbmV3aW5ldC0+bWNfaW5kZXggID0gaW5ldF9paWYoc2tiKTsKIAluZXdpbmV0LT5tY190dGwJICAgPSBpcF9oZHIoc2tiKS0+dHRsOwogCW5ld2luZXQtPmluZXRfaWQgICA9IGppZmZpZXM7CiAKKwlpZiAoZHN0ID09IE5VTEwgJiYgKGRzdCA9IGluZXRfY3NrX3JvdXRlX2NoaWxkX3NvY2soc2ssIG5ld3NrLCByZXEpKSA9PSBOVUxMKQorCQlnb3RvIHB1dF9hbmRfZXhpdDsKKworCXNrX3NldHVwX2NhcHMobmV3c2ssIGRzdCk7CisKIAlkY2NwX3N5bmNfbXNzKG5ld3NrLCBkc3RfbXR1KGRzdCkpOwogCi0JaWYgKF9faW5ldF9pbmhlcml0X3BvcnQoc2ssIG5ld3NrKSA8IDApIHsKLQkJc29ja19wdXQobmV3c2spOwotCQlnb3RvIGV4aXQ7Ci0JfQorCWlmIChfX2luZXRfaW5oZXJpdF9wb3J0KHNrLCBuZXdzaykgPCAwKQorCQlnb3RvIHB1dF9hbmRfZXhpdDsKIAlfX2luZXRfaGFzaF9ub2xpc3RlbihuZXdzaywgTlVMTCk7CiAKIAlyZXR1cm4gbmV3c2s7CkBAIC00MjgsNiArNDMxLDkgQEAKIGV4aXQ6CiAJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9MSVNURU5EUk9QUyk7CiAJcmV0dXJuIE5VTEw7CitwdXRfYW5kX2V4aXQ6CisJc29ja19wdXQobmV3c2spOworCWdvdG8gZXhpdDsKIH0KIAogRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF92NF9yZXF1ZXN0X3JlY3Zfc29jayk7CkBAIC00OTEsOCArNDk3LDkgQEAKIAlpbnQgZXJyID0gLTE7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CisJc3RydWN0IGZsb3dpNCBmbDQ7CiAKLQlkc3QgPSBpbmV0X2Nza19yb3V0ZV9yZXEoc2ssIHJlcSk7CisJZHN0ID0gaW5ldF9jc2tfcm91dGVfcmVxKHNrLCAmZmw0LCByZXEpOwogCWlmIChkc3QgPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lwdjYuYyBiL25ldC9kY2NwL2lwdjYuYwppbmRleCBkZTFiN2UzLi44ZGM0MzQ4IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pcHY2LmMKKysrIGIvbmV0L2RjY3AvaXB2Ni5jCkBAIC01NCw4ICs1NCw4IEBACiAKIC8qIGFkZCBwc2V1ZG8taGVhZGVyIHRvIERDQ1AgY2hlY2tzdW0gc3RvcmVkIGluIHNrYi0+Y3N1bSAqLwogc3RhdGljIGlubGluZSBfX3N1bTE2IGRjY3BfdjZfY3N1bV9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgICBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAotCQkJCSAgICAgIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIpCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyKQogewogCXJldHVybiBjc3VtX2lwdjZfbWFnaWMoc2FkZHIsIGRhZGRyLCBza2ItPmxlbiwgSVBQUk9UT19EQ0NQLCBza2ItPmNzdW0pOwogfQpAQCAtODcsNyArODcsNyBAQAogc3RhdGljIHZvaWQgZGNjcF92Nl9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQsCiAJCQl1OCB0eXBlLCB1OCBjb2RlLCBpbnQgb2Zmc2V0LCBfX2JlMzIgaW5mbykKIHsKLQlzdHJ1Y3QgaXB2NmhkciAqaGRyID0gKHN0cnVjdCBpcHY2aGRyICopc2tiLT5kYXRhOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICpoZHIgPSAoY29uc3Qgc3RydWN0IGlwdjZoZHIgKilza2ItPmRhdGE7CiAJY29uc3Qgc3RydWN0IGRjY3BfaGRyICpkaCA9IChzdHJ1Y3QgZGNjcF9oZHIgKikoc2tiLT5kYXRhICsgb2Zmc2V0KTsKIAlzdHJ1Y3QgZGNjcF9zb2NrICpkcDsKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnA7CkBAIC0yOTYsNyArMjk2LDcgQEAKIAogc3RhdGljIHZvaWQgZGNjcF92Nl9jdGxfc2VuZF9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpyeHNrYikKIHsKLQlzdHJ1Y3QgaXB2NmhkciAqcnhpcDZoOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICpyeGlwNmg7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgZmxvd2k2IGZsNjsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYl9kc3Qocnhza2IpLT5kZXYpOwpAQCAtNTczLDcgKzU3Myw3IEBACiAKIAkgICBGaXJzdDogbm8gSVB2NCBvcHRpb25zLgogCSAqLwotCW5ld2luZXQtPm9wdCA9IE5VTEw7CisJbmV3aW5ldC0+aW5ldF9vcHQgPSBOVUxMOwogCiAJLyogQ2xvbmUgUlggYml0cyAqLwogCW5ld25wLT5yeG9wdC5hbGwgPSBucC0+cnhvcHQuYWxsOwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3Avb3B0aW9ucy5jIGIvbmV0L2RjY3Avb3B0aW9ucy5jCmluZGV4IGYwNmZmY2YuLjRiMmFiNjUgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL29wdGlvbnMuYworKysgYi9uZXQvZGNjcC9vcHRpb25zLmMKQEAgLTEyMyw2ICsxMjMsOCBAQAogCQljYXNlIERDQ1BPX0NIQU5HRV9MIC4uLiBEQ0NQT19DT05GSVJNX1I6CiAJCQlpZiAocGt0X3R5cGUgPT0gRENDUF9QS1RfREFUQSkgICAgICAvKiBSRkMgNDM0MCwgNiAqLwogCQkJCWJyZWFrOworCQkJaWYgKGxlbiA9PSAwKQorCQkJCWdvdG8gb3V0X2ludmFsaWRfb3B0aW9uOwogCQkJcmMgPSBkY2NwX2ZlYXRfcGFyc2Vfb3B0aW9ucyhzaywgZHJlcSwgbWFuZGF0b3J5LCBvcHQsCiAJCQkJCQkgICAgKnZhbHVlLCB2YWx1ZSArIDEsIGxlbiAtIDEpOwogCQkJaWYgKHJjKQpkaWZmIC0tZ2l0IGEvbmV0L2RjY3Avb3V0cHV0LmMgYi9uZXQvZGNjcC9vdXRwdXQuYwppbmRleCAxMzZkNDFjLi5mYWIxMDhlIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9vdXRwdXQuYworKysgYi9uZXQvZGNjcC9vdXRwdXQuYwpAQCAtNDMsNyArNDMsNyBAQAogc3RhdGljIGludCBkY2NwX3RyYW5zbWl0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaWYgKGxpa2VseShza2IgIT0gTlVMTCkpIHsKLQkJY29uc3Qgc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOworCQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJCWNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKIAkJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKIAkJc3RydWN0IGRjY3Bfc2tiX2NiICpkY2IgPSBEQ0NQX1NLQl9DQihza2IpOwpAQCAtMTM2LDcgKzEzNiw3IEBACiAKIAkJRENDUF9JTkNfU1RBVFMoRENDUF9NSUJfT1VUU0VHUyk7CiAKLQkJZXJyID0gaWNzay0+aWNza19hZl9vcHMtPnF1ZXVlX3htaXQoc2tiKTsKKwkJZXJyID0gaWNzay0+aWNza19hZl9vcHMtPnF1ZXVlX3htaXQoc2tiLCAmaW5ldC0+Y29yay5mbCk7CiAJCXJldHVybiBuZXRfeG1pdF9ldmFsKGVycik7CiAJfQogCXJldHVybiAtRU5PQlVGUzsKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fZGV2LmMgYi9uZXQvZGVjbmV0L2RuX2Rldi5jCmluZGV4IDBkY2FhOTAuLmNmMjZhYzcgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fZGV2LmMKKysrIGIvbmV0L2RlY25ldC9kbl9kZXYuYwpAQCAtMzMyLDE0ICszMzIsOSBAQAogCXJldHVybiBpZmE7CiB9CiAKLXN0YXRpYyB2b2lkIGRuX2Rldl9mcmVlX2lmYV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKQotewotCWtmcmVlKGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgZG5faWZhZGRyLCByY3UpKTsKLX0KLQogc3RhdGljIHZvaWQgZG5fZGV2X2ZyZWVfaWZhKHN0cnVjdCBkbl9pZmFkZHIgKmlmYSkKIHsKLQljYWxsX3JjdSgmaWZhLT5yY3UsIGRuX2Rldl9mcmVlX2lmYV9yY3UpOworCWtmcmVlX3JjdShpZmEsIHJjdSk7CiB9CiAKIHN0YXRpYyB2b2lkIGRuX2Rldl9kZWxfaWZhKHN0cnVjdCBkbl9kZXYgKmRuX2RiLCBzdHJ1Y3QgZG5faWZhZGRyIF9fcmN1ICoqaWZhcCwgaW50IGRlc3Ryb3kpCkBAIC03NTIsNyArNzQ3LDggQEAKIAlza2lwX25hZGRyID0gY2ItPmFyZ3NbMV07CiAKIAlpZHggPSAwOwotCWZvcl9lYWNoX25ldGRldigmaW5pdF9uZXQsIGRldikgeworCXJjdV9yZWFkX2xvY2soKTsKKwlmb3JfZWFjaF9uZXRkZXZfcmN1KCZpbml0X25ldCwgZGV2KSB7CiAJCWlmIChpZHggPCBza2lwX25kZXZzKQogCQkJZ290byBjb250OwogCQllbHNlIGlmIChpZHggPiBza2lwX25kZXZzKSB7CkBAIC03NjEsMTEgKzc1NywxMSBAQAogCQkJc2tpcF9uYWRkciA9IDA7CiAJCX0KIAotCQlpZiAoKGRuX2RiID0gcnRubF9kZXJlZmVyZW5jZShkZXYtPmRuX3B0cikpID09IE5VTEwpCisJCWlmICgoZG5fZGIgPSByY3VfZGVyZWZlcmVuY2UoZGV2LT5kbl9wdHIpKSA9PSBOVUxMKQogCQkJZ290byBjb250OwogCi0JCWZvciAoaWZhID0gcnRubF9kZXJlZmVyZW5jZShkbl9kYi0+aWZhX2xpc3QpLCBkbl9pZHggPSAwOyBpZmE7Ci0JCSAgICAgaWZhID0gcnRubF9kZXJlZmVyZW5jZShpZmEtPmlmYV9uZXh0KSwgZG5faWR4KyspIHsKKwkJZm9yIChpZmEgPSByY3VfZGVyZWZlcmVuY2UoZG5fZGItPmlmYV9saXN0KSwgZG5faWR4ID0gMDsgaWZhOworCQkgICAgIGlmYSA9IHJjdV9kZXJlZmVyZW5jZShpZmEtPmlmYV9uZXh0KSwgZG5faWR4KyspIHsKIAkJCWlmIChkbl9pZHggPCBza2lwX25hZGRyKQogCQkJCWNvbnRpbnVlOwogCkBAIC03NzgsNiArNzc0LDcgQEAKIAkJaWR4Kys7CiAJfQogZG9uZToKKwlyY3VfcmVhZF91bmxvY2soKTsKIAljYi0+YXJnc1swXSA9IGlkeDsKIAljYi0+YXJnc1sxXSA9IGRuX2lkeDsKIApkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl9yb3V0ZS5jIGIvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCmluZGV4IDlmMDlkNGYuLjc0NTQ0YmMgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fcm91dGUuYworKysgYi9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKQEAgLTExMjUsMTMgKzExMjUsMTEgQEAKIAlpZiAoZGV2X291dC0+ZmxhZ3MgJiBJRkZfTE9PUEJBQ0spCiAJCWZsYWdzIHw9IFJUQ0ZfTE9DQUw7CiAKLQlydCA9IGRzdF9hbGxvYygmZG5fZHN0X29wcywgMCk7CisJcnQgPSBkc3RfYWxsb2MoJmRuX2RzdF9vcHMsIGRldl9vdXQsIDEsIDAsIERTVF9IT1NUKTsKIAlpZiAocnQgPT0gTlVMTCkKIAkJZ290byBlX25vYnVmczsKIAotCWF0b21pY19zZXQoJnJ0LT5kc3QuX19yZWZjbnQsIDEpOwotCXJ0LT5kc3QuZmxhZ3MgICA9IERTVF9IT1NUOwotCisJbWVtc2V0KCZydC0+ZmxkLCAwLCBzaXplb2YocnQtPmZsZCkpOwogCXJ0LT5mbGQuc2FkZHIgICAgICAgID0gb2xkZmxwLT5zYWRkcjsKIAlydC0+ZmxkLmRhZGRyICAgICAgICA9IG9sZGZscC0+ZGFkZHI7CiAJcnQtPmZsZC5mbG93aWRuX29pZiAgPSBvbGRmbHAtPmZsb3dpZG5fb2lmOwpAQCAtMTE0Niw4ICsxMTQ0LDYgQEAKIAlydC0+cnRfZHN0X21hcCAgICA9IGZsZC5kYWRkcjsKIAlydC0+cnRfc3JjX21hcCAgICA9IGZsZC5zYWRkcjsKIAotCXJ0LT5kc3QuZGV2ID0gZGV2X291dDsKLQlkZXZfaG9sZChkZXZfb3V0KTsKIAlydC0+ZHN0Lm5laWdoYm91ciA9IG5laWdoOwogCW5laWdoID0gTlVMTDsKIApAQCAtMTM5OSwxMCArMTM5NSwxMSBAQAogCX0KIAogbWFrZV9yb3V0ZToKLQlydCA9IGRzdF9hbGxvYygmZG5fZHN0X29wcywgMCk7CisJcnQgPSBkc3RfYWxsb2MoJmRuX2RzdF9vcHMsIG91dF9kZXYsIDAsIDAsIERTVF9IT1NUKTsKIAlpZiAocnQgPT0gTlVMTCkKIAkJZ290byBlX25vYnVmczsKIAorCW1lbXNldCgmcnQtPmZsZCwgMCwgc2l6ZW9mKHJ0LT5mbGQpKTsKIAlydC0+cnRfc2FkZHIgICAgICA9IGZsZC5zYWRkcjsKIAlydC0+cnRfZGFkZHIgICAgICA9IGZsZC5kYWRkcjsKIAlydC0+cnRfZ2F0ZXdheSAgICA9IGZsZC5kYWRkcjsKQEAgLTE0MTksOSArMTQxNiw3IEBACiAJcnQtPmZsZC5mbG93aWRuX2lpZiAgPSBpbl9kZXYtPmlmaW5kZXg7CiAJcnQtPmZsZC5mbG93aWRuX21hcmsgPSBmbGQuZmxvd2lkbl9tYXJrOwogCi0JcnQtPmRzdC5mbGFncyA9IERTVF9IT1NUOwogCXJ0LT5kc3QubmVpZ2hib3VyID0gbmVpZ2g7Ci0JcnQtPmRzdC5kZXYgPSBvdXRfZGV2OwogCXJ0LT5kc3QubGFzdHVzZSA9IGppZmZpZXM7CiAJcnQtPmRzdC5vdXRwdXQgPSBkbl9ydF9idWc7CiAJc3dpdGNoKHJlcy50eXBlKSB7CkBAIC0xNDQwLDggKzE0MzUsNiBAQAogCQkJcnQtPmRzdC5pbnB1dCA9IGRzdF9kaXNjYXJkOwogCX0KIAlydC0+cnRfZmxhZ3MgPSBmbGFnczsKLQlpZiAocnQtPmRzdC5kZXYpCi0JCWRldl9ob2xkKHJ0LT5kc3QuZGV2KTsKIAogCWVyciA9IGRuX3J0X3NldF9uZXh0X2hvcChydCwgJnJlcyk7CiAJaWYgKGVycikKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fdGFibGUuYyBiL25ldC9kZWNuZXQvZG5fdGFibGUuYwppbmRleCA5OWQ4ZDNhLi5iZDBhNTJkIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX3RhYmxlLmMKKysrIGIvbmV0L2RlY25ldC9kbl90YWJsZS5jCkBAIC0xMjMsMTEgKzEyMywxMSBAQAogCQkJCSAgIHN0cnVjdCBkbl9maWJfbm9kZSAqKm9sZF9odCwKIAkJCQkgICBpbnQgb2xkX2Rpdmlzb3IpCiB7Ci0JaW50IGk7CiAJc3RydWN0IGRuX2ZpYl9ub2RlICpmLCAqKmZwLCAqbmV4dDsKKwlpbnQgaTsKIAogCWZvcihpID0gMDsgaSA8IG9sZF9kaXZpc29yOyBpKyspIHsKLQkJZm9yKGYgPSBvbGRfaHRbaV07IGY7IGYgPSBmLT5mbl9uZXh0KSB7CisJCWZvcihmID0gb2xkX2h0W2ldOyBmOyBmID0gbmV4dCkgewogCQkJbmV4dCA9IGYtPmZuX25leHQ7CiAJCQlmb3IoZnAgPSBkbl9jaGFpbl9wKGYtPmZuX2tleSwgZHopOwogCQkJCSpmcCAmJiBkbl9rZXlfbGVxKCgqZnApLT5mbl9rZXksIGYtPmZuX2tleSk7CmRpZmYgLS1naXQgYS9uZXQvZHNhL0tjb25maWcgYi9uZXQvZHNhL0tjb25maWcKaW5kZXggODdiYjVmNC4uYzUzZGVkMiAxMDA2NDQKLS0tIGEvbmV0L2RzYS9LY29uZmlnCisrKyBiL25ldC9kc2EvS2NvbmZpZwpAQCAtNDEsMTIgKzQxLDEyIEBACiAJZGVmYXVsdCBuCiAKIGNvbmZpZyBORVRfRFNBX01WODhFNjEzMQotCWJvb2wgIk1hcnZlbGwgODhFNjA5NS82MDk1Ri82MTMxIGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnQiCisJYm9vbCAiTWFydmVsbCA4OEU2MDg1LzYwOTUvNjA5NUYvNjEzMSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0IgogCXNlbGVjdCBORVRfRFNBX01WODhFNlhYWAogCXNlbGVjdCBORVRfRFNBX01WODhFNlhYWF9ORUVEX1BQVQogCXNlbGVjdCBORVRfRFNBX1RBR19EU0EKIAktLS1oZWxwLS0tCi0JICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1hcnZlbGwgODhFNjA5NS82MDk1Ri82MTMxCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1hcnZlbGwgODhFNjA4NS82MDk1LzYwOTVGLzYxMzEKIAkgIGV0aGVybmV0IHN3aXRjaCBjaGlwcy4KIAogY29uZmlnIE5FVF9EU0FfTVY4OEU2MTIzXzYxXzY1CmRpZmYgLS1naXQgYS9uZXQvZHNhL212ODhlNjEzMS5jIGIvbmV0L2RzYS9tdjg4ZTYxMzEuYwppbmRleCAzZGE0MTg4Li40NWY3NDExIDEwMDY0NAotLS0gYS9uZXQvZHNhL212ODhlNjEzMS5jCisrKyBiL25ldC9kc2EvbXY4OGU2MTMxLmMKQEAgLTIwNyw4ICsyMDcsMTUgQEAKIAkgKiBtb2RlLCBidXQgZG8gbm90IGVuYWJsZSBmb3J3YXJkaW5nIG9mIHVua25vd24gdW5pY2FzdHMuCiAJICovCiAJdmFsID0gMHgwNDMzOwotCWlmIChwID09IGRzYV91cHN0cmVhbV9wb3J0KGRzKSkKKwlpZiAocCA9PSBkc2FfdXBzdHJlYW1fcG9ydChkcykpIHsKIAkJdmFsIHw9IDB4MDEwNDsKKwkJLyoKKwkJICogT24gNjA4NSwgdW5rbm93biBtdWx0aWNhc3QgZm9yd2FyZCBpcyBjb250cm9sbGVkCisJCSAqIGhlcmUgcmF0aGVyIHRoYW4gaW4gUG9ydCBDb250cm9sIDIgcmVnaXN0ZXIuCisJCSAqLworCQlpZiAocHMtPmlkID09IElEXzYwODUpCisJCQl2YWwgfD0gMHgwMDA4OworCX0KIAlpZiAoZHMtPmRzYV9wb3J0X21hc2sgJiAoMSA8PCBwKSkKIAkJdmFsIHw9IDB4MDEwMDsKIAlSRUdfV1JJVEUoYWRkciwgMHgwNCwgdmFsKTsKQEAgLTI1MSwxMCArMjU4LDE5IEBACiAJICogSWYgdGhpcyBpcyB0aGUgdXBzdHJlYW0gcG9ydCBmb3IgdGhpcyBzd2l0Y2gsIGVuYWJsZQogCSAqIGZvcndhcmRpbmcgb2YgdW5rbm93biBtdWx0aWNhc3QgYWRkcmVzc2VzLgogCSAqLwotCXZhbCA9IDB4MDA4MCB8IGRzYV91cHN0cmVhbV9wb3J0KGRzKTsKLQlpZiAocCA9PSBkc2FfdXBzdHJlYW1fcG9ydChkcykpCi0JCXZhbCB8PSAweDAwNDA7Ci0JUkVHX1dSSVRFKGFkZHIsIDB4MDgsIHZhbCk7CisJaWYgKHBzLT5pZCA9PSBJRF82MDg1KQorCQkvKgorCQkgKiBvbiA2MDg1LCBiaXRzIDM6MCBhcmUgcmVzZXJ2ZWQsIGJpdCA2IGNvbnRyb2wgQVJQCisJCSAqIG1pcnJvcmluZywgYW5kIG11bHRpY2FzdCBmb3J3YXJkIGlzIGhhbmRsZWQgaW4KKwkJICogUG9ydCBDb250cm9sIHJlZ2lzdGVyLgorCQkgKi8KKwkJUkVHX1dSSVRFKGFkZHIsIDB4MDgsIDB4MDA4MCk7CisJZWxzZSB7CisJCXZhbCA9IDB4MDA4MCB8IGRzYV91cHN0cmVhbV9wb3J0KGRzKTsKKwkJaWYgKHAgPT0gZHNhX3Vwc3RyZWFtX3BvcnQoZHMpKQorCQkJdmFsIHw9IDB4MDA0MDsKKwkJUkVHX1dSSVRFKGFkZHIsIDB4MDgsIHZhbCk7CisJfQogCiAJLyoKIAkgKiBSYXRlIENvbnRyb2w6IGRpc2FibGUgaW5ncmVzcyByYXRlIGxpbWl0aW5nLgpkaWZmIC0tZ2l0IGEvbmV0L2RzYS9zbGF2ZS5jIGIvbmV0L2RzYS9zbGF2ZS5jCmluZGV4IDY0Y2EyYTYuLjBhNDdiNmMgMTAwNjQ0Ci0tLSBhL25ldC9kc2Evc2xhdmUuYworKysgYi9uZXQvZHNhL3NsYXZlLmMKQEAgLTI4OCw3ICsyODgsNiBAQAogCS5nZXRfZHJ2aW5mbwkJPSBkc2Ffc2xhdmVfZ2V0X2RydmluZm8sCiAJLm53YXlfcmVzZXQJCT0gZHNhX3NsYXZlX253YXlfcmVzZXQsCiAJLmdldF9saW5rCQk9IGRzYV9zbGF2ZV9nZXRfbGluaywKLQkuc2V0X3NnCQkJPSBldGh0b29sX29wX3NldF9zZywKIAkuZ2V0X3N0cmluZ3MJCT0gZHNhX3NsYXZlX2dldF9zdHJpbmdzLAogCS5nZXRfZXRodG9vbF9zdGF0cwk9IGRzYV9zbGF2ZV9nZXRfZXRodG9vbF9zdGF0cywKIAkuZ2V0X3NzZXRfY291bnQJCT0gZHNhX3NsYXZlX2dldF9zc2V0X2NvdW50LApkaWZmIC0tZ2l0IGEvbmV0L2Vjb25ldC9hZl9lY29uZXQuYyBiL25ldC9lY29uZXQvYWZfZWNvbmV0LmMKaW5kZXggMTE2ZDNmZC4uYTFkOWYzNyAxMDA2NDQKLS0tIGEvbmV0L2Vjb25ldC9hZl9lY29uZXQuYworKysgYi9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jCkBAIC05MzUsNyArOTM1LDYgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXVuc2lnbmVkIGNoYXIgKmRhdGE7CiAJc3RydWN0IGF1bmhkciAqYWg7Ci0Jc3RydWN0IGlwaGRyICppcDsKIAlzaXplX3QgbGVuOwogCiAJd2hpbGUgKChza2IgPSBza2JfcmVjdl9kYXRhZ3JhbShzaywgMCwgMSwgJmVycikpID09IE5VTEwpIHsKQEAgLTk0OSw3ICs5NDgsNiBAQAogCWRhdGEgPSBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwogCWFoID0gKHN0cnVjdCBhdW5oZHIgKilkYXRhOwogCWxlbiA9IHNrYi0+bGVuIC0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwotCWlwID0gaXBfaGRyKHNrYik7CiAKIAlzd2l0Y2ggKGFoLT5jb2RlKQogCXsKQEAgLTk2MiwxMiArOTYwLDYgQEAKIAljYXNlIDQ6CiAJCWF1bl90eF9hY2soYWgtPmhhbmRsZSwgRUNUWVBFX1RSQU5TTUlUX05PVF9MSVNURU5JTkcpOwogCQlicmVhazsKLSNpZiAwCi0JCS8qIFRoaXMgaXNuJ3QgcXVpdGUgcmlnaHQgeWV0LiAqLwotCWNhc2UgNToKLQkJYXVuX3NlbmRfcmVzcG9uc2UoaXAtPnNhZGRyLCBhaC0+aGFuZGxlLCA2LCBhaC0+Y2IpOwotCQlicmVhazsKLSNlbmRpZgogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0RFQlVHICJ1bmtub3duIEFVTiBwYWNrZXQgKHR5cGUgJWQpXG4iLCBkYXRhWzBdKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9NYWtlZmlsZSBiL25ldC9pcHY0L01ha2VmaWxlCmluZGV4IDBkYzc3MmQuLmYyZGM2OWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L01ha2VmaWxlCisrKyBiL25ldC9pcHY0L01ha2VmaWxlCkBAIC0xMSw3ICsxMSw3IEBACiAJICAgICBkYXRhZ3JhbS5vIHJhdy5vIHVkcC5vIHVkcGxpdGUubyBcCiAJICAgICBhcnAubyBpY21wLm8gZGV2aW5ldC5vIGFmX2luZXQubyAgaWdtcC5vIFwKIAkgICAgIGZpYl9mcm9udGVuZC5vIGZpYl9zZW1hbnRpY3MubyBmaWJfdHJpZS5vIFwKLQkgICAgIGluZXRfZnJhZ21lbnQubworCSAgICAgaW5ldF9mcmFnbWVudC5vIHBpbmcubwogCiBvYmotJChDT05GSUdfU1lTQ1RMKSArPSBzeXNjdGxfbmV0X2lwdjQubwogb2JqLSQoQ09ORklHX1BST0NfRlMpICs9IHByb2MubwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYWZfaW5ldC5jIGIvbmV0L2lwdjQvYWZfaW5ldC5jCmluZGV4IDgwN2Q4M2MuLmNjMTQ2MzEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FmX2luZXQuYworKysgYi9uZXQvaXB2NC9hZl9pbmV0LmMKQEAgLTEwNSw2ICsxMDUsNyBAQAogI2luY2x1ZGUgPG5ldC90Y3AuaD4KICNpbmNsdWRlIDxuZXQvdWRwLmg+CiAjaW5jbHVkZSA8bmV0L3VkcGxpdGUuaD4KKyNpbmNsdWRlIDxuZXQvcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L3Jhdy5oPgpAQCAtMTUzLDcgKzE1NCw3IEBACiAJV0FSTl9PTihzay0+c2tfd21lbV9xdWV1ZWQpOwogCVdBUk5fT04oc2stPnNrX2ZvcndhcmRfYWxsb2MpOwogCi0Ja2ZyZWUoaW5ldC0+b3B0KTsKKwlrZnJlZShyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGluZXQtPmluZXRfb3B0LCAxKSk7CiAJZHN0X3JlbGVhc2UocmN1X2RlcmVmZXJlbmNlX2NoZWNrKHNrLT5za19kc3RfY2FjaGUsIDEpKTsKIAlza19yZWZjbnRfZGVidWdfZGVjKHNrKTsKIH0KQEAgLTEwMDgsNiArMTAwOSwxNCBAQAogCQkuZmxhZ3MgPSAgICAgIElORVRfUFJPVE9TV19QRVJNQU5FTlQsCiAgICAgICAgfSwKIAorICAgICAgIHsKKwkJLnR5cGUgPSAgICAgICBTT0NLX0RHUkFNLAorCQkucHJvdG9jb2wgPSAgIElQUFJPVE9fSUNNUCwKKwkJLnByb3QgPSAgICAgICAmcGluZ19wcm90LAorCQkub3BzID0gICAgICAgICZpbmV0X2RncmFtX29wcywKKwkJLm5vX2NoZWNrID0gICBVRFBfQ1NVTV9ERUZBVUxULAorCQkuZmxhZ3MgPSAgICAgIElORVRfUFJPVE9TV19SRVVTRSwKKyAgICAgICB9LAogCiAgICAgICAgewogCSAgICAgICAudHlwZSA9ICAgICAgIFNPQ0tfUkFXLApAQCAtMTEwMywxNCArMTExMiwxOSBAQAogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAlfX2JlMzIgb2xkX3NhZGRyID0gaW5ldC0+aW5ldF9zYWRkcjsKIAlfX2JlMzIgZGFkZHIgPSBpbmV0LT5pbmV0X2RhZGRyOworCXN0cnVjdCBmbG93aTQgKmZsNDsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKIAlfX2JlMzIgbmV3X3NhZGRyOworCXN0cnVjdCBpcF9vcHRpb25zX3JjdSAqaW5ldF9vcHQ7CiAKLQlpZiAoaW5ldC0+b3B0ICYmIGluZXQtPm9wdC0+c3JyKQotCQlkYWRkciA9IGluZXQtPm9wdC0+ZmFkZHI7CisJaW5ldF9vcHQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGluZXQtPmluZXRfb3B0LAorCQkJCQkgICAgIHNvY2tfb3duZWRfYnlfdXNlcihzaykpOworCWlmIChpbmV0X29wdCAmJiBpbmV0X29wdC0+b3B0LnNycikKKwkJZGFkZHIgPSBpbmV0X29wdC0+b3B0LmZhZGRyOwogCiAJLyogUXVlcnkgbmV3IHJvdXRlLiAqLwotCXJ0ID0gaXBfcm91dGVfY29ubmVjdChkYWRkciwgMCwgUlRfQ09OTl9GTEFHUyhzayksCisJZmw0ID0gJmluZXQtPmNvcmsuZmwudS5pcDQ7CisJcnQgPSBpcF9yb3V0ZV9jb25uZWN0KGZsNCwgZGFkZHIsIDAsIFJUX0NPTk5fRkxBR1Moc2spLAogCQkJICAgICAgc2stPnNrX2JvdW5kX2Rldl9pZiwgc2stPnNrX3Byb3RvY29sLAogCQkJICAgICAgaW5ldC0+aW5ldF9zcG9ydCwgaW5ldC0+aW5ldF9kcG9ydCwgc2ssIGZhbHNlKTsKIAlpZiAoSVNfRVJSKHJ0KSkKQEAgLTExMTgsNyArMTEzMiw3IEBACiAKIAlza19zZXR1cF9jYXBzKHNrLCAmcnQtPmRzdCk7CiAKLQluZXdfc2FkZHIgPSBydC0+cnRfc3JjOworCW5ld19zYWRkciA9IGZsNC0+c2FkZHI7CiAKIAlpZiAobmV3X3NhZGRyID09IG9sZF9zYWRkcikKIAkJcmV0dXJuIDA7CkBAIC0xMTQ3LDYgKzExNjEsOCBAQAogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAlzdHJ1Y3QgcnRhYmxlICpydCA9IChzdHJ1Y3QgcnRhYmxlICopX19za19kc3RfY2hlY2soc2ssIDApOwogCV9fYmUzMiBkYWRkcjsKKwlzdHJ1Y3QgaXBfb3B0aW9uc19yY3UgKmluZXRfb3B0OworCXN0cnVjdCBmbG93aTQgKmZsNDsKIAlpbnQgZXJyOwogCiAJLyogUm91dGUgaXMgT0ssIG5vdGhpbmcgdG8gZG8uICovCkBAIC0xMTU0LDEwICsxMTcwLDE0IEBACiAJCXJldHVybiAwOwogCiAJLyogUmVyb3V0ZS4gKi8KKwlyY3VfcmVhZF9sb2NrKCk7CisJaW5ldF9vcHQgPSByY3VfZGVyZWZlcmVuY2UoaW5ldC0+aW5ldF9vcHQpOwogCWRhZGRyID0gaW5ldC0+aW5ldF9kYWRkcjsKLQlpZiAoaW5ldC0+b3B0ICYmIGluZXQtPm9wdC0+c3JyKQotCQlkYWRkciA9IGluZXQtPm9wdC0+ZmFkZHI7Ci0JcnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMoc29ja19uZXQoc2spLCBzaywgZGFkZHIsIGluZXQtPmluZXRfc2FkZHIsCisJaWYgKGluZXRfb3B0ICYmIGluZXRfb3B0LT5vcHQuc3JyKQorCQlkYWRkciA9IGluZXRfb3B0LT5vcHQuZmFkZHI7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJZmw0ID0gJmluZXQtPmNvcmsuZmwudS5pcDQ7CisJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMoc29ja19uZXQoc2spLCBmbDQsIHNrLCBkYWRkciwgaW5ldC0+aW5ldF9zYWRkciwKIAkJCQkgICBpbmV0LT5pbmV0X2Rwb3J0LCBpbmV0LT5pbmV0X3Nwb3J0LAogCQkJCSAgIHNrLT5za19wcm90b2NvbCwgUlRfQ09OTl9GTEFHUyhzayksCiAJCQkJICAgc2stPnNrX2JvdW5kX2Rldl9pZik7CkBAIC0xMTg2LDcgKzEyMDYsNyBAQAogCiBzdGF0aWMgaW50IGluZXRfZ3NvX3NlbmRfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaXBoZHIgKmlwaDsKKwljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDsKIAljb25zdCBzdHJ1Y3QgbmV0X3Byb3RvY29sICpvcHM7CiAJaW50IHByb3RvOwogCWludCBpaGw7CkBAIC0xMjkzLDcgKzEzMTMsNyBAQAogCWNvbnN0IHN0cnVjdCBuZXRfcHJvdG9jb2wgKm9wczsKIAlzdHJ1Y3Qgc2tfYnVmZiAqKnBwID0gTlVMTDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqcDsKLQlzdHJ1Y3QgaXBoZHIgKmlwaDsKKwljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDsKIAl1bnNpZ25lZCBpbnQgaGxlbjsKIAl1bnNpZ25lZCBpbnQgb2ZmOwogCXVuc2lnbmVkIGludCBpZDsKQEAgLTE1MTYsNiArMTUzNiw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvY29sIGljbXBfcHJvdG9jb2wgPSB7CiAJLmhhbmRsZXIgPQlpY21wX3JjdiwKKwkuZXJyX2hhbmRsZXIgPQlwaW5nX2VyciwKIAkubm9fcG9saWN5ID0JMSwKIAkubmV0bnNfb2sgPQkxLAogfTsKQEAgLTE2MzEsNiArMTY1MiwxMCBAQAogCWlmIChyYykKIAkJZ290byBvdXRfdW5yZWdpc3Rlcl91ZHBfcHJvdG87CiAKKwlyYyA9IHByb3RvX3JlZ2lzdGVyKCZwaW5nX3Byb3QsIDEpOworCWlmIChyYykKKwkJZ290byBvdXRfdW5yZWdpc3Rlcl9yYXdfcHJvdG87CisKIAkvKgogCSAqCVRlbGwgU09DS0VUIHRoYXQgd2UgYXJlIGFsaXZlLi4uCiAJICovCkBAIC0xNjg2LDYgKzE3MTEsOCBAQAogCS8qIEFkZCBVRFAtTGl0ZSAoUkZDIDM4MjgpICovCiAJdWRwbGl0ZTRfcmVnaXN0ZXIoKTsKIAorCXBpbmdfaW5pdCgpOworCiAJLyoKIAkgKglTZXQgdGhlIElDTVAgbGF5ZXIgdXAKIAkgKi8KQEAgLTE3MTYsNiArMTc0Myw4IEBACiAJcmMgPSAwOwogb3V0OgogCXJldHVybiByYzsKK291dF91bnJlZ2lzdGVyX3Jhd19wcm90bzoKKwlwcm90b191bnJlZ2lzdGVyKCZyYXdfcHJvdCk7CiBvdXRfdW5yZWdpc3Rlcl91ZHBfcHJvdG86CiAJcHJvdG9fdW5yZWdpc3RlcigmdWRwX3Byb3QpOwogb3V0X3VucmVnaXN0ZXJfdGNwX3Byb3RvOgpAQCAtMTc0MCwxMSArMTc2OSwxNSBAQAogCQlnb3RvIG91dF90Y3A7CiAJaWYgKHVkcDRfcHJvY19pbml0KCkpCiAJCWdvdG8gb3V0X3VkcDsKKwlpZiAocGluZ19wcm9jX2luaXQoKSkKKwkJZ290byBvdXRfcGluZzsKIAlpZiAoaXBfbWlzY19wcm9jX2luaXQoKSkKIAkJZ290byBvdXRfbWlzYzsKIG91dDoKIAlyZXR1cm4gcmM7CiBvdXRfbWlzYzoKKwlwaW5nX3Byb2NfZXhpdCgpOworb3V0X3Bpbmc6CiAJdWRwNF9wcm9jX2V4aXQoKTsKIG91dF91ZHA6CiAJdGNwNF9wcm9jX2V4aXQoKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FoNC5jIGIvbmV0L2lwdjQvYWg0LmMKaW5kZXggNDI4NmZkMy4uYzFmNDE1NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvYWg0LmMKKysrIGIvbmV0L2lwdjQvYWg0LmMKQEAgLTczLDcgKzczLDcgQEAKICAqIGludG8gSVAgaGVhZGVyIGZvciBpY3YgY2FsY3VsYXRpb24uIE9wdGlvbnMgYXJlIGFscmVhZHkgY2hlY2tlZAogICogZm9yIHZhbGlkaXR5LCBzbyBwYXJhbm9pYSBpcyBub3QgcmVxdWlyZWQuICovCiAKLXN0YXRpYyBpbnQgaXBfY2xlYXJfbXV0YWJsZV9vcHRpb25zKHN0cnVjdCBpcGhkciAqaXBoLCBfX2JlMzIgKmRhZGRyKQorc3RhdGljIGludCBpcF9jbGVhcl9tdXRhYmxlX29wdGlvbnMoY29uc3Qgc3RydWN0IGlwaGRyICppcGgsIF9fYmUzMiAqZGFkZHIpCiB7CiAJdW5zaWduZWQgY2hhciAqIG9wdHB0ciA9ICh1bnNpZ25lZCBjaGFyKikoaXBoKzEpOwogCWludCAgbCA9IGlwaC0+aWhsKjQgLSBzaXplb2Yoc3RydWN0IGlwaGRyKTsKQEAgLTM5Niw3ICszOTYsNyBAQAogc3RhdGljIHZvaWQgYWg0X2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5mbykKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0+ZGV2KTsKLQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSAoY29uc3Qgc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOwogCXN0cnVjdCBpcF9hdXRoX2hkciAqYWggPSAoc3RydWN0IGlwX2F1dGhfaGRyICopKHNrYi0+ZGF0YSsoaXBoLT5paGw8PDIpKTsKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKIApAQCAtNDA0LDcgKzQwNCw4IEBACiAJICAgIGljbXBfaGRyKHNrYiktPmNvZGUgIT0gSUNNUF9GUkFHX05FRURFRCkKIAkJcmV0dXJuOwogCi0JeCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgc2tiLT5tYXJrLCAoeGZybV9hZGRyZXNzX3QgKikmaXBoLT5kYWRkciwgYWgtPnNwaSwgSVBQUk9UT19BSCwgQUZfSU5FVCk7CisJeCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgc2tiLT5tYXJrLCAoY29uc3QgeGZybV9hZGRyZXNzX3QgKikmaXBoLT5kYWRkciwKKwkJCSAgICAgIGFoLT5zcGksIElQUFJPVE9fQUgsIEFGX0lORVQpOwogCWlmICgheCkKIAkJcmV0dXJuOwogCXByaW50ayhLRVJOX0RFQlVHICJwbXR1IGRpc2NvdmVyeSBvbiBTQSBBSC8lMDh4LyUwOHhcbiIsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9jaXBzb19pcHY0LmMgYi9uZXQvaXB2NC9jaXBzb19pcHY0LmMKaW5kZXggYTBhZjdlYS4uMmIzYzIzYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvY2lwc29faXB2NC5jCisrKyBiL25ldC9pcHY0L2NpcHNvX2lwdjQuYwpAQCAtMTg1Nyw2ICsxODU3LDExIEBACiAJcmV0dXJuIENJUFNPX1Y0X0hEUl9MRU4gKyByZXRfdmFsOwogfQogCitzdGF0aWMgdm9pZCBvcHRfa2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlrZnJlZShjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlwX29wdGlvbnNfcmN1LCByY3UpKTsKK30KKwogLyoqCiAgKiBjaXBzb192NF9zb2NrX3NldGF0dHIgLSBBZGQgYSBDSVBTTyBvcHRpb24gdG8gYSBzb2NrZXQKICAqIEBzazogdGhlIHNvY2tldApAQCAtMTg3OSw3ICsxODg0LDcgQEAKIAl1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMOwogCXUzMiBidWZfbGVuOwogCXUzMiBvcHRfbGVuOwotCXN0cnVjdCBpcF9vcHRpb25zICpvcHQgPSBOVUxMOworCXN0cnVjdCBpcF9vcHRpb25zX3JjdSAqb2xkLCAqb3B0ID0gTlVMTDsKIAlzdHJ1Y3QgaW5ldF9zb2NrICpza19pbmV0OwogCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqc2tfY29ubjsKIApAQCAtMTkxNSwyMiArMTkyMCwyNSBAQAogCQlyZXRfdmFsID0gLUVOT01FTTsKIAkJZ290byBzb2NrZXRfc2V0YXR0cl9mYWlsdXJlOwogCX0KLQltZW1jcHkob3B0LT5fX2RhdGEsIGJ1ZiwgYnVmX2xlbik7Ci0Jb3B0LT5vcHRsZW4gPSBvcHRfbGVuOwotCW9wdC0+Y2lwc28gPSBzaXplb2Yoc3RydWN0IGlwaGRyKTsKKwltZW1jcHkob3B0LT5vcHQuX19kYXRhLCBidWYsIGJ1Zl9sZW4pOworCW9wdC0+b3B0Lm9wdGxlbiA9IG9wdF9sZW47CisJb3B0LT5vcHQuY2lwc28gPSBzaXplb2Yoc3RydWN0IGlwaGRyKTsKIAlrZnJlZShidWYpOwogCWJ1ZiA9IE5VTEw7CiAKIAlza19pbmV0ID0gaW5ldF9zayhzayk7CisKKwlvbGQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHNrX2luZXQtPmluZXRfb3B0LCBzb2NrX293bmVkX2J5X3VzZXIoc2spKTsKIAlpZiAoc2tfaW5ldC0+aXNfaWNzaykgewogCQlza19jb25uID0gaW5ldF9jc2soc2spOwotCQlpZiAoc2tfaW5ldC0+b3B0KQotCQkJc2tfY29ubi0+aWNza19leHRfaGRyX2xlbiAtPSBza19pbmV0LT5vcHQtPm9wdGxlbjsKLQkJc2tfY29ubi0+aWNza19leHRfaGRyX2xlbiArPSBvcHQtPm9wdGxlbjsKKwkJaWYgKG9sZCkKKwkJCXNrX2Nvbm4tPmljc2tfZXh0X2hkcl9sZW4gLT0gb2xkLT5vcHQub3B0bGVuOworCQlza19jb25uLT5pY3NrX2V4dF9oZHJfbGVuICs9IG9wdC0+b3B0Lm9wdGxlbjsKIAkJc2tfY29ubi0+aWNza19zeW5jX21zcyhzaywgc2tfY29ubi0+aWNza19wbXR1X2Nvb2tpZSk7CiAJfQotCW9wdCA9IHhjaGcoJnNrX2luZXQtPm9wdCwgb3B0KTsKLQlrZnJlZShvcHQpOworCXJjdV9hc3NpZ25fcG9pbnRlcihza19pbmV0LT5pbmV0X29wdCwgb3B0KTsKKwlpZiAob2xkKQorCQljYWxsX3JjdSgmb2xkLT5yY3UsIG9wdF9rZnJlZV9yY3UpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTE5NjAsNyArMTk2OCw3IEBACiAJdW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDsKIAl1MzIgYnVmX2xlbjsKIAl1MzIgb3B0X2xlbjsKLQlzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0ID0gTlVMTDsKKwlzdHJ1Y3QgaXBfb3B0aW9uc19yY3UgKm9wdCA9IE5VTEw7CiAJc3RydWN0IGluZXRfcmVxdWVzdF9zb2NrICpyZXFfaW5ldDsKIAogCS8qIFdlIGFsbG9jYXRlIHRoZSBtYXhpbXVtIENJUFNPIG9wdGlvbiBzaXplIGhlcmUgc28gd2UgYXJlIHByb2JhYmx5CkBAIC0xOTg4LDE1ICsxOTk2LDE2IEBACiAJCXJldF92YWwgPSAtRU5PTUVNOwogCQlnb3RvIHJlcV9zZXRhdHRyX2ZhaWx1cmU7CiAJfQotCW1lbWNweShvcHQtPl9fZGF0YSwgYnVmLCBidWZfbGVuKTsKLQlvcHQtPm9wdGxlbiA9IG9wdF9sZW47Ci0Jb3B0LT5jaXBzbyA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpOworCW1lbWNweShvcHQtPm9wdC5fX2RhdGEsIGJ1ZiwgYnVmX2xlbik7CisJb3B0LT5vcHQub3B0bGVuID0gb3B0X2xlbjsKKwlvcHQtPm9wdC5jaXBzbyA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpOwogCWtmcmVlKGJ1Zik7CiAJYnVmID0gTlVMTDsKIAogCXJlcV9pbmV0ID0gaW5ldF9yc2socmVxKTsKIAlvcHQgPSB4Y2hnKCZyZXFfaW5ldC0+b3B0LCBvcHQpOwotCWtmcmVlKG9wdCk7CisJaWYgKG9wdCkKKwkJY2FsbF9yY3UoJm9wdC0+cmN1LCBvcHRfa2ZyZWVfcmN1KTsKIAogCXJldHVybiAwOwogCkBAIC0yMDE2LDM0ICsyMDI1LDM0IEBACiAgKiB2YWx1ZXMgb24gZmFpbHVyZS4KICAqCiAgKi8KLXN0YXRpYyBpbnQgY2lwc29fdjRfZGVsb3B0KHN0cnVjdCBpcF9vcHRpb25zICoqb3B0X3B0cikKK3N0YXRpYyBpbnQgY2lwc29fdjRfZGVsb3B0KHN0cnVjdCBpcF9vcHRpb25zX3JjdSAqKm9wdF9wdHIpCiB7CiAJaW50IGhkcl9kZWx0YSA9IDA7Ci0Jc3RydWN0IGlwX29wdGlvbnMgKm9wdCA9ICpvcHRfcHRyOworCXN0cnVjdCBpcF9vcHRpb25zX3JjdSAqb3B0ID0gKm9wdF9wdHI7CiAKLQlpZiAob3B0LT5zcnIgfHwgb3B0LT5yciB8fCBvcHQtPnRzIHx8IG9wdC0+cm91dGVyX2FsZXJ0KSB7CisJaWYgKG9wdC0+b3B0LnNyciB8fCBvcHQtPm9wdC5yciB8fCBvcHQtPm9wdC50cyB8fCBvcHQtPm9wdC5yb3V0ZXJfYWxlcnQpIHsKIAkJdTggY2lwc29fbGVuOwogCQl1OCBjaXBzb19vZmY7CiAJCXVuc2lnbmVkIGNoYXIgKmNpcHNvX3B0cjsKIAkJaW50IGl0ZXI7CiAJCWludCBvcHRsZW5fbmV3OwogCi0JCWNpcHNvX29mZiA9IG9wdC0+Y2lwc28gLSBzaXplb2Yoc3RydWN0IGlwaGRyKTsKLQkJY2lwc29fcHRyID0gJm9wdC0+X19kYXRhW2NpcHNvX29mZl07CisJCWNpcHNvX29mZiA9IG9wdC0+b3B0LmNpcHNvIC0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7CisJCWNpcHNvX3B0ciA9ICZvcHQtPm9wdC5fX2RhdGFbY2lwc29fb2ZmXTsKIAkJY2lwc29fbGVuID0gY2lwc29fcHRyWzFdOwogCi0JCWlmIChvcHQtPnNyciA+IG9wdC0+Y2lwc28pCi0JCQlvcHQtPnNyciAtPSBjaXBzb19sZW47Ci0JCWlmIChvcHQtPnJyID4gb3B0LT5jaXBzbykKLQkJCW9wdC0+cnIgLT0gY2lwc29fbGVuOwotCQlpZiAob3B0LT50cyA+IG9wdC0+Y2lwc28pCi0JCQlvcHQtPnRzIC09IGNpcHNvX2xlbjsKLQkJaWYgKG9wdC0+cm91dGVyX2FsZXJ0ID4gb3B0LT5jaXBzbykKLQkJCW9wdC0+cm91dGVyX2FsZXJ0IC09IGNpcHNvX2xlbjsKLQkJb3B0LT5jaXBzbyA9IDA7CisJCWlmIChvcHQtPm9wdC5zcnIgPiBvcHQtPm9wdC5jaXBzbykKKwkJCW9wdC0+b3B0LnNyciAtPSBjaXBzb19sZW47CisJCWlmIChvcHQtPm9wdC5yciA+IG9wdC0+b3B0LmNpcHNvKQorCQkJb3B0LT5vcHQucnIgLT0gY2lwc29fbGVuOworCQlpZiAob3B0LT5vcHQudHMgPiBvcHQtPm9wdC5jaXBzbykKKwkJCW9wdC0+b3B0LnRzIC09IGNpcHNvX2xlbjsKKwkJaWYgKG9wdC0+b3B0LnJvdXRlcl9hbGVydCA+IG9wdC0+b3B0LmNpcHNvKQorCQkJb3B0LT5vcHQucm91dGVyX2FsZXJ0IC09IGNpcHNvX2xlbjsKKwkJb3B0LT5vcHQuY2lwc28gPSAwOwogCiAJCW1lbW1vdmUoY2lwc29fcHRyLCBjaXBzb19wdHIgKyBjaXBzb19sZW4sCi0JCQlvcHQtPm9wdGxlbiAtIGNpcHNvX29mZiAtIGNpcHNvX2xlbik7CisJCQlvcHQtPm9wdC5vcHRsZW4gLSBjaXBzb19vZmYgLSBjaXBzb19sZW4pOwogCiAJCS8qIGRldGVybWluaW5nIHRoZSBuZXcgdG90YWwgb3B0aW9uIGxlbmd0aCBpcyB0cmlja3kgYmVjYXVzZSBvZgogCQkgKiB0aGUgcGFkZGluZyBuZWNlc3NhcnksIHRoZSBvbmx5IHRoaW5nIGkgY2FuIHRoaW5rIHRvIGRvIGF0CkBAIC0yMDUyLDIxICsyMDYxLDIxIEBACiAJCSAqIGZyb20gdGhlcmUgd2UgY2FuIGRldGVybWluZSB0aGUgbmV3IHRvdGFsIG9wdGlvbiBsZW5ndGggKi8KIAkJaXRlciA9IDA7CiAJCW9wdGxlbl9uZXcgPSAwOwotCQl3aGlsZSAoaXRlciA8IG9wdC0+b3B0bGVuKQotCQkJaWYgKG9wdC0+X19kYXRhW2l0ZXJdICE9IElQT1BUX05PUCkgewotCQkJCWl0ZXIgKz0gb3B0LT5fX2RhdGFbaXRlciArIDFdOworCQl3aGlsZSAoaXRlciA8IG9wdC0+b3B0Lm9wdGxlbikKKwkJCWlmIChvcHQtPm9wdC5fX2RhdGFbaXRlcl0gIT0gSVBPUFRfTk9QKSB7CisJCQkJaXRlciArPSBvcHQtPm9wdC5fX2RhdGFbaXRlciArIDFdOwogCQkJCW9wdGxlbl9uZXcgPSBpdGVyOwogCQkJfSBlbHNlCiAJCQkJaXRlcisrOwotCQloZHJfZGVsdGEgPSBvcHQtPm9wdGxlbjsKLQkJb3B0LT5vcHRsZW4gPSAob3B0bGVuX25ldyArIDMpICYgfjM7Ci0JCWhkcl9kZWx0YSAtPSBvcHQtPm9wdGxlbjsKKwkJaGRyX2RlbHRhID0gb3B0LT5vcHQub3B0bGVuOworCQlvcHQtPm9wdC5vcHRsZW4gPSAob3B0bGVuX25ldyArIDMpICYgfjM7CisJCWhkcl9kZWx0YSAtPSBvcHQtPm9wdC5vcHRsZW47CiAJfSBlbHNlIHsKIAkJLyogb25seSB0aGUgY2lwc28gb3B0aW9uIHdhcyBwcmVzZW50IG9uIHRoZSBzb2NrZXQgc28gd2UgY2FuCiAJCSAqIHJlbW92ZSB0aGUgZW50aXJlIG9wdGlvbiBzdHJ1Y3QgKi8KIAkJKm9wdF9wdHIgPSBOVUxMOwotCQloZHJfZGVsdGEgPSBvcHQtPm9wdGxlbjsKLQkJa2ZyZWUob3B0KTsKKwkJaGRyX2RlbHRhID0gb3B0LT5vcHQub3B0bGVuOworCQljYWxsX3JjdSgmb3B0LT5yY3UsIG9wdF9rZnJlZV9yY3UpOwogCX0KIAogCXJldHVybiBoZHJfZGVsdGE7CkBAIC0yMDgzLDE1ICsyMDkyLDE1IEBACiB2b2lkIGNpcHNvX3Y0X3NvY2tfZGVsYXR0cihzdHJ1Y3Qgc29jayAqc2spCiB7CiAJaW50IGhkcl9kZWx0YTsKLQlzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0OworCXN0cnVjdCBpcF9vcHRpb25zX3JjdSAqb3B0OwogCXN0cnVjdCBpbmV0X3NvY2sgKnNrX2luZXQ7CiAKIAlza19pbmV0ID0gaW5ldF9zayhzayk7Ci0Jb3B0ID0gc2tfaW5ldC0+b3B0OwotCWlmIChvcHQgPT0gTlVMTCB8fCBvcHQtPmNpcHNvID09IDApCisJb3B0ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChza19pbmV0LT5pbmV0X29wdCwgMSk7CisJaWYgKG9wdCA9PSBOVUxMIHx8IG9wdC0+b3B0LmNpcHNvID09IDApCiAJCXJldHVybjsKIAotCWhkcl9kZWx0YSA9IGNpcHNvX3Y0X2RlbG9wdCgmc2tfaW5ldC0+b3B0KTsKKwloZHJfZGVsdGEgPSBjaXBzb192NF9kZWxvcHQoJnNrX2luZXQtPmluZXRfb3B0KTsKIAlpZiAoc2tfaW5ldC0+aXNfaWNzayAmJiBoZHJfZGVsdGEgPiAwKSB7CiAJCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqc2tfY29ubiA9IGluZXRfY3NrKHNrKTsKIAkJc2tfY29ubi0+aWNza19leHRfaGRyX2xlbiAtPSBoZHJfZGVsdGE7CkBAIC0yMTA5LDEyICsyMTE4LDEyIEBACiAgKi8KIHZvaWQgY2lwc29fdjRfcmVxX2RlbGF0dHIoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQogewotCXN0cnVjdCBpcF9vcHRpb25zICpvcHQ7CisJc3RydWN0IGlwX29wdGlvbnNfcmN1ICpvcHQ7CiAJc3RydWN0IGluZXRfcmVxdWVzdF9zb2NrICpyZXFfaW5ldDsKIAogCXJlcV9pbmV0ID0gaW5ldF9yc2socmVxKTsKIAlvcHQgPSByZXFfaW5ldC0+b3B0OwotCWlmIChvcHQgPT0gTlVMTCB8fCBvcHQtPmNpcHNvID09IDApCisJaWYgKG9wdCA9PSBOVUxMIHx8IG9wdC0+b3B0LmNpcHNvID09IDApCiAJCXJldHVybjsKIAogCWNpcHNvX3Y0X2RlbG9wdCgmcmVxX2luZXQtPm9wdCk7CkBAIC0yMTg0LDE0ICsyMTkzLDE4IEBACiAgKi8KIGludCBjaXBzb192NF9zb2NrX2dldGF0dHIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQogewotCXN0cnVjdCBpcF9vcHRpb25zICpvcHQ7CisJc3RydWN0IGlwX29wdGlvbnNfcmN1ICpvcHQ7CisJaW50IHJlcyA9IC1FTk9NU0c7CiAKLQlvcHQgPSBpbmV0X3NrKHNrKS0+b3B0OwotCWlmIChvcHQgPT0gTlVMTCB8fCBvcHQtPmNpcHNvID09IDApCi0JCXJldHVybiAtRU5PTVNHOwotCi0JcmV0dXJuIGNpcHNvX3Y0X2dldGF0dHIob3B0LT5fX2RhdGEgKyBvcHQtPmNpcHNvIC0gc2l6ZW9mKHN0cnVjdCBpcGhkciksCi0JCQkJc2VjYXR0cik7CisJcmN1X3JlYWRfbG9jaygpOworCW9wdCA9IHJjdV9kZXJlZmVyZW5jZShpbmV0X3NrKHNrKS0+aW5ldF9vcHQpOworCWlmIChvcHQgJiYgb3B0LT5vcHQuY2lwc28pCisJCXJlcyA9IGNpcHNvX3Y0X2dldGF0dHIob3B0LT5vcHQuX19kYXRhICsKKwkJCQkJCW9wdC0+b3B0LmNpcHNvIC0KKwkJCQkJCXNpemVvZihzdHJ1Y3QgaXBoZHIpLAorCQkJCSAgICAgICBzZWNhdHRyKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gcmVzOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2RhdGFncmFtLmMgYi9uZXQvaXB2NC9kYXRhZ3JhbS5jCmluZGV4IDg1YmQyNGMuLjQyNGZhZmIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2RhdGFncmFtLmMKKysrIGIvbmV0L2lwdjQvZGF0YWdyYW0uYwpAQCAtMjQsNiArMjQsNyBAQAogewogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnVzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopIHVhZGRyOworCXN0cnVjdCBmbG93aTQgKmZsNDsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKIAlfX2JlMzIgc2FkZHI7CiAJaW50IG9pZjsKQEAgLTM4LDYgKzM5LDggQEAKIAogCXNrX2RzdF9yZXNldChzayk7CiAKKwlsb2NrX3NvY2soc2spOworCiAJb2lmID0gc2stPnNrX2JvdW5kX2Rldl9pZjsKIAlzYWRkciA9IGluZXQtPmluZXRfc2FkZHI7CiAJaWYgKGlwdjRfaXNfbXVsdGljYXN0KHVzaW4tPnNpbl9hZGRyLnNfYWRkcikpIHsKQEAgLTQ2LDcgKzQ5LDggQEAKIAkJaWYgKCFzYWRkcikKIAkJCXNhZGRyID0gaW5ldC0+bWNfYWRkcjsKIAl9Ci0JcnQgPSBpcF9yb3V0ZV9jb25uZWN0KHVzaW4tPnNpbl9hZGRyLnNfYWRkciwgc2FkZHIsCisJZmw0ID0gJmluZXQtPmNvcmsuZmwudS5pcDQ7CisJcnQgPSBpcF9yb3V0ZV9jb25uZWN0KGZsNCwgdXNpbi0+c2luX2FkZHIuc19hZGRyLCBzYWRkciwKIAkJCSAgICAgIFJUX0NPTk5fRkxBR1Moc2spLCBvaWYsCiAJCQkgICAgICBzay0+c2tfcHJvdG9jb2wsCiAJCQkgICAgICBpbmV0LT5pbmV0X3Nwb3J0LCB1c2luLT5zaW5fcG9ydCwgc2ssIHRydWUpOwpAQCAtNTQsMjYgKzU4LDMwIEBACiAJCWVyciA9IFBUUl9FUlIocnQpOwogCQlpZiAoZXJyID09IC1FTkVUVU5SRUFDSCkKIAkJCUlQX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIElQU1RBVFNfTUlCX09VVE5PUk9VVEVTKTsKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKChydC0+cnRfZmxhZ3MgJiBSVENGX0JST0FEQ0FTVCkgJiYgIXNvY2tfZmxhZyhzaywgU09DS19CUk9BRENBU1QpKSB7CiAJCWlwX3J0X3B1dChydCk7Ci0JCXJldHVybiAtRUFDQ0VTOworCQllcnIgPSAtRUFDQ0VTOworCQlnb3RvIG91dDsKIAl9CiAJaWYgKCFpbmV0LT5pbmV0X3NhZGRyKQotCQlpbmV0LT5pbmV0X3NhZGRyID0gcnQtPnJ0X3NyYzsJLyogVXBkYXRlIHNvdXJjZSBhZGRyZXNzICovCisJCWluZXQtPmluZXRfc2FkZHIgPSBmbDQtPnNhZGRyOwkvKiBVcGRhdGUgc291cmNlIGFkZHJlc3MgKi8KIAlpZiAoIWluZXQtPmluZXRfcmN2X3NhZGRyKSB7Ci0JCWluZXQtPmluZXRfcmN2X3NhZGRyID0gcnQtPnJ0X3NyYzsKKwkJaW5ldC0+aW5ldF9yY3Zfc2FkZHIgPSBmbDQtPnNhZGRyOwogCQlpZiAoc2stPnNrX3Byb3QtPnJlaGFzaCkKIAkJCXNrLT5za19wcm90LT5yZWhhc2goc2spOwogCX0KLQlpbmV0LT5pbmV0X2RhZGRyID0gcnQtPnJ0X2RzdDsKKwlpbmV0LT5pbmV0X2RhZGRyID0gZmw0LT5kYWRkcjsKIAlpbmV0LT5pbmV0X2Rwb3J0ID0gdXNpbi0+c2luX3BvcnQ7CiAJc2stPnNrX3N0YXRlID0gVENQX0VTVEFCTElTSEVEOwogCWluZXQtPmluZXRfaWQgPSBqaWZmaWVzOwogCiAJc2tfZHN0X3NldChzaywgJnJ0LT5kc3QpOwotCXJldHVybiAwOworCWVyciA9IDA7CitvdXQ6CisJcmVsZWFzZV9zb2NrKHNrKTsKKwlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTChpcDRfZGF0YWdyYW1fY29ubmVjdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9kZXZpbmV0LmMgYi9uZXQvaXB2NC9kZXZpbmV0LmMKaW5kZXggNTM0NWIwYi4uMGQ0YTE4NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZGV2aW5ldC5jCisrKyBiL25ldC9pcHY0L2RldmluZXQuYwpAQCAtMTM2OSw3ICsxMzY5LDcgQEAKIAogc3RhdGljIHNpemVfdCBpbmV0X2dldF9saW5rX2FmX3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcnRubChkZXYpOworCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IHJjdV9kZXJlZmVyZW5jZV9ydG5sKGRldi0+aXBfcHRyKTsKIAogCWlmICghaW5fZGV2KQogCQlyZXR1cm4gMDsKQEAgLTEzNzksNyArMTM3OSw3IEBACiAKIHN0YXRpYyBpbnQgaW5ldF9maWxsX2xpbmtfYWYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBfX2luX2Rldl9nZXRfcnRubChkZXYpOworCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IHJjdV9kZXJlZmVyZW5jZV9ydG5sKGRldi0+aXBfcHRyKTsKIAlzdHJ1Y3QgbmxhdHRyICpubGE7CiAJaW50IGk7CiAKQEAgLTE2ODAsNyArMTY4MCw3IEBACiAJCXJldHVybjsKIAogCWNuZi0+c3lzY3RsID0gTlVMTDsKLQl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZSh0LT5zeXNjdGxfaGVhZGVyKTsKKwl1bnJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUodC0+c3lzY3RsX2hlYWRlcik7CiAJa2ZyZWUodC0+ZGV2X25hbWUpOwogCWtmcmVlKHQpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZXNwNC5jIGIvbmV0L2lwdjQvZXNwNC5jCmluZGV4IDAzZjk5NGIuLmE1YjQxMzQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2VzcDQuYworKysgYi9uZXQvaXB2NC9lc3A0LmMKQEAgLTI3Niw3ICsyNzYsNyBAQAogCiBzdGF0aWMgaW50IGVzcF9pbnB1dF9kb25lMihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKQogewotCXN0cnVjdCBpcGhkciAqaXBoOworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoOwogCXN0cnVjdCB4ZnJtX3N0YXRlICp4ID0geGZybV9pbnB1dF9zdGF0ZShza2IpOwogCXN0cnVjdCBlc3BfZGF0YSAqZXNwID0geC0+ZGF0YTsKIAlzdHJ1Y3QgY3J5cHRvX2FlYWQgKmFlYWQgPSBlc3AtPmFlYWQ7CkBAIC00ODQsNyArNDg0LDcgQEAKIHN0YXRpYyB2b2lkIGVzcDRfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZvKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLT5kZXYpOwotCXN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKKwljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCA9IChjb25zdCBzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7CiAJc3RydWN0IGlwX2VzcF9oZHIgKmVzcGggPSAoc3RydWN0IGlwX2VzcF9oZHIgKikoc2tiLT5kYXRhKyhpcGgtPmlobDw8MikpOwogCXN0cnVjdCB4ZnJtX3N0YXRlICp4OwogCkBAIC00OTIsNyArNDkyLDggQEAKIAkgICAgaWNtcF9oZHIoc2tiKS0+Y29kZSAhPSBJQ01QX0ZSQUdfTkVFREVEKQogCQlyZXR1cm47CiAKLQl4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBza2ItPm1hcmssICh4ZnJtX2FkZHJlc3NfdCAqKSZpcGgtPmRhZGRyLCBlc3BoLT5zcGksIElQUFJPVE9fRVNQLCBBRl9JTkVUKTsKKwl4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBza2ItPm1hcmssIChjb25zdCB4ZnJtX2FkZHJlc3NfdCAqKSZpcGgtPmRhZGRyLAorCQkJICAgICAgZXNwaC0+c3BpLCBJUFBST1RPX0VTUCwgQUZfSU5FVCk7CiAJaWYgKCF4KQogCQlyZXR1cm47CiAJTkVUREVCVUcoS0VSTl9ERUJVRyAicG10dSBkaXNjb3Zlcnkgb24gU0EgRVNQLyUwOHgvJTA4eFxuIiwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jIGIvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMKaW5kZXggNDUxMDg4My4uMjI1MjQ3MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMKKysrIGIvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxuZXQvYXJwLmg+CiAjaW5jbHVkZSA8bmV0L2lwX2ZpYi5oPgogI2luY2x1ZGUgPG5ldC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxuZXQveGZybS5oPgogCiAjaWZuZGVmIENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMKIApAQCAtMTg4LDkgKzE4OSw5IEBACiAgKiAtIGNoZWNrLCB0aGF0IHBhY2tldCBhcnJpdmVkIGZyb20gZXhwZWN0ZWQgcGh5c2ljYWwgaW50ZXJmYWNlLgogICogY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jaygpCiAgKi8KLWludCBmaWJfdmFsaWRhdGVfc291cmNlKF9fYmUzMiBzcmMsIF9fYmUzMiBkc3QsIHU4IHRvcywgaW50IG9pZiwKLQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUzMiAqc3BlY19kc3QsCi0JCQl1MzIgKml0YWcsIHUzMiBtYXJrKQoraW50IGZpYl92YWxpZGF0ZV9zb3VyY2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIHNyYywgX19iZTMyIGRzdCwgdTggdG9zLAorCQkJaW50IG9pZiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTMyICpzcGVjX2RzdCwKKwkJCXUzMiAqaXRhZykKIHsKIAlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7CiAJc3RydWN0IGZsb3dpNCBmbDQ7CkBAIC0yMDIsNyArMjAzLDYgQEAKIAogCWZsNC5mbG93aTRfb2lmID0gMDsKIAlmbDQuZmxvd2k0X2lpZiA9IG9pZjsKLQlmbDQuZmxvd2k0X21hcmsgPSBtYXJrOwogCWZsNC5kYWRkciA9IHNyYzsKIAlmbDQuc2FkZHIgPSBkc3Q7CiAJZmw0LmZsb3dpNF90b3MgPSB0b3M7CkBAIC0yMTIsMTAgKzIxMiwxMiBAQAogCWluX2RldiA9IF9faW5fZGV2X2dldF9yY3UoZGV2KTsKIAlpZiAoaW5fZGV2KSB7CiAJCW5vX2FkZHIgPSBpbl9kZXYtPmlmYV9saXN0ID09IE5VTEw7Ci0JCXJwZiA9IElOX0RFVl9SUEZJTFRFUihpbl9kZXYpOworCisJCS8qIElnbm9yZSBycF9maWx0ZXIgZm9yIHBhY2tldHMgcHJvdGVjdGVkIGJ5IElQc2VjLiAqLworCQlycGYgPSBzZWNwYXRoX2V4aXN0cyhza2IpID8gMCA6IElOX0RFVl9SUEZJTFRFUihpbl9kZXYpOworCiAJCWFjY2VwdF9sb2NhbCA9IElOX0RFVl9BQ0NFUFRfTE9DQUwoaW5fZGV2KTsKLQkJaWYgKG1hcmsgJiYgIUlOX0RFVl9TUkNfVk1BUksoaW5fZGV2KSkKLQkJCWZsNC5mbG93aTRfbWFyayA9IDA7CisJCWZsNC5mbG93aTRfbWFyayA9IElOX0RFVl9TUkNfVk1BUksoaW5fZGV2KSA/IHNrYi0+bWFyayA6IDA7CiAJfQogCiAJaWYgKGluX2RldiA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCmluZGV4IDY0MWE1YTIuLjMzZTJjMzUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYworKysgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKQEAgLTE0MSwxOCArMTQxLDggQEAKIAl9LAogfTsKIAotCiAvKiBSZWxlYXNlIGEgbmV4dGhvcCBpbmZvIHJlY29yZCAqLwogCi1zdGF0aWMgdm9pZCBmcmVlX2ZpYl9pbmZvX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCi17Ci0Jc3RydWN0IGZpYl9pbmZvICpmaSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgZmliX2luZm8sIHJjdSk7Ci0KLQlpZiAoZmktPmZpYl9tZXRyaWNzICE9ICh1MzIgKikgZHN0X2RlZmF1bHRfbWV0cmljcykKLQkJa2ZyZWUoZmktPmZpYl9tZXRyaWNzKTsKLQlrZnJlZShmaSk7Ci19Ci0KIHZvaWQgZnJlZV9maWJfaW5mbyhzdHJ1Y3QgZmliX2luZm8gKmZpKQogewogCWlmIChmaS0+ZmliX2RlYWQgPT0gMCkgewpAQCAtMTY2LDcgKzE1Niw3IEBACiAJfSBlbmRmb3JfbmV4dGhvcHMoZmkpOwogCWZpYl9pbmZvX2NudC0tOwogCXJlbGVhc2VfbmV0KGZpLT5maWJfbmV0KTsKLQljYWxsX3JjdSgmZmktPnJjdSwgZnJlZV9maWJfaW5mb19yY3UpOworCWtmcmVlX3JjdShmaSwgcmN1KTsKIH0KIAogdm9pZCBmaWJfcmVsZWFzZV9pbmZvKHN0cnVjdCBmaWJfaW5mbyAqZmkpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfdHJpZS5jIGIvbmV0L2lwdjQvZmliX3RyaWUuYwppbmRleCBlOTAxM2Q2Li41OGMyNWVhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfdHJpZS5jCisrKyBiL25ldC9pcHY0L2ZpYl90cmllLmMKQEAgLTcyLDYgKzcyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CkBAIC0xMjYsNyArMTI3LDcgQEAKIAkJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJCXN0cnVjdCB0bm9kZSAqdG5vZGVfZnJlZTsKIAl9OwotCXN0cnVjdCBydF90cmllX25vZGUgKmNoaWxkWzBdOworCXN0cnVjdCBydF90cmllX25vZGUgX19yY3UgKmNoaWxkWzBdOwogfTsKIAogI2lmZGVmIENPTkZJR19JUF9GSUJfVFJJRV9TVEFUUwpAQCAtMTUxLDcgKzE1Miw3IEBACiB9OwogCiBzdHJ1Y3QgdHJpZSB7Ci0Jc3RydWN0IHJ0X3RyaWVfbm9kZSAqdHJpZTsKKwlzdHJ1Y3QgcnRfdHJpZV9ub2RlIF9fcmN1ICp0cmllOwogI2lmZGVmIENPTkZJR19JUF9GSUJfVFJJRV9TVEFUUwogCXN0cnVjdCB0cmllX3VzZV9zdGF0cyBzdGF0czsKICNlbmRpZgpAQCAtMTc3LDE2ICsxNzgsMjkgQEAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZm5fYWxpYXNfa21lbSBfX3JlYWRfbW9zdGx5Owogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICp0cmllX2xlYWZfa21lbSBfX3JlYWRfbW9zdGx5OwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB0bm9kZSAqbm9kZV9wYXJlbnQoc3RydWN0IHJ0X3RyaWVfbm9kZSAqbm9kZSkKKy8qCisgKiBjYWxsZXIgbXVzdCBob2xkIFJUTkwKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgdG5vZGUgKm5vZGVfcGFyZW50KGNvbnN0IHN0cnVjdCBydF90cmllX25vZGUgKm5vZGUpCiB7Ci0JcmV0dXJuIChzdHJ1Y3QgdG5vZGUgKikobm9kZS0+cGFyZW50ICYgfk5PREVfVFlQRV9NQVNLKTsKKwl1bnNpZ25lZCBsb25nIHBhcmVudDsKKworCXBhcmVudCA9IHJjdV9kZXJlZmVyZW5jZV9pbmRleF9jaGVjayhub2RlLT5wYXJlbnQsIGxvY2tkZXBfcnRubF9pc19oZWxkKCkpOworCisJcmV0dXJuIChzdHJ1Y3QgdG5vZGUgKikocGFyZW50ICYgfk5PREVfVFlQRV9NQVNLKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgdG5vZGUgKm5vZGVfcGFyZW50X3JjdShzdHJ1Y3QgcnRfdHJpZV9ub2RlICpub2RlKQorLyoKKyAqIGNhbGxlciBtdXN0IGhvbGQgUkNVIHJlYWQgbG9jayBvciBSVE5MCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRub2RlICpub2RlX3BhcmVudF9yY3UoY29uc3Qgc3RydWN0IHJ0X3RyaWVfbm9kZSAqbm9kZSkKIHsKLQlzdHJ1Y3QgdG5vZGUgKnJldCA9IG5vZGVfcGFyZW50KG5vZGUpOworCXVuc2lnbmVkIGxvbmcgcGFyZW50OwogCi0JcmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9ydG5sKHJldCk7CisJcGFyZW50ID0gcmN1X2RlcmVmZXJlbmNlX2luZGV4X2NoZWNrKG5vZGUtPnBhcmVudCwgcmN1X3JlYWRfbG9ja19oZWxkKCkgfHwKKwkJCQkJCQkgICBsb2NrZGVwX3J0bmxfaXNfaGVsZCgpKTsKKworCXJldHVybiAoc3RydWN0IHRub2RlICopKHBhcmVudCAmIH5OT0RFX1RZUEVfTUFTSyk7CiB9CiAKIC8qIFNhbWUgYXMgcmN1X2Fzc2lnbl9wb2ludGVyCkBAIC0xOTgsMTggKzIxMiwyNCBAQAogCW5vZGUtPnBhcmVudCA9ICh1bnNpZ25lZCBsb25nKXB0ciB8IE5PREVfVFlQRShub2RlKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgcnRfdHJpZV9ub2RlICp0bm9kZV9nZXRfY2hpbGQoc3RydWN0IHRub2RlICp0biwgdW5zaWduZWQgaW50IGkpCisvKgorICogY2FsbGVyIG11c3QgaG9sZCBSVE5MCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJ0X3RyaWVfbm9kZSAqdG5vZGVfZ2V0X2NoaWxkKGNvbnN0IHN0cnVjdCB0bm9kZSAqdG4sIHVuc2lnbmVkIGludCBpKQogewogCUJVR19PTihpID49IDFVIDw8IHRuLT5iaXRzKTsKIAotCXJldHVybiB0bi0+Y2hpbGRbaV07CisJcmV0dXJuIHJ0bmxfZGVyZWZlcmVuY2UodG4tPmNoaWxkW2ldKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgcnRfdHJpZV9ub2RlICp0bm9kZV9nZXRfY2hpbGRfcmN1KHN0cnVjdCB0bm9kZSAqdG4sIHVuc2lnbmVkIGludCBpKQorLyoKKyAqIGNhbGxlciBtdXN0IGhvbGQgUkNVIHJlYWQgbG9jayBvciBSVE5MCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJ0X3RyaWVfbm9kZSAqdG5vZGVfZ2V0X2NoaWxkX3JjdShjb25zdCBzdHJ1Y3QgdG5vZGUgKnRuLCB1bnNpZ25lZCBpbnQgaSkKIHsKLQlzdHJ1Y3QgcnRfdHJpZV9ub2RlICpyZXQgPSB0bm9kZV9nZXRfY2hpbGQodG4sIGkpOworCUJVR19PTihpID49IDFVIDw8IHRuLT5iaXRzKTsKIAotCXJldHVybiByY3VfZGVyZWZlcmVuY2VfcnRubChyZXQpOworCXJldHVybiByY3VfZGVyZWZlcmVuY2VfcnRubCh0bi0+Y2hpbGRbaV0pOwogfQogCiBzdGF0aWMgaW5saW5lIGludCB0bm9kZV9jaGlsZF9sZW5ndGgoY29uc3Qgc3RydWN0IHRub2RlICp0bikKQEAgLTM1MCwxNCArMzcwLDkgQEAKIAljYWxsX3JjdV9iaCgmbC0+cmN1LCBfX2xlYWZfZnJlZV9yY3UpOwogfQogCi1zdGF0aWMgdm9pZCBfX2xlYWZfaW5mb19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCi17Ci0Ja2ZyZWUoY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBsZWFmX2luZm8sIHJjdSkpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9sZWFmX2luZm8oc3RydWN0IGxlYWZfaW5mbyAqbGVhZikKIHsKLQljYWxsX3JjdSgmbGVhZi0+cmN1LCBfX2xlYWZfaW5mb19mcmVlX3JjdSk7CisJa2ZyZWVfcmN1KGxlYWYsIHJjdSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdG5vZGUgKnRub2RlX2FsbG9jKHNpemVfdCBzaXplKQpAQCAtNDg3LDcgKzUwMiw3IEBACiBzdGF0aWMgdm9pZCB0bm9kZV9wdXRfY2hpbGRfcmVvcmcoc3RydWN0IHRub2RlICp0biwgaW50IGksIHN0cnVjdCBydF90cmllX25vZGUgKm4sCiAJCQkJICBpbnQgd2FzZnVsbCkKIHsKLQlzdHJ1Y3QgcnRfdHJpZV9ub2RlICpjaGkgPSB0bi0+Y2hpbGRbaV07CisJc3RydWN0IHJ0X3RyaWVfbm9kZSAqY2hpID0gcnRubF9kZXJlZmVyZW5jZSh0bi0+Y2hpbGRbaV0pOwogCWludCBpc2Z1bGw7CiAKIAlCVUdfT04oaSA+PSAxPDx0bi0+Yml0cyk7CkBAIC02NjUsNyArNjgwLDcgQEAKIAkJZm9yIChpID0gMDsgaSA8IHRub2RlX2NoaWxkX2xlbmd0aCh0bik7IGkrKykgewogCQkJc3RydWN0IHJ0X3RyaWVfbm9kZSAqbjsKIAotCQkJbiA9IHRuLT5jaGlsZFtpXTsKKwkJCW4gPSBydG5sX2RlcmVmZXJlbmNlKHRuLT5jaGlsZFtpXSk7CiAJCQlpZiAoIW4pCiAJCQkJY29udGludWU7CiAKQEAgLTY3OSw2ICs2OTQsMjAgQEAKIAlyZXR1cm4gKHN0cnVjdCBydF90cmllX25vZGUgKikgdG47CiB9CiAKKworc3RhdGljIHZvaWQgdG5vZGVfY2xlYW5fZnJlZShzdHJ1Y3QgdG5vZGUgKnRuKQoreworCWludCBpOworCXN0cnVjdCB0bm9kZSAqdG9mcmVlOworCisJZm9yIChpID0gMDsgaSA8IHRub2RlX2NoaWxkX2xlbmd0aCh0bik7IGkrKykgeworCQl0b2ZyZWUgPSAoc3RydWN0IHRub2RlICopcnRubF9kZXJlZmVyZW5jZSh0bi0+Y2hpbGRbaV0pOworCQlpZiAodG9mcmVlKQorCQkJdG5vZGVfZnJlZSh0b2ZyZWUpOworCX0KKwl0bm9kZV9mcmVlKHRuKTsKK30KKwogc3RhdGljIHN0cnVjdCB0bm9kZSAqaW5mbGF0ZShzdHJ1Y3QgdHJpZSAqdCwgc3RydWN0IHRub2RlICp0bikKIHsKIAlzdHJ1Y3QgdG5vZGUgKm9sZHRub2RlID0gdG47CkBAIC03NTUsOCArNzg0LDggQEAKIAkJaW5vZGUgPSAoc3RydWN0IHRub2RlICopIG5vZGU7CiAKIAkJaWYgKGlub2RlLT5iaXRzID09IDEpIHsKLQkJCXB1dF9jaGlsZCh0LCB0biwgMippLCBpbm9kZS0+Y2hpbGRbMF0pOwotCQkJcHV0X2NoaWxkKHQsIHRuLCAyKmkrMSwgaW5vZGUtPmNoaWxkWzFdKTsKKwkJCXB1dF9jaGlsZCh0LCB0biwgMippLCBydG5sX2RlcmVmZXJlbmNlKGlub2RlLT5jaGlsZFswXSkpOworCQkJcHV0X2NoaWxkKHQsIHRuLCAyKmkrMSwgcnRubF9kZXJlZmVyZW5jZShpbm9kZS0+Y2hpbGRbMV0pKTsKIAogCQkJdG5vZGVfZnJlZV9zYWZlKGlub2RlKTsKIAkJCWNvbnRpbnVlOwpAQCAtNzk3LDggKzgyNiw4IEBACiAKIAkJc2l6ZSA9IHRub2RlX2NoaWxkX2xlbmd0aChsZWZ0KTsKIAkJZm9yIChqID0gMDsgaiA8IHNpemU7IGorKykgewotCQkJcHV0X2NoaWxkKHQsIGxlZnQsIGosIGlub2RlLT5jaGlsZFtqXSk7Ci0JCQlwdXRfY2hpbGQodCwgcmlnaHQsIGosIGlub2RlLT5jaGlsZFtqICsgc2l6ZV0pOworCQkJcHV0X2NoaWxkKHQsIGxlZnQsIGosIHJ0bmxfZGVyZWZlcmVuY2UoaW5vZGUtPmNoaWxkW2pdKSk7CisJCQlwdXRfY2hpbGQodCwgcmlnaHQsIGosIHJ0bmxfZGVyZWZlcmVuY2UoaW5vZGUtPmNoaWxkW2ogKyBzaXplXSkpOwogCQl9CiAJCXB1dF9jaGlsZCh0LCB0biwgMippLCByZXNpemUodCwgbGVmdCkpOwogCQlwdXRfY2hpbGQodCwgdG4sIDIqaSsxLCByZXNpemUodCwgcmlnaHQpKTsKQEAgLTgwOCwxOCArODM3LDggQEAKIAl0bm9kZV9mcmVlX3NhZmUob2xkdG5vZGUpOwogCXJldHVybiB0bjsKIG5vbWVtOgotCXsKLQkJaW50IHNpemUgPSB0bm9kZV9jaGlsZF9sZW5ndGgodG4pOwotCQlpbnQgajsKLQotCQlmb3IgKGogPSAwOyBqIDwgc2l6ZTsgaisrKQotCQkJaWYgKHRuLT5jaGlsZFtqXSkKLQkJCQl0bm9kZV9mcmVlKChzdHJ1Y3QgdG5vZGUgKil0bi0+Y2hpbGRbal0pOwotCi0JCXRub2RlX2ZyZWUodG4pOwotCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCX0KKwl0bm9kZV9jbGVhbl9mcmVlKHRuKTsKKwlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIH0KIAogc3RhdGljIHN0cnVjdCB0bm9kZSAqaGFsdmUoc3RydWN0IHRyaWUgKnQsIHN0cnVjdCB0bm9kZSAqdG4pCkBAIC04OTAsMTggKzkwOSw4IEBACiAJdG5vZGVfZnJlZV9zYWZlKG9sZHRub2RlKTsKIAlyZXR1cm4gdG47CiBub21lbToKLQl7Ci0JCWludCBzaXplID0gdG5vZGVfY2hpbGRfbGVuZ3RoKHRuKTsKLQkJaW50IGo7Ci0KLQkJZm9yIChqID0gMDsgaiA8IHNpemU7IGorKykKLQkJCWlmICh0bi0+Y2hpbGRbal0pCi0JCQkJdG5vZGVfZnJlZSgoc3RydWN0IHRub2RlICopdG4tPmNoaWxkW2pdKTsKLQotCQl0bm9kZV9mcmVlKHRuKTsKLQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQl9CisJdG5vZGVfY2xlYW5fZnJlZSh0bik7CisJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiB9CiAKIC8qIHJlYWRzaWRlIG11c3QgdXNlIHJjdV9yZWFkX2xvY2sgY3VycmVudGx5IGR1bXAgcm91dGluZXMKQEAgLTEwMzMsNyArMTA0Miw3IEBACiAJdF9rZXkgY2luZGV4OwogCiAJcG9zID0gMDsKLQluID0gdC0+dHJpZTsKKwluID0gcnRubF9kZXJlZmVyZW5jZSh0LT50cmllKTsKIAogCS8qIElmIHdlIHBvaW50IHRvIE5VTEwsIHN0b3AuIEVpdGhlciB0aGUgdHJlZSBpcyBlbXB0eSBhbmQgd2Ugc2hvdWxkCiAJICoganVzdCBwdXQgYSBuZXcgbGVhZiBpbiBpZiwgb3Igd2UgaGF2ZSByZWFjaGVkIGFuIGVtcHR5IGNoaWxkIHNsb3QsCkBAIC0xMzE5LDYgKzEzMjgsOSBAQAogCQl9CiAJfQogCisJaWYgKCFwbGVuKQorCQl0Yi0+dGJfbnVtX2RlZmF1bHQrKzsKKwogCWxpc3RfYWRkX3RhaWxfcmN1KCZuZXdfZmEtPmZhX2xpc3QsCiAJCQkgIChmYSA/ICZmYS0+ZmFfbGlzdCA6IGZhX2hlYWQpKTsKIApAQCAtMTY4NCw2ICsxNjk2LDkgQEAKIAogCWxpc3RfZGVsX3JjdSgmZmEtPmZhX2xpc3QpOwogCisJaWYgKCFwbGVuKQorCQl0Yi0+dGJfbnVtX2RlZmF1bHQtLTsKKwogCWlmIChsaXN0X2VtcHR5KGZhX2hlYWQpKSB7CiAJCWhsaXN0X2RlbF9yY3UoJmxpLT5obGlzdCk7CiAJCWZyZWVfbGVhZl9pbmZvKGxpKTsKQEAgLTE3NTYsNyArMTc3MSw3IEBACiAJCQkJY29udGludWU7CiAKIAkJCWlmIChJU19MRUFGKGMpKSB7Ci0JCQkJcHJlZmV0Y2gocC0+Y2hpbGRbaWR4XSk7CisJCQkJcHJlZmV0Y2gocmN1X2RlcmVmZXJlbmNlX3J0bmwocC0+Y2hpbGRbaWR4XSkpOwogCQkJCXJldHVybiAoc3RydWN0IGxlYWYgKikgYzsKIAkJCX0KIApAQCAtMTk3NCwxMyArMTk4OSwxMSBAQAogCiAJdGItPnRiX2lkID0gaWQ7CiAJdGItPnRiX2RlZmF1bHQgPSAtMTsKKwl0Yi0+dGJfbnVtX2RlZmF1bHQgPSAwOwogCiAJdCA9IChzdHJ1Y3QgdHJpZSAqKSB0Yi0+dGJfZGF0YTsKIAltZW1zZXQodCwgMCwgc2l6ZW9mKCp0KSk7CiAKLQlpZiAoaWQgPT0gUlRfVEFCTEVfTE9DQUwpCi0JCXByX2luZm8oIklQdjQgRklCOiBVc2luZyBMQy10cmllIHZlcnNpb24gJXNcbiIsIFZFUlNJT04pOwotCiAJcmV0dXJuIHRiOwogfQogCkBAIC0yMjcyLDcgKzIyODUsNyBAQAogCiAJLyogd2FsayByZXN0IG9mIHRoaXMgaGFzaCBjaGFpbiAqLwogCWggPSB0Yi0+dGJfaWQgJiAoRklCX1RBQkxFX0hBU0hTWiAtIDEpOwotCXdoaWxlICggKHRiX25vZGUgPSByY3VfZGVyZWZlcmVuY2UodGItPnRiX2hsaXN0Lm5leHQpKSApIHsKKwl3aGlsZSAoKHRiX25vZGUgPSByY3VfZGVyZWZlcmVuY2UoaGxpc3RfbmV4dF9yY3UoJnRiLT50Yl9obGlzdCkpKSkgewogCQl0YiA9IGhsaXN0X2VudHJ5KHRiX25vZGUsIHN0cnVjdCBmaWJfdGFibGUsIHRiX2hsaXN0KTsKIAkJbiA9IGZpYl90cmllX2dldF9maXJzdChpdGVyLCAoc3RydWN0IHRyaWUgKikgdGItPnRiX2RhdGEpOwogCQlpZiAobikKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ljbXAuYyBiL25ldC9pcHY0L2ljbXAuYwppbmRleCBlNWY4YTcxLi41Mzk1ZTQ1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pY21wLmMKKysrIGIvbmV0L2lwdjQvaWNtcC5jCkBAIC04Myw2ICs4Myw3IEBACiAjaW5jbHVkZSA8bmV0L3RjcC5oPgogI2luY2x1ZGUgPG5ldC91ZHAuaD4KICNpbmNsdWRlIDxuZXQvcmF3Lmg+CisjaW5jbHVkZSA8bmV0L3BpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC0xMDgsOCArMTA5LDcgQEAKIAkJX19iZTMyCSAgICAgICB0aW1lc1szXTsKIAl9IGRhdGE7CiAJaW50IGhlYWRfbGVuOwotCXN0cnVjdCBpcF9vcHRpb25zIHJlcGx5b3B0czsKLQl1bnNpZ25lZCBjaGFyICBvcHRidWZbNDBdOworCXN0cnVjdCBpcF9vcHRpb25zX2RhdGEgcmVwbHlvcHRzOwogfTsKIAogLyogQW4gYXJyYXkgb2YgZXJybm8gZm9yIGVycm9yIG1lc3NhZ2VzIGZyb20gZGVzdCB1bnJlYWNoLiAqLwpAQCAtMjM0LDcgKzIzNCw3IEBACiAgKi8KIAogc3RhdGljIGlubGluZSBib29sIGljbXB2NF94cmxpbV9hbGxvdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBydGFibGUgKnJ0LAotCQlpbnQgdHlwZSwgaW50IGNvZGUpCisJCQkJICAgICAgc3RydWN0IGZsb3dpNCAqZmw0LCBpbnQgdHlwZSwgaW50IGNvZGUpCiB7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gJnJ0LT5kc3Q7CiAJYm9vbCByYyA9IHRydWU7CkBAIC0yNTMsNyArMjUzLDcgQEAKIAkvKiBMaW1pdCBpZiBpY21wIHR5cGUgaXMgZW5hYmxlZCBpbiByYXRlbWFzay4gKi8KIAlpZiAoKDEgPDwgdHlwZSkgJiBuZXQtPmlwdjQuc3lzY3RsX2ljbXBfcmF0ZW1hc2spIHsKIAkJaWYgKCFydC0+cGVlcikKLQkJCXJ0X2JpbmRfcGVlcihydCwgMSk7CisJCQlydF9iaW5kX3BlZXIocnQsIGZsNC0+ZGFkZHIsIDEpOwogCQlyYyA9IGluZXRfcGVlcl94cmxpbV9hbGxvdyhydC0+cGVlciwKIAkJCQkJICAgbmV0LT5pcHY0LnN5c2N0bF9pY21wX3JhdGVsaW1pdCk7CiAJfQpAQCAtMjkxLDEzICsyOTEsMTQgQEAKIH0KIAogc3RhdGljIHZvaWQgaWNtcF9wdXNoX3JlcGx5KHN0cnVjdCBpY21wX2J4bSAqaWNtcF9wYXJhbSwKKwkJCSAgICBzdHJ1Y3QgZmxvd2k0ICpmbDQsCiAJCQkgICAgc3RydWN0IGlwY21fY29va2llICppcGMsIHN0cnVjdCBydGFibGUgKipydCkKIHsKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCXNrID0gaWNtcF9zayhkZXZfbmV0KCgqcnQpLT5kc3QuZGV2KSk7Ci0JaWYgKGlwX2FwcGVuZF9kYXRhKHNrLCBpY21wX2dsdWVfYml0cywgaWNtcF9wYXJhbSwKKwlpZiAoaXBfYXBwZW5kX2RhdGEoc2ssIGZsNCwgaWNtcF9nbHVlX2JpdHMsIGljbXBfcGFyYW0sCiAJCQkgICBpY21wX3BhcmFtLT5kYXRhX2xlbitpY21wX3BhcmFtLT5oZWFkX2xlbiwKIAkJCSAgIGljbXBfcGFyYW0tPmhlYWRfbGVuLAogCQkJICAgaXBjLCBydCwgTVNHX0RPTlRXQUlUKSA8IDApIHsKQEAgLTMxNiw3ICszMTcsNyBAQAogCQkJCQkJIGljbXBfcGFyYW0tPmhlYWRfbGVuLCBjc3VtKTsKIAkJaWNtcGgtPmNoZWNrc3VtID0gY3N1bV9mb2xkKGNzdW0pOwogCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7Ci0JCWlwX3B1c2hfcGVuZGluZ19mcmFtZXMoc2spOworCQlpcF9wdXNoX3BlbmRpbmdfZnJhbWVzKHNrLCBmbDQpOwogCX0KIH0KIApAQCAtMzI5LDExICszMzAsMTIgQEAKIAlzdHJ1Y3QgaXBjbV9jb29raWUgaXBjOwogCXN0cnVjdCBydGFibGUgKnJ0ID0gc2tiX3J0YWJsZShza2IpOwogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQocnQtPmRzdC5kZXYpOworCXN0cnVjdCBmbG93aTQgZmw0OwogCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0OwogCV9fYmUzMiBkYWRkcjsKIAotCWlmIChpcF9vcHRpb25zX2VjaG8oJmljbXBfcGFyYW0tPnJlcGx5b3B0cywgc2tiKSkKKwlpZiAoaXBfb3B0aW9uc19lY2hvKCZpY21wX3BhcmFtLT5yZXBseW9wdHMub3B0Lm9wdCwgc2tiKSkKIAkJcmV0dXJuOwogCiAJc2sgPSBpY21wX3htaXRfbG9jayhuZXQpOwpAQCAtMzQ0LDY1ICszNDYsNjAgQEAKIAlpY21wX3BhcmFtLT5kYXRhLmljbXBoLmNoZWNrc3VtID0gMDsKIAogCWluZXQtPnRvcyA9IGlwX2hkcihza2IpLT50b3M7Ci0JZGFkZHIgPSBpcGMuYWRkciA9IHJ0LT5ydF9zcmM7CisJZGFkZHIgPSBpcGMuYWRkciA9IGlwX2hkcihza2IpLT5zYWRkcjsKIAlpcGMub3B0ID0gTlVMTDsKIAlpcGMudHhfZmxhZ3MgPSAwOwotCWlmIChpY21wX3BhcmFtLT5yZXBseW9wdHMub3B0bGVuKSB7Ci0JCWlwYy5vcHQgPSAmaWNtcF9wYXJhbS0+cmVwbHlvcHRzOwotCQlpZiAoaXBjLm9wdC0+c3JyKQotCQkJZGFkZHIgPSBpY21wX3BhcmFtLT5yZXBseW9wdHMuZmFkZHI7CisJaWYgKGljbXBfcGFyYW0tPnJlcGx5b3B0cy5vcHQub3B0Lm9wdGxlbikgeworCQlpcGMub3B0ID0gJmljbXBfcGFyYW0tPnJlcGx5b3B0cy5vcHQ7CisJCWlmIChpcGMub3B0LT5vcHQuc3JyKQorCQkJZGFkZHIgPSBpY21wX3BhcmFtLT5yZXBseW9wdHMub3B0Lm9wdC5mYWRkcjsKIAl9Ci0JewotCQlzdHJ1Y3QgZmxvd2k0IGZsNCA9IHsKLQkJCS5kYWRkciA9IGRhZGRyLAotCQkJLnNhZGRyID0gcnQtPnJ0X3NwZWNfZHN0LAotCQkJLmZsb3dpNF90b3MgPSBSVF9UT1MoaXBfaGRyKHNrYiktPnRvcyksCi0JCQkuZmxvd2k0X3Byb3RvID0gSVBQUk9UT19JQ01QLAotCQl9OwotCQlzZWN1cml0eV9za2JfY2xhc3NpZnlfZmxvdyhza2IsIGZsb3dpNF90b19mbG93aSgmZmw0KSk7Ci0JCXJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShuZXQsICZmbDQpOwotCQlpZiAoSVNfRVJSKHJ0KSkKLQkJCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0JaWYgKGljbXB2NF94cmxpbV9hbGxvdyhuZXQsIHJ0LCBpY21wX3BhcmFtLT5kYXRhLmljbXBoLnR5cGUsCisJbWVtc2V0KCZmbDQsIDAsIHNpemVvZihmbDQpKTsKKwlmbDQuZGFkZHIgPSBkYWRkcjsKKwlmbDQuc2FkZHIgPSBydC0+cnRfc3BlY19kc3Q7CisJZmw0LmZsb3dpNF90b3MgPSBSVF9UT1MoaXBfaGRyKHNrYiktPnRvcyk7CisJZmw0LmZsb3dpNF9wcm90byA9IElQUFJPVE9fSUNNUDsKKwlzZWN1cml0eV9za2JfY2xhc3NpZnlfZmxvdyhza2IsIGZsb3dpNF90b19mbG93aSgmZmw0KSk7CisJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgJmZsNCk7CisJaWYgKElTX0VSUihydCkpCisJCWdvdG8gb3V0X3VubG9jazsKKwlpZiAoaWNtcHY0X3hybGltX2FsbG93KG5ldCwgcnQsICZmbDQsIGljbXBfcGFyYW0tPmRhdGEuaWNtcGgudHlwZSwKIAkJCSAgICAgICBpY21wX3BhcmFtLT5kYXRhLmljbXBoLmNvZGUpKQotCQlpY21wX3B1c2hfcmVwbHkoaWNtcF9wYXJhbSwgJmlwYywgJnJ0KTsKKwkJaWNtcF9wdXNoX3JlcGx5KGljbXBfcGFyYW0sICZmbDQsICZpcGMsICZydCk7CiAJaXBfcnRfcHV0KHJ0KTsKIG91dF91bmxvY2s6CiAJaWNtcF94bWl0X3VubG9jayhzayk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcnRhYmxlICppY21wX3JvdXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2JfaW4sCi0JCQkJCXN0cnVjdCBpcGhkciAqaXBoLAorc3RhdGljIHN0cnVjdCBydGFibGUgKmljbXBfcm91dGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwKKwkJCQkJc3RydWN0IGZsb3dpNCAqZmw0LAorCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLAorCQkJCQljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCwKIAkJCQkJX19iZTMyIHNhZGRyLCB1OCB0b3MsCiAJCQkJCWludCB0eXBlLCBpbnQgY29kZSwKIAkJCQkJc3RydWN0IGljbXBfYnhtICpwYXJhbSkKIHsKLQlzdHJ1Y3QgZmxvd2k0IGZsNCA9IHsKLQkJLmRhZGRyID0gKHBhcmFtLT5yZXBseW9wdHMuc3JyID8KLQkJCSAgcGFyYW0tPnJlcGx5b3B0cy5mYWRkciA6IGlwaC0+c2FkZHIpLAotCQkuc2FkZHIgPSBzYWRkciwKLQkJLmZsb3dpNF90b3MgPSBSVF9UT1ModG9zKSwKLQkJLmZsb3dpNF9wcm90byA9IElQUFJPVE9fSUNNUCwKLQkJLmZsNF9pY21wX3R5cGUgPSB0eXBlLAotCQkuZmw0X2ljbXBfY29kZSA9IGNvZGUsCi0JfTsKIAlzdHJ1Y3QgcnRhYmxlICpydCwgKnJ0MjsKIAlpbnQgZXJyOwogCi0Jc2VjdXJpdHlfc2tiX2NsYXNzaWZ5X2Zsb3coc2tiX2luLCBmbG93aTRfdG9fZmxvd2koJmZsNCkpOwotCXJ0ID0gX19pcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgJmZsNCk7CisJbWVtc2V0KGZsNCwgMCwgc2l6ZW9mKCpmbDQpKTsKKwlmbDQtPmRhZGRyID0gKHBhcmFtLT5yZXBseW9wdHMub3B0Lm9wdC5zcnIgPworCQkgICAgICBwYXJhbS0+cmVwbHlvcHRzLm9wdC5vcHQuZmFkZHIgOiBpcGgtPnNhZGRyKTsKKwlmbDQtPnNhZGRyID0gc2FkZHI7CisJZmw0LT5mbG93aTRfdG9zID0gUlRfVE9TKHRvcyk7CisJZmw0LT5mbG93aTRfcHJvdG8gPSBJUFBST1RPX0lDTVA7CisJZmw0LT5mbDRfaWNtcF90eXBlID0gdHlwZTsKKwlmbDQtPmZsNF9pY21wX2NvZGUgPSBjb2RlOworCXNlY3VyaXR5X3NrYl9jbGFzc2lmeV9mbG93KHNrYl9pbiwgZmxvd2k0X3RvX2Zsb3dpKGZsNCkpOworCXJ0ID0gX19pcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgZmw0KTsKIAlpZiAoSVNfRVJSKHJ0KSkKIAkJcmV0dXJuIHJ0OwogCiAJLyogTm8gbmVlZCB0byBjbG9uZSBzaW5jZSB3ZSdyZSBqdXN0IHVzaW5nIGl0cyBhZGRyZXNzLiAqLwogCXJ0MiA9IHJ0OwogCi0JaWYgKCFmbDQuc2FkZHIpCi0JCWZsNC5zYWRkciA9IHJ0LT5ydF9zcmM7Ci0KIAlydCA9IChzdHJ1Y3QgcnRhYmxlICopIHhmcm1fbG9va3VwKG5ldCwgJnJ0LT5kc3QsCi0JCQkJCSAgIGZsb3dpNF90b19mbG93aSgmZmw0KSwgTlVMTCwgMCk7CisJCQkJCSAgIGZsb3dpNF90b19mbG93aShmbDQpLCBOVUxMLCAwKTsKIAlpZiAoIUlTX0VSUihydCkpIHsKIAkJaWYgKHJ0ICE9IHJ0MikKIAkJCXJldHVybiBydDsKQEAgLTQxMSwxOSArNDA4LDE5IEBACiAJfSBlbHNlCiAJCXJldHVybiBydDsKIAotCWVyciA9IHhmcm1fZGVjb2RlX3Nlc3Npb25fcmV2ZXJzZShza2JfaW4sIGZsb3dpNF90b19mbG93aSgmZmw0KSwgQUZfSU5FVCk7CisJZXJyID0geGZybV9kZWNvZGVfc2Vzc2lvbl9yZXZlcnNlKHNrYl9pbiwgZmxvd2k0X3RvX2Zsb3dpKGZsNCksIEFGX0lORVQpOwogCWlmIChlcnIpCiAJCWdvdG8gcmVsb29rdXBfZmFpbGVkOwogCi0JaWYgKGluZXRfYWRkcl90eXBlKG5ldCwgZmw0LnNhZGRyKSA9PSBSVE5fTE9DQUwpIHsKLQkJcnQyID0gX19pcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgJmZsNCk7CisJaWYgKGluZXRfYWRkcl90eXBlKG5ldCwgZmw0LT5zYWRkcikgPT0gUlROX0xPQ0FMKSB7CisJCXJ0MiA9IF9faXBfcm91dGVfb3V0cHV0X2tleShuZXQsIGZsNCk7CiAJCWlmIChJU19FUlIocnQyKSkKIAkJCWVyciA9IFBUUl9FUlIocnQyKTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgZmxvd2k0IGZsNF8yID0ge307CiAJCXVuc2lnbmVkIGxvbmcgb3JlZmRzdDsKIAotCQlmbDRfMi5kYWRkciA9IGZsNC5zYWRkcjsKKwkJZmw0XzIuZGFkZHIgPSBmbDQtPnNhZGRyOwogCQlydDIgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgJmZsNF8yKTsKIAkJaWYgKElTX0VSUihydDIpKSB7CiAJCQllcnIgPSBQVFJfRVJSKHJ0Mik7CkBAIC00MzEsNyArNDI4LDcgQEAKIAkJfQogCQkvKiBVZ2ghICovCiAJCW9yZWZkc3QgPSBza2JfaW4tPl9za2JfcmVmZHN0OyAvKiBzYXZlIG9sZCByZWZkc3QgKi8KLQkJZXJyID0gaXBfcm91dGVfaW5wdXQoc2tiX2luLCBmbDQuZGFkZHIsIGZsNC5zYWRkciwKKwkJZXJyID0gaXBfcm91dGVfaW5wdXQoc2tiX2luLCBmbDQtPmRhZGRyLCBmbDQtPnNhZGRyLAogCQkJCSAgICAgUlRfVE9TKHRvcyksIHJ0Mi0+ZHN0LmRldik7CiAKIAkJZHN0X3JlbGVhc2UoJnJ0Mi0+ZHN0KTsKQEAgLTQ0Myw3ICs0NDAsNyBAQAogCQlnb3RvIHJlbG9va3VwX2ZhaWxlZDsKIAogCXJ0MiA9IChzdHJ1Y3QgcnRhYmxlICopIHhmcm1fbG9va3VwKG5ldCwgJnJ0Mi0+ZHN0LAotCQkJCQkgICAgZmxvd2k0X3RvX2Zsb3dpKCZmbDQpLCBOVUxMLAorCQkJCQkgICAgZmxvd2k0X3RvX2Zsb3dpKGZsNCksIE5VTEwsCiAJCQkJCSAgICBYRlJNX0xPT0tVUF9JQ01QKTsKIAlpZiAoIUlTX0VSUihydDIpKSB7CiAJCWRzdF9yZWxlYXNlKCZydC0+ZHN0KTsKQEAgLTQ4Miw2ICs0NzksNyBAQAogCXN0cnVjdCBpY21wX2J4bSBpY21wX3BhcmFtOwogCXN0cnVjdCBydGFibGUgKnJ0ID0gc2tiX3J0YWJsZShza2JfaW4pOwogCXN0cnVjdCBpcGNtX2Nvb2tpZSBpcGM7CisJc3RydWN0IGZsb3dpNCBmbDQ7CiAJX19iZTMyIHNhZGRyOwogCXU4ICB0b3M7CiAJc3RydWN0IG5ldCAqbmV0OwpAQCAtNTgxLDcgKzU3OSw3IEBACiAJCQkJCSAgIElQVE9TX1BSRUNfSU5URVJORVRDT05UUk9MKSA6CiAJCQkJCSAgaXBoLT50b3M7CiAKLQlpZiAoaXBfb3B0aW9uc19lY2hvKCZpY21wX3BhcmFtLnJlcGx5b3B0cywgc2tiX2luKSkKKwlpZiAoaXBfb3B0aW9uc19lY2hvKCZpY21wX3BhcmFtLnJlcGx5b3B0cy5vcHQub3B0LCBza2JfaW4pKQogCQlnb3RvIG91dF91bmxvY2s7CiAKIApAQCAtNTk3LDE1ICs1OTUsMTUgQEAKIAlpY21wX3BhcmFtLm9mZnNldCA9IHNrYl9uZXR3b3JrX29mZnNldChza2JfaW4pOwogCWluZXRfc2soc2spLT50b3MgPSB0b3M7CiAJaXBjLmFkZHIgPSBpcGgtPnNhZGRyOwotCWlwYy5vcHQgPSAmaWNtcF9wYXJhbS5yZXBseW9wdHM7CisJaXBjLm9wdCA9ICZpY21wX3BhcmFtLnJlcGx5b3B0cy5vcHQ7CiAJaXBjLnR4X2ZsYWdzID0gMDsKIAotCXJ0ID0gaWNtcF9yb3V0ZV9sb29rdXAobmV0LCBza2JfaW4sIGlwaCwgc2FkZHIsIHRvcywKKwlydCA9IGljbXBfcm91dGVfbG9va3VwKG5ldCwgJmZsNCwgc2tiX2luLCBpcGgsIHNhZGRyLCB0b3MsCiAJCQkgICAgICAgdHlwZSwgY29kZSwgJmljbXBfcGFyYW0pOwogCWlmIChJU19FUlIocnQpKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQlpZiAoIWljbXB2NF94cmxpbV9hbGxvdyhuZXQsIHJ0LCB0eXBlLCBjb2RlKSkKKwlpZiAoIWljbXB2NF94cmxpbV9hbGxvdyhuZXQsIHJ0LCAmZmw0LCB0eXBlLCBjb2RlKSkKIAkJZ290byBlbmRlOwogCiAJLyogUkZDIHNheXMgcmV0dXJuIGFzIG11Y2ggYXMgd2UgY2FuIHdpdGhvdXQgZXhjZWVkaW5nIDU3NiBieXRlcy4gKi8KQEAgLTYxMyw3ICs2MTEsNyBAQAogCXJvb20gPSBkc3RfbXR1KCZydC0+ZHN0KTsKIAlpZiAocm9vbSA+IDU3NikKIAkJcm9vbSA9IDU3NjsKLQlyb29tIC09IHNpemVvZihzdHJ1Y3QgaXBoZHIpICsgaWNtcF9wYXJhbS5yZXBseW9wdHMub3B0bGVuOworCXJvb20gLT0gc2l6ZW9mKHN0cnVjdCBpcGhkcikgKyBpY21wX3BhcmFtLnJlcGx5b3B0cy5vcHQub3B0Lm9wdGxlbjsKIAlyb29tIC09IHNpemVvZihzdHJ1Y3QgaWNtcGhkcik7CiAKIAlpY21wX3BhcmFtLmRhdGFfbGVuID0gc2tiX2luLT5sZW4gLSBpY21wX3BhcmFtLm9mZnNldDsKQEAgLTYyMSw3ICs2MTksNyBAQAogCQlpY21wX3BhcmFtLmRhdGFfbGVuID0gcm9vbTsKIAlpY21wX3BhcmFtLmhlYWRfbGVuID0gc2l6ZW9mKHN0cnVjdCBpY21waGRyKTsKIAotCWljbXBfcHVzaF9yZXBseSgmaWNtcF9wYXJhbSwgJmlwYywgJnJ0KTsKKwlpY21wX3B1c2hfcmVwbHkoJmljbXBfcGFyYW0sICZmbDQsICZpcGMsICZydCk7CiBlbmRlOgogCWlwX3J0X3B1dChydCk7CiBvdXRfdW5sb2NrOgpAQCAtNjM3LDcgKzYzNSw3IEBACiAKIHN0YXRpYyB2b2lkIGljbXBfdW5yZWFjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBpcGhkciAqaXBoOworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoOwogCXN0cnVjdCBpY21waGRyICppY21waDsKIAlpbnQgaGFzaCwgcHJvdG9jb2w7CiAJY29uc3Qgc3RydWN0IG5ldF9wcm90b2NvbCAqaXBwcm90OwpAQCAtNjU2LDcgKzY1NCw3IEBACiAJCWdvdG8gb3V0X2VycjsKIAogCWljbXBoID0gaWNtcF9oZHIoc2tiKTsKLQlpcGggICA9IChzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7CisJaXBoICAgPSAoY29uc3Qgc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOwogCiAJaWYgKGlwaC0+aWhsIDwgNSkgLyogTWFuZ2xlZCBoZWFkZXIsIGRyb3AuICovCiAJCWdvdG8gb3V0X2VycjsKQEAgLTcyOSw3ICs3MjcsNyBAQAogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIGlwaC0+aWhsICogNCArIDgpKQogCQlnb3RvIG91dDsKIAotCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7CisJaXBoID0gKGNvbnN0IHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKIAlwcm90b2NvbCA9IGlwaC0+cHJvdG9jb2w7CiAKIAkvKgpAQCAtNzU4LDcgKzc1Niw3IEBACiAKIHN0YXRpYyB2b2lkIGljbXBfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaXBoZHIgKmlwaDsKKwljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDsKIAogCWlmIChza2ItPmxlbiA8IHNpemVvZihzdHJ1Y3QgaXBoZHIpKQogCQlnb3RvIG91dF9lcnI7CkBAIC03NjksNyArNzY3LDcgQEAKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwaGRyKSkpCiAJCWdvdG8gb3V0OwogCi0JaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKKwlpcGggPSAoY29uc3Qgc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOwogCiAJc3dpdGNoIChpY21wX2hkcihza2IpLT5jb2RlICYgNykgewogCWNhc2UgSUNNUF9SRURJUl9ORVQ6CkBAIC03ODQsNiArNzgyLDE1IEBACiAJCQkgICAgICAgaXBoLT5zYWRkciwgc2tiLT5kZXYpOwogCQlicmVhazsKIAl9CisKKwkvKiBQaW5nIHdhbnRzIHRvIHNlZSByZWRpcmVjdHMuCisgICAgICAgICAqIExldCdzIHByZXRlbmQgdGhleSBhcmUgZXJyb3JzIG9mIHNvcnRzLi4uICovCisJaWYgKGlwaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QICYmCisJICAgIGlwaC0+aWhsID49IDUgJiYKKwkgICAgcHNrYl9tYXlfcHVsbChza2IsIChpcGgtPmlobDw8MikrOCkpIHsKKwkJcGluZ19lcnIoc2tiLCBpY21wX2hkcihza2IpLT51bi5nYXRld2F5KTsKKwl9CisKIG91dDoKIAlyZXR1cm47CiBvdXRfZXJyOgpAQCAtOTMzLDEyICs5NDAsMTIgQEAKIAkJQlVHX09OKG1wID09IE5VTEwpOwogCQlmb3IgKGlmYSA9IGluX2Rldi0+aWZhX2xpc3Q7IGlmYTsgaWZhID0gaWZhLT5pZmFfbmV4dCkgewogCQkJaWYgKCptcCA9PSBpZmEtPmlmYV9tYXNrICYmCi0JCQkgICAgaW5ldF9pZmFfbWF0Y2gocnQtPnJ0X3NyYywgaWZhKSkKKwkJCSAgICBpbmV0X2lmYV9tYXRjaChpcF9oZHIoc2tiKS0+c2FkZHIsIGlmYSkpCiAJCQkJYnJlYWs7CiAJCX0KIAkJaWYgKCFpZmEgJiYgbmV0X3JhdGVsaW1pdCgpKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJXcm9uZyBhZGRyZXNzIG1hc2sgJXBJNCBmcm9tICVzLyVwSTRcbiIsCi0JCQkgICAgICAgbXAsIGRldi0+bmFtZSwgJnJ0LT5ydF9zcmMpOworCQkJICAgICAgIG1wLCBkZXYtPm5hbWUsICZpcF9oZHIoc2tiKS0+c2FkZHIpOwogCQl9CiAJfQogfQpAQCAtMTA0NCw3ICsxMDUxLDcgQEAKICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBpY21wX2NvbnRyb2wgaWNtcF9wb2ludGVyc1tOUl9JQ01QX1RZUEVTICsgMV0gPSB7CiAJW0lDTVBfRUNIT1JFUExZXSA9IHsKLQkJLmhhbmRsZXIgPSBpY21wX2Rpc2NhcmQsCisJCS5oYW5kbGVyID0gcGluZ19yY3YsCiAJfSwKIAlbMV0gPSB7CiAJCS5oYW5kbGVyID0gaWNtcF9kaXNjYXJkLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWdtcC5jIGIvbmV0L2lwdjQvaWdtcC5jCmluZGV4IDFmZDNkOWMuLjY3MmU0NzYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lnbXAuYworKysgYi9uZXQvaXB2NC9pZ21wLmMKQEAgLTE0OSwxNyArMTQ5LDExIEBACiBzdGF0aWMgaW50IGlwX21jX2FkZF9zcmMoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgKnBtY2EsIGludCBzZm1vZGUsCiAJCQkgaW50IHNmY291bnQsIF9fYmUzMiAqcHNmc3JjLCBpbnQgZGVsdGEpOwogCi0KLXN0YXRpYyB2b2lkIGlwX21jX2xpc3RfcmVjbGFpbShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCi17Ci0Ja2ZyZWUoY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBpcF9tY19saXN0LCByY3UpKTsKLX0KLQogc3RhdGljIHZvaWQgaXBfbWFfcHV0KHN0cnVjdCBpcF9tY19saXN0ICppbSkKIHsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmaW0tPnJlZmNudCkpIHsKIAkJaW5fZGV2X3B1dChpbS0+aW50ZXJmYWNlKTsKLQkJY2FsbF9yY3UoJmltLT5yY3UsIGlwX21jX2xpc3RfcmVjbGFpbSk7CisJCWtmcmVlX3JjdShpbSwgcmN1KTsKIAl9CiB9CiAKQEAgLTMwOSw2ICszMDMsNyBAQAogCXN0cnVjdCBpcGhkciAqcGlwOwogCXN0cnVjdCBpZ21wdjNfcmVwb3J0ICpwaWc7CiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOworCXN0cnVjdCBmbG93aTQgZmw0OwogCiAJd2hpbGUgKDEpIHsKIAkJc2tiID0gYWxsb2Nfc2tiKHNpemUgKyBMTF9BTExPQ0FURURfU1BBQ0UoZGV2KSwKQEAgLTMyMSwxOCArMzE2LDEzIEBACiAJfQogCWlnbXBfc2tiX3NpemUoc2tiKSA9IHNpemU7CiAKLQlydCA9IGlwX3JvdXRlX291dHB1dF9wb3J0cyhuZXQsIE5VTEwsIElHTVBWM19BTExfTUNSLCAwLAorCXJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKG5ldCwgJmZsNCwgTlVMTCwgSUdNUFYzX0FMTF9NQ1IsIDAsCiAJCQkJICAgMCwgMCwKIAkJCQkgICBJUFBST1RPX0lHTVAsIDAsIGRldi0+aWZpbmRleCk7CiAJaWYgKElTX0VSUihydCkpIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiBOVUxMOwogCX0KLQlpZiAocnQtPnJ0X3NyYyA9PSAwKSB7Ci0JCWtmcmVlX3NrYihza2IpOwotCQlpcF9ydF9wdXQocnQpOwotCQlyZXR1cm4gTlVMTDsKLQl9CiAKIAlza2JfZHN0X3NldChza2IsICZydC0+ZHN0KTsKIAlza2ItPmRldiA9IGRldjsKQEAgLTM0OCw4ICszMzgsOCBAQAogCXBpcC0+dG9zICAgICAgPSAweGMwOwogCXBpcC0+ZnJhZ19vZmYgPSBodG9ucyhJUF9ERik7CiAJcGlwLT50dGwgICAgICA9IDE7Ci0JcGlwLT5kYWRkciAgICA9IHJ0LT5ydF9kc3Q7Ci0JcGlwLT5zYWRkciAgICA9IHJ0LT5ydF9zcmM7CisJcGlwLT5kYWRkciAgICA9IGZsNC5kYWRkcjsKKwlwaXAtPnNhZGRyICAgID0gZmw0LnNhZGRyOwogCXBpcC0+cHJvdG9jb2wgPSBJUFBST1RPX0lHTVA7CiAJcGlwLT50b3RfbGVuICA9IDA7CS8qIGZpbGxlZCBpbiBsYXRlciAqLwogCWlwX3NlbGVjdF9pZGVudChwaXAsICZydC0+ZHN0LCBOVUxMKTsKQEAgLTY1NSw2ICs2NDUsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbl9kZXYtPmRldjsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CiAJX19iZTMyCWdyb3VwID0gcG1jID8gcG1jLT5tdWx0aWFkZHIgOiAwOworCXN0cnVjdCBmbG93aTQgZmw0OwogCV9fYmUzMglkc3Q7CiAKIAlpZiAodHlwZSA9PSBJR01QVjNfSE9TVF9NRU1CRVJTSElQX1JFUE9SVCkKQEAgLTY2NCwxNyArNjU1LDEyIEBACiAJZWxzZQogCQlkc3QgPSBncm91cDsKIAotCXJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKG5ldCwgTlVMTCwgZHN0LCAwLAorCXJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKG5ldCwgJmZsNCwgTlVMTCwgZHN0LCAwLAogCQkJCSAgIDAsIDAsCiAJCQkJICAgSVBQUk9UT19JR01QLCAwLCBkZXYtPmlmaW5kZXgpOwogCWlmIChJU19FUlIocnQpKQogCQlyZXR1cm4gLTE7CiAKLQlpZiAocnQtPnJ0X3NyYyA9PSAwKSB7Ci0JCWlwX3J0X3B1dChydCk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KIAlza2IgPSBhbGxvY19za2IoSUdNUF9TSVpFK0xMX0FMTE9DQVRFRF9TUEFDRShkZXYpLCBHRlBfQVRPTUlDKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKIAkJaXBfcnRfcHV0KHJ0KTsKQEAgLTY5NSw3ICs2ODEsNyBAQAogCWlwaC0+ZnJhZ19vZmYgPSBodG9ucyhJUF9ERik7CiAJaXBoLT50dGwgICAgICA9IDE7CiAJaXBoLT5kYWRkciAgICA9IGRzdDsKLQlpcGgtPnNhZGRyICAgID0gcnQtPnJ0X3NyYzsKKwlpcGgtPnNhZGRyICAgID0gZmw0LnNhZGRyOwogCWlwaC0+cHJvdG9jb2wgPSBJUFBST1RPX0lHTVA7CiAJaXBfc2VsZWN0X2lkZW50KGlwaCwgJnJ0LT5kc3QsIE5VTEwpOwogCSgodTgqKSZpcGhbMV0pWzBdID0gSVBPUFRfUkE7CkBAIC0xODM2LDEyICsxODIyLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woaXBfbWNfam9pbl9ncm91cCk7CiAKLXN0YXRpYyB2b2lkIGlwX3NmX3NvY2tsaXN0X3JlY2xhaW0oc3RydWN0IHJjdV9oZWFkICpycCkKLXsKLQlrZnJlZShjb250YWluZXJfb2YocnAsIHN0cnVjdCBpcF9zZl9zb2NrbGlzdCwgcmN1KSk7Ci0JLyogc2tfb21lbV9hbGxvYyBzaG91bGQgaGF2ZSBiZWVuIGRlY3JlYXNlZCBieSB0aGUgY2FsbGVyKi8KLX0KLQogc3RhdGljIGludCBpcF9tY19sZWF2ZV9zcmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbWNfc29ja2xpc3QgKmltbCwKIAkJCSAgIHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldikKIHsKQEAgLTE4NTgsMTggKzE4MzgsMTAgQEAKIAlyY3VfYXNzaWduX3BvaW50ZXIoaW1sLT5zZmxpc3QsIE5VTEwpOwogCS8qIGRlY3JlYXNlIG1lbSBub3cgdG8gYXZvaWQgdGhlIG1lbWxlYWsgd2FybmluZyAqLwogCWF0b21pY19zdWIoSVBfU0ZMU0laRShwc2YtPnNsX21heCksICZzay0+c2tfb21lbV9hbGxvYyk7Ci0JY2FsbF9yY3UoJnBzZi0+cmN1LCBpcF9zZl9zb2NrbGlzdF9yZWNsYWltKTsKKwlrZnJlZV9yY3UocHNmLCByY3UpOwogCXJldHVybiBlcnI7CiB9CiAKLQotc3RhdGljIHZvaWQgaXBfbWNfc29ja2xpc3RfcmVjbGFpbShzdHJ1Y3QgcmN1X2hlYWQgKnJwKQotewotCWtmcmVlKGNvbnRhaW5lcl9vZihycCwgc3RydWN0IGlwX21jX3NvY2tsaXN0LCByY3UpKTsKLQkvKiBza19vbWVtX2FsbG9jIHNob3VsZCBoYXZlIGJlZW4gZGVjcmVhc2VkIGJ5IHRoZSBjYWxsZXIqLwotfQotCi0KIC8qCiAgKglBc2sgYSBzb2NrZXQgdG8gbGVhdmUgYSBncm91cC4KICAqLwpAQCAtMTkwOSw3ICsxODgxLDcgQEAKIAkJcnRubF91bmxvY2soKTsKIAkJLyogZGVjcmVhc2UgbWVtIG5vdyB0byBhdm9pZCB0aGUgbWVtbGVhayB3YXJuaW5nICovCiAJCWF0b21pY19zdWIoc2l6ZW9mKCppbWwpLCAmc2stPnNrX29tZW1fYWxsb2MpOwotCQljYWxsX3JjdSgmaW1sLT5yY3UsIGlwX21jX3NvY2tsaXN0X3JlY2xhaW0pOworCQlrZnJlZV9yY3UoaW1sLCByY3UpOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKCFpbl9kZXYpCkBAIC0yMDI2LDcgKzE5OTgsNyBAQAogCQkJCW5ld3BzbC0+c2xfYWRkcltpXSA9IHBzbC0+c2xfYWRkcltpXTsKIAkJCS8qIGRlY3JlYXNlIG1lbSBub3cgdG8gYXZvaWQgdGhlIG1lbWxlYWsgd2FybmluZyAqLwogCQkJYXRvbWljX3N1YihJUF9TRkxTSVpFKHBzbC0+c2xfbWF4KSwgJnNrLT5za19vbWVtX2FsbG9jKTsKLQkJCWNhbGxfcmN1KCZwc2wtPnJjdSwgaXBfc2Zfc29ja2xpc3RfcmVjbGFpbSk7CisJCQlrZnJlZV9yY3UocHNsLCByY3UpOwogCQl9CiAJCXJjdV9hc3NpZ25fcG9pbnRlcihwbWMtPnNmbGlzdCwgbmV3cHNsKTsKIAkJcHNsID0gbmV3cHNsOwpAQCAtMjEyNyw3ICsyMDk5LDcgQEAKIAkJCXBzbC0+c2xfY291bnQsIHBzbC0+c2xfYWRkciwgMCk7CiAJCS8qIGRlY3JlYXNlIG1lbSBub3cgdG8gYXZvaWQgdGhlIG1lbWxlYWsgd2FybmluZyAqLwogCQlhdG9taWNfc3ViKElQX1NGTFNJWkUocHNsLT5zbF9tYXgpLCAmc2stPnNrX29tZW1fYWxsb2MpOwotCQljYWxsX3JjdSgmcHNsLT5yY3UsIGlwX3NmX3NvY2tsaXN0X3JlY2xhaW0pOworCQlrZnJlZV9yY3UocHNsLCByY3UpOwogCX0gZWxzZQogCQkodm9pZCkgaXBfbWNfZGVsX3NyYyhpbl9kZXYsICZtc2YtPmltc2ZfbXVsdGlhZGRyLCBwbWMtPnNmbW9kZSwKIAkJCTAsIE5VTEwsIDApOwpAQCAtMjMyNCw3ICsyMjk2LDcgQEAKIAkJCWlwX21jX2RlY19ncm91cChpbl9kZXYsIGltbC0+bXVsdGkuaW1yX211bHRpYWRkci5zX2FkZHIpOwogCQkvKiBkZWNyZWFzZSBtZW0gbm93IHRvIGF2b2lkIHRoZSBtZW1sZWFrIHdhcm5pbmcgKi8KIAkJYXRvbWljX3N1YihzaXplb2YoKmltbCksICZzay0+c2tfb21lbV9hbGxvYyk7Ci0JCWNhbGxfcmN1KCZpbWwtPnJjdSwgaXBfbWNfc29ja2xpc3RfcmVjbGFpbSk7CisJCWtmcmVlX3JjdShpbWwsIHJjdSk7CiAJfQogCXJ0bmxfdW5sb2NrKCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwppbmRleCAzOGYyM2U3Li42MWZhYzRjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCisrKyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTM1MCwzMCArMzUwLDI0IEBACiBFWFBPUlRfU1lNQk9MKGluZXRfY3NrX3Jlc2V0X2tlZXBhbGl2ZV90aW1lcik7CiAKIHN0cnVjdCBkc3RfZW50cnkgKmluZXRfY3NrX3JvdXRlX3JlcShzdHJ1Y3Qgc29jayAqc2ssCisJCQkJICAgICBzdHJ1Y3QgZmxvd2k0ICpmbDQsCiAJCQkJICAgICBjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiB7CiAJc3RydWN0IHJ0YWJsZSAqcnQ7CiAJY29uc3Qgc3RydWN0IGluZXRfcmVxdWVzdF9zb2NrICppcmVxID0gaW5ldF9yc2socmVxKTsKLQlzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0ID0gaW5ldF9yc2socmVxKS0+b3B0OwotCXN0cnVjdCBmbG93aTQgZmw0ID0gewotCQkuZmxvd2k0X29pZiA9IHNrLT5za19ib3VuZF9kZXZfaWYsCi0JCS5mbG93aTRfbWFyayA9IHNrLT5za19tYXJrLAotCQkuZGFkZHIgPSAoKG9wdCAmJiBvcHQtPnNycikgPwotCQkJICBvcHQtPmZhZGRyIDogaXJlcS0+cm10X2FkZHIpLAotCQkuc2FkZHIgPSBpcmVxLT5sb2NfYWRkciwKLQkJLmZsb3dpNF90b3MgPSBSVF9DT05OX0ZMQUdTKHNrKSwKLQkJLmZsb3dpNF9wcm90byA9IHNrLT5za19wcm90b2NvbCwKLQkJLmZsb3dpNF9mbGFncyA9IGluZXRfc2tfZmxvd2lfZmxhZ3Moc2spLAotCQkuZmw0X3Nwb3J0ID0gaW5ldF9zayhzayktPmluZXRfc3BvcnQsCi0JCS5mbDRfZHBvcnQgPSBpcmVxLT5ybXRfcG9ydCwKLQl9OworCXN0cnVjdCBpcF9vcHRpb25zX3JjdSAqb3B0ID0gaW5ldF9yc2socmVxKS0+b3B0OwogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAotCXNlY3VyaXR5X3JlcV9jbGFzc2lmeV9mbG93KHJlcSwgZmxvd2k0X3RvX2Zsb3dpKCZmbDQpKTsKLQlydCA9IGlwX3JvdXRlX291dHB1dF9mbG93KG5ldCwgJmZsNCwgc2spOworCWZsb3dpNF9pbml0X291dHB1dChmbDQsIHNrLT5za19ib3VuZF9kZXZfaWYsIHNrLT5za19tYXJrLAorCQkJICAgUlRfQ09OTl9GTEFHUyhzayksIFJUX1NDT1BFX1VOSVZFUlNFLAorCQkJICAgc2stPnNrX3Byb3RvY29sLCBpbmV0X3NrX2Zsb3dpX2ZsYWdzKHNrKSwKKwkJCSAgIChvcHQgJiYgb3B0LT5vcHQuc3JyKSA/IG9wdC0+b3B0LmZhZGRyIDogaXJlcS0+cm10X2FkZHIsCisJCQkgICBpcmVxLT5sb2NfYWRkciwgaXJlcS0+cm10X3BvcnQsIGluZXRfc2soc2spLT5pbmV0X3Nwb3J0KTsKKwlzZWN1cml0eV9yZXFfY2xhc3NpZnlfZmxvdyhyZXEsIGZsb3dpNF90b19mbG93aShmbDQpKTsKKwlydCA9IGlwX3JvdXRlX291dHB1dF9mbG93KG5ldCwgZmw0LCBzayk7CiAJaWYgKElTX0VSUihydCkpCiAJCWdvdG8gbm9fcm91dGU7Ci0JaWYgKG9wdCAmJiBvcHQtPmlzX3N0cmljdHJvdXRlICYmIHJ0LT5ydF9kc3QgIT0gcnQtPnJ0X2dhdGV3YXkpCisJaWYgKG9wdCAmJiBvcHQtPm9wdC5pc19zdHJpY3Ryb3V0ZSAmJiBmbDQtPmRhZGRyICE9IHJ0LT5ydF9nYXRld2F5KQogCQlnb3RvIHJvdXRlX2VycjsKIAlyZXR1cm4gJnJ0LT5kc3Q7CiAKQEAgLTM4NSw2ICszNzksMzkgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGluZXRfY3NrX3JvdXRlX3JlcSk7CiAKK3N0cnVjdCBkc3RfZW50cnkgKmluZXRfY3NrX3JvdXRlX2NoaWxkX3NvY2soc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICAgc3RydWN0IHNvY2sgKm5ld3NrLAorCQkJCQkgICAgY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQoreworCWNvbnN0IHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcSA9IGluZXRfcnNrKHJlcSk7CisJc3RydWN0IGluZXRfc29jayAqbmV3aW5ldCA9IGluZXRfc2sobmV3c2spOworCXN0cnVjdCBpcF9vcHRpb25zX3JjdSAqb3B0ID0gaXJlcS0+b3B0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKKwlzdHJ1Y3QgZmxvd2k0ICpmbDQ7CisJc3RydWN0IHJ0YWJsZSAqcnQ7CisKKwlmbDQgPSAmbmV3aW5ldC0+Y29yay5mbC51LmlwNDsKKwlmbG93aTRfaW5pdF9vdXRwdXQoZmw0LCBzay0+c2tfYm91bmRfZGV2X2lmLCBzay0+c2tfbWFyaywKKwkJCSAgIFJUX0NPTk5fRkxBR1Moc2spLCBSVF9TQ09QRV9VTklWRVJTRSwKKwkJCSAgIHNrLT5za19wcm90b2NvbCwgaW5ldF9za19mbG93aV9mbGFncyhzayksCisJCQkgICAob3B0ICYmIG9wdC0+b3B0LnNycikgPyBvcHQtPm9wdC5mYWRkciA6IGlyZXEtPnJtdF9hZGRyLAorCQkJICAgaXJlcS0+bG9jX2FkZHIsIGlyZXEtPnJtdF9wb3J0LCBpbmV0X3NrKHNrKS0+aW5ldF9zcG9ydCk7CisJc2VjdXJpdHlfcmVxX2NsYXNzaWZ5X2Zsb3cocmVxLCBmbG93aTRfdG9fZmxvd2koZmw0KSk7CisJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsIGZsNCwgc2spOworCWlmIChJU19FUlIocnQpKQorCQlnb3RvIG5vX3JvdXRlOworCWlmIChvcHQgJiYgb3B0LT5vcHQuaXNfc3RyaWN0cm91dGUgJiYgZmw0LT5kYWRkciAhPSBydC0+cnRfZ2F0ZXdheSkKKwkJZ290byByb3V0ZV9lcnI7CisJcmV0dXJuICZydC0+ZHN0OworCityb3V0ZV9lcnI6CisJaXBfcnRfcHV0KHJ0KTsKK25vX3JvdXRlOgorCUlQX0lOQ19TVEFUU19CSChuZXQsIElQU1RBVFNfTUlCX09VVE5PUk9VVEVTKTsKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGluZXRfY3NrX3JvdXRlX2NoaWxkX3NvY2spOworCiBzdGF0aWMgaW5saW5lIHUzMiBpbmV0X3N5bnFfaGFzaChjb25zdCBfX2JlMzIgcmFkZHIsIGNvbnN0IF9fYmUxNiBycG9ydCwKIAkJCQkgY29uc3QgdTMyIHJuZCwgY29uc3QgdTMyIHN5bnFfaHNpemUpCiB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2RpYWcuYyBiL25ldC9pcHY0L2luZXRfZGlhZy5jCmluZGV4IDJhZGExNzEuLjZmZmU5NGMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfZGlhZy5jCisrKyBiL25ldC9pcHY0L2luZXRfZGlhZy5jCkBAIC0xMjQsNyArMTI0LDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQgKENPTkZJR19JUFY2X01PRFVMRSkKIAlpZiAoci0+aWRpYWdfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCXN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTsKKwkJY29uc3Qgc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwogCiAJCWlwdjZfYWRkcl9jb3B5KChzdHJ1Y3QgaW42X2FkZHIgKilyLT5pZC5pZGlhZ19zcmMsCiAJCQkgICAgICAgJm5wLT5yY3Zfc2FkZHIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9scm8uYyBiL25ldC9pcHY0L2luZXRfbHJvLmMKaW5kZXggNDcwMzhjYi4uODVhMGY3NSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9scm8uYworKysgYi9uZXQvaXB2NC9pbmV0X2xyby5jCkBAIC01MSw4ICs1MSw4IEBACiAgKiBCYXNpYyB0Y3AgY2hlY2tzIHdoZXRoZXIgcGFja2V0IGlzIHN1aXRhYmxlIGZvciBMUk8KICAqLwogCi1zdGF0aWMgaW50IGxyb190Y3BfaXBfY2hlY2soc3RydWN0IGlwaGRyICppcGgsIHN0cnVjdCB0Y3BoZHIgKnRjcGgsCi0JCQkgICAgaW50IGxlbiwgc3RydWN0IG5ldF9scm9fZGVzYyAqbHJvX2Rlc2MpCitzdGF0aWMgaW50IGxyb190Y3BfaXBfY2hlY2soY29uc3Qgc3RydWN0IGlwaGRyICppcGgsIGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRjcGgsCisJCQkgICAgaW50IGxlbiwgY29uc3Qgc3RydWN0IG5ldF9scm9fZGVzYyAqbHJvX2Rlc2MpCiB7CiAgICAgICAgIC8qIGNoZWNrIGlwIGhlYWRlcjogZG9uJ3QgYWdncmVnYXRlIHBhZGRlZCBmcmFtZXMgKi8KIAlpZiAobnRvaHMoaXBoLT50b3RfbGVuKSAhPSBsZW4pCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9mb3J3YXJkLmMgYi9uZXQvaXB2NC9pcF9mb3J3YXJkLmMKaW5kZXggOTk0NjFmMC4uM2IzNGQxYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZm9yd2FyZC5jCisrKyBiL25ldC9pcHY0L2lwX2ZvcndhcmQuYwpAQCAtODQsNyArODQsNyBAQAogCiAJcnQgPSBza2JfcnRhYmxlKHNrYik7CiAKLQlpZiAob3B0LT5pc19zdHJpY3Ryb3V0ZSAmJiBydC0+cnRfZHN0ICE9IHJ0LT5ydF9nYXRld2F5KQorCWlmIChvcHQtPmlzX3N0cmljdHJvdXRlICYmIGlwX2hkcihza2IpLT5kYWRkciAhPSBydC0+cnRfZ2F0ZXdheSkKIAkJZ290byBzcl9mYWlsZWQ7CiAKIAlpZiAodW5saWtlbHkoc2tiLT5sZW4gPiBkc3RfbXR1KCZydC0+ZHN0KSAmJiAhc2tiX2lzX2dzbyhza2IpICYmCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9mcmFnbWVudC5jIGIvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYwppbmRleCBhMTE1MWI4Li4wYWQ2MDM1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9mcmFnbWVudC5jCisrKyBiL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMKQEAgLTc3LDIyICs3Nyw0MCBAQAogCXN0cnVjdCBpbmV0X3BlZXIgKnBlZXI7CiB9OwogCi0jZGVmaW5lIElQRlJBR19FQ05fQ0xFQVIgIDB4MDEgLyogb25lIGZyYWcgaGFkIElORVRfRUNOX05PVF9FQ1QgKi8KLSNkZWZpbmUgSVBGUkFHX0VDTl9TRVRfQ0UgMHgwNCAvKiBvbmUgZnJhZyBoYWQgSU5FVF9FQ05fQ0UgKi8KKy8qIFJGQyAzMTY4IHN1cHBvcnQgOgorICogV2Ugd2FudCB0byBjaGVjayBFQ04gdmFsdWVzIG9mIGFsbCBmcmFnbWVudHMsIGRvIGRldGVjdCBpbnZhbGlkIGNvbWJpbmF0aW9ucy4KKyAqIEluIGlwcS0+ZWNuLCB3ZSBzdG9yZSB0aGUgT1IgdmFsdWUgb2YgZWFjaCBpcDRfZnJhZ19lY24oKSBmcmFnbWVudCB2YWx1ZS4KKyAqLworI2RlZmluZQlJUEZSQUdfRUNOX05PVF9FQ1QJMHgwMSAvKiBvbmUgZnJhZyBoYWQgRUNOX05PVF9FQ1QgKi8KKyNkZWZpbmUJSVBGUkFHX0VDTl9FQ1RfMQkweDAyIC8qIG9uZSBmcmFnIGhhZCBFQ05fRUNUXzEgKi8KKyNkZWZpbmUJSVBGUkFHX0VDTl9FQ1RfMAkweDA0IC8qIG9uZSBmcmFnIGhhZCBFQ05fRUNUXzAgKi8KKyNkZWZpbmUJSVBGUkFHX0VDTl9DRQkJMHgwOCAvKiBvbmUgZnJhZyBoYWQgRUNOX0NFICovCiAKIHN0YXRpYyBpbmxpbmUgdTggaXA0X2ZyYWdfZWNuKHU4IHRvcykKIHsKLQl0b3MgPSAodG9zICYgSU5FVF9FQ05fTUFTSykgKyAxOwotCS8qCi0JICogQWZ0ZXIgdGhlIGxhc3Qgb3BlcmF0aW9uIHdlIGhhdmUgKGluIGJpbmFyeSk6Ci0JICogSU5FVF9FQ05fTk9UX0VDVCA9PiAwMDEKLQkgKiBJTkVUX0VDTl9FQ1RfMSAgID0+IDAxMAotCSAqIElORVRfRUNOX0VDVF8wICAgPT4gMDExCi0JICogSU5FVF9FQ05fQ0UgICAgICA9PiAxMDAKLQkgKi8KLQlyZXR1cm4gKHRvcyAmIDIpID8gMCA6IHRvczsKKwlyZXR1cm4gMSA8PCAodG9zICYgSU5FVF9FQ05fTUFTSyk7CiB9CiAKKy8qIEdpdmVuIHRoZSBPUiB2YWx1ZXMgb2YgYWxsIGZyYWdtZW50cywgYXBwbHkgUkZDIDMxNjggNS4zIHJlcXVpcmVtZW50cworICogVmFsdWUgOiAweGZmIGlmIGZyYW1lIHNob3VsZCBiZSBkcm9wcGVkLgorICogICAgICAgICAwIG9yIElORVRfRUNOX0NFIHZhbHVlLCB0byBiZSBPUmVkIGluIHRvIGZpbmFsIGlwaC0+dG9zIGZpZWxkCisgKi8KK3N0YXRpYyBjb25zdCB1OCBpcDRfZnJhZ19lY25fdGFibGVbMTZdID0geworCS8qIGF0IGxlYXN0IG9uZSBmcmFnbWVudCBoYWQgQ0UsIGFuZCBvdGhlcnMgRUNUXzAgb3IgRUNUXzEgKi8KKwlbSVBGUkFHX0VDTl9DRSB8IElQRlJBR19FQ05fRUNUXzBdCQkJPSBJTkVUX0VDTl9DRSwKKwlbSVBGUkFHX0VDTl9DRSB8IElQRlJBR19FQ05fRUNUXzFdCQkJPSBJTkVUX0VDTl9DRSwKKwlbSVBGUkFHX0VDTl9DRSB8IElQRlJBR19FQ05fRUNUXzAgfCBJUEZSQUdfRUNOX0VDVF8xXQk9IElORVRfRUNOX0NFLAorCisJLyogaW52YWxpZCBjb21iaW5hdGlvbnMgOiBkcm9wIGZyYW1lICovCisJW0lQRlJBR19FQ05fTk9UX0VDVCB8IElQRlJBR19FQ05fQ0VdID0gMHhmZiwKKwlbSVBGUkFHX0VDTl9OT1RfRUNUIHwgSVBGUkFHX0VDTl9FQ1RfMF0gPSAweGZmLAorCVtJUEZSQUdfRUNOX05PVF9FQ1QgfCBJUEZSQUdfRUNOX0VDVF8xXSA9IDB4ZmYsCisJW0lQRlJBR19FQ05fTk9UX0VDVCB8IElQRlJBR19FQ05fRUNUXzAgfCBJUEZSQUdfRUNOX0VDVF8xXSA9IDB4ZmYsCisJW0lQRlJBR19FQ05fTk9UX0VDVCB8IElQRlJBR19FQ05fQ0UgfCBJUEZSQUdfRUNOX0VDVF8wXSA9IDB4ZmYsCisJW0lQRlJBR19FQ05fTk9UX0VDVCB8IElQRlJBR19FQ05fQ0UgfCBJUEZSQUdfRUNOX0VDVF8xXSA9IDB4ZmYsCisJW0lQRlJBR19FQ05fTk9UX0VDVCB8IElQRlJBR19FQ05fQ0UgfCBJUEZSQUdfRUNOX0VDVF8wIHwgSVBGUkFHX0VDTl9FQ1RfMV0gPSAweGZmLAorfTsKKwogc3RhdGljIHN0cnVjdCBpbmV0X2ZyYWdzIGlwNF9mcmFnczsKIAogaW50IGlwX2ZyYWdfbnF1ZXVlcyhzdHJ1Y3QgbmV0ICpuZXQpCkBAIC0yMjMsMzEgKzI0MSwzMCBAQAogCiAJaWYgKChxcC0+cS5sYXN0X2luICYgSU5FVF9GUkFHX0ZJUlNUX0lOKSAmJiBxcC0+cS5mcmFnbWVudHMgIT0gTlVMTCkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqaGVhZCA9IHFwLT5xLmZyYWdtZW50czsKKwkJY29uc3Qgc3RydWN0IGlwaGRyICppcGg7CisJCWludCBlcnI7CiAKIAkJcmN1X3JlYWRfbG9jaygpOwogCQloZWFkLT5kZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIHFwLT5paWYpOwogCQlpZiAoIWhlYWQtPmRldikKIAkJCWdvdG8gb3V0X3JjdV91bmxvY2s7CiAKKwkJLyogc2tiIGRzdCBpcyBzdGFsZSwgZHJvcCBpdCwgYW5kIHBlcmZvcm0gcm91dGUgbG9va3VwIGFnYWluICovCisJCXNrYl9kc3RfZHJvcChoZWFkKTsKKwkJaXBoID0gaXBfaGRyKGhlYWQpOworCQllcnIgPSBpcF9yb3V0ZV9pbnB1dF9ub3JlZihoZWFkLCBpcGgtPmRhZGRyLCBpcGgtPnNhZGRyLAorCQkJCQkgICBpcGgtPnRvcywgaGVhZC0+ZGV2KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0X3JjdV91bmxvY2s7CisKIAkJLyoKLQkJICogT25seSBzZWFyY2ggcm91dGVyIHRhYmxlIGZvciB0aGUgaGVhZCBmcmFnbWVudCwKLQkJICogd2hlbiBkZWZyYWdpbmcgdGltZW91dCBhdCBQUkVfUk9VVElORyBIT09LLgorCQkgKiBPbmx5IGFuIGVuZCBob3N0IG5lZWRzIHRvIHNlbmQgYW4gSUNNUAorCQkgKiAiRnJhZ21lbnQgUmVhc3NlbWJseSBUaW1lb3V0IiBtZXNzYWdlLCBwZXIgUkZDNzkyLgogCQkgKi8KLQkJaWYgKHFwLT51c2VyID09IElQX0RFRlJBR19DT05OVFJBQ0tfSU4gJiYgIXNrYl9kc3QoaGVhZCkpIHsKLQkJCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKGhlYWQpOwotCQkJaW50IGVyciA9IGlwX3JvdXRlX2lucHV0KGhlYWQsIGlwaC0+ZGFkZHIsIGlwaC0+c2FkZHIsCi0JCQkJCQkgaXBoLT50b3MsIGhlYWQtPmRldik7Ci0JCQlpZiAodW5saWtlbHkoZXJyKSkKLQkJCQlnb3RvIG91dF9yY3VfdW5sb2NrOworCQlpZiAocXAtPnVzZXIgPT0gSVBfREVGUkFHX0NPTk5UUkFDS19JTiAmJgorCQkgICAgc2tiX3J0YWJsZShoZWFkKS0+cnRfdHlwZSAhPSBSVE5fTE9DQUwpCisJCQlnb3RvIG91dF9yY3VfdW5sb2NrOwogCi0JCQkvKgotCQkJICogT25seSBhbiBlbmQgaG9zdCBuZWVkcyB0byBzZW5kIGFuIElDTVAKLQkJCSAqICJGcmFnbWVudCBSZWFzc2VtYmx5IFRpbWVvdXQiIG1lc3NhZ2UsIHBlciBSRkM3OTIuCi0JCQkgKi8KLQkJCWlmIChza2JfcnRhYmxlKGhlYWQpLT5ydF90eXBlICE9IFJUTl9MT0NBTCkKLQkJCQlnb3RvIG91dF9yY3VfdW5sb2NrOwotCi0JCX0KIAogCQkvKiBTZW5kIGFuIElDTVAgIkZyYWdtZW50IFJlYXNzZW1ibHkgVGltZW91dCIgbWVzc2FnZS4gKi8KIAkJaWNtcF9zZW5kKGhlYWQsIElDTVBfVElNRV9FWENFRURFRCwgSUNNUF9FWENfRlJBR1RJTUUsIDApOwpAQCAtNTI1LDkgKzU0MiwxNSBAQAogCWludCBsZW47CiAJaW50IGlobGVuOwogCWludCBlcnI7CisJdTggZWNuOwogCiAJaXBxX2tpbGwocXApOwogCisJZWNuID0gaXA0X2ZyYWdfZWNuX3RhYmxlW3FwLT5lY25dOworCWlmICh1bmxpa2VseShlY24gPT0gMHhmZikpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXRfZmFpbDsKKwl9CiAJLyogTWFrZSB0aGUgb25lIHdlIGp1c3QgcmVjZWl2ZWQgdGhlIGhlYWQuICovCiAJaWYgKHByZXYpIHsKIAkJaGVhZCA9IHByZXYtPm5leHQ7CkBAIC02MDYsMTcgKzYyOSw3IEBACiAJaXBoID0gaXBfaGRyKGhlYWQpOwogCWlwaC0+ZnJhZ19vZmYgPSAwOwogCWlwaC0+dG90X2xlbiA9IGh0b25zKGxlbik7Ci0JLyogUkZDMzE2OCA1LjMgRnJhZ21lbnRhdGlvbiBzdXBwb3J0Ci0JICogSWYgb25lIGZyYWdtZW50IGhhZCBJTkVUX0VDTl9OT1RfRUNULAotCSAqCXJlYXNzZW1ibGVkIGZyYW1lIGFsc28gaGFzIElORVRfRUNOX05PVF9FQ1QKLQkgKiBFbGlmIG9uZSBmcmFnbWVudCBoYWQgSU5FVF9FQ05fQ0UKLQkgKglyZWFzc2VtYmxlZCBmcmFtZSBhbHNvIGhhcyBJTkVUX0VDTl9DRQotCSAqLwotCWlmIChxcC0+ZWNuICYgSVBGUkFHX0VDTl9DTEVBUikKLQkJaXBoLT50b3MgJj0gfklORVRfRUNOX01BU0s7Ci0JZWxzZSBpZiAocXAtPmVjbiAmIElQRlJBR19FQ05fU0VUX0NFKQotCQlpcGgtPnRvcyB8PSBJTkVUX0VDTl9DRTsKLQorCWlwaC0+dG9zIHw9IGVjbjsKIAlJUF9JTkNfU1RBVFNfQkgobmV0LCBJUFNUQVRTX01JQl9SRUFTTU9LUyk7CiAJcXAtPnEuZnJhZ21lbnRzID0gTlVMTDsKIAlxcC0+cS5mcmFnbWVudHNfdGFpbCA9IE5VTEw7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9ncmUuYyBiL25ldC9pcHY0L2lwX2dyZS5jCmluZGV4IGRhNTk0MWYuLjg4NzEwNjcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2dyZS5jCisrKyBiL25ldC9pcHY0L2lwX2dyZS5jCkBAIC00MTMsMTEgKzQxMyw2IEBACiAKIAlkZXZfbmV0X3NldChkZXYsIG5ldCk7CiAKLQlpZiAoc3RyY2hyKG5hbWUsICclJykpIHsKLQkJaWYgKGRldl9hbGxvY19uYW1lKGRldiwgbmFtZSkgPCAwKQotCQkJZ290byBmYWlsZWRfZnJlZTsKLQl9Ci0KIAludCA9IG5ldGRldl9wcml2KGRldik7CiAJbnQtPnBhcm1zID0gKnBhcm1zOwogCWRldi0+cnRubF9saW5rX29wcyA9ICZpcGdyZV9saW5rX29wczsKQEAgLTQ2Miw3ICs0NTcsNyBAQAogICAgYnkgdGhlbXNlbGY/Pz8KICAqLwogCi0Jc3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gKGNvbnN0IHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKIAlfX2JlMTYJICAgICAqcCA9IChfX2JlMTYqKShza2ItPmRhdGErKGlwaC0+aWhsPDwyKSk7CiAJaW50IGdyZWhsZW4gPSAoaXBoLT5paGw8PDIpICsgNDsKIAljb25zdCBpbnQgdHlwZSA9IGljbXBfaGRyKHNrYiktPnR5cGU7CkBAIC01MzQsNyArNTI5LDcgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGlwZ3JlX2Vjbl9kZWNhcHN1bGF0ZShzdHJ1Y3QgaXBoZHIgKmlwaCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcGdyZV9lY25fZGVjYXBzdWxhdGUoY29uc3Qgc3RydWN0IGlwaGRyICppcGgsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaWYgKElORVRfRUNOX2lzX2NlKGlwaC0+dG9zKSkgewogCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHsKQEAgLTU0NiwxOSArNTQxLDE5IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdTgKLWlwZ3JlX2Vjbl9lbmNhcHN1bGF0ZSh1OCB0b3MsIHN0cnVjdCBpcGhkciAqb2xkX2lwaCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK2lwZ3JlX2Vjbl9lbmNhcHN1bGF0ZSh1OCB0b3MsIGNvbnN0IHN0cnVjdCBpcGhkciAqb2xkX2lwaCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAl1OCBpbm5lciA9IDA7CiAJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQogCQlpbm5lciA9IG9sZF9pcGgtPnRvczsKIAllbHNlIGlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKQotCQlpbm5lciA9IGlwdjZfZ2V0X2RzZmllbGQoKHN0cnVjdCBpcHY2aGRyICopb2xkX2lwaCk7CisJCWlubmVyID0gaXB2Nl9nZXRfZHNmaWVsZCgoY29uc3Qgc3RydWN0IGlwdjZoZHIgKilvbGRfaXBoKTsKIAlyZXR1cm4gSU5FVF9FQ05fZW5jYXBzdWxhdGUodG9zLCBpbm5lcik7CiB9CiAKIHN0YXRpYyBpbnQgaXBncmVfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGlwaGRyICppcGg7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGg7CiAJdTggICAgICpoOwogCV9fYmUxNiAgICBmbGFnczsKIAlfX3N1bTE2ICAgY3N1bSA9IDA7CkBAIC02OTcsOCArNjkyLDkgQEAKIHsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBwY3B1X3RzdGF0cyAqdHN0YXRzOwotCXN0cnVjdCBpcGhkciAgKm9sZF9pcGggPSBpcF9oZHIoc2tiKTsKLQlzdHJ1Y3QgaXBoZHIgICp0aXBoOworCWNvbnN0IHN0cnVjdCBpcGhkciAgKm9sZF9pcGggPSBpcF9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3QgaXBoZHIgICp0aXBoOworCXN0cnVjdCBmbG93aTQgZmw0OwogCXU4ICAgICB0b3M7CiAJX19iZTE2IGRmOwogCXN0cnVjdCBydGFibGUgKnJ0OyAgICAgCQkJLyogUm91dGUgdG8gdGhlIG90aGVyIGhvc3QgKi8KQEAgLTcxNCw3ICs3MTAsNyBAQAogCiAJaWYgKGRldi0+aGVhZGVyX29wcyAmJiBkZXYtPnR5cGUgPT0gQVJQSFJEX0lQR1JFKSB7CiAJCWdyZV9obGVuID0gMDsKLQkJdGlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7CisJCXRpcGggPSAoY29uc3Qgc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOwogCX0gZWxzZSB7CiAJCWdyZV9obGVuID0gdHVubmVsLT5obGVuOwogCQl0aXBoID0gJnR1bm5lbC0+cGFybXMuaXBoOwpAQCAtNzM1LDE0ICs3MzEsMTQgQEAKIAkJfQogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQogCQllbHNlIGlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7Ci0JCQlzdHJ1Y3QgaW42X2FkZHIgKmFkZHI2OworCQkJY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyNjsKIAkJCWludCBhZGRyX3R5cGU7CiAJCQlzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCA9IHNrYl9kc3Qoc2tiKS0+bmVpZ2hib3VyOwogCiAJCQlpZiAobmVpZ2ggPT0gTlVMTCkKIAkJCQlnb3RvIHR4X2Vycm9yOwogCi0JCQlhZGRyNiA9IChzdHJ1Y3QgaW42X2FkZHIgKikmbmVpZ2gtPnByaW1hcnlfa2V5OworCQkJYWRkcjYgPSAoY29uc3Qgc3RydWN0IGluNl9hZGRyICopJm5laWdoLT5wcmltYXJ5X2tleTsKIAkJCWFkZHJfdHlwZSA9IGlwdjZfYWRkcl90eXBlKGFkZHI2KTsKIAogCQkJaWYgKGFkZHJfdHlwZSA9PSBJUFY2X0FERFJfQU5ZKSB7CkBAIC03NjYsMTAgKzc2MiwxMCBAQAogCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCiAJCQl0b3MgPSBvbGRfaXBoLT50b3M7CiAJCWVsc2UgaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpCi0JCQl0b3MgPSBpcHY2X2dldF9kc2ZpZWxkKChzdHJ1Y3QgaXB2NmhkciAqKW9sZF9pcGgpOworCQkJdG9zID0gaXB2Nl9nZXRfZHNmaWVsZCgoY29uc3Qgc3RydWN0IGlwdjZoZHIgKilvbGRfaXBoKTsKIAl9CiAKLQlydCA9IGlwX3JvdXRlX291dHB1dF9ncmUoZGV2X25ldChkZXYpLCBkc3QsIHRpcGgtPnNhZGRyLAorCXJ0ID0gaXBfcm91dGVfb3V0cHV0X2dyZShkZXZfbmV0KGRldiksICZmbDQsIGRzdCwgdGlwaC0+c2FkZHIsCiAJCQkJIHR1bm5lbC0+cGFybXMub19rZXksIFJUX1RPUyh0b3MpLAogCQkJCSB0dW5uZWwtPnBhcm1zLmxpbmspOwogCWlmIChJU19FUlIocnQpKSB7CkBAIC04NzMsMTUgKzg2OSwxNSBAQAogCWlwaC0+ZnJhZ19vZmYJCT0JZGY7CiAJaXBoLT5wcm90b2NvbAkJPQlJUFBST1RPX0dSRTsKIAlpcGgtPnRvcwkJPQlpcGdyZV9lY25fZW5jYXBzdWxhdGUodG9zLCBvbGRfaXBoLCBza2IpOwotCWlwaC0+ZGFkZHIJCT0JcnQtPnJ0X2RzdDsKLQlpcGgtPnNhZGRyCQk9CXJ0LT5ydF9zcmM7CisJaXBoLT5kYWRkcgkJPQlmbDQuZGFkZHI7CisJaXBoLT5zYWRkcgkJPQlmbDQuc2FkZHI7CiAKIAlpZiAoKGlwaC0+dHRsID0gdGlwaC0+dHRsKSA9PSAwKSB7CiAJCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKIAkJCWlwaC0+dHRsID0gb2xkX2lwaC0+dHRsOwogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQogCQllbHNlIGlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKQotCQkJaXBoLT50dGwgPSAoKHN0cnVjdCBpcHY2aGRyICopb2xkX2lwaCktPmhvcF9saW1pdDsKKwkJCWlwaC0+dHRsID0gKChjb25zdCBzdHJ1Y3QgaXB2NmhkciAqKW9sZF9pcGgpLT5ob3BfbGltaXQ7CiAjZW5kaWYKIAkJZWxzZQogCQkJaXBoLT50dGwgPSBpcDRfZHN0X2hvcGxpbWl0KCZydC0+ZHN0KTsKQEAgLTkyNyw3ICs5MjMsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICp0ZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWw7Ci0Jc3RydWN0IGlwaGRyICppcGg7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGg7CiAJaW50IGhsZW4gPSBMTF9NQVhfSEVBREVSOwogCWludCBtdHUgPSBFVEhfREFUQV9MRU47CiAJaW50IGFkZGVuZCA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpICsgNDsKQEAgLTkzOCwxMiArOTM0LDE0IEBACiAJLyogR3Vlc3Mgb3V0cHV0IGRldmljZSB0byBjaG9vc2UgcmVhc29uYWJsZSBtdHUgYW5kIG5lZWRlZF9oZWFkcm9vbSAqLwogCiAJaWYgKGlwaC0+ZGFkZHIpIHsKLQkJc3RydWN0IHJ0YWJsZSAqcnQgPSBpcF9yb3V0ZV9vdXRwdXRfZ3JlKGRldl9uZXQoZGV2KSwKLQkJCQkJCQlpcGgtPmRhZGRyLCBpcGgtPnNhZGRyLAotCQkJCQkJCXR1bm5lbC0+cGFybXMub19rZXksCi0JCQkJCQkJUlRfVE9TKGlwaC0+dG9zKSwKLQkJCQkJCQl0dW5uZWwtPnBhcm1zLmxpbmspOworCQlzdHJ1Y3QgZmxvd2k0IGZsNDsKKwkJc3RydWN0IHJ0YWJsZSAqcnQ7CiAKKwkJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfZ3JlKGRldl9uZXQoZGV2KSwgJmZsNCwKKwkJCQkJIGlwaC0+ZGFkZHIsIGlwaC0+c2FkZHIsCisJCQkJCSB0dW5uZWwtPnBhcm1zLm9fa2V5LAorCQkJCQkgUlRfVE9TKGlwaC0+dG9zKSwKKwkJCQkJIHR1bm5lbC0+cGFybXMubGluayk7CiAJCWlmICghSVNfRVJSKHJ0KSkgewogCQkJdGRldiA9IHJ0LT5kc3QuZGV2OwogCQkJaXBfcnRfcHV0KHJ0KTsKQEAgLTExODAsNyArMTE3OCw3IEBACiAKIHN0YXRpYyBpbnQgaXBncmVfaGVhZGVyX3BhcnNlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGNoYXIgKmhhZGRyKQogewotCXN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKSBza2JfbWFjX2hlYWRlcihza2IpOworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gKGNvbnN0IHN0cnVjdCBpcGhkciAqKSBza2JfbWFjX2hlYWRlcihza2IpOwogCW1lbWNweShoYWRkciwgJmlwaC0+c2FkZHIsIDQpOwogCXJldHVybiA0OwogfQpAQCAtMTE5NiwxMyArMTE5NCwxNSBAQAogCXN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJaWYgKGlwdjRfaXNfbXVsdGljYXN0KHQtPnBhcm1zLmlwaC5kYWRkcikpIHsKLQkJc3RydWN0IHJ0YWJsZSAqcnQgPSBpcF9yb3V0ZV9vdXRwdXRfZ3JlKGRldl9uZXQoZGV2KSwKLQkJCQkJCQl0LT5wYXJtcy5pcGguZGFkZHIsCi0JCQkJCQkJdC0+cGFybXMuaXBoLnNhZGRyLAotCQkJCQkJCXQtPnBhcm1zLm9fa2V5LAotCQkJCQkJCVJUX1RPUyh0LT5wYXJtcy5pcGgudG9zKSwKLQkJCQkJCQl0LT5wYXJtcy5saW5rKTsKKwkJc3RydWN0IGZsb3dpNCBmbDQ7CisJCXN0cnVjdCBydGFibGUgKnJ0OwogCisJCXJ0ID0gaXBfcm91dGVfb3V0cHV0X2dyZShkZXZfbmV0KGRldiksICZmbDQsCisJCQkJCSB0LT5wYXJtcy5pcGguZGFkZHIsCisJCQkJCSB0LT5wYXJtcy5pcGguc2FkZHIsCisJCQkJCSB0LT5wYXJtcy5vX2tleSwKKwkJCQkJIFJUX1RPUyh0LT5wYXJtcy5pcGgudG9zKSwKKwkJCQkJIHQtPnBhcm1zLmxpbmspOwogCQlpZiAoSVNfRVJSKHJ0KSkKIAkJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAkJZGV2ID0gcnQtPmRzdC5kZXY7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9pbnB1dC5jIGIvbmV0L2lwdjQvaXBfaW5wdXQuYwppbmRleCBkN2IyYjA5Li5jOGY0OGVmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9pbnB1dC5jCisrKyBiL25ldC9pcHY0L2lwX2lucHV0LmMKQEAgLTI2OCw3ICsyNjgsNyBAQAogc3RhdGljIGlubGluZSBpbnQgaXBfcmN2X29wdGlvbnMoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0OwotCXN0cnVjdCBpcGhkciAqaXBoOworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItPmRldjsKIAogCS8qIEl0IGxvb2tzIGFzIG92ZXJraWxsLCBiZWNhdXNlIG5vdCBhbGwKQEAgLTM3NCw3ICszNzQsNyBAQAogICovCiBpbnQgaXBfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKIHsKLQlzdHJ1Y3QgaXBoZHIgKmlwaDsKKwljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDsKIAl1MzIgbGVuOwogCiAJLyogV2hlbiB0aGUgaW50ZXJmYWNlIGlzIGluIHByb21pc2MuIG1vZGUsIGRyb3AgYWxsIHRoZSBjcmFwCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vcHRpb25zLmMgYi9uZXQvaXB2NC9pcF9vcHRpb25zLmMKaW5kZXggMjM5MWIyNC4uYzMxMThlMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3B0aW9ucy5jCisrKyBiL25ldC9pcHY0L2lwX29wdGlvbnMuYwpAQCAtMzYsOCArMzYsOCBAQAogICogc2FkZHIgaXMgYWRkcmVzcyBvZiBvdXRnb2luZyBpbnRlcmZhY2UuCiAgKi8KIAotdm9pZCBpcF9vcHRpb25zX2J1aWxkKHN0cnVjdCBza19idWZmICogc2tiLCBzdHJ1Y3QgaXBfb3B0aW9ucyAqIG9wdCwKLQkJCSAgICBfX2JlMzIgZGFkZHIsIHN0cnVjdCBydGFibGUgKnJ0LCBpbnQgaXNfZnJhZykKK3ZvaWQgaXBfb3B0aW9uc19idWlsZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0LAorCQkgICAgICBfX2JlMzIgZGFkZHIsIHN0cnVjdCBydGFibGUgKnJ0LCBpbnQgaXNfZnJhZykKIHsKIAl1bnNpZ25lZCBjaGFyICppcGggPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKIApAQCAtNTAsOSArNTAsOSBAQAogCiAJaWYgKCFpc19mcmFnKSB7CiAJCWlmIChvcHQtPnJyX25lZWRhZGRyKQotCQkJaXBfcnRfZ2V0X3NvdXJjZShpcGgrb3B0LT5ycitpcGhbb3B0LT5ycisyXS01LCBydCk7CisJCQlpcF9ydF9nZXRfc291cmNlKGlwaCtvcHQtPnJyK2lwaFtvcHQtPnJyKzJdLTUsIHNrYiwgcnQpOwogCQlpZiAob3B0LT50c19uZWVkYWRkcikKLQkJCWlwX3J0X2dldF9zb3VyY2UoaXBoK29wdC0+dHMraXBoW29wdC0+dHMrMl0tOSwgcnQpOworCQkJaXBfcnRfZ2V0X3NvdXJjZShpcGgrb3B0LT50cytpcGhbb3B0LT50cysyXS05LCBza2IsIHJ0KTsKIAkJaWYgKG9wdC0+dHNfbmVlZHRpbWUpIHsKIAkJCXN0cnVjdCB0aW1lc3BlYyB0djsKIAkJCV9fYmUzMiBtaWR0aW1lOwpAQCAtODMsOSArODMsOSBAQAogICogTk9URTogZG9wdCBjYW5ub3QgcG9pbnQgdG8gc2tiLgogICovCiAKLWludCBpcF9vcHRpb25zX2VjaG8oc3RydWN0IGlwX29wdGlvbnMgKiBkb3B0LCBzdHJ1Y3Qgc2tfYnVmZiAqIHNrYikKK2ludCBpcF9vcHRpb25zX2VjaG8oc3RydWN0IGlwX29wdGlvbnMgKmRvcHQsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGlwX29wdGlvbnMgKnNvcHQ7CisJY29uc3Qgc3RydWN0IGlwX29wdGlvbnMgKnNvcHQ7CiAJdW5zaWduZWQgY2hhciAqc3B0ciwgKmRwdHI7CiAJaW50IHNvZmZzZXQsIGRvZmZzZXQ7CiAJaW50CW9wdGxlbjsKQEAgLTk1LDEwICs5NSw4IEBACiAKIAlzb3B0ID0gJihJUENCKHNrYiktPm9wdCk7CiAKLQlpZiAoc29wdC0+b3B0bGVuID09IDApIHsKLQkJZG9wdC0+b3B0bGVuID0gMDsKKwlpZiAoc29wdC0+b3B0bGVuID09IDApCiAJCXJldHVybiAwOwotCX0KIAogCXNwdHIgPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKIAlkcHRyID0gZG9wdC0+X19kYXRhOwpAQCAtMTU3LDcgKzE1NSw3IEBACiAJCWRvcHQtPm9wdGxlbiArPSBvcHRsZW47CiAJfQogCWlmIChzb3B0LT5zcnIpIHsKLQkJdW5zaWduZWQgY2hhciAqIHN0YXJ0ID0gc3B0citzb3B0LT5zcnI7CisJCXVuc2lnbmVkIGNoYXIgKnN0YXJ0ID0gc3B0citzb3B0LT5zcnI7CiAJCV9fYmUzMiBmYWRkcjsKIAogCQlvcHRsZW4gID0gc3RhcnRbMV07CkBAIC00OTksMTkgKzQ5NywxOSBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBpcF9vcHRpb25zICppcF9vcHRpb25zX2dldF9hbGxvYyhjb25zdCBpbnQgb3B0bGVuKQorc3RhdGljIHN0cnVjdCBpcF9vcHRpb25zX3JjdSAqaXBfb3B0aW9uc19nZXRfYWxsb2MoY29uc3QgaW50IG9wdGxlbikKIHsKLQlyZXR1cm4ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlwX29wdGlvbnMpICsgKChvcHRsZW4gKyAzKSAmIH4zKSwKKwlyZXR1cm4ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlwX29wdGlvbnNfcmN1KSArICgob3B0bGVuICsgMykgJiB+MyksCiAJCSAgICAgICBHRlBfS0VSTkVMKTsKIH0KIAotc3RhdGljIGludCBpcF9vcHRpb25zX2dldF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBfb3B0aW9ucyAqKm9wdHAsCi0JCQkJIHN0cnVjdCBpcF9vcHRpb25zICpvcHQsIGludCBvcHRsZW4pCitzdGF0aWMgaW50IGlwX29wdGlvbnNfZ2V0X2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9vcHRpb25zX3JjdSAqKm9wdHAsCisJCQkJIHN0cnVjdCBpcF9vcHRpb25zX3JjdSAqb3B0LCBpbnQgb3B0bGVuKQogewogCXdoaWxlIChvcHRsZW4gJiAzKQotCQlvcHQtPl9fZGF0YVtvcHRsZW4rK10gPSBJUE9QVF9FTkQ7Ci0Jb3B0LT5vcHRsZW4gPSBvcHRsZW47Ci0JaWYgKG9wdGxlbiAmJiBpcF9vcHRpb25zX2NvbXBpbGUobmV0LCBvcHQsIE5VTEwpKSB7CisJCW9wdC0+b3B0Ll9fZGF0YVtvcHRsZW4rK10gPSBJUE9QVF9FTkQ7CisJb3B0LT5vcHQub3B0bGVuID0gb3B0bGVuOworCWlmIChvcHRsZW4gJiYgaXBfb3B0aW9uc19jb21waWxlKG5ldCwgJm9wdC0+b3B0LCBOVUxMKSkgewogCQlrZnJlZShvcHQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC01MjAsMjkgKzUxOCwyOSBAQAogCXJldHVybiAwOwogfQogCi1pbnQgaXBfb3B0aW9uc19nZXRfZnJvbV91c2VyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwX29wdGlvbnMgKipvcHRwLAoraW50IGlwX29wdGlvbnNfZ2V0X2Zyb21fdXNlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9vcHRpb25zX3JjdSAqKm9wdHAsCiAJCQkgICAgIHVuc2lnbmVkIGNoYXIgX191c2VyICpkYXRhLCBpbnQgb3B0bGVuKQogewotCXN0cnVjdCBpcF9vcHRpb25zICpvcHQgPSBpcF9vcHRpb25zX2dldF9hbGxvYyhvcHRsZW4pOworCXN0cnVjdCBpcF9vcHRpb25zX3JjdSAqb3B0ID0gaXBfb3B0aW9uc19nZXRfYWxsb2Mob3B0bGVuKTsKIAogCWlmICghb3B0KQogCQlyZXR1cm4gLUVOT01FTTsKLQlpZiAob3B0bGVuICYmIGNvcHlfZnJvbV91c2VyKG9wdC0+X19kYXRhLCBkYXRhLCBvcHRsZW4pKSB7CisJaWYgKG9wdGxlbiAmJiBjb3B5X2Zyb21fdXNlcihvcHQtPm9wdC5fX2RhdGEsIGRhdGEsIG9wdGxlbikpIHsKIAkJa2ZyZWUob3B0KTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCXJldHVybiBpcF9vcHRpb25zX2dldF9maW5pc2gobmV0LCBvcHRwLCBvcHQsIG9wdGxlbik7CiB9CiAKLWludCBpcF9vcHRpb25zX2dldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9vcHRpb25zICoqb3B0cCwKK2ludCBpcF9vcHRpb25zX2dldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9vcHRpb25zX3JjdSAqKm9wdHAsCiAJCSAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBvcHRsZW4pCiB7Ci0Jc3RydWN0IGlwX29wdGlvbnMgKm9wdCA9IGlwX29wdGlvbnNfZ2V0X2FsbG9jKG9wdGxlbik7CisJc3RydWN0IGlwX29wdGlvbnNfcmN1ICpvcHQgPSBpcF9vcHRpb25zX2dldF9hbGxvYyhvcHRsZW4pOwogCiAJaWYgKCFvcHQpCiAJCXJldHVybiAtRU5PTUVNOwogCWlmIChvcHRsZW4pCi0JCW1lbWNweShvcHQtPl9fZGF0YSwgZGF0YSwgb3B0bGVuKTsKKwkJbWVtY3B5KG9wdC0+b3B0Ll9fZGF0YSwgZGF0YSwgb3B0bGVuKTsKIAlyZXR1cm4gaXBfb3B0aW9uc19nZXRfZmluaXNoKG5ldCwgb3B0cCwgb3B0LCBvcHRsZW4pOwogfQogCkBAIC01NTUsNyArNTUzLDcgQEAKIAogCWlmIChvcHQtPnJyX25lZWRhZGRyKSB7CiAJCW9wdHB0ciA9ICh1bnNpZ25lZCBjaGFyICopcmF3ICsgb3B0LT5ycjsKLQkJaXBfcnRfZ2V0X3NvdXJjZSgmb3B0cHRyW29wdHB0clsyXS01XSwgcnQpOworCQlpcF9ydF9nZXRfc291cmNlKCZvcHRwdHJbb3B0cHRyWzJdLTVdLCBza2IsIHJ0KTsKIAkJb3B0LT5pc19jaGFuZ2VkID0gMTsKIAl9CiAJaWYgKG9wdC0+c3JyX2lzX2hpdCkgewpAQCAtNTY5LDE5ICs1NjcsMTggQEAKIAkJICAgICApIHsKIAkJCWlmIChzcnJwdHIgKyAzID4gc3Jyc3BhY2UpCiAJCQkJYnJlYWs7Ci0JCQlpZiAobWVtY21wKCZydC0+cnRfZHN0LCAmb3B0cHRyW3NycnB0ci0xXSwgNCkgPT0gMCkKKwkJCWlmIChtZW1jbXAoJmlwX2hkcihza2IpLT5kYWRkciwgJm9wdHB0cltzcnJwdHItMV0sIDQpID09IDApCiAJCQkJYnJlYWs7CiAJCX0KIAkJaWYgKHNycnB0ciArIDMgPD0gc3Jyc3BhY2UpIHsKIAkJCW9wdC0+aXNfY2hhbmdlZCA9IDE7Ci0JCQlpcF9ydF9nZXRfc291cmNlKCZvcHRwdHJbc3JycHRyLTFdLCBydCk7Ci0JCQlpcF9oZHIoc2tiKS0+ZGFkZHIgPSBydC0+cnRfZHN0OworCQkJaXBfcnRfZ2V0X3NvdXJjZSgmb3B0cHRyW3NycnB0ci0xXSwgc2tiLCBydCk7CiAJCQlvcHRwdHJbMl0gPSBzcnJwdHIrNDsKIAkJfSBlbHNlIGlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9DUklUICJpcF9mb3J3YXJkKCk6IEFyZ2ghIERlc3RpbmF0aW9uIGxvc3QhXG4iKTsKIAkJaWYgKG9wdC0+dHNfbmVlZGFkZHIpIHsKIAkJCW9wdHB0ciA9IHJhdyArIG9wdC0+dHM7Ci0JCQlpcF9ydF9nZXRfc291cmNlKCZvcHRwdHJbb3B0cHRyWzJdLTldLCBydCk7CisJCQlpcF9ydF9nZXRfc291cmNlKCZvcHRwdHJbb3B0cHRyWzJdLTldLCBza2IsIHJ0KTsKIAkJCW9wdC0+aXNfY2hhbmdlZCA9IDE7CiAJCX0KIAl9CkBAIC02MDMsNyArNjAwLDcgQEAKIAl1bnNpZ25lZCBsb25nIG9yZWZkc3Q7CiAJaW50IGVycjsKIAotCWlmICghb3B0LT5zcnIgfHwgIXJ0KQorCWlmICghcnQpCiAJCXJldHVybiAwOwogCiAJaWYgKHNrYi0+cGt0X3R5cGUgIT0gUEFDS0VUX0hPU1QpCkBAIC02MzcsNyArNjM0LDcgQEAKIAkJaWYgKHJ0Mi0+cnRfdHlwZSAhPSBSVE5fTE9DQUwpCiAJCQlicmVhazsKIAkJLyogU3VwZXJmYXN0IDgpIGxvb3BiYWNrIGZvcndhcmQgKi8KLQkJbWVtY3B5KCZpcGgtPmRhZGRyLCAmb3B0cHRyW3NycnB0ci0xXSwgNCk7CisJCWlwaC0+ZGFkZHIgPSBuZXh0aG9wOwogCQlvcHQtPmlzX2NoYW5nZWQgPSAxOwogCX0KIAlpZiAoc3JycHRyIDw9IHNycnNwYWNlKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vdXRwdXQuYyBiL25ldC9pcHY0L2lwX291dHB1dC5jCmluZGV4IDQ1OWMwMTEuLjk4YWYzNjkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L2lwX291dHB1dC5jCkBAIC0xNDAsMTQgKzE0MCwxNCBAQAogICoKICAqLwogaW50IGlwX2J1aWxkX2FuZF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2ssCi0JCQkgIF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLCBzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0KQorCQkJICBfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwgc3RydWN0IGlwX29wdGlvbnNfcmN1ICpvcHQpCiB7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCBydGFibGUgKnJ0ID0gc2tiX3J0YWJsZShza2IpOwogCXN0cnVjdCBpcGhkciAqaXBoOwogCiAJLyogQnVpbGQgdGhlIElQIGhlYWRlci4gKi8KLQlza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpICsgKG9wdCA/IG9wdC0+b3B0bGVuIDogMCkpOworCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcGhkcikgKyAob3B0ID8gb3B0LT5vcHQub3B0bGVuIDogMCkpOwogCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwogCWlwaCA9IGlwX2hkcihza2IpOwogCWlwaC0+dmVyc2lvbiAgPSA0OwpAQCAtMTU4LDE0ICsxNTgsMTQgQEAKIAllbHNlCiAJCWlwaC0+ZnJhZ19vZmYgPSAwOwogCWlwaC0+dHRsICAgICAgPSBpcF9zZWxlY3RfdHRsKGluZXQsICZydC0+ZHN0KTsKLQlpcGgtPmRhZGRyICAgID0gcnQtPnJ0X2RzdDsKLQlpcGgtPnNhZGRyICAgID0gcnQtPnJ0X3NyYzsKKwlpcGgtPmRhZGRyICAgID0gKG9wdCAmJiBvcHQtPm9wdC5zcnIgPyBvcHQtPm9wdC5mYWRkciA6IGRhZGRyKTsKKwlpcGgtPnNhZGRyICAgID0gc2FkZHI7CiAJaXBoLT5wcm90b2NvbCA9IHNrLT5za19wcm90b2NvbDsKIAlpcF9zZWxlY3RfaWRlbnQoaXBoLCAmcnQtPmRzdCwgc2spOwogCi0JaWYgKG9wdCAmJiBvcHQtPm9wdGxlbikgewotCQlpcGgtPmlobCArPSBvcHQtPm9wdGxlbj4+MjsKLQkJaXBfb3B0aW9uc19idWlsZChza2IsIG9wdCwgZGFkZHIsIHJ0LCAwKTsKKwlpZiAob3B0ICYmIG9wdC0+b3B0Lm9wdGxlbikgeworCQlpcGgtPmlobCArPSBvcHQtPm9wdC5vcHRsZW4+PjI7CisJCWlwX29wdGlvbnNfYnVpbGQoc2tiLCAmb3B0LT5vcHQsIGRhZGRyLCBydCwgMCk7CiAJfQogCiAJc2tiLT5wcmlvcml0eSA9IHNrLT5za19wcmlvcml0eTsKQEAgLTMxMiwxMSArMzEyLDEyIEBACiAJCQkgICAgIShJUENCKHNrYiktPmZsYWdzICYgSVBTS0JfUkVST1VURUQpKTsKIH0KIAotaW50IGlwX3F1ZXVlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKK2ludCBpcF9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmbG93aSAqZmwpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc2tiLT5zazsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7Ci0Jc3RydWN0IGlwX29wdGlvbnMgKm9wdCA9IGluZXQtPm9wdDsKKwlzdHJ1Y3QgaXBfb3B0aW9uc19yY3UgKmluZXRfb3B0OworCXN0cnVjdCBmbG93aTQgKmZsNDsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKIAlzdHJ1Y3QgaXBoZHIgKmlwaDsKIAlpbnQgcmVzOwpAQCAtMzI1LDYgKzMyNiw4IEBACiAJICogZi5lLiBieSBzb21ldGhpbmcgbGlrZSBTQ1RQLgogCSAqLwogCXJjdV9yZWFkX2xvY2soKTsKKwlpbmV0X29wdCA9IHJjdV9kZXJlZmVyZW5jZShpbmV0LT5pbmV0X29wdCk7CisJZmw0ID0gJmZsLT51LmlwNDsKIAlydCA9IHNrYl9ydGFibGUoc2tiKTsKIAlpZiAocnQgIT0gTlVMTCkKIAkJZ290byBwYWNrZXRfcm91dGVkOwpAQCAtMzM2LDE0ICszMzksMTQgQEAKIAogCQkvKiBVc2UgY29ycmVjdCBkZXN0aW5hdGlvbiBhZGRyZXNzIGlmIHdlIGhhdmUgb3B0aW9ucy4gKi8KIAkJZGFkZHIgPSBpbmV0LT5pbmV0X2RhZGRyOwotCQlpZihvcHQgJiYgb3B0LT5zcnIpCi0JCQlkYWRkciA9IG9wdC0+ZmFkZHI7CisJCWlmIChpbmV0X29wdCAmJiBpbmV0X29wdC0+b3B0LnNycikKKwkJCWRhZGRyID0gaW5ldF9vcHQtPm9wdC5mYWRkcjsKIAogCQkvKiBJZiB0aGlzIGZhaWxzLCByZXRyYW5zbWl0IG1lY2hhbmlzbSBvZiB0cmFuc3BvcnQgbGF5ZXIgd2lsbAogCQkgKiBrZWVwIHRyeWluZyB1bnRpbCByb3V0ZSBhcHBlYXJzIG9yIHRoZSBjb25uZWN0aW9uIHRpbWVzCiAJCSAqIGl0c2VsZiBvdXQuCiAJCSAqLwotCQlydCA9IGlwX3JvdXRlX291dHB1dF9wb3J0cyhzb2NrX25ldChzayksIHNrLAorCQlydCA9IGlwX3JvdXRlX291dHB1dF9wb3J0cyhzb2NrX25ldChzayksIGZsNCwgc2ssCiAJCQkJCSAgIGRhZGRyLCBpbmV0LT5pbmV0X3NhZGRyLAogCQkJCQkgICBpbmV0LT5pbmV0X2Rwb3J0LAogCQkJCQkgICBpbmV0LT5pbmV0X3Nwb3J0LApAQCAtMzU3LDExICszNjAsMTEgQEAKIAlza2JfZHN0X3NldF9ub3JlZihza2IsICZydC0+ZHN0KTsKIAogcGFja2V0X3JvdXRlZDoKLQlpZiAob3B0ICYmIG9wdC0+aXNfc3RyaWN0cm91dGUgJiYgcnQtPnJ0X2RzdCAhPSBydC0+cnRfZ2F0ZXdheSkKKwlpZiAoaW5ldF9vcHQgJiYgaW5ldF9vcHQtPm9wdC5pc19zdHJpY3Ryb3V0ZSAmJiBmbDQtPmRhZGRyICE9IHJ0LT5ydF9nYXRld2F5KQogCQlnb3RvIG5vX3JvdXRlOwogCiAJLyogT0ssIHdlIGtub3cgd2hlcmUgdG8gc2VuZCBpdCwgYWxsb2NhdGUgYW5kIGJ1aWxkIElQIGhlYWRlci4gKi8KLQlza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpICsgKG9wdCA/IG9wdC0+b3B0bGVuIDogMCkpOworCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcGhkcikgKyAoaW5ldF9vcHQgPyBpbmV0X29wdC0+b3B0Lm9wdGxlbiA6IDApKTsKIAlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKIAlpcGggPSBpcF9oZHIoc2tiKTsKIAkqKChfX2JlMTYgKilpcGgpID0gaHRvbnMoKDQgPDwgMTIpIHwgKDUgPDwgOCkgfCAoaW5ldC0+dG9zICYgMHhmZikpOwpAQCAtMzcxLDEzICszNzQsMTMgQEAKIAkJaXBoLT5mcmFnX29mZiA9IDA7CiAJaXBoLT50dGwgICAgICA9IGlwX3NlbGVjdF90dGwoaW5ldCwgJnJ0LT5kc3QpOwogCWlwaC0+cHJvdG9jb2wgPSBzay0+c2tfcHJvdG9jb2w7Ci0JaXBoLT5zYWRkciAgICA9IHJ0LT5ydF9zcmM7Ci0JaXBoLT5kYWRkciAgICA9IHJ0LT5ydF9kc3Q7CisJaXBoLT5zYWRkciAgICA9IGZsNC0+c2FkZHI7CisJaXBoLT5kYWRkciAgICA9IGZsNC0+ZGFkZHI7CiAJLyogVHJhbnNwb3J0IGxheWVyIHNldCBza2ItPmguZm9vIGl0c2VsZi4gKi8KIAotCWlmIChvcHQgJiYgb3B0LT5vcHRsZW4pIHsKLQkJaXBoLT5paGwgKz0gb3B0LT5vcHRsZW4gPj4gMjsKLQkJaXBfb3B0aW9uc19idWlsZChza2IsIG9wdCwgaW5ldC0+aW5ldF9kYWRkciwgcnQsIDApOworCWlmIChpbmV0X29wdCAmJiBpbmV0X29wdC0+b3B0Lm9wdGxlbikgeworCQlpcGgtPmlobCArPSBpbmV0X29wdC0+b3B0Lm9wdGxlbiA+PiAyOworCQlpcF9vcHRpb25zX2J1aWxkKHNrYiwgJmluZXRfb3B0LT5vcHQsIGluZXQtPmluZXRfZGFkZHIsIHJ0LCAwKTsKIAl9CiAKIAlpcF9zZWxlY3RfaWRlbnRfbW9yZShpcGgsICZydC0+ZHN0LCBzaywKQEAgLTc3Myw3ICs3NzYsOSBAQAogCQkJCSAgICAgICAobGVuZ3RoIC0gdHJhbnNoZHJsZW4pKTsKIH0KIAotc3RhdGljIGludCBfX2lwX2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUsCitzdGF0aWMgaW50IF9faXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLAorCQkJICAgIHN0cnVjdCBmbG93aTQgKmZsNCwKKwkJCSAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSwKIAkJCSAgICBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLAogCQkJICAgIGludCBnZXRmcmFnKHZvaWQgKmZyb20sIGNoYXIgKnRvLCBpbnQgb2Zmc2V0LAogCQkJCQlpbnQgbGVuLCBpbnQgb2RkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSwKQEAgLTgwNSw3ICs4MTAsNyBAQAogCW1heGZyYWdsZW4gPSAoKG10dSAtIGZyYWdoZWFkZXJsZW4pICYgfjcpICsgZnJhZ2hlYWRlcmxlbjsKIAogCWlmIChjb3JrLT5sZW5ndGggKyBsZW5ndGggPiAweEZGRkYgLSBmcmFnaGVhZGVybGVuKSB7Ci0JCWlwX2xvY2FsX2Vycm9yKHNrLCBFTVNHU0laRSwgcnQtPnJ0X2RzdCwgaW5ldC0+aW5ldF9kcG9ydCwKKwkJaXBfbG9jYWxfZXJyb3Ioc2ssIEVNU0dTSVpFLCBmbDQtPmRhZGRyLCBpbmV0LT5pbmV0X2Rwb3J0LAogCQkJICAgICAgIG10dS1leHRoZHJsZW4pOwogCQlyZXR1cm4gLUVNU0dTSVpFOwogCX0KQEAgLTEwMzMsNyArMTAzOCw3IEBACiAJCQkgc3RydWN0IGlwY21fY29va2llICppcGMsIHN0cnVjdCBydGFibGUgKipydHApCiB7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwotCXN0cnVjdCBpcF9vcHRpb25zICpvcHQ7CisJc3RydWN0IGlwX29wdGlvbnNfcmN1ICpvcHQ7CiAJc3RydWN0IHJ0YWJsZSAqcnQ7CiAKIAkvKgpAQCAtMTA0Nyw3ICsxMDUyLDcgQEAKIAkJCWlmICh1bmxpa2VseShjb3JrLT5vcHQgPT0gTlVMTCkpCiAJCQkJcmV0dXJuIC1FTk9CVUZTOwogCQl9Ci0JCW1lbWNweShjb3JrLT5vcHQsIG9wdCwgc2l6ZW9mKHN0cnVjdCBpcF9vcHRpb25zKSArIG9wdC0+b3B0bGVuKTsKKwkJbWVtY3B5KGNvcmstPm9wdCwgJm9wdC0+b3B0LCBzaXplb2Yoc3RydWN0IGlwX29wdGlvbnMpICsgb3B0LT5vcHQub3B0bGVuKTsKIAkJY29yay0+ZmxhZ3MgfD0gSVBDT1JLX09QVDsKIAkJY29yay0+YWRkciA9IGlwYy0+YWRkcjsKIAl9CkBAIC0xMDgwLDcgKzEwODUsNyBAQAogICoKICAqCUxBVEVSOiBsZW5ndGggbXVzdCBiZSBhZGp1c3RlZCBieSBwYWQgYXQgdGFpbCwgd2hlbiBpdCBpcyByZXF1aXJlZC4KICAqLwotaW50IGlwX2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzaywKK2ludCBpcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCwKIAkJICAgaW50IGdldGZyYWcodm9pZCAqZnJvbSwgY2hhciAqdG8sIGludCBvZmZzZXQsIGludCBsZW4sCiAJCQkgICAgICAgaW50IG9kZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiksCiAJCSAgIHZvaWQgKmZyb20sIGludCBsZW5ndGgsIGludCB0cmFuc2hkcmxlbiwKQEAgLTEwOTQsMjQgKzEwOTksMjUgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZzay0+c2tfd3JpdGVfcXVldWUpKSB7Ci0JCWVyciA9IGlwX3NldHVwX2Nvcmsoc2ssICZpbmV0LT5jb3JrLCBpcGMsIHJ0cCk7CisJCWVyciA9IGlwX3NldHVwX2Nvcmsoc2ssICZpbmV0LT5jb3JrLmJhc2UsIGlwYywgcnRwKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfSBlbHNlIHsKIAkJdHJhbnNoZHJsZW4gPSAwOwogCX0KIAotCXJldHVybiBfX2lwX2FwcGVuZF9kYXRhKHNrLCAmc2stPnNrX3dyaXRlX3F1ZXVlLCAmaW5ldC0+Y29yaywgZ2V0ZnJhZywKKwlyZXR1cm4gX19pcF9hcHBlbmRfZGF0YShzaywgZmw0LCAmc2stPnNrX3dyaXRlX3F1ZXVlLCAmaW5ldC0+Y29yay5iYXNlLCBnZXRmcmFnLAogCQkJCWZyb20sIGxlbmd0aCwgdHJhbnNoZHJsZW4sIGZsYWdzKTsKIH0KIAotc3NpemVfdAlpcF9hcHBlbmRfcGFnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwYWdlICpwYWdlLAorc3NpemVfdAlpcF9hcHBlbmRfcGFnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCSAgICAgICBpbnQgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBydGFibGUgKnJ0OwogCXN0cnVjdCBpcF9vcHRpb25zICpvcHQgPSBOVUxMOworCXN0cnVjdCBpbmV0X2NvcmsgKmNvcms7CiAJaW50IGhoX2xlbjsKIAlpbnQgbXR1OwogCWludCBsZW47CkBAIC0xMTI3LDI4ICsxMTMzLDI5IEBACiAJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmc2stPnNrX3dyaXRlX3F1ZXVlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlydCA9IChzdHJ1Y3QgcnRhYmxlICopaW5ldC0+Y29yay5kc3Q7Ci0JaWYgKGluZXQtPmNvcmsuZmxhZ3MgJiBJUENPUktfT1BUKQotCQlvcHQgPSBpbmV0LT5jb3JrLm9wdDsKKwljb3JrID0gJmluZXQtPmNvcmsuYmFzZTsKKwlydCA9IChzdHJ1Y3QgcnRhYmxlICopY29yay0+ZHN0OworCWlmIChjb3JrLT5mbGFncyAmIElQQ09SS19PUFQpCisJCW9wdCA9IGNvcmstPm9wdDsKIAogCWlmICghKHJ0LT5kc3QuZGV2LT5mZWF0dXJlcyZORVRJRl9GX1NHKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaGhfbGVuID0gTExfUkVTRVJWRURfU1BBQ0UocnQtPmRzdC5kZXYpOwotCW10dSA9IGluZXQtPmNvcmsuZnJhZ3NpemU7CisJbXR1ID0gY29yay0+ZnJhZ3NpemU7CiAKIAlmcmFnaGVhZGVybGVuID0gc2l6ZW9mKHN0cnVjdCBpcGhkcikgKyAob3B0ID8gb3B0LT5vcHRsZW4gOiAwKTsKIAltYXhmcmFnbGVuID0gKChtdHUgLSBmcmFnaGVhZGVybGVuKSAmIH43KSArIGZyYWdoZWFkZXJsZW47CiAKLQlpZiAoaW5ldC0+Y29yay5sZW5ndGggKyBzaXplID4gMHhGRkZGIC0gZnJhZ2hlYWRlcmxlbikgewotCQlpcF9sb2NhbF9lcnJvcihzaywgRU1TR1NJWkUsIHJ0LT5ydF9kc3QsIGluZXQtPmluZXRfZHBvcnQsIG10dSk7CisJaWYgKGNvcmstPmxlbmd0aCArIHNpemUgPiAweEZGRkYgLSBmcmFnaGVhZGVybGVuKSB7CisJCWlwX2xvY2FsX2Vycm9yKHNrLCBFTVNHU0laRSwgZmw0LT5kYWRkciwgaW5ldC0+aW5ldF9kcG9ydCwgbXR1KTsKIAkJcmV0dXJuIC1FTVNHU0laRTsKIAl9CiAKIAlpZiAoKHNrYiA9IHNrYl9wZWVrX3RhaWwoJnNrLT5za193cml0ZV9xdWV1ZSkpID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaW5ldC0+Y29yay5sZW5ndGggKz0gc2l6ZTsKKwljb3JrLT5sZW5ndGggKz0gc2l6ZTsKIAlpZiAoKHNpemUgKyBza2ItPmxlbiA+IG10dSkgJiYKIAkgICAgKHNrLT5za19wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkgJiYKIAkgICAgKHJ0LT5kc3QuZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfVUZPKSkgewpAQCAtMTI0Myw3ICsxMjUwLDcgQEAKIAlyZXR1cm4gMDsKIAogZXJyb3I6Ci0JaW5ldC0+Y29yay5sZW5ndGggLT0gc2l6ZTsKKwljb3JrLT5sZW5ndGggLT0gc2l6ZTsKIAlJUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBJUFNUQVRTX01JQl9PVVRESVNDQVJEUyk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTEyNjIsNiArMTI2OSw3IEBACiAgKglhbmQgcHVzaCB0aGVtIG91dC4KICAqLwogc3RydWN0IHNrX2J1ZmYgKl9faXBfbWFrZV9za2Ioc3RydWN0IHNvY2sgKnNrLAorCQkJICAgICAgc3RydWN0IGZsb3dpNCAqZmw0LAogCQkJICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUsCiAJCQkgICAgICBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrKQogewpAQCAtMTMxOSwxNyArMTMyNywxOCBAQAogCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7CiAJaXBoLT52ZXJzaW9uID0gNDsKIAlpcGgtPmlobCA9IDU7Ci0JaWYgKG9wdCkgewotCQlpcGgtPmlobCArPSBvcHQtPm9wdGxlbj4+MjsKLQkJaXBfb3B0aW9uc19idWlsZChza2IsIG9wdCwgY29yay0+YWRkciwgcnQsIDApOwotCX0KIAlpcGgtPnRvcyA9IGluZXQtPnRvczsKIAlpcGgtPmZyYWdfb2ZmID0gZGY7CiAJaXBfc2VsZWN0X2lkZW50KGlwaCwgJnJ0LT5kc3QsIHNrKTsKIAlpcGgtPnR0bCA9IHR0bDsKIAlpcGgtPnByb3RvY29sID0gc2stPnNrX3Byb3RvY29sOwotCWlwaC0+c2FkZHIgPSBydC0+cnRfc3JjOwotCWlwaC0+ZGFkZHIgPSBydC0+cnRfZHN0OworCWlwaC0+c2FkZHIgPSBmbDQtPnNhZGRyOworCWlwaC0+ZGFkZHIgPSBmbDQtPmRhZGRyOworCisJaWYgKG9wdCkgeworCQlpcGgtPmlobCArPSBvcHQtPm9wdGxlbj4+MjsKKwkJaXBfb3B0aW9uc19idWlsZChza2IsIG9wdCwgY29yay0+YWRkciwgcnQsIDApOworCX0KIAogCXNrYi0+cHJpb3JpdHkgPSBzay0+c2tfcHJpb3JpdHk7CiAJc2tiLT5tYXJrID0gc2stPnNrX21hcms7CkBAIC0xMzY1LDExICsxMzc0LDExIEBACiAJcmV0dXJuIGVycjsKIH0KIAotaW50IGlwX3B1c2hfcGVuZGluZ19mcmFtZXMoc3RydWN0IHNvY2sgKnNrKQoraW50IGlwX3B1c2hfcGVuZGluZ19mcmFtZXMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k0ICpmbDQpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCXNrYiA9IGlwX2ZpbmlzaF9za2Ioc2spOworCXNrYiA9IGlwX2ZpbmlzaF9za2Ioc2ssIGZsNCk7CiAJaWYgKCFza2IpCiAJCXJldHVybiAwOwogCkBAIC0xMzk0LDE3ICsxNDAzLDE4IEBACiAKIHZvaWQgaXBfZmx1c2hfcGVuZGluZ19mcmFtZXMoc3RydWN0IHNvY2sgKnNrKQogewotCV9faXBfZmx1c2hfcGVuZGluZ19mcmFtZXMoc2ssICZzay0+c2tfd3JpdGVfcXVldWUsICZpbmV0X3NrKHNrKS0+Y29yayk7CisJX19pcF9mbHVzaF9wZW5kaW5nX2ZyYW1lcyhzaywgJnNrLT5za193cml0ZV9xdWV1ZSwgJmluZXRfc2soc2spLT5jb3JrLmJhc2UpOwogfQogCiBzdHJ1Y3Qgc2tfYnVmZiAqaXBfbWFrZV9za2Ioc3RydWN0IHNvY2sgKnNrLAorCQkJICAgIHN0cnVjdCBmbG93aTQgKmZsNCwKIAkJCSAgICBpbnQgZ2V0ZnJhZyh2b2lkICpmcm9tLCBjaGFyICp0bywgaW50IG9mZnNldCwKIAkJCQkJaW50IGxlbiwgaW50IG9kZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiksCiAJCQkgICAgdm9pZCAqZnJvbSwgaW50IGxlbmd0aCwgaW50IHRyYW5zaGRybGVuLAogCQkJICAgIHN0cnVjdCBpcGNtX2Nvb2tpZSAqaXBjLCBzdHJ1Y3QgcnRhYmxlICoqcnRwLAogCQkJICAgIHVuc2lnbmVkIGludCBmbGFncykKIHsKLQlzdHJ1Y3QgaW5ldF9jb3JrIGNvcmsgPSB7fTsKKwlzdHJ1Y3QgaW5ldF9jb3JrIGNvcms7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZCBxdWV1ZTsKIAlpbnQgZXJyOwogCkBAIC0xNDEzLDE4ICsxNDIzLDIxIEBACiAKIAlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJnF1ZXVlKTsKIAorCWNvcmsuZmxhZ3MgPSAwOworCWNvcmsuYWRkciA9IDA7CisJY29yay5vcHQgPSBOVUxMOwogCWVyciA9IGlwX3NldHVwX2Nvcmsoc2ssICZjb3JrLCBpcGMsIHJ0cCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAotCWVyciA9IF9faXBfYXBwZW5kX2RhdGEoc2ssICZxdWV1ZSwgJmNvcmssIGdldGZyYWcsCisJZXJyID0gX19pcF9hcHBlbmRfZGF0YShzaywgZmw0LCAmcXVldWUsICZjb3JrLCBnZXRmcmFnLAogCQkJICAgICAgIGZyb20sIGxlbmd0aCwgdHJhbnNoZHJsZW4sIGZsYWdzKTsKIAlpZiAoZXJyKSB7CiAJCV9faXBfZmx1c2hfcGVuZGluZ19mcmFtZXMoc2ssICZxdWV1ZSwgJmNvcmspOwogCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCX0KIAotCXJldHVybiBfX2lwX21ha2Vfc2tiKHNrLCAmcXVldWUsICZjb3JrKTsKKwlyZXR1cm4gX19pcF9tYWtlX3NrYihzaywgZmw0LCAmcXVldWUsICZjb3JrKTsKIH0KIAogLyoKQEAgLTE0NDcsNDggKzE0NjAsMzkgQEAKICAqCVNob3VsZCBydW4gc2luZ2xlIHRocmVhZGVkIHBlciBzb2NrZXQgYmVjYXVzZSBpdCB1c2VzIHRoZSBzb2NrCiAgKiAgICAgCXN0cnVjdHVyZSB0byBwYXNzIGFyZ3VtZW50cy4KICAqLwotdm9pZCBpcF9zZW5kX3JlcGx5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3JlcGx5X2FyZyAqYXJnLAotCQkgICB1bnNpZ25lZCBpbnQgbGVuKQordm9pZCBpcF9zZW5kX3JlcGx5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIGRhZGRyLAorCQkgICBzdHJ1Y3QgaXBfcmVwbHlfYXJnICphcmcsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwotCXN0cnVjdCB7Ci0JCXN0cnVjdCBpcF9vcHRpb25zCW9wdDsKLQkJY2hhcgkJCWRhdGFbNDBdOwotCX0gcmVwbHlvcHRzOworCXN0cnVjdCBpcF9vcHRpb25zX2RhdGEgcmVwbHlvcHRzOwogCXN0cnVjdCBpcGNtX2Nvb2tpZSBpcGM7Ci0JX19iZTMyIGRhZGRyOworCXN0cnVjdCBmbG93aTQgZmw0OwogCXN0cnVjdCBydGFibGUgKnJ0ID0gc2tiX3J0YWJsZShza2IpOwogCi0JaWYgKGlwX29wdGlvbnNfZWNobygmcmVwbHlvcHRzLm9wdCwgc2tiKSkKKwlpZiAoaXBfb3B0aW9uc19lY2hvKCZyZXBseW9wdHMub3B0Lm9wdCwgc2tiKSkKIAkJcmV0dXJuOwogCi0JZGFkZHIgPSBpcGMuYWRkciA9IHJ0LT5ydF9zcmM7CisJaXBjLmFkZHIgPSBkYWRkcjsKIAlpcGMub3B0ID0gTlVMTDsKIAlpcGMudHhfZmxhZ3MgPSAwOwogCi0JaWYgKHJlcGx5b3B0cy5vcHQub3B0bGVuKSB7CisJaWYgKHJlcGx5b3B0cy5vcHQub3B0Lm9wdGxlbikgewogCQlpcGMub3B0ID0gJnJlcGx5b3B0cy5vcHQ7CiAKLQkJaWYgKGlwYy5vcHQtPnNycikKLQkJCWRhZGRyID0gcmVwbHlvcHRzLm9wdC5mYWRkcjsKKwkJaWYgKHJlcGx5b3B0cy5vcHQub3B0LnNycikKKwkJCWRhZGRyID0gcmVwbHlvcHRzLm9wdC5vcHQuZmFkZHI7CiAJfQogCi0JewotCQlzdHJ1Y3QgZmxvd2k0IGZsNCA9IHsKLQkJCS5mbG93aTRfb2lmID0gYXJnLT5ib3VuZF9kZXZfaWYsCi0JCQkuZGFkZHIgPSBkYWRkciwKLQkJCS5zYWRkciA9IHJ0LT5ydF9zcGVjX2RzdCwKLQkJCS5mbG93aTRfdG9zID0gUlRfVE9TKGlwX2hkcihza2IpLT50b3MpLAotCQkJLmZsNF9zcG9ydCA9IHRjcF9oZHIoc2tiKS0+ZGVzdCwKLQkJCS5mbDRfZHBvcnQgPSB0Y3BfaGRyKHNrYiktPnNvdXJjZSwKLQkJCS5mbG93aTRfcHJvdG8gPSBzay0+c2tfcHJvdG9jb2wsCi0JCQkuZmxvd2k0X2ZsYWdzID0gaXBfcmVwbHlfYXJnX2Zsb3dpX2ZsYWdzKGFyZyksCi0JCX07Ci0JCXNlY3VyaXR5X3NrYl9jbGFzc2lmeV9mbG93KHNrYiwgZmxvd2k0X3RvX2Zsb3dpKCZmbDQpKTsKLQkJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KHNvY2tfbmV0KHNrKSwgJmZsNCk7Ci0JCWlmIChJU19FUlIocnQpKQotCQkJcmV0dXJuOwotCX0KKwlmbG93aTRfaW5pdF9vdXRwdXQoJmZsNCwgYXJnLT5ib3VuZF9kZXZfaWYsIDAsCisJCQkgICBSVF9UT1MoaXBfaGRyKHNrYiktPnRvcyksCisJCQkgICBSVF9TQ09QRV9VTklWRVJTRSwgc2stPnNrX3Byb3RvY29sLAorCQkJICAgaXBfcmVwbHlfYXJnX2Zsb3dpX2ZsYWdzKGFyZyksCisJCQkgICBkYWRkciwgcnQtPnJ0X3NwZWNfZHN0LAorCQkJICAgdGNwX2hkcihza2IpLT5zb3VyY2UsIHRjcF9oZHIoc2tiKS0+ZGVzdCk7CisJc2VjdXJpdHlfc2tiX2NsYXNzaWZ5X2Zsb3coc2tiLCBmbG93aTRfdG9fZmxvd2koJmZsNCkpOworCXJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShzb2NrX25ldChzayksICZmbDQpOworCWlmIChJU19FUlIocnQpKQorCQlyZXR1cm47CiAKIAkvKiBBbmQgbGV0IElQIGRvIGFsbCB0aGUgaGFyZCB3b3JrLgogCkBAIC0xNTAxLDcgKzE1MDUsNyBAQAogCXNrLT5za19wcmlvcml0eSA9IHNrYi0+cHJpb3JpdHk7CiAJc2stPnNrX3Byb3RvY29sID0gaXBfaGRyKHNrYiktPnByb3RvY29sOwogCXNrLT5za19ib3VuZF9kZXZfaWYgPSBhcmctPmJvdW5kX2Rldl9pZjsKLQlpcF9hcHBlbmRfZGF0YShzaywgaXBfcmVwbHlfZ2x1ZV9iaXRzLCBhcmctPmlvdi0+aW92X2Jhc2UsIGxlbiwgMCwKKwlpcF9hcHBlbmRfZGF0YShzaywgJmZsNCwgaXBfcmVwbHlfZ2x1ZV9iaXRzLCBhcmctPmlvdi0+aW92X2Jhc2UsIGxlbiwgMCwKIAkJICAgICAgICZpcGMsICZydCwgTVNHX0RPTlRXQUlUKTsKIAlpZiAoKHNrYiA9IHNrYl9wZWVrKCZzay0+c2tfd3JpdGVfcXVldWUpKSAhPSBOVUxMKSB7CiAJCWlmIChhcmctPmNzdW1vZmZzZXQgPj0gMCkKQEAgLTE1MDksNyArMTUxMyw3IEBACiAJCQkgIGFyZy0+Y3N1bW9mZnNldCkgPSBjc3VtX2ZvbGQoY3N1bV9hZGQoc2tiLT5jc3VtLAogCQkJCQkJCQlhcmctPmNzdW0pKTsKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCQlpcF9wdXNoX3BlbmRpbmdfZnJhbWVzKHNrKTsKKwkJaXBfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzaywgJmZsNCk7CiAJfQogCiAJYmhfdW5sb2NrX3NvY2soc2spOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKaW5kZXggMzk0OGM4Ni4uYWIwYzllZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYworKysgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCkBAIC0xMzEsNyArMTMxLDcgQEAKIHN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl9kc3RhZGRyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOwotCXN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTsKIAlfX2JlMTYgKnBvcnRzID0gKF9fYmUxNiAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiAKIAlpZiAoc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArIDQgPiBza2ItPmxlbikKQEAgLTQ1MSw2ICs0NTEsMTEgQEAKIH0KIAogCitzdGF0aWMgdm9pZCBvcHRfa2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlrZnJlZShjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGlwX29wdGlvbnNfcmN1LCByY3UpKTsKK30KKwogLyoKICAqCVNvY2tldCBvcHRpb24gY29kZSBmb3IgSVAuIFRoaXMgaXMgdGhlIGVuZCBvZiB0aGUgbGluZSBhZnRlciBhbnkKICAqCVRDUCxVRFAgZXRjIG9wdGlvbnMgb24gYW4gSVAgc29ja2V0LgpAQCAtNDk3LDEzICs1MDIsMTYgQEAKIAlzd2l0Y2ggKG9wdG5hbWUpIHsKIAljYXNlIElQX09QVElPTlM6CiAJewotCQlzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0ID0gTlVMTDsKKwkJc3RydWN0IGlwX29wdGlvbnNfcmN1ICpvbGQsICpvcHQgPSBOVUxMOworCiAJCWlmIChvcHRsZW4gPiA0MCkKIAkJCWdvdG8gZV9pbnZhbDsKIAkJZXJyID0gaXBfb3B0aW9uc19nZXRfZnJvbV91c2VyKHNvY2tfbmV0KHNrKSwgJm9wdCwKIAkJCQkJICAgICAgIG9wdHZhbCwgb3B0bGVuKTsKIAkJaWYgKGVycikKIAkJCWJyZWFrOworCQlvbGQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGluZXQtPmluZXRfb3B0LAorCQkJCQkJc29ja19vd25lZF9ieV91c2VyKHNrKSk7CiAJCWlmIChpbmV0LT5pc19pY3NrKSB7CiAJCQlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCkBAIC01MTIsMTcgKzUyMCwxOCBAQAogCQkJICAgICAgIChUQ1BGX0xJU1RFTiB8IFRDUEZfQ0xPU0UpKSAmJgogCQkJICAgICBpbmV0LT5pbmV0X2RhZGRyICE9IExPT1BCQUNLNF9JUFY2KSkgewogI2VuZGlmCi0JCQkJaWYgKGluZXQtPm9wdCkKLQkJCQkJaWNzay0+aWNza19leHRfaGRyX2xlbiAtPSBpbmV0LT5vcHQtPm9wdGxlbjsKKwkJCQlpZiAob2xkKQorCQkJCQlpY3NrLT5pY3NrX2V4dF9oZHJfbGVuIC09IG9sZC0+b3B0Lm9wdGxlbjsKIAkJCQlpZiAob3B0KQotCQkJCQlpY3NrLT5pY3NrX2V4dF9oZHJfbGVuICs9IG9wdC0+b3B0bGVuOworCQkJCQlpY3NrLT5pY3NrX2V4dF9oZHJfbGVuICs9IG9wdC0+b3B0Lm9wdGxlbjsKIAkJCQlpY3NrLT5pY3NrX3N5bmNfbXNzKHNrLCBpY3NrLT5pY3NrX3BtdHVfY29va2llKTsKICNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKIAkJCX0KICNlbmRpZgogCQl9Ci0JCW9wdCA9IHhjaGcoJmluZXQtPm9wdCwgb3B0KTsKLQkJa2ZyZWUob3B0KTsKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKGluZXQtPmluZXRfb3B0LCBvcHQpOworCQlpZiAob2xkKQorCQkJY2FsbF9yY3UoJm9sZC0+cmN1LCBvcHRfa2ZyZWVfcmN1KTsKIAkJYnJlYWs7CiAJfQogCWNhc2UgSVBfUEtUSU5GTzoKQEAgLTEwODEsMTIgKzEwOTAsMTYgQEAKIAljYXNlIElQX09QVElPTlM6CiAJewogCQl1bnNpZ25lZCBjaGFyIG9wdGJ1ZltzaXplb2Yoc3RydWN0IGlwX29wdGlvbnMpKzQwXTsKLQkJc3RydWN0IGlwX29wdGlvbnMgKiBvcHQgPSAoc3RydWN0IGlwX29wdGlvbnMgKilvcHRidWY7CisJCXN0cnVjdCBpcF9vcHRpb25zICpvcHQgPSAoc3RydWN0IGlwX29wdGlvbnMgKilvcHRidWY7CisJCXN0cnVjdCBpcF9vcHRpb25zX3JjdSAqaW5ldF9vcHQ7CisKKwkJaW5ldF9vcHQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGluZXQtPmluZXRfb3B0LAorCQkJCQkJICAgICBzb2NrX293bmVkX2J5X3VzZXIoc2spKTsKIAkJb3B0LT5vcHRsZW4gPSAwOwotCQlpZiAoaW5ldC0+b3B0KQotCQkJbWVtY3B5KG9wdGJ1ZiwgaW5ldC0+b3B0LAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXBfb3B0aW9ucykrCi0JCQkgICAgICAgaW5ldC0+b3B0LT5vcHRsZW4pOworCQlpZiAoaW5ldF9vcHQpCisJCQltZW1jcHkob3B0YnVmLCAmaW5ldF9vcHQtPm9wdCwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGlwX29wdGlvbnMpICsKKwkJCSAgICAgICBpbmV0X29wdC0+b3B0Lm9wdGxlbik7CiAJCXJlbGVhc2Vfc29jayhzayk7CiAKIAkJaWYgKG9wdC0+b3B0bGVuID09IDApCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGNvbXAuYyBiL25ldC9pcHY0L2lwY29tcC5jCmluZGV4IDYyOTA2NzUuLmM4NTdmNmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwY29tcC5jCisrKyBiL25ldC9pcHY0L2lwY29tcC5jCkBAIC0yNyw3ICsyNyw3IEBACiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItPmRldik7CiAJX19iZTMyIHNwaTsKLQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSAoY29uc3Qgc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOwogCXN0cnVjdCBpcF9jb21wX2hkciAqaXBjaCA9IChzdHJ1Y3QgaXBfY29tcF9oZHIgKikoc2tiLT5kYXRhKyhpcGgtPmlobDw8MikpOwogCXN0cnVjdCB4ZnJtX3N0YXRlICp4OwogCkBAIC0zNiw3ICszNiw3IEBACiAJCXJldHVybjsKIAogCXNwaSA9IGh0b25sKG50b2hzKGlwY2gtPmNwaSkpOwotCXggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIHNrYi0+bWFyaywgKHhmcm1fYWRkcmVzc190ICopJmlwaC0+ZGFkZHIsCisJeCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgc2tiLT5tYXJrLCAoY29uc3QgeGZybV9hZGRyZXNzX3QgKikmaXBoLT5kYWRkciwKIAkJCSAgICAgIHNwaSwgSVBQUk9UT19DT01QLCBBRl9JTkVUKTsKIAlpZiAoIXgpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwY29uZmlnLmMgYi9uZXQvaXB2NC9pcGNvbmZpZy5jCmluZGV4IGNiZmYyZWMuLmFiN2U1NTQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwY29uZmlnLmMKKysrIGIvbmV0L2lwdjQvaXBjb25maWcuYwpAQCAtODcsOCArODcsOCBAQAogI2VuZGlmCiAKIC8qIERlZmluZSB0aGUgZnJpZW5kbHkgZGVsYXkgYmVmb3JlIGFuZCBhZnRlciBvcGVuaW5nIG5ldCBkZXZpY2VzICovCi0jZGVmaW5lIENPTkZfUFJFX09QRU4JCTUwMAkvKiBCZWZvcmUgb3BlbmluZzogMS8yIHNlY29uZCAqLwotI2RlZmluZSBDT05GX1BPU1RfT1BFTgkJMQkvKiBBZnRlciBvcGVuaW5nOiAxIHNlY29uZCAqLworI2RlZmluZSBDT05GX1BPU1RfT1BFTgkJMTAJLyogQWZ0ZXIgb3BlbmluZzogMTAgbXNlY3MgKi8KKyNkZWZpbmUgQ09ORl9DQVJSSUVSX1RJTUVPVVQJMTIwMDAwCS8qIFdhaXQgZm9yIGNhcnJpZXIgdGltZW91dCAqLwogCiAvKiBEZWZpbmUgdGhlIHRpbWVvdXQgZm9yIHdhaXRpbmcgZm9yIGEgREhDUC9CT09UUC9SQVJQIHJlcGx5ICovCiAjZGVmaW5lIENPTkZfT1BFTl9SRVRSSUVTIAkyCS8qIChSZSlvcGVuIGRldmljZXMgdHdpY2UgKi8KQEAgLTE4OCwxNCArMTg4LDE0IEBACiBzdGF0aWMgc3RydWN0IGljX2RldmljZSAqaWNfZmlyc3RfZGV2IF9faW5pdGRhdGEgPSBOVUxMOy8qIExpc3Qgb2Ygb3BlbiBkZXZpY2UgKi8KIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaWNfZGV2IF9faW5pdGRhdGEgPSBOVUxMOwkvKiBTZWxlY3RlZCBkZXZpY2UgKi8KIAotc3RhdGljIGJvb2wgX19pbml0IGljX2RldmljZV9tYXRjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGJvb2wgX19pbml0IGljX2lzX2luaXRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JaWYgKHVzZXJfZGV2X25hbWVbMF0gPyAhc3RyY21wKGRldi0+bmFtZSwgdXNlcl9kZXZfbmFtZSkgOgorCWlmIChkZXYtPmZsYWdzICYgSUZGX0xPT1BCQUNLKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHVzZXJfZGV2X25hbWVbMF0gPyAhc3RyY21wKGRldi0+bmFtZSwgdXNlcl9kZXZfbmFtZSkgOgogCSAgICAoIShkZXYtPmZsYWdzICYgSUZGX0xPT1BCQUNLKSAmJgogCSAgICAgKGRldi0+ZmxhZ3MgJiAoSUZGX1BPSU5UT1BPSU5UfElGRl9CUk9BRENBU1QpKSAmJgotCSAgICAgc3RybmNtcChkZXYtPm5hbWUsICJkdW1teSIsIDUpKSkKLQkJcmV0dXJuIHRydWU7Ci0JcmV0dXJuIGZhbHNlOworCSAgICAgc3RybmNtcChkZXYtPm5hbWUsICJkdW1teSIsIDUpKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgaWNfb3Blbl9kZXZzKHZvaWQpCkBAIC0yMDMsNiArMjAzLDcgQEAKIAlzdHJ1Y3QgaWNfZGV2aWNlICpkLCAqKmxhc3Q7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAl1bnNpZ25lZCBzaG9ydCBvZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBzdGFydDsKIAogCWxhc3QgPSAmaWNfZmlyc3RfZGV2OwogCXJ0bmxfbG9jaygpOwpAQCAtMjE2LDkgKzIxNyw3IEBACiAJfQogCiAJZm9yX2VhY2hfbmV0ZGV2KCZpbml0X25ldCwgZGV2KSB7Ci0JCWlmIChkZXYtPmZsYWdzICYgSUZGX0xPT1BCQUNLKQotCQkJY29udGludWU7Ci0JCWlmIChpY19kZXZpY2VfbWF0Y2goZGV2KSkgeworCQlpZiAoaWNfaXNfaW5pdF9kZXYoZGV2KSkgewogCQkJaW50IGFibGUgPSAwOwogCQkJaWYgKGRldi0+bXR1ID49IDM2NCkKIAkJCQlhYmxlIHw9IElDX0JPT1RQOwpAQCAtMjUyLDYgKzI1MSwxNyBAQAogCQkJCWRldi0+bmFtZSwgYWJsZSwgZC0+eGlkKSk7CiAJCX0KIAl9CisKKwkvKiB3YWl0IGZvciBhIGNhcnJpZXIgb24gYXQgbGVhc3Qgb25lIGRldmljZSAqLworCXN0YXJ0ID0gamlmZmllczsKKwl3aGlsZSAoamlmZmllcyAtIHN0YXJ0IDwgbXNlY3NfdG9famlmZmllcyhDT05GX0NBUlJJRVJfVElNRU9VVCkpIHsKKwkJZm9yX2VhY2hfbmV0ZGV2KCZpbml0X25ldCwgZGV2KQorCQkJaWYgKGljX2lzX2luaXRfZGV2KGRldikgJiYgbmV0aWZfY2Fycmllcl9vayhkZXYpKQorCQkJCWdvdG8gaGF2ZV9jYXJyaWVyOworCisJCW1zbGVlcCgxKTsKKwl9CitoYXZlX2NhcnJpZXI6CiAJcnRubF91bmxvY2soKTsKIAogCSpsYXN0ID0gTlVMTDsKQEAgLTEzMjQsMTQgKzEzMzQsMTMgQEAKIHsKIAlpbnQgaTsKIAotCW1zbGVlcChDT05GX1BSRV9PUEVOKTsKIAlmb3IgKGkgPSAwOyBpIDwgREVWSUNFX1dBSVRfTUFYOyBpKyspIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAkJaW50IGZvdW5kID0gMDsKIAogCQlydG5sX2xvY2soKTsKIAkJZm9yX2VhY2hfbmV0ZGV2KCZpbml0X25ldCwgZGV2KSB7Ci0JCQlpZiAoaWNfZGV2aWNlX21hdGNoKGRldikpIHsKKwkJCWlmIChpY19pc19pbml0X2RldihkZXYpKSB7CiAJCQkJZm91bmQgPSAxOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMTM3OCw3ICsxMzg3LDcgQEAKIAkJcmV0dXJuIGVycjsKIAogCS8qIEdpdmUgZHJpdmVycyBhIGNoYW5jZSB0byBzZXR0bGUgKi8KLQlzc2xlZXAoQ09ORl9QT1NUX09QRU4pOworCW1zbGVlcChDT05GX1BPU1RfT1BFTik7CiAKIAkvKgogCSAqIElmIHRoZSBjb25maWcgaW5mb3JtYXRpb24gaXMgaW5zdWZmaWNpZW50IChlLmcuLCBvdXIgSVAgYWRkcmVzcyBvcgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBpcC5jIGIvbmV0L2lwdjQvaXBpcC5jCmluZGV4IGJmYzE3YzUuLjM3OGIyMGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwaXAuYworKysgYi9uZXQvaXB2NC9pcGlwLmMKQEAgLTI3NiwxMSArMjc2LDYgQEAKIAogCWRldl9uZXRfc2V0KGRldiwgbmV0KTsKIAotCWlmIChzdHJjaHIobmFtZSwgJyUnKSkgewotCQlpZiAoZGV2X2FsbG9jX25hbWUoZGV2LCBuYW1lKSA8IDApCi0JCQlnb3RvIGZhaWxlZF9mcmVlOwotCX0KLQogCW50ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAludC0+cGFybXMgPSAqcGFybXM7CiAKQEAgLTMxOSw3ICszMTQsNyBAQAogICAgOCBieXRlcyBvZiBwYWNrZXQgcGF5bG9hZC4gSXQgbWVhbnMsIHRoYXQgcHJlY2lzZSByZWxheWluZyBvZgogICAgSUNNUCBpbiB0aGUgcmVhbCBJbnRlcm5ldCBpcyBhYnNvbHV0ZWx5IGluZmVhc2libGUuCiAgKi8KLQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSAoY29uc3Qgc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOwogCWNvbnN0IGludCB0eXBlID0gaWNtcF9oZHIoc2tiKS0+dHlwZTsKIAljb25zdCBpbnQgY29kZSA9IGljbXBfaGRyKHNrYiktPmNvZGU7CiAJc3RydWN0IGlwX3R1bm5lbCAqdDsKQEAgLTQzMywxNSArNDI4LDE2IEBACiB7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgcGNwdV90c3RhdHMgKnRzdGF0czsKLQlzdHJ1Y3QgaXBoZHIgICp0aXBoID0gJnR1bm5lbC0+cGFybXMuaXBoOworCWNvbnN0IHN0cnVjdCBpcGhkciAgKnRpcGggPSAmdHVubmVsLT5wYXJtcy5pcGg7CiAJdTggICAgIHRvcyA9IHR1bm5lbC0+cGFybXMuaXBoLnRvczsKIAlfX2JlMTYgZGYgPSB0aXBoLT5mcmFnX29mZjsKIAlzdHJ1Y3QgcnRhYmxlICpydDsgICAgIAkJCS8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovCiAJc3RydWN0IG5ldF9kZXZpY2UgKnRkZXY7CQkvKiBEZXZpY2UgdG8gb3RoZXIgaG9zdCAqLwotCXN0cnVjdCBpcGhkciAgKm9sZF9pcGggPSBpcF9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3QgaXBoZHIgICpvbGRfaXBoID0gaXBfaGRyKHNrYik7CiAJc3RydWN0IGlwaGRyICAqaXBoOwkJCS8qIE91ciBuZXcgSVAgaGVhZGVyICovCiAJdW5zaWduZWQgaW50IG1heF9oZWFkcm9vbTsJCS8qIFRoZSBleHRyYSBoZWFkZXIgc3BhY2UgbmVlZGVkICovCiAJX19iZTMyIGRzdCA9IHRpcGgtPmRhZGRyOworCXN0cnVjdCBmbG93aTQgZmw0OwogCWludCAgICBtdHU7CiAKIAlpZiAoc2tiLT5wcm90b2NvbCAhPSBodG9ucyhFVEhfUF9JUCkpCkBAIC00NjAsNyArNDU2LDcgQEAKIAkJCWdvdG8gdHhfZXJyb3JfaWNtcDsKIAl9CiAKLQlydCA9IGlwX3JvdXRlX291dHB1dF9wb3J0cyhkZXZfbmV0KGRldiksIE5VTEwsCisJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMoZGV2X25ldChkZXYpLCAmZmw0LCBOVUxMLAogCQkJCSAgIGRzdCwgdGlwaC0+c2FkZHIsCiAJCQkJICAgMCwgMCwKIAkJCQkgICBJUFBST1RPX0lQSVAsIFJUX1RPUyh0b3MpLApAQCAtNTQ5LDggKzU0NSw4IEBACiAJaXBoLT5mcmFnX29mZgkJPQlkZjsKIAlpcGgtPnByb3RvY29sCQk9CUlQUFJPVE9fSVBJUDsKIAlpcGgtPnRvcwkJPQlJTkVUX0VDTl9lbmNhcHN1bGF0ZSh0b3MsIG9sZF9pcGgtPnRvcyk7Ci0JaXBoLT5kYWRkcgkJPQlydC0+cnRfZHN0OwotCWlwaC0+c2FkZHIJCT0JcnQtPnJ0X3NyYzsKKwlpcGgtPmRhZGRyCQk9CWZsNC5kYWRkcjsKKwlpcGgtPnNhZGRyCQk9CWZsNC5zYWRkcjsKIAogCWlmICgoaXBoLT50dGwgPSB0aXBoLT50dGwpID09IDApCiAJCWlwaC0+dHRsCT0Jb2xkX2lwaC0+dHRsOwpAQCAtNTcyLDE5ICs1NjgsMjEgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqdGRldiA9IE5VTEw7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsOwotCXN0cnVjdCBpcGhkciAqaXBoOworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoOwogCiAJdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpcGggPSAmdHVubmVsLT5wYXJtcy5pcGg7CiAKIAlpZiAoaXBoLT5kYWRkcikgewotCQlzdHJ1Y3QgcnRhYmxlICpydCA9IGlwX3JvdXRlX291dHB1dF9wb3J0cyhkZXZfbmV0KGRldiksIE5VTEwsCi0JCQkJCQkJICBpcGgtPmRhZGRyLCBpcGgtPnNhZGRyLAotCQkJCQkJCSAgMCwgMCwKLQkJCQkJCQkgIElQUFJPVE9fSVBJUCwKLQkJCQkJCQkgIFJUX1RPUyhpcGgtPnRvcyksCi0JCQkJCQkJICB0dW5uZWwtPnBhcm1zLmxpbmspOworCQlzdHJ1Y3QgcnRhYmxlICpydDsKKwkJc3RydWN0IGZsb3dpNCBmbDQ7CiAKKwkJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMoZGV2X25ldChkZXYpLCAmZmw0LCBOVUxMLAorCQkJCQkgICBpcGgtPmRhZGRyLCBpcGgtPnNhZGRyLAorCQkJCQkgICAwLCAwLAorCQkJCQkgICBJUFBST1RPX0lQSVAsCisJCQkJCSAgIFJUX1RPUyhpcGgtPnRvcyksCisJCQkJCSAgIHR1bm5lbC0+cGFybXMubGluayk7CiAJCWlmICghSVNfRVJSKHJ0KSkgewogCQkJdGRldiA9IHJ0LT5kc3QuZGV2OwogCQkJaXBfcnRfcHV0KHJ0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuYwppbmRleCAxZjYyZWFlLi4zMGE3NzYzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcG1yLmMKKysrIGIvbmV0L2lwdjQvaXBtci5jCkBAIC0xNTQ5LDcgKzE1NDksNyBAQAogc3RhdGljIHZvaWQgaXBfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIpCiB7CiAJc3RydWN0IGlwaGRyICppcGg7Ci0Jc3RydWN0IGlwaGRyICpvbGRfaXBoID0gaXBfaGRyKHNrYik7CisJY29uc3Qgc3RydWN0IGlwaGRyICpvbGRfaXBoID0gaXBfaGRyKHNrYik7CiAKIAlza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTsKIAlza2ItPnRyYW5zcG9ydF9oZWFkZXIgPSBza2ItPm5ldHdvcmtfaGVhZGVyOwpAQCAtMTU5NSw2ICsxNTk1LDcgQEAKIAlzdHJ1Y3QgdmlmX2RldmljZSAqdmlmID0gJm1ydC0+dmlmX3RhYmxlW3ZpZmldOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHJ0YWJsZSAqcnQ7CisJc3RydWN0IGZsb3dpNCBmbDQ7CiAJaW50ICAgIGVuY2FwID0gMDsKIAogCWlmICh2aWYtPmRldiA9PSBOVUxMKQpAQCAtMTYxMiw3ICsxNjEzLDcgQEAKICNlbmRpZgogCiAJaWYgKHZpZi0+ZmxhZ3MgJiBWSUZGX1RVTk5FTCkgewotCQlydCA9IGlwX3JvdXRlX291dHB1dF9wb3J0cyhuZXQsIE5VTEwsCisJCXJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKG5ldCwgJmZsNCwgTlVMTCwKIAkJCQkJICAgdmlmLT5yZW1vdGUsIHZpZi0+bG9jYWwsCiAJCQkJCSAgIDAsIDAsCiAJCQkJCSAgIElQUFJPVE9fSVBJUCwKQEAgLTE2MjEsNyArMTYyMiw3IEBACiAJCQlnb3RvIG91dF9mcmVlOwogCQllbmNhcCA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpOwogCX0gZWxzZSB7Ci0JCXJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKG5ldCwgTlVMTCwgaXBoLT5kYWRkciwgMCwKKwkJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMobmV0LCAmZmw0LCBOVUxMLCBpcGgtPmRhZGRyLCAwLAogCQkJCQkgICAwLCAwLAogCQkJCQkgICBJUFBST1RPX0lQSVAsCiAJCQkJCSAgIFJUX1RPUyhpcGgtPnRvcyksIHZpZi0+bGluayk7CkBAIC0xNzg4LDEyICsxNzg5LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKmlwbXJfcnRfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBydGFibGUgKnJ0KQorc3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXBtcl9ydF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKKwlzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYl9ydGFibGUoc2tiKTsKKwlzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpOwogCXN0cnVjdCBmbG93aTQgZmw0ID0gewotCQkuZGFkZHIgPSBydC0+cnRfa2V5X2RzdCwKLQkJLnNhZGRyID0gcnQtPnJ0X2tleV9zcmMsCi0JCS5mbG93aTRfdG9zID0gcnQtPnJ0X3RvcywKKwkJLmRhZGRyID0gaXBoLT5kYWRkciwKKwkJLnNhZGRyID0gaXBoLT5zYWRkciwKKwkJLmZsb3dpNF90b3MgPSBpcGgtPnRvcywKIAkJLmZsb3dpNF9vaWYgPSBydC0+cnRfb2lmLAogCQkuZmxvd2k0X2lpZiA9IHJ0LT5ydF9paWYsCiAJCS5mbG93aTRfbWFyayA9IHJ0LT5ydF9tYXJrLApAQCAtMTgyNSw3ICsxODI4LDcgQEAKIAlpZiAoSVBDQihza2IpLT5mbGFncyAmIElQU0tCX0ZPUldBUkRFRCkKIAkJZ290byBkb250X2ZvcndhcmQ7CiAKLQltcnQgPSBpcG1yX3J0X2ZpYl9sb29rdXAobmV0LCBza2JfcnRhYmxlKHNrYikpOworCW1ydCA9IGlwbXJfcnRfZmliX2xvb2t1cChuZXQsIHNrYik7CiAJaWYgKElTX0VSUihtcnQpKSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gUFRSX0VSUihtcnQpOwpAQCAtMTk1Nyw3ICsxOTYwLDcgQEAKIAogCXBpbSA9IGlnbXBfaGRyKHNrYik7CiAKLQltcnQgPSBpcG1yX3J0X2ZpYl9sb29rdXAobmV0LCBza2JfcnRhYmxlKHNrYikpOworCW1ydCA9IGlwbXJfcnRfZmliX2xvb2t1cChuZXQsIHNrYik7CiAJaWYgKElTX0VSUihtcnQpKQogCQlnb3RvIGRyb3A7CiAJaWYgKCFtcnQtPm1yb3V0ZV9kb19waW0gfHwKQEAgLTE5ODksNyArMTk5Miw3IEBACiAJICAgICBjc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgMCwgc2tiLT5sZW4sIDApKSkpCiAJCWdvdG8gZHJvcDsKIAotCW1ydCA9IGlwbXJfcnRfZmliX2xvb2t1cChuZXQsIHNrYl9ydGFibGUoc2tiKSk7CisJbXJ0ID0gaXBtcl9ydF9maWJfbG9va3VwKG5ldCwgc2tiKTsKIAlpZiAoSVNfRVJSKG1ydCkpCiAJCWdvdG8gZHJvcDsKIAlpZiAoX19waW1fcmN2KG1ydCwgc2tiLCBzaXplb2YoKnBpbSkpKSB7CkBAIC0yMDM4LDIwICsyMDQxLDIwIEBACiAJcmV0dXJuIC1FTVNHU0laRTsKIH0KIAotaW50IGlwbXJfZ2V0X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwKLQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJ0bXNnICpydG0sIGludCBub3dhaXQpCitpbnQgaXBtcl9nZXRfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICBfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKKwkJICAgc3RydWN0IHJ0bXNnICpydG0sIGludCBub3dhaXQpCiB7Ci0JaW50IGVycjsKLQlzdHJ1Y3QgbXJfdGFibGUgKm1ydDsKIAlzdHJ1Y3QgbWZjX2NhY2hlICpjYWNoZTsKLQlzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYl9ydGFibGUoc2tiKTsKKwlzdHJ1Y3QgbXJfdGFibGUgKm1ydDsKKwlpbnQgZXJyOwogCiAJbXJ0ID0gaXBtcl9nZXRfdGFibGUobmV0LCBSVF9UQUJMRV9ERUZBVUxUKTsKIAlpZiAobXJ0ID09IE5VTEwpCiAJCXJldHVybiAtRU5PRU5UOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCWNhY2hlID0gaXBtcl9jYWNoZV9maW5kKG1ydCwgcnQtPnJ0X3NyYywgcnQtPnJ0X2RzdCk7CisJY2FjaGUgPSBpcG1yX2NhY2hlX2ZpbmQobXJ0LCBzYWRkciwgZGFkZHIpOwogCiAJaWYgKGNhY2hlID09IE5VTEwpIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjI7CkBAIC0yMDg0LDggKzIwODcsOCBAQAogCQlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiMik7CiAJCWlwaCA9IGlwX2hkcihza2IyKTsKIAkJaXBoLT5paGwgPSBzaXplb2Yoc3RydWN0IGlwaGRyKSA+PiAyOwotCQlpcGgtPnNhZGRyID0gcnQtPnJ0X3NyYzsKLQkJaXBoLT5kYWRkciA9IHJ0LT5ydF9kc3Q7CisJCWlwaC0+c2FkZHIgPSBzYWRkcjsKKwkJaXBoLT5kYWRkciA9IGRhZGRyOwogCQlpcGgtPnZlcnNpb24gPSAwOwogCQllcnIgPSBpcG1yX2NhY2hlX3VucmVzb2x2ZWQobXJ0LCB2aWYsIHNrYjIpOwogCQlyZWFkX3VubG9jaygmbXJ0X2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKaW5kZXggODliYzdlNi4uZmQ3YTNmNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCkBAIC0yNjAsNiArMjYwLDcgQEAKIAl2b2lkICp0YWJsZV9iYXNlOwogCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlOwogCXN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gYWNwYXI7CisJdW5zaWduZWQgaW50IGFkZGVuZDsKIAogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIGFycF9oZHJfbGVuKHNrYi0+ZGV2KSkpCiAJCXJldHVybiBORl9EUk9QOwpAQCAtMjY3LDcgKzI2OCw4IEBACiAJaW5kZXYgPSBpbiA/IGluLT5uYW1lIDogbnVsbGRldm5hbWU7CiAJb3V0ZGV2ID0gb3V0ID8gb3V0LT5uYW1lIDogbnVsbGRldm5hbWU7CiAKLQl4dF9pbmZvX3JkbG9ja19iaCgpOworCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwlhZGRlbmQgPSB4dF93cml0ZV9yZWNzZXFfYmVnaW4oKTsKIAlwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CiAJdGFibGVfYmFzZSA9IHByaXZhdGUtPmVudHJpZXNbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKIApAQCAtMzM4LDcgKzM0MCw4IEBACiAJCQkvKiBWZXJkaWN0ICovCiAJCQlicmVhazsKIAl9IHdoaWxlICghYWNwYXIuaG90ZHJvcCk7Ci0JeHRfaW5mb19yZHVubG9ja19iaCgpOworCXh0X3dyaXRlX3JlY3NlcV9lbmQoYWRkZW5kKTsKKwlsb2NhbF9iaF9lbmFibGUoKTsKIAogCWlmIChhY3Bhci5ob3Rkcm9wKQogCQlyZXR1cm4gTkZfRFJPUDsKQEAgLTcxMiw3ICs3MTUsNyBAQAogCXVuc2lnbmVkIGludCBpOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlzZXFsb2NrX3QgKmxvY2sgPSAmcGVyX2NwdSh4dF9pbmZvX2xvY2tzLCBjcHUpLmxvY2s7CisJCXNlcWNvdW50X3QgKnMgPSAmcGVyX2NwdSh4dF9yZWNzZXEsIGNwdSk7CiAKIAkJaSA9IDA7CiAJCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgdC0+ZW50cmllc1tjcHVdLCB0LT5zaXplKSB7CkBAIC03MjAsMTAgKzcyMywxMCBAQAogCQkJdW5zaWduZWQgaW50IHN0YXJ0OwogCiAJCQlkbyB7Ci0JCQkJc3RhcnQgPSByZWFkX3NlcWJlZ2luKGxvY2spOworCQkJCXN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihzKTsKIAkJCQliY250ID0gaXRlci0+Y291bnRlcnMuYmNudDsKIAkJCQlwY250ID0gaXRlci0+Y291bnRlcnMucGNudDsKLQkJCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkobG9jaywgc3RhcnQpKTsKKwkJCX0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkocywgc3RhcnQpKTsKIAogCQkJQUREX0NPVU5URVIoY291bnRlcnNbaV0sIGJjbnQsIHBjbnQpOwogCQkJKytpOwpAQCAtMTExNSw2ICsxMTE4LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAl2b2lkICpsb2NfY3B1X2VudHJ5OwogCXN0cnVjdCBhcnB0X2VudHJ5ICppdGVyOworCXVuc2lnbmVkIGludCBhZGRlbmQ7CiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCXN0cnVjdCBjb21wYXRfeHRfY291bnRlcnNfaW5mbyBjb21wYXRfdG1wOwogCkBAIC0xMTcxLDEyICsxMTc1LDEyIEBACiAJLyogQ2hvb3NlIHRoZSBjb3B5IHRoYXQgaXMgb24gb3VyIG5vZGUgKi8KIAljdXJjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJbG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtPmVudHJpZXNbY3VyY3B1XTsKLQl4dF9pbmZvX3dybG9jayhjdXJjcHUpOworCWFkZGVuZCA9IHh0X3dyaXRlX3JlY3NlcV9iZWdpbigpOwogCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgbG9jX2NwdV9lbnRyeSwgcHJpdmF0ZS0+c2l6ZSkgewogCQlBRERfQ09VTlRFUihpdGVyLT5jb3VudGVycywgcGFkZGNbaV0uYmNudCwgcGFkZGNbaV0ucGNudCk7CiAJCSsraTsKIAl9Ci0JeHRfaW5mb193cnVubG9jayhjdXJjcHUpOworCXh0X3dyaXRlX3JlY3NlcV9lbmQoYWRkZW5kKTsKICB1bmxvY2tfdXBfZnJlZToKIAlsb2NhbF9iaF9lbmFibGUoKTsKIAl4dF90YWJsZV91bmxvY2sodCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKaW5kZXggNzA0OTE1MC4uNzY0NzQzOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwpAQCAtNjgsMTUgKzY4LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlwdF9hbGxvY19pbml0aWFsX3RhYmxlKTsKIAotLyoKLSAgIFdlIGtlZXAgYSBzZXQgb2YgcnVsZXMgZm9yIGVhY2ggQ1BVLCBzbyB3ZSBjYW4gYXZvaWQgd3JpdGUtbG9ja2luZwotICAgdGhlbSBpbiB0aGUgc29mdGlycSB3aGVuIHVwZGF0aW5nIHRoZSBjb3VudGVycyBhbmQgdGhlcmVmb3JlCi0gICBvbmx5IG5lZWQgdG8gcmVhZC1sb2NrIGluIHRoZSBzb2Z0aXJxOyBkb2luZyBhIHdyaXRlX2xvY2tfYmgoKSBpbiB1c2VyCi0gICBjb250ZXh0IHN0b3BzIHBhY2tldHMgY29taW5nIHRocm91Z2ggYW5kIGFsbG93cyB1c2VyIGNvbnRleHQgdG8gcmVhZAotICAgdGhlIGNvdW50ZXJzIG9yIHVwZGF0ZSB0aGUgcnVsZXMuCi0KLSAgIEhlbmNlIHRoZSBzdGFydCBvZiBhbnkgdGFibGUgaXMgZ2l2ZW4gYnkgZ2V0X3RhYmxlKCkgYmVsb3cuICAqLwotCiAvKiBSZXR1cm5zIHdoZXRoZXIgbWF0Y2hlcyBydWxlIG9yIG5vdC4gKi8KIC8qIFBlcmZvcm1hbmNlIGNyaXRpY2FsIC0gY2FsbGVkIGZvciBldmVyeSBwYWNrZXQgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbApAQCAtMzExLDYgKzMwMiw3IEBACiAJdW5zaWduZWQgaW50ICpzdGFja3B0ciwgb3JpZ3B0ciwgY3B1OwogCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlOwogCXN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gYWNwYXI7CisJdW5zaWduZWQgaW50IGFkZGVuZDsKIAogCS8qIEluaXRpYWxpemF0aW9uICovCiAJaXAgPSBpcF9oZHIoc2tiKTsKQEAgLTMzMSw3ICszMjMsOCBAQAogCWFjcGFyLmhvb2tudW0gPSBob29rOwogCiAJSVBfTkZfQVNTRVJUKHRhYmxlLT52YWxpZF9ob29rcyAmICgxIDw8IGhvb2spKTsKLQl4dF9pbmZvX3JkbG9ja19iaCgpOworCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwlhZGRlbmQgPSB4dF93cml0ZV9yZWNzZXFfYmVnaW4oKTsKIAlwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CiAJY3B1ICAgICAgICA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAl0YWJsZV9iYXNlID0gcHJpdmF0ZS0+ZW50cmllc1tjcHVdOwpAQCAtNDMwLDcgKzQyMyw5IEBACiAJcHJfZGVidWcoIkV4aXRpbmcgJXM7IHJlc2V0dGluZyBzcCBmcm9tICV1IHRvICV1XG4iLAogCQkgX19mdW5jX18sICpzdGFja3B0ciwgb3JpZ3B0cik7CiAJKnN0YWNrcHRyID0gb3JpZ3B0cjsKLQl4dF9pbmZvX3JkdW5sb2NrX2JoKCk7CisgCXh0X3dyaXRlX3JlY3NlcV9lbmQoYWRkZW5kKTsKKyAJbG9jYWxfYmhfZW5hYmxlKCk7CisKICNpZmRlZiBERUJVR19BTExPV19BTEwKIAlyZXR1cm4gTkZfQUNDRVBUOwogI2Vsc2UKQEAgLTg4Niw3ICs4ODEsNyBAQAogCXVuc2lnbmVkIGludCBpOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlzZXFsb2NrX3QgKmxvY2sgPSAmcGVyX2NwdSh4dF9pbmZvX2xvY2tzLCBjcHUpLmxvY2s7CisJCXNlcWNvdW50X3QgKnMgPSAmcGVyX2NwdSh4dF9yZWNzZXEsIGNwdSk7CiAKIAkJaSA9IDA7CiAJCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgdC0+ZW50cmllc1tjcHVdLCB0LT5zaXplKSB7CkBAIC04OTQsMTAgKzg4OSwxMCBAQAogCQkJdW5zaWduZWQgaW50IHN0YXJ0OwogCiAJCQlkbyB7Ci0JCQkJc3RhcnQgPSByZWFkX3NlcWJlZ2luKGxvY2spOworCQkJCXN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihzKTsKIAkJCQliY250ID0gaXRlci0+Y291bnRlcnMuYmNudDsKIAkJCQlwY250ID0gaXRlci0+Y291bnRlcnMucGNudDsKLQkJCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkobG9jaywgc3RhcnQpKTsKKwkJCX0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkocywgc3RhcnQpKTsKIAogCQkJQUREX0NPVU5URVIoY291bnRlcnNbaV0sIGJjbnQsIHBjbnQpOwogCQkJKytpOyAvKiBtYWNybyBkb2VzIG11bHRpIGV2YWwgb2YgaSAqLwpAQCAtMTMxMiw2ICsxMzA3LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAl2b2lkICpsb2NfY3B1X2VudHJ5OwogCXN0cnVjdCBpcHRfZW50cnkgKml0ZXI7CisJdW5zaWduZWQgaW50IGFkZGVuZDsKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJc3RydWN0IGNvbXBhdF94dF9jb3VudGVyc19pbmZvIGNvbXBhdF90bXA7CiAKQEAgLTEzNjgsMTIgKzEzNjQsMTIgQEAKIAkvKiBDaG9vc2UgdGhlIGNvcHkgdGhhdCBpcyBvbiBvdXIgbm9kZSAqLwogCWN1cmNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS0+ZW50cmllc1tjdXJjcHVdOwotCXh0X2luZm9fd3Jsb2NrKGN1cmNwdSk7CisJYWRkZW5kID0geHRfd3JpdGVfcmVjc2VxX2JlZ2luKCk7CiAJeHRfZW50cnlfZm9yZWFjaChpdGVyLCBsb2NfY3B1X2VudHJ5LCBwcml2YXRlLT5zaXplKSB7CiAJCUFERF9DT1VOVEVSKGl0ZXItPmNvdW50ZXJzLCBwYWRkY1tpXS5iY250LCBwYWRkY1tpXS5wY250KTsKIAkJKytpOwogCX0KLQl4dF9pbmZvX3dydW5sb2NrKGN1cmNwdSk7CisJeHRfd3JpdGVfcmVjc2VxX2VuZChhZGRlbmQpOwogIHVubG9ja191cF9mcmVlOgogCWxvY2FsX2JoX2VuYWJsZSgpOwogCXh0X3RhYmxlX3VubG9jayh0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5jCmluZGV4IDMxNDI3ZmIuLjk5Y2ZhMjggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuYwpAQCAtMTUzLDcgKzE1Myw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfc2V0X3NlcV9hZGp1c3QpOwogCi1zdGF0aWMgdm9pZCBuZl9uYXRfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBoZHIgKmlwaCwgdm9pZCAqZGF0YSwKK3N0YXRpYyB2b2lkIG5mX25hdF9jc3VtKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoLCB2b2lkICpkYXRhLAogCQkJaW50IGRhdGFsZW4sIF9fc3VtMTYgKmNoZWNrLCBpbnQgb2xkbGVuKQogewogCXN0cnVjdCBydGFibGUgKnJ0ID0gc2tiX3J0YWJsZShza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcGluZy5jIGIvbmV0L2lwdjQvcGluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmM2JiMTEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaXB2NC9waW5nLmMKQEAgLTAsMCArMSw5MzUgQEAKKy8qCisgKiBJTkVUCQlBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKKyAqCQlvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIEJTRCBTb2NrZXQKKyAqCQlpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqCisgKgkJIlBpbmciIHNvY2tldHMKKyAqCisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBCYXNlZCBvbiBpcHY0L3VkcC5jIGNvZGUuCisgKgorICogQXV0aG9yczoJVmFzaWxpeSBLdWxpa292IC8gT3BlbndhbGwgKGZvciBMaW51eCAyLjYpLAorICoJCVBhdmVsIEthbmtvdnNreSAoZm9yIExpbnV4IDIuNC4zMikKKyAqCisgKiBQYXZlbCBnYXZlIGFsbCByaWdodHMgdG8gYnVncyB0byBWYXNpbGl5LAorICogbm9uZSBvZiB0aGUgYnVncyBhcmUgUGF2ZWwncyBub3cuCisgKgorICovCisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bmV0L3NubXAuaD4KKyNpbmNsdWRlIDxuZXQvaXAuaD4KKyNpbmNsdWRlIDxuZXQvaXB2Ni5oPgorI2luY2x1ZGUgPG5ldC9pY21wLmg+CisjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bmV0L3BpbmcuaD4KKyNpbmNsdWRlIDxuZXQvaWNtcC5oPgorI2luY2x1ZGUgPG5ldC91ZHAuaD4KKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKyNpbmNsdWRlIDxuZXQvaW5ldF9jb21tb24uaD4KKyNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KKworCitzdGF0aWMgc3RydWN0IHBpbmdfdGFibGUgcGluZ190YWJsZTsKKworc3RhdGljIHUxNiBwaW5nX3BvcnRfcm92ZXI7CisKK3N0YXRpYyBpbmxpbmUgaW50IHBpbmdfaGFzaGZuKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgbnVtLCB1bnNpZ25lZCBtYXNrKQoreworCWludCByZXMgPSAobnVtICsgbmV0X2hhc2hfbWl4KG5ldCkpICYgbWFzazsKKwlwcl9kZWJ1ZygiaGFzaCglZCkgPSAlZFxuIiwgbnVtLCByZXMpOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKnBpbmdfaGFzaHNsb3Qoc3RydWN0IHBpbmdfdGFibGUgKnRhYmxlLAorCQkJCQkgICAgIHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgbnVtKQoreworCXJldHVybiAmdGFibGUtPmhhc2hbcGluZ19oYXNoZm4obmV0LCBudW0sIFBJTkdfSFRBQkxFX01BU0spXTsKK30KKworc3RhdGljIGludCBwaW5nX3Y0X2dldF9wb3J0KHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaWRlbnQpCit7CisJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKm5vZGU7CisJc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhsaXN0OworCXN0cnVjdCBpbmV0X3NvY2sgKmlzaywgKmlzazI7CisJc3RydWN0IHNvY2sgKnNrMiA9IE5VTEw7CisKKwlpc2sgPSBpbmV0X3NrKHNrKTsKKwl3cml0ZV9sb2NrX2JoKCZwaW5nX3RhYmxlLmxvY2spOworCWlmIChpZGVudCA9PSAwKSB7CisJCXUzMiBpOworCQl1MTYgcmVzdWx0ID0gcGluZ19wb3J0X3JvdmVyICsgMTsKKworCQlmb3IgKGkgPSAwOyBpIDwgKDFMIDw8IDE2KTsgaSsrLCByZXN1bHQrKykgeworCQkJaWYgKCFyZXN1bHQpCisJCQkJcmVzdWx0Kys7IC8qIGF2b2lkIHplcm8gKi8KKwkJCWhsaXN0ID0gcGluZ19oYXNoc2xvdCgmcGluZ190YWJsZSwgc29ja19uZXQoc2spLAorCQkJCQkgICAgcmVzdWx0KTsKKwkJCXBpbmdfcG9ydGFkZHJfZm9yX2VhY2hfZW50cnkoc2syLCBub2RlLCBobGlzdCkgeworCQkJCWlzazIgPSBpbmV0X3NrKHNrMik7CisKKwkJCQlpZiAoaXNrMi0+aW5ldF9udW0gPT0gcmVzdWx0KQorCQkJCQlnb3RvIG5leHRfcG9ydDsKKwkJCX0KKworCQkJLyogZm91bmQgKi8KKwkJCXBpbmdfcG9ydF9yb3ZlciA9IGlkZW50ID0gcmVzdWx0OworCQkJYnJlYWs7CituZXh0X3BvcnQ6CisJCQk7CisJCX0KKwkJaWYgKGkgPj0gKDFMIDw8IDE2KSkKKwkJCWdvdG8gZmFpbDsKKwl9IGVsc2UgeworCQlobGlzdCA9IHBpbmdfaGFzaHNsb3QoJnBpbmdfdGFibGUsIHNvY2tfbmV0KHNrKSwgaWRlbnQpOworCQlwaW5nX3BvcnRhZGRyX2Zvcl9lYWNoX2VudHJ5KHNrMiwgbm9kZSwgaGxpc3QpIHsKKwkJCWlzazIgPSBpbmV0X3NrKHNrMik7CisKKwkJCWlmICgoaXNrMi0+aW5ldF9udW0gPT0gaWRlbnQpICYmCisJCQkgICAgKHNrMiAhPSBzaykgJiYKKwkJCSAgICAoIXNrMi0+c2tfcmV1c2UgfHwgIXNrLT5za19yZXVzZSkpCisJCQkJZ290byBmYWlsOworCQl9CisJfQorCisJcHJfZGVidWcoImZvdW5kIHBvcnQvaWRlbnQgPSAlZFxuIiwgaWRlbnQpOworCWlzay0+aW5ldF9udW0gPSBpZGVudDsKKwlpZiAoc2tfdW5oYXNoZWQoc2spKSB7CisJCXByX2RlYnVnKCJ3YXMgbm90IGhhc2hlZFxuIik7CisJCXNvY2tfaG9sZChzayk7CisJCWhsaXN0X251bGxzX2FkZF9oZWFkKCZzay0+c2tfbnVsbHNfbm9kZSwgaGxpc3QpOworCQlzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stPnNrX3Byb3QsIDEpOworCX0KKwl3cml0ZV91bmxvY2tfYmgoJnBpbmdfdGFibGUubG9jayk7CisJcmV0dXJuIDA7CisKK2ZhaWw6CisJd3JpdGVfdW5sb2NrX2JoKCZwaW5nX3RhYmxlLmxvY2spOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBwaW5nX3Y0X2hhc2goc3RydWN0IHNvY2sgKnNrKQoreworCXByX2RlYnVnKCJwaW5nX3Y0X2hhc2goc2stPnBvcnQ9JXUpXG4iLCBpbmV0X3NrKHNrKS0+aW5ldF9udW0pOworCUJVRygpOyAvKiAiUGxlYXNlIGRvIG5vdCBwcmVzcyB0aGlzIGJ1dHRvbiBhZ2Fpbi4iICovCit9CisKK3N0YXRpYyB2b2lkIHBpbmdfdjRfdW5oYXNoKHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgaW5ldF9zb2NrICppc2sgPSBpbmV0X3NrKHNrKTsKKwlwcl9kZWJ1ZygicGluZ192NF91bmhhc2goaXNrPSVwLGlzay0+bnVtPSV1KVxuIiwgaXNrLCBpc2stPmluZXRfbnVtKTsKKwlpZiAoc2tfaGFzaGVkKHNrKSkgeworCQlzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaHNsb3Q7CisKKwkJaHNsb3QgPSBwaW5nX2hhc2hzbG90KCZwaW5nX3RhYmxlLCBzb2NrX25ldChzayksIGlzay0+aW5ldF9udW0pOworCQl3cml0ZV9sb2NrX2JoKCZwaW5nX3RhYmxlLmxvY2spOworCQlobGlzdF9udWxsc19kZWwoJnNrLT5za19udWxsc19ub2RlKTsKKwkJc29ja19wdXQoc2spOworCQlpc2stPmluZXRfbnVtID0gaXNrLT5pbmV0X3Nwb3J0ID0gMDsKKwkJc29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLT5za19wcm90LCAtMSk7CisJCXdyaXRlX3VubG9ja19iaCgmcGluZ190YWJsZS5sb2NrKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29jayAqcGluZ192NF9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgc2FkZHIsIHUzMiBkYWRkciwKKwkJCQkgICB1MTYgaWRlbnQsIGludCBkaWYpCit7CisJc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhzbG90ID0gcGluZ19oYXNoc2xvdCgmcGluZ190YWJsZSwgbmV0LCBpZGVudCk7CisJc3RydWN0IHNvY2sgKnNrID0gTlVMTDsKKwlzdHJ1Y3QgaW5ldF9zb2NrICppc2s7CisJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKmhub2RlOworCisJcHJfZGVidWcoInRyeSB0byBmaW5kOiBudW0gPSAlZCwgZGFkZHIgPSAlbGQsIGRpZiA9ICVkXG4iLAorCQkJIChpbnQpaWRlbnQsICh1bnNpZ25lZCBsb25nKWRhZGRyLCBkaWYpOworCXJlYWRfbG9ja19iaCgmcGluZ190YWJsZS5sb2NrKTsKKworCXBpbmdfcG9ydGFkZHJfZm9yX2VhY2hfZW50cnkoc2ssIGhub2RlLCBoc2xvdCkgeworCQlpc2sgPSBpbmV0X3NrKHNrKTsKKworCQlwcl9kZWJ1ZygiZm91bmQ6ICVwOiBudW0gPSAlZCwgZGFkZHIgPSAlbGQsIGRpZiA9ICVkXG4iLCBzaywKKwkJCSAoaW50KWlzay0+aW5ldF9udW0sICh1bnNpZ25lZCBsb25nKWlzay0+aW5ldF9yY3Zfc2FkZHIsCisJCQkgc2stPnNrX2JvdW5kX2Rldl9pZik7CisKKwkJcHJfZGVidWcoIml0ZXJhdGVcbiIpOworCQlpZiAoaXNrLT5pbmV0X251bSAhPSBpZGVudCkKKwkJCWNvbnRpbnVlOworCQlpZiAoaXNrLT5pbmV0X3Jjdl9zYWRkciAmJiBpc2stPmluZXRfcmN2X3NhZGRyICE9IGRhZGRyKQorCQkJY29udGludWU7CisJCWlmIChzay0+c2tfYm91bmRfZGV2X2lmICYmIHNrLT5za19ib3VuZF9kZXZfaWYgIT0gZGlmKQorCQkJY29udGludWU7CisKKwkJc29ja19ob2xkKHNrKTsKKwkJZ290byBleGl0OworCX0KKworCXNrID0gTlVMTDsKK2V4aXQ6CisJcmVhZF91bmxvY2tfYmgoJnBpbmdfdGFibGUubG9jayk7CisKKwlyZXR1cm4gc2s7Cit9CisKK3N0YXRpYyB2b2lkIGluZXRfZ2V0X3BpbmdfZ3JvdXBfcmFuZ2VfbmV0KHN0cnVjdCBuZXQgKm5ldCwgZ2lkX3QgKmxvdywKKwkJCQkJICBnaWRfdCAqaGlnaCkKK3sKKwlnaWRfdCAqZGF0YSA9IG5ldC0+aXB2NC5zeXNjdGxfcGluZ19ncm91cF9yYW5nZTsKKwl1bnNpZ25lZCBzZXE7CisJZG8geworCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZzeXNjdGxfbG9jYWxfcG9ydHMubG9jayk7CisKKwkJKmxvdyA9IGRhdGFbMF07CisJCSpoaWdoID0gZGF0YVsxXTsKKwl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KCZzeXNjdGxfbG9jYWxfcG9ydHMubG9jaywgc2VxKSk7Cit9CisKKworc3RhdGljIGludCBwaW5nX2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOworCWdpZF90IGdyb3VwID0gY3VycmVudF9lZ2lkKCk7CisJZ2lkX3QgcmFuZ2VbMl07CisJc3RydWN0IGdyb3VwX2luZm8gKmdyb3VwX2luZm8gPSBnZXRfY3VycmVudF9ncm91cHMoKTsKKwlpbnQgaSwgaiwgY291bnQgPSBncm91cF9pbmZvLT5uZ3JvdXBzOworCisJaW5ldF9nZXRfcGluZ19ncm91cF9yYW5nZV9uZXQobmV0LCByYW5nZSwgcmFuZ2UrMSk7CisJaWYgKHJhbmdlWzBdIDw9IGdyb3VwICYmIGdyb3VwIDw9IHJhbmdlWzFdKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBncm91cF9pbmZvLT5uYmxvY2tzOyBpKyspIHsKKwkJaW50IGNwX2NvdW50ID0gbWluX3QoaW50LCBOR1JPVVBTX1BFUl9CTE9DSywgY291bnQpOworCisJCWZvciAoaiA9IDA7IGogPCBjcF9jb3VudDsgaisrKSB7CisJCQlncm91cCA9IGdyb3VwX2luZm8tPmJsb2Nrc1tpXVtqXTsKKwkJCWlmIChyYW5nZVswXSA8PSBncm91cCAmJiBncm91cCA8PSByYW5nZVsxXSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCisJCWNvdW50IC09IGNwX2NvdW50OworCX0KKworCXJldHVybiAtRUFDQ0VTOworfQorCitzdGF0aWMgdm9pZCBwaW5nX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KQoreworCXByX2RlYnVnKCJwaW5nX2Nsb3NlKHNrPSVwLHNrLT5udW09JXUpXG4iLAorCQlpbmV0X3NrKHNrKSwgaW5ldF9zayhzayktPmluZXRfbnVtKTsKKwlwcl9kZWJ1ZygiaXNrLT5yZWZjbnQgPSAlZFxuIiwgc2stPnNrX3JlZmNudC5jb3VudGVyKTsKKworCXNrX2NvbW1vbl9yZWxlYXNlKHNrKTsKK30KKworLyoKKyAqIFdlIG5lZWQgb3VyIG93biBiaW5kIGJlY2F1c2UgdGhlcmUgYXJlIG5vIHByaXZpbGVnZWQgaWQncyA9PSBsb2NhbCBwb3J0cy4KKyAqIE1vcmVvdmVyLCB3ZSBkb24ndCBhbGxvdyBiaW5kaW5nIHRvIG11bHRpLSBhbmQgYnJvYWRjYXN0IGFkZHJlc3Nlcy4KKyAqLworCitzdGF0aWMgaW50IHBpbmdfYmluZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsIGludCBhZGRyX2xlbikKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIgPSAoc3RydWN0IHNvY2thZGRyX2luICopdWFkZHI7CisJc3RydWN0IGluZXRfc29jayAqaXNrID0gaW5ldF9zayhzayk7CisJdW5zaWduZWQgc2hvcnQgc251bTsKKwlpbnQgY2hrX2FkZHJfcmV0OworCWludCBlcnI7CisKKwlpZiAoYWRkcl9sZW4gPCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcl9kZWJ1ZygicGluZ192NF9iaW5kKHNrPSVwLHNhX2FkZHI9JTA4eCxzYV9wb3J0PSVkKVxuIiwKKwkJc2ssIGFkZHItPnNpbl9hZGRyLnNfYWRkciwgbnRvaHMoYWRkci0+c2luX3BvcnQpKTsKKworCWNoa19hZGRyX3JldCA9IGluZXRfYWRkcl90eXBlKHNvY2tfbmV0KHNrKSwgYWRkci0+c2luX2FkZHIuc19hZGRyKTsKKwlpZiAoYWRkci0+c2luX2FkZHIuc19hZGRyID09IElOQUREUl9BTlkpCisJCWNoa19hZGRyX3JldCA9IFJUTl9MT0NBTDsKKworCWlmICgoc3lzY3RsX2lwX25vbmxvY2FsX2JpbmQgPT0gMCAmJgorCSAgICBpc2stPmZyZWViaW5kID09IDAgJiYgaXNrLT50cmFuc3BhcmVudCA9PSAwICYmCisJICAgICBjaGtfYWRkcl9yZXQgIT0gUlROX0xPQ0FMKSB8fAorCSAgICBjaGtfYWRkcl9yZXQgPT0gUlROX01VTFRJQ0FTVCB8fAorCSAgICBjaGtfYWRkcl9yZXQgPT0gUlROX0JST0FEQ0FTVCkKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCisJbG9ja19zb2NrKHNrKTsKKworCWVyciA9IC1FSU5WQUw7CisJaWYgKGlzay0+aW5ldF9udW0gIT0gMCkKKwkJZ290byBvdXQ7CisKKwllcnIgPSAtRUFERFJJTlVTRTsKKwlpc2stPmluZXRfcmN2X3NhZGRyID0gaXNrLT5pbmV0X3NhZGRyID0gYWRkci0+c2luX2FkZHIuc19hZGRyOworCXNudW0gPSBudG9ocyhhZGRyLT5zaW5fcG9ydCk7CisJaWYgKHBpbmdfdjRfZ2V0X3BvcnQoc2ssIHNudW0pICE9IDApIHsKKwkJaXNrLT5pbmV0X3NhZGRyID0gaXNrLT5pbmV0X3Jjdl9zYWRkciA9IDA7CisJCWdvdG8gb3V0OworCX0KKworCXByX2RlYnVnKCJhZnRlciBiaW5kKCk6IG51bSA9ICVkLCBkYWRkciA9ICVsZCwgZGlmID0gJWRcbiIsCisJCShpbnQpaXNrLT5pbmV0X251bSwKKwkJKHVuc2lnbmVkIGxvbmcpIGlzay0+aW5ldF9yY3Zfc2FkZHIsCisJCShpbnQpc2stPnNrX2JvdW5kX2Rldl9pZik7CisKKwllcnIgPSAwOworCWlmIChpc2stPmluZXRfcmN2X3NhZGRyKQorCQlzay0+c2tfdXNlcmxvY2tzIHw9IFNPQ0tfQklOREFERFJfTE9DSzsKKwlpZiAoc251bSkKKwkJc2stPnNrX3VzZXJsb2NrcyB8PSBTT0NLX0JJTkRQT1JUX0xPQ0s7CisJaXNrLT5pbmV0X3Nwb3J0ID0gaHRvbnMoaXNrLT5pbmV0X251bSk7CisJaXNrLT5pbmV0X2RhZGRyID0gMDsKKwlpc2stPmluZXRfZHBvcnQgPSAwOworCXNrX2RzdF9yZXNldChzayk7CitvdXQ6CisJcmVsZWFzZV9zb2NrKHNrKTsKKwlwcl9kZWJ1ZygicGluZ192NF9iaW5kIC0+ICVkXG4iLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBJcyB0aGlzIGEgc3VwcG9ydGVkIHR5cGUgb2YgSUNNUCBtZXNzYWdlPworICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHBpbmdfc3VwcG9ydGVkKGludCB0eXBlLCBpbnQgY29kZSkKK3sKKwlpZiAodHlwZSA9PSBJQ01QX0VDSE8gJiYgY29kZSA9PSAwKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgdGhlIElDTVAgbW9kdWxlIHdoZW4gaXQgZ2V0cyBzb21lCisgKiBzb3J0IG9mIGVycm9yIGNvbmRpdGlvbi4KKyAqLworCitzdGF0aWMgaW50IHBpbmdfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOworCit2b2lkIHBpbmdfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZvKQoreworCXN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWNtcGhkciAqaWNtcGggPSAoc3RydWN0IGljbXBoZHIgKikoc2tiLT5kYXRhKyhpcGgtPmlobDw8MikpOworCXN0cnVjdCBpbmV0X3NvY2sgKmluZXRfc29jazsKKwlpbnQgdHlwZSA9IGljbXBoLT50eXBlOworCWludCBjb2RlID0gaWNtcGgtPmNvZGU7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItPmRldik7CisJc3RydWN0IHNvY2sgKnNrOworCWludCBoYXJkZXJyOworCWludCBlcnI7CisKKwkvKiBXZSBhc3N1bWUgdGhlIHBhY2tldCBoYXMgYWxyZWFkeSBiZWVuIGNoZWNrZWQgYnkgaWNtcF91bnJlYWNoICovCisKKwlpZiAoIXBpbmdfc3VwcG9ydGVkKGljbXBoLT50eXBlLCBpY21waC0+Y29kZSkpCisJCXJldHVybjsKKworCXByX2RlYnVnKCJwaW5nX2Vycih0eXBlPSUwNHgsY29kZT0lMDR4LGlkPSUwNHgsc2VxPSUwNHgpXG4iLCB0eXBlLAorCQljb2RlLCBudG9ocyhpY21waC0+dW4uZWNoby5pZCksIG50b2hzKGljbXBoLT51bi5lY2hvLnNlcXVlbmNlKSk7CisKKwlzayA9IHBpbmdfdjRfbG9va3VwKG5ldCwgaXBoLT5kYWRkciwgaXBoLT5zYWRkciwKKwkJCSAgICBudG9ocyhpY21waC0+dW4uZWNoby5pZCksIHNrYi0+ZGV2LT5pZmluZGV4KTsKKwlpZiAoc2sgPT0gTlVMTCkgeworCQlJQ01QX0lOQ19TVEFUU19CSChuZXQsIElDTVBfTUlCX0lORVJST1JTKTsKKwkJcHJfZGVidWcoIm5vIHNvY2tldCwgZHJvcHBpbmdcbiIpOworCQlyZXR1cm47CS8qIE5vIHNvY2tldCBmb3IgZXJyb3IgKi8KKwl9CisJcHJfZGVidWcoImVyciBvbiBzb2NrZXQgJXBcbiIsIHNrKTsKKworCWVyciA9IDA7CisJaGFyZGVyciA9IDA7CisJaW5ldF9zb2NrID0gaW5ldF9zayhzayk7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwlkZWZhdWx0OgorCWNhc2UgSUNNUF9USU1FX0VYQ0VFREVEOgorCQllcnIgPSBFSE9TVFVOUkVBQ0g7CisJCWJyZWFrOworCWNhc2UgSUNNUF9TT1VSQ0VfUVVFTkNIOgorCQkvKiBUaGlzIGlzIG5vdCBhIHJlYWwgZXJyb3IgYnV0IHBpbmcgd2FudHMgdG8gc2VlIGl0LgorCQkgKiBSZXBvcnQgaXQgd2l0aCBzb21lIGZha2UgZXJybm8uICovCisJCWVyciA9IEVSRU1PVEVJTzsKKwkJYnJlYWs7CisJY2FzZSBJQ01QX1BBUkFNRVRFUlBST0I6CisJCWVyciA9IEVQUk9UTzsKKwkJaGFyZGVyciA9IDE7CisJCWJyZWFrOworCWNhc2UgSUNNUF9ERVNUX1VOUkVBQ0g6CisJCWlmIChjb2RlID09IElDTVBfRlJBR19ORUVERUQpIHsgLyogUGF0aCBNVFUgZGlzY292ZXJ5ICovCisJCQlpZiAoaW5ldF9zb2NrLT5wbXR1ZGlzYyAhPSBJUF9QTVRVRElTQ19ET05UKSB7CisJCQkJZXJyID0gRU1TR1NJWkU7CisJCQkJaGFyZGVyciA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCQlnb3RvIG91dDsKKwkJfQorCQllcnIgPSBFSE9TVFVOUkVBQ0g7CisJCWlmIChjb2RlIDw9IE5SX0lDTVBfVU5SRUFDSCkgeworCQkJaGFyZGVyciA9IGljbXBfZXJyX2NvbnZlcnRbY29kZV0uZmF0YWw7CisJCQllcnIgPSBpY21wX2Vycl9jb252ZXJ0W2NvZGVdLmVycm5vOworCQl9CisJCWJyZWFrOworCWNhc2UgSUNNUF9SRURJUkVDVDoKKwkJLyogU2VlIElDTVBfU09VUkNFX1FVRU5DSCAqLworCQllcnIgPSBFUkVNT1RFSU87CisJCWJyZWFrOworCX0KKworCS8qCisJICogICAgICBSRkMxMTIyOiBPSy4gIFBhc3NlcyBJQ01QIGVycm9ycyBiYWNrIHRvIGFwcGxpY2F0aW9uLCBhcyBwZXIKKwkgKgk0LjEuMy4zLgorCSAqLworCWlmICghaW5ldF9zb2NrLT5yZWN2ZXJyKSB7CisJCWlmICghaGFyZGVyciB8fCBzay0+c2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKQorCQkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJaXBfaWNtcF9lcnJvcihzaywgc2tiLCBlcnIsIDAgLyogbm8gcmVtb3RlIHBvcnQgKi8sCisJCQkgaW5mbywgKHU4ICopaWNtcGgpOworCX0KKwlzay0+c2tfZXJyID0gZXJyOworCXNrLT5za19lcnJvcl9yZXBvcnQoc2spOworb3V0OgorCXNvY2tfcHV0KHNrKTsKK30KKworLyoKKyAqCUNvcHkgYW5kIGNoZWNrc3VtIGFuIElDTVAgRWNobyBwYWNrZXQgZnJvbSB1c2VyIHNwYWNlIGludG8gYSBidWZmZXIuCisgKi8KKworc3RydWN0IHBpbmdmYWtlaGRyIHsKKwlzdHJ1Y3QgaWNtcGhkciBpY21waDsKKwlzdHJ1Y3QgaW92ZWMgKmlvdjsKKwl1MzIgd2NoZWNrOworfTsKKworc3RhdGljIGludCBwaW5nX2dldGZyYWcodm9pZCAqZnJvbSwgY2hhciAqIHRvLAorCQkJaW50IG9mZnNldCwgaW50IGZyYWdsZW4sIGludCBvZGQsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHBpbmdmYWtlaGRyICpwZmggPSAoc3RydWN0IHBpbmdmYWtlaGRyICopZnJvbTsKKworCWlmIChvZmZzZXQgPT0gMCkgeworCQlpZiAoZnJhZ2xlbiA8IHNpemVvZihzdHJ1Y3QgaWNtcGhkcikpCisJCQlCVUcoKTsKKwkJaWYgKGNzdW1fcGFydGlhbF9jb3B5X2Zyb21pb3ZlY2VuZCh0byArIHNpemVvZihzdHJ1Y3QgaWNtcGhkciksCisJCQkgICAgcGZoLT5pb3YsIDAsIGZyYWdsZW4gLSBzaXplb2Yoc3RydWN0IGljbXBoZHIpLAorCQkJICAgICZwZmgtPndjaGVjaykpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlyZXR1cm4gMDsKKwl9CisJaWYgKG9mZnNldCA8IHNpemVvZihzdHJ1Y3QgaWNtcGhkcikpCisJCUJVRygpOworCWlmIChjc3VtX3BhcnRpYWxfY29weV9mcm9taW92ZWNlbmQKKwkJCSh0bywgcGZoLT5pb3YsIG9mZnNldCAtIHNpemVvZihzdHJ1Y3QgaWNtcGhkciksCisJCQkgZnJhZ2xlbiwgJnBmaC0+d2NoZWNrKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGluZ19wdXNoX3BlbmRpbmdfZnJhbWVzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBpbmdmYWtlaGRyICpwZmgsCisJCQkJICAgIHN0cnVjdCBmbG93aTQgKmZsNCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX3BlZWsoJnNrLT5za193cml0ZV9xdWV1ZSk7CisKKwlwZmgtPndjaGVjayA9IGNzdW1fcGFydGlhbCgoY2hhciAqKSZwZmgtPmljbXBoLAorCQlzaXplb2Yoc3RydWN0IGljbXBoZHIpLCBwZmgtPndjaGVjayk7CisJcGZoLT5pY21waC5jaGVja3N1bSA9IGNzdW1fZm9sZChwZmgtPndjaGVjayk7CisJbWVtY3B5KGljbXBfaGRyKHNrYiksICZwZmgtPmljbXBoLCBzaXplb2Yoc3RydWN0IGljbXBoZHIpKTsKKwlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJcmV0dXJuIGlwX3B1c2hfcGVuZGluZ19mcmFtZXMoc2ssIGZsNCk7Cit9CisKK3N0YXRpYyBpbnQgcGluZ19zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csCisJCQlzaXplX3QgbGVuKQoreworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKKwlzdHJ1Y3QgZmxvd2k0IGZsNDsKKwlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CisJc3RydWN0IGlwY21fY29va2llIGlwYzsKKwlzdHJ1Y3QgaWNtcGhkciB1c2VyX2ljbXBoOworCXN0cnVjdCBwaW5nZmFrZWhkciBwZmg7CisJc3RydWN0IHJ0YWJsZSAqcnQgPSBOVUxMOworCXN0cnVjdCBpcF9vcHRpb25zX2RhdGEgb3B0X2NvcHk7CisJaW50IGZyZWUgPSAwOworCXUzMiBzYWRkciwgZGFkZHIsIGZhZGRyOworCXU4ICB0b3M7CisJaW50IGVycjsKKworCXByX2RlYnVnKCJwaW5nX3NlbmRtc2coc2s9JXAsc2stPm51bT0ldSlcbiIsIGluZXQsIGluZXQtPmluZXRfbnVtKTsKKworCisJaWYgKGxlbiA+IDB4RkZGRikKKwkJcmV0dXJuIC1FTVNHU0laRTsKKworCS8qCisJICoJQ2hlY2sgdGhlIGZsYWdzLgorCSAqLworCisJLyogTWlycm9yIEJTRCBlcnJvciBtZXNzYWdlIGNvbXBhdGliaWxpdHkgKi8KKwlpZiAobXNnLT5tc2dfZmxhZ3MgJiBNU0dfT09CKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwkvKgorCSAqCUZldGNoIHRoZSBJQ01QIGhlYWRlciBwcm92aWRlZCBieSB0aGUgdXNlcmxhbmQuCisJICoJaW92ZWMgaXMgbW9kaWZpZWQhCisJICovCisKKwlpZiAobWVtY3B5X2Zyb21pb3ZlYygodTggKikmdXNlcl9pY21waCwgbXNnLT5tc2dfaW92LAorCQkJICAgICBzaXplb2Yoc3RydWN0IGljbXBoZHIpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKCFwaW5nX3N1cHBvcnRlZCh1c2VyX2ljbXBoLnR5cGUsIHVzZXJfaWNtcGguY29kZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKglHZXQgYW5kIHZlcmlmeSB0aGUgYWRkcmVzcy4KKwkgKi8KKworCWlmIChtc2ctPm1zZ19uYW1lKSB7CisJCXN0cnVjdCBzb2NrYWRkcl9pbiAqdXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKiltc2ctPm1zZ19uYW1lOworCQlpZiAobXNnLT5tc2dfbmFtZWxlbiA8IHNpemVvZigqdXNpbikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKHVzaW4tPnNpbl9mYW1pbHkgIT0gQUZfSU5FVCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlkYWRkciA9IHVzaW4tPnNpbl9hZGRyLnNfYWRkcjsKKwkJLyogbm8gcmVtb3RlIHBvcnQgKi8KKwl9IGVsc2UgeworCQlpZiAoc2stPnNrX3N0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCkKKwkJCXJldHVybiAtRURFU1RBRERSUkVROworCQlkYWRkciA9IGluZXQtPmluZXRfZGFkZHI7CisJCS8qIG5vIHJlbW90ZSBwb3J0ICovCisJfQorCisJaXBjLmFkZHIgPSBpbmV0LT5pbmV0X3NhZGRyOworCWlwYy5vcHQgPSBOVUxMOworCWlwYy5vaWYgPSBzay0+c2tfYm91bmRfZGV2X2lmOworCWlwYy50eF9mbGFncyA9IDA7CisJZXJyID0gc29ja190eF90aW1lc3RhbXAoc2ssICZpcGMudHhfZmxhZ3MpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAobXNnLT5tc2dfY29udHJvbGxlbikgeworCQllcnIgPSBpcF9jbXNnX3NlbmQoc29ja19uZXQoc2spLCBtc2csICZpcGMpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJaWYgKGlwYy5vcHQpCisJCQlmcmVlID0gMTsKKwl9CisJaWYgKCFpcGMub3B0KSB7CisJCXN0cnVjdCBpcF9vcHRpb25zX3JjdSAqaW5ldF9vcHQ7CisKKwkJcmN1X3JlYWRfbG9jaygpOworCQlpbmV0X29wdCA9IHJjdV9kZXJlZmVyZW5jZShpbmV0LT5pbmV0X29wdCk7CisJCWlmIChpbmV0X29wdCkgeworCQkJbWVtY3B5KCZvcHRfY29weSwgaW5ldF9vcHQsCisJCQkgICAgICAgc2l6ZW9mKCppbmV0X29wdCkgKyBpbmV0X29wdC0+b3B0Lm9wdGxlbik7CisJCQlpcGMub3B0ID0gJm9wdF9jb3B5Lm9wdDsKKwkJfQorCQlyY3VfcmVhZF91bmxvY2soKTsKKwl9CisKKwlzYWRkciA9IGlwYy5hZGRyOworCWlwYy5hZGRyID0gZmFkZHIgPSBkYWRkcjsKKworCWlmIChpcGMub3B0ICYmIGlwYy5vcHQtPm9wdC5zcnIpIHsKKwkJaWYgKCFkYWRkcikKKwkJCXJldHVybiAtRUlOVkFMOworCQlmYWRkciA9IGlwYy5vcHQtPm9wdC5mYWRkcjsKKwl9CisJdG9zID0gUlRfVE9TKGluZXQtPnRvcyk7CisJaWYgKHNvY2tfZmxhZyhzaywgU09DS19MT0NBTFJPVVRFKSB8fAorCSAgICAobXNnLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFJPVVRFKSB8fAorCSAgICAoaXBjLm9wdCAmJiBpcGMub3B0LT5vcHQuaXNfc3RyaWN0cm91dGUpKSB7CisJCXRvcyB8PSBSVE9fT05MSU5LOworCX0KKworCWlmIChpcHY0X2lzX211bHRpY2FzdChkYWRkcikpIHsKKwkJaWYgKCFpcGMub2lmKQorCQkJaXBjLm9pZiA9IGluZXQtPm1jX2luZGV4OworCQlpZiAoIXNhZGRyKQorCQkJc2FkZHIgPSBpbmV0LT5tY19hZGRyOworCX0KKworCWZsb3dpNF9pbml0X291dHB1dCgmZmw0LCBpcGMub2lmLCBzay0+c2tfbWFyaywgdG9zLAorCQkJICAgUlRfU0NPUEVfVU5JVkVSU0UsIHNrLT5za19wcm90b2NvbCwKKwkJCSAgIGluZXRfc2tfZmxvd2lfZmxhZ3Moc2spLCBmYWRkciwgc2FkZHIsIDAsIDApOworCisJc2VjdXJpdHlfc2tfY2xhc3NpZnlfZmxvdyhzaywgZmxvd2k0X3RvX2Zsb3dpKCZmbDQpKTsKKwlydCA9IGlwX3JvdXRlX291dHB1dF9mbG93KG5ldCwgJmZsNCwgc2spOworCWlmIChJU19FUlIocnQpKSB7CisJCWVyciA9IFBUUl9FUlIocnQpOworCQlydCA9IE5VTEw7CisJCWlmIChlcnIgPT0gLUVORVRVTlJFQUNIKQorCQkJSVBfSU5DX1NUQVRTX0JIKG5ldCwgSVBTVEFUU19NSUJfT1VUTk9ST1VURVMpOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSAtRUFDQ0VTOworCWlmICgocnQtPnJ0X2ZsYWdzICYgUlRDRl9CUk9BRENBU1QpICYmCisJICAgICFzb2NrX2ZsYWcoc2ssIFNPQ0tfQlJPQURDQVNUKSkKKwkJZ290byBvdXQ7CisKKwlpZiAobXNnLT5tc2dfZmxhZ3MgJiBNU0dfQ09ORklSTSkKKwkJZ290byBkb19jb25maXJtOworYmFja19mcm9tX2NvbmZpcm06CisKKwlpZiAoIWlwYy5hZGRyKQorCQlpcGMuYWRkciA9IGZsNC5kYWRkcjsKKworCWxvY2tfc29jayhzayk7CisKKwlwZmguaWNtcGgudHlwZSA9IHVzZXJfaWNtcGgudHlwZTsgLyogYWxyZWFkeSBjaGVja2VkICovCisJcGZoLmljbXBoLmNvZGUgPSB1c2VyX2ljbXBoLmNvZGU7IC8qIGRpdHRvICovCisJcGZoLmljbXBoLmNoZWNrc3VtID0gMDsKKwlwZmguaWNtcGgudW4uZWNoby5pZCA9IGluZXQtPmluZXRfc3BvcnQ7CisJcGZoLmljbXBoLnVuLmVjaG8uc2VxdWVuY2UgPSB1c2VyX2ljbXBoLnVuLmVjaG8uc2VxdWVuY2U7CisJcGZoLmlvdiA9IG1zZy0+bXNnX2lvdjsKKwlwZmgud2NoZWNrID0gMDsKKworCWVyciA9IGlwX2FwcGVuZF9kYXRhKHNrLCAmZmw0LCBwaW5nX2dldGZyYWcsICZwZmgsIGxlbiwKKwkJCTAsICZpcGMsICZydCwgbXNnLT5tc2dfZmxhZ3MpOworCWlmIChlcnIpCisJCWlwX2ZsdXNoX3BlbmRpbmdfZnJhbWVzKHNrKTsKKwllbHNlCisJCWVyciA9IHBpbmdfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzaywgJnBmaCwgJmZsNCk7CisJcmVsZWFzZV9zb2NrKHNrKTsKKworb3V0OgorCWlwX3J0X3B1dChydCk7CisJaWYgKGZyZWUpCisJCWtmcmVlKGlwYy5vcHQpOworCWlmICghZXJyKSB7CisJCWljbXBfb3V0X2NvdW50KHNvY2tfbmV0KHNrKSwgdXNlcl9pY21waC50eXBlKTsKKwkJcmV0dXJuIGxlbjsKKwl9CisJcmV0dXJuIGVycjsKKworZG9fY29uZmlybToKKwlkc3RfY29uZmlybSgmcnQtPmRzdCk7CisJaWYgKCEobXNnLT5tc2dfZmxhZ3MgJiBNU0dfUFJPQkUpIHx8IGxlbikKKwkJZ290byBiYWNrX2Zyb21fY29uZmlybTsKKwllcnIgPSAwOworCWdvdG8gb3V0OworfQorCitzdGF0aWMgaW50IHBpbmdfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLAorCQkJc2l6ZV90IGxlbiwgaW50IG5vYmxvY2ssIGludCBmbGFncywgaW50ICphZGRyX2xlbikKK3sKKwlzdHJ1Y3QgaW5ldF9zb2NrICppc2sgPSBpbmV0X3NrKHNrKTsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKiltc2ctPm1zZ19uYW1lOworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IGNvcGllZCwgZXJyOworCisJcHJfZGVidWcoInBpbmdfcmVjdm1zZyhzaz0lcCxzay0+bnVtPSV1KVxuIiwgaXNrLCBpc2stPmluZXRfbnVtKTsKKworCWlmIChmbGFncyAmIE1TR19PT0IpCisJCWdvdG8gb3V0OworCisJaWYgKGFkZHJfbGVuKQorCQkqYWRkcl9sZW4gPSBzaXplb2YoKnNpbik7CisKKwlpZiAoZmxhZ3MgJiBNU0dfRVJSUVVFVUUpCisJCXJldHVybiBpcF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbik7CisKKwlza2IgPSBza2JfcmVjdl9kYXRhZ3JhbShzaywgZmxhZ3MsIG5vYmxvY2ssICZlcnIpOworCWlmICghc2tiKQorCQlnb3RvIG91dDsKKworCWNvcGllZCA9IHNrYi0+bGVuOworCWlmIChjb3BpZWQgPiBsZW4pIHsKKwkJbXNnLT5tc2dfZmxhZ3MgfD0gTVNHX1RSVU5DOworCQljb3BpZWQgPSBsZW47CisJfQorCisJLyogRG9uJ3QgYm90aGVyIGNoZWNraW5nIHRoZSBjaGVja3N1bSAqLworCWVyciA9IHNrYl9jb3B5X2RhdGFncmFtX2lvdmVjKHNrYiwgMCwgbXNnLT5tc2dfaW92LCBjb3BpZWQpOworCWlmIChlcnIpCisJCWdvdG8gZG9uZTsKKworCXNvY2tfcmVjdl90aW1lc3RhbXAobXNnLCBzaywgc2tiKTsKKworCS8qIENvcHkgdGhlIGFkZHJlc3MuICovCisJaWYgKHNpbikgeworCQlzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCQlzaW4tPnNpbl9wb3J0ID0gMCAvKiBza2ItPmgudWgtPnNvdXJjZSAqLzsKKwkJc2luLT5zaW5fYWRkci5zX2FkZHIgPSBpcF9oZHIoc2tiKS0+c2FkZHI7CisJCW1lbXNldChzaW4tPnNpbl96ZXJvLCAwLCBzaXplb2Yoc2luLT5zaW5femVybykpOworCX0KKwlpZiAoaXNrLT5jbXNnX2ZsYWdzKQorCQlpcF9jbXNnX3JlY3YobXNnLCBza2IpOworCWVyciA9IGNvcGllZDsKKworZG9uZToKKwlza2JfZnJlZV9kYXRhZ3JhbShzaywgc2tiKTsKK291dDoKKwlwcl9kZWJ1ZygicGluZ19yZWN2bXNnIC0+ICVkXG4iLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcGluZ19xdWV1ZV9yY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlwcl9kZWJ1ZygicGluZ19xdWV1ZV9yY3Zfc2tiKHNrPSVwLHNrLT5udW09JWQsc2tiPSVwKVxuIiwKKwkJaW5ldF9zayhzayksIGluZXRfc2soc2spLT5pbmV0X251bSwgc2tiKTsKKwlpZiAoc29ja19xdWV1ZV9yY3Zfc2tiKHNrLCBza2IpIDwgMCkgeworCQlJQ01QX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIElDTVBfTUlCX0lORVJST1JTKTsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXByX2RlYnVnKCJwaW5nX3F1ZXVlX3Jjdl9za2IgLT4gZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworCisvKgorICoJQWxsIHdlIG5lZWQgdG8gZG8gaXMgZ2V0IHRoZSBzb2NrZXQuCisgKi8KKwordm9pZCBwaW5nX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBzb2NrICpzazsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0+ZGV2KTsKKwlzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpOworCXN0cnVjdCBpY21waGRyICppY21waCA9IGljbXBfaGRyKHNrYik7CisJdTMyIHNhZGRyID0gaXBoLT5zYWRkcjsKKwl1MzIgZGFkZHIgPSBpcGgtPmRhZGRyOworCisJLyogV2UgYXNzdW1lIHRoZSBwYWNrZXQgaGFzIGFscmVhZHkgYmVlbiBjaGVja2VkIGJ5IGljbXBfcmN2ICovCisKKwlwcl9kZWJ1ZygicGluZ19yY3Yoc2tiPSVwLGlkPSUwNHgsc2VxPSUwNHgpXG4iLAorCQlza2IsIG50b2hzKGljbXBoLT51bi5lY2hvLmlkKSwgbnRvaHMoaWNtcGgtPnVuLmVjaG8uc2VxdWVuY2UpKTsKKworCS8qIFB1c2ggSUNNUCBoZWFkZXIgYmFjayAqLworCXNrYl9wdXNoKHNrYiwgc2tiLT5kYXRhIC0gKHU4ICopaWNtcGgpOworCisJc2sgPSBwaW5nX3Y0X2xvb2t1cChuZXQsIHNhZGRyLCBkYWRkciwgbnRvaHMoaWNtcGgtPnVuLmVjaG8uaWQpLAorCQkJICAgIHNrYi0+ZGV2LT5pZmluZGV4KTsKKwlpZiAoc2sgIT0gTlVMTCkgeworCQlwcl9kZWJ1ZygicmN2IG9uIHNvY2tldCAlcFxuIiwgc2spOworCQlwaW5nX3F1ZXVlX3Jjdl9za2Ioc2ssIHNrYl9nZXQoc2tiKSk7CisJCXNvY2tfcHV0KHNrKTsKKwkJcmV0dXJuOworCX0KKwlwcl9kZWJ1Zygibm8gc29ja2V0LCBkcm9wcGluZ1xuIik7CisKKwkvKiBXZSdyZSBjYWxsZWQgZnJvbSBpY21wX3JjdigpLiBrZnJlZV9za2IoKSBpcyBkb25lIHRoZXJlLiAqLworfQorCitzdHJ1Y3QgcHJvdG8gcGluZ19wcm90ID0geworCS5uYW1lID0JCSJQSU5HIiwKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkuaW5pdCA9CQlwaW5nX2luaXRfc29jaywKKwkuY2xvc2UgPQlwaW5nX2Nsb3NlLAorCS5jb25uZWN0ID0JaXA0X2RhdGFncmFtX2Nvbm5lY3QsCisJLmRpc2Nvbm5lY3QgPQl1ZHBfZGlzY29ubmVjdCwKKwkuc2V0c29ja29wdCA9CWlwX3NldHNvY2tvcHQsCisJLmdldHNvY2tvcHQgPQlpcF9nZXRzb2Nrb3B0LAorCS5zZW5kbXNnID0JcGluZ19zZW5kbXNnLAorCS5yZWN2bXNnID0JcGluZ19yZWN2bXNnLAorCS5iaW5kID0JCXBpbmdfYmluZCwKKwkuYmFja2xvZ19yY3YgPQlwaW5nX3F1ZXVlX3Jjdl9za2IsCisJLmhhc2ggPQkJcGluZ192NF9oYXNoLAorCS51bmhhc2ggPQlwaW5nX3Y0X3VuaGFzaCwKKwkuZ2V0X3BvcnQgPQlwaW5nX3Y0X2dldF9wb3J0LAorCS5vYmpfc2l6ZSA9CXNpemVvZihzdHJ1Y3QgaW5ldF9zb2NrKSwKK307CitFWFBPUlRfU1lNQk9MKHBpbmdfcHJvdCk7CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCitzdGF0aWMgc3RydWN0IHNvY2sgKnBpbmdfZ2V0X2ZpcnN0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBpbnQgc3RhcnQpCit7CisJc3RydWN0IHNvY2sgKnNrOworCXN0cnVjdCBwaW5nX2l0ZXJfc3RhdGUgKnN0YXRlID0gc2VxLT5wcml2YXRlOworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOworCisJZm9yIChzdGF0ZS0+YnVja2V0ID0gc3RhcnQ7IHN0YXRlLT5idWNrZXQgPCBQSU5HX0hUQUJMRV9TSVpFOworCSAgICAgKytzdGF0ZS0+YnVja2V0KSB7CisJCXN0cnVjdCBobGlzdF9udWxsc19ub2RlICpub2RlOworCQlzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaHNsb3Q7CisKKwkJaHNsb3QgPSAmcGluZ190YWJsZS5oYXNoW3N0YXRlLT5idWNrZXRdOworCisJCWlmIChobGlzdF9udWxsc19lbXB0eShoc2xvdCkpCisJCQljb250aW51ZTsKKworCQlza19udWxsc19mb3JfZWFjaChzaywgbm9kZSwgaHNsb3QpIHsKKwkJCWlmIChuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpKQorCQkJCWdvdG8gZm91bmQ7CisJCX0KKwl9CisJc2sgPSBOVUxMOworZm91bmQ6CisJcmV0dXJuIHNrOworfQorCitzdGF0aWMgc3RydWN0IHNvY2sgKnBpbmdfZ2V0X25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgcGluZ19pdGVyX3N0YXRlICpzdGF0ZSA9IHNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKKworCWRvIHsKKwkJc2sgPSBza19udWxsc19uZXh0KHNrKTsKKwl9IHdoaWxlIChzayAmJiAoIW5ldF9lcShzb2NrX25ldChzayksIG5ldCkpKTsKKworCWlmICghc2spCisJCXJldHVybiBwaW5nX2dldF9maXJzdChzZXEsIHN0YXRlLT5idWNrZXQgKyAxKTsKKwlyZXR1cm4gc2s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29jayAqcGluZ19nZXRfaWR4KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgcG9zKQoreworCXN0cnVjdCBzb2NrICpzayA9IHBpbmdfZ2V0X2ZpcnN0KHNlcSwgMCk7CisKKwlpZiAoc2spCisJCXdoaWxlIChwb3MgJiYgKHNrID0gcGluZ19nZXRfbmV4dChzZXEsIHNrKSkgIT0gTlVMTCkKKwkJCS0tcG9zOworCXJldHVybiBwb3MgPyBOVUxMIDogc2s7Cit9CisKK3N0YXRpYyB2b2lkICpwaW5nX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IHBpbmdfaXRlcl9zdGF0ZSAqc3RhdGUgPSBzZXEtPnByaXZhdGU7CisJc3RhdGUtPmJ1Y2tldCA9IDA7CisKKwlyZWFkX2xvY2tfYmgoJnBpbmdfdGFibGUubG9jayk7CisKKwlyZXR1cm4gKnBvcyA/IHBpbmdfZ2V0X2lkeChzZXEsICpwb3MtMSkgOiBTRVFfU1RBUlRfVE9LRU47Cit9CisKK3N0YXRpYyB2b2lkICpwaW5nX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3Qgc29jayAqc2s7CisKKwlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCisJCXNrID0gcGluZ19nZXRfaWR4KHNlcSwgMCk7CisJZWxzZQorCQlzayA9IHBpbmdfZ2V0X25leHQoc2VxLCB2KTsKKworCSsrKnBvczsKKwlyZXR1cm4gc2s7Cit9CisKK3N0YXRpYyB2b2lkIHBpbmdfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7CisJcmVhZF91bmxvY2tfYmgoJnBpbmdfdGFibGUubG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHBpbmdfZm9ybWF0X3NvY2soc3RydWN0IHNvY2sgKnNwLCBzdHJ1Y3Qgc2VxX2ZpbGUgKmYsCisJCWludCBidWNrZXQsIGludCAqbGVuKQoreworCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNwKTsKKwlfX2JlMzIgZGVzdCA9IGluZXQtPmluZXRfZGFkZHI7CisJX19iZTMyIHNyYyA9IGluZXQtPmluZXRfcmN2X3NhZGRyOworCV9fdTE2IGRlc3RwID0gbnRvaHMoaW5ldC0+aW5ldF9kcG9ydCk7CisJX191MTYgc3JjcCA9IG50b2hzKGluZXQtPmluZXRfc3BvcnQpOworCisJc2VxX3ByaW50ZihmLCAiJTVkOiAlMDhYOiUwNFggJTA4WDolMDRYIgorCQkiICUwMlggJTA4WDolMDhYICUwMlg6JTA4bFggJTA4WCAlNWQgJThkICVsdSAlZCAlcEsgJWQlbiIsCisJCWJ1Y2tldCwgc3JjLCBzcmNwLCBkZXN0LCBkZXN0cCwgc3AtPnNrX3N0YXRlLAorCQlza193bWVtX2FsbG9jX2dldChzcCksCisJCXNrX3JtZW1fYWxsb2NfZ2V0KHNwKSwKKwkJMCwgMEwsIDAsIHNvY2tfaV91aWQoc3ApLCAwLCBzb2NrX2lfaW5vKHNwKSwKKwkJYXRvbWljX3JlYWQoJnNwLT5za19yZWZjbnQpLCBzcCwKKwkJYXRvbWljX3JlYWQoJnNwLT5za19kcm9wcyksIGxlbik7Cit9CisKK3N0YXRpYyBpbnQgcGluZ19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKwlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCisJCXNlcV9wcmludGYoc2VxLCAiJS0xMjdzXG4iLAorCQkJICAgIiAgc2wgIGxvY2FsX2FkZHJlc3MgcmVtX2FkZHJlc3MgICBzdCB0eF9xdWV1ZSAiCisJCQkgICAicnhfcXVldWUgdHIgdG0tPndoZW4gcmV0cm5zbXQgICB1aWQgIHRpbWVvdXQgIgorCQkJICAgImlub2RlIHJlZiBwb2ludGVyIGRyb3BzIik7CisJZWxzZSB7CisJCXN0cnVjdCBwaW5nX2l0ZXJfc3RhdGUgKnN0YXRlID0gc2VxLT5wcml2YXRlOworCQlpbnQgbGVuOworCisJCXBpbmdfZm9ybWF0X3NvY2sodiwgc2VxLCBzdGF0ZS0+YnVja2V0LCAmbGVuKTsKKwkJc2VxX3ByaW50ZihzZXEsICIlKnNcbiIsIDEyNyAtIGxlbiwgIiIpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwaW5nX3NlcV9vcHMgPSB7CisJLnNob3cJCT0gcGluZ19zZXFfc2hvdywKKwkuc3RhcnQJCT0gcGluZ19zZXFfc3RhcnQsCisJLm5leHQJCT0gcGluZ19zZXFfbmV4dCwKKwkuc3RvcAkJPSBwaW5nX3NlcV9zdG9wLAorfTsKKworc3RhdGljIGludCBwaW5nX3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzZXFfb3Blbl9uZXQoaW5vZGUsIGZpbGUsICZwaW5nX3NlcV9vcHMsCisJCQkgICBzaXplb2Yoc3RydWN0IHBpbmdfaXRlcl9zdGF0ZSkpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwaW5nX3NlcV9mb3BzID0geworCS5vcGVuCQk9IHBpbmdfc2VxX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZV9uZXQsCit9OworCitzdGF0aWMgaW50IHBpbmdfcHJvY19yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwOworCWludCByYyA9IDA7CisKKwlwID0gcHJvY19uZXRfZm9wc19jcmVhdGUobmV0LCAiaWNtcCIsIFNfSVJVR08sICZwaW5nX3NlcV9mb3BzKTsKKwlpZiAoIXApCisJCXJjID0gLUVOT01FTTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIHBpbmdfcHJvY191bnJlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlwcm9jX25ldF9yZW1vdmUobmV0LCAiaWNtcCIpOworfQorCisKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBwaW5nX3Byb2NfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQoreworCXJldHVybiBwaW5nX3Byb2NfcmVnaXN0ZXIobmV0KTsKK30KKworc3RhdGljIHZvaWQgX19uZXRfZXhpdCBwaW5nX3Byb2NfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQoreworCXBpbmdfcHJvY191bnJlZ2lzdGVyKG5ldCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgcGluZ19uZXRfb3BzID0geworCS5pbml0ID0gcGluZ19wcm9jX2luaXRfbmV0LAorCS5leGl0ID0gcGluZ19wcm9jX2V4aXRfbmV0LAorfTsKKworaW50IF9faW5pdCBwaW5nX3Byb2NfaW5pdCh2b2lkKQoreworCXJldHVybiByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZwaW5nX25ldF9vcHMpOworfQorCit2b2lkIHBpbmdfcHJvY19leGl0KHZvaWQpCit7CisJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZwaW5nX25ldF9vcHMpOworfQorCisjZW5kaWYKKwordm9pZCBfX2luaXQgcGluZ19pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUElOR19IVEFCTEVfU0laRTsgaSsrKQorCQlJTklUX0hMSVNUX05VTExTX0hFQUQoJnBpbmdfdGFibGUuaGFzaFtpXSwgaSk7CisJcndsb2NrX2luaXQoJnBpbmdfdGFibGUubG9jayk7Cit9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yYXcuYyBiL25ldC9pcHY0L3Jhdy5jCmluZGV4IGJjZWFlYzQuLjExZTE3ODA0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yYXcuYworKysgYi9uZXQvaXB2NC9yYXcuYwpAQCAtMTU0LDcgKzE1NCw3IEBACiAgKiBSRkMgMTEyMjogU0hPVUxEIHBhc3MgVE9TIHZhbHVlIHVwIHRvIHRoZSB0cmFuc3BvcnQgbGF5ZXIuCiAgKiAtPiBJdCBkb2VzLiBBbmQgbm90IG9ubHkgVE9TLCBidXQgYWxsIElQIGhlYWRlci4KICAqLwotc3RhdGljIGludCByYXdfdjRfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwaGRyICppcGgsIGludCBoYXNoKQorc3RhdGljIGludCByYXdfdjRfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGlwaGRyICppcGgsIGludCBoYXNoKQogewogCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKQEAgLTI0Nyw3ICsyNDcsNyBAQAogCX0KIAogCWlmIChpbmV0LT5yZWN2ZXJyKSB7Ci0JCXN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKKwkJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSAoY29uc3Qgc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOwogCQl1OCAqcGF5bG9hZCA9IHNrYi0+ZGF0YSArIChpcGgtPmlobCA8PCAyKTsKIAogCQlpZiAoaW5ldC0+aGRyaW5jbCkKQEAgLTI2NSw3ICsyNjUsNyBAQAogewogCWludCBoYXNoOwogCXN0cnVjdCBzb2NrICpyYXdfc2s7Ci0Jc3RydWN0IGlwaGRyICppcGg7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGg7CiAJc3RydWN0IG5ldCAqbmV0OwogCiAJaGFzaCA9IHByb3RvY29sICYgKFJBV19IVEFCTEVfU0laRSAtIDEpOwpAQCAtMjczLDcgKzI3Myw3IEBACiAJcmVhZF9sb2NrKCZyYXdfdjRfaGFzaGluZm8ubG9jayk7CiAJcmF3X3NrID0gc2tfaGVhZCgmcmF3X3Y0X2hhc2hpbmZvLmh0W2hhc2hdKTsKIAlpZiAocmF3X3NrICE9IE5VTEwpIHsKLQkJaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKKwkJaXBoID0gKGNvbnN0IHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKIAkJbmV0ID0gZGV2X25ldChza2ItPmRldik7CiAKIAkJd2hpbGUgKChyYXdfc2sgPSBfX3Jhd192NF9sb29rdXAobmV0LCByYXdfc2ssIHByb3RvY29sLApAQCAtMjgxLDcgKzI4MSw3IEBACiAJCQkJCQlza2ItPmRldi0+aWZpbmRleCkpICE9IE5VTEwpIHsKIAkJCXJhd19lcnIocmF3X3NrLCBza2IsIGluZm8pOwogCQkJcmF3X3NrID0gc2tfbmV4dChyYXdfc2spOwotCQkJaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKKwkJCWlwaCA9IChjb25zdCBzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7CiAJCX0KIAl9CiAJcmVhZF91bmxvY2soJnJhd192NF9oYXNoaW5mby5sb2NrKTsKQEAgLTMxNCw5ICszMTQsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCByYXdfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCB2b2lkICpmcm9tLCBzaXplX3QgbGVuZ3RoLAotCQkJc3RydWN0IHJ0YWJsZSAqKnJ0cCwKLQkJCXVuc2lnbmVkIGludCBmbGFncykKK3N0YXRpYyBpbnQgcmF3X3NlbmRfaGRyaW5jKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGZsb3dpNCAqZmw0LAorCQkJICAgdm9pZCAqZnJvbSwgc2l6ZV90IGxlbmd0aCwKKwkJCSAgIHN0cnVjdCBydGFibGUgKipydHAsCisJCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKQEAgLTMyNyw3ICszMjgsNyBAQAogCXN0cnVjdCBydGFibGUgKnJ0ID0gKnJ0cDsKIAogCWlmIChsZW5ndGggPiBydC0+ZHN0LmRldi0+bXR1KSB7Ci0JCWlwX2xvY2FsX2Vycm9yKHNrLCBFTVNHU0laRSwgcnQtPnJ0X2RzdCwgaW5ldC0+aW5ldF9kcG9ydCwKKwkJaXBfbG9jYWxfZXJyb3Ioc2ssIEVNU0dTSVpFLCBmbDQtPmRhZGRyLCBpbmV0LT5pbmV0X2Rwb3J0LAogCQkJICAgICAgIHJ0LT5kc3QuZGV2LT5tdHUpOwogCQlyZXR1cm4gLUVNU0dTSVpFOwogCX0KQEAgLTM3Miw3ICszNzMsNyBAQAogCiAJaWYgKGlwaGxlbiA+PSBzaXplb2YoKmlwaCkpIHsKIAkJaWYgKCFpcGgtPnNhZGRyKQotCQkJaXBoLT5zYWRkciA9IHJ0LT5ydF9zcmM7CisJCQlpcGgtPnNhZGRyID0gZmw0LT5zYWRkcjsKIAkJaXBoLT5jaGVjayAgID0gMDsKIAkJaXBoLT50b3RfbGVuID0gaHRvbnMobGVuZ3RoKTsKIAkJaWYgKCFpcGgtPmlkKQpAQCAtNDU1LDExICs0NTYsMTMgQEAKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJc3RydWN0IGlwY21fY29va2llIGlwYzsKIAlzdHJ1Y3QgcnRhYmxlICpydCA9IE5VTEw7CisJc3RydWN0IGZsb3dpNCBmbDQ7CiAJaW50IGZyZWUgPSAwOwogCV9fYmUzMiBkYWRkcjsKIAlfX2JlMzIgc2FkZHI7CiAJdTggIHRvczsKIAlpbnQgZXJyOworCXN0cnVjdCBpcF9vcHRpb25zX2RhdGEgb3B0X2NvcHk7CiAKIAllcnIgPSAtRU1TR1NJWkU7CiAJaWYgKGxlbiA+IDB4RkZGRikKQEAgLTUyMCw4ICs1MjMsMTggQEAKIAlzYWRkciA9IGlwYy5hZGRyOwogCWlwYy5hZGRyID0gZGFkZHI7CiAKLQlpZiAoIWlwYy5vcHQpCi0JCWlwYy5vcHQgPSBpbmV0LT5vcHQ7CisJaWYgKCFpcGMub3B0KSB7CisJCXN0cnVjdCBpcF9vcHRpb25zX3JjdSAqaW5ldF9vcHQ7CisKKwkJcmN1X3JlYWRfbG9jaygpOworCQlpbmV0X29wdCA9IHJjdV9kZXJlZmVyZW5jZShpbmV0LT5pbmV0X29wdCk7CisJCWlmIChpbmV0X29wdCkgeworCQkJbWVtY3B5KCZvcHRfY29weSwgaW5ldF9vcHQsCisJCQkgICAgICAgc2l6ZW9mKCppbmV0X29wdCkgKyBpbmV0X29wdC0+b3B0Lm9wdGxlbik7CisJCQlpcGMub3B0ID0gJm9wdF9jb3B5Lm9wdDsKKwkJfQorCQlyY3VfcmVhZF91bmxvY2soKTsKKwl9CiAKIAlpZiAoaXBjLm9wdCkgewogCQllcnIgPSAtRUlOVkFMOwpAQCAtNTMwLDEwICs1NDMsMTAgQEAKIAkJICovCiAJCWlmIChpbmV0LT5oZHJpbmNsKQogCQkJZ290byBkb25lOwotCQlpZiAoaXBjLm9wdC0+c3JyKSB7CisJCWlmIChpcGMub3B0LT5vcHQuc3JyKSB7CiAJCQlpZiAoIWRhZGRyKQogCQkJCWdvdG8gZG9uZTsKLQkJCWRhZGRyID0gaXBjLm9wdC0+ZmFkZHI7CisJCQlkYWRkciA9IGlwYy5vcHQtPm9wdC5mYWRkcjsKIAkJfQogCX0KIAl0b3MgPSBSVF9DT05OX0ZMQUdTKHNrKTsKQEAgLTU0NywzMSArNTYwLDIzIEBACiAJCQlzYWRkciA9IGluZXQtPm1jX2FkZHI7CiAJfQogCi0JewotCQlzdHJ1Y3QgZmxvd2k0IGZsNCA9IHsKLQkJCS5mbG93aTRfb2lmID0gaXBjLm9pZiwKLQkJCS5mbG93aTRfbWFyayA9IHNrLT5za19tYXJrLAotCQkJLmRhZGRyID0gZGFkZHIsCi0JCQkuc2FkZHIgPSBzYWRkciwKLQkJCS5mbG93aTRfdG9zID0gdG9zLAotCQkJLmZsb3dpNF9wcm90byA9IChpbmV0LT5oZHJpbmNsID8KLQkJCQkJIElQUFJPVE9fUkFXIDoKLQkJCQkJIHNrLT5za19wcm90b2NvbCksCi0JCQkuZmxvd2k0X2ZsYWdzID0gRkxPV0lfRkxBR19DQU5fU0xFRVAsCi0JCX07Ci0JCWlmICghaW5ldC0+aGRyaW5jbCkgewotCQkJZXJyID0gcmF3X3Byb2JlX3Byb3RvX29wdCgmZmw0LCBtc2cpOwotCQkJaWYgKGVycikKLQkJCQlnb3RvIGRvbmU7Ci0JCX0KKwlmbG93aTRfaW5pdF9vdXRwdXQoJmZsNCwgaXBjLm9pZiwgc2stPnNrX21hcmssIHRvcywKKwkJCSAgIFJUX1NDT1BFX1VOSVZFUlNFLAorCQkJICAgaW5ldC0+aGRyaW5jbCA/IElQUFJPVE9fUkFXIDogc2stPnNrX3Byb3RvY29sLAorCQkJICAgRkxPV0lfRkxBR19DQU5fU0xFRVAsIGRhZGRyLCBzYWRkciwgMCwgMCk7CiAKLQkJc2VjdXJpdHlfc2tfY2xhc3NpZnlfZmxvdyhzaywgZmxvd2k0X3RvX2Zsb3dpKCZmbDQpKTsKLQkJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhzb2NrX25ldChzayksICZmbDQsIHNrKTsKLQkJaWYgKElTX0VSUihydCkpIHsKLQkJCWVyciA9IFBUUl9FUlIocnQpOwotCQkJcnQgPSBOVUxMOworCWlmICghaW5ldC0+aGRyaW5jbCkgeworCQllcnIgPSByYXdfcHJvYmVfcHJvdG9fb3B0KCZmbDQsIG1zZyk7CisJCWlmIChlcnIpCiAJCQlnb3RvIGRvbmU7Ci0JCX0KKwl9CisKKwlzZWN1cml0eV9za19jbGFzc2lmeV9mbG93KHNrLCBmbG93aTRfdG9fZmxvd2koJmZsNCkpOworCXJ0ID0gaXBfcm91dGVfb3V0cHV0X2Zsb3coc29ja19uZXQoc2spLCAmZmw0LCBzayk7CisJaWYgKElTX0VSUihydCkpIHsKKwkJZXJyID0gUFRSX0VSUihydCk7CisJCXJ0ID0gTlVMTDsKKwkJZ290byBkb25lOwogCX0KIAogCWVyciA9IC1FQUNDRVM7CkBAIC01ODMsMTkgKzU4OCwyMCBAQAogYmFja19mcm9tX2NvbmZpcm06CiAKIAlpZiAoaW5ldC0+aGRyaW5jbCkKLQkJZXJyID0gcmF3X3NlbmRfaGRyaW5jKHNrLCBtc2ctPm1zZ19pb3YsIGxlbiwKLQkJCQkJJnJ0LCBtc2ctPm1zZ19mbGFncyk7CisJCWVyciA9IHJhd19zZW5kX2hkcmluYyhzaywgJmZsNCwgbXNnLT5tc2dfaW92LCBsZW4sCisJCQkJICAgICAgJnJ0LCBtc2ctPm1zZ19mbGFncyk7CiAKIAkgZWxzZSB7CiAJCWlmICghaXBjLmFkZHIpCi0JCQlpcGMuYWRkciA9IHJ0LT5ydF9kc3Q7CisJCQlpcGMuYWRkciA9IGZsNC5kYWRkcjsKIAkJbG9ja19zb2NrKHNrKTsKLQkJZXJyID0gaXBfYXBwZW5kX2RhdGEoc2ssIGlwX2dlbmVyaWNfZ2V0ZnJhZywgbXNnLT5tc2dfaW92LCBsZW4sIDAsCi0JCQkJCSZpcGMsICZydCwgbXNnLT5tc2dfZmxhZ3MpOworCQllcnIgPSBpcF9hcHBlbmRfZGF0YShzaywgJmZsNCwgaXBfZ2VuZXJpY19nZXRmcmFnLAorCQkJCSAgICAgbXNnLT5tc2dfaW92LCBsZW4sIDAsCisJCQkJICAgICAmaXBjLCAmcnQsIG1zZy0+bXNnX2ZsYWdzKTsKIAkJaWYgKGVycikKIAkJCWlwX2ZsdXNoX3BlbmRpbmdfZnJhbWVzKHNrKTsKIAkJZWxzZSBpZiAoIShtc2ctPm1zZ19mbGFncyAmIE1TR19NT1JFKSkgewotCQkJZXJyID0gaXBfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzayk7CisJCQllcnIgPSBpcF9wdXNoX3BlbmRpbmdfZnJhbWVzKHNrLCAmZmw0KTsKIAkJCWlmIChlcnIgPT0gLUVOT0JVRlMgJiYgIWluZXQtPnJlY3ZlcnIpCiAJCQkJZXJyID0gMDsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggYzFhY2Y2OS4uYjI0ZDU4ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYworKysgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0xNTYsNyArMTU2LDcgQEAKIAl1MzIgKnAgPSBOVUxMOwogCiAJaWYgKCFydC0+cGVlcikKLQkJcnRfYmluZF9wZWVyKHJ0LCAxKTsKKwkJcnRfYmluZF9wZWVyKHJ0LCBydC0+cnRfZHN0LCAxKTsKIAogCXBlZXIgPSBydC0+cGVlcjsKIAlpZiAocGVlcikgewpAQCAtNDI0LDcgKzQyNCw3IEBACiAJCQlkc3RfbWV0cmljKCZyLT5kc3QsIFJUQVhfV0lORE9XKSwKIAkJCShpbnQpKChkc3RfbWV0cmljKCZyLT5kc3QsIFJUQVhfUlRUKSA+PiAzKSArCiAJCQkgICAgICBkc3RfbWV0cmljKCZyLT5kc3QsIFJUQVhfUlRUVkFSKSksCi0JCQlyLT5ydF90b3MsCisJCQlyLT5ydF9rZXlfdG9zLAogCQkJci0+ZHN0LmhoID8gYXRvbWljX3JlYWQoJnItPmRzdC5oaC0+aGhfcmVmY250KSA6IC0xLAogCQkJci0+ZHN0LmhoID8gKHItPmRzdC5oaC0+aGhfb3V0cHV0ID09CiAJCQkJICAgICAgIGRldl9xdWV1ZV94bWl0KSA6IDAsCkBAIC03MjQsNyArNzI0LDcgQEAKIAlyZXR1cm4gKCgoX19mb3JjZSB1MzIpcnQxLT5ydF9rZXlfZHN0IF4gKF9fZm9yY2UgdTMyKXJ0Mi0+cnRfa2V5X2RzdCkgfAogCQkoKF9fZm9yY2UgdTMyKXJ0MS0+cnRfa2V5X3NyYyBeIChfX2ZvcmNlIHUzMilydDItPnJ0X2tleV9zcmMpIHwKIAkJKHJ0MS0+cnRfbWFyayBeIHJ0Mi0+cnRfbWFyaykgfAotCQkocnQxLT5ydF90b3MgXiBydDItPnJ0X3RvcykgfAorCQkocnQxLT5ydF9rZXlfdG9zIF4gcnQyLT5ydF9rZXlfdG9zKSB8CiAJCShydDEtPnJ0X29pZiBeIHJ0Mi0+cnRfb2lmKSB8CiAJCShydDEtPnJ0X2lpZiBeIHJ0Mi0+cnRfaWlmKSkgPT0gMDsKIH0KQEAgLTk2OCwxMCArOTY4LDYgQEAKIAkJCWJyZWFrOwogCiAJCWV4cGlyZSA+Pj0gMTsKLSNpZiBSVF9DQUNIRV9ERUJVRyA+PSAyCi0JCXByaW50ayhLRVJOX0RFQlVHICJleHBpcmU+PiAldSAlZCAlZCAlZFxuIiwgZXhwaXJlLAotCQkJCWRzdF9lbnRyaWVzX2dldF9mYXN0KCZpcHY0X2RzdF9vcHMpLCBnb2FsLCBpKTsKLSNlbmRpZgogCiAJCWlmIChkc3RfZW50cmllc19nZXRfZmFzdCgmaXB2NF9kc3Rfb3BzKSA8IGlwX3J0X21heF9zaXplKQogCQkJZ290byBvdXQ7CkBAIC05OTIsMTAgKzk4OCw2IEBACiAJICAgIGRzdF9lbnRyaWVzX2dldF9mYXN0KCZpcHY0X2RzdF9vcHMpIDwgaXB2NF9kc3Rfb3BzLmdjX3RocmVzaCB8fAogCSAgICBkc3RfZW50cmllc19nZXRfc2xvdygmaXB2NF9kc3Rfb3BzKSA8IGlwdjRfZHN0X29wcy5nY190aHJlc2gpCiAJCWV4cGlyZSA9IGlwX3J0X2djX3RpbWVvdXQ7Ci0jaWYgUlRfQ0FDSEVfREVCVUcgPj0gMgotCXByaW50ayhLRVJOX0RFQlVHICJleHBpcmUrKyAldSAlZCAlZCAlZFxuIiwgZXhwaXJlLAotCQkJZHN0X2VudHJpZXNfZ2V0X2Zhc3QoJmlwdjRfZHN0X29wcyksIGdvYWwsIHJvdmVyKTsKLSNlbmRpZgogb3V0OglyZXR1cm4gMDsKIH0KIApAQCAtMTE3OSwxNiArMTE3MSw2IEBACiAKIAlydC0+ZHN0LnJ0X25leHQgPSBydF9oYXNoX3RhYmxlW2hhc2hdLmNoYWluOwogCi0jaWYgUlRfQ0FDSEVfREVCVUcgPj0gMgotCWlmIChydC0+ZHN0LnJ0X25leHQpIHsKLQkJc3RydWN0IHJ0YWJsZSAqdHJ0OwotCQlwcmludGsoS0VSTl9ERUJVRyAicnRfY2FjaGUgQCUwMng6ICVwSTQiLAotCQkgICAgICAgaGFzaCwgJnJ0LT5ydF9kc3QpOwotCQlmb3IgKHRydCA9IHJ0LT5kc3QucnRfbmV4dDsgdHJ0OyB0cnQgPSB0cnQtPmRzdC5ydF9uZXh0KQotCQkJcHJpbnRrKCIgLiAlcEk0IiwgJnRydC0+cnRfZHN0KTsKLQkJcHJpbnRrKCJcbiIpOwotCX0KLSNlbmRpZgogCS8qCiAJICogU2luY2UgbG9va3VwIGlzIGxvY2tmcmVlLCB3ZSBtdXN0IG1ha2Ugc3VyZQogCSAqIHByZXZpb3VzIHdyaXRlcyB0byBydCBhcmUgY29tbWl0dGVkIHRvIG1lbW9yeQpAQCAtMTIxMSwxMSArMTE5MywxMSBAQAogCXJldHVybiBhdG9taWNfcmVhZCgmX19ydF9wZWVyX2dlbmlkKTsKIH0KIAotdm9pZCBydF9iaW5kX3BlZXIoc3RydWN0IHJ0YWJsZSAqcnQsIGludCBjcmVhdGUpCit2b2lkIHJ0X2JpbmRfcGVlcihzdHJ1Y3QgcnRhYmxlICpydCwgX19iZTMyIGRhZGRyLCBpbnQgY3JlYXRlKQogewogCXN0cnVjdCBpbmV0X3BlZXIgKnBlZXI7CiAKLQlwZWVyID0gaW5ldF9nZXRwZWVyX3Y0KHJ0LT5ydF9kc3QsIGNyZWF0ZSk7CisJcGVlciA9IGluZXRfZ2V0cGVlcl92NChkYWRkciwgY3JlYXRlKTsKIAogCWlmIChwZWVyICYmIGNtcHhjaGcoJnJ0LT5wZWVyLCBOVUxMLCBwZWVyKSAhPSBOVUxMKQogCQlpbmV0X3B1dHBlZXIocGVlcik7CkBAIC0xMjQ5LDcgKzEyMzEsNyBAQAogCiAJaWYgKHJ0KSB7CiAJCWlmIChydC0+cGVlciA9PSBOVUxMKQotCQkJcnRfYmluZF9wZWVyKHJ0LCAxKTsKKwkJCXJ0X2JpbmRfcGVlcihydCwgcnQtPnJ0X2RzdCwgMSk7CiAKIAkJLyogSWYgcGVlciBpcyBhdHRhY2hlZCB0byBkZXN0aW5hdGlvbiwgaXQgaXMgbmV2ZXIgZGV0YWNoZWQsCiAJCSAgIHNvIHRoYXQgd2UgbmVlZCBub3QgdG8gZ3JhYiBhIGxvY2sgdG8gZGVyZWZlcmVuY2UgaXQuCkBAIC0xMzQ3LDEwICsxMzI5LDYgQEAKIAkJCXVuc2lnbmVkIGhhc2ggPSBydF9oYXNoKHJ0LT5ydF9rZXlfZHN0LCBydC0+cnRfa2V5X3NyYywKIAkJCQkJCXJ0LT5ydF9vaWYsCiAJCQkJCQlydF9nZW5pZChkZXZfbmV0KGRzdC0+ZGV2KSkpOwotI2lmIFJUX0NBQ0hFX0RFQlVHID49IDEKLQkJCXByaW50ayhLRVJOX0RFQlVHICJpcHY0X25lZ2F0aXZlX2FkdmljZTogcmVkaXJlY3QgdG8gJXBJNC8lMDJ4IGRyb3BwZWRcbiIsCi0JCQkJJnJ0LT5ydF9kc3QsIHJ0LT5ydF90b3MpOwotI2VuZGlmCiAJCQlydF9kZWwoaGFzaCwgcnQpOwogCQkJcmV0ID0gTlVMTDsKIAkJfSBlbHNlIGlmIChydC0+cGVlciAmJgpAQCAtMTM5OSw3ICsxMzc3LDcgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCWlmICghcnQtPnBlZXIpCi0JCXJ0X2JpbmRfcGVlcihydCwgMSk7CisJCXJ0X2JpbmRfcGVlcihydCwgcnQtPnJ0X2RzdCwgMSk7CiAJcGVlciA9IHJ0LT5wZWVyOwogCWlmICghcGVlcikgewogCQlpY21wX3NlbmQoc2tiLCBJQ01QX1JFRElSRUNULCBJQ01QX1JFRElSX0hPU1QsIHJ0LT5ydF9nYXRld2F5KTsKQEAgLTE0MzUsNyArMTQxMyw3IEBACiAJCSAgICBwZWVyLT5yYXRlX3Rva2VucyA9PSBpcF9ydF9yZWRpcmVjdF9udW1iZXIgJiYKIAkJICAgIG5ldF9yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgImhvc3QgJXBJNC9pZiVkIGlnbm9yZXMgcmVkaXJlY3RzIGZvciAlcEk0IHRvICVwSTQuXG4iLAotCQkJCSZydC0+cnRfc3JjLCBydC0+cnRfaWlmLAorCQkJICAgICAgICZpcF9oZHIoc2tiKS0+c2FkZHIsIHJ0LT5ydF9paWYsCiAJCQkJJnJ0LT5ydF9kc3QsICZydC0+cnRfZ2F0ZXdheSk7CiAjZW5kaWYKIAl9CkBAIC0xNDY3LDcgKzE0NDUsNyBAQAogCX0KIAogCWlmICghcnQtPnBlZXIpCi0JCXJ0X2JpbmRfcGVlcihydCwgMSk7CisJCXJ0X2JpbmRfcGVlcihydCwgcnQtPnJ0X2RzdCwgMSk7CiAJcGVlciA9IHJ0LT5wZWVyOwogCiAJc2VuZCA9IHRydWU7CkBAIC0xNTA3LDcgKzE0ODUsNyBAQAogCXJldHVybiA2ODsKIH0KIAotdW5zaWduZWQgc2hvcnQgaXBfcnRfZnJhZ19uZWVkZWQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXBoZHIgKmlwaCwKK3Vuc2lnbmVkIHNob3J0IGlwX3J0X2ZyYWdfbmVlZGVkKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGlwaGRyICppcGgsCiAJCQkJIHVuc2lnbmVkIHNob3J0IG5ld19tdHUsCiAJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0xNTc0LDcgKzE1NTIsNyBAQAogCWRzdF9jb25maXJtKGRzdCk7CiAKIAlpZiAoIXJ0LT5wZWVyKQotCQlydF9iaW5kX3BlZXIocnQsIDEpOworCQlydF9iaW5kX3BlZXIocnQsIHJ0LT5ydF9kc3QsIDEpOwogCXBlZXIgPSBydC0+cGVlcjsKIAlpZiAocGVlcikgewogCQlpZiAobXR1IDwgaXBfcnRfbWluX3BtdHUpCkBAIC0xNjMxLDcgKzE2MDksNyBAQAogCQlzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyOwogCiAJCWlmICghcnQtPnBlZXIpCi0JCQlydF9iaW5kX3BlZXIocnQsIDApOworCQkJcnRfYmluZF9wZWVyKHJ0LCBydC0+cnRfZHN0LCAwKTsKIAogCQlwZWVyID0gcnQtPnBlZXI7CiAJCWlmIChwZWVyICYmIHBlZXItPnBtdHVfZXhwaXJlcykKQEAgLTE2OTksMjIgKzE2NzcsMjYgQEAKICAgIGluIElQIG9wdGlvbnMhCiAgKi8KIAotdm9pZCBpcF9ydF9nZXRfc291cmNlKHU4ICphZGRyLCBzdHJ1Y3QgcnRhYmxlICpydCkKK3ZvaWQgaXBfcnRfZ2V0X3NvdXJjZSh1OCAqYWRkciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJ0YWJsZSAqcnQpCiB7CiAJX19iZTMyIHNyYzsKLQlzdHJ1Y3QgZmliX3Jlc3VsdCByZXM7CiAKIAlpZiAocnRfaXNfb3V0cHV0X3JvdXRlKHJ0KSkKLQkJc3JjID0gcnQtPnJ0X3NyYzsKKwkJc3JjID0gaXBfaGRyKHNrYiktPnNhZGRyOwogCWVsc2UgewotCQlzdHJ1Y3QgZmxvd2k0IGZsNCA9IHsKLQkJCS5kYWRkciA9IHJ0LT5ydF9rZXlfZHN0LAotCQkJLnNhZGRyID0gcnQtPnJ0X2tleV9zcmMsCi0JCQkuZmxvd2k0X3RvcyA9IHJ0LT5ydF90b3MsCi0JCQkuZmxvd2k0X29pZiA9IHJ0LT5ydF9vaWYsCi0JCQkuZmxvd2k0X2lpZiA9IHJ0LT5ydF9paWYsCi0JCQkuZmxvd2k0X21hcmsgPSBydC0+cnRfbWFyaywKLQkJfTsKKwkJc3RydWN0IGZpYl9yZXN1bHQgcmVzOworCQlzdHJ1Y3QgZmxvd2k0IGZsNDsKKwkJc3RydWN0IGlwaGRyICppcGg7CisKKwkJaXBoID0gaXBfaGRyKHNrYik7CisKKwkJbWVtc2V0KCZmbDQsIDAsIHNpemVvZihmbDQpKTsKKwkJZmw0LmRhZGRyID0gaXBoLT5kYWRkcjsKKwkJZmw0LnNhZGRyID0gaXBoLT5zYWRkcjsKKwkJZmw0LmZsb3dpNF90b3MgPSBpcGgtPnRvczsKKwkJZmw0LmZsb3dpNF9vaWYgPSBydC0+ZHN0LmRldi0+aWZpbmRleDsKKwkJZmw0LmZsb3dpNF9paWYgPSBza2ItPmRldi0+aWZpbmRleDsKKwkJZmw0LmZsb3dpNF9tYXJrID0gc2tiLT5tYXJrOwogCiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJaWYgKGZpYl9sb29rdXAoZGV2X25ldChydC0+ZHN0LmRldiksICZmbDQsICZyZXMpID09IDApCkBAIC0xNzY3LDcgKzE3NDksNyBAQAogCXJldHVybiBtdHU7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0X2luaXRfbWV0cmljcyhzdHJ1Y3QgcnRhYmxlICpydCwgY29uc3Qgc3RydWN0IGZsb3dpNCAqb2xkZmxwNCwKK3N0YXRpYyB2b2lkIHJ0X2luaXRfbWV0cmljcyhzdHJ1Y3QgcnRhYmxlICpydCwgY29uc3Qgc3RydWN0IGZsb3dpNCAqZmw0LAogCQkJICAgIHN0cnVjdCBmaWJfaW5mbyAqZmkpCiB7CiAJc3RydWN0IGluZXRfcGVlciAqcGVlcjsKQEAgLTE3NzYsNyArMTc1OCw3IEBACiAJLyogSWYgYSBwZWVyIGVudHJ5IGV4aXN0cyBmb3IgdGhpcyBkZXN0aW5hdGlvbiwgd2UgbXVzdCBob29rCiAJICogaXQgdXAgaW4gb3JkZXIgdG8gZ2V0IGF0IGNhY2hlZCBtZXRyaWNzLgogCSAqLwotCWlmIChvbGRmbHA0ICYmIChvbGRmbHA0LT5mbG93aTRfZmxhZ3MgJiBGTE9XSV9GTEFHX1BSRUNPV19NRVRSSUNTKSkKKwlpZiAoZmw0ICYmIChmbDQtPmZsb3dpNF9mbGFncyAmIEZMT1dJX0ZMQUdfUFJFQ09XX01FVFJJQ1MpKQogCQljcmVhdGUgPSAxOwogCiAJcnQtPnBlZXIgPSBwZWVyID0gaW5ldF9nZXRwZWVyX3Y0KHJ0LT5ydF9kc3QsIGNyZWF0ZSk7CkBAIC0xODAzLDcgKzE3ODUsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgcnRfc2V0X25leHRob3Aoc3RydWN0IHJ0YWJsZSAqcnQsIGNvbnN0IHN0cnVjdCBmbG93aTQgKm9sZGZscDQsCitzdGF0aWMgdm9pZCBydF9zZXRfbmV4dGhvcChzdHJ1Y3QgcnRhYmxlICpydCwgY29uc3Qgc3RydWN0IGZsb3dpNCAqZmw0LAogCQkJICAgY29uc3Qgc3RydWN0IGZpYl9yZXN1bHQgKnJlcywKIAkJCSAgIHN0cnVjdCBmaWJfaW5mbyAqZmksIHUxNiB0eXBlLCB1MzIgaXRhZykKIHsKQEAgLTE4MTMsNyArMTc5NSw3IEBACiAJCWlmIChGSUJfUkVTX0dXKCpyZXMpICYmCiAJCSAgICBGSUJfUkVTX05IKCpyZXMpLm5oX3Njb3BlID09IFJUX1NDT1BFX0xJTkspCiAJCQlydC0+cnRfZ2F0ZXdheSA9IEZJQl9SRVNfR1coKnJlcyk7Ci0JCXJ0X2luaXRfbWV0cmljcyhydCwgb2xkZmxwNCwgZmkpOworCQlydF9pbml0X21ldHJpY3MocnQsIGZsNCwgZmkpOwogI2lmZGVmIENPTkZJR19JUF9ST1VURV9DTEFTU0lECiAJCWRzdC0+dGNsYXNzaWQgPSBGSUJfUkVTX05IKCpyZXMpLm5oX3RjbGFzc2lkOwogI2VuZGlmCkBAIC0xODMwLDIwICsxODEyLDE1IEBACiAjZW5kaWYKIAlzZXRfY2xhc3NfdGFnKHJ0LCBpdGFnKTsKICNlbmRpZgotCXJ0LT5ydF90eXBlID0gdHlwZTsKIH0KIAotc3RhdGljIHN0cnVjdCBydGFibGUgKnJ0X2RzdF9hbGxvYyhib29sIG5vcG9saWN5LCBib29sIG5veGZybSkKK3N0YXRpYyBzdHJ1Y3QgcnRhYmxlICpydF9kc3RfYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICBib29sIG5vcG9saWN5LCBib29sIG5veGZybSkKIHsKLQlzdHJ1Y3QgcnRhYmxlICpydCA9IGRzdF9hbGxvYygmaXB2NF9kc3Rfb3BzLCAxKTsKLQlpZiAocnQpIHsKLQkJcnQtPmRzdC5vYnNvbGV0ZSA9IC0xOwotCi0JCXJ0LT5kc3QuZmxhZ3MgPSBEU1RfSE9TVCB8Ci0JCQkobm9wb2xpY3kgPyBEU1RfTk9QT0xJQ1kgOiAwKSB8Ci0JCQkobm94ZnJtID8gRFNUX05PWEZSTSA6IDApOwotCX0KLQlyZXR1cm4gcnQ7CisJcmV0dXJuIGRzdF9hbGxvYygmaXB2NF9kc3Rfb3BzLCBkZXYsIDEsIC0xLAorCQkJIERTVF9IT1NUIHwKKwkJCSAobm9wb2xpY3kgPyBEU1RfTk9QT0xJQ1kgOiAwKSB8CisJCQkgKG5veGZybSA/IERTVF9OT1hGUk0gOiAwKSk7CiB9CiAKIC8qIGNhbGxlZCBpbiByY3VfcmVhZF9sb2NrKCkgc2VjdGlvbiAqLwpAQCAtMTg3MSwzNiArMTg0OCwzOCBAQAogCQkJZ290byBlX2ludmFsOwogCQlzcGVjX2RzdCA9IGluZXRfc2VsZWN0X2FkZHIoZGV2LCAwLCBSVF9TQ09QRV9MSU5LKTsKIAl9IGVsc2UgewotCQllcnIgPSBmaWJfdmFsaWRhdGVfc291cmNlKHNhZGRyLCAwLCB0b3MsIDAsIGRldiwgJnNwZWNfZHN0LAotCQkJCQkgICZpdGFnLCAwKTsKKwkJZXJyID0gZmliX3ZhbGlkYXRlX3NvdXJjZShza2IsIHNhZGRyLCAwLCB0b3MsIDAsIGRldiwgJnNwZWNfZHN0LAorCQkJCQkgICZpdGFnKTsKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIGVfZXJyOwogCX0KLQlydGggPSBydF9kc3RfYWxsb2MoSU5fREVWX0NPTkZfR0VUKGluX2RldiwgTk9QT0xJQ1kpLCBmYWxzZSk7CisJcnRoID0gcnRfZHN0X2FsbG9jKGluaXRfbmV0Lmxvb3BiYWNrX2RldiwKKwkJCSAgIElOX0RFVl9DT05GX0dFVChpbl9kZXYsIE5PUE9MSUNZKSwgZmFsc2UpOwogCWlmICghcnRoKQogCQlnb3RvIGVfbm9idWZzOwogCi0JcnRoLT5kc3Qub3V0cHV0ID0gaXBfcnRfYnVnOwotCi0JcnRoLT5ydF9rZXlfZHN0CT0gZGFkZHI7Ci0JcnRoLT5ydF9kc3QJPSBkYWRkcjsKLQlydGgtPnJ0X3Rvcwk9IHRvczsKLQlydGgtPnJ0X21hcmsgICAgPSBza2ItPm1hcms7Ci0JcnRoLT5ydF9rZXlfc3JjCT0gc2FkZHI7Ci0JcnRoLT5ydF9zcmMJPSBzYWRkcjsKICNpZmRlZiBDT05GSUdfSVBfUk9VVEVfQ0xBU1NJRAogCXJ0aC0+ZHN0LnRjbGFzc2lkID0gaXRhZzsKICNlbmRpZgotCXJ0aC0+cnRfcm91dGVfaWlmID0gZGV2LT5pZmluZGV4OwotCXJ0aC0+cnRfaWlmCT0gZGV2LT5pZmluZGV4OwotCXJ0aC0+ZHN0LmRldgk9IGluaXRfbmV0Lmxvb3BiYWNrX2RldjsKLQlkZXZfaG9sZChydGgtPmRzdC5kZXYpOwotCXJ0aC0+cnRfb2lmCT0gMDsKLQlydGgtPnJ0X2dhdGV3YXkJPSBkYWRkcjsKLQlydGgtPnJ0X3NwZWNfZHN0PSBzcGVjX2RzdDsKKwlydGgtPmRzdC5vdXRwdXQgPSBpcF9ydF9idWc7CisKKwlydGgtPnJ0X2tleV9kc3QJPSBkYWRkcjsKKwlydGgtPnJ0X2tleV9zcmMJPSBzYWRkcjsKIAlydGgtPnJ0X2dlbmlkCT0gcnRfZ2VuaWQoZGV2X25ldChkZXYpKTsKIAlydGgtPnJ0X2ZsYWdzCT0gUlRDRl9NVUxUSUNBU1Q7CiAJcnRoLT5ydF90eXBlCT0gUlROX01VTFRJQ0FTVDsKKwlydGgtPnJ0X2tleV90b3MJPSB0b3M7CisJcnRoLT5ydF9kc3QJPSBkYWRkcjsKKwlydGgtPnJ0X3NyYwk9IHNhZGRyOworCXJ0aC0+cnRfcm91dGVfaWlmID0gZGV2LT5pZmluZGV4OworCXJ0aC0+cnRfaWlmCT0gZGV2LT5pZmluZGV4OworCXJ0aC0+cnRfb2lmCT0gMDsKKwlydGgtPnJ0X21hcmsgICAgPSBza2ItPm1hcms7CisJcnRoLT5ydF9nYXRld2F5CT0gZGFkZHI7CisJcnRoLT5ydF9zcGVjX2RzdD0gc3BlY19kc3Q7CisJcnRoLT5ydF9wZWVyX2dlbmlkID0gMDsKKwlydGgtPnBlZXIgPSBOVUxMOworCXJ0aC0+ZmkgPSBOVUxMOwogCWlmIChvdXIpIHsKIAkJcnRoLT5kc3QuaW5wdXQ9IGlwX2xvY2FsX2RlbGl2ZXI7CiAJCXJ0aC0+cnRfZmxhZ3MgfD0gUlRDRl9MT0NBTDsKQEAgLTE5ODEsOCArMTk2MCw4IEBACiAJfQogCiAKLQllcnIgPSBmaWJfdmFsaWRhdGVfc291cmNlKHNhZGRyLCBkYWRkciwgdG9zLCBGSUJfUkVTX09JRigqcmVzKSwKLQkJCQkgIGluX2Rldi0+ZGV2LCAmc3BlY19kc3QsICZpdGFnLCBza2ItPm1hcmspOworCWVyciA9IGZpYl92YWxpZGF0ZV9zb3VyY2Uoc2tiLCBzYWRkciwgZGFkZHIsIHRvcywgRklCX1JFU19PSUYoKnJlcyksCisJCQkJICBpbl9kZXYtPmRldiwgJnNwZWNfZHN0LCAmaXRhZyk7CiAJaWYgKGVyciA8IDApIHsKIAkJaXBfaGFuZGxlX21hcnRpYW5fc291cmNlKGluX2Rldi0+ZGV2LCBpbl9kZXYsIHNrYiwgZGFkZHIsCiAJCQkJCSBzYWRkcik7CkBAIC0yMDEzLDcgKzE5OTIsOCBAQAogCQl9CiAJfQogCi0JcnRoID0gcnRfZHN0X2FsbG9jKElOX0RFVl9DT05GX0dFVChpbl9kZXYsIE5PUE9MSUNZKSwKKwlydGggPSBydF9kc3RfYWxsb2Mob3V0X2Rldi0+ZGV2LAorCQkJICAgSU5fREVWX0NPTkZfR0VUKGluX2RldiwgTk9QT0xJQ1kpLAogCQkJICAgSU5fREVWX0NPTkZfR0VUKG91dF9kZXYsIE5PWEZSTSkpOwogCWlmICghcnRoKSB7CiAJCWVyciA9IC1FTk9CVUZTOwpAQCAtMjAyMSwyNyArMjAwMSwyOCBAQAogCX0KIAogCXJ0aC0+cnRfa2V5X2RzdAk9IGRhZGRyOwotCXJ0aC0+cnRfZHN0CT0gZGFkZHI7Ci0JcnRoLT5ydF90b3MJPSB0b3M7Ci0JcnRoLT5ydF9tYXJrICAgID0gc2tiLT5tYXJrOwogCXJ0aC0+cnRfa2V5X3NyYwk9IHNhZGRyOworCXJ0aC0+cnRfZ2VuaWQgPSBydF9nZW5pZChkZXZfbmV0KHJ0aC0+ZHN0LmRldikpOworCXJ0aC0+cnRfZmxhZ3MgPSBmbGFnczsKKwlydGgtPnJ0X3R5cGUgPSByZXMtPnR5cGU7CisJcnRoLT5ydF9rZXlfdG9zCT0gdG9zOworCXJ0aC0+cnRfZHN0CT0gZGFkZHI7CiAJcnRoLT5ydF9zcmMJPSBzYWRkcjsKLQlydGgtPnJ0X2dhdGV3YXkJPSBkYWRkcjsKIAlydGgtPnJ0X3JvdXRlX2lpZiA9IGluX2Rldi0+ZGV2LT5pZmluZGV4OwogCXJ0aC0+cnRfaWlmIAk9IGluX2Rldi0+ZGV2LT5pZmluZGV4OwotCXJ0aC0+ZHN0LmRldgk9IChvdXRfZGV2KS0+ZGV2OwotCWRldl9ob2xkKHJ0aC0+ZHN0LmRldik7CiAJcnRoLT5ydF9vaWYgCT0gMDsKKwlydGgtPnJ0X21hcmsgICAgPSBza2ItPm1hcms7CisJcnRoLT5ydF9nYXRld2F5CT0gZGFkZHI7CiAJcnRoLT5ydF9zcGVjX2RzdD0gc3BlY19kc3Q7CisJcnRoLT5ydF9wZWVyX2dlbmlkID0gMDsKKwlydGgtPnBlZXIgPSBOVUxMOworCXJ0aC0+ZmkgPSBOVUxMOwogCiAJcnRoLT5kc3QuaW5wdXQgPSBpcF9mb3J3YXJkOwogCXJ0aC0+ZHN0Lm91dHB1dCA9IGlwX291dHB1dDsKLQlydGgtPnJ0X2dlbmlkID0gcnRfZ2VuaWQoZGV2X25ldChydGgtPmRzdC5kZXYpKTsKIAogCXJ0X3NldF9uZXh0aG9wKHJ0aCwgTlVMTCwgcmVzLCByZXMtPmZpLCByZXMtPnR5cGUsIGl0YWcpOwogCi0JcnRoLT5ydF9mbGFncyA9IGZsYWdzOwotCiAJKnJlc3VsdCA9IHJ0aDsKIAllcnIgPSAwOwogIGNsZWFudXA6CkBAIC0yMTUwLDkgKzIxMzEsOSBAQAogCQlnb3RvIGJyZF9pbnB1dDsKIAogCWlmIChyZXMudHlwZSA9PSBSVE5fTE9DQUwpIHsKLQkJZXJyID0gZmliX3ZhbGlkYXRlX3NvdXJjZShzYWRkciwgZGFkZHIsIHRvcywKKwkJZXJyID0gZmliX3ZhbGlkYXRlX3NvdXJjZShza2IsIHNhZGRyLCBkYWRkciwgdG9zLAogCQkJCQkgIG5ldC0+bG9vcGJhY2tfZGV2LT5pZmluZGV4LAotCQkJCQkgIGRldiwgJnNwZWNfZHN0LCAmaXRhZywgc2tiLT5tYXJrKTsKKwkJCQkJICBkZXYsICZzcGVjX2RzdCwgJml0YWcpOwogCQlpZiAoZXJyIDwgMCkKIAkJCWdvdG8gbWFydGlhbl9zb3VyY2Vfa2VlcF9lcnI7CiAJCWlmIChlcnIpCkBAIC0yMTc2LDggKzIxNTcsOCBAQAogCWlmIChpcHY0X2lzX3plcm9uZXQoc2FkZHIpKQogCQlzcGVjX2RzdCA9IGluZXRfc2VsZWN0X2FkZHIoZGV2LCAwLCBSVF9TQ09QRV9MSU5LKTsKIAllbHNlIHsKLQkJZXJyID0gZmliX3ZhbGlkYXRlX3NvdXJjZShzYWRkciwgMCwgdG9zLCAwLCBkZXYsICZzcGVjX2RzdCwKLQkJCQkJICAmaXRhZywgc2tiLT5tYXJrKTsKKwkJZXJyID0gZmliX3ZhbGlkYXRlX3NvdXJjZShza2IsIHNhZGRyLCAwLCB0b3MsIDAsIGRldiwgJnNwZWNfZHN0LAorCQkJCQkgICZpdGFnKTsKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIG1hcnRpYW5fc291cmNlX2tlZXBfZXJyOwogCQlpZiAoZXJyKQpAQCAtMjE4OCwzNiArMjE2OSw0MiBAQAogCVJUX0NBQ0hFX1NUQVRfSU5DKGluX2JyZCk7CiAKIGxvY2FsX2lucHV0OgotCXJ0aCA9IHJ0X2RzdF9hbGxvYyhJTl9ERVZfQ09ORl9HRVQoaW5fZGV2LCBOT1BPTElDWSksIGZhbHNlKTsKKwlydGggPSBydF9kc3RfYWxsb2MobmV0LT5sb29wYmFja19kZXYsCisJCQkgICBJTl9ERVZfQ09ORl9HRVQoaW5fZGV2LCBOT1BPTElDWSksIGZhbHNlKTsKIAlpZiAoIXJ0aCkKIAkJZ290byBlX25vYnVmczsKIAorCXJ0aC0+ZHN0LmlucHV0PSBpcF9sb2NhbF9kZWxpdmVyOwogCXJ0aC0+ZHN0Lm91dHB1dD0gaXBfcnRfYnVnOwotCXJ0aC0+cnRfZ2VuaWQgPSBydF9nZW5pZChuZXQpOworI2lmZGVmIENPTkZJR19JUF9ST1VURV9DTEFTU0lECisJcnRoLT5kc3QudGNsYXNzaWQgPSBpdGFnOworI2VuZGlmCiAKIAlydGgtPnJ0X2tleV9kc3QJPSBkYWRkcjsKLQlydGgtPnJ0X2RzdAk9IGRhZGRyOwotCXJ0aC0+cnRfdG9zCT0gdG9zOwotCXJ0aC0+cnRfbWFyayAgICA9IHNrYi0+bWFyazsKIAlydGgtPnJ0X2tleV9zcmMJPSBzYWRkcjsKKwlydGgtPnJ0X2dlbmlkID0gcnRfZ2VuaWQobmV0KTsKKwlydGgtPnJ0X2ZsYWdzIAk9IGZsYWdzfFJUQ0ZfTE9DQUw7CisJcnRoLT5ydF90eXBlCT0gcmVzLnR5cGU7CisJcnRoLT5ydF9rZXlfdG9zCT0gdG9zOworCXJ0aC0+cnRfZHN0CT0gZGFkZHI7CiAJcnRoLT5ydF9zcmMJPSBzYWRkcjsKICNpZmRlZiBDT05GSUdfSVBfUk9VVEVfQ0xBU1NJRAogCXJ0aC0+ZHN0LnRjbGFzc2lkID0gaXRhZzsKICNlbmRpZgogCXJ0aC0+cnRfcm91dGVfaWlmID0gZGV2LT5pZmluZGV4OwogCXJ0aC0+cnRfaWlmCT0gZGV2LT5pZmluZGV4OwotCXJ0aC0+ZHN0LmRldgk9IG5ldC0+bG9vcGJhY2tfZGV2OwotCWRldl9ob2xkKHJ0aC0+ZHN0LmRldik7CisJcnRoLT5ydF9vaWYJPSAwOworCXJ0aC0+cnRfbWFyayAgICA9IHNrYi0+bWFyazsKIAlydGgtPnJ0X2dhdGV3YXkJPSBkYWRkcjsKIAlydGgtPnJ0X3NwZWNfZHN0PSBzcGVjX2RzdDsKLQlydGgtPmRzdC5pbnB1dD0gaXBfbG9jYWxfZGVsaXZlcjsKLQlydGgtPnJ0X2ZsYWdzIAk9IGZsYWdzfFJUQ0ZfTE9DQUw7CisJcnRoLT5ydF9wZWVyX2dlbmlkID0gMDsKKwlydGgtPnBlZXIgPSBOVUxMOworCXJ0aC0+ZmkgPSBOVUxMOwogCWlmIChyZXMudHlwZSA9PSBSVE5fVU5SRUFDSEFCTEUpIHsKIAkJcnRoLT5kc3QuaW5wdXQ9IGlwX2Vycm9yOwogCQlydGgtPmRzdC5lcnJvcj0gLWVycjsKIAkJcnRoLT5ydF9mbGFncyAJJj0gflJUQ0ZfTE9DQUw7CiAJfQotCXJ0aC0+cnRfdHlwZQk9IHJlcy50eXBlOwogCWhhc2ggPSBydF9oYXNoKGRhZGRyLCBzYWRkciwgZmw0LmZsb3dpNF9paWYsIHJ0X2dlbmlkKG5ldCkpOwogCXJ0aCA9IHJ0X2ludGVybl9oYXNoKGhhc2gsIHJ0aCwgc2tiLCBmbDQuZmxvd2k0X2lpZik7CiAJZXJyID0gMDsKQEAgLTIyODgsNyArMjI3NSw3IEBACiAJCSAgICAgKChfX2ZvcmNlIHUzMilydGgtPnJ0X2tleV9zcmMgXiAoX19mb3JjZSB1MzIpc2FkZHIpIHwKIAkJICAgICAocnRoLT5ydF9paWYgXiBpaWYpIHwKIAkJICAgICBydGgtPnJ0X29pZiB8Ci0JCSAgICAgKHJ0aC0+cnRfdG9zIF4gdG9zKSkgPT0gMCAmJgorCQkgICAgIChydGgtPnJ0X2tleV90b3MgXiB0b3MpKSA9PSAwICYmCiAJCSAgICBydGgtPnJ0X21hcmsgPT0gc2tiLT5tYXJrICYmCiAJCSAgICBuZXRfZXEoZGV2X25ldChydGgtPmRzdC5kZXYpLCBuZXQpICYmCiAJCSAgICAhcnRfaXNfZXhwaXJlZChydGgpKSB7CkBAIC0yMzQ5LDEyICsyMzM2LDEyIEBACiAvKiBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgKi8KIHN0YXRpYyBzdHJ1Y3QgcnRhYmxlICpfX21rcm91dGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsCiAJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBmbG93aTQgKmZsNCwKLQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGZsb3dpNCAqb2xkZmxwNCwKLQkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldl9vdXQsCisJCQkJICAgICAgIF9fYmUzMiBvcmlnX2RhZGRyLCBfX2JlMzIgb3JpZ19zYWRkciwKKwkJCQkgICAgICAgaW50IG9yaWdfb2lmLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X291dCwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXN0cnVjdCBmaWJfaW5mbyAqZmkgPSByZXMtPmZpOwotCXUzMiB0b3MgPSBSVF9GTF9UT1Mob2xkZmxwNCk7CisJdTMyIHRvcyA9IFJUX0ZMX1RPUyhmbDQpOwogCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKIAl1MTYgdHlwZSA9IHJlcy0+dHlwZTsKIAlzdHJ1Y3QgcnRhYmxlICpydGg7CkBAIC0yMzgxLDggKzIzNjgsOCBAQAogCQlmaSA9IE5VTEw7CiAJfSBlbHNlIGlmICh0eXBlID09IFJUTl9NVUxUSUNBU1QpIHsKIAkJZmxhZ3MgfD0gUlRDRl9NVUxUSUNBU1QgfCBSVENGX0xPQ0FMOwotCQlpZiAoIWlwX2NoZWNrX21jX3JjdShpbl9kZXYsIG9sZGZscDQtPmRhZGRyLCBvbGRmbHA0LT5zYWRkciwKLQkJCQkgICAgIG9sZGZscDQtPmZsb3dpNF9wcm90bykpCisJCWlmICghaXBfY2hlY2tfbWNfcmN1KGluX2RldiwgZmw0LT5kYWRkciwgZmw0LT5zYWRkciwKKwkJCQkgICAgIGZsNC0+Zmxvd2k0X3Byb3RvKSkKIAkJCWZsYWdzICY9IH5SVENGX0xPQ0FMOwogCQkvKiBJZiBtdWx0aWNhc3Qgcm91dGUgZG8gbm90IGV4aXN0IHVzZQogCQkgKiBkZWZhdWx0IG9uZSwgYnV0IGRvIG5vdCBnYXRld2F5IGluIHRoaXMgY2FzZS4KQEAgLTIzOTIsMjkgKzIzNzksMzEgQEAKIAkJCWZpID0gTlVMTDsKIAl9CiAKLQlydGggPSBydF9kc3RfYWxsb2MoSU5fREVWX0NPTkZfR0VUKGluX2RldiwgTk9QT0xJQ1kpLAorCXJ0aCA9IHJ0X2RzdF9hbGxvYyhkZXZfb3V0LAorCQkJICAgSU5fREVWX0NPTkZfR0VUKGluX2RldiwgTk9QT0xJQ1kpLAogCQkJICAgSU5fREVWX0NPTkZfR0VUKGluX2RldiwgTk9YRlJNKSk7CiAJaWYgKCFydGgpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9CVUZTKTsKIAotCXJ0aC0+cnRfa2V5X2RzdAk9IG9sZGZscDQtPmRhZGRyOwotCXJ0aC0+cnRfdG9zCT0gdG9zOwotCXJ0aC0+cnRfa2V5X3NyYwk9IG9sZGZscDQtPnNhZGRyOwotCXJ0aC0+cnRfb2lmCT0gb2xkZmxwNC0+Zmxvd2k0X29pZjsKLQlydGgtPnJ0X21hcmsgICAgPSBvbGRmbHA0LT5mbG93aTRfbWFyazsKKwlydGgtPmRzdC5vdXRwdXQgPSBpcF9vdXRwdXQ7CisKKwlydGgtPnJ0X2tleV9kc3QJPSBvcmlnX2RhZGRyOworCXJ0aC0+cnRfa2V5X3NyYwk9IG9yaWdfc2FkZHI7CisJcnRoLT5ydF9nZW5pZCA9IHJ0X2dlbmlkKGRldl9uZXQoZGV2X291dCkpOworCXJ0aC0+cnRfZmxhZ3MJPSBmbGFnczsKKwlydGgtPnJ0X3R5cGUJPSB0eXBlOworCXJ0aC0+cnRfa2V5X3Rvcwk9IHRvczsKIAlydGgtPnJ0X2RzdAk9IGZsNC0+ZGFkZHI7CiAJcnRoLT5ydF9zcmMJPSBmbDQtPnNhZGRyOwogCXJ0aC0+cnRfcm91dGVfaWlmID0gMDsKLQlydGgtPnJ0X2lpZgk9IG9sZGZscDQtPmZsb3dpNF9vaWYgPyA6IGRldl9vdXQtPmlmaW5kZXg7Ci0JLyogZ2V0IHJlZmVyZW5jZXMgdG8gdGhlIGRldmljZXMgdGhhdCBhcmUgdG8gYmUgaG9sZCBieSB0aGUgcm91dGluZwotCSAgIGNhY2hlIGVudHJ5ICovCi0JcnRoLT5kc3QuZGV2CT0gZGV2X291dDsKLQlkZXZfaG9sZChkZXZfb3V0KTsKKwlydGgtPnJ0X2lpZgk9IG9yaWdfb2lmID8gOiBkZXZfb3V0LT5pZmluZGV4OworCXJ0aC0+cnRfb2lmCT0gb3JpZ19vaWY7CisJcnRoLT5ydF9tYXJrICAgID0gZmw0LT5mbG93aTRfbWFyazsKIAlydGgtPnJ0X2dhdGV3YXkgPSBmbDQtPmRhZGRyOwogCXJ0aC0+cnRfc3BlY19kc3Q9IGZsNC0+c2FkZHI7Ci0KLQlydGgtPmRzdC5vdXRwdXQ9aXBfb3V0cHV0OwotCXJ0aC0+cnRfZ2VuaWQgPSBydF9nZW5pZChkZXZfbmV0KGRldl9vdXQpKTsKKwlydGgtPnJ0X3BlZXJfZ2VuaWQgPSAwOworCXJ0aC0+cGVlciA9IE5VTEw7CisJcnRoLT5maSA9IE5VTEw7CiAKIAlSVF9DQUNIRV9TVEFUX0lOQyhvdXRfc2xvd190b3QpOwogCkBAIC0yNDMyLDcgKzI0MjEsNyBAQAogI2lmZGVmIENPTkZJR19JUF9NUk9VVEUKIAkJaWYgKHR5cGUgPT0gUlROX01VTFRJQ0FTVCkgewogCQkJaWYgKElOX0RFVl9NRk9SV0FSRChpbl9kZXYpICYmCi0JCQkgICAgIWlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KG9sZGZscDQtPmRhZGRyKSkgeworCQkJICAgICFpcHY0X2lzX2xvY2FsX211bHRpY2FzdChmbDQtPmRhZGRyKSkgewogCQkJCXJ0aC0+ZHN0LmlucHV0ID0gaXBfbXJfaW5wdXQ7CiAJCQkJcnRoLT5kc3Qub3V0cHV0ID0gaXBfbWNfb3V0cHV0OwogCQkJfQpAQCAtMjQ0MCw5ICsyNDI5LDggQEAKICNlbmRpZgogCX0KIAotCXJ0X3NldF9uZXh0aG9wKHJ0aCwgb2xkZmxwNCwgcmVzLCBmaSwgdHlwZSwgMCk7CisJcnRfc2V0X25leHRob3AocnRoLCBmbDQsIHJlcywgZmksIHR5cGUsIDApOwogCi0JcnRoLT5ydF9mbGFncyA9IGZsYWdzOwogCXJldHVybiBydGg7CiB9CiAKQEAgLTI0NTEsMzYgKzI0MzksMzcgQEAKICAqIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKTsKICAqLwogCi1zdGF0aWMgc3RydWN0IHJ0YWJsZSAqaXBfcm91dGVfb3V0cHV0X3Nsb3coc3RydWN0IG5ldCAqbmV0LAotCQkJCQkgICBjb25zdCBzdHJ1Y3QgZmxvd2k0ICpvbGRmbHA0KQorc3RhdGljIHN0cnVjdCBydGFibGUgKmlwX3JvdXRlX291dHB1dF9zbG93KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNCAqZmw0KQogewotCXUzMiB0b3MJPSBSVF9GTF9UT1Mob2xkZmxwNCk7Ci0Jc3RydWN0IGZsb3dpNCBmbDQ7Ci0Jc3RydWN0IGZpYl9yZXN1bHQgcmVzOwotCXVuc2lnbmVkIGludCBmbGFncyA9IDA7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldl9vdXQgPSBOVUxMOworCXUzMiB0b3MJPSBSVF9GTF9UT1MoZmw0KTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOworCXN0cnVjdCBmaWJfcmVzdWx0IHJlczsKIAlzdHJ1Y3QgcnRhYmxlICpydGg7CisJX19iZTMyIG9yaWdfZGFkZHI7CisJX19iZTMyIG9yaWdfc2FkZHI7CisJaW50IG9yaWdfb2lmOwogCiAJcmVzLmZpCQk9IE5VTEw7CiAjaWZkZWYgQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUwogCXJlcy5yCQk9IE5VTEw7CiAjZW5kaWYKIAotCWZsNC5mbG93aTRfb2lmID0gb2xkZmxwNC0+Zmxvd2k0X29pZjsKLQlmbDQuZmxvd2k0X2lpZiA9IG5ldC0+bG9vcGJhY2tfZGV2LT5pZmluZGV4OwotCWZsNC5mbG93aTRfbWFyayA9IG9sZGZscDQtPmZsb3dpNF9tYXJrOwotCWZsNC5kYWRkciA9IG9sZGZscDQtPmRhZGRyOwotCWZsNC5zYWRkciA9IG9sZGZscDQtPnNhZGRyOwotCWZsNC5mbG93aTRfdG9zID0gdG9zICYgSVBUT1NfUlRfTUFTSzsKLQlmbDQuZmxvd2k0X3Njb3BlID0gKCh0b3MgJiBSVE9fT05MSU5LKSA/Ci0JCQlSVF9TQ09QRV9MSU5LIDogUlRfU0NPUEVfVU5JVkVSU0UpOworCW9yaWdfZGFkZHIgPSBmbDQtPmRhZGRyOworCW9yaWdfc2FkZHIgPSBmbDQtPnNhZGRyOworCW9yaWdfb2lmID0gZmw0LT5mbG93aTRfb2lmOworCisJZmw0LT5mbG93aTRfaWlmID0gbmV0LT5sb29wYmFja19kZXYtPmlmaW5kZXg7CisJZmw0LT5mbG93aTRfdG9zID0gdG9zICYgSVBUT1NfUlRfTUFTSzsKKwlmbDQtPmZsb3dpNF9zY29wZSA9ICgodG9zICYgUlRPX09OTElOSykgPworCQkJIFJUX1NDT1BFX0xJTksgOiBSVF9TQ09QRV9VTklWRVJTRSk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JaWYgKG9sZGZscDQtPnNhZGRyKSB7CisJaWYgKGZsNC0+c2FkZHIpIHsKIAkJcnRoID0gRVJSX1BUUigtRUlOVkFMKTsKLQkJaWYgKGlwdjRfaXNfbXVsdGljYXN0KG9sZGZscDQtPnNhZGRyKSB8fAotCQkgICAgaXB2NF9pc19sYmNhc3Qob2xkZmxwNC0+c2FkZHIpIHx8Ci0JCSAgICBpcHY0X2lzX3plcm9uZXQob2xkZmxwNC0+c2FkZHIpKQorCQlpZiAoaXB2NF9pc19tdWx0aWNhc3QoZmw0LT5zYWRkcikgfHwKKwkJICAgIGlwdjRfaXNfbGJjYXN0KGZsNC0+c2FkZHIpIHx8CisJCSAgICBpcHY0X2lzX3plcm9uZXQoZmw0LT5zYWRkcikpCiAJCQlnb3RvIG91dDsKIAogCQkvKiBJIHJlbW92ZWQgY2hlY2sgZm9yIG9pZiA9PSBkZXZfb3V0LT5vaWYgaGVyZS4KQEAgLTI0OTEsMTEgKzI0ODAsMTEgQEAKIAkJICAgICAgb2YgYW5vdGhlciBpZmFjZS4gLS1BTksKIAkJICovCiAKLQkJaWYgKG9sZGZscDQtPmZsb3dpNF9vaWYgPT0gMCAmJgotCQkgICAgKGlwdjRfaXNfbXVsdGljYXN0KG9sZGZscDQtPmRhZGRyKSB8fAotCQkgICAgIGlwdjRfaXNfbGJjYXN0KG9sZGZscDQtPmRhZGRyKSkpIHsKKwkJaWYgKGZsNC0+Zmxvd2k0X29pZiA9PSAwICYmCisJCSAgICAoaXB2NF9pc19tdWx0aWNhc3QoZmw0LT5kYWRkcikgfHwKKwkJICAgICBpcHY0X2lzX2xiY2FzdChmbDQtPmRhZGRyKSkpIHsKIAkJCS8qIEl0IGlzIGVxdWl2YWxlbnQgdG8gaW5ldF9hZGRyX3R5cGUoc2FkZHIpID09IFJUTl9MT0NBTCAqLwotCQkJZGV2X291dCA9IF9faXBfZGV2X2ZpbmQobmV0LCBvbGRmbHA0LT5zYWRkciwgZmFsc2UpOworCQkJZGV2X291dCA9IF9faXBfZGV2X2ZpbmQobmV0LCBmbDQtPnNhZGRyLCBmYWxzZSk7CiAJCQlpZiAoZGV2X291dCA9PSBOVUxMKQogCQkJCWdvdG8gb3V0OwogCkBAIC0yNTE0LDIwICsyNTAzLDIwIEBACiAJCQkgICBMdWNraWx5LCB0aGlzIGhhY2sgaXMgZ29vZCB3b3JrYXJvdW5kLgogCQkJICovCiAKLQkJCWZsNC5mbG93aTRfb2lmID0gZGV2X291dC0+aWZpbmRleDsKKwkJCWZsNC0+Zmxvd2k0X29pZiA9IGRldl9vdXQtPmlmaW5kZXg7CiAJCQlnb3RvIG1ha2Vfcm91dGU7CiAJCX0KIAotCQlpZiAoIShvbGRmbHA0LT5mbG93aTRfZmxhZ3MgJiBGTE9XSV9GTEFHX0FOWVNSQykpIHsKKwkJaWYgKCEoZmw0LT5mbG93aTRfZmxhZ3MgJiBGTE9XSV9GTEFHX0FOWVNSQykpIHsKIAkJCS8qIEl0IGlzIGVxdWl2YWxlbnQgdG8gaW5ldF9hZGRyX3R5cGUoc2FkZHIpID09IFJUTl9MT0NBTCAqLwotCQkJaWYgKCFfX2lwX2Rldl9maW5kKG5ldCwgb2xkZmxwNC0+c2FkZHIsIGZhbHNlKSkKKwkJCWlmICghX19pcF9kZXZfZmluZChuZXQsIGZsNC0+c2FkZHIsIGZhbHNlKSkKIAkJCQlnb3RvIG91dDsKIAkJfQogCX0KIAogCi0JaWYgKG9sZGZscDQtPmZsb3dpNF9vaWYpIHsKLQkJZGV2X291dCA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KG5ldCwgb2xkZmxwNC0+Zmxvd2k0X29pZik7CisJaWYgKGZsNC0+Zmxvd2k0X29pZikgeworCQlkZXZfb3V0ID0gZGV2X2dldF9ieV9pbmRleF9yY3UobmV0LCBmbDQtPmZsb3dpNF9vaWYpOwogCQlydGggPSBFUlJfUFRSKC1FTk9ERVYpOwogCQlpZiAoZGV2X291dCA9PSBOVUxMKQogCQkJZ290byBvdXQ7CkBAIC0yNTM3LDM3ICsyNTI2LDM3IEBACiAJCQlydGggPSBFUlJfUFRSKC1FTkVUVU5SRUFDSCk7CiAJCQlnb3RvIG91dDsKIAkJfQotCQlpZiAoaXB2NF9pc19sb2NhbF9tdWx0aWNhc3Qob2xkZmxwNC0+ZGFkZHIpIHx8Ci0JCSAgICBpcHY0X2lzX2xiY2FzdChvbGRmbHA0LT5kYWRkcikpIHsKLQkJCWlmICghZmw0LnNhZGRyKQotCQkJCWZsNC5zYWRkciA9IGluZXRfc2VsZWN0X2FkZHIoZGV2X291dCwgMCwKLQkJCQkJCQkgICAgIFJUX1NDT1BFX0xJTkspOworCQlpZiAoaXB2NF9pc19sb2NhbF9tdWx0aWNhc3QoZmw0LT5kYWRkcikgfHwKKwkJICAgIGlwdjRfaXNfbGJjYXN0KGZsNC0+ZGFkZHIpKSB7CisJCQlpZiAoIWZsNC0+c2FkZHIpCisJCQkJZmw0LT5zYWRkciA9IGluZXRfc2VsZWN0X2FkZHIoZGV2X291dCwgMCwKKwkJCQkJCQkgICAgICBSVF9TQ09QRV9MSU5LKTsKIAkJCWdvdG8gbWFrZV9yb3V0ZTsKIAkJfQotCQlpZiAoIWZsNC5zYWRkcikgewotCQkJaWYgKGlwdjRfaXNfbXVsdGljYXN0KG9sZGZscDQtPmRhZGRyKSkKLQkJCQlmbDQuc2FkZHIgPSBpbmV0X3NlbGVjdF9hZGRyKGRldl9vdXQsIDAsCi0JCQkJCQkJICAgICBmbDQuZmxvd2k0X3Njb3BlKTsKLQkJCWVsc2UgaWYgKCFvbGRmbHA0LT5kYWRkcikKLQkJCQlmbDQuc2FkZHIgPSBpbmV0X3NlbGVjdF9hZGRyKGRldl9vdXQsIDAsCi0JCQkJCQkJICAgICBSVF9TQ09QRV9IT1NUKTsKKwkJaWYgKGZsNC0+c2FkZHIpIHsKKwkJCWlmIChpcHY0X2lzX211bHRpY2FzdChmbDQtPmRhZGRyKSkKKwkJCQlmbDQtPnNhZGRyID0gaW5ldF9zZWxlY3RfYWRkcihkZXZfb3V0LCAwLAorCQkJCQkJCSAgICAgIGZsNC0+Zmxvd2k0X3Njb3BlKTsKKwkJCWVsc2UgaWYgKCFmbDQtPmRhZGRyKQorCQkJCWZsNC0+c2FkZHIgPSBpbmV0X3NlbGVjdF9hZGRyKGRldl9vdXQsIDAsCisJCQkJCQkJICAgICAgUlRfU0NPUEVfSE9TVCk7CiAJCX0KIAl9CiAKLQlpZiAoIWZsNC5kYWRkcikgewotCQlmbDQuZGFkZHIgPSBmbDQuc2FkZHI7Ci0JCWlmICghZmw0LmRhZGRyKQotCQkJZmw0LmRhZGRyID0gZmw0LnNhZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKTsKKwlpZiAoIWZsNC0+ZGFkZHIpIHsKKwkJZmw0LT5kYWRkciA9IGZsNC0+c2FkZHI7CisJCWlmICghZmw0LT5kYWRkcikKKwkJCWZsNC0+ZGFkZHIgPSBmbDQtPnNhZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKTsKIAkJZGV2X291dCA9IG5ldC0+bG9vcGJhY2tfZGV2OwotCQlmbDQuZmxvd2k0X29pZiA9IG5ldC0+bG9vcGJhY2tfZGV2LT5pZmluZGV4OworCQlmbDQtPmZsb3dpNF9vaWYgPSBuZXQtPmxvb3BiYWNrX2Rldi0+aWZpbmRleDsKIAkJcmVzLnR5cGUgPSBSVE5fTE9DQUw7CiAJCWZsYWdzIHw9IFJUQ0ZfTE9DQUw7CiAJCWdvdG8gbWFrZV9yb3V0ZTsKIAl9CiAKLQlpZiAoZmliX2xvb2t1cChuZXQsICZmbDQsICZyZXMpKSB7CisJaWYgKGZpYl9sb29rdXAobmV0LCBmbDQsICZyZXMpKSB7CiAJCXJlcy5maSA9IE5VTEw7Ci0JCWlmIChvbGRmbHA0LT5mbG93aTRfb2lmKSB7CisJCWlmIChmbDQtPmZsb3dpNF9vaWYpIHsKIAkJCS8qIEFwcGFyZW50bHksIHJvdXRpbmcgdGFibGVzIGFyZSB3cm9uZy4gQXNzdW1lLAogCQkJICAgdGhhdCB0aGUgZGVzdGluYXRpb24gaXMgb24gbGluay4KIApAQCAtMjU4Niw5ICsyNTc1LDkgQEAKIAkJCSAgIGxpa2VseSBJUHY2LCBidXQgd2UgZG8gbm90LgogCQkJICovCiAKLQkJCWlmIChmbDQuc2FkZHIgPT0gMCkKLQkJCQlmbDQuc2FkZHIgPSBpbmV0X3NlbGVjdF9hZGRyKGRldl9vdXQsIDAsCi0JCQkJCQkJICAgICBSVF9TQ09QRV9MSU5LKTsKKwkJCWlmIChmbDQtPnNhZGRyID09IDApCisJCQkJZmw0LT5zYWRkciA9IGluZXRfc2VsZWN0X2FkZHIoZGV2X291dCwgMCwKKwkJCQkJCQkgICAgICBSVF9TQ09QRV9MSU5LKTsKIAkJCXJlcy50eXBlID0gUlROX1VOSUNBU1Q7CiAJCQlnb3RvIG1ha2Vfcm91dGU7CiAJCX0KQEAgLTI1OTcsNDIgKzI1ODYsNDUgQEAKIAl9CiAKIAlpZiAocmVzLnR5cGUgPT0gUlROX0xPQ0FMKSB7Ci0JCWlmICghZmw0LnNhZGRyKSB7CisJCWlmICghZmw0LT5zYWRkcikgewogCQkJaWYgKHJlcy5maS0+ZmliX3ByZWZzcmMpCi0JCQkJZmw0LnNhZGRyID0gcmVzLmZpLT5maWJfcHJlZnNyYzsKKwkJCQlmbDQtPnNhZGRyID0gcmVzLmZpLT5maWJfcHJlZnNyYzsKIAkJCWVsc2UKLQkJCQlmbDQuc2FkZHIgPSBmbDQuZGFkZHI7CisJCQkJZmw0LT5zYWRkciA9IGZsNC0+ZGFkZHI7CiAJCX0KIAkJZGV2X291dCA9IG5ldC0+bG9vcGJhY2tfZGV2OwotCQlmbDQuZmxvd2k0X29pZiA9IGRldl9vdXQtPmlmaW5kZXg7CisJCWZsNC0+Zmxvd2k0X29pZiA9IGRldl9vdXQtPmlmaW5kZXg7CiAJCXJlcy5maSA9IE5VTEw7CiAJCWZsYWdzIHw9IFJUQ0ZfTE9DQUw7CiAJCWdvdG8gbWFrZV9yb3V0ZTsKIAl9CiAKICNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRICi0JaWYgKHJlcy5maS0+ZmliX25ocyA+IDEgJiYgZmw0LmZsb3dpNF9vaWYgPT0gMCkKKwlpZiAocmVzLmZpLT5maWJfbmhzID4gMSAmJiBmbDQtPmZsb3dpNF9vaWYgPT0gMCkKIAkJZmliX3NlbGVjdF9tdWx0aXBhdGgoJnJlcyk7CiAJZWxzZQogI2VuZGlmCi0JaWYgKCFyZXMucHJlZml4bGVuICYmIHJlcy50eXBlID09IFJUTl9VTklDQVNUICYmICFmbDQuZmxvd2k0X29pZikKKwlpZiAoIXJlcy5wcmVmaXhsZW4gJiYKKwkgICAgcmVzLnRhYmxlLT50Yl9udW1fZGVmYXVsdCA+IDEgJiYKKwkgICAgcmVzLnR5cGUgPT0gUlROX1VOSUNBU1QgJiYgIWZsNC0+Zmxvd2k0X29pZikKIAkJZmliX3NlbGVjdF9kZWZhdWx0KCZyZXMpOwogCi0JaWYgKCFmbDQuc2FkZHIpCi0JCWZsNC5zYWRkciA9IEZJQl9SRVNfUFJFRlNSQyhuZXQsIHJlcyk7CisJaWYgKCFmbDQtPnNhZGRyKQorCQlmbDQtPnNhZGRyID0gRklCX1JFU19QUkVGU1JDKG5ldCwgcmVzKTsKIAogCWRldl9vdXQgPSBGSUJfUkVTX0RFVihyZXMpOwotCWZsNC5mbG93aTRfb2lmID0gZGV2X291dC0+aWZpbmRleDsKKwlmbDQtPmZsb3dpNF9vaWYgPSBkZXZfb3V0LT5pZmluZGV4OwogCiAKIG1ha2Vfcm91dGU6Ci0JcnRoID0gX19ta3JvdXRlX291dHB1dCgmcmVzLCAmZmw0LCBvbGRmbHA0LCBkZXZfb3V0LCBmbGFncyk7CisJcnRoID0gX19ta3JvdXRlX291dHB1dCgmcmVzLCBmbDQsIG9yaWdfZGFkZHIsIG9yaWdfc2FkZHIsIG9yaWdfb2lmLAorCQkJICAgICAgIGRldl9vdXQsIGZsYWdzKTsKIAlpZiAoIUlTX0VSUihydGgpKSB7CiAJCXVuc2lnbmVkIGludCBoYXNoOwogCi0JCWhhc2ggPSBydF9oYXNoKG9sZGZscDQtPmRhZGRyLCBvbGRmbHA0LT5zYWRkciwgb2xkZmxwNC0+Zmxvd2k0X29pZiwKKwkJaGFzaCA9IHJ0X2hhc2gob3JpZ19kYWRkciwgb3JpZ19zYWRkciwgb3JpZ19vaWYsCiAJCQkgICAgICAgcnRfZ2VuaWQoZGV2X25ldChkZXZfb3V0KSkpOwotCQlydGggPSBydF9pbnRlcm5faGFzaChoYXNoLCBydGgsIE5VTEwsIG9sZGZscDQtPmZsb3dpNF9vaWYpOworCQlydGggPSBydF9pbnRlcm5faGFzaChoYXNoLCBydGgsIE5VTEwsIG9yaWdfb2lmKTsKIAl9CiAKIG91dDoKQEAgLTI2NDAsNyArMjYzMiw3IEBACiAJcmV0dXJuIHJ0aDsKIH0KIAotc3RydWN0IHJ0YWJsZSAqX19pcF9yb3V0ZV9vdXRwdXRfa2V5KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGZsb3dpNCAqZmxwNCkKK3N0cnVjdCBydGFibGUgKl9faXBfcm91dGVfb3V0cHV0X2tleShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93aTQgKmZscDQpCiB7CiAJc3RydWN0IHJ0YWJsZSAqcnRoOwogCXVuc2lnbmVkIGludCBoYXNoOwpAQCAtMjY1OCwxMyArMjY1MCwxNyBAQAogCQkgICAgcnRfaXNfb3V0cHV0X3JvdXRlKHJ0aCkgJiYKIAkJICAgIHJ0aC0+cnRfb2lmID09IGZscDQtPmZsb3dpNF9vaWYgJiYKIAkJICAgIHJ0aC0+cnRfbWFyayA9PSBmbHA0LT5mbG93aTRfbWFyayAmJgotCQkgICAgISgocnRoLT5ydF90b3MgXiBmbHA0LT5mbG93aTRfdG9zKSAmCisJCSAgICAhKChydGgtPnJ0X2tleV90b3MgXiBmbHA0LT5mbG93aTRfdG9zKSAmCiAJCQkgICAgKElQVE9TX1JUX01BU0sgfCBSVE9fT05MSU5LKSkgJiYKIAkJICAgIG5ldF9lcShkZXZfbmV0KHJ0aC0+ZHN0LmRldiksIG5ldCkgJiYKIAkJICAgICFydF9pc19leHBpcmVkKHJ0aCkpIHsKIAkJCWRzdF91c2UoJnJ0aC0+ZHN0LCBqaWZmaWVzKTsKIAkJCVJUX0NBQ0hFX1NUQVRfSU5DKG91dF9oaXQpOwogCQkJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CisJCQlpZiAoIWZscDQtPnNhZGRyKQorCQkJCWZscDQtPnNhZGRyID0gcnRoLT5ydF9zcmM7CisJCQlpZiAoIWZscDQtPmRhZGRyKQorCQkJCWZscDQtPmRhZGRyID0gcnRoLT5ydF9kc3Q7CiAJCQlyZXR1cm4gcnRoOwogCQl9CiAJCVJUX0NBQ0hFX1NUQVRfSU5DKG91dF9obGlzdF9zZWFyY2gpOwpAQCAtMjY5MCw2ICsyNjg2LDEyIEBACiB7CiB9CiAKK3N0YXRpYyB1MzIgKmlwdjRfcnRfYmxhY2tob2xlX2Nvd19tZXRyaWNzKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKKwkJCQkJICB1bnNpZ25lZCBsb25nIG9sZCkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIHN0cnVjdCBkc3Rfb3BzIGlwdjRfZHN0X2JsYWNraG9sZV9vcHMgPSB7CiAJLmZhbWlseQkJCT0JQUZfSU5FVCwKIAkucHJvdG9jb2wJCT0JY3B1X3RvX2JlMTYoRVRIX1BfSVApLApAQCAtMjY5OCwxMSArMjcwMCwxMiBAQAogCS5kZWZhdWx0X210dQkJPQlpcHY0X2JsYWNraG9sZV9kZWZhdWx0X210dSwKIAkuZGVmYXVsdF9hZHZtc3MJCT0JaXB2NF9kZWZhdWx0X2Fkdm1zcywKIAkudXBkYXRlX3BtdHUJCT0JaXB2NF9ydF9ibGFja2hvbGVfdXBkYXRlX3BtdHUsCisJLmNvd19tZXRyaWNzCQk9CWlwdjRfcnRfYmxhY2tob2xlX2Nvd19tZXRyaWNzLAogfTsKIAogc3RydWN0IGRzdF9lbnRyeSAqaXB2NF9ibGFja2hvbGVfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Rfb3JpZykKIHsKLQlzdHJ1Y3QgcnRhYmxlICpydCA9IGRzdF9hbGxvYygmaXB2NF9kc3RfYmxhY2tob2xlX29wcywgMSk7CisJc3RydWN0IHJ0YWJsZSAqcnQgPSBkc3RfYWxsb2MoJmlwdjRfZHN0X2JsYWNraG9sZV9vcHMsIE5VTEwsIDEsIDAsIDApOwogCXN0cnVjdCBydGFibGUgKm9ydCA9IChzdHJ1Y3QgcnRhYmxlICopIGRzdF9vcmlnOwogCiAJaWYgKHJ0KSB7CkBAIC0yNzE5LDcgKzI3MjIsNyBAQAogCiAJCXJ0LT5ydF9rZXlfZHN0ID0gb3J0LT5ydF9rZXlfZHN0OwogCQlydC0+cnRfa2V5X3NyYyA9IG9ydC0+cnRfa2V5X3NyYzsKLQkJcnQtPnJ0X3RvcyA9IG9ydC0+cnRfdG9zOworCQlydC0+cnRfa2V5X3RvcyA9IG9ydC0+cnRfa2V5X3RvczsKIAkJcnQtPnJ0X3JvdXRlX2lpZiA9IG9ydC0+cnRfcm91dGVfaWlmOwogCQlydC0+cnRfaWlmID0gb3J0LT5ydF9paWY7CiAJCXJ0LT5ydF9vaWYgPSBvcnQtPnJ0X29pZjsKQEAgLTI3NTUsMTUgKzI3NTgsMTAgQEAKIAlpZiAoSVNfRVJSKHJ0KSkKIAkJcmV0dXJuIHJ0OwogCi0JaWYgKGZscDQtPmZsb3dpNF9wcm90bykgewotCQlpZiAoIWZscDQtPnNhZGRyKQotCQkJZmxwNC0+c2FkZHIgPSBydC0+cnRfc3JjOwotCQlpZiAoIWZscDQtPmRhZGRyKQotCQkJZmxwNC0+ZGFkZHIgPSBydC0+cnRfZHN0OworCWlmIChmbHA0LT5mbG93aTRfcHJvdG8pCiAJCXJ0ID0gKHN0cnVjdCBydGFibGUgKikgeGZybV9sb29rdXAobmV0LCAmcnQtPmRzdCwKIAkJCQkJCSAgIGZsb3dpNF90b19mbG93aShmbHA0KSwKIAkJCQkJCSAgIHNrLCAwKTsKLQl9CiAKIAlyZXR1cm4gcnQ7CiB9CkBAIC0yNzg3LDcgKzI3ODUsNyBAQAogCXItPnJ0bV9mYW1pbHkJID0gQUZfSU5FVDsKIAlyLT5ydG1fZHN0X2xlbgk9IDMyOwogCXItPnJ0bV9zcmNfbGVuCT0gMDsKLQlyLT5ydG1fdG9zCT0gcnQtPnJ0X3RvczsKKwlyLT5ydG1fdG9zCT0gcnQtPnJ0X2tleV90b3M7CiAJci0+cnRtX3RhYmxlCT0gUlRfVEFCTEVfTUFJTjsKIAlOTEFfUFVUX1UzMihza2IsIFJUQV9UQUJMRSwgUlRfVEFCTEVfTUFJTik7CiAJci0+cnRtX3R5cGUJPSBydC0+cnRfdHlwZTsKQEAgLTI4NDEsNyArMjgzOSw5IEBACiAKIAkJaWYgKGlwdjRfaXNfbXVsdGljYXN0KGRzdCkgJiYgIWlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KGRzdCkgJiYKIAkJICAgIElQVjRfREVWQ09ORl9BTEwobmV0LCBNQ19GT1JXQVJESU5HKSkgewotCQkJaW50IGVyciA9IGlwbXJfZ2V0X3JvdXRlKG5ldCwgc2tiLCByLCBub3dhaXQpOworCQkJaW50IGVyciA9IGlwbXJfZ2V0X3JvdXRlKG5ldCwgc2tiLAorCQkJCQkJIHJ0LT5ydF9zcmMsIHJ0LT5ydF9kc3QsCisJCQkJCQkgciwgbm93YWl0KTsKIAkJCWlmIChlcnIgPD0gMCkgewogCQkJCWlmICghbm93YWl0KSB7CiAJCQkJCWlmIChlcnIgPT0gMCkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3N5bmNvb2tpZXMuYyBiL25ldC9pcHY0L3N5bmNvb2tpZXMuYwppbmRleCA4YjQ0YzZkLi4yNjQ2MTQ5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9zeW5jb29raWVzLmMKKysrIGIvbmV0L2lwdjQvc3luY29va2llcy5jCkBAIC0zMjEsMTAgKzMyMSwxMCBAQAogCSAqIHRoZSBBQ0sgY2FycmllcyB0aGUgc2FtZSBvcHRpb25zIGFnYWluIChzZWUgUkZDMTEyMiA0LjIuMy44KQogCSAqLwogCWlmIChvcHQgJiYgb3B0LT5vcHRsZW4pIHsKLQkJaW50IG9wdF9zaXplID0gc2l6ZW9mKHN0cnVjdCBpcF9vcHRpb25zKSArIG9wdC0+b3B0bGVuOworCQlpbnQgb3B0X3NpemUgPSBzaXplb2Yoc3RydWN0IGlwX29wdGlvbnNfcmN1KSArIG9wdC0+b3B0bGVuOwogCiAJCWlyZXEtPm9wdCA9IGttYWxsb2Mob3B0X3NpemUsIEdGUF9BVE9NSUMpOwotCQlpZiAoaXJlcS0+b3B0ICE9IE5VTEwgJiYgaXBfb3B0aW9uc19lY2hvKGlyZXEtPm9wdCwgc2tiKSkgeworCQlpZiAoaXJlcS0+b3B0ICE9IE5VTEwgJiYgaXBfb3B0aW9uc19lY2hvKCZpcmVxLT5vcHQtPm9wdCwgc2tiKSkgewogCQkJa2ZyZWUoaXJlcS0+b3B0KTsKIAkJCWlyZXEtPm9wdCA9IE5VTEw7CiAJCX0KQEAgLTM0NSwxNyArMzQ1LDEzIEBACiAJICogbm8gZWFzeSB3YXkgdG8gZG8gdGhpcy4KIAkgKi8KIAl7Ci0JCXN0cnVjdCBmbG93aTQgZmw0ID0gewotCQkJLmZsb3dpNF9tYXJrID0gc2stPnNrX21hcmssCi0JCQkuZGFkZHIgPSAoKG9wdCAmJiBvcHQtPnNycikgPwotCQkJCSAgb3B0LT5mYWRkciA6IGlyZXEtPnJtdF9hZGRyKSwKLQkJCS5zYWRkciA9IGlyZXEtPmxvY19hZGRyLAotCQkJLmZsb3dpNF90b3MgPSBSVF9DT05OX0ZMQUdTKHNrKSwKLQkJCS5mbG93aTRfcHJvdG8gPSBJUFBST1RPX1RDUCwKLQkJCS5mbG93aTRfZmxhZ3MgPSBpbmV0X3NrX2Zsb3dpX2ZsYWdzKHNrKSwKLQkJCS5mbDRfc3BvcnQgPSB0aC0+ZGVzdCwKLQkJCS5mbDRfZHBvcnQgPSB0aC0+c291cmNlLAotCQl9OworCQlzdHJ1Y3QgZmxvd2k0IGZsNDsKKworCQlmbG93aTRfaW5pdF9vdXRwdXQoJmZsNCwgMCwgc2stPnNrX21hcmssIFJUX0NPTk5fRkxBR1Moc2spLAorCQkJCSAgIFJUX1NDT1BFX1VOSVZFUlNFLCBJUFBST1RPX1RDUCwKKwkJCQkgICBpbmV0X3NrX2Zsb3dpX2ZsYWdzKHNrKSwKKwkJCQkgICAob3B0ICYmIG9wdC0+c3JyKSA/IG9wdC0+ZmFkZHIgOiBpcmVxLT5ybXRfYWRkciwKKwkJCQkgICBpcmVxLT5sb2NfYWRkciwgdGgtPnNvdXJjZSwgdGgtPmRlc3QpOwogCQlzZWN1cml0eV9yZXFfY2xhc3NpZnlfZmxvdyhyZXEsIGZsb3dpNF90b19mbG93aSgmZmw0KSk7CiAJCXJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShzb2NrX25ldChzayksICZmbDQpOwogCQlpZiAoSVNfRVJSKHJ0KSkgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYwppbmRleCAzMjFlNmU4Li41N2QwNzUyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYworKysgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcWxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KICNpbmNsdWRlIDxuZXQvc25tcC5oPgogI2luY2x1ZGUgPG5ldC9pY21wLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CkBAIC0yMSw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bmV0L3VkcC5oPgogI2luY2x1ZGUgPG5ldC9jaXBzb19pcHY0Lmg+CiAjaW5jbHVkZSA8bmV0L2luZXRfZnJhZy5oPgorI2luY2x1ZGUgPG5ldC9waW5nLmg+CiAKIHN0YXRpYyBpbnQgemVybzsKIHN0YXRpYyBpbnQgdGNwX3JldHIxX21heCA9IDI1NTsKQEAgLTMwLDYgKzMyLDggQEAKIHN0YXRpYyBpbnQgdGNwX2Fkdl93aW5fc2NhbGVfbWF4ID0gMzE7CiBzdGF0aWMgaW50IGlwX3R0bF9taW4gPSAxOwogc3RhdGljIGludCBpcF90dGxfbWF4ID0gMjU1Oworc3RhdGljIGludCBpcF9waW5nX2dyb3VwX3JhbmdlX21pbltdID0geyAwLCAwIH07CitzdGF0aWMgaW50IGlwX3BpbmdfZ3JvdXBfcmFuZ2VfbWF4W10gPSB7IEdJRF9UX01BWCwgR0lEX1RfTUFYIH07CiAKIC8qIFVwZGF0ZSBzeXN0ZW0gdmlzaWJsZSBJUCBwb3J0IHJhbmdlICovCiBzdGF0aWMgdm9pZCBzZXRfbG9jYWxfcG9ydF9yYW5nZShpbnQgcmFuZ2VbMl0pCkBAIC02OCw2ICs3Miw1MyBAQAogCXJldHVybiByZXQ7CiB9CiAKKwordm9pZCBpbmV0X2dldF9waW5nX2dyb3VwX3JhbmdlX3RhYmxlKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBnaWRfdCAqbG93LCBnaWRfdCAqaGlnaCkKK3sKKwlnaWRfdCAqZGF0YSA9IHRhYmxlLT5kYXRhOworCXVuc2lnbmVkIHNlcTsKKwlkbyB7CisJCXNlcSA9IHJlYWRfc2VxYmVnaW4oJnN5c2N0bF9sb2NhbF9wb3J0cy5sb2NrKTsKKworCQkqbG93ID0gZGF0YVswXTsKKwkJKmhpZ2ggPSBkYXRhWzFdOworCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoJnN5c2N0bF9sb2NhbF9wb3J0cy5sb2NrLCBzZXEpKTsKK30KKworLyogVXBkYXRlIHN5c3RlbSB2aXNpYmxlIElQIHBvcnQgcmFuZ2UgKi8KK3N0YXRpYyB2b2lkIHNldF9waW5nX2dyb3VwX3JhbmdlKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgcmFuZ2VbMl0pCit7CisJZ2lkX3QgKmRhdGEgPSB0YWJsZS0+ZGF0YTsKKwl3cml0ZV9zZXFsb2NrKCZzeXNjdGxfbG9jYWxfcG9ydHMubG9jayk7CisJZGF0YVswXSA9IHJhbmdlWzBdOworCWRhdGFbMV0gPSByYW5nZVsxXTsKKwl3cml0ZV9zZXF1bmxvY2soJnN5c2N0bF9sb2NhbF9wb3J0cy5sb2NrKTsKK30KKworLyogVmFsaWRhdGUgY2hhbmdlcyBmcm9tIC9wcm9jIGludGVyZmFjZS4gKi8KK3N0YXRpYyBpbnQgaXB2NF9waW5nX2dyb3VwX3JhbmdlKGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKKwkJCQkgdm9pZCBfX3VzZXIgKmJ1ZmZlciwKKwkJCQkgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCit7CisJaW50IHJldDsKKwlnaWRfdCByYW5nZVsyXTsKKwljdGxfdGFibGUgdG1wID0geworCQkuZGF0YSA9ICZyYW5nZSwKKwkJLm1heGxlbiA9IHNpemVvZihyYW5nZSksCisJCS5tb2RlID0gdGFibGUtPm1vZGUsCisJCS5leHRyYTEgPSAmaXBfcGluZ19ncm91cF9yYW5nZV9taW4sCisJCS5leHRyYTIgPSAmaXBfcGluZ19ncm91cF9yYW5nZV9tYXgsCisJfTsKKworCWluZXRfZ2V0X3BpbmdfZ3JvdXBfcmFuZ2VfdGFibGUodGFibGUsIHJhbmdlLCByYW5nZSArIDEpOworCXJldCA9IHByb2NfZG9pbnR2ZWNfbWlubWF4KCZ0bXAsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpOworCisJaWYgKHdyaXRlICYmIHJldCA9PSAwKQorCQlzZXRfcGluZ19ncm91cF9yYW5nZSh0YWJsZSwgcmFuZ2UpOworCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCBwcm9jX3RjcF9jb25nZXN0aW9uX2NvbnRyb2woY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwKIAkJCQkgICAgICAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCiB7CkBAIC02NzcsNiArNzI4LDEzIEBACiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjCiAJfSwKKwl7CisJCS5wcm9jbmFtZQk9ICJwaW5nX2dyb3VwX3JhbmdlIiwKKwkJLmRhdGEJCT0gJmluaXRfbmV0LmlwdjQuc3lzY3RsX3BpbmdfZ3JvdXBfcmFuZ2UsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGluaXRfbmV0LmlwdjQuc3lzY3RsX3BpbmdfZ3JvdXBfcmFuZ2UpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gaXB2NF9waW5nX2dyb3VwX3JhbmdlLAorCX0sCiAJeyB9CiB9OwogCkBAIC03MTEsOCArNzY5LDE4IEBACiAJCQkmbmV0LT5pcHY0LnN5c2N0bF9pY21wX3JhdGVtYXNrOwogCQl0YWJsZVs2XS5kYXRhID0KIAkJCSZuZXQtPmlwdjQuc3lzY3RsX3J0X2NhY2hlX3JlYnVpbGRfY291bnQ7CisJCXRhYmxlWzddLmRhdGEgPQorCQkJJm5ldC0+aXB2NC5zeXNjdGxfcGluZ19ncm91cF9yYW5nZTsKKwogCX0KIAorCS8qCisJICogU2FuZSBkZWZhdWx0cyAtIG5vYm9keSBtYXkgY3JlYXRlIHBpbmcgc29ja2V0cy4KKwkgKiBCb290IHNjcmlwdHMgc2hvdWxkIHNldCB0aGlzIHRvIGRpc3Ryby1zcGVjaWZpYyBncm91cC4KKwkgKi8KKwluZXQtPmlwdjQuc3lzY3RsX3BpbmdfZ3JvdXBfcmFuZ2VbMF0gPSAxOworCW5ldC0+aXB2NC5zeXNjdGxfcGluZ19ncm91cF9yYW5nZVsxXSA9IDA7CisKIAluZXQtPmlwdjQuc3lzY3RsX3J0X2NhY2hlX3JlYnVpbGRfY291bnQgPSA0OwogCiAJbmV0LT5pcHY0LmlwdjRfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShuZXQsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IGIyMmQ0NTAuLjA1NGE1OWQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCisrKyBiL25ldC9pcHY0L3RjcC5jCkBAIC05OTksNyArOTk5LDggQEAKIAkJCQkvKiBXZSBoYXZlIHNvbWUgc3BhY2UgaW4gc2tiIGhlYWQuIFN1cGVyYiEgKi8KIAkJCQlpZiAoY29weSA+IHNrYl90YWlscm9vbShza2IpKQogCQkJCQljb3B5ID0gc2tiX3RhaWxyb29tKHNrYik7Ci0JCQkJaWYgKChlcnIgPSBza2JfYWRkX2RhdGEoc2tiLCBmcm9tLCBjb3B5KSkgIT0gMCkKKwkJCQllcnIgPSBza2JfYWRkX2RhdGFfbm9jYWNoZShzaywgc2tiLCBmcm9tLCBjb3B5KTsKKwkJCQlpZiAoZXJyKQogCQkJCQlnb3RvIGRvX2ZhdWx0OwogCQkJfSBlbHNlIHsKIAkJCQlpbnQgbWVyZ2UgPSAwOwpAQCAtMTA0Miw4ICsxMDQzLDggQEAKIAogCQkJCS8qIFRpbWUgdG8gY29weSBkYXRhLiBXZSBhcmUgY2xvc2UgdG8KIAkJCQkgKiB0aGUgZW5kISAqLwotCQkJCWVyciA9IHNrYl9jb3B5X3RvX3BhZ2Uoc2ssIGZyb20sIHNrYiwgcGFnZSwKLQkJCQkJCSAgICAgICBvZmYsIGNvcHkpOworCQkJCWVyciA9IHNrYl9jb3B5X3RvX3BhZ2Vfbm9jYWNoZShzaywgZnJvbSwgc2tiLAorCQkJCQkJCSAgICAgICBwYWdlLCBvZmYsIGNvcHkpOwogCQkJCWlmIChlcnIpIHsKIAkJCQkJLyogSWYgdGhpcyBwYWdlIHdhcyBuZXcsIGdpdmUgaXQgdG8gdGhlCiAJCQkJCSAqIHNvY2tldCBzbyBpdCBkb2VzIG5vdCBnZXQgbGVha2VkLgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2N1YmljLmMgYi9uZXQvaXB2NC90Y3BfY3ViaWMuYwppbmRleCAzNDM0MGM5Li5mMzc2YjA1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfY3ViaWMuYworKysgYi9uZXQvaXB2NC90Y3BfY3ViaWMuYwpAQCAtOTMsNiArOTMsNyBAQAogCXUzMglhY2tfY250OwkvKiBudW1iZXIgb2YgYWNrcyAqLwogCXUzMgl0Y3BfY3duZDsJLyogZXN0aW1hdGVkIHRjcCBjd25kICovCiAjZGVmaW5lIEFDS19SQVRJT19TSElGVAk0CisjZGVmaW5lIEFDS19SQVRJT19MSU1JVCAoMzJ1IDw8IEFDS19SQVRJT19TSElGVCkKIAl1MTYJZGVsYXllZF9hY2s7CS8qIGVzdGltYXRlIHRoZSByYXRpbyBvZiBQYWNrZXRzL0FDS3MgPDwgNCAqLwogCXU4CXNhbXBsZV9jbnQ7CS8qIG51bWJlciBvZiBzYW1wbGVzIHRvIGRlY2lkZSBjdXJyX3J0dCAqLwogCXU4CWZvdW5kOwkJLyogdGhlIGV4aXQgcG9pbnQgaXMgZm91bmQ/ICovCkBAIC0zOTgsOCArMzk5LDEyIEBACiAJdTMyIGRlbGF5OwogCiAJaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX09wZW4pIHsKLQkJY250IC09IGNhLT5kZWxheWVkX2FjayA+PiBBQ0tfUkFUSU9fU0hJRlQ7Ci0JCWNhLT5kZWxheWVkX2FjayArPSBjbnQ7CisJCXUzMiByYXRpbyA9IGNhLT5kZWxheWVkX2FjazsKKworCQlyYXRpbyAtPSBjYS0+ZGVsYXllZF9hY2sgPj4gQUNLX1JBVElPX1NISUZUOworCQlyYXRpbyArPSBjbnQ7CisKKwkJY2EtPmRlbGF5ZWRfYWNrID0gbWluKHJhdGlvLCBBQ0tfUkFUSU9fTElNSVQpOwogCX0KIAogCS8qIFNvbWUgY2FsbHMgYXJlIGZvciBkdXBsaWNhdGVzIHdpdGhvdXQgdGltZXRhbXBzICovCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaXB2NC5jIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwppbmRleCBmN2U2YzJjLi4zYzhkOWI2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaXB2NC5jCisrKyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKQEAgLTE0NiwxMyArMTQ2LDE1IEBACiAvKiBUaGlzIHdpbGwgaW5pdGlhdGUgYW4gb3V0Z29pbmcgY29ubmVjdGlvbi4gKi8KIGludCB0Y3BfdjRfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsIGludCBhZGRyX2xlbikKIHsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnVzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopdWFkZHI7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwotCXN0cnVjdCBzb2NrYWRkcl9pbiAqdXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKil1YWRkcjsKIAlfX2JlMTYgb3JpZ19zcG9ydCwgb3JpZ19kcG9ydDsKLQlzdHJ1Y3QgcnRhYmxlICpydDsKIAlfX2JlMzIgZGFkZHIsIG5leHRob3A7CisJc3RydWN0IGZsb3dpNCAqZmw0OworCXN0cnVjdCBydGFibGUgKnJ0OwogCWludCBlcnI7CisJc3RydWN0IGlwX29wdGlvbnNfcmN1ICppbmV0X29wdDsKIAogCWlmIChhZGRyX2xlbiA8IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE2MSwxNSArMTYzLDE4IEBACiAJCXJldHVybiAtRUFGTk9TVVBQT1JUOwogCiAJbmV4dGhvcCA9IGRhZGRyID0gdXNpbi0+c2luX2FkZHIuc19hZGRyOwotCWlmIChpbmV0LT5vcHQgJiYgaW5ldC0+b3B0LT5zcnIpIHsKKwlpbmV0X29wdCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoaW5ldC0+aW5ldF9vcHQsCisJCQkJCSAgICAgc29ja19vd25lZF9ieV91c2VyKHNrKSk7CisJaWYgKGluZXRfb3B0ICYmIGluZXRfb3B0LT5vcHQuc3JyKSB7CiAJCWlmICghZGFkZHIpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJbmV4dGhvcCA9IGluZXQtPm9wdC0+ZmFkZHI7CisJCW5leHRob3AgPSBpbmV0X29wdC0+b3B0LmZhZGRyOwogCX0KIAogCW9yaWdfc3BvcnQgPSBpbmV0LT5pbmV0X3Nwb3J0OwogCW9yaWdfZHBvcnQgPSB1c2luLT5zaW5fcG9ydDsKLQlydCA9IGlwX3JvdXRlX2Nvbm5lY3QobmV4dGhvcCwgaW5ldC0+aW5ldF9zYWRkciwKKwlmbDQgPSAmaW5ldC0+Y29yay5mbC51LmlwNDsKKwlydCA9IGlwX3JvdXRlX2Nvbm5lY3QoZmw0LCBuZXh0aG9wLCBpbmV0LT5pbmV0X3NhZGRyLAogCQkJICAgICAgUlRfQ09OTl9GTEFHUyhzayksIHNrLT5za19ib3VuZF9kZXZfaWYsCiAJCQkgICAgICBJUFBST1RPX1RDUCwKIAkJCSAgICAgIG9yaWdfc3BvcnQsIG9yaWdfZHBvcnQsIHNrLCB0cnVlKTsKQEAgLTE4NSwxMSArMTkwLDExIEBACiAJCXJldHVybiAtRU5FVFVOUkVBQ0g7CiAJfQogCi0JaWYgKCFpbmV0LT5vcHQgfHwgIWluZXQtPm9wdC0+c3JyKQotCQlkYWRkciA9IHJ0LT5ydF9kc3Q7CisJaWYgKCFpbmV0X29wdCB8fCAhaW5ldF9vcHQtPm9wdC5zcnIpCisJCWRhZGRyID0gZmw0LT5kYWRkcjsKIAogCWlmICghaW5ldC0+aW5ldF9zYWRkcikKLQkJaW5ldC0+aW5ldF9zYWRkciA9IHJ0LT5ydF9zcmM7CisJCWluZXQtPmluZXRfc2FkZHIgPSBmbDQtPnNhZGRyOwogCWluZXQtPmluZXRfcmN2X3NhZGRyID0gaW5ldC0+aW5ldF9zYWRkcjsKIAogCWlmICh0cC0+cnhfb3B0LnRzX3JlY2VudF9zdGFtcCAmJiBpbmV0LT5pbmV0X2RhZGRyICE9IGRhZGRyKSB7CkBAIC0yMDAsOCArMjA1LDggQEAKIAl9CiAKIAlpZiAodGNwX2RlYXRoX3Jvdy5zeXNjdGxfdHdfcmVjeWNsZSAmJgotCSAgICAhdHAtPnJ4X29wdC50c19yZWNlbnRfc3RhbXAgJiYgcnQtPnJ0X2RzdCA9PSBkYWRkcikgewotCQlzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyID0gcnRfZ2V0X3BlZXIocnQpOworCSAgICAhdHAtPnJ4X29wdC50c19yZWNlbnRfc3RhbXAgJiYgZmw0LT5kYWRkciA9PSBkYWRkcikgeworCQlzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyID0gcnRfZ2V0X3BlZXIocnQsIGZsNC0+ZGFkZHIpOwogCQkvKgogCQkgKiBWSidzIGlkZWEuIFdlIHNhdmUgbGFzdCB0aW1lc3RhbXAgc2VlbiBmcm9tCiAJCSAqIHRoZSBkZXN0aW5hdGlvbiBpbiBwZWVyIHRhYmxlLCB3aGVuIGVudGVyaW5nIHN0YXRlCkBAIC0yMjEsOCArMjI2LDggQEAKIAlpbmV0LT5pbmV0X2RhZGRyID0gZGFkZHI7CiAKIAlpbmV0X2NzayhzayktPmljc2tfZXh0X2hkcl9sZW4gPSAwOwotCWlmIChpbmV0LT5vcHQpCi0JCWluZXRfY3NrKHNrKS0+aWNza19leHRfaGRyX2xlbiA9IGluZXQtPm9wdC0+b3B0bGVuOworCWlmIChpbmV0X29wdCkKKwkJaW5ldF9jc2soc2spLT5pY3NrX2V4dF9oZHJfbGVuID0gaW5ldF9vcHQtPm9wdC5vcHRsZW47CiAKIAl0cC0+cnhfb3B0Lm1zc19jbGFtcCA9IFRDUF9NU1NfREVGQVVMVDsKIApAQCAtMjM2LDggKzI0MSw3IEBACiAJaWYgKGVycikKIAkJZ290byBmYWlsdXJlOwogCi0JcnQgPSBpcF9yb3V0ZV9uZXdwb3J0cyhydCwgSVBQUk9UT19UQ1AsCi0JCQkgICAgICAgb3JpZ19zcG9ydCwgb3JpZ19kcG9ydCwKKwlydCA9IGlwX3JvdXRlX25ld3BvcnRzKGZsNCwgcnQsIG9yaWdfc3BvcnQsIG9yaWdfZHBvcnQsCiAJCQkgICAgICAgaW5ldC0+aW5ldF9zcG9ydCwgaW5ldC0+aW5ldF9kcG9ydCwgc2spOwogCWlmIChJU19FUlIocnQpKSB7CiAJCWVyciA9IFBUUl9FUlIocnQpOwpAQCAtMjc5LDcgKzI4Myw3IEBACiAvKgogICogVGhpcyByb3V0aW5lIGRvZXMgcGF0aCBtdHUgZGlzY292ZXJ5IGFzIGRlZmluZWQgaW4gUkZDMTE5MS4KICAqLwotc3RhdGljIHZvaWQgZG9fcG10dV9kaXNjb3Zlcnkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBoZHIgKmlwaCwgdTMyIG10dSkKK3N0YXRpYyB2b2lkIGRvX3BtdHVfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGlwaGRyICppcGgsIHUzMiBtdHUpCiB7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0OwogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKQEAgLTM0MSw3ICszNDUsNyBAQAogCiB2b2lkIHRjcF92NF9lcnIoc3RydWN0IHNrX2J1ZmYgKmljbXBfc2tiLCB1MzIgaW5mbykKIHsKLQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKilpY21wX3NrYi0+ZGF0YTsKKwljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCA9IChjb25zdCBzdHJ1Y3QgaXBoZHIgKilpY21wX3NrYi0+ZGF0YTsKIAlzdHJ1Y3QgdGNwaGRyICp0aCA9IChzdHJ1Y3QgdGNwaGRyICopKGljbXBfc2tiLT5kYXRhICsgKGlwaC0+aWhsIDw8IDIpKTsKIAlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2s7CiAJc3RydWN0IHRjcF9zb2NrICp0cDsKQEAgLTY0Nyw3ICs2NTEsNyBAQAogCWFyZy5mbGFncyA9IChzayAmJiBpbmV0X3NrKHNrKS0+dHJhbnNwYXJlbnQpID8gSVBfUkVQTFlfQVJHX05PU1JDQ0hFQ0sgOiAwOwogCiAJbmV0ID0gZGV2X25ldChza2JfZHN0KHNrYiktPmRldik7Ci0JaXBfc2VuZF9yZXBseShuZXQtPmlwdjQudGNwX3NvY2ssIHNrYiwKKwlpcF9zZW5kX3JlcGx5KG5ldC0+aXB2NC50Y3Bfc29jaywgc2tiLCBpcF9oZHIoc2tiKS0+c2FkZHIsCiAJCSAgICAgICZhcmcsIGFyZy5pb3ZbMF0uaW92X2xlbik7CiAKIAlUQ1BfSU5DX1NUQVRTX0JIKG5ldCwgVENQX01JQl9PVVRTRUdTKTsKQEAgLTcyMiw3ICs3MjYsNyBAQAogCWlmIChvaWYpCiAJCWFyZy5ib3VuZF9kZXZfaWYgPSBvaWY7CiAKLQlpcF9zZW5kX3JlcGx5KG5ldC0+aXB2NC50Y3Bfc29jaywgc2tiLAorCWlwX3NlbmRfcmVwbHkobmV0LT5pcHY0LnRjcF9zb2NrLCBza2IsIGlwX2hkcihza2IpLT5zYWRkciwKIAkJICAgICAgJmFyZywgYXJnLmlvdlswXS5pb3ZfbGVuKTsKIAogCVRDUF9JTkNfU1RBVFNfQkgobmV0LCBUQ1BfTUlCX09VVFNFR1MpOwpAQCAtNzY1LDExICs3NjksMTIgQEAKIAkJCSAgICAgIHN0cnVjdCByZXF1ZXN0X3ZhbHVlcyAqcnZwKQogewogCWNvbnN0IHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcSA9IGluZXRfcnNrKHJlcSk7CisJc3RydWN0IGZsb3dpNCBmbDQ7CiAJaW50IGVyciA9IC0xOwogCXN0cnVjdCBza19idWZmICogc2tiOwogCiAJLyogRmlyc3QsIGdyYWIgYSByb3V0ZS4gKi8KLQlpZiAoIWRzdCAmJiAoZHN0ID0gaW5ldF9jc2tfcm91dGVfcmVxKHNrLCByZXEpKSA9PSBOVUxMKQorCWlmICghZHN0ICYmIChkc3QgPSBpbmV0X2Nza19yb3V0ZV9yZXEoc2ssICZmbDQsIHJlcSkpID09IE5VTEwpCiAJCXJldHVybiAtMTsKIAogCXNrYiA9IHRjcF9tYWtlX3N5bmFjayhzaywgZHN0LCByZXEsIHJ2cCk7CkBAIC04MjAsMTcgKzgyNSwxOCBAQAogLyoKICAqIFNhdmUgYW5kIGNvbXBpbGUgSVB2NCBvcHRpb25zIGludG8gdGhlIHJlcXVlc3Rfc29jayBpZiBuZWVkZWQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaXBfb3B0aW9ucyAqdGNwX3Y0X3NhdmVfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgc3RydWN0IGlwX29wdGlvbnNfcmN1ICp0Y3BfdjRfc2F2ZV9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0ID0gJihJUENCKHNrYiktPm9wdCk7Ci0Jc3RydWN0IGlwX29wdGlvbnMgKmRvcHQgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBpcF9vcHRpb25zICpvcHQgPSAmKElQQ0Ioc2tiKS0+b3B0KTsKKwlzdHJ1Y3QgaXBfb3B0aW9uc19yY3UgKmRvcHQgPSBOVUxMOwogCiAJaWYgKG9wdCAmJiBvcHQtPm9wdGxlbikgewotCQlpbnQgb3B0X3NpemUgPSBvcHRsZW5ndGgob3B0KTsKKwkJaW50IG9wdF9zaXplID0gc2l6ZW9mKCpkb3B0KSArIG9wdC0+b3B0bGVuOworCiAJCWRvcHQgPSBrbWFsbG9jKG9wdF9zaXplLCBHRlBfQVRPTUlDKTsKIAkJaWYgKGRvcHQpIHsKLQkJCWlmIChpcF9vcHRpb25zX2VjaG8oZG9wdCwgc2tiKSkgeworCQkJaWYgKGlwX29wdGlvbnNfZWNobygmZG9wdC0+b3B0LCBza2IpKSB7CiAJCQkJa2ZyZWUoZG9wdCk7CiAJCQkJZG9wdCA9IE5VTEw7CiAJCQl9CkBAIC0xMzMzLDYgKzEzMzksNyBAQAogCQlyZXEtPmNvb2tpZV90cyA9IHRtcF9vcHQudHN0YW1wX29rOwogCX0gZWxzZSBpZiAoIWlzbikgewogCQlzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyID0gTlVMTDsKKwkJc3RydWN0IGZsb3dpNCBmbDQ7CiAKIAkJLyogVkoncyBpZGVhLiBXZSBzYXZlIGxhc3QgdGltZXN0YW1wIHNlZW4KIAkJICogZnJvbSB0aGUgZGVzdGluYXRpb24gaW4gcGVlciB0YWJsZSwgd2hlbiBlbnRlcmluZwpAQCAtMTM0NSw5ICsxMzUyLDkgQEAKIAkJICovCiAJCWlmICh0bXBfb3B0LnNhd190c3RhbXAgJiYKIAkJICAgIHRjcF9kZWF0aF9yb3cuc3lzY3RsX3R3X3JlY3ljbGUgJiYKLQkJICAgIChkc3QgPSBpbmV0X2Nza19yb3V0ZV9yZXEoc2ssIHJlcSkpICE9IE5VTEwgJiYKLQkJICAgIChwZWVyID0gcnRfZ2V0X3BlZXIoKHN0cnVjdCBydGFibGUgKilkc3QpKSAhPSBOVUxMICYmCi0JCSAgICBwZWVyLT5kYWRkci5hZGRyLmE0ID09IHNhZGRyKSB7CisJCSAgICAoZHN0ID0gaW5ldF9jc2tfcm91dGVfcmVxKHNrLCAmZmw0LCByZXEpKSAhPSBOVUxMICYmCisJCSAgICBmbDQuZGFkZHIgPT0gc2FkZHIgJiYKKwkJICAgIChwZWVyID0gcnRfZ2V0X3BlZXIoKHN0cnVjdCBydGFibGUgKilkc3QsIGZsNC5kYWRkcikpICE9IE5VTEwpIHsKIAkJCWluZXRfcGVlcl9yZWZjaGVjayhwZWVyKTsKIAkJCWlmICgodTMyKWdldF9zZWNvbmRzKCkgLSBwZWVyLT50Y3BfdHNfc3RhbXAgPCBUQ1BfUEFXU19NU0wgJiYKIAkJCSAgICAoczMyKShwZWVyLT50Y3BfdHMgLSByZXEtPnRzX3JlY2VudCkgPgpAQCAtMTQxMSwxOSArMTQxOCwxNiBAQAogI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCiAJc3RydWN0IHRjcF9tZDVzaWdfa2V5ICprZXk7CiAjZW5kaWYKKwlzdHJ1Y3QgaXBfb3B0aW9uc19yY3UgKmluZXRfb3B0OwogCiAJaWYgKHNrX2FjY2VwdHFfaXNfZnVsbChzaykpCiAJCWdvdG8gZXhpdF9vdmVyZmxvdzsKIAotCWlmICghZHN0ICYmIChkc3QgPSBpbmV0X2Nza19yb3V0ZV9yZXEoc2ssIHJlcSkpID09IE5VTEwpCi0JCWdvdG8gZXhpdDsKLQogCW5ld3NrID0gdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKHNrLCByZXEsIHNrYik7CiAJaWYgKCFuZXdzaykKIAkJZ290byBleGl0X25vbmV3c2s7CiAKIAluZXdzay0+c2tfZ3NvX3R5cGUgPSBTS0JfR1NPX1RDUFY0OwotCXNrX3NldHVwX2NhcHMobmV3c2ssIGRzdCk7CiAKIAluZXd0cAkJICAgICAgPSB0Y3Bfc2sobmV3c2spOwogCW5ld2luZXQJCSAgICAgID0gaW5ldF9zayhuZXdzayk7CkBAIC0xNDMxLDE1ICsxNDM1LDIxIEBACiAJbmV3aW5ldC0+aW5ldF9kYWRkciAgID0gaXJlcS0+cm10X2FkZHI7CiAJbmV3aW5ldC0+aW5ldF9yY3Zfc2FkZHIgPSBpcmVxLT5sb2NfYWRkcjsKIAluZXdpbmV0LT5pbmV0X3NhZGRyCSAgICAgID0gaXJlcS0+bG9jX2FkZHI7Ci0JbmV3aW5ldC0+b3B0CSAgICAgID0gaXJlcS0+b3B0OworCWluZXRfb3B0CSAgICAgID0gaXJlcS0+b3B0OworCXJjdV9hc3NpZ25fcG9pbnRlcihuZXdpbmV0LT5pbmV0X29wdCwgaW5ldF9vcHQpOwogCWlyZXEtPm9wdAkgICAgICA9IE5VTEw7CiAJbmV3aW5ldC0+bWNfaW5kZXggICAgID0gaW5ldF9paWYoc2tiKTsKIAluZXdpbmV0LT5tY190dGwJICAgICAgPSBpcF9oZHIoc2tiKS0+dHRsOwogCWluZXRfY3NrKG5ld3NrKS0+aWNza19leHRfaGRyX2xlbiA9IDA7Ci0JaWYgKG5ld2luZXQtPm9wdCkKLQkJaW5ldF9jc2sobmV3c2spLT5pY3NrX2V4dF9oZHJfbGVuID0gbmV3aW5ldC0+b3B0LT5vcHRsZW47CisJaWYgKGluZXRfb3B0KQorCQlpbmV0X2NzayhuZXdzayktPmljc2tfZXh0X2hkcl9sZW4gPSBpbmV0X29wdC0+b3B0Lm9wdGxlbjsKIAluZXdpbmV0LT5pbmV0X2lkID0gbmV3dHAtPndyaXRlX3NlcSBeIGppZmZpZXM7CiAKKwlpZiAoIWRzdCAmJiAoZHN0ID0gaW5ldF9jc2tfcm91dGVfY2hpbGRfc29jayhzaywgbmV3c2ssIHJlcSkpID09IE5VTEwpCisJCWdvdG8gcHV0X2FuZF9leGl0OworCisJc2tfc2V0dXBfY2FwcyhuZXdzaywgZHN0KTsKKwogCXRjcF9tdHVwX2luaXQobmV3c2spOwogCXRjcF9zeW5jX21zcyhuZXdzaywgZHN0X210dShkc3QpKTsKIAluZXd0cC0+YWR2bXNzID0gZHN0X21ldHJpY19hZHZtc3MoZHN0KTsKQEAgLTE0NjcsMTAgKzE0NzcsOCBAQAogCX0KICNlbmRpZgogCi0JaWYgKF9faW5ldF9pbmhlcml0X3BvcnQoc2ssIG5ld3NrKSA8IDApIHsKLQkJc29ja19wdXQobmV3c2spOwotCQlnb3RvIGV4aXQ7Ci0JfQorCWlmIChfX2luZXRfaW5oZXJpdF9wb3J0KHNrLCBuZXdzaykgPCAwKQorCQlnb3RvIHB1dF9hbmRfZXhpdDsKIAlfX2luZXRfaGFzaF9ub2xpc3RlbihuZXdzaywgTlVMTCk7CiAKIAlyZXR1cm4gbmV3c2s7CkBAIC0xNDgyLDYgKzE0OTAsOSBAQAogZXhpdDoKIAlORVRfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX0xJU1RFTkRST1BTKTsKIAlyZXR1cm4gTlVMTDsKK3B1dF9hbmRfZXhpdDoKKwlzb2NrX3B1dChuZXdzayk7CisJZ290byBleGl0OwogfQogRVhQT1JUX1NZTUJPTCh0Y3BfdjRfc3luX3JlY3Zfc29jayk7CiAKQEAgLTE3NjQsMTIgKzE3NzUsMTMgQEAKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJc3RydWN0IGluZXRfcGVlciAqcGVlcjsKIAotCWlmICghcnQgfHwgcnQtPnJ0X2RzdCAhPSBpbmV0LT5pbmV0X2RhZGRyKSB7CisJaWYgKCFydCB8fAorCSAgICBpbmV0LT5jb3JrLmZsLnUuaXA0LmRhZGRyICE9IGluZXQtPmluZXRfZGFkZHIpIHsKIAkJcGVlciA9IGluZXRfZ2V0cGVlcl92NChpbmV0LT5pbmV0X2RhZGRyLCAxKTsKIAkJKnJlbGVhc2VfaXQgPSB0cnVlOwogCX0gZWxzZSB7CiAJCWlmICghcnQtPnBlZXIpCi0JCQlydF9iaW5kX3BlZXIocnQsIDEpOworCQkJcnRfYmluZF9wZWVyKHJ0LCBpbmV0LT5pbmV0X2RhZGRyLCAxKTsKIAkJcGVlciA9IHJ0LT5wZWVyOwogCQkqcmVsZWFzZV9pdCA9IGZhbHNlOwogCX0KQEAgLTI1MjcsNyArMjUzOSw3IEBACiAKIHN0cnVjdCBza19idWZmICoqdGNwNF9ncm9fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGlwaGRyICppcGggPSBza2JfZ3JvX25ldHdvcmtfaGVhZGVyKHNrYik7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSBza2JfZ3JvX25ldHdvcmtfaGVhZGVyKHNrYik7CiAKIAlzd2l0Y2ggKHNrYi0+aXBfc3VtbWVkKSB7CiAJY2FzZSBDSEVDS1NVTV9DT01QTEVURToKQEAgLTI1NDgsNyArMjU2MCw3IEBACiAKIGludCB0Y3A0X2dyb19jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTsKIAlzdHJ1Y3QgdGNwaGRyICp0aCA9IHRjcF9oZHIoc2tiKTsKIAogCXRoLT5jaGVjayA9IH50Y3BfdjRfY2hlY2soc2tiLT5sZW4gLSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCmluZGV4IDE3Mzg4YzcuLjg4MmUwYjAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYworKysgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKQEAgLTg5OSw3ICs4OTksNyBAQAogCQlUQ1BfQUREX1NUQVRTKHNvY2tfbmV0KHNrKSwgVENQX01JQl9PVVRTRUdTLAogCQkJICAgICAgdGNwX3NrYl9wY291bnQoc2tiKSk7CiAKLQllcnIgPSBpY3NrLT5pY3NrX2FmX29wcy0+cXVldWVfeG1pdChza2IpOworCWVyciA9IGljc2stPmljc2tfYWZfb3BzLT5xdWV1ZV94bWl0KHNrYiwgJmluZXQtPmNvcmsuZmwpOwogCWlmIChsaWtlbHkoZXJyIDw9IDApKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC91ZHAuYyBiL25ldC9pcHY0L3VkcC5jCmluZGV4IGY4N2E4ZWIuLjU5OTM3NGYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3VkcC5jCisrKyBiL25ldC9pcHY0L3VkcC5jCkBAIC01NzgsNyArNTc4LDcgQEAKIHZvaWQgX191ZHA0X2xpYl9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluZm8sIHN0cnVjdCB1ZHBfdGFibGUgKnVkcHRhYmxlKQogewogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7Ci0Jc3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gKGNvbnN0IHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKIAlzdHJ1Y3QgdWRwaGRyICp1aCA9IChzdHJ1Y3QgdWRwaGRyICopKHNrYi0+ZGF0YSsoaXBoLT5paGw8PDIpKTsKIAljb25zdCBpbnQgdHlwZSA9IGljbXBfaGRyKHNrYiktPnR5cGU7CiAJY29uc3QgaW50IGNvZGUgPSBpY21wX2hkcihza2IpLT5jb2RlOwpAQCAtNzA2LDEyICs3MDYsMTEgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgdWRwX3NlbmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBkYWRkciwgX19iZTMyIGRwb3J0KQorc3RhdGljIGludCB1ZHBfc2VuZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZsb3dpNCAqZmw0KQogewogCXN0cnVjdCBzb2NrICpzayA9IHNrYi0+c2s7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCB1ZHBoZHIgKnVoOwotCXN0cnVjdCBydGFibGUgKnJ0ID0gKHN0cnVjdCBydGFibGUgKilza2JfZHN0KHNrYik7CiAJaW50IGVyciA9IDA7CiAJaW50IGlzX3VkcGxpdGUgPSBJU19VRFBMSVRFKHNrKTsKIAlpbnQgb2Zmc2V0ID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTsKQEAgLTcyMyw3ICs3MjIsNyBAQAogCSAqLwogCXVoID0gdWRwX2hkcihza2IpOwogCXVoLT5zb3VyY2UgPSBpbmV0LT5pbmV0X3Nwb3J0OwotCXVoLT5kZXN0ID0gZHBvcnQ7CisJdWgtPmRlc3QgPSBmbDQtPmZsNF9kcG9ydDsKIAl1aC0+bGVuID0gaHRvbnMobGVuKTsKIAl1aC0+Y2hlY2sgPSAwOwogCkBAIC03MzcsMTQgKzczNiwxNCBAQAogCiAJfSBlbHNlIGlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7IC8qIFVEUCBoYXJkd2FyZSBjc3VtICovCiAKLQkJdWRwNF9od2NzdW0oc2tiLCBydC0+cnRfc3JjLCBkYWRkcik7CisJCXVkcDRfaHdjc3VtKHNrYiwgZmw0LT5zYWRkciwgZmw0LT5kYWRkcik7CiAJCWdvdG8gc2VuZDsKIAogCX0gZWxzZQogCQljc3VtID0gdWRwX2NzdW0oc2tiKTsKIAogCS8qIGFkZCBwcm90b2NvbC1kZXBlbmRlbnQgcHNldWRvLWhlYWRlciAqLwotCXVoLT5jaGVjayA9IGNzdW1fdGNwdWRwX21hZ2ljKHJ0LT5ydF9zcmMsIGRhZGRyLCBsZW4sCisJdWgtPmNoZWNrID0gY3N1bV90Y3B1ZHBfbWFnaWMoZmw0LT5zYWRkciwgZmw0LT5kYWRkciwgbGVuLAogCQkJCSAgICAgIHNrLT5za19wcm90b2NvbCwgY3N1bSk7CiAJaWYgKHVoLT5jaGVjayA9PSAwKQogCQl1aC0+Y2hlY2sgPSBDU1VNX01BTkdMRURfMDsKQEAgLTc3NCwxMSArNzczLDExIEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgZXJyID0gMDsKIAotCXNrYiA9IGlwX2ZpbmlzaF9za2Ioc2spOworCXNrYiA9IGlwX2ZpbmlzaF9za2Ioc2ssIGZsNCk7CiAJaWYgKCFza2IpCiAJCWdvdG8gb3V0OwogCi0JZXJyID0gdWRwX3NlbmRfc2tiKHNrYiwgZmw0LT5kYWRkciwgZmw0LT5mbDRfZHBvcnQpOworCWVyciA9IHVkcF9zZW5kX3NrYihza2IsIGZsNCk7CiAKIG91dDoKIAl1cC0+bGVuID0gMDsKQEAgLTc5MSw2ICs3OTAsNyBAQAogewogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAlzdHJ1Y3QgdWRwX3NvY2sgKnVwID0gdWRwX3NrKHNrKTsKKwlzdHJ1Y3QgZmxvd2k0IGZsNF9zdGFjazsKIAlzdHJ1Y3QgZmxvd2k0ICpmbDQ7CiAJaW50IHVsZW4gPSBsZW47CiAJc3RydWN0IGlwY21fY29va2llIGlwYzsKQEAgLTgwNCw2ICs4MDQsNyBAQAogCWludCBjb3JrcmVxID0gdXAtPmNvcmtmbGFnIHx8IG1zZy0+bXNnX2ZsYWdzJk1TR19NT1JFOwogCWludCAoKmdldGZyYWcpKHZvaWQgKiwgY2hhciAqLCBpbnQsIGludCwgaW50LCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpcF9vcHRpb25zX2RhdGEgb3B0X2NvcHk7CiAKIAlpZiAobGVuID4gMHhGRkZGKQogCQlyZXR1cm4gLUVNU0dTSVpFOwpAQCAtODIwLDYgKzgyMSw3IEBACiAKIAlnZXRmcmFnID0gaXNfdWRwbGl0ZSA/IHVkcGxpdGVfZ2V0ZnJhZyA6IGlwX2dlbmVyaWNfZ2V0ZnJhZzsKIAorCWZsNCA9ICZpbmV0LT5jb3JrLmZsLnUuaXA0OwogCWlmICh1cC0+cGVuZGluZykgewogCQkvKgogCQkgKiBUaGVyZSBhcmUgcGVuZGluZyBmcmFtZXMuCkBAIC04NzcsMjIgKzg3OSwzMiBAQAogCQkJZnJlZSA9IDE7CiAJCWNvbm5lY3RlZCA9IDA7CiAJfQotCWlmICghaXBjLm9wdCkKLQkJaXBjLm9wdCA9IGluZXQtPm9wdDsKKwlpZiAoIWlwYy5vcHQpIHsKKwkJc3RydWN0IGlwX29wdGlvbnNfcmN1ICppbmV0X29wdDsKKworCQlyY3VfcmVhZF9sb2NrKCk7CisJCWluZXRfb3B0ID0gcmN1X2RlcmVmZXJlbmNlKGluZXQtPmluZXRfb3B0KTsKKwkJaWYgKGluZXRfb3B0KSB7CisJCQltZW1jcHkoJm9wdF9jb3B5LCBpbmV0X29wdCwKKwkJCSAgICAgICBzaXplb2YoKmluZXRfb3B0KSArIGluZXRfb3B0LT5vcHQub3B0bGVuKTsKKwkJCWlwYy5vcHQgPSAmb3B0X2NvcHkub3B0OworCQl9CisJCXJjdV9yZWFkX3VubG9jaygpOworCX0KIAogCXNhZGRyID0gaXBjLmFkZHI7CiAJaXBjLmFkZHIgPSBmYWRkciA9IGRhZGRyOwogCi0JaWYgKGlwYy5vcHQgJiYgaXBjLm9wdC0+c3JyKSB7CisJaWYgKGlwYy5vcHQgJiYgaXBjLm9wdC0+b3B0LnNycikgewogCQlpZiAoIWRhZGRyKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWZhZGRyID0gaXBjLm9wdC0+ZmFkZHI7CisJCWZhZGRyID0gaXBjLm9wdC0+b3B0LmZhZGRyOwogCQljb25uZWN0ZWQgPSAwOwogCX0KIAl0b3MgPSBSVF9UT1MoaW5ldC0+dG9zKTsKIAlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0xPQ0FMUk9VVEUpIHx8CiAJICAgIChtc2ctPm1zZ19mbGFncyAmIE1TR19ET05UUk9VVEUpIHx8Ci0JICAgIChpcGMub3B0ICYmIGlwYy5vcHQtPmlzX3N0cmljdHJvdXRlKSkgeworCSAgICAoaXBjLm9wdCAmJiBpcGMub3B0LT5vcHQuaXNfc3RyaWN0cm91dGUpKSB7CiAJCXRvcyB8PSBSVE9fT05MSU5LOwogCQljb25uZWN0ZWQgPSAwOwogCX0KQEAgLTkwOSwyMiArOTIxLDE2IEBACiAJCXJ0ID0gKHN0cnVjdCBydGFibGUgKilza19kc3RfY2hlY2soc2ssIDApOwogCiAJaWYgKHJ0ID09IE5VTEwpIHsKLQkJc3RydWN0IGZsb3dpNCBmbDQgPSB7Ci0JCQkuZmxvd2k0X29pZiA9IGlwYy5vaWYsCi0JCQkuZmxvd2k0X21hcmsgPSBzay0+c2tfbWFyaywKLQkJCS5kYWRkciA9IGZhZGRyLAotCQkJLnNhZGRyID0gc2FkZHIsCi0JCQkuZmxvd2k0X3RvcyA9IHRvcywKLQkJCS5mbG93aTRfcHJvdG8gPSBzay0+c2tfcHJvdG9jb2wsCi0JCQkuZmxvd2k0X2ZsYWdzID0gKGluZXRfc2tfZmxvd2lfZmxhZ3Moc2spIHwKLQkJCQkJIEZMT1dJX0ZMQUdfQ0FOX1NMRUVQKSwKLQkJCS5mbDRfc3BvcnQgPSBpbmV0LT5pbmV0X3Nwb3J0LAotCQkJLmZsNF9kcG9ydCA9IGRwb3J0LAotCQl9OwogCQlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAKLQkJc2VjdXJpdHlfc2tfY2xhc3NpZnlfZmxvdyhzaywgZmxvd2k0X3RvX2Zsb3dpKCZmbDQpKTsKLQkJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsICZmbDQsIHNrKTsKKwkJZmw0ID0gJmZsNF9zdGFjazsKKwkJZmxvd2k0X2luaXRfb3V0cHV0KGZsNCwgaXBjLm9pZiwgc2stPnNrX21hcmssIHRvcywKKwkJCQkgICBSVF9TQ09QRV9VTklWRVJTRSwgc2stPnNrX3Byb3RvY29sLAorCQkJCSAgIGluZXRfc2tfZmxvd2lfZmxhZ3Moc2spfEZMT1dJX0ZMQUdfQ0FOX1NMRUVQLAorCQkJCSAgIGZhZGRyLCBzYWRkciwgZHBvcnQsIGluZXQtPmluZXRfc3BvcnQpOworCisJCXNlY3VyaXR5X3NrX2NsYXNzaWZ5X2Zsb3coc2ssIGZsb3dpNF90b19mbG93aShmbDQpKTsKKwkJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsIGZsNCwgc2spOwogCQlpZiAoSVNfRVJSKHJ0KSkgewogCQkJZXJyID0gUFRSX0VSUihydCk7CiAJCQlydCA9IE5VTEw7CkBAIC05NDUsMTggKzk1MSwxOCBAQAogCQlnb3RvIGRvX2NvbmZpcm07CiBiYWNrX2Zyb21fY29uZmlybToKIAotCXNhZGRyID0gcnQtPnJ0X3NyYzsKKwlzYWRkciA9IGZsNC0+c2FkZHI7CiAJaWYgKCFpcGMuYWRkcikKLQkJZGFkZHIgPSBpcGMuYWRkciA9IHJ0LT5ydF9kc3Q7CisJCWRhZGRyID0gaXBjLmFkZHIgPSBmbDQtPmRhZGRyOwogCiAJLyogTG9ja2xlc3MgZmFzdCBwYXRoIGZvciB0aGUgbm9uLWNvcmtpbmcgY2FzZS4gKi8KIAlpZiAoIWNvcmtyZXEpIHsKLQkJc2tiID0gaXBfbWFrZV9za2Ioc2ssIGdldGZyYWcsIG1zZy0+bXNnX2lvdiwgdWxlbiwKKwkJc2tiID0gaXBfbWFrZV9za2Ioc2ssIGZsNCwgZ2V0ZnJhZywgbXNnLT5tc2dfaW92LCB1bGVuLAogCQkJCSAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLCAmaXBjLCAmcnQsCiAJCQkJICBtc2ctPm1zZ19mbGFncyk7CiAJCWVyciA9IFBUUl9FUlIoc2tiKTsKIAkJaWYgKHNrYiAmJiAhSVNfRVJSKHNrYikpCi0JCQllcnIgPSB1ZHBfc2VuZF9za2Ioc2tiLCBkYWRkciwgZHBvcnQpOworCQkJZXJyID0gdWRwX3NlbmRfc2tiKHNrYiwgZmw0KTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC05ODIsOSArOTg4LDkgQEAKIAogZG9fYXBwZW5kX2RhdGE6CiAJdXAtPmxlbiArPSB1bGVuOwotCWVyciA9IGlwX2FwcGVuZF9kYXRhKHNrLCBnZXRmcmFnLCBtc2ctPm1zZ19pb3YsIHVsZW4sCi0JCQlzaXplb2Yoc3RydWN0IHVkcGhkciksICZpcGMsICZydCwKLQkJCWNvcmtyZXEgPyBtc2ctPm1zZ19mbGFnc3xNU0dfTU9SRSA6IG1zZy0+bXNnX2ZsYWdzKTsKKwllcnIgPSBpcF9hcHBlbmRfZGF0YShzaywgZmw0LCBnZXRmcmFnLCBtc2ctPm1zZ19pb3YsIHVsZW4sCisJCQkgICAgIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSwgJmlwYywgJnJ0LAorCQkJICAgICBjb3JrcmVxID8gbXNnLT5tc2dfZmxhZ3N8TVNHX01PUkUgOiBtc2ctPm1zZ19mbGFncyk7CiAJaWYgKGVycikKIAkJdWRwX2ZsdXNoX3BlbmRpbmdfZnJhbWVzKHNrKTsKIAllbHNlIGlmICghY29ya3JlcSkKQEAgLTEwMjQsNiArMTAzMCw3IEBACiBpbnQgdWRwX3NlbmRwYWdlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvZmZzZXQsCiAJCSBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogeworCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAlzdHJ1Y3QgdWRwX3NvY2sgKnVwID0gdWRwX3NrKHNrKTsKIAlpbnQgcmV0OwogCkBAIC0xMDQ4LDcgKzEwNTUsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlyZXQgPSBpcF9hcHBlbmRfcGFnZShzaywgcGFnZSwgb2Zmc2V0LCBzaXplLCBmbGFncyk7CisJcmV0ID0gaXBfYXBwZW5kX3BhZ2Uoc2ssICZpbmV0LT5jb3JrLmZsLnUuaXA0LAorCQkJICAgICBwYWdlLCBvZmZzZXQsIHNpemUsIGZsYWdzKTsKIAlpZiAocmV0ID09IC1FT1BOT1RTVVBQKSB7CiAJCXJlbGVhc2Vfc29jayhzayk7CiAJCXJldHVybiBzb2NrX25vX3NlbmRwYWdlKHNrLT5za19zb2NrZXQsIHBhZ2UsIG9mZnNldCwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X291dHB1dC5jIGIvbmV0L2lwdjQveGZybTRfb3V0cHV0LmMKaW5kZXggNTcxYWE5Ni4uMmQ1MTg0MCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQveGZybTRfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQveGZybTRfb3V0cHV0LmMKQEAgLTY5LDcgKzY5LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woeGZybTRfcHJlcGFyZV9vdXRwdXQpOwogCi1zdGF0aWMgaW50IHhmcm00X291dHB1dF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYikKK2ludCB4ZnJtNF9vdXRwdXRfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUgogCWlmICghc2tiX2RzdChza2IpLT54ZnJtKSB7CkBAIC04Niw3ICs4NiwxMSBAQAogCiBpbnQgeGZybTRfb3V0cHV0KHN0cnVjdCBza19idWZmICpza2IpCiB7CisJc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tiX2RzdChza2IpOworCXN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gZHN0LT54ZnJtOworCiAJcmV0dXJuIE5GX0hPT0tfQ09ORChORlBST1RPX0lQVjQsIE5GX0lORVRfUE9TVF9ST1VUSU5HLCBza2IsCi0JCQkgICAgTlVMTCwgc2tiX2RzdChza2IpLT5kZXYsIHhmcm00X291dHB1dF9maW5pc2gsCisJCQkgICAgTlVMTCwgZHN0LT5kZXYsCisJCQkgICAgeC0+b3V0ZXJfbW9kZS0+YWZpbmZvLT5vdXRwdXRfZmluaXNoLAogCQkJICAgICEoSVBDQihza2IpLT5mbGFncyAmIElQU0tCX1JFUk9VVEVEKSk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCmluZGV4IGQyMGEwNWUuLjk4MWU0M2UgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCisrKyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCkBAIC0xOCwzOCArMTgsNDYgQEAKIAogc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8geGZybTRfcG9saWN5X2FmaW5mbzsKIAotc3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnhmcm00X2RzdF9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBpbnQgdG9zLAotCQkJCQkgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkciwKLQkJCQkJICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIpCitzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqX194ZnJtNF9kc3RfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNCAqZmw0LAorCQkJCQkgICAgaW50IHRvcywKKwkJCQkJICAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkciwKKwkJCQkJICAgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkcikKIHsKLQlzdHJ1Y3QgZmxvd2k0IGZsNCA9IHsKLQkJLmRhZGRyID0gZGFkZHItPmE0LAotCQkuZmxvd2k0X3RvcyA9IHRvcywKLQl9OwogCXN0cnVjdCBydGFibGUgKnJ0OwogCisJbWVtc2V0KGZsNCwgMCwgc2l6ZW9mKCpmbDQpKTsKKwlmbDQtPmRhZGRyID0gZGFkZHItPmE0OworCWZsNC0+Zmxvd2k0X3RvcyA9IHRvczsKIAlpZiAoc2FkZHIpCi0JCWZsNC5zYWRkciA9IHNhZGRyLT5hNDsKKwkJZmw0LT5zYWRkciA9IHNhZGRyLT5hNDsKIAotCXJ0ID0gX19pcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgJmZsNCk7CisJcnQgPSBfX2lwX3JvdXRlX291dHB1dF9rZXkobmV0LCBmbDQpOwogCWlmICghSVNfRVJSKHJ0KSkKIAkJcmV0dXJuICZydC0+ZHN0OwogCiAJcmV0dXJuIEVSUl9DQVNUKHJ0KTsKIH0KIAorc3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnhmcm00X2RzdF9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBpbnQgdG9zLAorCQkJCQkgIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkciwKKwkJCQkJICBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIpCit7CisJc3RydWN0IGZsb3dpNCBmbDQ7CisKKwlyZXR1cm4gX194ZnJtNF9kc3RfbG9va3VwKG5ldCwgJmZsNCwgdG9zLCBzYWRkciwgZGFkZHIpOworfQorCiBzdGF0aWMgaW50IHhmcm00X2dldF9zYWRkcihzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkgICB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsIHhmcm1fYWRkcmVzc190ICpkYWRkcikKIHsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7Ci0Jc3RydWN0IHJ0YWJsZSAqcnQ7CisJc3RydWN0IGZsb3dpNCBmbDQ7CiAKLQlkc3QgPSB4ZnJtNF9kc3RfbG9va3VwKG5ldCwgMCwgTlVMTCwgZGFkZHIpOworCWRzdCA9IF9feGZybTRfZHN0X2xvb2t1cChuZXQsICZmbDQsIDAsIE5VTEwsIGRhZGRyKTsKIAlpZiAoSVNfRVJSKGRzdCkpCiAJCXJldHVybiAtRUhPU1RVTlJFQUNIOwogCi0JcnQgPSAoc3RydWN0IHJ0YWJsZSAqKWRzdDsKLQlzYWRkci0+YTQgPSBydC0+cnRfc3JjOworCXNhZGRyLT5hNCA9IGZsNC5zYWRkcjsKIAlkc3RfcmVsZWFzZShkc3QpOwogCXJldHVybiAwOwogfQpAQCAtNzMsNyArODEsNyBAQAogCiAJcnQtPnJ0X2tleV9kc3QgPSBmbDQtPmRhZGRyOwogCXJ0LT5ydF9rZXlfc3JjID0gZmw0LT5zYWRkcjsKLQlydC0+cnRfdG9zID0gZmw0LT5mbG93aTRfdG9zOworCXJ0LT5ydF9rZXlfdG9zID0gZmw0LT5mbG93aTRfdG9zOwogCXJ0LT5ydF9yb3V0ZV9paWYgPSBmbDQtPmZsb3dpNF9paWY7CiAJcnQtPnJ0X2lpZiA9IGZsNC0+Zmxvd2k0X2lpZjsKIAlydC0+cnRfb2lmID0gZmw0LT5mbG93aTRfb2lmOwpAQCAtMTAyLDcgKzExMCw3IEBACiBzdGF0aWMgdm9pZAogX2RlY29kZV9zZXNzaW9uNChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2kgKmZsLCBpbnQgcmV2ZXJzZSkKIHsKLQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7CiAJdTggKnhwcnRoID0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBpcGgtPmlobCAqIDQ7CiAJc3RydWN0IGZsb3dpNCAqZmw0ID0gJmZsLT51LmlwNDsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQveGZybTRfc3RhdGUuYyBiL25ldC9pcHY0L3hmcm00X3N0YXRlLmMKaW5kZXggMTcxN2M2NC4uZDlhYzBhMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQveGZybTRfc3RhdGUuYworKysgYi9uZXQvaXB2NC94ZnJtNF9zdGF0ZS5jCkBAIC01NSw3ICs1NSw3IEBACiAKIGludCB4ZnJtNF9leHRyYWN0X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTsKIAogCVhGUk1fTU9ERV9TS0JfQ0Ioc2tiKS0+aWhsID0gc2l6ZW9mKCppcGgpOwogCVhGUk1fTU9ERV9TS0JfQ0Ioc2tiKS0+aWQgPSBpcGgtPmlkOwpAQCAtNzgsNiArNzgsNyBAQAogCS5pbml0X3RlbXBzZWwJCT0gX194ZnJtNF9pbml0X3RlbXBzZWwsCiAJLmluaXRfdGVtcHJvcAkJPSB4ZnJtNF9pbml0X3RlbXByb3AsCiAJLm91dHB1dAkJCT0geGZybTRfb3V0cHV0LAorCS5vdXRwdXRfZmluaXNoCQk9IHhmcm00X291dHB1dF9maW5pc2gsCiAJLmV4dHJhY3RfaW5wdXQJCT0geGZybTRfZXh0cmFjdF9pbnB1dCwKIAkuZXh0cmFjdF9vdXRwdXQJCT0geGZybTRfZXh0cmFjdF9vdXRwdXQsCiAJLnRyYW5zcG9ydF9maW5pc2gJPSB4ZnJtNF90cmFuc3BvcnRfZmluaXNoLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmMKaW5kZXggMTQ5MzUzNC4uNDk4YjkyNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuYworKysgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCkBAIC0yODksMTkgKzI4OSwxOSBAQAogCQkJICBzaXplb2Yoc3RydWN0IGlwc3RhdHNfbWliKSwKIAkJCSAgX19hbGlnbm9mX18oc3RydWN0IGlwc3RhdHNfbWliKSkgPCAwKQogCQlnb3RvIGVycl9pcDsKLQlpZiAoc25tcF9taWJfaW5pdCgodm9pZCBfX3BlcmNwdSAqKilpZGV2LT5zdGF0cy5pY21wdjYsCi0JCQkgIHNpemVvZihzdHJ1Y3QgaWNtcHY2X21pYiksCi0JCQkgIF9fYWxpZ25vZl9fKHN0cnVjdCBpY21wdjZfbWliKSkgPCAwKQorCWlkZXYtPnN0YXRzLmljbXB2NmRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpY21wdjZfbWliX2RldmljZSksCisJCQkJCUdGUF9LRVJORUwpOworCWlmICghaWRldi0+c3RhdHMuaWNtcHY2ZGV2KQogCQlnb3RvIGVycl9pY21wOwotCWlmIChzbm1wX21pYl9pbml0KCh2b2lkIF9fcGVyY3B1ICoqKWlkZXYtPnN0YXRzLmljbXB2Nm1zZywKLQkJCSAgc2l6ZW9mKHN0cnVjdCBpY21wdjZtc2dfbWliKSwKLQkJCSAgX19hbGlnbm9mX18oc3RydWN0IGljbXB2Nm1zZ19taWIpKSA8IDApCisJaWRldi0+c3RhdHMuaWNtcHY2bXNnZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGljbXB2Nm1zZ19taWJfZGV2aWNlKSwKKwkJCQkJICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFpZGV2LT5zdGF0cy5pY21wdjZtc2dkZXYpCiAJCWdvdG8gZXJyX2ljbXBtc2c7CiAKIAlyZXR1cm4gMDsKIAogZXJyX2ljbXBtc2c6Ci0Jc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKilpZGV2LT5zdGF0cy5pY21wdjYpOworCWtmcmVlKGlkZXYtPnN0YXRzLmljbXB2NmRldik7CiBlcnJfaWNtcDoKIAlzbm1wX21pYl9mcmVlKCh2b2lkIF9fcGVyY3B1ICoqKWlkZXYtPnN0YXRzLmlwdjYpOwogZXJyX2lwOgpAQCAtMzEwLDE5ICszMTAsMTMgQEAKIAogc3RhdGljIHZvaWQgc25tcDZfZnJlZV9kZXYoc3RydWN0IGluZXQ2X2RldiAqaWRldikKIHsKLQlzbm1wX21pYl9mcmVlKCh2b2lkIF9fcGVyY3B1ICoqKWlkZXYtPnN0YXRzLmljbXB2Nm1zZyk7Ci0Jc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKilpZGV2LT5zdGF0cy5pY21wdjYpOworCWtmcmVlKGlkZXYtPnN0YXRzLmljbXB2Nm1zZ2Rldik7CisJa2ZyZWUoaWRldi0+c3RhdHMuaWNtcHY2ZGV2KTsKIAlzbm1wX21pYl9mcmVlKCh2b2lkIF9fcGVyY3B1ICoqKWlkZXYtPnN0YXRzLmlwdjYpOwogfQogCiAvKiBOb2JvZHkgcmVmZXJzIHRvIHRoaXMgZGV2aWNlLCB3ZSBtYXkgZGVzdHJveSBpdC4gKi8KIAotc3RhdGljIHZvaWQgaW42X2Rldl9maW5pc2hfZGVzdHJveV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKQotewotCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGluZXQ2X2RldiwgcmN1KTsKLQlrZnJlZShpZGV2KTsKLX0KLQogdm9pZCBpbjZfZGV2X2ZpbmlzaF9kZXN0cm95KHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGlkZXYtPmRldjsKQEAgLTMzOSw3ICszMzMsNyBAQAogCQlyZXR1cm47CiAJfQogCXNubXA2X2ZyZWVfZGV2KGlkZXYpOwotCWNhbGxfcmN1KCZpZGV2LT5yY3UsIGluNl9kZXZfZmluaXNoX2Rlc3Ryb3lfcmN1KTsKKwlrZnJlZV9yY3UoaWRldiwgcmN1KTsKIH0KIAogRVhQT1JUX1NZTUJPTChpbjZfZGV2X2ZpbmlzaF9kZXN0cm95KTsKQEAgLTUzNSwxMiArNTI5LDYgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgdm9pZCBpbmV0Nl9pZmFfZmluaXNoX2Rlc3Ryb3lfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKLXsKLQlzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnAgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGluZXQ2X2lmYWRkciwgcmN1KTsKLQlrZnJlZShpZnApOwotfQotCiAvKiBOb2JvZHkgcmVmZXJzIHRvIHRoaXMgaWZhZGRyLCBkZXN0cm95IGl0ICovCiB2b2lkIGluZXQ2X2lmYV9maW5pc2hfZGVzdHJveShzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnApCiB7CkBAIC01NjEsNyArNTQ5LDcgQEAKIAl9CiAJZHN0X3JlbGVhc2UoJmlmcC0+cnQtPmRzdCk7CiAKLQljYWxsX3JjdSgmaWZwLT5yY3UsIGluZXQ2X2lmYV9maW5pc2hfZGVzdHJveV9yY3UpOworCWtmcmVlX3JjdShpZnAsIHJjdSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC04MjUsNiArODEzLDggQEAKIAkJZHN0X3JlbGVhc2UoJnJ0LT5kc3QpOwogCX0KIAorCS8qIGNsZWFuIHVwIHByZWZzcmMgZW50cmllcyAqLworCXJ0Nl9yZW1vdmVfcHJlZnNyYyhpZnApOwogb3V0OgogCWluNl9pZmFfcHV0KGlmcCk7CiB9CkBAIC0xMjgxLDcgKzEyNzEsNyBAQAogCXJldHVybiBjbnQ7CiB9CiAKLWludCBpcHY2X2Noa19hZGRyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGluNl9hZGRyICphZGRyLAoraW50IGlwdjZfY2hrX2FkZHIoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsCiAJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHN0cmljdCkKIHsKIAlzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnA7CkBAIC0xMzI0LDcgKzEzMTQsNyBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotaW50IGlwdjZfY2hrX3ByZWZpeChzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitpbnQgaXB2Nl9jaGtfcHJlZml4KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2OwogCXN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmYTsKQEAgLTE0NTUsNyArMTQ0NSw3IEBACiAKIC8qIEpvaW4gdG8gc29saWNpdGVkIGFkZHIgbXVsdGljYXN0IGdyb3VwLiAqLwogCi12b2lkIGFkZHJjb25mX2pvaW5fc29saWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpbjZfYWRkciAqYWRkcikKK3ZvaWQgYWRkcmNvbmZfam9pbl9zb2xpY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKQogewogCXN0cnVjdCBpbjZfYWRkciBtYWRkcjsKIApAQCAtMTQ2Niw3ICsxNDU2LDcgQEAKIAlpcHY2X2Rldl9tY19pbmMoZGV2LCAmbWFkZHIpOwogfQogCi12b2lkIGFkZHJjb25mX2xlYXZlX3NvbGljdChzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCit2b2lkIGFkZHJjb25mX2xlYXZlX3NvbGljdChzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCiB7CiAJc3RydWN0IGluNl9hZGRyIG1hZGRyOwogCkBAIC0yMTExLDcgKzIxMDEsNyBAQAogLyoKICAqCU1hbnVhbCBjb25maWd1cmF0aW9uIG9mIGFkZHJlc3Mgb24gYW4gaW50ZXJmYWNlCiAgKi8KLXN0YXRpYyBpbnQgaW5ldDZfYWRkcl9hZGQoc3RydWN0IG5ldCAqbmV0LCBpbnQgaWZpbmRleCwgc3RydWN0IGluNl9hZGRyICpwZngsCitzdGF0aWMgaW50IGluZXQ2X2FkZHJfYWRkKHN0cnVjdCBuZXQgKm5ldCwgaW50IGlmaW5kZXgsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqcGZ4LAogCQkJICB1bnNpZ25lZCBpbnQgcGxlbiwgX191OCBpZmFfZmxhZ3MsIF9fdTMyIHByZWZlcmVkX2xmdCwKIAkJCSAgX191MzIgdmFsaWRfbGZ0KQogewpAQCAtMjE4NSw3ICsyMTc1LDcgQEAKIAlyZXR1cm4gUFRSX0VSUihpZnApOwogfQogCi1zdGF0aWMgaW50IGluZXQ2X2FkZHJfZGVsKHN0cnVjdCBuZXQgKm5ldCwgaW50IGlmaW5kZXgsIHN0cnVjdCBpbjZfYWRkciAqcGZ4LAorc3RhdGljIGludCBpbmV0Nl9hZGRyX2RlbChzdHJ1Y3QgbmV0ICpuZXQsIGludCBpZmluZGV4LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnBmeCwKIAkJCSAgdW5zaWduZWQgaW50IHBsZW4pCiB7CiAJc3RydWN0IGluZXQ2X2lmYWRkciAqaWZwOwpAQCAtMjM0OCw3ICsyMzM4LDcgQEAKIAlhZGRfYWRkcihpZGV2LCAmaW42YWRkcl9sb29wYmFjaywgMTI4LCBJRkFfSE9TVCk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZHJjb25mX2FkZF9saW5rbG9jYWwoc3RydWN0IGluZXQ2X2RldiAqaWRldiwgc3RydWN0IGluNl9hZGRyICphZGRyKQorc3RhdGljIHZvaWQgYWRkcmNvbmZfYWRkX2xpbmtsb2NhbChzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCiB7CiAJc3RydWN0IGluZXQ2X2lmYWRkciAqIGlmcDsKIAl1MzIgYWRkcl9mbGFncyA9IElGQV9GX1BFUk1BTkVOVDsKQEAgLTMxMTksNyArMzEwOSw3IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19JUFY2X01JUDYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTUlQNl9NT0RVTEUpCiAvKiBDaGVjayBpZiBhZGRyZXNzIGlzIGEgaG9tZSBhZGRyZXNzIGNvbmZpZ3VyZWQgb24gYW55IGludGVyZmFjZS4gKi8KLWludCBpcHY2X2Noa19ob21lX2FkZHIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCitpbnQgaXB2Nl9jaGtfaG9tZV9hZGRyKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKQogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcCA9IE5VTEw7CkBAIC0zODM2LDcgKzM4MjYsNyBAQAogCSAgICAgICArIG5sYV90b3RhbF9zaXplKGluZXQ2X2lmbGE2X3NpemUoKSk7IC8qIElGTEFfUFJPVElORk8gKi8KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fc25tcDZfZmlsbF9zdGF0cyh1NjQgKnN0YXRzLCB2b2lkIF9fcGVyY3B1ICoqbWliLAorc3RhdGljIGlubGluZSB2b2lkIF9fc25tcDZfZmlsbF9zdGF0c2Rldih1NjQgKnN0YXRzLCBhdG9taWNfbG9uZ190ICptaWIsCiAJCQkJICAgICAgaW50IGl0ZW1zLCBpbnQgYnl0ZXMpCiB7CiAJaW50IGk7CkBAIC0zODQ2LDcgKzM4MzYsNyBAQAogCS8qIFVzZSBwdXRfdW5hbGlnbmVkKCkgYmVjYXVzZSBzdGF0cyBtYXkgbm90IGJlIGFsaWduZWQgZm9yIHU2NC4gKi8KIAlwdXRfdW5hbGlnbmVkKGl0ZW1zLCAmc3RhdHNbMF0pOwogCWZvciAoaSA9IDE7IGkgPCBpdGVtczsgaSsrKQotCQlwdXRfdW5hbGlnbmVkKHNubXBfZm9sZF9maWVsZChtaWIsIGkpLCAmc3RhdHNbaV0pOworCQlwdXRfdW5hbGlnbmVkKGF0b21pY19sb25nX3JlYWQoJm1pYltpXSksICZzdGF0c1tpXSk7CiAKIAltZW1zZXQoJnN0YXRzW2l0ZW1zXSwgMCwgcGFkKTsKIH0KQEAgLTM4NzUsNyArMzg2NSw3IEBACiAJCQkJICAgICBJUFNUQVRTX01JQl9NQVgsIGJ5dGVzLCBvZmZzZXRvZihzdHJ1Y3QgaXBzdGF0c19taWIsIHN5bmNwKSk7CiAJCWJyZWFrOwogCWNhc2UgSUZMQV9JTkVUNl9JQ01QNlNUQVRTOgotCQlfX3NubXA2X2ZpbGxfc3RhdHMoc3RhdHMsICh2b2lkIF9fcGVyY3B1ICoqKWlkZXYtPnN0YXRzLmljbXB2NiwgSUNNUDZfTUlCX01BWCwgYnl0ZXMpOworCQlfX3NubXA2X2ZpbGxfc3RhdHNkZXYoc3RhdHMsIGlkZXYtPnN0YXRzLmljbXB2NmRldi0+bWlicywgSUNNUDZfTUlCX01BWCwgYnl0ZXMpOwogCQlicmVhazsKIAl9CiB9CkBAIC00NTM3LDcgKzQ1MjcsNyBAQAogCiAJdCA9IHAtPnN5c2N0bDsKIAlwLT5zeXNjdGwgPSBOVUxMOwotCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHQtPnN5c2N0bF9oZWFkZXIpOworCXVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZSh0LT5zeXNjdGxfaGVhZGVyKTsKIAlrZnJlZSh0LT5kZXZfbmFtZSk7CiAJa2ZyZWUodCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jIGIvbmV0L2lwdjYvYWZfaW5ldDYuYwppbmRleCBhZmNjNzA5Li5iNzkxOWY5IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jCisrKyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKQEAgLTc0MCw3ICs3NDAsNyBAQAogCiBzdGF0aWMgaW50IGlwdjZfZ3NvX3NlbmRfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaXB2NmhkciAqaXB2Nmg7CisJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwdjZoOwogCWNvbnN0IHN0cnVjdCBpbmV0Nl9wcm90b2NvbCAqb3BzOwogCWludCBlcnIgPSAtRUlOVkFMOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hbnljYXN0LmMgYi9uZXQvaXB2Ni9hbnljYXN0LmMKaW5kZXggMGU1ZTk0My4uNjc0MjU1ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYW55Y2FzdC5jCisrKyBiL25ldC9pcHY2L2FueWNhc3QuYwpAQCAtNDQsNyArNDQsNyBAQAogCiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CiAKLXN0YXRpYyBpbnQgaXB2Nl9kZXZfYWNfZGVjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpbjZfYWRkciAqYWRkcik7CitzdGF0aWMgaW50IGlwdjZfZGV2X2FjX2RlYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOwogCiAvKiBCaWcgYWMgbGlzdCBsb2NrIGZvciBhbGwgdGhlIHNvY2tldHMgKi8KIHN0YXRpYyBERUZJTkVfUldMT0NLKGlwdjZfc2tfYWNfbG9jayk7CkBAIC01NCw3ICs1NCw3IEBACiAgKglzb2NrZXQgam9pbiBhbiBhbnljYXN0IGdyb3VwCiAgKi8KIAotaW50IGlwdjZfc29ja19hY19qb2luKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsIHN0cnVjdCBpbjZfYWRkciAqYWRkcikKK2ludCBpcHY2X3NvY2tfYWNfam9pbihzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCiB7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOwpAQCAtMTQ1LDcgKzE0NSw3IEBACiAvKgogICoJc29ja2V0IGxlYXZlIGFuIGFueWNhc3QgZ3JvdXAKICAqLwotaW50IGlwdjZfc29ja19hY19kcm9wKHN0cnVjdCBzb2NrICpzaywgaW50IGlmaW5kZXgsIHN0cnVjdCBpbjZfYWRkciAqYWRkcikKK2ludCBpcHY2X3NvY2tfYWNfZHJvcChzdHJ1Y3Qgc29jayAqc2ssIGludCBpZmluZGV4LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCiB7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC0yNTIsNyArMjUyLDcgQEAKIC8qCiAgKglkZXZpY2UgYW55Y2FzdCBncm91cCBpbmMgKGFkZCBpZiBub3QgZm91bmQpCiAgKi8KLWludCBpcHY2X2Rldl9hY19pbmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGluNl9hZGRyICphZGRyKQoraW50IGlwdjZfZGV2X2FjX2luYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCiB7CiAJc3RydWN0IGlmYWNhZGRyNiAqYWNhOwogCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7CkBAIC0zMjQsNyArMzI0LDcgQEAKIC8qCiAgKglkZXZpY2UgYW55Y2FzdCBncm91cCBkZWNyZW1lbnQKICAqLwotaW50IF9faXB2Nl9kZXZfYWNfZGVjKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsIHN0cnVjdCBpbjZfYWRkciAqYWRkcikKK2ludCBfX2lwdjZfZGV2X2FjX2RlYyhzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCiB7CiAJc3RydWN0IGlmYWNhZGRyNiAqYWNhLCAqcHJldl9hY2E7CiAKQEAgLTM1OCw3ICszNTgsNyBAQAogfQogCiAvKiBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgKi8KLXN0YXRpYyBpbnQgaXB2Nl9kZXZfYWNfZGVjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpbjZfYWRkciAqYWRkcikKK3N0YXRpYyBpbnQgaXB2Nl9kZXZfYWNfZGVjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcikKIHsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gX19pbjZfZGV2X2dldChkZXYpOwogCkBAIC0zNzEsNyArMzcxLDcgQEAKICAqCWNoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaGFzIHRoaXMgYW55Y2FzdCBhZGRyZXNzCiAgKgljYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkKICAqLwotc3RhdGljIGludCBpcHY2X2Noa19hY2FzdF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGluNl9hZGRyICphZGRyKQorc3RhdGljIGludCBpcHY2X2Noa19hY2FzdF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKQogewogCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7CiAJc3RydWN0IGlmYWNhZGRyNiAqYWNhOwpAQCAtMzkyLDcgKzM5Miw3IEBACiAgKgljaGVjayBpZiBnaXZlbiBpbnRlcmZhY2UgKG9yIGFueSwgaWYgZGV2PT0wKSBoYXMgdGhpcyBhbnljYXN0IGFkZHJlc3MKICAqLwogaW50IGlwdjZfY2hrX2FjYXN0X2FkZHIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJc3RydWN0IGluNl9hZGRyICphZGRyKQorCQkJY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKQogewogCWludCBmb3VuZCA9IDA7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2VzcDYuYyBiL25ldC9pcHY2L2VzcDYuYwppbmRleCA1YWE4ZWM4Li4xYWM3OTM4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9lc3A2LmMKKysrIGIvbmV0L2lwdjYvZXNwNi5jCkBAIC0zNzEsNyArMzcxLDcgQEAKIAlpdiA9IGVzcF90bXBfaXYoYWVhZCwgdG1wLCBzZXFoaWxlbik7CiAJcmVxID0gZXNwX3RtcF9yZXEoYWVhZCwgaXYpOwogCWFzZyA9IGVzcF9yZXFfc2coYWVhZCwgcmVxKTsKLQlzZyA9IGFzZyArIDE7CisJc2cgPSBhc2cgKyBzZ2xpc3RzOwogCiAJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCkBAIC00MzAsNyArNDMwLDcgQEAKIAkJICAgICB1OCB0eXBlLCB1OCBjb2RlLCBpbnQgb2Zmc2V0LCBfX2JlMzIgaW5mbykKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0+ZGV2KTsKLQlzdHJ1Y3QgaXB2NmhkciAqaXBoID0gKHN0cnVjdCBpcHY2aGRyKilza2ItPmRhdGE7CisJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwaCA9IChjb25zdCBzdHJ1Y3QgaXB2NmhkciAqKXNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwaCA9IChzdHJ1Y3QgaXBfZXNwX2hkciAqKShza2ItPmRhdGEgKyBvZmZzZXQpOwogCXN0cnVjdCB4ZnJtX3N0YXRlICp4OwogCkBAIC00MzgsNyArNDM4LDggQEAKIAkgICAgdHlwZSAhPSBJQ01QVjZfUEtUX1RPT0JJRykKIAkJcmV0dXJuOwogCi0JeCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgc2tiLT5tYXJrLCAoeGZybV9hZGRyZXNzX3QgKikmaXBoLT5kYWRkciwgZXNwaC0+c3BpLCBJUFBST1RPX0VTUCwgQUZfSU5FVDYpOworCXggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIHNrYi0+bWFyaywgKGNvbnN0IHhmcm1fYWRkcmVzc190ICopJmlwaC0+ZGFkZHIsCisJCQkgICAgICBlc3BoLT5zcGksIElQUFJPVE9fRVNQLCBBRl9JTkVUNik7CiAJaWYgKCF4KQogCQlyZXR1cm47CiAJcHJpbnRrKEtFUk5fREVCVUcgInBtdHUgZGlzY292ZXJ5IG9uIFNBIEVTUC8lMDh4LyVwSTZcbiIsCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pY21wLmMgYi9uZXQvaXB2Ni9pY21wLmMKaW5kZXggODNjYjRmOS4uMTE5MDA0MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaWNtcC5jCisrKyBiL25ldC9pcHY2L2ljbXAuYwpAQCAtMzcyLDcgKzM3Miw3IEBACiAJc3RydWN0IGlwdjZoZHIgKmhkciA9IGlwdjZfaGRyKHNrYik7CiAJc3RydWN0IHNvY2sgKnNrOwogCXN0cnVjdCBpcHY2X3BpbmZvICpucDsKLQlzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyID0gTlVMTDsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CiAJc3RydWN0IGljbXA2aGRyIHRtcF9oZHI7CiAJc3RydWN0IGZsb3dpNiBmbDY7CkBAIC01MjEsNyArNTIxLDcgQEAKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnA7Ci0Jc3RydWN0IGluNl9hZGRyICpzYWRkciA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciA9IE5VTEw7CiAJc3RydWN0IGljbXA2aGRyICppY21waCA9IGljbXA2X2hkcihza2IpOwogCXN0cnVjdCBpY21wNmhkciB0bXBfaGRyOwogCXN0cnVjdCBmbG93aTYgZmw2OwpAQCAtNjQ1LDggKzY0NSw4IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0+ZGV2OwogCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7Ci0Jc3RydWN0IGluNl9hZGRyICpzYWRkciwgKmRhZGRyOwotCXN0cnVjdCBpcHY2aGRyICpvcmlnX2hkcjsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCAqZGFkZHI7CisJY29uc3Qgc3RydWN0IGlwdjZoZHIgKm9yaWdfaGRyOwogCXN0cnVjdCBpY21wNmhkciAqaGRyOwogCXU4IHR5cGU7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjYvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmMKaW5kZXggZjJjNWIwZi4uOGE1OGU4YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmMKKysrIGIvbmV0L2lwdjYvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTIwMyw3ICsyMDMsNyBAQAogCXJldHVybiBkc3Q7CiB9CiAKLWludCBpbmV0Nl9jc2tfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoraW50IGluZXQ2X2Nza194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmbG93aSAqZmxfdW51c2VkKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNrYi0+c2s7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2ZpYi5jIGIvbmV0L2lwdjYvaXA2X2ZpYi5jCmluZGV4IDc1NDg5MDUuLjQwNzZhMGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9maWIuYworKysgYi9uZXQvaXB2Ni9pcDZfZmliLmMKQEAgLTEzNCw5ICsxMzQsOSBAQAogIyBkZWZpbmUgQklUT1BfQkUzMl9TV0laWkxFCTAKICNlbmRpZgogCi1zdGF0aWMgX19pbmxpbmVfXyBfX2JlMzIgYWRkcl9iaXRfc2V0KHZvaWQgKnRva2VuLCBpbnQgZm5fYml0KQorc3RhdGljIF9faW5saW5lX18gX19iZTMyIGFkZHJfYml0X3NldChjb25zdCB2b2lkICp0b2tlbiwgaW50IGZuX2JpdCkKIHsKLQlfX2JlMzIgKmFkZHIgPSB0b2tlbjsKKwljb25zdCBfX2JlMzIgKmFkZHIgPSB0b2tlbjsKIAkvKgogCSAqIEhlcmUsCiAJICogCTEgPDwgKCh+Zm5fYml0IF4gQklUT1BfQkUzMl9TV0laWkxFKSAmIDB4MWYpCkBAIC0zOTQsMTAgKzM5NCwxMSBAQAogCWFyZy5uZXQgPSBuZXQ7CiAJdy0+YXJncyA9ICZhcmc7CiAKKwlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChoID0gc19oOyBoIDwgRklCNl9UQUJMRV9IQVNIU1o7IGgrKywgc19lID0gMCkgewogCQllID0gMDsKIAkJaGVhZCA9ICZuZXQtPmlwdjYuZmliX3RhYmxlX2hhc2hbaF07Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHRiLCBub2RlLCBoZWFkLCB0YjZfaGxpc3QpIHsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHRiLCBub2RlLCBoZWFkLCB0YjZfaGxpc3QpIHsKIAkJCWlmIChlIDwgc19lKQogCQkJCWdvdG8gbmV4dDsKIAkJCXJlcyA9IGZpYjZfZHVtcF90YWJsZSh0Yiwgc2tiLCBjYik7CkBAIC00MDgsNiArNDA5LDcgQEAKIAkJfQogCX0KIG91dDoKKwlyY3VfcmVhZF91bmxvY2soKTsKIAljYi0+YXJnc1sxXSA9IGU7CiAJY2ItPmFyZ3NbMF0gPSBoOwogCkBAIC04MjIsNyArODI0LDcgQEAKIAogc3RydWN0IGxvb2t1cF9hcmdzIHsKIAlpbnQJCW9mZnNldDsJCS8qIGtleSBvZmZzZXQgb24gcnQ2X2luZm8JKi8KLQlzdHJ1Y3QgaW42X2FkZHIJKmFkZHI7CQkvKiBzZWFyY2gga2V5CQkJKi8KKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIJKmFkZHI7CQkvKiBzZWFyY2gga2V5CQkJKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZmliNl9ub2RlICogZmliNl9sb29rdXBfMShzdHJ1Y3QgZmliNl9ub2RlICpyb290LApAQCAtODgxLDggKzg4Myw4IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0cnVjdCBmaWI2X25vZGUgKiBmaWI2X2xvb2t1cChzdHJ1Y3QgZmliNl9ub2RlICpyb290LCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAotCQkJICAgICAgIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpCitzdHJ1Y3QgZmliNl9ub2RlICogZmliNl9sb29rdXAoc3RydWN0IGZpYjZfbm9kZSAqcm9vdCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKQogewogCXN0cnVjdCBmaWI2X25vZGUgKmZuOwogCXN0cnVjdCBsb29rdXBfYXJncyBhcmdzW10gPSB7CkBAIC05MTYsNyArOTE4LDcgQEAKIAogCiBzdGF0aWMgc3RydWN0IGZpYjZfbm9kZSAqIGZpYjZfbG9jYXRlXzEoc3RydWN0IGZpYjZfbm9kZSAqcm9vdCwKLQkJCQkJc3RydWN0IGluNl9hZGRyICphZGRyLAorCQkJCQljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsCiAJCQkJCWludCBwbGVuLCBpbnQgb2Zmc2V0KQogewogCXN0cnVjdCBmaWI2X25vZGUgKmZuOwpAQCAtOTQ2LDggKzk0OCw4IEBACiB9CiAKIHN0cnVjdCBmaWI2X25vZGUgKiBmaWI2X2xvY2F0ZShzdHJ1Y3QgZmliNl9ub2RlICpyb290LAotCQkJICAgICAgIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIGludCBkc3RfbGVuLAotCQkJICAgICAgIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIGludCBzcmNfbGVuKQorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIGludCBkc3RfbGVuLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIGludCBzcmNfbGVuKQogewogCXN0cnVjdCBmaWI2X25vZGUgKmZuOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfaW5wdXQuYyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jCmluZGV4IGE4M2U5MjAuLjAyN2M3ZmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9pbnB1dC5jCisrKyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jCkBAIC01Nyw3ICs1Nyw3IEBACiAKIGludCBpcHY2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7Ci0Jc3RydWN0IGlwdjZoZHIgKmhkcjsKKwljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaGRyOwogCXUzMiAJCXBrdF9sZW47CiAJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0+ZGV2KTsKQEAgLTE4Niw3ICsxODYsNyBAQAogCQlpbnQgcmV0OwogCiAJCWlmIChpcHByb3QtPmZsYWdzICYgSU5FVDZfUFJPVE9fRklOQUwpIHsKLQkJCXN0cnVjdCBpcHY2aGRyICpoZHI7CisJCQljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaGRyOwogCiAJCQkvKiBGcmVlIHJlZmVyZW5jZSBlYXJseTogd2UgZG9uJ3QgbmVlZCBpdCBhbnkgbW9yZSwKIAkJCSAgIGFuZCBpdCBtYXkgaG9sZCBpcF9jb25udHJhY2sgbW9kdWxlIGxvYWRlZApAQCAtMjQyLDcgKzI0Miw3IEBACiAKIGludCBpcDZfbWNfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaXB2NmhkciAqaGRyOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICpoZHI7CiAJaW50IGRlbGl2ZXI7CiAKIAlJUDZfVVBEX1BPX1NUQVRTX0JIKGRldl9uZXQoc2tiX2RzdChza2IpLT5kZXYpLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X291dHB1dC5jIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jCmluZGV4IDQ2Y2Y3YmUuLjlkNGIxNjUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYworKysgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKQEAgLTg2OSw5ICs4NjksOSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGlwNl9ydF9jaGVjayhzdHJ1Y3QgcnQ2a2V5ICpydF9rZXksCi0JCQkgICAgICAgc3RydWN0IGluNl9hZGRyICpmbF9hZGRyLAotCQkJICAgICAgIHN0cnVjdCBpbjZfYWRkciAqYWRkcl9jYWNoZSkKK3N0YXRpYyBpbmxpbmUgaW50IGlwNl9ydF9jaGVjayhjb25zdCBzdHJ1Y3QgcnQ2a2V5ICpydF9rZXksCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpmbF9hZGRyLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcl9jYWNoZSkKIHsKIAlyZXR1cm4gKHJ0X2tleS0+cGxlbiAhPSAxMjggfHwgIWlwdjZfYWRkcl9lcXVhbChmbF9hZGRyLCAmcnRfa2V5LT5hZGRyKSkgJiYKIAkJKGFkZHJfY2FjaGUgPT0gTlVMTCB8fCAhaXB2Nl9hZGRyX2VxdWFsKGZsX2FkZHIsIGFkZHJfY2FjaGUpKTsKQEAgLTg3OSw3ICs4NzksNyBAQAogCiBzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqaXA2X3NrX2RzdF9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSAgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAotCQkJCQkgIHN0cnVjdCBmbG93aTYgKmZsNikKKwkJCQkJICBjb25zdCBzdHJ1Y3QgZmxvd2k2ICpmbDYpCiB7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwogCXN0cnVjdCBydDZfaW5mbyAqcnQgPSAoc3RydWN0IHJ0Nl9pbmZvICopZHN0OwpAQCAtOTMwLDEwICs5MzAsMTAgQEAKIAkJZ290byBvdXRfZXJyX3JlbGVhc2U7CiAKIAlpZiAoaXB2Nl9hZGRyX2FueSgmZmw2LT5zYWRkcikpIHsKLQkJZXJyID0gaXB2Nl9kZXZfZ2V0X3NhZGRyKG5ldCwgaXA2X2RzdF9pZGV2KCpkc3QpLT5kZXYsCi0JCQkJCSAmZmw2LT5kYWRkciwKLQkJCQkJIHNrID8gaW5ldDZfc2soc2spLT5zcmNwcmVmcyA6IDAsCi0JCQkJCSAmZmw2LT5zYWRkcik7CisJCXN0cnVjdCBydDZfaW5mbyAqcnQgPSAoc3RydWN0IHJ0Nl9pbmZvICopICpkc3Q7CisJCWVyciA9IGlwNl9yb3V0ZV9nZXRfc2FkZHIobmV0LCBydCwgJmZsNi0+ZGFkZHIsCisJCQkJCSAgc2sgPyBpbmV0Nl9zayhzayktPnNyY3ByZWZzIDogMCwKKwkJCQkJICAmZmw2LT5zYWRkcik7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dF9lcnJfcmVsZWFzZTsKIAl9CkBAIC0xMTUwLDYgKzExNTAsNyBAQAogewogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CisJc3RydWN0IGluZXRfY29yayAqY29yazsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXVuc2lnbmVkIGludCBtYXhmcmFnbGVuLCBmcmFnaGVhZGVybGVuOwogCWludCBleHRoZHJsZW47CkBAIC0xMTYzLDYgKzExNjQsNyBAQAogCiAJaWYgKGZsYWdzJk1TR19QUk9CRSkKIAkJcmV0dXJuIDA7CisJY29yayA9ICZpbmV0LT5jb3JrLmJhc2U7CiAJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmc2stPnNrX3dyaXRlX3F1ZXVlKSkgewogCQkvKgogCQkgKiBzZXR1cCBmb3IgY29ya2luZwpAQCAtMTIwMiw3ICsxMjA0LDcgQEAKIAkJCS8qIG5lZWQgc291cmNlIGFkZHJlc3MgYWJvdmUgbWl5YXphd2EqLwogCQl9CiAJCWRzdF9ob2xkKCZydC0+ZHN0KTsKLQkJaW5ldC0+Y29yay5kc3QgPSAmcnQtPmRzdDsKKwkJY29yay0+ZHN0ID0gJnJ0LT5kc3Q7CiAJCWluZXQtPmNvcmsuZmwudS5pcDYgPSAqZmw2OwogCQlucC0+Y29yay5ob3BfbGltaXQgPSBobGltaXQ7CiAJCW5wLT5jb3JrLnRjbGFzcyA9IHRjbGFzczsKQEAgLTEyMTIsMTAgKzEyMTQsMTAgQEAKIAkJCWlmIChucC0+ZnJhZ19zaXplKQogCQkJCW10dSA9IG5wLT5mcmFnX3NpemU7CiAJCX0KLQkJaW5ldC0+Y29yay5mcmFnc2l6ZSA9IG10dTsKKwkJY29yay0+ZnJhZ3NpemUgPSBtdHU7CiAJCWlmIChkc3RfYWxsZnJhZyhydC0+ZHN0LnBhdGgpKQotCQkJaW5ldC0+Y29yay5mbGFncyB8PSBJUENPUktfQUxMRlJBRzsKLQkJaW5ldC0+Y29yay5sZW5ndGggPSAwOworCQkJY29yay0+ZmxhZ3MgfD0gSVBDT1JLX0FMTEZSQUc7CisJCWNvcmstPmxlbmd0aCA9IDA7CiAJCXNrLT5za19zbmRtc2dfcGFnZSA9IE5VTEw7CiAJCXNrLT5za19zbmRtc2dfb2ZmID0gMDsKIAkJZXh0aGRybGVuID0gcnQtPmRzdC5oZWFkZXJfbGVuICsgKG9wdCA/IG9wdC0+b3B0X2ZsZW4gOiAwKSAtCkBAIC0xMjIzLDEyICsxMjI1LDEyIEBACiAJCWxlbmd0aCArPSBleHRoZHJsZW47CiAJCXRyYW5zaGRybGVuICs9IGV4dGhkcmxlbjsKIAl9IGVsc2UgewotCQlydCA9IChzdHJ1Y3QgcnQ2X2luZm8gKilpbmV0LT5jb3JrLmRzdDsKKwkJcnQgPSAoc3RydWN0IHJ0Nl9pbmZvICopY29yay0+ZHN0OwogCQlmbDYgPSAmaW5ldC0+Y29yay5mbC51LmlwNjsKIAkJb3B0ID0gbnAtPmNvcmsub3B0OwogCQl0cmFuc2hkcmxlbiA9IDA7CiAJCWV4dGhkcmxlbiA9IDA7Ci0JCW10dSA9IGluZXQtPmNvcmsuZnJhZ3NpemU7CisJCW10dSA9IGNvcmstPmZyYWdzaXplOwogCX0KIAogCWhoX2xlbiA9IExMX1JFU0VSVkVEX1NQQUNFKHJ0LT5kc3QuZGV2KTsKQEAgLTEyMzgsNyArMTI0MCw3IEBACiAJbWF4ZnJhZ2xlbiA9ICgobXR1IC0gZnJhZ2hlYWRlcmxlbikgJiB+NykgKyBmcmFnaGVhZGVybGVuIC0gc2l6ZW9mKHN0cnVjdCBmcmFnX2hkcik7CiAKIAlpZiAobXR1IDw9IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgKyBJUFY2X01BWFBMRU4pIHsKLQkJaWYgKGluZXQtPmNvcmsubGVuZ3RoICsgbGVuZ3RoID4gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSArIElQVjZfTUFYUExFTiAtIGZyYWdoZWFkZXJsZW4pIHsKKwkJaWYgKGNvcmstPmxlbmd0aCArIGxlbmd0aCA+IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgKyBJUFY2X01BWFBMRU4gLSBmcmFnaGVhZGVybGVuKSB7CiAJCQlpcHY2X2xvY2FsX2Vycm9yKHNrLCBFTVNHU0laRSwgZmw2LCBtdHUtZXh0aGRybGVuKTsKIAkJCXJldHVybiAtRU1TR1NJWkU7CiAJCX0KQEAgLTEyNjcsNyArMTI2OSw3IEBACiAJICogLS15b3NoZnVqaQogCSAqLwogCi0JaW5ldC0+Y29yay5sZW5ndGggKz0gbGVuZ3RoOworCWNvcmstPmxlbmd0aCArPSBsZW5ndGg7CiAJaWYgKGxlbmd0aCA+IG10dSkgewogCQlpbnQgcHJvdG8gPSBzay0+c2tfcHJvdG9jb2w7CiAJCWlmIChkb250ZnJhZyAmJiAocHJvdG8gPT0gSVBQUk9UT19VRFAgfHwgcHJvdG8gPT0gSVBQUk9UT19SQVcpKXsKQEAgLTEyOTIsNyArMTI5NCw3IEBACiAKIAl3aGlsZSAobGVuZ3RoID4gMCkgewogCQkvKiBDaGVjayBpZiB0aGUgcmVtYWluaW5nIGRhdGEgZml0cyBpbnRvIGN1cnJlbnQgcGFja2V0LiAqLwotCQljb3B5ID0gKGluZXQtPmNvcmsubGVuZ3RoIDw9IG10dSAmJiAhKGluZXQtPmNvcmsuZmxhZ3MgJiBJUENPUktfQUxMRlJBRykgPyBtdHUgOiBtYXhmcmFnbGVuKSAtIHNrYi0+bGVuOworCQljb3B5ID0gKGNvcmstPmxlbmd0aCA8PSBtdHUgJiYgIShjb3JrLT5mbGFncyAmIElQQ09SS19BTExGUkFHKSA/IG10dSA6IG1heGZyYWdsZW4pIC0gc2tiLT5sZW47CiAJCWlmIChjb3B5IDwgbGVuZ3RoKQogCQkJY29weSA9IG1heGZyYWdsZW4gLSBza2ItPmxlbjsKIApAQCAtMTMxNyw3ICsxMzE5LDcgQEAKIAkJCSAqIHdlIGtub3cgd2UgbmVlZCBtb3JlIGZyYWdtZW50KHMpLgogCQkJICovCiAJCQlkYXRhbGVuID0gbGVuZ3RoICsgZnJhZ2dhcDsKLQkJCWlmIChkYXRhbGVuID4gKGluZXQtPmNvcmsubGVuZ3RoIDw9IG10dSAmJiAhKGluZXQtPmNvcmsuZmxhZ3MgJiBJUENPUktfQUxMRlJBRykgPyBtdHUgOiBtYXhmcmFnbGVuKSAtIGZyYWdoZWFkZXJsZW4pCisJCQlpZiAoZGF0YWxlbiA+IChjb3JrLT5sZW5ndGggPD0gbXR1ICYmICEoY29yay0+ZmxhZ3MgJiBJUENPUktfQUxMRlJBRykgPyBtdHUgOiBtYXhmcmFnbGVuKSAtIGZyYWdoZWFkZXJsZW4pCiAJCQkJZGF0YWxlbiA9IG1heGZyYWdsZW4gLSBmcmFnaGVhZGVybGVuOwogCiAJCQlmcmFnbGVuID0gZGF0YWxlbiArIGZyYWdoZWFkZXJsZW47CkBAIC0xNDgxLDcgKzE0ODMsNyBAQAogCX0KIAlyZXR1cm4gMDsKIGVycm9yOgotCWluZXQtPmNvcmsubGVuZ3RoIC09IGxlbmd0aDsKKwljb3JrLT5sZW5ndGggLT0gbGVuZ3RoOwogCUlQNl9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBydC0+cnQ2aV9pZGV2LCBJUFNUQVRTX01JQl9PVVRESVNDQVJEUyk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTE0OTcsMTAgKzE0OTksMTAgQEAKIAkJbnAtPmNvcmsub3B0ID0gTlVMTDsKIAl9CiAKLQlpZiAoaW5ldC0+Y29yay5kc3QpIHsKLQkJZHN0X3JlbGVhc2UoaW5ldC0+Y29yay5kc3QpOwotCQlpbmV0LT5jb3JrLmRzdCA9IE5VTEw7Ci0JCWluZXQtPmNvcmsuZmxhZ3MgJj0gfklQQ09SS19BTExGUkFHOworCWlmIChpbmV0LT5jb3JrLmJhc2UuZHN0KSB7CisJCWRzdF9yZWxlYXNlKGluZXQtPmNvcmsuYmFzZS5kc3QpOworCQlpbmV0LT5jb3JrLmJhc2UuZHN0ID0gTlVMTDsKKwkJaW5ldC0+Y29yay5iYXNlLmZsYWdzICY9IH5JUENPUktfQUxMRlJBRzsKIAl9CiAJbWVtc2V0KCZpbmV0LT5jb3JrLmZsLCAwLCBzaXplb2YoaW5ldC0+Y29yay5mbCkpOwogfQpAQCAtMTUxNSw3ICsxNTE3LDcgQEAKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAJc3RydWN0IGlwdjZoZHIgKmhkcjsKIAlzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCA9IG5wLT5jb3JrLm9wdDsKLQlzdHJ1Y3QgcnQ2X2luZm8gKnJ0ID0gKHN0cnVjdCBydDZfaW5mbyAqKWluZXQtPmNvcmsuZHN0OworCXN0cnVjdCBydDZfaW5mbyAqcnQgPSAoc3RydWN0IHJ0Nl9pbmZvICopaW5ldC0+Y29yay5iYXNlLmRzdDsKIAlzdHJ1Y3QgZmxvd2k2ICpmbDYgPSAmaW5ldC0+Y29yay5mbC51LmlwNjsKIAl1bnNpZ25lZCBjaGFyIHByb3RvID0gZmw2LT5mbG93aTZfcHJvdG87CiAJaW50IGVyciA9IDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKaW5kZXggYzFiMWJkMy4uMzZjMjg0MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwpAQCAtMTYyLDcgKzE2Miw3IEBACiAJZm9yICh0ID0gcmN1X2RlcmVmZXJlbmNlKHN0YXJ0KTsgdDsgdCA9IHJjdV9kZXJlZmVyZW5jZSh0LT5uZXh0KSkKIAogc3RhdGljIHN0cnVjdCBpcDZfdG5sICoKLWlwNl90bmxfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGluNl9hZGRyICpyZW1vdGUsIHN0cnVjdCBpbjZfYWRkciAqbG9jYWwpCitpcDZfdG5sX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqcmVtb3RlLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmxvY2FsKQogewogCXVuc2lnbmVkIGludCBoMCA9IEhBU0gocmVtb3RlKTsKIAl1bnNpZ25lZCBpbnQgaDEgPSBIQVNIKGxvY2FsKTsKQEAgLTE5NCwxMCArMTk0LDEwIEBACiAgKiovCiAKIHN0YXRpYyBzdHJ1Y3QgaXA2X3RubCBfX3JjdSAqKgotaXA2X3RubF9idWNrZXQoc3RydWN0IGlwNl90bmxfbmV0ICppcDZuLCBzdHJ1Y3QgaXA2X3RubF9wYXJtICpwKQoraXA2X3RubF9idWNrZXQoc3RydWN0IGlwNl90bmxfbmV0ICppcDZuLCBjb25zdCBzdHJ1Y3QgaXA2X3RubF9wYXJtICpwKQogewotCXN0cnVjdCBpbjZfYWRkciAqcmVtb3RlID0gJnAtPnJhZGRyOwotCXN0cnVjdCBpbjZfYWRkciAqbG9jYWwgPSAmcC0+bGFkZHI7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpyZW1vdGUgPSAmcC0+cmFkZHI7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpsb2NhbCA9ICZwLT5sYWRkcjsKIAl1bnNpZ25lZCBoID0gMDsKIAlpbnQgcHJpbyA9IDA7CiAKQEAgLTI4MCwxMSArMjgwLDYgQEAKIAogCWRldl9uZXRfc2V0KGRldiwgbmV0KTsKIAotCWlmIChzdHJjaHIobmFtZSwgJyUnKSkgewotCQlpZiAoZGV2X2FsbG9jX25hbWUoZGV2LCBuYW1lKSA8IDApCi0JCQlnb3RvIGZhaWxlZF9mcmVlOwotCX0KLQogCXQgPSBuZXRkZXZfcHJpdihkZXYpOwogCXQtPnBhcm1zID0gKnA7CiAJZXJyID0gaXA2X3RubF9kZXZfaW5pdChkZXYpOwpAQCAtMzIxLDggKzMxNiw4IEBACiBzdGF0aWMgc3RydWN0IGlwNl90bmwgKmlwNl90bmxfbG9jYXRlKHN0cnVjdCBuZXQgKm5ldCwKIAkJc3RydWN0IGlwNl90bmxfcGFybSAqcCwgaW50IGNyZWF0ZSkKIHsKLQlzdHJ1Y3QgaW42X2FkZHIgKnJlbW90ZSA9ICZwLT5yYWRkcjsKLQlzdHJ1Y3QgaW42X2FkZHIgKmxvY2FsID0gJnAtPmxhZGRyOworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqcmVtb3RlID0gJnAtPnJhZGRyOworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbG9jYWwgPSAmcC0+bGFkZHI7CiAJc3RydWN0IGlwNl90bmwgX19yY3UgKip0cDsKIAlzdHJ1Y3QgaXA2X3RubCAqdDsKIAlzdHJ1Y3QgaXA2X3RubF9uZXQgKmlwNm4gPSBuZXRfZ2VuZXJpYyhuZXQsIGlwNl90bmxfbmV0X2lkKTsKQEAgLTM3NCw3ICszNjksNyBAQAogc3RhdGljIF9fdTE2CiBwYXJzZV90bHZfdG5sX2VuY19saW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191OCAqIHJhdykKIHsKLQlzdHJ1Y3QgaXB2NmhkciAqaXB2NmggPSAoc3RydWN0IGlwdjZoZHIgKikgcmF3OworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcHY2aCA9IChjb25zdCBzdHJ1Y3QgaXB2NmhkciAqKSByYXc7CiAJX191OCBuZXh0aGRyID0gaXB2NmgtPm5leHRoZHI7CiAJX191MTYgb2ZmID0gc2l6ZW9mICgqaXB2NmgpOwogCkBAIC00MzUsNyArNDMwLDcgQEAKIGlwNl90bmxfZXJyKHN0cnVjdCBza19idWZmICpza2IsIF9fdTggaXBwcm90bywgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQsCiAJICAgIHU4ICp0eXBlLCB1OCAqY29kZSwgaW50ICptc2csIF9fdTMyICppbmZvLCBpbnQgb2Zmc2V0KQogewotCXN0cnVjdCBpcHY2aGRyICppcHY2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKSBza2ItPmRhdGE7CisJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwdjZoID0gKGNvbnN0IHN0cnVjdCBpcHY2aGRyICopIHNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaXA2X3RubCAqdDsKIAlpbnQgcmVsX21zZyA9IDA7CiAJdTggcmVsX3R5cGUgPSBJQ01QVjZfREVTVF9VTlJFQUNIOwpAQCAtNTM1LDggKzUzMCw5IEBACiAJX191MzIgcmVsX2luZm8gPSBudG9obChpbmZvKTsKIAlpbnQgZXJyOwogCXN0cnVjdCBza19idWZmICpza2IyOwotCXN0cnVjdCBpcGhkciAqZWlwaDsKKwljb25zdCBzdHJ1Y3QgaXBoZHIgKmVpcGg7CiAJc3RydWN0IHJ0YWJsZSAqcnQ7CisJc3RydWN0IGZsb3dpNCBmbDQ7CiAKIAllcnIgPSBpcDZfdG5sX2Vycihza2IsIElQUFJPVE9fSVBJUCwgb3B0LCAmcmVsX3R5cGUsICZyZWxfY29kZSwKIAkJCSAgJnJlbF9tc2csICZyZWxfaW5mbywgb2Zmc2V0KTsKQEAgLTU3Nyw3ICs1NzMsNyBAQAogCWVpcGggPSBpcF9oZHIoc2tiMik7CiAKIAkvKiBUcnkgdG8gZ3Vlc3MgaW5jb21pbmcgaW50ZXJmYWNlICovCi0JcnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMoZGV2X25ldChza2ItPmRldiksIE5VTEwsCisJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMoZGV2X25ldChza2ItPmRldiksICZmbDQsIE5VTEwsCiAJCQkJICAgZWlwaC0+c2FkZHIsIDAsCiAJCQkJICAgMCwgMCwKIAkJCQkgICBJUFBST1RPX0lQSVAsIFJUX1RPUyhlaXBoLT50b3MpLCAwKTsKQEAgLTU5MCw3ICs1ODYsNyBAQAogCWlmIChydC0+cnRfZmxhZ3MgJiBSVENGX0xPQ0FMKSB7CiAJCWlwX3J0X3B1dChydCk7CiAJCXJ0ID0gTlVMTDsKLQkJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMoZGV2X25ldChza2ItPmRldiksIE5VTEwsCisJCXJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKGRldl9uZXQoc2tiLT5kZXYpLCAmZmw0LCBOVUxMLAogCQkJCQkgICBlaXBoLT5kYWRkciwgZWlwaC0+c2FkZHIsCiAJCQkJCSAgIDAsIDAsCiAJCQkJCSAgIElQUFJPVE9fSVBJUCwKQEAgLTY2OSw4ICs2NjUsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpcDRpcDZfZHNjcF9lY25fZGVjYXBzdWxhdGUoc3RydWN0IGlwNl90bmwgKnQsCi0JCQkJCXN0cnVjdCBpcHY2aGRyICppcHY2aCwKK3N0YXRpYyB2b2lkIGlwNGlwNl9kc2NwX2Vjbl9kZWNhcHN1bGF0ZShjb25zdCBzdHJ1Y3QgaXA2X3RubCAqdCwKKwkJCQkJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwdjZoLAogCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCV9fdTggZHNmaWVsZCA9IGlwdjZfZ2V0X2RzZmllbGQoaXB2NmgpICYgfklORVRfRUNOX01BU0s7CkBAIC02ODIsOCArNjc4LDggQEAKIAkJSVBfRUNOX3NldF9jZShpcF9oZHIoc2tiKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGlwNmlwNl9kc2NwX2Vjbl9kZWNhcHN1bGF0ZShzdHJ1Y3QgaXA2X3RubCAqdCwKLQkJCQkJc3RydWN0IGlwdjZoZHIgKmlwdjZoLAorc3RhdGljIHZvaWQgaXA2aXA2X2RzY3BfZWNuX2RlY2Fwc3VsYXRlKGNvbnN0IHN0cnVjdCBpcDZfdG5sICp0LAorCQkJCQljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXB2NmgsCiAJCQkJCXN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaWYgKHQtPnBhcm1zLmZsYWdzICYgSVA2X1ROTF9GX1JDVl9EU0NQX0NPUFkpCkBAIC03MjYsMTIgKzcyMiwxMiBAQAogCiBzdGF0aWMgaW50IGlwNl90bmxfcmN2KHN0cnVjdCBza19idWZmICpza2IsIF9fdTE2IHByb3RvY29sLAogCQkgICAgICAgX191OCBpcHByb3RvLAotCQkgICAgICAgdm9pZCAoKmRzY3BfZWNuX2RlY2Fwc3VsYXRlKShzdHJ1Y3QgaXA2X3RubCAqdCwKLQkJCQkJCSAgICBzdHJ1Y3QgaXB2NmhkciAqaXB2NmgsCisJCSAgICAgICB2b2lkICgqZHNjcF9lY25fZGVjYXBzdWxhdGUpKGNvbnN0IHN0cnVjdCBpcDZfdG5sICp0LAorCQkJCQkJICAgIGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcHY2aCwKIAkJCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSkKIHsKIAlzdHJ1Y3QgaXA2X3RubCAqdDsKLQlzdHJ1Y3QgaXB2NmhkciAqaXB2NmggPSBpcHY2X2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcHY2aCA9IGlwdjZfaGRyKHNrYik7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKQEAgLTgyOCw3ICs4MjQsNyBAQAogICoqLwogCiBzdGF0aWMgaW5saW5lIGludAotaXA2X3RubF9hZGRyX2NvbmZsaWN0KHN0cnVjdCBpcDZfdG5sICp0LCBzdHJ1Y3QgaXB2NmhkciAqaGRyKQoraXA2X3RubF9hZGRyX2NvbmZsaWN0KGNvbnN0IHN0cnVjdCBpcDZfdG5sICp0LCBjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaGRyKQogewogCXJldHVybiBpcHY2X2FkZHJfZXF1YWwoJnQtPnBhcm1zLnJhZGRyLCAmaGRyLT5zYWRkcik7CiB9CkBAIC0xMDA1LDcgKzEwMDEsNyBAQAogaXA0aXA2X3RubF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlwNl90bmwgKnQgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBpcGhkciAgKmlwaCA9IGlwX2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBpcGhkciAgKmlwaCA9IGlwX2hkcihza2IpOwogCWludCBlbmNhcF9saW1pdCA9IC0xOwogCXN0cnVjdCBmbG93aTYgZmw2OwogCV9fdTggZHNmaWVsZDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNm1yLmMgYi9uZXQvaXB2Ni9pcDZtci5jCmluZGV4IDI5ZTQ4NTkuLjgyYTgwOTkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNm1yLmMKKysrIGIvbmV0L2lwdjYvaXA2bXIuYwpAQCAtOTg5LDggKzk4OSw4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbWZjNl9jYWNoZSAqaXA2bXJfY2FjaGVfZmluZChzdHJ1Y3QgbXI2X3RhYmxlICptcnQsCi0JCQkJCSAgIHN0cnVjdCBpbjZfYWRkciAqb3JpZ2luLAotCQkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKm1jYXN0Z3JwKQorCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKm9yaWdpbiwKKwkJCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICptY2FzdGdycCkKIHsKIAlpbnQgbGluZSA9IE1GQzZfSEFTSChtY2FzdGdycCwgb3JpZ2luKTsKIAlzdHJ1Y3QgbWZjNl9jYWNoZSAqYzsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwY29tcDYuYyBiL25ldC9pcHY2L2lwY29tcDYuYwppbmRleCA4NWNjY2Q2Li5iYmE2NThkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcGNvbXA2LmMKKysrIGIvbmV0L2lwdjYvaXBjb21wNi5jCkBAIC01NSw3ICs1NSw3IEBACiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItPmRldik7CiAJX19iZTMyIHNwaTsKLQlzdHJ1Y3QgaXB2NmhkciAqaXBoID0gKHN0cnVjdCBpcHY2aGRyKilza2ItPmRhdGE7CisJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwaCA9IChjb25zdCBzdHJ1Y3QgaXB2NmhkciAqKXNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaXBfY29tcF9oZHIgKmlwY29tcGggPQogCQkoc3RydWN0IGlwX2NvbXBfaGRyICopKHNrYi0+ZGF0YSArIG9mZnNldCk7CiAJc3RydWN0IHhmcm1fc3RhdGUgKng7CkBAIC02NCw3ICs2NCw4IEBACiAJCXJldHVybjsKIAogCXNwaSA9IGh0b25sKG50b2hzKGlwY29tcGgtPmNwaSkpOwotCXggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIHNrYi0+bWFyaywgKHhmcm1fYWRkcmVzc190ICopJmlwaC0+ZGFkZHIsIHNwaSwgSVBQUk9UT19DT01QLCBBRl9JTkVUNik7CisJeCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgc2tiLT5tYXJrLCAoY29uc3QgeGZybV9hZGRyZXNzX3QgKikmaXBoLT5kYWRkciwKKwkJCSAgICAgIHNwaSwgSVBQUk9UT19DT01QLCBBRl9JTkVUNik7CiAJaWYgKCF4KQogCQlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L21jYXN0LmMgYi9uZXQvaXB2Ni9tY2FzdC5jCmluZGV4IDc2Yjg5MzcuLjNlNmViY2QgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L21jYXN0LmMKKysrIGIvbmV0L2lwdjYvbWNhc3QuYwpAQCAtOTIsMTYgKzkyLDE2IEBACiBzdGF0aWMgdm9pZCBtbGRfaWZjX3RpbWVyX2V4cGlyZSh1bnNpZ25lZCBsb25nIGRhdGEpOwogc3RhdGljIHZvaWQgbWxkX2lmY19ldmVudChzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KTsKIHN0YXRpYyB2b2lkIG1sZF9hZGRfZGVscmVjKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsIHN0cnVjdCBpZm1jYWRkcjYgKnBtYyk7Ci1zdGF0aWMgdm9pZCBtbGRfZGVsX2RlbHJlYyhzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpOworc3RhdGljIHZvaWQgbWxkX2RlbF9kZWxyZWMoc3RydWN0IGluZXQ2X2RldiAqaWRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTsKIHN0YXRpYyB2b2lkIG1sZF9jbGVhcl9kZWxyZWMoc3RydWN0IGluZXQ2X2RldiAqaWRldik7CiBzdGF0aWMgaW50IHNmX3NldHN0YXRlKHN0cnVjdCBpZm1jYWRkcjYgKnBtYyk7CiBzdGF0aWMgdm9pZCBzZl9tYXJrc3RhdGUoc3RydWN0IGlmbWNhZGRyNiAqcG1jKTsKIHN0YXRpYyB2b2lkIGlwNl9tY19jbGVhcl9zcmMoc3RydWN0IGlmbWNhZGRyNiAqcG1jKTsKLXN0YXRpYyBpbnQgaXA2X21jX2RlbF9zcmMoc3RydWN0IGluZXQ2X2RldiAqaWRldiwgc3RydWN0IGluNl9hZGRyICpwbWNhLAotCQkJICBpbnQgc2Ztb2RlLCBpbnQgc2Zjb3VudCwgc3RydWN0IGluNl9hZGRyICpwc2ZzcmMsCitzdGF0aWMgaW50IGlwNl9tY19kZWxfc3JjKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqcG1jYSwKKwkJCSAgaW50IHNmbW9kZSwgaW50IHNmY291bnQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqcHNmc3JjLAogCQkJICBpbnQgZGVsdGEpOwotc3RhdGljIGludCBpcDZfbWNfYWRkX3NyYyhzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCBzdHJ1Y3QgaW42X2FkZHIgKnBtY2EsCi0JCQkgIGludCBzZm1vZGUsIGludCBzZmNvdW50LCBzdHJ1Y3QgaW42X2FkZHIgKnBzZnNyYywKK3N0YXRpYyBpbnQgaXA2X21jX2FkZF9zcmMoc3RydWN0IGluZXQ2X2RldiAqaWRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpwbWNhLAorCQkJICBpbnQgc2Ztb2RlLCBpbnQgc2Zjb3VudCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpwc2ZzcmMsCiAJCQkgIGludCBkZWx0YSk7CiBzdGF0aWMgaW50IGlwNl9tY19sZWF2ZV9zcmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXB2Nl9tY19zb2NrbGlzdCAqaW1sLAogCQkJICAgIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpOwpAQCAtMjAxLDEwICsyMDEsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpcHY2X21jX3NvY2tsaXN0X3JlY2xhaW0oc3RydWN0IHJjdV9oZWFkICpoZWFkKQotewotCWtmcmVlKGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgaXB2Nl9tY19zb2NrbGlzdCwgcmN1KSk7Ci19CiAvKgogICoJc29ja2V0IGxlYXZlIG9uIG11bHRpY2FzdCBncm91cAogICovCkBAIC0yMzksNyArMjM1LDcgQEAKIAkJCQkodm9pZCkgaXA2X21jX2xlYXZlX3NyYyhzaywgbWNfbHN0LCBOVUxMKTsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJYXRvbWljX3N1YihzaXplb2YoKm1jX2xzdCksICZzay0+c2tfb21lbV9hbGxvYyk7Ci0JCQljYWxsX3JjdSgmbWNfbHN0LT5yY3UsIGlwdjZfbWNfc29ja2xpc3RfcmVjbGFpbSk7CisJCQlrZnJlZV9yY3UobWNfbHN0LCByY3UpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CkBAIC0yNTAsNyArMjQ2LDcgQEAKIAogLyogY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jaygpICovCiBzdGF0aWMgc3RydWN0IGluZXQ2X2RldiAqaXA2X21jX2ZpbmRfZGV2X3JjdShzdHJ1Y3QgbmV0ICpuZXQsCi0JCQkJCSAgICAgc3RydWN0IGluNl9hZGRyICpncm91cCwKKwkJCQkJICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmdyb3VwLAogCQkJCQkgICAgIGludCBpZmluZGV4KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOwpAQCAtMzA3LDcgKzMwMyw3IEBACiAJCXJjdV9yZWFkX3VubG9jaygpOwogCiAJCWF0b21pY19zdWIoc2l6ZW9mKCptY19sc3QpLCAmc2stPnNrX29tZW1fYWxsb2MpOwotCQljYWxsX3JjdSgmbWNfbHN0LT5yY3UsIGlwdjZfbWNfc29ja2xpc3RfcmVjbGFpbSk7CisJCWtmcmVlX3JjdShtY19sc3QsIHJjdSk7CiAKIAkJc3Bpbl9sb2NrKCZpcHY2X3NrX21jX2xvY2spOwogCX0KQEAgLTQ1MSw3ICs0NDcsNyBAQAogCiBpbnQgaXA2X21jX21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGdyb3VwX2ZpbHRlciAqZ3NmKQogewotCXN0cnVjdCBpbjZfYWRkciAqZ3JvdXA7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpncm91cDsKIAlzdHJ1Y3QgaXB2Nl9tY19zb2NrbGlzdCAqcG1jOwogCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7CiAJc3RydWN0IGlwdjZfcGluZm8gKmluZXQ2ID0gaW5ldDZfc2soc2spOwpAQCAtNTQyLDcgKzUzOCw3IEBACiAJc3RydWN0IGdyb3VwX2ZpbHRlciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQogewogCWludCBlcnIsIGksIGNvdW50LCBjb3B5Y291bnQ7Ci0Jc3RydWN0IGluNl9hZGRyICpncm91cDsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmdyb3VwOwogCXN0cnVjdCBpcHY2X21jX3NvY2tsaXN0ICpwbWM7CiAJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqaW5ldDYgPSBpbmV0Nl9zayhzayk7CkBAIC03NTIsNyArNzQ4LDcgQEAKIAlzcGluX3VubG9ja19iaCgmaWRldi0+bWNfbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIG1sZF9kZWxfZGVscmVjKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsIHN0cnVjdCBpbjZfYWRkciAqcG1jYSkKK3N0YXRpYyB2b2lkIG1sZF9kZWxfZGVscmVjKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqcG1jYSkKIHsKIAlzdHJ1Y3QgaWZtY2FkZHI2ICpwbWMsICpwbWNfcHJldjsKIAlzdHJ1Y3QgaXA2X3NmX2xpc3QgKnBzZiwgKnBzZl9uZXh0OwpAQCAtMTA1Miw3ICsxMDQ4LDcgQEAKIAogLyogbWFyayBFWENMVURFLW1vZGUgc291cmNlcyAqLwogc3RhdGljIGludCBtbGRfeG1hcmtzb3VyY2VzKHN0cnVjdCBpZm1jYWRkcjYgKnBtYywgaW50IG5zcmNzLAotCXN0cnVjdCBpbjZfYWRkciAqc3JjcykKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNyY3MpCiB7CiAJc3RydWN0IGlwNl9zZl9saXN0ICpwc2Y7CiAJaW50IGksIHNjb3VudDsKQEAgLTEwODAsNyArMTA3Niw3IEBACiB9CiAKIHN0YXRpYyBpbnQgbWxkX21hcmtzb3VyY2VzKHN0cnVjdCBpZm1jYWRkcjYgKnBtYywgaW50IG5zcmNzLAotCXN0cnVjdCBpbjZfYWRkciAqc3JjcykKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNyY3MpCiB7CiAJc3RydWN0IGlwNl9zZl9saXN0ICpwc2Y7CiAJaW50IGksIHNjb3VudDsKQEAgLTExMTUsNyArMTExMSw3IEBACiB7CiAJc3RydWN0IG1sZDJfcXVlcnkgKm1saDIgPSBOVUxMOwogCXN0cnVjdCBpZm1jYWRkcjYgKm1hOwotCXN0cnVjdCBpbjZfYWRkciAqZ3JvdXA7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpncm91cDsKIAl1bnNpZ25lZCBsb25nIG1heF9kZWxheTsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2OwogCXN0cnVjdCBtbGRfbXNnICptbGQ7CkBAIC0xODIxLDcgKzE4MTcsNyBAQAogfQogCiBzdGF0aWMgaW50IGlwNl9tY19kZWwxX3NyYyhzdHJ1Y3QgaWZtY2FkZHI2ICpwbWMsIGludCBzZm1vZGUsCi0Jc3RydWN0IGluNl9hZGRyICpwc2ZzcmMpCisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpwc2ZzcmMpCiB7CiAJc3RydWN0IGlwNl9zZl9saXN0ICpwc2YsICpwc2ZfcHJldjsKIAlpbnQgcnYgPSAwOwpAQCAtMTg1Nyw4ICsxODUzLDggQEAKIAlyZXR1cm4gcnY7CiB9CiAKLXN0YXRpYyBpbnQgaXA2X21jX2RlbF9zcmMoc3RydWN0IGluZXQ2X2RldiAqaWRldiwgc3RydWN0IGluNl9hZGRyICpwbWNhLAotCQkJICBpbnQgc2Ztb2RlLCBpbnQgc2Zjb3VudCwgc3RydWN0IGluNl9hZGRyICpwc2ZzcmMsCitzdGF0aWMgaW50IGlwNl9tY19kZWxfc3JjKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqcG1jYSwKKwkJCSAgaW50IHNmbW9kZSwgaW50IHNmY291bnQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqcHNmc3JjLAogCQkJICBpbnQgZGVsdGEpCiB7CiAJc3RydWN0IGlmbWNhZGRyNiAqcG1jOwpAQCAtMTkxOCw3ICsxOTE0LDcgQEAKICAqIEFkZCBtdWx0aWNhc3Qgc2luZ2xlLXNvdXJjZSBmaWx0ZXIgdG8gdGhlIGludGVyZmFjZSBsaXN0CiAgKi8KIHN0YXRpYyBpbnQgaXA2X21jX2FkZDFfc3JjKHN0cnVjdCBpZm1jYWRkcjYgKnBtYywgaW50IHNmbW9kZSwKLQlzdHJ1Y3QgaW42X2FkZHIgKnBzZnNyYywgaW50IGRlbHRhKQorCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqcHNmc3JjLCBpbnQgZGVsdGEpCiB7CiAJc3RydWN0IGlwNl9zZl9saXN0ICpwc2YsICpwc2ZfcHJldjsKIApAQCAtMjAyMSw4ICsyMDE3LDggQEAKIC8qCiAgKiBBZGQgbXVsdGljYXN0IHNvdXJjZSBmaWx0ZXIgbGlzdCB0byB0aGUgaW50ZXJmYWNlIGxpc3QKICAqLwotc3RhdGljIGludCBpcDZfbWNfYWRkX3NyYyhzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCBzdHJ1Y3QgaW42X2FkZHIgKnBtY2EsCi0JCQkgIGludCBzZm1vZGUsIGludCBzZmNvdW50LCBzdHJ1Y3QgaW42X2FkZHIgKnBzZnNyYywKK3N0YXRpYyBpbnQgaXA2X21jX2FkZF9zcmMoc3RydWN0IGluZXQ2X2RldiAqaWRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpwbWNhLAorCQkJICBpbnQgc2Ztb2RlLCBpbnQgc2Zjb3VudCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpwc2ZzcmMsCiAJCQkgIGludCBkZWx0YSkKIHsKIAlzdHJ1Y3QgaWZtY2FkZHI2ICpwbWM7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9taXA2LmMgYi9uZXQvaXB2Ni9taXA2LmMKaW5kZXggOWIyMTA0OC4uNDMyNDJlNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbWlwNi5jCisrKyBiL25ldC9pcHY2L21pcDYuYwpAQCAtMTI2LDcgKzEyNiw3IEBACiAKIHN0YXRpYyBpbnQgbWlwNl9kZXN0b3B0X2lucHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBpcHY2aGRyICppcGggPSBpcHY2X2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcGggPSBpcHY2X2hkcihza2IpOwogCXN0cnVjdCBpcHY2X2Rlc3RvcHRfaGRyICpkZXN0b3B0ID0gKHN0cnVjdCBpcHY2X2Rlc3RvcHRfaGRyICopc2tiLT5kYXRhOwogCWludCBlcnIgPSBkZXN0b3B0LT5uZXh0aGRyOwogCkBAIC0xODEsOCArMTgxLDggQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQgbWlwNl9yZXBvcnRfcmxfYWxsb3coc3RydWN0IHRpbWV2YWwgKnN0YW1wLAotCQkJCSAgICAgICBzdHJ1Y3QgaW42X2FkZHIgKmRzdCwKLQkJCQkgICAgICAgc3RydWN0IGluNl9hZGRyICpzcmMsIGludCBpaWYpCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZHN0LAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNyYywgaW50IGlpZikKIHsKIAlpbnQgYWxsb3cgPSAwOwogCkBAIC0zNDksNyArMzQ5LDcgQEAKIAogc3RhdGljIGludCBtaXA2X3J0aGRyX2lucHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBpcHY2aGRyICppcGggPSBpcHY2X2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcGggPSBpcHY2X2hkcihza2IpOwogCXN0cnVjdCBydDJfaGRyICpydDIgPSAoc3RydWN0IHJ0Ml9oZHIgKilza2ItPmRhdGE7CiAJaW50IGVyciA9IHJ0Mi0+cnRfaGRyLm5leHRoZHI7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25kaXNjLmMgYi9uZXQvaXB2Ni9uZGlzYy5jCmluZGV4IDkyZjk1MmQuLjc1OTZmMDcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25kaXNjLmMKKysrIGIvbmV0L2lwdjYvbmRpc2MuYwpAQCAtMzI0LDcgKzMyNCw3IEBACiAJcmV0dXJuIGxsYWRkciArIHByZXBhZDsKIH0KIAotaW50IG5kaXNjX21jX21hcChzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIGNoYXIgKmJ1Ziwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRpcikKK2ludCBuZGlzY19tY19tYXAoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLCBjaGFyICpidWYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkaXIpCiB7CiAJc3dpdGNoIChkZXYtPnR5cGUpIHsKIAljYXNlIEFSUEhSRF9FVEhFUjoKQEAgLTYxMSw2ICs2MTEsMjkgQEAKIAkJICAgICBpbmNfb3B0ID8gTkRfT1BUX1RBUkdFVF9MTF9BRERSIDogMCk7CiB9CiAKK3N0YXRpYyB2b2lkIG5kaXNjX3NlbmRfdW5zb2xfbmEoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2OworCXN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmYTsKKwlzdHJ1Y3QgaW42X2FkZHIgbWNhZGRyOworCisJaWRldiA9IGluNl9kZXZfZ2V0KGRldik7CisJaWYgKCFpZGV2KQorCQlyZXR1cm47CisKKwlyZWFkX2xvY2tfYmgoJmlkZXYtPmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaWZhLCAmaWRldi0+YWRkcl9saXN0LCBpZl9saXN0KSB7CisJCWFkZHJjb25mX2FkZHJfc29saWN0X211bHQoJmlmYS0+YWRkciwgJm1jYWRkcik7CisJCW5kaXNjX3NlbmRfbmEoZGV2LCBOVUxMLCAmbWNhZGRyLCAmaWZhLT5hZGRyLAorCQkJICAgICAgLypyb3V0ZXI9Ki8gISFpZGV2LT5jbmYuZm9yd2FyZGluZywKKwkJCSAgICAgIC8qc29saWNpdGVkPSovIGZhbHNlLCAvKm92ZXJyaWRlPSovIHRydWUsCisJCQkgICAgICAvKmluY19vcHQ9Ki8gdHJ1ZSk7CisJfQorCXJlYWRfdW5sb2NrX2JoKCZpZGV2LT5sb2NrKTsKKworCWluNl9kZXZfcHV0KGlkZXYpOworfQorCiB2b2lkIG5kaXNjX3NlbmRfbnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsCiAJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc29saWNpdCwKIAkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkcikKQEAgLTcyNSw4ICs3NDgsOCBAQAogc3RhdGljIHZvaWQgbmRpc2NfcmVjdl9ucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBuZF9tc2cgKm1zZyA9IChzdHJ1Y3QgbmRfbXNnICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKLQlzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyID0gJmlwdjZfaGRyKHNrYiktPnNhZGRyOwotCXN0cnVjdCBpbjZfYWRkciAqZGFkZHIgPSAmaXB2Nl9oZHIoc2tiKS0+ZGFkZHI7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciA9ICZpcHY2X2hkcihza2IpLT5zYWRkcjsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyID0gJmlwdjZfaGRyKHNrYiktPmRhZGRyOwogCXU4ICpsbGFkZHIgPSBOVUxMOwogCXUzMiBuZG9wdGxlbiA9IHNrYi0+dGFpbCAtIChza2ItPnRyYW5zcG9ydF9oZWFkZXIgKwogCQkJCSAgICBvZmZzZXRvZihzdHJ1Y3QgbmRfbXNnLCBvcHQpKTsKQEAgLTkwMSw4ICs5MjQsOCBAQAogc3RhdGljIHZvaWQgbmRpc2NfcmVjdl9uYShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBuZF9tc2cgKm1zZyA9IChzdHJ1Y3QgbmRfbXNnICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKLQlzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyID0gJmlwdjZfaGRyKHNrYiktPnNhZGRyOwotCXN0cnVjdCBpbjZfYWRkciAqZGFkZHIgPSAmaXB2Nl9oZHIoc2tiKS0+ZGFkZHI7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciA9ICZpcHY2X2hkcihza2IpLT5zYWRkcjsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyID0gJmlwdjZfaGRyKHNrYiktPmRhZGRyOwogCXU4ICpsbGFkZHIgPSBOVUxMOwogCXUzMiBuZG9wdGxlbiA9IHNrYi0+dGFpbCAtIChza2ItPnRyYW5zcG9ydF9oZWFkZXIgKwogCQkJCSAgICBvZmZzZXRvZihzdHJ1Y3QgbmRfbXNnLCBvcHQpKTsKQEAgLTk0NSw5ICs5NjgsMTAgQEAKIAl9CiAJaWZwID0gaXB2Nl9nZXRfaWZhZGRyKGRldl9uZXQoZGV2KSwgJm1zZy0+dGFyZ2V0LCBkZXYsIDEpOwogCWlmIChpZnApIHsKLQkJaWYgKGlmcC0+ZmxhZ3MgJiBJRkFfRl9URU5UQVRJVkUpIHsKLQkJCWFkZHJjb25mX2RhZF9mYWlsdXJlKGlmcCk7Ci0JCQlyZXR1cm47CisJCWlmIChza2ItPnBrdF90eXBlICE9IFBBQ0tFVF9MT09QQkFDSworCQkgICAgJiYgKGlmcC0+ZmxhZ3MgJiBJRkFfRl9URU5UQVRJVkUpKSB7CisJCQkJYWRkcmNvbmZfZGFkX2ZhaWx1cmUoaWZwKTsKKwkJCQlyZXR1cm47CiAJCX0KIAkJLyogV2hhdCBzaG91bGQgd2UgbWFrZSBub3c/IFRoZSBhZHZlcnRpc2VtZW50CiAJCSAgIGlzIGludmFsaWQsIGJ1dCBuZGlzYyBzcGVjcyBzYXkgbm90aGluZwpAQCAtMTAxNCw3ICsxMDM4LDcgQEAKIAl1bnNpZ25lZCBsb25nIG5kb3B0bGVuID0gc2tiLT5sZW4gLSBzaXplb2YoKnJzX21zZyk7CiAJc3RydWN0IG5laWdoYm91ciAqbmVpZ2g7CiAJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKLQlzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyID0gJmlwdjZfaGRyKHNrYiktPnNhZGRyOworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIgPSAmaXB2Nl9oZHIoc2tiKS0+c2FkZHI7CiAJc3RydWN0IG5kaXNjX29wdGlvbnMgbmRvcHRzOwogCXU4ICpsbGFkZHIgPSBOVUxMOwogCkBAIC0xNDExLDggKzE0MzUsOCBAQAogewogCXN0cnVjdCBpbmV0Nl9kZXYgKmluNl9kZXY7CiAJc3RydWN0IGljbXA2aGRyICppY21waDsKLQlzdHJ1Y3QgaW42X2FkZHIgKmRlc3Q7Ci0Jc3RydWN0IGluNl9hZGRyICp0YXJnZXQ7CS8qIG5ldyBmaXJzdCBob3AgdG8gZGVzdGluYXRpb24gKi8KKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3Q7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICp0YXJnZXQ7CS8qIG5ldyBmaXJzdCBob3AgdG8gZGVzdGluYXRpb24gKi8KIAlzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDsKIAlpbnQgb25fbGluayA9IDA7CiAJc3RydWN0IG5kaXNjX29wdGlvbnMgbmRvcHRzOwpAQCAtMTQ0NSw3ICsxNDY5LDcgQEAKIAl9CiAKIAlpY21waCA9IGljbXA2X2hkcihza2IpOwotCXRhcmdldCA9IChzdHJ1Y3QgaW42X2FkZHIgKikgKGljbXBoICsgMSk7CisJdGFyZ2V0ID0gKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqKSAoaWNtcGggKyAxKTsKIAlkZXN0ID0gdGFyZ2V0ICsgMTsKIAogCWlmIChpcHY2X2FkZHJfaXNfbXVsdGljYXN0KGRlc3QpKSB7CkBAIC0xNzIyLDYgKzE3NDYsOSBAQAogCQluZWlnaF9pZmRvd24oJm5kX3RibCwgZGV2KTsKIAkJZmliNl9ydW5fZ2MofjBVTCwgbmV0KTsKIAkJYnJlYWs7CisJY2FzZSBORVRERVZfTk9USUZZX1BFRVJTOgorCQluZGlzY19zZW5kX3Vuc29sX25hKGRldik7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyLmMKaW5kZXggMjhiYzFmNi4uMzBmY2VlNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyLmMKQEAgLTEzLDcgKzEzLDcgQEAKIGludCBpcDZfcm91dGVfbWVfaGFyZGVyKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2JfZHN0KHNrYiktPmRldik7Ci0Jc3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7CisJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0OwogCXN0cnVjdCBmbG93aTYgZmw2ID0gewogCQkuZmxvd2k2X29pZiA9IHNrYi0+c2sgPyBza2ItPnNrLT5za19ib3VuZF9kZXZfaWYgOiAwLApAQCAtNjcsNyArNjcsNyBAQAogCXN0cnVjdCBpcDZfcnRfaW5mbyAqcnRfaW5mbyA9IG5mX3F1ZXVlX2VudHJ5X3Jlcm91dGUoZW50cnkpOwogCiAJaWYgKGVudHJ5LT5ob29rID09IE5GX0lORVRfTE9DQUxfT1VUKSB7Ci0JCXN0cnVjdCBpcHY2aGRyICppcGggPSBpcHY2X2hkcihza2IpOworCQljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXBoID0gaXB2Nl9oZHIoc2tiKTsKIAogCQlydF9pbmZvLT5kYWRkciA9IGlwaC0+ZGFkZHI7CiAJCXJ0X2luZm8tPnNhZGRyID0gaXBoLT5zYWRkcjsKQEAgLTgxLDcgKzgxLDcgQEAKIAlzdHJ1Y3QgaXA2X3J0X2luZm8gKnJ0X2luZm8gPSBuZl9xdWV1ZV9lbnRyeV9yZXJvdXRlKGVudHJ5KTsKIAogCWlmIChlbnRyeS0+aG9vayA9PSBORl9JTkVUX0xPQ0FMX09VVCkgewotCQlzdHJ1Y3QgaXB2NmhkciAqaXBoID0gaXB2Nl9oZHIoc2tiKTsKKwkJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7CiAJCWlmICghaXB2Nl9hZGRyX2VxdWFsKCZpcGgtPmRhZGRyLCAmcnRfaW5mby0+ZGFkZHIpIHx8CiAJCSAgICAhaXB2Nl9hZGRyX2VxdWFsKCZpcGgtPnNhZGRyLCAmcnRfaW5mby0+c2FkZHIpIHx8CiAJCSAgICBza2ItPm1hcmsgIT0gcnRfaW5mby0+bWFyaykKQEAgLTEwOCw3ICsxMDgsNyBAQAogX19zdW0xNiBuZl9pcDZfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssCiAJCQkgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1X2ludDhfdCBwcm90b2NvbCkKIHsKLQlzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7CisJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpOwogCV9fc3VtMTYgY3N1bSA9IDA7CiAKIAlzd2l0Y2ggKHNrYi0+aXBfc3VtbWVkKSB7CkBAIC0xNDIsNyArMTQyLDcgQEAKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHVuc2lnbmVkIGludCBsZW4sCiAJCQkJICAgICAgIHVfaW50OF90IHByb3RvY29sKQogewotCXN0cnVjdCBpcHY2aGRyICppcDZoID0gaXB2Nl9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7CiAJX193c3VtIGhzdW07CiAJX19zdW0xNiBjc3VtID0gMDsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKaW5kZXggNWExYzZmMi4uOTQ4NzRiMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCkBAIC0zNDAsNiArMzQwLDcgQEAKIAl1bnNpZ25lZCBpbnQgKnN0YWNrcHRyLCBvcmlncHRyLCBjcHU7CiAJY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGU7CiAJc3RydWN0IHh0X2FjdGlvbl9wYXJhbSBhY3BhcjsKKwl1bnNpZ25lZCBpbnQgYWRkZW5kOwogCiAJLyogSW5pdGlhbGl6YXRpb24gKi8KIAlpbmRldiA9IGluID8gaW4tPm5hbWUgOiBudWxsZGV2bmFtZTsKQEAgLTM1OCw3ICszNTksOCBAQAogCiAJSVBfTkZfQVNTRVJUKHRhYmxlLT52YWxpZF9ob29rcyAmICgxIDw8IGhvb2spKTsKIAotCXh0X2luZm9fcmRsb2NrX2JoKCk7CisJbG9jYWxfYmhfZGlzYWJsZSgpOworCWFkZGVuZCA9IHh0X3dyaXRlX3JlY3NlcV9iZWdpbigpOwogCXByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKIAljcHUgICAgICAgID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXRhYmxlX2Jhc2UgPSBwcml2YXRlLT5lbnRyaWVzW2NwdV07CkBAIC00NDIsNyArNDQ0LDkgQEAKIAl9IHdoaWxlICghYWNwYXIuaG90ZHJvcCk7CiAKIAkqc3RhY2twdHIgPSBvcmlncHRyOwotCXh0X2luZm9fcmR1bmxvY2tfYmgoKTsKKworIAl4dF93cml0ZV9yZWNzZXFfZW5kKGFkZGVuZCk7CisgCWxvY2FsX2JoX2VuYWJsZSgpOwogCiAjaWZkZWYgREVCVUdfQUxMT1dfQUxMCiAJcmV0dXJuIE5GX0FDQ0VQVDsKQEAgLTg5OSw3ICs5MDMsNyBAQAogCXVuc2lnbmVkIGludCBpOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlzZXFsb2NrX3QgKmxvY2sgPSAmcGVyX2NwdSh4dF9pbmZvX2xvY2tzLCBjcHUpLmxvY2s7CisJCXNlcWNvdW50X3QgKnMgPSAmcGVyX2NwdSh4dF9yZWNzZXEsIGNwdSk7CiAKIAkJaSA9IDA7CiAJCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgdC0+ZW50cmllc1tjcHVdLCB0LT5zaXplKSB7CkBAIC05MDcsMTAgKzkxMSwxMCBAQAogCQkJdW5zaWduZWQgaW50IHN0YXJ0OwogCiAJCQlkbyB7Ci0JCQkJc3RhcnQgPSByZWFkX3NlcWJlZ2luKGxvY2spOworCQkJCXN0YXJ0ID0gcmVhZF9zZXFjb3VudF9iZWdpbihzKTsKIAkJCQliY250ID0gaXRlci0+Y291bnRlcnMuYmNudDsKIAkJCQlwY250ID0gaXRlci0+Y291bnRlcnMucGNudDsKLQkJCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkobG9jaywgc3RhcnQpKTsKKwkJCX0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkocywgc3RhcnQpKTsKIAogCQkJQUREX0NPVU5URVIoY291bnRlcnNbaV0sIGJjbnQsIHBjbnQpOwogCQkJKytpOwpAQCAtMTMyNSw2ICsxMzI5LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAljb25zdCB2b2lkICpsb2NfY3B1X2VudHJ5OwogCXN0cnVjdCBpcDZ0X2VudHJ5ICppdGVyOworCXVuc2lnbmVkIGludCBhZGRlbmQ7CiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCXN0cnVjdCBjb21wYXRfeHRfY291bnRlcnNfaW5mbyBjb21wYXRfdG1wOwogCkBAIC0xMzgxLDEzICsxMzg2LDEzIEBACiAJaSA9IDA7CiAJLyogQ2hvb3NlIHRoZSBjb3B5IHRoYXQgaXMgb24gb3VyIG5vZGUgKi8KIAljdXJjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JeHRfaW5mb193cmxvY2soY3VyY3B1KTsKKwlhZGRlbmQgPSB4dF93cml0ZV9yZWNzZXFfYmVnaW4oKTsKIAlsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS0+ZW50cmllc1tjdXJjcHVdOwogCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgbG9jX2NwdV9lbnRyeSwgcHJpdmF0ZS0+c2l6ZSkgewogCQlBRERfQ09VTlRFUihpdGVyLT5jb3VudGVycywgcGFkZGNbaV0uYmNudCwgcGFkZGNbaV0ucGNudCk7CiAJCSsraTsKIAl9Ci0JeHRfaW5mb193cnVubG9jayhjdXJjcHUpOworCXh0X3dyaXRlX3JlY3NlcV9lbmQoYWRkZW5kKTsKIAogIHVubG9ja191cF9mcmVlOgogCWxvY2FsX2JoX2VuYWJsZSgpOwpAQCAtMTU3OCw3ICsxNTgzLDYgQEAKIAkJCSAgICBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbywgdW5zaWduZWQgY2hhciAqYmFzZSkKIHsKIAlzdHJ1Y3QgeHRfZW50cnlfdGFyZ2V0ICp0OwotCXN0cnVjdCB4dF90YXJnZXQgKnRhcmdldDsKIAlzdHJ1Y3QgaXA2dF9lbnRyeSAqZGU7CiAJdW5zaWduZWQgaW50IG9yaWdzaXplOwogCWludCByZXQsIGg7CkBAIC0xNjAwLDcgKzE2MDQsNiBAQAogCX0KIAlkZS0+dGFyZ2V0X29mZnNldCA9IGUtPnRhcmdldF9vZmZzZXQgLSAob3JpZ3NpemUgLSAqc2l6ZSk7CiAJdCA9IGNvbXBhdF9pcDZ0X2dldF90YXJnZXQoZSk7Ci0JdGFyZ2V0ID0gdC0+dS5rZXJuZWwudGFyZ2V0OwogCXh0X2NvbXBhdF90YXJnZXRfZnJvbV91c2VyKHQsIGRzdHB0ciwgc2l6ZSk7CiAKIAlkZS0+bmV4dF9vZmZzZXQgPSBlLT5uZXh0X29mZnNldCAtIChvcmlnc2l6ZSAtICpzaXplKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X1JFSkVDVC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfUkVKRUNULmMKaW5kZXggMjhlNzQ0OC4uYTVhNGM1ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfUkVKRUNULmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfUkVKRUNULmMKQEAgLTQ1LDYgKzQ1LDggQEAKIAlpbnQgdGNwaG9mZiwgbmVlZHNfYWNrOwogCWNvbnN0IHN0cnVjdCBpcHY2aGRyICpvaXA2aCA9IGlwdjZfaGRyKG9sZHNrYik7CiAJc3RydWN0IGlwdjZoZHIgKmlwNmg7CisjZGVmaW5lIERFRkFVTFRfVE9TX1ZBTFVFCTB4MFUKKwljb25zdCBfX3U4IHRjbGFzcyA9IERFRkFVTFRfVE9TX1ZBTFVFOwogCXN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IE5VTEw7CiAJdTggcHJvdG87CiAJc3RydWN0IGZsb3dpNiBmbDY7CkBAIC0xMjQsNyArMTI2LDcgQEAKIAlza2JfcHV0KG5za2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpOwogCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihuc2tiKTsKIAlpcDZoID0gaXB2Nl9oZHIobnNrYik7Ci0JaXA2aC0+dmVyc2lvbiA9IDY7CisJKihfX2JlMzIgKilpcDZoID0gIGh0b25sKDB4NjAwMDAwMDAgfCAodGNsYXNzIDw8IDIwKSk7CiAJaXA2aC0+aG9wX2xpbWl0ID0gaXA2X2RzdF9ob3BsaW1pdChkc3QpOwogCWlwNmgtPm5leHRoZHIgPSBJUFBST1RPX1RDUDsKIAlpcHY2X2FkZHJfY29weSgmaXA2aC0+c2FkZHIsICZvaXA2aC0+ZGFkZHIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX21hbmdsZS5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX21hbmdsZS5jCmluZGV4IDY3OWEwYTMuLjAwZDE5MTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9tYW5nbGUuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfbWFuZ2xlLmMKQEAgLTY0LDcgKzY0LDggQEAKIAkgICAgKG1lbWNtcCgmaXB2Nl9oZHIoc2tiKS0+c2FkZHIsICZzYWRkciwgc2l6ZW9mKHNhZGRyKSkgfHwKIAkgICAgIG1lbWNtcCgmaXB2Nl9oZHIoc2tiKS0+ZGFkZHIsICZkYWRkciwgc2l6ZW9mKGRhZGRyKSkgfHwKIAkgICAgIHNrYi0+bWFyayAhPSBtYXJrIHx8Ci0JICAgICBpcHY2X2hkcihza2IpLT5ob3BfbGltaXQgIT0gaG9wX2xpbWl0KSkKKwkgICAgIGlwdjZfaGRyKHNrYiktPmhvcF9saW1pdCAhPSBob3BfbGltaXQgfHwKKwkgICAgIGZsb3dsYWJlbCAhPSAqKCh1X2ludDMyX3QgKilpcHY2X2hkcihza2IpKSkpCiAJCXJldHVybiBpcDZfcm91dGVfbWVfaGFyZGVyKHNrYikgPT0gMCA/IHJldCA6IE5GX0RST1A7CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcHJvYy5jIGIvbmV0L2lwdjYvcHJvYy5jCmluZGV4IDI0YjM1NTguLjE4ZmY1ZGYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3Byb2MuYworKysgYi9uZXQvaXB2Ni9wcm9jLmMKQEAgLTE0MSw3ICsxNDEsMTEgQEAKIAlTTk1QX01JQl9TRU5USU5FTAogfTsKIAotc3RhdGljIHZvaWQgc25tcDZfc2VxX3Nob3dfaWNtcHY2bXNnKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkIF9fcGVyY3B1ICoqbWliKQorLyogY2FuIGJlIGNhbGxlZCBlaXRoZXIgd2l0aCBwZXJjcHUgbWliIChwY3B1bWliICE9IE5VTEwpLAorICogb3Igc2hhcmVkIG9uZSAoc21pYiAhPSBOVUxMKQorICovCitzdGF0aWMgdm9pZCBzbm1wNl9zZXFfc2hvd19pY21wdjZtc2coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgX19wZXJjcHUgKipwY3B1bWliLAorCQkJCSAgICAgYXRvbWljX2xvbmdfdCAqc21pYikKIHsKIAljaGFyIG5hbWVbMzJdOwogCWludCBpOwpAQCAtMTU4LDE0ICsxNjIsMTQgQEAKIAkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiSWNtcDYlcyVzIiwKIAkJCWkgJiAweDEwMCA/ICJPdXQiIDogIkluIiwgcCk7CiAJCXNlcV9wcmludGYoc2VxLCAiJS0zMnNcdCVsdVxuIiwgbmFtZSwKLQkJCXNubXBfZm9sZF9maWVsZChtaWIsIGkpKTsKKwkJCXBjcHVtaWIgPyBzbm1wX2ZvbGRfZmllbGQocGNwdW1pYiwgaSkgOiBhdG9taWNfbG9uZ19yZWFkKHNtaWIgKyBpKSk7CiAJfQogCiAJLyogcHJpbnQgYnkgbnVtYmVyIChub256ZXJvIG9ubHkpIC0gSUNNUE1zZ1N0YXQgZm9ybWF0ICovCiAJZm9yIChpID0gMDsgaSA8IElDTVA2TVNHX01JQl9NQVg7IGkrKykgewogCQl1bnNpZ25lZCBsb25nIHZhbDsKIAotCQl2YWwgPSBzbm1wX2ZvbGRfZmllbGQobWliLCBpKTsKKwkJdmFsID0gcGNwdW1pYiA/IHNubXBfZm9sZF9maWVsZChwY3B1bWliLCBpKSA6IGF0b21pY19sb25nX3JlYWQoc21pYiArIGkpOwogCQlpZiAoIXZhbCkKIAkJCWNvbnRpbnVlOwogCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJJY21wNiVzVHlwZSV1IiwKQEAgLTE3NCwxNCArMTc4LDIyIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzbm1wNl9zZXFfc2hvd19pdGVtKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkIF9fcGVyY3B1ICoqbWliLAorLyogY2FuIGJlIGNhbGxlZCBlaXRoZXIgd2l0aCBwZXJjcHUgbWliIChwY3B1bWliICE9IE5VTEwpLAorICogb3Igc2hhcmVkIG9uZSAoc21pYiAhPSBOVUxMKQorICovCitzdGF0aWMgdm9pZCBzbm1wNl9zZXFfc2hvd19pdGVtKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkIF9fcGVyY3B1ICoqcGNwdW1pYiwKKwkJCQlhdG9taWNfbG9uZ190ICpzbWliLAogCQkJCWNvbnN0IHN0cnVjdCBzbm1wX21pYiAqaXRlbWxpc3QpCiB7CiAJaW50IGk7CisJdW5zaWduZWQgbG9uZyB2YWw7CiAKLQlmb3IgKGkgPSAwOyBpdGVtbGlzdFtpXS5uYW1lOyBpKyspCi0JCXNlcV9wcmludGYoc2VxLCAiJS0zMnNcdCVsdVxuIiwgaXRlbWxpc3RbaV0ubmFtZSwKLQkJCSAgIHNubXBfZm9sZF9maWVsZChtaWIsIGl0ZW1saXN0W2ldLmVudHJ5KSk7CisJZm9yIChpID0gMDsgaXRlbWxpc3RbaV0ubmFtZTsgaSsrKSB7CisJCXZhbCA9IHBjcHVtaWIgPworCQkJc25tcF9mb2xkX2ZpZWxkKHBjcHVtaWIsIGl0ZW1saXN0W2ldLmVudHJ5KSA6CisJCQlhdG9taWNfbG9uZ19yZWFkKHNtaWIgKyBpdGVtbGlzdFtpXS5lbnRyeSk7CisJCXNlcV9wcmludGYoc2VxLCAiJS0zMnNcdCVsdVxuIiwgaXRlbWxpc3RbaV0ubmFtZSwgdmFsKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHNubXA2X3NlcV9zaG93X2l0ZW02NChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCBfX3BlcmNwdSAqKm1pYiwKQEAgLTIwMSwxMyArMjEzLDEzIEBACiAJc25tcDZfc2VxX3Nob3dfaXRlbTY0KHNlcSwgKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIuaXB2Nl9zdGF0aXN0aWNzLAogCQkJICAgIHNubXA2X2lwc3RhdHNfbGlzdCwgb2Zmc2V0b2Yoc3RydWN0IGlwc3RhdHNfbWliLCBzeW5jcCkpOwogCXNubXA2X3NlcV9zaG93X2l0ZW0oc2VxLCAodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi5pY21wdjZfc3RhdGlzdGljcywKLQkJCSAgICBzbm1wNl9pY21wNl9saXN0KTsKKwkJCSAgICBOVUxMLCBzbm1wNl9pY21wNl9saXN0KTsKIAlzbm1wNl9zZXFfc2hvd19pY21wdjZtc2coc2VxLAotCQkJICAgICh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLmljbXB2Nm1zZ19zdGF0aXN0aWNzKTsKKwkJCSAgICAodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi5pY21wdjZtc2dfc3RhdGlzdGljcywgTlVMTCk7CiAJc25tcDZfc2VxX3Nob3dfaXRlbShzZXEsICh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLnVkcF9zdGF0c19pbjYsCi0JCQkgICAgc25tcDZfdWRwNl9saXN0KTsKKwkJCSAgICBOVUxMLCBzbm1wNl91ZHA2X2xpc3QpOwogCXNubXA2X3NlcV9zaG93X2l0ZW0oc2VxLCAodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi51ZHBsaXRlX3N0YXRzX2luNiwKLQkJCSAgICBzbm1wNl91ZHBsaXRlNl9saXN0KTsKKwkJCSAgICBOVUxMLCBzbm1wNl91ZHBsaXRlNl9saXN0KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjI5LDExICsyNDEsMTEgQEAKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gKHN0cnVjdCBpbmV0Nl9kZXYgKilzZXEtPnByaXZhdGU7CiAKIAlzZXFfcHJpbnRmKHNlcSwgIiUtMzJzXHQldVxuIiwgImlmSW5kZXgiLCBpZGV2LT5kZXYtPmlmaW5kZXgpOwotCXNubXA2X3NlcV9zaG93X2l0ZW0oc2VxLCAodm9pZCBfX3BlcmNwdSAqKilpZGV2LT5zdGF0cy5pcHY2LAorCXNubXA2X3NlcV9zaG93X2l0ZW0oc2VxLCAodm9pZCBfX3BlcmNwdSAqKilpZGV2LT5zdGF0cy5pcHY2LCBOVUxMLAogCQkJICAgIHNubXA2X2lwc3RhdHNfbGlzdCk7Ci0Jc25tcDZfc2VxX3Nob3dfaXRlbShzZXEsICh2b2lkIF9fcGVyY3B1ICoqKWlkZXYtPnN0YXRzLmljbXB2NiwKKwlzbm1wNl9zZXFfc2hvd19pdGVtKHNlcSwgTlVMTCwgaWRldi0+c3RhdHMuaWNtcHY2ZGV2LT5taWJzLAogCQkJICAgIHNubXA2X2ljbXA2X2xpc3QpOwotCXNubXA2X3NlcV9zaG93X2ljbXB2Nm1zZyhzZXEsICh2b2lkIF9fcGVyY3B1ICoqKWlkZXYtPnN0YXRzLmljbXB2Nm1zZyk7CisJc25tcDZfc2VxX3Nob3dfaWNtcHY2bXNnKHNlcSwgTlVMTCwgaWRldi0+c3RhdHMuaWNtcHY2bXNnZGV2LT5taWJzKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmF3LmMgYi9uZXQvaXB2Ni9yYXcuYwppbmRleCA0YTFjM2I0Li5hZTY0OTg0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yYXcuYworKysgYi9uZXQvaXB2Ni9yYXcuYwpAQCAtNjcsOCArNjcsOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzb2NrICpfX3Jhd192Nl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssCi0JCXVuc2lnbmVkIHNob3J0IG51bSwgc3RydWN0IGluNl9hZGRyICpsb2NfYWRkciwKLQkJc3RydWN0IGluNl9hZGRyICpybXRfYWRkciwgaW50IGRpZikKKwkJdW5zaWduZWQgc2hvcnQgbnVtLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmxvY19hZGRyLAorCQljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnJtdF9hZGRyLCBpbnQgZGlmKQogewogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwogCWludCBpc19tdWx0aWNhc3QgPSBpcHY2X2FkZHJfaXNfbXVsdGljYXN0KGxvY19hZGRyKTsKQEAgLTE1NCw4ICsxNTQsOCBAQAogICovCiBzdGF0aWMgaW50IGlwdjZfcmF3X2RlbGl2ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIpCiB7Ci0Jc3RydWN0IGluNl9hZGRyICpzYWRkcjsKLQlzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyOworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHI7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkcjsKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJaW50IGRlbGl2ZXJlZCA9IDA7CiAJX191OCBoYXNoOwpAQCAtMzQ4LDcgKzM0OCw3IEBACiB7CiAJc3RydWN0IHNvY2sgKnNrOwogCWludCBoYXNoOwotCXN0cnVjdCBpbjZfYWRkciAqc2FkZHIsICpkYWRkcjsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCAqZGFkZHI7CiAJc3RydWN0IG5ldCAqbmV0OwogCiAJaGFzaCA9IG5leHRoZHIgJiAoUkFXX0hUQUJMRV9TSVpFIC0gMSk7CkBAIC0zNTcsNyArMzU3LDcgQEAKIAlzayA9IHNrX2hlYWQoJnJhd192Nl9oYXNoaW5mby5odFtoYXNoXSk7CiAJaWYgKHNrICE9IE5VTEwpIHsKIAkJLyogTm90ZTogaXB2Nl9oZHIoc2tiKSAhPSBza2ItPmRhdGEgKi8KLQkJc3RydWN0IGlwdjZoZHIgKmlwNmggPSAoc3RydWN0IGlwdjZoZHIgKilza2ItPmRhdGE7CisJCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoID0gKGNvbnN0IHN0cnVjdCBpcHY2aGRyICopc2tiLT5kYXRhOwogCQlzYWRkciA9ICZpcDZoLT5zYWRkcjsKIAkJZGFkZHIgPSAmaXA2aC0+ZGFkZHI7CiAJCW5ldCA9IGRldl9uZXQoc2tiLT5kZXYpOwpAQCAtNTQyLDggKzU0Miw4IEBACiAJCWdvdG8gb3V0OwogCiAJb2Zmc2V0ID0gcnAtPm9mZnNldDsKLQl0b3RhbF9sZW4gPSBpbmV0X3NrKHNrKS0+Y29yay5sZW5ndGggLSAoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgLQotCQkJCQkJc2tiLT5kYXRhKTsKKwl0b3RhbF9sZW4gPSBpbmV0X3NrKHNrKS0+Y29yay5iYXNlLmxlbmd0aCAtIChza2JfbmV0d29ya19oZWFkZXIoc2tiKSAtCisJCQkJCQkgICAgIHNrYi0+ZGF0YSk7CiAJaWYgKG9mZnNldCA+PSB0b3RhbF9sZW4gLSAxKSB7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWlwNl9mbHVzaF9wZW5kaW5nX2ZyYW1lcyhzayk7CkBAIC0xMjMxLDcgKzEyMzEsNyBAQAogc3RhdGljIHZvaWQgcmF3Nl9zb2NrX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3Qgc29jayAqc3AsIGludCBpKQogewogCXN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNwKTsKLQlzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsICpzcmM7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpkZXN0LCAqc3JjOwogCV9fdTE2IGRlc3RwLCBzcmNwOwogCiAJZGVzdCAgPSAmbnAtPmRhZGRyOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmVhc3NlbWJseS5jIGIvbmV0L2lwdjYvcmVhc3NlbWJseS5jCmluZGV4IDA3YmVlYjAuLjdiOTU0ZTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JlYXNzZW1ibHkuYworKysgYi9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMKQEAgLTIyNCw3ICsyMjQsNyBAQAogfQogCiBzdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgZnJhZ19xdWV1ZSAqCi1mcV9maW5kKHN0cnVjdCBuZXQgKm5ldCwgX19iZTMyIGlkLCBzdHJ1Y3QgaW42X2FkZHIgKnNyYywgc3RydWN0IGluNl9hZGRyICpkc3QpCitmcV9maW5kKHN0cnVjdCBuZXQgKm5ldCwgX19iZTMyIGlkLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNyYywgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkc3QpCiB7CiAJc3RydWN0IGluZXRfZnJhZ19xdWV1ZSAqcTsKIAlzdHJ1Y3QgaXA2X2NyZWF0ZV9hcmcgYXJnOwpAQCAtNTM1LDcgKzUzNSw3IEBACiB7CiAJc3RydWN0IGZyYWdfaGRyICpmaGRyOwogCXN0cnVjdCBmcmFnX3F1ZXVlICpmcTsKLQlzdHJ1Y3QgaXB2NmhkciAqaGRyID0gaXB2Nl9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaGRyID0gaXB2Nl9oZHIoc2tiKTsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYl9kc3Qoc2tiKS0+ZGV2KTsKIAogCUlQNl9JTkNfU1RBVFNfQkgobmV0LCBpcDZfZHN0X2lkZXYoc2tiX2RzdChza2IpKSwgSVBTVEFUU19NSUJfUkVBU01SRVFEUyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuYwppbmRleCA4NDM0MDZmLi5kZTJiMWRlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCisrKyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTg5LDEyICs4OSwxMiBAQAogCiAjaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GTwogc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2FkZF9yb3V0ZV9pbmZvKHN0cnVjdCBuZXQgKm5ldCwKLQkJCQkJICAgc3RydWN0IGluNl9hZGRyICpwcmVmaXgsIGludCBwcmVmaXhsZW4sCi0JCQkJCSAgIHN0cnVjdCBpbjZfYWRkciAqZ3dhZGRyLCBpbnQgaWZpbmRleCwKKwkJCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpwcmVmaXgsIGludCBwcmVmaXhsZW4sCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3dhZGRyLCBpbnQgaWZpbmRleCwKIAkJCQkJICAgdW5zaWduZWQgcHJlZik7CiBzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfZ2V0X3JvdXRlX2luZm8oc3RydWN0IG5ldCAqbmV0LAotCQkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKnByZWZpeCwgaW50IHByZWZpeGxlbiwKLQkJCQkJICAgc3RydWN0IGluNl9hZGRyICpnd2FkZHIsIGludCBpZmluZGV4KTsKKwkJCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpwcmVmaXgsIGludCBwcmVmaXhsZW4sCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3dhZGRyLCBpbnQgaWZpbmRleCk7CiAjZW5kaWYKIAogc3RhdGljIHUzMiAqaXB2Nl9jb3dfbWV0cmljcyhzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHVuc2lnbmVkIGxvbmcgb2xkKQpAQCAtMTUzLDYgKzE1MywxMiBAQAogewogfQogCitzdGF0aWMgdTMyICppcDZfcnRfYmxhY2tob2xlX2Nvd19tZXRyaWNzKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgb2xkKQoreworCXJldHVybiBOVUxMOworfQorCiBzdGF0aWMgc3RydWN0IGRzdF9vcHMgaXA2X2RzdF9ibGFja2hvbGVfb3BzID0gewogCS5mYW1pbHkJCQk9CUFGX0lORVQ2LAogCS5wcm90b2NvbAkJPQljcHVfdG9fYmUxNihFVEhfUF9JUFY2KSwKQEAgLTE2MSw2ICsxNjcsNyBAQAogCS5kZWZhdWx0X210dQkJPQlpcDZfYmxhY2tob2xlX2RlZmF1bHRfbXR1LAogCS5kZWZhdWx0X2Fkdm1zcwkJPQlpcDZfZGVmYXVsdF9hZHZtc3MsCiAJLnVwZGF0ZV9wbXR1CQk9CWlwNl9ydF9ibGFja2hvbGVfdXBkYXRlX3BtdHUsCisJLmNvd19tZXRyaWNzCQk9CWlwNl9ydF9ibGFja2hvbGVfY293X21ldHJpY3MsCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGlwNl90ZW1wbGF0ZV9tZXRyaWNzW1JUQVhfTUFYXSA9IHsKQEAgLTIyMCw5ICsyMjcsMTQgQEAKICNlbmRpZgogCiAvKiBhbGxvY2F0ZSBkc3Qgd2l0aCBpcDZfZHN0X29wcyAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3QgcnQ2X2luZm8gKmlwNl9kc3RfYWxsb2Moc3RydWN0IGRzdF9vcHMgKm9wcykKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJ0Nl9pbmZvICppcDZfZHN0X2FsbG9jKHN0cnVjdCBkc3Rfb3BzICpvcHMsCisJCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gKHN0cnVjdCBydDZfaW5mbyAqKWRzdF9hbGxvYyhvcHMsIDApOworCXN0cnVjdCBydDZfaW5mbyAqcnQgPSBkc3RfYWxsb2Mob3BzLCBkZXYsIDAsIDAsIDApOworCisJbWVtc2V0KCZydC0+cnQ2aV90YWJsZSwgMCwgc2l6ZW9mKCpydCkgLSBzaXplb2Yoc3RydWN0IGRzdF9lbnRyeSkpOworCisJcmV0dXJuIHJ0OwogfQogCiBzdGF0aWMgdm9pZCBpcDZfZHN0X2Rlc3Ryb3koc3RydWN0IGRzdF9lbnRyeSAqZHN0KQpAQCAtMjgzLDcgKzI5NSw3IEBACiAJCXRpbWVfYWZ0ZXIoamlmZmllcywgcnQtPnJ0NmlfZXhwaXJlcyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHJ0Nl9uZWVkX3N0cmljdChzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyKQorc3RhdGljIGlubGluZSBpbnQgcnQ2X25lZWRfc3RyaWN0KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIpCiB7CiAJcmV0dXJuIGlwdjZfYWRkcl90eXBlKGRhZGRyKSAmCiAJCShJUFY2X0FERFJfTVVMVElDQVNUIHwgSVBWNl9BRERSX0xJTktMT0NBTCB8IElQVjZfQUREUl9MT09QQkFDSyk7CkBAIC0yOTUsNyArMzA3LDcgQEAKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcnQ2X2luZm8gKnJ0Nl9kZXZpY2VfbWF0Y2goc3RydWN0IG5ldCAqbmV0LAogCQkJCQkJICAgIHN0cnVjdCBydDZfaW5mbyAqcnQsCi0JCQkJCQkgICAgc3RydWN0IGluNl9hZGRyICpzYWRkciwKKwkJCQkJCSAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAogCQkJCQkJICAgIGludCBvaWYsCiAJCQkJCQkgICAgaW50IGZsYWdzKQogewpAQCAtNTA3LDcgKzUxOSw3IEBACiAKICNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPCiBpbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLAotCQkgIHN0cnVjdCBpbjZfYWRkciAqZ3dhZGRyKQorCQkgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3dhZGRyKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKIAlzdHJ1Y3Qgcm91dGVfaW5mbyAqcmluZm8gPSAoc3RydWN0IHJvdXRlX2luZm8gKikgb3B0OwpAQCAtNjcwLDggKzY4Miw4IEBACiAJcmV0dXJuIF9faXA2X2luc19ydChydCwgJmluZm8pOwogfQogCi1zdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfYWxsb2NfY293KHN0cnVjdCBydDZfaW5mbyAqb3J0LCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAotCQkJCSAgICAgIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpCitzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfYWxsb2NfY293KHN0cnVjdCBydDZfaW5mbyAqb3J0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpCiB7CiAJc3RydWN0IHJ0Nl9pbmZvICpydDsKIApAQCAtNzM5LDcgKzc1MSw3IEBACiAJcmV0dXJuIHJ0OwogfQogCi1zdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfYWxsb2NfY2xvbmUoc3RydWN0IHJ0Nl9pbmZvICpvcnQsIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIpCitzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfYWxsb2NfY2xvbmUoc3RydWN0IHJ0Nl9pbmZvICpvcnQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIpCiB7CiAJc3RydWN0IHJ0Nl9pbmZvICpydCA9IGlwNl9ydF9jb3B5KG9ydCk7CiAJaWYgKHJ0KSB7CkBAIC04MzAsNyArODQyLDcgQEAKIAogdm9pZCBpcDZfcm91dGVfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaXB2NmhkciAqaXBoID0gaXB2Nl9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXBoID0gaXB2Nl9oZHIoc2tiKTsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0+ZGV2KTsKIAlpbnQgZmxhZ3MgPSBSVDZfTE9PS1VQX0ZfSEFTX1NBRERSOwogCXN0cnVjdCBmbG93aTYgZmw2ID0gewpAQCAtODc0LDExICs4ODYsMTMgQEAKIAogc3RydWN0IGRzdF9lbnRyeSAqaXA2X2JsYWNraG9sZV9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdF9vcmlnKQogewotCXN0cnVjdCBydDZfaW5mbyAqcnQgPSBkc3RfYWxsb2MoJmlwNl9kc3RfYmxhY2tob2xlX29wcywgMSk7Ci0Jc3RydWN0IHJ0Nl9pbmZvICpvcnQgPSAoc3RydWN0IHJ0Nl9pbmZvICopIGRzdF9vcmlnOworCXN0cnVjdCBydDZfaW5mbyAqcnQsICpvcnQgPSAoc3RydWN0IHJ0Nl9pbmZvICopIGRzdF9vcmlnOwogCXN0cnVjdCBkc3RfZW50cnkgKm5ldyA9IE5VTEw7CiAKKwlydCA9IGRzdF9hbGxvYygmaXA2X2RzdF9ibGFja2hvbGVfb3BzLCBvcnQtPmRzdC5kZXYsIDEsIDAsIDApOwogCWlmIChydCkgeworCQltZW1zZXQoJnJ0LT5ydDZpX3RhYmxlLCAwLCBzaXplb2YoKnJ0KSAtIHNpemVvZihzdHJ1Y3QgZHN0X2VudHJ5KSk7CisKIAkJbmV3ID0gJnJ0LT5kc3Q7CiAKIAkJbmV3LT5fX3VzZSA9IDE7CkBAIC04ODYsOSArOTAwLDYgQEAKIAkJbmV3LT5vdXRwdXQgPSBkc3RfZGlzY2FyZDsKIAogCQlkc3RfY29weV9tZXRyaWNzKG5ldywgJm9ydC0+ZHN0KTsKLQkJbmV3LT5kZXYgPSBvcnQtPmRzdC5kZXY7Ci0JCWlmIChuZXctPmRldikKLQkJCWRldl9ob2xkKG5ldy0+ZGV2KTsKIAkJcnQtPnJ0NmlfaWRldiA9IG9ydC0+cnQ2aV9pZGV2OwogCQlpZiAocnQtPnJ0NmlfaWRldikKIAkJCWluNl9kZXZfaG9sZChydC0+cnQ2aV9pZGV2KTsKQEAgLTEwMzEsMTMgKzEwNDIsMTIgQEAKIAlpZiAodW5saWtlbHkoaWRldiA9PSBOVUxMKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlydCA9IGlwNl9kc3RfYWxsb2MoJm5ldC0+aXB2Ni5pcDZfZHN0X29wcyk7CisJcnQgPSBpcDZfZHN0X2FsbG9jKCZuZXQtPmlwdjYuaXA2X2RzdF9vcHMsIGRldik7CiAJaWYgKHVubGlrZWx5KHJ0ID09IE5VTEwpKSB7CiAJCWluNl9kZXZfcHV0KGlkZXYpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlkZXZfaG9sZChkZXYpOwogCWlmIChuZWlnaCkKIAkJbmVpZ2hfaG9sZChuZWlnaCk7CiAJZWxzZSB7CkBAIC0xMDQ2LDcgKzEwNTYsNiBAQAogCQkJbmVpZ2ggPSBOVUxMOwogCX0KIAotCXJ0LT5ydDZpX2RldgkgID0gZGV2OwogCXJ0LT5ydDZpX2lkZXYgICAgID0gaWRldjsKIAlydC0+cnQ2aV9uZXh0aG9wICA9IG5laWdoOwogCWF0b21pY19zZXQoJnJ0LT5kc3QuX19yZWZjbnQsIDEpOwpAQCAtMTIwNSw3ICsxMjE0LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcnQgPSBpcDZfZHN0X2FsbG9jKCZuZXQtPmlwdjYuaXA2X2RzdF9vcHMpOworCXJ0ID0gaXA2X2RzdF9hbGxvYygmbmV0LT5pcHY2LmlwNl9kc3Rfb3BzLCBOVUxMKTsKIAogCWlmIChydCA9PSBOVUxMKSB7CiAJCWVyciA9IC1FTk9NRU07CkBAIC0xMjcyLDcgKzEyODEsNyBAQAogCX0KIAogCWlmIChjZmctPmZjX2ZsYWdzICYgUlRGX0dBVEVXQVkpIHsKLQkJc3RydWN0IGluNl9hZGRyICpnd19hZGRyOworCQljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3X2FkZHI7CiAJCWludCBnd2FfdHlwZTsKIAogCQlnd19hZGRyID0gJmNmZy0+ZmNfZ2F0ZXdheTsKQEAgLTEzMjUsNiArMTMzNCwxNiBAQAogCWlmIChkZXYgPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAKKwlpZiAoIWlwdjZfYWRkcl9hbnkoJmNmZy0+ZmNfcHJlZnNyYykpIHsKKwkJaWYgKCFpcHY2X2Noa19hZGRyKG5ldCwgJmNmZy0+ZmNfcHJlZnNyYywgZGV2LCAwKSkgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlwdjZfYWRkcl9jb3B5KCZydC0+cnQ2aV9wcmVmc3JjLmFkZHIsICZjZmctPmZjX3ByZWZzcmMpOworCQlydC0+cnQ2aV9wcmVmc3JjLnBsZW4gPSAxMjg7CisJfSBlbHNlCisJCXJ0LT5ydDZpX3ByZWZzcmMucGxlbiA9IDA7CisKIAlpZiAoY2ZnLT5mY19mbGFncyAmIChSVEZfR0FURVdBWSB8IFJURl9OT05FWFRIT1ApKSB7CiAJCXJ0LT5ydDZpX25leHRob3AgPSBfX25laWdoX2xvb2t1cF9lcnJubygmbmRfdGJsLCAmcnQtPnJ0NmlfZ2F0ZXdheSwgZGV2KTsKIAkJaWYgKElTX0VSUihydC0+cnQ2aV9uZXh0aG9wKSkgewpAQCAtMTUwMiw5ICsxNTIxLDkgQEAKIAlyZXR1cm4gcnQ7CiB9OwogCi1zdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICppcDZfcm91dGVfcmVkaXJlY3Qoc3RydWN0IGluNl9hZGRyICpkZXN0LAotCQkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKnNyYywKLQkJCQkJICAgc3RydWN0IGluNl9hZGRyICpnYXRld2F5LAorc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqaXA2X3JvdXRlX3JlZGlyZWN0KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwKKwkJCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzcmMsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ2F0ZXdheSwKIAkJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpbnQgZmxhZ3MgPSBSVDZfTE9PS1VQX0ZfSEFTX1NBRERSOwpAQCAtMTUyNiw4ICsxNTQ1LDggQEAKIAkJCQkJCSAgIGZsYWdzLCBfX2lwNl9yb3V0ZV9yZWRpcmVjdCk7CiB9CiAKLXZvaWQgcnQ2X3JlZGlyZWN0KHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsCi0JCSAgc3RydWN0IGluNl9hZGRyICpzYWRkciwKK3ZvaWQgcnQ2X3JlZGlyZWN0KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzcmMsCisJCSAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwKIAkJICBzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgdTggKmxsYWRkciwgaW50IG9uX2xpbmspCiB7CiAJc3RydWN0IHJ0Nl9pbmZvICpydCwgKm5ydCA9IE5VTEw7CkBAIC0xNjAxLDcgKzE2MjAsNyBAQAogICoJaS5lLiBQYXRoIE1UVSBkaXNjb3ZlcnkKICAqLwogCi1zdGF0aWMgdm9pZCBydDZfZG9fcG10dV9kaXNjKHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCitzdGF0aWMgdm9pZCBydDZfZG9fcG10dV9kaXNjKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCiAJCQkgICAgIHN0cnVjdCBuZXQgKm5ldCwgdTMyIHBtdHUsIGludCBpZmluZGV4KQogewogCXN0cnVjdCBydDZfaW5mbyAqcnQsICpucnQ7CkBAIC0xNjg2LDcgKzE3MDUsNyBAQAogCWRzdF9yZWxlYXNlKCZydC0+ZHN0KTsKIH0KIAotdm9pZCBydDZfcG10dV9kaXNjb3Zlcnkoc3RydWN0IGluNl9hZGRyICpkYWRkciwgc3RydWN0IGluNl9hZGRyICpzYWRkciwKK3ZvaWQgcnQ2X3BtdHVfZGlzY292ZXJ5KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCiAJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcG10dSkKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CkBAIC0xNzE0LDcgKzE3MzMsOCBAQAogc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqIGlwNl9ydF9jb3B5KHN0cnVjdCBydDZfaW5mbyAqb3J0KQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQob3J0LT5ydDZpX2Rldik7Ci0Jc3RydWN0IHJ0Nl9pbmZvICpydCA9IGlwNl9kc3RfYWxsb2MoJm5ldC0+aXB2Ni5pcDZfZHN0X29wcyk7CisJc3RydWN0IHJ0Nl9pbmZvICpydCA9IGlwNl9kc3RfYWxsb2MoJm5ldC0+aXB2Ni5pcDZfZHN0X29wcywKKwkJCQkJICAgIG9ydC0+ZHN0LmRldik7CiAKIAlpZiAocnQpIHsKIAkJcnQtPmRzdC5pbnB1dCA9IG9ydC0+ZHN0LmlucHV0OwpAQCAtMTcyMiw5ICsxNzQyLDYgQEAKIAogCQlkc3RfY29weV9tZXRyaWNzKCZydC0+ZHN0LCAmb3J0LT5kc3QpOwogCQlydC0+ZHN0LmVycm9yID0gb3J0LT5kc3QuZXJyb3I7Ci0JCXJ0LT5kc3QuZGV2ID0gb3J0LT5kc3QuZGV2OwotCQlpZiAocnQtPmRzdC5kZXYpCi0JCQlkZXZfaG9sZChydC0+ZHN0LmRldik7CiAJCXJ0LT5ydDZpX2lkZXYgPSBvcnQtPnJ0NmlfaWRldjsKIAkJaWYgKHJ0LT5ydDZpX2lkZXYpCiAJCQlpbjZfZGV2X2hvbGQocnQtPnJ0NmlfaWRldik7CkBAIC0xNzM5LDYgKzE3NTYsNyBAQAogI2lmZGVmIENPTkZJR19JUFY2X1NVQlRSRUVTCiAJCW1lbWNweSgmcnQtPnJ0Nmlfc3JjLCAmb3J0LT5ydDZpX3NyYywgc2l6ZW9mKHN0cnVjdCBydDZrZXkpKTsKICNlbmRpZgorCQltZW1jcHkoJnJ0LT5ydDZpX3ByZWZzcmMsICZvcnQtPnJ0NmlfcHJlZnNyYywgc2l6ZW9mKHN0cnVjdCBydDZrZXkpKTsKIAkJcnQtPnJ0NmlfdGFibGUgPSBvcnQtPnJ0NmlfdGFibGU7CiAJfQogCXJldHVybiBydDsKQEAgLTE3NDYsOCArMTc2NCw4IEBACiAKICNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPCiBzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfZ2V0X3JvdXRlX2luZm8oc3RydWN0IG5ldCAqbmV0LAotCQkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKnByZWZpeCwgaW50IHByZWZpeGxlbiwKLQkJCQkJICAgc3RydWN0IGluNl9hZGRyICpnd2FkZHIsIGludCBpZmluZGV4KQorCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnByZWZpeCwgaW50IHByZWZpeGxlbiwKKwkJCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpnd2FkZHIsIGludCBpZmluZGV4KQogewogCXN0cnVjdCBmaWI2X25vZGUgKmZuOwogCXN0cnVjdCBydDZfaW5mbyAqcnQgPSBOVUxMOwpAQCAtMTc3OCw4ICsxNzk2LDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2FkZF9yb3V0ZV9pbmZvKHN0cnVjdCBuZXQgKm5ldCwKLQkJCQkJICAgc3RydWN0IGluNl9hZGRyICpwcmVmaXgsIGludCBwcmVmaXhsZW4sCi0JCQkJCSAgIHN0cnVjdCBpbjZfYWRkciAqZ3dhZGRyLCBpbnQgaWZpbmRleCwKKwkJCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpwcmVmaXgsIGludCBwcmVmaXhsZW4sCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3dhZGRyLCBpbnQgaWZpbmRleCwKIAkJCQkJICAgdW5zaWduZWQgcHJlZikKIHsKIAlzdHJ1Y3QgZmliNl9jb25maWcgY2ZnID0gewpAQCAtMTgwNyw3ICsxODI1LDcgQEAKIH0KICNlbmRpZgogCi1zdHJ1Y3QgcnQ2X2luZm8gKnJ0Nl9nZXRfZGZsdF9yb3V0ZXIoc3RydWN0IGluNl9hZGRyICphZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RydWN0IHJ0Nl9pbmZvICpydDZfZ2V0X2RmbHRfcm91dGVyKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcnQ2X2luZm8gKnJ0OwogCXN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZTsKQEAgLTE4MjksNyArMTg0Nyw3IEBACiAJcmV0dXJuIHJ0OwogfQogCi1zdHJ1Y3QgcnQ2X2luZm8gKnJ0Nl9hZGRfZGZsdF9yb3V0ZXIoc3RydWN0IGluNl9hZGRyICpnd2FkZHIsCitzdHJ1Y3QgcnQ2X2luZm8gKnJ0Nl9hZGRfZGZsdF9yb3V0ZXIoY29uc3Qgc3RydWN0IGluNl9hZGRyICpnd2FkZHIsCiAJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgICAgdW5zaWduZWQgaW50IHByZWYpCiB7CkBAIC0xOTk0LDcgKzIwMTIsOCBAQAogCQkJCSAgICBpbnQgYW55Y2FzdCkKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGlkZXYtPmRldik7Ci0Jc3RydWN0IHJ0Nl9pbmZvICpydCA9IGlwNl9kc3RfYWxsb2MoJm5ldC0+aXB2Ni5pcDZfZHN0X29wcyk7CisJc3RydWN0IHJ0Nl9pbmZvICpydCA9IGlwNl9kc3RfYWxsb2MoJm5ldC0+aXB2Ni5pcDZfZHN0X29wcywKKwkJCQkJICAgIG5ldC0+bG9vcGJhY2tfZGV2KTsKIAlzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDsKIAogCWlmIChydCA9PSBOVUxMKSB7CkBAIC0yMDA0LDE1ICsyMDIzLDEyIEBACiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCX0KIAotCWRldl9ob2xkKG5ldC0+bG9vcGJhY2tfZGV2KTsKIAlpbjZfZGV2X2hvbGQoaWRldik7CiAKIAlydC0+ZHN0LmZsYWdzID0gRFNUX0hPU1Q7CiAJcnQtPmRzdC5pbnB1dCA9IGlwNl9pbnB1dDsKIAlydC0+ZHN0Lm91dHB1dCA9IGlwNl9vdXRwdXQ7Ci0JcnQtPnJ0NmlfZGV2ID0gbmV0LT5sb29wYmFja19kZXY7CiAJcnQtPnJ0NmlfaWRldiA9IGlkZXY7Ci0JZHN0X21ldHJpY19zZXQoJnJ0LT5kc3QsIFJUQVhfSE9QTElNSVQsIC0xKTsKIAlydC0+ZHN0Lm9ic29sZXRlID0gLTE7CiAKIAlydC0+cnQ2aV9mbGFncyA9IFJURl9VUCB8IFJURl9OT05FWFRIT1A7CkBAIC0yMDM3LDYgKzIwNTMsNTUgQEAKIAlyZXR1cm4gcnQ7CiB9CiAKK2ludCBpcDZfcm91dGVfZ2V0X3NhZGRyKHN0cnVjdCBuZXQgKm5ldCwKKwkJCXN0cnVjdCBydDZfaW5mbyAqcnQsCisJCQljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQkJdW5zaWduZWQgaW50IHByZWZzLAorCQkJc3RydWN0IGluNl9hZGRyICpzYWRkcikKK3sKKwlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gaXA2X2RzdF9pZGV2KChzdHJ1Y3QgZHN0X2VudHJ5KilydCk7CisJaW50IGVyciA9IDA7CisJaWYgKHJ0LT5ydDZpX3ByZWZzcmMucGxlbikKKwkJaXB2Nl9hZGRyX2NvcHkoc2FkZHIsICZydC0+cnQ2aV9wcmVmc3JjLmFkZHIpOworCWVsc2UKKwkJZXJyID0gaXB2Nl9kZXZfZ2V0X3NhZGRyKG5ldCwgaWRldiA/IGlkZXYtPmRldiA6IE5VTEwsCisJCQkJCSBkYWRkciwgcHJlZnMsIHNhZGRyKTsKKwlyZXR1cm4gZXJyOworfQorCisvKiByZW1vdmUgZGVsZXRlZCBpcCBmcm9tIHByZWZzcmMgZW50cmllcyAqLworc3RydWN0IGFyZ19kZXZfbmV0X2lwIHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBuZXQgKm5ldDsKKwlzdHJ1Y3QgaW42X2FkZHIgKmFkZHI7Cit9OworCitzdGF0aWMgaW50IGZpYjZfcmVtb3ZlX3ByZWZzcmMoc3RydWN0IHJ0Nl9pbmZvICpydCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoKHN0cnVjdCBhcmdfZGV2X25ldF9pcCAqKWFyZyktPmRldjsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSAoKHN0cnVjdCBhcmdfZGV2X25ldF9pcCAqKWFyZyktPm5ldDsKKwlzdHJ1Y3QgaW42X2FkZHIgKmFkZHIgPSAoKHN0cnVjdCBhcmdfZGV2X25ldF9pcCAqKWFyZyktPmFkZHI7CisKKwlpZiAoKCh2b2lkICopcnQtPnJ0NmlfZGV2ID09IGRldiB8fCBkZXYgPT0gTlVMTCkgJiYKKwkgICAgcnQgIT0gbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5ICYmCisJICAgIGlwdjZfYWRkcl9lcXVhbChhZGRyLCAmcnQtPnJ0NmlfcHJlZnNyYy5hZGRyKSkgeworCQkvKiByZW1vdmUgcHJlZnNyYyBlbnRyeSAqLworCQlydC0+cnQ2aV9wcmVmc3JjLnBsZW4gPSAwOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBydDZfcmVtb3ZlX3ByZWZzcmMoc3RydWN0IGluZXQ2X2lmYWRkciAqaWZwKQoreworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoaWZwLT5pZGV2LT5kZXYpOworCXN0cnVjdCBhcmdfZGV2X25ldF9pcCBhZG5pID0geworCQkuZGV2ID0gaWZwLT5pZGV2LT5kZXYsCisJCS5uZXQgPSBuZXQsCisJCS5hZGRyID0gJmlmcC0+YWRkciwKKwl9OworCWZpYjZfY2xlYW5fYWxsKG5ldCwgZmliNl9yZW1vdmVfcHJlZnNyYywgMCwgJmFkbmkpOworfQorCiBzdHJ1Y3QgYXJnX2Rldl9uZXQgewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IG5ldCAqbmV0OwpAQCAtMjE4Myw2ICsyMjQ4LDkgQEAKIAkJbmxhX21lbWNweSgmY2ZnLT5mY19zcmMsIHRiW1JUQV9TUkNdLCBwbGVuKTsKIAl9CiAKKwlpZiAodGJbUlRBX1BSRUZTUkNdKQorCQlubGFfbWVtY3B5KCZjZmctPmZjX3ByZWZzcmMsIHRiW1JUQV9QUkVGU1JDXSwgMTYpOworCiAJaWYgKHRiW1JUQV9PSUZdKQogCQljZmctPmZjX2lmaW5kZXggPSBubGFfZ2V0X3UzMih0YltSVEFfT0lGXSk7CiAKQEAgLTIzMjUsMTMgKzIzOTMsMTcgQEAKICNlbmRpZgogCQkJTkxBX1BVVF9VMzIoc2tiLCBSVEFfSUlGLCBpaWYpOwogCX0gZWxzZSBpZiAoZHN0KSB7Ci0JCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBpcDZfZHN0X2lkZXYoJnJ0LT5kc3QpOwogCQlzdHJ1Y3QgaW42X2FkZHIgc2FkZHJfYnVmOwotCQlpZiAoaXB2Nl9kZXZfZ2V0X3NhZGRyKG5ldCwgaWRldiA/IGlkZXYtPmRldiA6IE5VTEwsCi0JCQkJICAgICAgIGRzdCwgMCwgJnNhZGRyX2J1ZikgPT0gMCkKKwkJaWYgKGlwNl9yb3V0ZV9nZXRfc2FkZHIobmV0LCBydCwgZHN0LCAwLCAmc2FkZHJfYnVmKSA9PSAwKQogCQkJTkxBX1BVVChza2IsIFJUQV9QUkVGU1JDLCAxNiwgJnNhZGRyX2J1Zik7CiAJfQogCisJaWYgKHJ0LT5ydDZpX3ByZWZzcmMucGxlbikgeworCQlzdHJ1Y3QgaW42X2FkZHIgc2FkZHJfYnVmOworCQlpcHY2X2FkZHJfY29weSgmc2FkZHJfYnVmLCAmcnQtPnJ0NmlfcHJlZnNyYy5hZGRyKTsKKwkJTkxBX1BVVChza2IsIFJUQV9QUkVGU1JDLCAxNiwgJnNhZGRyX2J1Zik7CisJfQorCiAJaWYgKHJ0bmV0bGlua19wdXRfbWV0cmljcyhza2IsIGRzdF9tZXRyaWNzX3B0cigmcnQtPmRzdCkpIDwgMCkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3NpdC5jIGIvbmV0L2lwdjYvc2l0LmMKaW5kZXggNDNiMzMzNy4uMWNjYTU3NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc2l0LmMKKysrIGIvbmV0L2lwdjYvc2l0LmMKQEAgLTI1MCwxMSArMjUwLDYgQEAKIAogCWRldl9uZXRfc2V0KGRldiwgbmV0KTsKIAotCWlmIChzdHJjaHIobmFtZSwgJyUnKSkgewotCQlpZiAoZGV2X2FsbG9jX25hbWUoZGV2LCBuYW1lKSA8IDApCi0JCQlnb3RvIGZhaWxlZF9mcmVlOwotCX0KLQogCW50ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCW50LT5wYXJtcyA9ICpwYXJtczsKQEAgLTQwMSwxMSArMzk2LDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBwcmxfZW50cnlfZGVzdHJveV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKQotewotCWtmcmVlKGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgaXBfdHVubmVsX3BybF9lbnRyeSwgcmN1X2hlYWQpKTsKLX0KLQogc3RhdGljIHZvaWQgcHJsX2xpc3RfZGVzdHJveV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKQogewogCXN0cnVjdCBpcF90dW5uZWxfcHJsX2VudHJ5ICpwLCAqbjsKQEAgLTQzMyw3ICs0MjMsNyBAQAogCQkgICAgIHAgPSAmeC0+bmV4dCkgewogCQkJaWYgKHgtPmFkZHIgPT0gYS0+YWRkcikgewogCQkJCSpwID0geC0+bmV4dDsKLQkJCQljYWxsX3JjdSgmeC0+cmN1X2hlYWQsIHBybF9lbnRyeV9kZXN0cm95X3JjdSk7CisJCQkJa2ZyZWVfcmN1KHgsIHJjdV9oZWFkKTsKIAkJCQl0LT5wcmxfY291bnQtLTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KQEAgLTQ1Miw3ICs0NDIsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1pc2F0YXBfY2hrc3JjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcGhkciAqaXBoLCBzdHJ1Y3QgaXBfdHVubmVsICp0KQoraXNhdGFwX2Noa3NyYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCwgc3RydWN0IGlwX3R1bm5lbCAqdCkKIHsKIAlzdHJ1Y3QgaXBfdHVubmVsX3BybF9lbnRyeSAqcDsKIAlpbnQgb2sgPSAxOwpAQCAtNDY1LDcgKzQ1NSw4IEBACiAJCWVsc2UKIAkJCXNrYi0+bmRpc2Nfbm9kZXR5cGUgPSBORElTQ19OT0RFVFlQRV9OT0RFRkFVTFQ7CiAJfSBlbHNlIHsKLQkJc3RydWN0IGluNl9hZGRyICphZGRyNiA9ICZpcHY2X2hkcihza2IpLT5zYWRkcjsKKwkJY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyNiA9ICZpcHY2X2hkcihza2IpLT5zYWRkcjsKKwogCQlpZiAoaXB2Nl9hZGRyX2lzX2lzYXRhcChhZGRyNikgJiYKIAkJICAgIChhZGRyNi0+czZfYWRkcjMyWzNdID09IGlwaC0+c2FkZHIpICYmCiAJCSAgICBpcHY2X2Noa19wcmVmaXgoYWRkcjYsIHQtPmRldikpCkBAIC00OTksNyArNDkwLDcgQEAKICAgIDggYnl0ZXMgb2YgcGFja2V0IHBheWxvYWQuIEl0IG1lYW5zLCB0aGF0IHByZWNpc2UgcmVsYXlpbmcgb2YKICAgIElDTVAgaW4gdGhlIHJlYWwgSW50ZXJuZXQgaXMgYWJzb2x1dGVseSBpbmZlYXNpYmxlLgogICovCi0Jc3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyKilza2ItPmRhdGE7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSAoY29uc3Qgc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOwogCWNvbnN0IGludCB0eXBlID0gaWNtcF9oZHIoc2tiKS0+dHlwZTsKIAljb25zdCBpbnQgY29kZSA9IGljbXBfaGRyKHNrYiktPmNvZGU7CiAJc3RydWN0IGlwX3R1bm5lbCAqdDsKQEAgLTU1Nyw3ICs1NDgsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpcGlwNl9lY25fZGVjYXBzdWxhdGUoc3RydWN0IGlwaGRyICppcGgsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW5saW5lIHZvaWQgaXBpcDZfZWNuX2RlY2Fwc3VsYXRlKGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWlmIChJTkVUX0VDTl9pc19jZShpcGgtPnRvcykpCiAJCUlQNl9FQ05fc2V0X2NlKGlwdjZfaGRyKHNrYikpOwpAQCAtNTY1LDcgKzU1Niw3IEBACiAKIHN0YXRpYyBpbnQgaXBpcDZfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGlwaGRyICppcGg7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGg7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsOwogCiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpCkBAIC02MjEsNyArNjEyLDcgQEAKICAqIGNvbWVzIGZyb20gNnJkIC8gNnRvNCAoUkZDIDMwNTYpIGFkZHIgc3BhY2UuCiAgKi8KIHN0YXRpYyBpbmxpbmUKLV9fYmUzMiB0cnlfNnJkKHN0cnVjdCBpbjZfYWRkciAqdjZkc3QsIHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCkKK19fYmUzMiB0cnlfNnJkKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqdjZkc3QsIHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCkKIHsKIAlfX2JlMzIgZHN0ID0gMDsKIApAQCAtNjY0LDggKzY1NSw4IEBACiB7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgcGNwdV90c3RhdHMgKnRzdGF0czsKLQlzdHJ1Y3QgaXBoZHIgICp0aXBoID0gJnR1bm5lbC0+cGFybXMuaXBoOwotCXN0cnVjdCBpcHY2aGRyICppcGg2ID0gaXB2Nl9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3QgaXBoZHIgICp0aXBoID0gJnR1bm5lbC0+cGFybXMuaXBoOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcGg2ID0gaXB2Nl9oZHIoc2tiKTsKIAl1OCAgICAgdG9zID0gdHVubmVsLT5wYXJtcy5pcGgudG9zOwogCV9fYmUxNiBkZiA9IHRpcGgtPmZyYWdfb2ZmOwogCXN0cnVjdCBydGFibGUgKnJ0OyAgICAgCQkJLyogUm91dGUgdG8gdGhlIG90aGVyIGhvc3QgKi8KQEAgLTY3Myw4ICs2NjQsOSBAQAogCXN0cnVjdCBpcGhkciAgKmlwaDsJCQkvKiBPdXIgbmV3IElQIGhlYWRlciAqLwogCXVuc2lnbmVkIGludCBtYXhfaGVhZHJvb207CQkvKiBUaGUgZXh0cmEgaGVhZGVyIHNwYWNlIG5lZWRlZCAqLwogCV9fYmUzMiBkc3QgPSB0aXBoLT5kYWRkcjsKKwlzdHJ1Y3QgZmxvd2k0IGZsNDsKIAlpbnQgICAgbXR1OwotCXN0cnVjdCBpbjZfYWRkciAqYWRkcjY7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyNjsKIAlpbnQgYWRkcl90eXBlOwogCiAJaWYgKHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfSVBWNikpCkBAIC02OTMsNyArNjg1LDcgQEAKIAkJCWdvdG8gdHhfZXJyb3I7CiAJCX0KIAotCQlhZGRyNiA9IChzdHJ1Y3QgaW42X2FkZHIqKSZuZWlnaC0+cHJpbWFyeV9rZXk7CisJCWFkZHI2ID0gKGNvbnN0IHN0cnVjdCBpbjZfYWRkciopJm5laWdoLT5wcmltYXJ5X2tleTsKIAkJYWRkcl90eXBlID0gaXB2Nl9hZGRyX3R5cGUoYWRkcjYpOwogCiAJCWlmICgoYWRkcl90eXBlICYgSVBWNl9BRERSX1VOSUNBU1QpICYmCkBAIC03MTgsNyArNzEwLDcgQEAKIAkJCWdvdG8gdHhfZXJyb3I7CiAJCX0KIAotCQlhZGRyNiA9IChzdHJ1Y3QgaW42X2FkZHIqKSZuZWlnaC0+cHJpbWFyeV9rZXk7CisJCWFkZHI2ID0gKGNvbnN0IHN0cnVjdCBpbjZfYWRkciopJm5laWdoLT5wcmltYXJ5X2tleTsKIAkJYWRkcl90eXBlID0gaXB2Nl9hZGRyX3R5cGUoYWRkcjYpOwogCiAJCWlmIChhZGRyX3R5cGUgPT0gSVBWNl9BRERSX0FOWSkgewpAQCAtNzMyLDcgKzcyNCw3IEBACiAJCWRzdCA9IGFkZHI2LT5zNl9hZGRyMzJbM107CiAJfQogCi0JcnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMoZGV2X25ldChkZXYpLCBOVUxMLAorCXJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKGRldl9uZXQoZGV2KSwgJmZsNCwgTlVMTCwKIAkJCQkgICBkc3QsIHRpcGgtPnNhZGRyLAogCQkJCSAgIDAsIDAsCiAJCQkJICAgSVBQUk9UT19JUFY2LCBSVF9UT1ModG9zKSwKQEAgLTgyNiw4ICs4MTgsOCBAQAogCWlwaC0+ZnJhZ19vZmYJCT0JZGY7CiAJaXBoLT5wcm90b2NvbAkJPQlJUFBST1RPX0lQVjY7CiAJaXBoLT50b3MJCT0JSU5FVF9FQ05fZW5jYXBzdWxhdGUodG9zLCBpcHY2X2dldF9kc2ZpZWxkKGlwaDYpKTsKLQlpcGgtPmRhZGRyCQk9CXJ0LT5ydF9kc3Q7Ci0JaXBoLT5zYWRkcgkJPQlydC0+cnRfc3JjOworCWlwaC0+ZGFkZHIJCT0JZmw0LmRhZGRyOworCWlwaC0+c2FkZHIJCT0JZmw0LnNhZGRyOwogCiAJaWYgKChpcGgtPnR0bCA9IHRpcGgtPnR0bCkgPT0gMCkKIAkJaXBoLT50dGwJPQlpcGg2LT5ob3BfbGltaXQ7CkBAIC04NDksMTMgKzg0MSwxNCBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICp0ZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWw7Ci0Jc3RydWN0IGlwaGRyICppcGg7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGg7CisJc3RydWN0IGZsb3dpNCBmbDQ7CiAKIAl0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCWlwaCA9ICZ0dW5uZWwtPnBhcm1zLmlwaDsKIAogCWlmIChpcGgtPmRhZGRyKSB7Ci0JCXN0cnVjdCBydGFibGUgKnJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKGRldl9uZXQoZGV2KSwgTlVMTCwKKwkJc3RydWN0IHJ0YWJsZSAqcnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMoZGV2X25ldChkZXYpLCAmZmw0LCBOVUxMLAogCQkJCQkJCSAgaXBoLT5kYWRkciwgaXBoLT5zYWRkciwKIAkJCQkJCQkgIDAsIDAsCiAJCQkJCQkJICBJUFBST1RPX0lQVjYsCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zeW5jb29raWVzLmMgYi9uZXQvaXB2Ni9zeW5jb29raWVzLmMKaW5kZXggMzUyYzI2MC4uOGI5NjQ0YSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc3luY29va2llcy5jCisrKyBiL25ldC9pcHY2L3N5bmNvb2tpZXMuYwpAQCAtNjYsNyArNjYsNyBAQAogc3RhdGljIERFRklORV9QRVJfQ1BVKF9fdTMyIFsxNiArIDUgKyBTSEFfV09SS1NQQUNFX1dPUkRTXSwKIAkJICAgICAgaXB2Nl9jb29raWVfc2NyYXRjaCk7CiAKLXN0YXRpYyB1MzIgY29va2llX2hhc2goc3RydWN0IGluNl9hZGRyICpzYWRkciwgc3RydWN0IGluNl9hZGRyICpkYWRkciwKK3N0YXRpYyB1MzIgY29va2llX2hhc2goY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKIAkJICAgICAgIF9fYmUxNiBzcG9ydCwgX19iZTE2IGRwb3J0LCB1MzIgY291bnQsIGludCBjKQogewogCV9fdTMyICp0bXAgPSBfX2dldF9jcHVfdmFyKGlwdjZfY29va2llX3NjcmF0Y2gpOwpAQCAtODYsNyArODYsOCBAQAogCXJldHVybiB0bXBbMTddOwogfQogCi1zdGF0aWMgX191MzIgc2VjdXJlX3RjcF9zeW5fY29va2llKHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCitzdGF0aWMgX191MzIgc2VjdXJlX3RjcF9zeW5fY29va2llKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCisJCQkJICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKIAkJCQkgICBfX2JlMTYgc3BvcnQsIF9fYmUxNiBkcG9ydCwgX191MzIgc3NlcSwKIAkJCQkgICBfX3UzMiBjb3VudCwgX191MzIgZGF0YSkKIHsKQEAgLTk2LDggKzk3LDggQEAKIAkJJiBDT09LSUVNQVNLKSk7CiB9CiAKLXN0YXRpYyBfX3UzMiBjaGVja190Y3Bfc3luX2Nvb2tpZShfX3UzMiBjb29raWUsIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCi0JCQkJICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLCBfX2JlMTYgc3BvcnQsCitzdGF0aWMgX191MzIgY2hlY2tfdGNwX3N5bl9jb29raWUoX191MzIgY29va2llLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorCQkJCSAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwgX19iZTE2IHNwb3J0LAogCQkJCSAgX19iZTE2IGRwb3J0LCBfX3UzMiBzc2VxLCBfX3UzMiBjb3VudCwKIAkJCQkgIF9fdTMyIG1heGRpZmYpCiB7CkBAIC0xMTYsNyArMTE3LDcgQEAKIAogX191MzIgY29va2llX3Y2X2luaXRfc2VxdWVuY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3UxNiAqbXNzcCkKIHsKLQlzdHJ1Y3QgaXB2NmhkciAqaXBoID0gaXB2Nl9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXBoID0gaXB2Nl9oZHIoc2tiKTsKIAljb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCA9IHRjcF9oZHIoc2tiKTsKIAlpbnQgbXNzaW5kOwogCWNvbnN0IF9fdTE2IG1zcyA9ICptc3NwOwpAQCAtMTM4LDcgKzEzOSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGNvb2tpZV9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3UzMiBjb29raWUpCiB7Ci0Jc3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7CisJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7CiAJY29uc3Qgc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7CiAJX191MzIgc2VxID0gbnRvaGwodGgtPnNlcSkgLSAxOwogCV9fdTMyIG1zc2luZCA9IGNoZWNrX3RjcF9zeW5fY29va2llKGNvb2tpZSwgJmlwaC0+c2FkZHIsICZpcGgtPmRhZGRyLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdGNwX2lwdjYuYyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKaW5kZXggNGY0OWU1ZC4uODY4MzY2NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdGNwX2lwdjYuYworKysgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCkBAIC03Niw4ICs3Niw4IEBACiAKIHN0YXRpYyBpbnQJdGNwX3Y2X2RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwogc3RhdGljIHZvaWQJX190Y3BfdjZfc2VuZF9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAotCQkJCSAgICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyKTsKKwkJCQkgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwKKwkJCQkgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkcik7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGlwdjZfbWFwcGVkOwogc3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgaXB2Nl9zcGVjaWZpYzsKQEAgLTg2LDcgKzg2LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGNwX3NvY2tfYWZfb3BzIHRjcF9zb2NrX2lwdjZfbWFwcGVkX3NwZWNpZmljOwogI2Vsc2UKIHN0YXRpYyBzdHJ1Y3QgdGNwX21kNXNpZ19rZXkgKnRjcF92Nl9tZDVfZG9fbG9va3VwKHN0cnVjdCBzb2NrICpzaywKLQkJCQkJCSAgIHN0cnVjdCBpbjZfYWRkciAqYWRkcikKKwkJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcikKIHsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTEwNiw4ICsxMDYsOCBAQAogfQogCiBzdGF0aWMgX19pbmxpbmVfXyBfX3N1bTE2IHRjcF92Nl9jaGVjayhpbnQgbGVuLAotCQkJCSAgIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCi0JCQkJICAgc3RydWN0IGluNl9hZGRyICpkYWRkciwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCiAJCQkJICAgX193c3VtIGJhc2UpCiB7CiAJcmV0dXJuIGNzdW1faXB2Nl9tYWdpYyhzYWRkciwgZGFkZHIsIGxlbiwgSVBQUk9UT19UQ1AsIGJhc2UpOwpAQCAtMzMxLDcgKzMzMSw3IEBACiBzdGF0aWMgdm9pZCB0Y3BfdjZfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0LAogCQl1OCB0eXBlLCB1OCBjb2RlLCBpbnQgb2Zmc2V0LCBfX2JlMzIgaW5mbykKIHsKLQlzdHJ1Y3QgaXB2NmhkciAqaGRyID0gKHN0cnVjdCBpcHY2aGRyKilza2ItPmRhdGE7CisJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmhkciA9IChjb25zdCBzdHJ1Y3QgaXB2Nmhkciopc2tiLT5kYXRhOwogCWNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLT5kYXRhK29mZnNldCk7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5wOwogCXN0cnVjdCBzb2NrICpzazsKQEAgLTU1MSw3ICs1NTEsNyBAQAogCiAjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKIHN0YXRpYyBzdHJ1Y3QgdGNwX21kNXNpZ19rZXkgKnRjcF92Nl9tZDVfZG9fbG9va3VwKHN0cnVjdCBzb2NrICpzaywKLQkJCQkJCSAgIHN0cnVjdCBpbjZfYWRkciAqYWRkcikKKwkJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcikKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAlpbnQgaTsKQEAgLTU4MCw3ICs1ODAsNyBAQAogCXJldHVybiB0Y3BfdjZfbWQ1X2RvX2xvb2t1cChzaywgJmluZXQ2X3JzayhyZXEpLT5ybXRfYWRkcik7CiB9CiAKLXN0YXRpYyBpbnQgdGNwX3Y2X21kNV9kb19hZGQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW42X2FkZHIgKnBlZXIsCitzdGF0aWMgaW50IHRjcF92Nl9tZDVfZG9fYWRkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGluNl9hZGRyICpwZWVyLAogCQkJICAgICBjaGFyICpuZXdrZXksIHU4IG5ld2tleWxlbikKIHsKIAkvKiBBZGQga2V5IHRvIHRoZSBsaXN0ICovCkBAIC02NDUsNyArNjQ1LDcgQEAKIAkJCQkgbmV3a2V5LCBuZXdrZXlsZW4pOwogfQogCi1zdGF0aWMgaW50IHRjcF92Nl9tZDVfZG9fZGVsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluNl9hZGRyICpwZWVyKQorc3RhdGljIGludCB0Y3BfdjZfbWQ1X2RvX2RlbChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqcGVlcikKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAlpbnQgaTsKQEAgLTc1Myw4ICs3NTMsOCBAQAogfQogCiBzdGF0aWMgaW50IHRjcF92Nl9tZDVfaGFzaF9wc2V1ZG9oZWFkZXIoc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqaHAsCi0JCQkJCXN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCi0JCQkJCXN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIGludCBuYnl0ZXMpCisJCQkJCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCisJCQkJCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIGludCBuYnl0ZXMpCiB7CiAJc3RydWN0IHRjcDZfcHNldWRvaGRyICpicDsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CkBAIC03NzEsNyArNzcxLDcgQEAKIH0KIAogc3RhdGljIGludCB0Y3BfdjZfbWQ1X2hhc2hfaGRyKGNoYXIgKm1kNV9oYXNoLCBzdHJ1Y3QgdGNwX21kNXNpZ19rZXkgKmtleSwKLQkJCSAgICAgICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCiAJCQkgICAgICAgc3RydWN0IHRjcGhkciAqdGgpCiB7CiAJc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqaHA7CkBAIC04MDcsNyArODA3LDcgQEAKIAkJCSAgICAgICBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKIAkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBpbjZfYWRkciAqc2FkZHIsICpkYWRkcjsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCAqZGFkZHI7CiAJc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqaHA7CiAJc3RydWN0IGhhc2hfZGVzYyAqZGVzYzsKIAlzdHJ1Y3QgdGNwaGRyICp0aCA9IHRjcF9oZHIoc2tiKTsKQEAgLTgxOSw3ICs4MTksNyBAQAogCQlzYWRkciA9ICZpbmV0Nl9yc2socmVxKS0+bG9jX2FkZHI7CiAJCWRhZGRyID0gJmluZXQ2X3JzayhyZXEpLT5ybXRfYWRkcjsKIAl9IGVsc2UgewotCQlzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7CisJCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoID0gaXB2Nl9oZHIoc2tiKTsKIAkJc2FkZHIgPSAmaXA2aC0+c2FkZHI7CiAJCWRhZGRyID0gJmlwNmgtPmRhZGRyOwogCX0KQEAgLTg1Nyw3ICs4NTcsNyBAQAogewogCV9fdTggKmhhc2hfbG9jYXRpb24gPSBOVUxMOwogCXN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqaGFzaF9leHBlY3RlZDsKLQlzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IGlwdjZfaGRyKHNrYik7CisJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpOwogCXN0cnVjdCB0Y3BoZHIgKnRoID0gdGNwX2hkcihza2IpOwogCWludCBnZW5oYXNoOwogCXU4IG5ld2hhc2hbMTZdOwpAQCAtOTE1LDcgKzkxNSw3IEBACiAjZW5kaWYKIAogc3RhdGljIHZvaWQgX190Y3BfdjZfc2VuZF9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCXN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIpCisJCQkJY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkcikKIHsKIAlzdHJ1Y3QgdGNwaGRyICp0aCA9IHRjcF9oZHIoc2tiKTsKIApAQCAtOTM5LDcgKzkzOSw3IEBACiAKIHN0YXRpYyBpbnQgdGNwX3Y2X2dzb19zZW5kX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGlwdjZoZHIgKmlwdjZoOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcHY2aDsKIAlzdHJ1Y3QgdGNwaGRyICp0aDsKIAogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqdGgpKSkKQEAgLTk1Nyw3ICs5NTcsNyBAQAogc3RhdGljIHN0cnVjdCBza19idWZmICoqdGNwNl9ncm9fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqKmhlYWQsCiAJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBpcHY2aGRyICppcGggPSBza2JfZ3JvX25ldHdvcmtfaGVhZGVyKHNrYik7CisJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwaCA9IHNrYl9ncm9fbmV0d29ya19oZWFkZXIoc2tiKTsKIAogCXN3aXRjaCAoc2tiLT5pcF9zdW1tZWQpIHsKIAljYXNlIENIRUNLU1VNX0NPTVBMRVRFOgpAQCAtOTc4LDcgKzk3OCw3IEBACiAKIHN0YXRpYyBpbnQgdGNwNl9ncm9fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaXB2NmhkciAqaXBoID0gaXB2Nl9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXBoID0gaXB2Nl9oZHIoc2tiKTsKIAlzdHJ1Y3QgdGNwaGRyICp0aCA9IHRjcF9oZHIoc2tiKTsKIAogCXRoLT5jaGVjayA9IH50Y3BfdjZfY2hlY2soc2tiLT5sZW4gLSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpLApAQCAtMTQ2OSw3ICsxNDY5LDcgQEAKIAogCSAgIEZpcnN0OiBubyBJUHY0IG9wdGlvbnMuCiAJICovCi0JbmV3aW5ldC0+b3B0ID0gTlVMTDsKKwluZXdpbmV0LT5pbmV0X29wdCA9IE5VTEw7CiAJbmV3bnAtPmlwdjZfZmxfbGlzdCA9IE5VTEw7CiAKIAkvKiBDbG9uZSBSWCBiaXRzICovCkBAIC0xNzAyLDcgKzE3MDIsNyBAQAogc3RhdGljIGludCB0Y3BfdjZfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHRjcGhkciAqdGg7Ci0Jc3RydWN0IGlwdjZoZHIgKmhkcjsKKwljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaGRyOwogCXN0cnVjdCBzb2NrICpzazsKIAlpbnQgcmV0OwogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLT5kZXYpOwpAQCAtMjAyOCw4ICsyMDI4LDggQEAKIAkJCSBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgaW50IGksIGludCB1aWQpCiB7CiAJaW50IHR0ZCA9IHJlcS0+ZXhwaXJlcyAtIGppZmZpZXM7Ci0Jc3RydWN0IGluNl9hZGRyICpzcmMgPSAmaW5ldDZfcnNrKHJlcSktPmxvY19hZGRyOwotCXN0cnVjdCBpbjZfYWRkciAqZGVzdCA9ICZpbmV0Nl9yc2socmVxKS0+cm10X2FkZHI7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpzcmMgPSAmaW5ldDZfcnNrKHJlcSktPmxvY19hZGRyOworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCA9ICZpbmV0Nl9yc2socmVxKS0+cm10X2FkZHI7CiAKIAlpZiAodHRkIDwgMCkKIAkJdHRkID0gMDsKQEAgLTIwNTcsNyArMjA1Nyw3IEBACiAKIHN0YXRpYyB2b2lkIGdldF90Y3A2X3NvY2soc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBzb2NrICpzcCwgaW50IGkpCiB7Ci0Jc3RydWN0IGluNl9hZGRyICpkZXN0LCAqc3JjOworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgKnNyYzsKIAlfX3UxNiBkZXN0cCwgc3JjcDsKIAlpbnQgdGltZXJfYWN0aXZlOwogCXVuc2lnbmVkIGxvbmcgdGltZXJfZXhwaXJlczsKQEAgLTIxMTQsNyArMjExNCw3IEBACiBzdGF0aWMgdm9pZCBnZXRfdGltZXdhaXQ2X3NvY2soc3RydWN0IHNlcV9maWxlICpzZXEsCiAJCQkgICAgICAgc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcsIGludCBpKQogewotCXN0cnVjdCBpbjZfYWRkciAqZGVzdCwgKnNyYzsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsICpzcmM7CiAJX191MTYgZGVzdHAsIHNyY3A7CiAJc3RydWN0IGluZXQ2X3RpbWV3YWl0X3NvY2sgKnR3NiA9IGluZXQ2X3R3c2soKHN0cnVjdCBzb2NrICopdHcpOwogCWludCB0dGQgPSB0dy0+dHdfdHRkIC0gamlmZmllczsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmMKaW5kZXggMTVjMzc3NC4uZmMwYzQyYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwLmMKKysrIGIvbmV0L2lwdjYvdWRwLmMKQEAgLTMxMSw3ICszMTEsNyBAQAogCQkJCQkgIHN0cnVjdCB1ZHBfdGFibGUgKnVkcHRhYmxlKQogewogCXN0cnVjdCBzb2NrICpzazsKLQlzdHJ1Y3QgaXB2NmhkciAqaXBoID0gaXB2Nl9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXBoID0gaXB2Nl9oZHIoc2tiKTsKIAogCWlmICh1bmxpa2VseShzayA9IHNrYl9zdGVhbF9zb2NrKHNrYikpKQogCQlyZXR1cm4gc2s7CkBAIC00NjMsOSArNDYzLDkgQEAKIAkJICAgIHN0cnVjdCB1ZHBfdGFibGUgKnVkcHRhYmxlKQogewogCXN0cnVjdCBpcHY2X3BpbmZvICpucDsKLQlzdHJ1Y3QgaXB2NmhkciAqaGRyID0gKHN0cnVjdCBpcHY2aGRyKilza2ItPmRhdGE7Ci0Jc3RydWN0IGluNl9hZGRyICpzYWRkciA9ICZoZHItPnNhZGRyOwotCXN0cnVjdCBpbjZfYWRkciAqZGFkZHIgPSAmaGRyLT5kYWRkcjsKKwljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaGRyID0gKGNvbnN0IHN0cnVjdCBpcHY2aGRyICopc2tiLT5kYXRhOworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIgPSAmaGRyLT5zYWRkcjsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyID0gJmhkci0+ZGFkZHI7CiAJc3RydWN0IHVkcGhkciAqdWggPSAoc3RydWN0IHVkcGhkciopKHNrYi0+ZGF0YStvZmZzZXQpOwogCXN0cnVjdCBzb2NrICpzazsKIAlpbnQgZXJyOwpAQCAtNTUzLDggKzU1Myw4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc29jayAqdWRwX3Y2X21jYXN0X25leHQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJICAgICAgX19iZTE2IGxvY19wb3J0LCBzdHJ1Y3QgaW42X2FkZHIgKmxvY19hZGRyLAotCQkJCSAgICAgIF9fYmUxNiBybXRfcG9ydCwgc3RydWN0IGluNl9hZGRyICpybXRfYWRkciwKKwkJCQkgICAgICBfX2JlMTYgbG9jX3BvcnQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbG9jX2FkZHIsCisJCQkJICAgICAgX19iZTE2IHJtdF9wb3J0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnJtdF9hZGRyLAogCQkJCSAgICAgIGludCBkaWYpCiB7CiAJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKm5vZGU7CkBAIC02MzMsNyArNjMzLDcgQEAKICAqIHNvIHdlIGRvbid0IG5lZWQgdG8gbG9jayB0aGUgaGFzaGVzLgogICovCiBzdGF0aWMgaW50IF9fdWRwNl9saWJfbWNhc3RfZGVsaXZlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsCi0JCXN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCisJCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCiAJCXN0cnVjdCB1ZHBfdGFibGUgKnVkcHRhYmxlKQogewogCXN0cnVjdCBzb2NrICpzaywgKnN0YWNrWzI1NiAvIHNpemVvZihzdHJ1Y3Qgc29jayAqKV07CkBAIC03MTYsNyArNzE2LDcgQEAKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0+ZGV2KTsKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJc3RydWN0IHVkcGhkciAqdWg7Ci0Jc3RydWN0IGluNl9hZGRyICpzYWRkciwgKmRhZGRyOworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsICpkYWRkcjsKIAl1MzIgdWxlbiA9IDA7CiAKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkcikpKQpAQCAtMTI3OCw3ICsxMjc4LDcgQEAKIAogc3RhdGljIGludCB1ZHA2X3Vmb19zZW5kX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGlwdjZoZHIgKmlwdjZoOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcHY2aDsKIAlzdHJ1Y3QgdWRwaGRyICp1aDsKIAogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqdWgpKSkKQEAgLTEzMjgsMTQgKzEzMjgsMTQgQEAKIAkvKiBEbyBzb2Z0d2FyZSBVRk8uIENvbXBsZXRlIGFuZCBmaWxsIGluIHRoZSBVRFAgY2hlY2tzdW0gYXMgSFcgY2Fubm90CiAJICogZG8gY2hlY2tzdW0gb2YgVURQIHBhY2tldHMgc2VudCBhcyBtdWx0aXBsZSBJUCBmcmFnbWVudHMuCiAJICovCi0Jb2Zmc2V0ID0gc2tiLT5jc3VtX3N0YXJ0IC0gc2tiX2hlYWRyb29tKHNrYik7CisJb2Zmc2V0ID0gc2tiX2NoZWNrc3VtX3N0YXJ0X29mZnNldChza2IpOwogCWNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi0+bGVuLSBvZmZzZXQsIDApOwogCW9mZnNldCArPSBza2ItPmNzdW1fb2Zmc2V0OwogCSooX19zdW0xNiAqKShza2ItPmRhdGEgKyBvZmZzZXQpID0gY3N1bV9mb2xkKGNzdW0pOwogCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIAogCS8qIENoZWNrIGlmIHRoZXJlIGlzIGVub3VnaCBoZWFkcm9vbSB0byBpbnNlcnQgZnJhZ21lbnQgaGVhZGVyLiAqLwotCWlmICgoc2tiX2hlYWRyb29tKHNrYikgPCBmcmFnX2hkcl9zeikgJiYKKwlpZiAoKHNrYl9tYWNfaGVhZGVyKHNrYikgPCBza2ItPmhlYWQgKyBmcmFnX2hkcl9zeikgJiYKIAkgICAgcHNrYl9leHBhbmRfaGVhZChza2IsIGZyYWdfaGRyX3N6LCAwLCBHRlBfQVRPTUlDKSkKIAkJZ290byBvdXQ7CiAKQEAgLTEzODIsNyArMTM4Miw3IEBACiB7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc3ApOwogCXN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNwKTsKLQlzdHJ1Y3QgaW42X2FkZHIgKmRlc3QsICpzcmM7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpkZXN0LCAqc3JjOwogCV9fdTE2IGRlc3RwLCBzcmNwOwogCiAJZGVzdCAgPSAmbnAtPmRhZGRyOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfbW9kZV9iZWV0LmMgYi9uZXQvaXB2Ni94ZnJtNl9tb2RlX2JlZXQuYwppbmRleCBiYmQ0OGIxLi4zNDM3ZDdkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9tb2RlX2JlZXQuYworKysgYi9uZXQvaXB2Ni94ZnJtNl9tb2RlX2JlZXQuYwpAQCAtNDEsMTAgKzQxLDggQEAKIHsKIAlzdHJ1Y3QgaXB2NmhkciAqdG9wX2lwaDsKIAlzdHJ1Y3QgaXBfYmVldF9waGRyICpwaDsKLQlzdHJ1Y3QgaXBoZHIgKmlwaHY0OwogCWludCBvcHRsZW4sIGhkcl9sZW47CiAKLQlpcGh2NCA9IGlwX2hkcihza2IpOwogCWhkcl9sZW4gPSAwOwogCW9wdGxlbiA9IFhGUk1fTU9ERV9TS0JfQ0Ioc2tiKS0+b3B0bGVuOwogCWlmICh1bmxpa2VseShvcHRsZW4pKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfbW9kZV90dW5uZWwuYyBiL25ldC9pcHY2L3hmcm02X21vZGVfdHVubmVsLmMKaW5kZXggNjQ1Y2I5Ni4uNGQ2ZWRmZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfbW9kZV90dW5uZWwuYworKysgYi9uZXQvaXB2Ni94ZnJtNl9tb2RlX3R1bm5lbC5jCkBAIC0yMCw3ICsyMCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpcGlwNl9lY25fZGVjYXBzdWxhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaXB2NmhkciAqb3V0ZXJfaXBoID0gaXB2Nl9oZHIoc2tiKTsKKwljb25zdCBzdHJ1Y3QgaXB2NmhkciAqb3V0ZXJfaXBoID0gaXB2Nl9oZHIoc2tiKTsKIAlzdHJ1Y3QgaXB2NmhkciAqaW5uZXJfaXBoID0gaXBpcHY2X2hkcihza2IpOwogCiAJaWYgKElORVRfRUNOX2lzX2NlKGlwdjZfZ2V0X2RzZmllbGQob3V0ZXJfaXBoKSkpCkBAIC01NSw4ICs1NSw4IEBACiAJCWRzZmllbGQgJj0gfklORVRfRUNOX01BU0s7CiAJaXB2Nl9jaGFuZ2VfZHNmaWVsZCh0b3BfaXBoLCAwLCBkc2ZpZWxkKTsKIAl0b3BfaXBoLT5ob3BfbGltaXQgPSBpcDZfZHN0X2hvcGxpbWl0KGRzdC0+Y2hpbGQpOwotCWlwdjZfYWRkcl9jb3B5KCZ0b3BfaXBoLT5zYWRkciwgKHN0cnVjdCBpbjZfYWRkciAqKSZ4LT5wcm9wcy5zYWRkcik7Ci0JaXB2Nl9hZGRyX2NvcHkoJnRvcF9pcGgtPmRhZGRyLCAoc3RydWN0IGluNl9hZGRyICopJngtPmlkLmRhZGRyKTsKKwlpcHY2X2FkZHJfY29weSgmdG9wX2lwaC0+c2FkZHIsIChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKikmeC0+cHJvcHMuc2FkZHIpOworCWlwdjZfYWRkcl9jb3B5KCZ0b3BfaXBoLT5kYWRkciwgKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqKSZ4LT5pZC5kYWRkcik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X291dHB1dC5jIGIvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMKaW5kZXggOGU2ODhiMy4uNDlhOTFjNWYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X291dHB1dC5jCisrKyBiL25ldC9pcHY2L3hmcm02X291dHB1dC5jCkBAIC03OSw3ICs3OSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKHhmcm02X3ByZXBhcmVfb3V0cHV0KTsKIAotc3RhdGljIGludCB4ZnJtNl9vdXRwdXRfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IpCitpbnQgeGZybTZfb3V0cHV0X2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogI2lmZGVmIENPTkZJR19ORVRGSUxURVIKIAlJUDZDQihza2IpLT5mbGFncyB8PSBJUDZTS0JfWEZSTV9UUkFOU0ZPUk1FRDsKQEAgLTk3LDkgKzk3LDkgQEAKIAlpZiAoKHggJiYgeC0+cHJvcHMubW9kZSA9PSBYRlJNX01PREVfVFVOTkVMKSAmJgogCSAgICAoKHNrYi0+bGVuID4gaXA2X3NrYl9kc3RfbXR1KHNrYikgJiYgIXNrYl9pc19nc28oc2tiKSkgfHwKIAkJZHN0X2FsbGZyYWcoc2tiX2RzdChza2IpKSkpIHsKLQkJCXJldHVybiBpcDZfZnJhZ21lbnQoc2tiLCB4ZnJtNl9vdXRwdXRfZmluaXNoKTsKKwkJCXJldHVybiBpcDZfZnJhZ21lbnQoc2tiLCB4LT5vdXRlcl9tb2RlLT5hZmluZm8tPm91dHB1dF9maW5pc2gpOwogCX0KLQlyZXR1cm4geGZybTZfb3V0cHV0X2ZpbmlzaChza2IpOworCXJldHVybiB4LT5vdXRlcl9tb2RlLT5hZmluZm8tPm91dHB1dF9maW5pc2goc2tiKTsKIH0KIAogaW50IHhmcm02X291dHB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfcG9saWN5LmMgYi9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYwppbmRleCAwNWUzNGM4Li5kODc5ZjdlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYworKysgYi9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYwpAQCAtMTI0LDcgKzEyNCw3IEBACiAJc3RydWN0IGZsb3dpNiAqZmw2ID0gJmZsLT51LmlwNjsKIAlpbnQgb25seXByb3RvID0gMDsKIAl1MTYgb2Zmc2V0ID0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpOwotCXN0cnVjdCBpcHY2aGRyICpoZHIgPSBpcHY2X2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICpoZHIgPSBpcHY2X2hkcihza2IpOwogCXN0cnVjdCBpcHY2X29wdF9oZHIgKmV4dGhkcjsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpuaCA9IHNrYl9uZXR3b3JrX2hlYWRlcihza2IpOwogCXU4IG5leHRoZHIgPSBuaFtJUDZDQihza2IpLT5uaG9mZl07CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9zdGF0ZS5jIGIvbmV0L2lwdjYveGZybTZfc3RhdGUuYwppbmRleCBhZmU5NDFlLi4yNDhmMGIyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9zdGF0ZS5jCisrKyBiL25ldC9pcHY2L3hmcm02X3N0YXRlLmMKQEAgLTE3OCw2ICsxNzgsNyBAQAogCS50bXBsX3NvcnQJCT0gX194ZnJtNl90bXBsX3NvcnQsCiAJLnN0YXRlX3NvcnQJCT0gX194ZnJtNl9zdGF0ZV9zb3J0LAogCS5vdXRwdXQJCQk9IHhmcm02X291dHB1dCwKKwkub3V0cHV0X2ZpbmlzaAkJPSB4ZnJtNl9vdXRwdXRfZmluaXNoLAogCS5leHRyYWN0X2lucHV0CQk9IHhmcm02X2V4dHJhY3RfaW5wdXQsCiAJLmV4dHJhY3Rfb3V0cHV0CQk9IHhmcm02X2V4dHJhY3Rfb3V0cHV0LAogCS50cmFuc3BvcnRfZmluaXNoCT0geGZybTZfdHJhbnNwb3J0X2ZpbmlzaCwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X3R1bm5lbC5jIGIvbmV0L2lwdjYveGZybTZfdHVubmVsLmMKaW5kZXggMjk2OWNhZC4uYTY3NzBhMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfdHVubmVsLmMKKysrIGIvbmV0L2lwdjYveGZybTZfdHVubmVsLmMKQEAgLTY4LDcgKzY4LDcgQEAKIAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICp4ZnJtNl90dW5uZWxfc3BpX2ttZW0gX19yZWFkX21vc3RseTsKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCB4ZnJtNl90dW5uZWxfc3BpX2hhc2hfYnlhZGRyKHhmcm1fYWRkcmVzc190ICphZGRyKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCB4ZnJtNl90dW5uZWxfc3BpX2hhc2hfYnlhZGRyKGNvbnN0IHhmcm1fYWRkcmVzc190ICphZGRyKQogewogCXVuc2lnbmVkIGg7CiAKQEAgLTg1LDcgKzg1LDcgQEAKIAlyZXR1cm4gc3BpICUgWEZSTTZfVFVOTkVMX1NQSV9CWVNQSV9IU0laRTsKIH0KIAotc3RhdGljIHN0cnVjdCB4ZnJtNl90dW5uZWxfc3BpICpfX3hmcm02X3R1bm5lbF9zcGlfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgeGZybV9hZGRyZXNzX3QgKnNhZGRyKQorc3RhdGljIHN0cnVjdCB4ZnJtNl90dW5uZWxfc3BpICpfX3hmcm02X3R1bm5lbF9zcGlfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgeGZybV9hZGRyZXNzX3QgKnNhZGRyKQogewogCXN0cnVjdCB4ZnJtNl90dW5uZWxfbmV0ICp4ZnJtNl90biA9IHhmcm02X3R1bm5lbF9wZXJuZXQobmV0KTsKIAlzdHJ1Y3QgeGZybTZfdHVubmVsX3NwaSAqeDZzcGk7CkBAIC0xMDEsNyArMTAxLDcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotX19iZTMyIHhmcm02X3R1bm5lbF9zcGlfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgeGZybV9hZGRyZXNzX3QgKnNhZGRyKQorX19iZTMyIHhmcm02X3R1bm5lbF9zcGlfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgeGZybV9hZGRyZXNzX3QgKnNhZGRyKQogewogCXN0cnVjdCB4ZnJtNl90dW5uZWxfc3BpICp4NnNwaTsKIAl1MzIgc3BpOwpAQCAtMjM3LDEwICsyMzcsMTAgQEAKIHN0YXRpYyBpbnQgeGZybTZfdHVubmVsX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLT5kZXYpOwotCXN0cnVjdCBpcHY2aGRyICppcGggPSBpcHY2X2hkcihza2IpOworCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcGggPSBpcHY2X2hkcihza2IpOwogCV9fYmUzMiBzcGk7CiAKLQlzcGkgPSB4ZnJtNl90dW5uZWxfc3BpX2xvb2t1cChuZXQsICh4ZnJtX2FkZHJlc3NfdCAqKSZpcGgtPnNhZGRyKTsKKwlzcGkgPSB4ZnJtNl90dW5uZWxfc3BpX2xvb2t1cChuZXQsIChjb25zdCB4ZnJtX2FkZHJlc3NfdCAqKSZpcGgtPnNhZGRyKTsKIAlyZXR1cm4geGZybTZfcmN2X3NwaShza2IsIElQUFJPVE9fSVBWNiwgc3BpKSA+IDAgPyA6IDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fY29yZS5jIGIvbmV0L2lyZGEvaXJjb21tL2lyY29tbV9jb3JlLmMKaW5kZXggZTk3MDgyMC4uNTIwNzlmMSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJjb21tL2lyY29tbV9jb3JlLmMKKysrIGIvbmV0L2lyZGEvaXJjb21tL2lyY29tbV9jb3JlLmMKQEAgLTI0NCwxNCArMjQ0LDggQEAKIHZvaWQgaXJjb21tX2Nvbm5lY3RfaW5kaWNhdGlvbihzdHJ1Y3QgaXJjb21tX2NiICpzZWxmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIHN0cnVjdCBpcmNvbW1faW5mbyAqaW5mbykKIHsKLQlpbnQgY2xlbiA9IDA7Ci0KIAlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCi0JLyogQ2hlY2sgaWYgdGhlIHBhY2tldCBjb250YWlucyBkYXRhIG9uIHRoZSBjb250cm9sIGNoYW5uZWwgKi8KLQlpZiAoc2tiLT5sZW4gPiAwKQotCQljbGVuID0gc2tiLT5kYXRhWzBdOwotCiAJLyoKIAkgKiBJZiB0aGVyZSBhcmUgYW55IGRhdGEgaGlkaW5nIGluIHRoZSBjb250cm9sIGNoYW5uZWwsIHdlIG11c3QKIAkgKiBkZWxpdmVyIGl0IGZpcnN0LiBUaGUgc2lkZSBlZmZlY3QgaXMgdGhhdCB0aGUgY29udHJvbCBjaGFubmVsCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX2xtcC5jIGIvbmV0L2lyZGEvaXJjb21tL2lyY29tbV9sbXAuYwppbmRleCAwOGZiNTRkLi4zYjgwOTVjIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX2xtcC5jCisrKyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fbG1wLmMKQEAgLTc1LDcgKzc1LDYgQEAKIAkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnVzZXJkYXRhKQogewogCXN0cnVjdCBza19idWZmICp0eF9za2I7Ci0JaW50IHJldDsKIAogCUlSREFfREVCVUcoMCwgIiVzKClcbiIsIF9fZnVuY19fICk7CiAKQEAgLTEwMCw5ICs5OSw3IEBACiAJCXR4X3NrYiA9IHVzZXJkYXRhOwogCX0KIAotCXJldCA9IGlybG1wX2Nvbm5lY3RfcmVzcG9uc2Uoc2VsZi0+bHNhcCwgdHhfc2tiKTsKLQotCXJldHVybiAwOworCXJldHVybiBpcmxtcF9jb25uZWN0X3Jlc3BvbnNlKHNlbGYtPmxzYXAsIHR4X3NrYik7CiB9CiAKIHN0YXRpYyBpbnQgaXJjb21tX2xtcF9kaXNjb25uZWN0X3JlcXVlc3Qoc3RydWN0IGlyY29tbV9jYiAqc2VsZiwKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5LmMgYi9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eS5jCmluZGV4IGEzOWNjYTguLmIzY2M4YjMgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5LmMKKysrIGIvbmV0L2lyZGEvaXJjb21tL2lyY29tbV90dHkuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdGVybWlvcy5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CQkvKiBmb3IgTU9EVUxFX0FMSUFTX0NIQVJERVZfTUFKT1IgKi8KIApAQCAtMTEzMiw3ICsxMTMzLDYgQEAKIAkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpcmNvbW1fdHR5X2NiICpzZWxmID0gKHN0cnVjdCBpcmNvbW1fdHR5X2NiICopIGluc3RhbmNlOwotCXN0cnVjdCB0dHlfbGRpc2MgKmxkOwogCiAJSVJEQV9ERUJVRygyLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIApAQCAtMTE2MSwxNSArMTE2MSwxMSBAQAogCX0KIAogCS8qCi0JICogSnVzdCBnaXZlIGl0IG92ZXIgdG8gdGhlIGxpbmUgZGlzY2lwbGluZS4gVGhlcmUgaXMgbm8gbmVlZCB0bwotCSAqIGludm9sdmUgdGhlIGZsaXAgYnVmZmVycywgc2luY2Ugd2UgYXJlIG5vdCBydW5uaW5nIGluIGFuIGludGVycnVwdAotCSAqIGhhbmRsZXIKKwkgKiBVc2UgZmxpcCBidWZmZXIgZnVuY3Rpb25zIHNpbmNlIHRoZSBjb2RlIG1heSBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQKKwkgKiBjb250ZXh0CiAJICovCi0KLQlsZCA9IHR0eV9sZGlzY19yZWYoc2VsZi0+dHR5KTsKLQlpZiAobGQpCi0JCWxkLT5vcHMtPnJlY2VpdmVfYnVmKHNlbGYtPnR0eSwgc2tiLT5kYXRhLCBOVUxMLCBza2ItPmxlbik7Ci0JdHR5X2xkaXNjX2RlcmVmKGxkKTsKKwl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHNlbGYtPnR0eSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJdHR5X2ZsaXBfYnVmZmVyX3B1c2goc2VsZi0+dHR5KTsKIAogCS8qIE5vIG5lZWQgdG8ga2ZyZWVfc2tiIC0gc2VlIGlyY29tbV90dHBfZGF0YV9pbmRpY2F0aW9uKCkgKi8KIApkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZmlsdGVyLmMgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9maWx0ZXIuYwppbmRleCA5ZmY3ODIzLi43OTc3YmU3IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9maWx0ZXIuYworKysgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9maWx0ZXIuYwpAQCAtMTQzLDEyICsxNDMsOCBAQAogICovCiB2b2lkIGlybGFuX2NoZWNrX2NvbW1hbmRfcGFyYW0oc3RydWN0IGlybGFuX2NiICpzZWxmLCBjaGFyICpwYXJhbSwgY2hhciAqdmFsdWUpCiB7Ci0JX191OCAqYnl0ZXM7Ci0KIAlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCi0JYnl0ZXMgPSB2YWx1ZTsKLQogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJMQU5fTUFHSUMsIHJldHVybjspOwogCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9wcm92aWRlci5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fcHJvdmlkZXIuYwppbmRleCA1Y2Y1ZTZjLi5iOGFmNzRhIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9wcm92aWRlci5jCisrKyBiL25ldC9pcmRhL2lybGFuL2lybGFuX3Byb3ZpZGVyLmMKQEAgLTEyOCw3ICsxMjgsNiBAQAogewogCXN0cnVjdCBpcmxhbl9jYiAqc2VsZjsKIAlzdHJ1Y3QgdHNhcF9jYiAqdHNhcDsKLQlfX3UzMiBzYWRkciwgZGFkZHI7CiAKIAlJUkRBX0RFQlVHKDAsICIlcygpXG4iLCBfX2Z1bmNfXyApOwogCkBAIC0xNDEsOCArMTQwLDYgQEAKIAlJUkRBX0FTU0VSVCh0c2FwID09IHNlbGYtPnByb3ZpZGVyLnRzYXBfY3RybCxyZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5wcm92aWRlci5zdGF0ZSA9PSBJUkxBTl9JRExFLCByZXR1cm47KTsKIAotCWRhZGRyID0gaXJ0dHBfZ2V0X2RhZGRyKHRzYXApOwotCXNhZGRyID0gaXJ0dHBfZ2V0X3NhZGRyKHRzYXApOwogCXNlbGYtPnByb3ZpZGVyLm1heF9zZHVfc2l6ZSA9IG1heF9zZHVfc2l6ZTsKIAlzZWxmLT5wcm92aWRlci5tYXhfaGVhZGVyX3NpemUgPSBtYXhfaGVhZGVyX3NpemU7CiAKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFwX2V2ZW50LmMgYi9uZXQvaXJkYS9pcmxhcF9ldmVudC5jCmluZGV4IGJiNDcwMjEuLmNjZDIxNGYgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFwX2V2ZW50LmMKKysrIGIvbmV0L2lyZGEvaXJsYXBfZXZlbnQuYwpAQCAtMjIyNyw4ICsyMjI3LDYgQEAKIHN0YXRpYyBpbnQgaXJsYXBfc3RhdGVfc2Nsb3NlKHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgSVJMQVBfRVZFTlQgZXZlbnQsCiAJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXJsYXBfaW5mbyAqaW5mbykKIHsKLQlpbnQgcmV0ID0gMDsKLQogCUlSREFfREVCVUcoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIC1FTk9ERVY7KTsKQEAgLTIyODksNyArMjI4Nyw2IEBACiAJCUlSREFfREVCVUcoMSwgIiVzKCksIFVua25vd24gZXZlbnQgJWQsICglcylcbiIsIF9fZnVuY19fLAogCQkJICAgZXZlbnQsIGlybGFwX2V2ZW50W2V2ZW50XSk7CiAKLQkJcmV0ID0gLUVJTlZBTDsKIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcnByb2MuYyBiL25ldC9pcmRhL2lycHJvYy5jCmluZGV4IDMxODc2NmUuLmI5YWM1OTggMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lycHJvYy5jCisrKyBiL25ldC9pcmRhL2lycHJvYy5jCkBAIC02NSwxNSArNjUsMTQgQEAKIHZvaWQgX19pbml0IGlyZGFfcHJvY19yZWdpc3Rlcih2b2lkKQogewogCWludCBpOwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZDsKIAogCXByb2NfaXJkYSA9IHByb2NfbWtkaXIoImlyZGEiLCBpbml0X25ldC5wcm9jX25ldCk7CiAJaWYgKHByb2NfaXJkYSA9PSBOVUxMKQogCQlyZXR1cm47CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpcmRhX2RpcnMpOyBpKyspCi0JCWQgPSBwcm9jX2NyZWF0ZShpcmRhX2RpcnNbaV0ubmFtZSwgMCwgcHJvY19pcmRhLAotCQkJCWlyZGFfZGlyc1tpXS5mb3BzKTsKKwkJKHZvaWQpIHByb2NfY3JlYXRlKGlyZGFfZGlyc1tpXS5uYW1lLCAwLCBwcm9jX2lyZGEsCisJCQkJICAgaXJkYV9kaXJzW2ldLmZvcHMpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvYWZfaXVjdi5jIGIvbmV0L2l1Y3YvYWZfaXVjdi5jCmluZGV4IDk4NmIyYTUuLmUyMDEzZTQgMTAwNjQ0Ci0tLSBhL25ldC9pdWN2L2FmX2l1Y3YuYworKysgYi9uZXQvaXVjdi9hZl9pdWN2LmMKQEAgLTE5MCw3ICsxOTAsNiBAQAogICovCiBzdGF0aWMgaW50IGFmaXVjdl9wbV9yZXN0b3JlX3RoYXcoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBpdWN2X3NvY2sgKml1Y3Y7CiAJc3RydWN0IHNvY2sgKnNrOwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwogCkBAIC0xOTksNyArMTk4LDYgQEAKICNlbmRpZgogCXJlYWRfbG9jaygmaXVjdl9za19saXN0LmxvY2spOwogCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmaXVjdl9za19saXN0LmhlYWQpIHsKLQkJaXVjdiA9IGl1Y3Zfc2soc2spOwogCQlzd2l0Y2ggKHNrLT5za19zdGF0ZSkgewogCQljYXNlIElVQ1ZfQ09OTkVDVEVEOgogCQkJc2stPnNrX2VyciA9IEVQSVBFOwpAQCAtMzgxLDcgKzM3OSw2IEBACiB7CiAJdW5zaWduZWQgY2hhciB1c2VyX2RhdGFbMTZdOwogCXN0cnVjdCBpdWN2X3NvY2sgKml1Y3YgPSBpdWN2X3NrKHNrKTsKLQlpbnQgZXJyOwogCXVuc2lnbmVkIGxvbmcgdGltZW87CiAKIAlpdWN2X3NvY2tfY2xlYXJfdGltZXIoc2spOwpAQCAtMzk0LDggKzM5MSw2IEBACiAKIAljYXNlIElVQ1ZfQ09OTkVDVEVEOgogCWNhc2UgSVVDVl9ESVNDT05OOgotCQllcnIgPSAwOwotCiAJCXNrLT5za19zdGF0ZSA9IElVQ1ZfQ0xPU0lORzsKIAkJc2stPnNrX3N0YXRlX2NoYW5nZShzayk7CiAKQEAgLTQwNCw3ICszOTksNyBAQAogCQkJCXRpbWVvID0gc2stPnNrX2xpbmdlcnRpbWU7CiAJCQllbHNlCiAJCQkJdGltZW8gPSBJVUNWX0RJU0NPTk5fVElNRU9VVDsKLQkJCWVyciA9IGl1Y3Zfc29ja193YWl0KHNrLAorCQkJaXVjdl9zb2NrX3dhaXQoc2ssCiAJCQkJCWl1Y3Zfc29ja19pbl9zdGF0ZShzaywgSVVDVl9DTE9TRUQsIDApLAogCQkJCQl0aW1lbyk7CiAJCX0KQEAgLTQxNyw3ICs0MTIsNyBAQAogCQkJbG93X25tY3B5KHVzZXJfZGF0YSwgaXVjdi0+c3JjX25hbWUpOwogCQkJaGlnaF9ubWNweSh1c2VyX2RhdGEsIGl1Y3YtPmRzdF9uYW1lKTsKIAkJCUFTQ0VCQyh1c2VyX2RhdGEsIHNpemVvZih1c2VyX2RhdGEpKTsKLQkJCWVyciA9IGl1Y3ZfcGF0aF9zZXZlcihpdWN2LT5wYXRoLCB1c2VyX2RhdGEpOworCQkJaXVjdl9wYXRoX3NldmVyKGl1Y3YtPnBhdGgsIHVzZXJfZGF0YSk7CiAJCQlpdWN2X3BhdGhfZnJlZShpdWN2LT5wYXRoKTsKIAkJCWl1Y3YtPnBhdGggPSBOVUxMOwogCQl9CmRpZmYgLS1naXQgYS9uZXQvaXVjdi9pdWN2LmMgYi9uZXQvaXVjdi9pdWN2LmMKaW5kZXggOGYxNTZiZC4uYTE1YzAxNSAxMDA2NDQKLS0tIGEvbmV0L2l1Y3YvaXVjdi5jCisrKyBiL25ldC9pdWN2L2l1Y3YuYwpAQCAtMTI4LDggKzEyOCw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGl1Y3ZfaXJxX2RhdGEgKml1Y3ZfaXJxX2RhdGFbTlJfQ1BVU107Ci1zdGF0aWMgY3B1bWFza190IGl1Y3ZfYnVmZmVyX2NwdW1hc2sgPSBDUFVfTUFTS19OT05FOwotc3RhdGljIGNwdW1hc2tfdCBpdWN2X2lycV9jcHVtYXNrID0gQ1BVX01BU0tfTk9ORTsKK3N0YXRpYyBjcHVtYXNrX3QgaXVjdl9idWZmZXJfY3B1bWFzayA9IHsgQ1BVX0JJVFNfTk9ORSB9Oworc3RhdGljIGNwdW1hc2tfdCBpdWN2X2lycV9jcHVtYXNrID0geyBDUFVfQklUU19OT05FIH07CiAKIC8qCiAgKiBRdWV1ZSBvZiBpbnRlcnJ1cHQgYnVmZmVycyBsb2NrIGZvciBkZWxpdmVyeSB2aWEgdGhlIHRhc2tsZXQKQEAgLTQwNiw3ICs0MDYsNyBAQAogCXBhcm0tPnNldF9tYXNrLmlwbWFzayA9IDB4Zjg7CiAJaXVjdl9jYWxsX2IyZjAoSVVDVl9TRVRDT05UUk9MTUFTSywgcGFybSk7CiAJLyogU2V0IGluZGljYXRpb24gdGhhdCBpdWN2IGludGVycnVwdHMgYXJlIGFsbG93ZWQgZm9yIHRoaXMgY3B1LiAqLwotCWNwdV9zZXQoY3B1LCBpdWN2X2lycV9jcHVtYXNrKTsKKwljcHVtYXNrX3NldF9jcHUoY3B1LCAmaXVjdl9pcnFfY3B1bWFzayk7CiB9CiAKIC8qKgpAQCAtNDI2LDcgKzQyNiw3IEBACiAJaXVjdl9jYWxsX2IyZjAoSVVDVl9TRVRNQVNLLCBwYXJtKTsKIAogCS8qIENsZWFyIGluZGljYXRpb24gdGhhdCBpdWN2IGludGVycnVwdHMgYXJlIGFsbG93ZWQgZm9yIHRoaXMgY3B1LiAqLwotCWNwdV9jbGVhcihjcHUsIGl1Y3ZfaXJxX2NwdW1hc2spOworCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgJml1Y3ZfaXJxX2NwdW1hc2spOwogfQogCiAvKioKQEAgLTQ1MSw3ICs0NTEsNyBAQAogCWl1Y3ZfY2FsbF9iMmYwKElVQ1ZfU0VUQ09OVFJPTE1BU0ssIHBhcm0pOwogCiAJLyogQ2xlYXIgaW5kaWNhdGlvbiB0aGF0IGl1Y3YgaW50ZXJydXB0cyBhcmUgYWxsb3dlZCBmb3IgdGhpcyBjcHUuICovCi0JY3B1X2NsZWFyKGNwdSwgaXVjdl9pcnFfY3B1bWFzayk7CisJY3B1bWFza19jbGVhcl9jcHUoY3B1LCAmaXVjdl9pcnFfY3B1bWFzayk7CiB9CiAKIC8qKgpAQCAtNDY2LDcgKzQ2Niw3IEBACiAJdW5pb24gaXVjdl9wYXJhbSAqcGFybTsKIAlpbnQgcmM7CiAKLQlpZiAoY3B1X2lzc2V0KGNwdSwgaXVjdl9idWZmZXJfY3B1bWFzaykpCisJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCAmaXVjdl9idWZmZXJfY3B1bWFzaykpCiAJCXJldHVybjsKIAogCS8qIERlY2xhcmUgaW50ZXJydXB0IGJ1ZmZlci4gKi8KQEAgLTQ5OSw5ICs0OTksOSBAQAogCX0KIAogCS8qIFNldCBpbmRpY2F0aW9uIHRoYXQgYW4gaXVjdiBidWZmZXIgZXhpc3RzIGZvciB0aGlzIGNwdS4gKi8KLQljcHVfc2V0KGNwdSwgaXVjdl9idWZmZXJfY3B1bWFzayk7CisJY3B1bWFza19zZXRfY3B1KGNwdSwgJml1Y3ZfYnVmZmVyX2NwdW1hc2spOwogCi0JaWYgKGl1Y3Zfbm9uc21wX2hhbmRsZXIgPT0gMCB8fCBjcHVzX2VtcHR5KGl1Y3ZfaXJxX2NwdW1hc2spKQorCWlmIChpdWN2X25vbnNtcF9oYW5kbGVyID09IDAgfHwgY3B1bWFza19lbXB0eSgmaXVjdl9pcnFfY3B1bWFzaykpCiAJCS8qIEVuYWJsZSBpdWN2IGludGVycnVwdHMgb24gdGhpcyBjcHUuICovCiAJCWl1Y3ZfYWxsb3dfY3B1KE5VTEwpOwogCWVsc2UKQEAgLTUyMCw3ICs1MjAsNyBAQAogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJdW5pb24gaXVjdl9wYXJhbSAqcGFybTsKIAotCWlmICghY3B1X2lzc2V0KGNwdSwgaXVjdl9idWZmZXJfY3B1bWFzaykpCisJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgJml1Y3ZfYnVmZmVyX2NwdW1hc2spKQogCQlyZXR1cm47CiAKIAkvKiBCbG9jayBpdWN2IGludGVycnVwdHMuICovCkBAIC01MzEsNyArNTMxLDcgQEAKIAlpdWN2X2NhbGxfYjJmMChJVUNWX1JFVFJJRVZFX0JVRkZFUiwgcGFybSk7CiAKIAkvKiBDbGVhciBpbmRpY2F0aW9uIHRoYXQgYW4gaXVjdiBidWZmZXIgZXhpc3RzIGZvciB0aGlzIGNwdS4gKi8KLQljcHVfY2xlYXIoY3B1LCBpdWN2X2J1ZmZlcl9jcHVtYXNrKTsKKwljcHVtYXNrX2NsZWFyX2NwdShjcHUsICZpdWN2X2J1ZmZlcl9jcHVtYXNrKTsKIH0KIAogLyoqCkBAIC01NDYsOCArNTQ2LDggQEAKIAlnZXRfb25saW5lX2NwdXMoKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKIAkJLyogRW5hYmxlIGFsbCBjcHVzIHdpdGggYSBkZWNsYXJlZCBidWZmZXIuICovCi0JCWlmIChjcHVfaXNzZXQoY3B1LCBpdWN2X2J1ZmZlcl9jcHVtYXNrKSAmJgotCQkgICAgIWNwdV9pc3NldChjcHUsIGl1Y3ZfaXJxX2NwdW1hc2spKQorCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsICZpdWN2X2J1ZmZlcl9jcHVtYXNrKSAmJgorCQkgICAgIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCAmaXVjdl9pcnFfY3B1bWFzaykpCiAJCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBpdWN2X2FsbG93X2NwdSwKIAkJCQkJCSBOVUxMLCAxKTsKIAlwdXRfb25saW5lX2NwdXMoKTsKQEAgLTU2NCw5ICs1NjQsOSBAQAogCWludCBjcHU7CiAKIAkvKiBEaXNhYmxlIGFsbCBjcHUgYnV0IHRoZSBmaXJzdCBpbiBjcHVfaXJxX2NwdW1hc2suICovCi0JY3B1bWFzayA9IGl1Y3ZfaXJxX2NwdW1hc2s7Ci0JY3B1X2NsZWFyKGZpcnN0X2NwdShpdWN2X2lycV9jcHVtYXNrKSwgY3B1bWFzayk7Ci0JZm9yX2VhY2hfY3B1X21hc2tfbnIoY3B1LCBjcHVtYXNrKQorCWNwdW1hc2tfY29weSgmY3B1bWFzaywgJml1Y3ZfaXJxX2NwdW1hc2spOworCWNwdW1hc2tfY2xlYXJfY3B1KGNwdW1hc2tfZmlyc3QoJml1Y3ZfaXJxX2NwdW1hc2spLCAmY3B1bWFzayk7CisJZm9yX2VhY2hfY3B1KGNwdSwgJmNwdW1hc2spCiAJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGl1Y3ZfYmxvY2tfY3B1LCBOVUxMLCAxKTsKIH0KIApAQCAtNTkzLDcgKzU5Myw3IEBACiAJcmMgPSAtRUlPOwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQogCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBpdWN2X2RlY2xhcmVfY3B1LCBOVUxMLCAxKTsKLQlpZiAoY3B1c19lbXB0eShpdWN2X2J1ZmZlcl9jcHVtYXNrKSkKKwlpZiAoY3B1bWFza19lbXB0eSgmaXVjdl9idWZmZXJfY3B1bWFzaykpCiAJCS8qIE5vIGNwdSBjb3VsZCBkZWNsYXJlIGFuIGl1Y3YgYnVmZmVyLiAqLwogCQlnb3RvIG91dDsKIAlwdXRfb25saW5lX2NwdXMoKTsKQEAgLTY3NSwxNSArNjc1LDE2IEBACiAJY2FzZSBDUFVfRE9XTl9QUkVQQVJFX0ZST1pFTjoKIAkJaWYgKCFpdWN2X3BhdGhfdGFibGUpCiAJCQlicmVhazsKLQkJY3B1bWFzayA9IGl1Y3ZfYnVmZmVyX2NwdW1hc2s7Ci0JCWNwdV9jbGVhcihjcHUsIGNwdW1hc2spOwotCQlpZiAoY3B1c19lbXB0eShjcHVtYXNrKSkKKwkJY3B1bWFza19jb3B5KCZjcHVtYXNrLCAmaXVjdl9idWZmZXJfY3B1bWFzayk7CisJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgJmNwdW1hc2spOworCQlpZiAoY3B1bWFza19lbXB0eSgmY3B1bWFzaykpCiAJCQkvKiBDYW4ndCBvZmZsaW5lIGxhc3QgSVVDViBlbmFibGVkIGNwdS4gKi8KIAkJCXJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKC1FSU5WQUwpOwogCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBpdWN2X3JldHJpZXZlX2NwdSwgTlVMTCwgMSk7Ci0JCWlmIChjcHVzX2VtcHR5KGl1Y3ZfaXJxX2NwdW1hc2spKQotCQkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGZpcnN0X2NwdShpdWN2X2J1ZmZlcl9jcHVtYXNrKSwKLQkJCQkJCSBpdWN2X2FsbG93X2NwdSwgTlVMTCwgMSk7CisJCWlmIChjcHVtYXNrX2VtcHR5KCZpdWN2X2lycV9jcHVtYXNrKSkKKwkJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZSgKKwkJCQljcHVtYXNrX2ZpcnN0KCZpdWN2X2J1ZmZlcl9jcHVtYXNrKSwKKwkJCQlpdWN2X2FsbG93X2NwdSwgTlVMTCwgMSk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gTk9USUZZX09LOwpAQCAtODI4LDE0ICs4MjksMTQgQEAKIHN0YXRpYyBpbnQgaXVjdl9yZWJvb3RfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLAogCQkJICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpCiB7Ci0JaW50IGksIHJjOworCWludCBpOwogCiAJZ2V0X29ubGluZV9jcHVzKCk7CiAJb25fZWFjaF9jcHUoaXVjdl9ibG9ja19jcHUsIE5VTEwsIDEpOwogCXByZWVtcHRfZGlzYWJsZSgpOwogCWZvciAoaSA9IDA7IGkgPCBpdWN2X21heF9wYXRoaWQ7IGkrKykgewogCQlpZiAoaXVjdl9wYXRoX3RhYmxlW2ldKQotCQkJcmMgPSBpdWN2X3NldmVyX3BhdGhpZChpLCBOVUxMKTsKKwkJCWl1Y3Zfc2V2ZXJfcGF0aGlkKGksIE5VTEwpOwogCX0KIAlwcmVlbXB0X2VuYWJsZSgpOwogCXB1dF9vbmxpbmVfY3B1cygpOwpAQCAtODY2LDcgKzg2Nyw3IEBACiAJaW50IHJjOwogCiAJbG9jYWxfYmhfZGlzYWJsZSgpOwotCWlmIChjcHVzX2VtcHR5KGl1Y3ZfYnVmZmVyX2NwdW1hc2spKSB7CisJaWYgKGNwdW1hc2tfZW1wdHkoJml1Y3ZfYnVmZmVyX2NwdW1hc2spKSB7CiAJCXJjID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQpAQCAtOTE1LDcgKzkxNiw3IEBACiAKIAlzcGluX2xvY2tfYmgoJml1Y3ZfdGFibGVfbG9jayk7CiAJaXVjdl9jbGVhbnVwX3F1ZXVlKCk7Ci0JaWYgKGNwdXNfZW1wdHkoaXVjdl9idWZmZXJfY3B1bWFzaykpIHsKKwlpZiAoY3B1bWFza19lbXB0eSgmaXVjdl9idWZmZXJfY3B1bWFzaykpIHsKIAkJcmMgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9CkBAIC05NzUsNyArOTc2LDcgQEAKIAlpbnQgcmM7CiAKIAlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0JaWYgKGNwdXNfZW1wdHkoaXVjdl9idWZmZXJfY3B1bWFzaykpIHsKKwlpZiAoY3B1bWFza19lbXB0eSgmaXVjdl9idWZmZXJfY3B1bWFzaykpIHsKIAkJcmMgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xMDA3LDcgKzEwMDgsNyBAQAogCWludCByYzsKIAogCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlpZiAoY3B1c19lbXB0eShpdWN2X2J1ZmZlcl9jcHVtYXNrKSkgeworCWlmIChjcHVtYXNrX2VtcHR5KCZpdWN2X2J1ZmZlcl9jcHVtYXNrKSkgewogCQlyYyA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KQEAgLTEwMzYsNyArMTAzNyw3IEBACiAJaW50IHJjOwogCiAJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JaWYgKGNwdXNfZW1wdHkoaXVjdl9idWZmZXJfY3B1bWFzaykpIHsKKwlpZiAoY3B1bWFza19lbXB0eSgmaXVjdl9idWZmZXJfY3B1bWFzaykpIHsKIAkJcmMgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xMDcwLDcgKzEwNzEsNyBAQAogCWludCByYzsKIAogCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlpZiAoY3B1c19lbXB0eShpdWN2X2J1ZmZlcl9jcHVtYXNrKSkgeworCWlmIChjcHVtYXNrX2VtcHR5KCZpdWN2X2J1ZmZlcl9jcHVtYXNrKSkgewogCQlyYyA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KQEAgLTExNjIsNyArMTE2Myw3IEBACiAJaWYgKG1zZy0+ZmxhZ3MgJiBJVUNWX0lQUk1EQVRBKQogCQlyZXR1cm4gaXVjdl9tZXNzYWdlX3JlY2VpdmVfaXBybWRhdGEocGF0aCwgbXNnLCBmbGFncywKIAkJCQkJCSAgICAgYnVmZmVyLCBzaXplLCByZXNpZHVhbCk7Ci0JaWYgKGNwdXNfZW1wdHkoaXVjdl9idWZmZXJfY3B1bWFzaykpIHsKKwkgaWYgKGNwdW1hc2tfZW1wdHkoJml1Y3ZfYnVmZmVyX2NwdW1hc2spKSB7CiAJCXJjID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTIzNSw3ICsxMjM2LDcgQEAKIAlpbnQgcmM7CiAKIAlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0JaWYgKGNwdXNfZW1wdHkoaXVjdl9idWZmZXJfY3B1bWFzaykpIHsKKwlpZiAoY3B1bWFza19lbXB0eSgmaXVjdl9idWZmZXJfY3B1bWFzaykpIHsKIAkJcmMgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xMjc0LDcgKzEyNzUsNyBAQAogCWludCByYzsKIAogCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlpZiAoY3B1c19lbXB0eShpdWN2X2J1ZmZlcl9jcHVtYXNrKSkgeworCWlmIChjcHVtYXNrX2VtcHR5KCZpdWN2X2J1ZmZlcl9jcHVtYXNrKSkgewogCQlyYyA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KQEAgLTEzMjQsNyArMTMyNSw3IEBACiAJdW5pb24gaXVjdl9wYXJhbSAqcGFybTsKIAlpbnQgcmM7CiAKLQlpZiAoY3B1c19lbXB0eShpdWN2X2J1ZmZlcl9jcHVtYXNrKSkgeworCWlmIChjcHVtYXNrX2VtcHR5KCZpdWN2X2J1ZmZlcl9jcHVtYXNrKSkgewogCQlyYyA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KQEAgLTE0MTEsNyArMTQxMiw3IEBACiAJaW50IHJjOwogCiAJbG9jYWxfYmhfZGlzYWJsZSgpOwotCWlmIChjcHVzX2VtcHR5KGl1Y3ZfYnVmZmVyX2NwdW1hc2spKSB7CisJaWYgKGNwdW1hc2tfZW1wdHkoJml1Y3ZfYnVmZmVyX2NwdW1hc2spKSB7CiAJCXJjID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTg4OCw3ICsxODg5LDcgQEAKIAlwcmludGsoS0VSTl9XQVJOSU5HICJpdWN2X3BtX2ZyZWV6ZVxuIik7CiAjZW5kaWYKIAlpZiAoaXVjdl9wbV9zdGF0ZSAhPSBJVUNWX1BNX0ZSRUVaSU5HKSB7Ci0JCWZvcl9lYWNoX2NwdV9tYXNrX25yKGNwdSwgaXVjdl9pcnFfY3B1bWFzaykKKwkJZm9yX2VhY2hfY3B1KGNwdSwgJml1Y3ZfaXJxX2NwdW1hc2spCiAJCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBpdWN2X2Jsb2NrX2NwdV9hbG1vc3QsCiAJCQkJCQkgTlVMTCwgMSk7CiAJCWNhbmNlbF93b3JrX3N5bmMoJml1Y3Zfd29yayk7CkBAIC0xOTI4LDcgKzE5MjksNyBAQAogCQlpZiAocmMpCiAJCQlnb3RvIG91dDsKIAl9Ci0JaWYgKGNwdXNfZW1wdHkoaXVjdl9pcnFfY3B1bWFzaykpIHsKKwlpZiAoY3B1bWFza19lbXB0eSgmaXVjdl9pcnFfY3B1bWFzaykpIHsKIAkJaWYgKGl1Y3Zfbm9uc21wX2hhbmRsZXIpCiAJCQkvKiBlbmFibGUgaW50ZXJydXB0cyBvbiBvbmUgY3B1ICovCiAJCQlpdWN2X2FsbG93X2NwdShOVUxMKTsKQEAgLTE5NjEsNyArMTk2Miw3IEBACiAJCXByX3dhcm5pbmcoIlN1c3BlbmRpbmcgTGludXggZGlkIG5vdCBjb21wbGV0ZWx5IGNsb3NlIGFsbCBJVUNWICIKIAkJCSJjb25uZWN0aW9uc1xuIik7CiAJaXVjdl9wbV9zdGF0ZSA9IElVQ1ZfUE1fUkVTVE9SSU5HOwotCWlmIChjcHVzX2VtcHR5KGl1Y3ZfaXJxX2NwdW1hc2spKSB7CisJaWYgKGNwdW1hc2tfZW1wdHkoJml1Y3ZfaXJxX2NwdW1hc2spKSB7CiAJCXJjID0gaXVjdl9xdWVyeV9tYXhjb25uKCk7CiAJCXJjID0gaXVjdl9lbmFibGUoKTsKIAkJaWYgKHJjKQpkaWZmIC0tZ2l0IGEvbmV0L2tleS9hZl9rZXkuYyBiL25ldC9rZXkvYWZfa2V5LmMKaW5kZXggN2RiODZmZi4uZDYyNDAxYyAxMDA2NDQKLS0tIGEvbmV0L2tleS9hZl9rZXkuYworKysgYi9uZXQva2V5L2FmX2tleS5jCkBAIC03MTIsNyArNzEyLDcgQEAKIAkJc2luNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKIAkJc2luNi0+c2luNl9wb3J0ID0gcG9ydDsKIAkJc2luNi0+c2luNl9mbG93aW5mbyA9IDA7Ci0JCWlwdjZfYWRkcl9jb3B5KCZzaW42LT5zaW42X2FkZHIsIChzdHJ1Y3QgaW42X2FkZHIgKil4YWRkci0+YTYpOworCQlpcHY2X2FkZHJfY29weSgmc2luNi0+c2luNl9hZGRyLCAoY29uc3Qgc3RydWN0IGluNl9hZGRyICopeGFkZHItPmE2KTsKIAkJc2luNi0+c2luNl9zY29wZV9pZCA9IDA7CiAJCXJldHVybiAxMjg7CiAJICAgIH0KZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfY29yZS5jIGIvbmV0L2wydHAvbDJ0cF9jb3JlLmMKaW5kZXggYzY0Y2UwYS4uZWQ4YTIzMyAxMDA2NDQKLS0tIGEvbmV0L2wydHAvbDJ0cF9jb3JlLmMKKysrIGIvbmV0L2wydHAvbDJ0cF9jb3JlLmMKQEAgLTk1NCw3ICs5NTQsNyBAQAogfQogCiBzdGF0aWMgaW50IGwydHBfeG1pdF9jb3JlKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgIHNpemVfdCBkYXRhX2xlbikKKwkJCSAgc3RydWN0IGZsb3dpICpmbCwgc2l6ZV90IGRhdGFfbGVuKQogewogCXN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsID0gc2Vzc2lvbi0+dHVubmVsOwogCXVuc2lnbmVkIGludCBsZW4gPSBza2ItPmxlbjsKQEAgLTk4Nyw3ICs5ODcsNyBAQAogCiAJLyogUXVldWUgdGhlIHBhY2tldCB0byBJUCBmb3Igb3V0cHV0ICovCiAJc2tiLT5sb2NhbF9kZiA9IDE7Ci0JZXJyb3IgPSBpcF9xdWV1ZV94bWl0KHNrYik7CisJZXJyb3IgPSBpcF9xdWV1ZV94bWl0KHNrYiwgZmwpOwogCiAJLyogVXBkYXRlIHN0YXRzICovCiAJaWYgKGVycm9yID49IDApIHsKQEAgLTEwMjgsNiArMTAyOCw3IEBACiAJaW50IGRhdGFfbGVuID0gc2tiLT5sZW47CiAJc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwgPSBzZXNzaW9uLT50dW5uZWw7CiAJc3RydWN0IHNvY2sgKnNrID0gdHVubmVsLT5zb2NrOworCXN0cnVjdCBmbG93aSAqZmw7CiAJc3RydWN0IHVkcGhkciAqdWg7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldDsKIAlfX3dzdW0gY3N1bTsKQEAgLTEwNjAsMTQgKzEwNjEsMjEgQEAKIAkJCSAgICAgIElQU0tCX1JFUk9VVEVEKTsKIAluZl9yZXNldChza2IpOwogCisJYmhfbG9ja19zb2NrKHNrKTsKKwlpZiAoc29ja19vd25lZF9ieV91c2VyKHNrKSkgeworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKIAkvKiBHZXQgcm91dGluZyBpbmZvIGZyb20gdGhlIHR1bm5lbCBzb2NrZXQgKi8KIAlza2JfZHN0X2Ryb3Aoc2tiKTsKIAlza2JfZHN0X3NldChza2IsIGRzdF9jbG9uZShfX3NrX2RzdF9nZXQoc2spKSk7CiAKKwlpbmV0ID0gaW5ldF9zayhzayk7CisJZmwgPSAmaW5ldC0+Y29yay5mbDsKIAlzd2l0Y2ggKHR1bm5lbC0+ZW5jYXApIHsKIAljYXNlIEwyVFBfRU5DQVBUWVBFX1VEUDoKIAkJLyogU2V0dXAgVURQIGhlYWRlciAqLwotCQlpbmV0ID0gaW5ldF9zayhzayk7CiAJCV9fc2tiX3B1c2goc2tiLCBzaXplb2YoKnVoKSk7CiAJCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiAJCXVoID0gdWRwX2hkcihza2IpOwpAQCAtMTEwNSw3ICsxMTEzLDkgQEAKIAogCWwydHBfc2tiX3NldF9vd25lcl93KHNrYiwgc2spOwogCi0JbDJ0cF94bWl0X2NvcmUoc2Vzc2lvbiwgc2tiLCBkYXRhX2xlbik7CisJbDJ0cF94bWl0X2NvcmUoc2Vzc2lvbiwgc2tiLCBmbCwgZGF0YV9sZW4pOworb3V0X3VubG9jazoKKwliaF91bmxvY2tfc29jayhzayk7CiAKIGFib3J0OgogCXJldHVybiAwOwpAQCAtMTQyNSwxNiArMTQzNSwxNSBAQAogCiAJLyogQWRkIHR1bm5lbCB0byBvdXIgbGlzdCAqLwogCUlOSVRfTElTVF9IRUFEKCZ0dW5uZWwtPmxpc3QpOwotCXNwaW5fbG9ja19iaCgmcG4tPmwydHBfdHVubmVsX2xpc3RfbG9jayk7Ci0JbGlzdF9hZGRfcmN1KCZ0dW5uZWwtPmxpc3QsICZwbi0+bDJ0cF90dW5uZWxfbGlzdCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJnBuLT5sMnRwX3R1bm5lbF9saXN0X2xvY2spOwotCXN5bmNocm9uaXplX3JjdSgpOwogCWF0b21pY19pbmMoJmwydHBfdHVubmVsX2NvdW50KTsKIAogCS8qIEJ1bXAgdGhlIHJlZmVyZW5jZSBjb3VudC4gVGhlIHR1bm5lbCBjb250ZXh0IGlzIGRlbGV0ZWQKLQkgKiBvbmx5IHdoZW4gdGhpcyBkcm9wcyB0byB6ZXJvLgorCSAqIG9ubHkgd2hlbiB0aGlzIGRyb3BzIHRvIHplcm8uIE11c3QgYmUgZG9uZSBiZWZvcmUgbGlzdCBpbnNlcnRpb24KIAkgKi8KIAlsMnRwX3R1bm5lbF9pbmNfcmVmY291bnQodHVubmVsKTsKKwlzcGluX2xvY2tfYmgoJnBuLT5sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCWxpc3RfYWRkX3JjdSgmdHVubmVsLT5saXN0LCAmcG4tPmwydHBfdHVubmVsX2xpc3QpOworCXNwaW5fdW5sb2NrX2JoKCZwbi0+bDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKIAogCWVyciA9IDA7CiBlcnI6CkBAIC0xNjI2LDcgKzE2MzUsNiBAQAogCQkJaGxpc3RfYWRkX2hlYWRfcmN1KCZzZXNzaW9uLT5nbG9iYWxfaGxpc3QsCiAJCQkJCSAgIGwydHBfc2Vzc2lvbl9pZF9oYXNoXzIocG4sIHNlc3Npb25faWQpKTsKIAkJCXNwaW5fdW5sb2NrX2JoKCZwbi0+bDJ0cF9zZXNzaW9uX2hsaXN0X2xvY2spOwotCQkJc3luY2hyb25pemVfcmN1KCk7CiAJCX0KIAogCQkvKiBJZ25vcmUgbWFuYWdlbWVudCBzZXNzaW9uIGluIHNlc3Npb24gY291bnQgdmFsdWUgKi8KZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfaXAuYyBiL25ldC9sMnRwL2wydHBfaXAuYwppbmRleCBmY2U5YmQzLi5iNjQ2NmU3IDEwMDY0NAotLS0gYS9uZXQvbDJ0cC9sMnRwX2lwLmMKKysrIGIvbmV0L2wydHAvbDJ0cF9pcC5jCkBAIC0yOTYsMTIgKzI5NiwxMiBAQAogCiBzdGF0aWMgaW50IGwydHBfaXBfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsIGludCBhZGRyX2xlbikKIHsKLQlpbnQgcmM7Ci0Jc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCBzb2NrYWRkcl9sMnRwaXAgKmxzYSA9IChzdHJ1Y3Qgc29ja2FkZHJfbDJ0cGlwICopIHVhZGRyOworCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKKwlzdHJ1Y3QgZmxvd2k0ICpmbDQ7CiAJc3RydWN0IHJ0YWJsZSAqcnQ7CiAJX19iZTMyIHNhZGRyOwotCWludCBvaWY7CisJaW50IG9pZiwgcmM7CiAKIAlyYyA9IC1FSU5WQUw7CiAJaWYgKGFkZHJfbGVuIDwgc2l6ZW9mKCpsc2EpKQpAQCAtMzExLDYgKzMxMSw4IEBACiAJaWYgKGxzYS0+bDJ0cF9mYW1pbHkgIT0gQUZfSU5FVCkKIAkJZ290byBvdXQ7CiAKKwlsb2NrX3NvY2soc2spOworCiAJc2tfZHN0X3Jlc2V0KHNrKTsKIAogCW9pZiA9IHNrLT5za19ib3VuZF9kZXZfaWY7CkBAIC0zMjAsNyArMzIyLDggQEAKIAlpZiAoaXB2NF9pc19tdWx0aWNhc3QobHNhLT5sMnRwX2FkZHIuc19hZGRyKSkKIAkJZ290byBvdXQ7CiAKLQlydCA9IGlwX3JvdXRlX2Nvbm5lY3QobHNhLT5sMnRwX2FkZHIuc19hZGRyLCBzYWRkciwKKwlmbDQgPSAmaW5ldC0+Y29yay5mbC51LmlwNDsKKwlydCA9IGlwX3JvdXRlX2Nvbm5lY3QoZmw0LCBsc2EtPmwydHBfYWRkci5zX2FkZHIsIHNhZGRyLAogCQkJICAgICAgUlRfQ09OTl9GTEFHUyhzayksIG9pZiwKIAkJCSAgICAgIElQUFJPVE9fTDJUUCwKIAkJCSAgICAgIDAsIDAsIHNrLCB0cnVlKTsKQEAgLTM0MCwxMCArMzQzLDEwIEBACiAJbDJ0cF9pcF9zayhzayktPnBlZXJfY29ubl9pZCA9IGxzYS0+bDJ0cF9jb25uX2lkOwogCiAJaWYgKCFpbmV0LT5pbmV0X3NhZGRyKQotCQlpbmV0LT5pbmV0X3NhZGRyID0gcnQtPnJ0X3NyYzsKKwkJaW5ldC0+aW5ldF9zYWRkciA9IGZsNC0+c2FkZHI7CiAJaWYgKCFpbmV0LT5pbmV0X3Jjdl9zYWRkcikKLQkJaW5ldC0+aW5ldF9yY3Zfc2FkZHIgPSBydC0+cnRfc3JjOwotCWluZXQtPmluZXRfZGFkZHIgPSBydC0+cnRfZHN0OworCQlpbmV0LT5pbmV0X3Jjdl9zYWRkciA9IGZsNC0+c2FkZHI7CisJaW5ldC0+aW5ldF9kYWRkciA9IGZsNC0+ZGFkZHI7CiAJc2stPnNrX3N0YXRlID0gVENQX0VTVEFCTElTSEVEOwogCWluZXQtPmluZXRfaWQgPSBqaWZmaWVzOwogCkBAIC0zNTYsNiArMzU5LDcgQEAKIAogCXJjID0gMDsKIG91dDoKKwlyZWxlYXNlX3NvY2soc2spOwogCXJldHVybiByYzsKIH0KIApAQCAtNDE2LDIzICs0MjAsMjggQEAKIAlpbnQgcmM7CiAJc3RydWN0IGwydHBfaXBfc29jayAqbHNhID0gbDJ0cF9pcF9zayhzayk7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwotCXN0cnVjdCBpcF9vcHRpb25zICpvcHQgPSBpbmV0LT5vcHQ7CiAJc3RydWN0IHJ0YWJsZSAqcnQgPSBOVUxMOworCXN0cnVjdCBmbG93aTQgKmZsNDsKIAlpbnQgY29ubmVjdGVkID0gMDsKIAlfX2JlMzIgZGFkZHI7CiAKKwlsb2NrX3NvY2soc2spOworCisJcmMgPSAtRU5PVENPTk47CiAJaWYgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkKLQkJcmV0dXJuIC1FTk9UQ09OTjsKKwkJZ290byBvdXQ7CiAKIAkvKiBHZXQgYW5kIHZlcmlmeSB0aGUgYWRkcmVzcy4gKi8KIAlpZiAobXNnLT5tc2dfbmFtZSkgewogCQlzdHJ1Y3Qgc29ja2FkZHJfbDJ0cGlwICpsaXAgPSAoc3RydWN0IHNvY2thZGRyX2wydHBpcCAqKSBtc2ctPm1zZ19uYW1lOworCQlyYyA9IC1FSU5WQUw7CiAJCWlmIChtc2ctPm1zZ19uYW1lbGVuIDwgc2l6ZW9mKCpsaXApKQotCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlnb3RvIG91dDsKIAogCQlpZiAobGlwLT5sMnRwX2ZhbWlseSAhPSBBRl9JTkVUKSB7CisJCQlyYyA9IC1FQUZOT1NVUFBPUlQ7CiAJCQlpZiAobGlwLT5sMnRwX2ZhbWlseSAhPSBBRl9VTlNQRUMpCi0JCQkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CisJCQkJZ290byBvdXQ7CiAJCX0KIAogCQlkYWRkciA9IGxpcC0+bDJ0cF9hZGRyLnNfYWRkcjsKQEAgLTQ2NywxOSArNDc2LDI3IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCisJZmw0ID0gJmluZXQtPmNvcmsuZmwudS5pcDQ7CiAJaWYgKGNvbm5lY3RlZCkKIAkJcnQgPSAoc3RydWN0IHJ0YWJsZSAqKSBfX3NrX2RzdF9jaGVjayhzaywgMCk7CiAKIAlpZiAocnQgPT0gTlVMTCkgeworCQlzdHJ1Y3QgaXBfb3B0aW9uc19yY3UgKmluZXRfb3B0OworCisJCXJjdV9yZWFkX2xvY2soKTsKKwkJaW5ldF9vcHQgPSByY3VfZGVyZWZlcmVuY2UoaW5ldC0+aW5ldF9vcHQpOworCiAJCS8qIFVzZSBjb3JyZWN0IGRlc3RpbmF0aW9uIGFkZHJlc3MgaWYgd2UgaGF2ZSBvcHRpb25zLiAqLwotCQlpZiAob3B0ICYmIG9wdC0+c3JyKQotCQkJZGFkZHIgPSBvcHQtPmZhZGRyOworCQlpZiAoaW5ldF9vcHQgJiYgaW5ldF9vcHQtPm9wdC5zcnIpCisJCQlkYWRkciA9IGluZXRfb3B0LT5vcHQuZmFkZHI7CisKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkJLyogSWYgdGhpcyBmYWlscywgcmV0cmFuc21pdCBtZWNoYW5pc20gb2YgdHJhbnNwb3J0IGxheWVyIHdpbGwKIAkJICoga2VlcCB0cnlpbmcgdW50aWwgcm91dGUgYXBwZWFycyBvciB0aGUgY29ubmVjdGlvbiB0aW1lcwogCQkgKiBpdHNlbGYgb3V0LgogCQkgKi8KLQkJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMoc29ja19uZXQoc2spLCBzaywKKwkJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMoc29ja19uZXQoc2spLCBmbDQsIHNrLAogCQkJCQkgICBkYWRkciwgaW5ldC0+aW5ldF9zYWRkciwKIAkJCQkJICAgaW5ldC0+aW5ldF9kcG9ydCwgaW5ldC0+aW5ldF9zcG9ydCwKIAkJCQkJICAgc2stPnNrX3Byb3RvY29sLCBSVF9DT05OX0ZMQUdTKHNrKSwKQEAgLTQ5MSw3ICs1MDgsNyBAQAogCXNrYl9kc3Rfc2V0KHNrYiwgZHN0X2Nsb25lKCZydC0+ZHN0KSk7CiAKIAkvKiBRdWV1ZSB0aGUgcGFja2V0IHRvIElQIGZvciBvdXRwdXQgKi8KLQlyYyA9IGlwX3F1ZXVlX3htaXQoc2tiKTsKKwlyYyA9IGlwX3F1ZXVlX3htaXQoc2tiLCAmaW5ldC0+Y29yay5mbCk7CiAKIGVycm9yOgogCS8qIFVwZGF0ZSBzdGF0cyAqLwpAQCAtNTAzLDEyICs1MjAsMTUgQEAKIAkJbHNhLT50eF9lcnJvcnMrKzsKIAl9CiAKK291dDoKKwlyZWxlYXNlX3NvY2soc2spOwogCXJldHVybiByYzsKIAogbm9fcm91dGU6CiAJSVBfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgSVBTVEFUU19NSUJfT1VUTk9ST1VURVMpOwogCWtmcmVlX3NrYihza2IpOwotCXJldHVybiAtRUhPU1RVTlJFQUNIOworCXJjID0gLUVIT1NUVU5SRUFDSDsKKwlnb3RvIG91dDsKIH0KIAogc3RhdGljIGludCBsMnRwX2lwX3JlY3Ztc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywKQEAgLTY2Nyw3ICs2ODcsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJMMlRQIG92ZXIgSVAiKTsKIE1PRFVMRV9WRVJTSU9OKCIxLjAiKTsKIAotLyogVXNlIHRoZSB2YWx1ZSBvZiBTT0NLX0RHUkFNICgyKSBkaXJlY3RvcnksIGJlY2F1c2UgX19zdHJpbmdpZnkgZG9lcyd0IGxpa2UKKy8qIFVzZSB0aGUgdmFsdWUgb2YgU09DS19ER1JBTSAoMikgZGlyZWN0b3J5LCBiZWNhdXNlIF9fc3RyaW5naWZ5IGRvZXNuJ3QgbGlrZQogICogZW51bXMKICAqLwogTU9EVUxFX0FMSUFTX05FVF9QRl9QUk9UT19UWVBFKFBGX0lORVQsIDIsIElQUFJPVE9fTDJUUCk7CmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYyBiL25ldC9sMnRwL2wydHBfbmV0bGluay5jCmluZGV4IDRjMWU1NDAuLjkzYTQxYTAgMTAwNjQ0Ci0tLSBhL25ldC9sMnRwL2wydHBfbmV0bGluay5jCisrKyBiL25ldC9sMnRwL2wydHBfbmV0bGluay5jCkBAIC03OTUsMTEgKzc5NSwxMiBAQAogCQlnb3RvIG91dDsKIAogCWwydHBfbmxfY21kX29wc1twd190eXBlXSA9IG9wczsKKwlyZXQgPSAwOwogCiBvdXQ6CiAJZ2VubF91bmxvY2soKTsKIGVycjoKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwobDJ0cF9ubF9yZWdpc3Rlcl9vcHMpOwogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvS2NvbmZpZyBiL25ldC9tYWM4MDIxMS9LY29uZmlnCmluZGV4IDUxM2Y4NWMuLmY1ZmRmY2IgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9LY29uZmlnCisrKyBiL25ldC9tYWM4MDIxMS9LY29uZmlnCkBAIC0yLDcgKzIsNiBAQAogCXRyaXN0YXRlICJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKSIKIAlkZXBlbmRzIG9uIENGRzgwMjExCiAJc2VsZWN0IENSWVBUTwotCXNlbGVjdCBDUllQVE9fRUNCCiAJc2VsZWN0IENSWVBUT19BUkM0CiAJc2VsZWN0IENSWVBUT19BRVMKIAlzZWxlY3QgQ1JDMzIKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZXNfY2NtLmMgYi9uZXQvbWFjODAyMTEvYWVzX2NjbS5jCmluZGV4IDRiZDZlZjAuLmI5YjU5NWMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9hZXNfY2NtLmMKKysrIGIvbmV0L21hYzgwMjExL2Flc19jY20uYwpAQCAtNTQsMTMgKzU0LDEyIEBACiAJCQkgICAgICAgdTggKmNkYXRhLCB1OCAqbWljKQogewogCWludCBpLCBqLCBsYXN0X2xlbiwgbnVtX2Jsb2NrczsKLQl1OCAqcG9zLCAqY3BvcywgKmIsICpzXzAsICplLCAqYl8wLCAqYWFkOworCXU4ICpwb3MsICpjcG9zLCAqYiwgKnNfMCwgKmUsICpiXzA7CiAKIAliID0gc2NyYXRjaDsKIAlzXzAgPSBzY3JhdGNoICsgQUVTX0JMT0NLX0xFTjsKIAllID0gc2NyYXRjaCArIDIgKiBBRVNfQkxPQ0tfTEVOOwogCWJfMCA9IHNjcmF0Y2ggKyAzICogQUVTX0JMT0NLX0xFTjsKLQlhYWQgPSBzY3JhdGNoICsgNCAqIEFFU19CTE9DS19MRU47CiAKIAludW1fYmxvY2tzID0gRElWX1JPVU5EX1VQKGRhdGFfbGVuLCBBRVNfQkxPQ0tfTEVOKTsKIAlsYXN0X2xlbiA9IGRhdGFfbGVuICUgQUVTX0JMT0NLX0xFTjsKQEAgLTk0LDEzICs5MywxMiBAQAogCQkJICAgICAgdTggKmNkYXRhLCBzaXplX3QgZGF0YV9sZW4sIHU4ICptaWMsIHU4ICpkYXRhKQogewogCWludCBpLCBqLCBsYXN0X2xlbiwgbnVtX2Jsb2NrczsKLQl1OCAqcG9zLCAqY3BvcywgKmIsICpzXzAsICphLCAqYl8wLCAqYWFkOworCXU4ICpwb3MsICpjcG9zLCAqYiwgKnNfMCwgKmEsICpiXzA7CiAKIAliID0gc2NyYXRjaDsKIAlzXzAgPSBzY3JhdGNoICsgQUVTX0JMT0NLX0xFTjsKIAlhID0gc2NyYXRjaCArIDIgKiBBRVNfQkxPQ0tfTEVOOwogCWJfMCA9IHNjcmF0Y2ggKyAzICogQUVTX0JMT0NLX0xFTjsKLQlhYWQgPSBzY3JhdGNoICsgNCAqIEFFU19CTE9DS19MRU47CiAKIAludW1fYmxvY2tzID0gRElWX1JPVU5EX1VQKGRhdGFfbGVuLCBBRVNfQkxPQ0tfTEVOKTsKIAlsYXN0X2xlbiA9IGRhdGFfbGVuICUgQUVTX0JMT0NLX0xFTjsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZ2ctcnguYyBiL25ldC9tYWM4MDIxMS9hZ2ctcnguYwppbmRleCAwYzlkMGMwLi45YzBkNzZjIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvYWdnLXJ4LmMKKysrIGIvbmV0L21hYzgwMjExL2FnZy1yeC5jCkBAIC02Myw3ICs2Myw4IEBACiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZzdGEtPmFtcGR1X21sbWUubXR4KTsKIAotCXRpZF9yeCA9IHN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXTsKKwl0aWRfcnggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSwKKwkJCQkJbG9ja2RlcF9pc19oZWxkKCZzdGEtPmFtcGR1X21sbWUubXR4KSk7CiAKIAlpZiAoIXRpZF9yeCkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FnZy10eC5jIGIvbmV0L21hYzgwMjExL2FnZy10eC5jCmluZGV4IDYzZDg1MmMuLmM4YmU4ZWYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9hZ2ctdHguYworKysgYi9uZXQvbWFjODAyMTEvYWdnLXR4LmMKQEAgLTEzNiwxMiArMTM2LDEyIEBACiAJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiKTsKIH0KIAotc3RhdGljIHZvaWQga2ZyZWVfdGlkX3R4KHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpCit2b2lkIGllZWU4MDIxMV9hc3NpZ25fdGlkX3R4KHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBpbnQgdGlkLAorCQkJICAgICBzdHJ1Y3QgdGlkX2FtcGR1X3R4ICp0aWRfdHgpCiB7Ci0Jc3RydWN0IHRpZF9hbXBkdV90eCAqdGlkX3R4ID0KLQkgICAgY29udGFpbmVyX29mKHJjdV9oZWFkLCBzdHJ1Y3QgdGlkX2FtcGR1X3R4LCByY3VfaGVhZCk7Ci0KLQlrZnJlZSh0aWRfdHgpOworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnN0YS0+YW1wZHVfbWxtZS5tdHgpOworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnN0YS0+bG9jayk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSwgdGlkX3R4KTsKIH0KIAogaW50IF9fX2llZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQsCkBAIC0xNDksMjEgKzE0OSwyNCBAQAogCQkJCSAgICBib29sIHR4KQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc3RhLT5sb2NhbDsKLQlzdHJ1Y3QgdGlkX2FtcGR1X3R4ICp0aWRfdHggPSBzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF07CisJc3RydWN0IHRpZF9hbXBkdV90eCAqdGlkX3R4OwogCWludCByZXQ7CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZzdGEtPmFtcGR1X21sbWUubXR4KTsKIAotCWlmICghdGlkX3R4KQotCQlyZXR1cm4gLUVOT0VOVDsKLQogCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKIAorCXRpZF90eCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWRfdGlkX3R4KHN0YSwgdGlkKTsKKwlpZiAoIXRpZF90eCkgeworCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCiAJaWYgKHRlc3RfYml0KEhUX0FHR19TVEFURV9XQU5UX1NUQVJULCAmdGlkX3R4LT5zdGF0ZSkpIHsKIAkJLyogbm90IGV2ZW4gc3RhcnRlZCB5ZXQhICovCi0JCXJjdV9hc3NpZ25fcG9pbnRlcihzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0sIE5VTEwpOworCQlpZWVlODAyMTFfYXNzaWduX3RpZF90eChzdGEsIHRpZCwgTlVMTCk7CiAJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCQljYWxsX3JjdSgmdGlkX3R4LT5yY3VfaGVhZCwga2ZyZWVfdGlkX3R4KTsKKwkJa2ZyZWVfcmN1KHRpZF90eCwgcmN1X2hlYWQpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTI4MywxMyArMjg2LDEzIEBACiAKIHZvaWQgaWVlZTgwMjExX3R4X2JhX3Nlc3Npb25faGFuZGxlX3N0YXJ0KHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBpbnQgdGlkKQogewotCXN0cnVjdCB0aWRfYW1wZHVfdHggKnRpZF90eCA9IHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXTsKKwlzdHJ1Y3QgdGlkX2FtcGR1X3R4ICp0aWRfdHg7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gc3RhLT5zZGF0YTsKIAl1MTYgc3RhcnRfc2VxX251bTsKIAlpbnQgcmV0OwogCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmc3RhLT5hbXBkdV9tbG1lLm10eCk7CisJdGlkX3R4ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZF90aWRfdHgoc3RhLCB0aWQpOwogCiAJLyoKIAkgKiBXaGlsZSB3ZSdyZSBhc2tpbmcgdGhlIGRyaXZlciBhYm91dCB0aGUgYWdncmVnYXRpb24sCkBAIC0zMTgsMTEgKzMyMSwxMSBAQAogCQkJCQkiIHRpZCAlZFxuIiwgdGlkKTsKICNlbmRpZgogCQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0JCXJjdV9hc3NpZ25fcG9pbnRlcihzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0sIE5VTEwpOworCQlpZWVlODAyMTFfYXNzaWduX3RpZF90eChzdGEsIHRpZCwgTlVMTCk7CiAJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwogCiAJCWllZWU4MDIxMV93YWtlX3F1ZXVlX2FnZyhsb2NhbCwgdGlkKTsKLQkJY2FsbF9yY3UoJnRpZF90eC0+cmN1X2hlYWQsIGtmcmVlX3RpZF90eCk7CisJCWtmcmVlX3JjdSh0aWRfdHgsIHJjdV9oZWFkKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzk2LDkgKzM5OSw5IEBACiAJCWdvdG8gZXJyX3VubG9ja19zdGE7CiAJfQogCi0JdGlkX3R4ID0gc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdOworCXRpZF90eCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWRfdGlkX3R4KHN0YSwgdGlkKTsKIAkvKiBjaGVjayBpZiB0aGUgVElEIGlzIG5vdCBpbiBhZ2dyZWdhdGlvbiBmbG93IGFscmVhZHkgKi8KLQlpZiAodGlkX3R4KSB7CisJaWYgKHRpZF90eCB8fCBzdGEtPmFtcGR1X21sbWUudGlkX3N0YXJ0X3R4W3RpZF0pIHsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKIAkJcHJpbnRrKEtFUk5fREVCVUcgIkJBIHJlcXVlc3QgZGVuaWVkIC0gc2Vzc2lvbiBpcyBub3QgIgogCQkJCSAiaWRsZSBvbiB0aWQgJXVcbiIsIHRpZCk7CkBAIC00MzMsOCArNDM2LDExIEBACiAJc3RhLT5hbXBkdV9tbG1lLmRpYWxvZ190b2tlbl9hbGxvY2F0b3IrKzsKIAl0aWRfdHgtPmRpYWxvZ190b2tlbiA9IHN0YS0+YW1wZHVfbWxtZS5kaWFsb2dfdG9rZW5fYWxsb2NhdG9yOwogCi0JLyogZmluYWxseSwgYXNzaWduIGl0IHRvIHRoZSBhcnJheSAqLwotCXJjdV9hc3NpZ25fcG9pbnRlcihzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0sIHRpZF90eCk7CisJLyoKKwkgKiBGaW5hbGx5LCBhc3NpZ24gaXQgdG8gdGhlIHN0YXJ0IGFycmF5OyB0aGUgd29yayBpdGVtIHdpbGwKKwkgKiBjb2xsZWN0IGl0IGFuZCBtb3ZlIGl0IHRvIHRoZSBub3JtYWwgYXJyYXkuCisJICovCisJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGFydF90eFt0aWRdID0gdGlkX3R4OwogCiAJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJnN0YS0+YW1wZHVfbWxtZS53b3JrKTsKIApAQCAtNDgwLDE2ICs0ODYsMTkgQEAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9hZ2dfdHhfb3BlcmF0aW9uYWwoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkJCSBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCkKIHsKKwlzdHJ1Y3QgdGlkX2FtcGR1X3R4ICp0aWRfdHg7CisKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZzdGEtPmFtcGR1X21sbWUubXR4KTsKIAorCXRpZF90eCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWRfdGlkX3R4KHN0YSwgdGlkKTsKKwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwogCXByaW50ayhLRVJOX0RFQlVHICJBZ2dyZWdhdGlvbiBpcyBvbiBmb3IgdGlkICVkXG4iLCB0aWQpOwogI2VuZGlmCiAKIAlkcnZfYW1wZHVfYWN0aW9uKGxvY2FsLCBzdGEtPnNkYXRhLAogCQkJIElFRUU4MDIxMV9BTVBEVV9UWF9PUEVSQVRJT05BTCwKLQkJCSAmc3RhLT5zdGEsIHRpZCwgTlVMTCwKLQkJCSBzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmJ1Zl9zaXplKTsKKwkJCSAmc3RhLT5zdGEsIHRpZCwgTlVMTCwgdGlkX3R4LT5idWZfc2l6ZSk7CiAKIAkvKgogCSAqIHN5bmNocm9uaXplIHdpdGggVFggcGF0aCwgd2hpbGUgc3BsaWNpbmcgdGhlIFRYIHBhdGgKQEAgLTQ5NywxMyArNTA2LDEzIEBACiAJICovCiAJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwogCi0JaWVlZTgwMjExX2FnZ19zcGxpY2VfcGFja2V0cyhsb2NhbCwgc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLCB0aWQpOworCWllZWU4MDIxMV9hZ2dfc3BsaWNlX3BhY2tldHMobG9jYWwsIHRpZF90eCwgdGlkKTsKIAkvKgogCSAqIE5vdyBtYXJrIGFzIG9wZXJhdGlvbmFsLiBUaGlzIHdpbGwgYmUgdmlzaWJsZQogCSAqIGluIHRoZSBUWCBwYXRoLCBhbmQgbGV0cyBpdCBnbyBsb2NrLWZyZWUgaW4KIAkgKiB0aGUgY29tbW9uIGNhc2UuCiAJICovCi0Jc2V0X2JpdChIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwsICZzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPnN0YXRlKTsKKwlzZXRfYml0KEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCwgJnRpZF90eC0+c3RhdGUpOwogCWllZWU4MDIxMV9hZ2dfc3BsaWNlX2ZpbmlzaChsb2NhbCwgdGlkKTsKIAogCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwpAQCAtNTM3LDcgKzU0Niw3IEBACiAJfQogCiAJbXV0ZXhfbG9jaygmc3RhLT5hbXBkdV9tbG1lLm10eCk7Ci0JdGlkX3R4ID0gc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdOworCXRpZF90eCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWRfdGlkX3R4KHN0YSwgdGlkKTsKIAogCWlmIChXQVJOX09OKCF0aWRfdHgpKSB7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCkBAIC02MTUsNyArNjI0LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0JdGlkX3R4ID0gc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdOworCXRpZF90eCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWRfdGlkX3R4KHN0YSwgdGlkKTsKIAogCWlmICghdGlkX3R4KSB7CiAJCXJldCA9IC1FTk9FTlQ7CkBAIC02NzEsNyArNjgwLDcgQEAKIAogCW11dGV4X2xvY2soJnN0YS0+YW1wZHVfbWxtZS5tdHgpOwogCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKLQl0aWRfdHggPSBzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF07CisJdGlkX3R4ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZF90aWRfdHgoc3RhLCB0aWQpOwogCiAJaWYgKCF0aWRfdHggfHwgIXRlc3RfYml0KEhUX0FHR19TVEFURV9TVE9QUElORywgJnRpZF90eC0+c3RhdGUpKSB7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCkBAIC02OTcsMTEgKzcwNiwxMSBAQAogCWllZWU4MDIxMV9hZ2dfc3BsaWNlX3BhY2tldHMobG9jYWwsIHRpZF90eCwgdGlkKTsKIAogCS8qIGZ1dHVyZSBwYWNrZXRzIG11c3Qgbm90IGZpbmQgdGhlIHRpZF90eCBzdHJ1Y3QgYW55IG1vcmUgKi8KLQlyY3VfYXNzaWduX3BvaW50ZXIoc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLCBOVUxMKTsKKwlpZWVlODAyMTFfYXNzaWduX3RpZF90eChzdGEsIHRpZCwgTlVMTCk7CiAKIAlpZWVlODAyMTFfYWdnX3NwbGljZV9maW5pc2gobG9jYWwsIHRpZCk7CiAKLQljYWxsX3JjdSgmdGlkX3R4LT5yY3VfaGVhZCwga2ZyZWVfdGlkX3R4KTsKKwlrZnJlZV9yY3UodGlkX3R4LCByY3VfaGVhZCk7CiAKICB1bmxvY2tfc3RhOgogCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwpAQCAtNzUyLDcgKzc2MSw3IEBACiAKIAltdXRleF9sb2NrKCZzdGEtPmFtcGR1X21sbWUubXR4KTsKIAotCXRpZF90eCA9IHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXTsKKwl0aWRfdHggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkX3RpZF90eChzdGEsIHRpZCk7CiAJaWYgKCF0aWRfdHgpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvY2ZnLmMgYi9uZXQvbWFjODAyMTEvY2ZnLmMKaW5kZXggMzM0MjEzNS4uYmU3MGM3MCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2NmZy5jCisrKyBiL25ldC9tYWM4MDIxMS9jZmcuYwpAQCAtMTM2LDcgKzEzNiwxMCBAQAogCW11dGV4X2xvY2soJnNkYXRhLT5sb2NhbC0+c3RhX210eCk7CiAKIAlpZiAobWFjX2FkZHIpIHsKLQkJc3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWFjX2FkZHIpOworCQlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkKKwkJCXN0YSA9IHN0YV9pbmZvX2dldChzZGF0YSwgbWFjX2FkZHIpOworCQllbHNlCisJCQlzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtYWNfYWRkcik7CiAJCWlmICghc3RhKSB7CiAJCQlpZWVlODAyMTFfa2V5X2ZyZWUoc2RhdGEtPmxvY2FsLCBrZXkpOwogCQkJZXJyID0gLUVOT0VOVDsKQEAgLTE1NywxMyArMTYwLDE0IEBACiBzdGF0aWMgaW50IGllZWU4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgIHU4IGtleV9pZHgsIGJvb2wgcGFpcndpc2UsIGNvbnN0IHU4ICptYWNfYWRkcikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSA9IE5VTEw7CiAJaW50IHJldDsKIAotCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQotCW11dGV4X2xvY2soJnNkYXRhLT5sb2NhbC0+c3RhX210eCk7CisJbXV0ZXhfbG9jaygmbG9jYWwtPnN0YV9tdHgpOworCW11dGV4X2xvY2soJmxvY2FsLT5rZXlfbXR4KTsKIAogCWlmIChtYWNfYWRkcikgewogCQlyZXQgPSAtRU5PRU5UOwpAQCAtMTcyLDMzICsxNzYsMjQgQEAKIAkJaWYgKCFzdGEpCiAJCQlnb3RvIG91dF91bmxvY2s7CiAKLQkJaWYgKHBhaXJ3aXNlKSB7Ci0JCQlpZiAoc3RhLT5wdGspIHsKLQkJCQlpZWVlODAyMTFfa2V5X2ZyZWUoc2RhdGEtPmxvY2FsLCBzdGEtPnB0ayk7Ci0JCQkJcmV0ID0gMDsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChzdGEtPmd0a1trZXlfaWR4XSkgewotCQkJCWllZWU4MDIxMV9rZXlfZnJlZShzZGF0YS0+bG9jYWwsCi0JCQkJCQkgICBzdGEtPmd0a1trZXlfaWR4XSk7Ci0JCQkJcmV0ID0gMDsKLQkJCX0KLQkJfQorCQlpZiAocGFpcndpc2UpCisJCQlrZXkgPSBrZXlfbXR4X2RlcmVmZXJlbmNlKGxvY2FsLCBzdGEtPnB0ayk7CisJCWVsc2UKKwkJCWtleSA9IGtleV9tdHhfZGVyZWZlcmVuY2UobG9jYWwsIHN0YS0+Z3RrW2tleV9pZHhdKTsKKwl9IGVsc2UKKwkJa2V5ID0ga2V5X210eF9kZXJlZmVyZW5jZShsb2NhbCwgc2RhdGEtPmtleXNba2V5X2lkeF0pOwogCi0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQlpZiAoIXNkYXRhLT5rZXlzW2tleV9pZHhdKSB7CisJaWYgKCFrZXkpIHsKIAkJcmV0ID0gLUVOT0VOVDsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCWllZWU4MDIxMV9rZXlfZnJlZShzZGF0YS0+bG9jYWwsIHNkYXRhLT5rZXlzW2tleV9pZHhdKTsKLQlXQVJOX09OKHNkYXRhLT5rZXlzW2tleV9pZHhdKTsKKwlfX2llZWU4MDIxMV9rZXlfZnJlZShrZXkpOwogCiAJcmV0ID0gMDsKICBvdXRfdW5sb2NrOgotCW11dGV4X3VubG9jaygmc2RhdGEtPmxvY2FsLT5zdGFfbXR4KTsKKwltdXRleF91bmxvY2soJmxvY2FsLT5rZXlfbXR4KTsKKwltdXRleF91bmxvY2soJmxvY2FsLT5zdGFfbXR4KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yMjgsMTEgKzIyMywxMSBAQAogCQkJZ290byBvdXQ7CiAKIAkJaWYgKHBhaXJ3aXNlKQotCQkJa2V5ID0gc3RhLT5wdGs7CisJCQlrZXkgPSByY3VfZGVyZWZlcmVuY2Uoc3RhLT5wdGspOwogCQllbHNlIGlmIChrZXlfaWR4IDwgTlVNX0RFRkFVTFRfS0VZUykKLQkJCWtleSA9IHN0YS0+Z3RrW2tleV9pZHhdOworCQkJa2V5ID0gcmN1X2RlcmVmZXJlbmNlKHN0YS0+Z3RrW2tleV9pZHhdKTsKIAl9IGVsc2UKLQkJa2V5ID0gc2RhdGEtPmtleXNba2V5X2lkeF07CisJCWtleSA9IHJjdV9kZXJlZmVyZW5jZShzZGF0YS0+a2V5c1trZXlfaWR4XSk7CiAKIAlpZiAoIWtleSkKIAkJZ290byBvdXQ7CkBAIC0zMzAsNiArMzI1LDcgQEAKIHN0YXRpYyB2b2lkIHN0YV9zZXRfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvKQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gc3RhLT5zZGF0YTsKKwlzdHJ1Y3QgdGltZXNwZWMgdXB0aW1lOwogCiAJc2luZm8tPmdlbmVyYXRpb24gPSBzZGF0YS0+bG9jYWwtPnN0YV9nZW5lcmF0aW9uOwogCkBAIC0zNDIsNyArMzM4LDEyIEBACiAJCQlTVEFUSU9OX0lORk9fVFhfRkFJTEVEIHwKIAkJCVNUQVRJT05fSU5GT19UWF9CSVRSQVRFIHwKIAkJCVNUQVRJT05fSU5GT19SWF9CSVRSQVRFIHwKLQkJCVNUQVRJT05fSU5GT19SWF9EUk9QX01JU0M7CisJCQlTVEFUSU9OX0lORk9fUlhfRFJPUF9NSVNDIHwKKwkJCVNUQVRJT05fSU5GT19CU1NfUEFSQU0gfAorCQkJU1RBVElPTl9JTkZPX0NPTk5FQ1RFRF9USU1FOworCisJZG9fcG9zaXhfY2xvY2tfbW9ub3RvbmljX2dldHRpbWUoJnVwdGltZSk7CisJc2luZm8tPmNvbm5lY3RlZF90aW1lID0gdXB0aW1lLnR2X3NlYyAtIHN0YS0+bGFzdF9jb25uZWN0ZWQ7CiAKIAlzaW5mby0+aW5hY3RpdmVfdGltZSA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHN0YS0+bGFzdF9yeCk7CiAJc2luZm8tPnJ4X2J5dGVzID0gc3RhLT5yeF9ieXRlczsKQEAgLTM4OSw2ICszOTAsMTYgQEAKIAkJc2luZm8tPnBsaW5rX3N0YXRlID0gc3RhLT5wbGlua19zdGF0ZTsKICNlbmRpZgogCX0KKworCXNpbmZvLT5ic3NfcGFyYW0uZmxhZ3MgPSAwOworCWlmIChzZGF0YS0+dmlmLmJzc19jb25mLnVzZV9jdHNfcHJvdCkKKwkJc2luZm8tPmJzc19wYXJhbS5mbGFncyB8PSBCU1NfUEFSQU1fRkxBR1NfQ1RTX1BST1Q7CisJaWYgKHNkYXRhLT52aWYuYnNzX2NvbmYudXNlX3Nob3J0X3ByZWFtYmxlKQorCQlzaW5mby0+YnNzX3BhcmFtLmZsYWdzIHw9IEJTU19QQVJBTV9GTEFHU19TSE9SVF9QUkVBTUJMRTsKKwlpZiAoc2RhdGEtPnZpZi5ic3NfY29uZi51c2Vfc2hvcnRfc2xvdCkKKwkJc2luZm8tPmJzc19wYXJhbS5mbGFncyB8PSBCU1NfUEFSQU1fRkxBR1NfU0hPUlRfU0xPVF9USU1FOworCXNpbmZvLT5ic3NfcGFyYW0uZHRpbV9wZXJpb2QgPSBzZGF0YS0+bG9jYWwtPmh3LmNvbmYucHNfZHRpbV9wZXJpb2Q7CisJc2luZm8tPmJzc19wYXJhbS5iZWFjb25faW50ZXJ2YWwgPSBzZGF0YS0+dmlmLmJzc19jb25mLmJlYWNvbl9pbnQ7CiB9CiAKIApAQCAtNDUyLDcgKzQ2Myw3IEBACiAJaW50IHNpemU7CiAJaW50IGVyciA9IC1FSU5WQUw7CiAKLQlvbGQgPSBzZGF0YS0+dS5hcC5iZWFjb247CisJb2xkID0gcnRubF9kZXJlZmVyZW5jZShzZGF0YS0+dS5hcC5iZWFjb24pOwogCiAJLyogaGVhZCBtdXN0IG5vdCBiZSB6ZXJvLWxlbmd0aCAqLwogCWlmIChwYXJhbXMtPmhlYWQgJiYgIXBhcmFtcy0+aGVhZF9sZW4pCkBAIC01NDcsOCArNTU4LDcgQEAKIAogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAotCW9sZCA9IHNkYXRhLT51LmFwLmJlYWNvbjsKLQorCW9sZCA9IHJ0bmxfZGVyZWZlcmVuY2Uoc2RhdGEtPnUuYXAuYmVhY29uKTsKIAlpZiAob2xkKQogCQlyZXR1cm4gLUVBTFJFQURZOwogCkBAIC01NjMsOCArNTczLDcgQEAKIAogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAotCW9sZCA9IHNkYXRhLT51LmFwLmJlYWNvbjsKLQorCW9sZCA9IHJ0bmxfZGVyZWZlcmVuY2Uoc2RhdGEtPnUuYXAuYmVhY29uKTsKIAlpZiAoIW9sZCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKQEAgLTU3OCw4ICs1ODcsNyBAQAogCiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCi0Jb2xkID0gc2RhdGEtPnUuYXAuYmVhY29uOwotCisJb2xkID0gcnRubF9kZXJlZmVyZW5jZShzZGF0YS0+dS5hcC5iZWFjb24pOwogCWlmICghb2xkKQogCQlyZXR1cm4gLUVOT0VOVDsKIApAQCAtNjc1LDYgKzY4MywxMiBAQAogCQlpZiAoc2V0ICYgQklUKE5MODAyMTFfU1RBX0ZMQUdfTUZQKSkKIAkJCXN0YS0+ZmxhZ3MgfD0gV0xBTl9TVEFfTUZQOwogCX0KKworCWlmIChtYXNrICYgQklUKE5MODAyMTFfU1RBX0ZMQUdfQVVUSEVOVElDQVRFRCkpIHsKKwkJc3RhLT5mbGFncyAmPSB+V0xBTl9TVEFfQVVUSDsKKwkJaWYgKHNldCAmIEJJVChOTDgwMjExX1NUQV9GTEFHX0FVVEhFTlRJQ0FURUQpKQorCQkJc3RhLT5mbGFncyB8PSBXTEFOX1NUQV9BVVRIOworCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGEtPmZsYWdsb2NrLCBmbGFncyk7CiAKIAkvKgpAQCAtNzEyLDE1ICs3MjYsMjkgQEAKIAkJCQkJCSAgcGFyYW1zLT5odF9jYXBhLAogCQkJCQkJICAmc3RhLT5zdGEuaHRfY2FwKTsKIAotCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpICYmIHBhcmFtcy0+cGxpbmtfYWN0aW9uKSB7Ci0JCXN3aXRjaCAocGFyYW1zLT5wbGlua19hY3Rpb24pIHsKLQkJY2FzZSBQTElOS19BQ1RJT05fT1BFTjoKLQkJCW1lc2hfcGxpbmtfb3BlbihzdGEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUExJTktfQUNUSU9OX0JMT0NLOgotCQkJbWVzaF9wbGlua19ibG9jayhzdGEpOwotCQkJYnJlYWs7Ci0JCX0KKwlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICisJCWlmIChzZGF0YS0+dS5tZXNoLnNlY3VyaXR5ICYgSUVFRTgwMjExX01FU0hfU0VDX1NFQ1VSRUQpCisJCQlzd2l0Y2ggKHBhcmFtcy0+cGxpbmtfc3RhdGUpIHsKKwkJCWNhc2UgTkw4MDIxMV9QTElOS19MSVNURU46CisJCQljYXNlIE5MODAyMTFfUExJTktfRVNUQUI6CisJCQljYXNlIE5MODAyMTFfUExJTktfQkxPQ0tFRDoKKwkJCQlzdGEtPnBsaW5rX3N0YXRlID0gcGFyYW1zLT5wbGlua19zdGF0ZTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJLyogIG5vdGhpbmcgICovCisJCQkJYnJlYWs7CisJCQl9CisJCWVsc2UKKwkJCXN3aXRjaCAocGFyYW1zLT5wbGlua19hY3Rpb24pIHsKKwkJCWNhc2UgUExJTktfQUNUSU9OX09QRU46CisJCQkJbWVzaF9wbGlua19vcGVuKHN0YSk7CisJCQkJYnJlYWs7CisJCQljYXNlIFBMSU5LX0FDVElPTl9CTE9DSzoKKwkJCQltZXNoX3BsaW5rX2Jsb2NrKHN0YSk7CisJCQkJYnJlYWs7CisJCQl9CisjZW5kaWYKIAl9CiB9CiAKQEAgLTkyMSw4ICs5NDksMTAgQEAKIHN0YXRpYyB2b2lkIG1wYXRoX3NldF9waW5mbyhzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCwgdTggKm5leHRfaG9wLAogCQkJICAgIHN0cnVjdCBtcGF0aF9pbmZvICpwaW5mbykKIHsKLQlpZiAobXBhdGgtPm5leHRfaG9wKQotCQltZW1jcHkobmV4dF9ob3AsIG1wYXRoLT5uZXh0X2hvcC0+c3RhLmFkZHIsIEVUSF9BTEVOKTsKKwlzdHJ1Y3Qgc3RhX2luZm8gKm5leHRfaG9wX3N0YSA9IHJjdV9kZXJlZmVyZW5jZShtcGF0aC0+bmV4dF9ob3ApOworCisJaWYgKG5leHRfaG9wX3N0YSkKKwkJbWVtY3B5KG5leHRfaG9wLCBuZXh0X2hvcF9zdGEtPnN0YS5hZGRyLCBFVEhfQUxFTik7CiAJZWxzZQogCQltZW1zZXQobmV4dF9ob3AsIDAsIEVUSF9BTEVOKTsKIApAQCAtMTAyMywyNiArMTA1MywzMCBAQAogCXU4ICpuZXdfaWU7CiAJY29uc3QgdTggKm9sZF9pZTsKIAotCS8qIGZpcnN0IGFsbG9jYXRlIHRoZSBuZXcgdmVuZG9yIGluZm9ybWF0aW9uIGVsZW1lbnQgKi8KKwkvKiBhbGxvY2F0ZSBpbmZvcm1hdGlvbiBlbGVtZW50cyAqLwogCW5ld19pZSA9IE5VTEw7Ci0Jb2xkX2llID0gaWZtc2gtPnZlbmRvcl9pZTsKKwlvbGRfaWUgPSBpZm1zaC0+aWU7CiAKLQlpZm1zaC0+dmVuZG9yX2llX2xlbiA9IHNldHVwLT52ZW5kb3JfaWVfbGVuOwotCWlmIChzZXR1cC0+dmVuZG9yX2llX2xlbikgewotCQluZXdfaWUgPSBrbWVtZHVwKHNldHVwLT52ZW5kb3JfaWUsIHNldHVwLT52ZW5kb3JfaWVfbGVuLAorCWlmIChzZXR1cC0+aWVfbGVuKSB7CisJCW5ld19pZSA9IGttZW1kdXAoc2V0dXAtPmllLCBzZXR1cC0+aWVfbGVuLAogCQkJCUdGUF9LRVJORUwpOwogCQlpZiAoIW5ld19pZSkKIAkJCXJldHVybiAtRU5PTUVNOwogCX0KKwlpZm1zaC0+aWVfbGVuID0gc2V0dXAtPmllX2xlbjsKKwlpZm1zaC0+aWUgPSBuZXdfaWU7CisJa2ZyZWUob2xkX2llKTsKIAogCS8qIG5vdyBjb3B5IHRoZSByZXN0IG9mIHRoZSBzZXR1cCBwYXJhbWV0ZXJzICovCiAJaWZtc2gtPm1lc2hfaWRfbGVuID0gc2V0dXAtPm1lc2hfaWRfbGVuOwogCW1lbWNweShpZm1zaC0+bWVzaF9pZCwgc2V0dXAtPm1lc2hfaWQsIGlmbXNoLT5tZXNoX2lkX2xlbik7CiAJaWZtc2gtPm1lc2hfcHBfaWQgPSBzZXR1cC0+cGF0aF9zZWxfcHJvdG87CiAJaWZtc2gtPm1lc2hfcG1faWQgPSBzZXR1cC0+cGF0aF9tZXRyaWM7Ci0JaWZtc2gtPnZlbmRvcl9pZSA9IG5ld19pZTsKLQotCWtmcmVlKG9sZF9pZSk7CisJaWZtc2gtPnNlY3VyaXR5ID0gSUVFRTgwMjExX01FU0hfU0VDX05PTkU7CisJaWYgKHNldHVwLT5pc19hdXRoZW50aWNhdGVkKQorCQlpZm1zaC0+c2VjdXJpdHkgfD0gSUVFRTgwMjExX01FU0hfU0VDX0FVVEhFRDsKKwlpZiAoc2V0dXAtPmlzX3NlY3VyZSkKKwkJaWZtc2gtPnNlY3VyaXR5IHw9IElFRUU4MDIxMV9NRVNIX1NFQ19TRUNVUkVEOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjc1LDkgKzEzMDksMTAgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBpZWVlODAyMTFfc3VzcGVuZChzdHJ1Y3Qgd2lwaHkgKndpcGh5KQorc3RhdGljIGludCBpZWVlODAyMTFfc3VzcGVuZChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJICAgICBzdHJ1Y3QgY2ZnODAyMTFfd293bGFuICp3b3dsYW4pCiB7Ci0JcmV0dXJuIF9faWVlZTgwMjExX3N1c3BlbmQod2lwaHlfcHJpdih3aXBoeSkpOworCXJldHVybiBfX2llZWU4MDIxMV9zdXNwZW5kKHdpcGh5X3ByaXYod2lwaHkpLCB3b3dsYW4pOwogfQogCiBzdGF0aWMgaW50IGllZWU4MDIxMV9yZXN1bWUoc3RydWN0IHdpcGh5ICp3aXBoeSkKQEAgLTEzMjAsNiArMTM1NSwzMCBAQAogCXJldHVybiBpZWVlODAyMTFfcmVxdWVzdF9zY2FuKHNkYXRhLCByZXEpOwogfQogCitzdGF0aWMgaW50CitpZWVlODAyMTFfc2NoZWRfc2Nhbl9zdGFydChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBjZmc4MDIxMV9zY2hlZF9zY2FuX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisKKwlpZiAoIXNkYXRhLT5sb2NhbC0+b3BzLT5zY2hlZF9zY2FuX3N0YXJ0KQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlyZXR1cm4gaWVlZTgwMjExX3JlcXVlc3Rfc2NoZWRfc2Nhbl9zdGFydChzZGF0YSwgcmVxKTsKK30KKworc3RhdGljIGludAoraWVlZTgwMjExX3NjaGVkX3NjYW5fc3RvcChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKworCWlmICghc2RhdGEtPmxvY2FsLT5vcHMtPnNjaGVkX3NjYW5fc3RvcCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmV0dXJuIGllZWU4MDIxMV9yZXF1ZXN0X3NjaGVkX3NjYW5fc3RvcChzZGF0YSk7Cit9CisKIHN0YXRpYyBpbnQgaWVlZTgwMjExX2F1dGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgc3RydWN0IGNmZzgwMjExX2F1dGhfcmVxdWVzdCAqcmVxKQogewpAQCAtMTUwNCw2ICsxNTYzLDggQEAKIAllbnVtIGllZWU4MDIxMV9zbXBzX21vZGUgb2xkX3JlcTsKIAlpbnQgZXJyOwogCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmc2RhdGEtPnUubWdkLm10eCk7CisKIAlvbGRfcmVxID0gc2RhdGEtPnUubWdkLnJlcV9zbXBzOwogCXNkYXRhLT51Lm1nZC5yZXFfc21wcyA9IHNtcHNfbW9kZTsKIApAQCAtMTYwOSwxNiArMTY3MCwxMyBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCWludCBpOworCWludCBpLCByZXQ7CiAKLQkvKgotCSAqIFRoaXMgX2NvdWxkXyBiZSBzdXBwb3J0ZWQgYnkgcHJvdmlkaW5nIGEgaG9vayBmb3IKLQkgKiBkcml2ZXJzIGZvciB0aGlzIGZ1bmN0aW9uLCBidXQgYXQgdGhpcyBwb2ludCBpdAotCSAqIGRvZXNuJ3Qgc2VlbSB3b3J0aCBib3RoZXJpbmcuCi0JICovCi0JaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19IQVNfUkFURV9DT05UUk9MKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX0hBU19SQVRFX0NPTlRST0wpIHsKKwkJcmV0ID0gZHJ2X3NldF9iaXRyYXRlX21hc2sobG9jYWwsIHNkYXRhLCBtYXNrKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGkrKykKIAkJc2RhdGEtPnJjX3JhdGVpZHhfbWFza1tpXSA9IG1hc2stPmNvbnRyb2xbaV0ubGVnYWN5OwpAQCAtMjA2Miw2ICsyMTIwLDggQEAKIAkuc3VzcGVuZCA9IGllZWU4MDIxMV9zdXNwZW5kLAogCS5yZXN1bWUgPSBpZWVlODAyMTFfcmVzdW1lLAogCS5zY2FuID0gaWVlZTgwMjExX3NjYW4sCisJLnNjaGVkX3NjYW5fc3RhcnQgPSBpZWVlODAyMTFfc2NoZWRfc2Nhbl9zdGFydCwKKwkuc2NoZWRfc2Nhbl9zdG9wID0gaWVlZTgwMjExX3NjaGVkX3NjYW5fc3RvcCwKIAkuYXV0aCA9IGllZWU4MDIxMV9hdXRoLAogCS5hc3NvYyA9IGllZWU4MDIxMV9hc3NvYywKIAkuZGVhdXRoID0gaWVlZTgwMjExX2RlYXV0aCwKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMgYi9uZXQvbWFjODAyMTEvZGVidWdmcy5jCmluZGV4IDUxZjBkNzguLjE4NmUwMmYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnMuYwpAQCAtMzcsNyArMzcsNyBAQAogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXMpOwogfQogCi0jZGVmaW5lIERFQlVHRlNfUkVBRE9OTFlfRklMRShuYW1lLCBmbXQsIHZhbHVlLi4uKQkJCVwKKyNkZWZpbmUgREVCVUdGU19SRUFET05MWV9GSUxFX0ZOKG5hbWUsIGZtdCwgdmFsdWUuLi4pCQkJXAogc3RhdGljIHNzaXplX3QgbmFtZSMjIF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwJXAogCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQkJCVwKIHsJCQkJCQkJCQlcCkBAIC00NSwxNCArNDUsMTkgQEAKIAkJCQkJCQkJCVwKIAlyZXR1cm4gbWFjODAyMTFfZm9ybWF0X2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgCQlcCiAJCQkJICAgICAgZm10ICJcbiIsICMjdmFsdWUpOwkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKK30KKworI2RlZmluZSBERUJVR0ZTX1JFQURPTkxZX0ZJTEVfT1BTKG5hbWUpCQkJXAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmFtZSMjIF9vcHMgPSB7CQkJXAogCS5yZWFkID0gbmFtZSMjIF9yZWFkLAkJCQkJCVwKIAkub3BlbiA9IG1hYzgwMjExX29wZW5fZmlsZV9nZW5lcmljLAkJCQlcCiAJLmxsc2VlayA9IGdlbmVyaWNfZmlsZV9sbHNlZWssCQkJCQlcCiB9OwogCisjZGVmaW5lIERFQlVHRlNfUkVBRE9OTFlfRklMRShuYW1lLCBmbXQsIHZhbHVlLi4uKQkJXAorCURFQlVHRlNfUkVBRE9OTFlfRklMRV9GTihuYW1lLCBmbXQsIHZhbHVlKQkJXAorCURFQlVHRlNfUkVBRE9OTFlfRklMRV9PUFMobmFtZSkKKwogI2RlZmluZSBERUJVR0ZTX0FERChuYW1lKQkJCQkJCVwKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCNuYW1lLCAwNDAwLCBwaHlkLCBsb2NhbCwgJm5hbWUjIyBfb3BzKTsKIApAQCAtMTMwLDcgKzEzNSw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKIAlydG5sX2xvY2soKTsKLQlfX2llZWU4MDIxMV9zdXNwZW5kKCZsb2NhbC0+aHcpOworCV9faWVlZTgwMjExX3N1c3BlbmQoJmxvY2FsLT5odywgTlVMTCk7CiAJX19pZWVlODAyMTFfcmVzdW1lKCZsb2NhbC0+aHcpOwogCXJ0bmxfdW5sb2NrKCk7CiAKQEAgLTI5MSwxMSArMjk2LDcwIEBACiAJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBzdHJsZW4oYnVmKSk7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNoYW5uZWxfdHlwZV9vcHMgPSB7Ci0JLnJlYWQgPSBjaGFubmVsX3R5cGVfcmVhZCwKLQkub3BlbiA9IG1hYzgwMjExX29wZW5fZmlsZV9nZW5lcmljLAotCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKLX07CitzdGF0aWMgc3NpemVfdCBod2ZsYWdzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgbXhsbiA9IDUwMDsKKwlzc2l6ZV90IHJ2OworCWNoYXIgKmJ1ZiA9IGt6YWxsb2MobXhsbiwgR0ZQX0tFUk5FTCk7CisJaW50IHNmID0gMDsgLyogaG93IG1hbnkgd3JpdHRlbiBzbyBmYXIgKi8KKworCXNmICs9IHNucHJpbnRmKGJ1ZiwgbXhsbiAtIHNmLCAiMHgleFxuIiwgbG9jYWwtPmh3LmZsYWdzKTsKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX0hBU19SQVRFX0NPTlRST0wpCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsICJIQVNfUkFURV9DT05UUk9MXG4iKTsKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUykKKwkJc2YgKz0gc25wcmludGYoYnVmICsgc2YsIG14bG4gLSBzZiwgIlJYX0lOQ0xVREVTX0ZDU1xuIik7CisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19IT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkcpCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsCisJCQkgICAgICAgIkhPU1RfQkNBU1RfUFNfQlVGRkVSSU5HXG4iKTsKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXXzJHSFpfU0hPUlRfU0xPVF9JTkNBUEFCTEUpCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsCisJCQkgICAgICAgIjJHSFpfU0hPUlRfU0xPVF9JTkNBUEFCTEVcbiIpOworCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfMkdIWl9TSE9SVF9QUkVBTUJMRV9JTkNBUEFCTEUpCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsCisJCQkgICAgICAgIjJHSFpfU0hPUlRfUFJFQU1CTEVfSU5DQVBBQkxFXG4iKTsKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUMpCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsICJTSUdOQUxfVU5TUEVDXG4iKTsKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0pCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsICJTSUdOQUxfREJNXG4iKTsKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX05FRURfRFRJTV9QRVJJT0QpCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsICJORUVEX0RUSU1fUEVSSU9EXG4iKTsKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NQRUNUUlVNX01HTVQpCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsICJTUEVDVFJVTV9NR01UXG4iKTsKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OKQorCQlzZiArPSBzbnByaW50ZihidWYgKyBzZiwgbXhsbiAtIHNmLCAiQU1QRFVfQUdHUkVHQVRJT05cbiIpOworCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMpCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsICJTVVBQT1JUU19QU1xuIik7CisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSykKKwkJc2YgKz0gc25wcmludGYoYnVmICsgc2YsIG14bG4gLSBzZiwgIlBTX05VTExGVU5DX1NUQUNLXG4iKTsKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NVUFBPUlRTX0RZTkFNSUNfUFMpCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsICJTVVBQT1JUU19EWU5BTUlDX1BTXG4iKTsKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX01GUF9DQVBBQkxFKQorCQlzZiArPSBzbnByaW50ZihidWYgKyBzZiwgbXhsbiAtIHNmLCAiTUZQX0NBUEFCTEVcbiIpOworCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfQkVBQ09OX0ZJTFRFUikKKwkJc2YgKz0gc25wcmludGYoYnVmICsgc2YsIG14bG4gLSBzZiwgIkJFQUNPTl9GSUxURVJcbiIpOworCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfU1RBVElDX1NNUFMpCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsICJTVVBQT1JUU19TVEFUSUNfU01QU1xuIik7CisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1NNUFMpCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsICJTVVBQT1JUU19EWU5BTUlDX1NNUFNcbiIpOworCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfVUFQU0QpCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsICJTVVBQT1JUU19VQVBTRFxuIik7CisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19SRVBPUlRTX1RYX0FDS19TVEFUVVMpCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsICJSRVBPUlRTX1RYX0FDS19TVEFUVVNcbiIpOworCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfQ09OTkVDVElPTl9NT05JVE9SKQorCQlzZiArPSBzbnByaW50ZihidWYgKyBzZiwgbXhsbiAtIHNmLCAiQ09OTkVDVElPTl9NT05JVE9SXG4iKTsKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NVUFBPUlRTX0NRTV9SU1NJKQorCQlzZiArPSBzbnByaW50ZihidWYgKyBzZiwgbXhsbiAtIHNmLCAiU1VQUE9SVFNfQ1FNX1JTU0lcbiIpOworCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfUEVSX1NUQV9HVEspCisJCXNmICs9IHNucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsICJTVVBQT1JUU19QRVJfU1RBX0dUS1xuIik7CisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19BUF9MSU5LX1BTKQorCQlzZiArPSBzbnByaW50ZihidWYgKyBzZiwgbXhsbiAtIHNmLCAiQVBfTElOS19QU1xuIik7CisKKwlydiA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBzdHJsZW4oYnVmKSk7CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcnY7Cit9CiAKIHN0YXRpYyBzc2l6ZV90IHF1ZXVlc19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKQEAgLTMxNSwxMSArMzc5LDkgQEAKIAlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHJlcyk7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHF1ZXVlc19vcHMgPSB7Ci0JLnJlYWQgPSBxdWV1ZXNfcmVhZCwKLQkub3BlbiA9IG1hYzgwMjExX29wZW5fZmlsZV9nZW5lcmljLAotCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKLX07CitERUJVR0ZTX1JFQURPTkxZX0ZJTEVfT1BTKGh3ZmxhZ3MpOworREVCVUdGU19SRUFET05MWV9GSUxFX09QUyhjaGFubmVsX3R5cGUpOworREVCVUdGU19SRUFET05MWV9GSUxFX09QUyhxdWV1ZXMpOwogCiAvKiBzdGF0aXN0aWNzIHN0dWZmICovCiAKQEAgLTM5NSw2ICs0NTcsNyBAQAogCURFQlVHRlNfQUREKHVhcHNkX3F1ZXVlcyk7CiAJREVCVUdGU19BREQodWFwc2RfbWF4X3NwX2xlbik7CiAJREVCVUdGU19BREQoY2hhbm5lbF90eXBlKTsKKwlERUJVR0ZTX0FERChod2ZsYWdzKTsKIAlERUJVR0ZTX0FERCh1c2VyX3Bvd2VyKTsKIAlERUJVR0ZTX0FERChwb3dlcik7CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmMKaW5kZXggZjdlZjM0Ny4uMzNjNThiOCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmMKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmMKQEAgLTI0MSwxNiArMjQxLDEyIEBACiAJaWYgKCFrZXktPmRlYnVnZnMuZGlyKQogCQlyZXR1cm47CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0Jc3RhID0gcmN1X2RlcmVmZXJlbmNlKGtleS0+c3RhKTsKLQlpZiAoc3RhKQorCXN0YSA9IGtleS0+c3RhOworCWlmIChzdGEpIHsKIAkJc3ByaW50ZihidWYsICIuLi8uLi9zdGF0aW9ucy8lcE0iLCBzdGEtPnN0YS5hZGRyKTsKLQlyY3VfcmVhZF91bmxvY2soKTsKLQotCS8qIHVzaW5nIHN0YSBhcyBhIGJvb2xlYW4gaXMgZmluZSBvdXRzaWRlIFJDVSBsb2NrICovCi0JaWYgKHN0YSkKIAkJa2V5LT5kZWJ1Z2ZzLnN0YWxpbmsgPQogCQkJZGVidWdmc19jcmVhdGVfc3ltbGluaygic3RhdGlvbiIsIGtleS0+ZGVidWdmcy5kaXIsIGJ1Zik7CisJfQogCiAJREVCVUdGU19BREQoa2V5bGVuKTsKIAlERUJVR0ZTX0FERChmbGFncyk7CkBAIC0yODYsNyArMjgyLDggQEAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZzZGF0YS0+bG9jYWwtPmtleV9tdHgpOwogCiAJaWYgKHNkYXRhLT5kZWZhdWx0X3VuaWNhc3Rfa2V5KSB7Ci0JCWtleSA9IHNkYXRhLT5kZWZhdWx0X3VuaWNhc3Rfa2V5OworCQlrZXkgPSBrZXlfbXR4X2RlcmVmZXJlbmNlKHNkYXRhLT5sb2NhbCwKKwkJCQkJICBzZGF0YS0+ZGVmYXVsdF91bmljYXN0X2tleSk7CiAJCXNwcmludGYoYnVmLCAiLi4va2V5cy8lZCIsIGtleS0+ZGVidWdmcy5jbnQpOwogCQlzZGF0YS0+ZGVidWdmcy5kZWZhdWx0X3VuaWNhc3Rfa2V5ID0KIAkJCWRlYnVnZnNfY3JlYXRlX3N5bWxpbmsoImRlZmF1bHRfdW5pY2FzdF9rZXkiLApAQCAtMjk3LDcgKzI5NCw4IEBACiAJfQogCiAJaWYgKHNkYXRhLT5kZWZhdWx0X211bHRpY2FzdF9rZXkpIHsKLQkJa2V5ID0gc2RhdGEtPmRlZmF1bHRfbXVsdGljYXN0X2tleTsKKwkJa2V5ID0ga2V5X210eF9kZXJlZmVyZW5jZShzZGF0YS0+bG9jYWwsCisJCQkJCSAgc2RhdGEtPmRlZmF1bHRfbXVsdGljYXN0X2tleSk7CiAJCXNwcmludGYoYnVmLCAiLi4va2V5cy8lZCIsIGtleS0+ZGVidWdmcy5jbnQpOwogCQlzZGF0YS0+ZGVidWdmcy5kZWZhdWx0X211bHRpY2FzdF9rZXkgPQogCQkJZGVidWdmc19jcmVhdGVfc3ltbGluaygiZGVmYXVsdF9tdWx0aWNhc3Rfa2V5IiwKQEAgLTMxNiw5ICszMTQsOCBAQAogCWlmICghc2RhdGEtPmRlYnVnZnMuZGlyKQogCQlyZXR1cm47CiAKLQkvKiB0aGlzIGlzIHJ1bm5pbmcgdW5kZXIgdGhlIGtleSBsb2NrICovCi0KLQlrZXkgPSBzZGF0YS0+ZGVmYXVsdF9tZ210X2tleTsKKwlrZXkgPSBrZXlfbXR4X2RlcmVmZXJlbmNlKHNkYXRhLT5sb2NhbCwKKwkJCQkgIHNkYXRhLT5kZWZhdWx0X21nbXRfa2V5KTsKIAlpZiAoa2V5KSB7CiAJCXNwcmludGYoYnVmLCAiLi4va2V5cy8lZCIsIGtleS0+ZGVidWdmcy5jbnQpOwogCQlzZGF0YS0+ZGVidWdmcy5kZWZhdWx0X21nbXRfa2V5ID0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMKaW5kZXggZGFjYWNlNi4uOWVhN2MwZCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMKQEAgLTE3Nyw5ICsxNzcsOSBAQAogCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworCW11dGV4X2xvY2soJnNkYXRhLT51Lm1nZC5tdHgpOwogCWVyciA9IF9faWVlZTgwMjExX3JlcXVlc3Rfc21wcyhzZGF0YSwgc21wc19tb2RlKTsKLQltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKKwltdXRleF91bmxvY2soJnNkYXRhLT51Lm1nZC5tdHgpOwogCiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMKaW5kZXggYzA0YTEzOS4uYTAxZDIxMyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMKQEAgLTkyLDYgKzkyLDMxIEBACiB9CiBTVEFfT1BTKGluYWN0aXZlX21zKTsKIAorCitzdGF0aWMgc3NpemVfdCBzdGFfY29ubmVjdGVkX3RpbWVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCisJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB0aW1lc3BlYyB1cHRpbWU7CisJc3RydWN0IHRtIHJlc3VsdDsKKwlsb25nIGNvbm5lY3RlZF90aW1lX3NlY3M7CisJY2hhciBidWZbMTAwXTsKKwlpbnQgcmVzOworCWRvX3Bvc2l4X2Nsb2NrX21vbm90b25pY19nZXR0aW1lKCZ1cHRpbWUpOworCWNvbm5lY3RlZF90aW1lX3NlY3MgPSB1cHRpbWUudHZfc2VjIC0gc3RhLT5sYXN0X2Nvbm5lY3RlZDsKKwl0aW1lX3RvX3RtKGNvbm5lY3RlZF90aW1lX3NlY3MsIDAsICZyZXN1bHQpOworCXJlc3VsdC50bV95ZWFyIC09IDcwOworCXJlc3VsdC50bV9tZGF5IC09IDE7CisJcmVzID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksCisJCSJ5ZWFycyAgLSAlbGRcbm1vbnRocyAtICVkXG5kYXlzICAgLSAlZFxuY2xvY2sgIC0gJWQ6JWQ6JWRcblxuIiwKKwkJCXJlc3VsdC50bV95ZWFyLCByZXN1bHQudG1fbW9uLCByZXN1bHQudG1fbWRheSwKKwkJCXJlc3VsdC50bV9ob3VyLCByZXN1bHQudG1fbWluLCByZXN1bHQudG1fc2VjKTsKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmVzKTsKK30KK1NUQV9PUFMoY29ubmVjdGVkX3RpbWUpOworCisKKwogc3RhdGljIHNzaXplX3Qgc3RhX2xhc3Rfc2VxX2N0cmxfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCiAJCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CkBAIC0zMjQsNiArMzQ5LDcgQEAKIAlERUJVR0ZTX0FERChmbGFncyk7CiAJREVCVUdGU19BREQobnVtX3BzX2J1Zl9mcmFtZXMpOwogCURFQlVHRlNfQUREKGluYWN0aXZlX21zKTsKKwlERUJVR0ZTX0FERChjb25uZWN0ZWRfdGltZSk7CiAJREVCVUdGU19BREQobGFzdF9zZXFfY3RybCk7CiAJREVCVUdGU19BREQoYWdnX3N0YXR1cyk7CiAJREVCVUdGU19BREQoZGV2KTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmggYi9uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oCmluZGV4IDljMGQ2MmIuLmVlYmY3YTYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmgKKysrIGIvbmV0L21hYzgwMjExL2RyaXZlci1vcHMuaApAQCAtNDEsNiArNDEsMzMgQEAKIAlsb2NhbC0+c3RhcnRlZCA9IGZhbHNlOwogfQogCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW5saW5lIGludCBkcnZfc3VzcGVuZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCSAgICAgIHN0cnVjdCBjZmc4MDIxMV93b3dsYW4gKndvd2xhbikKK3sKKwlpbnQgcmV0OworCisJbWlnaHRfc2xlZXAoKTsKKworCXRyYWNlX2Rydl9zdXNwZW5kKGxvY2FsKTsKKwlyZXQgPSBsb2NhbC0+b3BzLT5zdXNwZW5kKCZsb2NhbC0+aHcsIHdvd2xhbik7CisJdHJhY2VfZHJ2X3JldHVybl9pbnQobG9jYWwsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZHJ2X3Jlc3VtZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKK3sKKwlpbnQgcmV0OworCisJbWlnaHRfc2xlZXAoKTsKKworCXRyYWNlX2Rydl9yZXN1bWUobG9jYWwpOworCXJldCA9IGxvY2FsLT5vcHMtPnJlc3VtZSgmbG9jYWwtPmh3KTsKKwl0cmFjZV9kcnZfcmV0dXJuX2ludChsb2NhbCwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKIHN0YXRpYyBpbmxpbmUgaW50IGRydl9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewpAQCAtMTg1LDEyICsyMTIsMzkgQEAKIAogCW1pZ2h0X3NsZWVwKCk7CiAKLQl0cmFjZV9kcnZfaHdfc2Nhbihsb2NhbCwgc2RhdGEsIHJlcSk7CisJdHJhY2VfZHJ2X2h3X3NjYW4obG9jYWwsIHNkYXRhKTsKIAlyZXQgPSBsb2NhbC0+b3BzLT5od19zY2FuKCZsb2NhbC0+aHcsICZzZGF0YS0+dmlmLCByZXEpOwogCXRyYWNlX2Rydl9yZXR1cm5faW50KGxvY2FsLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50CitkcnZfc2NoZWRfc2Nhbl9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJICAgICBzdHJ1Y3QgY2ZnODAyMTFfc2NoZWRfc2Nhbl9yZXF1ZXN0ICpyZXEsCisJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zY2hlZF9zY2FuX2llcyAqaWVzKQoreworCWludCByZXQ7CisKKwltaWdodF9zbGVlcCgpOworCisJdHJhY2VfZHJ2X3NjaGVkX3NjYW5fc3RhcnQobG9jYWwsIHNkYXRhKTsKKwlyZXQgPSBsb2NhbC0+b3BzLT5zY2hlZF9zY2FuX3N0YXJ0KCZsb2NhbC0+aHcsICZzZGF0YS0+dmlmLAorCQkJCQkgICAgICByZXEsIGllcyk7CisJdHJhY2VfZHJ2X3JldHVybl9pbnQobG9jYWwsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRydl9zY2hlZF9zY2FuX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCW1pZ2h0X3NsZWVwKCk7CisKKwl0cmFjZV9kcnZfc2NoZWRfc2Nhbl9zdG9wKGxvY2FsLCBzZGF0YSk7CisJbG9jYWwtPm9wcy0+c2NoZWRfc2Nhbl9zdG9wKCZsb2NhbC0+aHcsICZzZGF0YS0+dmlmKTsKKwl0cmFjZV9kcnZfcmV0dXJuX3ZvaWQobG9jYWwpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgZHJ2X3N3X3NjYW5fc3RhcnQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CiAJbWlnaHRfc2xlZXAoKTsKQEAgLTU1Miw0ICs2MDYsMzUgQEAKIAl0cmFjZV9kcnZfcmV0dXJuX3ZvaWQobG9jYWwpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgZHJ2X3R4X2ZyYW1lc19wZW5kaW5nKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQoreworCWJvb2wgcmV0ID0gZmFsc2U7CisKKwltaWdodF9zbGVlcCgpOworCisJdHJhY2VfZHJ2X3R4X2ZyYW1lc19wZW5kaW5nKGxvY2FsKTsKKwlpZiAobG9jYWwtPm9wcy0+dHhfZnJhbWVzX3BlbmRpbmcpCisJCXJldCA9IGxvY2FsLT5vcHMtPnR4X2ZyYW1lc19wZW5kaW5nKCZsb2NhbC0+aHcpOworCXRyYWNlX2Rydl9yZXR1cm5fYm9vbChsb2NhbCwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRydl9zZXRfYml0cmF0ZV9tYXNrKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGNmZzgwMjExX2JpdHJhdGVfbWFzayAqbWFzaykKK3sKKwlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7CisKKwltaWdodF9zbGVlcCgpOworCisJdHJhY2VfZHJ2X3NldF9iaXRyYXRlX21hc2sobG9jYWwsIHNkYXRhLCBtYXNrKTsKKwlpZiAobG9jYWwtPm9wcy0+c2V0X2JpdHJhdGVfbWFzaykKKwkJcmV0ID0gbG9jYWwtPm9wcy0+c2V0X2JpdHJhdGVfbWFzaygmbG9jYWwtPmh3LAorCQkJCQkJICAgJnNkYXRhLT52aWYsIG1hc2spOworCXRyYWNlX2Rydl9yZXR1cm5faW50KGxvY2FsLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKwogI2VuZGlmIC8qIF9fTUFDODAyMTFfRFJJVkVSX09QUyAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RyaXZlci10cmFjZS5oIGIvbmV0L21hYzgwMjExL2RyaXZlci10cmFjZS5oCmluZGV4IDQ1YWFiODAuLmVkOWVkY2IgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kcml2ZXItdHJhY2UuaAorKysgYi9uZXQvbWFjODAyMTEvZHJpdmVyLXRyYWNlLmgKQEAgLTU1LDYgKzU1LDcwIEBACiAJVFBfcHJpbnRrKExPQ0FMX1BSX0ZNVCwgTE9DQUxfUFJfQVJHKQogKTsKIAorREVDTEFSRV9FVkVOVF9DTEFTUyhsb2NhbF9zZGF0YV9hZGRyX2V2dCwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKSwKKwlUUF9BUkdTKGxvY2FsLCBzZGF0YSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCQlWSUZfRU5UUlkKKwkJX19hcnJheShjaGFyLCBhZGRyLCA2KQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCQlWSUZfQVNTSUdOOworCQltZW1jcHkoX19lbnRyeS0+YWRkciwgc2RhdGEtPnZpZi5hZGRyLCA2KTsKKwkpLAorCisJVFBfcHJpbnRrKAorCQlMT0NBTF9QUl9GTVQgIFZJRl9QUl9GTVQgIiBhZGRyOiVwTSIsCisJCUxPQ0FMX1BSX0FSRywgVklGX1BSX0FSRywgX19lbnRyeS0+YWRkcgorCSkKKyk7CisKK0RFQ0xBUkVfRVZFTlRfQ0xBU1MobG9jYWxfdTMyX2V2dCwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTMyIHZhbHVlKSwKKwlUUF9BUkdTKGxvY2FsLCB2YWx1ZSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCQlfX2ZpZWxkKHUzMiwgdmFsdWUpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJCV9fZW50cnktPnZhbHVlID0gdmFsdWU7CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1UICIgdmFsdWU6JWQiLAorCQlMT0NBTF9QUl9BUkcsIF9fZW50cnktPnZhbHVlCisJKQorKTsKKworREVDTEFSRV9FVkVOVF9DTEFTUyhsb2NhbF9zZGF0YV9ldnQsCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCSBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSksCisJVFBfQVJHUyhsb2NhbCwgc2RhdGEpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJTE9DQUxfRU5UUlkKKwkJVklGX0VOVFJZCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJCVZJRl9BU1NJR047CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1UIFZJRl9QUl9GTVQsCisJCUxPQ0FMX1BSX0FSRywgVklGX1BSX0FSRworCSkKKyk7CisKIERFRklORV9FVkVOVChsb2NhbF9vbmx5X2V2dCwgZHJ2X3JldHVybl92b2lkLAogCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKSwKIAlUUF9BUkdTKGxvY2FsKQpAQCAtNzQsNiArMTM4LDIxIEBACiAJVFBfcHJpbnRrKExPQ0FMX1BSX0ZNVCAiIC0gJWQiLCBMT0NBTF9QUl9BUkcsIF9fZW50cnktPnJldCkKICk7CiAKK1RSQUNFX0VWRU5UKGRydl9yZXR1cm5fYm9vbCwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgYm9vbCByZXQpLAorCVRQX0FSR1MobG9jYWwsIHJldCksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJTE9DQUxfRU5UUlkKKwkJX19maWVsZChib29sLCByZXQpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCQlfX2VudHJ5LT5yZXQgPSByZXQ7CisJKSwKKwlUUF9wcmludGsoTE9DQUxfUFJfRk1UICIgLSAlcyIsIExPQ0FMX1BSX0FSRywgKF9fZW50cnktPnJldCkgPworCQkgICJ0cnVlIiA6ICJmYWxzZSIpCispOworCiBUUkFDRV9FVkVOVChkcnZfcmV0dXJuX3U2NCwKIAlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTY0IHJldCksCiAJVFBfQVJHUyhsb2NhbCwgcmV0KSwKQEAgLTkzLDMzICsxNzIsMjUgQEAKIAlUUF9BUkdTKGxvY2FsKQogKTsKIAorREVGSU5FX0VWRU5UKGxvY2FsX29ubHlfZXZ0LCBkcnZfc3VzcGVuZCwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCksCisJVFBfQVJHUyhsb2NhbCkKKyk7CisKK0RFRklORV9FVkVOVChsb2NhbF9vbmx5X2V2dCwgZHJ2X3Jlc3VtZSwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCksCisJVFBfQVJHUyhsb2NhbCkKKyk7CisKIERFRklORV9FVkVOVChsb2NhbF9vbmx5X2V2dCwgZHJ2X3N0b3AsCiAJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpLAogCVRQX0FSR1MobG9jYWwpCiApOwogCi1UUkFDRV9FVkVOVChkcnZfYWRkX2ludGVyZmFjZSwKK0RFRklORV9FVkVOVChsb2NhbF9zZGF0YV9hZGRyX2V2dCwgZHJ2X2FkZF9pbnRlcmZhY2UsCiAJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCSBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSksCi0KLQlUUF9BUkdTKGxvY2FsLCBzZGF0YSksCi0KLQlUUF9TVFJVQ1RfX2VudHJ5KAotCQlMT0NBTF9FTlRSWQotCQlWSUZfRU5UUlkKLQkJX19hcnJheShjaGFyLCBhZGRyLCA2KQotCSksCi0KLQlUUF9mYXN0X2Fzc2lnbigKLQkJTE9DQUxfQVNTSUdOOwotCQlWSUZfQVNTSUdOOwotCQltZW1jcHkoX19lbnRyeS0+YWRkciwgc2RhdGEtPnZpZi5hZGRyLCA2KTsKLQkpLAotCi0JVFBfcHJpbnRrKAotCQlMT0NBTF9QUl9GTVQgIFZJRl9QUl9GTVQgIiBhZGRyOiVwTSIsCi0JCUxPQ0FMX1BSX0FSRywgVklGX1BSX0FSRywgX19lbnRyeS0+YWRkcgotCSkKKwlUUF9BUkdTKGxvY2FsLCBzZGF0YSkKICk7CiAKIFRSQUNFX0VWRU5UKGRydl9jaGFuZ2VfaW50ZXJmYWNlLApAQCAtMTUwLDI3ICsyMjEsMTAgQEAKIAkpCiApOwogCi1UUkFDRV9FVkVOVChkcnZfcmVtb3ZlX2ludGVyZmFjZSwKLQlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpLAotCi0JVFBfQVJHUyhsb2NhbCwgc2RhdGEpLAotCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJTE9DQUxfRU5UUlkKLQkJVklGX0VOVFJZCi0JCV9fYXJyYXkoY2hhciwgYWRkciwgNikKLQkpLAotCi0JVFBfZmFzdF9hc3NpZ24oCi0JCUxPQ0FMX0FTU0lHTjsKLQkJVklGX0FTU0lHTjsKLQkJbWVtY3B5KF9fZW50cnktPmFkZHIsIHNkYXRhLT52aWYuYWRkciwgNik7Ci0JKSwKLQotCVRQX3ByaW50aygKLQkJTE9DQUxfUFJfRk1UICBWSUZfUFJfRk1UICIgYWRkcjolcE0iLAotCQlMT0NBTF9QUl9BUkcsIFZJRl9QUl9BUkcsIF9fZW50cnktPmFkZHIKLQkpCitERUZJTkVfRVZFTlQobG9jYWxfc2RhdGFfYWRkcl9ldnQsIGRydl9yZW1vdmVfaW50ZXJmYWNlLAorCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpLAorCVRQX0FSR1MobG9jYWwsIHNkYXRhKQogKTsKIAogVFJBQ0VfRVZFTlQoZHJ2X2NvbmZpZywKQEAgLTQwMCwyNyArNDU0LDIyIEBACiAJKQogKTsKIAotVFJBQ0VfRVZFTlQoZHJ2X2h3X3NjYW4sCitERUZJTkVfRVZFTlQobG9jYWxfc2RhdGFfZXZ0LCBkcnZfaHdfc2NhbiwKIAlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKSwKKwkJIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKSwKKwlUUF9BUkdTKGxvY2FsLCBzZGF0YSkKKyk7CiAKLQlUUF9BUkdTKGxvY2FsLCBzZGF0YSwgcmVxKSwKK0RFRklORV9FVkVOVChsb2NhbF9zZGF0YV9ldnQsIGRydl9zY2hlZF9zY2FuX3N0YXJ0LAorCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpLAorCVRQX0FSR1MobG9jYWwsIHNkYXRhKQorKTsKIAotCVRQX1NUUlVDVF9fZW50cnkoCi0JCUxPQ0FMX0VOVFJZCi0JCVZJRl9FTlRSWQotCSksCi0KLQlUUF9mYXN0X2Fzc2lnbigKLQkJTE9DQUxfQVNTSUdOOwotCQlWSUZfQVNTSUdOOwotCSksCi0KLQlUUF9wcmludGsoCi0JCUxPQ0FMX1BSX0ZNVCBWSUZfUFJfRk1ULAotCQlMT0NBTF9QUl9BUkcsVklGX1BSX0FSRwotCSkKK0RFRklORV9FVkVOVChsb2NhbF9zZGF0YV9ldnQsIGRydl9zY2hlZF9zY2FuX3N0b3AsCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCSBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSksCisJVFBfQVJHUyhsb2NhbCwgc2RhdGEpCiApOwogCiBERUZJTkVfRVZFTlQobG9jYWxfb25seV9ldnQsIGRydl9zd19zY2FuX3N0YXJ0LApAQCAtNDg5LDQ2ICs1MzgsMTQgQEAKIAkpCiApOwogCi1UUkFDRV9FVkVOVChkcnZfc2V0X2ZyYWdfdGhyZXNob2xkLAorREVGSU5FX0VWRU5UKGxvY2FsX3UzMl9ldnQsIGRydl9zZXRfZnJhZ190aHJlc2hvbGQsCiAJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHUzMiB2YWx1ZSksCi0KLQlUUF9BUkdTKGxvY2FsLCB2YWx1ZSksCi0KLQlUUF9TVFJVQ1RfX2VudHJ5KAotCQlMT0NBTF9FTlRSWQotCQlfX2ZpZWxkKHUzMiwgdmFsdWUpCi0JKSwKLQotCVRQX2Zhc3RfYXNzaWduKAotCQlMT0NBTF9BU1NJR047Ci0JCV9fZW50cnktPnZhbHVlID0gdmFsdWU7Ci0JKSwKLQotCVRQX3ByaW50aygKLQkJTE9DQUxfUFJfRk1UICIgdmFsdWU6JWQiLAotCQlMT0NBTF9QUl9BUkcsIF9fZW50cnktPnZhbHVlCi0JKQorCVRQX0FSR1MobG9jYWwsIHZhbHVlKQogKTsKIAotVFJBQ0VfRVZFTlQoZHJ2X3NldF9ydHNfdGhyZXNob2xkLAorREVGSU5FX0VWRU5UKGxvY2FsX3UzMl9ldnQsIGRydl9zZXRfcnRzX3RocmVzaG9sZCwKIAlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTMyIHZhbHVlKSwKLQotCVRQX0FSR1MobG9jYWwsIHZhbHVlKSwKLQotCVRQX1NUUlVDVF9fZW50cnkoCi0JCUxPQ0FMX0VOVFJZCi0JCV9fZmllbGQodTMyLCB2YWx1ZSkKLQkpLAotCi0JVFBfZmFzdF9hc3NpZ24oCi0JCUxPQ0FMX0FTU0lHTjsKLQkJX19lbnRyeS0+dmFsdWUgPSB2YWx1ZTsKLQkpLAotCi0JVFBfcHJpbnRrKAotCQlMT0NBTF9QUl9GTVQgIiB2YWx1ZTolZCIsCi0JCUxPQ0FMX1BSX0FSRywgX19lbnRyeS0+dmFsdWUKLQkpCisJVFBfQVJHUyhsb2NhbCwgdmFsdWUpCiApOwogCiBUUkFDRV9FVkVOVChkcnZfc2V0X2NvdmVyYWdlX2NsYXNzLApAQCAtOTY0LDExICs5ODEsNDMgQEAKIAkpCiApOwogCitERUZJTkVfRVZFTlQobG9jYWxfb25seV9ldnQsIGRydl90eF9mcmFtZXNfcGVuZGluZywKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCksCisJVFBfQVJHUyhsb2NhbCkKKyk7CisKIERFRklORV9FVkVOVChsb2NhbF9vbmx5X2V2dCwgZHJ2X29mZmNoYW5uZWxfdHhfY2FuY2VsX3dhaXQsCiAJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpLAogCVRQX0FSR1MobG9jYWwpCiApOwogCitUUkFDRV9FVkVOVChkcnZfc2V0X2JpdHJhdGVfbWFzaywKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkgY29uc3Qgc3RydWN0IGNmZzgwMjExX2JpdHJhdGVfbWFzayAqbWFzayksCisKKwlUUF9BUkdTKGxvY2FsLCBzZGF0YSwgbWFzayksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCQlWSUZfRU5UUlkKKwkJX19maWVsZCh1MzIsIGxlZ2FjeV8yZykKKwkJX19maWVsZCh1MzIsIGxlZ2FjeV81ZykKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCUxPQ0FMX0FTU0lHTjsKKwkJVklGX0FTU0lHTjsKKwkJX19lbnRyeS0+bGVnYWN5XzJnID0gbWFzay0+Y29udHJvbFtJRUVFODAyMTFfQkFORF8yR0haXS5sZWdhY3k7CisJCV9fZW50cnktPmxlZ2FjeV81ZyA9IG1hc2stPmNvbnRyb2xbSUVFRTgwMjExX0JBTkRfNUdIWl0ubGVnYWN5OworCSksCisKKwlUUF9wcmludGsoCisJCUxPQ0FMX1BSX0ZNVCAgVklGX1BSX0ZNVCAiIDJHIE1hc2s6MHgleCA1RyBNYXNrOjB4JXgiLAorCQlMT0NBTF9QUl9BUkcsIFZJRl9QUl9BUkcsIF9fZW50cnktPmxlZ2FjeV8yZywgX19lbnRyeS0+bGVnYWN5XzVnCisJKQorKTsKKwogLyoKICAqIFRyYWNpbmcgZm9yIEFQSSBjYWxscyB0aGF0IGRyaXZlcnMgY2FsbC4KICAqLwpAQCAtMTE0Nyw2ICsxMTk2LDQyIEBACiAJKQogKTsKIAorVFJBQ0VfRVZFTlQoYXBpX3NjaGVkX3NjYW5fcmVzdWx0cywKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCksCisKKwlUUF9BUkdTKGxvY2FsKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1ULCBMT0NBTF9QUl9BUkcKKwkpCispOworCitUUkFDRV9FVkVOVChhcGlfc2NoZWRfc2Nhbl9zdG9wcGVkLAorCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKSwKKworCVRQX0FSR1MobG9jYWwpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJTE9DQUxfRU5UUlkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCUxPQ0FMX0FTU0lHTjsKKwkpLAorCisJVFBfcHJpbnRrKAorCQlMT0NBTF9QUl9GTVQsIExPQ0FMX1BSX0FSRworCSkKKyk7CisKIFRSQUNFX0VWRU5UKGFwaV9zdGFfYmxvY2tfYXdha2UsCiAJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCBib29sIGJsb2NrKSwKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9odC5jIGIvbmV0L21hYzgwMjExL2h0LmMKaW5kZXggYjllNGI5Yi4uNTkxYWRkMiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2h0LmMKKysrIGIvbmV0L21hYzgwMjExL2h0LmMKQEAgLTE0MCwxNCArMTQwLDI5IEBACiAJCQkJc3RhLCB0aWQsIFdMQU5fQkFDS19SRUNJUElFTlQsCiAJCQkJV0xBTl9SRUFTT05fUVNUQV9USU1FT1VULCB0cnVlKTsKIAotCQl0aWRfdHggPSBzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF07Ci0JCWlmICghdGlkX3R4KQotCQkJY29udGludWU7CisJCXRpZF90eCA9IHN0YS0+YW1wZHVfbWxtZS50aWRfc3RhcnRfdHhbdGlkXTsKKwkJaWYgKHRpZF90eCkgeworCQkJLyoKKwkJCSAqIEFzc2lnbiBpdCBvdmVyIHRvIHRoZSBub3JtYWwgdGlkX3R4IGFycmF5CisJCQkgKiB3aGVyZSBpdCAiZ29lcyBsaXZlIi4KKwkJCSAqLworCQkJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwogCi0JCWlmICh0ZXN0X2JpdChIVF9BR0dfU1RBVEVfV0FOVF9TVEFSVCwgJnRpZF90eC0+c3RhdGUpKQorCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGFydF90eFt0aWRdID0gTlVMTDsKKwkJCS8qIGNvdWxkIHRoZXJlIGJlIGEgcmFjZT8gKi8KKwkJCWlmIChzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0pCisJCQkJa2ZyZWUodGlkX3R4KTsKKwkJCWVsc2UKKwkJCQlpZWVlODAyMTFfYXNzaWduX3RpZF90eChzdGEsIHRpZCwgdGlkX3R4KTsKKwkJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworCiAJCQlpZWVlODAyMTFfdHhfYmFfc2Vzc2lvbl9oYW5kbGVfc3RhcnQoc3RhLCB0aWQpOwotCQllbHNlIGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSFRfQUdHX1NUQVRFX1dBTlRfU1RPUCwKLQkJCQkJICAgICZ0aWRfdHgtPnN0YXRlKSkKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdGlkX3R4ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZF90aWRfdHgoc3RhLCB0aWQpOworCQlpZiAodGlkX3R4ICYmIHRlc3RfYW5kX2NsZWFyX2JpdChIVF9BR0dfU1RBVEVfV0FOVF9TVE9QLAorCQkJCQkJICZ0aWRfdHgtPnN0YXRlKSkKIAkJCV9fX2llZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RhLCB0aWQsCiAJCQkJCQkJV0xBTl9CQUNLX0lOSVRJQVRPUiwKIAkJCQkJCQl0cnVlKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pYnNzLmMgYi9uZXQvbWFjODAyMTEvaWJzcy5jCmluZGV4IDNlODFhZjEuLjQyMWVhYTYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pYnNzLmMKKysrIGIvbmV0L21hYzgwMjExL2lic3MuYwpAQCAtNDAsNyArNDAsNyBAQAogCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJCXNpemVfdCBsZW4pCiB7Ci0JdTE2IGF1dGhfYWxnLCBhdXRoX3RyYW5zYWN0aW9uLCBzdGF0dXNfY29kZTsKKwl1MTYgYXV0aF9hbGcsIGF1dGhfdHJhbnNhY3Rpb247CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZzZGF0YS0+dS5pYnNzLm10eCk7CiAKQEAgLTQ5LDcgKzQ5LDYgQEAKIAogCWF1dGhfYWxnID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLmF1dGhfYWxnKTsKIAlhdXRoX3RyYW5zYWN0aW9uID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLmF1dGhfdHJhbnNhY3Rpb24pOwotCXN0YXR1c19jb2RlID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLnN0YXR1c19jb2RlKTsKIAogCS8qCiAJICogSUVFRSA4MDIuMTEgc3RhbmRhcmQgZG9lcyBub3QgcmVxdWlyZSBhdXRoZW50aWNhdGlvbiBpbiBJQlNTCkBAIC01MjcsOCArNTI2LDYgQEAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfY3JlYXRlX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAl1OCBic3NpZFtFVEhfQUxFTl07CiAJdTE2IGNhcGFiaWxpdHk7CiAJaW50IGk7CkBAIC01NTEsOCArNTQ4LDYgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IENyZWF0aW5nIG5ldyBJQlNTIG5ldHdvcmssIEJTU0lEICVwTVxuIiwKIAkgICAgICAgc2RhdGEtPm5hbWUsIGJzc2lkKTsKIAotCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tpZmlic3MtPmNoYW5uZWwtPmJhbmRdOwotCiAJY2FwYWJpbGl0eSA9IFdMQU5fQ0FQQUJJTElUWV9JQlNTOwogCiAJaWYgKGlmaWJzcy0+cHJpdmFjeSkKQEAgLTY2MSwxOSArNjU2LDIyIEBACiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJCXN0cnVjdCBza19idWZmICpyZXEpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihyZXEpOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopcmVxLT5kYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJaW50IHR4X2xhc3RfYmVhY29uLCBsZW4gPSByZXEtPmxlbjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqcmVzcDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcHJlc3A7CiAJdTggKnBvcywgKmVuZDsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmlmaWJzcy0+bXR4KTsKIAorCXByZXNwID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChpZmlic3MtPnByZXNwLAorCQkJCQkgIGxvY2tkZXBfaXNfaGVsZCgmaWZpYnNzLT5tdHgpKTsKKwogCWlmIChpZmlic3MtPnN0YXRlICE9IElFRUU4MDIxMV9JQlNTX01MTUVfSk9JTkVEIHx8Ci0JICAgIGxlbiA8IDI0ICsgMiB8fCAhaWZpYnNzLT5wcmVzcCkKKwkgICAgbGVuIDwgMjQgKyAyIHx8ICFwcmVzcCkKIAkJcmV0dXJuOwogCiAJdHhfbGFzdF9iZWFjb24gPSBkcnZfdHhfbGFzdF9iZWFjb24obG9jYWwpOwpAQCAtNjg1LDcgKzY4Myw3IEBACiAJICAgICAgIG1nbXQtPmJzc2lkLCB0eF9sYXN0X2JlYWNvbik7CiAjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KIAotCWlmICghdHhfbGFzdF9iZWFjb24gJiYgIShyeF9zdGF0dXMtPnJ4X2ZsYWdzICYgSUVFRTgwMjExX1JYX1JBX01BVENIKSkKKwlpZiAoIXR4X2xhc3RfYmVhY29uICYmIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKG1nbXQtPmRhKSkKIAkJcmV0dXJuOwogCiAJaWYgKG1lbWNtcChtZ210LT5ic3NpZCwgaWZpYnNzLT5ic3NpZCwgRVRIX0FMRU4pICE9IDAgJiYKQEAgLTcxMSw3ICs3MDksNyBAQAogCX0KIAogCS8qIFJlcGx5IHdpdGggUHJvYmVSZXNwICovCi0Jc2tiID0gc2tiX2NvcHkoaWZpYnNzLT5wcmVzcCwgR0ZQX0tFUk5FTCk7CisJc2tiID0gc2tiX2NvcHkocHJlc3AsIEdGUF9LRVJORUwpOwogCWlmICghc2tiKQogCQlyZXR1cm47CiAKQEAgLTk5MSw3ICs5ODksOCBAQAogCiAJLyogcmVtb3ZlIGJlYWNvbiAqLwogCWtmcmVlKHNkYXRhLT51Lmlic3MuaWUpOwotCXNrYiA9IHNkYXRhLT51Lmlic3MucHJlc3A7CisJc2tiID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzZGF0YS0+dS5pYnNzLnByZXNwLAorCQkJCQlsb2NrZGVwX2lzX2hlbGQoJnNkYXRhLT51Lmlic3MubXR4KSk7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKHNkYXRhLT51Lmlic3MucHJlc3AsIE5VTEwpOwogCXNkYXRhLT52aWYuYnNzX2NvbmYuaWJzc19qb2luZWQgPSBmYWxzZTsKIAlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQgfApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAppbmRleCBjMTgzOTZjLi4yMDI1YWY1IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAorKysgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaApAQCAtMjE0LDcgKzIxNCw3IEBACiB9OwogCiBzdHJ1Y3QgaWVlZTgwMjExX2lmX2FwIHsKLQlzdHJ1Y3QgYmVhY29uX2RhdGEgKmJlYWNvbjsKKwlzdHJ1Y3QgYmVhY29uX2RhdGEgX19yY3UgKmJlYWNvbjsKIAogCXN0cnVjdCBsaXN0X2hlYWQgdmxhbnM7CiAKQEAgLTIzNyw3ICsyMzcsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAogCS8qIHVzZWQgZm9yIGFsbCB0eCBpZiB0aGUgVkxBTiBpcyBjb25maWd1cmVkIHRvIDQtYWRkciBtb2RlICovCi0Jc3RydWN0IHN0YV9pbmZvICpzdGE7CisJc3RydWN0IHN0YV9pbmZvIF9fcmN1ICpzdGE7CiB9OwogCiBzdHJ1Y3QgbWVzaF9zdGF0cyB7CkBAIC00NDIsNyArNDQyLDggQEAKIAogCXVuc2lnbmVkIGxvbmcgaWJzc19qb2luX3JlcTsKIAkvKiBwcm9iZSByZXNwb25zZS9iZWFjb24gZm9yIElCU1MgKi8KLQlzdHJ1Y3Qgc2tfYnVmZiAqcHJlc3AsICpza2I7CisJc3RydWN0IHNrX2J1ZmYgX19yY3UgKnByZXNwOworCXN0cnVjdCBza19idWZmICpza2I7CiAKIAllbnVtIHsKIAkJSUVFRTgwMjExX0lCU1NfTUxNRV9TRUFSQ0gsCkBAIC00ODgsOCArNDg5LDEzIEBACiAJc3RydWN0IG1lc2hfY29uZmlnIG1zaGNmZzsKIAl1MzIgbWVzaF9zZXFudW07CiAJYm9vbCBhY2NlcHRpbmdfcGxpbmtzOwotCWNvbnN0IHU4ICp2ZW5kb3JfaWU7Ci0JdTggdmVuZG9yX2llX2xlbjsKKwljb25zdCB1OCAqaWU7CisJdTggaWVfbGVuOworCWVudW0geworCQlJRUVFODAyMTFfTUVTSF9TRUNfTk9ORSA9IDB4MCwKKwkJSUVFRTgwMjExX01FU0hfU0VDX0FVVEhFRCA9IDB4MSwKKwkJSUVFRTgwMjExX01FU0hfU0VDX1NFQ1VSRUQgPSAweDIsCisJfSBzZWN1cml0eTsKIH07CiAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSApAQCAtNTYyLDkgKzU2OCwxMCBAQAogCXN0cnVjdCBpZWVlODAyMTFfZnJhZ21lbnRfZW50cnkJZnJhZ21lbnRzW0lFRUU4MDIxMV9GUkFHTUVOVF9NQVhdOwogCXVuc2lnbmVkIGludCBmcmFnbWVudF9uZXh0OwogCi0Jc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleXNbTlVNX0RFRkFVTFRfS0VZUyArIE5VTV9ERUZBVUxUX01HTVRfS0VZU107Ci0Jc3RydWN0IGllZWU4MDIxMV9rZXkgKmRlZmF1bHRfdW5pY2FzdF9rZXksICpkZWZhdWx0X211bHRpY2FzdF9rZXk7Ci0Jc3RydWN0IGllZWU4MDIxMV9rZXkgKmRlZmF1bHRfbWdtdF9rZXk7CisJc3RydWN0IGllZWU4MDIxMV9rZXkgX19yY3UgKmtleXNbTlVNX0RFRkFVTFRfS0VZUyArIE5VTV9ERUZBVUxUX01HTVRfS0VZU107CisJc3RydWN0IGllZWU4MDIxMV9rZXkgX19yY3UgKmRlZmF1bHRfdW5pY2FzdF9rZXk7CisJc3RydWN0IGllZWU4MDIxMV9rZXkgX19yY3UgKmRlZmF1bHRfbXVsdGljYXN0X2tleTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2tleSBfX3JjdSAqZGVmYXVsdF9tZ210X2tleTsKIAogCXUxNiBzZXF1ZW5jZV9udW1iZXI7CiAJX19iZTE2IGNvbnRyb2xfcG9ydF9wcm90b2NvbDsKQEAgLTc2Myw4ICs3NzAsMTQgQEAKIAkvKiBkZXZpY2UgaXMgc3RhcnRlZCAqLwogCWJvb2wgc3RhcnRlZDsKIAorCS8qIHdvd2xhbiBpcyBlbmFibGVkIC0tIGRvbid0IHJlY29uZmlnIG9uIHJlc3VtZSAqLworCWJvb2wgd293bGFuOworCiAJaW50IHR4X2hlYWRyb29tOyAvKiByZXF1aXJlZCBoZWFkcm9vbSBmb3IgaGFyZHdhcmUvcmFkaW90YXAgKi8KIAorCS8qIGNvdW50IGZvciBrZXlzIG5lZWRpbmcgdGFpbHJvb20gc3BhY2UgYWxsb2NhdGlvbiAqLworCWludCBjcnlwdG9fdHhfdGFpbHJvb21fbmVlZGVkX2NudDsKKwogCS8qIFRhc2tsZXQgYW5kIHNrYiBxdWV1ZSB0byBwcm9jZXNzIGNhbGxzIGZyb20gSVJRIG1vZGUuIEFsbCBmcmFtZXMKIAkgKiBhZGRlZCB0byBza2JfcXVldWUgd2lsbCBiZSBwcm9jZXNzZWQsIGJ1dCBmcmFtZXMgaW4KIAkgKiBza2JfcXVldWVfdW5yZWxpYWJsZSBtYXkgYmUgZHJvcHBlZCBpZiB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZXNlCkBAIC03OTQsNyArODA3LDcgQEAKIAlzcGlubG9ja190IHN0YV9sb2NrOwogCXVuc2lnbmVkIGxvbmcgbnVtX3N0YTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHN0YV9saXN0LCBzdGFfcGVuZGluZ19saXN0OwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhX2hhc2hbU1RBX0hBU0hfU0laRV07CisJc3RydWN0IHN0YV9pbmZvIF9fcmN1ICpzdGFfaGFzaFtTVEFfSEFTSF9TSVpFXTsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBzdGFfY2xlYW51cDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3RhX2ZpbmlzaF93b3JrOwogCWludCBzdGFfZ2VuZXJhdGlvbjsKQEAgLTgwOSw4ICs4MjIsOCBAQAogCiAJc3RydWN0IHJhdGVfY29udHJvbF9yZWYgKnJhdGVfY3RybDsKIAotCXN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp3ZXBfdHhfdGZtOwotCXN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp3ZXBfcnhfdGZtOworCXN0cnVjdCBjcnlwdG9fY2lwaGVyICp3ZXBfdHhfdGZtOworCXN0cnVjdCBjcnlwdG9fY2lwaGVyICp3ZXBfcnhfdGZtOwogCXUzMiB3ZXBfaXY7CiAKIAkvKiBzZWUgaWZhY2UuYyAqLwpAQCAtODM2LDYgKzg0OSwxMCBAQAogCWludCBzY2FuX2NoYW5uZWxfaWR4OwogCWludCBzY2FuX2llc19sZW47CiAKKwlib29sIHNjaGVkX3NjYW5uaW5nOworCXN0cnVjdCBpZWVlODAyMTFfc2NoZWRfc2Nhbl9pZXMgc2NoZWRfc2Nhbl9pZXM7CisJc3RydWN0IHdvcmtfc3RydWN0IHNjaGVkX3NjYW5fc3RvcHBlZF93b3JrOworCiAJdW5zaWduZWQgbG9uZyBsZWF2ZV9vcGVyX2NoYW5uZWxfdGltZTsKIAllbnVtIG1hYzgwMjExX3NjYW5fc3RhdGUgbmV4dF9zY2FuX3N0YXRlOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgc2Nhbl93b3JrOwpAQCAtMTE0Myw2ICsxMTYwLDEyIEBACiB2b2lkIGllZWU4MDIxMV9yeF9ic3NfcHV0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzKTsKIAorLyogc2NoZWR1bGVkIHNjYW4gaGFuZGxpbmcgKi8KK2ludCBpZWVlODAyMTFfcmVxdWVzdF9zY2hlZF9zY2FuX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfc2NoZWRfc2Nhbl9yZXF1ZXN0ICpyZXEpOworaW50IGllZWU4MDIxMV9yZXF1ZXN0X3NjaGVkX3NjYW5fc3RvcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7Cit2b2lkIGllZWU4MDIxMV9zY2hlZF9zY2FuX3N0b3BwZWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCiAvKiBvZmYtY2hhbm5lbCBoZWxwZXJzICovCiBib29sIGllZWU4MDIxMV9jZmdfb25fb3Blcl9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKIHZvaWQgaWVlZTgwMjExX29mZmNoYW5uZWxfZW5hYmxlX2FsbF9wcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKQEAgLTEyNDYsNyArMTI2OSw4IEBACiB2b2lkIGllZWU4MDIxMV9zdG9wX2RldmljZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7CiAKICNpZmRlZiBDT05GSUdfUE0KLWludCBfX2llZWU4MDIxMV9zdXNwZW5kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK2ludCBfX2llZWU4MDIxMV9zdXNwZW5kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJc3RydWN0IGNmZzgwMjExX3dvd2xhbiAqd293bGFuKTsKIAogc3RhdGljIGlubGluZSBpbnQgX19pZWVlODAyMTFfcmVzdW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewpAQCAtMTI1OSw3ICsxMjgzLDggQEAKIAlyZXR1cm4gaWVlZTgwMjExX3JlY29uZmlnKGh3X3RvX2xvY2FsKGh3KSk7CiB9CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgX19pZWVlODAyMTFfc3VzcGVuZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3N0YXRpYyBpbmxpbmUgaW50IF9faWVlZTgwMjExX3N1c3BlbmQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgc3RydWN0IGNmZzgwMjExX3dvd2xhbiAqd293bGFuKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lmYWNlLmMgYi9uZXQvbWFjODAyMTEvaWZhY2UuYwppbmRleCA0MDU0Mzk5Li43ZGZiZTcxIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWZhY2UuYworKysgYi9uZXQvbWFjODAyMTEvaWZhY2UuYwpAQCAtNDQ5LDcgKzQ0OSw4IEBACiAJLyogQVBzIG5lZWQgc3BlY2lhbCB0cmVhdG1lbnQgKi8KIAlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnZsYW4sICp0bXBzZGF0YTsKLQkJc3RydWN0IGJlYWNvbl9kYXRhICpvbGRfYmVhY29uID0gc2RhdGEtPnUuYXAuYmVhY29uOworCQlzdHJ1Y3QgYmVhY29uX2RhdGEgKm9sZF9iZWFjb24gPQorCQkJcnRubF9kZXJlZmVyZW5jZShzZGF0YS0+dS5hcC5iZWFjb24pOwogCiAJCS8qIHNkYXRhX3J1bm5pbmcgd2lsbCByZXR1cm4gZmFsc2UsIHNvIHRoaXMgd2lsbCBkaXNhYmxlICovCiAJCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLApAQCAtMTE0NCwxMCArMTE0NSw2IEBACiAJCQkJKyBJRUVFODAyMTFfRU5DUllQVF9IRUFEUk9PTTsKIAluZGV2LT5uZWVkZWRfdGFpbHJvb20gPSBJRUVFODAyMTFfRU5DUllQVF9UQUlMUk9PTTsKIAotCXJldCA9IGRldl9hbGxvY19uYW1lKG5kZXYsIG5kZXYtPm5hbWUpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGZhaWw7Ci0KIAlpZWVlODAyMTFfYXNzaWduX3Blcm1fYWRkcihsb2NhbCwgbmRldiwgdHlwZSk7CiAJbWVtY3B5KG5kZXYtPmRldl9hZGRyLCBuZGV2LT5wZXJtX2FkZHIsIEVUSF9BTEVOKTsKIAlTRVRfTkVUREVWX0RFVihuZGV2LCB3aXBoeV9kZXYobG9jYWwtPmh3LndpcGh5KSk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEva2V5LmMgYi9uZXQvbWFjODAyMTEva2V5LmMKaW5kZXggYWYzYzU2NC4uMzFhZmQ3MTIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9rZXkuYworKysgYi9uZXQvbWFjODAyMTEva2V5LmMKQEAgLTEwMSw2ICsxMDEsMTEgQEAKIAogCWlmICghcmV0KSB7CiAJCWtleS0+ZmxhZ3MgfD0gS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkU7CisKKwkJaWYgKCEoKGtleS0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9NTUlDKSB8fAorCQkgICAgICAoa2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWKSkpCisJCQlrZXktPmxvY2FsLT5jcnlwdG9fdHhfdGFpbHJvb21fbmVlZGVkX2NudC0tOworCiAJCXJldHVybiAwOwogCX0KIApAQCAtMTU2LDYgKzE2MSwxMCBAQAogCQkJICBrZXktPmNvbmYua2V5aWR4LCBzdGEgPyBzdGEtPmFkZHIgOiBiY2FzdF9hZGRyLCByZXQpOwogCiAJa2V5LT5mbGFncyAmPSB+S0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkU7CisKKwlpZiAoISgoa2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUMpIHx8CisJICAgICAgKGtleS0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVikpKQorCQlrZXktPmxvY2FsLT5jcnlwdG9fdHhfdGFpbHJvb21fbmVlZGVkX2NudCsrOwogfQogCiB2b2lkIGllZWU4MDIxMV9rZXlfcmVtb3ZlZChzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXlfY29uZikKQEAgLTE4Niw3ICsxOTUsNyBAQAogCWFzc2VydF9rZXlfbG9jayhzZGF0YS0+bG9jYWwpOwogCiAJaWYgKGlkeCA+PSAwICYmIGlkeCA8IE5VTV9ERUZBVUxUX0tFWVMpCi0JCWtleSA9IHNkYXRhLT5rZXlzW2lkeF07CisJCWtleSA9IGtleV9tdHhfZGVyZWZlcmVuY2Uoc2RhdGEtPmxvY2FsLCBzZGF0YS0+a2V5c1tpZHhdKTsKIAogCWlmICh1bmkpCiAJCXJjdV9hc3NpZ25fcG9pbnRlcihzZGF0YS0+ZGVmYXVsdF91bmljYXN0X2tleSwga2V5KTsKQEAgLTIxMyw3ICsyMjIsNyBAQAogCiAJaWYgKGlkeCA+PSBOVU1fREVGQVVMVF9LRVlTICYmCiAJICAgIGlkeCA8IE5VTV9ERUZBVUxUX0tFWVMgKyBOVU1fREVGQVVMVF9NR01UX0tFWVMpCi0JCWtleSA9IHNkYXRhLT5rZXlzW2lkeF07CisJCWtleSA9IGtleV9tdHhfZGVyZWZlcmVuY2Uoc2RhdGEtPmxvY2FsLCBzZGF0YS0+a2V5c1tpZHhdKTsKIAogCXJjdV9hc3NpZ25fcG9pbnRlcihzZGF0YS0+ZGVmYXVsdF9tZ210X2tleSwga2V5KTsKIApAQCAtMjU3LDkgKzI2NiwxNSBAQAogCQllbHNlCiAJCQlpZHggPSBuZXctPmNvbmYua2V5aWR4OwogCi0JCWRlZnVuaWtleSA9IG9sZCAmJiBzZGF0YS0+ZGVmYXVsdF91bmljYXN0X2tleSA9PSBvbGQ7Ci0JCWRlZm11bHRpa2V5ID0gb2xkICYmIHNkYXRhLT5kZWZhdWx0X211bHRpY2FzdF9rZXkgPT0gb2xkOwotCQlkZWZtZ210a2V5ID0gb2xkICYmIHNkYXRhLT5kZWZhdWx0X21nbXRfa2V5ID09IG9sZDsKKwkJZGVmdW5pa2V5ID0gb2xkICYmCisJCQlvbGQgPT0ga2V5X210eF9kZXJlZmVyZW5jZShzZGF0YS0+bG9jYWwsCisJCQkJCQlzZGF0YS0+ZGVmYXVsdF91bmljYXN0X2tleSk7CisJCWRlZm11bHRpa2V5ID0gb2xkICYmCisJCQlvbGQgPT0ga2V5X210eF9kZXJlZmVyZW5jZShzZGF0YS0+bG9jYWwsCisJCQkJCQlzZGF0YS0+ZGVmYXVsdF9tdWx0aWNhc3Rfa2V5KTsKKwkJZGVmbWdtdGtleSA9IG9sZCAmJgorCQkJb2xkID09IGtleV9tdHhfZGVyZWZlcmVuY2Uoc2RhdGEtPmxvY2FsLAorCQkJCQkJc2RhdGEtPmRlZmF1bHRfbWdtdF9rZXkpOwogCiAJCWlmIChkZWZ1bmlrZXkgJiYgIW5ldykKIAkJCV9faWVlZTgwMjExX3NldF9kZWZhdWx0X2tleShzZGF0YSwgLTEsIHRydWUsIGZhbHNlKTsKQEAgLTM4OCw4ICs0MDMsMTAgQEAKIAkJaWVlZTgwMjExX2Flc19rZXlfZnJlZShrZXktPnUuY2NtcC50Zm0pOwogCWlmIChrZXktPmNvbmYuY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDKQogCQlpZWVlODAyMTFfYWVzX2NtYWNfa2V5X2ZyZWUoa2V5LT51LmFlc19jbWFjLnRmbSk7Ci0JaWYgKGtleS0+bG9jYWwpCisJaWYgKGtleS0+bG9jYWwpIHsKIAkJaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZShrZXkpOworCQlrZXktPmxvY2FsLT5jcnlwdG9fdHhfdGFpbHJvb21fbmVlZGVkX2NudC0tOworCX0KIAogCWtmcmVlKGtleSk7CiB9CkBAIC00NDAsMTcgKzQ1NywxOSBAQAogCW11dGV4X2xvY2soJnNkYXRhLT5sb2NhbC0+a2V5X210eCk7CiAKIAlpZiAoc3RhICYmIHBhaXJ3aXNlKQotCQlvbGRfa2V5ID0gc3RhLT5wdGs7CisJCW9sZF9rZXkgPSBrZXlfbXR4X2RlcmVmZXJlbmNlKHNkYXRhLT5sb2NhbCwgc3RhLT5wdGspOwogCWVsc2UgaWYgKHN0YSkKLQkJb2xkX2tleSA9IHN0YS0+Z3RrW2lkeF07CisJCW9sZF9rZXkgPSBrZXlfbXR4X2RlcmVmZXJlbmNlKHNkYXRhLT5sb2NhbCwgc3RhLT5ndGtbaWR4XSk7CiAJZWxzZQotCQlvbGRfa2V5ID0gc2RhdGEtPmtleXNbaWR4XTsKKwkJb2xkX2tleSA9IGtleV9tdHhfZGVyZWZlcmVuY2Uoc2RhdGEtPmxvY2FsLCBzZGF0YS0+a2V5c1tpZHhdKTsKIAogCV9faWVlZTgwMjExX2tleV9yZXBsYWNlKHNkYXRhLCBzdGEsIHBhaXJ3aXNlLCBvbGRfa2V5LCBrZXkpOwogCV9faWVlZTgwMjExX2tleV9kZXN0cm95KG9sZF9rZXkpOwogCiAJaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZChrZXkpOwogCisJa2V5LT5sb2NhbC0+Y3J5cHRvX3R4X3RhaWxyb29tX25lZWRlZF9jbnQrKzsKKwogCXJldCA9IGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKGtleSk7CiAKIAltdXRleF91bmxvY2soJnNkYXRhLT5sb2NhbC0+a2V5X210eCk7CkBAIC00NTgsOCArNDc3LDExIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgX19pZWVlODAyMTFfa2V5X2ZyZWUoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSkKK3ZvaWQgX19pZWVlODAyMTFfa2V5X2ZyZWUoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSkKIHsKKwlpZiAoIWtleSkKKwkJcmV0dXJuOworCiAJLyoKIAkgKiBSZXBsYWNlIGtleSB3aXRoIG5vdGhpbmduZXNzIGlmIGl0IHdhcyBldmVyIHVzZWQuCiAJICovCkBAIC00NzMsOSArNDk1LDYgQEAKIHZvaWQgaWVlZTgwMjExX2tleV9mcmVlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSkKIHsKLQlpZiAoIWtleSkKLQkJcmV0dXJuOwotCiAJbXV0ZXhfbG9jaygmbG9jYWwtPmtleV9tdHgpOwogCV9faWVlZTgwMjExX2tleV9mcmVlKGtleSk7CiAJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+a2V5X210eCk7CkBAIC00OTIsOCArNTExLDEyIEBACiAKIAltdXRleF9sb2NrKCZzZGF0YS0+bG9jYWwtPmtleV9tdHgpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShrZXksICZzZGF0YS0+a2V5X2xpc3QsIGxpc3QpCisJc2RhdGEtPmxvY2FsLT5jcnlwdG9fdHhfdGFpbHJvb21fbmVlZGVkX2NudCA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGtleSwgJnNkYXRhLT5rZXlfbGlzdCwgbGlzdCkgeworCQlzZGF0YS0+bG9jYWwtPmNyeXB0b190eF90YWlscm9vbV9uZWVkZWRfY250Kys7CiAJCWllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKGtleSk7CisJfQogCiAJbXV0ZXhfdW5sb2NrKCZzZGF0YS0+bG9jYWwtPmtleV9tdHgpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5oIGIvbmV0L21hYzgwMjExL2tleS5oCmluZGV4IDRkZGJlMjcuLmQ4MDFkNTMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9rZXkuaAorKysgYi9uZXQvbWFjODAyMTEva2V5LmgKQEAgLTEzNSw2ICsxMzUsNyBAQAogaW50IF9fbXVzdF9jaGVjayBpZWVlODAyMTFfa2V5X2xpbmsoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwKIAkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKK3ZvaWQgX19pZWVlODAyMTFfa2V5X2ZyZWUoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSk7CiB2b2lkIGllZWU4MDIxMV9rZXlfZnJlZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpOwogdm9pZCBpZWVlODAyMTFfc2V0X2RlZmF1bHRfa2V5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQgaWR4LApAQCAtMTQ1LDQgKzE0Niw3IEBACiB2b2lkIGllZWU4MDIxMV9lbmFibGVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiB2b2lkIGllZWU4MDIxMV9kaXNhYmxlX2tleXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogCisjZGVmaW5lIGtleV9tdHhfZGVyZWZlcmVuY2UobG9jYWwsIHJlZikgXAorCXJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocmVmLCBsb2NrZGVwX2lzX2hlbGQoJigobG9jYWwpLT5rZXlfbXR4KSkpCisKICNlbmRpZiAvKiBJRUVFODAyMTFfS0VZX0ggKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tYWluLmMgYi9uZXQvbWFjODAyMTEvbWFpbi5jCmluZGV4IDU2MmQyOTguLjBkN2IwOGQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tYWluLmMKKysrIGIvbmV0L21hYzgwMjExL21haW4uYwpAQCAtMzMsMTIgKzMzLDYgQEAKICNpbmNsdWRlICJjZmcuaCIKICNpbmNsdWRlICJkZWJ1Z2ZzLmgiCiAKLQotc3RhdGljIGJvb2wgaWVlZTgwMjExX2Rpc2FibGVfNDBtaHpfMjRnaHo7Ci1tb2R1bGVfcGFyYW0oaWVlZTgwMjExX2Rpc2FibGVfNDBtaHpfMjRnaHosIGJvb2wsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhpZWVlODAyMTFfZGlzYWJsZV80MG1oel8yNGdoeiwKLQkJICJEaXNhYmxlIDQwTUh6IHN1cHBvcnQgaW4gdGhlIDIuNEdIeiBiYW5kIik7Ci0KIHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgaWVlZTgwMjExX3J4X3NrYl9xdWV1ZV9jbGFzczsKIAogdm9pZCBpZWVlODAyMTFfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKQEAgLTM2NCw3ICszNTgsOCBAQAogCWZsdXNoX3dvcmtxdWV1ZShsb2NhbC0+d29ya3F1ZXVlKTsKIAogCW11dGV4X2xvY2soJmxvY2FsLT5tdHgpOwotCVdBUk4odGVzdF9iaXQoU0NBTl9IV19TQ0FOTklORywgJmxvY2FsLT5zY2FubmluZyksCisJV0FSTih0ZXN0X2JpdChTQ0FOX0hXX1NDQU5OSU5HLCAmbG9jYWwtPnNjYW5uaW5nKSB8fAorCSAgICAgbG9jYWwtPnNjaGVkX3NjYW5uaW5nLAogCQkiJXMgY2FsbGVkIHdpdGggaGFyZHdhcmUgc2NhbiBpbiBwcm9ncmVzc1xuIiwgX19mdW5jX18pOwogCW11dGV4X3VubG9jaygmbG9jYWwtPm10eCk7CiAKQEAgLTU0NSw3ICs1NDAsOSBAQAogCX0sCiAJW05MODAyMTFfSUZUWVBFX01FU0hfUE9JTlRdID0gewogCQkudHggPSAweGZmZmYsCi0JCS5yeCA9IEJJVChJRUVFODAyMTFfU1RZUEVfQUNUSU9OID4+IDQpLAorCQkucnggPSBCSVQoSUVFRTgwMjExX1NUWVBFX0FDVElPTiA+PiA0KSB8CisJCQlCSVQoSUVFRTgwMjExX1NUWVBFX0FVVEggPj4gNCkgfAorCQkJQklUKElFRUU4MDIxMV9TVFlQRV9ERUFVVEggPj4gNCksCiAJfSwKIH07CiAKQEAgLTU4NCw4ICs1ODEsNyBAQAogCiAJd2lwaHktPmZsYWdzIHw9IFdJUEhZX0ZMQUdfTkVUTlNfT0sgfAogCQkJV0lQSFlfRkxBR180QUREUl9BUCB8Ci0JCQlXSVBIWV9GTEFHXzRBRERSX1NUQVRJT04gfAotCQkJV0lQSFlfRkxBR19TVVBQT1JUU19TRVBBUkFURV9ERUZBVUxUX0tFWVM7CisJCQlXSVBIWV9GTEFHXzRBRERSX1NUQVRJT047CiAKIAlpZiAoIW9wcy0+c2V0X2tleSkKIAkJd2lwaHktPmZsYWdzIHw9IFdJUEhZX0ZMQUdfSUJTU19SU047CkBAIC02NTYsNiArNjUyLDkgQEAKIAlzZXR1cF90aW1lcigmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIsCiAJCSAgICBpZWVlODAyMTFfZHluYW1pY19wc190aW1lciwgKHVuc2lnbmVkIGxvbmcpIGxvY2FsKTsKIAorCUlOSVRfV09SSygmbG9jYWwtPnNjaGVkX3NjYW5fc3RvcHBlZF93b3JrLAorCQkgIGllZWU4MDIxMV9zY2hlZF9zY2FuX3N0b3BwZWRfd29yayk7CisKIAlzdGFfaW5mb19pbml0KGxvY2FsKTsKIAogCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTUFYX1FVRVVFUzsgaSsrKSB7CkBAIC02ODYsNyArNjg1LDcgQEAKIGludCBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7Ci0JaW50IHJlc3VsdDsKKwlpbnQgcmVzdWx0LCBpOwogCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKIAlpbnQgY2hhbm5lbHMsIG1heF9iaXRyYXRlczsKIAlib29sIHN1cHBfaHQ7CkBAIC03MDEsNiArNzAwLDEzIEBACiAJCVdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDCiAJfTsKIAorCWlmICgoaHctPndpcGh5LT53b3dsYW4uZmxhZ3MgfHwgaHctPndpcGh5LT53b3dsYW4ubl9wYXR0ZXJucykKKyNpZmRlZiBDT05GSUdfUE0KKwkgICAgJiYgKCFsb2NhbC0+b3BzLT5zdXNwZW5kIHx8ICFsb2NhbC0+b3BzLT5yZXN1bWUpCisjZW5kaWYKKwkgICAgKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmIChody0+bWF4X3JlcG9ydF9yYXRlcyA9PSAwKQogCQlody0+bWF4X3JlcG9ydF9yYXRlcyA9IGh3LT5tYXhfcmF0ZXM7CiAKQEAgLTcyNiwxOCArNzMyLDYgQEAKIAkJfQogCQljaGFubmVscyArPSBzYmFuZC0+bl9jaGFubmVsczsKIAotCQkvKgotCQkgKiBTaW5jZSBpZWVlODAyMTFfZGlzYWJsZV80MG1oel8yNGdoeiBpcyBnbG9iYWwsIHdlIGNhbgotCQkgKiBtb2RpZnkgdGhlIHNiYW5kJ3MgaHQgZGF0YSBldmVuIGlmIHRoZSBkcml2ZXIgdXNlcyBhCi0JCSAqIGdsb2JhbCBzdHJ1Y3R1cmUgZm9yIHRoYXQuCi0JCSAqLwotCQlpZiAoaWVlZTgwMjExX2Rpc2FibGVfNDBtaHpfMjRnaHogJiYKLQkJICAgIGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWiAmJgotCQkgICAgc2JhbmQtPmh0X2NhcC5odF9zdXBwb3J0ZWQpIHsKLQkJCXNiYW5kLT5odF9jYXAuY2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MDsKLQkJCXNiYW5kLT5odF9jYXAuY2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX1NHSV80MDsKLQkJfQotCiAJCWlmIChtYXhfYml0cmF0ZXMgPCBzYmFuZC0+bl9iaXRyYXRlcykKIAkJCW1heF9iaXRyYXRlcyA9IHNiYW5kLT5uX2JpdHJhdGVzOwogCQlzdXBwX2h0ID0gc3VwcF9odCB8fCBzYmFuZC0+aHRfY2FwLmh0X3N1cHBvcnRlZDsKQEAgLTc0OSwxNyArNzQzLDMwIEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJLyogaWYgbG93LWxldmVsIGRyaXZlciBzdXBwb3J0cyBBUCwgd2UgYWxzbyBzdXBwb3J0IFZMQU4gKi8KLQlpZiAobG9jYWwtPmh3LndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgJiBCSVQoTkw4MDIxMV9JRlRZUEVfQVApKQotCQlsb2NhbC0+aHcud2lwaHktPmludGVyZmFjZV9tb2RlcyB8PSBCSVQoTkw4MDIxMV9JRlRZUEVfQVBfVkxBTik7CisJaWYgKGxvY2FsLT5ody53aXBoeS0+aW50ZXJmYWNlX21vZGVzICYgQklUKE5MODAyMTFfSUZUWVBFX0FQKSkgeworCQlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyB8PSBCSVQoTkw4MDIxMV9JRlRZUEVfQVBfVkxBTik7CisJCWh3LT53aXBoeS0+c29mdHdhcmVfaWZ0eXBlcyB8PSBCSVQoTkw4MDIxMV9JRlRZUEVfQVBfVkxBTik7CisJfQogCiAJLyogbWFjODAyMTEgYWx3YXlzIHN1cHBvcnRzIG1vbml0b3IgKi8KLQlsb2NhbC0+aHcud2lwaHktPmludGVyZmFjZV9tb2RlcyB8PSBCSVQoTkw4MDIxMV9JRlRZUEVfTU9OSVRPUik7CisJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgfD0gQklUKE5MODAyMTFfSUZUWVBFX01PTklUT1IpOworCWh3LT53aXBoeS0+c29mdHdhcmVfaWZ0eXBlcyB8PSBCSVQoTkw4MDIxMV9JRlRZUEVfTU9OSVRPUik7CisKKwkvKiBtYWM4MDIxMSBkb2Vzbid0IHN1cHBvcnQgbW9yZSB0aGFuIDEgY2hhbm5lbCAqLworCWZvciAoaSA9IDA7IGkgPCBody0+d2lwaHktPm5faWZhY2VfY29tYmluYXRpb25zOyBpKyspCisJCWlmIChody0+d2lwaHktPmlmYWNlX2NvbWJpbmF0aW9uc1tpXS5udW1fZGlmZmVyZW50X2NoYW5uZWxzID4gMSkKKwkJCXJldHVybiAtRUlOVkFMOwogCiAjaWZuZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICiAJLyogbWVzaCBkZXBlbmRzIG9uIEtjb25maWcsIGJ1dCBkcml2ZXJzIHNob3VsZCBzZXQgaXQgaWYgdGhleSB3YW50ICovCiAJbG9jYWwtPmh3LndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgJj0gfkJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKTsKICNlbmRpZgogCisJLyogaWYgdGhlIHVuZGVybHlpbmcgZHJpdmVyIHN1cHBvcnRzIG1lc2gsIG1hYzgwMjExIHdpbGwgKGF0IGxlYXN0KQorCSAqIHByb3ZpZGUgcm91dGluZyBvZiBtZXNoIGF1dGhlbnRpY2F0aW9uIGZyYW1lcyB0byB1c2Vyc3BhY2UgKi8KKwlpZiAobG9jYWwtPmh3LndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgJiBCSVQoTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkpCisJCWxvY2FsLT5ody53aXBoeS0+ZmxhZ3MgfD0gV0lQSFlfRkxBR19NRVNIX0FVVEg7CisKIAkvKiBtYWM4MDIxMSBzdXBwb3J0cyBjb250cm9sIHBvcnQgcHJvdG9jb2wgY2hhbmdpbmcgKi8KIAlsb2NhbC0+aHcud2lwaHktPmZsYWdzIHw9IFdJUEhZX0ZMQUdfQ09OVFJPTF9QT1JUX1BST1RPQ09MOwogCkBAIC04MzgsNiArODQ1LDkgQEAKIAlpZiAoIWxvY2FsLT5vcHMtPnJlbWFpbl9vbl9jaGFubmVsKQogCQlsb2NhbC0+aHcud2lwaHktPm1heF9yZW1haW5fb25fY2hhbm5lbF9kdXJhdGlvbiA9IDUwMDA7CiAKKwlpZiAobG9jYWwtPm9wcy0+c2NoZWRfc2Nhbl9zdGFydCkKKwkJbG9jYWwtPmh3LndpcGh5LT5mbGFncyB8PSBXSVBIWV9GTEFHX1NVUFBPUlRTX1NDSEVEX1NDQU47CisKIAlyZXN1bHQgPSB3aXBoeV9yZWdpc3Rlcihsb2NhbC0+aHcud2lwaHkpOwogCWlmIChyZXN1bHQgPCAwKQogCQlnb3RvIGZhaWxfd2lwaHlfcmVnaXN0ZXI7CkBAIC04NjEsOCArODcxLDEwIEBACiAJICogYW5kIHdlIG5lZWQgc29tZSBoZWFkcm9vbSBmb3IgcGFzc2luZyB0aGUgZnJhbWUgdG8gbW9uaXRvcgogCSAqIGludGVyZmFjZXMsIGJ1dCBuZXZlciBib3RoIGF0IHRoZSBzYW1lIHRpbWUuCiAJICovCisjaWZuZGVmIF9fQ0hFQ0tFUl9fCiAJQlVJTERfQlVHX09OKElFRUU4MDIxMV9UWF9TVEFUVVNfSEVBRFJPT00gIT0KIAkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1c19ydGFwX2hkcikpOworI2VuZGlmCiAJbG9jYWwtPnR4X2hlYWRyb29tID0gbWF4X3QodW5zaWduZWQgaW50ICwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tLAogCQkJCSAgIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1c19ydGFwX2hkcikpOwogCkBAIC04NzksMTAgKzg5MSw2IEBACiAKIAlsb2NhbC0+ZHluYW1pY19wc19mb3JjZWRfdGltZW91dCA9IC0xOwogCi0JcmVzdWx0ID0gc3RhX2luZm9fc3RhcnQobG9jYWwpOwotCWlmIChyZXN1bHQgPCAwKQotCQlnb3RvIGZhaWxfc3RhX2luZm87Ci0KIAlyZXN1bHQgPSBpZWVlODAyMTFfd2VwX2luaXQobG9jYWwpOwogCWlmIChyZXN1bHQgPCAwKQogCQl3aXBoeV9kZWJ1Zyhsb2NhbC0+aHcud2lwaHksICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSB3ZXA6ICVkXG4iLApAQCAtOTQ1LDcgKzk1Myw2IEBACiAJcnRubF91bmxvY2soKTsKIAlpZWVlODAyMTFfd2VwX2ZyZWUobG9jYWwpOwogCXN0YV9pbmZvX3N0b3AobG9jYWwpOwotIGZhaWxfc3RhX2luZm86CiAJZGVzdHJveV93b3JrcXVldWUobG9jYWwtPndvcmtxdWV1ZSk7CiAgZmFpbF93b3JrcXVldWU6CiAJd2lwaHlfdW5yZWdpc3Rlcihsb2NhbC0+aHcud2lwaHkpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2guYyBiL25ldC9tYWM4MDIxMS9tZXNoLmMKaW5kZXggMmE1N2NjMC4uMjllOTk4MCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2guYworKysgYi9uZXQvbWFjODAyMTEvbWVzaC5jCkBAIC0yNzksNTcgKzI3OSwxNCBAQAogCSAgICBNRVNIQ09ORl9DQVBBQl9BQ0NFUFRfUExJTktTIDogMHgwMDsKIAkqcG9zKysgPSAweDAwOwogCi0JaWYgKHNkYXRhLT51Lm1lc2gudmVuZG9yX2llKSB7Ci0JCWludCBsZW4gPSBzZGF0YS0+dS5tZXNoLnZlbmRvcl9pZV9sZW47Ci0JCWNvbnN0IHU4ICpkYXRhID0gc2RhdGEtPnUubWVzaC52ZW5kb3JfaWU7CisJaWYgKHNkYXRhLT51Lm1lc2guaWUpIHsKKwkJaW50IGxlbiA9IHNkYXRhLT51Lm1lc2guaWVfbGVuOworCQljb25zdCB1OCAqZGF0YSA9IHNkYXRhLT51Lm1lc2guaWU7CiAJCWlmIChza2JfdGFpbHJvb20oc2tiKSA+IGxlbikKIAkJCW1lbWNweShza2JfcHV0KHNrYiwgbGVuKSwgZGF0YSwgbGVuKTsKIAl9CiB9CiAKLXUzMiBtZXNoX3RhYmxlX2hhc2godTggKmFkZHIsIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsKQotewotCS8qIFVzZSBsYXN0IGZvdXIgYnl0ZXMgb2YgaHcgYWRkciBhbmQgaW50ZXJmYWNlIGluZGV4IGFzIGhhc2ggaW5kZXggKi8KLQlyZXR1cm4gamhhc2hfMndvcmRzKCoodTMyICopKGFkZHIrMiksIHNkYXRhLT5kZXYtPmlmaW5kZXgsIHRibC0+aGFzaF9ybmQpCi0JCSYgdGJsLT5oYXNoX21hc2s7Ci19Ci0KLXN0cnVjdCBtZXNoX3RhYmxlICptZXNoX3RhYmxlX2FsbG9jKGludCBzaXplX29yZGVyKQotewotCWludCBpOwotCXN0cnVjdCBtZXNoX3RhYmxlICpuZXd0Ymw7Ci0KLQluZXd0YmwgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWVzaF90YWJsZSksIEdGUF9LRVJORUwpOwotCWlmICghbmV3dGJsKQotCQlyZXR1cm4gTlVMTDsKLQotCW5ld3RibC0+aGFzaF9idWNrZXRzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpICoKLQkJCSgxIDw8IHNpemVfb3JkZXIpLCBHRlBfS0VSTkVMKTsKLQotCWlmICghbmV3dGJsLT5oYXNoX2J1Y2tldHMpIHsKLQkJa2ZyZWUobmV3dGJsKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JbmV3dGJsLT5oYXNod2xvY2sgPSBrbWFsbG9jKHNpemVvZihzcGlubG9ja190KSAqCi0JCQkoMSA8PCBzaXplX29yZGVyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFuZXd0YmwtPmhhc2h3bG9jaykgewotCQlrZnJlZShuZXd0YmwtPmhhc2hfYnVja2V0cyk7Ci0JCWtmcmVlKG5ld3RibCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCW5ld3RibC0+c2l6ZV9vcmRlciA9IHNpemVfb3JkZXI7Ci0JbmV3dGJsLT5oYXNoX21hc2sgPSAoMSA8PCBzaXplX29yZGVyKSAtIDE7Ci0JYXRvbWljX3NldCgmbmV3dGJsLT5lbnRyaWVzLCAgMCk7Ci0JZ2V0X3JhbmRvbV9ieXRlcygmbmV3dGJsLT5oYXNoX3JuZCwKLQkJCXNpemVvZihuZXd0YmwtPmhhc2hfcm5kKSk7Ci0JZm9yIChpID0gMDsgaSA8PSBuZXd0YmwtPmhhc2hfbWFzazsgaSsrKQotCQlzcGluX2xvY2tfaW5pdCgmbmV3dGJsLT5oYXNod2xvY2tbaV0pOwotCi0JcmV0dXJuIG5ld3RibDsKLX0KLQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfbWVzaF9wYXRoX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKQEAgLTU3Myw2ICs1MzAsMTAgQEAKIAlpZWVlODAyXzExX3BhcnNlX2VsZW1zKG1nbXQtPnUucHJvYmVfcmVzcC52YXJpYWJsZSwgbGVuIC0gYmFzZWxlbiwKIAkJCSAgICAgICAmZWxlbXMpOwogCisJLyogaWdub3JlIGJlYWNvbnMgZnJvbSBzZWN1cmUgbWVzaCBwZWVycyBpZiBvdXIgc2VjdXJpdHkgaXMgb2ZmICovCisJaWYgKGVsZW1zLnJzbl9sZW4gJiYgc2RhdGEtPnUubWVzaC5zZWN1cml0eSA9PSBJRUVFODAyMTFfTUVTSF9TRUNfTk9ORSkKKwkJcmV0dXJuOworCiAJaWYgKGVsZW1zLmRzX3BhcmFtcyAmJiBlbGVtcy5kc19wYXJhbXNfbGVuID09IDEpCiAJCWZyZXEgPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koZWxlbXMuZHNfcGFyYW1zWzBdLCBiYW5kKTsKIAllbHNlCkBAIC01ODYsOSArNTQ3LDcgQEAKIAlpZiAoZWxlbXMubWVzaF9pZCAmJiBlbGVtcy5tZXNoX2NvbmZpZyAmJgogCSAgICBtZXNoX21hdGNoZXNfbG9jYWwoJmVsZW1zLCBzZGF0YSkpIHsKIAkJc3VwcF9yYXRlcyA9IGllZWU4MDIxMV9zdGFfZ2V0X3JhdGVzKGxvY2FsLCAmZWxlbXMsIGJhbmQpOwotCi0JCW1lc2hfbmVpZ2hib3VyX3VwZGF0ZShtZ210LT5zYSwgc3VwcF9yYXRlcywgc2RhdGEsCi0JCQkJICAgICAgbWVzaF9wZWVyX2FjY2VwdHNfcGxpbmtzKCZlbGVtcykpOworCQltZXNoX25laWdoYm91cl91cGRhdGUobWdtdC0+c2EsIHN1cHBfcmF0ZXMsIHNkYXRhLCAmZWxlbXMpOwogCX0KIH0KIApAQCAtNTk4LDcgKzU1Nyw3IEBACiAJCQkJCSAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKIHsKIAlzd2l0Y2ggKG1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5KSB7Ci0JY2FzZSBXTEFOX0NBVEVHT1JZX01FU0hfUExJTks6CisJY2FzZSBXTEFOX0NBVEVHT1JZX01FU0hfQUNUSU9OOgogCQltZXNoX3J4X3BsaW5rX2ZyYW1lKHNkYXRhLCBtZ210LCBsZW4sIHJ4X3N0YXR1cyk7CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9DQVRFR09SWV9NRVNIX1BBVEhfU0VMOgpAQCAtNjExLDEyICs1NzAsOSBAQAogCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1czsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2ggKmlmbXNoOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKIAl1MTYgc3R5cGU7CiAKLQlpZm1zaCA9ICZzZGF0YS0+dS5tZXNoOwotCiAJcnhfc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7CiAJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOwogCXN0eXBlID0gbGUxNl90b19jcHUobWdtdC0+ZnJhbWVfY29udHJvbCkgJiBJRUVFODAyMTFfRkNUTF9TVFlQRTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoLmggYi9uZXQvbWFjODAyMTEvbWVzaC5oCmluZGV4IGI5OWUyMzAuLmU3YzVmZGQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoLmgKKysrIGIvbmV0L21hYzgwMjExL21lc2guaApAQCAtOTIsNyArOTIsNyBAQAogCXU4IGRzdFtFVEhfQUxFTl07CiAJdTggbXBwW0VUSF9BTEVOXTsJLyogdXNlZCBmb3IgTVBQIG9yIE1BUCAqLwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCXN0cnVjdCBzdGFfaW5mbyAqbmV4dF9ob3A7CisJc3RydWN0IHN0YV9pbmZvIF9fcmN1ICpuZXh0X2hvcDsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGZyYW1lX3F1ZXVlOwogCXN0cnVjdCByY3VfaGVhZCByY3U7CkBAIC0yMjYsNyArMjI2LDggQEAKIGludCBtZXNoX3BhdGhfYWRkKHU4ICpkc3QsIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIC8qIE1lc2ggcGxpbmtzICovCiB2b2lkIG1lc2hfbmVpZ2hib3VyX3VwZGF0ZSh1OCAqaHdfYWRkciwgdTMyIHJhdGVzLAotCQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgYm9vbCBhZGQpOworCQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgKmllKTsKIGJvb2wgbWVzaF9wZWVyX2FjY2VwdHNfcGxpbmtzKHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICppZSk7CiB2b2lkIG1lc2hfYWNjZXB0X3BsaW5rc191cGRhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogdm9pZCBtZXNoX3BsaW5rX2Jyb2tlbihzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CkBAIC0yMzksMTIgKzI0MCw4IEBACiAKIC8qIFByaXZhdGUgaW50ZXJmYWNlcyAqLwogLyogTWVzaCB0YWJsZXMgKi8KLXN0cnVjdCBtZXNoX3RhYmxlICptZXNoX3RhYmxlX2FsbG9jKGludCBzaXplX29yZGVyKTsKLXZvaWQgbWVzaF90YWJsZV9mcmVlKHN0cnVjdCBtZXNoX3RhYmxlICp0YmwsIGJvb2wgZnJlZV9sZWFmcyk7CiB2b2lkIG1lc2hfbXBhdGhfdGFibGVfZ3Jvdyh2b2lkKTsKIHZvaWQgbWVzaF9tcHBfdGFibGVfZ3Jvdyh2b2lkKTsKLXUzMiBtZXNoX3RhYmxlX2hhc2godTggKmFkZHIsIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQlzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsKTsKIC8qIE1lc2ggcGF0aHMgKi8KIGludCBtZXNoX3BhdGhfZXJyb3JfdHgodTggdHRsLCB1OCAqdGFyZ2V0LCBfX2xlMzIgdGFyZ2V0X3NuLCBfX2xlMTYgdGFyZ2V0X3Jjb2RlLAogCQkgICAgICAgY29uc3QgdTggKnJhLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaF9od21wLmMgYi9uZXQvbWFjODAyMTEvbWVzaF9od21wLmMKaW5kZXggNWJmNjRkNy4uMmIxODA1MyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2hfaHdtcC5jCisrKyBiL25ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYwpAQCAtMzkxLDcgKzM5MSw2IEBACiAJCQkgICAgKG1wYXRoLT5mbGFncyAmIE1FU0hfUEFUSF9TTl9WQUxJRCkpIHsKIAkJCQlpZiAoU05fR1QobXBhdGgtPnNuLCBvcmlnX3NuKSB8fAogCQkJCSAgICAobXBhdGgtPnNuID09IG9yaWdfc24gJiYKLQkJCQkgICAgIGFjdGlvbiA9PSBNUEFUSF9QUkVRICYmCiAJCQkJICAgICBuZXdfbWV0cmljID49IG1wYXRoLT5tZXRyaWMpKSB7CiAJCQkJCXByb2Nlc3MgPSBmYWxzZTsKIAkJCQkJZnJlc2hfaW5mbyA9IGZhbHNlOwpAQCAtNTYxLDYgKzU2MCwxNCBAQAogfQogCiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHN0YV9pbmZvICoKK25leHRfaG9wX2RlcmVmX3Byb3RlY3RlZChzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCkKK3sKKwlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtcGF0aC0+bmV4dF9ob3AsCisJCQkJCSBsb2NrZGVwX2lzX2hlbGQoJm1wYXRoLT5zdGF0ZV9sb2NrKSk7Cit9CisKKwogc3RhdGljIHZvaWQgaHdtcF9wcmVwX2ZyYW1lX3Byb2Nlc3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKIAkJCQkgICAgdTggKnByZXBfZWxlbSwgdTMyIG1ldHJpYykKQEAgLTYwMCw3ICs2MDcsNyBAQAogCQlzcGluX3VubG9ja19iaCgmbXBhdGgtPnN0YXRlX2xvY2spOwogCQlnb3RvIGZhaWw7CiAJfQotCW1lbWNweShuZXh0X2hvcCwgbXBhdGgtPm5leHRfaG9wLT5zdGEuYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShuZXh0X2hvcCwgbmV4dF9ob3BfZGVyZWZfcHJvdGVjdGVkKG1wYXRoKS0+c3RhLmFkZHIsIEVUSF9BTEVOKTsKIAlzcGluX3VubG9ja19iaCgmbXBhdGgtPnN0YXRlX2xvY2spOwogCS0tdHRsOwogCWZsYWdzID0gUFJFUF9JRV9GTEFHUyhwcmVwX2VsZW0pOwpAQCAtNjMzLDcgKzY0MCw2IEBACiAJc3RydWN0IG1lc2hfcGF0aCAqbXBhdGg7CiAJdTggdHRsOwogCXU4ICp0YSwgKnRhcmdldF9hZGRyOwotCXU4IHRhcmdldF9mbGFnczsKIAl1MzIgdGFyZ2V0X3NuOwogCXUxNiB0YXJnZXRfcmNvZGU7CiAKQEAgLTY0NCw3ICs2NTAsNiBAQAogCQlyZXR1cm47CiAJfQogCXR0bC0tOwotCXRhcmdldF9mbGFncyA9IFBFUlJfSUVfVEFSR0VUX0ZMQUdTKHBlcnJfZWxlbSk7CiAJdGFyZ2V0X2FkZHIgPSBQRVJSX0lFX1RBUkdFVF9BRERSKHBlcnJfZWxlbSk7CiAJdGFyZ2V0X3NuID0gUEVSUl9JRV9UQVJHRVRfU04ocGVycl9lbGVtKTsKIAl0YXJnZXRfcmNvZGUgPSBQRVJSX0lFX1RBUkdFVF9SQ09ERShwZXJyX2VsZW0pOwpAQCAtNjU0LDcgKzY1OSw4IEBACiAJaWYgKG1wYXRoKSB7CiAJCXNwaW5fbG9ja19iaCgmbXBhdGgtPnN0YXRlX2xvY2spOwogCQlpZiAobXBhdGgtPmZsYWdzICYgTUVTSF9QQVRIX0FDVElWRSAmJgotCQkgICAgbWVtY21wKHRhLCBtcGF0aC0+bmV4dF9ob3AtPnN0YS5hZGRyLCBFVEhfQUxFTikgPT0gMCAmJgorCQkgICAgbWVtY21wKHRhLCBuZXh0X2hvcF9kZXJlZl9wcm90ZWN0ZWQobXBhdGgpLT5zdGEuYWRkciwKKwkJCQkJCQlFVEhfQUxFTikgPT0gMCAmJgogCQkgICAgKCEobXBhdGgtPmZsYWdzICYgTUVTSF9QQVRIX1NOX1ZBTElEKSB8fAogCQkgICAgU05fR1QodGFyZ2V0X3NuLCBtcGF0aC0+c24pKSkgewogCQkJbXBhdGgtPmZsYWdzICY9IH5NRVNIX1BBVEhfQUNUSVZFOwpAQCAtNjc1LDEyICs2ODEsMTAgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2ggKmlmbXNoID0gJnNkYXRhLT51Lm1lc2g7CiAJc3RydWN0IG1lc2hfcGF0aCAqbXBhdGg7Ci0JdTggKnRhOwogCXU4IHR0bCwgZmxhZ3MsIGhvcGNvdW50OwogCXU4ICpvcmlnX2FkZHI7CiAJdTMyIG9yaWdfc24sIG1ldHJpYzsKIAotCXRhID0gbWdtdC0+c2E7CiAJdHRsID0gcmFubi0+cmFubl90dGw7CiAJaWYgKHR0bCA8PSAxKSB7CiAJCWlmbXNoLT5tc2hzdGF0cy5kcm9wcGVkX2ZyYW1lc190dGwrKzsKQEAgLTkxOCw2ICs5MjIsNyBAQAogewogCXN0cnVjdCBza19idWZmICpza2JfdG9fZnJlZSA9IE5VTEw7CiAJc3RydWN0IG1lc2hfcGF0aCAqbXBhdGg7CisJc3RydWN0IHN0YV9pbmZvICpuZXh0X2hvcDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAl1OCAqdGFyZ2V0X2FkZHIgPSBoZHItPmFkZHIzOwogCWludCBlcnIgPSAwOwpAQCAtOTQ1LDcgKzk1MCwxMSBAQAogCQkJbWVzaF9xdWV1ZV9wcmVxKG1wYXRoLAogCQkJCQlQUkVRX1FfRl9TVEFSVCB8IFBSRVFfUV9GX1JFRlJFU0gpOwogCQl9Ci0JCW1lbWNweShoZHItPmFkZHIxLCBtcGF0aC0+bmV4dF9ob3AtPnN0YS5hZGRyLCBFVEhfQUxFTik7CisJCW5leHRfaG9wID0gcmN1X2RlcmVmZXJlbmNlKG1wYXRoLT5uZXh0X2hvcCk7CisJCWlmIChuZXh0X2hvcCkKKwkJCW1lbWNweShoZHItPmFkZHIxLCBuZXh0X2hvcC0+c3RhLmFkZHIsIEVUSF9BTEVOKTsKKwkJZWxzZQorCQkJZXJyID0gLUVOT0VOVDsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJCWlmICghKG1wYXRoLT5mbGFncyAmIE1FU0hfUEFUSF9SRVNPTFZJTkcpKSB7CkBAIC05NzEsMjAgKzk4MCwxMSBAQAogCiB2b2lkIG1lc2hfcGF0aF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0Jc3RydWN0IG1lc2hfcGF0aCAqbXBhdGg7CisJc3RydWN0IG1lc2hfcGF0aCAqbXBhdGggPSAodm9pZCAqKSBkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gbXBhdGgtPnNkYXRhOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCW1wYXRoID0gKHN0cnVjdCBtZXNoX3BhdGggKikgZGF0YTsKLQltcGF0aCA9IHJjdV9kZXJlZmVyZW5jZShtcGF0aCk7Ci0JaWYgKCFtcGF0aCkKLQkJZ290byBlbmRtcGF0aHRpbWVyOwotCXNkYXRhID0gbXBhdGgtPnNkYXRhOwotCi0JaWYgKHNkYXRhLT5sb2NhbC0+cXVpZXNjaW5nKSB7Ci0JCXJjdV9yZWFkX3VubG9jaygpOworCWlmIChzZGF0YS0+bG9jYWwtPnF1aWVzY2luZykKIAkJcmV0dXJuOwotCX0KIAogCXNwaW5fbG9ja19iaCgmbXBhdGgtPnN0YXRlX2xvY2spOwogCWlmIChtcGF0aC0+ZmxhZ3MgJiBNRVNIX1BBVEhfUkVTT0xWRUQgfHwKQEAgLTEwMDEsOCArMTAwMSw2IEBACiAJfQogCiAJc3Bpbl91bmxvY2tfYmgoJm1wYXRoLT5zdGF0ZV9sb2NrKTsKLWVuZG1wYXRodGltZXI6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYyBiL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYwppbmRleCAzMzZjYTlkLi44M2NlNDhlIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMKKysrIGIvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jCkBAIC00MCw2ICs0MCw1MCBAQAogc3RhdGljIHN0cnVjdCBtZXNoX3RhYmxlICptcHBfcGF0aHM7IC8qIFN0b3JlIHBhdGhzIGZvciBNUFAmTUFQICovCiAKIGludCBtZXNoX3BhdGhzX2dlbmVyYXRpb247CisKKy8qIFRoaXMgbG9jayB3aWxsIGhhdmUgdGhlIGdyb3cgdGFibGUgZnVuY3Rpb24gYXMgd3JpdGVyIGFuZCBhZGQgLyBkZWxldGUgbm9kZXMKKyAqIGFzIHJlYWRlcnMuIFdoZW4gcmVhZGluZyB0aGUgdGFibGUgKGkuZS4gZG9pbmcgbG9va3Vwcykgd2UgYXJlIHdlbGwgcHJvdGVjdGVkCisgKiBieSBSQ1UKKyAqLworc3RhdGljIERFRklORV9SV0xPQ0socGF0aHRibF9yZXNpemVfbG9jayk7CisKKworc3RhdGljIHN0cnVjdCBtZXNoX3RhYmxlICptZXNoX3RhYmxlX2FsbG9jKGludCBzaXplX29yZGVyKQoreworCWludCBpOworCXN0cnVjdCBtZXNoX3RhYmxlICpuZXd0Ymw7CisKKwluZXd0YmwgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWVzaF90YWJsZSksIEdGUF9LRVJORUwpOworCWlmICghbmV3dGJsKQorCQlyZXR1cm4gTlVMTDsKKworCW5ld3RibC0+aGFzaF9idWNrZXRzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpICoKKwkJCSgxIDw8IHNpemVfb3JkZXIpLCBHRlBfS0VSTkVMKTsKKworCWlmICghbmV3dGJsLT5oYXNoX2J1Y2tldHMpIHsKKwkJa2ZyZWUobmV3dGJsKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbmV3dGJsLT5oYXNod2xvY2sgPSBrbWFsbG9jKHNpemVvZihzcGlubG9ja190KSAqCisJCQkoMSA8PCBzaXplX29yZGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXd0YmwtPmhhc2h3bG9jaykgeworCQlrZnJlZShuZXd0YmwtPmhhc2hfYnVja2V0cyk7CisJCWtmcmVlKG5ld3RibCk7CisJCXJldHVybiBOVUxMOworCX0KKworCW5ld3RibC0+c2l6ZV9vcmRlciA9IHNpemVfb3JkZXI7CisJbmV3dGJsLT5oYXNoX21hc2sgPSAoMSA8PCBzaXplX29yZGVyKSAtIDE7CisJYXRvbWljX3NldCgmbmV3dGJsLT5lbnRyaWVzLCAgMCk7CisJZ2V0X3JhbmRvbV9ieXRlcygmbmV3dGJsLT5oYXNoX3JuZCwKKwkJCXNpemVvZihuZXd0YmwtPmhhc2hfcm5kKSk7CisJZm9yIChpID0gMDsgaSA8PSBuZXd0YmwtPmhhc2hfbWFzazsgaSsrKQorCQlzcGluX2xvY2tfaW5pdCgmbmV3dGJsLT5oYXNod2xvY2tbaV0pOworCisJcmV0dXJuIG5ld3RibDsKK30KKwogc3RhdGljIHZvaWQgX19tZXNoX3RhYmxlX2ZyZWUoc3RydWN0IG1lc2hfdGFibGUgKnRibCkKIHsKIAlrZnJlZSh0YmwtPmhhc2hfYnVja2V0cyk7CkBAIC00Nyw3ICs5MSw3IEBACiAJa2ZyZWUodGJsKTsKIH0KIAotdm9pZCBtZXNoX3RhYmxlX2ZyZWUoc3RydWN0IG1lc2hfdGFibGUgKnRibCwgYm9vbCBmcmVlX2xlYWZzKQorc3RhdGljIHZvaWQgbWVzaF90YWJsZV9mcmVlKHN0cnVjdCBtZXNoX3RhYmxlICp0YmwsIGJvb2wgZnJlZV9sZWFmcykKIHsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqbWVzaF9oYXNoOwogCXN0cnVjdCBobGlzdF9ub2RlICpwLCAqcTsKQEAgLTU1LDYwICs5OSw1NiBAQAogCiAJbWVzaF9oYXNoID0gdGJsLT5oYXNoX2J1Y2tldHM7CiAJZm9yIChpID0gMDsgaSA8PSB0YmwtPmhhc2hfbWFzazsgaSsrKSB7Ci0JCXNwaW5fbG9jaygmdGJsLT5oYXNod2xvY2tbaV0pOworCQlzcGluX2xvY2tfYmgoJnRibC0+aGFzaHdsb2NrW2ldKTsKIAkJaGxpc3RfZm9yX2VhY2hfc2FmZShwLCBxLCAmbWVzaF9oYXNoW2ldKSB7CiAJCQl0YmwtPmZyZWVfbm9kZShwLCBmcmVlX2xlYWZzKTsKIAkJCWF0b21pY19kZWMoJnRibC0+ZW50cmllcyk7CiAJCX0KLQkJc3Bpbl91bmxvY2soJnRibC0+aGFzaHdsb2NrW2ldKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnRibC0+aGFzaHdsb2NrW2ldKTsKIAl9CiAJX19tZXNoX3RhYmxlX2ZyZWUodGJsKTsKIH0KIAotc3RhdGljIHN0cnVjdCBtZXNoX3RhYmxlICptZXNoX3RhYmxlX2dyb3coc3RydWN0IG1lc2hfdGFibGUgKnRibCkKK3N0YXRpYyBpbnQgbWVzaF90YWJsZV9ncm93KHN0cnVjdCBtZXNoX3RhYmxlICpvbGR0YmwsCisJCQkgICBzdHJ1Y3QgbWVzaF90YWJsZSAqbmV3dGJsKQogewotCXN0cnVjdCBtZXNoX3RhYmxlICpuZXd0Ymw7CiAJc3RydWN0IGhsaXN0X2hlYWQgKm9sZGhhc2g7CiAJc3RydWN0IGhsaXN0X25vZGUgKnAsICpxOwogCWludCBpOwogCi0JaWYgKGF0b21pY19yZWFkKCZ0YmwtPmVudHJpZXMpCi0JCQk8IHRibC0+bWVhbl9jaGFpbl9sZW4gKiAodGJsLT5oYXNoX21hc2sgKyAxKSkKLQkJZ290byBlbmRncm93OworCWlmIChhdG9taWNfcmVhZCgmb2xkdGJsLT5lbnRyaWVzKQorCQkJPCBvbGR0YmwtPm1lYW5fY2hhaW5fbGVuICogKG9sZHRibC0+aGFzaF9tYXNrICsgMSkpCisJCXJldHVybiAtRUFHQUlOOwogCi0JbmV3dGJsID0gbWVzaF90YWJsZV9hbGxvYyh0YmwtPnNpemVfb3JkZXIgKyAxKTsKLQlpZiAoIW5ld3RibCkKLQkJZ290byBlbmRncm93OworCW5ld3RibC0+ZnJlZV9ub2RlID0gb2xkdGJsLT5mcmVlX25vZGU7CisJbmV3dGJsLT5tZWFuX2NoYWluX2xlbiA9IG9sZHRibC0+bWVhbl9jaGFpbl9sZW47CisJbmV3dGJsLT5jb3B5X25vZGUgPSBvbGR0YmwtPmNvcHlfbm9kZTsKKwlhdG9taWNfc2V0KCZuZXd0YmwtPmVudHJpZXMsIGF0b21pY19yZWFkKCZvbGR0YmwtPmVudHJpZXMpKTsKIAotCW5ld3RibC0+ZnJlZV9ub2RlID0gdGJsLT5mcmVlX25vZGU7Ci0JbmV3dGJsLT5tZWFuX2NoYWluX2xlbiA9IHRibC0+bWVhbl9jaGFpbl9sZW47Ci0JbmV3dGJsLT5jb3B5X25vZGUgPSB0YmwtPmNvcHlfbm9kZTsKLQlhdG9taWNfc2V0KCZuZXd0YmwtPmVudHJpZXMsIGF0b21pY19yZWFkKCZ0YmwtPmVudHJpZXMpKTsKLQotCW9sZGhhc2ggPSB0YmwtPmhhc2hfYnVja2V0czsKLQlmb3IgKGkgPSAwOyBpIDw9IHRibC0+aGFzaF9tYXNrOyBpKyspCisJb2xkaGFzaCA9IG9sZHRibC0+aGFzaF9idWNrZXRzOworCWZvciAoaSA9IDA7IGkgPD0gb2xkdGJsLT5oYXNoX21hc2s7IGkrKykKIAkJaGxpc3RfZm9yX2VhY2gocCwgJm9sZGhhc2hbaV0pCi0JCQlpZiAodGJsLT5jb3B5X25vZGUocCwgbmV3dGJsKSA8IDApCisJCQlpZiAob2xkdGJsLT5jb3B5X25vZGUocCwgbmV3dGJsKSA8IDApCiAJCQkJZ290byBlcnJjb3B5OwogCi0JcmV0dXJuIG5ld3RibDsKKwlyZXR1cm4gMDsKIAogZXJyY29weToKIAlmb3IgKGkgPSAwOyBpIDw9IG5ld3RibC0+aGFzaF9tYXNrOyBpKyspIHsKIAkJaGxpc3RfZm9yX2VhY2hfc2FmZShwLCBxLCAmbmV3dGJsLT5oYXNoX2J1Y2tldHNbaV0pCi0JCQl0YmwtPmZyZWVfbm9kZShwLCAwKTsKKwkJCW9sZHRibC0+ZnJlZV9ub2RlKHAsIDApOwogCX0KLQlfX21lc2hfdGFibGVfZnJlZShuZXd0YmwpOwotZW5kZ3JvdzoKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAorc3RhdGljIHUzMiBtZXNoX3RhYmxlX2hhc2godTggKmFkZHIsIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJICAgc3RydWN0IG1lc2hfdGFibGUgKnRibCkKK3sKKwkvKiBVc2UgbGFzdCBmb3VyIGJ5dGVzIG9mIGh3IGFkZHIgYW5kIGludGVyZmFjZSBpbmRleCBhcyBoYXNoIGluZGV4ICovCisJcmV0dXJuIGpoYXNoXzJ3b3JkcygqKHUzMiAqKShhZGRyKzIpLCBzZGF0YS0+ZGV2LT5pZmluZGV4LCB0YmwtPmhhc2hfcm5kKQorCQkmIHRibC0+aGFzaF9tYXNrOworfQogCi0vKiBUaGlzIGxvY2sgd2lsbCBoYXZlIHRoZSBncm93IHRhYmxlIGZ1bmN0aW9uIGFzIHdyaXRlciBhbmQgYWRkIC8gZGVsZXRlIG5vZGVzCi0gKiBhcyByZWFkZXJzLiBXaGVuIHJlYWRpbmcgdGhlIHRhYmxlIChpLmUuIGRvaW5nIGxvb2t1cHMpIHdlIGFyZSB3ZWxsIHByb3RlY3RlZAotICogYnkgUkNVCi0gKi8KLXN0YXRpYyBERUZJTkVfUldMT0NLKHBhdGh0YmxfcmVzaXplX2xvY2spOwogCiAvKioKICAqCkBAIC0yODAsNyArMzIwLDcgQEAKIAlpZiAoIW5ld19ub2RlKQogCQlnb3RvIGVycl9ub2RlX2FsbG9jOwogCi0JcmVhZF9sb2NrKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKKwlyZWFkX2xvY2tfYmgoJnBhdGh0YmxfcmVzaXplX2xvY2spOwogCW1lbWNweShuZXdfbXBhdGgtPmRzdCwgZHN0LCBFVEhfQUxFTik7CiAJbmV3X21wYXRoLT5zZGF0YSA9IHNkYXRhOwogCW5ld19tcGF0aC0+ZmxhZ3MgPSAwOwpAQCAtMjk1LDcgKzMzNSw3IEBACiAJaGFzaF9pZHggPSBtZXNoX3RhYmxlX2hhc2goZHN0LCBzZGF0YSwgbWVzaF9wYXRocyk7CiAJYnVja2V0ID0gJm1lc2hfcGF0aHMtPmhhc2hfYnVja2V0c1toYXNoX2lkeF07CiAKLQlzcGluX2xvY2soJm1lc2hfcGF0aHMtPmhhc2h3bG9ja1toYXNoX2lkeF0pOworCXNwaW5fbG9ja19iaCgmbWVzaF9wYXRocy0+aGFzaHdsb2NrW2hhc2hfaWR4XSk7CiAKIAllcnIgPSAtRUVYSVNUOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsIG4sIGJ1Y2tldCwgbGlzdCkgewpAQCAtMzExLDggKzM1MSw4IEBACiAKIAltZXNoX3BhdGhzX2dlbmVyYXRpb24rKzsKIAotCXNwaW5fdW5sb2NrKCZtZXNoX3BhdGhzLT5oYXNod2xvY2tbaGFzaF9pZHhdKTsKLQlyZWFkX3VubG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJm1lc2hfcGF0aHMtPmhhc2h3bG9ja1toYXNoX2lkeF0pOworCXJlYWRfdW5sb2NrX2JoKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKIAlpZiAoZ3JvdykgewogCQlzZXRfYml0KE1FU0hfV09SS19HUk9XX01QQVRIX1RBQkxFLCAgJmlmbXNoLT53cmtxX2ZsYWdzKTsKIAkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJnNkYXRhLT53b3JrKTsKQEAgLTMyMCw4ICszNjAsOCBAQAogCXJldHVybiAwOwogCiBlcnJfZXhpc3RzOgotCXNwaW5fdW5sb2NrKCZtZXNoX3BhdGhzLT5oYXNod2xvY2tbaGFzaF9pZHhdKTsKLQlyZWFkX3VubG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJm1lc2hfcGF0aHMtPmhhc2h3bG9ja1toYXNoX2lkeF0pOworCXJlYWRfdW5sb2NrX2JoKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKIAlrZnJlZShuZXdfbm9kZSk7CiBlcnJfbm9kZV9hbGxvYzoKIAlrZnJlZShuZXdfbXBhdGgpOwpAQCAtMzM0LDE1ICszNzQsMjEgQEAKIHsKIAlzdHJ1Y3QgbWVzaF90YWJsZSAqb2xkdGJsLCAqbmV3dGJsOwogCi0Jd3JpdGVfbG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7CisJcmN1X3JlYWRfbG9jaygpOworCW5ld3RibCA9IG1lc2hfdGFibGVfYWxsb2MocmN1X2RlcmVmZXJlbmNlKG1lc2hfcGF0aHMpLT5zaXplX29yZGVyICsgMSk7CisJaWYgKCFuZXd0YmwpCisJCXJldHVybjsKKwl3cml0ZV9sb2NrX2JoKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKIAlvbGR0YmwgPSBtZXNoX3BhdGhzOwotCW5ld3RibCA9IG1lc2hfdGFibGVfZ3JvdyhtZXNoX3BhdGhzKTsKLQlpZiAoIW5ld3RibCkgewotCQl3cml0ZV91bmxvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOworCWlmIChtZXNoX3RhYmxlX2dyb3cobWVzaF9wYXRocywgbmV3dGJsKSA8IDApIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCV9fbWVzaF90YWJsZV9mcmVlKG5ld3RibCk7CisJCXdyaXRlX3VubG9ja19iaCgmcGF0aHRibF9yZXNpemVfbG9jayk7CiAJCXJldHVybjsKIAl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKG1lc2hfcGF0aHMsIG5ld3RibCk7Ci0Jd3JpdGVfdW5sb2NrKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJnBhdGh0YmxfcmVzaXplX2xvY2spOwogCiAJc3luY2hyb25pemVfcmN1KCk7CiAJbWVzaF90YWJsZV9mcmVlKG9sZHRibCwgZmFsc2UpOwpAQCAtMzUyLDE1ICszOTgsMjEgQEAKIHsKIAlzdHJ1Y3QgbWVzaF90YWJsZSAqb2xkdGJsLCAqbmV3dGJsOwogCi0Jd3JpdGVfbG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7CisJcmN1X3JlYWRfbG9jaygpOworCW5ld3RibCA9IG1lc2hfdGFibGVfYWxsb2MocmN1X2RlcmVmZXJlbmNlKG1wcF9wYXRocyktPnNpemVfb3JkZXIgKyAxKTsKKwlpZiAoIW5ld3RibCkKKwkJcmV0dXJuOworCXdyaXRlX2xvY2tfYmgoJnBhdGh0YmxfcmVzaXplX2xvY2spOwogCW9sZHRibCA9IG1wcF9wYXRoczsKLQluZXd0YmwgPSBtZXNoX3RhYmxlX2dyb3cobXBwX3BhdGhzKTsKLQlpZiAoIW5ld3RibCkgewotCQl3cml0ZV91bmxvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOworCWlmIChtZXNoX3RhYmxlX2dyb3cobXBwX3BhdGhzLCBuZXd0YmwpIDwgMCkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJX19tZXNoX3RhYmxlX2ZyZWUobmV3dGJsKTsKKwkJd3JpdGVfdW5sb2NrX2JoKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKIAkJcmV0dXJuOwogCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKIAlyY3VfYXNzaWduX3BvaW50ZXIobXBwX3BhdGhzLCBuZXd0YmwpOwotCXdyaXRlX3VubG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7CisJd3JpdGVfdW5sb2NrX2JoKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKIAogCXN5bmNocm9uaXplX3JjdSgpOwogCW1lc2hfdGFibGVfZnJlZShvbGR0YmwsIGZhbHNlKTsKQEAgLTM5NCw3ICs0NDYsNyBAQAogCWlmICghbmV3X25vZGUpCiAJCWdvdG8gZXJyX25vZGVfYWxsb2M7CiAKLQlyZWFkX2xvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOworCXJlYWRfbG9ja19iaCgmcGF0aHRibF9yZXNpemVfbG9jayk7CiAJbWVtY3B5KG5ld19tcGF0aC0+ZHN0LCBkc3QsIEVUSF9BTEVOKTsKIAltZW1jcHkobmV3X21wYXRoLT5tcHAsIG1wcCwgRVRIX0FMRU4pOwogCW5ld19tcGF0aC0+c2RhdGEgPSBzZGF0YTsKQEAgLTQwNyw3ICs0NTksNyBAQAogCWhhc2hfaWR4ID0gbWVzaF90YWJsZV9oYXNoKGRzdCwgc2RhdGEsIG1wcF9wYXRocyk7CiAJYnVja2V0ID0gJm1wcF9wYXRocy0+aGFzaF9idWNrZXRzW2hhc2hfaWR4XTsKIAotCXNwaW5fbG9jaygmbXBwX3BhdGhzLT5oYXNod2xvY2tbaGFzaF9pZHhdKTsKKwlzcGluX2xvY2tfYmgoJm1wcF9wYXRocy0+aGFzaHdsb2NrW2hhc2hfaWR4XSk7CiAKIAllcnIgPSAtRUVYSVNUOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsIG4sIGJ1Y2tldCwgbGlzdCkgewpAQCAtNDIxLDggKzQ3Myw4IEBACiAJCW1wcF9wYXRocy0+bWVhbl9jaGFpbl9sZW4gKiAobXBwX3BhdGhzLT5oYXNoX21hc2sgKyAxKSkKIAkJZ3JvdyA9IDE7CiAKLQlzcGluX3VubG9jaygmbXBwX3BhdGhzLT5oYXNod2xvY2tbaGFzaF9pZHhdKTsKLQlyZWFkX3VubG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJm1wcF9wYXRocy0+aGFzaHdsb2NrW2hhc2hfaWR4XSk7CisJcmVhZF91bmxvY2tfYmgoJnBhdGh0YmxfcmVzaXplX2xvY2spOwogCWlmIChncm93KSB7CiAJCXNldF9iaXQoTUVTSF9XT1JLX0dST1dfTVBQX1RBQkxFLCAgJmlmbXNoLT53cmtxX2ZsYWdzKTsKIAkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJnNkYXRhLT53b3JrKTsKQEAgLTQzMCw4ICs0ODIsOCBAQAogCXJldHVybiAwOwogCiBlcnJfZXhpc3RzOgotCXNwaW5fdW5sb2NrKCZtcHBfcGF0aHMtPmhhc2h3bG9ja1toYXNoX2lkeF0pOwotCXJlYWRfdW5sb2NrKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmbXBwX3BhdGhzLT5oYXNod2xvY2tbaGFzaF9pZHhdKTsKKwlyZWFkX3VubG9ja19iaCgmcGF0aHRibF9yZXNpemVfbG9jayk7CiAJa2ZyZWUobmV3X25vZGUpOwogZXJyX25vZGVfYWxsb2M6CiAJa2ZyZWUobmV3X21wYXRoKTsKQEAgLTU0NCwxMSArNTk2LDExIEBACiAJaW50IGhhc2hfaWR4OwogCWludCBlcnIgPSAwOwogCi0JcmVhZF9sb2NrKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKKwlyZWFkX2xvY2tfYmgoJnBhdGh0YmxfcmVzaXplX2xvY2spOwogCWhhc2hfaWR4ID0gbWVzaF90YWJsZV9oYXNoKGFkZHIsIHNkYXRhLCBtZXNoX3BhdGhzKTsKIAlidWNrZXQgPSAmbWVzaF9wYXRocy0+aGFzaF9idWNrZXRzW2hhc2hfaWR4XTsKIAotCXNwaW5fbG9jaygmbWVzaF9wYXRocy0+aGFzaHdsb2NrW2hhc2hfaWR4XSk7CisJc3Bpbl9sb2NrX2JoKCZtZXNoX3BhdGhzLT5oYXNod2xvY2tbaGFzaF9pZHhdKTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCBuLCBidWNrZXQsIGxpc3QpIHsKIAkJbXBhdGggPSBub2RlLT5tcGF0aDsKIAkJaWYgKG1wYXRoLT5zZGF0YSA9PSBzZGF0YSAmJgpAQCAtNTY2LDggKzYxOCw4IEBACiAJZXJyID0gLUVOWElPOwogZW5kZGVsOgogCW1lc2hfcGF0aHNfZ2VuZXJhdGlvbisrOwotCXNwaW5fdW5sb2NrKCZtZXNoX3BhdGhzLT5oYXNod2xvY2tbaGFzaF9pZHhdKTsKLQlyZWFkX3VubG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJm1lc2hfcGF0aHMtPmhhc2h3bG9ja1toYXNoX2lkeF0pOworCXJlYWRfdW5sb2NrX2JoKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC03MTksNyArNzcxLDcgQEAKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcDsKIAlpbnQgaTsKIAotCXJlYWRfbG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7CisJcmVhZF9sb2NrX2JoKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKIAlmb3JfZWFjaF9tZXNoX2VudHJ5KG1lc2hfcGF0aHMsIHAsIG5vZGUsIGkpIHsKIAkJaWYgKG5vZGUtPm1wYXRoLT5zZGF0YSAhPSBzZGF0YSkKIAkJCWNvbnRpbnVlOwpAQCAtNzM0LDcgKzc4Niw3IEBACiAJCX0gZWxzZQogCQkJc3Bpbl91bmxvY2tfYmgoJm1wYXRoLT5zdGF0ZV9sb2NrKTsKIAl9Ci0JcmVhZF91bmxvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOworCXJlYWRfdW5sb2NrX2JoKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKIH0KIAogdm9pZCBtZXNoX3BhdGh0YmxfdW5yZWdpc3Rlcih2b2lkKQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfcGxpbmsuYyBiL25ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMKaW5kZXggNDRiNTM5My4uZjRhZGMwOSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2hfcGxpbmsuYworKysgYi9uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jCkBAIC00Myw3ICs0Myw3IEBACiAjZGVmaW5lIGRvdDExTWVzaE1heFBlZXJMaW5rcyhzKSAocy0+dS5tZXNoLm1zaGNmZy5kb3QxMU1lc2hNYXhQZWVyTGlua3MpCiAKIGVudW0gcGxpbmtfZnJhbWVfdHlwZSB7Ci0JUExJTktfT1BFTiA9IDAsCisJUExJTktfT1BFTiA9IDEsCiAJUExJTktfQ09ORklSTSwKIAlQTElOS19DTE9TRQogfTsKQEAgLTgzLDcgKzgzLDcgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIG1lc2hfcGxpbmtfZnNtX3Jlc3RhcnQoc3RydWN0IHN0YV9pbmZvICpzdGEpCiB7Ci0Jc3RhLT5wbGlua19zdGF0ZSA9IFBMSU5LX0xJU1RFTjsKKwlzdGEtPnBsaW5rX3N0YXRlID0gTkw4MDIxMV9QTElOS19MSVNURU47CiAJc3RhLT5sbGlkID0gc3RhLT5wbGlkID0gc3RhLT5yZWFzb24gPSAwOwogCXN0YS0+cGxpbmtfcmV0cmllcyA9IDA7CiB9CkBAIC0xMDUsNyArMTA1LDcgQEAKIAlpZiAoIXN0YSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlzdGEtPmZsYWdzID0gV0xBTl9TVEFfQVVUSE9SSVpFRDsKKwlzdGEtPmZsYWdzID0gV0xBTl9TVEFfQVVUSE9SSVpFRCB8IFdMQU5fU1RBX0FVVEg7CiAJc3RhLT5zdGEuc3VwcF9yYXRlc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXSA9IHJhdGVzOwogCXJhdGVfY29udHJvbF9yYXRlX2luaXQoc3RhKTsKIApAQCAtMTI2LDExICsxMjYsMTEgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHN0YS0+c2RhdGE7CiAJYm9vbCBkZWFjdGl2YXRlZCA9IGZhbHNlOwogCi0JaWYgKHN0YS0+cGxpbmtfc3RhdGUgPT0gUExJTktfRVNUQUIpIHsKKwlpZiAoc3RhLT5wbGlua19zdGF0ZSA9PSBOTDgwMjExX1BMSU5LX0VTVEFCKSB7CiAJCW1lc2hfcGxpbmtfZGVjX2VzdGFiX2NvdW50KHNkYXRhKTsKIAkJZGVhY3RpdmF0ZWQgPSB0cnVlOwogCX0KLQlzdGEtPnBsaW5rX3N0YXRlID0gUExJTktfQkxPQ0tFRDsKKwlzdGEtPnBsaW5rX3N0YXRlID0gTkw4MDIxMV9QTElOS19CTE9DS0VEOwogCW1lc2hfcGF0aF9mbHVzaF9ieV9uZXh0aG9wKHN0YSk7CiAKIAlyZXR1cm4gZGVhY3RpdmF0ZWQ7CkBAIC0xNjEsNyArMTYxLDcgQEAKIAkJX19sZTE2IHJlYXNvbikgewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBza19idWZmICpza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIDQwMCArCi0JCQlzZGF0YS0+dS5tZXNoLnZlbmRvcl9pZV9sZW4pOworCQkJc2RhdGEtPnUubWVzaC5pZV9sZW4pOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKIAlib29sIGluY2x1ZGVfcGxpZCA9IGZhbHNlOwogCXN0YXRpYyBjb25zdCB1OCBtZXNocGVlcmluZ3Byb3RvW10gPSB7IDB4MDAsIDB4MEYsIDB4QUMsIDB4MkEgfTsKQEAgLTE4MSw4ICsxODEsOCBAQAogCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOwogCW1lbWNweShtZ210LT5kYSwgZGEsIEVUSF9BTEVOKTsKIAltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pOwotCS8qIEJTU0lEIGlzIGxlZnQgemVyb2VkLCB3aWxkY2FyZCB2YWx1ZSAqLwotCW1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5ID0gV0xBTl9DQVRFR09SWV9NRVNIX1BMSU5LOworCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CisJbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgPSBXTEFOX0NBVEVHT1JZX01FU0hfQUNUSU9OOwogCW1nbXQtPnUuYWN0aW9uLnUucGxpbmtfYWN0aW9uLmFjdGlvbl9jb2RlID0gYWN0aW9uOwogCiAJaWYgKGFjdGlvbiA9PSBQTElOS19DTE9TRSkKQEAgLTIzNyw4ICsyMzcsOSBAQAogCXJldHVybiAwOwogfQogCi12b2lkIG1lc2hfbmVpZ2hib3VyX3VwZGF0ZSh1OCAqaHdfYWRkciwgdTMyIHJhdGVzLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCSAgIGJvb2wgcGVlcl9hY2NlcHRpbmdfcGxpbmtzKQordm9pZCBtZXNoX25laWdoYm91cl91cGRhdGUodTggKmh3X2FkZHIsIHUzMiByYXRlcywKKwkJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKQEAgLTI0OCw4ICsyNDksMTQgQEAKIAlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIGh3X2FkZHIpOwogCWlmICghc3RhKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwotCi0JCXN0YSA9IG1lc2hfcGxpbmtfYWxsb2Moc2RhdGEsIGh3X2FkZHIsIHJhdGVzKTsKKwkJLyogVXNlcnNwYWNlIGhhbmRsZXMgcGVlciBhbGxvY2F0aW9uIHdoZW4gc2VjdXJpdHkgaXMgZW5hYmxlZAorCQkgKiAqLworCQlpZiAoc2RhdGEtPnUubWVzaC5zZWN1cml0eSAmIElFRUU4MDIxMV9NRVNIX1NFQ19BVVRIRUQpCisJCQljZmc4MDIxMV9ub3RpZnlfbmV3X3BlZXJfY2FuZGlkYXRlKHNkYXRhLT5kZXYsIGh3X2FkZHIsCisJCQkJCWVsZW1zLT5pZV9zdGFydCwgZWxlbXMtPnRvdGFsX2xlbiwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJCWVsc2UKKwkJCXN0YSA9IG1lc2hfcGxpbmtfYWxsb2Moc2RhdGEsIGh3X2FkZHIsIHJhdGVzKTsKIAkJaWYgKCFzdGEpCiAJCQlyZXR1cm47CiAJCWlmIChzdGFfaW5mb19pbnNlcnRfcmN1KHN0YSkpIHsKQEAgLTI2MCw3ICsyNjcsOCBAQAogCiAJc3RhLT5sYXN0X3J4ID0gamlmZmllczsKIAlzdGEtPnN0YS5zdXBwX3JhdGVzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdID0gcmF0ZXM7Ci0JaWYgKHBlZXJfYWNjZXB0aW5nX3BsaW5rcyAmJiBzdGEtPnBsaW5rX3N0YXRlID09IFBMSU5LX0xJU1RFTiAmJgorCWlmIChtZXNoX3BlZXJfYWNjZXB0c19wbGlua3MoZWxlbXMpICYmCisJCQlzdGEtPnBsaW5rX3N0YXRlID09IE5MODAyMTFfUExJTktfTElTVEVOICYmCiAJCQlzZGF0YS0+dS5tZXNoLmFjY2VwdGluZ19wbGlua3MgJiYKIAkJCXNkYXRhLT51Lm1lc2gubXNoY2ZnLmF1dG9fb3Blbl9wbGlua3MpCiAJCW1lc2hfcGxpbmtfb3BlbihzdGEpOwpAQCAtMzAwLDggKzMwOCw4IEBACiAJc2RhdGEgPSBzdGEtPnNkYXRhOwogCiAJc3dpdGNoIChzdGEtPnBsaW5rX3N0YXRlKSB7Ci0JY2FzZSBQTElOS19PUE5fUkNWRDoKLQljYXNlIFBMSU5LX09QTl9TTlQ6CisJY2FzZSBOTDgwMjExX1BMSU5LX09QTl9SQ1ZEOgorCWNhc2UgTkw4MDIxMV9QTElOS19PUE5fU05UOgogCQkvKiByZXRyeSB0aW1lciAqLwogCQlpZiAoc3RhLT5wbGlua19yZXRyaWVzIDwgZG90MTFNZXNoTWF4UmV0cmllcyhzZGF0YSkpIHsKIAkJCXUzMiByYW5kOwpAQCAtMzIwLDE3ICszMjgsMTcgQEAKIAkJfQogCQlyZWFzb24gPSBjcHVfdG9fbGUxNihNRVNIX01BWF9SRVRSSUVTKTsKIAkJLyogZmFsbCB0aHJvdWdoIG9uIGVsc2UgKi8KLQljYXNlIFBMSU5LX0NORl9SQ1ZEOgorCWNhc2UgTkw4MDIxMV9QTElOS19DTkZfUkNWRDoKIAkJLyogY29uZmlybSB0aW1lciAqLwogCQlpZiAoIXJlYXNvbikKIAkJCXJlYXNvbiA9IGNwdV90b19sZTE2KE1FU0hfQ09ORklSTV9USU1FT1VUKTsKLQkJc3RhLT5wbGlua19zdGF0ZSA9IFBMSU5LX0hPTERJTkc7CisJCXN0YS0+cGxpbmtfc3RhdGUgPSBOTDgwMjExX1BMSU5LX0hPTERJTkc7CiAJCW1vZF9wbGlua190aW1lcihzdGEsIGRvdDExTWVzaEhvbGRpbmdUaW1lb3V0KHNkYXRhKSk7CiAJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwogCQltZXNoX3BsaW5rX2ZyYW1lX3R4KHNkYXRhLCBQTElOS19DTE9TRSwgc3RhLT5zdGEuYWRkciwgbGxpZCwgcGxpZCwKIAkJCQkgICAgcmVhc29uKTsKIAkJYnJlYWs7Ci0JY2FzZSBQTElOS19IT0xESU5HOgorCWNhc2UgTkw4MDIxMV9QTElOS19IT0xESU5HOgogCQkvKiBob2xkaW5nIHRpbWVyICovCiAJCWRlbF90aW1lcigmc3RhLT5wbGlua190aW1lcik7CiAJCW1lc2hfcGxpbmtfZnNtX3Jlc3RhcnQoc3RhKTsKQEAgLTM3MiwxNCArMzgwLDE3IEBACiAJX19sZTE2IGxsaWQ7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBzdGEtPnNkYXRhOwogCisJaWYgKCF0ZXN0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX0FVVEgpKQorCQlyZXR1cm4gLUVQRVJNOworCiAJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwogCWdldF9yYW5kb21fYnl0ZXMoJmxsaWQsIDIpOwogCXN0YS0+bGxpZCA9IGxsaWQ7Ci0JaWYgKHN0YS0+cGxpbmtfc3RhdGUgIT0gUExJTktfTElTVEVOKSB7CisJaWYgKHN0YS0+cGxpbmtfc3RhdGUgIT0gTkw4MDIxMV9QTElOS19MSVNURU4pIHsKIAkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQotCXN0YS0+cGxpbmtfc3RhdGUgPSBQTElOS19PUE5fU05UOworCXN0YS0+cGxpbmtfc3RhdGUgPSBOTDgwMjExX1BMSU5LX09QTl9TTlQ7CiAJbWVzaF9wbGlua190aW1lcl9zZXQoc3RhLCBkb3QxMU1lc2hSZXRyeVRpbWVvdXQoc2RhdGEpKTsKIAlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAltcGxfZGJnKCJNZXNoIHBsaW5rOiBzdGFydGluZyBlc3RhYmxpc2htZW50IHdpdGggJXBNXG4iLApAQCAtMzk2LDcgKzQwNyw3IEBACiAKIAlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CiAJZGVhY3RpdmF0ZWQgPSBfX21lc2hfcGxpbmtfZGVhY3RpdmF0ZShzdGEpOwotCXN0YS0+cGxpbmtfc3RhdGUgPSBQTElOS19CTE9DS0VEOworCXN0YS0+cGxpbmtfc3RhdGUgPSBOTDgwMjExX1BMSU5LX0JMT0NLRUQ7CiAJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAKIAlpZiAoZGVhY3RpdmF0ZWQpCkBAIC00MTksMTMgKzQzMCwxMyBAQAogCV9fbGUxNiBwbGlkLCBsbGlkLCByZWFzb247CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfTVBMX0RFQlVHCiAJc3RhdGljIGNvbnN0IGNoYXIgKm1wbHN0YXRlc1tdID0gewotCQlbUExJTktfTElTVEVOXSA9ICJMSVNURU4iLAotCQlbUExJTktfT1BOX1NOVF0gPSAiT1BOLVNOVCIsCi0JCVtQTElOS19PUE5fUkNWRF0gPSAiT1BOLVJDVkQiLAotCQlbUExJTktfQ05GX1JDVkRdID0gIkNORl9SQ1ZEIiwKLQkJW1BMSU5LX0VTVEFCXSA9ICJFU1RBQiIsCi0JCVtQTElOS19IT0xESU5HXSA9ICJIT0xESU5HIiwKLQkJW1BMSU5LX0JMT0NLRURdID0gIkJMT0NLRUQiCisJCVtOTDgwMjExX1BMSU5LX0xJU1RFTl0gPSAiTElTVEVOIiwKKwkJW05MODAyMTFfUExJTktfT1BOX1NOVF0gPSAiT1BOLVNOVCIsCisJCVtOTDgwMjExX1BMSU5LX09QTl9SQ1ZEXSA9ICJPUE4tUkNWRCIsCisJCVtOTDgwMjExX1BMSU5LX0NORl9SQ1ZEXSA9ICJDTkZfUkNWRCIsCisJCVtOTDgwMjExX1BMSU5LX0VTVEFCXSA9ICJFU1RBQiIsCisJCVtOTDgwMjExX1BMSU5LX0hPTERJTkddID0gIkhPTERJTkciLAorCQlbTkw4MDIxMV9QTElOS19CTE9DS0VEXSA9ICJCTE9DS0VEIgogCX07CiAjZW5kaWYKIApAQCAtNDQ5LDYgKzQ2MCwxMSBAQAogCQltcGxfZGJnKCJNZXNoIHBsaW5rOiBtaXNzaW5nIG5lY2Vzc2FyeSBwZWVyIGxpbmsgaWVcbiIpOwogCQlyZXR1cm47CiAJfQorCWlmIChlbGVtcy5yc25fbGVuICYmCisJCQlzZGF0YS0+dS5tZXNoLnNlY3VyaXR5ID09IElFRUU4MDIxMV9NRVNIX1NFQ19OT05FKSB7CisJCW1wbF9kYmcoIk1lc2ggcGxpbms6IGNhbid0IGVzdGFibGlzaCBsaW5rIHdpdGggc2VjdXJlIHBlZXJcbiIpOworCQlyZXR1cm47CisJfQogCiAJZnR5cGUgPSBtZ210LT51LmFjdGlvbi51LnBsaW5rX2FjdGlvbi5hY3Rpb25fY29kZTsKIAlpZV9sZW4gPSBlbGVtcy5wZWVyX2xpbmtfbGVuOwpAQCAtNDgwLDcgKzQ5NiwxMyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKHN0YSAmJiBzdGEtPnBsaW5rX3N0YXRlID09IFBMSU5LX0JMT0NLRUQpIHsKKwlpZiAoc3RhICYmICF0ZXN0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX0FVVEgpKSB7CisJCW1wbF9kYmcoIk1lc2ggcGxpbms6IEFjdGlvbiBmcmFtZSBmcm9tIG5vbi1hdXRoZWQgcGVlclxuIik7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXR1cm47CisJfQorCisJaWYgKHN0YSAmJiBzdGEtPnBsaW5rX3N0YXRlID09IE5MODAyMTFfUExJTktfQkxPQ0tFRCkgewogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuOwogCX0KQEAgLTU1MCw3ICs1NzIsNyBAQAogCQkJCWV2ZW50ID0gQ05GX0FDUFQ7CiAJCQlicmVhazsKIAkJY2FzZSBQTElOS19DTE9TRToKLQkJCWlmIChzdGEtPnBsaW5rX3N0YXRlID09IFBMSU5LX0VTVEFCKQorCQkJaWYgKHN0YS0+cGxpbmtfc3RhdGUgPT0gTkw4MDIxMV9QTElOS19FU1RBQikKIAkJCQkvKiBEbyBub3QgY2hlY2sgZm9yIGxsaWQgb3IgcGxpZC4gVGhpcyBkb2VzIG5vdAogCQkJCSAqIGZvbGxvdyB0aGUgc3RhbmRhcmQgYnV0IHNpbmNlIG11bHRpcGxlIHBsaW5rcwogCQkJCSAqIHBlciBzdGEgYXJlIG5vdCBzdXBwb3J0ZWQsIGl0IGlzIG5lY2Vzc2FyeSBpbgpAQCAtNTg1LDE0ICs2MDcsMTQgQEAKIAlyZWFzb24gPSAwOwogCXN3aXRjaCAoc3RhLT5wbGlua19zdGF0ZSkgewogCQkvKiBzcGluX3VubG9jayBhcyBzb29uIGFzIHN0YXRlIGlzIHVwZGF0ZWQgYXQgZWFjaCBjYXNlICovCi0JY2FzZSBQTElOS19MSVNURU46CisJY2FzZSBOTDgwMjExX1BMSU5LX0xJU1RFTjoKIAkJc3dpdGNoIChldmVudCkgewogCQljYXNlIENMU19BQ1BUOgogCQkJbWVzaF9wbGlua19mc21fcmVzdGFydChzdGEpOwogCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJCQlicmVhazsKIAkJY2FzZSBPUE5fQUNQVDoKLQkJCXN0YS0+cGxpbmtfc3RhdGUgPSBQTElOS19PUE5fUkNWRDsKKwkJCXN0YS0+cGxpbmtfc3RhdGUgPSBOTDgwMjExX1BMSU5LX09QTl9SQ1ZEOwogCQkJc3RhLT5wbGlkID0gcGxpZDsKIAkJCWdldF9yYW5kb21fYnl0ZXMoJmxsaWQsIDIpOwogCQkJc3RhLT5sbGlkID0gbGxpZDsKQEAgLTYwOSw3ICs2MzEsNyBAQAogCQl9CiAJCWJyZWFrOwogCi0JY2FzZSBQTElOS19PUE5fU05UOgorCWNhc2UgTkw4MDIxMV9QTElOS19PUE5fU05UOgogCQlzd2l0Y2ggKGV2ZW50KSB7CiAJCWNhc2UgT1BOX1JKQ1Q6CiAJCWNhc2UgQ05GX1JKQ1Q6CkBAIC02MTgsNyArNjQwLDcgQEAKIAkJCWlmICghcmVhc29uKQogCQkJCXJlYXNvbiA9IGNwdV90b19sZTE2KE1FU0hfQ0xPU0VfUkNWRCk7CiAJCQlzdGEtPnJlYXNvbiA9IHJlYXNvbjsKLQkJCXN0YS0+cGxpbmtfc3RhdGUgPSBQTElOS19IT0xESU5HOworCQkJc3RhLT5wbGlua19zdGF0ZSA9IE5MODAyMTFfUExJTktfSE9MRElORzsKIAkJCWlmICghbW9kX3BsaW5rX3RpbWVyKHN0YSwKIAkJCQkJICAgICBkb3QxMU1lc2hIb2xkaW5nVGltZW91dChzZGF0YSkpKQogCQkJCXN0YS0+aWdub3JlX3BsaW5rX3RpbWVyID0gdHJ1ZTsKQEAgLTYzMCw3ICs2NTIsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgT1BOX0FDUFQ6CiAJCQkvKiByZXRyeSB0aW1lciBpcyBsZWZ0IHVudG91Y2hlZCAqLwotCQkJc3RhLT5wbGlua19zdGF0ZSA9IFBMSU5LX09QTl9SQ1ZEOworCQkJc3RhLT5wbGlua19zdGF0ZSA9IE5MODAyMTFfUExJTktfT1BOX1JDVkQ7CiAJCQlzdGEtPnBsaWQgPSBwbGlkOwogCQkJbGxpZCA9IHN0YS0+bGxpZDsKIAkJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwpAQCAtNjM4LDcgKzY2MCw3IEBACiAJCQkJCSAgICBwbGlkLCAwKTsKIAkJCWJyZWFrOwogCQljYXNlIENORl9BQ1BUOgotCQkJc3RhLT5wbGlua19zdGF0ZSA9IFBMSU5LX0NORl9SQ1ZEOworCQkJc3RhLT5wbGlua19zdGF0ZSA9IE5MODAyMTFfUExJTktfQ05GX1JDVkQ7CiAJCQlpZiAoIW1vZF9wbGlua190aW1lcihzdGEsCiAJCQkJCSAgICAgZG90MTFNZXNoQ29uZmlybVRpbWVvdXQoc2RhdGEpKSkKIAkJCQlzdGEtPmlnbm9yZV9wbGlua190aW1lciA9IHRydWU7CkBAIC02NTEsNyArNjczLDcgQEAKIAkJfQogCQlicmVhazsKIAotCWNhc2UgUExJTktfT1BOX1JDVkQ6CisJY2FzZSBOTDgwMjExX1BMSU5LX09QTl9SQ1ZEOgogCQlzd2l0Y2ggKGV2ZW50KSB7CiAJCWNhc2UgT1BOX1JKQ1Q6CiAJCWNhc2UgQ05GX1JKQ1Q6CkBAIC02NjAsNyArNjgyLDcgQEAKIAkJCWlmICghcmVhc29uKQogCQkJCXJlYXNvbiA9IGNwdV90b19sZTE2KE1FU0hfQ0xPU0VfUkNWRCk7CiAJCQlzdGEtPnJlYXNvbiA9IHJlYXNvbjsKLQkJCXN0YS0+cGxpbmtfc3RhdGUgPSBQTElOS19IT0xESU5HOworCQkJc3RhLT5wbGlua19zdGF0ZSA9IE5MODAyMTFfUExJTktfSE9MRElORzsKIAkJCWlmICghbW9kX3BsaW5rX3RpbWVyKHN0YSwKIAkJCQkJICAgICBkb3QxMU1lc2hIb2xkaW5nVGltZW91dChzZGF0YSkpKQogCQkJCXN0YS0+aWdub3JlX3BsaW5rX3RpbWVyID0gdHJ1ZTsKQEAgLTY3OCw3ICs3MDAsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgQ05GX0FDUFQ6CiAJCQlkZWxfdGltZXIoJnN0YS0+cGxpbmtfdGltZXIpOwotCQkJc3RhLT5wbGlua19zdGF0ZSA9IFBMSU5LX0VTVEFCOworCQkJc3RhLT5wbGlua19zdGF0ZSA9IE5MODAyMTFfUExJTktfRVNUQUI7CiAJCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAkJCW1lc2hfcGxpbmtfaW5jX2VzdGFiX2NvdW50KHNkYXRhKTsKIAkJCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLCBCU1NfQ0hBTkdFRF9CRUFDT04pOwpAQCAtNjkxLDcgKzcxMyw3IEBACiAJCX0KIAkJYnJlYWs7CiAKLQljYXNlIFBMSU5LX0NORl9SQ1ZEOgorCWNhc2UgTkw4MDIxMV9QTElOS19DTkZfUkNWRDoKIAkJc3dpdGNoIChldmVudCkgewogCQljYXNlIE9QTl9SSkNUOgogCQljYXNlIENORl9SSkNUOgpAQCAtNzAwLDcgKzcyMiw3IEBACiAJCQlpZiAoIXJlYXNvbikKIAkJCQlyZWFzb24gPSBjcHVfdG9fbGUxNihNRVNIX0NMT1NFX1JDVkQpOwogCQkJc3RhLT5yZWFzb24gPSByZWFzb247Ci0JCQlzdGEtPnBsaW5rX3N0YXRlID0gUExJTktfSE9MRElORzsKKwkJCXN0YS0+cGxpbmtfc3RhdGUgPSBOTDgwMjExX1BMSU5LX0hPTERJTkc7CiAJCQlpZiAoIW1vZF9wbGlua190aW1lcihzdGEsCiAJCQkJCSAgICAgZG90MTFNZXNoSG9sZGluZ1RpbWVvdXQoc2RhdGEpKSkKIAkJCQlzdGEtPmlnbm9yZV9wbGlua190aW1lciA9IHRydWU7CkBAIC03MTIsNyArNzM0LDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIE9QTl9BQ1BUOgogCQkJZGVsX3RpbWVyKCZzdGEtPnBsaW5rX3RpbWVyKTsKLQkJCXN0YS0+cGxpbmtfc3RhdGUgPSBQTElOS19FU1RBQjsKKwkJCXN0YS0+cGxpbmtfc3RhdGUgPSBOTDgwMjExX1BMSU5LX0VTVEFCOwogCQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJCQltZXNoX3BsaW5rX2luY19lc3RhYl9jb3VudChzZGF0YSk7CiAJCQlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgQlNTX0NIQU5HRURfQkVBQ09OKTsKQEAgLTcyNywxMyArNzQ5LDEzIEBACiAJCX0KIAkJYnJlYWs7CiAKLQljYXNlIFBMSU5LX0VTVEFCOgorCWNhc2UgTkw4MDIxMV9QTElOS19FU1RBQjoKIAkJc3dpdGNoIChldmVudCkgewogCQljYXNlIENMU19BQ1BUOgogCQkJcmVhc29uID0gY3B1X3RvX2xlMTYoTUVTSF9DTE9TRV9SQ1ZEKTsKIAkJCXN0YS0+cmVhc29uID0gcmVhc29uOwogCQkJZGVhY3RpdmF0ZWQgPSBfX21lc2hfcGxpbmtfZGVhY3RpdmF0ZShzdGEpOwotCQkJc3RhLT5wbGlua19zdGF0ZSA9IFBMSU5LX0hPTERJTkc7CisJCQlzdGEtPnBsaW5rX3N0YXRlID0gTkw4MDIxMV9QTElOS19IT0xESU5HOwogCQkJbGxpZCA9IHN0YS0+bGxpZDsKIAkJCW1vZF9wbGlua190aW1lcihzdGEsIGRvdDExTWVzaEhvbGRpbmdUaW1lb3V0KHNkYXRhKSk7CiAJCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKQEAgLTc1Myw3ICs3NzUsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7Ci0JY2FzZSBQTElOS19IT0xESU5HOgorCWNhc2UgTkw4MDIxMV9QTElOS19IT0xESU5HOgogCQlzd2l0Y2ggKGV2ZW50KSB7CiAJCWNhc2UgQ0xTX0FDUFQ6CiAJCQlpZiAoZGVsX3RpbWVyKCZzdGEtPnBsaW5rX3RpbWVyKSkKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jCmluZGV4IDY0ZDkyZDUuLjRmNmIyNjcgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tbG1lLmMKKysrIGIvbmV0L21hYzgwMjExL21sbWUuYwpAQCAtOTAsMjAgKzkwLDExIEBACiAJLyogbm8gYWN0aW9uIHJlcXVpcmVkICovCiAJUlhfTUdNVF9OT05FLAogCi0JLyogY2FsbGVyIG11c3QgY2FsbCBjZmc4MDIxMV9zZW5kX3J4X2F1dGgoKSAqLwotCVJYX01HTVRfQ0ZHODAyMTFfQVVUSCwKLQotCS8qIGNhbGxlciBtdXN0IGNhbGwgY2ZnODAyMTFfc2VuZF9yeF9hc3NvYygpICovCi0JUlhfTUdNVF9DRkc4MDIxMV9BU1NPQywKLQogCS8qIGNhbGxlciBtdXN0IGNhbGwgY2ZnODAyMTFfc2VuZF9kZWF1dGgoKSAqLwogCVJYX01HTVRfQ0ZHODAyMTFfREVBVVRILAogCiAJLyogY2FsbGVyIG11c3QgY2FsbCBjZmc4MDIxMV9zZW5kX2Rpc2Fzc29jKCkgKi8KIAlSWF9NR01UX0NGRzgwMjExX0RJU0FTU09DLAotCi0JLyogY2FsbGVyIG11c3QgdGVsbCBjZmc4MDIxMSBhYm91dCBpbnRlcm5hbCBlcnJvciAqLwotCVJYX01HTVRfQ0ZHODAyMTFfQVNTT0NfRVJST1IsCiB9OwogCiAvKiB1dGlscyAqLwpAQCAtNzU5LDYgKzc1MCw4IEBACiAJCQkgICAgIGR5bmFtaWNfcHNfZW5hYmxlX3dvcmspOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gbG9jYWwtPnBzX3NkYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHE7CiAKIAkvKiBjYW4gb25seSBoYXBwZW4gd2hlbiBQUyB3YXMganVzdCBkaXNhYmxlZCBhbnl3YXkgKi8KIAlpZiAoIXNkYXRhKQpAQCAtNzY3LDE4ICs3NjAsMzcgQEAKIAlpZiAobG9jYWwtPmh3LmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykKIAkJcmV0dXJuOwogCisJLyoKKwkgKiB0cmFuc21pc3Npb24gY2FuIGJlIHN0b3BwZWQgYnkgb3RoZXJzIHdoaWNoIGxlYWRzIHRvCisJICogZHluYW1pY19wc190aW1lciBleHBpcnkuIFBvc3Rwb25kIHRoZSBwcyB0aW1lciBpZiBpdAorCSAqIGlzIG5vdCB0aGUgYWN0dWFsIGlkbGUgc3RhdGUuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CisJZm9yIChxID0gMDsgcSA8IGxvY2FsLT5ody5xdWV1ZXM7IHErKykgeworCQlpZiAobG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1txXSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssCisJCQkJCSAgICAgICBmbGFncyk7CisJCQltb2RfdGltZXIoJmxvY2FsLT5keW5hbWljX3BzX3RpbWVyLCBqaWZmaWVzICsKKwkJCQkgIG1zZWNzX3RvX2ppZmZpZXMoCisJCQkJICBsb2NhbC0+aHcuY29uZi5keW5hbWljX3BzX3RpbWVvdXQpKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOworCiAJaWYgKChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0spICYmCiAJICAgICghKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfTlVMTEZVTkNfQUNLRUQpKSkgewogCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7Ci0JCS8qCi0JCSAqIEZsdXNoIGFsbCB0aGUgZnJhbWVzIHF1ZXVlZCBpbiB0aGUgZHJpdmVyIGJlZm9yZQotCQkgKiBnb2luZyB0byBwb3dlciBzYXZlCi0JCSAqLwotCQlkcnZfZmx1c2gobG9jYWwsIGZhbHNlKTsKLQkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAxKTsKIAotCQkvKiBGbHVzaCBvbmNlIGFnYWluIHRvIGdldCB0aGUgdHggc3RhdHVzIG9mIG51bGxmdW5jIGZyYW1lICovCi0JCWRydl9mbHVzaChsb2NhbCwgZmFsc2UpOworCQlpZiAoZHJ2X3R4X2ZyYW1lc19wZW5kaW5nKGxvY2FsKSkKKwkJCW1vZF90aW1lcigmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIsIGppZmZpZXMgKworCQkJCSAgbXNlY3NfdG9famlmZmllcygKKwkJCQkgIGxvY2FsLT5ody5jb25mLmR5bmFtaWNfcHNfdGltZW91dCkpOworCQllbHNlIHsKKwkJCWllZWU4MDIxMV9zZW5kX251bGxmdW5jKGxvY2FsLCBzZGF0YSwgMSk7CisJCQkvKiBGbHVzaCB0byBnZXQgdGhlIHR4IHN0YXR1cyBvZiBudWxsZnVuYyBmcmFtZSAqLworCQkJZHJ2X2ZsdXNoKGxvY2FsLCBmYWxzZSk7CisJCX0KIAl9CiAKIAlpZiAoISgobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1JFUE9SVFNfVFhfQUNLX1NUQVRVUykgJiYKQEAgLTc4OSw3ICs4MDEsNyBAQAogCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOwogCX0KIAotCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CisJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKHNkYXRhLT5kZXYpOwogfQogCiB2b2lkIGllZWU4MDIxMV9keW5hbWljX3BzX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9wbS5jIGIvbmV0L21hYzgwMjExL3BtLmMKaW5kZXggZTM3MzU1MS4uNzMwNzc4YSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3BtLmMKKysrIGIvbmV0L21hYzgwMjExL3BtLmMKQEAgLTYsNyArNiw3IEBACiAjaW5jbHVkZSAiZHJpdmVyLW9wcy5oIgogI2luY2x1ZGUgImxlZC5oIgogCi1pbnQgX19pZWVlODAyMTFfc3VzcGVuZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK2ludCBfX2llZWU4MDIxMV9zdXNwZW5kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgY2ZnODAyMTFfd293bGFuICp3b3dsYW4pCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CkBAIC0xNCwxMiArMTQsMjMgQEAKIAogCWllZWU4MDIxMV9zY2FuX2NhbmNlbChsb2NhbCk7CiAKKwlpZiAoaHctPmZsYWdzICYgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OKSB7CisJCW11dGV4X2xvY2soJmxvY2FsLT5zdGFfbXR4KTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShzdGEsICZsb2NhbC0+c3RhX2xpc3QsIGxpc3QpIHsKKwkJCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9CTE9DS19CQSk7CisJCQlpZWVlODAyMTFfc3RhX3RlYXJfZG93bl9CQV9zZXNzaW9ucyhzdGEsIHRydWUpOworCQl9CisJCW11dGV4X3VubG9jaygmbG9jYWwtPnN0YV9tdHgpOworCX0KKwogCWllZWU4MDIxMV9zdG9wX3F1ZXVlc19ieV9yZWFzb24oaHcsCiAJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fU1VTUEVORCk7CiAKIAkvKiBmbHVzaCBvdXQgYWxsIHBhY2tldHMgKi8KIAlzeW5jaHJvbml6ZV9uZXQoKTsKIAorCWRydl9mbHVzaChsb2NhbCwgZmFsc2UpOworCiAJbG9jYWwtPnF1aWVzY2luZyA9IHRydWU7CiAJLyogbWFrZSBxdWllc2NpbmcgdmlzaWJsZSB0byB0aW1lcnMgZXZlcnl3aGVyZSAqLwogCW1iKCk7CkBAIC0zNiw2ICs0NywxNiBAQAogCWNhbmNlbF93b3JrX3N5bmMoJmxvY2FsLT5keW5hbWljX3BzX2VuYWJsZV93b3JrKTsKIAlkZWxfdGltZXJfc3luYygmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIpOwogCisJbG9jYWwtPndvd2xhbiA9IHdvd2xhbiAmJiBsb2NhbC0+b3Blbl9jb3VudDsKKwlpZiAobG9jYWwtPndvd2xhbikgeworCQlpbnQgZXJyID0gZHJ2X3N1c3BlbmQobG9jYWwsIHdvd2xhbik7CisJCWlmIChlcnIpIHsKKwkJCWxvY2FsLT5xdWllc2NpbmcgPSBmYWxzZTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJZ290byBzdXNwZW5kOworCX0KKwogCS8qIGRpc2FibGUga2V5cyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkKIAkJaWVlZTgwMjExX2Rpc2FibGVfa2V5cyhzZGF0YSk7CkBAIC00MywxMSArNjQsNiBAQAogCS8qIHRlYXIgZG93biBhZ2dyZWdhdGlvbiBzZXNzaW9ucyBhbmQgcmVtb3ZlIFNUQXMgKi8KIAltdXRleF9sb2NrKCZsb2NhbC0+c3RhX210eCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzdGEsICZsb2NhbC0+c3RhX2xpc3QsIGxpc3QpIHsKLQkJaWYgKGh3LT5mbGFncyAmIElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTikgewotCQkJc2V0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX0JMT0NLX0JBKTsKLQkJCWllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHN0YSwgdHJ1ZSk7Ci0JCX0KLQogCQlpZiAoc3RhLT51cGxvYWRlZCkgewogCQkJc2RhdGEgPSBzdGEtPnNkYXRhOwogCQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQpAQCAtOTgsNiArMTE0LDcgQEAKIAlpZiAobG9jYWwtPm9wZW5fY291bnQpCiAJCWllZWU4MDIxMV9zdG9wX2RldmljZShsb2NhbCk7CiAKKyBzdXNwZW5kOgogCWxvY2FsLT5zdXNwZW5kZWQgPSB0cnVlOwogCS8qIG5lZWQgc3VzcGVuZGVkIHRvIGJlIHZpc2libGUgYmVmb3JlIHF1aWVzY2luZyBpcyBmYWxzZSAqLwogCWJhcnJpZXIoKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsLmMgYi9uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbC5jCmluZGV4IDc3OGM2MDQuLjhhZGFjNjcgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsLmMKKysrIGIvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWwuYwpAQCAtNDE3LDggKzQxNyw4IEBACiAJCQl0eF90aW1lX3NpbmdsZSA9IG1yLT5hY2tfdGltZSArIG1yLT5wZXJmZWN0X3R4X3RpbWU7CiAKIAkJCS8qIGNvbnRlbnRpb24gd2luZG93ICovCi0JCQl0eF90aW1lX3NpbmdsZSArPSB0X3Nsb3QgKyBtaW4oY3csIG1wLT5jd19tYXgpOwotCQkJY3cgPSAoY3cgPDwgMSkgfCAxOworCQkJdHhfdGltZV9zaW5nbGUgKz0gKHRfc2xvdCAqIGN3KSA+PiAxOworCQkJY3cgPSBtaW4oKGN3IDw8IDEpIHwgMSwgbXAtPmN3X21heCk7CiAKIAkJCXR4X3RpbWUgKz0gdHhfdGltZV9zaW5nbGU7CiAJCQl0eF90aW1lX2N0cyArPSB0eF90aW1lX3NpbmdsZSArIG1pLT5zcF9hY2tfZHVyOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuYyBiL25ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2h0LmMKaW5kZXggYzA2YWEzYS4uMzMzYjUxMSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfaHQuYworKysgYi9uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9odC5jCkBAIC00NjQsNiArNDY0LDcgQEAKIAljb25zdCBzdHJ1Y3QgbWNzX2dyb3VwICpncm91cDsKIAl1bnNpZ25lZCBpbnQgdHhfdGltZSwgdHhfdGltZV9ydHNjdHMsIHR4X3RpbWVfZGF0YTsKIAl1bnNpZ25lZCBpbnQgY3cgPSBtcC0+Y3dfbWluOworCXVuc2lnbmVkIGludCBjdGltZSA9IDA7CiAJdW5zaWduZWQgaW50IHRfc2xvdCA9IDk7IC8qIEZJWE1FICovCiAJdW5zaWduZWQgaW50IGFtcGR1X2xlbiA9IE1JTlNUUkVMX1RSVU5DKG1pLT5hdmdfYW1wZHVfbGVuKTsKIApAQCAtNDgwLDEzICs0ODEsMjcgQEAKIAogCWdyb3VwID0gJm1pbnN0cmVsX21jc19ncm91cHNbaW5kZXggLyBNQ1NfR1JPVVBfUkFURVNdOwogCXR4X3RpbWVfZGF0YSA9IGdyb3VwLT5kdXJhdGlvbltpbmRleCAlIE1DU19HUk9VUF9SQVRFU10gKiBhbXBkdV9sZW47Ci0JdHhfdGltZSA9IDIgKiAodF9zbG90ICsgbWktPm92ZXJoZWFkICsgdHhfdGltZV9kYXRhKTsKLQl0eF90aW1lX3J0c2N0cyA9IDIgKiAodF9zbG90ICsgbWktPm92ZXJoZWFkX3J0c2N0cyArIHR4X3RpbWVfZGF0YSk7CisKKwkvKiBDb250ZW50aW9uIHRpbWUgZm9yIGZpcnN0IDIgdHJpZXMgKi8KKwljdGltZSA9ICh0X3Nsb3QgKiBjdykgPj4gMTsKKwljdyA9IG1pbigoY3cgPDwgMSkgfCAxLCBtcC0+Y3dfbWF4KTsKKwljdGltZSArPSAodF9zbG90ICogY3cpID4+IDE7CisJY3cgPSBtaW4oKGN3IDw8IDEpIHwgMSwgbXAtPmN3X21heCk7CisKKwkvKiBUb3RhbCBUWCB0aW1lIGZvciBkYXRhIGFuZCBDb250ZW50aW9uIGFmdGVyIGZpcnN0IDIgdHJpZXMgKi8KKwl0eF90aW1lID0gY3RpbWUgKyAyICogKG1pLT5vdmVyaGVhZCArIHR4X3RpbWVfZGF0YSk7CisJdHhfdGltZV9ydHNjdHMgPSBjdGltZSArIDIgKiAobWktPm92ZXJoZWFkX3J0c2N0cyArIHR4X3RpbWVfZGF0YSk7CisKKwkvKiBTZWUgaG93IG1hbnkgbW9yZSB0cmllcyB3ZSBjYW4gZml0IGluc2lkZSBzZWdtZW50IHNpemUgKi8KIAlkbyB7Ci0JCWN3ID0gKGN3IDw8IDEpIHwgMTsKLQkJY3cgPSBtaW4oY3csIG1wLT5jd19tYXgpOwotCQl0eF90aW1lICs9IGN3ICsgdF9zbG90ICsgbWktPm92ZXJoZWFkOwotCQl0eF90aW1lX3J0c2N0cyArPSBjdyArIHRfc2xvdCArIG1pLT5vdmVyaGVhZF9ydHNjdHM7CisJCS8qIENvbnRlbnRpb24gdGltZSBmb3IgdGhpcyB0cnkgKi8KKwkJY3RpbWUgPSAodF9zbG90ICogY3cpID4+IDE7CisJCWN3ID0gbWluKChjdyA8PCAxKSB8IDEsIG1wLT5jd19tYXgpOworCisJCS8qIFRvdGFsIFRYIHRpbWUgYWZ0ZXIgdGhpcyB0cnkgKi8KKwkJdHhfdGltZSArPSBjdGltZSArIG1pLT5vdmVyaGVhZCArIHR4X3RpbWVfZGF0YTsKKwkJdHhfdGltZV9ydHNjdHMgKz0gY3RpbWUgKyBtaS0+b3ZlcmhlYWRfcnRzY3RzICsgdHhfdGltZV9kYXRhOworCiAJCWlmICh0eF90aW1lX3J0c2N0cyA8IG1wLT5zZWdtZW50X3NpemUpCiAJCQltci0+cmV0cnlfY291bnRfcnRzY3RzKys7CiAJfSB3aGlsZSAoKHR4X3RpbWUgPCBtcC0+c2VnbWVudF9zaXplKSAmJgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3J4LmMgYi9uZXQvbWFjODAyMTEvcnguYwppbmRleCBjNWQ0NTMwLi43ZmE4YzZiIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcnguYworKysgYi9uZXQvbWFjODAyMTEvcnguYwpAQCAtMTQzLDcgKzE0Myw4IEBACiAJaWYgKHN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSFQpIHsKIAkJLyoKIAkJICogTUNTIGluZm9ybWF0aW9uIGlzIGEgc2VwYXJhdGUgZmllbGQgaW4gcmFkaW90YXAsCi0JCSAqIGFkZGVkIGJlbG93LgorCQkgKiBhZGRlZCBiZWxvdy4gVGhlIGJ5dGUgaGVyZSBpcyBuZWVkZWQgYXMgcGFkZGluZworCQkgKiBmb3IgdGhlIGNoYW5uZWwgdGhvdWdoLCBzbyBpbml0aWFsaXNlIGl0IHRvIDAuCiAJCSAqLwogCQkqcG9zID0gMDsKIAl9IGVsc2UgewpAQCAtNDAzLDExICs0MDQsMTMgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHJ4LT5za2IpOwogCXN0cnVjdCBza19idWZmICpza2IgPSByeC0+c2tiOwogCi0JaWYgKGxpa2VseSghKHN0YXR1cy0+cnhfZmxhZ3MgJiBJRUVFODAyMTFfUlhfSU5fU0NBTikpKQorCWlmIChsaWtlbHkoIShzdGF0dXMtPnJ4X2ZsYWdzICYgSUVFRTgwMjExX1JYX0lOX1NDQU4pICYmCisJCSAgICFsb2NhbC0+c2NoZWRfc2Nhbm5pbmcpKQogCQlyZXR1cm4gUlhfQ09OVElOVUU7CiAKIAlpZiAodGVzdF9iaXQoU0NBTl9IV19TQ0FOTklORywgJmxvY2FsLT5zY2FubmluZykgfHwKLQkgICAgdGVzdF9iaXQoU0NBTl9TV19TQ0FOTklORywgJmxvY2FsLT5zY2FubmluZykpCisJICAgIHRlc3RfYml0KFNDQU5fU1dfU0NBTk5JTkcsICZsb2NhbC0+c2Nhbm5pbmcpIHx8CisJICAgIGxvY2FsLT5zY2hlZF9zY2FubmluZykKIAkJcmV0dXJuIGllZWU4MDIxMV9zY2FuX3J4KHJ4LT5zZGF0YSwgc2tiKTsKIAogCS8qIHNjYW5uaW5nIGZpbmlzaGVkIGR1cmluZyBpbnZva2luZyBvZiBoYW5kbGVycyAqLwpAQCAtNDg3LDIyICs0OTAsMjYgQEAKIAkgKiBlc3RhYmxpc21lbnQgZnJhbWUsIGJlYWNvbiBvciBwcm9iZSwgZHJvcCB0aGUgZnJhbWUuCiAJICovCiAKLQlpZiAoIXJ4LT5zdGEgfHwgc3RhX3BsaW5rX3N0YXRlKHJ4LT5zdGEpICE9IFBMSU5LX0VTVEFCKSB7CisJaWYgKCFyeC0+c3RhIHx8IHN0YV9wbGlua19zdGF0ZShyeC0+c3RhKSAhPSBOTDgwMjExX1BMSU5LX0VTVEFCKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKIAogCQlpZiAoIWllZWU4MDIxMV9pc19tZ210KGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCiAJCWlmIChpZWVlODAyMTFfaXNfYWN0aW9uKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKKwkJCXU4IGNhdGVnb3J5OwogCQkJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKiloZHI7Ci0JCQlpZiAobWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgIT0gV0xBTl9DQVRFR09SWV9NRVNIX1BMSU5LKQorCQkJY2F0ZWdvcnkgPSBtZ210LT51LmFjdGlvbi5jYXRlZ29yeTsKKwkJCWlmIChjYXRlZ29yeSAhPSBXTEFOX0NBVEVHT1JZX01FU0hfQUNUSU9OICYmCisJCQkJY2F0ZWdvcnkgIT0gV0xBTl9DQVRFR09SWV9TRUxGX1BST1RFQ1RFRCkKIAkJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCQkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCQl9CiAKIAkJaWYgKGllZWU4MDIxMV9pc19wcm9iZV9yZXEoaGRyLT5mcmFtZV9jb250cm9sKSB8fAogCQkgICAgaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoaGRyLT5mcmFtZV9jb250cm9sKSB8fAotCQkgICAgaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpKQorCQkgICAgaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpIHx8CisJCSAgICBpZWVlODAyMTFfaXNfYXV0aChoZHItPmZyYW1lX2NvbnRyb2wpKQogCQkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCiAJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CkBAIC02NTAsNyArNjU3LDcgQEAKICBzZXRfcmVsZWFzZV90aW1lcjoKIAogCQltb2RfdGltZXIoJnRpZF9hZ2dfcngtPnJlb3JkZXJfdGltZXIsCi0JCQkgIHRpZF9hZ2dfcngtPnJlb3JkZXJfdGltZVtqXSArCisJCQkgIHRpZF9hZ2dfcngtPnJlb3JkZXJfdGltZVtqXSArIDEgKwogCQkJICBIVF9SWF9SRU9SREVSX0JVRl9USU1FT1VUKTsKIAl9IGVsc2UgewogCQlkZWxfdGltZXIoJnRpZF9hZ2dfcngtPnJlb3JkZXJfdGltZXIpOwpAQCAtNzA3LDYgKzcxNCw4IEBACiAJLyoKIAkgKiBJZiB0aGUgY3VycmVudCBNUERVIGlzIGluIHRoZSByaWdodCBvcmRlciBhbmQgbm90aGluZyBlbHNlCiAJICogaXMgc3RvcmVkIHdlIGNhbiBwcm9jZXNzIGl0IGRpcmVjdGx5LCBubyBuZWVkIHRvIGJ1ZmZlciBpdC4KKwkgKiBJZiBpdCBpcyBmaXJzdCBidXQgdGhlcmUncyBzb21ldGhpbmcgc3RvcmVkLCB3ZSBtYXkgYmUgYWJsZQorCSAqIHRvIHJlbGVhc2UgZnJhbWVzIGFmdGVyIHRoaXMgb25lLgogCSAqLwogCWlmIChtcGR1X3NlcV9udW0gPT0gdGlkX2FnZ19yeC0+aGVhZF9zZXFfbnVtICYmCiAJICAgIHRpZF9hZ2dfcngtPnN0b3JlZF9tcGR1X251bSA9PSAwKSB7CkBAIC0xNTgzLDcgKzE1OTIsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1fX2llZWU4MDIxMV9kYXRhX3RvXzgwMjMoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKK19faWVlZTgwMjExX2RhdGFfdG9fODAyMyhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LCBib29sICpwb3J0X2NvbnRyb2wpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSByeC0+c2RhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXJ4LT5za2ItPmRhdGE7CkBAIC0xNTkxLDYgKzE2MDAsNyBAQAogCXN0cnVjdCBldGhoZHIgKmVoZHI7CiAJaW50IHJldDsKIAorCSpwb3J0X2NvbnRyb2wgPSBmYWxzZTsKIAlpZiAoaWVlZTgwMjExX2hhc19hNChoZHItPmZyYW1lX2NvbnRyb2wpICYmCiAJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOICYmICFzZGF0YS0+dS52bGFuLnN0YSkKIAkJcmV0dXJuIC0xOwpAQCAtMTYwOSwxMSArMTYxOSwxMyBAQAogCQlyZXR1cm4gLTE7CiAKIAlyZXQgPSBpZWVlODAyMTFfZGF0YV90b184MDIzKHJ4LT5za2IsIHNkYXRhLT52aWYuYWRkciwgc2RhdGEtPnZpZi50eXBlKTsKLQlpZiAocmV0IDwgMCB8fCAhY2hlY2tfcG9ydF9jb250cm9sKQorCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCiAJZWhkciA9IChzdHJ1Y3QgZXRoaGRyICopIHJ4LT5za2ItPmRhdGE7Ci0JaWYgKGVoZHItPmhfcHJvdG8gIT0gcngtPnNkYXRhLT5jb250cm9sX3BvcnRfcHJvdG9jb2wpCisJaWYgKGVoZHItPmhfcHJvdG8gPT0gcngtPnNkYXRhLT5jb250cm9sX3BvcnRfcHJvdG9jb2wpCisJCSpwb3J0X2NvbnRyb2wgPSB0cnVlOworCWVsc2UgaWYgKGNoZWNrX3BvcnRfY29udHJvbCkKIAkJcmV0dXJuIC0xOwogCiAJcmV0dXJuIDA7CkBAIC0xNzcxLDcgKzE3ODMsNyBAQAogCiAJaWVlZTgwMjExX2Ftc2R1X3RvXzgwMjNzKHNrYiwgJmZyYW1lX2xpc3QsIGRldi0+ZGV2X2FkZHIsCiAJCQkJIHJ4LT5zZGF0YS0+dmlmLnR5cGUsCi0JCQkJIHJ4LT5sb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCQkJCSByeC0+bG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tLCB0cnVlKTsKIAogCXdoaWxlICghc2tiX3F1ZXVlX2VtcHR5KCZmcmFtZV9saXN0KSkgewogCQlyeC0+c2tiID0gX19za2JfZGVxdWV1ZSgmZnJhbWVfbGlzdCk7CkBAIC0xOTE0LDYgKzE5MjYsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzZGF0YS0+ZGV2OwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilyeC0+c2tiLT5kYXRhOwogCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKKwlib29sIHBvcnRfY29udHJvbDsKIAlpbnQgZXJyOwogCiAJaWYgKHVubGlrZWx5KCFpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpKSkKQEAgLTE5MzAsMTMgKzE5NDMsMjEgQEAKIAkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKQogCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCi0JZXJyID0gX19pZWVlODAyMTFfZGF0YV90b184MDIzKHJ4KTsKKwllcnIgPSBfX2llZWU4MDIxMV9kYXRhX3RvXzgwMjMocngsICZwb3J0X2NvbnRyb2wpOwogCWlmICh1bmxpa2VseShlcnIpKQogCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKIAogCWlmICghaWVlZTgwMjExX2ZyYW1lX2FsbG93ZWQocngsIGZjKSkKIAkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIAorCWlmIChyeC0+c2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4gJiYKKwkgICAgdW5saWtlbHkocG9ydF9jb250cm9sKSAmJiBzZGF0YS0+YnNzKSB7CisJCXNkYXRhID0gY29udGFpbmVyX29mKHNkYXRhLT5ic3MsIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsCisJCQkJICAgICB1LmFwKTsKKwkJZGV2ID0gc2RhdGEtPmRldjsKKwkJcngtPnNkYXRhID0gc2RhdGE7CisJfQorCiAJcngtPnNrYi0+ZGV2ID0gZGV2OwogCiAJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CkBAIC0yMTg5LDcgKzIyMTAsNyBAQAogCQkJZ290byBoYW5kbGVkOwogCQl9CiAJCWJyZWFrOwotCWNhc2UgV0xBTl9DQVRFR09SWV9NRVNIX1BMSU5LOgorCWNhc2UgV0xBTl9DQVRFR09SWV9NRVNIX0FDVElPTjoKIAkJaWYgKCFpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKQogCQkJYnJlYWs7CiAJCWdvdG8gcXVldWU7CkBAIC0yMzUyLDQ3ICsyMzczLDYgQEAKIAlyZXR1cm4gUlhfUVVFVUVEOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWljaGFlbF9taWNfcmVwb3J0KHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCi0JCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQotewotCWludCBrZXlpZHg7Ci0JdW5zaWduZWQgaW50IGhkcmxlbjsKLQotCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKLQlpZiAocngtPnNrYi0+bGVuID49IGhkcmxlbiArIDQpCi0JCWtleWlkeCA9IHJ4LT5za2ItPmRhdGFbaGRybGVuICsgM10gPj4gNjsKLQllbHNlCi0JCWtleWlkeCA9IC0xOwotCi0JaWYgKCFyeC0+c3RhKSB7Ci0JCS8qCi0JCSAqIFNvbWUgaGFyZHdhcmUgc2VlbSB0byBnZW5lcmF0ZSBpbmNvcnJlY3QgTWljaGFlbCBNSUMKLQkJICogcmVwb3J0czsgaWdub3JlIHRoZW0gdG8gYXZvaWQgdHJpZ2dlcmluZyBjb3VudGVybWVhc3VyZXMuCi0JCSAqLwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKCFpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItPmZyYW1lX2NvbnRyb2wpKQotCQlyZXR1cm47Ci0KLQlpZiAocngtPnNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCAmJiBrZXlpZHgpIHsKLQkJLyoKLQkJICogQVBzIHdpdGggcGFpcndpc2Uga2V5cyBzaG91bGQgbmV2ZXIgcmVjZWl2ZSBNaWNoYWVsIE1JQwotCQkgKiBlcnJvcnMgZm9yIG5vbi16ZXJvIGtleWlkeCBiZWNhdXNlIHRoZXNlIGFyZSByZXNlcnZlZCBmb3IKLQkJICogZ3JvdXAga2V5cyBhbmQgb25seSB0aGUgQVAgaXMgc2VuZGluZyByZWFsIG11bHRpY2FzdAotCQkgKiBmcmFtZXMgaW4gdGhlIEJTUy4KLQkJICovCi0JCXJldHVybjsKLQl9Ci0KLQlpZiAoIWllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKLQkgICAgIWllZWU4MDIxMV9pc19hdXRoKGhkci0+ZnJhbWVfY29udHJvbCkpCi0JCXJldHVybjsKLQotCW1hYzgwMjExX2V2X21pY2hhZWxfbWljX2ZhaWx1cmUocngtPnNkYXRhLCBrZXlpZHgsIGhkciwgTlVMTCwKLQkJCQkJR0ZQX0FUT01JQyk7Ci19Ci0KIC8qIFRPRE86IHVzZSBJRUVFODAyMTFfUlhfRlJBR01FTlRFRCAqLwogc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X2Nvb2tlZF9tb25pdG9yKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsCiAJCQkJCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSkKQEAgLTI3MzYsMTIgKzI3MTYsNiBAQAogCWlmICghcHJlcGFyZXMpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmIChzdGF0dXMtPmZsYWcgJiBSWF9GTEFHX01NSUNfRVJST1IpIHsKLQkJaWYgKHN0YXR1cy0+cnhfZmxhZ3MgJiBJRUVFODAyMTFfUlhfUkFfTUFUQ0gpCi0JCQlpZWVlODAyMTFfcnhfbWljaGFlbF9taWNfcmVwb3J0KGhkciwgcngpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCiAJaWYgKCFjb25zdW1lKSB7CiAJCXNrYiA9IHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7CiAJCWlmICghc2tiKSB7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc2Nhbi5jIGIvbmV0L21hYzgwMjExL3NjYW4uYwppbmRleCA0ODliNmFkLi5kMjAwNDZiIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc2Nhbi5jCisrKyBiL25ldC9tYWM4MDIxMS9zY2FuLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9wbV9xb3NfcGFyYW1zLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPG5ldC9zY2hfZ2VuZXJpYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KQEAgLTE3MCw3ICsxNzEsNyBAQAogCQlyZXR1cm4gUlhfQ09OVElOVUU7CiAKIAlpZiAoc2tiLT5sZW4gPCAyNCkKLQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCiAJcHJlc3AgPSBpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChmYyk7CiAJaWYgKHByZXNwKSB7CkBAIC04NTAsMyArODUxLDEyMiBAQAogCX0KIAltdXRleF91bmxvY2soJmxvY2FsLT5tdHgpOwogfQorCitpbnQgaWVlZTgwMjExX3JlcXVlc3Rfc2NoZWRfc2Nhbl9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgICAgICAgc3RydWN0IGNmZzgwMjExX3NjaGVkX3NjYW5fcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCWludCByZXQsIGk7CisKKwltdXRleF9sb2NrKCZzZGF0YS0+bG9jYWwtPm10eCk7CisKKwlpZiAobG9jYWwtPnNjaGVkX3NjYW5uaW5nKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFsb2NhbC0+b3BzLT5zY2hlZF9zY2FuX3N0YXJ0KSB7CisJCXJldCA9IC1FTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGkrKykgeworCQlsb2NhbC0+c2NoZWRfc2Nhbl9pZXMuaWVbaV0gPSBremFsbG9jKDIgKworCQkJCQkJICAgICAgSUVFRTgwMjExX01BWF9TU0lEX0xFTiArCisJCQkJCQkgICAgICBsb2NhbC0+c2Nhbl9pZXNfbGVuLAorCQkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJCWlmICghbG9jYWwtPnNjaGVkX3NjYW5faWVzLmllW2ldKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXRfZnJlZTsKKwkJfQorCisJCWxvY2FsLT5zY2hlZF9zY2FuX2llcy5sZW5baV0gPQorCQkJaWVlZTgwMjExX2J1aWxkX3ByZXFfaWVzKGxvY2FsLAorCQkJCQkJIGxvY2FsLT5zY2hlZF9zY2FuX2llcy5pZVtpXSwKKwkJCQkJCSByZXEtPmllLCByZXEtPmllX2xlbiwgaSwKKwkJCQkJCSAodTMyKSAtMSwgMCk7CisJfQorCisJcmV0ID0gZHJ2X3NjaGVkX3NjYW5fc3RhcnQobG9jYWwsIHNkYXRhLCByZXEsCisJCQkJICAgJmxvY2FsLT5zY2hlZF9zY2FuX2llcyk7CisJaWYgKHJldCA9PSAwKSB7CisJCWxvY2FsLT5zY2hlZF9zY2FubmluZyA9IHRydWU7CisJCWdvdG8gb3V0OworCX0KKworb3V0X2ZyZWU6CisJd2hpbGUgKGkgPiAwKQorCQlrZnJlZShsb2NhbC0+c2NoZWRfc2Nhbl9pZXMuaWVbLS1pXSk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZzZGF0YS0+bG9jYWwtPm10eCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGllZWU4MDIxMV9yZXF1ZXN0X3NjaGVkX3NjYW5fc3RvcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlpbnQgcmV0ID0gMCwgaTsKKworCW11dGV4X2xvY2soJnNkYXRhLT5sb2NhbC0+bXR4KTsKKworCWlmICghbG9jYWwtPm9wcy0+c2NoZWRfc2Nhbl9zdG9wKSB7CisJCXJldCA9IC1FTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGxvY2FsLT5zY2hlZF9zY2FubmluZykgeworCQlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgaSsrKQorCQkJa2ZyZWUobG9jYWwtPnNjaGVkX3NjYW5faWVzLmllW2ldKTsKKworCQlkcnZfc2NoZWRfc2Nhbl9zdG9wKGxvY2FsLCBzZGF0YSk7CisJCWxvY2FsLT5zY2hlZF9zY2FubmluZyA9IGZhbHNlOworCX0KK291dDoKKwltdXRleF91bmxvY2soJnNkYXRhLT5sb2NhbC0+bXR4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgaWVlZTgwMjExX3NjaGVkX3NjYW5fcmVzdWx0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKworCXRyYWNlX2FwaV9zY2hlZF9zY2FuX3Jlc3VsdHMobG9jYWwpOworCisJY2ZnODAyMTFfc2NoZWRfc2Nhbl9yZXN1bHRzKGh3LT53aXBoeSk7Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zY2hlZF9zY2FuX3Jlc3VsdHMpOworCit2b2lkIGllZWU4MDIxMV9zY2hlZF9zY2FuX3N0b3BwZWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9sb2NhbCwKKwkJCSAgICAgc2NoZWRfc2Nhbl9zdG9wcGVkX3dvcmspOworCWludCBpOworCisJbXV0ZXhfbG9jaygmbG9jYWwtPm10eCk7CisKKwlpZiAoIWxvY2FsLT5zY2hlZF9zY2FubmluZykgeworCQltdXRleF91bmxvY2soJmxvY2FsLT5tdHgpOworCQlyZXR1cm47CisJfQorCisJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGkrKykKKwkJa2ZyZWUobG9jYWwtPnNjaGVkX3NjYW5faWVzLmllW2ldKTsKKworCWxvY2FsLT5zY2hlZF9zY2FubmluZyA9IGZhbHNlOworCisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+bXR4KTsKKworCWNmZzgwMjExX3NjaGVkX3NjYW5fc3RvcHBlZChsb2NhbC0+aHcud2lwaHkpOworfQorCit2b2lkIGllZWU4MDIxMV9zY2hlZF9zY2FuX3N0b3BwZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisKKwl0cmFjZV9hcGlfc2NoZWRfc2Nhbl9zdG9wcGVkKGxvY2FsKTsKKworCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZsb2NhbC0+c2NoZWRfc2Nhbl9zdG9wcGVkX3dvcmspOworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc2NoZWRfc2Nhbl9zdG9wcGVkKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKaW5kZXggMTNlOGMzMC4uYjgzODcwYiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKKysrIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKQEAgLTY3LDcgKzY3LDggQEAKIHsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnM7CiAKLQlzID0gbG9jYWwtPnN0YV9oYXNoW1NUQV9IQVNIKHN0YS0+c3RhLmFkZHIpXTsKKwlzID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChsb2NhbC0+c3RhX2hhc2hbU1RBX0hBU0goc3RhLT5zdGEuYWRkcildLAorCQkJCSAgICAgIGxvY2tkZXBfaXNfaGVsZCgmbG9jYWwtPnN0YV9sb2NrKSk7CiAJaWYgKCFzKQogCQlyZXR1cm4gLUVOT0VOVDsKIAlpZiAocyA9PSBzdGEpIHsKQEAgLTc2LDkgKzc3LDExIEBACiAJCXJldHVybiAwOwogCX0KIAotCXdoaWxlIChzLT5obmV4dCAmJiBzLT5obmV4dCAhPSBzdGEpCi0JCXMgPSBzLT5obmV4dDsKLQlpZiAocy0+aG5leHQpIHsKKwl3aGlsZSAocmN1X2FjY2Vzc19wb2ludGVyKHMtPmhuZXh0KSAmJgorCSAgICAgICByY3VfYWNjZXNzX3BvaW50ZXIocy0+aG5leHQpICE9IHN0YSkKKwkJcyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocy0+aG5leHQsCisJCQkJCWxvY2tkZXBfaXNfaGVsZCgmbG9jYWwtPnN0YV9sb2NrKSk7CisJaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihzLT5obmV4dCkpIHsKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKHMtPmhuZXh0LCBzdGEtPmhuZXh0KTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjI4LDYgKzIzMSw3IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJc3RydWN0IHRpbWVzcGVjIHVwdGltZTsKIAlpbnQgaTsKIAogCXN0YSA9IGt6YWxsb2Moc2l6ZW9mKCpzdGEpICsgbG9jYWwtPmh3LnN0YV9kYXRhX3NpemUsIGdmcCk7CkBAIC0yNDUsNiArMjQ5LDggQEAKIAlzdGEtPnNkYXRhID0gc2RhdGE7CiAJc3RhLT5sYXN0X3J4ID0gamlmZmllczsKIAorCWRvX3Bvc2l4X2Nsb2NrX21vbm90b25pY19nZXR0aW1lKCZ1cHRpbWUpOworCXN0YS0+bGFzdF9jb25uZWN0ZWQgPSB1cHRpbWUudHZfc2VjOwogCWV3bWFfaW5pdCgmc3RhLT5hdmdfc2lnbmFsLCAxMDI0LCA4KTsKIAogCWlmIChzdGFfcHJlcGFyZV9yYXRlX2NvbnRyb2wobG9jYWwsIHN0YSwgZ2ZwKSkgewpAQCAtMjcxLDcgKzI3Nyw3IEBACiAjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcgKi8KIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICi0Jc3RhLT5wbGlua19zdGF0ZSA9IFBMSU5LX0xJU1RFTjsKKwlzdGEtPnBsaW5rX3N0YXRlID0gTkw4MDIxMV9QTElOS19MSVNURU47CiAJaW5pdF90aW1lcigmc3RhLT5wbGlua190aW1lcik7CiAjZW5kaWYKIApAQCAtNTg0LDcgKzU5MCw2IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCiAJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmc3RhLT5wc190eF9idWYpKQogCQlyZXR1cm4gZmFsc2U7CkBAIC02MDEsNyArNjA2LDYgQEAKIAkJaWYgKCFza2IpCiAJCQlicmVhazsKIAotCQlzZGF0YSA9IHN0YS0+c2RhdGE7CiAJCWxvY2FsLT50b3RhbF9wc19idWZmZXJlZC0tOwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX1BTX0RFQlVHCiAJCXByaW50ayhLRVJOX0RFQlVHICJCdWZmZXJlZCBmcmFtZSBleHBpcmVkIChTVEEgJXBNKVxuIiwKQEAgLTYwOSw3ICs2MTMsOCBAQAogI2VuZGlmCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAotCQlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZzdGEtPnBzX3R4X2J1ZikpCisJCWlmIChza2JfcXVldWVfZW1wdHkoJnN0YS0+cHNfdHhfYnVmKSAmJgorCQkgICAgIXRlc3Rfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfUFNfRFJJVkVSX0JVRikpCiAJCQlzdGFfaW5mb19jbGVhcl90aW1fYml0KHN0YSk7CiAJfQogCkBAIC02NTAsMTAgKzY1NSwxMiBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwltdXRleF9sb2NrKCZsb2NhbC0+a2V5X210eCk7CiAJZm9yIChpID0gMDsgaSA8IE5VTV9ERUZBVUxUX0tFWVM7IGkrKykKLQkJaWVlZTgwMjExX2tleV9mcmVlKGxvY2FsLCBzdGEtPmd0a1tpXSk7CisJCV9faWVlZTgwMjExX2tleV9mcmVlKGtleV9tdHhfZGVyZWZlcmVuY2UobG9jYWwsIHN0YS0+Z3RrW2ldKSk7CiAJaWYgKHN0YS0+cHRrKQotCQlpZWVlODAyMTFfa2V5X2ZyZWUobG9jYWwsIHN0YS0+cHRrKTsKKwkJX19pZWVlODAyMTFfa2V5X2ZyZWUoa2V5X210eF9kZXJlZmVyZW5jZShsb2NhbCwgc3RhLT5wdGspKTsKKwltdXRleF91bmxvY2soJmxvY2FsLT5rZXlfbXR4KTsKIAogCXN0YS0+ZGVhZCA9IHRydWU7CiAKQEAgLTY5OCw2ICs3MDUsOCBAQAogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHICovCiAJY2FuY2VsX3dvcmtfc3luYygmc3RhLT5kcnZfdW5ibG9ja193ayk7CiAKKwljZmc4MDIxMV9kZWxfc3RhKHNkYXRhLT5kZXYsIHN0YS0+c3RhLmFkZHIsIEdGUF9LRVJORUwpOworCiAJcmF0ZV9jb250cm9sX3JlbW92ZV9zdGFfZGVidWdmcyhzdGEpOwogCWllZWU4MDIxMV9zdGFfZGVidWdmc19yZW1vdmUoc3RhKTsKIApAQCAtNzY2LDkgKzc3NSw4IEBACiAJaWYgKCF0aW1lcl9uZWVkZWQpCiAJCXJldHVybjsKIAotCWxvY2FsLT5zdGFfY2xlYW51cC5leHBpcmVzID0KLQkJcm91bmRfamlmZmllcyhqaWZmaWVzICsgU1RBX0lORk9fQ0xFQU5VUF9JTlRFUlZBTCk7Ci0JYWRkX3RpbWVyKCZsb2NhbC0+c3RhX2NsZWFudXApOworCW1vZF90aW1lcigmbG9jYWwtPnN0YV9jbGVhbnVwLAorCQkgIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIFNUQV9JTkZPX0NMRUFOVVBfSU5URVJWQUwpKTsKIH0KIAogdm9pZCBzdGFfaW5mb19pbml0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQpAQCAtNzgxLDE0ICs3ODksNiBAQAogCiAJc2V0dXBfdGltZXIoJmxvY2FsLT5zdGFfY2xlYW51cCwgc3RhX2luZm9fY2xlYW51cCwKIAkJICAgICh1bnNpZ25lZCBsb25nKWxvY2FsKTsKLQlsb2NhbC0+c3RhX2NsZWFudXAuZXhwaXJlcyA9Ci0JCXJvdW5kX2ppZmZpZXMoamlmZmllcyArIFNUQV9JTkZPX0NMRUFOVVBfSU5URVJWQUwpOwotfQotCi1pbnQgc3RhX2luZm9fc3RhcnQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCi17Ci0JYWRkX3RpbWVyKCZsb2NhbC0+c3RhX2NsZWFudXApOwotCXJldHVybiAwOwogfQogCiB2b2lkIHN0YV9pbmZvX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCkBAIC05MDAsNiArOTAwLDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlpbnQgc2VudCwgYnVmZmVyZWQ7CiAKKwljbGVhcl9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9QU19EUklWRVJfQlVGKTsKIAlpZiAoIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfQVBfTElOS19QUykpCiAJCWRydl9zdGFfbm90aWZ5KGxvY2FsLCBzZGF0YSwgU1RBX05PVElGWV9BV0FLRSwgJnN0YS0+c3RhKTsKIApAQCAtOTkyLDMgKzk5MywxMiBAQAogCQlpZWVlODAyMTFfcXVldWVfd29yayhodywgJnN0YS0+ZHJ2X3VuYmxvY2tfd2spOwogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RhX2Jsb2NrX2F3YWtlKTsKKwordm9pZCBpZWVlODAyMTFfc3RhX3NldF90aW0oc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSkKK3sKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGNvbnRhaW5lcl9vZihwdWJzdGEsIHN0cnVjdCBzdGFfaW5mbywgc3RhKTsKKworCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9QU19EUklWRVJfQlVGKTsKKwlzdGFfaW5mb19zZXRfdGltX2JpdChzdGEpOworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RhX3NldF90aW0pOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmggYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uaAppbmRleCBiMmY5NTk2Li5jNmFlODcxIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uaAorKysgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uaApAQCAtNDMsNiArNDMsOCBAQAogICoJYmUgaW4gdGhlIHF1ZXVlcwogICogQFdMQU5fU1RBX1BTUE9MTDogU3RhdGlvbiBzZW50IFBTLXBvbGwgd2hpbGUgZHJpdmVyIHdhcyBrZWVwaW5nCiAgKglzdGF0aW9uIGluIHBvd2VyLXNhdmUgbW9kZSwgcmVwbHkgd2hlbiB0aGUgZHJpdmVyIHVuYmxvY2tzLgorICogQFdMQU5fU1RBX1BTX0RSSVZFUl9CVUY6IFN0YXRpb24gaGFzIGZyYW1lcyBwZW5kaW5nIGluIGRyaXZlciBpbnRlcm5hbAorICoJYnVmZmVycy4gQXV0b21hdGljYWxseSBjbGVhcmVkIG9uIHN0YXRpb24gd2FrZS11cC4KICAqLwogZW51bSBpZWVlODAyMTFfc3RhX2luZm9fZmxhZ3MgewogCVdMQU5fU1RBX0FVVEgJCT0gMTw8MCwKQEAgLTU4LDYgKzYwLDcgQEAKIAlXTEFOX1NUQV9CTE9DS19CQQk9IDE8PDExLAogCVdMQU5fU1RBX1BTX0RSSVZFUgk9IDE8PDEyLAogCVdMQU5fU1RBX1BTUE9MTAkJPSAxPDwxMywKKwlXTEFOX1NUQV9QU19EUklWRVJfQlVGCT0gMTw8MTQsCiB9OwogCiAjZGVmaW5lIFNUQV9USURfTlVNIDE2CkBAIC0xNDksNiArMTUyLDcgQEAKICAqCiAgKiBAdGlkX3J4OiBhZ2dyZWdhdGlvbiBpbmZvIGZvciBSeCBwZXIgVElEIC0tIFJDVSBwcm90ZWN0ZWQKICAqIEB0aWRfdHg6IGFnZ3JlZ2F0aW9uIGluZm8gZm9yIFR4IHBlciBUSUQKKyAqIEB0aWRfc3RhcnRfdHg6IHNlc3Npb25zIHdoZXJlIHN0YXJ0IHdhcyByZXF1ZXN0ZWQKICAqIEBhZGRiYV9yZXFfbnVtOiBudW1iZXIgb2YgdGltZXMgYWRkQkEgcmVxdWVzdCBoYXMgYmVlbiBzZW50LgogICogQGRpYWxvZ190b2tlbl9hbGxvY2F0b3I6IGRpYWxvZyB0b2tlbiBlbnVtZXJhdG9yIGZvciBlYWNoIG5ldyBzZXNzaW9uOwogICogQHdvcms6IHdvcmsgc3RydWN0IGZvciBzdGFydGluZy9zdG9wcGluZyBhZ2dyZWdhdGlvbgpAQCAtMTYwLDQwICsxNjQsMTggQEAKIHN0cnVjdCBzdGFfYW1wZHVfbWxtZSB7CiAJc3RydWN0IG11dGV4IG10eDsKIAkvKiByeCAqLwotCXN0cnVjdCB0aWRfYW1wZHVfcnggKnRpZF9yeFtTVEFfVElEX05VTV07CisJc3RydWN0IHRpZF9hbXBkdV9yeCBfX3JjdSAqdGlkX3J4W1NUQV9USURfTlVNXTsKIAl1bnNpZ25lZCBsb25nIHRpZF9yeF90aW1lcl9leHBpcmVkW0JJVFNfVE9fTE9OR1MoU1RBX1RJRF9OVU0pXTsKIAkvKiB0eCAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwotCXN0cnVjdCB0aWRfYW1wZHVfdHggKnRpZF90eFtTVEFfVElEX05VTV07CisJc3RydWN0IHRpZF9hbXBkdV90eCBfX3JjdSAqdGlkX3R4W1NUQV9USURfTlVNXTsKKwlzdHJ1Y3QgdGlkX2FtcGR1X3R4ICp0aWRfc3RhcnRfdHhbU1RBX1RJRF9OVU1dOwogCXU4IGFkZGJhX3JlcV9udW1bU1RBX1RJRF9OVU1dOwogCXU4IGRpYWxvZ190b2tlbl9hbGxvY2F0b3I7CiB9OwogCiAKIC8qKgotICogZW51bSBwbGlua19zdGF0ZSAtIHN0YXRlIG9mIGEgbWVzaCBwZWVyIGxpbmsgZmluaXRlIHN0YXRlIG1hY2hpbmUKLSAqCi0gKiBAUExJTktfTElTVEVOOiBpbml0aWFsIHN0YXRlLCBjb25zaWRlcmVkIHRoZSBpbXBsaWNpdCBzdGF0ZSBvZiBub24gZXhpc3RlbnQKLSAqIAltZXNoIHBlZXIgbGlua3MKLSAqIEBQTElOS19PUE5fU05UOiBtZXNoIHBsaW5rIG9wZW4gZnJhbWUgaGFzIGJlZW4gc2VudCB0byB0aGlzIG1lc2ggcGVlcgotICogQFBMSU5LX09QTl9SQ1ZEOiBtZXNoIHBsaW5rIG9wZW4gZnJhbWUgaGFzIGJlZW4gcmVjZWl2ZWQgZnJvbSB0aGlzIG1lc2ggcGVlcgotICogQFBMSU5LX0NORl9SQ1ZEOiBtZXNoIHBsaW5rIGNvbmZpcm0gZnJhbWUgaGFzIGJlZW4gcmVjZWl2ZWQgZnJvbSB0aGlzIG1lc2gKLSAqIAlwZWVyCi0gKiBAUExJTktfRVNUQUI6IG1lc2ggcGVlciBsaW5rIGlzIGVzdGFibGlzaGVkCi0gKiBAUExJTktfSE9MRElORzogbWVzaCBwZWVyIGxpbmsgaXMgYmVpbmcgY2xvc2VkIG9yIGNhbmNlbGxlZAotICogQFBMSU5LX0JMT0NLRUQ6IGFsbCBmcmFtZXMgdHJhbnNtaXR0ZWQgZnJvbSB0aGlzIG1lc2ggcGxpbmsgYXJlIGRpc2NhcmRlZAotICovCi1lbnVtIHBsaW5rX3N0YXRlIHsKLQlQTElOS19MSVNURU4sCi0JUExJTktfT1BOX1NOVCwKLQlQTElOS19PUE5fUkNWRCwKLQlQTElOS19DTkZfUkNWRCwKLQlQTElOS19FU1RBQiwKLQlQTElOS19IT0xESU5HLAotCVBMSU5LX0JMT0NLRUQKLX07Ci0KLS8qKgogICogc3RydWN0IHN0YV9pbmZvIC0gU1RBIGluZm9ybWF0aW9uCiAgKgogICogVGhpcyBzdHJ1Y3R1cmUgY29sbGVjdHMgaW5mb3JtYXRpb24gYWJvdXQgYSBzdGF0aW9uIHRoYXQKQEAgLTIyNiw2ICsyMDgsNyBAQAogICogQHJ4X2J5dGVzOiBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQgZnJvbSB0aGlzIFNUQQogICogQHdlcF93ZWFrX2l2X2NvdW50OiBudW1iZXIgb2Ygd2VhayBXRVAgSVZzIHJlY2VpdmVkIGZyb20gdGhpcyBzdGF0aW9uCiAgKiBAbGFzdF9yeDogdGltZSAoaW4gamlmZmllcykgd2hlbiBsYXN0IGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tIHRoaXMgU1RBCisgKiBAbGFzdF9jb25uZWN0ZWQ6IHRpbWUgKGluIHNlY29uZHMpIHdoZW4gYSBzdGF0aW9uIGdvdCBjb25uZWN0ZWQKICAqIEBudW1fZHVwbGljYXRlczogbnVtYmVyIG9mIGR1cGxpY2F0ZSBmcmFtZXMgcmVjZWl2ZWQgZnJvbSB0aGlzIFNUQQogICogQHJ4X2ZyYWdtZW50czogbnVtYmVyIG9mIHJlY2VpdmVkIE1QRFVzCiAgKiBAcnhfZHJvcHBlZDogbnVtYmVyIG9mIGRyb3BwZWQgTVBEVXMgZnJvbSB0aGlzIFNUQQpAQCAtMjYwLDExICsyNDMsMTEgQEAKIHN0cnVjdCBzdGFfaW5mbyB7CiAJLyogR2VuZXJhbCBpbmZvcm1hdGlvbiwgbW9zdGx5IHN0YXRpYyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3Qgc3RhX2luZm8gKmhuZXh0OworCXN0cnVjdCBzdGFfaW5mbyBfX3JjdSAqaG5leHQ7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9rZXkgKmd0a1tOVU1fREVGQVVMVF9LRVlTICsgTlVNX0RFRkFVTFRfTUdNVF9LRVlTXTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqcHRrOworCXN0cnVjdCBpZWVlODAyMTFfa2V5IF9fcmN1ICpndGtbTlVNX0RFRkFVTFRfS0VZUyArIE5VTV9ERUZBVUxUX01HTVRfS0VZU107CisJc3RydWN0IGllZWU4MDIxMV9rZXkgX19yY3UgKnB0azsKIAlzdHJ1Y3QgcmF0ZV9jb250cm9sX3JlZiAqcmF0ZV9jdHJsOwogCXZvaWQgKnJhdGVfY3RybF9wcml2OwogCXNwaW5sb2NrX3QgbG9jazsKQEAgLTI5NSw2ICsyNzgsNyBAQAogCXVuc2lnbmVkIGxvbmcgcnhfcGFja2V0cywgcnhfYnl0ZXM7CiAJdW5zaWduZWQgbG9uZyB3ZXBfd2Vha19pdl9jb3VudDsKIAl1bnNpZ25lZCBsb25nIGxhc3Rfcng7CisJbG9uZyBsYXN0X2Nvbm5lY3RlZDsKIAl1bnNpZ25lZCBsb25nIG51bV9kdXBsaWNhdGVzOwogCXVuc2lnbmVkIGxvbmcgcnhfZnJhZ21lbnRzOwogCXVuc2lnbmVkIGxvbmcgcnhfZHJvcHBlZDsKQEAgLTMzNCw3ICszMTgsNyBAQAogCXU4IHBsaW5rX3JldHJpZXM7CiAJYm9vbCBpZ25vcmVfcGxpbmtfdGltZXI7CiAJYm9vbCBwbGlua190aW1lcl93YXNfcnVubmluZzsKLQllbnVtIHBsaW5rX3N0YXRlIHBsaW5rX3N0YXRlOworCWVudW0gbmw4MDIxMV9wbGlua19zdGF0ZSBwbGlua19zdGF0ZTsKIAl1MzIgcGxpbmtfdGltZW91dDsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBwbGlua190aW1lcjsKICNlbmRpZgpAQCAtMzUyLDEyICszMzYsMTIgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3N0YSBzdGE7CiB9OwogCi1zdGF0aWMgaW5saW5lIGVudW0gcGxpbmtfc3RhdGUgc3RhX3BsaW5rX3N0YXRlKHN0cnVjdCBzdGFfaW5mbyAqc3RhKQorc3RhdGljIGlubGluZSBlbnVtIG5sODAyMTFfcGxpbmtfc3RhdGUgc3RhX3BsaW5rX3N0YXRlKHN0cnVjdCBzdGFfaW5mbyAqc3RhKQogewogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICiAJcmV0dXJuIHN0YS0+cGxpbmtfc3RhdGU7CiAjZW5kaWYKLQlyZXR1cm4gUExJTktfTElTVEVOOworCXJldHVybiBOTDgwMjExX1BMSU5LX0xJU1RFTjsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9zdGFfZmxhZ3Moc3RydWN0IHN0YV9pbmZvICpzdGEsIGNvbnN0IHUzMiBmbGFncykKQEAgLTQxNiw3ICs0MDAsMTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCit2b2lkIGllZWU4MDIxMV9hc3NpZ25fdGlkX3R4KHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBpbnQgdGlkLAorCQkJICAgICBzdHJ1Y3QgdGlkX2FtcGR1X3R4ICp0aWRfdHgpOwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0aWRfYW1wZHVfdHggKgorcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZF90aWRfdHgoc3RydWN0IHN0YV9pbmZvICpzdGEsIGludCB0aWQpCit7CisJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLAorCQkJCQkgbG9ja2RlcF9pc19oZWxkKCZzdGEtPmxvY2spIHx8CisJCQkJCSBsb2NrZGVwX2lzX2hlbGQoJnN0YS0+YW1wZHVfbWxtZS5tdHgpKTsKK30KIAogI2RlZmluZSBTVEFfSEFTSF9TSVpFIDI1NgogI2RlZmluZSBTVEFfSEFTSChzdGEpIChzdGFbNV0pCkBAIC00OTcsNyArNDkwLDYgQEAKIHZvaWQgc3RhX2luZm9fY2xlYXJfdGltX2JpdChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CiAKIHZvaWQgc3RhX2luZm9faW5pdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7Ci1pbnQgc3RhX2luZm9fc3RhcnQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwogdm9pZCBzdGFfaW5mb19zdG9wKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKIGludCBzdGFfaW5mb19mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YXR1cy5jIGIvbmV0L21hYzgwMjExL3N0YXR1cy5jCmluZGV4IGI5MzZkZDIuLjE2NThlZmEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zdGF0dXMuYworKysgYi9uZXQvbWFjODAyMTEvc3RhdHVzLmMKQEAgLTE4OSwxNiArMTg5LDE5IEBACiAJYm9vbCBhY2tlZDsKIAogCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfVFhfTUFYX1JBVEVTOyBpKyspIHsKLQkJLyogdGhlIEhXIGNhbm5vdCBoYXZlIGF0dGVtcHRlZCB0aGF0IHJhdGUgKi8KLQkJaWYgKGkgPj0gaHctPm1heF9yZXBvcnRfcmF0ZXMpIHsKKwkJaWYgKGluZm8tPnN0YXR1cy5yYXRlc1tpXS5pZHggPCAwKSB7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChpID49IGh3LT5tYXhfcmVwb3J0X3JhdGVzKSB7CisJCQkvKiB0aGUgSFcgY2Fubm90IGhhdmUgYXR0ZW1wdGVkIHRoYXQgcmF0ZSAqLwogCQkJaW5mby0+c3RhdHVzLnJhdGVzW2ldLmlkeCA9IC0xOwogCQkJaW5mby0+c3RhdHVzLnJhdGVzW2ldLmNvdW50ID0gMDsKLQkJfSBlbHNlIGlmIChpbmZvLT5zdGF0dXMucmF0ZXNbaV0uaWR4ID49IDApIHsKLQkJCXJhdGVzX2lkeCA9IGk7CisJCQlicmVhazsKIAkJfQogCiAJCXJldHJ5X2NvdW50ICs9IGluZm8tPnN0YXR1cy5yYXRlc1tpXS5jb3VudDsKIAl9CisJcmF0ZXNfaWR4ID0gaSAtIDE7CisKIAlpZiAocmV0cnlfY291bnQgPCAwKQogCQlyZXRyeV9jb3VudCA9IDA7CiAKQEAgLTQ0MywzICs0NDYsMTEgQEAKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV90eF9zdGF0dXMpOworCit2b2lkIGllZWU4MDIxMV9yZXBvcnRfbG93X2FjayhzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLCB1MzIgbnVtX3BhY2tldHMpCit7CisJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBjb250YWluZXJfb2YocHVic3RhLCBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7CisJY2ZnODAyMTFfY3FtX3BrdGxvc3Nfbm90aWZ5KHN0YS0+c2RhdGEtPmRldiwgc3RhLT5zdGEuYWRkciwKKwkJCQkgICAgbnVtX3BhY2tldHMsIEdGUF9BVE9NSUMpOworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcmVwb3J0X2xvd19hY2spOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3RraXAuYyBiL25ldC9tYWM4MDIxMS90a2lwLmMKaW5kZXggZTg0MGM5Yy4uNzU3ZTRlYiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3RraXAuYworKysgYi9uZXQvbWFjODAyMTEvdGtpcC5jCkBAIC0yMDIsNyArMjAyLDcgQEAKICAqIEBwYXlsb2FkX2xlbiBpcyB0aGUgbGVuZ3RoIG9mIHBheWxvYWQgKF9ub3RfIGluY2x1ZGluZyBJVi9JQ1YgbGVuZ3RoKS4KICAqIEB0YSBpcyB0aGUgdHJhbnNtaXR0ZXIgYWRkcmVzc2VzLgogICovCi1pbnQgaWVlZTgwMjExX3RraXBfZW5jcnlwdF9kYXRhKHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0sCitpbnQgaWVlZTgwMjExX3RraXBfZW5jcnlwdF9kYXRhKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0sCiAJCQkJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwKIAkJCQl1OCAqcG9zLCBzaXplX3QgcGF5bG9hZF9sZW4sIHU4ICp0YSkKIHsKQEAgLTIyMyw3ICsyMjMsNyBAQAogICogYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIgY29udGFpbmluZyBJRUVFIDgwMi4xMSBoZWFkZXIgcGF5bG9hZCwgaS5lLiwKICAqIGluY2x1ZGluZyBJViwgRXh0LiBJViwgcmVhbCBkYXRhLCBNaWNoYWVsIE1JQywgSUNWLiBAcGF5bG9hZF9sZW4gaXMgdGhlCiAgKiBsZW5ndGggb2YgcGF5bG9hZCwgaW5jbHVkaW5nIElWLCBFeHQuIElWLCBNSUMsIElDVi4gICovCi1pbnQgaWVlZTgwMjExX3RraXBfZGVjcnlwdF9kYXRhKHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0sCitpbnQgaWVlZTgwMjExX3RraXBfZGVjcnlwdF9kYXRhKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0sCiAJCQkJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwKIAkJCQl1OCAqcGF5bG9hZCwgc2l6ZV90IHBheWxvYWRfbGVuLCB1OCAqdGEsCiAJCQkJdTggKnJhLCBpbnQgb25seV9pdiwgaW50IHF1ZXVlLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3RraXAuaCBiL25ldC9tYWM4MDIxMS90a2lwLmgKaW5kZXggN2U4M2RlZS4uMWNhYjljOCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3RraXAuaAorKysgYi9uZXQvbWFjODAyMTEvdGtpcC5oCkBAIC0xNSw3ICsxNSw3IEBACiAKIHU4ICppZWVlODAyMTFfdGtpcF9hZGRfaXYodTggKnBvcywgc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwgdTE2IGl2MTYpOwogCi1pbnQgaWVlZTgwMjExX3RraXBfZW5jcnlwdF9kYXRhKHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0sCitpbnQgaWVlZTgwMjExX3RraXBfZW5jcnlwdF9kYXRhKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0sCiAJCQkJIHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksCiAJCQkJIHU4ICpwb3MsIHNpemVfdCBwYXlsb2FkX2xlbiwgdTggKnRhKTsKIGVudW0gewpAQCAtMjQsNyArMjQsNyBAQAogCVRLSVBfREVDUllQVF9JTlZBTElEX0tFWUlEWCA9IC0yLAogCVRLSVBfREVDUllQVF9SRVBMQVkgPSAtMywKIH07Ci1pbnQgaWVlZTgwMjExX3RraXBfZGVjcnlwdF9kYXRhKHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0sCitpbnQgaWVlZTgwMjExX3RraXBfZGVjcnlwdF9kYXRhKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0sCiAJCQkJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSwKIAkJCQl1OCAqcGF5bG9hZCwgc2l6ZV90IHBheWxvYWRfbGVuLCB1OCAqdGEsCiAJCQkJdTggKnJhLCBpbnQgb25seV9pdiwgaW50IHF1ZXVlLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguYwppbmRleCBjZTQ1OTZlLi42NGUwZjc1IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdHguYworKysgYi9uZXQvbWFjODAyMTEvdHguYwpAQCAtMjM3LDYgKzIzNywxMCBAQAogCQkJCSAgICAgJmxvY2FsLT5keW5hbWljX3BzX2Rpc2FibGVfd29yayk7CiAJfQogCisJLyogRG9uJ3QgcmVzdGFydCB0aGUgdGltZXIgaWYgd2UncmUgbm90IGRpc2Fzc29jaWF0ZWQgKi8KKwlpZiAoIWlmbWdkLT5hc3NvY2lhdGVkKQorCQlyZXR1cm4gVFhfQ09OVElOVUU7CisKIAltb2RfdGltZXIoJmxvY2FsLT5keW5hbWljX3BzX3RpbWVyLCBqaWZmaWVzICsKIAkJICBtc2Vjc190b19qaWZmaWVzKGxvY2FsLT5ody5jb25mLmR5bmFtaWNfcHNfdGltZW91dCkpOwogCkBAIC0xMDM2LDE0ICsxMDQwLDExIEBACiAJc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvciBpdGVyYXRvcjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcnRoZHIgPQogCQkoc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgKikgc2tiLT5kYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwogCWJvb2wgaHdfZnJhZzsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJaW50IHJldCA9IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvcl9pbml0KCZpdGVyYXRvciwgcnRoZHIsIHNrYi0+bGVuLAogCQkJCQkJICAgTlVMTCk7CiAKLQlzYmFuZCA9IHR4LT5sb2NhbC0+aHcud2lwaHktPmJhbmRzW3R4LT5jaGFubmVsLT5iYW5kXTsKLQogCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQ7CiAJdHgtPmZsYWdzICY9IH5JRUVFODAyMTFfVFhfRlJBR01FTlRFRDsKIApAQCAtMTE1MCw3ICsxMTUxLDcgQEAKIAkJICogICAgIHBhY2tldCBwYXNzIHRocm91Z2ggYmVjYXVzZSBzcGxpY2luZyB0aGUgZnJhbWVzCiAJCSAqICAgICBiYWNrIGlzIGFscmVhZHkgZG9uZS4KIAkJICovCi0JCXRpZF90eCA9IHR4LT5zdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF07CisJCXRpZF90eCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWRfdGlkX3R4KHR4LT5zdGEsIHRpZCk7CiAKIAkJaWYgKCF0aWRfdHgpIHsKIAkJCS8qIGRvIG5vdGhpbmcsIGxldCBwYWNrZXQgcGFzcyB0aHJvdWdoICovCkBAIC0xNDQyLDExICsxNDQzLDggQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgdHg7CiAJaWVlZTgwMjExX3R4X3Jlc3VsdCByZXNfcHJlcGFyZTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0JdTE2IHF1ZXVlOwogCWJvb2wgcmVzdWx0ID0gdHJ1ZTsKIAotCXF1ZXVlID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7Ci0KIAlpZiAodW5saWtlbHkoc2tiLT5sZW4gPCAxMCkpIHsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gdHJ1ZTsKQEAgLTE0ODIsMTIgKzE0ODAsNyBAQAogewogCWludCB0YWlsX25lZWQgPSAwOwogCi0JLyoKLQkgKiBUaGlzIGNvdWxkIGJlIG9wdGltaXNlZCwgZGV2aWNlcyB0aGF0IGRvIGZ1bGwgaGFyZHdhcmUKLQkgKiBjcnlwdG8gKGluY2x1ZGluZyBUS0lQIE1NSUMpIG5lZWQgbm8gdGFpbHJvb20uLi4gQnV0IHdlCi0JICogaGF2ZSBubyBkcml2ZXJzIGZvciBzdWNoIGRldmljZXMgY3VycmVudGx5LgotCSAqLwotCWlmIChtYXlfZW5jcnlwdCkgeworCWlmIChtYXlfZW5jcnlwdCAmJiBsb2NhbC0+Y3J5cHRvX3R4X3RhaWxyb29tX25lZWRlZF9jbnQpIHsKIAkJdGFpbF9uZWVkID0gSUVFRTgwMjExX0VOQ1JZUFRfVEFJTFJPT007CiAJCXRhaWxfbmVlZCAtPSBza2JfdGFpbHJvb20oc2tiKTsKIAkJdGFpbF9uZWVkID0gbWF4X3QoaW50LCB0YWlsX25lZWQsIDApOwpAQCAtMTc2Miw2ICsxNzU1LDcgQEAKIAkJCXJldCA9IE5FVERFVl9UWF9PSzsKIAkJCWdvdG8gZmFpbDsKIAkJfQorCQlyY3VfcmVhZF9sb2NrKCk7CiAJCWlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoc2tiLT5kYXRhKSkKIAkJCW1wcGF0aCA9IG1wcF9wYXRoX2xvb2t1cChza2ItPmRhdGEsIHNkYXRhKTsKIApAQCAtMTc3NiwxMyArMTc3MCwxMyBAQAogCQkgICAgIShtcHBhdGggJiYgY29tcGFyZV9ldGhlcl9hZGRyKG1wcGF0aC0+bXBwLCBza2ItPmRhdGEpKSkgewogCQkJaGRybGVuID0gaWVlZTgwMjExX2ZpbGxfbWVzaF9hZGRyZXNzZXMoJmhkciwgJmZjLAogCQkJCQlza2ItPmRhdGEsIHNrYi0+ZGF0YSArIEVUSF9BTEVOKTsKKwkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJbWVzaGhkcmxlbiA9IGllZWU4MDIxMV9uZXdfbWVzaF9oZWFkZXIoJm1lc2hfaGRyLAogCQkJCQlzZGF0YSwgTlVMTCwgTlVMTCk7CiAJCX0gZWxzZSB7CiAJCQlpbnQgaXNfbWVzaF9tY2FzdCA9IDE7CiAJCQljb25zdCB1OCAqbWVzaF9kYTsKIAotCQkJcmN1X3JlYWRfbG9jaygpOwogCQkJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHNrYi0+ZGF0YSkpCiAJCQkJLyogREEgVEEgbVNBIEFFOlNBICovCiAJCQkJbWVzaF9kYSA9IHNrYi0+ZGF0YTsKQEAgLTIyNjIsNyArMjI1Niw3IEBACiAKIAkJLyogaGVhZHJvb20sIGhlYWQgbGVuZ3RoLCB0YWlsIGxlbmd0aCBhbmQgbWF4aW11bSBUSU0gbGVuZ3RoICovCiAJCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPnR4X2hlYWRyb29tICsgNDAwICsKLQkJCQlzZGF0YS0+dS5tZXNoLnZlbmRvcl9pZV9sZW4pOworCQkJCXNkYXRhLT51Lm1lc2guaWVfbGVuKTsKIAkJaWYgKCFza2IpCiAJCQlnb3RvIG91dDsKIApAQCAtMjQ4NSw3ICsyNDc5LDYgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgdHg7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9hcCAqYnNzID0gTlVMTDsKQEAgLTI1MjcsNyArMjUyMCw2IEBACiAKIAlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCi0Jc3RhID0gdHguc3RhOwogCXR4LmZsYWdzIHw9IElFRUU4MDIxMV9UWF9QU19CVUZGRVJFRDsKIAl0eC5jaGFubmVsID0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbDsKIAlpbmZvLT5iYW5kID0gdHguY2hhbm5lbC0+YmFuZDsKQEAgLTI1NDcsOCArMjUzOSw5IEBACiAJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIDApOwogCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIDApOwogCi0JLyogc2VuZCBhbGwgaW50ZXJuYWwgbWdtdCBmcmFtZXMgb24gVk8gKi8KLQlza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCAwKTsKKwkvKiBTZW5kIGFsbCBpbnRlcm5hbCBtZ210IGZyYW1lcyBvbiBWTy4gQWNjb3JkaW5nbHkgc2V0IFRJRCB0byA3LiAqLworCXNrYl9zZXRfcXVldWVfbWFwcGluZyhza2IsIElFRUU4MDIxMV9BQ19WTyk7CisJc2tiLT5wcmlvcml0eSA9IDc7CiAKIAkvKgogCSAqIFRoZSBvdGhlciBwYXRoIGNhbGxpbmcgaWVlZTgwMjExX3htaXQgaXMgZnJvbSB0aGUgdGFza2xldCwKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS91dGlsLmMgYi9uZXQvbWFjODAyMTEvdXRpbC5jCmluZGV4IDU1NjY0N2EuLmQzZmUyZDIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS91dGlsLmMKKysrIGIvbmV0L21hYzgwMjExL3V0aWwuYwpAQCAtMTEyNSw5ICsxMTI1LDI3IEBACiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJaW50IHJlczsKIAorI2lmZGVmIENPTkZJR19QTQogCWlmIChsb2NhbC0+c3VzcGVuZGVkKQogCQlsb2NhbC0+cmVzdW1pbmcgPSB0cnVlOwogCisJaWYgKGxvY2FsLT53b3dsYW4pIHsKKwkJbG9jYWwtPndvd2xhbiA9IGZhbHNlOworCQlyZXMgPSBkcnZfcmVzdW1lKGxvY2FsKTsKKwkJaWYgKHJlcyA8IDApIHsKKwkJCWxvY2FsLT5yZXN1bWluZyA9IGZhbHNlOworCQkJcmV0dXJuIHJlczsKKwkJfQorCQlpZiAocmVzID09IDApCisJCQlnb3RvIHdha2VfdXA7CisJCVdBUk5fT04ocmVzID4gMSk7CisJCS8qCisJCSAqIHJlcyBpcyAxLCB3aGljaCBtZWFucyB0aGUgZHJpdmVyIHJlcXVlc3RlZAorCQkgKiB0byBnbyB0aHJvdWdoIGEgcmVndWxhciByZXNldCBvbiB3YWtldXAuCisJCSAqLworCX0KKyNlbmRpZgorCiAJLyogcmVzdGFydCBoYXJkd2FyZSAqLwogCWlmIChsb2NhbC0+b3Blbl9jb3VudCkgewogCQkvKgpAQCAtMTI1OCw2ICsxMjc2LDcgQEAKIAkJaWYgKGllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKIAkJCWllZWU4MDIxMV9lbmFibGVfa2V5cyhzZGF0YSk7CiAKKyB3YWtlX3VwOgogCWllZWU4MDIxMV93YWtlX3F1ZXVlc19ieV9yZWFzb24oaHcsCiAJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fU1VTUEVORCk7CiAKQEAgLTEyOTAsNyArMTMwOSw3IEBACiAJCX0KIAl9CiAKLQlhZGRfdGltZXIoJmxvY2FsLT5zdGFfY2xlYW51cCk7CisJbW9kX3RpbWVyKCZsb2NhbC0+c3RhX2NsZWFudXAsIGppZmZpZXMgKyAxKTsKIAogCW11dGV4X2xvY2soJmxvY2FsLT5zdGFfbXR4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN0YSwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93ZXAuYyBiL25ldC9tYWM4MDIxMS93ZXAuYwppbmRleCAyZmY2ZDFlLi5hMWM2YmZkIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd2VwLmMKKysrIGIvbmV0L21hYzgwMjExL3dlcC5jCkBAIC0zMCwxNyArMzAsMTUgQEAKIAkvKiBzdGFydCBXRVAgSVYgZnJvbSBhIHJhbmRvbSB2YWx1ZSAqLwogCWdldF9yYW5kb21fYnl0ZXMoJmxvY2FsLT53ZXBfaXYsIFdFUF9JVl9MRU4pOwogCi0JbG9jYWwtPndlcF90eF90Zm0gPSBjcnlwdG9fYWxsb2NfYmxrY2lwaGVyKCJlY2IoYXJjNCkiLCAwLAotCQkJCQkJQ1JZUFRPX0FMR19BU1lOQyk7CisJbG9jYWwtPndlcF90eF90Zm0gPSBjcnlwdG9fYWxsb2NfY2lwaGVyKCJhcmM0IiwgMCwgQ1JZUFRPX0FMR19BU1lOQyk7CiAJaWYgKElTX0VSUihsb2NhbC0+d2VwX3R4X3RmbSkpIHsKIAkJbG9jYWwtPndlcF9yeF90Zm0gPSBFUlJfUFRSKC1FSU5WQUwpOwogCQlyZXR1cm4gUFRSX0VSUihsb2NhbC0+d2VwX3R4X3RmbSk7CiAJfQogCi0JbG9jYWwtPndlcF9yeF90Zm0gPSBjcnlwdG9fYWxsb2NfYmxrY2lwaGVyKCJlY2IoYXJjNCkiLCAwLAotCQkJCQkJQ1JZUFRPX0FMR19BU1lOQyk7CisJbG9jYWwtPndlcF9yeF90Zm0gPSBjcnlwdG9fYWxsb2NfY2lwaGVyKCJhcmM0IiwgMCwgQ1JZUFRPX0FMR19BU1lOQyk7CiAJaWYgKElTX0VSUihsb2NhbC0+d2VwX3J4X3RmbSkpIHsKLQkJY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKGxvY2FsLT53ZXBfdHhfdGZtKTsKKwkJY3J5cHRvX2ZyZWVfY2lwaGVyKGxvY2FsLT53ZXBfdHhfdGZtKTsKIAkJbG9jYWwtPndlcF90eF90Zm0gPSBFUlJfUFRSKC1FSU5WQUwpOwogCQlyZXR1cm4gUFRSX0VSUihsb2NhbC0+d2VwX3J4X3RmbSk7CiAJfQpAQCAtNTEsOSArNDksOSBAQAogdm9pZCBpZWVlODAyMTFfd2VwX2ZyZWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CiAJaWYgKCFJU19FUlIobG9jYWwtPndlcF90eF90Zm0pKQotCQljcnlwdG9fZnJlZV9ibGtjaXBoZXIobG9jYWwtPndlcF90eF90Zm0pOworCQljcnlwdG9fZnJlZV9jaXBoZXIobG9jYWwtPndlcF90eF90Zm0pOwogCWlmICghSVNfRVJSKGxvY2FsLT53ZXBfcnhfdGZtKSkKLQkJY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKGxvY2FsLT53ZXBfcnhfdGZtKTsKKwkJY3J5cHRvX2ZyZWVfY2lwaGVyKGxvY2FsLT53ZXBfcnhfdGZtKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV93ZXBfd2Vha19pdih1MzIgaXYsIGludCBrZXlsZW4pCkBAIC0xMjcsMTIgKzEyNSwxMSBAQAogLyogUGVyZm9ybSBXRVAgZW5jcnlwdGlvbiB1c2luZyBnaXZlbiBrZXkuIGRhdGEgYnVmZmVyIG11c3QgaGF2ZSB0YWlscm9vbQogICogZm9yIDQtYnl0ZSBJQ1YuIGRhdGFfbGVuIG11c3Qgbm90IGluY2x1ZGUgdGhpcyBJQ1YuIE5vdGU6IHRoaXMgZnVuY3Rpb24KICAqIGRvZXMgX25vdF8gYWRkIElWLiBkYXRhID0gUkM0KGRhdGEgfCBDUkMzMihkYXRhKSkgKi8KLWludCBpZWVlODAyMTFfd2VwX2VuY3J5cHRfZGF0YShzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtLCB1OCAqcmM0a2V5LAoraW50IGllZWU4MDIxMV93ZXBfZW5jcnlwdF9kYXRhKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0sIHU4ICpyYzRrZXksCiAJCQkgICAgICAgc2l6ZV90IGtsZW4sIHU4ICpkYXRhLCBzaXplX3QgZGF0YV9sZW4pCiB7Ci0Jc3RydWN0IGJsa2NpcGhlcl9kZXNjIGRlc2MgPSB7IC50Zm0gPSB0Zm0gfTsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CiAJX19sZTMyIGljdjsKKwlpbnQgaTsKIAogCWlmIChJU19FUlIodGZtKSkKIAkJcmV0dXJuIC0xOwpAQCAtMTQwLDkgKzEzNyw5IEBACiAJaWN2ID0gY3B1X3RvX2xlMzIofmNyYzMyX2xlKH4wLCBkYXRhLCBkYXRhX2xlbikpOwogCXB1dF91bmFsaWduZWQoaWN2LCAoX19sZTMyICopKGRhdGEgKyBkYXRhX2xlbikpOwogCi0JY3J5cHRvX2Jsa2NpcGhlcl9zZXRrZXkodGZtLCByYzRrZXksIGtsZW4pOwotCXNnX2luaXRfb25lKCZzZywgZGF0YSwgZGF0YV9sZW4gKyBXRVBfSUNWX0xFTik7Ci0JY3J5cHRvX2Jsa2NpcGhlcl9lbmNyeXB0KCZkZXNjLCAmc2csICZzZywgc2cubGVuZ3RoKTsKKwljcnlwdG9fY2lwaGVyX3NldGtleSh0Zm0sIHJjNGtleSwga2xlbik7CisJZm9yIChpID0gMDsgaSA8IGRhdGFfbGVuICsgV0VQX0lDVl9MRU47IGkrKykKKwkJY3J5cHRvX2NpcGhlcl9lbmNyeXB0X29uZSh0Zm0sIGRhdGEgKyBpLCBkYXRhICsgaSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE4NiwxOSArMTgzLDE4IEBACiAvKiBQZXJmb3JtIFdFUCBkZWNyeXB0aW9uIHVzaW5nIGdpdmVuIGtleS4gZGF0YSBidWZmZXIgaW5jbHVkZXMgZW5jcnlwdGVkCiAgKiBwYXlsb2FkLCBpbmNsdWRpbmcgNC1ieXRlIElDViwgYnV0IF9ub3RfIElWLiBkYXRhX2xlbiBtdXN0IG5vdCBpbmNsdWRlIElDVi4KICAqIFJldHVybiAwIG9uIHN1Y2Nlc3MgYW5kIC0xIG9uIElDViBtaXNtYXRjaC4gKi8KLWludCBpZWVlODAyMTFfd2VwX2RlY3J5cHRfZGF0YShzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtLCB1OCAqcmM0a2V5LAoraW50IGllZWU4MDIxMV93ZXBfZGVjcnlwdF9kYXRhKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0sIHU4ICpyYzRrZXksCiAJCQkgICAgICAgc2l6ZV90IGtsZW4sIHU4ICpkYXRhLCBzaXplX3QgZGF0YV9sZW4pCiB7Ci0Jc3RydWN0IGJsa2NpcGhlcl9kZXNjIGRlc2MgPSB7IC50Zm0gPSB0Zm0gfTsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CiAJX19sZTMyIGNyYzsKKwlpbnQgaTsKIAogCWlmIChJU19FUlIodGZtKSkKIAkJcmV0dXJuIC0xOwogCi0JY3J5cHRvX2Jsa2NpcGhlcl9zZXRrZXkodGZtLCByYzRrZXksIGtsZW4pOwotCXNnX2luaXRfb25lKCZzZywgZGF0YSwgZGF0YV9sZW4gKyBXRVBfSUNWX0xFTik7Ci0JY3J5cHRvX2Jsa2NpcGhlcl9kZWNyeXB0KCZkZXNjLCAmc2csICZzZywgc2cubGVuZ3RoKTsKKwljcnlwdG9fY2lwaGVyX3NldGtleSh0Zm0sIHJjNGtleSwga2xlbik7CisJZm9yIChpID0gMDsgaSA8IGRhdGFfbGVuICsgV0VQX0lDVl9MRU47IGkrKykKKwkJY3J5cHRvX2NpcGhlcl9kZWNyeXB0X29uZSh0Zm0sIGRhdGEgKyBpLCBkYXRhICsgaSk7CiAKIAljcmMgPSBjcHVfdG9fbGUzMih+Y3JjMzJfbGUofjAsIGRhdGEsIGRhdGFfbGVuKSk7CiAJaWYgKG1lbWNtcCgmY3JjLCBkYXRhICsgZGF0YV9sZW4sIFdFUF9JQ1ZfTEVOKSAhPSAwKQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dlcC5oIGIvbmV0L21hYzgwMjExL3dlcC5oCmluZGV4IDU4NjU0ZWUuLjAxZTU0ODQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS93ZXAuaAorKysgYi9uZXQvbWFjODAyMTEvd2VwLmgKQEAgLTE4LDEyICsxOCwxMiBAQAogCiBpbnQgaWVlZTgwMjExX3dlcF9pbml0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKIHZvaWQgaWVlZTgwMjExX3dlcF9mcmVlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKLWludCBpZWVlODAyMTFfd2VwX2VuY3J5cHRfZGF0YShzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtLCB1OCAqcmM0a2V5LAoraW50IGllZWU4MDIxMV93ZXBfZW5jcnlwdF9kYXRhKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0sIHU4ICpyYzRrZXksCiAJCQkJc2l6ZV90IGtsZW4sIHU4ICpkYXRhLCBzaXplX3QgZGF0YV9sZW4pOwogaW50IGllZWU4MDIxMV93ZXBfZW5jcnlwdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgY29uc3QgdTggKmtleSwgaW50IGtleWxlbiwgaW50IGtleWlkeCk7Ci1pbnQgaWVlZTgwMjExX3dlcF9kZWNyeXB0X2RhdGEoc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbSwgdTggKnJjNGtleSwKK2ludCBpZWVlODAyMTFfd2VwX2RlY3J5cHRfZGF0YShzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtLCB1OCAqcmM0a2V5LAogCQkJICAgICAgIHNpemVfdCBrbGVuLCB1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuKTsKIGJvb2wgaWVlZTgwMjExX3dlcF9pc193ZWFrX2l2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpOwogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvd29yay5jIGIvbmV0L21hYzgwMjExL3dvcmsuYwppbmRleCBlNzNjOGNhLi5kMmU3ZjBlIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd29yay5jCisrKyBiL25ldC9tYWM4MDIxMS93b3JrLmMKQEAgLTY1LDE3ICs2NSw5IEBACiAJCW1vZF90aW1lcigmbG9jYWwtPndvcmtfdGltZXIsIHRpbWVvdXQpOwogfQogCi1zdGF0aWMgdm9pZCB3b3JrX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrID0KLQkJY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBpZWVlODAyMTFfd29yaywgcmN1X2hlYWQpOwotCi0Ja2ZyZWUod2spOwotfQotCiB2b2lkIGZyZWVfd29yayhzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrKQogewotCWNhbGxfcmN1KCZ3ay0+cmN1X2hlYWQsIHdvcmtfZnJlZV9yY3UpOworCWtmcmVlX3JjdSh3aywgcmN1X2hlYWQpOwogfQogCiBzdGF0aWMgaW50IGllZWU4MDIxMV9jb21wYXRpYmxlX3JhdGVzKGNvbnN0IHU4ICpzdXBwX3JhdGVzLCBpbnQgc3VwcF9yYXRlc19sZW4sCkBAIC0xOTgsOSArMTkwLDggQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKIAl1OCAqcG9zLCBxb3NfaW5mbzsKLQljb25zdCB1OCAqaWVzOwogCXNpemVfdCBvZmZzZXQgPSAwLCBub2Zmc2V0OwotCWludCBpLCBsZW4sIGNvdW50LCByYXRlc19sZW4sIHN1cHBfcmF0ZXNfbGVuOworCWludCBpLCBjb3VudCwgcmF0ZXNfbGVuLCBzdXBwX3JhdGVzX2xlbjsKIAl1MTYgY2FwYWI7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJdTMyIHJhdGVzID0gMDsKQEAgLTI4NSw3ICsyNzYsNyBAQAogCX0KIAogCS8qIFNTSUQgKi8KLQlpZXMgPSBwb3MgPSBza2JfcHV0KHNrYiwgMiArIHdrLT5hc3NvYy5zc2lkX2xlbik7CisJcG9zID0gc2tiX3B1dChza2IsIDIgKyB3ay0+YXNzb2Muc3NpZF9sZW4pOwogCSpwb3MrKyA9IFdMQU5fRUlEX1NTSUQ7CiAJKnBvcysrID0gd2stPmFzc29jLnNzaWRfbGVuOwogCW1lbWNweShwb3MsIHdrLT5hc3NvYy5zc2lkLCB3ay0+YXNzb2Muc3NpZF9sZW4pOwpAQCAtMjk1LDcgKzI4Niw2IEBACiAJaWYgKHN1cHBfcmF0ZXNfbGVuID4gOCkKIAkJc3VwcF9yYXRlc19sZW4gPSA4OwogCi0JbGVuID0gc2JhbmQtPm5fYml0cmF0ZXM7CiAJcG9zID0gc2tiX3B1dChza2IsIHN1cHBfcmF0ZXNfbGVuICsgMik7CiAJKnBvcysrID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKIAkqcG9zKysgPSBzdXBwX3JhdGVzX2xlbjsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93cGEuYyBiL25ldC9tYWM4MDIxMS93cGEuYwppbmRleCBmMTc2NWRlLi45ZGMzYjVmIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd3BhLmMKKysrIGIvbmV0L21hYzgwMjExL3dwYS5jCkBAIC04NywxNCArODcsNTAgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAotCS8qIE5vIHdheSB0byB2ZXJpZnkgdGhlIE1JQyBpZiB0aGUgaGFyZHdhcmUgc3RyaXBwZWQgaXQgKi8KLQlpZiAoc3RhdHVzLT5mbGFnICYgUlhfRkxBR19NTUlDX1NUUklQUEVEKQorCS8qCisJICogaXQgbWFrZXMgbm8gc2Vuc2UgdG8gY2hlY2sgZm9yIE1JQyBlcnJvcnMgb24gYW55dGhpbmcgb3RoZXIKKwkgKiB0aGFuIGRhdGEgZnJhbWVzLgorCSAqLworCWlmICghaWVlZTgwMjExX2lzX2RhdGFfcHJlc2VudChoZHItPmZyYW1lX2NvbnRyb2wpKQogCQlyZXR1cm4gUlhfQ09OVElOVUU7CiAKLQlpZiAoIXJ4LT5rZXkgfHwgcngtPmtleS0+Y29uZi5jaXBoZXIgIT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCB8fAotCSAgICAhaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoaGRyLT5mcmFtZV9jb250cm9sKSB8fAotCSAgICAhaWVlZTgwMjExX2lzX2RhdGFfcHJlc2VudChoZHItPmZyYW1lX2NvbnRyb2wpKQorCS8qCisJICogTm8gd2F5IHRvIHZlcmlmeSB0aGUgTUlDIGlmIHRoZSBoYXJkd2FyZSBzdHJpcHBlZCBpdCBvcgorCSAqIHRoZSBJViB3aXRoIHRoZSBrZXkgaW5kZXguIEluIHRoaXMgY2FzZSB3ZSBoYXZlIHNvbGVseSByZWx5CisJICogb24gdGhlIGRyaXZlciB0byBzZXQgUlhfRkxBR19NTUlDX0VSUk9SIGluIHRoZSBldmVudCBvZiBhCisJICogTUlDIGZhaWx1cmUgcmVwb3J0LgorCSAqLworCWlmIChzdGF0dXMtPmZsYWcgJiAoUlhfRkxBR19NTUlDX1NUUklQUEVEIHwgUlhfRkxBR19JVl9TVFJJUFBFRCkpIHsKKwkJaWYgKHN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfTU1JQ19FUlJPUikKKwkJCWdvdG8gbWljX2ZhaWw7CisKKwkJaWYgKCEoc3RhdHVzLT5mbGFnICYgUlhfRkxBR19JVl9TVFJJUFBFRCkpCisJCQlnb3RvIHVwZGF0ZV9pdjsKKwogCQlyZXR1cm4gUlhfQ09OVElOVUU7CisJfQorCisJLyoKKwkgKiBTb21lIGhhcmR3YXJlIHNlZW1zIHRvIGdlbmVyYXRlIE1pY2hhZWwgTUlDIGZhaWx1cmUgcmVwb3J0czsgZXZlbgorCSAqIHRob3VnaCwgdGhlIGZyYW1lIHdhcyBub3QgZW5jcnlwdGVkIHdpdGggVEtJUCBhbmQgdGhlcmVmb3JlIGhhcyBubworCSAqIE1JQy4gSWdub3JlIHRoZSBmbGFnIHRoZW0gdG8gYXZvaWQgdHJpZ2dlcmluZyBjb3VudGVybWVhc3VyZXMuCisJICovCisJaWYgKCFyeC0+a2V5IHx8IHJ4LT5rZXktPmNvbmYuY2lwaGVyICE9IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVAgfHwKKwkgICAgIShzdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0RFQ1JZUFRFRCkpCisJCXJldHVybiBSWF9DT05USU5VRTsKKworCWlmIChyeC0+c2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQICYmIHJ4LT5rZXktPmNvbmYua2V5aWR4KSB7CisJCS8qCisJCSAqIEFQcyB3aXRoIHBhaXJ3aXNlIGtleXMgc2hvdWxkIG5ldmVyIHJlY2VpdmUgTWljaGFlbCBNSUMKKwkJICogZXJyb3JzIGZvciBub24temVybyBrZXlpZHggYmVjYXVzZSB0aGVzZSBhcmUgcmVzZXJ2ZWQgZm9yCisJCSAqIGdyb3VwIGtleXMgYW5kIG9ubHkgdGhlIEFQIGlzIHNlbmRpbmcgcmVhbCBtdWx0aWNhc3QKKwkJICogZnJhbWVzIGluIHRoZSBCU1MuICgKKwkJICovCisJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOworCX0KKworCWlmIChzdGF0dXMtPmZsYWcgJiBSWF9GTEFHX01NSUNfRVJST1IpCisJCWdvdG8gbWljX2ZhaWw7CiAKIAloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCk7CiAJaWYgKHNrYi0+bGVuIDwgaGRybGVuICsgTUlDSEFFTF9NSUNfTEVOKQpAQCAtMTAyLDI3ICsxMzgsMjUgQEAKIAogCWRhdGEgPSBza2ItPmRhdGEgKyBoZHJsZW47CiAJZGF0YV9sZW4gPSBza2ItPmxlbiAtIGhkcmxlbiAtIE1JQ0hBRUxfTUlDX0xFTjsKLQogCWtleSA9ICZyeC0+a2V5LT5jb25mLmtleVtOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfUlhfTUlDX0tFWV07CiAJbWljaGFlbF9taWMoa2V5LCBoZHIsIGRhdGEsIGRhdGFfbGVuLCBtaWMpOwotCWlmIChtZW1jbXAobWljLCBkYXRhICsgZGF0YV9sZW4sIE1JQ0hBRUxfTUlDX0xFTikgIT0gMCkgewotCQlpZiAoIShzdGF0dXMtPnJ4X2ZsYWdzICYgSUVFRTgwMjExX1JYX1JBX01BVENIKSkKLQkJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOwotCi0JCW1hYzgwMjExX2V2X21pY2hhZWxfbWljX2ZhaWx1cmUocngtPnNkYXRhLCByeC0+a2V5LT5jb25mLmtleWlkeCwKLQkJCQkJCSh2b2lkICopIHNrYi0+ZGF0YSwgTlVMTCwKLQkJCQkJCUdGUF9BVE9NSUMpOwotCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKLQl9CisJaWYgKG1lbWNtcChtaWMsIGRhdGEgKyBkYXRhX2xlbiwgTUlDSEFFTF9NSUNfTEVOKSAhPSAwKQorCQlnb3RvIG1pY19mYWlsOwogCiAJLyogcmVtb3ZlIE1pY2hhZWwgTUlDIGZyb20gcGF5bG9hZCAqLwogCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSBNSUNIQUVMX01JQ19MRU4pOwogCit1cGRhdGVfaXY6CiAJLyogdXBkYXRlIElWIGluIGtleSBpbmZvcm1hdGlvbiB0byBiZSBhYmxlIHRvIGRldGVjdCByZXBsYXlzICovCiAJcngtPmtleS0+dS50a2lwLnJ4W3J4LT5xdWV1ZV0uaXYzMiA9IHJ4LT50a2lwX2l2MzI7CiAJcngtPmtleS0+dS50a2lwLnJ4W3J4LT5xdWV1ZV0uaXYxNiA9IHJ4LT50a2lwX2l2MTY7CiAKIAlyZXR1cm4gUlhfQ09OVElOVUU7CisKK21pY19mYWlsOgorCW1hYzgwMjExX2V2X21pY2hhZWxfbWljX2ZhaWx1cmUocngtPnNkYXRhLCByeC0+a2V5LT5jb25mLmtleWlkeCwKKwkJCQkJKHZvaWQgKikgc2tiLT5kYXRhLCBOVUxMLCBHRlBfQVRPTUlDKTsKKwlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKIH0KIAogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9nZXRwb3J0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9nZXRwb3J0LmMKaW5kZXggOGQ1MjI3Mi4uNzU3MTQzYiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfZ2V0cG9ydC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2dldHBvcnQuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2ljbXAuaD4KICNpbmNsdWRlIDxsaW51eC9pY21wdjYuaD4KKyNpbmNsdWRlIDxsaW51eC9zY3RwLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CkBAIC0zNSw3ICszNiwyMCBAQAogCQkqcG9ydCA9IHNyYyA/IHRoLT5zb3VyY2UgOiB0aC0+ZGVzdDsKIAkJYnJlYWs7CiAJfQotCWNhc2UgSVBQUk9UT19VRFA6IHsKKwljYXNlIElQUFJPVE9fU0NUUDogeworCQlzY3RwX3NjdHBoZHJfdCBfc2g7CisJCWNvbnN0IHNjdHBfc2N0cGhkcl90ICpzaDsKKworCQlzaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHByb3Rvb2ZmLCBzaXplb2YoX3NoKSwgJl9zaCk7CisJCWlmIChzaCA9PSBOVUxMKQorCQkJLyogTm8gY2hvaWNlIGVpdGhlciAqLworCQkJcmV0dXJuIGZhbHNlOworCisJCSpwb3J0ID0gc3JjID8gc2gtPnNvdXJjZSA6IHNoLT5kZXN0OworCQlicmVhazsKKwl9CisJY2FzZSBJUFBST1RPX1VEUDoKKwljYXNlIElQUFJPVE9fVURQTElURTogewogCQlzdHJ1Y3QgdWRwaGRyIF91ZHBoOwogCQljb25zdCBzdHJ1Y3QgdWRwaGRyICp1aDsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0LmMKaW5kZXggYjkyMTQxNC4uMTQyODFiNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnQuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydC5jCkBAIC00OTEsNyArNDkxLDcgQEAKIAkuZmVhdHVyZXMJPSBJUFNFVF9UWVBFX0lQIHwgSVBTRVRfVFlQRV9QT1JULAogCS5kaW1lbnNpb24JPSBJUFNFVF9ESU1fVFdPLAogCS5mYW1pbHkJCT0gQUZfVU5TUEVDLAotCS5yZXZpc2lvbgk9IDAsCisJLnJldmlzaW9uCT0gMSwKIAkuY3JlYXRlCQk9IGhhc2hfaXBwb3J0X2NyZWF0ZSwKIAkuY3JlYXRlX3BvbGljeQk9IHsKIAkJW0lQU0VUX0FUVFJfSEFTSFNJWkVdCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0aXAuYwppbmRleCA0NjQyODcyLi40MDFjOGEyIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydGlwLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRpcC5jCkBAIC01MDksNyArNTA5LDcgQEAKIAkuZmVhdHVyZXMJPSBJUFNFVF9UWVBFX0lQIHwgSVBTRVRfVFlQRV9QT1JUIHwgSVBTRVRfVFlQRV9JUDIsCiAJLmRpbWVuc2lvbgk9IElQU0VUX0RJTV9USFJFRSwKIAkuZmFtaWx5CQk9IEFGX1VOU1BFQywKLQkucmV2aXNpb24JPSAwLAorCS5yZXZpc2lvbgk9IDEsCiAJLmNyZWF0ZQkJPSBoYXNoX2lwcG9ydGlwX2NyZWF0ZSwKIAkuY3JlYXRlX3BvbGljeQk9IHsKIAkJW0lQU0VUX0FUVFJfSEFTSFNJWkVdCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jCmluZGV4IDJjYjg0YTUuLjQ3NDNlNTQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYwpAQCAtNTc0LDcgKzU3NCw3IEBACiAJLmZlYXR1cmVzCT0gSVBTRVRfVFlQRV9JUCB8IElQU0VUX1RZUEVfUE9SVCB8IElQU0VUX1RZUEVfSVAyLAogCS5kaW1lbnNpb24JPSBJUFNFVF9ESU1fVEhSRUUsCiAJLmZhbWlseQkJPSBBRl9VTlNQRUMsCi0JLnJldmlzaW9uCT0gMCwKKwkucmV2aXNpb24JPSAxLAogCS5jcmVhdGUJCT0gaGFzaF9pcHBvcnRuZXRfY3JlYXRlLAogCS5jcmVhdGVfcG9saWN5CT0gewogCQlbSVBTRVRfQVRUUl9IQVNIU0laRV0JPSB7IC50eXBlID0gTkxBX1UzMiB9LApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYwppbmRleCA4NTk4Njc2Li5kMmE0MDM2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldHBvcnQuYwpAQCAtNTI2LDcgKzUyNiw3IEBACiAJLmZlYXR1cmVzCT0gSVBTRVRfVFlQRV9JUCB8IElQU0VUX1RZUEVfUE9SVCwKIAkuZGltZW5zaW9uCT0gSVBTRVRfRElNX1RXTywKIAkuZmFtaWx5CQk9IEFGX1VOU1BFQywKLQkucmV2aXNpb24JPSAwLAorCS5yZXZpc2lvbgk9IDEsCiAJLmNyZWF0ZQkJPSBoYXNoX25ldHBvcnRfY3JlYXRlLAogCS5jcmVhdGVfcG9saWN5CT0gewogCQlbSVBTRVRfQVRUUl9IQVNIU0laRV0JPSB7IC50eXBlID0gTkxBX1UzMiB9LApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jCmluZGV4IDJkYzZkZTEuLjA1OWFmMzEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMKQEAgLTU3MiwxMSArNTcyLDExIEBACiAJLm9wZW4JID0gaXBfdnNfYXBwX29wZW4sCiAJLnJlYWQJID0gc2VxX3JlYWQsCiAJLmxsc2VlayAgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlX25ldCwKIH07CiAjZW5kaWYKIAotc3RhdGljIGludCBfX25ldF9pbml0IF9faXBfdnNfYXBwX2luaXQoc3RydWN0IG5ldCAqbmV0KQoraW50IF9fbmV0X2luaXQgX19pcF92c19hcHBfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBuZXRfaXB2cyhuZXQpOwogCkBAIC01ODUsMjYgKzU4NSwxNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX25ldF9leGl0IF9faXBfdnNfYXBwX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KQordm9pZCBfX25ldF9leGl0IF9faXBfdnNfYXBwX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KQogewogCXByb2NfbmV0X3JlbW92ZShuZXQsICJpcF92c19hcHAiKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcF92c19hcHBfb3BzID0gewotCS5pbml0ID0gX19pcF92c19hcHBfaW5pdCwKLQkuZXhpdCA9IF9faXBfdnNfYXBwX2NsZWFudXAsCi19OwotCiBpbnQgX19pbml0IGlwX3ZzX2FwcF9pbml0KHZvaWQpCiB7Ci0JaW50IHJ2OwotCi0JcnYgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcF92c19hcHBfb3BzKTsKLQlyZXR1cm4gcnY7CisJcmV0dXJuIDA7CiB9CiAKIAogdm9pZCBpcF92c19hcHBfY2xlYW51cCh2b2lkKQogewotCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXBfdnNfYXBwX29wcyk7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYwppbmRleCBjOTdiZDQ1Li5iZjI4YWMyIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMKQEAgLTEwNDYsNyArMTA0Niw3IEBACiAJLm9wZW4gICAgPSBpcF92c19jb25uX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKIAkubGxzZWVrICA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfbmV0LAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmlwX3ZzX29yaWdpbl9uYW1lKHVuc2lnbmVkIGZsYWdzKQpAQCAtMTExNCw3ICsxMTE0LDcgQEAKIAkub3BlbiAgICA9IGlwX3ZzX2Nvbm5fc3luY19vcGVuLAogCS5yZWFkICAgID0gc2VxX3JlYWQsCiAJLmxsc2VlayAgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlX25ldCwKIH07CiAKICNlbmRpZgpAQCAtMTI1OCwyMiArMTI1OCwxNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX25ldF9leGl0IF9faXBfdnNfY29ubl9jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCkKK3ZvaWQgX19uZXRfZXhpdCBfX2lwX3ZzX2Nvbm5fY2xlYW51cChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJLyogZmx1c2ggYWxsIHRoZSBjb25uZWN0aW9uIGVudHJpZXMgZmlyc3QgKi8KIAlpcF92c19jb25uX2ZsdXNoKG5ldCk7CiAJcHJvY19uZXRfcmVtb3ZlKG5ldCwgImlwX3ZzX2Nvbm4iKTsKIAlwcm9jX25ldF9yZW1vdmUobmV0LCAiaXBfdnNfY29ubl9zeW5jIik7CiB9Ci1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGlwdnNfY29ubl9vcHMgPSB7Ci0JLmluaXQgPSBfX2lwX3ZzX2Nvbm5faW5pdCwKLQkuZXhpdCA9IF9faXBfdnNfY29ubl9jbGVhbnVwLAotfTsKIAogaW50IF9faW5pdCBpcF92c19jb25uX2luaXQodm9pZCkKIHsKIAlpbnQgaWR4OwotCWludCByZXRjOwogCiAJLyogQ29tcHV0ZSBzaXplIGFuZCBtYXNrICovCiAJaXBfdnNfY29ubl90YWJfc2l6ZSA9IDEgPDwgaXBfdnNfY29ubl90YWJfYml0czsKQEAgLTEzMDksMTcgKzEzMDQsMTQgQEAKIAkJcndsb2NrX2luaXQoJl9faXBfdnNfY29ubnRibF9sb2NrX2FycmF5W2lkeF0ubCk7CiAJfQogCi0JcmV0YyA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdnNfY29ubl9vcHMpOwotCiAJLyogY2FsY3VsYXRlIHRoZSByYW5kb20gdmFsdWUgZm9yIGNvbm5lY3Rpb24gaGFzaCAqLwogCWdldF9yYW5kb21fYnl0ZXMoJmlwX3ZzX2Nvbm5fcm5kLCBzaXplb2YoaXBfdnNfY29ubl9ybmQpKTsKIAotCXJldHVybiByZXRjOworCXJldHVybiAwOwogfQogCiB2b2lkIGlwX3ZzX2Nvbm5fY2xlYW51cCh2b2lkKQogewotCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXB2c19jb25uX29wcyk7CiAJLyogUmVsZWFzZSB0aGUgZW1wdHkgY2FjaGUgKi8KIAlrbWVtX2NhY2hlX2Rlc3Ryb3koaXBfdnNfY29ubl9jYWNoZXApOwogCXZmcmVlKGlwX3ZzX2Nvbm5fdGFiKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jCmluZGV4IDA3YWNjZjYuLmJmYTgwOGYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYwpAQCAtMTExMyw2ICsxMTEzLDkgQEAKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAogCW5ldCA9IHNrYl9uZXQoc2tiKTsKKwlpZiAoIW5ldF9pcHZzKG5ldCktPmVuYWJsZSkKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwogCWlwX3ZzX2ZpbGxfaXBoZHIoYWYsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCAmaXBoKTsKICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgogCWlmIChhZiA9PSBBRl9JTkVUNikgewpAQCAtMTM0Myw2ICsxMzQ2LDcgQEAKIAkJcmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovCiAKIAluZXQgPSBza2JfbmV0KHNrYik7CisKIAlwZCA9IGlwX3ZzX3Byb3RvX2RhdGFfZ2V0KG5ldCwgY2loLT5wcm90b2NvbCk7CiAJaWYgKCFwZCkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKQEAgLTEzNzgsMTUgKzEzODIsNyBAQAogCWlwX3ZzX2luX3N0YXRzKGNwLCBza2IpOwogCWlmIChJUFBST1RPX1RDUCA9PSBjaWgtPnByb3RvY29sIHx8IElQUFJPVE9fVURQID09IGNpaC0+cHJvdG9jb2wpCiAJCW9mZnNldCArPSAyICogc2l6ZW9mKF9fdTE2KTsKLQl2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0KHNrYiwgY3AsIHBwLCBvZmZzZXQpOwotCS8qIExPQ0FMTk9ERSBmcm9tIEZPUldBUkQgaG9vayBpcyBub3Qgc3VwcG9ydGVkICovCi0JaWYgKHZlcmRpY3QgPT0gTkZfQUNDRVBUICYmIGhvb2tudW0gPT0gTkZfSU5FVF9GT1JXQVJEICYmCi0JICAgIHNrYl9ydGFibGUoc2tiKS0+cnRfZmxhZ3MgJiBSVENGX0xPQ0FMKSB7Ci0JCUlQX1ZTX0RCRygxLCAiJXMoKTogIgotCQkJICAibG9jYWwgZGVsaXZlcnkgdG8gJXBJNCBidXQgaW4gRk9SV0FSRFxuIiwKLQkJCSAgX19mdW5jX18sICZza2JfcnRhYmxlKHNrYiktPnJ0X2RzdCk7Ci0JCXZlcmRpY3QgPSBORl9EUk9QOwotCX0KKwl2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0KHNrYiwgY3AsIHBwLCBvZmZzZXQsIGhvb2tudW0pOwogCiAgIG91dDoKIAlfX2lwX3ZzX2Nvbm5fcHV0KGNwKTsKQEAgLTE0MDgsNyArMTQwNCw2IEBACiAJc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcDsKIAlzdHJ1Y3QgaXBfdnNfcHJvdG9fZGF0YSAqcGQ7CiAJdW5zaWduZWQgaW50IG9mZnNldCwgdmVyZGljdDsKLQlzdHJ1Y3QgcnQ2X2luZm8gKnJ0OwogCiAJKnJlbGF0ZWQgPSAxOwogCkBAIC0xNDcwLDIzICsxNDY1LDEyIEBACiAJaWYgKCFjcCkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAotCXZlcmRpY3QgPSBORl9EUk9QOwotCiAJLyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovCiAJaXBfdnNfaW5fc3RhdHMoY3AsIHNrYik7CiAJaWYgKElQUFJPVE9fVENQID09IGNpaC0+bmV4dGhkciB8fCBJUFBST1RPX1VEUCA9PSBjaWgtPm5leHRoZHIgfHwKIAkgICAgSVBQUk9UT19TQ1RQID09IGNpaC0+bmV4dGhkcikKIAkJb2Zmc2V0ICs9IDIgKiBzaXplb2YoX191MTYpOwotCXZlcmRpY3QgPSBpcF92c19pY21wX3htaXRfdjYoc2tiLCBjcCwgcHAsIG9mZnNldCk7Ci0JLyogTE9DQUxOT0RFIGZyb20gRk9SV0FSRCBob29rIGlzIG5vdCBzdXBwb3J0ZWQgKi8KLQlpZiAodmVyZGljdCA9PSBORl9BQ0NFUFQgJiYgaG9va251bSA9PSBORl9JTkVUX0ZPUldBUkQgJiYKLQkgICAgKHJ0ID0gKHN0cnVjdCBydDZfaW5mbyAqKSBza2JfZHN0KHNrYikpICYmCi0JICAgIHJ0LT5ydDZpX2RldiAmJiBydC0+cnQ2aV9kZXYtPmZsYWdzICYgSUZGX0xPT1BCQUNLKSB7Ci0JCUlQX1ZTX0RCRygxLCAiJXMoKTogIgotCQkJICAibG9jYWwgZGVsaXZlcnkgdG8gJXBJNiBidXQgaW4gRk9SV0FSRFxuIiwKLQkJCSAgX19mdW5jX18sICZydC0+cnQ2aV9kc3QpOwotCQl2ZXJkaWN0ID0gTkZfRFJPUDsKLQl9CisJdmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdF92Nihza2IsIGNwLCBwcCwgb2Zmc2V0LCBob29rbnVtKTsKIAogCV9faXBfdnNfY29ubl9wdXQoY3ApOwogCkBAIC0xNTI5LDYgKzE1MTMsMTEgQEAKIAkJCSAgICAgIElQX1ZTX0RCR19BRERSKGFmLCAmaXBoLmRhZGRyKSwgaG9va251bSk7CiAJCXJldHVybiBORl9BQ0NFUFQ7CiAJfQorCS8qIGlwdnMgZW5hYmxlZCBpbiB0aGlzIG5ldG5zID8gKi8KKwluZXQgPSBza2JfbmV0KHNrYik7CisJaWYgKCFuZXRfaXB2cyhuZXQpLT5lbmFibGUpCisJCXJldHVybiBORl9BQ0NFUFQ7CisKIAlpcF92c19maWxsX2lwaGRyKGFmLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgJmlwaCk7CiAKIAkvKiBCYWQuLi4gRG8gbm90IGJyZWFrIHJhdyBzb2NrZXRzICovCkBAIC0xNTYyLDcgKzE1NTEsNiBAQAogCQkJaXBfdnNfZmlsbF9pcGhkcihhZiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksICZpcGgpOwogCQl9CiAKLQluZXQgPSBza2JfbmV0KHNrYik7CiAJLyogUHJvdG9jb2wgc3VwcG9ydGVkPyAqLwogCXBkID0gaXBfdnNfcHJvdG9fZGF0YV9nZXQobmV0LCBpcGgucHJvdG9jb2wpOwogCWlmICh1bmxpa2VseSghcGQpKQpAQCAtMTU4OCw3ICsxNTc2LDYgQEAKIAl9CiAKIAlJUF9WU19EQkdfUEtUKDExLCBhZiwgcHAsIHNrYiwgMCwgIkluY29taW5nIHBhY2tldCIpOwotCW5ldCA9IHNrYl9uZXQoc2tiKTsKIAlpcHZzID0gbmV0X2lwdnMobmV0KTsKIAkvKiBDaGVjayB0aGUgc2VydmVyIHN0YXR1cyAqLwogCWlmIChjcC0+ZGVzdCAmJiAhKGNwLT5kZXN0LT5mbGFncyAmIElQX1ZTX0RFU1RfRl9BVkFJTEFCTEUpKSB7CkBAIC0xNzQzLDEwICsxNzMwLDE2IEBACiAJCSAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQogewogCWludCByOworCXN0cnVjdCBuZXQgKm5ldDsKIAogCWlmIChpcF9oZHIoc2tiKS0+cHJvdG9jb2wgIT0gSVBQUk9UT19JQ01QKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCisJLyogaXB2cyBlbmFibGVkIGluIHRoaXMgbmV0bnMgPyAqLworCW5ldCA9IHNrYl9uZXQoc2tiKTsKKwlpZiAoIW5ldF9pcHZzKG5ldCktPmVuYWJsZSkKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwogCXJldHVybiBpcF92c19pbl9pY21wKHNrYiwgJnIsIGhvb2tudW0pOwogfQogCkBAIC0xNzU3LDEwICsxNzUwLDE2IEBACiAJCSAgICAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQogewogCWludCByOworCXN0cnVjdCBuZXQgKm5ldDsKIAogCWlmIChpcHY2X2hkcihza2IpLT5uZXh0aGRyICE9IElQUFJPVE9fSUNNUFY2KQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCisJLyogaXB2cyBlbmFibGVkIGluIHRoaXMgbmV0bnMgPyAqLworCW5ldCA9IHNrYl9uZXQoc2tiKTsKKwlpZiAoIW5ldF9pcHZzKG5ldCktPmVuYWJsZSkKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwogCXJldHVybiBpcF92c19pbl9pY21wX3Y2KHNrYiwgJnIsIGhvb2tudW0pOwogfQogI2VuZGlmCkBAIC0xODg0LDE5ICsxODgzLDcwIEBACiAJCXByX2VycigiJXMoKTogbm8gbWVtb3J5LlxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CisJLyogSG9sZCB0aGUgYmVhc3QgdW50aWwgYSBzZXJ2aWNlIGlzIHJlZ2lzdGVyZCAqLworCWlwdnMtPmVuYWJsZSA9IDA7CiAJaXB2cy0+bmV0ID0gbmV0OwogCS8qIENvdW50ZXJzIHVzZWQgZm9yIGNyZWF0aW5nIHVuaXF1ZSBuYW1lcyAqLwogCWlwdnMtPmdlbiA9IGF0b21pY19yZWFkKCZpcHZzX25ldG5zX2NudCk7CiAJYXRvbWljX2luYygmaXB2c19uZXRuc19jbnQpOwogCW5ldC0+aXB2cyA9IGlwdnM7CisKKwlpZiAoX19pcF92c19lc3RpbWF0b3JfaW5pdChuZXQpIDwgMCkKKwkJZ290byBlc3RpbWF0b3JfZmFpbDsKKworCWlmIChfX2lwX3ZzX2NvbnRyb2xfaW5pdChuZXQpIDwgMCkKKwkJZ290byBjb250cm9sX2ZhaWw7CisKKwlpZiAoX19pcF92c19wcm90b2NvbF9pbml0KG5ldCkgPCAwKQorCQlnb3RvIHByb3RvY29sX2ZhaWw7CisKKwlpZiAoX19pcF92c19hcHBfaW5pdChuZXQpIDwgMCkKKwkJZ290byBhcHBfZmFpbDsKKworCWlmIChfX2lwX3ZzX2Nvbm5faW5pdChuZXQpIDwgMCkKKwkJZ290byBjb25uX2ZhaWw7CisKKwlpZiAoX19pcF92c19zeW5jX2luaXQobmV0KSA8IDApCisJCWdvdG8gc3luY19mYWlsOworCiAJcHJpbnRrKEtFUk5fSU5GTyAiSVBWUzogQ3JlYXRpbmcgbmV0bnMgc2l6ZT0lenUgaWQ9JWRcbiIsCiAJCQkgc2l6ZW9mKHN0cnVjdCBuZXRuc19pcHZzKSwgaXB2cy0+Z2VuKTsKIAlyZXR1cm4gMDsKKy8qCisgKiBFcnJvciBoYW5kbGluZworICovCisKK3N5bmNfZmFpbDoKKwlfX2lwX3ZzX2Nvbm5fY2xlYW51cChuZXQpOworY29ubl9mYWlsOgorCV9faXBfdnNfYXBwX2NsZWFudXAobmV0KTsKK2FwcF9mYWlsOgorCV9faXBfdnNfcHJvdG9jb2xfY2xlYW51cChuZXQpOworcHJvdG9jb2xfZmFpbDoKKwlfX2lwX3ZzX2NvbnRyb2xfY2xlYW51cChuZXQpOworY29udHJvbF9mYWlsOgorCV9faXBfdnNfZXN0aW1hdG9yX2NsZWFudXAobmV0KTsKK2VzdGltYXRvcl9mYWlsOgorCXJldHVybiAtRU5PTUVNOwogfQogCiBzdGF0aWMgdm9pZCBfX25ldF9leGl0IF9faXBfdnNfY2xlYW51cChzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JSVBfVlNfREJHKDEwLCAiaXB2cyBuZXRucyAlZCByZWxlYXNlZFxuIiwgbmV0X2lwdnMobmV0KS0+Z2VuKTsKKwlfX2lwX3ZzX3NlcnZpY2VfY2xlYW51cChuZXQpOwkvKiBpcF92c19mbHVzaCgpIHdpdGggbG9ja3MgKi8KKwlfX2lwX3ZzX2Nvbm5fY2xlYW51cChuZXQpOworCV9faXBfdnNfYXBwX2NsZWFudXAobmV0KTsKKwlfX2lwX3ZzX3Byb3RvY29sX2NsZWFudXAobmV0KTsKKwlfX2lwX3ZzX2NvbnRyb2xfY2xlYW51cChuZXQpOworCV9faXBfdnNfZXN0aW1hdG9yX2NsZWFudXAobmV0KTsKKwlJUF9WU19EQkcoMiwgImlwdnMgbmV0bnMgJWQgcmVsZWFzZWRcbiIsIG5ldF9pcHZzKG5ldCktPmdlbik7Cit9CisKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgX19pcF92c19kZXZfY2xlYW51cChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJRW50ZXJGdW5jdGlvbigyKTsKKwluZXRfaXB2cyhuZXQpLT5lbmFibGUgPSAwOwkvKiBEaXNhYmxlIHBhY2tldCByZWNlcHRpb24gKi8KKwlfX2lwX3ZzX3N5bmNfY2xlYW51cChuZXQpOworCUxlYXZlRnVuY3Rpb24oMik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXB2c19jb3JlX29wcyA9IHsKQEAgLTE5MDYsNiArMTk1NiwxMCBAQAogCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBuZXRuc19pcHZzKSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXB2c19jb3JlX2Rldl9vcHMgPSB7CisJLmV4aXQgPSBfX2lwX3ZzX2Rldl9jbGVhbnVwLAorfTsKKwogLyoKICAqCUluaXRpYWxpemUgSVAgVmlydHVhbCBTZXJ2ZXIKICAqLwpAQCAtMTkxMywxMCArMTk2Nyw2IEBACiB7CiAJaW50IHJldDsKIAotCXJldCA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdnNfY29yZV9vcHMpOwkvKiBBbGxvYyBpcF92cyBzdHJ1Y3QgKi8KLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQogCWlwX3ZzX2VzdGltYXRvcl9pbml0KCk7CiAJcmV0ID0gaXBfdnNfY29udHJvbF9pbml0KCk7CiAJaWYgKHJldCA8IDApIHsKQEAgLTE5NDQsMTUgKzE5OTQsMjggQEAKIAkJZ290byBjbGVhbnVwX2Nvbm47CiAJfQogCisJcmV0ID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXB2c19jb3JlX29wcyk7CS8qIEFsbG9jIGlwX3ZzIHN0cnVjdCAqLworCWlmIChyZXQgPCAwKQorCQlnb3RvIGNsZWFudXBfc3luYzsKKworCXJldCA9IHJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoJmlwdnNfY29yZV9kZXZfb3BzKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBjbGVhbnVwX3N1YjsKKwogCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2tzKGlwX3ZzX29wcywgQVJSQVlfU0laRShpcF92c19vcHMpKTsKIAlpZiAocmV0IDwgMCkgewogCQlwcl9lcnIoImNhbid0IHJlZ2lzdGVyIGhvb2tzLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9zeW5jOworCQlnb3RvIGNsZWFudXBfZGV2OwogCX0KIAogCXByX2luZm8oImlwdnMgbG9hZGVkLlxuIik7CisKIAlyZXR1cm4gcmV0OwogCitjbGVhbnVwX2RldjoKKwl1bnJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoJmlwdnNfY29yZV9kZXZfb3BzKTsKK2NsZWFudXBfc3ViOgorCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXB2c19jb3JlX29wcyk7CiBjbGVhbnVwX3N5bmM6CiAJaXBfdnNfc3luY19jbGVhbnVwKCk7CiAgIGNsZWFudXBfY29ubjoKQEAgLTE5NjQsMjAgKzIwMjcsMjAgQEAKIAlpcF92c19jb250cm9sX2NsZWFudXAoKTsKICAgY2xlYW51cF9lc3RpbWF0b3I6CiAJaXBfdnNfZXN0aW1hdG9yX2NsZWFudXAoKTsKLQl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdnNfY29yZV9vcHMpOwkvKiBmcmVlIGlwX3ZzIHN0cnVjdCAqLwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpcF92c19jbGVhbnVwKHZvaWQpCiB7CiAJbmZfdW5yZWdpc3Rlcl9ob29rcyhpcF92c19vcHMsIEFSUkFZX1NJWkUoaXBfdnNfb3BzKSk7CisJdW5yZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKCZpcHZzX2NvcmVfZGV2X29wcyk7CisJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHZzX2NvcmVfb3BzKTsJLyogZnJlZSBpcF92cyBzdHJ1Y3QgKi8KIAlpcF92c19zeW5jX2NsZWFudXAoKTsKIAlpcF92c19jb25uX2NsZWFudXAoKTsKIAlpcF92c19hcHBfY2xlYW51cCgpOwogCWlwX3ZzX3Byb3RvY29sX2NsZWFudXAoKTsKIAlpcF92c19jb250cm9sX2NsZWFudXAoKTsKIAlpcF92c19lc3RpbWF0b3JfY2xlYW51cCgpOwotCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXB2c19jb3JlX29wcyk7CS8qIGZyZWUgaXBfdnMgc3RydWN0ICovCiAJcHJfaW5mbygiaXB2cyB1bmxvYWRlZC5cbiIpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMKaW5kZXggYWU0NzA5MC4uNjk5Yzc5YSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYwpAQCAtNjksNiArNjksMTEgQEAKIH0KICNlbmRpZgogCisKKy8qICBQcm90b3MgKi8KK3N0YXRpYyB2b2lkIF9faXBfdnNfZGVsX3NlcnZpY2Uoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2Yyk7CisKKwogI2lmZGVmIENPTkZJR19JUF9WU19JUFY2CiAvKiBUYWtlbiBmcm9tIHJ0Nl9maWxsX25vZGUoKSBpbiBuZXQvaXB2Ni9yb3V0ZS5jLCBpcyB0aGVyZSBhIGJldHRlciB3YXk/ICovCiBzdGF0aWMgaW50IF9faXBfdnNfYWRkcl9pc19sb2NhbF92NihzdHJ1Y3QgbmV0ICpuZXQsCkBAIC0xMjE0LDYgKzEyMTksOCBAQAogCXdyaXRlX3VubG9ja19iaCgmX19pcF92c19zdmNfbG9jayk7CiAKIAkqc3ZjX3AgPSBzdmM7CisJLyogTm93IHRoZXJlIGlzIGEgc2VydmljZSAtIGZ1bGwgdGhyb3R0bGUgKi8KKwlpcHZzLT5lbmFibGUgPSAxOwogCXJldHVybiAwOwogCiAKQEAgLTE0NzIsNiArMTQ3OSw4NCBAQAogCXJldHVybiAwOwogfQogCisvKgorICoJRGVsZXRlIHNlcnZpY2UgYnkge25ldG5zfSBpbiB0aGUgc2VydmljZSB0YWJsZS4KKyAqCUNhbGxlZCBieSBfX2lwX3ZzX2NsZWFudXAoKQorICovCit2b2lkIF9faXBfdnNfc2VydmljZV9jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlFbnRlckZ1bmN0aW9uKDIpOworCS8qIENoZWNrIGZvciAiZnVsbCIgYWRkcmVzc2VkIGVudHJpZXMgKi8KKwltdXRleF9sb2NrKCZfX2lwX3ZzX211dGV4KTsKKwlpcF92c19mbHVzaChuZXQpOworCW11dGV4X3VubG9jaygmX19pcF92c19tdXRleCk7CisJTGVhdmVGdW5jdGlvbigyKTsKK30KKy8qCisgKiBSZWxlYXNlIGRzdCBob2xkIGJ5IGRzdF9jYWNoZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK19faXBfdnNfZGV2X3Jlc2V0KHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXNwaW5fbG9ja19iaCgmZGVzdC0+ZHN0X2xvY2spOworCWlmIChkZXN0LT5kc3RfY2FjaGUgJiYgZGVzdC0+ZHN0X2NhY2hlLT5kZXYgPT0gZGV2KSB7CisJCUlQX1ZTX0RCR19CVUYoMywgIlJlc2V0IGRldjolcyBkZXN0ICVzOiV1ICxkZXN0LT5yZWZjbnQ9JWRcbiIsCisJCQkgICAgICBkZXYtPm5hbWUsCisJCQkgICAgICBJUF9WU19EQkdfQUREUihkZXN0LT5hZiwgJmRlc3QtPmFkZHIpLAorCQkJICAgICAgbnRvaHMoZGVzdC0+cG9ydCksCisJCQkgICAgICBhdG9taWNfcmVhZCgmZGVzdC0+cmVmY250KSk7CisJCWlwX3ZzX2RzdF9yZXNldChkZXN0KTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJmRlc3QtPmRzdF9sb2NrKTsKKworfQorLyoKKyAqIE5ldGRldiBldmVudCByZWNlaXZlcgorICogQ3VycmVudGx5IG9ubHkgTkVUREVWX1VOUkVHSVNURVIgaXMgaGFuZGxlZCwgaS5lLiBpZiB3ZSBob2xkIGEgcmVmZXJlbmNlIHRvCisgKiBhIGRldmljZSB0aGF0IGlzICJ1bnJlZ2lzdGVyIiBpdCBtdXN0IGJlIHJlbGVhc2VkLgorICovCitzdGF0aWMgaW50IGlwX3ZzX2RzdF9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsCisJCQkgICAgdm9pZCAqcHRyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwdHI7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOworCXN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmM7CisJc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3Q7CisJdW5zaWduZWQgaW50IGlkeDsKKworCWlmIChldmVudCAhPSBORVRERVZfVU5SRUdJU1RFUikKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCUlQX1ZTX0RCRygzLCAiJXMoKSBkZXY9JXNcbiIsIF9fZnVuY19fLCBkZXYtPm5hbWUpOworCUVudGVyRnVuY3Rpb24oMik7CisJbXV0ZXhfbG9jaygmX19pcF92c19tdXRleCk7CisJZm9yIChpZHggPSAwOyBpZHggPCBJUF9WU19TVkNfVEFCX1NJWkU7IGlkeCsrKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoc3ZjLCAmaXBfdnNfc3ZjX3RhYmxlW2lkeF0sIHNfbGlzdCkgeworCQkJaWYgKG5ldF9lcShzdmMtPm5ldCwgbmV0KSkgeworCQkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZGVzdCwgJnN2Yy0+ZGVzdGluYXRpb25zLAorCQkJCQkJICAgIG5fbGlzdCkgeworCQkJCQlfX2lwX3ZzX2Rldl9yZXNldChkZXN0LCBkZXYpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoc3ZjLCAmaXBfdnNfc3ZjX2Z3bV90YWJsZVtpZHhdLCBmX2xpc3QpIHsKKwkJCWlmIChuZXRfZXEoc3ZjLT5uZXQsIG5ldCkpIHsKKwkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlc3QsICZzdmMtPmRlc3RpbmF0aW9ucywKKwkJCQkJCSAgICBuX2xpc3QpIHsKKwkJCQkJX19pcF92c19kZXZfcmVzZXQoZGVzdCwgZGV2KTsKKwkJCQl9CisJCQl9CisKKwkJfQorCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGVzdCwgJm5ldF9pcHZzKG5ldCktPmRlc3RfdHJhc2gsIG5fbGlzdCkgeworCQlfX2lwX3ZzX2Rldl9yZXNldChkZXN0LCBkZXYpOworCX0KKwltdXRleF91bmxvY2soJl9faXBfdnNfbXV0ZXgpOworCUxlYXZlRnVuY3Rpb24oMik7CisJcmV0dXJuIE5PVElGWV9ET05FOworfQogCiAvKgogICoJWmVybyBjb3VudGVycyBpbiBhIHNlcnZpY2Ugb3IgYWxsIHNlcnZpY2VzCkBAIC0xOTgxLDEyICsyMDY2LDkgQEAKIAkub3BlbiAgICA9IGlwX3ZzX2luZm9fb3BlbiwKIAkucmVhZCAgICA9IHNlcV9yZWFkLAogCS5sbHNlZWsgID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfcHJpdmF0ZSwKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlX25ldCwKIH07CiAKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKIHN0YXRpYyBpbnQgaXBfdnNfc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9zaW5nbGVfbmV0KHNlcSk7CkBAIC0yMDI0LDcgKzIxMDYsNyBAQAogCS5vcGVuID0gaXBfdnNfc3RhdHNfc2VxX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKIAkubGxzZWVrID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZV9uZXQsCiB9OwogCiBzdGF0aWMgaW50IGlwX3ZzX3N0YXRzX3BlcmNwdV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQpAQCAtMjA5Myw3ICsyMTc1LDcgQEAKIAkub3BlbiA9IGlwX3ZzX3N0YXRzX3BlcmNwdV9zZXFfb3BlbiwKIAkucmVhZCA9IHNlcV9yZWFkLAogCS5sbHNlZWsgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlX25ldCwKIH07CiAjZW5kaWYKIApAQCAtMzU4OCw2ICszNjcwLDEwIEBACiAKICNlbmRpZgogCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGlwX3ZzX2RzdF9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGlwX3ZzX2RzdF9ldmVudCwKK307CisKIGludCBfX25ldF9pbml0IF9faXBfdnNfY29udHJvbF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlpbnQgaWR4OwpAQCAtMzYyNiw3ICszNzEyLDcgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotc3RhdGljIHZvaWQgX19uZXRfZXhpdCBfX2lwX3ZzX2NvbnRyb2xfY2xlYW51cChzdHJ1Y3QgbmV0ICpuZXQpCit2b2lkIF9fbmV0X2V4aXQgX19pcF92c19jb250cm9sX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBuZXRuc19pcHZzICppcHZzID0gbmV0X2lwdnMobmV0KTsKIApAQCAtMzYzOSwxMSArMzcyNSw2IEBACiAJZnJlZV9wZXJjcHUoaXB2cy0+dG90X3N0YXRzLmNwdXN0YXRzKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcHZzX2NvbnRyb2xfb3BzID0gewotCS5pbml0ID0gX19pcF92c19jb250cm9sX2luaXQsCi0JLmV4aXQgPSBfX2lwX3ZzX2NvbnRyb2xfY2xlYW51cCwKLX07Ci0KIGludCBfX2luaXQgaXBfdnNfY29udHJvbF9pbml0KHZvaWQpCiB7CiAJaW50IGlkeDsKQEAgLTM2NTcsMzMgKzM3MzgsMzIgQEAKIAkJSU5JVF9MSVNUX0hFQUQoJmlwX3ZzX3N2Y19md21fdGFibGVbaWR4XSk7CiAJfQogCi0JcmV0ID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXB2c19jb250cm9sX29wcyk7Ci0JaWYgKHJldCkgewotCQlwcl9lcnIoImNhbm5vdCByZWdpc3RlciBuYW1lc3BhY2UuXG4iKTsKLQkJZ290byBlcnI7Ci0JfQotCiAJc21wX3dtYigpOwkvKiBEbyB3ZSByZWFsbHkgbmVlZCBpdCBub3cgPyAqLwogCiAJcmV0ID0gbmZfcmVnaXN0ZXJfc29ja29wdCgmaXBfdnNfc29ja29wdHMpOwogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCJjYW5ub3QgcmVnaXN0ZXIgc29ja29wdC5cbiIpOwotCQlnb3RvIGVycl9uZXQ7CisJCWdvdG8gZXJyX3NvY2s7CiAJfQogCiAJcmV0ID0gaXBfdnNfZ2VubF9yZWdpc3RlcigpOwogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCJjYW5ub3QgcmVnaXN0ZXIgR2VuZXJpYyBOZXRsaW5rIGludGVyZmFjZS5cbiIpOwotCQluZl91bnJlZ2lzdGVyX3NvY2tvcHQoJmlwX3ZzX3NvY2tvcHRzKTsKLQkJZ290byBlcnJfbmV0OworCQlnb3RvIGVycl9nZW5sOwogCX0KIAorCXJldCA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmaXBfdnNfZHN0X25vdGlmaWVyKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfbm90ZjsKKwogCUxlYXZlRnVuY3Rpb24oMik7CiAJcmV0dXJuIDA7CiAKLWVycl9uZXQ6Ci0JdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHZzX2NvbnRyb2xfb3BzKTsKLWVycjoKK2Vycl9ub3RmOgorCWlwX3ZzX2dlbmxfdW5yZWdpc3RlcigpOworZXJyX2dlbmw6CisJbmZfdW5yZWdpc3Rlcl9zb2Nrb3B0KCZpcF92c19zb2Nrb3B0cyk7CitlcnJfc29jazoKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNjkxLDcgKzM3NzEsNiBAQAogdm9pZCBpcF92c19jb250cm9sX2NsZWFudXAodm9pZCkKIHsKIAlFbnRlckZ1bmN0aW9uKDIpOwotCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXB2c19jb250cm9sX29wcyk7CiAJaXBfdnNfZ2VubF91bnJlZ2lzdGVyKCk7CiAJbmZfdW5yZWdpc3Rlcl9zb2Nrb3B0KCZpcF92c19zb2Nrb3B0cyk7CiAJTGVhdmVGdW5jdGlvbigyKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYwppbmRleCA4Yzg3NjZjLi41MDhjY2U5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jCkBAIC0xOTIsNyArMTkyLDcgQEAKIAlkc3QtPm91dGJwcyA9IChlLT5vdXRicHMgKyAweEYpID4+IDU7CiB9CiAKLXN0YXRpYyBpbnQgX19uZXRfaW5pdCBfX2lwX3ZzX2VzdGltYXRvcl9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK2ludCBfX25ldF9pbml0IF9faXBfdnNfZXN0aW1hdG9yX2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBuZXRuc19pcHZzICppcHZzID0gbmV0X2lwdnMobmV0KTsKIApAQCAtMjAzLDI0ICsyMDMsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19uZXRfZXhpdCBfX2lwX3ZzX2VzdGltYXRvcl9leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3ZvaWQgX19uZXRfZXhpdCBfX2lwX3ZzX2VzdGltYXRvcl9jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlkZWxfdGltZXJfc3luYygmbmV0X2lwdnMobmV0KS0+ZXN0X3RpbWVyKTsKIH0KLXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXBfdnNfYXBwX29wcyA9IHsKLQkuaW5pdCA9IF9faXBfdnNfZXN0aW1hdG9yX2luaXQsCi0JLmV4aXQgPSBfX2lwX3ZzX2VzdGltYXRvcl9leGl0LAotfTsKIAogaW50IF9faW5pdCBpcF92c19lc3RpbWF0b3JfaW5pdCh2b2lkKQogewotCWludCBydjsKLQotCXJ2ID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXBfdnNfYXBwX29wcyk7Ci0JcmV0dXJuIHJ2OworCXJldHVybiAwOwogfQogCiB2b2lkIGlwX3ZzX2VzdGltYXRvcl9jbGVhbnVwKHZvaWQpCiB7Ci0JdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcF92c19hcHBfb3BzKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmMKaW5kZXggMTc0ODRhNC4uZWI4NjAyOCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmMKQEAgLTMxNiw3ICszMTYsNyBAQAogLyoKICAqIHBlciBuZXR3b3JrIG5hbWUtc3BhY2UgaW5pdAogICovCi1zdGF0aWMgaW50IF9fbmV0X2luaXQgX19pcF92c19wcm90b2NvbF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK2ludCBfX25ldF9pbml0IF9faXBfdnNfcHJvdG9jb2xfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAjaWZkZWYgQ09ORklHX0lQX1ZTX1BST1RPX1RDUAogCXJlZ2lzdGVyX2lwX3ZzX3Byb3RvX25ldG5zKG5ldCwgJmlwX3ZzX3Byb3RvY29sX3RjcCk7CkBAIC0zMzYsNyArMzM2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19uZXRfZXhpdCBfX2lwX3ZzX3Byb3RvY29sX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KQordm9pZCBfX25ldF9leGl0IF9faXBfdnNfcHJvdG9jb2xfY2xlYW51cChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBuZXRfaXB2cyhuZXQpOwogCXN0cnVjdCBpcF92c19wcm90b19kYXRhICpwZDsKQEAgLTM0OSwxMSArMzQ5LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXB2c19wcm90b19vcHMgPSB7Ci0JLmluaXQgPSBfX2lwX3ZzX3Byb3RvY29sX2luaXQsCi0JLmV4aXQgPSBfX2lwX3ZzX3Byb3RvY29sX2NsZWFudXAsCi19OwotCiBpbnQgX19pbml0IGlwX3ZzX3Byb3RvY29sX2luaXQodm9pZCkKIHsKIAljaGFyIHByb3RvY29sc1s2NF07CkBAIC0zODIsNyArMzc3LDYgQEAKIAlSRUdJU1RFUl9QUk9UT0NPTCgmaXBfdnNfcHJvdG9jb2xfZXNwKTsKICNlbmRpZgogCXByX2luZm8oIlJlZ2lzdGVyZWQgcHJvdG9jb2xzICglcylcbiIsICZwcm90b2NvbHNbMl0pOwotCXJldHVybiByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHZzX3Byb3RvX29wcyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM5Myw3ICszODcsNiBAQAogCXN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7CiAJaW50IGk7CiAKLQl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdnNfcHJvdG9fb3BzKTsKIAkvKiB1bnJlZ2lzdGVyIGFsbCB0aGUgaXB2cyBwcm90b2NvbHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgSVBfVlNfUFJPVE9fVEFCX1NJWkU7IGkrKykgewogCQl3aGlsZSAoKHBwID0gaXBfdnNfcHJvdG9fdGFibGVbaV0pICE9IE5VTEwpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYwppbmRleCAzZTc5NjFlLi5lMjkyZTViIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMKQEAgLTEzMDMsMTMgKzEzMDMsMTggQEAKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwogCWludCByZXN1bHQ7CiAKLQkvKiBGaXJzdCBjcmVhdGUgYSBzb2NrZXQgKi8KLQlyZXN1bHQgPSBfX3NvY2tfY3JlYXRlKG5ldCwgUEZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFAsICZzb2NrLCAxKTsKKwkvKiBGaXJzdCBjcmVhdGUgYSBzb2NrZXQgbW92ZSBpdCB0byByaWdodCBuYW1lIHNwYWNlIGxhdGVyICovCisJcmVzdWx0ID0gc29ja19jcmVhdGVfa2VybihQRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCwgJnNvY2spOwogCWlmIChyZXN1bHQgPCAwKSB7CiAJCXByX2VycigiRXJyb3IgZHVyaW5nIGNyZWF0aW9uIG9mIHNvY2tldDsgdGVybWluYXRpbmdcbiIpOwogCQlyZXR1cm4gRVJSX1BUUihyZXN1bHQpOwogCX0KLQorCS8qCisJICogS2VybmVsIHNvY2tldHMgdGhhdCBhcmUgYSBwYXJ0IG9mIGEgbmFtZXNwYWNlLCBzaG91bGQgbm90CisJICogaG9sZCBhIHJlZmVyZW5jZSB0byBhIG5hbWVzcGFjZSBpbiBvcmRlciB0byBhbGxvdyB0byBzdG9wIGl0LgorCSAqIEFmdGVyIHNrX2NoYW5nZV9uZXQgc2hvdWxkIGJlIHJlbGVhc2VkIHVzaW5nIHNrX3JlbGVhc2Vfa2VybmVsLgorCSAqLworCXNrX2NoYW5nZV9uZXQoc29jay0+c2ssIG5ldCk7CiAJcmVzdWx0ID0gc2V0X21jYXN0X2lmKHNvY2stPnNrLCBpcHZzLT5tYXN0ZXJfbWNhc3RfaWZuKTsKIAlpZiAocmVzdWx0IDwgMCkgewogCQlwcl9lcnIoIkVycm9yIHNldHRpbmcgb3V0Ym91bmQgbWNhc3QgaW50ZXJmYWNlXG4iKTsKQEAgLTEzMzQsOCArMTMzOSw4IEBACiAKIAlyZXR1cm4gc29jazsKIAotICBlcnJvcjoKLQlzb2NrX3JlbGVhc2Uoc29jayk7CitlcnJvcjoKKwlza19yZWxlYXNlX2tlcm5lbChzb2NrLT5zayk7CiAJcmV0dXJuIEVSUl9QVFIocmVzdWx0KTsKIH0KIApAQCAtMTM1MCwxMiArMTM1NSwxNyBAQAogCWludCByZXN1bHQ7CiAKIAkvKiBGaXJzdCBjcmVhdGUgYSBzb2NrZXQgKi8KLQlyZXN1bHQgPSBfX3NvY2tfY3JlYXRlKG5ldCwgUEZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFAsICZzb2NrLCAxKTsKKwlyZXN1bHQgPSBzb2NrX2NyZWF0ZV9rZXJuKFBGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQLCAmc29jayk7CiAJaWYgKHJlc3VsdCA8IDApIHsKIAkJcHJfZXJyKCJFcnJvciBkdXJpbmcgY3JlYXRpb24gb2Ygc29ja2V0OyB0ZXJtaW5hdGluZ1xuIik7CiAJCXJldHVybiBFUlJfUFRSKHJlc3VsdCk7CiAJfQotCisJLyoKKwkgKiBLZXJuZWwgc29ja2V0cyB0aGF0IGFyZSBhIHBhcnQgb2YgYSBuYW1lc3BhY2UsIHNob3VsZCBub3QKKwkgKiBob2xkIGEgcmVmZXJlbmNlIHRvIGEgbmFtZXNwYWNlIGluIG9yZGVyIHRvIGFsbG93IHRvIHN0b3AgaXQuCisJICogQWZ0ZXIgc2tfY2hhbmdlX25ldCBzaG91bGQgYmUgcmVsZWFzZWQgdXNpbmcgc2tfcmVsZWFzZV9rZXJuZWwuCisJICovCisJc2tfY2hhbmdlX25ldChzb2NrLT5zaywgbmV0KTsKIAkvKiBpdCBpcyBlcXVpdmFsZW50IHRvIHRoZSBSRVVTRUFERFIgb3B0aW9uIGluIHVzZXItc3BhY2UgKi8KIAlzb2NrLT5zay0+c2tfcmV1c2UgPSAxOwogCkBAIC0xMzc3LDggKzEzODcsOCBAQAogCiAJcmV0dXJuIHNvY2s7CiAKLSAgZXJyb3I6Ci0Jc29ja19yZWxlYXNlKHNvY2spOworZXJyb3I6CisJc2tfcmVsZWFzZV9rZXJuZWwoc29jay0+c2spOwogCXJldHVybiBFUlJfUFRSKHJlc3VsdCk7CiB9CiAKQEAgLTE0NzMsNyArMTQ4Myw3IEBACiAJCWlwX3ZzX3N5bmNfYnVmZl9yZWxlYXNlKHNiKTsKIAogCS8qIHJlbGVhc2UgdGhlIHNlbmRpbmcgbXVsdGljYXN0IHNvY2tldCAqLwotCXNvY2tfcmVsZWFzZSh0aW5mby0+c29jayk7CisJc2tfcmVsZWFzZV9rZXJuZWwodGluZm8tPnNvY2stPnNrKTsKIAlrZnJlZSh0aW5mbyk7CiAKIAlyZXR1cm4gMDsKQEAgLTE1MTMsNyArMTUyMyw3IEBACiAJfQogCiAJLyogcmVsZWFzZSB0aGUgc2VuZGluZyBtdWx0aWNhc3Qgc29ja2V0ICovCi0Jc29ja19yZWxlYXNlKHRpbmZvLT5zb2NrKTsKKwlza19yZWxlYXNlX2tlcm5lbCh0aW5mby0+c29jay0+c2spOwogCWtmcmVlKHRpbmZvLT5idWYpOwogCWtmcmVlKHRpbmZvKTsKIApAQCAtMTYwMSw3ICsxNjExLDcgQEAKIG91dGJ1ZjoKIAlrZnJlZShidWYpOwogb3V0c29ja2V0OgotCXNvY2tfcmVsZWFzZShzb2NrKTsKKwlza19yZWxlYXNlX2tlcm5lbChzb2NrLT5zayk7CiBvdXQ6CiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE2MTAsNiArMTYyMCw3IEBACiBpbnQgc3RvcF9zeW5jX3RocmVhZChzdHJ1Y3QgbmV0ICpuZXQsIGludCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IG5ldF9pcHZzKG5ldCk7CisJaW50IHJldGMgPSAtRUlOVkFMOwogCiAJSVBfVlNfREJHKDcsICIlcygpOiBwaWQgJWRcbiIsIF9fZnVuY19fLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CiAKQEAgLTE2MjksNyArMTY0MCw3IEBACiAJCXNwaW5fbG9ja19iaCgmaXB2cy0+c3luY19sb2NrKTsKIAkJaXB2cy0+c3luY19zdGF0ZSAmPSB+SVBfVlNfU1RBVEVfTUFTVEVSOwogCQlzcGluX3VubG9ja19iaCgmaXB2cy0+c3luY19sb2NrKTsKLQkJa3RocmVhZF9zdG9wKGlwdnMtPm1hc3Rlcl90aHJlYWQpOworCQlyZXRjID0ga3RocmVhZF9zdG9wKGlwdnMtPm1hc3Rlcl90aHJlYWQpOwogCQlpcHZzLT5tYXN0ZXJfdGhyZWFkID0gTlVMTDsKIAl9IGVsc2UgaWYgKHN0YXRlID09IElQX1ZTX1NUQVRFX0JBQ0tVUCkgewogCQlpZiAoIWlwdnMtPmJhY2t1cF90aHJlYWQpCkBAIC0xNjM5LDIyICsxNjUwLDIwIEBACiAJCQl0YXNrX3BpZF9ucihpcHZzLT5iYWNrdXBfdGhyZWFkKSk7CiAKIAkJaXB2cy0+c3luY19zdGF0ZSAmPSB+SVBfVlNfU1RBVEVfQkFDS1VQOwotCQlrdGhyZWFkX3N0b3AoaXB2cy0+YmFja3VwX3RocmVhZCk7CisJCXJldGMgPSBrdGhyZWFkX3N0b3AoaXB2cy0+YmFja3VwX3RocmVhZCk7CiAJCWlwdnMtPmJhY2t1cF90aHJlYWQgPSBOVUxMOwotCX0gZWxzZSB7Ci0JCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIGRlY3JlYXNlIHRoZSBtb2R1bGUgdXNlIGNvdW50ICovCiAJaXBfdnNfdXNlX2NvdW50X2RlYygpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldGM7CiB9CiAKIC8qCiAgKiBJbml0aWFsaXplIGRhdGEgc3RydWN0IGZvciBlYWNoIG5ldG5zCiAgKi8KLXN0YXRpYyBpbnQgX19uZXRfaW5pdCBfX2lwX3ZzX3N5bmNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCitpbnQgX19uZXRfaW5pdCBfX2lwX3ZzX3N5bmNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBuZXRfaXB2cyhuZXQpOwogCkBAIC0xNjY4LDI0ICsxNjc3LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9faXBfdnNfc3luY19jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCkKK3ZvaWQgX19pcF92c19zeW5jX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KQogewotCXN0b3Bfc3luY190aHJlYWQobmV0LCBJUF9WU19TVEFURV9NQVNURVIpOwotCXN0b3Bfc3luY190aHJlYWQobmV0LCBJUF9WU19TVEFURV9CQUNLVVApOworCWludCByZXRjOworCisJcmV0YyA9IHN0b3Bfc3luY190aHJlYWQobmV0LCBJUF9WU19TVEFURV9NQVNURVIpOworCWlmIChyZXRjICYmIHJldGMgIT0gLUVTUkNIKQorCQlwcl9lcnIoIkZhaWxlZCB0byBzdG9wIE1hc3RlciBEYWVtb25cbiIpOworCisJcmV0YyA9IHN0b3Bfc3luY190aHJlYWQobmV0LCBJUF9WU19TVEFURV9CQUNLVVApOworCWlmIChyZXRjICYmIHJldGMgIT0gLUVTUkNIKQorCQlwcl9lcnIoIkZhaWxlZCB0byBzdG9wIEJhY2t1cCBEYWVtb25cbiIpOwogfQogCi1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGlwdnNfc3luY19vcHMgPSB7Ci0JLmluaXQgPSBfX2lwX3ZzX3N5bmNfaW5pdCwKLQkuZXhpdCA9IF9faXBfdnNfc3luY19jbGVhbnVwLAotfTsKLQotCiBpbnQgX19pbml0IGlwX3ZzX3N5bmNfaW5pdCh2b2lkKQogewotCXJldHVybiByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHZzX3N5bmNfb3BzKTsKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBpcF92c19zeW5jX2NsZWFudXAodm9pZCkKIHsKLQl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdnNfc3luY19vcHMpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMKaW5kZXggNjEzMmIyMS4uZWUzMTlhNCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jCkBAIC04Nyw3ICs4Nyw3IEBACiAvKiBHZXQgcm91dGUgdG8gZGVzdGluYXRpb24gb3IgcmVtb3RlIHNlcnZlciAqLwogc3RhdGljIHN0cnVjdCBydGFibGUgKgogX19pcF92c19nZXRfb3V0X3J0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LAotCQkgICBfX2JlMzIgZGFkZHIsIHUzMiBydG9zLCBpbnQgcnRfbW9kZSkKKwkJICAgX19iZTMyIGRhZGRyLCB1MzIgcnRvcywgaW50IHJ0X21vZGUsIF9fYmUzMiAqcmV0X3NhZGRyKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiX2RzdChza2IpLT5kZXYpOwogCXN0cnVjdCBydGFibGUgKnJ0OwkJCS8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovCkBAIC05OCw3ICs5OCwxMiBAQAogCQlzcGluX2xvY2soJmRlc3QtPmRzdF9sb2NrKTsKIAkJaWYgKCEocnQgPSAoc3RydWN0IHJ0YWJsZSAqKQogCQkgICAgICBfX2lwX3ZzX2RzdF9jaGVjayhkZXN0LCBydG9zKSkpIHsKLQkJCXJ0ID0gaXBfcm91dGVfb3V0cHV0KG5ldCwgZGVzdC0+YWRkci5pcCwgMCwgcnRvcywgMCk7CisJCQlzdHJ1Y3QgZmxvd2k0IGZsNDsKKworCQkJbWVtc2V0KCZmbDQsIDAsIHNpemVvZihmbDQpKTsKKwkJCWZsNC5kYWRkciA9IGRlc3QtPmFkZHIuaXA7CisJCQlmbDQuZmxvd2k0X3RvcyA9IHJ0b3M7CisJCQlydCA9IGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCAmZmw0KTsKIAkJCWlmIChJU19FUlIocnQpKSB7CiAJCQkJc3Bpbl91bmxvY2soJmRlc3QtPmRzdF9sb2NrKTsKIAkJCQlJUF9WU19EQkdfUkwoImlwX3JvdXRlX291dHB1dCBlcnJvciwgZGVzdDogJXBJNFxuIiwKQEAgLTEwNiwxOCArMTExLDMwIEBACiAJCQkJcmV0dXJuIE5VTEw7CiAJCQl9CiAJCQlfX2lwX3ZzX2RzdF9zZXQoZGVzdCwgcnRvcywgZHN0X2Nsb25lKCZydC0+ZHN0KSwgMCk7Ci0JCQlJUF9WU19EQkcoMTAsICJuZXcgZHN0ICVwSTQsIHJlZmNudD0lZCwgcnRvcz0lWFxuIiwKLQkJCQkgICZkZXN0LT5hZGRyLmlwLAorCQkJZGVzdC0+ZHN0X3NhZGRyLmlwID0gZmw0LnNhZGRyOworCQkJSVBfVlNfREJHKDEwLCAibmV3IGRzdCAlcEk0LCBzcmMgJXBJNCwgcmVmY250PSVkLCAiCisJCQkJICAicnRvcz0lWFxuIiwKKwkJCQkgICZkZXN0LT5hZGRyLmlwLCAmZGVzdC0+ZHN0X3NhZGRyLmlwLAogCQkJCSAgYXRvbWljX3JlYWQoJnJ0LT5kc3QuX19yZWZjbnQpLCBydG9zKTsKIAkJfQorCQlkYWRkciA9IGRlc3QtPmFkZHIuaXA7CisJCWlmIChyZXRfc2FkZHIpCisJCQkqcmV0X3NhZGRyID0gZGVzdC0+ZHN0X3NhZGRyLmlwOwogCQlzcGluX3VubG9jaygmZGVzdC0+ZHN0X2xvY2spOwogCX0gZWxzZSB7Ci0JCXJ0ID0gaXBfcm91dGVfb3V0cHV0KG5ldCwgZGFkZHIsIDAsIHJ0b3MsIDApOworCQlzdHJ1Y3QgZmxvd2k0IGZsNDsKKworCQltZW1zZXQoJmZsNCwgMCwgc2l6ZW9mKGZsNCkpOworCQlmbDQuZGFkZHIgPSBkYWRkcjsKKwkJZmw0LmZsb3dpNF90b3MgPSBydG9zOworCQlydCA9IGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCAmZmw0KTsKIAkJaWYgKElTX0VSUihydCkpIHsKIAkJCUlQX1ZTX0RCR19STCgiaXBfcm91dGVfb3V0cHV0IGVycm9yLCBkZXN0OiAlcEk0XG4iLAogCQkJCSAgICAgJmRhZGRyKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CisJCWlmIChyZXRfc2FkZHIpCisJCQkqcmV0X3NhZGRyID0gZmw0LnNhZGRyOwogCX0KIAogCWxvY2FsID0gcnQtPnJ0X2ZsYWdzICYgUlRDRl9MT0NBTDsKQEAgLTEyNSw3ICsxNDIsNyBAQAogCSAgICAgIHJ0X21vZGUpKSB7CiAJCUlQX1ZTX0RCR19STCgiU3RvcHBpbmcgdHJhZmZpYyB0byAlcyBhZGRyZXNzLCBkZXN0OiAlcEk0XG4iLAogCQkJICAgICAocnQtPnJ0X2ZsYWdzICYgUlRDRl9MT0NBTCkgPwotCQkJICAgICAibG9jYWwiOiJub24tbG9jYWwiLCAmcnQtPnJ0X2RzdCk7CisJCQkgICAgICJsb2NhbCI6Im5vbi1sb2NhbCIsICZkYWRkcik7CiAJCWlwX3J0X3B1dChydCk7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTEzMywxNCArMTUwLDE0IEBACiAJICAgICEoKG9ydCA9IHNrYl9ydGFibGUoc2tiKSkgJiYgb3J0LT5ydF9mbGFncyAmIFJUQ0ZfTE9DQUwpKSB7CiAJCUlQX1ZTX0RCR19STCgiUmVkaXJlY3QgZnJvbSBub24tbG9jYWwgYWRkcmVzcyAlcEk0IHRvIGxvY2FsICIKIAkJCSAgICAgInJlcXVpcmVzIE5BVCBtZXRob2QsIGRlc3Q6ICVwSTRcbiIsCi0JCQkgICAgICZpcF9oZHIoc2tiKS0+ZGFkZHIsICZydC0+cnRfZHN0KTsKKwkJCSAgICAgJmlwX2hkcihza2IpLT5kYWRkciwgJmRhZGRyKTsKIAkJaXBfcnRfcHV0KHJ0KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCWlmICh1bmxpa2VseSghbG9jYWwgJiYgaXB2NF9pc19sb29wYmFjayhpcF9oZHIoc2tiKS0+c2FkZHIpKSkgewogCQlJUF9WU19EQkdfUkwoIlN0b3BwaW5nIHRyYWZmaWMgZnJvbSBsb29wYmFjayBhZGRyZXNzICVwSTQgIgogCQkJICAgICAidG8gbm9uLWxvY2FsIGFkZHJlc3MsIGRlc3Q6ICVwSTRcbiIsCi0JCQkgICAgICZpcF9oZHIoc2tiKS0+c2FkZHIsICZydC0+cnRfZHN0KTsKKwkJCSAgICAgJmlwX2hkcihza2IpLT5zYWRkciwgJmRhZGRyKTsKIAkJaXBfcnRfcHV0KHJ0KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtMjI5LDggKzI0Niw2IEBACiAKIC8qCiAgKiBHZXQgcm91dGUgdG8gZGVzdGluYXRpb24gb3IgcmVtb3RlIHNlcnZlcgotICogcnRfbW9kZTogZmxhZ3MsICYxPUFsbG93IGxvY2FsIGRlc3QsICYyPUFsbG93IG5vbi1sb2NhbCBkZXN0LAotICoJICAgICY0PUFsbG93IHJlZGlyZWN0IGZyb20gcmVtb3RlIGRhZGRyIHRvIGxvY2FsCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKgogX19pcF92c19nZXRfb3V0X3J0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LApAQCAtMjUwLDcgKzI2NSw3IEBACiAJCQl1MzIgY29va2llOwogCiAJCQlkc3QgPSBfX2lwX3ZzX3JvdXRlX291dHB1dF92NihuZXQsICZkZXN0LT5hZGRyLmluNiwKLQkJCQkJCSAgICAgICZkZXN0LT5kc3Rfc2FkZHIsCisJCQkJCQkgICAgICAmZGVzdC0+ZHN0X3NhZGRyLmluNiwKIAkJCQkJCSAgICAgIGRvX3hmcm0pOwogCQkJaWYgKCFkc3QpIHsKIAkJCQlzcGluX3VubG9jaygmZGVzdC0+ZHN0X2xvY2spOwpAQCAtMjYwLDExICsyNzUsMTEgQEAKIAkJCWNvb2tpZSA9IHJ0LT5ydDZpX25vZGUgPyBydC0+cnQ2aV9ub2RlLT5mbl9zZXJudW0gOiAwOwogCQkJX19pcF92c19kc3Rfc2V0KGRlc3QsIDAsIGRzdF9jbG9uZSgmcnQtPmRzdCksIGNvb2tpZSk7CiAJCQlJUF9WU19EQkcoMTAsICJuZXcgZHN0ICVwSTYsIHNyYyAlcEk2LCByZWZjbnQ9JWRcbiIsCi0JCQkJICAmZGVzdC0+YWRkci5pbjYsICZkZXN0LT5kc3Rfc2FkZHIsCisJCQkJICAmZGVzdC0+YWRkci5pbjYsICZkZXN0LT5kc3Rfc2FkZHIuaW42LAogCQkJCSAgYXRvbWljX3JlYWQoJnJ0LT5kc3QuX19yZWZjbnQpKTsKIAkJfQogCQlpZiAocmV0X3NhZGRyKQotCQkJaXB2Nl9hZGRyX2NvcHkocmV0X3NhZGRyLCAmZGVzdC0+ZHN0X3NhZGRyKTsKKwkJCWlwdjZfYWRkcl9jb3B5KHJldF9zYWRkciwgJmRlc3QtPmRzdF9zYWRkci5pbjYpOwogCQlzcGluX3VubG9jaygmZGVzdC0+ZHN0X2xvY2spOwogCX0gZWxzZSB7CiAJCWRzdCA9IF9faXBfdnNfcm91dGVfb3V0cHV0X3Y2KG5ldCwgZGFkZHIsIHJldF9zYWRkciwgZG9feGZybSk7CkBAIC0yNzQsMTMgKzI4OSwxNCBAQAogCX0KIAogCWxvY2FsID0gX19pcF92c19pc19sb2NhbF9yb3V0ZTYocnQpOwotCWlmICghKChsb2NhbCA/IDEgOiAyKSAmIHJ0X21vZGUpKSB7CisJaWYgKCEoKGxvY2FsID8gSVBfVlNfUlRfTU9ERV9MT0NBTCA6IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMKSAmCisJICAgICAgcnRfbW9kZSkpIHsKIAkJSVBfVlNfREJHX1JMKCJTdG9wcGluZyB0cmFmZmljIHRvICVzIGFkZHJlc3MsIGRlc3Q6ICVwSTZcbiIsCiAJCQkgICAgIGxvY2FsID8gImxvY2FsIjoibm9uLWxvY2FsIiwgZGFkZHIpOwogCQlkc3RfcmVsZWFzZSgmcnQtPmRzdCk7CiAJCXJldHVybiBOVUxMOwogCX0KLQlpZiAobG9jYWwgJiYgIShydF9tb2RlICYgNCkgJiYKKwlpZiAobG9jYWwgJiYgIShydF9tb2RlICYgSVBfVlNfUlRfTU9ERV9SRFIpICYmCiAJICAgICEoKG9ydCA9IChzdHJ1Y3QgcnQ2X2luZm8gKikgc2tiX2RzdChza2IpKSAmJgogCSAgICAgIF9faXBfdnNfaXNfbG9jYWxfcm91dGU2KG9ydCkpKSB7CiAJCUlQX1ZTX0RCR19STCgiUmVkaXJlY3QgZnJvbSBub24tbG9jYWwgYWRkcmVzcyAlcEk2IHRvIGxvY2FsICIKQEAgLTM4Niw3ICs0MDIsNyBAQAogCUVudGVyRnVuY3Rpb24oMTApOwogCiAJaWYgKCEocnQgPSBfX2lwX3ZzX2dldF9vdXRfcnQoc2tiLCBOVUxMLCBpcGgtPmRhZGRyLCBSVF9UT1MoaXBoLT50b3MpLAotCQkJCSAgICAgIElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMKSkpCisJCQkJICAgICAgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwsIE5VTEwpKSkKIAkJZ290byB0eF9lcnJvcl9pY21wOwogCiAJLyogTVRVIGNoZWNraW5nICovCkBAIC00NDAsNyArNDU2LDggQEAKIAogCUVudGVyRnVuY3Rpb24oMTApOwogCi0JaWYgKCEocnQgPSBfX2lwX3ZzX2dldF9vdXRfcnRfdjYoc2tiLCBOVUxMLCAmaXBoLT5kYWRkciwgTlVMTCwgMCwgMikpKQorCWlmICghKHJ0ID0gX19pcF92c19nZXRfb3V0X3J0X3Y2KHNrYiwgTlVMTCwgJmlwaC0+ZGFkZHIsIE5VTEwsIDAsCisJCQkJCSBJUF9WU19SVF9NT0RFX05PTl9MT0NBTCkpKQogCQlnb3RvIHR4X2Vycm9yX2ljbXA7CiAKIAkvKiBNVFUgY2hlY2tpbmcgKi8KQEAgLTUxNyw3ICs1MzQsNyBAQAogCQkJCSAgICAgIFJUX1RPUyhpcGgtPnRvcyksCiAJCQkJICAgICAgSVBfVlNfUlRfTU9ERV9MT0NBTCB8CiAJCQkJCUlQX1ZTX1JUX01PREVfTk9OX0xPQ0FMIHwKLQkJCQkJSVBfVlNfUlRfTU9ERV9SRFIpKSkKKwkJCQkJSVBfVlNfUlRfTU9ERV9SRFIsIE5VTEwpKSkKIAkJZ290byB0eF9lcnJvcl9pY21wOwogCWxvY2FsID0gcnQtPnJ0X2ZsYWdzICYgUlRDRl9MT0NBTDsKIAkvKgpAQCAtNTM5LDcgKzU1Niw3IEBACiAjZW5kaWYKIAogCS8qIEZyb20gd29ybGQgYnV0IEROQVQgdG8gbG9vcGJhY2sgYWRkcmVzcz8gKi8KLQlpZiAobG9jYWwgJiYgaXB2NF9pc19sb29wYmFjayhydC0+cnRfZHN0KSAmJgorCWlmIChsb2NhbCAmJiBpcHY0X2lzX2xvb3BiYWNrKGNwLT5kYWRkci5pcCkgJiYKIAkgICAgcnRfaXNfaW5wdXRfcm91dGUoc2tiX3J0YWJsZShza2IpKSkgewogCQlJUF9WU19EQkdfUkxfUEtUKDEsIEFGX0lORVQsIHBwLCBza2IsIDAsICJpcF92c19uYXRfeG1pdCgpOiAiCiAJCQkJICJzdG9wcGluZyBETkFUIHRvIGxvb3BiYWNrIGFkZHJlc3MiKTsKQEAgLTYzMiw3ICs2NDksOSBAQAogCX0KIAogCWlmICghKHJ0ID0gX19pcF92c19nZXRfb3V0X3J0X3Y2KHNrYiwgY3AtPmRlc3QsICZjcC0+ZGFkZHIuaW42LCBOVUxMLAotCQkJCQkgMCwgMXwyfDQpKSkKKwkJCQkJIDAsIChJUF9WU19SVF9NT0RFX0xPQ0FMIHwKKwkJCQkJICAgICBJUF9WU19SVF9NT0RFX05PTl9MT0NBTCB8CisJCQkJCSAgICAgSVBfVlNfUlRfTU9ERV9SRFIpKSkpCiAJCWdvdG8gdHhfZXJyb3JfaWNtcDsKIAlsb2NhbCA9IF9faXBfdnNfaXNfbG9jYWxfcm91dGU2KHJ0KTsKIAkvKgpAQCAtNzQ4LDYgKzc2Nyw3IEBACiAJCSAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCkKIHsKIAlzdHJ1Y3QgcnRhYmxlICpydDsJCQkvKiBSb3V0ZSB0byB0aGUgb3RoZXIgaG9zdCAqLworCV9fYmUzMiBzYWRkcjsJCQkJLyogU291cmNlIGZvciB0dW5uZWwgKi8KIAlzdHJ1Y3QgbmV0X2RldmljZSAqdGRldjsJCS8qIERldmljZSB0byBvdGhlciBob3N0ICovCiAJc3RydWN0IGlwaGRyICAqb2xkX2lwaCA9IGlwX2hkcihza2IpOwogCXU4ICAgICB0b3MgPSBvbGRfaXBoLT50b3M7CkBAIC03NjEsNyArNzgxLDggQEAKIAogCWlmICghKHJ0ID0gX19pcF92c19nZXRfb3V0X3J0KHNrYiwgY3AtPmRlc3QsIGNwLT5kYWRkci5pcCwKIAkJCQkgICAgICBSVF9UT1ModG9zKSwgSVBfVlNfUlRfTU9ERV9MT0NBTCB8Ci0JCQkJCQkgICBJUF9WU19SVF9NT0RFX05PTl9MT0NBTCkpKQorCQkJCQkJICAgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwsCisJCQkJCQkgICAmc2FkZHIpKSkKIAkJZ290byB0eF9lcnJvcl9pY21wOwogCWlmIChydC0+cnRfZmxhZ3MgJiBSVENGX0xPQ0FMKSB7CiAJCWlwX3J0X3B1dChydCk7CkBAIC04MjksOCArODUwLDggQEAKIAlpcGgtPmZyYWdfb2ZmCQk9CWRmOwogCWlwaC0+cHJvdG9jb2wJCT0JSVBQUk9UT19JUElQOwogCWlwaC0+dG9zCQk9CXRvczsKLQlpcGgtPmRhZGRyCQk9CXJ0LT5ydF9kc3Q7Ci0JaXBoLT5zYWRkcgkJPQlydC0+cnRfc3JjOworCWlwaC0+ZGFkZHIJCT0JY3AtPmRhZGRyLmlwOworCWlwaC0+c2FkZHIJCT0Jc2FkZHI7CiAJaXBoLT50dGwJCT0Jb2xkX2lwaC0+dHRsOwogCWlwX3NlbGVjdF9pZGVudChpcGgsICZydC0+ZHN0LCBOVUxMKTsKIApAQCAtODc1LDcgKzg5Niw4IEBACiAJRW50ZXJGdW5jdGlvbigxMCk7CiAKIAlpZiAoIShydCA9IF9faXBfdnNfZ2V0X291dF9ydF92Nihza2IsIGNwLT5kZXN0LCAmY3AtPmRhZGRyLmluNiwKLQkJCQkJICZzYWRkciwgMSwgMXwyKSkpCisJCQkJCSAmc2FkZHIsIDEsIChJUF9WU19SVF9NT0RFX0xPQ0FMIHwKKwkJCQkJCSAgICAgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwpKSkpCiAJCWdvdG8gdHhfZXJyb3JfaWNtcDsKIAlpZiAoX19pcF92c19pc19sb2NhbF9yb3V0ZTYocnQpKSB7CiAJCWRzdF9yZWxlYXNlKCZydC0+ZHN0KTsKQEAgLTk5Miw3ICsxMDE0LDcgQEAKIAlpZiAoIShydCA9IF9faXBfdnNfZ2V0X291dF9ydChza2IsIGNwLT5kZXN0LCBjcC0+ZGFkZHIuaXAsCiAJCQkJICAgICAgUlRfVE9TKGlwaC0+dG9zKSwKIAkJCQkgICAgICBJUF9WU19SVF9NT0RFX0xPQ0FMIHwKLQkJCQkJSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwpKSkKKwkJCQkJSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwsIE5VTEwpKSkKIAkJZ290byB0eF9lcnJvcl9pY21wOwogCWlmIChydC0+cnRfZmxhZ3MgJiBSVENGX0xPQ0FMKSB7CiAJCWlwX3J0X3B1dChydCk7CkBAIC0xMDUwLDcgKzEwNzIsOCBAQAogCUVudGVyRnVuY3Rpb24oMTApOwogCiAJaWYgKCEocnQgPSBfX2lwX3ZzX2dldF9vdXRfcnRfdjYoc2tiLCBjcC0+ZGVzdCwgJmNwLT5kYWRkci5pbjYsIE5VTEwsCi0JCQkJCSAwLCAxfDIpKSkKKwkJCQkJIDAsIChJUF9WU19SVF9NT0RFX0xPQ0FMIHwKKwkJCQkJICAgICBJUF9WU19SVF9NT0RFX05PTl9MT0NBTCkpKSkKIAkJZ290byB0eF9lcnJvcl9pY21wOwogCWlmIChfX2lwX3ZzX2lzX2xvY2FsX3JvdXRlNihydCkpIHsKIAkJZHN0X3JlbGVhc2UoJnJ0LT5kc3QpOwpAQCAtMTEwOSwxMiArMTEzMiwxMyBAQAogICovCiBpbnQKIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCi0JCXN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQpCisJCXN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBob29rbnVtKQogewogCXN0cnVjdCBydGFibGUJKnJ0OwkvKiBSb3V0ZSB0byB0aGUgb3RoZXIgaG9zdCAqLwogCWludCBtdHU7CiAJaW50IHJjOwogCWludCBsb2NhbDsKKwlpbnQgcnRfbW9kZTsKIAogCUVudGVyRnVuY3Rpb24oMTApOwogCkBAIC0xMTM1LDExICsxMTU5LDEzIEBACiAJICogbWFuZ2xlIGFuZCBzZW5kIHRoZSBwYWNrZXQgaGVyZSAob25seSBmb3IgVlMvTkFUKQogCSAqLwogCisJLyogTE9DQUxOT0RFIGZyb20gRk9SV0FSRCBob29rIGlzIG5vdCBzdXBwb3J0ZWQgKi8KKwlydF9tb2RlID0gKGhvb2tudW0gIT0gTkZfSU5FVF9GT1JXQVJEKSA/CisJCSAgSVBfVlNfUlRfTU9ERV9MT0NBTCB8IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMIHwKKwkJICBJUF9WU19SVF9NT0RFX1JEUiA6IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMOwogCWlmICghKHJ0ID0gX19pcF92c19nZXRfb3V0X3J0KHNrYiwgY3AtPmRlc3QsIGNwLT5kYWRkci5pcCwKIAkJCQkgICAgICBSVF9UT1MoaXBfaGRyKHNrYiktPnRvcyksCi0JCQkJICAgICAgSVBfVlNfUlRfTU9ERV9MT0NBTCB8Ci0JCQkJCUlQX1ZTX1JUX01PREVfTk9OX0xPQ0FMIHwKLQkJCQkJSVBfVlNfUlRfTU9ERV9SRFIpKSkKKwkJCQkgICAgICBydF9tb2RlLCBOVUxMKSkpCiAJCWdvdG8gdHhfZXJyb3JfaWNtcDsKIAlsb2NhbCA9IHJ0LT5ydF9mbGFncyAmIFJUQ0ZfTE9DQUw7CiAKQEAgLTExNjIsNyArMTE4OCw3IEBACiAjZW5kaWYKIAogCS8qIEZyb20gd29ybGQgYnV0IEROQVQgdG8gbG9vcGJhY2sgYWRkcmVzcz8gKi8KLQlpZiAobG9jYWwgJiYgaXB2NF9pc19sb29wYmFjayhydC0+cnRfZHN0KSAmJgorCWlmIChsb2NhbCAmJiBpcHY0X2lzX2xvb3BiYWNrKGNwLT5kYWRkci5pcCkgJiYKIAkgICAgcnRfaXNfaW5wdXRfcm91dGUoc2tiX3J0YWJsZShza2IpKSkgewogCQlJUF9WU19EQkcoMSwgIiVzKCk6ICIKIAkJCSAgInN0b3BwaW5nIEROQVQgdG8gbG9vcGJhY2sgJXBJNFxuIiwKQEAgLTEyMjcsMTIgKzEyNTMsMTMgQEAKICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgogaW50CiBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAotCQlzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0KQorCQlzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaG9va251bSkKIHsKIAlzdHJ1Y3QgcnQ2X2luZm8JKnJ0OwkvKiBSb3V0ZSB0byB0aGUgb3RoZXIgaG9zdCAqLwogCWludCBtdHU7CiAJaW50IHJjOwogCWludCBsb2NhbDsKKwlpbnQgcnRfbW9kZTsKIAogCUVudGVyRnVuY3Rpb24oMTApOwogCkBAIC0xMjUzLDggKzEyODAsMTIgQEAKIAkgKiBtYW5nbGUgYW5kIHNlbmQgdGhlIHBhY2tldCBoZXJlIChvbmx5IGZvciBWUy9OQVQpCiAJICovCiAKKwkvKiBMT0NBTE5PREUgZnJvbSBGT1JXQVJEIGhvb2sgaXMgbm90IHN1cHBvcnRlZCAqLworCXJ0X21vZGUgPSAoaG9va251bSAhPSBORl9JTkVUX0ZPUldBUkQpID8KKwkJICBJUF9WU19SVF9NT0RFX0xPQ0FMIHwgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwgfAorCQkgIElQX1ZTX1JUX01PREVfUkRSIDogSVBfVlNfUlRfTU9ERV9OT05fTE9DQUw7CiAJaWYgKCEocnQgPSBfX2lwX3ZzX2dldF9vdXRfcnRfdjYoc2tiLCBjcC0+ZGVzdCwgJmNwLT5kYWRkci5pbjYsIE5VTEwsCi0JCQkJCSAwLCAxfDJ8NCkpKQorCQkJCQkgMCwgcnRfbW9kZSkpKQogCQlnb3RvIHR4X2Vycm9yX2ljbXA7CiAKIAlsb2NhbCA9IF9faXBfdnNfaXNfbG9jYWxfcm91dGU2KHJ0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMKaW5kZXggODBhMjNlZC4uMDVlY2RjMiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMKQEAgLTY4LDEyICs2OCw2IEBACiAJcmV0dXJuICh2b2lkICopKCpleHQpICsgb2ZmOwogfQogCi1zdGF0aWMgdm9pZCBfX25mX2N0X2V4dF9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCi17Ci0Jc3RydWN0IG5mX2N0X2V4dCAqZXh0ID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBuZl9jdF9leHQsIHJjdSk7Ci0Ja2ZyZWUoZXh0KTsKLX0KLQogdm9pZCAqX19uZl9jdF9leHRfYWRkKHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBuZl9jdF9leHRfaWQgaWQsIGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3QgbmZfY3RfZXh0ICpvbGQsICpuZXc7CkBAIC0xMTQsNyArMTA4LDcgQEAKIAkJCQkJKHZvaWQgKilvbGQgKyBvbGQtPm9mZnNldFtpXSk7CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJfQotCQljYWxsX3JjdSgmb2xkLT5yY3UsIF9fbmZfY3RfZXh0X2ZyZWVfcmN1KTsKKwkJa2ZyZWVfcmN1KG9sZCwgcmN1KTsKIAkJY3QtPmV4dCA9IG5ldzsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwppbmRleCAzMGJmOGExLi40ODJlOTBjIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCkBAIC0xMzM0LDYgKzEzMzQsNyBAQAogCXN0cnVjdCBuZl9jb25uICpjdDsKIAlpbnQgZXJyID0gLUVJTlZBTDsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyOworCXN0cnVjdCBuZl9jb25uX3RzdGFtcCAqdHN0YW1wOwogCiAJY3QgPSBuZl9jb25udHJhY2tfYWxsb2MobmV0LCB6b25lLCBvdHVwbGUsIHJ0dXBsZSwgR0ZQX0FUT01JQyk7CiAJaWYgKElTX0VSUihjdCkpCkBAIC0xNDUxLDYgKzE0NTIsOSBAQAogCQlfX3NldF9iaXQoSVBTX0VYUEVDVEVEX0JJVCwgJmN0LT5zdGF0dXMpOwogCQljdC0+bWFzdGVyID0gbWFzdGVyX2N0OwogCX0KKwl0c3RhbXAgPSBuZl9jb25uX3RzdGFtcF9maW5kKGN0KTsKKwlpZiAodHN0YW1wKQorCQl0c3RhbXAtPnN0YXJ0ID0ga3RpbWVfdG9fbnMoa3RpbWVfZ2V0X3JlYWwoKSk7CiAKIAlhZGRfdGltZXIoJmN0LT50aW1lb3V0KTsKIAluZl9jb25udHJhY2tfaGFzaF9pbnNlcnQoY3QpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYwppbmRleCAyMzdjYzE5Li5jYjVhMjg1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYwpAQCAtMTQxOSw2ICsxNDE5LDcgQEAKIAljb25zdCBjaGFyICpkcHRyLCAqZW5kOwogCXMxNiBkaWZmLCB0ZGlmZiA9IDA7CiAJaW50IHJldCA9IE5GX0FDQ0VQVDsKKwlib29sIHRlcm07CiAJdHlwZW9mKG5mX25hdF9zaXBfc2VxX2FkanVzdF9ob29rKSBuZl9uYXRfc2lwX3NlcV9hZGp1c3Q7CiAKIAlpZiAoY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICYmCkBAIC0xNDUzLDE0ICsxNDU0LDIxIEBACiAJCWlmIChkcHRyICsgbWF0Y2hvZmYgPT0gZW5kKQogCQkJYnJlYWs7CiAKLQkJaWYgKGVuZCArIHN0cmxlbigiXHJcblxyXG4iKSA+IGRwdHIgKyBkYXRhbGVuKQotCQkJYnJlYWs7Ci0JCWlmIChlbmRbMF0gIT0gJ1xyJyB8fCBlbmRbMV0gIT0gJ1xuJyB8fAotCQkgICAgZW5kWzJdICE9ICdccicgfHwgZW5kWzNdICE9ICdcbicpCisJCXRlcm0gPSBmYWxzZTsKKwkJZm9yICg7IGVuZCArIHN0cmxlbigiXHJcblxyXG4iKSA8PSBkcHRyICsgZGF0YWxlbjsgZW5kKyspIHsKKwkJCWlmIChlbmRbMF0gPT0gJ1xyJyAmJiBlbmRbMV0gPT0gJ1xuJyAmJgorCQkJICAgIGVuZFsyXSA9PSAnXHInICYmIGVuZFszXSA9PSAnXG4nKSB7CisJCQkJdGVybSA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKCF0ZXJtKQogCQkJYnJlYWs7CiAJCWVuZCArPSBzdHJsZW4oIlxyXG5cclxuIikgKyBjbGVuOwogCiAJCW1zZ2xlbiA9IG9yaWdsZW4gPSBlbmQgLSBkcHRyOworCQlpZiAobXNnbGVuID4gZGF0YWxlbikKKwkJCXJldHVybiBORl9EUk9QOwogCiAJCXJldCA9IHByb2Nlc3Nfc2lwX21zZyhza2IsIGN0LCBkYXRhb2ZmLCAmZHB0ciwgJm1zZ2xlbik7CiAJCWlmIChyZXQgIT0gTkZfQUNDRVBUKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCmluZGV4IDBhZTE0MjguLjA1ZTlmZWIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKQEAgLTI0NSw3ICsyNDUsNyBAQAogCXJldCA9IDA7CiByZWxlYXNlOgogCW5mX2N0X3B1dChjdCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjdF9zZXFfb3BzID0gewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYwppbmRleCA5ODVlOWI3Li5lMGVlMDEwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYwpAQCAtMzgxLDcgKzM4MSw2IEBACiAJc3RydWN0IG5mdWxubF9tc2dfcGFja2V0X2hkciBwbXNnOwogCXN0cnVjdCBubG1zZ2hkciAqbmxoOwogCXN0cnVjdCBuZmdlbm1zZyAqbmZtc2c7Ci0JX19iZTMyIHRtcF91aW50OwogCXNrX2J1ZmZfZGF0YV90IG9sZF90YWlsID0gaW5zdC0+c2tiLT50YWlsOwogCiAJbmxoID0gTkxNU0dfUFVUKGluc3QtPnNrYiwgMCwgMCwKQEAgLTQyOCw3ICs0MjcsNiBAQAogCX0KIAogCWlmIChvdXRkZXYpIHsKLQkJdG1wX3VpbnQgPSBodG9ubChvdXRkZXYtPmlmaW5kZXgpOwogI2lmbmRlZiBDT05GSUdfQlJJREdFX05FVEZJTFRFUgogCQlOTEFfUFVUX0JFMzIoaW5zdC0+c2tiLCBORlVMQV9JRklOREVYX09VVERFViwKIAkJCSAgICAgaHRvbmwob3V0ZGV2LT5pZmluZGV4KSk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMgYi9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKaW5kZXggYTlhZGY0Yy4uYjA4NjlmZSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jCisrKyBiL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYwpAQCAtNDU1LDYgKzQ1NSw3IEBACiAJCXZmcmVlKHh0W2FmXS5jb21wYXRfdGFiKTsKIAkJeHRbYWZdLmNvbXBhdF90YWIgPSBOVUxMOwogCQl4dFthZl0ubnVtYmVyID0gMDsKKwkJeHRbYWZdLmN1ciA9IDA7CiAJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwoeHRfY29tcGF0X2ZsdXNoX29mZnNldHMpOwpAQCAtNDczLDggKzQ3NCw3IEBACiAJCWVsc2UKIAkJCXJldHVybiBtaWQgPyB0bXBbbWlkIC0gMV0uZGVsdGEgOiAwOwogCX0KLQlXQVJOX09OX09OQ0UoMSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGxlZnQgPyB0bXBbbGVmdCAtIDFdLmRlbHRhIDogMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHh0X2NvbXBhdF9jYWxjX2p1bXApOwogCkBAIC03NjIsOCArNzYyLDggQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHh0X2NvbXBhdF91bmxvY2spOwogI2VuZGlmCiAKLURFRklORV9QRVJfQ1BVKHN0cnVjdCB4dF9pbmZvX2xvY2ssIHh0X2luZm9fbG9ja3MpOwotRVhQT1JUX1BFUl9DUFVfU1lNQk9MX0dQTCh4dF9pbmZvX2xvY2tzKTsKK0RFRklORV9QRVJfQ1BVKHNlcWNvdW50X3QsIHh0X3JlY3NlcSk7CitFWFBPUlRfUEVSX0NQVV9TWU1CT0xfR1BMKHh0X3JlY3NlcSk7CiAKIHN0YXRpYyBpbnQgeHRfanVtcHN0YWNrX2FsbG9jKHN0cnVjdCB4dF90YWJsZV9pbmZvICppKQogewpAQCAtMTM2MiwxMCArMTM2Miw3IEBACiAJaW50IHJ2OwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKLQkJc3RydWN0IHh0X2luZm9fbG9jayAqbG9jayA9ICZwZXJfY3B1KHh0X2luZm9fbG9ja3MsIGkpOwotCi0JCXNlcWxvY2tfaW5pdCgmbG9jay0+bG9jayk7Ci0JCWxvY2stPnJlYWRlcnMgPSAwOworCQlzZXFjb3VudF9pbml0KCZwZXJfY3B1KHh0X3JlY3NlcSwgaSkpOwogCX0KIAogCXh0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHh0X2FmKSAqIE5GUFJPVE9fTlVNUFJPVE8sIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9EU0NQLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X0RTQ1AuYwppbmRleCAwYTIyOTE5Li5hZTgyNzE2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0RTQ1AuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0RTQ1AuYwpAQCAtOTksNyArOTksNyBAQAogCXVfaW50OF90IG9yaWcsIG52OwogCiAJb3JpZyA9IGlwdjZfZ2V0X2RzZmllbGQoaXBoKTsKLQludiAgID0gKG9yaWcgJiBpbmZvLT50b3NfbWFzaykgXiBpbmZvLT50b3NfdmFsdWU7CisJbnYgICA9IChvcmlnICYgfmluZm8tPnRvc19tYXNrKSBeIGluZm8tPnRvc192YWx1ZTsKIAogCWlmIChvcmlnICE9IG52KSB7CiAJCWlmICghc2tiX21ha2Vfd3JpdGFibGUoc2tiLCBzaXplb2Yoc3RydWN0IGlwaGRyKSkpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5jIGIvbmV0L25ldGZpbHRlci94dF9jb25udHJhY2suYwppbmRleCA0ODFhODZmLi42MTgwNWQ3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmMKQEAgLTI3MiwxMSArMjcyLDYgQEAKIHsKIAlpbnQgcmV0OwogCi0JaWYgKHN0cmNtcChwYXItPnRhYmxlLCAicmF3IikgPT0gMCkgewotCQlwcl9pbmZvKCJzdGF0ZSBpcyB1bmRldGVybWluZWQgYXQgdGhlIHRpbWUgb2YgcmF3IHRhYmxlXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJcmV0ID0gbmZfY3RfbDNwcm90b190cnlfbW9kdWxlX2dldChwYXItPmZhbWlseSk7CiAJaWYgKHJldCA8IDApCiAJCXByX2luZm8oImNhbm5vdCBsb2FkIGNvbm50cmFjayBzdXBwb3J0IGZvciBwcm90bz0ldVxuIiwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfb3NmLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X29zZi5jCmluZGV4IDQzMjdlMTAuLjg0NmY4OTUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfb3NmLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9vc2YuYwpAQCAtNjIsMTMgKzYyLDYgQEAKIAlbT1NGX0FUVFJfRklOR0VSXQk9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3QgeHRfb3NmX3VzZXJfZmluZ2VyKSB9LAogfTsKIAotc3RhdGljIHZvaWQgeHRfb3NmX2Zpbmdlcl9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdV9oZWFkKQotewotCXN0cnVjdCB4dF9vc2ZfZmluZ2VyICpmID0gY29udGFpbmVyX29mKHJjdV9oZWFkLCBzdHJ1Y3QgeHRfb3NmX2ZpbmdlciwgcmN1X2hlYWQpOwotCi0Ja2ZyZWUoZik7Ci19Ci0KIHN0YXRpYyBpbnQgeHRfb3NmX2FkZF9jYWxsYmFjayhzdHJ1Y3Qgc29jayAqY3RubCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3Qgb3NmX2F0dHJzW10pCkBAIC0xMzMsNyArMTI2LDcgQEAKIAkJICogV2UgYXJlIHByb3RlY3RlZCBieSBuZm5sIG11dGV4LgogCQkgKi8KIAkJbGlzdF9kZWxfcmN1KCZzZi0+ZmluZ2VyX2VudHJ5KTsKLQkJY2FsbF9yY3UoJnNmLT5yY3VfaGVhZCwgeHRfb3NmX2Zpbmdlcl9mcmVlX3JjdSk7CisJCWtmcmVlX3JjdShzZiwgcmN1X2hlYWQpOwogCiAJCWVyciA9IDA7CiAJCWJyZWFrOwpAQCAtNDE0LDcgKzQwNyw3IEBACiAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZiwgJnh0X29zZl9maW5nZXJzW2ldLCBmaW5nZXJfZW50cnkpIHsKIAkJCWxpc3RfZGVsX3JjdSgmZi0+ZmluZ2VyX2VudHJ5KTsKLQkJCWNhbGxfcmN1KCZmLT5yY3VfaGVhZCwgeHRfb3NmX2Zpbmdlcl9mcmVlX3JjdSk7CisJCQlrZnJlZV9yY3UoZiwgcmN1X2hlYWQpOwogCQl9CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX2FkZHJsaXN0LmggYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfYWRkcmxpc3QuaAppbmRleCAxYzFjMDkzLi4yYjk2NDRlIDEwMDY0NAotLS0gYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfYWRkcmxpc3QuaAorKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfYWRkcmxpc3QuaApAQCAtOTYsMTIgKzk2LDEyIEBACiAKICNkZWZpbmUgbmV0bGJsX2FmNGxpc3RfZm9yZWFjaChpdGVyLCBoZWFkKQkJCQlcCiAJZm9yIChpdGVyID0gX19hZjRsaXN0X3ZhbGlkKChoZWFkKS0+bmV4dCwgaGVhZCk7CQlcCi0JICAgICBwcmVmZXRjaChpdGVyLT5saXN0Lm5leHQpLCAmaXRlci0+bGlzdCAhPSAoaGVhZCk7CQlcCisJICAgICAmaXRlci0+bGlzdCAhPSAoaGVhZCk7CQkJCQlcCiAJICAgICBpdGVyID0gX19hZjRsaXN0X3ZhbGlkKGl0ZXItPmxpc3QubmV4dCwgaGVhZCkpCiAKICNkZWZpbmUgbmV0bGJsX2FmNGxpc3RfZm9yZWFjaF9yY3UoaXRlciwgaGVhZCkJCQkJXAogCWZvciAoaXRlciA9IF9fYWY0bGlzdF92YWxpZF9yY3UoKGhlYWQpLT5uZXh0LCBoZWFkKTsJCVwKLQkgICAgIHByZWZldGNoKGl0ZXItPmxpc3QubmV4dCksCSZpdGVyLT5saXN0ICE9IChoZWFkKTsJCVwKKwkgICAgICZpdGVyLT5saXN0ICE9IChoZWFkKTsJCQkJCVwKIAkgICAgIGl0ZXIgPSBfX2FmNGxpc3RfdmFsaWRfcmN1KGl0ZXItPmxpc3QubmV4dCwgaGVhZCkpCiAKICNkZWZpbmUgbmV0bGJsX2FmNGxpc3RfZm9yZWFjaF9zYWZlKGl0ZXIsIHRtcCwgaGVhZCkJCQlcCkBAIC0xNjMsMTIgKzE2MywxMiBAQAogCiAjZGVmaW5lIG5ldGxibF9hZjZsaXN0X2ZvcmVhY2goaXRlciwgaGVhZCkJCQkJXAogCWZvciAoaXRlciA9IF9fYWY2bGlzdF92YWxpZCgoaGVhZCktPm5leHQsIGhlYWQpOwkJXAotCSAgICAgcHJlZmV0Y2goaXRlci0+bGlzdC5uZXh0KSwJJml0ZXItPmxpc3QgIT0gKGhlYWQpOwkJXAorCSAgICAgJml0ZXItPmxpc3QgIT0gKGhlYWQpOwkJCQkJXAogCSAgICAgaXRlciA9IF9fYWY2bGlzdF92YWxpZChpdGVyLT5saXN0Lm5leHQsIGhlYWQpKQogCiAjZGVmaW5lIG5ldGxibF9hZjZsaXN0X2ZvcmVhY2hfcmN1KGl0ZXIsIGhlYWQpCQkJCVwKIAlmb3IgKGl0ZXIgPSBfX2FmNmxpc3RfdmFsaWRfcmN1KChoZWFkKS0+bmV4dCwgaGVhZCk7CQlcCi0JICAgICBwcmVmZXRjaChpdGVyLT5saXN0Lm5leHQpLAkmaXRlci0+bGlzdCAhPSAoaGVhZCk7CQlcCisJICAgICAmaXRlci0+bGlzdCAhPSAoaGVhZCk7CQkJCQlcCiAJICAgICBpdGVyID0gX19hZjZsaXN0X3ZhbGlkX3JjdShpdGVyLT5saXN0Lm5leHQsIGhlYWQpKQogCiAjZGVmaW5lIG5ldGxibF9hZjZsaXN0X2ZvcmVhY2hfc2FmZShpdGVyLCB0bXAsIGhlYWQpCQkJXApkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX2NpcHNvX3Y0LmMgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2lwc29fdjQuYwppbmRleCA1ZjE0Yzg0Li5iYWU1NzU2IDEwMDY0NAotLS0gYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2lwc29fdjQuYworKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2lwc29fdjQuYwpAQCAtNDIyLDcgKzQyMiw2IEBACiAKIHsKIAlpbnQgcmV0X3ZhbCA9IC1FSU5WQUw7Ci0JY29uc3QgY2hhciAqdHlwZV9zdHIgPSAiKHVua25vd24pIjsKIAlzdHJ1Y3QgbmV0bGJsX2F1ZGl0IGF1ZGl0X2luZm87CiAKIAlpZiAoIWluZm8tPmF0dHJzW05MQkxfQ0lQU09WNF9BX0RPSV0gfHwKQEAgLTQzMiwxNSArNDMxLDEyIEBACiAJbmV0bGJsX25ldGxpbmtfYXVkaXRpbmZvKHNrYiwgJmF1ZGl0X2luZm8pOwogCXN3aXRjaCAobmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkxCTF9DSVBTT1Y0X0FfTVRZUEVdKSkgewogCWNhc2UgQ0lQU09fVjRfTUFQX1RSQU5TOgotCQl0eXBlX3N0ciA9ICJ0cmFucyI7CiAJCXJldF92YWwgPSBuZXRsYmxfY2lwc292NF9hZGRfc3RkKGluZm8sICZhdWRpdF9pbmZvKTsKIAkJYnJlYWs7CiAJY2FzZSBDSVBTT19WNF9NQVBfUEFTUzoKLQkJdHlwZV9zdHIgPSAicGFzcyI7CiAJCXJldF92YWwgPSBuZXRsYmxfY2lwc292NF9hZGRfcGFzcyhpbmZvLCAmYXVkaXRfaW5mbyk7CiAJCWJyZWFrOwogCWNhc2UgQ0lQU09fVjRfTUFQX0xPQ0FMOgotCQl0eXBlX3N0ciA9ICJsb2NhbCI7CiAJCXJldF92YWwgPSBuZXRsYmxfY2lwc292NF9hZGRfbG9jYWwoaW5mbywgJmF1ZGl0X2luZm8pOwogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdW5sYWJlbGVkLmMgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdW5sYWJlbGVkLmMKaW5kZXggZTJiMGE2OC4uOWMzODY1OCAxMDA2NDQKLS0tIGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VubGFiZWxlZC5jCisrKyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF91bmxhYmVsZWQuYwpAQCAtMTU0LDQ0ICsxNTQsNiBAQAogICovCiAKIC8qKgotICogbmV0bGJsX3VubGhzaF9mcmVlX2FkZHI0IC0gRnJlZXMgYW4gSVB2NCBhZGRyZXNzIGVudHJ5IGZyb20gdGhlIGhhc2ggdGFibGUKLSAqIEBlbnRyeTogdGhlIGVudHJ5J3MgUkNVIGZpZWxkCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiBUaGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIHVzZWQgYXMgYSBjYWxsYmFjayB0byB0aGUgY2FsbF9yY3UoKQotICogZnVuY3Rpb24gc28gdGhhdCBtZW1vcnkgYWxsb2NhdGVkIHRvIGEgaGFzaCB0YWJsZSBhZGRyZXNzIGVudHJ5IGNhbiBiZQotICogcmVsZWFzZWQgc2FmZWx5LgotICoKLSAqLwotc3RhdGljIHZvaWQgbmV0bGJsX3VubGhzaF9mcmVlX2FkZHI0KHN0cnVjdCByY3VfaGVhZCAqZW50cnkpCi17Ci0Jc3RydWN0IG5ldGxibF91bmxoc2hfYWRkcjQgKnB0cjsKLQotCXB0ciA9IGNvbnRhaW5lcl9vZihlbnRyeSwgc3RydWN0IG5ldGxibF91bmxoc2hfYWRkcjQsIHJjdSk7Ci0Ja2ZyZWUocHRyKTsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQotLyoqCi0gKiBuZXRsYmxfdW5saHNoX2ZyZWVfYWRkcjYgLSBGcmVlcyBhbiBJUHY2IGFkZHJlc3MgZW50cnkgZnJvbSB0aGUgaGFzaCB0YWJsZQotICogQGVudHJ5OiB0aGUgZW50cnkncyBSQ1UgZmllbGQKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgdXNlZCBhcyBhIGNhbGxiYWNrIHRvIHRoZSBjYWxsX3JjdSgpCi0gKiBmdW5jdGlvbiBzbyB0aGF0IG1lbW9yeSBhbGxvY2F0ZWQgdG8gYSBoYXNoIHRhYmxlIGFkZHJlc3MgZW50cnkgY2FuIGJlCi0gKiByZWxlYXNlZCBzYWZlbHkuCi0gKgotICovCi1zdGF0aWMgdm9pZCBuZXRsYmxfdW5saHNoX2ZyZWVfYWRkcjYoc3RydWN0IHJjdV9oZWFkICplbnRyeSkKLXsKLQlzdHJ1Y3QgbmV0bGJsX3VubGhzaF9hZGRyNiAqcHRyOwotCi0JcHRyID0gY29udGFpbmVyX29mKGVudHJ5LCBzdHJ1Y3QgbmV0bGJsX3VubGhzaF9hZGRyNiwgcmN1KTsKLQlrZnJlZShwdHIpOwotfQotI2VuZGlmIC8qIElQdjYgKi8KLQotLyoqCiAgKiBuZXRsYmxfdW5saHNoX2ZyZWVfaWZhY2UgLSBGcmVlcyBhbiBpbnRlcmZhY2UgZW50cnkgZnJvbSB0aGUgaGFzaCB0YWJsZQogICogQGVudHJ5OiB0aGUgZW50cnkncyBSQ1UgZmllbGQKICAqCkBAIC01NjgsNyArNTMwLDcgQEAKIAlpZiAoZW50cnkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQljYWxsX3JjdSgmZW50cnktPnJjdSwgbmV0bGJsX3VubGhzaF9mcmVlX2FkZHI0KTsKKwlrZnJlZV9yY3UoZW50cnksIHJjdSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYyOSw3ICs1OTEsNyBAQAogCWlmIChlbnRyeSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCWNhbGxfcmN1KCZlbnRyeS0+cmN1LCBuZXRsYmxfdW5saHNoX2ZyZWVfYWRkcjYpOworCWtmcmVlX3JjdShlbnRyeSwgcmN1KTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZiAvKiBJUHY2ICovCmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKaW5kZXggYzhmMzViNS4uNWZlNGYzYiAxMDA2NDQKLS0tIGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCisrKyBiL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYwpAQCAtMTU2NiwxMiArMTU2Niw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKG5ldGxpbmtfa2VybmVsX3JlbGVhc2UpOwogCi0KLXN0YXRpYyB2b2lkIGxpc3RlbmVyc19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCi17Ci0Ja2ZyZWUoY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBsaXN0ZW5lcnMsIHJjdSkpOwotfQotCiBpbnQgX19uZXRsaW5rX2NoYW5nZV9uZ3JvdXBzKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGdyb3VwcykKIHsKIAlzdHJ1Y3QgbGlzdGVuZXJzICpuZXcsICpvbGQ7CkBAIC0xNTg4LDcgKzE1ODIsNyBAQAogCQltZW1jcHkobmV3LT5tYXNrcywgb2xkLT5tYXNrcywgTkxHUlBTWih0YmwtPmdyb3VwcykpOwogCQlyY3VfYXNzaWduX3BvaW50ZXIodGJsLT5saXN0ZW5lcnMsIG5ldyk7CiAKLQkJY2FsbF9yY3UoJm9sZC0+cmN1LCBsaXN0ZW5lcnNfZnJlZV9yY3UpOworCQlrZnJlZV9yY3Uob2xkLCByY3UpOwogCX0KIAl0YmwtPmdyb3VwcyA9IGdyb3VwczsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldHJvbS9hZl9uZXRyb20uYyBiL25ldC9uZXRyb20vYWZfbmV0cm9tLmMKaW5kZXggMDZjYjAyNy4uNzMyMTUyZiAxMDA2NDQKLS0tIGEvbmV0L25ldHJvbS9hZl9uZXRyb20uYworKysgYi9uZXQvbmV0cm9tL2FmX25ldHJvbS5jCkBAIC01OTEsNyArNTkxLDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmICgoZGV2ID0gbnJfZGV2X2dldCgmYWRkci0+ZnNhX2F4MjUuc2F4MjVfY2FsbCkpID09IE5VTEwpIHsKLQkJU09DS19ERUJVRyhzaywgIk5FVC9ST006IGJpbmQgZmFpbGVkOiBpbnZhbGlkIG5vZGUgY2FsbHNpZ25cbiIpOwogCQlyZWxlYXNlX3NvY2soc2spOwogCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiAJfQpAQCAtNjMyLDcgKzYzMSw3IEBACiAJc29ja19yZXNldF9mbGFnKHNrLCBTT0NLX1pBUFBFRCk7CiAJZGV2X3B1dChkZXYpOwogCXJlbGVhc2Vfc29jayhzayk7Ci0JU09DS19ERUJVRyhzaywgIk5FVC9ST006IHNvY2tldCBpcyBib3VuZFxuIik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA4Miw4ICsxMDgxLDYgQEAKIAkJc2F4LnNheDI1X2NhbGwgICA9IG5yLT5kZXN0X2FkZHI7CiAJfQogCi0JU09DS19ERUJVRyhzaywgIk5FVC9ST006IHNlbmR0bzogQWRkcmVzc2VzIGJ1aWx0LlxuIik7Ci0KIAkvKiBCdWlsZCBhIHBhY2tldCAtIHRoZSBjb252ZW50aW9uYWwgdXNlciBsaW1pdCBpcyAyMzYgYnl0ZXMuIFdlIGNhbgogCSAgIGRvIGx1ZGljcm91c2x5IGxhcmdlIE5ldFJPTSBmcmFtZXMgYnV0IG11c3Qgbm90IG92ZXJmbG93ICovCiAJaWYgKGxlbiA+IDY1NTM2KSB7CkBAIC0xMDkxLDcgKzEwODgsNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlTT0NLX0RFQlVHKHNrLCAiTkVUL1JPTTogc2VuZHRvOiBidWlsZGluZyBwYWNrZXQuXG4iKTsKIAlzaXplID0gbGVuICsgTlJfTkVUV09SS19MRU4gKyBOUl9UUkFOU1BPUlRfTEVOOwogCiAJaWYgKChza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLCBzaXplLCBtc2ctPm1zZ19mbGFncyAmIE1TR19ET05UV0FJVCwgJmVycikpID09IE5VTEwpCkBAIC0xMTA1LDcgKzExMDEsNiBAQAogCSAqLwogCiAJYXNtcHRyID0gc2tiX3B1c2goc2tiLCBOUl9UUkFOU1BPUlRfTEVOKTsKLQlTT0NLX0RFQlVHKHNrLCAiQnVpbGRpbmcgTkVUL1JPTSBIZWFkZXIuXG4iKTsKIAogCS8qIEJ1aWxkIGEgTkVUL1JPTSBUcmFuc3BvcnQgaGVhZGVyICovCiAKQEAgLTExMTQsMTUgKzExMDksMTIgQEAKIAkqYXNtcHRyKysgPSAwOwkJLyogVG8gYmUgZmlsbGVkIGluIGxhdGVyICovCiAJKmFzbXB0cisrID0gMDsJCS8qICAgICAgRGl0dG8gICAgICAgICAgICAqLwogCSphc21wdHIrKyA9IE5SX0lORk87Ci0JU09DS19ERUJVRyhzaywgIkJ1aWx0IGhlYWRlci5cbiIpOwogCiAJLyoKIAkgKglQdXQgdGhlIGRhdGEgb24gdGhlIGVuZAogCSAqLwogCXNrYl9wdXQoc2tiLCBsZW4pOwogCi0JU09DS19ERUJVRyhzaywgIk5FVC9ST006IEFwcGVuZGluZyB1c2VyIGRhdGFcbiIpOwotCiAJLyogVXNlciBkYXRhIGZvbGxvd3MgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIE5FVC9ST00gdHJhbnNwb3J0IGhlYWRlciAqLwogCWlmIChtZW1jcHlfZnJvbWlvdmVjKHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYiksIG1zZy0+bXNnX2lvdiwgbGVuKSkgewogCQlrZnJlZV9za2Ioc2tiKTsKQEAgLTExMzAsOCArMTEyMiw2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCVNPQ0tfREVCVUcoc2ssICJORVQvUk9NOiBUcmFuc21pdHRpbmcgYnVmZmVyXG4iKTsKLQogCWlmIChzay0+c2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQllcnIgPSAtRU5PVENPTk47CmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwppbmRleCBiNTM2MmU5Li41NDk1MjdiIDEwMDY0NAotLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jCisrKyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKQEAgLTUzOCw3ICs1MzgsNyBAQAogCXJjdV9yZWFkX2xvY2soKTsKIAlmaWx0ZXIgPSByY3VfZGVyZWZlcmVuY2Uoc2stPnNrX2ZpbHRlcik7CiAJaWYgKGZpbHRlciAhPSBOVUxMKQotCQlyZXMgPSBza19ydW5fZmlsdGVyKHNrYiwgZmlsdGVyLT5pbnNucyk7CisJCXJlcyA9IFNLX1JVTl9GSUxURVIoZmlsdGVyLCBza2IpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIHJlczsKZGlmZiAtLWdpdCBhL25ldC9waG9uZXQvcG5fZGV2LmMgYi9uZXQvcGhvbmV0L3BuX2Rldi5jCmluZGV4IDk0NzAzOGQuLmQyZGY4ZjMgMTAwNjQ0Ci0tLSBhL25ldC9waG9uZXQvcG5fZGV2LmMKKysrIGIvbmV0L3Bob25ldC9wbl9kZXYuYwpAQCAtMTYyLDE0ICsxNjIsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIHBob25ldF9kZXZpY2VfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKQotewotCXN0cnVjdCBwaG9uZXRfZGV2aWNlICpwbmQ7Ci0KLQlwbmQgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHBob25ldF9kZXZpY2UsIHJjdSk7Ci0Ja2ZyZWUocG5kKTsKLX0KLQogaW50IHBob25ldF9hZGRyZXNzX2RlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBhZGRyKQogewogCXN0cnVjdCBwaG9uZXRfZGV2aWNlX2xpc3QgKnBuZGV2cyA9IHBob25ldF9kZXZpY2VfbGlzdChkZXZfbmV0KGRldikpOwpAQCAtMTg4LDcgKzE4MCw3IEBACiAJbXV0ZXhfdW5sb2NrKCZwbmRldnMtPmxvY2spOwogCiAJaWYgKHBuZCkKLQkJY2FsbF9yY3UoJnBuZC0+cmN1LCBwaG9uZXRfZGV2aWNlX3JjdV9mcmVlKTsKKwkJa2ZyZWVfcmN1KHBuZCwgcmN1KTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC00MjYsMTggKzQxOCwxNCBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgbmV0X2RldmljZSAqcGhvbmV0X3JvdXRlX2dldChzdHJ1Y3QgbmV0ICpuZXQsIHU4IGRhZGRyKQorc3RydWN0IG5ldF9kZXZpY2UgKnBob25ldF9yb3V0ZV9nZXRfcmN1KHN0cnVjdCBuZXQgKm5ldCwgdTggZGFkZHIpCiB7CiAJc3RydWN0IHBob25ldF9uZXQgKnBubiA9IHBob25ldF9wZXJuZXQobmV0KTsKIAlzdHJ1Y3QgcGhvbmV0X3JvdXRlcyAqcm91dGVzID0gJnBubi0+cm91dGVzOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKLQlBU1NFUlRfUlROTCgpOyAvKiBubyBuZWVkIHRvIGhvbGQgdGhlIGRldmljZSAqLwotCiAJZGFkZHIgPj49IDI7Ci0JcmN1X3JlYWRfbG9jaygpOwogCWRldiA9IHJjdV9kZXJlZmVyZW5jZShyb3V0ZXMtPnRhYmxlW2RhZGRyXSk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIGRldjsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3Bob25ldC9wbl9uZXRsaW5rLmMgYi9uZXQvcGhvbmV0L3BuX25ldGxpbmsuYwppbmRleCA1OGIzYjFmLi40MzhhY2NiIDEwMDY0NAotLS0gYS9uZXQvcGhvbmV0L3BuX25ldGxpbmsuYworKysgYi9uZXQvcGhvbmV0L3BuX25ldGxpbmsuYwpAQCAtMjY0LDEwICsyNjQsMTEgQEAKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAl1OCBhZGRyLCBhZGRyX2lkeCA9IDAsIGFkZHJfc3RhcnRfaWR4ID0gY2ItPmFyZ3NbMF07CiAKKwlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChhZGRyID0gMDsgYWRkciA8IDY0OyBhZGRyKyspIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAotCQlkZXYgPSBwaG9uZXRfcm91dGVfZ2V0KG5ldCwgYWRkciA8PCAyKTsKKwkJZGV2ID0gcGhvbmV0X3JvdXRlX2dldF9yY3UobmV0LCBhZGRyIDw8IDIpOwogCQlpZiAoIWRldikKIAkJCWNvbnRpbnVlOwogCkBAIC0yNzksNiArMjgwLDcgQEAKIAl9CiAKIG91dDoKKwlyY3VfcmVhZF91bmxvY2soKTsKIAljYi0+YXJnc1swXSA9IGFkZHJfaWR4OwogCWNiLT5hcmdzWzFdID0gMDsKIApkaWZmIC0tZ2l0IGEvbmV0L3Bob25ldC9zb2NrZXQuYyBiL25ldC9waG9uZXQvc29ja2V0LmMKaW5kZXggYjFhZGFmYS4uOGM1YmZjZSAxMDA2NDQKLS0tIGEvbmV0L3Bob25ldC9zb2NrZXQuYworKysgYi9uZXQvcGhvbmV0L3NvY2tldC5jCkBAIC01Miw3ICs1Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgIHsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCBobGlzdFtQTl9IQVNIU0laRV07Ci0Jc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBtdXRleCBsb2NrOwogfSBwbnNvY2tzOwogCiB2b2lkIF9faW5pdCBwbl9zb2NrX2luaXQodm9pZCkKQEAgLTYxLDcgKzYxLDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBQTl9IQVNIU0laRTsgaSsrKQogCQlJTklUX0hMSVNUX0hFQUQocG5zb2Nrcy5obGlzdCArIGkpOwotCXNwaW5fbG9ja19pbml0KCZwbnNvY2tzLmxvY2spOworCW11dGV4X2luaXQoJnBuc29ja3MubG9jayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqcG5faGFzaF9saXN0KHUxNiBvYmopCkBAIC04Miw5ICs4Miw4IEBACiAJdTggcmVzID0gc3BuLT5zcG5fcmVzb3VyY2U7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmhsaXN0ID0gcG5faGFzaF9saXN0KG9iaik7CiAKLQlzcGluX2xvY2tfYmgoJnBuc29ja3MubG9jayk7Ci0KLQlza19mb3JfZWFjaChza25vZGUsIG5vZGUsIGhsaXN0KSB7CisJcmN1X3JlYWRfbG9jaygpOworCXNrX2Zvcl9lYWNoX3JjdShza25vZGUsIG5vZGUsIGhsaXN0KSB7CiAJCXN0cnVjdCBwbl9zb2NrICpwbiA9IHBuX3NrKHNrbm9kZSk7CiAJCUJVR19PTighcG4tPnNvYmplY3QpOyAvKiB1bmJvdW5kIHNvY2tldCAqLwogCkBAIC0xMDcsOCArMTA2LDcgQEAKIAkJc29ja19ob2xkKHNrbm9kZSk7CiAJCWJyZWFrOwogCX0KLQotCXNwaW5fdW5sb2NrX2JoKCZwbnNvY2tzLmxvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIHJ2YWw7CiB9CkBAIC0xMTksNyArMTE3LDcgQEAKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGxpc3QgPSBwbnNvY2tzLmhsaXN0OwogCXVuc2lnbmVkIGg7CiAKLQlzcGluX2xvY2soJnBuc29ja3MubG9jayk7CisJcmN1X3JlYWRfbG9jaygpOwogCWZvciAoaCA9IDA7IGggPCBQTl9IQVNIU0laRTsgaCsrKSB7CiAJCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwogCQlzdHJ1Y3Qgc29jayAqc2tub2RlOwpAQCAtMTQwLDI1ICsxMzgsMjYgQEAKIAkJfQogCQlobGlzdCsrOwogCX0KLQlzcGluX3VubG9jaygmcG5zb2Nrcy5sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogdm9pZCBwbl9zb2NrX2hhc2goc3RydWN0IHNvY2sgKnNrKQogewogCXN0cnVjdCBobGlzdF9oZWFkICpobGlzdCA9IHBuX2hhc2hfbGlzdChwbl9zayhzayktPnNvYmplY3QpOwogCi0Jc3Bpbl9sb2NrX2JoKCZwbnNvY2tzLmxvY2spOwotCXNrX2FkZF9ub2RlKHNrLCBobGlzdCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJnBuc29ja3MubG9jayk7CisJbXV0ZXhfbG9jaygmcG5zb2Nrcy5sb2NrKTsKKwlza19hZGRfbm9kZV9yY3Uoc2ssIGhsaXN0KTsKKwltdXRleF91bmxvY2soJnBuc29ja3MubG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKHBuX3NvY2tfaGFzaCk7CiAKIHZvaWQgcG5fc29ja191bmhhc2goc3RydWN0IHNvY2sgKnNrKQogewotCXNwaW5fbG9ja19iaCgmcG5zb2Nrcy5sb2NrKTsKLQlza19kZWxfbm9kZV9pbml0KHNrKTsKLQlzcGluX3VubG9ja19iaCgmcG5zb2Nrcy5sb2NrKTsKKwltdXRleF9sb2NrKCZwbnNvY2tzLmxvY2spOworCXNrX2RlbF9ub2RlX2luaXRfcmN1KHNrKTsKKwltdXRleF91bmxvY2soJnBuc29ja3MubG9jayk7CiAJcG5fc29ja191bmJpbmRfYWxsX3Jlcyhzayk7CisJc3luY2hyb25pemVfcmN1KCk7CiB9CiBFWFBPUlRfU1lNQk9MKHBuX3NvY2tfdW5oYXNoKTsKIApAQCAtNTQ4LDcgKzU0Nyw3IEBACiAJdW5zaWduZWQgaDsKIAogCWZvciAoaCA9IDA7IGggPCBQTl9IQVNIU0laRTsgaCsrKSB7Ci0JCXNrX2Zvcl9lYWNoKHNrbm9kZSwgbm9kZSwgaGxpc3QpIHsKKwkJc2tfZm9yX2VhY2hfcmN1KHNrbm9kZSwgbm9kZSwgaGxpc3QpIHsKIAkJCWlmICghbmV0X2VxKG5ldCwgc29ja19uZXQoc2tub2RlKSkpCiAJCQkJY29udGludWU7CiAJCQlpZiAoIXBvcykKQEAgLTU3Miw5ICs1NzEsOSBAQAogfQogCiBzdGF0aWMgdm9pZCAqcG5fc29ja19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQotCV9fYWNxdWlyZXMocG5zb2Nrcy5sb2NrKQorCV9fYWNxdWlyZXMocmN1KQogewotCXNwaW5fbG9ja19iaCgmcG5zb2Nrcy5sb2NrKTsKKwlyY3VfcmVhZF9sb2NrKCk7CiAJcmV0dXJuICpwb3MgPyBwbl9zb2NrX2dldF9pZHgoc2VxLCAqcG9zIC0gMSkgOiBTRVFfU1RBUlRfVE9LRU47CiB9CiAKQEAgLTU5MSw5ICs1OTAsOSBAQAogfQogCiBzdGF0aWMgdm9pZCBwbl9zb2NrX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotCV9fcmVsZWFzZXMocG5zb2Nrcy5sb2NrKQorCV9fcmVsZWFzZXMocmN1KQogewotCXNwaW5fdW5sb2NrX2JoKCZwbnNvY2tzLmxvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiBzdGF0aWMgaW50IHBuX3NvY2tfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCkBAIC03MjEsMTMgKzcyMCwxMSBAQAogCX0KIAltdXRleF91bmxvY2soJnJlc291cmNlX211dGV4KTsKIAotCWlmIChtYXRjaCA9PSAwKQotCQlyZXR1cm47Ci0Jc3luY2hyb25pemVfcmN1KCk7CiAJd2hpbGUgKG1hdGNoID4gMCkgewotCQlzb2NrX3B1dChzayk7CisJCV9fc29ja19wdXQoc2spOwogCQltYXRjaC0tOwogCX0KKwkvKiBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIFJDVSBzeW5jIGJlZm9yZSBmaW5hbCBzb2NrX3B1dCgpICovCiB9CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwpkaWZmIC0tZ2l0IGEvbmV0L3Jma2lsbC9LY29uZmlnIGIvbmV0L3Jma2lsbC9LY29uZmlnCmluZGV4IDdmY2U2ZGYuLjQ4NDY0Y2EgMTAwNjQ0Ci0tLSBhL25ldC9yZmtpbGwvS2NvbmZpZworKysgYi9uZXQvcmZraWxsL0tjb25maWcKQEAgLTIyLDMgKzIyLDE0IEBACiAJZGVwZW5kcyBvbiBSRktJTEwKIAlkZXBlbmRzIG9uIElOUFVUID0geSB8fCBSRktJTEwgPSBJTlBVVAogCWRlZmF1bHQgeSBpZiAhRVhQRVJUCisKK2NvbmZpZyBSRktJTExfUkVHVUxBVE9SCisJdHJpc3RhdGUgIkdlbmVyaWMgcmZraWxsIHJlZ3VsYXRvciBkcml2ZXIiCisJZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTAorCWRlcGVuZHMgb24gUkVHVUxBVE9SCisJaGVscAorICAgICAgICAgIFRoaXMgb3B0aW9ucyBlbmFibGUgY29udHJvbGxpbmcgcmFkaW8gdHJhbnNtaXR0ZXJzIGNvbm5lY3RlZCB0bworICAgICAgICAgIHZvbHRhZ2UgcmVndWxhdG9yIHVzaW5nIHRoZSByZWd1bGF0b3IgZnJhbWV3b3JrLgorCisgICAgICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsCisgICAgICAgICAgYmUgY2FsbGVkIHJma2lsbC1yZWd1bGF0b3IuCmRpZmYgLS1naXQgYS9uZXQvcmZraWxsL01ha2VmaWxlIGIvbmV0L3Jma2lsbC9NYWtlZmlsZQppbmRleCA2NjIxMDUzLi5kOWE1YTU4IDEwMDY0NAotLS0gYS9uZXQvcmZraWxsL01ha2VmaWxlCisrKyBiL25ldC9yZmtpbGwvTWFrZWZpbGUKQEAgLTUsMyArNSw0IEBACiByZmtpbGwteQkJCSs9IGNvcmUubwogcmZraWxsLSQoQ09ORklHX1JGS0lMTF9JTlBVVCkJKz0gaW5wdXQubwogb2JqLSQoQ09ORklHX1JGS0lMTCkJCSs9IHJma2lsbC5vCitvYmotJChDT05GSUdfUkZLSUxMX1JFR1VMQVRPUikJKz0gcmZraWxsLXJlZ3VsYXRvci5vCmRpZmYgLS1naXQgYS9uZXQvcmZraWxsL2NvcmUuYyBiL25ldC9yZmtpbGwvY29yZS5jCmluZGV4IDAxOTgxOTEuLmJlOTA2NDAgMTAwNjQ0Ci0tLSBhL25ldC9yZmtpbGwvY29yZS5jCisrKyBiL25ldC9yZmtpbGwvY29yZS5jCkBAIC0xMDI0LDcgKzEwMjQsNiBAQAogCSAqIHN0YXJ0IGdldHRpbmcgZXZlbnRzIGZyb20gZWxzZXdoZXJlIGJ1dCBob2xkIG10eCB0byBnZXQKIAkgKiBzdGFydHVwIGV2ZW50cyBhZGRlZCBmaXJzdAogCSAqLwotCWxpc3RfYWRkKCZkYXRhLT5saXN0LCAmcmZraWxsX2Zkcyk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJma2lsbCwgJnJma2lsbF9saXN0LCBub2RlKSB7CiAJCWV2ID0ga3phbGxvYyhzaXplb2YoKmV2KSwgR0ZQX0tFUk5FTCk7CkBAIC0xMDMzLDYgKzEwMzIsNyBAQAogCQlyZmtpbGxfZmlsbF9ldmVudCgmZXYtPmV2LCByZmtpbGwsIFJGS0lMTF9PUF9BREQpOwogCQlsaXN0X2FkZF90YWlsKCZldi0+bGlzdCwgJmRhdGEtPmV2ZW50cyk7CiAJfQorCWxpc3RfYWRkKCZkYXRhLT5saXN0LCAmcmZraWxsX2Zkcyk7CiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT5tdHgpOwogCW11dGV4X3VubG9jaygmcmZraWxsX2dsb2JhbF9tdXRleCk7CiAKZGlmZiAtLWdpdCBhL25ldC9yZmtpbGwvcmZraWxsLXJlZ3VsYXRvci5jIGIvbmV0L3Jma2lsbC9yZmtpbGwtcmVndWxhdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThkYzUxMgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZmtpbGwvcmZraWxsLXJlZ3VsYXRvci5jCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogcmZraWxsLXJlZ3VsYXRvci5jIC0gUmVndWxhdG9yIGNvbnN1bWVyIGRyaXZlciBmb3IgcmZraWxsCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5ICBHdWltaW5nIFpodW8gPGdtemh1b0BnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgIEFudG9uaW8gT3NwaXRlIDxvc3BpdGVAc3R1ZGVudGkudW5pbmEuaXQ+CisgKgorICogSW1wbGVtZW50YXRpb24gaW5zcGlyZWQgYnkgbGVkcy1yZWd1bGF0b3IgZHJpdmVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvcmZraWxsLmg+CisjaW5jbHVkZSA8bGludXgvcmZraWxsLXJlZ3VsYXRvci5oPgorCitzdHJ1Y3QgcmZraWxsX3JlZ3VsYXRvcl9kYXRhIHsKKwlzdHJ1Y3QgcmZraWxsICpyZl9raWxsOworCWJvb2wgcmVnX2VuYWJsZWQ7CisKKwlzdHJ1Y3QgcmVndWxhdG9yICp2Y2M7Cit9OworCitzdGF0aWMgaW50IHJma2lsbF9yZWd1bGF0b3Jfc2V0X2Jsb2NrKHZvaWQgKmRhdGEsIGJvb2wgYmxvY2tlZCkKK3sKKwlzdHJ1Y3QgcmZraWxsX3JlZ3VsYXRvcl9kYXRhICpyZmtpbGxfZGF0YSA9IGRhdGE7CisKKwlwcl9kZWJ1ZygiJXM6IGJsb2NrZWQ6ICVkXG4iLCBfX2Z1bmNfXywgYmxvY2tlZCk7CisKKwlpZiAoYmxvY2tlZCkgeworCQlpZiAocmZraWxsX2RhdGEtPnJlZ19lbmFibGVkKSB7CisJCQlyZWd1bGF0b3JfZGlzYWJsZShyZmtpbGxfZGF0YS0+dmNjKTsKKwkJCXJma2lsbF9kYXRhLT5yZWdfZW5hYmxlZCA9IDA7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoIXJma2lsbF9kYXRhLT5yZWdfZW5hYmxlZCkgeworCQkJcmVndWxhdG9yX2VuYWJsZShyZmtpbGxfZGF0YS0+dmNjKTsKKwkJCXJma2lsbF9kYXRhLT5yZWdfZW5hYmxlZCA9IDE7CisJCX0KKwl9CisKKwlwcl9kZWJ1ZygiJXM6IHJlZ3VsYXRvcl9pc19lbmFibGVkIGFmdGVyIHNldF9ibG9jazogJWRcbiIsIF9fZnVuY19fLAorCQlyZWd1bGF0b3JfaXNfZW5hYmxlZChyZmtpbGxfZGF0YS0+dmNjKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHJma2lsbF9vcHMgcmZraWxsX3JlZ3VsYXRvcl9vcHMgPSB7CisJLnNldF9ibG9jayA9IHJma2lsbF9yZWd1bGF0b3Jfc2V0X2Jsb2NrLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgcmZraWxsX3JlZ3VsYXRvcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZmtpbGxfcmVndWxhdG9yX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHJma2lsbF9yZWd1bGF0b3JfZGF0YSAqcmZraWxsX2RhdGE7CisJc3RydWN0IHJlZ3VsYXRvciAqdmNjOworCXN0cnVjdCByZmtpbGwgKnJmX2tpbGw7CisJaW50IHJldCA9IDA7CisKKwlpZiAocGRhdGEgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHBkYXRhLT5uYW1lID09IE5VTEwgfHwgcGRhdGEtPnR5cGUgPT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIG5hbWUgb3IgdHlwZSBpbiBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdmNjID0gcmVndWxhdG9yX2dldF9leGNsdXNpdmUoJnBkZXYtPmRldiwgInZyZmtpbGwiKTsKKwlpZiAoSVNfRVJSKHZjYykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGdldCB2Y2MgZm9yICVzXG4iLCBwZGF0YS0+bmFtZSk7CisJCXJldCA9IFBUUl9FUlIodmNjKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmZraWxsX2RhdGEgPSBremFsbG9jKHNpemVvZigqcmZraWxsX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAocmZraWxsX2RhdGEgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9kYXRhX2FsbG9jOworCX0KKworCXJmX2tpbGwgPSByZmtpbGxfYWxsb2MocGRhdGEtPm5hbWUsICZwZGV2LT5kZXYsCisJCQkJcGRhdGEtPnR5cGUsCisJCQkJJnJma2lsbF9yZWd1bGF0b3Jfb3BzLCByZmtpbGxfZGF0YSk7CisJaWYgKHJmX2tpbGwgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgYWxsb2MgcmZraWxsIGRldmljZVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3Jma2lsbF9hbGxvYzsKKwl9CisKKwlpZiAocmVndWxhdG9yX2lzX2VuYWJsZWQodmNjKSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJSZWd1bGF0b3IgYWxyZWFkeSBlbmFibGVkXG4iKTsKKwkJcmZraWxsX2RhdGEtPnJlZ19lbmFibGVkID0gMTsKKwl9CisJcmZraWxsX2RhdGEtPnZjYyA9IHZjYzsKKwlyZmtpbGxfZGF0YS0+cmZfa2lsbCA9IHJmX2tpbGw7CisKKwlyZXQgPSByZmtpbGxfcmVnaXN0ZXIocmZfa2lsbCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgcmVnaXN0ZXIgcmZraWxsIGRldmljZVxuIik7CisJCWdvdG8gZXJyX3Jma2lsbF9yZWdpc3RlcjsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCByZmtpbGxfZGF0YSk7CisJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzIGluaXRpYWxpemVkXG4iLCBwZGF0YS0+bmFtZSk7CisKKwlyZXR1cm4gMDsKKworZXJyX3Jma2lsbF9yZWdpc3RlcjoKKwlyZmtpbGxfZGVzdHJveShyZl9raWxsKTsKK2Vycl9yZmtpbGxfYWxsb2M6CisJa2ZyZWUocmZraWxsX2RhdGEpOworZXJyX2RhdGFfYWxsb2M6CisJcmVndWxhdG9yX3B1dCh2Y2MpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHJma2lsbF9yZWd1bGF0b3JfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJma2lsbF9yZWd1bGF0b3JfZGF0YSAqcmZraWxsX2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmZraWxsICpyZl9raWxsID0gcmZraWxsX2RhdGEtPnJmX2tpbGw7CisKKwlyZmtpbGxfdW5yZWdpc3RlcihyZl9raWxsKTsKKwlyZmtpbGxfZGVzdHJveShyZl9raWxsKTsKKwlyZWd1bGF0b3JfcHV0KHJma2lsbF9kYXRhLT52Y2MpOworCWtmcmVlKHJma2lsbF9kYXRhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciByZmtpbGxfcmVndWxhdG9yX2RyaXZlciA9IHsKKwkucHJvYmUgPSByZmtpbGxfcmVndWxhdG9yX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChyZmtpbGxfcmVndWxhdG9yX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAicmZraWxsLXJlZ3VsYXRvciIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCByZmtpbGxfcmVndWxhdG9yX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZyZmtpbGxfcmVndWxhdG9yX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChyZmtpbGxfcmVndWxhdG9yX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgcmZraWxsX3JlZ3VsYXRvcl9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnJma2lsbF9yZWd1bGF0b3JfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHJma2lsbF9yZWd1bGF0b3JfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkd1aW1pbmcgWmh1byA8Z216aHVvQGdtYWlsLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkFudG9uaW8gT3NwaXRlIDxvc3BpdGVAc3R1ZGVudGkudW5pbmEuaXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJlZ3VsYXRvciBjb25zdW1lciBkcml2ZXIgZm9yIHJma2lsbCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpyZmtpbGwtcmVndWxhdG9yIik7CmRpZmYgLS1naXQgYS9uZXQvcm9zZS9hZl9yb3NlLmMgYi9uZXQvcm9zZS9hZl9yb3NlLmMKaW5kZXggYTgwYWVmNi4uZjllYTkyNSAxMDA2NDQKLS0tIGEvbmV0L3Jvc2UvYWZfcm9zZS5jCisrKyBiL25ldC9yb3NlL2FmX3Jvc2UuYwpAQCAtNjgyLDEwICs2ODIsOCBAQAogCWlmICgodW5zaWduZWQgaW50KSBhZGRyLT5zcm9zZV9uZGlnaXMgPiBST1NFX01BWF9ESUdJUykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoKGRldiA9IHJvc2VfZGV2X2dldCgmYWRkci0+c3Jvc2VfYWRkcikpID09IE5VTEwpIHsKLQkJU09DS19ERUJVRyhzaywgIlJPU0U6IGJpbmQgZmFpbGVkOiBpbnZhbGlkIGFkZHJlc3NcbiIpOworCWlmICgoZGV2ID0gcm9zZV9kZXZfZ2V0KCZhZGRyLT5zcm9zZV9hZGRyKSkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwotCX0KIAogCXNvdXJjZSA9ICZhZGRyLT5zcm9zZV9jYWxsOwogCkBAIC03MTYsNyArNzE0LDcgQEAKIAlyb3NlX2luc2VydF9zb2NrZXQoc2spOwogCiAJc29ja19yZXNldF9mbGFnKHNrLCBTT0NLX1pBUFBFRCk7Ci0JU09DS19ERUJVRyhzaywgIlJPU0U6IHNvY2tldCBpcyBib3VuZFxuIik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTEwOSwxMCArMTEwNyw3IEBACiAJCQlzcm9zZS5zcm9zZV9kaWdpc1tuXSA9IHJvc2UtPmRlc3RfZGlnaXNbbl07CiAJfQogCi0JU09DS19ERUJVRyhzaywgIlJPU0U6IHNlbmR0bzogQWRkcmVzc2VzIGJ1aWx0LlxuIik7Ci0KIAkvKiBCdWlsZCBhIHBhY2tldCAqLwotCVNPQ0tfREVCVUcoc2ssICJST1NFOiBzZW5kdG86IGJ1aWxkaW5nIHBhY2tldC5cbiIpOwogCS8qIFNhbml0eSBjaGVjayB0aGUgcGFja2V0IHNpemUgKi8KIAlpZiAobGVuID4gNjU1MzUpCiAJCXJldHVybiAtRU1TR1NJWkU7CkBAIC0xMTI3LDcgKzExMjIsNiBAQAogCS8qCiAJICoJUHV0IHRoZSBkYXRhIG9uIHRoZSBlbmQKIAkgKi8KLQlTT0NLX0RFQlVHKHNrLCAiUk9TRTogQXBwZW5kaW5nIHVzZXIgZGF0YVxuIik7CiAKIAlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwogCXNrYl9wdXQoc2tiLCBsZW4pOwpAQCAtMTE1Miw4ICsxMTQ2LDYgQEAKIAkgKi8KIAlhc21wdHIgPSBza2JfcHVzaChza2IsIFJPU0VfTUlOX0xFTik7CiAKLQlTT0NLX0RFQlVHKHNrLCAiUk9TRTogQnVpbGRpbmcgTmV0d29yayBIZWFkZXIuXG4iKTsKLQogCS8qIEJ1aWxkIGEgUk9TRSBOZXR3b3JrIGhlYWRlciAqLwogCWFzbXB0clswXSA9ICgocm9zZS0+bGNpID4+IDgpICYgMHgwRikgfCBST1NFX0dGSTsKIAlhc21wdHJbMV0gPSAocm9zZS0+bGNpID4+IDApICYgMHhGRjsKQEAgLTExNjIsMTAgKzExNTQsNiBAQAogCWlmIChxYml0KQogCQlhc21wdHJbMF0gfD0gUk9TRV9RX0JJVDsKIAotCVNPQ0tfREVCVUcoc2ssICJST1NFOiBCdWlsdCBoZWFkZXIuXG4iKTsKLQotCVNPQ0tfREVCVUcoc2ssICJST1NFOiBUcmFuc21pdHRpbmcgYnVmZmVyXG4iKTsKLQogCWlmIChzay0+c2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gLUVOT1RDT05OOwpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FyLWFjay5jIGIvbmV0L3J4cnBjL2FyLWFjay5jCmluZGV4IGI2ZmZlNGUuLmY5OWNmY2UgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9hci1hY2suYworKysgYi9uZXQvcnhycGMvYXItYWNrLmMKQEAgLTM3NSw3ICszNzUsNiBAQAogICovCiBzdGF0aWMgdm9pZCByeHJwY19yb3RhdGVfdHhfd2luZG93KHN0cnVjdCByeHJwY19jYWxsICpjYWxsLCB1MzIgaGFyZCkKIHsKLQlzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwOwogCXVuc2lnbmVkIGxvbmcgX3NrYjsKIAlpbnQgdGFpbCA9IGNhbGwtPmFja3NfdGFpbCwgb2xkX3RhaWw7CiAJaW50IHdpbiA9IENJUkNfQ05UKGNhbGwtPmFja3NfaGVhZCwgdGFpbCwgY2FsbC0+YWNrc193aW5zeik7CkBAIC0zODcsNyArMzg2LDYgQEAKIAl3aGlsZSAoY2FsbC0+YWNrc19oYXJkIDwgaGFyZCkgewogCQlzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKTsKIAkJX3NrYiA9IGNhbGwtPmFja3Nfd2luZG93W3RhaWxdICYgfjE7Ci0JCXNwID0gcnhycGNfc2tiKChzdHJ1Y3Qgc2tfYnVmZiAqKSBfc2tiKTsKIAkJcnhycGNfZnJlZV9za2IoKHN0cnVjdCBza19idWZmICopIF9za2IpOwogCQlvbGRfdGFpbCA9IHRhaWw7CiAJCXRhaWwgPSAodGFpbCArIDEpICYgKGNhbGwtPmFja3Nfd2luc3ogLSAxKTsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hci1jb25uZXZlbnQuYyBiL25ldC9yeHJwYy9hci1jb25uZXZlbnQuYwppbmRleCAwNTA1Y2RjLi5lN2VkNDNhIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvYXItY29ubmV2ZW50LmMKKysrIGIvbmV0L3J4cnBjL2FyLWNvbm5ldmVudC5jCkBAIC0yNTksNyArMjU5LDYgQEAKIHsKIAlzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiAqY29ubiA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnhycGNfY29ubmVjdGlvbiwgcHJvY2Vzc29yKTsKLQlzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJdTMyIGFib3J0X2NvZGUgPSBSWF9QUk9UT0NPTF9FUlJPUjsKIAlpbnQgcmV0OwpAQCAtMjc2LDggKzI3NSw2IEBACiAJLyogZ28gdGhyb3VnaCB0aGUgY29ubi1sZXZlbCBldmVudCBwYWNrZXRzLCByZWxlYXNpbmcgdGhlIHJlZiBvbiB0aGlzCiAJICogY29ubmVjdGlvbiB0aGF0IGVhY2ggb25lIGhhcyB3aGVuIHdlJ3ZlIGZpbmlzaGVkIHdpdGggaXQgKi8KIAl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZjb25uLT5yeF9xdWV1ZSkpKSB7Ci0JCXNwID0gcnhycGNfc2tiKHNrYik7Ci0KIAkJcmV0ID0gcnhycGNfcHJvY2Vzc19ldmVudChjb25uLCBza2IsICZhYm9ydF9jb2RlKTsKIAkJc3dpdGNoIChyZXQpIHsKIAkJY2FzZSAtRVBST1RPOgpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FyLWVycm9yLmMgYi9uZXQvcnhycGMvYXItZXJyb3IuYwppbmRleCBkNGQxYWUyLi41ZDZiNTcyIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvYXItZXJyb3IuYworKysgYi9uZXQvcnhycGMvYXItZXJyb3IuYwpAQCAtMTM5LDcgKzEzOSw3IEBACiAJc3RydWN0IHJ4cnBjX3RyYW5zcG9ydCAqdHJhbnMgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ4cnBjX3RyYW5zcG9ydCwgZXJyb3JfaGFuZGxlcik7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgbG9jYWwsIGVycjsKKwlpbnQgZXJyOwogCiAJX2VudGVyKCIiKTsKIApAQCAtMTU3LDcgKzE1Nyw2IEBACiAKIAlzd2l0Y2ggKGVlLT5lZV9vcmlnaW4pIHsKIAljYXNlIFNPX0VFX09SSUdJTl9JQ01QOgotCQlsb2NhbCA9IDA7CiAJCXN3aXRjaCAoZWUtPmVlX3R5cGUpIHsKIAkJY2FzZSBJQ01QX0RFU1RfVU5SRUFDSDoKIAkJCXN3aXRjaCAoZWUtPmVlX2NvZGUpIHsKQEAgLTIwNyw3ICsyMDYsNiBAQAogCWNhc2UgU09fRUVfT1JJR0lOX0xPQ0FMOgogCQlfcHJvdG8oIlJ4IFJlY2VpdmVkIGxvY2FsIGVycm9yIHsgZXJyb3I9JWQgfSIsCiAJCSAgICAgICBlZS0+ZWVfZXJybm8pOwotCQlsb2NhbCA9IDE7CiAJCWJyZWFrOwogCiAJY2FzZSBTT19FRV9PUklHSU5fTk9ORToKQEAgLTIxNSw3ICsyMTMsNiBAQAogCWRlZmF1bHQ6CiAJCV9wcm90bygiUnggUmVjZWl2ZWQgZXJyb3IgcmVwb3J0IHsgb3JpZz0ldSB9IiwKIAkJICAgICAgIGVlLT5lZV9vcmlnaW4pOwotCQlsb2NhbCA9IDA7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FyLXBlZXIuYyBiL25ldC9yeHJwYy9hci1wZWVyLmMKaW5kZXggNTViOTNkYy4uMjc1NGYwOSAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL2FyLXBlZXIuYworKysgYi9uZXQvcnhycGMvYXItcGVlci5jCkBAIC0zNiwxMCArMzYsMTEgQEAKIHN0YXRpYyB2b2lkIHJ4cnBjX2Fzc2Vzc19NVFVfc2l6ZShzdHJ1Y3QgcnhycGNfcGVlciAqcGVlcikKIHsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKKwlzdHJ1Y3QgZmxvd2k0IGZsNDsKIAogCXBlZXItPmlmX210dSA9IDE1MDA7CiAKLQlydCA9IGlwX3JvdXRlX291dHB1dF9wb3J0cygmaW5pdF9uZXQsIE5VTEwsCisJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMoJmluaXRfbmV0LCAmZmw0LCBOVUxMLAogCQkJCSAgIHBlZXItPnNyeC50cmFuc3BvcnQuc2luLnNpbl9hZGRyLnNfYWRkciwgMCwKIAkJCQkgICBodG9ucyg3MDAwKSwgaHRvbnMoNzAwMSksCiAJCQkJICAgSVBQUk9UT19VRFAsIDAsIDApOwpAQCAtMTU2LDYgKzE1Nyw3IEBACiAJLyogd2UgY2FuIG5vdyBhZGQgdGhlIG5ldyBjYW5kaWRhdGUgdG8gdGhlIGxpc3QgKi8KIAlwZWVyID0gY2FuZGlkYXRlOwogCWNhbmRpZGF0ZSA9IE5VTEw7CisJdXNhZ2UgPSBhdG9taWNfcmVhZCgmcGVlci0+dXNhZ2UpOwogCiAJbGlzdF9hZGRfdGFpbCgmcGVlci0+bGluaywgJnJ4cnBjX3BlZXJzKTsKIAl3cml0ZV91bmxvY2tfYmgoJnJ4cnBjX3BlZXJfbG9jayk7CkBAIC0xNzAsNyArMTcyLDcgQEAKIAkgICAgICZwZWVyLT5zcngudHJhbnNwb3J0LnNpbi5zaW5fYWRkciwKIAkgICAgIG50b2hzKHBlZXItPnNyeC50cmFuc3BvcnQuc2luLnNpbl9wb3J0KSk7CiAKLQlfbGVhdmUoIiA9ICVwIHt1PSVkfSIsIHBlZXIsIGF0b21pY19yZWFkKCZwZWVyLT51c2FnZSkpOworCV9sZWF2ZSgiID0gJXAge3U9JWR9IiwgcGVlciwgdXNhZ2UpOwogCXJldHVybiBwZWVyOwogCiAJLyogd2UgZm91bmQgdGhlIHBlZXIgaW4gdGhlIGxpc3QgaW1tZWRpYXRlbHkgKi8KZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hci10cmFuc3BvcnQuYyBiL25ldC9yeHJwYy9hci10cmFuc3BvcnQuYwppbmRleCA1ZTAyMjZmLi45MmRmNTY2IDEwMDY0NAotLS0gYS9uZXQvcnhycGMvYXItdHJhbnNwb3J0LmMKKysrIGIvbmV0L3J4cnBjL2FyLXRyYW5zcG9ydC5jCkBAIC0xMTEsNiArMTExLDcgQEAKIAkvKiB3ZSBjYW4gbm93IGFkZCB0aGUgbmV3IGNhbmRpZGF0ZSB0byB0aGUgbGlzdCAqLwogCXRyYW5zID0gY2FuZGlkYXRlOwogCWNhbmRpZGF0ZSA9IE5VTEw7CisJdXNhZ2UgPSBhdG9taWNfcmVhZCgmdHJhbnMtPnVzYWdlKTsKIAogCXJ4cnBjX2dldF9sb2NhbCh0cmFucy0+bG9jYWwpOwogCWF0b21pY19pbmMoJnRyYW5zLT5wZWVyLT51c2FnZSk7CkBAIC0xMjUsNyArMTI2LDcgQEAKIAkgICAgIHRyYW5zLT5sb2NhbC0+ZGVidWdfaWQsCiAJICAgICB0cmFucy0+cGVlci0+ZGVidWdfaWQpOwogCi0JX2xlYXZlKCIgPSAlcCB7dT0lZH0iLCB0cmFucywgYXRvbWljX3JlYWQoJnRyYW5zLT51c2FnZSkpOworCV9sZWF2ZSgiID0gJXAge3U9JWR9IiwgdHJhbnMsIHVzYWdlKTsKIAlyZXR1cm4gdHJhbnM7CiAKIAkvKiB3ZSBmb3VuZCB0aGUgdHJhbnNwb3J0IGluIHRoZSBsaXN0IGltbWVkaWF0ZWx5ICovCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvS2NvbmZpZyBiL25ldC9zY2hlZC9LY29uZmlnCmluZGV4IGE3YTU1ODMuLjI1OTBlOTEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9LY29uZmlnCisrKyBiL25ldC9zY2hlZC9LY29uZmlnCkBAIC0yMzksNiArMjM5LDE3IEBACiAJICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2NoX2Nob2tlLgogCitjb25maWcgTkVUX1NDSF9RRlEKKwl0cmlzdGF0ZSAiUXVpY2sgRmFpciBRdWV1ZWluZyBzY2hlZHVsZXIgKFFGUSkiCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFF1aWNrIEZhaXIgUXVldWVpbmcgU2NoZWR1bGVyIChRRlEpCisJICBwYWNrZXQgc2NoZWR1bGluZyBhbGdvcml0aG0uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHNjaF9xZnEuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBORVRfU0NIX0lOR1JFU1MKIAl0cmlzdGF0ZSAiSW5ncmVzcyBRZGlzYyIKIAlkZXBlbmRzIG9uIE5FVF9DTFNfQUNUCkBAIC0yNzcsNiArMjg4LDcgQEAKIAogY29uZmlnIE5FVF9DTFNfUk9VVEU0CiAJdHJpc3RhdGUgIlJvdXRpbmcgZGVjaXNpb24gKFJPVVRFKSIKKwlkZXBlbmRzIG9uIElORVQKIAlzZWxlY3QgSVBfUk9VVEVfQ0xBU1NJRAogCXNlbGVjdCBORVRfQ0xTCiAJLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL01ha2VmaWxlIGIvbmV0L3NjaGVkL01ha2VmaWxlCmluZGV4IDJlNzdiOGQuLmRjNTg4OWMgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9NYWtlZmlsZQorKysgYi9uZXQvc2NoZWQvTWFrZWZpbGUKQEAgLTM1LDYgKzM1LDcgQEAKIG9iai0kKENPTkZJR19ORVRfU0NIX0RSUikJKz0gc2NoX2Ryci5vCiBvYmotJChDT05GSUdfTkVUX1NDSF9NUVBSSU8pCSs9IHNjaF9tcXByaW8ubwogb2JqLSQoQ09ORklHX05FVF9TQ0hfQ0hPS0UpCSs9IHNjaF9jaG9rZS5vCitvYmotJChDT05GSUdfTkVUX1NDSF9RRlEpCSs9IHNjaF9xZnEubwogCiBvYmotJChDT05GSUdfTkVUX0NMU19VMzIpCSs9IGNsc191MzIubwogb2JqLSQoQ09ORklHX05FVF9DTFNfUk9VVEU0KQkrPSBjbHNfcm91dGUubwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9hcGkuYyBiL25ldC9zY2hlZC9hY3RfYXBpLmMKaW5kZXggMTRiNDJmNC4uYTYwNjAyNSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9hcGkuYworKysgYi9uZXQvc2NoZWQvYWN0X2FwaS5jCkBAIC0yNiwxMSArMjYsNiBAQAogI2luY2x1ZGUgPG5ldC9hY3RfYXBpLmg+CiAjaW5jbHVkZSA8bmV0L25ldGxpbmsuaD4KIAotc3RhdGljIHZvaWQgdGNmX2NvbW1vbl9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCi17Ci0Ja2ZyZWUoY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCB0Y2ZfY29tbW9uLCB0Y2ZjX3JjdSkpOwotfQotCiB2b2lkIHRjZl9oYXNoX2Rlc3Ryb3koc3RydWN0IHRjZl9jb21tb24gKnAsIHN0cnVjdCB0Y2ZfaGFzaGluZm8gKmhpbmZvKQogewogCXVuc2lnbmVkIGludCBoID0gdGNmX2hhc2gocC0+dGNmY19pbmRleCwgaGluZm8tPmhtYXNrKTsKQEAgLTQ3LDcgKzQyLDcgQEAKIAkJCSAqIGdlbl9lc3RpbWF0b3IgZXN0X3RpbWVyKCkgbWlnaHQgYWNjZXNzIHAtPnRjZmNfbG9jawogCQkJICogb3IgYnN0YXRzLCB3YWl0IGEgUkNVIGdyYWNlIHBlcmlvZCBiZWZvcmUgZnJlZWluZyBwCiAJCQkgKi8KLQkJCWNhbGxfcmN1KCZwLT50Y2ZjX3JjdSwgdGNmX2NvbW1vbl9mcmVlX3JjdSk7CisJCQlrZnJlZV9yY3UocCwgdGNmY19yY3UpOwogCQkJcmV0dXJuOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYyBiL25ldC9zY2hlZC9hY3RfcG9saWNlLmMKaW5kZXggOGExNjMwNy4uYjNiOWIzMiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYworKysgYi9uZXQvc2NoZWQvYWN0X3BvbGljZS5jCkBAIC05NiwxMSArOTYsNiBAQAogCWdvdG8gZG9uZTsKIH0KIAotc3RhdGljIHZvaWQgdGNmX3BvbGljZV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCi17Ci0Ja2ZyZWUoY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCB0Y2ZfcG9saWNlLCB0Y2ZfcmN1KSk7Ci19Ci0KIHN0YXRpYyB2b2lkIHRjZl9wb2xpY2VfZGVzdHJveShzdHJ1Y3QgdGNmX3BvbGljZSAqcCkKIHsKIAl1bnNpZ25lZCBpbnQgaCA9IHRjZl9oYXNoKHAtPnRjZl9pbmRleCwgUE9MX1RBQl9NQVNLKTsKQEAgLTEyMSw3ICsxMTYsNyBAQAogCQkJICogZ2VuX2VzdGltYXRvciBlc3RfdGltZXIoKSBtaWdodCBhY2Nlc3MgcC0+dGNmX2xvY2sKIAkJCSAqIG9yIGJzdGF0cywgd2FpdCBhIFJDVSBncmFjZSBwZXJpb2QgYmVmb3JlIGZyZWVpbmcgcAogCQkJICovCi0JCQljYWxsX3JjdSgmcC0+dGNmX3JjdSwgdGNmX3BvbGljZV9mcmVlX3JjdSk7CisJCQlrZnJlZV9yY3UocCwgdGNmX3JjdSk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CkBAIC00MDEsNyArMzk2LDYgQEAKIHBvbGljZV9jbGVhbnVwX21vZHVsZSh2b2lkKQogewogCXRjZl91bnJlZ2lzdGVyX2FjdGlvbigmYWN0X3BvbGljZV9vcHMpOwotCXJjdV9iYXJyaWVyKCk7IC8qIFdhaXQgZm9yIGNvbXBsZXRpb24gb2YgY2FsbF9yY3UoKSdzICh0Y2ZfcG9saWNlX2ZyZWVfcmN1KSAqLwogfQogCiBtb2R1bGVfaW5pdChwb2xpY2VfaW5pdF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9hcGkuYyBiL25ldC9zY2hlZC9zY2hfYXBpLmMKaW5kZXggNzQ5MGYzZi4uNmI4NjI3NiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9hcGkuYworKysgYi9uZXQvc2NoZWQvc2NoX2FwaS5jCkBAIC0xNjczLDEwICsxNjczLDggQEAKIHsKIAlpbnQgZXJyID0gMDsKICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QKLQlfX2JlMTYgcHJvdG9jb2w7CiAJc3RydWN0IHRjZl9wcm90byAqb3RwID0gdHA7CiByZWNsYXNzaWZ5OgotCXByb3RvY29sID0gc2tiLT5wcm90b2NvbDsKICNlbmRpZgogCiAJZXJyID0gdGNfY2xhc3NpZnlfY29tcGF0KHNrYiwgdHAsIHJlcyk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3FmcS5jIGIvbmV0L3NjaGVkL3NjaF9xZnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDMzNDM0Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3NjaGVkL3NjaF9xZnEuYwpAQCAtMCwwICsxLDExMzcgQEAKKy8qCisgKiBuZXQvc2NoZWQvc2NoX3FmcS5jICAgICAgICAgUXVpY2sgRmFpciBRdWV1ZWluZyBTY2hlZHVsZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IEZhYmlvIENoZWNjb25pLCBMdWlnaSBSaXp6bywgYW5kIFBhb2xvIFZhbGVudGUuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGt0X3NjaGVkLmg+CisjaW5jbHVkZSA8bmV0L3NjaF9nZW5lcmljLmg+CisjaW5jbHVkZSA8bmV0L3BrdF9zY2hlZC5oPgorI2luY2x1ZGUgPG5ldC9wa3RfY2xzLmg+CisKKworLyogIFF1aWNrIEZhaXIgUXVldWVpbmcKKyAgICA9PT09PT09PT09PT09PT09PT09CisKKyAgICBTb3VyY2VzOgorCisgICAgRmFiaW8gQ2hlY2NvbmksIEx1aWdpIFJpenpvLCBhbmQgUGFvbG8gVmFsZW50ZTogIlFGUTogRWZmaWNpZW50CisgICAgUGFja2V0IFNjaGVkdWxpbmcgd2l0aCBUaWdodCBCYW5kd2lkdGggRGlzdHJpYnV0aW9uIEd1YXJhbnRlZXMuIgorCisgICAgU2VlIGFsc286CisgICAgaHR0cDovL3JldGlzLnNzc3VwLml0L35mYWJpby9saW51eC9xZnEvCisgKi8KKworLyoKKworICBWaXJ0dWFsIHRpbWUgY29tcHV0YXRpb25zLgorCisgIFMsIEYgYW5kIFYgYXJlIGFsbCBjb21wdXRlZCBpbiBmaXhlZCBwb2ludCBhcml0aG1ldGljIHdpdGgKKyAgRlJBQ19CSVRTIGRlY2ltYWwgYml0cy4KKworICBRRlFfTUFYX0lOREVYIGlzIHRoZSBtYXhpbXVtIGluZGV4IGFsbG93ZWQgZm9yIGEgZ3JvdXAuIFdlIG5lZWQKKwlvbmUgYml0IHBlciBpbmRleC4KKyAgUUZRX01BWF9XU0hJRlQgaXMgdGhlIG1heGltdW0gcG93ZXIgb2YgdHdvIHN1cHBvcnRlZCBhcyBhIHdlaWdodC4KKworICBUaGUgbGF5b3V0IG9mIHRoZSBiaXRzIGlzIGFzIGJlbG93OgorCisgICAgICAgICAgICAgICAgICAgWyBNVFVfU0hJRlQgXVsgICAgICBGUkFDX0JJVFMgICAgXQorICAgICAgICAgICAgICAgICAgIFsgTUFYX0lOREVYICAgIF1bIE1JTl9TTE9UX1NISUZUIF0KKwkJCQkgXi5fX2dycC0+aW5kZXggPSAwCisJCQkJICouX19ncnAtPnNsb3Rfc2hpZnQKKworICB3aGVyZSBNSU5fU0xPVF9TSElGVCBpcyBkZXJpdmVkIGJ5IGRpZmZlcmVuY2UgZnJvbSB0aGUgb3RoZXJzLgorCisgIFRoZSBtYXggZ3JvdXAgaW5kZXggY29ycmVzcG9uZHMgdG8gTG1heC93X21pbiwgd2hlcmUKKyAgTG1heD0xPDxNVFVfU0hJRlQsIHdfbWluID0gMSAuCisgIEZyb20gdGhpcywgYW5kIGtub3dpbmcgaG93IG1hbnkgZ3JvdXBzIChNQVhfSU5ERVgpIHdlIHdhbnQsCisgIHdlIGNhbiBkZXJpdmUgdGhlIHNoaWZ0IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBncm91cC4KKworICBCZWNhdXNlIHdlIG9mdGVuIG5lZWQgdG8gY29tcHV0ZQorCUYgPSBTICsgbGVuL3dfaSAgYW5kIFYgPSBWICsgbGVuL3dzdW0KKyAgaW5zdGVhZCBvZiBzdG9yaW5nIHdfaSBzdG9yZSB0aGUgdmFsdWUKKwlpbnZfdyA9ICgxPDxGUkFDX0JJVFMpL3dfaQorICBzbyB3ZSBjYW4gZG8gRiA9IFMgKyBsZW4gKiBpbnZfdyAqIHdzdW0uCisgIFdlIHVzZSBXX1RPVCBpbiB0aGUgZm9ybXVsYXMgc28gd2UgY2FuIGVhc2lseSBtb3ZlIGJldHdlZW4KKyAgc3RhdGljIGFuZCBhZGFwdGl2ZSB3ZWlnaHQgc3VtLgorCisgIFRoZSBwZXItc2NoZWR1bGVyLWluc3RhbmNlIGRhdGEgY29udGFpbiBhbGwgdGhlIGRhdGEgc3RydWN0dXJlcworICBmb3IgdGhlIHNjaGVkdWxlcjogYml0bWFwcyBhbmQgYnVja2V0IGxpc3RzLgorCisgKi8KKworLyoKKyAqIE1heGltdW0gbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHNsb3RzIG9jY3VwaWVkIGJ5IGJhY2tsb2dnZWQgY2xhc3NlcworICogaW5zaWRlIGEgZ3JvdXAuCisgKi8KKyNkZWZpbmUgUUZRX01BWF9TTE9UUwkzMgorCisvKgorICogU2hpZnRzIHVzZWQgZm9yIGNsYXNzPC0+Z3JvdXAgbWFwcGluZy4gIFdlIGFsbG93IGNsYXNzIHdlaWdodHMgdGhhdCBhcmUKKyAqIGluIHRoZSByYW5nZSBbMSwgMl5NQVhfV1NISUZUXSwgYW5kIHdlIHRyeSB0byBtYXAgZWFjaCBjbGFzcyBpIHRvIHRoZQorICogZ3JvdXAgd2l0aCB0aGUgc21hbGxlc3QgaW5kZXggdGhhdCBjYW4gc3VwcG9ydCB0aGUgTF9pIC8gcl9pIGNvbmZpZ3VyZWQKKyAqIGZvciB0aGUgY2xhc3MuCisgKgorICogZ3JwLT5pbmRleCBpcyB0aGUgaW5kZXggb2YgdGhlIGdyb3VwOyBhbmQgZ3JwLT5zbG90X3NoaWZ0CisgKiBpcyB0aGUgc2hpZnQgZm9yIHRoZSBjb3JyZXNwb25kaW5nIChzY2FsZWQpIHNpZ21hX2kuCisgKi8KKyNkZWZpbmUgUUZRX01BWF9JTkRFWAkJMTkKKyNkZWZpbmUgUUZRX01BWF9XU0hJRlQJCTE2CisKKyNkZWZpbmUJUUZRX01BWF9XRUlHSFQJCSgxPDxRRlFfTUFYX1dTSElGVCkKKyNkZWZpbmUgUUZRX01BWF9XU1VNCQkoMipRRlFfTUFYX1dFSUdIVCkKKworI2RlZmluZSBGUkFDX0JJVFMJCTMwCS8qIGZpeGVkIHBvaW50IGFyaXRobWV0aWMgKi8KKyNkZWZpbmUgT05FX0ZQCQkJKDFVTCA8PCBGUkFDX0JJVFMpCisjZGVmaW5lIElXU1VNCQkJKE9ORV9GUC9RRlFfTUFYX1dTVU0pCisKKyNkZWZpbmUgUUZRX01UVV9TSElGVAkJMTEKKyNkZWZpbmUgUUZRX01JTl9TTE9UX1NISUZUCShGUkFDX0JJVFMgKyBRRlFfTVRVX1NISUZUIC0gUUZRX01BWF9JTkRFWCkKKworLyoKKyAqIFBvc3NpYmxlIGdyb3VwIHN0YXRlcy4gIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCBhcyBpbmRleGVzIGZvciB0aGUgYml0bWFwcworICogYXJyYXkgb2Ygc3RydWN0IHFmcV9xdWV1ZS4KKyAqLworZW51bSBxZnFfc3RhdGUgeyBFUiwgSVIsIEVCLCBJQiwgUUZRX01BWF9TVEFURSB9OworCitzdHJ1Y3QgcWZxX2dyb3VwOworCitzdHJ1Y3QgcWZxX2NsYXNzIHsKKwlzdHJ1Y3QgUWRpc2NfY2xhc3NfY29tbW9uIGNvbW1vbjsKKworCXVuc2lnbmVkIGludCByZWZjbnQ7CisJdW5zaWduZWQgaW50IGZpbHRlcl9jbnQ7CisKKwlzdHJ1Y3QgZ25ldF9zdGF0c19iYXNpY19wYWNrZWQgYnN0YXRzOworCXN0cnVjdCBnbmV0X3N0YXRzX3F1ZXVlIHFzdGF0czsKKwlzdHJ1Y3QgZ25ldF9zdGF0c19yYXRlX2VzdCByYXRlX2VzdDsKKwlzdHJ1Y3QgUWRpc2MgKnFkaXNjOworCisJc3RydWN0IGhsaXN0X25vZGUgbmV4dDsJLyogTGluayBmb3IgdGhlIHNsb3QgbGlzdC4gKi8KKwl1NjQgUywgRjsJCS8qIGZsb3cgdGltZXN0YW1wcyAoZXhhY3QpICovCisKKwkvKiBncm91cCB3ZSBiZWxvbmcgdG8uIEluIHByaW5jaXBsZSB3ZSB3b3VsZCBuZWVkIHRoZSBpbmRleCwKKwkgKiB3aGljaCBpcyBsb2dfMihsbWF4L3dlaWdodCksIGJ1dCB3ZSBuZXZlciByZWZlcmVuY2UgaXQKKwkgKiBkaXJlY3RseSwgb25seSB0aGUgZ3JvdXAuCisJICovCisJc3RydWN0IHFmcV9ncm91cCAqZ3JwOworCisJLyogdGhlc2UgYXJlIGNvcGllZCBmcm9tIHRoZSBmbG93c2V0LiAqLworCXUzMglpbnZfdzsJCS8qIE9ORV9GUC93ZWlnaHQgKi8KKwl1MzIJbG1heDsJCS8qIE1heCBwYWNrZXQgc2l6ZSBmb3IgdGhpcyBmbG93LiAqLworfTsKKworc3RydWN0IHFmcV9ncm91cCB7CisJdTY0IFMsIEY7CQkJLyogZ3JvdXAgdGltZXN0YW1wcyAoYXBwcm94KS4gKi8KKwl1bnNpZ25lZCBpbnQgc2xvdF9zaGlmdDsJLyogU2xvdCBzaGlmdC4gKi8KKwl1bnNpZ25lZCBpbnQgaW5kZXg7CQkvKiBHcm91cCBpbmRleC4gKi8KKwl1bnNpZ25lZCBpbnQgZnJvbnQ7CQkvKiBJbmRleCBvZiB0aGUgZnJvbnQgc2xvdC4gKi8KKwl1bnNpZ25lZCBsb25nIGZ1bGxfc2xvdHM7CS8qIG5vbi1lbXB0eSBzbG90cyAqLworCisJLyogQXJyYXkgb2YgUlIgbGlzdHMgb2YgYWN0aXZlIGNsYXNzZXMuICovCisJc3RydWN0IGhsaXN0X2hlYWQgc2xvdHNbUUZRX01BWF9TTE9UU107Cit9OworCitzdHJ1Y3QgcWZxX3NjaGVkIHsKKwlzdHJ1Y3QgdGNmX3Byb3RvICpmaWx0ZXJfbGlzdDsKKwlzdHJ1Y3QgUWRpc2NfY2xhc3NfaGFzaCBjbGhhc2g7CisKKwl1NjQJCVY7CQkvKiBQcmVjaXNlIHZpcnR1YWwgdGltZS4gKi8KKwl1MzIJCXdzdW07CQkvKiB3ZWlnaHQgc3VtICovCisKKwl1bnNpZ25lZCBsb25nIGJpdG1hcHNbUUZRX01BWF9TVEFURV07CSAgICAvKiBHcm91cCBiaXRtYXBzLiAqLworCXN0cnVjdCBxZnFfZ3JvdXAgZ3JvdXBzW1FGUV9NQVhfSU5ERVggKyAxXTsgLyogVGhlIGdyb3Vwcy4gKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcWZxX2NsYXNzICpxZnFfZmluZF9jbGFzcyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGNsYXNzaWQpCit7CisJc3RydWN0IHFmcV9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKKwlzdHJ1Y3QgUWRpc2NfY2xhc3NfY29tbW9uICpjbGM7CisKKwljbGMgPSBxZGlzY19jbGFzc19maW5kKCZxLT5jbGhhc2gsIGNsYXNzaWQpOworCWlmIChjbGMgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjbGMsIHN0cnVjdCBxZnFfY2xhc3MsIGNvbW1vbik7Cit9CisKK3N0YXRpYyB2b2lkIHFmcV9wdXJnZV9xdWV1ZShzdHJ1Y3QgcWZxX2NsYXNzICpjbCkKK3sKKwl1bnNpZ25lZCBpbnQgbGVuID0gY2wtPnFkaXNjLT5xLnFsZW47CisKKwlxZGlzY19yZXNldChjbC0+cWRpc2MpOworCXFkaXNjX3RyZWVfZGVjcmVhc2VfcWxlbihjbC0+cWRpc2MsIGxlbik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBxZnFfcG9saWN5W1RDQV9RRlFfTUFYICsgMV0gPSB7CisJW1RDQV9RRlFfV0VJR0hUXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCisJW1RDQV9RRlFfTE1BWF0gPSB7IC50eXBlID0gTkxBX1UzMiB9LAorfTsKKworLyoKKyAqIENhbGN1bGF0ZSBhIGZsb3cgaW5kZXgsIGdpdmVuIGl0cyB3ZWlnaHQgYW5kIG1heGltdW0gcGFja2V0IGxlbmd0aC4KKyAqIGluZGV4ID0gbG9nXzIobWF4bGVuL3dlaWdodCkgYnV0IHdlIG5lZWQgdG8gYXBwbHkgdGhlIHNjYWxpbmcuCisgKiBUaGlzIGlzIHVzZWQgb25seSBvbmNlIGF0IGZsb3cgY3JlYXRpb24uCisgKi8KK3N0YXRpYyBpbnQgcWZxX2NhbGNfaW5kZXgodTMyIGludl93LCB1bnNpZ25lZCBpbnQgbWF4bGVuKQoreworCXU2NCBzbG90X3NpemUgPSAodTY0KW1heGxlbiAqIGludl93OworCXVuc2lnbmVkIGxvbmcgc2l6ZV9tYXA7CisJaW50IGluZGV4ID0gMDsKKworCXNpemVfbWFwID0gc2xvdF9zaXplID4+IFFGUV9NSU5fU0xPVF9TSElGVDsKKwlpZiAoIXNpemVfbWFwKQorCQlnb3RvIG91dDsKKworCWluZGV4ID0gX19mbHMoc2l6ZV9tYXApICsgMTsJLyogYmFzaWNhbGx5IGEgbG9nXzIgKi8KKwlpbmRleCAtPSAhKHNsb3Rfc2l6ZSAtICgxVUxMIDw8IChpbmRleCArIFFGUV9NSU5fU0xPVF9TSElGVCAtIDEpKSk7CisKKwlpZiAoaW5kZXggPCAwKQorCQlpbmRleCA9IDA7CitvdXQ6CisJcHJfZGVidWcoInFmcSBjYWxjX2luZGV4OiBXID0gJWx1LCBMID0gJXUsIEkgPSAlZFxuIiwKKwkJICh1bnNpZ25lZCBsb25nKSBPTkVfRlAvaW52X3csIG1heGxlbiwgaW5kZXgpOworCisJcmV0dXJuIGluZGV4OworfQorCitzdGF0aWMgaW50IHFmcV9jaGFuZ2VfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkLCB1MzIgcGFyZW50aWQsCisJCQkgICAgc3RydWN0IG5sYXR0ciAqKnRjYSwgdW5zaWduZWQgbG9uZyAqYXJnKQoreworCXN0cnVjdCBxZnFfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7CisJc3RydWN0IHFmcV9jbGFzcyAqY2wgPSAoc3RydWN0IHFmcV9jbGFzcyAqKSphcmc7CisJc3RydWN0IG5sYXR0ciAqdGJbVENBX1FGUV9NQVggKyAxXTsKKwl1MzIgd2VpZ2h0LCBsbWF4LCBpbnZfdzsKKwlpbnQgaSwgZXJyOworCisJaWYgKHRjYVtUQ0FfT1BUSU9OU10gPT0gTlVMTCkgeworCQlwcl9ub3RpY2UoInFmcTogbm8gb3B0aW9uc1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIFRDQV9RRlFfTUFYLCB0Y2FbVENBX09QVElPTlNdLCBxZnFfcG9saWN5KTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWlmICh0YltUQ0FfUUZRX1dFSUdIVF0pIHsKKwkJd2VpZ2h0ID0gbmxhX2dldF91MzIodGJbVENBX1FGUV9XRUlHSFRdKTsKKwkJaWYgKCF3ZWlnaHQgfHwgd2VpZ2h0ID4gKDFVTCA8PCBRRlFfTUFYX1dTSElGVCkpIHsKKwkJCXByX25vdGljZSgicWZxOiBpbnZhbGlkIHdlaWdodCAldVxuIiwgd2VpZ2h0KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlCisJCXdlaWdodCA9IDE7CisKKwlpbnZfdyA9IE9ORV9GUCAvIHdlaWdodDsKKwl3ZWlnaHQgPSBPTkVfRlAgLyBpbnZfdzsKKwlpZiAocS0+d3N1bSArIHdlaWdodCA+IFFGUV9NQVhfV1NVTSkgeworCQlwcl9ub3RpY2UoInFmcTogdG90YWwgd2VpZ2h0IG91dCBvZiByYW5nZSAoJXUgKyAldSlcbiIsCisJCQkgIHdlaWdodCwgcS0+d3N1bSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh0YltUQ0FfUUZRX0xNQVhdKSB7CisJCWxtYXggPSBubGFfZ2V0X3UzMih0YltUQ0FfUUZRX0xNQVhdKTsKKwkJaWYgKCFsbWF4IHx8IGxtYXggPiAoMVVMIDw8IFFGUV9NVFVfU0hJRlQpKSB7CisJCQlwcl9ub3RpY2UoInFmcTogaW52YWxpZCBtYXggbGVuZ3RoICV1XG4iLCBsbWF4KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlCisJCWxtYXggPSAxVUwgPDwgUUZRX01UVV9TSElGVDsKKworCWlmIChjbCAhPSBOVUxMKSB7CisJCWlmICh0Y2FbVENBX1JBVEVdKSB7CisJCQllcnIgPSBnZW5fcmVwbGFjZV9lc3RpbWF0b3IoJmNsLT5ic3RhdHMsICZjbC0+cmF0ZV9lc3QsCisJCQkJCQkgICAgcWRpc2Nfcm9vdF9zbGVlcGluZ19sb2NrKHNjaCksCisJCQkJCQkgICAgdGNhW1RDQV9SQVRFXSk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCX0KKworCQlzY2hfdHJlZV9sb2NrKHNjaCk7CisJCWlmICh0YltUQ0FfUUZRX1dFSUdIVF0pIHsKKwkJCXEtPndzdW0gPSB3ZWlnaHQgLSBPTkVfRlAgLyBjbC0+aW52X3c7CisJCQljbC0+aW52X3cgPSBpbnZfdzsKKwkJfQorCQlzY2hfdHJlZV91bmxvY2soc2NoKTsKKworCQlyZXR1cm4gMDsKKwl9CisKKwljbCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBxZnFfY2xhc3MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2wgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9CVUZTOworCisJY2wtPnJlZmNudCA9IDE7CisJY2wtPmNvbW1vbi5jbGFzc2lkID0gY2xhc3NpZDsKKwljbC0+bG1heCA9IGxtYXg7CisJY2wtPmludl93ID0gaW52X3c7CisJaSA9IHFmcV9jYWxjX2luZGV4KGNsLT5pbnZfdywgY2wtPmxtYXgpOworCisJY2wtPmdycCA9ICZxLT5ncm91cHNbaV07CisJcS0+d3N1bSArPSB3ZWlnaHQ7CisKKwljbC0+cWRpc2MgPSBxZGlzY19jcmVhdGVfZGZsdChzY2gtPmRldl9xdWV1ZSwKKwkJCQkgICAgICAmcGZpZm9fcWRpc2Nfb3BzLCBjbGFzc2lkKTsKKwlpZiAoY2wtPnFkaXNjID09IE5VTEwpCisJCWNsLT5xZGlzYyA9ICZub29wX3FkaXNjOworCisJaWYgKHRjYVtUQ0FfUkFURV0pIHsKKwkJZXJyID0gZ2VuX25ld19lc3RpbWF0b3IoJmNsLT5ic3RhdHMsICZjbC0+cmF0ZV9lc3QsCisJCQkJCXFkaXNjX3Jvb3Rfc2xlZXBpbmdfbG9jayhzY2gpLAorCQkJCQl0Y2FbVENBX1JBVEVdKTsKKwkJaWYgKGVycikgeworCQkJcWRpc2NfZGVzdHJveShjbC0+cWRpc2MpOworCQkJa2ZyZWUoY2wpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCXNjaF90cmVlX2xvY2soc2NoKTsKKwlxZGlzY19jbGFzc19oYXNoX2luc2VydCgmcS0+Y2xoYXNoLCAmY2wtPmNvbW1vbik7CisJc2NoX3RyZWVfdW5sb2NrKHNjaCk7CisKKwlxZGlzY19jbGFzc19oYXNoX2dyb3coc2NoLCAmcS0+Y2xoYXNoKTsKKworCSphcmcgPSAodW5zaWduZWQgbG9uZyljbDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcWZxX2Rlc3Ryb3lfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBxZnFfY2xhc3MgKmNsKQoreworCXN0cnVjdCBxZnFfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7CisKKwlpZiAoY2wtPmludl93KSB7CisJCXEtPndzdW0gLT0gT05FX0ZQIC8gY2wtPmludl93OworCQljbC0+aW52X3cgPSAwOworCX0KKworCWdlbl9raWxsX2VzdGltYXRvcigmY2wtPmJzdGF0cywgJmNsLT5yYXRlX2VzdCk7CisJcWRpc2NfZGVzdHJveShjbC0+cWRpc2MpOworCWtmcmVlKGNsKTsKK30KKworc3RhdGljIGludCBxZnFfZGVsZXRlX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgcWZxX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpOworCXN0cnVjdCBxZnFfY2xhc3MgKmNsID0gKHN0cnVjdCBxZnFfY2xhc3MgKilhcmc7CisKKwlpZiAoY2wtPmZpbHRlcl9jbnQgPiAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJc2NoX3RyZWVfbG9jayhzY2gpOworCisJcWZxX3B1cmdlX3F1ZXVlKGNsKTsKKwlxZGlzY19jbGFzc19oYXNoX3JlbW92ZSgmcS0+Y2xoYXNoLCAmY2wtPmNvbW1vbik7CisKKwlCVUdfT04oLS1jbC0+cmVmY250ID09IDApOworCS8qCisJICogVGhpcyBzaG91bGRuJ3QgaGFwcGVuOiB3ZSAiaG9sZCIgb25lIGNvcHMtPmdldCgpIHdoZW4gY2FsbGVkCisJICogZnJvbSB0Y19jdGxfdGNsYXNzOyB0aGUgZGVzdHJveSBtZXRob2QgaXMgZG9uZSBmcm9tIGNvcHMtPnB1dCgpLgorCSAqLworCisJc2NoX3RyZWVfdW5sb2NrKHNjaCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHFmcV9nZXRfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkKQoreworCXN0cnVjdCBxZnFfY2xhc3MgKmNsID0gcWZxX2ZpbmRfY2xhc3Moc2NoLCBjbGFzc2lkKTsKKworCWlmIChjbCAhPSBOVUxMKQorCQljbC0+cmVmY250Kys7CisKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpY2w7Cit9CisKK3N0YXRpYyB2b2lkIHFmcV9wdXRfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBxZnFfY2xhc3MgKmNsID0gKHN0cnVjdCBxZnFfY2xhc3MgKilhcmc7CisKKwlpZiAoLS1jbC0+cmVmY250ID09IDApCisJCXFmcV9kZXN0cm95X2NsYXNzKHNjaCwgY2wpOworfQorCitzdGF0aWMgc3RydWN0IHRjZl9wcm90byAqKnFmcV90Y2ZfY2hhaW4oc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wpCit7CisJc3RydWN0IHFmcV9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKKworCWlmIChjbCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gJnEtPmZpbHRlcl9saXN0OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBxZnFfYmluZF90Y2Yoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgcGFyZW50LAorCQkJCSAgdTMyIGNsYXNzaWQpCit7CisJc3RydWN0IHFmcV9jbGFzcyAqY2wgPSBxZnFfZmluZF9jbGFzcyhzY2gsIGNsYXNzaWQpOworCisJaWYgKGNsICE9IE5VTEwpCisJCWNsLT5maWx0ZXJfY250Kys7CisKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpY2w7Cit9CisKK3N0YXRpYyB2b2lkIHFmcV91bmJpbmRfdGNmKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgcWZxX2NsYXNzICpjbCA9IChzdHJ1Y3QgcWZxX2NsYXNzICopYXJnOworCisJY2wtPmZpbHRlcl9jbnQtLTsKK30KKworc3RhdGljIGludCBxZnFfZ3JhZnRfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnLAorCQkJICAgc3RydWN0IFFkaXNjICpuZXcsIHN0cnVjdCBRZGlzYyAqKm9sZCkKK3sKKwlzdHJ1Y3QgcWZxX2NsYXNzICpjbCA9IChzdHJ1Y3QgcWZxX2NsYXNzICopYXJnOworCisJaWYgKG5ldyA9PSBOVUxMKSB7CisJCW5ldyA9IHFkaXNjX2NyZWF0ZV9kZmx0KHNjaC0+ZGV2X3F1ZXVlLAorCQkJCQkmcGZpZm9fcWRpc2Nfb3BzLCBjbC0+Y29tbW9uLmNsYXNzaWQpOworCQlpZiAobmV3ID09IE5VTEwpCisJCQluZXcgPSAmbm9vcF9xZGlzYzsKKwl9CisKKwlzY2hfdHJlZV9sb2NrKHNjaCk7CisJcWZxX3B1cmdlX3F1ZXVlKGNsKTsKKwkqb2xkID0gY2wtPnFkaXNjOworCWNsLT5xZGlzYyA9IG5ldzsKKwlzY2hfdHJlZV91bmxvY2soc2NoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBRZGlzYyAqcWZxX2NsYXNzX2xlYWYoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBxZnFfY2xhc3MgKmNsID0gKHN0cnVjdCBxZnFfY2xhc3MgKilhcmc7CisKKwlyZXR1cm4gY2wtPnFkaXNjOworfQorCitzdGF0aWMgaW50IHFmcV9kdW1wX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZywKKwkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjbXNnICp0Y20pCit7CisJc3RydWN0IHFmcV9jbGFzcyAqY2wgPSAoc3RydWN0IHFmcV9jbGFzcyAqKWFyZzsKKwlzdHJ1Y3QgbmxhdHRyICpuZXN0OworCisJdGNtLT50Y21fcGFyZW50CT0gVENfSF9ST09UOworCXRjbS0+dGNtX2hhbmRsZQk9IGNsLT5jb21tb24uY2xhc3NpZDsKKwl0Y20tPnRjbV9pbmZvCT0gY2wtPnFkaXNjLT5oYW5kbGU7CisKKwluZXN0ID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBUQ0FfT1BUSU9OUyk7CisJaWYgKG5lc3QgPT0gTlVMTCkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJTkxBX1BVVF9VMzIoc2tiLCBUQ0FfUUZRX1dFSUdIVCwgT05FX0ZQL2NsLT5pbnZfdyk7CisJTkxBX1BVVF9VMzIoc2tiLCBUQ0FfUUZRX0xNQVgsIGNsLT5sbWF4KTsKKwlyZXR1cm4gbmxhX25lc3RfZW5kKHNrYiwgbmVzdCk7CisKK25sYV9wdXRfZmFpbHVyZToKKwlubGFfbmVzdF9jYW5jZWwoc2tiLCBuZXN0KTsKKwlyZXR1cm4gLUVNU0dTSVpFOworfQorCitzdGF0aWMgaW50IHFmcV9kdW1wX2NsYXNzX3N0YXRzKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZywKKwkJCQlzdHJ1Y3QgZ25ldF9kdW1wICpkKQoreworCXN0cnVjdCBxZnFfY2xhc3MgKmNsID0gKHN0cnVjdCBxZnFfY2xhc3MgKilhcmc7CisJc3RydWN0IHRjX3FmcV9zdGF0cyB4c3RhdHM7CisKKwltZW1zZXQoJnhzdGF0cywgMCwgc2l6ZW9mKHhzdGF0cykpOworCWNsLT5xZGlzYy0+cXN0YXRzLnFsZW4gPSBjbC0+cWRpc2MtPnEucWxlbjsKKworCXhzdGF0cy53ZWlnaHQgPSBPTkVfRlAvY2wtPmludl93OworCXhzdGF0cy5sbWF4ID0gY2wtPmxtYXg7CisKKwlpZiAoZ25ldF9zdGF0c19jb3B5X2Jhc2ljKGQsICZjbC0+YnN0YXRzKSA8IDAgfHwKKwkgICAgZ25ldF9zdGF0c19jb3B5X3JhdGVfZXN0KGQsICZjbC0+YnN0YXRzLCAmY2wtPnJhdGVfZXN0KSA8IDAgfHwKKwkgICAgZ25ldF9zdGF0c19jb3B5X3F1ZXVlKGQsICZjbC0+cWRpc2MtPnFzdGF0cykgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gZ25ldF9zdGF0c19jb3B5X2FwcChkLCAmeHN0YXRzLCBzaXplb2YoeHN0YXRzKSk7Cit9CisKK3N0YXRpYyB2b2lkIHFmcV93YWxrKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgcWRpc2Nfd2Fsa2VyICphcmcpCit7CisJc3RydWN0IHFmcV9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKKwlzdHJ1Y3QgcWZxX2NsYXNzICpjbDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmIChhcmctPnN0b3ApCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBxLT5jbGhhc2guaGFzaHNpemU7IGkrKykgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeShjbCwgbiwgJnEtPmNsaGFzaC5oYXNoW2ldLCBjb21tb24uaG5vZGUpIHsKKwkJCWlmIChhcmctPmNvdW50IDwgYXJnLT5za2lwKSB7CisJCQkJYXJnLT5jb3VudCsrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGFyZy0+Zm4oc2NoLCAodW5zaWduZWQgbG9uZyljbCwgYXJnKSA8IDApIHsKKwkJCQlhcmctPnN0b3AgPSAxOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWFyZy0+Y291bnQrKzsKKwkJfQorCX0KK30KKworc3RhdGljIHN0cnVjdCBxZnFfY2xhc3MgKnFmcV9jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwKKwkJCQkgICAgICBpbnQgKnFlcnIpCit7CisJc3RydWN0IHFmcV9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKKwlzdHJ1Y3QgcWZxX2NsYXNzICpjbDsKKwlzdHJ1Y3QgdGNmX3Jlc3VsdCByZXM7CisJaW50IHJlc3VsdDsKKworCWlmIChUQ19IX01BSihza2ItPnByaW9yaXR5IF4gc2NoLT5oYW5kbGUpID09IDApIHsKKwkJcHJfZGVidWcoInFmcV9jbGFzc2lmeTogZm91bmQgJWRcbiIsIHNrYi0+cHJpb3JpdHkpOworCQljbCA9IHFmcV9maW5kX2NsYXNzKHNjaCwgc2tiLT5wcmlvcml0eSk7CisJCWlmIChjbCAhPSBOVUxMKQorCQkJcmV0dXJuIGNsOworCX0KKworCSpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfQllQQVNTOworCXJlc3VsdCA9IHRjX2NsYXNzaWZ5KHNrYiwgcS0+ZmlsdGVyX2xpc3QsICZyZXMpOworCWlmIChyZXN1bHQgPj0gMCkgeworI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVAorCQlzd2l0Y2ggKHJlc3VsdCkgeworCQljYXNlIFRDX0FDVF9RVUVVRUQ6CisJCWNhc2UgVENfQUNUX1NUT0xFTjoKKwkJCSpxZXJyID0gTkVUX1hNSVRfU1VDQ0VTUyB8IF9fTkVUX1hNSVRfU1RPTEVOOworCQljYXNlIFRDX0FDVF9TSE9UOgorCQkJcmV0dXJuIE5VTEw7CisJCX0KKyNlbmRpZgorCQljbCA9IChzdHJ1Y3QgcWZxX2NsYXNzICopcmVzLmNsYXNzOworCQlpZiAoY2wgPT0gTlVMTCkKKwkJCWNsID0gcWZxX2ZpbmRfY2xhc3Moc2NoLCByZXMuY2xhc3NpZCk7CisJCXJldHVybiBjbDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyogR2VuZXJpYyBjb21wYXJpc29uIGZ1bmN0aW9uLCBoYW5kbGluZyB3cmFwYXJvdW5kLiAqLworc3RhdGljIGlubGluZSBpbnQgcWZxX2d0KHU2NCBhLCB1NjQgYikKK3sKKwlyZXR1cm4gKHM2NCkoYSAtIGIpID4gMDsKK30KKworLyogUm91bmQgYSBwcmVjaXNlIHRpbWVzdGFtcCB0byBpdHMgc2xvdHRlZCB2YWx1ZS4gKi8KK3N0YXRpYyBpbmxpbmUgdTY0IHFmcV9yb3VuZF9kb3duKHU2NCB0cywgdW5zaWduZWQgaW50IHNoaWZ0KQoreworCXJldHVybiB0cyAmIH4oKDFVTEwgPDwgc2hpZnQpIC0gMSk7Cit9CisKKy8qIHJldHVybiB0aGUgcG9pbnRlciB0byB0aGUgZ3JvdXAgd2l0aCBsb3dlc3QgaW5kZXggaW4gdGhlIGJpdG1hcCAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgcWZxX2dyb3VwICpxZnFfZmZzKHN0cnVjdCBxZnFfc2NoZWQgKnEsCisJCQkJCXVuc2lnbmVkIGxvbmcgYml0bWFwKQoreworCWludCBpbmRleCA9IF9fZmZzKGJpdG1hcCk7CisJcmV0dXJuICZxLT5ncm91cHNbaW5kZXhdOworfQorLyogQ2FsY3VsYXRlIGEgbWFzayB0byBtaW1pYyB3aGF0IHdvdWxkIGJlIGZmc19mcm9tKCkuICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWFza19mcm9tKHVuc2lnbmVkIGxvbmcgYml0bWFwLCBpbnQgZnJvbSkKK3sKKwlyZXR1cm4gYml0bWFwICYgfigoMVVMIDw8IGZyb20pIC0gMSk7Cit9CisKKy8qCisgKiBUaGUgc3RhdGUgY29tcHV0YXRpb24gcmVsaWVzIG9uIEVSPTAsIElSPTEsIEVCPTIsIElCPTMKKyAqIEZpcnN0IGNvbXB1dGUgZWxpZ2liaWxpdHkgY29tcGFyaW5nIGdycC0+UywgcS0+ViwKKyAqIHRoZW4gY2hlY2sgaWYgc29tZW9uZSBpcyBibG9ja2luZyB1cyBhbmQgcG9zc2libHkgYWRkIEVCCisgKi8KK3N0YXRpYyBpbnQgcWZxX2NhbGNfc3RhdGUoc3RydWN0IHFmcV9zY2hlZCAqcSwgY29uc3Qgc3RydWN0IHFmcV9ncm91cCAqZ3JwKQoreworCS8qIGlmIFMgPiBWIHdlIGFyZSBub3QgZWxpZ2libGUgKi8KKwl1bnNpZ25lZCBpbnQgc3RhdGUgPSBxZnFfZ3QoZ3JwLT5TLCBxLT5WKTsKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSBtYXNrX2Zyb20ocS0+Yml0bWFwc1tFUl0sIGdycC0+aW5kZXgpOworCXN0cnVjdCBxZnFfZ3JvdXAgKm5leHQ7CisKKwlpZiAobWFzaykgeworCQluZXh0ID0gcWZxX2ZmcyhxLCBtYXNrKTsKKwkJaWYgKHFmcV9ndChncnAtPkYsIG5leHQtPkYpKQorCQkJc3RhdGUgfD0gRUI7CisJfQorCisJcmV0dXJuIHN0YXRlOworfQorCisKKy8qCisgKiBJbiBwcmluY2lwbGUKKyAqCXEtPmJpdG1hcHNbZHN0XSB8PSBxLT5iaXRtYXBzW3NyY10gJiBtYXNrOworICoJcS0+Yml0bWFwc1tzcmNdICY9IH5tYXNrOworICogYnV0IHdlIHNob3VsZCBtYWtlIHN1cmUgdGhhdCBzcmMgIT0gZHN0CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBxZnFfbW92ZV9ncm91cHMoc3RydWN0IHFmcV9zY2hlZCAqcSwgdW5zaWduZWQgbG9uZyBtYXNrLAorCQkJCSAgIGludCBzcmMsIGludCBkc3QpCit7CisJcS0+Yml0bWFwc1tkc3RdIHw9IHEtPmJpdG1hcHNbc3JjXSAmIG1hc2s7CisJcS0+Yml0bWFwc1tzcmNdICY9IH5tYXNrOworfQorCitzdGF0aWMgdm9pZCBxZnFfdW5ibG9ja19ncm91cHMoc3RydWN0IHFmcV9zY2hlZCAqcSwgaW50IGluZGV4LCB1NjQgb2xkX0YpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gbWFza19mcm9tKHEtPmJpdG1hcHNbRVJdLCBpbmRleCArIDEpOworCXN0cnVjdCBxZnFfZ3JvdXAgKm5leHQ7CisKKwlpZiAobWFzaykgeworCQluZXh0ID0gcWZxX2ZmcyhxLCBtYXNrKTsKKwkJaWYgKCFxZnFfZ3QobmV4dC0+Riwgb2xkX0YpKQorCQkJcmV0dXJuOworCX0KKworCW1hc2sgPSAoMVVMIDw8IGluZGV4KSAtIDE7CisJcWZxX21vdmVfZ3JvdXBzKHEsIG1hc2ssIEVCLCBFUik7CisJcWZxX21vdmVfZ3JvdXBzKHEsIG1hc2ssIElCLCBJUik7Cit9CisKKy8qCisgKiBwZXJoYXBzCisgKgorCW9sZF9WIF49IHEtPlY7CisJb2xkX1YgPj49IFFGUV9NSU5fU0xPVF9TSElGVDsKKwlpZiAob2xkX1YpIHsKKwkJLi4uCisJfQorICoKKyAqLworc3RhdGljIHZvaWQgcWZxX21ha2VfZWxpZ2libGUoc3RydWN0IHFmcV9zY2hlZCAqcSwgdTY0IG9sZF9WKQoreworCXVuc2lnbmVkIGxvbmcgdnNsb3QgPSBxLT5WID4+IFFGUV9NSU5fU0xPVF9TSElGVDsKKwl1bnNpZ25lZCBsb25nIG9sZF92c2xvdCA9IG9sZF9WID4+IFFGUV9NSU5fU0xPVF9TSElGVDsKKworCWlmICh2c2xvdCAhPSBvbGRfdnNsb3QpIHsKKwkJdW5zaWduZWQgbG9uZyBtYXNrID0gKDFVTCA8PCBmbHModnNsb3QgXiBvbGRfdnNsb3QpKSAtIDE7CisJCXFmcV9tb3ZlX2dyb3VwcyhxLCBtYXNrLCBJUiwgRVIpOworCQlxZnFfbW92ZV9ncm91cHMocSwgbWFzaywgSUIsIEVCKTsKKwl9Cit9CisKKworLyoKKyAqIFhYWCB3ZSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgc2xvdCBiZWNvbWVzIGxlc3MgdGhhbiAzMi4KKyAqIFRoaXMgaXMgZ3VhcmFudGVlZCBieSB0aGUgaW5wdXQgdmFsdWVzLgorICogcm91bmRlZFMgaXMgYWx3YXlzIGNsLT5TIHJvdW5kZWQgb24gZ3JwLT5zbG90X3NoaWZ0IGJpdHMuCisgKi8KK3N0YXRpYyB2b2lkIHFmcV9zbG90X2luc2VydChzdHJ1Y3QgcWZxX2dyb3VwICpncnAsIHN0cnVjdCBxZnFfY2xhc3MgKmNsLAorCQkJICAgIHU2NCByb3VuZGVkUykKK3sKKwl1NjQgc2xvdCA9IChyb3VuZGVkUyAtIGdycC0+UykgPj4gZ3JwLT5zbG90X3NoaWZ0OworCXVuc2lnbmVkIGludCBpID0gKGdycC0+ZnJvbnQgKyBzbG90KSAlIFFGUV9NQVhfU0xPVFM7CisKKwlobGlzdF9hZGRfaGVhZCgmY2wtPm5leHQsICZncnAtPnNsb3RzW2ldKTsKKwlfX3NldF9iaXQoc2xvdCwgJmdycC0+ZnVsbF9zbG90cyk7Cit9CisKKy8qIE1heWJlIGludHJvZHVjZSBobGlzdF9maXJzdF9lbnRyeT8/ICovCitzdGF0aWMgc3RydWN0IHFmcV9jbGFzcyAqcWZxX3Nsb3RfaGVhZChzdHJ1Y3QgcWZxX2dyb3VwICpncnApCit7CisJcmV0dXJuIGhsaXN0X2VudHJ5KGdycC0+c2xvdHNbZ3JwLT5mcm9udF0uZmlyc3QsCisJCQkgICBzdHJ1Y3QgcWZxX2NsYXNzLCBuZXh0KTsKK30KKworLyoKKyAqIHJlbW92ZSB0aGUgZW50cnkgZnJvbSB0aGUgc2xvdAorICovCitzdGF0aWMgdm9pZCBxZnFfZnJvbnRfc2xvdF9yZW1vdmUoc3RydWN0IHFmcV9ncm91cCAqZ3JwKQoreworCXN0cnVjdCBxZnFfY2xhc3MgKmNsID0gcWZxX3Nsb3RfaGVhZChncnApOworCisJQlVHX09OKCFjbCk7CisJaGxpc3RfZGVsKCZjbC0+bmV4dCk7CisJaWYgKGhsaXN0X2VtcHR5KCZncnAtPnNsb3RzW2dycC0+ZnJvbnRdKSkKKwkJX19jbGVhcl9iaXQoMCwgJmdycC0+ZnVsbF9zbG90cyk7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBmaXJzdCBmdWxsIHF1ZXVlIGluIGEgZ3JvdXAuIEFzIGEgc2lkZSBlZmZlY3QsCisgKiBhZGp1c3QgdGhlIGJ1Y2tldCBsaXN0IHNvIHRoZSBmaXJzdCBub24tZW1wdHkgYnVja2V0IGlzIGF0CisgKiBwb3NpdGlvbiAwIGluIGZ1bGxfc2xvdHMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcWZxX2NsYXNzICpxZnFfc2xvdF9zY2FuKHN0cnVjdCBxZnFfZ3JvdXAgKmdycCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCXByX2RlYnVnKCJxZnEgc2xvdF9zY2FuOiBncnAgJXUgZnVsbCAlI2x4XG4iLAorCQkgZ3JwLT5pbmRleCwgZ3JwLT5mdWxsX3Nsb3RzKTsKKworCWlmIChncnAtPmZ1bGxfc2xvdHMgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpID0gX19mZnMoZ3JwLT5mdWxsX3Nsb3RzKTsgIC8qIHplcm8gYmFzZWQgKi8KKwlpZiAoaSA+IDApIHsKKwkJZ3JwLT5mcm9udCA9IChncnAtPmZyb250ICsgaSkgJSBRRlFfTUFYX1NMT1RTOworCQlncnAtPmZ1bGxfc2xvdHMgPj49IGk7CisJfQorCisJcmV0dXJuIHFmcV9zbG90X2hlYWQoZ3JwKTsKK30KKworLyoKKyAqIGFkanVzdCB0aGUgYnVja2V0IGxpc3QuIFdoZW4gdGhlIHN0YXJ0IHRpbWUgb2YgYSBncm91cCBkZWNyZWFzZXMsCisgKiB3ZSBtb3ZlIHRoZSBpbmRleCBkb3duIChtb2R1bG8gUUZRX01BWF9TTE9UUykgc28gd2UgZG9uJ3QgbmVlZCB0bworICogbW92ZSB0aGUgb2JqZWN0cy4gVGhlIG1hc2sgb2Ygb2NjdXBpZWQgc2xvdHMgbXVzdCBiZSBzaGlmdGVkCisgKiBiZWNhdXNlIHdlIHVzZSBmZnMoKSB0byBmaW5kIHRoZSBmaXJzdCBub24tZW1wdHkgc2xvdC4KKyAqIFRoaXMgY292ZXJzIGRlY3JlYXNlcyBpbiB0aGUgZ3JvdXAncyBzdGFydCB0aW1lLCBidXQgd2hhdCBhYm91dAorICogaW5jcmVhc2VzIG9mIHRoZSBzdGFydCB0aW1lID8KKyAqIEhlcmUgdG9vIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhhdCBpIGlzIGxlc3MgdGhhbiAzMgorICovCitzdGF0aWMgdm9pZCBxZnFfc2xvdF9yb3RhdGUoc3RydWN0IHFmcV9ncm91cCAqZ3JwLCB1NjQgcm91bmRlZFMpCit7CisJdW5zaWduZWQgaW50IGkgPSAoZ3JwLT5TIC0gcm91bmRlZFMpID4+IGdycC0+c2xvdF9zaGlmdDsKKworCWdycC0+ZnVsbF9zbG90cyA8PD0gaTsKKwlncnAtPmZyb250ID0gKGdycC0+ZnJvbnQgLSBpKSAlIFFGUV9NQVhfU0xPVFM7Cit9CisKK3N0YXRpYyB2b2lkIHFmcV91cGRhdGVfZWxpZ2libGUoc3RydWN0IHFmcV9zY2hlZCAqcSwgdTY0IG9sZF9WKQoreworCXN0cnVjdCBxZnFfZ3JvdXAgKmdycDsKKwl1bnNpZ25lZCBsb25nIGluZWxpZ2libGU7CisKKwlpbmVsaWdpYmxlID0gcS0+Yml0bWFwc1tJUl0gfCBxLT5iaXRtYXBzW0lCXTsKKwlpZiAoaW5lbGlnaWJsZSkgeworCQlpZiAoIXEtPmJpdG1hcHNbRVJdKSB7CisJCQlncnAgPSBxZnFfZmZzKHEsIGluZWxpZ2libGUpOworCQkJaWYgKHFmcV9ndChncnAtPlMsIHEtPlYpKQorCQkJCXEtPlYgPSBncnAtPlM7CisJCX0KKwkJcWZxX21ha2VfZWxpZ2libGUocSwgb2xkX1YpOworCX0KK30KKworLyogV2hhdCBpcyBsZW5ndGggb2YgbmV4dCBwYWNrZXQgaW4gcXVldWUgKDAgaWYgcXVldWUgaXMgZW1wdHkpICovCitzdGF0aWMgdW5zaWduZWQgaW50IHFkaXNjX3BlZWtfbGVuKHN0cnVjdCBRZGlzYyAqc2NoKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlza2IgPSBzY2gtPm9wcy0+cGVlayhzY2gpOworCXJldHVybiBza2IgPyBxZGlzY19wa3RfbGVuKHNrYikgOiAwOworfQorCisvKgorICogVXBkYXRlcyB0aGUgY2xhc3MsIHJldHVybnMgdHJ1ZSBpZiBhbHNvIHRoZSBncm91cCBuZWVkcyB0byBiZSB1cGRhdGVkLgorICovCitzdGF0aWMgYm9vbCBxZnFfdXBkYXRlX2NsYXNzKHN0cnVjdCBxZnFfZ3JvdXAgKmdycCwgc3RydWN0IHFmcV9jbGFzcyAqY2wpCit7CisJdW5zaWduZWQgaW50IGxlbiA9IHFkaXNjX3BlZWtfbGVuKGNsLT5xZGlzYyk7CisKKwljbC0+UyA9IGNsLT5GOworCWlmICghbGVuKQorCQlxZnFfZnJvbnRfc2xvdF9yZW1vdmUoZ3JwKTsJLyogcXVldWUgaXMgZW1wdHkgKi8KKwllbHNlIHsKKwkJdTY0IHJvdW5kZWRTOworCisJCWNsLT5GID0gY2wtPlMgKyAodTY0KWxlbiAqIGNsLT5pbnZfdzsKKwkJcm91bmRlZFMgPSBxZnFfcm91bmRfZG93bihjbC0+UywgZ3JwLT5zbG90X3NoaWZ0KTsKKwkJaWYgKHJvdW5kZWRTID09IGdycC0+UykKKwkJCXJldHVybiBmYWxzZTsKKworCQlxZnFfZnJvbnRfc2xvdF9yZW1vdmUoZ3JwKTsKKwkJcWZxX3Nsb3RfaW5zZXJ0KGdycCwgY2wsIHJvdW5kZWRTKTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICpxZnFfZGVxdWV1ZShzdHJ1Y3QgUWRpc2MgKnNjaCkKK3sKKwlzdHJ1Y3QgcWZxX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpOworCXN0cnVjdCBxZnFfZ3JvdXAgKmdycDsKKwlzdHJ1Y3QgcWZxX2NsYXNzICpjbDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXVuc2lnbmVkIGludCBsZW47CisJdTY0IG9sZF9WOworCisJaWYgKCFxLT5iaXRtYXBzW0VSXSkKKwkJcmV0dXJuIE5VTEw7CisKKwlncnAgPSBxZnFfZmZzKHEsIHEtPmJpdG1hcHNbRVJdKTsKKworCWNsID0gcWZxX3Nsb3RfaGVhZChncnApOworCXNrYiA9IHFkaXNjX2RlcXVldWVfcGVla2VkKGNsLT5xZGlzYyk7CisJaWYgKCFza2IpIHsKKwkJV0FSTl9PTkNFKDEsICJxZnFfZGVxdWV1ZTogbm9uLXdvcmtjb25zZXJ2aW5nIGxlYWZcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlzY2gtPnEucWxlbi0tOworCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOworCisJb2xkX1YgPSBxLT5WOworCWxlbiA9IHFkaXNjX3BrdF9sZW4oc2tiKTsKKwlxLT5WICs9ICh1NjQpbGVuICogSVdTVU07CisJcHJfZGVidWcoInFmcSBkZXF1ZXVlOiBsZW4gJXUgRiAlbGxkIG5vdyAlbGxkXG4iLAorCQkgbGVuLCAodW5zaWduZWQgbG9uZyBsb25nKSBjbC0+RiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgcS0+Vik7CisKKwlpZiAocWZxX3VwZGF0ZV9jbGFzcyhncnAsIGNsKSkgeworCQl1NjQgb2xkX0YgPSBncnAtPkY7CisKKwkJY2wgPSBxZnFfc2xvdF9zY2FuKGdycCk7CisJCWlmICghY2wpCisJCQlfX2NsZWFyX2JpdChncnAtPmluZGV4LCAmcS0+Yml0bWFwc1tFUl0pOworCQllbHNlIHsKKwkJCXU2NCByb3VuZGVkUyA9IHFmcV9yb3VuZF9kb3duKGNsLT5TLCBncnAtPnNsb3Rfc2hpZnQpOworCQkJdW5zaWduZWQgaW50IHM7CisKKwkJCWlmIChncnAtPlMgPT0gcm91bmRlZFMpCisJCQkJZ290byBza2lwX3VuYmxvY2s7CisJCQlncnAtPlMgPSByb3VuZGVkUzsKKwkJCWdycC0+RiA9IHJvdW5kZWRTICsgKDJVTEwgPDwgZ3JwLT5zbG90X3NoaWZ0KTsKKwkJCV9fY2xlYXJfYml0KGdycC0+aW5kZXgsICZxLT5iaXRtYXBzW0VSXSk7CisJCQlzID0gcWZxX2NhbGNfc3RhdGUocSwgZ3JwKTsKKwkJCV9fc2V0X2JpdChncnAtPmluZGV4LCAmcS0+Yml0bWFwc1tzXSk7CisJCX0KKworCQlxZnFfdW5ibG9ja19ncm91cHMocSwgZ3JwLT5pbmRleCwgb2xkX0YpOworCX0KKworc2tpcF91bmJsb2NrOgorCXFmcV91cGRhdGVfZWxpZ2libGUocSwgb2xkX1YpOworCisJcmV0dXJuIHNrYjsKK30KKworLyoKKyAqIEFzc2lnbiBhIHJlYXNvbmFibGUgc3RhcnQgdGltZSBmb3IgYSBuZXcgZmxvdyBrIGluIGdyb3VwIGkuCisgKiBBZG1pc3NpYmxlIHZhbHVlcyBmb3IgXGhhdChGKSBhcmUgbXVsdGlwbGVzIG9mIFxzaWdtYV9pCisgKiBubyBncmVhdGVyIHRoYW4gVitcc2lnbWFfaSAuIExhcmdlciB2YWx1ZXMgbWVhbiB0aGF0CisgKiB3ZSBoYWQgYSB3cmFwYXJvdW5kIHNvIHdlIGNvbnNpZGVyIHRoZSB0aW1lc3RhbXAgdG8gYmUgc3RhbGUuCisgKgorICogSWYgRiBpcyBub3Qgc3RhbGUgYW5kIEYgPj0gViB0aGVuIHdlIHNldCBTID0gRi4KKyAqIE90aGVyd2lzZSB3ZSBzaG91bGQgYXNzaWduIFMgPSBWLCBidXQgdGhpcyBtYXkgdmlvbGF0ZQorICogdGhlIG9yZGVyaW5nIGluIEVSLiBTbywgaWYgd2UgaGF2ZSBncm91cHMgaW4gRVIsIHNldCBTIHRvCisgKiB0aGUgRl9qIG9mIHRoZSBmaXJzdCBncm91cCBqIHdoaWNoIHdvdWxkIGJlIGJsb2NraW5nIHVzLgorICogV2UgYXJlIGd1YXJhbnRlZWQgbm90IHRvIG1vdmUgUyBiYWNrd2FyZCBiZWNhdXNlCisgKiBvdGhlcndpc2Ugb3VyIGdyb3VwIGkgd291bGQgc3RpbGwgYmUgYmxvY2tlZC4KKyAqLworc3RhdGljIHZvaWQgcWZxX3VwZGF0ZV9zdGFydChzdHJ1Y3QgcWZxX3NjaGVkICpxLCBzdHJ1Y3QgcWZxX2NsYXNzICpjbCkKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisJdWludDMyX3QgbGltaXQsIHJvdW5kZWRGOworCWludCBzbG90X3NoaWZ0ID0gY2wtPmdycC0+c2xvdF9zaGlmdDsKKworCXJvdW5kZWRGID0gcWZxX3JvdW5kX2Rvd24oY2wtPkYsIHNsb3Rfc2hpZnQpOworCWxpbWl0ID0gcWZxX3JvdW5kX2Rvd24ocS0+Viwgc2xvdF9zaGlmdCkgKyAoMVVMIDw8IHNsb3Rfc2hpZnQpOworCisJaWYgKCFxZnFfZ3QoY2wtPkYsIHEtPlYpIHx8IHFmcV9ndChyb3VuZGVkRiwgbGltaXQpKSB7CisJCS8qIHRpbWVzdGFtcCB3YXMgc3RhbGUgKi8KKwkJbWFzayA9IG1hc2tfZnJvbShxLT5iaXRtYXBzW0VSXSwgY2wtPmdycC0+aW5kZXgpOworCQlpZiAobWFzaykgeworCQkJc3RydWN0IHFmcV9ncm91cCAqbmV4dCA9IHFmcV9mZnMocSwgbWFzayk7CisJCQlpZiAocWZxX2d0KHJvdW5kZWRGLCBuZXh0LT5GKSkgeworCQkJCWNsLT5TID0gbmV4dC0+RjsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwkJY2wtPlMgPSBxLT5WOworCX0gZWxzZSAgLyogdGltZXN0YW1wIGlzIG5vdCBzdGFsZSAqLworCQljbC0+UyA9IGNsLT5GOworfQorCitzdGF0aWMgaW50IHFmcV9lbnF1ZXVlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqc2NoKQoreworCXN0cnVjdCBxZnFfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7CisJc3RydWN0IHFmcV9ncm91cCAqZ3JwOworCXN0cnVjdCBxZnFfY2xhc3MgKmNsOworCWludCBlcnI7CisJdTY0IHJvdW5kZWRTOworCWludCBzOworCisJY2wgPSBxZnFfY2xhc3NpZnkoc2tiLCBzY2gsICZlcnIpOworCWlmIChjbCA9PSBOVUxMKSB7CisJCWlmIChlcnIgJiBfX05FVF9YTUlUX0JZUEFTUykKKwkJCXNjaC0+cXN0YXRzLmRyb3BzKys7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm4gZXJyOworCX0KKwlwcl9kZWJ1ZygicWZxX2VucXVldWU6IGNsID0gJXhcbiIsIGNsLT5jb21tb24uY2xhc3NpZCk7CisKKwllcnIgPSBxZGlzY19lbnF1ZXVlKHNrYiwgY2wtPnFkaXNjKTsKKwlpZiAodW5saWtlbHkoZXJyICE9IE5FVF9YTUlUX1NVQ0NFU1MpKSB7CisJCXByX2RlYnVnKCJxZnFfZW5xdWV1ZTogZW5xdWV1ZSBmYWlsZWQgJWRcbiIsIGVycik7CisJCWlmIChuZXRfeG1pdF9kcm9wX2NvdW50KGVycikpIHsKKwkJCWNsLT5xc3RhdHMuZHJvcHMrKzsKKwkJCXNjaC0+cXN0YXRzLmRyb3BzKys7CisJCX0KKwkJcmV0dXJuIGVycjsKKwl9CisKKwlic3RhdHNfdXBkYXRlKCZjbC0+YnN0YXRzLCBza2IpOworCSsrc2NoLT5xLnFsZW47CisKKwkvKiBJZiB0aGUgbmV3IHNrYiBpcyBub3QgdGhlIGhlYWQgb2YgcXVldWUsIHRoZW4gZG9uZSBoZXJlLiAqLworCWlmIChjbC0+cWRpc2MtPnEucWxlbiAhPSAxKQorCQlyZXR1cm4gZXJyOworCisJLyogSWYgcmVhY2ggdGhpcyBwb2ludCwgcXVldWUgcSB3YXMgaWRsZSAqLworCWdycCA9IGNsLT5ncnA7CisJcWZxX3VwZGF0ZV9zdGFydChxLCBjbCk7CisKKwkvKiBjb21wdXRlIG5ldyBmaW5pc2ggdGltZSBhbmQgcm91bmRlZCBzdGFydC4gKi8KKwljbC0+RiA9IGNsLT5TICsgKHU2NClxZGlzY19wa3RfbGVuKHNrYikgKiBjbC0+aW52X3c7CisJcm91bmRlZFMgPSBxZnFfcm91bmRfZG93bihjbC0+UywgZ3JwLT5zbG90X3NoaWZ0KTsKKworCS8qCisJICogaW5zZXJ0IGNsIGluIHRoZSBjb3JyZWN0IGJ1Y2tldC4KKwkgKiBJZiBjbC0+UyA+PSBncnAtPlMgd2UgZG9uJ3QgbmVlZCB0byBhZGp1c3QgdGhlCisJICogYnVja2V0IGxpc3QgYW5kIHNpbXBseSBnbyB0byB0aGUgaW5zZXJ0aW9uIHBoYXNlLgorCSAqIE90aGVyd2lzZSBncnAtPlMgaXMgZGVjcmVhc2luZywgd2UgbXVzdCBtYWtlIHJvb20KKwkgKiBpbiB0aGUgYnVja2V0IGxpc3QsIGFuZCBhbHNvIHJlY29tcHV0ZSB0aGUgZ3JvdXAgc3RhdGUuCisJICogRmluYWxseSwgaWYgdGhlcmUgd2VyZSBubyBmbG93cyBpbiB0aGlzIGdyb3VwIGFuZCBub2JvZHkKKwkgKiB3YXMgaW4gRVIgbWFrZSBzdXJlIHRvIGFkanVzdCBWLgorCSAqLworCWlmIChncnAtPmZ1bGxfc2xvdHMpIHsKKwkJaWYgKCFxZnFfZ3QoZ3JwLT5TLCBjbC0+UykpCisJCQlnb3RvIHNraXBfdXBkYXRlOworCisJCS8qIGNyZWF0ZSBhIHNsb3QgZm9yIHRoaXMgY2wtPlMgKi8KKwkJcWZxX3Nsb3Rfcm90YXRlKGdycCwgcm91bmRlZFMpOworCQkvKiBncm91cCB3YXMgc3VyZWx5IGluZWxpZ2libGUsIHJlbW92ZSAqLworCQlfX2NsZWFyX2JpdChncnAtPmluZGV4LCAmcS0+Yml0bWFwc1tJUl0pOworCQlfX2NsZWFyX2JpdChncnAtPmluZGV4LCAmcS0+Yml0bWFwc1tJQl0pOworCX0gZWxzZSBpZiAoIXEtPmJpdG1hcHNbRVJdICYmIHFmcV9ndChyb3VuZGVkUywgcS0+VikpCisJCXEtPlYgPSByb3VuZGVkUzsKKworCWdycC0+UyA9IHJvdW5kZWRTOworCWdycC0+RiA9IHJvdW5kZWRTICsgKDJVTEwgPDwgZ3JwLT5zbG90X3NoaWZ0KTsKKwlzID0gcWZxX2NhbGNfc3RhdGUocSwgZ3JwKTsKKwlfX3NldF9iaXQoZ3JwLT5pbmRleCwgJnEtPmJpdG1hcHNbc10pOworCisJcHJfZGVidWcoInFmcSBlbnF1ZXVlOiBuZXcgc3RhdGUgJWQgJSNseCBTICVsbGQgRiAlbGxkIFYgJWxsZFxuIiwKKwkJIHMsIHEtPmJpdG1hcHNbc10sCisJCSAodW5zaWduZWQgbG9uZyBsb25nKSBjbC0+UywKKwkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGNsLT5GLAorCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgcS0+Vik7CisKK3NraXBfdXBkYXRlOgorCXFmcV9zbG90X2luc2VydChncnAsIGNsLCByb3VuZGVkUyk7CisKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyB2b2lkIHFmcV9zbG90X3JlbW92ZShzdHJ1Y3QgcWZxX3NjaGVkICpxLCBzdHJ1Y3QgcWZxX2dyb3VwICpncnAsCisJCQkgICAgc3RydWN0IHFmcV9jbGFzcyAqY2wpCit7CisJdW5zaWduZWQgaW50IGksIG9mZnNldDsKKwl1NjQgcm91bmRlZFM7CisKKwlyb3VuZGVkUyA9IHFmcV9yb3VuZF9kb3duKGNsLT5TLCBncnAtPnNsb3Rfc2hpZnQpOworCW9mZnNldCA9IChyb3VuZGVkUyAtIGdycC0+UykgPj4gZ3JwLT5zbG90X3NoaWZ0OworCWkgPSAoZ3JwLT5mcm9udCArIG9mZnNldCkgJSBRRlFfTUFYX1NMT1RTOworCisJaGxpc3RfZGVsKCZjbC0+bmV4dCk7CisJaWYgKGhsaXN0X2VtcHR5KCZncnAtPnNsb3RzW2ldKSkKKwkJX19jbGVhcl9iaXQob2Zmc2V0LCAmZ3JwLT5mdWxsX3Nsb3RzKTsKK30KKworLyoKKyAqIGNhbGxlZCB0byBmb3JjaWJseSBkZXN0cm95IGEgcXVldWUuCisgKiBJZiB0aGUgcXVldWUgaXMgbm90IGluIHRoZSBmcm9udCBidWNrZXQsIG9yIGlmIGl0IGhhcworICogb3RoZXIgcXVldWVzIGluIHRoZSBmcm9udCBidWNrZXQsIHdlIGNhbiBzaW1wbHkgcmVtb3ZlCisgKiB0aGUgcXVldWUgd2l0aCBubyBvdGhlciBzaWRlIGVmZmVjdHMuCisgKiBPdGhlcndpc2Ugd2UgbXVzdCBwcm9wYWdhdGUgdGhlIGV2ZW50IHVwLgorICovCitzdGF0aWMgdm9pZCBxZnFfZGVhY3RpdmF0ZV9jbGFzcyhzdHJ1Y3QgcWZxX3NjaGVkICpxLCBzdHJ1Y3QgcWZxX2NsYXNzICpjbCkKK3sKKwlzdHJ1Y3QgcWZxX2dyb3VwICpncnAgPSBjbC0+Z3JwOworCXVuc2lnbmVkIGxvbmcgbWFzazsKKwl1NjQgcm91bmRlZFM7CisJaW50IHM7CisKKwljbC0+RiA9IGNsLT5TOworCXFmcV9zbG90X3JlbW92ZShxLCBncnAsIGNsKTsKKworCWlmICghZ3JwLT5mdWxsX3Nsb3RzKSB7CisJCV9fY2xlYXJfYml0KGdycC0+aW5kZXgsICZxLT5iaXRtYXBzW0lSXSk7CisJCV9fY2xlYXJfYml0KGdycC0+aW5kZXgsICZxLT5iaXRtYXBzW0VCXSk7CisJCV9fY2xlYXJfYml0KGdycC0+aW5kZXgsICZxLT5iaXRtYXBzW0lCXSk7CisKKwkJaWYgKHRlc3RfYml0KGdycC0+aW5kZXgsICZxLT5iaXRtYXBzW0VSXSkgJiYKKwkJICAgICEocS0+Yml0bWFwc1tFUl0gJiB+KCgxVUwgPDwgZ3JwLT5pbmRleCkgLSAxKSkpIHsKKwkJCW1hc2sgPSBxLT5iaXRtYXBzW0VSXSAmICgoMVVMIDw8IGdycC0+aW5kZXgpIC0gMSk7CisJCQlpZiAobWFzaykKKwkJCQltYXNrID0gfigoMVVMIDw8IF9fZmxzKG1hc2spKSAtIDEpOworCQkJZWxzZQorCQkJCW1hc2sgPSB+MFVMOworCQkJcWZxX21vdmVfZ3JvdXBzKHEsIG1hc2ssIEVCLCBFUik7CisJCQlxZnFfbW92ZV9ncm91cHMocSwgbWFzaywgSUIsIElSKTsKKwkJfQorCQlfX2NsZWFyX2JpdChncnAtPmluZGV4LCAmcS0+Yml0bWFwc1tFUl0pOworCX0gZWxzZSBpZiAoaGxpc3RfZW1wdHkoJmdycC0+c2xvdHNbZ3JwLT5mcm9udF0pKSB7CisJCWNsID0gcWZxX3Nsb3Rfc2NhbihncnApOworCQlyb3VuZGVkUyA9IHFmcV9yb3VuZF9kb3duKGNsLT5TLCBncnAtPnNsb3Rfc2hpZnQpOworCQlpZiAoZ3JwLT5TICE9IHJvdW5kZWRTKSB7CisJCQlfX2NsZWFyX2JpdChncnAtPmluZGV4LCAmcS0+Yml0bWFwc1tFUl0pOworCQkJX19jbGVhcl9iaXQoZ3JwLT5pbmRleCwgJnEtPmJpdG1hcHNbSVJdKTsKKwkJCV9fY2xlYXJfYml0KGdycC0+aW5kZXgsICZxLT5iaXRtYXBzW0VCXSk7CisJCQlfX2NsZWFyX2JpdChncnAtPmluZGV4LCAmcS0+Yml0bWFwc1tJQl0pOworCQkJZ3JwLT5TID0gcm91bmRlZFM7CisJCQlncnAtPkYgPSByb3VuZGVkUyArICgyVUxMIDw8IGdycC0+c2xvdF9zaGlmdCk7CisJCQlzID0gcWZxX2NhbGNfc3RhdGUocSwgZ3JwKTsKKwkJCV9fc2V0X2JpdChncnAtPmluZGV4LCAmcS0+Yml0bWFwc1tzXSk7CisJCX0KKwl9CisKKwlxZnFfdXBkYXRlX2VsaWdpYmxlKHEsIHEtPlYpOworfQorCitzdGF0aWMgdm9pZCBxZnFfcWxlbl9ub3RpZnkoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBxZnFfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7CisJc3RydWN0IHFmcV9jbGFzcyAqY2wgPSAoc3RydWN0IHFmcV9jbGFzcyAqKWFyZzsKKworCWlmIChjbC0+cWRpc2MtPnEucWxlbiA9PSAwKQorCQlxZnFfZGVhY3RpdmF0ZV9jbGFzcyhxLCBjbCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcWZxX2Ryb3Aoc3RydWN0IFFkaXNjICpzY2gpCit7CisJc3RydWN0IHFmcV9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKKwlzdHJ1Y3QgcWZxX2dyb3VwICpncnA7CisJdW5zaWduZWQgaW50IGksIGosIGxlbjsKKworCWZvciAoaSA9IDA7IGkgPD0gUUZRX01BWF9JTkRFWDsgaSsrKSB7CisJCWdycCA9ICZxLT5ncm91cHNbaV07CisJCWZvciAoaiA9IDA7IGogPCBRRlFfTUFYX1NMT1RTOyBqKyspIHsKKwkJCXN0cnVjdCBxZnFfY2xhc3MgKmNsOworCQkJc3RydWN0IGhsaXN0X25vZGUgKm47CisKKwkJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsLCBuLCAmZ3JwLT5zbG90c1tqXSwgbmV4dCkgeworCisJCQkJaWYgKCFjbC0+cWRpc2MtPm9wcy0+ZHJvcCkKKwkJCQkJY29udGludWU7CisKKwkJCQlsZW4gPSBjbC0+cWRpc2MtPm9wcy0+ZHJvcChjbC0+cWRpc2MpOworCQkJCWlmIChsZW4gPiAwKSB7CisJCQkJCXNjaC0+cS5xbGVuLS07CisJCQkJCWlmICghY2wtPnFkaXNjLT5xLnFsZW4pCisJCQkJCQlxZnFfZGVhY3RpdmF0ZV9jbGFzcyhxLCBjbCk7CisKKwkJCQkJcmV0dXJuIGxlbjsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxZnFfaW5pdF9xZGlzYyhzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0KQoreworCXN0cnVjdCBxZnFfc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7CisJc3RydWN0IHFmcV9ncm91cCAqZ3JwOworCWludCBpLCBqLCBlcnI7CisKKwllcnIgPSBxZGlzY19jbGFzc19oYXNoX2luaXQoJnEtPmNsaGFzaCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlmb3IgKGkgPSAwOyBpIDw9IFFGUV9NQVhfSU5ERVg7IGkrKykgeworCQlncnAgPSAmcS0+Z3JvdXBzW2ldOworCQlncnAtPmluZGV4ID0gaTsKKwkJZ3JwLT5zbG90X3NoaWZ0ID0gUUZRX01UVV9TSElGVCArIEZSQUNfQklUUworCQkJCSAgIC0gKFFGUV9NQVhfSU5ERVggLSBpKTsKKwkJZm9yIChqID0gMDsgaiA8IFFGUV9NQVhfU0xPVFM7IGorKykKKwkJCUlOSVRfSExJU1RfSEVBRCgmZ3JwLT5zbG90c1tqXSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHFmcV9yZXNldF9xZGlzYyhzdHJ1Y3QgUWRpc2MgKnNjaCkKK3sKKwlzdHJ1Y3QgcWZxX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpOworCXN0cnVjdCBxZnFfZ3JvdXAgKmdycDsKKwlzdHJ1Y3QgcWZxX2NsYXNzICpjbDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbiwgKnRtcDsKKwl1bnNpZ25lZCBpbnQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPD0gUUZRX01BWF9JTkRFWDsgaSsrKSB7CisJCWdycCA9ICZxLT5ncm91cHNbaV07CisJCWZvciAoaiA9IDA7IGogPCBRRlFfTUFYX1NMT1RTOyBqKyspIHsKKwkJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2wsIG4sIHRtcCwKKwkJCQkJCSAgJmdycC0+c2xvdHNbal0sIG5leHQpIHsKKwkJCQlxZnFfZGVhY3RpdmF0ZV9jbGFzcyhxLCBjbCk7CisJCQl9CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcS0+Y2xoYXNoLmhhc2hzaXplOyBpKyspIHsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkoY2wsIG4sICZxLT5jbGhhc2guaGFzaFtpXSwgY29tbW9uLmhub2RlKQorCQkJcWRpc2NfcmVzZXQoY2wtPnFkaXNjKTsKKwl9CisJc2NoLT5xLnFsZW4gPSAwOworfQorCitzdGF0aWMgdm9pZCBxZnFfZGVzdHJveV9xZGlzYyhzdHJ1Y3QgUWRpc2MgKnNjaCkKK3sKKwlzdHJ1Y3QgcWZxX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpOworCXN0cnVjdCBxZnFfY2xhc3MgKmNsOworCXN0cnVjdCBobGlzdF9ub2RlICpuLCAqbmV4dDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXRjZl9kZXN0cm95X2NoYWluKCZxLT5maWx0ZXJfbGlzdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcS0+Y2xoYXNoLmhhc2hzaXplOyBpKyspIHsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjbCwgbiwgbmV4dCwgJnEtPmNsaGFzaC5oYXNoW2ldLAorCQkJCQkgIGNvbW1vbi5obm9kZSkgeworCQkJcWZxX2Rlc3Ryb3lfY2xhc3Moc2NoLCBjbCk7CisJCX0KKwl9CisJcWRpc2NfY2xhc3NfaGFzaF9kZXN0cm95KCZxLT5jbGhhc2gpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IFFkaXNjX2NsYXNzX29wcyBxZnFfY2xhc3Nfb3BzID0geworCS5jaGFuZ2UJCT0gcWZxX2NoYW5nZV9jbGFzcywKKwkuZGVsZXRlCQk9IHFmcV9kZWxldGVfY2xhc3MsCisJLmdldAkJPSBxZnFfZ2V0X2NsYXNzLAorCS5wdXQJCT0gcWZxX3B1dF9jbGFzcywKKwkudGNmX2NoYWluCT0gcWZxX3RjZl9jaGFpbiwKKwkuYmluZF90Y2YJPSBxZnFfYmluZF90Y2YsCisJLnVuYmluZF90Y2YJPSBxZnFfdW5iaW5kX3RjZiwKKwkuZ3JhZnQJCT0gcWZxX2dyYWZ0X2NsYXNzLAorCS5sZWFmCQk9IHFmcV9jbGFzc19sZWFmLAorCS5xbGVuX25vdGlmeQk9IHFmcV9xbGVuX25vdGlmeSwKKwkuZHVtcAkJPSBxZnFfZHVtcF9jbGFzcywKKwkuZHVtcF9zdGF0cwk9IHFmcV9kdW1wX2NsYXNzX3N0YXRzLAorCS53YWxrCQk9IHFmcV93YWxrLAorfTsKKworc3RhdGljIHN0cnVjdCBRZGlzY19vcHMgcWZxX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0geworCS5jbF9vcHMJCT0gJnFmcV9jbGFzc19vcHMsCisJLmlkCQk9ICJxZnEiLAorCS5wcml2X3NpemUJPSBzaXplb2Yoc3RydWN0IHFmcV9zY2hlZCksCisJLmVucXVldWUJPSBxZnFfZW5xdWV1ZSwKKwkuZGVxdWV1ZQk9IHFmcV9kZXF1ZXVlLAorCS5wZWVrCQk9IHFkaXNjX3BlZWtfZGVxdWV1ZWQsCisJLmRyb3AJCT0gcWZxX2Ryb3AsCisJLmluaXQJCT0gcWZxX2luaXRfcWRpc2MsCisJLnJlc2V0CQk9IHFmcV9yZXNldF9xZGlzYywKKwkuZGVzdHJveQk9IHFmcV9kZXN0cm95X3FkaXNjLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHFmcV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHJlZ2lzdGVyX3FkaXNjKCZxZnFfcWRpc2Nfb3BzKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHFmcV9leGl0KHZvaWQpCit7CisJdW5yZWdpc3Rlcl9xZGlzYygmcWZxX3FkaXNjX29wcyk7Cit9CisKK21vZHVsZV9pbml0KHFmcV9pbml0KTsKK21vZHVsZV9leGl0KHFmcV9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfc2ZxLmMgYi9uZXQvc2NoZWQvc2NoX3NmcS5jCmluZGV4IGMyZTYyOGQuLjdlZjg3ZjkgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfc2ZxLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9zZnEuYwpAQCAtMTY5LDcgKzE2OSw3IEBACiAJfQogCWNhc2UgaHRvbnMoRVRIX1BfSVBWNik6CiAJewotCQlzdHJ1Y3QgaXB2NmhkciAqaXBoOworCQljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXBoOwogCQlpbnQgcG9mZjsKIAogCQlpZiAoIXBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZigqaXBoKSkpCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9iaW5kX2FkZHIuYyBiL25ldC9zY3RwL2JpbmRfYWRkci5jCmluZGV4IGZhZjcxZDEuLjgzZTMwMTEgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2JpbmRfYWRkci5jCisrKyBiL25ldC9zY3RwL2JpbmRfYWRkci5jCkBAIC0xNDAsMTQgKzE0MCwxMiBAQAogLyogRGlzcG9zZSBvZiB0aGUgYWRkcmVzcyBsaXN0LiAqLwogc3RhdGljIHZvaWQgc2N0cF9iaW5kX2FkZHJfY2xlYW4oc3RydWN0IHNjdHBfYmluZF9hZGRyICpicCkKIHsKLQlzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSAqYWRkcjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICp0ZW1wOworCXN0cnVjdCBzY3RwX3NvY2thZGRyX2VudHJ5ICphZGRyLCAqdGVtcDsKIAogCS8qIEVtcHR5IHRoZSBiaW5kIGFkZHJlc3MgbGlzdC4gKi8KLQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0ZW1wLCAmYnAtPmFkZHJlc3NfbGlzdCkgewotCQlhZGRyID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzY3RwX3NvY2thZGRyX2VudHJ5LCBsaXN0KTsKLQkJbGlzdF9kZWwocG9zKTsKLQkJa2ZyZWUoYWRkcik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGFkZHIsIHRlbXAsICZicC0+YWRkcmVzc19saXN0LCBsaXN0KSB7CisJCWxpc3RfZGVsX3JjdSgmYWRkci0+bGlzdCk7CisJCWtmcmVlX3JjdShhZGRyLCByY3UpOwogCQlTQ1RQX0RCR19PQkpDTlRfREVDKGFkZHIpOwogCX0KIH0KQEAgLTIxOSw3ICsyMTcsNyBAQAogCX0KIAogCWlmIChmb3VuZCkgewotCQljYWxsX3JjdSgmYWRkci0+cmN1LCBzY3RwX2xvY2FsX2FkZHJfZnJlZSk7CisJCWtmcmVlX3JjdShhZGRyLCByY3UpOwogCQlTQ1RQX0RCR19PQkpDTlRfREVDKGFkZHIpOwogCQlyZXR1cm4gMDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9kZWJ1Zy5jIGIvbmV0L3NjdHAvZGVidWcuYwppbmRleCBiZjI0ZmE2Li5lYzk5N2NmIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9kZWJ1Zy5jCisrKyBiL25ldC9zY3RwL2RlYnVnLmMKQEAgLTk4LDcgKzk4LDYgQEAKIAogLyogVGhlc2UgYXJlIHByaW50YWJsZSBmb3JtcyBvZiB0aGUgc3RhdGVzLiAgKi8KIGNvbnN0IGNoYXIgKmNvbnN0IHNjdHBfc3RhdGVfdGJsW1NDVFBfU1RBVEVfTlVNX1NUQVRFU10gPSB7Ci0JIlNUQVRFX0VNUFRZIiwKIAkiU1RBVEVfQ0xPU0VEIiwKIAkiU1RBVEVfQ09PS0lFX1dBSVQiLAogCSJTVEFURV9DT09LSUVfRUNIT0VEIiwKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2VuZHBvaW50b2xhLmMgYi9uZXQvc2N0cC9lbmRwb2ludG9sYS5jCmluZGV4IGUxMGFjYzAuLmM4Y2MyNGUgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2VuZHBvaW50b2xhLmMKKysrIGIvbmV0L3NjdHAvZW5kcG9pbnRvbGEuYwpAQCAtMzI1LDYgKzMyNSw3IEBACiAJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICoqdHJhbnNwb3J0KQogewogCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jID0gTlVMTDsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqdG1wOwogCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdCA9IE5VTEw7CiAJc3RydWN0IHNjdHBfaGFzaGJ1Y2tldCAqaGVhZDsKIAlzdHJ1Y3Qgc2N0cF9lcF9jb21tb24gKmVwYjsKQEAgLTMzMywyNSArMzM0LDMyIEBACiAJaW50IHJwb3J0OwogCiAJKnRyYW5zcG9ydCA9IE5VTEw7CisKKwkvKiBJZiB0aGUgbG9jYWwgcG9ydCBpcyBub3Qgc2V0LCB0aGVyZSBjYW4ndCBiZSBhbnkgYXNzb2NpYXRpb25zCisJICogb24gdGhpcyBlbmRwb2ludC4KKwkgKi8KKwlpZiAoIWVwLT5iYXNlLmJpbmRfYWRkci5wb3J0KQorCQlnb3RvIG91dDsKKwogCXJwb3J0ID0gbnRvaHMocGFkZHItPnY0LnNpbl9wb3J0KTsKIAogCWhhc2ggPSBzY3RwX2Fzc29jX2hhc2hmbihlcC0+YmFzZS5iaW5kX2FkZHIucG9ydCwgcnBvcnQpOwogCWhlYWQgPSAmc2N0cF9hc3NvY19oYXNodGFibGVbaGFzaF07CiAJcmVhZF9sb2NrKCZoZWFkLT5sb2NrKTsKIAlzY3RwX2Zvcl9lYWNoX2hlbnRyeShlcGIsIG5vZGUsICZoZWFkLT5jaGFpbikgewotCQlhc29jID0gc2N0cF9hc3NvYyhlcGIpOwotCQlpZiAoYXNvYy0+ZXAgIT0gZXAgfHwgcnBvcnQgIT0gYXNvYy0+cGVlci5wb3J0KQotCQkJZ290byBuZXh0OworCQl0bXAgPSBzY3RwX2Fzc29jKGVwYik7CisJCWlmICh0bXAtPmVwICE9IGVwIHx8IHJwb3J0ICE9IHRtcC0+cGVlci5wb3J0KQorCQkJY29udGludWU7CiAKLQkJdCA9IHNjdHBfYXNzb2NfbG9va3VwX3BhZGRyKGFzb2MsIHBhZGRyKTsKKwkJdCA9IHNjdHBfYXNzb2NfbG9va3VwX3BhZGRyKHRtcCwgcGFkZHIpOwogCQlpZiAodCkgeworCQkJYXNvYyA9IHRtcDsKIAkJCSp0cmFuc3BvcnQgPSB0OwogCQkJYnJlYWs7CiAJCX0KLW5leHQ6Ci0JCWFzb2MgPSBOVUxMOwogCX0KIAlyZWFkX3VubG9jaygmaGVhZC0+bG9jayk7CitvdXQ6CiAJcmV0dXJuIGFzb2M7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2lucHV0LmMgYi9uZXQvc2N0cC9pbnB1dC5jCmluZGV4IDU0MzZjNjkuLjc0MWVkMTYgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2lucHV0LmMKKysrIGIvbmV0L3NjdHAvaW5wdXQuYwpAQCAtNTY1LDcgKzU2NSw3IEBACiAgKi8KIHZvaWQgc2N0cF92NF9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191MzIgaW5mbykKIHsKLQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7CisJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSAoY29uc3Qgc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOwogCWNvbnN0IGludCBpaGxlbiA9IGlwaC0+aWhsICogNDsKIAljb25zdCBpbnQgdHlwZSA9IGljbXBfaGRyKHNrYiktPnR5cGU7CiAJY29uc3QgaW50IGNvZGUgPSBpY21wX2hkcihza2IpLT5jb2RlOwpAQCAtNjYxLDcgKzY2MSw2IEBACiB7CiAJc2N0cF9jaHVua2hkcl90ICpjaDsKIAlfX3U4ICpjaF9lbmQ7Ci0Jc2N0cF9lcnJoZHJfdCAqZXJyOwogCiAJY2ggPSAoc2N0cF9jaHVua2hkcl90ICopIHNrYi0+ZGF0YTsKIApAQCAtNjk3LDIwICs2OTYsNiBAQAogCQlpZiAoU0NUUF9DSURfSU5JVCA9PSBjaC0+dHlwZSAmJiAodm9pZCAqKWNoICE9IHNrYi0+ZGF0YSkKIAkJCWdvdG8gZGlzY2FyZDsKIAotCQkvKiBSRkMgOC40LCA3KSBJZiB0aGUgcGFja2V0IGNvbnRhaW5zIGEgIlN0YWxlIGNvb2tpZSIgRVJST1IKLQkJICogb3IgYSBDT09LSUUgQUNLIHRoZSBTQ1RQIFBhY2tldCBzaG91bGQgYmUgc2lsZW50bHkKLQkJICogZGlzY2FyZGVkLgotCQkgKi8KLQkJaWYgKFNDVFBfQ0lEX0NPT0tJRV9BQ0sgPT0gY2gtPnR5cGUpCi0JCQlnb3RvIGRpc2NhcmQ7Ci0KLQkJaWYgKFNDVFBfQ0lEX0VSUk9SID09IGNoLT50eXBlKSB7Ci0JCQlzY3RwX3dhbGtfZXJyb3JzKGVyciwgY2gpIHsKLQkJCQlpZiAoU0NUUF9FUlJPUl9TVEFMRV9DT09LSUUgPT0gZXJyLT5jYXVzZSkKLQkJCQkJZ290byBkaXNjYXJkOwotCQkJfQotCQl9Ci0KIAkJY2ggPSAoc2N0cF9jaHVua2hkcl90ICopIGNoX2VuZDsKIAl9IHdoaWxlIChjaF9lbmQgPCBza2JfdGFpbF9wb2ludGVyKHNrYikpOwogCkBAIC0xMDE3LDcgKzEwMDIsNyBAQAogCS8qIFNraXAgb3ZlciB0aGUgQURESVAgaGVhZGVyIGFuZCBmaW5kIHRoZSBBZGRyZXNzIHBhcmFtZXRlciAqLwogCXBhcmFtID0gKHVuaW9uIHNjdHBfYWRkcl9wYXJhbSAqKShhc2NvbmYgKyAxKTsKIAotCWFmID0gc2N0cF9nZXRfYWZfc3BlY2lmaWMocGFyYW1fdHlwZTJhZihwYXJhbS0+djQucGFyYW1faGRyLnR5cGUpKTsKKwlhZiA9IHNjdHBfZ2V0X2FmX3NwZWNpZmljKHBhcmFtX3R5cGUyYWYocGFyYW0tPnAudHlwZSkpOwogCWlmICh1bmxpa2VseSghYWYpKQogCQlyZXR1cm4gTlVMTDsKIApkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvaXB2Ni5jIGIvbmV0L3NjdHAvaXB2Ni5jCmluZGV4IDg2NWNlN2IuLjBiYjBkN2MgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2lwdjYuYworKysgYi9uZXQvc2N0cC9pcHY2LmMKQEAgLTgwLDYgKzgwLDEzIEBACiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCitzdGF0aWMgaW5saW5lIGludCBzY3RwX3Y2X2FkZHJfbWF0Y2hfbGVuKHVuaW9uIHNjdHBfYWRkciAqczEsCisJCQkJCSB1bmlvbiBzY3RwX2FkZHIgKnMyKTsKK3N0YXRpYyB2b2lkIHNjdHBfdjZfdG9fYWRkcih1bmlvbiBzY3RwX2FkZHIgKmFkZHIsIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCisJCQkgICAgICBfX2JlMTYgcG9ydCk7CitzdGF0aWMgaW50IHNjdHBfdjZfY21wX2FkZHIoY29uc3QgdW5pb24gc2N0cF9hZGRyICphZGRyMSwKKwkJCSAgICBjb25zdCB1bmlvbiBzY3RwX2FkZHIgKmFkZHIyKTsKKwogLyogRXZlbnQgaGFuZGxlciBmb3IgaW5ldDYgYWRkcmVzcyBhZGRpdGlvbi9kZWxldGlvbiBldmVudHMuCiAgKiBUaGUgc2N0cF9sb2NhbF9hZGRyX2xpc3QgbmVlZHMgdG8gYmUgcHJvdG9jdGVkIGJ5IGEgc3BpbiBsb2NrIHNpbmNlCiAgKiBtdWx0aXBsZSBub3RpZmllcnMgKHNheSBJUHY0IGFuZCBJUHY2KSBtYXkgYmUgcnVubmluZyBhdCB0aGUgc2FtZQpAQCAtMTIzLDcgKzEzMCw3IEBACiAJCX0KIAkJc3Bpbl91bmxvY2tfYmgoJnNjdHBfbG9jYWxfYWRkcl9sb2NrKTsKIAkJaWYgKGZvdW5kKQotCQkJY2FsbF9yY3UoJmFkZHItPnJjdSwgc2N0cF9sb2NhbF9hZGRyX2ZyZWUpOworCQkJa2ZyZWVfcmN1KGFkZHIsIHJjdSk7CiAJCWJyZWFrOwogCX0KIApAQCAtMjQwLDM3ICsyNDcsMTA3IEBACiAvKiBSZXR1cm5zIHRoZSBkc3QgY2FjaGUgZW50cnkgZm9yIHRoZSBnaXZlbiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGlwCiAgKiBhZGRyZXNzZXMuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICpzY3RwX3Y2X2dldF9kc3Qoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCQkJCSB1bmlvbiBzY3RwX2FkZHIgKmRhZGRyLAotCQkJCQkgdW5pb24gc2N0cF9hZGRyICpzYWRkcikKK3N0YXRpYyB2b2lkIHNjdHBfdjZfZ2V0X2RzdChzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnQsIHVuaW9uIHNjdHBfYWRkciAqc2FkZHIsCisJCQkgICAgc3RydWN0IGZsb3dpICpmbCwgc3RydWN0IHNvY2sgKnNrKQogewotCXN0cnVjdCBkc3RfZW50cnkgKmRzdDsKLQlzdHJ1Y3QgZmxvd2k2IGZsNjsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyA9IHQtPmFzb2M7CisJc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gTlVMTDsKKwlzdHJ1Y3QgZmxvd2k2ICpmbDYgPSAmZmwtPnUuaXA2OworCXN0cnVjdCBzY3RwX2JpbmRfYWRkciAqYnA7CisJc3RydWN0IHNjdHBfc29ja2FkZHJfZW50cnkgKmxhZGRyOworCXVuaW9uIHNjdHBfYWRkciAqYmFkZHIgPSBOVUxMOworCXVuaW9uIHNjdHBfYWRkciAqZGFkZHIgPSAmdC0+aXBhZGRyOworCXVuaW9uIHNjdHBfYWRkciBkc3Rfc2FkZHI7CisJX191OCBtYXRjaGxlbiA9IDA7CisJX191OCBibWF0Y2hsZW47CisJc2N0cF9zY29wZV90IHNjb3BlOwogCi0JbWVtc2V0KCZmbDYsIDAsIHNpemVvZihmbDYpKTsKLQlpcHY2X2FkZHJfY29weSgmZmw2LmRhZGRyLCAmZGFkZHItPnY2LnNpbjZfYWRkcik7CisJbWVtc2V0KGZsNiwgMCwgc2l6ZW9mKHN0cnVjdCBmbG93aTYpKTsKKwlpcHY2X2FkZHJfY29weSgmZmw2LT5kYWRkciwgJmRhZGRyLT52Ni5zaW42X2FkZHIpOworCWZsNi0+Zmw2X2Rwb3J0ID0gZGFkZHItPnY2LnNpbjZfcG9ydDsKKwlmbDYtPmZsb3dpNl9wcm90byA9IElQUFJPVE9fU0NUUDsKIAlpZiAoaXB2Nl9hZGRyX3R5cGUoJmRhZGRyLT52Ni5zaW42X2FkZHIpICYgSVBWNl9BRERSX0xJTktMT0NBTCkKLQkJZmw2LmZsb3dpNl9vaWYgPSBkYWRkci0+djYuc2luNl9zY29wZV9pZDsKKwkJZmw2LT5mbG93aTZfb2lmID0gZGFkZHItPnY2LnNpbjZfc2NvcGVfaWQ7CiAKKwlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IERTVD0lcEk2ICIsIF9fZnVuY19fLCAmZmw2LT5kYWRkcik7CiAKLQlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IERTVD0lcEk2ICIsIF9fZnVuY19fLCAmZmw2LmRhZGRyKTsKKwlpZiAoYXNvYykKKwkJZmw2LT5mbDZfc3BvcnQgPSBodG9ucyhhc29jLT5iYXNlLmJpbmRfYWRkci5wb3J0KTsKIAogCWlmIChzYWRkcikgewotCQlpcHY2X2FkZHJfY29weSgmZmw2LnNhZGRyLCAmc2FkZHItPnY2LnNpbjZfYWRkcik7Ci0JCVNDVFBfREVCVUdfUFJJTlRLKCJTUkM9JXBJNiAtICIsICZmbDYuc2FkZHIpOworCQlpcHY2X2FkZHJfY29weSgmZmw2LT5zYWRkciwgJnNhZGRyLT52Ni5zaW42X2FkZHIpOworCQlmbDYtPmZsNl9zcG9ydCA9IHNhZGRyLT52Ni5zaW42X3BvcnQ7CisJCVNDVFBfREVCVUdfUFJJTlRLKCJTUkM9JXBJNiAtICIsICZmbDYtPnNhZGRyKTsKIAl9CiAKLQlkc3QgPSBpcDZfcm91dGVfb3V0cHV0KCZpbml0X25ldCwgTlVMTCwgJmZsNik7Ci0JaWYgKCFkc3QtPmVycm9yKSB7CisJZHN0ID0gaXA2X2RzdF9sb29rdXBfZmxvdyhzaywgZmw2LCBOVUxMLCBmYWxzZSk7CisJaWYgKCFhc29jIHx8IHNhZGRyKQorCQlnb3RvIG91dDsKKworCWJwID0gJmFzb2MtPmJhc2UuYmluZF9hZGRyOworCXNjb3BlID0gc2N0cF9zY29wZShkYWRkcik7CisJLyogaXA2X2RzdF9sb29rdXAgaGFzIGZpbGxlZCBpbiB0aGUgZmw2LT5zYWRkciBmb3IgdXMuICBDaGVjaworCSAqIHRvIHNlZSBpZiB3ZSBjYW4gdXNlIGl0LgorCSAqLworCWlmICghSVNfRVJSKGRzdCkpIHsKKwkJLyogV2FsayB0aHJvdWdoIHRoZSBiaW5kIGFkZHJlc3MgbGlzdCBhbmQgbG9vayBmb3IgYSBiaW5kCisJCSAqIGFkZHJlc3MgdGhhdCBtYXRjaGVzIHRoZSBzb3VyY2UgYWRkcmVzcyBvZiB0aGUgcmV0dXJuZWQgZHN0LgorCQkgKi8KKwkJc2N0cF92Nl90b19hZGRyKCZkc3Rfc2FkZHIsICZmbDYtPnNhZGRyLCBodG9ucyhicC0+cG9ydCkpOworCQlyY3VfcmVhZF9sb2NrKCk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGxhZGRyLCAmYnAtPmFkZHJlc3NfbGlzdCwgbGlzdCkgeworCQkJaWYgKCFsYWRkci0+dmFsaWQgfHwgKGxhZGRyLT5zdGF0ZSAhPSBTQ1RQX0FERFJfU1JDKSkKKwkJCQljb250aW51ZTsKKworCQkJLyogRG8gbm90IGNvbXBhcmUgYWdhaW5zdCB2NCBhZGRycyAqLworCQkJaWYgKChsYWRkci0+YS5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpICYmCisJCQkgICAgKHNjdHBfdjZfY21wX2FkZHIoJmRzdF9zYWRkciwgJmxhZGRyLT5hKSkpIHsKKwkJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJLyogTm9uZSBvZiB0aGUgYm91bmQgYWRkcmVzc2VzIG1hdGNoIHRoZSBzb3VyY2UgYWRkcmVzcyBvZiB0aGUKKwkJICogZHN0LiBTbyByZWxlYXNlIGl0LgorCQkgKi8KKwkJZHN0X3JlbGVhc2UoZHN0KTsKKwkJZHN0ID0gTlVMTDsKKwl9CisKKwkvKiBXYWxrIHRocm91Z2ggdGhlIGJpbmQgYWRkcmVzcyBsaXN0IGFuZCB0cnkgdG8gZ2V0IHRoZQorCSAqIGJlc3Qgc291cmNlIGFkZHJlc3MgZm9yIGEgZ2l2ZW4gZGVzdGluYXRpb24uCisJICovCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGxhZGRyLCAmYnAtPmFkZHJlc3NfbGlzdCwgbGlzdCkgeworCQlpZiAoIWxhZGRyLT52YWxpZCAmJiBsYWRkci0+c3RhdGUgIT0gU0NUUF9BRERSX1NSQykKKwkJCWNvbnRpbnVlOworCQlpZiAoKGxhZGRyLT5hLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgJiYKKwkJICAgIChzY29wZSA8PSBzY3RwX3Njb3BlKCZsYWRkci0+YSkpKSB7CisJCQlibWF0Y2hsZW4gPSBzY3RwX3Y2X2FkZHJfbWF0Y2hfbGVuKGRhZGRyLCAmbGFkZHItPmEpOworCQkJaWYgKCFiYWRkciB8fCAobWF0Y2hsZW4gPCBibWF0Y2hsZW4pKSB7CisJCQkJYmFkZHIgPSAmbGFkZHItPmE7CisJCQkJbWF0Y2hsZW4gPSBibWF0Y2hsZW47CisJCQl9CisJCX0KKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJaWYgKGJhZGRyKSB7CisJCWlwdjZfYWRkcl9jb3B5KCZmbDYtPnNhZGRyLCAmYmFkZHItPnY2LnNpbjZfYWRkcik7CisJCWZsNi0+Zmw2X3Nwb3J0ID0gYmFkZHItPnY2LnNpbjZfcG9ydDsKKwkJZHN0ID0gaXA2X2RzdF9sb29rdXBfZmxvdyhzaywgZmw2LCBOVUxMLCBmYWxzZSk7CisJfQorCitvdXQ6CisJaWYgKCFJU19FUlIoZHN0KSkgewogCQlzdHJ1Y3QgcnQ2X2luZm8gKnJ0OwogCQlydCA9IChzdHJ1Y3QgcnQ2X2luZm8gKilkc3Q7CisJCXQtPmRzdCA9IGRzdDsKIAkJU0NUUF9ERUJVR19QUklOVEsoInJ0Nl9kc3Q6JXBJNiBydDZfc3JjOiVwSTZcbiIsCi0JCQkmcnQtPnJ0NmlfZHN0LmFkZHIsICZydC0+cnQ2aV9zcmMuYWRkcik7Ci0JCXJldHVybiBkc3Q7CisJCQkmcnQtPnJ0NmlfZHN0LmFkZHIsICZmbDYtPnNhZGRyKTsKKwl9IGVsc2UgeworCQl0LT5kc3QgPSBOVUxMOworCQlTQ1RQX0RFQlVHX1BSSU5USygiTk8gUk9VVEVcbiIpOwogCX0KLQlTQ1RQX0RFQlVHX1BSSU5USygiTk8gUk9VVEVcbiIpOwotCWRzdF9yZWxlYXNlKGRzdCk7Ci0JcmV0dXJuIE5VTEw7CiB9CiAKIC8qIFJldHVybnMgdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBpbml0aWFsIGJpdHMgdGhhdCBtYXRjaCBpbiB0aGUgMiBpcHY2CkBAIC0yODYsNjQgKzM2MywxOCBAQAogICogYW5kIGFzb2MncyBiaW5kIGFkZHJlc3MgbGlzdC4KICAqLwogc3RhdGljIHZvaWQgc2N0cF92Nl9nZXRfc2FkZHIoc3RydWN0IHNjdHBfc29jayAqc2ssCi0JCQkgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLQkJCSAgICAgIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKLQkJCSAgICAgIHVuaW9uIHNjdHBfYWRkciAqZGFkZHIsCi0JCQkgICAgICB1bmlvbiBzY3RwX2FkZHIgKnNhZGRyKQorCQkJICAgICAgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0LAorCQkJICAgICAgc3RydWN0IGZsb3dpICpmbCkKIHsKLQlzdHJ1Y3Qgc2N0cF9iaW5kX2FkZHIgKmJwOwotCXN0cnVjdCBzY3RwX3NvY2thZGRyX2VudHJ5ICpsYWRkcjsKLQlzY3RwX3Njb3BlX3Qgc2NvcGU7Ci0JdW5pb24gc2N0cF9hZGRyICpiYWRkciA9IE5VTEw7Ci0JX191OCBtYXRjaGxlbiA9IDA7Ci0JX191OCBibWF0Y2hsZW47CisJc3RydWN0IGZsb3dpNiAqZmw2ID0gJmZsLT51LmlwNjsKKwl1bmlvbiBzY3RwX2FkZHIgKnNhZGRyID0gJnQtPnNhZGRyOwogCi0JU0NUUF9ERUJVR19QUklOVEsoIiVzOiBhc29jOiVwIGRzdDolcCBkYWRkcjolcEk2ICIsCi0JCQkgIF9fZnVuY19fLCBhc29jLCBkc3QsICZkYWRkci0+djYuc2luNl9hZGRyKTsKKwlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IGFzb2M6JXAgZHN0OiVwXG4iLCBfX2Z1bmNfXywgdC0+YXNvYywgdC0+ZHN0KTsKIAotCWlmICghYXNvYykgewotCQlpcHY2X2Rldl9nZXRfc2FkZHIoc29ja19uZXQoc2N0cF9vcHQyc2soc2spKSwKLQkJCQkgICBkc3QgPyBpcDZfZHN0X2lkZXYoZHN0KS0+ZGV2IDogTlVMTCwKLQkJCQkgICAmZGFkZHItPnY2LnNpbjZfYWRkciwKLQkJCQkgICBpbmV0Nl9zaygmc2stPmluZXQuc2spLT5zcmNwcmVmcywKLQkJCQkgICAmc2FkZHItPnY2LnNpbjZfYWRkcik7Ci0JCVNDVFBfREVCVUdfUFJJTlRLKCJzYWRkciBmcm9tIGlwdjZfZ2V0X3NhZGRyOiAlcEk2XG4iLAotCQkJCSAgJnNhZGRyLT52Ni5zaW42X2FkZHIpOwotCQlyZXR1cm47CisJaWYgKHQtPmRzdCkgeworCQlzYWRkci0+djYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKwkJaXB2Nl9hZGRyX2NvcHkoJnNhZGRyLT52Ni5zaW42X2FkZHIsICZmbDYtPnNhZGRyKTsKIAl9Ci0KLQlzY29wZSA9IHNjdHBfc2NvcGUoZGFkZHIpOwotCi0JYnAgPSAmYXNvYy0+YmFzZS5iaW5kX2FkZHI7Ci0KLQkvKiBHbyB0aHJvdWdoIHRoZSBiaW5kIGFkZHJlc3MgbGlzdCBhbmQgZmluZCB0aGUgYmVzdCBzb3VyY2UgYWRkcmVzcwotCSAqIHRoYXQgbWF0Y2hlcyB0aGUgc2NvcGUgb2YgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MuCi0JICovCi0JcmN1X3JlYWRfbG9jaygpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGxhZGRyLCAmYnAtPmFkZHJlc3NfbGlzdCwgbGlzdCkgewotCQlpZiAoIWxhZGRyLT52YWxpZCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoKGxhZGRyLT5zdGF0ZSA9PSBTQ1RQX0FERFJfU1JDKSAmJgotCQkgICAgKGxhZGRyLT5hLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgJiYKLQkJICAgIChzY29wZSA8PSBzY3RwX3Njb3BlKCZsYWRkci0+YSkpKSB7Ci0JCQlibWF0Y2hsZW4gPSBzY3RwX3Y2X2FkZHJfbWF0Y2hfbGVuKGRhZGRyLCAmbGFkZHItPmEpOwotCQkJaWYgKCFiYWRkciB8fCAobWF0Y2hsZW4gPCBibWF0Y2hsZW4pKSB7Ci0JCQkJYmFkZHIgPSAmbGFkZHItPmE7Ci0JCQkJbWF0Y2hsZW4gPSBibWF0Y2hsZW47Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAoYmFkZHIpIHsKLQkJbWVtY3B5KHNhZGRyLCBiYWRkciwgc2l6ZW9mKHVuaW9uIHNjdHBfYWRkcikpOwotCQlTQ1RQX0RFQlVHX1BSSU5USygic2FkZHI6ICVwSTZcbiIsICZzYWRkci0+djYuc2luNl9hZGRyKTsKLQl9IGVsc2UgewotCQlwcl9lcnIoIiVzOiBhc29jOiVwIENvdWxkIG5vdCBmaW5kIGEgdmFsaWQgc291cmNlICIKLQkJICAgICAgICJhZGRyZXNzIGZvciB0aGUgZGVzdDolcEk2XG4iLAotCQkgICAgICAgX19mdW5jX18sIGFzb2MsICZkYWRkci0+djYuc2luNl9hZGRyKTsKLQl9Ci0KLQlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogLyogTWFrZSBhIGNvcHkgb2YgYWxsIHBvdGVudGlhbCBsb2NhbCBhZGRyZXNzZXMuICovCkBAIC00NjUsMTQgKzQ5NiwxMyBAQAogCXJldHVybiBsZW5ndGg7CiB9CiAKLS8qIEluaXRpYWxpemUgYSBzY3RwX2FkZHIgZnJvbSBhIGRzdF9lbnRyeS4gKi8KLXN0YXRpYyB2b2lkIHNjdHBfdjZfZHN0X3NhZGRyKHVuaW9uIHNjdHBfYWRkciAqYWRkciwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAorLyogSW5pdGlhbGl6ZSBhIHNjdHBfYWRkciBmcm9tIHN0cnVjdCBpbjZfYWRkci4gKi8KK3N0YXRpYyB2b2lkIHNjdHBfdjZfdG9fYWRkcih1bmlvbiBzY3RwX2FkZHIgKmFkZHIsIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCiAJCQkgICAgICBfX2JlMTYgcG9ydCkKIHsKLQlzdHJ1Y3QgcnQ2X2luZm8gKnJ0ID0gKHN0cnVjdCBydDZfaW5mbyAqKWRzdDsKIAlhZGRyLT5zYS5zYV9mYW1pbHkgPSBBRl9JTkVUNjsKIAlhZGRyLT52Ni5zaW42X3BvcnQgPSBwb3J0OwotCWlwdjZfYWRkcl9jb3B5KCZhZGRyLT52Ni5zaW42X2FkZHIsICZydC0+cnQ2aV9zcmMuYWRkcik7CisJaXB2Nl9hZGRyX2NvcHkoJmFkZHItPnY2LnNpbjZfYWRkciwgc2FkZHIpOwogfQogCiAvKiBDb21wYXJlIGFkZHJlc3NlcyBleGFjdGx5LgpAQCAtNTMxLDcgKzU2MSw3IEBACiBzdGF0aWMgaW50IHNjdHBfdjZfYXZhaWxhYmxlKHVuaW9uIHNjdHBfYWRkciAqYWRkciwgc3RydWN0IHNjdHBfc29jayAqc3ApCiB7CiAJaW50IHR5cGU7Ci0Jc3RydWN0IGluNl9hZGRyICppbjYgPSAoc3RydWN0IGluNl9hZGRyICopJmFkZHItPnY2LnNpbjZfYWRkcjsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmluNiA9IChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKikmYWRkci0+djYuc2luNl9hZGRyOwogCiAJdHlwZSA9IGlwdjZfYWRkcl90eXBlKGluNik7CiAJaWYgKElQVjZfQUREUl9BTlkgPT0gdHlwZSkKQEAgLTk1OSw3ICs5ODksNiBAQAogCS50b19za19kYWRkcgkgICA9IHNjdHBfdjZfdG9fc2tfZGFkZHIsCiAJLmZyb21fYWRkcl9wYXJhbSAgID0gc2N0cF92Nl9mcm9tX2FkZHJfcGFyYW0sCiAJLnRvX2FkZHJfcGFyYW0JICAgPSBzY3RwX3Y2X3RvX2FkZHJfcGFyYW0sCi0JLmRzdF9zYWRkcgkgICA9IHNjdHBfdjZfZHN0X3NhZGRyLAogCS5jbXBfYWRkcgkgICA9IHNjdHBfdjZfY21wX2FkZHIsCiAJLnNjb3BlCQkgICA9IHNjdHBfdjZfc2NvcGUsCiAJLmFkZHJfdmFsaWQJICAgPSBzY3RwX3Y2X2FkZHJfdmFsaWQsCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9vdXRxdWV1ZS5jIGIvbmV0L3NjdHAvb3V0cXVldWUuYwppbmRleCBiZjkyYTViLi4xYzg4Yzg5IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9vdXRxdWV1ZS5jCisrKyBiL25ldC9zY3RwL291dHF1ZXVlLmMKQEAgLTEzMSw3ICsxMzEsOCBAQAogc3RhdGljIGlubGluZSBpbnQgc2N0cF9jYWNjX3NraXBfM18xX2Yoc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFuc3BvcnQsCiAJCQkJICAgICAgIGludCBjb3VudF9vZl9uZXdhY2tzKQogewotCWlmIChjb3VudF9vZl9uZXdhY2tzIDwgMiAmJiAhdHJhbnNwb3J0LT5jYWNjLmNhY2Nfc2F3X25ld2FjaykKKwlpZiAoY291bnRfb2ZfbmV3YWNrcyA8IDIgJiYKKwkJCSh0cmFuc3BvcnQgJiYgIXRyYW5zcG9ydC0+Y2FjYy5jYWNjX3Nhd19uZXdhY2spKQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTMxOSw3ICszMjAsNiBAQAogCQkgKiBjaHVuay4KIAkJICovCiAJCXN3aXRjaCAocS0+YXNvYy0+c3RhdGUpIHsKLQkJY2FzZSBTQ1RQX1NUQVRFX0VNUFRZOgogCQljYXNlIFNDVFBfU1RBVEVfQ0xPU0VEOgogCQljYXNlIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORzoKIAkJY2FzZSBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQ6CkBAIC01NzcsNiArNTc3LDEzIEBACiAJICogdHJ5IHRvIHNlbmQgYXMgbXVjaCBhcyBwb3NzaWJsZS4KIAkgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2h1bmssIGNodW5rMSwgbHF1ZXVlLCB0cmFuc21pdHRlZF9saXN0KSB7CisJCS8qIElmIHRoZSBjaHVuayBpcyBhYmFuZG9uZWQsIG1vdmUgaXQgdG8gYWJhbmRvbmVkIGxpc3QuICovCisJCWlmIChzY3RwX2NodW5rX2FiYW5kb25lZChjaHVuaykpIHsKKwkJCWxpc3RfZGVsX2luaXQoJmNodW5rLT50cmFuc21pdHRlZF9saXN0KTsKKwkJCXNjdHBfaW5zZXJ0X2xpc3QoJnEtPmFiYW5kb25lZCwKKwkJCQkJICZjaHVuay0+dHJhbnNtaXR0ZWRfbGlzdCk7CisJCQljb250aW51ZTsKKwkJfQogCiAJCS8qIE1ha2Ugc3VyZSB0aGF0IEdhcCBBY2tlZCBUU05zIGFyZSBub3QgcmV0cmFuc21pdHRlZC4gIEEKIAkJICogc2ltcGxlIGFwcHJvYWNoIGlzIGp1c3QgdG8gbW92ZSBzdWNoIFRTTnMgb3V0IG9mIHRoZQpAQCAtNjE4LDkgKzYyNSwxMiBAQAogCiAJCQkvKiBJZiB3ZSBhcmUgcmV0cmFuc21pdHRpbmcsIHdlIHNob3VsZCBvbmx5CiAJCQkgKiBzZW5kIGEgc2luZ2xlIHBhY2tldC4KKwkJCSAqIE90aGVyd2lzZSwgdHJ5IGFwcGVuZGluZyB0aGlzIGNodW5rIGFnYWluLgogCQkJICovCiAJCQlpZiAocnR4X3RpbWVvdXQgfHwgZmFzdF9ydHgpCiAJCQkJZG9uZSA9IDE7CisJCQllbHNlCisJCQkJZ290byByZWRvOwogCiAJCQkvKiBCdW5kbGUgbmV4dCBjaHVuayBpbiB0aGUgbmV4dCByb3VuZC4gICovCiAJCQlicmVhazsKQEAgLTE2ODMsOCArMTY5Myw5IEBACiAJCQkvKiBTRlItQ0FDQyBtYXkgcmVxdWlyZSB1cyB0byBza2lwIG1hcmtpbmcKIAkJCSAqIHRoaXMgY2h1bmsgYXMgbWlzc2luZy4KIAkJCSAqLwotCQkJaWYgKCF0cmFuc3BvcnQgfHwgIXNjdHBfY2FjY19za2lwKHByaW1hcnksIHRyYW5zcG9ydCwKLQkJCQkJICAgIGNvdW50X29mX25ld2Fja3MsIHRzbikpIHsKKwkJCWlmICghdHJhbnNwb3J0IHx8ICFzY3RwX2NhY2Nfc2tpcChwcmltYXJ5LAorCQkJCQkJY2h1bmstPnRyYW5zcG9ydCwKKwkJCQkJCWNvdW50X29mX25ld2Fja3MsIHRzbikpIHsKIAkJCQljaHVuay0+dHNuX21pc3NpbmdfcmVwb3J0Kys7CiAKIAkJCQlTQ1RQX0RFQlVHX1BSSU5USygKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3Byb3RvY29sLmMgYi9uZXQvc2N0cC9wcm90b2NvbC5jCmluZGV4IGQ1YmY5MWQuLjY3MzgwYTIgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3Byb3RvY29sLmMKKysrIGIvbmV0L3NjdHAvcHJvdG9jb2wuYwpAQCAtMjMwLDEzICsyMzAsNiBAQAogCX0KIH0KIAotdm9pZCBzY3RwX2xvY2FsX2FkZHJfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCi17Ci0Jc3RydWN0IHNjdHBfc29ja2FkZHJfZW50cnkgKmUgPSBjb250YWluZXJfb2YoaGVhZCwKLQkJCQlzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSwgcmN1KTsKLQlrZnJlZShlKTsKLX0KLQogLyogQ29weSB0aGUgbG9jYWwgYWRkcmVzc2VzIHdoaWNoIGFyZSB2YWxpZCBmb3IgJ3Njb3BlJyBpbnRvICdicCcuICAqLwogaW50IHNjdHBfY29weV9sb2NhbF9hZGRyX2xpc3Qoc3RydWN0IHNjdHBfYmluZF9hZGRyICpicCwgc2N0cF9zY29wZV90IHNjb3BlLAogCQkJICAgICAgZ2ZwX3QgZ2ZwLCBpbnQgY29weV9mbGFncykKQEAgLTMzOSwxMyArMzMyLDEyIEBACiB9CiAKIC8qIEluaXRpYWxpemUgYSBzY3RwX2FkZHIgZnJvbSBhIGRzdF9lbnRyeS4gKi8KLXN0YXRpYyB2b2lkIHNjdHBfdjRfZHN0X3NhZGRyKHVuaW9uIHNjdHBfYWRkciAqc2FkZHIsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKK3N0YXRpYyB2b2lkIHNjdHBfdjRfZHN0X3NhZGRyKHVuaW9uIHNjdHBfYWRkciAqc2FkZHIsIHN0cnVjdCBmbG93aTQgKmZsNCwKIAkJCSAgICAgIF9fYmUxNiBwb3J0KQogewotCXN0cnVjdCBydGFibGUgKnJ0ID0gKHN0cnVjdCBydGFibGUgKilkc3Q7CiAJc2FkZHItPnY0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOwogCXNhZGRyLT52NC5zaW5fcG9ydCA9IHBvcnQ7Ci0Jc2FkZHItPnY0LnNpbl9hZGRyLnNfYWRkciA9IHJ0LT5ydF9zcmM7CisJc2FkZHItPnY0LnNpbl9hZGRyLnNfYWRkciA9IGZsNC0+c2FkZHI7CiB9CiAKIC8qIENvbXBhcmUgdHdvIGFkZHJlc3NlcyBleGFjdGx5LiAqLwpAQCAtNDYzLDM1ICs0NTUsMzYgQEAKICAqIGFkZHJlc3Nlcy4gSWYgYW4gYXNzb2NpYXRpb24gaXMgcGFzc2VkLCB0cnlzIHRvIGdldCBhIGRzdCBlbnRyeSB3aXRoIGEKICAqIHNvdXJjZSBhZGRyZXNzIHRoYXQgbWF0Y2hlcyBhbiBhZGRyZXNzIGluIHRoZSBiaW5kIGFkZHJlc3MgbGlzdC4KICAqLwotc3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnNjdHBfdjRfZ2V0X2RzdChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLQkJCQkJIHVuaW9uIHNjdHBfYWRkciAqZGFkZHIsCi0JCQkJCSB1bmlvbiBzY3RwX2FkZHIgKnNhZGRyKQorc3RhdGljIHZvaWQgc2N0cF92NF9nZXRfZHN0KHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdCwgdW5pb24gc2N0cF9hZGRyICpzYWRkciwKKwkJCQlzdHJ1Y3QgZmxvd2kgKmZsLCBzdHJ1Y3Qgc29jayAqc2spCiB7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MgPSB0LT5hc29jOwogCXN0cnVjdCBydGFibGUgKnJ0OwotCXN0cnVjdCBmbG93aTQgZmw0OworCXN0cnVjdCBmbG93aTQgKmZsNCA9ICZmbC0+dS5pcDQ7CiAJc3RydWN0IHNjdHBfYmluZF9hZGRyICpicDsKIAlzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSAqbGFkZHI7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gTlVMTDsKKwl1bmlvbiBzY3RwX2FkZHIgKmRhZGRyID0gJnQtPmlwYWRkcjsKIAl1bmlvbiBzY3RwX2FkZHIgZHN0X3NhZGRyOwogCi0JbWVtc2V0KCZmbDQsIDB4MCwgc2l6ZW9mKHN0cnVjdCBmbG93aTQpKTsKLQlmbDQuZGFkZHIgID0gZGFkZHItPnY0LnNpbl9hZGRyLnNfYWRkcjsKLQlmbDQuZmw0X2Rwb3J0ID0gZGFkZHItPnY0LnNpbl9wb3J0OwotCWZsNC5mbG93aTRfcHJvdG8gPSBJUFBST1RPX1NDVFA7CisJbWVtc2V0KGZsNCwgMHgwLCBzaXplb2Yoc3RydWN0IGZsb3dpNCkpOworCWZsNC0+ZGFkZHIgID0gZGFkZHItPnY0LnNpbl9hZGRyLnNfYWRkcjsKKwlmbDQtPmZsNF9kcG9ydCA9IGRhZGRyLT52NC5zaW5fcG9ydDsKKwlmbDQtPmZsb3dpNF9wcm90byA9IElQUFJPVE9fU0NUUDsKIAlpZiAoYXNvYykgewotCQlmbDQuZmxvd2k0X3RvcyA9IFJUX0NPTk5fRkxBR1MoYXNvYy0+YmFzZS5zayk7Ci0JCWZsNC5mbG93aTRfb2lmID0gYXNvYy0+YmFzZS5zay0+c2tfYm91bmRfZGV2X2lmOwotCQlmbDQuZmw0X3Nwb3J0ID0gaHRvbnMoYXNvYy0+YmFzZS5iaW5kX2FkZHIucG9ydCk7CisJCWZsNC0+Zmxvd2k0X3RvcyA9IFJUX0NPTk5fRkxBR1MoYXNvYy0+YmFzZS5zayk7CisJCWZsNC0+Zmxvd2k0X29pZiA9IGFzb2MtPmJhc2Uuc2stPnNrX2JvdW5kX2Rldl9pZjsKKwkJZmw0LT5mbDRfc3BvcnQgPSBodG9ucyhhc29jLT5iYXNlLmJpbmRfYWRkci5wb3J0KTsKIAl9CiAJaWYgKHNhZGRyKSB7Ci0JCWZsNC5zYWRkciA9IHNhZGRyLT52NC5zaW5fYWRkci5zX2FkZHI7Ci0JCWZsNC5mbDRfc3BvcnQgPSBzYWRkci0+djQuc2luX3BvcnQ7CisJCWZsNC0+c2FkZHIgPSBzYWRkci0+djQuc2luX2FkZHIuc19hZGRyOworCQlmbDQtPmZsNF9zcG9ydCA9IHNhZGRyLT52NC5zaW5fcG9ydDsKIAl9CiAKIAlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IERTVDolcEk0LCBTUkM6JXBJNCAtICIsCi0JCQkgIF9fZnVuY19fLCAmZmw0LmRhZGRyLCAmZmw0LnNhZGRyKTsKKwkJCSAgX19mdW5jX18sICZmbDQtPmRhZGRyLCAmZmw0LT5zYWRkcik7CiAKLQlydCA9IGlwX3JvdXRlX291dHB1dF9rZXkoJmluaXRfbmV0LCAmZmw0KTsKKwlydCA9IGlwX3JvdXRlX291dHB1dF9rZXkoJmluaXRfbmV0LCBmbDQpOwogCWlmICghSVNfRVJSKHJ0KSkKIAkJZHN0ID0gJnJ0LT5kc3Q7CiAKQEAgLTUwNyw3ICs1MDAsNyBAQAogCQkvKiBXYWxrIHRocm91Z2ggdGhlIGJpbmQgYWRkcmVzcyBsaXN0IGFuZCBsb29rIGZvciBhIGJpbmQKIAkJICogYWRkcmVzcyB0aGF0IG1hdGNoZXMgdGhlIHNvdXJjZSBhZGRyZXNzIG9mIHRoZSByZXR1cm5lZCBkc3QuCiAJCSAqLwotCQlzY3RwX3Y0X2RzdF9zYWRkcigmZHN0X3NhZGRyLCBkc3QsIGh0b25zKGJwLT5wb3J0KSk7CisJCXNjdHBfdjRfZHN0X3NhZGRyKCZkc3Rfc2FkZHIsIGZsNCwgaHRvbnMoYnAtPnBvcnQpKTsKIAkJcmN1X3JlYWRfbG9jaygpOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShsYWRkciwgJmJwLT5hZGRyZXNzX2xpc3QsIGxpc3QpIHsKIAkJCWlmICghbGFkZHItPnZhbGlkIHx8IChsYWRkci0+c3RhdGUgIT0gU0NUUF9BRERSX1NSQykpCkBAIC01MzMsOSArNTI2LDkgQEAKIAkJCWNvbnRpbnVlOwogCQlpZiAoKGxhZGRyLT5zdGF0ZSA9PSBTQ1RQX0FERFJfU1JDKSAmJgogCQkgICAgKEFGX0lORVQgPT0gbGFkZHItPmEuc2Euc2FfZmFtaWx5KSkgewotCQkJZmw0LnNhZGRyID0gbGFkZHItPmEudjQuc2luX2FkZHIuc19hZGRyOwotCQkJZmw0LmZsNF9zcG9ydCA9IGxhZGRyLT5hLnY0LnNpbl9wb3J0OwotCQkJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KCZpbml0X25ldCwgJmZsNCk7CisJCQlmbDQtPnNhZGRyID0gbGFkZHItPmEudjQuc2luX2FkZHIuc19hZGRyOworCQkJZmw0LT5mbDRfc3BvcnQgPSBsYWRkci0+YS52NC5zaW5fcG9ydDsKKwkJCXJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleSgmaW5pdF9uZXQsIGZsNCk7CiAJCQlpZiAoIUlTX0VSUihydCkpIHsKIAkJCQlkc3QgPSAmcnQtPmRzdDsKIAkJCQlnb3RvIG91dF91bmxvY2s7CkBAIC01NDYsMzMgKzUzOSwyNyBAQAogb3V0X3VubG9jazoKIAlyY3VfcmVhZF91bmxvY2soKTsKIG91dDoKKwl0LT5kc3QgPSBkc3Q7CiAJaWYgKGRzdCkKIAkJU0NUUF9ERUJVR19QUklOVEsoInJ0X2RzdDolcEk0LCBydF9zcmM6JXBJNFxuIiwKLQkJCQkgICZydC0+cnRfZHN0LCAmcnQtPnJ0X3NyYyk7CisJCQkJICAmZmw0LT5kYWRkciwgJmZsNC0+c2FkZHIpOwogCWVsc2UKIAkJU0NUUF9ERUJVR19QUklOVEsoIk5PIFJPVVRFXG4iKTsKLQotCXJldHVybiBkc3Q7CiB9CiAKIC8qIEZvciB2NCwgdGhlIHNvdXJjZSBhZGRyZXNzIGlzIGNhY2hlZCBpbiB0aGUgcm91dGUgZW50cnkoZHN0KS4gU28gbm8gbmVlZAogICogdG8gY2FjaGUgaXQgc2VwYXJhdGVseSBhbmQgaGVuY2UgdGhpcyBpcyBhbiBlbXB0eSByb3V0aW5lLgogICovCiBzdGF0aWMgdm9pZCBzY3RwX3Y0X2dldF9zYWRkcihzdHJ1Y3Qgc2N0cF9zb2NrICpzaywKLQkJCSAgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotCQkJICAgICAgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAotCQkJICAgICAgdW5pb24gc2N0cF9hZGRyICpkYWRkciwKLQkJCSAgICAgIHVuaW9uIHNjdHBfYWRkciAqc2FkZHIpCisJCQkgICAgICBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnQsCisJCQkgICAgICBzdHJ1Y3QgZmxvd2kgKmZsKQogewotCXN0cnVjdCBydGFibGUgKnJ0ID0gKHN0cnVjdCBydGFibGUgKilkc3Q7Ci0KLQlpZiAoIWFzb2MpCi0JCXJldHVybjsKKwl1bmlvbiBzY3RwX2FkZHIgKnNhZGRyID0gJnQtPnNhZGRyOworCXN0cnVjdCBydGFibGUgKnJ0ID0gKHN0cnVjdCBydGFibGUgKil0LT5kc3Q7CiAKIAlpZiAocnQpIHsKIAkJc2FkZHItPnY0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCQlzYWRkci0+djQuc2luX3BvcnQgPSBodG9ucyhhc29jLT5iYXNlLmJpbmRfYWRkci5wb3J0KTsKLQkJc2FkZHItPnY0LnNpbl9hZGRyLnNfYWRkciA9IHJ0LT5ydF9zcmM7CisJCXNhZGRyLT52NC5zaW5fYWRkci5zX2FkZHIgPSBmbC0+dS5pcDQuc2FkZHI7CiAJfQogfQogCkBAIC02ODEsNyArNjY4LDcgQEAKIAkJfQogCQlzcGluX3VubG9ja19iaCgmc2N0cF9sb2NhbF9hZGRyX2xvY2spOwogCQlpZiAoZm91bmQpCi0JCQljYWxsX3JjdSgmYWRkci0+cmN1LCBzY3RwX2xvY2FsX2FkZHJfZnJlZSk7CisJCQlrZnJlZV9yY3UoYWRkciwgcmN1KTsKIAkJYnJlYWs7CiAJfQogCkBAIC04NTQsMTQgKzg0MSwxNCBAQAogCiAJU0NUUF9ERUJVR19QUklOVEsoIiVzOiBza2I6JXAsIGxlbjolZCwgc3JjOiVwSTQsIGRzdDolcEk0XG4iLAogCQkJICBfX2Z1bmNfXywgc2tiLCBza2ItPmxlbiwKLQkJCSAgJnNrYl9ydGFibGUoc2tiKS0+cnRfc3JjLAotCQkJICAmc2tiX3J0YWJsZShza2IpLT5ydF9kc3QpOworCQkJICAmdHJhbnNwb3J0LT5mbC51LmlwNC5zYWRkciwKKwkJCSAgJnRyYW5zcG9ydC0+ZmwudS5pcDQuZGFkZHIpOwogCiAJaW5ldC0+cG10dWRpc2MgPSB0cmFuc3BvcnQtPnBhcmFtX2ZsYWdzICYgU1BQX1BNVFVEX0VOQUJMRSA/CiAJCQkgSVBfUE1UVURJU0NfRE8gOiBJUF9QTVRVRElTQ19ET05UOwogCiAJU0NUUF9JTkNfU1RBVFMoU0NUUF9NSUJfT1VUU0NUUFBBQ0tTKTsKLQlyZXR1cm4gaXBfcXVldWVfeG1pdChza2IpOworCXJldHVybiBpcF9xdWV1ZV94bWl0KHNrYiwgJnRyYW5zcG9ydC0+ZmwpOwogfQogCiBzdGF0aWMgc3RydWN0IHNjdHBfYWYgc2N0cF9hZl9pbmV0OwpAQCAtOTUwLDcgKzkzNyw2IEBACiAJLnRvX3NrX2RhZGRyCSAgID0gc2N0cF92NF90b19za19kYWRkciwKIAkuZnJvbV9hZGRyX3BhcmFtICAgPSBzY3RwX3Y0X2Zyb21fYWRkcl9wYXJhbSwKIAkudG9fYWRkcl9wYXJhbQkgICA9IHNjdHBfdjRfdG9fYWRkcl9wYXJhbSwKLQkuZHN0X3NhZGRyCSAgID0gc2N0cF92NF9kc3Rfc2FkZHIsCiAJLmNtcF9hZGRyCSAgID0gc2N0cF92NF9jbXBfYWRkciwKIAkuYWRkcl92YWxpZAkgICA9IHNjdHBfdjRfYWRkcl92YWxpZCwKIAkuaW5hZGRyX2FueQkgICA9IHNjdHBfdjRfaW5hZGRyX2FueSwKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYyBiL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYwppbmRleCBiMzQzNGNjLi41OGViMjdmIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKKysrIGIvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCkBAIC0xMDc1LDIwICsxMDc1LDI4IEBACiAKIC8qIE1ha2UgYSBIRUFSVEJFQVQgY2h1bmsuICAqLwogc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfbWFrZV9oZWFydGJlYXQoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCQkJICBjb25zdCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zcG9ydCwKLQkJCQkgIGNvbnN0IHZvaWQgKnBheWxvYWQsIGNvbnN0IHNpemVfdCBwYXlsZW4pCisJCQkJICBjb25zdCBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zcG9ydCkKIHsKLQlzdHJ1Y3Qgc2N0cF9jaHVuayAqcmV0dmFsID0gc2N0cF9tYWtlX2NodW5rKGFzb2MsIFNDVFBfQ0lEX0hFQVJUQkVBVCwKLQkJCQkJCSAgICAwLCBwYXlsZW4pOworCXN0cnVjdCBzY3RwX2NodW5rICpyZXR2YWw7CisJc2N0cF9zZW5kZXJfaGJfaW5mb190IGhiaW5mbzsKKworCXJldHZhbCA9IHNjdHBfbWFrZV9jaHVuayhhc29jLCBTQ1RQX0NJRF9IRUFSVEJFQVQsIDAsIHNpemVvZihoYmluZm8pKTsKIAogCWlmICghcmV0dmFsKQogCQlnb3RvIG5vZGF0YTsKIAorCWhiaW5mby5wYXJhbV9oZHIudHlwZSA9IFNDVFBfUEFSQU1fSEVBUlRCRUFUX0lORk87CisJaGJpbmZvLnBhcmFtX2hkci5sZW5ndGggPSBodG9ucyhzaXplb2Yoc2N0cF9zZW5kZXJfaGJfaW5mb190KSk7CisJaGJpbmZvLmRhZGRyID0gdHJhbnNwb3J0LT5pcGFkZHI7CisJaGJpbmZvLnNlbnRfYXQgPSBqaWZmaWVzOworCWhiaW5mby5oYl9ub25jZSA9IHRyYW5zcG9ydC0+aGJfbm9uY2U7CisKIAkvKiBDYXN0IGF3YXkgdGhlICdjb25zdCcsIGFzIHRoaXMgaXMganVzdCB0ZWxsaW5nIHRoZSBjaHVuawogCSAqIHdoYXQgdHJhbnNwb3J0IGl0IGJlbG9uZ3MgdG8uCiAJICovCiAJcmV0dmFsLT50cmFuc3BvcnQgPSAoc3RydWN0IHNjdHBfdHJhbnNwb3J0ICopIHRyYW5zcG9ydDsKLQlyZXR2YWwtPnN1YmguaGJzX2hkciA9IHNjdHBfYWRkdG9fY2h1bmsocmV0dmFsLCBwYXlsZW4sIHBheWxvYWQpOworCXJldHZhbC0+c3ViaC5oYnNfaGRyID0gc2N0cF9hZGR0b19jaHVuayhyZXR2YWwsIHNpemVvZihoYmluZm8pLAorCQkJCQkJJmhiaW5mbyk7CiAKIG5vZGF0YToKIAlyZXR1cm4gcmV0dmFsOwpAQCAtMjI0MiwxNCArMjI1MCwxNyBAQAogICogUmV0dXJucyAwIG9uIGZhaWx1cmUsIGVsc2Ugc3VjY2Vzcy4KICAqIEZJWE1FOiAgVGhpcyBpcyBhbiBhc3NvY2lhdGlvbiBtZXRob2QuCiAgKi8KLWludCBzY3RwX3Byb2Nlc3NfaW5pdChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgc2N0cF9jaWRfdCBjaWQsCitpbnQgc2N0cF9wcm9jZXNzX2luaXQoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIHN0cnVjdCBzY3RwX2NodW5rICpjaHVuaywKIAkJICAgICAgY29uc3QgdW5pb24gc2N0cF9hZGRyICpwZWVyX2FkZHIsCiAJCSAgICAgIHNjdHBfaW5pdF9jaHVua190ICpwZWVyX2luaXQsIGdmcF90IGdmcCkKIHsKIAl1bmlvbiBzY3RwX3BhcmFtcyBwYXJhbTsKIAlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zcG9ydDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICp0ZW1wOworCXN0cnVjdCBzY3RwX2FmICphZjsKKwl1bmlvbiBzY3RwX2FkZHIgYWRkcjsKIAljaGFyICpjb29raWU7CisJaW50IHNyY19tYXRjaCA9IDA7CiAKIAkvKiBXZSBtdXN0IGluY2x1ZGUgdGhlIGFkZHJlc3MgdGhhdCB0aGUgSU5JVCBwYWNrZXQgY2FtZSBmcm9tLgogCSAqIFRoaXMgaXMgdGhlIG9ubHkgYWRkcmVzcyB0aGF0IG1hdHRlcnMgZm9yIGFuIElOSVQgcGFja2V0LgpAQCAtMjI2MSwxOCArMjI3MiwzMSBAQAogCSAqIGFkZGVkIGFzIHRoZSBwcmltYXJ5IHRyYW5zcG9ydC4gIFRoZSBzb3VyY2UgYWRkcmVzcyBzZWVtcyB0bwogCSAqIGJlIGEgYSBiZXR0ZXIgY2hvaWNlIHRoYW4gYW55IG9mIHRoZSBlbWJlZGRlZCBhZGRyZXNzZXMuCiAJICovCi0JaWYgKHBlZXJfYWRkcikgewotCQlpZighc2N0cF9hc3NvY19hZGRfcGVlcihhc29jLCBwZWVyX2FkZHIsIGdmcCwgU0NUUF9BQ1RJVkUpKQotCQkJZ290byBub21lbTsKLQl9CisJaWYoIXNjdHBfYXNzb2NfYWRkX3BlZXIoYXNvYywgcGVlcl9hZGRyLCBnZnAsIFNDVFBfQUNUSVZFKSkKKwkJZ290byBub21lbTsKKworCWlmIChzY3RwX2NtcF9hZGRyX2V4YWN0KHNjdHBfc291cmNlKGNodW5rKSwgcGVlcl9hZGRyKSkKKwkJc3JjX21hdGNoID0gMTsKIAogCS8qIFByb2Nlc3MgdGhlIGluaXRpYWxpemF0aW9uIHBhcmFtZXRlcnMuICAqLwogCXNjdHBfd2Fsa19wYXJhbXMocGFyYW0sIHBlZXJfaW5pdCwgaW5pdF9oZHIucGFyYW1zKSB7CisJCWlmICghc3JjX21hdGNoICYmIChwYXJhbS5wLT50eXBlID09IFNDVFBfUEFSQU1fSVBWNF9BRERSRVNTIHx8CisJCSAgICBwYXJhbS5wLT50eXBlID09IFNDVFBfUEFSQU1fSVBWNl9BRERSRVNTKSkgeworCQkJYWYgPSBzY3RwX2dldF9hZl9zcGVjaWZpYyhwYXJhbV90eXBlMmFmKHBhcmFtLnAtPnR5cGUpKTsKKwkJCWFmLT5mcm9tX2FkZHJfcGFyYW0oJmFkZHIsIHBhcmFtLmFkZHIsCisJCQkJCSAgICBjaHVuay0+c2N0cF9oZHItPnNvdXJjZSwgMCk7CisJCQlpZiAoc2N0cF9jbXBfYWRkcl9leGFjdChzY3RwX3NvdXJjZShjaHVuayksICZhZGRyKSkKKwkJCQlzcmNfbWF0Y2ggPSAxOworCQl9CiAKIAkJaWYgKCFzY3RwX3Byb2Nlc3NfcGFyYW0oYXNvYywgcGFyYW0sIHBlZXJfYWRkciwgZ2ZwKSkKIAkJCWdvdG8gY2xlYW5fdXA7CiAJfQogCisJLyogc291cmNlIGFkZHJlc3Mgb2YgY2h1bmsgbWF5IG5vdCBtYXRjaCBhbnkgdmFsaWQgYWRkcmVzcyAqLworCWlmICghc3JjX21hdGNoKQorCQlnb3RvIGNsZWFuX3VwOworCiAJLyogQVVUSDogQWZ0ZXIgcHJvY2Vzc2luZyB0aGUgcGFyYW1ldGVycywgbWFrZSBzdXJlIHRoYXQgd2UKIAkgKiBoYXZlIGFsbCB0aGUgcmVxdWlyZWQgaW5mbyB0byBwb3RlbnRpYWxseSBkbyBhdXRoZW50aWNhdGlvbnMuCiAJICovCkBAIC0yOTIzLDcgKzI5NDcsNyBAQAogCSAgICBhc2NvbmZfcGFyYW0tPnBhcmFtX2hkci50eXBlICE9IFNDVFBfUEFSQU1fU0VUX1BSSU1BUlkpCiAJCXJldHVybiBTQ1RQX0VSUk9SX1VOS05PV05fUEFSQU07CiAKLQlzd2l0Y2ggKGFkZHJfcGFyYW0tPnY0LnBhcmFtX2hkci50eXBlKSB7CisJc3dpdGNoIChhZGRyX3BhcmFtLT5wLnR5cGUpIHsKIAljYXNlIFNDVFBfUEFSQU1fSVBWNl9BRERSRVNTOgogCQlpZiAoIWFzb2MtPnBlZXIuaXB2Nl9hZGRyZXNzKQogCQkJcmV0dXJuIFNDVFBfRVJST1JfRE5TX0ZBSUxFRDsKQEAgLTI5MzYsNyArMjk2MCw3IEBACiAJCXJldHVybiBTQ1RQX0VSUk9SX0ROU19GQUlMRUQ7CiAJfQogCi0JYWYgPSBzY3RwX2dldF9hZl9zcGVjaWZpYyhwYXJhbV90eXBlMmFmKGFkZHJfcGFyYW0tPnY0LnBhcmFtX2hkci50eXBlKSk7CisJYWYgPSBzY3RwX2dldF9hZl9zcGVjaWZpYyhwYXJhbV90eXBlMmFmKGFkZHJfcGFyYW0tPnAudHlwZSkpOwogCWlmICh1bmxpa2VseSghYWYpKQogCQlyZXR1cm4gU0NUUF9FUlJPUl9ETlNfRkFJTEVEOwogCkBAIC0zMTAwLDcgKzMxMjQsNyBAQAogCS8qIFNraXAgdGhlIGFkZHJlc3MgcGFyYW1ldGVyIGFuZCBzdG9yZSBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0CiAJICogYXNjb25mIHBhcmFtZXRlci4KIAkgKi8KLQlsZW5ndGggPSBudG9ocyhhZGRyX3BhcmFtLT52NC5wYXJhbV9oZHIubGVuZ3RoKTsKKwlsZW5ndGggPSBudG9ocyhhZGRyX3BhcmFtLT5wLmxlbmd0aCk7CiAJYXNjb25mX3BhcmFtID0gKHNjdHBfYWRkaXBfcGFyYW1fdCAqKSgodm9pZCAqKWFkZHJfcGFyYW0gKyBsZW5ndGgpOwogCWNodW5rX2xlbiAtPSBsZW5ndGg7CiAKQEAgLTMxNzcsNyArMzIwMSw3IEBACiAJCQkoKHZvaWQgKilhc2NvbmZfcGFyYW0gKyBzaXplb2Yoc2N0cF9hZGRpcF9wYXJhbV90KSk7CiAKIAkvKiBXZSBoYXZlIGNoZWNrZWQgdGhlIHBhY2tldCBiZWZvcmUsIHNvIHdlIGRvIG5vdCBjaGVjayBhZ2Fpbi4JKi8KLQlhZiA9IHNjdHBfZ2V0X2FmX3NwZWNpZmljKHBhcmFtX3R5cGUyYWYoYWRkcl9wYXJhbS0+djQucGFyYW1faGRyLnR5cGUpKTsKKwlhZiA9IHNjdHBfZ2V0X2FmX3NwZWNpZmljKHBhcmFtX3R5cGUyYWYoYWRkcl9wYXJhbS0+cC50eXBlKSk7CiAJYWYtPmZyb21fYWRkcl9wYXJhbSgmYWRkciwgYWRkcl9wYXJhbSwgaHRvbnMoYnAtPnBvcnQpLCAwKTsKIAogCXN3aXRjaCAoYXNjb25mX3BhcmFtLT5wYXJhbV9oZHIudHlwZSkgewpAQCAtMzE5MywxMSArMzIxNyw4IEBACiAJCWxvY2FsX2JoX2VuYWJsZSgpOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRyYW5zcG9ydCwgJmFzb2MtPnBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCwKIAkJCQl0cmFuc3BvcnRzKSB7Ci0JCQlpZiAodHJhbnNwb3J0LT5zdGF0ZSA9PSBTQ1RQX0FDVElWRSkKLQkJCQljb250aW51ZTsKIAkJCWRzdF9yZWxlYXNlKHRyYW5zcG9ydC0+ZHN0KTsKLQkJCXNjdHBfdHJhbnNwb3J0X3JvdXRlKHRyYW5zcG9ydCwgTlVMTCwKLQkJCQkJICAgICBzY3RwX3NrKGFzb2MtPmJhc2Uuc2spKTsKKwkJCXRyYW5zcG9ydC0+ZHN0ID0gTlVMTDsKIAkJfQogCQlicmVhazsKIAljYXNlIFNDVFBfUEFSQU1fREVMX0lQOgpAQCAtMzIwNyw4ICszMjI4LDcgQEAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFuc3BvcnQsICZhc29jLT5wZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QsCiAJCQkJdHJhbnNwb3J0cykgewogCQkJZHN0X3JlbGVhc2UodHJhbnNwb3J0LT5kc3QpOwotCQkJc2N0cF90cmFuc3BvcnRfcm91dGUodHJhbnNwb3J0LCBOVUxMLAotCQkJCQkgICAgIHNjdHBfc2soYXNvYy0+YmFzZS5zaykpOworCQkJdHJhbnNwb3J0LT5kc3QgPSBOVUxMOwogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0zMzA0LDcgKzMzMjQsNyBAQAogCS8qIFNraXAgdGhlIGFkZHJlc3MgcGFyYW1ldGVyIGluIHRoZSBsYXN0IGFzY29uZiBzZW50IGFuZCBzdG9yZSBhCiAJICogcG9pbnRlciB0byB0aGUgZmlyc3QgYXNjb25mIHBhcmFtZXRlci4KIAkgKi8KLQlsZW5ndGggPSBudG9ocyhhZGRyX3BhcmFtLT52NC5wYXJhbV9oZHIubGVuZ3RoKTsKKwlsZW5ndGggPSBudG9ocyhhZGRyX3BhcmFtLT5wLmxlbmd0aCk7CiAJYXNjb25mX3BhcmFtID0gKHNjdHBfYWRkaXBfcGFyYW1fdCAqKSgodm9pZCAqKWFkZHJfcGFyYW0gKyBsZW5ndGgpOwogCWFzY29uZl9sZW4gLT0gbGVuZ3RoOwogCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMgYi9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMKaW5kZXggNWY4NmVlNC4uZDYxMmNhMSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jCisrKyBiL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYwpAQCAtNTk1LDggKzU5NSw3IEBACiAJICogZmFpbCBkdXJpbmcgSU5JVCBwcm9jZXNzaW5nIChkdWUgdG8gbWFsbG9jIHByb2JsZW1zKSwKIAkgKiBqdXN0IHJldHVybiB0aGUgZXJyb3IgYW5kIHN0b3AgcHJvY2Vzc2luZyB0aGUgc3RhY2suCiAJICovCi0JaWYgKCFzY3RwX3Byb2Nlc3NfaW5pdChhc29jLCBjaHVuay0+Y2h1bmtfaGRyLT50eXBlLAotCQkJICAgICAgIHNjdHBfc291cmNlKGNodW5rKSwgcGVlcl9pbml0LCBnZnApKQorCWlmICghc2N0cF9wcm9jZXNzX2luaXQoYXNvYywgY2h1bmssIHNjdHBfc291cmNlKGNodW5rKSwgcGVlcl9pbml0LCBnZnApKQogCQllcnJvciA9IC1FTk9NRU07CiAJZWxzZQogCQllcnJvciA9IDA7CkBAIC0xNDE1LDEyICsxNDE0LDYgQEAKIAkJCQkJU0NUUF9SVFhSX1QzX1JUWCk7CiAJCQlicmVhazsKIAotCQljYXNlIFNDVFBfQ01EX1RSQU5TTUlUOgotCQkJLyogS2ljayBzdGFydCB0cmFuc21pc3Npb24uICovCi0JCQllcnJvciA9IHNjdHBfb3V0cV91bmNvcmsoJmFzb2MtPm91dHF1ZXVlKTsKLQkJCWxvY2FsX2NvcmsgPSAwOwotCQkJYnJlYWs7Ci0KIAkJY2FzZSBTQ1RQX0NNRF9FQ05fQ0U6CiAJCQkvKiBEbyBkZWxheWVkIENFIHByb2Nlc3NpbmcuICAgKi8KIAkJCXNjdHBfZG9fZWNuX2NlX3dvcmsoYXNvYywgY21kLT5vYmoudTMyKTsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKaW5kZXggNzY3OTIwOC4uN2Y0YTRmOCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKKysrIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKQEAgLTM5Myw4ICszOTMsNyBAQAogCQlnb3RvIG5vbWVtX2luaXQ7CiAKIAkvKiBUaGUgY2FsbCwgc2N0cF9wcm9jZXNzX2luaXQoKSwgY2FuIGZhaWwgb24gbWVtb3J5IGFsbG9jYXRpb24uICAqLwotCWlmICghc2N0cF9wcm9jZXNzX2luaXQobmV3X2Fzb2MsIGNodW5rLT5jaHVua19oZHItPnR5cGUsCi0JCQkgICAgICAgc2N0cF9zb3VyY2UoY2h1bmspLAorCWlmICghc2N0cF9wcm9jZXNzX2luaXQobmV3X2Fzb2MsIGNodW5rLCBzY3RwX3NvdXJjZShjaHVuayksCiAJCQkgICAgICAgKHNjdHBfaW5pdF9jaHVua190ICopY2h1bmstPmNodW5rX2hkciwKIAkJCSAgICAgICBHRlBfQVRPTUlDKSkKIAkJZ290byBub21lbV9pbml0OwpAQCAtNzI1LDcgKzcyNCw3IEBACiAJICovCiAJcGVlcl9pbml0ID0gJmNodW5rLT5zdWJoLmNvb2tpZV9oZHItPmMucGVlcl9pbml0WzBdOwogCi0JaWYgKCFzY3RwX3Byb2Nlc3NfaW5pdChuZXdfYXNvYywgY2h1bmstPmNodW5rX2hkci0+dHlwZSwKKwlpZiAoIXNjdHBfcHJvY2Vzc19pbml0KG5ld19hc29jLCBjaHVuaywKIAkJCSAgICAgICAmY2h1bmstPnN1YmguY29va2llX2hkci0+Yy5wZWVyX2FkZHIsCiAJCQkgICAgICAgcGVlcl9pbml0LCBHRlBfQVRPTUlDKSkKIAkJZ290byBub21lbV9pbml0OwpAQCAtOTQyLDE4ICs5NDEsOSBAQAogewogCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNwb3J0ID0gKHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqKSBhcmc7CiAJc3RydWN0IHNjdHBfY2h1bmsgKnJlcGx5OwotCXNjdHBfc2VuZGVyX2hiX2luZm9fdCBoYmluZm87Ci0Jc2l6ZV90IHBheWxlbiA9IDA7Ci0KLQloYmluZm8ucGFyYW1faGRyLnR5cGUgPSBTQ1RQX1BBUkFNX0hFQVJUQkVBVF9JTkZPOwotCWhiaW5mby5wYXJhbV9oZHIubGVuZ3RoID0gaHRvbnMoc2l6ZW9mKHNjdHBfc2VuZGVyX2hiX2luZm9fdCkpOwotCWhiaW5mby5kYWRkciA9IHRyYW5zcG9ydC0+aXBhZGRyOwotCWhiaW5mby5zZW50X2F0ID0gamlmZmllczsKLQloYmluZm8uaGJfbm9uY2UgPSB0cmFuc3BvcnQtPmhiX25vbmNlOwogCiAJLyogU2VuZCBhIGhlYXJ0YmVhdCB0byBvdXIgcGVlci4gICovCi0JcGF5bGVuID0gc2l6ZW9mKHNjdHBfc2VuZGVyX2hiX2luZm9fdCk7Ci0JcmVwbHkgPSBzY3RwX21ha2VfaGVhcnRiZWF0KGFzb2MsIHRyYW5zcG9ydCwgJmhiaW5mbywgcGF5bGVuKTsKKwlyZXBseSA9IHNjdHBfbWFrZV9oZWFydGJlYXQoYXNvYywgdHJhbnNwb3J0KTsKIAlpZiAoIXJlcGx5KQogCQlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9OT01FTTsKIApAQCAtMTQ2NCw4ICsxNDU0LDcgQEAKIAkgKiBWZXJpZmljYXRpb24gVGFnIGFuZCBQZWVycyBWZXJpZmljYXRpb24gdGFnIGludG8gYSByZXNlcnZlZAogCSAqIHBsYWNlIChsb2NhbCB0aWUtdGFnIGFuZCBwZXIgdGllLXRhZykgd2l0aGluIHRoZSBzdGF0ZSBjb29raWUuCiAJICovCi0JaWYgKCFzY3RwX3Byb2Nlc3NfaW5pdChuZXdfYXNvYywgY2h1bmstPmNodW5rX2hkci0+dHlwZSwKLQkJCSAgICAgICBzY3RwX3NvdXJjZShjaHVuayksCisJaWYgKCFzY3RwX3Byb2Nlc3NfaW5pdChuZXdfYXNvYywgY2h1bmssIHNjdHBfc291cmNlKGNodW5rKSwKIAkJCSAgICAgICAoc2N0cF9pbml0X2NodW5rX3QgKiljaHVuay0+Y2h1bmtfaGRyLAogCQkJICAgICAgIEdGUF9BVE9NSUMpKQogCQlnb3RvIG5vbWVtOwpAQCAtMTY5NCw4ICsxNjgzLDcgQEAKIAkgKi8KIAlwZWVyX2luaXQgPSAmY2h1bmstPnN1YmguY29va2llX2hkci0+Yy5wZWVyX2luaXRbMF07CiAKLQlpZiAoIXNjdHBfcHJvY2Vzc19pbml0KG5ld19hc29jLCBjaHVuay0+Y2h1bmtfaGRyLT50eXBlLAotCQkJICAgICAgIHNjdHBfc291cmNlKGNodW5rKSwgcGVlcl9pbml0LAorCWlmICghc2N0cF9wcm9jZXNzX2luaXQobmV3X2Fzb2MsIGNodW5rLCBzY3RwX3NvdXJjZShjaHVuayksIHBlZXJfaW5pdCwKIAkJCSAgICAgICBHRlBfQVRPTUlDKSkKIAkJZ290byBub21lbTsKIApAQCAtMTc4MCw4ICsxNzY4LDcgQEAKIAkgKiBzaWRlIGVmZmVjdHMtLWl0IGlzIHNhZmUgdG8gcnVuIHRoZW0gaGVyZS4KIAkgKi8KIAlwZWVyX2luaXQgPSAmY2h1bmstPnN1YmguY29va2llX2hkci0+Yy5wZWVyX2luaXRbMF07Ci0JaWYgKCFzY3RwX3Byb2Nlc3NfaW5pdChuZXdfYXNvYywgY2h1bmstPmNodW5rX2hkci0+dHlwZSwKLQkJCSAgICAgICBzY3RwX3NvdXJjZShjaHVuayksIHBlZXJfaW5pdCwKKwlpZiAoIXNjdHBfcHJvY2Vzc19pbml0KG5ld19hc29jLCBjaHVuaywgc2N0cF9zb3VyY2UoY2h1bmspLCBwZWVyX2luaXQsCiAJCQkgICAgICAgR0ZQX0FUT01JQykpCiAJCWdvdG8gbm9tZW07CiAKQEAgLTI0MTIsOCArMjM5OSwxNSBAQAogCiAJLyogU2VlIGlmIHdlIGhhdmUgYW4gZXJyb3IgY2F1c2UgY29kZSBpbiB0aGUgY2h1bmsuICAqLwogCWxlbiA9IG50b2hzKGNodW5rLT5jaHVua19oZHItPmxlbmd0aCk7Ci0JaWYgKGxlbiA+PSBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2VycmhkcikpCisJaWYgKGxlbiA+PSBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2VycmhkcikpIHsKKworCQlzY3RwX2Vycmhkcl90ICplcnI7CisJCXNjdHBfd2Fsa19lcnJvcnMoZXJyLCBjaHVuay0+Y2h1bmtfaGRyKTsKKwkJaWYgKCh2b2lkICopZXJyICE9ICh2b2lkICopY2h1bmstPmNodW5rX2VuZCkKKwkJCXJldHVybiBzY3RwX3NmX3BkaXNjYXJkKGVwLCBhc29jLCB0eXBlLCBhcmcsIGNvbW1hbmRzKTsKKwogCQllcnJvciA9ICgoc2N0cF9lcnJoZHJfdCAqKWNodW5rLT5za2ItPmRhdGEpLT5jYXVzZTsKKwl9CiAKIAlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1NFVF9TS19FUlIsIFNDVFBfRVJST1IoRUNPTk5SRVNFVCkpOwogCS8qIEFTU09DX0ZBSUxFRCB3aWxsIERFTEVURV9UQ0IuICovCkBAIC0zMjA0LDYgKzMxOTgsNyBAQAogCQkJCQlzY3RwX2NtZF9zZXFfdCAqY29tbWFuZHMpCiB7CiAJc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rID0gYXJnOworCXNjdHBfZXJyaGRyX3QgKmVycjsKIAogCWlmICghc2N0cF92dGFnX3ZlcmlmeShjaHVuaywgYXNvYykpCiAJCXJldHVybiBzY3RwX3NmX3BkaXNjYXJkKGVwLCBhc29jLCB0eXBlLCBhcmcsIGNvbW1hbmRzKTsKQEAgLTMyMTIsNiArMzIwNywxMCBAQAogCWlmICghc2N0cF9jaHVua19sZW5ndGhfdmFsaWQoY2h1bmssIHNpemVvZihzY3RwX29wZXJyX2NodW5rX3QpKSkKIAkJcmV0dXJuIHNjdHBfc2ZfdmlvbGF0aW9uX2NodW5rbGVuKGVwLCBhc29jLCB0eXBlLCBhcmcsCiAJCQkJCQkgIGNvbW1hbmRzKTsKKwlzY3RwX3dhbGtfZXJyb3JzKGVyciwgY2h1bmstPmNodW5rX2hkcik7CisJaWYgKCh2b2lkICopZXJyICE9ICh2b2lkICopY2h1bmstPmNodW5rX2VuZCkKKwkJcmV0dXJuIHNjdHBfc2ZfdmlvbGF0aW9uX3BhcmFtbGVuKGVwLCBhc29jLCB0eXBlLCBhcmcsCisJCQkJCQkgICh2b2lkICopZXJyLCBjb21tYW5kcyk7CiAKIAlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1BST0NFU1NfT1BFUlIsCiAJCQlTQ1RQX0NIVU5LKGNodW5rKSk7CkBAIC0zMzIwLDggKzMzMTksMTAgQEAKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmsgPSBhcmc7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGNodW5rLT5za2I7CiAJc2N0cF9jaHVua2hkcl90ICpjaDsKKwlzY3RwX2Vycmhkcl90ICplcnI7CiAJX191OCAqY2hfZW5kOwogCWludCBvb3RiX3NodXRfYWNrID0gMDsKKwlpbnQgb290Yl9jb29raWVfYWNrID0gMDsKIAogCVNDVFBfSU5DX1NUQVRTKFNDVFBfTUlCX09VVE9GQkxVRVMpOwogCkBAIC0zMzQ2LDYgKzMzNDcsMjMgQEAKIAkJaWYgKFNDVFBfQ0lEX0FCT1JUID09IGNoLT50eXBlKQogCQkJcmV0dXJuIHNjdHBfc2ZfcGRpc2NhcmQoZXAsIGFzb2MsIHR5cGUsIGFyZywgY29tbWFuZHMpOwogCisJCS8qIFJGQyA4LjQsIDcpIElmIHRoZSBwYWNrZXQgY29udGFpbnMgYSAiU3RhbGUgY29va2llIiBFUlJPUgorCQkgKiBvciBhIENPT0tJRSBBQ0sgdGhlIFNDVFAgUGFja2V0IHNob3VsZCBiZSBzaWxlbnRseQorCQkgKiBkaXNjYXJkZWQuCisJCSAqLworCisJCWlmIChTQ1RQX0NJRF9DT09LSUVfQUNLID09IGNoLT50eXBlKQorCQkJb290Yl9jb29raWVfYWNrID0gMTsKKworCQlpZiAoU0NUUF9DSURfRVJST1IgPT0gY2gtPnR5cGUpIHsKKwkJCXNjdHBfd2Fsa19lcnJvcnMoZXJyLCBjaCkgeworCQkJCWlmIChTQ1RQX0VSUk9SX1NUQUxFX0NPT0tJRSA9PSBlcnItPmNhdXNlKSB7CisJCQkJCW9vdGJfY29va2llX2FjayA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCiAJCS8qIFJlcG9ydCB2aW9sYXRpb24gaWYgY2h1bmsgbGVuIG92ZXJmbG93cyAqLwogCQljaF9lbmQgPSAoKF9fdTggKiljaCkgKyBXT1JEX1JPVU5EKG50b2hzKGNoLT5sZW5ndGgpKTsKIAkJaWYgKGNoX2VuZCA+IHNrYl90YWlsX3BvaW50ZXIoc2tiKSkKQEAgLTMzNTcsNiArMzM3NSw4IEBACiAKIAlpZiAob290Yl9zaHV0X2FjaykKIAkJcmV0dXJuIHNjdHBfc2Zfc2h1dF84XzRfNShlcCwgYXNvYywgdHlwZSwgYXJnLCBjb21tYW5kcyk7CisJZWxzZSBpZiAob290Yl9jb29raWVfYWNrKQorCQlyZXR1cm4gc2N0cF9zZl9wZGlzY2FyZChlcCwgYXNvYywgdHlwZSwgYXJnLCBjb21tYW5kcyk7CiAJZWxzZQogCQlyZXR1cm4gc2N0cF9zZl90YWJvcnRfOF80XzgoZXAsIGFzb2MsIHR5cGUsIGFyZywgY29tbWFuZHMpOwogfQpAQCAtNDM0Myw4ICs0MzYzLDkgQEAKIAogLyoKICAqIEhhbmRsZSBhIHByb3RvY29sIHZpb2xhdGlvbiB3aGVuIHRoZSBwYXJhbWV0ZXIgbGVuZ3RoIGlzIGludmFsaWQuCi0gKiAiSW52YWxpZCIgbGVuZ3RoIGlzIGlkZW50aWZpZWQgYXMgc21hbGxlciB0aGFuIHRoZSBtaW5pbWFsIGxlbmd0aCBhCi0gKiBnaXZlbiBwYXJhbWV0ZXIgY2FuIGJlLgorICogSWYgdGhlIGxlbmd0aCBpcyBzbWFsbGVyIHRoYW4gdGhlIG1pbmltdW0gbGVuZ3RoIG9mIGEgZ2l2ZW4gcGFyYW1ldGVyLAorICogb3IgYWNjdW11bGF0ZWQgbGVuZ3RoIGluIG11bHRpIHBhcmFtZXRlcnMgZXhjZWVkcyB0aGUgZW5kIG9mIHRoZSBjaHVuaywKKyAqIHRoZSBsZW5ndGggaXMgY29uc2lkZXJlZCBhcyBpbnZhbGlkLgogICovCiBzdGF0aWMgc2N0cF9kaXNwb3NpdGlvbl90IHNjdHBfc2ZfdmlvbGF0aW9uX3BhcmFtbGVuKAogCQkJCSAgICAgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLApAQCAtNTA1Niw2ICs1MDc3LDMwIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgorICogV2hlbiB0aGUgU0NUUCBzdGFjayBoYXMgbm8gbW9yZSB1c2VyIGRhdGEgdG8gc2VuZCBvciByZXRyYW5zbWl0LCB0aGlzCisgKiBub3RpZmljYXRpb24gaXMgZ2l2ZW4gdG8gdGhlIHVzZXIuIEFsc28sIGF0IHRoZSB0aW1lIHdoZW4gYSB1c2VyIGFwcAorICogc3Vic2NyaWJlcyB0byB0aGlzIGV2ZW50LCBpZiB0aGVyZSBpcyBubyBkYXRhIHRvIGJlIHNlbnQgb3IKKyAqIHJldHJhbnNtaXQsIHRoZSBzdGFjayB3aWxsIGltbWVkaWF0ZWx5IHNlbmQgdXAgdGhpcyBub3RpZmljYXRpb24uCisgKi8KK3NjdHBfZGlzcG9zaXRpb25fdCBzY3RwX3NmX2RvX25vX3BlbmRpbmdfdHNuKAorCWNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCwKKwljb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKwljb25zdCBzY3RwX3N1YnR5cGVfdCB0eXBlLAorCXZvaWQgKmFyZywKKwlzY3RwX2NtZF9zZXFfdCAqY29tbWFuZHMpCit7CisJc3RydWN0IHNjdHBfdWxwZXZlbnQgKmV2ZW50OworCisJZXZlbnQgPSBzY3RwX3VscGV2ZW50X21ha2Vfc2VuZGVyX2RyeV9ldmVudChhc29jLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWV2ZW50KQorCQlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9OT01FTTsKKworCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfRVZFTlRfVUxQLCBTQ1RQX1VMUEVWRU5UKGV2ZW50KSk7CisKKwlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9DT05TVU1FOworfQorCisvKgogICogU3RhcnQgdGhlIHNodXRkb3duIG5lZ290aWF0aW9uLgogICoKICAqIEZyb20gU2VjdGlvbiA5LjI6CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmMgYi9uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmMKaW5kZXggNTQ2ZDQzODcuLjAzMzhkYzYgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3N0YXRldGFibGUuYworKysgYi9uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmMKQEAgLTEwNyw4ICsxMDcsNiBAQAogI2RlZmluZSBUWVBFX1NDVFBfRlVOQyhmdW5jKSB7LmZuID0gZnVuYywgLm5hbWUgPSAjZnVuY30KIAogI2RlZmluZSBUWVBFX1NDVFBfREFUQSB7IFwKLQkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX29vdGIpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAogCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKQEAgLTEyOCw4ICsxMjYsNiBAQAogfSAvKiBUWVBFX1NDVFBfREFUQSAqLwogCiAjZGVmaW5lIFRZUEVfU0NUUF9JTklUIHsgXAotCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfYnVnKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2RvXzVfMUJfaW5pdCksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKQEAgLTE0OSw4ICsxNDUsNiBAQAogfSAvKiBUWVBFX1NDVFBfSU5JVCAqLwogCiAjZGVmaW5lIFRZUEVfU0NUUF9JTklUX0FDSyB7IFwKLQkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX29vdGIpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAogCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZG9fNV8yXzNfaW5pdGFjayksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKQEAgLTE3MCw4ICsxNjQsNiBAQAogfSAvKiBUWVBFX1NDVFBfSU5JVF9BQ0sgKi8KIAogI2RlZmluZSBUWVBFX1NDVFBfU0FDSyB7IFwKLQkvKiAgU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0JVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9vb3RiKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX29vdGIpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCkBAIC0xOTEsOCArMTgzLDYgQEAKIH0gLyogVFlQRV9TQ1RQX1NBQ0sgKi8KIAogI2RlZmluZSBUWVBFX1NDVFBfSEVBUlRCRUFUIHsgXAotCS8qICBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX29vdGIpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAogCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKQEAgLTIxMyw4ICsyMDMsNiBAQAogfSAvKiBUWVBFX1NDVFBfSEVBUlRCRUFUICovCiAKICNkZWZpbmUgVFlQRV9TQ1RQX0hFQVJUQkVBVF9BQ0sgeyBcCi0JLyogIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCiAJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9vb3RiKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXApAQCAtMjM0LDggKzIyMiw2IEBACiB9IC8qIFRZUEVfU0NUUF9IRUFSVEJFQVRfQUNLICovCiAKICNkZWZpbmUgVFlQRV9TQ1RQX0FCT1JUIHsgXAotCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCiAJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9wZGlzY2FyZCksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKQEAgLTI1NSw4ICsyNDEsNiBAQAogfSAvKiBUWVBFX1NDVFBfQUJPUlQgKi8KIAogI2RlZmluZSBUWVBFX1NDVFBfU0hVVERPV04geyBcCi0JLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0JVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9vb3RiKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX29vdGIpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCkBAIC0yNzYsOCArMjYwLDYgQEAKIH0gLyogVFlQRV9TQ1RQX1NIVVRET1dOICovCiAKICNkZWZpbmUgVFlQRV9TQ1RQX1NIVVRET1dOX0FDSyB7IFwKLQkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX29vdGIpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAogCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKQEAgLTI5Nyw4ICsyNzksNiBAQAogfSAvKiBUWVBFX1NDVFBfU0hVVERPV05fQUNLICovCiAKICNkZWZpbmUgVFlQRV9TQ1RQX0VSUk9SIHsgXAotCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCiAJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9vb3RiKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXApAQCAtMzE4LDggKzI5OCw2IEBACiB9IC8qIFRZUEVfU0NUUF9FUlJPUiAqLwogCiAjZGVmaW5lIFRZUEVfU0NUUF9DT09LSUVfRUNITyB7IFwKLQkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2J1ZyksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCiAJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb181XzFEX2NlKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXApAQCAtMzM5LDggKzMxNyw2IEBACiB9IC8qIFRZUEVfU0NUUF9DT09LSUVfRUNITyAqLwogCiAjZGVmaW5lIFRZUEVfU0NUUF9DT09LSUVfQUNLIHsgXAotCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCiAJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kaXNjYXJkX2NodW5rKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXApAQCAtMzYwLDggKzMzNiw2IEBACiB9IC8qIFRZUEVfU0NUUF9DT09LSUVfQUNLICovCiAKICNkZWZpbmUgVFlQRV9TQ1RQX0VDTl9FQ05FIHsgXAotCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCiAJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kaXNjYXJkX2NodW5rKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXApAQCAtMzgxLDggKzM1NSw2IEBACiB9IC8qIFRZUEVfU0NUUF9FQ05fRUNORSAqLwogCiAjZGVmaW5lIFRZUEVfU0NUUF9FQ05fQ1dSIHsgXAotCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCiAJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kaXNjYXJkX2NodW5rKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXApAQCAtNDAyLDggKzM3NCw2IEBACiB9IC8qIFRZUEVfU0NUUF9FQ05fQ1dSICovCiAKICNkZWZpbmUgVFlQRV9TQ1RQX1NIVVRET1dOX0NPTVBMRVRFIHsgXAotCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCiAJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kaXNjYXJkX2NodW5rKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXApAQCAtNDQ2LDggKzQxNiw2IEBACiB9OyAvKiBzdGF0ZV9mbl90IGNodW5rX2V2ZW50X3RhYmxlW11bXSAqLwogCiAjZGVmaW5lIFRZUEVfU0NUUF9BU0NPTkYgeyBcCi0JLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0JVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9vb3RiKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCkBAIC00NjcsOCArNDM1LDYgQEAKIH0gLyogVFlQRV9TQ1RQX0FTQ09ORiAqLwogCiAjZGVmaW5lIFRZUEVfU0NUUF9BU0NPTkZfQUNLIHsgXAotCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCiAJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kaXNjYXJkX2NodW5rKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXApAQCAtNDk2LDggKzQ2Miw2IEBACiB9OyAvKnN0YXRlX2ZuX3QgYWRkaXBfY2h1bmtfZXZlbnRfdGFibGVbXVtdICovCiAKICNkZWZpbmUgVFlQRV9TQ1RQX0ZXRF9UU04geyBcCi0JLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0JVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9vb3RiKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX29vdGIpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCkBAIC01MjQsOCArNDg4LDYgQEAKIH07IC8qc3RhdGVfZm5fdCBwcnNjdHBfY2h1bmtfZXZlbnRfdGFibGVbXVtdICovCiAKICNkZWZpbmUgVFlQRV9TQ1RQX0FVVEggeyBcCi0JLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0JVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9vb3RiKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX29vdGIpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCkBAIC01NTMsOCArNTE1LDYgQEAKIAogc3RhdGljIGNvbnN0IHNjdHBfc21fdGFibGVfZW50cnlfdAogY2h1bmtfZXZlbnRfdGFibGVfdW5rbm93bltTQ1RQX1NUQVRFX05VTV9TVEFURVNdID0gewotCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8KLQlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX29vdGIpLAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovCiAJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9vb3RiKSwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovCkBAIC01NzUsOCArNTM1LDYgQEAKIAogCiAjZGVmaW5lIFRZUEVfU0NUUF9QUklNSVRJVkVfQVNTT0NJQVRFICB7IFwKLQkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2J1ZyksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCiAJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb19wcm1fYXNvYyksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKQEAgLTU5Niw4ICs1NTQsNiBAQAogfSAvKiBUWVBFX1NDVFBfUFJJTUlUSVZFX0FTU09DSUFURSAqLwogCiAjZGVmaW5lIFRZUEVfU0NUUF9QUklNSVRJVkVfU0hVVERPV04gIHsgXAotCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfYnVnKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Vycm9yX2Nsb3NlZCksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKQEAgLTYxNyw4ICs1NzMsNiBAQAogfSAvKiBUWVBFX1NDVFBfUFJJTUlUSVZFX1NIVVRET1dOICovCiAKICNkZWZpbmUgVFlQRV9TQ1RQX1BSSU1JVElWRV9BQk9SVCAgeyBcCi0JLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0JVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9idWcpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAogCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZXJyb3JfY2xvc2VkKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXApAQCAtNjM4LDggKzU5Miw2IEBACiB9IC8qIFRZUEVfU0NUUF9QUklNSVRJVkVfQUJPUlQgKi8KIAogI2RlZmluZSBUWVBFX1NDVFBfUFJJTUlUSVZFX1NFTkQgIHsgXAotCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfYnVnKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Vycm9yX2Nsb3NlZCksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKQEAgLTY1OSw4ICs2MTEsNiBAQAogfSAvKiBUWVBFX1NDVFBfUFJJTUlUSVZFX1NFTkQgKi8KIAogI2RlZmluZSBUWVBFX1NDVFBfUFJJTUlUSVZFX1JFUVVFU1RIRUFSVEJFQVQgIHsgXAotCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfYnVnKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Vycm9yX2Nsb3NlZCksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKQEAgLTY4MCw4ICs2MzAsNiBAQAogfSAvKiBUWVBFX1NDVFBfUFJJTUlUSVZFX1JFUVVFU1RIRUFSVEJFQVQgKi8KIAogI2RlZmluZSBUWVBFX1NDVFBfUFJJTUlUSVZFX0FTQ09ORiB7IFwKLQkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2J1ZyksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCiAJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9lcnJvcl9jbG9zZWQpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCkBAIC03MTMsOCArNjYxLDYgQEAKIH07CiAKICNkZWZpbmUgVFlQRV9TQ1RQX09USEVSX05PX1BFTkRJTkdfVFNOICB7IFwKLQkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2J1ZyksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCiAJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9pZ25vcmVfb3RoZXIpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCkBAIC03MjIsNyArNjY4LDcgQEAKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQgKi8gXAogCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfaWdub3JlX290aGVyKSwgXAogCS8qIFNDVFBfU1RBVEVfRVNUQUJMSVNIRUQgKi8gXAotCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfaWdub3JlX290aGVyKSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZG9fbm9fcGVuZGluZ190c24pLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2RvXzlfMl9zdGFydF9zaHV0ZG93biksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQgKi8gXApAQCAtNzM0LDggKzY4MCw2IEBACiB9CiAKICNkZWZpbmUgVFlQRV9TQ1RQX09USEVSX0lDTVBfUFJPVE9fVU5SRUFDSCAgeyBcCi0JLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0JVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9idWcpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAogCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfaWdub3JlX290aGVyKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXApAQCAtNzYwLDggKzcwNCw2IEBACiB9OwogCiAjZGVmaW5lIFRZUEVfU0NUUF9FVkVOVF9USU1FT1VUX05PTkUgeyBcCi0JLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0JVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9idWcpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAogCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfYnVnKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXApAQCAtNzgxLDggKzcyMyw2IEBACiB9CiAKICNkZWZpbmUgVFlQRV9TQ1RQX0VWRU5UX1RJTUVPVVRfVDFfQ09PS0lFIHsgXAotCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfYnVnKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3RpbWVyX2lnbm9yZSksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKQEAgLTgwMiw4ICs3NDIsNiBAQAogfQogCiAjZGVmaW5lIFRZUEVfU0NUUF9FVkVOVF9USU1FT1VUX1QxX0lOSVQgeyBcCi0JLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0JVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9idWcpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAogCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdGltZXJfaWdub3JlKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXApAQCAtODIzLDggKzc2MSw2IEBACiB9CiAKICNkZWZpbmUgVFlQRV9TQ1RQX0VWRU5UX1RJTUVPVVRfVDJfU0hVVERPV04geyBcCi0JLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0JVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9idWcpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAogCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdGltZXJfaWdub3JlKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXApAQCAtODQ0LDggKzc4MCw2IEBACiB9CiAKICNkZWZpbmUgVFlQRV9TQ1RQX0VWRU5UX1RJTUVPVVRfVDNfUlRYIHsgXAotCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfYnVnKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKIAlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3RpbWVyX2lnbm9yZSksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKQEAgLTg2NSw4ICs3OTksNiBAQAogfQogCiAjZGVmaW5lIFRZUEVfU0NUUF9FVkVOVF9USU1FT1VUX1Q0X1JUTyB7IFwKLQkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2J1ZyksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCiAJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90aW1lcl9pZ25vcmUpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCkBAIC04ODYsOCArODE4LDYgQEAKIH0KIAogI2RlZmluZSBUWVBFX1NDVFBfRVZFTlRfVElNRU9VVF9UNV9TSFVURE9XTl9HVUFSRCB7IFwKLQkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2J1ZyksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCiAJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90aW1lcl9pZ25vcmUpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCkBAIC05MDcsOCArODM3LDYgQEAKIH0KIAogI2RlZmluZSBUWVBFX1NDVFBfRVZFTlRfVElNRU9VVF9IRUFSVEJFQVQgeyBcCi0JLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0JVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9idWcpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAogCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdGltZXJfaWdub3JlKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXApAQCAtOTI4LDggKzg1Niw2IEBACiB9CiAKICNkZWZpbmUgVFlQRV9TQ1RQX0VWRU5UX1RJTUVPVVRfU0FDSyB7IFwKLQkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2J1ZyksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCiAJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90aW1lcl9pZ25vcmUpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCkBAIC05NDksOCArODc1LDYgQEAKIH0KIAogI2RlZmluZSBUWVBFX1NDVFBfRVZFTlRfVElNRU9VVF9BVVRPQ0xPU0UgeyBcCi0JLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0JVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90aW1lcl9pZ25vcmUpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAogCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdGltZXJfaWdub3JlKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXApkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc29ja2V0LmMgYi9uZXQvc2N0cC9zb2NrZXQuYwppbmRleCBkZWI4MmUzLi42NzY2OTEzIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zb2NrZXQuYworKysgYi9uZXQvc2N0cC9zb2NrZXQuYwpAQCAtNjU4LDExICs2NTgsMTUgQEAKIAkJCWdvdG8gZXJyX2JpbmR4X3JlbTsKIAkJfQogCi0JCWlmIChzYV9hZGRyLT52NC5zaW5fcG9ydCAhPSBodG9ucyhicC0+cG9ydCkpIHsKKwkJaWYgKHNhX2FkZHItPnY0LnNpbl9wb3J0ICYmCisJCSAgICBzYV9hZGRyLT52NC5zaW5fcG9ydCAhPSBodG9ucyhicC0+cG9ydCkpIHsKIAkJCXJldHZhbCA9IC1FSU5WQUw7CiAJCQlnb3RvIGVycl9iaW5keF9yZW07CiAJCX0KIAorCQlpZiAoIXNhX2FkZHItPnY0LnNpbl9wb3J0KQorCQkJc2FfYWRkci0+djQuc2luX3BvcnQgPSBodG9ucyhicC0+cG9ydCk7CisKIAkJLyogRklYTUUgLSBUaGVyZSBpcyBwcm9iYWJseSBhIG5lZWQgdG8gY2hlY2sgaWYgc2stPnNrX3NhZGRyIGFuZAogCQkgKiBzay0+c2tfcmN2X2FkZHIgYXJlIGN1cnJlbnRseSBzZXQgdG8gb25lIG9mIHRoZSBhZGRyZXNzZXMgdG8KIAkJICogYmUgcmVtb3ZlZC4gVGhpcyBpcyBzb21ldGhpbmcgd2hpY2ggbmVlZHMgdG8gYmUgbG9va2VkIGludG8KQEAgLTE0OTIsNyArMTQ5Niw3IEBACiAJc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rOwogCXVuaW9uIHNjdHBfYWRkciB0bzsKIAlzdHJ1Y3Qgc29ja2FkZHIgKm1zZ19uYW1lID0gTlVMTDsKLQlzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvIGRlZmF1bHRfc2luZm8gPSB7IDAgfTsKKwlzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvIGRlZmF1bHRfc2luZm87CiAJc3RydWN0IHNjdHBfc25kcmN2aW5mbyAqc2luZm87CiAJc3RydWN0IHNjdHBfaW5pdG1zZyAqc2luaXQ7CiAJc2N0cF9hc3NvY190IGFzc29jaWQgPSAwOwpAQCAtMTc1Niw2ICsxNzYwLDcgQEAKIAkJLyogSWYgdGhlIHVzZXIgZGlkbid0IHNwZWNpZnkgU05EUkNWSU5GTywgbWFrZSB1cCBvbmUgd2l0aAogCQkgKiBzb21lIGRlZmF1bHRzLgogCQkgKi8KKwkJbWVtc2V0KCZkZWZhdWx0X3NpbmZvLCAwLCBzaXplb2YoZGVmYXVsdF9zaW5mbykpOwogCQlkZWZhdWx0X3NpbmZvLnNpbmZvX3N0cmVhbSA9IGFzb2MtPmRlZmF1bHRfc3RyZWFtOwogCQlkZWZhdWx0X3NpbmZvLnNpbmZvX2ZsYWdzID0gYXNvYy0+ZGVmYXVsdF9mbGFnczsKIAkJZGVmYXVsdF9zaW5mby5zaW5mb19wcGlkID0gYXNvYy0+ZGVmYXVsdF9wcGlkOwpAQCAtMTc4NiwxMiArMTc5MSwxMCBAQAogCQlnb3RvIG91dF9mcmVlOwogCX0KIAotCWlmIChzaW5mbykgewotCQkvKiBDaGVjayBmb3IgaW52YWxpZCBzdHJlYW0uICovCi0JCWlmIChzaW5mby0+c2luZm9fc3RyZWFtID49IGFzb2MtPmMuc2luaXRfbnVtX29zdHJlYW1zKSB7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJZ290byBvdXRfZnJlZTsKLQkJfQorCS8qIENoZWNrIGZvciBpbnZhbGlkIHN0cmVhbS4gKi8KKwlpZiAoc2luZm8tPnNpbmZvX3N0cmVhbSA+PSBhc29jLT5jLnNpbml0X251bV9vc3RyZWFtcykgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dF9mcmVlOwogCX0KIAogCXRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgbXNnLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQpOwpAQCAtMjI4Myw3ICsyMjg2LDcgQEAKIAkJCXRyYW5zLT5wYXJhbV9mbGFncyA9CiAJCQkJKHRyYW5zLT5wYXJhbV9mbGFncyAmIH5TUFBfUE1UVUQpIHwgcG10dWRfY2hhbmdlOwogCQkJaWYgKHVwZGF0ZSkgewotCQkJCXNjdHBfdHJhbnNwb3J0X3BtdHUodHJhbnMpOworCQkJCXNjdHBfdHJhbnNwb3J0X3BtdHUodHJhbnMsIHNjdHBfb3B0MnNrKHNwKSk7CiAJCQkJc2N0cF9hc3NvY19zeW5jX3BtdHUoYXNvYyk7CiAJCQl9CiAJCX0gZWxzZSBpZiAoYXNvYykgewpAQCAtMzIxNSwxNCArMzIxOCw5IEBACiAJaWYgKG9wdGxlbiA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9obWFjYWxnbykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaG1hY3MgPSBrbWFsbG9jKG9wdGxlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFobWFjcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoaG1hY3MsIG9wdHZhbCwgb3B0bGVuKSkgewotCQllcnIgPSAtRUZBVUxUOwotCQlnb3RvIG91dDsKLQl9CisJaG1hY3M9IG1lbWR1cF91c2VyKG9wdHZhbCwgb3B0bGVuKTsKKwlpZiAoSVNfRVJSKGhtYWNzKSkKKwkJcmV0dXJuIFBUUl9FUlIoaG1hY3MpOwogCiAJaWRlbnRzID0gaG1hY3MtPnNobWFjX251bV9pZGVudHM7CiAJaWYgKGlkZW50cyA9PSAwIHx8IGlkZW50cyA+IFNDVFBfQVVUSF9OVU1fSE1BQ1MgfHwKQEAgLTMyNTcsMTQgKzMyNTUsOSBAQAogCWlmIChvcHRsZW4gPD0gc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhrZXkpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWF1dGhrZXkgPSBrbWFsbG9jKG9wdGxlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhdXRoa2V5KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWlmIChjb3B5X2Zyb21fdXNlcihhdXRoa2V5LCBvcHR2YWwsIG9wdGxlbikpIHsKLQkJcmV0ID0gLUVGQVVMVDsKLQkJZ290byBvdXQ7Ci0JfQorCWF1dGhrZXk9IG1lbWR1cF91c2VyKG9wdHZhbCwgb3B0bGVuKTsKKwlpZiAoSVNfRVJSKGF1dGhrZXkpKQorCQlyZXR1cm4gUFRSX0VSUihhdXRoa2V5KTsKIAogCWlmIChhdXRoa2V5LT5zY2Ffa2V5bGVuZ3RoID4gb3B0bGVuIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhrZXkpKSB7CiAJCXJldCA9IC1FSU5WQUw7CkBAIC01MjgzLDYgKzUyNzYsNTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIDguMi42LiBHZXQgdGhlIEN1cnJlbnQgSWRlbnRpZmllcnMgb2YgQXNzb2NpYXRpb25zCisgKiAgICAgICAgKFNDVFBfR0VUX0FTU09DX0lEX0xJU1QpCisgKgorICogVGhpcyBvcHRpb24gZ2V0cyB0aGUgY3VycmVudCBsaXN0IG9mIFNDVFAgYXNzb2NpYXRpb24gaWRlbnRpZmllcnMgb2YKKyAqIHRoZSBTQ1RQIGFzc29jaWF0aW9ucyBoYW5kbGVkIGJ5IGEgb25lLXRvLW1hbnkgc3R5bGUgc29ja2V0LgorICovCitzdGF0aWMgaW50IHNjdHBfZ2V0c29ja29wdF9hc3NvY19pZHMoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVuLAorCQkJCSAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCit7CisJc3RydWN0IHNjdHBfc29jayAqc3AgPSBzY3RwX3NrKHNrKTsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY19pZHMgKmlkczsKKwl1MzIgbnVtID0gMDsKKworCWlmIChzY3RwX3N0eWxlKHNrLCBUQ1ApKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAobGVuIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX2lkcykpCisJCXJldHVybiAtRUlOVkFMOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShhc29jLCAmKHNwLT5lcC0+YXNvY3MpLCBhc29jcykgeworCQludW0rKzsKKwl9CisKKwlpZiAobGVuIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX2lkcykgKyBzaXplb2Yoc2N0cF9hc3NvY190KSAqIG51bSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlsZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfaWRzKSArIHNpemVvZihzY3RwX2Fzc29jX3QpICogbnVtOworCisJaWRzID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghaWRzKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZHMtPmdhaWRzX251bWJlcl9vZl9pZHMgPSBudW07CisJbnVtID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFzb2MsICYoc3AtPmVwLT5hc29jcyksIGFzb2NzKSB7CisJCWlkcy0+Z2FpZHNfYXNzb2NfaWRbbnVtKytdID0gYXNvYy0+YXNzb2NfaWQ7CisJfQorCisJaWYgKHB1dF91c2VyKGxlbiwgb3B0bGVuKSB8fCBjb3B5X3RvX3VzZXIob3B0dmFsLCBpZHMsIGxlbikpIHsKKwkJa2ZyZWUoaWRzKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJa2ZyZWUoaWRzKTsKKwlyZXR1cm4gMDsKK30KKwogU0NUUF9TVEFUSUMgaW50IHNjdHBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCQkJY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQogewpAQCAtNTQxNSw2ICs1NDU3LDkgQEAKIAljYXNlIFNDVFBfR0VUX0FTU09DX05VTUJFUjoKIAkJcmV0dmFsID0gc2N0cF9nZXRzb2Nrb3B0X2Fzc29jX251bWJlcihzaywgbGVuLCBvcHR2YWwsIG9wdGxlbik7CiAJCWJyZWFrOworCWNhc2UgU0NUUF9HRVRfQVNTT0NfSURfTElTVDoKKwkJcmV0dmFsID0gc2N0cF9nZXRzb2Nrb3B0X2Fzc29jX2lkcyhzaywgbGVuLCBvcHR2YWwsIG9wdGxlbik7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHZhbCA9IC1FTk9QUk9UT09QVDsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC90cmFuc3BvcnQuYyBiL25ldC9zY3RwL3RyYW5zcG9ydC5jCmluZGV4IGQzYWU0OTMuLjM5NGM1N2MgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3RyYW5zcG9ydC5jCisrKyBiL25ldC9zY3RwL3RyYW5zcG9ydC5jCkBAIC0yMTEsMTUgKzIxMSwxNyBAQAogfQogCiAvKiBJbml0aWFsaXplIHRoZSBwbXR1IG9mIGEgdHJhbnNwb3J0LiAqLwotdm9pZCBzY3RwX3RyYW5zcG9ydF9wbXR1KHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNwb3J0KQordm9pZCBzY3RwX3RyYW5zcG9ydF9wbXR1KHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNwb3J0LCBzdHJ1Y3Qgc29jayAqc2spCiB7Ci0Jc3RydWN0IGRzdF9lbnRyeSAqZHN0OworCS8qIElmIHdlIGRvbid0IGhhdmUgYSBmcmVzaCByb3V0ZSwgbG9vayBvbmUgdXAgKi8KKwlpZiAoIXRyYW5zcG9ydC0+ZHN0IHx8IHRyYW5zcG9ydC0+ZHN0LT5vYnNvbGV0ZSA+IDEpIHsKKwkJZHN0X3JlbGVhc2UodHJhbnNwb3J0LT5kc3QpOworCQl0cmFuc3BvcnQtPmFmX3NwZWNpZmljLT5nZXRfZHN0KHRyYW5zcG9ydCwgJnRyYW5zcG9ydC0+c2FkZHIsCisJCQkJCQkmdHJhbnNwb3J0LT5mbCwgc2spOworCX0KIAotCWRzdCA9IHRyYW5zcG9ydC0+YWZfc3BlY2lmaWMtPmdldF9kc3QoTlVMTCwgJnRyYW5zcG9ydC0+aXBhZGRyLCBOVUxMKTsKLQotCWlmIChkc3QpIHsKLQkJdHJhbnNwb3J0LT5wYXRobXR1ID0gZHN0X210dShkc3QpOwotCQlkc3RfcmVsZWFzZShkc3QpOworCWlmICh0cmFuc3BvcnQtPmRzdCkgeworCQl0cmFuc3BvcnQtPnBhdGhtdHUgPSBkc3RfbXR1KHRyYW5zcG9ydC0+ZHN0KTsKIAl9IGVsc2UKIAkJdHJhbnNwb3J0LT5wYXRobXR1ID0gU0NUUF9ERUZBVUxUX01BWFNFR01FTlQ7CiB9CkBAIC0yNzAsMjIgKzI3MiwxOSBAQAogewogCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jID0gdHJhbnNwb3J0LT5hc29jOwogCXN0cnVjdCBzY3RwX2FmICphZiA9IHRyYW5zcG9ydC0+YWZfc3BlY2lmaWM7Ci0JdW5pb24gc2N0cF9hZGRyICpkYWRkciA9ICZ0cmFuc3BvcnQtPmlwYWRkcjsKLQlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CiAKLQlkc3QgPSBhZi0+Z2V0X2RzdChhc29jLCBkYWRkciwgc2FkZHIpOworCWFmLT5nZXRfZHN0KHRyYW5zcG9ydCwgc2FkZHIsICZ0cmFuc3BvcnQtPmZsLCBzY3RwX29wdDJzayhvcHQpKTsKIAogCWlmIChzYWRkcikKIAkJbWVtY3B5KCZ0cmFuc3BvcnQtPnNhZGRyLCBzYWRkciwgc2l6ZW9mKHVuaW9uIHNjdHBfYWRkcikpOwogCWVsc2UKLQkJYWYtPmdldF9zYWRkcihvcHQsIGFzb2MsIGRzdCwgZGFkZHIsICZ0cmFuc3BvcnQtPnNhZGRyKTsKKwkJYWYtPmdldF9zYWRkcihvcHQsIHRyYW5zcG9ydCwgJnRyYW5zcG9ydC0+ZmwpOwogCi0JdHJhbnNwb3J0LT5kc3QgPSBkc3Q7CiAJaWYgKCh0cmFuc3BvcnQtPnBhcmFtX2ZsYWdzICYgU1BQX1BNVFVEX0RJU0FCTEUpICYmIHRyYW5zcG9ydC0+cGF0aG10dSkgewogCQlyZXR1cm47CiAJfQotCWlmIChkc3QpIHsKLQkJdHJhbnNwb3J0LT5wYXRobXR1ID0gZHN0X210dShkc3QpOworCWlmICh0cmFuc3BvcnQtPmRzdCkgeworCQl0cmFuc3BvcnQtPnBhdGhtdHUgPSBkc3RfbXR1KHRyYW5zcG9ydC0+ZHN0KTsKIAogCQkvKiBJbml0aWFsaXplIHNrLT5za19yY3Zfc2FkZHIsIGlmIHRoZSB0cmFuc3BvcnQgaXMgdGhlCiAJCSAqIGFzc29jaWF0aW9uJ3MgYWN0aXZlIHBhdGggZm9yIGdldHNvY2tuYW1lKCkuCmRpZmYgLS1naXQgYS9uZXQvc2N0cC91bHBldmVudC5jIGIvbmV0L3NjdHAvdWxwZXZlbnQuYwppbmRleCBkZmYyN2Q1Li5lNzBlNWZjIDEwMDY0NAotLS0gYS9uZXQvc2N0cC91bHBldmVudC5jCisrKyBiL25ldC9zY3RwL3VscGV2ZW50LmMKQEAgLTU1NCw3ICs1NTQsNyBAQAogCW1lbWNweSgmc3NmLT5zc2ZfaW5mbywgJmNodW5rLT5zaW5mbywgc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8pKTsKIAogCS8qIFBlciBUU1ZXRyBkaXNjdXNzaW9uIHdpdGggUmFuZHkuIEFsbG93IHRoZSBhcHBsaWNhdGlvbiB0bwotCSAqIHJlc2VtYmxlIGEgZnJhZ21lbnRlZCBtZXNzYWdlLgorCSAqIHJlYXNzZW1ibGUgYSBmcmFnbWVudGVkIG1lc3NhZ2UuCiAJICovCiAJc3NmLT5zc2ZfaW5mby5zaW5mb19mbGFncyA9IGNodW5rLT5jaHVua19oZHItPmZsYWdzOwogCkBAIC04NDMsNyArODQzLDcgQEAKIAlhayA9IChzdHJ1Y3Qgc2N0cF9hdXRoa2V5X2V2ZW50ICopCiAJCXNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IHNjdHBfYXV0aGtleV9ldmVudCkpOwogCi0JYWstPmF1dGhfdHlwZSA9IFNDVFBfQVVUSEVOVElDQVRJT05fSU5ESUNBVElPTjsKKwlhay0+YXV0aF90eXBlID0gU0NUUF9BVVRIRU5USUNBVElPTl9FVkVOVDsKIAlhay0+YXV0aF9mbGFncyA9IDA7CiAJYWstPmF1dGhfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhrZXlfZXZlbnQpOwogCkBAIC04NjIsNiArODYyLDM0IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8qCisgKiBTb2NrZXQgRXh0ZW5zaW9ucyBmb3IgU0NUUAorICogNi4zLjEwLiBTQ1RQX1NFTkRFUl9EUllfRVZFTlQKKyAqLworc3RydWN0IHNjdHBfdWxwZXZlbnQgKnNjdHBfdWxwZXZlbnRfbWFrZV9zZW5kZXJfZHJ5X2V2ZW50KAorCWNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCBnZnBfdCBnZnApCit7CisJc3RydWN0IHNjdHBfdWxwZXZlbnQgKmV2ZW50OworCXN0cnVjdCBzY3RwX3NlbmRlcl9kcnlfZXZlbnQgKnNkcnk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWV2ZW50ID0gc2N0cF91bHBldmVudF9uZXcoc2l6ZW9mKHN0cnVjdCBzY3RwX3NlbmRlcl9kcnlfZXZlbnQpLAorCQkJCSAgTVNHX05PVElGSUNBVElPTiwgZ2ZwKTsKKwlpZiAoIWV2ZW50KQorCQlyZXR1cm4gTlVMTDsKKworCXNrYiA9IHNjdHBfZXZlbnQyc2tiKGV2ZW50KTsKKwlzZHJ5ID0gKHN0cnVjdCBzY3RwX3NlbmRlcl9kcnlfZXZlbnQgKikKKwkJc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3Qgc2N0cF9zZW5kZXJfZHJ5X2V2ZW50KSk7CisKKwlzZHJ5LT5zZW5kZXJfZHJ5X3R5cGUgPSBTQ1RQX1NFTkRFUl9EUllfRVZFTlQ7CisJc2RyeS0+c2VuZGVyX2RyeV9mbGFncyA9IDA7CisJc2RyeS0+c2VuZGVyX2RyeV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBfc2VuZGVyX2RyeV9ldmVudCk7CisJc2N0cF91bHBldmVudF9zZXRfb3duZXIoZXZlbnQsIGFzb2MpOworCXNkcnktPnNlbmRlcl9kcnlfYXNzb2NfaWQgPSBzY3RwX2Fzc29jMmlkKGFzb2MpOworCisJcmV0dXJuIGV2ZW50OworfQogCiAvKiBSZXR1cm4gdGhlIG5vdGlmaWNhdGlvbiB0eXBlLCBhc3N1bWluZyB0aGlzIGlzIGEgbm90aWZpY2F0aW9uCiAgKiBldmVudC4KZGlmZiAtLWdpdCBhL25ldC9zb2NrZXQuYyBiL25ldC9zb2NrZXQuYwppbmRleCAzMTBkMTZiLi4wMmRjODJkIDEwMDY0NAotLS0gYS9uZXQvc29ja2V0LmMKKysrIGIvbmV0L3NvY2tldC5jCkBAIC0yNjMsMTUgKzI2Myw2IEBACiAJcmV0dXJuICZlaS0+dmZzX2lub2RlOwogfQogCi0KLQotc3RhdGljIHZvaWQgd3FfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKQotewotCXN0cnVjdCBzb2NrZXRfd3EgKndxID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBzb2NrZXRfd3EsIHJjdSk7Ci0KLQlrZnJlZSh3cSk7Ci19Ci0KIHN0YXRpYyB2b2lkIHNvY2tfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBzb2NrZXRfYWxsb2MgKmVpOwpAQCAtMjc5LDcgKzI3MCw3IEBACiAKIAllaSA9IGNvbnRhaW5lcl9vZihpbm9kZSwgc3RydWN0IHNvY2tldF9hbGxvYywgdmZzX2lub2RlKTsKIAl3cSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZWktPnNvY2tldC53cSwgMSk7Ci0JY2FsbF9yY3UoJndxLT5yY3UsIHdxX2ZyZWVfcmN1KTsKKwlrZnJlZV9yY3Uod3EsIHJjdSk7CiAJa21lbV9jYWNoZV9mcmVlKHNvY2tfaW5vZGVfY2FjaGVwLCBlaSk7CiB9CiAKQEAgLTU1MSwxMSArNTQyLDEwIEBACiB9CiBFWFBPUlRfU1lNQk9MKHNvY2tfdHhfdGltZXN0YW1wKTsKIAotc3RhdGljIGlubGluZSBpbnQgX19zb2NrX3NlbmRtc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAotCQkJCSBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKQorc3RhdGljIGlubGluZSBpbnQgX19zb2NrX3NlbmRtc2dfbm9zZWMoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAorCQkJCSAgICAgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKQogewogCXN0cnVjdCBzb2NrX2lvY2IgKnNpID0ga2lvY2JfdG9fc2lvY2IoaW9jYik7Ci0JaW50IGVycjsKIAogCXNvY2tfdXBkYXRlX2NsYXNzaWQoc29jay0+c2spOwogCkBAIC01NjQsMTMgKzU1NCwxNyBAQAogCXNpLT5tc2cgPSBtc2c7CiAJc2ktPnNpemUgPSBzaXplOwogCi0JZXJyID0gc2VjdXJpdHlfc29ja2V0X3NlbmRtc2coc29jaywgbXNnLCBzaXplKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCiAJcmV0dXJuIHNvY2stPm9wcy0+c2VuZG1zZyhpb2NiLCBzb2NrLCBtc2csIHNpemUpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBfX3NvY2tfc2VuZG1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCisJCQkJIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCit7CisJaW50IGVyciA9IHNlY3VyaXR5X3NvY2tldF9zZW5kbXNnKHNvY2ssIG1zZywgc2l6ZSk7CisKKwlyZXR1cm4gZXJyID86IF9fc29ja19zZW5kbXNnX25vc2VjKGlvY2IsIHNvY2ssIG1zZywgc2l6ZSk7Cit9CisKIGludCBzb2NrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKIHsKIAlzdHJ1Y3Qga2lvY2IgaW9jYjsKQEAgLTU4Niw2ICs1ODAsMjAgQEAKIH0KIEVYUE9SVF9TWU1CT0woc29ja19zZW5kbXNnKTsKIAoraW50IHNvY2tfc2VuZG1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBraW9jYiBpb2NiOworCXN0cnVjdCBzb2NrX2lvY2Igc2lvY2I7CisJaW50IHJldDsKKworCWluaXRfc3luY19raW9jYigmaW9jYiwgTlVMTCk7CisJaW9jYi5wcml2YXRlID0gJnNpb2NiOworCXJldCA9IF9fc29ja19zZW5kbXNnX25vc2VjKCZpb2NiLCBzb2NrLCBtc2csIHNpemUpOworCWlmICgtRUlPQ0JRVUVVRUQgPT0gcmV0KQorCQlyZXQgPSB3YWl0X29uX3N5bmNfa2lvY2IoJmlvY2IpOworCXJldHVybiByZXQ7Cit9CisKIGludCBrZXJuZWxfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csCiAJCSAgIHN0cnVjdCBrdmVjICp2ZWMsIHNpemVfdCBudW0sIHNpemVfdCBzaXplKQogewpAQCAtMTg2Myw1NyArMTg3MSw0NyBAQAogI2RlZmluZSBDT01QQVRfTkFNRUxFTihtc2cpCUNPTVBBVF9NU0cobXNnLCBtc2dfbmFtZWxlbikKICNkZWZpbmUgQ09NUEFUX0ZMQUdTKG1zZykJQ09NUEFUX01TRyhtc2csIG1zZ19mbGFncykKIAotLyoKLSAqCUJTRCBzZW5kbXNnIGludGVyZmFjZQotICovCi0KLVNZU0NBTExfREVGSU5FMyhzZW5kbXNnLCBpbnQsIGZkLCBzdHJ1Y3QgbXNnaGRyIF9fdXNlciAqLCBtc2csIHVuc2lnbmVkLCBmbGFncykKK3N0YXRpYyBpbnQgX19zeXNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyIF9fdXNlciAqbXNnLAorCQkJIHN0cnVjdCBtc2doZHIgKm1zZ19zeXMsIHVuc2lnbmVkIGZsYWdzLCBpbnQgbm9zZWMpCiB7CiAJc3RydWN0IGNvbXBhdF9tc2doZHIgX191c2VyICptc2dfY29tcGF0ID0KIAkgICAgKHN0cnVjdCBjb21wYXRfbXNnaGRyIF9fdXNlciAqKW1zZzsKLQlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwogCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHJlc3M7CiAJc3RydWN0IGlvdmVjIGlvdnN0YWNrW1VJT19GQVNUSU9WXSwgKmlvdiA9IGlvdnN0YWNrOwogCXVuc2lnbmVkIGNoYXIgY3RsW3NpemVvZihzdHJ1Y3QgY21zZ2hkcikgKyAyMF0KIAkgICAgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoc2l6ZW9mKF9fa2VybmVsX3NpemVfdCkpKSk7CiAJLyogMjAgaXMgc2l6ZSBvZiBpcHY2X3BrdGluZm8gKi8KIAl1bnNpZ25lZCBjaGFyICpjdGxfYnVmID0gY3RsOwotCXN0cnVjdCBtc2doZHIgbXNnX3N5czsKIAlpbnQgZXJyLCBjdGxfbGVuLCBpb3Zfc2l6ZSwgdG90YWxfbGVuOwotCWludCBmcHV0X25lZWRlZDsKIAogCWVyciA9IC1FRkFVTFQ7CiAJaWYgKE1TR19DTVNHX0NPTVBBVCAmIGZsYWdzKSB7Ci0JCWlmIChnZXRfY29tcGF0X21zZ2hkcigmbXNnX3N5cywgbXNnX2NvbXBhdCkpCisJCWlmIChnZXRfY29tcGF0X21zZ2hkcihtc2dfc3lzLCBtc2dfY29tcGF0KSkKIAkJCXJldHVybiAtRUZBVUxUOwotCX0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIoJm1zZ19zeXMsIG1zZywgc2l6ZW9mKHN0cnVjdCBtc2doZHIpKSkKKwl9IGVsc2UgaWYgKGNvcHlfZnJvbV91c2VyKG1zZ19zeXMsIG1zZywgc2l6ZW9mKHN0cnVjdCBtc2doZHIpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlzb2NrID0gc29ja2ZkX2xvb2t1cF9saWdodChmZCwgJmVyciwgJmZwdXRfbmVlZGVkKTsKLQlpZiAoIXNvY2spCi0JCWdvdG8gb3V0OwotCiAJLyogZG8gbm90IG1vdmUgYmVmb3JlIG1zZ19zeXMgaXMgdmFsaWQgKi8KIAllcnIgPSAtRU1TR1NJWkU7Ci0JaWYgKG1zZ19zeXMubXNnX2lvdmxlbiA+IFVJT19NQVhJT1YpCi0JCWdvdG8gb3V0X3B1dDsKKwlpZiAobXNnX3N5cy0+bXNnX2lvdmxlbiA+IFVJT19NQVhJT1YpCisJCWdvdG8gb3V0OwogCiAJLyogQ2hlY2sgd2hldGhlciB0byBhbGxvY2F0ZSB0aGUgaW92ZWMgYXJlYSAqLwogCWVyciA9IC1FTk9NRU07Ci0JaW92X3NpemUgPSBtc2dfc3lzLm1zZ19pb3ZsZW4gKiBzaXplb2Yoc3RydWN0IGlvdmVjKTsKLQlpZiAobXNnX3N5cy5tc2dfaW92bGVuID4gVUlPX0ZBU1RJT1YpIHsKKwlpb3Zfc2l6ZSA9IG1zZ19zeXMtPm1zZ19pb3ZsZW4gKiBzaXplb2Yoc3RydWN0IGlvdmVjKTsKKwlpZiAobXNnX3N5cy0+bXNnX2lvdmxlbiA+IFVJT19GQVNUSU9WKSB7CiAJCWlvdiA9IHNvY2tfa21hbGxvYyhzb2NrLT5zaywgaW92X3NpemUsIEdGUF9LRVJORUwpOwogCQlpZiAoIWlvdikKLQkJCWdvdG8gb3V0X3B1dDsKKwkJCWdvdG8gb3V0OwogCX0KIAogCS8qIFRoaXMgd2lsbCBhbHNvIG1vdmUgdGhlIGFkZHJlc3MgZGF0YSBpbnRvIGtlcm5lbCBzcGFjZSAqLwogCWlmIChNU0dfQ01TR19DT01QQVQgJiBmbGFncykgewotCQllcnIgPSB2ZXJpZnlfY29tcGF0X2lvdmVjKCZtc2dfc3lzLCBpb3YsCisJCWVyciA9IHZlcmlmeV9jb21wYXRfaW92ZWMobXNnX3N5cywgaW92LAogCQkJCQkgIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcmVzcywKIAkJCQkJICBWRVJJRllfUkVBRCk7CiAJfSBlbHNlCi0JCWVyciA9IHZlcmlmeV9pb3ZlYygmbXNnX3N5cywgaW92LAorCQllcnIgPSB2ZXJpZnlfaW92ZWMobXNnX3N5cywgaW92LAogCQkJCSAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcmVzcywKIAkJCQkgICBWRVJJRllfUkVBRCk7CiAJaWYgKGVyciA8IDApCkBAIC0xOTIyLDE3ICsxOTIwLDE3IEBACiAKIAllcnIgPSAtRU5PQlVGUzsKIAotCWlmIChtc2dfc3lzLm1zZ19jb250cm9sbGVuID4gSU5UX01BWCkKKwlpZiAobXNnX3N5cy0+bXNnX2NvbnRyb2xsZW4gPiBJTlRfTUFYKQogCQlnb3RvIG91dF9mcmVlaW92OwotCWN0bF9sZW4gPSBtc2dfc3lzLm1zZ19jb250cm9sbGVuOworCWN0bF9sZW4gPSBtc2dfc3lzLT5tc2dfY29udHJvbGxlbjsKIAlpZiAoKE1TR19DTVNHX0NPTVBBVCAmIGZsYWdzKSAmJiBjdGxfbGVuKSB7CiAJCWVyciA9Ci0JCSAgICBjbXNnaGRyX2Zyb21fdXNlcl9jb21wYXRfdG9fa2VybigmbXNnX3N5cywgc29jay0+c2ssIGN0bCwKKwkJICAgIGNtc2doZHJfZnJvbV91c2VyX2NvbXBhdF90b19rZXJuKG1zZ19zeXMsIHNvY2stPnNrLCBjdGwsCiAJCQkJCQkgICAgIHNpemVvZihjdGwpKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0X2ZyZWVpb3Y7Ci0JCWN0bF9idWYgPSBtc2dfc3lzLm1zZ19jb250cm9sOwotCQljdGxfbGVuID0gbXNnX3N5cy5tc2dfY29udHJvbGxlbjsKKwkJY3RsX2J1ZiA9IG1zZ19zeXMtPm1zZ19jb250cm9sOworCQljdGxfbGVuID0gbXNnX3N5cy0+bXNnX2NvbnRyb2xsZW47CiAJfSBlbHNlIGlmIChjdGxfbGVuKSB7CiAJCWlmIChjdGxfbGVuID4gc2l6ZW9mKGN0bCkpIHsKIAkJCWN0bF9idWYgPSBzb2NrX2ttYWxsb2Moc29jay0+c2ssIGN0bF9sZW4sIEdGUF9LRVJORUwpOwpAQCAtMTk0MSwyMSArMTkzOSwyMiBAQAogCQl9CiAJCWVyciA9IC1FRkFVTFQ7CiAJCS8qCi0JCSAqIENhcmVmdWwhIEJlZm9yZSB0aGlzLCBtc2dfc3lzLm1zZ19jb250cm9sIGNvbnRhaW5zIGEgdXNlciBwb2ludGVyLgorCQkgKiBDYXJlZnVsISBCZWZvcmUgdGhpcywgbXNnX3N5cy0+bXNnX2NvbnRyb2wgY29udGFpbnMgYSB1c2VyIHBvaW50ZXIuCiAJCSAqIEFmdGVyd2FyZHMsIGl0IHdpbGwgYmUgYSBrZXJuZWwgcG9pbnRlci4gVGh1cyB0aGUgY29tcGlsZXItYXNzaXN0ZWQKIAkJICogY2hlY2tpbmcgZmFsbHMgZG93biBvbiB0aGlzLgogCQkgKi8KIAkJaWYgKGNvcHlfZnJvbV91c2VyKGN0bF9idWYsCi0JCQkJICAgKHZvaWQgX191c2VyIF9fZm9yY2UgKiltc2dfc3lzLm1zZ19jb250cm9sLAorCQkJCSAgICh2b2lkIF9fdXNlciBfX2ZvcmNlICopbXNnX3N5cy0+bXNnX2NvbnRyb2wsCiAJCQkJICAgY3RsX2xlbikpCiAJCQlnb3RvIG91dF9mcmVlY3RsOwotCQltc2dfc3lzLm1zZ19jb250cm9sID0gY3RsX2J1ZjsKKwkJbXNnX3N5cy0+bXNnX2NvbnRyb2wgPSBjdGxfYnVmOwogCX0KLQltc2dfc3lzLm1zZ19mbGFncyA9IGZsYWdzOworCW1zZ19zeXMtPm1zZ19mbGFncyA9IGZsYWdzOwogCiAJaWYgKHNvY2stPmZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQotCQltc2dfc3lzLm1zZ19mbGFncyB8PSBNU0dfRE9OVFdBSVQ7Ci0JZXJyID0gc29ja19zZW5kbXNnKHNvY2ssICZtc2dfc3lzLCB0b3RhbF9sZW4pOworCQltc2dfc3lzLT5tc2dfZmxhZ3MgfD0gTVNHX0RPTlRXQUlUOworCWVyciA9IChub3NlYyA/IHNvY2tfc2VuZG1zZ19ub3NlYyA6IHNvY2tfc2VuZG1zZykoc29jaywgbXNnX3N5cywKKwkJCQkJCQkgIHRvdGFsX2xlbik7CiAKIG91dF9mcmVlY3RsOgogCWlmIChjdGxfYnVmICE9IGN0bCkKQEAgLTE5NjMsMTIgKzE5NjIsMTE0IEBACiBvdXRfZnJlZWlvdjoKIAlpZiAoaW92ICE9IGlvdnN0YWNrKQogCQlzb2NrX2tmcmVlX3Moc29jay0+c2ssIGlvdiwgaW92X3NpemUpOwotb3V0X3B1dDoKK291dDoKKwlyZXR1cm4gZXJyOworfQorCisvKgorICoJQlNEIHNlbmRtc2cgaW50ZXJmYWNlCisgKi8KKworU1lTQ0FMTF9ERUZJTkUzKHNlbmRtc2csIGludCwgZmQsIHN0cnVjdCBtc2doZHIgX191c2VyICosIG1zZywgdW5zaWduZWQsIGZsYWdzKQoreworCWludCBmcHV0X25lZWRlZCwgZXJyOworCXN0cnVjdCBtc2doZHIgbXNnX3N5czsKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gc29ja2ZkX2xvb2t1cF9saWdodChmZCwgJmVyciwgJmZwdXRfbmVlZGVkKTsKKworCWlmICghc29jaykKKwkJZ290byBvdXQ7CisKKwllcnIgPSBfX3N5c19zZW5kbXNnKHNvY2ssIG1zZywgJm1zZ19zeXMsIGZsYWdzLCAwKTsKKwogCWZwdXRfbGlnaHQoc29jay0+ZmlsZSwgZnB1dF9uZWVkZWQpOwogb3V0OgogCXJldHVybiBlcnI7CiB9CiAKKy8qCisgKglMaW51eCBzZW5kbW1zZyBpbnRlcmZhY2UKKyAqLworCitpbnQgX19zeXNfc2VuZG1tc2coaW50IGZkLCBzdHJ1Y3QgbW1zZ2hkciBfX3VzZXIgKm1tc2csIHVuc2lnbmVkIGludCB2bGVuLAorCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJaW50IGZwdXRfbmVlZGVkLCBlcnIsIGRhdGFncmFtczsKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrOworCXN0cnVjdCBtbXNnaGRyIF9fdXNlciAqZW50cnk7CisJc3RydWN0IGNvbXBhdF9tbXNnaGRyIF9fdXNlciAqY29tcGF0X2VudHJ5OworCXN0cnVjdCBtc2doZHIgbXNnX3N5czsKKworCWRhdGFncmFtcyA9IDA7CisKKwlzb2NrID0gc29ja2ZkX2xvb2t1cF9saWdodChmZCwgJmVyciwgJmZwdXRfbmVlZGVkKTsKKwlpZiAoIXNvY2spCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBzb2NrX2Vycm9yKHNvY2stPnNrKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9wdXQ7CisKKwllbnRyeSA9IG1tc2c7CisJY29tcGF0X2VudHJ5ID0gKHN0cnVjdCBjb21wYXRfbW1zZ2hkciBfX3VzZXIgKiltbXNnOworCisJd2hpbGUgKGRhdGFncmFtcyA8IHZsZW4pIHsKKwkJLyoKKwkJICogTm8gbmVlZCB0byBhc2sgTFNNIGZvciBtb3JlIHRoYW4gdGhlIGZpcnN0IGRhdGFncmFtLgorCQkgKi8KKwkJaWYgKE1TR19DTVNHX0NPTVBBVCAmIGZsYWdzKSB7CisJCQllcnIgPSBfX3N5c19zZW5kbXNnKHNvY2ssIChzdHJ1Y3QgbXNnaGRyIF9fdXNlciAqKWNvbXBhdF9lbnRyeSwKKwkJCQkJICAgICZtc2dfc3lzLCBmbGFncywgZGF0YWdyYW1zKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCWJyZWFrOworCQkJZXJyID0gX19wdXRfdXNlcihlcnIsICZjb21wYXRfZW50cnktPm1zZ19sZW4pOworCQkJKytjb21wYXRfZW50cnk7CisJCX0gZWxzZSB7CisJCQllcnIgPSBfX3N5c19zZW5kbXNnKHNvY2ssIChzdHJ1Y3QgbXNnaGRyIF9fdXNlciAqKWVudHJ5LAorCQkJCQkgICAgJm1zZ19zeXMsIGZsYWdzLCBkYXRhZ3JhbXMpOworCQkJaWYgKGVyciA8IDApCisJCQkJYnJlYWs7CisJCQllcnIgPSBwdXRfdXNlcihlcnIsICZlbnRyeS0+bXNnX2xlbik7CisJCQkrK2VudHJ5OworCQl9CisKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCQkrK2RhdGFncmFtczsKKwl9CisKK291dF9wdXQ6CisJZnB1dF9saWdodChzb2NrLT5maWxlLCBmcHV0X25lZWRlZCk7CisKKwlpZiAoZXJyID09IDApCisJCXJldHVybiBkYXRhZ3JhbXM7CisKKwlpZiAoZGF0YWdyYW1zICE9IDApIHsKKwkJLyoKKwkJICogV2UgbWF5IHNlbmQgbGVzcyBlbnRyaWVzIHRoYW4gcmVxdWVzdGVkICh2bGVuKSBpZiB0aGUKKwkJICogc29jayBpcyBub24gYmxvY2tpbmcuLi4KKwkJICovCisJCWlmIChlcnIgIT0gLUVBR0FJTikgeworCQkJLyoKKwkJCSAqIC4uLiBvciBpZiBzZW5kbXNnIHJldHVybnMgYW4gZXJyb3IgYWZ0ZXIgd2UKKwkJCSAqIHNlbmQgc29tZSBkYXRhZ3JhbXMsIHdoZXJlIHdlIHJlY29yZCB0aGUKKwkJCSAqIGVycm9yIHRvIHJldHVybiBvbiB0aGUgbmV4dCBjYWxsIG9yIGlmIHRoZQorCQkJICogYXBwIGFza3MgYWJvdXQgaXQgdXNpbmcgZ2V0c29ja29wdChTT19FUlJPUikuCisJCQkgKi8KKwkJCXNvY2stPnNrLT5za19lcnIgPSAtZXJyOworCQl9CisKKwkJcmV0dXJuIGRhdGFncmFtczsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitTWVNDQUxMX0RFRklORTQoc2VuZG1tc2csIGludCwgZmQsIHN0cnVjdCBtbXNnaGRyIF9fdXNlciAqLCBtbXNnLAorCQl1bnNpZ25lZCBpbnQsIHZsZW4sIHVuc2lnbmVkIGludCwgZmxhZ3MpCit7CisJcmV0dXJuIF9fc3lzX3NlbmRtbXNnKGZkLCBtbXNnLCB2bGVuLCBmbGFncyk7Cit9CisKIHN0YXRpYyBpbnQgX19zeXNfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyIF9fdXNlciAqbXNnLAogCQkJIHN0cnVjdCBtc2doZHIgKm1zZ19zeXMsIHVuc2lnbmVkIGZsYWdzLCBpbnQgbm9zZWMpCiB7CkBAIC0yMTIyLDE0ICsyMjIzLDE2IEBACiAJCSAqLwogCQlpZiAoTVNHX0NNU0dfQ09NUEFUICYgZmxhZ3MpIHsKIAkJCWVyciA9IF9fc3lzX3JlY3Ztc2coc29jaywgKHN0cnVjdCBtc2doZHIgX191c2VyICopY29tcGF0X2VudHJ5LAotCQkJCQkgICAgJm1zZ19zeXMsIGZsYWdzLCBkYXRhZ3JhbXMpOworCQkJCQkgICAgJm1zZ19zeXMsIGZsYWdzICYgfk1TR19XQUlURk9ST05FLAorCQkJCQkgICAgZGF0YWdyYW1zKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCWJyZWFrOwogCQkJZXJyID0gX19wdXRfdXNlcihlcnIsICZjb21wYXRfZW50cnktPm1zZ19sZW4pOwogCQkJKytjb21wYXRfZW50cnk7CiAJCX0gZWxzZSB7CiAJCQllcnIgPSBfX3N5c19yZWN2bXNnKHNvY2ssIChzdHJ1Y3QgbXNnaGRyIF9fdXNlciAqKWVudHJ5LAotCQkJCQkgICAgJm1zZ19zeXMsIGZsYWdzLCBkYXRhZ3JhbXMpOworCQkJCQkgICAgJm1zZ19zeXMsIGZsYWdzICYgfk1TR19XQUlURk9ST05FLAorCQkJCQkgICAgZGF0YWdyYW1zKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCWJyZWFrOwogCQkJZXJyID0gcHV0X3VzZXIoZXJyLCAmZW50cnktPm1zZ19sZW4pOwpAQCAtMjIxNCwxMSArMjMxNywxMSBAQAogI2lmZGVmIF9fQVJDSF9XQU5UX1NZU19TT0NLRVRDQUxMCiAvKiBBcmd1bWVudCBsaXN0IHNpemVzIGZvciBzeXNfc29ja2V0Y2FsbCAqLwogI2RlZmluZSBBTCh4KSAoKHgpICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbmFyZ3NbMjBdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbmFyZ3NbMjFdID0gewogCUFMKDApLCBBTCgzKSwgQUwoMyksIEFMKDMpLCBBTCgyKSwgQUwoMyksCiAJQUwoMyksIEFMKDMpLCBBTCg0KSwgQUwoNCksIEFMKDQpLCBBTCg2KSwKIAlBTCg2KSwgQUwoMiksIEFMKDUpLCBBTCg1KSwgQUwoMyksIEFMKDMpLAotCUFMKDQpLCBBTCg1KQorCUFMKDQpLCBBTCg1KSwgQUwoNCkKIH07CiAKICN1bmRlZiBBTApAQCAtMjIzOCw3ICsyMzQxLDcgQEAKIAlpbnQgZXJyOwogCXVuc2lnbmVkIGludCBsZW47CiAKLQlpZiAoY2FsbCA8IDEgfHwgY2FsbCA+IFNZU19SRUNWTU1TRykKKwlpZiAoY2FsbCA8IDEgfHwgY2FsbCA+IFNZU19TRU5ETU1TRykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlsZW4gPSBuYXJnc1tjYWxsXTsKQEAgLTIzMTMsNiArMjQxNiw5IEBACiAJY2FzZSBTWVNfU0VORE1TRzoKIAkJZXJyID0gc3lzX3NlbmRtc2coYTAsIChzdHJ1Y3QgbXNnaGRyIF9fdXNlciAqKWExLCBhWzJdKTsKIAkJYnJlYWs7CisJY2FzZSBTWVNfU0VORE1NU0c6CisJCWVyciA9IHN5c19zZW5kbW1zZyhhMCwgKHN0cnVjdCBtbXNnaGRyIF9fdXNlciAqKWExLCBhWzJdLCBhWzNdKTsKKwkJYnJlYWs7CiAJY2FzZSBTWVNfUkVDVk1TRzoKIAkJZXJyID0gc3lzX3JlY3Ztc2coYTAsIChzdHJ1Y3QgbXNnaGRyIF9fdXNlciAqKWExLCBhWzJdKTsKIAkJYnJlYWs7CkBAIC0yNjQzLDEzICsyNzQ5LDEzIEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJaWYgKGNvbnZlcnRfaW4pIHsKLQkJLyogV2UgZXhwZWN0IHRoZXJlIHRvIGJlIGhvbGVzIGJldHdlZW4gZnMubV91IGFuZAorCQkvKiBXZSBleHBlY3QgdGhlcmUgdG8gYmUgaG9sZXMgYmV0d2VlbiBmcy5tX2V4dCBhbmQKIAkJICogZnMucmluZ19jb29raWUgYW5kIGF0IHRoZSBlbmQgb2YgZnMsIGJ1dCBub3doZXJlIGVsc2UuCiAJCSAqLwotCQlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9ldGh0b29sX3J4bmZjLCBmcy5tX3UpICsKLQkJCSAgICAgc2l6ZW9mKGNvbXBhdF9yeG5mYy0+ZnMubV91KSAhPQotCQkJICAgICBvZmZzZXRvZihzdHJ1Y3QgZXRodG9vbF9yeG5mYywgZnMubV91KSArCi0JCQkgICAgIHNpemVvZihyeG5mYy0+ZnMubV91KSk7CisJCUJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X2V0aHRvb2xfcnhuZmMsIGZzLm1fZXh0KSArCisJCQkgICAgIHNpemVvZihjb21wYXRfcnhuZmMtPmZzLm1fZXh0KSAhPQorCQkJICAgICBvZmZzZXRvZihzdHJ1Y3QgZXRodG9vbF9yeG5mYywgZnMubV9leHQpICsKKwkJCSAgICAgc2l6ZW9mKHJ4bmZjLT5mcy5tX2V4dCkpOwogCQlCVUlMRF9CVUdfT04oCiAJCQlvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X2V0aHRvb2xfcnhuZmMsIGZzLmxvY2F0aW9uKSAtCiAJCQlvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X2V0aHRvb2xfcnhuZmMsIGZzLnJpbmdfY29va2llKSAhPQpAQCAtMjY1Nyw3ICsyNzYzLDcgQEAKIAkJCW9mZnNldG9mKHN0cnVjdCBldGh0b29sX3J4bmZjLCBmcy5yaW5nX2Nvb2tpZSkpOwogCiAJCWlmIChjb3B5X2luX3VzZXIocnhuZmMsIGNvbXBhdF9yeG5mYywKLQkJCQkgKHZvaWQgKikoJnJ4bmZjLT5mcy5tX3UgKyAxKSAtCisJCQkJICh2b2lkICopKCZyeG5mYy0+ZnMubV9leHQgKyAxKSAtCiAJCQkJICh2b2lkICopcnhuZmMpIHx8CiAJCSAgICBjb3B5X2luX3VzZXIoJnJ4bmZjLT5mcy5yaW5nX2Nvb2tpZSwKIAkJCQkgJmNvbXBhdF9yeG5mYy0+ZnMucmluZ19jb29raWUsCkBAIC0yNjc0LDcgKzI3ODAsNyBAQAogCiAJaWYgKGNvbnZlcnRfb3V0KSB7CiAJCWlmIChjb3B5X2luX3VzZXIoY29tcGF0X3J4bmZjLCByeG5mYywKLQkJCQkgKGNvbnN0IHZvaWQgKikoJnJ4bmZjLT5mcy5tX3UgKyAxKSAtCisJCQkJIChjb25zdCB2b2lkICopKCZyeG5mYy0+ZnMubV9leHQgKyAxKSAtCiAJCQkJIChjb25zdCB2b2lkICopcnhuZmMpIHx8CiAJCSAgICBjb3B5X2luX3VzZXIoJmNvbXBhdF9yeG5mYy0+ZnMucmluZ19jb29raWUsCiAJCQkJICZyeG5mYy0+ZnMucmluZ19jb29raWUsCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL0tjb25maWcgYi9uZXQvc3VucnBjL0tjb25maWcKaW5kZXggODg3M2ZkOC4uYjIxOThlNiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9LY29uZmlnCisrKyBiL25ldC9zdW5ycGMvS2NvbmZpZwpAQCAtMTgsMTQgKzE4LDEzIEBACiAJICBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgUlBDU0VDX0dTU19LUkI1Ci0JdHJpc3RhdGUKKwl0cmlzdGF0ZSAiU2VjdXJlIFJQQzogS2VyYmVyb3MgViBtZWNoYW5pc20iCiAJZGVwZW5kcyBvbiBTVU5SUEMgJiYgQ1JZUFRPCi0JcHJvbXB0ICJTZWN1cmUgUlBDOiBLZXJiZXJvcyBWIG1lY2hhbmlzbSIgaWYgIShORlNfVjQgfHwgTkZTRF9WNCkKKwlkZXBlbmRzIG9uIENSWVBUT19NRDUgJiYgQ1JZUFRPX0RFUyAmJiBDUllQVE9fQ0JDICYmIENSWVBUT19DVFMKKwlkZXBlbmRzIG9uIENSWVBUT19FQ0IgJiYgQ1JZUFRPX0hNQUMgJiYgQ1JZUFRPX1NIQTEgJiYgQ1JZUFRPX0FFUworCWRlcGVuZHMgb24gQ1JZUFRPX0FSQzQKIAlkZWZhdWx0IHkKIAlzZWxlY3QgU1VOUlBDX0dTUwotCXNlbGVjdCBDUllQVE9fTUQ1Ci0Jc2VsZWN0IENSWVBUT19ERVMKLQlzZWxlY3QgQ1JZUFRPX0NCQwogCWhlbHAKIAkgIENob29zZSBZIGhlcmUgdG8gZW5hYmxlIFNlY3VyZSBSUEMgdXNpbmcgdGhlIEtlcmJlcm9zIHZlcnNpb24gNQogCSAgR1NTLUFQSSBtZWNoYW5pc20gKFJGQyAxOTY0KS4KZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYwppbmRleCBmMzkxNGQwLi4zMzliYTY0IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2F1dGhfZ3NzLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jCkBAIC01MjAsNyArNTIwLDcgQEAKIAkJd2Fybl9nc3NkKCk7CiAJCXRhc2stPnRrX3RpbWVvdXQgPSAxNSpIWjsKIAkJcnBjX3NsZWVwX29uKCZwaXBlX3ZlcnNpb25fcnBjX3dhaXRxdWV1ZSwgdGFzaywgTlVMTCk7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAJaWYgKElTX0VSUihnc3NfbXNnKSkgewogCQllcnIgPSBQVFJfRVJSKGdzc19tc2cpOwpAQCAtNTYzLDEwICs1NjMsMTIgQEAKIAlpZiAoUFRSX0VSUihnc3NfbXNnKSA9PSAtRUFHQUlOKSB7CiAJCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHBpcGVfdmVyc2lvbl93YWl0cXVldWUsCiAJCQkJcGlwZV92ZXJzaW9uID49IDAsIDE1KkhaKTsKKwkJaWYgKHBpcGVfdmVyc2lvbiA8IDApIHsKKwkJCXdhcm5fZ3NzZCgpOworCQkJZXJyID0gLUVBQ0NFUzsKKwkJfQogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7Ci0JCWlmIChwaXBlX3ZlcnNpb24gPCAwKQotCQkJd2Fybl9nc3NkKCk7CiAJCWdvdG8gcmV0cnk7CiAJfQogCWlmIChJU19FUlIoZ3NzX21zZykpIHsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvY2xudC5jIGIvbmV0L3N1bnJwYy9jbG50LmMKaW5kZXggZTdhOTZlNC4uOGQ4M2Y5ZCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9jbG50LmMKKysrIGIvbmV0L3N1bnJwYy9jbG50LmMKQEAgLTE1MDgsNyArMTUwOCwxMCBAQAogCQlpZiAoY2xudC0+Y2xfY2hhdHR5KQogCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogc2VydmVyICVzIG5vdCByZXNwb25kaW5nLCB0aW1lZCBvdXRcbiIsCiAJCQkJY2xudC0+Y2xfcHJvdG5hbWUsIGNsbnQtPmNsX3NlcnZlcik7Ci0JCXJwY19leGl0KHRhc2ssIC1FSU8pOworCQlpZiAodGFzay0+dGtfZmxhZ3MgJiBSUENfVEFTS19USU1FT1VUKQorCQkJcnBjX2V4aXQodGFzaywgLUVUSU1FRE9VVCk7CisJCWVsc2UKKwkJCXJwY19leGl0KHRhc2ssIC1FSU8pOwogCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnQuYyBiL25ldC9zdW5ycGMveHBydC5jCmluZGV4IDk0OTRjMzcuLmNlNWViNjggMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydC5jCisrKyBiL25ldC9zdW5ycGMveHBydC5jCkBAIC05MDYsNiArOTA2LDcgQEAKIAl9CiAKIAlkcHJpbnRrKCJSUEM6ICU1dSB4bWl0IGNvbXBsZXRlXG4iLCB0YXNrLT50a19waWQpOworCXRhc2stPnRrX2ZsYWdzIHw9IFJQQ19UQVNLX1NFTlQ7CiAJc3Bpbl9sb2NrX2JoKCZ4cHJ0LT50cmFuc3BvcnRfbG9jayk7CiAKIAl4cHJ0LT5vcHMtPnNldF9yZXRyYW5zX3RpbWVvdXQodGFzayk7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9hZGRyLmggYi9uZXQvdGlwYy9hZGRyLmgKaW5kZXggODk3MWFiYS4uZTRmMzVhZiAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvYWRkci5oCisrKyBiL25ldC90aXBjL2FkZHIuaApAQCAtMzcsMTQgKzM3LDE3IEBACiAjaWZuZGVmIF9USVBDX0FERFJfSAogI2RlZmluZSBfVElQQ19BRERSX0gKIAorI2RlZmluZSBUSVBDX1pPTkVfTUFTSwkJMHhmZjAwMDAwMHUKKyNkZWZpbmUgVElQQ19DTFVTVEVSX01BU0sJMHhmZmZmZjAwMHUKKwogc3RhdGljIGlubGluZSB1MzIgdGlwY196b25lX21hc2sodTMyIGFkZHIpCiB7Ci0JcmV0dXJuIGFkZHIgJiAweGZmMDAwMDAwdTsKKwlyZXR1cm4gYWRkciAmIFRJUENfWk9ORV9NQVNLOwogfQogCiBzdGF0aWMgaW5saW5lIHUzMiB0aXBjX2NsdXN0ZXJfbWFzayh1MzIgYWRkcikKIHsKLQlyZXR1cm4gYWRkciAmIDB4ZmZmZmYwMDB1OworCXJldHVybiBhZGRyICYgVElQQ19DTFVTVEVSX01BU0s7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGluX293bl9jbHVzdGVyKHUzMiBhZGRyKQpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvYmNhc3QuYyBiL25ldC90aXBjL2JjYXN0LmMKaW5kZXggN2RjMWRjNy4uZmE2OGQxZSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvYmNhc3QuYworKysgYi9uZXQvdGlwYy9iY2FzdC5jCkBAIC00NCwxMyArNDQsNiBAQAogCiAjZGVmaW5lIEJDTElOS19XSU5fREVGQVVMVCAyMAkJLyogYmNhc3QgbGluayB3aW5kb3cgc2l6ZSAoZGVmYXVsdCkgKi8KIAotLyoKLSAqIExvc3MgcmF0ZSBmb3IgaW5jb21pbmcgYnJvYWRjYXN0IGZyYW1lczsgdXNlZCB0byB0ZXN0IHJldHJhbnNtaXNzaW9uIGNvZGUuCi0gKiBTZXQgdG8gTiB0byBjYXVzZSBldmVyeSBOJ3RoIGZyYW1lIHRvIGJlIGRpc2NhcmRlZDsgMCA9PiBkb24ndCBkaXNjYXJkIGFueS4KLSAqLwotCi0jZGVmaW5lIFRJUENfQkNBU1RfTE9TU19SQVRFIDAKLQogLyoqCiAgKiBzdHJ1Y3QgYmNiZWFyZXJfcGFpciAtIGEgcGFpciBvZiBiZWFyZXJzIHVzZWQgYnkgYnJvYWRjYXN0IGxpbmsKICAqIEBwcmltYXJ5OiBwb2ludGVyIHRvIHByaW1hcnkgYmVhcmVyCkBAIC00MTQsOSArNDA3LDcgQEAKIAlzcGluX2xvY2tfYmgoJmJjX2xvY2spOwogCiAJcmVzID0gdGlwY19saW5rX3NlbmRfYnVmKGJjbCwgYnVmKTsKLQlpZiAodW5saWtlbHkocmVzID09IC1FTElOS0NPTkcpKQotCQlidWZfZGlzY2FyZChidWYpOwotCWVsc2UKKwlpZiAobGlrZWx5KHJlcyA+IDApKQogCQliY2xpbmtfc2V0X2xhc3Rfc2VudCgpOwogCiAJYmNsLT5zdGF0cy5xdWV1ZV9zel9jb3VudHMrKzsKQEAgLTQzNCw5ICs0MjUsNiBAQAogCiB2b2lkIHRpcGNfYmNsaW5rX3JlY3ZfcGt0KHN0cnVjdCBza19idWZmICpidWYpCiB7Ci0jaWYgKFRJUENfQkNBU1RfTE9TU19SQVRFKQotCXN0YXRpYyBpbnQgcnhfY291bnQ7Ci0jZW5kaWYKIAlzdHJ1Y3QgdGlwY19tc2cgKm1zZyA9IGJ1Zl9tc2coYnVmKTsKIAlzdHJ1Y3QgdGlwY19ub2RlICpub2RlID0gdGlwY19ub2RlX2ZpbmQobXNnX3ByZXZub2RlKG1zZykpOwogCXUzMiBuZXh0X2luOwpAQCAtNDcwLDE0ICs0NTgsNiBAQAogCQlyZXR1cm47CiAJfQogCi0jaWYgKFRJUENfQkNBU1RfTE9TU19SQVRFKQotCWlmICgrK3J4X2NvdW50ID09IFRJUENfQkNBU1RfTE9TU19SQVRFKSB7Ci0JCXJ4X2NvdW50ID0gMDsKLQkJYnVmX2Rpc2NhcmQoYnVmKTsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZgotCiAJdGlwY19ub2RlX2xvY2sobm9kZSk7CiByZWNlaXZlOgogCWRlZmVycmVkID0gbm9kZS0+YmNsaW5rLmRlZmVycmVkX2hlYWQ7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9iZWFyZXIuYyBiL25ldC90aXBjL2JlYXJlci5jCmluZGV4IDQxMTcxOWYuLjg1MjA5ZWEgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2JlYXJlci5jCisrKyBiL25ldC90aXBjL2JlYXJlci5jCkBAIC00Niw2ICs0Niw4IEBACiAKIHN0cnVjdCB0aXBjX2JlYXJlciB0aXBjX2JlYXJlcnNbTUFYX0JFQVJFUlNdOwogCitzdGF0aWMgdm9pZCBiZWFyZXJfZGlzYWJsZShzdHJ1Y3QgdGlwY19iZWFyZXIgKmJfcHRyKTsKKwogLyoqCiAgKiBtZWRpYV9uYW1lX3ZhbGlkIC0gdmFsaWRhdGUgbWVkaWEgbmFtZQogICoKQEAgLTM0MiwxNSArMzQ0LDE1IEBACiB2b2lkIHRpcGNfYmVhcmVyX2FkZF9kZXN0KHN0cnVjdCB0aXBjX2JlYXJlciAqYl9wdHIsIHUzMiBkZXN0KQogewogCXRpcGNfbm1hcF9hZGQoJmJfcHRyLT5ub2RlcywgZGVzdCk7Ci0JdGlwY19kaXNjX3VwZGF0ZV9saW5rX3JlcShiX3B0ci0+bGlua19yZXEpOwogCXRpcGNfYmNiZWFyZXJfc29ydCgpOworCXRpcGNfZGlzY19hZGRfZGVzdChiX3B0ci0+bGlua19yZXEpOwogfQogCiB2b2lkIHRpcGNfYmVhcmVyX3JlbW92ZV9kZXN0KHN0cnVjdCB0aXBjX2JlYXJlciAqYl9wdHIsIHUzMiBkZXN0KQogewogCXRpcGNfbm1hcF9yZW1vdmUoJmJfcHRyLT5ub2RlcywgZGVzdCk7Ci0JdGlwY19kaXNjX3VwZGF0ZV9saW5rX3JlcShiX3B0ci0+bGlua19yZXEpOwogCXRpcGNfYmNiZWFyZXJfc29ydCgpOworCXRpcGNfZGlzY19yZW1vdmVfZGVzdChiX3B0ci0+bGlua19yZXEpOwogfQogCiAvKgpAQCAtNDkzLDggKzQ5NSwxNSBAQAogCQl3YXJuKCJCZWFyZXIgPCVzPiByZWplY3RlZCwgaWxsZWdhbCBuYW1lXG4iLCBuYW1lKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWlmICghdGlwY19hZGRyX2RvbWFpbl92YWxpZChkaXNjX2RvbWFpbikgfHwKLQkgICAgIXRpcGNfaW5fc2NvcGUoZGlzY19kb21haW4sIHRpcGNfb3duX2FkZHIpKSB7CisJaWYgKHRpcGNfYWRkcl9kb21haW5fdmFsaWQoZGlzY19kb21haW4pICYmCisJICAgIChkaXNjX2RvbWFpbiAhPSB0aXBjX293bl9hZGRyKSkgeworCQlpZiAodGlwY19pbl9zY29wZShkaXNjX2RvbWFpbiwgdGlwY19vd25fYWRkcikpIHsKKwkJCWRpc2NfZG9tYWluID0gdGlwY19vd25fYWRkciAmIFRJUENfQ0xVU1RFUl9NQVNLOworCQkJcmVzID0gMDsgICAvKiBhY2NlcHQgYW55IG5vZGUgaW4gb3duIGNsdXN0ZXIgKi8KKwkJfSBlbHNlIGlmIChpbl9vd25fY2x1c3RlcihkaXNjX2RvbWFpbikpCisJCQlyZXMgPSAwOyAgIC8qIGFjY2VwdCBzcGVjaWZpZWQgbm9kZSBpbiBvd24gY2x1c3RlciAqLworCX0KKwlpZiAocmVzKSB7CiAJCXdhcm4oIkJlYXJlciA8JXM+IHJlamVjdGVkLCBpbGxlZ2FsIGRpc2NvdmVyeSBkb21haW5cbiIsIG5hbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC01MTEsNyArNTIwLDcgQEAKIAlpZiAoIW1fcHRyKSB7CiAJCXdhcm4oIkJlYXJlciA8JXM+IHJlamVjdGVkLCBtZWRpYSA8JXM+IG5vdCByZWdpc3RlcmVkXG4iLCBuYW1lLAogCQkgICAgIGJfbmFtZS5tZWRpYV9uYW1lKTsKLQkJZ290byBmYWlsZWQ7CisJCWdvdG8gZXhpdDsKIAl9CiAKIAlpZiAocHJpb3JpdHkgPT0gVElQQ19NRURJQV9MSU5LX1BSSSkKQEAgLTUyNywxNCArNTM2LDE0IEBACiAJCX0KIAkJaWYgKCFzdHJjbXAobmFtZSwgdGlwY19iZWFyZXJzW2ldLm5hbWUpKSB7CiAJCQl3YXJuKCJCZWFyZXIgPCVzPiByZWplY3RlZCwgYWxyZWFkeSBlbmFibGVkXG4iLCBuYW1lKTsKLQkJCWdvdG8gZmFpbGVkOworCQkJZ290byBleGl0OwogCQl9CiAJCWlmICgodGlwY19iZWFyZXJzW2ldLnByaW9yaXR5ID09IHByaW9yaXR5KSAmJgogCQkgICAgKCsrd2l0aF90aGlzX3ByaW8gPiAyKSkgewogCQkJaWYgKHByaW9yaXR5LS0gPT0gMCkgewogCQkJCXdhcm4oIkJlYXJlciA8JXM+IHJlamVjdGVkLCBkdXBsaWNhdGUgcHJpb3JpdHlcbiIsCiAJCQkJICAgICBuYW1lKTsKLQkJCQlnb3RvIGZhaWxlZDsKKwkJCQlnb3RvIGV4aXQ7CiAJCQl9CiAJCQl3YXJuKCJCZWFyZXIgPCVzPiBwcmlvcml0eSBhZGp1c3RtZW50IHJlcXVpcmVkICV1LT4ldVxuIiwKIAkJCSAgICAgbmFtZSwgcHJpb3JpdHkgKyAxLCBwcmlvcml0eSk7CkBAIC01NDQsNyArNTUzLDcgQEAKIAlpZiAoYmVhcmVyX2lkID49IE1BWF9CRUFSRVJTKSB7CiAJCXdhcm4oIkJlYXJlciA8JXM+IHJlamVjdGVkLCBiZWFyZXIgbGltaXQgcmVhY2hlZCAoJXUpXG4iLAogCQkgICAgIG5hbWUsIE1BWF9CRUFSRVJTKTsKLQkJZ290byBmYWlsZWQ7CisJCWdvdG8gZXhpdDsKIAl9CiAKIAliX3B0ciA9ICZ0aXBjX2JlYXJlcnNbYmVhcmVyX2lkXTsKQEAgLTU1Miw3ICs1NjEsNyBAQAogCXJlcyA9IG1fcHRyLT5lbmFibGVfYmVhcmVyKGJfcHRyKTsKIAlpZiAocmVzKSB7CiAJCXdhcm4oIkJlYXJlciA8JXM+IHJlamVjdGVkLCBlbmFibGUgZmFpbHVyZSAoJWQpXG4iLCBuYW1lLCAtcmVzKTsKLQkJZ290byBmYWlsZWQ7CisJCWdvdG8gZXhpdDsKIAl9CiAKIAliX3B0ci0+aWRlbnRpdHkgPSBiZWFyZXJfaWQ7CkBAIC01NjIsMTQgKzU3MSwxOCBAQAogCWJfcHRyLT5wcmlvcml0eSA9IHByaW9yaXR5OwogCUlOSVRfTElTVF9IRUFEKCZiX3B0ci0+Y29uZ19saW5rcyk7CiAJSU5JVF9MSVNUX0hFQUQoJmJfcHRyLT5saW5rcyk7Ci0JYl9wdHItPmxpbmtfcmVxID0gdGlwY19kaXNjX2luaXRfbGlua19yZXEoYl9wdHIsICZtX3B0ci0+YmNhc3RfYWRkciwKLQkJCQkJCSAgZGlzY19kb21haW4pOwogCXNwaW5fbG9ja19pbml0KCZiX3B0ci0+bG9jayk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZ0aXBjX25ldF9sb2NrKTsKKworCXJlcyA9IHRpcGNfZGlzY19jcmVhdGUoYl9wdHIsICZtX3B0ci0+YmNhc3RfYWRkciwgZGlzY19kb21haW4pOworCWlmIChyZXMpIHsKKwkJYmVhcmVyX2Rpc2FibGUoYl9wdHIpOworCQl3YXJuKCJCZWFyZXIgPCVzPiByZWplY3RlZCwgZGlzY292ZXJ5IG9iamVjdCBjcmVhdGlvbiBmYWlsZWRcbiIsCisJCSAgICAgbmFtZSk7CisJCWdvdG8gZXhpdDsKKwl9CiAJaW5mbygiRW5hYmxlZCBiZWFyZXIgPCVzPiwgZGlzY292ZXJ5IGRvbWFpbiAlcywgcHJpb3JpdHkgJXVcbiIsCiAJICAgICBuYW1lLCB0aXBjX2FkZHJfc3RyaW5nX2ZpbGwoYWRkcl9zdHJpbmcsIGRpc2NfZG9tYWluKSwgcHJpb3JpdHkpOwotCXJldHVybiAwOwotZmFpbGVkOgorZXhpdDoKIAl3cml0ZV91bmxvY2tfYmgoJnRpcGNfbmV0X2xvY2spOwogCXJldHVybiByZXM7CiB9CkBAIC02MjAsMTQgKzYzMywxNCBAQAogCXN0cnVjdCBsaW5rICp0ZW1wX2xfcHRyOwogCiAJaW5mbygiRGlzYWJsaW5nIGJlYXJlciA8JXM+XG4iLCBiX3B0ci0+bmFtZSk7Ci0JdGlwY19kaXNjX3N0b3BfbGlua19yZXEoYl9wdHItPmxpbmtfcmVxKTsKIAlzcGluX2xvY2tfYmgoJmJfcHRyLT5sb2NrKTsKLQliX3B0ci0+bGlua19yZXEgPSBOVUxMOwogCWJfcHRyLT5ibG9ja2VkID0gMTsKIAliX3B0ci0+bWVkaWEtPmRpc2FibGVfYmVhcmVyKGJfcHRyKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobF9wdHIsIHRlbXBfbF9wdHIsICZiX3B0ci0+bGlua3MsIGxpbmtfbGlzdCkgewogCQl0aXBjX2xpbmtfZGVsZXRlKGxfcHRyKTsKIAl9CisJaWYgKGJfcHRyLT5saW5rX3JlcSkKKwkJdGlwY19kaXNjX2RlbGV0ZShiX3B0ci0+bGlua19yZXEpOwogCXNwaW5fdW5sb2NrX2JoKCZiX3B0ci0+bG9jayk7CiAJbWVtc2V0KGJfcHRyLCAwLCBzaXplb2Yoc3RydWN0IHRpcGNfYmVhcmVyKSk7CiB9CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9jb3JlLmMgYi9uZXQvdGlwYy9jb3JlLmMKaW5kZXggYzlhNzNlNy4uOTQzYjZhZiAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvY29yZS5jCisrKyBiL25ldC90aXBjL2NvcmUuYwpAQCAtMTc5LDggKzE3OSw3IEBACiAJaWYgKHRpcGNfbG9nX3Jlc2l6ZShDT05GSUdfVElQQ19MT0cpICE9IDApCiAJCXdhcm4oIlVuYWJsZSB0byBjcmVhdGUgbG9nIGJ1ZmZlclxuIik7CiAKLQlpbmZvKCJBY3RpdmF0ZWQgKHZlcnNpb24gIiBUSVBDX01PRF9WRVIKLQkgICAgICIgY29tcGlsZWQgIiBfX0RBVEVfXyAiICIgX19USU1FX18gIilcbiIpOworCWluZm8oIkFjdGl2YXRlZCAodmVyc2lvbiAiIFRJUENfTU9EX1ZFUiAiKVxuIik7CiAKIAl0aXBjX293bl9hZGRyID0gMDsKIAl0aXBjX3JlbW90ZV9tYW5hZ2VtZW50ID0gMTsKZGlmZiAtLWdpdCBhL25ldC90aXBjL2Rpc2NvdmVyLmMgYi9uZXQvdGlwYy9kaXNjb3Zlci5jCmluZGV4IDQ5MWVmZjUuLjA5ODc5MzMgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2Rpc2NvdmVyLmMKKysrIGIvbmV0L3RpcGMvZGlzY292ZXIuYwpAQCAtMzksMTkgKzM5LDE3IEBACiAjaW5jbHVkZSAiZGlzY292ZXIuaCIKIAogI2RlZmluZSBUSVBDX0xJTktfUkVRX0lOSVQJMTI1CS8qIG1pbiBkZWxheSBkdXJpbmcgYmVhcmVyIHN0YXJ0IHVwICovCi0jZGVmaW5lIFRJUENfTElOS19SRVFfRkFTVAkyMDAwCS8qIG5vcm1hbCBkZWxheSBpZiBiZWFyZXIgaGFzIG5vIGxpbmtzICovCi0jZGVmaW5lIFRJUENfTElOS19SRVFfU0xPVwk2MDAwMDAJLyogbm9ybWFsIGRlbGF5IGlmIGJlYXJlciBoYXMgbGlua3MgKi8KLQotLyoKLSAqIFRPRE86IE1vc3Qgb2YgdGhlIGludGVyLWNsdXN0ZXIgc2V0dXAgc3R1ZmYgc2hvdWxkIGJlCi0gKiByZXdyaXR0ZW4sIGFuZCBiZSBtYWRlIGNvbmZvcm1hbnQgd2l0aCBzcGVjaWZpY2F0aW9uLgotICovCisjZGVmaW5lIFRJUENfTElOS19SRVFfRkFTVAkxMDAwCS8qIG1heCBkZWxheSBpZiBiZWFyZXIgaGFzIG5vIGxpbmtzICovCisjZGVmaW5lIFRJUENfTElOS19SRVFfU0xPVwk2MDAwMAkvKiBtYXggZGVsYXkgaWYgYmVhcmVyIGhhcyBsaW5rcyAqLworI2RlZmluZSBUSVBDX0xJTktfUkVRX0lOQUNUSVZFCTB4ZmZmZmZmZmYgLyogaW5kaWNhdGVzIG5vIHRpbWVyIGluIHVzZSAqLwogCiAKIC8qKgogICogc3RydWN0IGxpbmtfcmVxIC0gaW5mb3JtYXRpb24gYWJvdXQgYW4gb25nb2luZyBsaW5rIHNldHVwIHJlcXVlc3QKICAqIEBiZWFyZXI6IGJlYXJlciBpc3N1aW5nIHJlcXVlc3RzCiAgKiBAZGVzdDogZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgcmVxdWVzdCBtZXNzYWdlcworICogQGRvbWFpbjogbmV0d29yayBkb21haW4gdG8gd2hpY2ggbGlua3MgY2FuIGJlIGVzdGFibGlzaGVkCisgKiBAbnVtX25vZGVzOiBudW1iZXIgb2Ygbm9kZXMgY3VycmVudGx5IGRpc2NvdmVyZWQgKGkuZS4gd2l0aCBhbiBhY3RpdmUgbGluaykKICAqIEBidWY6IHJlcXVlc3QgbWVzc2FnZSB0byBiZSAocmVwZWF0ZWRseSkgc2VudAogICogQHRpbWVyOiB0aW1lciBnb3Zlcm5pbmcgcGVyaW9kIGJldHdlZW4gcmVxdWVzdHMKICAqIEB0aW1lcl9pbnR2OiBjdXJyZW50IGludGVydmFsIGJldHdlZW4gcmVxdWVzdHMgKGluIG1zKQpAQCAtNTksNiArNTcsOCBAQAogc3RydWN0IGxpbmtfcmVxIHsKIAlzdHJ1Y3QgdGlwY19iZWFyZXIgKmJlYXJlcjsKIAlzdHJ1Y3QgdGlwY19tZWRpYV9hZGRyIGRlc3Q7CisJdTMyIGRvbWFpbjsKKwlpbnQgbnVtX25vZGVzOwogCXN0cnVjdCBza19idWZmICpidWY7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiAJdW5zaWduZWQgaW50IHRpbWVyX2ludHY7CkBAIC0xNDcsNyArMTQ3LDcgQEAKIAl9CiAJaWYgKCF0aXBjX2luX3Njb3BlKGRlc3QsIHRpcGNfb3duX2FkZHIpKQogCQlyZXR1cm47Ci0JaWYgKCFpbl9vd25fY2x1c3RlcihvcmlnKSkKKwlpZiAoIXRpcGNfaW5fc2NvcGUoYl9wdHItPmxpbmtfcmVxLT5kb21haW4sIG9yaWcpKQogCQlyZXR1cm47CiAKIAkvKiBMb2NhdGUgc3RydWN0dXJlIGNvcnJlc3BvbmRpbmcgdG8gcmVxdWVzdGluZyBub2RlICovCkBAIC0yMTQsNDQgKzIxNCw1NCBAQAogfQogCiAvKioKLSAqIHRpcGNfZGlzY19zdG9wX2xpbmtfcmVxIC0gc3RvcCBzZW5kaW5nIHBlcmlvZGljIGxpbmsgc2V0dXAgcmVxdWVzdHMKKyAqIGRpc2NfdXBkYXRlIC0gdXBkYXRlIGZyZXF1ZW5jeSBvZiBwZXJpb2RpYyBsaW5rIHNldHVwIHJlcXVlc3RzCiAgKiBAcmVxOiBwdHIgdG8gbGluayByZXF1ZXN0IHN0cnVjdHVyZQorICoKKyAqIFJlaW5pdGlhdGVzIGRpc2NvdmVyeSBwcm9jZXNzIGlmIGRpc2NvdmVyeSBvYmplY3QgaGFzIG5vIGFzc29jaWF0ZWQgbm9kZXMKKyAqIGFuZCBpcyBlaXRoZXIgbm90IGN1cnJlbnRseSBzZWFyY2hpbmcgb3IgaXMgc2VhcmNoaW5nIGF0IGEgc2xvdyByYXRlCiAgKi8KIAotdm9pZCB0aXBjX2Rpc2Nfc3RvcF9saW5rX3JlcShzdHJ1Y3QgbGlua19yZXEgKnJlcSkKK3N0YXRpYyB2b2lkIGRpc2NfdXBkYXRlKHN0cnVjdCBsaW5rX3JlcSAqcmVxKQogewotCWlmICghcmVxKQotCQlyZXR1cm47Ci0KLQlrX2NhbmNlbF90aW1lcigmcmVxLT50aW1lcik7Ci0Ja190ZXJtX3RpbWVyKCZyZXEtPnRpbWVyKTsKLQlidWZfZGlzY2FyZChyZXEtPmJ1Zik7Ci0Ja2ZyZWUocmVxKTsKKwlpZiAoIXJlcS0+bnVtX25vZGVzKSB7CisJCWlmICgocmVxLT50aW1lcl9pbnR2ID09IFRJUENfTElOS19SRVFfSU5BQ1RJVkUpIHx8CisJCSAgICAocmVxLT50aW1lcl9pbnR2ID4gVElQQ19MSU5LX1JFUV9GQVNUKSkgeworCQkJcmVxLT50aW1lcl9pbnR2ID0gVElQQ19MSU5LX1JFUV9JTklUOworCQkJa19zdGFydF90aW1lcigmcmVxLT50aW1lciwgcmVxLT50aW1lcl9pbnR2KTsKKwkJfQorCX0KIH0KIAogLyoqCi0gKiB0aXBjX2Rpc2NfdXBkYXRlX2xpbmtfcmVxIC0gdXBkYXRlIGZyZXF1ZW5jeSBvZiBwZXJpb2RpYyBsaW5rIHNldHVwIHJlcXVlc3RzCisgKiB0aXBjX2Rpc2NfYWRkX2Rlc3QgLSBpbmNyZW1lbnQgc2V0IG9mIGRpc2NvdmVyZWQgbm9kZXMKICAqIEByZXE6IHB0ciB0byBsaW5rIHJlcXVlc3Qgc3RydWN0dXJlCiAgKi8KIAotdm9pZCB0aXBjX2Rpc2NfdXBkYXRlX2xpbmtfcmVxKHN0cnVjdCBsaW5rX3JlcSAqcmVxKQordm9pZCB0aXBjX2Rpc2NfYWRkX2Rlc3Qoc3RydWN0IGxpbmtfcmVxICpyZXEpCiB7Ci0JaWYgKCFyZXEpCi0JCXJldHVybjsKKwlyZXEtPm51bV9ub2RlcysrOworfQogCi0JaWYgKHJlcS0+dGltZXJfaW50diA9PSBUSVBDX0xJTktfUkVRX1NMT1cpIHsKLQkJaWYgKCFyZXEtPmJlYXJlci0+bm9kZXMuY291bnQpIHsKLQkJCXJlcS0+dGltZXJfaW50diA9IFRJUENfTElOS19SRVFfRkFTVDsKLQkJCWtfc3RhcnRfdGltZXIoJnJlcS0+dGltZXIsIHJlcS0+dGltZXJfaW50dik7Ci0JCX0KLQl9IGVsc2UgaWYgKHJlcS0+dGltZXJfaW50diA9PSBUSVBDX0xJTktfUkVRX0ZBU1QpIHsKLQkJaWYgKHJlcS0+YmVhcmVyLT5ub2Rlcy5jb3VudCkgewotCQkJcmVxLT50aW1lcl9pbnR2ID0gVElQQ19MSU5LX1JFUV9TTE9XOwotCQkJa19zdGFydF90aW1lcigmcmVxLT50aW1lciwgcmVxLT50aW1lcl9pbnR2KTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIGxlYXZlIHRpbWVyICJhcyBpcyIgaWYgaGF2ZW4ndCB5ZXQgcmVhY2hlZCBhICJub3JtYWwiIHJhdGUgKi8KLQl9CisvKioKKyAqIHRpcGNfZGlzY19yZW1vdmVfZGVzdCAtIGRlY3JlbWVudCBzZXQgb2YgZGlzY292ZXJlZCBub2RlcworICogQHJlcTogcHRyIHRvIGxpbmsgcmVxdWVzdCBzdHJ1Y3R1cmUKKyAqLworCit2b2lkIHRpcGNfZGlzY19yZW1vdmVfZGVzdChzdHJ1Y3QgbGlua19yZXEgKnJlcSkKK3sKKwlyZXEtPm51bV9ub2Rlcy0tOworCWRpc2NfdXBkYXRlKHJlcSk7Cit9CisKKy8qKgorICogZGlzY19zZW5kX21zZyAtIHNlbmQgbGluayBzZXR1cCByZXF1ZXN0IG1lc3NhZ2UKKyAqIEByZXE6IHB0ciB0byBsaW5rIHJlcXVlc3Qgc3RydWN0dXJlCisgKi8KKworc3RhdGljIHZvaWQgZGlzY19zZW5kX21zZyhzdHJ1Y3QgbGlua19yZXEgKnJlcSkKK3sKKwlpZiAoIXJlcS0+YmVhcmVyLT5ibG9ja2VkKQorCQl0aXBjX2JlYXJlcl9zZW5kKHJlcS0+YmVhcmVyLCByZXEtPmJ1ZiwgJnJlcS0+ZGVzdCk7CiB9CiAKIC8qKgpAQCAtMjYzLDU2ICsyNzMsODYgQEAKIAogc3RhdGljIHZvaWQgZGlzY190aW1lb3V0KHN0cnVjdCBsaW5rX3JlcSAqcmVxKQogeworCWludCBtYXhfZGVsYXk7CisKIAlzcGluX2xvY2tfYmgoJnJlcS0+YmVhcmVyLT5sb2NrKTsKIAotCXJlcS0+YmVhcmVyLT5tZWRpYS0+c2VuZF9tc2cocmVxLT5idWYsIHJlcS0+YmVhcmVyLCAmcmVxLT5kZXN0KTsKKwkvKiBTdG9wIHNlYXJjaGluZyBpZiBvbmx5IGRlc2lyZWQgbm9kZSBoYXMgYmVlbiBmb3VuZCAqLwogCi0JaWYgKChyZXEtPnRpbWVyX2ludHYgPT0gVElQQ19MSU5LX1JFUV9TTE9XKSB8fAotCSAgICAocmVxLT50aW1lcl9pbnR2ID09IFRJUENfTElOS19SRVFfRkFTVCkpIHsKLQkJLyogbGVhdmUgdGltZXIgaW50ZXJ2YWwgImFzIGlzIiBpZiBhbHJlYWR5IGF0IGEgIm5vcm1hbCIgcmF0ZSAqLwotCX0gZWxzZSB7Ci0JCXJlcS0+dGltZXJfaW50diAqPSAyOwotCQlpZiAocmVxLT50aW1lcl9pbnR2ID4gVElQQ19MSU5LX1JFUV9GQVNUKQotCQkJcmVxLT50aW1lcl9pbnR2ID0gVElQQ19MSU5LX1JFUV9GQVNUOwotCQlpZiAoKHJlcS0+dGltZXJfaW50diA9PSBUSVBDX0xJTktfUkVRX0ZBU1QpICYmCi0JCSAgICAocmVxLT5iZWFyZXItPm5vZGVzLmNvdW50KSkKLQkJCXJlcS0+dGltZXJfaW50diA9IFRJUENfTElOS19SRVFfU0xPVzsKKwlpZiAodGlwY19ub2RlKHJlcS0+ZG9tYWluKSAmJiByZXEtPm51bV9ub2RlcykgeworCQlyZXEtPnRpbWVyX2ludHYgPSBUSVBDX0xJTktfUkVRX0lOQUNUSVZFOworCQlnb3RvIGV4aXQ7CiAJfQotCWtfc3RhcnRfdGltZXIoJnJlcS0+dGltZXIsIHJlcS0+dGltZXJfaW50dik7CiAKKwkvKgorCSAqIFNlbmQgZGlzY292ZXJ5IG1lc3NhZ2UsIHRoZW4gdXBkYXRlIGRpc2NvdmVyeSB0aW1lcgorCSAqCisJICogS2VlcCBkb3VibGluZyB0aW1lIGJldHdlZW4gcmVxdWVzdHMgdW50aWwgbGltaXQgaXMgcmVhY2hlZDsKKwkgKiBob2xkIGF0IGZhc3QgcG9sbGluZyByYXRlIGlmIGRvbid0IGhhdmUgYW55IGFzc29jaWF0ZWQgbm9kZXMsCisJICogb3RoZXJ3aXNlIGhvbGQgYXQgc2xvdyBwb2xsaW5nIHJhdGUKKwkgKi8KKworCWRpc2Nfc2VuZF9tc2cocmVxKTsKKworCXJlcS0+dGltZXJfaW50diAqPSAyOworCWlmIChyZXEtPm51bV9ub2RlcykKKwkJbWF4X2RlbGF5ID0gVElQQ19MSU5LX1JFUV9TTE9XOworCWVsc2UKKwkJbWF4X2RlbGF5ID0gVElQQ19MSU5LX1JFUV9GQVNUOworCWlmIChyZXEtPnRpbWVyX2ludHYgPiBtYXhfZGVsYXkpCisJCXJlcS0+dGltZXJfaW50diA9IG1heF9kZWxheTsKKworCWtfc3RhcnRfdGltZXIoJnJlcS0+dGltZXIsIHJlcS0+dGltZXJfaW50dik7CitleGl0OgogCXNwaW5fdW5sb2NrX2JoKCZyZXEtPmJlYXJlci0+bG9jayk7CiB9CiAKIC8qKgotICogdGlwY19kaXNjX2luaXRfbGlua19yZXEgLSBzdGFydCBzZW5kaW5nIHBlcmlvZGljIGxpbmsgc2V0dXAgcmVxdWVzdHMKKyAqIHRpcGNfZGlzY19jcmVhdGUgLSBjcmVhdGUgb2JqZWN0IHRvIHNlbmQgcGVyaW9kaWMgbGluayBzZXR1cCByZXF1ZXN0cwogICogQGJfcHRyOiBwdHIgdG8gYmVhcmVyIGlzc3VpbmcgcmVxdWVzdHMKICAqIEBkZXN0OiBkZXN0aW5hdGlvbiBhZGRyZXNzIGZvciByZXF1ZXN0IG1lc3NhZ2VzCi0gKiBAZGVzdF9kb21haW46IG5ldHdvcmsgZG9tYWluIG9mIG5vZGUocykgd2hpY2ggc2hvdWxkIHJlc3BvbmQgdG8gbWVzc2FnZQorICogQGRlc3RfZG9tYWluOiBuZXR3b3JrIGRvbWFpbiB0byB3aGljaCBsaW5rcyBjYW4gYmUgZXN0YWJsaXNoZWQKICAqCi0gKiBSZXR1cm5zIHBvaW50ZXIgdG8gbGluayByZXF1ZXN0IHN0cnVjdHVyZSwgb3IgTlVMTCBpZiB1bmFibGUgdG8gY3JlYXRlLgorICogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSAtZXJybm8uCiAgKi8KIAotc3RydWN0IGxpbmtfcmVxICp0aXBjX2Rpc2NfaW5pdF9saW5rX3JlcShzdHJ1Y3QgdGlwY19iZWFyZXIgKmJfcHRyLAotCQkJCQkgY29uc3Qgc3RydWN0IHRpcGNfbWVkaWFfYWRkciAqZGVzdCwKLQkJCQkJIHUzMiBkZXN0X2RvbWFpbikKK2ludCB0aXBjX2Rpc2NfY3JlYXRlKHN0cnVjdCB0aXBjX2JlYXJlciAqYl9wdHIsCisJCSAgICAgc3RydWN0IHRpcGNfbWVkaWFfYWRkciAqZGVzdCwgdTMyIGRlc3RfZG9tYWluKQogewogCXN0cnVjdCBsaW5rX3JlcSAqcmVxOwogCiAJcmVxID0ga21hbGxvYyhzaXplb2YoKnJlcSksIEdGUF9BVE9NSUMpOwogCWlmICghcmVxKQotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlyZXEtPmJ1ZiA9IHRpcGNfZGlzY19pbml0X21zZyhEU0NfUkVRX01TRywgZGVzdF9kb21haW4sIGJfcHRyKTsKIAlpZiAoIXJlcS0+YnVmKSB7CiAJCWtmcmVlKHJlcSk7Ci0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gLUVOT01TRzsKIAl9CiAKIAltZW1jcHkoJnJlcS0+ZGVzdCwgZGVzdCwgc2l6ZW9mKCpkZXN0KSk7CiAJcmVxLT5iZWFyZXIgPSBiX3B0cjsKKwlyZXEtPmRvbWFpbiA9IGRlc3RfZG9tYWluOworCXJlcS0+bnVtX25vZGVzID0gMDsKIAlyZXEtPnRpbWVyX2ludHYgPSBUSVBDX0xJTktfUkVRX0lOSVQ7CiAJa19pbml0X3RpbWVyKCZyZXEtPnRpbWVyLCAoSGFuZGxlcilkaXNjX3RpbWVvdXQsICh1bnNpZ25lZCBsb25nKXJlcSk7CiAJa19zdGFydF90aW1lcigmcmVxLT50aW1lciwgcmVxLT50aW1lcl9pbnR2KTsKLQlyZXR1cm4gcmVxOworCWJfcHRyLT5saW5rX3JlcSA9IHJlcTsKKwlkaXNjX3NlbmRfbXNnKHJlcSk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdGlwY19kaXNjX2RlbGV0ZSAtIGRlc3Ryb3kgb2JqZWN0IHNlbmRpbmcgcGVyaW9kaWMgbGluayBzZXR1cCByZXF1ZXN0cworICogQHJlcTogcHRyIHRvIGxpbmsgcmVxdWVzdCBzdHJ1Y3R1cmUKKyAqLworCit2b2lkIHRpcGNfZGlzY19kZWxldGUoc3RydWN0IGxpbmtfcmVxICpyZXEpCit7CisJa19jYW5jZWxfdGltZXIoJnJlcS0+dGltZXIpOworCWtfdGVybV90aW1lcigmcmVxLT50aW1lcik7CisJYnVmX2Rpc2NhcmQocmVxLT5idWYpOworCWtmcmVlKHJlcSk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC90aXBjL2Rpc2NvdmVyLmggYi9uZXQvdGlwYy9kaXNjb3Zlci5oCmluZGV4IGU0OGExNjcuLmEzYWY1OTUgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2Rpc2NvdmVyLmgKKysrIGIvbmV0L3RpcGMvZGlzY292ZXIuaApAQCAtMzksMTIgKzM5LDExIEBACiAKIHN0cnVjdCBsaW5rX3JlcTsKIAotc3RydWN0IGxpbmtfcmVxICp0aXBjX2Rpc2NfaW5pdF9saW5rX3JlcShzdHJ1Y3QgdGlwY19iZWFyZXIgKmJfcHRyLAotCQkJCQkgY29uc3Qgc3RydWN0IHRpcGNfbWVkaWFfYWRkciAqZGVzdCwKLQkJCQkJIHUzMiBkZXN0X2RvbWFpbik7Ci12b2lkIHRpcGNfZGlzY191cGRhdGVfbGlua19yZXEoc3RydWN0IGxpbmtfcmVxICpyZXEpOwotdm9pZCB0aXBjX2Rpc2Nfc3RvcF9saW5rX3JlcShzdHJ1Y3QgbGlua19yZXEgKnJlcSk7Ci0KK2ludCB0aXBjX2Rpc2NfY3JlYXRlKHN0cnVjdCB0aXBjX2JlYXJlciAqYl9wdHIsIHN0cnVjdCB0aXBjX21lZGlhX2FkZHIgKmRlc3QsCisJCSAgICAgdTMyIGRlc3RfZG9tYWluKTsKK3ZvaWQgdGlwY19kaXNjX2RlbGV0ZShzdHJ1Y3QgbGlua19yZXEgKnJlcSk7Cit2b2lkIHRpcGNfZGlzY19hZGRfZGVzdChzdHJ1Y3QgbGlua19yZXEgKnJlcSk7Cit2b2lkIHRpcGNfZGlzY19yZW1vdmVfZGVzdChzdHJ1Y3QgbGlua19yZXEgKnJlcSk7CiB2b2lkIHRpcGNfZGlzY19yZWN2X21zZyhzdHJ1Y3Qgc2tfYnVmZiAqYnVmLCBzdHJ1Y3QgdGlwY19iZWFyZXIgKmJfcHRyKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9saW5rLmMgYi9uZXQvdGlwYy9saW5rLmMKaW5kZXggZWJmMzM4Zi4uNWVkNGI0ZiAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbGluay5jCisrKyBiL25ldC90aXBjL2xpbmsuYwpAQCAtOTIsNyArOTIsOCBAQAogc3RhdGljIHZvaWQgbGlua19zZXRfc3VwZXJ2aXNpb25fcHJvcHMoc3RydWN0IGxpbmsgKmxfcHRyLCB1MzIgdG9sZXJhbmNlKTsKIHN0YXRpYyBpbnQgIGxpbmtfc2VuZF9zZWN0aW9uc19sb25nKHN0cnVjdCB0aXBjX3BvcnQgKnNlbmRlciwKIAkJCQkgICAgc3RydWN0IGlvdmVjIGNvbnN0ICptc2dfc2VjdCwKLQkJCQkgICAgdTMyIG51bV9zZWN0LCB1MzIgZGVzdG5vZGUpOworCQkJCSAgICB1MzIgbnVtX3NlY3QsIHVuc2lnbmVkIGludCB0b3RhbF9sZW4sCisJCQkJICAgIHUzMiBkZXN0bm9kZSk7CiBzdGF0aWMgdm9pZCBsaW5rX2NoZWNrX2RlZnJhZ21fYnVmcyhzdHJ1Y3QgbGluayAqbF9wdHIpOwogc3RhdGljIHZvaWQgbGlua19zdGF0ZV9ldmVudChzdHJ1Y3QgbGluayAqbF9wdHIsIHUzMiBldmVudCk7CiBzdGF0aWMgdm9pZCBsaW5rX3Jlc2V0X3N0YXRpc3RpY3Moc3RydWN0IGxpbmsgKmxfcHRyKTsKQEAgLTg0Miw2ICs4NDMsMjUgQEAKIAkJbF9wdHItPnN0YXRzLm1heF9xdWV1ZV9zeiA9IGxfcHRyLT5vdXRfcXVldWVfc2l6ZTsKIH0KIAorc3RhdGljIHZvaWQgbGlua19hZGRfY2hhaW5fdG9fb3V0cXVldWUoc3RydWN0IGxpbmsgKmxfcHRyLAorCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqYnVmX2NoYWluLAorCQkJCSAgICAgICB1MzIgbG9uZ19tc2dubykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqYnVmOworCXN0cnVjdCB0aXBjX21zZyAqbXNnOworCisJaWYgKCFsX3B0ci0+bmV4dF9vdXQpCisJCWxfcHRyLT5uZXh0X291dCA9IGJ1Zl9jaGFpbjsKKwl3aGlsZSAoYnVmX2NoYWluKSB7CisJCWJ1ZiA9IGJ1Zl9jaGFpbjsKKwkJYnVmX2NoYWluID0gYnVmX2NoYWluLT5uZXh0OworCisJCW1zZyA9IGJ1Zl9tc2coYnVmKTsKKwkJbXNnX3NldF9sb25nX21zZ25vKG1zZywgbG9uZ19tc2dubyk7CisJCWxpbmtfYWRkX3RvX291dHF1ZXVlKGxfcHRyLCBidWYsIG1zZyk7CisJfQorfQorCiAvKgogICogdGlwY19saW5rX3NlbmRfYnVmKCkgaXMgdGhlICdmdWxsIHBhdGgnIGZvciBtZXNzYWdlcywgY2FsbGVkIGZyb20KICAqIGluc2lkZSBUSVBDIHdoZW4gdGhlICdmYXN0IHBhdGgnIGluIHRpcGNfc2VuZF9idWYKQEAgLTg2NCw4ICs4ODQsOSBAQAogCiAJaWYgKHVubGlrZWx5KHF1ZXVlX3NpemUgPj0gcXVldWVfbGltaXQpKSB7CiAJCWlmIChpbXAgPD0gVElQQ19DUklUSUNBTF9JTVBPUlRBTkNFKSB7Ci0JCQlyZXR1cm4gbGlua19zY2hlZHVsZV9wb3J0KGxfcHRyLCBtc2dfb3JpZ3BvcnQobXNnKSwKLQkJCQkJCSAgc2l6ZSk7CisJCQlsaW5rX3NjaGVkdWxlX3BvcnQobF9wdHIsIG1zZ19vcmlncG9ydChtc2cpLCBzaXplKTsKKwkJCWJ1Zl9kaXNjYXJkKGJ1Zik7CisJCQlyZXR1cm4gLUVMSU5LQ09ORzsKIAkJfQogCQlidWZfZGlzY2FyZChidWYpOwogCQlpZiAoaW1wID4gQ09OTl9NQU5BR0VSKSB7CkBAIC0xMDQyLDYgKzEwNjMsNyBAQAogaW50IHRpcGNfbGlua19zZW5kX3NlY3Rpb25zX2Zhc3Qoc3RydWN0IHRpcGNfcG9ydCAqc2VuZGVyLAogCQkJCSBzdHJ1Y3QgaW92ZWMgY29uc3QgKm1zZ19zZWN0LAogCQkJCSBjb25zdCB1MzIgbnVtX3NlY3QsCisJCQkJIHVuc2lnbmVkIGludCB0b3RhbF9sZW4sCiAJCQkJIHUzMiBkZXN0YWRkcikKIHsKIAlzdHJ1Y3QgdGlwY19tc2cgKmhkciA9ICZzZW5kZXItPnBoZHI7CkBAIC0xMDU3LDggKzEwNzksOCBAQAogCSAqIChNdXN0IG5vdCBob2xkIGFueSBsb2NrcyB3aGlsZSBidWlsZGluZyBtZXNzYWdlLikKIAkgKi8KIAotCXJlcyA9IHRpcGNfbXNnX2J1aWxkKGhkciwgbXNnX3NlY3QsIG51bV9zZWN0LCBzZW5kZXItPm1heF9wa3QsCi0JCQkhc2VuZGVyLT51c2VyX3BvcnQsICZidWYpOworCXJlcyA9IHRpcGNfbXNnX2J1aWxkKGhkciwgbXNnX3NlY3QsIG51bV9zZWN0LCB0b3RhbF9sZW4sCisJCQkgICAgIHNlbmRlci0+bWF4X3BrdCwgIXNlbmRlci0+dXNlcl9wb3J0LCAmYnVmKTsKIAogCXJlYWRfbG9ja19iaCgmdGlwY19uZXRfbG9jayk7CiAJbm9kZSA9IHRpcGNfbm9kZV9maW5kKGRlc3RhZGRyKTsKQEAgLTEwNjksOCArMTA5MSw2IEBACiAJCQlpZiAobGlrZWx5KGJ1ZikpIHsKIAkJCQlyZXMgPSBsaW5rX3NlbmRfYnVmX2Zhc3QobF9wdHIsIGJ1ZiwKIAkJCQkJCQkgJnNlbmRlci0+bWF4X3BrdCk7Ci0JCQkJaWYgKHVubGlrZWx5KHJlcyA8IDApKQotCQkJCQlidWZfZGlzY2FyZChidWYpOwogZXhpdDoKIAkJCQl0aXBjX25vZGVfdW5sb2NrKG5vZGUpOwogCQkJCXJlYWRfdW5sb2NrX2JoKCZ0aXBjX25ldF9sb2NrKTsKQEAgLTExMDUsNyArMTEyNSw4IEBACiAJCQkJZ290byBhZ2FpbjsKIAogCQkJcmV0dXJuIGxpbmtfc2VuZF9zZWN0aW9uc19sb25nKHNlbmRlciwgbXNnX3NlY3QsCi0JCQkJCQkgICAgICAgbnVtX3NlY3QsIGRlc3RhZGRyKTsKKwkJCQkJCSAgICAgICBudW1fc2VjdCwgdG90YWxfbGVuLAorCQkJCQkJICAgICAgIGRlc3RhZGRyKTsKIAkJfQogCQl0aXBjX25vZGVfdW5sb2NrKG5vZGUpOwogCX0KQEAgLTExMTcsNyArMTEzOCw3IEBACiAJCXJldHVybiB0aXBjX3JlamVjdF9tc2coYnVmLCBUSVBDX0VSUl9OT19OT0RFKTsKIAlpZiAocmVzID49IDApCiAJCXJldHVybiB0aXBjX3BvcnRfcmVqZWN0X3NlY3Rpb25zKHNlbmRlciwgaGRyLCBtc2dfc2VjdCwgbnVtX3NlY3QsCi0JCQkJCQkgVElQQ19FUlJfTk9fTk9ERSk7CisJCQkJCQkgdG90YWxfbGVuLCBUSVBDX0VSUl9OT19OT0RFKTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC0xMTM4LDEyICsxMTU5LDEzIEBACiBzdGF0aWMgaW50IGxpbmtfc2VuZF9zZWN0aW9uc19sb25nKHN0cnVjdCB0aXBjX3BvcnQgKnNlbmRlciwKIAkJCQkgICBzdHJ1Y3QgaW92ZWMgY29uc3QgKm1zZ19zZWN0LAogCQkJCSAgIHUzMiBudW1fc2VjdCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgdG90YWxfbGVuLAogCQkJCSAgIHUzMiBkZXN0YWRkcikKIHsKIAlzdHJ1Y3QgbGluayAqbF9wdHI7CiAJc3RydWN0IHRpcGNfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgdGlwY19tc2cgKmhkciA9ICZzZW5kZXItPnBoZHI7Ci0JdTMyIGRzeiA9IG1zZ19kYXRhX3N6KGhkcik7CisJdTMyIGRzeiA9IHRvdGFsX2xlbjsKIAl1MzIgbWF4X3BrdCwgZnJhZ21fc3osIHJlc3Q7CiAJc3RydWN0IHRpcGNfbXNnIGZyYWdtX2hkcjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqYnVmLCAqYnVmX2NoYWluLCAqcHJldjsKQEAgLTExNjksNyArMTE5MSw2IEBACiAKIAl0aXBjX21zZ19pbml0KCZmcmFnbV9oZHIsIE1TR19GUkFHTUVOVEVSLCBGSVJTVF9GUkFHTUVOVCwKIAkJIElOVF9IX1NJWkUsIG1zZ19kZXN0bm9kZShoZHIpKTsKLQltc2dfc2V0X2xpbmtfc2VsZWN0b3IoJmZyYWdtX2hkciwgc2VuZGVyLT5yZWYpOwogCW1zZ19zZXRfc2l6ZSgmZnJhZ21faGRyLCBtYXhfcGt0KTsKIAltc2dfc2V0X2ZyYWdtX25vKCZmcmFnbV9oZHIsIDEpOwogCkBAIC0xMjcxLDI4ICsxMjkyLDE1IEBACiAJCQlidWZfZGlzY2FyZChidWZfY2hhaW4pOwogCQl9CiAJCXJldHVybiB0aXBjX3BvcnRfcmVqZWN0X3NlY3Rpb25zKHNlbmRlciwgaGRyLCBtc2dfc2VjdCwgbnVtX3NlY3QsCi0JCQkJCQkgVElQQ19FUlJfTk9fTk9ERSk7CisJCQkJCQkgdG90YWxfbGVuLCBUSVBDX0VSUl9OT19OT0RFKTsKIAl9CiAKLQkvKiBBcHBlbmQgd2hvbGUgY2hhaW4gdG8gc2VuZCBxdWV1ZTogKi8KKwkvKiBBcHBlbmQgY2hhaW4gb2YgZnJhZ21lbnRzIHRvIHNlbmQgcXVldWUgJiBzZW5kIHRoZW0gKi8KIAotCWJ1ZiA9IGJ1Zl9jaGFpbjsKLQlsX3B0ci0+bG9uZ19tc2dfc2VxX25vID0gbW9kKGxfcHRyLT5sb25nX21zZ19zZXFfbm8gKyAxKTsKLQlpZiAoIWxfcHRyLT5uZXh0X291dCkKLQkJbF9wdHItPm5leHRfb3V0ID0gYnVmX2NoYWluOworCWxfcHRyLT5sb25nX21zZ19zZXFfbm8rKzsKKwlsaW5rX2FkZF9jaGFpbl90b19vdXRxdWV1ZShsX3B0ciwgYnVmX2NoYWluLCBsX3B0ci0+bG9uZ19tc2dfc2VxX25vKTsKKwlsX3B0ci0+c3RhdHMuc2VudF9mcmFnbWVudHMgKz0gZnJhZ21fbm87CiAJbF9wdHItPnN0YXRzLnNlbnRfZnJhZ21lbnRlZCsrOwotCXdoaWxlIChidWYpIHsKLQkJc3RydWN0IHNrX2J1ZmYgKm5leHQgPSBidWYtPm5leHQ7Ci0JCXN0cnVjdCB0aXBjX21zZyAqbXNnID0gYnVmX21zZyhidWYpOwotCi0JCWxfcHRyLT5zdGF0cy5zZW50X2ZyYWdtZW50cysrOwotCQltc2dfc2V0X2xvbmdfbXNnbm8obXNnLCBsX3B0ci0+bG9uZ19tc2dfc2VxX25vKTsKLQkJbGlua19hZGRfdG9fb3V0cXVldWUobF9wdHIsIGJ1ZiwgbXNnKTsKLQkJYnVmID0gbmV4dDsKLQl9Ci0KLQkvKiBTZW5kIGl0LCBpZiBwb3NzaWJsZTogKi8KLQogCXRpcGNfbGlua19wdXNoX3F1ZXVlKGxfcHRyKTsKIAl0aXBjX25vZGVfdW5sb2NrKG5vZGUpOwogCXJldHVybiBkc3o7CkBAIC0yNDA3LDYgKzI0MTUsOCBAQAogICovCiBzdGF0aWMgaW50IGxpbmtfc2VuZF9sb25nX2J1ZihzdHJ1Y3QgbGluayAqbF9wdHIsIHN0cnVjdCBza19idWZmICpidWYpCiB7CisJc3RydWN0IHNrX2J1ZmYgKmJ1Zl9jaGFpbiA9IE5VTEw7CisJc3RydWN0IHNrX2J1ZmYgKmJ1Zl9jaGFpbl90YWlsID0gKHN0cnVjdCBza19idWZmICopJmJ1Zl9jaGFpbjsKIAlzdHJ1Y3QgdGlwY19tc2cgKmlubXNnID0gYnVmX21zZyhidWYpOwogCXN0cnVjdCB0aXBjX21zZyBmcmFnbV9oZHI7CiAJdTMyIGluc2l6ZSA9IG1zZ19zaXplKGlubXNnKTsKQEAgLTI0MTUsNyArMjQyNSw3IEBACiAJdTMyIHJlc3QgPSBpbnNpemU7CiAJdTMyIHBhY2tfc3ogPSBsX3B0ci0+bWF4X3BrdDsKIAl1MzIgZnJhZ21fc3ogPSBwYWNrX3N6IC0gSU5UX0hfU0laRTsKLQl1MzIgZnJhZ21fbm8gPSAxOworCXUzMiBmcmFnbV9ubyA9IDA7CiAJdTMyIGRlc3RhZGRyOwogCiAJaWYgKG1zZ19zaG9ydChpbm1zZykpCkBAIC0yNDI3LDEwICsyNDM3LDYgQEAKIAogCXRpcGNfbXNnX2luaXQoJmZyYWdtX2hkciwgTVNHX0ZSQUdNRU5URVIsIEZJUlNUX0ZSQUdNRU5ULAogCQkgSU5UX0hfU0laRSwgZGVzdGFkZHIpOwotCW1zZ19zZXRfbGlua19zZWxlY3RvcigmZnJhZ21faGRyLCBtc2dfbGlua19zZWxlY3Rvcihpbm1zZykpOwotCW1zZ19zZXRfbG9uZ19tc2dubygmZnJhZ21faGRyLCBtb2QobF9wdHItPmxvbmdfbXNnX3NlcV9ubysrKSk7Ci0JbXNnX3NldF9mcmFnbV9ubygmZnJhZ21faGRyLCBmcmFnbV9ubyk7Ci0JbF9wdHItPnN0YXRzLnNlbnRfZnJhZ21lbnRlZCsrOwogCiAJLyogQ2hvcCB1cCBtZXNzYWdlOiAqLwogCkBAIC0yNDQzLDI3ICsyNDQ5LDM3IEBACiAJCX0KIAkJZnJhZ20gPSB0aXBjX2J1Zl9hY3F1aXJlKGZyYWdtX3N6ICsgSU5UX0hfU0laRSk7CiAJCWlmIChmcmFnbSA9PSBOVUxMKSB7Ci0JCQl3YXJuKCJMaW5rIHVuYWJsZSB0byBmcmFnbWVudCBtZXNzYWdlXG4iKTsKLQkJCWRzeiA9IC1FTk9NRU07Ci0JCQlnb3RvIGV4aXQ7CisJCQlidWZfZGlzY2FyZChidWYpOworCQkJd2hpbGUgKGJ1Zl9jaGFpbikgeworCQkJCWJ1ZiA9IGJ1Zl9jaGFpbjsKKwkJCQlidWZfY2hhaW4gPSBidWZfY2hhaW4tPm5leHQ7CisJCQkJYnVmX2Rpc2NhcmQoYnVmKTsKKwkJCX0KKwkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJCW1zZ19zZXRfc2l6ZSgmZnJhZ21faGRyLCBmcmFnbV9zeiArIElOVF9IX1NJWkUpOworCQlmcmFnbV9ubysrOworCQltc2dfc2V0X2ZyYWdtX25vKCZmcmFnbV9oZHIsIGZyYWdtX25vKTsKIAkJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoZnJhZ20sICZmcmFnbV9oZHIsIElOVF9IX1NJWkUpOwogCQlza2JfY29weV90b19saW5lYXJfZGF0YV9vZmZzZXQoZnJhZ20sIElOVF9IX1NJWkUsIGNycywKIAkJCQkJICAgICAgIGZyYWdtX3N6KTsKLQkJLyogIFNlbmQgcXVldWVkIG1lc3NhZ2VzIGZpcnN0LCBpZiBhbnk6ICovCisJCWJ1Zl9jaGFpbl90YWlsLT5uZXh0ID0gZnJhZ207CisJCWJ1Zl9jaGFpbl90YWlsID0gZnJhZ207CiAKLQkJbF9wdHItPnN0YXRzLnNlbnRfZnJhZ21lbnRzKys7Ci0JCXRpcGNfbGlua19zZW5kX2J1ZihsX3B0ciwgZnJhZ20pOwotCQlpZiAoIXRpcGNfbGlua19pc191cChsX3B0cikpCi0JCQlyZXR1cm4gZHN6OwotCQltc2dfc2V0X2ZyYWdtX25vKCZmcmFnbV9oZHIsICsrZnJhZ21fbm8pOwogCQlyZXN0IC09IGZyYWdtX3N6OwogCQljcnMgKz0gZnJhZ21fc3o7CiAJCW1zZ19zZXRfdHlwZSgmZnJhZ21faGRyLCBGUkFHTUVOVCk7CiAJfQotZXhpdDoKIAlidWZfZGlzY2FyZChidWYpOworCisJLyogQXBwZW5kIGNoYWluIG9mIGZyYWdtZW50cyB0byBzZW5kIHF1ZXVlICYgc2VuZCB0aGVtICovCisKKwlsX3B0ci0+bG9uZ19tc2dfc2VxX25vKys7CisJbGlua19hZGRfY2hhaW5fdG9fb3V0cXVldWUobF9wdHIsIGJ1Zl9jaGFpbiwgbF9wdHItPmxvbmdfbXNnX3NlcV9ubyk7CisJbF9wdHItPnN0YXRzLnNlbnRfZnJhZ21lbnRzICs9IGZyYWdtX25vOworCWxfcHRyLT5zdGF0cy5zZW50X2ZyYWdtZW50ZWQrKzsKKwl0aXBjX2xpbmtfcHVzaF9xdWV1ZShsX3B0cik7CisKIAlyZXR1cm4gZHN6OwogfQogCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9saW5rLmggYi9uZXQvdGlwYy9saW5rLmgKaW5kZXggZTZhMzBkYi4uNzRmYmVjYSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbGluay5oCisrKyBiL25ldC90aXBjL2xpbmsuaApAQCAtMjI4LDYgKzIyOCw3IEBACiBpbnQgdGlwY19saW5rX3NlbmRfc2VjdGlvbnNfZmFzdChzdHJ1Y3QgdGlwY19wb3J0ICpzZW5kZXIsCiAJCQkJIHN0cnVjdCBpb3ZlYyBjb25zdCAqbXNnX3NlY3QsCiAJCQkJIGNvbnN0IHUzMiBudW1fc2VjdCwKKwkJCQkgdW5zaWduZWQgaW50IHRvdGFsX2xlbiwKIAkJCQkgdTMyIGRlc3Rub2RlKTsKIHZvaWQgdGlwY19saW5rX3JlY3ZfYnVuZGxlKHN0cnVjdCBza19idWZmICpidWYpOwogaW50ICB0aXBjX2xpbmtfcmVjdl9mcmFnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqKnBlbmRpbmcsCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9tc2cuYyBiL25ldC90aXBjL21zZy5jCmluZGV4IDZkOTJkMTcuLjAzZTU3YmYgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL21zZy5jCisrKyBiL25ldC90aXBjL21zZy5jCkBAIC02OCwyMCArNjgsNiBAQAogfQogCiAvKioKLSAqIHRpcGNfbXNnX2NhbGNfZGF0YV9zaXplIC0gZGV0ZXJtaW5lIHRvdGFsIGRhdGEgc2l6ZSBmb3IgbWVzc2FnZQotICovCi0KLWludCB0aXBjX21zZ19jYWxjX2RhdGFfc2l6ZShzdHJ1Y3QgaW92ZWMgY29uc3QgKm1zZ19zZWN0LCB1MzIgbnVtX3NlY3QpCi17Ci0JaW50IGRzeiA9IDA7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3NlY3Q7IGkrKykKLQkJZHN6ICs9IG1zZ19zZWN0W2ldLmlvdl9sZW47Ci0JcmV0dXJuIGRzejsKLX0KLQotLyoqCiAgKiB0aXBjX21zZ19idWlsZCAtIGNyZWF0ZSBtZXNzYWdlIHVzaW5nIHNwZWNpZmllZCBoZWFkZXIgYW5kIGRhdGEKICAqCiAgKiBOb3RlOiBDYWxsZXIgbXVzdCBub3QgaG9sZCBhbnkgbG9ja3MgaW4gY2FzZSBjb3B5X2Zyb21fdXNlcigpIGlzIGludGVycnVwdGVkIQpAQCAtODksMTggKzc1LDEzIEBACiAgKiBSZXR1cm5zIG1lc3NhZ2UgZGF0YSBzaXplIG9yIGVycm5vCiAgKi8KIAotaW50IHRpcGNfbXNnX2J1aWxkKHN0cnVjdCB0aXBjX21zZyAqaGRyLAotCQkJICAgIHN0cnVjdCBpb3ZlYyBjb25zdCAqbXNnX3NlY3QsIHUzMiBudW1fc2VjdCwKK2ludCB0aXBjX21zZ19idWlsZChzdHJ1Y3QgdGlwY19tc2cgKmhkciwgc3RydWN0IGlvdmVjIGNvbnN0ICptc2dfc2VjdCwKKwkJICAgdTMyIG51bV9zZWN0LCB1bnNpZ25lZCBpbnQgdG90YWxfbGVuLAogCQkJICAgIGludCBtYXhfc2l6ZSwgaW50IHVzcm1lbSwgc3RydWN0IHNrX2J1ZmYgKipidWYpCiB7CiAJaW50IGRzeiwgc3osIGhzeiwgcG9zLCByZXMsIGNudDsKIAotCWRzeiA9IHRpcGNfbXNnX2NhbGNfZGF0YV9zaXplKG1zZ19zZWN0LCBudW1fc2VjdCk7Ci0JaWYgKHVubGlrZWx5KGRzeiA+IFRJUENfTUFYX1VTRVJfTVNHX1NJWkUpKSB7Ci0JCSpidWYgPSBOVUxMOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KKwlkc3ogPSB0b3RhbF9sZW47CiAJcG9zID0gaHN6ID0gbXNnX2hkcl9zeihoZHIpOwogCXN6ID0gaHN6ICsgZHN6OwogCW1zZ19zZXRfc2l6ZShoZHIsIHN6KTsKZGlmZiAtLWdpdCBhL25ldC90aXBjL21zZy5oIGIvbmV0L3RpcGMvbXNnLmgKaW5kZXggZGUwMjMzOS4uODQ1MjQ1NCAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbXNnLmgKKysrIGIvbmV0L3RpcGMvbXNnLmgKQEAgLTM5LDQxICszOSwyNCBAQAogCiAjaW5jbHVkZSAiYmVhcmVyLmgiCiAKKy8qCisgKiBDb25zdGFudHMgYW5kIHJvdXRpbmVzIHVzZWQgdG8gcmVhZCBhbmQgd3JpdGUgVElQQyBwYXlsb2FkIG1lc3NhZ2UgaGVhZGVycworICoKKyAqIE5vdGU6IFNvbWUgaXRlbXMgYXJlIGFsc28gdXNlZCB3aXRoIFRJUEMgaW50ZXJuYWwgbWVzc2FnZSBoZWFkZXJzCisgKi8KKwogI2RlZmluZSBUSVBDX1ZFUlNJT04gICAgICAgICAgICAgIDIKIAogLyoKLSAqCQlUSVBDIHVzZXIgZGF0YSBtZXNzYWdlIGhlYWRlciBmb3JtYXQsIHZlcnNpb24gMjoKLSAqCi0gKgotICogICAgIDEgMCA5IDggNyA2IDUgNHwzIDIgMSAwIDkgOCA3IDZ8NSA0IDMgMiAxIDAgOSA4fDcgNiA1IDQgMyAyIDEgMAotICogICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAqIHcwOnx2ZXJzIHwgdXNlciAgfGhkciBzeiB8bnxkfHN8LXwgICAgICAgICAgbWVzc2FnZSBzaXplICAgICAgICAgICB8Ci0gKiAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICogdzE6fG1zdHlwfCBlcnJvciB8cmVyIGNudHxsc2N8b3B0IHB8ICAgICAgYnJvYWRjYXN0IGFjayBubyAgICAgICAgIHwKLSAqICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gKiB3Mjp8ICAgICAgICBsaW5rIGxldmVsIGFjayBubyAgICAgIHwgICBicm9hZGNhc3QvbGluayBsZXZlbCBzZXEgbm8gfAotICogICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAqIHczOnwgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzIG5vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKiAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICogdzQ6fCAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hdGluZyBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAqICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gKiB3NTp8ICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uIHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgfAotICogICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAqIHc2OnwgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYXRpbmcgbm9kZSAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKiAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICogdzc6fCAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbiBub2RlICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAqICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gKiB3ODp8ICAgICAgICAgICAgbmFtZSB0eXBlIC8gdHJhbnNwb3J0IHNlcXVlbmNlIG51bWJlciAgICAgICAgICAgICAgfAotICogICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAqIHc5OnwgICAgICAgICAgICAgIG5hbWUgaW5zdGFuY2UvbXVsdGljYXN0IGxvd2VyIGJvdW5kICAgICAgICAgICAgICB8Ci0gKiAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICogd0E6fCAgICAgICAgICAgICAgICAgICAgbXVsdGljYXN0IHVwcGVyIGJvdW5kICAgICAgICAgICAgICAgICAgICAgIHwKLSAqICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gKiAgICAvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLwotICogICAgXCAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAqICAgIC8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvCi0gKiAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICoKKyAqIFBheWxvYWQgbWVzc2FnZSB1c2VycyBhcmUgZGVmaW5lZCBpbiBUSVBDJ3MgcHVibGljIEFQSToKKyAqIC0gVElQQ19MT1dfSU1QT1JUQU5DRQorICogLSBUSVBDX01FRElVTV9JTVBPUlRBTkNFCisgKiAtIFRJUENfSElHSF9JTVBPUlRBTkNFCisgKiAtIFRJUENfQ1JJVElDQUxfSU1QT1JUQU5DRQorICovCisKKy8qCisgKiBQYXlsb2FkIG1lc3NhZ2UgdHlwZXMKICAqLwogCiAjZGVmaW5lIFRJUENfQ09OTl9NU0cJCTAKQEAgLTgxLDYgKzY0LDkgQEAKICNkZWZpbmUgVElQQ19OQU1FRF9NU0cJCTIKICNkZWZpbmUgVElQQ19ESVJFQ1RfTVNHCQkzCiAKKy8qCisgKiBNZXNzYWdlIGhlYWRlciBzaXplcworICovCiAKICNkZWZpbmUgU0hPUlRfSF9TSVpFICAgICAgICAgICAgICAyNAkvKiBDb25uZWN0ZWQsIGluLWNsdXN0ZXIgbWVzc2FnZXMgKi8KICNkZWZpbmUgRElSX01TR19IX1NJWkUgICAgICAgICAgICAzMgkvKiBEaXJlY3RseSBhZGRyZXNzZWQgbWVzc2FnZXMgKi8KQEAgLTQ3Myw0MCArNDU5LDExIEBACiAKIAogLyoKLQkJVElQQyBpbnRlcm5hbCBtZXNzYWdlIGhlYWRlciBmb3JtYXQsIHZlcnNpb24gMgotCi0gICAgICAgMSAwIDkgOCA3IDYgNSA0fDMgMiAxIDAgOSA4IDcgNnw1IDQgMyAyIDEgMCA5IDh8NyA2IDUgNCAzIDIgMSAwCi0gICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgdzA6fHZlcnMgfG1zZyB1c3J8aGRyIHN6IHxufHJlc3J2fCAgICAgICAgICAgIHBhY2tldCBzaXplICAgICAgICAgIHwKLSAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICB3MTp8bSB0eXB8ICAgICAgc2VxdWVuY2UgZ2FwICAgICAgIHwgICAgICAgYnJvYWRjYXN0IGFjayBubyAgICAgICAgfAotICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgIHcyOnwgbGluayBsZXZlbCBhY2sgbm8vYmNfZ2FwX2Zyb20gfCAgICAgc2VxIG5vIC8gYmNhc3RfZ2FwX3RvICAgICB8Ci0gICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgdzM6fCAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMgbm9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICB3NDp8ICBuZXh0IHNlbnQgYnJvYWRjYXN0L2ZyYWdtIG5vIHwgbmV4dCBzZW50IHBrdC8gZnJhZ20gbXNnIG5vICAgfAotICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgIHc1OnwgICAgICAgICAgc2Vzc2lvbiBubyAgICAgICAgICAgfHJzdj0wfHJ8YmVyaWR8bGluayBwcmlvfG5ldHBsfHB8Ci0gICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgdzY6fCAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hdGluZyBub2RlICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICB3Nzp8ICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uIG5vZGUgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgIHc4OnwgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0IHNlcXVlbmNlIG51bWJlciAgICAgICAgICAgICAgICAgICB8Ci0gICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgdzk6fCAgIG1zZyBjb3VudCAvIGJjYXN0IHRhZyAgICAgICB8ICAgICAgIGxpbmsgdG9sZXJhbmNlICAgICAgICAgIHwKLSAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICBcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgLyAgICAgICAgICAgICAgICAgICAgIFVzZXIgU3BlY2lmaWMgRGF0YSAgICAgICAgICAgICAgICAgICAgICAgIC8KLSAgICAgIFwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotCi0gICAgICBOQjogQ09OTl9NQU5BR0VSIHVzZSBkYXRhIG1lc3NhZ2UgZm9ybWF0LiBMSU5LX0NPTkZJRyBoYXMgb3duIGZvcm1hdC4KLSovCisgKiBDb25zdGFudHMgYW5kIHJvdXRpbmVzIHVzZWQgdG8gcmVhZCBhbmQgd3JpdGUgVElQQyBpbnRlcm5hbCBtZXNzYWdlIGhlYWRlcnMKKyAqLwogCiAvKgotICogSW50ZXJuYWwgdXNlcnMKKyAqIEludGVybmFsIG1lc3NhZ2UgdXNlcnMKICAqLwogCiAjZGVmaW5lICBCQ0FTVF9QUk9UT0NPTCAgICAgICA1CkBAIC01MjAsNyArNDc3LDcgQEAKICNkZWZpbmUgIExJTktfQ09ORklHICAgICAgICAgIDEzCiAKIC8qCi0gKiAgQ29ubmVjdGlvbiBtYW5hZ2VtZW50IHByb3RvY29sIG1lc3NhZ2VzCisgKiAgQ29ubmVjdGlvbiBtYW5hZ2VtZW50IHByb3RvY29sIG1lc3NhZ2UgdHlwZXMKICAqLwogCiAjZGVmaW5lIENPTk5fUFJPQkUgICAgICAgIDAKQEAgLTUyOCwxMiArNDg1LDQxIEBACiAjZGVmaW5lIENPTk5fQUNLICAgICAgICAgIDIKIAogLyoKLSAqIE5hbWUgZGlzdHJpYnV0b3IgbWVzc2FnZXMKKyAqIE5hbWUgZGlzdHJpYnV0b3IgbWVzc2FnZSB0eXBlcwogICovCiAKICNkZWZpbmUgUFVCTElDQVRJT04gICAgICAgMAogI2RlZmluZSBXSVRIRFJBV0FMICAgICAgICAxCiAKKy8qCisgKiBTZWdtZW50YXRpb24gbWVzc2FnZSB0eXBlcworICovCisKKyNkZWZpbmUgRklSU1RfRlJBR01FTlQJCTAKKyNkZWZpbmUgRlJBR01FTlQJCTEKKyNkZWZpbmUgTEFTVF9GUkFHTUVOVAkJMgorCisvKgorICogTGluayBtYW5hZ2VtZW50IHByb3RvY29sIG1lc3NhZ2UgdHlwZXMKKyAqLworCisjZGVmaW5lIFNUQVRFX01TRwkJMAorI2RlZmluZSBSRVNFVF9NU0cJCTEKKyNkZWZpbmUgQUNUSVZBVEVfTVNHCQkyCisKKy8qCisgKiBDaGFuZ2VvdmVyIHR1bm5lbCBtZXNzYWdlIHR5cGVzCisgKi8KKyNkZWZpbmUgRFVQTElDQVRFX01TRwkJMAorI2RlZmluZSBPUklHSU5BTF9NU0cJCTEKKworLyoKKyAqIENvbmZpZyBwcm90b2NvbCBtZXNzYWdlIHR5cGVzCisgKi8KKworI2RlZmluZSBEU0NfUkVRX01TRwkJMAorI2RlZmluZSBEU0NfUkVTUF9NU0cJCTEKKwogCiAvKgogICogV29yZCAxCkBAIC03NjEsNTAgKzc0NywxMSBAQAogCW1zZ19zZXRfYml0cyhtLCA5LCAwLCAweGZmZmYsIG4pOwogfQogCi0vKgotICogU2VnbWVudGF0aW9uIG1lc3NhZ2UgdHlwZXMKLSAqLwotCi0jZGVmaW5lIEZJUlNUX0ZSQUdNRU5UICAgICAwCi0jZGVmaW5lIEZSQUdNRU5UICAgICAgICAgICAxCi0jZGVmaW5lIExBU1RfRlJBR01FTlQgICAgICAyCi0KLS8qCi0gKiBMaW5rIG1hbmFnZW1lbnQgcHJvdG9jb2wgbWVzc2FnZSB0eXBlcwotICovCi0KLSNkZWZpbmUgU1RBVEVfTVNHICAgICAgIDAKLSNkZWZpbmUgUkVTRVRfTVNHICAgICAgIDEKLSNkZWZpbmUgQUNUSVZBVEVfTVNHICAgIDIKLQotLyoKLSAqIENoYW5nZW92ZXIgdHVubmVsIG1lc3NhZ2UgdHlwZXMKLSAqLwotI2RlZmluZSBEVVBMSUNBVEVfTVNHICAgIDAKLSNkZWZpbmUgT1JJR0lOQUxfTVNHICAgICAxCi0KLS8qCi0gKiBSb3V0aW5nIHRhYmxlIG1lc3NhZ2UgdHlwZXMKLSAqLwotI2RlZmluZSBFWFRfUk9VVElOR19UQUJMRSAgICAwCi0jZGVmaW5lIExPQ0FMX1JPVVRJTkdfVEFCTEUgIDEJCS8qIG9ic29sZXRlZCAqLwotI2RlZmluZSBTTEFWRV9ST1VUSU5HX1RBQkxFICAyCi0jZGVmaW5lIFJPVVRFX0FERElUSU9OICAgICAgIDMKLSNkZWZpbmUgUk9VVEVfUkVNT1ZBTCAgICAgICAgNAotCi0vKgotICogQ29uZmlnIHByb3RvY29sIG1lc3NhZ2UgdHlwZXMKLSAqLwotCi0jZGVmaW5lIERTQ19SRVFfTVNHICAgICAgICAgIDAKLSNkZWZpbmUgRFNDX1JFU1BfTVNHICAgICAgICAgMQotCiB1MzIgdGlwY19tc2dfdG90X2ltcG9ydGFuY2Uoc3RydWN0IHRpcGNfbXNnICptKTsKIHZvaWQgdGlwY19tc2dfaW5pdChzdHJ1Y3QgdGlwY19tc2cgKm0sIHUzMiB1c2VyLCB1MzIgdHlwZSwKIAkJCSAgICB1MzIgaHNpemUsIHUzMiBkZXN0bm9kZSk7Ci1pbnQgdGlwY19tc2dfY2FsY19kYXRhX3NpemUoc3RydWN0IGlvdmVjIGNvbnN0ICptc2dfc2VjdCwgdTMyIG51bV9zZWN0KTsKLWludCB0aXBjX21zZ19idWlsZChzdHJ1Y3QgdGlwY19tc2cgKmhkciwKLQkJCSAgICBzdHJ1Y3QgaW92ZWMgY29uc3QgKm1zZ19zZWN0LCB1MzIgbnVtX3NlY3QsCitpbnQgdGlwY19tc2dfYnVpbGQoc3RydWN0IHRpcGNfbXNnICpoZHIsIHN0cnVjdCBpb3ZlYyBjb25zdCAqbXNnX3NlY3QsCisJCSAgIHUzMiBudW1fc2VjdCwgdW5zaWduZWQgaW50IHRvdGFsX2xlbiwKIAkJCSAgICBpbnQgbWF4X3NpemUsIGludCB1c3JtZW0sIHN0cnVjdCBza19idWZmICoqYnVmKTsKIAogc3RhdGljIGlubGluZSB2b2lkIG1zZ19zZXRfbWVkaWFfYWRkcihzdHJ1Y3QgdGlwY19tc2cgKm0sIHN0cnVjdCB0aXBjX21lZGlhX2FkZHIgKmEpCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9wb3J0LmMgYi9uZXQvdGlwYy9wb3J0LmMKaW5kZXggNmZmNzhmOS4uYzY4ZGM5NSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvcG9ydC5jCisrKyBiL25ldC90aXBjL3BvcnQuYwpAQCAtNzQsNyArNzQsOCBAQAogICovCiAKIGludCB0aXBjX211bHRpY2FzdCh1MzIgcmVmLCBzdHJ1Y3QgdGlwY19uYW1lX3NlcSBjb25zdCAqc2VxLAotCQkgICB1MzIgbnVtX3NlY3QsIHN0cnVjdCBpb3ZlYyBjb25zdCAqbXNnX3NlY3QpCisJCSAgIHUzMiBudW1fc2VjdCwgc3RydWN0IGlvdmVjIGNvbnN0ICptc2dfc2VjdCwKKwkJICAgdW5zaWduZWQgaW50IHRvdGFsX2xlbikKIHsKIAlzdHJ1Y3QgdGlwY19tc2cgKmhkcjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqYnVmOwpAQCAtOTEsMTEgKzkyLDE0IEBACiAKIAloZHIgPSAmb3BvcnQtPnBoZHI7CiAJbXNnX3NldF90eXBlKGhkciwgVElQQ19NQ0FTVF9NU0cpOworCW1zZ19zZXRfbG9va3VwX3Njb3BlKGhkciwgVElQQ19DTFVTVEVSX1NDT1BFKTsKKwltc2dfc2V0X2Rlc3Rwb3J0KGhkciwgMCk7CisJbXNnX3NldF9kZXN0bm9kZShoZHIsIDApOwogCW1zZ19zZXRfbmFtZXR5cGUoaGRyLCBzZXEtPnR5cGUpOwogCW1zZ19zZXRfbmFtZWxvd2VyKGhkciwgc2VxLT5sb3dlcik7CiAJbXNnX3NldF9uYW1ldXBwZXIoaGRyLCBzZXEtPnVwcGVyKTsKIAltc2dfc2V0X2hkcl9zeihoZHIsIE1DQVNUX0hfU0laRSk7Ci0JcmVzID0gdGlwY19tc2dfYnVpbGQoaGRyLCBtc2dfc2VjdCwgbnVtX3NlY3QsIE1BWF9NU0dfU0laRSwKKwlyZXMgPSB0aXBjX21zZ19idWlsZChoZHIsIG1zZ19zZWN0LCBudW1fc2VjdCwgdG90YWxfbGVuLCBNQVhfTVNHX1NJWkUsCiAJCQkhb3BvcnQtPnVzZXJfcG9ydCwgJmJ1Zik7CiAJaWYgKHVubGlrZWx5KCFidWYpKQogCQlyZXR1cm4gcmVzOwpAQCAtMTYxLDYgKzE2NSw3IEBACiAJLyogRGVsaXZlciBhIGNvcHkgb2YgbWVzc2FnZSB0byBlYWNoIGRlc3RpbmF0aW9uIHBvcnQgKi8KIAogCWlmIChkcC0+Y291bnQgIT0gMCkgeworCQltc2dfc2V0X2Rlc3Rub2RlKG1zZywgdGlwY19vd25fYWRkcik7CiAJCWlmIChkcC0+Y291bnQgPT0gMSkgewogCQkJbXNnX3NldF9kZXN0cG9ydChtc2csIGRwLT5wb3J0c1swXSk7CiAJCQl0aXBjX3BvcnRfcmVjdl9tc2coYnVmKTsKQEAgLTQxNCwxMiArNDE5LDEyIEBACiAKIGludCB0aXBjX3BvcnRfcmVqZWN0X3NlY3Rpb25zKHN0cnVjdCB0aXBjX3BvcnQgKnBfcHRyLCBzdHJ1Y3QgdGlwY19tc2cgKmhkciwKIAkJCSAgICAgIHN0cnVjdCBpb3ZlYyBjb25zdCAqbXNnX3NlY3QsIHUzMiBudW1fc2VjdCwKLQkJCSAgICAgIGludCBlcnIpCisJCQkgICAgICB1bnNpZ25lZCBpbnQgdG90YWxfbGVuLCBpbnQgZXJyKQogewogCXN0cnVjdCBza19idWZmICpidWY7CiAJaW50IHJlczsKIAotCXJlcyA9IHRpcGNfbXNnX2J1aWxkKGhkciwgbXNnX3NlY3QsIG51bV9zZWN0LCBNQVhfTVNHX1NJWkUsCisJcmVzID0gdGlwY19tc2dfYnVpbGQoaGRyLCBtc2dfc2VjdCwgbnVtX3NlY3QsIHRvdGFsX2xlbiwgTUFYX01TR19TSVpFLAogCQkJIXBfcHRyLT51c2VyX3BvcnQsICZidWYpOwogCWlmICghYnVmKQogCQlyZXR1cm4gcmVzOwpAQCAtMTA2NSw2ICsxMDcwLDcgQEAKIAltc2dfc2V0X29yaWdub2RlKG1zZywgdGlwY19vd25fYWRkcik7CiAJbXNnX3NldF9vcmlncG9ydChtc2csIHBfcHRyLT5yZWYpOwogCW1zZ19zZXRfdHlwZShtc2csIFRJUENfQ09OTl9NU0cpOworCW1zZ19zZXRfbG9va3VwX3Njb3BlKG1zZywgMCk7CiAJbXNnX3NldF9oZHJfc3oobXNnLCBTSE9SVF9IX1NJWkUpOwogCiAJcF9wdHItPnByb2JpbmdfaW50ZXJ2YWwgPSBQUk9CSU5HX0lOVEVSVkFMOwpAQCAtMTE1OCwxMiArMTE2NCwxMyBAQAogICovCiAKIHN0YXRpYyBpbnQgdGlwY19wb3J0X3JlY3Zfc2VjdGlvbnMoc3RydWN0IHRpcGNfcG9ydCAqc2VuZGVyLCB1bnNpZ25lZCBpbnQgbnVtX3NlY3QsCi0JCQkJICAgc3RydWN0IGlvdmVjIGNvbnN0ICptc2dfc2VjdCkKKwkJCQkgICBzdHJ1Y3QgaW92ZWMgY29uc3QgKm1zZ19zZWN0LAorCQkJCSAgIHVuc2lnbmVkIGludCB0b3RhbF9sZW4pCiB7CiAJc3RydWN0IHNrX2J1ZmYgKmJ1ZjsKIAlpbnQgcmVzOwogCi0JcmVzID0gdGlwY19tc2dfYnVpbGQoJnNlbmRlci0+cGhkciwgbXNnX3NlY3QsIG51bV9zZWN0LAorCXJlcyA9IHRpcGNfbXNnX2J1aWxkKCZzZW5kZXItPnBoZHIsIG1zZ19zZWN0LCBudW1fc2VjdCwgdG90YWxfbGVuLAogCQkJTUFYX01TR19TSVpFLCAhc2VuZGVyLT51c2VyX3BvcnQsICZidWYpOwogCWlmIChsaWtlbHkoYnVmKSkKIAkJdGlwY19wb3J0X3JlY3ZfbXNnKGJ1Zik7CkBAIC0xMTc0LDcgKzExODEsOCBAQAogICogdGlwY19zZW5kIC0gc2VuZCBtZXNzYWdlIHNlY3Rpb25zIG9uIGNvbm5lY3Rpb24KICAqLwogCi1pbnQgdGlwY19zZW5kKHUzMiByZWYsIHVuc2lnbmVkIGludCBudW1fc2VjdCwgc3RydWN0IGlvdmVjIGNvbnN0ICptc2dfc2VjdCkKK2ludCB0aXBjX3NlbmQodTMyIHJlZiwgdW5zaWduZWQgaW50IG51bV9zZWN0LCBzdHJ1Y3QgaW92ZWMgY29uc3QgKm1zZ19zZWN0LAorCSAgICAgIHVuc2lnbmVkIGludCB0b3RhbF9sZW4pCiB7CiAJc3RydWN0IHRpcGNfcG9ydCAqcF9wdHI7CiAJdTMyIGRlc3Rub2RlOwpAQCAtMTE4OSw5ICsxMTk3LDEwIEBACiAJCWRlc3Rub2RlID0gcG9ydF9wZWVybm9kZShwX3B0cik7CiAJCWlmIChsaWtlbHkoZGVzdG5vZGUgIT0gdGlwY19vd25fYWRkcikpCiAJCQlyZXMgPSB0aXBjX2xpbmtfc2VuZF9zZWN0aW9uc19mYXN0KHBfcHRyLCBtc2dfc2VjdCwgbnVtX3NlY3QsCi0JCQkJCQkJICAgZGVzdG5vZGUpOworCQkJCQkJCSAgIHRvdGFsX2xlbiwgZGVzdG5vZGUpOwogCQllbHNlCi0JCQlyZXMgPSB0aXBjX3BvcnRfcmVjdl9zZWN0aW9ucyhwX3B0ciwgbnVtX3NlY3QsIG1zZ19zZWN0KTsKKwkJCXJlcyA9IHRpcGNfcG9ydF9yZWN2X3NlY3Rpb25zKHBfcHRyLCBudW1fc2VjdCwgbXNnX3NlY3QsCisJCQkJCQkgICAgICB0b3RhbF9sZW4pOwogCiAJCWlmIChsaWtlbHkocmVzICE9IC1FTElOS0NPTkcpKSB7CiAJCQlwX3B0ci0+Y29uZ2VzdGVkID0gMDsKQEAgLTEyMDIsOCArMTIxMSw3IEBACiAJfQogCWlmIChwb3J0X3VucmVsaWFibGUocF9wdHIpKSB7CiAJCXBfcHRyLT5jb25nZXN0ZWQgPSAwOwotCQkvKiBKdXN0IGNhbGN1bGF0ZSBtc2cgbGVuZ3RoIGFuZCByZXR1cm4gKi8KLQkJcmV0dXJuIHRpcGNfbXNnX2NhbGNfZGF0YV9zaXplKG1zZ19zZWN0LCBudW1fc2VjdCk7CisJCXJldHVybiB0b3RhbF9sZW47CiAJfQogCXJldHVybiAtRUxJTktDT05HOwogfQpAQCAtMTIxMyw3ICsxMjIxLDggQEAKICAqLwogCiBpbnQgdGlwY19zZW5kMm5hbWUodTMyIHJlZiwgc3RydWN0IHRpcGNfbmFtZSBjb25zdCAqbmFtZSwgdW5zaWduZWQgaW50IGRvbWFpbiwKLQkgICB1bnNpZ25lZCBpbnQgbnVtX3NlY3QsIHN0cnVjdCBpb3ZlYyBjb25zdCAqbXNnX3NlY3QpCisJCSAgIHVuc2lnbmVkIGludCBudW1fc2VjdCwgc3RydWN0IGlvdmVjIGNvbnN0ICptc2dfc2VjdCwKKwkJICAgdW5zaWduZWQgaW50IHRvdGFsX2xlbikKIHsKIAlzdHJ1Y3QgdGlwY19wb3J0ICpwX3B0cjsKIAlzdHJ1Y3QgdGlwY19tc2cgKm1zZzsKQEAgLTEyNDAsMjMgKzEyNDksMjMgQEAKIAlpZiAobGlrZWx5KGRlc3Rwb3J0KSkgewogCQlpZiAobGlrZWx5KGRlc3Rub2RlID09IHRpcGNfb3duX2FkZHIpKQogCQkJcmVzID0gdGlwY19wb3J0X3JlY3Zfc2VjdGlvbnMocF9wdHIsIG51bV9zZWN0LAotCQkJCQkJICAgICAgbXNnX3NlY3QpOworCQkJCQkJICAgICAgbXNnX3NlY3QsIHRvdGFsX2xlbik7CiAJCWVsc2UKIAkJCXJlcyA9IHRpcGNfbGlua19zZW5kX3NlY3Rpb25zX2Zhc3QocF9wdHIsIG1zZ19zZWN0LAotCQkJCQkJCSAgIG51bV9zZWN0LCBkZXN0bm9kZSk7CisJCQkJCQkJICAgbnVtX3NlY3QsIHRvdGFsX2xlbiwKKwkJCQkJCQkgICBkZXN0bm9kZSk7CiAJCWlmIChsaWtlbHkocmVzICE9IC1FTElOS0NPTkcpKSB7CiAJCQlpZiAocmVzID4gMCkKIAkJCQlwX3B0ci0+c2VudCsrOwogCQkJcmV0dXJuIHJlczsKIAkJfQogCQlpZiAocG9ydF91bnJlbGlhYmxlKHBfcHRyKSkgewotCQkJLyogSnVzdCBjYWxjdWxhdGUgbXNnIGxlbmd0aCBhbmQgcmV0dXJuICovCi0JCQlyZXR1cm4gdGlwY19tc2dfY2FsY19kYXRhX3NpemUobXNnX3NlY3QsIG51bV9zZWN0KTsKKwkJCXJldHVybiB0b3RhbF9sZW47CiAJCX0KIAkJcmV0dXJuIC1FTElOS0NPTkc7CiAJfQogCXJldHVybiB0aXBjX3BvcnRfcmVqZWN0X3NlY3Rpb25zKHBfcHRyLCBtc2csIG1zZ19zZWN0LCBudW1fc2VjdCwKLQkJCQkJIFRJUENfRVJSX05PX05BTUUpOworCQkJCQkgdG90YWxfbGVuLCBUSVBDX0VSUl9OT19OQU1FKTsKIH0KIAogLyoqCkBAIC0xMjY0LDcgKzEyNzMsOCBAQAogICovCiAKIGludCB0aXBjX3NlbmQycG9ydCh1MzIgcmVmLCBzdHJ1Y3QgdGlwY19wb3J0aWQgY29uc3QgKmRlc3QsCi0JICAgdW5zaWduZWQgaW50IG51bV9zZWN0LCBzdHJ1Y3QgaW92ZWMgY29uc3QgKm1zZ19zZWN0KQorCQkgICB1bnNpZ25lZCBpbnQgbnVtX3NlY3QsIHN0cnVjdCBpb3ZlYyBjb25zdCAqbXNnX3NlY3QsCisJCSAgIHVuc2lnbmVkIGludCB0b3RhbF9sZW4pCiB7CiAJc3RydWN0IHRpcGNfcG9ydCAqcF9wdHI7CiAJc3RydWN0IHRpcGNfbXNnICptc2c7CkBAIC0xMjc2LDYgKzEyODYsNyBAQAogCiAJbXNnID0gJnBfcHRyLT5waGRyOwogCW1zZ19zZXRfdHlwZShtc2csIFRJUENfRElSRUNUX01TRyk7CisJbXNnX3NldF9sb29rdXBfc2NvcGUobXNnLCAwKTsKIAltc2dfc2V0X29yaWdub2RlKG1zZywgdGlwY19vd25fYWRkcik7CiAJbXNnX3NldF9vcmlncG9ydChtc2csIHJlZik7CiAJbXNnX3NldF9kZXN0bm9kZShtc2csIGRlc3QtPm5vZGUpOwpAQCAtMTI4MywxOCArMTI5NCwxOCBAQAogCW1zZ19zZXRfaGRyX3N6KG1zZywgRElSX01TR19IX1NJWkUpOwogCiAJaWYgKGRlc3QtPm5vZGUgPT0gdGlwY19vd25fYWRkcikKLQkJcmVzID0gIHRpcGNfcG9ydF9yZWN2X3NlY3Rpb25zKHBfcHRyLCBudW1fc2VjdCwgbXNnX3NlY3QpOworCQlyZXMgPSAgdGlwY19wb3J0X3JlY3Zfc2VjdGlvbnMocF9wdHIsIG51bV9zZWN0LCBtc2dfc2VjdCwKKwkJCQkJICAgICAgIHRvdGFsX2xlbik7CiAJZWxzZQogCQlyZXMgPSB0aXBjX2xpbmtfc2VuZF9zZWN0aW9uc19mYXN0KHBfcHRyLCBtc2dfc2VjdCwgbnVtX3NlY3QsCi0JCQkJCQkgICBkZXN0LT5ub2RlKTsKKwkJCQkJCSAgIHRvdGFsX2xlbiwgZGVzdC0+bm9kZSk7CiAJaWYgKGxpa2VseShyZXMgIT0gLUVMSU5LQ09ORykpIHsKIAkJaWYgKHJlcyA+IDApCiAJCQlwX3B0ci0+c2VudCsrOwogCQlyZXR1cm4gcmVzOwogCX0KIAlpZiAocG9ydF91bnJlbGlhYmxlKHBfcHRyKSkgewotCQkvKiBKdXN0IGNhbGN1bGF0ZSBtc2cgbGVuZ3RoIGFuZCByZXR1cm4gKi8KLQkJcmV0dXJuIHRpcGNfbXNnX2NhbGNfZGF0YV9zaXplKG1zZ19zZWN0LCBudW1fc2VjdCk7CisJCXJldHVybiB0b3RhbF9sZW47CiAJfQogCXJldHVybiAtRUxJTktDT05HOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvcG9ydC5oIGIvbmV0L3RpcGMvcG9ydC5oCmluZGV4IDg3Yjk0MjQuLmI5YWEzNDEgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL3BvcnQuaAorKysgYi9uZXQvdGlwYy9wb3J0LmgKQEAgLTIwNSwyMyArMjA1LDI3IEBACiAvKgogICogVElQQyBtZXNzYWdpbmcgcm91dGluZXMKICAqLwotaW50IHRpcGNfc2VuZCh1MzIgcG9ydHJlZiwgdW5zaWduZWQgaW50IG51bV9zZWN0LCBzdHJ1Y3QgaW92ZWMgY29uc3QgKm1zZ19zZWN0KTsKK2ludCB0aXBjX3NlbmQodTMyIHBvcnRyZWYsIHVuc2lnbmVkIGludCBudW1fc2VjdCwgc3RydWN0IGlvdmVjIGNvbnN0ICptc2dfc2VjdCwKKwkgICAgICB1bnNpZ25lZCBpbnQgdG90YWxfbGVuKTsKIAogaW50IHRpcGNfc2VuZDJuYW1lKHUzMiBwb3J0cmVmLCBzdHJ1Y3QgdGlwY19uYW1lIGNvbnN0ICpuYW1lLCB1MzIgZG9tYWluLAotCQl1bnNpZ25lZCBpbnQgbnVtX3NlY3QsIHN0cnVjdCBpb3ZlYyBjb25zdCAqbXNnX3NlY3QpOworCQkgICB1bnNpZ25lZCBpbnQgbnVtX3NlY3QsIHN0cnVjdCBpb3ZlYyBjb25zdCAqbXNnX3NlY3QsCisJCSAgIHVuc2lnbmVkIGludCB0b3RhbF9sZW4pOwogCiBpbnQgdGlwY19zZW5kMnBvcnQodTMyIHBvcnRyZWYsIHN0cnVjdCB0aXBjX3BvcnRpZCBjb25zdCAqZGVzdCwKLQkJdW5zaWduZWQgaW50IG51bV9zZWN0LCBzdHJ1Y3QgaW92ZWMgY29uc3QgKm1zZ19zZWN0KTsKKwkJICAgdW5zaWduZWQgaW50IG51bV9zZWN0LCBzdHJ1Y3QgaW92ZWMgY29uc3QgKm1zZ19zZWN0LAorCQkgICB1bnNpZ25lZCBpbnQgdG90YWxfbGVuKTsKIAogaW50IHRpcGNfc2VuZF9idWYycG9ydCh1MzIgcG9ydHJlZiwgc3RydWN0IHRpcGNfcG9ydGlkIGNvbnN0ICpkZXN0LAogCQlzdHJ1Y3Qgc2tfYnVmZiAqYnVmLCB1bnNpZ25lZCBpbnQgZHN6KTsKIAogaW50IHRpcGNfbXVsdGljYXN0KHUzMiBwb3J0cmVmLCBzdHJ1Y3QgdGlwY19uYW1lX3NlcSBjb25zdCAqc2VxLAotCQl1bnNpZ25lZCBpbnQgc2VjdGlvbl9jb3VudCwgc3RydWN0IGlvdmVjIGNvbnN0ICptc2cpOworCQkgICB1bnNpZ25lZCBpbnQgc2VjdGlvbl9jb3VudCwgc3RydWN0IGlvdmVjIGNvbnN0ICptc2csCisJCSAgIHVuc2lnbmVkIGludCB0b3RhbF9sZW4pOwogCiBpbnQgdGlwY19wb3J0X3JlamVjdF9zZWN0aW9ucyhzdHJ1Y3QgdGlwY19wb3J0ICpwX3B0ciwgc3RydWN0IHRpcGNfbXNnICpoZHIsCiAJCQkgICAgICBzdHJ1Y3QgaW92ZWMgY29uc3QgKm1zZ19zZWN0LCB1MzIgbnVtX3NlY3QsCi0JCQkgICAgICBpbnQgZXJyKTsKKwkJCSAgICAgIHVuc2lnbmVkIGludCB0b3RhbF9sZW4sIGludCBlcnIpOwogc3RydWN0IHNrX2J1ZmYgKnRpcGNfcG9ydF9nZXRfcG9ydHModm9pZCk7CiB2b2lkIHRpcGNfcG9ydF9yZWN2X3Byb3RvX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqYnVmKTsKIHZvaWQgdGlwY19wb3J0X3JlY3ZfbWNhc3Qoc3RydWN0IHNrX2J1ZmYgKmJ1Ziwgc3RydWN0IHBvcnRfbGlzdCAqZHApOwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc29ja2V0LmMgYi9uZXQvdGlwYy9zb2NrZXQuYwppbmRleCAyOWQ5NGQ1Li4zMzg4MzczIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9zb2NrZXQuYworKysgYi9uZXQvdGlwYy9zb2NrZXQuYwpAQCAtNTM1LDYgKzUzNSw5IEBACiAJaWYgKHVubGlrZWx5KChtLT5tc2dfbmFtZWxlbiA8IHNpemVvZigqZGVzdCkpIHx8CiAJCSAgICAgKGRlc3QtPmZhbWlseSAhPSBBRl9USVBDKSkpCiAJCXJldHVybiAtRUlOVkFMOworCWlmICgodG90YWxfbGVuID4gVElQQ19NQVhfVVNFUl9NU0dfU0laRSkgfHwKKwkgICAgKG0tPm1zZ19pb3ZsZW4gPiAodW5zaWduZWQpSU5UX01BWCkpCisJCXJldHVybiAtRU1TR1NJWkU7CiAKIAlpZiAoaW9jYikKIAkJbG9ja19zb2NrKHNrKTsKQEAgLTU3MywxMiArNTc2LDE0IEBACiAJCQkJCSAgICAgJmRlc3QtPmFkZHIubmFtZS5uYW1lLAogCQkJCQkgICAgIGRlc3QtPmFkZHIubmFtZS5kb21haW4sCiAJCQkJCSAgICAgbS0+bXNnX2lvdmxlbiwKLQkJCQkJICAgICBtLT5tc2dfaW92KTsKKwkJCQkJICAgICBtLT5tc2dfaW92LAorCQkJCQkgICAgIHRvdGFsX2xlbik7CiAJCX0gZWxzZSBpZiAoZGVzdC0+YWRkcnR5cGUgPT0gVElQQ19BRERSX0lEKSB7CiAJCQlyZXMgPSB0aXBjX3NlbmQycG9ydCh0cG9ydC0+cmVmLAogCQkJCQkgICAgICZkZXN0LT5hZGRyLmlkLAogCQkJCQkgICAgIG0tPm1zZ19pb3ZsZW4sCi0JCQkJCSAgICAgbS0+bXNnX2lvdik7CisJCQkJCSAgICAgbS0+bXNnX2lvdiwKKwkJCQkJICAgICB0b3RhbF9sZW4pOwogCQl9IGVsc2UgaWYgKGRlc3QtPmFkZHJ0eXBlID09IFRJUENfQUREUl9NQ0FTVCkgewogCQkJaWYgKG5lZWRzX2Nvbm4pIHsKIAkJCQlyZXMgPSAtRU9QTk9UU1VQUDsKQEAgLTU5MCw3ICs1OTUsOCBAQAogCQkJcmVzID0gdGlwY19tdWx0aWNhc3QodHBvcnQtPnJlZiwKIAkJCQkJICAgICAmZGVzdC0+YWRkci5uYW1lc2VxLAogCQkJCQkgICAgIG0tPm1zZ19pb3ZsZW4sCi0JCQkJCSAgICAgbS0+bXNnX2lvdik7CisJCQkJCSAgICAgbS0+bXNnX2lvdiwKKwkJCQkJICAgICB0b3RhbF9sZW4pOwogCQl9CiAJCWlmIChsaWtlbHkocmVzICE9IC1FTElOS0NPTkcpKSB7CiAJCQlpZiAobmVlZHNfY29ubiAmJiAocmVzID49IDApKQpAQCAtNjQwLDYgKzY0NiwxMCBAQAogCWlmICh1bmxpa2VseShkZXN0KSkKIAkJcmV0dXJuIHNlbmRfbXNnKGlvY2IsIHNvY2ssIG0sIHRvdGFsX2xlbik7CiAKKwlpZiAoKHRvdGFsX2xlbiA+IFRJUENfTUFYX1VTRVJfTVNHX1NJWkUpIHx8CisJICAgIChtLT5tc2dfaW92bGVuID4gKHVuc2lnbmVkKUlOVF9NQVgpKQorCQlyZXR1cm4gLUVNU0dTSVpFOworCiAJaWYgKGlvY2IpCiAJCWxvY2tfc29jayhzayk7CiAKQEAgLTY1Miw3ICs2NjIsOCBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlyZXMgPSB0aXBjX3NlbmQodHBvcnQtPnJlZiwgbS0+bXNnX2lvdmxlbiwgbS0+bXNnX2lvdik7CisJCXJlcyA9IHRpcGNfc2VuZCh0cG9ydC0+cmVmLCBtLT5tc2dfaW92bGVuLCBtLT5tc2dfaW92LAorCQkJCXRvdGFsX2xlbik7CiAJCWlmIChsaWtlbHkocmVzICE9IC1FTElOS0NPTkcpKQogCQkJYnJlYWs7CiAJCWlmIChtLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQpIHsKQEAgLTcyMyw2ICs3MzQsMTIgQEAKIAkJZ290byBleGl0OwogCX0KIAorCWlmICgodG90YWxfbGVuID4gKHVuc2lnbmVkKUlOVF9NQVgpIHx8CisJICAgIChtLT5tc2dfaW92bGVuID4gKHVuc2lnbmVkKUlOVF9NQVgpKSB7CisJCXJlcyA9IC1FTVNHU0laRTsKKwkJZ290byBleGl0OworCX0KKwogCS8qCiAJICogU2VuZCBlYWNoIGlvdmVjIGVudHJ5IHVzaW5nIG9uZSBvciBtb3JlIG1lc3NhZ2VzCiAJICoKQEAgLTc1Myw3ICs3NzAsNyBAQAogCQkJCWJ5dGVzX3RvX3NlbmQgPSBjdXJyX2xlZnQ7CiAJCQlteV9pb3YuaW92X2Jhc2UgPSBjdXJyX3N0YXJ0OwogCQkJbXlfaW92Lmlvdl9sZW4gPSBieXRlc190b19zZW5kOwotCQkJcmVzID0gc2VuZF9wYWNrZXQoTlVMTCwgc29jaywgJm15X21zZywgMCk7CisJCQlyZXMgPSBzZW5kX3BhY2tldChOVUxMLCBzb2NrLCAmbXlfbXNnLCBieXRlc190b19zZW5kKTsKIAkJCWlmIChyZXMgPCAwKSB7CiAJCQkJaWYgKGJ5dGVzX3NlbnQpCiAJCQkJCXJlcyA9IGJ5dGVzX3NlbnQ7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9zdWJzY3IuYyBiL25ldC90aXBjL3N1YnNjci5jCmluZGV4IGFhZTllYWUuLjZjZjcyNjggMTAwNjQ0Ci0tLSBhL25ldC90aXBjL3N1YnNjci5jCisrKyBiL25ldC90aXBjL3N1YnNjci5jCkBAIC0xMDksNyArMTA5LDcgQEAKIAlzdWItPmV2dC5mb3VuZF91cHBlciA9IGh0b2hsKGZvdW5kX3VwcGVyLCBzdWItPnN3YXApOwogCXN1Yi0+ZXZ0LnBvcnQucmVmID0gaHRvaGwocG9ydF9yZWYsIHN1Yi0+c3dhcCk7CiAJc3ViLT5ldnQucG9ydC5ub2RlID0gaHRvaGwobm9kZSwgc3ViLT5zd2FwKTsKLQl0aXBjX3NlbmQoc3ViLT5zZXJ2ZXJfcmVmLCAxLCAmbXNnX3NlY3QpOworCXRpcGNfc2VuZChzdWItPnNlcnZlcl9yZWYsIDEsICZtc2dfc2VjdCwgbXNnX3NlY3QuaW92X2xlbik7CiB9CiAKIC8qKgpAQCAtNTIxLDcgKzUyMSw3IEBACiAKIAkvKiBTZW5kIGFuIEFDSy0gdG8gY29tcGxldGUgY29ubmVjdGlvbiBoYW5kc2hha2luZyAqLwogCi0JdGlwY19zZW5kKHNlcnZlcl9wb3J0X3JlZiwgMCwgTlVMTCk7CisJdGlwY19zZW5kKHNlcnZlcl9wb3J0X3JlZiwgMCwgTlVMTCwgMCk7CiAKIAkvKiBIYW5kbGUgb3B0aW9uYWwgc3Vic2NyaXB0aW9uIHJlcXVlc3QgKi8KIApkaWZmIC0tZ2l0IGEvbmV0L3VuaXgvYWZfdW5peC5jIGIvbmV0L3VuaXgvYWZfdW5peC5jCmluZGV4IDNhNDNhODMuLmIxZDc1YmUgMTAwNjQ0Ci0tLSBhL25ldC91bml4L2FmX3VuaXguYworKysgYi9uZXQvdW5peC9hZl91bml4LmMKQEAgLTUyNCw2ICs1MjQsOCBAQAogCQkJICAgICAgaW50LCBpbnQpOwogc3RhdGljIGludCB1bml4X3NlcXBhY2tldF9zZW5kbXNnKHN0cnVjdCBraW9jYiAqLCBzdHJ1Y3Qgc29ja2V0ICosCiAJCQkJICBzdHJ1Y3QgbXNnaGRyICosIHNpemVfdCk7CitzdGF0aWMgaW50IHVuaXhfc2VxcGFja2V0X3JlY3Ztc2coc3RydWN0IGtpb2NiICosIHN0cnVjdCBzb2NrZXQgKiwKKwkJCQkgIHN0cnVjdCBtc2doZHIgKiwgc2l6ZV90LCBpbnQpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB1bml4X3N0cmVhbV9vcHMgPSB7CiAJLmZhbWlseSA9CVBGX1VOSVgsCkBAIC01ODMsNyArNTg1LDcgQEAKIAkuc2V0c29ja29wdCA9CXNvY2tfbm9fc2V0c29ja29wdCwKIAkuZ2V0c29ja29wdCA9CXNvY2tfbm9fZ2V0c29ja29wdCwKIAkuc2VuZG1zZyA9CXVuaXhfc2VxcGFja2V0X3NlbmRtc2csCi0JLnJlY3Ztc2cgPQl1bml4X2RncmFtX3JlY3Ztc2csCisJLnJlY3Ztc2cgPQl1bml4X3NlcXBhY2tldF9yZWN2bXNnLAogCS5tbWFwID0JCXNvY2tfbm9fbW1hcCwKIAkuc2VuZHBhZ2UgPQlzb2NrX25vX3NlbmRwYWdlLAogfTsKQEAgLTE2OTksNiArMTcwMSwxOCBAQAogCXJldHVybiB1bml4X2RncmFtX3NlbmRtc2coa2lvY2IsIHNvY2ssIG1zZywgbGVuKTsKIH0KIAorc3RhdGljIGludCB1bml4X3NlcXBhY2tldF9yZWN2bXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywKKwkJCSAgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUsCisJCQkgICAgICBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisKKwlpZiAoc2stPnNrX3N0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCkKKwkJcmV0dXJuIC1FTk9UQ09OTjsKKworCXJldHVybiB1bml4X2RncmFtX3JlY3Ztc2coaW9jYiwgc29jaywgbXNnLCBzaXplLCBmbGFncyk7Cit9CisKIHN0YXRpYyB2b2lkIHVuaXhfY29weV9hZGRyKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNvY2sgKnNrKQogewogCXN0cnVjdCB1bml4X3NvY2sgKnUgPSB1bml4X3NrKHNrKTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmMgYi9uZXQvd2lyZWxlc3MvY29yZS5jCmluZGV4IGZlMDFkZTIuLmMyMmVmMzQgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmMKKysrIGIvbmV0L3dpcmVsZXNzL2NvcmUuYwpAQCAtNDYsNiArNDYsMTEgQEAKIC8qIGZvciB0aGUgY2xlYW51cCwgc2NhbiBhbmQgZXZlbnQgd29ya3MgKi8KIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpjZmc4MDIxMV93cTsKIAorc3RhdGljIGJvb2wgY2ZnODAyMTFfZGlzYWJsZV80MG1oel8yNGdoejsKK21vZHVsZV9wYXJhbShjZmc4MDIxMV9kaXNhYmxlXzQwbWh6XzI0Z2h6LCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoY2ZnODAyMTFfZGlzYWJsZV80MG1oel8yNGdoeiwKKwkJICJEaXNhYmxlIDQwTUh6IHN1cHBvcnQgaW4gdGhlIDIuNEdIeiBiYW5kIik7CisKIC8qIHJlcXVpcmVzIGNmZzgwMjExX211dGV4IHRvIGJlIGhlbGQhICovCiBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmNmZzgwMjExX3JkZXZfYnlfd2lwaHlfaWR4KGludCB3aXBoeV9pZHgpCiB7CkBAIC0zNjUsNyArMzcwLDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmcmRldi0+YnNzX2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZyZGV2LT5ic3NfbGlzdCk7CiAJSU5JVF9XT1JLKCZyZGV2LT5zY2FuX2RvbmVfd2ssIF9fY2ZnODAyMTFfc2Nhbl9kb25lKTsKLQorCUlOSVRfV09SSygmcmRldi0+c2NoZWRfc2Nhbl9yZXN1bHRzX3drLCBfX2NmZzgwMjExX3NjaGVkX3NjYW5fcmVzdWx0cyk7CiAjaWZkZWYgQ09ORklHX0NGRzgwMjExX1dFWFQKIAlyZGV2LT53aXBoeS53ZXh0ID0gJmNmZzgwMjExX3dleHRfaGFuZGxlcjsKICNlbmRpZgpAQCAtNDExLDYgKzQxNiw2NyBAQAogfQogRVhQT1JUX1NZTUJPTCh3aXBoeV9uZXcpOwogCitzdGF0aWMgaW50IHdpcGh5X3ZlcmlmeV9jb21iaW5hdGlvbnMoc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2lmYWNlX2NvbWJpbmF0aW9uICpjOworCWludCBpLCBqOworCisJLyogSWYgd2UgaGF2ZSBjb21iaW5hdGlvbnMgZW5mb3JjZSB0aGVtICovCisJaWYgKHdpcGh5LT5uX2lmYWNlX2NvbWJpbmF0aW9ucykKKwkJd2lwaHktPmZsYWdzIHw9IFdJUEhZX0ZMQUdfRU5GT1JDRV9DT01CSU5BVElPTlM7CisKKwlmb3IgKGkgPSAwOyBpIDwgd2lwaHktPm5faWZhY2VfY29tYmluYXRpb25zOyBpKyspIHsKKwkJdTMyIGNudCA9IDA7CisJCXUxNiBhbGxfaWZ0eXBlcyA9IDA7CisKKwkJYyA9ICZ3aXBoeS0+aWZhY2VfY29tYmluYXRpb25zW2ldOworCisJCS8qIENvbWJpbmF0aW9ucyB3aXRoIGp1c3Qgb25lIGludGVyZmFjZSBhcmVuJ3QgcmVhbCAqLworCQlpZiAoV0FSTl9PTihjLT5tYXhfaW50ZXJmYWNlcyA8IDIpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJLyogTmVlZCBhdCBsZWFzdCBvbmUgY2hhbm5lbCAqLworCQlpZiAoV0FSTl9PTighYy0+bnVtX2RpZmZlcmVudF9jaGFubmVscykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoV0FSTl9PTighYy0+bl9saW1pdHMpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJZm9yIChqID0gMDsgaiA8IGMtPm5fbGltaXRzOyBqKyspIHsKKwkJCXUxNiB0eXBlcyA9IGMtPmxpbWl0c1tqXS50eXBlczsKKworCQkJLyoKKwkJCSAqIGludGVyZmFjZSB0eXBlcyBzaG91bGRuJ3Qgb3ZlcmxhcCwgdGhpcyBpcworCQkJICogdXNlZCBpbiBjZmc4MDIxMV9jYW5fY2hhbmdlX2ludGVyZmFjZSgpCisJCQkgKi8KKwkJCWlmIChXQVJOX09OKHR5cGVzICYgYWxsX2lmdHlwZXMpKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJYWxsX2lmdHlwZXMgfD0gdHlwZXM7CisKKwkJCWlmIChXQVJOX09OKCFjLT5saW1pdHNbal0ubWF4KSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJLyogU2hvdWxkbid0IGxpc3Qgc29mdHdhcmUgaWZ0eXBlcyBpbiBjb21iaW5hdGlvbnMhICovCisJCQlpZiAoV0FSTl9PTih3aXBoeS0+c29mdHdhcmVfaWZ0eXBlcyAmIHR5cGVzKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJY250ICs9IGMtPmxpbWl0c1tqXS5tYXg7CisJCQkvKgorCQkJICogRG9uJ3QgYWR2ZXJ0aXNlIGFuIHVuc3VwcG9ydGVkIHR5cGUKKwkJCSAqIGluIGEgY29tYmluYXRpb24uCisJCQkgKi8KKwkJCWlmIChXQVJOX09OKCh3aXBoeS0+aW50ZXJmYWNlX21vZGVzICYgdHlwZXMpICE9IHR5cGVzKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCS8qIFlvdSBjYW4ndCBldmVuIGNob29zZSB0aGF0IG1hbnkhICovCisJCWlmIChXQVJOX09OKGNudCA8IGMtPm1heF9pbnRlcmZhY2VzKSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCiBpbnQgd2lwaHlfcmVnaXN0ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSkKIHsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOwpAQCAtNDM5LDYgKzUwNSwxMCBAQAogCWlmIChXQVJOX09OKGlmbW9kZXMgIT0gd2lwaHktPmludGVyZmFjZV9tb2RlcykpCiAJCXdpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSBpZm1vZGVzOwogCisJcmVzID0gd2lwaHlfdmVyaWZ5X2NvbWJpbmF0aW9ucyh3aXBoeSk7CisJaWYgKHJlcykKKwkJcmV0dXJuIHJlczsKKwogCS8qIHNhbml0eSBjaGVjayBzdXBwb3J0ZWQgYmFuZHMvY2hhbm5lbHMgKi8KIAlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKSB7CiAJCXNiYW5kID0gd2lwaHktPmJhbmRzW2JhbmRdOwpAQCAtNDUxLDYgKzUyMSwxOCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJLyoKKwkJICogU2luY2UgY2ZnODAyMTFfZGlzYWJsZV80MG1oel8yNGdoeiBpcyBnbG9iYWwsIHdlIGNhbgorCQkgKiBtb2RpZnkgdGhlIHNiYW5kJ3MgaHQgZGF0YSBldmVuIGlmIHRoZSBkcml2ZXIgdXNlcyBhCisJCSAqIGdsb2JhbCBzdHJ1Y3R1cmUgZm9yIHRoYXQuCisJCSAqLworCQlpZiAoY2ZnODAyMTFfZGlzYWJsZV80MG1oel8yNGdoeiAmJgorCQkgICAgYmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haICYmCisJCSAgICBzYmFuZC0+aHRfY2FwLmh0X3N1cHBvcnRlZCkgeworCQkJc2JhbmQtPmh0X2NhcC5jYXAgJj0gfklFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwOworCQkJc2JhbmQtPmh0X2NhcC5jYXAgJj0gfklFRUU4MDIxMV9IVF9DQVBfU0dJXzQwOworCQl9CisKKwkJLyoKIAkJICogU2luY2Ugd2UgdXNlIGEgdTMyIGZvciByYXRlIGJpdG1hcHMgaW4KIAkJICogaWVlZTgwMjExX2dldF9yZXNwb25zZV9yYXRlLCB3ZSBjYW5ub3QKIAkJICogaGF2ZSBtb3JlIHRoYW4gMzIgbGVnYWN5IHJhdGVzLgpAQCAtNDc2LDYgKzU1OCwxMyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpZiAocmRldi0+d2lwaHkud293bGFuLm5fcGF0dGVybnMpIHsKKwkJaWYgKFdBUk5fT04oIXJkZXYtPndpcGh5Lndvd2xhbi5wYXR0ZXJuX21pbl9sZW4gfHwKKwkJCSAgICByZGV2LT53aXBoeS53b3dsYW4ucGF0dGVybl9taW5fbGVuID4KKwkJCSAgICByZGV2LT53aXBoeS53b3dsYW4ucGF0dGVybl9tYXhfbGVuKSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwogCS8qIGNoZWNrIGFuZCBzZXQgdXAgYml0cmF0ZXMgKi8KIAlpZWVlODAyMTFfc2V0X2JpdHJhdGVfZmxhZ3Mod2lwaHkpOwogCkBAIC02MTQsNiArNzAzLDcgQEAKIAltdXRleF9kZXN0cm95KCZyZGV2LT5kZXZsaXN0X210eCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNjYW4sIHRtcCwgJnJkZXYtPmJzc19saXN0LCBsaXN0KQogCQljZmc4MDIxMV9wdXRfYnNzKCZzY2FuLT5wdWIpOworCWNmZzgwMjExX3JkZXZfZnJlZV93b3dsYW4ocmRldik7CiAJa2ZyZWUocmRldik7CiB9CiAKQEAgLTY0Nyw2ICs3MzcsMTEgQEAKIAkJX19fY2ZnODAyMTFfc2Nhbl9kb25lKHJkZXYsIHRydWUpOwogCX0KIAorCWlmIChXQVJOX09OKHJkZXYtPnNjaGVkX3NjYW5fcmVxICYmCisJCSAgICByZGV2LT5zY2hlZF9zY2FuX3JlcS0+ZGV2ID09IHdkZXYtPm5ldGRldikpIHsKKwkJX19jZmc4MDIxMV9zdG9wX3NjaGVkX3NjYW4ocmRldiwgZmFsc2UpOworCX0KKwogCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOwogCiAJbXV0ZXhfbG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOwpAQCAtNjY4LDYgKzc2Myw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5kZXY7CiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CisJaW50IHJldDsKIAogCWlmICghd2RldikKIAkJcmV0dXJuIE5PVElGWV9ET05FOwpAQCAtNzM0LDYgKzgzMCwxMCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVDoKIAkJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQkJY2ZnODAyMTFfbG9ja19yZGV2KHJkZXYpOworCQkJX19jZmc4MDIxMV9zdG9wX3NjaGVkX3NjYW4ocmRldiwgZmFsc2UpOworCQkJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CisKIAkJCXdkZXZfbG9jayh3ZGV2KTsKICNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfV0VYVAogCQkJa2ZyZWUod2Rldi0+d2V4dC5pZSk7CkBAIC03NTIsNiArODUyLDcgQEAKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9CisJCXdkZXYtPmJlYWNvbl9pbnRlcnZhbCA9IDA7CiAJCWJyZWFrOwogCWNhc2UgTkVUREVWX0RPV046CiAJCWRldl9ob2xkKGRldik7CkBAIC04NTgsNiArOTU5LDkgQEAKIAkJCXJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKC1FT1BOT1RTVVBQKTsKIAkJaWYgKHJma2lsbF9ibG9ja2VkKHJkZXYtPnJma2lsbCkpCiAJCQlyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubygtRVJGS0lMTCk7CisJCXJldCA9IGNmZzgwMjExX2Nhbl9hZGRfaW50ZXJmYWNlKHJkZXYsIHdkZXYtPmlmdHlwZSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhyZXQpOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmggYi9uZXQvd2lyZWxlc3MvY29yZS5oCmluZGV4IDI2YTBhMDguLmJmMGZiNDAgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmgKKysrIGIvbmV0L3dpcmVsZXNzL2NvcmUuaApAQCAtNjAsOCArNjAsMTAgQEAKIAlzdHJ1Y3QgcmJfcm9vdCBic3NfdHJlZTsKIAl1MzIgYnNzX2dlbmVyYXRpb247CiAJc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqc2Nhbl9yZXE7IC8qIHByb3RlY3RlZCBieSBSVE5MICovCisJc3RydWN0IGNmZzgwMjExX3NjaGVkX3NjYW5fcmVxdWVzdCAqc2NoZWRfc2Nhbl9yZXE7CiAJdW5zaWduZWQgbG9uZyBzdXNwZW5kX2F0OwogCXN0cnVjdCB3b3JrX3N0cnVjdCBzY2FuX2RvbmVfd2s7CisJc3RydWN0IHdvcmtfc3RydWN0IHNjaGVkX3NjYW5fcmVzdWx0c193azsKIAogI2lmZGVmIENPTkZJR19OTDgwMjExX1RFU1RNT0RFCiAJc3RydWN0IGdlbmxfaW5mbyAqdGVzdG1vZGVfaW5mbzsKQEAgLTcwLDYgKzcyLDggQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY29ubl93b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBldmVudF93b3JrOwogCisJc3RydWN0IGNmZzgwMjExX3dvd2xhbiAqd293bGFuOworCiAJLyogbXVzdCBiZSBsYXN0IGJlY2F1c2Ugb2YgdGhlIHdheSB3ZSBkbyB3aXBoeV9wcml2KCksCiAJICogYW5kIGl0IHNob3VsZCBhdCBsZWFzdCBiZSBhbGlnbmVkIHRvIE5FVERFVl9BTElHTiAqLwogCXN0cnVjdCB3aXBoeSB3aXBoeSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhORVRERVZfQUxJR04pKSk7CkBAIC04OSw2ICs5MywxOCBAQAogCXJldHVybiB3aXBoeV9pZHggPj0gMDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkCitjZmc4MDIxMV9yZGV2X2ZyZWVfd293bGFuKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldikKK3sKKwlpbnQgaTsKKworCWlmICghcmRldi0+d293bGFuKQorCQlyZXR1cm47CisJZm9yIChpID0gMDsgaSA8IHJkZXYtPndvd2xhbi0+bl9wYXR0ZXJuczsgaSsrKQorCQlrZnJlZShyZGV2LT53b3dsYW4tPnBhdHRlcm5zW2ldLm1hc2spOworCWtmcmVlKHJkZXYtPndvd2xhbi0+cGF0dGVybnMpOworCWtmcmVlKHJkZXYtPndvd2xhbik7Cit9CiAKIGV4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY2ZnODAyMTFfd3E7CiBleHRlcm4gc3RydWN0IG11dGV4IGNmZzgwMjExX211dGV4OwpAQCAtMzk3LDEyICs0MTMsMjYgQEAKIHZvaWQgY2ZnODAyMTFfc21lX2Rpc2Fzc29jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpZHgpOwogdm9pZCBfX2NmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndrKTsKIHZvaWQgX19fY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwgYm9vbCBsZWFrKTsKK3ZvaWQgX19jZmc4MDIxMV9zY2hlZF9zY2FuX3Jlc3VsdHMoc3RydWN0IHdvcmtfc3RydWN0ICp3ayk7CitpbnQgX19jZmc4MDIxMV9zdG9wX3NjaGVkX3NjYW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgICAgIGJvb2wgZHJpdmVyX2luaXRpYXRlZCk7CiB2b2lkIGNmZzgwMjExX3VwbG9hZF9jb25uZWN0X2tleXMoc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldik7CiBpbnQgY2ZnODAyMTFfY2hhbmdlX2lmYWNlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSBubDgwMjExX2lmdHlwZSBudHlwZSwKIAkJCSAgdTMyICpmbGFncywgc3RydWN0IHZpZl9wYXJhbXMgKnBhcmFtcyk7CiB2b2lkIGNmZzgwMjExX3Byb2Nlc3NfcmRldl9ldmVudHMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KTsKIAoraW50IGNmZzgwMjExX2Nhbl9jaGFuZ2VfaW50ZXJmYWNlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCQkgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCisJCQkJICBlbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZSk7CisKK3N0YXRpYyBpbmxpbmUgaW50CitjZmc4MDIxMV9jYW5fYWRkX2ludGVyZmFjZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgICBlbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZSkKK3sKKwlyZXR1cm4gY2ZnODAyMTFfY2FuX2NoYW5nZV9pbnRlcmZhY2UocmRldiwgTlVMTCwgaWZ0eXBlKTsKK30KKwogc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICoKIHJkZXZfZnJlcV90b19jaGFuKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJICBpbnQgZnJlcSwgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUpOwpAQCAtNDEyLDYgKzQ0Miw5IEBACiAKIHUxNiBjZmc4MDIxMV9jYWxjdWxhdGVfYml0cmF0ZShzdHJ1Y3QgcmF0ZV9pbmZvICpyYXRlKTsKIAoraW50IGNmZzgwMjExX3ZhbGlkYXRlX2JlYWNvbl9pbnQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCSB1MzIgYmVhY29uX2ludCk7CisKICNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTCiAjZGVmaW5lIENGRzgwMjExX0RFVl9XQVJOX09OKGNvbmQpCVdBUk5fT04oY29uZCkKICNlbHNlCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvbGliODAyMTFfY3J5cHRfd2VwLmMgYi9uZXQvd2lyZWxlc3MvbGliODAyMTFfY3J5cHRfd2VwLmMKaW5kZXggZTJlODg4Ny4uMmYyNjVlMCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2xpYjgwMjExX2NyeXB0X3dlcC5jCisrKyBiL25ldC93aXJlbGVzcy9saWI4MDIxMV9jcnlwdF93ZXAuYwpAQCAtOTYsMTMgKzk2LDEyIEBACiAJCQkgICAgICAgdTggKmtleSwgaW50IGtleWxlbiwgdm9pZCAqcHJpdikKIHsKIAlzdHJ1Y3QgbGliODAyMTFfd2VwX2RhdGEgKndlcCA9IHByaXY7Ci0JdTMyIGtsZW4sIGxlbjsKKwl1MzIga2xlbjsKIAl1OCAqcG9zOwogCiAJaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgNCB8fCBza2ItPmxlbiA8IGhkcl9sZW4pCiAJCXJldHVybiAtMTsKIAotCWxlbiA9IHNrYi0+bGVuIC0gaGRyX2xlbjsKIAlwb3MgPSBza2JfcHVzaChza2IsIDQpOwogCW1lbW1vdmUocG9zLCBwb3MgKyA0LCBoZHJfbGVuKTsKIAlwb3MgKz0gaGRyX2xlbjsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9tZXNoLmMgYi9uZXQvd2lyZWxlc3MvbWVzaC5jCmluZGV4IDczZTM5YzEuLjVjMTE2MDggMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9tZXNoLmMKKysrIGIvbmV0L3dpcmVsZXNzL21lc2guYwpAQCAtMSw1ICsxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KICNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KKyNpbmNsdWRlICJubDgwMjExLmgiCiAjaW5jbHVkZSAiY29yZS5oIgogCiAvKiBEZWZhdWx0IHZhbHVlcywgdGltZW91dHMgaW4gbXMgKi8KQEAgLTUzLDggKzU0LDkgQEAKIGNvbnN0IHN0cnVjdCBtZXNoX3NldHVwIGRlZmF1bHRfbWVzaF9zZXR1cCA9IHsKIAkucGF0aF9zZWxfcHJvdG8gPSBJRUVFODAyMTFfUEFUSF9QUk9UT0NPTF9IV01QLAogCS5wYXRoX21ldHJpYyA9IElFRUU4MDIxMV9QQVRIX01FVFJJQ19BSVJUSU1FLAotCS52ZW5kb3JfaWUgPSBOVUxMLAotCS52ZW5kb3JfaWVfbGVuID0gMCwKKwkuaWUgPSBOVUxMLAorCS5pZV9sZW4gPSAwLAorCS5pc19zZWN1cmUgPSBmYWxzZSwKIH07CiAKIGludCBfX2NmZzgwMjExX2pvaW5fbWVzaChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCkBAIC03Miw2ICs3NCwxMCBAQAogCWlmIChkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKKwlpZiAoIShyZGV2LT53aXBoeS5mbGFncyAmIFdJUEhZX0ZMQUdfTUVTSF9BVVRIKSAmJgorCSAgICAgIHNldHVwLT5pc19zZWN1cmUpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwogCWlmICh3ZGV2LT5tZXNoX2lkX2xlbikKIAkJcmV0dXJuIC1FQUxSRUFEWTsKIApAQCAtMTA1LDYgKzExMSwxOSBAQAogCXJldHVybiBlcnI7CiB9CiAKK3ZvaWQgY2ZnODAyMTFfbm90aWZ5X25ld19wZWVyX2NhbmRpZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQljb25zdCB1OCAqbWFjYWRkciwgY29uc3QgdTgqIGllLCB1OCBpZV9sZW4sIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCisJaWYgKFdBUk5fT04od2Rldi0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpKQorCQlyZXR1cm47CisKKwlubDgwMjExX3NlbmRfbmV3X3BlZXJfY2FuZGlkYXRlKHdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSksIGRldiwKKwkJCW1hY2FkZHIsIGllLCBpZV9sZW4sIGdmcCk7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX25vdGlmeV9uZXdfcGVlcl9jYW5kaWRhdGUpOworCiBzdGF0aWMgaW50IF9fY2ZnODAyMTFfbGVhdmVfbWVzaChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvbWxtZS5jIGIvbmV0L3dpcmVsZXNzL21sbWUuYwppbmRleCBhYTVkZjg4Li40OTNiOTM5IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvbWxtZS5jCisrKyBiL25ldC93aXJlbGVzcy9tbG1lLmMKQEAgLTc3MCw2ICs3NzAsMTUgQEAKIH0KIEVYUE9SVF9TWU1CT0woY2ZnODAyMTFfbmV3X3N0YSk7CiAKK3ZvaWQgY2ZnODAyMTFfZGVsX3N0YShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqbWFjX2FkZHIsIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gZGV2LT5pZWVlODAyMTFfcHRyLT53aXBoeTsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCisJbmw4MDIxMV9zZW5kX3N0YV9kZWxfZXZlbnQocmRldiwgZGV2LCBtYWNfYWRkciwgZ2ZwKTsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfZGVsX3N0YSk7CisKIHN0cnVjdCBjZmc4MDIxMV9tZ210X3JlZ2lzdHJhdGlvbiB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCkBAIC05NTQsNiArOTYzLDE2IEBACiAJCQlpZiAobWVtY21wKG1nbXQtPmJzc2lkLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTikpCiAJCQkJZXJyID0gLUVJTlZBTDsKIAkJCWJyZWFrOworCQljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CisJCQlpZiAobWVtY21wKG1nbXQtPnNhLCBtZ210LT5ic3NpZCwgRVRIX0FMRU4pKSB7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qCisJCQkgKiBjaGVjayBmb3IgbWVzaCBEQSBtdXN0IGJlIGRvbmUgYnkgZHJpdmVyIGFzCisJCQkgKiBjZmc4MDIxMSBkb2Vzbid0IHRyYWNrIHRoZSBzdGF0aW9ucworCQkJICovCisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVyciA9IC1FT1BOT1RTVVBQOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwppbmRleCA0ZWJjZTQyLi4yMjIyY2UwIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKQEAgLTEyNCw2ICsxMjQsNyBAQAogCVtOTDgwMjExX0FUVFJfQlNTX0hUX09QTU9ERV0gPSB7IC50eXBlID0gTkxBX1UxNiB9LAogCiAJW05MODAyMTFfQVRUUl9NRVNIX0NPTkZJR10gPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAorCVtOTDgwMjExX0FUVFJfU1VQUE9SVF9NRVNIX0FVVEhdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sCiAKIAlbTkw4MDIxMV9BVFRSX0hUX0NBUEFCSUxJVFldID0geyAudHlwZSA9IE5MQV9CSU5BUlksCiAJCQkJCSAubGVuID0gTkw4MDIxMV9IVF9DQVBBQklMSVRZX0xFTiB9LApAQCAtMTcyLDYgKzE3Myw5IEBACiAJW05MODAyMTFfQVRUUl9NQ0FTVF9SQVRFXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiAJW05MODAyMTFfQVRUUl9PRkZDSEFOTkVMX1RYX09LXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAogCVtOTDgwMjExX0FUVFJfS0VZX0RFRkFVTFRfVFlQRVNdID0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKKwlbTkw4MDIxMV9BVFRSX1dPV0xBTl9UUklHR0VSU10gPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAorCVtOTDgwMjExX0FUVFJfU1RBX1BMSU5LX1NUQVRFXSA9IHsgLnR5cGUgPSBOTEFfVTggfSwKKwlbTkw4MDIxMV9BVFRSX1NDSEVEX1NDQU5fSU5URVJWQUxdID0geyAudHlwZSA9IE5MQV9VMzIgfSwKIH07CiAKIC8qIHBvbGljeSBmb3IgdGhlIGtleSBhdHRyaWJ1dGVzICovCkBAIC0xOTMsNiArMTk3LDE1IEBACiAJW05MODAyMTFfS0VZX0RFRkFVTFRfVFlQRV9NVUxUSUNBU1RdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sCiB9OwogCisvKiBwb2xpY3kgZm9yIFdvV0xBTiBhdHRyaWJ1dGVzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kKK25sODAyMTFfd293bGFuX3BvbGljeVtOVU1fTkw4MDIxMV9XT1dMQU5fVFJJR10gPSB7CisJW05MODAyMTFfV09XTEFOX1RSSUdfQU5ZXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAorCVtOTDgwMjExX1dPV0xBTl9UUklHX0RJU0NPTk5FQ1RdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sCisJW05MODAyMTFfV09XTEFOX1RSSUdfTUFHSUNfUEtUXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAorCVtOTDgwMjExX1dPV0xBTl9UUklHX1BLVF9QQVRURVJOXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sCit9OworCiAvKiBpZmlkeCBnZXQgaGVscGVyICovCiBzdGF0aWMgaW50IG5sODAyMTFfZ2V0X2lmaWR4KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKQEAgLTUzMyw2ICs1NDYsNyBAQAogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0dPOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKIAkJaWYgKCF3ZGV2LT5jdXJyZW50X2JzcykKQEAgLTU1MCw2ICs1NjQsODggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBubDgwMjExX3B1dF9pZnR5cGVzKHN0cnVjdCBza19idWZmICptc2csIHUzMiBhdHRyLCB1MTYgaWZtb2RlcykKK3sKKwlzdHJ1Y3QgbmxhdHRyICpubF9tb2RlcyA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgYXR0cik7CisJaW50IGk7CisKKwlpZiAoIW5sX21vZGVzKQorCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKworCWkgPSAwOworCXdoaWxlIChpZm1vZGVzKSB7CisJCWlmIChpZm1vZGVzICYgMSkKKwkJCU5MQV9QVVRfRkxBRyhtc2csIGkpOworCQlpZm1vZGVzID4+PSAxOworCQlpKys7CisJfQorCisJbmxhX25lc3RfZW5kKG1zZywgbmxfbW9kZXMpOworCXJldHVybiAwOworCitubGFfcHV0X2ZhaWx1cmU6CisJcmV0dXJuIC1FTk9CVUZTOworfQorCitzdGF0aWMgaW50IG5sODAyMTFfcHV0X2lmYWNlX2NvbWJpbmF0aW9ucyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCQkgIHN0cnVjdCBza19idWZmICptc2cpCit7CisJc3RydWN0IG5sYXR0ciAqbmxfY29tYmlzOworCWludCBpLCBqOworCisJbmxfY29tYmlzID0gbmxhX25lc3Rfc3RhcnQobXNnLAorCQkJCU5MODAyMTFfQVRUUl9JTlRFUkZBQ0VfQ09NQklOQVRJT05TKTsKKwlpZiAoIW5sX2NvbWJpcykKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwlmb3IgKGkgPSAwOyBpIDwgd2lwaHktPm5faWZhY2VfY29tYmluYXRpb25zOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9pZmFjZV9jb21iaW5hdGlvbiAqYzsKKwkJc3RydWN0IG5sYXR0ciAqbmxfY29tYmksICpubF9saW1pdHM7CisKKwkJYyA9ICZ3aXBoeS0+aWZhY2VfY29tYmluYXRpb25zW2ldOworCisJCW5sX2NvbWJpID0gbmxhX25lc3Rfc3RhcnQobXNnLCBpICsgMSk7CisJCWlmICghbmxfY29tYmkpCisJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKworCQlubF9saW1pdHMgPSBubGFfbmVzdF9zdGFydChtc2csIE5MODAyMTFfSUZBQ0VfQ09NQl9MSU1JVFMpOworCQlpZiAoIW5sX2xpbWl0cykKKwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCisJCWZvciAoaiA9IDA7IGogPCBjLT5uX2xpbWl0czsgaisrKSB7CisJCQlzdHJ1Y3QgbmxhdHRyICpubF9saW1pdDsKKworCQkJbmxfbGltaXQgPSBubGFfbmVzdF9zdGFydChtc2csIGogKyAxKTsKKwkJCWlmICghbmxfbGltaXQpCisJCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfSUZBQ0VfTElNSVRfTUFYLAorCQkJCSAgICBjLT5saW1pdHNbal0ubWF4KTsKKwkJCWlmIChubDgwMjExX3B1dF9pZnR5cGVzKG1zZywgTkw4MDIxMV9JRkFDRV9MSU1JVF9UWVBFUywKKwkJCQkJCWMtPmxpbWl0c1tqXS50eXBlcykpCisJCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJCQlubGFfbmVzdF9lbmQobXNnLCBubF9saW1pdCk7CisJCX0KKworCQlubGFfbmVzdF9lbmQobXNnLCBubF9saW1pdHMpOworCisJCWlmIChjLT5iZWFjb25faW50X2luZnJhX21hdGNoKQorCQkJTkxBX1BVVF9GTEFHKG1zZywKKwkJCQlOTDgwMjExX0lGQUNFX0NPTUJfU1RBX0FQX0JJX01BVENIKTsKKwkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0lGQUNFX0NPTUJfTlVNX0NIQU5ORUxTLAorCQkJICAgIGMtPm51bV9kaWZmZXJlbnRfY2hhbm5lbHMpOworCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfSUZBQ0VfQ09NQl9NQVhOVU0sCisJCQkgICAgYy0+bWF4X2ludGVyZmFjZXMpOworCisJCW5sYV9uZXN0X2VuZChtc2csIG5sX2NvbWJpKTsKKwl9CisKKwlubGFfbmVzdF9lbmQobXNnLCBubF9jb21iaXMpOworCisJcmV0dXJuIDA7CitubGFfcHV0X2ZhaWx1cmU6CisJcmV0dXJuIC1FTk9CVUZTOworfQorCiBzdGF0aWMgaW50IG5sODAyMTFfc2VuZF93aXBoeShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgZmxhZ3MsCiAJCQkgICAgICBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRldikKIHsKQEAgLTU1NywxMyArNjUzLDExIEBACiAJc3RydWN0IG5sYXR0ciAqbmxfYmFuZHMsICpubF9iYW5kOwogCXN0cnVjdCBubGF0dHIgKm5sX2ZyZXFzLCAqbmxfZnJlcTsKIAlzdHJ1Y3QgbmxhdHRyICpubF9yYXRlcywgKm5sX3JhdGU7Ci0Jc3RydWN0IG5sYXR0ciAqbmxfbW9kZXM7CiAJc3RydWN0IG5sYXR0ciAqbmxfY21kczsKIAllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOwogCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZTsKIAlpbnQgaTsKLQl1MTYgaWZtb2RlcyA9IGRldi0+d2lwaHkuaW50ZXJmYWNlX21vZGVzOwogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhyeF9zdHlwZXMgKm1nbXRfc3R5cGVzID0KIAkJCQlkZXYtPndpcGh5Lm1nbXRfc3R5cGVzOwogCkBAIC01OTQsNiArNjg4LDggQEAKIAogCWlmIChkZXYtPndpcGh5LmZsYWdzICYgV0lQSFlfRkxBR19JQlNTX1JTTikKIAkJTkxBX1BVVF9GTEFHKG1zZywgTkw4MDIxMV9BVFRSX1NVUFBPUlRfSUJTU19SU04pOworCWlmIChkZXYtPndpcGh5LmZsYWdzICYgV0lQSFlfRkxBR19NRVNIX0FVVEgpCisJCU5MQV9QVVRfRkxBRyhtc2csIE5MODAyMTFfQVRUUl9TVVBQT1JUX01FU0hfQVVUSCk7CiAKIAlOTEFfUFVUKG1zZywgTkw4MDIxMV9BVFRSX0NJUEhFUl9TVUlURVMsCiAJCXNpemVvZih1MzIpICogZGV2LT53aXBoeS5uX2NpcGhlcl9zdWl0ZXMsCkBAIC02MjEsMjAgKzcxNywxMCBAQAogCQl9CiAJfQogCi0JbmxfbW9kZXMgPSBubGFfbmVzdF9zdGFydChtc2csIE5MODAyMTFfQVRUUl9TVVBQT1JURURfSUZUWVBFUyk7Ci0JaWYgKCFubF9tb2RlcykKKwlpZiAobmw4MDIxMV9wdXRfaWZ0eXBlcyhtc2csIE5MODAyMTFfQVRUUl9TVVBQT1JURURfSUZUWVBFUywKKwkJCQlkZXYtPndpcGh5LmludGVyZmFjZV9tb2RlcykpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCi0JaSA9IDA7Ci0Jd2hpbGUgKGlmbW9kZXMpIHsKLQkJaWYgKGlmbW9kZXMgJiAxKQotCQkJTkxBX1BVVF9GTEFHKG1zZywgaSk7Ci0JCWlmbW9kZXMgPj49IDE7Ci0JCWkrKzsKLQl9Ci0KLQlubGFfbmVzdF9lbmQobXNnLCBubF9tb2Rlcyk7Ci0KIAlubF9iYW5kcyA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZX0JBTkRTKTsKIAlpZiAoIW5sX2JhbmRzKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKQEAgLTc0Niw2ICs4MzIsOCBAQAogCX0KIAlDTUQoc2V0X2NoYW5uZWwsIFNFVF9DSEFOTkVMKTsKIAlDTUQoc2V0X3dkc19wZWVyLCBTRVRfV0RTX1BFRVIpOworCWlmIChkZXYtPndpcGh5LmZsYWdzICYgV0lQSFlfRkxBR19TVVBQT1JUU19TQ0hFRF9TQ0FOKQorCQlDTUQoc2NoZWRfc2Nhbl9zdGFydCwgU1RBUlRfU0NIRURfU0NBTik7CiAKICN1bmRlZiBDTUQKIApAQCAtODE4LDYgKzkwNiw0MiBAQAogCQlubGFfbmVzdF9lbmQobXNnLCBubF9pZnMpOwogCX0KIAorCWlmIChkZXYtPndpcGh5Lndvd2xhbi5mbGFncyB8fCBkZXYtPndpcGh5Lndvd2xhbi5uX3BhdHRlcm5zKSB7CisJCXN0cnVjdCBubGF0dHIgKm5sX3dvd2xhbjsKKworCQlubF93b3dsYW4gPSBubGFfbmVzdF9zdGFydChtc2csCisJCQkJTkw4MDIxMV9BVFRSX1dPV0xBTl9UUklHR0VSU19TVVBQT1JURUQpOworCQlpZiAoIW5sX3dvd2xhbikKKwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCisJCWlmIChkZXYtPndpcGh5Lndvd2xhbi5mbGFncyAmIFdJUEhZX1dPV0xBTl9BTlkpCisJCQlOTEFfUFVUX0ZMQUcobXNnLCBOTDgwMjExX1dPV0xBTl9UUklHX0FOWSk7CisJCWlmIChkZXYtPndpcGh5Lndvd2xhbi5mbGFncyAmIFdJUEhZX1dPV0xBTl9ESVNDT05ORUNUKQorCQkJTkxBX1BVVF9GTEFHKG1zZywgTkw4MDIxMV9XT1dMQU5fVFJJR19ESVNDT05ORUNUKTsKKwkJaWYgKGRldi0+d2lwaHkud293bGFuLmZsYWdzICYgV0lQSFlfV09XTEFOX01BR0lDX1BLVCkKKwkJCU5MQV9QVVRfRkxBRyhtc2csIE5MODAyMTFfV09XTEFOX1RSSUdfTUFHSUNfUEtUKTsKKwkJaWYgKGRldi0+d2lwaHkud293bGFuLm5fcGF0dGVybnMpIHsKKwkJCXN0cnVjdCBubDgwMjExX3dvd2xhbl9wYXR0ZXJuX3N1cHBvcnQgcGF0ID0geworCQkJCS5tYXhfcGF0dGVybnMgPSBkZXYtPndpcGh5Lndvd2xhbi5uX3BhdHRlcm5zLAorCQkJCS5taW5fcGF0dGVybl9sZW4gPQorCQkJCQlkZXYtPndpcGh5Lndvd2xhbi5wYXR0ZXJuX21pbl9sZW4sCisJCQkJLm1heF9wYXR0ZXJuX2xlbiA9CisJCQkJCWRldi0+d2lwaHkud293bGFuLnBhdHRlcm5fbWF4X2xlbiwKKwkJCX07CisJCQlOTEFfUFVUKG1zZywgTkw4MDIxMV9XT1dMQU5fVFJJR19QS1RfUEFUVEVSTiwKKwkJCQlzaXplb2YocGF0KSwgJnBhdCk7CisJCX0KKworCQlubGFfbmVzdF9lbmQobXNnLCBubF93b3dsYW4pOworCX0KKworCWlmIChubDgwMjExX3B1dF9pZnR5cGVzKG1zZywgTkw4MDIxMV9BVFRSX1NPRlRXQVJFX0lGVFlQRVMsCisJCQkJZGV2LT53aXBoeS5zb2Z0d2FyZV9pZnR5cGVzKSkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwlpZiAobmw4MDIxMV9wdXRfaWZhY2VfY29tYmluYXRpb25zKCZkZXYtPndpcGh5LCBtc2cpKQorCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKwogCXJldHVybiBnZW5sbXNnX2VuZChtc2csIGhkcik7CiAKICBubGFfcHV0X2ZhaWx1cmU6CkBAIC0xNjc5LDE0ICsxODAzLDYgQEAKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCi0JCWlmICghKHJkZXYtPndpcGh5LmZsYWdzICYKLQkJCQlXSVBIWV9GTEFHX1NVUFBPUlRTX1NFUEFSQVRFX0RFRkFVTFRfS0VZUykpIHsKLQkJCWlmICgha2V5LmRlZl91bmkgfHwgIWtleS5kZWZfbXVsdGkpIHsKLQkJCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJfQotCiAJCWVyciA9IHJkZXYtPm9wcy0+c2V0X2RlZmF1bHRfa2V5KCZyZGV2LT53aXBoeSwgZGV2LCBrZXkuaWR4LAogCQkJCQkJIGtleS5kZWZfdW5pLCBrZXkuZGVmX211bHRpKTsKIApAQCAtMTgzNyw4ICsxOTUzLDkgQEAKIAkJICAgIHN0cnVjdCBiZWFjb25fcGFyYW1ldGVycyAqaW5mbyk7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby0+dXNlcl9wdHJbMF07CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluZm8tPnVzZXJfcHRyWzFdOworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CiAJc3RydWN0IGJlYWNvbl9wYXJhbWV0ZXJzIHBhcmFtczsKLQlpbnQgaGF2ZWluZm8gPSAwOworCWludCBoYXZlaW5mbyA9IDAsIGVycjsKIAogCWlmICghaXNfdmFsaWRfaWVfYXR0cihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfQkVBQ09OX1RBSUxdKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xODQ3LDYgKzE5NjQsOCBAQAogCSAgICBkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9QMlBfR08pCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAorCW1lbXNldCgmcGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7CisKIAlzd2l0Y2ggKGluZm8tPmdlbmxoZHItPmNtZCkgewogCWNhc2UgTkw4MDIxMV9DTURfTkVXX0JFQUNPTjoKIAkJLyogdGhlc2UgYXJlIHJlcXVpcmVkIGZvciBORVdfQkVBQ09OICovCkBAIC0xODU1LDYgKzE5NzQsMTUgQEAKIAkJICAgICFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfQkVBQ09OX0hFQURdKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKKwkJcGFyYW1zLmludGVydmFsID0KKwkJCW5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9CRUFDT05fSU5URVJWQUxdKTsKKwkJcGFyYW1zLmR0aW1fcGVyaW9kID0KKwkJCW5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9EVElNX1BFUklPRF0pOworCisJCWVyciA9IGNmZzgwMjExX3ZhbGlkYXRlX2JlYWNvbl9pbnQocmRldiwgcGFyYW1zLmludGVydmFsKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKIAkJY2FsbCA9IHJkZXYtPm9wcy0+YWRkX2JlYWNvbjsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0NNRF9TRVRfQkVBQ09OOgpAQCAtMTg2OCwyMCArMTk5Niw2IEBACiAJaWYgKCFjYWxsKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQltZW1zZXQoJnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpOwotCi0JaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9CRUFDT05fSU5URVJWQUxdKSB7Ci0JCXBhcmFtcy5pbnRlcnZhbCA9Ci0JCSAgICBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfQkVBQ09OX0lOVEVSVkFMXSk7Ci0JCWhhdmVpbmZvID0gMTsKLQl9Ci0KLQlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0RUSU1fUEVSSU9EXSkgewotCQlwYXJhbXMuZHRpbV9wZXJpb2QgPQotCQkgICAgbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0RUSU1fUEVSSU9EXSk7Ci0JCWhhdmVpbmZvID0gMTsKLQl9Ci0KIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0JFQUNPTl9IRUFEXSkgewogCQlwYXJhbXMuaGVhZCA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9CRUFDT05fSEVBRF0pOwogCQlwYXJhbXMuaGVhZF9sZW4gPQpAQCAtMTg5OSwxMyArMjAxMywxOCBAQAogCWlmICghaGF2ZWluZm8pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIGNhbGwoJnJkZXYtPndpcGh5LCBkZXYsICZwYXJhbXMpOworCWVyciA9IGNhbGwoJnJkZXYtPndpcGh5LCBkZXYsICZwYXJhbXMpOworCWlmICghZXJyICYmIHBhcmFtcy5pbnRlcnZhbCkKKwkJd2Rldi0+YmVhY29uX2ludGVydmFsID0gcGFyYW1zLmludGVydmFsOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfYmVhY29uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby0+dXNlcl9wdHJbMF07CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluZm8tPnVzZXJfcHRyWzFdOworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJaW50IGVycjsKIAogCWlmICghcmRldi0+b3BzLT5kZWxfYmVhY29uKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC0xOTE0LDcgKzIwMzMsMTAgQEAKIAkgICAgZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfUDJQX0dPKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlyZXR1cm4gcmRldi0+b3BzLT5kZWxfYmVhY29uKCZyZGV2LT53aXBoeSwgZGV2KTsKKwllcnIgPSByZGV2LT5vcHMtPmRlbF9iZWFjb24oJnJkZXYtPndpcGh5LCBkZXYpOworCWlmICghZXJyKQorCQl3ZGV2LT5iZWFjb25faW50ZXJ2YWwgPSAwOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBzdGFfZmxhZ3NfcG9saWN5W05MODAyMTFfU1RBX0ZMQUdfTUFYICsgMV0gPSB7CkBAIC0xOTIyLDYgKzIwNDQsNyBAQAogCVtOTDgwMjExX1NUQV9GTEFHX1NIT1JUX1BSRUFNQkxFXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAogCVtOTDgwMjExX1NUQV9GTEFHX1dNRV0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSwKIAlbTkw4MDIxMV9TVEFfRkxBR19NRlBdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sCisJW05MODAyMTFfU1RBX0ZMQUdfQVVUSEVOVElDQVRFRF0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSwKIH07CiAKIHN0YXRpYyBpbnQgcGFyc2Vfc3RhdGlvbl9mbGFncyhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLApAQCAtMjAwMiw3ICsyMTI1LDcgQEAKIAkJCQljb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvKQogewogCXZvaWQgKmhkcjsKLQlzdHJ1Y3QgbmxhdHRyICpzaW5mb2F0dHI7CisJc3RydWN0IG5sYXR0ciAqc2luZm9hdHRyLCAqYnNzX3BhcmFtOwogCiAJaGRyID0gbmw4MDIxMWhkcl9wdXQobXNnLCBwaWQsIHNlcSwgZmxhZ3MsIE5MODAyMTFfQ01EX05FV19TVEFUSU9OKTsKIAlpZiAoIWhkcikKQEAgLTIwMTYsNiArMjEzOSw5IEBACiAJc2luZm9hdHRyID0gbmxhX25lc3Rfc3RhcnQobXNnLCBOTDgwMjExX0FUVFJfU1RBX0lORk8pOwogCWlmICghc2luZm9hdHRyKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKwlpZiAoc2luZm8tPmZpbGxlZCAmIFNUQVRJT05fSU5GT19DT05ORUNURURfVElNRSkKKwkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX1NUQV9JTkZPX0NPTk5FQ1RFRF9USU1FLAorCQkJICAgIHNpbmZvLT5jb25uZWN0ZWRfdGltZSk7CiAJaWYgKHNpbmZvLT5maWxsZWQgJiBTVEFUSU9OX0lORk9fSU5BQ1RJVkVfVElNRSkKIAkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX1NUQV9JTkZPX0lOQUNUSVZFX1RJTUUsCiAJCQkgICAgc2luZm8tPmluYWN0aXZlX3RpbWUpOwpAQCAtMjA2Miw2ICsyMTg4LDI1IEBACiAJaWYgKHNpbmZvLT5maWxsZWQgJiBTVEFUSU9OX0lORk9fVFhfRkFJTEVEKQogCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfU1RBX0lORk9fVFhfRkFJTEVELAogCQkJICAgIHNpbmZvLT50eF9mYWlsZWQpOworCWlmIChzaW5mby0+ZmlsbGVkICYgU1RBVElPTl9JTkZPX0JTU19QQVJBTSkgeworCQlic3NfcGFyYW0gPSBubGFfbmVzdF9zdGFydChtc2csIE5MODAyMTFfU1RBX0lORk9fQlNTX1BBUkFNKTsKKwkJaWYgKCFic3NfcGFyYW0pCisJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKworCQlpZiAoc2luZm8tPmJzc19wYXJhbS5mbGFncyAmIEJTU19QQVJBTV9GTEFHU19DVFNfUFJPVCkKKwkJCU5MQV9QVVRfRkxBRyhtc2csIE5MODAyMTFfU1RBX0JTU19QQVJBTV9DVFNfUFJPVCk7CisJCWlmIChzaW5mby0+YnNzX3BhcmFtLmZsYWdzICYgQlNTX1BBUkFNX0ZMQUdTX1NIT1JUX1BSRUFNQkxFKQorCQkJTkxBX1BVVF9GTEFHKG1zZywgTkw4MDIxMV9TVEFfQlNTX1BBUkFNX1NIT1JUX1BSRUFNQkxFKTsKKwkJaWYgKHNpbmZvLT5ic3NfcGFyYW0uZmxhZ3MgJiBCU1NfUEFSQU1fRkxBR1NfU0hPUlRfU0xPVF9USU1FKQorCQkJTkxBX1BVVF9GTEFHKG1zZywKKwkJCQkgICAgIE5MODAyMTFfU1RBX0JTU19QQVJBTV9TSE9SVF9TTE9UX1RJTUUpOworCQlOTEFfUFVUX1U4KG1zZywgTkw4MDIxMV9TVEFfQlNTX1BBUkFNX0RUSU1fUEVSSU9ELAorCQkJICAgc2luZm8tPmJzc19wYXJhbS5kdGltX3BlcmlvZCk7CisJCU5MQV9QVVRfVTE2KG1zZywgTkw4MDIxMV9TVEFfQlNTX1BBUkFNX0JFQUNPTl9JTlRFUlZBTCwKKwkJCSAgICBzaW5mby0+YnNzX3BhcmFtLmJlYWNvbl9pbnRlcnZhbCk7CisKKwkJbmxhX25lc3RfZW5kKG1zZywgYnNzX3BhcmFtKTsKKwl9CiAJbmxhX25lc3RfZW5kKG1zZywgc2luZm9hdHRyKTsKIAogCXJldHVybiBnZW5sbXNnX2VuZChtc2csIGhkcik7CkBAIC0yMTkwLDYgKzIzMzUsNyBAQAogCW1lbXNldCgmcGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7CiAKIAlwYXJhbXMubGlzdGVuX2ludGVydmFsID0gLTE7CisJcGFyYW1zLnBsaW5rX3N0YXRlID0gLTE7CiAKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9BSURdKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIyMjEsNiArMjM2NywxMCBAQAogCQlwYXJhbXMucGxpbmtfYWN0aW9uID0KIAkJICAgIG5sYV9nZXRfdTgoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9QTElOS19BQ1RJT05dKTsKIAorCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1RBX1BMSU5LX1NUQVRFXSkKKwkJcGFyYW1zLnBsaW5rX3N0YXRlID0KKwkJICAgIG5sYV9nZXRfdTgoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9QTElOS19TVEFURV0pOworCiAJZXJyID0gZ2V0X3ZsYW4oaW5mbywgcmRldiwgJnBhcmFtcy52bGFuKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKQEAgLTIyNjAsOSArMjQxMCwxMCBAQAogCQkJZXJyID0gLUVJTlZBTDsKIAkJaWYgKHBhcmFtcy5saXN0ZW5faW50ZXJ2YWwgPj0gMCkKIAkJCWVyciA9IC1FSU5WQUw7Ci0JCWlmIChwYXJhbXMuc3VwcG9ydGVkX3JhdGVzKQotCQkJZXJyID0gLUVJTlZBTDsKLQkJaWYgKHBhcmFtcy5zdGFfZmxhZ3NfbWFzaykKKwkJaWYgKHBhcmFtcy5zdGFfZmxhZ3NfbWFzayAmCisJCQkJfihCSVQoTkw4MDIxMV9TVEFfRkxBR19BVVRIRU5USUNBVEVEKSB8CisJCQkJICBCSVQoTkw4MDIxMV9TVEFfRkxBR19NRlApIHwKKwkJCQkgIEJJVChOTDgwMjExX1NUQV9GTEFHX0FVVEhPUklaRUQpKSkKIAkJCWVyciA9IC1FSU5WQUw7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0yMzI0LDExICsyNDc1LDE2IEBACiAJCXBhcmFtcy5odF9jYXBhID0KIAkJCW5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9IVF9DQVBBQklMSVRZXSk7CiAKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9QTElOS19BQ1RJT05dKQorCQlwYXJhbXMucGxpbmtfYWN0aW9uID0KKwkJICAgIG5sYV9nZXRfdTgoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9QTElOS19BQ1RJT05dKTsKKwogCWlmIChwYXJzZV9zdGF0aW9uX2ZsYWdzKGluZm8sICZwYXJhbXMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCAmJgogCSAgICBkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOICYmCisJICAgIGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQgJiYKIAkgICAgZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfUDJQX0dPKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMjgwNCw4ICsyOTYwLDEwIEBACiAJbmw4MDIxMV9tZXNoX3NldHVwX3BhcmFtc19wb2xpY3lbTkw4MDIxMV9NRVNIX1NFVFVQX0FUVFJfTUFYKzFdID0gewogCVtOTDgwMjExX01FU0hfU0VUVVBfRU5BQkxFX1ZFTkRPUl9QQVRIX1NFTF0gPSB7IC50eXBlID0gTkxBX1U4IH0sCiAJW05MODAyMTFfTUVTSF9TRVRVUF9FTkFCTEVfVkVORE9SX01FVFJJQ10gPSB7IC50eXBlID0gTkxBX1U4IH0sCi0JW05MODAyMTFfTUVTSF9TRVRVUF9WRU5ET1JfUEFUSF9TRUxfSUVdID0geyAudHlwZSA9IE5MQV9CSU5BUlksCisJW05MODAyMTFfTUVTSF9TRVRVUF9VU0VSU1BBQ0VfQVVUSF0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSwKKwlbTkw4MDIxMV9NRVNIX1NFVFVQX0lFXSA9IHsgLnR5cGUgPSBOTEFfQklOQVJZLAogCQkubGVuID0gSUVFRTgwMjExX01BWF9EQVRBX0xFTiB9LAorCVtOTDgwMjExX01FU0hfU0VUVVBfVVNFUlNQQUNFX0FNUEVdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sCiB9OwogCiBzdGF0aWMgaW50IG5sODAyMTFfcGFyc2VfbWVzaF9jb25maWcoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKQEAgLTI5MDYsMTQgKzMwNjQsMTcgQEAKIAkJIElFRUU4MDIxMV9QQVRIX01FVFJJQ19WRU5ET1IgOgogCQkgSUVFRTgwMjExX1BBVEhfTUVUUklDX0FJUlRJTUU7CiAKLQlpZiAodGJbTkw4MDIxMV9NRVNIX1NFVFVQX1ZFTkRPUl9QQVRIX1NFTF9JRV0pIHsKKworCWlmICh0YltOTDgwMjExX01FU0hfU0VUVVBfSUVdKSB7CiAJCXN0cnVjdCBubGF0dHIgKmllYXR0ciA9Ci0JCQl0YltOTDgwMjExX01FU0hfU0VUVVBfVkVORE9SX1BBVEhfU0VMX0lFXTsKKwkJCXRiW05MODAyMTFfTUVTSF9TRVRVUF9JRV07CiAJCWlmICghaXNfdmFsaWRfaWVfYXR0cihpZWF0dHIpKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXNldHVwLT52ZW5kb3JfaWUgPSBubGFfZGF0YShpZWF0dHIpOwotCQlzZXR1cC0+dmVuZG9yX2llX2xlbiA9IG5sYV9sZW4oaWVhdHRyKTsKKwkJc2V0dXAtPmllID0gbmxhX2RhdGEoaWVhdHRyKTsKKwkJc2V0dXAtPmllX2xlbiA9IG5sYV9sZW4oaWVhdHRyKTsKIAl9CisJc2V0dXAtPmlzX2F1dGhlbnRpY2F0ZWQgPSBubGFfZ2V0X2ZsYWcodGJbTkw4MDIxMV9NRVNIX1NFVFVQX1VTRVJTUEFDRV9BVVRIXSk7CisJc2V0dXAtPmlzX3NlY3VyZSA9IG5sYV9nZXRfZmxhZyh0YltOTDgwMjExX01FU0hfU0VUVVBfVVNFUlNQQUNFX0FNUEVdKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzI4Miw2ICszNDQzLDE4OCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgbmw4MDIxMV9zdGFydF9zY2hlZF9zY2FuKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNmZzgwMjExX3NjaGVkX3NjYW5fcmVxdWVzdCAqcmVxdWVzdDsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLT51c2VyX3B0clswXTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby0+dXNlcl9wdHJbMV07CisJc3RydWN0IGNmZzgwMjExX3NzaWQgKnNzaWQ7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOworCXN0cnVjdCBubGF0dHIgKmF0dHI7CisJc3RydWN0IHdpcGh5ICp3aXBoeTsKKwlpbnQgZXJyLCB0bXAsIG5fc3NpZHMgPSAwLCBuX2NoYW5uZWxzLCBpOworCXUzMiBpbnRlcnZhbDsKKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CisJc2l6ZV90IGllX2xlbjsKKworCWlmICghKHJkZXYtPndpcGh5LmZsYWdzICYgV0lQSFlfRkxBR19TVVBQT1JUU19TQ0hFRF9TQ0FOKSB8fAorCSAgICAhcmRldi0+b3BzLT5zY2hlZF9zY2FuX3N0YXJ0KQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAoIWlzX3ZhbGlkX2llX2F0dHIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHJkZXYtPnNjaGVkX3NjYW5fcmVxKQorCQlyZXR1cm4gLUVJTlBST0dSRVNTOworCisJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NIRURfU0NBTl9JTlRFUlZBTF0pCisJCXJldHVybiAtRUlOVkFMOworCisJaW50ZXJ2YWwgPSBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NIRURfU0NBTl9JTlRFUlZBTF0pOworCWlmIChpbnRlcnZhbCA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdpcGh5ID0gJnJkZXYtPndpcGh5OworCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX0ZSRVFVRU5DSUVTXSkgeworCQluX2NoYW5uZWxzID0gdmFsaWRhdGVfc2Nhbl9mcmVxcygKKwkJCQlpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9GUkVRVUVOQ0lFU10pOworCQlpZiAoIW5fY2hhbm5lbHMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQluX2NoYW5uZWxzID0gMDsKKworCQlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKQorCQkJaWYgKHdpcGh5LT5iYW5kc1tiYW5kXSkKKwkJCQluX2NoYW5uZWxzICs9IHdpcGh5LT5iYW5kc1tiYW5kXS0+bl9jaGFubmVsczsKKwl9CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fU1NJRFNdKQorCQlubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX1NTSURTXSwKKwkJCQkgICAgdG1wKQorCQkJbl9zc2lkcysrOworCisJaWYgKG5fc3NpZHMgPiB3aXBoeS0+bWF4X3NjYW5fc3NpZHMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pCisJCWllX2xlbiA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7CisJZWxzZQorCQlpZV9sZW4gPSAwOworCisJaWYgKGllX2xlbiA+IHdpcGh5LT5tYXhfc2Nhbl9pZV9sZW4pCisJCXJldHVybiAtRUlOVkFMOworCisJcmVxdWVzdCA9IGt6YWxsb2Moc2l6ZW9mKCpyZXF1ZXN0KQorCQkJKyBzaXplb2YoKnNzaWQpICogbl9zc2lkcworCQkJKyBzaXplb2YoY2hhbm5lbCkgKiBuX2NoYW5uZWxzCisJCQkrIGllX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXF1ZXN0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChuX3NzaWRzKQorCQlyZXF1ZXN0LT5zc2lkcyA9ICh2b2lkICopJnJlcXVlc3QtPmNoYW5uZWxzW25fY2hhbm5lbHNdOworCXJlcXVlc3QtPm5fc3NpZHMgPSBuX3NzaWRzOworCWlmIChpZV9sZW4pIHsKKwkJaWYgKHJlcXVlc3QtPnNzaWRzKQorCQkJcmVxdWVzdC0+aWUgPSAodm9pZCAqKShyZXF1ZXN0LT5zc2lkcyArIG5fc3NpZHMpOworCQllbHNlCisJCQlyZXF1ZXN0LT5pZSA9ICh2b2lkICopKHJlcXVlc3QtPmNoYW5uZWxzICsgbl9jaGFubmVscyk7CisJfQorCisJaSA9IDA7CisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX0ZSRVFVRU5DSUVTXSkgeworCQkvKiB1c2VyIHNwZWNpZmllZCwgYmFpbCBvdXQgaWYgY2hhbm5lbCBub3QgZm91bmQgKi8KKwkJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLAorCQkJCSAgICBpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9GUkVRVUVOQ0lFU10sCisJCQkJICAgIHRtcCkgeworCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOworCisJCQljaGFuID0gaWVlZTgwMjExX2dldF9jaGFubmVsKHdpcGh5LCBubGFfZ2V0X3UzMihhdHRyKSk7CisKKwkJCWlmICghY2hhbikgeworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJZ290byBvdXRfZnJlZTsKKwkJCX0KKworCQkJLyogaWdub3JlIGRpc2FibGVkIGNoYW5uZWxzICovCisJCQlpZiAoY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkKKwkJCQljb250aW51ZTsKKworCQkJcmVxdWVzdC0+Y2hhbm5lbHNbaV0gPSBjaGFuOworCQkJaSsrOworCQl9CisJfSBlbHNlIHsKKwkJLyogYWxsIGNoYW5uZWxzICovCisJCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspIHsKKwkJCWludCBqOworCQkJaWYgKCF3aXBoeS0+YmFuZHNbYmFuZF0pCisJCQkJY29udGludWU7CisJCQlmb3IgKGogPSAwOyBqIDwgd2lwaHktPmJhbmRzW2JhbmRdLT5uX2NoYW5uZWxzOyBqKyspIHsKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CisKKwkJCQljaGFuID0gJndpcGh5LT5iYW5kc1tiYW5kXS0+Y2hhbm5lbHNbal07CisKKwkJCQlpZiAoY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkKKwkJCQkJY29udGludWU7CisKKwkJCQlyZXF1ZXN0LT5jaGFubmVsc1tpXSA9IGNoYW47CisJCQkJaSsrOworCQkJfQorCQl9CisJfQorCisJaWYgKCFpKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJcmVxdWVzdC0+bl9jaGFubmVscyA9IGk7CisKKwlpID0gMDsKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fU1NJRFNdKSB7CisJCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fU1NJRFNdLAorCQkJCSAgICB0bXApIHsKKwkJCWlmIChyZXF1ZXN0LT5zc2lkc1tpXS5zc2lkX2xlbiA+CisJCQkgICAgSUVFRTgwMjExX01BWF9TU0lEX0xFTikgeworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJZ290byBvdXRfZnJlZTsKKwkJCX0KKwkJCW1lbWNweShyZXF1ZXN0LT5zc2lkc1tpXS5zc2lkLCBubGFfZGF0YShhdHRyKSwKKwkJCSAgICAgICBubGFfbGVuKGF0dHIpKTsKKwkJCXJlcXVlc3QtPnNzaWRzW2ldLnNzaWRfbGVuID0gbmxhX2xlbihhdHRyKTsKKwkJCWkrKzsKKwkJfQorCX0KKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKSB7CisJCXJlcXVlc3QtPmllX2xlbiA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7CisJCW1lbWNweSgodm9pZCAqKXJlcXVlc3QtPmllLAorCQkgICAgICAgbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSksCisJCSAgICAgICByZXF1ZXN0LT5pZV9sZW4pOworCX0KKworCXJlcXVlc3QtPmRldiA9IGRldjsKKwlyZXF1ZXN0LT53aXBoeSA9ICZyZGV2LT53aXBoeTsKKwlyZXF1ZXN0LT5pbnRlcnZhbCA9IGludGVydmFsOworCisJZXJyID0gcmRldi0+b3BzLT5zY2hlZF9zY2FuX3N0YXJ0KCZyZGV2LT53aXBoeSwgZGV2LCByZXF1ZXN0KTsKKwlpZiAoIWVycikgeworCQlyZGV2LT5zY2hlZF9zY2FuX3JlcSA9IHJlcXVlc3Q7CisJCW5sODAyMTFfc2VuZF9zY2hlZF9zY2FuKHJkZXYsIGRldiwKKwkJCQkJTkw4MDIxMV9DTURfU1RBUlRfU0NIRURfU0NBTik7CisJCWdvdG8gb3V0OworCX0KKworb3V0X2ZyZWU6CisJa2ZyZWUocmVxdWVzdCk7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBubDgwMjExX3N0b3Bfc2NoZWRfc2NhbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby0+dXNlcl9wdHJbMF07CisKKwlpZiAoIShyZGV2LT53aXBoeS5mbGFncyAmIFdJUEhZX0ZMQUdfU1VQUE9SVFNfU0NIRURfU0NBTikgfHwKKwkgICAgIXJkZXYtPm9wcy0+c2NoZWRfc2Nhbl9zdG9wKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlyZXR1cm4gX19jZmc4MDIxMV9zdG9wX3NjaGVkX3NjYW4ocmRldiwgZmFsc2UpOworfQorCiBzdGF0aWMgaW50IG5sODAyMTFfc2VuZF9ic3Moc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIHBpZCwgdTMyIHNlcSwgaW50IGZsYWdzLAogCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCSAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LApAQCAtNDc4MCw2ICs1MTIzLDE5NCBAQAogCXJldHVybiBjZmc4MDIxMV9sZWF2ZV9tZXNoKHJkZXYsIGRldik7CiB9CiAKK3N0YXRpYyBpbnQgbmw4MDIxMV9nZXRfd293bGFuKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby0+dXNlcl9wdHJbMF07CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKwl2b2lkICpoZHI7CisKKwlpZiAoIXJkZXYtPndpcGh5Lndvd2xhbi5mbGFncyAmJiAhcmRldi0+d2lwaHkud293bGFuLm5fcGF0dGVybnMpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCW1zZyA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghbXNnKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgaW5mby0+c25kX3BpZCwgaW5mby0+c25kX3NlcSwgMCwKKwkJCSAgICAgTkw4MDIxMV9DTURfR0VUX1dPV0xBTik7CisJaWYgKCFoZHIpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCisJaWYgKHJkZXYtPndvd2xhbikgeworCQlzdHJ1Y3QgbmxhdHRyICpubF93b3dsYW47CisKKwkJbmxfd293bGFuID0gbmxhX25lc3Rfc3RhcnQobXNnLCBOTDgwMjExX0FUVFJfV09XTEFOX1RSSUdHRVJTKTsKKwkJaWYgKCFubF93b3dsYW4pCisJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKworCQlpZiAocmRldi0+d293bGFuLT5hbnkpCisJCQlOTEFfUFVUX0ZMQUcobXNnLCBOTDgwMjExX1dPV0xBTl9UUklHX0FOWSk7CisJCWlmIChyZGV2LT53b3dsYW4tPmRpc2Nvbm5lY3QpCisJCQlOTEFfUFVUX0ZMQUcobXNnLCBOTDgwMjExX1dPV0xBTl9UUklHX0RJU0NPTk5FQ1QpOworCQlpZiAocmRldi0+d293bGFuLT5tYWdpY19wa3QpCisJCQlOTEFfUFVUX0ZMQUcobXNnLCBOTDgwMjExX1dPV0xBTl9UUklHX01BR0lDX1BLVCk7CisJCWlmIChyZGV2LT53b3dsYW4tPm5fcGF0dGVybnMpIHsKKwkJCXN0cnVjdCBubGF0dHIgKm5sX3BhdHMsICpubF9wYXQ7CisJCQlpbnQgaSwgcGF0X2xlbjsKKworCQkJbmxfcGF0cyA9IG5sYV9uZXN0X3N0YXJ0KG1zZywKKwkJCQkJTkw4MDIxMV9XT1dMQU5fVFJJR19QS1RfUEFUVEVSTik7CisJCQlpZiAoIW5sX3BhdHMpCisJCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwkJCWZvciAoaSA9IDA7IGkgPCByZGV2LT53b3dsYW4tPm5fcGF0dGVybnM7IGkrKykgeworCQkJCW5sX3BhdCA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgaSArIDEpOworCQkJCWlmICghbmxfcGF0KQorCQkJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKwkJCQlwYXRfbGVuID0gcmRldi0+d293bGFuLT5wYXR0ZXJuc1tpXS5wYXR0ZXJuX2xlbjsKKwkJCQlOTEFfUFVUKG1zZywgTkw4MDIxMV9XT1dMQU5fUEtUUEFUX01BU0ssCisJCQkJCURJVl9ST1VORF9VUChwYXRfbGVuLCA4KSwKKwkJCQkJcmRldi0+d293bGFuLT5wYXR0ZXJuc1tpXS5tYXNrKTsKKwkJCQlOTEFfUFVUKG1zZywgTkw4MDIxMV9XT1dMQU5fUEtUUEFUX1BBVFRFUk4sCisJCQkJCXBhdF9sZW4sCisJCQkJCXJkZXYtPndvd2xhbi0+cGF0dGVybnNbaV0ucGF0dGVybik7CisJCQkJbmxhX25lc3RfZW5kKG1zZywgbmxfcGF0KTsKKwkJCX0KKwkJCW5sYV9uZXN0X2VuZChtc2csIG5sX3BhdHMpOworCQl9CisKKwkJbmxhX25lc3RfZW5kKG1zZywgbmxfd293bGFuKTsKKwl9CisKKwlnZW5sbXNnX2VuZChtc2csIGhkcik7CisJcmV0dXJuIGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTsKKworbmxhX3B1dF9mYWlsdXJlOgorCW5sbXNnX2ZyZWUobXNnKTsKKwlyZXR1cm4gLUVOT0JVRlM7Cit9CisKK3N0YXRpYyBpbnQgbmw4MDIxMV9zZXRfd293bGFuKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gaW5mby0+dXNlcl9wdHJbMF07CisJc3RydWN0IG5sYXR0ciAqdGJbTlVNX05MODAyMTFfV09XTEFOX1RSSUddOworCXN0cnVjdCBjZmc4MDIxMV93b3dsYW4gbm9fdHJpZ2dlcnMgPSB7fTsKKwlzdHJ1Y3QgY2ZnODAyMTFfd293bGFuIG5ld190cmlnZ2VycyA9IHt9OworCXN0cnVjdCB3aXBoeV93b3dsYW5fc3VwcG9ydCAqd293bGFuID0gJnJkZXYtPndpcGh5Lndvd2xhbjsKKwlpbnQgZXJyLCBpOworCisJaWYgKCFyZGV2LT53aXBoeS53b3dsYW4uZmxhZ3MgJiYgIXJkZXYtPndpcGh5Lndvd2xhbi5uX3BhdHRlcm5zKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAoIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XT1dMQU5fVFJJR0dFUlNdKQorCQlnb3RvIG5vX3RyaWdnZXJzOworCisJZXJyID0gbmxhX3BhcnNlKHRiLCBNQVhfTkw4MDIxMV9XT1dMQU5fVFJJRywKKwkJCW5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XT1dMQU5fVFJJR0dFUlNdKSwKKwkJCW5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dPV0xBTl9UUklHR0VSU10pLAorCQkJbmw4MDIxMV93b3dsYW5fcG9saWN5KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKHRiW05MODAyMTFfV09XTEFOX1RSSUdfQU5ZXSkgeworCQlpZiAoISh3b3dsYW4tPmZsYWdzICYgV0lQSFlfV09XTEFOX0FOWSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbmV3X3RyaWdnZXJzLmFueSA9IHRydWU7CisJfQorCisJaWYgKHRiW05MODAyMTFfV09XTEFOX1RSSUdfRElTQ09OTkVDVF0pIHsKKwkJaWYgKCEod293bGFuLT5mbGFncyAmIFdJUEhZX1dPV0xBTl9ESVNDT05ORUNUKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQluZXdfdHJpZ2dlcnMuZGlzY29ubmVjdCA9IHRydWU7CisJfQorCisJaWYgKHRiW05MODAyMTFfV09XTEFOX1RSSUdfTUFHSUNfUEtUXSkgeworCQlpZiAoISh3b3dsYW4tPmZsYWdzICYgV0lQSFlfV09XTEFOX01BR0lDX1BLVCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbmV3X3RyaWdnZXJzLm1hZ2ljX3BrdCA9IHRydWU7CisJfQorCisJaWYgKHRiW05MODAyMTFfV09XTEFOX1RSSUdfUEtUX1BBVFRFUk5dKSB7CisJCXN0cnVjdCBubGF0dHIgKnBhdDsKKwkJaW50IG5fcGF0dGVybnMgPSAwOworCQlpbnQgcmVtLCBwYXRfbGVuLCBtYXNrX2xlbjsKKwkJc3RydWN0IG5sYXR0ciAqcGF0X3RiW05VTV9OTDgwMjExX1dPV0xBTl9QS1RQQVRdOworCisJCW5sYV9mb3JfZWFjaF9uZXN0ZWQocGF0LCB0YltOTDgwMjExX1dPV0xBTl9UUklHX1BLVF9QQVRURVJOXSwKKwkJCQkgICAgcmVtKQorCQkJbl9wYXR0ZXJucysrOworCQlpZiAobl9wYXR0ZXJucyA+IHdvd2xhbi0+bl9wYXR0ZXJucykKKwkJCXJldHVybiAtRUlOVkFMOworCisJCW5ld190cmlnZ2Vycy5wYXR0ZXJucyA9IGtjYWxsb2Mobl9wYXR0ZXJucywKKwkJCQkJCXNpemVvZihuZXdfdHJpZ2dlcnMucGF0dGVybnNbMF0pLAorCQkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmICghbmV3X3RyaWdnZXJzLnBhdHRlcm5zKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJbmV3X3RyaWdnZXJzLm5fcGF0dGVybnMgPSBuX3BhdHRlcm5zOworCQlpID0gMDsKKworCQlubGFfZm9yX2VhY2hfbmVzdGVkKHBhdCwgdGJbTkw4MDIxMV9XT1dMQU5fVFJJR19QS1RfUEFUVEVSTl0sCisJCQkJICAgIHJlbSkgeworCQkJbmxhX3BhcnNlKHBhdF90YiwgTUFYX05MODAyMTFfV09XTEFOX1BLVFBBVCwKKwkJCQkgIG5sYV9kYXRhKHBhdCksIG5sYV9sZW4ocGF0KSwgTlVMTCk7CisJCQllcnIgPSAtRUlOVkFMOworCQkJaWYgKCFwYXRfdGJbTkw4MDIxMV9XT1dMQU5fUEtUUEFUX01BU0tdIHx8CisJCQkgICAgIXBhdF90YltOTDgwMjExX1dPV0xBTl9QS1RQQVRfUEFUVEVSTl0pCisJCQkJZ290byBlcnJvcjsKKwkJCXBhdF9sZW4gPSBubGFfbGVuKHBhdF90YltOTDgwMjExX1dPV0xBTl9QS1RQQVRfUEFUVEVSTl0pOworCQkJbWFza19sZW4gPSBESVZfUk9VTkRfVVAocGF0X2xlbiwgOCk7CisJCQlpZiAobmxhX2xlbihwYXRfdGJbTkw4MDIxMV9XT1dMQU5fUEtUUEFUX01BU0tdKSAhPQorCQkJICAgIG1hc2tfbGVuKQorCQkJCWdvdG8gZXJyb3I7CisJCQlpZiAocGF0X2xlbiA+IHdvd2xhbi0+cGF0dGVybl9tYXhfbGVuIHx8CisJCQkgICAgcGF0X2xlbiA8IHdvd2xhbi0+cGF0dGVybl9taW5fbGVuKQorCQkJCWdvdG8gZXJyb3I7CisKKwkJCW5ld190cmlnZ2Vycy5wYXR0ZXJuc1tpXS5tYXNrID0KKwkJCQlrbWFsbG9jKG1hc2tfbGVuICsgcGF0X2xlbiwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIW5ld190cmlnZ2Vycy5wYXR0ZXJuc1tpXS5tYXNrKSB7CisJCQkJZXJyID0gLUVOT01FTTsKKwkJCQlnb3RvIGVycm9yOworCQkJfQorCQkJbmV3X3RyaWdnZXJzLnBhdHRlcm5zW2ldLnBhdHRlcm4gPQorCQkJCW5ld190cmlnZ2Vycy5wYXR0ZXJuc1tpXS5tYXNrICsgbWFza19sZW47CisJCQltZW1jcHkobmV3X3RyaWdnZXJzLnBhdHRlcm5zW2ldLm1hc2ssCisJCQkgICAgICAgbmxhX2RhdGEocGF0X3RiW05MODAyMTFfV09XTEFOX1BLVFBBVF9NQVNLXSksCisJCQkgICAgICAgbWFza19sZW4pOworCQkJbmV3X3RyaWdnZXJzLnBhdHRlcm5zW2ldLnBhdHRlcm5fbGVuID0gcGF0X2xlbjsKKwkJCW1lbWNweShuZXdfdHJpZ2dlcnMucGF0dGVybnNbaV0ucGF0dGVybiwKKwkJCSAgICAgICBubGFfZGF0YShwYXRfdGJbTkw4MDIxMV9XT1dMQU5fUEtUUEFUX1BBVFRFUk5dKSwKKwkJCSAgICAgICBwYXRfbGVuKTsKKwkJCWkrKzsKKwkJfQorCX0KKworCWlmIChtZW1jbXAoJm5ld190cmlnZ2VycywgJm5vX3RyaWdnZXJzLCBzaXplb2YobmV3X3RyaWdnZXJzKSkpIHsKKwkJc3RydWN0IGNmZzgwMjExX3dvd2xhbiAqbnRyaWc7CisJCW50cmlnID0ga21lbWR1cCgmbmV3X3RyaWdnZXJzLCBzaXplb2YobmV3X3RyaWdnZXJzKSwKKwkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKCFudHJpZykgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJY2ZnODAyMTFfcmRldl9mcmVlX3dvd2xhbihyZGV2KTsKKwkJcmRldi0+d293bGFuID0gbnRyaWc7CisJfSBlbHNlIHsKKyBub190cmlnZ2VyczoKKwkJY2ZnODAyMTFfcmRldl9mcmVlX3dvd2xhbihyZGV2KTsKKwkJcmRldi0+d293bGFuID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gMDsKKyBlcnJvcjoKKwlmb3IgKGkgPSAwOyBpIDwgbmV3X3RyaWdnZXJzLm5fcGF0dGVybnM7IGkrKykKKwkJa2ZyZWUobmV3X3RyaWdnZXJzLnBhdHRlcm5zW2ldLm1hc2spOworCWtmcmVlKG5ld190cmlnZ2Vycy5wYXR0ZXJucyk7CisJcmV0dXJuIGVycjsKK30KKwogI2RlZmluZSBOTDgwMjExX0ZMQUdfTkVFRF9XSVBIWQkJMHgwMQogI2RlZmluZSBOTDgwMjExX0ZMQUdfTkVFRF9ORVRERVYJMHgwMgogI2RlZmluZSBOTDgwMjExX0ZMQUdfTkVFRF9SVE5MCQkweDA0CkBAIC01MDY0LDYgKzU1OTUsMjIgQEAKIAkJLmR1bXBpdCA9IG5sODAyMTFfZHVtcF9zY2FuLAogCX0sCiAJeworCQkuY21kID0gTkw4MDIxMV9DTURfU1RBUlRfU0NIRURfU0NBTiwKKwkJLmRvaXQgPSBubDgwMjExX3N0YXJ0X3NjaGVkX3NjYW4sCisJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKKwkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAorCQkuaW50ZXJuYWxfZmxhZ3MgPSBOTDgwMjExX0ZMQUdfTkVFRF9ORVRERVZfVVAgfAorCQkJCSAgTkw4MDIxMV9GTEFHX05FRURfUlROTCwKKwl9LAorCXsKKwkJLmNtZCA9IE5MODAyMTFfQ01EX1NUT1BfU0NIRURfU0NBTiwKKwkJLmRvaXQgPSBubDgwMjExX3N0b3Bfc2NoZWRfc2NhbiwKKwkJLnBvbGljeSA9IG5sODAyMTFfcG9saWN5LAorCQkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCisJCS5pbnRlcm5hbF9mbGFncyA9IE5MODAyMTFfRkxBR19ORUVEX05FVERFVl9VUCB8CisJCQkJICBOTDgwMjExX0ZMQUdfTkVFRF9SVE5MLAorCX0sCisJewogCQkuY21kID0gTkw4MDIxMV9DTURfQVVUSEVOVElDQVRFLAogCQkuZG9pdCA9IG5sODAyMTFfYXV0aGVudGljYXRlLAogCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCkBAIC01Mjc4LDYgKzU4MjUsMjIgQEAKIAkJLmludGVybmFsX2ZsYWdzID0gTkw4MDIxMV9GTEFHX05FRURfTkVUREVWX1VQIHwKIAkJCQkgIE5MODAyMTFfRkxBR19ORUVEX1JUTkwsCiAJfSwKKwl7CisJCS5jbWQgPSBOTDgwMjExX0NNRF9HRVRfV09XTEFOLAorCQkuZG9pdCA9IG5sODAyMTFfZ2V0X3dvd2xhbiwKKwkJLnBvbGljeSA9IG5sODAyMTFfcG9saWN5LAorCQkvKiBjYW4gYmUgcmV0cmlldmVkIGJ5IHVucHJpdmlsZWdlZCB1c2VycyAqLworCQkuaW50ZXJuYWxfZmxhZ3MgPSBOTDgwMjExX0ZMQUdfTkVFRF9XSVBIWSB8CisJCQkJICBOTDgwMjExX0ZMQUdfTkVFRF9SVE5MLAorCX0sCisJeworCQkuY21kID0gTkw4MDIxMV9DTURfU0VUX1dPV0xBTiwKKwkJLmRvaXQgPSBubDgwMjExX3NldF93b3dsYW4sCisJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKKwkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAorCQkuaW50ZXJuYWxfZmxhZ3MgPSBOTDgwMjExX0ZMQUdfTkVFRF9XSVBIWSB8CisJCQkJICBOTDgwMjExX0ZMQUdfTkVFRF9SVE5MLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIG5sODAyMTFfbWxtZV9tY2dycCA9IHsKQEAgLTUzNzMsNiArNTkzNiwyOCBAQAogCXJldHVybiAtRU1TR1NJWkU7CiB9CiAKK3N0YXRpYyBpbnQKK25sODAyMTFfc2VuZF9zY2hlZF9zY2FuX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLAorCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgIHUzMiBwaWQsIHUzMiBzZXEsIGludCBmbGFncywgdTMyIGNtZCkKK3sKKwl2b2lkICpoZHI7CisKKwloZHIgPSBubDgwMjExaGRyX3B1dChtc2csIHBpZCwgc2VxLCBmbGFncywgY21kKTsKKwlpZiAoIWhkcikKKwkJcmV0dXJuIC0xOworCisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFksIHJkZXYtPndpcGh5X2lkeCk7CisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfSUZJTkRFWCwgbmV0ZGV2LT5pZmluZGV4KTsKKworCXJldHVybiBnZW5sbXNnX2VuZChtc2csIGhkcik7CisKKyBubGFfcHV0X2ZhaWx1cmU6CisJZ2VubG1zZ19jYW5jZWwobXNnLCBoZHIpOworCXJldHVybiAtRU1TR1NJWkU7Cit9CisKIHZvaWQgbmw4MDIxMV9zZW5kX3NjYW5fc3RhcnQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewpAQCAtNTQzMCw2ICs2MDE1LDQzIEBACiAJCQkJbmw4MDIxMV9zY2FuX21jZ3JwLmlkLCBHRlBfS0VSTkVMKTsKIH0KIAordm9pZCBubDgwMjExX3NlbmRfc2NoZWRfc2Nhbl9yZXN1bHRzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKworCW1zZyA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghbXNnKQorCQlyZXR1cm47CisKKwlpZiAobmw4MDIxMV9zZW5kX3NjaGVkX3NjYW5fbXNnKG1zZywgcmRldiwgbmV0ZGV2LCAwLCAwLCAwLAorCQkJCQlOTDgwMjExX0NNRF9TQ0hFRF9TQ0FOX1JFU1VMVFMpIDwgMCkgeworCQlubG1zZ19mcmVlKG1zZyk7CisJCXJldHVybjsKKwl9CisKKwlnZW5sbXNnX211bHRpY2FzdF9uZXRucyh3aXBoeV9uZXQoJnJkZXYtPndpcGh5KSwgbXNnLCAwLAorCQkJCW5sODAyMTFfc2Nhbl9tY2dycC5pZCwgR0ZQX0tFUk5FTCk7Cit9CisKK3ZvaWQgbmw4MDIxMV9zZW5kX3NjaGVkX3NjYW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgY21kKQoreworCXN0cnVjdCBza19idWZmICptc2c7CisKKwltc2cgPSBubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIEdGUF9LRVJORUwpOworCWlmICghbXNnKQorCQlyZXR1cm47CisKKwlpZiAobmw4MDIxMV9zZW5kX3NjaGVkX3NjYW5fbXNnKG1zZywgcmRldiwgbmV0ZGV2LCAwLCAwLCAwLCBjbWQpIDwgMCkgeworCQlubG1zZ19mcmVlKG1zZyk7CisJCXJldHVybjsKKwl9CisKKwlnZW5sbXNnX211bHRpY2FzdF9uZXRucyh3aXBoeV9uZXQoJnJkZXYtPndpcGh5KSwgbXNnLCAwLAorCQkJCW5sODAyMTFfc2Nhbl9tY2dycC5pZCwgR0ZQX0tFUk5FTCk7Cit9CisKIC8qCiAgKiBUaGlzIGNhbiBoYXBwZW4gb24gZ2xvYmFsIHJlZ3VsYXRvcnkgY2hhbmdlcyBvciBkZXZpY2Ugc3BlY2lmaWMgc2V0dGluZ3MKICAqIGJhc2VkIG9uIGN1c3RvbSB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbnMuCkBAIC01Nzg1LDYgKzY0MDcsNDQgQEAKIAlubG1zZ19mcmVlKG1zZyk7CiB9CiAKK3ZvaWQgbmw4MDIxMV9zZW5kX25ld19wZWVyX2NhbmRpZGF0ZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCWNvbnN0IHU4ICptYWNhZGRyLCBjb25zdCB1OCogaWUsIHU4IGllX2xlbiwKKwkJZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCBza19idWZmICptc2c7CisJdm9pZCAqaGRyOworCisJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgZ2ZwKTsKKwlpZiAoIW1zZykKKwkJcmV0dXJuOworCisJaGRyID0gbmw4MDIxMWhkcl9wdXQobXNnLCAwLCAwLCAwLCBOTDgwMjExX0NNRF9ORVdfUEVFUl9DQU5ESURBVEUpOworCWlmICghaGRyKSB7CisJCW5sbXNnX2ZyZWUobXNnKTsKKwkJcmV0dXJuOworCX0KKworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZLCByZGV2LT53aXBoeV9pZHgpOworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX0lGSU5ERVgsIG5ldGRldi0+aWZpbmRleCk7CisJTkxBX1BVVChtc2csIE5MODAyMTFfQVRUUl9NQUMsIEVUSF9BTEVOLCBtYWNhZGRyKTsKKwlpZiAoaWVfbGVuICYmIGllKQorCQlOTEFfUFVUKG1zZywgTkw4MDIxMV9BVFRSX0lFLCBpZV9sZW4gLCBpZSk7CisKKwlpZiAoZ2VubG1zZ19lbmQobXNnLCBoZHIpIDwgMCkgeworCQlubG1zZ19mcmVlKG1zZyk7CisJCXJldHVybjsKKwl9CisKKwlnZW5sbXNnX211bHRpY2FzdF9uZXRucyh3aXBoeV9uZXQoJnJkZXYtPndpcGh5KSwgbXNnLCAwLAorCQkJCW5sODAyMTFfbWxtZV9tY2dycC5pZCwgZ2ZwKTsKKwlyZXR1cm47CisKKyBubGFfcHV0X2ZhaWx1cmU6CisJZ2VubG1zZ19jYW5jZWwobXNnLCBoZHIpOworCW5sbXNnX2ZyZWUobXNnKTsKK30KKwogdm9pZCBubDgwMjExX21pY2hhZWxfbWljX2ZhaWx1cmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBjb25zdCB1OCAqYWRkciwKIAkJCQkgZW51bSBubDgwMjExX2tleV90eXBlIGtleV90eXBlLCBpbnQga2V5X2lkLApAQCAtNTk2Niw2ICs2NjI2LDQwIEBACiAJCQkJbmw4MDIxMV9tbG1lX21jZ3JwLmlkLCBnZnApOwogfQogCit2b2lkIG5sODAyMTFfc2VuZF9zdGFfZGVsX2V2ZW50KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqbWFjX2FkZHIsCisJCQkJZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCBza19idWZmICptc2c7CisJdm9pZCAqaGRyOworCisJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBnZnApOworCWlmICghbXNnKQorCQlyZXR1cm47CisKKwloZHIgPSBubDgwMjExaGRyX3B1dChtc2csIDAsIDAsIDAsIE5MODAyMTFfQ01EX0RFTF9TVEFUSU9OKTsKKwlpZiAoIWhkcikgeworCQlubG1zZ19mcmVlKG1zZyk7CisJCXJldHVybjsKKwl9CisKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9JRklOREVYLCBkZXYtPmlmaW5kZXgpOworCU5MQV9QVVQobXNnLCBOTDgwMjExX0FUVFJfTUFDLCBFVEhfQUxFTiwgbWFjX2FkZHIpOworCisJaWYgKGdlbmxtc2dfZW5kKG1zZywgaGRyKSA8IDApIHsKKwkJbmxtc2dfZnJlZShtc2cpOworCQlyZXR1cm47CisJfQorCisJZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnMod2lwaHlfbmV0KCZyZGV2LT53aXBoeSksIG1zZywgMCwKKwkJCQlubDgwMjExX21sbWVfbWNncnAuaWQsIGdmcCk7CisJcmV0dXJuOworCisgbmxhX3B1dF9mYWlsdXJlOgorCWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKKwlubG1zZ19mcmVlKG1zZyk7Cit9CisKIGludCBubDgwMjExX3NlbmRfbWdtdChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBubHBpZCwKIAkJICAgICAgaW50IGZyZXEsIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sIGdmcF90IGdmcCkKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmggYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oCmluZGV4IGUzZjdmYTguLjJmMWJmYjggMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmgKKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuaApAQCAtMTIsNiArMTIsMTAgQEAKIAkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIHZvaWQgbmw4MDIxMV9zZW5kX3NjYW5fYWJvcnRlZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7Cit2b2lkIG5sODAyMTFfc2VuZF9zY2hlZF9zY2FuKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGNtZCk7Cit2b2lkIG5sODAyMTFfc2VuZF9zY2hlZF9zY2FuX3Jlc3VsdHMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiB2b2lkIG5sODAyMTFfc2VuZF9yZWdfY2hhbmdlX2V2ZW50KHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpOwogdm9pZCBubDgwMjExX3NlbmRfcnhfYXV0aChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCkBAIC01MCw2ICs1NCwxMCBAQAogCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiByZWFzb24sCiAJCQkgICAgICAgY29uc3QgdTggKmllLCBzaXplX3QgaWVfbGVuLCBib29sIGZyb21fYXApOwogCit2b2lkIG5sODAyMTFfc2VuZF9uZXdfcGVlcl9jYW5kaWRhdGUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgIGNvbnN0IHU4ICptYWNhZGRyLCBjb25zdCB1OCogaWUsIHU4IGllX2xlbiwKKwkJCQkgICAgIGdmcF90IGdmcCk7CiB2b2lkCiBubDgwMjExX21pY2hhZWxfbWljX2ZhaWx1cmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHU4ICphZGRyLApAQCAtNzksNiArODcsOSBAQAogdm9pZCBubDgwMjExX3NlbmRfc3RhX2V2ZW50KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqbWFjX2FkZHIsCiAJCQkgICAgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8sIGdmcF90IGdmcCk7Cit2b2lkIG5sODAyMTFfc2VuZF9zdGFfZGVsX2V2ZW50KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqbWFjX2FkZHIsCisJCQkJZ2ZwX3QgZ2ZwKTsKIAogaW50IG5sODAyMTFfc2VuZF9tZ210KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIG5scGlkLCBpbnQgZnJlcSwKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZWcuYyBiL25ldC93aXJlbGVzcy9yZWcuYwppbmRleCBhYjgwMWExLi4xYWQwZjM5IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmMKKysrIGIvbmV0L3dpcmVsZXNzL3JlZy5jCkBAIC0xMDYsNiArMTA2LDkgQEAKIHN0YXRpYyB2b2lkIHJlZ190b2RvKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBzdGF0aWMgREVDTEFSRV9XT1JLKHJlZ193b3JrLCByZWdfdG9kbyk7CiAKK3N0YXRpYyB2b2lkIHJlZ190aW1lb3V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3N0YXRpYyBERUNMQVJFX0RFTEFZRURfV09SSyhyZWdfdGltZW91dCwgcmVnX3RpbWVvdXRfd29yayk7CisKIC8qIFdlIGtlZXAgYSBzdGF0aWMgd29ybGQgcmVndWxhdG9yeSBkb21haW4gaW4gY2FzZSBvZiB0aGUgYWJzZW5jZSBvZiBDUkRBICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gd29ybGRfcmVnZG9tID0gewogCS5uX3JlZ19ydWxlcyA9IDUsCkBAIC02NjksMTEgKzY3Miw5IEBACiAJZm9yIChpID0gMDsgaSA8IHJlZ2QtPm5fcmVnX3J1bGVzOyBpKyspIHsKIAkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqcnI7CiAJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZnJlcV9yYW5nZSAqZnIgPSBOVUxMOwotCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3Bvd2VyX3J1bGUgKnByID0gTlVMTDsKIAogCQlyciA9ICZyZWdkLT5yZWdfcnVsZXNbaV07CiAJCWZyID0gJnJyLT5mcmVxX3JhbmdlOwotCQlwciA9ICZyci0+cG93ZXJfcnVsZTsKIAogCQkvKgogCQkgKiBXZSBvbmx5IG5lZWQgdG8ga25vdyBpZiBvbmUgZnJlcXVlbmN5IHJ1bGUgd2FzCkBAIC0xMzMwLDYgKzEzMzEsOSBAQAogCQluZWVkX21vcmVfcHJvY2Vzc2luZyA9IHRydWU7CiAJc3Bpbl91bmxvY2soJnJlZ19yZXF1ZXN0c19sb2NrKTsKIAorCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfVVNFUikKKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZyZWdfdGltZW91dCk7CisKIAlpZiAobmVlZF9tb3JlX3Byb2Nlc3NpbmcpCiAJCXNjaGVkdWxlX3dvcmsoJnJlZ193b3JrKTsKIH0KQEAgLTE0NDAsOCArMTQ0NCwxOCBAQAogCXIgPSBfX3JlZ3VsYXRvcnlfaGludCh3aXBoeSwgcmVnX3JlcXVlc3QpOwogCS8qIFRoaXMgaXMgcmVxdWlyZWQgc28gdGhhdCB0aGUgb3JpZ18qIHBhcmFtZXRlcnMgYXJlIHNhdmVkICovCiAJaWYgKHIgPT0gLUVBTFJFQURZICYmIHdpcGh5ICYmCi0JICAgIHdpcGh5LT5mbGFncyAmIFdJUEhZX0ZMQUdfU1RSSUNUX1JFR1VMQVRPUlkpCisJICAgIHdpcGh5LT5mbGFncyAmIFdJUEhZX0ZMQUdfU1RSSUNUX1JFR1VMQVRPUlkpIHsKIAkJd2lwaHlfdXBkYXRlX3JlZ3VsYXRvcnkod2lwaHksIGluaXRpYXRvcik7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFdlIG9ubHkgdGltZSBvdXQgdXNlciBoaW50cywgZ2l2ZW4gdGhhdCB0aGV5IHNob3VsZCBiZSB0aGUgb25seQorCSAqIHNvdXJjZSBvZiBib2d1cyByZXF1ZXN0cy4KKwkgKi8KKwlpZiAociAhPSAtRUFMUkVBRFkgJiYKKwkgICAgcmVnX3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfVVNFUikKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZyZWdfdGltZW91dCwgbXNlY3NfdG9famlmZmllcygzMTQyKSk7CiB9CiAKIC8qCkBAIC0xNzQ0LDYgKzE3NTgsOCBAQAogewogCWNoYXIgYWxwaGEyWzJdOwogCXN0cnVjdCByZWdfYmVhY29uICpyZWdfYmVhY29uLCAqYnRtcDsKKwlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZWdfcmVxdWVzdCwgKnRtcDsKKwlMSVNUX0hFQUQodG1wX3JlZ19yZXFfbGlzdCk7CiAKIAltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJbXV0ZXhfbG9jaygmcmVnX211dGV4KTsKQEAgLTE3NTEsNiArMTc2NywyNSBAQAogCXJlc2V0X3JlZ2RvbWFpbnMoKTsKIAlyZXN0b3JlX2FscGhhMihhbHBoYTIsIHJlc2V0X3VzZXIpOwogCisJLyoKKwkgKiBJZiB0aGVyZSdzIGFueSBwZW5kaW5nIHJlcXVlc3RzIHdlIHNpbXBseQorCSAqIHN0YXNoIHRoZW0gdG8gYSB0ZW1wb3JhcnkgcGVuZGluZyBxdWV1ZSBhbmQKKwkgKiBhZGQgdGhlbiBhZnRlciB3ZSd2ZSByZXN0b3JlZCByZWd1bGF0b3J5CisJICogc2V0dGluZ3MuCisJICovCisJc3Bpbl9sb2NrKCZyZWdfcmVxdWVzdHNfbG9jayk7CisJaWYgKCFsaXN0X2VtcHR5KCZyZWdfcmVxdWVzdHNfbGlzdCkpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlZ19yZXF1ZXN0LCB0bXAsCisJCQkJCSAmcmVnX3JlcXVlc3RzX2xpc3QsIGxpc3QpIHsKKwkJCWlmIChyZWdfcmVxdWVzdC0+aW5pdGlhdG9yICE9CisJCQkgICAgTkw4MDIxMV9SRUdET01fU0VUX0JZX1VTRVIpCisJCQkJY29udGludWU7CisJCQlsaXN0X2RlbCgmcmVnX3JlcXVlc3QtPmxpc3QpOworCQkJbGlzdF9hZGRfdGFpbCgmcmVnX3JlcXVlc3QtPmxpc3QsICZ0bXBfcmVnX3JlcV9saXN0KTsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOworCiAJLyogQ2xlYXIgYmVhY29uIGhpbnRzICovCiAJc3Bpbl9sb2NrX2JoKCZyZWdfcGVuZGluZ19iZWFjb25zX2xvY2spOwogCWlmICghbGlzdF9lbXB0eSgmcmVnX3BlbmRpbmdfYmVhY29ucykpIHsKQEAgLTE3ODUsOCArMTgyMCwzMSBAQAogCSAqLwogCWlmIChpc19hbl9hbHBoYTIoYWxwaGEyKSkKIAkJcmVndWxhdG9yeV9oaW50X3VzZXIodXNlcl9hbHBoYTIpOwotfQogCisJaWYgKGxpc3RfZW1wdHkoJnRtcF9yZWdfcmVxX2xpc3QpKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisJbXV0ZXhfbG9jaygmcmVnX211dGV4KTsKKworCXNwaW5fbG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZWdfcmVxdWVzdCwgdG1wLCAmdG1wX3JlZ19yZXFfbGlzdCwgbGlzdCkgeworCQlSRUdfREJHX1BSSU5UKCJBZGRpbmcgcmVxdWVzdCBmb3IgY291bnRyeSAlYyVjIGJhY2sgIgorCQkJICAgICAgImludG8gdGhlIHF1ZXVlXG4iLAorCQkJICAgICAgcmVnX3JlcXVlc3QtPmFscGhhMlswXSwKKwkJCSAgICAgIHJlZ19yZXF1ZXN0LT5hbHBoYTJbMV0pOworCQlsaXN0X2RlbCgmcmVnX3JlcXVlc3QtPmxpc3QpOworCQlsaXN0X2FkZF90YWlsKCZyZWdfcmVxdWVzdC0+bGlzdCwgJnJlZ19yZXF1ZXN0c19saXN0KTsKKwl9CisJc3Bpbl91bmxvY2soJnJlZ19yZXF1ZXN0c19sb2NrKTsKKworCW11dGV4X3VubG9jaygmcmVnX211dGV4KTsKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKKworCVJFR19EQkdfUFJJTlQoIktpY2tpbmcgdGhlIHF1ZXVlXG4iKTsKKworCXNjaGVkdWxlX3dvcmsoJnJlZ193b3JrKTsKK30KIAogdm9pZCByZWd1bGF0b3J5X2hpbnRfZGlzY29ubmVjdCh2b2lkKQogewpAQCAtMjEyNSw2ICsyMTgzLDEzIEBACiAJbXV0ZXhfdW5sb2NrKCZyZWdfbXV0ZXgpOwogfQogCitzdGF0aWMgdm9pZCByZWdfdGltZW91dF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlSRUdfREJHX1BSSU5UKCJUaW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIENSREEgdG8gcmVwbHksICIKKwkJICAgICAgInJlc3RvcmluZyByZWd1bGF0b3J5IHNldHRpbmdzIik7CisJcmVzdG9yZV9yZWd1bGF0b3J5X3NldHRpbmdzKHRydWUpOworfQorCiBpbnQgX19pbml0IHJlZ3VsYXRvcnlfaW5pdCh2b2lkKQogewogCWludCBlcnIgPSAwOwpAQCAtMjE3OCw2ICsyMjQzLDcgQEAKIAlzdHJ1Y3QgcmVnX2JlYWNvbiAqcmVnX2JlYWNvbiwgKmJ0bXA7CiAKIAljYW5jZWxfd29ya19zeW5jKCZyZWdfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZyZWdfdGltZW91dCk7CiAKIAltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJbXV0ZXhfbG9jaygmcmVnX211dGV4KTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9zY2FuLmMgYi9uZXQvd2lyZWxlc3Mvc2Nhbi5jCmluZGV4IGZiZjZmMzMuLjczYTQ0MWQgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9zY2FuLmMKKysrIGIvbmV0L3dpcmVsZXNzL3NjYW4uYwpAQCAtOTMsNiArOTMsNjkgQEAKIH0KIEVYUE9SVF9TWU1CT0woY2ZnODAyMTFfc2Nhbl9kb25lKTsKIAordm9pZCBfX2NmZzgwMjExX3NjaGVkX3NjYW5fcmVzdWx0cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndrKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKKworCXJkZXYgPSBjb250YWluZXJfb2Yod2ssIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSwKKwkJCSAgICBzY2hlZF9zY2FuX3Jlc3VsdHNfd2spOworCisJY2ZnODAyMTFfbG9ja19yZGV2KHJkZXYpOworCisJLyogd2UgZG9uJ3QgaGF2ZSBzY2hlZF9zY2FuX3JlcSBhbnltb3JlIGlmIHRoZSBzY2FuIGlzIHN0b3BwaW5nICovCisJaWYgKHJkZXYtPnNjaGVkX3NjYW5fcmVxKQorCQlubDgwMjExX3NlbmRfc2NoZWRfc2Nhbl9yZXN1bHRzKHJkZXYsCisJCQkJCQlyZGV2LT5zY2hlZF9zY2FuX3JlcS0+ZGV2KTsKKworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOworfQorCit2b2lkIGNmZzgwMjExX3NjaGVkX3NjYW5fcmVzdWx0cyhzdHJ1Y3Qgd2lwaHkgKndpcGh5KQoreworCS8qIGlnbm9yZSBpZiB3ZSdyZSBub3Qgc2Nhbm5pbmcgKi8KKwlpZiAod2lwaHlfdG9fZGV2KHdpcGh5KS0+c2NoZWRfc2Nhbl9yZXEpCisJCXF1ZXVlX3dvcmsoY2ZnODAyMTFfd3EsCisJCQkgICAmd2lwaHlfdG9fZGV2KHdpcGh5KS0+c2NoZWRfc2Nhbl9yZXN1bHRzX3drKTsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfc2NoZWRfc2Nhbl9yZXN1bHRzKTsKKwordm9pZCBjZmc4MDIxMV9zY2hlZF9zY2FuX3N0b3BwZWQoc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCisJY2ZnODAyMTFfbG9ja19yZGV2KHJkZXYpOworCV9fY2ZnODAyMTFfc3RvcF9zY2hlZF9zY2FuKHJkZXYsIHRydWUpOworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9zY2hlZF9zY2FuX3N0b3BwZWQpOworCitpbnQgX19jZmc4MDIxMV9zdG9wX3NjaGVkX3NjYW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgICAgIGJvb2wgZHJpdmVyX2luaXRpYXRlZCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisKKwlBU1NFUlRfUkRFVl9MT0NLKHJkZXYpOworCisJaWYgKCFyZGV2LT5zY2hlZF9zY2FuX3JlcSkKKwkJcmV0dXJuIDA7CisKKwlkZXYgPSByZGV2LT5zY2hlZF9zY2FuX3JlcS0+ZGV2OworCisJaWYgKCFkcml2ZXJfaW5pdGlhdGVkKSB7CisJCWVyciA9IHJkZXYtPm9wcy0+c2NoZWRfc2Nhbl9zdG9wKCZyZGV2LT53aXBoeSwgZGV2KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJbmw4MDIxMV9zZW5kX3NjaGVkX3NjYW4ocmRldiwgZGV2LCBOTDgwMjExX0NNRF9TQ0hFRF9TQ0FOX1NUT1BQRUQpOworCisJa2ZyZWUocmRldi0+c2NoZWRfc2Nhbl9yZXEpOworCXJkZXYtPnNjaGVkX3NjYW5fcmVxID0gTlVMTDsKKworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyB2b2lkIGJzc19yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpCiB7CiAJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzOwpAQCAtMjEwLDcgKzI3Myw3IEBACiB7CiAJY29uc3QgdTggKmllOwogCi0JaWYgKCFpc196ZXJvX2V0aGVyX2FkZHIoYS0+YnNzaWQpKQorCWlmICghV0xBTl9DQVBBQklMSVRZX0lTX01CU1MoYS0+Y2FwYWJpbGl0eSkpCiAJCXJldHVybiBmYWxzZTsKIAogCWllID0gY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9NRVNIX0lELApAQCAtMjQ4LDExICszMTEsNyBAQAogCWlmIChhLT5jaGFubmVsICE9IGItPmNoYW5uZWwpCiAJCXJldHVybiBiLT5jaGFubmVsLT5jZW50ZXJfZnJlcSAtIGEtPmNoYW5uZWwtPmNlbnRlcl9mcmVxOwogCi0JciA9IG1lbWNtcChhLT5ic3NpZCwgYi0+YnNzaWQsIEVUSF9BTEVOKTsKLQlpZiAocikKLQkJcmV0dXJuIHI7Ci0KLQlpZiAoaXNfemVyb19ldGhlcl9hZGRyKGEtPmJzc2lkKSkgeworCWlmIChXTEFOX0NBUEFCSUxJVFlfSVNfTUJTUyhhLT5jYXBhYmlsaXR5IHwgYi0+Y2FwYWJpbGl0eSkpIHsKIAkJciA9IGNtcF9pZXMoV0xBTl9FSURfTUVTSF9JRCwKIAkJCSAgICBhLT5pbmZvcm1hdGlvbl9lbGVtZW50cywKIAkJCSAgICBhLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMsCkBAIC0yNjcsNiArMzI2LDEwIEBACiAJCQkgICAgICAgYi0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKTsKIAl9CiAKKwlyID0gbWVtY21wKGEtPmJzc2lkLCBiLT5ic3NpZCwgRVRIX0FMRU4pOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwogCXJldHVybiBjbXBfaWVzKFdMQU5fRUlEX1NTSUQsCiAJCSAgICAgICBhLT5pbmZvcm1hdGlvbl9lbGVtZW50cywKIAkJICAgICAgIGEtPmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cywKQEAgLTQwNyw3ICs0NzAsNyBAQAogCiAJcmVzLT50cyA9IGppZmZpZXM7CiAKLQlpZiAoaXNfemVyb19ldGhlcl9hZGRyKHJlcy0+cHViLmJzc2lkKSkgeworCWlmIChXTEFOX0NBUEFCSUxJVFlfSVNfTUJTUyhyZXMtPnB1Yi5jYXBhYmlsaXR5KSkgewogCQkvKiBtdXN0IGJlIG1lc2gsIHZlcmlmeSAqLwogCQltZXNoaWQgPSBjZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX01FU0hfSUQsCiAJCQkJCSAgcmVzLT5wdWIuaW5mb3JtYXRpb25fZWxlbWVudHMsCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc3lzZnMuYyBiL25ldC93aXJlbGVzcy9zeXNmcy5jCmluZGV4IDQyOTRmYTIuLmM2ZTRjYTYgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9zeXNmcy5jCisrKyBiL25ldC93aXJlbGVzcy9zeXNmcy5jCkBAIC05Myw3ICs5Myw3IEBACiAKIAlpZiAocmRldi0+b3BzLT5zdXNwZW5kKSB7CiAJCXJ0bmxfbG9jaygpOwotCQlyZXQgPSByZGV2LT5vcHMtPnN1c3BlbmQoJnJkZXYtPndpcGh5KTsKKwkJcmV0ID0gcmRldi0+b3BzLT5zdXNwZW5kKCZyZGV2LT53aXBoeSwgcmRldi0+d293bGFuKTsKIAkJcnRubF91bmxvY2soKTsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy91dGlsLmMgYi9uZXQvd2lyZWxlc3MvdXRpbC5jCmluZGV4IDZhNzUwYmMuLmYwNTM2ZDQgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy91dGlsLmMKKysrIGIvbmV0L3dpcmVsZXNzL3V0aWwuYwpAQCAtNTQ0LDcgKzU0NCw4IEBACiAKIHZvaWQgaWVlZTgwMjExX2Ftc2R1X3RvXzgwMjNzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsCiAJCQkgICAgICBjb25zdCB1OCAqYWRkciwgZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGUsCi0JCQkgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgZXh0cmFfaGVhZHJvb20pCisJCQkgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgZXh0cmFfaGVhZHJvb20sCisJCQkgICAgICBib29sIGhhc184MDIxMV9oZWFkZXIpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKmZyYW1lID0gTlVMTDsKIAl1MTYgZXRoZXJ0eXBlOwpAQCAtNTUzLDE0ICs1NTQsMTggQEAKIAlpbnQgcmVtYWluaW5nLCBlcnI7CiAJdTggZHN0W0VUSF9BTEVOXSwgc3JjW0VUSF9BTEVOXTsKIAotCWVyciA9IGllZWU4MDIxMV9kYXRhX3RvXzgwMjMoc2tiLCBhZGRyLCBpZnR5cGUpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OworCWlmIChoYXNfODAyMTFfaGVhZGVyKSB7CisJCWVyciA9IGllZWU4MDIxMV9kYXRhX3RvXzgwMjMoc2tiLCBhZGRyLCBpZnR5cGUpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CiAKLQkvKiBza2lwIHRoZSB3cmFwcGluZyBoZWFkZXIgKi8KLQlldGggPSAoc3RydWN0IGV0aGhkciAqKSBza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7Ci0JaWYgKCFldGgpCi0JCWdvdG8gb3V0OworCQkvKiBza2lwIHRoZSB3cmFwcGluZyBoZWFkZXIgKi8KKwkJZXRoID0gKHN0cnVjdCBldGhoZHIgKikgc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpOworCQlpZiAoIWV0aCkKKwkJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCWV0aCA9IChzdHJ1Y3QgZXRoaGRyICopIHNrYi0+ZGF0YTsKKwl9CiAKIAl3aGlsZSAoc2tiICE9IGZyYW1lKSB7CiAJCXU4IHBhZGRpbmc7CkBAIC04MDMsNiArODA4LDExIEBACiAJCXJldHVybiAtRUJVU1k7CiAKIAlpZiAobnR5cGUgIT0gb3R5cGUpIHsKKwkJZXJyID0gY2ZnODAyMTFfY2FuX2NoYW5nZV9pbnRlcmZhY2UocmRldiwgZGV2LT5pZWVlODAyMTFfcHRyLAorCQkJCQkJICAgIG50eXBlKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKIAkJZGV2LT5pZWVlODAyMTFfcHRyLT51c2VfNGFkZHIgPSBmYWxzZTsKIAkJZGV2LT5pZWVlODAyMTFfcHRyLT5tZXNoX2lkX3VwX2xlbiA9IDA7CiAKQEAgLTg5NiwzICs5MDYsMTAzIEBACiAJLyogZG8gTk9UIHJvdW5kIGRvd24gaGVyZSAqLwogCXJldHVybiAoYml0cmF0ZSArIDUwMDAwKSAvIDEwMDAwMDsKIH0KKworaW50IGNmZzgwMjExX3ZhbGlkYXRlX2JlYWNvbl9pbnQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCSB1MzIgYmVhY29uX2ludCkKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2OworCWludCByZXMgPSAwOworCisJaWYgKCFiZWFjb25faW50KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgJnJkZXYtPm5ldGRldl9saXN0LCBsaXN0KSB7CisJCWlmICghd2Rldi0+YmVhY29uX2ludGVydmFsKQorCQkJY29udGludWU7CisJCWlmICh3ZGV2LT5iZWFjb25faW50ZXJ2YWwgIT0gYmVhY29uX2ludCkgeworCQkJcmVzID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisKKwlyZXR1cm4gcmVzOworfQorCitpbnQgY2ZnODAyMTFfY2FuX2NoYW5nZV9pbnRlcmZhY2Uoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCSAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKKwkJCQkgIGVudW0gbmw4MDIxMV9pZnR5cGUgaWZ0eXBlKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXZfaXRlcjsKKwlpbnQgbnVtW05VTV9OTDgwMjExX0lGVFlQRVNdOworCWludCB0b3RhbCA9IDE7CisJaW50IGksIGo7CisKKwlBU1NFUlRfUlROTCgpOworCisJLyogQWx3YXlzIGFsbG93IHNvZnR3YXJlIGlmdHlwZXMgKi8KKwlpZiAocmRldi0+d2lwaHkuc29mdHdhcmVfaWZ0eXBlcyAmIEJJVChpZnR5cGUpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogRHJpdmVycyB3aWxsIGdyYWR1YWxseSBhbGwgc2V0IHRoaXMgZmxhZywgdW50aWwgYWxsCisJICogaGF2ZSBpdCB3ZSBvbmx5IGVuZm9yY2UgZm9yIHRob3NlIHRoYXQgc2V0IGl0LgorCSAqLworCWlmICghKHJkZXYtPndpcGh5LmZsYWdzICYgV0lQSFlfRkxBR19FTkZPUkNFX0NPTUJJTkFUSU9OUykpCisJCXJldHVybiAwOworCisJbWVtc2V0KG51bSwgMCwgc2l6ZW9mKG51bSkpOworCisJbnVtW2lmdHlwZV0gPSAxOworCisJbXV0ZXhfbG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkod2Rldl9pdGVyLCAmcmRldi0+bmV0ZGV2X2xpc3QsIGxpc3QpIHsKKwkJaWYgKHdkZXZfaXRlciA9PSB3ZGV2KQorCQkJY29udGludWU7CisJCWlmICghbmV0aWZfcnVubmluZyh3ZGV2X2l0ZXItPm5ldGRldikpCisJCQljb250aW51ZTsKKworCQlpZiAocmRldi0+d2lwaHkuc29mdHdhcmVfaWZ0eXBlcyAmIEJJVCh3ZGV2X2l0ZXItPmlmdHlwZSkpCisJCQljb250aW51ZTsKKworCQludW1bd2Rldl9pdGVyLT5pZnR5cGVdKys7CisJCXRvdGFsKys7CisJfQorCW11dGV4X3VubG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCisJZm9yIChpID0gMDsgaSA8IHJkZXYtPndpcGh5Lm5faWZhY2VfY29tYmluYXRpb25zOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9pZmFjZV9jb21iaW5hdGlvbiAqYzsKKwkJc3RydWN0IGllZWU4MDIxMV9pZmFjZV9saW1pdCAqbGltaXRzOworCisJCWMgPSAmcmRldi0+d2lwaHkuaWZhY2VfY29tYmluYXRpb25zW2ldOworCisJCWxpbWl0cyA9IGttZW1kdXAoYy0+bGltaXRzLCBzaXplb2YobGltaXRzWzBdKSAqIGMtPm5fbGltaXRzLAorCQkJCSBHRlBfS0VSTkVMKTsKKwkJaWYgKCFsaW1pdHMpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJaWYgKHRvdGFsID4gYy0+bWF4X2ludGVyZmFjZXMpCisJCQlnb3RvIGNvbnQ7CisKKwkJZm9yIChpZnR5cGUgPSAwOyBpZnR5cGUgPCBOVU1fTkw4MDIxMV9JRlRZUEVTOyBpZnR5cGUrKykgeworCQkJaWYgKHJkZXYtPndpcGh5LnNvZnR3YXJlX2lmdHlwZXMgJiBCSVQoaWZ0eXBlKSkKKwkJCQljb250aW51ZTsKKwkJCWZvciAoaiA9IDA7IGogPCBjLT5uX2xpbWl0czsgaisrKSB7CisJCQkJaWYgKCEobGltaXRzW2pdLnR5cGVzICYgaWZ0eXBlKSkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKGxpbWl0c1tqXS5tYXggPCBudW1baWZ0eXBlXSkKKwkJCQkJZ290byBjb250OworCQkJCWxpbWl0c1tqXS5tYXggLT0gbnVtW2lmdHlwZV07CisJCQl9CisJCX0KKwkJLyogeWF5LCBpdCBmaXRzICovCisJCWtmcmVlKGxpbWl0cyk7CisJCXJldHVybiAwOworIGNvbnQ6CisJCWtmcmVlKGxpbWl0cyk7CisJfQorCisJcmV0dXJuIC1FQlVTWTsKK30KZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jCmluZGV4IDE1NzkyZDguLjliZWMyZTggMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKKysrIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwpAQCAtMTM0OCw3ICsxMzQ4LDggQEAKIAlkZWZhdWx0OgogCQlCVUcoKTsKIAl9Ci0JeGRzdCA9IGRzdF9hbGxvYyhkc3Rfb3BzLCAwKTsKKwl4ZHN0ID0gZHN0X2FsbG9jKGRzdF9vcHMsIE5VTEwsIDAsIDAsIDApOworCW1lbXNldCgmeGRzdC0+dS5ydDYucnQ2aV90YWJsZSwgMCwgc2l6ZW9mKCp4ZHN0KSAtIHNpemVvZihzdHJ1Y3QgZHN0X2VudHJ5KSk7CiAJeGZybV9wb2xpY3lfcHV0X2FmaW5mbyhhZmluZm8pOwogCiAJaWYgKGxpa2VseSh4ZHN0KSkKQEAgLTE0MDYsNiArMTQwNyw3IEBACiAJc3RydWN0IG5ldCAqbmV0ID0geHBfbmV0KHBvbGljeSk7CiAJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IHhmcm1fbW9kZSAqaW5uZXJfbW9kZTsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfcHJldiA9IE5VTEw7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0MCA9IE5VTEw7CiAJaW50IGkgPSAwOwpAQCAtMTQzNiw2ICsxNDM4LDE3IEBACiAJCQlnb3RvIHB1dF9zdGF0ZXM7CiAJCX0KIAorCQlpZiAoeGZybVtpXS0+c2VsLmZhbWlseSA9PSBBRl9VTlNQRUMpIHsKKwkJCWlubmVyX21vZGUgPSB4ZnJtX2lwMmlubmVyX21vZGUoeGZybVtpXSwKKwkJCQkJCQl4ZnJtX2FmMnByb3RvKGZhbWlseSkpOworCQkJaWYgKCFpbm5lcl9tb2RlKSB7CisJCQkJZXJyID0gLUVBRk5PU1VQUE9SVDsKKwkJCQlkc3RfcmVsZWFzZShkc3QpOworCQkJCWdvdG8gcHV0X3N0YXRlczsKKwkJCX0KKwkJfSBlbHNlCisJCQlpbm5lcl9tb2RlID0geGZybVtpXS0+aW5uZXJfbW9kZTsKKwogCQlpZiAoIWRzdF9wcmV2KQogCQkJZHN0MCA9IGRzdDE7CiAJCWVsc2UgewpAQCAtMTQ2NCw3ICsxNDc3LDcgQEAKIAkJZHN0MS0+bGFzdHVzZSA9IG5vdzsKIAogCQlkc3QxLT5pbnB1dCA9IGRzdF9kaXNjYXJkOwotCQlkc3QxLT5vdXRwdXQgPSB4ZnJtW2ldLT5vdXRlcl9tb2RlLT5hZmluZm8tPm91dHB1dDsKKwkJZHN0MS0+b3V0cHV0ID0gaW5uZXJfbW9kZS0+YWZpbmZvLT5vdXRwdXQ7CiAKIAkJZHN0MS0+bmV4dCA9IGRzdF9wcmV2OwogCQlkc3RfcHJldiA9IGRzdDE7CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3JlcGxheS5jIGIvbmV0L3hmcm0veGZybV9yZXBsYXkuYwppbmRleCBmMjE4Mzg1Li40N2YxYjg2IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3JlcGxheS5jCisrKyBiL25ldC94ZnJtL3hmcm1fcmVwbGF5LmMKQEAgLTUzMiw5ICs1MzIsMTIgQEAKIAogCWlmIChyZXBsYXlfZXNuKSB7CiAJCWlmIChyZXBsYXlfZXNuLT5yZXBsYXlfd2luZG93ID4KLQkJICAgIHJlcGxheV9lc24tPmJtcF9sZW4gKiBzaXplb2YoX191MzIpKQorCQkgICAgcmVwbGF5X2Vzbi0+Ym1wX2xlbiAqIHNpemVvZihfX3UzMikgKiA4KQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAoKHgtPnByb3BzLmZsYWdzICYgWEZSTV9TVEFURV9FU04pICYmIHJlcGxheV9lc24tPnJlcGxheV93aW5kb3cgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpZiAoKHgtPnByb3BzLmZsYWdzICYgWEZSTV9TVEFURV9FU04pICYmIHgtPnJlcGxheV9lc24pCiAJCXgtPnJlcGwgPSAmeGZybV9yZXBsYXlfZXNuOwogCWVsc2UKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwppbmRleCBkZDc4NTM2Li5kNzBmODVlIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3N0YXRlLmMKKysrIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jCkBAIC0xMDM2LDE1ICsxMDM2LDE1IEBACiAKIAkJY2FzZSBBRl9JTkVUNjoKIAkJCWlwdjZfYWRkcl9jb3B5KChzdHJ1Y3QgaW42X2FkZHIgKil4LT5zZWwuZGFkZHIuYTYsCi0JCQkJICAgICAgIChzdHJ1Y3QgaW42X2FkZHIgKilkYWRkcik7CisJCQkJICAgICAgIChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKilkYWRkcik7CiAJCQlpcHY2X2FkZHJfY29weSgoc3RydWN0IGluNl9hZGRyICopeC0+c2VsLnNhZGRyLmE2LAotCQkJCSAgICAgICAoc3RydWN0IGluNl9hZGRyICopc2FkZHIpOworCQkJCSAgICAgICAoY29uc3Qgc3RydWN0IGluNl9hZGRyICopc2FkZHIpOwogCQkJeC0+c2VsLnByZWZpeGxlbl9kID0gMTI4OwogCQkJeC0+c2VsLnByZWZpeGxlbl9zID0gMTI4OwogCQkJaXB2Nl9hZGRyX2NvcHkoKHN0cnVjdCBpbjZfYWRkciAqKXgtPnByb3BzLnNhZGRyLmE2LAotCQkJCSAgICAgICAoc3RydWN0IGluNl9hZGRyICopc2FkZHIpOworCQkJCSAgICAgICAoY29uc3Qgc3RydWN0IGluNl9hZGRyICopc2FkZHIpOwogCQkJaXB2Nl9hZGRyX2NvcHkoKHN0cnVjdCBpbjZfYWRkciAqKXgtPmlkLmRhZGRyLmE2LAotCQkJCSAgICAgICAoc3RydWN0IGluNl9hZGRyICopZGFkZHIpOworCQkJCSAgICAgICAoY29uc3Qgc3RydWN0IGluNl9hZGRyICopZGFkZHIpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMjA5Miw4ICsyMDkyLDggQEAKIHN0YXRpYyB2b2lkIHhmcm1fYXVkaXRfaGVscGVyX3BrdGluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IGZhbWlseSwKIAkJCQkgICAgICBzdHJ1Y3QgYXVkaXRfYnVmZmVyICphdWRpdF9idWYpCiB7Ci0Jc3RydWN0IGlwaGRyICppcGg0OwotCXN0cnVjdCBpcHY2aGRyICppcGg2OworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoNDsKKwljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXBoNjsKIAogCXN3aXRjaCAoZmFtaWx5KSB7CiAJY2FzZSBBRl9JTkVUOgpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuYwppbmRleCA1ZDFkNjBkLi5jNjU4Y2IzIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3VzZXIuYworKysgYi9uZXQveGZybS94ZnJtX3VzZXIuYwpAQCAtMTI0LDYgKzEyNCw5IEBACiB7CiAJc3RydWN0IG5sYXR0ciAqcnQgPSBhdHRyc1tYRlJNQV9SRVBMQVlfRVNOX1ZBTF07CiAKKwlpZiAoKHAtPmZsYWdzICYgWEZSTV9TVEFURV9FU04pICYmICFydCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpZiAoIXJ0KQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZS5idWlsZCBiL3NjcmlwdHMvTWFrZWZpbGUuYnVpbGQKaW5kZXggZDVmOTI1YS4uNjE2NTYyMiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9NYWtlZmlsZS5idWlsZAorKysgYi9zY3JpcHRzL01ha2VmaWxlLmJ1aWxkCkBAIC0yNDQsMTQgKzI0NCwxOSBAQAogCiBpZmRlZiBDT05GSUdfRlRSQUNFX01DT1VOVF9SRUNPUkQKIGlmZGVmIEJVSUxEX0NfUkVDT1JETUNPVU5UCitpZmVxICgiJChvcmlnaW4gUkVDT1JETUNPVU5UX1dBUk4pIiwgImNvbW1hbmQgbGluZSIpCisgIFJFQ09SRE1DT1VOVF9GTEFHUyA9IC13CitlbmRpZgogIyBEdWUgdG8gcmVjdXJzaW9uLCB3ZSBtdXN0IHNraXAgZW1wdHkuby4KICMgVGhlIGVtcHR5Lm8gZmlsZSBpcyBjcmVhdGVkIGluIHRoZSBtYWtlIHByb2Nlc3MgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lCiAjICB0aGUgdGFyZ2V0IGVuZGlhbm5lc3MgYW5kIHdvcmQgc2l6ZS4gSXQgaXMgbWFkZSBiZWZvcmUgYWxsIG90aGVyIEMKICMgIGZpbGVzLCBpbmNsdWRpbmcgcmVjb3JkbWNvdW50Lgogc3ViX2NtZF9yZWNvcmRfbWNvdW50ID0JCQkJCVwKIAlpZiBbICQoQCkgIT0gInNjcmlwdHMvbW9kL2VtcHR5Lm8iIF07IHRoZW4JXAotCQkkKG9ianRyZWUpL3NjcmlwdHMvcmVjb3JkbWNvdW50ICIkKEApIjsJXAorCQkkKG9ianRyZWUpL3NjcmlwdHMvcmVjb3JkbWNvdW50ICQoUkVDT1JETUNPVU5UX0ZMQUdTKSAiJChAKSI7CVwKIAlmaTsKK3JlY29yZG1jb3VudF9zb3VyY2UgOj0gJChzcmN0cmVlKS9zY3JpcHRzL3JlY29yZG1jb3VudC5jIFwKKwkJICAgICQoc3JjdHJlZSkvc2NyaXB0cy9yZWNvcmRtY291bnQuaAogZWxzZQogc3ViX2NtZF9yZWNvcmRfbWNvdW50ID0gc2V0IC1lIDsgcGVybCAkKHNyY3RyZWUpL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsICIkKEFSQ0gpIiBcCiAJIiQoaWYgJChDT05GSUdfQ1BVX0JJR19FTkRJQU4pLGJpZyxsaXR0bGUpIiBcCkBAIC0yNTksNiArMjY0LDcgQEAKIAkiJChPQkpEVU1QKSIgIiQoT0JKQ09QWSkiICIkKENDKSAkKEtCVUlMRF9DRkxBR1MpIiBcCiAJIiQoTEQpIiAiJChOTSkiICIkKFJNKSIgIiQoTVYpIiBcCiAJIiQoaWYgJChwYXJ0LW9mLW1vZHVsZSksMSwwKSIgIiQoQCkiOworcmVjb3JkbWNvdW50X3NvdXJjZSA6PSAkKHNyY3RyZWUpL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCiBlbmRpZgogY21kX3JlY29yZF9tY291bnQgPSAJCQkJCQlcCiAJaWYgWyAiJChmaW5kc3RyaW5nIC1wZywkKF9jX2ZsYWdzKSkiID0gIi1wZyIgXTsgdGhlbglcCkBAIC0yNzksMTMgKzI4NSwxMyBAQAogZW5kZWYKIAogIyBCdWlsdC1pbiBhbmQgY29tcG9zaXRlIG1vZHVsZSBwYXJ0cwotJChvYmopLyUubzogJChzcmMpLyUuYyBGT1JDRQorJChvYmopLyUubzogJChzcmMpLyUuYyAkKHJlY29yZG1jb3VudF9zb3VyY2UpIEZPUkNFCiAJJChjYWxsIGNtZCxmb3JjZV9jaGVja3NyYykKIAkkKGNhbGwgaWZfY2hhbmdlZF9ydWxlLGNjX29fYykKIAogIyBTaW5nbGUtcGFydCBtb2R1bGVzIGFyZSBzcGVjaWFsIHNpbmNlIHdlIG5lZWQgdG8gbWFyayB0aGVtIGluICQoTU9EVkVSRElSKQogCi0kKHNpbmdsZS11c2VkLW0pOiAkKG9iaikvJS5vOiAkKHNyYykvJS5jIEZPUkNFCiskKHNpbmdsZS11c2VkLW0pOiAkKG9iaikvJS5vOiAkKHNyYykvJS5jICQocmVjb3JkbWNvdW50X3NvdXJjZSkgRk9SQ0UKIAkkKGNhbGwgY21kLGZvcmNlX2NoZWNrc3JjKQogCSQoY2FsbCBpZl9jaGFuZ2VkX3J1bGUsY2Nfb19jKQogCUB7IGVjaG8gJChAOi5vPS5rbyk7IGVjaG8gJEA7IH0gPiAkKE1PRFZFUkRJUikvJChARjoubz0ubW9kKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL2NvbmYuYyBiL3NjcmlwdHMva2NvbmZpZy9jb25mLmMKaW5kZXggNjU5MzI2Yy4uMDA2YWQ4MSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2NvbmYuYworKysgYi9zY3JpcHRzL2tjb25maWcvY29uZi5jCkBAIC0zMzIsNyArMzMyLDcgQEAKIAkJfQogCQlpZiAoIWNoaWxkKQogCQkJY29udGludWU7Ci0JCWlmIChsaW5lW3N0cmxlbihsaW5lKSAtIDFdID09ICc/JykgeworCQlpZiAobGluZVswXSAmJiBsaW5lW3N0cmxlbihsaW5lKSAtIDFdID09ICc/JykgewogCQkJcHJpbnRfaGVscChjaGlsZCk7CiAJCQljb250aW51ZTsKIAkJfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jIGIvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jCmluZGV4IDg4ZjNmMDcuLmUyNmUyZmIgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYworKysgYi9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMKQEAgLTcwMiw2ICs3MDIsMjQgQEAKIAlyZXR1cm4gMTsKIH0KIAorLyogTG9va3MgbGlrZTogYmNtYTptTmlkTnJldk5jbE4uICovCitzdGF0aWMgaW50IGRvX2JjbWFfZW50cnkoY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkgc3RydWN0IGJjbWFfZGV2aWNlX2lkICppZCwgY2hhciAqYWxpYXMpCit7CisJaWQtPm1hbnVmID0gVE9fTkFUSVZFKGlkLT5tYW51Zik7CisJaWQtPmlkID0gVE9fTkFUSVZFKGlkLT5pZCk7CisJaWQtPnJldiA9IFRPX05BVElWRShpZC0+cmV2KTsKKwlpZC0+Y2xhc3MgPSBUT19OQVRJVkUoaWQtPmNsYXNzKTsKKworCXN0cmNweShhbGlhcywgImJjbWE6Iik7CisJQUREKGFsaWFzLCAibSIsIGlkLT5tYW51ZiAhPSBCQ01BX0FOWV9NQU5VRiwgaWQtPm1hbnVmKTsKKwlBREQoYWxpYXMsICJpZCIsIGlkLT5pZCAhPSBCQ01BX0FOWV9JRCwgaWQtPmlkKTsKKwlBREQoYWxpYXMsICJyZXYiLCBpZC0+cmV2ICE9IEJDTUFfQU5ZX1JFViwgaWQtPnJldik7CisJQUREKGFsaWFzLCAiY2wiLCBpZC0+Y2xhc3MgIT0gQkNNQV9BTllfQ0xBU1MsIGlkLT5jbGFzcyk7CisJYWRkX3dpbGRjYXJkKGFsaWFzKTsKKwlyZXR1cm4gMTsKK30KKwogLyogTG9va3MgbGlrZTogdmlydGlvOmROdk4gKi8KIHN0YXRpYyBpbnQgZG9fdmlydGlvX2VudHJ5KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBzdHJ1Y3QgdmlydGlvX2RldmljZV9pZCAqaWQsCiAJCQkgICBjaGFyICphbGlhcykKQEAgLTk2OCw2ICs5ODYsMTAgQEAKIAkJZG9fdGFibGUoc3ltdmFsLCBzeW0tPnN0X3NpemUsCiAJCQkgc2l6ZW9mKHN0cnVjdCBzc2JfZGV2aWNlX2lkKSwgInNzYiIsCiAJCQkgZG9fc3NiX2VudHJ5LCBtb2QpOworCWVsc2UgaWYgKHN5bV9pcyhzeW1uYW1lLCAiX19tb2RfYmNtYV9kZXZpY2VfdGFibGUiKSkKKwkJZG9fdGFibGUoc3ltdmFsLCBzeW0tPnN0X3NpemUsCisJCQkgc2l6ZW9mKHN0cnVjdCBiY21hX2RldmljZV9pZCksICJiY21hIiwKKwkJCSBkb19iY21hX2VudHJ5LCBtb2QpOwogCWVsc2UgaWYgKHN5bV9pcyhzeW1uYW1lLCAiX19tb2RfdmlydGlvX2RldmljZV90YWJsZSIpKQogCQlkb190YWJsZShzeW12YWwsIHN5bS0+c3Rfc2l6ZSwKIAkJCSBzaXplb2Yoc3RydWN0IHZpcnRpb19kZXZpY2VfaWQpLCAidmlydGlvIiwKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbW9kL21vZHBvc3QuYyBiL3NjcmlwdHMvbW9kL21vZHBvc3QuYwppbmRleCBjZDEwNGFmLi40MTNjNTM2IDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKKysrIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCkBAIC00MjAsMTEgKzQyMCwxMCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoaGRyLT5lX3NobnVtID09IDApIHsKKwlpZiAoaGRyLT5lX3NobnVtID09IFNITl9VTkRFRikgewogCQkvKgogCQkgKiBUaGVyZSBhcmUgbW9yZSB0aGFuIDY0ayBzZWN0aW9ucywKIAkJICogcmVhZCBjb3VudCBmcm9tIC5zaF9zaXplLgotCQkgKiBub3RlOiBpdCBkb2Vzbid0IG5lZWQgc2huZHgyc2VjaW5kZXgoKQogCQkgKi8KIAkJaW5mby0+bnVtX3NlY3Rpb25zID0gVE9fTkFUSVZFKHNlY2hkcnNbMF0uc2hfc2l6ZSk7CiAJfQpAQCAtNDMyLDggKzQzMSw3IEBACiAJCWluZm8tPm51bV9zZWN0aW9ucyA9IGhkci0+ZV9zaG51bTsKIAl9CiAJaWYgKGhkci0+ZV9zaHN0cm5keCA9PSBTSE5fWElOREVYKSB7Ci0JCWluZm8tPnNlY2luZGV4X3N0cmluZ3MgPQotCQkgICAgc2huZHgyc2VjaW5kZXgoVE9fTkFUSVZFKHNlY2hkcnNbMF0uc2hfbGluaykpOworCQlpbmZvLT5zZWNpbmRleF9zdHJpbmdzID0gVE9fTkFUSVZFKHNlY2hkcnNbMF0uc2hfbGluayk7CiAJfQogCWVsc2UgewogCQlpbmZvLT5zZWNpbmRleF9zdHJpbmdzID0gaGRyLT5lX3Noc3RybmR4OwpAQCAtNDg5LDcgKzQ4Nyw3IEBACiAJCQkgICAgc2VjaGRyc1tpXS5zaF9vZmZzZXQ7CiAJCQlpbmZvLT5zeW10YWJfc3RvcCAgPSAodm9pZCAqKWhkciArCiAJCQkgICAgc2VjaGRyc1tpXS5zaF9vZmZzZXQgKyBzZWNoZHJzW2ldLnNoX3NpemU7Ci0JCQlzaF9saW5rX2lkeCA9IHNobmR4MnNlY2luZGV4KHNlY2hkcnNbaV0uc2hfbGluayk7CisJCQlzaF9saW5rX2lkeCA9IHNlY2hkcnNbaV0uc2hfbGluazsKIAkJCWluZm8tPnN0cnRhYiAgICAgICA9ICh2b2lkICopaGRyICsKIAkJCSAgICBzZWNoZHJzW3NoX2xpbmtfaWR4XS5zaF9vZmZzZXQ7CiAJCX0KQEAgLTUxNiwxMSArNTE0LDkgQEAKIAogCWlmIChzeW10YWJfc2huZHhfaWR4ICE9IH4wVSkgewogCQlFbGYzMl9Xb3JkICpwOwotCQlpZiAoc3ltdGFiX2lkeCAhPQotCQkgICAgc2huZHgyc2VjaW5kZXgoc2VjaGRyc1tzeW10YWJfc2huZHhfaWR4XS5zaF9saW5rKSkKKwkJaWYgKHN5bXRhYl9pZHggIT0gc2VjaGRyc1tzeW10YWJfc2huZHhfaWR4XS5zaF9saW5rKQogCQkJZmF0YWwoIiVzOiBTWU1UQUJfU0hORFggaGFzIGJhZCBzaF9saW5rOiAldSE9JXVcbiIsCi0JCQkgICAgICBmaWxlbmFtZSwKLQkJCSAgICAgIHNobmR4MnNlY2luZGV4KHNlY2hkcnNbc3ltdGFiX3NobmR4X2lkeF0uc2hfbGluayksCisJCQkgICAgICBmaWxlbmFtZSwgc2VjaGRyc1tzeW10YWJfc2huZHhfaWR4XS5zaF9saW5rLAogCQkJICAgICAgc3ltdGFiX2lkeCk7CiAJCS8qIEZpeCBlbmRpYW5uZXNzICovCiAJCWZvciAocCA9IGluZm8tPnN5bXRhYl9zaG5keF9zdGFydDsgcCA8IGluZm8tPnN5bXRhYl9zaG5keF9zdG9wOwpAQCAtMTQ0Niw3ICsxNDQyLDcgQEAKIAkJCQkgICAgRWxmX1NoZHIgKnNlY2hkciwgRWxmX1JlbGEgKnIpCiB7CiAJRWxmX1NoZHIgKnNlY2hkcnMgPSBlbGYtPnNlY2hkcnM7Ci0JaW50IHNlY3Rpb24gPSBzaG5keDJzZWNpbmRleChzZWNoZHItPnNoX2luZm8pOworCWludCBzZWN0aW9uID0gc2VjaGRyLT5zaF9pbmZvOwogCiAJcmV0dXJuICh2b2lkICopZWxmLT5oZHIgKyBzZWNoZHJzW3NlY3Rpb25dLnNoX29mZnNldCArCiAJCXItPnJfb2Zmc2V0OwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5oIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5oCmluZGV4IDAzODhjZmNjLi4yMDMxMTE5IDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmgKKysrIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5oCkBAIC0xNDUsMzMgKzE0NSwyMiBAQAogCXJldHVybiBpICE9IFNITl9YSU5ERVggJiYgaSA+PSBTSE5fTE9SRVNFUlZFICYmIGkgPD0gU0hOX0hJUkVTRVJWRTsKIH0KIAotLyogc2huZHggaXMgaW4gWzAuLlNITl9MT1JFU0VSVkUpIFUgKFNITl9ISVJFU0VSVkUsIDB4ZmZmZmZmZl0sIHRodXM6Ci0gKiBzaG5keCA9PSAwICAgICAgICAgICAgICAgPD0+IHNlY2hkcnNbMF0KLSAqIC4uLi4uLgotICogc2huZHggPT0gU0hOX0xPUkVTRVJWRS0xIDw9PiBzZWNoZHJzW1NITl9MT1JFU0VSVkUtMV0KLSAqIHNobmR4ID09IFNITl9ISVJFU0VSVkUrMSA8PT4gc2VjaGRyc1tTSE5fTE9SRVNFUlZFXQotICogc2huZHggPT0gU0hOX0hJUkVTRVJWRSsyIDw9PiBzZWNoZHJzW1NITl9MT1JFU0VSVkUrMV0KLSAqIC4uLi4uLgotICogZnlpOiBzeW0tPnN0X3NobmR4IGlzIHVpbnQxNiwgU0hOX0xPUkVTRVJWRSA9IGZmMDAsIFNITl9ISVJFU0VSVkUgPSBmZmZmLAotICogc28gYmFzaWNhbGx5IHdlIG1hcCAgMDAwMC4uZmVmZiAtPiAwMDAwLi5mZWZmCi0gKiAgICAgICAgICAgICAgICAgICAgICBmZjAwLi5mZmZmIC0+ICh5b3UgYXJlIGEgYmFkIGJveSwgZG9udCBkbyBpdCkKLSAqICAgICAgICAgICAgICAgICAgICAgMTAwMDAuLnh4eHggLT4gZmYwMC4uKHh4eHgtMHgxMDApCisvKgorICogTW92ZSByZXNlcnZlZCBzZWN0aW9uIGluZGljZXMgU0hOX0xPUkVTRVJWRS4uU0hOX0hJUkVTRVJWRSBvdXQgb2YKKyAqIHRoZSB3YXkgdG8gLTI1Ni4uLTEsIHRvIGF2b2lkIGNvbmZsaWN0aW5nIHdpdGggcmVhbCBzZWN0aW9uCisgKiBpbmRpY2VzLgogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzaG5keDJzZWNpbmRleCh1bnNpZ25lZCBpbnQgaSkKLXsKLQlpZiAoaSA8PSBTSE5fSElSRVNFUlZFKQotCQlyZXR1cm4gaTsKLQlyZXR1cm4gaSAtIChTSE5fSElSRVNFUlZFICsgMSAtIFNITl9MT1JFU0VSVkUpOwotfQorI2RlZmluZSBTUEVDSUFMKGkpICgoaSkgLSAoU0hOX0hJUkVTRVJWRSArIDEpKQogCiAvKiBBY2Nlc3NvciBmb3Igc3ltLT5zdF9zaG5keCwgaGlkZXMgdWdsaW5lc3Mgb2YgIjY0ayBzZWN0aW9ucyIgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9zZWNpbmRleChjb25zdCBzdHJ1Y3QgZWxmX2luZm8gKmluZm8sCiAJCQkJCWNvbnN0IEVsZl9TeW0gKnN5bSkKIHsKKwlpZiAoaXNfc2huZHhfc3BlY2lhbChzeW0tPnN0X3NobmR4KSkKKwkJcmV0dXJuIFNQRUNJQUwoc3ltLT5zdF9zaG5keCk7CiAJaWYgKHN5bS0+c3Rfc2huZHggIT0gU0hOX1hJTkRFWCkKIAkJcmV0dXJuIHN5bS0+c3Rfc2huZHg7Ci0JcmV0dXJuIHNobmR4MnNlY2luZGV4KGluZm8tPnN5bXRhYl9zaG5keF9zdGFydFtzeW0gLQotCQkJCQkJICAgICAgIGluZm8tPnN5bXRhYl9zdGFydF0pOworCXJldHVybiBpbmZvLT5zeW10YWJfc2huZHhfc3RhcnRbc3ltIC0gaW5mby0+c3ltdGFiX3N0YXJ0XTsKIH0KIAogLyogZmlsZTJhbGlhcy5jICovCmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZHVsZS1jb21tb24ubGRzIGIvc2NyaXB0cy9tb2R1bGUtY29tbW9uLmxkcwppbmRleCA0N2ExZjlhLi4wODY1YjNlIDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZHVsZS1jb21tb24ubGRzCisrKyBiL3NjcmlwdHMvbW9kdWxlLWNvbW1vbi5sZHMKQEAgLTUsNCArNSwxNSBAQAogICovCiBTRUNUSU9OUyB7CiAJL0RJU0NBUkQvIDogeyAqKC5kaXNjYXJkKSB9CisKKwlfX2tzeW10YWIJCTogeyAqKFNPUlQoX19fa3N5bXRhYisqKSkgfQorCV9fa3N5bXRhYl9ncGwJCTogeyAqKFNPUlQoX19fa3N5bXRhYl9ncGwrKikpIH0KKwlfX2tzeW10YWJfdW51c2VkCTogeyAqKFNPUlQoX19fa3N5bXRhYl91bnVzZWQrKikpIH0KKwlfX2tzeW10YWJfdW51c2VkX2dwbAk6IHsgKihTT1JUKF9fX2tzeW10YWJfdW51c2VkX2dwbCsqKSkgfQorCV9fa3N5bXRhYl9ncGxfZnV0dXJlCTogeyAqKFNPUlQoX19fa3N5bXRhYl9ncGxfZnV0dXJlKyopKSB9CisJX19rY3JjdGFiCQk6IHsgKihTT1JUKF9fX2tjcmN0YWIrKikpIH0KKwlfX2tjcmN0YWJfZ3BsCQk6IHsgKihTT1JUKF9fX2tjcmN0YWJfZ3BsKyopKSB9CisJX19rY3JjdGFiX3VudXNlZAk6IHsgKihTT1JUKF9fX2tjcmN0YWJfdW51c2VkKyopKSB9CisJX19rY3JjdGFiX3VudXNlZF9ncGwJOiB7ICooU09SVChfX19rY3JjdGFiX3VudXNlZF9ncGwrKikpIH0KKwlfX2tjcmN0YWJfZ3BsX2Z1dHVyZQk6IHsgKihTT1JUKF9fX2tjcmN0YWJfZ3BsX2Z1dHVyZSsqKSkgfQogfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9yZWNvcmRtY291bnQuYyBiL3NjcmlwdHMvcmVjb3JkbWNvdW50LmMKaW5kZXggZjlmNmY1Mi4uZWU1MmNiOCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9yZWNvcmRtY291bnQuYworKysgYi9zY3JpcHRzL3JlY29yZG1jb3VudC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgogI2luY2x1ZGUgPGVsZi5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8c2V0am1wLmg+CkBAIC0zOSw2ICs0MCw3IEBACiBzdGF0aWMgc3RydWN0IHN0YXQgc2I7CS8qIFJlbWVtYmVyIC5zdF9zaXplLCBldGMuICovCiBzdGF0aWMgam1wX2J1ZiBqbXBlbnY7CS8qIHNldGptcC9sb25nam1wIHBlci1maWxlIGVycm9yIGVzY2FwZSAqLwogc3RhdGljIGNvbnN0IGNoYXIgKmFsdG1jb3VudDsJLyogYWx0ZXJuYXRlIG1jb3VudCBzeW1ib2wgbmFtZSAqLworc3RhdGljIGludCB3YXJuX29uX25vdHJhY2Vfc2VjdDsgLyogd2FybiB3aGVuIHNlY3Rpb24gaGFzIG1jb3VudCBub3QgYmVpbmcgcmVjb3JkZWQgKi8KIAogLyogc2V0am1wKCkgcmV0dXJuIHZhbHVlcyAqLwogZW51bSB7CkBAIC03OCw3ICs4MCw3IEBACiB1bHNlZWsoaW50IGNvbnN0IGZkLCBvZmZfdCBjb25zdCBvZmZzZXQsIGludCBjb25zdCB3aGVuY2UpCiB7CiAJb2ZmX3QgY29uc3QgdyA9IGxzZWVrKGZkLCBvZmZzZXQsIHdoZW5jZSk7Ci0JaWYgKChvZmZfdCktMSA9PSB3KSB7CisJaWYgKHcgPT0gKG9mZl90KS0xKSB7CiAJCXBlcnJvcigibHNlZWsiKTsKIAkJZmFpbF9maWxlKCk7CiAJfQpAQCAtMTExLDEzICsxMTMsNDEgQEAKIHVtYWxsb2Moc2l6ZV90IHNpemUpCiB7CiAJdm9pZCAqY29uc3QgYWRkciA9IG1hbGxvYyhzaXplKTsKLQlpZiAoMCA9PSBhZGRyKSB7CisJaWYgKGFkZHIgPT0gMCkgewogCQlmcHJpbnRmKHN0ZGVyciwgIm1hbGxvYyBmYWlsZWQ6ICV6dSBieXRlc1xuIiwgc2l6ZSk7CiAJCWZhaWxfZmlsZSgpOwogCX0KIAlyZXR1cm4gYWRkcjsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGNoYXIgaWRlYWxfbm9wNV94ODZfNjRbNV0gPSB7IDB4MGYsIDB4MWYsIDB4NDQsIDB4MDAsIDB4MDAgfTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGlkZWFsX25vcDVfeDg2XzMyWzVdID0geyAweDNlLCAweDhkLCAweDc0LCAweDI2LCAweDAwIH07CitzdGF0aWMgdW5zaWduZWQgY2hhciAqaWRlYWxfbm9wOworCitzdGF0aWMgY2hhciByZWxfdHlwZV9ub3A7CisKK3N0YXRpYyBpbnQgKCptYWtlX25vcCkodm9pZCAqbWFwLCBzaXplX3QgY29uc3Qgb2Zmc2V0KTsKKworc3RhdGljIGludCBtYWtlX25vcF94ODYodm9pZCAqbWFwLCBzaXplX3QgY29uc3Qgb2Zmc2V0KQoreworCXVpbnQzMl90ICpwdHI7CisJdW5zaWduZWQgY2hhciAqb3A7CisKKwkvKiBDb25maXJtIHdlIGhhdmUgMHhlOCAweDAgMHgwIDB4MCAweDAgKi8KKwlwdHIgPSBtYXAgKyBvZmZzZXQ7CisJaWYgKCpwdHIgIT0gMCkKKwkJcmV0dXJuIC0xOworCisJb3AgPSBtYXAgKyBvZmZzZXQgLSAxOworCWlmICgqb3AgIT0gMHhlOCkKKwkJcmV0dXJuIC0xOworCisJLyogY29udmVydCB0byBub3AgKi8KKwl1bHNlZWsoZmRfbWFwLCBvZmZzZXQgLSAxLCBTRUVLX1NFVCk7CisJdXdyaXRlKGZkX21hcCwgaWRlYWxfbm9wLCA1KTsKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIEdldCB0aGUgd2hvbGUgZmlsZSBhcyBhIHByb2dyYW1taW5nIGNvbnZlbmllbmNlIGluIG9yZGVyIHRvIGF2b2lkCiAgKiBtYWxsb2MrbHNlZWsrcmVhZCtmcmVlIG9mIG1hbnkgcGllY2VzLiAgSWYgc3VjY2Vzc2Z1bCwgdGhlbiBtbWFwCkBAIC0xMzYsNyArMTY2LDcgQEAKIAl2b2lkICphZGRyOwogCiAJZmRfbWFwID0gb3BlbihmbmFtZSwgT19SRFdSKTsKLQlpZiAoMCA+IGZkX21hcCB8fCAwID4gZnN0YXQoZmRfbWFwLCAmc2IpKSB7CisJaWYgKGZkX21hcCA8IDAgfHwgZnN0YXQoZmRfbWFwLCAmc2IpIDwgMCkgewogCQlwZXJyb3IoZm5hbWUpOwogCQlmYWlsX2ZpbGUoKTsKIAl9CkBAIC0xNDcsNyArMTc3LDcgQEAKIAlhZGRyID0gbW1hcCgwLCBzYi5zdF9zaXplLCBQUk9UX1JFQUR8UFJPVF9XUklURSwgTUFQX1BSSVZBVEUsCiAJCSAgICBmZF9tYXAsIDApOwogCW1tYXBfZmFpbGVkID0gMDsKLQlpZiAoTUFQX0ZBSUxFRCA9PSBhZGRyKSB7CisJaWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkgewogCQltbWFwX2ZhaWxlZCA9IDE7CiAJCWFkZHIgPSB1bWFsbG9jKHNiLnN0X3NpemUpOwogCQl1cmVhZChmZF9tYXAsIGFkZHIsIHNiLnN0X3NpemUpOwpAQCAtMjA2LDEyICsyMzYsMTMgQEAKIHN0YXRpYyBpbnQKIGlzX21jb3VudGVkX3NlY3Rpb25fbmFtZShjaGFyIGNvbnN0ICpjb25zdCB0eHRuYW1lKQogewotCXJldHVybiAwID09IHN0cmNtcCgiLnRleHQiLCAgICAgICAgICAgdHh0bmFtZSkgfHwKLQkJMCA9PSBzdHJjbXAoIi5yZWYudGV4dCIsICAgICAgdHh0bmFtZSkgfHwKLQkJMCA9PSBzdHJjbXAoIi5zY2hlZC50ZXh0IiwgICAgdHh0bmFtZSkgfHwKLQkJMCA9PSBzdHJjbXAoIi5zcGlubG9jay50ZXh0IiwgdHh0bmFtZSkgfHwKLQkJMCA9PSBzdHJjbXAoIi5pcnFlbnRyeS50ZXh0IiwgdHh0bmFtZSkgfHwKLQkJMCA9PSBzdHJjbXAoIi50ZXh0LnVubGlrZWx5IiwgdHh0bmFtZSk7CisJcmV0dXJuIHN0cmNtcCgiLnRleHQiLCAgICAgICAgICAgdHh0bmFtZSkgPT0gMCB8fAorCQlzdHJjbXAoIi5yZWYudGV4dCIsICAgICAgdHh0bmFtZSkgPT0gMCB8fAorCQlzdHJjbXAoIi5zY2hlZC50ZXh0IiwgICAgdHh0bmFtZSkgPT0gMCB8fAorCQlzdHJjbXAoIi5zcGlubG9jay50ZXh0IiwgdHh0bmFtZSkgPT0gMCB8fAorCQlzdHJjbXAoIi5pcnFlbnRyeS50ZXh0IiwgdHh0bmFtZSkgPT0gMCB8fAorCQlzdHJjbXAoIi5rcHJvYmVzLnRleHQiLCB0eHRuYW1lKSA9PSAwIHx8CisJCXN0cmNtcCgiLnRleHQudW5saWtlbHkiLCB0eHRuYW1lKSA9PSAwOwogfQogCiAvKiAzMiBiaXQgYW5kIDY0IGJpdCBhcmUgdmVyeSBzaW1pbGFyICovCkBAIC0yNjQsNDMgKzI5NSw0OCBAQAogCXc4ID0gdzhuYXQ7CiAJc3dpdGNoIChlaGRyLT5lX2lkZW50W0VJX0RBVEFdKSB7CiAJCXN0YXRpYyB1bnNpZ25lZCBpbnQgY29uc3QgZW5kaWFuID0gMTsKLQlkZWZhdWx0OiB7CisJZGVmYXVsdDoKIAkJZnByaW50ZihzdGRlcnIsICJ1bnJlY29nbml6ZWQgRUxGIGRhdGEgZW5jb2RpbmcgJWQ6ICVzXG4iLAogCQkJZWhkci0+ZV9pZGVudFtFSV9EQVRBXSwgZm5hbWUpOwogCQlmYWlsX2ZpbGUoKTsKLQl9IGJyZWFrOwotCWNhc2UgRUxGREFUQTJMU0I6IHsKLQkJaWYgKDEgIT0gKih1bnNpZ25lZCBjaGFyIGNvbnN0ICopJmVuZGlhbikgeworCQlicmVhazsKKwljYXNlIEVMRkRBVEEyTFNCOgorCQlpZiAoKih1bnNpZ25lZCBjaGFyIGNvbnN0ICopJmVuZGlhbiAhPSAxKSB7CiAJCQkvKiBtYWluKCkgaXMgYmlnIGVuZGlhbiwgZmlsZS5vIGlzIGxpdHRsZSBlbmRpYW4uICovCiAJCQl3ID0gdzRyZXY7CiAJCQl3MiA9IHcycmV2OwogCQkJdzggPSB3OHJldjsKIAkJfQotCX0gYnJlYWs7Ci0JY2FzZSBFTEZEQVRBMk1TQjogewotCQlpZiAoMCAhPSAqKHVuc2lnbmVkIGNoYXIgY29uc3QgKikmZW5kaWFuKSB7CisJCWJyZWFrOworCWNhc2UgRUxGREFUQTJNU0I6CisJCWlmICgqKHVuc2lnbmVkIGNoYXIgY29uc3QgKikmZW5kaWFuICE9IDApIHsKIAkJCS8qIG1haW4oKSBpcyBsaXR0bGUgZW5kaWFuLCBmaWxlLm8gaXMgYmlnIGVuZGlhbi4gKi8KIAkJCXcgPSB3NHJldjsKIAkJCXcyID0gdzJyZXY7CiAJCQl3OCA9IHc4cmV2OwogCQl9Ci0JfSBicmVhazsKKwkJYnJlYWs7CiAJfSAgLyogZW5kIHN3aXRjaCAqLwotCWlmICgwICE9IG1lbWNtcChFTEZNQUcsIGVoZHItPmVfaWRlbnQsIFNFTEZNQUcpCi0JfHwgIEVUX1JFTCAhPSB3MihlaGRyLT5lX3R5cGUpCi0JfHwgIEVWX0NVUlJFTlQgIT0gZWhkci0+ZV9pZGVudFtFSV9WRVJTSU9OXSkgeworCWlmIChtZW1jbXAoRUxGTUFHLCBlaGRyLT5lX2lkZW50LCBTRUxGTUFHKSAhPSAwCisJfHwgIHcyKGVoZHItPmVfdHlwZSkgIT0gRVRfUkVMCisJfHwgIGVoZHItPmVfaWRlbnRbRUlfVkVSU0lPTl0gIT0gRVZfQ1VSUkVOVCkgewogCQlmcHJpbnRmKHN0ZGVyciwgInVucmVjb2duaXplZCBFVF9SRUwgZmlsZSAlc1xuIiwgZm5hbWUpOwogCQlmYWlsX2ZpbGUoKTsKIAl9CiAKIAlncGZ4ID0gMDsKIAlzd2l0Y2ggKHcyKGVoZHItPmVfbWFjaGluZSkpIHsKLQlkZWZhdWx0OiB7CisJZGVmYXVsdDoKIAkJZnByaW50ZihzdGRlcnIsICJ1bnJlY29nbml6ZWQgZV9tYWNoaW5lICVkICVzXG4iLAogCQkJdzIoZWhkci0+ZV9tYWNoaW5lKSwgZm5hbWUpOwogCQlmYWlsX2ZpbGUoKTsKLQl9IGJyZWFrOwotCWNhc2UgRU1fMzg2OgkgcmVsdHlwZSA9IFJfMzg2XzMyOyAgICAgICAgICAgICAgICAgICBicmVhazsKKwkJYnJlYWs7CisJY2FzZSBFTV8zODY6CisJCXJlbHR5cGUgPSBSXzM4Nl8zMjsKKwkJbWFrZV9ub3AgPSBtYWtlX25vcF94ODY7CisJCWlkZWFsX25vcCA9IGlkZWFsX25vcDVfeDg2XzMyOworCQltY291bnRfYWRqdXN0XzMyID0gLTE7CisJCWJyZWFrOwogCWNhc2UgRU1fQVJNOgkgcmVsdHlwZSA9IFJfQVJNX0FCUzMyOwogCQkJIGFsdG1jb3VudCA9ICJfX2dudV9tY291bnRfbmMiOwogCQkJIGJyZWFrOwpAQCAtMzExLDY3ICszNDcsOTEgQEAKIAljYXNlIEVNX1MzOTA6ICAgIC8qIHJlbHR5cGU6IGVfY2xhc3MgICAgKi8gZ3BmeCA9ICdfJzsgYnJlYWs7CiAJY2FzZSBFTV9TSDoJIHJlbHR5cGUgPSBSX1NIX0RJUjMyOyAgICAgICAgICAgICAgICAgYnJlYWs7CiAJY2FzZSBFTV9TUEFSQ1Y5OiByZWx0eXBlID0gUl9TUEFSQ182NDsgICAgIGdwZnggPSAnXyc7IGJyZWFrOwotCWNhc2UgRU1fWDg2XzY0OgkgcmVsdHlwZSA9IFJfWDg2XzY0XzY0OyAgICAgICAgICAgICAgICBicmVhazsKKwljYXNlIEVNX1g4Nl82NDoKKwkJbWFrZV9ub3AgPSBtYWtlX25vcF94ODY7CisJCWlkZWFsX25vcCA9IGlkZWFsX25vcDVfeDg2XzY0OworCQlyZWx0eXBlID0gUl9YODZfNjRfNjQ7CisJCW1jb3VudF9hZGp1c3RfNjQgPSAtMTsKKwkJYnJlYWs7CiAJfSAgLyogZW5kIHN3aXRjaCAqLwogCiAJc3dpdGNoIChlaGRyLT5lX2lkZW50W0VJX0NMQVNTXSkgewotCWRlZmF1bHQ6IHsKKwlkZWZhdWx0OgogCQlmcHJpbnRmKHN0ZGVyciwgInVucmVjb2duaXplZCBFTEYgY2xhc3MgJWQgJXNcbiIsCiAJCQllaGRyLT5lX2lkZW50W0VJX0NMQVNTXSwgZm5hbWUpOwogCQlmYWlsX2ZpbGUoKTsKLQl9IGJyZWFrOwotCWNhc2UgRUxGQ0xBU1MzMjogewotCQlpZiAoc2l6ZW9mKEVsZjMyX0VoZHIpICE9IHcyKGVoZHItPmVfZWhzaXplKQotCQl8fCAgc2l6ZW9mKEVsZjMyX1NoZHIpICE9IHcyKGVoZHItPmVfc2hlbnRzaXplKSkgeworCQlicmVhazsKKwljYXNlIEVMRkNMQVNTMzI6CisJCWlmICh3MihlaGRyLT5lX2Voc2l6ZSkgIT0gc2l6ZW9mKEVsZjMyX0VoZHIpCisJCXx8ICB3MihlaGRyLT5lX3NoZW50c2l6ZSkgIT0gc2l6ZW9mKEVsZjMyX1NoZHIpKSB7CiAJCQlmcHJpbnRmKHN0ZGVyciwKIAkJCQkidW5yZWNvZ25pemVkIEVUX1JFTCBmaWxlOiAlc1xuIiwgZm5hbWUpOwogCQkJZmFpbF9maWxlKCk7CiAJCX0KLQkJaWYgKEVNX1MzOTAgPT0gdzIoZWhkci0+ZV9tYWNoaW5lKSkKKwkJaWYgKHcyKGVoZHItPmVfbWFjaGluZSkgPT0gRU1fUzM5MCkgewogCQkJcmVsdHlwZSA9IFJfMzkwXzMyOwotCQlpZiAoRU1fTUlQUyA9PSB3MihlaGRyLT5lX21hY2hpbmUpKSB7CisJCQltY291bnRfYWRqdXN0XzMyID0gLTQ7CisJCX0KKwkJaWYgKHcyKGVoZHItPmVfbWFjaGluZSkgPT0gRU1fTUlQUykgewogCQkJcmVsdHlwZSA9IFJfTUlQU18zMjsKIAkJCWlzX2Zha2VfbWNvdW50MzIgPSBNSVBTMzJfaXNfZmFrZV9tY291bnQ7CiAJCX0KIAkJZG8zMihlaGRyLCBmbmFtZSwgcmVsdHlwZSk7Ci0JfSBicmVhazsKKwkJYnJlYWs7CiAJY2FzZSBFTEZDTEFTUzY0OiB7CiAJCUVsZjY0X0VoZHIgKmNvbnN0IGdoZHIgPSAoRWxmNjRfRWhkciAqKWVoZHI7Ci0JCWlmIChzaXplb2YoRWxmNjRfRWhkcikgIT0gdzIoZ2hkci0+ZV9laHNpemUpCi0JCXx8ICBzaXplb2YoRWxmNjRfU2hkcikgIT0gdzIoZ2hkci0+ZV9zaGVudHNpemUpKSB7CisJCWlmICh3MihnaGRyLT5lX2Voc2l6ZSkgIT0gc2l6ZW9mKEVsZjY0X0VoZHIpCisJCXx8ICB3MihnaGRyLT5lX3NoZW50c2l6ZSkgIT0gc2l6ZW9mKEVsZjY0X1NoZHIpKSB7CiAJCQlmcHJpbnRmKHN0ZGVyciwKIAkJCQkidW5yZWNvZ25pemVkIEVUX1JFTCBmaWxlOiAlc1xuIiwgZm5hbWUpOwogCQkJZmFpbF9maWxlKCk7CiAJCX0KLQkJaWYgKEVNX1MzOTAgPT0gdzIoZ2hkci0+ZV9tYWNoaW5lKSkKKwkJaWYgKHcyKGdoZHItPmVfbWFjaGluZSkgPT0gRU1fUzM5MCkgewogCQkJcmVsdHlwZSA9IFJfMzkwXzY0OwotCQlpZiAoRU1fTUlQUyA9PSB3MihnaGRyLT5lX21hY2hpbmUpKSB7CisJCQltY291bnRfYWRqdXN0XzY0ID0gLTg7CisJCX0KKwkJaWYgKHcyKGdoZHItPmVfbWFjaGluZSkgPT0gRU1fTUlQUykgewogCQkJcmVsdHlwZSA9IFJfTUlQU182NDsKIAkJCUVsZjY0X3Jfc3ltID0gTUlQUzY0X3Jfc3ltOwogCQkJRWxmNjRfcl9pbmZvID0gTUlQUzY0X3JfaW5mbzsKIAkJCWlzX2Zha2VfbWNvdW50NjQgPSBNSVBTNjRfaXNfZmFrZV9tY291bnQ7CiAJCX0KIAkJZG82NChnaGRyLCBmbmFtZSwgcmVsdHlwZSk7Ci0JfSBicmVhazsKKwkJYnJlYWs7CisJfQogCX0gIC8qIGVuZCBzd2l0Y2ggKi8KIAogCWNsZWFudXAoKTsKIH0KIAogaW50Ci1tYWluKGludCBhcmdjLCBjaGFyIGNvbnN0ICphcmd2W10pCittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CiAJY29uc3QgY2hhciBmdHJhY2VbXSA9ICIvZnRyYWNlLm8iOwogCWludCBmdHJhY2Vfc2l6ZSA9IHNpemVvZihmdHJhY2UpIC0gMTsKIAlpbnQgbl9lcnJvciA9IDA7ICAvKiBnY2MtNC4zLjAgZmFsc2UgcG9zaXRpdmUgY29tcGxhaW50ICovCisJaW50IGM7CisJaW50IGk7CiAKLQlpZiAoYXJnYyA8PSAxKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6IHJlY29yZG1jb3VudCBmaWxlLm8uLi5cbiIpOworCXdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCAidyIpKSA+PSAwKSB7CisJCXN3aXRjaCAoYykgeworCQljYXNlICd3JzoKKwkJCXdhcm5fb25fbm90cmFjZV9zZWN0ID0gMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogcmVjb3JkbWNvdW50IFstd10gZmlsZS5vLi4uXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJaWYgKChhcmdjIC0gb3B0aW5kKSA8IDEpIHsKKwkJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogcmVjb3JkbWNvdW50IFstd10gZmlsZS5vLi4uXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJLyogUHJvY2VzcyBlYWNoIGZpbGUgaW4gdHVybiwgYWxsb3dpbmcgZGVlcCBmYWlsdXJlLiAqLwotCWZvciAoLS1hcmdjLCArK2FyZ3Y7IDAgPCBhcmdjOyAtLWFyZ2MsICsrYXJndikgeworCWZvciAoaSA9IG9wdGluZDsgaSA8IGFyZ2M7IGkrKykgeworCQljaGFyICpmaWxlID0gYXJndltpXTsKIAkJaW50IGNvbnN0IHNqdmFsID0gc2V0am1wKGptcGVudik7CiAJCWludCBsZW47CiAKQEAgLTM4MCwyOSArNDQwLDI5IEBACiAJCSAqIGZ1bmN0aW9uIGJ1dCBkb2VzIG5vdCBjYWxsIGl0LiBTaW5jZSBmdHJhY2UubyBzaG91bGQKIAkJICogbm90IGJlIHRyYWNlZCBhbnl3YXksIHdlIGp1c3Qgc2tpcCBpdC4KIAkJICovCi0JCWxlbiA9IHN0cmxlbihhcmd2WzBdKTsKKwkJbGVuID0gc3RybGVuKGZpbGUpOwogCQlpZiAobGVuID49IGZ0cmFjZV9zaXplICYmCi0JCSAgICBzdHJjbXAoYXJndlswXSArIChsZW4gLSBmdHJhY2Vfc2l6ZSksIGZ0cmFjZSkgPT0gMCkKKwkJICAgIHN0cmNtcChmaWxlICsgKGxlbiAtIGZ0cmFjZV9zaXplKSwgZnRyYWNlKSA9PSAwKQogCQkJY29udGludWU7CiAKIAkJc3dpdGNoIChzanZhbCkgewotCQlkZWZhdWx0OiB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgImludGVybmFsIGVycm9yOiAlc1xuIiwgYXJndlswXSk7CisJCWRlZmF1bHQ6CisJCQlmcHJpbnRmKHN0ZGVyciwgImludGVybmFsIGVycm9yOiAlc1xuIiwgZmlsZSk7CiAJCQlleGl0KDEpOwotCQl9IGJyZWFrOwotCQljYXNlIFNKX1NFVEpNUDogeyAgLyogbm9ybWFsIHNlcXVlbmNlICovCisJCQlicmVhazsKKwkJY2FzZSBTSl9TRVRKTVA6ICAgIC8qIG5vcm1hbCBzZXF1ZW5jZSAqLwogCQkJLyogQXZvaWQgcHJvYmxlbXMgaWYgZWFybHkgY2xlYW51cCgpICovCiAJCQlmZF9tYXAgPSAtMTsKIAkJCWVoZHJfY3VyciA9IE5VTEw7CiAJCQltbWFwX2ZhaWxlZCA9IDE7Ci0JCQlkb19maWxlKGFyZ3ZbMF0pOwotCQl9IGJyZWFrOwotCQljYXNlIFNKX0ZBSUw6IHsgIC8qIGVycm9yIGluIGRvX2ZpbGUgb3IgYmVsb3cgKi8KKwkJCWRvX2ZpbGUoZmlsZSk7CisJCQlicmVhazsKKwkJY2FzZSBTSl9GQUlMOiAgICAvKiBlcnJvciBpbiBkb19maWxlIG9yIGJlbG93ICovCiAJCQkrK25fZXJyb3I7Ci0JCX0gYnJlYWs7Ci0JCWNhc2UgU0pfU1VDQ0VFRDogeyAgLyogcHJlbWF0dXJlIHN1Y2Nlc3MgKi8KKwkJCWJyZWFrOworCQljYXNlIFNKX1NVQ0NFRUQ6ICAgIC8qIHByZW1hdHVyZSBzdWNjZXNzICovCiAJCQkvKiBkbyBub3RoaW5nICovCi0JCX0gYnJlYWs7CisJCQlicmVhazsKIAkJfSAgLyogZW5kIHN3aXRjaCAqLwogCX0KIAlyZXR1cm4gISFuX2Vycm9yOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9yZWNvcmRtY291bnQuaCBiL3NjcmlwdHMvcmVjb3JkbWNvdW50LmgKaW5kZXggYmFmMTg3Yi4uNGJlNjAzNiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9yZWNvcmRtY291bnQuaAorKysgYi9zY3JpcHRzL3JlY29yZG1jb3VudC5oCkBAIC0yMiwxMSArMjIsMTUgQEAKICN1bmRlZiBpc19mYWtlX21jb3VudAogI3VuZGVmIGZuX2lzX2Zha2VfbWNvdW50CiAjdW5kZWYgTUlQU19pc19mYWtlX21jb3VudAorI3VuZGVmIG1jb3VudF9hZGp1c3QKICN1bmRlZiBzaWZ0X3JlbF9tY291bnQKKyN1bmRlZiBub3BfbWNvdW50CiAjdW5kZWYgZmluZF9zZWNzeW1fbmR4CiAjdW5kZWYgX19oYXNfcmVsX21jb3VudAogI3VuZGVmIGhhc19yZWxfbWNvdW50CiAjdW5kZWYgdG90X3JlbHNpemUKKyN1bmRlZiBnZXRfbWNvdW50c3ltCisjdW5kZWYgZ2V0X3N5bV9zdHJfYW5kX3JlbHAKICN1bmRlZiBkb19mdW5jCiAjdW5kZWYgRWxmX0FkZHIKICN1bmRlZiBFbGZfRWhkcgpAQCAtNDksMTQgKzUzLDE4IEBACiAjaWZkZWYgUkVDT1JEX01DT1VOVF82NAogIyBkZWZpbmUgYXBwZW5kX2Z1bmMJCWFwcGVuZDY0CiAjIGRlZmluZSBzaWZ0X3JlbF9tY291bnQJc2lmdDY0X3JlbF9tY291bnQKKyMgZGVmaW5lIG5vcF9tY291bnQJCW5vcF9tY291bnRfNjQKICMgZGVmaW5lIGZpbmRfc2Vjc3ltX25keAlmaW5kNjRfc2Vjc3ltX25keAogIyBkZWZpbmUgX19oYXNfcmVsX21jb3VudAlfX2hhczY0X3JlbF9tY291bnQKICMgZGVmaW5lIGhhc19yZWxfbWNvdW50CQloYXM2NF9yZWxfbWNvdW50CiAjIGRlZmluZSB0b3RfcmVsc2l6ZQkJdG90NjRfcmVsc2l6ZQorIyBkZWZpbmUgZ2V0X3N5bV9zdHJfYW5kX3JlbHAJZ2V0X3N5bV9zdHJfYW5kX3JlbHBfNjQKICMgZGVmaW5lIGRvX2Z1bmMJCWRvNjQKKyMgZGVmaW5lIGdldF9tY291bnRzeW0JCWdldF9tY291bnRzeW1fNjQKICMgZGVmaW5lIGlzX2Zha2VfbWNvdW50CQlpc19mYWtlX21jb3VudDY0CiAjIGRlZmluZSBmbl9pc19mYWtlX21jb3VudAlmbl9pc19mYWtlX21jb3VudDY0CiAjIGRlZmluZSBNSVBTX2lzX2Zha2VfbWNvdW50CU1JUFM2NF9pc19mYWtlX21jb3VudAorIyBkZWZpbmUgbWNvdW50X2FkanVzdAkJbWNvdW50X2FkanVzdF82NAogIyBkZWZpbmUgRWxmX0FkZHIJCUVsZjY0X0FkZHIKICMgZGVmaW5lIEVsZl9FaGRyCQlFbGY2NF9FaGRyCiAjIGRlZmluZSBFbGZfU2hkcgkJRWxmNjRfU2hkcgpAQCAtNzcsMTQgKzg1LDE4IEBACiAjZWxzZQogIyBkZWZpbmUgYXBwZW5kX2Z1bmMJCWFwcGVuZDMyCiAjIGRlZmluZSBzaWZ0X3JlbF9tY291bnQJc2lmdDMyX3JlbF9tY291bnQKKyMgZGVmaW5lIG5vcF9tY291bnQJCW5vcF9tY291bnRfMzIKICMgZGVmaW5lIGZpbmRfc2Vjc3ltX25keAlmaW5kMzJfc2Vjc3ltX25keAogIyBkZWZpbmUgX19oYXNfcmVsX21jb3VudAlfX2hhczMyX3JlbF9tY291bnQKICMgZGVmaW5lIGhhc19yZWxfbWNvdW50CQloYXMzMl9yZWxfbWNvdW50CiAjIGRlZmluZSB0b3RfcmVsc2l6ZQkJdG90MzJfcmVsc2l6ZQorIyBkZWZpbmUgZ2V0X3N5bV9zdHJfYW5kX3JlbHAJZ2V0X3N5bV9zdHJfYW5kX3JlbHBfMzIKICMgZGVmaW5lIGRvX2Z1bmMJCWRvMzIKKyMgZGVmaW5lIGdldF9tY291bnRzeW0JCWdldF9tY291bnRzeW1fMzIKICMgZGVmaW5lIGlzX2Zha2VfbWNvdW50CQlpc19mYWtlX21jb3VudDMyCiAjIGRlZmluZSBmbl9pc19mYWtlX21jb3VudAlmbl9pc19mYWtlX21jb3VudDMyCiAjIGRlZmluZSBNSVBTX2lzX2Zha2VfbWNvdW50CU1JUFMzMl9pc19mYWtlX21jb3VudAorIyBkZWZpbmUgbWNvdW50X2FkanVzdAkJbWNvdW50X2FkanVzdF8zMgogIyBkZWZpbmUgRWxmX0FkZHIJCUVsZjMyX0FkZHIKICMgZGVmaW5lIEVsZl9FaGRyCQlFbGYzMl9FaGRyCiAjIGRlZmluZSBFbGZfU2hkcgkJRWxmMzJfU2hkcgpAQCAtMTIzLDYgKzEzNSw4IEBACiB9CiBzdGF0aWMgdm9pZCAoKkVsZl9yX2luZm8pKEVsZl9SZWwgKmNvbnN0IHJwLCB1bnNpZ25lZCBzeW0sIHVuc2lnbmVkIHR5cGUpID0gZm5fRUxGX1JfSU5GTzsKIAorc3RhdGljIGludCBtY291bnRfYWRqdXN0ID0gMDsKKwogLyoKICAqIE1JUFMgbWNvdW50IGxvbmcgY2FsbCBoYXMgMiBfbWNvdW50IHN5bWJvbHMsIG9ubHkgdGhlIHBvc2l0aW9uIG9mIHRoZSAxc3QKICAqIF9tY291bnQgc3ltYm9sIGlzIG5lZWRlZCBmb3IgZHluYW1pYyBmdW5jdGlvbiB0cmFjZXIsIHdpdGggaXQsIHRvIGRpc2FibGUKQEAgLTIzNCw2ICsyNDgsNDkgQEAKIAl1d3JpdGUoZmRfbWFwLCBlaGRyLCBzaXplb2YoKmVoZHIpKTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGdldF9tY291bnRzeW0oRWxmX1N5bSBjb25zdCAqY29uc3Qgc3ltMCwKKwkJCSAgICAgIEVsZl9SZWwgY29uc3QgKnJlbHAsCisJCQkgICAgICBjaGFyIGNvbnN0ICpjb25zdCBzdHIwKQoreworCXVuc2lnbmVkIG1jb3VudHN5bSA9IDA7CisKKwlFbGZfU3ltIGNvbnN0ICpjb25zdCBzeW1wID0KKwkJJnN5bTBbRWxmX3Jfc3ltKHJlbHApXTsKKwljaGFyIGNvbnN0ICpzeW1uYW1lID0gJnN0cjBbdyhzeW1wLT5zdF9uYW1lKV07CisJY2hhciBjb25zdCAqbWNvdW50ID0gZ3BmeCA9PSAnXycgPyAiX21jb3VudCIgOiAibWNvdW50IjsKKworCWlmIChzeW1uYW1lWzBdID09ICcuJykKKwkJKytzeW1uYW1lOyAgLyogcHBjNjQgaGFjayAqLworCWlmIChzdHJjbXAobWNvdW50LCBzeW1uYW1lKSA9PSAwIHx8CisJICAgIChhbHRtY291bnQgJiYgc3RyY21wKGFsdG1jb3VudCwgc3ltbmFtZSkgPT0gMCkpCisJCW1jb3VudHN5bSA9IEVsZl9yX3N5bShyZWxwKTsKKworCXJldHVybiBtY291bnRzeW07Cit9CisKK3N0YXRpYyB2b2lkIGdldF9zeW1fc3RyX2FuZF9yZWxwKEVsZl9TaGRyIGNvbnN0ICpjb25zdCByZWxoZHIsCisJCQkJIEVsZl9FaGRyIGNvbnN0ICpjb25zdCBlaGRyLAorCQkJCSBFbGZfU3ltIGNvbnN0ICoqc3ltMCwKKwkJCQkgY2hhciBjb25zdCAqKnN0cjAsCisJCQkJIEVsZl9SZWwgY29uc3QgKipyZWxwKQoreworCUVsZl9TaGRyICpjb25zdCBzaGRyMCA9IChFbGZfU2hkciAqKShfdyhlaGRyLT5lX3Nob2ZmKQorCQkrICh2b2lkICopZWhkcik7CisJdW5zaWduZWQgY29uc3Qgc3ltc2VjX3NoX2xpbmsgPSB3KHJlbGhkci0+c2hfbGluayk7CisJRWxmX1NoZHIgY29uc3QgKmNvbnN0IHN5bXNlYyA9ICZzaGRyMFtzeW1zZWNfc2hfbGlua107CisJRWxmX1NoZHIgY29uc3QgKmNvbnN0IHN0cnNlYyA9ICZzaGRyMFt3KHN5bXNlYy0+c2hfbGluayldOworCUVsZl9SZWwgY29uc3QgKmNvbnN0IHJlbDAgPSAoRWxmX1JlbCBjb25zdCAqKShfdyhyZWxoZHItPnNoX29mZnNldCkKKwkJKyAodm9pZCAqKWVoZHIpOworCisJKnN5bTAgPSAoRWxmX1N5bSBjb25zdCAqKShfdyhzeW1zZWMtPnNoX29mZnNldCkKKwkJCQkgICsgKHZvaWQgKillaGRyKTsKKworCSpzdHIwID0gKGNoYXIgY29uc3QgKikoX3coc3Ryc2VjLT5zaF9vZmZzZXQpCisJCQkgICAgICAgKyAodm9pZCAqKWVoZHIpOworCisJKnJlbHAgPSByZWwwOworfQorCiAvKgogICogTG9vayBhdCB0aGUgcmVsb2NhdGlvbnMgaW4gb3JkZXIgdG8gZmluZCB0aGUgY2FsbHMgdG8gbWNvdW50LgogICogQWNjdW11bGF0ZSB0aGUgc2VjdGlvbiBvZmZzZXRzIHRoYXQgYXJlIGZvdW5kLCBhbmQgdGhlaXIgcmVsb2NhdGlvbiBpbmZvLApAQCAtMjUwLDQ3ICszMDcsMjcgQEAKIHsKIAl1aW50X3QgKmNvbnN0IG1sb2MwID0gbWxvY3A7CiAJRWxmX1JlbCAqbXJlbHAgPSAqbXJlbHBwOwotCUVsZl9TaGRyICpjb25zdCBzaGRyMCA9IChFbGZfU2hkciAqKShfdyhlaGRyLT5lX3Nob2ZmKQotCQkrICh2b2lkICopZWhkcik7Ci0JdW5zaWduZWQgY29uc3Qgc3ltc2VjX3NoX2xpbmsgPSB3KHJlbGhkci0+c2hfbGluayk7Ci0JRWxmX1NoZHIgY29uc3QgKmNvbnN0IHN5bXNlYyA9ICZzaGRyMFtzeW1zZWNfc2hfbGlua107Ci0JRWxmX1N5bSBjb25zdCAqY29uc3Qgc3ltMCA9IChFbGZfU3ltIGNvbnN0ICopKF93KHN5bXNlYy0+c2hfb2Zmc2V0KQotCQkrICh2b2lkICopZWhkcik7Ci0KLQlFbGZfU2hkciBjb25zdCAqY29uc3Qgc3Ryc2VjID0gJnNoZHIwW3coc3ltc2VjLT5zaF9saW5rKV07Ci0JY2hhciBjb25zdCAqY29uc3Qgc3RyMCA9IChjaGFyIGNvbnN0ICopKF93KHN0cnNlYy0+c2hfb2Zmc2V0KQotCQkrICh2b2lkICopZWhkcik7Ci0KLQlFbGZfUmVsIGNvbnN0ICpjb25zdCByZWwwID0gKEVsZl9SZWwgY29uc3QgKikoX3cocmVsaGRyLT5zaF9vZmZzZXQpCi0JCSsgKHZvaWQgKillaGRyKTsKKwlFbGZfU3ltIGNvbnN0ICpzeW0wOworCWNoYXIgY29uc3QgKnN0cjA7CisJRWxmX1JlbCBjb25zdCAqcmVscDsKIAl1bnNpZ25lZCByZWxfZW50c2l6ZSA9IF93KHJlbGhkci0+c2hfZW50c2l6ZSk7CiAJdW5zaWduZWQgY29uc3QgbnJlbCA9IF93KHJlbGhkci0+c2hfc2l6ZSkgLyByZWxfZW50c2l6ZTsKLQlFbGZfUmVsIGNvbnN0ICpyZWxwID0gcmVsMDsKLQogCXVuc2lnbmVkIG1jb3VudHN5bSA9IDA7CiAJdW5zaWduZWQgdDsKIAotCWZvciAodCA9IG5yZWw7IHQ7IC0tdCkgewotCQlpZiAoIW1jb3VudHN5bSkgewotCQkJRWxmX1N5bSBjb25zdCAqY29uc3Qgc3ltcCA9Ci0JCQkJJnN5bTBbRWxmX3Jfc3ltKHJlbHApXTsKLQkJCWNoYXIgY29uc3QgKnN5bW5hbWUgPSAmc3RyMFt3KHN5bXAtPnN0X25hbWUpXTsKLQkJCWNoYXIgY29uc3QgKm1jb3VudCA9ICdfJyA9PSBncGZ4ID8gIl9tY291bnQiIDogIm1jb3VudCI7CisJZ2V0X3N5bV9zdHJfYW5kX3JlbHAocmVsaGRyLCBlaGRyLCAmc3ltMCwgJnN0cjAsICZyZWxwKTsKIAotCQkJaWYgKCcuJyA9PSBzeW1uYW1lWzBdKQotCQkJCSsrc3ltbmFtZTsgIC8qIHBwYzY0IGhhY2sgKi8KLQkJCWlmICgwID09IHN0cmNtcChtY291bnQsIHN5bW5hbWUpIHx8Ci0JCQkgICAgKGFsdG1jb3VudCAmJiAwID09IHN0cmNtcChhbHRtY291bnQsIHN5bW5hbWUpKSkKLQkJCQltY291bnRzeW0gPSBFbGZfcl9zeW0ocmVscCk7Ci0JCX0KKwlmb3IgKHQgPSBucmVsOyB0OyAtLXQpIHsKKwkJaWYgKCFtY291bnRzeW0pCisJCQltY291bnRzeW0gPSBnZXRfbWNvdW50c3ltKHN5bTAsIHJlbHAsIHN0cjApOwogCiAJCWlmIChtY291bnRzeW0gPT0gRWxmX3Jfc3ltKHJlbHApICYmICFpc19mYWtlX21jb3VudChyZWxwKSkgewotCQkJdWludF90IGNvbnN0IGFkZGVuZCA9IF93KF93KHJlbHAtPnJfb2Zmc2V0KSAtIHJlY3ZhbCk7Ci0KKwkJCXVpbnRfdCBjb25zdCBhZGRlbmQgPQorCQkJCV93KF93KHJlbHAtPnJfb2Zmc2V0KSAtIHJlY3ZhbCArIG1jb3VudF9hZGp1c3QpOwogCQkJbXJlbHAtPnJfb2Zmc2V0ID0gX3cob2ZmYmFzZQogCQkJCSsgKCh2b2lkICopbWxvY3AgLSAodm9pZCAqKW1sb2MwKSk7CiAJCQlFbGZfcl9pbmZvKG1yZWxwLCByZWNzeW0sIHJlbHR5cGUpOwotCQkJaWYgKHNpemVvZihFbGZfUmVsYSkgPT0gcmVsX2VudHNpemUpIHsKKwkJCWlmIChyZWxfZW50c2l6ZSA9PSBzaXplb2YoRWxmX1JlbGEpKSB7CiAJCQkJKChFbGZfUmVsYSAqKW1yZWxwKS0+cl9hZGRlbmQgPSBhZGRlbmQ7CiAJCQkJKm1sb2NwKysgPSAwOwogCQkJfSBlbHNlCkBAIC0zMDQsNiArMzQxLDYzIEBACiAJcmV0dXJuIG1sb2NwOwogfQogCisvKgorICogUmVhZCB0aGUgcmVsb2NhdGlvbiB0YWJsZSBhZ2FpbiwgYnV0IHRoaXMgdGltZSBpdHMgY2FsbGVkIG9uIHNlY3Rpb25zCisgKiB0aGF0IGFyZSBub3QgZ29pbmcgdG8gYmUgdHJhY2VkLiBUaGUgbWNvdW50IGNhbGxzIGhlcmUgd2lsbCBiZSBjb252ZXJ0ZWQKKyAqIGludG8gbm9wcy4KKyAqLworc3RhdGljIHZvaWQgbm9wX21jb3VudChFbGZfU2hkciBjb25zdCAqY29uc3QgcmVsaGRyLAorCQkgICAgICAgRWxmX0VoZHIgY29uc3QgKmNvbnN0IGVoZHIsCisJCSAgICAgICBjb25zdCBjaGFyICpjb25zdCB0eHRuYW1lKQoreworCUVsZl9TaGRyICpjb25zdCBzaGRyMCA9IChFbGZfU2hkciAqKShfdyhlaGRyLT5lX3Nob2ZmKQorCQkrICh2b2lkICopZWhkcik7CisJRWxmX1N5bSBjb25zdCAqc3ltMDsKKwljaGFyIGNvbnN0ICpzdHIwOworCUVsZl9SZWwgY29uc3QgKnJlbHA7CisJRWxmX1NoZHIgY29uc3QgKmNvbnN0IHNoZHIgPSAmc2hkcjBbdyhyZWxoZHItPnNoX2luZm8pXTsKKwl1bnNpZ25lZCByZWxfZW50c2l6ZSA9IF93KHJlbGhkci0+c2hfZW50c2l6ZSk7CisJdW5zaWduZWQgY29uc3QgbnJlbCA9IF93KHJlbGhkci0+c2hfc2l6ZSkgLyByZWxfZW50c2l6ZTsKKwl1bnNpZ25lZCBtY291bnRzeW0gPSAwOworCXVuc2lnbmVkIHQ7CisJaW50IG9uY2UgPSAwOworCisJZ2V0X3N5bV9zdHJfYW5kX3JlbHAocmVsaGRyLCBlaGRyLCAmc3ltMCwgJnN0cjAsICZyZWxwKTsKKworCWZvciAodCA9IG5yZWw7IHQ7IC0tdCkgeworCQlpbnQgcmV0ID0gLTE7CisKKwkJaWYgKCFtY291bnRzeW0pCisJCQltY291bnRzeW0gPSBnZXRfbWNvdW50c3ltKHN5bTAsIHJlbHAsIHN0cjApOworCisJCWlmIChtY291bnRzeW0gPT0gRWxmX3Jfc3ltKHJlbHApICYmICFpc19mYWtlX21jb3VudChyZWxwKSkgeworCQkJaWYgKG1ha2Vfbm9wKQorCQkJCXJldCA9IG1ha2Vfbm9wKCh2b2lkICopZWhkciwgc2hkci0+c2hfb2Zmc2V0ICsgcmVscC0+cl9vZmZzZXQpOworCQkJaWYgKHdhcm5fb25fbm90cmFjZV9zZWN0ICYmICFvbmNlKSB7CisJCQkJcHJpbnRmKCJTZWN0aW9uICVzIGhhcyBtY291bnQgY2FsbGVycyBiZWluZyBpZ25vcmVkXG4iLAorCQkJCSAgICAgICB0eHRuYW1lKTsKKwkJCQlvbmNlID0gMTsKKwkJCQkvKiBqdXN0IHdhcm4/ICovCisJCQkJaWYgKCFtYWtlX25vcCkKKwkJCQkJcmV0dXJuOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogSWYgd2Ugc3VjY2Vzc2Z1bGx5IHJlbW92ZWQgdGhlIG1jb3VudCwgbWFyayB0aGUgcmVsb2NhdGlvbgorCQkgKiBhcyBhIG5vcCAoZG9uJ3QgZG8gYW55dGhpbmcgd2l0aCBpdCkuCisJCSAqLworCQlpZiAoIXJldCkgeworCQkJRWxmX1JlbCByZWw7CisJCQlyZWwgPSAqKEVsZl9SZWwgKilyZWxwOworCQkJRWxmX3JfaW5mbygmcmVsLCBFbGZfcl9zeW0ocmVscCksIHJlbF90eXBlX25vcCk7CisJCQl1bHNlZWsoZmRfbWFwLCAodm9pZCAqKXJlbHAgLSAodm9pZCAqKWVoZHIsIFNFRUtfU0VUKTsKKwkJCXV3cml0ZShmZF9tYXAsICZyZWwsIHNpemVvZihyZWwpKTsKKwkJfQorCQlyZWxwID0gKEVsZl9SZWwgY29uc3QgKikocmVsX2VudHNpemUgKyAodm9pZCAqKXJlbHApOworCX0KK30KKwogCiAvKgogICogRmluZCBhIHN5bWJvbCBpbiB0aGUgZ2l2ZW4gc2VjdGlvbiwgdG8gYmUgdXNlZCBhcyB0aGUgYmFzZSBmb3IgcmVsb2NhdGluZwpAQCAtMzU0LDEzICs0NDgsMTMgQEAKIAlFbGZfU2hkciBjb25zdCAqY29uc3QgdHh0aGRyID0gJnNoZHIwW3cocmVsaGRyLT5zaF9pbmZvKV07CiAJY2hhciBjb25zdCAqY29uc3QgdHh0bmFtZSA9ICZzaHN0cnRhYlt3KHR4dGhkci0+c2hfbmFtZSldOwogCi0JaWYgKDAgPT0gc3RyY21wKCJfX21jb3VudF9sb2MiLCB0eHRuYW1lKSkgeworCWlmIChzdHJjbXAoIl9fbWNvdW50X2xvYyIsIHR4dG5hbWUpID09IDApIHsKIAkJZnByaW50ZihzdGRlcnIsICJ3YXJuaW5nOiBfX21jb3VudF9sb2MgYWxyZWFkeSBleGlzdHM6ICVzXG4iLAogCQkJZm5hbWUpOwogCQlzdWNjZWVkX2ZpbGUoKTsKIAl9Ci0JaWYgKFNIVF9QUk9HQklUUyAhPSB3KHR4dGhkci0+c2hfdHlwZSkgfHwKLQkgICAgIWlzX21jb3VudGVkX3NlY3Rpb25fbmFtZSh0eHRuYW1lKSkKKwlpZiAodyh0eHRoZHItPnNoX3R5cGUpICE9IFNIVF9QUk9HQklUUyB8fAorCSAgICAhKHcodHh0aGRyLT5zaF9mbGFncykgJiBTSEZfRVhFQ0lOU1RSKSkKIAkJcmV0dXJuIE5VTEw7CiAJcmV0dXJuIHR4dG5hbWU7CiB9CkBAIC0zNzAsNyArNDY0LDcgQEAKIAkJCQkgIGNoYXIgY29uc3QgKmNvbnN0IHNoc3RydGFiLAogCQkJCSAgY2hhciBjb25zdCAqY29uc3QgZm5hbWUpCiB7Ci0JaWYgKFNIVF9SRUwgICE9IHcocmVsaGRyLT5zaF90eXBlKSAmJiBTSFRfUkVMQSAhPSB3KHJlbGhkci0+c2hfdHlwZSkpCisJaWYgKHcocmVsaGRyLT5zaF90eXBlKSAhPSBTSFRfUkVMICYmIHcocmVsaGRyLT5zaF90eXBlKSAhPSBTSFRfUkVMQSkKIAkJcmV0dXJuIE5VTEw7CiAJcmV0dXJuIF9faGFzX3JlbF9tY291bnQocmVsaGRyLCBzaGRyMCwgc2hzdHJ0YWIsIGZuYW1lKTsKIH0KQEAgLTM4Myw5ICs0NzcsMTEgQEAKIHsKIAl1bnNpZ25lZCB0b3RyZWxzeiA9IDA7CiAJRWxmX1NoZHIgY29uc3QgKnNoZHJwID0gc2hkcjA7CisJY2hhciBjb25zdCAqdHh0bmFtZTsKIAogCWZvciAoOyBuaGRyOyAtLW5oZHIsICsrc2hkcnApIHsKLQkJaWYgKGhhc19yZWxfbWNvdW50KHNoZHJwLCBzaGRyMCwgc2hzdHJ0YWIsIGZuYW1lKSkKKwkJdHh0bmFtZSA9IGhhc19yZWxfbWNvdW50KHNoZHJwLCBzaGRyMCwgc2hzdHJ0YWIsIGZuYW1lKTsKKwkJaWYgKHR4dG5hbWUgJiYgaXNfbWNvdW50ZWRfc2VjdGlvbl9uYW1lKHR4dG5hbWUpKQogCQkJdG90cmVsc3ogKz0gX3coc2hkcnAtPnNoX3NpemUpOwogCX0KIAlyZXR1cm4gdG90cmVsc3o7CkBAIC00MjEsNyArNTE3LDcgQEAKIAlmb3IgKHJlbGhkciA9IHNoZHIwLCBrID0gbmhkcjsgazsgLS1rLCArK3JlbGhkcikgewogCQljaGFyIGNvbnN0ICpjb25zdCB0eHRuYW1lID0gaGFzX3JlbF9tY291bnQocmVsaGRyLCBzaGRyMCwKIAkJCXNoc3RydGFiLCBmbmFtZSk7Ci0JCWlmICh0eHRuYW1lKSB7CisJCWlmICh0eHRuYW1lICYmIGlzX21jb3VudGVkX3NlY3Rpb25fbmFtZSh0eHRuYW1lKSkgewogCQkJdWludF90IHJlY3ZhbCA9IDA7CiAJCQl1bnNpZ25lZCBjb25zdCByZWNzeW0gPSBmaW5kX3NlY3N5bV9uZHgoCiAJCQkJdyhyZWxoZHItPnNoX2luZm8pLCB0eHRuYW1lLCAmcmVjdmFsLApAQCAtNDMyLDYgKzUyOCwxMiBAQAogCQkJbWxvY3AgPSBzaWZ0X3JlbF9tY291bnQobWxvY3AsCiAJCQkJKHZvaWQgKiltbG9jcCAtICh2b2lkICopbWxvYzAsICZtcmVscCwKIAkJCQlyZWxoZHIsIGVoZHIsIHJlY3N5bSwgcmVjdmFsLCByZWx0eXBlKTsKKwkJfSBlbHNlIGlmICh0eHRuYW1lICYmICh3YXJuX29uX25vdHJhY2Vfc2VjdCB8fCBtYWtlX25vcCkpIHsKKwkJCS8qCisJCQkgKiBUaGlzIHNlY3Rpb24gaXMgaWdub3JlZCBieSBmdHJhY2UsIGJ1dCBzdGlsbAorCQkJICogaGFzIG1jb3VudCBjYWxscy4gQ29udmVydCB0aGVtIHRvIG5vcHMgbm93LgorCQkJICovCisJCQlub3BfbWNvdW50KHJlbGhkciwgZWhkciwgdHh0bmFtZSk7CiAJCX0KIAl9CiAJaWYgKG1sb2MwICE9IG1sb2NwKSB7CmRpZmYgLS1naXQgYS9zY3JpcHRzL3JlY29yZG1jb3VudC5wbCBiL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCmluZGV4IDRiZTBkZWUuLjg1ODk2NmEgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCisrKyBiL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCkBAIC0xMzQsNiArMTM0LDcgQEAKICAgICAgIi5zY2hlZC50ZXh0IiA9PiAxLAogICAgICAiLnNwaW5sb2NrLnRleHQiID0+IDEsCiAgICAgICIuaXJxZW50cnkudGV4dCIgPT4gMSwKKyAgICAgIi5rcHJvYmVzLnRleHQiID0+IDEsCiAgICAgICIudGV4dC51bmxpa2VseSIgPT4gMSwKICk7CiAKQEAgLTIyMiw2ICsyMjMsNyBAQAogICAgICRtY291bnRfcmVnZXggPSAiXlxccyooWzAtOWEtZkEtRl0rKTouKlxcc21jb3VudChbKy1dMHhbMC05YS16QS1aXSspP1wkIjsKICAgICAkdHlwZSA9ICIucXVhZCI7CiAgICAgJGFsaWdubWVudCA9IDg7CisgICAgJG1jb3VudF9hZGp1c3QgPSAtMTsKIAogICAgICMgZm9yY2UgZmxhZ3MgZm9yIHRoaXMgYXJjaAogICAgICRsZCAuPSAiIC1tIGVsZl94ODZfNjQiOwpAQCAtMjMxLDYgKzIzMyw3IEBACiAKIH0gZWxzaWYgKCRhcmNoIGVxICJpMzg2IikgewogICAgICRhbGlnbm1lbnQgPSA0OworICAgICRtY291bnRfYWRqdXN0ID0gLTE7CiAKICAgICAjIGZvcmNlIGZsYWdzIGZvciB0aGlzIGFyY2gKICAgICAkbGQgLj0gIiAtbSBlbGZfaTM4NiI7CkBAIC0yNDAsMTIgKzI0MywxNCBAQAogCiB9IGVsc2lmICgkYXJjaCBlcSAiczM5MCIgJiYgJGJpdHMgPT0gMzIpIHsKICAgICAkbWNvdW50X3JlZ2V4ID0gIl5cXHMqKFswLTlhLWZBLUZdKyk6XFxzKlJfMzkwXzMyXFxzK19tY291bnRcJCI7CisgICAgJG1jb3VudF9hZGp1c3QgPSAtNDsKICAgICAkYWxpZ25tZW50ID0gNDsKICAgICAkbGQgLj0gIiAtbSBlbGZfczM5MCI7CiAgICAgJGNjIC49ICIgLW0zMSI7CiAKIH0gZWxzaWYgKCRhcmNoIGVxICJzMzkwIiAmJiAkYml0cyA9PSA2NCkgewogICAgICRtY291bnRfcmVnZXggPSAiXlxccyooWzAtOWEtZkEtRl0rKTpcXHMqUl8zOTBfKFBDfFBMVCkzMkRCTFxccytfbWNvdW50XFwrMHgyXCQiOworICAgICRtY291bnRfYWRqdXN0ID0gLTg7CiAgICAgJGFsaWdubWVudCA9IDg7CiAgICAgJHR5cGUgPSAiLnF1YWQiOwogICAgICRsZCAuPSAiIC1tIGVsZjY0X3MzOTAiOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvY2FwYWJpbGl0eS5jIGIvc2VjdXJpdHkvY2FwYWJpbGl0eS5jCmluZGV4IDI5ODRlYTQuLmJiYjUxMTUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2NhcGFiaWxpdHkuYworKysgYi9zZWN1cml0eS9jYXBhYmlsaXR5LmMKQEAgLTE4MSw3ICsxODEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNhcF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQorc3RhdGljIGludCBjYXBfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgZmxhZ3MpCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jIGIvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYwppbmRleCBjNmNhODY2Li5mNjZiYWY0IDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jCisrKyBiL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMKQEAgLTY5LDE4ICs2OSw2IEBACiBFWFBPUlRfU1lNQk9MX0dQTCh1c2VyX2luc3RhbnRpYXRlKTsKIAogLyoKLSAqIGRpc3Bvc2Ugb2YgdGhlIG9sZCBkYXRhIGZyb20gYW4gdXBkYXRlZCB1c2VyIGRlZmluZWQga2V5Ci0gKi8KLXN0YXRpYyB2b2lkIHVzZXJfdXBkYXRlX3JjdV9kaXNwb3NhbChzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkKLXsKLQlzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdXBheWxvYWQ7Ci0KLQl1cGF5bG9hZCA9IGNvbnRhaW5lcl9vZihyY3UsIHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkLCByY3UpOwotCi0Ja2ZyZWUodXBheWxvYWQpOwotfQotCi0vKgogICogdXBkYXRlIGEgdXNlciBkZWZpbmVkIGtleQogICogLSB0aGUga2V5J3Mgc2VtYXBob3JlIGlzIHdyaXRlLWxvY2tlZAogICovCkBAIC0xMTQsNyArMTAyLDcgQEAKIAkJa2V5LT5leHBpcnkgPSAwOwogCX0KIAotCWNhbGxfcmN1KCZ6YXAtPnJjdSwgdXNlcl91cGRhdGVfcmN1X2Rpc3Bvc2FsKTsKKwlrZnJlZV9yY3UoemFwLCByY3UpOwogCiBlcnJvcjoKIAlyZXR1cm4gcmV0OwpAQCAtMTQ1LDcgKzEzMyw3IEBACiAKIAlpZiAodXBheWxvYWQpIHsKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKGtleS0+cGF5bG9hZC5kYXRhLCBOVUxMKTsKLQkJY2FsbF9yY3UoJnVwYXlsb2FkLT5yY3UsIHVzZXJfdXBkYXRlX3JjdV9kaXNwb3NhbCk7CisJCWtmcmVlX3JjdSh1cGF5bG9hZCwgcmN1KTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jCmluZGV4IDEwMTE0MjMuLjRiYTZkNGMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmMKKysrIGIvc2VjdXJpdHkvc2VjdXJpdHkuYwpAQCAtNTE4LDE2ICs1MTgsMTQgQEAKIHsKIAlpZiAodW5saWtlbHkoSVNfUFJJVkFURShpbm9kZSkpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gc2VjdXJpdHlfb3BzLT5pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTsKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCAwKTsKIH0KIAogaW50IHNlY3VyaXR5X2lub2RlX2V4ZWNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSkKIAkJcmV0dXJuIDA7Ci0JaWYgKGZsYWdzKQotCQlyZXR1cm4gLUVDSElMRDsKLQlyZXR1cm4gc2VjdXJpdHlfb3BzLT5pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBNQVlfRVhFQyk7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+aW5vZGVfcGVybWlzc2lvbihpbm9kZSwgTUFZX0VYRUMsIGZsYWdzKTsKIH0KIAogaW50IHNlY3VyaXR5X2lub2RlX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jIGIvc2VjdXJpdHkvc2VsaW51eC9hdmMuYwppbmRleCA5ZGE2NDIwLi4zZDI3MTVmIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvYXZjLmMKQEAgLTM4LDExICszOCw3IEBACiAjZGVmaW5lIEFWQ19DQUNIRV9SRUNMQUlNCQkxNgogCiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQVZDX1NUQVRTCi0jZGVmaW5lIGF2Y19jYWNoZV9zdGF0c19pbmNyKGZpZWxkKQkJCQlcCi1kbyB7CQkJCQkJCQlcCi0JcGVyX2NwdShhdmNfY2FjaGVfc3RhdHMsIGdldF9jcHUoKSkuZmllbGQrKzsJCVwKLQlwdXRfY3B1KCk7CQkJCQkJXAotfSB3aGlsZSAoMCkKKyNkZWZpbmUgYXZjX2NhY2hlX3N0YXRzX2luY3IoZmllbGQpCXRoaXNfY3B1X2luYyhhdmNfY2FjaGVfc3RhdHMuZmllbGQpCiAjZWxzZQogI2RlZmluZSBhdmNfY2FjaGVfc3RhdHNfaW5jcihmaWVsZCkJZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKQEAgLTM0NywxMSArMzQzLDEwIEBACiAJbm9kZSA9IGF2Y19zZWFyY2hfbm9kZShzc2lkLCB0c2lkLCB0Y2xhc3MpOwogCiAJaWYgKG5vZGUpCi0JCWF2Y19jYWNoZV9zdGF0c19pbmNyKGhpdHMpOwotCWVsc2UKLQkJYXZjX2NhY2hlX3N0YXRzX2luY3IobWlzc2VzKTsKKwkJcmV0dXJuIG5vZGU7CiAKLQlyZXR1cm4gbm9kZTsKKwlhdmNfY2FjaGVfc3RhdHNfaW5jcihtaXNzZXMpOworCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgaW50IGF2Y19sYXRlc3Rfbm90aWZfdXBkYXRlKGludCBzZXFubywgaW50IGlzX2luc2VydCkKQEAgLTQ3MSw2ICs0NjYsNyBAQAogICogQGF2ZDogYWNjZXNzIHZlY3RvciBkZWNpc2lvbnMKICAqIEByZXN1bHQ6IHJlc3VsdCBmcm9tIGF2Y19oYXNfcGVybV9ub2F1ZGl0CiAgKiBAYTogIGF1eGlsaWFyeSBhdWRpdCBkYXRhCisgKiBAZmxhZ3M6IFZGUyB3YWxrIGZsYWdzCiAgKgogICogQXVkaXQgdGhlIGdyYW50aW5nIG9yIGRlbmlhbCBvZiBwZXJtaXNzaW9ucyBpbiBhY2NvcmRhbmNlCiAgKiB3aXRoIHRoZSBwb2xpY3kuICBUaGlzIGZ1bmN0aW9uIGlzIHR5cGljYWxseSBjYWxsZWQgYnkKQEAgLTQ4MSw5ICs0NzcsMTAgQEAKICAqIGJlIHBlcmZvcm1lZCB1bmRlciBhIGxvY2ssIHRvIGFsbG93IHRoZSBsb2NrIHRvIGJlIHJlbGVhc2VkCiAgKiBiZWZvcmUgY2FsbGluZyB0aGUgYXVkaXRpbmcgY29kZS4KICAqLwotdm9pZCBhdmNfYXVkaXQodTMyIHNzaWQsIHUzMiB0c2lkLAoraW50IGF2Y19hdWRpdCh1MzIgc3NpZCwgdTMyIHRzaWQsCiAJICAgICAgIHUxNiB0Y2xhc3MsIHUzMiByZXF1ZXN0ZWQsCi0JICAgICAgIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkLCBpbnQgcmVzdWx0LCBzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgKmEpCisJICAgICAgIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkLCBpbnQgcmVzdWx0LCBzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgKmEsCisJICAgICAgIHVuc2lnbmVkIGZsYWdzKQogewogCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBzdGFja19kYXRhOwogCXUzMiBkZW5pZWQsIGF1ZGl0ZWQ7CkBAIC01MTUsMTEgKzUxMiwyNCBAQAogCWVsc2UKIAkJYXVkaXRlZCA9IHJlcXVlc3RlZCAmIGF2ZC0+YXVkaXRhbGxvdzsKIAlpZiAoIWF1ZGl0ZWQpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CisKIAlpZiAoIWEpIHsKIAkJYSA9ICZzdGFja19kYXRhOwogCQlDT01NT05fQVVESVRfREFUQV9JTklUKGEsIE5PTkUpOwogCX0KKworCS8qCisJICogV2hlbiBpbiBhIFJDVSB3YWxrIGRvIHRoZSBhdWRpdCBvbiB0aGUgUkNVIHJldHJ5LiAgVGhpcyBpcyBiZWNhdXNlCisJICogdGhlIGNvbGxlY3Rpb24gb2YgdGhlIGRuYW1lIGluIGFuIGlub2RlIGF1ZGl0IG1lc3NhZ2UgaXMgbm90IFJDVQorCSAqIHNhZmUuICBOb3RlIHRoaXMgbWF5IGRyb3Agc29tZSBhdWRpdHMgd2hlbiB0aGUgc2l0dWF0aW9uIGNoYW5nZXMKKwkgKiBkdXJpbmcgcmV0cnkuIEhvd2V2ZXIgdGhpcyBpcyBsb2dpY2FsbHkganVzdCBhcyBpZiB0aGUgb3BlcmF0aW9uCisJICogaGFwcGVuZWQgYSBsaXR0bGUgbGF0ZXIuCisJICovCisJaWYgKChhLT50eXBlID09IExTTV9BVURJVF9EQVRBX0ZTKSAmJgorCSAgICAoZmxhZ3MgJiBJUEVSTV9GTEFHX1JDVSkpCisJCXJldHVybiAtRUNISUxEOworCiAJYS0+c2VsaW51eF9hdWRpdF9kYXRhLnRjbGFzcyA9IHRjbGFzczsKIAlhLT5zZWxpbnV4X2F1ZGl0X2RhdGEucmVxdWVzdGVkID0gcmVxdWVzdGVkOwogCWEtPnNlbGludXhfYXVkaXRfZGF0YS5zc2lkID0gc3NpZDsKQEAgLTUyOSw2ICs1MzksNyBAQAogCWEtPmxzbV9wcmVfYXVkaXQgPSBhdmNfYXVkaXRfcHJlX2NhbGxiYWNrOwogCWEtPmxzbV9wb3N0X2F1ZGl0ID0gYXZjX2F1ZGl0X3Bvc3RfY2FsbGJhY2s7CiAJY29tbW9uX2xzbV9hdWRpdChhKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC03NTMsNyArNzY0LDcgQEAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKIAlub2RlID0gYXZjX2xvb2t1cChzc2lkLCB0c2lkLCB0Y2xhc3MpOwotCWlmICghbm9kZSkgeworCWlmICh1bmxpa2VseSghbm9kZSkpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkJaWYgKGluX2F2ZCkKQEAgLTc5Myw2ICs4MDQsNyBAQAogICogQHRjbGFzczogdGFyZ2V0IHNlY3VyaXR5IGNsYXNzCiAgKiBAcmVxdWVzdGVkOiByZXF1ZXN0ZWQgcGVybWlzc2lvbnMsIGludGVycHJldGVkIGJhc2VkIG9uIEB0Y2xhc3MKICAqIEBhdWRpdGRhdGE6IGF1eGlsaWFyeSBhdWRpdCBkYXRhCisgKiBAZmxhZ3M6IFZGUyB3YWxrIGZsYWdzCiAgKgogICogQ2hlY2sgdGhlIEFWQyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgQHJlcXVlc3RlZCBwZXJtaXNzaW9ucyBhcmUgZ3JhbnRlZAogICogZm9yIHRoZSBTSUQgcGFpciAoQHNzaWQsIEB0c2lkKSwgaW50ZXJwcmV0aW5nIHRoZSBwZXJtaXNzaW9ucwpAQCAtODAyLDE0ICs4MTQsMTkgQEAKICAqIHBlcm1pc3Npb25zIGFyZSBncmFudGVkLCAtJUVBQ0NFUyBpZiBhbnkgcGVybWlzc2lvbnMgYXJlIGRlbmllZCwgb3IKICAqIGFub3RoZXIgLWVycm5vIHVwb24gb3RoZXIgZXJyb3JzLgogICovCi1pbnQgYXZjX2hhc19wZXJtKHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywKLQkJIHUzMiByZXF1ZXN0ZWQsIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYXVkaXRkYXRhKQoraW50IGF2Y19oYXNfcGVybV9mbGFncyh1MzIgc3NpZCwgdTMyIHRzaWQsIHUxNiB0Y2xhc3MsCisJCSAgICAgICB1MzIgcmVxdWVzdGVkLCBzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgKmF1ZGl0ZGF0YSwKKwkJICAgICAgIHVuc2lnbmVkIGZsYWdzKQogewogCXN0cnVjdCBhdl9kZWNpc2lvbiBhdmQ7Ci0JaW50IHJjOworCWludCByYywgcmMyOwogCiAJcmMgPSBhdmNfaGFzX3Blcm1fbm9hdWRpdChzc2lkLCB0c2lkLCB0Y2xhc3MsIHJlcXVlc3RlZCwgMCwgJmF2ZCk7Ci0JYXZjX2F1ZGl0KHNzaWQsIHRzaWQsIHRjbGFzcywgcmVxdWVzdGVkLCAmYXZkLCByYywgYXVkaXRkYXRhKTsKKworCXJjMiA9IGF2Y19hdWRpdChzc2lkLCB0c2lkLCB0Y2xhc3MsIHJlcXVlc3RlZCwgJmF2ZCwgcmMsIGF1ZGl0ZGF0YSwKKwkJCWZsYWdzKTsKKwlpZiAocmMyKQorCQlyZXR1cm4gcmMyOwogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IGY5YzM3NjQuLjhmYjI0ODggMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTE0NDYsOCArMTQ0NiwxMSBAQAogCX0KIAogCXJjID0gYXZjX2hhc19wZXJtX25vYXVkaXQoc2lkLCBzaWQsIHNjbGFzcywgYXYsIDAsICZhdmQpOwotCWlmIChhdWRpdCA9PSBTRUNVUklUWV9DQVBfQVVESVQpCi0JCWF2Y19hdWRpdChzaWQsIHNpZCwgc2NsYXNzLCBhdiwgJmF2ZCwgcmMsICZhZCk7CisJaWYgKGF1ZGl0ID09IFNFQ1VSSVRZX0NBUF9BVURJVCkgeworCQlpbnQgcmMyID0gYXZjX2F1ZGl0KHNpZCwgc2lkLCBzY2xhc3MsIGF2LCAmYXZkLCByYywgJmFkLCAwKTsKKwkJaWYgKHJjMikKKwkJCXJldHVybiByYzI7CisJfQogCXJldHVybiByYzsKIH0KIApAQCAtMTQ2Nyw3ICsxNDcwLDggQEAKIHN0YXRpYyBpbnQgaW5vZGVfaGFzX3Blcm0oY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsCiAJCQkgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkgIHUzMiBwZXJtcywKLQkJCSAgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphZHApCisJCQkgIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYWRwLAorCQkJICB1bnNpZ25lZCBmbGFncykKIHsKIAlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICppc2VjOwogCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZDsKQEAgLTE0ODcsNyArMTQ5MSw3IEBACiAJCWFkLnUuZnMuaW5vZGUgPSBpbm9kZTsKIAl9CiAKLQlyZXR1cm4gYXZjX2hhc19wZXJtKHNpZCwgaXNlYy0+c2lkLCBpc2VjLT5zY2xhc3MsIHBlcm1zLCBhZHApOworCXJldHVybiBhdmNfaGFzX3Blcm1fZmxhZ3Moc2lkLCBpc2VjLT5zaWQsIGlzZWMtPnNjbGFzcywgcGVybXMsIGFkcCwgZmxhZ3MpOwogfQogCiAvKiBTYW1lIGFzIGlub2RlX2hhc19wZXJtLCBidXQgcGFzcyBleHBsaWNpdCBhdWRpdCBkYXRhIGNvbnRhaW5pbmcKQEAgLTE1MDQsNyArMTUwOCw3IEBACiAJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmYWQsIEZTKTsKIAlhZC51LmZzLnBhdGgubW50ID0gbW50OwogCWFkLnUuZnMucGF0aC5kZW50cnkgPSBkZW50cnk7Ci0JcmV0dXJuIGlub2RlX2hhc19wZXJtKGNyZWQsIGlub2RlLCBhdiwgJmFkKTsKKwlyZXR1cm4gaW5vZGVfaGFzX3Blcm0oY3JlZCwgaW5vZGUsIGF2LCAmYWQsIDApOwogfQogCiAvKiBDaGVjayB3aGV0aGVyIGEgdGFzayBjYW4gdXNlIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yIHRvCkBAIC0xNTQwLDcgKzE1NDQsNyBAQAogCS8qIGF2IGlzIHplcm8gaWYgb25seSBjaGVja2luZyBhY2Nlc3MgdG8gdGhlIGRlc2NyaXB0b3IuICovCiAJcmMgPSAwOwogCWlmIChhdikKLQkJcmMgPSBpbm9kZV9oYXNfcGVybShjcmVkLCBpbm9kZSwgYXYsICZhZCk7CisJCXJjID0gaW5vZGVfaGFzX3Blcm0oY3JlZCwgaW5vZGUsIGF2LCAmYWQsIDApOwogCiBvdXQ6CiAJcmV0dXJuIHJjOwpAQCAtMTU3NCw3ICsxNTc4LDggQEAKIAkJcmV0dXJuIHJjOwogCiAJaWYgKCFuZXdzaWQgfHwgIShzYnNlYy0+ZmxhZ3MgJiBTRV9TQkxBQkVMU1VQUCkpIHsKLQkJcmMgPSBzZWN1cml0eV90cmFuc2l0aW9uX3NpZChzaWQsIGRzZWMtPnNpZCwgdGNsYXNzLCBOVUxMLCAmbmV3c2lkKTsKKwkJcmMgPSBzZWN1cml0eV90cmFuc2l0aW9uX3NpZChzaWQsIGRzZWMtPnNpZCwgdGNsYXNzLAorCQkJCQkgICAgICZkZW50cnktPmRfbmFtZSwgJm5ld3NpZCk7CiAJCWlmIChyYykKIAkJCXJldHVybiByYzsKIAl9CkBAIC0yMTAzLDcgKzIxMDgsNyBAQAogCQkJZmlsZSA9IGZpbGVfcHJpdi0+ZmlsZTsKIAkJCWlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAkJCWlmIChpbm9kZV9oYXNfcGVybShjcmVkLCBpbm9kZSwKLQkJCQkJICAgRklMRV9fUkVBRCB8IEZJTEVfX1dSSVRFLCBOVUxMKSkgeworCQkJCQkgICBGSUxFX19SRUFEIHwgRklMRV9fV1JJVEUsIE5VTEwsIDApKSB7CiAJCQkJZHJvcF90dHkgPSAxOwogCQkJfQogCQl9CkBAIC0yNjM1LDcgKzI2NDAsNyBAQAogCXJldHVybiBkZW50cnlfaGFzX3Blcm0oY3JlZCwgTlVMTCwgZGVudHJ5LCBGSUxFX19SRUFEKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCitzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgZmxhZ3MpCiB7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKIAlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7CkBAIC0yNjU3LDcgKzI2NjIsNyBAQAogCiAJcGVybXMgPSBmaWxlX21hc2tfdG9fYXYoaW5vZGUtPmlfbW9kZSwgbWFzayk7CiAKLQlyZXR1cm4gaW5vZGVfaGFzX3Blcm0oY3JlZCwgaW5vZGUsIHBlcm1zLCAmYWQpOworCXJldHVybiBpbm9kZV9oYXNfcGVybShjcmVkLCBpbm9kZSwgcGVybXMsICZhZCwgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IHNlbGludXhfaW5vZGVfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqaWF0dHIpCkBAIC0zMjA1LDcgKzMyMTAsNyBAQAogCSAqIG5ldyBpbm9kZSBsYWJlbCBvciBuZXcgcG9saWN5LgogCSAqIFRoaXMgY2hlY2sgaXMgbm90IHJlZHVuZGFudCAtIGRvIG5vdCByZW1vdmUuCiAJICovCi0JcmV0dXJuIGlub2RlX2hhc19wZXJtKGNyZWQsIGlub2RlLCBvcGVuX2ZpbGVfdG9fYXYoZmlsZSksIE5VTEwpOworCXJldHVybiBpbm9kZV9oYXNfcGVybShjcmVkLCBpbm9kZSwgb3Blbl9maWxlX3RvX2F2KGZpbGUpLCBOVUxMLCAwKTsKIH0KIAogLyogdGFzayBzZWN1cml0eSBvcGVyYXRpb25zICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmgKaW5kZXggNTYxNTA4MS4uNDdmZGE5NiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaApAQCAtNDEsNyArNDEsNiBAQAogICovCiBzdHJ1Y3QgYXZjX2NhY2hlX3N0YXRzIHsKIAl1bnNpZ25lZCBpbnQgbG9va3VwczsKLQl1bnNpZ25lZCBpbnQgaGl0czsKIAl1bnNpZ25lZCBpbnQgbWlzc2VzOwogCXVuc2lnbmVkIGludCBhbGxvY2F0aW9uczsKIAl1bnNpZ25lZCBpbnQgcmVjbGFpbXM7CkBAIC01NCwxMSArNTMsMTEgQEAKIAogdm9pZCBfX2luaXQgYXZjX2luaXQodm9pZCk7CiAKLXZvaWQgYXZjX2F1ZGl0KHUzMiBzc2lkLCB1MzIgdHNpZCwKK2ludCBhdmNfYXVkaXQodTMyIHNzaWQsIHUzMiB0c2lkLAogCSAgICAgICB1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkLAogCSAgICAgICBzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCwKIAkgICAgICAgaW50IHJlc3VsdCwKLQkgICAgICAgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphKTsKKwkgICAgICBzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgKmEsIHVuc2lnbmVkIGZsYWdzKTsKIAogI2RlZmluZSBBVkNfU1RSSUNUIDEgLyogSWdub3JlIHBlcm1pc3NpdmUgbW9kZS4gKi8KIGludCBhdmNfaGFzX3Blcm1fbm9hdWRpdCh1MzIgc3NpZCwgdTMyIHRzaWQsCkBAIC02Niw5ICs2NSwxNyBAQAogCQkJIHVuc2lnbmVkIGZsYWdzLAogCQkJIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkKTsKIAotaW50IGF2Y19oYXNfcGVybSh1MzIgc3NpZCwgdTMyIHRzaWQsCi0JCSB1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkLAotCQkgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphdWRpdGRhdGEpOworaW50IGF2Y19oYXNfcGVybV9mbGFncyh1MzIgc3NpZCwgdTMyIHRzaWQsCisJCSAgICAgICB1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkLAorCQkgICAgICAgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphdWRpdGRhdGEsCisJCSAgICAgICB1bnNpZ25lZCk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGF2Y19oYXNfcGVybSh1MzIgc3NpZCwgdTMyIHRzaWQsCisJCQkgICAgICAgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCwKKwkJCSAgICAgICBzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgKmF1ZGl0ZGF0YSkKK3sKKwlyZXR1cm4gYXZjX2hhc19wZXJtX2ZsYWdzKHNzaWQsIHRzaWQsIHRjbGFzcywgcmVxdWVzdGVkLCBhdWRpdGRhdGEsIDApOworfQogCiB1MzIgYXZjX3BvbGljeV9zZXFubyh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9uZXRpZi5jIGIvc2VjdXJpdHkvc2VsaW51eC9uZXRpZi5jCmluZGV4IGQ2MDk1ZDYuLjU4Y2M0ODEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvbmV0aWYuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L25ldGlmLmMKQEAgLTEwNCwyMiArMTA0LDYgQEAKIH0KIAogLyoqCi0gKiBzZWxfbmV0aWZfZnJlZSAtIEZyZWVzIGFuIGludGVyZmFjZSBlbnRyeQotICogQHA6IHRoZSBlbnRyeSdzIFJDVSBmaWVsZAotICoKLSAqIERlc2NyaXB0aW9uOgotICogVGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSB1c2VkIGFzIGEgY2FsbGJhY2sgdG8gdGhlIGNhbGxfcmN1KCkKLSAqIGZ1bmN0aW9uIHNvIHRoYXQgbWVtb3J5IGFsbG9jYXRlZCB0byBhIGhhc2ggdGFibGUgaW50ZXJmYWNlIGVudHJ5IGNhbiBiZQotICogcmVsZWFzZWQgc2FmZWx5LgotICoKLSAqLwotc3RhdGljIHZvaWQgc2VsX25ldGlmX2ZyZWUoc3RydWN0IHJjdV9oZWFkICpwKQotewotCXN0cnVjdCBzZWxfbmV0aWYgKm5ldGlmID0gY29udGFpbmVyX29mKHAsIHN0cnVjdCBzZWxfbmV0aWYsIHJjdV9oZWFkKTsKLQlrZnJlZShuZXRpZik7Ci19Ci0KLS8qKgogICogc2VsX25ldGlmX2Rlc3Ryb3kgLSBSZW1vdmUgYW4gaW50ZXJmYWNlIHJlY29yZCBmcm9tIHRoZSB0YWJsZQogICogQG5ldGlmOiB0aGUgZXhpc3RpbmcgaW50ZXJmYWNlIHJlY29yZAogICoKQEAgLTEzMSw3ICsxMTUsNyBAQAogewogCWxpc3RfZGVsX3JjdSgmbmV0aWYtPmxpc3QpOwogCXNlbF9uZXRpZl90b3RhbC0tOwotCWNhbGxfcmN1KCZuZXRpZi0+cmN1X2hlYWQsIHNlbF9uZXRpZl9mcmVlKTsKKwlrZnJlZV9yY3UobmV0aWYsIHJjdV9oZWFkKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYwppbmRleCBlYTM5Y2I3Li5jMGUxYTBmIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKQEAgLTEzODAsMTAgKzEzODAsMTQgQEAKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCiAJCXNlcV9wcmludGYoc2VxLCAibG9va3VwcyBoaXRzIG1pc3NlcyBhbGxvY2F0aW9ucyByZWNsYWltcyAiCiAJCQkgICAiZnJlZXNcbiIpOwotCWVsc2UKLQkJc2VxX3ByaW50ZihzZXEsICIldSAldSAldSAldSAldSAldVxuIiwgc3QtPmxvb2t1cHMsCi0JCQkgICBzdC0+aGl0cywgc3QtPm1pc3Nlcywgc3QtPmFsbG9jYXRpb25zLAorCWVsc2UgeworCQl1bnNpZ25lZCBpbnQgbG9va3VwcyA9IHN0LT5sb29rdXBzOworCQl1bnNpZ25lZCBpbnQgbWlzc2VzID0gc3QtPm1pc3NlczsKKwkJdW5zaWduZWQgaW50IGhpdHMgPSBsb29rdXBzIC0gbWlzc2VzOworCQlzZXFfcHJpbnRmKHNlcSwgIiV1ICV1ICV1ICV1ICV1ICV1XG4iLCBsb29rdXBzLAorCQkJICAgaGl0cywgbWlzc2VzLCBzdC0+YWxsb2NhdGlvbnMsCiAJCQkgICBzdC0+cmVjbGFpbXMsIHN0LT5mcmVlcyk7CisJfQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMKaW5kZXggZTdiODUwYS4uNzEwMjQ1NyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYwpAQCAtNTAyLDcgKzUwMiw3IEBACiAJCWdvdG8gb3V0OwogCiAJcmMgPSBmbGV4X2FycmF5X3ByZWFsbG9jKHAtPnR5cGVfdmFsX3RvX3N0cnVjdF9hcnJheSwgMCwKLQkJCQkgcC0+cF90eXBlcy5ucHJpbSAtIDEsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKKwkJCQkgcC0+cF90eXBlcy5ucHJpbSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwogCWlmIChyYykKIAkJZ290byBvdXQ7CiAKQEAgLTUxOSw3ICs1MTksNyBAQAogCQkJZ290byBvdXQ7CiAKIAkJcmMgPSBmbGV4X2FycmF5X3ByZWFsbG9jKHAtPnN5bV92YWxfdG9fbmFtZVtpXSwKLQkJCQkJIDAsIHAtPnN5bXRhYltpXS5ucHJpbSAtIDEsCisJCQkJCSAwLCBwLT5zeW10YWJbaV0ubnByaW0sCiAJCQkJCSBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CiAJCWlmIChyYykKIAkJCWdvdG8gb3V0OwpAQCAtMTgxOSw4ICsxODE5LDYgQEAKIAkJZ290byBvdXQ7CiAJbmVsID0gbGUzMl90b19jcHUoYnVmWzBdKTsKIAotCXByaW50ayhLRVJOX0VSUiAiJXM6IG5lbD0lZFxuIiwgX19mdW5jX18sIG5lbCk7Ci0KIAlsYXN0ID0gcC0+ZmlsZW5hbWVfdHJhbnM7CiAJd2hpbGUgKGxhc3QgJiYgbGFzdC0+bmV4dCkKIAkJbGFzdCA9IGxhc3QtPm5leHQ7CkBAIC0xODU3LDggKzE4NTUsNiBAQAogCQkJZ290byBvdXQ7CiAJCW5hbWVbbGVuXSA9IDA7CiAKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZnQ9JXAgZnQtPm5hbWU9JXAgZnQtPm5hbWU9JXNcbiIsIF9fZnVuY19fLCBmdCwgZnQtPm5hbWUsIGZ0LT5uYW1lKTsKLQogCQlyYyA9IG5leHRfZW50cnkoYnVmLCBmcCwgc2l6ZW9mKHUzMikgKiA0KTsKIAkJaWYgKHJjKQogCQkJZ290byBvdXQ7CkBAIC0yMzc1LDcgKzIzNzEsNyBAQAogCQlnb3RvIGJhZDsKIAogCS8qIHByZWFsbG9jYXRlIHNvIHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIHB1dCBldmVyIGZhaWxpbmcgKi8KLQlyYyA9IGZsZXhfYXJyYXlfcHJlYWxsb2MocC0+dHlwZV9hdHRyX21hcF9hcnJheSwgMCwgcC0+cF90eXBlcy5ucHJpbSAtIDEsCisJcmMgPSBmbGV4X2FycmF5X3ByZWFsbG9jKHAtPnR5cGVfYXR0cl9tYXBfYXJyYXksIDAsIHAtPnBfdHlwZXMubnByaW0sCiAJCQkJIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKIAlpZiAocmMpCiAJCWdvdG8gYmFkOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwppbmRleCBjNmY4ZmNhLi40MDBhNWQ1IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYworKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwpAQCAtNjg2LDcgKzY4Niw3IEBACiAgKgogICogUmV0dXJucyAwIGlmIGFjY2VzcyBpcyBwZXJtaXR0ZWQsIC1FQUNDRVMgb3RoZXJ3aXNlCiAgKi8KLXN0YXRpYyBpbnQgc21hY2tfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKK3N0YXRpYyBpbnQgc21hY2tfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgZmxhZ3MpCiB7CiAJc3RydWN0IHNta19hdWRpdF9pbmZvIGFkOwogCkBAIC02OTYsNiArNjk2LDEwIEBACiAJICovCiAJaWYgKG1hc2sgPT0gMCkKIAkJcmV0dXJuIDA7CisKKwkvKiBNYXkgYmUgZHJvcHBhYmxlIGFmdGVyIGF1ZGl0ICovCisJaWYgKGZsYWdzICYgSVBFUk1fRkxBR19SQ1UpCisJCXJldHVybiAtRUNISUxEOwogCXNta19hZF9pbml0KCZhZCwgX19mdW5jX18sIExTTV9BVURJVF9EQVRBX0ZTKTsKIAlzbWtfYWRfc2V0ZmllbGRfdV9mc19pbm9kZSgmYWQsIGlub2RlKTsKIAlyZXR1cm4gc21rX2N1cmFjYyhzbWtfb2ZfaW5vZGUoaW5vZGUpLCBtYXNrLCAmYWQpOwpkaWZmIC0tZ2l0IGEvc291bmQvYW9hL2NvZGVjcy90YXMuYyBiL3NvdW5kL2FvYS9jb2RlY3MvdGFzLmMKaW5kZXggNTg4MDRjNy4uZmQyMTg4YyAxMDA2NDQKLS0tIGEvc291bmQvYW9hL2NvZGVjcy90YXMuYworKysgYi9zb3VuZC9hb2EvY29kZWNzL3Rhcy5jCkBAIC0xNzAsNyArMTcwLDcgQEAKIAkvKiBhbmFseXNpbmcgdGhlIHZvbHVtZSBhbmQgbWl4ZXIgdGFibGVzIHNob3dzCiAJICogdGhhdCB0aGV5IGFyZSBzaW1pbGFyIGVub3VnaCB3aGVuIHdlIHNoaWZ0CiAJICogdGhlIG1peGVyIHRhYmxlIGRvd24gYnkgNCBiaXRzLiBUaGUgZXJyb3IKLQkgKiBpcyBtaW51c2N1bGUsIGluIGp1c3Qgb25lIGl0ZW0gdGhlIGVycm9yCisJICogaXMgbWluaXNjdWxlLCBpbiBqdXN0IG9uZSBpdGVtIHRoZSBlcnJvcgogCSAqIGlzIDEsIGF0IGEgdmFsdWUgb2YgMHgwN2YxN2IgKG1peGVyIHRhYmxlCiAJICogdmFsdWUgaXMgMHgwN2YxN2EpICovCiAJdG1wID0gdGFzX2dhaW50YWJsZVtsZWZ0XTsKZGlmZiAtLWdpdCBhL3NvdW5kL2ZpcmV3aXJlL2FtZHRwLmMgYi9zb3VuZC9maXJld2lyZS9hbWR0cC5jCmluZGV4IGIxODE0MGYuLjg3NjU3ZGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2ZpcmV3aXJlL2FtZHRwLmMKKysrIGIvc291bmQvZmlyZXdpcmUvYW1kdHAuYwpAQCAtMzk2LDYgKzM5Niw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgcGFja2V0czsgKytpKQogCQlxdWV1ZV9vdXRfcGFja2V0KHMsICsrY3ljbGUpOworCWZ3X2lzb19jb250ZXh0X3F1ZXVlX2ZsdXNoKHMtPmNvbnRleHQpOwogfQogCiBzdGF0aWMgaW50IHF1ZXVlX2luaXRpYWxfc2tpcF9wYWNrZXRzKHN0cnVjdCBhbWR0cF9vdXRfc3RyZWFtICpzKQpkaWZmIC0tZ2l0IGEvc291bmQvZmlyZXdpcmUvY21wLmMgYi9zb3VuZC9maXJld2lyZS9jbXAuYwppbmRleCA0YTM3ZjNhLi4xNGNhY2JjIDEwMDY0NAotLS0gYS9zb3VuZC9maXJld2lyZS9jbXAuYworKysgYi9zb3VuZC9maXJld2lyZS9jbXAuYwpAQCAtNDksMTAgKzQ5LDkgQEAKIAkJICAgICAgZW51bSBidXNfcmVzZXRfaGFuZGxpbmcgYnVzX3Jlc2V0X2hhbmRsaW5nKQogewogCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSA9IGZ3X3BhcmVudF9kZXZpY2UoYy0+cmVzb3VyY2VzLnVuaXQpOwotCV9fYmUzMiAqYnVmZmVyID0gYy0+cmVzb3VyY2VzLmJ1ZmZlcjsKIAlpbnQgZ2VuZXJhdGlvbiA9IGMtPnJlc291cmNlcy5nZW5lcmF0aW9uOwogCWludCByY29kZSwgZXJyb3JzID0gMDsKLQlfX2JlMzIgb2xkX2FyZzsKKwlfX2JlMzIgb2xkX2FyZywgYnVmZmVyWzJdOwogCWludCBlcnI7CiAKIAlidWZmZXJbMF0gPSBjLT5sYXN0X3Bjcl92YWx1ZTsKZGlmZiAtLWdpdCBhL3NvdW5kL2ZpcmV3aXJlL2lzby1yZXNvdXJjZXMuYyBiL3NvdW5kL2ZpcmV3aXJlL2lzby1yZXNvdXJjZXMuYwppbmRleCA3NzVkYmQ1Li5iYjljMGMxIDEwMDY0NAotLS0gYS9zb3VuZC9maXJld2lyZS9pc28tcmVzb3VyY2VzLmMKKysrIGIvc291bmQvZmlyZXdpcmUvaXNvLXJlc291cmNlcy5jCkBAIC0xMSw3ICsxMSw2IEBACiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlICJpc28tcmVzb3VyY2VzLmgiCiAKQEAgLTI1LDEwICsyNCw2IEBACiAgKi8KIGludCBmd19pc29fcmVzb3VyY2VzX2luaXQoc3RydWN0IGZ3X2lzb19yZXNvdXJjZXMgKnIsIHN0cnVjdCBmd191bml0ICp1bml0KQogewotCXItPmJ1ZmZlciA9IGttYWxsb2MoMiAqIDQsIEdGUF9LRVJORUwpOwotCWlmICghci0+YnVmZmVyKQotCQlyZXR1cm4gLUVOT01FTTsKLQogCXItPmNoYW5uZWxzX21hc2sgPSB+MHVMTDsKIAlyLT51bml0ID0gZndfdW5pdF9nZXQodW5pdCk7CiAJbXV0ZXhfaW5pdCgmci0+bXV0ZXgpOwpAQCAtNDQsNyArMzksNiBAQAogdm9pZCBmd19pc29fcmVzb3VyY2VzX2Rlc3Ryb3koc3RydWN0IGZ3X2lzb19yZXNvdXJjZXMgKnIpCiB7CiAJV0FSTl9PTihyLT5hbGxvY2F0ZWQpOwotCWtmcmVlKHItPmJ1ZmZlcik7CiAJbXV0ZXhfZGVzdHJveSgmci0+bXV0ZXgpOwogCWZ3X3VuaXRfcHV0KHItPnVuaXQpOwogfQpAQCAtMTMxLDcgKzEyNSw3IEBACiAKIAliYW5kd2lkdGggPSByLT5iYW5kd2lkdGggKyByLT5iYW5kd2lkdGhfb3ZlcmhlYWQ7CiAJZndfaXNvX3Jlc291cmNlX21hbmFnZShjYXJkLCByLT5nZW5lcmF0aW9uLCByLT5jaGFubmVsc19tYXNrLAotCQkJICAgICAgICZjaGFubmVsLCAmYmFuZHdpZHRoLCB0cnVlLCByLT5idWZmZXIpOworCQkJICAgICAgICZjaGFubmVsLCAmYmFuZHdpZHRoLCB0cnVlKTsKIAlpZiAoY2hhbm5lbCA9PSAtRUFHQUlOKSB7CiAJCW11dGV4X3VubG9jaygmci0+bXV0ZXgpOwogCQlnb3RvIHJldHJ5X2FmdGVyX2J1c19yZXNldDsKQEAgLTE4NCw3ICsxNzgsNyBAQAogCWJhbmR3aWR0aCA9IHItPmJhbmR3aWR0aCArIHItPmJhbmR3aWR0aF9vdmVyaGVhZDsKIAogCWZ3X2lzb19yZXNvdXJjZV9tYW5hZ2UoY2FyZCwgci0+Z2VuZXJhdGlvbiwgMXVMTCA8PCByLT5jaGFubmVsLAotCQkJICAgICAgICZjaGFubmVsLCAmYmFuZHdpZHRoLCB0cnVlLCByLT5idWZmZXIpOworCQkJICAgICAgICZjaGFubmVsLCAmYmFuZHdpZHRoLCB0cnVlKTsKIAkvKgogCSAqIFdoZW4gYW5vdGhlciBidXMgcmVzZXQgaGFwcGVucywgcHJldGVuZCB0aGF0IHRoZSBhbGxvY2F0aW9uCiAJICogc3VjY2VlZGVkOyB3ZSB3aWxsIHRyeSBhZ2FpbiBmb3IgdGhlIG5ldyBnZW5lcmF0aW9uIGxhdGVyLgpAQCAtMjIwLDcgKzIxNCw3IEBACiAJaWYgKHItPmFsbG9jYXRlZCkgewogCQliYW5kd2lkdGggPSByLT5iYW5kd2lkdGggKyByLT5iYW5kd2lkdGhfb3ZlcmhlYWQ7CiAJCWZ3X2lzb19yZXNvdXJjZV9tYW5hZ2UoY2FyZCwgci0+Z2VuZXJhdGlvbiwgMXVMTCA8PCByLT5jaGFubmVsLAotCQkJCSAgICAgICAmY2hhbm5lbCwgJmJhbmR3aWR0aCwgZmFsc2UsIHItPmJ1ZmZlcik7CisJCQkJICAgICAgICZjaGFubmVsLCAmYmFuZHdpZHRoLCBmYWxzZSk7CiAJCWlmIChjaGFubmVsIDwgMCkKIAkJCWRldl9lcnIoJnItPnVuaXQtPmRldmljZSwKIAkJCQkiaXNvY2hyb25vdXMgcmVzb3VyY2UgZGVhbGxvY2F0aW9uIGZhaWxlZFxuIik7CmRpZmYgLS1naXQgYS9zb3VuZC9maXJld2lyZS9pc28tcmVzb3VyY2VzLmggYi9zb3VuZC9maXJld2lyZS9pc28tcmVzb3VyY2VzLmgKaW5kZXggM2YwNzMwZTQuLjVhOWFmN2MgMTAwNjQ0Ci0tLSBhL3NvdW5kL2ZpcmV3aXJlL2lzby1yZXNvdXJjZXMuaAorKysgYi9zb3VuZC9maXJld2lyZS9pc28tcmVzb3VyY2VzLmgKQEAgLTI0LDcgKzI0LDYgQEAKIAl1bnNpZ25lZCBpbnQgYmFuZHdpZHRoX292ZXJoZWFkOwogCWludCBnZW5lcmF0aW9uOyAvKiBpbiB3aGljaCBhbGxvY2F0aW9uIGlzIHZhbGlkICovCiAJYm9vbCBhbGxvY2F0ZWQ7Ci0JX19iZTMyICpidWZmZXI7CiB9OwogCiBpbnQgZndfaXNvX3Jlc291cmNlc19pbml0KHN0cnVjdCBmd19pc29fcmVzb3VyY2VzICpyLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfcGNtLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9wY20uYwppbmRleCAzM2YwYmE1Li42MmU5NTkxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9wY20uYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9wY20uYwpAQCAtNDQsMTAgKzQ0LDEwIEBACiAJLmNoYW5uZWxzX21pbiA9IDEsCiAJLmNoYW5uZWxzX21heCA9IDIsCiAJLmJ1ZmZlcl9ieXRlc19tYXggPSAweDEwMDAwLAotCS5wZXJpb2RfYnl0ZXNfbWluID0gMHgxLAorCS5wZXJpb2RfYnl0ZXNfbWluID0gMHgyMCwKIAkucGVyaW9kX2J5dGVzX21heCA9IDB4MTAwMCwKIAkucGVyaW9kc19taW4gPSAyLAotCS5wZXJpb2RzX21heCA9IDMyLAorCS5wZXJpb2RzX21heCA9IDEwMjQsCiB9OwogCiAjaWZuZGVmIENISVBfQVU4ODIwCkBAIC0xNDAsNiArMTQwLDkgQEAKIAkJCQkJU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRF9CWVRFUykpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAorCXNuZF9wY21faHdfY29uc3RyYWludF9zdGVwKHJ1bnRpbWUsIDAsCisJCQkJCVNORFJWX1BDTV9IV19QQVJBTV9CVUZGRVJfQllURVMsIDY0KTsKKwogCWlmIChWT1JURVhfUENNX1RZUEUoc3Vic3RyZWFtLT5wY20pICE9IFZPUlRFWF9QQ01fV1QpIHsKICNpZm5kZWYgQ0hJUF9BVTg4MjAKIAkJaWYgKFZPUlRFWF9QQ01fVFlQRShzdWJzdHJlYW0tPnBjbSkgPT0gVk9SVEVYX1BDTV9BM0QpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCmluZGV4IDQzMGY0MWQuLjc1OWFkZTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYwpAQCAtOTM3LDYgKzkzNyw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX3NodXR1cF9waW5zKTsKIAorI2lmZGVmIFNORF9IREFfTkVFRFNfUkVTVU1FCiAvKiBSZXN0b3JlIHRoZSBwaW4gY29udHJvbHMgY2xlYXJlZCBwcmV2aW91c2x5IHZpYSBzbmRfaGRhX3NodXR1cF9waW5zKCkgKi8KIHN0YXRpYyB2b2lkIHJlc3RvcmVfc2h1dHVwX3BpbnMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CkBAIC05NTMsNiArOTU0LDcgQEAKIAl9CiAJY29kZWMtPnBpbnNfc2h1dHVwID0gMDsKIH0KKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBpbml0X2hkYV9jYWNoZShzdHJ1Y3QgaGRhX2NhY2hlX3JlYyAqY2FjaGUsCiAJCQkgICB1bnNpZ25lZCBpbnQgcmVjb3JkX3NpemUpOwpAQCAtMTMyOSw2ICsxMzMxLDcgQEAKIAl9CiB9CiAKKyNpZmRlZiBTTkRfSERBX05FRURTX1JFU1VNRQogLyogY2xlYW4gdXAgYWxsIHN0cmVhbXM7IGNhbGxlZCBmcm9tIHN1c3BlbmQgKi8KIHN0YXRpYyB2b2lkIGhkYV9jbGVhbnVwX2FsbF9zdHJlYW1zKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewpAQCAtMTM0MCw2ICsxMzQzLDcgQEAKIAkJCXJlYWxseV9jbGVhbnVwX3N0cmVhbShjb2RlYywgcCk7CiAJfQogfQorI2VuZGlmCiAKIC8qCiAgKiBhbXAgYWNjZXNzIGZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwppbmRleCA1MjkyOGQ5Li5jODI5NzlhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwpAQCAtMTcwNCwxMSArMTcwNCwxMSBAQAogCQkJCSAgIGNvZGVjLT5jaGlwX25hbWUsIGZpeC0+dHlwZSk7CiAJCQlicmVhazsKIAkJfQotCQlpZiAoIWZpeFtpZF0uY2hhaW5lZCkKKwkJaWYgKCFmaXgtPmNoYWluZWQpCiAJCQlicmVhazsKIAkJaWYgKCsrZGVwdGggPiAxMCkKIAkJCWJyZWFrOwotCQlpZCA9IGZpeFtpZF0uY2hhaW5faWQ7CisJCWlkID0gZml4LT5jaGFpbl9pZDsKIAl9CiB9CiAKQEAgLTU2NDUsNiArNTY0NSw3IEBACiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYmVlcF93aGl0ZV9saXN0W10gPSB7CiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODI5ZiwgIkFTVVMiLCAxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4M2NlLCAiRWVlUEMiLCAxKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MzFhLCAiRWVlUEMiLCAxKSwKIAlTTkRfUENJX1FVSVJLKDB4ODA4NiwgMHhkNjEzLCAiSW50ZWwiLCAxKSwKIAl7fQogfTsKQEAgLTk4NjMsNiArOTg2NCw3IEBACiAJU05EX1BDSV9RVUlSSygweDEwNzEsIDB4ODI1OCwgIkV2ZXNoYW0gVm95YWVnZXIiLCBBTEM4ODNfTEFQVE9QX0VBUEQpLAogCVNORF9QQ0lfUVVJUksoMHgxMGYxLCAweDIzNTAsICJUWUFOLVMyMzUwIiwgQUxDODg4XzZTVF9ERUxMKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA4ZSwgMHg1MzRkLCBOVUxMLCBBTEM4ODNfM1NUXzZjaCksCisJU05EX1BDSV9RVUlSSygweDE0NTgsIDB4YTAwMiwgIkdpZ2FieXRlIFAzNSBEUzNSIiwgQUxDODgyXzZTVF9ESUcpLAogCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4MDM0OSwgIk1TSSIsIEFMQzg4M19UQVJHQV8yY2hfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHgwNDBkLCAiTVNJIiwgQUxDODgzX1RBUkdBXzJjaF9ESUcpLApAQCAtMTA2OTksNyArMTA3MDEsNiBAQAogCVBJTkZJWF9MRU5PVk9fWTUzMCwKIAlQSU5GSVhfUEJfTTUyMTAsCiAJUElORklYX0FDRVJfQVNQSVJFXzc3MzYsCi0JUElORklYX0dJR0FCWVRFXzg4MEdNLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhbGNfZml4dXAgYWxjODgyX2ZpeHVwc1tdID0gewpAQCAtMTA3MzEsMTMgKzEwNzMyLDYgQEAKIAkJLnR5cGUgPSBBTENfRklYVVBfU0tVLAogCQkudi5za3UgPSBBTENfRklYVVBfU0tVX0lHTk9SRSwKIAl9LAotCVtQSU5GSVhfR0lHQUJZVEVfODgwR01dID0gewotCQkudHlwZSA9IEFMQ19GSVhVUF9QSU5TLAotCQkudi5waW5zID0gKGNvbnN0IHN0cnVjdCBhbGNfcGluY2ZnW10pIHsKLQkJCXsgMHgxNCwgMHgxMTE0NDEwIH0sIC8qIHNldCBhcyBzcGVha2VyICovCi0JCQl7IH0KLQkJfQotCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjODgyX2ZpeHVwX3RibFtdID0gewpAQCAtMTA3NDUsNyArMTA3MzksNiBAQAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDNhMGQsICJMZW5vdm8gWTUzMCIsIFBJTkZJWF9MRU5PVk9fWTUzMCksCiAJU05EX1BDSV9RVUlSSygweDE0N2IsIDB4MTA3YSwgIkFiaXQgQVc5RC1NQVgiLCBQSU5GSVhfQUJJVF9BVzlEX01BWCksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDI5NiwgIkFjZXIgQXNwaXJlIDc3MzZ6IiwgUElORklYX0FDRVJfQVNQSVJFXzc3MzYpLAotCVNORF9QQ0lfUVVJUksoMHgxNDU4LCAweGEwMDIsICJHaWdhYnl0ZSIsIFBJTkZJWF9HSUdBQllURV84ODBHTSksCiAJe30KIH07CiAKQEAgLTE0ODY4LDYgKzE0ODYxLDIzIEBACiAJYWxjX3dyaXRlX2NvZWZfaWR4KGNvZGVjLCAweDFlLCBjb2VmIHwgMHg4MCk7CiB9CiAKK3N0YXRpYyB2b2lkIGFsYzI3MV9maXh1cF9kbWljKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGFsY19maXh1cCAqZml4LCBpbnQgYWN0aW9uKQoreworCXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgdmVyYnNbXSA9IHsKKwkJezB4MjAsIEFDX1ZFUkJfU0VUX0NPRUZfSU5ERVgsIDB4MGR9LAorCQl7MHgyMCwgQUNfVkVSQl9TRVRfUFJPQ19DT0VGLCAweDQwMDB9LAorCQl7fQorCX07CisJdW5zaWduZWQgaW50IGNmZzsKKworCWlmIChzdHJjbXAoY29kZWMtPmNoaXBfbmFtZSwgIkFMQzI3MVgiKSkKKwkJcmV0dXJuOworCWNmZyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgMHgxMik7CisJaWYgKGdldF9kZWZjZmdfY29ubmVjdChjZmcpID09IEFDX0pBQ0tfUE9SVF9GSVhFRCkKKwkJc25kX2hkYV9zZXF1ZW5jZV93cml0ZShjb2RlYywgdmVyYnMpOworfQorCiBlbnVtIHsKIAlBTEMyNjlfRklYVVBfU09OWV9WQUlPLAogCUFMQzI3NV9GSVhVUF9TT05ZX1ZBSU9fR1BJTzIsCkBAIC0xNDg3Niw2ICsxNDg4Niw3IEBACiAJQUxDMjY5X0ZJWFVQX0FTVVNfRzczSlcsCiAJQUxDMjY5X0ZJWFVQX0xFTk9WT19FQVBELAogCUFMQzI3NV9GSVhVUF9TT05ZX0hXRVEsCisJQUxDMjcxX0ZJWFVQX0RNSUMsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFsY19maXh1cCBhbGMyNjlfZml4dXBzW10gPSB7CkBAIC0xNDkyOSw3ICsxNDk0MCwxMSBAQAogCQkudi5mdW5jID0gYWxjMjY5X2ZpeHVwX2h3ZXEsCiAJCS5jaGFpbmVkID0gdHJ1ZSwKIAkJLmNoYWluX2lkID0gQUxDMjc1X0ZJWFVQX1NPTllfVkFJT19HUElPMgotCX0KKwl9LAorCVtBTEMyNzFfRklYVVBfRE1JQ10gPSB7CisJCS50eXBlID0gQUxDX0ZJWFVQX0ZVTkMsCisJCS52LmZ1bmMgPSBhbGMyNzFfZml4dXBfZG1pYywKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzI2OV9maXh1cF90YmxbXSA9IHsKQEAgLTE0OTM4LDYgKzE0OTUzLDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDg0LCAiU29ueSBWQUlPIiwgQUxDMjc1X0ZJWFVQX1NPTllfSFdFUSksCiAJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxMDRkLCAiU29ueSBWQUlPIiwgQUxDMjY5X0ZJWFVQX1NPTllfVkFJTyksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDQ3MCwgIkRlbGwgTTEwMXoiLCBBTEMyNjlfRklYVVBfREVMTF9NMTAxWiksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxMDI1LCAiQWNlciBBc3BpcmUiLCBBTEMyNzFfRklYVVBfRE1JQyksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjBmMiwgIlRoaW5rcGFkIFNMNDEwLzUxMCIsIEFMQzI2OV9GSVhVUF9TS1VfSUdOT1JFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMTVlLCAiVGhpbmtwYWQgTDUxMiIsIEFMQzI2OV9GSVhVUF9TS1VfSUdOT1JFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMWI4LCAiVGhpbmtwYWQgRWRnZSAxNCIsIEFMQzI2OV9GSVhVUF9TS1VfSUdOT1JFKSwKQEAgLTE4NzgyLDYgKzE4Nzk4LDggQEAKIAkJICAgICAgQUxDNjYyXzNTVF82Y2hfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjZlLCAiVG9zaGliYSBOQjIweCIsIEFMQzY2Ml9BVVRPKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjYTAwLCAiU2Ftc3VuZyBOQzEwIiwgQUxDMjcyX1NBTVNVTkdfTkMxMCksCisJU05EX1BDSV9RVUlSSygweDE0NTgsIDB4YTAwMiwgIkdpZ2FieXRlIDk0NUdDTS1TMkwiLAorCQkgICAgICBBTEM2NjJfM1NUXzZjaF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxNTJkLCAweDIzMDQsICJRdWFudGEgV0gxIiwgQUxDNjYzX0FTVVNfSDEzKSwKIAlTTkRfUENJX1FVSVJLKDB4MTU2NSwgMHg4MjBmLCAiQmlvc3RhciBUQTc4MEcgTTIrIiwgQUxDNjYyXzNTVF82Y2hfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTYzMSwgMHhjMTBjLCAiUEIgUlM2NSIsIEFMQzY2M19BU1VTX001MVZBKSwKQEAgLTE5NDU1LDcgKzE5NDczLDcgQEAKIAlBTEM2NjJfRklYVVBfSURFQVBBRCwKIAlBTEMyNzJfRklYVVBfTUFSSU8sCiAJQUxDNjYyX0ZJWFVQX0NaQ19QMTBULAotCUFMQzY2Ml9GSVhVUF9HSUdBQllURSwKKwlBTEM2NjJfRklYVVBfU0tVX0lHTk9SRSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWxjX2ZpeHVwIGFsYzY2Ml9maXh1cHNbXSA9IHsKQEAgLTE5NDg0LDIwICsxOTUwMiwxNyBAQAogCQkJe30KIAkJfQogCX0sCi0JW0FMQzY2Ml9GSVhVUF9HSUdBQllURV0gPSB7Ci0JCS50eXBlID0gQUxDX0ZJWFVQX1BJTlMsCi0JCS52LnBpbnMgPSAoY29uc3Qgc3RydWN0IGFsY19waW5jZmdbXSkgewotCQkJeyAweDE0LCAweDExMTQ0MTAgfSwgLyogc2V0IGFzIHNwZWFrZXIgKi8KLQkJCXsgfQotCQl9CisJW0FMQzY2Ml9GSVhVUF9TS1VfSUdOT1JFXSA9IHsKKwkJLnR5cGUgPSBBTENfRklYVVBfU0tVLAorCQkudi5za3UgPSBBTENfRklYVVBfU0tVX0lHTk9SRSwKIAl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGFsYzY2Ml9maXh1cF90YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMzA4LCAiQWNlciBBc3BpcmUgODk0MkciLCBBTEM2NjJfRklYVVBfQVNQSVJFKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMzFjLCAiR2F0ZXdheSBOVjc5IiwgQUxDNjYyX0ZJWFVQX1NLVV9JR05PUkUpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAzOGIsICJBY2VyIEFzcGlyZSA4OTQzRyIsIEFMQzY2Ml9GSVhVUF9BU1BJUkUpLAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGMwNTEsICJTYW1zdW5nIFI3MjAiLCBBTEM2NjJfRklYVVBfSURFQVBBRCksCi0JU05EX1BDSV9RVUlSSygweDE0NTgsIDB4YTAwMiwgIkdpZ2FieXRlIiwgQUxDNjYyX0ZJWFVQX0dJR0FCWVRFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgzOGFmLCAiTGVub3ZvIElkZWFwYWQgWTU1MFAiLCBBTEM2NjJfRklYVVBfSURFQVBBRCksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4M2EwZCwgIkxlbm92byBJZGVhcGFkIFk1NTAiLCBBTEM2NjJfRklYVVBfSURFQVBBRCksCiAJU05EX1BDSV9RVUlSSygweDFiMzUsIDB4MjIwNiwgIkNaQyBQMTBUIiwgQUxDNjYyX0ZJWFVQX0NaQ19QMTBUKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jCmluZGV4IDEzNzFiNTcuLjA5OTcwMzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYwpAQCAtMTI5MiwxNCArMTI5MiwxOCBAQAogewogCWludCBpOwogCXN0cnVjdCBzbmRfY3RsX2VsZW1faWQgaWQ7Ci0JY29uc3QgY2hhciAqbGFiZWxzW10gPSB7Ik1pYyIsICJGcm9udCBNaWMiLCAiTGluZSJ9OworCWNvbnN0IGNoYXIgKmxhYmVsc1tdID0geyJNaWMiLCAiRnJvbnQgTWljIiwgIkxpbmUiLCAiUmVhciBNaWMifTsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICpjdGw7CiAKIAltZW1zZXQoJmlkLCAwLCBzaXplb2YoaWQpKTsKIAlpZC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxhYmVscyk7IGkrKykgewogCQlzcHJpbnRmKGlkLm5hbWUsICIlcyBQbGF5YmFjayBWb2x1bWUiLCBsYWJlbHNbaV0pOwotCQlzbmRfY3RsX25vdGlmeShjb2RlYy0+YnVzLT5jYXJkLCBTTkRSVl9DVExfRVZFTlRfTUFTS19WQUxVRSwKLQkJCSAgICAgICAmaWQpOworCQljdGwgPSBzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCBpZC5uYW1lKTsKKwkJaWYgKGN0bCkKKwkJCXNuZF9jdGxfbm90aWZ5KGNvZGVjLT5idXMtPmNhcmQsCisJCQkJCVNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFLAorCQkJCQkmY3RsLT5pZCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2p6NDc0MC5jIGIvc291bmQvc29jL2NvZGVjcy9qejQ3NDAuYwppbmRleCBmN2NkMzQ2Li5mNWNjZGJmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2p6NDc0MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvano0NzQwLmMKQEAgLTMwOCw4ICszMDgsNiBAQAogCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGp6NDc0MF9jb2RlY19kYXBtX3JvdXRlcywKIAkJQVJSQVlfU0laRShqejQ3NDBfY29kZWNfZGFwbV9yb3V0ZXMpKTsKIAotCXNuZF9zb2NfZGFwbV9uZXdfd2lkZ2V0cyhjb2RlYyk7Ci0KIAlqejQ3NDBfY29kZWNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9zbjk1MDMxLmMgYi9zb3VuZC9zb2MvY29kZWNzL3NuOTUwMzEuYwppbmRleCBhNTRkMmE1Li40ZDlmYjI3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3NuOTUwMzEuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3NuOTUwMzEuYwpAQCAtOTI3LDcgKzkyNyw3IEBACiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAl9LAogCS5wcm9iZQkJPSBzbjk1MDMxX2RldmljZV9wcm9iZSwKLQkucmVtb3ZlCQk9IHNuOTUwMzFfZGV2aWNlX3JlbW92ZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNuOTUwMzFfZGV2aWNlX3JlbW92ZSksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzbjk1MDMxX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvc3NtMjYwMi5jIGIvc291bmQvc29jL2NvZGVjcy9zc20yNjAyLmMKaW5kZXggMjcyN2JlZi4uYjA0ZDI4MCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9zc20yNjAyLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9zc20yNjAyLmMKQEAgLTEzOSw3ICsxMzksNyBAQAogU09DX0RPVUJMRV9SKCJDYXB0dXJlIFN3aXRjaCIsIFNTTTI2MDJfTElOVk9MLCBTU00yNjAyX1JJTlZPTCwgNywgMSwgMSksCiAKIFNPQ19TSU5HTEUoIk1pYyBCb29zdCAoKzIwZEIpIiwgU1NNMjYwMl9BUEFOQSwgMCwgMSwgMCksCi1TT0NfU0lOR0xFKCJNaWMgQm9vc3QyICgrMjBkQikiLCBTU00yNjAyX0FQQU5BLCA3LCAxLCAwKSwKK1NPQ19TSU5HTEUoIk1pYyBCb29zdDIgKCsyMGRCKSIsIFNTTTI2MDJfQVBBTkEsIDgsIDEsIDApLAogU09DX1NJTkdMRSgiTWljIFN3aXRjaCIsIFNTTTI2MDJfQVBBTkEsIDEsIDEsIDEpLAogCiBTT0NfU0lOR0xFKCJTaWRldG9uZSBQbGF5YmFjayBWb2x1bWUiLCBTU00yNjAyX0FQQU5BLCA2LCAzLCAxKSwKQEAgLTYwMiw3ICs2MDIsNyBAQAogCS5yZWFkID0gc3NtMjYwMl9yZWFkX3JlZ19jYWNoZSwKIAkud3JpdGUgPSBzc20yNjAyX3dyaXRlLAogCS5zZXRfYmlhc19sZXZlbCA9IHNzbTI2MDJfc2V0X2JpYXNfbGV2ZWwsCi0JLnJlZ19jYWNoZV9zaXplID0gc2l6ZW9mKHNzbTI2MDJfcmVnKSwKKwkucmVnX2NhY2hlX3NpemUgPSBBUlJBWV9TSVpFKHNzbTI2MDJfcmVnKSwKIAkucmVnX3dvcmRfc2l6ZSA9IHNpemVvZih1MTYpLAogCS5yZWdfY2FjaGVfZGVmYXVsdCA9IHNzbTI2MDJfcmVnLAogfTsKQEAgLTYxNCw3ICs2MTQsNyBAQAogICogICAgbG93ICA9IDB4MWEKICAqICAgIGhpZ2ggPSAweDFiCiAgKi8KLXN0YXRpYyBpbnQgc3NtMjYwMl9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNzbTI2MDJfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCiAJCQkgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3Qgc3NtMjYwMl9wcml2ICpzc20yNjAyOwpAQCAtNjM1LDcgKzYzNSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzc20yNjAyX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNzbTI2MDJfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmY2xpZW50LT5kZXYpOwogCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKQEAgLTY1NSw3ICs2NTUsNyBAQAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCS5wcm9iZSA9IHNzbTI2MDJfaTJjX3Byb2JlLAotCS5yZW1vdmUgPSBzc20yNjAyX2kyY19yZW1vdmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNzbTI2MDJfaTJjX3JlbW92ZSksCiAJLmlkX3RhYmxlID0gc3NtMjYwMl9pMmNfaWQsCiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3VkYTEzNHguYyBiL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM0eC5jCmluZGV4IDQ4ZmZkNDAuLmE3YjhmMzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM0eC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM0eC5jCkBAIC02MDEsOSArNjAxLDcgQEAKIAkucmVnX2NhY2hlX3N0ZXAgPSAxLAogCS5yZWFkID0gdWRhMTM0eF9yZWFkX3JlZ19jYWNoZSwKIAkud3JpdGUgPSB1ZGExMzR4X3dyaXRlLAotI2lmZGVmIFBPV0VSX09GRl9PTl9TVEFOREJZCiAJLnNldF9iaWFzX2xldmVsID0gdWRhMTM0eF9zZXRfYmlhc19sZXZlbCwKLSNlbmRpZgogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgdWRhMTM0eF9jb2RlY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5MDMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmMKaW5kZXggYWUxY2FkZi4uODI0ZDFjOCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5MDMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jCkBAIC0yNDcsOCArMjQ3LDYgQEAKIAljYXNlIFdNODkwM19SRVZJU0lPTl9OVU1CRVI6CiAJY2FzZSBXTTg5MDNfSU5URVJSVVBUX1NUQVRVU18xOgogCWNhc2UgV004OTAzX1dSSVRFX1NFUVVFTkNFUl80OgotCWNhc2UgV004OTAzX1BPV0VSX01BTkFHRU1FTlRfMzoKLQljYXNlIFdNODkwM19QT1dFUl9NQU5BR0VNRU5UXzI6CiAJY2FzZSBXTTg5MDNfRENfU0VSVk9fUkVBREJBQ0tfMToKIAljYXNlIFdNODkwM19EQ19TRVJWT19SRUFEQkFDS18yOgogCWNhc2UgV004OTAzX0RDX1NFUlZPX1JFQURCQUNLXzM6CkBAIC02OTQsNyArNjkyLDcgQEAKIFNPQ19TSU5HTEVfVExWKCJEUkMgU3RhcnR1cCBWb2x1bWUiLCBXTTg5MDNfRFJDXzAsIDYsIDE4LCAwLCBkcmNfdGx2X3N0YXJ0dXApLAogCiBTT0NfRE9VQkxFX1JfVExWKCJEaWdpdGFsIENhcHR1cmUgVm9sdW1lIiwgV004OTAzX0FEQ19ESUdJVEFMX1ZPTFVNRV9MRUZULAotCQkgV004OTAzX0FEQ19ESUdJVEFMX1ZPTFVNRV9SSUdIVCwgMSwgOTYsIDAsIGRpZ2l0YWxfdGx2KSwKKwkJIFdNODkwM19BRENfRElHSVRBTF9WT0xVTUVfUklHSFQsIDEsIDEyMCwgMCwgZGlnaXRhbF90bHYpLAogU09DX0VOVU0oIkFEQyBDb21wYW5kaW5nIE1vZGUiLCBhZGNfY29tcGFuZGluZyksCiBTT0NfU0lOR0xFKCJBREMgQ29tcGFuZGluZyBTd2l0Y2giLCBXTTg5MDNfQVVESU9fSU5URVJGQUNFXzAsIDMsIDEsIDApLAogCkBAIC04NzUsMzQgKzg3Myw0MCBAQAogU05EX1NPQ19EQVBNX01JWEVSKCJSaWdodCBTcGVha2VyIE1peGVyIiwgV004OTAzX1BPV0VSX01BTkFHRU1FTlRfNCwgMCwgMCwKIAkJICAgcmlnaHRfc3BlYWtlcl9taXhlciwgQVJSQVlfU0laRShyaWdodF9zcGVha2VyX21peGVyKSksCiAKLVNORF9TT0NfREFQTV9QR0FfUygiTGVmdCBIZWFkcGhvbmUgT3V0cHV0IFBHQSIsIDAsIFdNODkwM19BTkFMT0dVRV9IUF8wLAotCQkgICA0LCAwLCBOVUxMLCAwKSwKLVNORF9TT0NfREFQTV9QR0FfUygiUmlnaHQgSGVhZHBob25lIE91dHB1dCBQR0EiLCAwLCBXTTg5MDNfQU5BTE9HVUVfSFBfMCwKK1NORF9TT0NfREFQTV9QR0FfUygiTGVmdCBIZWFkcGhvbmUgT3V0cHV0IFBHQSIsIDAsIFdNODkwM19QT1dFUl9NQU5BR0VNRU5UXzIsCisJCSAgIDEsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQV9TKCJSaWdodCBIZWFkcGhvbmUgT3V0cHV0IFBHQSIsIDAsIFdNODkwM19QT1dFUl9NQU5BR0VNRU5UXzIsCiAJCSAgIDAsIDAsIE5VTEwsIDApLAogCi1TTkRfU09DX0RBUE1fUEdBX1MoIkxlZnQgTGluZSBPdXRwdXQgUEdBIiwgMCwgV004OTAzX0FOQUxPR1VFX0xJTkVPVVRfMCwgNCwgMCwKK1NORF9TT0NfREFQTV9QR0FfUygiTGVmdCBMaW5lIE91dHB1dCBQR0EiLCAwLCBXTTg5MDNfUE9XRVJfTUFOQUdFTUVOVF8zLCAxLCAwLAogCQkgICBOVUxMLCAwKSwKLVNORF9TT0NfREFQTV9QR0FfUygiUmlnaHQgTGluZSBPdXRwdXQgUEdBIiwgMCwgV004OTAzX0FOQUxPR1VFX0xJTkVPVVRfMCwgMCwgMCwKK1NORF9TT0NfREFQTV9QR0FfUygiUmlnaHQgTGluZSBPdXRwdXQgUEdBIiwgMCwgV004OTAzX1BPV0VSX01BTkFHRU1FTlRfMywgMCwgMCwKIAkJICAgTlVMTCwgMCksCiAKIFNORF9TT0NfREFQTV9QR0FfUygiSFBMX1JNVl9TSE9SVCIsIDQsIFdNODkwM19BTkFMT0dVRV9IUF8wLCA3LCAwLCBOVUxMLCAwKSwKIFNORF9TT0NfREFQTV9QR0FfUygiSFBMX0VOQV9PVVRQIiwgMywgV004OTAzX0FOQUxPR1VFX0hQXzAsIDYsIDAsIE5VTEwsIDApLAotU05EX1NPQ19EQVBNX1BHQV9TKCJIUExfRU5BX0RMWSIsIDEsIFdNODkwM19BTkFMT0dVRV9IUF8wLCA1LCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0FfUygiSFBMX0VOQV9ETFkiLCAyLCBXTTg5MDNfQU5BTE9HVUVfSFBfMCwgNSwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBX1MoIkhQTF9FTkEiLCAxLCBXTTg5MDNfQU5BTE9HVUVfSFBfMCwgNCwgMCwgTlVMTCwgMCksCiBTTkRfU09DX0RBUE1fUEdBX1MoIkhQUl9STVZfU0hPUlQiLCA0LCBXTTg5MDNfQU5BTE9HVUVfSFBfMCwgMywgMCwgTlVMTCwgMCksCiBTTkRfU09DX0RBUE1fUEdBX1MoIkhQUl9FTkFfT1VUUCIsIDMsIFdNODkwM19BTkFMT0dVRV9IUF8wLCAyLCAwLCBOVUxMLCAwKSwKLVNORF9TT0NfREFQTV9QR0FfUygiSFBSX0VOQV9ETFkiLCAxLCBXTTg5MDNfQU5BTE9HVUVfSFBfMCwgMSwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBX1MoIkhQUl9FTkFfRExZIiwgMiwgV004OTAzX0FOQUxPR1VFX0hQXzAsIDEsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQV9TKCJIUFJfRU5BIiwgMSwgV004OTAzX0FOQUxPR1VFX0hQXzAsIDAsIDAsIE5VTEwsIDApLAogCiBTTkRfU09DX0RBUE1fUEdBX1MoIkxJTkVPVVRMX1JNVl9TSE9SVCIsIDQsIFdNODkwM19BTkFMT0dVRV9MSU5FT1VUXzAsIDcsIDAsCiAJCSAgIE5VTEwsIDApLAogU05EX1NPQ19EQVBNX1BHQV9TKCJMSU5FT1VUTF9FTkFfT1VUUCIsIDMsIFdNODkwM19BTkFMT0dVRV9MSU5FT1VUXzAsIDYsIDAsCiAJCSAgIE5VTEwsIDApLAotU05EX1NPQ19EQVBNX1BHQV9TKCJMSU5FT1VUTF9FTkFfRExZIiwgMSwgV004OTAzX0FOQUxPR1VFX0xJTkVPVVRfMCwgNSwgMCwKK1NORF9TT0NfREFQTV9QR0FfUygiTElORU9VVExfRU5BX0RMWSIsIDIsIFdNODkwM19BTkFMT0dVRV9MSU5FT1VUXzAsIDUsIDAsCisJCSAgIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQV9TKCJMSU5FT1VUTF9FTkEiLCAxLCBXTTg5MDNfQU5BTE9HVUVfTElORU9VVF8wLCA0LCAwLAogCQkgICBOVUxMLCAwKSwKIFNORF9TT0NfREFQTV9QR0FfUygiTElORU9VVFJfUk1WX1NIT1JUIiwgNCwgV004OTAzX0FOQUxPR1VFX0xJTkVPVVRfMCwgMywgMCwKIAkJICAgTlVMTCwgMCksCiBTTkRfU09DX0RBUE1fUEdBX1MoIkxJTkVPVVRSX0VOQV9PVVRQIiwgMywgV004OTAzX0FOQUxPR1VFX0xJTkVPVVRfMCwgMiwgMCwKIAkJICAgTlVMTCwgMCksCi1TTkRfU09DX0RBUE1fUEdBX1MoIkxJTkVPVVRSX0VOQV9ETFkiLCAxLCBXTTg5MDNfQU5BTE9HVUVfTElORU9VVF8wLCAxLCAwLAorU05EX1NPQ19EQVBNX1BHQV9TKCJMSU5FT1VUUl9FTkFfRExZIiwgMiwgV004OTAzX0FOQUxPR1VFX0xJTkVPVVRfMCwgMSwgMCwKKwkJICAgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBX1MoIkxJTkVPVVRSX0VOQSIsIDEsIFdNODkwM19BTkFMT0dVRV9MSU5FT1VUXzAsIDAsIDAsCiAJCSAgIE5VTEwsIDApLAogCiBTTkRfU09DX0RBUE1fU1VQUExZKCJEQ1MgTWFzdGVyIiwgV004OTAzX0RDX1NFUlZPXzAsIDQsIDAsIE5VTEwsIDApLApAQCAtMTAzNywxMCArMTA0MSwxNCBAQAogCXsgIkxlZnQgU3BlYWtlciBQR0EiLCBOVUxMLCAiTGVmdCBTcGVha2VyIE1peGVyIiB9LAogCXsgIlJpZ2h0IFNwZWFrZXIgUEdBIiwgTlVMTCwgIlJpZ2h0IFNwZWFrZXIgTWl4ZXIiIH0sCiAKLQl7ICJIUExfRU5BX0RMWSIsIE5VTEwsICJMZWZ0IEhlYWRwaG9uZSBPdXRwdXQgUEdBIiB9LAotCXsgIkhQUl9FTkFfRExZIiwgTlVMTCwgIlJpZ2h0IEhlYWRwaG9uZSBPdXRwdXQgUEdBIiB9LAotCXsgIkxJTkVPVVRMX0VOQV9ETFkiLCBOVUxMLCAiTGVmdCBMaW5lIE91dHB1dCBQR0EiIH0sCi0JeyAiTElORU9VVFJfRU5BX0RMWSIsIE5VTEwsICJSaWdodCBMaW5lIE91dHB1dCBQR0EiIH0sCisJeyAiSFBMX0VOQSIsIE5VTEwsICJMZWZ0IEhlYWRwaG9uZSBPdXRwdXQgUEdBIiB9LAorCXsgIkhQUl9FTkEiLCBOVUxMLCAiUmlnaHQgSGVhZHBob25lIE91dHB1dCBQR0EiIH0sCisJeyAiSFBMX0VOQV9ETFkiLCBOVUxMLCAiSFBMX0VOQSIgfSwKKwl7ICJIUFJfRU5BX0RMWSIsIE5VTEwsICJIUFJfRU5BIiB9LAorCXsgIkxJTkVPVVRMX0VOQSIsIE5VTEwsICJMZWZ0IExpbmUgT3V0cHV0IFBHQSIgfSwKKwl7ICJMSU5FT1VUUl9FTkEiLCBOVUxMLCAiUmlnaHQgTGluZSBPdXRwdXQgUEdBIiB9LAorCXsgIkxJTkVPVVRMX0VOQV9ETFkiLCBOVUxMLCAiTElORU9VVExfRU5BIiB9LAorCXsgIkxJTkVPVVRSX0VOQV9ETFkiLCBOVUxMLCAiTElORU9VVFJfRU5BIiB9LAogCiAJeyAiSFBMX0RDUyIsIE5VTEwsICJEQ1MgTWFzdGVyIiB9LAogCXsgIkhQUl9EQ1MiLCBOVUxMLCAiRENTIE1hc3RlciIgfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5jCmluZGV4IDMyOTAzMzMuLjg0ZTFiZDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTQuYwpAQCAtMzI2MSwyMCArMzI2MSwzNiBAQAogCXdtODk5NF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCiAJLyogTGF0Y2ggdm9sdW1lIHVwZGF0ZXMgKHJpZ2h0IG9ubHk7IHdlIGFsd2F5cyBkbyBsZWZ0IHRoZW4gcmlnaHQpLiAqLworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYxX0RBQzFfTEVGVF9WT0xVTUUsCisJCQkgICAgV004OTk0X0FJRjFEQUMxX1ZVLCBXTTg5OTRfQUlGMURBQzFfVlUpOwogCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYxX0RBQzFfUklHSFRfVk9MVU1FLAogCQkJICAgIFdNODk5NF9BSUYxREFDMV9WVSwgV004OTk0X0FJRjFEQUMxX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMV9EQUMyX0xFRlRfVk9MVU1FLAorCQkJICAgIFdNODk5NF9BSUYxREFDMl9WVSwgV004OTk0X0FJRjFEQUMyX1ZVKTsKIAlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMV9EQUMyX1JJR0hUX1ZPTFVNRSwKIAkJCSAgICBXTTg5OTRfQUlGMURBQzJfVlUsIFdNODk5NF9BSUYxREFDMl9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjJfREFDX0xFRlRfVk9MVU1FLAorCQkJICAgIFdNODk5NF9BSUYyREFDX1ZVLCBXTTg5OTRfQUlGMkRBQ19WVSk7CiAJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjJfREFDX1JJR0hUX1ZPTFVNRSwKIAkJCSAgICBXTTg5OTRfQUlGMkRBQ19WVSwgV004OTk0X0FJRjJEQUNfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYxX0FEQzFfTEVGVF9WT0xVTUUsCisJCQkgICAgV004OTk0X0FJRjFBREMxX1ZVLCBXTTg5OTRfQUlGMUFEQzFfVlUpOwogCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYxX0FEQzFfUklHSFRfVk9MVU1FLAogCQkJICAgIFdNODk5NF9BSUYxQURDMV9WVSwgV004OTk0X0FJRjFBREMxX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMV9BREMyX0xFRlRfVk9MVU1FLAorCQkJICAgIFdNODk5NF9BSUYxQURDMl9WVSwgV004OTk0X0FJRjFBREMyX1ZVKTsKIAlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMV9BREMyX1JJR0hUX1ZPTFVNRSwKIAkJCSAgICBXTTg5OTRfQUlGMUFEQzJfVlUsIFdNODk5NF9BSUYxQURDMl9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjJfQURDX0xFRlRfVk9MVU1FLAorCQkJICAgIFdNODk5NF9BSUYyQURDX1ZVLCBXTTg5OTRfQUlGMUFEQzJfVlUpOwogCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYyX0FEQ19SSUdIVF9WT0xVTUUsCiAJCQkgICAgV004OTk0X0FJRjJBRENfVlUsIFdNODk5NF9BSUYxQURDMl9WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0RBQzFfTEVGVF9WT0xVTUUsCisJCQkgICAgV004OTk0X0RBQzFfVlUsIFdNODk5NF9EQUMxX1ZVKTsKIAlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfREFDMV9SSUdIVF9WT0xVTUUsCiAJCQkgICAgV004OTk0X0RBQzFfVlUsIFdNODk5NF9EQUMxX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfREFDMl9MRUZUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTRfREFDMl9WVSwgV004OTk0X0RBQzJfVlUpOwogCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9EQUMyX1JJR0hUX1ZPTFVNRSwKIAkJCSAgICBXTTg5OTRfREFDMl9WVSwgV004OTk0X0RBQzJfVlUpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5jCmluZGV4IDdiNmIzYzEuLjQwMDVlOWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5jCkBAIC03NDAsMTIgKzc0MCwxMiBAQAogCiAJeyAiU1BLTCIsICJJbnB1dCBTd2l0Y2giLCAiTUlYSU5MIiB9LAogCXsgIlNQS0wiLCAiSU4xTFAgU3dpdGNoIiwgIklOMUxQIiB9LAotCXsgIlNQS0wiLCAiT3V0cHV0IFN3aXRjaCIsICJMZWZ0IE91dHB1dCBNaXhlciIgfSwKKwl7ICJTUEtMIiwgIk91dHB1dCBTd2l0Y2giLCAiTGVmdCBPdXRwdXQgUEdBIiB9LAogCXsgIlNQS0wiLCBOVUxMLCAiVE9DTEsiIH0sCiAKIAl7ICJTUEtSIiwgIklucHV0IFN3aXRjaCIsICJNSVhJTlIiIH0sCiAJeyAiU1BLUiIsICJJTjFSUCBTd2l0Y2giLCAiSU4xUlAiIH0sCi0JeyAiU1BLUiIsICJPdXRwdXQgU3dpdGNoIiwgIlJpZ2h0IE91dHB1dCBNaXhlciIgfSwKKwl7ICJTUEtSIiwgIk91dHB1dCBTd2l0Y2giLCAiUmlnaHQgT3V0cHV0IFBHQSIgfSwKIAl7ICJTUEtSIiwgTlVMTCwgIlRPQ0xLIiB9LAogCiAJeyAiU1BLTCBCb29zdCIsICJEaXJlY3QgVm9pY2UgU3dpdGNoIiwgIkRpcmVjdCBWb2ljZSIgfSwKQEAgLTc2Nyw4ICs3NjcsOCBAQAogCXsgIlNQS09VVFJQIiwgTlVMTCwgIlNQS1IgRHJpdmVyIiB9LAogCXsgIlNQS09VVFJOIiwgTlVMTCwgIlNQS1IgRHJpdmVyIiB9LAogCi0JeyAiTGVmdCBIZWFkcGhvbmUgTXV4IiwgIk1peGVyIiwgIkxlZnQgT3V0cHV0IE1peGVyIiB9LAotCXsgIlJpZ2h0IEhlYWRwaG9uZSBNdXgiLCAiTWl4ZXIiLCAiUmlnaHQgT3V0cHV0IE1peGVyIiB9LAorCXsgIkxlZnQgSGVhZHBob25lIE11eCIsICJNaXhlciIsICJMZWZ0IE91dHB1dCBQR0EiIH0sCisJeyAiUmlnaHQgSGVhZHBob25lIE11eCIsICJNaXhlciIsICJSaWdodCBPdXRwdXQgUEdBIiB9LAogCiAJeyAiSGVhZHBob25lIFBHQSIsIE5VTEwsICJMZWZ0IEhlYWRwaG9uZSBNdXgiIH0sCiAJeyAiSGVhZHBob25lIFBHQSIsIE5VTEwsICJSaWdodCBIZWFkcGhvbmUgTXV4IiB9LApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jCmluZGV4IGE1YWY4MzQuLjRkZGM2ZDMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuYworKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmMKQEAgLTQzNCwxNyArNDM0LDIxIEBACiAJCW1jYXNwX3NldF9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX0FDTEtSQ1RMX1JFRywgQUNMS1JFKTsKIAkJbWNhc3Bfc2V0X2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfUlhGTUNUTF9SRUcsIEFGU1JFKTsKIAotCQltY2FzcF9zZXRfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9QRElSX1JFRywgKDB4NyA8PCAyNikpOworCQltY2FzcF9zZXRfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9QRElSX1JFRywKKwkJCQlBQ0xLWCB8IEFIQ0xLWCB8IEFGU1gpOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRlM6CiAJCS8qIGNvZGVjIGlzIGNsb2NrIG1hc3RlciBhbmQgZnJhbWUgc2xhdmUgKi8KLQkJbWNhc3Bfc2V0X2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfQUNMS1hDVExfUkVHLCBBQ0xLWEUpOworCQltY2FzcF9jbHJfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9BQ0xLWENUTF9SRUcsIEFDTEtYRSk7CiAJCW1jYXNwX3NldF9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX1RYRk1DVExfUkVHLCBBRlNYRSk7CiAKLQkJbWNhc3Bfc2V0X2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfQUNMS1JDVExfUkVHLCBBQ0xLUkUpOworCQltY2FzcF9jbHJfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9BQ0xLUkNUTF9SRUcsIEFDTEtSRSk7CiAJCW1jYXNwX3NldF9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX1JYRk1DVExfUkVHLCBBRlNSRSk7CiAKLQkJbWNhc3Bfc2V0X2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfUERJUl9SRUcsICgweDJkIDw8IDI2KSk7CisJCW1jYXNwX2Nscl9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX1BESVJfUkVHLAorCQkJCUFDTEtYIHwgQUNMS1IpOworCQltY2FzcF9zZXRfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9QRElSX1JFRywKKwkJCQlBRlNYIHwgQUZTUik7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKIAkJLyogY29kZWMgaXMgY2xvY2sgYW5kIGZyYW1lIG1hc3RlciAqLwpAQCAtNDU0LDcgKzQ1OCw4IEBACiAJCW1jYXNwX2Nscl9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX0FDTEtSQ1RMX1JFRywgQUNMS1JFKTsKIAkJbWNhc3BfY2xyX2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfUlhGTUNUTF9SRUcsIEFGU1JFKTsKIAotCQltY2FzcF9jbHJfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9QRElSX1JFRywgKDB4M2YgPDwgMjYpKTsKKwkJbWNhc3BfY2xyX2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfUERJUl9SRUcsCisJCQkJQUNMS1ggfCBBSENMS1ggfCBBRlNYIHwgQUNMS1IgfCBBSENMS1IgfCBBRlNSKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtNjQ0LDcgKzY0OSw3IEBACiAJCW1jYXNwX3NldF9yZWcoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9UWFRETV9SRUcsIG1hc2spOwogCQltY2FzcF9zZXRfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1RYRk1UX1JFRywgVFhPUkQpOwogCi0JCWlmICgoZGV2LT50ZG1fc2xvdHMgPj0gMikgfHwgKGRldi0+dGRtX3Nsb3RzIDw9IDMyKSkKKwkJaWYgKChkZXYtPnRkbV9zbG90cyA+PSAyKSAmJiAoZGV2LT50ZG1fc2xvdHMgPD0gMzIpKQogCQkJbWNhc3BfbW9kX2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9UWEZNQ1RMX1JFRywKIAkJCQkJRlNYTU9EKGRldi0+dGRtX3Nsb3RzKSwgRlNYTU9EKDB4MUZGKSk7CiAJCWVsc2UKQEAgLTY2MCw3ICs2NjUsNyBAQAogCQkJCUFIQ0xLUkUpOwogCQltY2FzcF9zZXRfcmVnKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfUlhURE1fUkVHLCBtYXNrKTsKIAotCQlpZiAoKGRldi0+dGRtX3Nsb3RzID49IDIpIHx8IChkZXYtPnRkbV9zbG90cyA8PSAzMikpCisJCWlmICgoZGV2LT50ZG1fc2xvdHMgPj0gMikgJiYgKGRldi0+dGRtX3Nsb3RzIDw9IDMyKSkKIAkJCW1jYXNwX21vZF9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfUlhGTUNUTF9SRUcsCiAJCQkJCUZTUk1PRChkZXYtPnRkbV9zbG90cyksIEZTUk1PRCgweDFGRikpOwogCQllbHNlCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvano0NzQwL2p6NDc0MC1pMnMuYyBiL3NvdW5kL3NvYy9qejQ3NDAvano0NzQwLWkycy5jCmluZGV4IDQxOWJmNGYuLmNkMjJhNTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9qejQ3NDAvano0NzQwLWkycy5jCisrKyBiL3NvdW5kL3NvYy9qejQ3NDAvano0NzQwLWkycy5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAlzdHJ1Y3Qgano0NzQwX2kycyAqaTJzID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsKIAl1aW50MzJfdCBjb25mOwogCi0JaWYgKCFkYWktPmFjdGl2ZSkKKwlpZiAoZGFpLT5hY3RpdmUpCiAJCXJldHVybjsKIAogCWNvbmYgPSBqejQ3NDBfaTJzX3JlYWQoaTJzLCBKWl9SRUdfQUlDX0NPTkYpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL21pZC14ODYvc3N0X3BsYXRmb3JtLmMgYi9zb3VuZC9zb2MvbWlkLXg4Ni9zc3RfcGxhdGZvcm0uYwppbmRleCBiMmU5MTk4Li42YjFmOWQzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvbWlkLXg4Ni9zc3RfcGxhdGZvcm0uYworKysgYi9zb3VuZC9zb2MvbWlkLXg4Ni9zc3RfcGxhdGZvcm0uYwpAQCAtMTE2LDE4ICsxMTYsMjAgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzc3Rfc2V0X3N0cmVhbV9zdGF0dXMoc3RydWN0IHNzdF9ydW50aW1lX3N0cmVhbSAqc3RyZWFtLAogCQkJCQlpbnQgc3RhdGUpCiB7Ci0Jc3Bpbl9sb2NrKCZzdHJlYW0tPnN0YXR1c19sb2NrKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZzdHJlYW0tPnN0YXR1c19sb2NrLCBmbGFncyk7CiAJc3RyZWFtLT5zdHJlYW1fc3RhdHVzID0gc3RhdGU7Ci0Jc3Bpbl91bmxvY2soJnN0cmVhbS0+c3RhdHVzX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0cmVhbS0+c3RhdHVzX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgc3N0X2dldF9zdHJlYW1fc3RhdHVzKHN0cnVjdCBzc3RfcnVudGltZV9zdHJlYW0gKnN0cmVhbSkKIHsKIAlpbnQgc3RhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmc3RyZWFtLT5zdGF0dXNfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnN0cmVhbS0+c3RhdHVzX2xvY2ssIGZsYWdzKTsKIAlzdGF0ZSA9IHN0cmVhbS0+c3RyZWFtX3N0YXR1czsKLQlzcGluX3VubG9jaygmc3RyZWFtLT5zdGF0dXNfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RyZWFtLT5zdGF0dXNfbG9jaywgZmxhZ3MpOwogCXJldHVybiBzdGF0ZTsKIH0KIApAQCAtMzc0LDYgKzM3NiwxMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNzdF9wbGF0Zm9ybV9wY21faHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOworfQorCiBzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNzdF9wbGF0Zm9ybV9vcHMgPSB7CiAJLm9wZW4gPSBzc3RfcGxhdGZvcm1fb3BlbiwKIAkuY2xvc2UgPSBzc3RfcGxhdGZvcm1fY2xvc2UsCkBAIC0zODIsNiArMzg5LDcgQEAKIAkudHJpZ2dlciA9IHNzdF9wbGF0Zm9ybV9wY21fdHJpZ2dlciwKIAkucG9pbnRlciA9IHNzdF9wbGF0Zm9ybV9wY21fcG9pbnRlciwKIAkuaHdfcGFyYW1zID0gc3N0X3BsYXRmb3JtX3BjbV9od19wYXJhbXMsCisJLmh3X2ZyZWUgPSBzc3RfcGxhdGZvcm1fcGNtX2h3X2ZyZWUsCiB9OwogCiBzdGF0aWMgdm9pZCBzc3RfcGNtX2ZyZWUoc3RydWN0IHNuZF9wY20gKnBjbSkKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL2dvbmlfd204OTk0LmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9nb25pX3dtODk5NC5jCmluZGV4IGY2YjNhM2MuLjBlODBkYWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL2dvbmlfd204OTk0LmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvZ29uaV93bTg5OTQuYwpAQCAtMjM2LDE4ICsyMzYsMTggQEAKIAkubmFtZSA9ICJXTTg5OTQiLAogCS5zdHJlYW1fbmFtZSA9ICJXTTg5OTQgSGlGaSIsCiAJLmNwdV9kYWlfbmFtZSA9ICJzYW1zdW5nLWkycy4wIiwKLQkuY29kZWNfZGFpX25hbWUgPSAid204OTk0LWhpZmkiLAorCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTg5OTQtYWlmMSIsCiAJLnBsYXRmb3JtX25hbWUgPSAic2Ftc3VuZy1hdWRpbyIsCi0JLmNvZGVjX25hbWUgPSAid204OTk0LWNvZGVjLjAtMHgxYSIsCisJLmNvZGVjX25hbWUgPSAid204OTk0LWNvZGVjLjAtMDAxYSIsCiAJLmluaXQgPSBnb25pX3dtODk5NF9pbml0LAogCS5vcHMgPSAmZ29uaV9oaWZpX29wcywKIH0sIHsKIAkubmFtZSA9ICJXTTg5OTQgVm9pY2UiLAogCS5zdHJlYW1fbmFtZSA9ICJWb2ljZSIsCiAJLmNwdV9kYWlfbmFtZSA9ICJnb25pLXZvaWNlLWRhaSIsCi0JLmNvZGVjX2RhaV9uYW1lID0gIndtODk5NC12b2ljZSIsCisJLmNvZGVjX2RhaV9uYW1lID0gIndtODk5NC1haWYyIiwKIAkucGxhdGZvcm1fbmFtZSA9ICJzYW1zdW5nLWF1ZGlvIiwKLQkuY29kZWNfbmFtZSA9ICJ3bTg5OTQtY29kZWMuMC0weDFhIiwKKwkuY29kZWNfbmFtZSA9ICJ3bTg5OTQtY29kZWMuMC0wMDFhIiwKIAkub3BzID0gJmdvbmlfdm9pY2Vfb3BzLAogfSwKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9wY20uYyBiL3NvdW5kL3NvYy9zYW1zdW5nL3BjbS5jCmluZGV4IDM4YWFjN2QuLjljN2U4YjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL3BjbS5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL3BjbS5jCkBAIC0zNTAsOCArMzUwLDggQEAKIAljdGwgPSByZWFkbChyZWdzICsgUzNDX1BDTV9DVEwpOwogCiAJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgewotCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6Ci0JCS8qIE5vdGhpbmcgdG8gZG8sIE5CX05GIGJ5IGRlZmF1bHQgKi8KKwljYXNlIFNORF9TT0NfREFJRk1UX0lCX05GOgorCQkvKiBOb3RoaW5nIHRvIGRvLCBJQl9ORiBieSBkZWZhdWx0ICovCiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRldl9lcnIocGNtLT5kZXYsICJVbnN1cHBvcnRlZCBjbG9jayBpbnZlcnNpb24hXG4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9mc2kuYyBiL3NvdW5kL3NvYy9zaC9mc2kuYwppbmRleCAwYzk5OTdlLi4yM2MwZTgzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2gvZnNpLmMKKysrIGIvc291bmQvc29jL3NoL2ZzaS5jCkBAIC0xMjAwLDEwICsxMjAwLDExIEBACiAJbWFzdGVyLT5mc2liLm1hc3Rlcgk9IG1hc3RlcjsKIAogCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOwotCXBtX3J1bnRpbWVfcmVzdW1lKCZwZGV2LT5kZXYpOwogCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBtYXN0ZXIpOwogCisJcG1fcnVudGltZV9nZXRfc3luYygmcGRldi0+ZGV2KTsKIAlmc2lfc29mdF9hbGxfcmVzZXQobWFzdGVyKTsKKwlwbV9ydW50aW1lX3B1dF9zeW5jKCZwZGV2LT5kZXYpOwogCiAJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCAmZnNpX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKIAkJCSAgaWRfZW50cnktPm5hbWUsIG1hc3Rlcik7CkBAIC0xMjE4LDggKzEyMTksMTcgQEAKIAkJZ290byBleGl0X2ZyZWVfaXJxOwogCX0KIAotCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2RhaXMoJnBkZXYtPmRldiwgZnNpX3NvY19kYWksIEFSUkFZX1NJWkUoZnNpX3NvY19kYWkpKTsKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaXMoJnBkZXYtPmRldiwgZnNpX3NvY19kYWksCisJCQkJICAgIEFSUkFZX1NJWkUoZnNpX3NvY19kYWkpKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3Qgc25kIGRhaSByZWdpc3RlclxuIik7CisJCWdvdG8gZXhpdF9zbmRfc29jOworCX0KIAorCXJldHVybiByZXQ7CisKK2V4aXRfc25kX3NvYzoKKwlzbmRfc29jX3VucmVnaXN0ZXJfcGxhdGZvcm0oJnBkZXYtPmRldik7CiBleGl0X2ZyZWVfaXJxOgogCWZyZWVfaXJxKGlycSwgbWFzdGVyKTsKIGV4aXRfaW91bm1hcDoKQEAgLTEyMzgsMTIgKzEyNDgsMTEgQEAKIAogCW1hc3RlciA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKIAotCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKCZwZGV2LT5kZXYsIEFSUkFZX1NJWkUoZnNpX3NvY19kYWkpKTsKLQlzbmRfc29jX3VucmVnaXN0ZXJfcGxhdGZvcm0oJnBkZXYtPmRldik7Ci0KKwlmcmVlX2lycShtYXN0ZXItPmlycSwgbWFzdGVyKTsKIAlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CiAKLQlmcmVlX2lycShtYXN0ZXItPmlycSwgbWFzdGVyKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfZGFpcygmcGRldi0+ZGV2LCBBUlJBWV9TSVpFKGZzaV9zb2NfZGFpKSk7CisJc25kX3NvY191bnJlZ2lzdGVyX3BsYXRmb3JtKCZwZGV2LT5kZXYpOwogCiAJaW91bm1hcChtYXN0ZXItPmJhc2UpOwogCWtmcmVlKG1hc3Rlcik7CkBAIC0xMzIxLDMgKzEzMzAsNCBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTdXBlckggb25jaGlwIEZTSSBhdWRpbyBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4iKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06ZnNpLXBjbS1hdWRpbyIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1jb3JlLmMgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwppbmRleCBiNzZiNzRkLi5kZDU1ZDEwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWNvcmUuYworKysgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwpAQCAtNjI5LDYgKzYyOSw3IEBACiAJCQlydW50aW1lLT5ody5yYXRlcyB8PSBjb2RlY19kYWlfZHJ2LT5jYXB0dXJlLnJhdGVzOwogCX0KIAorCXJldCA9IC1FSU5WQUw7CiAJc25kX3BjbV9saW1pdF9od19yYXRlcyhydW50aW1lKTsKIAlpZiAoIXJ1bnRpbWUtPmh3LnJhdGVzKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYXNvYzogJXMgPC0+ICVzIE5vIG1hdGNoaW5nIHJhdGVzXG4iLApAQCAtNjQwLDcgKzY0MSw4IEBACiAJCQljb2RlY19kYWktPm5hbWUsIGNwdV9kYWktPm5hbWUpOwogCQlnb3RvIGNvbmZpZ19lcnI7CiAJfQotCWlmICghcnVudGltZS0+aHcuY2hhbm5lbHNfbWluIHx8ICFydW50aW1lLT5ody5jaGFubmVsc19tYXgpIHsKKwlpZiAoIXJ1bnRpbWUtPmh3LmNoYW5uZWxzX21pbiB8fCAhcnVudGltZS0+aHcuY2hhbm5lbHNfbWF4IHx8CisJICAgIHJ1bnRpbWUtPmh3LmNoYW5uZWxzX21pbiA+IHJ1bnRpbWUtPmh3LmNoYW5uZWxzX21heCkgewogCQlwcmludGsoS0VSTl9FUlIgImFzb2M6ICVzIDwtPiAlcyBObyBtYXRjaGluZyBjaGFubmVsc1xuIiwKIAkJCQljb2RlY19kYWktPm5hbWUsIGNwdV9kYWktPm5hbWUpOwogCQlnb3RvIGNvbmZpZ19lcnI7CkBAIC0yMDYwLDYgKzIwNjIsNyBAQAogCS5yZXN1bWUgPSBzbmRfc29jX3Jlc3VtZSwKIAkucG93ZXJvZmYgPSBzbmRfc29jX3Bvd2Vyb2ZmLAogfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfcG1fb3BzKTsKIAogLyogQVNvQyBwbGF0Zm9ybSBkcml2ZXIgKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNvY19kcml2ZXIgPSB7CkBAIC0zMjg4LDYgKzMyOTEsOCBAQAogCWlmICghY2FyZC0+bmFtZSB8fCAhY2FyZC0+ZGV2KQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWRldl9zZXRfZHJ2ZGF0YShjYXJkLT5kZXYsIGNhcmQpOworCiAJc25kX3NvY19pbml0aWFsaXplX2NhcmRfbGlzdHMoY2FyZCk7CiAKIAlzb2NfaW5pdF9jYXJkX2RlYnVnZnMoY2FyZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvdGVncmEvaGFybW9ueS5jIGIvc291bmQvc29jL3RlZ3JhL2hhcm1vbnkuYwppbmRleCA4NTg1OTU3Li41NTZhNTcxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvdGVncmEvaGFybW9ueS5jCisrKyBiL3NvdW5kL3NvYy90ZWdyYS9oYXJtb255LmMKQEAgLTM3MCw2ICszNzAsNyBAQAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gRFJWX05BTUUsCiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkucG0gPSAmc25kX3NvY19wbV9vcHMsCiAJfSwKIAkucHJvYmUgPSB0ZWdyYV9zbmRfaGFybW9ueV9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3AodGVncmFfc25kX2hhcm1vbnlfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9mb3JtYXQuYyBiL3NvdW5kL3VzYi9mb3JtYXQuYwppbmRleCA1Yjc5MmQyLi5mMDc5YjVlIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvZm9ybWF0LmMKKysrIGIvc291bmQvdXNiL2Zvcm1hdC5jCkBAIC0xNzYsOSArMTc2LDExIEBACiAJCQlpZiAoIXJhdGUpCiAJCQkJY29udGludWU7CiAJCQkvKiBDLU1lZGlhIENNNjUwMSBtaXNsYWJlbHMgaXRzIDk2IGtIeiBhbHRzZXR0aW5nICovCisJCQkvKiBUZXJyYXRlYyBBdXJlb24gNy4xIFVTQiBDLU1lZGlhIDYyMDYsIHRvbyAqLwogCQkJaWYgKHJhdGUgPT0gNDgwMDAgJiYgbnJfcmF0ZXMgPT0gMSAmJgogCQkJICAgIChjaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MGQ4YywgMHgwMjAxKSB8fAotCQkJICAgICBjaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MGQ4YywgMHgwMTAyKSkgJiYKKwkJCSAgICAgY2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDBkOGMsIDB4MDEwMikgfHwKKwkJCSAgICAgY2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDBjY2QsIDB4MDBiMSkpICYmCiAJCQkgICAgZnAtPmFsdHNldHRpbmcgPT0gNSAmJiBmcC0+bWF4cGFja3NpemUgPT0gMzkyKQogCQkJCXJhdGUgPSA5NjAwMDsKIAkJCS8qIENyZWF0aXZlIFZGMDQ3MCBMaXZlIENhbSByZXBvcnRzIDE2IGtIeiBpbnN0ZWFkIG9mIDhrSHogKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9xdWlya3MuYyBiL3NvdW5kL3VzYi9xdWlya3MuYwppbmRleCBlYzA3ZTYyLi4xYjk0ZWMzIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvcXVpcmtzLmMKKysrIGIvc291bmQvdXNiL3F1aXJrcy5jCkBAIC01MzMsNiArNTMzLDcgQEAKIAogCWNhc2UgVVNCX0lEKDB4MGQ4YywgMHgwMTAyKToKIAkJLyogQy1NZWRpYSBDTTYyMDYgLyBDTTEwNi1MaWtlIFNvdW5kIERldmljZSAqLworCWNhc2UgVVNCX0lEKDB4MGNjZCwgMHgwMGIxKTogLyogVGVycmF0ZWMgQXVyZW9uIDcuMSBVU0IgKi8KIAkJcmV0dXJuIHNuZF91c2JfY202MjA2X2Jvb3RfcXVpcmsoZGV2KTsKIAogCWNhc2UgVVNCX0lEKDB4MTMzZSwgMHgwODE1KToKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXNjcmlwdC1wZXJsLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXNjcmlwdC1wZXJsLnR4dAppbmRleCA1YmI0MWU1Li4zMTUyY2NhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1zY3JpcHQtcGVybC50eHQKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtc2NyaXB0LXBlcmwudHh0CkBAIC02Myw3ICs2Myw2IEBACiAgICAgICAgIGZpZWxkOnVuc2lnbmVkIGNoYXIgY29tbW9uX2ZsYWdzOwogICAgICAgICBmaWVsZDp1bnNpZ25lZCBjaGFyIGNvbW1vbl9wcmVlbXB0X2NvdW50OwogICAgICAgICBmaWVsZDppbnQgY29tbW9uX3BpZDsKLSAgICAgICAgZmllbGQ6aW50IGNvbW1vbl9sb2NrX2RlcHRoOwogCiAgICAgICAgIGZpZWxkOmNoYXIgY29tbVtUQVNLX0NPTU1fTEVOXTsKICAgICAgICAgZmllbGQ6cGlkX3QgcGlkOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtc2NyaXB0LXB5dGhvbi50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1zY3JpcHQtcHl0aG9uLnR4dAppbmRleCAzNmIzODI3Li40NzEwMjIwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1zY3JpcHQtcHl0aG9uLnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1zY3JpcHQtcHl0aG9uLnR4dApAQCAtNDYzLDcgKzQ2Myw2IEBACiAgICAgICAgIGZpZWxkOnVuc2lnbmVkIGNoYXIgY29tbW9uX2ZsYWdzOwogICAgICAgICBmaWVsZDp1bnNpZ25lZCBjaGFyIGNvbW1vbl9wcmVlbXB0X2NvdW50OwogICAgICAgICBmaWVsZDppbnQgY29tbW9uX3BpZDsKLSAgICAgICAgZmllbGQ6aW50IGNvbW1vbl9sb2NrX2RlcHRoOwogCiAgICAgICAgIGZpZWxkOmNoYXIgY29tbVtUQVNLX0NPTU1fTEVOXTsKICAgICAgICAgZmllbGQ6cGlkX3QgcGlkOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtc2NyaXB0LnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXNjcmlwdC50eHQKaW5kZXggNjZmMDQwYi4uODZjODdlMiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtc2NyaXB0LnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1zY3JpcHQudHh0CkBAIC0xMTMsMTMgKzExMyw2MSBAQAogICAgICAgICBEbyB2YXJpb3VzIGNoZWNrcyBsaWtlIHNhbXBsZXMgb3JkZXJpbmcgYW5kIGxvc3QgZXZlbnRzLgogCiAtZjo6Ci0tLWZpZWxkcworLS1maWVsZHM6OgogICAgICAgICBDb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBmaWVsZHMgdG8gcHJpbnQuIE9wdGlvbnMgYXJlOgogICAgICAgICBjb21tLCB0aWQsIHBpZCwgdGltZSwgY3B1LCBldmVudCwgdHJhY2UsIHN5bS4gRmllbGQKLSAgICAgICAgbGlzdCBtdXN0IGJlIHByZXBlbmRlZCB3aXRoIHRoZSB0eXBlLCB0cmFjZSwgc3cgb3IgaHcsCisgICAgICAgIGxpc3QgY2FuIGJlIHByZXBlbmRlZCB3aXRoIHRoZSB0eXBlLCB0cmFjZSwgc3cgb3IgaHcsCiAgICAgICAgIHRvIGluZGljYXRlIHRvIHdoaWNoIGV2ZW50IHR5cGUgdGhlIGZpZWxkIGxpc3QgYXBwbGllcy4KICAgICAgICAgZS5nLiwgLWYgc3c6Y29tbSx0aWQsdGltZSxzeW0gIGFuZCAtZiB0cmFjZTp0aW1lLGNwdSx0cmFjZQogCisJCXBlcmYgc2NyaXB0IC1mIDxmaWVsZHM+CisKKwlpcyBlcXVpdmFsZW50IHRvOgorCisJCXBlcmYgc2NyaXB0IC1mIHRyYWNlOjxmaWVsZHM+IC1mIHN3OjxmaWVsZHM+IC1mIGh3OjxmaWVsZHM+CisgICAgCisJaS5lLiwgdGhlIHNwZWNpZmllZCBmaWVsZHMgYXBwbHkgdG8gYWxsIGV2ZW50IHR5cGVzIGlmIHRoZSB0eXBlIHN0cmluZworCWlzIG5vdCBnaXZlbi4KKyAgICAKKwlUaGUgYXJndW1lbnRzIGFyZSBwcm9jZXNzZWQgaW4gdGhlIG9yZGVyIHJlY2VpdmVkLiBBIGxhdGVyIHVzYWdlIGNhbgorCXJlc2V0IGEgcHJpb3IgcmVxdWVzdC4gZS5nLjoKKyAgICAKKwkJLWYgdHJhY2U6IC1mIGNvbW0sdGlkLHRpbWUsc3ltCisgICAgCisJVGhlIGZpcnN0IC1mIHN1cHByZXNzZXMgdHJhY2UgZXZlbnRzIChmaWVsZCBsaXN0IGlzICIiKSwgYnV0IHRoZW4gdGhlCisJc2Vjb25kIGludm9jYXRpb24gc2V0cyB0aGUgZmllbGRzIHRvIGNvbW0sdGlkLHRpbWUsc3ltLiBJbiB0aGlzIGNhc2UgYQorCXdhcm5pbmcgaXMgZ2l2ZW4gdG8gdGhlIHVzZXI6CisgICAgCisJCSJPdmVycmlkaW5nIHByZXZpb3VzIGZpZWxkIHJlcXVlc3QgZm9yIGFsbCBldmVudHMuIgorICAgIAorCUFsdGVybmF0aXZleSwgY29uc2lkZXIgdGhlIG9yZGVyOgorICAgIAorCQktZiBjb21tLHRpZCx0aW1lLHN5bSAtZiB0cmFjZToKKyAgICAKKwlUaGUgZmlyc3QgLWYgc2V0cyB0aGUgZmllbGRzIGZvciBhbGwgZXZlbnRzIGFuZCB0aGUgc2Vjb25kIC1mCisJc3VwcHJlc3NlcyB0cmFjZSBldmVudHMuIFRoZSB1c2VyIGlzIGdpdmVuIGEgd2FybmluZyBtZXNzYWdlIGFib3V0CisJdGhlIG92ZXJyaWRlLCBhbmQgdGhlIHJlc3VsdCBvZiB0aGUgYWJvdmUgaXMgdGhhdCBvbmx5IFMvVyBhbmQgSC9XCisJZXZlbnRzIGFyZSBkaXNwbGF5ZWQgd2l0aCB0aGUgZ2l2ZW4gZmllbGRzLgorICAgIAorCUZvciB0aGUgJ3dpbGRjYXJkJyBvcHRpb24gaWYgYSB1c2VyIHNlbGVjdGVkIGZpZWxkIGlzIGludmFsaWQgZm9yIGFuCisJZXZlbnQgdHlwZSwgYSBtZXNzYWdlIGlzIGRpc3BsYXllZCB0byB0aGUgdXNlciB0aGF0IHRoZSBvcHRpb24gaXMKKwlpZ25vcmVkIGZvciB0aGF0IHR5cGUuIEZvciBleGFtcGxlOgorICAgIAorCQkkIHBlcmYgc2NyaXB0IC1mIGNvbW0sdGlkLHRyYWNlCisJCSd0cmFjZScgbm90IHZhbGlkIGZvciBoYXJkd2FyZSBldmVudHMuIElnbm9yaW5nLgorCQkndHJhY2UnIG5vdCB2YWxpZCBmb3Igc29mdHdhcmUgZXZlbnRzLiBJZ25vcmluZy4KKyAgICAKKwlBbHRlcm5hdGl2ZWx5LCBpZiB0aGUgdHlwZSBpcyBnaXZlbiBhbiBpbnZhbGlkIGZpZWxkIGlzIHNwZWNpZmllZCBpdAorCWlzIGFuIGVycm9yLiBGb3IgZXhhbXBsZToKKyAgICAKKyAgICAgICAgcGVyZiBzY3JpcHQgLXYgLWYgc3c6Y29tbSx0aWQsdHJhY2UKKyAgICAgICAgJ3RyYWNlJyBub3QgdmFsaWQgZm9yIHNvZnR3YXJlIGV2ZW50cy4KKyAgICAKKwlBdCB0aGlzIHBvaW50IHVzYWdlIGlzIGRpc3BsYXllZCwgYW5kIHBlcmYtc2NyaXB0IGV4aXRzLgorICAgIAorCUZpbmFsbHksIGEgdXNlciBtYXkgbm90IHNldCBmaWVsZHMgdG8gbm9uZSBmb3IgYWxsIGV2ZW50IHR5cGVzLgorCWkuZS4sIC1mICIiIGlzIG5vdCBhbGxvd2VkLgorCiAtazo6CiAtLXZtbGludXg9PGZpbGU+OjoKICAgICAgICAgdm1saW51eCBwYXRobmFtZQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZSBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUKaW5kZXggMjA3ZGVlNS4uMTQ1NTQxMyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9NYWtlZmlsZQorKysgYi90b29scy9wZXJmL01ha2VmaWxlCkBAIC01LDYgKzUsOCBAQAogIyBUaGUgZGVmYXVsdCB0YXJnZXQgb2YgdGhpcyBNYWtlZmlsZSBpcy4uLgogYWxsOgogCitpbmNsdWRlIGNvbmZpZy91dGlsaXRpZXMubWFrCisKIGlmbmVxICgkKE9VVFBVVCksKQogIyBjaGVjayB0aGF0IHRoZSBvdXRwdXQgZGlyZWN0b3J5IGFjdHVhbGx5IGV4aXN0cwogT1VURElSIDo9ICQoc2hlbGwgY2QgJChPVVRQVVQpICYmIC9iaW4vcHdkKQpAQCAtMTMsNiArMTUsMTIgQEAKIAogIyBEZWZpbmUgViB0byBoYXZlIGEgbW9yZSB2ZXJib3NlIGNvbXBpbGUuCiAjCisjIERlZmluZSBQWVRIT04gdG8gcG9pbnQgdG8gdGhlIHB5dGhvbiBiaW5hcnkgaWYgdGhlIGRlZmF1bHQKKyMgYHB5dGhvbicgaXMgbm90IGNvcnJlY3Q7IGZvciBleGFtcGxlOiBQWVRIT049cHl0aG9uMgorIworIyBEZWZpbmUgUFlUSE9OX0NPTkZJRyB0byBwb2ludCB0byB0aGUgcHl0aG9uLWNvbmZpZyBiaW5hcnkgaWYKKyMgdGhlIGRlZmF1bHQgYCQoUFlUSE9OKS1jb25maWcnIGlzIG5vdCBjb3JyZWN0LgorIwogIyBEZWZpbmUgQVNDSUlET0M4IGlmIHlvdSB3YW50IHRvIGZvcm1hdCBkb2N1bWVudGF0aW9uIHdpdGggQXNjaWlEb2MgOAogIwogIyBEZWZpbmUgRE9DQk9PS19YU0xfMTcyIGlmIHlvdSB3YW50IHRvIGZvcm1hdCBtYW4gcGFnZXMgd2l0aCBEb2NCb29rIFhTTCB2MS43Mi4KQEAgLTM1LDE1ICs0MywyMSBAQAogCQkJCSAgLWUgcy9wcGMuKi9wb3dlcnBjLyAtZSBzL21pcHMuKi9taXBzLyBcCiAJCQkJICAtZSBzL3NoWzIzNF0uKi9zaC8gKQogCitDQyA9ICQoQ1JPU1NfQ09NUElMRSlnY2MKK0FSID0gJChDUk9TU19DT01QSUxFKWFyCisKICMgQWRkaXRpb25hbCBBUkNIIHNldHRpbmdzIGZvciB4ODYKIGlmZXEgKCQoQVJDSCksaTM4NikKICAgICAgICAgQVJDSCA6PSB4ODYKIGVuZGlmCiBpZmVxICgkKEFSQ0gpLHg4Nl82NCkKLQlSQVdfQVJDSCA6PSB4ODZfNjQKLSAgICAgICAgQVJDSCA6PSB4ODYKLQlBUkNIX0NGTEFHUyA6PSAtREFSQ0hfWDg2XzY0Ci0JQVJDSF9JTkNMVURFID0gLi4vLi4vYXJjaC94ODYvbGliL21lbWNweV82NC5TCisJQVJDSCA6PSB4ODYKKwlJU19YODZfNjQgOj0gJChzaGVsbCBlY2hvIF9feDg2XzY0X18gfCAke0NDfSAtRSAteGMgLSB8IHRhaWwgLW4gMSkKKwlpZmVxICgke0lTX1g4Nl82NH0sIDEpCisJCVJBV19BUkNIIDo9IHg4Nl82NAorCQlBUkNIX0NGTEFHUyA6PSAtREFSQ0hfWDg2XzY0CisJCUFSQ0hfSU5DTFVERSA9IC4uLy4uL2FyY2gveDg2L2xpYi9tZW1jcHlfNjQuUworCWVuZGlmCiBlbmRpZgogCiAjCkBAIC0xMTksOCArMTMzLDYgQEAKIAogZXhwb3J0IHByZWZpeCBiaW5kaXIgc2hhcmVkaXIgc3lzY29uZmRpcgogCi1DQyA9ICQoQ1JPU1NfQ09NUElMRSlnY2MKLUFSID0gJChDUk9TU19DT01QSUxFKWFyCiBSTSA9IHJtIC1mCiBNS0RJUiA9IG1rZGlyCiBGSU5EID0gZmluZApAQCAtMTMwLDcgKzE0Miw3IEBACiAjIGV4cGxpY2l0bHkgd2hhdCBhcmNoaXRlY3R1cmUgdG8gY2hlY2sgZm9yLiBGaXggdGhpcyB1cCBmb3IgeW91cnMuLgogU1BBUlNFX0ZMQUdTID0gLURfX0JJR19FTkRJQU5fXyAtRF9fcG93ZXJwY19fCiAKLS1pbmNsdWRlIGZlYXR1cmUtdGVzdHMubWFrCistaW5jbHVkZSBjb25maWcvZmVhdHVyZS10ZXN0cy5tYWsKIAogaWZlcSAoJChjYWxsIHRyeS1jYywkKFNPVVJDRV9IRUxMTyksLVdlcnJvciAtZnN0YWNrLXByb3RlY3Rvci1hbGwpLHkpCiAJQ0ZMQUdTIDo9ICQoQ0ZMQUdTKSAtZnN0YWNrLXByb3RlY3Rvci1hbGwKQEAgLTE2NSwxMiArMTc3LDEwIEBACiBzdHJpcC1saWJzID0gJChmaWx0ZXItb3V0IC1sJSwkKDEpKQogCiAkKE9VVFBVVClweXRob24vcGVyZi5zbzogJChQWVJGX09CSlMpCi0JJChRVUlFVF9HRU4pKCBcCi0JCWV4cG9ydCBDRkxBR1M9IiQoQkFTSUNfQ0ZMQUdTKSI7IFwKLQkJcHl0aG9uIHV0aWwvc2V0dXAucHkgLS1xdWlldCAgYnVpbGRfZXh0IC0tYnVpbGQtbGliPSckKE9VVFBVVClweXRob24nIFwKLQkJCS0tYnVpbGQtdGVtcD0nJChPVVRQVVQpcHl0aG9uL3RlbXAnIFwKLQkpCi0KKwkkKFFVSUVUX0dFTilDRkxBR1M9JyQoQkFTSUNfQ0ZMQUdTKScgJChQWVRIT05fV09SRCkgdXRpbC9zZXR1cC5weSBcCisJICAtLXF1aWV0IGJ1aWxkX2V4dCBcCisJICAtLWJ1aWxkLWxpYj0nJChPVVRQVVQpcHl0aG9uJyBcCisJICAtLWJ1aWxkLXRlbXA9JyQoT1VUUFVUKXB5dGhvbi90ZW1wJwogIwogIyBObyBQZXJsIHNjcmlwdHMgcmlnaHQgbm93OgogIwpAQCAtNDc1LDI0ICs0ODUsNzQgQEAKIAllbmRpZgogZW5kaWYKIAotaWZkZWYgTk9fTElCUFlUSE9OCi0JQkFTSUNfQ0ZMQUdTICs9IC1ETk9fTElCUFlUSE9OCitkaXNhYmxlLXB5dGhvbiA9ICQoZXZhbCAkKGRpc2FibGUtcHl0aG9uX2NvZGUpKQorZGVmaW5lIGRpc2FibGUtcHl0aG9uX2NvZGUKKyAgQkFTSUNfQ0ZMQUdTICs9IC1ETk9fTElCUFlUSE9OCisgICQoaWYgJCgxKSwkKHdhcm5pbmcgTm8gJCgxKSB3YXMgZm91bmQpKQorICAkKHdhcm5pbmcgUHl0aG9uIHN1cHBvcnQgd29uJ3QgYmUgYnVpbHQpCitlbmRlZgorCitvdmVycmlkZSBQWVRIT04gOj0gXAorICAkKGNhbGwgZ2V0LWV4ZWN1dGFibGUtb3ItZGVmYXVsdCxQWVRIT04scHl0aG9uKQorCitpZm5kZWYgUFlUSE9OCisgICQoY2FsbCBkaXNhYmxlLXB5dGhvbixweXRob24gaW50ZXJwcmV0ZXIpCisgIHB5dGhvbi1jbGVhbiA6PQogZWxzZQotICAgICAgIFBZVEhPTl9FTUJFRF9MRE9QVFMgPSAkKHNoZWxsIHB5dGhvbi1jb25maWcgLS1sZGZsYWdzIDI+L2Rldi9udWxsKQotICAgICAgIFBZVEhPTl9FTUJFRF9MREZMQUdTID0gJChjYWxsIHN0cmlwLWxpYnMsJChQWVRIT05fRU1CRURfTERPUFRTKSkKLSAgICAgICBQWVRIT05fRU1CRURfTElCQUREID0gJChjYWxsIGdyZXAtbGlicywkKFBZVEhPTl9FTUJFRF9MRE9QVFMpKQotCVBZVEhPTl9FTUJFRF9DQ09QVFMgPSBgcHl0aG9uLWNvbmZpZyAtLWNmbGFncyAyPi9kZXYvbnVsbGAKLQlGTEFHU19QWVRIT05fRU1CRUQ9JChQWVRIT05fRU1CRURfQ0NPUFRTKSAkKFBZVEhPTl9FTUJFRF9MRE9QVFMpCi0JaWZuZXEgKCQoY2FsbCB0cnktY2MsJChTT1VSQ0VfUFlUSE9OX0VNQkVEKSwkKEZMQUdTX1BZVEhPTl9FTUJFRCkpLHkpCi0JCW1zZyA6PSAkKHdhcm5pbmcgTm8gUHl0aG9uLmggZm91bmQsIGluc3RhbGwgcHl0aG9uLWRldltlbF0gdG8gaGF2ZSBweXRob24gc3VwcG9ydCBpbiAncGVyZiBzY3JpcHQnIGFuZCB0byBidWlsZCB0aGUgcHl0aG9uIGJpbmRpbmdzKQotCQlCQVNJQ19DRkxBR1MgKz0gLUROT19MSUJQWVRIT04KLQllbHNlCi0gICAgICAgICAgICAgICBBTExfTERGTEFHUyArPSAkKFBZVEhPTl9FTUJFRF9MREZMQUdTKQotICAgICAgICAgICAgICAgRVhUTElCUyArPSAkKFBZVEhPTl9FTUJFRF9MSUJBREQpCi0JCUxJQl9PQkpTICs9ICQoT1VUUFVUKXV0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcHl0aG9uLm8KLQkJTElCX09CSlMgKz0gJChPVVRQVVQpc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQubwotCQlMQU5HX0JJTkRJTkdTICs9ICQoT1VUUFVUKXB5dGhvbi9wZXJmLnNvCi0JZW5kaWYKKworICBQWVRIT05fV09SRCA6PSAkKGNhbGwgc2hlbGwtd29yZGlmeSwkKFBZVEhPTikpCisKKyAgcHl0aG9uLWNsZWFuIDo9ICQoUFlUSE9OX1dPUkQpIHV0aWwvc2V0dXAucHkgY2xlYW4gXAorICAgIC0tYnVpbGQtbGliPSckKE9VVFBVVClweXRob24nIFwKKyAgICAtLWJ1aWxkLXRlbXA9JyQoT1VUUFVUKXB5dGhvbi90ZW1wJworCisgIGlmZGVmIE5PX0xJQlBZVEhPTgorICAgICQoY2FsbCBkaXNhYmxlLXB5dGhvbikKKyAgZWxzZQorCisgICAgb3ZlcnJpZGUgUFlUSE9OX0NPTkZJRyA6PSBcCisgICAgICAkKGNhbGwgZ2V0LWV4ZWN1dGFibGUtb3ItZGVmYXVsdCxQWVRIT05fQ09ORklHLCQoUFlUSE9OKS1jb25maWcpCisKKyAgICBpZm5kZWYgUFlUSE9OX0NPTkZJRworICAgICAgJChjYWxsIGRpc2FibGUtcHl0aG9uLHB5dGhvbi1jb25maWcgdG9vbCkKKyAgICBlbHNlCisKKyAgICAgIFBZVEhPTl9DT05GSUdfU1EgOj0gJChjYWxsIHNoZWxsLXNxLCQoUFlUSE9OX0NPTkZJRykpCisKKyAgICAgIFBZVEhPTl9FTUJFRF9MRE9QVFMgOj0gJChzaGVsbCAkKFBZVEhPTl9DT05GSUdfU1EpIC0tbGRmbGFncyAyPi9kZXYvbnVsbCkKKyAgICAgIFBZVEhPTl9FTUJFRF9MREZMQUdTIDo9ICQoY2FsbCBzdHJpcC1saWJzLCQoUFlUSE9OX0VNQkVEX0xET1BUUykpCisgICAgICBQWVRIT05fRU1CRURfTElCQUREIDo9ICQoY2FsbCBncmVwLWxpYnMsJChQWVRIT05fRU1CRURfTERPUFRTKSkKKyAgICAgIFBZVEhPTl9FTUJFRF9DQ09QVFMgOj0gJChzaGVsbCAkKFBZVEhPTl9DT05GSUdfU1EpIC0tY2ZsYWdzIDI+L2Rldi9udWxsKQorICAgICAgRkxBR1NfUFlUSE9OX0VNQkVEIDo9ICQoUFlUSE9OX0VNQkVEX0NDT1BUUykgJChQWVRIT05fRU1CRURfTERPUFRTKQorCisgICAgICBpZm5lcSAoJChjYWxsIHRyeS1jYywkKFNPVVJDRV9QWVRIT05fRU1CRUQpLCQoRkxBR1NfUFlUSE9OX0VNQkVEKSkseSkKKyAgICAgICAgJChjYWxsIGRpc2FibGUtcHl0aG9uLFB5dGhvbi5oIChmb3IgUHl0aG9uIDIueCkpCisgICAgICBlbHNlCisKKyAgICAgICAgaWZuZXEgKCQoY2FsbCB0cnktY2MsJChTT1VSQ0VfUFlUSE9OX1ZFUlNJT04pLCQoRkxBR1NfUFlUSE9OX0VNQkVEKSkseSkKKyAgICAgICAgICAkKHdhcm5pbmcgUHl0aG9uIDMgaXMgbm90IHlldCBzdXBwb3J0ZWQ7IHBsZWFzZSBzZXQpCisgICAgICAgICAgJCh3YXJuaW5nIFBZVEhPTiBhbmQvb3IgUFlUSE9OX0NPTkZJRyBhcHByb3ByaWF0ZWx5LikKKyAgICAgICAgICAkKHdhcm5pbmcgSWYgeW91IGFsc28gaGF2ZSBQeXRob24gMiBpbnN0YWxsZWQsIHRoZW4pCisgICAgICAgICAgJCh3YXJuaW5nIHRyeSBzb21ldGhpbmcgbGlrZTopCisgICAgICAgICAgJCh3YXJuaW5nICQoYW5kICwpKQorICAgICAgICAgICQod2FybmluZyAkKGFuZCAsKSAgbWFrZSBQWVRIT049cHl0aG9uMikKKyAgICAgICAgICAkKHdhcm5pbmcgJChhbmQgLCkpCisgICAgICAgICAgJCh3YXJuaW5nIE90aGVyd2lzZSwgZGlzYWJsZSBQeXRob24gc3VwcG9ydCBlbnRpcmVseTopCisgICAgICAgICAgJCh3YXJuaW5nICQoYW5kICwpKQorICAgICAgICAgICQod2FybmluZyAkKGFuZCAsKSAgbWFrZSBOT19MSUJQWVRIT049MSkKKyAgICAgICAgICAkKHdhcm5pbmcgJChhbmQgLCkpCisgICAgICAgICAgJChlcnJvciAgICQoYW5kICwpKQorICAgICAgICBlbHNlCisgICAgICAgICAgQUxMX0xERkxBR1MgKz0gJChQWVRIT05fRU1CRURfTERGTEFHUykKKyAgICAgICAgICBFWFRMSUJTICs9ICQoUFlUSE9OX0VNQkVEX0xJQkFERCkKKyAgICAgICAgICBMSUJfT0JKUyArPSAkKE9VVFBVVCl1dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXB5dGhvbi5vCisgICAgICAgICAgTElCX09CSlMgKz0gJChPVVRQVVQpc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQubworICAgICAgICAgIExBTkdfQklORElOR1MgKz0gJChPVVRQVVQpcHl0aG9uL3BlcmYuc28KKyAgICAgICAgZW5kaWYKKworICAgICAgZW5kaWYKKyAgICBlbmRpZgorICBlbmRpZgogZW5kaWYKIAogaWZkZWYgTk9fREVNQU5HTEUKQEAgLTgzMyw4ICs4OTMsNyBAQAogCSQoUk0pICouc3BlYyAqLnB5YyAqLnB5byAqLyoucHljICovKi5weW8gJChPVVRQVVQpY29tbW9uLWNtZHMuaCBUQUdTIHRhZ3MgY3Njb3BlKgogCSQoTUFLRSkgLUMgRG9jdW1lbnRhdGlvbi8gY2xlYW4KIAkkKFJNKSAkKE9VVFBVVClQRVJGLVZFUlNJT04tRklMRSAkKE9VVFBVVClQRVJGLUNGTEFHUwotCUBweXRob24gdXRpbC9zZXR1cC5weSBjbGVhbiAtLWJ1aWxkLWxpYj0nJChPVVRQVVQpcHl0aG9uJyBcCi0JCQkJICAgLS1idWlsZC10ZW1wPSckKE9VVFBVVClweXRob24vdGVtcCcKKwkkKHB5dGhvbi1jbGVhbikKIAogLlBIT05ZOiBhbGwgaW5zdGFsbCBjbGVhbiBzdHJpcAogLlBIT05ZOiBzaGVsbF9jb21wYXRpYmlsaXR5X3Rlc3QgcGxlYXNlX3NldF9TSEVMTF9QQVRIX3RvX2FfbW9yZV9tb2Rlcm5fc2hlbGwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYwppbmRleCA0MTY1MzgyLi4wOTc0Zjk1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCkBAIC00MjcsNyArNDI3LDcgQEAKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBldnNlbF9saXN0LT5jcHVzLT5ucjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGV2c2VsX2xpc3QtPm5yX21tYXBzOyBpKyspIHsKIAkJaWYgKGV2c2VsX2xpc3QtPm1tYXBbaV0uYmFzZSkKIAkJCW1tYXBfcmVhZCgmZXZzZWxfbGlzdC0+bW1hcFtpXSk7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXNjcmlwdC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXNjcmlwdC5jCmluZGV4IGFjNTc0ZWEuLjk3NGY2ZDMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY3JpcHQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc2NyaXB0LmMKQEAgLTQ5LDU3ICs0OSwxNjkgQEAKIH07CiAKIC8qIGRlZmF1bHQgc2V0IHRvIG1haW50YWluIGNvbXBhdGliaWxpdHkgd2l0aCBjdXJyZW50IGZvcm1hdCAqLwotc3RhdGljIHU2NCBvdXRwdXRfZmllbGRzW1BFUkZfVFlQRV9NQVhdID0gewotCVtQRVJGX1RZUEVfSEFSRFdBUkVdID0gUEVSRl9PVVRQVVRfQ09NTSB8IFBFUkZfT1VUUFVUX1RJRCB8IFwKLQkJCSAgICAgICBQRVJGX09VVFBVVF9DUFUgfCBQRVJGX09VVFBVVF9USU1FIHwgXAotCQkJICAgICAgIFBFUkZfT1VUUFVUX0VWTkFNRSB8IFBFUkZfT1VUUFVUX1NZTSwKK3N0YXRpYyBzdHJ1Y3QgeworCWJvb2wgdXNlcl9zZXQ7CisJYm9vbCB3aWxkY2FyZF9zZXQ7CisJdTY0IGZpZWxkczsKKwl1NjQgaW52YWxpZF9maWVsZHM7Cit9IG91dHB1dFtQRVJGX1RZUEVfTUFYXSA9IHsKIAotCVtQRVJGX1RZUEVfU09GVFdBUkVdID0gUEVSRl9PVVRQVVRfQ09NTSB8IFBFUkZfT1VUUFVUX1RJRCB8IFwKLQkJCSAgICAgICBQRVJGX09VVFBVVF9DUFUgfCBQRVJGX09VVFBVVF9USU1FIHwgXAotCQkJICAgICAgIFBFUkZfT1VUUFVUX0VWTkFNRSB8IFBFUkZfT1VUUFVUX1NZTSwKKwlbUEVSRl9UWVBFX0hBUkRXQVJFXSA9IHsKKwkJLnVzZXJfc2V0ID0gZmFsc2UsCiAKLQlbUEVSRl9UWVBFX1RSQUNFUE9JTlRdID0gUEVSRl9PVVRQVVRfQ09NTSB8IFBFUkZfT1VUUFVUX1RJRCB8IFwKLQkJCQkgUEVSRl9PVVRQVVRfQ1BVIHwgUEVSRl9PVVRQVVRfVElNRSB8IFwKLQkJCQkgUEVSRl9PVVRQVVRfRVZOQU1FIHwgUEVSRl9PVVRQVVRfVFJBQ0UsCisJCS5maWVsZHMgPSBQRVJGX09VVFBVVF9DT01NIHwgUEVSRl9PVVRQVVRfVElEIHwKKwkJCSAgICAgIFBFUkZfT1VUUFVUX0NQVSB8IFBFUkZfT1VUUFVUX1RJTUUgfAorCQkJICAgICAgUEVSRl9PVVRQVVRfRVZOQU1FIHwgUEVSRl9PVVRQVVRfU1lNLAorCisJCS5pbnZhbGlkX2ZpZWxkcyA9IFBFUkZfT1VUUFVUX1RSQUNFLAorCX0sCisKKwlbUEVSRl9UWVBFX1NPRlRXQVJFXSA9IHsKKwkJLnVzZXJfc2V0ID0gZmFsc2UsCisKKwkJLmZpZWxkcyA9IFBFUkZfT1VUUFVUX0NPTU0gfCBQRVJGX09VVFBVVF9USUQgfAorCQkJICAgICAgUEVSRl9PVVRQVVRfQ1BVIHwgUEVSRl9PVVRQVVRfVElNRSB8CisJCQkgICAgICBQRVJGX09VVFBVVF9FVk5BTUUgfCBQRVJGX09VVFBVVF9TWU0sCisKKwkJLmludmFsaWRfZmllbGRzID0gUEVSRl9PVVRQVVRfVFJBQ0UsCisJfSwKKworCVtQRVJGX1RZUEVfVFJBQ0VQT0lOVF0gPSB7CisJCS51c2VyX3NldCA9IGZhbHNlLAorCisJCS5maWVsZHMgPSBQRVJGX09VVFBVVF9DT01NIHwgUEVSRl9PVVRQVVRfVElEIHwKKwkJCQkgIFBFUkZfT1VUUFVUX0NQVSB8IFBFUkZfT1VUUFVUX1RJTUUgfAorCQkJCSAgUEVSRl9PVVRQVVRfRVZOQU1FIHwgUEVSRl9PVVRQVVRfVFJBQ0UsCisJfSwKKworCVtQRVJGX1RZUEVfUkFXXSA9IHsKKwkJLnVzZXJfc2V0ID0gZmFsc2UsCisKKwkJLmZpZWxkcyA9IFBFUkZfT1VUUFVUX0NPTU0gfCBQRVJGX09VVFBVVF9USUQgfAorCQkJICAgICAgUEVSRl9PVVRQVVRfQ1BVIHwgUEVSRl9PVVRQVVRfVElNRSB8CisJCQkgICAgICBQRVJGX09VVFBVVF9FVk5BTUUgfCBQRVJGX09VVFBVVF9TWU0sCisKKwkJLmludmFsaWRfZmllbGRzID0gUEVSRl9PVVRQVVRfVFJBQ0UsCisJfSwKIH07CiAKLXN0YXRpYyBib29sIG91dHB1dF9zZXRfYnlfdXNlcjsKLQotI2RlZmluZSBQUklOVF9GSUVMRCh4KSAgKG91dHB1dF9maWVsZHNbYXR0ci0+dHlwZV0gJiBQRVJGX09VVFBVVF8jI3gpCi0KLXN0YXRpYyBpbnQgcGVyZl9zZXNzaW9uX19jaGVja19hdHRyKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCi0JCQkJICAgIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIpCitzdGF0aWMgYm9vbCBvdXRwdXRfc2V0X2J5X3VzZXIodm9pZCkKIHsKKwlpbnQgajsKKwlmb3IgKGogPSAwOyBqIDwgUEVSRl9UWVBFX01BWDsgKytqKSB7CisJCWlmIChvdXRwdXRbal0udXNlcl9zZXQpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqb3V0cHV0X2ZpZWxkMnN0cihlbnVtIHBlcmZfb3V0cHV0X2ZpZWxkIGZpZWxkKQoreworCWludCBpLCBpbWF4ID0gQVJSQVlfU0laRShhbGxfb3V0cHV0X29wdGlvbnMpOworCWNvbnN0IGNoYXIgKnN0ciA9ICIiOworCisJZm9yIChpID0gMDsgaSA8IGltYXg7ICsraSkgeworCQlpZiAoYWxsX291dHB1dF9vcHRpb25zW2ldLmZpZWxkID09IGZpZWxkKSB7CisJCQlzdHIgPSBhbGxfb3V0cHV0X29wdGlvbnNbaV0uc3RyOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIHN0cjsKK30KKworI2RlZmluZSBQUklOVF9GSUVMRCh4KSAgKG91dHB1dFthdHRyLT50eXBlXS5maWVsZHMgJiBQRVJGX09VVFBVVF8jI3gpCisKK3N0YXRpYyBpbnQgcGVyZl9ldmVudF9hdHRyX19jaGVja19zdHlwZShzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyLAorCQkJCSAgdTY0IHNhbXBsZV90eXBlLCBjb25zdCBjaGFyICpzYW1wbGVfbXNnLAorCQkJCSAgZW51bSBwZXJmX291dHB1dF9maWVsZCBmaWVsZCkKK3sKKwlpbnQgdHlwZSA9IGF0dHItPnR5cGU7CisJY29uc3QgY2hhciAqZXZuYW1lOworCisJaWYgKGF0dHItPnNhbXBsZV90eXBlICYgc2FtcGxlX3R5cGUpCisJCXJldHVybiAwOworCisJaWYgKG91dHB1dFt0eXBlXS51c2VyX3NldCkgeworCQlldm5hbWUgPSBfX2V2ZW50X25hbWUoYXR0ci0+dHlwZSwgYXR0ci0+Y29uZmlnKTsKKwkJcHJfZXJyKCJTYW1wbGVzIGZvciAnJXMnIGV2ZW50IGRvIG5vdCBoYXZlICVzIGF0dHJpYnV0ZSBzZXQuICIKKwkJICAgICAgICJDYW5ub3QgcHJpbnQgJyVzJyBmaWVsZC5cbiIsCisJCSAgICAgICBldm5hbWUsIHNhbXBsZV9tc2csIG91dHB1dF9maWVsZDJzdHIoZmllbGQpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIHVzZXIgZGlkIG5vdCBhc2sgZm9yIGl0IGV4cGxpY2l0bHkgc28gcmVtb3ZlIGZyb20gdGhlIGRlZmF1bHQgbGlzdCAqLworCW91dHB1dFt0eXBlXS5maWVsZHMgJj0gfmZpZWxkOworCWV2bmFtZSA9IF9fZXZlbnRfbmFtZShhdHRyLT50eXBlLCBhdHRyLT5jb25maWcpOworCXByX2RlYnVnKCJTYW1wbGVzIGZvciAnJXMnIGV2ZW50IGRvIG5vdCBoYXZlICVzIGF0dHJpYnV0ZSBzZXQuICIKKwkJICJTa2lwcGluZyAnJXMnIGZpZWxkLlxuIiwKKwkJIGV2bmFtZSwgc2FtcGxlX21zZywgb3V0cHV0X2ZpZWxkMnN0cihmaWVsZCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGVyZl9ldnNlbF9fY2hlY2tfYXR0cihzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCisJCQkJICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQoreworCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIgPSAmZXZzZWwtPmF0dHI7CisKIAlpZiAoUFJJTlRfRklFTEQoVFJBQ0UpICYmCiAJCSFwZXJmX3Nlc3Npb25fX2hhc190cmFjZXMoc2Vzc2lvbiwgInJlY29yZCAtUiIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChQUklOVF9GSUVMRChTWU0pKSB7Ci0JCWlmICghKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfSVApKSB7Ci0JCQlwcl9lcnIoIlNhbXBsZXMgZG8gbm90IGNvbnRhaW4gSVAgZGF0YS5cbiIpOworCQlpZiAocGVyZl9ldmVudF9hdHRyX19jaGVja19zdHlwZShhdHRyLCBQRVJGX1NBTVBMRV9JUCwgIklQIiwKKwkJCQkJICAgUEVSRl9PVVRQVVRfU1lNKSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQl9CisKIAkJaWYgKCFub19jYWxsY2hhaW4gJiYKLQkJICAgICEoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9DQUxMQ0hBSU4pKQorCQkgICAgIShhdHRyLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NBTExDSEFJTikpCiAJCQlzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluID0gZmFsc2U7CiAJfQogCiAJaWYgKChQUklOVF9GSUVMRChQSUQpIHx8IFBSSU5UX0ZJRUxEKFRJRCkpICYmCi0JCSEoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9USUQpKSB7Ci0JCXByX2VycigiU2FtcGxlcyBkbyBub3QgY29udGFpbiBUSUQvUElEIGRhdGEuXG4iKTsKKwkJcGVyZl9ldmVudF9hdHRyX19jaGVja19zdHlwZShhdHRyLCBQRVJGX1NBTVBMRV9USUQsICJUSUQiLAorCQkJCSAgICAgICBQRVJGX09VVFBVVF9USUR8UEVSRl9PVVRQVVRfUElEKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCiAJaWYgKFBSSU5UX0ZJRUxEKFRJTUUpICYmCi0JCSEoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9USU1FKSkgewotCQlwcl9lcnIoIlNhbXBsZXMgZG8gbm90IGNvbnRhaW4gdGltZXN0YW1wcy5cbiIpOworCQlwZXJmX2V2ZW50X2F0dHJfX2NoZWNrX3N0eXBlKGF0dHIsIFBFUkZfU0FNUExFX1RJTUUsICJUSU1FIiwKKwkJCQkgICAgICAgUEVSRl9PVVRQVVRfVElNRSkpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KIAogCWlmIChQUklOVF9GSUVMRChDUFUpICYmCi0JCSEoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9DUFUpKSB7Ci0JCXByX2VycigiU2FtcGxlcyBkbyBub3QgY29udGFpbiBjcHUuXG4iKTsKKwkJcGVyZl9ldmVudF9hdHRyX19jaGVja19zdHlwZShhdHRyLCBQRVJGX1NBTVBMRV9DUFUsICJDUFUiLAorCQkJCSAgICAgICBQRVJGX09VVFBVVF9DUFUpKQogCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCisvKgorICogdmVyaWZ5IGFsbCB1c2VyIHJlcXVlc3RlZCBldmVudHMgZXhpc3QgYW5kIHRoZSBzYW1wbGVzCisgKiBoYXZlIHRoZSBleHBlY3RlZCBkYXRhCisgKi8KK3N0YXRpYyBpbnQgcGVyZl9zZXNzaW9uX19jaGVja19vdXRwdXRfb3B0KHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCit7CisJaW50IGo7CisJc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsOworCisJZm9yIChqID0gMDsgaiA8IFBFUkZfVFlQRV9NQVg7ICsraikgeworCQlldnNlbCA9IHBlcmZfc2Vzc2lvbl9fZmluZF9maXJzdF9ldnR5cGUoc2Vzc2lvbiwgaik7CisKKwkJLyoKKwkJICogZXZlbiBpZiBmaWVsZHMgaXMgc2V0IHRvIDAgKGllLiwgc2hvdyBub3RoaW5nKSBldmVudCBtdXN0CisJCSAqIGV4aXN0IGlmIHVzZXIgZXhwbGljaXRseSBpbmNsdWRlcyBpdCBvbiB0aGUgY29tbWFuZCBsaW5lCisJCSAqLworCQlpZiAoIWV2c2VsICYmIG91dHB1dFtqXS51c2VyX3NldCAmJiAhb3V0cHV0W2pdLndpbGRjYXJkX3NldCkgeworCQkJcHJfZXJyKCIlcyBldmVudHMgZG8gbm90IGV4aXN0LiAiCisJCQkgICAgICAgIlJlbW92ZSBjb3JyZXNwb25kaW5nIC1mIG9wdGlvbiB0byBwcm9jZWVkLlxuIiwKKwkJCSAgICAgICBldmVudF90eXBlKGopKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChldnNlbCAmJiBvdXRwdXRbal0uZmllbGRzICYmCisJCQlwZXJmX2V2c2VsX19jaGVja19hdHRyKGV2c2VsLCBzZXNzaW9uKSkKKwkJCXJldHVybiAtMTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTE2OCwxMCArMjgwLDcgQEAKIHsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyID0gJmV2c2VsLT5hdHRyOwogCi0JaWYgKG91dHB1dF9maWVsZHNbYXR0ci0+dHlwZV0gPT0gMCkKLQkJcmV0dXJuOwotCi0JaWYgKHBlcmZfc2Vzc2lvbl9fY2hlY2tfYXR0cihzZXNzaW9uLCBhdHRyKSA8IDApCisJaWYgKG91dHB1dFthdHRyLT50eXBlXS5maWVsZHMgPT0gMCkKIAkJcmV0dXJuOwogCiAJcHJpbnRfc2FtcGxlX3N0YXJ0KHNhbXBsZSwgdGhyZWFkLCBhdHRyKTsKQEAgLTQ1MSw2ICs1NjAsNyBAQAogewogCWNoYXIgKnRvazsKIAlpbnQgaSwgaW1heCA9IHNpemVvZihhbGxfb3V0cHV0X29wdGlvbnMpIC8gc2l6ZW9mKHN0cnVjdCBvdXRwdXRfb3B0aW9uKTsKKwlpbnQgajsKIAlpbnQgcmMgPSAwOwogCWNoYXIgKnN0ciA9IHN0cmR1cChhcmcpOwogCWludCB0eXBlID0gLTE7CkBAIC00NTgsNTIgKzU2OCw5OSBAQAogCWlmICghc3RyKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXRvayA9IHN0cnRvayhzdHIsICI6Iik7Ci0JaWYgKCF0b2spIHsKLQkJZnByaW50ZihzdGRlcnIsCi0JCQkiSW52YWxpZCBmaWVsZCBzdHJpbmcgLSBub3QgcHJlcGVuZGVkIHdpdGggdHlwZS4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogZmlyc3Qgd29yZCBzaG91bGQgc3RhdGUgd2hpY2ggZXZlbnQgdHlwZSB1c2VyCi0JICogaXMgc3BlY2lmeWluZyB0aGUgZmllbGRzCisJLyogZmlyc3Qgd29yZCBjYW4gc3RhdGUgZm9yIHdoaWNoIGV2ZW50IHR5cGUgdGhlIHVzZXIgaXMgc3BlY2lmeWluZworCSAqIHRoZSBmaWVsZHMuIElmIG5vIHR5cGUgZXhpc3RzLCB0aGUgc3BlY2lmaWVkIGZpZWxkcyBhcHBseSB0byBhbGwKKwkgKiBldmVudCB0eXBlcyBmb3VuZCBpbiB0aGUgZmlsZSBtaW51cyB0aGUgaW52YWxpZCBmaWVsZHMgZm9yIGEgdHlwZS4KIAkgKi8KLQlpZiAoIXN0cmNtcCh0b2ssICJodyIpKQotCQl0eXBlID0gUEVSRl9UWVBFX0hBUkRXQVJFOwotCWVsc2UgaWYgKCFzdHJjbXAodG9rLCAic3ciKSkKLQkJdHlwZSA9IFBFUkZfVFlQRV9TT0ZUV0FSRTsKLQllbHNlIGlmICghc3RyY21wKHRvaywgInRyYWNlIikpCi0JCXR5cGUgPSBQRVJGX1RZUEVfVFJBQ0VQT0lOVDsKLQllbHNlIHsKLQkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGV2ZW50IHR5cGUgaW4gZmllbGQgc3RyaW5nLiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwl0b2sgPSBzdHJjaHIoc3RyLCAnOicpOworCWlmICh0b2spIHsKKwkJKnRvayA9ICdcMCc7CisJCXRvaysrOworCQlpZiAoIXN0cmNtcChzdHIsICJodyIpKQorCQkJdHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRTsKKwkJZWxzZSBpZiAoIXN0cmNtcChzdHIsICJzdyIpKQorCQkJdHlwZSA9IFBFUkZfVFlQRV9TT0ZUV0FSRTsKKwkJZWxzZSBpZiAoIXN0cmNtcChzdHIsICJ0cmFjZSIpKQorCQkJdHlwZSA9IFBFUkZfVFlQRV9UUkFDRVBPSU5UOworCQllbHNlIGlmICghc3RyY21wKHN0ciwgInJhdyIpKQorCQkJdHlwZSA9IFBFUkZfVFlQRV9SQVc7CisJCWVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGV2ZW50IHR5cGUgaW4gZmllbGQgc3RyaW5nLlxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChvdXRwdXRbdHlwZV0udXNlcl9zZXQpCisJCQlwcl93YXJuaW5nKCJPdmVycmlkaW5nIHByZXZpb3VzIGZpZWxkIHJlcXVlc3QgZm9yICVzIGV2ZW50cy5cbiIsCisJCQkJICAgZXZlbnRfdHlwZSh0eXBlKSk7CisKKwkJb3V0cHV0W3R5cGVdLmZpZWxkcyA9IDA7CisJCW91dHB1dFt0eXBlXS51c2VyX3NldCA9IHRydWU7CisJCW91dHB1dFt0eXBlXS53aWxkY2FyZF9zZXQgPSBmYWxzZTsKKworCX0gZWxzZSB7CisJCXRvayA9IHN0cjsKKwkJaWYgKHN0cmxlbihzdHIpID09IDApIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJDYW5ub3Qgc2V0IGZpZWxkcyB0byAnbm9uZScgZm9yIGFsbCBldmVudCB0eXBlcy5cbiIpOworCQkJcmMgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAob3V0cHV0X3NldF9ieV91c2VyKCkpCisJCQlwcl93YXJuaW5nKCJPdmVycmlkaW5nIHByZXZpb3VzIGZpZWxkIHJlcXVlc3QgZm9yIGFsbCBldmVudHMuXG4iKTsKKworCQlmb3IgKGogPSAwOyBqIDwgUEVSRl9UWVBFX01BWDsgKytqKSB7CisJCQlvdXRwdXRbal0uZmllbGRzID0gMDsKKwkJCW91dHB1dFtqXS51c2VyX3NldCA9IHRydWU7CisJCQlvdXRwdXRbal0ud2lsZGNhcmRfc2V0ID0gdHJ1ZTsKKwkJfQogCX0KIAotCW91dHB1dF9maWVsZHNbdHlwZV0gPSAwOwotCXdoaWxlICgxKSB7Ci0JCXRvayA9IHN0cnRvayhOVUxMLCAiLCIpOwotCQlpZiAoIXRvaykKLQkJCWJyZWFrOworCXRvayA9IHN0cnRvayh0b2ssICIsIik7CisJd2hpbGUgKHRvaykgewogCQlmb3IgKGkgPSAwOyBpIDwgaW1heDsgKytpKSB7Ci0JCQlpZiAoc3RyY21wKHRvaywgYWxsX291dHB1dF9vcHRpb25zW2ldLnN0cikgPT0gMCkgewotCQkJCW91dHB1dF9maWVsZHNbdHlwZV0gfD0gYWxsX291dHB1dF9vcHRpb25zW2ldLmZpZWxkOworCQkJaWYgKHN0cmNtcCh0b2ssIGFsbF9vdXRwdXRfb3B0aW9uc1tpXS5zdHIpID09IDApCiAJCQkJYnJlYWs7Ci0JCQl9CiAJCX0KIAkJaWYgKGkgPT0gaW1heCkgewotCQkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGZpZWxkIHJlcXVlc3RlZC4iKTsKKwkJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBmaWVsZCByZXF1ZXN0ZWQuXG4iKTsKIAkJCXJjID0gLUVJTlZBTDsKLQkJCWJyZWFrOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAodHlwZSA9PSAtMSkgeworCQkJLyogYWRkIHVzZXIgb3B0aW9uIHRvIGFsbCBldmVudHMgdHlwZXMgZm9yCisJCQkgKiB3aGljaCBpdCBpcyB2YWxpZAorCQkJICovCisJCQlmb3IgKGogPSAwOyBqIDwgUEVSRl9UWVBFX01BWDsgKytqKSB7CisJCQkJaWYgKG91dHB1dFtqXS5pbnZhbGlkX2ZpZWxkcyAmIGFsbF9vdXRwdXRfb3B0aW9uc1tpXS5maWVsZCkgeworCQkJCQlwcl93YXJuaW5nKCJcJyVzXCcgbm90IHZhbGlkIGZvciAlcyBldmVudHMuIElnbm9yaW5nLlxuIiwKKwkJCQkJCSAgIGFsbF9vdXRwdXRfb3B0aW9uc1tpXS5zdHIsIGV2ZW50X3R5cGUoaikpOworCQkJCX0gZWxzZQorCQkJCQlvdXRwdXRbal0uZmllbGRzIHw9IGFsbF9vdXRwdXRfb3B0aW9uc1tpXS5maWVsZDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChvdXRwdXRbdHlwZV0uaW52YWxpZF9maWVsZHMgJiBhbGxfb3V0cHV0X29wdGlvbnNbaV0uZmllbGQpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlwnJXNcJyBub3QgdmFsaWQgZm9yICVzIGV2ZW50cy5cbiIsCisJCQkJCSBhbGxfb3V0cHV0X29wdGlvbnNbaV0uc3RyLCBldmVudF90eXBlKHR5cGUpKTsKKworCQkJCXJjID0gLUVJTlZBTDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCW91dHB1dFt0eXBlXS5maWVsZHMgfD0gYWxsX291dHB1dF9vcHRpb25zW2ldLmZpZWxkOworCQl9CisKKwkJdG9rID0gc3RydG9rKE5VTEwsICIsIik7CisJfQorCisJaWYgKHR5cGUgPj0gMCkgeworCQlpZiAob3V0cHV0W3R5cGVdLmZpZWxkcyA9PSAwKSB7CisJCQlwcl9kZWJ1ZygiTm8gZmllbGRzIHJlcXVlc3RlZCBmb3IgJXMgdHlwZS4gIgorCQkJCSAiRXZlbnRzIHdpbGwgbm90IGJlIGRpc3BsYXllZC5cbiIsIGV2ZW50X3R5cGUodHlwZSkpOwogCQl9CiAJfQogCi0JaWYgKG91dHB1dF9maWVsZHNbdHlwZV0gPT0gMCkgewotCQlwcl9kZWJ1ZygiTm8gZmllbGRzIHJlcXVlc3RlZCBmb3IgJXMgdHlwZS4gIgotCQkJICJFdmVudHMgd2lsbCBub3QgYmUgZGlzcGxheWVkXG4iLCBldmVudF90eXBlKHR5cGUpKTsKLQl9Ci0KLQlvdXRwdXRfc2V0X2J5X3VzZXIgPSB0cnVlOwotCitvdXQ6CiAJZnJlZShzdHIpOwogCXJldHVybiByYzsKIH0KQEAgLTgyOSw3ICs5ODYsNyBAQAogCU9QVF9TVFJJTkcoMCwgInN5bWZzIiwgJnN5bWJvbF9jb25mLnN5bWZzLCAiZGlyZWN0b3J5IiwKIAkJICAgICJMb29rIGZvciBmaWxlcyB3aXRoIHN5bWJvbHMgcmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkiKSwKIAlPUFRfQ0FMTEJBQ0soJ2YnLCAiZmllbGRzIiwgTlVMTCwgInN0ciIsCi0JCSAgICAgImNvbW1hIHNlcGFyYXRlZCBvdXRwdXQgZmllbGRzIHByZXBlbmQgd2l0aCAndHlwZTonLiBWYWxpZCB0eXBlczogaHcsc3csdHJhY2UuIEZpZWxkczogY29tbSx0aWQscGlkLHRpbWUsY3B1LGV2ZW50LHRyYWNlLHN5bSIsCisJCSAgICAgImNvbW1hIHNlcGFyYXRlZCBvdXRwdXQgZmllbGRzIHByZXBlbmQgd2l0aCAndHlwZTonLiBWYWxpZCB0eXBlczogaHcsc3csdHJhY2UscmF3LiBGaWVsZHM6IGNvbW0sdGlkLHBpZCx0aW1lLGNwdSxldmVudCx0cmFjZSxzeW0iLAogCQkgICAgIHBhcnNlX291dHB1dF9maWVsZHMpLAogCiAJT1BUX0VORCgpCkBAIC0xMDIwLDcgKzExNzcsNyBAQAogCQlzdHJ1Y3Qgc3RhdCBwZXJmX3N0YXQ7CiAJCWludCBpbnB1dDsKIAotCQlpZiAob3V0cHV0X3NldF9ieV91c2VyKSB7CisJCWlmIChvdXRwdXRfc2V0X2J5X3VzZXIoKSkgewogCQkJZnByaW50ZihzdGRlcnIsCiAJCQkJImN1c3RvbSBmaWVsZHMgbm90IHN1cHBvcnRlZCBmb3IgZ2VuZXJhdGVkIHNjcmlwdHMiKTsKIAkJCXJldHVybiAtMTsKQEAgLTEwNjAsNiArMTIxNywxMSBAQAogCQlwcl9kZWJ1ZygicGVyZiBzY3JpcHQgc3RhcnRlZCB3aXRoIHNjcmlwdCAlc1xuXG4iLCBzY3JpcHRfbmFtZSk7CiAJfQogCisKKwllcnIgPSBwZXJmX3Nlc3Npb25fX2NoZWNrX291dHB1dF9vcHQoc2Vzc2lvbik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCiAJZXJyID0gX19jbWRfc2NyaXB0KHNlc3Npb24pOwogCiAJcGVyZl9zZXNzaW9uX19kZWxldGUoc2Vzc2lvbik7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYwppbmRleCAwM2YwZTQ1Li5hOWYwNjcxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKQEAgLTYsMjQgKzYsMjggQEAKICAqCiAgKiBTYW1wbGUgb3V0cHV0OgogCi0gICAkIHBlcmYgc3RhdCB+L2hhY2tiZW5jaCAxMAotICAgVGltZTogMC4xMDQKKyAgICQgcGVyZiBzdGF0IC4vaGFja2JlbmNoIDEwCiAKLSAgICBQZXJmb3JtYW5jZSBjb3VudGVyIHN0YXRzIGZvciAnL2hvbWUvbWluZ28vaGFja2JlbmNoJzoKKyAgVGltZTogMC4xMTgKIAotICAgICAgIDEyNTUuNTM4NjExICB0YXNrIGNsb2NrIHRpY2tzICAgICAjICAgICAgMTAuMTQzIENQVSB1dGlsaXphdGlvbiBmYWN0b3IKLSAgICAgICAgICAgICA1NDAxMSAgY29udGV4dCBzd2l0Y2hlcyAgICAgIyAgICAgICAwLjA0MyBNL3NlYwotICAgICAgICAgICAgICAgMzg1ICBDUFUgbWlncmF0aW9ucyAgICAgICAjICAgICAgIDAuMDAwIE0vc2VjCi0gICAgICAgICAgICAgMTc3NTUgIHBhZ2VmYXVsdHMgICAgICAgICAgICMgICAgICAgMC4wMTQgTS9zZWMKLSAgICAgICAgMzgwODMyMzE4NSAgQ1BVIGN5Y2xlcyAgICAgICAgICAgIyAgICAzMDMzLjIxOSBNL3NlYwotICAgICAgICAxNTc1MTExMTkwICBpbnN0cnVjdGlvbnMgICAgICAgICAjICAgIDEyNTQuNTMwIE0vc2VjCi0gICAgICAgICAgMTczNjc4OTUgIGNhY2hlIHJlZmVyZW5jZXMgICAgICMgICAgICAxMy44MzMgTS9zZWMKLSAgICAgICAgICAgNzY3NDQyMSAgY2FjaGUgbWlzc2VzICAgICAgICAgIyAgICAgICA2LjExMiBNL3NlYworICBQZXJmb3JtYW5jZSBjb3VudGVyIHN0YXRzIGZvciAnLi9oYWNrYmVuY2ggMTAnOgogCi0gICAgV2FsbC1jbG9jayB0aW1lIGVsYXBzZWQ6ICAgMTIzLjc4NjYyMCBtc2VjcworICAgICAgIDE3MDguNzYxMzIxIHRhc2stY2xvY2sgICAgICAgICAgICAgICAgIyAgIDExLjAzNyBDUFVzIHV0aWxpemVkCisgICAgICAgICAgICA0MSwxOTAgY29udGV4dC1zd2l0Y2hlcyAgICAgICAgICAjICAgIDAuMDI0IE0vc2VjCisgICAgICAgICAgICAgNiw3MzUgQ1BVLW1pZ3JhdGlvbnMgICAgICAgICAgICAjICAgIDAuMDA0IE0vc2VjCisgICAgICAgICAgICAxNywzMTggcGFnZS1mYXVsdHMgICAgICAgICAgICAgICAjICAgIDAuMDEwIE0vc2VjCisgICAgIDUsMjA1LDIwMiwyNDMgY3ljbGVzICAgICAgICAgICAgICAgICAgICAjICAgIDMuMDQ2IEdIegorICAgICAzLDg1Niw0MzYsOTIwIHN0YWxsZWQtY3ljbGVzLWZyb250ZW5kICAgIyAgIDc0LjA5JSBmcm9udGVuZCBjeWNsZXMgaWRsZQorICAgICAxLDYwMCw3OTAsODcxIHN0YWxsZWQtY3ljbGVzLWJhY2tlbmQgICAgIyAgIDMwLjc1JSBiYWNrZW5kICBjeWNsZXMgaWRsZQorICAgICAyLDYwMyw1MDEsMjQ3IGluc3RydWN0aW9ucyAgICAgICAgICAgICAgIyAgICAwLjUwICBpbnNucyBwZXIgY3ljbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgMS40OCAgc3RhbGxlZCBjeWNsZXMgcGVyIGluc24KKyAgICAgICA0ODQsMzU3LDQ5OCBicmFuY2hlcyAgICAgICAgICAgICAgICAgICMgIDI4My40NTUgTS9zZWMKKyAgICAgICAgIDYsMzg4LDkzNCBicmFuY2gtbWlzc2VzICAgICAgICAgICAgICMgICAgMS4zMiUgb2YgYWxsIGJyYW5jaGVzCisKKyAgICAgICAgMC4xNTQ4MjI5NzggIHNlY29uZHMgdGltZSBlbGFwc2VkCiAKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIFJlZCBIYXQgSW5jLCBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDExLCBSZWQgSGF0IEluYywgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CiAgKgogICogSW1wcm92ZW1lbnRzIGFuZCBmaXhlcyBieToKICAqCkBAIC00Niw2ICs1MCw3IEBACiAjaW5jbHVkZSAidXRpbC9ldmxpc3QuaCIKICNpbmNsdWRlICJ1dGlsL2V2c2VsLmgiCiAjaW5jbHVkZSAidXRpbC9kZWJ1Zy5oIgorI2luY2x1ZGUgInV0aWwvY29sb3IuaCIKICNpbmNsdWRlICJ1dGlsL2hlYWRlci5oIgogI2luY2x1ZGUgInV0aWwvY3B1bWFwLmgiCiAjaW5jbHVkZSAidXRpbC90aHJlYWQuaCIKQEAgLTY1LDE0ICs3MCwxMDcgQEAKICAgeyAudHlwZSA9IFBFUkZfVFlQRV9TT0ZUV0FSRSwgLmNvbmZpZyA9IFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFMJCX0sCiAKICAgeyAudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSwgLmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUwkJfSwKKyAgeyAudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSwgLmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfU1RBTExFRF9DWUNMRVNfRlJPTlRFTkQJfSwKKyAgeyAudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSwgLmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfU1RBTExFRF9DWUNMRVNfQkFDS0VORAl9LAogICB7IC50eXBlID0gUEVSRl9UWVBFX0hBUkRXQVJFLCAuY29uZmlnID0gUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlMJCX0sCiAgIHsgLnR5cGUgPSBQRVJGX1RZUEVfSEFSRFdBUkUsIC5jb25maWcgPSBQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlMJfSwKICAgeyAudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSwgLmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFUwkJfSwKLSAgeyAudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSwgLmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFUwl9LAotICB7IC50eXBlID0gUEVSRl9UWVBFX0hBUkRXQVJFLCAuY29uZmlnID0gUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVMJCX0sCiAKIH07CiAKKy8qCisgKiBEZXRhaWxlZCBzdGF0cyAoLWQpLCBjb3ZlcmluZyB0aGUgTDEgYW5kIGxhc3QgbGV2ZWwgZGF0YSBjYWNoZXM6CisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGRldGFpbGVkX2F0dHJzW10gPSB7CisKKyAgeyAudHlwZSA9IFBFUkZfVFlQRV9IV19DQUNIRSwKKyAgICAuY29uZmlnID0KKwkgUEVSRl9DT1VOVF9IV19DQUNIRV9MMUQJCTw8ICAwICB8CisJKFBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfUkVBRAkJPDwgIDgpIHwKKwkoUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfQUNDRVNTCTw8IDE2KQkJCQl9LAorCisgIHsgLnR5cGUgPSBQRVJGX1RZUEVfSFdfQ0FDSEUsCisgICAgLmNvbmZpZyA9CisJIFBFUkZfQ09VTlRfSFdfQ0FDSEVfTDFECQk8PCAgMCAgfAorCShQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX1JFQUQJCTw8ICA4KSB8CisJKFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01JU1MJPDwgMTYpCQkJCX0sCisKKyAgeyAudHlwZSA9IFBFUkZfVFlQRV9IV19DQUNIRSwKKyAgICAuY29uZmlnID0KKwkgUEVSRl9DT1VOVF9IV19DQUNIRV9MTAkJCTw8ICAwICB8CisJKFBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfUkVBRAkJPDwgIDgpIHwKKwkoUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfQUNDRVNTCTw8IDE2KQkJCQl9LAorCisgIHsgLnR5cGUgPSBQRVJGX1RZUEVfSFdfQ0FDSEUsCisgICAgLmNvbmZpZyA9CisJIFBFUkZfQ09VTlRfSFdfQ0FDSEVfTEwJCQk8PCAgMCAgfAorCShQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX1JFQUQJCTw8ICA4KSB8CisJKFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01JU1MJPDwgMTYpCQkJCX0sCit9OworCisvKgorICogVmVyeSBkZXRhaWxlZCBzdGF0cyAoLWQgLWQpLCBjb3ZlcmluZyB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGUgYW5kIHRoZSBUTEIgY2FjaGVzOgorICovCitzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciB2ZXJ5X2RldGFpbGVkX2F0dHJzW10gPSB7CisKKyAgeyAudHlwZSA9IFBFUkZfVFlQRV9IV19DQUNIRSwKKyAgICAuY29uZmlnID0KKwkgUEVSRl9DT1VOVF9IV19DQUNIRV9MMUkJCTw8ICAwICB8CisJKFBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfUkVBRAkJPDwgIDgpIHwKKwkoUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfQUNDRVNTCTw8IDE2KQkJCQl9LAorCisgIHsgLnR5cGUgPSBQRVJGX1RZUEVfSFdfQ0FDSEUsCisgICAgLmNvbmZpZyA9CisJIFBFUkZfQ09VTlRfSFdfQ0FDSEVfTDFJCQk8PCAgMCAgfAorCShQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX1JFQUQJCTw8ICA4KSB8CisJKFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01JU1MJPDwgMTYpCQkJCX0sCisKKyAgeyAudHlwZSA9IFBFUkZfVFlQRV9IV19DQUNIRSwKKyAgICAuY29uZmlnID0KKwkgUEVSRl9DT1VOVF9IV19DQUNIRV9EVExCCQk8PCAgMCAgfAorCShQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX1JFQUQJCTw8ICA4KSB8CisJKFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX0FDQ0VTUwk8PCAxNikJCQkJfSwKKworICB7IC50eXBlID0gUEVSRl9UWVBFX0hXX0NBQ0hFLAorICAgIC5jb25maWcgPQorCSBQRVJGX0NPVU5UX0hXX0NBQ0hFX0RUTEIJCTw8ICAwICB8CisJKFBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfUkVBRAkJPDwgIDgpIHwKKwkoUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUlTUwk8PCAxNikJCQkJfSwKKworICB7IC50eXBlID0gUEVSRl9UWVBFX0hXX0NBQ0hFLAorICAgIC5jb25maWcgPQorCSBQRVJGX0NPVU5UX0hXX0NBQ0hFX0lUTEIJCTw8ICAwICB8CisJKFBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfUkVBRAkJPDwgIDgpIHwKKwkoUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfQUNDRVNTCTw8IDE2KQkJCQl9LAorCisgIHsgLnR5cGUgPSBQRVJGX1RZUEVfSFdfQ0FDSEUsCisgICAgLmNvbmZpZyA9CisJIFBFUkZfQ09VTlRfSFdfQ0FDSEVfSVRMQgkJPDwgIDAgIHwKKwkoUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9SRUFECQk8PCAgOCkgfAorCShQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NSVNTCTw8IDE2KQkJCQl9LAorCit9OworCisvKgorICogVmVyeSwgdmVyeSBkZXRhaWxlZCBzdGF0cyAoLWQgLWQgLWQpLCBhZGRpbmcgcHJlZmV0Y2ggZXZlbnRzOgorICovCitzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciB2ZXJ5X3ZlcnlfZGV0YWlsZWRfYXR0cnNbXSA9IHsKKworICB7IC50eXBlID0gUEVSRl9UWVBFX0hXX0NBQ0hFLAorICAgIC5jb25maWcgPQorCSBQRVJGX0NPVU5UX0hXX0NBQ0hFX0wxRAkJPDwgIDAgIHwKKwkoUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9QUkVGRVRDSAk8PCAgOCkgfAorCShQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9BQ0NFU1MJPDwgMTYpCQkJCX0sCisKKyAgeyAudHlwZSA9IFBFUkZfVFlQRV9IV19DQUNIRSwKKyAgICAuY29uZmlnID0KKwkgUEVSRl9DT1VOVF9IV19DQUNIRV9MMUQJCTw8ICAwICB8CisJKFBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfUFJFRkVUQ0gJPDwgIDgpIHwKKwkoUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUlTUwk8PCAxNikJCQkJfSwKK307CisKKworCiBzdHJ1Y3QgcGVyZl9ldmxpc3QJCSpldnNlbF9saXN0OwogCiBzdGF0aWMgYm9vbAkJCXN5c3RlbV93aWRlCQkJPSAgZmFsc2U7CkBAIC04Niw2ICsxODQsOCBAQAogc3RhdGljIHBpZF90CQkJdGFyZ2V0X3RpZAkJCT0gLTE7CiBzdGF0aWMgcGlkX3QJCQljaGlsZF9waWQJCQk9IC0xOwogc3RhdGljIGJvb2wJCQludWxsX3J1bgkJCT0gIGZhbHNlOworc3RhdGljIGludAkJCWRldGFpbGVkX3J1bgkJCT0gIDA7CitzdGF0aWMgYm9vbAkJCXN5bmNfcnVuCQkJPSAgZmFsc2U7CiBzdGF0aWMgYm9vbAkJCWJpZ19udW0JCQkJPSAgdHJ1ZTsKIHN0YXRpYyBpbnQJCQliaWdfbnVtX29wdAkJCT0gIC0xOwogc3RhdGljIGNvbnN0IGNoYXIJCSpjcHVfbGlzdDsKQEAgLTE1Niw3ICsyNTYsMTUgQEAKIAogc3RydWN0IHN0YXRzCQkJcnVudGltZV9uc2Vjc19zdGF0c1tNQVhfTlJfQ1BVU107CiBzdHJ1Y3Qgc3RhdHMJCQlydW50aW1lX2N5Y2xlc19zdGF0c1tNQVhfTlJfQ1BVU107CitzdHJ1Y3Qgc3RhdHMJCQlydW50aW1lX3N0YWxsZWRfY3ljbGVzX2Zyb250X3N0YXRzW01BWF9OUl9DUFVTXTsKK3N0cnVjdCBzdGF0cwkJCXJ1bnRpbWVfc3RhbGxlZF9jeWNsZXNfYmFja19zdGF0c1tNQVhfTlJfQ1BVU107CiBzdHJ1Y3Qgc3RhdHMJCQlydW50aW1lX2JyYW5jaGVzX3N0YXRzW01BWF9OUl9DUFVTXTsKK3N0cnVjdCBzdGF0cwkJCXJ1bnRpbWVfY2FjaGVyZWZzX3N0YXRzW01BWF9OUl9DUFVTXTsKK3N0cnVjdCBzdGF0cwkJCXJ1bnRpbWVfbDFfZGNhY2hlX3N0YXRzW01BWF9OUl9DUFVTXTsKK3N0cnVjdCBzdGF0cwkJCXJ1bnRpbWVfbDFfaWNhY2hlX3N0YXRzW01BWF9OUl9DUFVTXTsKK3N0cnVjdCBzdGF0cwkJCXJ1bnRpbWVfbGxfY2FjaGVfc3RhdHNbTUFYX05SX0NQVVNdOworc3RydWN0IHN0YXRzCQkJcnVudGltZV9pdGxiX2NhY2hlX3N0YXRzW01BWF9OUl9DUFVTXTsKK3N0cnVjdCBzdGF0cwkJCXJ1bnRpbWVfZHRsYl9jYWNoZV9zdGF0c1tNQVhfTlJfQ1BVU107CiBzdHJ1Y3Qgc3RhdHMJCQl3YWxsdGltZV9uc2Vjc19zdGF0czsKIAogc3RhdGljIGludCBjcmVhdGVfcGVyZl9zdGF0X2NvdW50ZXIoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsKQpAQCAtMTkzLDYgKzMwMSwzNyBAQAogfQogCiAvKgorICogVXBkYXRlIHZhcmlvdXMgdHJhY2tpbmcgdmFsdWVzIHdlIG1haW50YWluIHRvIHByaW50CisgKiBtb3JlIHNlbWFudGljIGluZm9ybWF0aW9uIHN1Y2ggYXMgbWlzcy9oaXQgcmF0aW9zLAorICogaW5zdHJ1Y3Rpb24gcmF0ZXMsIGV0YzoKKyAqLworc3RhdGljIHZvaWQgdXBkYXRlX3NoYWRvd19zdGF0cyhzdHJ1Y3QgcGVyZl9ldnNlbCAqY291bnRlciwgdTY0ICpjb3VudCkKK3sKKwlpZiAocGVyZl9ldnNlbF9fbWF0Y2goY291bnRlciwgU09GVFdBUkUsIFNXX1RBU0tfQ0xPQ0spKQorCQl1cGRhdGVfc3RhdHMoJnJ1bnRpbWVfbnNlY3Nfc3RhdHNbMF0sIGNvdW50WzBdKTsKKwllbHNlIGlmIChwZXJmX2V2c2VsX19tYXRjaChjb3VudGVyLCBIQVJEV0FSRSwgSFdfQ1BVX0NZQ0xFUykpCisJCXVwZGF0ZV9zdGF0cygmcnVudGltZV9jeWNsZXNfc3RhdHNbMF0sIGNvdW50WzBdKTsKKwllbHNlIGlmIChwZXJmX2V2c2VsX19tYXRjaChjb3VudGVyLCBIQVJEV0FSRSwgSFdfU1RBTExFRF9DWUNMRVNfRlJPTlRFTkQpKQorCQl1cGRhdGVfc3RhdHMoJnJ1bnRpbWVfc3RhbGxlZF9jeWNsZXNfZnJvbnRfc3RhdHNbMF0sIGNvdW50WzBdKTsKKwllbHNlIGlmIChwZXJmX2V2c2VsX19tYXRjaChjb3VudGVyLCBIQVJEV0FSRSwgSFdfU1RBTExFRF9DWUNMRVNfQkFDS0VORCkpCisJCXVwZGF0ZV9zdGF0cygmcnVudGltZV9zdGFsbGVkX2N5Y2xlc19iYWNrX3N0YXRzWzBdLCBjb3VudFswXSk7CisJZWxzZSBpZiAocGVyZl9ldnNlbF9fbWF0Y2goY291bnRlciwgSEFSRFdBUkUsIEhXX0JSQU5DSF9JTlNUUlVDVElPTlMpKQorCQl1cGRhdGVfc3RhdHMoJnJ1bnRpbWVfYnJhbmNoZXNfc3RhdHNbMF0sIGNvdW50WzBdKTsKKwllbHNlIGlmIChwZXJmX2V2c2VsX19tYXRjaChjb3VudGVyLCBIQVJEV0FSRSwgSFdfQ0FDSEVfUkVGRVJFTkNFUykpCisJCXVwZGF0ZV9zdGF0cygmcnVudGltZV9jYWNoZXJlZnNfc3RhdHNbMF0sIGNvdW50WzBdKTsKKwllbHNlIGlmIChwZXJmX2V2c2VsX19tYXRjaChjb3VudGVyLCBIV19DQUNIRSwgSFdfQ0FDSEVfTDFEKSkKKwkJdXBkYXRlX3N0YXRzKCZydW50aW1lX2wxX2RjYWNoZV9zdGF0c1swXSwgY291bnRbMF0pOworCWVsc2UgaWYgKHBlcmZfZXZzZWxfX21hdGNoKGNvdW50ZXIsIEhXX0NBQ0hFLCBIV19DQUNIRV9MMUkpKQorCQl1cGRhdGVfc3RhdHMoJnJ1bnRpbWVfbDFfaWNhY2hlX3N0YXRzWzBdLCBjb3VudFswXSk7CisJZWxzZSBpZiAocGVyZl9ldnNlbF9fbWF0Y2goY291bnRlciwgSFdfQ0FDSEUsIEhXX0NBQ0hFX0xMKSkKKwkJdXBkYXRlX3N0YXRzKCZydW50aW1lX2xsX2NhY2hlX3N0YXRzWzBdLCBjb3VudFswXSk7CisJZWxzZSBpZiAocGVyZl9ldnNlbF9fbWF0Y2goY291bnRlciwgSFdfQ0FDSEUsIEhXX0NBQ0hFX0RUTEIpKQorCQl1cGRhdGVfc3RhdHMoJnJ1bnRpbWVfZHRsYl9jYWNoZV9zdGF0c1swXSwgY291bnRbMF0pOworCWVsc2UgaWYgKHBlcmZfZXZzZWxfX21hdGNoKGNvdW50ZXIsIEhXX0NBQ0hFLCBIV19DQUNIRV9JVExCKSkKKwkJdXBkYXRlX3N0YXRzKCZydW50aW1lX2l0bGJfY2FjaGVfc3RhdHNbMF0sIGNvdW50WzBdKTsKK30KKworLyoKICAqIFJlYWQgb3V0IHRoZSByZXN1bHRzIG9mIGEgc2luZ2xlIGNvdW50ZXI6CiAgKiBhZ2dyZWdhdGUgY291bnRzIGFjcm9zcyBDUFVzIGluIHN5c3RlbS13aWRlIG1vZGUKICAqLwpAQCAtMjE3LDEyICszNTYsNyBAQAogCS8qCiAJICogU2F2ZSB0aGUgZnVsbCBydW50aW1lIC0gdG8gYWxsb3cgbm9ybWFsaXphdGlvbiBkdXJpbmcgcHJpbnRvdXQ6CiAJICovCi0JaWYgKHBlcmZfZXZzZWxfX21hdGNoKGNvdW50ZXIsIFNPRlRXQVJFLCBTV19UQVNLX0NMT0NLKSkKLQkJdXBkYXRlX3N0YXRzKCZydW50aW1lX25zZWNzX3N0YXRzWzBdLCBjb3VudFswXSk7Ci0JaWYgKHBlcmZfZXZzZWxfX21hdGNoKGNvdW50ZXIsIEhBUkRXQVJFLCBIV19DUFVfQ1lDTEVTKSkKLQkJdXBkYXRlX3N0YXRzKCZydW50aW1lX2N5Y2xlc19zdGF0c1swXSwgY291bnRbMF0pOwotCWlmIChwZXJmX2V2c2VsX19tYXRjaChjb3VudGVyLCBIQVJEV0FSRSwgSFdfQlJBTkNIX0lOU1RSVUNUSU9OUykpCi0JCXVwZGF0ZV9zdGF0cygmcnVudGltZV9icmFuY2hlc19zdGF0c1swXSwgY291bnRbMF0pOworCXVwZGF0ZV9zaGFkb3dfc3RhdHMoY291bnRlciwgY291bnQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNDIsMTIgKzM3Niw3IEBACiAKIAkJY291bnQgPSBjb3VudGVyLT5jb3VudHMtPmNwdVtjcHVdLnZhbHVlczsKIAotCQlpZiAocGVyZl9ldnNlbF9fbWF0Y2goY291bnRlciwgU09GVFdBUkUsIFNXX1RBU0tfQ0xPQ0spKQotCQkJdXBkYXRlX3N0YXRzKCZydW50aW1lX25zZWNzX3N0YXRzW2NwdV0sIGNvdW50WzBdKTsKLQkJaWYgKHBlcmZfZXZzZWxfX21hdGNoKGNvdW50ZXIsIEhBUkRXQVJFLCBIV19DUFVfQ1lDTEVTKSkKLQkJCXVwZGF0ZV9zdGF0cygmcnVudGltZV9jeWNsZXNfc3RhdHNbY3B1XSwgY291bnRbMF0pOwotCQlpZiAocGVyZl9ldnNlbF9fbWF0Y2goY291bnRlciwgSEFSRFdBUkUsIEhXX0JSQU5DSF9JTlNUUlVDVElPTlMpKQotCQkJdXBkYXRlX3N0YXRzKCZydW50aW1lX2JyYW5jaGVzX3N0YXRzW2NwdV0sIGNvdW50WzBdKTsKKwkJdXBkYXRlX3NoYWRvd19zdGF0cyhjb3VudGVyLCBjb3VudCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0zMTUsMTMgKzQ0NCwxOCBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjb3VudGVyLCAmZXZzZWxfbGlzdC0+ZW50cmllcywgbm9kZSkgewogCQlpZiAoY3JlYXRlX3BlcmZfc3RhdF9jb3VudGVyKGNvdW50ZXIpIDwgMCkgewotCQkJaWYgKGVycm5vID09IC1FUEVSTSB8fCBlcnJubyA9PSAtRUFDQ0VTKSB7CisJCQlpZiAoZXJybm8gPT0gRUlOVkFMIHx8IGVycm5vID09IEVOT1NZUyB8fCBlcnJubyA9PSBFTk9FTlQpIHsKKwkJCQlpZiAodmVyYm9zZSkKKwkJCQkJdWlfX3dhcm5pbmcoIiVzIGV2ZW50IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGtlcm5lbC5cbiIsCisJCQkJCQkgICAgZXZlbnRfbmFtZShjb3VudGVyKSk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmIChlcnJubyA9PSBFUEVSTSB8fCBlcnJubyA9PSBFQUNDRVMpIHsKIAkJCQllcnJvcigiWW91IG1heSBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGNvbGxlY3QgJXNzdGF0cy5cbiIKIAkJCQkgICAgICAiXHQgQ29uc2lkZXIgdHdlYWtpbmciCiAJCQkJICAgICAgIiAvcHJvYy9zeXMva2VybmVsL3BlcmZfZXZlbnRfcGFyYW5vaWQgb3IgcnVubmluZyBhcyByb290LiIsCiAJCQkJICAgICAgc3lzdGVtX3dpZGUgPyAic3lzdGVtLXdpZGUgIiA6ICIiKTsKLQkJCX0gZWxzZSBpZiAoZXJybm8gPT0gRU5PRU5UKSB7Ci0JCQkJZXJyb3IoIiVzIGV2ZW50IGlzIG5vdCBzdXBwb3J0ZWQuICIsIGV2ZW50X25hbWUoY291bnRlcikpOwogCQkJfSBlbHNlIHsKIAkJCQllcnJvcigib3Blbl9jb3VudGVyIHJldHVybmVkIHdpdGggJWQgKCVzKS4gIgogCQkJCSAgICAgICIvYmluL2RtZXNnIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uXG4iLApAQCAtMzcyLDYgKzUwNiwxNiBAQAogCXJldHVybiBXRVhJVFNUQVRVUyhzdGF0dXMpOwogfQogCitzdGF0aWMgdm9pZCBwcmludF9ub2lzZV9wY3QoZG91YmxlIHRvdGFsLCBkb3VibGUgYXZnKQoreworCWRvdWJsZSBwY3QgPSAwLjA7CisKKwlpZiAoYXZnKQorCQlwY3QgPSAxMDAuMCp0b3RhbC9hdmc7CisKKwlmcHJpbnRmKHN0ZGVyciwgIiAgKCArLSU2LjJmJSUgKSIsIHBjdCk7Cit9CisKIHN0YXRpYyB2b2lkIHByaW50X25vaXNlKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwgZG91YmxlIGF2ZykKIHsKIAlzdHJ1Y3QgcGVyZl9zdGF0ICpwczsKQEAgLTM4MCwxNSArNTI0LDE0IEBACiAJCXJldHVybjsKIAogCXBzID0gZXZzZWwtPnByaXY7Ci0JZnByaW50ZihzdGRlcnIsICIgICAoICstICU3LjNmJSUgKSIsCi0JCQkxMDAgKiBzdGRkZXZfc3RhdHMoJnBzLT5yZXNfc3RhdHNbMF0pIC8gYXZnKTsKKwlwcmludF9ub2lzZV9wY3Qoc3RkZGV2X3N0YXRzKCZwcy0+cmVzX3N0YXRzWzBdKSwgYXZnKTsKIH0KIAogc3RhdGljIHZvaWQgbnNlY19wcmludG91dChpbnQgY3B1LCBzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsIGRvdWJsZSBhdmcpCiB7CiAJZG91YmxlIG1zZWNzID0gYXZnIC8gMWU2OwogCWNoYXIgY3B1c3RyWzE2XSA9IHsgJ1wwJywgfTsKLQljb25zdCBjaGFyICpmbXQgPSBjc3Zfb3V0cHV0ID8gIiVzJS42ZiVzJXMiIDogIiVzJTE4LjZmJXMlLTI0cyI7CisJY29uc3QgY2hhciAqZm10ID0gY3N2X291dHB1dCA/ICIlcyUuNmYlcyVzIiA6ICIlcyUxOC42ZiVzJS0yNXMiOwogCiAJaWYgKG5vX2FnZ3IpCiAJCXNwcmludGYoY3B1c3RyLCAiQ1BVJSpkJXMiLApAQCAtNDA0LDggKzU0NywxOTEgQEAKIAkJcmV0dXJuOwogCiAJaWYgKHBlcmZfZXZzZWxfX21hdGNoKGV2c2VsLCBTT0ZUV0FSRSwgU1dfVEFTS19DTE9DSykpCi0JCWZwcmludGYoc3RkZXJyLCAiICMgJTEwLjNmIENQVXMgIiwKLQkJCQlhdmcgLyBhdmdfc3RhdHMoJndhbGx0aW1lX25zZWNzX3N0YXRzKSk7CisJCWZwcmludGYoc3RkZXJyLCAiICMgJTguM2YgQ1BVcyB1dGlsaXplZCAgICAgICAgICAiLCBhdmcgLyBhdmdfc3RhdHMoJndhbGx0aW1lX25zZWNzX3N0YXRzKSk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3N0YWxsZWRfY3ljbGVzX2Zyb250ZW5kKGludCBjcHUsIHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCBfX3VzZWQsIGRvdWJsZSBhdmcpCit7CisJZG91YmxlIHRvdGFsLCByYXRpbyA9IDAuMDsKKwljb25zdCBjaGFyICpjb2xvcjsKKworCXRvdGFsID0gYXZnX3N0YXRzKCZydW50aW1lX2N5Y2xlc19zdGF0c1tjcHVdKTsKKworCWlmICh0b3RhbCkKKwkJcmF0aW8gPSBhdmcgLyB0b3RhbCAqIDEwMC4wOworCisJY29sb3IgPSBQRVJGX0NPTE9SX05PUk1BTDsKKwlpZiAocmF0aW8gPiA1MC4wKQorCQljb2xvciA9IFBFUkZfQ09MT1JfUkVEOworCWVsc2UgaWYgKHJhdGlvID4gMzAuMCkKKwkJY29sb3IgPSBQRVJGX0NPTE9SX01BR0VOVEE7CisJZWxzZSBpZiAocmF0aW8gPiAxMC4wKQorCQljb2xvciA9IFBFUkZfQ09MT1JfWUVMTE9XOworCisJZnByaW50ZihzdGRlcnIsICIgIyAgIik7CisJY29sb3JfZnByaW50ZihzdGRlcnIsIGNvbG9yLCAiJTYuMmYlJSIsIHJhdGlvKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiBmcm9udGVuZCBjeWNsZXMgaWRsZSAgICIpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9zdGFsbGVkX2N5Y2xlc19iYWNrZW5kKGludCBjcHUsIHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCBfX3VzZWQsIGRvdWJsZSBhdmcpCit7CisJZG91YmxlIHRvdGFsLCByYXRpbyA9IDAuMDsKKwljb25zdCBjaGFyICpjb2xvcjsKKworCXRvdGFsID0gYXZnX3N0YXRzKCZydW50aW1lX2N5Y2xlc19zdGF0c1tjcHVdKTsKKworCWlmICh0b3RhbCkKKwkJcmF0aW8gPSBhdmcgLyB0b3RhbCAqIDEwMC4wOworCisJY29sb3IgPSBQRVJGX0NPTE9SX05PUk1BTDsKKwlpZiAocmF0aW8gPiA3NS4wKQorCQljb2xvciA9IFBFUkZfQ09MT1JfUkVEOworCWVsc2UgaWYgKHJhdGlvID4gNTAuMCkKKwkJY29sb3IgPSBQRVJGX0NPTE9SX01BR0VOVEE7CisJZWxzZSBpZiAocmF0aW8gPiAyMC4wKQorCQljb2xvciA9IFBFUkZfQ09MT1JfWUVMTE9XOworCisJZnByaW50ZihzdGRlcnIsICIgIyAgIik7CisJY29sb3JfZnByaW50ZihzdGRlcnIsIGNvbG9yLCAiJTYuMmYlJSIsIHJhdGlvKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiBiYWNrZW5kICBjeWNsZXMgaWRsZSAgICIpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9icmFuY2hfbWlzc2VzKGludCBjcHUsIHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCBfX3VzZWQsIGRvdWJsZSBhdmcpCit7CisJZG91YmxlIHRvdGFsLCByYXRpbyA9IDAuMDsKKwljb25zdCBjaGFyICpjb2xvcjsKKworCXRvdGFsID0gYXZnX3N0YXRzKCZydW50aW1lX2JyYW5jaGVzX3N0YXRzW2NwdV0pOworCisJaWYgKHRvdGFsKQorCQlyYXRpbyA9IGF2ZyAvIHRvdGFsICogMTAwLjA7CisKKwljb2xvciA9IFBFUkZfQ09MT1JfTk9STUFMOworCWlmIChyYXRpbyA+IDIwLjApCisJCWNvbG9yID0gUEVSRl9DT0xPUl9SRUQ7CisJZWxzZSBpZiAocmF0aW8gPiAxMC4wKQorCQljb2xvciA9IFBFUkZfQ09MT1JfTUFHRU5UQTsKKwllbHNlIGlmIChyYXRpbyA+IDUuMCkKKwkJY29sb3IgPSBQRVJGX0NPTE9SX1lFTExPVzsKKworCWZwcmludGYoc3RkZXJyLCAiICMgICIpOworCWNvbG9yX2ZwcmludGYoc3RkZXJyLCBjb2xvciwgIiU2LjJmJSUiLCByYXRpbyk7CisJZnByaW50ZihzdGRlcnIsICIgb2YgYWxsIGJyYW5jaGVzICAgICAgICAiKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfbDFfZGNhY2hlX21pc3NlcyhpbnQgY3B1LCBzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwgX191c2VkLCBkb3VibGUgYXZnKQoreworCWRvdWJsZSB0b3RhbCwgcmF0aW8gPSAwLjA7CisJY29uc3QgY2hhciAqY29sb3I7CisKKwl0b3RhbCA9IGF2Z19zdGF0cygmcnVudGltZV9sMV9kY2FjaGVfc3RhdHNbY3B1XSk7CisKKwlpZiAodG90YWwpCisJCXJhdGlvID0gYXZnIC8gdG90YWwgKiAxMDAuMDsKKworCWNvbG9yID0gUEVSRl9DT0xPUl9OT1JNQUw7CisJaWYgKHJhdGlvID4gMjAuMCkKKwkJY29sb3IgPSBQRVJGX0NPTE9SX1JFRDsKKwllbHNlIGlmIChyYXRpbyA+IDEwLjApCisJCWNvbG9yID0gUEVSRl9DT0xPUl9NQUdFTlRBOworCWVsc2UgaWYgKHJhdGlvID4gNS4wKQorCQljb2xvciA9IFBFUkZfQ09MT1JfWUVMTE9XOworCisJZnByaW50ZihzdGRlcnIsICIgIyAgIik7CisJY29sb3JfZnByaW50ZihzdGRlcnIsIGNvbG9yLCAiJTYuMmYlJSIsIHJhdGlvKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiBvZiBhbGwgTDEtZGNhY2hlIGhpdHMgICIpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9sMV9pY2FjaGVfbWlzc2VzKGludCBjcHUsIHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCBfX3VzZWQsIGRvdWJsZSBhdmcpCit7CisJZG91YmxlIHRvdGFsLCByYXRpbyA9IDAuMDsKKwljb25zdCBjaGFyICpjb2xvcjsKKworCXRvdGFsID0gYXZnX3N0YXRzKCZydW50aW1lX2wxX2ljYWNoZV9zdGF0c1tjcHVdKTsKKworCWlmICh0b3RhbCkKKwkJcmF0aW8gPSBhdmcgLyB0b3RhbCAqIDEwMC4wOworCisJY29sb3IgPSBQRVJGX0NPTE9SX05PUk1BTDsKKwlpZiAocmF0aW8gPiAyMC4wKQorCQljb2xvciA9IFBFUkZfQ09MT1JfUkVEOworCWVsc2UgaWYgKHJhdGlvID4gMTAuMCkKKwkJY29sb3IgPSBQRVJGX0NPTE9SX01BR0VOVEE7CisJZWxzZSBpZiAocmF0aW8gPiA1LjApCisJCWNvbG9yID0gUEVSRl9DT0xPUl9ZRUxMT1c7CisKKwlmcHJpbnRmKHN0ZGVyciwgIiAjICAiKTsKKwljb2xvcl9mcHJpbnRmKHN0ZGVyciwgY29sb3IsICIlNi4yZiUlIiwgcmF0aW8pOworCWZwcmludGYoc3RkZXJyLCAiIG9mIGFsbCBMMS1pY2FjaGUgaGl0cyAgIik7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2R0bGJfY2FjaGVfbWlzc2VzKGludCBjcHUsIHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCBfX3VzZWQsIGRvdWJsZSBhdmcpCit7CisJZG91YmxlIHRvdGFsLCByYXRpbyA9IDAuMDsKKwljb25zdCBjaGFyICpjb2xvcjsKKworCXRvdGFsID0gYXZnX3N0YXRzKCZydW50aW1lX2R0bGJfY2FjaGVfc3RhdHNbY3B1XSk7CisKKwlpZiAodG90YWwpCisJCXJhdGlvID0gYXZnIC8gdG90YWwgKiAxMDAuMDsKKworCWNvbG9yID0gUEVSRl9DT0xPUl9OT1JNQUw7CisJaWYgKHJhdGlvID4gMjAuMCkKKwkJY29sb3IgPSBQRVJGX0NPTE9SX1JFRDsKKwllbHNlIGlmIChyYXRpbyA+IDEwLjApCisJCWNvbG9yID0gUEVSRl9DT0xPUl9NQUdFTlRBOworCWVsc2UgaWYgKHJhdGlvID4gNS4wKQorCQljb2xvciA9IFBFUkZfQ09MT1JfWUVMTE9XOworCisJZnByaW50ZihzdGRlcnIsICIgIyAgIik7CisJY29sb3JfZnByaW50ZihzdGRlcnIsIGNvbG9yLCAiJTYuMmYlJSIsIHJhdGlvKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiBvZiBhbGwgZFRMQiBjYWNoZSBoaXRzICIpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9pdGxiX2NhY2hlX21pc3NlcyhpbnQgY3B1LCBzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwgX191c2VkLCBkb3VibGUgYXZnKQoreworCWRvdWJsZSB0b3RhbCwgcmF0aW8gPSAwLjA7CisJY29uc3QgY2hhciAqY29sb3I7CisKKwl0b3RhbCA9IGF2Z19zdGF0cygmcnVudGltZV9pdGxiX2NhY2hlX3N0YXRzW2NwdV0pOworCisJaWYgKHRvdGFsKQorCQlyYXRpbyA9IGF2ZyAvIHRvdGFsICogMTAwLjA7CisKKwljb2xvciA9IFBFUkZfQ09MT1JfTk9STUFMOworCWlmIChyYXRpbyA+IDIwLjApCisJCWNvbG9yID0gUEVSRl9DT0xPUl9SRUQ7CisJZWxzZSBpZiAocmF0aW8gPiAxMC4wKQorCQljb2xvciA9IFBFUkZfQ09MT1JfTUFHRU5UQTsKKwllbHNlIGlmIChyYXRpbyA+IDUuMCkKKwkJY29sb3IgPSBQRVJGX0NPTE9SX1lFTExPVzsKKworCWZwcmludGYoc3RkZXJyLCAiICMgICIpOworCWNvbG9yX2ZwcmludGYoc3RkZXJyLCBjb2xvciwgIiU2LjJmJSUiLCByYXRpbyk7CisJZnByaW50ZihzdGRlcnIsICIgb2YgYWxsIGlUTEIgY2FjaGUgaGl0cyAiKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfbGxfY2FjaGVfbWlzc2VzKGludCBjcHUsIHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCBfX3VzZWQsIGRvdWJsZSBhdmcpCit7CisJZG91YmxlIHRvdGFsLCByYXRpbyA9IDAuMDsKKwljb25zdCBjaGFyICpjb2xvcjsKKworCXRvdGFsID0gYXZnX3N0YXRzKCZydW50aW1lX2xsX2NhY2hlX3N0YXRzW2NwdV0pOworCisJaWYgKHRvdGFsKQorCQlyYXRpbyA9IGF2ZyAvIHRvdGFsICogMTAwLjA7CisKKwljb2xvciA9IFBFUkZfQ09MT1JfTk9STUFMOworCWlmIChyYXRpbyA+IDIwLjApCisJCWNvbG9yID0gUEVSRl9DT0xPUl9SRUQ7CisJZWxzZSBpZiAocmF0aW8gPiAxMC4wKQorCQljb2xvciA9IFBFUkZfQ09MT1JfTUFHRU5UQTsKKwllbHNlIGlmIChyYXRpbyA+IDUuMCkKKwkJY29sb3IgPSBQRVJGX0NPTE9SX1lFTExPVzsKKworCWZwcmludGYoc3RkZXJyLCAiICMgICIpOworCWNvbG9yX2ZwcmludGYoc3RkZXJyLCBjb2xvciwgIiU2LjJmJSUiLCByYXRpbyk7CisJZnByaW50ZihzdGRlcnIsICIgb2YgYWxsIExMLWNhY2hlIGhpdHMgICAiKTsKIH0KIAogc3RhdGljIHZvaWQgYWJzX3ByaW50b3V0KGludCBjcHUsIHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwgZG91YmxlIGF2ZykKQEAgLTQxNyw5ICs3NDMsOSBAQAogCWlmIChjc3Zfb3V0cHV0KQogCQlmbXQgPSAiJXMlLjBmJXMlcyI7CiAJZWxzZSBpZiAoYmlnX251bSkKLQkJZm10ID0gIiVzJScxOC4wZiVzJS0yNHMiOworCQlmbXQgPSAiJXMlJzE4LjBmJXMlLTI1cyI7CiAJZWxzZQotCQlmbXQgPSAiJXMlMTguMGYlcyUtMjRzIjsKKwkJZm10ID0gIiVzJTE4LjBmJXMlLTI1cyI7CiAKIAlpZiAobm9fYWdncikKIAkJc3ByaW50ZihjcHVzdHIsICJDUFUlKmQlcyIsCkBAIC00NDIsMjMgKzc2OCw4MyBAQAogCQlpZiAodG90YWwpCiAJCQlyYXRpbyA9IGF2ZyAvIHRvdGFsOwogCi0JCWZwcmludGYoc3RkZXJyLCAiICMgJTEwLjNmIElQQyAgIiwgcmF0aW8pOworCQlmcHJpbnRmKHN0ZGVyciwgIiAjICAgJTUuMmYgIGluc25zIHBlciBjeWNsZSAgICAgICAgIiwgcmF0aW8pOworCisJCXRvdGFsID0gYXZnX3N0YXRzKCZydW50aW1lX3N0YWxsZWRfY3ljbGVzX2Zyb250X3N0YXRzW2NwdV0pOworCQl0b3RhbCA9IG1heCh0b3RhbCwgYXZnX3N0YXRzKCZydW50aW1lX3N0YWxsZWRfY3ljbGVzX2JhY2tfc3RhdHNbY3B1XSkpOworCisJCWlmICh0b3RhbCAmJiBhdmcpIHsKKwkJCXJhdGlvID0gdG90YWwgLyBhdmc7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICU1LjJmICBzdGFsbGVkIGN5Y2xlcyBwZXIgaW5zbiIsIHJhdGlvKTsKKwkJfQorCiAJfSBlbHNlIGlmIChwZXJmX2V2c2VsX19tYXRjaChldnNlbCwgSEFSRFdBUkUsIEhXX0JSQU5DSF9NSVNTRVMpICYmCiAJCQlydW50aW1lX2JyYW5jaGVzX3N0YXRzW2NwdV0ubiAhPSAwKSB7Ci0JCXRvdGFsID0gYXZnX3N0YXRzKCZydW50aW1lX2JyYW5jaGVzX3N0YXRzW2NwdV0pOworCQlwcmludF9icmFuY2hfbWlzc2VzKGNwdSwgZXZzZWwsIGF2Zyk7CisJfSBlbHNlIGlmICgKKwkJZXZzZWwtPmF0dHIudHlwZSA9PSBQRVJGX1RZUEVfSFdfQ0FDSEUgJiYKKwkJZXZzZWwtPmF0dHIuY29uZmlnID09ICAoIFBFUkZfQ09VTlRfSFdfQ0FDSEVfTDFEIHwKKwkJCQkJKChQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX1JFQUQpIDw8IDgpIHwKKwkJCQkJKChQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NSVNTKSA8PCAxNikpICYmCisJCQlydW50aW1lX2wxX2RjYWNoZV9zdGF0c1tjcHVdLm4gIT0gMCkgeworCQlwcmludF9sMV9kY2FjaGVfbWlzc2VzKGNwdSwgZXZzZWwsIGF2Zyk7CisJfSBlbHNlIGlmICgKKwkJZXZzZWwtPmF0dHIudHlwZSA9PSBQRVJGX1RZUEVfSFdfQ0FDSEUgJiYKKwkJZXZzZWwtPmF0dHIuY29uZmlnID09ICAoIFBFUkZfQ09VTlRfSFdfQ0FDSEVfTDFJIHwKKwkJCQkJKChQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX1JFQUQpIDw8IDgpIHwKKwkJCQkJKChQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NSVNTKSA8PCAxNikpICYmCisJCQlydW50aW1lX2wxX2ljYWNoZV9zdGF0c1tjcHVdLm4gIT0gMCkgeworCQlwcmludF9sMV9pY2FjaGVfbWlzc2VzKGNwdSwgZXZzZWwsIGF2Zyk7CisJfSBlbHNlIGlmICgKKwkJZXZzZWwtPmF0dHIudHlwZSA9PSBQRVJGX1RZUEVfSFdfQ0FDSEUgJiYKKwkJZXZzZWwtPmF0dHIuY29uZmlnID09ICAoIFBFUkZfQ09VTlRfSFdfQ0FDSEVfRFRMQiB8CisJCQkJCSgoUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9SRUFEKSA8PCA4KSB8CisJCQkJCSgoUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUlTUykgPDwgMTYpKSAmJgorCQkJcnVudGltZV9kdGxiX2NhY2hlX3N0YXRzW2NwdV0ubiAhPSAwKSB7CisJCXByaW50X2R0bGJfY2FjaGVfbWlzc2VzKGNwdSwgZXZzZWwsIGF2Zyk7CisJfSBlbHNlIGlmICgKKwkJZXZzZWwtPmF0dHIudHlwZSA9PSBQRVJGX1RZUEVfSFdfQ0FDSEUgJiYKKwkJZXZzZWwtPmF0dHIuY29uZmlnID09ICAoIFBFUkZfQ09VTlRfSFdfQ0FDSEVfSVRMQiB8CisJCQkJCSgoUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9SRUFEKSA8PCA4KSB8CisJCQkJCSgoUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUlTUykgPDwgMTYpKSAmJgorCQkJcnVudGltZV9pdGxiX2NhY2hlX3N0YXRzW2NwdV0ubiAhPSAwKSB7CisJCXByaW50X2l0bGJfY2FjaGVfbWlzc2VzKGNwdSwgZXZzZWwsIGF2Zyk7CisJfSBlbHNlIGlmICgKKwkJZXZzZWwtPmF0dHIudHlwZSA9PSBQRVJGX1RZUEVfSFdfQ0FDSEUgJiYKKwkJZXZzZWwtPmF0dHIuY29uZmlnID09ICAoIFBFUkZfQ09VTlRfSFdfQ0FDSEVfTEwgfAorCQkJCQkoKFBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfUkVBRCkgPDwgOCkgfAorCQkJCQkoKFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01JU1MpIDw8IDE2KSkgJiYKKwkJCXJ1bnRpbWVfbGxfY2FjaGVfc3RhdHNbY3B1XS5uICE9IDApIHsKKwkJcHJpbnRfbGxfY2FjaGVfbWlzc2VzKGNwdSwgZXZzZWwsIGF2Zyk7CisJfSBlbHNlIGlmIChwZXJmX2V2c2VsX19tYXRjaChldnNlbCwgSEFSRFdBUkUsIEhXX0NBQ0hFX01JU1NFUykgJiYKKwkJCXJ1bnRpbWVfY2FjaGVyZWZzX3N0YXRzW2NwdV0ubiAhPSAwKSB7CisJCXRvdGFsID0gYXZnX3N0YXRzKCZydW50aW1lX2NhY2hlcmVmc19zdGF0c1tjcHVdKTsKIAogCQlpZiAodG90YWwpCiAJCQlyYXRpbyA9IGF2ZyAqIDEwMCAvIHRvdGFsOwogCi0JCWZwcmludGYoc3RkZXJyLCAiICMgJTEwLjNmICUlICAgICIsIHJhdGlvKTsKKwkJZnByaW50ZihzdGRlcnIsICIgIyAlOC4zZiAlJSBvZiBhbGwgY2FjaGUgcmVmcyAgICAiLCByYXRpbyk7CiAKKwl9IGVsc2UgaWYgKHBlcmZfZXZzZWxfX21hdGNoKGV2c2VsLCBIQVJEV0FSRSwgSFdfU1RBTExFRF9DWUNMRVNfRlJPTlRFTkQpKSB7CisJCXByaW50X3N0YWxsZWRfY3ljbGVzX2Zyb250ZW5kKGNwdSwgZXZzZWwsIGF2Zyk7CisJfSBlbHNlIGlmIChwZXJmX2V2c2VsX19tYXRjaChldnNlbCwgSEFSRFdBUkUsIEhXX1NUQUxMRURfQ1lDTEVTX0JBQ0tFTkQpKSB7CisJCXByaW50X3N0YWxsZWRfY3ljbGVzX2JhY2tlbmQoY3B1LCBldnNlbCwgYXZnKTsKKwl9IGVsc2UgaWYgKHBlcmZfZXZzZWxfX21hdGNoKGV2c2VsLCBIQVJEV0FSRSwgSFdfQ1BVX0NZQ0xFUykpIHsKKwkJdG90YWwgPSBhdmdfc3RhdHMoJnJ1bnRpbWVfbnNlY3Nfc3RhdHNbY3B1XSk7CisKKwkJaWYgKHRvdGFsKQorCQkJcmF0aW8gPSAxLjAgKiBhdmcgLyB0b3RhbDsKKworCQlmcHJpbnRmKHN0ZGVyciwgIiAjICU4LjNmIEdIeiAgICAgICAgICAgICAgICAgICAgIiwgcmF0aW8pOwogCX0gZWxzZSBpZiAocnVudGltZV9uc2Vjc19zdGF0c1tjcHVdLm4gIT0gMCkgewogCQl0b3RhbCA9IGF2Z19zdGF0cygmcnVudGltZV9uc2Vjc19zdGF0c1tjcHVdKTsKIAogCQlpZiAodG90YWwpCiAJCQlyYXRpbyA9IDEwMDAuMCAqIGF2ZyAvIHRvdGFsOwogCi0JCWZwcmludGYoc3RkZXJyLCAiICMgJTEwLjNmIE0vc2VjIiwgcmF0aW8pOworCQlmcHJpbnRmKHN0ZGVyciwgIiAjICU4LjNmIE0vc2VjICAgICAgICAgICAgICAgICAgIiwgcmF0aW8pOworCX0gZWxzZSB7CisJCWZwcmludGYoc3RkZXJyLCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKTsKIAl9CiB9CiAKQEAgLTUwNSw4ICs4OTEsNyBAQAogCQlhdmdfZW5hYmxlZCA9IGF2Z19zdGF0cygmcHMtPnJlc19zdGF0c1sxXSk7CiAJCWF2Z19ydW5uaW5nID0gYXZnX3N0YXRzKCZwcy0+cmVzX3N0YXRzWzJdKTsKIAotCQlmcHJpbnRmKHN0ZGVyciwgIiAgKHNjYWxlZCBmcm9tICUuMmYlJSkiLAotCQkJCTEwMCAqIGF2Z19ydW5uaW5nIC8gYXZnX2VuYWJsZWQpOworCQlmcHJpbnRmKHN0ZGVyciwgIiBbJTUuMmYlJV0iLCAxMDAgKiBhdmdfcnVubmluZyAvIGF2Z19lbmFibGVkKTsKIAl9CiAJZnByaW50ZihzdGRlcnIsICJcbiIpOwogfQpAQCAtNTQ4LDEwICs5MzMsOCBAQAogCQlpZiAoIWNzdl9vdXRwdXQpIHsKIAkJCXByaW50X25vaXNlKGNvdW50ZXIsIDEuMCk7CiAKLQkJCWlmIChydW4gIT0gZW5hKSB7Ci0JCQkJZnByaW50ZihzdGRlcnIsICIgIChzY2FsZWQgZnJvbSAlLjJmJSUpIiwKLQkJCQkJMTAwLjAgKiBydW4gLyBlbmEpOwotCQkJfQorCQkJaWYgKHJ1biAhPSBlbmEpCisJCQkJZnByaW50ZihzdGRlcnIsICIgICglLjJmJSUpIiwgMTAwLjAgKiBydW4gLyBlbmEpOwogCQl9CiAJCWZwdXRjKCdcbicsIHN0ZGVycik7CiAJfQpAQCAtNTkxLDEzICs5NzQsMTQgQEAKIAl9CiAKIAlpZiAoIWNzdl9vdXRwdXQpIHsKLQkJZnByaW50ZihzdGRlcnIsICJcbiIpOwotCQlmcHJpbnRmKHN0ZGVyciwgIiAlMTguOWYgIHNlY29uZHMgdGltZSBlbGFwc2VkIiwKKwkJaWYgKCFudWxsX3J1bikKKwkJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwkJZnByaW50ZihzdGRlcnIsICIgJTE3LjlmIHNlY29uZHMgdGltZSBlbGFwc2VkIiwKIAkJCQlhdmdfc3RhdHMoJndhbGx0aW1lX25zZWNzX3N0YXRzKS8xZTkpOwogCQlpZiAocnVuX2NvdW50ID4gMSkgewotCQkJZnByaW50ZihzdGRlcnIsICIgICAoICstICU3LjNmJSUgKSIsCi0JCQkJMTAwKnN0ZGRldl9zdGF0cygmd2FsbHRpbWVfbnNlY3Nfc3RhdHMpIC8KLQkJCQlhdmdfc3RhdHMoJndhbGx0aW1lX25zZWNzX3N0YXRzKSk7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKTsKKwkJCXByaW50X25vaXNlX3BjdChzdGRkZXZfc3RhdHMoJndhbGx0aW1lX25zZWNzX3N0YXRzKSwKKwkJCQkJYXZnX3N0YXRzKCZ3YWxsdGltZV9uc2Vjc19zdGF0cykpOwogCQl9CiAJCWZwcmludGYoc3RkZXJyLCAiXG5cbiIpOwogCX0KQEAgLTY1OSw2ICsxMDQzLDEwIEBACiAJCSAgICAicmVwZWF0IGNvbW1hbmQgYW5kIHByaW50IGF2ZXJhZ2UgKyBzdGRkZXYgKG1heDogMTAwKSIpLAogCU9QVF9CT09MRUFOKCduJywgIm51bGwiLCAmbnVsbF9ydW4sCiAJCSAgICAibnVsbCBydW4gLSBkb250IHN0YXJ0IGFueSBjb3VudGVycyIpLAorCU9QVF9JTkNSKCdkJywgImRldGFpbGVkIiwgJmRldGFpbGVkX3J1biwKKwkJICAgICJkZXRhaWxlZCBydW4gLSBzdGFydCBhIGxvdCBvZiBldmVudHMiKSwKKwlPUFRfQk9PTEVBTignUycsICJzeW5jIiwgJnN5bmNfcnVuLAorCQkgICAgImNhbGwgc3luYygpIGJlZm9yZSBzdGFydGluZyBhIHJ1biIpLAogCU9QVF9DQUxMQkFDS19OT09QVCgnQicsICJiaWctbnVtIiwgTlVMTCwgTlVMTCwgCiAJCQkgICAicHJpbnQgbGFyZ2UgbnVtYmVycyB3aXRoIHRob3VzYW5kc1wnIHNlcGFyYXRvcnMiLAogCQkJICAgc3RhdF9fc2V0X2JpZ19udW0pLApAQCAtNjc0LDYgKzEwNjIsNzAgQEAKIAlPUFRfRU5EKCkKIH07CiAKKy8qCisgKiBBZGQgZGVmYXVsdCBhdHRyaWJ1dGVzLCBpZiB0aGVyZSB3ZXJlIG5vIGF0dHJpYnV0ZXMgc3BlY2lmaWVkIG9yCisgKiBpZiAtZC8tLWRldGFpbGVkLCAtZCAtZCBvciAtZCAtZCAtZCBpcyB1c2VkOgorICovCitzdGF0aWMgaW50IGFkZF9kZWZhdWx0X2F0dHJpYnV0ZXModm9pZCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldnNlbCAqcG9zOworCXNpemVfdCBhdHRyX25yID0gMDsKKwlzaXplX3QgYzsKKworCS8qIFNldCBhdHRycyBpZiBubyBldmVudCBpcyBzZWxlY3RlZCBhbmQgIW51bGxfcnVuOiAqLworCWlmIChudWxsX3J1bikKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWV2c2VsX2xpc3QtPm5yX2VudHJpZXMpIHsKKwkJZm9yIChjID0gMDsgYyA8IEFSUkFZX1NJWkUoZGVmYXVsdF9hdHRycyk7IGMrKykgeworCQkJcG9zID0gcGVyZl9ldnNlbF9fbmV3KGRlZmF1bHRfYXR0cnMgKyBjLCBjICsgYXR0cl9ucik7CisJCQlpZiAocG9zID09IE5VTEwpCisJCQkJcmV0dXJuIC0xOworCQkJcGVyZl9ldmxpc3RfX2FkZChldnNlbF9saXN0LCBwb3MpOworCQl9CisJCWF0dHJfbnIgKz0gYzsKKwl9CisKKwkvKiBEZXRhaWxlZCBldmVudHMgZ2V0IGFwcGVuZGVkIHRvIHRoZSBldmVudCBsaXN0OiAqLworCisJaWYgKGRldGFpbGVkX3J1biA8ICAxKQorCQlyZXR1cm4gMDsKKworCS8qIEFwcGVuZCBkZXRhaWxlZCBydW4gZXh0cmEgYXR0cmlidXRlczogKi8KKwlmb3IgKGMgPSAwOyBjIDwgQVJSQVlfU0laRShkZXRhaWxlZF9hdHRycyk7IGMrKykgeworCQlwb3MgPSBwZXJmX2V2c2VsX19uZXcoZGV0YWlsZWRfYXR0cnMgKyBjLCBjICsgYXR0cl9ucik7CisJCWlmIChwb3MgPT0gTlVMTCkKKwkJCXJldHVybiAtMTsKKwkJcGVyZl9ldmxpc3RfX2FkZChldnNlbF9saXN0LCBwb3MpOworCX0KKwlhdHRyX25yICs9IGM7CisKKwlpZiAoZGV0YWlsZWRfcnVuIDwgMikKKwkJcmV0dXJuIDA7CisKKwkvKiBBcHBlbmQgdmVyeSBkZXRhaWxlZCBydW4gZXh0cmEgYXR0cmlidXRlczogKi8KKwlmb3IgKGMgPSAwOyBjIDwgQVJSQVlfU0laRSh2ZXJ5X2RldGFpbGVkX2F0dHJzKTsgYysrKSB7CisJCXBvcyA9IHBlcmZfZXZzZWxfX25ldyh2ZXJ5X2RldGFpbGVkX2F0dHJzICsgYywgYyArIGF0dHJfbnIpOworCQlpZiAocG9zID09IE5VTEwpCisJCQlyZXR1cm4gLTE7CisJCXBlcmZfZXZsaXN0X19hZGQoZXZzZWxfbGlzdCwgcG9zKTsKKwl9CisKKwlpZiAoZGV0YWlsZWRfcnVuIDwgMykKKwkJcmV0dXJuIDA7CisKKwkvKiBBcHBlbmQgdmVyeSwgdmVyeSBkZXRhaWxlZCBydW4gZXh0cmEgYXR0cmlidXRlczogKi8KKwlmb3IgKGMgPSAwOyBjIDwgQVJSQVlfU0laRSh2ZXJ5X3ZlcnlfZGV0YWlsZWRfYXR0cnMpOyBjKyspIHsKKwkJcG9zID0gcGVyZl9ldnNlbF9fbmV3KHZlcnlfdmVyeV9kZXRhaWxlZF9hdHRycyArIGMsIGMgKyBhdHRyX25yKTsKKwkJaWYgKHBvcyA9PSBOVUxMKQorCQkJcmV0dXJuIC0xOworCQlwZXJmX2V2bGlzdF9fYWRkKGV2c2VsX2xpc3QsIHBvcyk7CisJfQorCisKKwlyZXR1cm4gMDsKK30KKwogaW50IGNtZF9zdGF0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4IF9fdXNlZCkKIHsKIAlzdHJ1Y3QgcGVyZl9ldnNlbCAqcG9zOwpAQCAtNzE5LDE3ICsxMTcxLDggQEAKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKHN0YXRfdXNhZ2UsIG9wdGlvbnMpOwogCX0KIAotCS8qIFNldCBhdHRycyBhbmQgbnJfY291bnRlcnMgaWYgbm8gZXZlbnQgaXMgc2VsZWN0ZWQgYW5kICFudWxsX3J1biAqLwotCWlmICghbnVsbF9ydW4gJiYgIWV2c2VsX2xpc3QtPm5yX2VudHJpZXMpIHsKLQkJc2l6ZV90IGM7Ci0KLQkJZm9yIChjID0gMDsgYyA8IEFSUkFZX1NJWkUoZGVmYXVsdF9hdHRycyk7ICsrYykgewotCQkJcG9zID0gcGVyZl9ldnNlbF9fbmV3KCZkZWZhdWx0X2F0dHJzW2NdLCBjKTsKLQkJCWlmIChwb3MgPT0gTlVMTCkKLQkJCQlnb3RvIG91dDsKLQkJCXBlcmZfZXZsaXN0X19hZGQoZXZzZWxfbGlzdCwgcG9zKTsKLQkJfQotCX0KKwlpZiAoYWRkX2RlZmF1bHRfYXR0cmlidXRlcygpKQorCQlnb3RvIG91dDsKIAogCWlmICh0YXJnZXRfcGlkICE9IC0xKQogCQl0YXJnZXRfdGlkID0gdGFyZ2V0X3BpZDsKQEAgLTc3Myw2ICsxMjE2LDEwIEBACiAJZm9yIChydW5faWR4ID0gMDsgcnVuX2lkeCA8IHJ1bl9jb3VudDsgcnVuX2lkeCsrKSB7CiAJCWlmIChydW5fY291bnQgIT0gMSAmJiB2ZXJib3NlKQogCQkJZnByaW50ZihzdGRlcnIsICJbIHBlcmYgc3RhdDogZXhlY3V0aW5nIHJ1biAjJWQgLi4uIF1cbiIsIHJ1bl9pZHggKyAxKTsKKworCQlpZiAoc3luY19ydW4pCisJCQlzeW5jKCk7CisKIAkJc3RhdHVzID0gcnVuX3BlcmZfc3RhdChhcmdjLCBhcmd2KTsKIAl9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10ZXN0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tdGVzdC5jCmluZGV4IDExZTNjODQuLjJmOWEzMzcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10ZXN0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRlc3QuYwpAQCAtNTQ5LDcgKzU0OSw3IEBACiAJCQkrK2ZvbzsKIAkJfQogCi0Jd2hpbGUgKChldmVudCA9IHBlcmZfZXZsaXN0X19yZWFkX29uX2NwdShldmxpc3QsIDApKSAhPSBOVUxMKSB7CisJd2hpbGUgKChldmVudCA9IHBlcmZfZXZsaXN0X19tbWFwX3JlYWQoZXZsaXN0LCAwKSkgIT0gTlVMTCkgewogCQlzdHJ1Y3QgcGVyZl9zYW1wbGUgc2FtcGxlOwogCiAJCWlmIChldmVudC0+aGVhZGVyLnR5cGUgIT0gUEVSRl9SRUNPUkRfU0FNUExFKSB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMgYi90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKaW5kZXggN2UzZDZlMy4uZWJmYzdjZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYwpAQCAtODAxLDEyICs4MDEsMTIgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHBlcmZfc2Vzc2lvbl9fbW1hcF9yZWFkX2NwdShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLCBpbnQgY3B1KQorc3RhdGljIHZvaWQgcGVyZl9zZXNzaW9uX19tbWFwX3JlYWRfaWR4KHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsIGludCBpZHgpCiB7CiAJc3RydWN0IHBlcmZfc2FtcGxlIHNhbXBsZTsKIAl1bmlvbiBwZXJmX2V2ZW50ICpldmVudDsKIAotCXdoaWxlICgoZXZlbnQgPSBwZXJmX2V2bGlzdF9fcmVhZF9vbl9jcHUodG9wLmV2bGlzdCwgY3B1KSkgIT0gTlVMTCkgeworCXdoaWxlICgoZXZlbnQgPSBwZXJmX2V2bGlzdF9fbW1hcF9yZWFkKHRvcC5ldmxpc3QsIGlkeCkpICE9IE5VTEwpIHsKIAkJcGVyZl9zZXNzaW9uX19wYXJzZV9zYW1wbGUoc2VsZiwgZXZlbnQsICZzYW1wbGUpOwogCiAJCWlmIChldmVudC0+aGVhZGVyLnR5cGUgPT0gUEVSRl9SRUNPUkRfU0FNUExFKQpAQCAtODIwLDggKzgyMCw4IEBACiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgdG9wLmV2bGlzdC0+Y3B1cy0+bnI7IGkrKykKLQkJcGVyZl9zZXNzaW9uX19tbWFwX3JlYWRfY3B1KHNlbGYsIGkpOworCWZvciAoaSA9IDA7IGkgPCB0b3AuZXZsaXN0LT5ucl9tbWFwczsgaSsrKQorCQlwZXJmX3Nlc3Npb25fX21tYXBfcmVhZF9pZHgoc2VsZiwgaSk7CiB9CiAKIHN0YXRpYyB2b2lkIHN0YXJ0X2NvdW50ZXJzKHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9mZWF0dXJlLXRlc3RzLm1hayBiL3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtdGVzdHMubWFrCnNpbWlsYXJpdHkgaW5kZXggODUlCnJlbmFtZSBmcm9tIHRvb2xzL3BlcmYvZmVhdHVyZS10ZXN0cy5tYWsKcmVuYW1lIHRvIHRvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtdGVzdHMubWFrCmluZGV4IGIwNDFjYTYuLjYxNzBmZDIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvZmVhdHVyZS10ZXN0cy5tYWsKKysrIGIvdG9vbHMvcGVyZi9jb25maWcvZmVhdHVyZS10ZXN0cy5tYWsKQEAgLTc5LDkgKzc5LDE1IEBACiBlbmRpZgogCiBpZm5kZWYgTk9fTElCUFlUSE9OCitkZWZpbmUgU09VUkNFX1BZVEhPTl9WRVJTSU9OCisjaW5jbHVkZSA8UHl0aG9uLmg+CisjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzAwMDAwMAorCSNlcnJvcgorI2VuZGlmCitpbnQgbWFpbih2b2lkKXt9CitlbmRlZgogZGVmaW5lIFNPVVJDRV9QWVRIT05fRU1CRUQKICNpbmNsdWRlIDxQeXRob24uaD4KLQogaW50IG1haW4odm9pZCkKIHsKIAlQeV9Jbml0aWFsaXplKCk7CkBAIC0xMjAsMTEgKzEyNiwzIEBACiAJcmV0dXJuIDA7CiB9CiBlbmRlZgotCi0jIHRyeS1jYwotIyBVc2FnZTogb3B0aW9uID0gJChjYWxsIHRyeS1jYywgc291cmNlLXRvLWJ1aWxkLCBjYy1vcHRpb25zKQotdHJ5LWNjID0gJChzaGVsbCBzaCAtYwkJCQkJCSAgXAotCSdUTVA9IiQoT1VUUFVUKSQoVE1QT1VUKS4kJCQkIjsJCQkJICBcCi0JIGVjaG8gIiQoMSkiIHwJCQkJCQkgIFwKLQkgJChDQykgLXggYyAtICQoMikgLW8gIiQkVE1QIiA+IC9kZXYvbnVsbCAyPiYxICYmIGVjaG8geTsgXAotCSBybSAtZiAiJCRUTVAiJykKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvY29uZmlnL3V0aWxpdGllcy5tYWsgYi90b29scy9wZXJmL2NvbmZpZy91dGlsaXRpZXMubWFrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNDYxODIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL2NvbmZpZy91dGlsaXRpZXMubWFrCkBAIC0wLDAgKzEsMTg4IEBACisjIFRoaXMgYWxsb3dzIHVzIHRvIHdvcmsgd2l0aCB0aGUgbmV3bGluZSBjaGFyYWN0ZXI6CitkZWZpbmUgbmV3bGluZQorCisKK2VuZGVmCituZXdsaW5lIDo9ICQobmV3bGluZSkKKworIyBubC1lc2NhcGUKKyMKKyMgVXNhZ2U6IGVzY2FwZSA9ICQoY2FsbCBubC1lc2NhcGVbLGVzY2FwZV0pCisjCisjIFRoaXMgaXMgdXNlZCBhcyB0aGUgY29tbW9uIHdheSB0byBzcGVjaWZ5CisjIHdoYXQgc2hvdWxkIHJlcGxhY2UgYSBuZXdsaW5lIHdoZW4gZXNjYXBpbmcKKyMgbmV3bGluZXM7IHRoZSBkZWZhdWx0IGlzIGEgYml6YXJyZSBzdHJpbmcuCisjCitubC1lc2NhcGUgPSAkKG9yICQoMSksbTgyMmRmMzAyMHc2YTQ0aWQzNGJ0NTc0Y3RhYzQ0ZWI5ZjRuKQorCisjIGVzY2FwZS1ubAorIworIyBVc2FnZTogZXNjYXBlZC10ZXh0ID0gJChjYWxsIGVzY2FwZS1ubCx0ZXh0Wyxlc2NhcGVdKQorIworIyBHTlUgbWFrZSdzICQoc2hlbGwgLi4uKSBmdW5jdGlvbiBjb252ZXJ0cyB0byBhCisjIHNpbmdsZSBzcGFjZSBlYWNoIG5ld2xpbmUgY2hhcmFjdGVyIGluIHRoZSBvdXRwdXQKKyMgcHJvZHVjZWQgZHVyaW5nIHRoZSBleHBhbnNpb247IHRoaXMgbWF5IG5vdCBiZQorIyBkZXNpcmFibGUuCisjCisjIFRoZSBvbmx5IHNvbHV0aW9uIGlzIHRvIGNoYW5nZSBlYWNoIG5ld2xpbmUgaW50bworIyBzb21ldGhpbmcgdGhhdCB3b24ndCBiZSBjb252ZXJ0ZWQsIHNvIHRoYXQgdGhlCisjIGluZm9ybWF0aW9uIGNhbiBiZSByZWNvdmVyZWQgbGF0ZXIgd2l0aAorIyAkKGNhbGwgdW5lc2NhcGUtbmwuLi4pCisjCitlc2NhcGUtbmwgPSAkKHN1YnN0ICQobmV3bGluZSksJChjYWxsIG5sLWVzY2FwZSwkKDIpKSwkKDEpKQorCisjIHVuZXNjYXBlLW5sCisjCisjIFVzYWdlOiB0ZXh0ID0gJChjYWxsIHVuZXNjYXBlLW5sLGVzY2FwZWQtdGV4dFssZXNjYXBlXSkKKyMKKyMgU2VlIGVzY2FwZS1ubC4KKyMKK3VuZXNjYXBlLW5sID0gJChzdWJzdCAkKGNhbGwgbmwtZXNjYXBlLCQoMikpLCQobmV3bGluZSksJCgxKSkKKworIyBzaGVsbC1lc2NhcGUtbmwKKyMKKyMgVXNhZ2U6ICQoc2hlbGwgc29tZS1jb21tYW5kIHwgJChjYWxsIHNoZWxsLWVzY2FwZS1ubFssZXNjYXBlXSkpCisjCisjIFVzZSB0aGlzIHRvIGVzY2FwZSBuZXdsaW5lcyBmcm9tIHdpdGhpbiBhIHNoZWxsIGNhbGw7CisjIHRoZSBkZWZhdWx0IGVzY2FwZSBpcyBhIGJpemFycmUgc3RyaW5nLgorIworIyBOT1RFOiBUaGUgZXNjYXBlIGlzIHVzZWQgZGlyZWN0bHkgYXMgYSBzdHJpbmcgY29uc3RhbnQKKyMgICAgICAgaW4gYW4gYGF3aycgcHJvZ3JhbSB0aGF0IGlzIGRlbGltaXRlZCBieSBzaGVsbAorIyAgICAgICBzaW5nbGUtcXVvdGVzLCBzbyBiZSB3YXJ5IG9mIHRoZSBjaGFyYWN0ZXJzCisjICAgICAgIHRoYXQgYXJlIGNob3Nlbi4KKyMKK2RlZmluZSBzaGVsbC1lc2NhcGUtbmwKK2F3ayAnTlI9PTEge3Q9JCQwfSBOUj4xIHt0PXQgIiQobmwtZXNjYXBlKSIgJCQwfSBFTkQge3ByaW50ZiB0fScKK2VuZGVmCisKKyMgc2hlbGwtdW5lc2NhcGUtbmwKKyMKKyMgVXNhZ2U6ICQoc2hlbGwgc29tZS1jb21tYW5kIHwgJChjYWxsIHNoZWxsLXVuZXNjYXBlLW5sWyxlc2NhcGVdKSkKKyMKKyMgVXNlIHRoaXMgdG8gdW5lc2NhcGUgbmV3bGluZXMgZnJvbSB3aXRoaW4gYSBzaGVsbCBjYWxsOworIyB0aGUgZGVmYXVsdCBlc2NhcGUgaXMgYSBiaXphcnJlIHN0cmluZy4KKyMKKyMgTk9URTogVGhlIGVzY2FwZSBpcyB1c2VkIGRpcmVjdGx5IGFzIGFuIGV4dGVuZGVkIHJlZ3VsYXIKKyMgICAgICAgZXhwcmVzc2lvbiBjb25zdGFudCBpbiBhbiBgYXdrJyBwcm9ncmFtIHRoYXQgaXMKKyMgICAgICAgZGVsaW1pdGVkIGJ5IHNoZWxsIHNpbmdsZS1xdW90ZXMsIHNvIGJlIHdhcnkKKyMgICAgICAgb2YgdGhlIGNoYXJhY3RlcnMgdGhhdCBhcmUgY2hvc2VuLgorIworIyAoVGhlIGJhc2ggc2hlbGwgaGFzIGEgYnVnIHdoZXJlIGB7Z3N1YiguLi4pLC4uLn0nIGlzCisjICBtaXNpbnRlcnByZXRlZCBhcyBhIGJyYWNlIGV4cGFuc2lvbjsgdGhpcyBjYW4gYmUKKyMgIG92ZXJjb21lIGJ5IHB1dHRpbmcgYSBzcGFjZSBiZXR3ZWVuIGB7JyBhbmQgYGdzdWInKS4KKyMKK2RlZmluZSBzaGVsbC11bmVzY2FwZS1ubAorYXdrICdOUj09MSB7dD0kJDB9IE5SPjEge3Q9dCAiXG4iICQkMH0gRU5EIHsgZ3N1YigvJChubC1lc2NhcGUpLywiXG4iLHQpOyBwcmludGYgdCB9JworZW5kZWYKKworIyBlc2NhcGUtZm9yLXNoZWxsLXNxCisjCisjIFVzYWdlOiBlbWJlZGRhYmxlLXRleHQgPSAkKGNhbGwgZXNjYXBlLWZvci1zaGVsbC1zcSx0ZXh0KQorIworIyBUaGlzIGZ1bmN0aW9uIHByb2R1Y2VzIHRleHQgdGhhdCBpcyBzdWl0YWJsZSBmb3IKKyMgZW1iZWRkaW5nIGluIGEgc2hlbGwgc3RyaW5nIHRoYXQgaXMgZGVsaW1pdGVkIGJ5CisjIHNpbmdsZS1xdW90ZXMuCisjCitlc2NhcGUtZm9yLXNoZWxsLXNxID0gICQoc3Vic3QgJywnXCcnLCQoMSkpCisKKyMgc2hlbGwtc3EKKyMKKyMgVXNhZ2U6IHNpbmdsZS1xdW90ZWQtYW5kLWVzY2FwZWQtdGV4dCA9ICQoY2FsbCBzaGVsbC1zcSx0ZXh0KQorIworc2hlbGwtc3EgPSAnJChlc2NhcGUtZm9yLXNoZWxsLXNxKScKKworIyBzaGVsbC13b3JkaWZ5CisjCisjIFVzYWdlOiB3b3JkaWZpZWQtdGV4dCA9ICQoY2FsbCBzaGVsbC13b3JkaWZ5LHRleHQpCisjCisjIEZvciBpbnN0YW5jZToKKyMKKyMgIHxkZWZpbmUgdGV4dAorIyAgfGhlbGxvCisjICB8d29ybGQKKyMgIHxlbmRlZgorIyAgfAorIyAgfHRhcmdldDoKKyMgIHwJZWNobyAkKGNhbGwgc2hlbGwtd29yZGlmeSwkKHRleHQpKQorIworIyBBdCBsZWFzdCBHTlUgbWFrZSBnZXRzIGNvbmZ1c2VkIGJ5IGV4cGFuZGluZyBhIG5ld2xpbmUKKyMgd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgY29tbWFuZCBsaW5lIG9mIGEgbWFrZWZpbGUgcnVsZQorIyAodGhpcyBpcyBpbiBjb25zdHJhc3QgdG8gYSBgJChzaGVsbCAuLi4pJyBmdW5jdGlvbiBjYWxsLAorIyB3aGljaCBjYW4gaGFuZGxlIGl0IGp1c3QgZmluZSkuCisjCisjIFRoaXMgZnVuY3Rpb24gYXZvaWRzIHRoZSBwcm9ibGVtIGJ5IHByb2R1Y2luZyBhIHN0cmluZworIyB0aGF0IHdvcmtzIGFzIGEgc2hlbGwgd29yZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yCisjIG5vdCBpdCBjb250YWlucyBhIG5ld2xpbmUuCisjCisjIElmIHRoZSB0ZXh0IHRvIGJlIHdvcmRpZmllZCBjb250YWlucyBhIG5ld2xpbmUsIHRoZW4KKyMgYW4gaW50cmljdGF0ZSBzaGVsbCBjb21tYW5kIHN1YnN0aXR1dGlvbiBpcyBjb25zdHJ1Y3RlZAorIyB0byByZW5kZXIgdGhlIHRleHQgYXMgYSBzaW5nbGUgbGluZTsgd2hlbiB0aGUgc2hlbGwKKyMgcHJvY2Vzc2VzIHRoZSByZXN1bHRpbmcgZXNjYXBlZCB0ZXh0LCBpdCB0cmFuc2Zvcm1zCisjIGl0IGludG8gdGhlIG9yaWdpbmFsIHVuZXNjYXBlZCB0ZXh0LgorIworIyBJZiB0aGUgdGV4dCBkb2VzIG5vdCBjb250YWluIGEgbmV3bGluZSwgdGhlbiB0aGlzIGZ1bmN0aW9uCisjIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIGAkKHNoZWxsLXNxKScgZnVuY3Rpb24uCisjCitzaGVsbC13b3JkaWZ5ID0gJChpZiAkKGZpbmRzdHJpbmcgJChuZXdsaW5lKSwkKDEpKSwkKF9zdy1lc2MtbmwpLCQoc2hlbGwtc3EpKQorZGVmaW5lIF9zdy1lc2MtbmwKKyIkJChlY2hvICQoY2FsbCBlc2NhcGUtbmwsJChzaGVsbC1zcSksJCgyKSkgfCAkKGNhbGwgc2hlbGwtdW5lc2NhcGUtbmwsJCgyKSkpIgorZW5kZWYKKworIyBpcy1hYnNvbHV0ZQorIworIyBVc2FnZTogYm9vbC12YWx1ZSA9ICQoY2FsbCBpcy1hYnNvbHV0ZSxwYXRoKQorIworaXMtYWJzb2x1dGUgPSAkKHNoZWxsIGVjaG8gJChzaGVsbC1zcSkgfCBncmVwIF4vIC1xICYmIGVjaG8geSkKKworIyBsb29rdXAKKyMKKyMgVXNhZ2U6IGFic29sdXRlLWV4ZWN1dGFibGUtcGF0aC1vci1lbXB0eSA9ICQoY2FsbCBsb29rdXAscGF0aCkKKyMKKyMgKEl0J3MgbmVjZXNzYXJ5IHRvIHVzZSBgc2ggLWMnIGJlY2F1c2UgR05VIG1ha2UgbWVzc2VzIHVwIGJ5CisjICB0cnlpbmcgdG9vIGhhcmQgYW5kIGdldHRpbmcgdGhpbmdzIHdyb25nKS4KKyMKK2xvb2t1cCA9ICQoY2FsbCB1bmVzY2FwZS1ubCwkKHNoZWxsIHNoIC1jICQoX2wtc2gpKSkKK19sLXNoID0gJChjYWxsIHNoZWxsLXNxLGNvbW1hbmQgLXYgJChzaGVsbC1zcSkgfCAkKGNhbGwgc2hlbGwtZXNjYXBlLW5sLCkpCisKKyMgaXMtZXhlY3V0YWJsZQorIworIyBVc2FnZTogYm9vbC12YWx1ZSA9ICQoY2FsbCBpcy1leGVjdXRhYmxlLHBhdGgpCisjCisjIChJdCdzIG5lY2Vzc2FyeSB0byB1c2UgYHNoIC1jJyBiZWNhdXNlIEdOVSBtYWtlIG1lc3NlcyB1cCBieQorIyAgdHJ5aW5nIHRvbyBoYXJkIGFuZCBnZXR0aW5nIHRoaW5ncyB3cm9uZykuCisjCitpcy1leGVjdXRhYmxlID0gJChjYWxsIF9pcy1leGVjdXRhYmxlLWhlbHBlciwkKHNoZWxsLXNxKSkKK19pcy1leGVjdXRhYmxlLWhlbHBlciA9ICQoc2hlbGwgc2ggLWMgJChfaXMtZXhlY3V0YWJsZS1zaCkpCitfaXMtZXhlY3V0YWJsZS1zaCA9ICQoY2FsbCBzaGVsbC1zcSx0ZXN0IC1mICQoMSkgLWEgLXggJCgxKSAmJiBlY2hvIHkpCisKKyMgZ2V0LWV4ZWN1dGFibGUKKyMKKyMgVXNhZ2U6IGFic29sdXRlLWV4ZWN1dGFibGUtcGF0aC1vci1lbXB0eSA9ICQoY2FsbCBnZXQtZXhlY3V0YWJsZSxwYXRoKQorIworIyBUaGUgZ29hbCBpcyB0byBnZXQgYW4gYWJzb2x1dGUgcGF0aCBmb3IgYW4gZXhlY3V0YWJsZTsKKyMgdGhlIGBjb21tYW5kIC12JyBpcyBkZWZpbmVkIGJ5IFBPU0lYLCBidXQgaXQncyBub3QKKyMgbmVjZXNzYXJpbHkgdmVyeSBwb3J0YWJsZSwgc28gaXQncyBvbmx5IHVzZWQgaWYKKyMgcmVsYXRpdmUgcGF0aCByZXNvbHV0aW9uIGlzIHJlcXVlc3RlZCwgYXMgZGV0ZXJtaW5lZAorIyBieSB0aGUgcHJlc2VuY2Ugb2YgYSBsZWFkaW5nIGAvJy4KKyMKK2dldC1leGVjdXRhYmxlID0gJChpZiAkKDEpLCQoaWYgJChpcy1hYnNvbHV0ZSksJChfZ2UtYWJzcGF0aCksJChsb29rdXApKSkKK19nZS1hYnNwYXRoID0gJChpZiAkKGlzLWV4ZWN1dGFibGUpLCQoMSkpCisKKyMgZ2V0LXN1cHBsaWVkLW9yLWRlZmF1bHQtZXhlY3V0YWJsZQorIworIyBVc2FnZTogYWJzb2x1dGUtZXhlY3V0YWJsZS1wYXRoLW9yLWVtcHR5ID0gJChjYWxsIGdldC1leGVjdXRhYmxlLW9yLWRlZmF1bHQsdmFyaWFibGUsZGVmYXVsdCkKKyMKK2RlZmluZSBnZXQtZXhlY3V0YWJsZS1vci1kZWZhdWx0CiskKGlmICQoJCgxKSksJChjYWxsIF9nZV9hdHRlbXB0LCQoJCgxKSksJCgxKSksJChjYWxsIF9nZV9hdHRlbXB0LCQoMikpKQorZW5kZWYKK19nZV9hdHRlbXB0ID0gJChvciAkKGdldC1leGVjdXRhYmxlKSwkKF9nZWFfd2FybiksJChjYWxsIF9nZWFfZXJyLCQoMikpKQorX2dlYV93YXJuID0gJCh3YXJuaW5nIFRoZSBwYXRoICckKDEpJyBpcyBub3QgZXhlY3V0YWJsZS4pCitfZ2VhX2VyciAgPSAkKGlmICQoMSksJChlcnJvciBQbGVhc2Ugc2V0ICckKDEpJyBhcHByb3ByaWF0ZWx5KSkKKworIyB0cnktY2MKKyMgVXNhZ2U6IG9wdGlvbiA9ICQoY2FsbCB0cnktY2MsIHNvdXJjZS10by1idWlsZCwgY2Mtb3B0aW9ucykKK3RyeS1jYyA9ICQoc2hlbGwgc2ggLWMJCQkJCQkgIFwKKwknVE1QPSIkKE9VVFBVVCkkKFRNUE9VVCkuJCQkJCI7CQkJCSAgXAorCSBlY2hvICIkKDEpIiB8CQkJCQkJICBcCisJICQoQ0MpIC14IGMgLSAkKDIpIC1vICIkJFRNUCIgPiAvZGV2L251bGwgMj4mMSAmJiBlY2hvIHk7IFwKKwkgcm0gLWYgIiQkVE1QIicpCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZsaXN0LmMgYi90b29scy9wZXJmL3V0aWwvZXZsaXN0LmMKaW5kZXggNDVkYThkMS4uMjNlYjIyYiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuYwpAQCAtMTY2LDExICsxNjYsMTEgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotdW5pb24gcGVyZl9ldmVudCAqcGVyZl9ldmxpc3RfX3JlYWRfb25fY3B1KHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0LCBpbnQgY3B1KQordW5pb24gcGVyZl9ldmVudCAqcGVyZl9ldmxpc3RfX21tYXBfcmVhZChzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCwgaW50IGlkeCkKIHsKIAkvKiBYWFggTW92ZSB0aGlzIHRvIHBlcmYuYywgbWFraW5nIGl0IGdlbmVyYWxseSBhdmFpbGFibGUgKi8KIAl1bnNpZ25lZCBpbnQgcGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRV9TSVpFKTsKLQlzdHJ1Y3QgcGVyZl9tbWFwICptZCA9ICZldmxpc3QtPm1tYXBbY3B1XTsKKwlzdHJ1Y3QgcGVyZl9tbWFwICptZCA9ICZldmxpc3QtPm1tYXBbaWR4XTsKIAl1bnNpZ25lZCBpbnQgaGVhZCA9IHBlcmZfbW1hcF9fcmVhZF9oZWFkKG1kKTsKIAl1bnNpZ25lZCBpbnQgb2xkID0gbWQtPnByZXY7CiAJdW5zaWduZWQgY2hhciAqZGF0YSA9IG1kLT5iYXNlICsgcGFnZV9zaXplOwpAQCAtMjM1LDMxICsyMzUsMzcgQEAKIAogdm9pZCBwZXJmX2V2bGlzdF9fbXVubWFwKHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KQogewotCWludCBjcHU7CisJaW50IGk7CiAKLQlmb3IgKGNwdSA9IDA7IGNwdSA8IGV2bGlzdC0+Y3B1cy0+bnI7IGNwdSsrKSB7Ci0JCWlmIChldmxpc3QtPm1tYXBbY3B1XS5iYXNlICE9IE5VTEwpIHsKLQkJCW11bm1hcChldmxpc3QtPm1tYXBbY3B1XS5iYXNlLCBldmxpc3QtPm1tYXBfbGVuKTsKLQkJCWV2bGlzdC0+bW1hcFtjcHVdLmJhc2UgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBldmxpc3QtPm5yX21tYXBzOyBpKyspIHsKKwkJaWYgKGV2bGlzdC0+bW1hcFtpXS5iYXNlICE9IE5VTEwpIHsKKwkJCW11bm1hcChldmxpc3QtPm1tYXBbaV0uYmFzZSwgZXZsaXN0LT5tbWFwX2xlbik7CisJCQlldmxpc3QtPm1tYXBbaV0uYmFzZSA9IE5VTEw7CiAJCX0KIAl9CisKKwlmcmVlKGV2bGlzdC0+bW1hcCk7CisJZXZsaXN0LT5tbWFwID0gTlVMTDsKIH0KIAogaW50IHBlcmZfZXZsaXN0X19hbGxvY19tbWFwKHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KQogewotCWV2bGlzdC0+bW1hcCA9IHphbGxvYyhldmxpc3QtPmNwdXMtPm5yICogc2l6ZW9mKHN0cnVjdCBwZXJmX21tYXApKTsKKwlldmxpc3QtPm5yX21tYXBzID0gZXZsaXN0LT5jcHVzLT5ucjsKKwlpZiAoZXZsaXN0LT5jcHVzLT5tYXBbMF0gPT0gLTEpCisJCWV2bGlzdC0+bnJfbW1hcHMgPSBldmxpc3QtPnRocmVhZHMtPm5yOworCWV2bGlzdC0+bW1hcCA9IHphbGxvYyhldmxpc3QtPm5yX21tYXBzICogc2l6ZW9mKHN0cnVjdCBwZXJmX21tYXApKTsKIAlyZXR1cm4gZXZsaXN0LT5tbWFwICE9IE5VTEwgPyAwIDogLUVOT01FTTsKIH0KIAogc3RhdGljIGludCBfX3BlcmZfZXZsaXN0X19tbWFwKHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0LCBzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCi0JCQkgICAgICAgaW50IGNwdSwgaW50IHByb3QsIGludCBtYXNrLCBpbnQgZmQpCisJCQkgICAgICAgaW50IGlkeCwgaW50IHByb3QsIGludCBtYXNrLCBpbnQgZmQpCiB7Ci0JZXZsaXN0LT5tbWFwW2NwdV0ucHJldiA9IDA7Ci0JZXZsaXN0LT5tbWFwW2NwdV0ubWFzayA9IG1hc2s7Ci0JZXZsaXN0LT5tbWFwW2NwdV0uYmFzZSA9IG1tYXAoTlVMTCwgZXZsaXN0LT5tbWFwX2xlbiwgcHJvdCwKKwlldmxpc3QtPm1tYXBbaWR4XS5wcmV2ID0gMDsKKwlldmxpc3QtPm1tYXBbaWR4XS5tYXNrID0gbWFzazsKKwlldmxpc3QtPm1tYXBbaWR4XS5iYXNlID0gbW1hcChOVUxMLCBldmxpc3QtPm1tYXBfbGVuLCBwcm90LAogCQkJCSAgICAgIE1BUF9TSEFSRUQsIGZkLCAwKTsKLQlpZiAoZXZsaXN0LT5tbWFwW2NwdV0uYmFzZSA9PSBNQVBfRkFJTEVEKSB7Ci0JCWlmIChldmxpc3QtPmNwdXMtPm1hcFtjcHVdID09IC0xICYmIGV2c2VsLT5hdHRyLmluaGVyaXQpCisJaWYgKGV2bGlzdC0+bW1hcFtpZHhdLmJhc2UgPT0gTUFQX0ZBSUxFRCkgeworCQlpZiAoZXZsaXN0LT5jcHVzLT5tYXBbaWR4XSA9PSAtMSAmJiBldnNlbC0+YXR0ci5pbmhlcml0KQogCQkJdWlfX3dhcm5pbmcoIkluaGVyaXQgaXMgbm90IGFsbG93ZWQgb24gcGVyLXRhc2sgIgogCQkJCSAgICAiZXZlbnRzIHVzaW5nIG1tYXAuXG4iKTsKIAkJcmV0dXJuIC0xOwpAQCAtMjY5LDYgKzI3NSw4NiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHBlcmZfZXZsaXN0X19tbWFwX3Blcl9jcHUoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QsIGludCBwcm90LCBpbnQgbWFzaykKK3sKKwlzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWw7CisJaW50IGNwdSwgdGhyZWFkOworCisJZm9yIChjcHUgPSAwOyBjcHUgPCBldmxpc3QtPmNwdXMtPm5yOyBjcHUrKykgeworCQlpbnQgb3V0cHV0ID0gLTE7CisKKwkJZm9yICh0aHJlYWQgPSAwOyB0aHJlYWQgPCBldmxpc3QtPnRocmVhZHMtPm5yOyB0aHJlYWQrKykgeworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShldnNlbCwgJmV2bGlzdC0+ZW50cmllcywgbm9kZSkgeworCQkJCWludCBmZCA9IEZEKGV2c2VsLCBjcHUsIHRocmVhZCk7CisKKwkJCQlpZiAob3V0cHV0ID09IC0xKSB7CisJCQkJCW91dHB1dCA9IGZkOworCQkJCQlpZiAoX19wZXJmX2V2bGlzdF9fbW1hcChldmxpc3QsIGV2c2VsLCBjcHUsCisJCQkJCQkJCXByb3QsIG1hc2ssIG91dHB1dCkgPCAwKQorCQkJCQkJZ290byBvdXRfdW5tYXA7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKGlvY3RsKGZkLCBQRVJGX0VWRU5UX0lPQ19TRVRfT1VUUFVULCBvdXRwdXQpICE9IDApCisJCQkJCQlnb3RvIG91dF91bm1hcDsKKwkJCQl9CisKKwkJCQlpZiAoKGV2c2VsLT5hdHRyLnJlYWRfZm9ybWF0ICYgUEVSRl9GT1JNQVRfSUQpICYmCisJCQkJICAgIHBlcmZfZXZsaXN0X19pZF9hZGRfZmQoZXZsaXN0LCBldnNlbCwgY3B1LCB0aHJlYWQsIGZkKSA8IDApCisJCQkJCWdvdG8gb3V0X3VubWFwOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIDA7CisKK291dF91bm1hcDoKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IGV2bGlzdC0+Y3B1cy0+bnI7IGNwdSsrKSB7CisJCWlmIChldmxpc3QtPm1tYXBbY3B1XS5iYXNlICE9IE5VTEwpIHsKKwkJCW11bm1hcChldmxpc3QtPm1tYXBbY3B1XS5iYXNlLCBldmxpc3QtPm1tYXBfbGVuKTsKKwkJCWV2bGlzdC0+bW1hcFtjcHVdLmJhc2UgPSBOVUxMOworCQl9CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBwZXJmX2V2bGlzdF9fbW1hcF9wZXJfdGhyZWFkKHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0LCBpbnQgcHJvdCwgaW50IG1hc2spCit7CisJc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsOworCWludCB0aHJlYWQ7CisKKwlmb3IgKHRocmVhZCA9IDA7IHRocmVhZCA8IGV2bGlzdC0+dGhyZWFkcy0+bnI7IHRocmVhZCsrKSB7CisJCWludCBvdXRwdXQgPSAtMTsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2c2VsLCAmZXZsaXN0LT5lbnRyaWVzLCBub2RlKSB7CisJCQlpbnQgZmQgPSBGRChldnNlbCwgMCwgdGhyZWFkKTsKKworCQkJaWYgKG91dHB1dCA9PSAtMSkgeworCQkJCW91dHB1dCA9IGZkOworCQkJCWlmIChfX3BlcmZfZXZsaXN0X19tbWFwKGV2bGlzdCwgZXZzZWwsIHRocmVhZCwKKwkJCQkJCQlwcm90LCBtYXNrLCBvdXRwdXQpIDwgMCkKKwkJCQkJZ290byBvdXRfdW5tYXA7CisJCQl9IGVsc2UgeworCQkJCWlmIChpb2N0bChmZCwgUEVSRl9FVkVOVF9JT0NfU0VUX09VVFBVVCwgb3V0cHV0KSAhPSAwKQorCQkJCQlnb3RvIG91dF91bm1hcDsKKwkJCX0KKworCQkJaWYgKChldnNlbC0+YXR0ci5yZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0lEKSAmJgorCQkJICAgIHBlcmZfZXZsaXN0X19pZF9hZGRfZmQoZXZsaXN0LCBldnNlbCwgMCwgdGhyZWFkLCBmZCkgPCAwKQorCQkJCWdvdG8gb3V0X3VubWFwOworCQl9CisJfQorCisJcmV0dXJuIDA7CisKK291dF91bm1hcDoKKwlmb3IgKHRocmVhZCA9IDA7IHRocmVhZCA8IGV2bGlzdC0+dGhyZWFkcy0+bnI7IHRocmVhZCsrKSB7CisJCWlmIChldmxpc3QtPm1tYXBbdGhyZWFkXS5iYXNlICE9IE5VTEwpIHsKKwkJCW11bm1hcChldmxpc3QtPm1tYXBbdGhyZWFkXS5iYXNlLCBldmxpc3QtPm1tYXBfbGVuKTsKKwkJCWV2bGlzdC0+bW1hcFt0aHJlYWRdLmJhc2UgPSBOVUxMOworCQl9CisJfQorCXJldHVybiAtMTsKK30KKwogLyoqIHBlcmZfZXZsaXN0X19tbWFwIC0gQ3JlYXRlIHBlciBjcHUgbWFwcyB0byByZWNlaXZlIGV2ZW50cwogICoKICAqIEBldmxpc3QgLSBsaXN0IG9mIGV2ZW50cwpAQCAtMjg3LDExICszNzMsMTEgQEAKIGludCBwZXJmX2V2bGlzdF9fbW1hcChzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCwgaW50IHBhZ2VzLCBib29sIG92ZXJ3cml0ZSkKIHsKIAl1bnNpZ25lZCBpbnQgcGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRV9TSVpFKTsKLQlpbnQgbWFzayA9IHBhZ2VzICogcGFnZV9zaXplIC0gMSwgY3B1OwotCXN0cnVjdCBwZXJmX2V2c2VsICpmaXJzdF9ldnNlbCwgKmV2c2VsOworCWludCBtYXNrID0gcGFnZXMgKiBwYWdlX3NpemUgLSAxOworCXN0cnVjdCBwZXJmX2V2c2VsICpldnNlbDsKIAljb25zdCBzdHJ1Y3QgY3B1X21hcCAqY3B1cyA9IGV2bGlzdC0+Y3B1czsKIAljb25zdCBzdHJ1Y3QgdGhyZWFkX21hcCAqdGhyZWFkcyA9IGV2bGlzdC0+dGhyZWFkczsKLQlpbnQgdGhyZWFkLCBwcm90ID0gUFJPVF9SRUFEIHwgKG92ZXJ3cml0ZSA/IDAgOiBQUk9UX1dSSVRFKTsKKwlpbnQgcHJvdCA9IFBST1RfUkVBRCB8IChvdmVyd3JpdGUgPyAwIDogUFJPVF9XUklURSk7CiAKIAlpZiAoZXZsaXN0LT5tbWFwID09IE5VTEwgJiYgcGVyZl9ldmxpc3RfX2FsbG9jX21tYXAoZXZsaXN0KSA8IDApCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMzAxLDQzICszODcsMTggQEAKIAogCWV2bGlzdC0+b3ZlcndyaXRlID0gb3ZlcndyaXRlOwogCWV2bGlzdC0+bW1hcF9sZW4gPSAocGFnZXMgKyAxKSAqIHBhZ2Vfc2l6ZTsKLQlmaXJzdF9ldnNlbCA9IGxpc3RfZW50cnkoZXZsaXN0LT5lbnRyaWVzLm5leHQsIHN0cnVjdCBwZXJmX2V2c2VsLCBub2RlKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZzZWwsICZldmxpc3QtPmVudHJpZXMsIG5vZGUpIHsKIAkJaWYgKChldnNlbC0+YXR0ci5yZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0lEKSAmJgogCQkgICAgZXZzZWwtPnNhbXBsZV9pZCA9PSBOVUxMICYmCiAJCSAgICBwZXJmX2V2c2VsX19hbGxvY19pZChldnNlbCwgY3B1cy0+bnIsIHRocmVhZHMtPm5yKSA8IDApCiAJCQlyZXR1cm4gLUVOT01FTTsKLQotCQlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdXMtPm5yOyBjcHUrKykgewotCQkJZm9yICh0aHJlYWQgPSAwOyB0aHJlYWQgPCB0aHJlYWRzLT5ucjsgdGhyZWFkKyspIHsKLQkJCQlpbnQgZmQgPSBGRChldnNlbCwgY3B1LCB0aHJlYWQpOwotCi0JCQkJaWYgKGV2c2VsLT5pZHggfHwgdGhyZWFkKSB7Ci0JCQkJCWlmIChpb2N0bChmZCwgUEVSRl9FVkVOVF9JT0NfU0VUX09VVFBVVCwKLQkJCQkJCSAgRkQoZmlyc3RfZXZzZWwsIGNwdSwgMCkpICE9IDApCi0JCQkJCQlnb3RvIG91dF91bm1hcDsKLQkJCQl9IGVsc2UgaWYgKF9fcGVyZl9ldmxpc3RfX21tYXAoZXZsaXN0LCBldnNlbCwgY3B1LAotCQkJCQkJCSAgICAgICBwcm90LCBtYXNrLCBmZCkgPCAwKQotCQkJCQlnb3RvIG91dF91bm1hcDsKLQotCQkJCWlmICgoZXZzZWwtPmF0dHIucmVhZF9mb3JtYXQgJiBQRVJGX0ZPUk1BVF9JRCkgJiYKLQkJCQkgICAgcGVyZl9ldmxpc3RfX2lkX2FkZF9mZChldmxpc3QsIGV2c2VsLCBjcHUsIHRocmVhZCwgZmQpIDwgMCkKLQkJCQkJZ290byBvdXRfdW5tYXA7Ci0JCQl9Ci0JCX0KIAl9CiAKLQlyZXR1cm4gMDsKKwlpZiAoZXZsaXN0LT5jcHVzLT5tYXBbMF0gPT0gLTEpCisJCXJldHVybiBwZXJmX2V2bGlzdF9fbW1hcF9wZXJfdGhyZWFkKGV2bGlzdCwgcHJvdCwgbWFzayk7CiAKLW91dF91bm1hcDoKLQlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdXMtPm5yOyBjcHUrKykgewotCQlpZiAoZXZsaXN0LT5tbWFwW2NwdV0uYmFzZSAhPSBOVUxMKSB7Ci0JCQltdW5tYXAoZXZsaXN0LT5tbWFwW2NwdV0uYmFzZSwgZXZsaXN0LT5tbWFwX2xlbik7Ci0JCQlldmxpc3QtPm1tYXBbY3B1XS5iYXNlID0gTlVMTDsKLQkJfQotCX0KLQlyZXR1cm4gLTE7CisJcmV0dXJuIHBlcmZfZXZsaXN0X19tbWFwX3Blcl9jcHUoZXZsaXN0LCBwcm90LCBtYXNrKTsKIH0KIAogaW50IHBlcmZfZXZsaXN0X19jcmVhdGVfbWFwcyhzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCwgcGlkX3QgdGFyZ2V0X3BpZCwKQEAgLTM0OCw3ICs0MDksNyBAQAogCWlmIChldmxpc3QtPnRocmVhZHMgPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwogCi0JaWYgKHRhcmdldF90aWQgIT0gLTEpCisJaWYgKGNwdV9saXN0ID09IE5VTEwgJiYgdGFyZ2V0X3RpZCAhPSAtMSkKIAkJZXZsaXN0LT5jcHVzID0gY3B1X21hcF9fZHVtbXlfbmV3KCk7CiAJZWxzZQogCQlldmxpc3QtPmNwdXMgPSBjcHVfbWFwX19uZXcoY3B1X2xpc3QpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5oIGIvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5oCmluZGV4IDhiMWNiN2EuLjcxMDlkN2EgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuaAorKysgYi90b29scy9wZXJmL3V0aWwvZXZsaXN0LmgKQEAgLTE3LDYgKzE3LDcgQEAKIAlzdHJ1Y3QgaGxpc3RfaGVhZCBoZWFkc1tQRVJGX0VWTElTVF9fSExJU1RfU0laRV07CiAJaW50CQkgbnJfZW50cmllczsKIAlpbnQJCSBucl9mZHM7CisJaW50CQkgbnJfbW1hcHM7CiAJaW50CQkgbW1hcF9sZW47CiAJYm9vbAkJIG92ZXJ3cml0ZTsKIAl1bmlvbiBwZXJmX2V2ZW50IGV2ZW50X2NvcHk7CkBAIC00Niw3ICs0Nyw3IEBACiAKIHN0cnVjdCBwZXJmX2V2c2VsICpwZXJmX2V2bGlzdF9faWQyZXZzZWwoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QsIHU2NCBpZCk7CiAKLXVuaW9uIHBlcmZfZXZlbnQgKnBlcmZfZXZsaXN0X19yZWFkX29uX2NwdShzdHJ1Y3QgcGVyZl9ldmxpc3QgKnNlbGYsIGludCBjcHUpOwordW5pb24gcGVyZl9ldmVudCAqcGVyZl9ldmxpc3RfX21tYXBfcmVhZChzdHJ1Y3QgcGVyZl9ldmxpc3QgKnNlbGYsIGludCBpZHgpOwogCiBpbnQgcGVyZl9ldmxpc3RfX2FsbG9jX21tYXAoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpOwogaW50IHBlcmZfZXZsaXN0X19tbWFwKHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0LCBpbnQgcGFnZXMsIGJvb2wgb3ZlcndyaXRlKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS1hc20uaCBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS1hc20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Nzg5ZDc4Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLWFzbS5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfUEVSRl9BU01fQUxURVJOQVRJVkVfQVNNX0gKKyNkZWZpbmUgX1BFUkZfQVNNX0FMVEVSTkFUSVZFX0FTTV9ICisKKy8qIEp1c3QgZGlzYWJsZSBpdCBzbyB3ZSBjYW4gYnVpbGQgYXJjaC94ODYvbGliL21lbWNweV82NC5TIGZvciBwZXJmIGJlbmNoOiAqLworCisjZGVmaW5lIGFsdGluc3RydWN0aW9uX2VudHJ5ICMKKworI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9saXN0LmggYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9saXN0LmgKaW5kZXggMzU2YzdlNC4uOTkzNThkNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvbGlzdC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2xpc3QuaApAQCAtMjMsNSArMjMsNSBAQAogICogQGhlYWQ6IHRoZSBoZWFkIGZvciB5b3VyIGxpc3QuCiAgKi8KICNkZWZpbmUgbGlzdF9mb3JfZWFjaF9mcm9tKHBvcywgaGVhZCkgXAotCWZvciAoOyBwcmVmZXRjaChwb3MtPm5leHQpLCBwb3MgIT0gKGhlYWQpOyBwb3MgPSBwb3MtPm5leHQpCisJZm9yICg7IHBvcyAhPSAoaGVhZCk7IHBvcyA9IHBvcy0+bmV4dCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCmluZGV4IDk1MmI0YWUuLjQxOTgyYzMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYworKysgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKQEAgLTMxLDM0ICszMSwzNiBAQAogI2RlZmluZSBDU1coeCkgLnR5cGUgPSBQRVJGX1RZUEVfU09GVFdBUkUsIC5jb25maWcgPSBQRVJGX0NPVU5UX1NXXyMjeAogCiBzdGF0aWMgc3RydWN0IGV2ZW50X3N5bWJvbCBldmVudF9zeW1ib2xzW10gPSB7Ci0gIHsgQ0hXKENQVV9DWUNMRVMpLAkJImNwdS1jeWNsZXMiLAkJImN5Y2xlcyIJfSwKLSAgeyBDSFcoSU5TVFJVQ1RJT05TKSwJCSJpbnN0cnVjdGlvbnMiLAkJIiIJCX0sCi0gIHsgQ0hXKENBQ0hFX1JFRkVSRU5DRVMpLAkiY2FjaGUtcmVmZXJlbmNlcyIsCSIiCQl9LAotICB7IENIVyhDQUNIRV9NSVNTRVMpLAkJImNhY2hlLW1pc3NlcyIsCQkiIgkJfSwKLSAgeyBDSFcoQlJBTkNIX0lOU1RSVUNUSU9OUyksCSJicmFuY2gtaW5zdHJ1Y3Rpb25zIiwJImJyYW5jaGVzIgl9LAotICB7IENIVyhCUkFOQ0hfTUlTU0VTKSwJCSJicmFuY2gtbWlzc2VzIiwJIiIJCX0sCi0gIHsgQ0hXKEJVU19DWUNMRVMpLAkJImJ1cy1jeWNsZXMiLAkJIiIJCX0sCisgIHsgQ0hXKENQVV9DWUNMRVMpLAkJCSJjcHUtY3ljbGVzIiwJCQkiY3ljbGVzIgkJfSwKKyAgeyBDSFcoU1RBTExFRF9DWUNMRVNfRlJPTlRFTkQpLAkic3RhbGxlZC1jeWNsZXMtZnJvbnRlbmQiLAkiaWRsZS1jeWNsZXMtZnJvbnRlbmQiCX0sCisgIHsgQ0hXKFNUQUxMRURfQ1lDTEVTX0JBQ0tFTkQpLAkic3RhbGxlZC1jeWNsZXMtYmFja2VuZCIsCSJpZGxlLWN5Y2xlcy1iYWNrZW5kIgl9LAorICB7IENIVyhJTlNUUlVDVElPTlMpLAkJCSJpbnN0cnVjdGlvbnMiLAkJCSIiCQkJfSwKKyAgeyBDSFcoQ0FDSEVfUkVGRVJFTkNFUyksCQkiY2FjaGUtcmVmZXJlbmNlcyIsCQkiIgkJCX0sCisgIHsgQ0hXKENBQ0hFX01JU1NFUyksCQkJImNhY2hlLW1pc3NlcyIsCQkJIiIJCQl9LAorICB7IENIVyhCUkFOQ0hfSU5TVFJVQ1RJT05TKSwJCSJicmFuY2gtaW5zdHJ1Y3Rpb25zIiwJCSJicmFuY2hlcyIJCX0sCisgIHsgQ0hXKEJSQU5DSF9NSVNTRVMpLAkJCSJicmFuY2gtbWlzc2VzIiwJCSIiCQkJfSwKKyAgeyBDSFcoQlVTX0NZQ0xFUyksCQkJImJ1cy1jeWNsZXMiLAkJCSIiCQkJfSwKIAotICB7IENTVyhDUFVfQ0xPQ0spLAkJImNwdS1jbG9jayIsCQkiIgkJfSwKLSAgeyBDU1coVEFTS19DTE9DSyksCQkidGFzay1jbG9jayIsCQkiIgkJfSwKLSAgeyBDU1coUEFHRV9GQVVMVFMpLAkJInBhZ2UtZmF1bHRzIiwJCSJmYXVsdHMiCX0sCi0gIHsgQ1NXKFBBR0VfRkFVTFRTX01JTiksCSJtaW5vci1mYXVsdHMiLAkJIiIJCX0sCi0gIHsgQ1NXKFBBR0VfRkFVTFRTX01BSiksCSJtYWpvci1mYXVsdHMiLAkJIiIJCX0sCi0gIHsgQ1NXKENPTlRFWFRfU1dJVENIRVMpLAkiY29udGV4dC1zd2l0Y2hlcyIsCSJjcyIJCX0sCi0gIHsgQ1NXKENQVV9NSUdSQVRJT05TKSwJImNwdS1taWdyYXRpb25zIiwJIm1pZ3JhdGlvbnMiCX0sCi0gIHsgQ1NXKEFMSUdOTUVOVF9GQVVMVFMpLAkiYWxpZ25tZW50LWZhdWx0cyIsCSIiCQl9LAotICB7IENTVyhFTVVMQVRJT05fRkFVTFRTKSwJImVtdWxhdGlvbi1mYXVsdHMiLAkiIgkJfSwKKyAgeyBDU1coQ1BVX0NMT0NLKSwJCQkiY3B1LWNsb2NrIiwJCQkiIgkJCX0sCisgIHsgQ1NXKFRBU0tfQ0xPQ0spLAkJCSJ0YXNrLWNsb2NrIiwJCQkiIgkJCX0sCisgIHsgQ1NXKFBBR0VfRkFVTFRTKSwJCQkicGFnZS1mYXVsdHMiLAkJCSJmYXVsdHMiCQl9LAorICB7IENTVyhQQUdFX0ZBVUxUU19NSU4pLAkJIm1pbm9yLWZhdWx0cyIsCQkJIiIJCQl9LAorICB7IENTVyhQQUdFX0ZBVUxUU19NQUopLAkJIm1ham9yLWZhdWx0cyIsCQkJIiIJCQl9LAorICB7IENTVyhDT05URVhUX1NXSVRDSEVTKSwJCSJjb250ZXh0LXN3aXRjaGVzIiwJCSJjcyIJCQl9LAorICB7IENTVyhDUFVfTUlHUkFUSU9OUyksCQkiY3B1LW1pZ3JhdGlvbnMiLAkJIm1pZ3JhdGlvbnMiCQl9LAorICB7IENTVyhBTElHTk1FTlRfRkFVTFRTKSwJCSJhbGlnbm1lbnQtZmF1bHRzIiwJCSIiCQkJfSwKKyAgeyBDU1coRU1VTEFUSU9OX0ZBVUxUUyksCQkiZW11bGF0aW9uLWZhdWx0cyIsCQkiIgkJCX0sCiB9OwogCiAjZGVmaW5lIF9fUEVSRl9FVkVOVF9GSUVMRChjb25maWcsIG5hbWUpIFwKIAkoKGNvbmZpZyAmIFBFUkZfRVZFTlRfIyNuYW1lIyNfTUFTSykgPj4gUEVSRl9FVkVOVF8jI25hbWUjI19TSElGVCkKIAotI2RlZmluZSBQRVJGX0VWRU5UX1JBVyhjb25maWcpCV9fUEVSRl9FVkVOVF9GSUVMRChjb25maWcsIFJBVykKKyNkZWZpbmUgUEVSRl9FVkVOVF9SQVcoY29uZmlnKQkJX19QRVJGX0VWRU5UX0ZJRUxEKGNvbmZpZywgUkFXKQogI2RlZmluZSBQRVJGX0VWRU5UX0NPTkZJRyhjb25maWcpCV9fUEVSRl9FVkVOVF9GSUVMRChjb25maWcsIENPTkZJRykKLSNkZWZpbmUgUEVSRl9FVkVOVF9UWVBFKGNvbmZpZykJX19QRVJGX0VWRU5UX0ZJRUxEKGNvbmZpZywgVFlQRSkKKyNkZWZpbmUgUEVSRl9FVkVOVF9UWVBFKGNvbmZpZykJCV9fUEVSRl9FVkVOVF9GSUVMRChjb25maWcsIFRZUEUpCiAjZGVmaW5lIFBFUkZfRVZFTlRfSUQoY29uZmlnKQkJX19QRVJGX0VWRU5UX0ZJRUxEKGNvbmZpZywgRVZFTlQpCiAKLXN0YXRpYyBjb25zdCBjaGFyICpod19ldmVudF9uYW1lc1tdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmh3X2V2ZW50X25hbWVzW1BFUkZfQ09VTlRfSFdfTUFYXSA9IHsKIAkiY3ljbGVzIiwKIAkiaW5zdHJ1Y3Rpb25zIiwKIAkiY2FjaGUtcmVmZXJlbmNlcyIsCkBAIC02NiwxMSArNjgsMTMgQEAKIAkiYnJhbmNoZXMiLAogCSJicmFuY2gtbWlzc2VzIiwKIAkiYnVzLWN5Y2xlcyIsCisJInN0YWxsZWQtY3ljbGVzLWZyb250ZW5kIiwKKwkic3RhbGxlZC1jeWNsZXMtYmFja2VuZCIsCiB9OwogCi1zdGF0aWMgY29uc3QgY2hhciAqc3dfZXZlbnRfbmFtZXNbXSA9IHsKLQkiY3B1LWNsb2NrLW1zZWNzIiwKLQkidGFzay1jbG9jay1tc2VjcyIsCitzdGF0aWMgY29uc3QgY2hhciAqc3dfZXZlbnRfbmFtZXNbUEVSRl9DT1VOVF9TV19NQVhdID0geworCSJjcHUtY2xvY2siLAorCSJ0YXNrLWNsb2NrIiwKIAkicGFnZS1mYXVsdHMiLAogCSJjb250ZXh0LXN3aXRjaGVzIiwKIAkiQ1BVLW1pZ3JhdGlvbnMiLApAQCAtMzA3LDcgKzMxMSw3IEBACiAKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIFBFUkZfVFlQRV9IQVJEV0FSRToKLQkJaWYgKGNvbmZpZyA8IFBFUkZfQ09VTlRfSFdfTUFYKQorCQlpZiAoY29uZmlnIDwgUEVSRl9DT1VOVF9IV19NQVggJiYgaHdfZXZlbnRfbmFtZXNbY29uZmlnXSkKIAkJCXJldHVybiBod19ldmVudF9uYW1lc1tjb25maWddOwogCQlyZXR1cm4gInVua25vd24taGFyZHdhcmUiOwogCkBAIC0zMzMsNyArMzM3LDcgQEAKIAl9CiAKIAljYXNlIFBFUkZfVFlQRV9TT0ZUV0FSRToKLQkJaWYgKGNvbmZpZyA8IFBFUkZfQ09VTlRfU1dfTUFYKQorCQlpZiAoY29uZmlnIDwgUEVSRl9DT1VOVF9TV19NQVggJiYgc3dfZXZlbnRfbmFtZXNbY29uZmlnXSkKIAkJCXJldHVybiBzd19ldmVudF9uYW1lc1tjb25maWddOwogCQlyZXR1cm4gInVua25vd24tc29mdHdhcmUiOwogCkBAIC02NDgsMTMgKzY1MiwxNSBAQAogCWludCBuOwogCiAJbiA9IHN0cmxlbihldmVudF9zeW1ib2xzW2ldLnN5bWJvbCk7Ci0JaWYgKCFzdHJuY21wKHN0ciwgZXZlbnRfc3ltYm9sc1tpXS5zeW1ib2wsIG4pKQorCWlmICghc3RybmNhc2VjbXAoc3RyLCBldmVudF9zeW1ib2xzW2ldLnN5bWJvbCwgbikpCiAJCXJldHVybiBuOwogCiAJbiA9IHN0cmxlbihldmVudF9zeW1ib2xzW2ldLmFsaWFzKTsKLQlpZiAobikKLQkJaWYgKCFzdHJuY21wKHN0ciwgZXZlbnRfc3ltYm9sc1tpXS5hbGlhcywgbikpCisJaWYgKG4pIHsKKwkJaWYgKCFzdHJuY2FzZWNtcChzdHIsIGV2ZW50X3N5bWJvbHNbaV0uYWxpYXMsIG4pKQogCQkJcmV0dXJuIG47CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTcxOCwxNSArNzI0LDIyIEBACiAJcmV0dXJuIEVWVF9GQUlMRUQ7CiB9CiAKLXN0YXRpYyBlbnVtIGV2ZW50X3Jlc3VsdAorc3RhdGljIGludAogcGFyc2VfZXZlbnRfbW9kaWZpZXIoY29uc3QgY2hhciAqKnN0cnAsIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIpCiB7CiAJY29uc3QgY2hhciAqc3RyID0gKnN0cnA7CiAJaW50IGV4Y2x1ZGUgPSAwOwogCWludCBldSA9IDAsIGVrID0gMCwgZWggPSAwLCBwcmVjaXNlID0gMDsKIAotCWlmICgqc3RyKysgIT0gJzonKQorCWlmICghKnN0cikKIAkJcmV0dXJuIDA7CisKKwlpZiAoKnN0ciA9PSAnLCcpCisJCXJldHVybiAwOworCisJaWYgKCpzdHIrKyAhPSAnOicpCisJCXJldHVybiAtMTsKKwogCXdoaWxlICgqc3RyKSB7CiAJCWlmICgqc3RyID09ICd1JykgewogCQkJaWYgKCFleGNsdWRlKQpAQCAtNzQ3LDE0ICs3NjAsMTYgQEAKIAogCQkrK3N0cjsKIAl9Ci0JaWYgKHN0ciA+PSAqc3RycCArIDIpIHsKLQkJKnN0cnAgPSBzdHI7Ci0JCWF0dHItPmV4Y2x1ZGVfdXNlciAgID0gZXU7Ci0JCWF0dHItPmV4Y2x1ZGVfa2VybmVsID0gZWs7Ci0JCWF0dHItPmV4Y2x1ZGVfaHYgICAgID0gZWg7Ci0JCWF0dHItPnByZWNpc2VfaXAgICAgID0gcHJlY2lzZTsKLQkJcmV0dXJuIDE7Ci0JfQorCWlmIChzdHIgPCAqc3RycCArIDIpCisJCXJldHVybiAtMTsKKworCSpzdHJwID0gc3RyOworCisJYXR0ci0+ZXhjbHVkZV91c2VyICAgPSBldTsKKwlhdHRyLT5leGNsdWRlX2tlcm5lbCA9IGVrOworCWF0dHItPmV4Y2x1ZGVfaHYgICAgID0gZWg7CisJYXR0ci0+cHJlY2lzZV9pcCAgICAgPSBwcmVjaXNlOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc5Nyw3ICs4MTIsMTIgQEAKIAlyZXR1cm4gRVZUX0ZBSUxFRDsKIAogbW9kaWZpZXI6Ci0JcGFyc2VfZXZlbnRfbW9kaWZpZXIoc3RyLCBhdHRyKTsKKwlpZiAocGFyc2VfZXZlbnRfbW9kaWZpZXIoc3RyLCBhdHRyKSA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIGV2ZW50IG1vZGlmaWVyOiAnJXMnXG4iLCAqc3RyKTsKKwkJZnByaW50ZihzdGRlcnIsICJSdW4gJ3BlcmYgbGlzdCcgZm9yIGEgbGlzdCBvZiB2YWxpZCBldmVudHMgYW5kIG1vZGlmaWVyc1xuIik7CisKKwkJcmV0dXJuIEVWVF9GQUlMRUQ7CisJfQogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTkxMiw3ICs5MzIsNyBAQAogCiAJCQlzbnByaW50ZihldnRfcGF0aCwgTUFYUEFUSExFTiwgIiVzOiVzIiwKIAkJCQkgc3lzX2RpcmVudC5kX25hbWUsIGV2dF9kaXJlbnQuZF9uYW1lKTsKLQkJCXByaW50ZigiICAlLTQycyBbJXNdXG4iLCBldnRfcGF0aCwKKwkJCXByaW50ZigiICAlLTUwcyBbJXNdXG4iLCBldnRfcGF0aCwKIAkJCQlldmVudF90eXBlX2Rlc2NyaXB0b3JzW1BFUkZfVFlQRV9UUkFDRVBPSU5UXSk7CiAJCX0KIAkJY2xvc2VkaXIoZXZ0X2Rpcik7CkBAIC05NzcsNyArOTk3LDcgQEAKIAkJZWxzZQogCQkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMiLCBzeW1zLT5zeW1ib2wpOwogCi0JCXByaW50ZigiICAlLTQycyBbJXNdXG4iLCBuYW1lLAorCQlwcmludGYoIiAgJS01MHMgWyVzXVxuIiwgbmFtZSwKIAkJCWV2ZW50X3R5cGVfZGVzY3JpcHRvcnNbdHlwZV0pOwogCX0KIH0KQEAgLTk5NSwxMSArMTAxNSwxMCBAQAogCQkJZm9yIChpID0gMDsgaSA8IFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWDsgaSsrKSB7CiAJCQkJY2hhciAqbmFtZSA9IGV2ZW50X2NhY2hlX25hbWUodHlwZSwgb3AsIGkpOwogCi0JCQkJaWYgKGV2ZW50X2dsb2IgIT0gTlVMTCAmJiAKLQkJCQkgICAgIXN0cmdsb2JtYXRjaChuYW1lLCBldmVudF9nbG9iKSkKKwkJCQlpZiAoZXZlbnRfZ2xvYiAhPSBOVUxMICYmICFzdHJnbG9ibWF0Y2gobmFtZSwgZXZlbnRfZ2xvYikpCiAJCQkJCWNvbnRpbnVlOwogCi0JCQkJcHJpbnRmKCIgICUtNDJzIFslc11cbiIsIG5hbWUsCisJCQkJcHJpbnRmKCIgICUtNTBzIFslc11cbiIsIG5hbWUsCiAJCQkJCWV2ZW50X3R5cGVfZGVzY3JpcHRvcnNbUEVSRl9UWVBFX0hXX0NBQ0hFXSk7CiAJCQkJKytwcmludGVkOwogCQkJfQpAQCAtMTAwOSwxNCArMTAyOCwxNiBAQAogCXJldHVybiBwcmludGVkOwogfQogCisjZGVmaW5lIE1BWF9OQU1FX0xFTiAxMDAKKwogLyoKICAqIFByaW50IHRoZSBoZWxwIHRleHQgZm9yIHRoZSBldmVudCBzeW1ib2xzOgogICovCiB2b2lkIHByaW50X2V2ZW50cyhjb25zdCBjaGFyICpldmVudF9nbG9iKQogewotCXN0cnVjdCBldmVudF9zeW1ib2wgKnN5bXMgPSBldmVudF9zeW1ib2xzOwogCXVuc2lnbmVkIGludCBpLCB0eXBlLCBwcmV2X3R5cGUgPSAtMSwgcHJpbnRlZCA9IDAsIG50eXBlc19wcmludGVkID0gMDsKLQljaGFyIG5hbWVbNDBdOworCXN0cnVjdCBldmVudF9zeW1ib2wgKnN5bXMgPSBldmVudF9zeW1ib2xzOworCWNoYXIgbmFtZVtNQVhfTkFNRV9MRU5dOwogCiAJcHJpbnRmKCJcbiIpOwogCXByaW50ZigiTGlzdCBvZiBwcmUtZGVmaW5lZCBldmVudHMgKHRvIGJlIHVzZWQgaW4gLWUpOlxuIik7CkBAIC0xMDM2LDEwICsxMDU3LDEwIEBACiAJCQljb250aW51ZTsKIAogCQlpZiAoc3RybGVuKHN5bXMtPmFsaWFzKSkKLQkJCXNwcmludGYobmFtZSwgIiVzIE9SICVzIiwgc3ltcy0+c3ltYm9sLCBzeW1zLT5hbGlhcyk7CisJCQlzbnByaW50ZihuYW1lLCBNQVhfTkFNRV9MRU4sICIlcyBPUiAlcyIsIHN5bXMtPnN5bWJvbCwgc3ltcy0+YWxpYXMpOwogCQllbHNlCi0JCQlzdHJjcHkobmFtZSwgc3ltcy0+c3ltYm9sKTsKLQkJcHJpbnRmKCIgICUtNDJzIFslc11cbiIsIG5hbWUsCisJCQlzdHJuY3B5KG5hbWUsIHN5bXMtPnN5bWJvbCwgTUFYX05BTUVfTEVOKTsKKwkJcHJpbnRmKCIgICUtNTBzIFslc11cbiIsIG5hbWUsCiAJCQlldmVudF90eXBlX2Rlc2NyaXB0b3JzW3R5cGVdKTsKIAogCQlwcmV2X3R5cGUgPSB0eXBlOwpAQCAtMTA1NiwxMiArMTA3NywxMiBAQAogCQlyZXR1cm47CiAKIAlwcmludGYoIlxuIik7Ci0JcHJpbnRmKCIgICUtNDJzIFslc11cbiIsCisJcHJpbnRmKCIgICUtNTBzIFslc11cbiIsCiAJCSJyTk5OIChzZWUgJ3BlcmYgbGlzdCAtLWhlbHAnIG9uIGhvdyB0byBlbmNvZGUgaXQpIiwKIAkgICAgICAgZXZlbnRfdHlwZV9kZXNjcmlwdG9yc1tQRVJGX1RZUEVfUkFXXSk7CiAJcHJpbnRmKCJcbiIpOwogCi0JcHJpbnRmKCIgICUtNDJzIFslc11cbiIsCisJcHJpbnRmKCIgICUtNTBzIFslc11cbiIsCiAJCQkibWVtOjxhZGRyPls6YWNjZXNzXSIsCiAJCQlldmVudF90eXBlX2Rlc2NyaXB0b3JzW1BFUkZfVFlQRV9CUkVBS1BPSU5UXSk7CiAJcHJpbnRmKCJcbiIpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5jIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5jCmluZGV4IGI3Yzg1Y2UuLjNiOWQwYjggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYworKysgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMKQEAgLTE0NzEsNiArMTQ3MSwzOCBAQAogCXJldHVybiBfcGFyYW0ucmV0dmFsOwogfQogCitzdHJ1Y3QgcHVibmFtZV9jYWxsYmFja19wYXJhbSB7CisJY2hhciAqZnVuY3Rpb247CisJY2hhciAqZmlsZTsKKwlEd2FyZl9EaWUgKmN1X2RpZTsKKwlEd2FyZl9EaWUgKnNwX2RpZTsKKwlpbnQgZm91bmQ7Cit9OworCitzdGF0aWMgaW50IHB1Ym5hbWVfc2VhcmNoX2NiKER3YXJmICpkYmcsIER3YXJmX0dsb2JhbCAqZ2wsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHB1Ym5hbWVfY2FsbGJhY2tfcGFyYW0gKnBhcmFtID0gZGF0YTsKKworCWlmIChkd2FyZl9vZmZkaWUoZGJnLCBnbC0+ZGllX29mZnNldCwgcGFyYW0tPnNwX2RpZSkpIHsKKwkJaWYgKGR3YXJmX3RhZyhwYXJhbS0+c3BfZGllKSAhPSBEV19UQUdfc3VicHJvZ3JhbSkKKwkJCXJldHVybiBEV0FSRl9DQl9PSzsKKworCQlpZiAoZGllX2NvbXBhcmVfbmFtZShwYXJhbS0+c3BfZGllLCBwYXJhbS0+ZnVuY3Rpb24pKSB7CisJCQlpZiAoIWR3YXJmX29mZmRpZShkYmcsIGdsLT5jdV9vZmZzZXQsIHBhcmFtLT5jdV9kaWUpKQorCQkJCXJldHVybiBEV0FSRl9DQl9PSzsKKworCQkJaWYgKHBhcmFtLT5maWxlICYmCisJCQkgICAgc3RydGFpbGNtcChwYXJhbS0+ZmlsZSwgZHdhcmZfZGVjbF9maWxlKHBhcmFtLT5zcF9kaWUpKSkKKwkJCQlyZXR1cm4gRFdBUkZfQ0JfT0s7CisKKwkJCXBhcmFtLT5mb3VuZCA9IDE7CisJCQlyZXR1cm4gRFdBUkZfQ0JfQUJPUlQ7CisJCX0KKwl9CisKKwlyZXR1cm4gRFdBUkZfQ0JfT0s7Cit9CisKIC8qIEZpbmQgcHJvYmUgcG9pbnRzIGZyb20gZGVidWdpbmZvICovCiBzdGF0aWMgaW50IGZpbmRfcHJvYmVzKGludCBmZCwgc3RydWN0IHByb2JlX2ZpbmRlciAqcGYpCiB7CkBAIC0xNDk4LDYgKzE1MzAsMjggQEAKIAogCW9mZiA9IDA7CiAJbGluZV9saXN0X19pbml0KCZwZi0+bGNhY2hlKTsKKworCS8qIEZhc3RwYXRoOiBsb29rdXAgYnkgZnVuY3Rpb24gbmFtZSBmcm9tIC5kZWJ1Z19wdWJuYW1lcyBzZWN0aW9uICovCisJaWYgKHBwLT5mdW5jdGlvbikgeworCQlzdHJ1Y3QgcHVibmFtZV9jYWxsYmFja19wYXJhbSBwdWJuYW1lX3BhcmFtID0geworCQkJLmZ1bmN0aW9uID0gcHAtPmZ1bmN0aW9uLAorCQkJLmZpbGUJICA9IHBwLT5maWxlLAorCQkJLmN1X2RpZQkgID0gJnBmLT5jdV9kaWUsCisJCQkuc3BfZGllCSAgPSAmcGYtPnNwX2RpZSwKKwkJCS5mb3VuZAkgID0gMCwKKwkJfTsKKwkJc3RydWN0IGR3YXJmX2NhbGxiYWNrX3BhcmFtIHByb2JlX3BhcmFtID0geworCQkJLmRhdGEgPSBwZiwKKwkJfTsKKworCQlkd2FyZl9nZXRwdWJuYW1lcyhkYmcsIHB1Ym5hbWVfc2VhcmNoX2NiLCAmcHVibmFtZV9wYXJhbSwgMCk7CisJCWlmIChwdWJuYW1lX3BhcmFtLmZvdW5kKSB7CisJCQlyZXQgPSBwcm9iZV9wb2ludF9zZWFyY2hfY2IoJnBmLT5zcF9kaWUsICZwcm9iZV9wYXJhbSk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZm91bmQ7CisJCX0KKwl9CisKIAkvKiBMb29wIG9uIENVcyAoQ29tcGlsYXRpb24gVW5pdCkgKi8KIAl3aGlsZSAoIWR3YXJmX25leHRjdShkYmcsIG9mZiwgJm5vZmYsICZjdWhsLCBOVUxMLCBOVUxMLCBOVUxMKSkgewogCQkvKiBHZXQgdGhlIERJRShEZWJ1Z2dpbmcgSW5mb3JtYXRpb24gRW50cnkpIG9mIHRoaXMgQ1UgKi8KQEAgLTE1MjUsNiArMTU3OSw4IEBACiAJCX0KIAkJb2ZmID0gbm9mZjsKIAl9CisKK2ZvdW5kOgogCWxpbmVfbGlzdF9fZnJlZSgmcGYtPmxjYWNoZSk7CiAJaWYgKGR3ZmwpCiAJCWR3ZmxfZW5kKGR3ZmwpOwpAQCAtMTk0Niw2ICsyMDAyLDIyIEBACiAJCXJldHVybiAtRUJBREY7CiAJfQogCisJLyogRmFzdHBhdGg6IGxvb2t1cCBieSBmdW5jdGlvbiBuYW1lIGZyb20gLmRlYnVnX3B1Ym5hbWVzIHNlY3Rpb24gKi8KKwlpZiAobHItPmZ1bmN0aW9uKSB7CisJCXN0cnVjdCBwdWJuYW1lX2NhbGxiYWNrX3BhcmFtIHB1Ym5hbWVfcGFyYW0gPSB7CisJCQkuZnVuY3Rpb24gPSBsci0+ZnVuY3Rpb24sIC5maWxlID0gbHItPmZpbGUsCisJCQkuY3VfZGllID0gJmxmLmN1X2RpZSwgLnNwX2RpZSA9ICZsZi5zcF9kaWUsIC5mb3VuZCA9IDB9OworCQlzdHJ1Y3QgZHdhcmZfY2FsbGJhY2tfcGFyYW0gbGluZV9yYW5nZV9wYXJhbSA9IHsKKwkJCS5kYXRhID0gKHZvaWQgKikmbGYsIC5yZXR2YWwgPSAwfTsKKworCQlkd2FyZl9nZXRwdWJuYW1lcyhkYmcsIHB1Ym5hbWVfc2VhcmNoX2NiLCAmcHVibmFtZV9wYXJhbSwgMCk7CisJCWlmIChwdWJuYW1lX3BhcmFtLmZvdW5kKSB7CisJCQlsaW5lX3JhbmdlX3NlYXJjaF9jYigmbGYuc3BfZGllLCAmbGluZV9yYW5nZV9wYXJhbSk7CisJCQlpZiAobGYuZm91bmQpCisJCQkJZ290byBmb3VuZDsKKwkJfQorCX0KKwogCS8qIExvb3Agb24gQ1VzIChDb21waWxhdGlvbiBVbml0KSAqLwogCXdoaWxlICghbGYuZm91bmQgJiYgcmV0ID49IDApIHsKIAkJaWYgKGR3YXJmX25leHRjdShkYmcsIG9mZiwgJm5vZmYsICZjdWhsLCBOVUxMLCBOVUxMLCBOVUxMKSAhPSAwKQpAQCAtMTk3NCw2ICsyMDQ2LDcgQEAKIAkJb2ZmID0gbm9mZjsKIAl9CiAKK2ZvdW5kOgogCS8qIFN0b3JlIGNvbXBfZGlyICovCiAJaWYgKGxmLmZvdW5kKSB7CiAJCWNvbXBfZGlyID0gY3VfZ2V0X2NvbXBfZGlyKCZsZi5jdV9kaWUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5oIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5oCmluZGV4IGJlYWVmYzMuLjYwNTczMGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuaAorKysgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmgKQEAgLTQ5LDYgKzQ5LDcgQEAKIAlEd2FyZl9BZGRyCQlhZGRyOwkJLyogQWRkcmVzcyAqLwogCWNvbnN0IGNoYXIJCSpmbmFtZTsJCS8qIFJlYWwgZmlsZSBuYW1lICovCiAJRHdhcmZfRGllCQljdV9kaWU7CQkvKiBDdXJyZW50IENVICovCisJRHdhcmZfRGllCQlzcF9kaWU7CiAJc3RydWN0IGxpc3RfaGVhZAlsY2FjaGU7CQkvKiBMaW5lIGNhY2hlIGZvciBsYXp5IG1hdGNoICovCiAKIAkvKiBGb3IgdmFyaWFibGUgc2VhcmNoaW5nICovCkBAIC04Myw2ICs4NCw3IEBACiAJaW50CQkJbG5vX3M7CQkvKiBTdGFydCBsaW5lIG51bWJlciAqLwogCWludAkJCWxub19lOwkJLyogRW5kIGxpbmUgbnVtYmVyICovCiAJRHdhcmZfRGllCQljdV9kaWU7CQkvKiBDdXJyZW50IENVICovCisJRHdhcmZfRGllCQlzcF9kaWU7CiAJaW50CQkJZm91bmQ7CiB9OwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHl0aG9uLmMgYi90b29scy9wZXJmL3V0aWwvcHl0aG9uLmMKaW5kZXggZjVlMzg0NS4uYjVjN2Q4MSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3B5dGhvbi5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9weXRob24uYwpAQCAtNjgwLDcgKzY4MCw3IEBACiAJCQkJCSAmY3B1LCAmc2FtcGxlX2lkX2FsbCkpCiAJCXJldHVybiBOVUxMOwogCi0JZXZlbnQgPSBwZXJmX2V2bGlzdF9fcmVhZF9vbl9jcHUoZXZsaXN0LCBjcHUpOworCWV2ZW50ID0gcGVyZl9ldmxpc3RfX21tYXBfcmVhZChldmxpc3QsIGNwdSk7CiAJaWYgKGV2ZW50ICE9IE5VTEwpIHsKIAkJc3RydWN0IHBlcmZfZXZzZWwgKmZpcnN0OwogCQlQeU9iamVjdCAqcHlldmVudCA9IHB5cmZfZXZlbnRfX25ldyhldmVudCk7CkBAIC04MTAsNiArODEwLDkgQEAKIAl7ICJDT1VOVF9IV19DQUNIRV9SRVNVTFRfQUNDRVNTIiwgUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfQUNDRVNTIH0sCiAJeyAiQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01JU1MiLCAgIFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01JU1MgfSwKIAorCXsgIkNPVU5UX0hXX1NUQUxMRURfQ1lDTEVTX0ZST05URU5EIiwJICBQRVJGX0NPVU5UX0hXX1NUQUxMRURfQ1lDTEVTX0ZST05URU5EIH0sCisJeyAiQ09VTlRfSFdfU1RBTExFRF9DWUNMRVNfQkFDS0VORCIsCSAgUEVSRl9DT1VOVF9IV19TVEFMTEVEX0NZQ0xFU19CQUNLRU5EIH0sCisKIAl7ICJDT1VOVF9TV19DUFVfQ0xPQ0siLAkgICAgICAgUEVSRl9DT1VOVF9TV19DUFVfQ0xPQ0sgfSwKIAl7ICJDT1VOVF9TV19UQVNLX0NMT0NLIiwgICAgICAgUEVSRl9DT1VOVF9TV19UQVNLX0NMT0NLIH0sCiAJeyAiQ09VTlRfU1dfUEFHRV9GQVVMVFMiLCAgICAgIFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFMgfSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMgYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCmluZGV4IGNhYTIyNDUuLmZmZjY2NzQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYwpAQCAtMTE1Niw2ICsxMTU2LDE4IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RydWN0IHBlcmZfZXZzZWwgKnBlcmZfc2Vzc2lvbl9fZmluZF9maXJzdF9ldnR5cGUoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKKwkJCQkJICAgICAgdW5zaWduZWQgaW50IHR5cGUpCit7CisJc3RydWN0IHBlcmZfZXZzZWwgKnBvczsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmc2Vzc2lvbi0+ZXZsaXN0LT5lbnRyaWVzLCBub2RlKSB7CisJCWlmIChwb3MtPmF0dHIudHlwZSA9PSB0eXBlKQorCQkJcmV0dXJuIHBvczsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKIHZvaWQgcGVyZl9zZXNzaW9uX19wcmludF9zeW1ib2xzKHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50LAogCQkJCXN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlLAogCQkJCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5oIGIvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uaAppbmRleCAxYWM0ODFmLi44ZGFhYTJkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmgKQEAgLTE2Miw2ICsxNjIsOSBAQAogCQkJCQlzZXNzaW9uLT5zYW1wbGVfaWRfYWxsLCBzYW1wbGUpOwogfQogCitzdHJ1Y3QgcGVyZl9ldnNlbCAqcGVyZl9zZXNzaW9uX19maW5kX2ZpcnN0X2V2dHlwZShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAorCQkJCQkgICAgdW5zaWduZWQgaW50IHR5cGUpOworCiB2b2lkIHBlcmZfc2Vzc2lvbl9fcHJpbnRfc3ltYm9scyh1bmlvbiBwZXJmX2V2ZW50ICpldmVudCwKIAkJCQkgc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUsCiAJCQkJIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCmluZGV4IGYwNmMxMGYuLjUxNjg3NmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYworKysgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKQEAgLTMxLDEzICszMSwxMyBAQAogI2RlZmluZSBOVF9HTlVfQlVJTERfSUQgMwogI2VuZGlmCiAKLXN0YXRpYyBib29sIGRzb19fYnVpbGRfaWRfZXF1YWwoY29uc3Qgc3RydWN0IGRzbyAqc2VsZiwgdTggKmJ1aWxkX2lkKTsKK3N0YXRpYyBib29sIGRzb19fYnVpbGRfaWRfZXF1YWwoY29uc3Qgc3RydWN0IGRzbyAqZHNvLCB1OCAqYnVpbGRfaWQpOwogc3RhdGljIGludCBlbGZfcmVhZF9idWlsZF9pZChFbGYgKmVsZiwgdm9pZCAqYmYsIHNpemVfdCBzaXplKTsKIHN0YXRpYyB2b2lkIGRzb3NfX2FkZChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3QgZHNvICpkc28pOwogc3RhdGljIHN0cnVjdCBtYXAgKm1hcF9fbmV3Mih1NjQgc3RhcnQsIHN0cnVjdCBkc28gKmRzbywgZW51bSBtYXBfdHlwZSB0eXBlKTsKLXN0YXRpYyBpbnQgZHNvX19sb2FkX2tlcm5lbF9zeW0oc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAorc3RhdGljIGludCBkc29fX2xvYWRfa2VybmVsX3N5bShzdHJ1Y3QgZHNvICpkc28sIHN0cnVjdCBtYXAgKm1hcCwKIAkJCQlzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKLXN0YXRpYyBpbnQgZHNvX19sb2FkX2d1ZXN0X2tlcm5lbF9zeW0oc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAorc3RhdGljIGludCBkc29fX2xvYWRfZ3Vlc3Rfa2VybmVsX3N5bShzdHJ1Y3QgZHNvICpkc28sIHN0cnVjdCBtYXAgKm1hcCwKIAkJCXN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOwogc3RhdGljIGludCB2bWxpbnV4X3BhdGhfX25yX2VudHJpZXM7CiBzdGF0aWMgY2hhciAqKnZtbGludXhfcGF0aDsKQEAgLTQ5LDI3ICs0OSwyNyBAQAogCS5zeW1mcyAgICAgICAgICAgID0gIiIsCiB9OwogCi1pbnQgZHNvX19uYW1lX2xlbihjb25zdCBzdHJ1Y3QgZHNvICpzZWxmKQoraW50IGRzb19fbmFtZV9sZW4oY29uc3Qgc3RydWN0IGRzbyAqZHNvKQogewogCWlmICh2ZXJib3NlKQotCQlyZXR1cm4gc2VsZi0+bG9uZ19uYW1lX2xlbjsKKwkJcmV0dXJuIGRzby0+bG9uZ19uYW1lX2xlbjsKIAotCXJldHVybiBzZWxmLT5zaG9ydF9uYW1lX2xlbjsKKwlyZXR1cm4gZHNvLT5zaG9ydF9uYW1lX2xlbjsKIH0KIAotYm9vbCBkc29fX2xvYWRlZChjb25zdCBzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpCitib29sIGRzb19fbG9hZGVkKGNvbnN0IHN0cnVjdCBkc28gKmRzbywgZW51bSBtYXBfdHlwZSB0eXBlKQogewotCXJldHVybiBzZWxmLT5sb2FkZWQgJiAoMSA8PCB0eXBlKTsKKwlyZXR1cm4gZHNvLT5sb2FkZWQgJiAoMSA8PCB0eXBlKTsKIH0KIAotYm9vbCBkc29fX3NvcnRlZF9ieV9uYW1lKGNvbnN0IHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSkKK2Jvb2wgZHNvX19zb3J0ZWRfYnlfbmFtZShjb25zdCBzdHJ1Y3QgZHNvICpkc28sIGVudW0gbWFwX3R5cGUgdHlwZSkKIHsKLQlyZXR1cm4gc2VsZi0+c29ydGVkX2J5X25hbWUgJiAoMSA8PCB0eXBlKTsKKwlyZXR1cm4gZHNvLT5zb3J0ZWRfYnlfbmFtZSAmICgxIDw8IHR5cGUpOwogfQogCi1zdGF0aWMgdm9pZCBkc29fX3NldF9zb3J0ZWRfYnlfbmFtZShzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpCitzdGF0aWMgdm9pZCBkc29fX3NldF9zb3J0ZWRfYnlfbmFtZShzdHJ1Y3QgZHNvICpkc28sIGVudW0gbWFwX3R5cGUgdHlwZSkKIHsKLQlzZWxmLT5zb3J0ZWRfYnlfbmFtZSB8PSAoMSA8PCB0eXBlKTsKKwlkc28tPnNvcnRlZF9ieV9uYW1lIHw9ICgxIDw8IHR5cGUpOwogfQogCiBib29sIHN5bWJvbF90eXBlX19pc19hKGNoYXIgc3ltYm9sX3R5cGUsIGVudW0gbWFwX3R5cGUgbWFwX3R5cGUpCkBAIC04NCw5ICs4NCw5IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzeW1ib2xzX19maXh1cF9lbmQoc3RydWN0IHJiX3Jvb3QgKnNlbGYpCitzdGF0aWMgdm9pZCBzeW1ib2xzX19maXh1cF9lbmQoc3RydWN0IHJiX3Jvb3QgKnN5bWJvbHMpCiB7Ci0Jc3RydWN0IHJiX25vZGUgKm5kLCAqcHJldm5kID0gcmJfZmlyc3Qoc2VsZik7CisJc3RydWN0IHJiX25vZGUgKm5kLCAqcHJldm5kID0gcmJfZmlyc3Qoc3ltYm9scyk7CiAJc3RydWN0IHN5bWJvbCAqY3VyciwgKnByZXY7CiAKIAlpZiAocHJldm5kID09IE5VTEwpCkBAIC0xMDcsMTAgKzEwNywxMCBAQAogCQljdXJyLT5lbmQgPSByb3VuZHVwKGN1cnItPnN0YXJ0LCA0MDk2KTsKIH0KIAotc3RhdGljIHZvaWQgX19tYXBfZ3JvdXBzX19maXh1cF9lbmQoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSkKK3N0YXRpYyB2b2lkIF9fbWFwX2dyb3Vwc19fZml4dXBfZW5kKHN0cnVjdCBtYXBfZ3JvdXBzICptZywgZW51bSBtYXBfdHlwZSB0eXBlKQogewogCXN0cnVjdCBtYXAgKnByZXYsICpjdXJyOwotCXN0cnVjdCByYl9ub2RlICpuZCwgKnByZXZuZCA9IHJiX2ZpcnN0KCZzZWxmLT5tYXBzW3R5cGVdKTsKKwlzdHJ1Y3QgcmJfbm9kZSAqbmQsICpwcmV2bmQgPSByYl9maXJzdCgmbWctPm1hcHNbdHlwZV0pOwogCiAJaWYgKHByZXZuZCA9PSBOVUxMKQogCQlyZXR1cm47CkBAIC0xMzAsMTI4ICsxMzAsMTI4IEBACiAJY3Vyci0+ZW5kID0gfjBVTEw7CiB9CiAKLXN0YXRpYyB2b2lkIG1hcF9ncm91cHNfX2ZpeHVwX2VuZChzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZikKK3N0YXRpYyB2b2lkIG1hcF9ncm91cHNfX2ZpeHVwX2VuZChzdHJ1Y3QgbWFwX2dyb3VwcyAqbWcpCiB7CiAJaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IE1BUF9fTlJfVFlQRVM7ICsraSkKLQkJX19tYXBfZ3JvdXBzX19maXh1cF9lbmQoc2VsZiwgaSk7CisJCV9fbWFwX2dyb3Vwc19fZml4dXBfZW5kKG1nLCBpKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzeW1ib2wgKnN5bWJvbF9fbmV3KHU2NCBzdGFydCwgdTY0IGxlbiwgdTggYmluZGluZywKIAkJCQkgIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc2l6ZV90IG5hbWVsZW4gPSBzdHJsZW4obmFtZSkgKyAxOwotCXN0cnVjdCBzeW1ib2wgKnNlbGYgPSBjYWxsb2MoMSwgKHN5bWJvbF9jb25mLnByaXZfc2l6ZSArCi0JCQkJCSBzaXplb2YoKnNlbGYpICsgbmFtZWxlbikpOwotCWlmIChzZWxmID09IE5VTEwpCisJc3RydWN0IHN5bWJvbCAqc3ltID0gY2FsbG9jKDEsIChzeW1ib2xfY29uZi5wcml2X3NpemUgKworCQkJCQlzaXplb2YoKnN5bSkgKyBuYW1lbGVuKSk7CisJaWYgKHN5bSA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAogCWlmIChzeW1ib2xfY29uZi5wcml2X3NpemUpCi0JCXNlbGYgPSAoKHZvaWQgKilzZWxmKSArIHN5bWJvbF9jb25mLnByaXZfc2l6ZTsKKwkJc3ltID0gKCh2b2lkICopc3ltKSArIHN5bWJvbF9jb25mLnByaXZfc2l6ZTsKIAotCXNlbGYtPnN0YXJ0ICAgPSBzdGFydDsKLQlzZWxmLT5lbmQgICAgID0gbGVuID8gc3RhcnQgKyBsZW4gLSAxIDogc3RhcnQ7Ci0Jc2VsZi0+YmluZGluZyA9IGJpbmRpbmc7Ci0Jc2VsZi0+bmFtZWxlbiA9IG5hbWVsZW4gLSAxOworCXN5bS0+c3RhcnQgICA9IHN0YXJ0OworCXN5bS0+ZW5kICAgICA9IGxlbiA/IHN0YXJ0ICsgbGVuIC0gMSA6IHN0YXJ0OworCXN5bS0+YmluZGluZyA9IGJpbmRpbmc7CisJc3ltLT5uYW1lbGVuID0gbmFtZWxlbiAtIDE7CiAKLQlwcl9kZWJ1ZzQoIiVzOiAlcyAlIyIgUFJJeDY0ICItJSMiIFBSSXg2NCAiXG4iLCBfX2Z1bmNfXywgbmFtZSwgc3RhcnQsIHNlbGYtPmVuZCk7CisJcHJfZGVidWc0KCIlczogJXMgJSMiIFBSSXg2NCAiLSUjIiBQUkl4NjQgIlxuIiwKKwkJICBfX2Z1bmNfXywgbmFtZSwgc3RhcnQsIHN5bS0+ZW5kKTsKKwltZW1jcHkoc3ltLT5uYW1lLCBuYW1lLCBuYW1lbGVuKTsKIAotCW1lbWNweShzZWxmLT5uYW1lLCBuYW1lLCBuYW1lbGVuKTsKLQotCXJldHVybiBzZWxmOworCXJldHVybiBzeW07CiB9CiAKLXZvaWQgc3ltYm9sX19kZWxldGUoc3RydWN0IHN5bWJvbCAqc2VsZikKK3ZvaWQgc3ltYm9sX19kZWxldGUoc3RydWN0IHN5bWJvbCAqc3ltKQogewotCWZyZWUoKCh2b2lkICopc2VsZikgLSBzeW1ib2xfY29uZi5wcml2X3NpemUpOworCWZyZWUoKCh2b2lkICopc3ltKSAtIHN5bWJvbF9jb25mLnByaXZfc2l6ZSk7CiB9CiAKLXN0YXRpYyBzaXplX3Qgc3ltYm9sX19mcHJpbnRmKHN0cnVjdCBzeW1ib2wgKnNlbGYsIEZJTEUgKmZwKQorc3RhdGljIHNpemVfdCBzeW1ib2xfX2ZwcmludGYoc3RydWN0IHN5bWJvbCAqc3ltLCBGSUxFICpmcCkKIHsKIAlyZXR1cm4gZnByaW50ZihmcCwgIiAlIiBQUkl4NjQgIi0lIiBQUkl4NjQgIiAlYyAlc1xuIiwKLQkJICAgICAgIHNlbGYtPnN0YXJ0LCBzZWxmLT5lbmQsCi0JCSAgICAgICBzZWxmLT5iaW5kaW5nID09IFNUQl9HTE9CQUwgPyAnZycgOgotCQkgICAgICAgc2VsZi0+YmluZGluZyA9PSBTVEJfTE9DQUwgID8gJ2wnIDogJ3cnLAotCQkgICAgICAgc2VsZi0+bmFtZSk7CisJCSAgICAgICBzeW0tPnN0YXJ0LCBzeW0tPmVuZCwKKwkJICAgICAgIHN5bS0+YmluZGluZyA9PSBTVEJfR0xPQkFMID8gJ2cnIDoKKwkJICAgICAgIHN5bS0+YmluZGluZyA9PSBTVEJfTE9DQUwgID8gJ2wnIDogJ3cnLAorCQkgICAgICAgc3ltLT5uYW1lKTsKIH0KIAotdm9pZCBkc29fX3NldF9sb25nX25hbWUoc3RydWN0IGRzbyAqc2VsZiwgY2hhciAqbmFtZSkKK3ZvaWQgZHNvX19zZXRfbG9uZ19uYW1lKHN0cnVjdCBkc28gKmRzbywgY2hhciAqbmFtZSkKIHsKIAlpZiAobmFtZSA9PSBOVUxMKQogCQlyZXR1cm47Ci0Jc2VsZi0+bG9uZ19uYW1lID0gbmFtZTsKLQlzZWxmLT5sb25nX25hbWVfbGVuID0gc3RybGVuKG5hbWUpOworCWRzby0+bG9uZ19uYW1lID0gbmFtZTsKKwlkc28tPmxvbmdfbmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRzb19fc2V0X3Nob3J0X25hbWUoc3RydWN0IGRzbyAqc2VsZiwgY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyB2b2lkIGRzb19fc2V0X3Nob3J0X25hbWUoc3RydWN0IGRzbyAqZHNvLCBjb25zdCBjaGFyICpuYW1lKQogewogCWlmIChuYW1lID09IE5VTEwpCiAJCXJldHVybjsKLQlzZWxmLT5zaG9ydF9uYW1lID0gbmFtZTsKLQlzZWxmLT5zaG9ydF9uYW1lX2xlbiA9IHN0cmxlbihuYW1lKTsKKwlkc28tPnNob3J0X25hbWUgPSBuYW1lOworCWRzby0+c2hvcnRfbmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRzb19fc2V0X2Jhc2VuYW1lKHN0cnVjdCBkc28gKnNlbGYpCitzdGF0aWMgdm9pZCBkc29fX3NldF9iYXNlbmFtZShzdHJ1Y3QgZHNvICpkc28pCiB7Ci0JZHNvX19zZXRfc2hvcnRfbmFtZShzZWxmLCBiYXNlbmFtZShzZWxmLT5sb25nX25hbWUpKTsKKwlkc29fX3NldF9zaG9ydF9uYW1lKGRzbywgYmFzZW5hbWUoZHNvLT5sb25nX25hbWUpKTsKIH0KIAogc3RydWN0IGRzbyAqZHNvX19uZXcoY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgZHNvICpzZWxmID0gY2FsbG9jKDEsIHNpemVvZigqc2VsZikgKyBzdHJsZW4obmFtZSkgKyAxKTsKKwlzdHJ1Y3QgZHNvICpkc28gPSBjYWxsb2MoMSwgc2l6ZW9mKCpkc28pICsgc3RybGVuKG5hbWUpICsgMSk7CiAKLQlpZiAoc2VsZiAhPSBOVUxMKSB7CisJaWYgKGRzbyAhPSBOVUxMKSB7CiAJCWludCBpOwotCQlzdHJjcHkoc2VsZi0+bmFtZSwgbmFtZSk7Ci0JCWRzb19fc2V0X2xvbmdfbmFtZShzZWxmLCBzZWxmLT5uYW1lKTsKLQkJZHNvX19zZXRfc2hvcnRfbmFtZShzZWxmLCBzZWxmLT5uYW1lKTsKKwkJc3RyY3B5KGRzby0+bmFtZSwgbmFtZSk7CisJCWRzb19fc2V0X2xvbmdfbmFtZShkc28sIGRzby0+bmFtZSk7CisJCWRzb19fc2V0X3Nob3J0X25hbWUoZHNvLCBkc28tPm5hbWUpOwogCQlmb3IgKGkgPSAwOyBpIDwgTUFQX19OUl9UWVBFUzsgKytpKQotCQkJc2VsZi0+c3ltYm9sc1tpXSA9IHNlbGYtPnN5bWJvbF9uYW1lc1tpXSA9IFJCX1JPT1Q7Ci0JCXNlbGYtPnN5bXRhYl90eXBlID0gU1lNVEFCX19OT1RfRk9VTkQ7Ci0JCXNlbGYtPmxvYWRlZCA9IDA7Ci0JCXNlbGYtPnNvcnRlZF9ieV9uYW1lID0gMDsKLQkJc2VsZi0+aGFzX2J1aWxkX2lkID0gMDsKLQkJc2VsZi0+a2VybmVsID0gRFNPX1RZUEVfVVNFUjsKLQkJSU5JVF9MSVNUX0hFQUQoJnNlbGYtPm5vZGUpOworCQkJZHNvLT5zeW1ib2xzW2ldID0gZHNvLT5zeW1ib2xfbmFtZXNbaV0gPSBSQl9ST09UOworCQlkc28tPnN5bXRhYl90eXBlID0gU1lNVEFCX19OT1RfRk9VTkQ7CisJCWRzby0+bG9hZGVkID0gMDsKKwkJZHNvLT5zb3J0ZWRfYnlfbmFtZSA9IDA7CisJCWRzby0+aGFzX2J1aWxkX2lkID0gMDsKKwkJZHNvLT5rZXJuZWwgPSBEU09fVFlQRV9VU0VSOworCQlJTklUX0xJU1RfSEVBRCgmZHNvLT5ub2RlKTsKIAl9CiAKLQlyZXR1cm4gc2VsZjsKKwlyZXR1cm4gZHNvOwogfQogCi1zdGF0aWMgdm9pZCBzeW1ib2xzX19kZWxldGUoc3RydWN0IHJiX3Jvb3QgKnNlbGYpCitzdGF0aWMgdm9pZCBzeW1ib2xzX19kZWxldGUoc3RydWN0IHJiX3Jvb3QgKnN5bWJvbHMpCiB7CiAJc3RydWN0IHN5bWJvbCAqcG9zOwotCXN0cnVjdCByYl9ub2RlICpuZXh0ID0gcmJfZmlyc3Qoc2VsZik7CisJc3RydWN0IHJiX25vZGUgKm5leHQgPSByYl9maXJzdChzeW1ib2xzKTsKIAogCXdoaWxlIChuZXh0KSB7CiAJCXBvcyA9IHJiX2VudHJ5KG5leHQsIHN0cnVjdCBzeW1ib2wsIHJiX25vZGUpOwogCQluZXh0ID0gcmJfbmV4dCgmcG9zLT5yYl9ub2RlKTsKLQkJcmJfZXJhc2UoJnBvcy0+cmJfbm9kZSwgc2VsZik7CisJCXJiX2VyYXNlKCZwb3MtPnJiX25vZGUsIHN5bWJvbHMpOwogCQlzeW1ib2xfX2RlbGV0ZShwb3MpOwogCX0KIH0KIAotdm9pZCBkc29fX2RlbGV0ZShzdHJ1Y3QgZHNvICpzZWxmKQordm9pZCBkc29fX2RlbGV0ZShzdHJ1Y3QgZHNvICpkc28pCiB7CiAJaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IE1BUF9fTlJfVFlQRVM7ICsraSkKLQkJc3ltYm9sc19fZGVsZXRlKCZzZWxmLT5zeW1ib2xzW2ldKTsKLQlpZiAoc2VsZi0+c25hbWVfYWxsb2MpCi0JCWZyZWUoKGNoYXIgKilzZWxmLT5zaG9ydF9uYW1lKTsKLQlpZiAoc2VsZi0+bG5hbWVfYWxsb2MpCi0JCWZyZWUoc2VsZi0+bG9uZ19uYW1lKTsKLQlmcmVlKHNlbGYpOworCQlzeW1ib2xzX19kZWxldGUoJmRzby0+c3ltYm9sc1tpXSk7CisJaWYgKGRzby0+c25hbWVfYWxsb2MpCisJCWZyZWUoKGNoYXIgKilkc28tPnNob3J0X25hbWUpOworCWlmIChkc28tPmxuYW1lX2FsbG9jKQorCQlmcmVlKGRzby0+bG9uZ19uYW1lKTsKKwlmcmVlKGRzbyk7CiB9CiAKLXZvaWQgZHNvX19zZXRfYnVpbGRfaWQoc3RydWN0IGRzbyAqc2VsZiwgdm9pZCAqYnVpbGRfaWQpCit2b2lkIGRzb19fc2V0X2J1aWxkX2lkKHN0cnVjdCBkc28gKmRzbywgdm9pZCAqYnVpbGRfaWQpCiB7Ci0JbWVtY3B5KHNlbGYtPmJ1aWxkX2lkLCBidWlsZF9pZCwgc2l6ZW9mKHNlbGYtPmJ1aWxkX2lkKSk7Ci0Jc2VsZi0+aGFzX2J1aWxkX2lkID0gMTsKKwltZW1jcHkoZHNvLT5idWlsZF9pZCwgYnVpbGRfaWQsIHNpemVvZihkc28tPmJ1aWxkX2lkKSk7CisJZHNvLT5oYXNfYnVpbGRfaWQgPSAxOwogfQogCi1zdGF0aWMgdm9pZCBzeW1ib2xzX19pbnNlcnQoc3RydWN0IHJiX3Jvb3QgKnNlbGYsIHN0cnVjdCBzeW1ib2wgKnN5bSkKK3N0YXRpYyB2b2lkIHN5bWJvbHNfX2luc2VydChzdHJ1Y3QgcmJfcm9vdCAqc3ltYm9scywgc3RydWN0IHN5bWJvbCAqc3ltKQogewotCXN0cnVjdCByYl9ub2RlICoqcCA9ICZzZWxmLT5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICoqcCA9ICZzeW1ib2xzLT5yYl9ub2RlOwogCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOwogCWNvbnN0IHU2NCBpcCA9IHN5bS0+c3RhcnQ7CiAJc3RydWN0IHN5bWJvbCAqczsKQEAgLTI2NSwxNyArMjY1LDE3IEBACiAJCQlwID0gJigqcCktPnJiX3JpZ2h0OwogCX0KIAlyYl9saW5rX25vZGUoJnN5bS0+cmJfbm9kZSwgcGFyZW50LCBwKTsKLQlyYl9pbnNlcnRfY29sb3IoJnN5bS0+cmJfbm9kZSwgc2VsZik7CisJcmJfaW5zZXJ0X2NvbG9yKCZzeW0tPnJiX25vZGUsIHN5bWJvbHMpOwogfQogCi1zdGF0aWMgc3RydWN0IHN5bWJvbCAqc3ltYm9sc19fZmluZChzdHJ1Y3QgcmJfcm9vdCAqc2VsZiwgdTY0IGlwKQorc3RhdGljIHN0cnVjdCBzeW1ib2wgKnN5bWJvbHNfX2ZpbmQoc3RydWN0IHJiX3Jvb3QgKnN5bWJvbHMsIHU2NCBpcCkKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqbjsKIAotCWlmIChzZWxmID09IE5VTEwpCisJaWYgKHN5bWJvbHMgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKLQluID0gc2VsZi0+cmJfbm9kZTsKKwluID0gc3ltYm9scy0+cmJfbm9kZTsKIAogCXdoaWxlIChuKSB7CiAJCXN0cnVjdCBzeW1ib2wgKnMgPSByYl9lbnRyeShuLCBzdHJ1Y3Qgc3ltYm9sLCByYl9ub2RlKTsKQEAgLTI5Niw5ICsyOTYsOSBAQAogCXN0cnVjdCBzeW1ib2wJc3ltOwogfTsKIAotc3RhdGljIHZvaWQgc3ltYm9sc19faW5zZXJ0X2J5X25hbWUoc3RydWN0IHJiX3Jvb3QgKnNlbGYsIHN0cnVjdCBzeW1ib2wgKnN5bSkKK3N0YXRpYyB2b2lkIHN5bWJvbHNfX2luc2VydF9ieV9uYW1lKHN0cnVjdCByYl9yb290ICpzeW1ib2xzLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pCiB7Ci0Jc3RydWN0IHJiX25vZGUgKipwID0gJnNlbGYtPnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKipwID0gJnN5bWJvbHMtPnJiX25vZGU7CiAJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CiAJc3RydWN0IHN5bWJvbF9uYW1lX3JiX25vZGUgKnN5bW4sICpzOwogCkBAIC0zMTMsMjcgKzMxMywyOSBAQAogCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKIAl9CiAJcmJfbGlua19ub2RlKCZzeW1uLT5yYl9ub2RlLCBwYXJlbnQsIHApOwotCXJiX2luc2VydF9jb2xvcigmc3ltbi0+cmJfbm9kZSwgc2VsZik7CisJcmJfaW5zZXJ0X2NvbG9yKCZzeW1uLT5yYl9ub2RlLCBzeW1ib2xzKTsKIH0KIAotc3RhdGljIHZvaWQgc3ltYm9sc19fc29ydF9ieV9uYW1lKHN0cnVjdCByYl9yb290ICpzZWxmLCBzdHJ1Y3QgcmJfcm9vdCAqc291cmNlKQorc3RhdGljIHZvaWQgc3ltYm9sc19fc29ydF9ieV9uYW1lKHN0cnVjdCByYl9yb290ICpzeW1ib2xzLAorCQkJCSAgc3RydWN0IHJiX3Jvb3QgKnNvdXJjZSkKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqbmQ7CiAKIAlmb3IgKG5kID0gcmJfZmlyc3Qoc291cmNlKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKIAkJc3RydWN0IHN5bWJvbCAqcG9zID0gcmJfZW50cnkobmQsIHN0cnVjdCBzeW1ib2wsIHJiX25vZGUpOwotCQlzeW1ib2xzX19pbnNlcnRfYnlfbmFtZShzZWxmLCBwb3MpOworCQlzeW1ib2xzX19pbnNlcnRfYnlfbmFtZShzeW1ib2xzLCBwb3MpOwogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBzeW1ib2wgKnN5bWJvbHNfX2ZpbmRfYnlfbmFtZShzdHJ1Y3QgcmJfcm9vdCAqc2VsZiwgY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyBzdHJ1Y3Qgc3ltYm9sICpzeW1ib2xzX19maW5kX2J5X25hbWUoc3RydWN0IHJiX3Jvb3QgKnN5bWJvbHMsCisJCQkJCSAgICBjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCByYl9ub2RlICpuOwogCi0JaWYgKHNlbGYgPT0gTlVMTCkKKwlpZiAoc3ltYm9scyA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAotCW4gPSBzZWxmLT5yYl9ub2RlOworCW4gPSBzeW1ib2xzLT5yYl9ub2RlOwogCiAJd2hpbGUgKG4pIHsKIAkJc3RydWN0IHN5bWJvbF9uYW1lX3JiX25vZGUgKnM7CkBAIC0zNTMsMjkgKzM1NSwyOSBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdHJ1Y3Qgc3ltYm9sICpkc29fX2ZpbmRfc3ltYm9sKHN0cnVjdCBkc28gKnNlbGYsCitzdHJ1Y3Qgc3ltYm9sICpkc29fX2ZpbmRfc3ltYm9sKHN0cnVjdCBkc28gKmRzbywKIAkJCQllbnVtIG1hcF90eXBlIHR5cGUsIHU2NCBhZGRyKQogewotCXJldHVybiBzeW1ib2xzX19maW5kKCZzZWxmLT5zeW1ib2xzW3R5cGVdLCBhZGRyKTsKKwlyZXR1cm4gc3ltYm9sc19fZmluZCgmZHNvLT5zeW1ib2xzW3R5cGVdLCBhZGRyKTsKIH0KIAotc3RydWN0IHN5bWJvbCAqZHNvX19maW5kX3N5bWJvbF9ieV9uYW1lKHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSwKK3N0cnVjdCBzeW1ib2wgKmRzb19fZmluZF9zeW1ib2xfYnlfbmFtZShzdHJ1Y3QgZHNvICpkc28sIGVudW0gbWFwX3R5cGUgdHlwZSwKIAkJCQkJY29uc3QgY2hhciAqbmFtZSkKIHsKLQlyZXR1cm4gc3ltYm9sc19fZmluZF9ieV9uYW1lKCZzZWxmLT5zeW1ib2xfbmFtZXNbdHlwZV0sIG5hbWUpOworCXJldHVybiBzeW1ib2xzX19maW5kX2J5X25hbWUoJmRzby0+c3ltYm9sX25hbWVzW3R5cGVdLCBuYW1lKTsKIH0KIAotdm9pZCBkc29fX3NvcnRfYnlfbmFtZShzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpCit2b2lkIGRzb19fc29ydF9ieV9uYW1lKHN0cnVjdCBkc28gKmRzbywgZW51bSBtYXBfdHlwZSB0eXBlKQogewotCWRzb19fc2V0X3NvcnRlZF9ieV9uYW1lKHNlbGYsIHR5cGUpOwotCXJldHVybiBzeW1ib2xzX19zb3J0X2J5X25hbWUoJnNlbGYtPnN5bWJvbF9uYW1lc1t0eXBlXSwKLQkJCQkgICAgICZzZWxmLT5zeW1ib2xzW3R5cGVdKTsKKwlkc29fX3NldF9zb3J0ZWRfYnlfbmFtZShkc28sIHR5cGUpOworCXJldHVybiBzeW1ib2xzX19zb3J0X2J5X25hbWUoJmRzby0+c3ltYm9sX25hbWVzW3R5cGVdLAorCQkJCSAgICAgJmRzby0+c3ltYm9sc1t0eXBlXSk7CiB9CiAKLWludCBidWlsZF9pZF9fc3ByaW50Zihjb25zdCB1OCAqc2VsZiwgaW50IGxlbiwgY2hhciAqYmYpCitpbnQgYnVpbGRfaWRfX3NwcmludGYoY29uc3QgdTggKmJ1aWxkX2lkLCBpbnQgbGVuLCBjaGFyICpiZikKIHsKIAljaGFyICpiaWQgPSBiZjsKLQljb25zdCB1OCAqcmF3ID0gc2VsZjsKKwljb25zdCB1OCAqcmF3ID0gYnVpbGRfaWQ7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKQEAgLTM4NCwyNCArMzg2LDI1IEBACiAJCWJpZCArPSAyOwogCX0KIAotCXJldHVybiByYXcgLSBzZWxmOworCXJldHVybiByYXcgLSBidWlsZF9pZDsKIH0KIAotc2l6ZV90IGRzb19fZnByaW50Zl9idWlsZGlkKHN0cnVjdCBkc28gKnNlbGYsIEZJTEUgKmZwKQorc2l6ZV90IGRzb19fZnByaW50Zl9idWlsZGlkKHN0cnVjdCBkc28gKmRzbywgRklMRSAqZnApCiB7CiAJY2hhciBzYnVpbGRfaWRbQlVJTERfSURfU0laRSAqIDIgKyAxXTsKIAotCWJ1aWxkX2lkX19zcHJpbnRmKHNlbGYtPmJ1aWxkX2lkLCBzaXplb2Yoc2VsZi0+YnVpbGRfaWQpLCBzYnVpbGRfaWQpOworCWJ1aWxkX2lkX19zcHJpbnRmKGRzby0+YnVpbGRfaWQsIHNpemVvZihkc28tPmJ1aWxkX2lkKSwgc2J1aWxkX2lkKTsKIAlyZXR1cm4gZnByaW50ZihmcCwgIiVzIiwgc2J1aWxkX2lkKTsKIH0KIAotc2l6ZV90IGRzb19fZnByaW50Zl9zeW1ib2xzX2J5X25hbWUoc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlLCBGSUxFICpmcCkKK3NpemVfdCBkc29fX2ZwcmludGZfc3ltYm9sc19ieV9uYW1lKHN0cnVjdCBkc28gKmRzbywKKwkJCQkgICAgZW51bSBtYXBfdHlwZSB0eXBlLCBGSUxFICpmcCkKIHsKIAlzaXplX3QgcmV0ID0gMDsKIAlzdHJ1Y3QgcmJfbm9kZSAqbmQ7CiAJc3RydWN0IHN5bWJvbF9uYW1lX3JiX25vZGUgKnBvczsKIAotCWZvciAobmQgPSByYl9maXJzdCgmc2VsZi0+c3ltYm9sX25hbWVzW3R5cGVdKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKKwlmb3IgKG5kID0gcmJfZmlyc3QoJmRzby0+c3ltYm9sX25hbWVzW3R5cGVdKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKIAkJcG9zID0gcmJfZW50cnkobmQsIHN0cnVjdCBzeW1ib2xfbmFtZV9yYl9ub2RlLCByYl9ub2RlKTsKIAkJZnByaW50ZihmcCwgIiVzXG4iLCBwb3MtPnN5bS5uYW1lKTsKIAl9CkBAIC00MDksMTggKzQxMiwxOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXNpemVfdCBkc29fX2ZwcmludGYoc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlLCBGSUxFICpmcCkKK3NpemVfdCBkc29fX2ZwcmludGYoc3RydWN0IGRzbyAqZHNvLCBlbnVtIG1hcF90eXBlIHR5cGUsIEZJTEUgKmZwKQogewogCXN0cnVjdCByYl9ub2RlICpuZDsKLQlzaXplX3QgcmV0ID0gZnByaW50ZihmcCwgImRzbzogJXMgKCIsIHNlbGYtPnNob3J0X25hbWUpOworCXNpemVfdCByZXQgPSBmcHJpbnRmKGZwLCAiZHNvOiAlcyAoIiwgZHNvLT5zaG9ydF9uYW1lKTsKIAotCWlmIChzZWxmLT5zaG9ydF9uYW1lICE9IHNlbGYtPmxvbmdfbmFtZSkKLQkJcmV0ICs9IGZwcmludGYoZnAsICIlcywgIiwgc2VsZi0+bG9uZ19uYW1lKTsKKwlpZiAoZHNvLT5zaG9ydF9uYW1lICE9IGRzby0+bG9uZ19uYW1lKQorCQlyZXQgKz0gZnByaW50ZihmcCwgIiVzLCAiLCBkc28tPmxvbmdfbmFtZSk7CiAJcmV0ICs9IGZwcmludGYoZnAsICIlcywgJXNsb2FkZWQsICIsIG1hcF90eXBlX19uYW1lW3R5cGVdLAotCQkgICAgICAgc2VsZi0+bG9hZGVkID8gIiIgOiAiTk9UICIpOwotCXJldCArPSBkc29fX2ZwcmludGZfYnVpbGRpZChzZWxmLCBmcCk7CisJCSAgICAgICBkc28tPmxvYWRlZCA/ICIiIDogIk5PVCAiKTsKKwlyZXQgKz0gZHNvX19mcHJpbnRmX2J1aWxkaWQoZHNvLCBmcCk7CiAJcmV0ICs9IGZwcmludGYoZnAsICIpXG4iKTsKLQlmb3IgKG5kID0gcmJfZmlyc3QoJnNlbGYtPnN5bWJvbHNbdHlwZV0pOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgeworCWZvciAobmQgPSByYl9maXJzdCgmZHNvLT5zeW1ib2xzW3R5cGVdKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKIAkJc3RydWN0IHN5bWJvbCAqcG9zID0gcmJfZW50cnkobmQsIHN0cnVjdCBzeW1ib2wsIHJiX25vZGUpOwogCQlyZXQgKz0gc3ltYm9sX19mcHJpbnRmKHBvcywgZnApOwogCX0KQEAgLTU0MywxMCArNTQ2LDEwIEBACiAgKiBzbyB0aGF0IHdlIGNhbiBpbiB0aGUgbmV4dCBzdGVwIHNldCB0aGUgc3ltYm9sIC0+ZW5kIGFkZHJlc3MgYW5kIHRoZW4KICAqIGNhbGwga2VybmVsX21hcHNfX3NwbGl0X2thbGxzeW1zLgogICovCi1zdGF0aWMgaW50IGRzb19fbG9hZF9hbGxfa2FsbHN5bXMoc3RydWN0IGRzbyAqc2VsZiwgY29uc3QgY2hhciAqZmlsZW5hbWUsCitzdGF0aWMgaW50IGRzb19fbG9hZF9hbGxfa2FsbHN5bXMoc3RydWN0IGRzbyAqZHNvLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKIAkJCQkgIHN0cnVjdCBtYXAgKm1hcCkKIHsKLQlzdHJ1Y3QgcHJvY2Vzc19rYWxsc3ltc19hcmdzIGFyZ3MgPSB7IC5tYXAgPSBtYXAsIC5kc28gPSBzZWxmLCB9OworCXN0cnVjdCBwcm9jZXNzX2thbGxzeW1zX2FyZ3MgYXJncyA9IHsgLm1hcCA9IG1hcCwgLmRzbyA9IGRzbywgfTsKIAlyZXR1cm4ga2FsbHN5bXNfX3BhcnNlKGZpbGVuYW1lLCAmYXJncywgbWFwX19wcm9jZXNzX2thbGxzeW1fc3ltYm9sKTsKIH0KIApAQCAtNTU1LDcgKzU1OCw3IEBACiAgKiBrZXJuZWwgcmFuZ2UgaXMgYnJva2VuIGluIHNldmVyYWwgbWFwcywgbmFtZWQgW2tlcm5lbF0uTiwgYXMgd2UgZG9uJ3QgaGF2ZQogICogdGhlIG9yaWdpbmFsIEVMRiBzZWN0aW9uIG5hbWVzIHZtbGludXggaGF2ZS4KICAqLwotc3RhdGljIGludCBkc29fX3NwbGl0X2thbGxzeW1zKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKK3N0YXRpYyBpbnQgZHNvX19zcGxpdF9rYWxsc3ltcyhzdHJ1Y3QgZHNvICpkc28sIHN0cnVjdCBtYXAgKm1hcCwKIAkJCSAgICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewogCXN0cnVjdCBtYXBfZ3JvdXBzICprbWFwcyA9IG1hcF9fa21hcChtYXApLT5rbWFwczsKQEAgLTU2Myw3ICs1NjYsNyBAQAogCXN0cnVjdCBtYXAgKmN1cnJfbWFwID0gbWFwOwogCXN0cnVjdCBzeW1ib2wgKnBvczsKIAlpbnQgY291bnQgPSAwLCBtb3ZlZCA9IDA7CQotCXN0cnVjdCByYl9yb290ICpyb290ID0gJnNlbGYtPnN5bWJvbHNbbWFwLT50eXBlXTsKKwlzdHJ1Y3QgcmJfcm9vdCAqcm9vdCA9ICZkc28tPnN5bWJvbHNbbWFwLT50eXBlXTsKIAlzdHJ1Y3QgcmJfbm9kZSAqbmV4dCA9IHJiX2ZpcnN0KHJvb3QpOwogCWludCBrZXJuZWxfcmFuZ2UgPSAwOwogCkBAIC01ODIsNyArNTg1LDcgQEAKIAogCQkJaWYgKHN0cmNtcChjdXJyX21hcC0+ZHNvLT5zaG9ydF9uYW1lLCBtb2R1bGUpKSB7CiAJCQkJaWYgKGN1cnJfbWFwICE9IG1hcCAmJgotCQkJCSAgICBzZWxmLT5rZXJuZWwgPT0gRFNPX1RZUEVfR1VFU1RfS0VSTkVMICYmCisJCQkJICAgIGRzby0+a2VybmVsID09IERTT19UWVBFX0dVRVNUX0tFUk5FTCAmJgogCQkJCSAgICBtYWNoaW5lX19pc19kZWZhdWx0X2d1ZXN0KG1hY2hpbmUpKSB7CiAJCQkJCS8qCiAJCQkJCSAqIFdlIGFzc3VtZSBhbGwgc3ltYm9scyBvZiBhIG1vZHVsZSBhcmUKQEAgLTYxOCwxNCArNjIxLDE0IEBACiAJCQlwb3MtPmVuZCAgID0gY3Vycl9tYXAtPm1hcF9pcChjdXJyX21hcCwgcG9zLT5lbmQpOwogCQl9IGVsc2UgaWYgKGN1cnJfbWFwICE9IG1hcCkgewogCQkJY2hhciBkc29fbmFtZVtQQVRIX01BWF07Ci0JCQlzdHJ1Y3QgZHNvICpkc287CisJCQlzdHJ1Y3QgZHNvICpuZHNvOwogCiAJCQlpZiAoY291bnQgPT0gMCkgewogCQkJCWN1cnJfbWFwID0gbWFwOwogCQkJCWdvdG8gZmlsdGVyX3N5bWJvbDsKIAkJCX0KIAotCQkJaWYgKHNlbGYtPmtlcm5lbCA9PSBEU09fVFlQRV9HVUVTVF9LRVJORUwpCisJCQlpZiAoZHNvLT5rZXJuZWwgPT0gRFNPX1RZUEVfR1VFU1RfS0VSTkVMKQogCQkJCXNucHJpbnRmKGRzb19uYW1lLCBzaXplb2YoZHNvX25hbWUpLAogCQkJCQkiW2d1ZXN0Lmtlcm5lbF0uJWQiLAogCQkJCQlrZXJuZWxfcmFuZ2UrKyk7CkBAIC02MzQsMTUgKzYzNywxNSBAQAogCQkJCQkiW2tlcm5lbF0uJWQiLAogCQkJCQlrZXJuZWxfcmFuZ2UrKyk7CiAKLQkJCWRzbyA9IGRzb19fbmV3KGRzb19uYW1lKTsKLQkJCWlmIChkc28gPT0gTlVMTCkKKwkJCW5kc28gPSBkc29fX25ldyhkc29fbmFtZSk7CisJCQlpZiAobmRzbyA9PSBOVUxMKQogCQkJCXJldHVybiAtMTsKIAotCQkJZHNvLT5rZXJuZWwgPSBzZWxmLT5rZXJuZWw7CisJCQluZHNvLT5rZXJuZWwgPSBkc28tPmtlcm5lbDsKIAotCQkJY3Vycl9tYXAgPSBtYXBfX25ldzIocG9zLT5zdGFydCwgZHNvLCBtYXAtPnR5cGUpOworCQkJY3Vycl9tYXAgPSBtYXBfX25ldzIocG9zLT5zdGFydCwgbmRzbywgbWFwLT50eXBlKTsKIAkJCWlmIChjdXJyX21hcCA9PSBOVUxMKSB7Ci0JCQkJZHNvX19kZWxldGUoZHNvKTsKKwkJCQlkc29fX2RlbGV0ZShuZHNvKTsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CiAKQEAgLTY2NSw3ICs2NjgsNyBAQAogCX0KIAogCWlmIChjdXJyX21hcCAhPSBtYXAgJiYKLQkgICAgc2VsZi0+a2VybmVsID09IERTT19UWVBFX0dVRVNUX0tFUk5FTCAmJgorCSAgICBkc28tPmtlcm5lbCA9PSBEU09fVFlQRV9HVUVTVF9LRVJORUwgJiYKIAkgICAgbWFjaGluZV9faXNfZGVmYXVsdF9ndWVzdChrbWFwcy0+bWFjaGluZSkpIHsKIAkJZHNvX19zZXRfbG9hZGVkKGN1cnJfbWFwLT5kc28sIGN1cnJfbWFwLT50eXBlKTsKIAl9CkBAIC02NzMsMjEgKzY3NiwyMSBAQAogCXJldHVybiBjb3VudCArIG1vdmVkOwogfQogCi1pbnQgZHNvX19sb2FkX2thbGxzeW1zKHN0cnVjdCBkc28gKnNlbGYsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAoraW50IGRzb19fbG9hZF9rYWxsc3ltcyhzdHJ1Y3QgZHNvICpkc28sIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCQkgICAgICAgc3RydWN0IG1hcCAqbWFwLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewotCWlmIChkc29fX2xvYWRfYWxsX2thbGxzeW1zKHNlbGYsIGZpbGVuYW1lLCBtYXApIDwgMCkKKwlpZiAoZHNvX19sb2FkX2FsbF9rYWxsc3ltcyhkc28sIGZpbGVuYW1lLCBtYXApIDwgMCkKIAkJcmV0dXJuIC0xOwogCi0JaWYgKHNlbGYtPmtlcm5lbCA9PSBEU09fVFlQRV9HVUVTVF9LRVJORUwpCi0JCXNlbGYtPnN5bXRhYl90eXBlID0gU1lNVEFCX19HVUVTVF9LQUxMU1lNUzsKKwlpZiAoZHNvLT5rZXJuZWwgPT0gRFNPX1RZUEVfR1VFU1RfS0VSTkVMKQorCQlkc28tPnN5bXRhYl90eXBlID0gU1lNVEFCX19HVUVTVF9LQUxMU1lNUzsKIAllbHNlCi0JCXNlbGYtPnN5bXRhYl90eXBlID0gU1lNVEFCX19LQUxMU1lNUzsKKwkJZHNvLT5zeW10YWJfdHlwZSA9IFNZTVRBQl9fS0FMTFNZTVM7CiAKLQlyZXR1cm4gZHNvX19zcGxpdF9rYWxsc3ltcyhzZWxmLCBtYXAsIGZpbHRlcik7CisJcmV0dXJuIGRzb19fc3BsaXRfa2FsbHN5bXMoZHNvLCBtYXAsIGZpbHRlcik7CiB9CiAKLXN0YXRpYyBpbnQgZHNvX19sb2FkX3BlcmZfbWFwKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKK3N0YXRpYyBpbnQgZHNvX19sb2FkX3BlcmZfbWFwKHN0cnVjdCBkc28gKmRzbywgc3RydWN0IG1hcCAqbWFwLAogCQkJICAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKIAljaGFyICpsaW5lID0gTlVMTDsKQEAgLTY5NSw3ICs2OTgsNyBAQAogCUZJTEUgKmZpbGU7CiAJaW50IG5yX3N5bXMgPSAwOwogCi0JZmlsZSA9IGZvcGVuKHNlbGYtPmxvbmdfbmFtZSwgInIiKTsKKwlmaWxlID0gZm9wZW4oZHNvLT5sb25nX25hbWUsICJyIik7CiAJaWYgKGZpbGUgPT0gTlVMTCkKIAkJZ290byBvdXRfZmFpbHVyZTsKIApAQCAtNzMzLDcgKzczNiw3IEBACiAJCWlmIChmaWx0ZXIgJiYgZmlsdGVyKG1hcCwgc3ltKSkKIAkJCXN5bWJvbF9fZGVsZXRlKHN5bSk7CiAJCWVsc2UgewotCQkJc3ltYm9sc19faW5zZXJ0KCZzZWxmLT5zeW1ib2xzW21hcC0+dHlwZV0sIHN5bSk7CisJCQlzeW1ib2xzX19pbnNlcnQoJmRzby0+c3ltYm9sc1ttYXAtPnR5cGVdLCBzeW0pOwogCQkJbnJfc3ltcysrOwogCQl9CiAJfQpAQCAtNzUyLDcgKzc1NSw3IEBACiAvKioKICAqIGVsZl9zeW10YWJfX2Zvcl9lYWNoX3N5bWJvbCAtIGl0ZXJhdGUgdGhydSBhbGwgdGhlIHN5bWJvbHMKICAqCi0gKiBAc2VsZjogc3RydWN0IGVsZl9zeW10YWIgaW5zdGFuY2UgdG8gaXRlcmF0ZQorICogQHN5bXM6IHN0cnVjdCBlbGZfc3ltdGFiIGluc3RhbmNlIHRvIGl0ZXJhdGUKICAqIEBpZHg6IHVpbnQzMl90IGlkeAogICogQHN5bTogR0VsZl9TeW0gaXRlcmF0b3IKICAqLwpAQCAtODUyLDcgKzg1NSw3IEBACiAgKiBBbmQgYWx3YXlzIGxvb2sgYXQgdGhlIG9yaWdpbmFsIGRzbywgbm90IGF0IGRlYnVnaW5mbyBwYWNrYWdlcywgdGhhdAogICogaGF2ZSB0aGUgUExUIGRhdGEgc3RyaXBwZWQgb3V0IChzaGRyX3JlbF9wbHQuc2hfdHlwZSA9PSBTSFRfTk9CSVRTKS4KICAqLwotc3RhdGljIGludCBkc29fX3N5bnRoZXNpemVfcGx0X3N5bWJvbHMoc3RydWN0ICBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKK3N0YXRpYyBpbnQgZHNvX19zeW50aGVzaXplX3BsdF9zeW1ib2xzKHN0cnVjdCAgZHNvICpkc28sIHN0cnVjdCBtYXAgKm1hcCwKIAkJCQkgICAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKIAl1aW50MzJfdCBucl9yZWxfZW50cmllcywgaWR4OwpAQCAtODcxLDcgKzg3NCw3IEBACiAJY2hhciBuYW1lW1BBVEhfTUFYXTsKIAogCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzJXMiLAotCQkgc3ltYm9sX2NvbmYuc3ltZnMsIHNlbGYtPmxvbmdfbmFtZSk7CisJCSBzeW1ib2xfY29uZi5zeW1mcywgZHNvLT5sb25nX25hbWUpOwogCWZkID0gb3BlbihuYW1lLCBPX1JET05MWSk7CiAJaWYgKGZkIDwgMCkKIAkJZ290byBvdXQ7CkBAIC05NDcsNyArOTUwLDcgQEAKIAkJCWlmIChmaWx0ZXIgJiYgZmlsdGVyKG1hcCwgZikpCiAJCQkJc3ltYm9sX19kZWxldGUoZik7CiAJCQllbHNlIHsKLQkJCQlzeW1ib2xzX19pbnNlcnQoJnNlbGYtPnN5bWJvbHNbbWFwLT50eXBlXSwgZik7CisJCQkJc3ltYm9sc19faW5zZXJ0KCZkc28tPnN5bWJvbHNbbWFwLT50eXBlXSwgZik7CiAJCQkJKytucjsKIAkJCX0KIAkJfQpAQCAtOTY5LDcgKzk3Miw3IEBACiAJCQlpZiAoZmlsdGVyICYmIGZpbHRlcihtYXAsIGYpKQogCQkJCXN5bWJvbF9fZGVsZXRlKGYpOwogCQkJZWxzZSB7Ci0JCQkJc3ltYm9sc19faW5zZXJ0KCZzZWxmLT5zeW1ib2xzW21hcC0+dHlwZV0sIGYpOworCQkJCXN5bWJvbHNfX2luc2VydCgmZHNvLT5zeW1ib2xzW21hcC0+dHlwZV0sIGYpOwogCQkJCSsrbnI7CiAJCQl9CiAJCX0KQEAgLTk4NSwyOSArOTg4LDMwIEBACiAJCXJldHVybiBucjsKIG91dDoKIAlwcl9kZWJ1ZygiJXM6IHByb2JsZW1zIHJlYWRpbmcgJXMgUExUIGluZm8uXG4iLAotCQkgX19mdW5jX18sIHNlbGYtPmxvbmdfbmFtZSk7CisJCSBfX2Z1bmNfXywgZHNvLT5sb25nX25hbWUpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgYm9vbCBlbGZfc3ltX19pc19hKEdFbGZfU3ltICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpCitzdGF0aWMgYm9vbCBlbGZfc3ltX19pc19hKEdFbGZfU3ltICpzeW0sIGVudW0gbWFwX3R5cGUgdHlwZSkKIHsKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIE1BUF9fRlVOQ1RJT046Ci0JCXJldHVybiBlbGZfc3ltX19pc19mdW5jdGlvbihzZWxmKTsKKwkJcmV0dXJuIGVsZl9zeW1fX2lzX2Z1bmN0aW9uKHN5bSk7CiAJY2FzZSBNQVBfX1ZBUklBQkxFOgotCQlyZXR1cm4gZWxmX3N5bV9faXNfb2JqZWN0KHNlbGYpOworCQlyZXR1cm4gZWxmX3N5bV9faXNfb2JqZWN0KHN5bSk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIGZhbHNlOwogCX0KIH0KIAotc3RhdGljIGJvb2wgZWxmX3NlY19faXNfYShHRWxmX1NoZHIgKnNlbGYsIEVsZl9EYXRhICpzZWNzdHJzLCBlbnVtIG1hcF90eXBlIHR5cGUpCitzdGF0aWMgYm9vbCBlbGZfc2VjX19pc19hKEdFbGZfU2hkciAqc2hkciwgRWxmX0RhdGEgKnNlY3N0cnMsCisJCQkgIGVudW0gbWFwX3R5cGUgdHlwZSkKIHsKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIE1BUF9fRlVOQ1RJT046Ci0JCXJldHVybiBlbGZfc2VjX19pc190ZXh0KHNlbGYsIHNlY3N0cnMpOworCQlyZXR1cm4gZWxmX3NlY19faXNfdGV4dChzaGRyLCBzZWNzdHJzKTsKIAljYXNlIE1BUF9fVkFSSUFCTEU6Ci0JCXJldHVybiBlbGZfc2VjX19pc19kYXRhKHNlbGYsIHNlY3N0cnMpOworCQlyZXR1cm4gZWxmX3NlY19faXNfZGF0YShzaGRyLCBzZWNzdHJzKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gZmFsc2U7CiAJfQpAQCAtMTAzMiwxMyArMTAzNiwxMyBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCBkc29fX2xvYWRfc3ltKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwgY29uc3QgY2hhciAqbmFtZSwKK3N0YXRpYyBpbnQgZHNvX19sb2FkX3N5bShzdHJ1Y3QgZHNvICpkc28sIHN0cnVjdCBtYXAgKm1hcCwgY29uc3QgY2hhciAqbmFtZSwKIAkJCSBpbnQgZmQsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIsIGludCBrbW9kdWxlLAogCQkJIGludCB3YW50X3N5bXRhYikKIHsKLQlzdHJ1Y3Qga21hcCAqa21hcCA9IHNlbGYtPmtlcm5lbCA/IG1hcF9fa21hcChtYXApIDogTlVMTDsKKwlzdHJ1Y3Qga21hcCAqa21hcCA9IGRzby0+a2VybmVsID8gbWFwX19rbWFwKG1hcCkgOiBOVUxMOwogCXN0cnVjdCBtYXAgKmN1cnJfbWFwID0gbWFwOwotCXN0cnVjdCBkc28gKmN1cnJfZHNvID0gc2VsZjsKKwlzdHJ1Y3QgZHNvICpjdXJyX2RzbyA9IGRzbzsKIAlFbGZfRGF0YSAqc3ltc3RycywgKnNlY3N0cnM7CiAJdWludDMyX3QgbnJfc3ltczsKIAlpbnQgZXJyID0gLTE7CkBAIC0xMDY0LDE0ICsxMDY4LDE0IEBACiAJfQogCiAJLyogQWx3YXlzIHJlamVjdCBpbWFnZXMgd2l0aCBhIG1pc21hdGNoZWQgYnVpbGQtaWQ6ICovCi0JaWYgKHNlbGYtPmhhc19idWlsZF9pZCkgeworCWlmIChkc28tPmhhc19idWlsZF9pZCkgewogCQl1OCBidWlsZF9pZFtCVUlMRF9JRF9TSVpFXTsKIAogCQlpZiAoZWxmX3JlYWRfYnVpbGRfaWQoZWxmLCBidWlsZF9pZCwKIAkJCQkgICAgICBCVUlMRF9JRF9TSVpFKSAhPSBCVUlMRF9JRF9TSVpFKQogCQkJZ290byBvdXRfZWxmX2VuZDsKIAotCQlpZiAoIWRzb19fYnVpbGRfaWRfZXF1YWwoc2VsZiwgYnVpbGRfaWQpKQorCQlpZiAoIWRzb19fYnVpbGRfaWRfZXF1YWwoZHNvLCBidWlsZF9pZCkpCiAJCQlnb3RvIG91dF9lbGZfZW5kOwogCX0KIApAQCAtMTExMiwxMyArMTExNiwxNCBAQAogCW5yX3N5bXMgPSBzaGRyLnNoX3NpemUgLyBzaGRyLnNoX2VudHNpemU7CiAKIAltZW1zZXQoJnN5bSwgMCwgc2l6ZW9mKHN5bSkpOwotCWlmIChzZWxmLT5rZXJuZWwgPT0gRFNPX1RZUEVfVVNFUikgewotCQlzZWxmLT5hZGp1c3Rfc3ltYm9scyA9IChlaGRyLmVfdHlwZSA9PSBFVF9FWEVDIHx8CisJaWYgKGRzby0+a2VybmVsID09IERTT19UWVBFX1VTRVIpIHsKKwkJZHNvLT5hZGp1c3Rfc3ltYm9scyA9IChlaGRyLmVfdHlwZSA9PSBFVF9FWEVDIHx8CiAJCQkJZWxmX3NlY3Rpb25fYnlfbmFtZShlbGYsICZlaGRyLCAmc2hkciwKIAkJCQkJCSAgICAgIi5nbnUucHJlbGlua191bmRvIiwKIAkJCQkJCSAgICAgTlVMTCkgIT0gTlVMTCk7Ci0JfSBlbHNlIHNlbGYtPmFkanVzdF9zeW1ib2xzID0gMDsKLQorCX0gZWxzZSB7CisJCWRzby0+YWRqdXN0X3N5bWJvbHMgPSAwOworCX0KIAllbGZfc3ltdGFiX19mb3JfZWFjaF9zeW1ib2woc3ltcywgbnJfc3ltcywgaWR4LCBzeW0pIHsKIAkJc3RydWN0IHN5bWJvbCAqZjsKIAkJY29uc3QgY2hhciAqZWxmX25hbWUgPSBlbGZfc3ltX19uYW1lKCZzeW0sIHN5bXN0cnMpOwpAQCAtMTE2OCwyMiArMTE3MywyMiBAQAogCQkgICAgKHN5bS5zdF92YWx1ZSAmIDEpKQogCQkJLS1zeW0uc3RfdmFsdWU7CiAKLQkJaWYgKHNlbGYtPmtlcm5lbCAhPSBEU09fVFlQRV9VU0VSIHx8IGttb2R1bGUpIHsKKwkJaWYgKGRzby0+a2VybmVsICE9IERTT19UWVBFX1VTRVIgfHwga21vZHVsZSkgewogCQkJY2hhciBkc29fbmFtZVtQQVRIX01BWF07CiAKIAkJCWlmIChzdHJjbXAoc2VjdGlvbl9uYW1lLAogCQkJCSAgIChjdXJyX2Rzby0+c2hvcnRfbmFtZSArCi0JCQkJICAgIHNlbGYtPnNob3J0X25hbWVfbGVuKSkgPT0gMCkKKwkJCQkgICAgZHNvLT5zaG9ydF9uYW1lX2xlbikpID09IDApCiAJCQkJZ290byBuZXdfc3ltYm9sOwogCiAJCQlpZiAoc3RyY21wKHNlY3Rpb25fbmFtZSwgIi50ZXh0IikgPT0gMCkgewogCQkJCWN1cnJfbWFwID0gbWFwOwotCQkJCWN1cnJfZHNvID0gc2VsZjsKKwkJCQljdXJyX2RzbyA9IGRzbzsKIAkJCQlnb3RvIG5ld19zeW1ib2w7CiAJCQl9CiAKIAkJCXNucHJpbnRmKGRzb19uYW1lLCBzaXplb2YoZHNvX25hbWUpLAotCQkJCSAiJXMlcyIsIHNlbGYtPnNob3J0X25hbWUsIHNlY3Rpb25fbmFtZSk7CisJCQkJICIlcyVzIiwgZHNvLT5zaG9ydF9uYW1lLCBzZWN0aW9uX25hbWUpOwogCiAJCQljdXJyX21hcCA9IG1hcF9ncm91cHNfX2ZpbmRfYnlfbmFtZShrbWFwLT5rbWFwcywgbWFwLT50eXBlLCBkc29fbmFtZSk7CiAJCQlpZiAoY3Vycl9tYXAgPT0gTlVMTCkgewpAQCAtMTE5NSw5ICsxMjAwLDkgQEAKIAkJCQljdXJyX2RzbyA9IGRzb19fbmV3KGRzb19uYW1lKTsKIAkJCQlpZiAoY3Vycl9kc28gPT0gTlVMTCkKIAkJCQkJZ290byBvdXRfZWxmX2VuZDsKLQkJCQljdXJyX2Rzby0+a2VybmVsID0gc2VsZi0+a2VybmVsOwotCQkJCWN1cnJfZHNvLT5sb25nX25hbWUgPSBzZWxmLT5sb25nX25hbWU7Ci0JCQkJY3Vycl9kc28tPmxvbmdfbmFtZV9sZW4gPSBzZWxmLT5sb25nX25hbWVfbGVuOworCQkJCWN1cnJfZHNvLT5rZXJuZWwgPSBkc28tPmtlcm5lbDsKKwkJCQljdXJyX2Rzby0+bG9uZ19uYW1lID0gZHNvLT5sb25nX25hbWU7CisJCQkJY3Vycl9kc28tPmxvbmdfbmFtZV9sZW4gPSBkc28tPmxvbmdfbmFtZV9sZW47CiAJCQkJY3Vycl9tYXAgPSBtYXBfX25ldzIoc3RhcnQsIGN1cnJfZHNvLAogCQkJCQkJICAgICBtYXAtPnR5cGUpOwogCQkJCWlmIChjdXJyX21hcCA9PSBOVUxMKSB7CkBAIC0xMjA2LDkgKzEyMTEsOSBAQAogCQkJCX0KIAkJCQljdXJyX21hcC0+bWFwX2lwID0gaWRlbnRpdHlfX21hcF9pcDsKIAkJCQljdXJyX21hcC0+dW5tYXBfaXAgPSBpZGVudGl0eV9fbWFwX2lwOwotCQkJCWN1cnJfZHNvLT5zeW10YWJfdHlwZSA9IHNlbGYtPnN5bXRhYl90eXBlOworCQkJCWN1cnJfZHNvLT5zeW10YWJfdHlwZSA9IGRzby0+c3ltdGFiX3R5cGU7CiAJCQkJbWFwX2dyb3Vwc19faW5zZXJ0KGttYXAtPmttYXBzLCBjdXJyX21hcCk7Ci0JCQkJZHNvc19fYWRkKCZzZWxmLT5ub2RlLCBjdXJyX2Rzbyk7CisJCQkJZHNvc19fYWRkKCZkc28tPm5vZGUsIGN1cnJfZHNvKTsKIAkJCQlkc29fX3NldF9sb2FkZWQoY3Vycl9kc28sIG1hcC0+dHlwZSk7CiAJCQl9IGVsc2UKIAkJCQljdXJyX2RzbyA9IGN1cnJfbWFwLT5kc287CkBAIC0xMjUwLDcgKzEyNTUsNyBAQAogCSAqIEZvciBtaXNhbm5vdGF0ZWQsIHplcm9lZCwgQVNNIGZ1bmN0aW9uIHNpemVzLgogCSAqLwogCWlmIChuciA+IDApIHsKLQkJc3ltYm9sc19fZml4dXBfZW5kKCZzZWxmLT5zeW1ib2xzW21hcC0+dHlwZV0pOworCQlzeW1ib2xzX19maXh1cF9lbmQoJmRzby0+c3ltYm9sc1ttYXAtPnR5cGVdKTsKIAkJaWYgKGttYXApIHsKIAkJCS8qCiAJCQkgKiBXZSBuZWVkIHRvIGZpeHVwIHRoaXMgaGVyZSB0b28gYmVjYXVzZSB3ZSBjcmVhdGUgbmV3CkBAIC0xMjY2LDkgKzEyNzEsOSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBib29sIGRzb19fYnVpbGRfaWRfZXF1YWwoY29uc3Qgc3RydWN0IGRzbyAqc2VsZiwgdTggKmJ1aWxkX2lkKQorc3RhdGljIGJvb2wgZHNvX19idWlsZF9pZF9lcXVhbChjb25zdCBzdHJ1Y3QgZHNvICpkc28sIHU4ICpidWlsZF9pZCkKIHsKLQlyZXR1cm4gbWVtY21wKHNlbGYtPmJ1aWxkX2lkLCBidWlsZF9pZCwgc2l6ZW9mKHNlbGYtPmJ1aWxkX2lkKSkgPT0gMDsKKwlyZXR1cm4gbWVtY21wKGRzby0+YnVpbGRfaWQsIGJ1aWxkX2lkLCBzaXplb2YoZHNvLT5idWlsZF9pZCkpID09IDA7CiB9CiAKIGJvb2wgX19kc29zX19yZWFkX2J1aWxkX2lkcyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBib29sIHdpdGhfaGl0cykKQEAgLTE0MjksNyArMTQzNCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotY2hhciBkc29fX3N5bXRhYl9vcmlnaW4oY29uc3Qgc3RydWN0IGRzbyAqc2VsZikKK2NoYXIgZHNvX19zeW10YWJfb3JpZ2luKGNvbnN0IHN0cnVjdCBkc28gKmRzbykKIHsKIAlzdGF0aWMgY29uc3QgY2hhciBvcmlnaW5bXSA9IHsKIAkJW1NZTVRBQl9fS0FMTFNZTVNdCSAgICAgID0gJ2snLApAQCAtMTQ0NCwxMiArMTQ0OSwxMiBAQAogCQlbU1lNVEFCX19HVUVTVF9LTU9EVUxFXQkgICAgICA9ICAnRycsCiAJfTsKIAotCWlmIChzZWxmID09IE5VTEwgfHwgc2VsZi0+c3ltdGFiX3R5cGUgPT0gU1lNVEFCX19OT1RfRk9VTkQpCisJaWYgKGRzbyA9PSBOVUxMIHx8IGRzby0+c3ltdGFiX3R5cGUgPT0gU1lNVEFCX19OT1RfRk9VTkQpCiAJCXJldHVybiAnISc7Ci0JcmV0dXJuIG9yaWdpbltzZWxmLT5zeW10YWJfdHlwZV07CisJcmV0dXJuIG9yaWdpbltkc28tPnN5bXRhYl90eXBlXTsKIH0KIAotaW50IGRzb19fbG9hZChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCitpbnQgZHNvX19sb2FkKHN0cnVjdCBkc28gKmRzbywgc3RydWN0IG1hcCAqbWFwLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewogCWludCBzaXplID0gUEFUSF9NQVg7CiAJY2hhciAqbmFtZTsKQEAgLTE0NTksMTIgKzE0NjQsMTIgQEAKIAljb25zdCBjaGFyICpyb290X2RpcjsKIAlpbnQgd2FudF9zeW10YWI7CiAKLQlkc29fX3NldF9sb2FkZWQoc2VsZiwgbWFwLT50eXBlKTsKKwlkc29fX3NldF9sb2FkZWQoZHNvLCBtYXAtPnR5cGUpOwogCi0JaWYgKHNlbGYtPmtlcm5lbCA9PSBEU09fVFlQRV9LRVJORUwpCi0JCXJldHVybiBkc29fX2xvYWRfa2VybmVsX3N5bShzZWxmLCBtYXAsIGZpbHRlcik7Ci0JZWxzZSBpZiAoc2VsZi0+a2VybmVsID09IERTT19UWVBFX0dVRVNUX0tFUk5FTCkKLQkJcmV0dXJuIGRzb19fbG9hZF9ndWVzdF9rZXJuZWxfc3ltKHNlbGYsIG1hcCwgZmlsdGVyKTsKKwlpZiAoZHNvLT5rZXJuZWwgPT0gRFNPX1RZUEVfS0VSTkVMKQorCQlyZXR1cm4gZHNvX19sb2FkX2tlcm5lbF9zeW0oZHNvLCBtYXAsIGZpbHRlcik7CisJZWxzZSBpZiAoZHNvLT5rZXJuZWwgPT0gRFNPX1RZUEVfR1VFU1RfS0VSTkVMKQorCQlyZXR1cm4gZHNvX19sb2FkX2d1ZXN0X2tlcm5lbF9zeW0oZHNvLCBtYXAsIGZpbHRlcik7CiAKIAlpZiAobWFwLT5ncm91cHMgJiYgbWFwLT5ncm91cHMtPm1hY2hpbmUpCiAJCW1hY2hpbmUgPSBtYXAtPmdyb3Vwcy0+bWFjaGluZTsKQEAgLTE0NzUsMTEgKzE0ODAsMTEgQEAKIAlpZiAoIW5hbWUpCiAJCXJldHVybiAtMTsKIAotCXNlbGYtPmFkanVzdF9zeW1ib2xzID0gMDsKKwlkc28tPmFkanVzdF9zeW1ib2xzID0gMDsKIAotCWlmIChzdHJuY21wKHNlbGYtPm5hbWUsICIvdG1wL3BlcmYtIiwgMTApID09IDApIHsKLQkJcmV0ID0gZHNvX19sb2FkX3BlcmZfbWFwKHNlbGYsIG1hcCwgZmlsdGVyKTsKLQkJc2VsZi0+c3ltdGFiX3R5cGUgPSByZXQgPiAwID8gU1lNVEFCX19KQVZBX0pJVCA6CisJaWYgKHN0cm5jbXAoZHNvLT5uYW1lLCAiL3RtcC9wZXJmLSIsIDEwKSA9PSAwKSB7CisJCXJldCA9IGRzb19fbG9hZF9wZXJmX21hcChkc28sIG1hcCwgZmlsdGVyKTsKKwkJZHNvLT5zeW10YWJfdHlwZSA9IHJldCA+IDAgPyBTWU1UQUJfX0pBVkFfSklUIDoKIAkJCQkJICAgICAgU1lNVEFCX19OT1RfRk9VTkQ7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtMTQ5MCwzMyArMTQ5NSwzMyBAQAogCSAqLwogCXdhbnRfc3ltdGFiID0gMTsKIHJlc3RhcnQ6Ci0JZm9yIChzZWxmLT5zeW10YWJfdHlwZSA9IFNZTVRBQl9fQlVJTERfSURfQ0FDSEU7Ci0JICAgICBzZWxmLT5zeW10YWJfdHlwZSAhPSBTWU1UQUJfX05PVF9GT1VORDsKLQkgICAgIHNlbGYtPnN5bXRhYl90eXBlKyspIHsKLQkJc3dpdGNoIChzZWxmLT5zeW10YWJfdHlwZSkgeworCWZvciAoZHNvLT5zeW10YWJfdHlwZSA9IFNZTVRBQl9fQlVJTERfSURfQ0FDSEU7CisJICAgICBkc28tPnN5bXRhYl90eXBlICE9IFNZTVRBQl9fTk9UX0ZPVU5EOworCSAgICAgZHNvLT5zeW10YWJfdHlwZSsrKSB7CisJCXN3aXRjaCAoZHNvLT5zeW10YWJfdHlwZSkgewogCQljYXNlIFNZTVRBQl9fQlVJTERfSURfQ0FDSEU6CiAJCQkvKiBza2lwIHRoZSBsb2NhbGx5IGNvbmZpZ3VyZWQgY2FjaGUgaWYgYSBzeW1mcyBpcyBnaXZlbiAqLwogCQkJaWYgKHN5bWJvbF9jb25mLnN5bWZzWzBdIHx8Ci0JCQkgICAgKGRzb19fYnVpbGRfaWRfZmlsZW5hbWUoc2VsZiwgbmFtZSwgc2l6ZSkgPT0gTlVMTCkpIHsKKwkJCSAgICAoZHNvX19idWlsZF9pZF9maWxlbmFtZShkc28sIG5hbWUsIHNpemUpID09IE5VTEwpKSB7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBTWU1UQUJfX0ZFRE9SQV9ERUJVR0lORk86CiAJCQlzbnByaW50ZihuYW1lLCBzaXplLCAiJXMvdXNyL2xpYi9kZWJ1ZyVzLmRlYnVnIiwKLQkJCQkgc3ltYm9sX2NvbmYuc3ltZnMsIHNlbGYtPmxvbmdfbmFtZSk7CisJCQkJIHN5bWJvbF9jb25mLnN5bWZzLCBkc28tPmxvbmdfbmFtZSk7CiAJCQlicmVhazsKIAkJY2FzZSBTWU1UQUJfX1VCVU5UVV9ERUJVR0lORk86CiAJCQlzbnByaW50ZihuYW1lLCBzaXplLCAiJXMvdXNyL2xpYi9kZWJ1ZyVzIiwKLQkJCQkgc3ltYm9sX2NvbmYuc3ltZnMsIHNlbGYtPmxvbmdfbmFtZSk7CisJCQkJIHN5bWJvbF9jb25mLnN5bWZzLCBkc28tPmxvbmdfbmFtZSk7CiAJCQlicmVhazsKIAkJY2FzZSBTWU1UQUJfX0JVSUxESURfREVCVUdJTkZPOiB7CiAJCQljaGFyIGJ1aWxkX2lkX2hleFtCVUlMRF9JRF9TSVpFICogMiArIDFdOwogCi0JCQlpZiAoIXNlbGYtPmhhc19idWlsZF9pZCkKKwkJCWlmICghZHNvLT5oYXNfYnVpbGRfaWQpCiAJCQkJY29udGludWU7CiAKLQkJCWJ1aWxkX2lkX19zcHJpbnRmKHNlbGYtPmJ1aWxkX2lkLAotCQkJCQkgIHNpemVvZihzZWxmLT5idWlsZF9pZCksCisJCQlidWlsZF9pZF9fc3ByaW50Zihkc28tPmJ1aWxkX2lkLAorCQkJCQkgIHNpemVvZihkc28tPmJ1aWxkX2lkKSwKIAkJCQkJICBidWlsZF9pZF9oZXgpOwogCQkJc25wcmludGYobmFtZSwgc2l6ZSwKIAkJCQkgIiVzL3Vzci9saWIvZGVidWcvLmJ1aWxkLWlkLyUuMnMvJXMuZGVidWciLApAQCAtMTUyNSw3ICsxNTMwLDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIFNZTVRBQl9fU1lTVEVNX1BBVEhfRFNPOgogCQkJc25wcmludGYobmFtZSwgc2l6ZSwgIiVzJXMiLAotCQkJICAgICBzeW1ib2xfY29uZi5zeW1mcywgc2VsZi0+bG9uZ19uYW1lKTsKKwkJCSAgICAgc3ltYm9sX2NvbmYuc3ltZnMsIGRzby0+bG9uZ19uYW1lKTsKIAkJCWJyZWFrOwogCQljYXNlIFNZTVRBQl9fR1VFU1RfS01PRFVMRToKIAkJCWlmIChtYXAtPmdyb3VwcyAmJiBtYWNoaW5lKQpAQCAtMTUzMywxMiArMTUzOCwxMiBAQAogCQkJZWxzZQogCQkJCXJvb3RfZGlyID0gIiI7CiAJCQlzbnByaW50ZihuYW1lLCBzaXplLCAiJXMlcyVzIiwgc3ltYm9sX2NvbmYuc3ltZnMsCi0JCQkJIHJvb3RfZGlyLCBzZWxmLT5sb25nX25hbWUpOworCQkJCSByb290X2RpciwgZHNvLT5sb25nX25hbWUpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBTWU1UQUJfX1NZU1RFTV9QQVRIX0tNT0RVTEU6CiAJCQlzbnByaW50ZihuYW1lLCBzaXplLCAiJXMlcyIsIHN5bWJvbF9jb25mLnN5bWZzLAotCQkJCSBzZWxmLT5sb25nX25hbWUpOworCQkJCSBkc28tPmxvbmdfbmFtZSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDo7CiAJCX0KQEAgLTE1NDgsNyArMTU1Myw3IEBACiAJCWlmIChmZCA8IDApCiAJCQljb250aW51ZTsKIAotCQlyZXQgPSBkc29fX2xvYWRfc3ltKHNlbGYsIG1hcCwgbmFtZSwgZmQsIGZpbHRlciwgMCwKKwkJcmV0ID0gZHNvX19sb2FkX3N5bShkc28sIG1hcCwgbmFtZSwgZmQsIGZpbHRlciwgMCwKIAkJCQkgICAgd2FudF9zeW10YWIpOwogCQljbG9zZShmZCk7CiAKQEAgLTE1NjAsNyArMTU2NSw4IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAocmV0ID4gMCkgewotCQkJaW50IG5yX3BsdCA9IGRzb19fc3ludGhlc2l6ZV9wbHRfc3ltYm9scyhzZWxmLCBtYXAsIGZpbHRlcik7CisJCQlpbnQgbnJfcGx0ID0gZHNvX19zeW50aGVzaXplX3BsdF9zeW1ib2xzKGRzbywgbWFwLAorCQkJCQkJCQkgZmlsdGVyKTsKIAkJCWlmIChucl9wbHQgPiAwKQogCQkJCXJldCArPSBucl9wbHQ7CiAJCQlicmVhazsKQEAgLTE1NzcsMTcgKzE1ODMsMTcgQEAKIAl9CiAKIAlmcmVlKG5hbWUpOwotCWlmIChyZXQgPCAwICYmIHN0cnN0cihzZWxmLT5uYW1lLCAiIChkZWxldGVkKSIpICE9IE5VTEwpCisJaWYgKHJldCA8IDAgJiYgc3Ryc3RyKGRzby0+bmFtZSwgIiAoZGVsZXRlZCkiKSAhPSBOVUxMKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gcmV0OwogfQogCi1zdHJ1Y3QgbWFwICptYXBfZ3JvdXBzX19maW5kX2J5X25hbWUoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsCitzdHJ1Y3QgbWFwICptYXBfZ3JvdXBzX19maW5kX2J5X25hbWUoc3RydWN0IG1hcF9ncm91cHMgKm1nLAogCQkJCSAgICAgZW51bSBtYXBfdHlwZSB0eXBlLCBjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCByYl9ub2RlICpuZDsKIAotCWZvciAobmQgPSByYl9maXJzdCgmc2VsZi0+bWFwc1t0eXBlXSk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7CisJZm9yIChuZCA9IHJiX2ZpcnN0KCZtZy0+bWFwc1t0eXBlXSk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7CiAJCXN0cnVjdCBtYXAgKm1hcCA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgbWFwLCByYl9ub2RlKTsKIAogCQlpZiAobWFwLT5kc28gJiYgc3RyY21wKG1hcC0+ZHNvLT5zaG9ydF9uYW1lLCBuYW1lKSA9PSAwKQpAQCAtMTU5NywyOCArMTYwMywyOCBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW50IGRzb19fa2VybmVsX21vZHVsZV9nZXRfYnVpbGRfaWQoc3RydWN0IGRzbyAqc2VsZiwKLQkJCQljb25zdCBjaGFyICpyb290X2RpcikKK3N0YXRpYyBpbnQgZHNvX19rZXJuZWxfbW9kdWxlX2dldF9idWlsZF9pZChzdHJ1Y3QgZHNvICpkc28sCisJCQkJCSAgIGNvbnN0IGNoYXIgKnJvb3RfZGlyKQogewogCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOwogCS8qCiAJICoga2VybmVsIG1vZHVsZSBzaG9ydCBuYW1lcyBhcmUgb2YgdGhlIGZvcm0gIlttb2R1bGVdIiBhbmQKIAkgKiB3ZSBuZWVkIGp1c3QgIm1vZHVsZSIgaGVyZS4KIAkgKi8KLQljb25zdCBjaGFyICpuYW1lID0gc2VsZi0+c2hvcnRfbmFtZSArIDE7CisJY29uc3QgY2hhciAqbmFtZSA9IGRzby0+c2hvcnRfbmFtZSArIDE7CiAKIAlzbnByaW50ZihmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwKIAkJICIlcy9zeXMvbW9kdWxlLyUuKnMvbm90ZXMvLm5vdGUuZ251LmJ1aWxkLWlkIiwKIAkJIHJvb3RfZGlyLCAoaW50KXN0cmxlbihuYW1lKSAtIDEsIG5hbWUpOwogCi0JaWYgKHN5c2ZzX19yZWFkX2J1aWxkX2lkKGZpbGVuYW1lLCBzZWxmLT5idWlsZF9pZCwKLQkJCQkgc2l6ZW9mKHNlbGYtPmJ1aWxkX2lkKSkgPT0gMCkKLQkJc2VsZi0+aGFzX2J1aWxkX2lkID0gdHJ1ZTsKKwlpZiAoc3lzZnNfX3JlYWRfYnVpbGRfaWQoZmlsZW5hbWUsIGRzby0+YnVpbGRfaWQsCisJCQkJIHNpemVvZihkc28tPmJ1aWxkX2lkKSkgPT0gMCkKKwkJZHNvLT5oYXNfYnVpbGRfaWQgPSB0cnVlOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWFwX2dyb3Vwc19fc2V0X21vZHVsZXNfcGF0aF9kaXIoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsCitzdGF0aWMgaW50IG1hcF9ncm91cHNfX3NldF9tb2R1bGVzX3BhdGhfZGlyKHN0cnVjdCBtYXBfZ3JvdXBzICptZywKIAkJCQljb25zdCBjaGFyICpkaXJfbmFtZSkKIHsKIAlzdHJ1Y3QgZGlyZW50ICpkZW50OwpAQCAtMTY0Niw3ICsxNjUyLDcgQEAKIAogCQkJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiJXMvJXMiLAogCQkJCSBkaXJfbmFtZSwgZGVudC0+ZF9uYW1lKTsKLQkJCXJldCA9IG1hcF9ncm91cHNfX3NldF9tb2R1bGVzX3BhdGhfZGlyKHNlbGYsIHBhdGgpOworCQkJcmV0ID0gbWFwX2dyb3Vwc19fc2V0X21vZHVsZXNfcGF0aF9kaXIobWcsIHBhdGgpOwogCQkJaWYgKHJldCA8IDApCiAJCQkJZ290byBvdXQ7CiAJCX0gZWxzZSB7CkBAIC0xNjYxLDcgKzE2NjcsOCBAQAogCQkJCSAoaW50KShkb3QgLSBkZW50LT5kX25hbWUpLCBkZW50LT5kX25hbWUpOwogCiAJCQlzdHJ4ZnJjaGFyKGRzb19uYW1lLCAnLScsICdfJyk7Ci0JCQltYXAgPSBtYXBfZ3JvdXBzX19maW5kX2J5X25hbWUoc2VsZiwgTUFQX19GVU5DVElPTiwgZHNvX25hbWUpOworCQkJbWFwID0gbWFwX2dyb3Vwc19fZmluZF9ieV9uYW1lKG1nLCBNQVBfX0ZVTkNUSU9OLAorCQkJCQkJICAgICAgIGRzb19uYW1lKTsKIAkJCWlmIChtYXAgPT0gTlVMTCkKIAkJCQljb250aW51ZTsKIApAQCAtMTcxMSwyMCArMTcxOCwyMCBAQAogCXJldHVybiBzdHJkdXAobmFtZSk7CiB9CiAKLXN0YXRpYyBpbnQgbWFjaGluZV9fc2V0X21vZHVsZXNfcGF0aChzdHJ1Y3QgbWFjaGluZSAqc2VsZikKK3N0YXRpYyBpbnQgbWFjaGluZV9fc2V0X21vZHVsZXNfcGF0aChzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKIHsKIAljaGFyICp2ZXJzaW9uOwogCWNoYXIgbW9kdWxlc19wYXRoW1BBVEhfTUFYXTsKIAotCXZlcnNpb24gPSBnZXRfa2VybmVsX3ZlcnNpb24oc2VsZi0+cm9vdF9kaXIpOworCXZlcnNpb24gPSBnZXRfa2VybmVsX3ZlcnNpb24obWFjaGluZS0+cm9vdF9kaXIpOwogCWlmICghdmVyc2lvbikKIAkJcmV0dXJuIC0xOwogCiAJc25wcmludGYobW9kdWxlc19wYXRoLCBzaXplb2YobW9kdWxlc19wYXRoKSwgIiVzL2xpYi9tb2R1bGVzLyVzL2tlcm5lbCIsCi0JCSBzZWxmLT5yb290X2RpciwgdmVyc2lvbik7CisJCSBtYWNoaW5lLT5yb290X2RpciwgdmVyc2lvbik7CiAJZnJlZSh2ZXJzaW9uKTsKIAotCXJldHVybiBtYXBfZ3JvdXBzX19zZXRfbW9kdWxlc19wYXRoX2Rpcigmc2VsZi0+a21hcHMsIG1vZHVsZXNfcGF0aCk7CisJcmV0dXJuIG1hcF9ncm91cHNfX3NldF9tb2R1bGVzX3BhdGhfZGlyKCZtYWNoaW5lLT5rbWFwcywgbW9kdWxlc19wYXRoKTsKIH0KIAogLyoKQEAgLTE3MzQsMjMgKzE3NDEsMjMgQEAKICAqLwogc3RhdGljIHN0cnVjdCBtYXAgKm1hcF9fbmV3Mih1NjQgc3RhcnQsIHN0cnVjdCBkc28gKmRzbywgZW51bSBtYXBfdHlwZSB0eXBlKQogewotCXN0cnVjdCBtYXAgKnNlbGYgPSBjYWxsb2MoMSwgKHNpemVvZigqc2VsZikgKwotCQkJCSAgICAgIChkc28tPmtlcm5lbCA/IHNpemVvZihzdHJ1Y3Qga21hcCkgOiAwKSkpOwotCWlmIChzZWxmICE9IE5VTEwpIHsKKwlzdHJ1Y3QgbWFwICptYXAgPSBjYWxsb2MoMSwgKHNpemVvZigqbWFwKSArCisJCQkJICAgICAoZHNvLT5rZXJuZWwgPyBzaXplb2Yoc3RydWN0IGttYXApIDogMCkpKTsKKwlpZiAobWFwICE9IE5VTEwpIHsKIAkJLyoKIAkJICogLT5lbmQgd2lsbCBiZSBmaWxsZWQgYWZ0ZXIgd2UgbG9hZCBhbGwgdGhlIHN5bWJvbHMKIAkJICovCi0JCW1hcF9faW5pdChzZWxmLCB0eXBlLCBzdGFydCwgMCwgMCwgZHNvKTsKKwkJbWFwX19pbml0KG1hcCwgdHlwZSwgc3RhcnQsIDAsIDAsIGRzbyk7CiAJfQogCi0JcmV0dXJuIHNlbGY7CisJcmV0dXJuIG1hcDsKIH0KIAotc3RydWN0IG1hcCAqbWFjaGluZV9fbmV3X21vZHVsZShzdHJ1Y3QgbWFjaGluZSAqc2VsZiwgdTY0IHN0YXJ0LAorc3RydWN0IG1hcCAqbWFjaGluZV9fbmV3X21vZHVsZShzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgdTY0IHN0YXJ0LAogCQkJCWNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewogCXN0cnVjdCBtYXAgKm1hcDsKLQlzdHJ1Y3QgZHNvICpkc28gPSBfX2Rzb3NfX2ZpbmRuZXcoJnNlbGYtPmtlcm5lbF9kc29zLCBmaWxlbmFtZSk7CisJc3RydWN0IGRzbyAqZHNvID0gX19kc29zX19maW5kbmV3KCZtYWNoaW5lLT5rZXJuZWxfZHNvcywgZmlsZW5hbWUpOwogCiAJaWYgKGRzbyA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKQEAgLTE3NTksMTUgKzE3NjYsMTUgQEAKIAlpZiAobWFwID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCi0JaWYgKG1hY2hpbmVfX2lzX2hvc3Qoc2VsZikpCisJaWYgKG1hY2hpbmVfX2lzX2hvc3QobWFjaGluZSkpCiAJCWRzby0+c3ltdGFiX3R5cGUgPSBTWU1UQUJfX1NZU1RFTV9QQVRIX0tNT0RVTEU7CiAJZWxzZQogCQlkc28tPnN5bXRhYl90eXBlID0gU1lNVEFCX19HVUVTVF9LTU9EVUxFOwotCW1hcF9ncm91cHNfX2luc2VydCgmc2VsZi0+a21hcHMsIG1hcCk7CisJbWFwX2dyb3Vwc19faW5zZXJ0KCZtYWNoaW5lLT5rbWFwcywgbWFwKTsKIAlyZXR1cm4gbWFwOwogfQogCi1zdGF0aWMgaW50IG1hY2hpbmVfX2NyZWF0ZV9tb2R1bGVzKHN0cnVjdCBtYWNoaW5lICpzZWxmKQorc3RhdGljIGludCBtYWNoaW5lX19jcmVhdGVfbW9kdWxlcyhzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKIHsKIAljaGFyICpsaW5lID0gTlVMTDsKIAlzaXplX3QgbjsKQEAgLTE3NzYsMTAgKzE3ODMsMTAgQEAKIAljb25zdCBjaGFyICptb2R1bGVzOwogCWNoYXIgcGF0aFtQQVRIX01BWF07CiAKLQlpZiAobWFjaGluZV9faXNfZGVmYXVsdF9ndWVzdChzZWxmKSkKKwlpZiAobWFjaGluZV9faXNfZGVmYXVsdF9ndWVzdChtYWNoaW5lKSkKIAkJbW9kdWxlcyA9IHN5bWJvbF9jb25mLmRlZmF1bHRfZ3Vlc3RfbW9kdWxlczsKIAllbHNlIHsKLQkJc3ByaW50ZihwYXRoLCAiJXMvcHJvYy9tb2R1bGVzIiwgc2VsZi0+cm9vdF9kaXIpOworCQlzcHJpbnRmKHBhdGgsICIlcy9wcm9jL21vZHVsZXMiLCBtYWNoaW5lLT5yb290X2Rpcik7CiAJCW1vZHVsZXMgPSBwYXRoOwogCX0KIApAQCAtMTgxNSwxNiArMTgyMiwxNiBAQAogCQkqc2VwID0gJ1wwJzsKIAogCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJbJXNdIiwgbGluZSk7Ci0JCW1hcCA9IG1hY2hpbmVfX25ld19tb2R1bGUoc2VsZiwgc3RhcnQsIG5hbWUpOworCQltYXAgPSBtYWNoaW5lX19uZXdfbW9kdWxlKG1hY2hpbmUsIHN0YXJ0LCBuYW1lKTsKIAkJaWYgKG1hcCA9PSBOVUxMKQogCQkJZ290byBvdXRfZGVsZXRlX2xpbmU7Ci0JCWRzb19fa2VybmVsX21vZHVsZV9nZXRfYnVpbGRfaWQobWFwLT5kc28sIHNlbGYtPnJvb3RfZGlyKTsKKwkJZHNvX19rZXJuZWxfbW9kdWxlX2dldF9idWlsZF9pZChtYXAtPmRzbywgbWFjaGluZS0+cm9vdF9kaXIpOwogCX0KIAogCWZyZWUobGluZSk7CiAJZmNsb3NlKGZpbGUpOwogCi0JcmV0dXJuIG1hY2hpbmVfX3NldF9tb2R1bGVzX3BhdGgoc2VsZik7CisJcmV0dXJuIG1hY2hpbmVfX3NldF9tb2R1bGVzX3BhdGgobWFjaGluZSk7CiAKIG91dF9kZWxldGVfbGluZToKIAlmcmVlKGxpbmUpOwpAQCAtMTgzMiw3ICsxODM5LDcgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLWludCBkc29fX2xvYWRfdm1saW51eChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsCitpbnQgZHNvX19sb2FkX3ZtbGludXgoc3RydWN0IGRzbyAqZHNvLCBzdHJ1Y3QgbWFwICptYXAsCiAJCSAgICAgIGNvbnN0IGNoYXIgKnZtbGludXgsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCiB7CiAJaW50IGVyciA9IC0xLCBmZDsKQEAgLTE4NDQsOSArMTg1MSw5IEBACiAJaWYgKGZkIDwgMCkKIAkJcmV0dXJuIC0xOwogCi0JZHNvX19zZXRfbG9uZ19uYW1lKHNlbGYsIChjaGFyICopdm1saW51eCk7Ci0JZHNvX19zZXRfbG9hZGVkKHNlbGYsIG1hcC0+dHlwZSk7Ci0JZXJyID0gZHNvX19sb2FkX3N5bShzZWxmLCBtYXAsIHN5bWZzX3ZtbGludXgsIGZkLCBmaWx0ZXIsIDAsIDApOworCWRzb19fc2V0X2xvbmdfbmFtZShkc28sIChjaGFyICopdm1saW51eCk7CisJZHNvX19zZXRfbG9hZGVkKGRzbywgbWFwLT50eXBlKTsKKwllcnIgPSBkc29fX2xvYWRfc3ltKGRzbywgbWFwLCBzeW1mc192bWxpbnV4LCBmZCwgZmlsdGVyLCAwLCAwKTsKIAljbG9zZShmZCk7CiAKIAlpZiAoZXJyID4gMCkKQEAgLTE4NTUsNyArMTg2Miw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotaW50IGRzb19fbG9hZF92bWxpbnV4X3BhdGgoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAoraW50IGRzb19fbG9hZF92bWxpbnV4X3BhdGgoc3RydWN0IGRzbyAqZHNvLCBzdHJ1Y3QgbWFwICptYXAsCiAJCQkgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewogCWludCBpLCBlcnIgPSAwOwpAQCAtMTg2NCwyMCArMTg3MSwyMCBAQAogCXByX2RlYnVnKCJMb29raW5nIGF0IHRoZSB2bWxpbnV4X3BhdGggKCVkIGVudHJpZXMgbG9uZylcbiIsCiAJCSB2bWxpbnV4X3BhdGhfX25yX2VudHJpZXMgKyAxKTsKIAotCWZpbGVuYW1lID0gZHNvX19idWlsZF9pZF9maWxlbmFtZShzZWxmLCBOVUxMLCAwKTsKKwlmaWxlbmFtZSA9IGRzb19fYnVpbGRfaWRfZmlsZW5hbWUoZHNvLCBOVUxMLCAwKTsKIAlpZiAoZmlsZW5hbWUgIT0gTlVMTCkgewotCQllcnIgPSBkc29fX2xvYWRfdm1saW51eChzZWxmLCBtYXAsIGZpbGVuYW1lLCBmaWx0ZXIpOworCQllcnIgPSBkc29fX2xvYWRfdm1saW51eChkc28sIG1hcCwgZmlsZW5hbWUsIGZpbHRlcik7CiAJCWlmIChlcnIgPiAwKSB7Ci0JCQlkc29fX3NldF9sb25nX25hbWUoc2VsZiwgZmlsZW5hbWUpOworCQkJZHNvX19zZXRfbG9uZ19uYW1lKGRzbywgZmlsZW5hbWUpOwogCQkJZ290byBvdXQ7CiAJCX0KIAkJZnJlZShmaWxlbmFtZSk7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IHZtbGludXhfcGF0aF9fbnJfZW50cmllczsgKytpKSB7Ci0JCWVyciA9IGRzb19fbG9hZF92bWxpbnV4KHNlbGYsIG1hcCwgdm1saW51eF9wYXRoW2ldLCBmaWx0ZXIpOworCQllcnIgPSBkc29fX2xvYWRfdm1saW51eChkc28sIG1hcCwgdm1saW51eF9wYXRoW2ldLCBmaWx0ZXIpOwogCQlpZiAoZXJyID4gMCkgewotCQkJZHNvX19zZXRfbG9uZ19uYW1lKHNlbGYsIHN0cmR1cCh2bWxpbnV4X3BhdGhbaV0pKTsKKwkJCWRzb19fc2V0X2xvbmdfbmFtZShkc28sIHN0cmR1cCh2bWxpbnV4X3BhdGhbaV0pKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTg4NSw3ICsxODkyLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGRzb19fbG9hZF9rZXJuZWxfc3ltKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKK3N0YXRpYyBpbnQgZHNvX19sb2FkX2tlcm5lbF9zeW0oc3RydWN0IGRzbyAqZHNvLCBzdHJ1Y3QgbWFwICptYXAsCiAJCQkJc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKIAlpbnQgZXJyOwpAQCAtMTkxMiwxMCArMTkxOSwxMCBAQAogCX0KIAogCWlmIChzeW1ib2xfY29uZi52bWxpbnV4X25hbWUgIT0gTlVMTCkgewotCQllcnIgPSBkc29fX2xvYWRfdm1saW51eChzZWxmLCBtYXAsCisJCWVyciA9IGRzb19fbG9hZF92bWxpbnV4KGRzbywgbWFwLAogCQkJCQlzeW1ib2xfY29uZi52bWxpbnV4X25hbWUsIGZpbHRlcik7CiAJCWlmIChlcnIgPiAwKSB7Ci0JCQlkc29fX3NldF9sb25nX25hbWUoc2VsZiwKKwkJCWRzb19fc2V0X2xvbmdfbmFtZShkc28sCiAJCQkJCSAgIHN0cmR1cChzeW1ib2xfY29uZi52bWxpbnV4X25hbWUpKTsKIAkJCWdvdG8gb3V0X2ZpeHVwOwogCQl9CkBAIC0xOTIzLDcgKzE5MzAsNyBAQAogCX0KIAogCWlmICh2bWxpbnV4X3BhdGggIT0gTlVMTCkgewotCQllcnIgPSBkc29fX2xvYWRfdm1saW51eF9wYXRoKHNlbGYsIG1hcCwgZmlsdGVyKTsKKwkJZXJyID0gZHNvX19sb2FkX3ZtbGludXhfcGF0aChkc28sIG1hcCwgZmlsdGVyKTsKIAkJaWYgKGVyciA+IDApCiAJCQlnb3RvIG91dF9maXh1cDsKIAl9CkBAIC0xOTM3LDEzICsxOTQ0LDEzIEBACiAJICogd2UgaGF2ZSBhIGJ1aWxkLWlkLCBzbyBjaGVjayBpZiBpdCBpcyB0aGUgc2FtZSBhcyB0aGUgcnVubmluZyBrZXJuZWwsCiAJICogdXNpbmcgaXQgaWYgaXQgaXMuCiAJICovCi0JaWYgKHNlbGYtPmhhc19idWlsZF9pZCkgeworCWlmIChkc28tPmhhc19idWlsZF9pZCkgewogCQl1OCBrYWxsc3ltc19idWlsZF9pZFtCVUlMRF9JRF9TSVpFXTsKIAkJY2hhciBzYnVpbGRfaWRbQlVJTERfSURfU0laRSAqIDIgKyAxXTsKIAogCQlpZiAoc3lzZnNfX3JlYWRfYnVpbGRfaWQoIi9zeXMva2VybmVsL25vdGVzIiwga2FsbHN5bXNfYnVpbGRfaWQsCiAJCQkJCSBzaXplb2Yoa2FsbHN5bXNfYnVpbGRfaWQpKSA9PSAwKSB7Ci0JCQlpZiAoZHNvX19idWlsZF9pZF9lcXVhbChzZWxmLCBrYWxsc3ltc19idWlsZF9pZCkpIHsKKwkJCWlmIChkc29fX2J1aWxkX2lkX2VxdWFsKGRzbywga2FsbHN5bXNfYnVpbGRfaWQpKSB7CiAJCQkJa2FsbHN5bXNfZmlsZW5hbWUgPSAiL3Byb2Mva2FsbHN5bXMiOwogCQkJCWdvdG8gZG9fa2FsbHN5bXM7CiAJCQl9CkBAIC0xOTUyLDcgKzE5NTksNyBAQAogCQkgKiBOb3cgbG9vayBpZiB3ZSBoYXZlIGl0IG9uIHRoZSBidWlsZC1pZCBjYWNoZSBpbgogCQkgKiAkSE9NRS8uZGVidWcvW2tlcm5lbC5rYWxsc3ltc10uCiAJCSAqLwotCQlidWlsZF9pZF9fc3ByaW50ZihzZWxmLT5idWlsZF9pZCwgc2l6ZW9mKHNlbGYtPmJ1aWxkX2lkKSwKKwkJYnVpbGRfaWRfX3NwcmludGYoZHNvLT5idWlsZF9pZCwgc2l6ZW9mKGRzby0+YnVpbGRfaWQpLAogCQkJCSAgc2J1aWxkX2lkKTsKIAogCQlpZiAoYXNwcmludGYoJmthbGxzeW1zX2FsbG9jYXRlZF9maWxlbmFtZSwKQEAgLTE5NzksNyArMTk4Niw3IEBACiAJfQogCiBkb19rYWxsc3ltczoKLQllcnIgPSBkc29fX2xvYWRfa2FsbHN5bXMoc2VsZiwga2FsbHN5bXNfZmlsZW5hbWUsIG1hcCwgZmlsdGVyKTsKKwllcnIgPSBkc29fX2xvYWRfa2FsbHN5bXMoZHNvLCBrYWxsc3ltc19maWxlbmFtZSwgbWFwLCBmaWx0ZXIpOwogCWlmIChlcnIgPiAwKQogCQlwcl9kZWJ1ZygiVXNpbmcgJXMgZm9yIHN5bWJvbHNcbiIsIGthbGxzeW1zX2ZpbGVuYW1lKTsKIAlmcmVlKGthbGxzeW1zX2FsbG9jYXRlZF9maWxlbmFtZSk7CkBAIC0xOTg3LDcgKzE5OTQsNyBAQAogCWlmIChlcnIgPiAwKSB7CiBvdXRfZml4dXA6CiAJCWlmIChrYWxsc3ltc19maWxlbmFtZSAhPSBOVUxMKQotCQkJZHNvX19zZXRfbG9uZ19uYW1lKHNlbGYsIHN0cmR1cCgiW2tlcm5lbC5rYWxsc3ltc10iKSk7CisJCQlkc29fX3NldF9sb25nX25hbWUoZHNvLCBzdHJkdXAoIltrZXJuZWwua2FsbHN5bXNdIikpOwogCQltYXBfX2ZpeHVwX3N0YXJ0KG1hcCk7CiAJCW1hcF9fZml4dXBfZW5kKG1hcCk7CiAJfQpAQCAtMTk5NSw4ICsyMDAyLDggQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGRzb19fbG9hZF9ndWVzdF9rZXJuZWxfc3ltKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKLQkJCQlzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQorc3RhdGljIGludCBkc29fX2xvYWRfZ3Vlc3Rfa2VybmVsX3N5bShzdHJ1Y3QgZHNvICpkc28sIHN0cnVjdCBtYXAgKm1hcCwKKwkJCQkgICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewogCWludCBlcnI7CiAJY29uc3QgY2hhciAqa2FsbHN5bXNfZmlsZW5hbWUgPSBOVUxMOwpAQCAtMjAxNiw3ICsyMDIzLDcgQEAKIAkJICogT3IgdXNlIGZpbGUgZ3Vlc3Rfa2FsbHN5bXMgaW5wdXR0ZWQgYnkgdXNlciBvbiBjb21tYW5kbGluZQogCQkgKi8KIAkJaWYgKHN5bWJvbF9jb25mLmRlZmF1bHRfZ3Vlc3Rfdm1saW51eF9uYW1lICE9IE5VTEwpIHsKLQkJCWVyciA9IGRzb19fbG9hZF92bWxpbnV4KHNlbGYsIG1hcCwKKwkJCWVyciA9IGRzb19fbG9hZF92bWxpbnV4KGRzbywgbWFwLAogCQkJCXN5bWJvbF9jb25mLmRlZmF1bHRfZ3Vlc3Rfdm1saW51eF9uYW1lLCBmaWx0ZXIpOwogCQkJZ290byBvdXRfdHJ5X2ZpeHVwOwogCQl9CkBAIC0yMDI5LDcgKzIwMzYsNyBAQAogCQlrYWxsc3ltc19maWxlbmFtZSA9IHBhdGg7CiAJfQogCi0JZXJyID0gZHNvX19sb2FkX2thbGxzeW1zKHNlbGYsIGthbGxzeW1zX2ZpbGVuYW1lLCBtYXAsIGZpbHRlcik7CisJZXJyID0gZHNvX19sb2FkX2thbGxzeW1zKGRzbywga2FsbHN5bXNfZmlsZW5hbWUsIG1hcCwgZmlsdGVyKTsKIAlpZiAoZXJyID4gMCkKIAkJcHJfZGVidWcoIlVzaW5nICVzIGZvciBzeW1ib2xzXG4iLCBrYWxsc3ltc19maWxlbmFtZSk7CiAKQEAgLTIwMzcsNyArMjA0NCw3IEBACiAJaWYgKGVyciA+IDApIHsKIAkJaWYgKGthbGxzeW1zX2ZpbGVuYW1lICE9IE5VTEwpIHsKIAkJCW1hY2hpbmVfX21tYXBfbmFtZShtYWNoaW5lLCBwYXRoLCBzaXplb2YocGF0aCkpOwotCQkJZHNvX19zZXRfbG9uZ19uYW1lKHNlbGYsIHN0cmR1cChwYXRoKSk7CisJCQlkc29fX3NldF9sb25nX25hbWUoZHNvLCBzdHJkdXAocGF0aCkpOwogCQl9CiAJCW1hcF9fZml4dXBfc3RhcnQobWFwKTsKIAkJbWFwX19maXh1cF9lbmQobWFwKTsKQEAgLTIwOTAsMTIgKzIwOTcsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zaXplX3QgbWFjaGluZXNfX2ZwcmludGZfZHNvcyhzdHJ1Y3QgcmJfcm9vdCAqc2VsZiwgRklMRSAqZnApCitzaXplX3QgbWFjaGluZXNfX2ZwcmludGZfZHNvcyhzdHJ1Y3QgcmJfcm9vdCAqbWFjaGluZXMsIEZJTEUgKmZwKQogewogCXN0cnVjdCByYl9ub2RlICpuZDsKIAlzaXplX3QgcmV0ID0gMDsKIAotCWZvciAobmQgPSByYl9maXJzdChzZWxmKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKKwlmb3IgKG5kID0gcmJfZmlyc3QobWFjaGluZXMpOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgewogCQlzdHJ1Y3QgbWFjaGluZSAqcG9zID0gcmJfZW50cnkobmQsIHN0cnVjdCBtYWNoaW5lLCByYl9ub2RlKTsKIAkJcmV0ICs9IF9fZHNvc19fZnByaW50ZigmcG9zLT5rZXJuZWxfZHNvcywgZnApOwogCQlyZXQgKz0gX19kc29zX19mcHJpbnRmKCZwb3MtPnVzZXJfZHNvcywgZnApOwpAQCAtMjExOSwxOCArMjEyNiwyMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXNpemVfdCBtYWNoaW5lX19mcHJpbnRmX2Rzb3NfYnVpbGRpZChzdHJ1Y3QgbWFjaGluZSAqc2VsZiwgRklMRSAqZnAsIGJvb2wgd2l0aF9oaXRzKQorc2l6ZV90IG1hY2hpbmVfX2ZwcmludGZfZHNvc19idWlsZGlkKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLCBGSUxFICpmcCwKKwkJCQkgICAgIGJvb2wgd2l0aF9oaXRzKQogewotCXJldHVybiBfX2Rzb3NfX2ZwcmludGZfYnVpbGRpZCgmc2VsZi0+a2VybmVsX2Rzb3MsIGZwLCB3aXRoX2hpdHMpICsKLQkgICAgICAgX19kc29zX19mcHJpbnRmX2J1aWxkaWQoJnNlbGYtPnVzZXJfZHNvcywgZnAsIHdpdGhfaGl0cyk7CisJcmV0dXJuIF9fZHNvc19fZnByaW50Zl9idWlsZGlkKCZtYWNoaW5lLT5rZXJuZWxfZHNvcywgZnAsIHdpdGhfaGl0cykgKworCSAgICAgICBfX2Rzb3NfX2ZwcmludGZfYnVpbGRpZCgmbWFjaGluZS0+dXNlcl9kc29zLCBmcCwgd2l0aF9oaXRzKTsKIH0KIAotc2l6ZV90IG1hY2hpbmVzX19mcHJpbnRmX2Rzb3NfYnVpbGRpZChzdHJ1Y3QgcmJfcm9vdCAqc2VsZiwgRklMRSAqZnAsIGJvb2wgd2l0aF9oaXRzKQorc2l6ZV90IG1hY2hpbmVzX19mcHJpbnRmX2Rzb3NfYnVpbGRpZChzdHJ1Y3QgcmJfcm9vdCAqbWFjaGluZXMsCisJCQkJICAgICAgRklMRSAqZnAsIGJvb2wgd2l0aF9oaXRzKQogewogCXN0cnVjdCByYl9ub2RlICpuZDsKIAlzaXplX3QgcmV0ID0gMDsKIAotCWZvciAobmQgPSByYl9maXJzdChzZWxmKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKKwlmb3IgKG5kID0gcmJfZmlyc3QobWFjaGluZXMpOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgewogCQlzdHJ1Y3QgbWFjaGluZSAqcG9zID0gcmJfZW50cnkobmQsIHN0cnVjdCBtYWNoaW5lLCByYl9ub2RlKTsKIAkJcmV0ICs9IG1hY2hpbmVfX2ZwcmludGZfZHNvc19idWlsZGlkKHBvcywgZnAsIHdpdGhfaGl0cyk7CiAJfQpAQCAtMjEzOSw1OSArMjE0OCw1OSBAQAogCiBzdHJ1Y3QgZHNvICpkc29fX25ld19rZXJuZWwoY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgZHNvICpzZWxmID0gZHNvX19uZXcobmFtZSA/OiAiW2tlcm5lbC5rYWxsc3ltc10iKTsKKwlzdHJ1Y3QgZHNvICpkc28gPSBkc29fX25ldyhuYW1lID86ICJba2VybmVsLmthbGxzeW1zXSIpOwogCi0JaWYgKHNlbGYgIT0gTlVMTCkgewotCQlkc29fX3NldF9zaG9ydF9uYW1lKHNlbGYsICJba2VybmVsXSIpOwotCQlzZWxmLT5rZXJuZWwgPSBEU09fVFlQRV9LRVJORUw7CisJaWYgKGRzbyAhPSBOVUxMKSB7CisJCWRzb19fc2V0X3Nob3J0X25hbWUoZHNvLCAiW2tlcm5lbF0iKTsKKwkJZHNvLT5rZXJuZWwgPSBEU09fVFlQRV9LRVJORUw7CiAJfQogCi0JcmV0dXJuIHNlbGY7CisJcmV0dXJuIGRzbzsKIH0KIAogc3RhdGljIHN0cnVjdCBkc28gKmRzb19fbmV3X2d1ZXN0X2tlcm5lbChzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwKIAkJCQkJY29uc3QgY2hhciAqbmFtZSkKIHsKIAljaGFyIGJmW1BBVEhfTUFYXTsKLQlzdHJ1Y3QgZHNvICpzZWxmID0gZHNvX19uZXcobmFtZSA/OiBtYWNoaW5lX19tbWFwX25hbWUobWFjaGluZSwgYmYsIHNpemVvZihiZikpKTsKLQotCWlmIChzZWxmICE9IE5VTEwpIHsKLQkJZHNvX19zZXRfc2hvcnRfbmFtZShzZWxmLCAiW2d1ZXN0Lmtlcm5lbF0iKTsKLQkJc2VsZi0+a2VybmVsID0gRFNPX1RZUEVfR1VFU1RfS0VSTkVMOworCXN0cnVjdCBkc28gKmRzbyA9IGRzb19fbmV3KG5hbWUgPzogbWFjaGluZV9fbW1hcF9uYW1lKG1hY2hpbmUsIGJmLAorCQkJCQkJCSAgICAgIHNpemVvZihiZikpKTsKKwlpZiAoZHNvICE9IE5VTEwpIHsKKwkJZHNvX19zZXRfc2hvcnRfbmFtZShkc28sICJbZ3Vlc3Qua2VybmVsXSIpOworCQlkc28tPmtlcm5lbCA9IERTT19UWVBFX0dVRVNUX0tFUk5FTDsKIAl9CiAKLQlyZXR1cm4gc2VsZjsKKwlyZXR1cm4gZHNvOwogfQogCi12b2lkIGRzb19fcmVhZF9ydW5uaW5nX2tlcm5lbF9idWlsZF9pZChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKK3ZvaWQgZHNvX19yZWFkX3J1bm5pbmdfa2VybmVsX2J1aWxkX2lkKHN0cnVjdCBkc28gKmRzbywgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpCiB7CiAJY2hhciBwYXRoW1BBVEhfTUFYXTsKIAogCWlmIChtYWNoaW5lX19pc19kZWZhdWx0X2d1ZXN0KG1hY2hpbmUpKQogCQlyZXR1cm47CiAJc3ByaW50ZihwYXRoLCAiJXMvc3lzL2tlcm5lbC9ub3RlcyIsIG1hY2hpbmUtPnJvb3RfZGlyKTsKLQlpZiAoc3lzZnNfX3JlYWRfYnVpbGRfaWQocGF0aCwgc2VsZi0+YnVpbGRfaWQsCi0JCQkJIHNpemVvZihzZWxmLT5idWlsZF9pZCkpID09IDApCi0JCXNlbGYtPmhhc19idWlsZF9pZCA9IHRydWU7CisJaWYgKHN5c2ZzX19yZWFkX2J1aWxkX2lkKHBhdGgsIGRzby0+YnVpbGRfaWQsCisJCQkJIHNpemVvZihkc28tPmJ1aWxkX2lkKSkgPT0gMCkKKwkJZHNvLT5oYXNfYnVpbGRfaWQgPSB0cnVlOwogfQogCi1zdGF0aWMgc3RydWN0IGRzbyAqbWFjaGluZV9fY3JlYXRlX2tlcm5lbChzdHJ1Y3QgbWFjaGluZSAqc2VsZikKK3N0YXRpYyBzdHJ1Y3QgZHNvICptYWNoaW5lX19jcmVhdGVfa2VybmVsKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKQogewogCWNvbnN0IGNoYXIgKnZtbGludXhfbmFtZSA9IE5VTEw7CiAJc3RydWN0IGRzbyAqa2VybmVsOwogCi0JaWYgKG1hY2hpbmVfX2lzX2hvc3Qoc2VsZikpIHsKKwlpZiAobWFjaGluZV9faXNfaG9zdChtYWNoaW5lKSkgewogCQl2bWxpbnV4X25hbWUgPSBzeW1ib2xfY29uZi52bWxpbnV4X25hbWU7CiAJCWtlcm5lbCA9IGRzb19fbmV3X2tlcm5lbCh2bWxpbnV4X25hbWUpOwogCX0gZWxzZSB7Ci0JCWlmIChtYWNoaW5lX19pc19kZWZhdWx0X2d1ZXN0KHNlbGYpKQorCQlpZiAobWFjaGluZV9faXNfZGVmYXVsdF9ndWVzdChtYWNoaW5lKSkKIAkJCXZtbGludXhfbmFtZSA9IHN5bWJvbF9jb25mLmRlZmF1bHRfZ3Vlc3Rfdm1saW51eF9uYW1lOwotCQlrZXJuZWwgPSBkc29fX25ld19ndWVzdF9rZXJuZWwoc2VsZiwgdm1saW51eF9uYW1lKTsKKwkJa2VybmVsID0gZHNvX19uZXdfZ3Vlc3Rfa2VybmVsKG1hY2hpbmUsIHZtbGludXhfbmFtZSk7CiAJfQogCiAJaWYgKGtlcm5lbCAhPSBOVUxMKSB7Ci0JCWRzb19fcmVhZF9ydW5uaW5nX2tlcm5lbF9idWlsZF9pZChrZXJuZWwsIHNlbGYpOwotCQlkc29zX19hZGQoJnNlbGYtPmtlcm5lbF9kc29zLCBrZXJuZWwpOworCQlkc29fX3JlYWRfcnVubmluZ19rZXJuZWxfYnVpbGRfaWQoa2VybmVsLCBtYWNoaW5lKTsKKwkJZHNvc19fYWRkKCZtYWNoaW5lLT5rZXJuZWxfZHNvcywga2VybmVsKTsKIAl9CiAJcmV0dXJuIGtlcm5lbDsKIH0KQEAgLTIyMzYsNDEgKzIyNDUsNDMgQEAKIAlyZXR1cm4gYXJncy5zdGFydDsKIH0KIAotaW50IF9fbWFjaGluZV9fY3JlYXRlX2tlcm5lbF9tYXBzKHN0cnVjdCBtYWNoaW5lICpzZWxmLCBzdHJ1Y3QgZHNvICprZXJuZWwpCitpbnQgX19tYWNoaW5lX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIHN0cnVjdCBkc28gKmtlcm5lbCkKIHsKIAllbnVtIG1hcF90eXBlIHR5cGU7Ci0JdTY0IHN0YXJ0ID0gbWFjaGluZV9fZ2V0X2tlcm5lbF9zdGFydF9hZGRyKHNlbGYpOworCXU2NCBzdGFydCA9IG1hY2hpbmVfX2dldF9rZXJuZWxfc3RhcnRfYWRkcihtYWNoaW5lKTsKIAogCWZvciAodHlwZSA9IDA7IHR5cGUgPCBNQVBfX05SX1RZUEVTOyArK3R5cGUpIHsKIAkJc3RydWN0IGttYXAgKmttYXA7CiAKLQkJc2VsZi0+dm1saW51eF9tYXBzW3R5cGVdID0gbWFwX19uZXcyKHN0YXJ0LCBrZXJuZWwsIHR5cGUpOwotCQlpZiAoc2VsZi0+dm1saW51eF9tYXBzW3R5cGVdID09IE5VTEwpCisJCW1hY2hpbmUtPnZtbGludXhfbWFwc1t0eXBlXSA9IG1hcF9fbmV3MihzdGFydCwga2VybmVsLCB0eXBlKTsKKwkJaWYgKG1hY2hpbmUtPnZtbGludXhfbWFwc1t0eXBlXSA9PSBOVUxMKQogCQkJcmV0dXJuIC0xOwogCi0JCXNlbGYtPnZtbGludXhfbWFwc1t0eXBlXS0+bWFwX2lwID0KLQkJCXNlbGYtPnZtbGludXhfbWFwc1t0eXBlXS0+dW5tYXBfaXAgPSBpZGVudGl0eV9fbWFwX2lwOwotCi0JCWttYXAgPSBtYXBfX2ttYXAoc2VsZi0+dm1saW51eF9tYXBzW3R5cGVdKTsKLQkJa21hcC0+a21hcHMgPSAmc2VsZi0+a21hcHM7Ci0JCW1hcF9ncm91cHNfX2luc2VydCgmc2VsZi0+a21hcHMsIHNlbGYtPnZtbGludXhfbWFwc1t0eXBlXSk7CisJCW1hY2hpbmUtPnZtbGludXhfbWFwc1t0eXBlXS0+bWFwX2lwID0KKwkJCW1hY2hpbmUtPnZtbGludXhfbWFwc1t0eXBlXS0+dW5tYXBfaXAgPQorCQkJCWlkZW50aXR5X19tYXBfaXA7CisJCWttYXAgPSBtYXBfX2ttYXAobWFjaGluZS0+dm1saW51eF9tYXBzW3R5cGVdKTsKKwkJa21hcC0+a21hcHMgPSAmbWFjaGluZS0+a21hcHM7CisJCW1hcF9ncm91cHNfX2luc2VydCgmbWFjaGluZS0+a21hcHMsCisJCQkJICAgbWFjaGluZS0+dm1saW51eF9tYXBzW3R5cGVdKTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBtYWNoaW5lX19kZXN0cm95X2tlcm5lbF9tYXBzKHN0cnVjdCBtYWNoaW5lICpzZWxmKQordm9pZCBtYWNoaW5lX19kZXN0cm95X2tlcm5lbF9tYXBzKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKQogewogCWVudW0gbWFwX3R5cGUgdHlwZTsKIAogCWZvciAodHlwZSA9IDA7IHR5cGUgPCBNQVBfX05SX1RZUEVTOyArK3R5cGUpIHsKIAkJc3RydWN0IGttYXAgKmttYXA7CiAKLQkJaWYgKHNlbGYtPnZtbGludXhfbWFwc1t0eXBlXSA9PSBOVUxMKQorCQlpZiAobWFjaGluZS0+dm1saW51eF9tYXBzW3R5cGVdID09IE5VTEwpCiAJCQljb250aW51ZTsKIAotCQlrbWFwID0gbWFwX19rbWFwKHNlbGYtPnZtbGludXhfbWFwc1t0eXBlXSk7Ci0JCW1hcF9ncm91cHNfX3JlbW92ZSgmc2VsZi0+a21hcHMsIHNlbGYtPnZtbGludXhfbWFwc1t0eXBlXSk7CisJCWttYXAgPSBtYXBfX2ttYXAobWFjaGluZS0+dm1saW51eF9tYXBzW3R5cGVdKTsKKwkJbWFwX2dyb3Vwc19fcmVtb3ZlKCZtYWNoaW5lLT5rbWFwcywKKwkJCQkgICBtYWNoaW5lLT52bWxpbnV4X21hcHNbdHlwZV0pOwogCQlpZiAoa21hcC0+cmVmX3JlbG9jX3N5bSkgewogCQkJLyoKIAkJCSAqIHJlZl9yZWxvY19zeW0gaXMgc2hhcmVkIGFtb25nIGFsbCBtYXBzLCBzbyBmcmVlIGp1c3QKQEAgLTIyODQsMjUgKzIyOTUsMjUgQEAKIAkJCWttYXAtPnJlZl9yZWxvY19zeW0gPSBOVUxMOwogCQl9CiAKLQkJbWFwX19kZWxldGUoc2VsZi0+dm1saW51eF9tYXBzW3R5cGVdKTsKLQkJc2VsZi0+dm1saW51eF9tYXBzW3R5cGVdID0gTlVMTDsKKwkJbWFwX19kZWxldGUobWFjaGluZS0+dm1saW51eF9tYXBzW3R5cGVdKTsKKwkJbWFjaGluZS0+dm1saW51eF9tYXBzW3R5cGVdID0gTlVMTDsKIAl9CiB9CiAKLWludCBtYWNoaW5lX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IG1hY2hpbmUgKnNlbGYpCitpbnQgbWFjaGluZV9fY3JlYXRlX2tlcm5lbF9tYXBzKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKQogewotCXN0cnVjdCBkc28gKmtlcm5lbCA9IG1hY2hpbmVfX2NyZWF0ZV9rZXJuZWwoc2VsZik7CisJc3RydWN0IGRzbyAqa2VybmVsID0gbWFjaGluZV9fY3JlYXRlX2tlcm5lbChtYWNoaW5lKTsKIAogCWlmIChrZXJuZWwgPT0gTlVMTCB8fAotCSAgICBfX21hY2hpbmVfX2NyZWF0ZV9rZXJuZWxfbWFwcyhzZWxmLCBrZXJuZWwpIDwgMCkKKwkgICAgX19tYWNoaW5lX19jcmVhdGVfa2VybmVsX21hcHMobWFjaGluZSwga2VybmVsKSA8IDApCiAJCXJldHVybiAtMTsKIAotCWlmIChzeW1ib2xfY29uZi51c2VfbW9kdWxlcyAmJiBtYWNoaW5lX19jcmVhdGVfbW9kdWxlcyhzZWxmKSA8IDApCisJaWYgKHN5bWJvbF9jb25mLnVzZV9tb2R1bGVzICYmIG1hY2hpbmVfX2NyZWF0ZV9tb2R1bGVzKG1hY2hpbmUpIDwgMCkKIAkJcHJfZGVidWcoIlByb2JsZW1zIGNyZWF0aW5nIG1vZHVsZSBtYXBzLCBjb250aW51aW5nIGFueXdheS4uLlxuIik7CiAJLyoKIAkgKiBOb3cgdGhhdCB3ZSBoYXZlIGFsbCB0aGUgbWFwcyBjcmVhdGVkLCBqdXN0IHNldCB0aGUgLT5lbmQgb2YgdGhlbToKIAkgKi8KLQltYXBfZ3JvdXBzX19maXh1cF9lbmQoJnNlbGYtPmttYXBzKTsKKwltYXBfZ3JvdXBzX19maXh1cF9lbmQoJm1hY2hpbmUtPmttYXBzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjM2NiwxMSArMjM3NywxMSBAQAogCXJldHVybiAtMTsKIH0KIAotc2l6ZV90IG1hY2hpbmVfX2ZwcmludGZfdm1saW51eF9wYXRoKHN0cnVjdCBtYWNoaW5lICpzZWxmLCBGSUxFICpmcCkKK3NpemVfdCBtYWNoaW5lX19mcHJpbnRmX3ZtbGludXhfcGF0aChzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgRklMRSAqZnApCiB7CiAJaW50IGk7CiAJc2l6ZV90IHByaW50ZWQgPSAwOwotCXN0cnVjdCBkc28gKmtkc28gPSBzZWxmLT52bWxpbnV4X21hcHNbTUFQX19GVU5DVElPTl0tPmRzbzsKKwlzdHJ1Y3QgZHNvICprZHNvID0gbWFjaGluZS0+dm1saW51eF9tYXBzW01BUF9fRlVOQ1RJT05dLT5kc287CiAKIAlpZiAoa2Rzby0+aGFzX2J1aWxkX2lkKSB7CiAJCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOwpAQCAtMjQ2Nyw5ICsyNDc4LDkgQEAKIAlzeW1ib2xfY29uZi5pbml0aWFsaXplZCA9IGZhbHNlOwogfQogCi1pbnQgbWFjaGluZXNfX2NyZWF0ZV9rZXJuZWxfbWFwcyhzdHJ1Y3QgcmJfcm9vdCAqc2VsZiwgcGlkX3QgcGlkKQoraW50IG1hY2hpbmVzX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IHJiX3Jvb3QgKm1hY2hpbmVzLCBwaWRfdCBwaWQpCiB7Ci0Jc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUgPSBtYWNoaW5lc19fZmluZG5ldyhzZWxmLCBwaWQpOworCXN0cnVjdCBtYWNoaW5lICptYWNoaW5lID0gbWFjaGluZXNfX2ZpbmRuZXcobWFjaGluZXMsIHBpZCk7CiAKIAlpZiAobWFjaGluZSA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CkBAIC0yNTIwLDcgKzI1MzEsNyBAQAogCXJldHVybiBzOwogfQogCi1pbnQgbWFjaGluZXNfX2NyZWF0ZV9ndWVzdF9rZXJuZWxfbWFwcyhzdHJ1Y3QgcmJfcm9vdCAqc2VsZikKK2ludCBtYWNoaW5lc19fY3JlYXRlX2d1ZXN0X2tlcm5lbF9tYXBzKHN0cnVjdCByYl9yb290ICptYWNoaW5lcykKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgZGlyZW50ICoqbmFtZWxpc3QgPSBOVUxMOwpAQCAtMjUzMSw3ICsyNTQyLDcgQEAKIAlpZiAoc3ltYm9sX2NvbmYuZGVmYXVsdF9ndWVzdF92bWxpbnV4X25hbWUgfHwKIAkgICAgc3ltYm9sX2NvbmYuZGVmYXVsdF9ndWVzdF9tb2R1bGVzIHx8CiAJICAgIHN5bWJvbF9jb25mLmRlZmF1bHRfZ3Vlc3Rfa2FsbHN5bXMpIHsKLQkJbWFjaGluZXNfX2NyZWF0ZV9rZXJuZWxfbWFwcyhzZWxmLCBERUZBVUxUX0dVRVNUX0tFUk5FTF9JRCk7CisJCW1hY2hpbmVzX19jcmVhdGVfa2VybmVsX21hcHMobWFjaGluZXMsIERFRkFVTFRfR1VFU1RfS0VSTkVMX0lEKTsKIAl9CiAKIAlpZiAoc3ltYm9sX2NvbmYuZ3Vlc3Rtb3VudCkgewpAQCAtMjU1Miw3ICsyNTYzLDcgQEAKIAkJCQlwcl9kZWJ1ZygiQ2FuJ3QgYWNjZXNzIGZpbGUgJXNcbiIsIHBhdGgpOwogCQkJCWdvdG8gZmFpbHVyZTsKIAkJCX0KLQkJCW1hY2hpbmVzX19jcmVhdGVfa2VybmVsX21hcHMoc2VsZiwgcGlkKTsKKwkJCW1hY2hpbmVzX19jcmVhdGVfa2VybmVsX21hcHMobWFjaGluZXMsIHBpZCk7CiAJCX0KIGZhaWx1cmU6CiAJCWZyZWUobmFtZWxpc3QpOwpAQCAtMjU2MSwyMyArMjU3MiwyMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgbWFjaGluZXNfX2Rlc3Ryb3lfZ3Vlc3Rfa2VybmVsX21hcHMoc3RydWN0IHJiX3Jvb3QgKnNlbGYpCit2b2lkIG1hY2hpbmVzX19kZXN0cm95X2d1ZXN0X2tlcm5lbF9tYXBzKHN0cnVjdCByYl9yb290ICptYWNoaW5lcykKIHsKLQlzdHJ1Y3QgcmJfbm9kZSAqbmV4dCA9IHJiX2ZpcnN0KHNlbGYpOworCXN0cnVjdCByYl9ub2RlICpuZXh0ID0gcmJfZmlyc3QobWFjaGluZXMpOwogCiAJd2hpbGUgKG5leHQpIHsKIAkJc3RydWN0IG1hY2hpbmUgKnBvcyA9IHJiX2VudHJ5KG5leHQsIHN0cnVjdCBtYWNoaW5lLCByYl9ub2RlKTsKIAogCQluZXh0ID0gcmJfbmV4dCgmcG9zLT5yYl9ub2RlKTsKLQkJcmJfZXJhc2UoJnBvcy0+cmJfbm9kZSwgc2VsZik7CisJCXJiX2VyYXNlKCZwb3MtPnJiX25vZGUsIG1hY2hpbmVzKTsKIAkJbWFjaGluZV9fZGVsZXRlKHBvcyk7CiAJfQogfQogCi1pbnQgbWFjaGluZV9fbG9hZF9rYWxsc3ltcyhzdHJ1Y3QgbWFjaGluZSAqc2VsZiwgY29uc3QgY2hhciAqZmlsZW5hbWUsCitpbnQgbWFjaGluZV9fbG9hZF9rYWxsc3ltcyhzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJCQkgICBlbnVtIG1hcF90eXBlIHR5cGUsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCiB7Ci0Jc3RydWN0IG1hcCAqbWFwID0gc2VsZi0+dm1saW51eF9tYXBzW3R5cGVdOworCXN0cnVjdCBtYXAgKm1hcCA9IG1hY2hpbmUtPnZtbGludXhfbWFwc1t0eXBlXTsKIAlpbnQgcmV0ID0gZHNvX19sb2FkX2thbGxzeW1zKG1hcC0+ZHNvLCBmaWxlbmFtZSwgbWFwLCBmaWx0ZXIpOwogCiAJaWYgKHJldCA+IDApIHsKQEAgLTI1ODcsMTYgKzI1OTgsMTYgQEAKIAkJICoga2VybmVsLCB3aXRoIG1vZHVsZXMgYmV0d2VlbiB0aGVtLCBmaXh1cCB0aGUgZW5kIG9mIGFsbAogCQkgKiBzZWN0aW9ucy4KIAkJICovCi0JCV9fbWFwX2dyb3Vwc19fZml4dXBfZW5kKCZzZWxmLT5rbWFwcywgdHlwZSk7CisJCV9fbWFwX2dyb3Vwc19fZml4dXBfZW5kKCZtYWNoaW5lLT5rbWFwcywgdHlwZSk7CiAJfQogCiAJcmV0dXJuIHJldDsKIH0KIAotaW50IG1hY2hpbmVfX2xvYWRfdm1saW51eF9wYXRoKHN0cnVjdCBtYWNoaW5lICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUsCitpbnQgbWFjaGluZV9fbG9hZF92bWxpbnV4X3BhdGgoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIGVudW0gbWFwX3R5cGUgdHlwZSwKIAkJCSAgICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewotCXN0cnVjdCBtYXAgKm1hcCA9IHNlbGYtPnZtbGludXhfbWFwc1t0eXBlXTsKKwlzdHJ1Y3QgbWFwICptYXAgPSBtYWNoaW5lLT52bWxpbnV4X21hcHNbdHlwZV07CiAJaW50IHJldCA9IGRzb19fbG9hZF92bWxpbnV4X3BhdGgobWFwLT5kc28sIG1hcCwgZmlsdGVyKTsKIAogCWlmIChyZXQgPiAwKSB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmggYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKaW5kZXggNzEzYjBiNC4uMjQyZGUwMSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaApAQCAtNjIsNyArNjIsNyBAQAogCWNoYXIJCW5hbWVbMF07CiB9OwogCi12b2lkIHN5bWJvbF9fZGVsZXRlKHN0cnVjdCBzeW1ib2wgKnNlbGYpOwordm9pZCBzeW1ib2xfX2RlbGV0ZShzdHJ1Y3Qgc3ltYm9sICpzeW0pOwogCiBzdHJ1Y3Qgc3RybGlzdDsKIApAQCAtOTYsOSArOTYsOSBAQAogCiBleHRlcm4gc3RydWN0IHN5bWJvbF9jb25mIHN5bWJvbF9jb25mOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgKnN5bWJvbF9fcHJpdihzdHJ1Y3Qgc3ltYm9sICpzZWxmKQorc3RhdGljIGlubGluZSB2b2lkICpzeW1ib2xfX3ByaXYoc3RydWN0IHN5bWJvbCAqc3ltKQogewotCXJldHVybiAoKHZvaWQgKilzZWxmKSAtIHN5bWJvbF9jb25mLnByaXZfc2l6ZTsKKwlyZXR1cm4gKCh2b2lkICopc3ltKSAtIHN5bWJvbF9jb25mLnByaXZfc2l6ZTsKIH0KIAogc3RydWN0IHJlZl9yZWxvY19zeW0gewpAQCAtMTU1LDQzICsxNTUsNDUgQEAKIAogc3RydWN0IGRzbyAqZHNvX19uZXcoY29uc3QgY2hhciAqbmFtZSk7CiBzdHJ1Y3QgZHNvICpkc29fX25ld19rZXJuZWwoY29uc3QgY2hhciAqbmFtZSk7Ci12b2lkIGRzb19fZGVsZXRlKHN0cnVjdCBkc28gKnNlbGYpOwordm9pZCBkc29fX2RlbGV0ZShzdHJ1Y3QgZHNvICpkc28pOwogCi1pbnQgZHNvX19uYW1lX2xlbihjb25zdCBzdHJ1Y3QgZHNvICpzZWxmKTsKK2ludCBkc29fX25hbWVfbGVuKGNvbnN0IHN0cnVjdCBkc28gKmRzbyk7CiAKLWJvb2wgZHNvX19sb2FkZWQoY29uc3Qgc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlKTsKLWJvb2wgZHNvX19zb3J0ZWRfYnlfbmFtZShjb25zdCBzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpOworYm9vbCBkc29fX2xvYWRlZChjb25zdCBzdHJ1Y3QgZHNvICpkc28sIGVudW0gbWFwX3R5cGUgdHlwZSk7Citib29sIGRzb19fc29ydGVkX2J5X25hbWUoY29uc3Qgc3RydWN0IGRzbyAqZHNvLCBlbnVtIG1hcF90eXBlIHR5cGUpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgZHNvX19zZXRfbG9hZGVkKHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBkc29fX3NldF9sb2FkZWQoc3RydWN0IGRzbyAqZHNvLCBlbnVtIG1hcF90eXBlIHR5cGUpCiB7Ci0Jc2VsZi0+bG9hZGVkIHw9ICgxIDw8IHR5cGUpOworCWRzby0+bG9hZGVkIHw9ICgxIDw8IHR5cGUpOwogfQogCi12b2lkIGRzb19fc29ydF9ieV9uYW1lKHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSk7Cit2b2lkIGRzb19fc29ydF9ieV9uYW1lKHN0cnVjdCBkc28gKmRzbywgZW51bSBtYXBfdHlwZSB0eXBlKTsKIAogc3RydWN0IGRzbyAqX19kc29zX19maW5kbmV3KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGNvbnN0IGNoYXIgKm5hbWUpOwogCi1pbnQgZHNvX19sb2FkKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7Ci1pbnQgZHNvX19sb2FkX3ZtbGludXgoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAoraW50IGRzb19fbG9hZChzdHJ1Y3QgZHNvICpkc28sIHN0cnVjdCBtYXAgKm1hcCwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CitpbnQgZHNvX19sb2FkX3ZtbGludXgoc3RydWN0IGRzbyAqZHNvLCBzdHJ1Y3QgbWFwICptYXAsCiAJCSAgICAgIGNvbnN0IGNoYXIgKnZtbGludXgsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOwotaW50IGRzb19fbG9hZF92bWxpbnV4X3BhdGgoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAoraW50IGRzb19fbG9hZF92bWxpbnV4X3BhdGgoc3RydWN0IGRzbyAqZHNvLCBzdHJ1Y3QgbWFwICptYXAsCiAJCQkgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKLWludCBkc29fX2xvYWRfa2FsbHN5bXMoc3RydWN0IGRzbyAqc2VsZiwgY29uc3QgY2hhciAqZmlsZW5hbWUsIHN0cnVjdCBtYXAgKm1hcCwKK2ludCBkc29fX2xvYWRfa2FsbHN5bXMoc3RydWN0IGRzbyAqZHNvLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgc3RydWN0IG1hcCAqbWFwLAogCQkgICAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7Ci1pbnQgbWFjaGluZV9fbG9hZF9rYWxsc3ltcyhzdHJ1Y3QgbWFjaGluZSAqc2VsZiwgY29uc3QgY2hhciAqZmlsZW5hbWUsCitpbnQgbWFjaGluZV9fbG9hZF9rYWxsc3ltcyhzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJCQkgICBlbnVtIG1hcF90eXBlIHR5cGUsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOwotaW50IG1hY2hpbmVfX2xvYWRfdm1saW51eF9wYXRoKHN0cnVjdCBtYWNoaW5lICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUsCitpbnQgbWFjaGluZV9fbG9hZF92bWxpbnV4X3BhdGgoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIGVudW0gbWFwX3R5cGUgdHlwZSwKIAkJCSAgICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKIAogc2l6ZV90IF9fZHNvc19fZnByaW50ZihzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBGSUxFICpmcCk7CiAKLXNpemVfdCBtYWNoaW5lX19mcHJpbnRmX2Rzb3NfYnVpbGRpZChzdHJ1Y3QgbWFjaGluZSAqc2VsZiwgRklMRSAqZnAsIGJvb2wgd2l0aF9oaXRzKTsKLXNpemVfdCBtYWNoaW5lc19fZnByaW50Zl9kc29zKHN0cnVjdCByYl9yb290ICpzZWxmLCBGSUxFICpmcCk7Ci1zaXplX3QgbWFjaGluZXNfX2ZwcmludGZfZHNvc19idWlsZGlkKHN0cnVjdCByYl9yb290ICpzZWxmLCBGSUxFICpmcCwgYm9vbCB3aXRoX2hpdHMpOwotCi1zaXplX3QgZHNvX19mcHJpbnRmX2J1aWxkaWQoc3RydWN0IGRzbyAqc2VsZiwgRklMRSAqZnApOwotc2l6ZV90IGRzb19fZnByaW50Zl9zeW1ib2xzX2J5X25hbWUoc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlLCBGSUxFICpmcCk7Ci1zaXplX3QgZHNvX19mcHJpbnRmKHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSwgRklMRSAqZnApOworc2l6ZV90IG1hY2hpbmVfX2ZwcmludGZfZHNvc19idWlsZGlkKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAorCQkJCSAgICAgRklMRSAqZnAsIGJvb2wgd2l0aF9oaXRzKTsKK3NpemVfdCBtYWNoaW5lc19fZnByaW50Zl9kc29zKHN0cnVjdCByYl9yb290ICptYWNoaW5lcywgRklMRSAqZnApOworc2l6ZV90IG1hY2hpbmVzX19mcHJpbnRmX2Rzb3NfYnVpbGRpZChzdHJ1Y3QgcmJfcm9vdCAqbWFjaGluZXMsCisJCQkJICAgICAgRklMRSAqZnAsIGJvb2wgd2l0aF9oaXRzKTsKK3NpemVfdCBkc29fX2ZwcmludGZfYnVpbGRpZChzdHJ1Y3QgZHNvICpkc28sIEZJTEUgKmZwKTsKK3NpemVfdCBkc29fX2ZwcmludGZfc3ltYm9sc19ieV9uYW1lKHN0cnVjdCBkc28gKmRzbywKKwkJCQkgICAgZW51bSBtYXBfdHlwZSB0eXBlLCBGSUxFICpmcCk7CitzaXplX3QgZHNvX19mcHJpbnRmKHN0cnVjdCBkc28gKmRzbywgZW51bSBtYXBfdHlwZSB0eXBlLCBGSUxFICpmcCk7CiAKIGVudW0gc3ltdGFiX3R5cGUgewogCVNZTVRBQl9fS0FMTFNZTVMgPSAwLApAQCAtMjA3LDM0ICsyMDksMzYgQEAKIAlTWU1UQUJfX05PVF9GT1VORCwKIH07CiAKLWNoYXIgZHNvX19zeW10YWJfb3JpZ2luKGNvbnN0IHN0cnVjdCBkc28gKnNlbGYpOwotdm9pZCBkc29fX3NldF9sb25nX25hbWUoc3RydWN0IGRzbyAqc2VsZiwgY2hhciAqbmFtZSk7Ci12b2lkIGRzb19fc2V0X2J1aWxkX2lkKHN0cnVjdCBkc28gKnNlbGYsIHZvaWQgKmJ1aWxkX2lkKTsKLXZvaWQgZHNvX19yZWFkX3J1bm5pbmdfa2VybmVsX2J1aWxkX2lkKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKTsKLXN0cnVjdCBzeW1ib2wgKmRzb19fZmluZF9zeW1ib2woc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkcik7Ci1zdHJ1Y3Qgc3ltYm9sICpkc29fX2ZpbmRfc3ltYm9sX2J5X25hbWUoc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlLAorY2hhciBkc29fX3N5bXRhYl9vcmlnaW4oY29uc3Qgc3RydWN0IGRzbyAqZHNvKTsKK3ZvaWQgZHNvX19zZXRfbG9uZ19uYW1lKHN0cnVjdCBkc28gKmRzbywgY2hhciAqbmFtZSk7Cit2b2lkIGRzb19fc2V0X2J1aWxkX2lkKHN0cnVjdCBkc28gKmRzbywgdm9pZCAqYnVpbGRfaWQpOwordm9pZCBkc29fX3JlYWRfcnVubmluZ19rZXJuZWxfYnVpbGRfaWQoc3RydWN0IGRzbyAqZHNvLAorCQkJCSAgICAgICBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSk7CitzdHJ1Y3Qgc3ltYm9sICpkc29fX2ZpbmRfc3ltYm9sKHN0cnVjdCBkc28gKmRzbywgZW51bSBtYXBfdHlwZSB0eXBlLAorCQkJCXU2NCBhZGRyKTsKK3N0cnVjdCBzeW1ib2wgKmRzb19fZmluZF9zeW1ib2xfYnlfbmFtZShzdHJ1Y3QgZHNvICpkc28sIGVudW0gbWFwX3R5cGUgdHlwZSwKIAkJCQkJY29uc3QgY2hhciAqbmFtZSk7CiAKIGludCBmaWxlbmFtZV9fcmVhZF9idWlsZF9pZChjb25zdCBjaGFyICpmaWxlbmFtZSwgdm9pZCAqYmYsIHNpemVfdCBzaXplKTsKIGludCBzeXNmc19fcmVhZF9idWlsZF9pZChjb25zdCBjaGFyICpmaWxlbmFtZSwgdm9pZCAqYmYsIHNpemVfdCBzaXplKTsKIGJvb2wgX19kc29zX19yZWFkX2J1aWxkX2lkcyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBib29sIHdpdGhfaGl0cyk7Ci1pbnQgYnVpbGRfaWRfX3NwcmludGYoY29uc3QgdTggKnNlbGYsIGludCBsZW4sIGNoYXIgKmJmKTsKK2ludCBidWlsZF9pZF9fc3ByaW50Zihjb25zdCB1OCAqYnVpbGRfaWQsIGludCBsZW4sIGNoYXIgKmJmKTsKIGludCBrYWxsc3ltc19fcGFyc2UoY29uc3QgY2hhciAqZmlsZW5hbWUsIHZvaWQgKmFyZywKIAkJICAgIGludCAoKnByb2Nlc3Nfc3ltYm9sKSh2b2lkICphcmcsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJCSAgY2hhciB0eXBlLCB1NjQgc3RhcnQsIHU2NCBlbmQpKTsKIAotdm9pZCBtYWNoaW5lX19kZXN0cm95X2tlcm5lbF9tYXBzKHN0cnVjdCBtYWNoaW5lICpzZWxmKTsKLWludCBfX21hY2hpbmVfX2NyZWF0ZV9rZXJuZWxfbWFwcyhzdHJ1Y3QgbWFjaGluZSAqc2VsZiwgc3RydWN0IGRzbyAqa2VybmVsKTsKLWludCBtYWNoaW5lX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IG1hY2hpbmUgKnNlbGYpOwordm9pZCBtYWNoaW5lX19kZXN0cm95X2tlcm5lbF9tYXBzKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKTsKK2ludCBfX21hY2hpbmVfX2NyZWF0ZV9rZXJuZWxfbWFwcyhzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgc3RydWN0IGRzbyAqa2VybmVsKTsKK2ludCBtYWNoaW5lX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpOwogCi1pbnQgbWFjaGluZXNfX2NyZWF0ZV9rZXJuZWxfbWFwcyhzdHJ1Y3QgcmJfcm9vdCAqc2VsZiwgcGlkX3QgcGlkKTsKLWludCBtYWNoaW5lc19fY3JlYXRlX2d1ZXN0X2tlcm5lbF9tYXBzKHN0cnVjdCByYl9yb290ICpzZWxmKTsKLXZvaWQgbWFjaGluZXNfX2Rlc3Ryb3lfZ3Vlc3Rfa2VybmVsX21hcHMoc3RydWN0IHJiX3Jvb3QgKnNlbGYpOworaW50IG1hY2hpbmVzX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IHJiX3Jvb3QgKm1hY2hpbmVzLCBwaWRfdCBwaWQpOworaW50IG1hY2hpbmVzX19jcmVhdGVfZ3Vlc3Rfa2VybmVsX21hcHMoc3RydWN0IHJiX3Jvb3QgKm1hY2hpbmVzKTsKK3ZvaWQgbWFjaGluZXNfX2Rlc3Ryb3lfZ3Vlc3Rfa2VybmVsX21hcHMoc3RydWN0IHJiX3Jvb3QgKm1hY2hpbmVzKTsKIAogaW50IHN5bWJvbF9faW5pdCh2b2lkKTsKIHZvaWQgc3ltYm9sX19leGl0KHZvaWQpOwogYm9vbCBzeW1ib2xfdHlwZV9faXNfYShjaGFyIHN5bWJvbF90eXBlLCBlbnVtIG1hcF90eXBlIG1hcF90eXBlKTsKIAotc2l6ZV90IG1hY2hpbmVfX2ZwcmludGZfdm1saW51eF9wYXRoKHN0cnVjdCBtYWNoaW5lICpzZWxmLCBGSUxFICpmcCk7CitzaXplX3QgbWFjaGluZV9fZnByaW50Zl92bWxpbnV4X3BhdGgoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIEZJTEUgKmZwKTsKIAogI2VuZGlmIC8qIF9fUEVSRl9TWU1CT0wgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wYXJzZS5jIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBhcnNlLmMKaW5kZXggMGE3ZWQ1Yi4uMWU4ODQ4NSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBhcnNlLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBhcnNlLmMKQEAgLTIxODcsNyArMjE4Nyw2IEBACiAJeyAiVEFTS0xFVF9TT0ZUSVJRIiwgNiB9LAogCXsgIlNDSEVEX1NPRlRJUlEiLCA3IH0sCiAJeyAiSFJUSU1FUl9TT0ZUSVJRIiwgOCB9LAotCXsgIlJDVV9TT0ZUSVJRIiwgOSB9LAogCiAJeyAiSFJUSU1FUl9OT1JFU1RBUlQiLCAwIH0sCiAJeyAiSFJUSU1FUl9SRVNUQVJUIiwgMSB9LAo=